pax_global_header00006660000000000000000000000064147602552510014521gustar00rootroot0000000000000052 comment=ab9df9cfc39de7a49967f18387b6b76310947442 libwebsockets-4.3.5/000077500000000000000000000000001476025525100143725ustar00rootroot00000000000000libwebsockets-4.3.5/.gitignore000066400000000000000000000014261476025525100163650ustar00rootroot00000000000000#Ignore build files CMakeCache.txt CMakeFiles build cmake_install.cmake lws-minimal* Makefile .cproject .project config.h config.log config.status libtool stamp-h1 output/ win32port/ipch/ win32port/Debug*/ win32port/Release*/ win32port/server/Debug*/ win32port/server/Release*/ win32port/client/Debug*/ win32port/client/Release*/ win32port/libwebsocketswin32/Debug*/ win32port/libwebsocketswin32/Release*/ win32port/zlib/Debug*/ win32port/zlib/Release*/ *.vcxproj.user *.opensdf *.sdf *.suo *.su *.m4 *.a missing depcomp install-sh configure compile config.guess *~ *.orig autom4te.cache/ ltmain.sh config.sub ar-lib libwebsockets.pc build/ *.swp doc /build2/ /build3/ /cov-int/ /.vs/ /build-mtls/ /build-mingw64/ /n9/ /bb/ /openssl3/ /bb-linkit/ /bq/ /cros/ /q/ /b1/ /destdir/ /bb1/ /bb3/ libwebsockets-4.3.5/.mailmap000066400000000000000000000001471476025525100160150ustar00rootroot00000000000000Andy Green Joakim Söderberg libwebsockets-4.3.5/.sai.json000066400000000000000000000546611476025525100161330ustar00rootroot00000000000000{ "schema": "sai-1", # We're doing separate install into destdir so that the test server # has somewhere to go to find its /usr/share content like certs "platforms": { "linux-debian-11/x86_64-amd/gcc": { "build": "mkdir build destdir;cd build;export CCACHE_DISABLE=1;export LD_LIBRARY_PATH=../destdir/usr/local/share/libwebsockets-test-server/plugins:../destdir/usr/local/lib;export SAI_CPACK=\"-G DEB\";cmake .. ${cmake} && make -j4 && rm -rf ../destdir && make -j DESTDIR=../destdir install && ctest -j2 --output-on-failure ${cpack}" }, "linux-debian-buster/x86-amd/gcc": { "build": "mkdir build destdir;cd build;export CCACHE_DISABLE=1;export LD_LIBRARY_PATH=../destdir/usr/local/share/libwebsockets-test-server/plugins:../destdir/usr/local/lib;export SAI_CPACK=\"-G DEB\";cmake .. ${cmake} && make -j4 && rm -rf ../destdir && make -j DESTDIR=../destdir install && ctest -j2 --output-on-failure ${cpack}" }, "linux-debian-sid/x86_64-amd/gcc": { "build": "mkdir build destdir;cd build;export CCACHE_DISABLE=1;export LD_LIBRARY_PATH=../destdir/usr/local/share/libwebsockets-test-server/plugins:../destdir/usr/local/lib;export SAI_CPACK=\"-G DEB\";cmake .. ${cmake} && make -j4 && rm -rf ../destdir && make -j DESTDIR=../destdir install && ctest -j2 --output-on-failure ${cpack}" }, "linux-ubuntu-xenial/x86_64-amd/gcc": { "build": "mkdir build destdir;cd build;export CCACHE_DISABLE=1;export LD_LIBRARY_PATH=../destdir/usr/local/share/libwebsockets-test-server/plugins:../destdir/usr/local/lib;export SAI_CPACK=\"-G DEB\";cmake .. ${cmake} && make -j4 && rm -rf ../destdir && make -j DESTDIR=../destdir install && ctest -j2 --output-on-failure ${cpack}" }, "linux-debian-sid/x86-amd/gcc": { "build": "mkdir build destdir;cd build;export CCACHE_DISABLE=1;export LD_LIBRARY_PATH=../destdir/usr/local/share/libwebsockets-test-server/plugins:../destdir/usr/local/lib;export SAI_CPACK=\"-G DEB\";cmake .. ${cmake} && make -j4 && rm -rf ../destdir && make -j DESTDIR=../destdir install && ctest -j2 --output-on-failure ${cpack}" }, "linux-debian-sid/x86_64-amd/gcc": { "build": "mkdir build destdir;cd build;export CCACHE_DISABLE=1;export LD_LIBRARY_PATH=../destdir/usr/local/share/libwebsockets-test-server/plugins:../destdir/usr/local/lib;export SAI_CPACK=\"-G DEB\";cmake .. ${cmake} && make -j4 && rm -rf ../destdir && make -j DESTDIR=../destdir install && ctest -j2 --output-on-failure ${cpack}" }, "linux-ubuntu-1804/x86_64-amd/gcc": { "build": "mkdir build destdir;cd build;export CCACHE_DISABLE=1;export LD_LIBRARY_PATH=../destdir/usr/local/share/libwebsockets-test-server/plugins:../destdir/usr/local/lib;export SAI_CPACK=\"-G DEB\";cmake .. ${cmake} && make -j4 && rm -rf ../destdir && make -j DESTDIR=../destdir install && ctest -j2 --output-on-failure ${cpack}" }, "linux-ubuntu-2004/x86_64-amd/gcc": { "build": "mkdir build destdir;cd build;export CCACHE_DISABLE=1;export LD_LIBRARY_PATH=../destdir/usr/local/share/libwebsockets-test-server/plugins:../destdir/usr/local/lib;export SAI_CPACK=\"-G DEB\";cmake .. ${cmake} && make -j4 && rm -rf ../destdir && make -j DESTDIR=../destdir install && ctest -j2 --output-on-failure ${cpack}" }, "linux-fedora-32/x86_64-amd/gcc": { "build": "rm -rf build destdir ; mkdir build destdir;cd build;export CCACHE_DISABLE=1;export LD_LIBRARY_PATH=../destdir/usr/local/share/libwebsockets-test-server/plugins:../destdir/usr/local/lib;export SAI_CPACK=\"-G RPM\";cmake .. ${cmake} && make -j4 && rm -rf ../destdir && make -j DESTDIR=../destdir install && ctest -j2 --output-on-failure ${cpack}" }, "linux-gentoo/x86_64-amd/gcc": { "build": "mkdir build destdir;cd build;export CCACHE_DISABLE=1;export LD_LIBRARY_PATH=../destdir/usr/local/share/libwebsockets-test-server/plugins:../destdir/usr/local/lib;export SAI_CPACK=\"-G ZIP\";cmake .. ${cmake} && make -j4 && rm -rf ../destdir && make -j DESTDIR=../destdir install && ctest -j2 --output-on-failure ${cpack}" }, "linux-centos-7/x86_64-amd/gcc": { "build": "mkdir build destdir;cd build;export CCACHE_DISABLE=1;export LD_LIBRARY_PATH=../destdir/usr/local/share/libwebsockets-test-server/plugins:../destdir/usr/local/lib;export SAI_CPACK=\"-G RPM\";cmake .. ${cmake} && make -j4 && rm -rf ../destdir && make -j DESTDIR=../destdir install && ctest -j2 --output-on-failure ${cpack}" }, "linux-centos-8/x86_64-amd/gcc": { "build": "mkdir build destdir;cd build;export CCACHE_DISABLE=1;export LD_LIBRARY_PATH=../destdir/usr/local/share/libwebsockets-test-server/plugins:../destdir/usr/local/lib;export SAI_CPACK=\"-G RPM\";cmake .. ${cmake} && make -j4 && rm -rf ../destdir && make -j DESTDIR=../destdir install && ctest -j2 --output-on-failure ${cpack}" }, "linux-centos-8/aarch64-a72-bcm2711-rpi4/gcc": { "build": "mkdir build destdir;cd build;export CCACHE_DISABLE=1;export LD_LIBRARY_PATH=../destdir/usr/local/share/libwebsockets-test-server/plugins:../destdir/usr/local/lib;export SAI_CPACK=\"-G RPM\";cmake .. ${cmake} && make -j4 && rm -rf ../destdir && make -j DESTDIR=../destdir install && ctest -j2 --output-on-failure ${cpack}" }, "linux-ubuntu-2004/aarch64-a72-bcm2711-rpi4/gcc": { "build": "mkdir build;cd build;export CCACHE_DISABLE=1;export LD_LIBRARY_PATH=../destdir/usr/local/share/libwebsockets-test-server/plugins:../destdir/usr/local/lib;export SAI_CPACK=\"-G DEB\";cmake .. ${cmake} && make -j3 && rm -rf ../destdir && make -j DESTDIR=../destdir install && ctest -j3 --output-on-failure ${cpack}", "default": false }, "linux-android/aarch64/llvm": { "build": "mkdir build;cd build;cmake .. -DCMAKE_TOOLCHAIN_FILE=../libwebsockets/contrib/cross-aarch64-android.cmake ${cmake} && make -j", "default": false }, "netbsd-iOS/aarch64/llvm": { "build": "mkdir build destdir; cd build; export SAI_CPACK=\"-G ZIP\";cmake .. -DCMAKE_MAKE_PROGRAM=/usr/bin/make -DCMAKE_IOS_DEVELOPER_ROOT=/opt/Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer -DCMAKE_TOOLCHAIN_FILE=contrib/iOS.cmake -DIOS_PLATFORM=OS ${cmake} && make -j", "default": false }, "netbsd-OSX-bigsur/x86_64-intel-i3/llvm": { "build": "mkdir build destdir; cd build; export LD_LIBRARY_PATH=../destdir/usr/local/share/libwebsockets-test-server/plugins:../destdir/usr/local/lib;export SAI_CPACK=\"-G ZIP\";export MACOSX_DEPLOYMENT_TARGET=10.15 ; cmake .. -DCMAKE_MAKE_PROGRAM=/usr/bin/make -DLWS_OPENSSL_INCLUDE_DIRS=/usr/local/opt/openssl@1.1/include -DLWS_OPENSSL_LIBRARIES=\"/usr/local/opt/openssl/lib/libssl.dylib;/usr/local/opt/openssl/lib/libcrypto.dylib\" ${cmake} && make -j4 && make -j DESTDIR=../destdir install && ctest -j2 --output-on-failure ${cpack}" }, "netbsd-OSX-bigsur/aarch64-apple-m1/llvm": { "build": "mkdir build destdir; cd build; export LD_LIBRARY_PATH=../destdir/usr/local/share/libwebsockets-test-server/plugins:../destdir/usr/local/lib;export SAI_CPACK=\"-G ZIP\";export MACOSX_DEPLOYMENT_TARGET=10.15 ; cmake .. -DLWS_WITH_SUL_DEBUGGING=1 -DCMAKE_SYSTEM_PREFIX_PATH=/opt/homebrew -DLWS_OPENSSL_INCLUDE_DIRS=/opt/homebrew/Cellar/openssl@1.1/1.1.1h/include '-DLWS_OPENSSL_LIBRARIES=/opt/homebrew/Cellar/openssl@1.1/1.1.1h/lib/libssl.dylib;/opt/homebrew/Cellar/openssl@1.1/1.1.1h/lib/libcrypto.dylib' ${cmake} && make -j6 && rm -rf ../destdir && make -j DESTDIR=../destdir install && ctest -j3 --output-on-failure ${cpack}" }, "solaris/x86_64-amd/gcc": { "build": "mkdir build destdir; cd build; export SAI_CPACK=\"-G ZIP\";cmake .. ${cmake} && make -j 4 && make install DESTDIR=../destdir && ctest -j2 --output-on-failure ${cpack}", "default": false }, "freertos-linkit/arm32-m4-mt7697-usi/gcc": { "build": "mkdir build;cd build;export CCACHE_DISABLE=1;cmake .. -DCMAKE_INSTALL_PREFIX:PATH=/tmp -DCMAKE_TOOLCHAIN_FILE=../contrib/cross-linkit.cmake -DLWS_PLAT_FREERTOS=1 -DLWS_WITH_ZLIB=0 -DLWS_WITHOUT_EXTENSIONS=1 -DLWS_WITH_ZIP_FOPS=0 -DLWS_WITH_HTTP_STREAM_COMPRESSION=0 -DLWS_WITH_MBEDTLS=1 -DLWS_WITH_FILE_OPS=0 -DLWS_IPV6=0 ${cmake};make -j", "default": false }, "w10/x86_64-amd/msvc": { "build": "mkdir build && cd build && set SAI_CPACK=\"-G ZIP\" && cmake .. -DLWS_OPENSSL_LIBRARIES=\"C:\\Program Files\\OpenSSL\\lib\\libssl.lib;C:\\Program Files\\OpenSSL\\lib\\libcrypto.lib\" -DLWS_OPENSSL_INCLUDE_DIRS=\"C:\\Program Files\\OpenSSL\\include\" -DLWS_EXT_PTHREAD_INCLUDE_DIR=\"C:\\Program Files (x86)\\pthreads\\include\" -DLWS_EXT_PTHREAD_LIBRARIES=\"C:\\Program Files (x86)\\pthreads\\lib\\x64\\libpthreadGC2.a\" ${cmake} && cmake --build . --config DEBUG && set CTEST_OUTPUT_ON_FAILURE=1 && ctest . -C DEBUG -j1 --output-on-failure", "default": false }, "w10/x86_64-amd/wmbedtlsmsvc": { "build": "mkdir build && cd build && set SAI_CPACK=\"-G ZIP\" && cmake .. -DLWS_WITH_MBEDTLS=1 -DLWS_MBEDTLS_INCLUDE_DIRS=\"C:/Program Files (x86)/mbed TLS/include\" -DMBEDTLS_LIBRARY=\"C:/Program Files (x86)/mbed TLS/lib/mbedtls.lib\" -DMBEDX509_LIBRARY=\"C:/Program Files (x86)/mbed TLS/lib/mbedx509.lib\" -DMBEDCRYPTO_LIBRARY=\"C:/Program Files (x86)/mbed TLS/lib/mbedcrypto.lib\" -DLWS_EXT_PTHREAD_INCLUDE_DIR=\"C:\\Program Files (x86)\\pthreads\\include\" -DLWS_EXT_PTHREAD_LIBRARIES=\"C:\\Program Files (x86)\\pthreads\\lib\\x64\\libpthreadGC2.a\" ${cmake} && cmake --build . --config DEBUG && set CTEST_OUTPUT_ON_FAILURE=1 && ctest . -C DEBUG -j1 --output-on-failure", "default": false }, "w10/x86_64-amd/noptmsvc": { "build": "mkdir build && cd build && set SAI_CPACK=\"-G ZIP\" && cmake .. -DLWS_OPENSSL_LIBRARIES=\"C:\\Program Files\\OpenSSL\\lib\\libssl.lib;C:\\Program Files\\OpenSSL\\lib\\libcrypto.lib\" -DLWS_OPENSSL_INCLUDE_DIRS=\"C:\\Program Files\\OpenSSL\\include\" ${cmake} && cmake --build . --config DEBUG && set CTEST_OUTPUT_ON_FAILURE=1 && ctest . -C DEBUG -j1 --output-on-failure", "default": false }, "w10/x86_64-amd/mingw32": { "build": "mkdir build && cd build && cmake .. -DCMAKE_TOOLCHAIN_FILE=../contrib/cross-w32.cmake ${cmake} && cmake --build . --config DEBUG", "default": false }, "w10/x86_64-amd/mingw64": { "build": "mkdir build && cd build && cmake .. -DCMAKE_TOOLCHAIN_FILE=../contrib/cross-w64.cmake ${cmake} && cmake --build . --config DEBUG", "default": false }, "freertos-espidf/xl6-esp32/gcc": { # official way to get sdkconfig.h is idf.py menuconfig, but # no obvious way to do that in CI "build": "rm -rf ebuild ; mkdir ebuild; cd ebuild; cp -rp ../minimal-examples/embedded/esp32/${cpack} . ; cd ${cpack} ; . /opt/esp/esp-idf/export.sh ; ln -sf ../.. libwebsockets ; idf.py set-target esp32 && cp libwebsockets/minimal-examples/embedded/esp32/${cpack}/sdkconfig . && cp sdkconfig.h build && idf.py ${cmake} build size size-components size-files && cd build && /usr/local/bin/sai-device ${cpack} ESPPORT=0 ctest --output-on-failure", "default": false }, "freertos-espidf/riscv-esp32c3/gcc": { "build": "rm -rf ebuild ; mkdir ebuild; cd ebuild; cp -rp ../minimal-examples/embedded/esp32/${cpack} . ; cd ${cpack} ; . /opt/esp/esp-idf/export.sh ; ln -sf ../.. libwebsockets ; idf.py set-target esp32c3 && cp libwebsockets/minimal-examples/embedded/esp32/${cpack}/sdkconfig . && cp sdkconfig.h build && idf.py ${cmake} build size size-components size-files && cd build && /usr/local/bin/sai-device ${cpack} ESPPORT=0 ctest --output-on-failure", "default": false }, "linux-fedora-32/riscv64-virt/gcc": { "build": "mkdir build destdir;cd build;export LD_LIBRARY_PATH=../destdir/usr/local/share/libwebsockets-test-server/plugins:../destdir/usr/local/lib;export CCACHE_DISABLE=1;export SAI_CPACK=\"-G RPM\";cmake .. ${cmake} && make -j4 && rm -rf ../destdir && make -j12 DESTDIR=../destdir install && ctest -j3 --output-on-failure ${cpack}", "default": false }, "freebsd-12/x86_64-amd/llvm": { "build": "mkdir build destdir;cd build;export LD_LIBRARY_PATH=../destdir/usr/local/share/libwebsockets-test-server/plugins:../destdir/usr/local/lib;export CCACHE_DISABLE=1;cmake .. ${cmake} && make -j3 && rm -rf ../destdir && make -j3 DESTDIR=../destdir install" }, "openbsd/x86_64-amd/llvm": { "build": "mkdir build destdir;cd build;export CCACHE_DISABLE=1;cmake .. ${cmake};make -j4 && rm -rf ../destdir && make -j3 DESTDIR=../destdir install && ctest -j3 --output-on-failure", "default": false }, "netbsd/aarch64BE-bcm2837-a53/gcc": { "build": "mkdir build destdir;cd build;export LD_LIBRARY_PATH=../destdir/usr/local/share/libwebsockets-test-server/plugins:../destdir/usr/local/lib;export CCACHE_DISABLE=1;cmake .. ${cmake};make -j6 && rm -rf ../destdir && make -j6 DESTDIR=../destdir install && /usr/pkg/bin/ctest -j3 --output-on-failure", "default": false }, "netbsd/x86_64-amd/gcc": { "build": "mkdir build destdir;cd build;export LD_LIBRARY_PATH=../destdir/usr/local/share/libwebsockets-test-server/plugins:../destdir/usr/local/lib;export CCACHE_DISABLE=1;cmake .. ${cmake};make -j6 && rm -rf ../destdir && make -j6 DESTDIR=../destdir install && /usr/pkg/bin/ctest -j3 --output-on-failure", "default": false } }, "configurations": { "default": { "cmake": "", "platforms": "w10/x86_64-amd/msvc, w10/x86_64-amd/noptmsvc, freertos-linkit/arm32-m4-mt7697-usi/gcc, linux-ubuntu-2004/aarch64-a72-bcm2711-rpi4/gcc, w10/x86_64-amd/mingw32, w10/x86_64-amd/mingw64, netbsd/aarch64BE-bcm2837-a53/gcc, netbsd/x86_64-amd/gcc, w10/x86_64-amd/wmbedtlsmsvc, openbsd/x86_64-amd/llvm, solaris/x86_64-amd/gcc" }, "default-noudp": { "cmake": "-DLWS_WITH_UDP=0", "platforms": "w10/x86_64-amd/msvc, w10/x86_64-amd/noptmsvc, freertos-linkit/arm32-m4-mt7697-usi/gcc, linux-ubuntu-2004/aarch64-a72-bcm2711-rpi4/gcc, w10/x86_64-amd/mingw32, w10/x86_64-amd/mingw64, netbsd/aarch64BE-bcm2837-a53/gcc, netbsd/x86_64-amd/gcc, w10/x86_64-amd/wmbedtlsmsvc" }, "fault-injection": { "cmake": "-DLWS_WITH_SYS_FAULT_INJECTION=1 -DLWS_WITH_MINIMAL_EXAMPLES=1 -DLWS_WITH_CBOR=1", "platforms": "w10/x86_64-amd/msvc" }, "esp32-c3": { "cmake": "-DLWS_IPV6=0", "cpack": "esp-c3dev", "platforms": "none, freertos-espidf/riscv-esp32c3/gcc" }, "esp32-heltec": { "cmake": "-DLWS_IPV6=0", "cpack": "esp-heltec-wb32", "platforms": "none, freertos-espidf/xl6-esp32/gcc" }, "esp32-wrover": { "cmake": "-DLWS_IPV6=0 -DLWS_WITH_CBOR=1", "cpack": "esp-wrover-kit", "platforms": "none, freertos-espidf/xl6-esp32/gcc" }, "esp32-wrover-static": { "cmake": "-DLWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY=1 -DLWS_IPV6=0", "cpack": "esp-wrover-kit", "platforms": "none, freertos-espidf/xl6-esp32/gcc" }, "default-examples-openssl-v3-nogencrypto": { "cmake": "-DLWS_OPENSSL_LIBRARIES=\"/usr/local/src/openssl/v3/usr/local/lib64/libssl.a;/usr/local/src/openssl/v3/usr/local/lib64/libcrypto.a\" -DLWS_OPENSSL_INCLUDE_DIRS=\"/usr/local/src/openssl/v3/usr/local/include/\" -DLWS_WITH_MINIMAL_EXAMPLES=1 -DLWS_WITH_GENCRYPTO=0", "platforms": "none,linux-fedora-32/x86_64-amd/gcc" }, "default-examples-openssl-v3-gencrypto": { "cmake": "-DLWS_SUPPRESS_DEPRECATED_API_WARNINGS=1 -DLWS_OPENSSL_LIBRARIES=\"/usr/local/src/openssl/v3/usr/local/lib64/libssl.a;/usr/local/src/openssl/v3/usr/local/lib64/libcrypto.a\" -DLWS_OPENSSL_INCLUDE_DIRS=\"/usr/local/src/openssl/v3/usr/local/include/\" -DLWS_WITH_MINIMAL_EXAMPLES=1 -DLWS_WITH_GENCRYPTO=1", "platforms": "none,linux-fedora-32/x86_64-amd/gcc" }, "default-examples-boringssl": { "cmake": "cmake .. -DLWS_WITH_BORINGSSL=1 -DLWS_OPENSSL_INCLUDE_DIRS=\"/usr/local/src/boringssl/include\" -DLWS_OPENSSL_LIBRARIES=\"/usr/local/src/boringssl/build/ssl/libssl.so;/usr/local/src/boringssl/build/crypto/libcrypto.so\" -DLWS_WITH_MINIMAL_EXAMPLES=1", "platforms": "none,linux-fedora-32/x86_64-amd/gcc" }, "default-examples-libressl": { "cmake": "cmake .. -DLWS_OPENSSL_LIBRARIES='/opt/libressl-3.3.1/build/tls/libtls.a;/opt/libressl-3.3.1/build/ssl/libssl.a;/opt/libressl-3.3.1/build/crypto/libcrypto.a' -DLWS_OPENSSL_INCLUDE_DIRS=/opt/libressl-3.3.1/include -DLWS_WITH_MINIMAL_EXAMPLES=1", "platforms": "none,linux-fedora-32/x86_64-amd/gcc" }, "default-wolfssl": { "cmake": "-DLWS_WITH_WOLFSSL=1 -DLWS_WOLFSSL_INCLUDE_DIRS=/usr/local/include -DLWS_WOLFSSL_LIBRARIES=/usr/local/lib/libwolfssl.so", "platforms": "none,linux-fedora-32/x86_64-amd/gcc" }, "default-examples": { "cmake": "-DLWS_WITH_MINIMAL_EXAMPLES=1", "platforms": "w10/x86_64-amd/msvc, w10/x86_64-amd/noptmsvc, linux-ubuntu-2004/aarch64-a72-bcm2711-rpi4/gcc, netbsd/aarch64BE-bcm2837-a53/gcc, netbsd/x86_64-amd/gcc, openbsd/x86_64-amd/llvm, solaris/x86_64-amd/gcc" }, "default-examples-tls-sess": { "cmake": "-DLWS_WITH_MINIMAL_EXAMPLES=1 -DLWS_WITH_TLS_SESSIONS=1", "platforms": "w10/x86_64-amd/msvc, w10/x86_64-amd/noptmsvc, linux-ubuntu-2004/aarch64-a72-bcm2711-rpi4/gcc, netbsd/aarch64BE-bcm2837-a53/gcc, netbsd/x86_64-amd/gcc, openbsd/x86_64-amd/llvm, solaris/x86_64-amd/gcc" }, "h1only-examples": { "cmake": "cmake .. -DLWS_WITH_HTTP2=0 -DLWS_WITH_MINIMAL_EXAMPLES=1", "platforms": "none,linux-fedora-32/x86_64-amd/gcc" }, "unix-domain": { "cmake": "-DUNIX_SOCK=1", "platforms": "w10/x86_64-amd/msvc, w10/x86_64-amd/noptmsvc" }, "plugins": { "cmake": "-DLWS_WITH_PLUGINS=1", "platforms": "none,linux-fedora-32/x86_64-amd/gcc,linux-debian-sid/x86-amd/gcc,linux-debian-sid/x86_64-amd/gcc" }, # WARN_DEPRECATED disabled for openssl v3 case on windows "lws_system": { "cmake": "-DLWS_SUPPRESS_DEPRECATED_API_WARNINGS=1 -DLWS_WITH_ACME=1 -DLWS_WITH_MINIMAL_EXAMPLES=1 -DCMAKE_BUILD_TYPE=RELEASE -DLWS_WITH_GENCRYPTO=1 -DLWS_WITH_JOSE=1 -DLWS_WITH_SYS_ASYNC_DNS=1 -DLWS_WITH_SYS_NTPCLIENT=1", "platforms": "w10/x86_64-amd/msvc, w10/x86_64-amd/noptmsvc, openbsd/x86_64-amd/llvm" }, "secure-streams": { "cmake": "-DLWS_WITH_SECURE_STREAMS=1 -DLWS_WITH_MINIMAL_EXAMPLES=1", "platforms": "w10/x86_64-amd/msvc, w10/x86_64-amd/noptmsvc, openbsd/x86_64-amd/llvm, solaris/x86_64-amd/gcc" }, "secure-streams-proxy": { "cmake": "-DLWS_WITH_SECURE_STREAMS=1 -DLWS_WITH_SECURE_STREAMS_PROXY_API=1 -DLWS_WITH_MINIMAL_EXAMPLES=1 -DLWS_WITH_SECURE_STREAMS_AUTH_SIGV4=1", "platforms": "not w10/x86_64-amd/msvc, netbsd/aarch64BE-bcm2837-a53/gcc, netbsd/x86_64-amd/gcc, openbsd/x86_64-amd/llvm, solaris/x86_64-amd/gcc" }, "secure-streams-proxy-metrics": { "cmake": "-DLWS_WITH_SECURE_STREAMS=1 -DLWS_WITH_SECURE_STREAMS_PROXY_API=1 -DLWS_WITH_MINIMAL_EXAMPLES=1 -DLWS_WITH_SECURE_STREAMS_AUTH_SIGV4=1 -DLWS_WITH_SYS_METRICS=1", "platforms": "not w10/x86_64-amd/msvc, netbsd/aarch64BE-bcm2837-a53/gcc, netbsd/x86_64-amd/gcc" }, "distro_recommended": { # minimal examples also needed for ctest "cmake": "-DLWS_WITH_DISTRO_RECOMMENDED=1 -DLWS_WITH_MINIMAL_EXAMPLES=1", "platforms": "not freebsd-12/x86_64-amd/llvm, not linkit-cross, not w10/x86_64-amd/msvc, linux-ubuntu-2004/aarch64-a72-bcm2711-rpi4/gcc, linux-fedora-32/riscv64-virt/gcc", "cpack": "&& cpack $SAI_CPACK", "artifacts": "build/*.rpm, build/*.deb, build/*.zip" }, "lwsws": { "cmake": "-DLWS_WITH_LWSWS=ON -DLWS_WITHOUT_EXTENSIONS=0 -DLWS_WITH_HTTP2=1 -DLWS_WITH_ACME=1 -DLWS_WITH_MINIMAL_EXAMPLES=1 -DCMAKE_BUILD_TYPE=DEBUG -DLWS_WITH_GENCRYPTO=1 -DLWS_WITH_JOSE=1 -DLWS_WITH_SYS_ASYNC_DNS=1 -DLWS_WITH_SYS_NTPCLIENT=1", # no distro -devel package for libuv "platforms": "not linux-centos-8/x86_64-amd/gcc" }, "lwsws-nometrics": { "cmake": "-DLWS_WITH_LWSWS=ON -DLWS_WITHOUT_EXTENSIONS=0 -DLWS_WITH_HTTP2=1 -DLWS_WITH_ACME=1 -DLWS_WITH_MINIMAL_EXAMPLES=1 -DCMAKE_BUILD_TYPE=DEBUG -DLWS_WITH_GENCRYPTO=1 -DLWS_WITH_JOSE=1 -DLWS_WITH_SYS_ASYNC_DNS=1 -DLWS_WITH_SYS_NTPCLIENT=1 -DLWS_WITH_SYS_METRICS=0", # no distro -devel package for libuv "platforms": "not linux-centos-8/x86_64-amd/gcc" }, "lwsws2": { "cmake": "-DLWS_WITH_LWSWS=ON -DLWS_WITHOUT_EXTENSIONS=0 -DLWS_WITH_HTTP2=1 -DLWS_WITH_ACME=1 -DLWS_WITH_MINIMAL_EXAMPLES=1 -DCMAKE_BUILD_TYPE=DEBUG -DLWS_WITH_LWS_DSH=1 -DLWS_WITH_CACHE_NSCOOKIEJAR=0", # no distro -devel package for libuv "platforms": "not linux-centos-8/x86_64-amd/gcc" }, "justmbedtls": { "cmake": "-DLWS_WITH_MBEDTLS=1 -DLWS_WITHOUT_TESTAPPS=1", "platforms": "none, linux-android/aarch64/llvm" }, "mbedtls": { "cmake": "-DLWS_WITH_MBEDTLS=1 -DLWS_WITH_HTTP2=1 -DLWS_WITH_LWSWS=1 -DLWS_WITH_MINIMAL_EXAMPLES=1 -DLWS_WITH_JOSE=1 -DCMAKE_BUILD_TYPE=DEBUG", # no distro -devel package for mbedtls "platforms": "not linux-centos-7/x86_64-amd/gcc, not linux-centos-8/x86_64-amd/gcc, not linux-ubuntu-xenial/x86_64-amd/gcc" }, "mbedtls-metrics": { "cmake": "-DLWS_WITH_MBEDTLS=1 -DLWS_WITH_HTTP2=1 -DLWS_WITH_LWSWS=1 -DLWS_WITH_MINIMAL_EXAMPLES=1 -DLWS_WITH_JOSE=1 -DCMAKE_BUILD_TYPE=DEBUG -DLWS_WITH_SYS_METRICS=1", "platforms": "not linux-centos-7/x86_64-amd/gcc, not linux-centos-8/x86_64-amd/gcc, not linux-ubuntu-xenial/x86_64-amd/gcc" }, "noserver": { "cmake": "-DLWS_WITHOUT_SERVER=ON -DLWS_WITH_MINIMAL_EXAMPLES=1 -DLWS_WITH_SECURE_STREAMS=1", "platforms": "w10/x86_64-amd/msvc, w10/x86_64-amd/noptmsvc" }, "noclient": { "cmake": "-DLWS_WITHOUT_CLIENT=ON -DLWS_WITH_MINIMAL_EXAMPLES=1" }, "ext": { "cmake": "-DLWS_WITHOUT_EXTENSIONS=0 -DLWS_WITH_MINIMAL_EXAMPLES=1" }, "nonetwork": { "cmake": "-DLWS_WITH_NETWORK=0" }, "libev": { "cmake": "-DLWS_WITH_LIBEV=ON", "platforms": "openbsd/x86_64-amd/llvm" }, "libevent": { "cmake": "-DLWS_WITH_LIBEVENT=ON" }, "libglib": { "cmake": "-DLWS_WITH_GLIB=ON" }, "sdevent": { "cmake": "-DLWS_WITH_SDEVENT=ON", "platforms": "none, linux-fedora-32/x86_64-amd/gcc" }, "uncommon_headers": { "cmake": "-DLWS_WITH_HTTP_BASIC_AUTH=0 -DLWS_WITH_HTTP_UNCOMMON_HEADERS=0 -DLWS_HTTP_HEADERS_ALL=0", "platforms": "none, linux-fedora-32/x86_64-amd/gcc" }, "ipv6": { "cmake": "-DLWS_IPV6=ON", "platforms": "w10/x86_64-amd/mingw64, w10/x86_64-amd/msvc" }, "nonetlink": { "cmake": "-DLWS_WITH_NETLINK=0", "platforms": "none, linux-ubuntu-2004/x86_64-amd/gcc" }, "nossl": { "cmake": "-DLWS_WITH_SSL=OFF", "platforms": "netbsd-iOS/aarch64/llvm" }, "daemon": { "cmake": "-DLWS_WITHOUT_DAEMONIZE=OFF" }, "cgi": { "cmake": "-DLWS_WITH_CGI=ON" }, "nologs": { "cmake": "-DLWS_WITH_NO_LOGS=ON" }, "cookiejar": { "cmake": "-DLWS_WITH_CACHE_NSCOOKIEJAR=ON" }, "jittrust": { "cmake": "-DLWS_WITH_TLS_JIT_TRUST=1", "platforms": "none, linux-fedora-32/x86_64-amd/gcc" }, "smp": { "cmake": "-DLWS_MAX_SMP=32 -DLWS_WITH_MINIMAL_EXAMPLES=1" }, "nows": { "cmake": "-DLWS_ROLE_WS=0" }, "threadpool": { "cmake": "-DLWS_WITH_THREADPOOL=1 -DLWS_WITH_MINIMAL_EXAMPLES=1", "platforms": "w10/x86_64-amd/msvc" } } } libwebsockets-4.3.5/CMakeLists-implied-options.txt000066400000000000000000000256211476025525100222520ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # # This part of the CMakeLists.txt defines internal logic between options if(IOS) set(LWS_DETECTED_PLAT_IOS 1) endif() # Workaround for ESP-IDF # Detect ESP_PLATFORM environment flag, if exist, set LWS_WITH_ESP32. # Otherwise the user may not be able to run configuration ESP-IDF in the first time. if (ESP_PLATFORM) message(STATUS "ESP-IDF enabled") set(LWS_WITH_ESP32 ON) set(LWS_WITH_ZLIB OFF) set(LWS_HAVE_mbedtls_ssl_get_alpn_protocol 1) else() set(LWS_WITH_ESP32_HELPER OFF) endif() if (LWS_WITH_ESP32) set(LWS_PLAT_FREERTOS 1) endif() if (LWS_PLAT_OPTEE) set(LWS_WITH_UDP 0) endif() if (LWS_PLAT_FREERTOS OR (${CMAKE_SYSTEM_NAME} MATCHES "QNX")) message(STATUS "No LWS_WITH_DIR or LWS_WITH_LEJP_CONF") set(LWS_WITH_DIR OFF) set(LWS_WITH_LEJP_CONF OFF) message("LWS_WITH_DIR ${LWS_WITH_DIR}") else() message(STATUS "Compiled with LWS_WITH_DIR and LWS_WITH_LEJP_CONF") set(LWS_WITH_DIR ON) set(LWS_WITH_LEJP_CONF ON) endif() if (LWS_FOR_GITOHASHI) set(LWS_WITH_THREADPOOL 1) set(LWS_WITH_HTTP2 1) set(LWS_UNIX_SOCK 1) set(LWS_WITH_HTTP_PROXY 1) set(LWS_WITH_FTS 1) set(LWS_WITH_DISKCACHE 1) set(LWS_WITH_LWSAC 1) set(LWS_WITH_LEJP_CONF 1) set(LWS_WITH_SPAWN 1) set(LWS_WITH_FSMOUNT 1) set(LWS_WITH_STRUCT_JSON 1) set(LWS_WITH_STRUCT_SQLITE3 1) endif() if(LWS_WITH_DISTRO_RECOMMENDED) set(LWS_WITH_HTTP2 1) # selfcontained set(LWS_WITH_LWSWS 1) # libuv set(LWS_WITH_CGI 1) # selfcontained set(LWS_WITH_HTTP_STREAM_COMPRESSION 1) # libz and brotli if avail set(LWS_IPV6 1) # selfcontained set(LWS_WITH_ZIP_FOPS 1) # libz set(LWS_WITH_SOCKS5 1) # selfcontained set(LWS_WITH_RANGES 1) # selfcontained set(LWS_WITH_ACME 1) # selfcontained / tls set(LWS_WITH_SYS_METRICS 1) # selfcontained set(LWS_WITH_GLIB 1) # glib set(LWS_WITH_LIBUV 1) # libuv set(LWS_WITH_LIBEV 1) # libev set(LWS_WITH_LIBEVENT 1) # libevent set(LWS_WITH_EVLIB_PLUGINS 1) # event libraries created as plugins / individual packages set(LWS_WITHOUT_EXTENSIONS 0) # libz set(LWS_ROLE_DBUS 1) # dbus-related libs set(LWS_WITH_FTS 1) # selfcontained set(LWS_WITH_THREADPOOL 1) # pthreads set(LWS_UNIX_SOCK 1) # selfcontained set(LWS_WITH_HTTP_PROXY 1) # selfcontained set(LWS_WITH_DISKCACHE 1) # selfcontained set(LWS_WITH_LWSAC 1) # selfcontained set(LWS_WITH_LEJP_CONF 1) # selfcontained set(LWS_WITH_PLUGINS_BUILTIN 1) # selfcontained set(LWS_ROLE_RAW_PROXY 1) # selfcontained set(LWS_WITH_GENCRYPTO 1) # selfcontained / tls set(LWS_WITH_CBOR 1) # selfcontained set(LWS_WITH_COSE 1) # selfcontained set(LWS_WITH_JOSE 1) # selfcontained set(LWS_WITH_STRUCT_JSON 1) # selfcontained set(LWS_WITH_STRUCT_SQLITE3 1) # sqlite3 set(LWS_WITH_SPAWN 1) # selfcontained # libmount is problematic on Centos 8 / RHEL 8 # set(LWS_WITH_FSMOUNT 1) set(LWS_ROLE_MQTT 1) # selfcontained set(LWS_WITH_SECURE_STREAMS 1) # selfcontained set(LWS_WITH_SECURE_STREAMS_PROXY_API 1) # selfcontained set(LWS_WITH_DIR 1) # selfcontained endif() # LWS_WITH_EVENT_LIBS is set if any event lib selected if (LWS_WITH_LIBEV OR LWS_WITH_LIBUV OR LWS_WITH_LIBEVENT OR LWS_WITH_GLIB OR LWS_WITH_SDEVENT OR LWS_WITH_ULOOP) set(LWS_WITH_EVENT_LIBS 1) else() unset(LWS_WITH_EVENT_LIBS) endif() if (LWS_WITH_SECURE_STREAMS_PROXY_API) set(LWS_WITH_LWS_DSH 1) set(LWS_WITH_UNIX_SOCK 1) set(LWS_WITH_SYS_SMD 1) endif() if (NOT LWS_WITH_NETWORK) set(LWS_ROLE_MQTT 0) set(LWS_ROLE_H1 0) set(LWS_ROLE_WS 0) set(LWS_ROLE_RAW 0) set(LWS_WITHOUT_EXTENSIONS 1) set(LWS_WITHOUT_SERVER 1) set(LWS_WITHOUT_CLIENT 1) set(LWS_WITH_HTTP2 0) set(LWS_WITH_SOCKS5 0) set(LWS_UNIX_SOCK 0) set(LWS_WITH_HTTP_PROXY 0) set(LWS_WITH_PLUGINS 0) set(LWS_WITH_LWSWS 0) set(LWS_WITH_CGI 0) set(LWS_ROLE_RAW_PROXY 0) set(LWS_WITH_PEER_LIMITS 0) set(LWS_WITH_HTTP_STREAM_COMPRESSION 0) set(LWS_WITH_HTTP_BROTLI 0) set(LWS_WITH_POLL 0) set(LWS_WITH_SEQUENCER 0) set(LWS_ROLE_DBUS 0) set(LWS_WITH_LWS_DSH 0) set(LWS_WITH_THREADPOOL 0) set(LWS_WITH_SYS_SMD 0) endif() if (LWS_WITH_CGI) set(LWS_WITH_SPAWN 1) endif() if (LWS_WITH_STRUCT_SQLITE3) set(LWS_WITH_SQLITE3 1) endif() if (LWS_WITH_HTTP_BASIC_AUTH) # WWW_AUTHENTICATE used by basic auth is an "uncommon header" set(LWS_WITH_HTTP_UNCOMMON_HEADERS 1) endif() if (LWS_WITH_SECURE_STREAMS_AUTH_SIGV4) set(LWS_WITH_GENCRYPTO 1) endif() if (APPLE) set(LWS_ROLE_DBUS 0) endif() if(NOT DEFINED CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type") endif() if (LWS_PLAT_FREERTOS) set(LWS_UNIX_SOCK 0) endif() if (LWS_PLAT_FREERTOS) set(LWS_WITH_FTS 0) endif() if (LWS_WITH_HTTP2) set(LWS_ROLE_H2 1) endif() if (LWS_WITH_CGI) set(LWS_ROLE_CGI 1) endif() if (NOT LWS_ROLE_WS) set(LWS_WITHOUT_EXTENSIONS 1) endif() unset(LWS_WITH_LIBUV_INTERNAL) if (LWS_WITH_LWSWS) message(STATUS "LWS_WITH_LWSWS --> Enabling LWS_WITH_PLUGINS and LWS_WITH_LIBUV") set(LWS_WITH_PLUGINS 1) set(LWS_WITH_LIBUV 1) set(LWS_WITH_LIBUV_INTERNAL 1) set(LWS_WITH_EVENT_LIBS 1) # implied by LIBUV_INTERNAL set(LWS_WITH_ACCESS_LOG 1) set(LWS_WITH_SYS_METRICS 1) set(LWS_WITH_LEJP 1) set(LWS_WITH_LEJP_CONF 1) set(LWS_WITH_PEER_LIMITS 1) set(LWS_ROLE_RAW_PROXY 1) endif() # sshd plugin if (LWS_WITH_PLUGINS) set(LWS_WITH_GENCRYPTO 1) endif() if (LWS_ROLE_RAW_PROXY) set (LWS_WITH_CLIENT 1) set (LWS_WITH_SERVER 1) endif() if (LWS_WITH_ACME) set (LWS_WITH_CLIENT 1) set (LWS_WITH_SERVER 1) set (LWS_WITH_JOSE 1) endif() if (LWS_WITH_JOSE) set(LWS_WITH_LEJP 1) set(LWS_WITH_GENCRYPTO 1) endif() if (LWS_WITH_PLUGINS AND NOT LWS_WITH_LIBUV) message(STATUS "LWS_WITH_PLUGINS --> Enabling LWS_WITH_LIBUV") set(LWS_WITH_LIBUV 1) set(LWS_WITH_EVENT_LIBS 1) endif() if (LWS_WITH_PLUGINS OR LWS_WITH_CGI) # sshd plugin set(LWS_WITH_GENCRYPTO 1) endif() if (LWS_PLAT_FREERTOS) set(LWS_WITH_SHARED OFF) if (LWS_WITH_SSL) set(LWS_WITH_MBEDTLS ON) endif() # set(LWS_WITHOUT_CLIENT ON) set(LWS_WITHOUT_TESTAPPS ON) set(LWS_WITHOUT_EXTENSIONS ON) set(LWS_WITH_PLUGINS OFF) set(LWS_WITH_RANGES ON) # this implies no pthreads in the lib set(LWS_MAX_SMP 1) set(LWS_HAVE_MALLOC 1) set(LWS_HAVE_REALLOC 1) set(LWS_HAVE_GETIFADDRS 1) set(LWS_WITH_CUSTOM_HEADERS 0) endif() #if (LWS_WITH_ESP32) # set(LWS_WITH_ZIP_FOPS 1) #endif() if (WIN32) #set(LWS_MAX_SMP 1) if (LWS_WITH_PLUGINS) set(LWS_WITH_LIBUV_INTERNAL 1) endif() endif() if (LWS_WITHOUT_SERVER) set(LWS_WITH_LWSWS OFF) endif() if (LWS_WITH_LEJP_CONF) set(LWS_WITH_DIR 1) endif() # confirm H1 relationships if (NOT LWS_ROLE_H1 AND LWS_ROLE_H2) message(FATAL_ERROR "H2 requires LWS_ROLE_H1") endif() if (NOT LWS_ROLE_H1 AND LWS_ROLE_WS) message(FATAL_ERROR "WS requires LWS_ROLE_H1") endif() if (NOT LWS_ROLE_H1 AND LWS_ROLE_CGI) message(FATAL_ERROR "CGI requires LWS_ROLE_H1") endif() # confirm HTTP relationships if (NOT LWS_ROLE_H1 AND NOT LWS_ROLE_H2 AND LWS_WITH_HTTP_PROXY) message(FATAL_ERROR "LWS_WITH_LWSWS requires LWS_ROLE_H1") endif() if (NOT LWS_ROLE_H1 AND NOT LWS_ROLE_H2 AND LWS_WITH_HTTP_PROXY) message(FATAL_ERROR "LWS_WITH_HTTP_PROXY requires LWS_ROLE_H1") endif() if (NOT LWS_ROLE_H1 AND NOT LWS_ROLE_H2 AND LWS_WITH_RANGES) message(FATAL_ERROR "LWS_WITH_RANGES requires LWS_ROLE_H1") endif() if (NOT LWS_ROLE_H1 AND NOT LWS_ROLE_H2 AND LWS_WITH_ACCESS_LOG) message(FATAL_ERROR "LWS_WITH_ACCESS_LOG requires LWS_ROLE_H1") endif() if (LWS_WITH_HTTP_PROXY AND (LWS_WITHOUT_CLIENT OR LWS_WITHOUT_SERVER)) message("You have to enable both client and server for http proxy") set(LWS_WITH_HTTP_PROXY 0) endif() if (NOT LWS_WITHOUT_EXTENSIONS OR LWS_WITH_ZIP_FOPS) set(LWS_WITH_ZLIB 1) endif() if (LWS_WITH_SECURE_STREAMS) set(LWS_WITH_SECURE_STREAMS_SYS_AUTH_API_AMAZON_COM 1) endif() if (NOT (LWS_WITH_STATIC OR LWS_WITH_SHARED)) message(FATAL_ERROR "Makes no sense to compile with neither static nor shared libraries.") endif() if (LWS_WITHOUT_DAEMONIZE OR WIN32) set(LWS_NO_DAEMONIZE 1) endif() if (LWS_IPV6) set(LWS_WITH_IPV6 1) endif() if (LWS_UNIX_SOCK) set(LWS_WITH_UNIX_SOCK 1) endif() if (NOT LWS_MAX_SMP) set(LWS_MAX_SMP 1) endif() if ("${LWS_MAX_SMP}" STREQUAL "") set(LWS_MAX_SMP 1) endif() set(LWS_WITH_CLIENT 1) if (LWS_WITHOUT_CLIENT) set(LWS_WITH_CLIENT) set(LWS_WITH_SECURE_STREAMS 0) endif() set(LWS_WITH_SERVER 1) if (LWS_WITHOUT_SERVER) set(LWS_WITH_SERVER) endif() if (LWS_WITH_SERVER) else() set(LWS_WITH_CGI 0) set(LWS_ROLE_CGI 0) endif() # using any abstract protocol enables LWS_WITH_ABSTRACT #if (LWS_WITH_SMTP) # set(LWS_WITH_ABSTRACT 1) #endif() if (NOT LWS_WITH_EVLIB_PLUGINS AND (LWS_WITH_LIBEV AND LWS_WITH_LIBEVENT)) message(FATAL_ERROR "Sorry libev and libevent conflict with each others' namespace, you can only have one or the other") endif() if (LWS_SSL_SERVER_WITH_ECDH_CERT) set(LWS_SSL_SERVER_WITH_ECDH_CERT 1) endif() # LWS_OPENSSL_SUPPORT deprecated... use LWS_WITH_TLS if (LWS_WITH_SSL OR LWS_WITH_MBEDTLS) set(LWS_OPENSSL_SUPPORT 1) set(LWS_WITH_TLS 1) endif() if (NOT LWS_WITH_SSL) set(LWS_WITHOUT_BUILTIN_SHA1 OFF) endif() # protocol plugins dont make any sense either if (LWS_WITH_PLUGINS AND NOT LWS_WITH_SHARED) message("Deselecting PLUGINS since building static") set(LWS_WITH_PLUGINS 0) endif() if (LWS_WITH_TLS_SESSIONS) if (NOT LWS_WITH_NETWORK OR NOT LWS_WITH_CLIENT) message("TLS_SESSIONS support requires client, disabling") set(LWS_WITH_TLS_SESSIONS OFF) endif() endif() # if we're only building static, we don't want event lib plugins # if (LWS_WITH_EVLIB_PLUGINS AND NOT LWS_WITH_SHARED) message("Deselecting EVLIB_PLUGINS since building static") set(LWS_WITH_EVLIB_PLUGINS 0) endif() if (LWS_WITH_PLUGINS OR (LWS_WITH_EVLIB_PLUGINS AND LWS_WITH_EVENT_LIBS)) set(LWS_WITH_PLUGINS_API 1) endif() if (WIN32 AND NOT LWS_EXT_PTHREAD_LIBRARIES) set(LWS_MAX_SMP 1) message("SMD requires pthreads") set(LWS_WITH_SYS_SMD 0) endif() libwebsockets-4.3.5/CMakeLists.txt000066400000000000000000001217531476025525100171430ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # cmake_minimum_required(VERSION 2.8.12) include(CheckFunctionExists) include(CheckSymbolExists) include(CheckIncludeFile) include(CheckIncludeFiles) include(CheckLibraryExists) include(CheckTypeSize) include(CheckCSourceCompiles) if (POLICY CMP0048) cmake_policy(SET CMP0048 NEW) endif() #if (POLICY CMP0024) # cmake_policy(SET CMP0024 NEW) #endif() if (POLICY CMP0075) cmake_policy(SET CMP0075 NEW) endif() # General Advice # # For selecting between DEBUG / RELEASE, use -DCMAKE_BUILD_TYPE=DEBUG or =RELEASE # debug builds include source level debug info and extra logging set(LWS_WITH_BUNDLED_ZLIB_DEFAULT OFF) if(WIN32) set(LWS_WITH_BUNDLED_ZLIB_DEFAULT ON) endif() set(LWS_ROLE_RAW 1) set(LWS_WITH_POLL 1) if (ESP_PLATFORM) set(LWS_ESP_PLATFORM 1) #set(CMAKE_TOOLCHAIN_FILE contrib/cross-esp32.cmake) set(LWIP_PROVIDE_ERRNO 1) endif() # it's at this point any toolchain file is brought in project(libwebsockets C) if (LWS_WITH_SECURE_STREAMS_CPP) enable_language(CXX) endif() include(CTest) if (ESP_PLATFORM) include_directories( $ENV{IDF_PATH}/components/esp_hw_support/include/soc/ $ENV{IDF_PATH}/components/freertos/include/ $ENV{IDF_PATH}/components/freertos/esp_additions/include/ $ENV{IDF_PATH}/components/freertos/esp_additions/include/freertos/ $ENV{IDF_PATH}/components/freertos/FreeRTOS-Kernel/include/ $ENV{IDF_PATH}/components/freertos/FreeRTOS-Kernel/portable/linux/include/ $ENV{IDF_PATH}/components/xtensa/${CONFIG_IDF_TARGET}/include/ $ENV{IDF_PATH}/components/freertos/include/esp_additions $ENV{IDF_PATH}/components/hal/include $ENV{IDF_PATH}/components/soc/${CONFIG_IDF_TARGET}/include/ $ENV{IDF_PATH}/components/soc/include/ $ENV{IDF_PATH}/components/esp_hw_support/include $ENV{IDF_PATH}/components/hal/${CONFIG_IDF_TARGET}/include/ ) if (CONFIG_IDF_TARGET_ARCH_RISCV) include_directories( $ENV{IDF_PATH}/components/freertos/port/riscv/include $ENV{IDF_PATH}/components/riscv/include) else() include_directories( $ENV{IDF_PATH}/components/freertos/port/xtensa/include $ENV{IDF_PATH}/components/xtensa/include) endif() endif() # # Select features recommended for PC distro packaging # option(LWS_WITH_DISTRO_RECOMMENDED "Enable features recommended for distro packaging" OFF) option(LWS_FOR_GITOHASHI "Enable features recommended for use with gitohashi" OFF) # # Compiler features # option(DISABLE_WERROR "Avoid treating compiler warnings as fatal errors" OFF) # # Major individual features # option(LWS_WITH_NETWORK "Compile with network-related code" ON) option(LWS_ROLE_H1 "Compile with support for http/1 (needed for ws)" ON) option(LWS_ROLE_WS "Compile with support for websockets" ON) option(LWS_ROLE_MQTT "Build with support for MQTT client" OFF) option(LWS_ROLE_DBUS "Compile with support for DBUS" OFF) option(LWS_ROLE_RAW_PROXY "Raw packet proxy" OFF) option(LWS_ROLE_RAW_FILE "Compile with support for raw files" ON) option(LWS_WITH_HTTP2 "Compile with server support for HTTP/2" ON) option(LWS_WITH_LWSWS "Libwebsockets Webserver" OFF) option(LWS_WITH_CGI "Include CGI (spawn process with network-connected stdin/out/err) APIs" OFF) option(LWS_IPV6 "Compile with support for ipv6" OFF) option(LWS_UNIX_SOCK "Compile with support for UNIX domain socket if OS supports it" ON) option(LWS_WITH_PLUGINS "Support plugins for protocols and extensions (implies LWS_WITH_PLUGINS_API)" OFF) option(LWS_WITH_PLUGINS_BUILTIN "Build the plugin protocols directly into lws library" OFF) option(LWS_WITH_HTTP_PROXY "Support for active HTTP proxying" OFF) option(LWS_WITH_ZIP_FOPS "Support serving pre-zipped files" OFF) option(LWS_WITH_SOCKS5 "Allow use of SOCKS5 proxy on client connections" OFF) option(LWS_WITH_PEER_LIMITS "Track peers and restrict resources a single peer can allocate" OFF) option(LWS_WITH_ACCESS_LOG "Support generating Apache-compatible access logs" OFF) option(LWS_WITH_RANGES "Support http ranges (RFC7233)" OFF) option(LWS_WITH_THREADPOOL "Managed worker thread pool support (relies on pthreads)" OFF) option(LWS_WITH_HTTP_STREAM_COMPRESSION "Support HTTP stream compression" OFF) option(LWS_WITH_HTTP_BROTLI "Also offer brotli http stream compression (requires LWS_WITH_HTTP_STREAM_COMPRESSION)" OFF) option(LWS_WITH_ACME "Enable support for ACME automatic cert acquisition + maintenance (letsencrypt etc)" OFF) option(LWS_WITH_HUBBUB "Enable libhubbub rewriting support" OFF) option(LWS_WITH_ALSA "Enable alsa audio example" OFF) option(LWS_WITH_GTK "Enable gtk example" OFF) option(LWS_WITH_FTS "Full Text Search support" OFF) option(LWS_WITH_SYS_ASYNC_DNS "Nonblocking internal IPv4 + IPv6 DNS resolver" OFF) option(LWS_WITH_SYS_NTPCLIENT "Build in tiny ntpclient good for tls date validation and run via lws_system" OFF) option(LWS_WITH_SYS_DHCP_CLIENT "Build in tiny DHCP client" OFF) option(LWS_WITH_HTTP_BASIC_AUTH "Support Basic Auth" ON) option(LWS_WITH_HTTP_UNCOMMON_HEADERS "Include less common http header support" ON) option(LWS_WITH_SYS_STATE "lws_system state support" ON) option(LWS_WITH_SYS_SMD "Lws System Message Distribution" ON) option(LWS_WITH_SYS_FAULT_INJECTION "Enable fault injection support" OFF) option(LWS_WITH_SYS_METRICS "Lws Metrics API" OFF) # # Secure Streams # option(LWS_WITH_SECURE_STREAMS "Secure Streams protocol-agnostic API" OFF) option(LWS_WITH_SECURE_STREAMS_CPP "Secure Streams C++ classes" OFF) option(LWS_WITH_SECURE_STREAMS_PROXY_API "Secure Streams support to work across processes" OFF) option(LWS_WITH_SECURE_STREAMS_SYS_AUTH_API_AMAZON_COM "Auth support for api.amazon.com" OFF) option(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY "Secure Streams Policy is hardcoded only" OFF) option(LWS_WITH_SECURE_STREAMS_AUTH_SIGV4 "Secure Streams Auth support for AWS Sigv4" OFF) option(LWS_WITH_SECURE_STREAMS_BUFFER_DUMP "Secure Streams protocol buffer dump" OFF) option(LWS_WITH_SS_DIRECT_PROTOCOL_STR "Secure Streams directly set/get metadata w/o policy" OFF) # # CTest options # # # If you build with LWS_WITH_MINIMAL_EXAMPLES, you can use CTest / make test to run # examples that can give a pass/fail response. By default it runs tests both against # a local server peer and warmcat.com, if your CI wants to do the tests but does not # have internet routing, then you can still run a subset of tests with CTest / make # test that only does local tests by disabling this option. # option(LWS_CTEST_INTERNET_AVAILABLE "CTest will performs tests that need the Internet" ON) # # TLS library options... all except mbedTLS are basically OpenSSL variants. # option(LWS_WITH_SSL "Include SSL support (defaults to OpenSSL or similar, mbedTLS if LWS_WITH_MBEDTLS is set)" ON) option(LWS_WITH_MBEDTLS "Use mbedTLS (>=2.0) replacement for OpenSSL. When setting this, you also may need to specify LWS_MBEDTLS_LIBRARIES and LWS_MBEDTLS_INCLUDE_DIRS" OFF) option(LWS_WITH_BORINGSSL "Use BoringSSL replacement for OpenSSL" OFF) option(LWS_WITH_CYASSL "Use CyaSSL replacement for OpenSSL. When setting this, you also need to specify LWS_CYASSL_LIBRARIES and LWS_CYASSL_INCLUDE_DIRS" OFF) option(LWS_WITH_WOLFSSL "Use wolfSSL replacement for OpenSSL. When setting this, you also may need to specify LWS_WOLFSSL_LIBRARIES and LWS_WOLFSSL_INCLUDE_DIRS" OFF) option(LWS_SSL_CLIENT_USE_OS_CA_CERTS "SSL support should make use of the OS-installed CA root certs" ON) option(LWS_TLS_LOG_PLAINTEXT_RX "For debugging log the received plaintext as soon as decrypted" OFF) option(LWS_TLS_LOG_PLAINTEXT_TX "For debugging log the transmitted plaintext just before encryption" OFF) option(LWS_WITH_TLS_SESSIONS "Enable persistent, resumable TLS sessions" ON) option(LWS_WITH_TLS_JIT_TRUST "Enable dynamically computing which trusted TLS CA is needed to be instantiated" OFF) # # Event library options (may select multiple, or none for default poll() # option(LWS_WITH_LIBEV "Compile with support for libev" OFF) option(LWS_WITH_LIBUV "Compile with support for libuv" OFF) option(LWS_WITH_LIBEVENT "Compile with support for libevent" OFF) option(LWS_WITH_GLIB "Compile with support for glib event loop" OFF) option(LWS_WITH_SDEVENT "Compile with support for sd-event loop" OFF) option(LWS_WITH_ULOOP "Compile with support for uloop" OFF) if (UNIX) # since v4.1, on unix platforms default is build any event libs as runtime plugins option(LWS_WITH_EVLIB_PLUGINS "Compile event lib support into runtime-selected plugins" ON) else() # otherwise default to linking the event lib(s) to libwebsockets.so option(LWS_WITH_EVLIB_PLUGINS "Compile event lib support into runtime-selected plugins" OFF) endif() # # LWS Drivers # option(LWS_WITH_DRIVERS "With generic drivers for gpio, i2c, display etc" OFF) # # Static / Dynamic build options # option(LWS_WITH_STATIC "Build the static version of the library" ON) option(LWS_WITH_SHARED "Build the shared version of the library" ON) option(LWS_LINK_TESTAPPS_DYNAMIC "Link the test apps to the shared version of the library. Default is to link statically" OFF) option(LWS_STATIC_PIC "Build the static version of the library with position-independent code" OFF) option(LWS_SUPPRESS_DEPRECATED_API_WARNINGS "Turn off complaints about, eg, openssl 3 deprecated api usage" ON) # # Specific platforms # option(LWS_WITH_ESP32 "Build for ESP32" OFF) option(LWS_PLAT_OPTEE "Build for OPTEE" OFF) option(LWS_PLAT_FREERTOS "Build for FreeRTOS" OFF) option(LWS_PLAT_ANDROID "Android flavour of unix platform" OFF) # # Client / Server / Test Apps build control # option(LWS_WITHOUT_CLIENT "Don't build the client part of the library" OFF) option(LWS_WITHOUT_SERVER "Don't build the server part of the library" OFF) option(LWS_WITHOUT_TESTAPPS "Don't build the libwebsocket-test-apps" OFF) option(LWS_WITHOUT_TEST_SERVER "Don't build the test server" OFF) option(LWS_WITHOUT_TEST_SERVER_EXTPOLL "Don't build the test server version that uses external poll" OFF) option(LWS_WITHOUT_TEST_PING "Don't build the ping test application" OFF) option(LWS_WITHOUT_TEST_CLIENT "Don't build the client test application" OFF) # # Extensions (permessage-deflate) # option(LWS_WITHOUT_EXTENSIONS "Don't compile with extensions" ON) # # Helpers + misc # option(LWS_WITHOUT_BUILTIN_GETIFADDRS "Don't use the BSD getifaddrs implementation from libwebsockets if it is missing (this will result in a compilation error) ... The default is to assume that your libc provides it. On some systems such as uclibc it doesn't exist." OFF) option(LWS_FALLBACK_GETHOSTBYNAME "Also try to do dns resolution using gethostbyname if getaddrinfo fails" OFF) option(LWS_WITHOUT_BUILTIN_SHA1 "Don't build the lws sha-1 (eg, because openssl will provide it" OFF) option(LWS_WITHOUT_DAEMONIZE "Don't build the daemonization api" ON) option(LWS_SSL_SERVER_WITH_ECDH_CERT "Include SSL server use ECDH certificate" OFF) option(LWS_WITH_LEJP "With the Lightweight JSON Parser" ON) option(LWS_WITH_CBOR "With the Lightweight LECP CBOR Parser" OFF) option(LWS_WITH_CBOR_FLOAT "Build floating point types if building CBOR LECP" ON) option(LWS_WITH_SQLITE3 "Require SQLITE3 support" OFF) option(LWS_WITH_STRUCT_JSON "Generic struct serialization to and from JSON" OFF) option(LWS_WITH_STRUCT_SQLITE3 "Generic struct serialization to and from SQLITE3" OFF) # broken atm #option(LWS_WITH_SMTP "Provide SMTP support" OFF) if (LWS_WITH_ESP32) option(LWS_WITH_DIR "Directory scanning api support" OFF) option(LWS_WITH_LEJP_CONF "With LEJP configuration parser as used by lwsws" OFF) else() option(LWS_WITH_DIR "Directory scanning api support" ON) option(LWS_WITH_LEJP_CONF "With LEJP configuration parser as used by lwsws" ON) endif() option(LWS_WITH_NO_LOGS "Disable all logging other than _err and _user from being compiled in" OFF) set(LWS_LOGGING_BITFIELD_SET 0 CACHE STRING "Bitfield describing which log levels to force included into the build") set(LWS_LOGGING_BITFIELD_CLEAR 0 CACHE STRING "Bitfield describing which log levels to force removed from the build") option(LWS_LOGS_TIMESTAMP "Timestamp at start of logs" ON) option(LWS_LOG_TAG_LIFECYCLE "Log tagged object lifecycle as NOTICE" ON) option(LWS_AVOID_SIGPIPE_IGN "Android 7+ reportedly needs this" OFF) option(LWS_WITH_JOSE "JOSE JSON Web Signature / Encryption / Keys (RFC7515/6/) API" OFF) option(LWS_WITH_COSE "COSE CBOR Signature / Encryption / Keys (RFC8152) API" OFF) option(LWS_WITH_GENCRYPTO "Enable support for Generic Crypto apis independent of TLS backend" OFF) option(LWS_WITH_SELFTESTS "Selftests run at context creation" OFF) option(LWS_WITH_GCOV "Build with gcc gcov coverage instrumentation" OFF) option(LWS_WITH_EXPORT_LWSTARGETS "Export libwebsockets CMake targets. Disable if they conflict with an outer cmake project." ON) option(LWS_REPRODUCIBLE "Build libwebsockets reproducible. It removes the build user and hostname from the build" ON) option(LWS_WITH_MINIMAL_EXAMPLES "Also build the normally standalone minimal examples, for QA" OFF) option(LWS_WITH_LWSAC "lwsac Chunk Allocation api" ON) option(LWS_WITH_CUSTOM_HEADERS "Store and allow querying custom HTTP headers (H1 only)" ON) option(LWS_WITH_DISKCACHE "Hashed cache directory with lazy LRU deletion to size limit (unrelated to lws_cache_ttl)" OFF) option(LWS_WITH_ASAN "Build with gcc runtime sanitizer options enabled (needs libasan)" OFF) option(LWS_WITH_LEJP_CONF "With LEJP configuration parser as used by lwsws" OFF) option(LWS_WITH_ZLIB "Include zlib support (required for extensions)" OFF) option(LWS_WITH_BUNDLED_ZLIB "Use bundled zlib version (Windows only)" ${LWS_WITH_BUNDLED_ZLIB_DEFAULT}) option(LWS_WITH_MINIZ "Use miniz instead of zlib" OFF) option(LWS_WITH_SEQUENCER "lws_seq_t support" OFF) option(LWS_WITH_EXTERNAL_POLL "Support external POLL integration using callback messages (not recommended)" OFF) option(LWS_WITH_LWS_DSH "Support lws_dsh_t Disordered Shared Heap" OFF) option(LWS_CLIENT_HTTP_PROXYING "Support external http proxies for client connections" ON) option(LWS_WITH_FILE_OPS "Support file operations vfs" ON) option(LWS_WITH_UDP "Platform supports UDP" ON) option(LWS_WITH_SPAWN "Spawn subprocesses with piped stdin/out/stderr" OFF) option(LWS_WITH_FSMOUNT "Overlayfs and fallback mounting apis" OFF) option(LWS_WITH_FANALYZER "Enable gcc -fanalyzer if compiler supports" OFF) option(LWS_HTTP_HEADERS_ALL "Override header reduction optimization and include all like older lws versions" OFF) option(LWS_WITH_SUL_DEBUGGING "Enable zombie lws_sul checking on object deletion" OFF) option(LWS_WITH_PLUGINS_API "Build generic lws_plugins apis (see LWS_WITH_PLUGINS to also build protocol plugins)" OFF) option(LWS_WITH_CONMON "Collect introspectable connection latency stats on individual client connections" ON) option(LWS_WITHOUT_EVENTFD "Force using pipe instead of eventfd" OFF) if (UNIX OR WIN32) option(LWS_WITH_CACHE_NSCOOKIEJAR "Build file-backed lws-cache-ttl that uses netscape cookie jar format (linux-only)" ON) else() option(LWS_WITH_CACHE_NSCOOKIEJAR "Build file-backed lws-cache-ttl that uses netscape cookie jar format (linux-only)" OFF) endif() if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") option(LWS_WITH_NETLINK "Monitor Netlink for Routing Table changes" ON) else() set(LWS_WITH_NETLINK 0) endif() if (${CMAKE_SYSTEM_NAME} MATCHES "SunOS") # its openssl has md5 deprecated set(LWS_SUPPRESS_DEPRECATED_API_WARNINGS 1) endif() # # to use miniz, enable both LWS_WITH_ZLIB and LWS_WITH_MINIZ # # End of user settings # # sets of sub-options implied by other options # set(LIB_LIST "") set(LIB_LIST_AT_END) set(LWS_LIBRARIES) set(LWS_OPENSSL_SUPPORT 0) include(CMakeLists-implied-options.txt) # # Structural helpers for cmake in subdirs # macro(add_subdir_include_directories arg1) add_subdirectory(${arg1}) include_directories(${_CMAKE_INC_LIST}) endmacro() macro(exports_to_parent_scope) set(SOURCES ${SOURCES} PARENT_SCOPE) if (LIB_LIST) set(LIB_LIST ${LIB_LIST} PARENT_SCOPE) endif() get_property(_CURR DIRECTORY PROPERTY INCLUDE_DIRECTORIES) set(_CMAKE_INC_LIST ${_CURR} PARENT_SCOPE) if (LWS_LIB_BUILD_INC_PATHS) set(LWS_LIB_BUILD_INC_PATHS ${LWS_LIB_BUILD_INC_PATHS} PARENT_SCOPE) endif() endmacro() macro(export_to_parent_intermediate) set(SOURCES ${SOURCES} PARENT_SCOPE) if (LIB_LIST) set(LIB_LIST ${LIB_LIST} PARENT_SCOPE) endif() set(_CMAKE_INC_LIST ${_CMAKE_INC_LIST} PARENT_SCOPE) if (LWS_LIB_BUILD_INC_PATHS) set(LWS_LIB_BUILD_INC_PATHS ${LWS_LIB_BUILD_INC_PATHS} PARENT_SCOPE) endif() endmacro() # # Try to find the current Git hash # find_package(Git) if(GIT_EXECUTABLE) execute_process( WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" COMMAND "${GIT_EXECUTABLE}" describe --tags --always OUTPUT_VARIABLE GIT_HASH OUTPUT_STRIP_TRAILING_WHITESPACE ) set(LWS_BUILD_HASH ${GIT_HASH}) # append the build user and hostname if (NOT LWS_REPRODUCIBLE) execute_process( WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" COMMAND "whoami" OUTPUT_VARIABLE GIT_USER OUTPUT_STRIP_TRAILING_WHITESPACE ) execute_process( WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" COMMAND "hostname" OUTPUT_VARIABLE GIT_HOST OUTPUT_STRIP_TRAILING_WHITESPACE ) string(REGEX REPLACE "([^\\])[\\]([^\\])" "\\1\\\\\\\\\\2" GIT_USER ${GIT_USER}) set(LWS_BUILD_HASH ${GIT_USER}@${GIT_HOST}-${GIT_HASH}) endif() message("Git commit hash: ${LWS_BUILD_HASH}") endif() if ("${LWS_BUILD_HASH}" STREQUAL "") set(LWS_BUILD_HASH "unknown") endif() set(PACKAGE "libwebsockets") set(CPACK_RPM_PACKAGE_LICENSE "MIT") set(CPACK_PACKAGE_NAME "${PACKAGE}") set(CPACK_PACKAGE_VERSION_MAJOR "4") set(CPACK_PACKAGE_VERSION_MINOR "3") set(CPACK_PACKAGE_VERSION_PATCH_NUMBER "5") set(CPACK_PACKAGE_VERSION_PATCH "${CPACK_PACKAGE_VERSION_PATCH_NUMBER}-${LWS_BUILD_HASH}") set(CPACK_PACKAGE_RELEASE 1) set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") set(CPACK_PACKAGE_VENDOR "andy@warmcat.com") set(CPACK_PACKAGE_CONTACT "andy@warmcat.com") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PACKAGE} ${CPACK_PACKAGE_VERSION}") set(SOVERSION "19") if(NOT CPACK_GENERATOR) if(UNIX) set(CPACK_GENERATOR "TGZ") else() set(CPACK_GENERATOR "ZIP") endif() endif() set(CPACK_SOURCE_GENERATOR "TGZ") set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}") set(VERSION "${CPACK_PACKAGE_VERSION}") set(CPACK_RPM_PACKAGE_RELEASE_DIST ON) set(CPACK_RPM_FILE_NAME "RPM-DEFAULT") # below makes path length problems in CI set(CPACK_RPM_DEBUGINFO_PACKAGE OFF) # below makes some kind of chimera rpm with binaries and sources set(CPACK_RPM_PACKAGE_SOURCES OFF) set(CPACK_RPM_INSTALL_WITH_EXEC ON) set(CPACK_RPM_COMPONENT_INSTALL ON) set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT") set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON) set(CPACK_DEBIAN_DEBUGINFO_PACKAGE ON) set(CPACK_DEBIAN_PACKAGE_SOURCE ON) set(CPACK_DEBIAN_COMPONENT_INSTALL ON) set(LWS_LIBRARY_VERSION ${CPACK_PACKAGE_VERSION}) set(LWS_LIBRARY_VERSION_MAJOR ${CPACK_PACKAGE_VERSION_MAJOR}) set(LWS_LIBRARY_VERSION_MINOR ${CPACK_PACKAGE_VERSION_MINOR}) set(LWS_LIBRARY_VERSION_PATCH ${CPACK_PACKAGE_VERSION_PATCH_NUMBER}) set(LWS_LIBRARY_VERSION_PATCH_ELABORATED ${CPACK_PACKAGE_VERSION_PATCH}) if (NOT CMAKE_MODULE_PATH) set(CMAKE_MODULE_PATH "") endif() set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake/") if (CMAKE_TOOLCHAIN_FILE) message(STATUS "CMAKE_TOOLCHAIN_FILE='${CMAKE_TOOLCHAIN_FILE}'") endif() if (NOT LIB_SUFFIX) set(LIB_SUFFIX "") endif() if (WIN32) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/win32port/version.rc.in ${CMAKE_CURRENT_BINARY_DIR}/win32port/version.rc @ONLY) set(RESOURCES ${CMAKE_CURRENT_BINARY_DIR}/win32port/version.rc) endif() include_directories(include) # Allow the user to override installation directories. set(LWS_INSTALL_LIB_DIR lib CACHE PATH "Installation directory for libraries") set(LWS_INSTALL_BIN_DIR bin CACHE PATH "Installation directory for executables") set(LWS_INSTALL_INCLUDE_DIR include CACHE PATH "Installation directory for header files") set(LWS_INSTALL_EXAMPLES_DIR bin CACHE PATH "Installation directory for example files") # if you gave LWS_WITH_MINIZ, point to MINIZ here if not found # automatically set(LWS_ZLIB_LIBRARIES CACHE PATH "Path to the zlib/miniz library") set(LWS_ZLIB_INCLUDE_DIRS CACHE PATH "Path to the zlib/miniz include directory") set(LWS_SQLITE3_LIBRARIES CACHE PATH "Path to the sqlite3 library") set(LWS_SQLITE3_INCLUDE_DIRS CACHE PATH "Path to the sqlite3 include directory") set(LWS_LIBMOUNT_INCLUDE_DIRS CACHE PATH "Path to the libmount include directory") set(LWS_LIBMOUNT_LIBRARIES CACHE PATH "Path to the libmount library") # on unix, these are in the toolchain. On win32 you have to put them somewhere # yourself and point to them here set(LWS_EXT_PTHREAD_INCLUDE_DIR CACHE PATH "Path to an external pthreads include directory") set(LWS_EXT_PTHREAD_LIBRARIES CACHE PATH "Path to an external pthreads library") if (LWS_WITH_HTTP_STREAM_COMPRESSION) set(LWS_WITH_ZLIB 1) endif() if (LWS_WITH_ZLIB AND NOT LWS_WITH_BUNDLED_ZLIB) if ("${LWS_ZLIB_LIBRARIES}" STREQUAL "" OR "${LWS_ZLIB_INCLUDE_DIRS}" STREQUAL "") else() set(ZLIB_LIBRARIES ${LWS_ZLIB_LIBRARIES}) set(ZLIB_INCLUDE_DIRS ${LWS_ZLIB_INCLUDE_DIRS}) set(ZLIB_FOUND 1) endif() endif() if (LWS_WITH_SQLITE3) if ("${LWS_SQLITE3_LIBRARIES}" STREQUAL "" OR "${LWS_SQLITE3_INCLUDE_DIRS}" STREQUAL "") else() set(SQLITE3_LIBRARIES ${LWS_SQLITE3_LIBRARIES}) set(SQLITE3_INCLUDE_DIRS ${LWS_SQLITE3_INCLUDE_DIRS}) set(SQLITE3_FOUND 1) endif() endif() include_directories("${PROJECT_BINARY_DIR}") # Check for different inline keyword versions. foreach(KEYWORD "inline" "__inline__" "__inline") set(CMAKE_REQUIRED_DEFINITIONS "-DKEYWORD=${KEYWORD}") CHECK_C_SOURCE_COMPILES( " #include static KEYWORD void a() {} int main(int argc, char **argv) { a(); return 0; } " LWS_HAVE_${KEYWORD}) endforeach() if (NOT LWS_HAVE_inline) if (LWS_HAVE___inline__) set(inline __inline__) elseif(LWS_HAVE___inline) set(inline __inline) endif() endif() # Put the libraries and binaries that get built into directories at the # top of the build tree rather than in hard-to-find leaf directories. SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin") SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib") SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib") SET(LWS_INSTALL_PATH "${CMAKE_INSTALL_PREFIX}") # Put absolute path of dynamic libraries into the object code. Some # architectures, notably Mac OS X, need this. SET(CMAKE_INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/${LWS_INSTALL_LIB_DIR}${LIB_SUFFIX}") if (LWS_WITHOUT_BUILTIN_SHA1) set(LWS_SHA1_USE_OPENSSL_NAME 1) endif() CHECK_C_SOURCE_COMPILES( "#include int main(int argc, char **argv) { return malloc_trim(0); } " LWS_HAVE_MALLOC_TRIM) CHECK_C_SOURCE_COMPILES( "#include int main(int argc, char **argv) { return (int)malloc_usable_size((void *)0); } " LWS_HAVE_MALLOC_USABLE_SIZE) CHECK_FUNCTION_EXISTS(fork LWS_HAVE_FORK) CHECK_FUNCTION_EXISTS(getenv LWS_HAVE_GETENV) CHECK_FUNCTION_EXISTS(malloc LWS_HAVE_MALLOC) CHECK_FUNCTION_EXISTS(memset LWS_HAVE_MEMSET) CHECK_FUNCTION_EXISTS(realloc LWS_HAVE_REALLOC) CHECK_FUNCTION_EXISTS(socket LWS_HAVE_SOCKET) CHECK_FUNCTION_EXISTS(strerror LWS_HAVE_STRERROR) CHECK_FUNCTION_EXISTS(vfork LWS_HAVE_VFORK) CHECK_FUNCTION_EXISTS(execvpe LWS_HAVE_EXECVPE) CHECK_FUNCTION_EXISTS(getifaddrs LWS_HAVE_GETIFADDRS) CHECK_FUNCTION_EXISTS(snprintf LWS_HAVE_SNPRINTF) CHECK_FUNCTION_EXISTS(_snprintf LWS_HAVE__SNPRINTF) CHECK_FUNCTION_EXISTS(_vsnprintf LWS_HAVE__VSNPRINTF) CHECK_FUNCTION_EXISTS(getloadavg LWS_HAVE_GETLOADAVG) CHECK_FUNCTION_EXISTS(atoll LWS_HAVE_ATOLL) CHECK_FUNCTION_EXISTS(_atoi64 LWS_HAVE__ATOI64) CHECK_FUNCTION_EXISTS(_stat32i64 LWS_HAVE__STAT32I64) CHECK_FUNCTION_EXISTS(clock_gettime LWS_HAVE_CLOCK_GETTIME) CHECK_FUNCTION_EXISTS(localtime_r LWS_HAVE_LOCALTIME_R) CHECK_FUNCTION_EXISTS(gmtime_r LWS_HAVE_GMTIME_R) CHECK_FUNCTION_EXISTS(ctime_r LWS_HAVE_CTIME_R) CHECK_FUNCTION_EXISTS(getgrgid_r LWS_HAVE_GETGRGID_R) CHECK_FUNCTION_EXISTS(getgrnam_r LWS_HAVE_GETGRNAM_R) CHECK_FUNCTION_EXISTS(getpwuid_r LWS_HAVE_GETPWUID_R) CHECK_FUNCTION_EXISTS(getpwnam_r LWS_HAVE_GETPWNAM_R) CHECK_FUNCTION_EXISTS(timegm LWS_HAVE_TIMEGM) if(CMAKE_SYSTEM_NAME MATCHES "Darwin") if(CMAKE_OSX_DEPLOYMENT_TARGET LESS "10.12") message("No clock_gettime found on macOS ${CMAKE_OSX_DEPLOYMENT_TARGET}. Disabling LWS_HAVE_CLOCK_GETTIME.") set(LWS_HAVE_CLOCK_GETTIME 0) endif() endif() if (NOT LWS_HAVE_GETIFADDRS) if (LWS_WITHOUT_BUILTIN_GETIFADDRS) message(FATAL_ERROR "No getifaddrs was found on the system. Turn off the LWS_WITHOUT_BUILTIN_GETIFADDRS compile option to use the supplied BSD version.") endif() set(LWS_BUILTIN_GETIFADDRS 1) endif() if (LWS_EXT_PTHREAD_INCLUDE_DIR) set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES};${LWS_EXT_PTHREAD_INCLUDE_DIR}) include_directories(${LWS_EXT_PTHREAD_INCLUDE_DIR}) list(APPEND LIB_LIST_AT_END ${LWS_EXT_PTHREAD_LIBRARIES}) set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} " -DHAVE_STRUCT_TIMESPEC=1") endif() # # add libs here that need to be at the end of the link order # if (LWS_EXT_PTHREAD_INCLUDE_DIR) list(APPEND LIB_LIST_AT_END ${LWS_EXT_PTHREAD_LIBRARIES}) endif() if (LWS_WITH_ZLIB AND NOT LWS_WITH_BUNDLED_ZLIB) list(APPEND LIB_LIST_AT_END "${ZLIB_LIBRARIES}") endif() if (LWS_WITH_PLUGINS_API AND UNIX AND CMAKE_DL_LIBS AND NOT (${CMAKE_SYSTEM_NAME} MATCHES "QNX")) list(APPEND LIB_LIST_AT_END ${CMAKE_DL_LIBS}) endif() CHECK_INCLUDE_FILE(in6addr.h LWS_HAVE_IN6ADDR_H) CHECK_INCLUDE_FILE(memory.h LWS_HAVE_MEMORY_H) CHECK_INCLUDE_FILE(netinet/in.h LWS_HAVE_NETINET_IN_H) CHECK_INCLUDE_FILE(stdint.h LWS_HAVE_STDINT_H) CHECK_INCLUDE_FILE(stdlib.h LWS_HAVE_STDLIB_H) CHECK_INCLUDE_FILE(strings.h LWS_HAVE_STRINGS_H) CHECK_INCLUDE_FILE(string.h LWS_HAVE_STRING_H) CHECK_INCLUDE_FILE(sys/prctl.h LWS_HAVE_SYS_PRCTL_H) CHECK_INCLUDE_FILE(sys/socket.h LWS_HAVE_SYS_SOCKET_H) CHECK_INCLUDE_FILE(sys/sockio.h LWS_HAVE_SYS_SOCKIO_H) CHECK_INCLUDE_FILE(sys/stat.h LWS_HAVE_SYS_STAT_H) CHECK_INCLUDE_FILE(sys/types.h LWS_HAVE_SYS_TYPES_H) CHECK_INCLUDE_FILE(unistd.h LWS_HAVE_UNISTD_H) CHECK_INCLUDE_FILE(vfork.h LWS_HAVE_VFORK_H) CHECK_INCLUDE_FILE(sys/capability.h LWS_HAVE_SYS_CAPABILITY_H) CHECK_INCLUDE_FILE(malloc.h LWS_HAVE_MALLOC_H) CHECK_INCLUDE_FILE(pthread.h LWS_HAVE_PTHREAD_H) CHECK_INCLUDE_FILE(inttypes.h LWS_HAVE_INTTYPES_H) CHECK_INCLUDE_FILE(sys/resource.h LWS_HAVE_SYS_RESOURCE_H) if (WIN32 OR MSVC) CHECK_C_SOURCE_COMPILES("#include #include int main() { return 0; }" LWS_HAVE_WIN32_AFUNIX_H) if (LWS_UNIX_SOCK AND NOT LWS_HAVE_WIN32_AFUNIX_H) message("No afunix.h found. Disabling LWS_UNIX_SOCK.") set(LWS_WITH_UNIX_SOCK OFF) endif() endif() CHECK_LIBRARY_EXISTS(cap cap_set_flag "" LWS_HAVE_LIBCAP) if (LWS_WITH_ZLIB AND NOT LWS_WITH_BUNDLED_ZLIB) if (LWS_WITH_MINIZ) CHECK_INCLUDE_FILE(miniz.h LWS_HAVE_ZLIB_H) else() CHECK_INCLUDE_FILE(zlib.h LWS_HAVE_ZLIB_H) endif() endif() CHECK_INCLUDE_FILES("stdlib.h;stdarg.h;string.h" STDC_HEADERS) if (NOT CMAKE_REQUIRED_FLAGS) set(CMAKE_REQUIRED_FLAGS "") endif() if (NOT CMAKE_REQUIRED_INCLUDES) set(CMAKE_REQUIRED_INCLUDES "") endif() if (NOT CMAKE_REQUIRED_LIBRARIES) set(CMAKE_REQUIRED_LIBRARIES "") endif() CHECK_C_SOURCE_COMPILES("#include int main(void) { intptr_t test = 1; return 0; }" LWS_HAS_INTPTR_T) if ((CMAKE_C_COMPILER_ID MATCHES "Clang") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang")) set(COMPILER_IS_CLANG ON) endif() if (LWS_HAVE_PTHREAD_H AND NOT LWS_PLAT_FREERTOS) CHECK_C_SOURCE_COMPILES(" #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif #include int main(void) { #ifdef __PTW32_H pthread_t th = {0,0}; #else pthread_t th = 0; #endif pthread_setname_np(th, NULL); return 0; }" LWS_HAS_PTHREAD_SETNAME_NP) endif() CHECK_C_SOURCE_COMPILES("#include #include int main(void) { void *p = (void *)getopt_long; return p != NULL; }" LWS_HAS_GETOPT_LONG) CHECK_C_SOURCE_COMPILES("#include int main(void) { int test = RTA_PREF; return 0; }" LWS_HAVE_RTA_PREF) CHECK_C_SOURCE_COMPILES("#include int main(void) { suseconds_t x = 0; return (int)x; }" LWS_HAVE_SUSECONDS_T) if (NOT PID_T_SIZE) set(pid_t int) endif() if (NOT SIZE_T_SIZE) set(size_t "unsigned int") endif() if (NOT LWS_HAVE_MALLOC) set(malloc rpl_malloc) endif() if (NOT LWS_HAVE_REALLOC) set(realloc rpl_realloc) endif() if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR COMPILER_IS_CLANG) include (CheckCCompilerFlag) CHECK_C_COMPILER_FLAG(-fvisibility=hidden LWS_HAVE_VISIBILITY) if (LWS_WITH_FANALYZER) CHECK_C_COMPILER_FLAG(-fanalyzer LWS_HAVE_FANALYZER) endif() if (LWS_HAVE_VISIBILITY) set(VISIBILITY_FLAG -fvisibility=hidden) endif() if (LWS_WITH_GCOV) set (GCOV_FLAGS "-fprofile-arcs -ftest-coverage ") else() set(GCOV_FLAGS "") endif() if (LWS_WITH_ASAN) set (ASAN_FLAGS "-fsanitize=address -fsanitize=undefined -fsanitize-address-use-after-scope -fsanitize-undefined-trap-on-error") if (NOT COMPILER_IS_CLANG) set (ASAN_FLAGS "${ASAN_FLAGS} -fsanitize=pointer-compare -fsanitize=pointer-subtract -fsanitize=leak") endif() message("Enabling ASAN") else() set(ASAN_FLAGS "") endif() check_c_compiler_flag("-Wignored-qualifiers" LWS_GCC_HAS_IGNORED_QUALIFIERS) check_c_compiler_flag("-Wtype-limits" LWS_GCC_HAS_TYPE_LIMITS) check_c_compiler_flag("-Wno-deprecated-declarations" LWS_GCC_HAS_NO_DEPRECATED_DECLARATIONS) if (LWS_GCC_HAS_IGNORED_QUALIFIERS) set(CMAKE_C_FLAGS "-Wignored-qualifiers ${CMAKE_C_FLAGS}" ) endif() if (LWS_GCC_HAS_TYPE_LIMITS) set(CMAKE_C_FLAGS "-Wtype-limits ${CMAKE_C_FLAGS}" ) endif() if (LWS_WITH_FANALYZER AND LWS_HAVE_FANALYZER) set(CMAKE_C_FLAGS "-fanalyzer ${CMAKE_C_FLAGS}" ) endif() if (CMAKE_COMPILER_IS_CLANG OR CMAKE_C_COMPILER_VERSION VERSION_GREATER 4.4) set(CMAKE_C_FLAGS "-Wuninitialized ${CMAKE_C_FLAGS}") endif() # always warn all and generate debug info if (UNIX AND NOT LWS_PLAT_FREERTOS) set(CMAKE_C_FLAGS "-Wall -Wextra -Wno-unused-parameter -Wconversion -Wsign-compare -Wstrict-aliasing ${VISIBILITY_FLAG} -Wundef ${GCOV_FLAGS} ${CMAKE_C_FLAGS} ${ASAN_FLAGS}" ) else() set(CMAKE_C_FLAGS "-Wall -Wsign-compare ${VISIBILITY_FLAG} ${GCOV_FLAGS} ${CMAKE_C_FLAGS}" ) endif() if (PICO_SDK_PATH) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wno-unused-parameter -Wconversion -Wsign-compare -Wstrict-aliasing -Wundef -nolibc") endif() if (ESP_PLATFORM AND (CONFIG_IDF_TARGET_ESP32 OR CONFIG_IDF_TARGET_ESP32S2 OR CONFIG_IDF_TARGET_ESP32S3)) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mlongcalls") endif() if ("${DISABLE_WERROR}" STREQUAL "OFF") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror") endif() if (LWS_SUPPRESS_DEPRECATED_API_WARNINGS) set(CMAKE_C_FLAGS "-Wno-deprecated ${CMAKE_C_FLAGS}") if (LWS_GCC_HAS_NO_DEPRECATED_DECLARATIONS) set(CMAKE_C_FLAGS "-Wno-deprecated-declarations ${CMAKE_C_FLAGS}") endif() endif() endif () if ((CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) AND NOT LWS_WITHOUT_TESTAPPS) if (UNIX AND LWS_HAVE_PTHREAD_H AND NOT (${CMAKE_SYSTEM_NAME} MATCHES "QNX")) # jeez clang understands -pthread but dies if he sees it at link time! # http://stackoverflow.com/questions/2391194/what-is-gs-pthread-equiv-in-clang set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread" ) list(APPEND LIB_LIST_AT_END -lpthread) endif() endif() if (COMPILER_IS_CLANG) # otherwise osx blows a bunch of openssl deprecated api errors set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-deprecated-declarations" ) if (UNIX AND LWS_HAVE_PTHREAD_H) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread -Wno-error=unused-command-line-argument" ) endif() endif() if (WINCE) list(APPEND LIB_LIST_AT_END ws2.lib) elseif (WIN32) list(APPEND LIB_LIST_AT_END ws2_32.lib userenv.lib psapi.lib iphlpapi.lib crypt32.lib) endif() if (MSVC) # Turn off pointless microsoft security warnings. add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE) # Fail the build if any warnings add_compile_options(/W3 /WX) # Unbreak MSVC broken preprocessor __VA_ARGS__ behaviour if (MSVC_VERSION GREATER 1925) add_compile_options(/Zc:preprocessor /wd5105) else() add_compile_options(/experimental:preprocessor /wd5105) endif() endif(MSVC) if (MINGW) set(LWS_MINGW_SUPPORT 1) set(CMAKE_C_FLAGS "-D__USE_MINGW_ANSI_STDIO ${CMAKE_C_FLAGS}") add_definitions(-DWINVER=0x0601 -D_WIN32_WINNT=0x0601) endif() if (HDR_PRIVATE) source_group("Headers Private" FILES ${HDR_PRIVATE}) endif() if (HDR_PUBLIC) source_group("Headers Public" FILES ${HDR_PUBLIC}) endif() if (SOURCES) source_group("Sources" FILES ${SOURCES}) endif() if (RESOURCES) source_group("Resources" FILES ${RESOURCES}) endif() # # ZLIB (needed for deflate extension and if LWS_WITH_HTTP_STREAM_COMPRESSION) # if (LWS_WITH_ZLIB AND NOT LWS_WITH_BUNDLED_ZLIB) if (NOT ZLIB_FOUND) if (LWS_WITH_MINIZ) find_package(Miniz REQUIRED) set(ZLIB_INCLUDE_DIRS ${MINIZ_INCLUDE_DIR}) set(ZLIB_LIBRARIES ${MINIZ_LIBRARIES}) else() find_package(ZLIB REQUIRED) endif() endif() message("zlib/miniz include dirs: ${ZLIB_INCLUDE_DIRS}") message("zlib/miniz libraries: ${ZLIB_LIBRARIES}") include_directories(${ZLIB_INCLUDE_DIRS}) # done later at end of link list # list(APPEND LIB_LIST ${ZLIB_LIBRARIES}) set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${ZLIB_LIBRARIES}) list(APPEND LIB_LIST_AT_END ${ZLIB_LIBRARIES}) endif() if (LWS_WITH_FSMOUNT AND ${CMAKE_SYSTEM_NAME} STREQUAL "Linux") if (NOT LWS_LIBMOUNT_INCLUDE_DIRS STREQUAL "") include_directories(${LWS_LIBMOUNT_INCLUDE_DIRS}) message("libmount include dir: ${LWS_LIBMOUNT_INCLUDE_DIRS}") endif() if (NOT LWS_LIBMOUNT_LIBRARIES STREQUAL "") message("libmount libraries: ${LWS_LIBMOUNT_LIBRARIES}") list(APPEND LIB_LIST ${LWS_LIBMOUNT_LIBRARIES}) else() list(APPEND LIB_LIST mount) endif() endif() if (LWS_WITH_SQLITE3) if (NOT SQLITE3_FOUND) find_path(SQLITE3_INCLUDE_DIRS NAMES sqlite3.h) find_library(SQLITE3_LIBRARIES NAMES sqlite3) if(SQLITE3_INCLUDE_DIRS AND SQLITE3_LIBRARIES) set(SQLITE3_FOUND 1) endif() endif() message("sqlite3 include dir: ${SQLITE3_INCLUDE_DIRS}") message("sqlite3 libraries: ${SQLITE3_LIBRARIES}") include_directories("${SQLITE3_INCLUDE_DIRS}") list(APPEND LIB_LIST ${SQLITE3_LIBRARIES}) endif() if (LWS_WITH_HUBBUB) find_library(LIBHUBBUB_LIBRARIES NAMES hubbub) list(APPEND LIB_LIST ${LIBHUBBUB_LIBRARIES} ) endif() if (LWS_HAVE_LIBCAP) find_library(LIBCAP_LIBRARIES NAMES cap) list(APPEND LIB_LIST ${LIBCAP_LIBRARIES} ) endif() if (LWS_WITH_PLUGINS_BUILTIN) add_subdirectory(plugins) endif() # # Append the "at end" pieces to the lib list # list(APPEND LIB_LIST ${LIB_LIST_AT_END}) # # Second-level CMakeLists # include_directories("${PROJECT_SOURCE_DIR}/lib") add_subdirectory(lib) if(WIN32 AND NOT CYGWIN) set(DEF_INSTALL_CMAKE_DIR cmake) else() set(DEF_INSTALL_CMAKE_DIR lib${LIB_SUFFIX}/cmake/libwebsockets) endif() configure_file(${PROJECT_SOURCE_DIR}/cmake/LwsCheckRequirements.cmake ${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/LwsCheckRequirements.cmake @ONLY) configure_file(${PROJECT_SOURCE_DIR}/cmake/LwsCheckRequirements.cmake ${PROJECT_BINARY_DIR}/LwsCheckRequirements.cmake @ONLY) # Generate version info for both build-tree and install-tree. configure_file(${PROJECT_SOURCE_DIR}/cmake/libwebsockets-config-version.cmake.in ${PROJECT_BINARY_DIR}/libwebsockets-config-version.cmake @ONLY) # Generate the config file for the build-tree. set(LWS__INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/lib" "${PROJECT_BINARY_DIR}") set(LIBWEBSOCKETS_INCLUDE_DIRS ${LWS__INCLUDE_DIRS} CACHE PATH "Libwebsockets include directories") configure_file(${PROJECT_SOURCE_DIR}/cmake/libwebsockets-config.cmake.in ${PROJECT_BINARY_DIR}/libwebsockets-config.cmake @ONLY) set(LWS_INSTALL_CMAKE_DIR ${DEF_INSTALL_CMAKE_DIR} CACHE PATH "Installation directory for CMake files") # Export targets (This is used for other CMake projects to easily find the libraries and include files). if (LWS_WITH_EXPORT_LWSTARGETS) export(TARGETS ${LWS_LIBRARIES} FILE "${PROJECT_BINARY_DIR}/LibwebsocketsTargets.cmake") endif() set(libwebsockets_DIR ${PROJECT_BINARY_DIR}) set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") message("DIR ${libwebsockets_DIR} CMP ${CMAKE_MODULE_PATH}") if (LWS_WITH_MINIMAL_EXAMPLES) add_subdirectory(minimal-examples) endif() if (NOT LWS_WITHOUT_TESTAPPS) add_subdirectory(test-apps) endif() if (NOT LWS_WITH_PLUGINS_BUILTIN) add_subdirectory(plugins) endif() add_subdirectory(lwsws) # Generate the lws_config.h that includes all the public compilation settings. configure_file( "${PROJECT_SOURCE_DIR}/cmake/lws_config.h.in" "${PROJECT_BINARY_DIR}/lws_config.h") add_custom_command( OUTPUT ${PROJECT_BINARY_DIR}/include/lws_config.h ${PROJECT_BINARY_DIR}/include/libwebsockets ${PROJECT_BINARY_DIR}/include/libwebsockets.h COMMENT "Creating build include dir" COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/include/libwebsockets.h ${CMAKE_CURRENT_BINARY_DIR}/include/libwebsockets.h COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/include/libwebsockets/ ${CMAKE_CURRENT_BINARY_DIR}/include/libwebsockets COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/lws_config.h ${CMAKE_CURRENT_BINARY_DIR}/include/lws_config.h MAIN_DEPENDENCY ${PROJECT_BINARY_DIR}/lws_config.h ) add_custom_target(GENHDR DEPENDS ${PROJECT_BINARY_DIR}/include/lws_config.h) file(GLOB HDR_PUBLIC1 RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} include/libwebsockets/*.h) file(GLOB HDR_PUBLIC2 RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} include/libwebsockets.h) file(GLOB HDR_PUBLIC3 RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/include/lws_config.h) list(APPEND HDR_PUBLIC ${HDR_PUBLIC1} ${HDR_PUBLIC2} ${HDR_PUBLIC3}) set_source_files_properties(${HDR_PUBLIC} PROPERTIES GENERATED 1) if (LWS_WITH_STATIC) add_dependencies(websockets GENHDR) endif() if (LWS_WITH_SHARED) add_dependencies(websockets_shared GENHDR) endif() # # # Installation preparations. # export(PACKAGE libwebsockets) install(DIRECTORY include/libwebsockets DESTINATION "${LWS_INSTALL_INCLUDE_DIR}" COMPONENT dev) install(FILES ${PROJECT_BINARY_DIR}/include/libwebsockets.h ${PROJECT_BINARY_DIR}/include/lws_config.h DESTINATION "${LWS_INSTALL_INCLUDE_DIR}" COMPONENT dev) # Generate the config file for the installation tree. get_filename_component(LWS_ABSOLUTE_INSTALL_CMAKE_DIR ${LWS_INSTALL_CMAKE_DIR} ABSOLUTE) get_filename_component(LWS_ABSOLUTE_INSTALL_INCLUDE_DIR ${LWS_INSTALL_INCLUDE_DIR} ABSOLUTE) file(RELATIVE_PATH REL_INCLUDE_DIR "${LWS_ABSOLUTE_INSTALL_CMAKE_DIR}" "${LWS_ABSOLUTE_INSTALL_INCLUDE_DIR}") # Calculate the relative directory from the cmake dir. if (DEFINED REL_INCLUDE_DIR) set(LWS__INCLUDE_DIRS "\${LWS_CMAKE_DIR}/${REL_INCLUDE_DIR}") endif() if (DEFINED OPENSSL_INCLUDE_DIRS) set(LWS__INCLUDE_DIRS "${LWS__INCLUDE_DIRS};${OPENSSL_INCLUDE_DIRS}") endif() configure_file(${PROJECT_SOURCE_DIR}/cmake/libwebsockets-config.cmake.in ${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/libwebsockets-config.cmake @ONLY) set_target_properties(${LWS_LIBRARIES} PROPERTIES PUBLIC_HEADER "${HDR_PUBLIC}") # Install the LibwebsocketsConfig.cmake and LibwebsocketsConfigVersion.cmake install(FILES "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/libwebsockets-config.cmake" "${PROJECT_BINARY_DIR}/libwebsockets-config-version.cmake" "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/LwsCheckRequirements.cmake" DESTINATION "${LWS_INSTALL_CMAKE_DIR}" COMPONENT dev) # Install exports for the install-tree. if (LWS_WITH_EXPORT_LWSTARGETS) install(EXPORT LibwebsocketsTargets DESTINATION "${LWS_INSTALL_CMAKE_DIR}" COMPONENT dev) endif() # build subdir is not part of sources set(CPACK_SOURCE_IGNORE_FILES $(CPACK_SOURCE_IGNORE_FILES) "/.git/" "/build/" "\\\\.tgz$" "\\\\.tar\\\\.gz$") # Most people are more used to "make dist" compared to "make package_source" add_custom_target(dist COMMAND "${CMAKE_MAKE_PROGRAM}" package_source) # This must always be last! include(CPack) libwebsockets-4.3.5/Kconfig000066400000000000000000000015311476025525100156750ustar00rootroot00000000000000menu "Libwebsockets" config LWS_MODEL_NAME string "Model name of device firmware is for" default "lws" config LWS_IS_FACTORY_APPLICATION bool "Is this application is designed for the FACTORY flash slot" default "n" config LWS_OTA_SERVER_FQDN depends on LWS_IS_FACTORY_APPLICATION string "Domain name of OTA update server, eg, warmcat.com" default "" config LWS_OTA_SERVER_BASE_URL depends on LWS_IS_FACTORY_APPLICATION string "Base URL on OTA update server, eg, /esp32-ota (model is added)" default "/esp32-ota" config LWS_OTA_SERVER_UPLOAD_USER depends on LWS_IS_FACTORY_APPLICATION string "User to scp to upload server with" default "root" config LWS_OTA_SERVER_UPLOAD_PATH depends on LWS_IS_FACTORY_APPLICATION string "Path served in upload server (eg, \"/var/www/libwebsockets.org\"" default "/var/www/libwebsockets.org" endmenu libwebsockets-4.3.5/LICENSE000066400000000000000000000345621476025525100154110ustar00rootroot00000000000000Libwebsockets and included programs are provided under the terms of the MIT license shown below, with the exception that some sources are under a similar permissive license like BSD, or are explicitly CC0 / public domain to remove any obstacles from basing differently-licensed code on them. Original liberal license retained: - lib/misc/sha-1.c - 3-clause BSD license retained, link to original [BSD3] - win32port/zlib - ZLIB license (see zlib.h) [ZLIB] - lib/tls/mbedtls/wrapper - Apache 2.0 (only built if linked against mbedtls) [APACHE2] lib/tls/mbedtls/mbedtls-extensions.c - lib/misc/base64-decode.c - already MIT - lib/misc/ieeehalfprecision.c - 2-clause BSD license retained [BSD2] Relicensed to MIT: - lib/misc/daemonize.c - relicensed from Public Domain to MIT, link to original Public Domain version - lib/plat/windows/windows-resolv.c - relicensed from "Beerware v42" to MIT Public Domain (CC-zero) to simplify reuse: - test-apps/*.c - test-apps/*.h - minimal-examples/* - lwsws/* Although libwebsockets is available under a permissive license, it does not change the reality of dealing with large lumps of external code... if your copy diverges it is guaranteed to contain security problems after a while and can be very painful to pick backports (especially since historically, we are very hot on cleaning and refactoring the codebase). The least painful and lowest risk way remains sending your changes and fixes upstream to us so you can easily use later releases and fixes. ## MIT License applied to libwebsockets https://opensource.org/licenses/MIT Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ## BSD2 ``` * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the distribution * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. ``` ## BSD3 For convenience, a copy of the license on `./lib/misc/sha-1.c`. In binary distribution, this applies to builds with ws support enabled, and without `LWS_WITHOUT_BUILTIN_SHA1` at cmake. ``` /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the project nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH ``` ## ZLIB For convenience, a copy of the license on zlib. In binary distribution, this applies for win32 builds with internal zlib only. You can avoid building any zlib usage or copy at all with `-DLWS_WITH_ZLIB=0` (the default), and so avoid needing to observe the license for binary distribution that doesn't include the related code. ``` This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. Jean-loup Gailly Mark Adler jloup@gzip.org madler@alumni.caltech.edu ``` ## APACHE2 For convenience, a copy of the license on the mbedtls wrapper part. In binary distribution, this applies only when building lws against mbedtls. The canonical license application to source files uses the URL reference, so the whole is not reproduced here. ``` // Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. ``` ## CC0 For convenience,the full text of CC0 dedication found on the lws examples. The intention of this is to dedicate the examples to the public domain, so users can build off and modify them without any constraint. ``` Statement of Purpose The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work"). Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others. For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights. 1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following: the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work; moral rights retained by the original author(s) and/or performer(s); publicity and privacy rights pertaining to a person's image or likeness depicted in a Work; rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below; rights protecting the extraction, dissemination, use and reuse of data in a Work; database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof. 2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose. 3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose. 4. Limitations and Disclaimers. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work. ``` libwebsockets-4.3.5/Makefile.projbuild000066400000000000000000000000661476025525100200250ustar00rootroot00000000000000CPPFLAGS += -I$(BUILD_DIR_BASE)/libwebsockets/include libwebsockets-4.3.5/README.md000066400000000000000000000072461476025525100156620ustar00rootroot00000000000000[![CI status](https://libwebsockets.org/sai/status/libwebsockets)](https://libwebsockets.org/git/libwebsockets) [![Coverity Scan Build Status](https://scan.coverity.com/projects/3576/badge.svg)](https://scan.coverity.com/projects/3576) [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/2266/badge)](https://bestpractices.coreinfrastructure.org/projects/2266) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/144fb195a83046e484a75c8b4c6cfc99)](https://www.codacy.com/app/lws-team/libwebsockets?utm_source=github.com&utm_medium=referral&utm_content=warmcat/libwebsockets&utm_campaign=Badge_Grade) [![Total alerts](https://img.shields.io/lgtm/alerts/g/warmcat/libwebsockets.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/warmcat/libwebsockets/alerts/) [![Language grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/warmcat/libwebsockets.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/warmcat/libwebsockets/context:cpp) [![Language grade: JavaScript](https://img.shields.io/lgtm/grade/javascript/g/warmcat/libwebsockets.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/warmcat/libwebsockets/context:javascript) # Libwebsockets Libwebsockets is a simple-to-use, MIT-license, pure C library providing client and server for **http/1**, **http/2**, **websockets**, **MQTT** and other protocols in a security-minded, lightweight, configurable, scalable and flexible way. It's easy to build and cross-build via cmake and is suitable for tasks from embedded RTOS through mass cloud serving. It supports a lot of lightweight ancilliary implementations for things like JSON, CBOR, JOSE, COSE, and supports OpenSSL and MbedTLS v2 and v3 out of the box for everything. It's very gregarious when it comes to event loop sharing, supporting libuv, libevent, libev, sdevent, glib and uloop, as well as custom event libs. [100+ independent minimal examples](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples) for various scenarios, CC0-licensed (public domain) for cut-and-paste, allow you to get started quickly. [There are a lot of READMEs](https://libwebsockets.org/git/libwebsockets/tree/READMEs) on a variety of topics. [We do a huge amount of CI testing per push](https://libwebsockets.org/sai/), currently 582 builds on 30 platforms. [You can see the lws CI rack and read about how lws-based Sai is used to coordinate all the testing](https://warmcat.com/2021/08/21/Sai-CI.html). ![overview](./doc-assets/lws-overview.png) News ---- ## v4.3 is released See the [changelog](https://libwebsockets.org/git/libwebsockets/tree/changelog) ## Lws work retrospective The initial commit for lws will have been 11 years ago come Oct 28 2021, it's been a lot of work. There are a total of 4.3K patches, touching 800KLOC cumulatively (this is not the size in the repo, but over the years, how many source lines were changed by patches). ![overview](./doc-assets/work.png) Gratifyingly, it turns out over the years, ~15% of that was contributed by 404 contributors: that's not so bad. Thanks a lot to everyone who has provided patches. Today at least tens of millions of devices and product features rely on lws to handle their communications including several from FAANG; Google now include lws as part of Android sources. ## Support This is the libwebsockets C library for lightweight websocket clients and servers. For support, visit https://libwebsockets.org and consider joining the project mailing list at https://libwebsockets.org/mailman/listinfo/libwebsockets You can get the latest version of the library from git: - https://libwebsockets.org/git Doxygen API docs for development: https://libwebsockets.org/lws-api-doc-main/html/index.html libwebsockets-4.3.5/READMEs/000077500000000000000000000000001476025525100155125ustar00rootroot00000000000000libwebsockets-4.3.5/READMEs/README.async-dns.md000066400000000000000000000104541476025525100206730ustar00rootroot00000000000000# Asynchronous DNS ## Introduction Lws now features optional asynchronous, ie, nonblocking recursive DNS resolution done on the event loop, enable `-DLWS_WITH_SYS_ASYNC_DNS=1` at cmake to build it in. ## Description The default libc name resolution is via libc `getaddrinfo()`, which is blocking, possibly for quite long periods (seconds). If you are taking care about latency, but want to create outgoing connections, you can't tolerate this exception from the rule that everything in lws is nonblocking. Lws' asynchronous DNS resolver creates a caching name resolver that directly queries the configured nameserver itself over UDP, from the event loop. It supports both ipv4 / A records and ipv6 / AAAA records (see later for a description about how). One server supported over UDP :53, and the nameserver is autodicovered on linux, windows, and freertos. Other features - lws-style paranoid response parsing - random unique tid generation to increase difficulty of poisoning - it's really integrated with the lws event loop, it does not spawn threads or use the libc resolver, and of course no blocking at all - platform-specific server address capturing (from /etc/resolv.conf on linux, windows apis on windows) - LRU caching - piggybacking (multiple requests before the first completes go on a list on the first request, not spawn multiple requests) - observes TTL in cache - TTL and timeout use `lws_sul` timers on the event loop - Uses CNAME resolution inside the same response if present, otherwise recurses to resolve the CNAME (up to 3 deep) - ipv6 pieces only built if cmake `LWS_IPV6` enabled ## Api If enabled at cmake, the async DNS implementation is used automatically for lws client connections. It's also possible to call it directly, see the api-test-async-dns example for how. The Api follows that of `getaddrinfo()` but results are not created on the heap. Instead a single, const cached copy of the addrinfo struct chain is reference-counted, with `lws_async_dns_freeaddrinfo()` provided to deduct from the reference count. Cached items with a nonzero reference count can't be destroyed from the cache, so it's safe to keep a pointer to the results and iterate through them. ## Dealing with IPv4 and IPv6 DNS is a very old standard that has some quirks... one of them is that multiple queries are not supported in one packet, even though the protocol suggests it is. This creates problems on ipv6 enabled systems, where it may prefer to have AAAA results, but the server may only have A records. To square the circle, for ipv4 only systems (`LWS_IPV6=0`) the resolver requests only A records. For ipv6-capable systems, it always requests first A and then immediately afterwards AAAA records. To simplify the implementation, the tid b0 is used to differentiate between A (b0 = 0) and AAAA (b0 = 1) requests and responses using the same query body. The first response to come back is parsed, and a cache entry made... it leaves a note in the query about the address of the last `struct addrinfo` record. When the second response comes, a second allocation is made, but not added to the logical cache... instead it's chained on to the first cache entry and the `struct addrinfo` linked-list from the first cache entry is extended into the second one. At the time the second result arrives, the query is destroyed and the cached results provided on the result callback. ## Recursion Where CNAMEs are returned, DNS servers may take two approaches... if the CNAME is also resolved by the same server and so it knows what it should resolve to, it may provide the CNAME resolution in the same response packet. In the case the CNAME is actually resolved by a different name server, the server with the CNAME does not have the information to hand to also resolve the CNAME in the same response. So it just leaves it for the client to sort out. The lws implementation can deal with both of these, first it "recurses" (it does not recurse on the process stack but uses its own manual stack) to look for results in the same packet that told it about the CNAME. If there are no results, it resets the query to look instead for the CNAME, and restarts it. It allows this to happen for 3 CNAME deep. At the end, either way, the cached result is set using the original query name and the results from the last CNAME in the chain. libwebsockets-4.3.5/READMEs/README.build-android.md000066400000000000000000000046021476025525100215070ustar00rootroot00000000000000# Building for Android NDK If you have the ndk and prebuilt toolchains with that, you can simply build lws library for your android app from one cmake and one make command. However if you want a tls lib, you have to take care of building and pointing to that first. But if it's a cmake project like mbedtls, that also is just a matter of one cmake and one make. ## Installing NDK pieces There's probably a more direct way but the official way is install the whole Android Studio and then run `sdkmanager` to install a recent NDK. I installed the sdk and ndk pieces into /opt/android/ and that's how the `./contrib/cross-aarch64-android.cmake` toolchain file is shipped. You can adapt some settings at the top of that file including the path if needed. ## Fetching lws (needed first for cross toolchain file) It doesn't care where you put these projects, but for simplicity they should be in the same parent dir, like ``` - /home/someone - /home/someone/libwebsockets - /home/someone/mbedtls ``` The reason is that building mbedtls need the cross toolchain file from libwebsockets, that's also why we have to get libwebsockets first now but build it later. ``` $ git clone https://libwebsockets.org/repo/libwebsockets ``` ## Building mbedtls ``` $ git clone https://github.com/ARMmbed/mbedtls.git $ cd mbedtls $ mkdir build $ cd build $ rm -f CMakeCache.txt && \ cmake .. -DCMAKE_TOOLCHAIN_FILE=../libwebsockets/contrib/cross-aarch64-android.cmake \ -DUSE_SHARED_MBEDTLS_LIBRARY=1 \ -DENABLE_PROGRAMS=0 \ -Wno-dev && \ make -j && \ cmake --install . ``` The lws toolchain file sets the path to install into as the cross root path, so despite it looks like the destination dir is missing for the install, it will go into, eg `/opt/android/ndk/21.1.6352462/platforms/android-24/arch-arm64/lib/libmbedcrypto.a` where lws will look for it ## Building lws You don't need to explain where mbedtls can be found... lws will build with the same toolchain file that sets the cross root to the same place as mbedtls, it will easily find them there without any further hints. ``` $ mkdir build $ cd build $ rm -f CMakeCache.txt && \ cmake .. -DCMAKE_TOOLCHAIN_FILE=../libwebsockets/contrib/cross-aarch64-android.cmake \ -DLWS_WITH_MBEDTLS=1 \ -DLWS_WITHOUT_TESTAPPS=1 && \ make && \ cmake --install . ``` That's it, both mbedtls and lws library and header files are installed into the ndk cross root. libwebsockets-4.3.5/READMEs/README.build-windows.md000066400000000000000000000150671476025525100215700ustar00rootroot00000000000000# Some notes for the windows jungle This was how I compiled libwebsockets starting from a blank windows install in March - April 2020. Doing this on a linux distro is way simpler and quicker than all this! ## Notes on vm installation ### Disk size For building you'll need 40GB+ available for the guest storage. ### Required: Windows product key Assuming like me the first thing you do with a new laptop is install Linux over the windows it came with, you can recover your 'windows tax' windows product key from your device typically using `sudo strings /sys/firmware/acpi/tables/MSDM`, and use that for your VM install. ### Required: Spice guest To have shared clipboard, and for windows video driver to match your vm window resolution, you must install spice guest tools inside the windows VM. It also installs some virtio pieces you will want. https://www.spice-space.org/download/windows/spice-guest-tools/spice-guest-tools-latest.exe ### Blood-pressure reduction: Firefox https://www.mozilla.org/en-US/exp/firefox/ When it's up, add-ons: ublock origin, privacy badger, noscript, disable search bar prediction ### Blood-pressure reduction: Clink This is a hack on cmd.exe that lets it understand Ctrl-R and fixup unix-style slashes automagically. https://github.com/mridgers/clink/releases/download/0.4.9/clink_0.4.9_setup.exe If you're usually using *nix, you definitely need this to keep your sanity. ### Required: cmake CMake have a windows installer thing downloadable from here [cmake](https://cmake.org/download/) after that you can use `cmake` from the terminal OK. ### Required: git Visit the canonical git site to download their windows installer thing [git](https://git-scm.com/download/win) **Select the install option for "extra unix commands"** so you can get `ls -l`, `cp`, `mv` and suchlike working in cmd.exe... that's awesome, thanks git! Afterwards you can just use `git` as normal from cmd.exe as well. ### Required: Install the "free" "community" visual studio You can do this through "windows store" by searching for "visual studio" I installed as little as possible, we just want the C "C++" tools... 7GB :-) It still wouldn't link without the "mt" helper tool from the huge windows SDK, so you have to install GB of that as well. They don't mention it during the install, but after 30 days this "free" "community" edition demands you open a microsoft account or it stops working. In the install they give you the option to add a microsoft account and the alternative is, "not now, maybe later". Compare and contrast to gcc or git or the other FOSS projects. ### Required: OpenSSL Ugh... I tried using prebuilts but it's unreliable and needs an unfeasible amount of trust. So I recommend bite the bullet and build your own... that's trivial on Linux but of course windows makes everything nasty. At least hopefully all the "research" is done and listed out here. #### OpenSSL build Prerequisite: install perl binary Move the git version of perl out of the way, it won't work for OpenSSL build ``` mv /usr/bin/perl /usr/bin/perl-git ``` For windows, OpenSSL "recommends" ActiveState perl but it doesn't work for me, complaining about stuff needed from cpan and then dying when it was installed. "Strawberry Perl" is installed in `C:\Strawberry` and worked out the box. http://strawberryperl.com/download/5.30.2.1/strawberry-perl-5.30.2.1-64bit.msi The installer sets up `%PATH%` if you open a new cmd window. #### OpenSSL build Prerequisite: NASM Go here and click on the latest stable, download the win32 .exe https://nasm.us/ Just install via the defaults. Then add it to the PATH temporarily... ``` $ set PATH=%PATH%;C:\Program Files (x86)\NASM ``` #### OpenSSL build setup: source VC env vars These fix up the PATH and include dirs etc necessary for VC build in the cmd window. ``` $ call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64 ``` ### OpenSSL build: Grab openssl from git... assuming the prerequisites above went well it will just sit there building for 30 minutes or whatever. ``` $ git clone https://github.com/openssl/openssl $ cd openssl $ perl Configure VC-WIN64A $ nmake ``` Afterwards, open an Administrator mode cmd.exe, redo the msvc path and then install the build. ``` $ cd openssl $ call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64 $ nmake install ``` Oh another grindingly slow windows build action. Finally it's in there in `C:\Program Files\OpenSSL`. libraries are looking for a cert bundle at "C:\Program Files\Common Files\SSL\cert.pem"... it's not documented or included in the zip file from the above, so... #### Installing a cert bundle You can get a trusted cert bundle from here [drwetter/testssl cert bundle](https://raw.githubusercontent.com/drwetter/testssl.sh/3.1dev/etc/Microsoft.pem) Save it into `C:\Program Files\Common Files\SSL\cert.pem` where openssl will be able to see it. ## Required: pthreads It's amazing but after all these years windows doesn't offer pthreads compatibility itself. Just like the many other missing POSIX bits like fork(). I downloaded the latest (2012) zip release of pthreads-win32 from here ftp://sourceware.org/pub/pthreads-win32 Then I created a dir "C:\Program Files (x86)\pthreads", and copied the `dll`, `include` and `lib` subdirs from the `prebuilt` folder in the zip there. The cmake incantation to build against pthreads set up like that is ``` $ cmake .. -DLWS_HAVE_PTHREAD_H=1 -DLWS_EXT_PTHREAD_INCLUDE_DIR="C:\Program Files (x86)\pthreads\include" -DLWS_EXT_PTHREAD_LIBRARIES="C:\Program Files (x86)\pthreads\lib\x64\libpthreadGC2.a" -DLWS_WITH_MINIMAL_EXAMPLES=1 ``` ## Building libwebsockets We'll clone libwebsockets then use cmake to build via vs tools ``` > git clone https://libwebsockets.org/repo/libwebsockets > cd libwebsockets > mkdir build > cd build > cmake .. > cmake --build . --config DEBUG ``` Installing requires admin privs, I opened a second cmd window as admin and did it there. ``` > cmake --install . --config DEBUG ``` ### Hack the libs into view The libs we built against aren't visible in the system, I don't know what Real Windows Programmers are supposed to do about that, but I used an Admin cmd prompt to copy them into C:\windows\system32 ``` $ cp "C:\Program Files (x86)\pthreads\dll\x64\pthreadGC2.dll" "C:\Program Files\OpenSSL\bin\libcrypto-3.dll" "C:\Program Files\OpenSSL\bin\libssl-3.dll" C:\Windows\system32 ``` After that you can run the test apps OK, eg ``` $ libwebsockets-test-server.exe -s ``` ## Note about using paths with spaces in with cmake libwebsockets-4.3.5/READMEs/README.build.md000066400000000000000000000643121476025525100200750ustar00rootroot00000000000000Notes about building lws ======================== You can download and install lws using the [vcpkg](https://github.com/Microsoft/vcpkg/) dependency manager: ``` git clone https://github.com/microsoft/vcpkg.git cd vcpkg ./bootstrap-vcpkg.sh ./vcpkg integrate install vcpkg install libwebsockets ``` The lws port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please [create an issue or pull request](https://github.com/Microsoft/vcpkg/) on the vcpkg repository. @section cm Introduction to CMake CMake is a multi-platform build tool that can generate build files for many different target platforms. See more info at http://www.cmake.org CMake also allows/recommends you to do "out of source"-builds, that is, the build files are separated from your sources, so there is no need to create elaborate clean scripts to get a clean source tree, instead you simply remove your build directory. Libwebsockets has been tested to build successfully on the following platforms with SSL support (for OpenSSL/wolfSSL/BoringSSL): - Windows (Visual Studio) - Windows (MinGW) - Linux (x86 and ARM) - OSX - NetBSD @section build1 Building the library and test apps The project settings used by CMake to generate the platform specific build files is called [CMakeLists.txt](../CMakeLists.txt). CMake then uses one of its "Generators" to output a Visual Studio project or Make file for instance. To see a list of the available generators for your platform, simply run the "cmake" command. Note that by default OpenSSL will be linked, if you don't want SSL support see below on how to toggle compile options. @section bu Building on Unix: 1. Install CMake 2.8 or greater: http://cmake.org/cmake/resources/software.html (Most Unix distributions comes with a packaged version also) 2. Install OpenSSL. 3. Generate the build files (default is Make files): ``` $ cd /path/to/src $ mkdir build $ cd build $ cmake .. ``` 4. Finally you can build using the generated Makefile: ``` $ make && sudo make install ``` **NOTE**: The `build/`` directory can have any name and be located anywhere on your filesystem, and that the argument `..` given to cmake is simply the source directory of **libwebsockets** containing the [CMakeLists.txt](../CMakeLists.txt) project file. All examples in this file assumes you use ".." **NOTE2**: A common option you may want to give is to set the install path, same as --prefix= with autotools. It defaults to /usr/local. You can do this by, eg ``` $ cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr . ``` **NOTE3**: On machines that want libraries in lib64, you can also add the following to the cmake line ``` -DLIB_SUFFIX=64 ``` **NOTE4**: If you are building against a non-distro OpenSSL (eg, in order to get access to ALPN support only in newer OpenSSL versions) the nice way to express that in one cmake command is eg, ``` $ cmake .. -DOPENSSL_ROOT_DIR=/usr/local/ssl \ -DCMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE=/usr/local/ssl \ -DLWS_WITH_HTTP2=1 ``` When you run the test apps using non-distro SSL, you have to force them to use your libs, not the distro ones ``` $ LD_LIBRARY_PATH=/usr/local/ssl/lib libwebsockets-test-server --ssl ``` To get it to build on latest openssl (2016-04-10) it needed this approach ``` cmake .. -DLWS_WITH_HTTP2=1 -DLWS_OPENSSL_INCLUDE_DIRS=/usr/local/include/openssl -DLWS_OPENSSL_LIBRARIES="/usr/local/lib64/libssl.so;/usr/local/lib64/libcrypto.so" ``` Mac users have reported ``` $ export OPENSSL_ROOT_DIR=/usr/local/Cellar/openssl/1.0.2k; cmake ..; make -j4 ``` worked for them when using "homebrew" OpenSSL **NOTE5**: To build with debug info and _DEBUG for lower priority debug messages compiled in, use ``` $ cmake .. -DCMAKE_BUILD_TYPE=DEBUG ``` **NOTE6** To build on Solaris the linker needs to be informed to use lib socket and libnsl, and only builds in 64bit mode. ```bash $ cmake .. -DCMAKE_C_FLAGS=-m64 -DCMAKE_EXE_LINKER_FLAGS="-lsocket -lnsl" ``` **NOTE7** Build and test flow against boringssl. Notice `LWS_WITH_GENHASH` is currently unavailable with boringssl due to their removing the necessary apis. Build current HEAD boringssl ``` $ cd /projects $ git clone https://boringssl.googlesource.com/boringssl $ cd boringssl $ mkdir build $ cd build $ cmake .. -DBUILD_SHARED_LIBS=1 $ make -j8 ``` Build and test lws against it ``` $ cd /projects/libwebsockets/build $ cmake .. -DOPENSSL_LIBRARIES="/projects/boringssl/build/ssl/libssl.so;\ /projects/boringssl/build/crypto/libcrypto.so" \ -DOPENSSL_INCLUDE_DIRS=/projects/boringssl/include \ -DLWS_WITH_BORINGSSL=1 -DCMAKE_BUILD_TYPE=DEBUG $ make -j8 && sudo make install $ LD_PRELOAD="/projects/boringssl/build/ssl/libssl.so \ /projects/boringssl/build/crypto/libcrypto.so" \ /usr/local/bin/libwebsockets-test-server -s ``` 4. Finally you can build using the generated Makefile: ```bash $ make ``` @section lcap Linux Capabilities On Linux, lws now lets you retain selected root capabilities when dropping privileges. If libcap-dev or similar package is installed providing sys/capabilities.h, and libcap or similar package is installed providing libcap.so, CMake will enable the capability features. The context creation info struct .caps[] and .count_caps members can then be set by user code to enable selected root capabilities to survive the transition to running under an unprivileged user. @section cmq Quirk of cmake When changing cmake options, for some reason the only way to get it to see the changes sometimes is delete the contents of your build directory and do the cmake from scratch. deleting build/CMakeCache.txt may be enough. @section cmw Building on Windows (Visual Studio) 1. Install CMake 2.6 or greater: http://cmake.org/cmake/resources/software.html 2. Install OpenSSL binaries. https://wiki.openssl.org/index.php/Binaries (**NOTE**: Preferably in the default location to make it easier for CMake to find them) **NOTE2**: Be sure that OPENSSL_CONF environment variable is defined and points at \bin\openssl.cfg 3. Generate the Visual studio project by opening the Visual Studio cmd prompt: ``` cd md build cd build cmake -G "Visual Studio 10" .. ``` (**NOTE**: There is also a cmake-gui available on Windows if you prefer that) **NOTE2**: See this link to find out the version number corresponding to your Visual Studio edition: http://superuser.com/a/194065 4. Now you should have a generated Visual Studio Solution in your `/build` directory, which can be used to build. 5. Some additional deps may be needed - iphlpapi.lib - psapi.lib - userenv.lib 6. If you're using libuv, you must make sure to compile libuv with the same multithread-dll / Mtd attributes as libwebsockets itself @section cmwmgw Building on Windows (MinGW) 1. Install MinGW For Fedora, it's, eg, `dnf install mingw64-gcc` 2. Install current CMake package For Fedora, it's `dnf install cmake` 3. Instal mingw-built OpenSSL pieces For Fedora, it's `mingw64-openssl.noarch mingw64-openssl-static.noarch` mingw64-cmake as described below will auto-find the libs and includes for build. But to execute the apps, they either need to go into the same `/usr/x86_64-w64-mingw32/sys-root/mingw/bin/` as the dlls are installed to, or the dlls have to be copied into the same dir as your app executable. 4. Generate the build files (default is Make files) using MSYS shell. For Fedora, they provide a `mingw64-cmake` wrapper in the package `mingw64-filesystem`, with this you can run that instead of cmake directly and don't have to get involved with setting the cmake generator. Otherwise doing it by hand is like this: ``` $ cd /drive/path/to/src $ mkdir build $ cd build $ cmake -G "MSYS Makefiles" -DCMAKE_INSTALL_PREFIX=C:/MinGW .. ``` To generate build files allowing to create libwebsockets binaries with debug information set the CMAKE_BUILD_TYPE flag to DEBUG: ``` $ cmake -G "MSYS Makefiles" -DCMAKE_INSTALL_PREFIX=C:/MinGW -DCMAKE_BUILD_TYPE=DEBUG .. ``` 5. Finally you can build using the generated Makefile and get the results deployed into your MinGW installation: ``` $ make && make install ``` @section distro Selecting CMake options useful for distros Distro packagers should select the CMake option "LWS_WITH_DISTRO_RECOMMENDED", which selects common additional options like support for various event libraries, plugins and lwsws. @section ssllib Choosing Your TLS Poison - If you are really restricted on memory, code size, or don't care about TLS speed, mbedTLS is a good choice: `cmake .. -DLWS_WITH_MBEDTLS=1` - If cpu and memory is not super restricted and you care about TLS speed, OpenSSL or a directly compatible variant like Boring SSL is a good choice. Just building lws against stock Fedora OpenSSL or stock Fedora mbedTLS, for SSL handhake mbedTLS takes ~36ms and OpenSSL takes ~1ms on the same x86_64 build machine here, with everything else the same. Over the 144 connections of h2spec compliance testing for example, this ends up completing in 400ms for OpenSSL and 5.5sec for mbedTLS on x86_64. In other words mbedTLS is very slow compared to OpenSSL under the (fairly typical) conditions I tested it. This isn't an inefficiency in the mbedtls interface implementation, it's just mbedTLS doing the crypto much slower than OpenSSL, which has accelerated versions of common crypto operations it automatically uses for platforms supporting it. As of Oct 2017 mbedTLS itself has no such optimizations for any platform that I could find. It's just pure C running on the CPU. Lws supports both almost the same, so instead of taking my word for it you are invited to try it both ways and see which the results (including, eg, binary size and memory usage as well as speed) suggest you use. NOTE: one major difference with mbedTLS is it does not load the system trust store by default. That has advantages and disadvantages, but the disadvantage is you must provide the CA cert to lws built against mbedTLS for it to be able to validate it, ie, use -A with the test client. The minimal test clients have the CA cert for warmcat.com and libwebsockets.org and use it if they see they were built with mbedTLS. @section optee Building for OP-TEE OP-TEE is a "Secure World" Trusted Execution Environment. Although lws is only part of the necessary picture to have an https-enabled TA, it does support OP-TEE as a platform and if you provide the other pieces, does work very well. Select it in cmake with `-DLWS_PLAT_OPTEE=1` @section cmco Setting compile options To set compile time flags you can either use one of the CMake gui applications or do it via the command line. @subsection cmcocl Command line To list available options (omit the H if you don't want the help text): cmake -LH .. Then to set an option and build (for example turn off SSL support): cmake -DLWS_WITH_SSL=0 .. or cmake -DLWS_WITH_SSL:BOOL=OFF .. @subsection cmcoug Unix GUI If you have a curses-enabled build you simply type: (not all packages include this, my debian install does not for example). ccmake @subsection cmcowg Windows GUI On windows CMake comes with a gui application: Start -> Programs -> CMake -> CMake (cmake-gui) @section wolf wolfSSL/CyaSSL replacement for OpenSSL wolfSSL/CyaSSL is a lightweight SSL library targeted at embedded systems: https://www.wolfssl.com/wolfSSL/Products-wolfssl.html It contains a OpenSSL compatibility layer which makes it possible to pretty much link to it instead of OpenSSL, giving a much smaller footprint. **NOTE**: wolfssl needs to be compiled using the `--enable-libwebsockets` flag for this to work. @section wolf1 Compiling libwebsockets with wolfSSL ``` cmake .. -DLWS_WITH_WOLFSSL=1 \ -DLWS_WOLFSSL_INCLUDE_DIRS=/path/to/wolfssl \ -DLWS_WOLFSSL_LIBRARIES=/path/to/wolfssl/wolfssl.a .. ``` **NOTE**: On windows use the .lib file extension for `LWS_WOLFSSL_LIBRARIES` instead. @section cya Compiling libwebsockets with CyaSSL ``` cmake .. -DLWS_WITH_CYASSL=1 \ -DLWS_CYASSL_INCLUDE_DIRS=/path/to/cyassl \ -DLWS_CYASSL_LIBRARIES=/path/to/wolfssl/cyassl.a .. ``` **NOTE**: On windows use the .lib file extension for `LWS_CYASSL_LIBRARIES` instead. @section gzip Selecting GZIP or MINIZ By default lws supports gzip when compression is needed. But you can tell it to use MINIZ instead by using `-DLWS_WITH_MINIZ=1`. For native build cmake will try to find an existing libminiz.so or .a and build against that and the found includes automatically. For cross-build or building against local miniz, you need the following kind of cmake to tell it where to get miniz ``` cmake .. -DLWS_WITH_MINIZ=1 -DLWS_WITH_ZIP_FOPS=1 -DMINIZ_INCLUDE_DIRS="/projects/miniz;/projects/miniz/build" -DMINIZ_LIBRARIES=/projects/miniz/build/libminiz.so.2.1.0 ``` @section esp32 Building for ESP32 Building for ESP32 requires the ESP-IDF framework. It can be built under Linux, OSX or Windows (MSYS2). 1. Install ESP-IDF, follow the getting started guide here - http://esp-idf.readthedocs.io/en/latest/get-started/ 2. Set ESP-IDF to last known working version (assuming ESP-IDF is in `~/esp/esp-idf`) : ``` cd ~/esp/esp-idf git checkout 0c50b65a34cd6b3954f7435193411a88adb49cb0 git submodule update --recursive ``` 3. Add `libwebsockets` as a submodule in the `components` folder of your ESP-IDF project: ``` git submodule add https://github.com/warmcat/libwebsockets.git components/libwebsockets ``` 4. If on Windows (MSYS2) you will need to install CMake in the MSYS2 environment: ``` pacman -S mingw-w64-i686-cmake ``` If you're on Linux or OSX ensure CMake version is at least 3.7. @section extplugins Building plugins outside of lws itself The directory ./plugin-standalone/ shows how easy it is to create plugins outside of lws itself. First build lws itself with -DLWS_WITH_PLUGINS, then use the same flow to build the standalone plugin ``` cd ./plugin-standalone mkdir build cd build cmake .. make && sudo make install ``` if you changed the default plugin directory when you built lws, you must also give the same arguments to cmake here (eg, ` -DCMAKE_INSTALL_PREFIX:PATH=/usr/something/else...` ) Otherwise if you run lwsws or libwebsockets-test-server-v2.0, it will now find the additional plugin "libprotocol_example_standalone.so" ``` lwsts[21257]: Plugins: lwsts[21257]: libprotocol_dumb_increment.so lwsts[21257]: libprotocol_example_standalone.so lwsts[21257]: libprotocol_lws_mirror.so lwsts[21257]: libprotocol_lws_server_status.so lwsts[21257]: libprotocol_lws_status.so ``` If you have multiple vhosts, you must enable plugins at the vhost additionally, discovered plugins are not enabled automatically for security reasons. You do this using info->pvo or for lwsws, in the JSON config. @section http2rp Reproducing HTTP/2 tests Enable `-DLWS_WITH_HTTP2=1` in cmake to build with http/2 support enabled. You must have built and be running lws against a version of openssl that has ALPN. At the time of writing, recent distros have started upgrading to OpenSSL 1.1+ that supports this already. You'll know it's right by seeing ``` lwsts[4752]: Compiled with OpenSSL support lwsts[4752]: Using SSL mode lwsts[4752]: HTTP2 / ALPN enabled ``` at lws startup. Recent Firefox and Chrome also support HTTP/2 by ALPN, so these should just work with the test server running in -s / ssl mode. For testing with nghttp client: ``` $ nghttp -nvas https://localhost:7681/test.html ``` Testing with h2spec (https://github.com/summerwind/h2spec) ``` $ h2spec -h 127.0.0.1 -p 7681 -t -k -v -o 1 ``` ``` 145 tests, 145 passed, 0 skipped, 0 failed ``` @section coverage Automated Coverage Testing ./test-apps/attack.sh contains scripted tests that are the basis of the automated test coverage assessment available for gcc and clang. To reproduce $ cd build $ cmake .. -DLWS_WITH_GCOV=1 -DCMAKE_BUILD_TYPE=DEBUG $ ../scripts/build-gcov.sh $ ../test-apps/attack.sh $ ../scripts/gcov.sh ... Lines executed:51.24% of 8279 @section windowsprebuilt Using Windows binary builds on Appveyor The CI builds on Appveyor now produce usable binary outputs. Visit [lws on Appveyor](https://ci.appveyor.com/project/lws-team/libwebsockets) and select one of the builds, then click on ARTIFACTS at the top right. The zip file want to be unpacked into `C:\Program Files (x86)/libwebsockets`, after that, you should be able to run the test server, by running it from `bin/Release/libwebsockets-test-server.exe` and opening a browser on http://127.0.0.1:7681 @section cross Cross compiling To enable cross-compiling **libwebsockets** using CMake you need to create a "Toolchain file" that you supply to CMake when generating your build files. CMake will then use the cross compilers and build paths specified in this file to look for dependencies and such. **Libwebsockets** includes an example toolchain file [cross-arm-linux-gnueabihf.cmake](../contrib/cross-arm-linux-gnueabihf.cmake) you can use as a starting point. The commandline to configure for cross with this would look like ``` $ cmake .. -DCMAKE_INSTALL_PREFIX:PATH=/usr/lib/my-cross-root \ -DCMAKE_TOOLCHAIN_FILE=../contrib/cross-arm-linux-gnueabihf.cmake \ -DLWS_WITHOUT_EXTENSIONS=1 -DLWS_WITH_SSL=0 \ -DLWS_WITH_ZIP_FOPS=0 -DLWS_WITH_ZLIB=0 ``` The example shows how to build with no external cross lib dependencies, you need to provide the cross libraries otherwise. **NOTE**: start from an EMPTY build directory if you had a non-cross build in there before the settings will be cached and your changes ignored. Delete `build/CMakeCache.txt` at least before trying a new cmake config to ensure you are really building the options you think you are. Additional information on cross compilation with CMake: http://www.vtk.org/Wiki/CMake_Cross_Compiling @section cross_example Complex Cross compiling example Here are step by step instructions for cross-building the external projects needed for lws with lwsws + mbedtls as an example. In the example, my toolchain lives in `/projects/aist-tb/arm-tc` and is named `arm-linux-gnueabihf`. So you will need to adapt those to where your toolchain lives and its name where you see them here. Likewise I do all this in /tmp but it has no special meaning, you can adapt that to somewhere else. All "foreign" cross-built binaries are sent into `/tmp/cross` so they cannot be confused for 'native' x86_64 stuff on your host machine in /usr/[local/].... ## Prepare the cmake toolchain file 1) `cd /tmp` 2) `wget -O mytoolchainfile https://raw.githubusercontent.com/warmcat/libwebsockets/main/contrib/cross-arm-linux-gnueabihf.cmake` 3) Edit `/tmp/mytoolchainfile` adapting `CROSS_PATH`, `CMAKE_C_COMPILER` and `CMAKE_CXX_COMPILER` to reflect your toolchain install dir and path to your toolchain C and C++ compilers respectively. For my case: ``` set(CROSS_PATH /projects/aist-tb/arm-tc/) set(CMAKE_C_COMPILER "${CROSS_PATH}/bin/arm-linux-gnueabihf-gcc") set(CMAKE_CXX_COMPILER "${CROSS_PATH}/bin/arm-linux-gnueabihf-g++") ``` ## 1/4: Building libuv cross: 1) `export PATH=/projects/aist-tb/arm-tc/bin:$PATH` Notice there is a **/bin** on the end of the toolchain path 2) `cd /tmp ; mkdir cross` we will put the cross-built libs in /tmp/cross 3) `git clone https://github.com/libuv/libuv.git` get libuv 4) `cd libuv` 5) `./autogen.sh` ``` + libtoolize --copy libtoolize: putting auxiliary files in '.'. libtoolize: copying file './ltmain.sh' libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'm4'. libtoolize: copying file 'm4/libtool.m4' libtoolize: copying file 'm4/ltoptions.m4' libtoolize: copying file 'm4/ltsugar.m4' libtoolize: copying file 'm4/ltversion.m4' libtoolize: copying file 'm4/lt~obsolete.m4' + aclocal -I m4 + autoconf + automake --add-missing --copy configure.ac:38: installing './ar-lib' configure.ac:25: installing './compile' configure.ac:22: installing './config.guess' configure.ac:22: installing './config.sub' configure.ac:21: installing './install-sh' configure.ac:21: installing './missing' Makefile.am: installing './depcomp' ``` If it has problems, you will need to install `automake`, `libtool` etc. 6) `./configure --host=arm-linux-gnueabihf --prefix=/tmp/cross` 7) `make && make install` this will install to `/tmp/cross/...` 8) `file /tmp/cross/lib/libuv.so.1.0.0` Check it's really built for ARM ``` /tmp/cross/lib/libuv.so.1.0.0: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, BuildID[sha1]=cdde0bc945e51db6001a9485349c035baaec2b46, with debug_info, not stripped ``` ## 2/4: Building zlib cross 1) `cd /tmp` 2) `git clone https://github.com/madler/zlib.git` 3) `CC=arm-linux-gnueabihf-gcc ./configure --prefix=/tmp/cross` ``` Checking for shared library support... Building shared library libz.so.1.2.11 with arm-linux-gnueabihf-gcc. Checking for size_t... Yes. Checking for off64_t... Yes. Checking for fseeko... Yes. Checking for strerror... Yes. Checking for unistd.h... Yes. Checking for stdarg.h... Yes. Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf(). Checking for vsnprintf() in stdio.h... Yes. Checking for return value of vsnprintf()... Yes. Checking for attribute(visibility) support... Yes. ``` 4) `make && make install` ``` arm-linux-gnueabihf-gcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -I. -c -o example.o test/example.c ... rm -f /tmp/cross/include/zlib.h /tmp/cross/include/zconf.h cp zlib.h zconf.h /tmp/cross/include chmod 644 /tmp/cross/include/zlib.h /tmp/cross/include/zconf.h ``` 5) `file /tmp/cross/lib/libz.so.1.2.11` This is just to confirm we built an ARM lib as expected ``` /tmp/cross/lib/libz.so.1.2.11: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, BuildID[sha1]=6f8ffef84389b1417d2fd1da1bd0c90f748f300d, with debug_info, not stripped ``` ## 3/4: Building mbedtls cross 1) `cd /tmp` 2) `git clone https://github.com/ARMmbed/mbedtls.git` 3) `cd mbedtls ; mkdir build ; cd build` 3) `cmake .. -DCMAKE_TOOLCHAIN_FILE=/tmp/mytoolchainfile -DCMAKE_INSTALL_PREFIX:PATH=/tmp/cross -DCMAKE_BUILD_TYPE=RELEASE -DUSE_SHARED_MBEDTLS_LIBRARY=1` mbedtls also uses cmake, so you can simply reuse the toolchain file you used for libwebsockets. That is why you shouldn't put project-specific options in the toolchain file, it should just describe the toolchain. 4) `make && make install` 5) `file /tmp/cross/lib/libmbedcrypto.so.2.6.0` ``` /tmp/cross/lib/libmbedcrypto.so.2.6.0: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, BuildID[sha1]=bcca195e78bd4fd2fb37f36ab7d72d477d609d87, with debug_info, not stripped ``` ## 4/4: Building libwebsockets with everything 1) `cd /tmp` 2) `git clone ssh://git@github.com/warmcat/libwebsockets` 3) `cd libwebsockets ; mkdir build ; cd build` 4) (this is all one line on the commandline) ``` cmake .. -DCMAKE_TOOLCHAIN_FILE=/tmp/mytoolchainfile \ -DCMAKE_INSTALL_PREFIX:PATH=/tmp/cross \ -DLWS_WITH_LWSWS=1 \ -DLWS_WITH_MBEDTLS=1 \ -DLWS_MBEDTLS_LIBRARIES="/tmp/cross/lib/libmbedcrypto.so;/tmp/cross/lib/libmbedtls.so;/tmp/cross/lib/libmbedx509.so" \ -DLWS_MBEDTLS_INCLUDE_DIRS=/tmp/cross/include \ -DLWS_LIBUV_LIBRARIES=/tmp/cross/lib/libuv.so \ -DLWS_LIBUV_INCLUDE_DIRS=/tmp/cross/include \ -DLWS_ZLIB_LIBRARIES=/tmp/cross/lib/libz.so \ -DLWS_ZLIB_INCLUDE_DIRS=/tmp/cross/include ``` 3) `make && make install` 4) `file /tmp/cross/lib/libwebsockets.so.11` ``` /tmp/cross/lib/libwebsockets.so.11: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, BuildID[sha1]=81e59c6534f8e9629a9fc9065c6e955ce96ca690, with debug_info, not stripped ``` 5) `arm-linux-gnueabihf-objdump -p /tmp/cross/lib/libwebsockets.so.11 | grep NEEDED` Confirm that the lws library was linked against everything we expect (libm / libc are provided by your toolchain) ``` NEEDED libz.so.1 NEEDED libmbedcrypto.so.0 NEEDED libmbedtls.so.10 NEEDED libmbedx509.so.0 NEEDED libuv.so.1 NEEDED libm.so.6 NEEDED libc.so.6 ``` You will also find the lws test apps in `/tmp/cross/bin`... to run lws on the target you will need to copy the related things from /tmp/cross... all the .so from /tmp/cross/lib and anything from /tmp/cross/bin you want. @section mem Memory efficiency Embedded server-only configuration without extensions (ie, no compression on websocket connections), but with full v13 websocket features and http server, built on ARM Cortex-A9: Update at 8dac94d (2013-02-18) ``` $ ./configure --without-client --without-extensions --disable-debug --without-daemonize Context Creation, 1024 fd limit[2]: 16720 (includes 12 bytes per fd) Per-connection [3]: 72 bytes, +1328 during headers .text .rodata .data .bss 11512 2784 288 4 ``` This shows the impact of the major configuration with/without options at 13ba5bbc633ea962d46d using Ubuntu ARM on a PandaBoard ES. These are accounting for static allocations from the library elf, there are additional dynamic allocations via malloc. These are a bit old now but give the right idea for relative "expense" of features. Static allocations, ARM9 | | .text | .rodata | .data | .bss | |--------------------------------|---------|---------|-------|------| | All (no without) | 35024 | 9940 | 336 | 4104 | | without client | 25684 | 7144 | 336 | 4104 | | without client, exts | 21652 | 6288 | 288 | 4104 | | without client, exts, debug[1] | 19756 | 3768 | 288 | 4104 | | without server | 30304 | 8160 | 336 | 4104 | | without server, exts | 25382 | 7204 | 288 | 4104 | | without server, exts, debug[1] | 23712 | 4256 | 288 | 4104 | [1] `--disable-debug` only removes messages below `lwsl_notice`. Since that is the default logging level the impact is not noticeable, error, warn and notice logs are all still there. [2] `1024` fd per process is the default limit (set by ulimit) in at least Fedora and Ubuntu. You can make significant savings tailoring this to actual expected peak fds, ie, at a limit of `20`, context creation allocation reduces to `4432 + 240 = 4672`) [3] known header content is freed after connection establishment libwebsockets-4.3.5/READMEs/README.captive-portal-detection.md000066400000000000000000000071351476025525100237040ustar00rootroot00000000000000# Captive Portal Detection ## Background Wifi devices may face some interception of their connection to the internet, it's very common for, eg, coffee shop wifi to present some kind of login or other clickthrough before access to the Internet is granted. Devices may need to understand that they are in this situation, and there are several different techniques for trying to gague it. Sequence-wise the device has been granted a DHCP lease and has been configured with DNS, but the DNS may be wrongly resolving everything to an address on the LAN or a portal on the net. Whether there is a captive portal active should be a sticky state for a given connection if there is not going to be any attempt to login or pass the landing page, it only needs checking for after DHCP acquisition then. If there will be an attempt to satisfy the landing page, the test should be repeated after the attempt. ## Detection schemes The most popular detection scheme by numbers is Android's method, which is to make an HTTP client GET to `http://connectivitycheck.android.com/generate_204` and see if a 204 is coming back... if intercepted, typically there'll be a 3xx redirect to the portal, perhaps on https. Or, it may reply on http with a 200 and show the portal directly... either way it won't deliver a 204 like the real remote server does. Variations include expecting a 200 but with specific http body content, and doing a DNS lookup for a static IP that the device knows; if it's resolved to something else, it knows there's monkey business implying a captive portal. Other schemes involve https connections going out and detecting that the cert of the server it's actually talking to doesn't check out, although this is potentially ambiguous. Yet more methods are possible outside of tcp or http. ## lws captive portal detect support lws provides a generic api to start captive portal detection... ``` LWS_EXTERN LWS_VISIBLE int lws_system_cpd_start(struct lws_context *context); ``` and two states in `lws_system` states to trigger it from, either `LWS_SYSTATE_CPD_PRE_TIME` which happens after DHCP acquisition but before ntpclient and is suitable for non https-based scheme where the time doesn't need to be known, or the alternative `LWS_SYSTATE_CPD_POST_TIME` state which happens after ntpclient has completed and we know the time. The actual platform implementation is set using `lws_system_ops_t` function pointer `captive_portal_detect_request`, ie ``` int (*captive_portal_detect_request)(struct lws_context *context); /**< Check if we can go out on the internet cleanly, or if we are being * redirected or intercepted by a captive portal. * Start the check that proceeds asynchronously, and report the results * by calling lws_captive_portal_detect_result() api */ ``` User platform code can provide this to implement whatever scheme they want, when it has arrived at a result, it can call the lws api `lws_system_cpd_result()` to inform lws. If there isn't any captive portal, this will also try to advance the system state towards OPERATIONAL. ``` /** * lws_system_cpd_result() - report the result of the captive portal detection * * \param context: the lws_context * \param result: one of the LWS_CPD_ constants representing captive portal state * \param redirect_url: NULL, or the url we were redirected to if result is * LWS_CPD_HTTP_REDIRECT * * Sets the context's captive portal detection state to result. User captive * portal detection code would call this once it had a result from its test. */ LWS_EXTERN LWS_VISIBLE int lws_system_cpd_result(struct lws_context *context, int result, const char *redirect_url); ``` libwebsockets-4.3.5/READMEs/README.cbor-cose.md000066400000000000000000000231151476025525100206460ustar00rootroot00000000000000# RFC8152 COSE apis ||| |---|---|---| |cmake| `LWS_WITH_COSE`| |Header| ./include/libwebsockets/lws-cose.h| |api-test| ./minimal-examples/api-tests/api-test-cose/| |README| ./READMEs/README.cbor-cose.md COSE is the CBOR equivalent of the JOSE suite of crypto objects and operations. You can represent public and private EC, RSA and SYMMETRIC keys, and sets of keys of various types; import the logical keys to and from CBOR; and sign / verify and encrypt / decrypt payloads using structured CBOR. Key generation is also supported. |type|operations|algs| |---|---|---| |lws_cose_key_t|import, export, generation|EC / RSA / SYMMETRIC| |cose_sign1|sign, validate|ES256/384/512, RS256/384/512| |cose_sign|sign, validate|ES256/384/512, RS256/384/512| |cose_mac0|sign, validate|HS256/HS256_64/384/512| |cose_mac|validate only|HS256/HS256_64/384/512| The lws COSE support uses the lws gencrypto layer, which calls through to the tls crypto library, and so works on both OpenSSL and mbedTLS the same. An increasing number of higher-level IETF specifications use COSE underneath. ## cose_key and sets Lws provides an `lws_cose_key_t` object to contain a single key's metadata and key material for EC, RSA and SYMMETRIC key types. There is a commandline tool wrapping the key dumping and generation apis available at `./minimal-examples/crypto/lws-crypto-cose-key` ### cose_key and sets import from CBOR and destroying ``` lws_cose_key_t * lws_cose_key_import(lws_dll2_owner_t *pkey_set, lws_cose_key_import_callback cb, void *user, const uint8_t *in, size_t len); void lws_cose_key_destroy(lws_cose_key_t **ck); void lws_cose_key_set_destroy(lws_dll2_owner_t *o); ``` To convert a single key, `pkey_set` should be NULL and the created key will be returned, for a cose_key set, which is simply a CBOR array of cose_keys, it should be a prepared (ie, zero'd down if nothing in it) lws_dll2_owner_t that will contain the resulting list of `lws_cose_key_t` objects that were created. In both cases the return is NULL if there was a fatal error and anything created has been cleaned up, the return has no other meaning in the cose_key set case. `lws_cose_key_destroy()` destroys a single `lws_cose_key_t` and sets the contents of the pointer to NULL, for cose_key sets you instead pass a pointer to the owner object to `lws_cose_key_set_destroy()` to destroy all the keys in the set in one step. cose_key has some confusions about type, kty and alg may be either ints, representing well-known standardized key and alg types, or freeform strings. We convert the well-known ints to their string representations at import, so there can be no confusion later. ### cose_key generation ``` lws_cose_key_t * lws_cose_key_generate(struct lws_context *context, int cose_kty, int use_mask, int bits, const char *curve, const char *kid); ``` This creates an `lws_cose_key_t`, generates a key (SYMMETRIC) or keypair into it and returns a pointer to it. `cose_kty` is one of `LWSCOSE_WKKTV_OKP`, `LWSCOSE_WKKTV_EC2`, `LWSCOSE_WKKTV_RSA`, or `LWSCOSE_WKKTV_SYMMETRIC`. `bits` is valid for RSA keys and for EC keys, `curve` should be a well-known curve name, one of `P-256`, `P-384` and `P-521` currently. `use_mask` is a bitfield made up of (1 << LWSCOSE_WKKO_...) set to enable the usage on the key. ### cose_key export to CBOR The export api uses the same CBOR write context as `lws_lec_printf()` uses to emit the key into an output buffer. Like the CBOR output apis, it may return `LWS_LECPCTX_RET_AGAIN` to indicate it filled the buffer and should be called again to fill another buffer. `lws_lec_init()` should be used to prepare the write context and `lws_lec_setbuf()` to reset the output buffer on subsequent calls, exactly the same as the CBOR write apis. ``` enum lws_lec_pctx_ret lws_cose_key_export(lws_cose_key_t *ck, lws_lec_pctx_t *ctx, int flags); ``` `flags` may be 0 to only output the public key pieces, or `LWSJWKF_EXPORT_PRIVATE` to output everything. ## Signing and signature validation COSE specifies three kinds of signed object, `cose_sign1` which signs a payload with a single algorithm and key, `cose_sign` which may sign a payload with multiple algorithms and keys, and `countersign`. `cose_sign1` has the advantage it can be validated with a single pass through the signed object; `cose_sign` unfortunately specifies the parameters of the signatures after the payload and must be done with multiple passes through the payload, for inline payloads, by caching it in heap. `cose_sign` and `cose_sign1` objects are supported by lws, Countersigned objects are not yet supported. `cose_mac0` is supported using HMAC for signing and validation, `cose_mac` is only supported for validation. There is a commandline tool wrapping the signing and validation apis available at `./minimal-examples/crypto/lws-crypto-cose-sign` ### Signature validation Signature validation does not have to be done synchronously, to facilitate this first you create a validation context specifying the type (eg, `SIGTYPE_SINGLE`) and a keyset of public keys the signature might use to validate (notice even a single key is passed in an lws_dll2_owner_t keyset). Creation uses a public `lws_cose_validate_create_info_t` info struct ``` typedef struct lws_cose_validate_create_info { struct lws_context *cx; /**< REQUIRED: the lws context */ lws_dll2_owner_t *keyset; /**< REQUIRED: one or more cose_keys */ enum lws_cose_sig_types sigtype; /**< 0 if a CBOR tag is in the sig, else one of SIGTYPE_MULTI, * SIGTYPE_SINGLE, etc*/ lws_cose_validate_pay_cb_t pay_cb; /**< optional: called back with unvalidated payload pieces */ void *pay_opaque; /**< optional: passed into pay_cb callback along with payload chunk */ lws_cose_sign_ext_pay_cb_t ext_cb; /**< optional extra application data provision callback */ void *ext_opaque; /**< optional extra application data provision callback opaque */ size_t ext_len; /**< if we have extra app data, this must be set to the length of it */ } lws_cose_validate_create_info_t; ``` ``` struct lws_cose_validate_context * lws_cose_validate_create(const lws_cose_validate_create_info_t *info); void lws_cose_validate_destroy(struct lws_cose_validate_context **cps); ``` after that as pieces of the signature CBOR become available, they can be processed by the validation context ``` int lws_cose_validate_chunk(struct lws_cose_validate_context *cps, const uint8_t *in, size_t in_len, size_t *used_in); ``` The parsing of the signature yields a list of result objects indicating information about each signature it encountered and whether it was validated or not. The parsing itself only fails if there is an unrecoverable error, the completion of parsing does not indicate validation, it may yield zero or more result objects indicating the validation failed. ``` lws_dll2_owner_t * lws_cose_validate_results(struct lws_cose_validate_context *cps); typedef struct { lws_dll2_t list; const lws_cose_key_t *cose_key; cose_param_t cose_alg; int result; /* 0 = validated */ } lws_cose_validate_res_t; ``` It's like this because for multiple signatures, we may only have keys for some of them, and we may have different policies for validation that can only be assessed as a whole, eg, we may inisit that signatures pass with specific algorithms, or all signatures for specific keys must be present and pass. This way user code can assess the situation after the signature parsing and make its decision about overall validity according to its own policies. ## Signing Signing is again done by creating a signing context using an info struct to pass in the paramter (a `lws_cose_sign_create_info_t`). ``` #define LCSC_FL_ADD_CBOR_TAG (1 << 0) #define LCSC_FL_ADD_CBOR_PREFER_MAC0 (1 << 1) typedef struct lws_cose_sign_create_info { struct lws_context *cx; /**< REQUIRED: the lws context */ lws_dll2_owner_t *keyset; /**< REQUIRED: one or more cose_keys */ lws_lec_pctx_t *lec; /**< REQUIRED: the cbor output context to emit to, user must * initialize with lws_lec_init() beforehand */ lws_cose_sign_ext_pay_cb_t ext_cb; /**< optional extra application data provision callback */ void *ext_opaque; /**< optional extra application data provision callback opaque */ size_t ext_len; /**< if we have extra app data, this must be set to the length of it */ size_t inline_payload_len; /**< REQUIRED: size of the inline payload we will provide */ int flags; /**< bitmap of LCSC_FL_* */ enum lws_cose_sig_types sigtype; /**< 0, or sign type hint */ } lws_cose_sign_create_info_t; ``` ``` struct lws_cose_sign_context * lws_cose_sign_create(const lws_cose_sign_create_info_t *info); ``` After creating the signing context, you call `lws_cose_sign_add()` one or more times to add algorithms and keys to sign with (since cose_sign allows multiple recipients with the same payload signed in different ways). ``` int lws_cose_sign_add(struct lws_cose_sign_context *csc, cose_param_t alg, const lws_cose_key_t *ck); ``` The payload does not have to be provided all at once and can be passed in chunk by chunk over time via `lws_cose_sign_payload_chunk()`. Output is mediated via an lws CBOR output context provided in the info at creation-time, it's only emitted during the `lws_cose_sign_payload_chunk()` phase. If it returns `LWS_LECPCTX_RET_AGAIN`, you must call that api again after using the CBOR output context data and resetting its buffer by `lws_lec_setbuf()`, so it can continue to output. ``` enum lws_lec_pctx_ret lws_cose_sign_payload_chunk(struct lws_cose_sign_context *csc, const uint8_t *in, size_t in_len); ``` Finally the signing context is destroyed. ``` void lws_cose_sign_destroy(struct lws_cose_sign_context **csc); ``` libwebsockets-4.3.5/READMEs/README.cbor-lecp.md000066400000000000000000000312351476025525100206420ustar00rootroot00000000000000# RFC8949 CBOR Stream Parsing and Writing ||| |---|---|---| |cmake| `LWS_WITH_CBOR`, `LWS_WITH_CBOR_FLOAT`| |Header| ./include/libwebsockets/lws-lecp.h| |api-test| ./minimal-examples/api-tests/api-test-lecp/| |test app| ./test-apps/test-lecp.c -> libwebsockets-test-lecp| LECP is the RFC8949 CBOR stream parsing counterpart to LEJP for JSON. ## Features - Completely immune to input fragmentation, give it any size blocks of CBOR as they become available; 1 byte, or 100K at a time give identical parsing results - Input chunks discarded as they are parsed, whole CBOR never needed in memory - Nonrecursive, fixed stack usage of a few dozen bytes - No heap allocations at all, just requires ~500 byte context usually on caller stack - Creates callbacks to a user-provided handler as members are parsed out - No payload size limit, supports huge / endless strings or blobs bigger than system memory - Collates utf-8 text and blob payloads into a 250-byte chunk buffer for ease of access - Write apis don't use any heap allocations or recursion either - Write apis use an explicit context with its own lifecycle, and printf style vaargs including sized blobs, C strings, double, int, unsigned long etc - Completely immune to output fragmentation, supports huge strings and blobs into small buffers, api returns to indicates unfinished if it needs to be called again to continue; 1 byte or 100K output buffer give same results - Write apis completely fill available buffer and if unfinished, continues into same or different buffer when called again with same args; no requirement for subsequent calls to be done sequentially or even from same function ## Type limits CBOR allows negative integers of up to 64 bits, these do not fit into a `uint64_t`. LECP has a union for numbers that includes the types `uint64_t` and `int64_t`, but it does not separately handle negative integers. Only -2^63.. 2^64 -1 can be handled by the C types, the oversize negative numbers wrap and should be avoided. ## Floating point support Floats are handled using the IEEE memory format, it means they can be parsed from the CBOR without needing any floating point support in the build. If floating point is available, you can also enable `LWS_WITH_CBOR_FLOAT` and a `float` and `double` types are available in the number item union. Otherwise these are handled as `ctx->item.u.u32` and `ctx->item.u.u64` union members. Half-float (16-bit) is defined in CBOR and always handled as a `uint16_t` number union member `ctx->item.u.hf`. ## Callback reasons The user callback does not have to handle any callbacks, it only needs to process the data for the ones it is interested in. |Callback reason|CBOR structure|Associated data| |---|---|---| |`LECPCB_CONSTRUCTED`|Created the parse context|| |`LECPCB_DESTRUCTED`|Destroyed the parse context|| |`LECPCB_COMPLETE`|The parsing completed OK|| |`LECPCB_FAILED`|The parsing failed|| |`LECPCB_VAL_TRUE`|boolean true|| |`LECPCB_VAL_FALSE`|boolean false|| |`LECPCB_VAL_NULL`|explicit NULL|| |`LECPCB_VAL_NUM_INT`|signed integer|`ctx->item.u.i64`| |`LECPCB_VAL_STR_START`|A UTF-8 string is starting|| |`LECPCB_VAL_STR_CHUNK`|The next string chunk|`ctx->npos` bytes in `ctx->buf`| |`LECPCB_VAL_STR_END`|The last string chunk|`ctx->npos` bytes in `ctx->buf`| |`LECPCB_ARRAY_START`|An array is starting|| |`LECPCB_ARRAY_END`|An array has ended|| |`LECPCB_OBJECT_START`|A CBOR map is starting|| |`LECPCB_OBJECT_END`|A CBOR map has ended|| |`LECPCB_TAG_START`|The following data has a tag index|`ctx->item.u.u64`| |`LECPCB_TAG_END`|The end of the data referenced by the last tag|| |`LECPCB_VAL_NUM_UINT`|Unsigned integer|`ctx->item.u.u64`| |`LECPCB_VAL_UNDEFINED`|CBOR undefined|| |`LECPCB_VAL_FLOAT16`|half-float available as host-endian `uint16_t`|`ctx->item.u.hf`| |`LECPCB_VAL_FLOAT32`|`float` (`uint32_t` if no float support) available|`ctx->item.u.f`| |`LECPCB_VAL_FLOAT64`|`double` (`uint64_t` if no float support) available|`ctx->item.u.d`| |`LECPCB_VAL_SIMPLE`|CBOR simple|`ctx->item.u.u64`| |`LECPCB_VAL_BLOB_START`|A binary blob is starting|| |`LECPCB_VAL_BLOB_CHUNK`|The next blob chunk|`ctx->npos` bytes in `ctx->buf`| |`LECPCB_VAL_BLOB_END`|The last blob chunk|`ctx->npos` bytes in `ctx->buf`| |`LECPCB_ARRAY_ITEM_START`|A logical item in an array is starting| |`LCEPDB_ARRAY_ITEM_END`|A logical item in an array has completed| ## CBOR indeterminite lengths Indeterminite lengths are supported, but are concealed in the parser as far as possible, the CBOR lengths or its indeterminacy are not exposed in the callback interface at all, just chunks of data that may be the start, the middle, or the end. ## Handling CBOR UTF-8 strings and blobs When a string or blob is parsed, an advisory callback of `LECPCB_VAL_STR_START` or `LECPCB_VAL_BLOB_START` occurs first. The `_STR_` callbacks indicate the content is a CBOR UTF-8 string, `_BLOB_` indicates it is binary data. Strings or blobs may have indeterminite length, but if so, they are composed of logical chunks which must have known lengths. When the `_START` callback occurs, the logical length either of the whole string, or of the sub-chunk if indeterminite length, can be found in `ctx->item.u.u64`. Payload is collated into `ctx->buf[]`, the valid length is in `ctx->npos`. For short strings or blobs where the length is known, the whole payload is delivered in a single `LECPCB_VAL_STR_END` or `LECPCB_VAL_BLOB_END` callback. For payloads larger than the size of `ctx->buf[]`, `LECPCB_VAL_STR_CHUNK` or `LECPCB_VAL_BLOB_CHUNK` callbacks occur delivering each sequential bufferload. If the CBOR indicates the total length, the last chunk is delievered in a `LECPCB_VAL_STR_END` or `LECPCB_VAL_BLOB_END`. If the CBOR indicates the string end after the chunk, a zero-length `..._END` callback is provided. ## Handling CBOR tags CBOR tags are exposed as `LECPCB_TAG_START` and `LECPCB_TAG_END` pairs, at the `_START` callback the tag index is available in `ctx->item.u.u64`. ## CBOR maps You can check if you are on the "key" part of a map "key:value" pair using the helper api `lecp_parse_map_is_key(ctx)`. ## Parsing paths LECP maintains a "parsing path" in `ctx->path` that represents the context of the callback events. As a convenience, at LECP context creation time, you can pass in an array of path strings you want to match on, and have any match checkable in the callback using `ctx->path_match`, it's 0 if no active match, or the match index from your path array starting from 1 for the first entry. |CBOR element|Representation in path| |---|---| |CBOR Array|`[]`| |CBOR Map|`.`| |CBOR Map entry key string|`keystring`| ## Accessing raw CBOR subtrees Some CBOR usages like COSE require access to selected raw CBOR from the input stream. `lecp_parse_report_raw(ctx, on)` lets you turn on and off buffering of raw CBOR and reporting it in the parse callback with `LECPCB_LITERAL_CBOR` callbacks. The callbacks mean the temp buffer `ctx->cbor[]` has `ctx->cbor_pos` bytes of raw CBOR available in it. Callbacks are triggered when the buffer fills, or reporting is turned off and the buffer has something in it. By turning the reporting on and off according to the outer CBOR parsing state, it's possible to get exactly the raw CBOR subtree that's needed. Capturing and reporting the raw CBOR does not change that the same CBOR is being passed to the parser as usual as well. ## Comparison with LEJP (JSON parser) LECP is based on the same principles as LEJP and shares most of the callbacks. The major differences: - LEJP value callbacks all appear in `ctx->buf[]`, ie, floating-point is provided to the callback in ascii form like `"1.0"`. CBOR provides a more strict typing system, and the different type values are provided either in `ctx->buf[]` for blobs or utf-8 text strtings, or the `item.u` union for converted types, with additional callback reasons specific to each type. - CBOR "maps" use `_OBJECT_START` and `_END` parsing callbacks around the key / value pairs. LEJP has a special callback type `PAIR_NAME` for the key string / integer, but in LECP these are provided as generic callbacks dependent on type, ie, generic string callbacks or integer ones, and the value part is represented according to whatever comes. # Writing CBOR CBOR is written into a `lws_lec_pctx_t` object that has been initialized to point to an output buffer of a specified size, using printf type formatting. Output is paused if the buffer fills, and the write api may be called again later with the same context object, to resume emitting to the same or different buffer. This allows bufferloads of encoded CBOR to be produced on demand, it's designed to fit usage in WRITEABLE callbacks and Secure Streams tx() callbacks where the buffer size for one packet is already fixed. CBOR array and map lengths are deduced from the format string, as is whether to use indeterminite length formatting or not. For indeterminite text or binary strings, a container of < > |Format|Arg(s)|Meaning| |---|---|---| |`123`||unsigned literal number| |`-123`||signed literal number| |`%u`|`unsigned int`|number| |`%lu`|`unsigned long int`|number| |`%llu`|`unsigned long long int`|number| |`%d`|`signed int`|number| |`%ld`|`signed long int`|number| |`%lld`|`signed long long int`|number| |`%f`|`double`|floating point number| |`123(...)`||literal tag and scope| |`%t(...)`|`unsigned int`|tag and scope| |`%lt(...)`|`unsigned long int`|tag and scope| |`%llt(...)`|`unsigned long long int`|tag and scope| |`[...]`||Array (fixed len if `]` in same format string)| |`{...}`||Map (fixed len if `}` in same format string)| |``||Container for indeterminite text string frags| |``||Container for indeterminite binary string frags| |`'string'`||Literal text of known length| |`%s`|`const char *`|NUL-terminated string| |`%.*s`|`int`, `const char *`|length-specified string| |`%.*b`|`int`, `const uint8_t *`|length-specified binary| |`:`||separator between Map items (a:b)| |`,`||separator between Map pairs or array items| Backslash is used as an escape in `'...'` literal strings, so `'\\'` represents a string consisting of a single backslash, and `'\''` a string consisting of a single single-quote. For integers, various natural C types are available, but in all cases, the number is represented in CBOR using the smallest valid way based on its value, the long or long-long modifiers just apply to the expected C type in the args. For floats, the C argument is always expected to be a `double` type following C type promotion, but again it is represented in CBOR using the smallest valid way based on value, half-floats are used for NaN / Infinity and where possible for values like 0.0 and -1.0. ## Examples ### Literal ints ``` uint8_t buf[128]; lws_lec_pctx_t cbw; lws_lec_init(&cbw, buf, sizeof(buf)); lws_lec_printf(ctx, "-1"); ``` ||| |---|---| |Return| `LWS_LECPCTX_RET_FINISHED`| |`ctx->used`|1| |`buf[]`|20| ### Dynamic ints ``` uint8_t buf[128]; lws_lec_pctx_t cbw; int n = -1; /* could be long */ lws_lec_init(&cbw, buf, sizeof(buf)); lws_lec_printf(ctx, "%d", n); /* use %ld for long */ ``` ||| |---|---| |Return| `LWS_LECPCTX_RET_FINISHED`| |`ctx->used`|1| |`buf[]`|20| ### Maps, arrays and dynamic ints ``` ... int args[3] = { 1, 2, 3 }; lws_lec_printf(ctx, "{'a':%d,'b':[%d,%d]}", args[0], args[1], args[2]); ``` ||| |---|---| |Return| `LWS_LECPCTX_RET_FINISHED`| |`ctx->used`|9| |`buf[]`|A2 61 61 01 61 62 82 02 03| ### String longer than the buffer Using `%s` and the same string as an arg gives same results ``` uint8_t buf[16]; lws_lec_pctx_t cbw; lws_lec_init(&cbw, buf, sizeof(buf)); lws_lec_printf(ctx, "'A literal string > one buf'"); /* not required to be in same function context or same buf, * but the string must remain the same */ lws_lec_setbuf(&cbw, buf, sizeof(buf)); lws_lec_printf(ctx, "'A literal string > one buf'"); ``` First call ||| |---|---| |Return| `LWS_LECPCTX_RET_AGAIN`| |`ctx->used`|16| |`buf[]`|78 1A 41 20 6C 69 74 65 72 61 6C 20 73 74 72 69| Second call ||| |---|---| |Return| `LWS_LECPCTX_RET_FINISHED`| |`ctx->used`|12| |`buf[]`|6E 67 20 3E 20 6F 6E 65 20 62 75 66| ### Binary blob longer than the buffer ``` uint8_t buf[16], blob[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 }; lws_lec_pctx_t cbw; lws_lec_init(&cbw, buf, sizeof(buf)); lws_lec_printf(ctx, "%.*b", (int)sizeof(blob), blob); /* not required to be in same function context or same buf, * but the length and blob must remain the same */ lws_lec_setbuf(&cbw, buf, sizeof(buf)); lws_lec_printf(ctx, "%.*b", (int)sizeof(blob), blob); ``` First call ||| |---|---| |Return| `LWS_LECPCTX_RET_AGAIN`| |`ctx->used`|16| |`buf[]`|52 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F| Second call ||| |---|---| |Return| `LWS_LECPCTX_RET_FINISHED`| |`ctx->used`|3| |`buf[]`|10 11 12| libwebsockets-4.3.5/READMEs/README.ci.md000066400000000000000000000016171476025525100173700ustar00rootroot00000000000000## Need for CI Generally if we're adding something that's supposed to work ongoing, the stuff should be exercised in CI (at least Travis). If there are few users for a particular feature, experience has shown that refactors or other upheaval can easily break it into a state of uselessness without anyone noticing until later. Therefore here's a description of how to add something to the CI tests... this is certainly a nonproductive PITA and I have never been thanked for the work involved. But if the promise of the various features working is going to remain alive, it's necessary to include CI test where possible with new nontrivial code. ## Integration points ### cmake `.travis.yml` maps the various test activities to CMake options needed. ### including dependent packages into travis See `./scripts/travis_install.sh` ### performing prepared test actions See `./scripts/travis_control.sh` libwebsockets-4.3.5/READMEs/README.cmake.md000066400000000000000000000040251476025525100200510ustar00rootroot00000000000000# Tips about CMake ## Don't be afraid to nuke your build dir CMake likes to cache options and other things in the build dir... if you stop asserting the state of something like `-DMY_OPTION=1`, then the last way it was set it cached. On order to keep track of what you have set and not set, it's very advisable to explicitly keep all your options and set them all on one cmake line. Then, when you meet a situation you changed something but somehow cmake is sticking with what it knew before, you can fearlessly delete your build dir and create a new one with your explicit config. On Linux, it's usually enough to delete `CMakeCache.txt` to trigger it to config from the start again, but on, eg, windows, it isn't, for whatever reason it literally needs the build dir removing. ## CMake presence tests that fail Lws makes use of various CMake features to figure out what apis your libraries offer, eg, OpenSSL has many different apis based on version, lws knows how to work around most of the changes, but to do it it must find out what apis are available first on your build environment. CMake basically builds little throwaway test programs using each api in turn, and if it builds, it understands that the api was available and sets a preprocessor symbol that's available in the main build accordingly. Then we can do `#if xxx` to figure out if we can use `xxx` or need to do a workaround at build-time. This works very well, but unfortunately if the program didn't build, there are many possible ways for the build to break even if the api being tested is really available... for example, some library in your toolchain isn't being linked for the throwaway test program. When this happens, cmake indicates that apis that must be available are not available... CMake keeps a log of what happened with the failed test programs in `./build/CMakeFiles/CMakeError.log`. This is appeneded to, so the best way is blow away the build dir and reconfig a new one from scratch, and go look in there to find out what the compiler or linker was complaining about. libwebsockets-4.3.5/READMEs/README.coding.md000066400000000000000000001477541476025525100202550ustar00rootroot00000000000000Notes about coding with lws =========================== @section era Old lws and lws v2.0+ Originally lws only supported the "manual" method of handling everything in the user callback found in test-server.c / test-server-http.c. Since v2.0, the need for most or all of this manual boilerplate has been eliminated: the protocols[0] http stuff is provided by a generic lib export `lws_callback_http_dummy()`. You can serve parts of your filesystem at part of the URL space using mounts, the dummy http callback will do the right thing. It's much preferred to use the "automated" v2.0 type scheme, because it's less code and it's easier to support. The minimal examples all use the modern, recommended way. If you just need generic serving capability, without the need to integrate lws to some other app, consider not writing any server code at all, and instead use the generic server `lwsws`, and writing your special user code in a standalone "plugin". The server is configured for mounts etc using JSON, see ./READMEs/README.lwsws.md. Although the "plugins" are dynamically loaded if you use lwsws or lws built with libuv, actually they may perfectly well be statically included if that suits your situation better, eg, ESP32 test server, where the platform does not support processes or dynamic loading, just #includes the plugins one after the other and gets the same benefit from the same code. Isolating and collating the protocol code in one place also makes it very easy to maintain and understand. So it if highly recommended you put your protocol-specific code into the form of a "plugin" at the source level, even if you have no immediate plan to use it dynamically-loaded. @section writeable Only send data when socket writeable You should only send data on a websocket connection from the user callback `LWS_CALLBACK_SERVER_WRITEABLE` (or `LWS_CALLBACK_CLIENT_WRITEABLE` for clients). If you want to send something, do NOT just send it but request a callback when the socket is writeable using - `lws_callback_on_writable(wsi)` for a specific `wsi`, or - `lws_callback_on_writable_all_protocol(protocol)` for all connections using that protocol to get a callback when next writeable. Usually you will get called back immediately next time around the service loop, but if your peer is slow or temporarily inactive the callback will be delayed accordingly. Generating what to write and sending it should be done in the ...WRITEABLE callback. See the test server code for an example of how to do this. Otherwise evolved libs like libuv get this wrong, they will allow you to "send" anything you want but it only uses up your local memory (and costs you memcpys) until the socket can actually accept it. It is much better to regulate your send action by the downstream peer readiness to take new data in the first place, avoiding all the wasted buffering. Libwebsockets' concept is that the downstream peer is truly the boss, if he, or our connection to him, cannot handle anything new, we should not generate anything new for him. This is how unix shell piping works, you may have `cat a.txt | grep xyz > remote", but actually that does not cat anything from a.txt while remote cannot accept anything new. @section oneper Only one lws_write per WRITEABLE callback From v2.5, lws strictly enforces only one lws_write() per WRITEABLE callback. You will receive a message about "Illegal back-to-back write of ... detected" if there is a second lws_write() before returning to the event loop. This is because with http/2, the state of the network connection carrying a wsi is unrelated to any state of the wsi. The situation on http/1 where a new request implied a new tcp connection and new SSL buffer, so you could assume some window for writes is no longer true. Any lws_write() can fail and be buffered for completion by lws; it will be auto-completed by the event loop. Note that if you are handling your own http responses, writing the headers needs to be done with a separate lws_write() from writing any payload. That means after writing the headers you must call `lws_callback_on_writable(wsi)` and send any payload from the writable callback. @section otherwr Do not rely on only your own WRITEABLE requests appearing Libwebsockets may generate additional `LWS_CALLBACK_CLIENT_WRITEABLE` events if it met network conditions where it had to buffer your send data internally. So your code for `LWS_CALLBACK_CLIENT_WRITEABLE` needs to own the decision about what to send, it can't assume that just because the writeable callback came something is ready to send. It's quite possible you get an 'extra' writeable callback at any time and just need to `return 0` and wait for the expected callback later. @section dae Daemonization There's a helper api `lws_daemonize` built by default that does everything you need to daemonize well, including creating a lock file. If you're making what's basically a daemon, just call this early in your init to fork to a headless background process and exit the starting process. Notice stdout, stderr, stdin are all redirected to /dev/null to enforce your daemon is headless, so you'll need to sort out alternative logging, by, eg, syslog via `lws_set_log_level(..., lwsl_emit_syslog)`. @section conns Maximum number of connections The maximum number of connections the library can deal with is decided when it starts by querying the OS to find out how many file descriptors it is allowed to open (1024 on Fedora for example). It then allocates arrays that allow up to that many connections, minus whatever other file descriptors are in use by the user code. If you want to restrict that allocation, or increase it, you can use ulimit or similar to change the available number of file descriptors, and when restarted **libwebsockets** will adapt accordingly. @section peer_limits optional LWS_WITH_PEER_LIMITS If you select `LWS_WITH_PEER_LIMITS` at cmake, then lws will track peer IPs and monitor how many connections and ah resources they are trying to use at one time. You can choose to limit these at context creation time, using `info.ip_limit_ah` and `info.ip_limit_wsi`. Note that although the ah limit is 'soft', ie, the connection will just wait until the IP is under the ah limit again before attaching a new ah, the wsi limit is 'hard', lws will drop any additional connections from the IP until it's under the limit again. If you use these limits, you should consider multiple clients may simultaneously try to access the site through NAT, etc. So the limits should err on the side of being generous, while still making it impossible for one IP to exhaust all the server resources. @section evtloop Libwebsockets is singlethreaded Libwebsockets works in a serialized event loop, in a single thread. It supports the default poll() backend, and libuv, libev, and libevent event loop libraries that also take this locking-free, nonblocking event loop approach that is not threadsafe. There are several advantages to this technique, but one disadvantage, it doesn't integrate easily if there are multiple threads that want to use libwebsockets. However integration to multithreaded apps is possible if you follow some guidelines. 1) Aside from two APIs, directly calling lws apis from other threads is not allowed. 2) If you want to keep a list of live wsi, you need to use lifecycle callbacks on the protocol in the service thread to manage the list, with your own locking. Typically you use an ESTABLISHED callback to add ws wsi to your list and a CLOSED callback to remove them. 3) LWS regulates your write activity by being able to let you know when you may write more on a connection. That reflects the reality that you cannot succeed to send data to a peer that has no room for it, so you should not generate or buffer write data until you know the peer connection can take more. Other libraries pretend that the guy doing the writing is the boss who decides what happens, and absorb as much as you want to write to local buffering. That does not scale to a lot of connections, because it will exhaust your memory and waste time copying data around in memory needlessly. The truth is the receiver, along with the network between you, is the boss who decides what will happen. If he stops accepting data, no data will move. LWS is designed to reflect that. If you have something to send, you call `lws_callback_on_writable()` on the connection, and when it is writeable, you will get a `LWS_CALLBACK_SERVER_WRITEABLE` callback, where you should generate the data to send and send it with `lws_write()`. You cannot send data using `lws_write()` outside of the WRITEABLE callback. 4) For multithreaded apps, this corresponds to a need to be able to provoke the `lws_callback_on_writable()` action and to wake the service thread from its event loop wait (sleeping in `poll()` or `epoll()` or whatever). The rules above mean directly sending data on the connection from another thread is out of the question. The only lws api that's safe to call from other thread contexts is `lws_cancel_service()`. This will take a platform-specific action to wake the lws event loop thread wait, either put a byte into a pipe2() the event loop is waiting on, or send a packet on a UDP socket pair that the event loop waits on. When the wake is handled by the lws event loop thread, it will broadcast a `LWS_CALLBACK_EVENT_WAIT_CANCELLED` message to every vhost-protocol instantiation, so you can handle this callback, usually lock a shared data region, and if you see you need to write, call `lws_callback_on_writable()` for the wsi(s) that need to write. There's no restriction on multiple threads calling `lws_cancel_service()`, it's unconditionally safe due to how it is implemented underneath. 5) The obverse of this truism about the receiver being the boss is the case where we are receiving. If we get into a situation we actually can't usefully receive any more, perhaps because we are passing the data on and the guy we want to send to can't receive any more, then we should "turn off RX" by using the RX flow control API, `lws_rx_flow_control(wsi, 0)`. When something happens where we can accept more RX, (eg, we learn our onward connection is writeable) we can call it again to re-enable it on the incoming wsi. LWS stops calling back about RX immediately you use flow control to disable RX, it buffers the data internally if necessary. So you will only see RX when you can handle it. When flow control is disabled, LWS stops taking new data in... this makes the situation known to the sender by TCP "backpressure", the tx window fills and the sender finds he cannot write any more to the connection. See the mirror protocol implementations for example code. If you need to service other socket or file descriptors as well as the websocket ones, you can combine them together with the websocket ones in one poll loop, see "External Polling Loop support" below, and still do it all in one thread / process context. If the need is less architectural, you can also create RAW mode client and serving sockets; this is how the lws plugin for the ssh server works. @section anonprot Working without a protocol name Websockets allows connections to negotiate without a protocol name... in that case by default it will bind to the first protocol in your vhost protocols[] array. You can tell the vhost to use a different protocol by attaching a pvo (per-vhost option) to the ``` /* * this sets a per-vhost, per-protocol option name:value pair * the effect is to set this protocol to be the default one for the vhost, * ie, selected if no Protocol: header is sent with the ws upgrade. */ static const struct lws_protocol_vhost_options pvo_opt = { NULL, NULL, "default", "1" }; static const struct lws_protocol_vhost_options pvo = { NULL, &pvo_opt, "my-protocol", "" }; ... context_info.pvo = &pvo; ... ``` Will select "my-protocol" from your protocol list (even if it came in by plugin) as being the target of client connections that don't specify a protocol. @section closing Closing connections from the user side When you want to close a connection, you do it by returning `-1` from a callback for that connection. You can provoke a callback by calling `lws_callback_on_writable` on the wsi, then notice in the callback you want to close it and just return -1. But usually, the decision to close is made in a callback already and returning -1 is simple. If the socket knows the connection is dead, because the peer closed or there was an affirmitive network error like a FIN coming, then **libwebsockets** will take care of closing the connection automatically. If you have a silently dead connection, it's possible to enter a state where the send pipe on the connection is choked but no ack will ever come, so the dead connection will never become writeable. To cover that, you can use TCP keepalives (see later in this document) or pings. @section gzip Serving from inside a zip file Lws now supports serving gzipped files from inside a zip container. Thanks to Per Bothner for contributing the code. This has the advtantage that if the client can accept GZIP encoding, lws can simply send the gzip-compressed file from inside the zip file with no further processing, saving time and bandwidth. In the case the client can't understand gzip compression, lws automatically decompressed the file and sends it normally. Clients with limited storage and RAM will find this useful; the memory needed for the inflate case is constrained so that only one input buffer at a time is ever in memory. To use this feature, ensure LWS_WITH_ZIP_FOPS is enabled at CMake. `libwebsockets-test-server-v2.0` includes a mount using this technology already, run that test server and navigate to http://localhost:7681/ziptest/candide.html This will serve the book Candide in html, together with two jpgs, all from inside a .zip file in /usr/[local/]share-libwebsockets-test-server/candide.zip Usage is otherwise automatic, if you arrange a mount that points to the zipfile, eg, "/ziptest" -> "mypath/test.zip", then URLs like `/ziptest/index.html` will be servied from `index.html` inside `mypath/test.zip` @section frags Fragmented messages To support fragmented messages you need to check for the final frame of a message with `lws_is_final_fragment`. This check can be combined with `libwebsockets_remaining_packet_payload` to gather the whole contents of a message, eg: ``` case LWS_CALLBACK_RECEIVE: { Client * const client = (Client *)user; const size_t remaining = lws_remaining_packet_payload(wsi); if (!remaining && lws_is_final_fragment(wsi)) { if (client->HasFragments()) { client->AppendMessageFragment(in, len, 0); in = (void *)client->GetMessage(); len = client->GetMessageLength(); } client->ProcessMessage((char *)in, len, wsi); client->ResetMessage(); } else client->AppendMessageFragment(in, len, remaining); } break; ``` The test app libwebsockets-test-fraggle sources also show how to deal with fragmented messages. @section debuglog Debug Logging See ./READMEs/README.logging.md @section asan Building with ASAN Under GCC you can select for the build to be instrumented with the Address Sanitizer, using `cmake .. -DCMAKE_BUILD_TYPE=DEBUG -DLWS_WITH_ASAN=1`. LWS is routinely run during development with valgrind, but ASAN is capable of finding different issues at runtime, like operations which are not strictly defined in the C standard and depend on platform behaviours. Run your application like this ``` $ sudo ASAN_OPTIONS=verbosity=2:halt_on_error=1 /usr/local/bin/lwsws ``` and attach gdb to catch the place it halts. @section extpoll External Polling Loop support **libwebsockets** maintains an internal `poll()` array for all of its sockets, but you can instead integrate the sockets into an external polling array. That's needed if **libwebsockets** will cooperate with an existing poll array maintained by another server. Three callbacks `LWS_CALLBACK_ADD_POLL_FD`, `LWS_CALLBACK_DEL_POLL_FD` and `LWS_CALLBACK_CHANGE_MODE_POLL_FD` appear in the callback for protocol 0 and allow interface code to manage socket descriptors in other poll loops. You can pass all pollfds that need service to `lws_service_fd()`, even if the socket or file does not belong to **libwebsockets** it is safe. If **libwebsocket** handled it, it zeros the pollfd `revents` field before returning. So you can let **libwebsockets** try and if `pollfd->revents` is nonzero on return, you know it needs handling by your code. Also note that when integrating a foreign event loop like libev or libuv where it doesn't natively use poll() semantics, and you must return a fake pollfd reflecting the real event: - be sure you set .events to .revents value as well in the synthesized pollfd - check the built-in support for the event loop if possible (eg, ./lib/libuv.c) to see how it interfaces to lws - use LWS_POLLHUP / LWS_POLLIN / LWS_POLLOUT from libwebsockets.h to avoid losing windows compatibility You also need to take care about "forced service" somehow... these are cases where the network event was consumed, incoming data was all read, for example, but the work arising from it was not completed. There will not be any more network event to trigger the remaining work, Eg, we read compressed data, but we did not use up all the decompressed data before returning to the event loop because we had to write some of it. Lws provides an API to determine if anyone is waiting for forced service, `lws_service_adjust_timeout(context, 1, tsi)`, normally tsi is 0. If it returns 0, then at least one connection has pending work you can get done by calling `lws_service_tsi(context, -1, tsi)`, again normally tsi is 0. For eg, the default poll() event loop, or libuv/ev/event, lws does this checking for you and handles it automatically. But in the external polling loop case, you must do it explicitly. Handling it after every normal service triggered by the external poll fd should be enough, since the situations needing it are initially triggered by actual network events. An example of handling it is shown in the test-server code specific to external polling. @section cpp Using with in c++ apps The library is ready for use by C++ apps. You can get started quickly by copying the test server ``` $ cp test-apps/test-server.c test.cpp ``` and building it in C++ like this ``` $ g++ -DINSTALL_DATADIR=\"/usr/share\" -ocpptest test.cpp -lwebsockets ``` `INSTALL_DATADIR` is only needed because the test server uses it as shipped, if you remove the references to it in your app you don't need to define it on the g++ line either. @section headerinfo Availability of header information HTTP Header information is managed by a pool of "ah" structs. These are a limited resource so there is pressure to free the headers and return the ah to the pool for reuse. For that reason header information on HTTP connections that get upgraded to websockets is lost after the ESTABLISHED callback. Anything important that isn't processed by user code before then should be copied out for later. For HTTP connections that don't upgrade, header info remains available the whole time. @section http2compat Code Requirements for HTTP/2 compatibility Websocket connections only work over http/1, so there is nothing special to do when you want to enable -DLWS_WITH_HTTP2=1. The internal http apis already follow these requirements and are compatible with http/2 already. So if you use stuff like mounts and serve stuff out of the filesystem, there's also nothing special to do. However if you are getting your hands dirty with writing response headers, or writing bulk data over http/2, you need to observe these rules so that it will work over both http/1.x and http/2 the same. 1) LWS_PRE requirement applies on ALL lws_write(). For http/1, you don't have to take care of LWS_PRE for http data, since it is just sent straight out. For http/2, it will write up to LWS_PRE bytes behind the buffer start to create the http/2 frame header. This has implications if you treated the input buffer to lws_write() as const... it isn't any more with http/2, up to 9 bytes behind the buffer will be trashed. 2) Headers are encoded using a sophisticated scheme in http/2. The existing header access apis are already made compatible for incoming headers, for outgoing headers you must: - observe the LWS_PRE buffer requirement mentioned above - Use `lws_add_http_header_status()` to add the transaction status (200 etc) - use lws apis `lws_add_http_header_by_name()` and `lws_add_http_header_by_token()` to put the headers into the buffer (these will translate what is actually written to the buffer depending on if the connection is in http/2 mode or not) - use the `lws api lws_finalize_http_header()` api after adding the last response header - write the header using lws_write(..., `LWS_WRITE_HTTP_HEADERS`); 3) http/2 introduces per-stream transmit credit... how much more you can send on a stream is decided by the peer. You start off with some amount, as the stream sends stuff lws will reduce your credit accordingly, when it reaches zero, you must not send anything further until lws receives "more credit" for that stream the peer. Lws will suppress writable callbacks if you hit 0 until more credit for the stream appears, and lws built-in file serving (via mounts etc) already takes care of observing the tx credit restrictions. However if you write your own code that wants to send http data, you must consult the `lws_get_peer_write_allowance()` api to find out the state of your tx credit. For http/1, it will always return (size_t)-1, ie, no limit. This is orthogonal to the question of how much space your local side's kernel will make to buffer your send data on that connection. So although the result from `lws_get_peer_write_allowance()` is "how much you can send" logically, and may be megabytes if the peer allows it, you should restrict what you send at one time to whatever your machine will generally accept in one go, and further reduce that amount if `lws_get_peer_write_allowance()` returns something smaller. If it returns 0, you should not consume or send anything and return having asked for callback on writable, it will only come back when more tx credit has arrived for your stream. 4) Header names with captital letters are illegal in http/2. Header names in http/1 are case insensitive. So if you generate headers by name, change all your header name strings to lower-case to be compatible both ways. 5) Chunked Transfer-encoding is illegal in http/2, http/2 peers will actively reject it. Lws takes care of removing the header and converting CGIs that emit chunked into unchunked automatically for http/2 connections. If you follow these rules, your code will automatically work with both http/1.x and http/2. @section ka TCP Keepalive It is possible for a connection which is not being used to send to die silently somewhere between the peer and the side not sending. In this case by default TCP will just not report anything and you will never get any more incoming data or sign the link is dead until you try to send. To deal with getting a notification of that situation, you can choose to enable TCP keepalives on all **libwebsockets** sockets, when you create the context. To enable keepalive, set the ka_time member of the context creation parameter struct to a nonzero value (in seconds) at context creation time. You should also fill ka_probes and ka_interval in that case. With keepalive enabled, the TCP layer will send control packets that should stimulate a response from the peer without affecting link traffic. If the response is not coming, the socket will announce an error at `poll()` forcing a close. Note that BSDs don't support keepalive time / probes / interval per-socket like Linux does. On those systems you can enable keepalive by a nonzero value in `ka_time`, but the systemwide kernel settings for the time / probes/ interval are used, regardless of what nonzero value is in `ka_time`. @section sslopt Optimizing SSL connections There's a member `ssl_cipher_list` in the `lws_context_creation_info` struct which allows the user code to restrict the possible cipher selection at context-creation time. You might want to look into that to stop the ssl peers selecting a cipher which is too computationally expensive. To use it, point it to a string like `"RC4-MD5:RC4-SHA:AES128-SHA:AES256-SHA:HIGH:!DSS:!aNULL"` if left `NULL`, then the "DEFAULT" set of ciphers are all possible to select. You can also set it to `"ALL"` to allow everything (including insecure ciphers). @section sslcerts Passing your own cert information direct to SSL_CTX For most users it's enough to pass the SSL certificate and key information by giving filepaths to the info.ssl_cert_filepath and info.ssl_private_key_filepath members when creating the vhost. If you want to control that from your own code instead, you can do so by leaving the related info members NULL, and setting the info.options flag LWS_SERVER_OPTION_CREATE_VHOST_SSL_CTX at vhost creation time. That will create the vhost SSL_CTX without any certificate, and allow you to use the callback LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS to add your certificate to the SSL_CTX directly. The vhost SSL_CTX * is in the user parameter in that callback. @section clientasync Async nature of client connections When you call `lws_client_connect_info(..)` and get a `wsi` back, it does not mean your connection is active. It just means it started trying to connect. Your client connection is actually active only when you receive `LWS_CALLBACK_CLIENT_ESTABLISHED` for it. There's a 5 second timeout for the connection, and it may give up or die for other reasons, if any of that happens you'll get a `LWS_CALLBACK_CLIENT_CONNECTION_ERROR` callback on protocol 0 instead for the `wsi`. After attempting the connection and getting back a non-`NULL` `wsi` you should loop calling `lws_service()` until one of the above callbacks occurs. As usual, see [test-client.c](../test-apps/test-client.c) for example code. Notice that the client connection api tries to progress the connection somewhat before returning. That means it's possible to get callbacks like CONNECTION_ERROR on the new connection before your user code had a chance to get the wsi returned to identify it (in fact if the connection did fail early, NULL will be returned instead of the wsi anyway). To avoid that problem, you can fill in `pwsi` in the client connection info struct to point to a struct lws that get filled in early by the client connection api with the related wsi. You can then check for that in the callback to confirm the identity of the failing client connection. @section fileapi Lws platform-independent file access apis lws now exposes his internal platform file abstraction in a way that can be both used by user code to make it platform-agnostic, and be overridden or subclassed by user code. This allows things like handling the URI "directory space" as a virtual filesystem that may or may not be backed by a regular filesystem. One example use is serving files from inside large compressed archive storage without having to unpack anything except the file being requested. The test server shows how to use it, basically the platform-specific part of lws prepares a file operations structure that lives in the lws context. The user code can get a pointer to the file operations struct ``` LWS_VISIBLE LWS_EXTERN struct lws_plat_file_ops * `lws_get_fops`(struct lws_context *context); ``` and then can use helpers to also leverage these platform-independent file handling apis ``` lws_fop_fd_t `lws_plat_file_open`(struct lws_plat_file_ops *fops, const char *filename, lws_fop_flags_t *flags) int `lws_plat_file_close`(lws_fop_fd_t fop_fd) unsigned long `lws_plat_file_seek_cur`(lws_fop_fd_t fop_fd, lws_fileofs_t offset) int `lws_plat_file_read`(lws_fop_fd_t fop_fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len) int `lws_plat_file_write`(lws_fop_fd_t fop_fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len ) ``` Generic helpers are provided which provide access to generic fops information or call through to the above fops ``` lws_filepos_t lws_vfs_tell(lws_fop_fd_t fop_fd); lws_filepos_t lws_vfs_get_length(lws_fop_fd_t fop_fd); uint32_t lws_vfs_get_mod_time(lws_fop_fd_t fop_fd); lws_fileofs_t lws_vfs_file_seek_set(lws_fop_fd_t fop_fd, lws_fileofs_t offset); lws_fileofs_t lws_vfs_file_seek_end(lws_fop_fd_t fop_fd, lws_fileofs_t offset); ``` The user code can also override or subclass the file operations, to either wrap or replace them. An example is shown in test server. ### Changes from v2.1 and before fops There are several changes: 1) Pre-2.2 fops directly used platform file descriptors. Current fops returns and accepts a wrapper type lws_fop_fd_t which is a pointer to a malloc'd struct containing information specific to the filesystem implementation. 2) Pre-2.2 fops bound the fops to a wsi. This is completely removed, you just give a pointer to the fops struct that applies to this file when you open it. Afterwards, the operations in the fops just need the lws_fop_fd_t returned from the open. 3) Everything is wrapped in typedefs. See lws-plat-unix.c for examples of how to implement. 4) Position in the file, File Length, and a copy of Flags left after open are now generically held in the fop_fd. VFS implementation must set and manage this generic information now. See the implementations in lws-plat-unix.c for examples. 5) The file length is no longer set at a pointer provided by the open() fop. The api `lws_vfs_get_length()` is provided to get the file length after open. 6) If your file namespace is virtual, ie, is not reachable by platform fops directly, you must set LWS_FOP_FLAG_VIRTUAL on the flags during open. 7) There is an optional `mod_time` uint32_t member in the generic fop_fd. If you are able to set it during open, you should indicate it by setting `LWS_FOP_FLAG_MOD_TIME_VALID` on the flags. @section rawfd RAW file descriptor polling LWS allows you to include generic platform file descriptors in the lws service / poll / event loop. Open your fd normally and then ``` lws_sock_file_fd_type u; u.filefd = your_open_file_fd; if (!lws_adopt_descriptor_vhost(vhost, 0, u, "protocol-name-to-bind-to", optional_wsi_parent_or_NULL)) { // failed } // OK ``` A wsi is created for the file fd that acts like other wsi, you will get these callbacks on the named protocol ``` LWS_CALLBACK_RAW_ADOPT_FILE LWS_CALLBACK_RAW_RX_FILE LWS_CALLBACK_RAW_WRITEABLE_FILE LWS_CALLBACK_RAW_CLOSE_FILE ``` starting with LWS_CALLBACK_RAW_ADOPT_FILE. The minimal example `raw/minimal-raw-file` demonstrates how to use it. `protocol-lws-raw-test` plugin also provides a method for testing this with `libwebsockets-test-server-v2.0`: The plugin creates a FIFO on your system called "/tmp/lws-test-raw" You can feed it data through the FIFO like this ``` $ sudo sh -c "echo hello > /tmp/lws-test-raw" ``` This plugin simply prints the data. But it does it through the lws event loop / service poll. @section rawsrvsocket RAW server socket descriptor polling You can also enable your vhost to accept RAW socket connections, in addition to HTTP[s] and WS[s]. If the first bytes written on the connection are not a valid HTTP method, then the connection switches to RAW mode. This is disabled by default, you enable it by setting the `.options` flag LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG, and setting `.listen_accept_role` to `"raw-skt"` when creating the vhost. RAW mode socket connections receive the following callbacks ``` LWS_CALLBACK_RAW_ADOPT LWS_CALLBACK_RAW_RX LWS_CALLBACK_RAW_WRITEABLE LWS_CALLBACK_RAW_CLOSE ``` You can control which protocol on your vhost handles these RAW mode incoming connections by setting the vhost info struct's `.listen_accept_protocol` to the vhost protocol name to use. `protocol-lws-raw-test` plugin provides a method for testing this with `libwebsockets-test-server-v2.0`: Run libwebsockets-test-server-v2.0 and connect to it by telnet, eg ``` $ telnet 127.0.0.1 7681 ``` type something that isn't a valid HTTP method and enter, before the connection times out. The connection will switch to RAW mode using this protocol, and pass the unused rx as a raw RX callback. The test protocol echos back what was typed on telnet to telnet. @section rawclientsocket RAW client socket descriptor polling You can now also open RAW socket connections in client mode. Follow the usual method for creating a client connection, but set the `info.method` to "RAW". When the connection is made, the wsi will be converted to RAW mode and operate using the same callbacks as the server RAW sockets described above. The libwebsockets-test-client supports this using raw:// URLS. To test, open a netcat listener in one window ``` $ nc -l 9999 ``` and in another window, connect to it using the test client ``` $ libwebsockets-test-client raw://127.0.0.1:9999 ``` The connection should succeed, and text typed in the netcat window (including a CRLF) will be received in the client. @section rawudp RAW UDP socket integration Lws provides an api to create, optionally bind, and adopt a RAW UDP socket (RAW here means an uninterpreted normal UDP socket, not a "raw socket"). ``` LWS_VISIBLE LWS_EXTERN struct lws * lws_create_adopt_udp(struct lws_vhost *vhost, int port, int flags, const char *protocol_name, struct lws *parent_wsi); ``` `flags` should be `LWS_CAUDP_BIND` if the socket will receive packets. The callbacks `LWS_CALLBACK_RAW_ADOPT`, `LWS_CALLBACK_RAW_CLOSE`, `LWS_CALLBACK_RAW_RX` and `LWS_CALLBACK_RAW_WRITEABLE` apply to the wsi. But UDP is different than TCP in some fundamental ways. For receiving on a UDP connection, data becomes available at `LWS_CALLBACK_RAW_RX` as usual, but because there is no specific connection with UDP, it is necessary to also get the source address of the data separately, using `struct lws_udp * lws_get_udp(wsi)`. You should take a copy of the `struct lws_udp` itself (not the pointer) and save it for when you want to write back to that peer. Writing is also a bit different for UDP. By default, the system has no idea about the receiver state and so asking for a `callback_on_writable()` always believes that the socket is writeable... the callback will happen next time around the event loop. With UDP, there is no single "connection". You need to write with sendto() and direct the packets to a specific destination. To return packets to a peer who sent something earlier and you copied his `struct lws_udp`, you use the .sa and .salen members as the last two parameters of the sendto(). The kernel may not accept to buffer / write everything you wanted to send. So you are responsible to watch the result of sendto() and resend the unsent part next time (which may involve adding new protocol headers to the remainder depending on what you are doing). @section ecdh ECDH Support ECDH Certs are now supported. Enable the CMake option cmake .. -DLWS_SSL_SERVER_WITH_ECDH_CERT=1 **and** the info->options flag LWS_SERVER_OPTION_SSL_ECDH to build in support and select it at runtime. @section sslinfo SSL info callbacks OpenSSL allows you to receive callbacks for various events defined in a bitmask in openssl/ssl.h. The events include stuff like TLS Alerts. By default, lws doesn't register for these callbacks. However if you set the info.ssl_info_event_mask to nonzero (ie, set some of the bits in it like `SSL_CB_ALERT` at vhost creation time, then connections to that vhost will call back using LWS_CALLBACK_SSL_INFO for the wsi, and the `in` parameter will be pointing to a struct of related args: ``` struct lws_ssl_info { int where; int ret; }; ``` The default callback handler in lws has a handler for LWS_CALLBACK_SSL_INFO which prints the related information, You can test it using the switch -S -s on `libwebsockets-test-server-v2.0`. Returning nonzero from the callback will close the wsi. @section smp SMP / Multithreaded service SMP support is integrated into LWS without any internal threading. It's very simple to use, libwebsockets-test-server-pthread shows how to do it, use -j n argument there to control the number of service threads up to 32. Two new members are added to the info struct unsigned int count_threads; unsigned int fd_limit_per_thread; leave them at the default 0 to get the normal singlethreaded service loop. Set count_threads to n to tell lws you will have n simultaneous service threads operating on the context. There is still a single listen socket on one port, no matter how many service threads. When a connection is made, it is accepted by the service thread with the least connections active to perform load balancing. The user code is responsible for spawning n threads running the service loop associated to a specific tsi (Thread Service Index, 0 .. n - 1). See the libwebsockets-test-server-pthread for how to do. If you leave fd_limit_per_thread at 0, then the process limit of fds is shared between the service threads; if you process was allowed 1024 fds overall then each thread is limited to 1024 / n. You can set fd_limit_per_thread to a nonzero number to control this manually, eg the overall supported fd limit is less than the process allowance. You can control the context basic data allocation for multithreading from Cmake using -DLWS_MAX_SMP=, if not given it's set to 1. The serv_buf allocation for the threads (currently 4096) is made at runtime only for active threads. Because lws will limit the requested number of actual threads supported according to LWS_MAX_SMP, there is an api lws_get_count_threads(context) to discover how many threads were actually allowed when the context was created. See the test-server-pthreads.c sample for how to use. @section smplocking SMP Locking Helpers Lws provide a set of pthread mutex helpers that reduce to no code or variable footprint in the case that LWS_MAX_SMP == 1. Define your user mutex like this ``` lws_pthread_mutex(name); ``` If LWS_MAX_SMP > 1, this produces `pthread_mutex_t name;`. In the case LWS_MAX_SMP == 1, it produces nothing. Likewise these helpers for init, destroy, lock and unlock ``` void lws_pthread_mutex_init(pthread_mutex_t *lock) void lws_pthread_mutex_destroy(pthread_mutex_t *lock) void lws_pthread_mutex_lock(pthread_mutex_t *lock) void lws_pthread_mutex_unlock(pthread_mutex_t *lock) ``` resolve to nothing if LWS_MAX_SMP == 1, otherwise produce the equivalent pthread api. pthreads is required in lws only if LWS_MAX_SMP > 1. @section libevuv libev / libuv / libevent support You can select either or both -DLWS_WITH_LIBEV=1 -DLWS_WITH_LIBUV=1 -DLWS_WITH_LIBEVENT=1 at cmake configure-time. The user application may use one of the context init options flags LWS_SERVER_OPTION_LIBEV LWS_SERVER_OPTION_LIBUV LWS_SERVER_OPTION_LIBEVENT to indicate it will use one of the event libraries at runtime. libev and libevent headers conflict, they both define critical constants like EV_READ to different values. Attempts to discuss clearing that up with both libevent and libev did not get anywhere useful. Therefore CMakeLists.txt will error out if you enable both LWS_WITH_LIBEV and LWS_WITH_LIBEVENT. In addition depending on libev / compiler version, building anything with libev apis using gcc may blow strict alias warnings (which are elevated to errors in lws). I did some googling at found these threads related to it, the issue goes back at least to 2010 on and off https://github.com/redis/hiredis/issues/434 https://bugs.gentoo.org/show_bug.cgi?id=615532 http://lists.schmorp.de/pipermail/libev/2010q1/000916.html http://lists.schmorp.de/pipermail/libev/2010q1/000920.html http://lists.schmorp.de/pipermail/libev/2010q1/000923.html We worked around this problem by disabling -Werror on the parts of lws that use libev. FWIW as of Dec 2019 using Fedora 31 libev 4.27.1 and its gcc 9.2.1 doesn't seem to trigger the problem even without the workaround. For these reasons and the response I got trying to raise these issues with them, if you have a choice about event loop, I would gently encourage you to avoid libev. Where lws uses an event loop itself, eg in lwsws, we use libuv. @section extopts Extension option control from user code User code may set per-connection extension options now, using a new api `lws_set_extension_option()`. This should be called from the ESTABLISHED callback like this ``` lws_set_extension_option(wsi, "permessage-deflate", "rx_buf_size", "12"); /* 1 << 12 */ ``` If the extension is not active (missing or not negotiated for the connection, or extensions are disabled on the library) the call is just returns -1. Otherwise the connection's extension has its named option changed. The extension may decide to alter or disallow the change, in the example above permessage-deflate restricts the size of his rx output buffer also considering the protocol's rx_buf_size member. @section httpsclient Client connections as HTTP[S] rather than WS[S] You may open a generic http client connection using the same struct lws_client_connect_info used to create client ws[s] connections. To stay in http[s], set the optional info member "method" to point to the string "GET" instead of the default NULL. After the server headers are processed, when payload from the server is available the callback LWS_CALLBACK_RECEIVE_CLIENT_HTTP will be made. You can choose whether to process the data immediately, or queue a callback when an outgoing socket is writeable to provide flow control, and process the data in the writable callback. Either way you use the api `lws_http_client_read()` to access the data, eg ``` case LWS_CALLBACK_RECEIVE_CLIENT_HTTP: { char buffer[1024 + LWS_PRE]; char *px = buffer + LWS_PRE; int lenx = sizeof(buffer) - LWS_PRE; lwsl_notice("LWS_CALLBACK_RECEIVE_CLIENT_HTTP\n"); /* * Often you need to flow control this by something * else being writable. In that case call the api * to get a callback when writable here, and do the * pending client read in the writeable callback of * the output. */ if (lws_http_client_read(wsi, &px, &lenx) < 0) return -1; while (lenx--) putchar(*px++); } break; ``` Notice that if you will use SSL client connections on a vhost, you must prepare the client SSL context for the vhost after creating the vhost, since this is not normally done if the vhost was set up to listen / serve. Call the api lws_init_vhost_client_ssl() to also allow client SSL on the vhost. @section clipipe Pipelining Client Requests to same host If you are opening more client requests to the same host and port, you can give the flag LCCSCF_PIPELINE on `info.ssl_connection` to indicate you wish to pipeline them. Without the flag, the client connections will occur concurrently using a socket and tls wrapper if requested for each connection individually. That is fast, but resource-intensive. With the flag, lws will queue subsequent client connections on the first connection to the same host and port. When it has confirmed from the first connection that pipelining / keep-alive is supported by the server, it lets the queued client pipeline connections send their headers ahead of time to create a pipeline of requests on the server side. In this way only one tcp connection and tls wrapper is required to transfer all the transactions sequentially. It takes a little longer but it can make a significant difference to resources on both sides. If lws learns from the first response header that keepalive is not possible, then it marks itself with that information and detaches any queued clients to make their own individual connections as a fallback. Lws can also intelligently combine multiple ongoing client connections to the same host and port into a single http/2 connection with multiple streams if the server supports it. Unlike http/1 pipelining, with http/2 the client connections all occur simultaneously using h2 stream multiplexing inside the one tcp + tls connection. You can turn off the h2 client support either by not building lws with `-DLWS_WITH_HTTP2=1` or giving the `LCCSCF_NOT_H2` flag in the client connection info struct `ssl_connection` member. @section vhosts Using lws vhosts If you set LWS_SERVER_OPTION_EXPLICIT_VHOSTS options flag when you create your context, it won't create a default vhost using the info struct members for compatibility. Instead you can call lws_create_vhost() afterwards to attach one or more vhosts manually. ``` LWS_VISIBLE struct lws_vhost * lws_create_vhost(struct lws_context *context, struct lws_context_creation_info *info); ``` lws_create_vhost() uses the same info struct as lws_create_context(), it ignores members related to context and uses the ones meaningful for vhost (marked with VH in libwebsockets.h). ``` struct lws_context_creation_info { int port; /* VH */ const char *iface; /* VH */ const struct lws_protocols *protocols; /* VH */ const struct lws_extension *extensions; /* VH */ ... ``` When you attach the vhost, if the vhost's port already has a listen socket then both vhosts share it and use SNI (is SSL in use) or the Host: header from the client to select the right one. Or if no other vhost already listening the a new listen socket is created. There are some new members but mainly it's stuff you used to set at context creation time. @section sni How lws matches hostname or SNI to a vhost LWS first strips any trailing :port number. Then it tries to find an exact name match for a vhost listening on the correct port, ie, if SNI or the Host: header provided abc.com:1234, it will match on a vhost named abc.com that is listening on port 1234. If there is no exact match, lws will consider wildcard matches, for example if cats.abc.com:1234 is provided by the client by SNI or Host: header, it will accept a vhost "abc.com" listening on port 1234. If there was a better, exact, match, it will have been chosen in preference to this. Connections with SSL will still have the client go on to check the certificate allows wildcards and error out if not. @section mounts Using lws mounts on a vhost The last argument to lws_create_vhost() lets you associate a linked list of lws_http_mount structures with that vhost's URL 'namespace', in a similar way that unix lets you mount filesystems into areas of your / filesystem how you like and deal with the contents transparently. ``` struct lws_http_mount { struct lws_http_mount *mount_next; const char *mountpoint; /* mountpoint in http pathspace, eg, "/" */ const char *origin; /* path to be mounted, eg, "/var/www/warmcat.com" */ const char *def; /* default target, eg, "index.html" */ struct lws_protocol_vhost_options *cgienv; int cgi_timeout; int cache_max_age; unsigned int cache_reusable:1; unsigned int cache_revalidate:1; unsigned int cache_intermediaries:1; unsigned char origin_protocol; unsigned char mountpoint_len; }; ``` The last mount structure should have a NULL mount_next, otherwise it should point to the 'next' mount structure in your list. Both the mount structures and the strings must persist until the context is destroyed, since they are not copied but used in place. `.origin_protocol` should be one of ``` enum { LWSMPRO_HTTP, LWSMPRO_HTTPS, LWSMPRO_FILE, LWSMPRO_CGI, LWSMPRO_REDIR_HTTP, LWSMPRO_REDIR_HTTPS, LWSMPRO_CALLBACK, }; ``` - LWSMPRO_FILE is used for mapping url namespace to a filesystem directory and serve it automatically. - LWSMPRO_CGI associates the url namespace with the given CGI executable, which runs when the URL is accessed and the output provided to the client. - LWSMPRO_REDIR_HTTP and LWSMPRO_REDIR_HTTPS auto-redirect clients to the given origin URL. - LWSMPRO_CALLBACK causes the http connection to attach to the callback associated with the named protocol (which may be a plugin). @section mountcallback Operation of LWSMPRO_CALLBACK mounts The feature provided by CALLBACK type mounts is binding a part of the URL namespace to a named protocol callback handler. This allows protocol plugins to handle areas of the URL namespace. For example in test-server-v2.0.c, the URL area "/formtest" is associated with the plugin providing "protocol-post-demo" like this ``` static const struct lws_http_mount mount_post = { NULL, /* linked-list pointer to next*/ "/formtest", /* mountpoint in URL namespace on this vhost */ "protocol-post-demo", /* handler */ NULL, /* default filename if none given */ NULL, 0, 0, 0, 0, 0, LWSMPRO_CALLBACK, /* origin points to a callback */ 9, /* strlen("/formtest"), ie length of the mountpoint */ }; ``` Client access to /formtest[anything] will be passed to the callback registered with the named protocol, which in this case is provided by a protocol plugin. Access by all methods, eg, GET and POST are handled by the callback. protocol-post-demo deals with accepting and responding to the html form that is in the test server HTML. When a connection accesses a URL related to a CALLBACK type mount, the connection protocol is changed until the next access on the connection to a URL outside the same CALLBACK mount area. User space on the connection is arranged to be the size of the new protocol user space allocation as given in the protocol struct. This allocation is only deleted / replaced when the connection accesses a URL region with a different protocol (or the default protocols[0] if no CALLBACK area matches it). This "binding connection to a protocol" lifecycle in managed by `LWS_CALLBACK_HTTP_BIND_PROTOCOL` and `LWS_CALLBACK_HTTP_DROP_PROTOCOL`. Because of HTTP/1.1 connection pipelining, one connection may perform many transactions, each of which may map to different URLs and need binding to different protocols. So these messages are used to create the binding of the wsi to your protocol including any allocations, and to destroy the binding, at which point you should destroy any related allocations. @section BINDTODEV SO_BIND_TO_DEVICE The .bind_iface flag in the context / vhost creation struct lets you declare that you want all traffic for listen and transport on that vhost to be strictly bound to the network interface named in .iface. This Linux-only feature requires SO_BIND_TO_DEVICE, which in turn requires CAP_NET_RAW capability... root has this capability. However this feature needs to apply the binding also to accepted sockets during normal operation, which implies the server must run the whole time as root. You can avoid this by using the Linux capabilities feature to have the unprivileged user inherit just the CAP_NET_RAW capability. You can confirm this with the test server ``` $ sudo /usr/local/bin/libwebsockets-test-server -u agreen -i eno1 -k ``` The part that ensures the capability is inherited by the unprivileged user is ``` #if defined(LWS_HAVE_SYS_CAPABILITY_H) && defined(LWS_HAVE_LIBCAP) info.caps[0] = CAP_NET_RAW; info.count_caps = 1; #endif ``` @section dim Dimming webpage when connection lost The lws test plugins' html provides useful feedback on the webpage about if it is still connected to the server, by greying out the page if not. You can also add this to your own html easily - include lws-common.js from your HEAD section \ - dim the page during initialization, in a script section on your page lws_gray_out(true,{'zindex':'499'}); - in your ws onOpen(), remove the dimming lws_gray_out(false); - in your ws onClose(), reapply the dimming lws_gray_out(true,{'zindex':'499'}); @section errstyle Styling http error pages In the code, http errors should be handled by `lws_return_http_status()`. There are basically two ways... the vhost can be told to redirect to an "error page" URL in response to specifically a 404... this is controlled by the context / vhost info struct (`struct lws_context_creation_info`) member `.error_document_404`... if non-null the client is redirected to this string. If it wasn't redirected, then the response code html is synthesized containing the user-selected text message and attempts to pull in `/error.css` for styling. If this file exists, it can be used to style the error page. See https://libwebsockets.org/git/badrepo for an example of what can be done ( and https://libwebsockets.org/error.css for the corresponding css). libwebsockets-4.3.5/READMEs/README.content-security-policy.md000066400000000000000000000134761476025525100236170ustar00rootroot00000000000000## Using Content Security Policy (CSP) ### What is it? Modern browsers have recently implemented a new feature providing a sort of "selinux for your web page". If the server sends some new headers describing the security policy for the content, then the browser strictly enforces it. ### Why would we want to do that? Scripting on webpages is pretty universal, sometimes the scripts come from third parties, and sometimes attackers find a way to inject scripts into the DOM, eg, through scripts in content. CSP lets the origin server define what is legitimate for the page it served and everything else is denied. The CSP for warmcat.com and libwebsockets.org looks like this, I removed a handful of approved image sources like travis status etc for clarity... ``` "content-security-policy": "default-src 'none'; img-src 'self' data:; script-src 'self'; font-src 'self'; style-src 'self'; connect-src 'self'; frame-ancestors 'none'; base-uri 'none';", "x-content-type-options": "nosniff", "x-xss-protection": "1; mode=block", "x-frame-options": "deny", "referrer-policy": "no-referrer" ``` The result of this is the browser won't let the site content be iframed, and it will reject any inline styles or inline scripts. Fonts, css, ajax, ws and images are only allowed to come from 'self', ie, the server that served the page. You may inject your script, or deceptive styles: it won't run or be shown. Because inline scripts are banned, the usual methods for XSS are dead; the attacker can't even load js from another server. So these rules provide a very significant increase in client security. ### Implications of strict CSP Halfhearted CSP isn't worth much. The only useful approach is to start with `default-src 'none'` which disables everything, and then allow the minimum needed for the pages to operate. "Minimum needed for the pages to operate" doesn't mean defeat the protections necessary so everything in the HTML can stay the same... it means adapt the pages to want the minimum and then enable the minimum. The main point is segregation of styles and script away from the content, in files referenced in the document `` section, along these lines: ``` Minimal Websocket test app ``` #### Inline styles must die All styling must go in one or more `.css` file(s) best served by the same server... while you can approve other sources in the CSP if you have to, unless you control that server as well, you are allowing whoever gains access to that server access to your users. Inline styles are no longer allowed (eg, "style='font-size:120%'" in the HTML)... they must be replaced by reference to one or more CSS class, which in this case includes "font-size:120%". This has always been the best practice anyway, and your pages will be cleaner and more maintainable. #### Inline scripts must die Inline scripts need to be placed in a `.js` file and loaded in the page head section, again it should only be from the server that provided the page. Then, any kind of inline script, yours or injected or whatever, will be completely rejected by the browser. #### onXXX must be replaced by eventListener Inline `onclick()` etc are kinds of inline scripting and are banned. Modern browsers have offered a different system called ["EventListener" for a while](https://developer.mozilla.org/en-US/docs/Web/API/EventListener) which allows binding of events to DOM elements in JS. A bunch of different named events are possible to listen on, commonly the `.js` file will ask for one or both of ``` window.addEventListener("load", function() { ... }, false); document.addEventListener("DOMContentLoaded", function() { ... }, false); ``` These give the JS a way to trigger when either everything on the page has been "loaded" or the DOM has been populated from the initial HTML. These can set up other event listeners on the DOM objects and aftwards the events will drive what happens on the page from user interaction and / or timers etc. If you have `onclick` in your HTML today, you would replace it with an id for the HTML element, then eg in the DOMContentLoaded event listener, apply ``` document.getElementById("my-id").addEventListener("click", function() { ... }, false); ``` ie the .js file becomes the only place with the "business logic" of the elements mentioned in the HTML, applied at runtime. #### Do you really need external sources? Do your scripts and fonts really need to come from external sources? If your caching policy is liberal, they are not actually that expensive to serve once and then the user is using his local copy for the next days. Some external sources are marked as anti-privacy in modern browsers, meaning they track your users, in turn meaning if your site refers to them, you will lose your green padlock in the browser. If the content license allows it, hosting them on "self", ie, the same server that provided the HTML, will remove that problem. Bringing in scripts from external sources is actually quite scary from the security perspective. If someone hacks the `ajax.googleapis.com` site to serve a hostile, modified jquery, half the Internet will instantly become malicious. However if you serve it yourself, unless your server was specifically targeted you know it will continue to serve what you expect. Since these scripts are usually sent with cache control headers for local caching duration of 1 year, the cost of serving them yourself under the same conditions is small but your susceptibility to attack is reduced to only taking care of your own server. And there is a privacy benefit that google is not informed of your users' IPs and activities on your site. libwebsockets-4.3.5/READMEs/README.contributing.md000066400000000000000000000021701476025525100214770ustar00rootroot00000000000000## Contributing to lws ### How to contribute Sending a patch with a bug report is very welcome. For nontrivial problems, it's probably best to discuss on the mailing list, or on github if you prefer, how to best solve it. However your contribution is coming is fine: - paste a `git diff` - send a patch series by mail or mailing list - paste in a github issue - github PR are all OK. ### Coding Standards Code should look roughly like the existing code, which follows linux kernel coding style. If there are non-functional problems I will clean them out when I apply the patch. If there are functional problems (eg broken error paths etc) if they are small compared to the working part I will also clean them. If there are larger problems, or consequences to the patch will have to discuss how to solve them with a retry. ### Funding specific work If there is a feature you wish was supported in lws, consider paying for the work to be done. The maintainer is a consultant and if we can agree the task, you can quickly get a high quality result that does just what you need, maintained ongoing along with the rest of lws. libwebsockets-4.3.5/READMEs/README.crypto-apis.md000066400000000000000000000173141476025525100212500ustar00rootroot00000000000000# Lws Crypto Apis ## Overview ![lws crypto overview](/doc-assets/lws-crypto-overview.svg) Lws provides a "generic" crypto layer on top of both OpenSSL and compatible tls library, and mbedtls. Using this layer, your code can work without any changes on both types of tls library crypto backends... it's as simple as rebuilding lws with `-DLWS_WITH_MBEDTLS=0` or `=1` at cmake. The generic layer can be used directly (as in, eg, the sshd plugin), or via another layer on top, which processes JOSE JSON objects using JWS (JSON Web Signatures), JWK (JSON Web Keys), and JWE (JSON Web Encryption). The `JW` apis use the generic apis (`lws_genrsa_`, etc) to get the crypto tasks done, so anything they can do you can also get done using the generic apis. The main difference is that with the generic apis, you must instantiate the correct types and use type-specfic apis. With the `JW` apis, there is only one interface for all operations, with the details hidden in the api and controlled by the JSON objects. Because of this, the `JW` apis are often preferred because they give you "crypto agility" cheaply... to change your crypto to another supported algorithm once it's working, you literally just change your JSON defining the keys and JWE or JWS algorithm. (It's up to you to define your policy for which combinations are acceptable by querying the parsed JW structs). ## Crypto supported in generic layer ### Generic Hash - SHA1 - SHA256 - SHA384 - SHA512 ### Generic HMAC - SHA256 - SHA384 - SHA512 ### Generic AES - CBC - CFB128 - CFB8 - CTR - ECB - OFB - XTS - GCM - KW (Key Wrap) ### Generic RSA - PKCS 1.5 - OAEP / PSS ### Generic EC - ECDH - ECDSA - P256 / P384 / P521 (sic) curves ## Using the generic layer All the necessary includes are part of `libwebsockets.h`. Enable `-DLWS_WITH_GENCRYPTO=1` at cmake. |api|header|Functionality| |---|---|---| |genhash|[./include/libwebsockets/lws-genhash.h](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-genhash.h)|Provides SHA1 + SHA2 hashes and hmac| |genrsa|[./include/libwebsockets/lws-genrsa.h](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-genrsa.h)|Provides RSA encryption, decryption, signing, verification, key generation and creation| |genaes|[./include/libwebsockets/lws-genaes.h](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-genaes.h)|Provides AES in all common variants for encryption and decryption| |genec|[./include/libwebsockets/lws-genec.h](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-genec.h)|Provides Elliptic Curve for encryption, decryption, signing, verification, key generation and creation| |x509|[./include/libwebsockets/lws-x509.h](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-x509.h)|Apis for X.509 Certificate loading, parsing, and stack verification, plus JWK key extraction from PEM X.509 certificate / private key| Unit tests for these apis, which serve as usage examples, can be found in [./minimal-examples/api-tests/api-test-gencrypto](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/api-tests/api-test-gencrypto) ### Keys in the generic layer The necessary types and defines are brought in by `libwebsockets.h`. Keys are represented only by an array of `struct lws_jwk_elements`... the length of the array is defined by the cipher... it's one of |key elements count|definition| |---|---| |`LWS_COUNT_OCT_KEY_ELEMENTS`|1| |`LWS_COUNT_RSA_KEY_ELEMENTS`|8| |`LWS_COUNT_EC_KEY_ELEMENTS`|4| |`LWS_COUNT_AES_KEY_ELEMENTS`|1| `struct lws_jwk_elements` is a simple pointer / length combination used to store arbitrary octets that make up the key element's binary representation. ## Using the JOSE layer The JOSE (JWK / JWS / JWE) stuff is a crypto-agile JSON-based layer that uses the gencrypto support underneath. "Crypto Agility" means the JSON structs include information about the algorithms and ciphers used in that particular object, making it easy to upgrade system crypto strength or cycle keys over time while supporting a transitional period where the old and new keys or algorithms + ciphers are also valid. Uniquely lws generic support means the JOSE stuff also has "tls library agility", code written to the lws generic or JOSE apis is completely unchanged even if the underlying tls library changes between OpenSSL and mbedtls, meaning sharing code between server and client sides is painless. All the necessary includes are part of `libwebsockets.h`. Enable `-DLWS_WITH_JOSE=1` at CMake. |api|header|Functionality| |---|---|---| |JOSE|[./include/libwebsockets/lws-jose.h](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-jose.h)|Provides crypto agility for JWS / JWE| |JWE|[./include/libwebsockets/lws-jwe.h](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-jwe.h)|Provides Encryption and Decryption services for RFC7516 JWE JSON| |JWS|[./include/libwebsockets/lws-jws.h](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-jws.h)|Provides signature and verifcation services for RFC7515 JWS JSON| |JWK|[./include/libwebsockets/lws-jwk.h](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-jwk.h)|Provides signature and verifcation services for RFC7517 JWK JSON, both "keys" arrays and singletons| Minimal examples are provided in the form of commandline tools for JWK / JWS / JWE / x509 handling: - [JWK minimal example](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/crypto/minimal-crypto-jwk) - [JWS minimal example](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/crypto/minimal-crypto-jws) - [JWE minimal example](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/crypto/minimal-crypto-jwe) - [X509 minimal example](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/crypto/minimal-crypto-x509) Unit tests for these apis, which serve as usage examples, can be found in [./minimal-examples/api-tests/api-test-jose](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/api-tests/api-test-jose) ## Crypto supported in the JOSE layer The JOSE RFCs define specific short names for different algorithms ### JWS |JSOE name|Hash|Signature| ---|---|--- |RS256, RS384, RS512|SHA256/384/512|RSA |ES256, ES384, ES521|SHA256/384/512|EC ### JWE |Key Encryption|Payload authentication + crypt| |---|---| |`RSAES-PKCS1-v1.5` 2048b & 4096b|`AES_128_CBC_HMAC_SHA_256`| |`RSAES-PKCS1-v1.5` 2048b|`AES_192_CBC_HMAC_SHA_384`| |`RSAES-PKCS1-v1.5` 2048b|`AES_256_CBC_HMAC_SHA_512`| |`RSAES-OAEP`|`AES_256_GCM`| |`AES128KW`, `AES192KW`, `AES256KW`|`AES_128_CBC_HMAC_SHA_256`| |`AES128KW`, `AES192KW`, `AES256KW`|`AES_192_CBC_HMAC_SHA_384`| |`AES128KW`, `AES192KW`, `AES256KW`|`AES_256_CBC_HMAC_SHA_512`| |`ECDH-ES` (P-256/384/521 key)|`AES_128/192/256_GCM`| |`ECDH-ES+A128/192/256KW` (P-256/384/521 key)|`AES_128/192/256_GCM`| ### Keys in the JOSE layer Keys in the JOSE layer use a `struct lws_jwk`, this contains two arrays of `struct lws_jwk_elements` sized for the worst case (currently RSA). One array contains the key elements as described for the generic case, and the other contains various nonencrypted key metadata taken from JWK JSON. |metadata index|function| |---|---| |`JWK_META_KTY`|Key type, eg, "EC"| |`JWK_META_KID`|Arbitrary ID string| |`JWK_META_USE`|What the public key may be used to validate, "enc" or "sig"| |`JWK_META_KEY_OPS`|Which operations the key is authorized for, eg, "encrypt"| |`JWK_META_X5C`|Optional X.509 cert version of the key| |`JWK_META_ALG`|Optional overall crypto algorithm the key is intended for use with| `lws_jwk_destroy()` should be called when the jwk is going out of scope... this takes care to zero down any key element data in the jwk. libwebsockets-4.3.5/READMEs/README.ctest.md000066400000000000000000000372571476025525100201300ustar00rootroot00000000000000## Using CTest with lws ### Updating ancient cmake You need a recent cmake to have the CTest tests work properly, if you're on an older distro you need to update your cmake. Luckily Kitware provide a repo for common distros. These instructions work for bionic and xenial. First remove the old distro cmake and install the pieces needed to get the new repo keys ``` # apt purge --auto-remove cmake # apt install gnupg wget apt-transport-https ca-certificates # wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | sudo apt-key add - # apt edit-sources ``` Add the line `deb https://apt.kitware.com/ubuntu/ bionic main` at the end replacing `bionic` with `xenial` as needed, and save (:wq). Then ``` # apt update # apt install cmake ``` ## Tests live in CMakeLists.txt The rules for tests are described in ctest / cmake language inside the minimal examples and api tests that are enabled by current build options, so you need to build with `-DLWS_WITH_MINIMAL_EXAMPLES=1` to build the examples along with the library. The tests are typically running the examples or api tests and regarding the process exiting with exit code 0 as success, anything else as failure. ## Generating the tests The main tests just need `-DLWS_WITH_MINIMAL_EXAMPLES=1`. You can optionally set `-DLWS_CTEST_INTERNET_AVAILABLE=0` to indicate you can't run the tests that need internet connectivity. ## Preparing to run the tests The tests have to be able to run without root and without disturbing any other install of lws in the build machine. For that reason you have to do an unprivileged side-install into `../destdir`, using `make install DESTDIR=../destdir` from the build directory and perform the tests on the pieces in there. ## Running the tests We must take care to run the pieces (.so etc) we just built, without having root access, and not any of the same pieces from some other lws version that may have been installed on the build machine. That includes, eg, plugins that we just built, to ensure precedence of those in the search path we can set our DESTDIR unprivileged install path in `LD_LIBRARY_PATH`. Then we can run ctest on the unprivileged install. The whole step looks something like this: ``` build $ make -j12 && \ rm -rf ../destdir && \ make -j12 DESTDIR=../destdir install && \\ LD_LIBRARY_PATH=../destdir/usr/local/share/libwebsockets-test-server/plugins ctest -j2 --output-on-failure ``` On windows, it looks like `ctest . -C DEBUG` or RELEASE if that was the build type. Good results look something like this (which tests can run depend on your build options) ``` Test project /projects/libwebsockets/build Start 71: st_wcs_srv Start 43: st_hcp_srv 1/73 Test #71: st_wcs_srv .................................. Passed 5.01 sec Start 19: st_hcmp_srv 2/73 Test #43: st_hcp_srv .................................. Passed 5.01 sec Start 17: st_hcm_srv 3/73 Test #19: st_hcmp_srv ................................. Passed 5.01 sec Start 55: st_ssproxyctx 4/73 Test #17: st_hcm_srv .................................. Passed 5.01 sec Start 52: st_ssproxy 5/73 Test #55: st_ssproxyctx ............................... Passed 1.02 sec Start 67: st_sstfproxy 6/73 Test #52: st_ssproxy .................................. Passed 1.02 sec Start 60: st_ssprxsmd_sspc 7/73 Test #67: st_sstfproxy ................................ Passed 1.01 sec Start 63: st_mulssprxsmd_sspc 8/73 Test #60: st_ssprxsmd_sspc ............................ Passed 1.01 sec Start 69: sspc-minimaltf 9/73 Test #63: st_mulssprxsmd_sspc ......................... Passed 1.02 sec Start 73: ws-client-spam 10/73 Test #73: ws-client-spam .............................. Passed 12.21 sec Start 57: sspc-minimaltx 11/73 Test #57: sspc-minimaltx .............................. Passed 5.90 sec Start 65: mulsspcsmd_sspc 12/73 Test #65: mulsspcsmd_sspc ............................. Passed 3.58 sec Start 62: sspcsmd_sspc 13/73 Test #62: sspcsmd_sspc ................................ Passed 1.73 sec Start 22: http-client-multi-h1 14/73 Test #22: http-client-multi-h1 ........................ Passed 5.04 sec Start 25: http-client-multi-stag 15/73 Test #25: http-client-multi-stag ...................... Passed 4.53 sec Start 26: http-client-multi-stag-h1 16/73 Test #26: http-client-multi-stag-h1 ................... Passed 4.40 sec Start 21: http-client-multi 17/73 Test #21: http-client-multi ........................... Passed 4.37 sec Start 36: http-client-multi-post-h1 18/73 Test #36: http-client-multi-post-h1 ................... Passed 2.73 sec Start 54: sspc-minimal 19/73 Test #54: sspc-minimal ................................ Passed 0.93 sec Start 39: http-client-multi-post-stag 20/73 Test #39: http-client-multi-post-stag ................. Passed 2.29 sec Start 40: http-client-multi-post-stag-h1 21/73 Test #69: sspc-minimaltf .............................. Passed 49.83 sec Start 35: http-client-multi-post 22/73 Test #40: http-client-multi-post-stag-h1 .............. Passed 4.30 sec Start 33: http-client-multi-restrict-nopipe-fail 23/73 Test #35: http-client-multi-post ...................... Passed 3.23 sec Start 28: http-client-multi-stag-h1-pipe 24/73 Test #33: http-client-multi-restrict-nopipe-fail ...... Passed 2.86 sec Start 32: http-client-multi-restrict-stag-h1-pipe 25/73 Test #28: http-client-multi-stag-h1-pipe .............. Passed 2.86 sec Start 27: http-client-multi-stag-pipe 26/73 Test #32: http-client-multi-restrict-stag-h1-pipe ..... Passed 1.51 sec Start 31: http-client-multi-restrict-stag-pipe 27/73 Test #27: http-client-multi-stag-pipe ................. Passed 1.52 sec Start 34: http-client-multi-restrict-h1-nopipe-fail 28/73 Test #34: http-client-multi-restrict-h1-nopipe-fail ... Passed 2.78 sec Start 46: http-client-post-m 29/73 Test #31: http-client-multi-restrict-stag-pipe ........ Passed 2.80 sec Start 42: http-client-multi-post-stag-h1-pipe 30/73 Test #42: http-client-multi-post-stag-h1-pipe ......... Passed 1.51 sec Start 41: http-client-multi-post-stag-pipe 31/73 Test #46: http-client-post-m .......................... Passed 1.59 sec Start 48: http-client-post-m-h1 32/73 Test #48: http-client-post-m-h1 ....................... Passed 1.10 sec Start 23: http-client-multi-pipe 33/73 Test #41: http-client-multi-post-stag-pipe ............ Passed 1.51 sec Start 29: http-client-multi-restrict-pipe 34/73 Test #23: http-client-multi-pipe ...................... Passed 1.09 sec Start 24: http-client-multi-h1-pipe 35/73 Test #29: http-client-multi-restrict-pipe ............. Passed 0.74 sec Start 30: http-client-multi-restrict-h1-pipe 36/73 Test #24: http-client-multi-h1-pipe ................... Passed 1.14 sec Start 45: http-client-post 37/73 Test #30: http-client-multi-restrict-h1-pipe .......... Passed 1.14 sec Start 38: http-client-multi-post-h1-pipe 38/73 Test #45: http-client-post ............................ Passed 0.30 sec Start 37: http-client-multi-post-pipe 39/73 Test #38: http-client-multi-post-h1-pipe .............. Passed 0.49 sec Start 47: http-client-post-h1 40/73 Test #37: http-client-multi-post-pipe ................. Passed 0.31 sec Start 50: hs_evlib_foreign_event 41/73 Test #47: http-client-post-h1 ......................... Passed 0.29 sec Start 66: ss-tf 42/73 Test #50: hs_evlib_foreign_event ...................... Passed 22.02 sec Start 49: hs_evlib_foreign_uv 43/73 Test #49: hs_evlib_foreign_uv ......................... Passed 21.03 sec Start 51: ss-warmcat 44/73 Test #51: ss-warmcat .................................. Passed 2.69 sec Start 59: ss-smd 45/73 Test #59: ss-smd ...................................... Passed 1.78 sec Start 10: api-test-secure-streams 46/73 Test #10: api-test-secure-streams ..................... Passed 1.34 sec Start 11: http-client-warmcat 47/73 Test #11: http-client-warmcat ......................... Passed 0.27 sec Start 58: sspost-warmcat 48/73 Test #58: sspost-warmcat .............................. Passed 0.84 sec Start 12: http-client-warmcat-h1 49/73 Test #12: http-client-warmcat-h1 ...................... Passed 0.25 sec Start 2: api-test-jose 50/73 Test #2: api-test-jose ............................... Passed 0.27 sec Start 70: ws-client-rx-warmcat 51/73 Test #70: ws-client-rx-warmcat ........................ Passed 0.27 sec Start 56: ki_ssproxyctx 52/73 Test #56: ki_ssproxyctx ............................... Passed 0.12 sec Start 68: ki_ssproxy 53/73 Test #68: ki_ssproxy .................................. Passed 0.11 sec Start 64: ki_mulssprxsmd_sspc 54/73 Test #64: ki_mulssprxsmd_sspc ......................... Passed 0.10 sec Start 61: ki_ssprxsmd_sspc 55/73 Test #61: ki_ssprxsmd_sspc ............................ Passed 0.11 sec Start 13: http-client-h2-rxflow-warmcat 56/73 Test #13: http-client-h2-rxflow-warmcat ............... Passed 0.28 sec Start 14: http-client-h2-rxflow-warmcat-h1 57/73 Test #14: http-client-h2-rxflow-warmcat-h1 ............ Passed 0.34 sec Start 16: http-client-hugeurl-warmcat-h1 58/73 Test #16: http-client-hugeurl-warmcat-h1 .............. Passed 0.16 sec Start 15: http-client-hugeurl-warmcat 59/73 Test #15: http-client-hugeurl-warmcat ................. Passed 0.16 sec Start 72: ki_wcs_srv 60/73 Test #72: ki_wcs_srv .................................. Passed 0.12 sec Start 44: ki_hcp_srv 61/73 Test #44: ki_hcp_srv .................................. Passed 0.11 sec Start 20: ki_hcmp_srv 62/73 Test #20: ki_hcmp_srv ................................. Passed 0.11 sec Start 18: ki_hcm_srv 63/73 Test #18: ki_hcm_srv .................................. Passed 0.11 sec Start 7: api-test-lws_struct_sqlite 64/73 Test #7: api-test-lws_struct_sqlite .................. Passed 0.03 sec Start 1: api-test-gencrypto 65/73 Test #1: api-test-gencrypto .......................... Passed 0.02 sec Start 6: api-test-lws_struct-json 66/73 Test #6: api-test-lws_struct-json .................... Passed 0.01 sec Start 4: api-test-lws_dsh 67/73 Test #4: api-test-lws_dsh ............................ Passed 0.01 sec Start 8: api-test-lws_tokenize 68/73 Test #8: api-test-lws_tokenize ....................... Passed 0.01 sec Start 9: api-test-lwsac 69/73 Test #9: api-test-lwsac .............................. Passed 0.00 sec Start 3: api-test-lejp 70/73 Test #3: api-test-lejp ............................... Passed 0.00 sec Start 53: ki_ssproxy 71/73 Test #53: ki_ssproxy .................................. Passed 0.11 sec 72/73 Test #66: ss-tf ....................................... Passed 55.51 sec Start 5: api-test-lws_smd 73/73 Test #5: api-test-lws_smd ............................ Passed 4.22 sec 100% tests passed, 0 tests failed out of 73 Total Test time (real) = 137.76 sec ``` ## Considerations for creating tests ### Timeout The default test timeout is 1500s, for that reason it's good practice to set a more suitable `TIMEOUT` property on every test. ### Working Directory Server-side test apps usually need to be run from their `./minimal-examples/...` directory so they can access their assets like index.html etc. However when building with `-DLWS_WITH_MBEDTLS=1` then even client-side apps need to be run from their directory, since they need to get the trusted CA for warmcat.com or libwebsockets.org additionally. For that reason it's good practice to set the `WORKING_DIRECTORY` property to the home dir of the example app in all cases. ### Spawning Buddies Many networking tests need to either spawn a client or a server in order to have a "buddy" to talk to during the test for the opposing side. This is a bit awkward in cmake since it does not directly support spawning daemons as test dependencies. Lws provides helper scripts for unix type targets in `./scripts/ctest-background.sh` and `./scripts/ctest-background-kill.sh`, which spawn background processes, save the pid in a decorated /tmp file and can later take the process down. This also has arrangements to dump the log of any background process that exited early. To arrange the buddy to run aligned with the test, you first explain to cmake how to start and stop the buddy using phony tests to make a "fixture" in cmake terms. In this example, taken from minimal-http-client-multi, we arrange for minimal-http-server-tls to be available for our actual test. The starting and stopping definition, for "st_hcm_srv" and "ki_hcm_srv": ``` add_test(NAME st_hcm_srv COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background.sh hcm_srv $ --port ${PORT_HCM_SRV} ) add_test(NAME ki_hcm_srv COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background-kill.sh hcm_srv $ --port ${PORT_HCM_SRV}) ``` ... and binding those together so cmake knows they start and stop a specific named fixture "hcm_srv", itself with an 800s timeout ``` set_tests_properties(st_hcm_srv PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/http-server/minimal-http-server-tls FIXTURES_SETUP hcm_srv TIMEOUT 800) set_tests_properties(ki_hcm_srv PROPERTIES FIXTURES_CLEANUP hcm_srv) ``` ... and finally, adding the "hcm_srv" fixture as a requirement on the actual test (http-client-multi) we are testing ``` set_tests_properties(http-client-multi PROPERTIES FIXTURES_REQUIRED "hcm_srv" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/http-client/minimal-http-client-multi TIMEOUT 50) ``` Once all that explaining is done, ctest itself will take care about starting and killing hcm_srv before and after http-client-multi test. ### Buddy sockets and test concurrency For tests with local buddies using tcp sockets inside the same VM or systemd- nspawn networking context, you cannot just use a well-known port like 7681. ctest itself is usually executed concurrently, and Sai is typically building multiple different instances concurrently as well (typically 3), so it may be running different ctests inside the same VM simultaneously. Different tests can have their own convention for port ranges, to solve the problem about Sai running different tests concurrently inside one ctest. For the case there are multiple ctests running, we can use the env var `$ENV{SAI_INSTANCE_IDX}`, which is an ordinal like 0 or 1, to further ensure that port selections won't conflict. If not using Sai, you can just set this in the evironment yourself to reflect your build instance index. ``` # # instantiate the server per sai builder instance, they are running in the same # machine context in parallel so they can tread on each other otherwise # set(PORT_HCM_SRV "7670") if ("$ENV{SAI_INSTANCE_IDX}" STREQUAL "0") set(PORT_HCM_SRV 7671) endif() if ("$ENV{SAI_INSTANCE_IDX}" STREQUAL "1") set(PORT_HCM_SRV 7672) endif() if ("$ENV{SAI_INSTANCE_IDX}" STREQUAL "2") set(PORT_HCM_SRV 7673) endif() if ("$ENV{SAI_INSTANCE_IDX}" STREQUAL "3") set(PORT_HCM_SRV 7674) endif() ``` This is complicated enough that the best approach is copy an existing simple case like the CMakeLists.txt for minimal-http-client and change the names and ports to be unique. libwebsockets-4.3.5/READMEs/README.debugging.md000066400000000000000000000044061476025525100207270ustar00rootroot00000000000000# Tips on debugging with lws ## Problem with the library, or your code? Because lws is only really used when already combined with user code, it can be a headache figuring out if the actual problem is inside lws or in the user code. If it's in lws, I would really like to solve it, but if it's in your code, that's your problem. Finding out which side it's on when it involves your code is also something you need to try to resolve. The minimal examples are useful because if they demonstrate the same problem, it's something about your platform or lws itself, I have the minimal examples so I can test it and find out if it's your platform. If I can reproduce it, it's my problem. ## Debug builds With cmake, build with `-DCMAKE_BUILD_TYPE=DEBUG` to build in extra logging, and use a log level bitmap of eg, 1039 or 1151 to enable the extra logs for print. The minimal examples take a -d xxx commandline parameter so you can select the logging level when you run it. The extra logging can be very useful to understand the sequencing of problematic actions. ## Valgrind If your problems involve heap corruption or use-after-free, Valgrind is indespensible. It's simple to use, if you normally run `xxx`, just run `valgrind xxx`. Your code will run slower, usually something like 2 - 4x slower but it depends on the exact code. However you will get a backtrace as soon as there is some kind of misbehaviour of either lws or your code. lws is developed using valgrind routinely and strives to be completely valgrind-clean. So typically any problems reported are telling you about problems in user code (or my bugs). ## Traffic dumping The best place for dumping traffic, assuming you are linking against a tls library, is `lws_ssl_capable_read()` and `lws_ssl_capable_write()` in either `./lib/tls/openssl/openssl-ssl.c` or `./lib/tls/mbedtls/mbedtls-ssl.c` according to which tls library you are using. There are default-`#if 0` sections in each function like ``` #if 0 /* * If using mbedtls type tls library, this is the earliest point for all * paths to dump what was received as decrypted data from the tls tunnel */ lwsl_notice("%s: len %d\n", __func__, len); lwsl_hexdump_notice(buf, len); #endif ``` Enable these to get hexdumps for all unencrypted data in both directions. libwebsockets-4.3.5/READMEs/README.esp32.md000066400000000000000000000035751476025525100177360ustar00rootroot00000000000000ESP32 Support ============= See \ref esp32 for details on how to build lws as a component in an ESP-IDF project. Lws provides a "factory" application https://github.com/warmcat/lws-esp32-factory and a test application which implements the generic lws server test apps https://github.com/warmcat/lws-esp32-test-server-demos The behaviours of the generic factory are are quite rich, and cover uploading SSL certs through factory and user configuration, AP selection and passphrase entry, and managing a switch to allow the user to force entry to user setup mode at boot subsequently. The factory app comes with partitioning for a 1MB factory partition containing that app and data, and a single 2.9MB OTA partition containing the main app. The factory app is able to do OTA updates for both the factory and OTA partition slots; updating the factory slot first writes the new image to the OTA slot and copies it into place at the next boot, after which the user can reload the OTA slot. State|Image|AP SSID|Port|URL|Mode ---|---|---|---|---|--- Factory Reset or Uninitialized|Factory|AP: ESP_012345|80|http://192.168.4.1|factory.html - to set certificates and serial User configuration|Factory|AP: config-model-serial|443|https://192.168.4.1|index.html - user set up his AP information Operation|OTA|Station only|443|https://model-serial.local|OTA application ## Basic Auth The lws-esp32-test-server-demos app also demos basic auth. On a normal platform this is done by binding a mount to a text file somewhere in the filesystem, which contains user:password information one per line. On ESP32 there is not necessarily any generic VFS in use. So instead, the basic auth lookup is bound to a given nvs domain, where the username is the key and the password the value. main/main.c in the test demos app shows how to both make the mount use basic auth, and how to set a user:password combination using nvs. libwebsockets-4.3.5/READMEs/README.event-libs.md000066400000000000000000000063751476025525100210530ustar00rootroot00000000000000# lws event library support ## v4.0 and below Before v4.1, lws allowed selecting some event library support for inclusion in the libwebsockets library Option|Feature ---|--- `LWS_WITH_GLIB`|glib `LWS_WITH_LIBEVENT`|libevent `LWS_WITH_LIBUV`|libuv `LWS_WITH_LIBEV`|libev The user code can select by `info->options` flags at runtime which event loop it wants to use. The only restriction is that libev and libevent can't coexist, because their header namespace conflicts. ## v4.1 and above Lws continues to support the old way described above, but there's an additional new cmake option that decides how they are built if any are selected, `LWS_WITH_EVLIB_PLUGINS`. The old behaviour is set by `LWS_WITH_EVLIB_PLUGINS=0`, for UNIX platforms, this is set to 1 by default. This causes the enabled event lib support to each be built into its own dynamically linked plugin, and lws will bring in the requested support alone at runtime after seeing the `info->options` flags requested by the user code. This has two main benefits, first the conflict around building libevent and libev together is removed, they each build isolated in their own plugin; the libwebsockets core library build doesn't import any of their headers (see below for exception). And second, for distro packaging, the event lib support plugins can be separately packaged, and apps take dependencies on the specific event lib plugin package, which itself depends on the libwebsockets core library. This allows just the needed dependencies for the packageset without forcing everything to bring everything in. Separately, lws itself has some optional dependencies on libuv, if you build lwsws or on Windows you want plugins at all. CMake will detect these situations and select to link the lws library itself to libuv if so as well, independent of whatever is happening with the event lib support. ## evlib plugin install The produced plugins are named event lib|plugin name ---|--- glib|`libwebsockets-evlib_glib.so` event|`libwebsockets-evlib_event.so` uv|`libwebsockets-evlib_uv.so` ev|`libwebsockets-evlib_ev.so` The evlib plugins are installed alongside libwebsockets.so/.a into the configured library dir, it's often `/usr/local/lib/` by default on linux. Lws looks for them at runtime using the build-time-configured path. ## Component packaging The canonical package name is `libwebsockets`, the recommended way to split the packaging is put the expected libs and pkgconfig in `libwebsockets` or `libwebsockets-core`, the latter is followed by the provided cmake, and produce an additional package per build event library plugin, named, eg `libwebsockets-evlib_glib`, which has a dependency on `libwebsockets[-core]`. Applications that use the default event loop can directly require `libwebsockets[-core]`, and application packages that need specific event loop support can just require, eg, `libwebsockets-evlib_glib`, which will bring that in and the core lws pieces in one step. There is then no problem with multiple apps requiring different event libs, they will bring in all the necessary pieces which will not conflict either as packages or at runtime. ## `LWS_WITH_DISTRO_RECOMMENDED` The cmake helper config `LWS_WITH_DISTRO_RECOMMENDED` is adapted to build all the event libs with the event lib plugin support enabled. libwebsockets-4.3.5/READMEs/README.event-loops-intro.md000066400000000000000000000322301476025525100223740ustar00rootroot00000000000000# Considerations around Event Loops Much of the software we use is written around an **event loop**. Some examples - Chrome / Chromium, transmission, tmux, ntp SNTP... [libevent](https://libevent.org/) - node.js / cjdns / Julia / cmake ... [libuv](https://archive.is/64pOt) - Gstreamer, Gnome / GTK apps ... [glib](https://people.gnome.org/~desrt/glib-docs/glib-The-Main-Event-Loop.html) - SystemD ... sdevent - OpenWRT ... uloop Many applications roll their own event loop using poll() or epoll() or similar, using the same techniques. Another set of apps use message dispatchers that take the same approach, but are for cases that don't need to support sockets. Event libraries provide crossplatform abstractions for this functoinality, and provide the best backend for their event waits on the platform automagically. libwebsockets networking operations require an event loop, it provides a default one for the platform (based on poll() for Unix) if needed, but also can natively use any of the event loop libraries listed above, including "foreign" loops already created and managed by the application. ## What is an 'event loop'? Event loops have the following characteristics: - they have a **single thread**, therefore they do not require locking - they are **not threadsafe** - they require **nonblocking IO** - they **sleep** while there are no events (aka the "event wait") - if one or more event seen, they call back into user code to handle each in turn and then return to the wait (ie, "loop") ### They have a single thread By doing everything in turn on a single thread, there can be no possibility of conflicting access to resources from different threads... if the single thread is in callback A, it cannot be in two places at the same time and also in callback B accessing the same thing: it can never run any other code concurrently, only sequentially, by design. It means that all mutexes and other synchronization and locking can be eliminated, along with the many kinds of bugs related to them. ### They are not threadsafe Event loops mandate doing everything in a single thread. You cannot call their apis from other threads, since there is no protection against reentrancy. Lws apis cannot be called safely from any thread other than the event loop one, with the sole exception of `lws_cancel_service()`. ### They have nonblocking IO With blocking IO, you have to create threads in order to block them to learn when your IO could proceed. In an event loop, all descriptors are set to use nonblocking mode, we only attempt to read or write when we have been informed by an event that there is something to read, or it is possible to write. So sacrificial, blocking discrete IO threads are also eliminated, we just do what we should do sequentially, when we get the event indicating that we should do it. ### They sleep while there are no events An OS "wait" of some kind is used to sleep the event loop thread until something to do. There's an explicit wait on file descriptors that have pending read or write, and also an implicit wait for the next scheduled event. Even if idle for descriptor events, the event loop will wake and handle scheduled events at the right time. In an idle system, the event loop stays in the wait and takes 0% CPU. ### If one or more event, they handle them and then return to sleep As you can expect from "event loop", it is an infinite loop alternating between sleeping in the event wait and sequentially servicing pending events, by calling callbacks for each event on each object. The callbacks handle the event and then "return to the event loop". The state of things in the loop itself is guaranteed to stay consistent while in a user callback, until you return from the callback to the event loop, when socket closes may be processed and lead to object destruction. Event libraries like libevent are operating the same way, once you start the event loop, it sits in an inifinite loop in the library, calling back on events until you "stop" or "break" the loop by calling apis. ## Why are event libraries popular? Developers prefer an external library solution for the event loop because: - the quality is generally higher than self-rolled ones. Someone else is maintaining it, a fulltime team in some cases. - the event libraries are crossplatform, they will pick the most effective event wait for the platform without the developer having to know the details. For example most libs can conceal whether the platform is windows or unix, and use native waits like epoll() or WSA accordingly. - If your application uses a event library, it is possible to integrate very cleanly with other libraries like lws that can use the same event library. That is extremely messy or downright impossible to do with hand-rolled loops. Compared to just throwing threads on it - thread lifecycle has to be closely managed, threads must start and must be brought to an end in a controlled way. Event loops may end and destroy objects they control at any time a callback returns to the event loop. - threads may do things sequentially or genuinely concurrently, this requires locking and careful management so only deterministic and expected things happen at the user data. - threads do not scale well to, eg, serving tens of thousands of connections; web servers use event loops. ## Multiple codebases cooperating on one event loop The ideal situation is all your code operates via a single event loop thread. For lws-only code, including lws_protocols callbacks, this is the normal state of affairs. When there is other code that also needs to handle events, say already existing application code, or code handling a protocol not supported by lws, there are a few options to allow them to work together, which is "best" depends on the details of what you're trying to do and what the existing code looks like. In descending order of desirability: ### 1) Use a common event library for both lws and application code This is the best choice for Linux-class devices. If you write your application to use, eg, a libevent loop, then you only need to configure lws to also use your libevent loop for them to be able to interoperate perfectly. Lws will operate as a guest on this "foreign loop", and can cleanly create and destroy its context on the loop without disturbing the loop. In addition, your application can merge and interoperate with any other libevent-capable libraries the same way, and compared to hand-rolled loops, the quality will be higher. ### 2) Use lws native wsi semantics in the other code too Lws supports raw sockets and file fd abstractions inside the event loop. So if your other code fits into that model, one way is to express your connections as "RAW" wsis and handle them using lws_protocols callback semantics. This ties the application code to lws, but it has the advantage that the resulting code is aware of the underlying event loop implementation and will work no matter what it is. ### 3) Make a custom lws event lib shim for your custom loop Lws provides an ops struct abstraction in order to integrate with event libraries, you can find it in ./includes/libwebsockets/lws-eventlib-exports.h. Lws uses this interface to implement its own event library plugins, but you can also use it to make your own customized event loop shim, in the case there is too much written for your custom event loop to be practical to change it. In other words this is a way to write a customized event lib "plugin" and tell the lws_context to use it at creation time. See [minimal-http-server.c](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/http-server/minimal-http-server-eventlib-custom/minimal-http-server.c) ### 4) Cooperate at thread level This is less desirable because it gives up on unifying the code to run from a single thread, it means the codebases cannot call each other's apis directly. In this scheme the existing threads do their own thing, lock a shared area of memory and list what they want done from the lws thread context, before calling `lws_cancel_service()` to break the lws event wait. Lws will then broadcast a `LWS_CALLBACK_EVENT_WAIT_CANCELLED` protocol callback, the handler for which can lock the shared area and perform the requested operations from the lws thread context. ### 5) Glue the loops together to wait sequentially (don't do this) If you have two or more chunks of code with their own waits, it may be tempting to have them wait sequentially in an outer event loop. (This is only possible with the lws default loop and not the event library support, event libraries have this loop inside their own `...run(loop)` apis.) ``` while (1) { do_lws_wait(); /* interrupted at short intervals */ do_app_wait(); /* interrupted at short intervals */ } ``` This never works well, either: - the whole thing spins at 100% CPU when idle, or - the waits have timeouts where they sleep for short periods, but then the latency to service on set of events is increased by the idle timeout period of the wait for other set of events ## Common Misunderstandings ### "Real Men Use Threads" Sometimes you need threads or child processes. But typically, whatever you're trying to do does not literally require threads. Threads are an architectural choice that can go either way depending on the goal and the constraints. Any thread you add should have a clear reason to specifically be a thread and not done on the event loop, without a new thread or the consequent locking (and bugs). ### But blocking IO is faster and simpler No, blocking IO has a lot of costs to conceal the event wait by blocking. For any IO that may wait, you must spawn an IO thread for it, purely to handle the situation you get blocked in read() or write() for an arbitrary amount of time. It buys you a simple story in one place, that you will proceed on the thread if read() or write() has completed, but costs threads and locking to get to that. Event loops dispense with the threads and locking, and still provide a simple story, you will get called back when data arrives or you may send. Event loops can scale much better, a busy server with 50,000 connections active does not have to pay the overhead of 50,000 threads and their competing for locking. With blocked threads, the thread can do no useful work at all while it is stuck waiting. With event loops the thread can service other events until something happens on the fd. ### Threads are inexpensive In the cases you really need threads, you must have them, or fork off another process. But if you don't really need them, they bring with them a lot of expense, some you may only notice when your code runs on constrained targets - threads have an OS-side footprint both as objects and in the scheduler - thread context switches are not slow on modern CPUs, but have side effects like cache flushing - threads are designed to be blocked for arbitrary amounts of time if you use blocking IO apis like write() or read(). Then how much concurrency is really happening? Since blocked threads just go away silently, it is hard to know when in fact your thread is almost always blocked and not doing useful work. - threads require their own stack, which is on embedded is typically suffering from a dedicated worst-case allocation where the headroom is usually idle - locking must be handled, and missed locking or lock order bugs found ### But... what about latency if only one thing happens at a time? - Typically, at CPU speeds, nothing is happening at any given time on most systems, the event loop is spending most of its time in the event wait asleep at 0% cpu. - The POSIX sockets layer is disjoint from the actual network device driver. It means that once you hand off the packet to the networking stack, the POSIX api just returns and leaves the rest of the scheduling, retries etc to the networking stack and device, descriptor queuing is driven by interrupts in the driver part completely unaffected by the event loop part. - Passing data around via POSIX apis between the user code and the networking stack tends to return almost immediately since its onward path is managed later in another, usually interrupt, context. - So long as enough packets-worth of data are in the network stack ready to be handed to descriptors, actual throughput is completely insensitive to jitter or latency at the application event loop - The network device itself is inherently serializing packets, it can only send one thing at a time. The networking stack locking also introduces hidden serialization by blocking multiple threads. - Many user systems are decoupled like the network stack and POSIX... the user event loop and its latencies do not affect backend processes occurring in interrupt or internal thread or other process contexts ## Conclusion Event loops have been around for a very long time and are in wide use today due to their advantages. Working with them successfully requires understand how to use them and why they have the advantages and restrictions they do. The best results come from all the participants joining the same loop directly. Using a common event library in the participating codebases allows completely different code can call each other's apis safely without locking. libwebsockets-4.3.5/READMEs/README.fault-injection.md000066400000000000000000000467451476025525100221030ustar00rootroot00000000000000# `lws_fi` Fault Injection Most efforts during development go towards trying to make the system do what it is supposed to do during normal operation. But to provide reliable quality there's a need to not just test the code paths for normal operation, but also to be able to easily confirm that they act correctly under various fault conditions that may be difficult to arrange at test-time. It's otherwise very easy for error conditions that are low probability to be overlooked and turn out to do the wrong thing, eg, try to clean up things they had not actually initialized, or forget to free things etc. Code handling the operational failures we want to check may be anywhere, including during early initialization or in user code before lws intialization. To help with this lws has a `LWS_WITH_SYS_FAULT_INJECTION` build option that provides a simple but powerful api for targeted fault injection in any lws or user code, and provides a wide range of well-known internal faults inside lws you can trigger from outside. ## Fault contexts and faults The basic idea is objects in the user code can choose to initialize "fault contexts" inside objects, that list named, well-known "faults" that the code supoorts and that the user wants to inject. Although these "fault contexts" can be embedded in objects directly at object creation time, eg, for lws in the lws_context creation info struct, or the client connection info struct, or Secure Stream info struct, it's usually inconvenient to pass the desired faults directly deep into the code and attach them at creation time. Eg, if you want to cause a fault in a wsi instantiated by a Secure Stream, that is internal lws code one step removed from the Secure Stream object creation making it difficult to arrange. For that reason, faults have a targeted inheritance scheme using namespace paths, it's usually enough to just list the faults you want at context creation time and they will be filter down to the internal objects you want to target when they are created later. ![Fault Injection Overview](../doc-assets/fault-injection.png) A fault injection request is made in `lws_fi_t` objects, specifying the fault name and whether, and how often to inject the fault. The "fault context" objects `lws_fi_ctx_t` embedded in the creation info structs are linked-lists of `lws_fi_t` objects. When Fault Injection is enabled at build-time, the key system objects like the `lws_context`, `lws_vhost`, `wsi` and Secure Stream handles / SSPC handles contain their own `lws_fi_ctx_t` lists that may have any number of `lws_fi_t` added to them. When downstream objects are created, eg, when an lws_context creates a Secure Stream, in addition to using any faults provided directly in the SS info, the lws_context faults are consulted to see if any relate to that streamtype and should be applied. Although faults can be added to objects at creation, it is far more convenient to just pass a list of faults you want into the lws_context and have the objects later match them using namespacing, described later. ## Integrating fault injection conditionals into code in private lws code A simple query api `lws_fi(fi_ctx, "name")` is provided that returns 0 if no fault to be injected, or 1 if the fault should be synthesized. If there is no rule matching "name", the answer is always to not inject a fault, ie, returns 0. Similarly for convenience if FAULT_INJECTION is disabled at build, the `lws_fi()` call always returns the constant `0`. By default then just enabling Fault Injection at build does not have any impact on code operation since the user must also add the fault injection rules he wants to the objects's Fault Injection context. ## Integrating fault injection conditionals into user code with public apis These public apis query the fault context in a wsi, lws_context, ss handle, or sspc handle (client side of proxy) to find any matching rule, if so they return 1 if the conditions (eg, probability) are met and the fault should be injected. These allow user code to use the whole Fault Injection system without having to understand anything except the common object like a wsi they want to query and the name of the fault rule they are checking. |FI context owner|Public API| |---|---| |lws_context|`int lws_fi_user_context_fi(struct lws_context *ctx, const char *rule)`| |wsi|`int lws_fi_user_wsi_fi(struct lws *wsi, const char *rule)`| |ss handle|`int lws_fi_user_ss_fi(struct lws_ss_handle *h, const char *rule)`| |sspc handle|`int lws_fi_user_sspc_fi(struct lws_sspc_handle *h, const char *rule)`| For example, the minimal-http-client user code example contains this in its ESTABLISHED callback ``` if (lws_fi_user_wsi_fi(wsi, "user_reject_at_est")) return -1; ``` which can be triggered by running it with `lws-minimal-http-client --fault-injection 'wsi/user_reject_at_est'`, causing ``` ... [2021/03/11 13:41:05:2769] U: Connected to 46.105.127.147, http response: 200 [2021/03/11 13:41:05:2776] W: lws_fi: Injecting fault unk->user_reject_at_est [2021/03/11 13:41:05:2789] E: CLIENT_CONNECTION_ERROR: HS: disallowed at ESTABLISHED ... ``` When `LWS_WITH_SYS_FAULT_INJECTION` is disabled, these public apis become preprocessor defines to `(0)`, so the related code is removed by the compiler. ## Types of fault injection "when" strategy The api keeps track of each time the context was asked and uses this information to drive the decision about when to say yes, according to the type of rule |Injection rule type|Description| |---|---| |`LWSFI_ALWAYS`|Unconditionally inject the fault| |`LWSFI_DETERMINISTIC`|after `pre` times without the fault, the next `count` times exhibit the fault`| |`LWSFI_PROBABILISTIC`|exhibit a fault `pre` percentage of the time| |`LWSFI_PATTERN`|Reference `pre` bits pointed to by `pattern` and fault if the bit set, pointing to static array| |`LWSFI_PATTERN_ALLOC`|Reference `pre` bits pointed to by `pattern` and fault if the bit set, pointing to allocated array, freed when fault goes out of scope| Probabalistic choices are sourced from a PRNG with a seed set in the context creation info Fault Injection Context. By default the lws helper `lws_cmdline_option_handle_builtin()` sets this to the time in us, but it can be overridden using `--fault-seed `, and the effective PRNG seed is logged when the commandline options are initially parsed. ## Addings Fault Injection Rules to `lws_fi_ctx_t` Typically the lws_context is used as the central, toplevel place to define faults. This is done by adding prepared `lws_fi_t` objects on the stack one by one to the context creation info struct's `.fic` member, using `lws_fi_add(lws_fi_ctx_t *fic, const lws_fi_t *fi);`, this will allocate and copy the provided `fi` into the allocation, and attach it to the `lws_fi_ctx_t` list. When the context (or other object using the same scheme) is created, it imports all the faults from the info structure `.fic` and takes ownership of them, leaving the info `.fic` empty and ready to go out of scope. ## Passing in fault injection rules A key requirement is that Fault Injection rules must be availble to the code creating an object before the object has been created. This is why the user code prepares a Fault Injection context listing his rules in the creation info struct, rather than waiting for the object to be created and then attach Fault Injection rules... it's too late then to test faults during the creation. ## Directly applying fault contexts You can pass in a Fault Injection context prepared with lws_fi_t added to it when creating the following kinds of objects |Object being created|info struct|Fault injection Context member| |---|---|---| |lws context|struct lws_context_creation_info|`fic`| |vhost|struct lws_context_creation_info|`fic`| |Secure Stream|struct lws_ss_info|`fic`| |client wsi|struct lws_client_connect_info|`fic`| However typically the approach is just provide a list of faults at context creation time, and let the objects match and inherit using namespacing, described next. ## Using the namespace to target specific instances Lws objects created by the user can directly have a Fault Injection context attached to them at creation time, so the fault injection objects directly relate to the object. But in other common scenarios, there is no direct visibility of the object that we want to trigger faults in, it may not exist until some time later. Eg, we want to trigger faults in the listen socket of a vhost. To allow this, the fault names can be structured with a /path/ type namespace so objects created later can inherit faults. Notice that if you are directly creating the vhost, Secure Stream or wsi, you can directly attach the subrule yourself without the namespacing needed. The namespacing is used when you have access to a higher level object at creation- time, like the lws_context, and it will itself create the object you want to target without your having any direct access to it. |namespace form|effect| |---|---| |**vh=myvhost/**subrule|subrule is inherited by the vhost named "myvhost" when it is created| |**vh/**subrule|subrule is inherited by any vhost when it is created| |**ss=mystream/**subrule|subrule is inherited by SS of streamtype "mystream" (also covers SSPC / proxy client)| |**ss/**subrule|subrule is inherited by all SS of any streamtype (also covers SSPC / proxy client)| |**wsi=myname/**subrule|subrule is inherited by client wsi created with `info->fi_wsi_name` "myname"| |**wsi/**subrule|subrule is inherited by any wsi| Namespaces can be combined, for example `vh=myvhost/wsi/listenskt` will set the `listenskt` fault on wsi created by the server vhost "myvhost", ie, it will cause the listen socket for the vhost to error out on creation. In the case of wsi migration when it's the network connection wsi on an h2 connection that is migrated to be SID 1, the attached faults also migrate. Here is which Fault Injection Contexts each type of object inherits matching Fault Injection rules from: |Object type|Initialized with|Inherit matching faults from| |---|---|---| |context|`struct lws_context_creation_info` .fic|-| |vhost|`struct lws_context_creation_info` .fic|context FIC| |client wsi|`struct lws_client_connect_info` .fic|context FIC, vhost FIC| |ss / sspc|`lws_ss_info_t` .fic|context FIC| |ss / sspc wsi|-|context FIC, vhost FIC, ss / sspc .fic| Since everything can be reached from the lws_context fault context, directly or by additional inheritence, and that's the most convenient to set from the outside, that's typically the original source of all injected faults. ## Integration with minimal examples All the minimal examples that use the `lws_cmdline_option_handle_builtin()` api can take an additional `--fault-injection "...,..."` switch, which automatically parses the comma-separated list in the argument to add faults with the given name to the lws_context. For example, `lws-minimal-http-client --fault-injection "wsi/dnsfail"` will force all wsi dns lookups to fail for that run of the example. ### Specifying when to inject the fault By default, if you just give the name part, if the namespace is absent or matches an object, the fault will be injected every time. It's also possible to make the fault inject itself at a random probability, or in a cyclic pattern, by giving additional information in brackets, eg |Syntax|Used with|Meaning| |---|---|---| |`wsi/thefault`|lws_fi()|Inject the fault every time| |`wsi/thefault(10%)`|lws_fi()|Randomly inject the fault at 10% probability| |`wsi/thefault(.............X.X)`|lws_fi()|Inject the fault on the 14th and 16th try, every 16 tries| |`wsi/thefault2(123..456)`|lws_fi_range()|Pick a number between 123 and 456| You must quote the strings containing these symbols, since they may otherwise be interpreted by your shell. The last example above does not decide whether to inject the fault via `lws_fi()` like the others. Instead you can use it via `lws_fi_range()` as part of the fault processing, on a secondary fault injection name. For example you may have a fault `myfault` you use with `lws_fi()` to decide when to inject the fault, and then a second, related fault name `myfault_delay` to allow you to add code to delay the fault action by some random amount of ms within an externally- given range. You can get a pseudo-random number within the externally-given range by calling `lws_fi_range()` on `myfault_delay`, and control the whole thing by giving, eg, `"myfault(10%),myfault_delay(123..456)"` ## Well-known fault names in lws |Scope|Namespc|Name|Fault effect| |---|---|---|---| |context||`ctx_createfail1`|Fail context creation immediately at entry| |context||`ctx_createfail_plugin_init`|Fail context creation as if a plugin init failed (if plugins enabled)| |context||`ctx_createfail_evlib_plugin`|Fail context creation due to event lib plugin failed init (if evlib plugins enabled)| |context||`ctx_createfail_evlib_sel`|Fail context creation due to unable to select event lib| |context||`ctx_createfail_oom_ctx`|Fail context creation due to OOM on context object| |context||`ctx_createfail_privdrop`|Fail context creation due to failure dropping privileges| |context||`ctx_createfail_maxfds`|Fail context creation due to unable to determine process fd limit| |context||`ctx_createfail_oom_fds`|Fail context creation due to OOM on fds table| |context||`ctx_createfail_plat_init`|Fail context creation due to platform init failed| |context||`ctx_createfail_evlib_init`|Fail context creation due to event lib init failed| |context||`ctx_createfail_evlib_pt`|Fail context creation due to event lib pt init failed| |context||`ctx_createfail_sys_vh`|Fail context creation due to system vhost creation failed| |context||`ctx_createfail_sys_vh_init`|Fail context creaton due to system vhost init failed| |context||`ctx_createfail_def_vh`|Fail context creation due to default vhost creation failed| |context||`ctx_createfail_ss_pol1`|Fail context creation due to ss policy parse start failed (if policy enabled)| |context||`ctx_createfail_ss_pol2`|Fail context creation due to ss policy parse failed (if policy enabled)| |context||`ctx_createfail_ss_pol3`|Fail context creation due to ss policy set failed (if policy enabled)| |context||`cache_createfail`|Fail `lws_cache` creation due to OOM| |context||`cache_lookup_oom`|Fail `lws_cache` lookup due to OOM| |vhost|`vh`|`vh_create_oom`|Fail vh creation on vh object alloc OOM| |vhost|`vh`|`vh_create_oom`|Fail vh creation on vh object alloc OOM| |vhost|`vh`|`vh_create_pcols_oom`|Fail vh creation at protocols alloc OOM| |vhost|`vh`|`vh_create_access_log_open_fail`|Fail vh creation due to unable to open access log (LWS_WITH_ACCESS_LOG)| |vhost|`vh`|`vh_create_ssl_srv`|Fail server ssl_ctx init| |vhost|`vh`|`vh_create_ssl_cli`|Fail client ssl_ctx init| |vhost|`vh`|`vh_create_srv_init`|Fail server init| |vhost|`vh`|`vh_create_protocol_init`|Fail late protocol init (for late vhost creation)| |srv vhost|`vh=xxx/wsi`|`listenskt`|Causes `socket()` allocation for vhost listen socket to fail| |cli wsi|`wsi`|`dnsfail`|Sync: `getaddrinfo()` is not called and a EAI_FAIL return synthesized, Async: request not started and immediate fail synthesized| |cli wsi|`wsi`|`sendfail`|Attempts to send data on the wsi socket fail| |cli wsi|`wsi`|`connfail`|Attempts to connect on the wsi socket fail| |cli wsi|`wsi`|`createfail`|Creating the client wsi itself fails| |udp wsi|`wsi`|`udp_rx_loss`|Drop UDP RX that was actually received, useful with probabalistic mode| |udp wsi|`wsi`|`udp_tx_loss`|Drop UDP TX so that it's not actually sent, useful with probabalistic mode| |srv ss|`ss`|`ss_srv_vh_fail`|Secure Streams Server vhost creation forced to fail| |cli ss|`ss`|`ss_no_streamtype_policy`|The policy for the streamtype is made to seem as if it is missing| |sspc|`ss`|`sspc_fail_on_linkup`|Reject the connection to the proxy when we hear it has succeeded, it will provoke endless retries| |sspc|`ss`|`sspc_fake_rxparse_disconnect_me`|Force client-proxy link parse to seem to ask to be disconnected, it will provoke endless retries| |sspc|`ss`|`sspc_fake_rxparse_destroy_me`|Force client-proxy link parse to seem to ask to destroy the SS, it will destroy the SS cleanly| |sspc|`ss`|`sspc_link_write_fail`|Force write on the link to fail, it will provoke endless retries| |sspc|`ss`|`sspc_create_oom`|Cause the sspc handle allocation to fail as if OOM at creation time| |sspc|`ss`|`sspc_fail_metadata_set`|Cause the metadata allocation to fail| |sspc|`ss`|`sspc_rx_fake_destroy_me`|Make it seem that client's user code *rx() returned DESTROY_ME| |sspc|`ss`|`sspc_rx_metadata_oom`|Cause metadata from proxy allocation to fail| |ssproxy|`ss`|`ssproxy_dsh_create_oom`|Cause proxy's creation of DSH to fail| |ssproxy|`ss`|`ssproxy_dsh_rx_queue_oom`|Cause proxy's allocation in the onward SS->P[->C] DSH rx direction to fail as if OOM, this causes the onward connection to disconnect| |ssproxy|`wsi`|`ssproxy_client_adopt_oom`|Cause proxy to be unable to allocate for new client - proxy link connection object| |ssproxy|`wsi`|`ssproxy_client_write_fail`|Cause proxy write to client to fail| |ssproxy|`wsi`|`sspc_dsh_ss2p_oom`|Cause ss->proxy dsh allocation to fail| |ssproxy|`ss`|`ssproxy_onward_conn_fail`|Act as if proxy onward client connection failed immediately| |ssproxy|`ss`|`ssproxy_dsh_c2p_pay_oom`|Cause proxy's DSH alloc for C->P payload to fail| |ss|`ss`|`ss_create_smd`|SMD: ss creation smd registration fail| |ss|`ss`|`ss_create_vhost`|Server: ss creation acts like no vhost matching typename (only for `!vhost`)| |ss|`ss`|`ss_create_pcol`|Server: ss creation acts like no protocol given in policy| |ss|`ss`|`ss_srv_vh_fail`|Server: ss creation acts like unable to create vhost| |ss|`ss`|`ss_create_destroy_me`|ss creation acts like CREATING state returned DESTROY_ME| |ss|`ss`|`ss_create_no_ts`|Static Policy: ss creation acts like no trust store| |ss|`ss`|`ss_create_smd_1`|SMD: ss creation acts like CONNECTING said DESTROY_ME| |ss|`ss`|`ss_create_smd_2`|SMD: ss creation acts like CONNECTED said DESTROY_ME| |ss|`ss`|`ss_create_conn`|Nailed up: ss creation client connection fails with DESTROY_ME| |wsi|`wsi`|`timedclose`|(see next) Cause wsi to close after some time| |wsi|`wsi`|`timedclose_ms`|Range of ms for timedclose (eg, "timedclose_ms(10..250)"| ## Well-known namespace targets Namespaces can be used to target these more precisely, for example even though we are only passing the faults we want inject at the lws_context, we can use the namespace "paths" to target only the wsis created by other things. To target wsis from SS-based connections, you can use `ss=stream_type_name/`, eg for captive portal detection, to have it unable to find its policy entry: `ss=captive_portal_detect/ss_no_streamtype_policy` (disables CPD from operating) ...to force it to fail to resolve the server DNS: `ss=captive_portal_detect/wsi/dnsfail` (this makes CPD feel there is no internet) ...to target the connection part of the captive portal testing instead: `ss=captive_portal_detect/wsi/connfail` (this also makes CPD feel there is no internet) ### Well-known internal wsi type names Wsi created for internal features like Async DNS processing can also be targeted |wsi target|Meaning| |---|---| |`wsi=asyncdns/`|UDP wsi used by lws Async DNS support to talk to DNS servers| |`wsi=dhcpc/`|UDP wsi used by lws DHCP Client| |`wsi=ntpclient/`|UDP wsi used by lws NTP Client| For example, passing in at lws_context level `wsi=asyncdns/udp_tx_loss` will force async dns to be unable to resolve anything since its UDP tx is being suppressed. At client connection creation time, user code can also specify their own names to match on these `wsi=xxx/` namespace parts, so the faults only apply to specific wsi they are creating themselves later. This is done by setting the client creation info struct `.fi_wsi_name` to the string "xxx". libwebsockets-4.3.5/READMEs/README.h2-long-poll.md000066400000000000000000000034241476025525100212050ustar00rootroot00000000000000# h2 long poll in lws lws server and client can support "immortal" streams that are not subject to normal timeouts under a special condition. These are read-only (to the client). Network connections that contain at least one immortal stream are themselves not subject to timeouts until the last immortal stream they are carrying closes. Because of this, it's recommended there is some other way of confirming that the client is still active. ## Setting up lws server for h2 long poll Vhosts that wish to allow clients to serve these immortal streams need to set the info.options flag `LWS_SERVER_OPTION_VH_H2_HALF_CLOSED_LONG_POLL` at vhost creation time. The JSON config equivalent is to set ``` "h2-half-closed-long-poll": "1" ``` on the vhost. That's all that is needed. Streams continue to act normally for timeout with the exception client streams are allowed to signal they are half-closing by sending a zero-length DATA frame with END_STREAM set. These streams are allowed to exist outside of any timeout and data can be sent on them at will in the server -> client direction. ## Setting client streams for long poll An API is provided to allow established h2 client streams to transition to immortal mode and send the END_STREAM to the server to indicate it. ``` int lws_h2_client_stream_long_poll_rxonly(struct lws *wsi); ``` ## Example applications You can confirm the long poll flow simply using example applications. Build and run `http-server/minimal-http-server-h2-long-poll` in one terminal. In another, build the usual `http-client/minimal-http-client` example and run it with the flags `-l --long-poll` The client will connect to the server and transition to the immortal mode. The server sends a timestamp every minute to the client, and that will stay up without timeouts. libwebsockets-4.3.5/READMEs/README.http-cache.md000066400000000000000000000025401476025525100210110ustar00rootroot00000000000000# Client http cookie storage, caching and application lws now has the option to store incoming cookies in a Netscape cookie jar file persistently, and auto-apply relevant cookies to future outgoing requests. A L1 heap cache of recent cookies is maintained, along with LRU tracking and removal of entries from cache and the cookie jar file according to their cookie expiry time. The cookie handling is off by default per-connection for backwards compatibility and to avoid unexpected tracking. ## Enabling at build-time Make sure `-DLWS_WITH_CACHE_NSCOOKIEJAR=1` is enabled at cmake (it is on by default now). ## Configuring the cookie cache The cookie cache is managed through context creation info struct members. |member|function| |---|---| |`.http_nsc_filepath`|Filepath to store the cookie jar file at| |`.http_nsc_heap_max_footprint`|0, or Max size in bytes for the L1 heap cache| |`.http_nsc_heap_max_items`|0, or Max number of cookies allowed in L1 heap cache| |`.http_nsc_heap_max_payload`|0, or Largest cookie we are willing to handle| ## Enabling per-connection in lws To enable it on connections at lws level, add the flag `LCCSCF_CACHE_COOKIES` to the client connection info struct `.ssl_connection` flags. ## Enabling per-connection in Secure Streams policy To enable it on Secure Streams, in the streamtype policy add ``` "http_cookies": true ``` libwebsockets-4.3.5/READMEs/README.http-fallback.md000066400000000000000000000150071476025525100215070ustar00rootroot00000000000000# Http fallback and raw proxying Lws has several interesting options and features that can be applied to get some special behaviours... this article discusses them and how they work. ## Overview of normal vhost selection Lws supports multiple http or https vhosts sharing a listening socket on the same port. For unencrypted http, the Host: header is used to select which vhost the connection should bind to, by comparing what is given there against the names the server was configured with for the various vhosts. If no match, it selects the first configured vhost. For TLS, it has an extension called SNI (Server Name Indication) which tells the server early in the TLS handshake the host name the connection is aimed at. That allows lws to select the vhost early, and use vhost-specific TLS certs so everything is happy. Again, if there is no match the connection proceeds using the first configured vhost and its certs. ## Http(s) fallback options What happens if you try to connect, eg, an ssh client to the http server port (this is not an idle question...)? Obviously the http server part or the tls part of lws will fail the connection and close it. (We will look at that flow in a moment in detail for both unencrypted and tls listeners.) However if the first configured vhost for the port was created with the vhost creation info struct `.options` flag `LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG`, then instead of the error, the connection transitions to whatever role was given in the vhost creation info struct `.listen_accept_role` and `.listen_accept_protocol`. With lejp-conf / lwsws, the options can be applied to the first vhost using: ``` "listen-accept-role": "the-role-name", "listen-accept-protocol": "the-protocol-name", "fallback-listen-accept": "1" ``` See `./minimal-examples/raw/minimal-raw-fallback-http-server` for examples of all the options in use via commandline flags. So long as the first packet for the protocol doesn't look like GET, POST, or a valid tls packet if connection to an https vhost, this allows the one listen socket to handle both http(s) and a second protocol, as we will see, like ssh. Notice there is a restriction that no vhost selection processing is possible, neither for tls listeners nor plain http ones... the packet belonging to a different protocol will not send any Host: header nor tls SNI. Therefore although the flags and settings are applied to the first configured vhost, actually their effect is global for a given listen port. If enabled, all vhosts on the same listen port will do the fallback action. ### Plain http flow ![plain http flow](/doc-assets/accept-flow-1.svg) Normally, if the first received packet does not contain a valid HTTP method, then the connection is dropped. Which is what you want from an http server. However if enabled, the connection can transition to the defined secondary role / protocol. |Flag|lejp-conf / lwsws|Function| |---|---|---| |`LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG`|`"fallback-listen-accept": "1"`|Enable fallback processing| ### TLS https flow ![tls https flow](/doc-assets/accept-flow-2.svg) If the port is listening with tls, the point that a packet from a different protocol will fail is earlier, when the tls tunnel is being set up. |Flag|lejp-conf / lwsws|Function| |---|---|---| |`LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG`|`"fallback-listen-accept": "1"`|Enable fallback processing| |`LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS`|`"redirect-http": "1"`|Treat invalid tls packet as http, issue http redirect to https://| |`LWS_SERVER_OPTION_ALLOW_HTTP_ON_HTTPS_LISTENER`|`"allow-http-on-https": "1"`|Accept unencrypted http connections on this tls port (dangerous)| The latter two options are higher priority than, and defeat, the first one. ### Non-http listener ![non-http flow](/doc-assets/accept-flow-3.svg) It's also possible to skip the fallback processing and just force the first vhost on the port to use the specified role and protocol in the first place. |Flag|lejp-conf / lwsws|Function| |---|---|---| |LWS_SERVER_OPTION_ADOPT_APPLY_LISTEN_ACCEPT_CONFIG|`"apply-listen-accept": "1"`|Force vhost to use listen-accept-role / listen-accept-protocol| ## Using http(s) fallback with raw-proxy If enabled for build with `cmake .. -DLWS_ROLE_RAW_PROXY=1 -DLWS_WITH_PLUGINS=1` then lws includes ready-to-use support for raw tcp proxying. This can be used standalone on the first vhost on a port, but most intriguingly it can be specified as the fallback for http(s)... See `./minimal-examples/raw/minimal-raw-proxy-fallback.c` for a working example. ### fallback with raw-proxy in code On the first vhost for the port, specify the required "onward" pvo to configure the raw-proxy protocol...you can adjust the "ipv4:127.0.0.1:22" to whatever you want... ``` static struct lws_protocol_vhost_options pvo1 = { NULL, NULL, "onward", /* pvo name */ "ipv4:127.0.0.1:22" /* pvo value */ }; static const struct lws_protocol_vhost_options pvo = { NULL, /* "next" pvo linked-list */ &pvo1, /* "child" pvo linked-list */ "raw-proxy", /* protocol name we belong to on this vhost */ "" /* ignored */ }; ``` ... and set up the fallback enable and bindings... ``` info.options |= LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG; info.listen_accept_role = "raw_proxy"; info.listen_accept_proxy = "raw_proxy"; info.pvo = &pvo; ``` ### fallback with raw-proxy in JSON conf On the first vhost for the port, enable the raw-proxy protocol on the vhost and set the pvo config ``` "ws-protocols": [{ "raw-proxy": { "status": "ok", "onward": "ipv4:127.0.0.1:22" } }], ``` Enable the fallback behaviour on the vhost and the role / protocol binding ``` "listen-accept-role": "raw-proxy", "listen-accept-protocol": "raw-proxy", "fallback-listen-accept": "1" ``` ### Testing With this configured, the listen port will function normally for http or https depending on how it was set up. But if you try to connect to it with an ssh client, that will also work fine. The libwebsockets.org server is set up in this way, you can confirm it by visiting `https://libwebsockets.org` on port 443 as usual, but also trying `ssh -p 443 invalid@libwebsockets.org`... you will get permission denied from your ssh client. With valid credentials in fact that works perfectly for ssh, scp, git-over-ssh etc all on port 443... libwebsockets-4.3.5/READMEs/README.http_parser.md000066400000000000000000000016471476025525100213330ustar00rootroot00000000000000# Notes on http parser corner cases ## Dealing with %00 %00 is considered illegal in - the path part of the URL. A lot of user code handles it as a NUL terminated string, even though the header get apis are based around length. So it is disallowed to avoid ambiguity. - the name part of a urlarg, like ?name=value %00 is valid in - the value part of a urlarg, like ?name=value When the parser sees %00 where it is not allowed, it simply drops the connection. ## Note on proper urlarg handling urlargs are allowed to contain non-NUL terminated binary. So it is important to use the length-based urlarg apis - `lws_hdr_copy_fragment()` - `lws_get_urlarg_by_name_safe()` The non-length based urlarg api - `lws_get_urlarg_by_name()` ...is soft-deprecated, it's still allowed but it will be fooled by the first %00 seen in the argument into truncating the argument. Use `lws_get_urlarg_by_name_safe()` instead. libwebsockets-4.3.5/READMEs/README.jit-trust.md000066400000000000000000000423331476025525100207420ustar00rootroot00000000000000# JIT trust ![JIT Trust logo](../doc-assets/jit-trust-logo.png) ## Background Most systems using openssl rely on a system trust bundle that openssl was compiled to load at library init. This is a bit expensive, since it instantiates over 120 CA X.509 certs, but most modern Linux systems don't really notice the permanent use of 1MB or so of heap from init, the advantage is client connections have all the trusted root certs available in memory to perform validation. ![Using system trust bundles](../doc-assets/jit-trust-system-trust.png) For the kind of systems that choose mbedtls, they will typically either be burdened by or not even have enough ram to take this approach. If the device only connects to endpoints that are signed by a specific CA, you can just prepare the connection with the known trusted CA, that's the approach the examples take. This method should still be used for critical connections to the cloud, for example provide the necessary CA cert in the Secure Streams policy, or at vhost creation time. ![Using system trust bundles](../doc-assets/jit-trust-single-trust.png) However if you also have a browser type application that could connect anywhere, but you don't have heap spare to preload all the CAs, you need something like "JIT trust". ## JIT trust overview The basic approach is to connect to the server to retrieve its certificates, then study the certificates to determine the identity of the missing trusted cert we should be trying to validate with. ![JIT Trust overview](../doc-assets/jit-trust-overview.png) We attempt to get the trusted cert from some local or remote store, and retry the connection having instantiated the missing CA cert as trusted for that connection, if it is one that we do actually trust. If it lies about what CA it needs to validate, or we do not trust the one it asks for, subsequent connections will fail. If it asked for a trusted CA that we trust, and the relationship was valid, the tls negotiation should then complete successfully, and we can cache the CA cert and the host -> CA cert pre-trust requirement so future connections can work first time. ## Subject Key Id and Authority Key Id All of the certificates publish a unique-enough personal "Subject Key ID" or SKID blob. These are typically 20-byte hashes based on the cert public key. When a server certificate is issued by the CA, an entry is made first in the certificate noting the SKID of the certificate that will be used to sign it, in an "Authority Key ID", or AKID, extension. The certificate is then signed by the parent certificate private key to prove it was issued by the real owner of the CA or intermediate certificate. ![X.509 validation paths](../doc-assets/jit-trust-paths.png) Basically this AKID on a certificate is guiding the validator with information about which certificate it claims is next in the chain of trust leading back to a trusted CA. Lying about it doesn't help an attacker, because we're only using the AKID to get the CA certificate and then try to do the full signature check using it, if it's not really signed by the AKID cert it told, or anything else wrong, the actual validation will just fail. A chain that terminates in a CA certificate is complete, and can undergo full validation using the tls library. ## Converting the Mozilla trust bundle for JIT trust Lws provides a bash script `./scripts/mozilla-trust-gen.sh` that can fetch the latest Mozilla CA trust bundle for certs usable for tls validation, and convert it to three different forms to allow maintaining the trust bundle in different ways for different kinds of device to consume. - as a webroot directory, so you can server trusted DERs, with symlink indexes to the CA certs by SKID and issuer/serial - as an atomic binary blob, currently about 143KB, with structure at the start pointing to DER certs and indexes inside - a C-compiler friendly `uint8_t` array version of the blob, so it can be compiled into .rodata directly if necessary. Currently there are 128 certs in the trust bundle, and the whole blob is about 143KB uncompressed. ## Considerations about maintaining the trust blob Mozilla update their trust bundle at intervals, and there have been at least three cases where they have removed or distrusted CAs from it by their own decision, because they have issued dangerous certificates, (like one for `*` that will validate anything at all). Certifacte owners may also revoke their own certificates for any reason and issue replacements. The certs in the trust bundle expire, currently 10/128 will expire within 3 years and 50/128 over the next 10 years. So new and replacement certificates are also being added at intervals. Part of using the trust bundle is building in some way to update what is trusted over the lifetime of the device, which may exceed 10 years. Depending on the device, it may not be any problem to keep the trust blob in the firmware, and update the firmware ongoing every few months. So you could build it into the firmware using the C array include file (the minimal example takes this approach). Another device may have difficulty updating the firmware outside of emergencies, it could keep the trust blob in a separate area and update it separately. Having it as a single blob makes it easy to fetch and update. Finally constrained devices, say in ESP32 class, may not have space or desire to store the trust blob in the device at all, it could query a remote server on demand to check for any trusted CA matching a given AKID and retrieve and cache it in volatile ram. This would use the webroot produced by the script, via tls and a fixed CA cert outside this system. ## Format of the JIT trust blob The trust blob layout is currently ``` 00: 54 42 4c 42 Magic "TBLB" 04: 00 01 MSB-first trust blob layout version 06: XX XX MSB-first count of certificates 08: XX XX XX XX MSB-first trust blob generation unix time 0c: XX XX XX XX MSB-first offset from blob start of cert length table 10: XX XX XX XX MSB-first offset from blob start of SKID length table 14: XX XX XX XX MSB-first offset from blob start of SKID table 18: XX XX XX XX MSB-first total blob length 1c: XX .. XX DER certs (start at +0x1c) : XX .. XX DER cert length table (MSB-first 16-bit per cert) : XX .. XX SKID length table (8-bit per cert) : XX .. XX SKID table (variable per cert) ``` ## Enabling JIT Trust ``` $ cmake .. -DLWS_WITH_TLS_JIT_TRUST=1 ``` ## Minimal example for JIT Trust `minimal-examples/http-client/minimal-http-client-jit-trust` is built if JIT Trust is enabled at cmake and `-DLWS_WITH_MINIMAL_EXAMPLES=1`. This is based on minimal-http-client, except the loading of the system trust bundle is defeated, so by default it does not trust anything and cannot complete any tls connection. It includes the mozilla trust blob as a header file when built. It tries to do an http client connection twice, the first time fails but JIT Trust determines which trusted CA cert is missing, retreives it from the trust blob and creates the necessary temporary vhost with the correct CA cert(s) trusted. On the next retry, the connection succeeds. ## Processing of x509 AKID and SKIDs We study each x509 cert sent by the server in turn. We parse out the SKID and AKID on each one and stash them (up to 4 deep). After the initial validation fails due to lack of any trusted CA, lws has collected all the AKID and SKIDs that were in certs sent by the server. Since these may be sent in any order, may be malicious, and may even contain the (untrusted) root CA, they are sorted into a trust path using the AKID and SKID relationships. To cover cross-signing and cases where the root cert(s) were wrongly sent by a misconfigured server, all of the AKIDs in the stash are queried against the trusted CA store. In cross-signing, multiple intermediates are provided with the same SKID, that all match the server certificate AKID parent. Since we might meet certificates that trust multiple valid CAs that can validate the certificate, we support up to three CA certs imported. A user `lws_system_ops` handler performs the query, so it can consist of any kind of backing store or remote lookup. Helpers are provided to query the JIT trust mozilla blob, so the system helper is small in the typical case, just calling lws helpers. The results (up to three CA certs to account for cross-signing scenarios) are collected and a 1hr TTL cache entry made for the hostname and the SKIDs of the matched CAs, if there is no existing JIT vhost with its tls context configured with the needed trusted CAs, one is created. When the connection is retried, lws checks the cache for the hostname having a binding to an existing JIT vhost, if that exists the connection proceeds bound to that. If there is a cache entry but no JIT vhost, one is created using the information in the cache entry. ## Efficiency considerations From cold, the JIT Trust flow is 1. A sacrificial connection is made to get the server certs 2. Query the JIT Trust database for AKIDs mentioned in the certs (this may be done asynchronously) 3. Create a temporary vhost with the appropriate trusted certs enabled in it, and add an entry in the cache for this hostname to the SKIDs of the CAs enabled on this temporary vhost 4. Retry, querying the cache to bind the connection to the right temporary vhost An lws_cache in heap is maintained so step 1 can be skipped while hostname-> SKID items exist in the cache. If the items expire or are evicted, it just means we have to do step 1 again. For a short time, the vhost created in step 3 is allowed to exist when idle, ie when no connections are actively using it. In the case the vhost exists and the cache entry exists for the hostname, the connection can proceed successfully right away without steps 1 through 3. ## APIs related to JIT Trust Systems that support JIT trust define an `lws_system_ops` callback that does whatever the system needs to do for attempting to acquire a trusted cert with a specified SKID or issuer/serial. ``` int (*jit_trust_query)(struct lws_context *cx, const uint8_t *skid, size_t skid_len, void *got_opaque); ``` The ops handler doesn't have to find the trusted cert immediately before returning, it is OK starting the process and later if successful calling a helper `lws_tls_jit_trust_got_cert_cb()` with the `got_opaque` from the query. This will cache the CA cert so it's available at the next connection retry for preloading. An helper suitable for `ops->jit_trust_query` using trust blob lookup in .rodata is provided in `lws_tls_jit_trust_blob_queury_skid()`, the callback above should be called with its results as shown in the minimal example. ## Runtime tuning for JIT Trust The context creation info struct has a couple of runtime-tunable settings related to JIT Trust. `.jitt_cache_max_footprint`: default 0 means no limit, otherwise the hostname-> SKID cache is kept below this many bytes in heap, by evicting LRU entries. `.vh_idle_grace_ms`: default 0 means 5000ms, otherwise sets the length of time a JIT Trust vhost is allowed to exist when it has no connections using it. Notice that, eg, h2 connections have their own grace period when they become idle, to optimize reuse, this period does not start until any h2 network connection bound to the vhost has really closed. ## Considerations around http redirects HTTP redirects are transactions that tell the client to go somewhere else to continue, typically a 301 response with a Location: header explaining where to go. JIT Trust supports redirects to hosts with the same or different trust requirements, each step in the redirect is treated as a new connection that will fail, try to create a vhost with the right trust and work on the retry. Lws rejects by default protocol downgrades (https -> http) on redirects, the example used a context option `LCCSCF_ACCEPT_TLS_DOWNGRADE_REDIRECTS` to override this. ## Works out of the box on recent mbedtls and openssl No modifications are needed to either tls library. ## Compatibility Testing A list of the top 100 sites each from the US and the ROW were combined to produce 156 unqiue domain names [1] The Mbedtls build of JIT trust minimal example was run against each of these doing a GET on path `/` and restricted to h1 (`--server xxx --h1`). In some cases, the server at the base domain name is broken or down, as verified using ssllabs.com as a second opinion. These domains only resolve properly using `www.` prefix. In some cases the sites check the user agent and return a 4xx, these are taken as success for this test, since there was no problem at the tls layer. |site|h1|h2|comment| |---|---|---|---| |adobe.com|āœ“|āœ“|| |allegro.pl|āœ“|āœ“|| |allrecipes.com|āœ“|āœ“|| |amazon.co.jp|āœ“|āœ“|| |amazon.com|āœ“|āœ“|| |amazon.co.uk|āœ“|āœ“|| |amazon.de|āœ“|āœ“|| |amazon.fr|āœ“|āœ“|| |amazon.in|āœ“|āœ“|| |amazon.it|āœ“|āœ“|| |aol.com|āœ“|āœ“|| |apartments.com|āœ“|āœ“|| |apple.com|āœ“|āœ“|| |ar.wikipedia.org|āœ“|āœ“|| |att.com|āœ“|āœ“|| |bankofamerica.com|āœ“|āœ“|| |bbc.com|āœ“|āœ“|| |bbc.co.uk|āœ“|āœ“|| |bestbuy.com|āœ•|āœ“|redirect-> `www.` then h1: timeout, h2: 403 forbidden... geolocated?| |booking.com|āœ“|āœ“|| |britannica.com|āœ“|āœ“|| |bulbagarden.net|āœ“|āœ“|| |businessinsider.com|āœ“|āœ“|| |ca.gov|āœ“|āœ“|| |caixa.gov.br|āœ•|āœ•|TLS trust works fine. Continuously redirects to self... sends set-cookie that we don't return yet| |capitalone.com|āœ“|āœ“|| |cbssports.com|āœ“|āœ“|| |cdc.gov|āœ“|āœ“|| |chase.com|āœ“|āœ“|| |chrome.google.com|āœ“|āœ“|| |cnbc.com|āœ“|āœ“|| |cnet.com|āœ“|āœ“|| |cnn.com|āœ“|āœ“|| |cookpad.com|āœ“|āœ“|| |costco.com|āœ•|āœ“|TLS trust works fine. But with or without `www.` server does not reply within 15s on h1, sends 403 OK on h2... Curl acts the same as we do, firefox works... geolocated?|| |craigslist.org|āœ“|āœ“|| |dailymotion.com|āœ“|āœ“|| |de.wikipedia.org|āœ“|āœ“|| |dictionary.com|āœ“|āœ“|| |ebay.com|āœ“|āœ“|| |ebay.co.uk|āœ“|āœ“|| |en.wikipedia.org|āœ“|āœ“|| |epicgames.com|āœ“|āœ“|| |espn.com|āœ“|āœ“|| |es.wikipedia.org|āœ“|āœ“|| |etsy.com|āœ“|āœ“|| |expedia.com|āœ“|āœ“|| |facebook.com|āœ“|āœ“|| |fandom.com|āœ“|āœ“|| |fedex.com|āœ“|āœ“|| |finance.yahoo.com|āœ“|āœ“|| |www.foodnetwork.com|āœ“|āœ“|`www.` served correctly, base domain is misconfigured with expired cert, confirmed with ssllabs + curl| |forbes.com|āœ“|āœ“|| |foxnews.com|āœ“|āœ“|| |fr.wikipedia.org|āœ“|āœ“|| |gamepedia.com|āœ“|āœ“|| |genius.com|āœ“|āœ“|| |glassdoor.com|āœ“|āœ“|| |globo.com|āœ“|āœ“|| |google.com|āœ“|āœ“|| |healthline.com|āœ“|āœ“|| |homedepot.com|āœ“|āœ“|| |hulu.com|āœ“|āœ“|| |hurriyet.com.tr|āœ“|āœ“|| |id.wikipedia.org|āœ“|āœ“|| |ign.com|āœ“|āœ“|| |ikea.com|āœ“|āœ“|`www.` served correctly, base domain is misconfigured with nonresponsive server, confirmed with ssllabs| |ilovepdf.com|āœ“|āœ“|| |imdb.com|āœ“|āœ“|| |indeed.com|āœ“|āœ“|| |indiatimes.com|āœ“|āœ“|| |instagram.com|āœ“|āœ“|| |investopedia.com|āœ“|āœ“|| |irs.gov|āœ“|āœ“|| |it.wikipedia.org|āœ“|āœ“|| |ivi.ru|āœ“|āœ“|| |ja.wikipedia.org|āœ“|āœ“|| |kakaku.com|āœ“|āœ“|| |khanacademy.org|āœ“|āœ“|| |kinopoisk.ru|āœ“|āœ“|| |leboncoin.fr|āœ“|āœ“|| |linkedin.com|āœ“|āœ“|| |live.com|āœ“|āœ“|| |lowes.com|āœ“|āœ“|| |macys.com|āœ•|āœ“|TLS trust works fine. Continuously redirects to self... `www.` same, curl acts same but OK if given -b -c, so akami cookie storage issue| |mail.ru|āœ“|āœ“|| |mail.yahoo.com|āœ“|āœ“|| |mapquest.com|āœ“|āœ“|| |mayoclinic.org|āœ“|āœ“|| |medicalnewstoday.com|āœ“|āœ“|| |mercadolivre.com.br|āœ“|āœ“|| |merriam-webster.com|āœ“|āœ“|| |microsoft.com|āœ“|āœ“|| |msn.com|āœ“|āœ“|| |namu.wiki|āœ“|āœ“|| |nbcnews.com|āœ“|āœ“|| |netflix.com|āœ“|āœ“|| |nih.gov|āœ“|āœ“|| |nl.wikipedia.org|āœ“|āœ“|| |ny.gov|āœ“|āœ“|| |nytimes.com|āœ“|āœ“|| |ok.ru|āœ“|āœ“|| |onet.pl|āœ“|| |orange.fr|āœ“|āœ“|| |paypal.com|āœ“|āœ“|| |pinterest.com|āœ“|āœ“|| |pixiv.net|āœ“|āœ“|| |play.google.com|āœ“|āœ“|| |pl.wikipedia.org|āœ“|āœ“|| |www.programme-tv.net|āœ“|āœ“|OK with `www.`, without `www.` TLS trust works fine but server does not reply, same with curl| |pt.wikipedia.org|āœ“|āœ“|| |quizlet.com|āœ“|āœ“|| |quora.com|āœ“|āœ“||| |rakuten.co.jp|āœ“|āœ“|| |realtor.com|āœ“|āœ“|| |reddit.com|āœ“|āœ“|| |reverso.net|āœ“|āœ“|| |roblox.com|āœ“|āœ“|| |rottentomatoes.com|āœ“|āœ“|| |ru.wikipedia.org|āœ“|āœ“|| |sahibinden.com|āœ“|āœ“|| |smallpdf.com|āœ“|āœ“|| |speedtest.net|āœ“|āœ“|| |spotify.com|āœ“|āœ“|| |steampowered.com|āœ“|āœ“|| |target.com|āœ“|āœ“|| |theguardian.com|āœ“|āœ“|| |tripadvisor.com|āœ“|āœ“|| |tr.wikipedia.org|āœ“|āœ“|| |twitch.tv|āœ“|āœ“|| |twitter.com|āœ“|āœ“|| |uol.com.br|āœ“|āœ“|| |ups.com|āœ“|āœ“|| |urbandictionary.com|āœ“|āœ“|| |usatoday.com|āœ“|āœ“|| |usnews.com|āœ•|āœ“|TLS trust works fine. Needs `www.` else server doesn't respond in 15s, sends 403 on h2, Curl acts the same, geolocated?| |usps.com|āœ“|āœ“|| |verizon.com|āœ“|āœ“|| |vk.com|āœ“|āœ“|| |walmart.com|āœ“|āœ“|| |washingtonpost.com|āœ“|āœ“|| |weather.com|āœ“|āœ“|| |webmd.com|āœ“|āœ“|| |whatsapp.com|āœ“|āœ“|| |wowhead.com|āœ“|āœ“|| |wp.pl|āœ“|āœ“|| |www.gov.uk|āœ“|āœ“|| |xfinity.com|āœ“|āœ“|| |yahoo.co.jp|āœ“|āœ“|| |yahoo.com|āœ“|āœ“|| |yandex.ru|āœ“|āœ“|| |yellowpages.com|āœ“|āœ“|| |yelp.com|āœ“|āœ“|| |youtube.com|āœ“|āœ“|| |zh.wikipedia.org|āœ“|āœ“|| |zillow.com|āœ“|āœ“|| [1] ``` wget -O- https://ahrefs.com/blog/most-visited-websites/ | grep most-visited-websites-us | \ sed -E 's/class="column-2">/|/g' | tr '|' '\n' | \ sed 's/<.*//g' | grep -v Domain | grep -v Josh | sort | uniq ``` libwebsockets-4.3.5/READMEs/README.json-lejp.md000066400000000000000000000102301476025525100206650ustar00rootroot00000000000000# LEJP JSON Stream Parser ||| |---|---|---| |cmake| `LWS_WITH_LEJP`| |Header| ./include/libwebsockets/lws-lejp.h| |api-test| ./minimal-examples/api-tests/api-test-lejp/| |test app| ./test-apps/test-lejp.c -> libwebsockets-test-lejp| LEJP is a lightweight JSON stream parser. The features are: - completely immune to input fragmentation, give it any size blocks of JSON as they become available, 1 byte, or 100K at a time give identical parsing results - input chunks discarded as they are parsed, whole JSON never needed in memory - nonrecursive, fixed stack usage of a few dozen bytes - no heap allocations at all, just requires ~500 byte context usually on caller stack - creates callbacks to a user-provided handler as members are parsed out - no payload size limit, supports huge / endless strings bigger than system memory - collates utf-8 text payloads into a 250-byte chunk buffer in the json parser context object for ease of access ## Type handling LEJP leaves all numbers in text form, they are signalled in different callbacks according to int or float, but delivered as text strings in the first `ctx->npos` chars of `ctx->buf`. For numeric types, you would typically use `atoi()` or similar to recover the number as a host type. ## Callback reasons The user callback does not have to handle any callbacks, it only needs to process the data for the ones it is interested in. |Callback reason|JSON structure|Associated data| |---|---|---| |`LEJPCB_CONSTRUCTED`|Created the parse context|| |`LEJPCB_DESTRUCTED`|Destroyed the parse context|| |`LEJPCB_COMPLETE`|The parsing completed OK|| |`LEJPCB_FAILED`|The parsing failed|| |`LEJPCB_VAL_TRUE`|boolean true|| |`LEJPCB_VAL_FALSE`|boolean false|| |`LEJPCB_VAL_NULL`|explicit NULL|| |`LEJPCB_PAIR_NAME`|The name part of a JSON `key: value` map pair|`ctx->buf`| |`LEJPCB_VAL_STR_START`|A UTF-8 string is starting|| |`LEJPCB_VAL_STR_CHUNK`|The next string chunk|`ctx->npos` bytes in `ctx->buf`| |`LEJPCB_VAL_STR_END`|The last string chunk|`ctx->npos` bytes in `ctx->buf`| |`LEJPCB_ARRAY_START`|An array is starting|| |`LEJPCB_ARRAY_END`|An array has ended|| |`LEJPCB_OBJECT_START`|A JSON object is starting|| |`LEJPCB_OBJECT_END`|A JSON object has ended|| ## Handling JSON UTF-8 strings When a string is parsed, an advisory callback of `LECPCB_VAL_STR_START` occurs first. No payload is delivered with the START callback. Payload is collated into `ctx->buf[]`, the valid length is in `ctx->npos`. For short strings or blobs where the length is known, the whole payload is delivered in a single `LECPCB_VAL_STR_END` callback. For payloads larger than the size of `ctx->buf[]`, `LECPCB_VAL_STR_CHUNK` callbacks occur delivering each sequential bufferload. The last chunk (which may be zero length) is delievered by `LECPCB_VAL_STR_END`. ## Parsing paths LEJP maintains a "parsing path" in `ctx->path` that represents the context of the callback events. As a convenience, at LEJP context creation time, you can pass in an array of path strings you want to match on, and have any match checkable in the callback using `ctx->path_match`, it's 0 if no active match, or the match index from your path array starting from 1 for the first entry. |CBOR element|Representation in path| |---|---| |JSON Array|`[]`| |JSON Map|`.`| |JSON Map entry key string|`keystring`| ## Comparison with LECP (CBOR parser) LECP is based on the same principles as LEJP and shares most of the callbacks. The major differences: - LEJP value callbacks all appear in `ctx->buf[]`, ie, floating-point is provided to the callback in ascii form like `"1.0"`. CBOR provides a more strict typing system, and the different type values are provided either in `ctx->buf[]` for blobs or utf-8 text strtings, or the `item.u` union for converted types, with additional callback reasons specific to each type. - CBOR "maps" use `_OBJECT_START` and `_END` parsing callbacks around the key / value pairs. LEJP has a special callback type `PAIR_NAME` for the key string / integer, but in LECP these are provided as generic callbacks dependent on type, ie, generic string callbacks or integer ones, and the value part is represented according to whatever comes. libwebsockets-4.3.5/READMEs/README.jwt.md000066400000000000000000000162111476025525100175750ustar00rootroot00000000000000# JWT support in lws lws supports the common usage scenarios of JWS (signed) JWT generation, parsing and transferring in and out as http cookies. Care is taken to provide helpers that implement the current security best practices for cookie handling and JWT validation. All of the common algorithms like ES512 are supported along with JWK generation and handling apis. The build options needed are `-DLWS_WITH_JOSE=1` `-DLWS_WITH_GENCRYPTO=1`. Underlying JOSE primitives are exposed as apis, some JWT specific primitives and finally a JWT-via http cookie level creation apis each building on top of what was underneath. The higher level APIs are provided additionally because they have the most opportunity for implementation pitfalls like not validating alg carefully, or not using the latest cookie security options; the provided APIs handle that centrally for you. If your needs vary from what the higher level apis are doing, you can cut-and-paste out those implementations and create your own using the public lower level apis. ## LWS JWT fields Lws JWT uses mainly well-known fields Field|Std|Meaning ---|---|--- iss|yes|Issuer, typically the domain like "warmcat.com" aud|yes|Audience, typically a url path like "https://warmcat.com/sai" iat|yes|Unix-time "Issued At" nbf|yes|Unix-time "Not Before" exp|yes|Unix-time "Expired" sub|yes|Subject, eg, a username or user email csrf|no|A random 16-char hex token generated with the JWT for use in links specific to the JWT bearer ext|no|Application-specific JSON sub-object with whatever fields you need, eg, `"authorization": 1` ## Approach for JWT as session token Once JWTs are produced, they are autonomous bearer tokens, if they are not kept secret between the browser and the site, they will be accepted as evidence for having rights to the session from anyone. Requiring https, and various other cookie hardening techniques make it more difficult for them to leak, but it is still necessary to strictly constrain the token's validity time, usually to a few tens of minutes or how long it takes a user to login and get stuff done on the site in one session. ## CSRF mitigation Cross Site Request Forgery (CSRF) is a hacking scenario where an authorized user with a valid token is tricked into clicking on an external link that performs some action with side-effects on the site he has active auth on. For example, he has a cookie that's logged into his bank, and the link posts a form to the bank site transferring money to the attacker. Lws JWT mitigates this possibility by putting a random secret in the generated JWT; when the authorized user presents his JWT to generate the page, generated links that require auth to perform their actions include the CSRF string from that user's current JWT. When the user clicks those links intentionally, the CSRF string in the link matches the CSRF string in the currently valid JWT that was also provided to the server along with the click, and all is well. An attacker does not know the random, ephemeral JWT CSRF secret to include in forged links, so the attacker-controlled action gets rejected at the server as having used an invalid link. The checking and link manipulation need to be implemented in user code / JS... lws JWT provides the random CSRF secret in the JWT and makes it visible to the server when the incoming JWT is processed. ## Need for client tracking of short JWT validity times Many links or references on pages do not require CSRF strings, only those that perform actions with side-effects like deletion or money transfer should need protecting this way. Due to CSRF mitigation, generated pages containing the protected links effectively have an expiry time linked to that of the JWT, since only the bearer of the JWT used to generate the links on the page can use them; once that expires actually nobody can use them and the page contents, which may anyway be showing content that only authenticated users can see must be invalidated and re-fetched. Even if the contents are visible without authentication, additional UI elements like delete buttons that should only be shown when authenticated will wrongly still be shown For that reason, the client should be informed by the server along with the authentication status, the expiry time of it. The client should then by itself make arrangements to refresh the page when this time is passed, either showing an unauthenticated version of the same page if it exists, or by redirecting to the site homepage if showing any of the contents required authentication. The user can then log back in using his credientials typically stored in the browser's password store and receive a new short-term JWT with a new random csrf token along with a new page using the new csrf token in its links. ## Considerations for long-lived connections Once established as authorized, websocket links may be very long-lived and hold their authorization state at the server. Although the browser monitoring the JWT reloading the page on auth expiry should mitigate this, an attacker can choose to just not do that and have an immortally useful websocket link. At least for actions on the long-lived connection, it should not only confirm the JWT authorized it but that the current time is still before the "exp" time in the JWT, this is made available as `expiry_unix_time` in the args struct after successful validation. Ideally the server should close long-lived connections according to their auth expiry time. ## JWT lower level APIs The related apis are in `./include/libwebsockets/lws-jws.h` ### Validation of JWT ``` int lws_jwt_signed_validate(struct lws_context *ctx, struct lws_jwk *jwk, const char *alg_list, const char *com, size_t len, char *temp, int tl, char *out, size_t *out_len); ``` ### Composing and signing JWT ``` int lws_jwt_sign_compact(struct lws_context *ctx, struct lws_jwk *jwk, const char *alg, char *out, size_t *out_len, char *temp, int tl, const char *format, ...); ``` ## JWT creation and cookie get / set API Both the validation and signing apis use the same struct to contain their aguments. ``` struct lws_jwt_sign_set_cookie { struct lws_jwk *jwk; /**< entry: required signing key */ const char *alg; /**< entry: required signing alg, eg, "ES512" */ const char *iss; /**< entry: issuer name to use */ const char *aud; /**< entry: audience */ const char *cookie_name; /**< entry: the name of the cookie */ char sub[33]; /**< sign-entry, validate-exit: subject */ const char *extra_json; /**< sign-entry, validate-exit: * optional "ext" JSON object contents for the JWT */ size_t extra_json_len; /**< validate-exit: * length of optional "ext" JSON object contents for the JWT */ const char *csrf_in; /**< validate-entry: * NULL, or an external CSRF token to check against what is in the JWT */ unsigned long expiry_unix_time; /**< sign-entry: seconds the JWT and cookie may live, * validate-exit: expiry unix time */ }; int lws_jwt_sign_token_set_http_cookie(struct lws *wsi, const struct lws_jwt_sign_set_cookie *i, uint8_t **p, uint8_t *end); int lws_jwt_get_http_cookie_validate_jwt(struct lws *wsi, struct lws_jwt_sign_set_cookie *i, char *out, size_t *out_len); ``` libwebsockets-4.3.5/READMEs/README.libressl.md000066400000000000000000000052751476025525100206200ustar00rootroot00000000000000## Background libressl is another fork of Openssl. ## Example build for libressl itself If you unpack or clone into `/path/to/libressl` and enter that dir... ``` $ mkdir build $ cd build $ cmake .. $ make -j8 ``` ## Example build for lws against libressl You can just build lws as you would for a specific version of openssl ``` $ mkdir build $ cd build $ cmake .. -DLWS_OPENSSL_LIBRARIES='/path/to/libressl/build/tls/libtls.a;/path/to/libressl/build/ssl/libssl.a;/path/to//libressl/build/crypto/libcrypto.a' -DLWS_OPENSSL_INCLUDE_DIRS=/path/to/libressl/include -DLWS_WITH_MINIMAL_EXAMPLES=1 $ make -j8 ``` Libressl by default will look for a trust bundle in `/usr/local/etc/ssl/cert.pem`, you either have to symlink this to your trust bundle if that doesnt happen to be where it is, or give your app the trusted CA specifically as is done for MBEDTLS and WOLFSSL in the examples. In Fedora, the system trust store can be found at `/etc/pki/tls/cert.pem`, so you can symlink it ``` $ sudo mkdir -p /usr/local/etc/ssl $ sudo ln -sf /etc/pki/tls/cert.pem /usr/local/etc/ssl/cert.pem ``` after that you can run examples from the build dir, eg, ``` $ ./bin/lws-minimal-http-client [2021/02/08 20:10:52:0781] U: LWS minimal http client [-d] [-l] [--h1] [2021/02/08 20:10:52:0784] N: LWS: 4.1.99-v4.1.0-269-g762ef33fca, loglevel 1031 [2021/02/08 20:10:52:0784] N: NET CLI SRV H1 H2 WS IPv6-absent [2021/02/08 20:10:52:0786] N: ++ [wsi|0|pipe] (1) [2021/02/08 20:10:52:0787] N: ++ [vh|0|netlink] (1) [2021/02/08 20:10:52:0802] N: ++ [vh|1|default] (2) [2021/02/08 20:10:52:1850] N: ++ [wsicli|0|GET/h1/warmcat.com] (1) [2021/02/08 20:10:52:2982] N: ++ [mux|0|h2_sid1_(wsicli|0|GET/h1/warmcat.com)] (1) [2021/02/08 20:10:52:3271] U: Connected to 46.105.127.147, http response: 200 [2021/02/08 20:10:52:3335] U: RECEIVE_CLIENT_HTTP_READ: read 4087 [2021/02/08 20:10:52:3335] U: RECEIVE_CLIENT_HTTP_READ: read 4096 [2021/02/08 20:10:52:3526] U: RECEIVE_CLIENT_HTTP_READ: read 4087 [2021/02/08 20:10:52:3526] U: RECEIVE_CLIENT_HTTP_READ: read 4096 [2021/02/08 20:10:52:3543] U: RECEIVE_CLIENT_HTTP_READ: read 4087 [2021/02/08 20:10:52:3543] U: RECEIVE_CLIENT_HTTP_READ: read 4096 [2021/02/08 20:10:52:3545] U: RECEIVE_CLIENT_HTTP_READ: read 3502 [2021/02/08 20:10:52:3546] U: LWS_CALLBACK_COMPLETED_CLIENT_HTTP [2021/02/08 20:10:52:3546] N: -- [wsi|0|pipe] (0) 276.019ms [2021/02/08 20:10:52:3547] N: -- [mux|0|h2_sid1_(wsicli|0|GET/h1/warmcat.com)] (0) 56.417ms [2021/02/08 20:10:52:3566] N: -- [vh|1|default] (1) 276.384ms [2021/02/08 20:10:52:3566] N: -- [wsicli|0|GET/h1/warmcat.com|default|h2|h2] (0) 171.599ms [2021/02/08 20:10:52:3567] N: -- [vh|0|netlink] (0) 277.974ms [2021/02/08 20:10:52:3567] U: Completed: OK ``` libwebsockets-4.3.5/READMEs/README.lifecycle.md000066400000000000000000000031621476025525100207310ustar00rootroot00000000000000# lws lifecycles ## Context ![context lifecycle](/doc-assets/lifecycle-context.png) ## Client wsi ![client wsi](/doc-assets/lifecycle-wsi.png) ## Server wsi ![server wsi](/doc-assets/lifecycle-server-wsi.png) ## role-specific events role|client|server ---|---|--- http COMPLETED|`LWS_CALLBACK_COMPLETED_CLIENT_HTTP`|- http RECEIVE|`LWS_CALLBACK_RECEIVE_CLIENT_HTTP`|`LWS_CALLBACK_RECEIVE_HTTP` http WRITEABLE|`LWS_CALLBACK_CLIENT_HTTP_WRITEABLE`|`LWS_CALLBACK_HTTP_WRITEABLE` http CLOSE|`LWS_CALLBACK_CLOSED_CLIENT_HTTP`|`LWS_CALLBACK_CLOSED_HTTP` http BIND|`LWS_CALLBACK_CLIENT_HTTP_BIND_PROTOCOL`|`LWS_CALLBACK_HTTP_BIND_PROTOCOL` http DROP|`LWS_CALLBACK_CLIENT_HTTP_DROP_PROTOCOL`|`LWS_CALLBACK_HTTP_DROP_PROTOCOL` role|client|server ---|---|--- ws ESTABLISHED|`LWS_CALLBACK_CLIENT_ESTABLISHED`|`LWS_CALLBACK_ESTABLISHED` ws RECEIVE|`LWS_CALLBACK_CLIENT_RECEIVE`|`LWS_CALLBACK_RECEIVE` ws WRITEABLE|`LWS_CALLBACK_CLIENT_WRITEABLE`|`LWS_CALLBACK_SERVER_WRITEABLE` ws CLOSE|`LWS_CALLBACK_CLIENT_CLOSED`|`LWS_CALLBACK_CLOSED` ws BIND|`LWS_CALLBACK_WS_CLIENT_BIND_PROTOCOL`|`LWS_CALLBACK_WS_BIND_PROTOCOL` ws DROP|`LWS_CALLBACK_WS_CLIENT_DROP_PROTOCOL`|`LWS_CALLBACK_WS_DROP_PROTOCOL` role|client|server ---|---|--- raw ESTABLISHED|`LWS_CALLBACK_RAW_CONNECTED`|`LWS_CALLBACK_RAW_ADOPT` raw RECEIVE|`LWS_CALLBACK_RAW_RX`|`LWS_CALLBACK_RAW_RX` raw WRITEABLE|`LWS_CALLBACK_RAW_WRITEABLE`|`LWS_CALLBACK_RAW_WRITEABLE` raw CLOSE|`LWS_CALLBACK_RAW_CLOSE`|`LWS_CALLBACK_RAW_CLOSE` raw BIND|`LWS_CALLBACK_RAW_SKT_BIND_PROTOCOL`|`LWS_CALLBACK_RAW_SKT_BIND_PROTOCOL` raw DROP|`LWS_CALLBACK_RAW_SKT_DROP_PROTOCOL`|`LWS_CALLBACK_RAW_SKT_DROP_PROTOCOL` libwebsockets-4.3.5/READMEs/README.logging.md000066400000000000000000000277751476025525100204400ustar00rootroot00000000000000# lws logging # `lwsl_` logging apis LWS has traditionally provided logging arrangements that are not indirected through the lws context, because logging may be needed before and after the context existence. For that reason the original logging arrangements are processwide. By default the logs are emitted on stdout, but this can be overridden using `lws_set_log_level()` and either syslog (provided by `lwsl_emit_syslog()`) or custom log emission is possible if you point it to your own. Currently the following log levels are defined |name|function|release|meaning| |---|---|---|---| |`LLL_ERR`|`lwsl_err()`|y|Serious operation errors anyone needs to know| |`LLL_WARN`|`lwsl_warn()`|y|Operation errors you may need to know| |`LLL_USER`|`lws_user()`|y|Information user code wants you to know| |`LLL_NOTICE`|`lwsl_notice()`|y|Information about what lws is doing useful for logging| |`LLL_INFO`|`lwsl_info()`|n|Detailed information about what lws is doing| |`LLL_DEBUG`|`lwsl_debug()`|n|Very detailed information about what lws is doing| |`LLL_PARSER`|`lwsl_parser()`|n|Very detailed information about parsing| |`LLL_HEADER`|`lwsl_header()`|n|Very detailed information about header processing| |`LLL_EXT`|`lwsl_ext()`|n|Very detailed information about ws extensions| |`LLL_CLIENT`|`lwsl_client()`|n|Very detailed information about client connections| |`LLL_LATENCY`|`lwsl_latency()`|n|detailed latency stats| |`LLL_THREAD`|`lwsl_thread()`|n|detailed threadpool information| The first four log levels are built into lws even on Release builds, the others are only built in Debug builds. You can select between Debug and Release builds using cmake `-DCMAKE_BUILD_TYPE=` `DEBUG` or `Release` `lws_set_log_level()` is used to OR together the logging bitfields you want to see emitted, only log levels that were built in can be enabled since the code for them is just not there otherwise. ## Finegrained control of log level build You can deviate from the default log inclusion for release / debug by overriding it at cmake, using `LWS_LOGGING_BITFIELD_SET` and `LWS_LOGGING_BITFIELD_CLEAR`. For example you can set `-DLWS_LOGGING_BITFIELD_SET="LLL_INFO|LLL_DEBUG"`, which will cause those log level traces to be built in even in Release mode. Clear works similarly to defeat build of specific log levels. ## Object tags in lws Commonly logging wants to refer to an object in a repeatable way, the usual way to do this is with `%p` to print the object pointer. But this has a couple of drawbacks, first the same memory may be freed and reallocated for a different instance of the same or another object, causing confusion, and second when multiple processes are allocating objects and logging, the same address may be allocated in different process also causing confusion. Lws has introduced unique tag strings to refer to object identity in logging instead, these contain various information such as a 64-bit ordinal for the group the object belongs to that won't repeat even if reallocated to the same address (until 2^64 allocations, anyway). Tags are fixed at object creation time for the whole object lifetime, although in some cases the tag may be appended to... accepted server wsis for example don't have much information available to form the tag until they start to indicate what they want to do. At their simplest the tags look like this (in a log indicating creation) ``` [2020/12/27 08:49:19:2956] N: ++ (4) [wsi|5|h2] ``` It means a wsi has been created with the tag `[wsi|5|h2]`, and after that, there are 4 active objects in the wsi group. The corresponding object destruction log with the tag is ``` [2020/12/27 08:49:24:4226] N: -- (3) 5.126s [wsi|5|h2] ``` it indicates the object's tag, that it lived for 5.126s and after its destruction, there are 3 objects in its group left. ### Compound tags If the object has bindings, the tag can reflect that, eg ``` [2020/12/27 08:49:19:4787] N: ++ (2) [wsiSScli|6|d_h1] [2020/12/27 08:49:19:4793] N: ++ (2) [wsicli|6|GET/h1/httpbin.org/([wsiSScli|6|d_h1])] ``` the first log is describing a proxied SS client connection at the proxy, and the second is a wsi bound to the SS object from the first log to do the outgoing client action. ## Tags in user code When user code wants to refer to a tagged object like a wsi or vhost, there are helpers that return a `const char *` containing the tag |tag accessors| |---| |`lws_wsi_tag(wsi)`| |`lws_vh_tag(vh)`| |`lws_ss_tag(h)`| # New logging context apis From v4.3 on lws additionally provides wrappers that issue logs into a "log context" object, one of these is embedded in the lws_context, lws_vhost, wsi, ss and sspc handles. These follow the same general approach as before, but allow logs to be issued in "the context" of any of those objects, and to fall back sanely if the object pointer is NULL. The traditional process scope logs and emit management remain available as before, and if you do not set custom log contexts, the new log apis use the processwide log context emit and mask as before too. Here's a summary of the differences: |Traditional process scope logs|New log context apis| |---|---| |Single processwide log context|Defaults to processwide, but object can use custom log contexts| |Single processwide emit function|Emit function per log context| |Single processwide log mask|log mask is in log context, objects can be bound to custom log contexts at creation time| |Require trailing `\n` in format|Trailing `\n` added if not present| |Manual `__func__`|`__func__` added in wrapper macros automatically| |Manual tag addition|Object tag prepended automatically| |No hierarchy|Log contexts may refer to parent log contexts, which may prepend to child logs| |Macros per level (eg, `lwsl_err(...)`)|Macros per object type / level (eg, `lwsl_wsi_err(wsi, ...)`)| In addition to being able to control the emit function and log level for individual log contexts, eg, for a particular wsi, the log functions understand how to prepend object-specific information such as tags and `__func__` automatically. They also do not need a trailing `\n` in the format string. So the new context aware logs remove boilerplate from the logging calls while making the log information more consistent. So comparing this kind of logging the processwide and log context aware ways: ``` [2021/06/25 09:39:34:7050] N: [669282|wsicli|4|GET/h1/libwebsockets.org|default]: _lws_generic_transaction_completed_active_conn: ... ``` |Type|Example code| |---|---| |Process scope apis|`lwsl_notice("%s: %s: mylog %d\n", __func__, lws_wsi_tag(wsi), n);`| |New log context apis|`lwsl_wsi_notice(wsi, "mylog %d", n);`| The log context / object-aware apis do not replace the processwide logging but augment it, and the new apis default to use the original processwide emit function and log mask, so the behaviours are the same. The original processwide log apis themselves are unchanged. At lws_context creation time, you can set the context info `.log_cx` to a user defined log context which is inherited by objects created in that lws_context by default. Vhost creation, wsi creation and ss / sspc creation all allow passing a user log_cx to customize how logs for that object are handled. ## Using the new logging apis This table describes the different ways to issue an ERROR verbosity log, it works the same for info, notice, warn, etc. |Scope|Api example|Functionality| |---|---|---| |Old, Processwide|lwsl_err(...)|Traditional processwide error log| |lws_context|lwsl_cx_err(context, ...)|error log bound to lws_context| |lws_vhost|lwsl_vhost_err(vh, ...)|error log bound to lws_vhost| |lws_wsi|lwsl_wsi_err(wsi, ...)|error log bound to wsi| |lws_ss|lwsl_ss_err(handle, ...)|error log bound to secure stream| Similarly hexdumps can be bound to different log contexts |Scope|Api example|Functionality| |---|---|---| |Old, Processwide|lwsl_hexdump_err(...)|Traditional processwide error hexdump| |lws_context|lwsl_hexdump_cx_err(context, ...)|error hexdump bound to lws_context| |lws_vhost|lwsl_hexdump_vhost_err(vh, ...)|error hexdump bound to lws_vhost| |lws_wsi|lwsl_hexdump_wsi_err(wsi, ...)|error hexdump bound to wsi| |lws_ss|lwsl_hexdump_ss_err(handle, ...)|error hexdump bound to secure stream| ## Creating and using custom log contexts The log context object is public, in `libwebsockets/lws-logs.h`, currently it is like this ``` typedef void (*lws_log_emit_t)(int level, const char *line); typedef void (*lws_log_emit_cx_t)(struct lws_log_cx *cx, int level, const char *line, size_t len); typedef void (*lws_log_prepend_cx_t)(struct lws_log_cx *cx, void *obj, char **p, char *e); typedef void (*lws_log_use_cx_t)(struct lws_log_cx *cx, int _new); typedef struct lws_log_cx { union { lws_log_emit_t emit; /* legacy emit function */ lws_log_emit_cx_t emit_cx; /* LLLF_LOG_CONTEXT_AWARE */ } u; lws_log_use_cx_t refcount_cb; /**< NULL, or a function called after each change to .refcount below, * this enables implementing side-effects like opening and closing * log files when the first and last object binds / unbinds */ lws_log_prepend_cx_t prepend; /**< NULL, or a cb to optionally prepend a string to logs we are a * parent of */ struct lws_log_cx *parent; /**< NULL, or points to log ctx we are a child of */ void *opaque; /**< ignored by lws, used to pass config to emit_cx, eg, filepath */ void *stg; /**< ignored by lws, may be used a storage by refcount_cb / emit_cx */ uint32_t lll_flags; /**< mask of log levels we want to emit in this context */ int32_t refcount; /**< refcount of objects bound to this log context */ } lws_log_cx_t; ``` The emit function is a union because the traditional logs and the old emit functions are also implemented using the new log contexts internally. For new log context-aware code, you would use `.u.emit_cx` and set the flag `LLLF_LOG_CONTEXT_AWARE` on `.lll_flags`. Lws also exports some common emit and refcount functions so you don't have to reinvent the wheel |Dest|emit member|`.lll_flags`|emit|`.refcount_cb`|`.opaque`| |---|---|---|---|---|---| |stderr|`.u.emit`|-|`lwsl_emit_stderr`|NULL|NULL| |file|`.u.emit_cx`|`LLLF_LOG_CONTEXT_AWARE`|`lws_log_emit_cx_file`|`lws_log_use_cx_file`|`(const char *)filepath`| For example, a custom log context that emits to a configurable file can be declared like this (lws exports the needed helpers already) ``` static lws_log_cx_t my_log_cx = { .lll_flags = LLLF_LOG_CONTEXT_AWARE | LLL_ERR | LLL_WARN | LLL_NOTICE | LLL_USER, .refcount_cb = lws_log_use_cx_file, .u.emit_cx = lws_log_emit_cx_file, .opaque = "/tmp/mylogpath.log" /* also settable at runtime */ }; ``` To bind the lws_context to this log context, set `log_cx` in the context creation info struct ``` info.log_cx = &my_log_cx; ``` ### Log context hierarchy Log contexts may also point to a parent log context... the top level log context defines the emit function to be used, but parent log contexts are consulted by calling their prepend function if any, to annotate logs with information from parent levels. ### Log context prepend function Logs contexts may define a "prepend" function callback, that knows how to represent the object in a brief string to be prepended to other logs. For example the wsi-aware log context layer knows how to provide the wsi tag when called. Prepend functions should add `:` after their output, if any, since these will appear before the start of other logs. ### Log context opaque member The `.opaque` member is available for passing in configuration to the emit and refcount_cb members. Lws does not use this itself at all. ### Log context refcounting An expected use for custom log contexts is emitting to a specific file, and then binding one or more objects to that log context. Since it's too expensive to keep opening and closing the output file per log, it means we need to know when we bind to the first object and unbind from the last, so we can keep the file handle open. For this reason the log contexts have a refcount, and an opaque `void *stg` availble for the emit and refounct_cb to use how they see fit, eg, for storing the output log file descriptor. libwebsockets-4.3.5/READMEs/README.lws_cache.md000066400000000000000000000125611476025525100207250ustar00rootroot00000000000000# lws_cache: Flexible single and multilevel caching lws_cache implements a single- or multi-level cache for generic payload items that are **keyed by a unique string**. ![lws_cache overview](../doc-assets/lws_cache-1.png) L1 cache is always stored on heap, but it may be hooked up to additional levels of cache objects with different backing storage. The last level always contains a complete set of cached items, earlier levels may be empty or contain a partial set of objects. User code can define its own subclassed lws_cache objects with custom storage formats and media, while being able to take advantage of a suitably-sized L1 heap cache to minimize the cost of repeated access. ![lws_cache overview](../doc-assets/lws_cache-2.png) You can find examples of how to create, use and destroy single and multilevel caches in `minimal-examples/api-tests/api-test-lws_cache` ## Cache size restriction, LRU and TTL The max heap footprint of its items and max number of items can be capped. LRU tracking is performed so the least recently relevant items are evicted first. It's also possible to limit the maximum size of any single payload. Time To Live (TTL) tracking is also performed automatically, so cached items auto-expire if a non-zero TTL is provided when the object is created. A user callback can be defined to get called when an item is about to be removed from a particular cache level, in case any housekeeping needed. ## Atomicity Items in L1 can be accessed in heap casually and reliably if the following is borne in mind: - Any return to the event loop may perform removal of cache items due to TTL expiry - Any operation that writes new items may evict items from non-last cache levels which have limits to the footprint or item count to make room for it, using LRU ordering. In short process cache results before returning to the event loop or writing or removing items in the cache. ## Cache creation Caches are created using an info struct `struct lws_cache_creation_info` that should be zeroed down. Most members are optional and can be left at zero, a pointer to the lws_context and a short cache name are mandatory. ``` struct lws_cache_ttl_lru * lws_cache_create(const struct lws_cache_creation_info *info); ``` How caches work is defined by an "ops struct" that the cache is bound to at creation time. `lws_cache_ops_heap` ops struct is provided by lws, you can define your own to implement your own specialized cache level. See `./include/libwebsockets/lws-cache-ttl.h` for the definition. ## Cache destruction Created cache levels should be destroyed when you are finished with them. ``` void lws_cache_destroy(struct lws_cache_ttl_lru **cache); ``` For L1, in heap, this frees any allocations. For other levels, eg, with file storage for the items, this would close the file and leave any entries as they are. ## Writethrough ``` int lws_cache_write_through(struct lws_cache_ttl_lru *cache, const char *specific_key, const uint8_t *source, size_t size, lws_usec_t expiry, void **ppay); ``` The combined caches are always accessed via the L1 cache, writing new items is done at L1 and writes through to each cache layer immediately, so new items go into the backing store without delay, but are available from heap for read. If existing keys are rewritten, the previous item of the same key is deleted from all levels of the cache before writing the new one. ## Removal Removal also is performed at all cache levels at once. ``` int lws_cache_item_remove(struct lws_cache_ttl_lru *cache, const char *wildcard_key); ``` internally earlier cache levels can evict cached items just at their level, but this is triggered automatically and not by api. A wildcard key is supported, removing all items matching, eg "myitem*". ## Get by key ``` int lws_cache_item_get(struct lws_cache_ttl_lru *cache, const char *specific_key, const void **pdata, size_t *psize); ``` Apis are provided to get the blob related to a specific key, if it exists at any cache layer. Again this should use L1, it will bring a copy of the item into L1 if one is not already there, so it can be accessed from heap. ## Lookup with wildcards ``` int lws_cache_lookup(struct lws_cache_ttl_lru *cache, const char *wildcard_key, const void **pdata, size_t *psize); ``` lws_cache also supports **lookup** queries that contain wildcards or otherwise match on multiple keys according to cache-specific rules. These queries do not return a single item, instead they return lists of keys that match, in a blob of its own that is also cached in L1. The user can walk the lookup results blob using a provided helper api ``` int lws_cache_results_walk(lws_cache_results_t *walk_ctx); ``` After recovering each result key this way, the user code can use the _get api to access the blob for each indiviudally. The lookup results themselves are cached in L1, any new key that matches the wildcard lookup in any cached results, or any deletion of items with keys matching the cached wildcard lookup invalidate the affected cached lookup results so they will be regenerated next time. In the typical case after a lookup, at least for a while the lookup results blob and all items mentioned in the lookup results will already be in L1 and cheaply accessible. ## Expunging An api is also provided to "expunge" or completely empty all cache levels and corresponding backing stores. ``` int lws_cache_expunge(struct lws_cache_ttl_lru *cache); ``` libwebsockets-4.3.5/READMEs/README.lws_conmon.md000066400000000000000000000026731476025525100211560ustar00rootroot00000000000000## `lws_conmon` apis `LWS_WITH_CONMON` build option enables `lws_conmon` apis for user code... these add some staticistic and information to client connections that can use useful for devices to introspect how the connection to their servers is actually performing. The public apis can be found in `libwebsockets/lws-conmon.h`. A struct is provided that describes - the peer sockaddr the wsi actually connected to, if any - a deep copy of the aggregate DNS results (struct addrinfo list) that the client had access to for the peer - the number of us dns lookup took - the number of us the socket connection took - the number of us the tls link establishment took - the number of us from the transaction request to the first response, if the protocol has a transaction concept Because the user code may want to hold on to the DNS list for longer than the life of the wsi that originated it, the `lws_conmon_wsi_take()` api allows the ownership of the allocated list to be transferred to the user code (as well as copying data out into the user's struct so it no longer has any dependency on wsi lifetime either). The DNS list copy in the struct must be released at some point by calling `lws_conmon_release()`, but that can be at any time afterwards. The lws-minimal-http-client example shows how user code can use the apis, build lws with the `LWS_WITH_CONMON` cmake option and run with `--conmon` to get a dump of the collected information. libwebsockets-4.3.5/READMEs/README.lws_dll.md000066400000000000000000000073571476025525100204440ustar00rootroot00000000000000# lws_dll Doubly-linked list ## Introduction Lws supports two kinds of doubly-linked list, `lws_dll` and `lws_dll2`. Unless memory is at a big premium, or it has to work on lws < v3.2, it's best to simply use `lws_dll2`. ![lws_dll overview](../doc-assets/lws_dll.svg) ## How to use The basics are the same for lws_dll and lws_dll2. The list objects point only to themselves, and you use the `lws_container_of` macro to get a pointer to your struct that contains the list object. Doing it this way - the list object does not have to be the first thing in your struct - your struct can contain multiple list objects and appear on lists belonging to multiple owners simultaenously, ### lws_dll Minimal example ``` struct mystruct { .... lws_dll list; ... }; lws_dll owner; ``` Adding a mystruct to the owner list (...add_tail() works the same way but adds to the other end of the list) ``` struct mystruct *p; ... lws_dll_add_head(&p->list, &owner); ``` Removing the list object from its owner ``` lws_dll2_remove(&p->list, &owner); ``` If you have a `struct lws_dll *d` pointing to `list` in struct mystruct, you can convert it to a `struct mystruct *p` ike this ``` struct mystruct *p = lws_container_of(d, struct lws_dll, list); ``` ### lws_dll2 Minimal example ``` struct mystruct { .... lws_dll2 list; ... }; lws_dll2_owner owner; ``` Adding a mystruct to the owner list (...add_tail() works the same way but adds to the other end of the list) ``` struct mystruct *p; ... lws_dll2_add_head(&p->list, &owner); ``` Removing the list object from its owner (notice compared to lws_dll, it doesn't need to be told the owner) ``` lws_dll2_remove(&p->list); ``` If you have a `struct lws_dll2 *d` pointing to `list` in struct mystruct, you can convert it to a `struct mystruct *p` ike this ``` struct mystruct *p = lws_container_of(d, struct lws_dll2, list); ``` ## Summary Comparing lws_dll and lws_dll2 - both offer a doubly-linked list object, and (since v3.2) track both the head and tail in an "list owner" object - both are initalized by memsetting to 0 - for `lws_dll`, it reuses an `lws_dll` as the "owner", for `lws_dll2`, there's a specific `lws_dll2_owner` structure for that - `lws_dll2_owner` also keeps count of the number of list elements - `lws_dll2` knows which owner's list it is participating on. So it can remove itself and update the owner without the caller needing to know its owner. In the case there are several potential owners list objects may be on, this is very convenient. - `lws_dll` is simpler and has a smaller footprint (two pointers per entry vs three). But you have to know the exact list owner to perform operations on it. ## apis |function|lws_dll|lws_dll2| |---|---|---| |add entry at head|`void lws_dll_add_head(struct lws_dll *d, struct lws_dll *phead)`|`void lws_dll2_add_head(struct lws_dll2 *d, struct lws_dll2_owner *owner)`| |add entry at tail|`void lws_dll_add_tail(struct lws_dll *d, struct lws_dll *phead);`|`void lws_dll2_add_tail(struct lws_dll2 *d, struct lws_dll2_owner *owner)`| |remove entry from its owning list|`void lws_dll_remove_track_tail(struct lws_dll *d, struct lws_dll *phead)`|`void lws_dll2_add_tail(struct lws_dll2 *d, struct lws_dll2_owner *owner)`| |get owner|(not supported)|`struct lws_dll2_owner * lws_dll2_owner(const struct lws_dll2 *d)`| |check if item is detached from any list|`lws_dll_is_detached(struct lws_dll *d, struct lws_dll *phead)|int lws_dll2_is_detached(const struct lws_dll2 *d)`| |iterate through items on list|`int lws_dll_foreach_safe(struct lws_dll *phead, void *user, int (*cb)(struct lws_dll *d, void *user))|int lws_dll2_foreach_safe(struct lws_dll2_owner *owner, void *user, int (*cb)(struct lws_dll2 *d, void *user))`| libwebsockets-4.3.5/READMEs/README.lws_map.md000066400000000000000000000072001476025525100204310ustar00rootroot00000000000000# lws_map generic map abstraction ||| |---|---|---| |cmake|core feature| |Header| ./include/libwebsockets/lws-map.h| |api-test| ./minimal-examples/api-tests/api-test-lws_map/| lws_map provides a robust abstraction for containing a collection of items that map key objects to value objects, where both the key and value objects may differ in size each time and have any type. Its one-level linked-list hashtables are useful up to hundreds or low thousands of items in the map on may platforms. The map itself and the items inside it are opaque. ## Creating and destroying the map The user should prepare a `lws_map_info_t` object, it's legal for it to be all zeros to select defaults, an 8-way hashtable with item allocation from heap, simple bytewise key comparison, and xor / shift key hashing. These are often what you want simplifying construction. The info object allows user override of item allocator, freeing, key comparison and object hashing, allowing custom objects to be keys if desired. Custom allocator / free implementations for using lwsac for item allocation are provided to simplify that case. Just call `lws_map_create()` with the info struct to create the map, later it and all its contents can be destroyed with `lws_map_destroy()`. The info struct can go out of scope immediately after the create call. ``` lws_map_t * lws_map_create(const lws_map_info_t *info); void lws_map_destroy(lws_map_t **pmap); ``` ## Keys in lws_map Items are managed in the map by a key, this may be, eg, a string, but it also can be an arbitrary object itself. If comparing keys takes more than a simple bytewise comparison, the map creation info struct ._compare() operation should be overridden with a user-supplied one that knows how to use the user's custom key objects. Keys are not required to be the same length, so objects with variable size overallocation can be used as keys. Keys and values are copied into allocations inside the map, the original objects they are copied from may go out of scope after item creation assuming there are no pointers to them copied in the objects themselves. ## Adding items to a map The map's info._alloc allocator is used for creating items. By default that just creates into the heap. If you create a new item with the same key as an existing one, the existing one is destroyed before the new one is created. So there is only one item allowed at a given key at a time. To allocate and create a new item containing the key and value, use `lws_map_item_create()` ``` lws_map_item_t * lws_map_item_create(lws_map_t *map, const lws_map_key_t key, size_t keylen, const lws_map_value_t value, size_t valuelen); ``` Eg, ``` if (!lws_map_item_create(map, (lws_map_key_t)&my_key, sizeof(my_key), (lws_map_value_t)"4567", 4)) /* fail */ ``` In the case the key is a string, there is a ..._ks wrapper to simplify usage ``` if (!lws_map_item_create_ks(map, "123", (lws_map_value_t)"4567", 4)) /* fail */ ``` ## Lookups in the map You can retreive a pointer to an item in the map with a give key using ``` lws_map_item_t * lws_map_item_lookup(lws_map_t *map, const lws_map_key_t key, size_t keylen); ``` The item is opaque, but there are accessors |Accessor|Function| |---|---| |`lws_map_item_key(lws_map_item_t *_item)`|get a pointer to the item key| |`lws_map_item_value(lws_map_item_t *_item)`|get a pointer to the item value| |`lws_map_item_key_len(lws_map_item_t *_item)`|get the key length| |`lws_map_item_value_len(lws_map_item_t *_item)`|get the value length| Again there is a ..._ks() helper to simplify C strings as keys ``` item = lws_map_item_lookup_ks(map, "abc"); if (!item) /* fail */ ``` libwebsockets-4.3.5/READMEs/README.lws_metrics.md000066400000000000000000000257361476025525100213400ustar00rootroot00000000000000## `lws_metrics` ### Introduction `lws_metrics` records and aggregates **events** at all lws layers. There are three distinct parts: - the architecture inside lws for collecting and aggregating / decimating the events and maintaining statistics about them, these are lws_metric objects - an external handler for forwarding aggregated metrics. An lws_system ops interface to pass on the aggregated metrics to an external backend. lws presents its own public metrics objects and leaves it to the external code to have a shim to marry the lws metrics up to whatever is needed in the metrics backend - a policy for when to emit each type of aggregated information to the external handler. This can be specified in the generic Secure Streams policy, or a linked-list of lws_metric_policy_t object passed it at context creation in `info.metrics_policies`. The external backend interface code may itself make use of lws connectivity apis including Secure Streams itself, and lws metrics are available on that too. ### `lws_metrics` policy-based reporting Normally metrics implementations are fixed at build-time and cannot change without a coordinated reflash of devices along with a change of backend schema. `lws_metrics` separates out the objects and code necessary to collect and aggregate the data cheaply, and the reporting policy that controls if, or how often, the results are reported to the external handler. ![policy based metrics](/doc-assets/lws_metrics-policy.png) Metrics are created with a namespace name and the policy applies itself to those by listing the names, with wildcards allowed, the policy applies to, eg if specified in the Secure Streams JSON policy ``` ... "metrics": [ { "name": "tensecs", "us_schedule": 10000000, "report": "cpu.*" }, { "name": "30secs", "us_schedule": 30000000, "report": "n.cn.*, n.http.*, n.ss.*, vh.*" } ], ... ``` Metrics that do not have a reporting policy do not report, but continue to aggregate measurements in case they are bound to a policy dynamically later. ### Freeform metrics naming There is no predefined metrics schema, metrics objects, including those created by applications, can independently choose their own name in a namespace like "cpu.srv" or "n.cn.dns", and can set a prefix for all metrics names created in a context (by setting `info.metrics_prefix` at context creation time). This allows multiple processes in a single device to expose copies of the same metrics in an individually addressable way, eg, if the UI process specifies the prefix "ui", then its lws metrics like "cpu.srv" will actually be created as "ui.cpu.srv". Applications can freely define their own `lws_metrics` measurements with their own names in the namespace too, without central registration, and refer to those names in the reporting policy same as any other metric names. If the metrics backend requires a fixed schema, the mapping between the `lws_metrics` names and the backend schema indexes will be done in the `lws_system` external reporting api implementation alone. Metrics objects contain a `void * backend_opaque` that is ignored by lws and can be set and read by the external reporting handler implementation to facilitate that. ### Histogram metrics tagging Histogram metrics track differently-qualified results in the same metric, for example the metric `n.cn.failures` maintains separate result counts for all variations and kinds of failure. ``` [2021/03/01 06:34:05:6570] U: my_metric_report: ssproxy.n.cn.failures{ss="badcert_selfsigned",hostname="invalidca.badcert.warmcat.com",peer="46.105.127.147",tls="invalidca"} 2 [2021/03/01 06:34:05:6573] U: my_metric_report: ssproxy.n.cn.failures{hostname="invalidca.badcert.warmcat.com",peer="46.105.127.147",tls="invalidca"} 1 [2021/03/01 06:34:05:6576] U: my_metric_report: ssproxy.n.cn.failures{ss="badcert_expired",hostname="warmcat.com",peer="46.105.127.147",tls="expired"} 2 [2021/03/01 06:34:05:6578] U: my_metric_report: ssproxy.n.cn.failures{hostname="warmcat.com",peer="46.105.127.147",tls="expired"} 1 [2021/03/01 06:34:05:6580] U: my_metric_report: ssproxy.n.cn.failures{ss="badcert_hostname",hostname="hostname.badcert.warmcat.com",peer="46.105.127.147",tls="hostname"} 2 [2021/03/01 06:34:05:6583] U: my_metric_report: ssproxy.n.cn.failures{hostname="hostname.badcert.warmcat.com",peer="46.105.127.147",tls="hostname"} 1 [2021/03/01 06:34:05:6585] U: my_metric_report: ssproxy.n.cn.failures{dns="nores -2"} 8 ``` The user handler for metrics is expected to iterate these, in the provided examples (eg, minimal-secure-streams-testsfail) ``` #if defined(LWS_WITH_SYS_METRICS) static int my_metric_report(lws_metric_pub_t *mp) { lws_metric_bucket_t *sub = mp->u.hist.head; char buf[192]; do { if (lws_metrics_format(mp, &sub, buf, sizeof(buf))) lwsl_user("%s: %s\n", __func__, buf); } while ((mp->flags & LWSMTFL_REPORT_HIST) && sub); /* 0 = leave metric to accumulate, 1 = reset the metric */ return 1; } static const lws_system_ops_t system_ops = { .metric_report = my_metric_report, }; #endif ``` ### `lws_metrics` decimation Event information can easily be produced faster than it can be transmitted, or is useful to record if everything is working. In the case that things are not working, then eventually the number of events that are unable to be forwarded to the backend would overwhelm the local storage. For that reason, the metrics objects are designed to absorb and summarize a potentially large number of events cheaply by aggregating them, so even extreme situations can be tracked meaningfully inbetween dumps to the backend. There are two approaches: - "aggregation": decimate keeping a uint64 mean + sum, along with a max and min - "histogram": keep a linked-list of different named buckets, with a 64-bit counter for the number of times an event in each bucket was observed A single metric aggregation object has separate "go / no-go" counters, since most operations can fail, and failing operations act differently. `lws_metrics` 'aggregation' supports decimation by - a mean of a 64-bit event metric, separate for go and no-go events - counters of go and no-go events - a min and max of the metric - keeping track of when the sample period started ![metrics decimation](/doc-assets/lws_metrics-decimation.png) In addition, the policy defines a percentage variance from the mean that optionally qualifies events to be reported individually. The `lws_metrics` 'histogram' allows monitoring of different outcomes to produce counts of each outcome in the "bucket". ### `lws_metrics` flags When the metrics object is created, flags are used to control how it will be used and consumed. For example to create a histogram metrics object rather than the default aggregation type, you would give the flag `LWSMTFL_REPORT_HIST` at creation time. |Flag|Meaning| |---|---| |`LWSMTFL_REPORT_OUTLIERS`|track outliers and report them internally| |`LWSMTFL_REPORT_OUTLIERS_OOB`|report each outlier externally as they happen| |`LWSMTFL_REPORT_INACTIVITY_AT_PERIODIC`|explicitly externally report no activity at periodic cb, by default no events in the period is just not reported| |`LWSMTFL_REPORT_MEAN`|the mean is interesting for this metric| |`LWSMTFL_REPORT_ONLY_GO`|no-go pieces invalid and should be ignored, used for simple counters| |`LWSMTFL_REPORT_DUTY_WALLCLOCK_US`|the aggregated sum or mean can be compared to wallclock time| |`LWSMTFL_REPORT_HIST`|object is a histogram (else aggregator)| ### Built-in lws-layer metrics lws creates and maintains various well-known metrics when you enable build with cmake `-DLWS_WITH_SYS_METRICS=1`: #### Aggregation metrics |metric name|scope|type|meaning| ---|---|---|---| `cpu.svc`|context|monotonic over time|time spent servicing, outside of event loop wait| `n.cn.dns`|context|go/no-go mean|duration of blocking libc DNS lookup| `n.cn.adns`|context|go/no-go mean|duration of SYS_ASYNC_DNS lws DNS lookup| `n.cn.tcp`|context|go/no-go mean|duration of tcp connection until accept| `n.cn.tls`|context|go/no-go mean|duration of tls connection until accept| `n.http.txn`|context|go (2xx)/no-go mean|duration of lws http transaction| `n.ss.conn`|context|go/no-go mean|duration of Secure Stream transaction| `n.ss.cliprox.conn`|context|go/no-go mean|time taken for client -> proxy connection| `vh.[vh-name].rx`|vhost|go/no-go sum|received data on the vhost| `vh.[vh-name].tx`|vhost|go/no-go sum|transmitted data on the vhost| #### Histogram metrics |metric name|scope|type|meaning| |---|---|---|---| `n.cn.failures`|context|histogram|Histogram of connection attempt failure reasons| #### Connection failure histogram buckets |Bucket name|Meaning| |---|---| `tls/invalidca`|Peer certificate CA signature missing or not trusted| `tls/hostname`|Peer certificate CN or SAN doesn't match the endpoint we asked for| `tls/notyetvalid`|Peer certificate start date is in the future (time wrong?)| `tls/expired`|Peer certificate is expiry date is in the past| `dns/badsrv`|No DNS result because couldn't talk to the server| `dns/nxdomain`|No DNS result because server says no result| The `lws-minimal-secure-streams` example is able to report the aggregated metrics at the end of execution, eg ``` [2021/01/13 11:47:19:9145] U: my_metric_report: cpu.svc: 137.045ms / 884.563ms (15%) [2021/01/13 11:47:19:9145] U: my_metric_report: n.cn.dns: Go: 4, mean: 3.792ms, min: 2.470ms, max: 5.426ms [2021/01/13 11:47:19:9145] U: my_metric_report: n.cn.tcp: Go: 4, mean: 40.633ms, min: 17.107ms, max: 94.560ms [2021/01/13 11:47:19:9145] U: my_metric_report: n.cn.tls: Go: 3, mean: 91.232ms, min: 30.322ms, max: 204.635ms [2021/01/13 11:47:19:9145] U: my_metric_report: n.http.txn: Go: 4, mean: 63.089ms, min: 20.184ms, max: 125.474ms [2021/01/13 11:47:19:9145] U: my_metric_report: n.ss.conn: Go: 4, mean: 161.740ms, min: 42.937ms, max: 429.510ms [2021/01/13 11:47:19:9145] U: my_metric_report: vh._ss_default.rx: Go: (1) 102, NoGo: (1) 0 [2021/01/13 11:47:19:9145] U: my_metric_report: vh.le_via_dst.rx: Go: (22) 28.165Ki [2021/01/13 11:47:19:9145] U: my_metric_report: vh.le_via_dst.tx: Go: (1) 267 [2021/01/13 11:47:19:9145] U: my_metric_report: vh.api_amazon_com.rx: Go: (1) 1.611Ki, NoGo: (1) 0 [2021/01/13 11:47:19:9145] U: my_metric_report: vh.api_amazon_com.tx: Go: (3) 1.505Ki ``` lws-minimal-secure-stream-testsfail which tests various kinds of connection failure reports histogram results like this ``` [2021/01/15 13:10:16:0933] U: my_metric_report: n.cn.failures: tot: 36, [ tls/invalidca: 5, tls/expired: 5, tls/hostname: 5, dns/nxdomain: 21 ] ``` ## Support for openmetrics Openmetrics https://tools.ietf.org/html/draft-richih-opsawg-openmetrics-00 defines a textual metrics export format comaptible with Prometheus. Lws provides a protocol plugin in `./plugins/protocol_lws_openmetrics_export` that enables direct export for prometheus scraping, and also protocols to proxy openmetrics export for unreachable servers. libwebsockets-4.3.5/READMEs/README.lws_plugins.md000066400000000000000000000064501476025525100213430ustar00rootroot00000000000000# lws_plugins Lws now offers apis to manage your own user plugins with `LWS_WITH_PLUGINS_API`. Lws uses these apis internally for protocol plugins and event loop plugins if they're selected for build. But they are also exported for user code to use them how you like. ## Creating your plugin export ### Specifying your plugin export type Lws plugins have a single exported struct with a specified header and a user defined remainder. The public `lws_plugin_header_t` describes the common plugin export header, it's defined via libwebsockets.h as ``` typedef struct lws_plugin_header { const char *name; const char *_class; unsigned int api_magic; /* set to LWS_PLUGIN_API_MAGIC at plugin build time */ /* plugin-class specific superclass data follows */ } lws_plugin_header_t; ``` The exported symbol name itself must match the plugin filename, for example if the symbol name is `my_plugin`, then the filename of the plugin might be `libmyapp-my_plugin.so` or similar... the matching part is after the first `-` or `_`, up to the first `.`. The exact details differ by platform but these rules cover the supported platforms. If lws has the filename of the plugin, it can then deduce the symbol export it should look for in the plugin. `name` is a freeform human-readable description for the plugin. `_class` is shared by your plugins and used to select them from other kinds of plugin that may be in the same dir. So choose a unique name like `"myapp xxx plugin"` or whatever shared by all plugins of that class. `api_magic` is set to `LWS_PLUGIN_API_MAGIC` to detect if the plugin is incompatible with the lws plugin apis version. So for example your plugin type wrapping the header might look like ``` typedef struct myapp_plugin { lws_plugin_header_t hdr; /* must be first */ /* optional extra data like function pointers from your plugin */ mytype_t mymember; /* ... */ } myapp_plugin_t; ``` Typically, you will put function pointers to whatever capability your plugin class offers as the additional members. ## Building your own plugins Plugins are built standalone, cmake is recommended but you can do what you want. The only requirement is the single visible export of the plugin name, eg ``` const myapp_plugin_t my_plugin = { .hdr = { "my_plugin", "myapp xxx plugin", LWS_PLUGIN_API_MAGIC }, .mymember = my_plugin_init, /*...*/ }; ``` ## Bringing in plugins at runtime Lws provides an api to import plugins into the process space and another to remove and destroy plugins. You can take two approaches depending on what you're doing, either bring in and later destroy a whole class of plugins at once, and walk them via a linked-list, or bring in and later destroy a single specific plugin from the class by filtering on its specific export name. See `include/libwebsockets/lws-protocols-plugins.h` for documentation. ``` LWS_VISIBLE LWS_EXTERN int lws_plugins_init(struct lws_plugin **pplugin, const char * const *d, const char *_class, const char *filter, each_plugin_cb_t each, void *each_user); LWS_VISIBLE LWS_EXTERN int lws_plugins_destroy(struct lws_plugin **pplugin, each_plugin_cb_t each, void *each_user); ``` `struct lws_plugin` is a public struct that contains the linked-list of loaded plugins and a pointer to its exported header object, so you can walk this after loading. libwebsockets-4.3.5/READMEs/README.lws_retry.md000066400000000000000000000075111476025525100210260ustar00rootroot00000000000000# `lws_retry_bo_t` client connection management This struct sets the policy for delays between retries, and for how long a connection may be 'idle' before it first tries to ping / pong on it to confirm it's up, or drops the connection if still idle. ## Retry rate limiting You can define a table of ms-resolution delays indexed by which connection attempt number is ongoing, this is pointed to by `.retry_ms_table` with `.retry_ms_table_count` containing the count of table entries. `.conceal_count` is the number of retries that should be allowed before informing the parent that the connection has failed. If it's greater than the number of entries in the table, the last entry is reused for the additional attempts. `.jitter_percent` controls how much additional random delay is added to the actual interval to be used... this stops a lot of devices all synchronizing when they try to connect after a single trigger event and DDoS-ing the server. The struct and apis are provided for user implementations, lws does not offer reconnection itself. ## Connection validity management Lws has a sophisticated idea of connection validity and the need to reconfirm that a connection is still operable if proof of validity has not been seen for some time. It concerns itself only with network connections rather than streams, for example, it only checks h2 network connections rather than the individual streams inside (which is consistent with h2 PING frames only working at the network stream level itself). Connections may fail in a variety of ways, these include that no traffic at all is passing, or, eg, incoming traffic may be received but no outbound traffic is making it to the network, and vice versa. In the case that tx is not failing at any point but just isn't getting sent, endpoints can potentially kid themselves that since "they are sending" and they are seeing RX, the combination means the connection is valid. This can potentially continue for a long time if the peer is not performing keepalives. "Connection validity" is proven when one side sends something and later receives a response that can only have been generated by the peer receiving what was just sent. This can happen for some kinds of user transactions on any stream using the connection, or by sending PING / PONG protocol packets where the PONG is only returned for a received PING. To ensure that the generated traffic is only sent when necessary, user code can report for any stream that it has observed a transaction amounting to a proof of connection validity using an api. This resets the timer for the associated network connection before the validity is considered expired. `.secs_since_valid_ping` in the retry struct sets the number of seconds since the last validity after which lws will issue a protocol-specific PING of some kind on the connection. `.secs_since_valid_hangup` specifies how long lws will allow the connection to go without a confirmation of validity before simply hanging up on it. ## Defaults The context defaults to having a 5m valid ping interval and 5m10s hangup interval, ie, it'll send a ping at 5m idle if the protocol supports it, and if no response validating the connection arrives in another 10s, hang up the connection. User code can set this in the context creation info and can individually set the retry policy per vhost for server connections. Client connections can set it per connection in the client creation info `.retry_and_idle_policy`. ## Checking for h2 and ws Check using paired minimal examples with the -v flag on one or both sides to get a small validity check period set of 3s / 10s Also give, eg, -d1039 to see info level debug logging ### h2 ``` $ lws-minimal-http-server-h2-long-poll -v $ lws-minimal-http-client -l -v ``` ### ws ``` $ lws-minimal-ws-server-h2 -s -v $ lws-minimal-ws-client-ping -n --server 127.0.0.1 --port 7681 -v ``` libwebsockets-4.3.5/READMEs/README.lws_sequencer.md000066400000000000000000000144361476025525100216570ustar00rootroot00000000000000# `struct lws_sequencer` introduction Often a single network action like a client GET is just part of a larger series of actions, perhaps involving different connections. Since lws operates inside an event loop, if the outer sequencing doesn't, it can be awkward to synchronize these steps with what's happening on the network with a particular connection on the event loop thread. ![lws_sequencer](/doc-assets/lws_sequencer.svg) `struct lws_sequencer` provides a generic way to stage multi-step operations from inside the event loop. Because it participates in the event loop similar to a wsi, it always operates from the service thread context and can access structures that share the service thread without locking. It can also provide its own higher-level timeout handling. Naturally you can have many of them running in the same event loop operating independently. Sequencers themselves bind to a pt (per-thread) service thread, by default there's only one of these and it's the same as saying they bind to an `lws_context`. The sequencer callback may create wsi which in turn are bound to a vhost, but the sequencer itself is above all that. ## Sequencer timeouts The sequencer additionally maintains its own second-resolution timeout checked by lws for the step being sequenced... this is independent of any lws wsi timeouts which tend to be set and reset for very short-term timeout protection inside one transaction. The sequencer timeout operates separately and above any wsi timeout, and is typically only reset by the sequencer callback when it receives an event indicating a step completed or failed, or it sets up the next sequence step. If the sequencer timeout expires, then the sequencer receives a queued `LWSSEQ_TIMED_OUT` message informing it, and it can take corrective action or schedule a retry of the step. This message is queued and sent normally under the service thread context and in order of receipt. Unlike lws timeouts which force the wsi to close, the sequencer timeout only sends the message. This allows the timeout to be used to, eg, wait out a retry cooloff period and then start the retry when the `LWSSEQ_TIMED_OUT` is received, according to the state of the sequencer. ## Creating an `struct lws_sequencer` ``` typedef struct lws_seq_info { struct lws_context *context; /* lws_context for seq */ int tsi; /* thread service idx */ size_t user_size; /* size of user alloc */ void **puser; /* place ptr to user */ lws_seq_event_cb cb; /* seq callback */ const char *name; /* seq name */ const lws_retry_bo_t *retry; /* retry policy */ } lws_seq_info_t; ``` ``` struct lws_sequencer * lws_sequencer_create(lws_seq_info_t *info); ``` When created, in lws the sequencer objects are bound to a 'per-thread', which is by default the same as to say bound to the `lws_context`. You can tag them with an opaque user data pointer, and they are also bound to a user-specified callback which handles sequencer events ``` typedef int (*lws_seq_event_cb)(struct lws_sequencer *seq, void *user_data, lws_seq_events_t event, void *data); ``` `struct lws_sequencer` objects are private to lws and opaque to the user. A small set of apis lets you perform operations on the pointer returned by the create api. ## Queueing events on a sequencer Each sequencer object can be passed "events", which are held on a per-sequencer queue and handled strictly in the order they arrived on subsequent event loops. `LWSSEQ_CREATED` and `LWSSEQ_DESTROYED` events are produced by lws reflecting the sequencer's lifecycle, but otherwise the event indexes have a user-defined meaning and are queued on the sequencer by user code for eventual consumption by user code in the sequencer callback. Pending events are removed from the sequencer queues and sent to the sequencer callback from inside the event loop at a rate of one per event loop wait. ## Destroying sequencers `struct lws_sequencer` objects are cleaned up during context destruction if they are still around. Normally the sequencer callback receives a queued message that informs it that it's either failed at the current step, or succeeded and that was the last step, and requests that it should be destroyed by returning `LWSSEQ_RET_DESTROY` from the sequencer callback. ## Lifecycle considerations Sequencers may spawn additional assets like client wsi as part of the sequenced actions... the lifecycle of the sequencer and the assets overlap but do not necessarily depend on each other... that is a wsi created by the sequencer may outlive the sequencer. It's important therefore to detach assets from the sequencer and the sequencer from the assets when each step is over and the asset is "out of scope" for the sequencer. It doesn't necessarily mean closing the assets, just making sure pointers are invalidated. For example, if a client wsi held a pointer to the sequencer as its `.user_data`, when the wsi is out of scope for the sequencer it can set it to NULL, eg, `lws_set_wsi_user(wsi, NULL);`. Under some conditions wsi may want to hang around a bit to see if there is a subsequent client wsi transaction they can be reused on. They will clean themselves up when they time out. ## Watching wsi lifecycle from a sequencer When a sequencer is creating a wsi as part of its sequence, it will be very interested in lifecycle events. At client wsi creation time, the sequencer callback can set info->seq to itself in order to receive lifecycle messages about its wsi. |message|meaning| |---|---| |`LWSSEQ_WSI_CONNECTED`|The wsi has become connected| |`LWSSEQ_WSI_CONN_FAIL`|The wsi has failed to connect| |`LWSSEQ_WSI_CONN_CLOSE`|The wsi had been connected, but has now closed| By receiving these, the sequencer can understand when it should attempt reconnections or that it cannot progress the sequence. When dealing with wsi that were created by the sequencer, they may close at any time, eg, be closed by the remote peer or an intermediary. The `LWSSEQ_WSI_CONN_CLOSE` message may have been queued but since they are strictly handled in the order they arrived, before it was handled an earlier message may want to cause some api to be called on the now-free()-d wsi. To detect this situation safely, there is a sequencer api `lws_sequencer_check_wsi()` which peeks the message buffer and returns nonzero if it later contains an `LWSSEQ_WSI_CONN_CLOSE` already. libwebsockets-4.3.5/READMEs/README.lws_struct.md000066400000000000000000000030221476025525100211760ustar00rootroot00000000000000# lws_struct ## Overview lws_struct provides a lightweight method for serializing and deserializing C structs to and from JSON, and to and from sqlite3. ![lws_struct overview](../doc-assets/lws_struct-overview.svg) - you provide a metadata array describing struct members one-time, then call generic apis to serialize and deserialize - supports flat structs, single child struct pointers, and unbounded arrays / linked-lists of child objects automatically using [lws_dll2 linked-lists](./README.lws_dll.md) - supports boolean and C types char, int, long, long long in explicitly signed and unsigned forms - supports both char * type string members where the unbounded content is separate and pointed to, and fixed length char array[] type members where the content is part of the struct - huge linear strings are supported by storing to a temp lwsac of chained chunks, which is written into a single linear chunk in the main lwsac once the total string length is known - deserialization allocates into an [lwsac](../lib/misc/lwsac/README.md), so everything is inside as few heap allocations as possible while still able to expand to handle arbitrary array or strins sizes - when deserialized structs are finished with, a single call to free the lwsac frees the whole thing without having to walk it - stateful serializaton and deserialization allows as-you-get packets incremental parsing and production of chunks of as-you-can-send incremental serialization output cleanly ## Examples libwebsockets-4.3.5/READMEs/README.lws_sul.md000066400000000000000000000114011476025525100204550ustar00rootroot00000000000000# `lws_sul` scheduler api Since v3.2 lws no longer requires periodic checking for timeouts and other events. A new system was refactored in where future events are scheduled on to a single, unified, sorted linked-list in time order, with everything at us resolution. This makes it very cheap to know when the next scheduled event is coming and restrict the poll wait to match, or for event libraries set a timer to wake at the earliest event when returning to the event loop. Everything that was checked periodically was converted to use `lws_sul` and schedule its own later event. The end result is when lws is idle, it will stay asleep in the poll wait until a network event or the next scheduled `lws_sul` event happens, which is optimal for power. # Side effect for older code If your older code uses `lws_service_fd()`, it used to be necessary to call this with a NULL pollfd periodically to indicate you wanted to let the background checks happen. `lws_sul` eliminates the whole concept of periodic checking and NULL is no longer a valid pollfd value for this and related apis. # Using `lws_sul` in user code See `minimal-http-client-multi` for an example of using the `lws_sul` scheduler from your own code; it uses it to spread out connection attempts so they are staggered in time. You must create an `lws_sorted_usec_list_t` object somewhere, eg, in you own existing object. ```c static lws_sorted_usec_list_t sul_stagger; ``` Create your own callback for the event... the argument points to the sul object used when the callback was scheduled. You can use pointer arithmetic to translate that to your own struct (when the `lws_sorted_usec_list_t` was a member of the some struct) by using `lws_container_of(sul, container_struct_type, field_name)`. ```c typedef struct my_connection_data { ... lws_sorted_usec_list_t sul_stagger; ... } my_connection_data_t; static void stagger_cb(lws_sorted_usec_list_t *sul) { my_connection_data_t* my_data = lws_container_of(sul, my_connection_data_t, sul_stagger); ... } ``` **Important note**: make sure, that `lws_sorted_usec_list_t` data initiallized by zeros (`memset(&sul_stagger, 0, sizeof(lws_sorted_usec_list_t)`). This struct contains pointers, so them must initially pointing to `NULL`! When you want to schedule the callback, use `lws_sul_schedule()`... this will call it 10ms in the future ```c lws_sul_schedule(context, 0, &sul_stagger, stagger_cb, 10 * LWS_US_PER_MS); ``` In the case you destroy your object and need to cancel the scheduled callback, use ```c lws_sul_schedule(context, 0, &sul_stagger, NULL, LWS_SET_TIMER_USEC_CANCEL); ``` # lws_sul2 and system suspend In v4.1, alongside the existing `lws_sul` apis there is a refactor and additional functionality aimed at negotiating system suspend, while remaining completely backwards-compatible with v3.2+ lws_sul apis. Devicewide suspend is basically the withdrawal of CPU availability for an unbounded amount of time, so what may have been scheduled by the user code may miss its time slot because the cpu was down and nothing is getting serviced. Whether that is actively desirable, OK, a big disaster, or a failure that will be corrected at other layers at the cost of, eg, some additional latency, depends on the required device behaviours and the function of the user code that was scheduled, and its meaning to the system. Before v4.1, lws just offers the same scheduling service for everything both internal and arranged by user code, and has no way to know what is critical for the device to operate as intended, and so must force wake from suspend, or if for that scheduled event 'failure [to get the event] is an option'. For example locally-initiated periodic keepalive pings not happening may allow persistently dead (ie, no longer passing data) connections to remain unrenewed, but eventually when suspend ends for another reason, the locally-initiated PING probes will resume and it will be discovered and if the connectivity allows, corrected. If the device's function can handle the latency of there being no connectivity in suspend under those conditions until it wakes for another reason, it's OK for these kind of timeouts to be suppressed during suspend and basically take the power saving instead. If for a particular device it's intolerable to ever have a silently dead connection for more than a very short time compared to suspend durations, then these kind of timeouts must have the priority to wake the whole device from suspend so they continue to operate unimpeded. That is just one example, lws offers generic scheduler services the user code can exploit for any purpose, including mission-critical ones. The changes give the user code a way to tell lws if a particular scheduled event is important enough to the system operation to wake the system from devicewide suspend. libwebsockets-4.3.5/READMEs/README.lws_system.md000066400000000000000000000173611476025525100212110ustar00rootroot00000000000000# `lws_system` See `include/libwebsockets/lws-system.h` for function and object prototypes. ## System integration api `lws_system` allows you to set a `system_ops` struct at context creation time, which can write up some function callbacks for system integration. The goal is the user code calls these by getting the ops struct pointer from the context using `lws_system_get_ops(context)` and so does not spread system dependencies around the user code, making it directly usable on completely different platforms. ``` typedef struct lws_system_ops { int (*reboot)(void); int (*set_clock)(lws_usec_t us); int (*attach)(struct lws_context *context, int tsi, lws_attach_cb_t cb, lws_system_states_t state, void *opaque, struct lws_attach_item **get); } lws_system_ops_t; ``` |Item|Meaning| |---|---| |`(*reboot)()`|Reboot the system| |`(*set_clock)()`|Set the system clock| |`(*attach)()`|Request an event loop callback from another thread context| ### `reboot` Reboots the device ### `set_clock` Set the system clock to us-resolution Unix time in seconds ### `attach` Request a callback from the event loop from a foreign thread. This is used, for example, for foreign threads to set up their event loop activity in their callback, and eg, exit once it is done, with their event loop activity able to continue wholly from the lws event loop thread and stack context. ## Foreign thread `attach` architecture When lws is started, it should define an `lws_system_ops_t` at context creation time which defines its `.attach` handler. In the `.attach` handler implementation, it should perform platform-specific locking around a call to `__lws_system_attach()`, a public lws api that actually queues the callback request and does the main work. The platform-specific wrapper is just there to do the locking so multiple calls from different threads to the `.attach()` operation can't conflict. User code can indicate it wants a callback from the lws event loop like this: ``` lws_system_get_ops(context)->attach(context, tsi, cb, state, opaque, NULL) ``` `context` is a pointer to the lws_context, `tsi` is normally 0, `cb` is the user callback in the form ``` void (*lws_attach_cb_t)(struct lws_context *context, int tsi, void *opaque); ``` `state` is the `lws_system` state we should have reached before performing the callback (usually, `LWS_SYSTATE_OPERATIONAL`), and `opaque` is a user pointer that will be passed into the callback. `cb` will normally want to create scheduled events and set up lws network-related activity from the event loop thread and stack context. Once the event loop callback has been booked by calling this api, the thread and its stack context that booked it may be freed. It will be called back and can continue operations from the lws event loop thread and stack context. For that reason, if `opaque` is needed it will usually point to something on the heap, since the stack context active at the time the callback was booked may be long dead by the time of the callback. See ./lib/system/README.md for more details. ## `lws_system` blobs "Blobs" are arbitrary binary objects that have a total length. Lws lets you set them in two ways - "directly", by pointing to them, which has no heap implication - "heap", by adding one or more arbitrary chunk to a chained heap object In the "heap" case, it can be incrementally defined and the blob doesn't all have to be declared at once. For read, the same api allows you to read all or part of the blob into a user buffer. The following kinds of blob are defined |Item|Meaning| |---|---| |`LWS_SYSBLOB_TYPE_AUTH`|Auth-related blob 1, typically a registration token| |`LWS_SYSBLOB_TYPE_AUTH + 1`|Auth-related blob 2, typically an auth token| |`LWS_SYSBLOB_TYPE_CLIENT_CERT_DER`|Client cert public part| |`LWS_SYSBLOB_TYPE_CLIENT_KEY_DER`|Client cert key part| |`LWS_SYSBLOB_TYPE_DEVICE_SERIAL`|Arbitrary device serial number| |`LWS_SYSBLOB_TYPE_DEVICE_FW_VERSION`|Arbitrary firmware version| |`LWS_SYSBLOB_TYPE_DEVICE_TYPE`|Arbitrary Device Type identifier| |`LWS_SYSBLOB_TYPE_NTP_SERVER`|String with the ntp server address (defaults to pool.ntp.org)| ### Blob handle api Returns an object representing the blob for a particular type (listed above) ``` lws_system_blob_t * lws_system_get_blob(struct lws_context *context, lws_system_blob_item_t type, int idx); ``` ### Blob Setting apis Sets the blob to point length `len` at `ptr`. No heap allocation is used. ``` void lws_system_blob_direct_set(lws_system_blob_t *b, const uint8_t *ptr, size_t len); ``` Allocates and copied `len` bytes from `buf` into heap and chains it on the end of any existing. ``` int lws_system_blob_heap_append(lws_system_blob_t *b, const uint8_t *buf, size_t len) ``` Remove any content from the blob, freeing it if it was on the heap ``` void lws_system_blob_heap_empty(lws_system_blob_t *b) ``` ### Blob getting apis Get the total size of the blob (ie, if on the heap, the aggreate size of all the chunks that were appeneded) ``` size_t lws_system_blob_get_size(lws_system_blob_t *b) ``` Copy part or all of the blob starting at offset ofs into a user buffer at buf. `*len` should be the length of the user buffer on entry, on exit it's set to the used extent of `buf`. This works the same whether the bob is a direct pointer or on the heap. ``` int lws_system_blob_get(lws_system_blob_t *b, uint8_t *buf, size_t *len, size_t ofs) ``` If you know that the blob was handled as a single direct pointer, or a single allocation, you can get a pointer to it without copying using this. ``` int lws_system_blob_get_single_ptr(lws_system_blob_t *b, const uint8_t **ptr) ``` ### Blob destroy api Deallocates any heap allocation for the blob ``` void lws_system_blob_destroy(lws_system_blob_t *b) ``` ## System state and notifiers Lws implements a state in the context that reflects the readiness of the system for various steps leading up to normal operation. By default it acts in a backwards-compatible way and directly reaches the OPERATIONAL state just after the context is created. However other pieces of lws, and user, code may define notification handlers that get called back when the state changes incrementally, and may veto or delay the changes until work necessary for the new state has completed asynchronously. The generic states defined are: |State|Meaning| |---|---| |`LWS_SYSTATE_CONTEXT_CREATED`|The context was just created.| |`LWS_SYSTATE_INITIALIZED`|The vhost protocols have been initialized| |`LWS_SYSTATE_IFACE_COLDPLUG`|Existing network interfaces have been iterated| |`LWS_SYSTATE_DHCP`|Network identity is available| |`LWS_SYSTATE_TIME_VALID`|The system knows the time| |`LWS_SYSTATE_POLICY_VALID`|If the system needs information about how to act from the net, it has it| |`LWS_SYSTATE_REGISTERED`|The device has a registered identity| |`LWS_SYSTATE_AUTH1`|The device identity has produced a time-limited access token| |`LWS_SYSTATE_AUTH2`|Optional second access token for different services| |`LWS_SYSTATE_OPERATIONAL`|The system is ready for user code to work normally| |`LWS_SYSTATE_POLICY_INVALID`|All connections are being dropped because policy information is changing. It will transition back to `LWS_SYSTATE_INITIALIZED` and onward to `OPERATIONAL` again afterwards with the new policy| |`LWS_SYSTATE_CONTEXT_DESTROYING`|Context is going down and smd with it| ### Inserting a notifier You should create an object `lws_system_notify_link_t` in non-const memory and zero it down. Set the `notify_cb` member and the `name` member and then register it using either `lws_system_reg_notifier()` or the `.register_notifier_list` member of the context creation info struct to make sure it will exist early enough to see all events. The context creation info method takes a list of pointers to notify_link structs ending with a NULL entry. libwebsockets-4.3.5/READMEs/README.lwsws.md000066400000000000000000000610711476025525100201540ustar00rootroot00000000000000Notes about lwsws ================= @section lwsws Libwebsockets Web Server lwsws is an implementation of a very lightweight, ws-capable generic web server, which uses libwebsockets to implement everything underneath. If you are basically implementing a standalone server with lws, you can avoid reinventing the wheel and use a debugged server including lws. @section lwswsb Build Just enable -DLWS_WITH_LWSWS=1 at cmake-time. It enables libuv and plugin support automatically. NOTICE on Ubuntu, the default libuv package is called "libuv-0.10". This is ancient. You should replace this with libuv1 and libuv1-dev before proceeding. @section lwswsc Lwsws Configuration lwsws uses JSON config files, they're pure JSON except: - '#' may be used to turn the rest of the line into a comment. - There's also a single substitution, if a string contains "_lws_ddir_", then that is replaced with the LWS install data directory path, eg, "/usr/share" or whatever was set when LWS was built + installed. That lets you refer to installed paths without having to change the config if your install path was different. There is a single file intended for global settings /etc/lwsws/conf ``` # these are the server global settings # stuff related to vhosts should go in one # file per vhost in ../conf.d/ { "global": { "username": "apache", "groupname": "apache", "count-threads": "1", "server-string": "myserver v1", # returned in http headers "ws-pingpong-secs": "200", # confirm idle established ws connections this often "init-ssl": "yes" } } ``` and a config directory intended to take one file per vhost /etc/lwsws/conf.d/warmcat.com ``` { "vhosts": [{ "name": "warmcat.com", "port": "443", "interface": "eth0", # optional "host-ssl-key": "/etc/pki/tls/private/warmcat.com.key", # if given enable ssl "host-ssl-cert": "/etc/pki/tls/certs/warmcat.com.crt", "host-ssl-ca": "/etc/pki/tls/certs/warmcat.com.cer", "mounts": [{ # autoserve "mountpoint": "/", "origin": "file:///var/www/warmcat.com", "default": "index.html" }] }] } ``` To get started quickly, an example config reproducing the old test server on port 7681, non-SSL is provided. To set it up ``` # mkdir -p /etc/lwsws/conf.d /var/log/lwsws # cp ./lwsws/etc-lwsws-conf-EXAMPLE /etc/lwsws/conf # cp ./lwsws/etc-lwsws-conf.d-localhost-EXAMPLE /etc/lwsws/conf.d/test-server # sudo lwsws ``` @section lwswsacme Using Letsencrypt or other ACME providers Lws supports automatic provisioning and renewal of TLS certificates. See ./READMEs/README.plugin-acme.md for examples of how to set it up on an lwsws vhost. @section lwsogo Other Global Options - `reject-service-keywords` allows you to return an HTTP error code and message of your choice if a keyword is found in the user agent ``` "reject-service-keywords": [{ "scumbot": "404 Not Found" }] ``` - `timeout-secs` lets you set the global timeout for various network-related operations in lws, in seconds. It defaults to 5. @section lwswsv Lwsws Vhosts One server can run many vhosts, where SSL is in use SNI is used to match the connection to a vhost and its vhost-specific SSL keys during SSL negotiation. Listing multiple vhosts looks something like this ``` { "vhosts": [ { "name": "localhost", "port": "443", "host-ssl-key": "/etc/pki/tls/private/libwebsockets.org.key", "host-ssl-cert": "/etc/pki/tls/certs/libwebsockets.org.crt", "host-ssl-ca": "/etc/pki/tls/certs/libwebsockets.org.cer", "mounts": [{ "mountpoint": "/", "origin": "file:///var/www/libwebsockets.org", "default": "index.html" }, { "mountpoint": "/testserver", "origin": "file:///usr/local/share/libwebsockets-test-server", "default": "test.html" }], # which protocols are enabled for this vhost, and optional # vhost-specific config options for the protocol # "ws-protocols": [{ "warmcat,timezoom": { "status": "ok" } }] }, { "name": "localhost", "port": "7681", "host-ssl-key": "/etc/pki/tls/private/libwebsockets.org.key", "host-ssl-cert": "/etc/pki/tls/certs/libwebsockets.org.crt", "host-ssl-ca": "/etc/pki/tls/certs/libwebsockets.org.cer", "mounts": [{ "mountpoint": "/", "origin": ">https://localhost" }] }, { "name": "localhost", "port": "80", "mounts": [{ "mountpoint": "/", "origin": ">https://localhost" }] } ] } ``` That sets up three vhosts all called "localhost" on ports 443 and 7681 with SSL, and port 80 without SSL but with a forced redirect to https://localhost @section lwswsvn Lwsws Vhost name and port sharing The vhost name field is used to match on incoming SNI or Host: header, so it must always be the host name used to reach the vhost externally. - Vhosts may have the same name and different ports, these will each create a listening socket on the appropriate port. - Vhosts may also have the same port and different name: these will be treated as true vhosts on one listening socket and the active vhost decided at SSL negotiation time (via SNI) or if no SSL, then after the Host: header from the client has been parsed. @section lwswspr Lwsws Protocols Vhosts by default have available the union of any initial protocols from context creation time, and any protocols exposed by plugins. Vhosts can select which plugins they want to offer and give them per-vhost settings using this syntax ``` "ws-protocols": [{ "warmcat-timezoom": { "status": "ok" } }] ``` The "x":"y" parameters like "status":"ok" are made available to the protocol during its per-vhost LWS_CALLBACK_PROTOCOL_INIT (in is a pointer to a linked list of struct lws_protocol_vhost_options containing the name and value pointers). To indicate that a protocol should be used when no Protocol: header is sent by the client, you can use "default": "1" ``` "ws-protocols": [{ "warmcat-timezoom": { "status": "ok", "default": "1" } }] ``` Similarly, if your vhost is serving a raw protocol, you can mark the protocol to be selected using "raw": "1" ``` "ws-protocols": [{ "warmcat-timezoom": { "status": "ok", "raw": "1" } }] ``` See also "apply-listen-accept" below. @section lwswsovo Lwsws Other vhost options - If the three options `host-ssl-cert`, `host-ssl-ca` and `host-ssl-key` are given, then the vhost supports SSL. Each vhost may have its own certs, SNI is used during the initial connection negotiation to figure out which certs to use by the server name it's asking for from the request DNS name. - `keeplive-timeout` (in secs) defaults to 60 for lwsws, it may be set as a vhost option - `interface` lets you specify which network interface to listen on, if not given listens on all. If the network interface is not usable (eg, ethernet cable out) it will be logged at startup with such vhost not listening, and lws will poll for it and bind a listen socket to the interface if and when it becomes available. - "`unix-socket`": "1" causes the unix socket specified in the interface option to be used instead of an INET socket - "`unix-socket-perms`": "user:group" allows you to control the unix permissons on the listening unix socket. It's always get to `0600` mode, but you can control the user and group for the socket fd at creation time. This allows you to use unix user and groups to control who may open the other end of the unix socket on the local system. - "`sts`": "1" causes lwsws to send a Strict Transport Security header with responses that informs the client he should never accept to connect to this address using http. This is needed to get the A+ security rating from SSL Labs for your server. - "`access-log`": "filepath" sets where apache-compatible access logs will be written - `"enable-client-ssl"`: `"1"` enables the vhost's client SSL context, you will need this if you plan to create client conections on the vhost that will use SSL. You don't need it if you only want http / ws client connections. - "`ciphers`": "" OPENSSL only: sets the allowed list of TLS <= 1.2 ciphers and key exchange protocols for the serving SSL_CTX on the vhost. The default list is restricted to only those providing PFS (Perfect Forward Secrecy) on the author's Fedora system. If you need to allow weaker ciphers, you can provide an alternative list here per-vhost. - "`client-ssl-ciphers`": "" OPENSSL only: sets the allowed list of <= TLS1.2 ciphers and key exchange protocols for the client SSL_CTX on the vhost - "`tls13-ciphers`": "" OPENSSL 1.1.1+ only: sets allowed list of TLS1.3+ ciphers and key exchange protocols for the client SSL_CTX on the vhost. The default is to allow all. - "`client-tls13-ciphers`": "" OPENSSL 1.1.1+ only: sets the allowed list of TLS1.3+ ciphers and key exchange protocols for the client SSL_CTX on the vhost. The default is to allow all. - "`ecdh-curve`": "" The default ecdh curve is "prime256v1", but you can override it here, per-vhost - "`noipv6`": "on" Disable ipv6 completely for this vhost - "`ipv6only`": "on" Only allow ipv6 on this vhost / "off" only allow ipv4 on this vhost - "`ssl-option-set`": "" Sets the SSL option flag value for the vhost. It may be used multiple times and OR's the flags together. The values are derived from /usr/include/openssl/ssl.h ``` # define SSL_OP_NO_TLSv1_1 0x10000000L ``` would equate to ``` "`ssl-option-set`": "268435456" ``` - "`ssl-option-clear'": "" Clears the SSL option flag value for the vhost. It may be used multiple times and OR's the flags together. - "`ssl-client-option-set`" and "`ssl-client-option-clear`" work the same way for the vhost Client SSL context - "`headers':: [{ "header1": "h1value", "header2": "h2value" }] allows you to set arbitrary headers on every file served by the vhost recommended vhost headers for good client security are ``` "headers": [{ "Content-Security-Policy": "script-src 'self'", "X-Content-Type-Options": "nosniff", "X-XSS-Protection": "1; mode=block", "X-Frame-Options": "SAMEORIGIN" }] ``` - "`apply-listen-accept`": "on" This vhost only serves a non-http protocol, specified in "listen-accept-role" and "listen-accept-protocol" @section lwswsm Lwsws Mounts Where mounts are given in the vhost definition, then directory contents may be auto-served if it matches the mountpoint. Mount protocols are used to control what kind of translation happens - file:// serve the uri using the remainder of the url past the mountpoint based on the origin directory. Eg, with this mountpoint ``` { "mountpoint": "/", "origin": "file:///var/www/mysite.com", "default": "/" } ``` The uri /file.jpg would serve /var/www/mysite.com/file.jpg, since / matched. - ^http:// or ^https:// these cause any url matching the mountpoint to issue a redirect to the origin url - cgi:// this causes any matching url to be given to the named cgi, eg ``` { "mountpoint": "/git", "origin": "cgi:///var/www/cgi-bin/cgit", "default": "/" }, { "mountpoint": "/cgit-data", "origin": "file:///usr/share/cgit", "default": "/" }, ``` would cause the url /git/myrepo to pass "myrepo" to the cgi /var/www/cgi-bin/cgit and send the results to the client. - http:// or https:// these perform reverse proxying, serving the remote origin content from the mountpoint. Eg ``` { "mountpoint": "/proxytest", "origin": "https://libwebsockets.org" } ``` This will cause your local url `/proxytest` to serve content fetched from libwebsockets.org over ssl; whether it's served from your server using ssl is unrelated and depends how you configured your local server. Notice if you will use the proxying feature, `LWS_WITH_HTTP_PROXY` is required to be enabled at cmake, and for `https` proxy origins, your lwsws configuration must include `"init-ssl": "1"` and the vhost with the proxy mount must have `"enable-client-ssl": "1"`, even if you are not using ssl to serve. `/proxytest/abc`, or `/proxytest/abc?def=ghi` etc map to the origin + the part past `/proxytest`, so links and img src urls etc work as do all urls under the origin path. In addition link and src urls in the document are rewritten so / or the origin url part are rewritten to the mountpoint part. @section lwswsomo Lwsws Other mount options 1) Some protocols may want "per-mount options" in name:value format. You can provide them using "pmo" { "mountpoint": "/stuff", "origin": "callback://myprotocol", "pmo": [{ "myname": "myvalue" }] } 2) When using a cgi:// protocol origin at a mountpoint, you may also give cgi environment variables specific to the mountpoint like this ``` { "mountpoint": "/git", "origin": "cgi:///var/www/cgi-bin/cgit", "default": "/", "cgi-env": [{ "CGIT_CONFIG": "/etc/cgitrc/libwebsockets.org" }] } ``` This allows you to customize one cgi depending on the mountpoint (and / or vhost). 3) It's also possible to set the cgi timeout (in secs) per cgi:// mount, like this ``` "cgi-timeout": "30" ``` 4) `callback://` protocol may be used when defining a mount to associate a named protocol callback with the URL namespace area. For example ``` { "mountpoint": "/formtest", "origin": "callback://protocol-post-demo" } ``` All handling of client access to /formtest[anything] will be passed to the callback registered to the protocol "protocol-post-demo". This is useful for handling POST http body content or general non-cgi http payload generation inside a plugin. See the related notes in README.coding.md 5) Cache policy of the files in the mount can also be set. If no options are given, the content is marked uncacheable. ``` { "mountpoint": "/", "origin": "file:///var/www/mysite.com", "cache-max-age": "60", # seconds "cache-reuse": "1", # allow reuse at client at all "cache-revalidate": "1", # check it with server each time "cache-intermediaries": "1" # allow intermediary caches to hold } ``` 6) You can also define a list of additional mimetypes per-mount ``` "extra-mimetypes": { ".zip": "application/zip", ".doc": "text/evil" } ``` Normally a file suffix MUST match one of the canned mimetypes or one of the extra mimetypes, or the file is not served. This adds a little bit of security because even if there is a bug somewhere and the mount dirs are circumvented, lws will not serve, eg, /etc/passwd. If you provide an extra mimetype entry "*": "" Then any file is served, if the mimetype was not known then it is served without a Content-Type: header. 7) A mount can be protected by HTTP Basic Auth. This only makes sense when using https, since otherwise the password can be sniffed. You can add a `basic-auth` entry on an http mount like this ``` { "mountpoint": "/basic-auth", "origin": "file://_lws_ddir_/libwebsockets-test-server/private", "basic-auth": "/var/www/balogins-private" } ``` Before serving anything, lws will signal to the browser that a username / password combination is required, and it will pop up a dialog. When the user has filled it in, lwsws checks the user:password string against the text file named in the `basic-auth` entry. The file should contain user:pass one per line ``` testuser:testpass myuser:hispass ``` The file should be readable by lwsws, and for a little bit of extra security not have a file suffix, so lws would reject to serve it even if it could find it on a mount. After successful authentication, `WSI_TOKEN_HTTP_AUTHORIZATION` contains the authenticated username. In the case you want to also protect being able to connect to a ws protocol on a particular vhost by requiring the http part can authenticate using Basic Auth before the ws upgrade, this is also possible. In this case, the "basic-auth": and filepath to the credentials file is passed as a pvo in the "ws-protocols" section of the vhost definition. @section lwswscc Requiring a Client Cert on a vhost You can make a vhost insist to get a client certificate from the peer before allowing the connection with ``` "client-cert-required": "1" ``` the connection will only proceed if the client certificate was signed by the same CA as the server has been told to trust. @section rawconf Configuring Fallback and Raw vhosts Lws supports some unusual modes for vhost listen sockets, which may be configured entirely using the JSON per-vhost config language in the related vhost configuration section. There are three main uses for them 1) A vhost bound to a specific role and protocol, not http. This binds all incoming connections on the vhost listen socket to the "raw-proxy" role and protocol "myprotocol". ``` "listen-accept-role": "raw-proxy", "listen-accept-protocol": "myprotocol", "apply-listen-accept": "1" ``` 2) A vhost that wants to treat noncompliant connections for http or https as belonging to a secondary fallback role and protocol. This causes non-https connections to an https listener to stop being treated as https, to lose the tls wrapper, and bind to role "raw-proxy" and protocol "myprotocol". For example, connect a browser on your external IP :443 as usual and it serves as normal, but if you have configured the raw-proxy to portforward 127.0.0.1:22, then connecting your ssh client to your external port 443 will instead proxy your sshd over :443 with no http or tls getting in the way. ``` "listen-accept-role": "raw-proxy", "listen-accept-protocol": "myprotocol", "fallback-listen-accept": "1", "allow-non-tls": "1" ``` 3) A vhost wants to either redirect stray http traffic back to https, or to actually serve http on an https listen socket (this is not recommended since it allows anyone to drop the security assurances of https by accident or design). ``` "allow-non-tls": "1", "redirect-http": "1", ``` ...or, ``` "allow-non-tls": "1", "allow-http-on-https": "1", ``` @section lwswspl Lwsws Plugins Protcols and extensions may also be provided from "plugins", these are lightweight dynamic libraries. They are scanned for at init time, and any protocols and extensions found are added to the list given at context creation time. Protocols receive init (LWS_CALLBACK_PROTOCOL_INIT) and destruction (LWS_CALLBACK_PROTOCOL_DESTROY) callbacks per-vhost, and there are arrangements they can make per-vhost allocations and get hold of the correct pointer from the wsi at the callback. This allows a protocol to choose to strictly segregate data on a per-vhost basis, and also allows the plugin to handle its own initialization and context storage. To help that happen conveniently, there are some new apis - lws_vhost_get(wsi) - lws_protocol_get(wsi) - lws_callback_on_writable_all_protocol_vhost(vhost, protocol) - lws_protocol_vh_priv_zalloc(vhost, protocol, size) - lws_protocol_vh_priv_get(vhost, protocol) dumb increment, mirror and status protocol plugins are provided as examples. @section lwswsplaplp Additional plugin search paths Packages that have their own lws plugins can install them in their own preferred dir and ask lwsws to scan there by using a config fragment like this, in its own conf.d/ file managed by the other package ``` { "global": { "plugin-dir": "/usr/local/share/coherent-timeline/plugins" } } ``` @section lwswsssp lws-server-status plugin One provided protocol can be used to monitor the server status. Enable the protocol like this on a vhost's ws-protocols section ``` "lws-server-status": { "status": "ok", "update-ms": "5000" } ``` `"update-ms"` is used to control how often updated JSON is sent on a ws link. And map the provided HTML into the vhost in the mounts section ``` { "mountpoint": "/server-status", "origin": "file:///usr/local/share/libwebsockets-test-server/server-status", "default": "server-status.html" } ``` You might choose to put it on its own vhost which has "interface": "lo", so it's not externally visible, or use the Basic Auth support to require authentication to access it. `"hide-vhosts": "{0 | 1}"` lets you control if information about your vhosts is included. Since this includes mounts, you might not want to leak that information, mount names, etc. `"filespath":"{path}"` lets you give a server filepath which is read and sent to the browser on each refresh. For example, you can provide server temperature information on most Linux systems by giving an appropriate path down /sys. This may be given multiple times. @section lwswsreload Lwsws Configuration Reload You may send lwsws a `HUP` signal, by, eg ``` $ sudo killall -HUP lwsws ``` This causes lwsws to "deprecate" the existing lwsws process, and remove and close all of its listen sockets, but otherwise allowing it to continue to run, until all of its open connections close. When a deprecated lwsws process has no open connections left, it is destroyed automatically. After sending the SIGHUP to the main lwsws process, a new lwsws process, which can pick up the newly-available listen sockets, and use the current configuration files, is automatically started. The new configuration may differ from the original one in arbitrary ways, the new context is created from scratch each time without reference to the original one. Notes 1) Protocols that provide a "shared world" like mirror will have as many "worlds" as there are lwsws processes still active. People connected to a deprecated lwsws process remain connected to the existing peers. But any new connections will apply to the new lwsws process, which does not share per-vhost "shared world" data with the deprecated process. That means no new connections on the deprecated context, ie a "shrinking world" for those guys, and a "growing world" for people who connect after the SIGHUP. 2) The new lwsws process owes nothing to the previous one. It starts with fresh plugins, fresh configuration, fresh root privileges if that how you start it. The plugins may have been updated in arbitrary ways including struct size changes etc, and lwsws or lws may also have been updated arbitrarily. 3) A root parent process is left up that is not able to do anything except respond to SIGHUP or SIGTERM. Actual serving and network listening etc happens in child processes which use the privileges set in the lwsws config files. @section lwswssysd Lwsws Integration with Systemd lwsws needs a service file like this as `/usr/lib/systemd/system/lwsws.service` ``` [Unit] Description=Libwebsockets Web Server After=syslog.target [Service] ExecStart=/usr/local/bin/lwsws ExecReload=/usr/bin/killall -s SIGHUP lwsws ; sleep 1 ; /usr/local/bin/lwsws StandardError=null [Install] WantedBy=multi-user.target ``` You can find this prepared in `./lwsws/usr-lib-systemd-system-lwsws.service` @section lwswslr Lwsws Integration with logrotate For correct operation with logrotate, `/etc/logrotate.d/lwsws` (if that's where we're putting the logs) should contain ``` /var/log/lwsws/*log { copytruncate missingok notifempty delaycompress } ``` You can find this prepared in `/lwsws/etc-logrotate.d-lwsws` Prepare the log directory like this ``` sudo mkdir /var/log/lwsws sudo chmod 700 /var/log/lwsws ``` @section lwswsgdb Debugging lwsws with gdb Hopefully you won't need to debug lwsws itself, but you may want to debug your plugins. start lwsws like this to have everything running under gdb ``` sudo gdb -ex "set follow-fork-mode child" -ex "run" --args /usr/local/bin/lwsws ``` this will give nice backtraces in lwsws itself and in plugins, if they were built with symbols. @section lwswsvgd Running lwsws under valgrind You can just run lwsws under valgrind as usual and get valid results. However the results / analysis part of valgrind runs after the plugins have removed themselves, this means valgrind backtraces into plugin code is opaque, without source-level info because the dynamic library is gone. There's a simple workaround, use LD_PRELOAD= before running lwsws, this has the loader bring the plugin in before executing lwsws as if it was a direct dependency. That means it's still mapped until the whole process exits after valgtind has done its thing. libwebsockets-4.3.5/READMEs/README.plugin-acme.md000066400000000000000000000137011476025525100211730ustar00rootroot00000000000000lws-acme-client Plugin ====================== ## Introduction lws-acme-client is a protcol plugin for libwebsockets that implements an ACME client able to communicate with let's encrypt and other certificate providers. It implements `tls-sni-01` challenge, and is able to provision tls certificates "from thin air" that are accepted by all the major browsers. It also manages re-requesting the certificate when it only has two weeks left to run. It works with both the OpenSSL and mbedTLS backends. ## Overview for use You need to: - Provide name resolution to the IP with your server, ie, myserver.com needs to resolve to the IP that hosts your server - Enable port forwarding / external firewall access to your port, usually 443 - Enable the "lws-acme-client" plugin on the vhosts you want it to manage certs for - Add per-vhost options describing what should be in the certificate After that the plugin will sort everything else out. ## Example lwsws setup ``` "vhosts": [ { "name": "home.warmcat.com", "port": "443", "host-ssl-cert": "/etc/lwsws/acme/home.warmcat.com.crt.pem", "host-ssl-key": "/etc/lwsws/acme/home.warmcat.com.key.pem", "ignore-missing-cert": "1", "access-log": "/var/log/lwsws/test-access-log", "ws-protocols": [{ "lws-acme-client": { "auth-path": "/etc/lwsws/acme/auth.jwk", "cert-path": "/etc/lwsws/acme/home.warmcat.com.crt.pem", "key-path": "/etc/lwsws/acme/home.warmcat.com.key.pem", "directory-url": "https://acme-staging.api.letsencrypt.org/directory", "country": "TW", "state": "Taipei", "locality": "Xiaobitan", "organization": "Crash Barrier Ltd", "common-name": "home.warmcat.com", "email": "andy@warmcat.com" }, ... ``` ## Required PVOs Notice that the `"host-ssl-cert"` and `"host-ssl-key"` entries have the same meaning as usual, they point to your certificate and private key. However because the ACME plugin can provision these, you should also mark the vhost with `"ignore-missing-cert" : "1"`, so lwsws will ignore what will initially be missing certificate / keys on that vhost, and will set about creating the necessary certs and keys instead of erroring out. You must make sure the directories mentioned here exist, lws doesn't create them for you. They should be 0700 root:root, even if you drop lws privileges. If you are implementing support in code, this corresponds to making sure the vhost creating `info.options` has the `LWS_SERVER_OPTION_IGNORE_MISSING_CERT` bit set. Similarly, in code, the each of the per-vhost options shown above can be provided in a linked-list of structs at vhost creation time. See `./test-apps/test-server-v2.0.c` for example code for providing pvos. ### auth-path This is where the plugin will store the auth keys it generated. ### cert-path Where the plugin will store the certificate file. Should match `host-ssl-cert` that the vhost wants to use. The path should include at least one 0700 root:root directory. ### key-path Where the plugin will store the certificate keys. Again it should match `host-ssl-key` the vhost is trying to use. The path should include at least one 0700 root:root directory. ### directory-url This defines the URL of the certification server you will get your certificates from. For let's encrypt, they have a "practice" one - `https://acme-staging.api.letsencrypt.org/directory` and they have a "real" one - `https://acme-v01.api.letsencrypt.org/directory` the main difference is the CA certificate for the real one is in most browsers already, but the staging one's CA certificate isn't. The staging server will also let you abuse it more in terms of repeated testing etc. It's recommended you confirm expected operation with the staging directory-url, and then switch to the "real" URL. ### common-name Your server DNS name, like "libwebsockets.org". The remote ACME server will use this to find your server to perform the SNI challenges. ### email The contact email address for the certificate. ## Optional PVOs These are not included in the cert by letsencrypt ### country Two-letter country code for the certificate ### state State "or province" for the certificate ### locality Locality for the certificate ### organization Your company name ## Security / Key storage considerations The `lws-acme-client` plugin is able to provision and update your certificate and keys in an entirely root-only storage environment, even though lws runs as a different uid / gid with no privileges to access the storage dir. It does this by opening and holding two WRONLY fds on "update paths" inside the root directory structure for each cert and key it manages; these are the normal cert and key paths with `.upd` appended. If during the time the server is up the certs become within two weeks of expiry, the `lws-acme-client` plugin will negotiate new certs and write them to the file descriptors. Next time the server starts, if it sees `.upd` cert and keys, it will back up the old ones and copy them into place as the new ones, before dropping privs. To also handle the long-uptime server case, lws will update the vhost with the new certs using in-memory temporary copies of the cert and key after updating the cert. In this way the cert and key live in root-only storage but the vhost is kept up to date dynamically with any cert changes as well. ## Multiple vhosts using same cert In the case you have multiple vhosts using of the same cert, just attach the `lws-acme-client` plugin to one instance. When the cert updates, all the vhosts are informed and vhosts using the same filepath to access the cert will be able to update their cert. ## Implementation point You will need to remove the auth keys when switching from OpenSSL to mbedTLS. They will be regenerated automatically. It's the file at this path: ``` "auth-path": "/etc/lwsws/acme/auth.jwk", ``` libwebsockets-4.3.5/READMEs/README.plugin-sshd-base.md000066400000000000000000000177001476025525100221420ustar00rootroot00000000000000ssh-base Plugin ================ ## Introduction lws-ssh-base is a protcol plugin for libwebsockets that implements a generic, abstract, ssh server. - very small footprint in code and memory, takes up small part of ESP32 - written with security in mind: valgrind and Coverity -clean - binds to one or more vhosts, that controls listen port(s) - all IO and settings abstracted through a single "ops" struct from user code - each instance on a vhost has its own "ops" struct, defining server keys, auth method and functions to implement IO and other operations - The plugin has no built-in behaviours like check ~/.ssh/authorized_keys, treat auth usernames as system usernames, or spawn the user's shell. Everything potentially dangerous is left to the user ops code to decide how to handle. It's NOT like sshd where running it implies it will accept existing keys for any system user, will spawn a shell, etc, unless you implement those parts in the ops callbacks. - The plugin requires extra code around it in the form of the ops struct handlers. So it's role is something like an abstract base class for an ssh server. All the crypto, protocol sequencing and state machine are inside, but all the IO except the network connection is outside. - Built as part of libwebsockets, like all plugins may be dynamically loaded at runtime or built statically. Test app `libwebsockets-test-sshd` provided - Uses hash and RSA functions from either mbedTLS or OpenSSL automatically, according to which library libwebsockets was built for To maintain its small size, it implements a single "best of breed" crypto for the following functions: |Function|Crypto| |---|---| |KEX|curve25519-sha256@libssh.org| |Server host key|ssh-rsa (4096b)| |Encryption|chacha20-poly1305@openssh.com| |Compression|None| ## License lws-ssh-base is Free Software, available under libwebsockets' MIT license. The crypto parts are available elsewhere under a BSD license. But for simplicity the whole plugin is under MIT. ## Generating your own keys ``` $ ssh-keygen -t rsa -b 4096 -f mykeys ``` will ask for a passphrase and generate the private key in `mykeys` and the public key in `mykeys.pub`. If you already have a suitable RSA key you use with ssh, you can just use that directly. lws installs a test keypair in /usr[/local]/share/libwebsockets-test-server that the test apps will accept. ## Example code 1) There's a working example app `libwebsockets-test-sshd` included that spawns a bash shell when an ssh client authenticates. The username used on the remote ssh has no meaning, it spawns the shell under the credentials of "lws-test-sshd" was run under. It accepts the lws ssh test key which is installed into /usr[/local]/share/libwebsockets-test-server. Start the server like this (it wants root only because the server key is stored in /etc) ``` $ sudo libwebsockets-test-sshd ``` Connect to it using the test private key like this ``` $ ssh -p 2200 -i /usr/local/share/libwebsockets-test-server/lws-ssh-test-keys anyuser@127.0.0.1 ``` 2) There's also a working example plugin `lws-sshd-demo` that "subclasses" the abstract `lws-ssh-base` plugin to make a protocol which can be used from, eg, lwsws. For an lwsws vhost that listens on port 2222 and responds with the lws-sshd-demo ssh server, the related config is: ``` { "name": "sshd", "port": "2222", "onlyraw": "1", "ws-protocols": [{ "lws-ssh-base": { "status": "ok", "ops-from": "lws-sshd-demo" }, "lws-sshd-demo": { "status": "ok", "raw": "1" } }] } ``` ## Integration to other apps ### Step 0: Build and install libwebsockets For the `libwebsockets-test-sshd` example, you will need CMake options `LWS_WITH_CGI`, since it uses lws helpers to spawn a shell. lws-ssh-base itself doesn't require CGI support in libwebsockets. ### Step 1: make the code available in your app Include `lws-plugin-ssh-base` in your app, either as a runtime plugin or by using the lws static include scheme. To bring in the whole of the ssh-base plugin into your app in one step, statically, just include `plugins/ssh-base/include/lws-plugin-sshd-static-build-includes.h`, you can see an example of this in `./test-apps/test-sshd.c`. ### Step 2: define your `struct lws_ssh_ops` `plugins/ssh-base/include/lws-plugin-ssh.h` defines `struct lws_ssh_ops` which is used for all customization and integration of the plugin per vhost. Eg, ``` static const struct lws_ssh_ops ssh_ops = { .channel_create = ssh_ops_channel_create, .channel_destroy = ssh_ops_channel_destroy, .tx_waiting = ssh_ops_tx_waiting, .tx = ssh_ops_tx, .rx = ssh_ops_rx, .get_server_key = ssh_ops_get_server_key, .set_server_key = ssh_ops_set_server_key, .set_env = ssh_ops_set_env, .pty_req = ssh_ops_pty_req, .child_process_io = ssh_ops_child_process_io, .child_process_terminated = ssh_ops_child_process_terminated, .exec = ssh_ops_exec, .shell = ssh_ops_shell, .is_pubkey_authorized = ssh_ops_is_pubkey_authorized, .banner = ssh_ops_banner, .disconnect_reason = ssh_ops_disconnect_reason, .server_string = "SSH-2.0-Libwebsockets", .api_version = 1, }; ``` The `ssh_ops_...()` functions are your implementations for the operations needed by the plugin for your purposes. ### Step 3: enable `lws-ssh-base` protocol to a vhost and configure using pvo A pointer to your struct lws_ssh_ops is passed into the vhost instance of the protocol using per-vhost options ``` static const struct lws_protocol_vhost_options pvo_ssh_ops = { NULL, NULL, "ops", (void *)&ssh_ops }; static const struct lws_protocol_vhost_options pvo_ssh = { NULL, &pvo_ssh_ops, "lws-sshd-base", "" /* ignored, just matches the protocol name above */ }; ... info.port = 22; info.options = LWS_SERVER_OPTION_ONLY_RAW; info.vhost_name = "sshd"; info.protocols = protocols_sshd; info.pvo = &pvo_ssh; vh_sshd = lws_create_vhost(context, &info); ``` There are two possible pvos supported, "ops", shown above, directly passes the ops structure in using the value on the "ops" pvo. To support other protocols that want to provide ops to lws-ssh-base themselves for a particular vhost, you can also provide a pvo `"ops-from"` whose value is the name of the protocol also enabled on this vhost, whose protocol ".user" pointer points to the ops struct lws-ssh-base should use. ## Integration to other plugins A worked example of using the abstract `lws-ssh-base` plugin from another plugin that provides the ops struct is in `./plugins/protocol_lws_sshd_demo`. The key points to note - the plugin sets the ops struct for the vhost instantiation of `lws-ssh-base` by passing a pointer to the ops struct in its `lws_protocols` struct `user` member. - the config for the vhost tells `lws-ssh-base` to pick up the ops struct pointer using an "ops-from" pvo that indicates the protocol name. ``` "lws-ssh-base": { "status": "ok", "ops-from": "lws-sshd-demo" }, ``` - the config for the vhost tells lws this vhost only serves RAW (ie, no http) ``` { "name": "sshd", "port": "2222", "onlyraw": "1", ... ``` - the config for the vhost marks the protocol that uses `lws-ssh-base`, not `lws-ssh-base` itself, as the protocol to be served for raw connections ``` "lws-sshd-demo": { "status": "ok", "raw": "1" ... ``` ## Notes You can have the vhost it binds to listen on a nonstandard port. The ssh commandline app cane be told to connect to a non-22 port with `ssh -p portnum user@hostname` libwebsockets-4.3.5/READMEs/README.porting.md000066400000000000000000000041401476025525100204510ustar00rootroot00000000000000# Guidance for porting to new platform Where differences existed between the initial POSIX platform for lws and other supported platforms like Windows, `lws_plat_...()` apis were added to move handling to platform-specific code in `./lib/plat/`. Depending o which platform is built, different platform-specific implementations of these `lws_plat...()` apis get built. ## 1) Prepare the cmake cross-build file if necessary CMake isolates its settings for cross-build into a separate file, which can be used to different cmake projects for the same platform as well. Find a similar examples already in `./contrib/cross-*` and copy and adapt it as needed, All settings related to toolchain should go in there. For cross-toolchain, the convention is to pass the path to its installed directory in `CROSS_PATH` environment variable. ## 2) Copy the closest platform dir in ./lib/plat Wholesale copy the closest existing platform dir to `/lib/plat/myplatform` and rename the files. Remove stuff specific to the original platform. ## 3) Add a flag in CMakeLists.txt Cut and paste a flag to select your platform, preferably `LWS_PLAT_MYPLATFORM` or so ## 4) Add a section to force-select and deselect other cmake options based on platform flag Some options on by default may not make sense on your platform, and others off by default may be mandatory. After the options() section in CMakeLists.txt, you can use this kind of structure ``` if (LWS_PLAT_MYPLATFORM) set(LWS_WITH_XXXX 0) endif() ``` to enforce implicit requirements of your platform. Optional stuff should be set by running cmake commandline as usual. ## 5) Add building your platform files into CMakeLists.txt Add entries in CMakeLists.txt for building stuff in `./lib/plat/myplatform` when `LWS_PLAT_MYPLATFORM` is enabled. ## 6) Adapt your copied ./lib/plat/myplatform/ files You can now do test builds using the cross-build file, your platform flag in cmake, and your copied ./lib/plat content... this last part since it was copied from another platform will initially be a plentiful source of errors. You can iteratively build and adapt the platform files. libwebsockets-4.3.5/READMEs/README.problems.md000066400000000000000000000057311476025525100206210ustar00rootroot00000000000000Debugging problems ================== Check it's still a problem with latest lws ------------------------------------------ Older versions of lws don't attract any new work after they are released (see [the release policy](https://libwebsockets.org/git/libwebsockets/tree/READMEs/README.release-policy.md) for details); for a while they will get backported bugfixes but that's it. All new work and bugfixes happen on `main` branch. Old, old versions may be convenient for you to use for some reason. But unless you pay for support or have contributed work to lws so we feel we owe you some consideration, nobody else has any reason to particularly care about solving issues on ancient versions. Whereas if the problem exists on `main`, and can be reproduced by developers, it usually gets attention, often immediately. If the problem doesn't exist on `main`, you can either use `main` or check also the -stable branch of the last released version to see if it was already solved there. Library is a component ---------------------- As a library, lws is always just a component in a bigger application. When users have a problem involving lws, what is happening in the bigger application is usually critical to understand what is going on (and where the solution lies). Sometimes access to the remote peer like server or client is also necessary to provoke the symptom. Sometimes, the problem is in lws, but sometimes the problem is not in lws but in these other pieces. Many users are able to share their sources, but others decide not to, for presumed "commercial advantage" or whatever. (In any event, it can be painful looking through large chunks of someone else's sources for problems when that is not the library author's responsibility.) This makes answering questions like "what is wrong with my code I am not going to show you?" or even "what is wrong with my code?" very difficult. Even if it's clear there is a problem somewhere, it cannot be understood or reproduced by anyone else if it needs user code that isn't provided. The biggest question is, "is this an lws problem actually"? To solve that the best solution is to strip out all or as much user code as possible, and see if the problem is still coming. Use the test apps / minimal examples as sanity checks ----------------------------------------------------- The test server and client, and any more specifically relevant minimal example are extremely useful for sanity checks and debugging guidance. - **test apps work on your platform**, then either - your user code is broken, align it to how the test apps work, or, - something from your code is required to show an lws problem, provide a minimal patch on a test app so it can be reproduced - **test apps break on your platform**, but work on, eg, x86_64, either - toolchain or platform-specific (eg, OS) issue, or - lws platform support issue - **test apps break everywhere** - sounds like lws problem, info to reproduce and / or a patch is appreciated libwebsockets-4.3.5/READMEs/README.release-policy.md000066400000000000000000000132431476025525100217100ustar00rootroot00000000000000# lws release policy ## How should users consume lws? The one definitively wrong way to consume lws (or anything else) is "import" some version of it into your proprietary tree and think you will stick with that forever, perhaps piling cryptic fixes or hacks on top until quite quickly, nobody dare think about updating it. The stable releases go on to a branch like v4.0-stable as described below, over time these attract dozens or even hundreds of minor or major fix patches backported from the development branch. So you should not consume tags like v4.0.0 but build into your planning that you will need to follow v4.0-stable in order to stay on top of known bugs. And we only backport fixes to the last stable release, although we will make exceptions for important fixes. So after a while, trying to stick with one old versions means nobody is providing security fixes on it any more. So you should build into your planning that you will follow lws release upgrades. If you find problems and create fixes, please upstream them, simplifying your life so you can just directly consume the upstream tree with no private changes. ## Development Master branch is the default and all new work happens there. It's unstable and subject to history rewrites, patches moving about and being squashed etc. In terms of it working, it is subject to passing CI tests including a battery of runtime tests, so if it is passing CI as it usually is then it's probably in usable shape. See "Why no history on development" below for why it's managed like that. ![all work happens on main](../doc-assets/lws-relpol-1.svg) If you have patches (you are a hero) they should be targeted at `main`. To follow such a branch, `git pull` is the wrong tool... the starting point of what you currently have may no longer exist remotely due to rearranging the patches there. Instead use a flow like this: ``` $ git fetch https://libwebsockets.org/repo/libwebsockets +main:m && git reset --hard m ``` This fetches current remote development branch into local branch `m`, and then forces your local checkout to exactly match `m`. This replaces your checked-out tree including any of your local changes, so stash those first, or use stgit or so to pop them before updating your basis against lws development. ## Stable branches Master is very useful for coordinating development, and integrating WIP, but for distros or integration into large user projects some stability is often more desirable than the latest development work. Periodically, when development seems in good shape and various new developments seem to be working, it's copied out into a versioned stable branch, like `v4.0-stable`. ![stable branches are copied from development](../doc-assets/lws-relpol-2.svg) The initial copy is tagged with, eg, `v4.0.0`. (At that time, development's logical version is set to "...99", eg, `v4.0.99` so version comparisons show that development version is "later" than any other v4.0 version, which will never reach 99 point releases itself, but "earlier" than, eg, v4.1.) ## Backport policy Development continues, and as part of that usually bugs are reported and / or fixes found that may apply not just to current development, but the version of the development branch that was copied to form the last -stable branch. In that case, the patch may be backported to the last stable branch to also fix the bug there. In the case of refactors or major internal improvements, these typically do not get backported. This applies only to fixes and public API-neutral internal changes to lws... if new features were backported or API changes allowed, then there would be multiple apis under the same version name and library soname, which is madness. When new stable releases are made, the soname is bumped reflecting the API is different than that of previous versions. ![backports from main to stable](../doc-assets/lws-relpol-3.svg) If there is something you need in a later lws version that is not backported, you need to either backport it yourself or use a later lws version. Using a more recent version of lws (and contributing fixes and changes so you yourself can get them easily as well as contributing for others) is almost always the correct way. ## Stable point releases Periodically fix patches pile up on the -stable branch and are tagged out as "point releases". So if the original stable release was "v3.0.0", the point release may be "v3.0.1". ![point releases of stable](../doc-assets/lws-relpol-4.svg) ## Critical fixes Sometimes a bug is found and fixed that had been hiding for a few versions. If the bug has some security dimension or is otherwise important, we may backport it to a few recent releases, not just the last one. This is pretty uncommon though. ![backport to multiple stable branches](../doc-assets/lws-relpol-5.svg) ## Why no history on the development branch Git is a wonderful tool that can be understood to have two main modes of operation, merge and rebase that are mutually exclusive. Most devs only use merge / pull, but rebase / fetch is much more flexible. Developing via rebases allows me to dispense with feature branches during development and enables tracking multiple in-progress patches in-tree by updating them in place. If this doesn't make sense or seems heretical to you, it's OK I don't need devsplain'ing about it, just sit back and enjoy the clean, rapid development results. Since stable branches don't allow new features, they are run as traditional trees with a history, like a one-way pile of patches on top of the original release. If CI shows something is messed up with the latest patch, I will edit it in-place if it has only been out for a few hours, but there is no re-ordering or other history manipulation. libwebsockets-4.3.5/READMEs/README.routing.md000066400000000000000000000040471476025525100204640ustar00rootroot00000000000000# Lws routing lws is mainly built around POSIX sockets and operates from the information available from those. But in some cases, it needs to go a step further and monitor and understand the device routing table. ## Recognizing loss of routability On mobile devices, switching between interfaces and losing / regaining connections quickly is a given. But POSIX sockets do not act like that, the socket remains connected until something times it out if it no longer has a route to its peer, and the tcp timeouts can be in the order of minutes. In order to do better, lws must monitor and understand how the routing table relates to existing connections, dynamically. ## Linux: netlink For linux-based devices you can build in netlink-based route monitoring with `-DLWS_WITH_NETLINK=1`, lws aquires a copy of the routing table when the context / pt starts up and modifies it according to netlink messages from then on. On Linux routing table events do not take much care about backing out changes made on interface up by, eg, NetworkManager. So lws also monitors for link / interface down to remove the related routes. ## Actions in lws based on routing table Both server and client connections now store their peer sockaddr in the wsi, and when the routing table changes, all active wsi on a pt are checked against the routing table to confirm the peer is still routable. For example if there is no net route matching the peer and no gateway, the connection is invalidated and closed. Similarly, if we are removing the highest priority gateway route, all connections to a peer without a net route match are invalidated. However connections with an unaffected matching net route like 127.0.0.0/8 are left alone. ## Intergration to other subsystems If SMD is built in, on any route change a NETWORK message `{"rt":"add|del"}` is issued. If SMD is built in, on any route change involving a gateway, a NETWORK message `{"trigger":"cpdcheck", "src":"gw-change"}` is issued. If Captive Portal Detection is built in, this will cause a new captive portal detection sequence. libwebsockets-4.3.5/READMEs/README.tcp_fastopen.md000066400000000000000000000015771476025525100214670ustar00rootroot00000000000000# `TCP_FASTOPEN` support in lws Lws supports enabling TCP_FASTOPEN oper-vhost for listen sockets. ## Enabling per vhost serving Set the `info.fo_listen_queue` to nonzero at vhost creation. Different platforms interpret this number differently, zero always disables it but on Linux, the number is interpreted as a SYN queue length. On FreeBSD, OSX and Windows, the number is basically a bool, with the extra restriction OSX and Windows only allows 0 or 1. ## Enabling Linux for serving with TCP_FASTOPEN To configure the kernel for listening socket TCP_FASTOPEN, you need ``` # sysctl -w net.ipv4.tcp_fastopen=3 ``` ## Enabling BSD for serving with TCP_FASTOPEN At least on FreeBSD, you need to set the net.inet.tcp.fastopen.enabled sysctl to 1 ## Enabling Windows for serving with TCP_FASTOPEN ``` > netsh int tcp set global fastopenfallback=disabled > netsh int tcp show global ``` libwebsockets-4.3.5/READMEs/README.test-apps.md000066400000000000000000000350301476025525100207110ustar00rootroot00000000000000Overview of lws test apps ========================= Are you building a client? You just need to look at the test client [libwebsockets-test-client](../test-apps/test-client.c). If you are building a standalone server, there are three choices, in order of preferability. 1) lwsws + protocol plugins Lws provides a generic web server app that can be configured with JSON config files. https://libwebsockets.org itself uses this method. With lwsws handling the serving part, you only need to write an lws protocol plugin. See [plugin-standalone](../plugin-standalone) for an example of how to do that outside lws itself, using lws public apis. $ cmake .. -DLWS_WITH_LWSWS=1 See [README.lwsws.md](../READMEs/README.lwsws.md) for information on how to configure lwsws. NOTE this method implies libuv is used by lws, to provide crossplatform implementations of timers, dynamic lib loading etc for plugins and lwsws. 2) Using plugins in code This method lets you configure web serving in code, instead of using lwsws. Plugins are still used, but you have a choice whether to dynamically load them or statically include them. In this example, they are dynamically loaded. $ cmake .. -DLWS_WITH_PLUGINS=1 See, eg, the [test-server](../test-apps/test-server.c) 3) protocols in the server app This is the original way lws implemented servers, plugins and libuv are not required, but without plugins separating the protocol code directly, the combined code is all squidged together and is much less maintainable. This method is still supported in lws but all ongoing and future work is being done in protocol plugins only. You can simply include the plugin contents and have it buit statically into your server, just define this before including the plugin source ``` #define LWS_PLUGIN_STATIC ``` This gets you most of the advantages without needing dynamic loading + libuv. Notes about lws test apps ========================= @section tsb Testing server with a browser If you run [libwebsockets-test-server](../test-apps/test-server.c) and point your browser (eg, Chrome) to http://127.0.0.1:7681 It will fetch a script in the form of `test.html`, and then run the script in there on the browser to open a websocket connection. Incrementing numbers should appear in the browser display. By default the test server logs to both stderr and syslog, you can control what is logged using `-d `, see later. @section tsd Running test server as a Daemon You can use the -D option on the test server to have it fork into the background and return immediately. In this daemonized mode all stderr is disabled and logging goes only to syslog, eg, `/var/log/messages` or similar. The server maintains a lockfile at `/tmp/.lwsts-lock` that contains the pid of the parent process, and deletes this file when the parent process terminates. To stop the daemon, do ``` $ kill \`cat /tmp/.lwsts-lock\` ``` If it finds a stale lock (the pid mentioned in the file does not exist any more) it will delete the lock and create a new one during startup. If the lock is valid, the daemon will exit with a note on stderr that it was already running. @section clicert Testing Client Certs Here is a very quick way to create a CA, and a client and server cert from it, for testing. ``` $ cp -rp ./scripts/client-ca /tmp $ cd /tmp/client-ca $ ./create-ca.sh $ ./create-server-cert.sh server $ ./create-client-cert.sh client ``` The last step wants an export password, you will need this password again to import the p12 format certificate into your browser. This will get you the following |name|function| |----|--------| |ca.pem|Your Certificate Authority cert| |ca.key|Private key for the CA cert| |client.pem|Client certificate, signed by your CA| |client.key|Client private key| |client.p12|combined client.pem + client.key in p12 format for browsers| |server.pem|Server cert, signed by your CA| |server.key|Server private key| You can confirm yourself the client and server certs are signed by the CA. ``` $ openssl verify -verbose -trusted ca.pem server.pem $ openssl verify -verbose -trusted ca.pem client.pem ``` Import the client.p12 file into your browser. In FFOX57 it's - preferences - Privacy & Security - Certificates | View Certificates - Certificate Manager | Your Certificates | Import... - Enter the password you gave when creating client1.p12 - Click OK. You can then run the test server like this: ``` $ libwebsockets-test-server -s -A ca.pem -K server.key -C server.pem -v ``` When you connect your browser to https://localhost:7681 after accepting the selfsigned server cert, your browser will pop up a prompt to send the server your client cert (the -v switch enables this). The server will only accept a client cert that has been signed by ca.pem. @section sssl Using SSL on the server side To test it using SSL/WSS, just run the test server with ``` $ libwebsockets-test-server --ssl ``` and use the URL ``` https://127.0.0.1:7681 ``` The connection will be entirely encrypted using some generated certificates that your browser will not accept, since they are not signed by any real Certificate Authority. Just accept the certificates in the browser and the connection will proceed in first https and then websocket wss, acting exactly the same. [test-server.c](../test-apps/test-server.c) is all that is needed to use libwebsockets for serving both the script html over http and websockets. @section lwstsdynvhost Dynamic Vhosts You can send libwebsockets-test-server or libwebsockets-test-server-v2.0 a SIGUSR1 to toggle the creation and destruction of an identical second vhost on port + 1. This is intended as a test and demonstration for how to bring up and remove vhosts dynamically. @section unixskt Testing Unix Socket Server support Start the test server with -U and the path to create the unix domain socket ``` $ libwebsockets-test-server -U /tmp/uds ``` On exit, lws will delete the socket inode. To test the client side, eg ``` $ nc -C -U /tmp/uds -i 30 ``` and type `GET / HTTP/1.1` followed by two ENTER. The contents of test.html should be returned. @section wscl Testing websocket client support If you run the test server as described above, you can also connect to it using the test client as well as a browser. ``` $ libwebsockets-test-client localhost ``` will by default connect to the test server on localhost:7681 and print the dumb increment number from the server at the same time as drawing random circles in the mirror protocol; if you connect to the test server using a browser at the same time you will be able to see the circles being drawn. The test client supports SSL too, use ``` $ libwebsockets-test-client localhost --ssl -s ``` the -s tells it to accept the default self-signed cert from the server, otherwise it will strictly fail the connection if there is no CA cert to validate the server's certificate. @section choosingts Choosing between test server variations If you will be doing standalone serving with lws, ideally you should avoid making your own server at all, and use lwsws with your own protocol plugins. The second best option is follow test-server-v2.0.c, which uses a mount to autoserve a directory, and lws protocol plugins for ws, without needing any user callback code (other than what's needed in the protocol plugin). For those two options libuv is needed to support the protocol plugins, if that's not possible then the other variations with their own protocol code should be considered. @section tassl Testing SSL on the client side To test SSL/WSS client action, just run the client test with ``` $ libwebsockets-test-client localhost --ssl ``` By default the client test applet is set to accept self-signed certificates used by the test server, this is indicated by the `use_ssl` var being set to `2`. Set it to `1` to reject any server certificate that it doesn't have a trusted CA cert for. @section taping Using the websocket ping utility libwebsockets-test-ping connects as a client to a remote websocket server and pings it like the normal unix ping utility. ``` $ libwebsockets-test-ping localhost handshake OK for protocol lws-mirror-protocol Websocket PING localhost.localdomain (127.0.0.1) 64 bytes of data. 64 bytes from localhost: req=1 time=0.1ms 64 bytes from localhost: req=2 time=0.1ms 64 bytes from localhost: req=3 time=0.1ms 64 bytes from localhost: req=4 time=0.2ms 64 bytes from localhost: req=5 time=0.1ms 64 bytes from localhost: req=6 time=0.2ms 64 bytes from localhost: req=7 time=0.2ms 64 bytes from localhost: req=8 time=0.1ms ^C --- localhost.localdomain websocket ping statistics --- 8 packets transmitted, 8 received, 0% packet loss, time 7458ms rtt min/avg/max = 0.110/0.185/0.218 ms $ ``` By default it sends 64 byte payload packets using the 04 PING packet opcode type. You can change the payload size using the `-s=` flag, up to a maximum of 125 mandated by the 04 standard. Using the lws-mirror protocol that is provided by the test server, libwebsockets-test-ping can also use larger payload sizes up to 4096 is BINARY packets; lws-mirror will copy them back to the client and they appear as a PONG. Use the `-m` flag to select this operation. The default interval between pings is 1s, you can use the -i= flag to set this, including fractions like `-i=0.01` for 10ms interval. Before you can even use the PING opcode that is part of the standard, you must complete a handshake with a specified protocol. By default lws-mirror-protocol is used which is supported by the test server. But if you are using it on another server, you can specify the protocol to handshake with by `--protocol=protocolname` @section ta fraggle Fraggle test app By default it runs in server mode ``` $ libwebsockets-test-fraggle libwebsockets test fraggle (C) Copyright 2010-2011 Andy Green licensed under MIT Compiled with SSL support, not using it Listening on port 7681 server sees client connect accepted v06 connection Spamming 360 random fragments Spamming session over, len = 371913. sum = 0x2D3C0AE Spamming 895 random fragments Spamming session over, len = 875970. sum = 0x6A74DA1 ... ``` You need to run a second session in client mode, you have to give the `-c` switch and the server address at least: ``` $ libwebsockets-test-fraggle -c localhost libwebsockets test fraggle (C) Copyright 2010-2011 Andy Green licensed under MIT Client mode Connecting to localhost:7681 denied deflate-stream extension handshake OK for protocol fraggle-protocol client connects to server EOM received 371913 correctly from 360 fragments EOM received 875970 correctly from 895 fragments EOM received 247140 correctly from 258 fragments EOM received 695451 correctly from 692 fragments ... ``` The fraggle test sends a random number up to 1024 fragmented websocket frames each of a random size between 1 and 2001 bytes in a single message, then sends a checksum and starts sending a new randomly sized and fragmented message. The fraggle test client receives the same message fragments and computes the same checksum using websocket framing to see when the message has ended. It then accepts the server checksum message and compares that to its checksum. @section taproxy proxy support The http_proxy environment variable is respected by the client connection code for both `ws://` and `wss://`. It doesn't support authentication. You use it like this ``` $ export http_proxy=myproxy.com:3128 $ libwebsockets-test-client someserver.com ``` @section talog debug logging By default logging of severity "notice", "warn" or "err" is enabled to stderr. Again by default other logging is compiled in but disabled from printing. By default debug logs below "notice" in severity are not compiled in. To get them included, add this option in CMAKE ``` $ cmake .. -DCMAKE_BUILD_TYPE=DEBUG ``` If you want to see more detailed debug logs, you can control a bitfield to select which logs types may print using the `lws_set_log_level()` api, in the test apps you can use `-d ` to control this. The types of logging available are (OR together the numbers to select multiple) - 1 ERR - 2 WARN - 4 NOTICE - 8 INFO - 16 DEBUG - 32 PARSER - 64 HEADER - 128 EXTENSION - 256 CLIENT - 512 LATENCY @section ws13 Websocket version supported The final IETF standard is supported for both client and server, protocol version 13. @section latency Latency Tracking Since libwebsockets runs using `poll()` and a single threaded approach, any unexpected latency coming from system calls would be bad news. There's now a latency tracking scheme that can be built in with `-DLWS_WITH_LATENCY=1` at cmake, logging the time taken for system calls to complete and if the whole action did complete that time or was deferred. You can see the detailed data by enabling logging level 512 (eg, `-d 519` on the test server to see that and the usual logs), however even without that the "worst" latency is kept and reported to the logs with NOTICE severity when the context is destroyed. Some care is needed interpreting them, if the action completed the first figure (in us) is the time taken for the whole action, which may have retried through the poll loop many times and will depend on network roundtrip times. High figures here don't indicate a problem. The figure in us reported after "lat" in the logging is the time taken by this particular attempt. High figures here may indicate a problem, or if you system is loaded with another app at that time, such as the browser, it may simply indicate the OS gave preferential treatment to the other app during that call. @section autobahn Autobahn Test Suite Lws can be tested against the autobahn websocket fuzzer in both client and server modes 1) pip install autobahntestsuite 2) From your build dir: ``` $ cmake .. -DLWS_WITHOUT_EXTENSIONS=0 -DLWS_WITH_MINIMAL_EXAMPLES=1 && make ``` 3) ../scripts/autobahn-test.sh 4) In a browser go to the directory you ran wstest in (eg, /projects/libwebsockets) file:///projects/libwebsockets/build/reports/clients/index.html to see the results @section autobahnnotes Autobahn Test Notes 1) Two of the tests make no sense for Libwebsockets to support and we fail them. - Tests 2.10 + 2.11: sends multiple pings on one connection. Lws policy is to only allow one active ping in flight on each connection, the rest are dropped. The autobahn test itself admits this is not part of the standard, just someone's random opinion about how they think a ws server should act. So we will fail this by design and it is no problem about RFC6455 compliance. 2) Currently two parts of autobahn are broken and we skip them https://github.com/crossbario/autobahn-testsuite/issues/71 libwebsockets-4.3.5/READMEs/README.tls-sessions.md000066400000000000000000000122101476025525100214320ustar00rootroot00000000000000# Using TLS Session resumption Lws supports clientside session caching and session resumption on both mbedtls and openssl-type tls library backends, to accellerate connection re- establishment. ## Background TLS specifies logical "sessions" that get "established" on both sides when the tls tunnel is negotiated... these are the object that gets validated by the certificate PKI. They each have a server-unique "Session ID" of up to 32 bytes each. Normally the default is that there is a new session negotiated per connection, so multiple connections to the same endpoint each negotiate fresh sessions from scratch. However tls servers typically maintain a cache of recent sessions, and where both the server and client still have a copy of a previously-negotiated session around, support the client explicitly requesting additional connections binding to the old session by asking for it by its Session ID at negotiation time. ### Re-use of validated sessions The advantage is that the timeconsuming key exchange part of the negotiation can be skipped, and a connection-specific AES key agreed at both sides just by hashing on the secret held in the session object at each side. This allows new tunnels to be established much faster after the first, while the session from the first is still valid and available at both sides. Both the server and client may apply their own lifetime restriction to their copy of the session, the first side to expire it will cause a new session to be forced at the next reuse attempt. Lifetimes above 24h are not recommended by RFC5246. ### Multiple concurrent use of validated sessions In addition, the session's scope is any connection to the server that knows the original session ID, because individual new AES keys are hashed from the session secret, multiple connections to the same endpoint can take advantage of a single valid session object. ### Difference from Session Tickets TLS also supports sessions as bearer tokens, but these are generally considered as degrading security. Lws doesn't do anything special for Session Tickets, but it's possible your TLS library will support them by default, as is reportedly the case with mbedtls 2.28.1. Either way, it's expected Session IDs should work with lws if enabled and your tls library supports them. ## Support in lws Server-side TLS generally has session caching enabled by default. For client side, lws now enables `LWS_WITH_TLS_SESSIONS` at cmake by default, which adds a configurable tls session cache that is automatically kept updated with a MRU-sorted list of established sessions. It's also possible to serialize sessions and save and load them, but this has to be treated with caution. Filling, expiring and consulting the session cache for client connections is performed automatically. ### tls library differences Mbedtls supports clientside session caching in lws, but it does not have a session message arrival callback to synchronize updating the client session cache like openssl does. Separately, the session cb in boringssl is reportedly nonfunctional at the moment. To solve both cases, lws will schedule a check for the session at +500ms after the tls negotiation completed, and for the case the connection doesn't last 500ms or the server is slow issuing the message, also attempt to update the cache at the time the tls connection object is closing. ### Session namespacing in lws Internally sessions are referred to by a vhostname.hostname.port tuple. ### Configuring the clientside cache Session caches in lws exist in and are bound to the vhost. Different vhosts may provide different authentication (eg, client certs) to the same endpoint that another connection should not be able to take advantage of. The max size of this cache can be set at `.tls_session_cache_max` in the vhost creation info struct, if left at 0 then a default of 10 is applied. The Time-To-Live policy for sessions at the client can be set in seconds at `.tls_session_timeout`, by default whatever the tls library thinks it should be, perhaps 300s. You can disable session caching for a particular vhost by adding the vhost option flag `LWS_SERVER_OPTION_DISABLE_TLS_SESSION_CACHE` to `.options` at vhost creation time. ### Session saving and loading Trying to make sessions really persistent is supported but requires extra caution. RFC5246 says Applications that may be run in relatively insecure environments should not write session IDs to stable storage. The issue is that while in process memory the session object is relatively secure compared to sensitive secrets and tls library data already in process memory. But when serialized to, eg, some external, unencrypted medium, the accessibility of what is basically a secret able to decrypt tls connections can become a security hazard. It's left to the user to take any necessary steps to secure sessions stored that way. For openssl, Public APIs are provided in `libwebsockets/lws-tls-sessions.h` to serialize any session in the cache associated with a vhost/host/port tuple, and to preload any available session into a vhost session cache by describing the endpoint hostname and port. The session saving and loading apis aren't supported for mbedtls yet. libwebsockets-4.3.5/READMEs/README.udp.md000066400000000000000000000033751476025525100175700ustar00rootroot00000000000000## Using UDP in lws UDP is supported in lws... the quickest way is to use the api `lws_create_adopt_udp()` which returns a wsi bound to the provided vhost, protocol, `lws_retry` struct, dns address and port. The wsi can be treated normally and `lws_write()` used to write on it. ## Implementing UDP retries Retries are important in udp but there's no standardized ack method unlike tcp. Lws allows you to bind an `lws_retry` struct describing the policy to the udp wsi, but since one UDP socket may have many transactions in flight, the `lws_sul` and `uint16_t` to count the retries must live in the user's transaction object like this ``` ... lws_sorted_usec_list_t sul; uint16_t retry; ... ``` in the `LWS_CALLBACK_RAW_WRITEABLE` callback, before doing the write, set up the retry like this ``` if (lws_dll2_is_detached(&transaction->sul_write.list) && lws_retry_sul_schedule_retry_wsi(wsi, &transaction->sul_write, transaction_retry_write_cb, &transaction->retry_count_write)) { /* we have reached the end of our concealed retries */ lwsl_warn("%s: concealed retries done, failing\n", __func__); goto retry_conn; } ``` This manages the retry counter in the transaction object, guards against it wrapping, selects the timeout using the policy bound to the wsi, and sets the `lws_sul` in the transaction object to call the given callback if the sul time expires. In the callback, it should simply call `lws_callback_on_writable()` for the udp wsi. ## Simulating packetloss You can simulate udp packetloss at tx and rx by using the Fault Injection apis with the well-known fault names "udp_tx_loss" and "udp_rx_loss", typically with the probabilistic setting, in commandline format something like `--fault-injection "wsi/udp_tx_loss(10%)"` libwebsockets-4.3.5/READMEs/README.unix-domain-reverse-proxy.md000066400000000000000000000107161476025525100240550ustar00rootroot00000000000000## Unix Domain Sockets Reverse Proxy ### Introduction lws is able to use a mount to place reverse proxies into the URL space. These are particularly useful when using Unix Domain Sockets, basically files in the server filesystem, to communicate between lws and a separate server process and integrate the result into a coherent URL namespace on the lws side. It's also possible to proxy using tcp sockets. ![overview](../doc-assets/http-proxy-overview.svg) This has the advantage that the actual web server that forwards the data from the unix socket owner is in a different process than the server that serves on the unix socket. If it has problems, they do not affect the actual public-facing web server. The unix domain socket server may be in a completely different language than the web server. Compared to CGI, there are no forks to make a connection to the unix domain socket server. ### Mount origin format Unix Domain Sockets are effectively "files" in the server filesystem, and are defined by their filepath. The "server" side that is to be proxied opens the socket and listens on it, which creates a file in the server filesystem. The socket understands either http or https protocol. Lws can be told to act as a proxy for that at a mountpoint in the lws vhost url space. If your mount is expressed in C code, then the mount type is LWSMPRO_HTTP or LWSMPRO_HTTPS depending on the protocol the unix socket understands, and the origin address has the form `+/path/to/unix/socket:/path/inside/mount`. The + at the start indicates it is a local unix socket we are proxying, and the ':' acts as a delimiter for the socket path, since unlike other addresses the unix socket path can contain '/' itself. ### Connectivity rules and translations Onward proxy connections from lws to the Unix Domain Socket happen using http/1.1. That implies `transfer-encoding: chunking` in the case that the length of the output is not known beforehand. Lws takes care of stripping any chunking (which is illegal in h2) and translating between h1 and h2 header formats if the return connection is actually in http/2. The h1 onward proxy connection translates the following headers from the return connection, which may be h1 or h2: Header|Function ---|--- host|Which vhost etag|Information on any etag the client has cached for this URI if-modified-since|Information on the freshness of any etag the client has cached for this URI accept-language|Which languages the return path client prefers accept-encoding|Which compression encodings the client can accept cache-control|Information from the return path client about cache acceptability x-forwarded-for|The IP address of the return path client This implies that the proxied connection can - return 301 etc to say the return path client's etag is still valid - choose to compress using an acceptable content-encoding The following headers are translated from the headers replied via the onward connection (always h1) back to the return path (which may be h1 or h2) Header|Function ---|--- content-length|If present, an assertion of how much payload is expected content-type|The mimetype of the payload etag|The canonical etag for the content at this URI accept-language|This is returned to the return path client because there is no easy way for the return path client to know what it sent originally. It allows clientside selection of i18n. content-encoding|Any compression format on the payload (selected from what the client sent in accept-encoding, if anything) cache-control|The onward server's response about cacheability of its payload ### h1 -> h2 conversion Chunked encoding that may have been used on the outgoing proxy client connection is removed for h2 return connections (chunked encoding is illegal for h2). Headers are converted to all lower-case and hpack format for h2 return connections. Header and payload proxying is staged according to when the return connection (which may be an h2 child stream) is writable. ### Behaviour if unix domain socket server unavailable If the server that listens on the unix domain socket is down or being restarted, lws understands that it couldn't connect to it and returns a clean 503 response `HTTP_STATUS_SERVICE_UNAVAILABLE` along with a brief human-readable explanation. The generated status page produced will try to bring in a stylesheet `/error.css`. This allows you to produce a styled error pages with logos, graphics etc. See [this](https://libwebsockets.org/git/badrepo) for an example of what you can do with it. libwebsockets-4.3.5/READMEs/README.vulnerability-reporting.md000066400000000000000000000005211476025525100236660ustar00rootroot00000000000000## Vulnerability Reporting If you become aware of an issue with lws that has a security dimension for users, please contact `andy@warmcat.com` by direct email. ## Procedure for announcing vulnerability fixes The problem and fixed versions will be announced on the libwebsockets mailing list and a note added to the `main` README.md. libwebsockets-4.3.5/READMEs/mainpage.md000066400000000000000000000021261476025525100176160ustar00rootroot00000000000000##Libwebsockets API introduction Libwebsockets covers a lot of interesting features for people making embedded servers or clients - HTTP(S) serving and client operation - HTTP/2 support for serving and client operation - WS(S) serving and client operation - HTTP(S) apis for file transfer and upload - HTTP 1 + 2 POST form handling (including multipart / file upload) - cookie-based sessions - account management (including registration, email verification, lost pw etc) - strong SSL / TLS PFS support (A+ on SSLlabs test) - ssh server integration - serving gzipped files directly from inside zip files, without conversion - support for linux, bsd, windows etc... and very small nonlinux targets like ESP32 Please note you just need in include libwebsockets.h. It includes all the individual includes in /usr/include/libwebsockets/ itself. Browse by API category (module) Browse by file listing Browse by data structures A collection of READMEs for build, coding, lwsws etc are here libwebsockets-4.3.5/READMEs/release-checklist000066400000000000000000000021141476025525100210220ustar00rootroot00000000000000Release Checklist ----------------- 1) non-CI QA a) valgrind test servers + client + browser 2) soname bump? a) We need one if we added / changed / removed apis - CMakeLists.txt set(SOVERSION "6") - scripts/libwebsockets.spec -/%{_libdir}/libwebsockets.so.6 +/%{_libdir}/libwebsockets.so.7 3) changelog a) Add next version tag header. b) Classify as - NEW - CHANGE - REMOVE 4) main version bump - CMakeLists.txt set(CPACK_PACKAGE_VERSION_MAJOR "1") set(CPACK_PACKAGE_VERSION_MINOR "6") set(CPACK_PACKAGE_VERSION_PATCH "0") 5) Announce latest version on README.md 6) Make sure all new READMEs and public headers are in libwebsockets.dox 7) signed tag git tag -s vX.Y[.Z] 8) git a) push b) final CI check, if fail delete tag, kill pushed tags, restart flow 9) website a) update latest tag for release branch 10) post-relase version bump Bump the PATCH part of the version to 99 -set(CPACK_PACKAGE_VERSION_PATCH "0") +set(CPACK_PACKAGE_VERSION_PATCH "99") to reflect it's newer than any stable release but not a new version yet. libwebsockets-4.3.5/bug_report.md000066400000000000000000000041101476025525100170600ustar00rootroot00000000000000** What version of lws ** "vx.y.z" or "01234567 from `main` thismorning" etc If it's much older than last stable release, we will likely suggest you try that or `main`. ** What platform and arch? ** "Fedora 32 x86_64" or "OSX Catalina" etc ** What parts of lws does it involve? ** dunno / core / client / server raw / http / ws / mqtt / other (give me a hint) ** How can I reproduce the problem just using lws code? ** We can't guess your problem especially in your code. It's great if you can give us a way to realize our own failure clearly with a reproducer that uses our own code. Try to remove your code from the equation by trying the same flow on an lws minimal example and provide a little diff against that. We can find out if it's only on your platform, or only on that version, or only in your code from that quickly, and if something to fix in lws, I can confirm it really is fixed using the same test. ** Describe the bug ** "fails" --> this word is a red flag you didn't try to debug the issue much... exactly how does it "fail", what evidence is it leaving like logs or return codes or traces? "hangs" --> this word is a red flag you didn't try to debug the issue much... exactly what does it mean, whole device frozen? Spinning 100% cpu? Just idle? Building on fire? Have you tried it via strace or similar if it seems frozen to see what it's doing? Attach a debugger like gdb -p pid and get a backtrace? perf top if Linux to see what it spends its time on. "crashes" --> what happens if you run under valgrind? You know lws is not threadsafe except for lws_cancel_service(), right... "sucks" --> let's discuss you writing a patch to improve whatever it is ** Additional data ** Build problems? Describe the toolchain and paste the warnings / errors. Crash? Get a usable backtrace by building with `cmake .. -DCMAKE_BUILD_TYPE=DEBUG` and run under gdb, lldb, or valgrind. Mysterious happenings? Get verbose lws logs by building with `cmake .. -DCMAKE_BUILD_TYPE=DEBUG` and run with `lws_set_log_level(1151, NULL)`, on the example apps they all take a switch like -d1151. libwebsockets-4.3.5/changelog000066400000000000000000001007701476025525100162510ustar00rootroot00000000000000Changelog --------- v4.3.0 ====== - Add full CBOR stream parsing and writing support, with huge amount of test vectors and resumable printf type write apis See ./READMEs/README.cbor-lecp.md - Add COSE key and signing / validation support with huge amount of test vectors cose_sign[1] ES256/384/512, RS256/384/512 cose_mac0 HS256/384/512 See ./READMEs/README.cbor-cose.md - JIT Trust: for constrained devices, provides a way to determine the trusted CA certs the peer requires, and instantiate just those. This allows generic client browsing without the overhead of ~130 x.509 CA certs in memory permanently. See ./READMEs/README.jit-trust.md - Add support for client Netscape cookie jar with caching - Secure Streams: issue LWSSSCS_EVENT_WAIT_CANCELLED state() when lws_cancel_service() called, so cross-thread events can be handled in SS - Actively assert() on attempt to destroy SS handles still active in the call stack, use DESTROY_ME returns instead so caller can choose how to handle it. - Improved Client Connection Error report strings for tls errors - SMP: Use a private fakewsi for PROTOCOL_INIT so pts cannot try to use the same one concurrently - MbedTLS v3 support for all release changes, as well as retaining support for v2.x - MQTT client: support QoS2 - Event lib ops can now be set at context creation time directly, bringing full event lib hooking to custom event loops. See minimal-http-server-eventlib-custom - Extra APIs to recover AKID and SKID from x.509 in mbedtls and openssl - Improve http redirect to handle h2-> h2 cleanly - IPv4+6 listen sockets on vhosts are now done with two separate sockets bound individually to AF_INET and AF_INET6 addresses, handled by the same vhost listen flow. - Improved tls restriction handling - Log contexts: allow objects to log into local logging contexts, by lws_context, vhost, wsi and ss handle. Each context has its own emit function and log level. See ./READMEs/README.logging.md - Upgrade compiler checking to default to -Werror -Wall -Wextra - Fault injection apis now also support pseudo-random number binding within a specified range, eg, --fault-injection "f1(10%),f1_delay(123..456)" - Remove LWS_WITH_DEPRECATED_THINGS, remove master branch - Interface binding now uses ipv6 scoring to select bind address v4.2.0 ====== - Sai coverage upgrades, 495 builds on 27 platforms, including OSX M1, Xenial, Bionic and Focal Ubuntu, Debian Sid and Buster on both 32 and 64-bit OS, and NetBSD, Solaris, FreeBSD, Windows, ESP32. Ctest run on more scenarios including all LWS_WITH_DISTRO_RECOMMENDED. More tests use valgrind if available on platform. - RFC7231 date and time parsing and retry-after wired up to lws_retry - `LWS_WITH_SUL_DEBUGGING` checks that no sul belonging to Secure Streams and wsi objects are left registered on destruction - Netlink monitoring on Linux dynamically tracks interface address and routing changes, and immediately closes connections on invalidated routes. - RFC6724 DNS results sorting over ipv4 + ipv6 results, according to available dynamic route information - Support new event library, sdevent (systemd native loop), via `LWS_WITH_SDEVENT` - Reduce .rodata cost of role structs by making them sparse - Additional Secure Streams QA tests and runtime state transition validation - SMD-over-ss-proxy documentation and helpers to simplify forwarding - SSPC stream buffering at proxy and client set from policy by streamtype - Trigger Captive Portal Detection if DNS resolution fails - Switch all logs related to wsi and Secure Streams to use unique, descriptive tags instead of pointers (which may be reallocated) - Use NOITCE logging for Secure Streams and wsi lifecycle logging using tags - Update SSPC serialization to include versioning on initial handshake, and pass client pid to proxy so related objects are tagged with it - Enable errors on -Wconversion pedantic type-related build issues throughout the lws sources and upgrade every affected cast. - Windows remove WSA event implementation and replace with WSAPoll, with a pair of UDP sockets instead of pipe() for `lws_cancel_service()` - `lws_strcmp_wildcard()` helper that understand "x*", "x*y", "x*y*" etc - `LWS_WITH_PLUGINS_BUILTIN` cmake option just builds plugins into the main library image directly - Secure Streams proxy supports policy for flow control between proxy and clients - libressl also supported along with boringssl, wolfssl - prepared for openssl v3 compatibility, for main function and GENCRYPTO - Fault injection apis can confirm operation of 48 error paths and counting - `LWS_WITH_SYS_METRICS` keeps stats and reports them to user-defined function, compatible with openmetrics - windows platform knows how to prepare openssl with system trust store certs - `LWS_WITH_SYS_CONMON` allows selected client connections to make precise measurements of connection performance and DNS results, and report them in a struct - New native support for uloop event loop (OpenWRT loop) - More options around JWT - Support TLS session caching and reuse by default, on both OpenSSL and mbedtls - Many fixes and improvements... v4.1.0 ====== - NEW: travis / appveyor / bintray are replaced by Sai https://libwebsockets.org/sai/ which for lws currently does 193 builds per git push on 16 platforms, all self-hosted. The homebrew bash scripts used to select Minimal examples are replaced by CTest. Platforms currently include Fedora/AMD/GCC, Windows/AMD/mingw32, Windows/AMD/mingw64, Android/ aarch64/LLVM, esp-idf (on WROVER-KIT and HELTEC physical boards), Fedora/ RISCV (on QEMU)/GCC, CentOS8/AMD/GCC, Gentoo/AMD/GCC, Bionic/AMD/GCC, Linkit 7697, Focal/AMD/GCC, Windows (on QEMU)/AMD/MSVC, Focal/aarch64-RPI4/GCC, iOS/aarch64/LLVM and OSX/AMD/LLVM. - NEW: The single CMakeLists.txt has been refactored and modernized into smaller CMakeLists.txt in the subdirectory along with the code that is being managed for build by it. Build options are still listed in the top level as before but the new way is much more maintainable. - NEW: event lib support on Unix is now built into dynamically loaded plugins and brought in at runtime, allowing all of the support to be built in isolation without conflicts, and separately packaged with individual dependencies. See ./READMEs/event-libs.md for details and how to force the old static build into lws method. - NEW: Captive Portal Detection. Lws can determine if the active default route is able to connect to the internet, or is in a captive portal type situation, by trying to connect to a remote server that will respond in an unusual way, like provide a 204. - NEW: Secure streams: Support system trust store if it exists Build on Windows Support lws raw socket protocol in SS Support Unix Domain Socket transport - NEW: Windows: Support Unix Domain Sockets same as other platforms - NEW: Windows: Build using native pthreads, async dns, ipv6 on MSVC - NEW: lws_struct: BLOB support - NEW: lws_sul: Now provides two sorted timer domains, a default one as before, and another whose scheduled events are capable to wake the system from suspend - NEW: System Message Distribution: lws_smd provides a very lightweight way to pass short messages between subsystems both in RTOS type case where the subsystems are all on the lws event loop, and in the case participants are in different processes, using Secure Streams proxying. Participants register a bitmap of message classes they care about; if no particpant cares about a particular message, it is rejected at allocation time for the sender, making it cheap to provide messages speculatively. See lib/system/smd/README.md for full details. - NEW: lws_drivers: wrappers for SDK driver abstractions (or actual drivers) See lib/drivers/README.md, example implementations minimal-examples/embedded/esp32/esp-wrover-kit - generic gpio - generic LED (by name) lib/drivers/led/README.md - generic PWM, sophisticated interpolated table sequencers with crossfade - generic button (by name), with debounce and press classification emitting rich SMD click, long-click, double-click, down, repeat, up JSON messages lib/drivers/button/README.md - bitbang i2c on generic gpio (hw support can use same abstract API) - bitbang spi on generic gpio (hw support can use same abstract API) - generic display object, can be wired up to controller drivers that hook up by generic i2c or spi, generic backlight PWM sequencing and blanking timer support - generic settings storage: get and set blobs by name - generic network device: netdev abstract class with WIFI / Ethernet implementations using underlying SDK APIs; generic 80211 Scan managements and credentials handling via lws_settings This is the new way to provide embedded platform functionality that was in the past done like esp32-factory. Unlike the old way, the new way has no native apis in it and can be built on other SDK / SoCs the same. - NEW: Security-aware JWS JWT (JSON Web Tokens) apis are provided on top of the existing JOSE / JWS apis. All the common algorithms are available along with some high level apis like lws http cookie -> JWT struct -> lws http cookie. - REMOVED: esp32-helper and friends used by esp32-factory now lws_drivers exists - REMOVED: generic sessions and friends now JWT is provided v4.0.0 ====== - NEW: Lws is now under the MIT license, see ./LICENSE for details - NEW: GLIB native event loop support, lws + gtk example - NEW: native lws MQTT client... supports client stream binding like h2 when multiple logical connections are going to the same endpoint over MQTT, they transparently and independently share the one connection + tls tunnel - NEW: "Secure Streams"... if you are making a device with client connections to the internet or cloud, this allows separation of the communications policy (endpoints, tls cert validation, protocols, etc) from the code, with the goal you can combine streams, change protocols and cloud provision, and reflect that in the device's JSON policy document without having to change any code. - NEW: lws_system: New lightweight and efficient Asynchronous DNS resolver implementation for both A and AAAA records, supports recursive (without recursion in code) lookups, caching, and getaddrinfo() compatible results scheme (from cache directly without per-consumer allocation). Able to perform DNS lookups without introducing latency in the event loop. - NEW: lws_system: ntpclient implementation with interface for setting system time via lws_system ops - NEW: lws_system: dhcpclient implementation - NEW: Connection validity tracking, autoproduce PING/PONG for protocols that support it if not informed that the connection has passed data in both directions recently enough - NEW: lws_retry: standardized exponential backoff and retry timing based around backoff table and lws_sul - NEW: there are official public helpers for unaligned de/serialization of all common types, see eh, lws_ser_wu16be() in include/libwebsockets/lws-misc.h - NEW: lws_tls_client_vhost_extra_cert_mem() api allows attaching extra certs to a client vhost from DER in memory - NEW: lws_system: generic blobs support passing auth tokens, per-connection client certs etc from platform into lws - NEW: public helpers to consume and produce ipv4/6 addresses in a clean way, along with lws_sockaddr46 type now public. See eg, lws_sockaddr46-based lws_sa46_parse_numeric_address(), lws_write_numeric_address() in include/libwebsockets/lws-network-helper.h - Improved client redirect handling, h2 compatibility - NEW: lwsac: additional features for constant folding support (strings that already are in the lwsac can be pointed to without copying again), backfill (look for gaps in previous chunks that could take a new use size), and lwsac_extend() so last use() can attempt to use more unallocated chunk space - NEW: lws_humanize: apis for reporting scalar quanties like 1234 as "1.234KB" with the scaled symbol strings passed in by caller - NEW: freertos: support lws_cancel_service() by using UDP pair bound to lo, since it doesn't have logical pipes - NEW: "esp32" plat, which implemented freertos plat compatibility on esp32, is renamed to "freertos" plat, targeting esp32 and other freertos platforms - NEW: base64 has an additional api supporting stateful decode, where the input is not all in the same place at the same time and can be processed incrementally - NEW: lws ws proxy: support RFC8441 - NEW: lws_spawn_piped apis: generic support for vforking a process with child wsis attached to its stdin, stdout and stderr via pipes. When processes are reaped, a specified callback is triggered. Currently Linux + OSX. - NEW: lws_fsmount apis: Linux-only overlayfs mount and unmount management for aggregating read-only layers with disposable, changeable upper layer fs - Improvements for RTOS / small build case bring the footprint of lws v4 below that of v3.1 on ARM - lws_tokenize: flag specifying # should mark rest of line as comment - NEW: minimal example for integrating libasound / alsa via raw file - lws_struct: sqlite and json / lejp translation now usable v3.2.0 ====== - This is the last planned release under LGPLv2+SLE. It's not planned to be maintained like previous releases, please switch to master for the latest stuff or continue to use v3.1-stable until the next release under the new MIT license. - NEW: completely refactored scheduler with a unified, sorted us-resolution linked-list implementation. All polled checks like timeout are migrated to use the new timers, which also work on the event lib implementations. Faster operation, us-resolution timeouts and generic scheduled callbacks from the event loop. - NEW: lws_dsh specialized buffer memory allocator that can borrow space from other cooperating buffers on the same list. - NEW: lws_sequencer allows managing multi-connection processes and retries - NEW: memory buffer cert support - NEW: LWS_WITH_NETWORK in CMake... can be configured without any network- related code at all - NEW: builds on QNX 6.5 and SmartOS - NEW: JOSE / JWK / JWS / JWE support, for all common ciphers and algs, works on OpenSSL and mbedtls backends - NEW: gencrypto now has genaes and genec in addition to genrsa, works on OpenSSL and mbedtls backends - NEW: raw_proxy role - NEW: Basic Auth works on ws connections - CHANGE: REMOVED: LWS_WITH_GENRSA, LWS_WITH_GENHASH, LWS_WITH_GENEC, LWS_WITH_GENAES have all been removed and combined into LWS_WITH_GENCRYPTO - CHANGE: REMOVED: LWS_WITH_JWS, LWS_WITH_JWE have been removed and combined into LWS_WITH_JOSE v3.1.0 ====== - CHANGE: REMOVED: lws_client_connect() and lws_client_connect_extended() compatibility apis for lws_client_connect_via_info() have been marked as deprecated for several versions and are now removed. Use lws_client_connect_via_info() directly instead. - CHANGE: CMAKE: - LWS_WITH_HTTP2: now defaults ON - CHANGE: Minimal examples updated to use Content Security Policy best practices, using `LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE` vhost option flag and disabling of inline style and scripts. A side-effect of this is that buffers used to marshal headers have to be prepared to take more content than previously... LWS_RECOMMENDED_MIN_HEADER_SPACE (2048 currently) is available for user (and internal) use to logically tie the buffer size to this usecase (and follow future increases). - NEW: CMAKE - LWS_FOR_GITOHASHI: sets various cmake options suitable for gitohashi - LWS_WITH_ASAN: for Linux, enable build with ASAN Don't forget LWS_WITH_DISTRO_RECOMMENDED, which enables a wide range of lws options suitable for a distro build of the library. - NEW: lws threadpool - lightweight pool of pthreads integrated to lws wsi, with all synchronization to event loop handled internally, queue for excess tasks [threadpool docs](https://libwebsockets.org/git/libwebsockets/tree/lib/misc/threadpool) [threadpool minimal example](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/ws-server/minimal-ws-server-threadpool) Cmake config: `-DLWS_WITH_THREADPOOL=1` - NEW: libdbus support integrated on lws event loop [lws dbus docs](https://libwebsockets.org/git/libwebsockets/tree/lib/roles/dbus) [lws dbus client minimal examples](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/dbus-client) [lws dbus server minimal examples](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/dbus-server) Cmake config: `-DLWS_ROLE_DBUS=1` - NEW: lws allocated chunks (lwsac) - helpers for optimized mass allocation of small objects inside a few larger malloc chunks... if you need to allocate a lot of inter-related structs for a limited time, this removes per-struct allocation library overhead completely and removes the need for any destruction handling [lwsac docs](https://libwebsockets.org/git/libwebsockets/tree/lib/misc/lwsac) [lwsac minimal example](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/api-tests/api-test-lwsac) Cmake Config: `-DLWS_WITH_LWSAC=1` - NEW: lws tokenizer - helper api for robustly tokenizing your own strings without allocating or adding complexity. Configurable by flags for common delimiter sets and comma-separated-lists in the tokenizer. Detects and reports syntax errors. [lws_tokenize docs](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-tokenize.h) [lws_tokenize minimal example / api test](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/api-tests/api-test-lws_tokenize) - NEW: lws full-text search - optimized trie generation, serialization, autocomplete suggestion generation and instant global search support extensible to huge corpuses of UTF-8 text while remaining super lightweight on resources. [full-text search docs](https://libwebsockets.org/git/libwebsockets/tree/lib/misc/fts) [full-text search minimal example / api test](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/api-tests/api-test-fts) [demo](https://libwebsockets.org/ftsdemo/) [demo sources](https://libwebsockets.org/git/libwebsockets/tree/plugins/protocol_fulltext_demo.c) Cmake config: `-DLWS_WITH_FTS=1 -DLWS_WITH_LWSAC=1` - NEW: gzip + brotli http server-side compression - h1 and h2 automatic advertising of server compression and application to files with mimetypes "text/*", "application/javascript" and "image/svg.xml". Cmake config: `-DLWS_WITH_HTTP_STREAM_COMPRESSION=1`, `-DLWS_WITH_HTTP_BROTLI=1` - NEW: managed disk cache - API for managing a directory containing cached files with hashed names, and automatic deletion of LRU files once the cache is above a given limit. [lws diskcache docs](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-diskcache.h) Cmake config: `-DLWS_WITH_DISKCACHE=1` - NEW: http reverse proxy - lws mounts support proxying h1 or h2 requests to a local or remote IP, or unix domain socket over h1. This allows microservice type architectures where parts of the common URL space are actually handled by external processes which may be remote or on the same machine. [lws gitohashi serving](https://libwebsockets.org/git/) is handled this way. CMake config: `-DLWS_WITH_HTTP_PROXY=1` - NEW: lws_buflist - internally several types of ad-hoc malloc'd buffer have been replaced by a new, exported api `struct lws_buflist`. This allows multiple buffers to be chained and drawn down in strict FIFO order. - NEW: In the case of h1 upgrade, the connection header is checked to contain "upgrade". The vhost flag LWS_SERVER_OPTION_VHOST_UPG_STRICT_HOST_CHECK also causes the Host: header to be confirmed to match the vhost name and listen port. - NEW: If no 404 redirect for `lws_return_http_status()` is specified for the vhost, the status page produced will try to bring in a stylesheet `/error.css`. This allows you to produce styled 404 or other error pages with logos, graphics etc. See https://libwebsockets.org/git/badrepo for an example of what you can do with it. v3.0.0 ====== - CHANGE: Clients used to call LWS_CALLBACK_CLOSED same as servers... LWS_CALLBACK_CLIENT_CLOSED has been introduced and is called for clients now. - CHANGE: LWS_CALLBACK_CLIENT_CONNECTION_ERROR used to only be directed at protocols[0]. However in many cases, the protocol to bind to was provided at client connection info time and the wsi bound accordingly. In those cases, CONNECTION_ERROR is directed at the bound protocol, not protcols[0] any more. - CHANGE: CMAKE: the following cmake defaults have changed with this version: - LWS_WITH_ZIP_FOPS: now defaults OFF - LWS_WITH_RANGES: now defaults OFF - LWS_WITH_ZLIB: now defaults OFF - LWS_WITHOUT_EXTENSIONS: now defaults ON - CHANGE: REMOVED: lws_alloc_vfs_file() (read a file to malloc buffer) - CHANGE: REMOVED: lws_read() (no longer useful outside of lws internals) - CHANGE: REMOVED: ESP8266... ESP32 is now within the same price range and much more performant - CHANGE: soname bump... don't forget to `ldconfig` - NEW: all event libraries support "foreign" loop integration where lws itself if just a temporary user of the loop unrelated to the actual loop lifecycle. See `minimal-http-server-eventlib-foreign` for example code demonstrating this for all the event libraries. Internal loop in lws is also supported and demonstrated by `minimal-http-server-eventlib`. - NEW: ws-over-h2 support. This is a new RFC-on-the-way supported by Chrome and shortly firefox that allows ws connections to be multiplexed back to the server on the same tcp + tls wrapper h2 connection that the html and scripts came in on. This is hugely faster that discrete connections. - NEW: UDP socket adoption and related event callbacks - NEW: Multi-client connection binding, queuing and pipelining support. Lws detects multiple client connections to the same server and port, and optimizes how it handles them according to the server type and provided flags. For http/1.0, all occur with individual parallel connections. For http/1.1, you can enable keepalive pipelining, so the connections occur sequentially on a single network connection. For http/2, they all occur as parallel streams within a single h2 network connection. See minimal-http-client-multi for example code. - NEW: High resolution timer API for wsi, get a callback on your wsi with LWS_CALLBACK_TIMER, set and reset the timer with lws_set_timer_usecs(wsi, us) Actual resolution depends on event backend. Works with all backends, poll, libuv, libevent, and libev. - NEW: Protocols can arrange vhost-protocol instance specific callbacks with second resolution using `lws_timed_callback_vh_protocol()` - NEW: ACME client plugin for self-service TLS certificates - NEW: RFC7517 JSON Web Keys RFC7638 JWK thumbprint, and RFC7515 JSON Web signatures support - NEW: lws_cancel_service() now provides a generic way to synchronize events from other threads, which appear as a LWS_CALLBACK_EVENT_WAIT_CANCELLED callback on all protocols. This is compatible with all the event libraries. - NEW: support BSD poll() where changes to the poll wait while waiting are undone. - NEW: Introduce generic hash, hmac and RSA apis that operate the same regardless of OpenSSL or mbedTLS tls backend - NEW: Introduce X509 element query api that works the same regardless of OpenSSL or mbedTLS tls backend - NEW: Introduce over 30 "minimal examples" in ./minimal-examples... these replace most of the old test servers - test-echo -> minimal-ws-server-echo and minimal-ws-client-echo - test-server-libuv / -libevent / -libev -> minimal-https-server-eventlib / -eventlib-foreign / -eventlib-demos - test-server-v2.0 -> folded into all the minimal servers - test-server direct http serving -> minimal-http-server-dynamic The minimal examples allow individual standalone build using their own small CMakeLists.txt. - NEW: lws now detects any back-to-back writes that did not go through the event loop inbetween and reports them. This will flag any possibility of failure rather than wait until the problem happens. - NEW: CMake has LWS_WITH_DISTRO_RECOMMENDED to select features that are appropriate for distros - NEW: Optional vhost URL `error_document_404` if given causes a redirect there instead of serve the default 404 page. - NEW: lws_strncpy() wrapper guarantees NUL in copied string even if it was truncated to fit. - NEW: for client connections, local protocol binding name can be separated from the ws subprotocol name if needed, using .local_protocol_name - NEW: Automatic detection of time discontiguities - NEW: Applies TCP_USER_TIMEOUT for Linux tcp keepalive where available - QA: 1600 tests run on each commit in Travis CI, including almost all Autobahn in client and server mode, various h2load tests, h2spec, attack.sh the minimal example selftests and others. - QA: fix small warnings introduced on gcc8.x (eg, Fedora 28) - QA: Add most of -Wextra on gcc (-Wsign-compare, -Wignored-qualifiers, -Wtype-limits, -Wuninitialized) - QA: clean out warnings on windows - QA: pass all 146 h2spec tests now on strict - QA: introduce 35 selftests that operate different minimal examples against each other and confirm the results. - QA: LWS_WITH_MINIMAL_EXAMPLES allows mass build of all relevant minimal- examples with the LWS build, for CI and to make all the example binaries available from the lws build dir ./bin - REFACTOR: the lws source directory layout in ./lib has been radically improved, and there are now README.md files in selected subdirs with extra documentation of interest to people working on lws itself. - REFACTOR: pipelined transactions return to the event loop before starting the next part. - REFACTOR: TLS: replace all TLS library constants with generic LWS ones and adapt all the TLS library code to translate to these common ones. Isolated all the tls-related private stuff in `./lib/tls/private.h`, and all the mbedTLS stuff in `./lib/tls/mbedtls` + openSSL stuff in `./lib/tls/openssl` - REFACTOR: the various kinds of wsi possible with lws have been extracted from the main code and isolated into "roles" in `./lib/roles` which communicate with the core code via an ops struct. Everything related to ah is migrated to the http role. wsi modes are eliminated and replaced by the ops pointer for the role the wsi is performing. Generic states for wsi are available to control the lifecycle using core code. Adding new "roles" is now much easier with the changes and ops struct to plug into. - REFACTOR: reduce four different kinds of buffer management in lws into a generic scatter-gather struct lws_buflist. - REFACTOR: close notifications go through event loop v2.4.0 ====== - HTTP/2 server support is now mature and usable! LWS_WITH_HTTP2=1 enables it. Uses ALPN to serve HTTP/2, HTTP/1 and ws[s] connections all from the same listen port seamlessly. (Requires ALPN-capable OpenSSL 1.1 or mbedTLS). - LWS_WITH_MBEDTLS=1 at CMake now builds and works against mbedTLS instead of OpenSSL. Most things work identically, although on common targets where OpenSSL has acceleration, mbedTLS is many times slower in operation. However it is a lot smaller codewise. - Generic hash apis introduced that work the same on mbedTLS or OpenSSL backend - LWS_WITH_PEER_LIMITS tracks IPs across all vhosts and allows restrictions on both the number of simultaneous connections and wsi in use for any single IP - lws_ring apis provide a generic single- or multi-tail ringbuffer... mirror protocol now uses this. Features include ring elements may be sized to fit structs in the ringbuffer, callback when no tail any longer needs an element and it can be deleted, and zerocopy options to write new members directly into the ringbuffer, and use the ringbuffer element by address too. - abstract ssh 2 server plugin included, with both plugin and standalone demos provided. You can bind the plugin to a vhost and also serve full- strength ssh from the vhost. IO from the ssh server is controlled by an "ops" struct of callbacks for tx, rx, auth etc. - Many fixes, cleanups, source refactors and other improvements. v2.3.0 ====== - ESP32 OpenSSL support for client and server - ESP32 4 x WLAN credential slots may be configured - Libevent event loop support - SOCKS5 proxy support - lws_meta protocol for websocket connection multiplexing - lws_vhost_destroy() added... allows dynamic removal of listening vhosts. Vhosts with shared listen sockets adopt the listen socket automatically if the owner is destroyed. - IPv6 on Windows - Improved CGI handling suitable for general CGI scripting, eg, PHP - Convert even the "old style" test servers to use statically included plugin sources - LWS_WITH_STATS cmake option dumps resource usage and timing information every few seconds to debug log, including latency information about delay from asking for writeable callback to getting it - Large (> 2GB) files may be served - LWS_WITH_HTTP_PROXY Cmake option adds proxying mounts - Workaround for libev build by disabling -Werror on the test app - HTTP2 support disabled since no way to serve websockets on it v2.2.0 ====== Major new features - A mount can be protected by Basic Auth... in lwsws it looks like this ``` { "mountpoint": "/basic-auth", "origin": "file://_lws_ddir_/libwebsockets-test-server/private", "basic-auth": "/var/www/balogins-private" } ``` The text file named in `basic-auth` contains user:password information one per line. See README.lwsws.md for more information. - RFC7233 RANGES support in lws server... both single and multipart. This allows seeking for multimedia file serving and download resume. It's enabled by default but can be disabled by CMake option. - On Linux, lwsws can reload configuration without dropping ongoing connections, when sent a SIGHUP. The old configuration drops its listen sockets so the new configuration can listen on them. New connections connect to the server instance with the new configuration. When all old connections eventually close, the old instance automatically exits. This is equivalent to `systemctl reload apache` - New `adopt` api allow adoption including SSL negotiation and for raw sockets and file descriptors. - Chunked transfer encoding supported for client and server - Adaptations to allow operations inside OPTEE Secure World - ESP32 initial port - able to do all test server functions. See README.build.md - Serving gzipped files from inside a ZIP file is supported... this includes directly serving the gzipped content if the client indicated it could accept it (ie, almost all browsers) saving bandwidth and time. For clients that can't accept it, lws automatically decompresses and serves the content in memory- efficient chunks. Only a few hundred bytes of heap are needed to serve any size file from inside the zip. See README.coding.md - RAW file descriptors may now be adopted into the lws event loop, independent of event backend (including poll service). See README.coding.md - RAW server socket descriptors may now be enabled on the vhost if the first thing sent on the connection is not a valid http method. The user code can associate these with a specific protocol per vhost, and RAW-specific callbacks appear there for creation, rx, writable and close. See libwebsockets-test-server-v2.0 for an example. See README.coding.md - RAW client connections are now possible using the method "RAW". After connection, the socket is associated to the protocol named in the client connection info and RAW-specific callbacks appear there for creation, rx, writable and close. See libwebsockets-test-client (with raw://) for an example. See README.coding.md (for earlier changelogs, see the tagged releases) libwebsockets-4.3.5/cmake/000077500000000000000000000000001476025525100154525ustar00rootroot00000000000000libwebsockets-4.3.5/cmake/FindGit.cmake000077500000000000000000000145671476025525100200200ustar00rootroot00000000000000################################################################################ # # Program: 3D Slicer # # Copyright (c) Kitware Inc. # # See COPYRIGHT.txt # or http://www.slicer.org/copyright/copyright.txt for details. # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # This file was originally developed by Jean-Christophe Fillion-Robin, Kitware Inc. # and was partially funded by NIH grant 3P41RR013218-12S1 # # AG 2013-02-18: I got it from here # https://github.com/Slicer/Slicer/blob/master/CMake/FindGit.cmake # license is BSD # ################################################################################ # # The module defines the following variables: # GIT_EXECUTABLE - path to git command line client # GIT_FOUND - true if the command line client was found # # If the command line client executable is found the macro # GIT_WC_INFO( ) # is defined to extract information of a git working copy at # a given location. # # The macro defines the following variables: # _WC_REVISION_HASH - Current SHA1 hash # _WC_REVISION - Current SHA1 hash # _WC_REVISION_NAME - Name associated with _WC_REVISION_HASH # _WC_URL - output of command `git config --get remote.origin.url' # _WC_ROOT - Same value as working copy URL # _WC_GITSVN - Set to false # # ... and also the following ones if it's a git-svn repository: # _WC_GITSVN - Set to True if it is a # _WC_INFO - output of command `git svn info' # _WC_URL - url of the associated SVN repository # _WC_ROOT - root url of the associated SVN repository # _WC_REVISION - current SVN revision number # _WC_LAST_CHANGED_AUTHOR - author of last commit # _WC_LAST_CHANGED_DATE - date of last commit # _WC_LAST_CHANGED_REV - revision of last commit # _WC_LAST_CHANGED_LOG - last log of base revision # # Example usage: # find_package(Git) # if(GIT_FOUND) # GIT_WC_INFO(${PROJECT_SOURCE_DIR} Project) # message("Current revision is ${Project_WC_REVISION_HASH}") # message("git found: ${GIT_EXECUTABLE}") # endif() # # Look for 'git' or 'eg' (easy git) # set(git_names git eg) # Prefer .cmd variants on Windows unless running in a Makefile # in the MSYS shell. # if(WIN32) if(NOT CMAKE_GENERATOR MATCHES "MSYS") # Note: Due to a bug in 'git.cmd' preventing it from returning the exit code of 'git', # we excluded it from the list of executables to search. # See http://code.google.com/p/msysgit/issues/detail?id=428 # TODO Check if 'git' exists, get the associated version, if the corresponding version # is known to have a working version of 'git.cmd', use it. set(git_names git eg.cmd eg) endif() endif() find_program(GIT_EXECUTABLE ${git_names} PATHS "C:/Program Files/Git/bin" "C:/Program Files (x86)/Git/bin" DOC "git command line client") mark_as_advanced(GIT_EXECUTABLE) if(GIT_EXECUTABLE) macro(GIT_WC_INFO dir prefix) execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --verify -q --short=7 HEAD WORKING_DIRECTORY ${dir} ERROR_VARIABLE GIT_error OUTPUT_VARIABLE ${prefix}_WC_REVISION_HASH OUTPUT_STRIP_TRAILING_WHITESPACE) set(${prefix}_WC_REVISION ${${prefix}_WC_REVISION_HASH}) if(NOT ${GIT_error} EQUAL 0) message(SEND_ERROR "Command \"${GIT_EXECUTBALE} rev-parse --verify -q --short=7 HEAD\" in directory ${dir} failed with output:\n${GIT_error}") else(NOT ${GIT_error} EQUAL 0) execute_process(COMMAND ${GIT_EXECUTABLE} name-rev ${${prefix}_WC_REVISION_HASH} WORKING_DIRECTORY ${dir} OUTPUT_VARIABLE ${prefix}_WC_REVISION_NAME OUTPUT_STRIP_TRAILING_WHITESPACE) endif(NOT ${GIT_error} EQUAL 0) execute_process(COMMAND ${GIT_EXECUTABLE} config --get remote.origin.url WORKING_DIRECTORY ${dir} OUTPUT_VARIABLE ${prefix}_WC_URL OUTPUT_STRIP_TRAILING_WHITESPACE) set(${prefix}_WC_GITSVN False) # Check if this git is likely to be a git-svn repository execute_process(COMMAND ${GIT_EXECUTABLE} config --get-regexp "^svn-remote" WORKING_DIRECTORY ${dir} OUTPUT_VARIABLE git_config_output OUTPUT_STRIP_TRAILING_WHITESPACE ) if(NOT "${git_config_output}" STREQUAL "") # In case git-svn is used, attempt to extract svn info execute_process(COMMAND ${GIT_EXECUTABLE} svn info WORKING_DIRECTORY ${dir} TIMEOUT 3 ERROR_VARIABLE git_svn_info_error OUTPUT_VARIABLE ${prefix}_WC_INFO RESULT_VARIABLE git_svn_info_result OUTPUT_STRIP_TRAILING_WHITESPACE) if(${git_svn_info_result} EQUAL 0) set(${prefix}_WC_GITSVN True) string(REGEX REPLACE "^(.*\n)?URL: ([^\n]+).*" "\\2" ${prefix}_WC_URL "${${prefix}_WC_INFO}") string(REGEX REPLACE "^(.*\n)?Revision: ([^\n]+).*" "\\2" ${prefix}_WC_REVISION "${${prefix}_WC_INFO}") string(REGEX REPLACE "^(.*\n)?Repository Root: ([^\n]+).*" "\\2" ${prefix}_WC_ROOT "${${prefix}_WC_INFO}") string(REGEX REPLACE "^(.*\n)?Last Changed Author: ([^\n]+).*" "\\2" ${prefix}_WC_LAST_CHANGED_AUTHOR "${${prefix}_WC_INFO}") string(REGEX REPLACE "^(.*\n)?Last Changed Rev: ([^\n]+).*" "\\2" ${prefix}_WC_LAST_CHANGED_REV "${${prefix}_WC_INFO}") string(REGEX REPLACE "^(.*\n)?Last Changed Date: ([^\n]+).*" "\\2" ${prefix}_WC_LAST_CHANGED_DATE "${${prefix}_WC_INFO}") endif(${git_svn_info_result} EQUAL 0) endif(NOT "${git_config_output}" STREQUAL "") # If there is no 'remote.origin', default to "NA" value and print a warning message. if(NOT ${prefix}_WC_URL) message(WARNING "No remote origin set for git repository: ${dir}" ) set( ${prefix}_WC_URL "NA" ) else() set(${prefix}_WC_ROOT ${${prefix}_WC_URL}) endif() endmacro(GIT_WC_INFO) endif(GIT_EXECUTABLE) # Handle the QUIETLY and REQUIRED arguments and set GIT_FOUND to TRUE if # all listed variables are TRUE include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Git DEFAULT_MSG GIT_EXECUTABLE) libwebsockets-4.3.5/cmake/FindMiniz.cmake000066400000000000000000000015431476025525100203460ustar00rootroot00000000000000# This module tries to find miniz library and include files # # MINIZ_INCLUDE_DIR, path where to find miniz.h # MINIZ_LIBRARY_DIR, path where to find libminiz.so # MINIZ_LIBRARIES, the library to link against # MINIZ_FOUND, If false, do not try to use miniz # # This currently works probably only for Linux FIND_PATH ( MINIZ_INCLUDE_DIR miniz.h /usr/local/include /usr/include ) FIND_LIBRARY ( MINIZ_LIBRARIES libminiz.so libminiz.a libminiz.so.2 libminiz.so.0.1 /usr/local/lib /usr/local/lib64 /usr/lib /usr/lib64 ) GET_FILENAME_COMPONENT( MINIZ_LIBRARY_DIR ${MINIZ_LIBRARIES} PATH ) SET ( MINIZ_FOUND "NO" ) IF ( MINIZ_INCLUDE_DIR ) IF ( MINIZ_LIBRARIES ) SET ( MINIZ_FOUND "YES" ) ENDIF ( MINIZ_LIBRARIES ) ENDIF ( MINIZ_INCLUDE_DIR ) MARK_AS_ADVANCED( MINIZ_LIBRARY_DIR MINIZ_INCLUDE_DIR MINIZ_LIBRARIES ) libwebsockets-4.3.5/cmake/FindOpenSSLbins.cmake000066400000000000000000000072321476025525100214200ustar00rootroot00000000000000 if(OPENSSL_FOUND) find_program(OPENSSL_EXECUTABLE openssl openssl.exe bin/openssl.exe HINTS ${_OPENSSL_ROOT_HINTS} PATH /usr/bin/ bin/ DOC "Openssl executable") mark_as_advanced(OPENSSL_EXECUTABLE) # On Windows, we need to copy the OpenSSL dlls # to the output directory. # BUT only if non-static libs (referencing dlls) are used # In this case # ** we only want to find dlls that are compatible with the libs # the assumption is that these are part of the same OpenSSL package # and typically reside in the same or in a close by directory as the executable # ** we do NOT want to find dlls in general dll directories such as C:\Windows\systemXX # because these IN GENERAL are not compatible with the libs if (WIN32 AND OPENSSL_VERSION) set(OPENSSL_BIN_FOUND 0) # we check for OpenSSL versioning, as described in https://wiki.openssl.org/index.php/Versioning string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.(.*)$" REGEX_MATCH ${OPENSSL_VERSION}) if (NOT ${REGEX_MATCH} EQUAL "") message(DEBUG "Assuming OpenSSL release ${OPENSSL_VERSION} >= 1.1.0 for dll discovery") # the regex matched - so we assume OpenSSL release >= 1.1 set(OVNR "${CMAKE_MATCH_1}") # OpenSSL version number set(ORNR "${CMAKE_MATCH_2}") # OpenSSL release number set(CRYPTO32_NAME "libcrypto-${OVNR}_${ORNR}.dll") set(CRYPTO64_NAME "libcrypto-${OVNR}_${ORNR}-x64.dll") message(VERBOSE "CRYPTO32_NAME=${CRYPTO32_NAME}") message(VERBOSE "CRYPTO64_NAME=${CRYPTO64_NAME}") set(SSL32_NAME "libssl-${OVNR}_${ORNR}.dll") set(SSL64_NAME "libssl-${OVNR}_${ORNR}-x64.dll") message(VERBOSE "SSL32_NAME=${SSL32_NAME}") message(VERBOSE "SSL64_NAME=${SSL64_NAME}") get_filename_component(OPENSSL_EXECUTABLE_PATH ${OPENSSL_EXECUTABLE} DIRECTORY) message(VERBOSE "OPENSSL_EXECUTABLE_PATH=${OPENSSL_EXECUTABLE_PATH}") set(OPENSSL_EXECUTABLE_BIN_PATH "") string(REGEX MATCH "^(.*)/tools/openssl$" REGEX_MATCH "${OPENSSL_EXECUTABLE_PATH}") message(DEBUG "REGEX_MATCH=\"${REGEX_MATCH}\"") message(DEBUG "CMAKE_MATCH_1=\"${CMAKE_MATCH_1}\"") if (NOT ${REGEX_MATCH} EQUAL "") set(OPENSSL_EXECUTABLE_BIN_PATH "${CMAKE_MATCH_1}/bin") # bin path of this openssl variant endif() message(VERBOSE "OPENSSL_EXECUTABLE_BIN_PATH=${OPENSSL_EXECUTABLE_BIN_PATH}") unset(LIBCRYPTO_BIN) # clear unset(LIBCRYPTO_BIN CACHE) # clear as well, because otherwise find_file might use it find_file(LIBCRYPTO_BIN NO_DEFAULT_PATH NAMES ${CRYPTO32_NAME} ${CRYPTO64_NAME} PATHS ${OPENSSL_EXECUTABLE_PATH} ${OPENSSL_EXECUTABLE_BIN_PATH} ) message(VERBOSE "LIBCRYPTO_BIN=${LIBCRYPTO_BIN}") unset(LIBSSL_BIN) # clear unset(LIBSSL_BIN CACHE) # clear as well, because otherwise find_file might use it find_file(LIBSSL_BIN NO_DEFAULT_PATH NAMES ${SSL32_NAME} ${SSL64_NAME} PATHS ${OPENSSL_EXECUTABLE_PATH} ${OPENSSL_EXECUTABLE_BIN_PATH} ) message(VERBOSE "LIBSSL_BIN=${LIBSSL_BIN}") else() # the version regex did not match # as a fallback, we check for "old" OpenSSL library (used before OpenSSL 1.1.0) find_file(LIBCRYPTO_BIN NAMES libeay32.dll HINTS ${_OPENSSL_ROOT_HINTS} PATH_SUFFIXES bin) find_file(LIBSSL_BIN NAMES ssleay32.dll HINTS ${_OPENSSL_ROOT_HINTS} PATH_SUFFIXES bin) endif() if(LIBCRYPTO_BIN AND LIBSSL_BIN) set(OPENSSL_BIN_FOUND 1) endif() endif(WIN32 AND OPENSSL_VERSION) endif(OPENSSL_FOUND) libwebsockets-4.3.5/cmake/LwsCheckRequirements.cmake000066400000000000000000000067131476025525100225720ustar00rootroot00000000000000# If we are being built as part of lws, confirm current build config supports # reqconfig, else skip building ourselves. # # If we are being built externally, confirm installed lws was configured to # support reqconfig, else error out with a helpful message about the problem. # include(CheckIncludeFile) MACRO(require_lws_config reqconfig _val result) if (DEFINED ${reqconfig}) if (${reqconfig}) set (rq 1) else() set (rq 0) endif() else() set(rq 0) endif() if (${_val} EQUAL ${rq}) set(SAME 1) else() set(SAME 0) endif() string(COMPARE EQUAL "${result}" requirements _cmp) # we go in the first clause if in-tree if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME}) if (${_val}) message("${SAMP}: skipping as lws being built without ${reqconfig}") else() message("${SAMP}: skipping as lws built with ${reqconfig}") endif() set(${result} 0) else() if (LWS_WITH_MINIMAL_EXAMPLES) set(MET ${SAME}) else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig}) if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig}) set(HAS_${reqconfig} 0) else() set(HAS_${reqconfig} 1) endif() if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val})) set(MET 1) else() set(MET 0) endif() endif() if (NOT MET AND _cmp) if (${_val}) message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}") else() message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project") endif() endif() endif() ENDMACRO() MACRO(require_pthreads result) CHECK_INCLUDE_FILE(pthread.h LWS_HAVE_PTHREAD_H) if (NOT LWS_HAVE_PTHREAD_H) if (LWS_WITH_MINIMAL_EXAMPLES) set(${result} 0) message("${SAMP}: skipping as no pthreads") else() message(FATAL_ERROR "threading support requires pthreads") endif() else() if (WIN32) set(PTHREAD_LIB ${LWS_EXT_PTHREAD_LIBRARIES}) else() if (NOT ${CMAKE_SYSTEM_NAME} MATCHES "QNX") set(PTHREAD_LIB pthread) endif() endif() endif() ENDMACRO() MACRO(sai_resource SR_NAME SR_AMOUNT SR_LEASE SR_SCOPE) if (DEFINED ENV{SAI_OVN}) site_name(HOST_NAME) # # Creates a "test" called res_${SR_SCOPE} that waits to be # given a lease on ${SR_AMOUNT} of a resource ${SR_NAME}, for at # most $SR_LEASE seconds, until the test dependent on it can # proceed. # # We need to keep this sai-resource instance up for the # duration of the actual test it is authorizing, when it # is killed, the resource is then immediately released. # # The resource cookie has to be globally unique within the # distributed builder sessions, so it includes the builder # hostname and builder instance information # add_test(NAME st_res_${SR_SCOPE} COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background.sh res_${SR_SCOPE} sai-resource ${SR_NAME} ${SR_AMOUNT} ${SR_LEASE} ${HOST_NAME}-res_${SR_SCOPE}-$ENV{SAI_PROJECT}-$ENV{SAI_OVN}) # allow it to wait for up to 100s for the resource lease set_tests_properties(st_res_${SR_SCOPE} PROPERTIES WORKING_DIRECTORY . FIXTURES_SETUP res_sspcmin TIMEOUT 100) add_test(NAME ki_res_${SR_SCOPE} COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background-kill.sh res_${SR_SCOPE} sai-resource ) set_tests_properties(ki_res_${SR_SCOPE} PROPERTIES FIXTURES_CLEANUP res_${SR_SCOPE}) endif() ENDMACRO() libwebsockets-4.3.5/cmake/UseRPMTools.cmake000077500000000000000000000133611476025525100206170ustar00rootroot00000000000000# # - Find tools needed for building RPM Packages # on Linux systems and defines macro that helps to # build source or binary RPM, the MACRO assumes # CMake 2.4.x which includes CPack support. # CPack is used to build tar.gz source tarball # which may be used by a custom user-made spec file. # # - Define RPMTools_ADD_RPM_TARGETS which defines # two (top-level) CUSTOM targets for building # source and binary RPMs # # Those CMake macros are provided by the TSP Developer Team # https://savannah.nongnu.org/projects/tsp # IF (WIN32) MESSAGE(STATUS "RPM tools not available on Win32 systems") ENDIF(WIN32) IF (UNIX) # Look for RPM builder executable FIND_PROGRAM(RPMTools_RPMBUILD_EXECUTABLE NAMES rpmbuild PATHS "/usr/bin;/usr/lib/rpm" PATH_SUFFIXES bin DOC "The RPM builder tool") IF (RPMTools_RPMBUILD_EXECUTABLE) MESSAGE(STATUS "Looking for RPMTools... - found rpmuild is ${RPMTools_RPMBUILD_EXECUTABLE}") SET(RPMTools_RPMBUILD_FOUND "YES") GET_FILENAME_COMPONENT(RPMTools_BINARY_DIRS ${RPMTools_RPMBUILD_EXECUTABLE} PATH) ELSE (RPMTools_RPMBUILD_EXECUTABLE) SET(RPMTools_RPMBUILD_FOUND "NO") MESSAGE(STATUS "Looking for RPMTools... - rpmbuild NOT FOUND") ENDIF (RPMTools_RPMBUILD_EXECUTABLE) # Detect if CPack was included or not IF (NOT DEFINED "CPACK_PACKAGE_NAME") MESSAGE(FATAL_ERROR "CPack was not included, you should include CPack before Using RPMTools") ENDIF (NOT DEFINED "CPACK_PACKAGE_NAME") IF (RPMTools_RPMBUILD_FOUND) SET(RPMTools_FOUND TRUE) # # - first arg (ARGV0) is RPM name # - second arg (ARGV1) is the RPM spec file path [optional] # - third arg (ARGV2) is the RPM ROOT DIRECTORY used to build RPMs [optional] # MACRO(RPMTools_ADD_RPM_TARGETS RPMNAME) # # If no spec file is provided create a minimal one # IF ("${ARGV1}" STREQUAL "") SET(SPECFILE_PATH "${CMAKE_BINARY_DIR}/${RPMNAME}.spec") ELSE ("${ARGV1}" STREQUAL "") SET(SPECFILE_PATH "${ARGV1}") ENDIF("${ARGV1}" STREQUAL "") # Verify whether if RPM_ROOTDIR was provided or not IF("${ARGV2}" STREQUAL "") SET(RPM_ROOTDIR ${CMAKE_BINARY_DIR}/RPM) ELSE ("${ARGV2}" STREQUAL "") SET(RPM_ROOTDIR "${ARGV2}") ENDIF("${ARGV2}" STREQUAL "") MESSAGE(STATUS "RPMTools:: Using RPM_ROOTDIR=${RPM_ROOTDIR}") # Prepare RPM build tree FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}) FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}/tmp) FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}/BUILD) FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}/RPMS) FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}/SOURCES) FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}/SPECS) FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}/SRPMS) # # We check whether if the provided spec file is # to be configure or not. # IF ("${ARGV1}" STREQUAL "") SET(SPECFILE_PATH "${RPM_ROOTDIR}/SPECS/${RPMNAME}.spec") SET(SPECFILE_NAME "${RPMNAME}.spec") MESSAGE(STATUS "No Spec file given generate a minimal one --> ${RPM_ROOTDIR}/SPECS/${RPMNAME}.spec") FILE(WRITE ${RPM_ROOTDIR}/SPECS/${RPMNAME}.spec "# -*- rpm-spec -*- Summary: ${RPMNAME} Name: ${RPMNAME} Version: ${CPACK_PACKAGE_VERSION} Release: 1 License: Unknown Group: Unknown Source: ${CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{CPACK_PACKAGE_VERSION}-1-root BuildRequires: cmake %define prefix /opt/${RPMNAME}-%{version} %define rpmprefix $RPM_BUILD_ROOT%{prefix} %define srcdirname %{name}-%{version} %description ${RPMNAME} : No description for now %prep %setup -q -n %{srcdirname} %build cd .. rm -rf build_tree mkdir build_tree cd build_tree cmake -DCMAKE_INSTALL_PREFIX=%{rpmprefix} ../%{srcdirname} make %{?_smp_mflags} %install cd ../build_tree make install %clean rm -rf %{srcdirname} rm -rf build_tree %files %defattr(-,root,root,-) %dir %{prefix} %{prefix}/* %changelog * Wed Feb 28 2007 Erk Generated by CMake UseRPMTools macros" ) ELSE ("${ARGV1}" STREQUAL "") SET(SPECFILE_PATH "${ARGV1}") GET_FILENAME_COMPONENT(SPECFILE_EXT ${SPECFILE_PATH} EXT) IF ("${SPECFILE_EXT}" STREQUAL ".spec") # This is a 'ready-to-use' spec file which does not need to be CONFIGURED GET_FILENAME_COMPONENT(SPECFILE_NAME ${SPECFILE_PATH} NAME) MESSAGE(STATUS "Simple copy spec file <${SPECFILE_PATH}> --> <${RPM_ROOTDIR}/SPECS/${SPECFILE_NAME}>") CONFIGURE_FILE( ${SPECFILE_PATH} ${RPM_ROOTDIR}/SPECS/${SPECFILE_NAME} COPYONLY) ELSE ("${SPECFILE_EXT}" STREQUAL ".spec") # This is a to-be-configured spec file GET_FILENAME_COMPONENT(SPECFILE_NAME ${SPECFILE_PATH} NAME_WE) SET(SPECFILE_NAME "${SPECFILE_NAME}.spec") MESSAGE(STATUS "Configuring spec file <${SPECFILE_PATH}> --> <${RPM_ROOTDIR}/SPECS/${SPECFILE_NAME}>") CONFIGURE_FILE( ${SPECFILE_PATH} ${RPM_ROOTDIR}/SPECS/${SPECFILE_NAME} @ONLY) ENDIF ("${SPECFILE_EXT}" STREQUAL ".spec") ENDIF("${ARGV1}" STREQUAL "") ADD_CUSTOM_TARGET(${RPMNAME}_srpm COMMAND cpack -G TGZ --config CPackSourceConfig.cmake COMMAND ${CMAKE_COMMAND} -E copy ${CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.gz ${RPM_ROOTDIR}/SOURCES COMMAND ${RPMTools_RPMBUILD_EXECUTABLE} -bs --define=\"_topdir ${RPM_ROOTDIR}\" --buildroot=${RPM_ROOTDIR}/tmp ${RPM_ROOTDIR}/SPECS/${SPECFILE_NAME} ) ADD_CUSTOM_TARGET(${RPMNAME}_rpm COMMAND cpack -G TGZ --config CPackSourceConfig.cmake COMMAND ${CMAKE_COMMAND} -E copy ${CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.gz ${RPM_ROOTDIR}/SOURCES COMMAND ${RPMTools_RPMBUILD_EXECUTABLE} -bb --define=\"_topdir ${RPM_ROOTDIR}\" --buildroot=${RPM_ROOTDIR}/tmp ${RPM_ROOTDIR}/SPECS/${SPECFILE_NAME} ) ENDMACRO(RPMTools_ADD_RPM_TARGETS) ELSE (RPMTools_RPMBUILD_FOUND) SET(RPMTools FALSE) ENDIF (RPMTools_RPMBUILD_FOUND) ENDIF (UNIX) libwebsockets-4.3.5/cmake/libwebsockets-config-version.cmake.in000066400000000000000000000006021476025525100246450ustar00rootroot00000000000000set(PACKAGE_VERSION "@CPACK_PACKAGE_VERSION@") # Check whether the requested PACKAGE_FIND_VERSION is compatible if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}") set(PACKAGE_VERSION_COMPATIBLE FALSE) else() set(PACKAGE_VERSION_COMPATIBLE TRUE) if ("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}") set(PACKAGE_VERSION_EXACT TRUE) endif() endif() libwebsockets-4.3.5/cmake/libwebsockets-config.cmake.in000066400000000000000000000023101476025525100231600ustar00rootroot00000000000000# - Config file for lws # It defines the following variables # LIBWEBSOCKETS_INCLUDE_DIRS - include directories for lws # LIBWEBSOCKETS_LIBRARIES - libraries to link against # Get the path of the current file. get_filename_component(LWS_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) list(APPEND CMAKE_MODULE_PATH ${libwebsockets_DIR}) set(LIBWEBSOCKETS_INCLUDE_DIRS "@LWS__INCLUDE_DIRS@" "@LWS_PUBLIC_INCLUDES@") # Include the project Targets file, this contains definitions for IMPORTED targets. include(${LWS_CMAKE_DIR}/LibwebsocketsTargets.cmake) include(${LWS_CMAKE_DIR}/LwsCheckRequirements.cmake) # IMPORTED targets from LibwebsocketsTargets.cmake set(LIBWEBSOCKETS_LIBRARIES websockets websockets_shared) # These are additional include paths you will need foreach(item "${LIBWEBSOCKETS_INCLUDE_DIRS}") include_directories(${item}) set(CMAKE_REQUIRED_INCLUDES "${CMAKE_REQUIRED_INCLUDES}" ${item}) endforeach() # These are additional libs that lws wants your app to also link to foreach(item "@LIB_LIST_AT_END@") list(APPEND LIBWEBSOCKETS_DEP_LIBS ${item}) endforeach() # Move boilerplate for consuming cmake files into here include(CheckIncludeFile) include(CheckCSourceCompiles) set(requirements 1) libwebsockets-4.3.5/cmake/lws_config.h.in000066400000000000000000000207451476025525100203720ustar00rootroot00000000000000/* lws_config.h Generated from lws_config.h.in */ #ifndef NDEBUG #ifndef _DEBUG #define _DEBUG #endif #endif #define LWS_INSTALL_DATADIR "${CMAKE_INSTALL_PREFIX}/share" #define LWS_INSTALL_LIBDIR "${CMAKE_INSTALL_PREFIX}/${LWS_INSTALL_LIB_DIR}${LIB_SUFFIX}" #define LWS_LIBRARY_VERSION_MAJOR ${LWS_LIBRARY_VERSION_MAJOR} #define LWS_LIBRARY_VERSION_MINOR ${LWS_LIBRARY_VERSION_MINOR} #define LWS_LIBRARY_VERSION_PATCH_ELABORATED ${LWS_LIBRARY_VERSION_PATCH_ELABORATED} #define LWS_LIBRARY_VERSION_PATCH ${LWS_LIBRARY_VERSION_PATCH} /* LWS_LIBRARY_VERSION_NUMBER looks like 1005001 for e.g. version 1.5.1 */ #define LWS_LIBRARY_VERSION_NUMBER (LWS_LIBRARY_VERSION_MAJOR * 1000000) + \ (LWS_LIBRARY_VERSION_MINOR * 1000) + \ LWS_LIBRARY_VERSION_PATCH #define LWS_MAX_SMP ${LWS_MAX_SMP} #cmakedefine LWS_ESP_PLATFORM #cmakedefine LWS_LIBRARY_VERSION_NUMBER #cmakedefine LWS_EXT_PTHREAD_LIBRARIES #cmakedefine LWS_AVOID_SIGPIPE_IGN #cmakedefine LWS_BUILD_HASH "${LWS_BUILD_HASH}" #cmakedefine LWS_BUILTIN_GETIFADDRS #cmakedefine LWS_CLIENT_HTTP_PROXYING #cmakedefine LWS_DETECTED_PLAT_IOS #cmakedefine LWS_FALLBACK_GETHOSTBYNAME #cmakedefine LWS_HAS_INTPTR_T #cmakedefine LWS_HAS_GETOPT_LONG #cmakedefine LWS_HAVE__ATOI64 #cmakedefine LWS_HAVE_ATOLL #cmakedefine LWS_HAVE_BN_bn2binpad #cmakedefine LWS_HAVE_CLOCK_GETTIME #cmakedefine LWS_HAVE_EC_POINT_get_affine_coordinates #cmakedefine LWS_HAVE_EC_KEY_new_by_curve_name #cmakedefine LWS_HAVE_ECDSA_SIG_set0 #cmakedefine LWS_HAVE_EVP_MD_CTX_free #cmakedefine LWS_HAVE_EVP_aes_128_wrap #cmakedefine LWS_HAVE_EVP_aes_128_cfb8 #cmakedefine LWS_HAVE_EVP_aes_128_cfb128 #cmakedefine LWS_HAVE_EVP_aes_192_cfb8 #cmakedefine LWS_HAVE_EVP_aes_192_cfb128 #cmakedefine LWS_HAVE_EVP_aes_256_cfb8 #cmakedefine LWS_HAVE_EVP_aes_256_cfb128 #cmakedefine LWS_HAVE_EVP_aes_128_ofb #cmakedefine LWS_HAVE_EVP_aes_128_xts #cmakedefine LWS_HAVE_EVP_aes_128_ctr #cmakedefine LWS_HAVE_EVP_aes_128_ecb #cmakedefine LWS_HAVE_EVP_PKEY_new_raw_private_key #cmakedefine LWS_HAVE_EXECVPE #cmakedefine LWS_HAVE_LOCALTIME_R #cmakedefine LWS_HAVE_GMTIME_R #cmakedefine LWS_HAVE_CTIME_R #cmakedefine LWS_HAVE_GETGRGID_R #cmakedefine LWS_HAVE_GETGRNAM_R #cmakedefine LWS_HAVE_GETPWUID_R #cmakedefine LWS_HAVE_GETPWNAM_R #cmakedefine LWS_HAVE_LIBCAP #cmakedefine LWS_HAVE_HMAC_CTX_new #cmakedefine LWS_HAVE_MALLOC_H #cmakedefine LWS_HAVE_MALLOC_TRIM #cmakedefine LWS_HAVE_MALLOC_USABLE_SIZE #cmakedefine LWS_HAVE_mbedtls_md_setup #cmakedefine LWS_HAVE_mbedtls_net_init #cmakedefine LWS_HAVE_mbedtls_rsa_complete #cmakedefine LWS_HAVE_mbedtls_internal_aes_encrypt #cmakedefine LWS_HAVE_mbedtls_ssl_conf_alpn_protocols #cmakedefine LWS_HAVE_mbedtls_ssl_get_alpn_protocol #cmakedefine LWS_HAVE_mbedtls_ssl_conf_sni #cmakedefine LWS_HAVE_mbedtls_ssl_set_hs_ca_chain #cmakedefine LWS_HAVE_mbedtls_ssl_set_hs_own_cert #cmakedefine LWS_HAVE_mbedtls_ssl_set_hs_authmode #cmakedefine LWS_HAVE_mbedtls_ssl_set_verify #cmakedefine LWS_HAVE_mbedtls_x509_crt_parse_file #cmakedefine LWS_HAVE_MBEDTLS_NET_SOCKETS #cmakedefine LWS_HAVE_MBEDTLS_SSL_NEW_SESSION_TICKET #cmakedefine LWS_HAVE_MBEDTLS_AUTH_KEY_ID #cmakedefine LWS_HAVE_NEW_UV_VERSION_H #cmakedefine LWS_HAVE_OPENSSL_ECDH_H #cmakedefine LWS_HAVE_OPENSSL_STACK #cmakedefine LWS_HAVE_PIPE2 #cmakedefine LWS_HAVE_EVENTFD #cmakedefine LWS_HAVE_PTHREAD_H #cmakedefine LWS_HAVE_RSA_SET0_KEY #cmakedefine LWS_HAVE_RSA_verify_pss_mgf1 #cmakedefine LWS_HAVE_SSL_CTX_get0_certificate #cmakedefine LWS_HAVE_SSL_CTX_load_verify_file #cmakedefine LWS_HAVE_SSL_CTX_load_verify_dir #cmakedefine LWS_HAVE_SSL_CTX_set1_param #cmakedefine LWS_HAVE_SSL_CTX_set_ciphersuites #cmakedefine LWS_HAVE_SSL_EXTRA_CHAIN_CERTS #cmakedefine LWS_HAVE_SSL_get0_alpn_selected #cmakedefine LWS_HAVE_SSL_CTX_EVP_PKEY_new_raw_private_key #cmakedefine LWS_HAVE_SSL_set_alpn_protos #cmakedefine LWS_HAVE_SSL_SET_INFO_CALLBACK #cmakedefine LWS_HAVE_SSL_SESSION_set_time #cmakedefine LWS_HAVE_SSL_SESSION_up_ref #cmakedefine LWS_HAVE__STAT32I64 #cmakedefine LWS_HAVE_STDINT_H #cmakedefine LWS_HAVE_SYS_CAPABILITY_H #cmakedefine LWS_HAVE_TIMEGM #cmakedefine LWS_HAVE_TLS_CLIENT_METHOD #cmakedefine LWS_HAVE_TLSV1_2_CLIENT_METHOD #cmakedefine LWS_HAVE_SUSECONDS_T #cmakedefine LWS_HAVE_UV_VERSION_H #cmakedefine LWS_HAVE_VFORK #cmakedefine LWS_HAVE_X509_get_key_usage #cmakedefine LWS_HAVE_X509_VERIFY_PARAM_set1_host #cmakedefine LWS_LIBRARY_VERSION "${LWS_LIBRARY_VERSION}" #define LWS_LOGGING_BITFIELD_CLEAR ${LWS_LOGGING_BITFIELD_CLEAR} #define LWS_LOGGING_BITFIELD_SET ${LWS_LOGGING_BITFIELD_SET} #cmakedefine LWS_LOG_TAG_LIFECYCLE #cmakedefine LWS_MINGW_SUPPORT #cmakedefine LWS_NO_CLIENT #cmakedefine LWS_NO_DAEMONIZE #cmakedefine LWS_OPENSSL_CLIENT_CERTS "${LWS_OPENSSL_CLIENT_CERTS}" #cmakedefine LWS_OPENSSL_SUPPORT #cmakedefine LWS_PLAT_OPTEE #cmakedefine LWS_PLAT_UNIX #cmakedefine LWS_PLAT_FREERTOS #cmakedefine LWS_ROLE_CGI #cmakedefine LWS_ROLE_DBUS #cmakedefine LWS_ROLE_H1 #cmakedefine LWS_ROLE_H2 #cmakedefine LWS_ROLE_RAW #cmakedefine LWS_ROLE_RAW_FILE #cmakedefine LWS_ROLE_RAW_PROXY #cmakedefine LWS_ROLE_WS #cmakedefine LWS_ROLE_MQTT #cmakedefine LWS_SHA1_USE_OPENSSL_NAME #cmakedefine LWS_SSL_CLIENT_USE_OS_CA_CERTS #cmakedefine LWS_SSL_SERVER_WITH_ECDH_CERT #cmakedefine LWS_SUPPRESS_DEPRECATED_API_WARNINGS #cmakedefine LWS_TLS_LOG_PLAINTEXT_RX #cmakedefine LWS_TLS_LOG_PLAINTEXT_TX #cmakedefine LWS_WITH_ABSTRACT #cmakedefine LWS_WITH_ACCESS_LOG #cmakedefine LWS_WITH_ACME #cmakedefine LWS_WITH_ALSA #cmakedefine LWS_WITH_SYS_ASYNC_DNS #cmakedefine LWS_WITH_BORINGSSL #cmakedefine LWS_WITH_CGI #cmakedefine LWS_WITH_CONMON #cmakedefine LWS_WITH_COSE #cmakedefine LWS_WITH_CUSTOM_HEADERS #cmakedefine LWS_WITH_DEPRECATED_LWS_DLL #cmakedefine LWS_WITH_DETAILED_LATENCY #cmakedefine LWS_WITH_DIR #cmakedefine LWS_WITH_DRIVERS #cmakedefine LWS_WITH_ESP32 #cmakedefine LWS_HAVE_EVBACKEND_LINUXAIO #cmakedefine LWS_HAVE_EVBACKEND_IOURING #cmakedefine LWS_WITH_EXTERNAL_POLL #cmakedefine LWS_WITH_FILE_OPS #cmakedefine LWS_WITH_FSMOUNT #cmakedefine LWS_WITH_FTS #cmakedefine LWS_WITH_GENCRYPTO #cmakedefine LWS_WITH_GENERIC_SESSIONS #cmakedefine LWS_WITH_GLIB #cmakedefine LWS_WITH_GTK #cmakedefine LWS_WITH_HTTP2 #cmakedefine LWS_WITH_HTTP_BASIC_AUTH #cmakedefine LWS_WITH_HTTP_BROTLI #cmakedefine LWS_HTTP_HEADERS_ALL #cmakedefine LWS_WITH_HTTP_PROXY #cmakedefine LWS_WITH_HTTP_STREAM_COMPRESSION #cmakedefine LWS_WITH_HTTP_UNCOMMON_HEADERS #cmakedefine LWS_WITH_IPV6 #cmakedefine LWS_WITH_JOSE #cmakedefine LWS_WITH_CBOR #cmakedefine LWS_WITH_CBOR_FLOAT #cmakedefine LWS_WITH_LEJP #cmakedefine LWS_WITH_LIBEV #cmakedefine LWS_WITH_LIBEVENT #cmakedefine LWS_WITH_LIBUV #cmakedefine LWS_WITH_SDEVENT #cmakedefine LWS_WITH_LWSAC #cmakedefine LWS_LOGS_TIMESTAMP #cmakedefine LWS_WITH_MBEDTLS #cmakedefine LWS_WITH_MINIZ #cmakedefine LWS_WITH_NETLINK #cmakedefine LWS_WITH_NETWORK #cmakedefine LWS_WITH_NO_LOGS #cmakedefine LWS_WITH_CACHE_NSCOOKIEJAR #cmakedefine LWS_WITH_CLIENT #cmakedefine LWS_WITHOUT_EXTENSIONS #cmakedefine LWS_WITH_SERVER #cmakedefine LWS_WITH_SPAWN #cmakedefine LWS_WITH_PEER_LIMITS #cmakedefine LWS_WITH_PLUGINS #cmakedefine LWS_WITH_PLUGINS_BUILTIN #cmakedefine LWS_WITH_POLARSSL #cmakedefine LWS_WITH_POLL #cmakedefine LWS_WITH_RANGES #cmakedefine LWS_WITH_RFC6724 #cmakedefine LWS_WITH_SECURE_STREAMS #cmakedefine LWS_WITH_SECURE_STREAMS_CPP #cmakedefine LWS_WITH_SECURE_STREAMS_SYS_AUTH_API_AMAZON_COM #cmakedefine LWS_WITH_SECURE_STREAMS_PROXY_API #cmakedefine LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY #cmakedefine LWS_WITH_SECURE_STREAMS_AUTH_SIGV4 #cmakedefine LWS_WITH_SECURE_STREAMS_BUFFER_DUMP #cmakedefine LWS_WITH_SS_DIRECT_PROTOCOL_STR #cmakedefine LWS_WITH_SELFTESTS #cmakedefine LWS_WITH_SEQUENCER #cmakedefine LWS_WITH_SERVER_STATUS #cmakedefine LWS_WITH_SYS_SMD #cmakedefine LWS_WITH_SMTP #cmakedefine LWS_WITH_SOCKS5 #cmakedefine LWS_WITH_STATEFUL_URLDECODE #cmakedefine LWS_WITH_STATS #cmakedefine LWS_WITH_STRUCT_SQLITE3 #cmakedefine LWS_WITH_STRUCT_JSON #cmakedefine LWS_WITH_SUL_DEBUGGING #cmakedefine LWS_WITH_SQLITE3 #cmakedefine LWS_WITH_SYS_DHCP_CLIENT #cmakedefine LWS_WITH_SYS_FAULT_INJECTION #cmakedefine LWS_WITH_SYS_METRICS #cmakedefine LWS_WITH_SYS_NTPCLIENT #cmakedefine LWS_WITH_SYS_STATE #cmakedefine LWS_WITH_THREADPOOL #cmakedefine LWS_WITH_TLS #cmakedefine LWS_WITH_TLS_JIT_TRUST #cmakedefine LWS_WITH_TLS_SESSIONS #cmakedefine LWS_WITH_UDP #cmakedefine LWS_WITH_ULOOP #cmakedefine LWS_WITH_UNIX_SOCK #cmakedefine LWS_WITH_ZIP_FOPS #cmakedefine USE_OLD_CYASSL #cmakedefine USE_WOLFSSL #cmakedefine LWS_WITH_EVENT_LIBS #cmakedefine LWS_WITH_EVLIB_PLUGINS #cmakedefine LWS_WITH_LIBUV_INTERNAL #cmakedefine LWS_WITH_PLUGINS_API #cmakedefine LWS_HAVE_RTA_PREF libwebsockets-4.3.5/cmake/lws_config_private.h.in000066400000000000000000000061441476025525100221210ustar00rootroot00000000000000/* lws_config_private.h.in. Private compilation options. */ #ifndef NDEBUG #ifndef _DEBUG #define _DEBUG #endif #endif #cmakedefine LWIP_PROVIDE_ERRNO /* Define to 1 to use CyaSSL as a replacement for OpenSSL. * LWS_OPENSSL_SUPPORT needs to be set also for this to work. */ #cmakedefine USE_CYASSL /* Define to 1 if you have the `fork' function. */ #cmakedefine LWS_HAVE_FORK /* Define to 1 if you have the `getenv' function. */ #cmakedefine LWS_HAVE_GETENV /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_IN6ADDR_H /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #cmakedefine LWS_HAVE_MALLOC /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_NETINET_IN_H /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_STDINT_H /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_STDLIB_H /* Define to 1 if you have the `strerror' function. */ #cmakedefine LWS_HAVE_STRERROR /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_STRING_H /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_SYS_PRCTL_H /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_SYS_RESOURCE_H /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_SYS_SOCKET_H /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_SYS_SOCKIO_H /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_UNISTD_H #cmakedefine LWS_HAVE_TCP_USER_TIMEOUT /* Define to 1 if you have the `vfork' function. */ #cmakedefine LWS_HAVE_VFORK /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_VFORK_H /* Define to 1 if `fork' works. */ #cmakedefine LWS_HAVE_WORKING_FORK /* Define to 1 if `vfork' works. */ #cmakedefine LWS_HAVE_WORKING_VFORK /* Define to 1 if execvpe() exists */ #cmakedefine LWS_HAVE_EXECVPE /* Define to 1 if you have the header file. */ #cmakedefine LWS_HAVE_ZLIB_H #cmakedefine LWS_HAVE_GETLOADAVG /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR // We're not using libtool /* Define to rpl_malloc if the replacement function should be used. */ #cmakedefine malloc /* Define to rpl_realloc if the replacement function should be used. */ #cmakedefine realloc /* Define to 1 if we have getifaddrs */ #cmakedefine LWS_HAVE_GETIFADDRS /* Define if the inline keyword doesn't exist. */ #cmakedefine inline ${inline} #cmakedefine LWS_WITH_ZLIB #cmakedefine LWS_HAS_PTHREAD_SETNAME_NP /* Defined if you have the header file. */ #cmakedefine LWS_HAVE_INTTYPES_H libwebsockets-4.3.5/component.mk000066400000000000000000000031731476025525100167310ustar00rootroot00000000000000COMPONENT_DEPENDS := mbedtls openssl #COMPONENT_ADD_INCLUDEDIRS := ../../../../../../../../../../../../../../../../../../../../$(COMPONENT_BUILD_DIR)/include COMPONENT_OWNBUILDTARGET := 1 CROSS_PATH1 := $(shell which xtensa-esp32-elf-gcc ) CROSS_PATH := $(shell dirname $(CROSS_PATH1) )/.. # detect MSYS2 environment and set generator flag if found # also set executable extension to .exe so that tools can be properly found # and disable bundled zlib MSYS_VERSION = $(if $(findstring Msys, $(shell uname -o)),$(word 1, $(subst ., ,$(shell uname -r))),0) ifneq ($(MSYS_VERSION),0) MSYS_FLAGS = -DLWS_WITH_BUNDLED_ZLIB=0 -DEXECUTABLE_EXT=.exe -G'MSYS Makefiles' endif # -DNDEBUG=1 after cflags stops debug etc being built .PHONY: build build: cd $(COMPONENT_BUILD_DIR) ; \ echo "doing lws cmake" ; \ cmake $(COMPONENT_PATH) -DLWS_C_FLAGS="$(CFLAGS) -DNDEBUG=1" \ -DIDF_PATH=$(IDF_PATH) \ -DCROSS_PATH=$(CROSS_PATH) \ -DBUILD_DIR_BASE=$(BUILD_DIR_BASE) \ -DCMAKE_TOOLCHAIN_FILE=$(COMPONENT_PATH)/contrib/cross-esp32.cmake \ -DCMAKE_BUILD_TYPE=RELEASE \ -DLWS_MBEDTLS_INCLUDE_DIRS="${IDF_PATH}/components/openssl/include;${IDF_PATH}/components/mbedtls/mbedtls/include;${IDF_PATH}/components/mbedtls/port/include" \ -DLWS_WITH_STATS=0 \ -DLWS_WITH_HTTP2=1 \ -DLWS_WITH_RANGES=1 \ -DLWS_WITH_ACME=1 \ -DLWS_WITH_ZLIB=1 \ -DLWS_WITH_ZIP_FOPS=1 \ -DZLIB_LIBRARY=$(BUILD_DIR_BASE)/zlib/libzlib.a \ -DZLIB_INCLUDE_DIR=$(COMPONENT_PATH)/../zlib \ -DLWS_WITH_ESP32=1 \ $(MSYS_FLAGS) ; \ make && \ cp ${COMPONENT_BUILD_DIR}/lib/libwebsockets.a ${COMPONENT_BUILD_DIR}/liblibwebsockets.a clean: myclean myclean: rm -rf ./build libwebsockets-4.3.5/contrib/000077500000000000000000000000001476025525100160325ustar00rootroot00000000000000libwebsockets-4.3.5/contrib/Android.mk000066400000000000000000000015501476025525100177440ustar00rootroot00000000000000# example Android Native Library makefile # contributed by Gregory Junker LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := libwebsockets LOCAL_CFLAGS := -DLWS_BUILTIN_GETIFADDRS LWS_LIB_PATH := ../../../shared/libwebsockets/lib LOCAL_C_INCLUDES:= $(LOCAL_PATH)/$(LWS_LIB_PATH) LOCAL_SRC_FILES := \ $(LWS_LIB_PATH)/base64-decode.c \ $(LWS_LIB_PATH)/client.c \ $(LWS_LIB_PATH)/client-handshake.c \ $(LWS_LIB_PATH)/client-parser.c \ $(LWS_LIB_PATH)/daemonize.c \ $(LWS_LIB_PATH)/extension.c \ $(LWS_LIB_PATH)/extension-deflate-frame.c \ $(LWS_LIB_PATH)/extension-deflate-stream.c \ $(LWS_LIB_PATH)/getifaddrs.c \ $(LWS_LIB_PATH)/handshake.c \ $(LWS_LIB_PATH)/libwebsockets.c \ $(LWS_LIB_PATH)/md5.c \ $(LWS_LIB_PATH)/output.c \ $(LWS_LIB_PATH)/parsers.c \ $(LWS_LIB_PATH)/sha-1.c include $(BUILD_STATIC_LIBRARY) libwebsockets-4.3.5/contrib/abi/000077500000000000000000000000001476025525100165655ustar00rootroot00000000000000libwebsockets-4.3.5/contrib/abi/README.md000066400000000000000000000040101476025525100200370ustar00rootroot00000000000000ABI Compatility Tracking ======================== This directory contains files that can be used to generate an ABI compatibility timeline for libwebsockets. This gives users an idea of where the library has changed and can be used by the developers to see when incompatible changes have been introduced and either increase the library SO version or fix the changes. The tools used are the abi-\* family available at https://github.com/lvc/ and some example output is here: http://abi-laboratory.pro/tracker/timeline/libuv/ The tools download existing source tarballs and git repository to generate this data, so past versions are compared and in-development code can be compared as well. Although the application is not being included here, FYI the license is dual LGPL2 / GPL2 at your choice. Installation ------------ The abi monitoring stuff is now packaged in, eg, fedora, which is a lot easier than using the helper script. ``` # dnf install abi-tracker vtable-dumper Otherwise, the author provides an "easy way" to install the various tools he provides: git clone https://github.com/lvc/installer cd installer make prefix=/usr/local target=abi-tracker It will also list any dependencies that you need to install through normal means. (Although in the case of needing "elfutils-libelf-devel", it may crash during install of vtable-dumper without giving a nice list) Generating the output --------------------- Use the `lws-abi-update.sh` script to download the source files, build them and generate the output html. The output can be deployed to a directory on a web server for example. Modify the commented line in lws-abi-update.sh to do this. As it is configured, lws-abi-update.sh will only download new source - ones that it hasn't built before - so is suitable for use with a cron job. Viewing the output ------------------ The best place to start looking at the data is the `timeline/libwebsockets` directory. If your path is on a web server, navigate there, otherwise you could try: lynx timeline/libwebsockets/ libwebsockets-4.3.5/contrib/abi/libwebsockets.json000066400000000000000000000176611476025525100223330ustar00rootroot00000000000000{ "Name": "libwebsockets", "SourceUrl": "https://github.com/warmcat/libwebsockets/releases", "Git": "https://github.com/warmcat/libwebsockets", "Versions": [ { "Number": "current", "Installed": "installed/libwebsockets/current", "Source": "src/libwebsockets/current", "Changelog": "On", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "3.0.0", "Installed": "installed/libwebsockets/3.0.0", "Source": "src/libwebsockets/3.0.0/libwebsockets-3.0.0.tar.gz", "Changelog": "changelog", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "2.4.2", "Installed": "installed/libwebsockets/2.4.2", "Source": "src/libwebsockets/2.4.2/libwebsockets-2.4.2.tar.gz", "Changelog": "changelog", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "2.4.1", "Installed": "installed/libwebsockets/2.4.1", "Source": "src/libwebsockets/2.4.1/libwebsockets-2.4.1.tar.gz", "Changelog": "changelog", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "2.4.0", "Installed": "installed/libwebsockets/2.4.0", "Source": "src/libwebsockets/2.4.0/libwebsockets-2.4.0.tar.gz", "Changelog": "changelog", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "2.3.0", "Installed": "installed/libwebsockets/2.3.0", "Source": "src/libwebsockets/2.3.0/libwebsockets-2.3.0.tar.gz", "Changelog": "changelog", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "2.2.2", "Installed": "installed/libwebsockets/2.2.2", "Source": "src/libwebsockets/2.2.2/libwebsockets-2.2.2.tar.gz", "Changelog": "changelog", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "2.2.1", "Installed": "installed/libwebsockets/2.2.1", "Source": "src/libwebsockets/2.2.1/libwebsockets-2.2.1.tar.gz", "Changelog": "changelog", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "2.2.0", "Installed": "installed/libwebsockets/2.2.0", "Source": "src/libwebsockets/2.2.0/libwebsockets-2.2.0.tar.gz", "Changelog": "changelog", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "2.1.1", "Installed": "installed/libwebsockets/2.1.1", "Source": "src/libwebsockets/2.1.1/libwebsockets-2.1.1.tar.gz", "Changelog": "changelog", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "2.1.0", "Installed": "installed/libwebsockets/2.1.0", "Source": "src/libwebsockets/2.1.0/libwebsockets-2.1.0.tar.gz", "Changelog": "changelog", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "1.7.9", "Installed": "installed/libwebsockets/1.7.9", "Source": "src/libwebsockets/1.7.9/libwebsockets-1.7.9.tar.gz", "Changelog": "changelog", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "1.7.8", "Installed": "installed/libwebsockets/1.7.8", "Source": "src/libwebsockets/1.7.8/libwebsockets-1.7.8.tar.gz", "Changelog": "changelog", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "1.7.7", "Installed": "installed/libwebsockets/1.7.7", "Source": "src/libwebsockets/1.7.7/libwebsockets-1.7.7.tar.gz", "Changelog": "changelog", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "1.7.6", "Installed": "installed/libwebsockets/1.7.6", "Source": "src/libwebsockets/1.7.6/libwebsockets-1.7.6.tar.gz", "Changelog": "changelog", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "1.7.5", "Installed": "installed/libwebsockets/1.7.5", "Source": "src/libwebsockets/1.7.5/libwebsockets-1.7.5.tar.gz", "Changelog": "changelog", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "1.7.4", "Installed": "installed/libwebsockets/1.7.4", "Source": "src/libwebsockets/1.7.4/libwebsockets-1.7.4.tar.gz", "Changelog": "Off", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "1.7.3", "Installed": "installed/libwebsockets/1.7.3", "Source": "src/libwebsockets/1.7.3/libwebsockets-1.7.3.tar.gz", "Changelog": "Off", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "1.7.2", "Installed": "installed/libwebsockets/1.7.2", "Source": "src/libwebsockets/1.7.2/libwebsockets-1.7.2.tar.gz", "Changelog": "Off", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "1.7.1", "Installed": "installed/libwebsockets/1.7.1", "Source": "src/libwebsockets/1.7.1/libwebsockets-1.7.1.tar.gz", "Changelog": "Off", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "1.7.0", "Installed": "installed/libwebsockets/1.7.0", "Source": "src/libwebsockets/1.7.0/libwebsockets-1.7.0.tar.gz", "Changelog": "Off", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "1.6.3", "Installed": "installed/libwebsockets/1.6.3", "Source": "src/libwebsockets/1.6.3/libwebsockets-1.6.3.tar.gz", "Changelog": "Off", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "1.6.2", "Installed": "installed/libwebsockets/1.6.2", "Source": "src/libwebsockets/1.6.2/libwebsockets-1.6.2.tar.gz", "Changelog": "Off", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "1.6.1", "Installed": "installed/libwebsockets/1.6.1", "Source": "src/libwebsockets/1.6.1/libwebsockets-1.6.1.tar.gz", "Changelog": "Off", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }, { "Number": "1.5.1", "Installed": "installed/libwebsockets/1.5.1", "Source": "src/libwebsockets/1.5.1/libwebsockets-1.5.1.tar.gz", "Changelog": "Off", "HeadersDiff": "On", "PkgDiff": "Off", "ABIView": "Off", "ABIDiff": "Off" }] } libwebsockets-4.3.5/contrib/abi/lws-abi-update.sh000077500000000000000000000003611476025525100217420ustar00rootroot00000000000000#!/bin/sh if [ ! -z "$1" ] ; then OUT=$1 else OUT="/tmp/lws-abi-track-htdocs" fi D=`dirname $0` if [ ! -z "$D" ] ; then D=$D/ fi J=$D"libwebsockets.json" abi-monitor -get -build-new $J abi-tracker -build $J abi-tracker -deploy $OUT $J libwebsockets-4.3.5/contrib/cross-aarch64-android.cmake000066400000000000000000000042611476025525100230340ustar00rootroot00000000000000# # CMake Toolchain file for crosscompiling Android / aarch64 # # This can be used when running cmake in the following way: # cd build/ # cmake .. -DCMAKE_TOOLCHAIN_FILE=contrib/cross-aarch64-android.cmake # set(ANDROID_API_VER 24) set(ABARCH1 arm64) set(CMAKE_SYSTEM_PROCESSOR aarch64) set(NDK /opt/android/ndk/21.1.6352462/) set(CROSS_SYSROOT "${NDK}/platforms/android-${ANDROID_API_VER}/arch-${ABARCH1}") set(BUILD_ARCH linux-x86_64) # # Rest should be computed from the above # set(TC_PATH ${NDK}/toolchains/llvm/prebuilt/${BUILD_ARCH}) set(TC_BASE ${TC_PATH}/bin/${CMAKE_SYSTEM_PROCESSOR}-linux-android) set(PLATFORM android) set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_C_COMPILER "${TC_BASE}${ANDROID_API_VER}-clang") set(CMAKE_CXX_COMPILER "${TC_BASE}${ANDROID_API_VER}-clang++") set(CMAKE_STAGING_PREFIX "${CROSS_SYSROOT}") # # Different build system distros set release optimization level to different # things according to their local policy, eg, Fedora is -O2 and Ubuntu is -O3 # here. Actually the build system's local policy is completely unrelated to # our desire for cross-build release optimization policy for code built to run # on a completely different target than the build system itself. # # Since this goes last on the compiler commandline we have to override it to a # sane value for cross-build here. Notice some gcc versions enable broken # optimizations with -O3. # if (CMAKE_BUILD_TYPE MATCHES RELEASE OR CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES release) set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O2") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2") endif() #-nostdlib SET(CMAKE_C_FLAGS "-DGCC_VER=\"\\\"$(GCC_VER)\\\"\" -DARM64=1 -D__LP64__=1 -Os -g3 -fpie -mstrict-align -fPIC -ffunction-sections -fdata-sections -D__ANDROID_API__=${ANDROID_API_VER} -Wno-pointer-sign" CACHE STRING "" FORCE) set(CMAKE_FIND_ROOT_PATH "${CROSS_SYSROOT}") # Adjust the default behavior of the FIND_XXX() commands: # search programs in the host environment only. set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # Search headers and libraries in the target environment only. set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) libwebsockets-4.3.5/contrib/cross-aarch64-qnx.cmake000066400000000000000000000034771476025525100222320ustar00rootroot00000000000000# # CMake Toolchain file for crosscompiling aarch64 for QNX. # # This can be used when running cmake in the following way: # cd build/ # cmake .. -DCMAKE_TOOLCHAIN_FILE=../cross-aarch64-qnx.cmake # # adapt to your toolchain path set(CROSS_PATH /var/toolchain/qnx5.4/host/linux/x86_64/usr) # Target operating system name. set(CMAKE_SYSTEM_NAME QNX) set(BUILD_SHARED_LIBS OFF) set(CMAKE_SYSTEM_PROCESSOR aarch64) # Name of C compiler. set(CMAKE_C_COMPILER "${CROSS_PATH}/bin/ntoaarch64-gcc") set(CMAKE_CXX_COMPILER "${CROSS_PATH}/bin/ntoaarch64-g++") set(CMAKE_C_FLAGS "-Wno-error") set(CMAKE_FIND_ROOT_PATH "${CROSS_PATH}") # # Different build system distros set release optimization level to different # things according to their local policy, eg, Fedora is -O2 and Ubuntu is -O3 # here. Actually the build system's local policy is completely unrelated to # our desire for cross-build release optimization policy for code built to run # on a completely different target than the build system itself. # # Since this goes last on the compiler commandline we have to override it to a # sane value for cross-build here. Notice some gcc versions enable broken # optimizations with -O3. # if (CMAKE_BUILD_TYPE MATCHES RELEASE OR CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES release) set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O2") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2") endif() # Where to look for the target environment. (More paths can be added here) set(CMAKE_FIND_ROOT_PATH "${CROSS_PATH}") # Adjust the default behavior of the FIND_XXX() commands: # search programs in the host environment only. set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # Search headers and libraries in the target environment only. set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) libwebsockets-4.3.5/contrib/cross-aarch64.cmake000066400000000000000000000036631476025525100214230ustar00rootroot00000000000000# # CMake Toolchain file for crosscompiling on ARM. # # This can be used when running cmake in the following way: # cd build/ # cmake .. -DCMAKE_TOOLCHAIN_FILE=../cross-arm-linux-gnueabihf.cmake # # Target operating system name. set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR aarch64) # Name of C compiler. set(CMAKE_C_COMPILER "aarch64-linux-gnu-gcc") set(CMAKE_CXX_COMPILER "aarch64-linux-gnu-g++") # # Different build system distros set release optimization level to different # things according to their local policy, eg, Fedora is -O2 and Ubuntu is -O3 # here. Actually the build system's local policy is completely unrelated to # our desire for cross-build release optimization policy for code built to run # on a completely different target than the build system itself. # # Since this goes last on the compiler commandline we have to override it to a # sane value for cross-build here. Notice some gcc versions enable broken # optimizations with -O3. # if (CMAKE_BUILD_TYPE MATCHES RELEASE OR CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES release) set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O2") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2") endif() #-nostdlib SET(CMAKE_C_FLAGS "-DGCC_VER=\"\\\"$(GCC_VER)\\\"\" -DARM64=1 -D__LP64__=1 -Os -g3 -fpie -mstrict-align -DOPTEE_DEV_KIT=../../../../out/arm-plat-hikey/export-ta_arm64/include -I../../../../lib/libutee/include -fPIC -ffunction-sections -fdata-sections -I../../../../core/include" CACHE STRING "" FORCE) # Where to look for the target environment. (More paths can be added here) set(CMAKE_FIND_ROOT_PATH "/projects/aist-tb/arm64-tc/") # Adjust the default behavior of the FIND_XXX() commands: # search programs in the host environment only. set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # Search headers and libraries in the target environment only. set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) libwebsockets-4.3.5/contrib/cross-arm-android-gnueabi.cmake000066400000000000000000000033531476025525100237740ustar00rootroot00000000000000# # CMake Toolchain file for crosscompiling on ARM. # # This can be used when running cmake in the following way: # cd build/ # cmake .. -DCMAKE_TOOLCHAIN_FILE=../cross-arm-linux-gnueabihf.cmake # set(CROSS_PATH /opt/libwebsockets_android/android-toolchain-arm) # Target operating system name. set(CMAKE_SYSTEM_NAME Android) # Target build dynamic libs. set(BUILD_SHARED_LIBS ON) # Name of C compiler. set(CMAKE_C_COMPILER "${CROSS_PATH}/bin/arm-linux-androideabi-gcc") set(CMAKE_CXX_COMPILER "${CROSS_PATH}/bin/arm-linux-androideabi-g++") # # Different build system distros set release optimization level to different # things according to their local policy, eg, Fedora is -O2 and Ubuntu is -O3 # here. Actually the build system's local policy is completely unrelated to # our desire for cross-build release optimization policy for code built to run # on a completely different target than the build system itself. # # Since this goes last on the compiler commandline we have to override it to a # sane value for cross-build here. Notice some gcc versions enable broken # optimizations with -O3. # if (CMAKE_BUILD_TYPE MATCHES RELEASE OR CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES release) set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O2") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2") endif() # Where to look for the target environment. (More paths can be added here) set(CMAKE_FIND_ROOT_PATH "${CROSS_PATH}") # Adjust the default behavior of the FIND_XXX() commands: # search programs in the host environment only. set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # Search headers and libraries in the target environment only. set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) libwebsockets-4.3.5/contrib/cross-arm-linux-gnueabihf.cmake000066400000000000000000000032771476025525100240360ustar00rootroot00000000000000# # CMake Toolchain file for crosscompiling on ARM. # # This can be used when running cmake in the following way: # cd build/ # cmake .. -DCMAKE_TOOLCHAIN_FILE=../cross-arm-linux-gnueabihf.cmake # set(CROSS_PATH /opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.02-01-20130221_linux) # Target operating system name. set(CMAKE_SYSTEM_NAME Linux) # Name of C compiler. set(CMAKE_C_COMPILER "${CROSS_PATH}/bin/arm-linux-gnueabihf-gcc") set(CMAKE_CXX_COMPILER "${CROSS_PATH}/bin/arm-linux-gnueabihf-g++") # # Different build system distros set release optimization level to different # things according to their local policy, eg, Fedora is -O2 and Ubuntu is -O3 # here. Actually the build system's local policy is completely unrelated to # our desire for cross-build release optimization policy for code built to run # on a completely different target than the build system itself. # # Since this goes last on the compiler commandline we have to override it to a # sane value for cross-build here. Notice some gcc versions enable broken # optimizations with -O3. # if (CMAKE_BUILD_TYPE MATCHES RELEASE OR CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES release) set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O2") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2") endif() # Where to look for the target environment. (More paths can be added here) set(CMAKE_FIND_ROOT_PATH "${CROSS_PATH}") # Adjust the default behavior of the FIND_XXX() commands: # search programs in the host environment only. set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # Search headers and libraries in the target environment only. set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) libwebsockets-4.3.5/contrib/cross-atmel.cmake000066400000000000000000000123241476025525100212670ustar00rootroot00000000000000# # CMake Toolchain file for crosscompiling on Atmel Arm products # # To build without tls # # cd build/ # cmake .. -DCMAKE_INSTALL_PREFIX:PATH=/opt/atmel/cross-root \ # -DCMAKE_TOOLCHAIN_FILE=../contrib/cross-atmel.cmake \ # -DLWS_PLAT_FREERTOS=1 \ # -DLWS_WITH_ZLIB=0 \ # -DLWS_WITHOUT_EXTENSIONS=1 \ # -DLWS_WITH_ZIP_FOPS=0 \ # -DLWS_WITH_HTTP_STREAM_COMPRESSION=0 \ # -DLWS_WITH_MBEDTLS=0 \ # -DLWS_WITH_SSL=0 \ # -DLWS_WITH_FILE_OPS=0 # # I had to edit /opt/xdk-asf-3.48.0/thirdparty/lwip/lwip-port-1.4.1-dev/sam/include/arch/cc.h # to comment out #define LWIP_PROVIDE_ERRNO # if your sdk lives somewhere else, this is the only place that should need changing set(CROSS_BASE /opt/arm-none-eabi) set(SDK_BASE /opt/xdk-asf-3.48.0) set(CROSS_PATH ${CROSS_BASE}/bin/arm-none-eabi) set(LWIP_VER 1.4.1-dev) set(FREERTOS_VER 10.0.0) # # Target operating system name. set(CMAKE_SYSTEM_NAME Generic) # Name of C compiler. set(CMAKE_C_COMPILER "${CROSS_PATH}-gcc") # # cmake believes we should link a NOP test program OK, but since we're # baremetal, that's not true in our case. It tries to build this test # with the cross compiler, but with no args on it, and it fails. # So disable this test for this toolchain (we'll find out soon enough # if we actually can't compile anything) set(CMAKE_C_COMPILER_WORKS 1) set(CMAKE_CXX_COMPILER_WORKS 1) # # similarly we're building a .a like this, we can't actually build # complete test programs to probe api availability... so force some # key ones set(LWS_HAVE_mbedtls_ssl_conf_alpn_protocols 1) set(LWS_HAVE_mbedtls_ssl_conf_alpn_protocols 1) set(LWS_HAVE_mbedtls_ssl_get_alpn_protocol 1) set(LWS_HAVE_mbedtls_ssl_conf_sni 1) set(LWS_HAVE_mbedtls_ssl_set_hs_ca_chain 1) set(LWS_HAVE_mbedtls_ssl_set_hs_own_cert 1) set(LWS_HAVE_mbedtls_ssl_set_hs_authmode 1) set(LWS_HAVE_mbedtls_net_init 1) set(LWS_HAVE_mbedtls_md_setup 1) # not on xenial 2.2 set(LWS_HAVE_mbedtls_rsa_complete 1) # not on xenial 2.2 set(LWS_HAVE_mbedtls_internal_aes_encrypt 1) # # Different build system distros set release optimization level to different # things according to their local policy, eg, Fedora is -O2 and Ubuntu is -O3 # here. Actually the build system's local policy is completely unrelated to # our desire for cross-build release optimization policy for code built to run # on a completely different target than the build system itself. # # Since this goes last on the compiler commandline we have to override it to a # sane value for cross-build here. Notice some gcc versions enable broken # optimizations with -O3. # if (CMAKE_BUILD_TYPE MATCHES RELEASE OR CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES release) set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O2") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2") endif() set(PLAT_ARCH ARM_CM4F) set(PLAT_ARCH_CMSIS sam4e) set(PLAT_SOC __SAM4E16E__) set(PLAT_BOARD SAM4E_XPLAINED_PRO) set(CF_LWIP "${CF_LWIP} -I${SDK_BASE}/thirdparty/lwip/lwip-${LWIP_VER}/src/include/lwip") set(CF_LWIP "${CF_LWIP} -I${SDK_BASE}/thirdparty/lwip/lwip-${LWIP_VER}/src/include/posix") set(CF_LWIP "${CF_LWIP} -I${SDK_BASE}/thirdparty/lwip/lwip-${LWIP_VER}/src/include") set(CF_LWIP "${CF_LWIP} -I${SDK_BASE}/thirdparty/lwip/lwip-${LWIP_VER}/src/module_config") set(CF_LWIP "${CF_LWIP} -I${SDK_BASE}/thirdparty/lwip/lwip-port-${LWIP_VER}/sam/include") set(CF_LWIP "${CF_LWIP} -I${SDK_BASE}/thirdparty/lwip/lwip-${LWIP_VER}/src/include/ipv4") set(CF_FREERTOS "${CF_FREERTOS} -I${SDK_BASE}/thirdparty/freertos/freertos-${FREERTOS_VER}/Source/include") set(CF_FREERTOS "${CF_FREERTOS} -I${SDK_BASE}/thirdparty/freertos/freertos-${FREERTOS_VER}/module_config") set(CF_FREERTOS "${CF_FREERTOS} -I${SDK_BASE}/thirdparty/freertos/freertos-${FREERTOS_VER}/Source/portable/GCC/${PLAT_ARCH}") set(CF_SDK_GLUE "${CF_SDK_GLUE} -I${SDK_BASE}/common/boards") set(CF_SDK_GLUE "${CF_SDK_GLUE} -I${SDK_BASE}/common/utils") set(CF_SDK_GLUE "${CF_SDK_GLUE} -I${SDK_BASE}/sam/utils/") set(CF_SDK_GLUE "${CF_SDK_GLUE} -I${SDK_BASE}/sam/utils/preprocessor") set(CF_SDK_GLUE "${CF_SDK_GLUE} -I${SDK_BASE}/sam/utils/header_files") set(CF_SDK_GLUE "${CF_SDK_GLUE} -I${SDK_BASE}/sam/boards") set(CF_SDK_GLUE "${CF_SDK_GLUE} -I${SDK_BASE}/sam/utils/cmsis/${PLAT_ARCH_CMSIS}/source/templates") set(CF_SDK_GLUE "${CF_SDK_GLUE} -I${SDK_BASE}/sam/utils/cmsis/${PLAT_ARCH_CMSIS}/include") set(CF_SDK_GLUE "${CF_SDK_GLUE} -I${SDK_BASE}/thirdparty/CMSIS/Include") set(CF_SDK_GLUE "${CF_SDK_GLUE} -I${SDK_BASE}/common/utils/osprintf") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -lnosys -nostartfiles ${CF_LWIP} ${CF_FREERTOS} ${CF_SDK_GLUE} -DBOARD=${PLAT_BOARD} -D${PLAT_SOC} -DLWIP_TIMEVAL_PRIVATE=0 -DLWS_AMAZON_RTOS=1 -DLWIP_SOCKET_OFFSET=0 -DLWIP_COMPAT_SOCKETS -DLWIP_DNS=1 -DLWIP_SOCKETS=1 " CACHE STRING "" FORCE) # Where to look for the target environment. (More paths can be added here) set(CMAKE_FIND_ROOT_PATH "${CROSS_PATH}") # Adjust the default behavior of the FIND_XXX() commands: # search programs in the host environment only. set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # Search headers and libraries in the target environment only. set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) libwebsockets-4.3.5/contrib/cross-esp32.cmake000066400000000000000000000052221476025525100211200ustar00rootroot00000000000000# # CMake Toolchain file for crosscompiling on ARM. # # This can be used when running cmake in the following way: # cd build/ # cmake .. -DCMAKE_TOOLCHAIN_FILE=../cross-arm-linux-gnueabihf.cmake # # Target operating system name. set(CMAKE_SYSTEM_NAME Linux) # assumed these are set up on the $PATH set(TC xtensa-esp32-elf) set(CMAKE_C_COMPILER "${TC}-gcc${EXECUTABLE_EXT}") set(CMAKE_AR "${TC}-ar${EXECUTABLE_EXT}") set(CMAKE_RANLIB "${TC}-ranlib${EXECUTABLE_EXT}") set(CMAKE_LINKER "${TC}-ld${EXECUTABLE_EXT}") # # Different build system distros set release optimization level to different # things according to their local policy, eg, Fedora is -O2 and Ubuntu is -O3 # here. Actually the build system's local policy is completely unrelated to # our desire for cross-build release optimization policy for code built to run # on a completely different target than the build system itself. # # Since this goes last on the compiler commandline we have to override it to a # sane value for cross-build here. Notice some gcc versions enable broken # optimizations with -O3. # if (CMAKE_BUILD_TYPE MATCHES RELEASE OR CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES release) set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O2") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2") endif() SET(CMAKE_C_FLAGS "-nostdlib -Wall -Werror \ -I${BUILD_DIR_BASE}/include \ -I${IDF_PATH}/components/newlib/platform_include \ -I${IDF_PATH}/components/mdns/include \ -I${IDF_PATH}/components/heap/include \ -I${IDF_PATH}/components/driver/include \ -I${IDF_PATH}/components/spi_flash/include \ -I${IDF_PATH}/components/nvs_flash/include \ -I${IDF_PATH}/components/tcpip_adapter/include \ -I${IDF_PATH}/components/lwip/include/lwip/posix \ -I${IDF_PATH}/components/lwip/include/lwip \ -I${IDF_PATH}/components/lwip/include/lwip/port \ -I${IDF_PATH}/components/esp32/include/ \ -I${IDF_PATH}/components/bootloader_support/include/ \ -I${IDF_PATH}/components/app_update/include/ \ -I$(IDF_PATH)/components/soc/esp32/include/ \ -I$(IDF_PATH)/components/soc/include/ \ -I$(IDF_PATH)/components/vfs/include/ \ ${LWS_C_FLAGS} -Os \ -I${IDF_PATH}/components/nvs_flash/test_nvs_host \ -I${IDF_PATH}/components/freertos/include" CACHE STRING "" FORCE) # Where to look for the target environment. (More paths can be added here) set(CMAKE_FIND_ROOT_PATH "${CROSS_PATH}") # Adjust the default behavior of the FIND_XXX() commands: # search programs in the host environment only. set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # Search headers and libraries in the target environment only. set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) libwebsockets-4.3.5/contrib/cross-linkit.cmake000066400000000000000000000076641476025525100214720ustar00rootroot00000000000000# # CMake Toolchain file for crosscompiling on Mediatek Linkit 7967 # # This can be used like this (with Linkit sdk unpacked to /opt/linkit) # # cd build/ # cmake .. -DCMAKE_INSTALL_PREFIX:PATH=/opt/linkit/cross-root \ # -DCMAKE_TOOLCHAIN_FILE=../contrib/cross-linkit.cmake \ # -DLWS_PLAT_FREERTOS=1 \ # -DLWS_WITH_ZLIB=0 \ # -DLWS_WITHOUT_EXTENSIONS=1 \ # -DLWS_WITH_ZIP_FOPS=0 \ # -DLWS_WITH_HTTP_STREAM_COMPRESSION=0 \ # -DLWS_WITH_MBEDTLS=1 \ # -DLWS_WITH_FILE_OPS=0 # # if your sdk lives somewhere else, this is the only place that should need changing set(CROSS_BASE /opt/linkit/sdk) set(CROSS_PATH ${CROSS_BASE}/tools/gcc/gcc-arm-none-eabi) # # Target operating system name. set(CMAKE_SYSTEM_NAME Generic) # Name of C compiler. set(CMAKE_C_COMPILER "${CROSS_PATH}/bin/arm-none-eabi-gcc") set(CMAKE_CXX_COMPILER "${CROSS_PATH}/bin/arm-none-eabi-g++") # # cmake believes we should link a NOP test program OK, but since we're # baremetal, that's not true in our case. It tries to build this test # with the cross compiler, but with no args on it, and it fails. # So disable this test for this toolchain (we'll find out soon enough # if we actually can't compile anything) set(CMAKE_C_COMPILER_WORKS 1) set(CMAKE_CXX_COMPILER_WORKS 1) # # similarly we're building a .a like this, we can't actually build # complete test programs to probe api availability... so force some # key ones set(LWS_HAVE_mbedtls_ssl_conf_alpn_protocols 1) set(LWS_HAVE_mbedtls_ssl_conf_alpn_protocols 1) set(LWS_HAVE_mbedtls_ssl_get_alpn_protocol 1) set(LWS_HAVE_mbedtls_ssl_conf_sni 1) set(LWS_HAVE_mbedtls_ssl_set_hs_ca_chain 1) set(LWS_HAVE_mbedtls_ssl_set_hs_own_cert 1) set(LWS_HAVE_mbedtls_ssl_set_hs_authmode 1) set(LWS_HAVE_mbedtls_net_init 1) set(LWS_HAVE_mbedtls_md_setup 1) # not on xenial 2.2 set(LWS_HAVE_mbedtls_rsa_complete 1) # not on xenial 2.2 set(LWS_HAVE_mbedtls_internal_aes_encrypt 1) # # Different build system distros set release optimization level to different # things according to their local policy, eg, Fedora is -O2 and Ubuntu is -O3 # here. Actually the build system's local policy is completely unrelated to # our desire for cross-build release optimization policy for code built to run # on a completely different target than the build system itself. # # Since this goes last on the compiler commandline we have to override it to a # sane value for cross-build here. Notice some gcc versions enable broken # optimizations with -O3. # if (CMAKE_BUILD_TYPE MATCHES RELEASE OR CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES release) set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O2") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2") endif() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -lnosys -nostartfiles -I${CROSS_BASE}/middleware/third_party/lwip/src/include/lwip -I${CROSS_BASE}/middleware/third_party/lwip/src/include -I${CROSS_BASE}/project/mt7687_hdk/apps/httpd/inc/ -I${CROSS_BASE}/kernel/service/inc/ -I${CROSS_BASE}/driver/chip/inc -I${CROSS_BASE}/driver/chip/mt7687/inc/ -I${CROSS_BASE}/driver/CMSIS/Device/MTK/mt7687/Include/ -I${CROSS_BASE}/driver/CMSIS/Include -I${CROSS_BASE}/middleware/third_party/lwip/ports/include/ -I${CROSS_BASE}/middleware/third_party/lwip/src/include/posix/ -I${CROSS_BASE}/kernel/rtos/FreeRTOS/Source/include/ -I${CROSS_BASE}/middleware/third_party/mbedtls/include/ -I${CROSS_BASE}/kernel/rtos/FreeRTOS/Source/portable/GCC/ARM_CM4F/ -I${CROSS_BASE}/middleware/third_party/sntp/inc/ -DLWS_AMAZON_RTOS=1" CACHE STRING "" FORCE) # Where to look for the target environment. (More paths can be added here) set(CMAKE_FIND_ROOT_PATH "${CROSS_PATH}") # Adjust the default behavior of the FIND_XXX() commands: # search programs in the host environment only. set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # Search headers and libraries in the target environment only. set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) libwebsockets-4.3.5/contrib/cross-ming.cmake000066400000000000000000000033571476025525100211250ustar00rootroot00000000000000# # CMake Toolchain file for crosscompiling on MingW. # # This can be used when running cmake in the following way: # cd build/ # cmake .. -DCMAKE_TOOLCHAIN_FILE=../cross-ming.cmake # set(CROSS_PATH /usr/bin) # Target operating system name. set(CMAKE_SYSTEM_NAME Windows) set(BUILD_SHARED_LIBS OFF) # Name of C compiler. set(CMAKE_C_COMPILER "${CROSS_PATH}/x86_64-w64-mingw32-gcc") #set(CMAKE_CXX_COMPILER "${CROSS_PATH}/x86_64-w64-mingw32-g++") set(CMAKE_RC_COMPILER "${CROSS_PATH}/x86_64-w64-mingw32-windres") set(CMAKE_C_FLAGS "-Wno-error") # # Different build system distros set release optimization level to different # things according to their local policy, eg, Fedora is -O2 and Ubuntu is -O3 # here. Actually the build system's local policy is completely unrelated to # our desire for cross-build release optimization policy for code built to run # on a completely different target than the build system itself. # # Since this goes last on the compiler commandline we have to override it to a # sane value for cross-build here. Notice some gcc versions enable broken # optimizations with -O3. # if (CMAKE_BUILD_TYPE MATCHES RELEASE OR CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES release) set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O2") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2") endif() # Where to look for the target environment. (More paths can be added here) set(CMAKE_FIND_ROOT_PATH "${CROSS_PATH}") # Adjust the default behavior of the FIND_XXX() commands: # search programs in the host environment only. set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # Search headers and libraries in the target environment only. set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) libwebsockets-4.3.5/contrib/cross-openwrt-makefile000066400000000000000000000074421476025525100223640ustar00rootroot00000000000000# # libwebsockets makefile for openwrt # include $(TOPDIR)/rules.mk PKG_NAME:=libwebsockets PKG_VERSION:=2014-03-01 PKG_RELEASE=$(PKG_SOURCE_VERSION) PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://github.com/warmcat/libwebsockets.git PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) PKG_SOURCE_VERSION:=388dc7d201d8d123841869fb49ec4d94d6dd7f54 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz CMAKE_INSTALL:=1 include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/cmake.mk CMAKE_OPTIONS += -DLWS_OPENSSL_CLIENT_CERTS=/etc/ssl/certs CMAKE_OPTIONS += -DLWS_OPENSSL_SUPPORT=ON CMAKE_OPTIONS += -DLWS_WITH_SSL=ON CMAKE_OPTIONS += -DLWS_WITHOUT_TESTAPPS=$(if $(CONFIG_PACKAGE_libwebsockets-examples),"OFF","ON") # for wolfssl, define these in addition to LWS_OPENSSL_SUPPORT and # edit package/libs/wolfssl/Makefile to include --enable-libwebsockets # CMAKE_OPTIONS += -DLWS_WITH_WOLFSSL=ON # CMAKE_OPTIONS += -DLWS_WOLFSSL_LIBRARIES=$(STAGING_DIR)/usr/lib/libwolfssl.so # CMAKE_OPTIONS += -DLWS_WOLFSSL_INCLUDE_DIRS=$(STAGING_DIR)/usr/include # for cyassl, define these in addition to LWS_OPENSSL_SUPPORT and # edit package/libs/wolfssl/Makefile to include --enable-libwebsockets # CMAKE_OPTIONS += -DLWS_WITH_CYASSL=ON # CMAKE_OPTIONS += -DLWS_CYASSL_LIBRARIES=$(STAGING_DIR)/usr/lib/libcyassl.so # CMAKE_OPTIONS += -DLWS_CYASSL_INCLUDE_DIRS=$(STAGING_DIR)/usr/include # other options worth noting # CMAKE_OPTIONS += -DLWS_WITHOUT_EXTENSIONS=ON # CMAKE_OPTIONS += -DLWS_WITHOUT_DAEMONIZE=ON # CMAKE_OPTIONS += -DLWS_WITHOUT_SERVER=ON # CMAKE_OPTIONS += -DLWS_WITHOUT_DEBUG=ON define Package/libwebsockets/Default SECTION:=libs CATEGORY:=Libraries TITLE:=libwebsockets DEPENDS:=+zlib +libopenssl endef define Package/libwebsockets $(call Package/libwebsockets/Default) TITLE+= (libraries) endef define Package/libwebsockets/description libwebsockets This package contains libwebsocket libraries endef define Package/libwebsockets-examples $(call Package/libwebsockets/Default) DEPENDS:=libwebsockets TITLE+= (examples) endef define Package/libwebsockets-examples/description libwebsockets examples This package contains libwebsockets examples endef define Package/libwebsockets/install $(INSTALL_DIR) $(1)/usr/lib $(CP) $(PKG_INSTALL_DIR)/usr/lib/libwebsockets.so* $(1)/usr/lib/ endef define Package/libwebsockets-examples/install $(INSTALL_DIR) $(1)/usr/bin $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/libwebsockets-test-client $(1)/usr/bin/ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/libwebsockets-test-echo $(1)/usr/bin/ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/libwebsockets-test-fraggle $(1)/usr/bin/ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/libwebsockets-test-ping $(1)/usr/bin/ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/libwebsockets-test-server $(1)/usr/bin/ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/libwebsockets-test-server-extpoll $(1)/usr/bin/ $(INSTALL_DIR) $(1)/usr/share/libwebsockets-test-server $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/libwebsockets-test-server/favicon.ico $(1)/usr/share/libwebsockets-test-server/ $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/libwebsockets-test-server/leaf.jpg $(1)/usr/share/libwebsockets-test-server/ $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/libwebsockets-test-server/libwebsockets.org-logo.png $(1)/usr/share/libwebsockets-test-server/ $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/libwebsockets-test-server/libwebsockets-test-server.key.pem $(1)/usr/share/libwebsockets-test-server/ $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/libwebsockets-test-server/libwebsockets-test-server.pem $(1)/usr/share/libwebsockets-test-server/ $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/libwebsockets-test-server/test.html $(1)/usr/share/libwebsockets-test-server/ endef $(eval $(call BuildPackage,libwebsockets)) $(eval $(call BuildPackage,libwebsockets-examples)) libwebsockets-4.3.5/contrib/cross-w32.cmake000066400000000000000000000036331476025525100206030ustar00rootroot00000000000000# # CMake Toolchain file for crosscompiling on 32bit Windows platforms. # # This can be used when running cmake in the following way: # cd build/ # cmake .. -DCMAKE_TOOLCHAIN_FILE=../contrib/cross-w32.cmake -DLWS_WITH_SSL=0 # # the outermost path to your cross toolchain #set(CROSS_PATH /opt/mingw32) set(CROSS_PATH /usr) # your cross root set(CROSS_ROOT ${CROSS_PATH}/i686-w64-mingw32/sys-root/) # Target operating system name. set(CMAKE_SYSTEM_NAME Windows) # Name of C compiler. set(CMAKE_C_COMPILER "${CROSS_PATH}/bin/i686-w64-mingw32-gcc") set(CMAKE_CXX_COMPILER "${CROSS_PATH}/bin/i686-w64-mingw32-g++") set(CMAKE_RC_COMPILER "${CROSS_PATH}/bin/i686-w64-mingw32-windres") # # Different build system distros set release optimization level to different # things according to their local policy, eg, Fedora is -O2 and Ubuntu is -O3 # here. Actually the build system's local policy is completely unrelated to # our desire for cross-build release optimization policy for code built to run # on a completely different target than the build system itself. # # Since this goes last on the compiler commandline we have to override it to a # sane value for cross-build here. Notice some gcc versions enable broken # optimizations with -O3. # if (CMAKE_BUILD_TYPE MATCHES RELEASE OR CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES release) set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O2") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2") endif() # Where to look for the target environment. (More paths can be added here) set(CMAKE_FIND_ROOT_PATH "${CROSS_ROOT}/mingw") set(CMAKE_SYSROOT ${CROSS_ROOT}) # Adjust the default behavior of the FIND_XXX() commands: # search programs in the host environment only. set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # Search headers and libraries in the target environment only. set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) libwebsockets-4.3.5/contrib/cross-w64.cmake000066400000000000000000000036621476025525100206120ustar00rootroot00000000000000# # CMake Toolchain file for crosscompiling on 64bit Windows platforms. # # This can be used when running cmake in the following way: # cd build/ # cmake .. -DCMAKE_TOOLCHAIN_FILE=../contrib/cross-w64.cmake # # the outermost path to your cross toolchain #set(CROSS_PATH /opt/mingw64) set(CROSS_PATH /usr) # your cross root set(CROSS_ROOT ${CROSS_PATH}/x86_64-w64-mingw32/sys-root/) # Target operating system name. set(CMAKE_SYSTEM_NAME Windows) set(CMAKE_SYSROOT ${CROSS_ROOT}) # Name of C compiler. set(CMAKE_C_COMPILER "${CROSS_PATH}/bin/x86_64-w64-mingw32-gcc") set(CMAKE_CXX_COMPILER "${CROSS_PATH}/bin/x86_64-w64-mingw32-g++") set(CMAKE_RC_COMPILER "${CROSS_PATH}/bin/x86_64-w64-mingw32-windres") set(CMAKE_C_FLAGS "-Wno-error") # # Different build system distros set release optimization level to different # things according to their local policy, eg, Fedora is -O2 and Ubuntu is -O3 # here. Actually the build system's local policy is completely unrelated to # our desire for cross-build release optimization policy for code built to run # on a completely different target than the build system itself. # # Since this goes last on the compiler commandline we have to override it to a # sane value for cross-build here. Notice some gcc versions enable broken # optimizations with -O3. # if (CMAKE_BUILD_TYPE MATCHES RELEASE OR CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES release) set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O2") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2") endif() # Where to look for the target environment. (More paths can be added here) set(CMAKE_FIND_ROOT_PATH "${CROSS_ROOT}/mingw") # Adjust the default behavior of the FIND_XXX() commands: # search programs in the host environment only. set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # Search headers and libraries in the target environment only. set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) libwebsockets-4.3.5/contrib/iOS.cmake000066400000000000000000000227741476025525100175420ustar00rootroot00000000000000# This file is based off of the Platform/Darwin.cmake and Platform/UnixPaths.cmake # files which are included with CMake 2.8.4 # It has been altered for iOS development # Options: # # IOS_PLATFORM = OS (default) or OS32 or SIMULATOR or SIMULATOR64 # This decides if SDKS will be selected from the iPhoneOS.platform or iPhoneSimulator.platform folders # OS - the default, used to build for iPhone and iPad physical devices, which have an arm arch. # SIMULATOR - used to build for the Simulator platforms, which have an x86 arch. # # CMAKE_IOS_DEVELOPER_ROOT = automatic(default) or /path/to/platform/Developer folder # By default this location is automatcially chosen based on the IOS_PLATFORM value above. # If set manually, it will override the default location and force the user of a particular Developer Platform # # CMAKE_IOS_SDK_ROOT = automatic(default) or /path/to/platform/Developer/SDKs/SDK folder # By default this location is automatcially chosen based on the CMAKE_IOS_DEVELOPER_ROOT value. # In this case it will always be the most up-to-date SDK found in the CMAKE_IOS_DEVELOPER_ROOT path. # If set manually, this will force the use of a specific SDK version # # IOS_BITCODE = 1/0: Enable bitcode or not. Only iOS >= 6.0 device build can enable bitcode. Default is enabled. # Macros: # # set_xcode_property (TARGET XCODE_PROPERTY XCODE_VALUE) # A convenience macro for setting xcode specific properties on targets # example: set_xcode_property (myioslib IPHONEOS_DEPLOYMENT_TARGET "3.1") # # find_host_package (PROGRAM ARGS) # A macro used to find executable programs on the host system, not within the iOS environment. # Thanks to the android-cmake project for providing the command # Standard settings set (CMAKE_SYSTEM_NAME Darwin) set (CMAKE_SYSTEM_VERSION 1) set(CMAKE_CROSSCOMPILING TRUE) set (UNIX TRUE) set (APPLE TRUE) set (IOS TRUE) if(NOT DEFINED IOS_BITCODE) # check xcode/clang version? since xcode 7 set(IOS_BITCODE 1) endif() set(IOS_BITCODE_MARKER 0) # Required as of cmake 2.8.10 set (CMAKE_OSX_DEPLOYMENT_TARGET "" CACHE STRING "Force unset of the deployment target for iOS" FORCE) # Determine the cmake host system version so we know where to find the iOS SDKs find_program (CMAKE_UNAME uname /bin /usr/bin /usr/local/bin) if (CMAKE_UNAME) exec_program(uname ARGS -r OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_VERSION) string (REGEX REPLACE "^([0-9]+)\\.([0-9]+).*$" "\\1" DARWIN_MAJOR_VERSION "${CMAKE_HOST_SYSTEM_VERSION}") endif (CMAKE_UNAME) # Force the compilers to gcc for iOS include (CMakeForceCompiler) set (CMAKE_C_COMPILER /usr/bin/clang) set (CMAKE_CXX_COMPILER /usr/bin/clang++) set(CMAKE_AR ar CACHE FILEPATH "" FORCE) # Skip the platform compiler checks for cross compiling set (CMAKE_CXX_COMPILER_WORKS TRUE) set (CMAKE_C_COMPILER_WORKS TRUE) # All iOS/Darwin specific settings - some may be redundant set (CMAKE_SHARED_LIBRARY_PREFIX "lib") set (CMAKE_SHARED_LIBRARY_SUFFIX ".dylib") set (CMAKE_SHARED_MODULE_PREFIX "lib") set (CMAKE_SHARED_MODULE_SUFFIX ".so") set (CMAKE_MODULE_EXISTS 1) set (CMAKE_DL_LIBS "") if(IOS_BITCODE) set(BITCODE_FLAGS "-fembed-bitcode") elseif(IOS_BITCODE_MARKER) set(BITCODE_FLAGS "-fembed-bitcode-marker") endif() set (CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG "-compatibility_version ") set (CMAKE_C_OSX_CURRENT_VERSION_FLAG "-current_version ") set (CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}") set (CMAKE_CXX_OSX_CURRENT_VERSION_FLAG "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}") # Hidden visibilty is required for cxx on iOS set (CMAKE_C_FLAGS_INIT "${BITCODE_FLAGS}") set (CMAKE_CXX_FLAGS_INIT "-fvisibility=hidden -fvisibility-inlines-hidden ${BITCODE_FLAGS}") set (CMAKE_C_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS}") set (CMAKE_CXX_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_CXX_LINK_FLAGS}") set (CMAKE_PLATFORM_HAS_INSTALLNAME 1) set (CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-dynamiclib -headerpad_max_install_names") set (CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle -headerpad_max_install_names") set (CMAKE_SHARED_MODULE_LOADER_C_FLAG "-Wl,-bundle_loader,") set (CMAKE_SHARED_MODULE_LOADER_CXX_FLAG "-Wl,-bundle_loader,") set (CMAKE_FIND_LIBRARY_SUFFIXES ".dylib" ".so" ".a") # hack: if a new cmake (which uses CMAKE_INSTALL_NAME_TOOL) runs on an old build tree # (where install_name_tool was hardcoded) and where CMAKE_INSTALL_NAME_TOOL isn't in the cache # and still cmake didn't fail in CMakeFindBinUtils.cmake (because it isn't rerun) # hardcode CMAKE_INSTALL_NAME_TOOL here to install_name_tool, so it behaves as it did before, Alex if (NOT DEFINED CMAKE_INSTALL_NAME_TOOL) find_program(CMAKE_INSTALL_NAME_TOOL install_name_tool) endif () # Setup iOS platform unless specified manually with IOS_PLATFORM if (NOT DEFINED IOS_PLATFORM) set (IOS_PLATFORM "OS") endif () set (IOS_PLATFORM ${IOS_PLATFORM} CACHE STRING "Type of iOS Platform") # Setup building for arm64 or not if (NOT DEFINED BUILD_ARM64) set (BUILD_ARM64 true) endif () set (BUILD_ARM64 ${BUILD_ARM64} CACHE STRING "Build arm64 arch or not") # Check the platform selection and setup for developer root if (${IOS_PLATFORM} STREQUAL "OS") set (IOS_PLATFORM_LOCATION "iPhoneOS.platform") # This causes the installers to properly locate the output libraries set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphoneos") elseif (${IOS_PLATFORM} STREQUAL "OS32") set (IOS_PLATFORM_LOCATION "iPhoneOS.platform") # This causes the installers to properly locate the output libraries set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphoneos") elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR") set (IS_SIMULATOR true) set (IOS_PLATFORM_LOCATION "iPhoneSimulator.platform") # This causes the installers to properly locate the output libraries set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphonesimulator") elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR64") set (IS_SIMULATOR true) set (IOS_PLATFORM_LOCATION "iPhoneSimulator.platform") # This causes the installers to properly locate the output libraries set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphonesimulator") else () message (FATAL_ERROR "Unsupported IOS_PLATFORM value selected. Please choose OS or SIMULATOR") endif () # Setup iOS developer location unless specified manually with CMAKE_IOS_DEVELOPER_ROOT # Note Xcode 4.3 changed the installation location, choose the most recent one available exec_program(/usr/bin/xcode-select ARGS -print-path OUTPUT_VARIABLE CMAKE_XCODE_DEVELOPER_DIR) set (XCODE_POST_43_ROOT "${CMAKE_XCODE_DEVELOPER_DIR}/Platforms/${IOS_PLATFORM_LOCATION}/Developer") set (XCODE_PRE_43_ROOT "/Developer/Platforms/${IOS_PLATFORM_LOCATION}/Developer") if (NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT) if (EXISTS ${XCODE_POST_43_ROOT}) set (CMAKE_IOS_DEVELOPER_ROOT ${XCODE_POST_43_ROOT}) elseif(EXISTS ${XCODE_PRE_43_ROOT}) set (CMAKE_IOS_DEVELOPER_ROOT ${XCODE_PRE_43_ROOT}) endif (EXISTS ${XCODE_POST_43_ROOT}) endif () set (CMAKE_IOS_DEVELOPER_ROOT ${CMAKE_IOS_DEVELOPER_ROOT} CACHE PATH "Location of iOS Platform") # Find and use the most recent iOS sdk unless specified manually with CMAKE_IOS_SDK_ROOT if (NOT DEFINED CMAKE_IOS_SDK_ROOT) file (GLOB _CMAKE_IOS_SDKS "${CMAKE_IOS_DEVELOPER_ROOT}/SDKs/*") if (_CMAKE_IOS_SDKS) list (SORT _CMAKE_IOS_SDKS) list (REVERSE _CMAKE_IOS_SDKS) list (GET _CMAKE_IOS_SDKS 0 CMAKE_IOS_SDK_ROOT) else (_CMAKE_IOS_SDKS) message (FATAL_ERROR "No iOS SDK's found in default search path ${CMAKE_IOS_DEVELOPER_ROOT}. Manually set CMAKE_IOS_SDK_ROOT or install the iOS SDK.") endif (_CMAKE_IOS_SDKS) message (STATUS "Toolchain using default iOS SDK: ${CMAKE_IOS_SDK_ROOT}") endif () set (CMAKE_IOS_SDK_ROOT ${CMAKE_IOS_SDK_ROOT} CACHE PATH "Location of the selected iOS SDK") # Set the sysroot default to the most recent SDK set (CMAKE_OSX_SYSROOT ${CMAKE_IOS_SDK_ROOT} CACHE PATH "Sysroot used for iOS support") # set the architecture for iOS if (${IOS_PLATFORM} STREQUAL "OS") set (IOS_ARCH arm64) elseif (${IOS_PLATFORM} STREQUAL "OS32") set (IOS_ARCH armv7) elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR") set (IOS_ARCH i386) elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR64") set (IOS_ARCH x86_64) endif () set (CMAKE_OSX_ARCHITECTURES ${IOS_ARCH} CACHE STRING "Build architecture for iOS") # Set the find root to the iOS developer roots and to user defined paths set (CMAKE_FIND_ROOT_PATH ${CMAKE_IOS_DEVELOPER_ROOT} ${CMAKE_IOS_SDK_ROOT} ${CMAKE_PREFIX_PATH} CACHE STRING "iOS find search path root") # default to searching for frameworks first set (CMAKE_FIND_FRAMEWORK FIRST) # set up the default search directories for frameworks set (CMAKE_SYSTEM_FRAMEWORK_PATH ${CMAKE_IOS_SDK_ROOT}/System/Library/Frameworks ${CMAKE_IOS_SDK_ROOT}/System/Library/PrivateFrameworks ${CMAKE_IOS_SDK_ROOT}/Developer/Library/Frameworks ) # only search the iOS sdks, not the remainder of the host filesystem set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY) set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) # This little macro lets you set any XCode specific property macro (set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE) set_property (TARGET ${TARGET} PROPERTY XCODE_ATTRIBUTE_${XCODE_PROPERTY} ${XCODE_VALUE}) endmacro (set_xcode_property) # This macro lets you find executable programs on the host system macro (find_host_package) set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER) set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER) set (IOS FALSE) find_package(${ARGN}) set (IOS TRUE) set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY) set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) endmacro (find_host_package) libwebsockets-4.3.5/doc-assets/000077500000000000000000000000001476025525100164375ustar00rootroot00000000000000libwebsockets-4.3.5/doc-assets/abstract-overview.svg000066400000000000000000004166511476025525100226440ustar00rootroot00000000000000 image/svg+xml libwebsockets-4.3.5/doc-assets/accept-flow-1.svg000066400000000000000000000260041476025525100215240ustar00rootroot00000000000000 httpprocessing Connection Fallbackrole +protocol Invalid Methodin "http header" Fallbackset and enabledon vhost? Error Yes Yes LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG plain http port This flow happensbefore any Host: headers.Indeed there are no Host:headers if the connectionis not actually http.Therefore it occurs on thefirst vhost that listenson the connection port. libwebsockets-4.3.5/doc-assets/accept-flow-2.svg000066400000000000000000000407441476025525100215340ustar00rootroot00000000000000 Yes httpprocessing Connection Issue httpredirect tohttps:// TLS headerlooks bad? Redirect httpto https enabled? Yes Yes Allow httpon https enabled? Error Yes Fallbackset and enabledon vhost? LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS LWS_SERVER_OPTION_ALLOW_HTTP_ON_HTTPS_LISTENER LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG Fallbackrole +protocol TLS port This flow happensbefore any vhost selectionusing SNI or Host: headers.Therefore it occurs on thefirst vhost that listenson the connection port. libwebsockets-4.3.5/doc-assets/accept-flow-3.svg000066400000000000000000000100001476025525100215130ustar00rootroot00000000000000 Connection Specifiedrole +protocol LWS_SERVER_OPTION_ADOPT_APPLY_LISTEN_ACCEPT_CONFIG raw-only port libwebsockets-4.3.5/doc-assets/fault-injection.png000066400000000000000000007406321476025525100222540ustar00rootroot00000000000000‰PNG  IHDRęPĀø" pHYs›^x=tEXtSoftwarewww.inkscape.org›ī< IDATxœģŻy|TÕż?ž×¹wÖLVH[;ŁEc€Č¢(E%hw­ž¬mµJ„?jėR°Śj-ź×7*ØYDŁ $J¢$$BČJ&™™{ļū÷GrÆ3ĢLdUŽĻĒ#ĀsĻ9w™Éœ÷=‹ĄÆŠ!"Ą¢E‹„w‚œœć’3fĢ@nn®ĻėŗŅŅŅ€ŪcŒ1ĘcŒßāćć)ŠöŅG}dü?))É'ŻĀ… „šiĢė—č×ŠČ Ųčw»ŻeYŽŃ4-ZÓ“B 9¼Ņ Y–ż2$¢_ĆyaŒ1ĘcŒ±_ MÓ<’$×4ˆØJQ”*I’ŖŹN§hŸ°°0ŸĘ{tt4@NN¢¢¢š äääąųE~©]½Ž"==} Ēć¢iŚE !$9GucŒ1ĘcŒ1vö(Ž8 OÓ“½’$ķ­ÆÆĻRUµ±²²6›Ąn·8*))Ćį  9XMzp@ œų5~IA<ņH¢ÕjMÕ4ķ2ćt9·ÕbŒ1ĘcŒ1vRˆ(‡ˆ6jš¶ńųńćۜNg“Åb”źźjX,²Z­d³ŁØ¾¾žģv;9Ŗ®®¦@A@_␁ó>0cĘ ¹OŸ>ć…7ŃD[K/„@xx8"## ‡Ć»Ż›Ķv–jĢcŒ1ĘcģLńxš¦½`’÷ö=z`Ā„ čÕ«×Ł®cŒ1ĘcŒ± \CC¶mŪ†-[¶ ©©Éū„£µµµ’)((ųT’$,Ė“Éäу.—K‘eY S%IR%IRM&“h˜Ął 8kA€ōōōĒ³€ˆ`Ń·'&&bŹ”)ˆ?[UaŒ1ĘcŒ1Ęr:ųśėƱuėVØŖjlW%³¤¤dIuuuÉdr«Ŗź‘eŁ#˲Ēl6{dYVĢf³rüųqÕd2);vTEŃÜn·ÖŠŠ EEEQ^^uģŲ‘’’’č\ĪJą±Ē iڇéŪĀĀĀ0iŅ$ :”»ż3ĘcŒ1Ę;Æ=z«V­Āžżū½7»ėźź^ĻĻĻ’ˆ\&“É­Ģf³[ø\.Åd2)h™L€l¾€³ 8ć­ļłóēßąe! IF+Ƽ’gśgŒ1ĘcŒ1v^ūńĒń駟¢¶¶ÖŲęr¹¶īŪ·o±Ūķ®’$É Ąe2™ÜB—Ž3@UUÕjõ!T!„*I’*˲Ŗ÷ Ø®®ÖĪE ąŒęĢ™&Ėņ+Bˆ›ōm;vÄĢ™3ѹsē3U,cŒ1ĘcŒ1vZ555aÕŖUČŹŹ2¶©Ŗz䥁ĻUTTģ3™LM²,»$Ij2™Ln.«ÕźÖf³Yill4zčž‹įg$šŲcõÓ4m€>ś¶aƆįŚkƅÅbieOĘcŒ1Ęcģü”™™‰U«V«‘§²²ņµ‚‚‚ÆL&S£¢ @“Łlvp !\‹Åm±X<-C›Ķ¦č644hŽĆNXJšŒäÓį£>:RÓ“Æ„ŻĄl6cŹ”)˜4idł“ĒcŒ1ĘcŒńńńHJJBQQ „Lj²²²żdMÓL’$I$’,Ė Mӄ,ĖāųńćĀķv Y–”(ŠØ¬¬DTT”(..Fnn.RRRÄʍ3ōŠž“¶Źēϟ%€Ļ…Qƒ;ļ¼żū÷?Å0ĘcŒ1Ęcē„ĆįĄ°aĆPSSƒņņr!!!żĀĆĆ;>|xæ$I’ŖŖ²B""YÓ4”(Šd6›…¢(B‹Å‚††”?(ŒŒ„ŁlFqq1:uźtF§-0o޼ė„£eĄ.]ŗąĪ;ļDTTŌé*‚1ĘcŒ1Ę;ēdYĘĄEEE›ĶÖ³C‡]9’GDF €$„Š¢=$ID$¬V+ˆV«f³™™™¢””iii8€Ó˜7oŽBˆ·˜ OŸ>øõÖ[a·ŪOGöŒ1ĘcŒ1ĘŲyEÄÄDŲl6cA«ÕŚ9&&&±““ō’¦i’÷ŠŃ‚ˆ@DĀl6£©© š¦A’$X­VDFFāŠ”C8S€SĢ›7ļŚ–€ IIIøé¦›`6›O¹rŒ1ĘcŒ1ĘŲł¬{÷īˆŽŽĘ?ž"‚Åb‰‰ˆˆčräȑ|III@§k²ĄŸ˜;wn‚āk1гgO̚5‹{0ĘcŒ1Ę»`ÅÅÅĮjµ"??ž i𫪪ŖŗeµŃ2Y $ ’$AÓ4! „€ĒćĆį ļ@€Óé¤ĢĢL‘pZ'żŲžž{ī1K’ōÅ@ll,n¾łf˜L¦Ÿ[ĘcŒ1ĘcģWaģŲ±HNN6žß«WÆŌČČČŽ'RQ”H·Ū”(Jø¢(a'”ˆBTUµišf=~üøÅn·›4M“UU•­V«Ō·o_±qćF ōŽų™€“DGG?ąˆˆˆĄķ·ßĪ«0ĘcŒ1Ęc-&Nœˆ!C†$I’}›› §Ó ³Łl ....AĖÜBų=Č'Y–AĶc`6›É{Õ}²Ąāābäęęžģ‰ŪxōŃG»ų@\yå•:tčɖĒcŒ1ĘcŒżźÉ²Œž={b÷īŻŠ4 ‡#RÓ4µ²²²V!ˆHĄæOŌ¼œ ! ITU%³ŁLUUUŌŌŌD§ŗb@{‡"z@4ōéÓĒgŒcŒ1ĘcŒ1Ę|ÅĘĘbźŌ©Ę’ūöķ;"444Žćń„+Š”(JøŖŖįŖŖ†©ŖŖ(Š@ˆ¢(v"²°˜L&sSS“ Ķń圜©²²R?o~€võ˜7oŽķBˆ <<·ß~;,K{Ė`Œ1ĘcŒ1Ę.Hńńń8vģŹĖĖ!I’yąĄ#hnø  yųBZzȲ¬y< 9ȲLV«:u"}XĄ† °hŃ¢v×§Ķ ĄÜ¹s£$IZ Ą7ÜpŗtérņGĪcŒ1ĘcŒ]€‘™™ Ēƒ‡ÓétÕŌŌ4FĄ;  żG’$’e™ˆˆÜn7BCCéTęhs8€$IŠh0pąĄ“?bĘcŒ1Ęcģe·Ū1yņdć’IIII’$EŖŖ®(J˜ŖŖa'üėPU5DÓ4Y›šš,.—Ė @VE.++“Ŗ««ERR’ČÉÉéééķŠj`īܹ#Ü&“Ég,cŒ1ĘcŒ1ĘŚgŲ°ačŁ³'Ąf³Y 4@Q”PEQĀ<OøP%TUÕPUUCTU QÅĄo~‡Ć!•––’–łŚ “: 99y9€ī0nÜ8$%%żģfŒ1ĘcŒ1Ę.TBÄĒĒc×®] "DFF†W»ŻnEŸ @A’$­e›&I’@3›Ķš¢(5·öI–e„††ŅÉ Ś`žüł\:tąÕcŒ1ĘcŒ±S‡1cĘ$ILléśźŻ @Q”PĒćŠ4Ķ”išˆlMMMV!„E–e³¢(&³Ł,y |V Ŗµįźæ¤¤¤Ąd2āį2ĘcŒ1Ęc¶+®øf³н{÷«Õ„(ŠCÓ4GKć?LUÕPMÓB5Msx<žļ@€Ūķ6Ūl6ӉĆrrrÄ¢E‹Ś00o޼ŃĘ@DD†z™1ĘcŒ1Ę»0…††bĈš{$%%uU%DQ½G€CÓ4½G€CUU‡Ūķ¶ė“ !,.—ĖLD2Łb±HV«UŅ' lkn€€A!Äż÷Ė/æ²ÜęJ‚Œ1ĘcŒ1Ęk‡ääd£Ż³gĻh›Ķ¦OØPUÕ”(ŠƒˆBˆČ§7€Ēć1ė«˜L&©¾¾^č“¶ÕĄ/°`Į‚Į®‡Ć‘#GžöfŒ1ĘcŒ1Ę.T6lĄd2‰žżūwVUÕ®(Jˆ¦i!z eˆ€CÓ“Ēc÷x<6V!„Åb±˜E1UVVŹŖŖŹķķ ąPUõN=ńŲ±c± Œ1ĘcŒ1Ę;=’““!Ds;½gĻž‘š¦Ł4M³+Š¢÷phšę8”G€ €UQKSS“EUUYŸ$0''G|zų|‚ééé&!ÄL$ Ƈ?“ĒĢcŒ1ĘcŒ]¢££Ń³gO@HHˆÜ¹sēHUU}z/€–ßCˆČč  ŖŖŁjµšE1iš&Ūl6)..NœŠĄOĄķvO"¢8读7ĀĀĀĪša3ĘcŒ1Ęc&ļIų{õꩪŖUUU›ŖŖvÆĘæ°+Šb'"c‚@Ēc¶Z­&MӌŽmĶ ą ¢ŁśļśųĘcŒ1ĘcŒ~ƒ†ÅbtļŽ=D–e»ŖŖVMÓō@€Ż; а)Šbs»ŻVĒcQUÕDD²¦irTT”Šē€@sÓž§§§‡kš¶€Łjµbśōé¼*cŒ1ĘcŒ1v†Č²Œņņr”——C’$Q[[«UUU¹hBM’$U”PeYöP%IRxĢf³b2™"R%IŅ\.—¦544Óé¤āābäęębćʍ>e=<Ļ5ģ0hŠ ž1ĘcŒ1Ę;ü{į'$$8TUµhšfÕ4ĶŖ(ŠŽĄ®iZˆ¦iv66UU­Š¢XTU5ėVVVŹ‹EŖ®®zo€™ō_ˆh¼žūĄĻÜ2ĘcŒ1Ęc Š«W/X­Vø\.ÄĘĘZˆČ¬ŖŖE’$«$Iī–UlŠ¢Ų%I²©ŖjŠ(„°°0kšf""“ĶfSŖ««%‡Ć!•––Ruuµ "ĶĖą;'Ąx yU€„„„³}܌1ĘcŒ1ĘŲG–e£ nµZELLŒˆĢš¦YZę°¶ōŠW°išfBX…VY–Ķš¦™ČD$[,©””ATWWœ P€G}“€ˆ‡Ķf;‹‡ĢcŒ1ĘcŒ]øō„ >>ަŖŖIUU#@Dśd6½g@Ė*EQ,Š¢³Ł,y/ųNhjŁ0A/011ńl+cŒ1ĘcŒ1vAón‡wéŅżgϓޠ„'€U’$›¦i6"²és“¼nVUÕ,„0‘,˲$I’T__/\.—Ž#€ōüõįćĪcŒ1ĘcŒ±3+>>!!!€ŲŲX“$I²¦i¦–³>, % 0@D&r]]ģr¹DTTTĄ!z` Š<@=Īņį2ĘcŒ1Ęc.!„Ń7›Ķ"22Ņ¢4M³‘Å{ÕÆ €¾Ż¬iš©””ĮpōčQŸ!:éį‡vH€˜˜X,–³~ĄŒ1ĘcŒ1ĘŲ…,>>Žų=::ڬišOo"2‚DdUUÕBD"²0‘I!˲,544Haaa¢¾¾^”––Šœœ”Ļ `²Z­ƒ‰H€øøøss“Œ1ĘcŒ1ĘŲ,66Öų=::Z&"™ˆä{“t’·“Lh%"3™Ń kkk%·Ū-¼‡IÓ“~ĶKśŹcŒ1ĘcŒ±³Ć»=)‘ŌšžĄ,I’Ѓ-’šeY–›ššd»Ż.™ĶfÉįpˆ–Ęä€&!D‚^PTTŌŁ=JĘcŒ1ĘcŒ!22BĀĆĆIš¦Iš¦ÉDdjł1ė«x 0·l7zø\.I!$«Õ*¢££4/hBōhĄAĘcŒ1Ęcģ0™L C]]ĀĀĀ$ƞ²×üzƒ_’±ØŖj–eٌę‡ü²>/€Éd’l6›8q©@‰ˆŒŁ"""ĪŻ3ĘcŒ1Ęc°ČČH€Łl†Åbń čOśõ®’ś™UU5)Šbr»Ż&·Ū-„@KJ:źźė2ĘcŒ1Ęcģģņn“ŪķvADB ÷ЇčAf4 0 !dI’$Ē#™L&Éįpˆ††‘””„3fL¢ęHƒŁl>‡ÉcŒ1ĘcŒ1ļ €ÕjÕ{H$>=ō4M3”¹mo` PE?~\’eY;vLäęę66›ķ¬ cŒ1ĘcŒ1ƚy·Ė-‹@󬞜$Ę’^}åYÓ4YUUŁćńȏG’eYņx<",,Lx—a`š'!`Œ1ĘcŒ1ĘŲ¹įŻ.—eYhš&$I2z‘ Ąx÷Š'”$I’eYr»ŻRhhØhjjš¦“šXZ 8'ÉcŒ1ĘcŒ1’ š{4¼{œ0Y ¬ŖŖ,I’,I’¤(Š$I’šxóhšę×;@ļ! ˲°X,°X,PUUŲķv#PZZŹ2ĘcŒ1Ęcē3ÆUt¢e{Ą`€ŽĄ;śśzž1ĘcŒ1Ę;ŸéC4Mó"pb µ<šššŒ×y8cŒ222PSSÓfŗnŻŗa̘1g”FĶ–/_‡ĆÉ“'Ÿµ2ŁÆĖž={°’~ōķŪC† 9×Õ9ÆģܹĄäɓvFŹŲæ?öģŁƒŃ£G£{÷īķŚ§ØØ»vķBĒŽ‘’’rFźÅĪÅÅÅŲ¾};†Š>}śœėźœwšŁgŸ”{÷ī=zt»ö9_ßCMMMXµjbcc‘œœ|®«ŌīŻ»QPP€ńćĒ#::ŗÕ“555ČČČĄšįĆŃ«WƳTĆsĻ«W€w0š^€1ĘĪS<ņŅŅŅŚüY²dÉY­×oū[<ųąƒ~Ū«««‘™™‰²²²³Zvzx<dffb’žżg¼¬×^{ iiixóĶ7O9ÆĘĘFdffāąĮƒ§”fēŽĖ/挓“4>|ųŒ•ńÅ_ -- ß|óM»÷ٰaŅŅҰpįĀ3VÆÖ"33.—ėœ”ßŁŁŁųžūļĻu5N‹Ķ›7#-- Ÿ}öٹ®Źi“““ƒ¬¬¬Ó’WEEŅŅŅšĀ /“{ŸuėÖ!-- ‹-:-u8]jkk‘––†'Ÿ|ņ\W„UK—.EZZöķŪ×fŚ%K–`Ö¬Y0›Ķg”fēŒ8įßvæ®<ĻkÜ€1ĘĪ#Ļ=÷\«OĻbm‚ĖČČĄĢ™3ń÷æ’łĖ_ĪuuŲIŖ¬¬Äȑ#qĶ5׹ÓO?=£eõėש©©čŪ·ļ)ē•ŸŸ‘#GāŽ;īĄkƽvjljGjj*|Nʟ7o>üšCģßæ’¼}²7aĀ„……”ØØč\W…pżõ×£““uuuē¤ü.]ŗ 55•{?auuuxńÅ1{öģv÷tśš^ągć cŒGfĻžN:ėj0vŚ<šĄxąĪu5ŲI˜ēØ5999Ų¼y3.æür 0°}ūvdggcƌB`ŊČĖĖCXXššŠŽ;y¬X±F·ł}ūöõŽÅ“iӌ“.— ›6mBvv6Ŗ««!Ibcc1zōhŒ5Ŗ]uööŻwßįŪoæEII $IB‡0lŲ0$''ūÜwåååX¹r%’’’0vģXæ|jkkńĮ OŸ>7nœßėłłłX»v-ŹŹŹ`µZѧOL™2~i=¾żö[ģŽ½ÕÕÕĘy9r$.¹ä’ ĒR^^Ž5kÖąąĮƒB [·n˜OśJJJ°aĆģßæ.— QQQčׯŸń„ždŌ××ļ£GĀf³”K—.HNNöéĮ²cĒ£‹ySS÷!ÜqĒ0™Śžj­( ¾żö[ćóĒf³”S§NøāŠ+Šæ’€ū:tėׯĒįƇQWW‡°°0ōźÕ ©©©ˆ‰‰ńKÆišńyYQQˆ‰‰ĮąĮƒ1~üų õt»ŻX½z5²²²@DˆĒ”)SŠęqĶCvŽ~ūmōéÓW\qÖ®]‹]»vAUU 0Ó¦MƒĶfƒŖŖX»v-vģŲEQ€éÓ§’ŻŲ؈µk×¢°°ĒŽƒŁlFēĪ1vvS IDATģX 4ČH÷ŻwßaŪ¶mšĒ‰{<ŸėsóĶ7Ćįp’ĻĪĪĘęĶ›qäČx<DDD OŸ>˜|UUU ATTFމ=zą0>W£¢¢Śq„ü¹Żn|żõ×ČŹŹBuu5BBB‡””ōīŻŪH·qćFäååaĀ„ ė[QQ+V >>S§N5¶;v _}õ PWW‡ØØ(ōīŻ)))mŽūÄétāłēŸĒĢ™3/ō¹,¼'lļ€łóēÓüłó韒ü'1Ę;7† Bؼ¼¼Żū,]ŗ”¬V+šū1›Ķōā‹/ś¤ļŅ„ uīܹÕ:ŲķvŸm‹…ś÷ļoü?222`yč¶Ūn3Ņ}żõ×Ō±cĒ€é$I¢|°ŻĒi±Xhōčє’’0æ‘#GRee„‘ž™gž!tļ½÷’Ķf3Ņ͟?ŸˆˆöļßO z#GޤŅŅR#æ×_ŻČ/Šń˲LO<ń„OUU„Y³f-#66–¶oßī³OSSM™2%č>!!!d³ŁØwļŽōģ³ĻśŌĻū8½L&=’üóFŚk®¹&hž½{÷6ŅUVVRrrrŠ“—^zi»ļÕ_|‘Š+Ƽbl›3g %K–PDD„_ž”””“fĶ#ż˜1c‚Öå’K.1ŅeffR=‚¦0aÕŌŌ“«ŽN§“®¾śź y 0€ŠŠŠŒō[¶l!ōūß’>`~yyy€fĻžml»żöŪ Żwß}d2™üʈŽŽ¦uėֳ䓛›K}śō ZƱcĒś¼ōóŪm·QXX˜_z«ÕJ/½ō’Oś±<šĄ>ŪÓÓÓÉl6,7&&†VÆ^ķwĢ}ūö Z×Q£F÷QFFFŠt|ņ^øp!ɲ0]dd$}žłēķøĀĶ6lŲ@ŃŃŃA˽÷Ž{IÓ4""š7o^«ut:m–÷Ć?P’žżƒę1cĘ jjjņŁēŁgŸ zŽm6½õÖ[>éKJJh芔AĖHJJņ¹wß{ļ=@=ōõźÕĖ/½Łl¦^x”]糬¬ĢxÆ]rÉ%~y 8 č²Ė.ó{­C‡“mŪ6ŸüvķŚEńńńAeęĢ™¤( =÷Üs­^ŸC‡‘Ėå¢ėÆæ>hŗŽ;Ņśõė:š>}:]yå•÷¹żöŪIUUcŸoæżÖxoėŽ}÷]@ , ÄÄDæł„z÷īMhćʍķ:V‹ÅB(..ŽŽyē*..¦āābڰaM›6ŠĶ7ßl¤×ƒ(%%…–-[FŪ¶m£’’""=z4 »ļ¾›6oŽL”››K4cĘ @×]w‘Ÿ@×\s mŻŗ•***(''‡Ž~ūmźÜ¹3 ÆæžŚŲēĶ7ß$4yņdڹs'UUUQUUŠĖ/æLf³™ĘŒćsœ/½ō Ė/朾łę:zōØqMW¬XAŻ»w'tąĄcŸ#GސÕj„®]»ŅŖU«ŒūąšįĆōłēŸSļŽ½I–e:räķŁ³‡222čż÷ß'4fĢćśyٚ:u*Ķ ÖŒŒ ŹĻϧüü|Z·nqަOŸŽ®ė×Z@’$z蔇(++‹>LŁŁŁ4oŽ<BP§NČķvю;(##ƒ^yåć¼źõޱc5ßw $„ Gy„vģŲA“wļ^śģ³ĻŒ/ļĮ¾øžčńĒ'tĖ-·ŠĪ;©““”JKKiēĪFć}ƌFśS H’D?ž8eggÓ±cĒčąĮƒ“dɲX,Ō±cGŖ««#¢ęąŅ AƒŒr¶nŻJ”““Ck×®„kÆ½ÖØó‰ēŻzė­“cĒ*//§²²2Z¶lÅĘʒ$I”ķw,ŽAżž8p -[¶Œ²²²Øøø˜¶mŪFĻ>ū,Łķvr8>ż½vĻ=÷ŠęĶ›)??Ÿ hćʍ4sęLŸsxģŲ1ćš^qÅ€Ž|óMc›žļ7ß|C@s!##ƒĄ@<õė׏$I¢æüå/ōõ×_Ӂ(77—VÆ^m4Œ{ģ1cŸœœ’$‰śõėGtģŲ1ŖŖŖ¢C‡ъ+ØsēĪäp8Ø””ĮŲēŖ«®"tć7ҦM›hß¾}TPP@›7o¦;Šųńćōz@A7ÜpmŻŗ•JKKé‡~ Å‹“Ķf#“ÉDū÷ļo󜼍L”ššJėÖ­£‚‚ڵk]wŻuF£oȐ!“zõjŹĖĖ£ķŪ·Óż÷ßOhÜøq>ł]tŃEd2™č„—^¢’’ŖŖŖ¢ņņrھ}»qœ~ų!8pĄø]»v%»Żīs}ōąŠžŽ¾ųā‹é‹/¾ ÜÜ\*(( ģģlZ“hY,Љ‰1‚:z@A#GޤĻ?’œ:D………ōŽ{ļQ—.]½’žūF½[ !čśėƧ-[¶ŠįƇéǤ_|‘I’DĘ>õõõäp8(44”^}õU*..¦ŖŖ*Ŗ¬¬¤]»vŃģŁ³ Ķ;·Ķkć}}¼ƒN§“ŗtéBf³™ŅÓÓé›o¾”ƒRNN­X±‚FŒAŒEuu5Łl6źŅ„KĄ{^æüńG""Śŗu+ !ØK—.ōśėÆÓĪ;©øø˜233éæ’ż/u芁dYöł j+ŠŌŌD]»vm÷ß”_0ĘŲB,]ŗ”>üšĆ ?G%¢Ÿ¾“=žųćóÓæų{7LOG@÷Įśūß’ī÷ZNNN«_JŽyēŸ/mу_~ł„ßkzĆĻjµ_Ųō @JJŠńO§7ÄRSS–„Ŗ* 8Ģf3ÕÖÖŃOA€¾}ūRokÖ¬1"ŗ[n¹… Ō]uÕUäp8|¶Żu×]€233īóļ’›Š'Ÿ|blūšĆ żõÆ øĻĖ/æģӈŃ>|ŲjœØ¤¤ÄƑąMUU0`ɲÜęS'¢ÖƒŽĮozp'77×g{vv6 ;īøĆoŸ 6 Ż@œN'uźŌ‰¢¢¢üī‹@ʍG‘‘‘æä*ŠB:t ^½zŪN%pēwÜgžüł€Ž{ļ=""ڽ{7 ßüę7Óėļ»Żn4xōó?|ųš€Ē½|łr@žóŸżŽÅ;’’B&“‰Š‹‹–½hŃ"`<ŃÓ?.æüņ€éE”¾}ū’Łlö{ņ––F6:õrvķŚ0ßéÓ§:xš`Ą×½åęę¶ŠŅ޽itŃŃєŠf޾üņKæóź­¦¦†%&&Ūōė÷Æż+ą>śłųžū90(I%%% JŒ=š„FŠY’{Ņæ’€ūĢ;×ųūŌ½‘Ł©S'ŸĄQsćQļѐŸŸļóš¦i”@&“ÉøO+**Z½‡~ųᇠŸżśõ£°°°€ūõģŁ“¬VkŠ ū’ųG@«V­"¢Ÿ‚V«•ŹŹŹüŅÆX±Āļ}ÜZ`Š AĻszz: wß}×Ų¶k×.#HSS™Ķfæ'ūĮ čσż)--%“ÉD#FŒ0¶éé„„„$I’OZżsīŪoæ ˜’[o½EĄO½õˆŚčį`Ÿætg#ĄK2ĘŲyäī»ļnu‰Ą¼¼<ĄÕW_‚‚üéO ˜¾“ÖŃ£GĻZŻuśXYļńŅŽŅŅŅPUU…ūŻyFFF"55Õo»ŁlFjj*\.ņóó}^»łę›żĘ­ėĖ [·Y’$¤¤¤Ąćńą‡~šyķŚkÆ øѕW^ “É„œœcŪÓO?‚‚ ><`9.— hll4¶Y,Ķóč¼Nž<xųį‡ƒ–œÜ} ˜8qbĄ×%I˜1c ŖŖß9?YÓ§Oø]_{2K¶umķv;.¹äTWW£¤¤¤Ķüššš`±X^Y–QXXˆ]»vµ»~­¹śź«n×ē°ųńĒ“}Œf³ÉÉÉhllō»6S¦L 8Ć‰e“¢[·n_×ēŠß7{ö쀀ļ[ ł^żõøč¢‹Œy ŚC槃}¾¼óĪ;ØŖŖņ›ē ÄÄD`éŅ„­–uŗ>GŪzoEDD`Š A(**2Źž5k pūķ··«ŽŁŁŁŠ4 ćĒ7ę[8Ńu×]‡įƇū÷ßüę7÷=z4€ę¹"ŚkȐ! ńىŽ;cĮ½ !н{w(ŠbSdd$ šńĒ,ćē\ŸššaȐ!A'į8q"FŒa|ęźĘŽ‹ŲŲXæōśłŃē^hĖ“iÓžē@Ÿ{V«@ó<(ŠUUƒ¾Ś£­ū²sēĪHLLōł›xÓM7ž÷æ’ł¤żä“O išń:Šo'6ŒĶf3ńĶ7ßąÕW_Euuµń·ĪétAø“ł|kĻ}yÕUWįŖ«®ņŪī=Y©·“=?'ó¹×ætķŚĖ–-3&ĀÕÅÅÅxńÅ”iš1łąĻ”’ķZ¹r%¾żöŪ€išššŠŲŲMÓ I¦NŠššp,_¾Ļ>ū¬ń÷yłņå$ 3gĪ4ö­ŖŖ‚Õj śŁ”[Śū÷dٲe(,,ěo¾Łīcdž8Ącē‘ö.XZZŠ””äēēCČČHDDD@’$tģŲ—^z)Ö®]{jģĻb±ąóĻ?Ǽyó°iÓ&¬ZµŹēu“É„ßüę7xķµ×Ž®<[›©YšŌÖÖ¶™Žˆ²ŁlAÓč_^Ol€¶UļņæüņKLŸ>N§‹įįį‡ÉdB—.]0xš`|÷ŻwFzEQšłēŸ#$$ŁŁŁ—g³Ūķxé„—|¾Ü—••!%%ūöķ3īƒššpȲŒ˜˜\zé„ųā‹/Ś8+¾ō`ŹG}„>śØÕ“N§ó¤ņ>Q°'•?Ē©\Ū@ęĶ›Ēƒwß}/æü24Móy½WÆ^xå•W0aĀ„SØu³`ļżžÓļ­S9Ęւ‹”””~A4ouuuŠ4 łłł˜;wnŠtĄO÷„žÅ>P0īT$''ć­·ŽĀāŋńŽ{ļĮķvū¼ōōō ½¤¼¹\.\}õÕX·n±ÆX Ē%—\‚åĖ—Ÿ¶ŗėēų_’śW›iN'¢££±’~Œ?‡‚,ĖGdd$$IB§N0fĢ#œŚy?ļĒÓAÓ4ÜpĆ ųä“O4æOĀĀĀ`µZŠK.¹ä¤z ?ŸŸ3ż©ŪfZ§Ó‰ŠŠPŲl6\wŻuxć7°{÷nŒ1•••Ų“i’““ѵkWŸükjjŚżŁŃMÓš·æż W\qÅ)>cģéÉ'ŸD~~>.\ˆ|ŠļÉąo¼qŅA€“yŹÓ–ĮƒcõźÕš0‡ĀĮƒqšąA¬X±ü1ŗuė†Å‹·+æÖ(z—Šö, ¦łņī†"ż‹Č‰łµÖe¹©©É'H uXµj&Mšä7ŒąĘoō ¬\¹K—.Å;#)S¦`Ū¶m8|ų0EŻn7;'ö ųŪßž†}ūöažüł˜3gŽß}šĪ;ļœt@õŸ’üiii­¦m-0r¶ĢµmOšÉb±ą‰'žĄO<·ŪŅŅRć>ĪĪĪĘK/½„™3gāĄķ:­½æ‚Żß š»E§vŒ­ɜNg«KĄé÷Ą Ś éOEõ@ũЙ={6fĻž "BYYŠ‹‹QRR‚¼¼<¼ņŹ+x蔇0jŌØ Żuoæż6Ö­[‡™3gāłēŸ÷[V5++ė“ōóøqćF\tŃE­¦ÕßĖ ,Ą”C‡°xńbÜ}÷Ż~÷Śāŋ}‚gņ¼Ÿm+W®Ä'Ÿ|‚I“&įÕW_õiXĶĖD¾’žū'•ē/ķüÜsĻ=čßæ?ÖÆ_;w"//N§BDEEaŠ A8pą)•”ߗ{öģA=ZMėŻ‹ć¦›nĀo¼åĖ—cĈX¹r%Eń 4÷č读7vģŲŃ®z“ę’ū~ųį¼šĀ m¦e­ć cŒżmٲaaaX°`AĄ§z·SoBˆVŸ€:tč“ŌmēĪXæ~=nøįōźÕ ĘXW yރˆˆlŚ“©Ży–––‚ˆ ŠĒƒėbéM:ÖZƒHoģŸŲ Ö»;ŸHUUTWW£gĻž€#GŽ °°Ó§O÷Y#ŁŪ‰×G:µlŁ2!Š©S' >:t@TT”Ń<і-[`·Ū±hŃ¢€_ ŻmŃ»¼ŖŖtŲFvv6ņņņœœÜj·ć³éd®m[AEQšü‰‰‰˜1c, €Ė/æ³fĶ‚ĖåĀ‹/¾ˆÜÜ\\|ńÅF=Ų{¬µ÷W°®ųś½­_“S9Ę`ć¹õ®ļĮŗ:? hjj zOTWW㫯¾BBBFeÜ'Kšvļ½÷ā•W^ĮŽ;0jŌØ é¼½żöŪØØØĄŸ’üg!йsgtīÜŁ—=`ĄLŸ>ß|óM›A€-[¶-Zä~Žū§5Žē8ŲyÜ“iŹĖĖ1uźTŲķvlٲ]»vŃ>0ż‰uŌ{’µvŽ}ōQ<õŌSųģ³Ļ0eŹ”“=Œ³Fæ> ,š ?ļśčē§µy>żōSL›6 .DzzśI—q:566bß¾}ųĻžƒ„„c8ž·Aŗ ż¾Ō ¬[·UUUøīŗėŒļ&L@ll,–/_ާžz Ė—/‡ÅbĮõ×_ļ—uuuмŻn7V®\‰Ž;ļhöńä“ObōčŃAēaķw~õūaŒ1Ö.DĒć×EY·yófæm1118vģXĄĘȆ ŚÕ^§78õ§šŽöķŪ‡¹sēā믿ŗæ§Żå566⫯¾ņŪ®( ¾üņKŲl6c¾„Ö <‚ ˆ7n„,ĖčÕ«—ĻkŸžyĄ:Æ_æMMM0`€‘ænŹŽĒ²{÷nŸm×\s .½ōR¬Y³7ß|3®¼ņJŒ9‰‰‰ˆŠŠ‚$IHLLĬY³pąĄŸśŖŖō)³ž%śDśõ;qā+ą§É©6nÜp_xģ±Ē––Öj3”µzėOVƒŻwn·[·nETTT›CnL&žzź© cXŸžŹė×Yļ^œ••0żŹ•+ƒęõŁgŸÜ®÷ęIJJŠö1ŖŖŠo¾łĘėīķ‹/¾8vśĖ/æe"I†Šģģģ  Æµk×"--Ķč¤OŠłå—_ĶwĻž=Ę½ķ­µė¼|łr<üšĆA?ÆN¼.­iė½čsԻށź×š¶Ž[D„;īø·Ür‹Ń{ˆˆZ=–ė8tčPH’d\×@ōIOœœļ|sŖ×ĒķvūżŒŒŒDbb"vīÜ“w׳t~žļ’žĒŽĆļ’{L:cĒŽÅĄgĢqłå—ćƒ>ųŁe“u_źO÷ļæ’~Ÿ‡²,cęĢ™ČĖĖƦM›°nŻ:Lœ8ŃoØÅ°aĆpäȑ “fee!-- ƽöZ«õüģ³Ļ••…G}ō$ŽŽĆAĘū6lššššē?’………ĘDQ{öģĮż÷ßoŒ”ōī6Ž|óM̚5+čÄ{ÄĒĒų©»ł¾}ūP\\ ĘSŃ ąķ·ßĘ÷ߏ²²2”••aēĪøõÖ[įt:qłå—ŸŌ1ßvŪmųųćQTT„£Gbūöķ˜1cņņņpĆ 7“k2°>}ś`̘1ČČČĄ}÷݇ķŪ·ćŠ”C(..ĘęĶ›ńŪßž{÷īÅUW]å× ??7Žx#vģ؁ņņr>|Ė–-Ćm·Żøå–[4O Æ¾ś ’ļ’ż?TTT@Q”——###W]u•ń”Næ>N§ÅÅÅHMMÅĪ;±gϬ_æĖ—/ĒŅ„KńųćcȐ!xļ½÷0uźTćĖń°aĆąv»ńŠC”  MMMØ««CVVžš‡?ąĆ?ō)G«ÕŠĶ›7ćwŽANN ”( 1~üx|ōŃGøļ¾ū°uėV”––¢¬¬ {÷īEzz:Ö¬Yƒ!C† _æ~'u OUēĪ!„Ą_|?ž?üš AD;v,šöŪoc޼yŲ½{7>Œ`żśõ˜6mŹŹŹ0sęĢvÉ=z4233ńĒ?ž[¶lĮP]]}ūöaé҄ƜC† Š‹˜˜cõ€!C†`Š AX±bžō§?aēĪ())ĮĮƒ±iÓ&̘1øīŗėŒÉĆt{öģĮķ·ßŽ]»v”¼¼GŽĮūļæūī»’$÷o0wŻuŽ?މ'bŊ(**BUUöļߏ>ųsę́$IĘSĄžżūćŅK/ŗ_~‰ßżīwŲ“iŠŠŠpąĄlß¾÷Ž{/vģ؁ŌŌTæFƒ>éāO<ķŪ·£°°Šxό30cĘ ddd`ß¾}ØŖŖBqq1V­ZeŒ;NNNnóėŸ¹sēbļŽ½hhh@CCņņņšä“O“~²²2cŌĀĀĀ6»˜Oœ8=zōĄ“O>‰E‹aĻž=ĘgÉ®]»p×]w×O„ 6 xōŃGQ\\ ·Ūźźjģܹ·Żv›ŃpÓė‹©S§"337ß|36lŲ€żū÷£øø™™™xųį‡ńÅ_`ųšįĘä£ē+żś,\ø»wļĘńćĒŃŲ؈ĀĀB,^¼ŲøÖ®OēĪįr¹š×æž{öģ1&h€;ļ¼ĒĒÕW_U«V!77%%%ČĶĶŒ%KšÜsĻ!<<ü¼č%QPP€,[¶ ¹¹¹Ų¼y3VÆ^·Žz K–,ĮģŁ³‘——‡o¼±ÕĄmk¦M›†Ž;b޼yxśé§ńŻwß”¢¢%%%Ų¾};fĻžŹŹŹ€ĆĆō®’æūŻļąńxü†Ķē[©S§āŻwßE^^Ŗ««QTT„Õ«Wćī»ļ€6‡Ÿ=łä“2dHŠvģ$ékžóŸ’<›Ė2Ęó2dČtŻāQ=€ßĶf£yóęZ¼x±±OMM 3&ą>÷Üs5Šģv»O9‹…ś÷ļļW¾¢(4ż¼Æ IDATvģXŸ<¼×Lį…Čb±, =šŽ=Ś®cµX,4lŲ0ŗģ²Ėę5jŌ(Ÿ¼žyę@Ė—/˜ß¾}ūØoß¾Aė6jŌ(:r䈑žõ×_'tŪm·Qxxø_zY–é‰'žš)cłņåd³Łęß½{wŗóĪ; żšĆDD“xńb@¹¹¹­ž‹3f*))!"¢ƒRĻž=–cµZéŃG%ōĢ3ĻųåõšĆūķsųša"":tč]|ńÅAĻQ=č»ļ¾kĒÕūióW^yÅŲ6gĪ@›6m øĻO<į³N··[o½ÕÆ>n·›ˆˆvģŲA]ŗt Zļ‰'Rmmm»ź——Gżśõ šWXX˜ß=¶iÓ&źŠ”ƒ_Z»ŻN/¼š Ł³géõõ³ēĢ™C’$łķMėÖ­ó)ćūļæzĶŠe—]ęó~ŠĻ’<@‡#ą}ņņĖ/ū”±eĖc¦iōŠC‘,Ė˵X,ōüóĻūäSPP@IIIAėŚæ***ņ;÷ß’=EDDų¤żĖ_žBDDtĶ5×ĶS’$š3gN»®qCC]zé„óBŠĀ… IįsĶtÆæžŗß5[»vm›eīŽ½›ƒÖĈ>kŃļŻ»—āā⦠„Gy„Šo¼aģSZZJ£Fjõż»wļ^#ż{ļ½Gü®Ÿn͚5€-ZŌęńéėŠO›6-ąėŻŗu£®]»|-%%…Pcc#¹Żnšłä2›Ķ>éß}÷]#ߛnŗ©Õ÷ö'Ÿ|bäUXXHžöī<¬ŖŖ}ųų—Ć™'A@ÅHLEqĀ Ō¬HͱDĖ!sĢrØ|ŹJ1ĖRSsHóqzĢ4S+Ss2SK1A ”A™'aæų²ĻĮ)K‹ūs]\W¬½ĪŽkÆ}R×½×ŗ—Ņ·o_³ķĪČČP„sēĪjŁŽ½{@>|øZ¶jÕ*ØpĢUŽĻS§NUåĘ÷S£Ń(£F2[æÜ?žØŹo¼qŪzŠņϧC‡Få{÷ī½ķŸaaaŹÕ«WMĪWVV¦ŌŖUK”*UŖ(¹¹¹fÆūńĒWųw¢F£QʍgTŲ°a  ģŪ·Ļč×®]{Ē{ü7Ųµk—R>FÆ_æ~©Į`(¶¶¶Ī·³³Ėrtt¼āźźzĪÓÓ3¾Fqµk׎śųćÆ š2„yóęĆĆĀĀz…‡‡‡wźŌ)¤K—.EFFz÷éÓĒuŠ Av“2dˆNr!Ä#ą­·Ž"##ć®’ŪŌ¬Y“ß’]»v©oHlllšōō¤cĒŽ899Q³fM£„AģŪ·;wrāÄ .^¼ˆ““³eĖ“µÉóęĶ3»~ŚŅŅ’]»v±mŪ6NŸ>MjjŖŃzב#GŅ»wovīÜIbb"¹¹¹h4<== „Q£F÷”!ŁÖ֖]»v±gĻŽ=JZZvvv„„„Š®];£)Š:tĄĮĮA}‹t«:uźpāÄ vķŚ„¾ńŠjµøŗŗŅ¤Iš5kfvVD»vķųšĆłī»ļ8{ö,………xzzŅ©S'“i£‘‘‘œ;wŽļ撞äädŠŠŠpppĄßߟŽ;ržüyš4i‚µµ5p#ū:ÜŲņ©|YĮ­JKKIKKSū zõźź½üņĖ/ź÷ĄĆƃŽ;āźźJõźÕ 09ßĢ™3‰ŒŒäȑ#\ŗt‰ėׯ«ĻŚŪŪ›Ÿ~ś‰øø8:Ä„K—€k;k×®MDD„ɛꊓmŪ–… ĶüˆŒŒ¤V­Z¾‰ģܹ3nnnf“§-[¶ŒØØ(~ūķ7._¾Œ¢(j„„„””ÄŽ;ˆ'33½^»»;Ķ›7W§Øß āć才å×_åņåĖ”••akkKżśõiÕŖ•É×V­Z‘””Ä?ü@rr2YYYųłłŃ­[70 F÷üĀ /ŹąĮƒ‰ŠŠbŪ¶m\¾|½^ææ?;w6ÉQÆ^=Ų¹s'ĒŽ#==N‡››M›6U×Ęߌ’]»veҤIlٲ…””EĮĒĒ‡Ī;›¬·.Ÿ&}óģ >śč#ƌĆ®]»8sę 888ąķķMūöķÕBåüüüųķ·ßˆ‰‰Qßzėt:\\\ <<Ül.‹zõźqźŌ)¶mŪĘüAvv6ķŚµn$vŪ“iĒgß¾}\¼x‘¢¢"uIPėÖ­ļ˜Ü¬œ 1118p€żū÷«[™¹øøŠ®];źÕ«‡ÆÆÆŁœQQQ4mŚ”}ūöqįĀ ļjśxƆ IHH`Ļž=źŸ?åĻļ‰'ž ,,ĢčĻĘĄĄ@NŸ>ĶöķŪ9vģyyyT©R///ž|ņI5éŚĶÖ{zzņÓO?±’~~łå.]ŗ„F£ĮÕՕڵkÓ”C£’›4iĀĀ… i޼¹Ł6?ńÄ,\øĘßńžģķķYøpa…Ļ ::ŗĀe ćʍ£OŸ>źRNĒ·ß~Ė”C‡ˆ%--Mżž„……\a›ŗuėʉ'ˆ‰‰!%%…‚‚u9˜N§cõźÕ¼õÖ[ÄĘʒ’’BII ...ųųųŠ”C£Ż\]]Yøpa…Ļ·J•*,\øŠhŪŃņŻCn~.÷ŚĻ¹¹¹”••©³ģ*’šš Ü]b½ņēsė’ó-Z“ 99™;wOZZƒ7776lHóęĶĶž½haaĮēŸNBBžžžn’8fĢś÷ļĻ?žØž›ĄÖÖOOOŚ“ic²ü®oß¾4lŲP-×ét,^¼˜=zÜńÅŻ±˜)))¬\¹’~żś=ģ& Qi………KŻŗu ĮĆý^Oii)¹¹¹j ąŠ”Cj Cü³ķ޽›ķŪ·°eĖ–²„„„RFs]«Õ–XZZiµŚN—«×ėst:Ż5N—©×ėÓõz}ŗN§KÓjµz½>S«Õféõśl­V›g0 ­­­‹ŹŹŹJōz}©ĢB!²† ²{÷n.\Ⱦ}ūŲ½{·Q–y;;;jÖ¬Éĉ™4iŅCl©ų·Ū¾};yyy¼šĀ w\£+„ųkmŚ“IŻņ«Æ¾R· …Ūqŗ¹¹ńĢ3Ļ0~üx ˆ{"A!„“ŌŌŌ»šęųWéׯŻŗu«pšćƒŅ¼ys£i¢ÅÅÅäååįččxOI…ų3¾’žū²ķ˜āĻsttdźŌ©L:U-»zõ*ÖÖÖXYY=ˉ: !„x¤U“·šßEÆ×?”AŃĆŗ®ØÜä;'Ä£ķa’(žd‹@!„B!„¢’ €B!„BQIH@!„B!„Ø$$ „B!„BTB!„B!* !„B!„x$(Š‚¢(»’j²E B!„BˆGĘŽ½{9sę 4 N:XYY=ģ&ż«H@!„B!Ä#ĮĀĀ‚–-[ržüy–/_NYYĪĪĪ4hŠ€Ęćį၅…ÅĆnę?š„ā²}ūv~žłgŹŹŹvS„B!Ŗ*UŖP\\̵k׈‰‰a’žżh4ģķķiß¾=X[[?ģfžćH@!eeeÄÄÄH@!„ā’³““ÄŅŅŅØ,))‰K—.aggG«V­hŻŗ5ƒį!µšŸG‚BńˆŠh4„……ÉL!„B øø˜āābJJJŠh4hµZ4 µjՒ™‚„āADDÄĆn†B!ÄCõæ’żO}1āģģLPP7ĘÓÓSrüIB!„BńȈ„øø˜^xAvų H@!„B!Ä#AQZ¶lI«V­vSžµ$ „B!„ā‘ Sż’zš‡Ż!„B!„Bü=$ „B!„BTB!„B!* !„B!„•„„B!„BˆJB‚B!„B!D%!A!„B!„¢’ €B!„BQIH@!„B!„Ø$$ „B!„BTB!„B!* !„B!„•„„B!„BˆJB‚B!„B!D%!A!„B!„¢’ €B!„BQIH@!„B!„Ø$$ „B!„BTB!„B!* !„B!„•„„B!„BˆJB‚B!„B!D%!A!„B¹~ż:ėÖ­ćąĮƒ»)ÕöķŪłī»ļv3ž“Ó§O³nŻ: ’ök’ōÓO¬[·Ž3gĪÜ±īžżūٶmłłł¬[·Ž_~łE=~īÜ9Ö­[G\\Ü_ÖŽGĶ‘#GX·n»)Bˆ !„ĀHAA½zõb޼y»)Մ 1bÄĆn†‘ŌŌTvģŲAjjź]ę„—^böģŁXYYż…-3oīܹōźÕ‹]»vݶ޵k×xņÉ'Ł·oéééōźÕ‹… ŖubbbčÕ«Ÿ|ņɟn׎;8zōčŸ>Ļ_mٲeōźÕ‹ŒŒŒ»ŖŸ™™ÉŽ;ųć?žā– !žÉ$ „Bń±sēN"""Ų¹sē]Õß·o»wļę7Žų‹[f^“&MčŁ³'¾¾¾·­7wī\ŹŹŹ5jT…ujŌØAĻž= żÓķźŠ”ĆC듿ŅįƇ‰ˆˆ`żśõ»)BˆG˜öa7@!„Bü5Ž’}6lH§NŹõGuہ=@^^sęĢįå—_ĘÅÅ„Āzaaa„……=č& !D„#A!„¢Ų¼y3[¶l!**Źģ›Ō+V°wļ^ʏ‡‡‡ZžššŹĀ… 9|ų0„„„x{{Ó£GĀĆĆH»fĶšÅ•+W˜2e ‹/&66–āāb9r$>>>œł„V­ZŃæ“¶ÄÅűlŁ2ŗvķJēĪÕņ‚‚¾ųā vļŽMVVīīī“oߞ~żś”Õ’Sźüłó¬^½š#Gސ••…N§ĆÓӓvķŚŃ½{wt:Qż³gϲnŻ:>Lzz:vvvx{{Ó¹sg:vģˆ……ļ½÷)))œ>}€Ļ?’œ={öšā‹/br?‡fėÖ­|õÕWXXXĶkƽF£F2dˆQ½ņŹ+”––ҹsgŗvķŖĖČČ`ņäɄ††@NNkÖ¬įĄ\ŗt ½^››aaa<÷ÜsF˾żö[6mŚÄ믿N­ZµĢ~,X@^^cĒŽ5{¼Ü™3gˆŽŽę©§ž¢K—.jyQQ_~ł%111\øpFƒ‹‹ ”””ōė×{{{¶mŪ¦¾!W…cĒŽ1tčPžxā ^yåõœG嫯¾"!!ģģlœœœ gĻžŖõŽ9ĀgŸ}ʈ#())į‹/¾ąōéÓ8::āēēG’žżyüńĒīCQ¾ūī;¶mŪFrr2%%%8;;D’žżM¾ĆęģßæŸåĖ—ćććĆäɓ™;w.'NœąĀ… ¬[·Ž“'OšÜsĻŃ®]»;žSQ‰Lž}ŗÉ}ÅĘĘ*€„äēē+vvvJ­ZµĢöĮ /¼ Ź”C‡EQ”† *JhhØb0”ĄĄ@% @Ńjµ  tźŌI)++S?æcĒÅŚŚZƒĮ Ō®][©V­šZæmŪ¶JII‰Z?&&F­_³fM„Q£FJķŚµ½^ÆŹŠ”CÕŗ 4PūžÖŸ5k֘½ŸČČH%00P)--U˼½½£zĒŽSE«Õ*]ŗt1:¶aĆPęĢ™£(Š¢\ŗtIńõõU„jÕŖJƒ ”ŗuė*vvv  +łłłźēßyēPŸ÷­ņóóå•W^1*?wīœ(/½ō’Z§Ź[o½„–åęę*ĮĮĮ  øøø(õė×WźÕ«§899)€āėė«\¹rEQEłąƒ*ģƧŸ~Z=ē| h4PÜŻŻ•ĄĄ@ÅĶĶMKKKå³Ļ>Sė®_æ^”gŸ}VŃh4jŸ”×7 ŹĪ;ī­oß¾  ŲŚŚ*JPPāįᔊršąAµīȑ#@IIIQĖ:¤888(ŽŽŽŹéÓ§EQ”:TxoŸ|ņ‰Ł¾B<švķŚ„”Ńėׯ_j0Š­­­óķģ첯øŗŗžóōōŒÆQ£F\ķŚµ·>žų櫃‚‚ę„„„Li޼łš°°°^įįįį:u éŅ„Ėc‘‘‘Ž}śōq4hŻĄ­† ¢“œB!D%ŠŸŸ›6m¢¤¤ÄčŲ‘#GHNN&22ƒĮ –ļŪ·#FžžĪŃ£G9sę æžś+īīīL:•¬¬,:uźÄ!Cīé§Zµjźu²³³iŲ°!—/_ęäɓ¤¦¦2gĪ233‰ŠŠāŻwß%##ƒS§N‘““Cæ~ż8uź›6m oß¾ŲŚŚ²råJ“ū.óūüóĻcmmM÷īŻIJJ2I WRR¦M›ØS§5RĖSSS©Zµ*©©©?~œß’ .мys¶nŻŹŽ;ԺÇG£Ń°mŪ6 ILLäĀ… dffŅævķŚÅŠ+Ōś“&MĀĪĪŽ'NpęĢ:Dbb"ēϟ'44”E‹©ov9‚¢(¬Zµ €U«V”( Тлwo“ūŽgćʍLž<ę’ž¹×¶m[ 8p€īŻ»›dŽU?0gĪĪž=ˆ HMMåȑ#ÄĒĒ“––ʰaĆ8|ų0ß|óI{*ņłēŸ“™™É믿~ן¹ŁŠ+8|ų0sēĪåŹ•+üśėÆ;vŒ““4ŽyēΜ9òeĖxķµ×Ō>³°° sēĪźļ›7o 11‘I“&ĢüĮåĖ—9~ü8W®\!>>oooʎĖÕ«WŚńż÷ß³yófµO®\¹Ā—_~Iqq1S§NUėżüóϬ^½š!C†––ĘńćĒ9zō(—.]bćʍäęęņį‡VxæĒ§cĒŽŲŚŚ²k×.uvÅ?ü€¢(lß¾ø1ƦüŽF}_}+„ų÷’ €BQ XXXЧO233M2µ—”ūōécTīēēĒ›o¾i4å½~żśDEEQTTDBB$::śž~nM7kÖ,ģģģŌ߇Š^ƧzõźŒ?^Čźt:FŽ  ^ßĪĪŽ¾}ūĻįƇÕs(ŠĀ† Ø^½ŗŗ–¼üoMœ¶sēN®^½jŅĢž=[]ząīīĪäɓųķ·ßHNN&11‘~żśat;;;>žųc4 [·nUĖOœ8A»vķL¦‹»¹¹1qāDzōčA^^÷cśōéųłłńÜsĻ•—ę÷īŻ«–ÅÅÅQ³fMŗwļĪ•+WHJJRÅĘĘāīī®N?qāžžžtļŽŻč¼ƒ±cĒҳgO¬­­ļŖÅÅÅ̜9“ąććs_÷„„%C‡5 vXZZ2bÄzöģyŪ<·śę›o(--eśōé&mŖ[·.cƌ”  @ŻÅ \æ~żŒ–ōģŁ“āć捦 7–pÜŗ[C×®]ĀĆĆqww7Ū`qqq”F&møµŹß¬×©SĒģ=ŗŗŗāģģĢ™3gŒŹ>ĢoæżFii©Qż®]»ņå—_Vx¾Ū9}ś4’ūß’˜8q"–––FĒŹƒåoųįĘL€ŠŠP5WDłl€œœŽ=J›6mŌÜ®®®ddd°uėV Ī]§N¾üņK£œ·³bÅ .\øĄÄ‰ļł˹¹¹QZZŹŗuėL&...|łå— <ų®ĻW¾µŽĶ³AnV>š¾xń¢QyćʍĶÖ÷šš ==ŻØ½_ż5™™™&õ/^Ģūļæo¶]įįįXXX°sēNüżżļān„Ā@«ÕŖūØõ“Z-½zõāÓO?åĉŌ­[—ŅŅR6nÜH£Fxģ±ĒŒĪ{·}““€M…mtvv&77Wż}Ź”) 8   t:ÕŖUĆĒLJźÕ«Č /¼pWIān———Ń}—«Y³&¾¾¾źL€«WƒĄŠ”CńõõÅĆƃŠÆ_?8Ąõė×ÕĄĄčŃ£łśėÆyņÉ'±°°ĄĆü½½©S§=zōØp}³ŅŅR¢££éŻ»÷Ÿz£=xš`–,YBæ~ż€³4¼½½ńööĘßߟ§Ÿ~Ś$øu;åóŠ’–žņóóŹ+šżpė÷$""‚-Z0}śt¦OŸŽƒƒƒśĢkŌØA›6mčŃ£‡É÷¾OŸ>¤¤¤šÓO?ŻW`H!n&A!„¢éÓ§'N$&&†¶mŪVųü^DGGóķ·ßŽÓgvļŽMėÖ­ļūšę 2„”C‡²cĒ:uźÄśõė ! ĄØ^ß¾}łōÓOYæ~=uėÖeĻž=¤„„1aĀ„ū¾vQQŃė”–– ū÷ļOĖ–-łńĒłć?8wī)))ÄÅűzõjfΜɯæžjv6DERRRX±b}ōz½Žl¶mŪ²|łr²³³łé§Ÿ(++Sg„††Ŗ9nĶ7²č'''óż÷ßsśōiΟ?OJJ 'OždÓ¦M|šĮlÜø‘gžyę¶ķ\»v-ÉÉÉlÜøń®ļĶ///ųī»ļŌ| üńgĻžeŪ¶m|ōŃG,X°€aƆŻÕłŹŸć믿^ap 0»ĆĘŻŠėõÄÄÄšć?rüųqõ™§¤¤°wļ^,XĄ‹/¾Čāŋ>7}śt^|ńEʍĒÖ­[©R„Ź}]_!@‚B!D„ҧO&MšÄ† Ō @ķŚµiҤÉ}Ÿsɒ%&oFļäęĀJß¾}?~<+V¬ jÕŖ$''3fĢ“zåIׯ_Ļ[o½Å† Šh4&ėēļEł ģvkųsssÕū.--%;;³ÓÕ×­[GÆ^½Xµj“&Mŗėv|šĮ8;;ßv |Ū¶mYŗt)ū÷ļ'..+++4h@³fĶŲ²e yyyÄĘĘR­Z5£Ł×®]C«ÕšMFxęĢY°`ĮmƒŠ¢0}śtŗuėf“ŻŽż(_Žńģ³ĻšĖČČ ~żś|śé§w(Ÿł1jŌØŪĪźø_yyyn’;¢ØØˆN:±téRfĻžmtż°°0Ö¬YC=čÖ­›7o6É) „wKr!„•HõźÕiٲ%6l !!ß~ūķOĶ€ėžżüüīéēÆĄŲŚŚŅ·o_6nÜČ_|N§3;X-O’ų믿rźŌ)6lŲ@«V­Ōuž÷ĆĻĻųæd…·JOOēŹ•+xzz7ŽŲ;;;óŽ{ļ™­ß¼ysĄtķyłŪé²²2“Ϥ¦¦ņłēŸ3nÜøŪ&ē»99ąhŲ°”ŗ+Dhh(ׯ_gß¾}}śpńāEʏÆžžo1dČņóó™7o:uRóÜŖüž_}õU.]ŗō§ūĄ×חĒœ5kÖšż÷ß ²²²;v,ТбcGąĘ4v;;;V®\i8(..fĮ‚&9 œ»ܜnģ°`ccĆšįĆoŪV///źŌ©Ćž={8xš ŃŌöʍ£Óé˜;w.&A€€€8ĄÖ­[QÅčŲ7ß|ùsēLŚ|«iӦѩS'‚ƒƒo[ļnpöģY–©ŁŽ3 IDAT/_n2Øßæ?‡2ŪgggŽ?n2ŲīŅ„ †Q£FqīÜ9£c—/_föģŁXXXÜSž[Ū 7¦÷ߚXńĢ™3|óĶ7ŲŚŚV˜ "**Š3fšķ·ßŅÆ_?“ļ@ł÷#&&ę®–Ø!*' !„•LĻž=Ńétlٲ… ˜lQ÷OLHH„„„fć•+O’øeĖt:=zōųÓמ?¾ŗ’¼µµ55kÖ¤jÕŖ8::²råJ:vģH’žż[NŸ>””puu„nŻŗŌ­[Ž’}ź×ÆĻóĻ?ot¦M›āęęƲe˰³³£f͚¼łę›ddd°`ĮF]a2ƛµmŪ–}ūöqķŚ5£ € õė×Ws<Üxūķ·±±±įÉ'ŸÄŽŽź×Ə››ŻŗuĆĪĪŽ7ß|³ĀėnŻŗ•C‡=Y&L jÕŖ 8{{{|}}iŠ žžž“hтŅŅR³ŁöŸ~śi.\ø€··7ÕŖU£~żśĄmß{ļ=bcc©Y³&>>>Ō«W5jąååž}ū˜8qā}'ēėßæ? 6䣏>ĀŃŃ6lˆžžž$%%ńŽ{ļŻv¦ĢkƽĘųńćłź«Æ4hQĄ)00___6mŚ„½½=Õ«WæcPHQłX¶jÕźmø1…®iÓ¦¹9B!„ų«ŁŲŲąģģĢO<Į AƒĢn7VRRBėÖ­Ķ®Ł.--ÅÕՕvķŚ©oļWqq1uėÖ5ūfµØØˆf͚™læ¦( –––“iÓĘ$‹»¢(|öŁg³pįB“ڊÓUÆ^zõźe6IaQQ 4 eĖ–&ĒEA«Õµ”f͚ 0\]]±··§vķŚt詁ɓ'3uźT£ö4iŅ„ČČHÜŻŻqttÄĘĘBCC;v,³fĶ2IgeeEÆ^½ptt¤ZµjŲŁŁŃ¼yst:vvv¼śź«wµŌĀŻŻgggZ¶lIļŽ½ŽŽŽųłłN÷īŻ>ēććĆĄńööĘŁŁ{{{©WÆC† a޼yFĻäśõėxzzҾ}{łłēŸiŚ“©Łe·ö/@ėÖ­Õ •¢(čõzZ·n­^ĆÅŅĮƒS£F \\\pttÄÖ֖€€¢¢¢˜;w®Ł;wĘŪŪ[‘Q«V-ŗuė@«V­čÖ­īīīT©R{ģ1"""ˆŽŽfŠ AźyJKK±··§]»vźR›óŲcÜH 8pą@źÖ­‹««+NNNčõzj×®MĻž=łšĆś¼¤¤„5jо}{£ēƒƒ'''5ׄ„„%Ļ=÷ĪĪĪź÷£I“&÷ČPń÷;{ö,ÉÉɜ:uJÉČČP,,,Ź4M™F£)Õh4×---‹’’O”„„e„„e~łF£)°““,Šh4E–––E¦D«Õ^×ét„Š¢”YZZ*“'OVŖV­ŹØQ£ź !„B܏éÓ§cmmMll,6l`źŌ©¼õÖ[»YB!Ä=ٽ{7Ū·o`Ė–-e „ęŗV«-±““,Ņjµ:.WÆ×ēčtŗk:.SÆ×§ėõśtN—¦Õj3ōz}¦V«ĶŅėõŁZ­6Ļ`0Z[[••••čõśRŁ@!„’xŃŃŃdgg£Óéw¼^YYÉÉɤ„„Żw›333INN¦øøX-»råŹ]݇Bü$1 B!Ä]HKKć—_~įŚµk»)›÷ߟŽ;ņP®’믿RVVvŪ¤—/_fɒ%¼żöŪX[[«åūöķĆĀĀ‚ü77·æ£¹Bń A!„¢’Q…S§N‘’’‚N§ĆĶĶĒ{ KKK³õĖŹŹųż÷ß¹téz½žŖU«āļļFó`&fgg“žžNµjÕ°²²RÆåééÉć?®Ö+((ąšįƔ””ąėėK5Ōc×®]#33L®‘‘‘AVVīīīŲŚŚŖåłłł;vŒœœŖT©B5ØV­šŃgSRR())!==ø1čLNNĄĆĆ.^¼Hii)>>>äääOqq1aaaFēJHHąŹ•+8;;Pa旔”˜˜Hzz:„„„xxxP»vmt:Q½ .PVV†łłłüöŪo”””`4ųMII!11kkkź×ÆO•*U*~(Ą¶mŪųłēŸ‰‰‰ ++‹ŒŒ õžĖrńāE¼½½¶hĢÉÉ!-- 777ģģģī©ßt:%%%öĄ¬Y³°¶¶fųšį\¼x‘ĀĀBŅŅŅŠėõää䐓“ƒ•••Ń5ŠŠŠˆWæ7·ķāābõy(Š¢>­öĻżs:;;›ÄÄD®^½Šµµ5Õ«WĒĒĒ§Āś$$$ŸŸÆŽ“ŸŸßŸjƒ¢r‘ €BQ‰,X°€’üē?&ӝ]\\˜2e £F2*Ÿ1c3fĢ0YĖ\µjU¦OŸNTTńńńlŁ²åžŚŅ°aC:t衚5k6lsęĢaŃ¢E?~\­ĢW_}ÅöķŪyõÕWÉĶĶUuźŌ‰µk×booĻoæżFėÖ­éŪ·/«V­2¹ÖsĻ=ĒĪ;ILLÄÖ֖œœ^zé%¾žśk£iŪåķZ²d ĮĮĮ“k׎ӧO«Ē‡Ŗž÷¦M›xę™gčׯ§NāÕW_eŹ”)äååQµjURSSXµj'NäüłóF×rrrāõ×_gĀ„ XXXØåŸ|ņ ļ¼óŽÉ¬'''&MšÄkƽ¦–EFF’™™Éˆ#xóĶ7ÉĖĖ@«Õ2räHŽ~ūmžžy6mŚ„¢(ŲŲŲĶȑ#+|>ļæ’>aaa“jÕ €={öеkWf͚ÅŲ±cÕzk×®eąĄ|ūķ·tīÜY=6sęLŽ}÷]öģŁCXXŁŁŁjæßšØÆQ£F,Y²„ ØeŻ»w'))‰ŒŒ ³mĢĢĢdĮ‚Œ?^ 2ōīŻ›ŲŲXµN­ZµhÓ¦ »vķRļmśōéj_•÷mtt“ŁėDGG3mŚ4rrrŒŹ]\\xēw1b„ŁĻŻNjj*C‡åŪoæ5Y&PÆ^=-ZD³fĶŌ²‹/2xš`~ųįõ9Ž\ɒ%4mŚōžŪ!„Ø|$ „BT;vģąå—_&44”ččh|||())įģŁ³|ņÉ'Œ=šzõźŃ®];¾üņK&NœH›6m8p ^^^’””ĬY³|øQ²¶±cĒśo¾‰Į`ą»ļ¾cńāÅ“k׎«WÆ2fĢ‚ƒƒ¹zõ*«V­bėÖ­L›6ččhZµjÅć?ĪʍÉÉÉ1zėœžžĪž={h޼¹: 9r$_~ł%C‡%""{{{rrrˆ‹‹cöģŁtė֍ääd“Z-ƽöWÆ^åąĮƒlŲ°ēŸžŗuėĶTøtéćĒ§gĻž4oŽ///¾’ž{ @­Zµ˜1c~~~čt:Īž=ĖēŸΤI“pttdŲ°aĄ7šcĒŽ%88˜ńćĒS­Z5JKKIMMežüł¼žśė4nܘ¶mŪŖ×NNNfęĢ™L™2…€€222˜={6ü17nÄŃё… āęęĘ©S§ųąƒ=z4;v¤N:&Ļ&66–˜˜~ųįµ,,, KKKbcc‚qqqxzz’ĶŒ‚±±±X[[«ƒÓ#F°nŻ:†NūöķÕ~?pąsęĢ”[·n$%%ŻöĶ’ĶęĢ™ƒ………Q0c芔<õŌS,]ŗ”äädŽ{ļ=ŖWÆĄŅ„KyóĶ7iŠ ćʍĆĒLJŒŒ öīŻkv0’õ×_3iŅ$BCC;v,\æ~ .šé§Ÿ2räHBBBhҤÉ]µ¹\dd$ oß¾4oŽooo²²²8~ü8Ÿ~ś)O=õ źlŽ=zpąĄ @xx8ĪĪĪpšąAęϟOēĪILL¼ķŅ !„`ņäÉŹäɓ•ٳg+B!„ų÷zå•WKKKåŚµk&Ēöļ߯ʔ)SŌ²¾}ū*¶¶¶Jaa”Iż-[¶(€ņÉ'Ÿüév}öŁg   >ÜäX‹-@łüóĻŹ {{{„AƒjŁĒ¬Ź_|aTwńāÅ  ,\øP-srrRŗvķj¶=/æü²(§N2*_øp”(7n4łL›6m@™;w®É±öķŪ+ƒA9ž¼É±«WÆ*JƆ Õ²#F(€rüųq“śēĪSeŚ“ijY“&M@9tčQŻ“'O*€āää¤dff[¹re…ķUE銔ƒbRŽøqcÅĶĶM)++SĖ‚‚‚”gŸ}ViŻŗµ®–)ÖÖÖFeöööJdd¤Łk:T”¤¤$µ,$$Dqvv6[?;;[qvvV&Nœhöx§N+++“ņąą`ÅĮĮĮ¤OEQ^{ķ5P¢¢¢Ō²^xA”³gϚŌ?qā„(sęĢQĖ^}õUPŽ;¦–õė×O”““4EQå×_UeĄ€fŪ^ž?¾¢(ŠrųšaPz÷īm¶ž¼yó@Yŗt©ŁćBˆŽ]»v)åcōśõė— †bkkė|;;»,GGĒ+®®®ē<==ćkŌØW»vķ­?žųź   9!!!Sš7o><,,¬Wxxxx§NBŗtéņXdd¤wŸ>}\ d7pą@«!C†čdw!„¢’ČĖĖĆ`0`0LŽ…„„””d“ ??Ÿ*UŖ˜}+NRRĻ?’ük_ł „›•ÆÓ.Ÿ’^ĪŹŹ ooo£éŁĻ?’>^-{õÕW9tčŃ,ƒråyn]Īįąą@£FŒŹ{ģ1“Z-õźÕĆÉÉÉčXķŚµL¦·üüóĻlŪ¶7ŽxĆäXŪ¶mIKK#!!AżüńćĒ „Y³fkRöÖ[oqčŠ!£å*zwrāÄ ž|ņI³ĒĖĖ= ÜčK€gžyĘlż:ŠØQ#“„-BaŽ,B!*‰ˆˆ–-[¦N%÷õõÅĖĖ oooźŌ©c’\,""‚7ҤIZµj…ÆÆ/ŽŽŽxyyńŲc=šddęՕ']3wģÖą„³³3=zō`õźÕœ?ooo®^½ŹĪ;éŅ„‹:č³°° ""‚U«V‘‘‘APP>>>źĻżŽ›QR<€ėׯ“••Ezz:3fĢ0ū¹““4Š‹‹)**Ā`0ąėė‹N§cžüłœ?žģģlJJJŌ©ā€ÉššŠ’üiµZ£DˆåŹÆ·žnAžxā £ķöʵmŪ–™3gK@@?’ü3„„„„††’‘‘Att4ńńńŌÆ__]—_Šh4„‡‡³bÅ ŅŅŅ ĀŪŪŪØßĶ ĢĶ)((ąć?ę„—^ĀŻŻż®>7’šćźźjöø§§§IY­Zµ8{ö,sęĢįāŋdeeQRRBvv¶:H7׏wjÜ™S޾›“QĀ\ęŌ®][ !ĝH@!„Ø$z÷īMVVK—.eÕŖU&Éžš7oĪŚµkńöö`Ų°a²jÕ*–/_NVV–QżöķŪóæ’żWWW6nÜČ«Æ¾zOķéׯS§Nżs7u‹!C†°råJVÆ^Ķ믿ĪęĶ›)..fĄ€Fõ¾ųā ¦L™Ā?žČ?žHQQ‘zLÆ×3räH>üšĆ?ŻžģģlE!>>¾Ā ÜHJWPP€Į``Ė–-ōčу¢¢"<==qqqĮ`0`kkKėÖ­łż÷ß’t»*rģŲ16mŚÄźÕ«–kٲ%Z­–½{÷ņŅK/qąĄt:5R¶qqqjĄÖ֖ʍ«Ÿ’ļ’«öūŽ;Lś}̘1·ķ§r‹/ꌵkŒ?žžīƼ7ļnp3s³Ö­[Gß¾}¹~ż:ÕŖUĆÅŽ^Æ>ÄÄÄ{j &ø“²²2{Ü`0 Ńhø~ż:pcஃ$Bq;B!* † ¦& ĖĶĶå?žąÜ¹sÄÄÄ0cĘ ^{ķ5Ö¬YÜxs;nÜ8ʍÜ@„¤¤pöģY¶mŪƜ9s˜2e óēĻĒĆƃššš{jO@@Ąƒ½An,Ø[·.+V¬ąõ×_gżśõø¹¹™L»vuuežüłźļ©©©¤¤¤pęĢ.\ČG}D›6mxśé§’T{Ź·óėÓ§Ė–-»«ĻŒ7GGGvļŽmŅG¹¹¹|öŁgŖM·3mŚ4üżżÕ„·²³³#$$D}ĖGPPÖÖÖX[[ćēēǁxńÅŁ·o-[¶4ŚŅŠĶĶ ØæßÜļ ,ąƒ> M›6N“‡[õ͜9“^xA XŻ­ņ7ļfgffż®( cƌĮÓӓ]»v©‰%on’’%Kī© š3\*jGaa!eeejP¢ÉÖ­[9xš Züųńxyy©k®ķķķ $00§žzŠ7ŖõCCC żūoʌ!C†0fĢbbbŲ¶m/¾ų¢Ń@ōܹsL›6ž={Ŗ <<< !00zõźńÓO?żé €­­-vvv&³.nöß’ž—'N0uźTŠŠŠHLLdąĄfƒ$å[žN:ÅŗuėX²dÉm³ó·mŪ–iÓ¦‘’’B\\½{÷V5k֌øø8Ž;ʵk׌v08sę ŃŃŃōźÕ‹öķŪĘż@PP?żōÓmƒĖ—/'55• &Üó=ŚŁŁa0ųć?Ģæpį‚Ńļ©©©\¼x‘W^yÅ$P~ü~”Ōo :”+Ļ1ąąą ęI(_p«3gĪP»vmFŒĮ§Ÿ~z_mBT’P!„Ø$bbbųč£Ģ&ƒ+))!##ĆhMūöķŪłųćĶ&ĖĻĻ'''Ēl’Į‡mĄ€X[[3xš` M’jµZ-ZÄŖU«Ģ~¾|`wė½•æ½Ż€žV4k֌ݻw›0ńŸ’ü‡•+W¢×ė1 XXXpńāE³ēŪ¼y3pļkŠļFtt4ŽŽŽōė×ļ¶õŚ“iĄ²eĖHOO7 ž„††’Ą7ß|`°““dŃ¢EźL“[UŌļ7»~ż:3fĢ OŸ>÷“¢|&ƒ¹>¾5©dł3ŠĻ£<‰ćśõėĶ// nWVÆ^möZ{öģ ^½z÷Ō!Då$3„BˆJ¢{÷īģŽ½›-ZIÕŖU±··'55•õėד’’Ā[o½„֏ŒŒäķ·ß¦E‹<óĢ3xxx`ccĆ„K—X³f WÆ^­pŚųĆTž pŊbtÜĖĖ‹&Mš°|łrrssiҤ īī•qźŌ)–.]ŠN§£{÷īFŸó÷÷ą7Ž )) OOOźÕ«GXXŲmŪóŚkÆŃ”C‚ƒƒ0`µk×F«ÕråŹÖÆ_ĻŁ³gÕ½ģõz=mŚ“aŪ¶m <˜öķŪ£Óéøvķ;vģąŪoæE«Õš äüēĪcåŹ•Ģž=Ūhք9-Z“@Æ×3oŽ<£ @³fĶP…yóęįąą@pp°z¬zõź4jԈeĖ–‘MHHīīī”––’˜˜ČŅ„KŃėõtėÖ­Āk’ļ’ćĢ™3źąū~Œ?žīݻӢE † BõźÕIOO'&&†ļ¾ūĪØ®““!!!|żõ× >œ°°0“Z-™™™üšĆģŲ± ‹{~žžžtīܙ7Ņ®];Zµj…§§'™™™œ8q‚µk×āįįĮsĻ=ÜX:óōÓOóõ×_Ó¾}{ĀĀĀšōō¤ØØˆ#GްvķZ\]]éÕ«×}÷‹¢ņ €BQI¼ņŹ+2oŽ<Žyē£c^^^Lœ8‘)S¦ØeåĖ-ZÄžó£ś5kÖäŻwßeōčŃ}ĆļƓO>Ɋ+L–Ūøq#ćĒē›o¾į«Æ¾RĖ---iŠ Ė–-S·',׬Y3&L˜Ąœ9sŌAū¤I“īgóęͼżöŪ|ųᇔ••©ĒŖV­Ź»ļ¾Ė¤I“Ō²/¾ų‚aƆ±råJ–.]Ŗ–WÆ^åĖ—3iŅ$RRRī¾3īĀ|€››QQQw¬kccCÓ¦M‰ÅŻŻŻhš|żśõ±±±įŹ•+<óĢ3&Ė 6mڤöūŗuėŌrKKK6lČņåĖĶn7Ö½OŸ>gŸ}¶Ā:w£k×®,[¶Œ)S¦0yņdµÜßßŸĶ›7›!VÆ^ĶšįĆY²d‰Q>___Ö¬YĆK/½t_Ļc͚5Œ?ž5kÖ°k×.µÜŹŹŠN:ńį‡%*\½z5&L`õźÕFõ5 -[¶dΜ98;;ßs;„•Åäɓøń—ŠĶ{ !„āß+==k×®QZZŠ­­ķ÷færå YYY(Š‚½½=SKļ^~~>666dffņōÓOsōčQ’““oŪÖ²²2Ο?O^^ƒWW× ÷±/§( —/_&++ 77·{xåååqłņeJJJīųŁüü|RSS)))ĮÉÉé_•šķ~śżÆpńāErssqppØpū½r¹¹¹\¾|™ŅŅRœ+Üfš^•÷EAAÖÖÖxxx˜l5y3EQøpįyyyŲŲŲąźźŠµµõi‹āįŪ½{7Ū·o`Ė–-e „ęŗV«-±““,Ņjµ:.WÆ×ēčtŗk:.SÆ×§ėõśtN—¦Õj3ōz}¦V«ĶŅėõŁZ­6Ļ`0Z[[••••čõśR™ „BTB®®®÷4ˆqwwä”cĒŽeéŅ„ź¶jŃŃŃw Vh4ŖWÆ~O×±°°PŚŻ«*UŖÜõZv›ū^÷žØ»Ÿ~’+T«Vķ®ėŚŚŚbkkūĄŪpÆ}aaaqĻ»"!ÄĶ$ „Bˆ…ČČHÜÜÜŠh4„……Żó–…B!De A!„Bü+tģŲ‘Ž;>ģf!„4Ł"P!„B!„Ø$$ „B!„BT²@!qqqäęęVxÜŃё   öģŁC«V­0 ģŚ‡āŚµkf…††>dXĒŽĆŹŹJŻkżnķܹ“zõźŻURŗėׯ³{÷nńōō¼ß¦ŽQvv6$$$‡æģ:B!„š„āńī»ļrņäIŠ‹‹9ž<Õ«WG«½ńGuHHóēĻ'""‚”””šzģŲ±ÄĒĒćäädrlĖ–-jOīrļ¾ū.¾¾¾Ģ˜1€³gĻņĶ7ßÜqŸł§Ÿ~š•+WyĒkäēēĮ’ūß ÷‡æWeee̜9“Aƒįęę@bb"8p€ŠŠŠr!„Bˆæƒ„āńķ·ßŖ’}üųqžxā öīŻ‹Zž™™ł—]̘1L™2å/;’­NŸ>ĶŌ©Sļø¶¶¶$%%=Š­ģŹŹŹ˜8q"O>ł¤ØWÆIIIxyy=°ė!„Bü$ „’@gΜaÖ¬Yœ>}WWW DĖ–-ÕćėׯgóęĶ\¹rGGGĀĀĀ4hz½ž¾Æ¹{÷nV¬XĮ•+Wprr"((ˆ”C‡bkkĖéÓ§™3gsęĢ1śĢäɓ鯻7õė×7*>|8)))äåå1tčPęĶ›§ĪzØČüłóńõõåäɓÄÅÅ©[Į½ōŅKhµZ4 ³gĻfĈŌ©S‡’’–.]Źž={øvķīīī<żōÓ<ūģ³XXXšĆ?šõ×_sńāE“Z-5bŲ°aøøø0kÖ,~’żwąĘLgggF··73fĢ ::ƒĮ@AA‹/ꥁäääP­Z5ĀĀĀčׯl޼™““4¬­­łžūļÉĶĶ%88˜Q£FaooßĻD!„ā^Ib@!„ųžųc~łåʏϲeĖ „Y³f,_¾œØØØ»~B!„‚ĢBˆ >śˆgžy€”C‡RÆ^=~ųį†Īüłó™5kTėŃ£G,X€Fc>ž»yóf.\ø`TęääDtt4gĻžeōčŃLœ8Q=V§Nśöķ{_ķżõף±c6l`Ā„ ÷ōŁ6mڰ|łrõwGGGÖ®]Ė[o½eT///åĖ—sšąA6lØ–ŪŁŁ±bÅ ^~łeV¬XĮóĻ?ÆÖ"##ńņņāōéÓōīŻ›ėׯ3yņd¢¢¢Ō ©©©jżüü|ÖÆ_Ļž={h޼¹ZīźźŹŹ•+7nĪĪĪlŻŗUķ’&MšŠ¹sgE¹«ˆBˆæ—¢(dggSTTDqq1EEE¢( :½^^ÆĒŚŚZżāŸ@‚BńōÄOżīå儾•NIIįņåˬ[·N=~łņeņņņČÉÉ©0›½•••IbĄņŗ½{÷ę·ß~céŅ„deeQ\\Ģž={(((x·uWn½÷ŖU«’••eRļŅ„K”––’ĄéÓ§Õņōōtužüy“@FµjÕHNN¦Zµjw՞ŒŒ ®_æNŻŗuŹėÕ«gT 4 ĄT­Z•üü|Š‹‹čNB!ī]vv6gĻžåņåˤ§§“––¦žł~·ŖT©‚››nnnøøøąķķĻ—ŗ ńw“o¤BüUō EQ(((`×®]üņĖ/FĒzö쉢(ž3""¢ĀĀ‹/füųńtéŅ///,,,ꊔC÷÷ÉŅŅņ®źåēē°aĆ“cįįįäęꚯžŠ××÷®ŪSXX€N§3*7 j āg&„’½óŽŠźźśš Cé‚J‘"*ØQD;Œ]£bo‰JŒ%&bL4ŃXņ&1jŒ5±DšhĄnŒ-VTPA°Š( HéóżĮā~Nf@4ØēY‹µ˜sī=gß;sĻ>{’¶ āÉĪĪ&""‚ØØ("##IJJśĻcfff’™™Itt“Ō¦­­­­-Ō­[Wś*ńD"o˜››3ž|Z“h!µ?}ś”³gĻŖ]š–…-[¶šż÷ßóŃGIm§NbķŚµhjjRXXØr^jjźKĶWXXX P(Ų²e‹ŅN{BBwīÜŠvćÕŁŲ»wo¾żö[•Øu˜™™E»HÕŖU“ŚSSSKŒŗƖœœd2Y™†‚·ƒĀĀBĀĆĆ åęĶ›/“Ė’²äååIdd$GÅŌŌWWWš6mŠ©©é+Ÿ_ P‡pĮFćĘŁ°annnŅš®]»˜>}:±±±/5f~~¾Ņb¹°°ķŪ·K‘uźŌ‘":vģĄöķŪIOO/qL]]]²²²xņä Õ«W)»JĆĀĀKKKÖÆ_ϤI“¤öŋsłņe>L£FŲ¶m|šdĆéÓ§łūļæY·nPy ­­Ķ£GŌĪcbb‚„„%›6mbęĢ™@Ńżń÷÷/“A ”ĀĀB’““ILL$))IśÉČČ 77WŹŪ.FKKKŹŁ–Ė嘚šbnn޹¹¹¶-ņøß|ŅÓÓ9{ö,aaaRź\e‘’’±cĒ8~ü8¶¶¶xxxŠØQ£õz‚WpĮĘāÅ‹éŻ»7;vģĄĘʆœœīßæĻśõė_:qņäÉ|šĮģŚµ ¢¢¢pvv&==ĀĀB¬­­™:u*]»vÅŃŃ LMMKĶ«oŚ“)VVVŌ©S‡:uź°}ūvź×Æ’²—-Qģ˜ŠŌŌä—_~aŌØQ|ūķ·ŌŖU‹””2228xš Ÿ}öGŽĮŚŚ;;;ņó󉈈`öģŁŌ¬Y(Š®čßæ?}ūöÅĮĮY³fŃ©S'i> –-[ĘūļæĻŠ+°““$&&¹\΁žóõo;)))DFFAddä i‘šōéSéœgE=‹155ÅŃёŗuėāčč(œoiiiœ9s†ąą`ņņņ*Ū% ÷īŻć޽{9r„Ö­[Ó¢E ‘:&Ø4f͚„€¢Č?žø²ķEįū7nÜ qćĘČår©=??ŸĖ—/«“‡‡‡chhˆ„„%P~Nll,ŗŗŗ4nÜøŌŠōŪ·ochhH­ZµJ<&99™°°0ņóó±¶¶ĘŁŁ™ŠŠPŽyē)>**ŠØØ(LMMiŚ“)·nŻĀŹŹ ###¢¢¢ŠŃŃĮŹŹJ3''‡ŠŠPŅÓÓiŻŗµŚt…ŠŠPģķķ166&22}}}%;SRRˆ‹‹£aƆœ9s†vķŚqéŅ%©"@ff&DKK gggé>>Ė•+WˆĒŁŁ™š5kråŹ„÷!==ššp’““122ĀÕÕUź‹åéÓ§8::Jćeggsżśuš5k&ņC‚ńšįCBCC¹rå ™™™6Ʀ¦&öööøŗŗŅ°aC„’³‚ׇōōtŽ=JXX˜ŚTµ²`llŒ™™ęęę"—ĖŃÖ֖œDRµ€ÜÜ\’““INN&))I)åEēģŲ±#nnnā{į-ęäɓ=z€æžś«šöķŪšššł2™,OKK+G&“=ÕÖÖΐĖåO“µµÓ“µµSäry’\.OŅÖÖN”ÉdÉr¹}JuĢ Ž\*Ā āM@šĘš¬"³@ x=ČČČąģŁ³V©ķÜÜ\BCC „V­ZxzzҰaC±C[E¹’>ūöķ#..®LĒėč芰aC\]]©S§N¹ŠHaddDƆ xņä 7nÜ 44”˜˜˜ēž’ž}VÆ^‡‡]ŗtedåŽp@ *œ““4Nœ8Ahh(/=Ž®®.&&&čźź"—Ė‘Ėåčźź’ŸŸOnn®®‘‘AZZZ©„RK"..ŽmŪ¶Q³fM<==iŌØ‘pT 'NœąÄ‰e ż···ĒŻŻ•Ņ®ÆŠźÕ«Ó²eKZ¶lIRRaaa\øp”ŌT—ĀĀBĪ;ĒķŪ·2dH©;Į‹"œ@ ‚ #??Ÿ3gĪpņäÉŽł766ĘĮĮ[[[Iå’EŖ‹äēēK=zDTT111evBÄĒdz}ūvģģģčŪ·//dæ |ÉĢĢÄßߟšššē[§NŗtéRé©ęęętéŅOOOBCC9qā?.ńųäädÖ¬YĆ»ļ¾K«V­„óIP.'€@ o”””üõ×_Ģž=»ÄcBBB8uźÓ¦M«@Ė^-?üš={ö”BtĖ‹åĖ—Ó¦MÜÜÜŹuÜ7‘ČČHöķŪGRRR™Ž×ŌŌÄÉÉ žs]u™LF͚5©Y³&5¢sēĪäååMxx8WÆ^-µ“i1ŃŃѬ\¹’Ö­[Ó©S'! X ܽ{—?’ü“'Ož”zœ££#Żŗu«r;é2™ www\]] įčŃ£%V¾ČĻĻēĄDGG3pą@ńyüg„j’@ *ŒĢĢL ę3g*Ū”Jį³Ļ>ćōéӕm×®]cłņåJm$$$DzżšįCvģŲńJ툈ˆĄĖĖK„=00”C‡–ū|kÖ¬)ÓŽį‹²iÓ&®^½Zīć¾Iäåå±k×.6lŲP&@­ZµčŃ£3fĢ`ŌØQ4oŽü?;JB[['''zōčĮgŸ}ʘ1chҤÉsCÅ `ٲeÜæ’•Ų&PĻ7Ų“iS©€źÕ«3pą@Ž’ż*ēx™LFĖ–-ńõõ}īN’õė×Yæ~}…V̼™'€@ ¼…Ō«W'N”ė˜‡ĘÅÅ„Ōc ©©©äęę–ėÜÆ G厽{•m†ZN:Err²ōŚŅŅRm©Äņäɓ'üóĻ?*퉉‰o­£čM$11‘_~łEÉÉTuźŌaäȑLž<™6mڼPØyPy0hŠ f̘A§N¤’p%‘––Ęŗuė8vģŲKé ^Œ .°mŪ6ņóóÕökhhвeK>żōS\]]_›šy===zõź…ęęę%÷šįCÖ®]KZZZZ'xÓN@ ؂$%%Evv¶Śž””īŻ»§ŅŸMFFP¤ø«ōPš™™IjjŖŅϳ ņĀĀBbcc‰‰‰QjĻĖĖ#55UIt©ø­  @eĢŌŌTµvąļļOūöķU®'::ŗL΁““4©>óżū÷Kœ+33“čččwŠ ˆŽŽ.uWņŃ£GÄÄĔų°™Mtt4=R۟——§ö}ŖJL›6 GGGRSS3f ŽŽŽģڵ ڶm }.ęĢ™CŻŗuŃŅŅĀŹŹ //ÆRu999Lœ8‘Zµj”««‹µµ5ƒ āįƇø»»Ó»wo (\×Ńёąččȇ~H||<ŽŽŽŌ«W(r }żõ×ŲŚŚ¢««KķŚµéÖ­ׯ_—ęōóó£Y³f˜ššJŹß+V¬P²ėņåĖ“iÓCCCĢĶĶ7nœ‚«P(ųß’ž‡““:::ćééIPPtžß’‡‡ĘĘĘŲŁŁįććóÖ:µŹĀ„K—X½z5ńńń„Wæ~}&L˜€ 4Ø ėJG__ŸĪ;3}śt¼¼¼ŠÕÕ-ńŲĀĀBŽ?Ī–-[ČŹŹŖ@+ß.Nœ8Į޽{KŌÕÕe芔ōéÓēµUŌ·µµeҤI4mŚ“Äc’’’X³fM•(„)x=N@ ØB¬^½ccc,,,hŌØ&&&¼’žū’xVHH7ĘĢĢ '''ōōōpss“BœžłgzōčĮ»ļ¾‹©©)666XXX°oß>>üšCLMMIJJbĄ€˜šš²mŪ6ÖÆ_„„%¶¶¶899allĢŌ©S),,$;;›ĘóÓO?I¶~ņÉ'xyy‘——‡©©)C‡%>>SSÓRw1¬­­„]Žū÷ļćį၄„%͚5COOWW×RC¶­¬¬šńńĮŌŌgggLMMéŅ„‹ä ČÉÉašąĮ˜™™Ń¬Y3jÕŖ…ƒƒ§N’ĘXøp!¦¦¦4nÜŒŒŒX°`ŌńāE4h€­­-7–ĻĪ1zōhŒŒŒpqq”V­ZXYY±{÷niŒ•+WbjjJƒ 055„S§N’ƒ¦*1eŹüüüØ^½:_~ł%~~~tčŠŚµkćėė Ą®]»ųķ·ßŲ¼y3qqqœ:uŠ:uź0aĀ„Ē]¶lgĻžåĉŅ9Ģ™3(ś¼żšĆ@ŃāŻĻĻ üüü˜1c¦¦¦ųłł±}ūv¶nŻŹŗuėŲµkqqqįāā¤I“€¢\óįƇćķķĶłóē¹uė_~ł%3fĢPŠzŁ“i_ż5×®]cÓ¦MģßæŸµk×°qćFV¬XĮ’%KēܹsøøøŠ§OrrrHHH`ąĄōźÕ‹°°0Ž?Ž®®®’#BP„B”ąŲ±cģܹ³T'‰‘‘C‡eŌØQŲŲŲT …eGWWOOO|}}qww/ugłöķŪ¬^½Z)ŖFP>Ŗ*ĘŹŹŠI“&•»ęGe —Ėńöö.5’?==7–čJC8 Šp÷ī]¦L™Ā’%K((( ++‹ąą`<ČÖ­[šńń”E‹¤¤¤››KBB–––|ņÉ'Ņ8gΜaäȑddd‘‘ĮųńćńńńŠr¢SRR077gēĪ¤¤¤0tčPĀĆƙ8q"k×®åéÓ§dggsüųq6mŚÄž={Ø^½:?żōóēĻ'11‘k×®ń믿²fĶtuuIII‘Źg„¤¤”Yōė›o¾ĮŃёōōtRRRHOOĒĘʆ… –zŽåĖ—¹}ū¶“Ū/ķųžńĒ„††KJJ Ožł„ 6••EFF½zõ"22ņ>ƒ½½=nnnČd2œœœpssĆĢĢLé˜ččhŚ“iCėÖ­±°° nŻŗ,X°@Z€«£aƆüōÓO4hŠ鎽;wīÜ I“&8;;ąęꆛ›r¹777„ߛ5k…‰ÆZµŠęĶ›cbb‚­­-żśõ“Ę;}ś4õźÕcęĢ™899aooϰaĆ8p 7nܐģņõõ„k×®ŲŚŚŅ«W/†Jpp0ū÷ļgĀ„ ōéÓ[[[\\\Xŗt)?ꬕ+œ>} ¾üņKģģģppp`Ń¢E–ßņPXXČīŻ»9~üx‰ĒhiiįééɧŸ~J£F*Šŗ—G__Ÿ~żś1vģŲR«¤¦¦²nŻŗ2׫<ŸĖ—/sąĄū]\\$ēš›„««+ćʍ£ZµjjūÓÓÓŁ°aC•t0 Ŗ6¢:€@ T.]ŗ„cĒŽ•Ś6lČĒLNN¹¹¹„††²aĆLLLØQ£Ÿ~ś)£F’Īyēw1b„ōzĀ„ |÷Żw¤„„allLµjÕŠŠŠĄĄĄ@ēŌ©S4oޜ÷Ž{O:ĻĆƃnŻŗqžüyś÷ļĻĄŁøq#_}õQQQL˜0ARC711ĮĄĄMMMi̲ššŠ»»»”s[­Z5–/_žÜiÓ¦amm -ĒĻŽ;˜3gīīīl޼YzŌŠŠĄÅҘ˜ ( zõźJ»E;väȑ#Ržq±]2YŃפ¹¹9Ū¶m“^?~œńćĒKaĖr¹___ęĢ™Ćõė× §^½zx{{K6L:•o¾ł¦Ģ÷¦*įååżyóhß¾=ĪĪĪX[[S·n]śõėWā9mŚ“ałņåüņĖ/¤§§“››ĖåĖ—qrrz)Z¶lÉŹ•+6l?&77—7nH©qqqŲŁŁ©œ·eĖ„×VVVJÆ ¤Põ„„)rįY455IMMåŃ£GŲŚŚ*ķėččTŁģŹ ??®]»Vā1FFF 2[[Ū “¬ü°··gҤI:tˆĄĄ@µĒ---jÕŖõņ7«iҤ ·nŻāܹsÄÄÄpļŽ=vķŚÅ×_Ķõė×ÕŖØ=šōōt|||ØQ£ŚŚŚ\æ~]eQ^VfΜÉ?’ü#9€455ÉČČ`Üøq@ѽ/vŅ”Fi”Ü …BŠŒx777ź×ÆOxxųk#2V°uėÖRÓy\\\čßæ’sÅöŖ:2™Œ^½zakkĖž={ČÉÉQ9&77—­[·2f̵ŖŖĀčŪ·o•\D?zōˆmŪ¶•ØбcGŗtéRĮVU<¦¦¦Œ?ž7ŖÕxųš!žžž >\ü” į‚*‚\.W»Ó‘’’B~~¾“Š*((PźĻĻĻGKKKśā™™L†³³3ß’½Jß³N‡mŪ¶Ń“iS=zĞ={”"^†ž={ņčŃ#nŻŗELL wļŽÅĻĻ£Gr芔ĻūwޱB”@KK ( ÷Ž‹‹cõźÕ˜™™”ÆÆODD”®õäɓDDDMLL aaaōģŁ““'OҲeK¦L™ĀŠ”C¹}ū6111DDDšć?rćĘ –-[†¶¶6ŽŽŽōźÕKŶŗuėrēĪ•÷IŻÆ ›6mĀŲŲXŠl€"]==="""¤°žg9{ö,{öģ‘āw‡ …Źēöß gĻžeśōéJŸ¹g?#µjՒ¢=žeȐ!ŲŲŲ°hŃ¢ē\e‘©8¬ųYęĢ™ƒB”ĄŅŅReŽÜÜ\k×®U-wóęMĪ;G›6m*Į:ĮėFÕsł Į[JķŚµ‰ŠŠRY¹sēbllŒ®®.ŃŃŃJżwļŽ-UˆÆ$ž]dÕ®]›ōōt)7»ųēšįĆ=z€;wī°hŃ"–/_Ī·ß~ĖgŸ}¦ō ¢””ńĀå±ś÷ļOXX-Z“`Ą€LŸ>Å‹sžüłRĻū·Ū;w¤0ļ«WÆ2fĢÜŻŻqpp f͚Jźż’ż7£GĘÉÉ ///>ųą–/_NĖ–-¹pį“hтĢĢLŚ“iƐ!Cųꫯ˜>}ŗ¤_»vm“““”īU³f͘3gqqqX[[©t?ŅÓÓ%́Ŗˆ‘‘Ē'66V%æ4!!Æ¾śŠóēĻKšæ’ž;ŚŚŚ%ęF›ššrąĄž>žŲŲXf͚ÅćĒ_ų~æi>>9r„ĄĄ@Ö®]˟žI·nŻŠŠŠ {÷īL:•]»vqöģYüüü˜7oŽ ? YZZ²yófŽ;FDD;w&**ŠO?ż”#GŽpįĀ~ūķ7.\(…±Nš4‰¾}ūҶm[Fމ 3gΔƓ°° !! 6püųń2•É200ą‹/¾`ß¾}\¼x‘“'Oņć?>WŻł»ļ¾ć?žąĀ… lÜø‘åĖ—3hŠ  H#ą·ß~ćģŁ³ÜøqƒŻ»w3{öliŽŽŽ???/^L@@€4Fpp0 6”¢*¦NŹ”C‡ įšįĆlŲ°A0{ļ½÷Xŗt)«WÆęģŁ³œ9s___BBB°³³£k×®<}ś”É“'sśōiN:Åū￯6dø2(.÷,ß|ó üńVVV|ūķ·J}“'OĘÓӓžżūcaa……K–,aćʍ*é'ŬZµŠ}ūöahhˆžžC† aŲ°aJå˜:u*#FŒĄŅŅ’³gĻжm[ @×®]©Q£ŃŃŃ|’ż÷„‡‡S£F är9]ŗt”gĻžhjj’““›7ofķŚµŌÆ_Ÿ5jšį‡āėė+•"422RÉ}ÖÕՕD·&L˜ĄŠ”Cńńń”N:X[[³zõjvģ؁‘‘FFFlŻŗ•Ÿž™ZµjįččH||<]»v}«sqϜ9#½w’F[[›aƆįīī^ĮVU,Õ«WgģŲ±ŲŪŪ«ķOOOgÓ¦MU¶\hAA;vģ(5m¬"¹té—.]RŪWÆ^= šF:”Ź‚©©)#GŽT«ćPPP€ŸŸŸTöT ( Y³f) čšć?®l{ą­ęŅ„KŅbēɓ'XYY1zōh)G>%%…ÆæžšK—.±±1]»veöģŁčėėóĒĄĻ?’,™””D·nŻ8zōØ$ŚwśōięĶ›GLL ćĒē³Ļ>#88˜Å‹Nzz:VVVŒ?žįƇsīÜ9¦NŠæææä“6' IDAT8sę Ó¦MĆĻĻOj›?>{÷ī%--£Gāąą rķڵ㧟~ĀĶĶ””¾ūī;‰G[[ęĪK:uŌŽ£jÕŖńŻwßqąĄī޽KµjÕeåŹ•¤„„©ōihhŠæ’·ņļ4;;›õėחX"°wļŽxxxT°U%ó¬@CCƒ‘#GRæ~żJ³ĒĻĻOmj‰––ćʍ{m«J¼ vķŚEHHˆJ»††>>>ā^½¦T„@¤ąµbŚ“iUV`K x[(TēčŽ½ū[逢“Q£F•X.õąĮƒURDSS…BĮīŻ»ÉĢ̬¢££¹råŠŚ¾nŻŗ‰EķæčÓ§ŚŖ3 …‚żū÷—XUA N@ ¼V,X°@„Ö»@ ØX.^¼ČĶ›7Õö¹»»æõ 円†Œ9RmłĢüü|üżżÕV©LZ·nŽŽOžAA{÷īU+0kooO«V­*ܦŖŽL&ć½÷ŽS[Ž166– .T‚U‚×į@ ”™¬¬,)TõßXZZҳgĻ ¶ØjRڽHLLäĢ™3lQ阘˜H"³7oŽ$88øBē S[ @SS“^½z ް²²*QxóĉUFģQPµN@ A™9xš Śźr¹œ”C‡ŖŻż~[qwwĒÕÕUm߉'Ŗ\ŁĄf͚Ѹqc ØtgRRR…Ģ[XXČéÓ§ÕöµmŪ–š5kVˆÆ+ļ¾ū.Õ«WWiĻČČØpgŽąõ@8 Š P(HMM•JŁU[D>į›KJJ ׯ_/—±"##‰Uj«U«V‰%¾^– &(•„T<ŃŃф††ŖķėÕ«5jŌØ`‹Ŗ>}śōQ)É E•8P •Næ~ż066&77??æ I[ø~żŗZ‡ƒ””!;v|åóæīčččąåå„¶/  Ź„ž*į‚*BZZ¦¦¦ųūūæŅy"""8qāD©Ē$&&bjjJLLĢ+µ„²8zō(wļŽ-×1ÓŅŅš÷÷W›ĻZ9xš ŽŽŽå2–ÆÆ/k×®UjKKK#??æ\Ę/&33SŌæ®d<Øö3^§N·VšyČåņÓn޼Yī’‹ž+ŗŗŗōļß >|Čɓ'_é| …¢Ō(¹\žJēSpuuÅĢĢL„żńćĒ%:īo/Ā U„jÕŖįēēG»vķ^é<‡böģŁÆtŽŖĪēŸĪńćĒĖuĢččh Tå999ųūūsįĀŅÓÓń÷÷gļŽ½Rrr2{öģaķŚµģŻ»—ˆˆˆNJˆˆĄßߟ‡rżśuüżżUŹUńŪoæ±cĒ%łŒŒ žžūoÖ®]ĖüQź\ź®!##Cj;v옊˜Ł®]»¤ć““4öīŻĖڵkŁæ•[x½„‡‡óąĮ•vMMMz÷ī-r¶KĮÅŅ Øķ{Ջģ—ĮŃё֭[EöŻæ’•Ķ­I ÆÆ_b®»@MMĶŸĪ;WĮÖŖ:²Ź6@ EČårbbbhٲ%PT+¹nŻŗ$$$„––:uz®źö?’üĆŁ³gÉÉɑ„©źÖ­KJJ ėÖ­#00°pįBŒłšĆKļĢ™3ÄĘĘ2hŠ bbbųć?hÕŖķŪ· 88˜7n0jŌ(ņóóŁæ?!!!hhhP§NŗvķZ¦ŅNyyyģŪ·7n™™‰……}ūöÅŃŃQ:&88˜Ć‡óäÉĢĶĶiҤ‰yėÖ-Ο?OūöķŁ½{7ÉÉÉ8991tčPttt8uźAAAśč#6oŽLxx8?üšLš4 ƒē^sE“••ÅĀ… III!99™… bhhHß¾}  GŲŚŚbggGjj*.\`ńāÅ|ņÉ'*c…††²pįB"##yųš!wļŽ„’žø¹¹0uźT²²²°µµ%,,Œüü|BBBØ]»67oޤcĒŽÓ A’““3f ,ąóĻ?/õär9S¦LaŻŗuōīŻ…BĮ AƒČŹŹ"**ŠZµjq÷ī]H\\·nŻ¢mŪ¶Ō­[[[[’““9sę «V­bÜøqÆä>扔“XmÕŖ•Ś2eezöģIDD„J„LDD111ŲŲŲT’eźéڵ+‘‘‘ÄĒĒćļļĻäɓŃŃŃ)÷yJJjÓ¦ˆxAš5kĘɓ'U®="..Nü $D$€@ T!ęĢ™CTT6l`šąĮ̟?ŸĒsåŹ:t衖-[J<įĀ…Œ5Š““4d2×®]£iÓ¦\¼x‘œœBBBø’>™™™„„„pķŚµēŚ”Ą“iӤ׿õß}÷?żō“ŌöĖ/æHJ×£FbęĢ™dgg“““ĆŽ;hŌØ‘ŚžćķķĶĉ„ŻĘćĒÓ°aC.^¼ĄĘi×®aaaäęęrłņeśõėĒܹsøzõ*Ó§O§{÷īÜŗu‹äädęĢ™C÷īŻQ(<|ų²²²øwļ!!!ÄÅÅ)Ķ@nn.»vķĀÅŅ7n —Ė‰ŽŽfģŲ±’NĀ”)Søt醆†\¾|Y*—BHHH•Ud611!88˜ `ooOpp°ńĶ7ß0bÄ®_æĪ8wī6l`īܹjsJ½½½ ¦C‡ųųų̬Y³¤žęĶ›słņeöļßĻ;w055å÷ß`޼ytéŅ…›7o²gĻŲ¶móēĻ'''§ŌkŠŠŠĄÓӓ€€īܹƒ¾¾>ķŪ·'(((ʃuvvĘŅŅ’7Ņ«W/‚‚‚šóóćŲ±c,[¶Œ?žų£\īéŪĄżū÷‰ŽŽVi—Ėåt芔ā z 155„yóęjūN:UĮÖ<™LĘąĮƒ‘Éd¤¤¤š÷ß—ūyyyjµId2™ä”--­ļ›H <‹ˆ‚*Œ½½=‡–Ālæśź+~’żwFŽ©öų€€V­ZÅ{ļ½'µrąĄęĪ‹ŸŸ+W®dūöķųłł•Ɇ:GTT1nÜ8i1W<ļܹsÉĻĻĒĻĻššpģķķ„žJķŚµKœ'**Š}ūöqåŹ5j$µ{{{³nŻ:ÜŻŻYŗt)óęĶcƌRŸ>}ųšĆ%G@jj*ēϟĒĮĮA×Ńё‡2lŲ0† F³f͘0acĒŽŠœ **JÉĘīŻ»ó믿²dÉž÷æ’įģģĢęĶ›±°°ąÜ¹sŅĀŻŗu„……įźźŹŸž©¶fóė@xx8“&MRjėÓ§£G&11ń…ŗ  ż®§§‡›››ät¹zõ*ß|óRy·nŻČŹŹāžżū899•:vĒŽŁ“ixxxаaCyļ½÷Åōõõ‰ēöķŪ888 ­­Ķ„ ˜0aĀ ]ĻŪLI‹Ō-ZP­ZµW2ē_żEļŽ½ „iÓ¦ÆdŽŠ¦]»v\¼xQÅ©vėÖ-«œ°¢……^^^@P…ńōōTZ$Õ­[—ÄÄď’믿puuåĉ:tˆmŪ¶¬”;ż¢˜™™ńĪ;ļH;ż 6ŒĀĀB¢££yōčįįįxzz"“ɰ°°ą×_%00ŲŲX ٹsēsk‡GGGcff¦ņ€9wī\F „"“jÕJ©æuėÖ¤¦¦’žž ”;ŠŌŌT[ŗ˜ˆˆj×®M\\œ““‚••÷īŻĄČȈü‘Y³f1mŚ4¾żöŪ7.“2##CeAW\v*%%å…ĒÓ××Wz­„„%żž––ĘčŃ£155•~lll011yn$9.]ŗDVVAAAxxxąįį” Pģ˜8q"2™ŒÖ­[£««‹••;väąĮƒ/|Mo#™™™RŗĖ³Čd²ē¦' ”166V[2P”PTŁŚ6mŚH)Y{÷īåɓ'å6ö•+WŌ¶æ)NŸŹĄŠŠPé;°˜ĢĢL"##+Į"AUDDAęEėm7Ž;wҤI Ø^½z¹ģ¦tģŲQŹåwŽĮĆƃĄĄ@“µµ©_澓 ö÷÷gŃ¢EģŁ³‡ū÷ļ“‡‡[·n-U 55Um­† Jægff¢«««Ō_¼h-vØ»gĻ,KOO'!!A­>B±8@ūöķINN&!!N:•:ęėHµjÕČĪĪVj+~żļżÅČȈõė×Ó½{÷—:æ^½zŌØQƒóēĻČȑ#qqqįŅ„K}šŪ·o3~üxŒUX‹Ļł/"|fff8::¬ŌžššŖ“+=mŚ4zõź………ü1GŽyé9+---ŻBBB”¢6.^¼ˆ¶¶6–––%Ž„©©Innī Ķ_§N‚ƒƒ•œ111Ō©S‡øøøRē+¦cĒŽüż÷ßܹs‡f͚”§§‡­­-«V­¢qćʘ››0lŲ0<<<ųņĖ/Ń××§aƆčėėóõ×_óųńcLMM_Čö·’v؋ +‚¤¤$†ŹŌ©SéÕ«—Ō>hŠ RSS™7ožä°ĖĻϧOŸ>x{{óžūļ“››ĖŹ•+9tč‘‘‘Čår¬¬¬čŻ»7“&MB&«ŲĒa333źŌ©£¢±šųńc)}©¬¤§§sųšįr¶P###śöķĖöķŪ¹sēAAA*QY/ʃŌžßpqq)7Ē܏?žHDD„ōŽøq#+V¬ąźÕ«/å8uźT©*üU455URD$€ į‚7„““4444”lņņņ8w E;噙™/4vūöķ‰ˆˆ`ß¾}xxxEŠą3fĢ ??Ÿ™3gE"‚Ķ›7'66VZÄÕ®][[[?~\źuėÖåŃ£G+‰gżüóĻčéé1~üxI#įY!²cĒŽannžBt2™LəąääÄĶ›7‰ŽŽĘĪĪNjŸųą"##qpp 99™;wņžūļ—QāāāĀŗuėČÉÉ”AƒŒ?ž¹óO™2…÷Ž{›7oŅ AņņņŲ³g}ūö-“ŠŅe|}}iÜø±dŸ‡‡æüņ cƌ‘Ž4h'NäžżūŲŚŚ’——Ē޽{i×®p<‡„„µ¢žęęęŖfonnĪ;wŲ½{·äˆÅßßsssŽ9"9ĀĀĀ8xš 'Nąć?fóęĶ 6ŒĪ;“››Ėõė×ńõõ%>>žļ¾ū®Ā®£WWWµB‹aaa/äx–Zµjż§|ļēi;4nܘ۷oŹįƇqttÄĀĀā„ē+iAŖ.”½¼}*ōĀ o õźÕ£Q£F“nݚ6mڐŸŸĻٳgŃŠŠPŚaoŃ¢“&M¢C‡XZZņūļæ?7ķĄČȈ¦M›²e˶mŪ€»»;×®]#//OOOģģģčŪ·/7¦mŪ¶˜™™ĶٳgŸ»knmmžžžtģŲCCCīŽ½ĖÕ«W%Q²™3gāķķĶéÓ§±±±!))‰3gΰpįĀ MmÕŖsęĢįųńćtźŌ‰)S¦0|ųpš6mJŪ¶m177ēīŻ»\¹rE*·8yņd¦N*= ~łå—L›6īŻ»cdd„½½=–––“jÕ ęĢ™S®ZåM“&M8|ų0GŽ!)) …BĮˆ#°³³ćĉÄÅÅ”§§Ē²eĖ”„&ÕńÕW_accĆõė×%gÆÆÆŠfB=¤‡Ļ=zpįĀ:ÄƇŃŅŅbśōé <øÄyzõź„”–н{wĀĆƕv¤ß’},,,¤’–#Gޤ^½z>|XZŠNš4‰”C‡–ńn½½ÜŗuKm»ŗ¼öWMĒŽ%m( õ®^½:Ɔ “¢’ HB&“Ѿ}{ [·nežüłLŸ>]i¼įƇ³cĒŽJq4nÜ˜æžśK%ēöķŪ(Š— µ;vģ+_ÜõźÕ‹ččhRSSń÷÷gĀ„ /½k_\ ēY444”DeĖ777\\\TRĻ ÷īŻ#99333lll”®ėńćĒ’——‡††©©©@Qڳߟ<|ų‚‚jŌØ”"ō˜™™‰B”ĄĄĄ€ĢĢL"""033ĆŹŹź?§Wü'€B”ąīŻ»øøø”ė\‚×į‚*Ė-[¤ų/æüRe—ÅÓÓkkkµējiiqīÜ9:ÄŻ»wŃÓÓĆĒĒsssāćć„ć\]]¹rå gΜ!--MķĪ‘‘‘~~~J0«WÆ&::ZŹ…ÆV­žžž*·k×.'11‘:°qćĘķ~–āÜŪ·o“””D·nŻčٳ§“[ŪÆ_?īÜ¹Ćłóē‰ÅŠŠeĖ–I4­ZµR*]XĢöķŪ•,—.]J×®] —õ7n䣏>āÖ­[$%%įååE=011!>>žo¾ł†nŻŗIc|üńĒŲŁŁ‘ššŠ‘‘śśś\¹r…C‡’ZäJwéŅ….]ŗ(µµmŪ–¶mŪ¾Š8ŗŗŗ*z ß|óŹqŽŽŽJƛ4iB“&MŹ<Ļæµk×ęūļæWjk×®ŚPŻ–-[Ŗ-•’’ĀŗuėŌĪ×®];%Mˆ·u9Ūļ¼óN[Räųķ·ßxōč–––Ń¢E Ś“iĆęĶ›),,DSS“€€š5k†”””ŅĀķ߬_æ¾L"”ÆźÕ«§R/33“„„„2GĆT4ŗŗŗx{{³~żzbccłēŸx÷Żw_xœā’­’¦FÆ4’jõźÕųśś’™™)9W¬XĮ‚ ”Dw ńõõeΜ94kÖLÉiQü“oß>z÷īMRR~ų!ūöķ#??_:ĪĶĶŸžwww H·'66–Ö­[³téRéóW«V-V®\I’žżĖķZ8yņ¤J{LLŒp„@ ŖĻīøŖ[ČŲŁŁ)…«’›jÕŖ)•e+¦nŻŗJÆ]\\J}ŠŃŃQY°¹»»K2Ŕ¤ų_ŅBlŻŗu=zTķ9[¶lAGGGRy/ {{ūwЬ­­Õ:ØōZSSS­ķ-Z“ E‹*ķ5kÖT¹źī‘……£F*ŃvAÕC___ÅRĢˆ æ)JÕ1ž„øšCES¬=ręĢ @`` žžž“jՊ““4nŻŗ…³³3gΜįƒ>ŠžÖ}||ųģ³ĻX»v-ŽŽŽŅ’‰&Mš<·jÉ«¤nŻŗ*N(Ś!ÆŖN(Ņóh×®§N" ''§įOOOW«Pšxģ« ((ˆ?ž___† †±±1ÉÉɬ_æžÆæžšĪ;KN¦§OŸ2}śt“µµ„č‘ā*#GŽ$$$„5kÖHéIįįįĢž=[Šž(ŽŅ8{ö,2™Œæ’ž›ŚµkĪܹs5jmŚ“)·÷ŽĘĘ ʤ¤¤r_šz#œ@ Ø0ʏ_¦|q ¢ŠÕÕ­P»×‰ØŻ)ٜõ’Š­­-ŽŽŽŠ»woBBBųā‹/°±±ĮŹŹŠĄĄ@444HLL”Ė—/§_æ~\ŗt‰˜˜īŻ»Ēłóē™7o^^^4jŌ###:wīL@@]»vŠ4ivģ؁‰‰ 4ĄŚŚšf͚B=ŹåŚär9†††*z<„•¼='€@ @uĀuĄ+ĶŁ~ÅåJĆĀĀČÉɑRuźŌ©šk)4ż÷"­¤ū^•ŠŌŌdŠ A¬\¹’Ē³’~%ŽēQŅntqEŠĀĢ̌'OžąļļO›6mØY³&šššČåņ£ÖžMtt4 …BmŗQqŚĢƒ¤¶zõźI€bŠ#ŲŹ{nnn®ņłJII‘Rgo/āŻ@ ØPŅ‚¤²—/_ęȑ#888H;Ē@‹-$„ūb}ćĒ«ŒU|ī“'O*īž…ŗō®¬¬¬®ąR˜™™I:)—/_ꬕ+e>·$'@EG 2„¾}ū2xš`¬¬¬ŠÕÕÅŽŽžŽ;ņĆ?Ø7Ŗ£X$ŠĶĶ „Ÿāėy¶ŽŽŽŹÆ*EŻż,((l¼½ˆH@  Ꜻŗŗ•*zéééIAA«WÆVŚŁ/.Y𔔤”rdgg‡““'NäņåĖ888 ««KLL «V­ĀŽŽž TĘ„”Xb/))é¹%ūŖ-Z“ąĪ;Üŗu‹½{÷bkk«¢¼ÆŽg+Ö£”””²CžŖ‘Ėåųūū“ššŹ½{÷¤t‘+W®0sęL ¤ø%Qœ±cĒŽ5{Ź"Œū*033SŪž‘‘QbŸąķ@D@->ä‹/¾P)1T¬_枭[·Vų¼‚ņåŚµk|öŁgå>īŚµkٽ{w¹+PFŻnmE†kėėėćąą “sZ»vm:vģˆžžž’ Y³f8::R­Z5)÷ŠŖ¦>|˜Ī;ćēēĒäɓ6l?żō-[¶äšįĆČd•·'VŅż|]ņ¶544čßæ?dggKcž‡:­ ¹\^į!ź6ląūļæĒÄĄ¦M›Ņ»wo&OžĢڵkéŌ©“TžöYž-“W\ ÕŅŅ777„Ÿ ąļļ_b•W®®®ŚöŹŖŠ!Ø:'€@ (,,ÄĖĖK©RZZžžž$''æŅ¹łå•2o§NāܹsÆt^Į«'&&†-[¶”ūøĒŽćĀ… å>®ą’ÉĢĢäéÓ§*ķ®Ż©S'"##qvvVj?~ü8‘‘‘Œ3FjÓÕÕåĪ;DFFŖT&±··gėÖ­Üøqƒōōtņó󉉉aŪ¶m899UÄ„”HI÷óuq@QUš~żśEłńAAAĻ=GŻ"T]˜ü«ęöķŪüšĆ>(Źg>}ŗ¤XŹŅ„K¹yó&ŚŚŚX[[3fĢI¹ś£>¢K—.;vŒĖ—/£££C÷īŻłōÓOŃŅŅ¢k×®$''“ššŠ——GŽACCƒķŪ·óūļæ‡ŽŽīīī|žłēŌŖU‹={öšŪoæ±mŪ6tuuQ(Œ7wwwģģģX²d WÆ^åĀ… ćååŌ3*¢Pwę IDATē&¾Į¤„„©mSCˆ;vģXjŌÓŗuėčŌ©S¹Ļkff¦¶ŒŪæÅÜŖ:ŚŚŚŅļe)©n*—ĖĖÕ¦²0fĢÖ¬Yƒ££#-[¶¤f͚dffĀ£GųłēŸ•ŽļŠ”Ÿž9...899įķķĶȑ#łį‡ųšĆ9qāĪĪĪG`` ^^^’PeESŅ=‘ UˆC‡ŃŗukjÖ¬‰...,Z“Hź÷ōōdĮ‚4oŽsssāāāxųš!C‡„f͚TÆ^[[[&Mš¤$,õĆ?ąää„””!VVVtļŽ]q5jõźÕ WÆ^R ®¤¤$‰ŠŹVõļß ©WÆcĒŽ•V—/_Īĉłč£°±±ĮĢ̌N:qķŚ5µ×€££#æžś+{öģĮŃёQ£F0}śtęĶ›ĄŸžÉ€ųüóĻqppĄĢ̌ &pżśu<==Ń××ĒĘʆ%K–HcĒÅÅ1|ųpéžŲŲŲšŃGUŖXUĀĻĻ &ŠŗukęĪĖW_}ELL ]»v„  €ÄÄD<==ŃÕÕeƌ̜9“ŗuėŅÆ_?‚ƒƒ8ž<ćĒĒĘʆY³fŃÆ_?¾ūī;~łå¼½½iŪ¶-ŗŗŗx{{ćķķ-9>üšC:t衂 ˜:u*aaaōģŁ…BA·nŻøvķ?žų£dėž={čßæ?öööx{{cmmMƒ šöö¦E‹•vßdJZ$¼yź/Ɖ'ˆŒŒ,ńēU8 Ø\œŗ…Śė“HS(9r(Ņ`(‹Ę‚:'Ą«ˆčׯŸRÄH±Ć±ŲiįģģĢõė×Y°`5¢  &L˜@XX˜R©I___¶lŁBēĪŃÕՕōʍGHHcƌ”FhjjŅ“iSžüóO8 „9ōéӇѣG«Ų©§§ĒēŸNćʍĖõśE:€ $D$€@ T0`'NdżśõčźźĀ|€““żśõ“Ĭ-ZD£F077§sēĪTÆ^}ūöQ£F ¢¢¢˜>>|Ą»ļ¾[¦sŌåž—EKąE>|øŅėvķŚ©¤‹XYYń駟–i<---FŒĮˆ#Tśš6mJÓ¦MK=芔jŪ«U«¦’WØm×ŅŅ*÷¹ÆĀ U„ĄĄ@ŒYøp”ō€äąąĄÉ“'¹yó¦”s9gĪFŽ Õū=sę wļŽ•ź\ŪŪŪćėėĖņåĖ011aõźÕ“oß( Õ4h«V­ĄÉÉIzPpvv¦I“&JłĄééé³iÓ&\\\pttdęĢ™|÷ŻwŅq͚5㫯¾’^Ļ›7wwwņóóUÄ· qssĆŅŅ ÜÜÜJ¼7õė×gŚ“i@Qå®]»¢§§GļŽ½„k˜={6įįįXZZrāÄ ĀĆĆqtt”īɌ3XøpaYފ7žŲŲXŚ“i£ŌfllLJJ œ8qGGG•²UõźÕ#..Nzżļ|jµŖß’žūÖ­[*ļ…––‰‰‰888еkWzöģI›6mØ[·.ćʍ{™ĖüJZ„VFČö›Ž:ĒŹė’³]PPĄ?’ü„ŁŚŚ–é¼×=śįuAü JB8 Š‡­­­ŹIńb½˜ŚµkKæ'&&¢P(ųß’ž§“`»wļžTŲÕՕąą`FŒĮÓ§OIOO'<<\Śį/ iii( ¬¬¬”Śmmm„œrP-ƒ¤ÆÆO~~¾Z'Ą‹`dd¤ōZWWW„M[[›ĀĀB’’’P(|’ż÷J÷2&&†”””—¶įM";;}}}•öāŅ^¹¹¹jwŠd2™RŻģ—QņĪÉÉ!;;[„NõōéӕDҲ³³ŃŠŠ ''‡ĀĀB±sUĮ”“x‘åŗ{śŗ,ˆĻŸ?OJJ ššš’öGYxÆłuBü JB8 ŠPXXųĀŽł‚‚444¤šģbÜÜÜ6l ,`Ū¶m’ĒŽ}‡Eu¦’Na轃€‚ EšŅA±w1ĘnŠ&Ł$»I6›ü²Ł$»É³1j"i– 4± z· ½* ½ĻP†ĪĢy’ą³Œ3ƒ”|>×Åué9gĪyf€ažūÜĻ}ć½÷ރ‰‰ TTTŠÓӃ-[¶ kl$ī ?éiūǃ(«aīܹb“Ō¹sēbėÖ­Šքbll,QŒüżżqčŠ!J ˜466J_Frķõė׋­Ó„( ?žų#455×®]CTT½&÷ūļæĒÄĪód!5b|L„ßń©FŚk:©ńņÖÓÓC·ŠóššVēˆÉœż0™ ! AL¦¦¦Ø¬¬”ŲžĪ;ļ@ ą›o¾‘śŠ¢°iÓ&±~ÓYYYt”¦ÄÄDüįK©NLLÖ،ŒŒµµµōŗ} ?µ[WWwXē’Fž:QĻę7ĀÄÄ„Žž››‹k×®Éķ:“ŁÜ¹sqśōi¼üņĖtvĒ„K—’’KKK())!33‘‘‘Xŗt)€žĀų÷æ’=ä먩©”„„õõõōϐ‡‡‚ƒƒ±jÕ*"""pąĄ¢££o¾ł&žüē?ĆŚŚ_~ł%^{ķ5l޼™ž~ŖŖŖ¢øøB”pÜūŠ?+V{HQµŽŽ¼żöŪxłå—%–²Lv„]ŽpÅĒǃĻēCII ‹-Öc„=掎^twwOŠē>Y ,<y ņ—“ b‚šńńAUUžłĻ¢ŗŗ<III8sę ÜŻŻ„>FWWnnnxēwPXXˆ¶¶6”••į£>BFF€ž“““@(āŃ£GųüóĻÅ ±X,Ø««#::õõõJÕŌŌąźźŠ>śEEEąr¹ČĢĢÄ·ß~K×)---dggćŃ£Gri‹„””OOO¼ūī»ōkR^^Ž?ž<õł§‚wŽyVVV˜6mŒ”­­Ż»w抔C022¢æ×k×®…ŗŗ:tuuakk‹åĖ—#00pČ×ńņņĀģŁ³ajj ===āĆ?„––LLL`ll }}}lŪ¶ Ē‡¦¦&¾ųā   uĀŃё® /½ōnŻŗ a„ C'k’ Ø”ķīīn£  @!×€?üpXA°”šŒA€ööv$'',X0ģ !ŃŅ£'566ŽzlÄ’Čz=å¼'&7 ‚˜ LMMqęĢœ>}666ŠÓÓƆ °}ūvŗ±¶¶¶Ä’³gĻ¢¦¦óę̓––ģķķĮ`0šõ×_žö·æ”¼¼ŗŗŗ`±Xšńńææ?ŌÕÕÅz’żļĒēŸccc|÷Żw`2™ŠÕÕ„ļ“žśėÆØ««ƒ‡‡ōõõįėė SSSüóŸ’ŠwöÉöa, ŗŗŗƒ¦ļܹŹŹŹppp€““€ž ƒØõ’²²2&.2p戶¶6}÷ņĢ™3hllÄüłó”„„…Y³f”ÆÆ.–ų¬ÓŅŅBDDZ[[‹»w¶o¼ń}̧Ÿ~ŠÖÖVäää !!\.§OŸ¦_ćŲŲX‰J×o½õ.\ø@’_UUwīÜAYYnß¾3f@WW7nÜ@{{;bcc‘’’‚ŗŗ:ģŚµ šžūļ#''‡nmÅ`0-VcéŅ„Ø««CZZšDĶ B>&Z`"ˆŠŠBJJŠÜĻ;ƒ‘‘‘čīī†šš,X0ģĒĢ\ˆä«””Ab›ŠŠŹ”mõI Y@1lŚ“ ›6m©i‘ŅīdϚ5 ·oßПŖūdĄÉÉ wī܁P(DOO=¹śšĆŎ{óĶ7ńę›o¢³³“ž`\>{ölzż§“±½÷Ž{c³±±yj1>+++ܽ{B”.:÷ŻwßŃū_~łe¼üņĖb9räˆÄy²³³éϜ97oŽ ż5!śijjĀĮĮAę~‡ƒ3fHŻ7pYˆˆ“žŌL&Ó¦M“Z4Rڵe÷És«ØØ :vbtdMBv ‘—K—.ĮÜÜŽŽŽ×ŗvķfĻž-¶“§ŗŗׯ_—Ė…™™V¬X!±½½½111xüų1ĢĶĶ1{öl‰öEįŽ½{øwļų|>tttąāā:xyõźUtuuŃļe¢@×Ā… ée.#%z_~ŅD~ĻjllDZZ @f/śĮČŖ0ƒčźźBNNĪø_[Śė9œŚ ÄŌE‚AŌHī öĮ‘ÉdéĆŚ“wŲ„‹»TL&sLĪ;‘?LÄDõdöČXtŲ8~ü8=z„āāb±ķįįįŲŗu+¢££é Ą7pšąAØØØ€Åb”©© šššˆˆˆ k¤„„aõźÕØÆÆ‡ŗŗ:“µµQWW@€·ß~‡ŠĢ\»v-"##abb555477ƒĖåbٲeøqć˜L&öķŪ‡ŗŗ:z\¢£QQQX¼xń؞;Ē“ZPZ0l¢øuėtuuįåå5¢sČŹŲmfŖ°°°PHMKK ŗŗŗ$¶“ åAAÄ“““¤Ф„VPPJJJžž.¶żāŋ077ĒĀ… émŃŃшŒŒĒCcc#222 ®®Ž’ūæ’£yć7 ©©‰¢¢"šł|TUU”££ļ¼ó¾žśkÜ»w†ŲŲX$$$ ¦¦ÅÅÅhjjĀ/æü‚Ū·oÓÅUkkkAQ¼¼¼°iÓ&PŠ¢Fd枲&Ƀįńxąr¹£śzZ¦Gee%ņņņō/ĖiėWim^ąńćĒS®óĒoæż†ėׯūuKKK„n'A ™AA óąĮŲŲ،ŗõ¢¼1 čė룦¦FlūX¤koŚ“ ƽö.^¼HAķźźBxx8öķŪ'ÖbĻž=bŻ\]]„“'Oč_BpēĪ|öŁg°µµ„ćp8ųä“Ošķ·ß"99žžž(..†………Äšö_|uuubKƊ¬×s$5yŌĒ ;‚HsóęMPøŗŗŽźZVVVČŹŹŪÖŃŃŚŚZŗĖĖXKJJĀ7ß|ƒC‡ŃK–źźźčś(?’ü3444>Ä_žņ|šĮ˜3gŚŚŚL‘ŌÕÕamm;vĄĻĻ¾Ę_|žž|śé§ćņœDJJJ¤n—µÄ‹x¶L‚ ‚ ŃÕÕÅ×_›7oNø¢{Ņ&¢|>_īu“““°vķZ\¼x‘Žvūöm“µµIŸ“±±‘x¼ŽŽöÜÜÜ ”P(u¢£„„}}}:åÜÕՏ?Ę«Æ¾Š'N ** ……… …x’ż÷įęę&ϧ)•¬L}}ż1æöpŅĖ•+WZšu(¬­­„n—5y ¦¦¦øpįbccémÉÉÉø~ż:~ūķ7:kč’™ Ć“iÓ@QV®\‰Ļ?’ZZZ€££#RSS±hŃ"±ó%$$ &&fܞ“ˆ“×QYYfffć>bā!™AA 2cĘ ˜˜˜ >>™™™X±b\\\F=Į’Y)éeeeöF+00[¶lAnn.œœœpńāEŲŁŁĮĆĆCģø§„Ÿół|Ņ‹Tż)[[[6lĄ·ß~‹S§Nį÷ߧ׿³X,,Y²gΜóÉxYY™Ä6‡3äĢ###¼ūǹsēPYY)s?EQōņkkk±,‹‘’Š€G‰e{Œ%kkkXYY!!!īĀ“’’ooop¹\¤¦¦" @’dŽŃŃFFFČĪĪFrr²D]ˆŽŽ^ŲŲŲą×_Å¢E‹Ęå9HÓŲŲ'±}ƌ`±X 1ѐ AA„łūū#$$---8žhņ,+[”££C¬čįpąĄżK***žžŽ½{÷āĖ/æÄæžõÆ<›”ikk“š `aa1ä ›Ķ†žžŽØĒ"jż)Kzz:jkkĮ`0°|łņQ_ōōō ££#֪蓵µÉ,N)oHLL¤’Ÿ’’šx<±– xī¹ēōļÉ@™’’RSS>ŃĪĢĢ”ŗ]Vöńģ!Ė‚ ‚ ČĮĮA¬Õ\yy9¾’ž{„††JLĘÓōéÓ„NfĘ"][EE›6mĀŋ '±`( Ąf³ńšįC‰}hhh 'no¼ń^|ńE±1ŲŚŚbėÖ­˜3g %Ī!­’’HÉz'ŚD­ÆÆQQQgggXXXČķÜŅ‚IB”P¬åėX @~~>ŃŪŪ‹““4ųųų`޼yHMMŠ’½ŖŖŖ¢³ęĪ GGG,X°Ė–-ƞ={š×æž?’ü3ZZZ`ll.%%%©Łµµµhoo—ūõ‚‚‚••…ƾś sęĢф…ÉdĀĻĻ?žų#īŽ½K×YØ­­ÅĒ @@¾ÓŃŃĮ„K—põźU±×755ééééźŗŗŗČĪĪFyył(žå’<ŁQd¢RRRŠÜÜ ‹5hŃĄ‘UwAÖ$v,€¢($%%!##šöö†ščŃ#$$$€ÉdŅ*”••‘˜˜ˆžóŸprrĒCxx8žųĒ?ĀÉÉ ‡·ń?©¼¼\j+O ‹u ¦& ‚ ‚P0777čččfĻž-[¶@CC===ø}ū6¾žśk¤§§{ū4iRŠ¢››+÷k-^¼&&&ˆ‰‰Q€Č‘#G ¤¤oooØŖŖBMM ¦¦¦ų駟šŁgŸŃĻ·Žz ...Xæ~=8tuu”ŖŖŠyóęĮŅŅśÓŸÄĪ»wļ^TTTĄŹŹ ’ž÷æG®_æŽ`ńāÅx÷Żw‘€ųųx“““ ,, ©©©X»v­\S²ckk+µ²yzz:¼¼¼äz-‹…7n ””A¢  ††nß¾ GGG‰Ēmß¾]¬%›££#ŠŠŠšąĮTUUĒćĮŠŠŽŽŽbĖ. p÷ī]äęęāńćĒØ««ƒŠŠ įāā"֚¶lŁ///ddd ®®nTÅė ŃŃŃ!±ŻŚŚZįėÉŠGGG8ΘŗsssCdd¤ÄöøøøQƒ†CT ŗŗ>>>ś3t|||’’‚„„¬Y³†>žśõėŲ½{7x<¼ś3Qlmm1.ć~RKK‹Ōz, ĪĪĪ 1Q‘ AAÄąéé‰ŲŲXttt 55Ė–-ƒ%Kąęę†[·n!''•••8~ü8ÜÜܰbŊ1/žfii ===‰ōāņņr466Ź=½XVļy%%%™©č3f̐h Čf³‡¤prr‚““Ӑ޵““”Y0q8ŅÓÓ„n¶„CÕŚŚŠääd€ŸŸß˜ż¬¹»»#::Z¢ŽBnn.¤¶Ŗ”·€€œ8qųóŸ’LoŸ7o‚ƒƒQ^^N×mg³ŁX·nöķŪSSS0 äęęā»ļ¾SXg€øø8‰ķöööPSSSĄˆˆ‰Š, ‚ ĘEQØØØPō0bŅąp8šööŠæ.½«« @Ļų   ģŁ³&&& ( ééé8t袢¢Š××7fcb02'ęć¹n{*éččZtPEEEī]F#** ½½½PWWӖ}:::RļRSE/Ek‹-‚††:;;1ž|z»ÆÆ/Z[[”§§'–mboo°°0ōōōą7ŽĄņå˱lŁ2|öŁgX¹r%~üńGśX qétŠÖֆHŻēļļ?ę×'& ‚ ĘLhhØŌ”W‚ ¤›?>8ŗŗŗpļŽ=±}ÖÖÖ8xš ¶lŁuuuōōō ::‡’ygYÜŻŻ„¶¬KMM„ ļC—œœ,õn­³³3Ų쉑¤ŪŲŲHO(/^ eeå1½Ž¢E‹¤žŒedd ¶¶vLÆ ¦¦¦ąr¹ąr¹˜3g½}įĀ…ąr¹hllKū€ 6ąĪ;hiiŸĻGKK "¶ģ$,, įįįcžDA›'ŁŚŚ*¼Ż(1ń A1fDė˜Ē»˜ALVjjjō$$))Iā.?ƒĮ€»»;Ž~ūmųūūƒÅbŃæg?žų#jjjä>&}}}©5:;;q÷ī]¹_o*ėźźė=?ŠD*ÜvćĘ …BčźźĀÓÓsĢÆgdd$µŽƒP(ĕ+W&üßuuuhii)ģśUUU2 *ji1±‘ A1¦ ‘””¤čaĤ!šÜ·µµÉL¹WUUŊ+šę›oböģŁ€ŅŅR=zaaaąółrÓĄ遒’’Ҿp²øĢc 333¹Ō‡ŠŠ V¬X1n… ee”••ÉLs'ś%æ’ž»Ō@ÉōéÓ1}śōń1į‘ A1ęn޼‰²²2Eƒ &mmmzt\\œDĮ“ „Ż»wĆŲؘ®šŸ’üG®õfĻž-µ`[[›Ä²BŗĪĪN™р€©`EˆˆˆEQ077§LćĮĢĢL, ›7o¢½½}ÜĘ2™Ü¹sGj;E&“)Öр "A‚ bĢ …Bœ;wŽŌ ŠŪŪ‹öövp¹\TWW£¬¬ UUUhllDKK‹Ō»¤Ļ"0 p¹\©żäŸdccƒƒbćʍbõ>ŒœœœQ‡Į``įĀ…R÷EFF¢µµuŌטźnß¾-õ=ŠČČ ‘¤‚‚:`»bŊqL¬\¹Rjūöövœ={vŠ€Ų³Ø®®7oŽ”ŗĻĖĖ fffć<"b²˜ÕG‚ ˆ)O“nyūöķęŽ!MMMhhh@cc#ŃŠŠ.—‹ŽŽŽ!Æķåp8ŠŅŅ‚‘‘ č/CCĆg¢Õ•±±1ģģģPXXˆųųų!µ°c2™šōō„““"##qļŽ=455!443gĪĚ5kÄ – —««+¢££ĮćńĶwwwćʍŲŗuėˆĻ=ÕUUUÉ̘˜HY¢švvv°±±÷ė«©©aٲeø|ł²Ä¾’’$$$Č F=kzzz*u9ކ†–-[¦€Q“ A榰°‰‰‰b­–ˆÉM(¢¦¦ÅÅÅxō菏Źä’‚ŽÓÓCž¤©© +++̜9vvvŠÖÖõõ&.— &³?a³²²ÅÅÅCž”©©©ażśõšööFxx8ż½łöŪoįåå…%K–Œ(Āb±°lŁ2œ?^b_ff&<<<`mm=ģóNuEįŹ•+RļbwŹżP0 …N ===ńąĮ©-f###aeeEÖ¹øté¤ī[µjTTTĘyDÄdB‚AÄøŗuė,--aee„č”#ŌÖֆ¬¬,”¬¬lÜ Ćµµµ!''‡Ns722‚µµ5\\\`ii9aīŖŽDMM āć摓“COÕŌŌFTčĻŲŲ»wļF~~>"""ŠŌŌ„ŌŌTdffbɒ%šńńökåźźŠū÷¤Db_XX<ųLdj GLL *++%¶3 ¬[·ŽöL®®® M#g0Ųŗu+Ž=*±Č’I„„„ˆ‰‰‘ŗĻÓÓSjėEEb³ŁXŗt©¢‡===<÷Üs •Ų×Ńс_~łū÷ļ‡ŽŽŽF§XwļŽ•ł3„ÆÆēž{nœGDLF$@AŒ»––\øp/æü2™,LpuuuHNNFvv6ŗ»»=œ§jiiA||<`ii OOOøŗŗNø»­@šxaa!āāāP^^No744„ŸŸÜÜÜä֞ÅbĮĻĻŗŗŗ …’’Ņˆ_ųśś"..NbŸØ%č‚ F;äIƽ½ēϟ—ŗ @“ö}¢šõõ…®®.ż5Ģž=^^^ø{÷®Ä¾––œ:u ūö탪ŖŖF§999øråŠŌ}l6AAAPVVēQ“ A QTT„ųųxRäi‚Ŗ¬¬D\\ņóó‡\ĢOUUU@[[***PRR‡ĆŠŠ ”••ŃÓÓƒŽŽ^ōōō «« ŻŻŻčźźBCCš››Gt}Š¢PVV†²²2DEEĮßßsęĢ›­ų>¢Étt4ŖŖŖčķfff˜?ž˜-DK7F»^8 Ø««“ŲwėÖ-ĆÖÖvTא„  ööö2÷ēę梱±ŽŽŽbĻ“¢(“““HÜ=ęńxrŸųööö"$$Dj׃7NØL(‡ Ó”` 5kÖ ŗŗZźrŠŗŗ:üųćŲ±c“““ävĶžžžA3oz{{!Ę}Ķ}zz:~ūķ7™ļ‡ėÖ­ƒ©©éøŽ‰˜¼’— ‚xf‘"OOii)āāāššįĆa?–Į`ĄŲŲ3fĢ€‰‰ ]Ķ_]]}Äćéėė£ 666¢¼¼„„„čééņ9x<._¾Œ˜˜,X°žžž£JÆ©¾¾>dgg#&&MMMōv+++ųūū:±•ŃėŃN`”””°mŪ6=zT"CD  $$»w„娮#Mvv6š››QTT[[[ŌŌŌ€¢(l޼@Į4śų›7o¢¦¦NNNˆŠŠ¢k!,\øEįæ’ż/^}õU¹M „B!.\ø@·Ś{’Ļŗ=żw·wģ؁ąą`©EšjkkŒ;wĀĄĄ@.×}zĢ øedd ©©  (J¬€œ££# ]³ ©© ›7oŸĻǬY³čv•@’÷ĮŁŁYnŠ¢płņeäęęJŻonnŽ•+WŹåZĻ 555ģܹĒ—šYĮćńŒ—^zI.A§®®.;v 666čģģ—Ė…P(„……“““°jÕ*±q¤„„ĮŁŁzzz°µµEpp0üżżaff}}}XXXŒų÷M(āʍHJJ’yŒ··7/^<¢óĻ.–ŸŸß_ž~’ŽŽŽ A1•DGG?õ˜žžTWWĆĶĶŌP@€ÄÄD„††Źl7õ$UUUø»»cķŚµX¹r%f͚###())ńhū1 hkkcśōépwwǼyó §§‡ĪĪN©“„'õōō 77%%%°°°U¦ĀÓ:t999čéé›ĶĘܹsńĀ /ĄĒĒG®iĢCQXXˆņņrĖ„‚ø±±1Z[[Q]]-±Æ··łłł°³³“ėk, Įb±ąėė ===“µµAII hll„¶¶6 ŠŪŪ‹¦¦&0 z¢öšįCXZZĀŠŠ===hmm…ŠŠ :;;G½$€¢(\»vMźv ’÷f×®]cśó6U©ØØĄÖÖYYYR[ööö"##£ś[R[[‹¢¢"(++ĆÓÓ\.|>Ÿž})..‹Å¬Y³ōwąńx°±±AQQ˜L&ŗŗŗąččˆĒ¬Y³†hmmÅéÓ§evśė&lŚ“‰üķœb?~Lw`)**¢ššš(ƒ!d2™B&“)`2™},«ē’u±X¬N‹Õ!śb2™,«“Édv³X¬n&“ŁĖf³ū”””E Y,ÅųšĆ) ’MüĶ7ßTč&‚ ¦Š¢šŃG łųeĖ–aŃ¢Ec7 BBQQ®^½ .—ūŌc™L&0gĪŲŚŚŹ­`¼566"==iiiō]÷Įˆ&“c¶D ""‰‰‰`2™xūķ·”§§7&׊ߒ÷īŻƒ³³3årN@€_żUf‰ŖŖ*¶oß>„Ū‚ „……!++Kź~6›]»v‘„O£T__'N „„Eę1öööŲ²e‹\  ”••AUU•Ī)--›Ķ–Śį”»»UUUŠŌŌQ&Lqq1.\ø0č{˜››6mŚ4aߋ‰‘‹ÅķŪ·×®] ˜Lf›Ķīe±XŻl6»SII‰ĻįpŚ”””š•””ø§‘Ćį4*))5°Łģ&‡Će³Ł-§•Ķf·+++w©ŖŖv …Ā^‡# Ė‚ ˆ !22°±±QōP¦¼ŽŽ^\½ziiiO=–ÅbĮĶĶ žžžr[s;– °lŁ2ąžżūHHH@ss³Ģćāć摓“ƒĄĄ@˜››Ė}L¾¾¾HII@ @QQ|||ä~”’WM€X,‚‚‚šÓO?I-ąÖŁŁ‰'N ((vvv£ŗVww7BBBĘäū|>Ÿ®-0Ü1KŻĻd2ńĀ /€aß¾}8qā„SPP€Ć‡cõźÕpvvÖłėėė‘žž>č1Ozņņņ†|ž™3gś7®££7oŽDZZŚ Qżüü°bÅ ’@Œ AćjŚ“ihhh(&FQĀĀĀpšąA’.;†*µŖū@, ...€¾¾ž8N~Ųl6|||ąé鉬¬,ÄÅÅ ŗÜĖåāūļæĒ²eĖąēē'××ZZZpwwĒżū÷OOO…ݽżŽÉ»‡Ć“€[OONŸ>E‹! `Tݬ¬¬°dÉ’Ń W¦ššša___ŠŠPŌ××KŻĻ`0°aĆ:5œ=]]]¼śź«8uź”XḱZ[[qöģYܹsėׯ‡‘‘ŃĪŻŲŲ;;;̘1CžCŠ KII‘ ( ˆˆˆ@{{»Ģs0 ,_¾žžžrńl™xMs ‚ ˆ)MOOĻ=÷œŌ}¢nŅśj£—žžŽcĒŽ=5`oowŽy[¶l™”€X,ÜŻŻńÖ[oaćʍƒŽ …øyó&BBBŠŁŁ)×qˆ ---ČÉɑ빇c,2DŌŌŌ°k×.™éĻB”ŃŃŃ8qāų|¾ÜÆ?ŽīŻ»‡cĒŽ X»v-©Ś>TUU±{÷ī§¾¶„„„8zō(®^½:hF¢P…üü||÷Żw 4 ¦¦†ķŪ·“!$@AŒ;gggxyyIŻWRR‚øøøqŃŌ&pńāE„…… ŚZOOO/æü2¶oß.ŃK}²c0šōōÄžšøŗŗzl~~>Ž=Ššš¹]ߥĄ€¾7hŖļXĖ hkkc’žżR×I‹ćȑ#ĆJ£–%""|>ĶĶĶąółččč›”Ÿ;wWÆ^„—)dggĖ\·?Tmmm Åļæ’ŽŽŽ^©Ē°X,ŗų#16”””šÜsĻįłēŸ“žG__RSSqčŠ!„……É\F MAAĮ ūSSS‘’’B’_V@čIE”  ß}÷~żõWTUU zü“iÓšśėÆÓÅ b“Čr‚ B!Ö¬YƒŹŹJ©UÅ£¢¢`iiIźČAOO~żõW™ė•ž ĖĀ… įļļ?nžESS[·n…‡‡._¾,sBĄćńšĆ?`ūöķrK ö÷÷Gnn.źźźPTT¤ōņl(‹ššöģŁƒŠŠPJ=¦­­ !!!°¶¶ĘśõėGÜFĻēćʍHHH€ŸŸŖ««”ŖŖŠ½{÷‚Į` ””ĪĪĪąr¹˜6mźźźF€”( ÷ļßĒ7ÄZ>‰ĆįąÅ_„­­ķˆ®C ››ĢĶĶqīܹAwéééČČȀµµ5ÜŻŻįää4h!99ĶĶĶ(,,Č3P^^mmm¬[·½½½ Ćüłóéć>ŒmŪ¶ĮĮĮAźł:;;qėÖ-ddd ZÜP„ÉdĀĻĻK—.Õ‚xłi"‚ ‚Ķf#00PźIŠ¢pžüł!Uw'dėģģÄ/æü2h@GG{÷īŒ%K¦|` kkköļßOćĢŠŠÆæž:VÆ^żŌEQ(..FXXžńąüłóHOO—Ś^TSSæ’ž;X,ŻnR”ż”¤¤„yóę‰-_sss“€œœÄÅÅ )`aa×^{ Ė—/'BīH&A”0śśśxī¹ē*±ĻēćüłóŲµkł4ĶĶĶųå—_M}uppĄęĶ›åŚJk2„OŸ>W®\‘ŗT¢ÆÆēϟGgg§Ģ%,Ćįļļ’’<~üeeećŚ6¢(ś9ŽučĻ0Y»v-lllpńāE™“ü¾¾>ÄÄÄ )) sēĪ…ææ?“““†tÕ«Wƒ¢(p8tuuÉdĀÓÓ555hnnĘāŋ”©©‰ņņr¤„„ĮĪĪnČ-)ŠBaa!bbb¤v=x’££#6oŽ<.Æ-!‰ÉdĀ××ĪĪĪø~żś‚w===ČĢĢDff&€ž č–-[čżöööPUU…„„%tuuq÷ī]hii!##, ³fĶEQČĖĖCgg'\]]‘““ƒŁ³gųyØ©©ałņåššš Õ’‰1C‚A„BĶž=ŽŽŽøsēŽÄ¾’’ÄĘĘbńāÅ ŁäÕŲ؈Ÿ~śIź- r¶råJĢ›7|Čąīīsss™UŽ…B!._¾Œ®®®Qå²µµ…¹¹9ŖŖŖ0®A€īīn:~,—<ÉĮĮĄŁ³gL÷ōō %%÷ļ߇««+ÜŻŻaee5čĻhAAĮ ®'÷I;VWWW,ĄĆē󑕕…{÷ī i7›ĶĘźÕ«įķķżŌc‰±§„„…ĄĄ@ųųų &&=ņcŸ|Ļ444  VćA[[@’$~ą!u¼QQQ|}}”¦¦6ä1ÄH A”p«WÆFee„ŌāHŃŃѰ““ÄĢ™30²É§µµ'Nœ ė•„322Ākƽ†™“†›7o‚ĆįŒŗŲ›ŸŸĪž=‹‚‚ŌÕÕĮŲŲxT突iģć}·ZWWū÷ļGRRbbb-PŁŪŪ‹ū÷ļćžżūŠÕՅ»»;abb"qlmm-Ö¬Y3Ŗ± l X__Æ¾śjČJF[Ӏ;Ó§OĒ®]»PSSƒŲŲXäęę»Dtt4\\\F<>ŸņņņA—ÅØ©©ĮĒĒóēĻf³²ˆńG‚A„‰ź=zTb½­Ø>ĄĮƒ‡œ"ü¬źźźĀ©S§Ąćń¤īWUUŎ;­Üž,ćp8Ų¾};ĀĀĀd¦‡‡‡CSSNNN#¾Ž““ōõõŃŌŌ„ÄÄDl޼yÄēE€ž øøø <<|HŻx<¢££ 555LŸ>}Čéü#ŃŁŁ9¤€¦¦&V­ZõŌN„ā™šš"((õõõHKKCffęėĶhkk*µŸĖåJ-ŽÉ`00}śtø»»ĆŁŁyŠā„1Č"K‚ bBŠÓÓƖ-[¤¦ž¶··ćüłóC¾;÷,źķķÅéÓ§eVĒÖŃŃĮ«Æ¾JOĮf³±uėV™ė’…B!Ο?ĒųL& ,dffŽ[’ņA€ń\š$lŪ¶ ;v쀙™Ł×ŃŃAƽ–„··\.@] ”P>Ÿ>Ÿ¦¦&P5ŖžžžCj5IL,FFFXµjŽ{ļ=ģܹ®®®ć SUUÅŅ„KńĒ?ž{÷īÅܹsI€P’ @ALšńńė»,RZZŠ˜˜,Y²D#›Ų(ŠĀ¹sēdNL °gĻ’I1DL&6l€ŠŠŠŌ*ž}}}8}ś4öļß?āTž9sę ** |>III£NiļķķEZZŠ‹‹ńā‹/J ¦‰Ŗā³Łl°ŁŠ’hgg;;;”••!22%%%£>gHH,,,ĄēóQXX “““ «« zzzŠ××GWWŒŒŒ°~żś!ŸWYYsęĢĮ¢E‹ ””1źqŠĆd2akk [[[…BŌŌŌ ¬¬ eeeO­pįĀ“¶¶ĀŻŻ555ŠÖÖFnn.„B!ōōō §§‡²²2lŪ¶Mjj’ģŁ³0VO †ŒdAŹŖU«`ii)u_LL >|8Ī#šųbbbŸŸ/uŸ––vīÜI#°bÅ ™ė’»ŗŗ2¢vs@’D\Ō_üžżūčččŃy:;;ƒżė_øzõ*ņņņdžŽˆ2™ ••öģŁƒ={öĄÉÉiÄŠĒCCCK–,Aff&ōōōŠ××;;;øøøĄÕÕ<CžČbŊx’ż÷±vķZ˜b˜L&ĢĶĶ1ž|aÓ¦MƒĻ`00sęL”——’““1wī\Ķf#//hhhįĈ)> LA°X,¼šĀ 8räˆDŚ/EQøpį©0€(CB¼üņĖŠÕÕēQMkÖ¬A[[rss%ö555į·ß~C``ąˆĪķķķøø8tww#%%eXY.---HJJ½{÷$ŠģÅĒĒĆĪĪNā1¢ ĄDmagmm kkktvv";;éééōdk(ōõõ±råJĄ»ļ¾‹††čééÅbųß2ŒŹŹJ™F æP›««+ÜÜÜ0mŚ“Ń=)bR¬E~~>ģķķ”®®UUUŌŌŌĄĖĖ &&&ōļ”™™jjj`dd4^C&ˆ!A‚ bĀõjžõ×_%ÖīŠźģŽ½Lę³Š6X­%%%lß¾¦¦¦ ŁŌĮd2±uėVüņĖ/R—[dggĆĘĘžžžĆ>·ŠŠ ¼½½ŌŌTųłł=u}pCC‘‘@ ’ξ—— qéŅ%”––¢¢¢B¢žĆDˆØŖŖĀĖĖ ^^^ąńx(..FII JJJ-覩©I’[]]]f[¶éÓ§Ė<‡‰‰ ^yå:p@"ōæg̘!¶‹ˆÉ†‚ ˆ ÉŽŽóęĶCrr²Ä¾ŅŅRDGGcéŅ„ ŁÄ źš ­ ƒĮĄóĻ??čd‡:6›ķŪ·ćŲ±chjj’Ų ©-ģžĘ××ÉÉÉčč西ū÷é%OŖ®®Frr2233頏ŗŗ:¼½½ÅZ‹„¦¦¢ŗŗńńńŲ¶m›Ų9DK&z` ]]]xxxĄĆĆPUU%³sƒ<(++“AS޳} … ‚˜ŠV®\)3m766ö™®˜˜(³ˆ•ĻØZŲ’TTT(u½zoo/Īž=‹¾¾¾aŸWCCīīīśæ§¢»ū"eee8}ś4Ž=Šōōt…Bčźźb͚5ųӟž„%K–ˆ uČĻĻG}}½Ų¹&K&Ą`  ¤¤4č1•••HLLDEEn޼‰ØØ(deeÉģœAĆŃŽŽŽęęfšł|<|ų\.uuuŠA A–Ø>€šššÄ>Q}iw§ŗ––DGGKŻgnnNƋ&äĖĢĢ «WƖŗO”¦?žžž`2™hiiAVV(ŠBAA¾ūī;£  @æó-[¶ąwŽĮüłó„N†”§§Š¢˜˜(¶o¢”·ĘĘFØ««#)) <¹¹¹ØØØ@qq±¢‡FLwīÜANNīŻ»‡ß~ū qqqˆŠŠUŪP‚od9A1”éčč`óęĶ2넆†bļŽ½ĻT ļµk×$ŠĮƒß­&äĆŪŪeeeČĢĢ”ŲWWWčéé ėœzzzpttDNN"##Gļ·¶¶†ææ?lmmŸz.&“ ___\½zX²d “µµLĪå#įęęt†Aȓ››ŚŪŪŃŽŽŽM›6Į` ­­ ŠA É ‚ &<{{{™k„ĖĖĖ5Ī#RœĀĀBäååIŻ·qćĘaO@‰įŪ°aƒŌŽ ½½½Ń9żżżĶĶĶąńx`0prrĀkƽ†={ö ) 2wī\Ø««C  ))‰Ž>–„¢éééĮĀĀööö˜9s&llląęęFŚG“ 1„ōõõI¬©%¦†+VȬüüüqŃųėķķŵkפµ…³³ó8č٤¬¬Œõė×KŻWPP0¢ŸEsssŲŲŲ€ÅbĮŻŻo½õ^|ńÅUWRR¼yó÷īŻCGG ‚ ś‘|A‚ ¦ @€‚‚twwĆÜÜĘĘʃöüjZZZ†||__z{{ĒpDņ%ŖpäČtvvŠķ£( —.]ĀĮƒéŌē©()) \.Wb;›Ķ–9)%ʆ¤NųĆĆĆagg7ģ%*ėÖ­ƒ²²2“““F=>$$$ »»wīÜA@@½`*Õ000ĄĶ›7GuiYōחˆńć;::¦ōß$bņ"A‚ ¦@€üü|“··诨]__KKKččč(xtćƒĒćį믿Vō0ʔŽŽžžyœ>}Z¢>@GGBCC±oß¾)Y §§G,µ{ … ’e °vķZKŌgąńxČČČĄÜ¹s‡u>CCC¹MUUžžžHLLDrr2|}}§d&€···¢‡@La/¼š‚ÄߚįzZ7‹‘hoo§ †źźźĀŚŚ@’r"QLŲŲŲČżŚ“EMM Ŗ««Ó§O‡¾¾¾‚G4±åALz¢ Q@¤³³………(**¢?ü“߬Y³ąėė+u_EE"##ĒyDććĪ;tZ÷@zzzōzrb|éčč`įĀ…R÷ÅĘĘB(ŽóˆÄłśś‚Åb”££<˜’™1–TTT ŖŖ:ŖÆ±(Ԛ••xxxą½÷Ž£·ĒĘĘJŻ>R%%%())AUUÕØĻ7ž~žłgśµøråŹ°[SSC?oiEx§ bR£( =ŸĻ—y ĒCVVJKKGŌĒ›˜x–/_.³>@BB ĒyDc«ÆÆOfĄņåĖI7Z°`Ōō}.—‹œœŒč“““čJłqqqtPb*eTTT ²²rŠcBCCÅŽ¦Śū1vźźźŻßÓӃĢĢLśŽ³hŪTŃŌŌŲŲŲ`ŻŗuŠθٱcż¼>|Øčጠ bR+--EssóS£( õõõČĢĢDmmķØÓūÅb±X „šššÄ>Š¢pį±k“]ZZŚŚŚ$¶ėėėĆÉÉiÜĒÓÓӏ'Q›įYÄf³±`Į©ūbbbž^ćļļƒÖÖVzŪT “¶¶"44øvķ¾łę„††"##šųńcdggÓ’¦¦&‹½Y~~>‚ƒƒ÷Ōc322šĆ? ©ÖĖŻ»w<¤æŸņŌÖÖ†ŠŠP|ųį‡xė­·¤¾Æ=MYY‚ƒƒqżśuz[MM ‚ƒƒ‘žž.Ļį">>YYYˆˆˆĄĆ‡q’ž}œ;wŽĪ<>ƾś*vķŚ%sé Šüܽ{7ĢĢ̰oß¾§ž÷·ß~Ɨ_~ ’q«›ÓŻŻ äååÉd‚¢(|ōŃGŠŌŌÖy²²²šŹ+Æ`łņåX½z5ąįƇxå•WšłēŸĆŻŻ]®ć~ōč*++‘ ???:ئ®®+++888ŠA{{{¹_8 733Ū×ŽŽŽ7n 33ŻŻŻhkkƒ¾¾>ōōō`ff†„K—ŅėęļŽ½‹˜˜±,Ėŗŗ:|õÕWō’·oßN_£¾¾·nŻBAAų|>ŌÕÕaii ???±Ī5iiiō²½M›6AII WÆ^EYYz{{ahh¬[·Gģ9ܽ{qqqhjjŸĻ‡ŖŖ*ōōō`hh///øøø éuźč襱cĒčnRX¼x1Ž= tP~śé'ęĢ™ƒeĖ– é 1)ńx¼Q­OėģģDAA“µµaeeUUU9Žnb±²²ĀŒ3&Ģy?›5küüü¤Vo®ØØĄ­[·°jÕ*¹]OŠ‹‹„f5čččĄÕÕU#"žÄįp0ž|ܾ}[bßżū÷ś³¦R&€……,,,čVŠ3gĪDee%‘––###x{{£»»iiiŠŃсƒƒx<Ž¤č ąęę†÷߃wżśu¤§§Ó“˜‰(..yyy Ä?ü gęĢ™x’ż÷akk+ēJ266†¦¦&LLL‘‘īīn:ؤ«« ‡CO ʰŗōČ[qq1>ųąĄK/½„µk×ņņņ°lŁ2±e OŅŌŌÄ„K—°téRÄĒĒÓē©®®Ū¶pįB˜™™į§Ÿ~čš#Ob0Ų³gŽ?&“‰äädś<÷īŻĆ•+W¤fÆĢ™3‰‰‰PUU…P(DPPΟ??čóßæ?Ž?>č1===Ų“iŻUdöģŁˆŠŠB[[›Äs VpłąĮƒ$@”(]]]tõŪŃjiiAvv6 aaa1%×VŪŲŲ`ɒ%ŠʘY¶lŹŹŹPVV&±/)) VVVpttTĄČäCVz«ææ’¤Ļr˜JD-łž,BZTT„öövØ««+hdĄ“iÓ`mm’’0™Ģ1©V®(ŹŹŹhoo§ƒ]]]šóó±Žjjjō¤_WWEŃķ6™Lę„ķ"ćķķ=¤_|ń/^ŒyóęĆØFF4}žłēGśļŚ~łå—ņÖ ]?>żļźźj¤„„ĮĘĘŚŚŚppp@ZZ,,,°{÷īqŪp|šĮō믤¤SSS°Łl“““€ĒćA(¢­­ Ÿ}ö–.]:äóVTT ś³T~üńGųūūcūöķbū.^¼(óq<Ąļ撎   \¹rE,`dd tvv‚ĒćŃļ»ĮĮĮxļ½÷dvEŲ¶mpvvFdd$ŒŒŒPSS3äē=L½O»ALiEEEt —<ˆźp¹\˜››ĆŲŲ Cnē'Ę“ÉÄ /¼€#GŽHTϧ( —.]‚©©é¤øė÷¤žž©}č9]šm*kmm„S>'ś÷OEE...ø{÷®Ųv@€¬¬,…OĪ–-[†¢¢"˜››O©÷·ōōt477K­2T%%%Ų¹sēŽ}ūķ·ĮēóńĆ?ˆm’ųćé„O® å•W ¬¬ŒĆ‡čTœįŽ“nBEEÅ ’&F—Šcyųš”X€¬¦¦hii”ƒéŪ·oG@@ø\.–/_ ?ó.$$„~œ½½=Īž=KV­Z…ƇĆĢĢ JJJhjjĀ‘#GšÅ_®^½*Š××Ē7ß|ƒłóēCGGUUUxūķ·éå¢6ˆ¢ńż?3{öģ”’ßŪŪ‹={öąōéÓśSł„(ŠĀžżūpqqAdd$h``€ū÷ļ8€;wīΟ?O·`422Ņė= A“Ź£GĘ¬™Ø^@]]¬¬¬&ģ!B’¶¶6žžyœ:uJj}€³gĻb’žż“īĪyvv¶ŌJÓNNNfy„‡‡cūöķŲ±c‡Xź$lٲŃŃŃś'4¦¦¦ō¾`éŅ„Xŗt)}—§©© żė_NO@CC~~~ųä“O&loxwww‰ Š_°MŃAKKK™5&;OOĻQõNq:.—‹S§Nį“O>”³„B!>Œ®®.Üŗu żė_éZ¢‚u/¾ų"€žæ3K–,Arr2,--accƒ²²2ÜøqGŽA\\ęĢ™ ­õ… ąīī.3šÅ_`޼yX¼x±Ųöæüå/ųūß’ Ģ;jjjø’>Īž= ;;;±cqįĀp¹\ÄĘĘbęĢ™°°°@]]āććńĖ/æą§Ÿ~›tļŽ½'Ož¤×ps8444ąŲ±c8vģĪ;‡Ķ›7Ó­[E“ÅĢĢLäååų_%}ѹĢĢĢ0{ölččč ¹¹'OžÄ÷ߏŃ߯ .ĄÄÄdČß·‘joo—łŗUxxøœF3r¢ģŸ®®.\¼x–––044„¾¾> PVV”PHallŒśśzśjjjt`GdąŻóõė׃Éd¢¶¶–޶vķZ: m ēžżū±mŪ6ś’ŗŗŗ8pą-…˜½”œœ ###čėėÓ_ĒĒ7ß|2³LŽ}÷]üüóĻś—ŁÜ¾}bÆ‘čł ¬āč訐¼ct bŅØ¬¬—JĘ]]](,,DAA©~>‰ŲŁŁÉ¼ŪRYYI§’M&¢ ēOšhY>>>hii‘XOQ¢££!Ąćńšš*¶?>><žą%°|łr9r***ŲµkŽzė-ģŲ±ŽŽŽˆˆˆĄĀ… ŽzOKKK±•"•••b¦‰ÉK4ŃX¬3//­­­ DKK =Įx\@@€žµūÉÉÉųĒ?ž²²2DGG#** yyyørå ų|>¾’žū!'%%ŃŃŃųĖ_ž"¶żńćĒųꫯąīīŽņņrÄĘĘāśõė(**Ā™3gd¶ILLLč7PPP€Ū·o#++ ÷īŻƒššžńŠĒ=|ų'OžÄĪ;QSSƒøø8ܾ}ČĢ̇Ô‚ū÷ļ—Ė„3!Μ9.— .— ”––āäɓōŅ®›7oāņåˈ‹‹CEEĢĢĢ&t­ƒÉ@T@±££ū÷ļĒŹ•+1wī\LŸ>077Ēʍ„fž f`—×^{n«'śü”ŠÕRHZ€{åŹ•t€āēŸĘśõėįėė {{{BCC>>>ųžūļ„ū=J’¤sµęęfäååA("//ķķķt÷€ĀĀBōōō ##C®Kåį_’ś^żuXXXHŻßŽŽŽųųxlŲ°A¬#ĄÓ ¼Q¢””]]]™_£)Hźé鉐xzzJt ś³qŠŠŠšį‡ŅKMZ³f …VQQK—.x,SY@Ą'PRR¢kS…ŚŚZ466ĀŌŌ¦¦¦Sj=ķTĆd2ˆ£GJ¤ųR…‹/Nšś%%%R{Ģ»¹¹)¤-ąÓ 33IIIXæ~=€’M†6l؀˗/ӓ% ’ū‘˜˜---:õYTšsŻŗuRƱmŪ6TVV*¼Śž`ÜÜÜ-ń½+..¦'‚ÄŲ©­­…ÆÆ/RRRĄē󑟟™3gB]]kÖ¬Į'Ÿ|466Žčü¢žÄÄDz[JJ ¬¬¬ąīīŽ3f %%{÷īŠ=ĢĶĶĒǾ}ū`ii)–ź|ģŲ±!%==ׯ_Ēłóē%ž.‰Ņ“g͚%õ±NNNR—®Č béėėC(¢µµ***ōóųõ×_1}śtŲŲ؈Mņ>śč£!?z9ŸĻGKK ŗ»»ŃÜÜü’Ų;Īöż_IŲ„½(2ÅÉ*øW„Vėč°­ömßÖś¶õż¶µuÖ[ŪJ­Z­uUq‚(ˆV؀€€€(#”!{†Œßür^bNY š|žŅóœœsĀÉóÜĻ}_ŖŖŖpļŽ=„YT‡††ĀĆĆ”””(..†ŖŖ*Z[[ŃŲŲÜŗu |>yyyX¼x±¢Ć„ČĪĪĘŗuė°iÓ&p8TTT ¼¼OŸ>ÅÓ§O±gĻdff¢¼¼iii˜2eJ—®Ūžw~śōi™d”P(¤tzŅĀVXXˆQ£Fį—_~Į˜1cŠŌŌ„ŅŅR”——£¬¬ ×®]£t:nÜøAµßH°¶¶Fxx8üüüP[[‹ 6@KKKŖaØ”|³@xŽüü|Ś2²žD  ØØ÷ļßļ—–B÷ŃŃŃĮņåĖiŹĶĶĶ8uź”ŅL(;B^āKYĄņvHUTTąåå…I“&!))‰²‚ŹÉÉAYY|}}©Ż?‰@ӕ+WhmmmmB+l¦,H<«Ÿ§ØØˆÖ‹Š{<{ö ĶĶĶŠÖֆ„„%˜L&Œ)A̜9|>zzzݾææ?233)w„„ŖģyāĉT²«ŗŗéééRɟE‹ĮĻĻ»wļ†µ ž4iV¬XC‡u¹ņlĒŽptt¤]l–——īmn< y µē“ ®®®X»v-N:ggghjjĀĢĢ žžžX¼x1öīŻ‹†††.½8pąlll ££KKKp8xzzbƌR%ēŠDb+׀ōļżÉ“'2-’] €ŽÉ&11‘j X½zu·ć’ę›o0nÜ8Œ7000€££#|||°dɼ’žūŌ¹ķ«ŃŚćęę†óēĻCMM "‘kÖ¬éRE€¢6”śR @ ”šŖŖ*¹tE Ń ŠÓÓĆȑ#”©©©č4ŲŚŚĀ××1112c< ź’Ą^ŗ‰‡ŖŖ*µ§lH, Ūļ&$$ĄŁŁŚŚŚ˜8q"Nœ8““4Œ7N¦Lhė[=z4Ž9‚#GŽĄĀĀ#FŒĄšįĆaee)½Ą‡Ć‘Ńąr¹r­«=ĒČȈ*e—g­×ßžžžųķ·ßš÷ßĆŪŪŁŁŁxóĶ7“&MĀéÓ§QUU…;wī@$I}Ę544ƒÄÄD¤¤$üņĖ/ʐ••…ŠŠP=z”6į)©. «&Š+-n‡ĘęĶ›‘’’.— .—‹““4œ?aaaˆŽŽī“zīāŋxė­·ąįį?üVVVŠŅŅ‚††ĢĶĶńĮHU) ŲŚŚBMM Ÿ|ņ D"˜L&õ3f0PQQAKKKJßū[[[ddd -- ćĒĒ˜1c ¦¦@€āāb©ļJźß†††PSSŸĻĒÓ§Oann “¶¶b’žżšóó£ĪŻŗu+> sssØ««£ŖŖJŖ ŹĖĖ«GńK˜7o|||؊¾ŖŖ*©ĻGūųŸgŚ“i8zō(V®\ @€ąą`\øpsęĢ‘:ƽčä¢E‹0bÄØ©©ĮĻĻ!!!Ż~ŹI„„µµUi3°½XZZ*ßķĮŒ3PTTD•˜·'>>ÖÖÖJ«ų[[[K[®lmm-Ó3«,čėėĆŻŻÉÉÉhll„@ @ff&Žxć  vJćććå&455‘€cĒŽ!)) ………ąńxHKK£z‘555qīÜ9™I›2akkK»hÉĖĖ#I€AĄŌ©S“‰č©ŖŖB,cāĉŚ*D"žłēŚĻų£GPWW///™E‘P(„··7Ž;†Ÿ~ś©Ć¶Ÿ;wĀŚŚ+V¬ —ģō×ŌŌŠŽ÷TزøøOŸ>ÅŲ±cįää$3¾fĶ=złłłj˜œ={L&“U4’æ}EÓ¾J¢£ļ|eKĄ»ļ¾K=‹‘˜˜H{^@@œ©’³X,x{{S/µµµTeF}}=ÜÜÜšŹ+Æąųń榞qtó6 ¼ūī»ŻŽŊŲ±cÕĀš×_ўĒf³©÷ŁŃµž 1aĀlŲ°Ś]·²²¢b¤«ź266¦Ę%šęęęHNNĘÆæžŠäädŌŌŌ ®®MMMŠÓӛ͆‡‡6lŲ@Ł_ŚŲŲP×6l˜Ō=Ž’}444ąÖ­[€~ųĪĪĪTjŻŗuTĀ™Ē攦¦|>_éDy{I„¤¬¬lĄōŽ‹Åbhii):  l6Ė—/Ē‘#Gdd}€7ŽxCév×å9a(ūÄßß_ż5nß¾M•KvHUUU1nÜ8ÄĒĒ£ØØXøp”ŌnēĪ;C‡ÉL‡ †×^{ ß|ó ²³³©Ež2")c.))‘:^\\L•ś–ƇĆŽŽuuu …ŒŒŒz­ Čß߇‹Å‚‡‡µ”xGGG#))I¦ŚŁŁB”ü1>żōS©…ļß’°°0Œ1¢C͂ݻwĆÜܼCmŒ€€°Łl|óĶ7˜>FFF°··§Ę'Nœˆüü|œ={dŌņ+++…{÷īŃ^æ¹¹PWWWŚ€ŗ.”P8`’›łóēC,ĆÕÕS¦L———\ūŠīąļļ>ŸŪ·oS‰. “&MB\\ų|¾Ģg|Ɔ šņņĀ·ß~ ###hkkcųšįŠŌŌ„··7šĆ?Ƚ/ĒĆŃ£G±yófZ«4 FFFųłēŸQRR‚qćĘĮŠŠęęęŠŃŃĮ¾}ūz\I3{öl,Y²”””°²²¢v“Łl6œœœ••…ķŪ·Ė lϦM›`jjŠ7ß|†††ąp86l,,,pōčQĢž=555JSŲŌŌCCCÜæ eeeØ««£T𠄁€rƒ„! —ĖUš/ūĪ077‡±±±¢Ć tĀōéÓĮåråźŲŲŲ(•>€DŁ»=½RŹÜ—čččĄĖĖ PSSƄ ¤DĮ$­ß’=Ł$Ąœ9s°wļ^¬[·IIIptt„©©)€¶ÅĻįƇQQQ1 lä=ŹĖĖ•²e°annN•9²×Æ?cĘ ģŚµ ¤”Õ`ÕŖUŌā7 @jLWWwīÜĮõė׏²²2ˆD"Ø©©ĮŻŻ³gĻ–ŚUēp8Ųµk•Č|śō)¾ųā Ź‚°#V­Z…‰'"44yyy`2™°¶¶Ę²eĖP[[ ???ŖüŁŚŚ»v킯Æ/ķµ-Z[[[°ŁlmIÉæžś ’ż7nŻŗ.— ‘H‹'''Čhxyya×®]2ĒmmmńąĮ\øp©©©hnn†¦¦&lmm±téRcźŌ©Ø­­…””!Œ±k×.Ŗŗh+żī(žŽDņ]”LßĀ‹B’A©hhh ])#ŚŚŚ°²²Rt„.Š‘>œ;wfffJ‘Šimm„ó¢ĢRFüżż)Q¼ēwH%’ēr¹011‘ Ś”›üńGlŻŗŪ·o§½žģٳńć?öA佋¼ĻREE…\ļvĀĄĮĄĄ[¶l”;v,mŸ¼ŹxŖÓ1bÄ©ūHlҺн½½Ü8%:0|ųp¹ēmwĻ'; ¼½½įķķŻ„X\\\¤ś×Ūcdd„õė×ӎYZZJ9=ŹÄjeeÕaüA’ JEAA¢Cč, ööö¤·wĮf³ńŅK/įšįĆ2ś---8yņ$6lŲ p§‡gĻžŃŚz)S`Ö¬YˆŒŒ¤*Üøq#µĆ’ü"ßĀĀŃŃŃ …Š××§µŪøq#ÖÆ_äädäååQŹą&&&˜4i’”u“2#ļ÷EןAč÷ļß§vØ»C{_t@ $@PŹŹŹP__Æč0ŗ‡ĆQˆ"0”gŲŲŲ`źŌ©”ŻQ{ž>}ŠˆˆĢ›7O‘ży‹DeØR0lŲ0¹ś°°°ūŚē[čōGw¶Ć˜†††NÆgjjŚļU;zzzPUUEkk«ŌńRé4P;vluHEA&&&øpįB®Ń¾½ƒ@PH€@ (<OŃat ʇ0šš÷÷Gaa!­>@BB¬­­;,åķk$ĢĻӁ­”ĘĒŒū÷ļwzŽźÕ«ńŁgŸõCD’ƒĮ`ĄŠŠ„„„RĒåł¶ŗ‡¶¶6“µµa2~üxE‡@ ō $ @ ”'³c¦Œččč]£“ÉģPąĀ… pttTX[@KK ķqMMĶ~ŽDł9ž¼¢Cč6›-“hllTP4C‹¦¦&J`®©© ZZZhhh ¢Œ’ J@KK ŹŹŹF§ØØØ€ĆįŠö1YĢ9;;+T€ĻēÓ'ķ'ŗź––…B„wzč$&&āīŻ»˜¼÷Ž{ŠŌŌÄŅ„K1|ųphhh ¾¾8uźŅŅŅpļŽ=hhh¾’ž{¼’žūPWWĒĀ… 1jŌ(ˆD"”––"!!'OžDJJ RRRØ×mķ Ó¦M‹Å¦M› ÆÆ²²2\ŗt ēϟGQQīŽ½ ƒqćĘQ„÷/^„X,ĘĀ… ©kI:ĖĖĖįććųųų@OOĻž=CVVbbb€ččhx{{CUU€žóŸ’`Ń¢ETåĒß’Ó§OĆŚŚŸ}ö ŽŽŽhhh@xx8ĢĢĢąėėKÅń"φ¦¦&Śv"6J EC’”ߐ,”+++©E a`#‰påŹڱѣGĆŽŽ¾Ÿ#ź}•hmmŎ; ŖŖŠ˜˜™*@€łóēćźÕ«8ž<‚ƒƒ! ńÕW_A]]wļŽ…‹‹‹Ģ5ēϟˆˆœ;w+W®”wttÄŋ„Ś vļŽ $%%įīŻ»˜0aŽ~ūm¼żöŪŌū8sęŒĢ{ųžūļĮćń°eĖģŚµKfüšįĆXæ~=vģ؁ššpĄäɓ±~żzżōSŚń5kÖ@___Fb×®]055Å×_ .—‹cĒŽ!)) K—.ķ3{HyIyIžŽęžżūØ­­ķ—{C±XŒŖŖ*ćńćĒČŹŹBZZ‘œœŒŒŒ ŸO¹:hhh@MM jjjŠŠŠ€LLL`bb¢”0)..FJJ īßæO›Čģ źźź––†““4JŲŻŻNNN}ž%$$@čsAÆŁ›õ6#GŽ$æAFxx8­•Ū°aĆąīˆ^I‰żóäēēw;  ­­  c«A‰*¾……¼½½©ōŽ&Ē’1==½nÅÕU˜L&µp yį׿÷Ž{ØÆÆĒÆæžŠĖ—/ćņåĖ8~ü8V­ZÕė±ņx<“““Č﨣7‘8bˆÅbdffŖj‘H„āābäåå!//ÅÅÅT²Ŗ'°X,S;“666½^ÉBP’’’šĻ?’ ¬¬L”±ˆD"<|ų>„ŗŗ:\\\ąćć£ō-k„I„>§¼¼\)m ś|įBč_ą“­­­xšąīßæüü|ŚKO …(--Eii)āććĮ`0`aa'''ø»»÷źē› ų|>’’’§”¢™---HLLDRR0}śtR©Hč3H€@ ō9ŹŲ Ąd21bÄE‡AčE„B!"""hĒ\\\äī®+#L&666xšąŌńŚŚZTTTt«ÆÜÕÕzzzGQQ¬¬¬dĪ9wīP£G†®®."##QRRB;!=räĄĖĖė…c¢CKK Ožžųc8p@&ŻŽ%”—°±±éÖõ^‰€™„ĀĀBŌÖÖBWW·ĻļŻ›ˆÅb %%}²šļģž%%%())Att4FŽ www8;;+نP(ĝ;wK«Óōōō`ll cccB]]PUU…ŖŖ*Äb1š››ŃŅŅ‚ÖÖVźY]QQńĀ‚‚b±ŁŁŁČÉÉĮčŃ£1gĪ’„"ō:$ @ ś”ŗŗŗ^)Õģm,,,ČDnń÷ßK-~$ØŖŖ" @õ [[[™$Цņߝ$€††Ž}÷]|łå—šņņĀĖ/æ kkkčé锦¦QQQørå ōōōšņĖ/SÆŁ°aöģŁ///¬Zµ (//ǵk×pżśu˜ššŅ.Ź»ƒŠŠŠ0gĪĮŠŠćĒ‡››Ž’}?~kÖ¬ĮåĖ—įķķ 444 ??üńų|>Ž~ūmźz;wīD^^-ZźųgŸ}†ćĒćąĮƒX»v-&L˜@™˜˜@OOéééX¶l&Ož mmmu*&ČēóĮåreŽ›˜˜ōĖB<;;@›¦@ @ss32331iҤ>æwo ‹‘““ƒ7n ¤¤DŃįų_B¢  aaašōō„ÆÆļ€K¬ EņóóqéŅ„Jč±X,XZZR­!–––=Ņņ‰DxöģÕĀ’——ׄd„¤ēįƇšó󃏏TTČŅŠ;O@čS”± @UUŠƒŠ‹Ō××ćÖ­[“c~~~Š××ļēˆz޼Ņń“““n—w’ß’ż„B!~üńG|÷Żw2ćNNN8tčĢĢĢØc_}õ„B!~łåģŽ½[ę5“'Oʁz­µf×®]X“hnß¾Ū·oSĒÜÜÜąää„k×®aÓ¦M8}ś4NŸ>-õZ---|śé§Ų¼y3ąįÇسgŌÕÕńõ×_Kk``€Ļ>ū ļ¾ū.Žzė-$&&Rb‚L&?żōŽ|óMœ={gĻžŠę:ŃY 33­­­2Ē9N÷~ /ˆ$ ąčč‘H„{÷ī!##Cé“B”)))ˆ„Mę½(L&źźźPWW‡ŖŖ*„B!ZZZĄēói?]…Ļē#>>IIIšōō„Ļ€|¾ v$ś&iii]jėa2™°··‡››{UĄ“ÉdR”&L€X,Fqq1RSS»$HŲŚŚŠØØ(¤¦¦bžüłżö,! nH€@ ōB”•••ŠC†įƇĖ(‡6ׯ_§µ ŌÓӃ···"ź9¦¦¦000@UU•Ōń¢¢"<{ö¬[ĀQ***Ų¾};¶n݊ŒŒ ”””€ĻēĆŲŲƆ ƒƒƒƒĢkTUU±wļ^|ńÅHOOĒÓ§O!```'''ځ'N ±±Q®ĮźÕ«1mŚ4Œ9Rflüųń(((@NNŠŠŠP__/%†čććƒŌŌT"77UUUŠŅŅ‚™™F-egØ££ƒæ’žl6›vāüÖ[oaņäÉŚśqŪævåŹ•X°`rrrPRR‚–––. K¦¦¦Ņ§ūŁö6MMMT‚££#˜L&īŻ»§ō-¹¹¹ø|łr·’&&&°²²¢JµMLL`hhŲįŽ©X,–*×.//ĒÓ§OQTTŌå²ķÖÖV$$$ )) ¾¾¾šõõ%ŹīJB^^Μ9CŁ…v„&Mš—~sŃ`0°““„„„%ęĢ™ƒÜÜ\$&&"''§Ć„EEEŽ9ooo̜9“Ģc=‚$BŸQUUE«Ņ®HŌŌŌ`bb¢č0½HII īŻ»G;6gΜ;1g0pssĆĶ›7„Ž‹Åb¤¦¦bśōéŻ¾¶¦¦ę ÷škkkw¹ĮÉÉ©Ćq333©jƒēQUU…³³3œåž3räHŚ$B{,,,:¬śQQQéŠmĶfĆÓÓ³ĖŽ µµµ“zŚŚŚ°³³ėŅ5zĀƇ!‰ ¢¢‡‹E L*cK@mm-ĀĆƑžžŽå×°Łl8::R„ŚŻYø1 čééAOOO*9$Ąår‘——‡‡R¢—!ŌŌTĢ;·_’=zÄb1āāāŁ©±””!|}}įéé©P‡ ‹GGG8::¢““qqqHKK“æä=ęēēcŊD+€ŠmH€@ ō½QŅŁŪ >|ČYĘĘĘ">>^ŃaŠņĮōȆK,欕+“»'ÖÖÖ."īīīˆ‰‰‘y÷īŻĆ“iÓŒŪĮP!55•vņīęęÖ/ĻI+€­­-UĪģää„{÷ī!==]©’wļŽEDDD—’TTT(•~{{ū>ūYŖØØPɅ3f ¼¼©©©HMMķŌę¶²²ĒŽƒ³³3.\Hģū™ĘĘFœą…„’ŃŚŚŠk׮юyzzv*ą6Ppss£U›%I%";;›VÜŌŌ“SÆļĒ#>>ńńńPSS‡Ćƒƒŗ¼h/,,¤œXŚ—¤ŪŁŁQ-”‚"())Į©S§:­ÓÓӃʍ§s8ƒQ£FaŌØQČĻĻGLL =z$÷üźźjüöŪo˜9s&¼½½É÷NRVV†ß’555rϱ““Ē%K`jjŚ‘õGGGp8DGG#..Ž6i.‰pįĀ455ĮĒĒGQ*: pāÄ |śé§r{¶,,,š×_a޼yżYļóī»ļB[[ūöķSt(B—P¶V55µn ©”—ŲŲXډŸŗŗ:f̘”€ˆś„‡‡ĖTsäęę‚ĒćĮŅŅRA‘ŚC{ÜĆĆ£Ó×ęääP’ęółČŹŹBVV ,,,ąąąGGĒ™’Vsss)µz‹…Ń£G#99Y”I€ōōtœ={¶ĆŖ$ųųųĄĻĻO)’tŲŲŲĄĘʦS1C”Pˆˆˆšx<,[¶ŒX»õEEE8zōØ\bƒI“&aöģŁVDOUU³fĶ‚­­-žśė/Z'±XŒˆˆ444`öģŁ ˆ’0!O$Šė…³ņŠĄĢ̌ģĘ "jjjG;6}śō~Syī455įé鉞łGfģÖ­[X¹r„¢"“G’yuuõNÅb1•šó󃱱1rrr››‹––””” ¤¤7oޛͦ*ģģģ¤Źš%×hß ĮŁŁÉÉÉąr¹Ø©©é5;Ē®’ W»C‚ ,X0`Z¶ģķķńÆż ’üó"##ĮēóiĻĖČČ@CC^yå…“4 VŹŹŹ:Lhjjbɒ%Š”ģķķ±qćFœ9słłł“ēÄÅÅAMM Ó¦Mėēč‘!•HOOĒõė×QUUKKKxzzJ}9×××ćüłóxüų1˜L&°`Įhhh€Ļēć÷ßĒܹsqłņe444ąß’ž7ķ}233qóęM”––BCCŽŽŽšóó£Ę«««qžüy@SS666 ›ĶŠ6!ų2™LL˜0Aę<—.]Bqq1tttąååÕ”Rō™3gąé鉻wļ"'' v(žłēJœēīŻ»˜„=/??‡ĀźÕ«É<„Ø©©é0 ««‹5kÖ ŗē¢®®.Ö­[‡‹/"))‰öœ7n@SSS©D@ ŹÉI\¼x«V­Ā‚ 0lŲ0ÄÅÅįß’ž7<ˆ•+W¢ŖŖ ^^^ŠŅŅĀäɓ! ńūļæcĻž=HHH@cc#Ž|óMXXXĄŃŃQnyß„K—°téR̚5 666(,,ÄŽ½{ńśėÆcĻž=(++ƒ‡‡ĢĢĢ(æįß~ū _}õ”””M›6įĉX¼x1Ųl6~ūķ7TUUį„—^ж`Ÿ6m&Mš„Ń£GƒĖåbēĪXµjöļßO×ēŸŽššŲŚŚĀĆĆ\.[·nÅéÓ§±dÉœ?G“É„<<<––oooxzzĀÅÅEEEŲ³g-Z„Ƈ#//o¼ńŒįććcccģßæŪ·oGFFtuuqāÄ ¼õÖ[X¹r%tuu‘’’BŻwÖ¬Y8{ö,Nœ8‹xyy!99~~~?~<œĮår±{÷n¬X±€P(„õå[[[‹S§NįĖ/æDZZŚ€-łLTVV*:)Œ‡D)¦žžÖ­[§č0h¹|ł2zåZ\.“cƒņ ÆÆWWW+DIҘT(ŽG”  @渚š¦L™Ņéė%eü†††R»ą, ØØØ ……… …xüų1?~L½F[[›¶=¤}K@zzzæ%ĀĀĀpēιćĘĘʆ¹¹yæÄÓW˜˜˜`Ɔ  Cbb"ķ9%%%8xš ^żu’荍8räˆ\·¬]»¶ß«]ś &“‰… BWWŃŃѓ焅…AGGgĄ»ćś–Į?+ž’üńĒŲŗu+>śč#źŲ޽{‹•+WāčŃ£ŠÕÕEbb"5¬­­Åˆ#MķĘņÉ'Ųøq£Üū|÷ŻwŲøq#¾żö[źŲ„K—°bÅ ģܹžł'u‰ÅMCCFŒČČHųųųąĄˆŽŽ†ÆÆ/€6õOkkkźz»vķĀŗuėšć?RĒbcc1}śtģܹSī—‹§§'.^¼Hķ¦oŻŗū÷ļĒ’%K“õāeddPĪ•+Wbłņå8tču¤¤$L˜0{öģ477cß¾}X¼x1€¶^F\øp«WÆĘ… šÅ_ą½÷Ž£®annŽŠŠP̚5 @[¹dzz:÷ņåĖńŹ+ÆąĄŌkāććįććƒ]»v”  łłł(--„zįźźŠÜÜ\Ś]B’”Œ®}‚IųYJÄŌ+S§N„µ {šąrrrõ{WV„B!®\¹B;&ŁX茎ŹųŪcll cccL™2ĶĶĶxōčrrr““Cõ ;88Čm{’“õKK@LLL‡ ggg,Y²„²2訪ŖbįĀ…°±±Ahh(­öĮ³gĻpōčQ¼öŚk¤5 ˆD"œ8q‚Ŗzy+++¼śź«ƒŽž‘Į``śōéPSSCDD„ĢøX,Ę_żCCĆNEI C—!“033Ć­[·ąåå;;;XXXąĆ?¤Ęsssįźź*cżbccƒüü|* Ųį}ņņņdڦOŸŽ£GB(‚ĖåbҤIR·ŚŚŚššš@AAFŒAķĘKŠŌŌ”śnn.¤¼PMMM!PTT„Ń£GÓĘ6wī\©ÉĮōéÓBżŹ”)R“‚ÜÜ\¬X±Bź>`2™Ō®ƒĮĄÜ¹s©q555ųśśR»tgΜAYYQSSƒęęfÄĒĒK-Ź|||¤¹¹¹X·nŌ}!‰ĄårajjŠęęfüńĒ˜0a,--”§§GY#Kmm­R¹°ŁģA?!J$%%ъĮ2™L©gŃ`ÄČČcƌ”µV»rå 8ΐØxQ&āāāh$***šööīōõµµµ())Šy =pvv†³³3Äb1x<²³³;lźĻ–€””DEEÉŸ8q¢Ģœd°ąźź ]]]?~ĶĶĶ2ćOž<ĮńćDZfĶ„ż{mhh‹ÅRŗ*wB+ IDATDō7äöƛšš‰@{|||Ąēói+N:…wŽyGé- ŠA9Ÿ>]„Į`tŲwÜ~ģóĻ?ĒęĶ›ńÆż <µµµ°³³Ć޽{1wī\ŌÖÖ"**JfrÅb±¤؝=°+++„Ty¶Ež²eĖ“=XéŖŚŚŚØ©©AMM “““d¾Ū[ÕÖÖā»ļ¾“Ś”Śvś;śB}ŽfHWWuuurß[mm-~žłgœ8qBźø««+X,ŌÕÕe²ų:::ŌNš¶mŪ°gĻøøø@[[ZZZ2=­t÷żį‡pōčQ©ć`2™6lBBBpčŠ!lŪ¶ %%%ŠŅŅB`` Ž9Bv F^‰ž¢("S„ĪiiiĮ7hĒ&Nœ8$tfΜ‰¬¬,™]ĘŹŹJÄĘĘAØ~¤ŗŗ·nŻ¢óööī’µ_vv6Äb1ŌÕÕ„*ž^ƒ+++XYYux‹Å˜1c””Ō§-YYY •;?›1cüżżū䎏‚ ^{ķ5=zTjž%!??gΜApp°R&BqóęM,_¾\Ń”Päåå!66–vLOOoČ%$LŸ>MMMˆ—{öģΟ?+V( 2‚²3 “fffØŖŖ‚P(”é-//ŸĻ§DAž>}Š}ūöQ;ŻÕÕÕŲæ?6mŚ„¹sēĀĄĄ+W®Ä޽{„®SRRmmķ.‹œÉŲw466bŪ¶mŲ²e ōōōhķdĄf³”ÆÆĘĘFˆD"©jźźj*a``€Æ¾śJĘś0//ÆC_ģēļ[__ßį$ÅĄĄļ½÷„E !??HMMEss3„J`bb@€ķŪ·ćęĶ›R“mŪ¶Q=ņīūÉ'ŸP-Ļß·¢¢ćĒĒŖU«“•cfffbĮ‚8{ö,éU0Źä Ą`0`hhØč0½Dtt4ķ„ZSSsŠ/*$Į×חvēēÖ­[puu%V˜żÄ•+Whįõõõ1uźŌ.]CŅ 0jŌØ~ѲpvvFRRŠŠŠP]]-³iŃS*++qöģY¹Õ`]ŅI XXXąõ×_ĒĮƒiŸ[™™™ˆ‹‹£Z?•““48::ĀÅÅEŃ” ®®§OŸ¦ż\ijjbķŚµ½žYH¢¦¦<KOO‡ĆĀ›„¾…Łł)Ź‹»»;D"öģŁ#µH …Ų¹s'tuu1fĢĄš5kpęĢź}}}xyyQ»–vvvˆ‰‰‘śBommŤI“:Tµ};;;™žœ;wīąūᅦ¦¦&¬­­qūömJ‰h[4'&&ĀÖÖźźźR÷¬««“Ź~ŚŁŁįśõėR÷ČĶĶ…½½=źėėåĘ&õsŠŒŒÄŲ±c;|/Ļ߇ĒćĆį ¢¢‚:Ö¾’Ļē#66...ØÆÆŸĻ—Ś‹Åˆ‹‹ė0©bgg‡ČČH©cłłłąp8”-؜9sØ/‹˜˜˜ ŖŖJīu }OSS“Ōg[Ń*m¹%įÅØ¬¬”+,Š„ŽėĮ‚ÄFīyΜ9#SmEč}‘••E;6wīÜ.yÜ·¶¶R¢~ż„ēĄįp؍ĢĢĢ^½¶P(ę3ghKą6M‹”’`dd„µk׏-«ŒŒ”iCU&.^¼ØÕ}aaa“ó[ƒ%K– łŠ?&“‰eĖ–Éż9\½zU铚Šg@ĻŽĶĢĢšÓO?aćʍ8tčĮ`0žžŽŹŹJ;v ŚŚŚ€ 6`Ó¦Møté† †ĘĘF\½zėׯ¬Zµ ?żōœįåå $%%ĮĄĄ3gΤµ¢¢cĖ–-˜7oRRR`gg‡ŚŚZDFFāwށ††‚ƒƒ±wļ^8;;cüųń …ø{÷.ģģģ0{ölØ©©aćʍX¼x1fĻž ---ÜŗuKjĒž£>ĀĢ™3‘œœ DGGcķŚµīedd`āĉpuu„ŹŖ.^¼(÷ü>ųžžžHOOĒčŃ£!‹+VĄŅŅ<ųąƒpīÜ9hjj">>, ‹/†––üżż„Y³fA,#!!UUUö™m޼Ó¦MCJJ œœœ  U«VĮĢĢ PQQ³³3ʍ dff"?? ,čŅļ‰Š7(Ćd”=t %ĀĄ$,,ŒVhĖŌŌćʍS@DŠCEEsēĪÅļæ’.3ĘćńpķŚµNõkݧ““aaa“c£Fź²/łćĒŃŚŚJY÷L&NNNTK@o.ŹÆ^½Š¢¢"Ś1www̘1£×ī5033Ć+Ƽ‚ß’]ę&‰pśōilÜøQ)™ĶĶĶ8{ö,ÖÆ_ư¶…ĒÓź mZV]ż{쨩©!88æüņ‹Ģš„„„įįį¤-€ ŀNĄkƽ†yóęįĪ;ąr¹hiiĮźÕ«1sęL©Ņ ×_^^^HMM„Tå7lŲ@} 55QQQČĻĻŸĻG`` ‚‚‚ ””>ŸNK‹gΜ‰ģģlÄÅÅįéÓ§PSSĆ|@łVāžżūˆŒŒ—ĖŸĻGpp0ęĢ™CõÖļܹHJJ‹ÅĀŪoæ Ōõ„ ››‹›7o¢¤¤L&ėׯ‡ŸŸ_‡±}ūķ·PWWGNNƌƒü‘zx.Z“H¦ĮĶĶ >Dtt4JJJĄ`0°jÕ*©žSI²äŹ•+ØØØĄ“iÓ°hŃ"źĖ,,, W®\A^^X,‚‚‚ąąą@Ł\-]ŗTfēŲÓÓ¹¹¹Ō}™L&Ö¬YC•ūjkk###įįį(,,Dss3|}}1{öl²čS0Ź”`±XƒÖ"hØńųńc¹-DAAAR­SC{{{Œ=š¶üóĪ;°±±é·Éqyy9Š‹‹įęęÖå×DDD@EE &oŸ'Nœ ŻPUU•iÓėI+€••Uæ.%-<Æ×ZrrräVźŲŁŁańāÅJŁūŽ_ŲŲŲ`ńāÅR©jjjpžüy„meĢĻĻĒķŪ·„Ŗū ”PˆĖ—/ӎYZZ"  Ÿ#RnĢĢĢ0gĪ\ŗtIf,==5j”"#(#> “}č-ZŌéynnnNR455å~«©©į7ŽčR<ÖÖÖ üčččČō»?ææ‡=®fff/œŃc±X˜7oķ{”ø<‰‰‰Œ&],’ŠŠēŃŌŌ¤DŪccc˜4iķėLMM;|jjjXøpa‡qś‘HŌa;J£ÆÆ?¤'ƒ‘H$w×u̘1°³³ėēˆ”‡  ØØH¦ßX,ćܹsxēw```ŠēqTVV"55L&l6 ŠŅŅ‚žž¢££! „¬ą²²²šóĻ?cĖ–-2UaiiiųēŸąķķ'Ož`ß¾}ųüóĻ! akk‹ņņrJE?++ [¶lĮʍūm1péŅ%©vøöĢ™3§Ė$b±˜Jō·µ£¤% ””]r1čˆÖÖV\¾|™¶ĶĶfcéŅ„C2Q÷<®®®ČĻĻGbb¢Ģ؃­“ĒQQQ”³VŅ‘ūƲeĖśEGc 1aĀdffR­Fķ ‡Ć!?7€® @č:×®]ėõI’»»;RRRzõš„‹²Ye‘ ĮDBBJKKeŽ«ØØ`Ö¬Y ˆHy`³Łxé„—hXMMMųć?ŠŌŌŌ/±Ø©©įüłó ƍ7š×_įŸžŖŖ*ģģģ¤*9lmmįģģ www·‡£Gbɒ%ø~ż:&Nœˆ1cĘ`̘1øté¾żö[©Eˆ­­-ƌÓ§Vwķ¹uė–Üļ’ė°Łģ>o©©©2‚µ »TŲIRD__Ÿr1źOœ“iHōDP·¢¢BīBĶßß§Ū×ŒØØØą„—^¢ŽģČrR‘,Z“, eeeøvķZæŻ7>>žVdR__æÓöהޑ‘‘\½[·n)Ն Aq$@čč,…ŽŽqDFF¢±±QęøŽŽŽŅŚj)‚éÓ§Ė]låēēćŌ©S}:éc±XPSS£|źõōō ££.—‹¢¢"“¶¶Ź”ŸJü¼Ūūz3 “““`ĒŽ”č!—ĖÅÕ«WńōéS¬\¹R¦5DEEĒŽė³÷“õ»Ÿ;w޶Ü]EEĮĮĮŠŻŹ»&…‰šŁŚŚR.=©§u£066& 59tō³¹}ū¶Ņ¹ >œ²¼LHH >»} ŸĻĒ;whĒ©Ö"‚|üżżimĄ+++å -†d–L zŒH$¢]¬) R0š)++£ķ€Y³fA]]½Ÿ#R^ –.]ŠŸž™6—••…K—.aĮ‚}¢“agg'W›AāM]]]ØØ(mÕ ›7oŠę#9nhhˆ/æüRźõ‡ŠÖo“ķräˆĢXrr2¦NJ»‹«($‰Ęü øpįBŸ¹Hģ¤é˜6mYø¾^^^ˆ‰‰‘q’*//G^^i×ā ¹$Ą„K—J+$ō"¢>qóęMÄÄÄPI€ŚŚZ,Y²Ēļ°÷ļ—_~ĮōéÓ»œųõ×_1gΜ^M¼ńĘX¶lfΜ  ķa¼{÷n˜˜˜ ų$@BB¾’ž{œ:uŖWÆ»mŪ6XYYaķŚµ½z݁„2µ0™Ģ>Ż” ō=™™™“‹Dƒyóę‘I $~äGŽ”ÕHIIASSV¬XAŪ“ÜŹĖĖŪ+ןMz*„ūąĮœ>}Z®ž‚››õ=ł¢HŹ©ķķķŗ[nccC¹dff¾P5@YY²²²d޳X,bŪÖEģģģ0jŌ(™j @€Ū·o#00PA‘Ńc``€   „††āĮƒHNN†§§gÆß§°°•••2Ē 1f̘^æß`FUUS¦LĮõė×eĘRSSI`ˆ3ä’0~üxZÆÖ¾¢µµQQQ“'=A^ECOHHHa2™“ćHGF=įžżūJ©č۟(“5 ›Ķ&‹ÄŒP(”»ģęęFõč±¶¶Fpp0žüóOŚJŠģģl:t«WÆīUoz‹„p”Ų¦¦&”””ōų: ørå ķ.7ŠVĀædɒn=g•ąRT+€„ž“ÄĘĘŅž|\]]ūŖr°0uźTŚ–ŠÄÄDųūūKif(žžžČĶĶEzz:®\¹kkė^hMMM„=>eŹb5Ł &L˜€›7oŹT4edd`޼yD_a3ą“ū÷ļĒĮƒĮćń §§gggģŲ±ƒR¾ķgΜĮ×_‚‚hjjbŌØQųģ³ĻąććƒĘĘFŒ;QQQRe|6lĄ˜1c°iÓ&©k-\øz łśśBEE”””puuķ0†}ūö!77, aaahll„››¾żö[ŹN(88X»v-š››±uėV\¾|åååŠÕՅvļŽMõ+9ræüņ x<š››įģģŒ?üóēĻĒŽ;pčŠ!šxÄĒĒćŲ±c(**Ā«Æ¾ øsē^{ķ5¼śź«øvķnß¾9sę`ٲeČĻĻDzeĖ‚įƇcķŚµ ”<ø ©~¢>śqqqŲæ?āāāšėÆæ¢²²«V­Š&x‰äädüöŪoøzõ*<<<°dɹĀqæžś+~ųįü÷æ’ÅĶ›7‰aƆa޼yąół(((ĄĀ… ˆ+W®ąŚµkxõÕW±iÓ&ŹN‡ĒćįĖ/æÄŖU«‰oæż”””ųį‡Ąb±‚wŽyśśś Į?żōöļߏ’ūæ’Ɲ;w UUU̟?b±Ė–-ƒĮĄöķŪ@~~>^żuųųų $$ DHHVÆ^Żéļv°ŃŲŲH«­(ˆĄĄ„¾¾ž’±węaQ•ļ’ Ė";Ⱦˆ+¢‚²(*–kę–e™i.¹k„¹”k¦¹d}ŹĢÜZ¬\²RsM\QSTPDdß×a~šć|g@@”AĪėŗ¼.yę,Ϝ™9ēyŽĻ}æļJCĖ»uė& <5 S§N 2¤ŅÉjrr2_żuół_T²³³Ł¼ys•€³³3£G~ŖTŠŠT;;»ēRڰ2rss”^SS“#FTŪlóŹ•+*}ZµjE³fĶźŗ«/<Īū£®õÜõōōR©ŗvķŚ(Ó}\]]155UJ½¼wļ©©©˜››×SĻ*ĒÕÕ___Ī;lj'hŃ¢E|v±±±*Ūŗ'U}Ó¢E ”īqqqq*ē"ƒ-xyyqłņeʍGVVłłłÄÄÄTjäS››|šR{“&M011ĮŅŅ’÷Ž{““4 …0­Ź‚ŸßPõõõ)))”““TéūšįCžśė/G՜œJKKÉÉÉ!)) ggg„sŌŌW ##;;;…6'''är9ÉÉÉXXX(ŌLÖÖÖF*•Ŗt¬†rwé ń¢!$ųąĮƒ*.ŽŽŽĀ9Aõõz’ĆƇ åįƇ ķ^ĪĪĪųųųšę›oD=Ō®tO}£N"€®®®˜3Ų@ILL¬4“OŸ>b¹±ZR÷ÓO?Uzž÷ßINNfŲ°au¶’»wļ^^zé%ČĪĪĘŠŠÜÜ\LLLHLLÄČČHA°»wļĖ—/gÖ¬Y"@NNĖ—/gśōéXYYÕIß*())!$$„ŠŠŠJó’|}}éßæ’S{dddž)iii8p€`aa»»;8::>Ó{ŲÓ ™™™B Į£V«ŅĮ½{÷čÓ§×®]CWW===Š‹‹ÉĖĖCCCƒwß}—oæż¶QŻĒ% ķŪ·'$$DéµČČHµ]`xłå—‰‹‹#99™;w2eŹ”§.ݧԦ­­-V›xJ444šššP*»[RRBBBB(E^ōØjŊlŚ“‰>ų (--eȐ!Uīgkk«°źü(æžś+S¦LažüłōčŃ}}}š5k&Ō:®ŒŖµ„ŗA¹\ŽL&ĆŽŽ^i‚žŻwß”««‹L&S˜˜×™LViæ*®AMJ2™¬ŹÕ¢²²2•Ē”H$ ĘWµ5i²¶¶VH¾żö[įZŹår¢¢¢pppąĘÕĪ›l,T–ęQˆį‚ ¹\Īß’­ņ>źģģ,:B?%ŽŽŽŒ7Ž~ųAH!{œū÷ļóõ×_ÓµkWzōčQ'fQ×®]ćęĶ›ģßæŸAƒqśōiš5k†—.]āóĻ?ī„7nÜ@*•’‘‘AJJŠąė“––F\\±±±u*ÄÄİ’ž*o% ={ö¬ŌϦ¦˜˜˜°`Įbcc‰ŽŽ&&&†ģģlRRRHIIįōéÓčééįāā‚««+-[¶¬ÓȦ¼¼<¶lŁRkŹ«&ØśzyyUkĢ2mŚ4āćć9pąĮĮĮ‚ø÷ąĮ–-[Ę7ß|C×®]…TĘĘBūöķU–\ŒŠŠŖ•Q©Øś$ «µč„„„ŰaĆŲ°aéééX»v-7n$44TI(,,äʍŅ“iSÜÜÜTN KJJHNNęžżūhjjŅ¢E /™LĘŻ»w……£GÉČČ 33Sˆhøwļśśś˜˜˜póęMŅÓÓOßŃ IDATńńńrss¹uėÅÅÅćźźZė333ģģģøwļžBūƇÉĖĖ«q*jFFF„”õu‰µµ5½zõāŠ”C\¼xww÷Z}Æ ņļ–Ŗ(V‘šćāā‚D"QÆĘÅÅՙŠ)ҰhŠńV†††„†† įȉ‰‰,_¾™LVėI™””!aaa‚É_ZZŸ|ņ PžšŠŃŃ”E‹¬]»–ū÷ļ“——ǦM›Ŗ «oŚ“)œ8q‚ŒŒŒgRN.00„K—Eqq1ééé¬^½šæžś 8pą{÷ī%++‹ÜÜ\žüóON:„0Š300ąüłó¤¤¤Ø óöõõe͚5DEE‘——G||<Ÿ}ömŪ¶­µiW@@›6māģŁ³žžĪڵkÉĪĪĘÓӓN:qķŚ5¶nŻJJJ ™™™„„„p芔å žžNDDČd2łņĖ/¹té………äääšķ·ß²~żzLLLHKKcΜ9,[¶ 333VÆ^ĶņåĖVDDD””¤V.łĻƒĀĀB•eČź QhxT”PUE§N°¶¶~Ī=zqiҤ £F"88øŹÉJvv6»wļfŪ¶mÄĒĒל|ZZZ$$$ąääÄõė×iŻŗ5’ż÷žžžddd(„aUF~~žSXåēēsģŲ1¾ųā‹' L™2å¹ø÷7k֌ĄĄ@ʏĻܹs:t(­[·F*•RVVFbb"!!!¬_æžÕ«WóēŸ]#3ÖŗŹŹŹ”\ģŒŒŒŖFR1‰W…T*å‹/¾PžŹŹŹ˜3g¦¦¦“k×Zµj…¹¹9«WÆVŲ’ūļæĒŅŅ{{{|||čŲ±#fff¼śź«BLzz:...*ĖDżõ× QGŻ»wgĀ„ xyyįīīN—.](++£°°1cĘ`jjŠ——>>>ø»»cmmĶ?žX­ė  U!ļr¹¼ŅÉqu022"00°Z’ŗuėĘK/½¤ōļI‘žžžĀDż?žØõ8čńÅ  D nŠ××ĒĀĀB©=!!”Ń.d5vt$ĄĀ… 5jM›6E[[===fΜɾ}ūHMMUłeÓ§OēĀ… ˜››£©©‰––cƌĮĘʆąččȦM›?~<¶¶¶hii1`Ą%UūQtttųų揙ūģ3” ”»’Oœ8‘ 60zōh¶nŻŖpĪU«V1vģX|||ČĶĶESS“Ī;óÓO?Õś}LŸ>[·nŃæA|qss㧟~ĀĄĄ€–-[ņĶ7ß°dÉŽ}÷]ŹŹŹ077gśōé 0 Śēńóó£OŸ>ųųųPZZJtt4}ō÷ļß§OŸ>¤¦¦å9“;wīDGG‡)S¦`gg'TœčׯL™2…0iŅ$Žxć ĮŲčĢ™3µ¾ uŠQhˆœššš•*Ļ%%%>Uø²²2²²²044Tųģ ŠŠŠØu¾AA„„„ŖD]||ĶĮƒ•ڇ RķtČK—.Ń·o_RRRhŚ“)ŲŚŚbgg‡««+ƾśŖB}||°°°`’žż Ē)..ĘŽŽžW_}• 6°xńbV®\ÉƇ•" FŽə3gøsē)))4k֌M›6)¤,]ŗ”Ļ>ūL·]\\022āŅ„K ‘3VVV Kmmķ§444TŠ;µł<ėr’†ˆ:EˆQ U€……E"5G__ŸįÇӹsgöīŻ«Ņ{åQāććŁ¾};zzz“nŻ///•āA^^žJŖg…“““Ru˜Æ¾śŖZ†¦¦&~~~ōģŁSmĶĒ$ ¶¶¶ŲŚŚrėÖ-233ńššx®Pé÷£&“‡Ž;Ėńćlj%!!ÄÄD¢££Ł½{7 ,`åŹ•|ųį‡Ü½{—   „ÉaÅy+"±··W™j°dÉ„\ūźŅ©S' °°ääd<==•ś¤””A³fĶ„>ÕMMMøuė–B{zz:„„„jūż¬ U«V“k×ŽĖ—/sąĄœœœ°““¬Ö¾„„„*MKÕ±<āÓҬY3¼½½ėe彲뙒’"Šõ¾£ˆTŹēŸ^ß]Q+@¬ŲšāŠ·o_±nńsÄÉɉɓ'sęĢNœ8ńDߚ‚‚!,żI^0žžžĻ¬Ü[ttt„%«#ø¹¹1`ĄLMMėŗkĻ„üü|a2[UjF]TP…*ēv]]Ż/nØt‘ĻĖĖcšąĮ̟?Ÿ1cĘ`ffFFF+W®dåŹ•*Õ³gO Ü ø² Ž‹‹ ...5źcO¼+R—¦NŹŌ©SUīó4ĻE+++% ¬¬Œōōō:+ßł,8p wļŽ%33“Ż»w3qāÄjŻĖÓŅŅT Ā/¢0xš`\/ē®,MZÕo[äÅGDDDj…L&«V˜ķóB^ <<<ĚŠõ€¦¦&“k׎'NQ-ó¹Ŗ< iŅ$LLLųōÓOŲ³g»wļ*°Ó³gO¦N*|/Īž=ĖĀ… Łøq£P‰āyabb¢²B@e×_äŦAW©?žd²õ¼E€†¦¦ęsĻ‘QÄČȈAƒńžūļÓµk×:õ|©oyūķ·™4iRƒbbb€ņ•mUŸĖ³ņņņTšÖĀYOOŻ»wsźŌ©J·©x®T¤,Z[[SRR‚³³³ŅæC‡qųšalllHLLT¹š¼bÅ ,--‘ĖåĀsB•` ŖLéć é’Ŗśō믿>•9š‹°Rėčč(TnśēŸŖeźYTT¤²żY ˆUQTTÄĻ?’¬Š¶eĖ"""Ų³gŠVPPĄ–-[„>n޼™!C†››KŸ>}čßæ?VVV,^¼˜7ß|SŲ/%%…cĒŽ‘››ū|ŽŠ#Tž?γØZ&¢žˆ"€ˆˆH­E‘ŗ¦K—./dųgCÄČȈ~żśńį‡Ņ­[·zŒ×‰WWWŽ}÷]ʏß`£Ld2™&®*ąY Pž—®Ššü^ éŅ„ [·nU9Q¾}ū6kÖ¬ĮČȈvķŚå»vķRʳOHH`īܹDEEŠ­[7’’’ųķ·ß¶ĖĖĖcĻž=tčŠ iÖ¬;wīT5¢¢¢Ų½{wµŽGĒŽٶm›RūåĖ—łä“OHLL¬ÖqTQŁõ¬ģś«+½zõĀĪι\Ī®]»T HRŁ$“>žėAAADDD«ćqqq$''3nÜ8sŪ°°0ŠŠŠ `ėÖ­Œ1‚½{÷²téR-ZÄĻ?’ĢĀ… Ł»wÆŚ¤OŖŗ¦•‰0"/6¢P ņóó«„?Jbb"¦¦¦*tU±’~LMMyšąAmŗųĀ…©©i•yėÖ­ĆŚŚ‰DBZZZœ×ÕÕU”DOzzśͲ+¢ R—čėė ƒ)õA__ŸŽ½{3wī\Žzė-Z·nżT~ wļŽeåŹ•,Z“ˆėׯsņäIÖ®]Ėʍ‰ŠŠā³Ļ>céŅ„|’ż÷,]ŗ”āāb6lŲĄŖU« ­öy*ź£Ļœ9“wŽy繇ŻÖ5wīÜ”°°‰D¢$d<.Œ1¢Ī#*»ß×Ō ų»ļ¾CWWĢĶĶiŻŗ5;vÄŁŁnŻŗÅ–-[£ŻE‹QVV†‹‹ ķŪ·§oß¾tėÖ 777š6mŹōéӁņī   Fމ‡‡={ö$((¢££Yŗt©Š‡÷ߟ“'Oāąą@=šóó£cĒŽ“oß¾ZļaÕŖUܽ{;;;:vģHß¾}ńóó£S§NxxxšöŪo×čš<о¾¾J†6IÓŌŌd芔hkk“••Åß’]åö•½æśJKK… ’łóē133cŌØQÜæ_˜„††¢ÆÆOēĪņČUÅļæ’>iiij#¤Š"€H¢'@5ųēŸxēwj4A744dΜ9øŗŗVk{777ęĢ™óT¹d/2™L„pr¹œ%K–šé§ŸņŚkÆ=±VruÉĢĢTČs_³f 7nÜ`×®]urü u$ÉS—Ż©_‚ƒƒÕf$¢Œ––xxx››Ė’żGdd$÷ļ߯– _YYYXYY1räH–/_NPPmŪ¶eÓ¦Mø»»Ó±cGJJJŠÖÖĘŌŌ”#GŽpżśu ĄöķŪ ØÖy>üšĆ×)Wg¢££ņ°÷G]ÅU žžžu~žŗš¤µnݚ˜˜8@xx8”••allŒ««+Ƽņ VVVĀöĪĪĪĀ*}dd$………4mŚ”·Žz‹×^{M!“““8|ų0ūöķ欕+mĀ„ *#G:uź$T3ˆŠŠ¢øø˜–-[2eŹ^}õÕ§ŗU<˾6ÄIš……ŻŗućŲ±cüūļætéŅ[[[•ŪV PéHķŪ·ĒÄÄ„ŠŠPzöģɹsēšńń”eĖ–˜˜˜pīÜ9 ÅĻĻO{Œ;–É“'Š»»;öööŲŁŁįįįAŸ>}ž™AjMQõ›Ó' ^(,,äŅ„KĀjm‡”’+W®¶¶6666x{{ +.\ yóęäęęråŹ¤R)¾¾¾˜˜˜ —Ė9~ü8‘‘‘sģŲ1 ÜV"‘PRRĀ™3gHIIA__Ÿ6mŚeŠ šööŹ£\ŗt [[[ŠŠŠø|ł2ŚŚŚųųų`ff”;Āz{{ "@HH>>>ÄĘĘrėÖ-ŒŒŒšóóSxøČårĀĆƅ|+œY·n&LP2*,,äōéÓōčуK—.q÷ī]¬¬¬čڵ«ĀŹNnn.”””äęębjjJūöķ…~&&&’œœŒ››ēϟ'''‡īŻ»cbbBtt4˜šš¤p£IMMåܹsbhhˆŸŸŸ‚ą‘ŸŸĻ©S§ČĖĖ£yóęU–¹}ū6W®\!##CCC"""čÖ­ŚŚŚdddpęĢ °°° C‡‚{u\\ŁŁŁ jAAgΜ!((Hįddd×699™cĒŽall,Ō”OKKćüłóäēēcmmMŪ¶mŸč’ż¢”Nƒ©TśB ųÖÖÖx{{×w7DŖIÓ¦M錵+]»våāŋüłēŸ5ŚßŲŲXøĒI؍ųŖÆÆĻ°aĆ6lXµ¶722bģŲ±OÜN[[»ŚĪėßßĒńóóž?{öģJ÷·““dņäÉO>žS§Nƒ››aaaÕ*æż¬QUQE¬ĘÓ8iŠ"@||<”””ąīīNii)aaaLŸ>Ļ?’¹\ΰaĆ8tč-[¶DWW—ėׯcooĻ©S§000ą½÷Ž&°-Z“ąĪ;dggsņäIZ·nĶ„ ČĻĻ';;[p§½yó&©©©ųūū£„„…»»;YYYDDD°dɦNŠ\.'88˜‹/ұcGf̘T*%::777āććIOOēčŃ£‚ŖÜ»woį†×§O¹uėŽŽŽ\æ~}}}.^¼ˆ™™%%%ōźÕ‹›7oāå唇Š?xš€×_]eĶś””‚ƒƒ &!!sssžūļ?Z¶lÉ?’üƒT*åß’„Gø»»ckkKrr2QQQģŚµ‹ž={²’~V¬X¾¾>ęęęܹs‡üü|ʎĖöķŪqvvꌵkŲŪŪ†––»wļęķ·ßĘŁŁKKKīܹCFF’ż7¾¾¾Āē(‘Hšōō䎽{U*¦ū÷ļgķŚµ@¹c«––įįįDFF2`ĄŚµkG³fĶHJJāÖ­[:tooo~śé'ĀĆĆŁ»wÆp¬ū÷ļLnn®ĀĶłęĶ›L˜0ōōtJJJ˜0a;vdĒŽ“÷ ī<|ųPHy«šxžØWøö‹Ī‹®}ćĘ bccxé„—Ŗ¼ĒW&&Õ×ū bžüłdggsłņe–/_”ūÖüż÷ßDFF’““#¤°•••BĖ–-SÄ Īž=‹ŸŸ!!!*«bbcc±³³ŹCŪ·oĻĻ?’Ģ{ļ½”’xćāāŠŃŃA&“1hŠ ¾žśk6nÜHll,äwŽnf?żōM›6åāÅ‹ĀķŠ”CLž<¹ŅڱÄĘĘ¢§§‡\.ēµ×^ćĖ/æTr!­ yóę9r‰DB^^;węēŸfśōé\¹r…ššp’’’„pø 1dšąĮU*®=zōą£>Ź=z”~żś±aƆ ¦M›„ķ—/_Ά „U˜ŌŌTNŸ>­­-„„„ųśśrōčQāāāŠŅŅ"%%EŗtéĀ“iÓXµj“&MŹ#ʎĖ’%K8pąkÖ¬ĮŃёcĒŽ!•J‘Ėå¼ūī»ü÷ß*ū?uźTF…±±1§NV¾śź+&OžĢŠ+„mgΜÉęĶ›k¼ŹŲ¹sgbcc™?¾R:Ąš5kXŗt)3fĢŚFŒĮ¦M›Xæ~}ĪÓPQ·ņ€¢ŠpiŻŗ5NNNõŻ ‘ēĄ˜1c„ėG³«bÖ¬YϬO ŠTlllž»•—Ļ«*jO¤vØŗ¦ŖVoÕ¹\ĪŃ£GprrRˆ`QEe“Šś S "//7"“É„¼___>żōSŽ=Š”””0¶ŌŠŠ`Š AĢ™3‡?žXįXJF’õ…ŖQhœ4č»wtt4ƒVPżżż™3g„„„ÄÄÄŠ”CA€ņ°²Ž½{ 5<†.ü455ńó󫲄 Ą{ļ½Ē„ (,,¤°°ĢĢLnŻŗU„ƒė°aƄz‰D‚æææB¹‘ĒyóĶ7…g}}}¼½½IHHŹ2™LįYZZJQQэzŽzė-į’͚5ĆĆĆC8īš5kŠŅŅ";;›¢¢"²³³IHHPx_B^—––­ZµĀČČHxpYXX`nnNff&< ))Ia°'‘H0`€0°»vķšĀē(‘Hxć7Ų²eK•ļćq~ųį¤R)YYY‘••Errr‡“I„R’’’HOOjŲ>īHü¢£nłc¢Š0ŃÖÖęå—_®ļnˆˆØ5©äēē?w*æĒŖŪ³ąEąEX©½|ł²PŃį„—^zāöź ЦM,,,ųņĖ/ńšš|8|||(--eżśõ(6AAA¬^½šĀĀBZµj%˜}oŚ“ ėå½<ŽŖļ—č©Ō8iŠ"@JJŠR9‰D"„ķäääØ4Ś322R0ł{ÜĶSCCć‰FG·oßfäȑ\æ~cccōõõŸhN÷xˆž“ĪSUæ 100ĄÕՕ-Z ””Į­[·šōōÄĒǧŹ~Ø:nÅDłŸžaҤI¤¦¦bllŒžžzzz4kÖLŲžq•ZCCCi€P!^dff(UPńŁ„§§+½^›2aūöķćż÷ß'''tuuŃŅŅJ Õ .düųń|ńÅčééaooO›6mX²d -Z“ØÓs©+źājTC%  ĪL=ED^D ˆĄĪĪ®^Ø|ŚĆŌÕUד!MŅd2™Pe©uėÖĀJxUTf¦˜““S§}«.‰„—_~™żū÷óŹ+ÆķFFFtīܙ˜˜z÷ī­°ĻÖ­[™7o;wī$11‘‚‚tuuńõõe’žżĀuJ„˜˜˜ŌK~~~¾Ź…1є·qŅ GΆ††*ĆZöķŪG§NŠ××Wy3-,,TYĘ£&,Z“oooĀĀĀ„ pDDÄs3.š7o .d芔$$$ŸŸ ...OuÜiÓ¦ńĮ0eŹa"’ż÷ß×z„»"*”øøøŅ•„¦M›*}N5½ńĖår&MšÄśõėyć7„öåĖ—+¤<.ŗŌfćććĆåĖ—‘Éd ­ķg”——GFFyyyOÓ­޲²2•Ļ׆"qņäI ¼”b… č“000P¹]Ÿ"ĄÓ¢Ž‹•]Ļź~N"/ zäüī»ļŅ£GJJJhÓ¦ 2™Œ={öжm[ڶmK‹-000ĄĻĻ¾}ū¢­­Ķæ’žKddW*mž IDATdņĶ]]]ÉĢĢd̘1ø»»3vģXŗvķŹŠ+ČĶĶ„iӦܺu‹Ż»wSPPš ßń’qēĪŽ’}>üšC²³³ÉČČąĪ;üüóό5АZ·K—.L™2Eš#ø|ł2üńG­# “µµ?~<żū÷ē­·ŽĀÖ֖““46oŽĢūļæĄøqć„Į¶mŪrēĪGŅŖU+ƌƐ!C(++#,,Œ#GŽ%^zé%>üšCH@@<`ß¾}U×ĶĶuėÖ1gĪlmm™6mƒ bģŲ±Œ9+++ŅÓÓŁ¶mżśõ«Åj˜Ø› Ž[‘Źqpph“Nļ"å\¾|™¶mŪröģYĮ\÷šįƂ×ĪƇ«Jü¢RVVĘĶ›7…æŸw Ą£T=™‘‘QķcČd2VÆ^ĶöķŪ¹zõŖ™gllL·nŻX°`P†·±’‘‘”2Mōi£WŸ„ž„R©ąœ_]ĢĶĶ•±*[¹©•‰µIĮių4hĄßߟóēĻó×_ƒ††oæż6£FBCC}}}Ο?ĻO?żD\\¹¹¹xzz²|łr!w{ōčŃ“iÓFįø>>> ?8Ąžżū‰ŒŒ¤¤¤„+VąīīĪ… (--ÅĪĪŽ°mŪ6!hΜ9XYY0räH””_ŽŽŽĀäÅŚŚš9sęÆ}šĮ¾ōķŪW(cwśōi–.]Š……… ąuģŲ‘‚‚V­Z„ņz2gĪ%µõѾżžūļlŚ“‰ . ©©I‹-8räˆ08kß¾½‚±`Eæ@Mš4I¾üņKüżż¹té±aĆ(\ļS§N±cĒĀĀĀprrāųń敆bA¹*>gĪĮK@"‘päČ6oŽĢٳgŃÖÖ¦mŪ¶Lž<™°°0Z“hAXX?üš×®]ĆÅŅC‡±qćFįs˜6mšP¶ ą7Ž øø˜°°0Įß`żśõģŽ½› .pöģYŒY“h‘B‹޺…€Š‘ ‰DBæ~ż¢DMš4ĮŲؘŒŒ 233iÕŖöööbhhH~~>)))Zø{÷®°Ņ^)bff†D"Qš Öd„vŃ¢E,[¶ŒįƇ3kÖ,ōõõ)..ęęĶ›lŚ“‰€€"##œäOŸ>M@@”””J‘~/" y„6''‡³gĻąēē÷D“źĒ±°°P ČĪĪĘŠŠ°ĪśŁ˜INNVj“H$˜™™ÕCoDźɼyóäPāΟ?··7ƒ®ļīˆŌ’ż÷;vģ I“&̟?€„„¾żö[>žųćgöŪ\±b999 6ŒöķŪ+Dł-[¶¬Į MÉÉÉģܹ“”””z*Xµj• †W`aa”P.·*,,,š÷÷ē?žPzķŚµk“nݚ?ž˜%K–ķM8sę Pjēwpuu­öqŽ?NHHNNNŒ7®.»X)żõaaa4iŅ„>ų Ę) §NœeųšįunšÜ)++cٲeJž¦¦¦Bd®ˆśpņäIĮgl’žże1112 R--­MMĶ"--­mmķ\©T𣭭©­­.•JS„RiŖ¶¶vŠ––VšT*M×ŅŅŹ’J„ŁZZZy:::…zzzEeee%R©T&.Ÿ5P&L˜ĄėÆæĪæ’žKVVr¹###:tč *¦"ĻuKØ—]‘𣣣Cppp}wCD¤A`iiÉäɓIIIĮŅҲ¾»ƒ………’žžNYY™ŅQEEE¤¦¦Ņ”C•Æ{zzҲeK!ņ!$$„Ļ>ūL8ßĢ™3166ĘÅŅ 6šĆ?pšąAf͚ŪU«ø}ū6 ,`Š A¤¤¤šÕW_JNNR©ʎ« $”””°yóföķŪǃŠÓÓĆŚŚšž={2nÜ8į¹2~üxZ·n¹¹9Ū¶m#-- '''fĻžM›6mųüóĻ9pą………“nݚ Ō:e£²šwu×NMM%<<(÷¬Ŗ‡“““Źöøø8QØTšN>ż*ŅøE€Œ””!Żŗu«ļnˆ4B7K¬ož4Qŗwļ^ćQ‘ĘŒ†††ZPžšØG”ēł'%%akk[å¾:::XXXÅĒ‘H$DEE W”Q“Éd@¹qœ‰‰‰°ČĒž={Ų·oŽŽŽ“oßKKK²²²šõõ%;;›¾}ūāąą@VV‡āĒdļŽ½‚Ļ{ļ½Ē?žČčŃ£ ¤¤¤„›7o2mŚ4āćć…rÓēϟg÷īŻXXXŠÆ_?ŠŠŠŲ·o=zō S§NHNN»vķāųńćܹsG©,tuPe쬭­­²ĢruČÉÉQ2^® ­ZµŖŅ—ąČ‘#Čd2LLLčܹs­Īagg‡ŽŽŽŅD5..®VĒQ¤²ė(ŠQ©13uAŒPLMMńńń©ļnˆ]ÉGÉĄĄ€C‡ "”/ŗ„‡‡Ó“iS¦OŸŽ»»;%%%œ;wNH=4h}ūöåōéÓ5ŽzŹĻĻēĮƒJķ666µNmIKKćĻ?’¬Õ¾÷”2ąŽ½{‚€\ė籆†NNNÄÄÄ(“§§§“ššŖöŃźĪć^Ķ›7Ī=QD@DD¤FČårµ|‹Q ŃĄ±ņõ×_×wDźˆŹŖݾ}›ĄĄĄ'ī’É'Ÿ`ggĒīŻ»Ł»w/ BE%‰DB=Xæ~½Āä½*“µµ™0a‚B[xx8ŽŽŽJǐJ„ōéӇ_żUh»vķZ„ĖĒ śŗté"P^9HOO€€… z…©am}š={öŌźüµE.—­Ō®„„…½½żsķKu‘Ėå;v (_ĮƋq·¹¹9öööÜ»wO”===ųųxŸś‘ČČH•ķķŪ·Ī=Q'“0aĀ„šõ’ūß’šńńQ+ ??Ÿ•+W2uźŌ§ĀĆĆłķ·ßD@¤ŽP7@ŒQ/“““ž:YD=qqqQi4YåÄ=))‰ąą`Ö®]ĖĢ™3UnSį+••UėžYYY!—ĖY±b…ŅkBµŠŠPRSS SʉŽˆˆØõłkK\\œŹ÷ķä䤶QT$%%!‘HčÓ§O×ĖĖKIøxń¢(Ō‚;w:acc£6¦£"õCƒ^B‹ŒŒźõÕW >œģģl>żōS†Ī?’ü£“ĻŃ£GłšĆ…æoŻŗÅšįƅšĘĒŽV1ņņņX“h/½ōŒ1‚;vŪnŲ°Ÿ~ś‰•+WŅ·o_z÷īĶ'Ÿ|"„œĶž=[ØŃ:qāD†Nll,Pžzūķ·ńóó£’žĢœ9Sxķq’’’>|8[¶l!&&†įƇ3uźT \…’ꫯ0`¼śź«,[¶ŒüüüJÆ]VVóēĻgąĄtķŚ•Aƒńż÷ß+„zļßæŸ”C‡ȀX°`iiiÄÄÄ0räH„ćN:U äēē³|łrśō郿æ?o¾ł&›6mRI:r䯿ž:žžžóĮp’žżJū-R’Ø[:€ """ņ|pwwG*•*µGEE åżTįģģŒ‘‘¬ōrōčQ455Vń+D^U„ĶTѼys.^¼Ørü3cĘ ŗwļ Œe"‘Ėåœ={¶ZēŖKžż÷_•ķmŚ“yĪ=©„„„„„„å}¬Ž1duiŪ¶­Jįćæ’ž«–Gˆ"ŖęB Fˆ4šH€„„žžūoZ·n®®.‡ĀĖĖ OOO¬­­•ö133㫯¾bńāÅ4iŅ„'NpńāEāāā„Õõ]»v )S¦LįęĶ›|ųį‡čééq÷ī]¦OŸŽ””!}śōįŅ„KģŲ±ƒ#F0jŌ(ŅÓÓYµjÉÉÉ|÷Żwųųų`iiÉŽ½{ ĄŲŲCCCbccéÓ§sēĪe芔ņĖ/æŠæ¢¢¢”ņžš4iBÆ^½ŠŌŌ$;;›^½z Q ,ą·ß~cśōéŲŁŁ‘––Ęڵk‰‰‰į§Ÿ~RyķFŒAbb"Ó¦MĆČȈ¤¤$>śč#rrr˜5k'Nœą7Ž`Ŋø¹¹‘••ŶmŪx÷Żwłć?HKKS.wąĄzöģI§N˜1cWÆ^eҤI˜˜˜ĒģŁ³ŃÓÓcäȑ?~œW_}•™3g2dČņóóٶm={öäźÕ«ā ƚ¢n‘bŽ ˆˆz²oß> PķķÆ_æĪ”C‡°µµeȐ!Ā3 ¬¬ŒųųųJėˆ‹śč#ęĪK§Nxłå—±²²BGG‡ŌŌTŽ=ŹÉ“'7nœ‚YŸ££#ššš,\ø;wī`hhX„ŌØQ£X³f AAAŒ1'''JJJøxń"Ū·ogöģŁtźŌ ƌĆøqćhҤ éééģŲ±ƒ°°°*ĖįÕ5ÅÅÅ\»vM©][[›Ö­[?·~Ō„sēĪ‘™™‰¦¦&½zõŖÓcėééįįįĮÕ«WŚe2””” 8°NĻ÷"“˜˜Č7”ڵ““h×®]=ōHDhŠ"Ą£ōčу=z°`ĮaE^ķŪ·G__Ÿ .Äłóē™8q"‹/&??Ÿ&Mšʼyó€r•xķŚµ uOĻ;Ē… „š'¾’ž{įu333!BaȐ!<|ų>ų€‘#G jiHH^^^ĀvAAA̟?Ÿ¢¢"%³###ʏOqq1÷īŻcüųńĀk;wīdٲe ©nnn 8P„••ÅįƇ¹té:tŚóóółóĻ?™5k©©©|ōŃGLš4IxŻÖ֖ĮƒWö(qīÜ9Ö¬Y£šY ­­ Ą¶mŪ;v¬‚ńĢĄ±°°ąŹ•+¢J©¦ŌĘšHDD¤ńމ‰ žžžüšĆŒ5Š3gΐ••Å•+WĘŪŪ(ąWLmmmDąķŪ·ó믿²vķZ<<<źėķˆü¼¼¼T®\Ÿ9sooļJ…Ł>ś{{{6oŽĢśõė…Š|###ÜÜÜX·nS¦LQŲĒĘʆõė׳råJŽ{ļ=JJJÉdčźźbll¬tWWWŽ?ĪāŋY“hŁŁŁH„RX¼x± “iӆ­[·²fĶ^y匍 āĖ/æd޼yäåå”ÆÆ”””JQĄŲŲ===…6 LLLTFKTĘ„K—(..Vjoٲ„JCĀś¦°°S§NйsgĢĢĢźüŻŗu挵kJ捹špŗwļ.:ŚW““'OŖl÷öö½TD^ ŗhhhŠ­[7BCC āܹsLœ8‘Ż»wséŅ%Z¶lItt“2öŁgŸń×_qāÄ ²³³ÉĻĻēļæ’f̘1Ā1”˜™™‘““Se?ڵkĒåĖ—™4imŚ“ĮŽŽgggÖÆ__ćš””„r8-[¶$??ŸĢĢL„åżū÷‘Ėå“jÕJ”}Ö¬Y¤Ų°aœ>}šµkג››K~~>ēϟÆvH”ßdę͛DŽK—pttÄŃёŒÄÄDŹŹŹŲøq£Ā~zzz<|ų°Śēi܈‘""źĖ¹sē011aēĪt芁ÄÄD.\øĄ¼yóør劰¦¦&=zō`ŌØQ|łå—ųłł Æ >œū÷ļ‹€šPŚ’xūƇ‰ŽŽ®Ņq|äȑ ©„r¹ü‰÷šńćĒ3~üx…mēĪĖܹsUnļėėĖĮƒŸxüQ£F1jŌ(•Ū=ŗŠrśōi•ū«Ź[wppP2N¬ ™Lʙ3gT¾¦® !’üółłłH„Ra¬\×ŲŲŲąźźŖTŪ¾““Tˆ"©š»wļrżśu„vMMMź”G"źF£L¦ āōéÓdddp÷ī]ڵk‡ÆÆ/ēĪćōéÓ“hŃ;;;d2|żõ×dffbhhˆƒƒƒBTŌΘĢĆƃƇcllĢŁ³głüóĻéŅ„ >>>BŻÜźRTT¤”?U±Ś®*G/??mmmtttŚ„R© ®žļ’ć•W^!..MMMLLLčŪ·ośõĶ7ßšĪ;ļp’ž}vģŲĮųńć±¶¶¢ HHH <<\įß믿.š•ˆTQQ_ŗtéĀ×_ĶøqćųöŪo ¤{÷īģŪ·£GÖw÷DjD"QUPŁŹcUĒzŪÖtŸśzŽDDDbjjŖV×dggsīÜ9žéjr=T¶‡‡‡’ĢĪū"PVVƾ}ūTFn¶kדz蕈ŗŃč" \X°`gΜĮĖĖ ©TJ—.]ŲµkÉÉÉ妁QQQdee)„d…‡‡?u.]ŗDAAĖ—/Ś ±··ēōéÓWūXęęęJf)J“‘‘‘ŅöVVV”””••„šśįƇłī»ļŲ³gæ’ž;Ė–-SØB*ü_SSSenx…ŁŽ\.ē—_~aäȑ ‘ėÖ­ćŪoæå­·ŽĀŅŅ’īŻ»3cĘ …cüõ×_XYYUūż‹4nD@DD=111”S§N¬X±‚—^z‰-[¶`mmMxx8Mš4Q2322Ā©E*•Kdd¤Ś®Ž66|}} UZhHHHąęĶ›j9U7d2™V’8ŻŗuSKÓŪcĒŽQRR‚¾¾¾B“γĄĮĮęĶ›sūöm…v¹\ĪŽ½{™4i’Z^#uąüłó$%%)µWDC‹ˆĄ   ««ūD…°ĀDpƆ ųśś‘iP>¹())Qų!ݾ}›cĒŽÕČ!½"gģīŻ»B[xx8Ó¦MSKMM„°°°Ź0===öļߏžž{÷ī`ńāÅĢ™3‡É“'sęĢŽ;&TĖ144dŚ“i\½z•cĒŽqģŲ1įY ꃮ®®0~zœżū÷ ęŹ"•Ŗ2uĄČČ//ÆzčQÕ¤¤¤^={öTŠ&}ōė×OåD?))©Ņ4ŠĘNff&ĒŽSłšÆÆÆ‚ń¦Hćꅋ=z4'NdįĀ…Ģ˜1C”`‰„nŻŗńūļæóöŪo%i"""„'777FŒ§§'īīī‘œœLēĪk”óe``Ą!CčŽ½;VVV|õÕW¼õÖ[üńĒX[[cmmT*åīŻ» <øJuµ¢”™™–––\æ~U«V1hŠ ±¶¶&99~łå•ĒŠŌŌäūļæēķ·ßfķŚµ˜››“’’‚•••0©’ąƒ1b;wī¤iÓ¦ÄĒĒÓ«W/rrr())”Y³f|ņÉ' 6 333$ mŚ“QØįśå—_2qāD>žųcĢĶĶIOOG.— ł™3grę̬¬¬°±±ACCƒ‡²|łrģģģČĢĢdĀ„ l޼www~ųį""":t(÷īŻcĀ„ „„„`ccSķĻBäéQ·•wuėˆˆœ:uŖF©młłł>|XåkO 1·°°P0¹y>ųłłqöģY%S»ŌŌTΜ9#®8VAfff„„ŪÕ²:ŅįƇ)++ĆŌŌ“Ņ*uµµ5¾¾¾*Ė6=zGGGžK_eeeģܹS„—={ö¬‡^‰Ø+ Zxłå—éŌ©“BŪ’%K˜8q"ńńńŲŪŪWŗļwß}ĒŹ•+ĀĆĆĆ)))QČG’å—_HHH !!<<<())!//(7|\„ōóó#,,L”m÷īŻÄÅÅńšįCZ“hA“&M8tč>$!!™LFóęĶŸØŠŁŪŪKll,999hkkÓ¾}{bccILL$)) }}}<<śśśJķ666O\655ÅŌŌT”ķńüÄ ģģģ°³³žÖÓÓ ō*&؏¢§§§°"^³³³qPA³fĶhÖ¬Y•}}]]]%gMMMj¤ˆJ„R\]]+}]OOOi`õx’ĶĶĶ„‹GÆ€ŽŽ-Z“Ø2?šńcT ”””p¾GƵŽŽŽR_D'¢ "¢¾XXX<³r^©©©Jõ"Ļ—īŻ»słņe%s»’’öģŁĆ;ļ¼#Ž£ćņåĖ*]Ū”|¦ĀŲYØˆĘ±³³S>ktttčŪ·/æżö›Ņk™™™ģٳ‡7Žx£ŃĻ¢££+­dįāāBŪ¶mŸsDŌ-ˆˆˆ<Ō͈G•ū­ˆˆˆząēē§±WWüż÷ß*ƄEžR©”~żś±}ūv„×bcc9qāD„.ļ‘““4žśė/•ƹ¹¹UY^±>©ˆ~ķŻ»w½L¶Ū“iƍ7ˆˆˆPz-**Šżū÷3`Ą€ēŽ/u!11‘;wŖéėė3tčŠz蕈ŗ£^£yµGŻrE@DDD¤žšōōÄĆĆCåk!!!ÄĘĘ>ē©'„„„üśėÆ*óµµµµÕ~ėęꆋ‹K½Ą€•FĪž?^”‚Uc"==üQå÷J"‘0lŲ°g%ҰE‘”n"€ˆˆˆˆHż2`Ą•łĘr¹œ]»v)„ Ō ’½ūŽ‹źĢ?ž™P”ŽE Š¢(±– i–hŒnb,i&ß4³S6¦Gc‰Y71ʞ²nŒ1FQ±Å ˆŠX°ØšR„ĆĢļ~ÜeB‘¦ xŽÆW^ā½ĻÜ{ sļ¹ē9O­ūĖŹŹ8|ųp•%ę€jēćkµŚj—>n :ŽM›6U»l”Ļ{’ėUC¢R©źµtõķ Ńh˜4iRÓ%vģŲ”¬^p·ČĶĶeõźÕܼy³ŚżĮĮĮ²\§Ø‘LBŌKm '›ƒTѲ¬X±‚¬¬,<==6lĖ–-ąŁgŸeķŚµąęęFBBćʍ#;;›C‡įąąĄ”)Sš9zQ+++&L˜Ą÷ß_åwrnn.«V­bƌÕöqjØššpŗuėFff&®®®$''“œœLpp0NNN:tˆk×®ajjЇ‡™™™lŪ¶ wwwvīÜÉ<€¹¹9NNN888°gĻnÜøĮĉ›,Ę ;wī¬ńÕĖĖ«ÖU” AŸ>} b%&GGGʎˆ Ŗüœét:6nÜHqq1żū÷o¦ļœ7n°f͚°vīܙ{ļ½÷G%Z©BŌ‹ZÄQv± IDAT­6Ø<’¢e9u꯿ž:'Nœ 33“ĄĄ@Ś·oϾ}ūHMMeöģŁ„‡‡óę›oņóĻ?óĆ?0tčP"##ÉĢĢlīšE ŗwļ^ćĶ׍7ųöŪo«}ßqqq$''³lŁ2LLLŠh4äęęåĖĖłųų(•GŽįĄÉÉ üüüųč£”swww¼¼¼š4>€ˆˆöļß_ķ>KKKyäƒśL­`ffĘĖ/æĢC=ŌģU•łśś2räČj÷iµZ6oŽ\ćr£­Ejj*+V¬Ø1ąääÄc=fp=œ„a‘Ÿ!D½Ņ”IŃ²ŲŚŚåå½ūöķ£  WWWŹŹŹ077G„Rįąą€‘‘:Ž²²2233éŁ³§\Ōøū￿ƕ–łį‡š,Š”Cüüü°³³ĆŪŪcccŹŹŹČĖĖ#33Fƒ„„%ŽŽŽdffŅ£G¶nŻJRR666lß¾Ł³gsöģY233±±±!>>¾Ib«pģŲ1¶lŁRķ>µZĶĉiÓ¦M“ž³©ØT*0`€Į-õÄąĮƒkÜæ’~6mŚtŪ¦w4§ .°lٲ*K&V°µµåÉ'Ÿ”åÅ-V]Æ¢E066¦“““¹Ć$ DKqžüyRRR”å]===ńņņ",, NĒ=÷Ü£·ÆāĻŽ½{EQQ‘4ø2pĘĘĘLž<™eĖ–UŪąŅ„K¬\¹’)S¦4zj@`` €ŽŅČžžžäääpżśuģģģhß¾=ööö¤¤¤`eeÅOņņņjœfqōčQ’““™4iÖÖÖ :G^^^­?§:ŽėׯcnnŽ……EƒĪQWZ­–]»v±’žÆ{ڵkĒ“iӚtŚh½$ „Ø7©BŌ————^¹õć?”ßøżÕäɓõž-GūöķyņÉ'Y¶l™²“\e‰‰‰,_¾œiÓ¦5ź óöķŪ),,lLØzbbb”Æsrrx蔇Ō¬O§Ó±cĒŽZ»Õ‡††Vūs/źN„R1nÜ84 ՎILLdɒ%<üšĆųųųŌūŪ¶m#00¬¬,ČĪĪ&66–|ccc~üńG“Z-ŻŗuSP;wī¤OŸ>üņĖ/<šĄŲŁŁaii‰¹¹9ėÖ­ĆÓÓ³Ž= rrrųńĒIHHØqŒµµ5Ó§O7č“°H@Qo5uēm’BĆbkkĖO<ĮŖU«Ŗ-’OOOgٲeLœ8ww÷£¬¬Œ±cĒ62ŅźEFF6ؔ¼  €Ÿž™ŲŲŲĒ 8Ę„'ž?µZĶčŃ£±²²Ŗ±@QQ’żļ‰ŽŽfōčŃXZZÖė‘‘‘œ;wkkk<<<øyó&ŁŁŁŲŚŚbooŸŸ»vķĀßߟ­[·2qāDāāāšōōÄÖ֖?ü/æü(Ÿ«ß„K—:Ÿ[§ÓͶmŪČĻĻÆqœ££#Ó¦M“J)Q/2¹NQo†“B@kœó'„-››?ž8¦Śż999¬\¹’}ūöµŠdīµk×ųņĖ/kMųłłńĄÜĮØīĮĮĮŒ3¦Öž!ēĪć‹/¾ąšįĆhµŚ:×ĀĀ;;;ČĢĢÄÄÄDéQ`nnŽZ­VŹļŻŻŻłłēŸIJJ¢°°ƒ2tčPe¼££#ŃŃŃu:wbb"K—.eƆ µ&:wī̌3$ źĶp®ä…-†!UH@! S—.]xņÉ'łöŪo«½‘Ńjµ„……qłņeʍWļ§“.]ŗD›6mj\ĘN§Ó±vķZ  LI9uźTƒJÄ’J«ÕrčŠ!ĀĀĀjż< fĈ¹@kpĻ=÷`ggĒśõė•"žŖØØˆß~ūČČH†ŠO­‰ƒūļæ_łzĈŹ×III;vŒž={Ҿ}{üżż9vģ]»veąĄUŽsłņeāććńööĘŪŪ»Ö÷‘ššŹ¾}ū8uźT­É1•JEPP”””Ņ0U4ˆ$„õfHI€ŗfō…†%<<œœœŲ¾}; ąäɓ——WęEĖįęęƳĻ>˚5kŖmå7ńŸž9AAA„„„Ō»Ś,77—7ҵkWJJJHHHĄĪĪz÷īĶ„K—ˆĒĀĀ///ŅÓÓY³f |šA£šØ%%%±yófk£R©9r$AAA >ØOOO^|ńEÖÆ_O\\\ćŅÓÓYæ~=»vķ"$$„¾}ūVŪėhĻž=5vį‡ņźŚž^ŪųŅŅRʎ«ü¬'%%±oß>bccoYÓ¦Myä‘Ū²¤„ø{H@Qo†”J!Z¦˜˜lmméÓ§—/_&55Ui¶UPP@YY™$Z {{{ž}öY~ųį’’’ŖSRRĀž={8}ś4=ō;w®×9|}}9~ü8III<żōӜ;wŽ .Š»wo<==éׯŸ²Ŗ½½=}ūömš2j999„……qāĉZoŲ4 ćʍk’ŠQ7LŸ>?žųƒ={öŌz‘‘Į/æüĀŽ;读7¾¾¾ø¹¹)ū n[߉°°0rss‰åĉüłēŸuz‡‡&LhpՌ$ „Ø7Cź åÕR'DĖŅ©S'JKKٵkVVV8;;SVV†µµ5ńńńŹĒŽĆĘʆRPPPÆ„Ż²²²8xš QQQ”””Ō:ÖŽŽžæżķo8::Öłų¢iØT*† BĻž=ټy3ńńńµŽĻĻĻ'<<œššpģģģšööĘÓÓó¶öŖČĖĖcŃ¢Eu®flŪ¶-÷ß?¾¾¾2„D4 Ćŗ’B“†T åՒ¢e9rdū|#wб±1=ōlÜø±Ö%ž®^½Źwß}‡‹‹ ¤gĻž56ŌjµzėÅ'%%”R©”›ææŽV,]ų×2žTūłvõźUŽ=ŹÉ“'ėT}ęēēĒØQ£ ī³ņncooĻSO=ELL Ū¶m«±W@eׯ_g’žżģßæ_Æ*ąģٳxyyÕøDraa!{öģ”sēĪJ™~bb":tØv|iiijµš€€BCC177æåx!źJ’Bˆz3“ ›ŅŅRƒ‹I!Dõzö쉋‹ ›7oęĀ… µŽżóĻ?ٰa›7o¦gĻžōķŪ½1™™™“k×ŽīŻ»78¦C‡Q\\¬|–dggsźŌ)¢££¹qćFŽŃ¾}{xą)’70½{÷ĘĖĖ‹ˆˆ<Ø$n„r%ĄÅ‹¹rå 9998::’––†Z­¦_æ~xzzräČ’’’055ÅĖĖ‹+W®šÆż‹łóē7č!…Z­¦WÆ^ 2DŖIÄm!I!D½Ś wÅ–––”””ŌéĮ‰½½=¾¾¾ōķŪWšž‰;B’Bˆ1111˜$€Ü a˜~ūķ7~ūķ·ęC8F£,£wäČ>\kæ€[ÉÉÉaŃ¢ExzzbmmMLL ĪĪĪäēēcbb‚½½=—/_ĘŅŅ’§Ÿ~ŗAēčŌ©ƇÆ÷*Ā0Ń«W/zõźE^^111ÄÄȘXķ\}'''ŅŅҰ²²ĀŹŹŠ’’üüü” ”¼¼}Ų“iÓm;—¹¹9?ü°tg5Š‹‹cĻž=xxx——GII „„„¤§§cmm››ēϟĒÕՕ|°¹Ć¢ ©EB4ˆ!%¤@ˆ–iĮ‚œ:u €%K–pģŲ1–-[ĘįƇ›34aąźņtüųqŅŅŅ #&&†Ó§O+?oB4FAAĮĮĮdgg“––Ę™3g011”GŒ5ŠŻ»wSXXČõėכ;T!Ŗ%•Bˆ1¤$€TŃ2­\¹www|||ųöŪoiß¾=~~~¬[·ŽŅŅRŲÜ!Ь¤¤„Ƈsłņe®\¹‚‰‰ *• ŸęM“`yyyäęęāååEÆ^½HHHĄŹŹŠ^½zajjŠ™™'NäĀ… ø»»7wøBTK’Bˆ‘žBˆĘŠU¾>zōØņõ¾}ūš!ŃŚųłł”ÕjŃétØÕjƒZÕF“\« ŲŲŲąååUeLĻž=éŁ³ēMˆ:3œ«x!D‹bH•:Ž²²2ŒŒŒš;!„¢ŗdµ¬&!„’B4!%Š‹‹177oī0„Bq—ˆĒŽŽžøø8Ś“iƒ ………ZJPˆ;A’Bˆ166F„R”Óéš; |J€$„āī£Ńh8~ü8‰‰‰ >Fff¦¬Ż.ź->>žK—.‘’’‚J„B«ÕŅ©S'Iƒ'I!Dƒ™˜˜P\\ÜÜaLB!ī,ʍ×Üaˆ»P@@W®\ĮĒLJœœŚ·oO^^^s‡%Ä-I@Ń`ĘĘĘsóm(q!„āī`iiIļŽ½pvvnęh„Ø;I“ „„„$''SRR‚™™...Ķ’øĖR_Y!@ˆęS\\Ģŗuėš5yśvw;uźT­K’…‡‡SVVF’žż166&11QJ¶…w­V“9r$Geīܹ<ūģ³ĶN“ŗzõ*Ƽņ Ū¶mSžv4ˆƒ’™™IēĪųĒ?žĮģŁ³›3Tq—1¤$€TŃ|JKK9}śts‡!ībgΜ!==˜˜zõźEJJ ęęęŒ?€Ÿž™Ž½{+K»­^½šŃ£GÓ§OŸę [“ įįį“k×®ĮÆævķZF#D㓚$@nn.™™™­rż×qćĘqģŲ1lmm±³³SŖt:™™™ńŽ—.]Ź•+W;v,ĶŃŃŃü÷æ’ÅŃёW_}µ¹Ćiu$ ÄŻĶŽŽžąąąęCŒŒŒ8zō(mŚ“!''FĆĶ›7•żżū÷×kü×£GIˆ:ėÓ§ü¼ˆV„Õ$Z«óēĻ+ €mŪ¶q’ż÷ėķ755U*üüüīx|õĆ?pčŠ!:vģhI€3gĪ0oŽ>>ŲŁŁįįįV«åĀ… ŲŲŲpśōiJJJšńńA„RqńāEn޼I`` QQQųūū7wčBqĒμØÖÕ«W芔C•@Ū¶mY¶lŁKĄ°*¤'€BܽŗwļN÷īŻ•æ{zzŽņ5Ņ@ŌĒ­śHœ:uŠŅŅRśöķ ”÷)iŪ¶ķ OˆziµI€’’eīM§N022ŅŪ_\\¬¬'kllLĒŽ«#77—ōōō÷'%%qéŅ%åęĆĪĪŽnݺѦM›FĒåŹŹŹŹørå P^ęÆģÆÜšźÕ«”––āääŌ$ē†ņ_tńńńŹÓÕ¶mŪāå免M±Ā’¦$\æ~]/^gggĢĶĶ•±mŪ¶ÅŃѱŚs'%%QTT„©©)®®®õŽ=33S™"‘––”’{Wާ¶ó‹ŗ3¤$€N§£¤¤Ä bBqūiµZ¾üņKÜÜÜ|ŒÜÜ\üżżéŃ£GF&Z“mŪ¶D||śˆéÓ§Ó­[·fŽ\ˆŖZuĄŪŪ›¢¢"8ĄąĮƒõöoŪ¶‡~(æ‘ÉĪĪĘÜÜ\oĢüłółšĆ>|8»vķR¶oٲ…·ß~›S§NU9Ʊ±1Ƈē³Ļ>S– i®_æ®üżŹ•+J@ų_c@€Ų“icƌiš9–/_μy󈋋«²O„RĀ¢E‹”_pP> įʍzcēĢ™Ćœ9s”æļŻ»—!C†šÅ_šłēŸcmmĶ… °³³Ó{ŻÅ‹éÕ«ÅÅÅ,\ø×^{­ŽļįóĻ?ēĆ?¬rÜŹßæ &°~żśz[č3“nI!ÄŻ©K—.ÕVLÖU||>>QTT¤<,333cŠ A(ćżüünk 99™oæż–ųųx²²²Šét|ōŃG·łä„ļʇ~H^^FFF|üńĒ >¾ø}Zm M›6ōļߟżū÷W›ĄÜܜ‚‚¢¢¢ ŅsąĄ†ŖlŪ“ićĒG«ÕbkkKß¾}±¶¶¦  €””bbbŲ±c‡&::ŗNåhÕ±²²¢¬¬Œ’’n޼‰Z­ĘŅŅRŁß˜ī¤5łųćyēw”ćwėÖ [[[t:©©©œ:uŠ}ūöÄ”C‡”)VVVhµZ <“^ZZJ›6m055UŽ]1wüż÷ß租~"11‘wß}—ƾśJ/†Y³fQ\\Lß¾}yłå—ō>ĢĢ̰¶¶Ź+*~ µoß^#åYMƐz@łæwSUĆ!„-AQQłłłh4š[^ßT\YZZź5J,++ćܹsŅ©S§*ižŖ  €ĀĀBŚ·o_„ڶ®233111ĮĀĀ(ÆčČĪĪ®Óūh;v$??777\]]9pąZ­–ĢĢLŒŒŒčŠ”:Žģģlt:ÄĘĘŽ–ź’ĢĢLśõėGJJŠŽöŗōæJLLd޼y<žųćJ,]ŗT™ŗüŃG)?SK–,!==I(õ­‡“\7ļOĢ+;räO<ńšæ¤@…āāb"""ōŽšī»ļ¢ÕjłšĆIII!,,Œõė׳eĖŽ=JBBīīīäęę²|łņĒ~ńāE222ųĻž”ĻmĖČČPžūż÷ß|ģź¤¦¦ņžūļ0cĘ ŅÓӉŠŠbĒŽģܹ““'OGß¾}ÉĖĖS’—.]Rāźßæ?P^EQ9ފ$L»vķųā‹/ųę›oōŖ)ĀĀĀŲ²e jµšÆæžŗĮ7˜o½õ–rފ~ Ż»w׋gõźÕ :¶ŠghOŻ„9 B€ß~ū;wrįĀ~’żwĪ;ĒO?żÄ–-[8räū÷ļgėÖ­Ķf“ųöŪo±±±į’žļ’n9ö©§ž" @yxšż÷ßckkKÆ^½š÷÷W®‘kóÉ'Ÿ`ccClllƒć¶±±į‘GQžžššŠ /¼šBƒy;2mŚ4‚ƒƒéܹ3Ó¦McŌØQdee‘M’žż $''‡ĢĢLüüünŪō’-[¶( •J…‹‹ žžž˜™™Ż–ó‰Öǰć5±”C‡ņžūļsųša“Z­’*))!** ¦L™Ā7ß|Så^TTXXX”gZϜ9ƒ‘‘ƽöZµ7©ĪĪĪLŸ>9sępńāÅŪ’&›Č¦M›())ĮŁŁ™%K–T{sēįįĮāŋ aūöķ .½7n=ō[·nåÕW_e×®]”––*ŁĖēŸž{ī¹§ŃļIÜ~jµ###„'Ds“ę€B! ¼2ŃŲؘ+W®““Ɔ xņÉ'łć?(..ęņåĖXXX“Šid¦¦¦X[[ß²...Ž’ž÷æ|õÕWŹ5lQQ/¼šjµšÅ‹ćāāb«Mšœœ¶lŁRk…BÅj^Nž<©÷÷üü|FŒqĖ*‹ŗØxśå„÷oæżv£)ī.­: ˆ¹¹9YYYœ:uJ)_‰‰!??ŸüüüŠh4U**¦ T*~Q…††Ö·ŸŸŸRjŸžž®4'¬Æ%K–°gĻvļŽĶÆæžJbb"gΜĮŁŁYʆZƒIH%€Bˆ“'Oāąą€N§£““”ŅŅRģģģ077WškµZņņņōJā[Ŗ)S¦0eŹ”[Ž›7oĪĪĪL:UŁ–˜˜HNN/¼šƼņŹķ ³E+--ÅÓӓ4ųĒoōuŹž={ųōÓOõzw­[·Ž}ūöšÅ_ąķķMii)+V¬`ćʍÄÅÅQRR‚­­-ƒ&88øŚcóĶ7ßšūļæ“ššŖ4Ł633ĆÖ֖ĄĄ@^{ķ5œœœ^^K—.e÷īŻ\¾|™’’T*VVVŲŁŁĀK/½¤Lņ©'Ė—/gēĪÄÅÅQ\\¬ÄdggGPPĻ>ū¬AN!1d­: `jjŹĄٽ{7P’7ü˜™™Ń·o_"""”R~ų_`Ȑ!Źń*ęÉ_øp±cĒņÄOąå八«+zē­<¾%ØX)įV= ڶmKFFF£ĻēīīΜ9sxć7˜5k–ŅTdńāÅz½„į3¤¾’BQq½WaƆŻöóoŪ¶ Nǃ>Ø·żĄ¤¤¤ąąą@HHˆŽ¾Š ĖQ£F)ŪŅÓÓ9pąńńńčt:„UåęĢćöķŪGÆ^½j,?OLLdķŚµĢŸ?FCFF»wļVVŅJNN槟~Ź›OW<ä¹yó&»wļ&!!­V‹»»;”””5¾÷üü|žųć®\¹Bvv6tīܙ* øė#99™żū÷“ššJAAöööōźÕ‹€€T*U•ńW®\įšįĆ$%%QVV† ½zõ"00°Śń-EJJŠ^³r€3gĪpę̲³³˜6m?üšƒŽøk×®͊+Ŗ=ößžö76nÜXć¹8Ą?žHLLLƒ®ÕKJJ6l‘‘‘5ŽŁ±c›6māŠ”CSVVʈ#ŖŚ]į—_~aõźÕDFFŹtˆz0œ«÷ŪdčŠ”ģŽ½›ƒņā‹/’ėĄ€ˆˆˆ <<www“Z-‡Ŗ~X,Y²„1cʰmŪ6¶mŪ¦l733ĆĶĶ 777śōéƔ)Sšõõ½o±Iäēē·§į`M^}õU/^¬d3ļ¹ē}ōŃ;v~Ń4 ©āE¦!„hn_}õŪ·o'##CÆ)ń“iӈĒĶĶMƜ»°°±cĒ2hŠ % 0ž|Ž~ūķj?×BBBŲ“iVVVÄĘĘņč£ņŃGÕX>ž|¬­­yę™g€ņŽS•ƹ6nÜØÜn޼öļßĻ„ ”å–+øøø(׊•:tˆqćĘU`kkˆ ō®Õ…N§ćĶ7ßdįĀ…”––VŁĄÆæžŠ³³³²ķÕW_å_’ś—^߃ ÷Üs[·nÅŽŽ¾^qT'** KKK,,,ørå žžž\øp ¹qćjµooļFŸ«‚F£Q’W,ĖŻ¶m[4 Pž`ęäɓz ///ŗwļŽ‘‘×®]ćčŃ£UŽ› üū·mŪ–ńćĒ+ßÓāābvļŽMLL WÆ^å—_~aŚ“iõŽ}ėÖ­z OOO(++#==„„"##ٲe ?ü0æžś«^ K—.XZZbffFzz:.\ąŌ©SlŻŗUÆĒ„Ø]ĖÆŗ…Ц~Oö”¼@­V+óĪ+~‘U$N:EVV–––ōė×Oļx#FŒ >>ž šŌSO1bÄzōčZ­ęāÅ‹ģŁ³‡Ļ?’V­Zu'Žb¢#ž IDAT“ŠétzŽ {÷ī%99T*ŃŃќ={öŽ_4 CJH%€BˆæŹĪξ£Ė’ :”²²2½~S©©©ÄĒĒȵk×HJJRöEFFRTT¤\³žLjj*éééÄÄÄ(} ęϟ_ēxRSSY±bƽöšņ4¾{÷ī„……)O…üqĀĀĀ cĄ€äēē3qāD X»v-)))deeqüųqBBBŖ<1ÖétL›6ĀĀB6nÜHzz:yyy¤¦¦²uėVŌjµņ0®>~śé'ęĶ›‡ŸŸ[¶lįĢ™3$&&ĪĢ™39zōØŽ4†õė׳xńbŲµkqqq¤¤¤pāÄ ^~łe"##›lŚĆńćljˆˆąČ‘#üńĒüšĆ888pöģYöķŪĒ?üŠäĖQ?ņČ#dddšśėÆ+Ū–.]Ŗ4¾ąšįĆŹ¾ńćĒ˦M›ųłēŸ‰ŒŒä¹ēž«rÜėׯćēē‡ŸŸļæ’>k×®eīÜ¹Ģ;—E‹éŻÓT·Œx]?~\łś­·Ž"..Ž#GŽÉåĖ—õXc+' fĻžĶŋ‰ŠŠāąĮƒœ?^ijpīܹÅu·jõ•XXXšēŸ……qqqx{{+Ԋł=Ó*AAAÕ.{āģģ̬Y³Ŗlæqć.\`Ń¢ElŲ°7Žxƒ©S§6xé”;©¢™LEY~m®^½Jii)ĪĪĪ .ķ*,,T> ^}õU®]»ĘŗuėxžłēŁ·o_‹.ÕŗŪR ¤¤N'??B!Ų¶mVVV\½z•²²2¬­­9sę Æ¼ņŠņäōvØüjäȑĄ’®1_}õU&NœČ‘#G”§–ū÷ļ×{ŻĮƒŃét,^¼˜^½z)ǵ³³ć믿fĖ–-ÄĒĒ×9žĻ?’333žžye›„„%÷Ž{ÆRFīįįĮ½÷Ž«ģß¼y3)))Ģ;WÆß@ß¾}Y»v-‡Ņ«fųóĻ?¹téS§Nåį‡V¶·iӆ|‰'ņõ×_SVVVÆėāüµZĶ/æü¢÷“ßÕՕžżūsāÄ ~żõW 077ēūļæG­VóÓO?įę榌wttä‹/¾ 22’M›65śZįܹsJLaaa£ztļŽīŻ»W»oųšį >nSØč Tū½®øŖ,//ŠŠŠ:-ŁP½ĘÕŕ——č'*O­©ąééÉo¼Ń”aŽ5 ėźż6:t(;vģąąĮƒŹ²Ė4`Ą~žłg¢¢¢jL$''3{öl¼½½«MT055E­VW;ÉPõīŻ(ĻFזMLLäʍtźŌ©ŹžŠ®źęmUøtésēĪŹ—5iß¾=ķŪ·gÖ¬Y|ōŃGüżļgŌØQŲŲŲ4ź=UŽGęŠß>†T åS$ „¢ŗ›Įž={ŽöóŖÕj‚ƒƒŁ¾};EEE˜ššĪ=÷܃±±1żū÷Wn¶JKK9räƒ R>OGÅģŁ³9r$½{÷ĘĆƃ:Š©S'ÜŻŻ8p ²ŹĮ­,Y²€—^z©^ļ!==Øž&Øö wZZß|ó ‘‘‘dgg“——ĒĶ›7ÉĶĶåĻ?’¬×ł+äęę֚¼ØøV¬ØdĶČČØńę`źŌ©­žASåė²ź®Ē«»Ę’žūļõXZZbii‰ ;wféŅ„Š«ņµxuqUŽ_‘$؜XŖī¾Ŗ"±åżd…€ŗkõ=@æ,«ņŹ•Uüżūļæ'99›*Że»uė†J„"66–Ÿž¹Śsét:¾ųā “Z-ķŚµ£cĒŽMżvn‹±cĒbddÄŁ³głąƒŖ]ņ­°°×^{ (ĻrW·DHE£•½{÷ÖølÜK/½Daa!¾¾¾<łä“Źö7ŽxŅÓÓyóĶ7›ām)R žĆ$jgˆI!„¢9 :”ĀĀBŽ;Fii)GÕkH]±\\tt4¹¹¹zž:tč@TT3gĪÄÉɉsēαfĶ^{ķ5ʍ‡‡‡GęšēęęņÆż‹’ūæ’«÷ƒ•Цs5­võ×.ģŁŁŁōļߟ÷Ž{ŌŌTœœœšóócŲ°a<żōÓL˜0”^篐ŸŸ_ėuFE5bōmIIÉmr]”āɵ!Øü”½ŗäKrrr•m•›žńǤ¦¦rįĀŽ=ŹŽ;ųūߒޤqU® ؐ’’¢|]‘|ŖüoYy…;wbccƒ 3gĪltŒw“»¢ĄĻĻKKK.\øĄ•+Whß¾}•LpE_€µk×åW’ŗv¬››>ś(?žų#<ņŻŗu£k×®ŲŪŪcaaAZZŃŃŃJ§Ź™3g¶˜'’®®®üżļgīܹ¼÷Ž{,_¾((( ++‹ššp®_æŽZ­ę£>Ŗö8~~~lÜø‘M›6Ń„KzöģI›6m=z4“'OfƆ lß¾€E‹éĶ ³°°ąć?fśōé¬X±‚éÓ§WŪ}¶>|||Šh4Ó»woå=™™™ńŻwß5źŲ¢œ”%¤źC!ī>YYYJö'''ckkŪdńT~ejjJ~~¾^ °°'N(MÜžZ}ڵk×*Ķ’²³³‰ŽŽęńĒgęĢ™·\QiéŅ„šź«ÆÖ;žŠļEM7·•¾’ž{X¶lĻ>ūl•ńÕõŅŖ‹Šļ]M*ā«(oŪ¶-9995Ž?}ś4±±±Œ1¢I–¤Žµk®®®DFFāīīNAAÅÅŌ=ŗŃĒnØĪ;+_ÆZµŠūī»ŒŒŒ8ž<‹/®ņšŹOÜ’ś”žęĶ›|öŁgՎ­nŻŗ)_/Z“;;;Ś·o±±1©©©zqUL’ØüšĻ>ū \]]Q«ÕÜøqƒ/¾ųBŁ_1µYŌĶ]‘022"((ˆ­[·RXXČ AƒŖÜąūłł”Ńh”Ģē_WX½z5®®®¬\¹’ .(7ü•YZZ2kÖ¬—i1TŸ|ņ vvv,X°€¤¤$½ĪµÜŻŻY°`A•µo+¼śź«?~œ7’ ,÷įīīNnn®ņAōšĆWū=ž2e ’ž÷æ9vģĻ=÷QQQšsīąąĄźÕ«yį…ČŹŹRšļH¹PÓ1“žR „w•J… >†••®®®MSÆ^½°··ēąĮƒXXX R©”>J÷Üsjµšššp8Pe5Ŗ·ß~›]»v”wLKKKBBB9r$«V­"33³ŚłŻ,Z“ˆgžy¦ĪS*«Ø¤ŒU¦ŒVö×ʄ ˜ūļææŚć]¹r„Ž1@łCŖÓ§O×8U511ųß“www®]»Vćų… ²fĶ®]»Ö$I777RRR066F„R)›Óȑ#iŪ¶-yyyœ8q‚®]»Žršrå)ƇWš“œœ¬WŻ[qÆT_>ų oæż6:Žß’ß’½Śq*•J¹Ļ3f ’üē?ŃjµśˆÉ“'3vģX\]])..ęņåĖlŪ¶ gggeɹśō'xé„—X¹r%Ó§OēĖ/æ¤K—.˜™™‘˜˜Hxx87oŽd͚5Źų™3g²vķZ¦OŸĪW_}E×®]iŪ¶-iiiģŁ³‡œœ¾žśė攚čŃ£•dKuSg}ōQĢ–-[HHH ““'''ŒŸŸ«V­PV0³±±!::š­[·«<ķ×h4x{{óšĆóć?RXXØ·RƧŸ~Ŗ< ­\e½`Į «T^Ļ™3‡É“'³gĻ222ČŹŹB§Óaff†»»;Ɔ «ŅOmęĢ™Lš4‰={öpéŅ%ezˆ••ÕųšVŌ¬Õ$ ŁĀ… yżõ×ė<~̘1Źóś*--­÷ķĖ—/ćīīŽ óŻn›7of̘1uļķķ­¬y+īƒ¹ł–J!„śõėĒńćĒńóóćŲ±cʟw½÷Ž«<üųk™ü}÷ŻĒ‰'€ŖėŸ{{{ĮĀ… 9räĒ§ØØˆ6mŚŠ§Of͚ÅsĻ=§Œo×®~~~ŹĶŁŽ½{qppØÓŅięęęųłłU;Ÿzٲeōčуü‘ü(Æäüä“OčŲ±#sēĪU–ŁėŃ£Ū·oē_’ś»vķāęĶ›˜™™įęęƜ9sčŪ·/’üē?ÉČČĄĆĆ(0TłęĶÄÄ???½kR"""˜;w.ū÷ļgūöķckk˰aĆxžłē9r¤Žų£G2oŽ<öķŪǶmŪ”ń<ūģ³·ģ„P“’’’FM9iŹė¤€€jćāāŒ3ŖŻW]߆¶mŪ2qāď7eŹ”*Ū{ģ±:­Š¹sēzW/;99Õx.Ń0Ŗ·ŽzKąččČĖ/æÜÜń“JW®\įāŋuooo_ee‚ŗŅétģŽ½»^Æ4hP£ÖJ½ŅÓÓ9yņdĒ·mŪVʁšAlll­xī$###üżż›; !„·ŃoæżVc¢ĘŠŒŒÄĆĆC)ßw§Ź?cJ_©Ę0`ķŪ·',,Œ!C†\seaöķŪ§L”Łŗu«öüłóejµŗŌŲŲøÄČČØČŲŲøĄÄÄä¦F£É511É211ÉŠh4×5Ķu“tccć&ĆŲŲ8[£Ńäē™ššš››iµŚFS&•w@§NčŌ©Ó9—J„āŽ{ļ½#ēŗģķķ[Õūi­ éC¬¬¬ ­V[„M!„¢!ĢĶĶõ*„héä*YŃh†”™ „B!DM$ „h4I!„ān£Õj•ćĒ×ūSC&Ó„ÖŲe›š”4)Bq{”••)kÓ7µōōt„yµQ«Õ,X°€E‹éż)„!3¬+÷zŠŽŽ–‹}Ńlœ¼ōNk#•B!ī¤žżū+K“5µīŻ»ciiy[Ž-ZŸŠ%ķ*śŻ©>`B4F‹Nlß¾ÜÜÜęCÜ„BBB$ š’Z@’ƒBŃŗ9::āččŲÜa!D‹$=„fhI©B!„¢z-ŗ@a ­'@KOÄĘĘ2eŹ>żōÓj—Č|ę™gŠjµ¬\¹²¢k>sēĪ„øø˜wß}·¹CBŃŹiµZ n˱„bQ47ĆŗrB“HFFFØÕj“Zms‡“ü×=zŠÆ_?ž~śiNŸ>………²ożśõ¬Y³†šššfŒ°y\½z•¢¢¢ęC!Ä] cĒŽ=zō¶ŪµZ ²Eó‘$€¢I˜˜˜Ģ ZKƘ?>Ū·ogΜ9,\ø€ĢĢL^yåŽ|óMüüü”±łłłœ8q‚‚‚ģķķéŅ„ mŪ¶ --ĢĢL¼¼¼”ńeeeDGGćććƒF£©öü%%%œ;wŽ““4ŒŒŒšóó£]»vzc®]»Ęŋ111”cĒŽz͐Nžć»ļ¾ćšįĆzOļg͚Å3Ļ<üyó€ņČĖ/æĢ?žń—1¾÷Ž{xyy±eĖLMMX¾|9³fĶbźŌ©¤„„ńļ’›ųųxe-ķ¬¬,\]]yēw”ßĮ„„„¤¦¦bbbBnn.ƒ bŊ¼õÖ[UĪYVVĘūļæĻęĶ›6lPžočååÅŽ½{ ÕægĻĪž=Kbb"mŚ“ą?žąŽ{ļ埒ü'łłł¼õÖ[lŲ°Ń£G——Ēˆ#X°`‹/nŠ÷F!„¢„“É(Bˆ&ah7Ü­aJĄ¢E‹ø~ż:£Gęõ×_Ēßß_٧Óé8sę “&MR¶©Õj¦NJlllƒĻyęĢ&Ož¬$&L˜ĄsĻ=Gaa!¶¶¶z €›7orżśuŅÓӕ×<õŌSJrØ]»vqåŹ•ĻCHHP>Å!-- •J„wĢŹļŻŌŌ”ŒŒ e[PPiii˜ššržüy4 =ō²æmŪ¶<śč£śŽ!„B“t’B4 C«h-IKKKŽyēLLL˜3gŽŽ¾¼¼<“Z-ķŪ·×ŪnmmM^^^ƒ»§¦¦V)Ł·²²bīܹJ“ĀO?żkkkT*nnnŒ1N‡N§S^S¹”!”7¬©y¤‘‘+W®ÄÕÕ•J…³³3deeé³Ā!CčÕ«ŲŁŁįėėĖųńćŁ¹s'jµšÜÜ\ڵkW„ń’µµµ’°B!„øÖ£;!D‹%I€Ū§]»vh4½'󦦦ØTŖ*«!£V««ŒÆ¼’VēūėNĒīŻ» ä—_~a÷īŻDEEéMærvv®ĻŪŅsčŠ!¾üņKöīŻ‹ÆÆ/*• €V;ŽŌŌ”7RRRBRRWÆ^%""‚©S§āć惙™Yµļ³ØØssóĒ)„BŃŅI%€¢IZ „/X&&&888pöģY½ķ§OŸĘĮĮµZ••iiizūOœ8Qėq;tčĄÉ“'õ¶ÅĒĒ+ĶćććńõõÕKdddT9O}ÄĒĒćééIß¾}•@II ńńńՎ_¼x1=ö&&&ø»»Ģß’žwœ¹xń"...dee‘œœ¬÷ŗÓ§OćččŲą8…B!Z:©B4 é Š<{ģ1žžyΜ9ƒ³³3))),[¶ŒÉ“'Lrr2&L 44”ĢĢL¾żöŪZ9uźT^xįn޼I·nŻČĻĻg͚5 2'''śõėĒüłóY“hnnndff²råJĢĶĶ),,lŠūčÓ§gΜį½÷Ž£gĻžäåå±nŻ:ņņņŖ=fpp0³gĻęå—_Ę××cccĀĆĆIOOĒßßWWWüüüø’žūyā‰'h×®—.]błņåüē?’iPŒB!„­a]µ !Z,©ø}ŗvķŹŌ©S«Ż7ž|ŗwļNdd$įįįX[[óžūļ+ć;vģČžżūY¶læżönnnüōÓO|ńÅUęģW˜6mÖÖÖlß¾_żSSS&MšÄ3Ļ<ĄØQ£X¾|9æżö;wīÄŽŽžŁ³gséŅ%å˜S¦LĮÕÕUļø¬ńß„wļŽl޼™’ž÷æ9r}ōQ&Mš„““ƒ¦““€~żś±}ūv6mŚÄÖ­[)))”sēĪžųc½mĻ?’<'Ožl²s!„BTfXWģę?’ł×®]cĈōėׯ¹ĆiRćĒgĖ–-zŪ:wī @FFß|ó žžž <øQē*((ąģٳōėוJÕØć Ćeh•-y:Ąœ9s a×®]œ={sssī»ļ>¦L™¢ü?tüųqV®\IRRķŚµ£G<÷ÜsJI|jj*_ż5111ØÕj<<<˜4i’ņūL«ÕņŻwß±gĻ222čŲ±#żū÷ē‰'žØń’ÓĀĀB–-[Fxx8øŗŗ2nÜ8†Žą÷ŖÓéX½z5»wļ&//GGGFŒĮøqćP©Tl޼™¤¤$žžyå5©©©¼ūī»|łå—zɧsēĪńłēŸĮĶ›7™1cŻŗucÖ¬Y·ŒćÅ_äÉ'ŸdƆ œ?+++{ģ1彄¦¦²pįB¾üņK |z@Å÷·““”Ž;2}śtśöķ ”O…X±b¤§§cmmͰaƔļļóĻ?ϵk×ČÉ»("> IDATÉaƌ,[¶Œsēα}ūvŽ{ļ=łśėÆ9wīnnnLš4‰žżūšŁgŸ@dd$ĒĒŌŌ”ŠŠP&Ož,æo…BQ…T܅N:„$Žxć 8Ą™3gųōÓO022ĀŚŚkkkLMM}¾øø8üżżń÷÷G«Õ6śxĀpZ %W¬_æžŃ£G“““ĆØQ£šņņā„—^Rn@ććć2d–––<žųć >œ#GŽ0~üx üĘ:44”'Np’ż÷óąƒ’™™ÉąĮƒIIIŹo?üšC|}}yōŃG銔Ææž:_}õUq½üņĖ|÷ŻwŒ9’I“&ѱcGʏρü^ēĪĖĒLHH?ž8Ż»wgęĢ™|÷ŻwDEE¦÷š¬¬,¾łęŹŹŹō¶›››ćé鉕•xzzāāāR§8V­ZŘ1cŠétŒ1###FŽIxx8PžX¹r%Pž bļŽ½qß}÷‘››ĖĄ9sę Ææž:ļ½÷;wfŌØQx{{3{ölŽ}÷]T*žžž899add„§§'žžž\øpõėא——ĒĄ9zō(dŲ°aäääLtt4æžś+&L >>žaƆįāāĀsĻ=DzeĖņĻ!„BˆVN*īB§OŸ GĢ;·Ź~ooo222ītX¢éMėńĒēß’ž·ņw+++¾żö[^|ńE._¾Ģßžö7>łäe’!CčÖ­Z­–““4Μ9CTT”ŅÄnŚ“iØÕjžüóOœœœŲ½{7ļ¼óÓ¦MSŽįęęʍ7jŒ©  €%K–0`ĄeŪéÓ§9pąAAA5¾n޼y888čm8p S§N%##ć’±wēqUÕłćĒ_÷—M@öDĶ]wq7sÉ­Į%—2-ĖkĘ„ś¶8ÕL–5Ł”VŽĖ”‰™š{šbn¹’; "؈l—}»pį÷ĪĻīŽĻĒ£ĒÄłœå}®ĘÜó>ļĻūƒ%KxüńĒ•±ĢĢL<Č“iÓīžAŻ!00  Õj¹~ż: ,ØŃńƽöĻ?’¼ņsbb"»vķ¢WÆ^ūķŻ»—ģģlΟ?Æ$æfĻžĶõė׉ˆˆ`Ń¢E¬Y³†/¾ų‚ššpå8///Ž}÷]Ž’},XĄŽ;Ų¹sg•qFFF’““ƶmŪ ’lIIIlŲ°Ī;åÕ]w>ō[XX°sēNfĻž]£ūB!DĆg^ßŲEČĪĪØō…\ˆ?ĖÜ*JJJ(--E­®ŸEO”””?‡„„šŽ{ļššĆČŖU«ČĶĶ%//3gĪP\\LII īīīø¹¹1{ölH@@~~~|ńÅŹēѾ}{–-[FNNAAAšųćcoo_eL_ż5{÷īeŊdee‘ŸŸĻžżū Ŗö^pvv6ŲVq>ų€_ż•+V››KAA6l0É4¬ąą`ƒŸ½¼¼Œ6č»~ż:®®®l޼Ł`»„„%·oß&??­V«L Ø0aĀ„użæ}ū6=ōP„’¶:vģHbb¢ņs§N Ę===9|ųš=_G!„‡$jąŹ•+Lœ8€_~ł'''ƒńķŪ·óöŪoåoÓ6mŚTéü1ėÖ­cĄ€|üńĒŹö¤¤$>żōSöīŻK||=..Ž%K–(ć%%%<śč£¬^½šE‹ńĖ/æšä“Ot»’ę›oųē?’i4 Ėļæ’ŽV«ÅĪĪNŁ>yņäū¾Ē‚‚„_Ė–-•ķo¼ń F’NeddÜ÷5Zµj„ĢŻÆMYY™’ĢČČČ0XN0::š÷Ž{’żļ÷t777„zėN™™™•ŃB!„÷¢~ÖȚˆ……żū÷0ŗt^EóØAƒQZZʱcĒ Ęóóó•ćAƒ)ŪgĻžMff&cĒŽå×_%33“²²2ņņņø|ł2‹/F­VóÓO?U*=½WVVVģŁ³‡={öšņĖ/åå£ŪöģŁĆ’żß’Ż×¹éßæærŽÆ¾śJپ{÷neūŹ•+Ųõ„ł0·¾õy…€µk×*‰ø²²2Ö­[§TōWJ~’ż÷ʾ©©©„……ƌ«T*ŠŠŠ”Dā›o¾Éš5k Ī”ÓéŖL4VL5ø3wūöm"##ļ;ńS\\LYY™Į½äęę²mŪ6圜ß}÷Ņ—„"̜ƒ·śwjÓ¦ŅŪ”BNN;wī¤}ūöµpgB!„hčĢėŪz=0hŠ ~śé§J° ųż÷ßńńń!<<œżū÷óŪoæ1lŲ0eŸcĒŽ”ÓéprrRęŗ¦¦¦rņäIlllųžūļ Źķģģhٲ%óēĻēčŃ£l޼™ćĒ3nÜøĒ­V«2dP>­ĄŁŁYŁö yxx(ē¾ó ļĆ?,e« œ•••Y5ä3§XjŹŚŚšĄĄ@Z¶lɵk×(++ćēŸąŁgŸe̘1=zgggPŽ>w芁°°0Z·nM«V­ppp >>[[[f̘Ąß’žw¦OŸĪ²eĖšöö&++‹«WÆņõ×_§C‡ 8¶mŪҹsg ¹téķŪ·7ZÉt/™1cƒ ¢[·n”””pńāE:wsĀ„ üē?’!((ˆ–-[’––¦,W•įƇ³dÉiŻŗµņ¹=(]ŗtįłēŸ§[·nāččHBB͚5SŖ(>łäʏĻŗuėšńńA«Õ¢Õj•d ”/ĆźźźJ@@•¦H3{ölBCC B£ŃpķŚ5‚ƒƒ•?G!„Bˆš$@ U¼Į?qāEEEJ™ń©S§ŠétōźÕK™÷zōčQƒc+żū÷W„“““ņœ’{§łóē3bĈ{š{+„)™[_€śœ˜?>!!!\¼xŗwļ®4Ó2dIIIœ>}šüü|¼¼¼čܹ3ēĪS支Y³†÷ߟųųx²³³ńöö&88Xłż3fĢnÜøAtt4ÉÉÉŲŪŪÓ„KĘ£V«Ł³ggĻžåęĶ›ŲŲŲŒ^ÆÆrz 'Ož¬öw××_Ķüłó¹rå VVV“k×{{{nŻŗ”7<~ü8§OŸ&==-ZČŁ³g•łņ‘‘‘Ź{PŽT1>>ž‹/VZF°BHH'OžT¦6>|˜V­ZģóÖ[o”V«),,ä×_5ųl>žųc,XĄ•+WČĪĪĘĒĒĒ AßĆ?Lbb¢ņł6iŅ„®]»L„prr"::šÓ§O“••…‡‡#Gޤk×®Ź>Ÿž9o¼ńqqqäääąļļOūöķ•ž*+W®ÄÅÅÅ ī‰'2|ųš*?s!„B4^’Ø”Ž;āźźJzz:'Nœ oß¾Ą’Ÿ Š«W/:vģH“&M8vģ˜AgņŠ$ĄS|}}±““䌵klÜø‘1cĘ}ˆźŻ»·Į’\B˜+sKŌēé€ņ†Ų'''ƒß'€²d\üżż«<“&M „ŽJ„"88øR}OOO£ū«ÕjƒŚŖ“jÕŖŅų=UŌju„8ļ<ļļŹ+’Ŗ[„┼Ā;łCyS(Oźžūß’ęĶ7߬Ń5ģģģīŗŹ­­-}śōQ~¶··ĒÕÕÕ`|||ŒßŗuėJŪī—B!/IԐZ­fąĄlÜø‘ƒ*I€Š·ž½zõĀĀĀ‚īŻ»³’~¢££i×®ÅÅÅŹ>w~iwvvfŚ“i¬\¹’ńćĒ£ŃhhÖ¬~~~ųłłˆææ?!!!tķŚUyó#„¹2·žõµąŅ„K¦AÜ”wļŽKņ !„BŌWęõm½žØHÜŁš·ß~ĆŹŹJy«Ō»woöļßĻŃ£Gi×®QQQäååįźźZi=ē/æü’öķŪóŻwßMll,±±±•®Ū«W/"""Ŗ}«'„©™[%@}M!„BQdu€ūPń&’ȑ#”––’Ą­[·čŌ©“2׳¢/@Å4Š© ØŌyŪŹŹŠW_}•“'O’››Kzz:gΜaėÖ­|žłēĢ™3WWW~ūķ7ęĢ™SW·)Ä}1·$@}Ÿ „B!ă$•÷”]»vxzz’œœĢ¹sēˆŽŽž’ƒÅæ«T*e €±~P¾Ö³V«„I“&ŹüM\\\ *ʎĖŠ”Cٽ{7%%%fWr-DsKčõzōz½¬J!„B!R p_T*ŹīļģPĮŻŻ-ZpéŅ%222”©L¬[·Ž-ZšĢ3ĻT{ĶŠĪŚ:NY7¼>ŗßµÄEżaŽ *™`žžž÷æ³dÉS‡qOöīŻĖ‚ ČĶĶ%<<œĆ‡›8Ŗ?gŪ¶m<ńĦC!„uL’÷©āažŠ”CF“PŽ ““”U«V‘žžŽ‡‡ķڵ3Ų§¢óōɓ'ÉÉÉ©ņz_6qrrz`÷QīŒ÷śõė&ŒDŌs«™P7ß|“7Žxた·mŪ¶DEEU»Onnn­'5SRRhŃ¢)))ź}:>ś(ƒ ā‰'žąÓO?%77—Įƒ×›ŅŁ;YYY)kk_øpW_}•É“'ĪķŪ·MxŠT*•ŁM ؏I€3gĪŠ¾}{ģģģhÓ¦ ...ōźÕ‹Ė—/åœįįį8::Ņ¢E ńööę»ļ¾Ź«nT*o½õMš4”Y³fŲŪŪó׿ž€M›6”R©ųņĖ/Y±b*•бcĒpīÜ9ŗvķJÓ¦MiÓ¦ ŽŽŽ 4HY"ļÉ'Ÿ¤oß¾”••°’~¬­­¹xń"cĒŽE„RQTTDhh(*•ŠüŃč=NŸ>—^z €Æ¾śŠž={ņŲcįč舿æ?nnnlŲ°”ŹĻØ  €ńćĒćźźJēĪquu„M›6JuVpp0>>>ųųų R©Ŗ¬Nųå—_ ¤I“&“k×'''†JjjŖŃżķģģųõ×_øuė?ü0ŽŽŽ“mŪ'''BBB8{ö,«WƦK—.Œ?üżżqqqaŻŗu¼ōŅKØT*bbb˜įįįŒ9’1cĘ0aĀ^{ķ5öķŪĒŽ½{«|ÓW!!!,X°€I“&U¹Ļ¼yóX°`^^^śz .äȑ#,\øššp†JXX˜T4PęV P§̚5‹vķŚ‘••Eaa!éééxzzņŹ+Æšé§ŸņūļæsžüyŠŠŠ(,,d޼y̜9“ĢĢLåųą“Z--[¶ä«Æ¾B«ÕņÜsĻUŗNæ~żČĪĪęĀ… @łź3ƒęŲ±cJ5ĒĮƒ•JµW^y…‰'RPP@vv6ׯ_ēęĶ›¬Zµź®÷$„Bˆ†Ė¼^י™×^{­ŚńéÓ§W;niiÉ?’łĻ{ŗ–M•föģŁ“ž={V»Ļ?žń~ŻŽ½{+Õ¢a“J€?GÆ×sśōi¾üņK„¬ÜŁŁ™æžõÆ,_¾(Ė;qāDå­Æµµ5sēĪåŻwßåĀ… ųūūšĪ;ļąāāĄąĮƒ ęŅ„KōéÓggg¬­­)--ÅŁŁ€ŒŒ ¢¢¢Ų¶m›ŅĻĆŪŪ›ēŸ^éąīīĪāŋY°`·oß&//O»3±ēąą œ÷^“hтgŸ}Vłł…^ąķ·ß&)) ??æJū‡††Ņ­[7eš„Z­¦C‡Źō)GGG„瀓“S•±Ü¼y“¤¤$Žyēlll€ņiLóęĶS–y­Ī¾}ūųńĒńōōT®õ·æż=zPRR€ææ?/¼š‚rĢ‹/¾Č믿ĪĶ›7i޼9vvvXXX`oo_eœtė֍C‡Ń”CŽ=Źc=F\\/^¤C‡wN;XµjkÖ¬įŲ±cU«V«ńööĘŃё®]»*Ūćāā˜3g?żōSMn鮟YŸ>}ø}ū6„„„`eeEÆ^½ųā‹/pppPśčt:BCCłé§ŸčŪ·/}ūöʧrT4$B!Dćd^ßŌ… ‚¹UčõzJKK –G3g*•ŠŃ£GóŅK/ńÖ[oįēēGRR‹-R:Į>œ^x‡zˆĪ;“““ĆśõėiŚ“)]ŗt!99łž®åįįĮ÷ßĻöķŪńņņ¢k×® >œéÓ§ó·æż ___ŅÓÓY“hĮĮĮ¬X±‚øø8vķŚ…³³3 .ä„—^āį‡V–čóšš`ÕŖUčõz |ąŸS`` ’żļńóóĆĮĮ˜˜ŽyēƒŹggg4 _~ł%C‡„eĖ–•žśųųн{w¦OŸĪ«Æ¾Š§§'qqq|üńĒL™2å®q<öŲcĢ;—wŽy‡ĄĄ@ ųä“O())©Ń DDDąć惏ŅļįNvvvōģŁ“żė_Źj;węśõėlŪ¶Å‹åÕ %%%¼üņĖ<ūģ³8;;“žžĪŖU«čŅ„Ė=Ē$„Bˆ†§~|#BŌ+ę–€śW šÕW_ŃÆ_?>śč#&NœČ›o¾ÉĄłģ³Ļ˜2e ļ½÷?üš3fĢ`īܹäēē³gϬ­­Ńh4tķŚµRoŽÖ­[ćīī®ük×®„K—.ʵ,X@Ÿ>}ųųć),,dćʍ|ųį‡ŹśW_}•ęĶ›aLL O=õ;vģ0zĶš5SJķŻŻŻiÓ¦Įø……]»v­²‘ŻēŸŽ“'OfŌØQ|öŁg¼ūī»*Ž666|óĶ7üüóĻLŸ>ćĒ=׏?žH`` ‹-bĀ„ ,^¼˜éÓ§4ClŪ¶­²HHˆ²ZĖāŋ cٲeL:•_|Ö®] ”OßŗóX(OōtķŚUiDšńĒ“ŸŸĻ3Ļ<ĆźÕ«Ę å½ 2dPžßŪųńćiŚ“) 0ø'^{ķ5ĀĆĆłŪßžFļŽ½•D‹‹ :tØņ:B!„h˜TÆæžz”w ®Xƹ¾ųąƒČÉÉ1ŲTćł ”Ķļæ’ž§Ī!ĢOhhč}•©gdd°dɒJŪ ĄŠ”CDh NNN/^4u:tč`ŠøM!„Bsɞ={Ų¶m[iLLŒ^­V—XZZ[XXYZZXYYåj4š++«L+++­F£IÓh4iVVV©–––éFkii™„Ńh²---ó¬­­ mmm‹JKK‹5^¦‘••ÅīŻ»M†xĄzöģivsÕ*©B!„Ā<Ét!ÄgŽÉI!„B!I!D-°““4»e"kŗ»B!„ ‘$„µĀܦH%€B!„’BŌI4,YYYŌłu‹ŠŠČČČØóė‹£¢­N§###ƒŅŅŅ:£øø˜ĢĢĢ:æ®B!ó›økĘśöķK§NL†ø‹ČČH³ėLß™[_IÜ»#GŽąääDūöķ•m!!!Œ7ĪčJJZZæžś+ćʍS¶}óĶ7Ģ™3‡ŅŅR“N1Y¾|9?žų#‘‘‘lŻŗ•ńćĒ“””„——W­]333“={ö¦l‹ŒŒ$<<Ü,#B!„ØŸĢė[ŗ™srrĀ×××Ōaˆ»eąĢƒ¹UHO€{·dÉ:vģČ¢E‹”mĖ–-«õß111L™2…üü|eŪ°aƈˆˆ0«={ö$""‚¦M›Öźu®]»Fxx8eeeµz!„B4.’BŌ sKŌĒJ€ČČHN:Ejj*Mš4aųšįtėÖ €żū÷£Óé°““ä·ß~cŠ A„††rćĘ 6oŽLbb"¶¶¶tļŽƒnĻ IDAT#F(х……lŚ“‰K—.”V«ń÷÷',, GGG¢¢¢ųłēŸ‰%;;›Å‹ĢšįĆÉČČĄŻŻ]‰ķźÕ«lŻŗ•Ū·oćģģLėÖ­5j–––¤„„±zõjž|ņI"""HLLÄ×חI“&Ułą¼téR._¾LII ‹/`īܹ”––’’’¢Äžé§Ÿ2cĘ ¶nŻŹÕ«Wéܹ3ćĒēĢ™3lŚ“‰ŅŅR†Jæ~ż”sß¼y“Ķ›7sóęMlllčÖ­>ś(juÕ3āŽ9ĀŃ£GÉĖĖ£cĒŽ„’jµšk×®accƒN§céŅ„Lš4‰Ÿ~ś‰ÜÜ\.\Hii);vģąÄ‰įļļĻŲ±cńóóSĪsāÄ >Lrr2666 8šŁgŸqåŹåó˜3gŽAŒŪ·o§  €ńćĒ+Ū’’’X³f Ļ?’<UޟB!/é „Ø’ųs/^̈#8}ś4z½ž‹/ŅÆ_?¾śź+vīÜÉ“iÓxņÉ'‰ŽŽ¦ØØˆÓ§OÓ¶m[¶n݊N§ćʍL:•§žzJ9ļčŃ£łšĆ)**B§Ó±iÓ&:vģH^^©©©œ:uŠĢĢL’’’8uź |łå—:t€Ć‡Ó¾}{vķŚEAA111̜9“)S¦pūömęĻŸĻąĮƒ9tč™™™|öŁgtķŚÕą-’¢¢¢ˆŽŽ¦““”S§NqźŌ)JJJøxń"’ųĒ?ČĻĻgįĀ… 2„#GސœœĢÓO?ĶčŃ£™bٲe̚5 Ο?Æ<šMš4‰'žx‚åĖ—+Ē<÷Üsōčу%K–PTTD\\‡6˜ĖެY3NŸ>ĶŠ”C:t(ćʍ«4ąNŸ}ö'NdÕŖUʶ³gĻҹsg>łäJKKłē?’É£> @AA¾¾¾>|˜Gy¤Ņ9׬Y£ŒEDDTūŁüć’`äȑtė֍_|‘¤¤$ÜÜܘ>¾ŅŸļšįĆY¾|9„„„ÕNUØ Ńhxź©§X»v-aaa$&&rģŲ1Ö­[w×c…BŃxI@Q+Ģ- åÕõ!  Õj*͟÷ööfōčŃŹĻ¬¶ČĪĪfÕŖUl޼Ł`{HHjµšģģl @ZZ­[·ĘĪĪ——ŽēååaccSi»½½=ŁŁŁJąTsæ?žēĢwŽggg³vķZ¶mŪf°O§NŒž]ČĶĶ„““;;;ƒķwūŒī<ē¾}ūųā‹/”DUşSuĻ<ó Ÿž9'Ož4X)@!„Āóū–.„hŌj5čõzS‡¢ØOĶßyēž{ī96oތ··7ÉÉÉDFFņÅ_TyĢßžö7HTT:t ¤¤„ČČH¦M›†··7Ƈēµ×^c芔<ōŠCdee‰···AO€^½zń’÷ÄĘĘR©AąK/½Ä€čŅ„ ķŪ·'++‹ƒņĢ3Ļąååeōįś^“nŻzöģÉC=Äūļæ_ē¹Ó_’śW @HH:uBÆ×ɤI“ šöŻiįĀ…L™2…żū÷ćééÉɓ'),,¼ē·ó=ōS¦L!$$„~żśįįįĮµk×8}ś4Ź Ž7ŽĆ‡„V«eß¾},\øP™Z„‡‡½{÷¦M›6¼õÖ[FÆWŃ pōčŃ8::ŽĒ§$„BˆĘD’BˆZcee%I€ū4sęLśōéĆɓ'INN¦OŸ>,[¶Œ–-[š—æü„RI~§Nørå ąśõėXXX0{ölśõ딿}ŽŽŽf×®]¤„„įāāĀß’žw®^½jP’ꫯĢłóē•éóęĶSŽņ‡„„płņe~żõWn޼‰„„%Ææž:½{÷ĄĒLJåĖ—Wš«’Ö[oѹsē*ļŁÉɉóēϳ{÷nRRR°··§sēĪ,^¼(ļ9°|łrœ īłƒ>08OXX˜RMо}{._¾Ldd$7nÜ@„R1kÖ¬JMłīN‡Ų·oÅÅÅL™2…   eyæęĶ›+Ékkk–/_n0m`åŹ•<ūģ³DGG“’’Ā€Ų°a®®®Œ9’ŲŲX:Drr2666¼’žūMķķķ9{ö,;wī$99œYŗt©ĮµRSS)**bƌUŽ“B!DÕ믿^åŻ”_zé%SĒS#|šA„ŽÖAAA̜9óO÷ʍ|łå—•¶9’ŠŠŠ?unQū6oŽĢ‰'*mė­·īk>xFFK–,©“}Ą€ :ō¾bl,.\øPi޳)łśśāēēgź0„x RRRh޼9ÅÅń……ńæ’żĻŌ! !„āOŠŒŒdĻž=lŪ¶­4&&FÆV«K,--‹-,,Š,-- ¬¬¬r5MŽ••U¦•••V£Ń¤i4š4++«TKKĖtF£µ““ĢŅh4Ł–––yÖÖօ¶¶¶E„„„ōF/•BˆZcnĶėKO!ī…»»;111XZZmr(„BaŒ$„µĘܚšÓŌ!ž,•J…ÆÆÆ©ĆB!D=#«!j¹UŌ§žB!„BŌI!j¹UH@!„B4v’BŌs«éB!„¢±“$€™ĖĪĪF«ÕRPPP£ćŹŹŹŠjµddd(KeÕDqq1Z­¶Ś7§©©©¤¤¤ŌųÜYYYhµZJKKk|¬Ø_¤@!„Bó"I3±nŻ:\\\˜0aéééĢ›7___œœœpuu„I“&t芁O?ż“Ź·™ńńń<óĢ3`ii‰««+...ŲŚŚŅ²eKęĢ™Ć7*÷Č#ąāā¶mŪŲ±c}ūöÅĘĘWWW4 żū÷'22(€łå—qwwĒĆĆOOOģģģ ćźÕ«Fć*((ą£>¢GXZZŅ“iS\]]±°° 00§Ÿ~ščččöY ó!•B!„B˜ózM׈‘‘‘ĮåĖ— %66üüü(,,$-- .0wī\¢¢¢Xµj•Įń±±±ōīŻ­V  $Š‹‹ÉĢĢäźÕ«üē?’!""‚“'OØ›““CFF}ōæžś+NNNØÕj2228xš C† ażśõ,Z“ˆsēĪ”R©pww'??Ÿ¼¼<~ųį8@TT”A·źŒŒ Ģļæ’”?zxx ŃhHMMåśõė¬\¹’’żļlٲ…įƇ×ņ'-ź’¹U”••”×ė±°°0u(B!„B˜„T˜™ØØ(222ˆˆˆ ++‹7nššŹ7xņÉ'X½z5QQQǽłę›hµZz÷īĶÕ«W¹yó&.\ 66–””¢££éßæ?iii|öŁgFÆ}šąAęĶ›ĒķŪ·ÉĢĢD«ÕréŅ%ŗuė†^Æ',,ŒÄÄDÖ®]Kaa!)))dgg³k×.š6mJjj*Ÿž¹Į9ßxć ~’żw¼¼¼Ųøq#YYYÜŗu‹ųųxrss9}ś4żśõC§Ó1cĘ Yǽ1LJm©B!„™$ĢŠš5k C£Ń(Ūüüüųę›o `ļŽ½Ēģßæ€E‹ѼyóJēlŻŗ5Ƽņ @•„÷ćʍćĆ?ÄÓÓSŁÖ¦M>üšC ü-ź»ļ¾Ė”)S”ŲŌj5Ɔ cƌœ:uJ9¶°°Õ«Wšķ·ß2nÜ8lmm•q•JEHH›7oĘŽŽž¤¤$eځhĢ1 }„B!Dc&I3ćźźŹ°a̎©Õjś÷ļĄķŪ· ĘŽ’}–/_N·nŻŖ<·IIIFĒlt{pp°ņļŻ»w7ŗOėÖ­ņ©¢¢¢ČĻĻĒÅŅAƒU—‹‹‹rŽ3gĪT¹ŸØT**•ŹŌa$€B!„hĢĢkĀ®Ą×׷ڇ¦Šł?>Č̚5Ėąē¬¬,t:999äēē“““Ćžó źrčŠs’‘µµµņļwV Ü©¢\YY™²-!!€f͚ŻõAŠŪŪ€ĢĢĢj÷õZ­6«|sŠE!„Bˆŗ&I3sg¹|Mčt:žõÆńŻwßmsė³³³8{ö,...Õī›ŸŸošæ¢į°°°0«o©B!„™$ˆššp¶lŁ@Ė–-ńóóĆŅŅRéņļįၯÆ/ÆæžzÅTń°eee…³³sµūVŒŪŪŪ×z\¢n©Õę5먓“ŌŌ!!„Ba2’h:Ė-[°¶¶ęēŸVśüсź4.ŗuė¦,=(sė I!„BјI 8tčC‡­2PTTTW!åMrssļŗoBBiiiø¹¹XŪ”‰FL’¦SRR‚„„üߎB!„)™W®ø/ŁNNNÕīwįĀ…ŗGŃ®];._¾Laaaµū>óĢ3tė֍•+WÖEh¢“$€éģŁ³§Ī“‘B!„$źŲ‰'X±b+V¬0XNļĻšńńąŲ±cU6=»uėK—.źī!蔇¢uėÖäęęņöŪo¬p§ėׯsäČśöķ['±‰ĘK’¦“žžĪ¦M›L†B!D£&u™u짟~ā½÷Žą‘GĮĮĮįOŸsŌØQ¼ņŹ+\¾|™ŠŠPʏO`` *•Š””bbbųöŪo•źr¾wß}—ššp>üšCvķŚÅšįĆń÷÷G£Ń™™Itt4›6m"77—.]ŗ0xšą:‹MŌ sė `N+4FēĪ£E‹tļŽŻŌ”!„B4J’hųļ’ˬY³8qā'NœØ“»»;+W®äńĒ'--­Īęꆅ…ńĶ7ß0ž|Īž=ĖŁ³gī×§OÖÆ_……E­Ē$źVU ¦"•¦·mŪ6|}}•*&!„BQw$ PĒƌƒææ?nnnŹöŠŠP–/_އ‡GµĒOž<™Ī;Ó”C‡JŪ‡ ĘöķŪ¹rå ŁŁŁXYYŃ“iSŚ“iĆ#<‚££#+W®¤øø˜¼¼<„‡ĄĀ… III!44Ōč5­­­Y¾|9...F÷©.ž3f0yņd"##9wīéééäēēćęꆇ‡Ż»w§k×®ÕŽ·ØæĢķ”ŪÜāiŒJJJųžūļ™3gÖÖÖ¦G!„¢Q‘$@ėŽ½»Ń2ŲV­ZŃŖU«»ß·oß*ēĶ»ŗŗ2mŚ“jź©§*m{ģ±ĒŖ=ĘŅŅ’gžy¦Ś}Z·nMėÖ­«·±±aųšį >¼Śóˆ†ĒÜŹļĶ­2”±Ŗč0qāDS‡"„BŃØHc@!D­2·7ļjµüŚ3ēĪćųńć¦C!„¢Q‘oĆBˆZSVVfvIskTŲŲmß¾[·n™: !„BˆFC’BˆZcn $€¹©čPTTdźP„B!I!jMII‰©CØD¦˜ŸŠžB!„¢öÉ·a!D­Ńét¦”©0OēĪćŲ±c¦C!„¢Į“$€¢Ö˜c@*Ģ׎;HLL4uB!„ š,(„Ø5ę8ĻŪĀĀĀŌ!ˆ*Tō˜3g666¦GŌ²ŅŅR222ČĢĢD§ÓQ\\LQQSRR‚ Fƒµµµņ»»;¶¶¶¦¾!„¢^’$€¢Ö›:„J,-åמ9ÓjµlŚ“‰I“&™:ń„¤¤pćĘ ŅŅŅHKK#55­V‹^ÆæļsŚŁŁįīīŽ»»;nnnxxxЬY3¬­­`äB!DĆ#߆…µĘ+¬¬¬L‚ø‹óēĻóŪoæŃ«W/S‡"ī“V«%!!„„bccÉŹŹzą×ČĻĻW®QA­VćķķM@@͚5£eĖ–RU"„Bü$„µĘ“R P?ģŲ±___üżżMŠøGÉÉÉDEEqīÜ9233MCii)‰‰‰$&&rōčQ,,,hÖ¬!!!“oߍFc’ø„Bs"߆…µ¢““”‚‚S‡Q‰T˜µZ……E„©#z½žˆˆé`ę 8ž>>Œ1ĀŌ”ˆ.77×,›…IĄüuė֍ųųų*ū=z”ŠŠPDÖxÄĒdzeĖRRRīŗÆ……ĮĮĮōģŁÓ,˜U*2bÄĪ;ĒĮƒIKK«öøÄÄD–/_NÆ^½xä‘G¤y BˆE’ČŅ„KéÕ«—$D­ĖŹŹ2uFI ~3f ‰‰‰FBwķŚ…ŸŸŸōØeee~~~”••qėÖ-ģģģŲøq#ƒ`óęĶLš4 ”ĪĖŽŽŽ8p€vķŚÕś½‹śC«Õš:£š4ibźD uķŚ•ųųxNŸ>]i,&&†Ć‡Ó·o_DÖpNNN<śč£t芔#«;*•АZµjÅ®]»ˆŠŠŖņóøpį)))LŸ>ݤĶ…Bˆ?C¦Ō3.\`Ļž=äåå±~żśū>^Æē駟¦G$''ǵk×HHH E‹¼šĀ ʾ .$<<œŌŌTΜ9Ctt4ׯ_ĒÖ֖O>łäAܖh@ŅÓÓM‚Q’؟F‡‡‡Ń±Ż»w“PĒ5 eeeģŲ±ƒ]»vUłĄ«R©čŻ»7sēĪm° €;ŁŪŪó—æü…Y³fįāāRå~©©©¬X±‚äää:ŒN!„xp$ PĻ<÷Üs<üšĆŗöāŋ$&&ņÖ[o¼ĶšņņbΜ9\ŗtIy£{żśu~ųa,-’ሧ§'+V¬`Üøq*Ѱäå呗—gź0Œ’$@ż¤Ńhxā‰'°¶¶®4VZZŹśõėĶrś‰9+--eóęĶ>|øŹ}¬­­™8q"£Fjtńyį…čŌ©S•ūdgg³bÅ āććė.0!„ā‘éõ̃Z‚©¢ėöįƇ¹xń¢ĮŲ… €ņ~...ōļߟ pōčQڶm‹ææ?žžžōļß;;»hīeI1S°°°æ«õ˜››=ö˜Ńź'éP3ÅÅŬ[·Ž˜˜˜*÷ńõõeāĉվ o謭­™0a­ZµbĖ–-Wڧ°°’ž÷愅…5ŠJ !„ ‡$©Š·µ;vģ0ś–gȐ!XXX°nŻ:žõÆÅ”C‡øyó&™™™ŲŁŁńõ×_3iҤ:]˜§’’³ ąää$ˆõ\§Nørå §NŖ4Ć”C‡čׯŸ "«?JJJX½z5×®]«rŸŠŠP†®üžoģBBBšōōä»ļ¾###£ŅxII ėׯG­VK!„õ†$°ÜÜÜ*ĒÜÜÜX»vmµėmėõzŽ~ūmƒéZ­–ٳg3ž|I |‰Šæ/ęFx5 cƌįÖ­[$%%UūłēŸ  00Š‘™æŅŅR"""ŖLØT*†J’žżė82óēććóĻ>ĖźÕ«žŻ+--åūļægśōé“hŃĀ !„5#=ź9GGG4 ‰‰‰Ū łż÷ß«<Īßߥč>ß}÷*•ŠÄÄDqqqa’žżūTLø}ūvµ]„Eć ×ė¹}ū¶©Ć0J„RŃ“iSS‡!KKK&Nœ(żjج¬Œ-[¶(S½žH­VóųćK ̜9“f͚×ėõ|ūķ·Üŗu«nB!īƒTŌs–––ōķŪ—Å‹ćččHēĪÉĶĶåÓO?%%%…¶mŪ=®bN’Ė/æLJJ mŚ“ĮĪĪŽ+W®šĪ;ļŠ£G|}b&i. IDAT}Ńėõųųų0ž|Žxć °µµ%66–’ūßtļŽ]ʬIII”””˜: £ ŖXDżv·ž6l`Ś“iņ{é{÷īåäɓFǬ¬¬˜4i­[·®ćØźžzź)6lŲĄłóē+±jÕ*ž}öY\]]M”Bqo¤ ųśėÆéŅ„ /¼š½{÷fōčŃ1qāÄj[æ~==zōąå—_¦_æ~tķŚ•'žx‚vķŚńż÷ßå Õ¶lŁ‚½½=S§N„gĻžtźŌ‰'žx‚   Ö®][·(̘N§3Z"k.ss³†ŖS§NtėÖĶčXll,¬ćˆĢ׉'ˆŒŒ4:fiiÉōéÓ%P–––L˜0”Źł’yyy¬^½šĀĀĀ:ŽL!„øwņz¬©Ŗģ>((ˆ={ö ÓéČČČĄĆĆĆč[°?¾¹šņņbżśõčõz“Z-z½ww÷J ”ŗuėĘ”C‡€ņ5ą‹‹‹qqqitĖF ćnÜøAii©©Ć0J­V˹jōčŃ$&&M@ķŁ³‡€€€*K·‹Ū·o³}ūv£cjµšššp‚‚‚ź8ŖśO­V3qāDÖ¬Yƕ+W*§§§³aƦL™")B!Ģ’T4 OOĻé°°°ĄŻŻ//Æ»v„vuuÅĖĖK€ĢĢLŅŅŅLF•\]]e*@eiiɤI“Ŗģ”¬‚Ņét:Ö­[gti;•JÅŲ±ciß¾½ "k,,,˜>>FĒ£££łķ·ßź8*!„āŽČ·c!Ä}ŃėõÕ.5f<<ŚdooĻO<Į_|Q©źBÆ×Įœ9s°±±1Q„B!De2@QcIIIhµZS‡Q-oooS‡ źČØQ£Ŗ,ĖŽ»w/qqqu‘éhµZvģŲat¬beń`yzz2zōh£cÕży!„¦"I!DdffrćĘ S‡Q-i؈TtlÆŖ?Ą† M€ķŪ·ķPńI?—ŚŃµkWBBBŒŽ>}Śģ§N !„h\$ „øg¹¹¹\¾|łOĶ Æ ~~~rxcęęęĘć?nt,;;›ļæ’ŽlW±xP.^¼Htt“ѱźŖ%ă1fĢ£}HŹŹŹŲŗu+z½ŽQ !„•I@qOņņņˆ‰‰1ū);;;©x,,,°µµ­“”Ž;Ņ£G£cqqq8pą]ĖÜčtŗ*—lŪ¶-Ż»wÆćˆFCxx8juåÆVÉÉÉ;vĢQ !„•Ic@!Ä]egg[/ŽdI'īźy{{óĀ /˜:ŒZ3räHn޼ɭ[·*żņĖ/Š¢E DV»"##ÉĢ̬“ŻŹŹŠ‘#Gš ¢ĘÉŪŪ›^½zqäȑJc{÷ī„C‡8::š 2!„ā’“J!DµŅÓӉ‰‰© gggš6mjź0„ YZZ2qāD£ŻŲĖŹŹˆˆˆ ''Ē‘Õž¬¬,>ltlŠ A8;;×qDŪ!CpppØ“½ØØˆ}ūö™ "!„$„F•••qćĘ ®\¹böS ¼|½Y³f¦C˜WW×*ūäęęQ/žNß«C‡QRRRi»««+}śō1AD›µµ5#FŒ0:vśōi£B!D]’$€¢’¢¢".]ŗd“¤Ś\Hēs”芔={ö4:GdddŻTKņņņ8qā„ѱ±cĒbi)³žL!88˜ęĶ›WŚ®×뫬ŚB!źŠ$„в²2’’’8{öl½*™vtt4Ś•[4n>ś(¾¾¾FĒöķŪĒ•+Wź8¢ļšįĆF—l޼yƒģ}PŸ :Ōčö'N4š%+…B˜'I!ČĢĢäüłó\æ~½^•J[YYÉƎ0źnż6lŲPƒ]TXXXeĒłÖm0¢‚‚‚*m/..6Ś8P!„Ø+’¢‘ĖĪĪęāŋÄü?öī<Ŗ©;żų; ū&a ›,¢ (* ¢ u©¶¶Zk—Ń:mĻt:Ė·ūŒÓzl§µėtlķLĒét³¶j«­[ŻEÜpQQdQö} $æ?ü‘š&AÄ$÷ŽÆszŠŸĻͽO1÷¹Ļēł\ø€ęęf”ù#‰ĮĮĮ\@¹¹¹uŪ`Żŗu•ōŗÕŃ£GŃŚŚŖ3īļļĻĘH$''ėĻŹŹB{{»™£!""ŗ‰I¢~H„R”ŗŗēϟGnn®Å> õ÷÷ēv[t[Ɔ Ƙ1cōĪ]¹rū÷ļ7sDʑ““£wœUā„€€ńÖÖVäęę “Dż†Z­F]]®^½Šœœ\¼xŃbož›Ļ(td!¦OŸ½sū÷ļ·øž%%%(++Ó÷ööĘŠ”Cˆˆ ?~¼ŽqCI"""Sc€ØkkkCee% pāÄ äå唬¬Lļvb–ÄÅÅEoēm"Cd2ęϟ{{{9µZõė×£¾¾^€ČzĒŠ dll,$‰™£”ī :ĪĪĪ:ć—.]²Øļ9""ź;˜ źŌj5Z[[QSSƒŅŅR\ŗt 9998yņ$._¾ŒŠŠ ‹æńļāä䄩ŠPH„üńEwĘÕÕ>ų Ž›ä¦¦&¬_æŽ"śØT*œ9sFg\*•bųšįDDŻ‘J„ˆŠŠŅW«Õ8uź”QĒ „ļĄ”C‡pņäI”Ć ŪØ©©:£ikkC]]€›ūK«ÕjØT*ttt ½½]ó’öövØÕj£5={{{ :2™LčPČB………a̘1ČĢĢŌ™ėź0yņd"ė¹üü|466źŒė}āLĀ‹‰‰Ń»#@NN’’’ˆˆˆˆś3&ī@]]ę†ŒČźėėqåŹ”Ć;;;„……Įʊ?¶čīL›6 %%%øvķšĪÜžżū€"ėC åbbbĢ õ”ÆÆ/¼½½uś8”••”¦¦r¹\ ČˆˆØ?b=-‰ž££#"""ø …L&ĆC=d°?Ą÷ß/źµŚ:c666 ź©#Fč×÷ēIDDdJL‘عøø <<ÖÖÖB‡B}Čķś¬[·N”żjkkQ]]­3>dČž¹ąą`½ć¬ö"""sc€ˆDĖĶĶ=ČdĀĀĀ0vģX½sWÆ^ÅŽ½{ĶŃķzjĢŻ2ÄoąĄz«O._¾,@4DDԟqq­VVVpss: 22n›eY|}} īėNd,÷ÜsŠŠŠPTT¤3wąĄ 2DTż˜°\R© …ēϟ×ÆÆÆGee%<<<ŠŒˆˆś&ō8p žžy”Ć ź—d2™ˆ#³ÉdxųᇱråJ477kĶuõxöŁgįāā"P„Śō•ŽŪŁŁaąĄDCw*00P' ÜLī0 @DDęĀåD$vvvˆŒŒd€ĢjĄ€HHHŠ;×Ü܌††3G¤_kk+jkkuĘ ¤RžsÜģ™°jÕ*¬Zµ ķķķB‡£ĆPÅʍ7Ģ õg¬ "QĖå ä€dvJ„ĒŽÓ;???3G¤_EE…ŽqVüāʍxśé§óęĶŻŽ"^^^°²²BGG‡Öxee„@QÄOŪD$(©T ųųų õS‡BMMĪø­­-¦L™"@DśŗQōōō4s$āegg‡ŲŲXeCQ‰D777”——k3 @DDęÄ$ ĘŃŃĮĮĮ°³³:ź§źėėqšąA½s'N„³³³™#2ĢŠ"ג’bȐ!«:ÄĀÓÓS' P__öövŃU.QßÄ$™D"ÆÆ/üüüøk jĒŽz׎»¹¹aÜøqDd˜¾å‰īīīDcXYYΜ9ƒAƒ!,,Lk.//ÅÅŀńćĒkŻō*•J8pöööZ=T*Μ9ƒćĒ£¹¹6664hF„· bļŽ½°±±ARR’‰ŽįŻŃ—“Q«Õج¬„ÆÆÆQĆ$™•££# ……ś¹¢¢"œ>}ZļÜōéÓEןB_%€³³3lmmˆĘ°²²2¤¦¦"%%»wļ֚ūć’ØĖČČŠJ“œ8q©©©˜9s&¶lŁČĢĢĂ põźUėX[[ć÷æ’=>ųą­ĘˆS§N…··7JJJLšīīž”åL‘¹°0™E׌’ČČH&Hpjµ[·n…Z­Ö™ DxxøQuÆ„„EgL.— I÷¢¢¢ąįįĢĢL­x*• ŁŁŁ deei½.==œœ ąęĪ ÷ŻwJKKńŅK/aėÖ­HOOǶmŪšĻž>>>ųē?’‰Æ¾śŹLļĢ8 ķ~"–](ˆˆØļc€ˆLN.—cĈšõõeł?‰BNNަ,żVR©3gĪ ¢ŪkkkÓc? ‰D‚‰'¢©© 999šńóēĻ£¾¾‹-‚‹‹ 233µ^×՛”+ žžŽņņr¼ōŅKxēw0cĘ $&&bśōéųӟž„’żļ€żū÷›é‡ƒƒƒŽńęęf3GBDDż“Dd2vvv Ahh(^‘h“··ė”©w=z4¼½½ĶŃķ©Õj½½ Äś÷źÖł.]7ż 5j”V@„R!##nnn1b ŖŖ  P(ō^#!!»wļĘsĻ=g’÷`*†*”˜ ""sa€ˆŒN*•ĀĻĻQQQK_‰„’––†śśzq{{{LžüšC½b&•Jõ.‹ŗµ‘)‰«õ1Y¬ĄßߟM’HŌ¶oß®÷fĖĖĖ £F ¢ž1t£+ÖJ€®¾k׮Ņ ąķķ¼¼<<óĢ3€1cĘ@"‘ ++ óęĶÓi Ųeٲexę™g““ƒĀĀBįŚµk(,,ıcǐ––†‚‚|üńĒf½%‘H “Ét¾;;;Šˆˆˆś&ˆč®8::" ...B‡BŌ­‚‚œ?^ļÜōéÓ!“ÉĢQĻjØ©o‰€X$''cķŚµHOO‡ææ?Ōjµ¦ĄŻŻ!!!šJ€ōōtxyy!22R󜦦&“··ĆĆĆ÷ÜsĪł«ŖŖŽ/æü}ō‘E5Õ÷ēfIń‘ec­.õŠ­­- † ʉžJ„¶mŪōĪ…‡‡#$$ÄĢŻCOü -ƒ®§ś‡ŅÜģw%`ģŲ±ČÉÉAnn.JJJ0qāD­į%K–ĄĶĶMg+Į.]‰„ĘĘFTWW›š—Z­ÖūŌ_ĢI(""ź[X Š8yņ$ 22R”[2Ż­ŖŖ*9rhhh@tt4Fމźźj\¹r0tčP899 )‰…‡‡<<<„ƒØGŽ=Š7nčŒĖd2½O™ÅĘŠŚ1'BBB0hŠ ¤§§ćʍššš@PPf~̘1ųꫯ°bÅ ŗKėÖ­Ćøqćtž”āģŁ³pqq±Ø¤†Źž­¬ų‘ŒˆˆĢƒ’āō@SSāāāyyy:tØĄ×ņå˱téR­ĪÄĖ–-Ćȑ#±sēN,X°‘‘qćĘ &‰LII ŹĖĖįėė ooo–²’hµ““`Ļž=zē,"™emm ©T •J„5.ö¦xÉÉÉX½z5®_掔”­ŸcĒŽ|õÕWšcoõŠCįĶ7ßÄĒŒmŪ¶!22^^^Éd(--Ş={ŠŚŚŠ×^{Ķ¢~žŚ P¬żˆˆØļa Ÿ;~ü8–,YµZ°°0Œ=vvvˆ5ÉõvķŚ…æžõÆ2d~ųį“\ƒĢG©T¢°°eeeš÷÷·Ø§qŌģŻ»Wļ—££#&L˜ @D½cccƒÖÖV­11W@jj*¶nŻ ?~¼ÖܰaĆąēē‡ęęf 2D'Įīķķ¬¬,¼žśėŲ½{7¶lŁ¢™³²²ĀØQ£°`Įüž÷æ×z\.Ē€LōŽī^KK‹Žq±īLADD}“żÜĪ;”V«1räHdggė”#&$$`żśõ`” ˆźźj?~MMMw}.ÖÖV\¼xNNN€³³³Š!***päȽsS§NµØå]¶¶¶:IC7”bńŲcį±ĒÓ;'“ÉP\\Üķė ¾ųā 7Ÿ ·¶¶B"‘ĄŃŃŃą‰ŠŠŠ» ŚÄõŽ3 @DDęĀ$@?W^^5j”Žõˆ0wXd”qžüyøŗŗB”Pˆvsź?~žłg½k°}}}1räH"ź=gggŌÕÕiUUU ł988ō‰eCfl°JDDęĀ$@/]¹rĒŽƒ““¦M›¦3žüyœ;wĄĶéųųxc222PZZАDGGkĶ;w‡Āõė×ŃŚŚ ø»»cŌØQˆ‹‹ƒTŚūjjj4ėc/\øøzõ*¾’ž{Ķ1‘‘‘ˆˆˆ@CCvģŲ˜3gNÆŗŸ;wN³-Wvv6 ””Aėz~~~ģ7ЇŌÖÖāŌ©S8p |}}ļźū•Ø·ņņņŸŸÆ3.‘H0cĘ ‹ZGÜlĘłė'ē---hnnī7Ēż…”JOOO3GBDDż“½tćĘ Ģ›7ÖÖÖØ­­Õłöę›oāŪoæpó)»¾rŌ'žxłłłXµj•& PQQG}»vķ2xķššp¬^½ŗ×ėö 0oŽ<­±;wbēĪš_/[¶ ƽöJKK5Ƕ““ō* šż÷ßcٲeZc%%%Z1Ģ™3‡I€>F„R”¤¤UUU¬÷fĖŚŚS¦L ¢»gčIqee%“Dß÷„\.ļU’ˆˆØ7˜č%kkk$&&būöķHOO×ŗ‘/++CAA†ŽŠŠPüšĆ8~ü85Ē:tjµžžžœ9sF“ČĶĶÕūļÕW_EXXŹŹŹ°’~̚5ėŽc Ō4ūūĆž€•+WbźŌ©X¹r埫'ęĪ«I¬]»YYYšóóÓÄ@żCuu5źźź///”Ć”>¬©© iiizēʏo±U)ŻUeččč@mm­Ī8—‘9q”ī]čŗń?tčÖxVV`̘1š}333µŽ9xš Ö9hÖ®ĘĒĒü@0pą@̟?±±±¢ßšč×:;;qåŹäååńū—Lf×®]:]ō`Ą€ZÉXKćīī®·Įķ:ģ“x”””@„RéŒJš™+īB× |ff&:::4Żõ»nųnj£ŁVÆ+1Š„+qpk «Lŗ¼¼jµŚ`ÓŖ’üē?F|DęWWW‡Ó§O³*@š$¤Ų„††ĀĒĒē®ĪQZZŠćĒė»ēž{,z9еµ5¼¼¼PVV¦5^TT„R kkk"£ž*((Š;īēēgęHˆˆØ?cą.ÄÄÄĄÕÕµµµ8yņ$āāāhW( ŲŚŚjUŌ××ćŌ©S““‰‰‰pttıcĒ‹I“&A”P žžžšóócÉ õ]U555 Ņ»E%_CCƒVP1qtt¼ė$Ą¶mŪ V«uĘuWēƒĄĄ@$@GG®]»†   ¢¢žŅ—H$P(DCDDż—Ü™L†¤¤$@zz:€›ʎ= ¹\ް°0ŲŁŁ!::ׯ_Gaa!€› «:;;ØÕĢI.—ćŪo慗—rrršĮąŁgŸÅ¬Y³///8;;cņäɚ-žˆ,]mm-Μ9ƒ††”C! wśōi\½zUgÜR·Ō'00Pļø”'Ģ$]ɚ_óōōģU“_""¢Žbą.żŗ/ĄéÓ§ŃÜ܌ѣGk>pžŗ/@WĀą×; Ą¬Y³pķŚ5ģŪ·Ÿ}ö–.]Š… bņäÉFkk+öķŪ‡)S¦`Ū¶m&DęŠŽŽŽÜÜ\®m¦^S*•+bcc1hŠ 3GdJu’éf@ü ŃŃŃ”3Ī ""27Öߎ„[“jµZ«@—®Æ3331ž|M`āĉzĻikk‹ääd½I‚ŗŗ:,\ø?żō>üšC̘1Ƙo‡H0jµ%%%hjjāņŗcéééz»®ŪŚŚ"%%E€ˆLĆĪĪ>>>(--Õ/..FSSŠŒnēĀ… zǹ€ˆˆĢ•wiųšįpwwGyy9ņóóµśtéŖČŹŹBkk+Ž9@·ąƒ>@jj*¾žśkƒ×0`/^ øxń¢Qß ‘ŌÖÖāģŁ³hii:²uuušäźÆ%''÷¹Rk}KT*•¦× ‰J„ĀéÓ§uĘ„R©Į%DDD¦ĀGmwI*•bĀ„ Ųøq#ŅÓӑ™™ ‰D‚ųųxĶ1šõõÅɓ'qšąA“µµ!44T§p]]öģŁƒ!C†ąńĒ7xĶśśz°Č¶]Ż«›››ބĬ­­ ēϟGHH\\\„Ēb-X°J„Rč0taĖ–-F;ßĪ;õn9éīīŽqćĘķ:b1lŲ0­iąäɓ}ņżö—.]ŅŪ÷D”PĄŽŽ^€ˆˆˆØ?cĄ’““±qćFlÜø—/_FXXär¹Ö1cĒŽÅ† °bÅ Ķk~mäȑ€o¾łcĒŽÅüłóįąą uĢ‘#GšśėÆŠ®6°\»v kÖ¬Įüłó!“ÉŽŠÄØ££yyy äڽ$Öķ™¼vķšŽ'¬0}śō>łóÅßßžžžØØØŠ/))AYY¼½½ŠŒ ÉÉÉŃ;cęHˆˆˆøĄ(ŗnčwģŲ@’Ķy×ŲöķŪµ^s«™3gbņäÉhmmÅāŋįčč777„‡‡#<<®®®ˆĒ… ąåå…æžõƦzK&3räHųśś}ōQŲŲŲĄŻŻ]“ ŗ•Z­ĘåĖ—QRR"t($BjµŚą–€AAA  *ó1b„Žń“'Oš9ŗ¶¶6äę꼌ŪŲŲ 22R€ˆˆˆØæc $ är9är¹Ž§J†««+är¹fŪĄ[%$$@.—kŽŃ×ŠŹŹ Ū·oLJ~ˆQ£FĮÖÖ555ČĖĖC^^źźźąććƒÅ‹ćčŃ£FYGhoo¹\n°Q&“iŽ»1¶×²³³ĆīŻ»1mŚ4ŲŁŁA„R”ŗŗZoC/¢.ÅÅÅz·Ö¢žķĉzw”J„}¾ijLLŒŽŸÉ999z;Š“pNž<©wYNDDlllˆˆˆˆś;.čgggTWWœ—H$·mŅ7vģŲnĻŃÅŚŚžóŸńē?’Ø««C]]llląāābōõŃļ¾ū.Ž}÷]ƒóĮĮĮ=ŠūNDDDąēŸFgg'***ŠÜÜl‘ż ĢĮŚŚNNNP«ÕP«Õčģģ„Z­†R©Ōūō³/»~ż:$ üżż……D ­­ »wļÖ;ßēKā]]]1dČ\¹rEk¼””ĒןKCĀéģģ4Ų“’KˆˆH(Lˆ˜••ÜŻŻįīīŽķq999ØŖŖźńyĆĀĀz½gveeå•›:88lT%“ÉąććÓ«8ś WWWøŗŗźėčč€R©„R©Dkk«ę斖“¶¶š9Ró覍‰JKKÓŪhĶŽŽ“&M "󋍍ÕIĄĮƒ×'ū!Xš“'O¢¦¦Fg\.—sW""’“¾ IDAT “}Ą+Ƽ‚]»võųųO>łĻ<óLÆ®•™3göųų”C‡"//ÆW×¢īYYYĮŹŹ ööö:"hhh@cc#ŠŠŠŠg*JKK!‘HzČ"ĖW]]Ć‡ėKMMÕiØŚW >{÷īչɬ­­Å©S§4ĶfI*• Ō;—””©”+2‰ˆHLō;wī4Ūµf̘Ńgn&ū2™L¦UEŠŁŁ‰ŗŗ:ŌŌŌ ¦¦GxwJJJ`ggĒ]ś©ŸžYļŗw///Œ5J€ˆ„!“ɐ””„Ķ›7ėĢ„„„!::š7š:{ö,*++uʝ™ !""AńÓQ? “Éąęꆠ  Œ9AAAß‡įŹ•+zĖĮ©o+((ŠŪiø¹%`»éÕŪ+¦ŖŖ ĒŽ "n.׌»wÆŽ¹¤¤$X[[›9"""¢_ōÆOKD©T DDD ** FŁłĮÜT*ņóóūl’Ņ„R©°uėV½s 1sD³²²BBB‚޹]»v”©©ÉĢ8p@o€ƒƒCæŖV!""qb€Øspp@PP†¹\.t8w¬££łłłP©TB‡Bf²²2q™L†{ī¹G€ˆÄaōčŃpttŌoiiĮŽ;ˆØ«®®6Ų !!Ū‘ą˜ "ŲŁŁ!44aaa°··:œ;ŅŅŅ‚k×® ™XKK öķŪ§w.11ń¶»Øōe666˜:uŖŽ¹œœ½;élŻŗUoĻ WWWƒUDDDęÄƀݨŖŖb©qćä䄆h 0QQQ())Aii©Å4,++ėv;E²|{öģAss³Īø““&L˜ @Dā2räH?~………Zćjµ[¶lĮ3Ļ<++ž“ojgĻžÅ… ōĪ͚5‹½ˆˆHų‰ [·nE~~¾Ša%$$`śōéB‡!j]Ūļ 0—.]B{{»Š!õHAA†Ī>ؼ¼GÕ;7uźTŲŚŚš9"ń‘H$˜={6>łäŻ?ŹŹŹ°}ūvÜ{ļ½fiÕŖUxź©§z||cc#Žxć Lš4 ¾¾¾ˆŠŠŅ{\AAąćć£w¾££'NœĄčŃ£{woÕÖÖ⧟~Ņ;”C‡š5"""Cø€ˆōrvvʰaĆąää$t(=¢T*qõźU”Ć ųłēŸõnkéėė‹˜˜"'oooÄĒĒėĖŹŹĀéÓ§ĶOii)öļߏŠŠ ¼ūŖŖĀśõė‘––†÷ßü±ÖńŸž9JJJ “É “É4ćMMMxć7šÖ[o!//’ūßńę›oāĄ8wī¾łę(•JĶńß~ū-–-[fš‰¼)tvvbŻŗuhiiљ³¶¶fņ™ˆˆD…ĢˆČ kkk„‡‡£  UUUB‡s[UUUšöö¶ųķéēϟĒŋuĘ% fΜi‘;[˜RJJ Ī;‡ŗŗ:¹M›6aŠ Apss3[<8t芋‹‘••…¼¼<œ?III: =§L™‚ĀŚŚšńŻ»wcƌˆ‰‰AZZ|šAxyy!&&Ļ>ū,"##µŹģēĪ‹²²2³>yß±c‡ĮŽ$“&M²ČĘ«DDŌw±€ˆŗ%•J ///”Cé‘_Ɖ&ĖÕŁŁi°»żˆ#0xš`3G$~¶¶¶˜7o¤RŻŽ[[[±vķZ½MėLeŲ°aŲ³g&L˜€ķŪ·#""©©©pwwĒʍŃŲŲxŪsØÕjĶ2µZ ‰D•J…öövX[[£¾¾^ē5ęÜ1äüłóČĢĢŌ;„¤¤$³ÅBDDŌLQ( xzz Ęm555鯟›,OFF†Ž kkk¤¦¦ ‘e2d&Mš¤w®¤¤ß}÷Yn’###!‘H€qćĘaąĄ˜0aŖ««±gĻ( ­åFĪĪĪš÷÷‡§§§ÖϚŌŌTlŚ“ K—.…‡‡¢¢¢°aĆlٲĻ?’<µ’ vvvØ««Ć©S§Lž‹‹‹ńż÷ßėm¢źä䄹sē²Z…ˆˆD‡Ė•&Ož,ttmmmHKK:Œ>G”P@©T¢¶¶VčPŗUTT777½OCÉ2466āĄzē&L˜Ą ncāĉ(,,Ō»”"//7nÄ<`ŅŌ¹sē^~łeĄ’%K÷Ž{ƦIa^^Š‹‹cĒŽ…ŸŸąśõėŲ³g€›Mõ^}õU­sæóĪ;šÆŒ³gĻāʍ€¤¤$¼õÖ[¦z[UUUųśėÆõ6O•H$˜;w.—&‘(1 p‡¬¬¬0~üx”Ć Ūhhh`Ą$ ‚ƒƒqžüy½Ūµ‰E{{;*++-f 錵k—Ž-Z €ÄÄD"²,]7”+W®Ō[.Ÿ““WWW¤¤¤˜äśŪ¶m»ć„9†vć¹Ó]z j“÷[__Ļ?’MMMzē“““l”k“DtGd2BCCqę̽ŪÅāśõėLXØŅŅRœ8qBļÜōéÓ¹×z9::bžüłųüóĻõöŲæ?0nÜ8£_»ŗŗ%%%F?ļŻššš0ŹyššššÅ_¬ˆ:t(’““r-"""S`€ˆī˜­­- .]ŗ$t(µ¶¶¢¦¦†]¹-ŒZ­Ę¶mŪō®±śč#ģŪ·O«‰Z­Öģ`jGŽĮ—_~i0”čččˆE‹qĒ ""²LŃ]ńōōõÓ/&,‡”?«I“&ĮŃŃŃĢŃōM3fĢčvż’µkךŃGįܹs&¹žž={pģŲ1ĄęĶ›ĒŽĆɓ'ńÅ_h-Q©Txå•W R©`cc™L¦™Ū¼y3žyę\¾|Ł$q7·š]·n6mڤ·±"Čår<õŌSlBJDD…I"ŗ+‰DŌÕ---¢ŽĪŗēīīŽųųx”ĆčSʏ9sę\’ßŚŚŠļ¾ū[·n5É »wļʕ+Wšį‡¢  gĻžÅ×_éÓ§ćȑ#šć¤R)†Žūī»{÷īÕ:GRR¢¢¢Lö³§““Ÿ|ņ NŸ>mš///<łä“FŪu€ˆˆČ\Ä»˜—ˆ,†\.‡£££Į=³…V]] ”Ć ^˜1c†ØūNXŖŲŲXŲŁŁażśõzŸr«Õjdff¢ØØ÷Żwh“k=Ÿ~ś)-Z„U«Vį駟†½½=VÆ^­“t°··Ē€tĪįää;;;£7įėģģDFFöīŻkšé?( <śč£°³³3źõ‰ˆˆĢ•DdƼI06S®q&Ó ĀŠ”C…£ĻŠŒŒÄĀ… »]jQ\\Œżė_Ų¶mŚŚŚīśšööö;v,222p’ż÷#33 …‡†Z­Ö¹ń¶³³ƒD"ŃYrdmm“'OāäɓwS—‚‚|üńĒŲ¹sg· €įƇcįĀ…L‘Åāć"2 777ŲŲŲ ½½]čPt455”³³SkM1‰›T*ÅĢ™3…£ĻS(ųӟž„uėÖ\_ÆR©pųšaœ9sS§NEtttÆ·j|łå—üŅ šĄ€+VhŽ9|ų0š››akk‹'Ÿ|šŅK/įģŁ³šf€‰‰‰X·n]Æbųµ††ģܹ'OžŌ»…b+++L:µŪęŠDDD–€I"2 ‰D/// еZ††vļ¶ cĒŽe³53qttÄĀ… ±wļ^8pĄąpCC~ųįdggcāĉ:tč%ŅŅŅpüųń;ŠķÖ·:uźŌm_ūÜsĻu_cc#222}Ū*www<üšĆ¢®x"""ź)&ˆČh<<ƒI"2[[[øøø ¾¾^čPttwSCā2eŹQo;Ł—āųvī܉'Nt[_VV†~ųiiiˆĒšįĆįäätŪkx{{cģŲ±Ę [£¢¢zē±aĆœ:uŖG» 03fĢ@dd¤±Ć$""“DdTnnn¢L477C­V÷z-3™‡āāā„£_sttĜ9sĶ›7ß¶ŗ§²²Ū¶mĆöķŪ”P(•JešxWWWŒ5ŹŲaøŁÜĻPĄPσ_“J„ˆGjj*lmm‘(0 @DFåęꆫWÆ †•J…¶¶6–ōŠÜ“iÓzTZN¦ēē燧Ÿ~YYYŲ³gĻm×Ķ«T*\¾|—/_¶Ų&œ …³fĶb? ""źÓ˜ "£²¶¶†““…EGss3“"‰ąą`”Ć [H„RŒ7#FŒĄįƇ‘••…ÖÖÖŪ¾®'åöb€‰'"44”ÕBDDŌē1 2K–,Aee%žņ—æĄŻŻŸž9<ˆ7nĄÖÖžžž˜:u*ęĪ kkk½ēø~ż:¾łęœ>}•••Ø««ƒ££#ˆøø8Ģ›7>>>ZÆ9žś»w³³ÖÜO?ż„GyÄą‡³Õ«Wcɒ%ųī»ļ“öą.**ĀŖU«‚āāb¬ZµJėuūöķĆ’ū_,[¶ >ų RRRPZZŖuĢŽ;°bÅ |’ż÷:ū{ēęęböģŁøxń¢Žø¾ūī;¼ņŹ+xė­·šÜsĻž "‹ąģģŒėׯ †Ž––”C įīī.ttvvvHNNFBBŽ=Š£G¢¢¢ā®ĻŪŚŚŠ—_~?žų#®^½Šąą`H$œ9sĪĪĪxžłē±téR¼ņŹ+xć7°uėVŲŪŪC©T"33óŽ’VVV CBBī:v"""KĆ$€H½šĀ 8p >üšCÄĘĘĀĮĮÅÅÅŲ¼y3¾üņKdggćµ×^Ƈ~ØyMUUüq477cöģŁX¼x1 ģķķQ[[‹ĀĀB|żõ×Ų“i-Z„āāb¦G/^Daa!ž~śi̘1ø~ż:V­Z…;wbéŅ„ųĻžx’ż÷'''äååałņåøtéžzź)j*Z[[1}śt\½zC† Į³Ļ>‹‘#GĀÅÅøxń"¾üņKģŻ»/¼š† †)S¦˜ļ7›Œī×É)±hoo:ŅĆŁŁćĒ: ŗ666HHH@BBŹĖĖ‘““ƒ'NōŖ茵k°²²‚T*…T*Eaa!ąį‡ʛo¾©)Ļ·²śå#‹\.Ē<€ĘĘF455õč:ööö˜4i¢££įąąpĒqõLˆ”‡‡Ž= oooĶXll,fĻž ooo,_¾ėÖ­ÓJģŲ±  Ć t3ÅĘĘāžūļ‡B”@aa!.\ø€įƇė\ūóĻ?Ē#<¢56kÖ,„‡‡ćŅ„KØ©©Į… 0hŠ Ķüøqć0vģXDDDąśõė8{ö,bbbkÖ¬ĮÕ«WįļļćĒė”cĒĒĒć‘GĮģŁ³±eĖ|ņÉ'LX8+++ŲŪŪ‹īÉū훑0¦NŹ.ģĢĖĖ S§NEJJ ņóóqęĢœ;w=z}nn.&Ož ąf_¹\Žŗŗ:¬_æ3gĪŌ$”»Ž™ł¤VąV<ņ–/_Žėׯ£©© ŽŽŽ'''Ģ;qqq;3K$ 2………())ŃI8::┇Ņy••&OžŒK—.!..N+Š%<<ŽŽŽ(++Ó*ݳg`Ń¢E×cK$<łä“Ų²e ²²²ōC–ÅŁŁYtI„RÉmEĘĻĻŃŃŃB‡AF “ÉŽššp¬^½yyy=zŻ­½ ŗŹśˆ ¹ļś’SO=u·!õKLˆTXX˜Į9Ķ×---š$Ąģٳ1{öģnĻ[WW§ł`¦Æo€›››VÉå­\\\ƒ6xž®Ė[Ÿåēēčž=Ą!Cåååččč0Y'''½=-„ÖŽŽĪ§Ī"!‘H0cĘ &eˆˆˆˆĢˆwY"ÕuĆ­Ow˜[[[±qćF¤„„”ØØķķķØ««Ckk+ZZZPZZŚķöNŻ[ßŗĢžčŖ X³f ŅŅŅ wėŗĪ––Ń®+§ž±··:½˜čččn“ŠDDDDd|LˆTožŒ•——#55§OŸÖ{>WWWŒ1•••ø|ł²1Āģ‘®flŪ¶mėńkš››™°pvvvB‡ WO×)“iŁŲŲ°÷ŻVqq±ŽågDDDŌ{Lō!ƾś*NŸ>   Ķ®öööĖåZĒMž<٬I€®¦N’ž÷æ1jŌØ½ę×1“å±²²‚•••čnŗÅO5aĀ„n+žØڲe T*¦OŸŽ³gĻ"??šõõE[[ZZZpß}÷ &‘Ec łé§Ÿü1¦M›fšøĪĪNs…ą—„ ƒ Bll¬YÆM²³³ėՖa¦dīļŅåźź …B!t$Bķķķppp€R©ŌlY;`Ą”••ĮĪĪŽ;|TčČ8:::4MŲ"""ŗ=¶øøŲ!iJJJŗ=.??AAA źń¾Ļ$nb\Ą$€š<==Łų“ō ÄčŃ£±eĖųųų`Ā„ puu…ÆÆ/¬­­ł}CDDdü×T nvP÷ņņŗėóYYYĮŃŃMMMøxń¢Įf[0ėRHJJĀęĶ›ńÅ_ą‰'žŠ,ųµ““4@”Phv< ĖĘ$݉˜˜ŠŚŖ6>>^Øpˆˆˆś$V ³³SóÄū…^0Śy/¼švģ؁ŖŖ*7·ĢĶĶŇ~ˆūļæ_s¼¹Ź“{ģ1Čårdgg#99ėׯG~~>***PTT„œœ,_¾/½ōą7æłYā"ÓćS;&ˆˆˆˆØ?ß'tźµ·ß~™™™8uź”Įžžžž?~<6mڤI˜š··7Ö®]‹yóę!##MIIĮĖ/æl–øČō U}I„R ‘`˜€D"AJJ 22Rk.!!ššš0ųzĶėo½ÉŠŽŽĘéÓ§±råJdff¢¼¼ppp€‡‡’““ńĢ3Ļ`ļŽ½hjj‚Z­Ö¼ÖŻŻ)))Ż.MFJJJ·=¤’”)SpįĀ|żõ×ČČČĄåĖ—ŃŌŌkkkxzzbšąĮøļ¾ūšĄ@*eJ_!ĘJ€[æļ‰ČüjkkqōčQ“œ»¢¢Ā$ē%""źKÄ÷ ½J„Ų½{·Ž¹Ææžś¶Æwuu5ųśĮƒć½÷ŽėöõóēĻĒüłóµĘāāā ž³Ė“O>‰'Ÿ|²ŪcVÆ^mpĪŪŪ/¾ų"^|ńÅnĻA}‡“D$¬²²2Ķn6DDDd~ü„ND&ĆåDŌÅĮĮnnnB‡ADDŌļ1 @D&#“É„A— cāĉ˜8q¢Šaõ{\|MD&ĆžDDDDDāĀOčDdR‰Dč“01ADDDDż? ‘I1 @D]ŠŠŠ°qćĘ;zĶŪo捽{÷bÓ¦MZćĒŽC]]1Ć#""źŲ€ˆLŠI"ź¢T*Q[[‹5kÖĄĒĒ•••pssƒ——6lŲ€ŽŽ<ńÄœ9sū÷ļGLL źėė5ēillÄ;#”C‡āļ’»Po‡ˆˆČ"ńÓ0™”ŲnŗÅQ#“ÉPPP€sēĪįʍČĪΆR©Dgg'FGGGͱQQQHLLÄŌ©SQPP wrrĀ“iÓšōÓO ńˆˆˆ,? ‘I‰­@lńõG666čģģp31gmmßžö·šōōď?žŲ£sH$ttt˜2L""¢>‰ĖˆČ¤Ä¶%Ÿ·-$ź/\\\ŠØØ(”––ĀĖĖ ÕÕÕĄgŸ}†ĪĪN<öŲcZÆ9r$ 66Vk|ҤIųüóϱdÉŲŲؘķ=Y:&ˆČ¤T*•Š!hįr"įxxxĄĆĆĄ/7÷]^|ńE@]]öģŁ2df̘˜9s¦f\.—#66Ė–-3WčDDD}“DdRb«ąr"a”••aƆ wōšüü|ģŚµKļ\vvv·ÆMMMEHHČ]ˆˆØ?`€ˆLJlIV £½½%%%f»^KK‹Ł®ÕŲ؈ķŪ·¼¼¼0a³]ūV999HOOGKK Z[[1tčP̟?æWē:ž<Ī;ˆˆˆ@dd$ //gΜDGG3ŃBDd˜ "“[€=ˆ„—’’b²æ‹ū÷ļG{{»IĪmHYYęĶ›ąfƂ½{÷šõśšüĻ?’¼ÖŲ#<Ņė$Ą?ü€„K—–.]ŖIüōÓOųĖ_žX±b“DDˆI"2±õ˜ ƒ„„“5ó;t萣“bšĪ;ļY&ˆČdŗ¶kkk”C "2Ŗŗŗ:”——ˆĆ‡cȐ!wuĪĒ{ ćʍŽmˆDD$"L‘Ɉ1 ĄJ"ź­¬¬,¬]»łłłP*•pqqĮčŃ£‘’’¢sģ©S§šÆż šŠCĮÅÅkÖ¬ĮŋŃŽŽOOO( ,^¼ …Bó:•J…7bļŽ½ØØØ@]]llląīī777ÄÄÄ`޼y°··üß’żŖŖŖ4ÆļģģÄņåĖ£GĘāŋ„„„X½z5Ī;‡śśz455ĮŚŚ... Ā‚ 4%’påŹ|’ż÷€9sę0@DŌ‡0 ŠĻŌŌŌ   QQQÜW™L®££CčtXYńĒ‘Ųœ;wŸ}öœ1iŅ$\»v Ø­­Å“iÓšÓO?A©TĀĖĖ ×Æ_Ēo¼÷Ž{®®®šõõł LćG}„?żéO:ć7nŌl{x««WÆbÕŖU€“'OāŲ±cz—H}üńĒ8vģBBB V«1kÖ,lŪ¶­ŪXŽ’}9röööųꫯPSS£™+//×\·©© ‹/ʙ3g0~üxŌÖÖ<ē{güQ³%ć™3g4ē ÄŌ©S»‰ˆˆ,Ūd÷3ūöķC\\nÜø!t(Ō°€ˆz¢­­ IIIX¶lŅÓÓįķķ kkkœ:u ---˜5kRSS1aĀLœ8;wīÄõė×įāā‚ŒŒ “ĒW]]W^yEókGGG„‡‡cĈšööFeee·Æ?räT*¬­­įķķ ;;;Ķ\}}=Ö¬YHOO×$lll0nÜ8¤¤¤ %%#FŒŠüü:{ö,öļßßćųßyēMĄĻĻÓ§OĒܹs1wī\Œ= T*ńĘoōųœDDd¹ųHŒˆLFlI™L‰D"tDt‹k×®lmm5?322šśėÆćņåĖnnķ)•Jaee‰DgggÄĘĘā·æż-6lŲ`ņ>¬ŁrpŲ°aHKKƒ»»;€›; üž÷æĒæ’żoƒÆwuuŏ?žˆ‰'øyĆżź«Æjšł]¼xĄĶķ÷ŗ¼÷Ž{ųć’Øužżė_ųŪßžšÄCAAŹŹŹLŸķ IDATˆ‹‹Ć®]»@SńW\\ ¹\©TŠÜÜ\8;;k7!!‡Ęłóēļšw†ˆˆ,“¬µµ„„„šõõÕzŖŠ[7nÜ@ss3œįééišø¢¢"(•J899ĮĖĖ뮯K}—Ų–p)‘ųäåå!**  Lž<J„|šbcc”P(`kk‹öövŲŁŁĮÕÕnnnhjj»ヒY³f™<Ę®¦{0ž|M$ -ZŌmąĮŌ$€› J,X I466\\\4Ē|ūķ·hll„··7ÜŻŻįīīŽ‰'¢øøšć\]]ŃŚŚŖłµ••är¹ÖõÓŅŅ T*‘ŸŸćĒ£®®uuuØÆÆGee„&łŠÜÜ|'æ-DDd”ų‰Ų¼žśėXµj,X€+V ½½iiiųńDZuėV\ŗtIėųÜÜ\DDD`’žżZ@nõå—_āµ×^CQQ‘f, Ė–-ĆĀ… 5c’üē?ńöŪo£¬¬L3¦P(šžūļcΜ9F}ŸŌ7(•J”CŠĀ$‘ųL™2Eė×]é'L˜ ÷ųøycm.·®¹æ5Š„»Ä9M‚ćVś~ŻsĻ=pssCuu5²³³‘­sŒL&ĆōéÓńÕW_éÜģ²cĒ<žų㨨ØčŃńDDŌ·±'€*))Į?žˆO?ż‡Ęȑ#{}®““4<ńÄø÷Ž{‘––†ÜÜ\¤„„aŌØQxā‰'••ąę:Åēž{ųĆpöģY\¾|‡Fdd$.\ˆśśzc½=źCÄV Ą~DŌ·žģŠ×ÜĻX[ŗŗŗ"==O>ł$¢££įėė«sīĪĪNlٲoæżvĪ©R©šÄOč$ģķķįććƒŲŲX„††%~""² |,f”~žłg„„„Üõy¾łę„……aåŹ•šµ˜aaaˆ‡ŸŸ6mŚ„1cĘ ;;X²d‰ęµųĒ?ž%K– ²²R«Œ‘`%õ ŽŽŽšÆoŻŽÆĖ­ĖīFnn.Ī;‡ŌŌT¼žśėšńńŃ\³¼¼ŁŁŁX“hč­Šēāŋø~ż: 99_~ł%ؕ\˜;w.ņóóņˆˆHüX `ÜÜ܌’€ĀĀB„††āŹ•+(((ŠüWZZ ???”––øY~yćĘ ¬\¹§OŸÖt Įśõė¹0éÅ$Ż cŻ\ß-Ķ×6l@CCƒę×mmmųģ³ĻŒrķŪ·c޼y˜7ovģŲ”wwwGxx8¦M›¦ėź#p;mmm再øzõ*233=Y ~"¶@Ę,i®­­Åž={°iÓ&½óC‡p³ŅįƇń—æüEóĮĆÉÉ !!!xä‘GšüóĻ-&ź;Ķ€I"qĖĖĖCII ¼½½!‘H›› ÜøqQQQ8ž<&Ož 777³Ę•˜˜Ō××ćŌ©SšōōÄ Aƒ •JQVVf“%q‘‘‘šÆ/^Œwß}īīī°¶¶Fmm­Öī=:§ææ?¬¬¬ŠŃŃÆ¾ś Ē×TŌŌŌąĢ™3hoops©AGGVõqü)ßĒŻī&ĢÉÉ =öV¬X”w¾ėiL&Ć'Ÿ|‚O>ł(**µkאžžŽ^xaaa˜1c†Ńć'ĖĘJ"ŗ—.]ĀäɓńóĻ?C­VNœ8777ŌŌŌĄĘĘuuufO899įć?ĘāŋŃŃс¶¶6Ķö…޼¼wī\Ķ׃ Ņśu—ššp͚DC¤R)FŃ£G÷"rźoĘ`%‘8œ;wĪdÅX…DDD$&L‘Iˆ- •JY±B$?üšƒŠ!õ[L‘Iˆķi— K*•ĀŽŽŽlדÉdf»‘%į§b"2 ±Up)‘°üüüš·æżMč0ˆˆˆś=ÖĘ‘I0 @DDDD$>L‘Iˆ- ĄåDDDDDL‘‰ˆ­'+ˆ,Ƒ#G””µZ³gĻ")) ĶĶĶø|ł2’’’PYY)tˆDDDI"2 VQoŲŪŪ# `kk‹€€H$ŲŲŲ € ’ˆˆˆī?‘Ń©T*tvv †&ˆ,CTTÖ¬Y Ń|ķļļÆłšˆˆˆz•Ddtb«ø€ˆˆˆˆ`€ˆL@lżVL‘ °€ˆˆˆˆHœ˜ "£c€•DDDDDL‘ ˆ- ‘H˜ """"w "[O&ˆ„qäČäääC{{» ×'""~2&"£[%ū £££CtIA""¢žŽI"2:±%lll„Ø_?~դ޳³³:„>Olg˜ """"ś“Żpvv:"‹#¶$—ż‚ĖˆČؘ """"/&ˆČØÄÖ€Ėˆˆˆˆˆ~Į$+ˆˆˆˆˆÄ‹I"2*&ˆˆˆˆˆÄ‹I"2*±%ø€ˆˆˆˆčL‘ŃØT*tvv †Vż‚I"2±5˜ ’ĒŽ}ĒUYž‡½7 Ø .5APď©åĄmöqkZŽ2·fęģS˜M³™f¹2µ”X™SĆEn™‚ȐČ8æ?ųq=īAö~>>qŻćŗīĆįtī÷ż¾Ž—B!„ø•„Lu›  V«ŃÓÓ{ŚĆB!„¢Ś €ā‘©nAÉB!„B—„Lu› A!„B!tI@ńČT·LY@!„B]B<2Õ- ™B!„Bč’ €ā‘©nAÉB!„B—„ŒŌB!„¢zÓŚo޼yhµZ¶FVå1æžś+¬Š>nÜ8,--+=&//ššš ķ¾¾¾üē?’¹ĻQ‹gQuː €B!„ŗ$š ˜={v… @Æ^½īŲ¹s'’ūß’*“æüņĖUrss™={v…öW_}U‚ €B!„՝LB<2Õm:€ŌB!„B—„DII „„„O{ }}}ŌjłˆB!„āVņ YńHT·©’ „B!DEB<Õ- õ„B!„ØH >&Ož\! ŪŪŪūŽĒ“k×®ŅöŖŠ˜ššņę›oVhøū Å3O‚B!„BTx,Z“č¾éܹ3;w¾ÆcĢĢĢx÷Żwļ»/ńļ A!„B!Ŗ?™ „x$de!„B!Ŗ? ! ÉB!„¢ś“ €⑐ €B!„՟„„LB!„¢ś“ €⑨n™B!„¢" !‰źŠh4ØTŖ§= !„B!Ŗ !šV«­VÓ¤€B!„•“ €ā”U§, €B!„U‘ €ā”U§,zB!„BTE‚Bˆ‡&™B!„Bü3H@ńŠ$ „B!Ä?ƒ„­ŗd:€B!„•“ €ā”U·š’ „B!Då$ „xhÕ-@‚B!„BTN‚Bˆ‡V‚jµ}}ż§= !„B!Ŗ% !Zu H=!„B!Ŗ&A!ÄC«N5d*€B<^¼óĪ;O{UJJ S§NE«Õ>ķ”!Ä#'A!ÄC“L!„ų÷ųūļæŁ¶mŪÓF„,XĄ‚ ś<©©©,^¼X‚Bˆg’„„¤¤„ŅŅҧ= …d!Äć5~üxŽ9ņ“‡Q©ųųxāććŸö0„¢Z“ €ā”T§, €BÜīŪoæ„E‹ŹĻĒŽĆĘʆ#F(m«V­"00€S§NŒ‘‘†††xzz2~üxeź×W_}E»vķŖģ/55•^½zQ£F ōōō055åÅ_$&&€?ž˜®]»Ņ«W/lmm™5kZ­–… āīīŽžž&&&ųłł±gĻ弑‘‘ųūūcbb‚±±1,^¼€;v`ccĆźÕ«Y½z5666 8€„„zö쉕•*• GGGLVVP6„mĀ„ ŲŪŪc``@Ɔ Y»vķĆæšBQMI@ńPŖ[@¦!„.žśė/RRR8xš žžžüöŪoŹ>æżöĶ›7`芔ųųųpńāE®\¹ĀźÕ«łī»ļŲ¼y3………dggWŁßųń才eŪ¶m$''óēŸRZZʰaĆøqć?žų#ģŽ½›‰'²nŻ:–,YĀŅ„KIHHąäɓ“iÓ†īŻ»“›› @’žżyžłē‰'))‰oæż–÷Ž{ČČH‰ˆˆ K—.téŅ…ˆˆęĪ ĄĄ)..fļŽ½\½z•~ųØØ(¦N ĄgŸ}ʆ Ų°aIII¬_枝;w>ā߂BTB<”źT$@!nW«V-źŌ©Ćžżū8tčC‡%--M ģŪ·öķŪe)õÄÅÅ;;;Ų“iM›6½§žžųćf͚E‹-pppĄĖĖ‹™3g*}x{{³xńbš7oŽ ?žų#Ƈē…^ FŌ­[—… RRRBTTÅÅÅL›6ńćĒcgg‡µµ5-[¶ÄĆƃ .`ee…öööŲŪŪćć惇‡YYYģßæŸ„K—āķķ££#~~~Lš4‰ß’(+t8lŲ0Ś·o͚5cƌņW „Պ,¦-„x(Õ-@‚BQQūöķŁæ?aaaDFF2mŚ4|}}‰ŒŒ¤yóę$$$@=芔ŌŖU Z¶lIƒ īŚOII )))ŌŖUK§ŻĻĻččhåg'''ķ©©©$$$0jŌØ ē¼~ż:śśś4lؐ×_¤¤$n޼ɵk×8sęĢƒŃiiihµZ,X€ZżϾÉĢĢŹVpssÓ9ĪŻŻż®×*„’TB<”źéBQQ»vķųąƒøzõ*éééxyyįļļĻ”C‡ČĶĶÅŪŪ[[[ ,=~Ȑ!œ?žøø8NŸ>Ķ‚ xēwxõÕWļ©?}żūūŠ©ÕjiŲ°!:tŠiļŠ”Ļ=÷±±±„††2sęLśō郔”!¶¶¶¼öŚkw=ołyn JM•JUåqBń,’ €ā”T§ézzzčéé=ķa!DµÓ¾}{† BDD-[¶D­VćļļĻāŋÉĢĢT¦dee1bÄV­ZE«V­”ć,XĄĪ;ļŠÓÓĆĮĮøø87n¬“Ÿū ģģģˆ‰‰įąĮƒäēē“’’Bxx8ŃŃŃ:ĮhKKKŽ;ĘéÓ§IHHĄŌŌʍĒńćĒIKKćļæ’fÖ¬YÄÅÅн{wV¬XĮoæżFjj*Gežüłór !Dµ&A!ÄC©NA™ „U{žłē‰U–“±±”Aƒ¤§§Ó¶m[Ōj5›6māĄųūūcccC`` NNNĢ™3CCC,,,Ŗģgɒ%xxxF͚5ńóó#//U«V`dd„™™™Ī1/æü2Ƽņ “'OĘÓÓ>żōS6n܈­­-AAAŒ3†=z`jjЧ§'{÷īå„—^R–ś5jFFFųśś*S ¾łęJJJčŅ„ ŽŽŽ`bbĀŅ„K4h}ūö„oß¾888ЧO €µµõ£yį…¢šQMŸ>] ąččČøqćžöxīĖ¢E‹ČÉÉŃisqq”oß¾OiDāY”Ķ_|Q”=((ˆŽ;>…U/'Ož¬2½óI³³³ĆĆĆćiCˆgVAA7FOOóēĻßqߓ'OŅ£G–/_NHHČᣱyóf&OžĢ²eĖ UŚ£££™4iū÷ļ'77—•+W2dȐū:·V«„nŻŗœ={V ^z{{SÆ^=6mŚōč.D!Ä?Īž={ˆˆˆ`ĒŽ„ēĪ+Q«ÕÅśśśEzzz…śśś&ץĄ G£Ńdj4š ƒ4ƒ4F“ŖÆÆŸn``”ÆÆŸe``­ÆÆŸghhxĆŲŲø°“““ČĄĄ ä™« ˜˜Čūļæ’“‡!ÄæFuŖ Ó„x¼“Z-—/_¾§Ś ,ĄĄĄ@I3’'ÉÉÉįņåĖäåå铿ōŅK?~œž={āééI“&MčüåóĶo»[įéøBń8sēĪeŹ”):ĮW­ZE:uh׮˖-£Q£F9r„³gĻ2mŚ4ÜŻŻŁ±c»vķ"55;;;BBBčÖ­ŪyŹ[>ß~’žżōļß_i?tčīīīÄÄÄpčŠ!š7o®lŪ·o5jŌ ~żś@Yeōß~ūqćĘ€……iiiģŻ»—Ļ?’œžżūsųšį{Óāŋqpp`šąĮ:ķŸ~ś)óēϧsēĪōė×GGG ˆŽŽęƒ> OŸ>JĘĄüłó™3gōīŻ›:uꐟŸĻ… ųųć #22„ß~ūĆ‡3sęL¼¼¼(,,dĻž=|öŁgōčу˜˜LMM2d[·n„_æ~ōķŪSSSX»v- ,PĪikkĖ¢E‹ČĶĶe޼y“jՊ=zŠ¢E ^żu¾ūī;†JĻž=144¤ØØˆččh.\HĻž=‰½§Z [qq1999XYYI&‚BüKż£ƒ~~~>ķaˆ©Śµk?ķ!ˆzõźQ³fMöķŪ§ÓIXXDFF2fĢRSS9{ö¬’¦Ÿ——GDD£G®PT·_æ~\¹r…mŪ¶‘ŸŸÆ3u *III¬ZµŠE‹UX~ėÖ­ø¹¹±mŪ6›įnŻŗįččČšįĆ9tčnnn³dÉź×ÆĻž={*Ō ! €+VčņņņŲ»w/Ļ=÷œŅ†įįįDEEHbb"?üš]ŗtażśõ:ē4hM›6åĢ™3@Yś’”)SHIIa޼y4k֌)S¦Tø¶&Mš°bÅ öēŸž’’¦NJbb"µjÕŗėkų8½õÖ[„‡‡“››KVVÖ—ł»_ĒŽ£aƆŹūd÷īŻŒ7Žæ’žū‘õqÆŹ.®®®O¼o!„ų'ųG$•Nˆ§«:eh4šg¦Ł£ϧŸ~Ŗ3w>..Žß’___<==łé§Ÿ”§‚õ› £[ IDATźÕć£>āwŽaĖ–-XZZņóĻ?+Ū;vģØdTęųńćtėÖMYƒ»ü˜ņ§¦åOˆĆĆĆ;v¬’f]™9sꊱcG\]]©WÆ®®®øøøŠØQ#e½p( |žłēōė×O9ÖŪŪ›iÓ¦1gĪÖ®]K‹-t ŗ?8@³fĶīéõģŽ½;_żµņó’%KX¹r%={öTڼ¼¼xēwžHʲ¾łę®_掵µ5111\½z???rrr8xš ²ļžżūŃjµJA~~>Z­++«JϽbÅ ²³³+ÜŠWå½÷ŽĆĀĀ‚‘#GVŲ–››‹……E„OĆū÷ļOūöķ±³³ąŅ„K\æ~W_}µŅ­[·ĘŌŌ”ččhö čnŻ?<<œ˜˜9uźZ­–_|±Ā¾†nŻŗ)A€{±k×.l•[•_ojjźS ”––ņžūļ³bÅ śōéóH³JKKiŃ¢QQQŹßRQQYYY¬ū1gά¬¬ųąƒžJ’BQŻż£ƒBˆ§«ŗDEß’=äŪoæ%;;›¼¼<8 Sü¬E‹:75kÖäśõė@YĮĒĒGg»Ļ_ļ¾}ūČÖ­[ÉĢĢäęĶ›:tˆüüüū描IIIģßæŸŲŲXIHH`Ɔ ̜9“£GbmmMbb"7nÜ`÷īŻŹ±¹¹¹$%%”ÕjIHHP‚匌ŒųóĻ?©Y³ę=øōóóSžūʍ¤¤¤PPP Óo^^W®\¹ļk}PķŪ·gķŚµ8p€®]»rčŠ!e¬¹¹¹|żõפ¦¦booÆd ”ģķķńöö&<<œ .ąåå„ZÜÜÜšōōTnĢļ&55•åĖ—3cƌJ³:tčĄ¼yó ¤uėÖøŗŗR«V-eĪž­Å3228yņ$‹/®“?FCNNŽN[UE&Ė߯åŸY©©©ŹõW¦²b~wāććĆ”C‡Ų“i™™™Źū>;;›_ż(»Q~Z¢££łóĻ?ÉĖĖ#33“M›6ѽ{w4 .\ąĄܼy'''Z“hA5€²€žV«ÅĄĄ€ØØ(|||hŲ°”ι÷īŻĖÕ«WˆˆˆąĀ… “iÓFŁž——ĒÆæžŹÕ«Wqss#44T'tłņeöļßĻ7°±±”}ūöŲŚŚVy-Z­–ČČHNŸ>µk×Ęßßāćć9|ų0±±±˜šš²qćF\]]ńóócóęĶ“oߞƇ“œœĢŠ”C²Ģ„ņéRöööėt²²²ˆˆˆ ##+++š7oާ§'WÆ^%**Š€€öģŁCjj*AAAŌ­[—ččhöīŻ‹©©);w¾ēæ#!„x$ „x`Õi:€ŌØØ““”:O@@ĘĘĘJÅņ[Żi©½¼¼<ŒŒŒtŚT*ÕSĆžłgĀĀĀh×®®®®ØÕjœœœčbcc±··'$$D§½  www¾ūī;^~łe“Z-+V¬Ø0Öąą`ŠŠŠČĪĪ®Põ qćĘĄ’ŻtŽĶ­Įņ5ä—/_^įż×¶m[JJJžČš[ėtķŚ•ČČHģģģššš //O¹izį…Ų»w/µjÕŅ¹įŽŗu+3gĪ䥁lŻŗUēļŚĢ̌9sęšĘoÜu|š†±cĒVŗ}ęĢ™ØT*¶lŁĀĒLAA²M­V+Y&&&dffe7•{÷ī­ō|å+Üź^³ŹƒU½ļ7M~ųšį¬X±BIA777ĒĄĄKKKZ·nĶO?żt_ē{ŌöķŪDzeĖ€²Ś †Ī;óÉ'Ÿ0uźT|||ppp ..Ž3gΰcĒBBBX½z5;vģ -- ooo¦L™R!šŻwß)5#V­Z…‰‰ 5kÖŹ2MüżżqttD__ŸƒҦMvģŲ”Œåõ×_ĒĻĻ;;;.^¼Č°aĆŲµkW•Bżśõ楁ųūūSZZŹ_ż…¹¹9ĒŽćļæ’fńāÅŹt€””BCCńóócąĄŌŖU‹¢¢"źÖ­ĖŠ”C™?>óęĶ£uėÖXZZrīÜ9RRRųć?šņņāĀ… ųūūÓ¤Ij×®Mff&£GfŃ¢EŒ9’ØØ( @ķŚµquu%%%…±cĒ2räH~śé'7nĢß’Ķäɓ9}ś“„Ն„¬:eH ¢óēĻsčŠ!RSSu–1«lٶŖX[[§ÓVž„³*+W®dҤIĢ;Wi+’r~悃ƒ™9s¦ņŌ®œ±±1µjÕ"55333ŒŒŒX±bõźÕSöÉĶĶ%22}}}ģķķ•Ė[½ńƼųā‹4mŚØų“öNéĢVVVčėėóÕW_éŌÉĪĪęȑ#OlzJ:uØ]»¶ņ”’Š”Cųłł”R©hÜø1fff:tˆvķŚqāÄ ^zé„ ĒÆ[·([Ž/99™ųųx.]ŗÄ’%KxóĶ7 Ö).x»ĢĢL>łäʍWå “””!sēĪUŽiii$&&Ė–-[ųśėÆiÖ¬³fĶRžÜ‡‡‡3jŌØ‡~nW>ż”Ŗģ”ņL˜{qōčQV¬XA·nŻX»v-fff:Ū—/_žŌƒ£G¦wļŽŲŁŁńÓO?Q³fMJJJ˜3g+V¬`ąĄŹ¾Æ¾ś* .Tołłłœ={¶Ź@Ž'Ÿ|Bii)zzz|óĶ7Źt€Ÿž™ĢĢL¾’ž{eśftt4Mš4Q @N:•õė×+…”lŗŠ»ļ¾«3u§\RR[¶l!%%EY¾²  €zõźqōčQ:uźD§N×_ż”-yy{PR嫛ŌŌT²²²čŲ±£N{—.]t–H yąLkkkśM^^^˜››sõźUāāāČĖĖ#00ėׯ+’üżż9wī\„ē355E„R±oß>ŅŅŅ€²€`BBžžžwĻ€”æĖsēĪabb‚···Ņwff¦N’³gĻfūöķ$&&rłņeŽ;Ę_ż„PtppPõė×§iÓ¦J Fƒ««k…©+Bń4I&€āU§ Ą³œ °xńbNŸ>Ķ_żÅ…  eĻž=1qāD*}jęķķMš4ĮĒLJĀĀBŽ=J:uī¹`WHH>>>xyyŃ“iSņóóÉĢĢ¼ćœŻaƆ1`Ą<ˆ­­-111£ÕjÉĪĪVęŪvźŌ‰¾}ūҤIFÅ Aƒ*½önŻŗįęꆛ›–––¤§§“ĄĖ/æL÷īŻ²‚t={ödķŚµøŗŗ’››ĖéÓ§•›ĪįƇ³vķZÜŻŻiŌØ*•ŠæžśKY-@„R1sęLFŽɇ~ˆ™™‰‰‰:_ī+NÆ^½X½z5®®®dgg­S<šIhß¾=«V­āÓO?„ØØH§vŸŸ~ų!{öģQö-wćĘ –/_Ž£££RøńVåĮ—;ż}åęę²téRF]åūB­V³uėV>̐!C*H®_殳Üc½zõ°µµeĖ–-¼žśėśgÖ¬Yōčу &Üį•©ÜsĻ=‡Z­fćʍ¼öŚk:ć)((ąūļææēs•OA©ģf椤„_~łå¾Ē÷$”Æšqū” ąĖĆ|¶WhS«ÕhµZ²²²ŠjµŹR•·ŖŖ€¢„„%~ų!Ó¦M#&&•J…««+:t <<ü®,o½–¬¬,rrršššØ°_yfŠž={0`ÅÅÅŲŲŲ`ffVįšnŸņ£V«+LS‘„…Ս„¬:žåL€)S¦(_Ų===‰ˆˆĄŪŪ(«N_՗t===öļßĻĮƒ¹zõ*†åĖ—SZZŖ&Ož\įx___åé¶Z­ę—_~įšįĆ$&&baaAŪ¶m9~ü8 4Ø“ß=zpéŅ%"##)))ĮÉÉ ???öļ߯ó…yƆ DFFråŹš4iRé¹źÖ­ĖéÓ§9sę ńńńäää`ffF‹-tŠŗ“ĄÉ“'¹zõ*FFFųśś*ūXXXpōčQ¢¢¢ørå %%%Ō«W///å“'O¦GDGGcddD`` 111ŹTŠ%K–Tx"ڱcG9yņ$)))įēēwĒ ÉćP~c’ŃG”V«uVoš÷÷gĮ‚¬\¹OOOšĶ›7§V­Z,Z“ˆÄÄDš4i‚½½=7oŽ$::š•+WbjjJ§NŖģ{ٲeäēēßµn@·nŻX¾|9ĮĮĮtģŲ'''4 ‰‰‰¬Y³†’’zõź”ż=Oœ8‘™3gāėėKļŽ½qqq”øø˜„„Ö¬Y”„¹?žūß’²jÕ*:vģHĻž=±°°ąŹ•+¬[·N'óån‚‚‚Šh4Lš4‰ääd„öD||>>:ėŹßĪÓÓSēé’­Į‰Ŗ^k ļ8¶Ē­¼Āž… hҤ‰Ī¼üņś×®]S2'ʰsēNŽxć Ö®]«ŲÓ××§eĖ–¼ūī»U¦ƒßøqƒ÷ߟ”C‡Ž5e|ɒ%˜˜˜°fĶ%+”œ‡‡K–,Ń©W1}śtLMMłąƒ˜9s¦ĪžuėÖeķŚµ„††Ž±Ļ;łä“O044ä믿VVwP«Õ„„„0qāD† rOē©U«ß|ó 3fĢ`źŌ©J»Z­& €U«VѧOŸ*§<-öööŹ ·y>\”xčŻØT*Ōj57o޼ēc\\\(--åĉŹ“w€„K—²iÓ&„ĘÅ­öķŪG’žżIJJBOOGGGiŌØ‘ĪĶü½Œ„vķŚ\»vøø8Ģƒ·Žz‹ćĒóĆ?œœ\į3ņNS„„āŸB‚BˆR²ąŁq/žśė/ŠŠŠ*dÅŲŁŁ‘‘‘V«­4=»~żśģŲ±ƒ¢¢"ÉŹŹĀÜÜGGĒJ縟:uJIoÖh4üż÷ߕīw;–,YĀ’%K”~ōōō°¶¶ĘŃŃ±Āž*•Š &0aĀRSSIOOG„Rįä䤳„[¹˜˜˜*WcxžłēÉČČŠyĀmllĢgŸ}ĘŅ„K‰§ØØggg¬¬¬(..¦[·n:×eooOFFF„)ē½zõ¢WÆ^$%%qżśu qppĄĀĀ‚ŅŅR222tV®8räH…ŗńńńOd5‰rzzzŒ5о}ūŅ·o_ģģģˆgóęĶ,_¾ü¾ĪUØ3f ķŪ·§[·nw=ĘŌԔѣGBÆ^½pvv&%%…o¾ł†?žøŅcüüü011!006mŚ`aaĮłóēŁµk—N ØqćĘĢ;µZMŻŗu+2R£F śö틿æ?Ż»wĒŃё+W®°~żz¾żö[ ,płę›orźŌ)ŒŒŒ8{ö,æżö[µZG!„^›6mę@YZXU˱!ÄķnÜø”¬µ]øŗŗŹ¼KńÆf``€±±q„1###Œļødł ¹““666U֌ŒŒ”aµZ±±ń}ß¼ZXXąąą€Ż=LMM±³³ĆĪĪ®Ā2•ėvzzzU^枞666Ź“qØüŗT*ĘĘĘwœzdnnŽƒƒ666ŹX*;ĪŠŠ°ĀuÜiü‚J„ĀÜܜĄĄ@„Ÿ’üē?xyy‘——GFFnnn¼óĪ;téŅ( ņŌÆ_’®µ1 lŗGqq14hŠœńõõÕŁĻČČHY’ÆS§N4iŅ„¼¼uźTĀĀĀčŌ©ĘĘĘÓ¤Ižüóχž ńØEDD°}ūö{ŽŊ\»vķ‘Ž!))‰åĖ—sżśõGzŽŹdgg³|łr {_•Y¹r%)))O„o!„ø !HuŹxÖ§³~żzÖ¬YĆéÓ§ÉČČĄĘʆE‹įččH“&Møtéo¼ńAAA\ŗtIē DD„ņ„ŌŻŻ’ž÷æŲŚŚréŅ% 9}ś4™™™Lš4 €_ż•/¾ų‚?’ü­VKaa!ćʍcäȑ:cKKKćĀ… $''ćźźJPPƆ #77—ččhΟ?Ϛ5k*½® .0jŌ(¦M›FVV………lŚ“‰Ļ?’œļæ’^Łļ÷ßgćʍ¤¦¦biiIŸ>}šņņ">>žĀĀBŽ9¹sēxūķ·Ų°a?žų#gΜA«Õ’ŸŸOÆ^½?~<7nääɓŹu^ŗt‰–-[źŒM«ÕŅÆ_?üüüˆ'??ŸĆ‡“˜˜ČģŁ³•ż¶oßĪK/½Dzz:‰‰‰4iŅ„1cĘ<ŠļYˆĒiłņ儇‡ßóžcĒŽÕ™.ó(œ={–Q£F‘œœ¬“…‡‡+U°„k×®1jŌ(ņóóļł˜0o޼GŅ’øqć”%¾„¢ŗy¶æ9 !›źxÖ3ƌCNNK–,įܹs`bbBżśõ6lcƌĮŠŠwww¬­­111ĮŻŻ]ē“&M¢cĒŽ@Ł|ųƒržüyÜÜÜšōōdāĉ¼ńĘŌ©S‡M›6Qæ~} l-õ¶mŪ2vģXå)=”= ·¶¶ _æ~\¼x‘~żśаaC‚‚‚ˆ‹‹«ōŗ>Œ§§'ƼņŠŅÄŠ”Cuž ½õÖ[ĻŁ³g‰ŒŒÄŅŅ€ĘóŹ+ưbÅ š6mŹśõė•kÓh4ņį‡P£F %µßÕÕµĀkœœLLL Ó§O§Fxyy1nÜ8–.]Ŗ3Ž—^z &L˜ ŒUˆźäöéDOCpp°ĪēĄŽ;Šjµ„††>„QżŸsēαyóffΜł“‡"„•„D¦<9jµšiÓ¦1mŚ4 lŽbb"ū÷ļgāÄ‰ŲŚŚ*7ŽU±µµUž;==­VĖäɓu²(RSS•Ō}¾žśk.\HFF7nÜ %%…ŅŅR/ń·Īł××ׯP@OOÆĀ—žråŁ·»żiå­cOKKCOO#Fčģ“˜˜ØŒŻÕՕ5kÖ0kÖ,²²²((( 99¹ŹZ•)ŸZąąą Óīģ쬓"}ūvn޼yĻżˆ¦ŒŒ öķŪGJJ Mš4Įßß’¾ĻInn.¾¾¾Źō”£G’““CūöķõłōÓOÉĪĪfźŌ©ģŪ·uėÖѦMV®\IFFžžžĢœ9oooå˜sēαdÉĪž=‹™™/½ō£FR¶ńÅ|ūķ·\»v ZµjŌ3pttdß¾}¬Y³†&Mš°iÓ&;v,C† aėÖ­lß¾+Vpüųqłå—_读w…l#€¹sēbccCTTŃŃŃ,^¼X ģżšĆ¤§§cjjJPPÓ¦MĆŹŹŖĀ9ņņņ˜;w.üńłłł8;;Ó¹sg^}õU®_æN’žżIJJ"!!ŠŠP¬­­Ł°aZ­–O?ż”M›6‘––†©©)LŸ>]łlڽ{7ļæ’>IIIŌ¬Y“<ņߟBß’=‹/ĘŃŃŠŠŠhŚ“é#ŗŖ²ß[eżŹÓwMLL*lS«ÕčėėWz£P~-“'OęĉĢ™3[[[ĢĢĢHJJ¢wļŽ÷<¶ņqŻž>/))Ń &TUPTééédeeįźźśH†æüņ ={öTV‘˜8qāFŒĮéÓ§9zō(>>>L˜0'N““óŠć¼ŻłóēIOO %%…Õ«WĻŲ±cŃ××端¾¢sēĪ\¾|ęĢ™ĆŒ32dGŽįµ×^ĆŻŻŠŠP–-[ĘģŁ³™3gõė×';;›ššpĀĀĀŲæ?×®]cåŹ•“nݚaƆįķķM~~>»w隸ø˜f͚1räHŽ~ūm|||茵«’yt»S§N±uėV^yåŽ|óMźÕ«ĒüłółņĖ/™={6īī„±pįBΟ?Æ3ØÜ¤I“8uź ,ĄĀĀ‚ųųx„īIß¾}9r$æ’ž;?’ü3#GŽT>OŽ’}ĀĆĆyė­·šōō$##ƒ’żļ 0€;w’˜˜H×®]yć7˜:u*999,X°ą¾¦!!ēölsB<Õ) žż ĄīŻ»9qāD„OóņņpvvV~V©Tw Š899”V«©_æ>žžžJū±cĒųņĖ/iß¾=żõƒ¦sēĪŹöG]šĪŁŁ™˜˜˜ ķ#FŒĄĮĮ%K–TzĢĶ›7ńńńQ¦!@YŻ€ķŪ·HTTcƌQ¦?\¼x±Ņ1TõZ9:: 3] ..N'3ATsēĪåĆ?äāŋxxx<ōł,X@qq1«V­" ›:ŸŸNNNJĄ“¦ÆÆĻ¦M›”`[ūöķ±““$&&F¹Ÿ3gƒ  cĒŽ>|˜={öœśd IDATŹŗuė˜1c†N ŒĘSÆ^=RSS²@ŽĻ?’¬¬ržüyeß Š A>ūģ3¼½½ļ¤ėÕ«—2„`Żŗu,Z“Hē©»‹‹ ķŚµ«tŗš‹‹ /æü²°iŃ¢ū÷ļ'**ŠĮƒÓ»worrr8tčĪXÖ­[Ē;ļ¼Ć°aƔ¶ŗuėāććC^^6lĄĒLJłóē+Ū=< &põźUĢĶĶ į’ūPöōtüųń„††RTT„‹‹ ćĒēźÕ«¤„„”Ńhpww×yķĶĶĶqqqŃéĒŽŽ^)ąw;ggg¶mŪʂ Xæ~=yyyøøø°xńbŗté@­Zµ*L Ų¼y3Ó§OgģŲ±\½zkkk:wīĢ‚ €²ōŻ &LII nnn¼śź«,X°€‚‚ŒQ«Õ,[¶Œ÷Ž{>śˆššpBBBpwwW‚J6l`źŌ©Œ9’k×®įąą@—.]”Ulll*Ģ’//Šų¤äää°}ūv>Lff&FFF8;;J@@@…ż322Ų±cGŽ!;;###\]]éŌ©-Z“øē~“’’Ų¼y3gĻž%''cccģķķéŅ„‹NjüÕ«Włź«ÆčŠ”&&&|ūķ·ÄÅÅŃ£G%˜’––Ę÷ßĻ©S§ČÉÉQ [véŅ… Tč;66–M›6Ovv6ĘĘĘŌ©S‡®]»*O_‹‹‹y’ż÷²yöŸž¹’Å1zōhå}YTTÄöķŪ‰ŒŒ$55jŌØAŪ¶mu²oĀĆĆ)**"33===åę·eĖ–››Ė† ˆŽŽ&==CCC "$$DgśČÖ­[9wī'NTŅ{łÜ¼Ó>7oޤ   ĀrS¦L©ņožaÜ>õ¦°°¼¼¼JūÆlŚGHH¦¦¦üē?’ĮŻŻ}}}JJJīŚļś111įęĶ›nųÕjõ3œBü³I@qßŖSąY”{é„—”*ōwbaaĮśõėuŚ~śé§ ū988šå—_VyggēJŸĘ:TłļK—.élėÖ­[…§äļ¾ūīĒBHHH•Ū###+“¹¹¹±vķŚ*qwwgŪ¶mŚo;Ą’ū_žūß’ź“ŻzMw¬Ø>yņä m 6äĀ… Uó(]¼x‘vķŚqåŹĢĢ̰±±!''‡ėׯóöŪo3|ųp§Ķ'Ož$$$„““4ĢĶͱ±±įśõėdgg3kÖ,Ž|óĶ»ž¾vķŚEĻž=ÉĖĖC„RaeeEII ŁŁŁĢŸ?_g…+W®0uźTڵkǁ”ĻŽ† Ņ­[7~żõWĀĀĀČŹŹB„RaggGff&EEEL™2…łóē3eŹ„ļm۶ѧO qqqĮĄĄ€¼¼• ĄĆrtt¤WÆ^ōźÕKi+**bÕŖU „>NNN <˜¶mŪ*m999¬_æ¾B­“äädŽ;Fff¦N€āčŃ£÷4}jąĄtźŌIi+((ąėÆæĘŲŲ;;;¢¢¢tŽIKK£°°ša.O!«Ē·g!Ä#UjČÓńo5{ölåÉ~VVqqqddd@`` _~ł%ŃŃŃŹžS¦L”ØØˆß’¬¬,bccÉŹŹāŅ„K4k֌÷Ž{+W®Ü±Ļāāb† Ą?žHqq1deeqīÜ9Ś“iƇ~ČžżūuŽŪ³gC† įܹsŹ ~AAƒ ĀĄĄ€Ż»wSPPĄµk×øqć'Nœ AƒL›6³gĻeõʍ‡……§N"!!K—.qõźUāććiÜø±²“›””!ddd(E$;¦“•O’?~>žÆæžšŌŌT.]ŗDBBéééŒ1‚Ķ›7sģŲ±‡żµW¾¾¾|ņÉ':«e|ūķ·Lš4©Ņ¢žU111įܹs÷]l¶eĖ–„‡‡+OčKKKY±bóęĶĆŠŠPg_FƒJ„āōéÓJŪłóēłį‡t²LLLøzõŖ²:Hy?K—.UŠ*jµZÖ¬YĆĢ™3166¦cĒŽüśėÆJĘIII‰’•$„Օ„÷­:eH@ü[EEEŃŖU+ŗt颓ćāāŒ3芔ƒN•łØØ(BBBh×®Njµ»»;Ó§O'$$¤BŹóķ>LRR£F¢sēĪ:żÖ«WOyŚ”s\Ū¶młüóĻ©Wƞ’:żĒœœĢäɓ QnÜŌj5ŽŽŽ,X°­VĖ/æü@vv6zzz 0€Ę뜿f͚¼ų⋤§§sżśuT*•²ŠFłSaKKK„M­V“ŸŸĻöķŪ åµ×^ĆÜÜ\9Ÿ³³3Ė–-C£Ń(™4VVVʱśśśŹ¹Œ²%6›7oĪK/½¤óśšššņņĖ/³gžÉęĪ‹F£ĮŃŃkkk,,,˜4i«V­ŗÆU† Ęśõė166¦’ž÷|\xx8×®]ĆĘĘ,--y’ż÷YµjU…}ķģģ”÷YķŚµ©Q£čĢõ/ƁRž/33“E‹‘ŸŸ666XXX0wī\VÆ^Z­Ęßߟ”C‡āē秬Frłņå ˇ !Du"Ó„÷­:ž-Ó„ø……111ÄĘĘR»vmm:uŅI_.ߒܹs$%%Q£F m½{÷¾§%Ϝ9 ³–ü­¼¼¼X“hĻ=÷œN{›6m*ģ[¾2DUĖė•×(/üfiiYåMtzzŗ’’››«³rDU’’’(,,¬² œu ĻŻIeĖŅAŁ ‡x,K’Ż«ņ  Ą‹/¾Ø³zF¹ņz#P–Bk`Ź–+-’̵³³c×®]ÜøqƒÄÄD„–Byē…^ C‡:Ē{xx‘‘”³"B=øv퉉‰UN#(æį¾•››¤  €„„LLLpvvVĆīīīddd`eeĄ¢E‹˜1c‰‰‰āęęFii©Nھ 'Ož$%%…¬¬,,,,°²²ā?ž   €ÄÄD„īĘ­u–.]ŹÜ¹sINNĘŚŚGGG²²²žČ“!„xBÜ·ź4@‚āßjāĉ 8:uź`oo››...ø¹¹Ń°aCĀĀĀtžF¾žśėŒ3†š5kāččØ³æ——½zõRnž ¤Üš—Ū²e ŁŁŁ@YĮĒŹ˜™™éĢį/w{z6”)5jT…9ÜšĮĘ[×[’ūļæ™?>‡&##ƒüü|å&īöĀqwSŽ’Ź•+ٱcG„ū¤¦¦ŽóSķģģlŽyēvķŚEbb"7oŽT*ķßļŲ‡[Sō *­Cpkš¤²@Je7µFFFŌ­[·B{e}čééUz^ccć Õ’ļÖļ­ĒÖ«WÆB»Z­®Š—¹¹9 6¬0ĪŪĒX£F ²»ŃŅŅR§ŽĄć(Ž(„Š„÷­:ŖĆ—k!ž†~żśįķķĶ?žH\\ńńńÄÄİgϲ²²˜1cGUV+=z4¾¾¾ģڵ‹øø8øpį»wļ&''‡Ł³g…““W®\įņåĖ:żQZZ PéMūż*(( Q£FU>¹÷óó£U«V@Ł y›6møqć½{÷¦~żśajjŠ™™ĒŽ#<<ü¾ūwuu­0½ \ł2“÷",,ŒŻ»wÓ¹sgzö쉱±1VVVčėėcddÄĄļylB!Äć$A!Ä}»—e•Ä£uįĀ unVBCC133«2 Y<ū5j¤,‹w«-[¶ĘgŸ}¦S’¹ēžūģŻwXT×ö?ž÷f轈4l€D ¶ ŲQ±Ä’5¶Ä›āML¼I¾7åjĢM1‰ęŖ1QcŠ IŌ€Ų F!Bl €2 Ezļef~ų›łˆs)Ü3°^Ļćsö™3k‡Łė¬½¶J©>|’ż÷X¾|9~ųįlÜøēĪc|>EyųćÓ'•JńŁgŸaŠ A˜9sf›±+īīnÜø¾¾¾mž ‡FYY"##1ž|•qEĮöR<’Œ3wzč‰D‚3gĪąÅ_Ğ={TƟl”H!„°‰źh !Ę„$@o©Ų¹s'6oŽÜź˜b[7ŅūTWWƒĒćaõźÕŒćS§Nõ5(Jȳ²²ĒSSSaii‰7 C‡e<_]L Š*777šx¼6_³‡‡‡ŚžĖĻĻµŚŚ6’BiJB:ģÉÓlźéI€ÜÜ\ģܹ7oŽÄ½{÷°sēNåśe™L¦lō•ššŠćĒ#''»wļĘēŸŽ““4öu’ä“O°}ūöVŪy@JJ ¾žśklٲß}÷J 8į&ŲŪŪćŲ±cŒė~łå€««+€GŻóŒŒ…ĀĀĀVēŹår:tØÕłźŒ9ęęęųśėÆUz444(ĖńŸ}ö٧¾†ńćĒC__’ž÷摛›Ūj¬¹¹_ż5ŹĖĖ1lŲ0P®ŃVtėÜŁ³gqģŲ1ŖIJE9’µk×Z·°°ĄČ‘#±’~\ŗtIåšQQQø{÷®Ś&ˆSÄvņäI•ēšąņėĀ„*!„Ž‹’„y|āÉ== PXXˆØØ(¤§§#;;QQQøxń"€G³<ąQ¹ńŠ+0cĘ üłēŸ8zō(žyę,X°ļæ’>īßæķŪ·cŲ°aʵŠ;vģĄ°aĆpśōidddąČ‘#2dŽ?ĪŚė%ķ÷Ž{ļ!??®®®ū Ó¦MėŽFŗlÕŖUšõõÅĻ?’Œōōt”””@(b芔xłå—±téRŲŁŁ)Ļūķ·„ØØ(Üæ%%%‰DšóóĆśõė±téRXZZ>õy/^ OOOģßæ©©©(..†±±1ĀĀĀ‚^xA¹}š……ęĪĖŲ·@ńFŒąĪ;(--…‘‘&NœˆqćĘaɒ%Ź-߬­­ń×_įūļæĒÕ«W‘ŸŸ### 6 Ÿ|ņ ÜŻŻńńĒ£©©©Õs„„„ ::‡BNNŖŖŖ”» 6 )))Ų³gQXX>Ÿooo¼šĀ X¹re«Æ!šhė»>}śØ¼–Ƈć‡~ĄÉ“'QXX;;;lٲ«WÆĘ²eĖZ}}ƒ‚‚Ąēó[m57vģXe#ĒīšŚkÆįõ×_ǤI“ZķŠ7nÜPīo½õ²³³©‘ėBŃżōSĄ”)SĄēóńąĮ¤„„aŹ”)033ƒ©©) !‹ www|ńÅHNNĘÆæžŖ¼–D"ĮąĮƒŃŠŠ ¬Øõ\˜9s&źėė!“Éąļļąą`?~qqq˜5kŒŒŒ`ii‰ÜÜ\āģŁ³Ź‘„B“‡zB:„’=ƒb_öäädddd(’¤¦¦ŖŻŽ¢›6n܈ū÷ļxŌ “¬¬ &&&Ų¼y3,X€ōōt$&&"''£GĘŽ;:ücƌAYY^}õU„‡‡£¬¬LŁ_äĆ?Ä믿ŽąśõėČĻĻǐ!Cšæ’żO£Æ“BHūP%!D§q©Iawʆ~š`mm SSS\¼x“&MR’į‡šŻwßįļæ’ÖŲsBøéĆ?lUłÓŲ؁@ ²‹HW577C__R©B” ¤2!„°„’„ééųøŹĻĻ_|ńęĶ›eiogńł|lŚ“ įįį ƒ££#JJJpģŲ1|żõ׊šĀeYYYxžłē‘™™‰ŠŠ ĀÜÜcĒŽÕčólŲ°K—.Å{ļ½899ĮĖĖ 6lŠčóBiJBtZo©ˆˆˆ€„„%žśė/å:’^xzzz€Q£FĮŚŚŗÕc/^¬Wųä“O”[©mŲ°cĒŽÅµkאŸŸggglŲ°>>>ZxE„6Éår<’üóųąƒ°lŁ2>śč#¤¦¦Ŗ}\sss‡Ÿ+,, EEE(((@vv6$ vķŚ…Õ«W·ź7@!D;( @Ńi½% &LĄ„ ”’¢üūąĮƒ1xšąVē3u_øpa«’÷÷÷‡æææf%„p^ii)ŹĖĖ”LPöSSS·zÜĶ›7Ū¼.ĒS)ówuuÅ”C‡0bÄŲŪŪ# ļ½÷ž^ !„Ž¢$!¤Ch9!„č> 8::āĶ7ßDDDär9®^½Š#GŽ 440~üxlÜøkÖ¬App0 žŚ4ŠŁŁß’=¾śź+8::böģŁš÷÷ĒŖU«°bÅ X[[£²²Ū¶mCpp°6^*!„'P€¢ÓzS%!„t–H$Āܹsa``ąQ³ŃŲŲXlŪ¶ _ż5„B!¼¼¼‰„„€ÆÆ/bbbšĆ?`ß¾}pssCdd$¶nŻŖÜ’tęĢ™°³³S>ϲeĖPRR‚3gĪĄĄĄ³gĻĘīŻ»±mŪ6\ŗt %%%Š××ĒóĻ?W^yEū_B!ą½óĪ;r°³³Ć«Æ¾Źv<„Ž«ÆÆĒ­[·ŲCÉÄÄl‡A!„BH—]øp§OŸüńDz““4)ŸĻo …́ Q(ÖėééՈD¢j==½ ==½2‘HT"‰JōōōŠ…Ba©H$* …•"‘ØJ(֊ÅāƒF™LÖ,‰¤|–_#!„t UB!„Ņ~” „tˆ¢3=WŠ>ӄB!„“%!BIŅYō½"„Ba%!"8µCM,uĒõė×QRRĀv„B!½%!Ę„jJčŽĘĘFDFF¢¹¹™ķP!„Bz-JB:Œ’¤³ pāÄ ¶Ć „Béµ( @é0®%h‡Ż’€›7o²!„BHÆDIBH‡ …B¶Ch…ŖtĻļæ’Žāāb¶Ć „Béu( @é0.U”ŠEMMMŌ€B!„” „t×*¤R)Ū!N(,,DLL ŪaB8®„„…ķ!¤G”$!¤ĆD"Ū!“Bu×_ż…7n°!„Ć***põźU¶Ć „ƒ’„£$ѤcĒŽ”¤¤„ķ0!vāÄ dgg³!„ō” „t%ˆ&566āēŸ¦ž„µ¤R):„śśz¶C!„GIBH‡‰Åb¶Ch…’ŗÆ°°ŃŃŃl‡AᰊŠ >|˜¶…%„.¢$!¤ĆØ€t‡k×®įśõėl‡Aį°ŌŌTź@!]Ä­߄  8ӕŸ’=DZcĒąčč¶C!ZŠŅŅ‚ŠŠ 466¢””MMMŹ?õõõ000€H$RžŃ×ׇH$‚……ēv)!Ś GGG8;;³ !„č$ś Jé‘Hęµ™”č9ššš‰Õ«WCOOķpˆ†477#77ÅÅÅ())Qž·¢¢2™¬Ć×ćńx077‡µµ5lll”’uttä\„Ń<©TŠƒbŻŗu044d;BŃ9” „t —’MMMl‡@4ذ°üńf͚Åv(¤“d2ņó󑑑ū÷ļćĮƒMÖÉår”——£¼¼÷īŻSēół°··‡››ÜŻŻįģģLɤŖ²²GŽĮ¢E‹ĄćńŲ‡Bt %!Ā„ꀔčyįāā???¶C!ķŌŌŌ„;wīąęĶ›ČĢĢde·™L†¼¼<äååįŅ„K …čׯ|||ąééÉ©÷-Ņu©©©ørå ‚ƒƒŁ…Bt %!b``ĄvJMMMĖåt7HG©ė/qüųq8::ĀÖ֖…ØH{ČårdggćśõėøuėŁ©•––Üæ÷ļßĒŃ£G1xš`ųśśbąĄąó©7rOpņäI8;;ĆÉɉķPˆ†Õ××£©© ĶĶĶ­ś†Pö‹ÅŠÓӃX,†¾¾>Ė¢;( @é.%är9š››i-°Žš4ibccUŠžkÖ¬”’nŽillD||<PYYÉv8ķŅŅŅ‚ääd$''ĆŌŌ#FŒ@PPMtœT*Edd$õŠQMMM(**jÕ+Dń§£Kˆ„B!lll`eeåßmmméó!O $!¤Sø”} _ņŗÉŃŃ'NDll¬ŹXQQ~ūķ7DDD°yR]]®\¹‚ųųų.õ°°°P6õ366VŽÉÓÓӃH$‚X,FSSŃÜ܌††466¢¶¶V9a(++ėŌ.%UUU8sę āāāˆąą`uśõvUVVāšįĆX¼x1U„q\wö iiiA~~>ņóó[²Wˆ‹‹ ķ.Bz=ś@é‘HÄ©m©/€n5j²³³qēĪ•±›7oĀŻŻś°Ø¦¦qqqų믿:üoĒć”OŸ>puu…««+lmmaaa@Šåød2ŹĖĖQTT„¬¬,H$äēēC.—·ėńøxń"®\¹‚įƇcōčŃ055ķr\DūŅŅŅpłņeŒ=šķPČjkkqėÖ-ܹsŁŁŁZßŃēÉ^!zzzprr‚§§'¼½½©‚„ōJ” „tš¾¾>jkkŁ8·™t ĒCxx8ņóóQ^^®2~ōčQŲŪŪĆŽŽž…čz/™L†„„œ9s ķ~œ‰‰ Ö: IDAT<<<ąęęWW×nūĶēóaee+++ 2Ą£uꙙČČČĄ;wPUUõŌė477欕+HLLÄøqć0räH$)ˆv:u ĪĪĪpqqa;”^Oяćśõėø{÷.gnž½K$H$DGGĆÕÕ¾¾¾šņņ¢„g¤× $!¤Ó 8“čČ…p“ęϟ;wŖ|`liiĮĮƒ±fĶźš®%yyy8vģrssŪu¾P(„»»;|}}1dČÖ&Ńššš€‡‡¦NŖl\xóęͧV1455!66‰‰‰˜>}:ÜÜÜ“5Ń™L†C‡Q•••įņåĖøuėg¶n‹L&CFF222 Œ5 l‡FH·¢$!¤ÓøŌ€’=ƒ££#BCC£2VRR‚ß’óęĶc!²Ž£®®'OžDRRR»Źźķģģ0räH :”s øøø`ņäÉHIIĮ•+WTÖ ?©¤¤?üšžyęLž<™ś萏ŹJDEEaɒ%Ō@‹ŠŠŠpńāEÜŗu 2™¬K×233ƒµµ5,,,```‘H¤ģ¢ÆÆ¹\®Ü- ¹¹MMMØ««Cyy9JJJŚUżĆ¤¾¾ńńńøvķ|||0fĢŲŲŲtéµĀU” „t—’ŗpǁ“Ļȑ#‘••ÅŲąÖ­[pwwǰaĆXˆ¬ēĖĶĶÅĮƒ—d<ÉŽŽĮĮĮšńńщķöÄb1üüüąēē‡ŒŒ œ9sŁŁŁjĻ—Ėåø~ż:ŅÓÓ1wī\ 0@‹Ń’ö‰DŒÕéé鈋‹Ć˜1cXˆŖwÉĖĖĆŋqēĪv÷āPąńx°··G’žżįąąkkkX[[w¹Éocc#JJJPZZŠÜÜ\H$“;>©TŠæ’žׯ_‡§§'BBBh)éq( @é4.ŻknnFKK uüķx<fĻž­¶?Ą±cĒŠ·o_śP¦Ar¹—.]Ā™3gžzĻÅÅcĒŽÕéI±››ÜÜÜ ‘HpīÜ9dffŖ=·¶¶ūöķCHHʎ« Ž" ÷ļßg¬ģ8}ś“² „h^MM bccqćʍMž­¬¬0pą@ōļß®®®Żr3A,ĆĮĮšööšØĀ)33‰ééé(++{źuär9’““‘’’???Lš4‰–™ƒ>-B:M$AOOĶĶĶl‡ąQ5€‰‰ Ūa Š××o³?@dd$Ö®]˹ņs]TWW‡ØØ(¤§§·yž‰‰ BCCńĢ3Ļō˜2ėžżū£’žHMMÅńćĒQQQĮxžL&S& """hŽŠÓÓƂ šķ·ßŖ4‡„žŻC.—ćʍˆ‰‰A]]]»£ÆÆ”C‡Ā××ĪĪά¼ĀÓÓžžžU0(z…<ķuČår$%%įĪ;7n)Htž`ōčŃ€±±1X‡¢kŖŖŖ8³ßŲؘSÕ ¤µœœÜ»wOåøææ?ĢĢĢTŽ›ššB,3>¦¾¾eeešņņź–X{‹‡b×®]xųš”Śsų|>±pįB899õ˜Ąć¬­­įļļ––äå婽³YQQ›7o¢_æ~Œ?³¤{ŌÕÕ!>>^åø««+<==aii‰ääd•ńĘĘFĀĒǧGžÜj[nn.8€„„„§&’y< „I“&aÖ¬Yššš€¹¹9g¾¦¦¦8p FŽ {{{466>µ: „„÷īŻĆżū÷Ń·o_ŗé@ŗbĖ[HOO——––Źy<žŒĻēĖų|¾”Ļē·‚¦’’Oƒ@ ØuŠ?|>æ^ ŌółüF@ŠČēó›…Ba‹žžžT.—ˁœ*!]bll¬öī™¶µ÷®ŃAAAČŹŹBJJŠŹŲķŪ·įīī"Ó}‰?żōS›ŪkŚŪŪ#<<}ūöÕbdģ‹Å ưaĆpäČäåå1žWSSƒ={ö`Į‚8p –£$L†Šū÷ļ#11Qe,==—.]³Ļ>ĖBd=ƒ\.G\\NŸ>żŌåBŠÉ’øqćąąą „;O(ĀĖĖ ^^^ČĻĻǟž‰›7o¶ł:srr°cĒ„„„`ÜøqœIlŅTĖBé.ŻyÆ©©a;¢a<įįį°““d?~üx›w± ³»wļbļŽ½m&|}}ńņĖ/÷ŠĄćģģģ°jÕ*Œ3Fķ‡ū¦¦&ģßæIIIZŽŽØ3mŚ4µ?«gΜAVV–vź!Ŗ««±gĻœ¶““ąąĮƒmNfIk’ż7~žłg“““0Ž‹ÅbĢ›7sę́žžž–£ć>ŸŠŠP<’üój—Éd2üöŪoˆ‹‹Órt„‰P(Äüłóū„Čd2yåŹDFFŖ]nEWP€Ņe\Ś3›’=›X,Ęüłó×ŖSf¹¹¹ų駟 •JĒżüü°pįĀ^»žæ½ų|>f͚…Ń£G3ŽĖd2üņĖ/Ō€ŽŚź —ĖńĖ/æP€'(š]޾}[ķ9X·n†ŖÅČøÅĆĆƼņ œœœŌž“’’ņŌĘ«„°’„.344dlŚĘ†¦¦&Ō×׳éFöööŌ JKK±wļ^4551Ž9³gĻn³ 6ł?<“&MBHHćxKK öļߏāābķFT“Õ ¦¦†ś<¦””»wļƽ{÷ŌžŒ—_~YķN-½‰¹¹9–/_Ž€€µēH$üšĆjß{ ażÖ'„h—Ŗ***؁t³ĄĄ@ųųų0ŽŻ¾}»ĶrÖŽBQQWWĒ8īć惰°0-GÕ3Lœ8Œc ųłēŸŃÜܬåØČ“†Ŗv¢&‘HpńāE-GÄ=R©‘‘‘ČĖĖcēół˜1cĀĀĀ “w …BLŸ>S§NUŪ!''ū÷ļ§„„“( @Ń.%*++فhĮĢ™3Õöˆ‰‰éõżŚśø¹¹aöģŁ=ŗ”Ww›2eŠŚF•EEE8~üø–#"LĀĀĀŌö8{ölÆī XĀ¢n{;@€ˆˆŒ1BĖ‘éŽ   Ģ;Wm‚D"‘“Ł…¶p£~—¢óø”ØŖŖ‚T*ķõw-nŻŗõŌż»[KK‹ņŽhii©FÆ-‰0oŽ<üļ’S¹Ó¢ø ¾f͚^Łģ.99Ym5„££#-ZŌė’}tŸĻGDD~ųįĘ>IIIpuu…ÆÆÆöƒ#JB” ,Ą·ß~‹†††VcŠžėÖ­ćTƒ[m‰‰‰Arr2ć˜H$ĀĀ… 1`Ą-G„{|||`llŒ0öøuė 0}śt¢#„%!a``===N”ĄŹårTWWĆÜܜķPXõąĮƒæm^ß¾}†cĒŽ©Œ)ś,X°€…ČŲSVV¦¶/‚©©)–,Y‘H¤åØz&”PˆE‹įŪoæEyy¹Źų±cĒąčč¢# –––˜5k"##UĘż^|ńÅ^Õćܹsøzõ*ć˜X,ĘK/½-G„»ÜÜÜšā‹/bĻž=Œ}`nnŽ1cʰ!ŖzĻ»!¤Ūq©€é9é™ŌöHNNīUū·ĖårDEE©Üńݹž7oŒŒŒXˆ¬ē200Ą¼yó++šššØGxyy©ķć ‘HpįĀķÄ¢ōōtœ;wŽqL `įĀ…”č''',^¼Xm£äS§N©]zAˆ¶Q€¢1\J”••Ѽ^dƌ°²²b;qā„Ś¦W=MRR²³³Ēʏ~żśi7 ^ĀÉÉ ”””Œc>¤F•1yņdµ“ŪsēĪõŠ ZUU¢¢¢?*–øø»»³YĻŠæµżVIZŚž’p%!Ć„ņū––Ś% ‹Åxžłē÷ŗoiiĮĻ?’Üć·Ž¬ÆÆĒ©S§Ēś÷ļOeØŻläȑššš`;}ś4ŖŖŖ“y’P(Äüłóū„(śōäļ“L&CTT”ŚCĀĀĀąåå„åØzoooL›6qŒ¶§$\AIBˆĘˆD"N•kŗį6;;;µ[ŽUTTąšįĆ=ŗ:ääɓح­U9n``€łóē÷ŖõĪląńxgl0×Ų؈ŲŲX¢"O²““Ĝ9sļŌÖÖÖöč ŚŁ³gÕ6‹3f ‚‚‚“QĻ öėŁŪ–Ÿn¢Ę€„277gœˆ°”¼¼œv `šĘoĄĄĄ@ć×åół‹ÅænGŒ1YYYøyó¦ŹXjj*āćć{äŻÜÜ\$&&2Ž…††r*9ד 44‡V»yó&üżżŃæ"#2dćeffāüłó?~< ‘uŸ¬¬,\¼x‘qĢÅÅ'NŌrD=ßäɓ‘““ƒÜÜ\•±óēĻcĄ€prrb!2B( @Ń0 άæ–Éd(++£ĪÜOŠ××ļ–$W̜9>Dqq±ŹŲ‰'ąąąggg"ė>ŃŃьUNNNš÷÷g!¢Žė™gžARR233UĘNœ85kÖ0Ž…ę’¼¼<\ŗtI+Ļ%“É·U{\wģ:3iҤ6'hżśõƒ›››ĘŸ— 2™ Ēg|000@DDU u@€ ą›o¾QYŽ&“ÉšŪoæaŻŗuōµ'¬ $!D£ŒŒŒ ‰·ČaCaa!%z‘H„ `ĒŽ*“©TŠC‡aŻŗu=&"‘H›ņx|8c—z¢=śśśjļžQ5·Lš4ImŸ‹/āŽ½{ZŽH3233‘’’Ā8‘H¤åˆz/±XŒŠŠPʱ[·néüļ"¢{( @Ń8>ŸĻ©j¹\Ž¢¢"¶Ć ,PōŠÓÓS“J„8xš Ś=³¹®ØØiii*ĒFĶBDäI£FbüŁĖČČąLUmS4&ÕÄ”P3­­"""ū„ČårDEE”ŖŖJ#Ļ„Mź–ø»»ĆĖĖKĖѐgžy†qw¹\N‰A¢uԐŅ-¬­­QZZŹvJłłłčÓ§§*ˆvŲŚŚbŚ“iųõ×_UĘ*++qäČ,Z“Hēčżż÷ߌ} üüü`ffĘBDäIFFFš÷÷g\zņ÷ßĆĮĮ…Ø:/"">>>l‡Ń-,,,Ō6p«­­Å”C‡šŅK/éL'÷ÜÜ\µK…¦M›ĘBD¦M›ĘŲ44-- yyy:÷ž@t—n¼“BtŽ™™™ĘīŅh‚T*eģŽLz‡aƆĮĻĻq,55W®\ŃrD]#“ÉpóęM•ć<ÆĖU8wīvļŽ­[·āĖ/æÄīŻ»qéŅ%j²Ł £GfL>ŽŗuKe"@Ų5xš`Œ9’q,++K§śØ«>|8¬­­µ Q°µµUū»H[ŪrP%!¤›šxŒ]»vį7Ž€¾¾>¾śź+,_¾¼ÓĻÓ=óĢ3ŒĒoÜø”åHČÓ̟?†††*cr¹GŽAEE ‘µß… — łśśrŖ_Ooeii ooo•ćr¹qqq,DDz#JBŗ‰‰ Äb1Ūa“RPP@%ø½˜­­-f͚Å8VYY‰Ć‡3~xę’¦¦&ܽ{Wåøžž<==;}Ż­[·B.—cēĪŲæ?–-[†ššpĢž=Ė—/ĒgŸ}†+W®@$!22’j0dČĘŹ‰ŌŌTI<õ&fff˜3gcŸśśzŸ†rHHHćĻWrr2Yˆˆō6” „t«®”&w‡–––^Ū•›<āćć£vMfZZ._¾¬åˆ:ęŽ½{Œū~{zzv)閜œ ”PˆE‹©=gŠ Ašöö†L&c,7€ŠŠ œ?æžś+žųć\½z m>wAAĪ;‡ØØ(DEEįĀ… ŒĖ6””„ū÷﫽Vjj*’’’”““ŗŗ:$%%)Ė»sssƒØØ(•„OAAĪž=‹Ć‡#&&IIIhiii3öö …ŒŻŲ„R©Īn?×Ó 4ĮĮĮŒc999œķpūömĘ-q½¼¼8W×›ŁŲŲ0.jjjR»­#!šD=!ŻŹŚŚ>d;ŒV `kkKkš{±3f ??łłł*c§N‚³³3gūH$ĘćźJĪŪ«©© B”š© =×­[‡»wļŖ$ųŠŠŠ°vķZüöŪo*wI °bÅ lٲ„Õæ»‡błņ刍U™ Ģ;;vģP–0K$ųūūcźŌ©8~ü8c|K—.Å_ż…ŠŠ ˜™™!==žžžX“hōōō°wļ^åZܖ–¤§§cõźÕ8wīœŹõĢĶͱaĆlÜø±K;H<óĢ3HLLT9ž‘‘Ńc;īė:E€،]ŗt NNNœė n©Šˆ#“ yšįƇ3NųoÜø”6QMˆ¦P€Ņ­ `dd„ŚŚZ¶CQ’ĖåČĪĪĘĄŁ…°D(bžüłŲ¾}»Jé„L&Ć”C‡°nŻ:ĘuĮlcJ…BōėׯK×õšš@bb"NŸ>ēž{NķyK—.U9&“É0uźT\»v AAA˜5kPUU…ģģlüüóĻŲ¶mššš°cĒåcf̘ÄÄDųūūcęĢ™°³³ƒ@ ĄĆ‡qąĄŖŖŖ0~üxäęę",, 'NDŸ>}P\\ŒĢĢLģŪ·ļ¾ū.ōõõńśėÆwśł]\\ ‹U~ޘ¶q#ÜĄēó1oŽ<|óĶ7*Ė6żÖ­[Ē™uöåååŒ ĶĶĶ»üž@4ĻŻŻ¦¦¦*M^% *++i«WŅ­( @év¶¶¶ČĢĢd;ŒVŹĖĖé—l/gmm™3gāŠ”C*c•••ˆŠŠĀ’%Kŗt÷WÓjkkQ\\¬rÜŁŁ™±įaG¬^½/½ō¦OŸŽyóęĮĻĻĪĪĪčŪ·/œœœŠ§Oµ{¤ĒÄÄąŚµk˜1c~żõW•ó^żu 2{öģĮžó˜››ćĀ… ŹĄÕ«WU*^żux{{ćųńćČŹŹźņ$F*•āĄXøpa«ćß’=rssńĘoą³Ļ>Sy܊+ąķķ/¾ų¢KI>Ÿ~żś©,£ØØØ@yy9,,,:}mŅ}żöļ߯R­¢č°bÅ Nģ:ó÷ß«mČ„÷1ņĒƒ···Ź4¹\Ž7nąŁgŸe)2ŅPOBH·³¶¶ęĤ'eggs¾ é^ŽŽŽš÷÷gKOOē\§ęŒŒ ĘŸŁžżūwłŚ/¾ų">śč#ˆD"ģŪ·’ųĒ?ŽĄĄ@888@__ƒ ĀŹ•+UÖä_¼xšņĖ/3& ¬­­Ц¦&Üŗu šēŸxTYĄ“ĮĄĄS¦L\.WŁ^Æ3üüüTOĘĪdȐ!šóóCnn.ćņ‘Žpuueūģ3¬_æsēĪ…ŸŸrrr°k×. 6¬ÕövŠ&~VVV(//gücii (++eu“““Ś˜Ž’}dddhdos777ĘćEEEąół033S»āżK»¦cP÷}%Ü1qāDµ}BāāāwģŠ¦ŚŚZĘfšNNNŌĆśōéƒ>}śØĻĻĻG}}= ‘Ž‚–B“ĀÖ֖“[ŠåååĮŅŅ’šöbB”Ó§OĒ’ž÷?•1™L†ŒŒ ά§eJZ‰D"8::jģ9 ˆĄĄ@•±ŗŗ:¬Zµ ū÷ļĒ[o½…“'OųæÉq@@ĄSÆÆX[]SSm&-,,4V&Æn)CYYd2ģģģžz®nēgooCCC•ėP2’ūŚÓ`ķŚµ¬-ėH$ŒUBŌū†ū ¤ņłH&“!++‹s'IĻAIBˆVĄÄÄÕÕÕl‡ŅŠL&Cff&ż¢ķåŌuŌ655åŌŽŚ%%%*ĒĶōŗ¢¦¦ńńń066fœü+⫯¾ĀžżūqįĀČåršx<喅7n|jŸ”C‡ųæI9ŪK…»"|ōŃGO=W]ÅH{ńx<ōéÓGåĪæ"”.QAøĮĢĢ sēĪž}ūŌöX¹r%+?ÓźŖIŌUŸīčßæærYŅć$ }6!݆’„­±³³ć\ŖŖŖPRRB%“½Taa!ćÖmšÜsĻA$i9"fÕÕÕhhhP9®‰„6………˜8q"œ·C{œ………2”WSS^xį…vßy411šØI§:ńńńųż÷ß1}śtŒ9Ry¼­^ķz~cccH„RlŲ°A+“p• [KK ***”K&w 8cƌaœ“åęęāŌ©S˜īƒ>€›››r Į€“żA766[¶lQ&&Äb1õż†††÷ppssƒ\.Gnn®Śs^xįø¹¹©töļ uIuß_Ā=&LP»DčĻ?’ĝ;w“Oee%JKKUŽ+&—„Ūōōō{£qj{eҳP€¢5|>æ]ėnŁŠŅŅBY÷^(%%E„Ó=šØl{Ź”)œŚVKŻ$Q•b±Ļ=÷ššš°|łrµ‰€ŹŹJlŲ°Ŗ<>aĀĄ§Ÿ~ŠĘĘF•ĒÕŌŌąĄČĢĢÄąĮƒ[=ęŪoæeœŌWUUįąĮƒ \¢ąččÄĒĒ#99¹Õłr¹~ų”riB{Mœ8šŃG1&ƒrssqōčQ”””h¤7„ŗ¤ %tŸ Õ˜ IDATĻĒüłó•I°ĒÉårüśėÆmVøhŚĆ‡k¢ahOQTT„¤¤$ģ4Ņ˜v‘Ėåj淄t„ !Zegg‡üü|H„R¶CQQYY‰¢¢"ŲŚŚ² т––å]é'łśś¶Łµž ŻY [·nŕ+WpųšaDGG#00NNNŠ××Guu5ŠŠŠpåŹŌ××ĆŅŅ[¶lQ>vĀ„ ?~ŸcĒŽį’żæ’‡½{÷b÷īŻ­gee…7Žxüq«ć‘‘‘ųąƒ°gĻ:tHåu­_æ’łĻZ’ģ³Ļ §§‡Ż»w㧟~R÷ööĘńćDZuėVœ={¶ŻÆŪČČqqqxēw…ķŪ··wttÄŪoæ7ß|³Ż×l‹¹¹9J"”‹żRHŪ €gŸ}.\PĖÉÉĮɓ'Öķqtg•ŃŖ"ŚFIBˆÖŁŪŪ£°°°Ķę^l‘ÉdŹŽ¼\*'šUSSƒK—.1Ž…„„ĄŌŌTĖ=S™½@ ŠhŸ GGGlß¾Ū·oGii)ŹŹŹPUU„ÜŖÆ­„ƒ””!¶lŁ‚-[¶   „„„ąńx°±±Q;Ń××ĒęĶ›±yófäēē+cmm kkkĘ»Øb±Ÿž9>’üsäēē#??}ūöUīµŒęęfå÷p芔(++k³Į£ vķŚ…;w"77ŠÓӃĘ·|ćńx044T™ōwuūAĀŽńćĒ挵kŒI:m•r3U‘ˆD"Ęå ½Õ«Æ¾ŠW_}•ķ0Ō²°°`lHIŅ]( @Ń:‘H+++Īžr«®®VN,HĻĖ8©¶°°@pp0 =ÓZ÷īܹĄŹŹ VVVzlŸ>}”“ņö²··ļš|LQģT  Ś=‘ēńxprrźö„ ”č9n߾͘ąół˜2eŠVb`ś]jmm͹Dvmm-ššš`ll¬’¼¬ŖŖ‚T*…P(TI^477£¦¦b±†††­ĘŖ««‘žžąQRŃÅÅEå=x“ü«ŗŗ"‘FFF~e]Ēćń`ii‰¢¢¢Vǹś9‰č>j Ha×'Ų¹¹¹Ø©©a; Ņ ņņņpćĘ Ę±É“'s¶›6SŅBkŌ‰ö1-7źhCC¾ęęfœ:uŠqĢßßæĆI­ĪØÆÆgLBpqĖŪ-[¶ĄŅŅRe¹T*…££#,--·żöŪoaii‰/æüRyģņåĖ ‚……üżżįļļ///˜››cģŲ±ø~żz«k\¼x–––X·n]÷¼8 `Ŗ˜ŖŖŖ¢÷Ņ-( @a…ĢĶĶŁC-¹\Žū÷ļs²!é<¹\ŽččhĘ„(żū÷‡§§' Qµ%z¦eO–ī»xń"ćĪb±ćʍÓJ ź’՝­āéNcĒŽšh’ø””TWW+ūeff¶‹‹kõų{÷ī!447nÜĄÜ¹sńį‡āÓO?Å;#ąą`\øp&L@YY™^•ę0}Ļär9ŖŖŖXˆ†ōtܼŻAéŌī÷ĶČĢĢ„»»;Ū” ¹qć†rĻłĒi³t·³˜īQ@71U›PĀQ·TVVŖLfʏƵõųLÉAąQ¢k‚‚‚ ÆÆÆœŌ+ÄĒĒV­Z…?üńńńŹAär9āāā`bb‚įƇöķŪ‡ŗŗ:DFFbžüł*ϳtéRģŪ·gĻžÅܹs»łUiÓ2€– ‘īA•„Ök¼é–¦•––ŅÖ]=Dss3Μ9Ć86|ųšÆaē.6×$¤78qāš››UŽ[YY!00PkqØKtgæĪŅ××GPPrrrZ%cÆ^½ ‘H„Õ«WƒĻēćźÕ«Ź±““4cŌØQŹäYNN`ōčьĻóŹ+Æ`óęĶpssėĘW£yOö;P $é” „°ŹÉɉsĶ‹ž”••…śśz¶Ć ]tįĀĘŹL˜0…ˆ:†éC½ŗ į6¦Ņmģ'O4ćĮƒHNNf›:uŖVæ—źÖ‹sµJHQŅ’x5@||<|||`ooĮƒ++?Oń8pvv|łå—H$Éd­žĆßßo½õüüüŗķutu[Óū<é” „°ŹĄĄ€“ Œ'“ɐžžNåŗ:¬¢¢žł'ćŲøqćŌŽįj&×s0½—pµ!%i­­¾"īīīŒķŗ“.UŖ}ŹŹŹ––¦¬ž Ā7”‰w¦$ĄŖU«ąää„Ļ>ū nnn‹ÅpqqĮØQ£°`Į|üńnj˾øNŻ{}ö ݁’„Ö988€ĻēöŪQCCƒJ³"¢;bbbKwmllĄBDG•=SeW'm¤µÄÄDäåå©g«Æˆŗ÷®VŒ1FFFŹÉ}BBär¹2 ˆęęf$%%x”077‡ÆÆÆņ}ūöŝ;w°wļ^¼õÖ[ˆˆˆ€³³3rrr…M›6aȐ!øyó¦ö_`ØKPÓPŅ(ķLaX,†­­- Ų„M„„„011Ū”xšąīܹĆ8¦3eŲL“DMWܽ{/^ÄƇŃŌŌ‘H x{{#((H'*&tӖn\Ü»œ“ÖŲ؈³gĻ2ŽĮÖÖVĖ©ĒÕev"‘ĮĮĮ8}ś4JKK•ė’Æõ pqqAVV¦OŸ®ņ>mllŒ%K–Ø\æ±±ß|ó Ž|óMlŻŗ?żōS7æ"ĶQ÷=£Ž/¤;P€Ā (..ę|ŁŪƒ`hhصĪϤkd2Ž?Īų!jšąĮZ/Żķ ¦;{R©ĶĶĶŠÓÓėҵ«ŖŖ°dÉ=zTķ9ųąƒšź«Æ2ާ„„”¦¦ŽŽŽ]ާ'“ÉdŒ•\ģęNZ;wīŖ««UŽimKĄ'©« įņR”±cĒāŌ©Sø|ł2āććakk‹žżū† 333\½zŹó7~üx”””0Žé‹ÅX¹r%Ž|óM¤„„u’‹Ń ¦j5€– ‘īĮķś[BHÆ! aooĻvO%—Ė‘‘‘Aåy:"11łłł*Ē&OžĢBD§nū(Mģ…żā‹/āčŃ£8p ¶n݊“'OāŚµk8}ś4"##±fĶŌÖÖbżśõŲæ?ć5^zé%ųūū£¤¤¤Ėńōd*ĢĄŌŌ”…hH{•––¶jX÷ø &ØmźÖŻŌ•żsy©bRéŅ%$$$“ŚMĻē# ńńńŒż€Gæ‡oß¾ŌŌTĘė+*欬¬ŗ#ün£ī&%Hw Ÿ*BgōķŪ%%%hhh`;”6566"##ƒ b;҆††µ[q¾!å“ŌÅ[RRŅ„%*ŁŁŁųķ·ß`ee…+W®0~pž?>†ŠÕ«WcūöķX¼xq§ŸÆ·S·å؍–#!͘üµ··‡ææ? =¢®€ĖI€aƆĮŌŌū÷ļGUU•ʖЁ8uźŽ9+++ :“Õų¼yópžüyŒ5 pssƒ jkk!‘Hšć?.\Ø­—¤ź¾gTYEŗ%!œĮćńŠÆ_?µŁ}.©ØØ@^^ž²\‘pĻŁ³gÕ®½~ņĪ’.P—P7©lÆ““4ČårŒ?¾Ķ;gЦg÷īŻSĖŹŹĀżū÷@¹żb\\,--žžž°··Gff&222ąėė SSS\¼xYYYpttĤI“”×kllD||< €ćĒćĮƒX»v­Ś&ŸŽŽŽHJJR©jP$NŸ>­’¤Y²d <==ńņĖ/cēĪŹ$Ąļæ’©TŠM›6ażśõ­3qāDX[[cɒ%ˆWI,Z“ūöķSž’”)S`kk‹„K—¢  wļŽmuwņ…^€““®]»†źźźN(—ÉdŒ[”Z[[ėōĻeOU__ÆR¢0zōhXXXh9"U&&&‹Å*ėÉ©A§īaJŅĪ!¤[P€ĀI}śōAqq1ćVZ\SSSƒĀĀBōéӇķPŚåīŻ»jKHŁdff''§.]C*•*י>i芔čׯ_—®Ļ¶¾}ūŖ$š››‘““Ó„²äŻ»wĆŌŌūöķcģžÆč×1kÖ,lŚ“©Ó“ŸÕ«W«$š››qķŚ5 :Tm•Fxx8^~łe\æ~]ylÜøq°³³S»Ėƒ¢¼žiŅ=cĘ •cŠd†§§§Jy²žž† ‚ĀĀBTTTt: ššįCĘ÷4]Ų„7:uźc‰¶©©)ƌĆBD̬­­‘——ןXW+„ˆvÉår”––Ŗ§†”¤»P€ĀI<nnnHIIaÜć+„B!ŗŌ]Ū~żõW¶C`äććÓå$@||<ć0===„††véŚ\ąźźŹXŽ.‘Hŗ”066ĘĪ;ńõ×_ćĪ;ČĶĶE^^>|ˆœœH$$&&āóĻ?Ēɓ'‘##£?Ļ““kąQ ¬T*…µµ5$ ććär9„Ba«µ’ĮĮĮFEEP]]šš455”¢¢B™Ģ`ZĀT†¬XŅ£nm¾¢CwWŽŌ½>®—)÷FEEEHLLd åŌ0•$@}}=źźźh=¹ŽØ®®fÜ€z…īBIBg”oß¾*nø€ĒćĮĪĪŽŽŽl‡CšØ³ņ¹sēĒøRŗŪUnnnŹĘ|“H$?~|—Æ/‹įėė ___•±‚‚<÷Üsø}ū6öģŁƒW^y„Ć×gZ2£X{īÜ9ø¹¹µłųĒļŹÖŌŌ`åŹ•ˆŠŠbÜŗ‹{„S@wDGG+›f>ĪÉÉ >>>,D¤^[;‡øøøh9ŅŌ0”h%!œęąą€ŹŹJŌŌŌ°Š’¹¹9śõėĒɒśŽģōéӌ±ĶĢĢ0zōh"Ņ}šĘoą…^@\\\§’LųaƆaåŹ•mžūųæ¹×^{ ‘‘‘=z4/^ WWWˆD"A__yyyœŖžJ„Ź]geeÅŲ°'%%E¹õåćx<¦L™Ā¹ž/źJĘóóó)  #ņóóÓrŅ]( @į4Ų€äädÖw 022‚³³3LMMYƒØŹĻĻGRRć×Jw»ŹĶĶM% •J!‘H0xšą_/&&’üē?±~żz|łå—mž«č{”ŲŚKėėķķퟚPĖ刊Š‚ Μ9ĆųżĶĶĶÕXŒš••Åøw;Up‹T*Åɓ'Ē|}}»¼d©;ØėG#‘HØåhHg(¶D|’®ō"ŗ‡ZŃB8O__ŸÕ^B”...šōō¤G©+Żuvv†··7 uu“Ę7ntźz$''?õÜ““4m7²cś>“ÅÉÉ śśśjKåGK=¬­­•[666¢²²NNNj<©©©Š£»©ūž”––*wŠ×ׇ¹¹9RSS‘ŸŸÆ’”(**Āwß}€¹1 ¶577#%%EåøP(ĀXˆˆ0©©©Į„K—ĒBBB8vuuÅĶ›7[«ÆÆGAAķ>Įq¹¹¹ŒM)AHŗ%!:£’žHNNf,©Õ4KKK8;;ėōŗN®'ģčā¶“““ 66–qĢĻĻŽŽŽ{.®ŠÓӃ§§'žžūļVĒ[ZZpūöm >¼C×311ĮŽ;°xńblŚ“ ›7o†‡‡lmm!PVV†ģģlåzö9sę <<\å:¾¾¾ˆŽŽĘ“iÓ c͚5Oį£>ĀŁ³gńŅK/įóĻ?ĒšįĆ”ÆÆśśzܽ{żõ šÖ[o)³xńb|żõךóóƔ)S`mm’½;«²Ģ?ž9‡}ßA@@@PQrDQŌÜMsk×r2g²Ę_5ŽõdŽcV֓õōĢ4„“S–©©-īꂂ)ˆ.ˆ ‚ˆ,²ļŪłżį‹óxā€`pč÷żp_÷}ŻßrąśŽ×õ½Ŗ««ÉČČ`÷īŻź;t™8lιsē“ž‘Šę¤>]¼x±]—‚“CCC† ņ»ūŁ·oŸÖļSć’åĪĢĒǧInϐ$@ē&C…>H@ŃeįļļĻłóēŪu y'Y÷ßµÄÄÄPXXŲäø‰‰I§ŗŪBBBš$ąö”ó¶&üqzõźÅ'Ÿ|ĀįƇ9yņ¤F»……‘‘‘Ģ™3‡gŸ}VėģŠ7Žxƒœœ¾’ž{öģŁü_!?333ģģģšŗß·o_Nž<Ɋ+8pą€ĘLKKK&L˜ĄņåĖ R’ąƒ077gÓ¦M¬]»Vćüɓ'óŽ{ļ1xš`żŅĶĶͱ³³ĆаéŸ?J„;;;,--µĘhii‰JeŪWR6·@Ū. YRRIIIś£ 33³ßČŹŹ"11QkŪųń浞ŸéLš{jœššŚéŗŌŌT­Ē% :Rē~GBˆß°°°ĄŪŪ»Ł":÷ŹŠŠwww\\\ī»éć÷«’’’§ī6œ»y{{ckkŪä)÷µk×ČĶĶÅŁŁ¹Ķ}†„„ØßTTTP[[‹]«žV›››³fĶÖ¬YCee%………ŲŲŲ°hŃ"-ZŌāõ}śōaƆ ĄķƒåååŲŲŲ`aa”õ|SSSV®\ÉŹ•+Õ;ˆXZZŖļ 4YŪ½jÕ*V­Z„µ?///õv…ŚüšĆ-ĘߜĀĀB­ļW–––² “P©TģŚµKėśyŸwĶč,ģģģ°³³k’MKK£““ō¾~?ģŹŠŠŠ“īāää$#D‡’Ā€Bˆ.ĒŃѱŻ*ę* ŗuėF’žżéÖ­›$ŗ½{÷j]booß.Sƒ;3…BA’žż›W©TĶ&FŚĀÜÜGGG\]]ļiŗŗ™™nnnĶąļĘĘʦM×ŪŲŲąīč,Ž=ŖuęRppš=Ķ*ķļģŁ³ZbJ„’‰'ź!¢{£mw††­ĖDēpę̭ɧ€€=D#$ņŪGŃ%µĒ”}[[[śõ뇗—W—,ü÷ ĖĢĢlvZņ„ :żŌŻö¢5iuöģŁŸh Ż)))Ńŗln׬śW[[ˁ“¶ 4ØKmŃÖÜņ’{Ż9Dt¼ę¾7Ś’¼B“'I!ŗ$…B”®’ŽVōéӇ^½zuéĀ*•JÅĪ;›ŗū MTT”¬)Õ£ŠŠ āććµ¶1B·Į“Q=Zµ«ƒ>ģŲ±ƒĢĢĢvé«°°cĒŽim9r$ęęęķr]ź×Æū÷ļor<>>ž{ģģ“—YB$ „čŅLMM鯻7.\ŠśÄ nĻpqq”{÷ī2ķæ‹«©©ivźīąĮƒø§'®®®ųūū“’’¢q¼®®Žččh­[ł Ż8xš ÖšŽŽŽxyyé!¢Ö355ÅŻŻ]ßah՞[*īŁ³Gėļ '''BCCŪķ>ŗBttt“:ńńńDEEŻsѾJKKµīF”T* ÖCDāA#Ė„]ž¹¹9½zõŅ:Ą—u’÷—ƇSRRŅäø™™£FŅCDś„õųéÓ§ÉČČŠq4ąĘM¶YlŌÜ÷KčÖµk×8ž¼Ö¶ &tŁßÖÖÖZ· ¬­­%66V mŽ;¦u£æææģä tB’Bˆū‚„„%žžžźjŪ²ī’žSPPĄńćǵ¶=ŗKNŻmZ÷“V©Tlß¾]kezŃqZśŗ{xx4»Ÿ»Š–¶ģŻ»7žžžzˆŖż :Tėńøø8ŖŖŖtų­ŠŠŠf“„Ɔ Óq4āA%I!Ä}ĆŚŚ???||| ’lś}¦¹©»ĪĪĪ 4Hu“&MŅŗŻ\vv6'NœŠCD®ųųx­kÖ &LŠCDā·N:EVVV“ćŒ?^µÆž={āééŁäxuuµ¼tĒ×ŗTČÓӓ=zč> ń@’$€ā¾bkk‹“““¾Ćķ,==ż¾œŗŪ^\\\š]ĆMqq±Ž#z0•••i-Ź0pą@­3”[ÕÕÕLjjŖÖ¶qćĘ=°5+:“¼¼¼f§Ć3¦]wŠ7…BŃģV” R4T®\¹BRR’Ö¶ØØ(ŁŗXč”$„BtZ•••ĶNŻˆˆøo¦ī¶—ąą`­EŽ9Ņģ µ£ŲŲŲ°wļ^8~ü8‡āčŃ£0nÜ8ŠŠŠŌē2„”C‡2dȍ½ŪĖĖ˹vķo¾ł&„„„̜9“ČČHHLL ß|óĘ–{C† !""‚±cĒźģu^¹r„Ł$‹§§' ŠY,¢y»wļÖ:#ĘÕՕ‡zHu¬   ­KPT*?żō“ Õ”††vģŲ”µe=ŠCTāA&I!„ÖĮƒµNƶ°°`ųšįzˆØsS(̘1CėSg•JŖ-[“n±Ų‘ńØ’š522"88+++vļŽĶ… īŚGmm­śõ888hü!­ļLYY›7oÖ‡©©)3gĪ”'|@JJ —.]ŅŚ6qāD­…5»:…BĮäɓµ¾¶œœ)ØCĒŽ#''§Éq¦L™"ļBēīæwæq憶üĄĄ@^yå•v|%ŚÕ××óķ·ß6»¶:<<œĄĄĄCÜŻ‰'ČĻĻorÜČČH§ĖFōåį‡ęܹsM’UuuulŚ“‰ `bb¢“Xāćć166&44”ŚŚZŒŒŒØ­­ÅŅŅ’ģģlLMM5–y°bÅ /^Ģ­[·4Šē•””ÆÆ/iii|’ż÷̟? ©««ĆŅŅRŻĻ‡~Čkƽ¦žQ¤ UUUlŚ“Iėö¶666÷U1JѵH@!D§sįĀ­Sw 'N”©“­0fĢ222øvķZ“¶«WƲiÓ&ž|ņÉ™}īÜ9~łå—6]ÓÜ`:##£Ł!méĒĢ̌'žx¢M15G„Rńć?6[cĮÕÕUŠVvåååĶÖk6lvvv:ŽH÷‹†n޼¹IŪ­[·Ų¶m³fĶŅY<„„„üē?’”ŖŖ [[[²²²čÓ§ÅÅÅ\½z•łóēćįįÜNšUWW£R©ˆ‰‰aŲ°aĄķ]O/^ĢØQ£Ų“i=ō©©©±vķZĢĶĶłÓŸž¤NÜøqƒ““4®_æ®Ó$Ą?ü@AAÖ¶‰'bll¬³X„ø“$„Bt*õõõģŻ»Wk[pp0=zōŠm@]”R©dÖ¬Y|žłē”––6iæpįŪ¶mcźŌ©ķžT)..&--­]ūü½æ—J„b×®]$&&jm·°°ąÉ'ŸģŠY¢õ8@UUU“ćÖÖÖź僠_æ~\øp_żµIŪŁ³gńńńaąĄ:‰ÅŃё¤¤$¬¬¬(//ĒĄĄ€€€vī܉………ĘĻNPPųūūkō‘››KXX3fĢ`ŌØQ( ŅÓÓńõõÅŚŚšāābĮ~c?żśõÓÉkˆ‹‹ćܹsZŪBBBd¦Š+ł %„¢S‰mvź®ģµŽ6¶¶¶<÷Üsüūß’ÖZ >>žŚŚZ¦OŸŽA»ßßÜÜ\g‹ęäęęrńāÅvé«””ķŪ·sźŌ)­ķFFF<żōÓR “ČĪĪ&!!AkŪøqćø§°Ó¦M#;;[ėūėöķŪ±±±ĮĻĻO'±(•JŒŒŒ())ĮÖ֖3gĪŠ·o_RRRHKKĆÕÕµÅėœœHHH {÷īüüóϼłę›üśėƤ§§SVV¦žaąī&77—K—.5I(t„““4öģŁ£µĶŃёɓ'wx B“D’B!:ņņr>¬µ-22[[[ŻtpqqaöģŁüē?’”¶¶¶Iūٳg)++ć©§žj÷uĮVVVz_s}öģŁvIŌÕÕ±eĖ’““µ¶šŌSOiŻ’MčĒ®]»“īŚąééIpp°"Ņ/cccžxā >’üó&ļõõõlÜø‘ēŸ^£0g{ G©TҳgOŒ©ŖŖĀĢĢ kkkNŸ>MĻž=155eĖ–- 8ēŸCCCfΜ©>īķķĶ›o¾Izz:o¾ł&ęęę,Z“ˆŖŖ*žś×æbddę3gˆUßwɒ%vŲkktżśuÖÆ_Ƶ¦””!?žøĪj0ŃI!„č4öļ߯uź® C‡ÕCD÷OOOüq¾żö[­ƒ¢““4Ö®]˜9s°°°ŠC„[UUß|ó WÆ^ÕŚ®P(xōŃGuöUÜ]rr2W®\irüAÆ+Ņ­[7ʍĒŽ;š“UWWóÕW_ńĀ /hēk/………Z×Ē———“ŸŸÆNņÖÕÕ©‹‡644PQQAzz:J„R£(lYYĪĪĪdgg·Ų†††äååąģ쬮¼_]]Muu5ĘĘĘK• ńņņj·×xėÖ-¾žśkjjj“¶?ņČ#wå „.H@!D§póęMrssµ¶=ˆSwŪ[ļŽ½™2e ?żō*•ŖI{VV«WÆęÉ'Ÿ¤[·nCBB hõł |ūķ·ųłłįęę¦ń”½ŖŖJ'ŪDęęę²aĆõĄā·•»!ż«««k¶®ČC=D÷īŻuQēʵk×HJJjŅV^^Īŗuėxį…°²²j×ū&%%±’žvķó÷²µµm²ūȽ*))į?’łåååZŪ Ц÷?!:Rū—B!īANNŽÖĮ©§§'}ūöÕCD÷Ÿ2sęĢf×’ßŗu‹Ļ>ūL=…¶½ķŲ±ƒĢĢLjjjHJJ¢¶¶–““4Š‹‹Ł±c)))ēļŁ³‡³gĻbff¦1ƒ”±‚ų… :$ĪF‰‰‰|öŁgĶ&”J%S¦L!<<¼Cćm£uŚ·‰‰ ?ü°"ź|f̘ŃģĢ•‚‚VÆ^Ķ­[·tU×UPPĄ_|AQQ‘Öv___¦L™¢ć؄hžĢBŃi) &MšōĄNŻķżśõĆŅŅ’oæż–źźź&ķuuuģŚµ‹«WÆ2mŚ“vŚž’’BFF’ś×æXøp!»wļF”P0cĘ öķŪGÆ^½ŌēįääDVV………ź!LMM133ĆÜܼ]ckT[[Ė®]»š-Ø×(uH āŽ”””pōčQ­m#FŒh÷§Ū]•O<ńk×®%++«I{aa!kÖ¬aΜ9ķ^#ĄŻŻ_|±]ūl«ųųx~üńĒvé+++‹uėÖ5; {÷ī<żōÓR|Uˆ{%3„BtZ ŠØī,Ś‡ÆÆ/sēĪmq}īÜ9>ūģ³f×Įß«!C†pčŠ!"""8xš ...Œ1‚Ż»wsóęM‚ežžžųųų4©SŠ­[7\]]Ūu-o£ĘEK 333ęĪ+ €Nhß¾}Z×cŪŪŪ3dČ=DŌy™˜˜0gΜf×’—••ńļ’›ŌŌTGÖu4ÖSi.ąąąĄģٳe9›čt$ „¢S211aōčŃść¾Õ½{węĻŸÆ±—öoåēēóÅ_°uėVŹŹŹŚå¾ęęęœ>}š!C†Gdd$GÅĘʆœœ­… µ)**jvŻ÷½ØØØąĒd͚5ĶÖ¦°³³c޼y’€æOff&gĻžÕŚ6aĀżēÅmĢ™3§Ł555¬_æžÓ§Oė8²Īļäɓ¬[·NėŒ*kkkęĪ+ÅVE§$ļ†B!:„ØØ(™ŗŪĮY°`?żō“Ö"a*•ŠÄÄD.\øĄØQ£ C©¼·g‹/ą›o¾ĮÜܜ7bnnN`` %%%<’üó\ŗt‰ėׯ0xš`|||P*•dgg @Ÿ>}ųļ’žļf’ųn •Jř3gŲ³gO³Oó0}śtĢĢĢ~÷}EūR©TģܹSk]ōU×`ooĻüłółņĖ/µÖØ««ćūļæ'==Gy¤ŻŸj/[¶ŒeĖ–µśü¬¬,V¬XĮ”)SšööÖXB“uėVf̘ѮńżVuu5Ū¶mk6į·æ¦Ļ>ū¬lk+:-I!„čtģķķ„ؚŽ˜˜˜šŲcŃ£GvļŽM]]ÖóŖŖŖŲµkńńńDEEŌ¦Z WÆ^e÷īŻmŠķŅ„Km:~§Gy¤Å*š*•ŠóēĻsųšanÜøŃb_Œ7Žššp©OŃI%&&Ŗ“GwR*•Lš4Iu-vvv¼šĀ ¬[·®ŁŸ‡ĘÆńć?Žī;ˆ|÷ŻwDFFņĘošĮ°aĆģķķÉÉÉ”øø˜+VØĻżę›oØŖŖ¢¬¬LcK٘˜Ö¬Yƒ­­m‡Ķ"ĖĶĶećʍ-Īrww—ķVE§'I!„Īĉeź®Ž…††āįįĮ¦M›Z¬ ž““ƦM›°··'22’‡zØUÆŖŖŖ“ ė(ĶĶP©T¤¤¤pšąĮ»žįöb=ö˜Ęö„¢s©ÆÆēĄZŪ „‹‹‹Ž#źš,--yžłēYæ~=éééZĻÉĖĖćóĻ?güųń <øŻ’bĮĮĮ9rGGGŽ=JMM ńŠCiœ;fĢ‚‚‚000Šų96lC‡ķ@CCæüņ {÷īm6Q ąēēĒ“O>)5D§'a !„čT|}}鯻·¾Ćx ¹¹¹±`Į}š)S¦“Ėī½{÷fٲe,X°€O?ż”—^z‰ÜÜ\¦NŹ_žņ&OžŒ‘‘Ń]ūi%B教™ÉöķŪļš4ģßæ?Ó¦M“]D— I!„†LŻÕ?&L˜ĄąĮƒŁ¾};iii-ž_XXČīŻ»Ł³g>>>„„„P__ßģłJ„’ČČČö[­¹$@yy9;wīlUīīīw]N :æQ£FuŲ6’÷3CCCüq|}}ٱcG³?Ļׯ_ē_’śżū÷gĀ„ ÷üµ=z4 …‚iÓ¦1pą@¦L™ĀąĮƒINNęć?fȐ!ŌŌŌØ‹“ŗŗŗbccƒB”@©TRXXÜ.r8lŲ0~śé'¦Nzo/ž•••|˜Ż»wS\\Œ‡‡;vģhsĄŃŃ‘ŠŠP ŌŖbc¢ėhÜĪQ“/…BĮĄ lÕ:łŖŖ*>ĢįƇqww§’žŌÖÖ6{¾‰‰ K–,鈊©ÆÆgéŅ„ZŪŹŹŹųųćQ©TwķG”PüīśBt’B”w&L@©Tź; ŃJ†††„††Jnn.‰‰‰œ>}Z]ø«-ņóóŪ³ hhhąÄ‰¬\¹’ĢĢLąv1A„R‰‘‘J„sss†ĪōéÓŁ½{w«īÓų|HH>>>²ę’>£££¾Ćøo™™™1iŅ$śõė×ŖŠłYYYdeeuŹ÷ųÖ.]źŽ½;<ņīī!I!„z(Sw»0gggʎĖčŃ£IMMåģŁ³\¼xQė–mŚÄÄÄ„©©)&&& 8[·nńŃGѳgO°··'00[[[śõėG@@›7oęŻwßeŚ“i­ŗ……3fĢų=/Utr >\ßa<<<<ųӟžDbb"GŽįÖ­[w½¦„™•““Ƈ§’ž’8÷I!„Šʎ«ļ0D;000 wļŽōīŻ›ŲŲXvķŚÕŖė}ōQĻ#""“ž×ųt·±āūžš‡ß­ø3FŠ“éR©dĄ€„„„œœĢįƇÉÉÉi·žÆ]»Fjj*ŁŁŁĢš5‹ōōtbbb ÅĢĢŒĖ—/c``€R©D„R1fĢöļßĻĶ›7™:u*ÖÖÖ÷|oWWW†NPP žÅ}I’B!ōf芔888č; !DēęęʀōĘI©TLß¾}¹xń"G%##ćw÷{öģY čŁ³'[·nÅŌŌ”iÓ¦±|łr €««+qqq„‡‡ƒ„„%ׯ_gÜøq|ųį‡,_¾¼Ķ÷ōņņ"22’^½zÉą_Ü×$ „B/,--eź®āwS(Lš4Imz¦P( €üü|Īž=Ė™3g(((øē>CBBpuuåܹsüśėÆÜŗu‹ŖŖ*z÷īMFF}ūö%%%…ŒŒ N:E^^={ölõ=lllčׯ zā!I!„z1vģXŁ–M“(77ggg}‡!:¹¾}ūāåå„ļ0Ä5j#GŽäźÕ«$&&’””ŌāwZæ~=źéž&&&ØT*JJJج¬ÄÄÄD}\©TbjjŹĄ9yņ$555­®?`iiÉ¢E‹$$8’B”sīīī²Ē²h¢qśÆ««+uuu¤¤¤`ccCUUŽŽŽœ?žI“&aff¦ļPE'add$uE:1…B··7ŽŽŽ888°’žV]÷ōÓOk|žģ³Ļj=ļ™gž`޼y|ōŃGmŠĻŠŠPāŌłöźBqߓ©»B›ŌŌTĀĆù|ł2/^ąōéÓ\æ~‚‚õ“@!EFFbkk«ļ0„¢K‘™B!tJ©Tāéé©ļ0D'äé鉩©)ÅÅÅ( |}}144¤ŖŖJ4R©TzŽRt666 :Tßa!D—#I!„Bt Ū’=õŌSzŽDtćʍĆŲŲXßa!D—#Ė„B!D—āééIß¾}õ†ŠŚŚZŹŹŹØ­­„¶¶–ƒRYYIyy9uuuź;D!ŗ™ „B!ŗ …BĮĉ„®ČbóęĶxyyQUUEII ¼żöŪTUUŃ·o_Ŗ««™3gŽ ¢ $ „BQ©T$''ė; х 0€īŻ»ė; ”#fff 4ˆ5kÖPSSƒ——fff8;;ćććC\\ŁŁŁųųųč;T!ŗ I!„BgźėėŁøq£¾Ć]”±±1£GÖwB‡&OžŒ‘‘³gĻĘŌŌ…BĮ„ P©T€³³³¾Ć¢K‘$€B!:œN§ė*•Röč~4bĬ¬¬ō†Š!###ąönī,) !ŚN’B!„čp~~~,Y²Dßaˆ.ĪĶĶMß!!D—'ir!„B!„ā!3„B!„zS]]ĶŖU«:¤o•JÕ!ż ѕI@!„:³fĶ^xį…VŸæk×.nÜø„„%O<ń„śxII ×®]“½ā…øØT* ō† I!„BgnÜøĮęĶ›7nŸ|ņ /æü2'Ož$%%…ŅŅRBCC5j„„„üļ’ž/Ó§OWkōļ’›'N°jÕ*<==õńR„擛›S§NÕŁżtv/!:3I!„B§._¾L\\YYYÄĘĘāąąĄŁ³g™={6¶¶¶źó¬¬¬:t(/¼š’ūߙ1c†ŗmęĢ™ŲŪŪK@ˆ.ĢĪĪŽAƒé; !8RP!„:5`Ą6mŚÄ”)SŲŗu+<łä“˜™™ńĶ7ß“Ŗ…BACCCG*„BÜ$ „B $""OOOĀĆĆńööĘŹŹŠ3gĪpäČFŽ©q~Ÿ>}ŌׯÉÅŅ““4.]ŗ¤³Ų…#!!”Mē_æ~mŪ¶qüųqćõõõŌŌŌ“ghBܗ$ „B™9s&–––üżļĒÖ֖·Žz …BĮ«Æ¾Ź_žņʏĻ”C‡ˆŽŽęäɓLŸ>€3fpśōi¢££‰ŽŽĘČȈwß}=æ"ŃVgΜaÖ¬Y,_¾ü®ēœœœ‚‚‚čÖ­Je۟Éååå±eĖĀĆĆÕNJŠŠŲ²e ¾¾¾ķötiżśõL˜0>śˆ… ’››Ė”C‡˜>}:[¶lį™gž@©TbjjJ=Ų²e ƇW÷aii‰„„%śzBt ’B!„N¤§§ėlŖ®½½½Nī#Ś.$$„Ķ›7ćģģÜāyūöķ#>>žcĒŽé(²ŽGNN/æü2’ūæ’{Ļż²yóęūŖŚ½““?’ü3C† įŠ”C¼ōŅKdff§QŌŌŌWWWõR”;õģŁ“²²2uŅE”$„B”S6x¹pįyyyŅ·hŻŗucęĢ™w=ļwŽaĈ÷ՌŽ‚‚BCCW?NNN­śv%Ɔ ćĶ7ßäļ’;oæż6õõõ$''ĪåĖ—[Շ••ū÷ļgųšįtėÖ­ƒ#¢ė’$€B!t*$$„€€€é»°°P’m4ž|æ¾¾žÕ«W³nŻ:’““©ØØĄŌŌooo¦NŹėÆæ®>’āŋLœ8‘’śÆ’¢¶¶–üć\¼x###¼½½™1cK–,ĮÄÄDŻQQĖ–-ćĒ$##…BŸŸüćQ©Tźó¶nŻŹāŋÕõ^}õU–.] ĄįƇńšš ““”æżķoüōÓOdggSUU…‘‘<ńļöŚk››Kxx8Ó§Oēƒ>håwŗóZ¼x1¦¦¦lŲ° ¾łę,,,ųč£(,,ÄĶĶƒ¢R©°µµåÆż«śŗųųxŠŠŠP(Œ5Š>ųsss=æ"!:7I!„B<ĄüżżY³f ±±±Œ?^}|ēĪ”––’žžNFF†zJvYY{öģa̘1(•Jźėėyųᇹpį&L`Ś“i˜™™qóęM¶mŪƔٔ” IDATžš***xé„—Ø­­%==½Åb+V¬ 44”Ń£Gk_²d ļ½÷ `įĀ…XYYQXXH\\~ų!gĻže’žżźó_yåžńąēēnj3čÖ­………$&&ņŽ{ļqųšaŽ;†R©¤¦¦†ōōtŽ}÷]ņņņ˜:u*“'O¦¬¬ŒķŪ·³bÅ ųōÓOŪ ‰‰'Kdd$sęĢA©T’’’Ā›o¾©‘,pttdĄ€dff’““ƒ···śėill Ą“iӈŽŽfĀ„ <÷ÜsSPP@LL o¼ń………¼’žūĄķäFzzś}‘šJKKkÕ9=zōP~g1E;;;ģģģ4ś***ŅŚµµ5NNNæ#Z!ī’B!„x€EEEpģŲ1uąĘddd°xńbŽ’}uŁqqqŌÕÕ©Æ;~ü8III¬ZµŠW_}U£ļwŽy///¾ūī;uąnNž<ɁŲ¾}{“¶żė_Œ9’ččh …FŪųń棻w/ŲŪŪsõźU>żōS¢¢¢Ųæ?††šö>’üó¬]»–ččhƌ£>ž““Ć™3gčŁ³§śŲŹ•+ ā믿柒ü' …‚żū÷Ė /¼ĄźÕ«5ś>|ų°Ęv—#FŒ`Ĉl޼™Ē{Œ?’łĻ<łä“źöōōt¢££™9s&›7oÖčK„RĘO?ż¤NÜO¾śź+trư°0&Ož¬“{ љI@!„z÷Ź+Æąģ쌫«+dēĪ”””°hŃ"žś×æāęꆩ©)ååå̜9“3gΐŸŸ””! .Ōwų]Z’žż±³³#&&F},..€gžy†/¾ų‚øø8{ģ1õyI€ģģl Фo{{{¶lŁŅdĄŽ’wŽy‡~żś1iŅ$ć•••óŠCiķļż÷ßgīܹź'ėG„””?’łĻMĻ>ū,k×®åäɓI€GyD#·«Ī?žĻ?’œ›7oāźźJll,üć›ō=bÄśöķKRRR«^³±±1+W®ŌØtßH”PąååŅ Z՗B܍$„B”wfff¼ńĘ,[¶ŒššpČĪĪęüłótļŽ×_÷Ž{E‹ńÕW_qōčQʎĖ?žČĖ/æ|OŪ¬‰Ū”J%‘‘‘ģŪ·źźjLLLˆ‹‹ĆĘʆ€€ĀĀĀ8qā„śü˜˜lmméßæ?AAA( /^̼yóš÷÷ĒŻŻīŻ»cllĢøqćZKRR;vģ`Ó¦MMśfffųśś²nŻ:\\\ ĀÓÓ¬¬¬&88X}~nn.UUU$$$4¹Wć…………ǽ½½µĘvē6wöļīī®õü=z“: н{w/^LNN‡"??Ÿźźj***ČĻĻg’žżŌÕÕµŖÆ®jΜ9ųūūwHßß~ū-ēϟ…čŠ$ „B½©­­nšąö€tóęĶ,\øwwwT*J„CCCŒ100 ””fΜ‰££c›ž2 ķ¢¢¢Ų¶m§Nb芔œ8q‚ŠŠP”J%įįį,_¾œŖŖ*”J%æüņ cƌQļÅȇ~ČņåĖyžłēÕ}* ÜÜÜ:t(ļ¾ū.>>>wćŻwßÅßߟéÓ§km_·nsēĪeŃ¢EĒmllčׯÆæžŗzICćąž‰'žhńžƒśFÅ÷ҿ•••Öö¶lSY__Ļ‚ ųā‹/ØÆÆ×h³µµÅĘĘę¾X’/„č$ „B½IIIĮŲŲX½ \DD...¬^½SSSƌCDD …‚ššpŒ4h555|žłēxyyI ÜY`šąĮ$$$Ø+°‡……QSSCBB …‚ŹŹJõł^}õUžüē?sķŚ5233ÉČČ ##ƒsēĪńż÷ߓœœĢÆæžŚā÷*%%…­[·²vķZu‚į·"""HII!;;[}ÆĢĢLŅŅŅųžūļ™:u*gΜŃŲ}āūļæĒĖĖ«Łū:::¶śėt§Ę™555ź$ÖŹŹŹZŻ×ʍY½z53gĪä/ł ~~~(•Jõn O?ż4?üšĆ=Å)„æ%I!„BčMPP€zšØQ£4ŽōźÕ ųæźŠ”C4 Ɖߧoß¾899CTTUUU„……0xš` 8qā„zJśI€ŲŲX’““yę™gšõõÅ××W£ļ—^z‰O?ż”ŒŒŒć+W®ÄĆĆC£`Ž²²²Ųµk‘‘‘ōīŻWWWuŒS¦LaģŲ±DGG€ƒƒ^^^ZėTVVrüųń{ŽN®1yŸŸÆ±µb£œœœV÷õóĻ?°zõju„ū;ßSŒ]Ż©S§HKKcŲ°a888°’~ĢĶĶ9r$Ē'77—™|8±±±?~…BAhh(p{ŗ{PPqqqÄÄÄąččHß¾}Õ׍5 ī,xx§ćĒóšĆóż÷ß7WKz÷ī ĄŽ½{›“Żŗu‹ųųųV÷՘\Q©TMŚga<ˆ>ųąĀĀĀųä“O8vģ~~~$''“””Ä—_~‰««+ļ¾ū.l޼™U«VĮG}¤ļŠ…čŌd&€B!„ **J=ßßß_cM{XX;vģ ¢¢‚Ń£GkLė`޼y¼žśėųśśbccCYY±±±¬Y³77·&÷ļōĮąääÄsĻ=×ģ9žžž888šńĒćččH’žżqvv¦¶¶–Ė—/ó·æż €ČČH†Žææ?’õ_’EEE£FĀÉɉŠŠ .^¼Č’%K044l¶žĄŻL›6æüå/,]ŗ333† FCCééé¬X±‚ŹŹŹV÷Ā7ß|ĆĀ… yķµ×ššš ¢¢‚óēĻóį‡róęM  T̾}ūŅ£G¬¬¬ČÉÉ!))‰ŒŒ ŹĖĖéÕ«ĮĮĮōéӇĄĄ@.\ø@FF{öģiqʉB’B!„č¤ µN£qŠ’łóē™={¶F[xx8«WÆnow§Ń£G³lŁ2V®\Ɍ3šōėęęĘʍ›}ĀćĘ ¾üņKŽ}÷]LLLšĻĢ̌M›61gĪ^|ńÅ&ķĘĘƼ÷Ž{꤄Ū¶mć‰'žąĶ7ßäĶ7ßŌ8ßŹŹŠÕ«WkŌh ;;;¶lŁĀSO=Åžš¶žżū3gĪÖ­[×Ŗ¾žųĒ?²k×.ÖÆ_Ļśõė5Śz÷īĶ‹/¾Č§Ÿ~J^^...÷oWrģŲ±&…‹‹‹Q*•TTTP]]­õŗĄĄ@ŹŹŹČČČŠE˜BtY’B!D§PWWĒwß}GHHÖÖÖ:tˆˆˆāć扈ˆąŌ©Sōéӧƶ{ŠõīŻ›ččhT*U“õŌS¦LįĄZ××’ķocįĀ…œ:uŠėׯS[[‹™™„„„hśsuuåĄtļŽ]}lĒŽźā-=z4×®]#!!Ė—/S^^ށžžž„‡‡ciiŁä5%&&’œœĢ… (,,ÄÜÜWWWBCC5Ī÷ńńįĄĶīb0ž|ʍ‡›››Fū,öööŲŪŪĒ”)S°²²ĀĘĘsss¬­­3f III÷‰gģŲ±˜››cooµµ5666<÷ÜsMjŖģßæ{{{Žxć õ±·ß~[}߃·wfXøp!ŽŽŽbaa½½=FFFXXX0bÄõ¹FŽ©īēęĶ›ķņuķGf!„B§²³³ÕOõŚŪoד !ŗ¾aƆqõźU®]»†½½=UUUōźÕ T*ēϟ׺kEG8vģ“&M¢”””I[II %%%\¾|™ÄÄDN:@VVįįįƒüF*•ŠK—.ńŃGńóĻ?sźŌ) )//WŸ?nÜ8JJJ4®+--åĄŒ?žōōtLLLHMMeĈ”——7‰ė«Æ¾B”PhÆ­­mSEE…ŗ@mm-?ž8{÷īÕśõØØØąČ‘#ÄÅÅqśōiÕń5ö­ķk%ōK’B!„Š©ß>1BˆęŲŲŲFhh(EEEXYYabbBvv6žžž¤§§kl7ŁŃ¾žśkõ öŃGeŌØQQ[[KFFŸ}ö„„„ÄĒĒSRR‚µµ5«WÆVˆ]\\˜8q"ŽŽŽØT*233ٹs'eeeœ9s†}ūö1qāD{–””NÆ^½077ē×_%&&€7npįĀś÷ļϧŸ~ŖNŲŪŪóä“OŅ­[7ŖŖŖ8uźūöķÓč×ŃŃQ½ķfcæ^½zįįį€ƒƒyyyźėX“h®®®˜™™QSSĆžżūłśėÆ©©©aóęĶüżļļ Æ¼hO’B!„BtJJ„R½žŻÜÜ\}ÜĖĖ ___Ę“——§žų£>¢Gķ¾¾¾źå 555œ9sFݾ’~‚ƒƒ5®łųćyõÕWŪÓł›xūķ·Y²d‰Ę±iÓ¦ńć?põźUś÷ļÆqŸ­[·„qMß¾}INNVʁųļ’žožś×æšŅK/ńŅK/©ĻÉŹŹb޼y„……ńÜsĻiō9lŲ0¾žśkõ¹¢k$€B!tāoū›¾CBˆßÅĒĒGżń AƒšóóĆĮĮGGGpvvfҤIŒ;V½ģéĪ©ü’ó?’Ó¤€ąÕ«WÕkŪ–o̘1MŽõźÕKżq擿;§ö‡……5¹fųšįI€ÖpwwēĆ?dėÖ­\ŗt‰łóēSTTDII ÅÅű×ÕÕµ©o”?’B!„BˆVX°`7n$;;›üü|ņóóµžĢ/æü‚©©©FąĖ/æl±’ĘŁwŅVCå·ėūį’’ †††Zw°¶¶nńŽŚ”””0hŠ .]ŗŌękEē%I!„B!„^ķܹSSÓéūÖ­[ķ֗ÉÉÉģŻ»—””rss¹yó&yyyäääpõźUźźźHJJbóęĶĢž=[ćś·ß~»Å­zč”{Ž­qą_WWGCCJ„ęFpŚ wóĆ?Ø666„„„ąč舍 6661wīÜ{ŽYč‡$„BŃi4440kÖ,–.]Jpp0O=õ .dšąĮüį`öģŁ >\ßa !ŚY{Ō;ҲeĖ8ž<ß}÷]“'ņėÖ­ćŁgŸPŪ»ó ü’ųG5®9uź_|ńžžž÷›•••ść““4üüü4Ś322ŚÜgćkŲ±cƆ Óh/,,”$@$I!„Bt*EEE굄EEEźõ®%%%÷ō$KŃy3•J„“{¹¹¹żī>پ};ćĒg芔888P[[Ė­[·ˆUŸŪųÄ?00#GŽšā‹/2{ölõ€½  €?üP}Żo‹¶EŸ>}8yņ$ƽöƼņ ...TTTpųša¶mŪÖę>ļ\ŠšóĻ?ćėė«žqžžĪ{ļ½§n×Õ÷Qü~’B!D§”T*‰ŽŽV¾k×.õĒ[¶lŃGHBˆōŪ'Ė]dd¤: p·'ą#FŒą©§žā³Ļ>C„R±eĖ–fßĖLMM™mŚ4uąōéÓźćóęĶc͚5æ3r!„Š=I!„č4~;ÅßÅŏč­UXXȵk×(++£{÷īDEEannŽŖkKKKŪSRÅŻłśś2uźT}‡”įĪŖŪBęĪKJJ %%%M*Øß«U«Vi$„B4O~# !„Š›ņņrŅÓÓ¹rå åååX[[ćęęĘ AƒŚ„’ʁyy9īīīDEEaaaѦ>*++Ճ I“Nk*M ўRSSP(üņĖ/„„„ü®ÄODDnļß.„÷I!„Š™ŚŚZ222ŌSüŒŒpuu„’žķ6ĄÖöÄæ­’;5Īī¹ö€čśĪ;ǦM›Ō’wkkk±··ĒĮĮ///¦OŸŽÆÆÆĘ5IIIl޼™Ė—/SZZJ]]z‹®=z0cĘ uµóÖČÉÉaƆ $&&’——‡J„ĀĮĮ{{{¼½½™9s¦zļŗŗ:,XÜŽŚküųń|ńÅ\¹rE=ĒŽ˜šš¢R©Ųæ?ŃŃŃ\¹r…āābģģģšńńaģŲ±DEEiÄR[[ĖÖ­[‰‰‰!??ŸāābT*¶¶¶8880f̦NŠB”ąŹ•+¬\¹Rż-\ø###¦OŸĪ˜1cČČČą»ļ¾#))‰‚‚jjj077ĒÉɉņĢ3ĻØ¦W­ZÅ„K—ČĖĖĄĄĄ€/¾ųø½–éŅ„ĄķYß~ū- STT„””!VVVtļŽG}”aƆ©c+((`Ė–-„††Üźļ“hYYYGÕk ׯ_×ėż…Š7I!*•ŠÜÜ\²²²øyó&åååĄķuē Ō××c``€B”PÆQµ““ÄŻŻOOOlmmõ~—Ö8Å?//ššœœœšóóÓZ|ļ^µĒmjjjØ©©Q.I€ӆ ˜3gN‹»C¼õÖ[ģŻ»W=Xžź«Æxžłē©ÆÆoöš„K—MDDÄ]cHHHąį‡¦°°°Łs–,Y¶mŪxųį‡ihhPÆWwrrbŊ”””hœ___OCCÓ¦McŪ¶mĶöūžūļ3wī\Ö®]«¾nģŲ±:tØŁk>’üsfĻžĶŗuėČĶĶÕŗvžĖ/æTܳgOƌĆöķŪ™9s¦ĘĻŻÖ®]Ė;ļ¼Ć”C‡čٳ';vģąČ‘#źöŗŗ:õ½‚ƒƒYŗt)’Ÿ½;Ž«<ļž}Ó2Ҍ,Y¶µZ›-˶¼`;[± $P  %””iHSéįüB’’„MOš“„æßIIš6”ĶNHˆ1 ŒĆ,6K²$k±%fß·ūūczÆļ\ŻŻĶ¢‘žĻ9:šͽ÷idėyŽē}^› ūöķƅ ’Ž÷_žå_šõÆ=ō€xc@ö<>ŸżčG“KŅćt:qāĉBƒu’„5Ėét¢ææ/^D4…N§ƒĮ`@YYL&ӲLJĆaLOOchh”P*• F£]]]Ųøqc^Aqņx<ēJü+**P__M›6eõ:ĀĄ’ȑ#())Éź5<OVĻGŠÓē?’y.ŠŅŅ‚śśzńą°ææN§”PßūŽ÷ø$Ąē?’y.ŠÖÖĘĶŠ{½^ō÷÷Ćår!ąß’żß%%z蔄@ii)WīĪ>ī÷ūńšĆćśėÆO8–%óōÓO'$JJJ`6›!—Ėqłņe®ją±ĒĆŻwߍ#GŽą…^ą:{÷ī…Łl†R©„ĖåĀ«Æ¾ ĒƒżčGxä‘G–}m¬h4Šūī»KØT*˜Ķfčt:ų|>\¾|@|÷sŸūžxā Iēżž÷æĻ%*++±sēN˜Ķfī{sśōiD£Q|å+_Į<µZ-yĢDŗŅŅҬ’?°RŁźIAH±”$!dĶ`³³³°X,°ŁlP*•0i•Ūņ©T*˜L¦„„A Ą«Æ¾Š@ “É„īīīuæö9crr£££p¹\P«ÕØ©©Éj‰?Ėn·cbb>Ÿ›6mĀįƇsöG\,ƒßļĻɹIń˜˜˜ģٳo¼ńFBEˆĶfĆÖ­[€›iw:˜:tƼņJĀ1—.]āö<ĪĪ‹‰D"ܶtZ­/æürBߌ:tˆK|Ęb±%ēųČG>‚æū»æć’@| ½S§Nq÷æöµÆį”‡ā~o£Ń(>ó™ĻpŪ<¾šĀ 8rä.\ø€ŠŠ Ą·¾õ-ÜsĻ= לĪw¾Ć-EĄ±cĒø]"öļߏŃŃQń²6q§Óé088ˆK—.ŗ»»qāÄ .X€¾¾>ģŪ·Į`/¾ų"€ų’†H$‚ÖÖVX­Včt:ĢĢĢWÕ599ɍ÷·æżķ’ž#÷Żw¾÷½ļĮétbff&ć’3HjŻŻŻčīī.ō0! $!¤Č…ĆaŒŽŽbpp~æ:UUU9+ß×jµÜс@§OŸ†ßļGgg'vīܹ.DZÉ9īmĆ IDAT–‘‘X­VńĘY­­­9™AcæßŚŚZ9r$/³7>Ÿ Ćäü:duS«ÕŠh4ƒÅ#<‚7Ād2”ŖŖ &“ CCC Ķćōz=”J%"‘†††š…/|aÉ1ĆĆĆØŖŖāŽ9}ś4·/=߁°}ūv®aēĪK‚ŲmŪ¶įį‡Ęųų8€ų{—’»h6›ńƒü@t;>öw6n܈߿īw _ē'9Łē~ņ“ŸÄ'?łILOOcjj æżķoįt:įt:a·Ūń?’ó?Ü1>ŸJ„’ Āłc0 æĖü±477ćwŽY2ŽŖŖ*LOOĆn·#‰pdzI™LĘ]‹õč£āŪßž6ĘĒĒqéŅ%üę7æÓé„Ėå‚ĶfKxĶlå!„¬e” „Æ×‹ĮĮAŒ# ¬¬ ÕÕÕyߌŸ˜››Ćć?Žŗŗ:\uÕU\³«µĀķvcbb‚ūžWVVbÓ¦MÜ h¶*šē †”¾ėŒ\.ǟ’łŸć‡?ü!œN'žéŸžIōyMMMųĮ~€#GŽ@„RįĻžģĻšųćĆf³į+_łŠč1---xģ±ĒpõÕWćäɓųĒüĒ%Ļłģg?›°ü(Y‚óį‡NøĻ_SæaĆѐX‰šįXō9ĀsZ­VÜvŪmYoīĘĖ/łK®1_ŖńHłw``·Žz+·5!!„¬w” „¬z ĆąŅ„KčėėĆāā"är9*++QWWWč”q***PQQ‡ĆŸżģgčźźĀīŻ» =¬Œ…B!\¼x£££šł|ŠjµŲøq#vļŽ³ Ųn·sI†ŚŚZ>|eee9¹Ör¢ŃØhc²h4JūĶÆCßūŽ÷ŠÜ܌“'OāāŋXXXX’$ŗpįī¾ūnŒC©Tā±ĒC[[N:Å#\^222‚»ļ¾;eĆ: ³żū ¹Ū]]])˜›7o|õ«_]’Ėå(//GUUjjj2JšĒ²qćFŌÖÖ¦|¾Ų²1>ųą’€J„Byy9Ŗ««”ŃhšöŪo§=^B)Vō— !dUŠD"˜˜˜ĄĄĄ“Z-Ŗ««—lĮµŚFFĢĢĢĄb±ą½ļ}ošÖÕ*‹įŅ„K8ž<¬V+†AMMMĪJüY.— “““p»ŻÜŒ”¾d%Į‘H„’ėŒßļdzĻ>‹ööv\żõ8pą€xEŅüü<¦§§ń±} ĆĆƘžžĘōō4Ģf3žžylß¾ĒēŹ÷½^/ęęę055…{ļ½ccc˜˜˜ĄåĖ—qóĶ7sA6ß®]» ×ė¹ūÉv8~ü8Μ9xūķ·—  Yüs’ś×æęš²l6 ³ēd|­V‹“'Ob×®] M9õ«_IJ—ŪšĒr÷Żwćk_ūŚ’cΜ9ĆķīĀ~*ģXšģ³Ļ¢©© :Žūś?üĆ?P€²®Š_2„UĆćń ææˆD"(++ƒŁl.ŹĘ{UUUØØØĄ‰'°qćFōōō¬ŗ2rvė¾ŁŁY„B!˜L&l޼---9½®ŪķĘŋįt:QYY‰«®ŗ •••9½fŗ€čć©¶ˆ#k“ĻēĆwÜ8zō(^xįČår 466¢±±MMMÜL³ĒćZ­ęŽ9vģž}öYČd2 455”©© õõõ掣»w/öīŻ+:†H$µZP(„7Žx§NĀ‘#Gø’7Žx§OŸ†Ūķ†\.—“ū ‹ßļ™gžĮßüĶßp‰®h4ŠoūŪųŅ—¾ ¾CĮ׿žunĘ^­VcĻž= u8Ę’÷'½æoŹļ’{Ü|óĶÜż††īö+Ƽ‚łłł„^ ###øį†ąńx ×ė¹d@*±X įp`2™ŠŃё0§Ó‰ēŸ~ŁóBČZBIBHA]ŗt ‹V«r¹F£õõõ«.`Ī„R©ÄÖ­[a·Ūńųććų“ZmĮĘƖųŒŒĄķv£¤¤7nÄŽ½{sžżžūöķ[u?+‹%Ż£œ &Čśa2™P]]¹¹9œ:u ›7oF]]JKKįv»1==Ķu£×éthll„N§Cee%l6ž{ī9ī˜’’īwķ‚_ZZšŠ±_ŒR©Äu×]‡ēž{±X ×]w ¼¼”P(a™Aww7JKK“¾‡…nøį<śč£€O}źSųģg? ½^…B·ŪPsĶ5׈'śśśąr¹ŠŌŌ„ŽŽ( „ĆaX,,..rĒDZyóf n¹åīńxßśÖ·P__ÉÉI¼öŚkØ­­EYYt:ü~B;–åČårŌ××c||o½õ¶nŻŹU”ł|>ōöö&l*õūF!Ō’„¼ŠÅb˜œœÄąą ģv;T*6lŲ€¦¦¦B-g*** ÓéšóŸ’ĒŽĖ[eæÄßn·C©T¢ŗŗŪ¶mKŚ$,›„’޽{Ӛ”,”`0˜tWžše²~|éK_Ā'>ń ńÄ%Ą żżß’= ą _ų|šAĄģģ,·e ŸL&ĆæųEIÉĮo~ó›xūķ·qłņeī1§Ó™š½^Ļmē'ÕM7Ż„;īøO<ń€x`,¶ę–[nĮM7Żø’žūńÜsĻ!‰ąņåĖ cā GFFDĒų|'Ož‹B”Ą£>ŠŪoæ~æŃhv»}ÉˆŹŹJŃ„É|śÓŸĘ<ēvQ2^BY‹( @É9Æ×‹Œ# qežÅf‹V«E{{;Nž<‰īīnlŪ¶-'×į—ųƒA˜L&ŌÕÕå¼ÄŸÅü+**Š&šēKčG"ź °Żwß}8pąž{ī9®‡» ŸZ­FCCnŗé&®_ŸU÷»ßēŸ/^L8F£Ń ””ļ{ßū°’~IchooĒąą žzź)¼óĪ;ø|ł2Āį0WuŠŌŌ„;ļ¼›6mØ?ó™Ļ@BI½\.Ē/~ń |üćĒžšĢĻĻĆn·# qžzzzpć7rC×]wžųĒ?āńĒĒųų8‚Į Ōj5t:öīŻ‹[o½’śÆ’ KvłÄ'>¶¶6<÷Üs˜››ƒĖåB4Å®]»Ä{œ?O>ł$ĘĒĒa·Ūįv»”ÕjQYY‰ŽŽÜyēKz­Ü’żšz½¢ ļæ’~“··ć™gžĮüü<“Z-ŹŹŹpĶ5× »»?łÉOÄ«+ ¾¾žūžń›¼677sKżŁBČj#ūÜē>Ēń}`Ł,)!„¬ŌÜÜ,  “É`4Q^^¾&ŹüWj||Ū¶mCWW׊Ļåół066†ńńqųż~”––bćʍ0›Ķyū^ ’īīī¢ üłęęęR–żWTTp³½„B!Łōūß’ž«˜zöŁgcĆĆĆQ¹\Q*•a…BT*•~•JåQ«Õn•JåP©T6µZmU«ÕV•Jµ T*ÕjµM©T:ÕjµK©Tz5M@§Óc±XX­VGi*ƒ’Ńhćććčļļ‡ĒćįfmųM§H\cc#!—ĖŃŁŁ™Ö±l‰?9Åʍ±sēμ”ų³Ün7&''įr¹`4±gĻž¢Ųa9ü&bÉJB!¤hQ€’1æßóēĻcll %%%Ø®®FMMM”‡¶ź544 ··—ė0ž [āæ°°€P(„ŖŖ*466¢½½=O£óx<˜˜˜ą’½{÷®‰ĄŸOJS°@ €h4š×¤ !„BH¶P€’–……ōööb~~ž+óÆ­­„2’ 455įå—_†ÉdBYY÷ø×ėŅ 0>>ŸĻ‡ŅŅRŌÖÖrkfóIųļŁ³UUUyG¾HéžĻ0 ÷s!„B)6” „¤‹Å0>>ށøŻnh4® Y™L†ęęfüźWæĀĮƒ166·Ū •J…ššģڵ+a?ė|Yo?ŸŌ-½^/%!„R”( @YĀļ÷chh£££…B())ŁlNŁašd†Ż"ńõ×_Ē»Žõ.ØÕź‚Œ#`bb6›mŻž|R“‘H„ė0N!„RL( @,..¢ÆÆ—/_Ć0ØØØĄ–-[ØĢ?***`µZįõz󚘚š‚ĶfƒZ­Fww7·½Ųz‰D$?—ݶŒB!¤˜P€u*‹arrżżżp¹\P©T0›ĶŌĶæ@ššššöŪoćčŃ£9½Ž0šļźźBOOONÆY,¢Ń(†‘üü`0ˆ`0F“ĆQB!„d%YG†‡‡122‚@ €ŅŅR˜L¦uYö½Ś(  ĢĢĢd}6Žļ÷c||‡F£]]]“ƒƒˆh4šö1.—‹~!„RT( @Čg·Ū144„ééi„Ća”——cÓ¦Mi8GRŪ¼y3†††²’ƒøxń"”Õj±cĒŌ××ga”kW:KXĮ`zB!¤ØP€5&‹įāŋčļļ‡Óé„R©„ÉdB]]]”‡F–!“É Õja³ŁPYY™öńb’‘#GØÆƒD±X,£ćUVB!¤hP€5 cttƒƒƒšz½ŠėõØŖŖ‚Łl.ōŠHš6mŚ„””!:tHŅóŁĄßjµB«Õ¢««‹’ e²ˆWx<”””dyD„B!ŁGIBŠ”ŻnG?fff‹Å`4±qćF*ó/r*• >Ÿ Ć$ ä)šĻL+€xo½^Oæ„BYõ( @H‘`ÓÓÓ°X,°ŪķP*•ج¬DCCC”‡F²Ģ`0Ąn·', …B˜œœ¤Ą?‡V’ˆÅbp8-ć „BÉ'J²ŠńĖü}>t:Ģf3k\ee%¦§§QRRĀž:ŽÖųēX:ŪŠńł|ŠėõŌ$B!«%YeœN', ¦§§FQ^^NežėŒĮ`Ąąą b±:;;)šĻ“•&€x“ĄźźjśyB!dÕ¢$!«Ąüü<, ęēēØÆÆ§@b’Éd0›Ķøé¦› =”u%I€H$—Ė…ņņņ,ŒˆB!$ū( @H„ĆaŒŒŒ`hh~æ:UUUhll,ōŠČ*‘i§zRxn·z½*•ŖŠC!„BY‚’„ä‰×ėÅąą ĘĒĒPQQAež„¬büJœt«ģv;6lؐķ!B!„¬%ɆapéŅ%ōööĀf³A”P ¢¢uuuiŸkqqåååP*éWv½`&å6$ūųßk™LĘ}° €t”P%%%Y'!„BČJPDAHE"LLL```‡Z­ÕÕÕhnn^Ńy z{{ŃŃѝN—„Ń’ÕŽ…%—˹$»}`:‰§Ó N…B‘«!B!„¤’„¬ŪķF?&''‰DP^^³ŁŒźźź¬]C«ÕbĒŽ°X,hii”ŁÅu€ł'V —˹ŖŒt—0 »Ż³Łœķ”B!„dŒ’„d`~~}}}˜››Ÿnž*• ;wī„ÅbĮęĶ›QYY™³k‘Ā£^ł'üž³I'|>ōz}ÖĘI!„²” D‚X,†ÉÉIōõõqež6lXq™ŗär9vģ؁įįaŌÖÖęõś$؄<’Ēxl@”P ‹%ōŠż7ƒ;„BY ( @H^Æżżż˜˜˜@(BYYYÖĖü3!“ÉŠŽŽŽńńqLLL ””” ć!ىDhęøÄ‚tž’žŅ€tÄb18ŖŽ!„BČŖ@IBxl6, ._¾Œh4 £ŃˆŗŗŗU¹>»±±ÓÓÓB[[ŪŖ#ɌŻnĻ{• I^}!—Ė”P(F3®`—hµŚl •B!$c” ėZ4Ņ 000Ē­V “É„śśś“Īćr¹PVV–£Q&·yóf,,,Ąb±`ūöķTn¼Fø\.Ŗš(€dI™L…BĮ%2åp8P]]M ;B!„%Čŗć÷ūqžüyŒĮķv£““ÕÕÕØ©©Éųœ‡‹‹‹hllĢāH„©ŖŖ‚V«Å¹sē°cĒ(•ōk Ć,X“Ėå“dwŲŁ~vI€B”€\.G,K»ˆ/óšz½“»!„B Š¢².,,, ÆÆóóóÉd0Ø­­ĶZWWW‡ŁŁY ”½½=+ēLGii)ŚŚŚŠ×ׇķŪ·C­Vē} k »E› `ׂē:1ąp8Ø  @ų•lĻ~f“l5@&K€x•‡^ƧŖB!„ %ȚF111žž~øŻnh4˜L¦œĪŌ×ÖÖB.—cxxmmm9»N2z½°X,hmm…Į`ČūŠÜóƒ~’1öńL‚?©¬V+>œ³ó“ääryBpĻ’9ó—dŚ ˆ7 t¹\0Y7!„BH:( @Ö ¶Ģtt”+¹Ż°aC^»ł×ŌŌ@©Tb``y/'W©Tčźź‚ÅbACCŹĖĖózżbÄžŒŲĻüZžĻO,0̶P(„ŅŅRjW@J„įp}ž’€•lÄw)--„m !„R”(R ĆĄn·ĆjµāņåĖp»Ż…B…B ĻS©T(++CEEL&ŖŖŖÖŌ ±ÕjEoo/ęēēĮ0 ŒF#6mŚTŠĘ[f³2™ }}}Ų±cGŽĒ¢P(ŠÕՅžž~ƒAlŲ°!Æ×_mRĶģ³ŲĄŸķē°ē`?b±÷X¶ĶĢĢą†nČśy‰t …‚K‰‰į’ö½.†aąv»©€B!AI€"²øøˆ³gĻbff@>ŸOņ¢ …ƒz½čźźBSST*UŽGŸ±X ³³³°X,°Z­P©T0›ĶiȗŠÉd‚B”@__:;;ó¾žW&“”³³cccØ««ĖėõW ~°Ļčł?a€- ē'$}¹Hčt:ŚK¾ĄT*@Bā‡żą'ärłŠšR5!„B …’«”Ėå‚Żn‡ĒćAoo/fffą÷ūŹTӝ…ŠF£p¹\ÜżÉÉIōõõ”¬¬ „„„Ųŗu+®ŗźŖU×¹:`hh###…B())ÉdBEE…¤ćc±XAšpF.°cĒŽ‚Œ”¹¹“““˜››Ė번|›ķ~fŸĆłĄ•б_ē'ųēē7„ć/ČFµĒŌŌ>š¬ųžyę,,,p8‚\.GII JJJąółąół‰D$•²2 ƒÅÅEœ8qēĪĆķ·ß³Ł,éø©©)®Ģ_©TĀd2¬[}cc#¦¦¦022‚–––¼__­VsŪ÷µµµŃ ¤5õcńƒyž}ö3[Y#– `ŸĻ’Ģž_¬Ś@ˆæO<Ū &<b±öķŪ—Ńń$wų•Tģūß€’^P©T _K÷żĄVkŃæ„BÉJäŲ… šüóĻ#®Ŗ­ ōz=ōz=ü~?<"‘ˆäeÓÓÓųĮ~€={öąčŃ£Kf°B”Węļ÷ūa0`6›WĶlē–-[`µZa±X°}ūö¼ĻĄ©T*tvvĀb± „„e]7ƒ[®©_²>µžüs/·“ U@äI9.™P(„ŁŁY|šƒ”| É~¢VX Ŗ7@¦•!” „BH>Q ‡^zé%ōõõq]¤W#N­V ĒŸĻ'yĖ+—Ė…Ó§OcbbwŻu‚Į 155…`0£ŃˆŚŚŚ‚l‹'…Łl†B”Ą¹sē°cĒŽ¼’|”J%vģػݾn“Ė5óÄ;ų ×ū'›õūœ¬ź€•,x üł³Āé4†‹ÅbÅwÜAM"W)įæ[ Ćp[*•Ź%½Ųj~ D»ō€B!$č/Š`Ļ=÷ĘĘĘVmšĻ'“ÉPZZ ½^‡ĆP($¹*`||_’ś×QWW‡M›6„½ÖŽėõbjj mmmyŸ‘ÆØØ€Z­FoooAšõ) IK*ŠUŗMżÄšõ„ ōS5õ–ü§ū:ŲĻüŪüĄ_j%@,ĆłóēqÓM7­ŪäO1ąæ/ł;°3žĀžĀ 6™*5ĄVbQ_B!„äĆźœ¦-b Ćą—æüeŃ$ų *++QZZšÖ؃Į ¦¦¦ąńxҾ¦Į`@UUśūūW¼×z& ¶mŪ‹ÅæßŸ÷ėÆUĀ2žV{†}lIµR©„J„‚B”€Z­†J„Jų¬V«¹ē)•Jī8±*žu3]»/œõgƒ@6äMŹł†ĮČČŽ=ŠŖŖŖ“ĘBņ‹}_²„?~e怒>å7¬”Bj³VB!„•¢J€,{śé§qłņå¢K°d2JJJ Ńh`·Ū‰D$Š×ׇh4Š-[¶¤uM“É…BĮ­ŃĻ÷Fƒ®®.X,466¢¼¼<Æ×_K„³üüūģ×ÅŹłÅšś‰•’';æ°ä%ćgg}įšp±õįĖĶāĘb1ŒŒŒ §§›7oĪx|$“Z-¼^/wŸ]‰Døp„a¤R©\ņMgi@8¦­C !„’”Č¢ßżīw˜™™)ŚŸJ„BUU …$ 100€H$‚ĘĘĘ“®g4!“ÉŠŪŪ‹®®®¼'”J%vī܉ƒAlŲ°!Æ×/&Ė•ł‹ķbA=Ÿ½Ķ>W˜4`o'»&’±•¾6ž9ų?²;jHķ‰D0::ŠėÆæµµµ+É~€Ÿb«ų½^ųĖSXģ{ƒ_9J:}%!„BV‚–dÉŠŠ,ĖŖm„— ™L³Ł F#¹¬5 bxx333i_Ƽ¼[·nEooÆä…Ł$“ɰmŪ68ĪŒĘæ$+óOÖØ-ńg?³lŁ4{Ÿæ€=V˜$ą_“½-[:RĶŲ²Į›0ųg÷„ēwƒO%`tt·Ür %ŠŒV«]’ŠÅb ļįnümŁ÷µŌe…XE!„õiķD¬äółpźŌ©5•ą3™Li%B”°øø˜öµJJJŠŚŚŠŽŽ^ÉK²I&“”„„”Pcccyæžj& ō+k§łüuūl`ĻųŁąˆ}.{ō³ĖĖdóµ$›õgƒ|~š‡R6—Ė…K—.įĪ;ļ„ŃhĢŚŲI~Čd²„ęü¾ģ{‚}/$KP€B!«ŃڌZóģ©§žB4]ӝ+** Õj%?ßļ÷ćwށĻēKūZz½mmm8wīœä„ŁÖŲŲN‡”””‚\5+ļēĻĢ'kģǟéO6ćĻ~güÅ® d/@ā—šó»¾óoóg{Ćį0ģń—,gzzŃhwÜqGZæ7du)))Y’Üåæ?ŲĐ0Ąöø`G¤$±h87 IDAT9!„Bņ…z¬Ššš0l6ۚ萊L&ƒŃhD,“¼§µ×ėÅ[o½…«Æ¾:ķ‰^ÆGgg'śūū ²}ŌÖÖĀ`0¬‹­»–+󰤀ż,\ \÷/–L`åźū*œé—ÉdˆÅbK&„[Į±ŸÅŠ%&Āį0ĘĘʰ’~tttä䵑ü‘Ėå(//‡Żnp%F‡—$Ȁ„I3©•kż’B!„¬”XX,†—^ziŻüń&“ÉPYY «Õ*y;+‡Ć‹Å‚;v¤}=FĆ%ŚŪŪ 2£ŗv ĪŗK śÅł‰uóOvž\$Vųēnį'lā' śł ܄Į?’9©šĪĻĻĆėõāÖ[oEiiiV_)ƒĮŸĻĒ%?łļ6€ėgĮ>Ą’¤W**•*£'„BYŠ’+šÖ[o! B©\?ßF6°øø(iĶ>Ć0˜Å¦M›PYY™öõT*¶oßŽŽŽ^ttt@Æ×g2lĀ#”šKž…3˜b[ö‰}MX5ĄÆ$ŪŹ/[Ųąž±Ļü`Ą’~6°ćM8ć/–šūż˜ššĀöķŪŃŻŻµ×EVŠŠ ĢĻĻ'lÉo^ʾ/ų[ņHJAŪB!$_ÖOōšoæżöŗ©ąS((--…Óé”ōn0D__®¹ęšŒ‚?•J…]»v”··[·n„YV –Ūʏ}Œż,ü`ß×ģš ‰•> ¶üēdJ,°ēæ>ac?įm6øē?ĘśÅfūŶž ž£Ń(.^¼½^Ūn»Tk˜R©„ŁlĘĀĀĀ’$ŲŪ Ć$$ŲŽR*•j]ž_B!„Ā $@†ĘĘĘÖUŸN§C @ Ō“ĶćńąĀ… hnnĪčz …;wī„ÅbACCŹŹŹ2:Ļz \ßĻJµvYl{?aR@8ÓĻ?/ū9Yņ!Óבź3?Š›ń>‡?Ė/V 5ųg«[B”Ž=ŠŖŖŖŒ^).jµ•••°ŁlKģ{‰ż=įM¬¢Dˆæ !„BH®­Ļ6 Īž=»īgnŒF£äžŃh“““ØÆÆĻ8q"—ĖŃŁŁ‰¾¾>ŌÕÕ”¢¢"£ó¬eĀr|ö±d??Č>¶Üś~)ežé$Ğ+ ōÅś%K$Ū €’<žu“-+ąuóóóp:8tčPĘ -R¼t:L&“ö—ąK, ÉårŖ"!„BH^Q Ńh‡cĶwŒ_ŽL&CII ‡¤`ĻėõbxxŪ·oĻųšr¹]]]čļļ‡Į`Xwėh—+ó—š'[ß/üĢ0LŅ­ū„·Ó•¬ĢŸ’:…A{Ŗ²}±„€p–Ÿ}LxĶdżŲqF£QĢĪĪ"`ļŽ½hkk[÷æūė™V«EUU—,/¤ü»XZZŗdBB!„\¢$@.^¼ˆp8¼n—šét:x½^„B”eŸĖ0 ęęęŠŃѱ¢?ze2:;;3>¾X‰•ł³:’±åŹūÅŹżÅ>Xł,ó›é®įOUŹ/¼Ķ?²ŪÉ^G(Āģģ,d2<ˆ-[¶dōzÉŚ£V«Q]] »ŻæßŸšµt~/4 õ8!„BHŽQ›‹ÅB37LOO£®®.#[;ÄŹšÅfł“­ćgo‹=_xžd×åK·Ģ?U?įģ¾XŠ/,·›ågo‹]/Łx…É †a°øø»ŻŽņņr=zf³Yņk%ė‡\.‡Éd‚ĻēƒĖå’“[ ŸZ­†ÉdŹŃč!„B’£$@ęēē) Ą£V«”T*%UÄb1LNNR`ÉŹüŁŪɶčvšO•$`ĻÅ’œ-Ā@L[ü‘¬R©Tō’!„BV5J¤Éb±Š,Ž™L„R)) sssė2 ĢÅfé—+óē'’}šƒba×ņ•V±$kĘ'“ÉDך³Ļc;©‹­õOÕ,PŠdƉaŲķv8@UUzzzh?!„BY·Öu4 1==©©),,, pS0„B”€V«EYYjjj°yófø\®œ-P*• k¹łĮS$Éø{¾ IćdŸ·—U,Wę/ žÅfńŁĻĀY’dežĀ€_øcĄJ_š¾p­æp+?6ąF£¢UĀćÅŹü3}æŲl6x½^hµZ477ćšįĆ“;!„B!X‡I›Ķ†3gĪ`rr^ƏGRWg™LN‡`0¹\•JNF“Ń8ŲƒJ„‚Z­ę‚½d†A$ßļ‡ßļ炬Մ}R¾Ÿįp~æĶfRĖüłĻįwīgŸ+ žŁĒ“5ō&ų­äu$ŪR/YiæXƒ?ĖĪų‹]CŖp8 ›Ķ·ŪĶulß·o6mŚ“&“L„B!„¬ÄŗIŒįŌ©SX\\„ĒćIūx†aąółÄg7Ł V©TB©T¢¤¤$å:P™LµZ F­V›ö’™LĘ­5---…ßļ‡Ėå’“-_>IM„B!Ųl¶5•Hü³kš…%ūü™}±ŪĀ„{.©ežĖŅ©‚|~%а©€„™ždI±Ę€bA~ŗ!‘Hv»n· Ć ¬¬ hhh µŲ„B!„,cĶ'¬V+ž~śiĢĶĶĮļ÷gõÜ Ćp ƒĮ — Šh4\P£V«”Óé Óé²¶­ L&ć¶„r8Y]+”V« —}Ć0XXXĄęĶ›ó0ŖÜ \ł?c±müÄ:ł³üćÅśæžé˜„ĢĘó›õ‰Ķś ›ś güŁŪĀė‰%–{-Ńh.— n·Į`:---hiiN§Ėčū@!„BČzµf“ ĆąÅ_ğžō'8Īœ_/‹! Įn·C­V£ŗŗf³9kæ™L†ŠŠ (•JøŻīœ]'jµZrśjJ^$³Üś~ö1KŹöÅ:ś'›éē—żK¹^:åņR~E‰XĒ~~ žćĀ^Ās‹%„cŠÅb°Ūķ\„‹^ÆĒÖ­[ŃŌŌ“¦*G!„B)„5™…BųńŒ©©)ÉŻź³…aƒAĢĪĪĀįp ±±1ē%Ź„„„`&£e٦V«!—Ė%õ,Č÷Ļ&]ÉÖ÷‹•é‹­ßüb žł„2-óg‘²®Ÿż:ūóā÷ÉÖł +Ų]ľRĘĖ0 œN'¢Ń(t:š››ŃÜÜ ƒĮ°ģk%„B!„H·ę’@=öfgg ŚM?‰ĄårahhUUUØ©©ÉéõŹŹŹF >»ž, Ćīx°›· ×į³%[×/䧚õ_n¶„cēąĀY~ö3’#Y)[ł gū„šł|X\\„ßļ‡F£ACC<ˆņņņ¬|!„B!āÖTĄėõā?’ó?qéŅ„B…ĆVx<477ē4ą5…Bß9@źˆh4Š`0­V›ć-O,W(Üׄ’rA²mü„×äĪĘųÄŸ½/|<ÕlæŲŒ?°tɀŲķd†Żn‡ĆįTWWćź«ÆFuuõŖL‘üĒO< ž»÷ŠCxD„B!kӚI„B”U—`Åb18N bėÖ­P«Õ9¹Ū#ĄjµęäüéŒCŠp8 ŸĻ—÷$€°ĢŸ  …kņ…kü… ü„Aæšž¹ŲŪ+]ßĻĒ+ ņYĀ&}üąžßݟżŗpæš|ģćĀūÉ~Ž‘HV«n·­­­čééYI²śŒŒŒąį‡_VDIB!„ÜXI†aš“Ÿü—/_.ōP’b˜ųƒēϟGKK 4MN®£V«”×ė¹ķ A©TJŚ! Āēó”²²2£Šξ ×õóo‹Ķö+ ŃÉΛ캬Lb³šüīüģćbkł…3’bljuļO6Nįė‰F£XXX€Ėå‚Į`Ą®]»ŠŠŠÓ™„B!„éÖDąå—_ĘŌŌTA{HøD@®fDĖŹŹD›µåƒZ­†×ė•ōÜ\'+Äf©Å¶ńK6ėæÜŚ~įł²5Ė/$6/,Õ+÷ĪžóæĪĒb×ö Æ)„±ŸĶfƒŻn‡N§Cgg'¶nŻJ?!„B!«PŃ'œN'žųĒ?" z(’ƒAŒŽŽ¢­­-';Čår †‚mČn‡'%–š,H%müÄūIY×ĻÆąę7 äĖF U)¾pK>žĢ~Ŗą_Ų՟ĪtLJ±°°·Ū¶¶6\żõ9ß ƒB!„²2EŸxśé§¹fcÅ$`ddmmm\ŗl2 šz½©`i) W𼑺_² žMXˆĶō ›ū±Æ@'›ķĪ4l[?±dåžbUü1%ė! E,ćfżĖĖĖńīwæf³9£×J!„BÉæ¢NĢĶĶavv¶ŠĆȘĻēĆÄÄš››³~n¹\­V[Žl`-E¦I ±€_xŸ’ĮļōĻ_×/\ ü`ƒr~¾lvõ–ž©Jż…ż’uųgæĘžOģ:RE£Q,..ĀårA­V£½½ļyĻ{ Tõ?„B!„¬KEżWü /¼•rņBr¹\°Z­9™M-TƒĄt‚ćTI€åŹüÅÖå‹mćĒO$[ĄĪź Ē.Öå?„¹pm>ū8攟½-6ūĻžSø’:閶Ūl6x<ØT*tvv¢µµ5'U+„,§ÆÆgΜ”––āƒü`Źē’ś×æNhk2™pŪm·„<ę©§žāvVٽ{7öķŪ'ś<ĒƒS§N”ÆÆ³³³‡Ćšūż(++Cyy9šššpąĄlŪ¶~_!„²*m  bnn®ŠĆX±h4ŠK—.Įh4f}fU­VC”PH*ĖĻ6©As²ĄTj™??Hłb±Ļ[ćĻŽĪę6~bÆ)‹qĖ R•ś ·ņć'ŲĒ„ßC±īžüבJ(Āāā"¼^/ :;;ŃŌŌD žHĮĶĻĻćć’8€x„ŃńćĒQVV&ś\†apļ½÷&l•ZRR‚÷æ’żIƒņH$‚|ä#šx<€Ē|IĄn·ć‹_ü"¾’żļĆļ÷/;ęęęf|ö³ŸÅ½÷Ž+é5B!„äKŃ&Ī;§ÓYčadE0ÄäädN–h4š‚nø±JįL?æ$?Łŗżd]ż…%’©Źł“=¾’€šŲdĶś’måǟżŠĪśóoK]²ąół`µZ‰DPVV†Ż»w£®®.ė•„¬Ä”C‡ Ńh Fqę̼ē=ļ}īččhBˆĻŽ÷õõa×®]¢ĒüéOā2™ GŽIųŗÕjő#GŠßß/yĢcccų«æś+¼łę›ųīwæ+ł8B!„\+Ś$Ąąą`Į¶ĄĖĒæßN—Õó* N%@Ŗ2~`@4Ą+ļOU1‹Y~įkŽ[ļĻ®įā½p ?įg¶Š`¹k-÷½w¹\X\\D,CMM ®½öZ˜L¦•¾lBrF§ÓįĄųĆž8}śtŅ$»l¶oßĪžzŅ$ĄéÓ§¹ŪŪ¶mCuuuĀ×?śŃrēQ*•øå–[pōčQŌŌŌĄh4¢¬¬ ‡sssųć’ˆŸżģgXXXüŪæżŽ÷¾÷įŲ±c¾zB!„ģ*Ź$Ć0E¹#@*įpÓÓÓhiiÉźyÕjuVĻ'•Ō$€°Ė¾0j†_ŲšOXöĻ?æŲ˜²™X.šŠĢO8Ė/Öü/Uƒ?įµRĶü3 §Ó §Ó‰p8ŒĶ›7ćŲ±cIĖ© Yzzzø$Ą+Ƽ’ōyÆæž:wūSŸśžśÆ’@<9pß}÷‰óņĖ/'\‡o||Ļ>ū,€xą…^Xņ¾}čCxä‘GpĶ5×```š£żˆ’„BY5Šr±ļüü{ö,‚Į čóŲJFƒæų‹æąŽėü >†ašź«ÆŠ^^}õUī÷īę›oN™`™L&<šĄÜż‘‘‘e!„Bɗ¢¬xēwVõ:÷LƒA\ŗt uuuY=ÆR©Ģzr![d2”JeBŁ>?ēßNUęĻžK¬©_6I™ńŪ¶/Y/į6€ü×!v½TŲ­ü<”J%šššŠÓӍF³ā×MH”]uÕU܎'@o¾ł&Žõ®w%<‡]ūÄ;üėt:ģßæ/¾ų"×+@øĖĄĄ×C@.—ćšįĆ _ē7 moo—<ŽŻ»wćŗė®€œģžB!„’©¢LLNNz9“‹ …B±j“r¹J„rÉŗ±¦~‚a™¶~±eÉ:š§ üŁŪĀę~©±u’©ŠV~d½Šh48tč^|ńEń%Ā$Ąo¼Į-»9pąąąĮƒxńÅĮ0 ^żuÜtÓM Ēšūtuu-éQZZŹŻ^\\”<Žżū÷ćäɓ’ŸO!„’/E·€a˜5¹€‡“–¹fj5oń&,÷W«Õ ÷ł•üÄĒ`åėūł ±&~–łüR¶¬_ų …FF‹Åør~E{nžµS ˜žžĘČČģv;ŗŗŗšĮ~·ß~;:::(@Ö,~)>?xgńKžŁ$ūHģ v±R’ŽŽīöüc<õŌSkŖ)-!„B֟¢«˜ŸŸ_“KXįp‡cIwź•XĶŪ½±kū…Żū…[.WęŸI@¬ģ^lK?vvž?›/¶nŸ ģŁ™H~C@žµŲs¦SņĻnå a4±wļ^ŚŹ¬;ü żµ×^C,KHrņƒüƒˆ'Ųß7±¾Ė%Žõ®w”½½CCCšł|øķ¶Ū`0ŠŁŁ‰††l޼[¶lĮ–-[øŪ555ō»I!„U«č’ēϟ‡ßļ/ō0rŹķvg5 PRƒra3?>į€lH| g’ŁŪü _øĘ7Ć/œÉĻFąļv»aµZ¹­üŽ=ŠŹŹŹ)V{÷īEii)Ün7ģv;, ŗŗŗ€+÷€ŚŚZ®·Jee%Z[[1<<Ģ-`«e&&&055 žoŃ5×\³äšr¹?’łĻqć7rż¼^/Īž=‹³gϊŽS«Õ¢»»‡Ęż÷ߏ7f÷A!„²«·N<‰‰‰‰B!ē²½~5ĻHétŗ„-’dµĢŸ=KlmæpVŸ-Ūg?Ų²~žgöv$į*ų„žĄņ[ū‰q»Ż˜˜˜ĄČČT*Ž;†}čCøöŚk)@Ö=•J…«Æ¾š»ĻŸÅÅĀĀ€Ä%Ą•Ŗ·Ū ‹Å"z|ww7ŹĖĖEÆ»k×.ōõõį _ų<ˆŠŠŠ”ć xķµ×šÕÆ~¢Ė!„B „č*ÖņRV$)ōVLjąĪ6įJÖÜ/Ó@ŗ3žl2@ģ3江°OĄJgüŁ­üģv; qčŠ!čõśŒ^7!k]OOžžyńꀟüä'$.Kü׿€x߀;wX~)_UU¾üå/ćĖ_ž2€x׋/āāŋ˜ššĀōō4&''1>>‹Å›Ķ°ŁløóĪ;qžüyŚ©ƒB!«BŃ%ÖśR\ą™­ołnb•l?{!…B³Łœ“®žRaŠ/ÜŅųógöłēĻ$šw8p8`---øöŚk)@ D‚dĶŚŠŻżõ×qß}÷-9~¹$€PII ¶mŪ†mŪ¶-łZ$ĮOśSÜ{hF£øxń"Nœ8›o¾9­kB!„äBQ%|>_Ö;ēÆF±X ”P:.+ē[i9}ŗ¤&ŌjuŅņŪt — ˆ5üžbĮæ0)Ą=Āó§ųG£Q,..Āįp@©T¢µµ×^{-ŌjuV^?!ėÅīŻ»a4įp8033ƒńńq466rI•J…={ö$³}ūv®—ū¼łły sĒš—š>}šūgĻž=Ė.ā O?ņ‘ą‡?ü!^zé%ńķ ) @!„Õ Ø’6› @ ŠĆȹH$‚`0˜µ$@¾+ŲuņĖQ©T+*{įĀzį >?ø–ų‹ĶüóĻĆ'5šD"°Ūķp¹\P©TčģģDkk+mįGČ ° ü~żė_ˆéUUUÜZ’®®®%’®( ģßæ§NĀČČńŹ+ÆpæĆūöķCII‰čõžņ/’ccc€gŸ}Ē—<Ö¦¦&. `·ŪÓ{”„B!9RTI‡Ć‘õ¦y«•ßļ‡ŃhĢŹ¹ņ…B’ž§ÓéŅ^ *švõ–ū³‰‰d €d:•”PV«^Æ%%%čģģDSSSĀ6f„•éééį’Æ¼ņ ¶lŁĀõR.`_¤&RŹÉ~°Ļ>ž,Čē?žķĄßēóqæÉdĀĮƒ)š'$Ovģس٠«ÕŠįįa<óĢ3Ü×R%ŲWNœ8wŽy Ńhp芔¤×ŗė®»šč£Ī;‡;wāo’öoqäČ“““$$b±&&&pāÄ |õ«_…ĖåTTTą–[nYńė&„BɆ¢J¬‡XŁŖxČ÷ņ ~Ł}*&iŠ,6ÓĻ\XĀĻ–÷óĖü…}ųü2 üŻn7l6b±***ŠÓÓ³Ł,łxBHvČår>|O>ł$†Įٳgf³ĶĶ͢ǘL&“““ąüłóxć7øĒ8²’ŹĮƒń±} ’ń’Ń>Č}]­VsUMN§sIŅU&“įßųFŅž„B!łVTIvĶēz­Łū|Ļų„ł©čtŗ„ž©¶ōūąžü€Ÿō‹5 ^k9lą‡±yófÜxć(++“|õ)<õŌS8{ö,płņex½^ų|>čõzh4TWW£½½×^{-n¾łfJB!dÕ)Ŗ$@¾×¶R¶–Hķԟ-RŹår®I–p?›@Hģ ž±b )b±¬V+œN'Ōj5Z[[ŃÓӍF“Ę+'„¬DWWžxā ÉĻonnNėłpüųń“¶ų*++Ć=÷܃{ī¹'ćsB!„ZQ%֓l$b±XŽ—H©ŠėõØ«« īÅÖö «€„Ķż’­łO5ĪÅÅE8Nh4“µµ”½½jµ:óO!„B!«%V©TėZ„ ƒY‰t‘HDr@©T"‰HŚŹOl=ŖŅ’dß»p8 ›ĶĒ•J…ĪĪN“¶¶B”P¬äeB!„BHŃ(Ŗ$@6ćõ$ßK|>ß²K6d2źė뇗Ģö³–’€xąĻ¾'’½7B”įõz”×ė±{÷nŌ××Ó{‰B!„².U`=ĶŲŹåņŸCŹśül’Ry ×ėŃŠŠ€p8œ°•?! “É–”ūóo³e’ÉyŸĻ«ÕŠP(„ŹŹJ\uÕUŲøqć _!„B!„?J¬R+©…ByŻMAźR¶S6)€°³²­üRĶü{½^Ųl6˜L&9rUUU+~]„B!„²`ünJ IDAT–U`=uk_i ßUgŁ„ … KŹžłŅ üŻn7¬V+¢Ń(6n܈žž˜L¦•¾”ō]z+{ē*Ū Ŗ³w¾BZBžųm½(Æ/ģxX¾ĄyńŹżŖm€R—ß1Ä"ĄÜ¹+÷j`ƎüŽaµ³Aוū¦6@M[uB!„¬TQ%ÖÓ^ķ*•jEĒē; ‡—}Ž^ÆĒ† D+’uōēž ĆĄårĮn·#‰ ®®ĒGiiię_)&üūŽģļ†o’.{ē+¤gī¦^ßīž+ą}’QŲń°śŸžūŪ+÷ļ;Twåw {āū¦l3šé©üŽaµūĶ' 'ÆÜæē@ż5…!„BČQTI³Ł\č!äN—łĢd(ŹėրRÆWYY q]’r†Ćį€Ķf“¶¶āšk®V«]Ł Éź ü¶LhŹ ;’L4qF_S’łB!„‚(Ŗ$@UU·µÜZ§×ė3>Öķvgq$Ėóx<ĖōZ­mmmI×ūóE£QX­VøŻnh4“··ćčŃ£+®Ž «Ü›ßNüoDi-šw3…ɎKžcߕūŒĶ…!„BČ:WTI€ņņrhµZx<žB%§T*UʕĮ`PR—žlaFRR¦¬¬,åģ}4…ĶfƒĖå‚J„Bgg'Z[[‹Æä»?\ū•B‚¬v °ķö+÷õče±ŚÕ_hWīØŃ'!„BH6]@­Vz9§T*3šõfN§3#JĪķv/»+€J„Bkkė’ĒC”ąółPVV†;v ¾¾>+Ū#²ŖiŹ€ŪŸ(ō(V·kž¾Š# „BY“Š* —ĖW“V¾X(•™żX\.W^—J0 ƒ`0øģR€’’®€ĻēĆĀĀB”*++qÕUW”¶¶vÅ»!B!„BY^Q%€•5Ģ+ƒ!ķc¼^/¼^oF“\ X6é —ĖQSSƒ‰‰ D"˜L&9r6lČÓ(×(&@Ąß^N„4F€’)łņÄæ’2y|f?ßŪ×Eü€ßȕ€®g±gFŠoŌņÄĻ­ŌęÅlŗāæ'ģļˆ:Ė;‰Dń÷@4h+²{~B!„(ŗ$;£¼V)•Ź“÷ŗ÷z½y_Ą^w¹*Fƒ††tuu”¬¬,O#[£¦^Īż˜ü`æDC‰_—)€Š& fŠž~ ć©·g?̾æ½ķĻ€«–>–’łkąŅŪńŪ]x0½×2s6¾ŸwŽw{A|ėō»ó³Õą„·€’łxü¶Ö|ųÅųķńßo˜z pN&S²ŲrŲż—ĄÖcĖ'd~u0o‰ßīŗ 8šéŌϟ> <ƒučŹN ,u P¹hŗŲś^ ”GzRhaųÓcĄÅW€…žxš/¤.o„Ųz°óĆńęBŃšƒC‰…}‰÷¼'‚Š_æ™xßņ8šŚ7ž÷چų©ńc&~’łø¦ćÉ2>„ŲŠ lŗ ŲuP»Ģöžßæ ˆżļr§Ū~˜ZŪšĒĘ_¬ƒ@Œ—U—ĘϹż`ēŻ€*ż„.!„BH®] ½½o½õÖ²ėŠ‹•J„’¼żĆ0p»Żi”(e[@µZ÷æ’żčģģĢÓØÖØ;0>•śyL4 ŲF€_ĘFඟ›Š?ń|<Ų€MūÓ’Ų†#é ÄghŁćÅÄĀā_We¾kFZ‚ī+×Wéć÷Æ’ čūYņc<—€Į'ć[ßłķ„¬C¼ļįįŌēżĶßCæJ=搸üNüćµoÄī·ž$žJ&ŒļČšĘwRŸˆæ§^œž'ą†o{>žų&–śē \I|,Ē;wå\šeˆżæžż°§~^$̾’xćŃx²ģż?L~žKo_ ņż‹Ąė’xń3Kp¬˜x)žqꛡOĘ'„B!«HŃu`«««CIIžĖnóH£ŃHZ‰D°øøX°\.b±XŹēTWWS`„ųÅmKZc<ø«īŠĻl–m^ZŽī~z<ž™d.ģ'a„ }PR/5}ųļ?’üVĀg~tx@]Æ>(Ł(^ę>}ųĻwīŁäēņ.ń€\/m×VˆW“„<Ą³÷Æ}]śkɕĮ'ćÆC, P_y2‘’ī†~’žĘ$ōRyż’'>˜P—Ę÷ĒS¶Qą§ļM¬p!„BYŠ®@§ÓAÆ×¤ü=×är9ŖŖRoƒ‹Åąõzįńx–-ÅĻ•p8¼l%†^ÆĒ 7ܐ§­aƒ’ \8yå~ŪĶń-7ģ¾ē2Š’pźs@ŲŒ^ūpģŃüŒWŖ{€»O&>6ų$šęæÅoėLĄŸ=¾ōøT3ė9ĆÄæ§@¼Ģ{ļ}@Ż»ćkńY ńēœłę•Rś±ĄČoāåó™śķƒńs³ź®®śP’nĄPų\Ļ%`āńĄœ]ŖįžNžŸxE€PļOāßs–ĪļČßz`lH|}±0°0X~œł—xœś<Šq+PŃæÆP/ż¹.žžć-żx’ŗd"äŽ/Maž÷ß#™čüóx©’¦}€¦üŹs™X|ĶŲ ńß 696ūpę[Ą»žOźkõ’"ž¹fw|éLĖ{“/žKĄłßÄ«$ńĒܳĄ’oļĪĆćøĻ;ĮGUw£»4I %ŠE&lÉräńŒ—ĖåŠÓÓ3ķĻ\š_Æ×/x~±]0 °aĆlŪ6K2™›ģÕēļˆĖ‹ł,’lKżĄ»že|•ų‡_Œæ÷śß,ī9^ŒĀšøw=ėģK“Ē27õēĖķCü½1żĻśv·ŻŠžžøģˆķ‹MœO‚nē–/Åɜé®hqEĄ[-žqß''’Ü÷ų•?ŠĆ8ž_' k€ß|čŁ2żks/®:Łp#põķĄ·5ŖMģłšĮ’?Žń©n‰›«Ž=™4øTĻżw 92y’’/pÓē¦,ćńĢ„5ŪćĻéĻßĻ?€= Üś;ž”š–’)NNM÷o°“xĒ?“"öīøŻ^ü+ąŽ?¢”„BY1V];ÜxćB,÷i,øé¶DQ„±±1œ9sµZmŁĶfQĶś˜r¹Œ~ō®~®f§ā>拹¹«‡Yg2ń[}ö@Öµš<®™¹‡™ĢͶĢœČŚt pć?š¼ņŁ‹’˜l×}e|5y¦@–Č%•IŠ©ąšOŪS=Ü~næüfNtŚöAąśOLŽļ|ķ„”żŻ[o›9Š©°&žiąŒ¾qįYłŽ8Ép”ƒ…5qBČiœFĻķ¼!„B–ĄŖ¬øžśėQ.—1::ŗÜ§²`¤”Ų°!.ļ5Ę Ńh Ńh\pųŽR²Ö^° 1†ėÆæżżżKxf+Č ß.ĘMŸ>łķßŪ|k\›gš7¶e›¬z»¼7k,Ŗ·’“¹?vó­ĄóɃ‰Kčc÷äń ŸŠ'ŪĻUe°įmĄ™ćū§÷o»{ņē§_Č<˜wĶļÜ®¹8šżųxųąüž»N<3y|Ć'ē÷ÜmˆŪ‚¤µģģK³o xĖķķ³ŁÜ±!aāĢĀU?B!„\¢U™Čårčī’¾ļCkóēĻ# WęUŪz½~Į¤ÄŗuėŽ¼U‹įSß¼øējæofÆŽ °a† ÓÉ&[T3:7× Ž¬į×&×]?’篻a2 Š92;”æ¼)n#™5ŪŪ·X÷ć/„p¢}`ߥüžĻ%Š÷–ÉD‚+ߟÉLs8¦“Æ“ߟnå"!„BČ2Y•IøöŚkqüųńeŽ·cš}ćććĖ}*3rÕ ³}Ž…BwÜq<Ļ[Ā3#ār’اŸž»å>£ĖĖ|Ŗ(.&ąļdM¼ēŽé¹jžÆŃµnņøÕ‘0?9y¼fūü_{Ū€yčĀ[LS÷;·cĢEłŠÉćĘłŁ;Ÿæ¢ó恫’§!„rłXµI€w¾óųÅ/~±¢ē¹B «k‰öŸ_¤ŃŃŃY«\ĄŽ;–š¬V ÷ü^<½”¼ģ’^<õ}ä5 Āzü_h7:¹tÓ­ą[LQ£½zć™’ Ų÷­ł½Ę™}“ĒAĒ'£śäń²l\XA­ż¾?u¦ŹeŸÖg~ä–ųļ!„BČ"YµI€r¹ŒŽŽŽUŸ`Œ!—Ė-÷iĢŖŁl"‚Y³~żz|ņ“óģÉ%fT¼›ü’mrHÜ\pZV3·]Ą9ņ·—özƒ!³ÆWø“×^.¦#)é]D"Uų“ĒQćŅ·B!d•XµIxŪŪŽ†'N,ūÄüKĮ9G¹¼rÆ0YkQ«ÕfmčééĮ]wŻEm‹įįŪ¾Ź ˆĖĶKżq“ÆÄ«Ēņ½ńäų\P¹øö#Ą_üņņœ3¹tvöœóÖ0gĖÓ¢}a9t¾§¹lNč¤2ÉĶ‹y>!„BČ*“J’ß_ģļ|'žyę /÷©\“|>ĪWę’ł“ÖbdddÖ6€B”€Ūoæ=Żl@Šš«q€³ń—ā}ģ[łĀCŲØE`u“Wēć!ąŠw^üėuž}ń2eš«u}¤ģØ ŗP9’t²mŁŖB!„ĖŲŖNxž‡+®øbÕ&¤”+ŗ `bbbÖM¾ļ榛nĀ-·Ģ²V‹\¼—ļŸ¼ŚYŽ|īѹÆ([lzöör‰:KŪŸ:qžŖ~:V£G'ļw_ˆ%nkźüŒ.f¶ąbŚ !„BV”U€Ūoæ‡ĘÄÄź[ĮT(Vl@Ø×ė3¶pĪqõÕWÓ:ĄÅtņē“Ē7|j~ €Ø9æß5ßņóĘźL¼­\ĘAæ«čXčsÅLåNv Į\ž$³÷ž·¾% Ś9Š0ŗˆdFös-Q5!„BŽVf:}}}«²]J‰Ré"VZ-­5FGGgœµĄĆUW]…»ļ¾Œ±%>»7‘f&Šžļ÷ńć~L¶ä¼szül‚q zx~ē3_—ĮźĻKÖ÷–Éć±cóžC’ųkāŪw>Ņž³õ“Ē#ÆĶæ²£s=_yćܟ»P¶Å 퉀‘×ē’ē^™<.Ķć=B!„¬b«> wÜqNJ_±—ÅC¹\^‘“µēϟ‡ÖÓ_fŒįŹ+ÆÄē>÷9H¹ź IV¶l>ß ķµæ¾šc²{äϼ8÷×ü’~pŠ>˜­s:ž›Q’Ū'_ūńüŸ?“'®$hUćv’¬ 7NG ąŠ#ó{ķ£?›<.¬½U”óæs łg›­>8ōšüž{ź¹öDŪ&jk"„BțĆe‘øņŹ+Ń×׷ܧ1g¾ļ£PXyk¹¬µž1Ą9Ē–-[šÅ/~¾OC“]6p›ĻŠø‘ׁgžøż{Ó]}Ķ=ēöūw^ųµkCĄī’0÷s™¶Ź„1nøćӓLJ|īĻ=ūpüéÉū[ßמó¾öśŃ/amnÆŒĻžß“÷·’Źģļģµ}cnæg.®’ųäńĒžœŪóŒžö÷'ļ{ÅK¼H!„²Š\IųČG>²bĖ볤”ØTpĄ×qQ4żnyĻópķµ×ā _ų­\*ŪŽ?y|ü)ąįߞ½7\5} üł{¦–÷OWIpżĒŪ×Ć}’OžAūÕQĒ(`š~ąļ&NĶļ}ĢUåźÉck€¾0·¶†ĖՖ÷ėß:y’»æƌœ­ģ]‡q²ąÆ>ą|,ž3_{=ėŽģÖhü¹×†¦¾ö Ÿ®™C%ĄÖ÷GļŸŪ|ż–ųĻŗŌŸ[0üĆÜü…ł}FŻ›÷żļĄ#æßkĄ#’[|ėŁ’½É÷ʷƉxžAē{(mŽż»óū½„B!«Ųe“€üćųś×æŽńńy 9[B¹\nÅĶ.PJ”Z­ĪXP©TšĮ~7ŻtÓŸ_>ó]ą;ēćļEõ —<‹šÉæžę_O&ŖGāšNwü`üd{©¹5Ą¹A`ŗ‹©…µĄ]»ā@t”“^š”?~šłųœ‰ÓńĶy3­'ģ;š¹æv~؝œü~żl|› —Ą’øésÓ’œ ą×¾|’sķ3tW\Čuīüö…ĉˆ?ū‡ķ*­ŃɄ»1žĮ捃üĒīi’{3v4¾ĶfŻ ńßēāś‹ūŻ„B!‹h¦Mm—ŠPfģ_M*• Vܕv Nōō¬ļ‰ 0<<·ĖY¶ģ~¦Ļ6ß üÆ€~-ž3ņ/ŠöŌ½øåŸ’|?š÷’õģ-¬~żGĄŻĘWõ kf¼WŒƒ’_’aü¼Ī~’™¬š„½ĄŪ?æšwŽūūńæ“wžŠ{õģĻ÷×~ųŲ×ćsZ÷–ŁO!„²„²qłLŪŚ.ūņ—æ\ŠU©TšŪæżŪ‹ņK–’Ö_żźWqęĢ™ ?x‰ōõõį7~ć7°sēNDQ!IJžµµZ FcŚæX½½½øå–[pŪm·Qł’JSŠ{ņƒńųź§×÷|ē{ī+Ū{Æ/†jĘWųėēā Õ+k¶ĒåR30üZ|Å;jÄIÆ'7¦+o_MŒžs’äü…ž!pė’ūkM¼¢±UZcqe„ČÅĮue[ūև‹1q*ž{Ö¬N¾¶šž«āæc³%,ętž=’“$-&2_•/.Šŗ×ÖhüćńßiįĒ’N kā÷q©’N!„BÉĆ?ŒĒ°k×.säČĶ9WRŹHH)›žēMų¾_óö1tw/Ņ•^riŹ›¦®{[H²lX!•܋'Ųg§ŲÆvóq_ś‹Õ>€±4ą—ń81³XJ/\ur)‹“•m‹÷;ņ½ĄĘw,ŽėB!„,„Tz¼X1ŗ0 Ņl6å,‡ķŪ·cĖ–-xå•W–õ…ƒāŃG]’ö€f³‰‰‰‰¶é’¾ļ£§§›7oĘ>š7ƀ7¼’’ŹW,÷‰B!„ [ĶŽl6/4Š2Ę,w›Éva£Ńøl‚Į®®.Üyēøļ¾ū–|[@__ī¾ūīYÆŖ_wŻuøęškšųććĄˆ¢hĮ[¬µČēóČår(‹X»v-ŽńŽw`Ė–-+rˆ"!—-.ćŽōņ&`Ó/71“H!„BŚ“­Vkŗ‡ŲŽÆ)ʘu7ĪłŒIi­=åīŒ]6IŲ²e >ń‰OąX’D€ēyŲ¼y3ī¾ūn … >^Ūoæļ}ļ{ńóŸ’ū÷ļG³Ł„1梮×ß÷}ÜxćøęškP,ŃÓÓ³āÖņ¦ó‘’ß!„B™ĘŲX¼ā;Š"“Z­Ī‹¶3&ęCH)ŽŽāŖ«®ŗ”×[qnøį ģŚµkQ[zzzšŽw¼ļ’ūēŻē/„Ä­·ŽŠ[o½###Ų·oŽ=Šf³ „T:‚sžĪ0ĘĄĘ„R¢P(`Ū¶møé¦›.«d!„B!„\ī“ÖéÅk— Ą…’lK@!„BXĻóŚ~&1oøģĀČČČœśŹ³eĖ|éK_Ā®]»šĘo,čր|>žž~ÜyēX»vķ%掚5kš¾÷½/½?>>Ž‘‘œ?µZ-- ÉårčźźB?*• ż„B!„²ŠU«Õt†[& tųÉEēé›m ˜é÷HĻó^u«Μ9ség¾B |ö³ŸÅ믿އ~Õjõ’’…Bk×®Åūß’~\wŻu x¦ķŗ»»ŃŻŻ­[·.Śļ „B!„²¼²ńųššä:iWiĪ9ē< š³Cg ś ŸĻ[’J!ÄKZk€Ÿ>}zßĘŹ³}ūvlß¾CCCŲ½{7Μ9ƒF£¹¬HĢēó(•JX³f n»ķ¶)“’ !„B!„‹‘Mœ;w®óźē•’lšŸgv,—Ė6Č;vŌ÷īŻ{ĄÕĆĆĆ—ÕšĄŁlŚ“ Ÿżģga­Å™3gpąĄ=z4ķĮWJ„½ö¾ļcżśõøńʱqćĘy÷üB!„B!³9u*Łįįį™ÖžY.ĄŸü°Zk†!¬µ(•J¶ŁlŚR©Ų“i“u#čŸpµÖGÅöķŪó½­(Œ1ō÷÷£ææ¹O…B!„Bțµo¼ń€x3Ą¹sēÜPųl2Ąfo‰“°RŹ“ Ńh —˵ż.¾sēNXksß8|ųš¢æAB!„B!„ÄN:•ά;yņ$ÜܾŒ)å’É}“$\€É¶H)­ēy¶V«„U„¹oP€B!„BY:Ł8üčŃ£mmn K$_»¹DcĢøŸK)[Ųł»8œ={ö0€£@œu‚`ŃŽ!„B!„B&u$Üį“­Ł ? üÓcι1Ę„” ĆŠJ)­ļū¶P(Ųµk×ZଵO€1&ķE „B!„BČāÉĘąaāĢ™3H®ü·ĶpåžH‚žä« cŚZkŒ1Faci€ļūi5ĄŽ;,⠁v»ģßæÉŽ0!„B!„ņfu芔“’Ų±c0ĘĢ“ Š•ū»+’“mšs®…šsn¤”†sn[­–­×ė¶X,Ś””!»sēĪø¢(ś1€&¼ōŅKˆ¢h‰Ž2!„B!„ņę“wļŽōųĄ6YIß¶žĻMūgŒé¤ @'NJs®’J€“Ąc“Ö&ŸĻ8qāDś;Ņ$@©TµÖ>AąĄKóŽ !„B!„7”0 ÓJü(ŠšŚkÆ@ēzĄt`Ņ÷Ÿ&’Æi@r3n0 ēy6—ĖŁb±Ų¾`ĒŽn.ĄwܲŁB!„B!„,¬ĮĮA„a8xš ;Nƒ’äźZžļfø«’œs@PI%€vU¾ļ›f³iół¼-—ĖvÓ¦Mv``Ąņ{ī¹ĒīܹCCCöųńć8ļN`bbbY>B!„B!är÷Ā /¤Ē/½ō’Ņ*€¶€nņæ ü“*åŚ8ēi5€ēyŚó<£µ6žēŁZ­Ö¾r0{Ē󼊳 ˆ'>’üó‹’® !„B!„7™‘‘9r011£GŗĄČ’Č ’Ė“(ĘX JŖ"ÄŚZ«µÖFJiK„’qė]gŒa``ĄnړɖĖeŪjµ¾éNź©§ž‚Rj ?B!„B!äņ÷ÄOĄxłå—Óļ»a€Č¬tWś3Uē¼-ĄSÖZ @{žg”R¦s3ŠQ Fć@­VĆsĻ=·ŲļB!„ByÓK[”RŲ³gk˜n@[@üGœóH2Ę"!„’R*ß÷•”ŅŠ…BĮär9[­VÓĻŗ¼•ĖIDATv€{ī¹Ē¦I€ĮĮA{śōi[,m†ą¾’ųćCk½TŸ!„B!„rY{ņÉ'ÓŖū½{÷bbb"mp•Ł€«ąœGŒ±ō Bøćt8 ÖŚ(„L­Vk $•÷Üs€J„b«ÕŖyÖZū4g(öķŪ·  !„B!„ryi4Ų³g€xß/~ń Ė0%`\+€kp7ĪyČĖŽ"W)@ēr9ćū¾­T*fķŚµi%c q©AŪ\€Z­fĆ0üĻī=öĶ „B!„B.Ńć?ž®|ńÅ166LLēd*Ü€HqĪCwsķ®=€ĪēóZ)e¢(2ÕjÕbpp0Mp Ī8k×®µ•JÅŌjµG<ĆĆĆxņÉ'—īS!„B!„B.3gĻžÅÓO? ®xöŁgÓµ€Hfø*€L+@:€1pĪĪyĄ ²•H†ŠtOO)‹¶R©X`² m0ąąą ²ÕjÕÖėuĮæC¼Š=öŖÕźŅ|2„B!„BČeęG?śQ:sļē?’9ŖÕj: 0Ó`“V—P®üßU0Ę\@Z ą¶h­M±Xœ2Ą%Ņ$€Ė @2Š;vģ9cĢżE~üć/ķ'D!„B!„\öīŻ‹Ć‡&&&šōÓO§UÉ͵¤ƒ]łōœó@ŃB“’Š€PŗuÅbQŠQ™uė֙ӧOŪl+0Y `cé\€­[·šJ„b*•Š®Õj÷€W^yX²‰B!„BYķ‚ ĄC=”Ž’éOjƒ č¬Hgø$€»ŹŸśm­™ū”« »»»uOO©V«SZ€Žv ½%@)eFFFF‚ ųīē?üįŃh4õ"„B!„B.>ų ĘĒĒGŽĮ+ƼŁ €¶mŁ@rõßü-ĘX‹sīni yŽÖZO»ŠiKÜsĻ=ÖUō÷÷›(Š cLŸų`z’ŃGÅČČȔ9ƒ“*€0[ „hrĪ›RŹē¼e­ Œ1”Ö:M0Ęt†Ónp¦“qK@„R±aš¾¾> @Ÿ;wīX³Łü=÷˜‡zĒŽ[”ŠB!„BYĶ¢(Ā}÷݇ Ä3ö^xᐷU!Ü0@ķŖ„AęŹKŃbŒ54…-WT (!„Š¢ČT*SÆ×MēVw^S’Ł–€r¹l•R¦R©hĻóŌɓ'EŃ_ńNĆūļæõz}Ń?m[­–įœkʘö}?;tīܹß0Ææž:ī»ļ>cēS$„B!„BVøżū÷ćĒ?žqz’‰'žĄ‹/¾8m S ’U€ic, ü„”õĢq“1ÖbŒ® Å9×Q™žž~³iÓ¦i:ÓVdŸP©TŚŖ‚ PžēEgĻž}ittōw­µ*ūfiu !„B!„7›×_÷ßzqü¹ēžĆSO=5c€B3ĘTr5?t3’ m )e=I4“Bˆ(%„Tœs] ˜8ŌIW pšąĮ¶j:åū~ųĘoülttō÷ .{ųŽ÷¾G­„B!„BŽ4öļߏo}ė[PJ<ˆGy$›@v€[˜M$ež.PBŌ9ēõäøĮkxž×Źår-)eh­ Ż@@)„īļļ7h«˜r•^Ģņ>ŲīŻ»ń“Ÿü„ @Į¬µƐI)™”’k­łųųųń®®®V.—{vśōiœ:u ;v쀳½ų¾µZ-•Ļē]Æ×Ķ\«€ WÕ'Ož„RŠåóy¦”bZk¦µfœs¦µęµZ­†įĖŻŻŻ·pĪ‹Zk b||Ū·o§9„B!„BV„½{÷ā[ßśĘĘĘZk<ōŠCxöŁg³Ć’ڶpε”2č™ RŹt€”r\J9īyŽ8ēÜ%ł|¾e­ „I;^·nö<Ļε øp%ŠQ 000`śūū”Rū¾Ær¹\”ĻēCĘXĻē›BˆĘššš—_~łwFšٳgžōO’gĻž½ŲĻ›B!„BYrab×®]Ų¹s'Ā0ŒŽŽāŪßž6öķŪ—&’+’m €l@rõ?›Øg‡ !jœóZņ½ŗ¢Į9o1Ękm˜Ėå"Ļó-„ŠA˜jµjęZĢ­ČT Āó<„aČĄó<Öl6™µ–qĪ™1†1ĘX†Ń©S§ž“RÖJ„Ņ[c¢^ÆcĻž=Ø×ėŲ²e ¤”õ@!„B!„,…ą›ßü&Ž9’~ļąĮƒŲ¹s§Eg@Ņ`„J”³-n  ˜\ło›×<Ļ›ąœ×}ßoXk[Bˆ@X,U†:Š"sĶ5×Ųõė×[sŖ6÷άµųŹW¾Ā{ģ1Ž××Ē'„ēyžµÖ‚ EQ@W%cL9Š¢ī5kÖ \{ķµ_’R®u/ÖŻŻ;īø7ß|óI€ōń.P©Tx.—ćAˆz½.1¾µÖ¢(†a!Š¢.k­Ktk­»{{{ÆŁ¾}ū„Rikś¢ŒįśėÆĒm·Ż†Ķ›7Ļó”!„B!„KÓh4šōÓOć©§žB«ÕJæ_Æ×±{÷nūņĖ/·’lrõß2ĘtŅ cŁ@ „l !šn€ ņ;ćÉ@ĄšēyŒ±z.—k$ķc,Œ¢( čsēĪ™Ūn»ĶĢ7Ģ}&@V:ąŲ±cmóĀ0„µ–1Ę`­E²¹Į‚Šl6ĒŁSėīīŽĀ9÷€xĶĀž={pčŠ!‹E¬[·ī"NB!„B™»‰‰ ģŽ½÷ß?:„ĄZ‹}ūöa×®]öŌ©SHž4 0Żō’¤üæ³’æéy^½s @&šONxžWgŒ5<Ļk !ĪyhŒ‰Üz``ĄŌėõģ6€y™o%@śœ{ļ½—€›P,y½^—ÅbQÖėuOkSJå•R]Q•”R%„TYk]6ĘtsĪū¶oßžīžžž·K)óŁ_²iÓ&Ü|óĶøńĘQ*•.ā4 !„B!„©”RxõÕW±wļ^¼śź«me’ÖZģßæĻ<óŒ+ż·˜ģż·Œ1“Ič¤@e·pĪŻ €“ ™ų?į’%Įæ;®yž7įy^@š–ĖåHJ©/e@ÖÅ$Ņēeē ¦ƒ‹Å¢óc~6 ”*FQTŅZ»D@Y)Õ `ͶmŪ~ióęĶ7ś¾_hūEŒaŪ¶møłę›100ß÷/ņ” !„B!„¼™|ŲāŠ”CÖ3SąŸMøŅüĻšąœ»€Ū0Į9ƹŁBˆŗ”² ‘“ “8ēA©T ›Ķ¦ŹēóŹmp øŲ6ē’“@Ü3į•J…?~œ—J%^.—e«Õ’ĶfÓcŒłĘ˜\E­uAkŻÅėRJ•Ā0,cJI" ”“ µÖEĘXqćʍWn޼łŹuėÖU|ߗ³===ØT*(•JčźźBWW¤”Čår” „B!„UŖŁlĀZ‹F£f³‰F£jµŠjµŠ f}®ÖCCCxõÕẂl³ŁœńŖæ;vk’\ŁņU !c,Ū’Ÿ¶$Į# ņ'8ē®ĄĶp €$aŠ”R¶„ €z½n €I—žH_c®‰€ģœ„T—ÖŗKk]4Ę£(*%+KĘW)Š„µī2Ęti­ó„R©wćʍkׯ_ß»~żś’ļū³į€B!„BČeĢZ‹³gĻŚcĒŽŁ'NŲ'NŲ ŅĄI  »öĻ$[Lꦯź?ι ž]’(„h%·Ī€XēœOxž7!„Ø'?oxž×B“c"PJE®Ą%Ī;gśśśģ„ ģ“I€ōu:¹\ŽŸ>}š#XÆ×=>æŃhä1yĪy!č1E× µ.*„ŠÖŚ.„T—1¦ ”Ź[kóZė¼µ6·f͚ī5kÖ{zzŗzzzr„RIvuu !ÄB½7B!„B!+X½^·ćććØV«öܹsöüłóvhhȄaˆģ½i6 śŻÕ’4ųwW’“ %„ˆ’D€ ž—ąœ·\Ą LÖż¹+žuĪyšHßbŒł|>ś¾Æ’U€Ęµ,tf-­Ÿ €1Ę`­µ_łŹW088h*•Šūźõ:¢(B”P°AĻó¬Ių¾Æ1Jk­Ā0TžēEŒ±@Č Œ1c,ŠZ·ccL1XksÕjµ5<<ģcÆV«<› @<Ł_d™2©µö¢(’ˆŪÜ÷$ā™Ł7ĘĪ97ʤķÖZĘ9Ļ® tēI‰B!„BY:Ŗ`ćUo.ųO“IĄ’ŚUPŒ1w%?]˜9Næ&U.y čr¹l¢(2­VĖøŅ’•ü;+!؝µE › h6›Ģ#<ĻćĘQ«Õc,(˜ö€‚ ś„” ]š M0Ęx²»2UŁąŸ„B!„²rd‚’ō~6!`­Ķ&¬1Ę$ĮæūŖ…€¶Öjß÷•µÖµ hʘJŖP(hʘN¾Æ£(2®ģæZ­Śžž~sśōi›]ū«’€eJ+# ą\0ŠßßĻÜĢĻóx­Vćžēqk­Rņz½.!GœH“Q Ī9¢H!øÖšsĪÓÆI%s7!%!„B!d•Č&\"@kķZl&`ā0>¶Öj)„±ÖjmĒÖZķ„” ‹Å¢‰¢Č„ah*•Š™®ģˆūžWRšļ¬Ä ¶m 0}2 V«1×*P.—™”’OLLp)%ÆÕjBJɅ< C@DQą\)Õü3­5—R2c ³Ö2c ó}Éŗ@ ž !„B!d•pÉ„”åœ[ʘåœ[ιUJŁ$ `1FJi“ÖĘó<£µ6ł|^k­ÖŚär9@+„Œ ü{zzL­V³­VĖ‹E»uėV344dWCšļ¬äąvŚŹp M›6±įįavśōi^©T˜KŌj5^,Y½^ēRJŽjµx>ŸgA𤠀¹ÆĘ˜¶c0ʰ\.—&“Ö+łs"„B!„@‘ŪQYp !„ ĆŠ !¬ēyĘū¾o“ÖFJi•R¦P(„”ń}ßf’uė֙jµjĖå²=}ś“­T*¶³ē%’Ījn§ &« ›pĶf“•ĖeÖjµŅ¤@†LJÉ£(bJ)–Ļē™RŠ)„˜ ō}ßgŁ Ÿ„B!„²zdīŲüRJ+„“­VĖJ)­ēy¶ŁlZĻól©T2õzŻęr9[«Õl„R1ÅbŃĪųńU`Jšæā’¬ÕąĪ˜ āź Nd[źõ:«T* ²‰ X†¬X,2Ɛ@E …Ā”ĻĘżŒB!„BČŹįyŽ”Ą»ŁlŚĪŸū¾o}ß·õzŻ€ ųół¼- 6ōÆ]»Öbށ?°ĀƒgµµÓ&€8)šéOū÷ļgCCC ŖÕ*€«€J„ĀźõzšpĻoµZ¬ÆÆ/=^¢÷C!„B!däół4 ?wī\zæP(X(‹öĉ(‹¶\.[X»v­²°iÓ& Óž°Z®śOērrŪ¦$€öJ÷³lr ū‚.Q@!„B!dõr¾ć®ī@„Ri ų©A?pyžY—c°;kR˜L €«˜ī…² B!„B!«G6øĻڱc‡Ż¹sgz?šÓżĄ*ü³ž ©µ©ŁĮ8IEND®B`‚libwebsockets-4.3.5/doc-assets/http-proxy-overview.svg000066400000000000000000000447521476025525100231760ustar00rootroot00000000000000 LWSvhost listensocket unixsocket localserverprocess tcpsocket remoteserverprocess tcpsocket h1/h2 h1 proxy h1 proxy chosenby URL chosenby URL lws http proxying overview Same physical server libwebsockets-4.3.5/doc-assets/jit-trust-logo.png000066400000000000000000002561551476025525100220660ustar00rootroot00000000000000‰PNG  IHDR”ĪÜņ pHYsAųAų\å_tEXtSoftwarewww.inkscape.org›ī< IDATxœģŻy|\åu?žĻ¹wF#k±dyŃb[£Ķ˜0±ƒń44… „( Ł3#”@‚“¦”IŚ2””ż&ķ+æ³!͌ †€ĆR˜”°™Ķ„Ķļ²[²dYÖ¾ŒfīóūĖe±­‘tļÕHś¼_/½RĢsŅ ¹÷ÜēœG@DDDDDDD’ßļwŌ××S)U`)€éöų£®ė殬¬Ü>t­Œ×"‰ˆˆˆˆˆˆhōJKK݆aüĄŁ'ø$ą_ƒĮą€nŪŹˆˆˆˆˆˆˆČ>ŸļL„ԟ,<Ée€/,]ŗtąwŽy…;ˆˆˆˆˆˆˆ&Ēs”ˆ< -ʏ ųž±Ä‘^ī """"""ŠC%%%Éŗ®?,"—5–ˆ<ĻDDDDDDDq¦¼¼|ÖąąąļœkRČø€ˆˆˆˆˆˆ(Žx<ž<yĄB3ā‰Č_rssĻc€ˆˆˆˆˆˆ(Nų|¾3 ĆŲ,"Ł&…¬°: 6h&$""""""¢1šx<*„^4ńį’]×WƒĮ`€ˆˆˆˆˆˆhœł|¾«Dd3€4“B¾ąt:WVVVīś¶#Æ×{€_ü—ōwww_·iÓ¦¾’!wńł|~ėaŅó¹Rź.·ŪżÕO?ü$""""""²Yqq±žššzRźz“B*¹- śOt[ˆˆˆˆˆˆˆlT^^ž‡‘ĖL UJŻ …ī;ŁE,٤““4C)õ¤Rj…I!{5MūZUUÕÓĆ]Č‘ <Ožˆ< `”I!Ū ĆųRuuõ–X.ÖMJJDDDDDDD'PZZz:€ē˜²V)õ7ÕÕÕļÄśž@DDDDDDd!Ēs”aƘgRČt]_ …vŒäC,YÄēó]%"›¤™ņ§Ó¹²²²r’H?Č‘¼^ļMJ©ßH4)äćJ©K+**:FóaˆˆˆˆˆˆˆĢ%>ŸĻ`=Ģ{ī¾Óķv5 õzQ&-„ˆˆˆˆˆˆhŹ+..ÖSSSļQJ]oRH%"·’X±@DDDDDDd‚’’’d]בĖL UJŻ …ī3# DDDDDDDcTZZšaĘSĪ7)dƦi_«ŖŖzڤx,…ĒćÉ‘g,4)d›a_Ŗ®®ŽbR<€nf0""""""¢©¤““ōtĻ(0)d­ˆ\ …Ž1)Ž1<€ˆˆˆˆˆˆh<Ļ…†a¼`žI!?Šu}U ŲiR¼O`€ˆˆˆˆˆˆh„|>ßU"²@šI!_p:++++÷›ļ3X """"""Æ×{“RźwM łøRźŅŠŠŠ“ā DDDDDDD±ŸĻē°ę=Oßév»æ …śMŠwB<€ˆˆˆˆˆˆhÅÅÅzjjź=J©ėM ©Dä¶@ ą7)ްX """""":‰’’’d]בĖL UJŻ …ī3)^LX """""":ŅŅŅ Ć0žp¾I!{5MūZUUÕÓ&ŋ DDDDDDDĒįńxņDäY M ŁfʗŖ««·˜oDōńHJDDDDDDĻJKKOš<€“B֊ČE”Pč“āO """"""śĒs”aƘgRČt]_všoTX """""":Źēó]%"›¤™ņ§Ó¹²²²ræIńF"""""""^Æ÷&„Ōļ$šņq„Ō„&ňˆˆˆˆˆhŖŸĻē°ę='ßév»æ …śMŠ7f<€ˆˆˆˆˆˆ¦¬āāb=%%å7ŹL ©Dä¶@ ą7)žiX """""¢)©¤¤$Y×õ‡Eä2“BF•R7†B”ūLŠg*ˆˆˆˆˆˆhŹ)--Ķ0 ć)盲GÓ“ÆWUU=mR<Ó±@DDDDDDSŠĒćÉ‘g,4)d€+‚Įą«&ų„>Ž """"""²Kiiééž ߤµ"rQ0|פx–į)DDDDDD4%ų|¾‹ ĆxĄ\“B~ ėśŖ@ °Ó¤x–b€ˆˆˆˆˆˆ&=ŸĻw•Rźi&…|Įét®¬¬¬ÜoR<˱@DDDDDD“šĒćY§”ś€D“B>®”ŗ“¢¢¢Ć¤x¶`€ˆˆˆˆˆˆ&+ńł|~¹ę=’Žév»æ …śMŠgž@DDDDDD“ŽßļwŌÕÕŻ Ģ¤JDn ~“āŁŽ""""""šTJJJ’Ē#žŽ¤Q„Ō”Pč>“ā ˆˆˆˆˆˆhŅ(--Ķ0 ć)盲GÓ“ÆWUU=mR¼qĆM 'ODž°Š¤m®ƒÆšo\±@DD“”””ĢNHH˜‰DŅ4Ms‰H’a)œš¦Ķ8Įē†aōhšÖFĆŚĒ€RŖ×įptVTT ģūĒ ""¢‘(--=Ż0ŒgĢ5)d­ˆ\všoܱ@DDFyy¹s`` WD D¤@€ł²Ģ>ś3 €nAz MD+„Ś”R‡E䰈4)„E¤Į0Œ&Ć0 šż~Ă5Ńqų|¾‹”RH3)äŗ®_ZYY¹ß¤xq""ŠKkÖ¬™«ėśY¢”ś<€ĻČąē„ÅĀpĄ^5’QJՄB”ƒć¹8""¢ÉÄćń|ED6H4)ä N§óʊŠŠ“āÅ ˆˆhÜė)))g*„.‘‹,0g¼×e”.;l‘ķ†aģ0 ćƂ‚‚ī ""ŠĒćY'"’ @3)äćJ©kC”PæIńā DD4.<O€/‹ČßX }|WĀJ©"ņ¾ˆ¼oĘ»‡ćżŹŹŹęń^QœŸĻw«RźVcŽév»æē÷ū cĘˆˆČ6ēT_Ń4ķ+J©³Ę{=ČA„Ōū"ņ.€­š¦m­ŖŖŖļEæß飼«»@™I!•ˆÜü&ŋ[,‘„®»īŗé „Jœ6Žė™DŲ*"[•Roéŗ¾•;ˆˆh²+))Iv8ų{“BFÜ +MŠ×X ""K”••å†ń-åJ©½G&RJ5išö €?F£Ń-ÕÕÕ‚GŃ$QZZšaĘSĪ7)d¦i_ÆŖŖzڤxq""2ÕŚµkĻŅuż{J©k01&öOf-ŽTJ½¢iŚ–®®®77mŚļEMtGOŖ¹ĄYŽx< > ]-ćńxņDäY M ŁąŠ`0ųŖIń&ˆˆhĢŹĖĖ‘HäkJ©ļ8Ū®¼š¦!)) ‰‰‰p¹\p¹\HHH8öėŗ‡ĆMӎż§¦xHp$aˆD"ˆD"PJappƒƒƒ‡ĆŸłĻō÷÷#ŚõŸļ"„ŌćŅL łA4½dƆ LŠ7”°@DD#vtš’÷Dd €$3ckš†ōōt̚5 iiiHOOGbb¢™)lgzzzŠŪŪ‹īīnōōō «« ]]]ļå}܀-"ņ\4}.??’É|Q¬|>_*€ J©+‡»V)õO”Pč6,kŅóx<_‘Ģŗų³Óé¼Ŗ¢¢¢Ć¤x DD+ńx<‹ČĶ.Iß!"rģÖ¬Y˜1ct]7#ō„‡ŃŁŁ‰žžtvvū‰Dābi+€?xNÓ“ēxō ME^Æw‘ˆ<®”:%ʏ"ņµ@ 𨄠Ęu×]7]×õ,™­iŚ,qčˆF£GG‡®ė‡āłAŲćń¬‘’ʉw[ŒŌćJ©kC”PÜn˳ DDtR'QÓ“ėŽö÷ŸnFLĮĢ™3‘••…ģģģ ’†ßlJ)ōõõ”££]]]čģģD{{;śśśĘ{i»Eä9Ć0žKHHųs<ß8™Įėõ^ąŒ|ūyŸRźoB”Šė,ė3JJJęčŗ~®¦iē)„–ć£y<©Ć|L‰ČnĆ0¶ŠČ›J©×B”Š[’A†āółnUJŻjZ@‘õ¹¹¹ßē®6ˆˆč<O–ˆÜąs̈™˜˜ˆüü|̟?.—ĖŒSŹĄĄŽ9‚ŽŽ“··£½½įšø õŲŠv<=žü·xcED“H,żžĆi5 ć¼źźź½f.lȚ5kf:ŽĖ”R%¾sžķźEä!Ć0~ …jMˆ7"~æßQWWw€2“B*¹-ųMŠ7į±@DDŸąółĪ4 ćū"r SžŅÓÓÓQPP€œœˆš«ĒL½½½8r䌌Śpųšatuu×Rš<­”z:))éļ¾ūīīńZŃX”——§…Ćį"r™ į>‡Ć+6nÜŲiB,ųż~­®®ī+Źü «zę¢J©g5Mó·,Źń %%%ɇćoRČ€ƒĮ`„Iń&Ž…ü~æV__’7J©ļø &}?dff¢  ³fĶ2#Å ‰ ½½żXA ­­ †aū‹łˆˆ¼aĘSš¦=1Y"¢‰i͚5§čŗž€Ļ™ön·ūņ±X\\œššś „ŌœjāŚ†£Däw"ņV΁)--Ķ0 ć)盲G)õµP(ōŒIń& ˆˆ¦°oūŪ)żżż×ķļ7åfĒįp`žüł(((@R’©Š((„ŠŃс¶¶69r‡“jü^Džr8/VTTÄÕŃDDĄ˜śżcQ Æ釬ĖĖ‘Hä;J©[dY°®Xõ(„ž½§§ē›6mŠšŲćńä‰Č³š² ĄĮ`šU“āM*,MAeeeó¢Ńč:¹^)5̘IIIČĻĻGnn.‡!É"Ēv“¶¶Ś=G UD6ų½Ćįų Ńx;ŗ­žg~Š<eee!33ļ½÷^¬łA0ü’b½xķŚµ_Š4ķæaŅ^“¼Ø”śF(:hF0ĒsĘŃfÄP+"—pēŁ‰±@D4…x½Ž„J©ˆČ×8͈™‘‘ĀĀBdeē‹ ‹ööv“¶¶¢µµ‡¶³e`PD^2 ć±£­v%&"ŸĻ— `ƒRźŹ‘|nńāÅ(//‡ÓéÄ/łKģŻӜ?C)uu(zād­]»¶PÓ“_ųŅHÖd£†£ŪėĒtĻē»H)õ8ĢŪqńA4½dƆ LŠ7)±@D4ł‰Ļēū‚™żż"‚ģģl`Ę S6PœˆF£ĒZZ[[ŃŽŽngśEd€‡ųö†ˆ¬6š~Į„—^Š«Æ¾śŲPŪīīnüüē?GKKK,!ś4M»°ŖŖźĶć…÷z½7ųOɱ®iœ„•RŽP(ōąh>ģńx¾""˜ušŸNēUÜU6<ˆˆ&©uėÖ¹zzz¾~“op‘1‡śū 1mŚ43BRœ ‡ĆĒv“““ ÆÆĻ®ŌŠČ¦h4śTuuõ_ģJJDSĆhśż].ŹŹŹpÖYg}ęļ555įöŪoGooļ°q”RM"rn0lś³²²²Ģh4z€+b]OˆŠČŚ@ °q$ņx<ėDäæ1ść?ķ1„Ōu”PØß¤x“ DD“LYYYf$łŽˆÜĄ”ńū)))(((Ą¼yó ėV8DAww7:„––>|ŃØ©³ Nd'€ĒDä1»Ž£"¢IK<ĻDäß1‚ŠĢĢLÜtÓM˜;÷Ä­ź;vģĄÆ~õ+D"1 ū’«Óé\QQQŃqōmų½0é;Ūf„Ōµ”PhS ׊Ļē»U)u«YÉEd}nnī÷ż~æķĒŻLT,MgˆÜąz¦¼žźļĻĢĢ<¶Õ‘hČP»ĄĮƒqšąA»v4Ų¬”ś}^^Žę±«EDSĖXūżc9Łęå—_F0Œ)®RźYyĄ?bb?— (ƒ’s¢ ü~棶¶ö7"RjRN%"·æIń¦Œ‰ü?4""śčMĘÅ"ņ¾~Ækš†łóē#??©©©c_!M J)tvv¢¹¹ĶĶĶččč€RŹź“Ķš°Ūķ~™o€ˆčDĢź÷Å#<‚gŸ}v4˜Ⱥœ ?üōß())Iv8ų{“rEÜ +MŠ7„°@D4'¤¦¦~C)õCg˜Óår{šOL4k&MUįp---hnnĘ”C‡088huŹV|Ō&p ŲĄņźM £é÷OLLDiiéqūż‡£”ĀŻwߍæüeŹ/ه—mÜø±sčJKK3 Ćų=€å&åč9zĮ3&śrX "š@Ö¬Y3S×õ”Rß‘l3b¦¦¦¢°°sēĪ…¦™5‡č’†ÖÖÖc»lhØšˆRź‘P(“ÕźdD·,ė÷N8Ę/łKŌŌԌ:Ęõp0ü”••åG£ŃĶš» ĄĮ`šU“āMI,MGūūo°ĄšMˆĆĢž=………˜5k"Ī¢‰¬³³DSS:;;‡’ĄŲ쑇<޳:ÅĒ“ą¹l$Ÿ;óĢ3Q^^nŹI7ųłĻŽĆ‡Ēt½Rj²ĢŪ¹A)õŖˆl0ś*Ź'ՊČ%<"vģ&Œˆˆ&+ŸĻ·Ąw•R_0ęńūš¦!''EEEģļ§øŠŪŪ{¬ŠÖÖfi.„Ō>MÓŃ4­ŗ²²r»„ɈhÜŲŁļ?œĘĘFÜ~ūķv”z•RQ1ėFćƒh4zɆ ˜oJc€ˆ(Īųż~G]]]1€8ی˜ ČĖĖC^^\.—!‰L×ßߏ¦¦¦cŋ‡nš°aæ­®®Žke""²Ļē»J)U ę‡ĻiÓ¦”““K—.µdMŪ¶mĆÆżk†żsJ].įt:”ė:¢Ń(Āį0zzzģ:Ęu¬žģt:ÆŖØØčļ…L,ʼnoūŪ)½½½„G·ś»Ķˆ™œœŒ¼¼<øŻn蜘7ŁfppĶĶĶhllÄ”C‡¬¾qžP)µ@u(:he""²†ßļןźź~ą§Į3NVVÖ­[‡ģlSĘź×īŻ»ńė_’½½½–å""˜>}:2220}śt8Ž^ŪŁŁ‰ÖÖV“··ŪqjĖh<¦”ŗ. õ÷B&ˆˆĘYIIɧӳm„Ō:fÄĢČČ@~~>²³³'K?!MaŃh‡BSS<ˆH$bY*yĄ.«‘yā”ß’D^zé%<šĄVžŽ8Ģ™3³gĻ>éC’ńōöö¢®®Ī–E¬Dd}nnī÷y¼«łxWHD4N<Ļ©"ņJŒy_¾ˆ`īܹ(,,ÄōéÓǾ@¢84T hllDss³•7Õ½žĄƒN§ó–ŸcHD#ēõz‰ČćJ©SbżŒˆąŠ+®Ą—æüeˊä†aą·æż-žųĒ?ZˆĆį@VVfĻž=¦“| Ć@CCZ[[M\ŻØ(¹-ųĒ{!“ DD6[»vķYŗ®O)u-Lģēt:1oŽ<Zśƒ(ކ––ĖwˆČæ°!< .÷ŹM5ńŲļ===øēž{šį‡Z–fĻžœœœæń?™ĘĘF455™o„"n ƒ•ćµ€©€""ųż~­¶¶ö2ł'ē›3)) n·n·N§ÓŒDÖŠĪ€ąąĮƒVĪ hš8€ź`0ų¶UIˆč¤ÄćńüHDž@ĢÆ½333qÓM7aī\³N¦ū¬ęęfÜqĒ–>D»\.äåå!%%ŒųCæGmÖ£”śZ(zĘīÄS DD*..ž–ššŗV)õ ̈™‘‘‚‚dee±æŸč8qšąĮc-nõžˆlŒD"ņx*"{\wŻuÓ].WµRźŹ‘|nńāÅ(//GRR’UKƶmŪpļ½÷ZÖK/"˜9s&ęϟ?¦ķžĆQJ”¦¦ķķķ–åų”6WƒĮWķJ8•ńĪ‘ˆČåååiįpŲ#"?cFĢĢĢL!#Ɣ9DSB8FKK ŃŅŅbU1Ą‘×lHLL|šī»ļī¶" ŃTēół*„š¹X?#"øōŅKqõÕW[Z4ī¹ēššĆ[¶ūH×uäēē#--Ķ’ųŸF±}ūv XŖVD. ;­NDa€ˆČD>ŸÆ@)u3€1æfŠun·łłł–¾µ š ŠŌŌ„ĘĘF“µµYU čš˜aņóó’Ģ ÖDęšz½—x@ĢOĄ‰‰‰(--ÅYgeŁŗ"‘Ŗ««±eĖĖr$&&¢°°‰‰‰–å8ž––444X™b[4½”;ØģÅ‘ JKK—(„nVJ]`ĢÓx†śūņņņ`Ā ‰čćśūūŃŲ؈X¹Ķõ€G•RĮP(ō®UIˆ&¹øķ÷oooĒwމššĖr¤„„!??ŗ>ę™Į#bĆĆ’ŸNēUV&”Ļb€ˆh |>ßJ„Ō-.7#^rr2ņņņąv»m’²'šŖŗŗŗŠŌŌ„††+ĻĮžP)µĮįp„*++›­JB4™Äsæ}}=ÖÆ_Ć‡[–cöģŁ˜?¾­ó~”RØ««³ōŸ ĄcJ©ėB”Pæ•IčųX "”āāā„ŌŌŌo(„žĄéfÄLOOG~~>ęĪĖĮ~D㨽½ū÷ļǁ‡­Hšg¹ßįpü®¢¢Ā²ŠŃDĻżžo¾ł&€Uæ# "ČĪĪFvv¶%ńOdpp555čī¶nŒ‰ˆ¬ĻĶĶż>Ū£Ęļ2‰ˆbT^^ž688ų-ß`ŹžĀ¬¬,aƌf„#"“†C‡a’žżhnnF4µ"M;€G ĆŲP]]m]1ŃÆżžJ)<łä“xņÉ'-;]DD››‹Y³fY’Dśśś°gĻˊ "? ~ĖPLX "†ĒćÉŅ4ķßUJłI]Ó4äää`Į‚–įKDę‰F£hnnĘžżū-;I@DvxHÓ“źŹŹŹ}¦' šā¶ß``÷ŻwŽ~ūmĖrhš†ĀĀBLŸ>ݲĒsųšaŌ××[v‚ĮQOƒĮ/[™€bĆŃ x<ž3D䇮ąk¼„„„cż].×ŲHD¶@cc#ŠŃaÉģ*ĄsŖ•R³G–¦Šxī÷oiiĮśõėqą€uĆź,X`ė‰?J)8pĶĶ–%ˆF£…œöX "ś”²²² £Ńč8όxIIIČĻĻGnn.Ž1@Dq¢»»ūX1Ą¢į"ņ$€ @ąyÖģ9&gńÜļæk×.Üu×]čźź²,‡ĖåĀ‚ l}9‰D°oß>tvvZžKD~žÓņDˆˆųż~­®®ī+"ņ_J)·™±N'²³³1oŽ<̜9ÓĢŠD'ŚŚŚŽ ŒD"V¤Ų)"æ‘`UUU ˆĘC¼öūĄ‹/¾ˆxĄŖ >zI°`Į[_ō÷÷cĻž=°#]u0ō‚ĢøĮMi%%%ɇ£Ą?˜mu¾3f ØØYYYV§"¢q`üĄŸxŠMqŪļozč!<’üó–倓“4@ÓbžĒ³ŽŽģŪ·ĻŅ¢ĘQ Ą’ ƒ?žć D4%•””Ģq:?4 ć&™fwžŒŒ ,^¼©©©v§&"›ō÷÷k°h›m€‡Eäž@ šŠ ˆ¬ĻżžŻŻŻøūī»±cĒĖrĄ¬Y³ąv›ŗįš¤”R8xš ķČÕ'"Ž`0ų°åÉhÄX ¢)eķŚµ…"ņMÓÖ(„ʵ!_Ó4,\ø………–ö/ŃųėźźĀžżūŃŠŠ`Õ¶Ū"ņp$ lŲ°”ފDfˆē~’††¬_æ­­­–ådgg#;;Ū²ŸfjkkqäČĖs)„źu]æ²ŖŖźĖ“ŃØšŽ“ˆ¦Æ×{>?€‹gæū222pĪ9ē !!a¼—BDSJ”„„ hnn¶āŲ­€gE$ŌÕÕõŌ¦M›¬;Ō›h„ā¹ß’ż÷ßǽ÷Ž‹¾¾>Ėrˆņņņ‘‘aYŽO ‡ĆØ©©AOOé^ŃużŃ²f IDAT«•••–+@£W7ĮDDfņūżZmmķeš¦ŻŖ”²öĪaŒ’’’pī¹ē"%%e¼—BD6Dcc#öļߏ¶¶6+R“x„-ā¶ß_)…Ķ›7ćŃGµbfĒ1ŗ®£°°ŠÖÖæīīnŌŌŌ`ppŠŽtŻŻŻėXtŒ,Ѥ³nŻ:Wwww‰Rź_D$׊‡N§Ńhį°9ßu.— ēž{.ŅŅb~1BD“DWW°’~«Z¶F"‘÷ß‹ ˆŽ'žūż ńśėÆ[–ųčū½ØØ‰‰‰–ęłøÖÖVŌ××[ZŌ8ŹPJ}? ­·:™ƒ"š4|>_*€r„Ō-0i¢æĖåBAAęĶ›‡¬¬,¤„„!55Ó¦żßÜ@Ć0ŠÓӃ¶¶6477£®®ūöķCww÷ˆó%$$`åŹ•HNN6cł“ša‡Ć‡Ć0 ć?Cǰ ½õˆD"Ÿø r8ĒśH5Mƒ®ė>Śžét:ż¹Óé<ö3t ‘•”RĒN°ØE`Ąf„T0!!į銊 [^ ŅŌĻżžGŽĮśõėQ[[kYHNNFaaį±ļ«)„PWW‡Ć‡Ū‘«Ą—C”Š –'#Ó°@Dž×ė ą»"ņ}„”){蓒’°|łr,[¶ģū±2 {÷īÅ;#æžõÆ#ŖĄ'''cåŹ•Sr&€R }}}čééĮĄĄĀį0000€ĮĮĮOü™Eg­ŸŠĒ C;@†~€ÄÄÄOüŲy“M>įp@}}½U§š ˆĄ{V$ ©+žūż÷ģŁƒ»īŗ –ę™1cņņņlū.ˆD"Ø©©AWW—évkšö·UUUuv$#ó°@DVii©Ą Ćø€ĖŒ˜)))X¹r%Ī>ūlÓĄ:„ēŸ~ųa̟ÉČČĄņåĖ'ķd?ŗŗŗŠÕՅīīntww£ÆÆ}}}vlW“ĶńЉ‰‰p¹\HNNFrrņ¤ż’1™«³³õõõ8pą€imGŸņŽˆT†±1 µ[‘€¦Œøķ÷€×_Į`Šņ¾ų9sę`žüł–ęųø¾¾>ģŁ³ĒŖßŸöŒÓé,®ØØčµ#™‹"špÖ®]{šĆįų§h4zˆ˜²/;==Ė—/ĒŁgŸmŁ6½;wāÉ'ŸŒ¹2æ`Įœzź©–¬Å.J)ōōō ££ķķķčģģD{{»ķoļ效Ąår!%%IIIHNNFRRұæv8Ęõ¤JŠCC-C§XP0ė‘߉HeUUÕKf§É-žūż ĆĄc=†gžyƲCrss1{¶)ˆ1ikkC]]-CŸ!"æ ?0yŖõS D4ax½Žó Ćų±¦i—Į¤ß_X¹r%–.]jĖ›ŲīīnÜ’żhjjöZĮŖU«&ŌP@„ŚŪŪqųša“µµ”­­Ķ®éĆ“ŅŠN”¢@jj*¦OŸnéM2MhllD]]U[~ß‘õ]]]nړɺ³ŃhRˆē~’¾¾>TTTą½÷¬ķtŃ4 ¶}o+„ŠŲ؈ƒŚ‘.Ŗ”śf(ś­ÉČ:,Q¼ŸĻw‰Rź'Vš4;;«WÆĘ¢E‹,½é8žžž~lÜøuuĆ·ĶMŸ>«Wƶ}#ŃÓӃ––“““ąšįƈF£ć½¤IĻét"%%Ó§O?VHMM’s#č#·“øO×õ_ó|o:žxī÷onnĘwÜSį},\. G57h4"‘öķŪgÕ|OėRJ­…BŪģHF֊ß;J"šŅŠ‹‹õäääbł)€Ó͊›››‹Õ«WcĮ‚ćśP=00€ūī»--ßĘõ¹Ļ}EEE6¬*6CołŃÜ܌žžžń^år¹>QHOOGJJJ\Č\†a|ā“[śE$ iŚUVVī330MXqŻļ’Įą7æł z{­mUONNFQQ‘mm[żżżŲ»w/śūūķHW§iŚŅŖŖŖ6;’‘õxG@DqÅćń$jšę9z”_žYq ±zõjäēē›rĢŚŪŪQQQ1ģq øųā‹ĒżŗŽŽ8pčėćną‰B×u¤„„!==3fĢ@zz:[¦ˆc§˜Ü"‘‡ Ćų·P(“ŪĢĄ4qÄsæ?<÷Üsxųį‡-ļ‹ĻČȀŪķ¶m kGGöķŪgĖn;Ł’››»Śļ÷[?\€lĆÅŸĻ—j†ODž @–1E .Ä\`ł[†Ńڳg6lŲ0ģu§v lXŃgutt`Ļž=hjjšTś§2‡ĆéÓ§#-- ˜9s&\.SŅ 8ÕÕՅżū÷£¾¾ŽĢCDF£?®®®ŽkVPŠńÜļ‰DP]]-[¶X–ųčŸ';;YYY¶ģ²ząĄĖsĶW …ŹlIF¶b€ˆĘUYYYf$ł¾ˆ|@Ŗ1E§œr .ŗč"äää˜ŅR?ž8Žyē“^“˜˜ˆ/|į ¶×Öֆ]»vįŠ”C¶å<.-GZ“*„šE¤E)ÕŖiZ+€Įh4z”R]‡# ææææOD¢7nüt“¤\{ķµéCįr¹RDÄ †a$(„’E$ @śŠ¦iéŅ•Ré’ó£?™’-üļĄr‰‰‰˜1cʱ‚ĄōéÓŁ:0 †ƒ¢””‡2«Ø𛁁’ƒ>xȀæā¹ß棣ėׯGMM„y4MC~~>ŅÓӇæŲ†a ¶¶GŽX’ƗRJ‰Č÷ƒĮą–'£qĮov">ŸÆ@)õCń)„LyõØė:Ī<óL¬^½f„üŒśśz¼’žūŲæ?ŚŪ?:*;55n·gœqÜn÷ˆcöõõażśõƶ,]ŗŌ– ‡Ę®]»ŠŚŚjy®£zlWJķP VÓ“}š¦ÕF"‘¦P(dK“ćX]wŻuÓ§M›6wpp0GDr4M› G)5@6€yųhw‹5ēLšĢįp ##ćŲό3l-@‘õśūūŃŠŠ€śśz³z¤[Eä§¹¹¹•Ü2<)Åuæ}}=ÖÆ_Ć‡[šĒét¢ØØČ¶VŖp8Œšš[ęķˆHDD®¬ŖŖzŚņd4nX "[ł|¾3ö÷#ø8]×±dÉ\pĮ–½ÓÖֆߒž÷Ų³gĻIÆĖĻĻĒUW]5ā·/æü2ž{^“““céŪ“ÖÖVģŚµĖź›§ł‹a°ĶįplƬ¬¬ÅŌ9OX<O¦¦iłJ©B)2 £HD ˜5Ž <Mӎķś±kąYK)…ÖÖVŌ××›Õźó¶aß­®®¶v6Ł&Žūżß|óM+NĄų„¤¤$Įé“§ŽŪÕՅššD";ŅuX ?“#ˆČ„„„« ĆøĄ„0éwOBB–.]ŠU«V!5ՔīćŖ««Ćƒ>óą»ÄÄD\{ķµČĖĖ‹9G8ĘÆ~õ«“¾…s8øä’KLߖ}čŠ!ģŚµ mm¦ųķš†ˆ¼dʖp8ü·Ÿ\yyyŚąą`”ˆ)„†Š…ųč$Œ™ć»ŗO‘c3fĻžĶ‚Ą$ŃßßŚŚZŌÕՍõaJ)„4 ć– 6ŲÓ“L–(--u†ń€±~FDpÅWąĖ_ž²„­DJ)<śč£Ų¼y³å3jf̘¼¼<ŪvB ålš½ÓF—ńßÕ©"²’x<žĖö;߬ IIIX¾|9–-[fły»GŽĮŻwߍ}ĪårįśėÆĒœ9sbžĢžš‡a‡-_¾³f™ó’Ų‚C)õ–¦i›•R’ėt:·VTT š|Ŗ+//χçkš¶X)ušˆ,VJ-`Ļ”ÓĆŚ!0{ölĢ™3DzŻ8dĆ0ŠŠŠ€½{÷Žuėq7€s»Żæņūż¶¼Ę$óųż~­¾¾žM„TĢŪϦM›†²²2,Y²ÄŹ„”ææx÷Żw-Ķ#"ČĢĢ“m˜°R uuu–·2 ‘w.<άš¤X "Ółż~Gmmķ5"ņ#|ōęŅ)))X¹r%Ī>ūl$$$˜ö¤ī»ļ>444Œź³sēĪEyyyĢo?źźźPUUuŅk.\ˆSN9eTėŅŅŅ‚]»v™5LØĄfyŌįpü”¢¢Ā¶ĮėÉÉÉš¦-6 ćt9żha Ąøž™€Y³faöģŁ˜={¶åÅ:²†R MMMŲ½{7:;Ēō|šF4]³aƆ]f­¬ēõz/šB¬×geeaŻŗuČĪζnQųč{lżśõ–OÄäååY6WčÓ"‘jjjĢ>¶ód6+„¾2Qfķ9X "Ӕ——' śDä”RyfÅMOOĒŖU«°dÉ[·ĒzDßÉ\sĶ5ųÜēb;%É0 üņ—æ„Ԍį®]µj¼^Æ%ėˆF£xąšā‹/ń„„„!??ŗn}•R 8xš å¹ŽŠŠČ·ĄÉū iRć7,˜ĒćYp“ææ&>,äęębõźÕX°`Įø?D£Qüģg?;é5§œr 4MƎ;NzŻOśSø\±ż×ōŌSOaėÖ­'üū)))øč¢‹N£©© ;wī4£‡Pxśčƒ’‰E“Fqqń“”””e"²Ś0Œ•"r>L,īÅ"!!įX1`Μ9¶Ü„Óč `ūöķŲæ’h§•?ŠŻŻ]¾iÓ¦‘mo"Ūų|¾ė”RÄrķš5kb*RDWWīŗė.ģŚeżųˆ9sę`žüł–ē>ŗĻØ­­5kw^,śDäź@ °Ł®„ŸŲ@D1óx<Ÿ×4ķ'J©«˜¶'ßķvcŊ8õŌSĶ 9f±œ¹›““S`$śūO>‡ēd}ӍŲµk—YžOŻź’—±£‰ćčCرց£=—X%"«¬`Ī1'‡ŃŠŠ€††hš†™3g"++ ™™™$‡\.>’łĻĆķvćƒ>ĶĆĢ7SRR­Y³ęŖ 6Ō[±F›@ °Ńėõ.šŻį®Żøq#ęĪ‹ b>1š¤öļߏ;īø­­ÖĪ—øŻn̜iĻi«żżżŲ»wļ°ßł&j‘ˁĄkv%¤ųÅD4,Æ×{>€Ÿø&żŽœrŹ)øšĀ m;Zg¤næżö’÷i‡’ņ/’óŽ†ŖŖ*ŌÕ՝šļĻ™3ēž{Ś>ø{÷n³üŸ8śĘߌs•h¢’µk×.Ņu}€ ”R_0Ū®äiiiČÉÉANNēÄ©śśzlß¾}4ƒĢ(ƒÖļń¦óūżŽŗŗŗ?ø`økÓŅŅpė­·"==}L9ß’}Ü{ļ½#ž}3R‡HMMµ4ϐŽŽģŪ·ŃhŌ–|J©}†a\Ā8h DtB>Ÿo„Rź—›SÓ4œvŚiX½z5233Ķ k‰`0ˆ}ūö)F~~~Ģ=‘Ńh·ß~ūIwĢ›7ļŲŁŹŲ¹s§“€§ Ćšó?”Ļē+0 ć ¹ĄJ‰väMMM=V HI±µK†100€÷ß4}Ķ„Ō?‡B”_X±.›²²²Ģh4ś€yĆ][TT„żčG£:¹G)…Ķ›7ćŃGm[I̦M›†ĀĀ˜ŪōĘbh6ÕG~ʶh4z)nŅDZ@DŸ&ērł €óĢ Ŗė:Ī<óL¬ZµŹ¶-vcµuėV<õŌScŠqłå—cٲe1]»{÷nÜ’ż'½ęŒ3Ī@BB‚Yž€g4Mū×ŖŖŖwĘŒØøøxZjjź øX)µ6Ük°ŸöļߏmŪ¶ÅŌRõqJ©===×s.@üńz½ē⣔aŸ˜/¾ųb\{ķµ#Š?88ˆP(„×^³~§ŗĆž Ć@mm-Ž9by®łS8¾jćʍv&„ųĒŠ‹‹õäääÆ‹ČœnV\]×±dÉ\pĮHKK3+¬-±~żśQčIIIĮĶ7ßóyēæżķońį‡žōšiÓ¦™±2 ąa]×^YY¹}¬ĮˆNÄćńd‰ČÅžV)õ·"’muĪōōtdgg#;;ÉÉÉV§£aōööāŻwßÅįƇGō9ŁbĘå”Pȶ iÆ×ū-æ‰åŚŅŅR¬X±"¦øGŽĮśõėOz®YęĢ™ƒyóęŁ2p8£¦¦f̧ „RźQß …B¶  ‰ƒ¢)®øø8!%%e €[™×åraٲeX¾|ł„~#·cĒ<ōŠC#ކ("øęškblxčŠ!Üu×]VŸ‘‡ÜvZ™ˆčx|>ߙJ©Ė•R_‘³aā0ŃćIKKĆܹs1wī\$&ŚŅ™@'°wļ^ģŲ±c¤æćŽÓużļ*++›­ZŽ×ė½@Łp×9NüųĒ?F^^ŽIÆŪ»w/ī¼óN³Ž­=!»‡żuuu”¦¦fÄ»`Ęč·Ū}³ßļ·ō†‚&.ˆ¦Øņņņ¤p8|½ˆü1ōóÅ*)) ēwĪ=÷ÜI3±ūµ×^óĻ>s@DšÅ/~1ę·p’ż÷c÷īŻ£]āp"J©t]æ½ŖŖjUIˆFĀćńdišv™Rź  Ą²©~"‚Y³fa޼yČĪĪęт㤽½o½õֈv1‰Č®H$ņ·ŽÅMk×®=KÓ“Ÿø&Ž»Żn¬X±"ęćģčävļŽM›6”æLGóöø×étžgEE…µ{(‰&€²²²y†a|U)U `9L¾æ:E`hWw?™ÆÆÆÆæž:ŗ»»cżČöh4ŗjƆ ‡­\ÅĪćńä‰Č[ģ9cļ8RRRPXXhĖL¢h4ŠŚŚZ3Ūųbõ§p8|Õʍ;ķNL“ DœĒćY„iŚO”R—˜SDpŹ)§ąĀ /“­wn²3 /¼š^|ńű Ōą7ŗ®’'ĻÅ&:¾²²²yŃh“@ ,x™˜˜ˆ‚‚øŻīI?ųŌnxć7Frü‘Hä ÷ߏ•ė¢Ųy<žæ‘§`ĮŽœį éģŲ„Ųßߏ½{÷޵˜?bJ©G|3 Ł›˜&ˆ&(Ēs‰ˆüĄ*³bjš†ÓN; «WÆFff¦Ya§¼¦¦&<ńÄcxŌ ąn’ ™·2¢ÉmķŚµ§éŗ^¢”ŗ&-čt:‘››‹üü|[¶OƒƒƒxóĶ7GŅ"õ‡īīī/mŚ“ÉÖÉktb^Æ÷_üĢ®|"‚œœdeeŁ’Æ££ūöķC4µ%ßĒÜįv»oöūżö  I‰¢ Äļ÷kµµµW}ć–Yqu]Ē™gž‰U«VaęĢqŪ¹7é477ćå—_Ę|0ŚĮ@]īt:æŖØØ°õ@a¢ÉÄļ÷kūöķ»HÓ“_jV씇¢¢"LŸ>ݬ°SZ$ĮÖ­[c>G]Dī å/‹b'ē-Yju"]×QXXˆŌTÓž•>!„š››qąĄĖs}:µˆÜüv'¦É‰¢ ąčƒ’Õ"āWJ-2k{›®ėX²d .øą¤„„™“€ĘĘF¼ņŹ+ųė_’:Śķž½"²^D~YUU5ęIDō<O"€+Dd €æą4#®ˆ`Μ98õŌSY0Įąą ^{ķµ‘“\ +­\ ÆøøXOMM½])u‹Õ¹\.ŠŠŠl9¶Ó0 ŌÖÖāȑ#–ēś”ˆRź[”P(`wbš¼X ŠcÅÅÅ ©©©ßšS„Ō)fÅu¹\X¶lĪ?’|N¶6‰R »wļĘĖ/æŒŗŗQ¦6Ü«iŚ?óĮŸČz„„„J©ÆX£”ZaVܜœœzź©üż:Fįp[¶l‰u0ą€RjU(Śjõŗčų®»īŗéN§óA¹Ģź\iiiČĻχ®ėV§B8FMM zzl5Ń#"Ł@`³Ż‰irc€(•””$;Žr?cVܤ¤$œwŽy8÷ÜsٳjĆ0š×æž/æü2<8–P;u]æ˜ĒłĒs†¦i×ų¦RjĘXć‰rssqŹ)§Ųņ†r²źķķÅ+Ƽ‚X.Æs:g³eŹ~„„„E†a<Ąņ#ƒęĢ™ƒyóęŁ2쯻»555“<×§‘+Ąkv'¦É¢8āńxŅEä&ß0ˬø)))8ēœspžłēĆår™vJ‹F£Ų¶m^z鄘ūTO@)„~——÷ģC4žŠ‹‹§„¦¦+„®°r¬ńt]Ē‚ PPP`ĖŪŹÉØ³³ƾśj¬aĻuww_ŗiÓ&Ū'“MU>Ÿļ‹J©‡¤[™GDąv»m›UŌŚŚŠśśś±œÜ3*J©}†a\²aƆ]¶&¦)ƒ¢8P^^>kppš{Ö0­?==+W®ÄŅ„Ky\•I°uėV¼śź«#9Æśø”R-"R ’Ǥ呉¼^ļ"„Ōõ"ā0¦Ęž¤¤$,Z“ŁŁŁ&­njikkĆkƽė@Õ’ƒ?±zMų|¾r„Ō],½Ép:(,,“„­F)…śśś±÷Gk›ˆ\³ä ø IDATĒ#9M ,#Æ×;[D¾£”ś>L|šŸ1cV­Z…„K—BÓl?ŠwRźķķÅo¼×_}}}cŽ'"›Ē·¹U•(žł|¾TĆ0|"ņ¹c‰5sęLœ~śé8 µµµŲ¶m[,—*„Ō߅B”ē¬^ÓTå÷ūµµµ’-"ß±:דiÓPTT„„„«S!‰ ¦¦]]]–ē:Ž?…Ćį«6nÜŲ9Éiź`€h”••e†q³Rź»LkĘĻĪĪĘŖU«pŚi§ŁŅ7“··cĖ–-xūķ·Ķź|G)u oL‰&žņņrg8¾ĄEdŁhćˆņņņpź©§rwÖ½ūī»hhhˆåŅZYĘåIn2[³fĶL]׹B«s͘1yyy¶¼Ģčėėƞ={‡-ĻõiJ©G|3 õŪžœ¦>!ŁČēóų'„ŌZ¦•²sss±råJ,\øž&ikkĆ+Ƽ‚·ß~;Ö-§'%"[ ĆųE(ś={ ‰Čt^Æ÷ļųœ7Ś)))X¼x±m=Ķ“A4Ŗ-[b:P)uW(ŗÉ†eMē ’#"łVędgg#++Ė–ūš¶¶6ŌÕՙņ}? wøŻī›9ˆģĀ'"ų|¾„Ō-"āSJ™öŗĒķvcŊ8õTˇīNMMMxķµ×šžūļ›q# <śQ_ūźˆ(Žų|¾‹•R’ąģŃ|~č“€E‹q7@ŒśśśšŅK/Åņ¦–­&ņxšæźŖ«0~üx!ēGŎ;P__/"¤‰1ö¶,Ėæ2ĒE$„xGvv¶TUU5‹1v cģ? Q2'Ę$Iŗh»V•JÕg AI’ś¬‰čõĮ«TŖ>ē;zŻ~Lļ ĪäŠūuF#|*÷×_ŹŹJ‡Ē1Ęž’——ēõfuĆŃŗuė‚Z[[s¬ņöµBCC‘””Ęū’ ;;;QQQĪNE–Ü·1Ę2ņņņ>Rāā„P€ ĆbĪłÓ®S’$¤§§céŅ„3fŒØ°Ķf³įȑ#())Į™3gD„¼ Ÿ1ö{Śŗ‡’–™™™"˲ĄjN'ą0Ę.ąõ., ōŗF£é³»Z­†$IąœćĢ™3°Z­Ž.ĖcŪ4°qĪĻē\–$©dY暻sąŒ±ęīcZ8ē2€ ’$YeYnåœ[cm’$™eYn7›Ķ&­VŪ1øegg«ėźźFˆ’ey4€(Ńœó Œ±XĪłL÷vŃŃш‹‹óÉz’ęęfTWWĆf³yżZųžsžc£Ńø[‰‹P€!ŗžqĪ,źĶK„RaÖ¬Yųįč“upĄl6楁Ų¹s§Ø)Œ±WdY~Ńh46‹Hń f0žC–åcK@Ÿˆ÷t2Ę:8ē&ķ̌±6ι]ÅbcĢ^€°?`Œµ°Ų_ćœ;½ƒ$IZ! ˲Ä‹Ä ꜇Š0ĘFqĪķĒ…[»+..111^æē ¢fü¹sż*Y–—m޼ł˜" ŅŽ qĖĢ̼Q–å§įAčž“Z-fĻž%K– ,,LTŲ€ÖŽŽŽ={ö`÷īŻččč²šsžb[[[NQQ‘€„ń²³³„źźźåŒ±l³•·ņojµIII>ł¬#Ė2Ŗ««ŃŌŌäõk]ĀĘŲ2š%HüqÓét?fŒ=`®Ø ĮĮĮ˜?>ęĶ›ē“ę7 „„eee8pą€}}9ēGcϵ¶¶¾]TT¤ČÜABˆs233—ʲüų`ś2!Ä5#FŒ@JJŹEż.¼Įl6£¼¼\Ō w|n6›o.,,T¤Ū !żQ€'eddØĀĀĀnēœ?(CCC1wī\,\øŠ'o„ ¹¹eeeŲææ3kCbŒķ”eł÷F£ń}tmķGńS™™™Q²,?ą.ŠēBüNxx8’’’ś4ō–ÖÖVTVVĀb±xżZįœ¶µµŠŠŠ<æ Aˆ ōĘHˆYYY³Ł¼’1ö€Qq###±`ĮĢ™3Ē'oAcc#JKKqųšaȲģq<ĘŲNŁyyyŸyž!ÄŪt:ݲī}Ź©c*!~(66&LšI³æĘĘFœ8qĀė×Ƅ„„õŁŁŁž !D *r ėÖ­ ŗpįB&€Ēcń¢āŽ5 K–,ĮģŁ³/Śf‰øēŌ©S())Į×_ݧS“;xW€%IŹĪĖĖŪ/&CBˆ7uĻŠz†sž ¼¼O9!ÄuŒ1ÄĒĒūd7#Ī9jkkqöģYÆ_ėŅ)š'ŒFćļ•J€ĮP€~V®\¢V«³cpĪljŠ‹E‹!==ž‚ŌÖÖ¢¤¤Gõ8cĢ ąM«ÕśkźŠKČŠa0Ā8ēļøFé\!Óh4HJJBhhØ×Æe±XPYY‰ÖÖVÆ_ė̜s½Ńh|C©q„ „t»óĪ;ƵZķ½‚Ąé£ńńńX¼x1&Ožģ“)o ¢¢Ÿž¹Ø©}^³ŁlĻo޼Y™½!nÉĢ̌²Łl1Ę®P:BČÅFމ””hµZÆ_«­­ Š­÷ŠĘ9_a4?V*af4€±Ż’µ°wŹŠÖż½}ŪĶļ{}pʇł4!/333Šs~?€8ē‘¢ā&$$`Ń¢E˜2eŠØsŽ£GbĒŽ¢öšmaŒ½ŲŁŁłŅo¼”Ų¾@„÷¬Y³&Öf³} `†Ņ¹B.‰I“&łdÖć¹sēPSS#¤’›dY^¾iÓ¦J%0D©LF×ļń™¦˜ @ø€ųmŖŗæ¾pĄįīļ«) $`­\¹2F„R­gŒŻ@ȼ4ĘŅŅҰtéRÄÅʼnšdYĘįƇQ\\,j=_#ēü9­V›“““Ó." !Ä·V®\¢ŃhvpĪ/W:BH_Œ±žfŽ&Ė2źėėŃŲŲčõk] ē¼ ĄõF£ńøbI –X`1€9čŗ«ļk&”(ķžś^<ApV®\£Ńhź¾ė?Ņį N$ Ó§OĒŅ„K+"dĄ³Z­8xš JKKŃÜÜ,"ä ĪłS‰‰‰ofgg{¾7 !DŁŁŁRMMĶ;nV:BH_Œ1$$$`ōčŃ^æVGGŖŖŖŠŃŃįõk] cģ€$IĖ7nÜŲ Xžo&€,°]wż„R©0aĀÄĒĒcōčŃ=_‘‘‘=ŪGFFF¢„„œsȲŒ––œ={ß’=¾’ž{ŌÕÕ”®®ĪŁ%!6ū|ŌżµĆxŪg*€”ÓécrĪ3cB£I’„ōōt,Y²ŃŃŃ"B<³ŁŒ`ēĪ8ž¼ˆ•Œ±g/\øPXTTd¢N÷cģq„ó „ō„ŃhœœŒÆ_«””õõõļüć”ĻĶfóĶ………B>¬ 33ÜŚż•v©ƒ4 f̘Ń󕞞ŽäädÄÅÅ Ł"Ūf³”®®•••8räŽ9‚żė_8|ų0L&Ó`§Öx»ūkŲķE2ģétŗTĘŲV‰Ŗ£3T*f̘+ƼQQQ"B<“É„½{÷bēĪho23’ĪłćF£ń} ć*.!dõźÕ‹$IŚ@„t.„ Frr²×›żY­VTWW£„„Å«×q„s^ŲÖÖf(**2+šˆ‰p€»Ģ耑#GbéŅ„Xŗt)-Z„¹sē"8Ų÷+L&öļߏ²²2ć‹/¾@[[Ū„’ĄF›(¶·¤HT ĆÖźÕ«§«TŖĒdY¾ƒ1&äĆ¢V«ÅģŁ³±dÉ„……‰šŚŚŚ°wļ^ģŚµ ĒcŒ} ąž¼¼¼Ļ<ĻŽā/ŗ·h= Eé\!’6jŌ($&&z½Ł_kk+ŖŖŖ`6+>ꎐ°>;;[±Žƒ~f€õ~†®Īü}Lœ87ß|3nøį\yå•9RČź[”L&JKKńŃGįŻwßEUUՀ‡Ųątõ²Ø@†½^?ĄSž€w£   \qÅX¼x±_žāŠš››QVV†ˆŚ²g$I÷ēęęīŒā_ōzż 蜐éUjµįįįŠjµąœĆfū÷Ź!Ƭ־-Dl6[ŸiČż»ōz’Ē v.'Äm*• 'NĘ1ĀvNē¼gŹæĀ8ēü £Ńų{„ńWų%€ŠoLŪoæ·Žz+.\蓝 DŚ»w/Ž~ūm¼łę›8yņä@‡lš?>ÄœeJ2ldffĪāœ?Į9_A?Ū”””˜;w..\ˆ   !^SSvķŚ…żū÷_ōAŚŒ±œó¬üüüo¤GńCŻ=\¾ą•_Ē$!22£GFxøˆ§<3P‘a°×=-:Ų›hõ~ģjįĆf³1vÉשš1ō1Ę Ńh0bÄDDD ** jµ••—d³ŁPUU„ų”fιŽh4¾”t"~`!€_øŗ÷“Œ1,\ø«V­ĀŹ•+‡Å 3Y–ńłēŸ#''ļ½÷Ž@Ÿ[ų5€"ßgē>*!O§Ó]É{ż~y"22 ,Ąœ9s„4!!@cc#JKKqųšaś8€Ļl6Ū}›7o>& =Bˆ3 ›9ē+EĒU©TˆŽŽFLL ż®WX’¢ąøšįŖŽļ=½ ½‹½Ÿ·_ß~]ūcū1ö¢‡ż±=N’⇿’$ ’$A„RA­V÷|Łk4h4hµŚžĒ¾d2™P^^.dy ‡Z9ēF£ńc„QŲ<ąŚŽOŽ9+W®ÄC=„É“'+“™ŌŌŌąÅ_Dnn..\øŠ’å2t’×ļQ€ Yƒa±,ĖæbŒ])*ę˜1c°dÉ̜9sČMWņWõõõŲ±cŽ=*ā‘ Ą6›mķęĶ›Ÿ Hń>ƒĮ0™sž -鲋ŠŠĀĉiąO¼Ę>Ė”qč;c¢’lˆŽ…ūkŒ±žķĻ‘$ Œ±ž»óöA~ļēœ„”óēĻ£ŖŖJČLA5Ȳ¼|Ó¦MCzĶ·‡bŃuĒ?½~‡‡‡ćĄŗuėj'¬ęęf¼ņŹ+ųć’ˆļæ’¾÷KĄ’x Ą E’sČPĆōzżOcĻpĪ/466‹-Bzz: ü©­­EII Ž;&dąĻ9’›V«]—““sJD~„”Į`0ü‘sžØx*• 5j”ؐ„üd‹?pĪ«\o4+šˆr$kü@ĻŚØÜwß}xä‘G0zōhŒSŚłóēńā‹/āOśš››{æŌŽ®‚É’P¼‚5*!!;;[Ŗ®®^.Iҳœó·qĒųńć±xńbLŸ>½ĻŚEā>ūĄ’čŃ£"ĀY¼i2™|ć7šD$„ ėÖ­ jmm­ ¤Ė˜V«EZZõt!ÄɲŒŚŚŚžwUĮ;`±Xn,((hT:…¤ČAW£?]küW¬X?žńˆ‹‹S.3?ÓŌŌ„ß’ž÷ųӟžŌ‡ŠĆčŚŃļšSӈ‡ųµģģlummķœó'L7!!‹-Ā”)ĀB¼ŚŚZ|ńÅØØØš8ēÜ _«Õ>”““Óīyv„”Č`0ÜŹ9KD,­V‹)S¦Š”BüŁlFEEŚŪ•ĖgŒm3™L·žW:HF×ģžJéĀ… ńŅK/aΜ9Š%ęļ¾łę<ųąƒųōÓO{?mš{Ϣ릖_ ńKڰ°0ēü1I¢ā&''ćź«Æ¦Ź„@ųüóĻqℐåNœóFÅ»žB”„×ė7Xåi•J…)S¦`Ĉ²"„ˆŌÖֆŠŠ Q[{„s^ØÕjõ999Ź'ć{cäXf"$$Ļ<ó yäZ"뤢¢"Ü{ļ½8sęLļ§÷ų9æh\MāWÖ­[ŌÖÖ¶šsž4!£tĘŅŅŅpÕUWaüųń"B<Ī9Ž=Š;vŁ——1Ö`C||ü3ŁŁŁ~¹^ŠāsLÆ×ךųwbbb@ÆU%Ä_µ““ ²²Ņ_¶„ܐ°>;;Ū/’ń±å ō4G¹ńĘńꫯbāĉŹe5D9sėÖ­Ć[oõ™ĄÖŠ®%’§LV’FāV®\¢R©Ö0Ę…€{@ן™3gbɒ%ōĮOĪ9¾žśkģŲ± ĒcŒµŹ²ü|bbāoō —r ™™™—ɲ|ÄÓ8aaaHKK‘!D ĘĘFŌÕÕ)Žģ]ŻŪĻĻĻ^éDĄ< ą·čīš?bÄüīwæĆż÷ßOż±Rtü &Šą_›Ķ†/æüŪ·oĒłóBvæ9«R©Żøqc¾ˆ`„€’ąi€°°0yBfĻž­lVfĮ‚())ĮņåĖQQQĮžąVt-Ėš:*ÆŠétS$Iz’sž3xłēL„Rį²Ė.óę%†-ūĄæ¤¤DŌ”¼zĘŲyyy[D#„“pON–$ j5}Ģ!DIĶĶĶØŖŖņ‹mžcŪL&Ó-………B¦81KŃ5ķ?čZ—žŁgŸ!))I٬ŌäɓQZZŠkƽ_}õŠu“t ŗŠóöõ靑e0frΟ°‚s.yK£Ń`̘18uźŌ Ē„„„!88Ų“K“É„½{÷¢““"BÖsĪļ3^’„E żb—$Ž‚!jhh@]]ŅiŲ½®V« yyyŠm½¦ YčŗĆt}nžģ³Ļ§lVnģŲ±(..Ę 7Ü`ß!@ą-’ą#o^› DN7Ÿ1öē|9ŗöu›V«ERR&Mš„/æüŅįń?ųĮ<¹\@iooĒž={°{÷nQ’ŚīæO¦,BJ;<(ųĆGBēuuuhlō›YöÖgggā/…tt­1ŗī$Ė2ŖŖŖ„ģ $šx~~žóJ'¢ńŽńńńŲŗu+ žżLDD¶n݊żčG8xš ŠUų~]=¾ņĘ5é]‘øƒeffŽ(ĖņSœóž9r$’““‘ŠgŹf}}½Ć;8éééP©Tž¦0lµ¶¶b×®]Ų½{7,!³Ž*ܕ——÷¹ˆ`„2×évvv"44TD.„, ŹĖĖŃŽŽ®t*`ęœėFćJ'¢ptM#ŗvĖŚ¾};<Ž\…xAdd$>üšC,]ŗĒŽŗ¶J’€D_ ÄiŁŁŁRuuõrĘŲ3²,Ļõ4^pp0&Mš„ÄÄÄ×j:³nŒ¦’¬„„;wīā„ ü9ēUjµśī7~* =BqF ~É·¶¶R€čģģDyy¹_ló •sža4?V:…ؼ®é’ Ƈ~ˆI“&)›Tll,>śč#,X°Ą>zŗŠ?Š)ņZT eeei,Ė5553ʦx/44©©©˜0aø]Ą… N3f ʏļi:ĆJss3ŹŹŹ°’~!Ūķ0ʎI’“fćʍ%Ņ#„§1Ę¾ćœ’Ō“ēϟ§é®„xŁłóēQYY ›Ķ¦t*@ׯŅFćA„QŠoе†*• ………HOOW8%⌤¤$|šĮøņŹ+ŃÖÖWȰJäuØ@.)##Cv»Åby@Ŗ§ńĀĆƑœœ<čĄßĪ™»’³fĶņ4„a£¹¹ÅÅÅ8xš ØĘW²,6mŚT,"!„øį;O“¶¶Āl6C«ÕŠČ‡ŅĻŁ³gQ[[ ιҩ@%ē|™Ńh<®t" ŗĄ£ö6lĄM7ݤ`:ÄUsęĢA~~>n»ķ6ū櫕čj˜#źT Y¹reˆJ„ŗ›1ö0ēÜć[ģ‘‘‘HKKCLLŒĆæ£cŒŖ™Īœ9ƒ’’>|XŌĄ’ē<Óh4īŒB<ąx8ēhllÄĉEäCé„®® Ā—'»kæÕj]^PPą7[( €Ż»qéõz¬]»Vфˆ{222°’~<’|O’Ź ö2³Å£ķŚČš¢Óé"c÷xt^¶‹ŠŠBZZ¢££]:ļĢ™3Ų½{÷ Ē$''cõźÕž¤7¤566¢““TŲĄŸ1vŲf³6mŚt@@z„"Óėõ \{éG„Rį²Ė.£ŻD–eTWW£©©IéTŒ±m&“é–ĀĀB‡aj%ę]=²ŹŹŹ0räHe³"n“e7Žx#¶nŻjŖĄ,­žĘ¦wC½^Ķ{s~/ŗŗNz$&&©©©ˆŠŠrėü'N8<&P›’>}ÅÅÅųśėÆEM·;h³Łō›7o>,"!„Ä|ąVO‚Ųl6œßÓXAAAHLLDRR’O>;wĪįą?..nX žķ’/¾ų§N’¢V«×lÜø±ND@Bń'ńńńļŌŌŌ| @Ų0­­­ųöŪo1iŅ$Ś€tķÄT[[‹sēĪłģšN ž÷[­Ö卾Čgˆ¼`šąƒŅą?@ÄÄÄą©§žĀ£>jź÷čš br%Ķā222T!!!ž`Œ„{/88ÉÉɈ÷éŌČƇ£¦fš›Ö7ŻtęĪė£ŒÄćœć믿Ę_|3gĪx1&sĪß×h4÷äää©$BˆæŅėõ×šŹŚß˜˜L˜0–€ÕÖֆŖŖ*˜L.#¼Š1¶Ķd2ŻRXXx^é\üĢmžbccqģŲ1„‡‡+œń³ŁŒéÓ§£¼¼§½×}ž×•T¢²²²4‹å猱Ē9ēižĘ EJJ &NœčóīȲ,ćÓO?t_Y•J…GyĮĮĮ>ĢL Y–qųša;lrč ʘM–åwÕjõŗ76H‘B†½^æĄ-ވ­Õj1nÜ8Œ3Ęį ńKœsœ>}ZŌRD‘^×h4†œœæiBą'TŽ {6ŌK/½„ūļæ_ٌˆĻāē?’¹żį)t5„lwö|* 1ڰ°°Ū9ēĻ ė/Ū#įįįHNNʄ Ūéäɓ8pąĄ ĒLŸ>·Żv›2Ćf³įȑ#Ų¾}»Øét6[4̓tǟˆV­ZÆR©¾ąµ9ū#FŒ@ll,FMŪ’a­³³ÕÕÕhkkS:•ž6$$$¬ĻĪĪ–•NÄż]Żß1qāD?~Ü­]¹š››ńöŪocĒŽhhh@HHf̘[o½ééO(&hkkĆ믿Ž?ü°g·ÆŌŌT,_¾wÜq‡K²,cƌųę›oģO­G×րN”w¶!bķŚµ”÷xĄXOć5 ©©©ˆ‰‰QüĪŽ½{ŃŠ0ųģ;īøS¦LńQFž±ŁlųņĖ/±cĒŽŽM:>›7oĘųC§cįÖ[oµ?¬E׍a§fĢPĄĻ­Zµj“Z­^Ē9_ ŹÓxcƌAjjŖßLq4™LųōÓOķ4Š_žņ—~æ6Ób±`ß¾}(--µg®@ž$IOęęęś®#!„ų9ƒĮ°™s¾ŅW× FDD"""¬xįœwutt ¶¶VŌē§8Łéß @—ŸŸ’¦RŖ®š ŠÕ·¤¦¦ĘåāäÓO?ßüę7›6mJJJåńŠ#ą½õÖ[øóĪ;a³Ł=N£Ńąoūn¼ńF§ārĪ1}śt|ūķ·ö§~ Š™séĢO­Y³f¢Ķf{@€Ob1ʍ““4Œ5JL‚“““ąŪoæuŲoĮ‚øį†|”•ėĢf3öīŻ‹²²2QoØfI’rl6Ū3F£±YD@BNŗgÅķ0Ķ××V©T App0BBB„   æ/R“Ą&Ė2Nž<‰ĘĘFŸlļē¢VĪy†ŃhōJ“Ļaä#ĖąWæśž~śi—N~ļ½÷pĖ-Ī·P¹é¦›šüĆ„k¾***0cĘ ttt8u|DD¾żö[Œ7Ī©ć_}õÕŽ³@¾0Ū™óØąg Cēüt ü=žs‹““4DFFzžœ gΜAyy¹Ó ńī¹ēŒ?ŽĖY¹Īd2aĻž=(++C{»Ó}7cĒ9œž„2øĢĢ̛Ͷ‹1ęÜ'%/Óh4Šh4P«ÕP©T=’ķĶf³õ|qĪ/š‚Ż’cµZūąš£K‰‰‰Į}÷ŻēŬ\g2™°wļ^”––:]Ńs’1öæ²óņņ.ˆH! ū½s€0„s!Īė]x°’×^@P©Tąœ÷<ØxŠūÜŽ{ÜŽEK3\qĪ{¦wttąäɓ>īļ¢JĪł2£Ńx\éD†€ßx 233±qćF—N.++Ć¢E‹\¾č]wŻ…œœ—Ļ#]3„£££qž¼k»XĘĘĘāäɓNKŸ|ņI<÷Üsö‡y2C… †ÅœóĒ,‡‡’$aüųńHKKCHˆG«„‘eõõõ(//wė čśėÆwė–7“··£¬¬ {öģµOn§$IÆØTŖgsrr„t $„@£×ėÆšxø\Žžž3zś z7Šk¢ūBō^/Ü{VHļŁ ²,C–åžcš=āĒö[­ÖåJ'2ØŃÕämģŽ½óęĶs)ĄĖ/æģÖv³fĶĀĮƒ49Ćß}÷¦NźÖ¹õõõNĻ~®¬¬DjjŖżwC€ń­:Ø{‘x ÓėõĖ<Į9_či0µZ„„$%%łM§b«ÕŠ'N ¼¼nŐ$É/¶"immÅĪ;±oß>QÓēŚ%Iś³Łü|AAßķ½C!CI~~žē:ī*ĘŲĒŠ,—ūŚ®’Ņ āŒ±m&“é–ĀĀB×n®åčüϘ1ĆåĮ?»uኊ œ;wŽšŗįĀ÷'õ¶““8]HJJĀUW]…mŪ¶]…š ¹ƒCŹĪĪ–Ŗ««—3ĘžĄOć©ÕjÄÅÅ!55AAA2ōœŁlFuu5ŖŖŖ<,Ϛ5 aaŹĶź¼pįJKK±’~X,NķŖįH»,Ė/=—““#¤i!„Ąh4īÓėõ×¢«IVŒŅłB.éuµZmČĖĖņĮ*@Üf’FÆ×» ¢¢Ā­óΟ?¦¦&*ø!66ÖķsĒŽumĒwNg/]?/ƒh €čtŗ’$é8ē «‰‡G‚‚‚0iŅ$$&&B£ŃČŠs(//lj'„TŠSSSqŪm·A«Õ ČĪ5---(--ŁDŻ øĄ9’-€F£{Ó!!„8“jÕŖ ’$½Ė»Bé\!ِ°>;;[v|(錮F‰”Œ1TWW#>>Žå ×\sMļ¢KŹĖĖ‘œœģÖ¹.)) UUU.3sęL:tČ„s.\ø€ŲŲX{o2ŗ–\ry Ķš"ƒĮąY–×sĪ=īR>ŽoŲ“¶¶¢¼¼õõõu)vG\\–,Y‚É“'ū|Ÿåęęf”””ąąĮƒ÷źtR‹,Ėæłå—_Ņ4€BČ„m޼¹>##揰°°W9ē+•·ąĻĻĻ^éD† eB`įĀ…n žųÕn`d͚5xź©§\>ĒUaaaX¶lŽ{ļ=PøĄ«—:ž ^ ×ė£Üą^Īł(O²”””HMMń |>(¾”––TVV¢¾¾^Hƙ„„,Z“S¦Lkš››QVV†}ūö‰ų7ųļÖÖÖ’-**ņĖ=w!dø***ź°J§ÓmgŒ½ Béœ `fŗüüü7•Ndˆś±ż›ŒŒ %ó nxšĮQPP€ļ¾ūĪ©ćgĻž»ļ¾Ū­k­X±Ā^ŗ~n.YšŃä0”ÓéĘJ’ō ē|ŗ¦ģx$""III~5š?wīŹĖĖŃŠŠąq,ĘŅŅŅpå•WbĀ„ ²sMSSSϳ“H’ō\ppš‹tǟB”·f͚‰²,æĘ9_¦t.„ VĪy†ŃhüXéD†( ]Ó¹qüųq¤¤¤øhŊŲ²e‹[ēŅĻ?~×]wŖ««=.-- Ÿ}öāāāÜŗNSS¢££ķ73ی0ąx„f°zõźdI’īÅ9÷ø TT’““]nįM§OŸFyy9ššš<Ž„R©0cĘ ,Y²ŃŃѲsMcc#JKKqųšaQ’sžK£Ń¼š““CMm!ÄOlÜø±Ą:ī猱ߘØtN„ EœsWoF5øŃh4ŅrīĮjjŖŪƒ¢¬ŌŌTģŻ»<ņ .{ØÕjdffāwæūGK5F…+®ø»vķŗvXುŽ„€ ĆY–gŒŻ @rx‚cĒŽEjjŖß¬Óᜣ¾¾ĒGkk«Ēń“Z-fĻžÅ‹#<<\@†®ihhĄĪ;… ü9ēkkk+(**²v€BˆpÜh4deem±X,ė<@¹-f‚\üWrĪ—Ę掏'@\c’fŁ2šÄ4”EGGĆh4ā·æż->žųcTWWƒ1†¤¤$ÜpĆ ˆ‰³yĶ 7Ü`/Ąµ €8ƒį*Īłœók=šĻƄ ššŠŠŠPAzĘjµ¢¶¶•••ön’ Ƽyó0ž|Œ9R@†®9}ś4Š‹‹ńõ×_ éW Ą#‰‰‰oQ'[Bŗ·_żĶŹ•+_S«Õ2ĘīįœR:/B†™żV«uyAAĮ%;§-¶sõÕW+™düųń0 ^‹ÕUWõ~øųRĒłĒĀņ”éõśŸxĄ––TVV¢¾¾^ČŌų„„,Z“S¦LėjkkńłēŸ£²²RTČćœó{iąO!„»OĄŪŻ_LÆ×ĻbŒ]Ē9Ÿ`ßļYKˆ’⌱Ēņņņž t"ĆŠLū7?ųĮ”ĢĆmœs:tĒŽƒŁlFBBęϟ­VėRœ––¼÷Ž{(..ĘéÓ§1jŌ(̘1+V¬pig„––äååįƒ>@mm-T*qÓM7aõźÕ qõx‘²²2üõÆÅöķŪqźŌ)„††bƌČČČĄ]wŻå“Łßééé½Ī蟊måŹ•1jµśAkDx/,, )))˜0a‚«S½ęܹs(//GCCƒĒ±cHKKƕW^‰ ”ł~ų!āćć/yĢÓO?ßüę7Æ9oŽųą‡Ē†„„ ““Ō«³:L&BCCķæ{[ŃÕצĻŽ?FØ ČĢĢL‘ełz/ŹŠŠBrr²ß4éeuuuØØØ@kk«Ēń‚‚‚0gĪ,\øŠ©Šhœs|õÕW(..2ƒsĘŲnY–ļŪ“iÓ)B!~­ū¦G€K6ꉉ‰Į¼yovä4Y–ū z, c°X,=EY–ū z8ē}Š öל8ēčģģµ5°æč`ŒurĪķÅ„6ι‰16 @° ėœ°S«ÕlÜøń[ !„!b5|öńõģ>I’zÖ»ŗ6Ų]‹[·~óšsžg6›Ł{6cL²Z­=ĖDU*ÕHŽ\ŌŪi³Ł:ŗÆep”ē…ĪΦīēĶm¬Óéę2ĘŽ‡øĮ%ē|™Ńh<.(X<ŗĒh“&MR8ē;=ų€#GŽą…^Ą3Ļ<Óēy›Ķ†G}Ō„kæžśėxšĮ1{öģ>Ļ?ūģ³.mm~įĀ<÷Üsxłå—:Žl6ć¹ēžs)×cĒŽ”°°:Ī„ó\‘˜˜Ų»0 ZXµjUŗ$Ieł:OcI’„ & %%”””"Ņ¢±±‡‚Édņ8Vdd$.\ˆĖ/æ\‘] l6<ˆ’’477‹É9ēXOo\„BcŒ­rpbcc}•bšššœ¹ūæż7ŽhąłśI †k8ēļ5msæÕj]^PPŠčųPā”Ğo/}”Ÿyé„—\>ēĻž3ž|ņÉ>ŅKJJPUUåRĪ9 ū:::šĻžÓ圊ŠŠšŅK/9µ£ŁŽ;ÜŗAłī»ļzµŠÆp4 ]½z ūĄš5kbm6Ū£kæGmųÕj5āć摔”¤ČŻšĮœ?ūöķóx;昘,^¼X±­üĢf3öļߏ;wāĀ… ŽOpLfŒżC’¤‡6nÜčŚoB!d˜Šét×£«qį%5JH'lēLO$Īy™Ćƒü”N§[É9Ļ…€%®ĄŪąę‚‚!̈Cķß ¶FŽ"n:²mŪ6—Ļillđ#Gś¬‰ß·oŸ[×ß»woŸĒhkprĢ ŠŲŲčŌ²īļ¾ūĪåųšķ·Ž„ÜÆp×’õa[ČČČŠ†„„üĀf³= »śk4Lœ8©©© ””XĒ÷hš‡%K–`ņäɊ4/4™LŲ½{7vļŽķÖ?ÖČžąĮ¼¼¼"B!CŲŽˆ‹»čsā°tīÜ9G‡4nŚ“©ĀŃAžH§Ó=Ą{–¹v{]­Vrrr,Ž%‚ō¬Ć‰‰‰šĢ™3Bā\Jkk«Ū½ Nœ8ѧpōčQ·āTUUŁ{|čšjļ®C‡aٲe;pĄ½6b§NBkk«×f’÷[Ź5ŗ’ėò`0~Ā9 ½¦Šø#((ÉÉÉHHH€Zķß’«.µ­…#)))X²d‰bkŒŚŪŪ±k×.ģŁ³GHĻVĪł›Z­ö±œœœS"B!C™Į`XĢ9_:Ų1*• ćʍóUJŠįœ;œĄŠw’™N§ū=cģ17$$$¬ĻĪĪölz)qUĻ€mōč‹Ęnnōū’܇Ą{g›nŗ©ē±»wÕėėėa±Xzz‰“··»“³w‹mmmčččšZ ßĻ͘žÆū÷ØÖE:n¬$I8ēĪ·@HH’““§Č4xW™Ķf—¦öH’„iÓ¦aɒ%нٷ¶¶¢““ū÷ļw©9Ē ,’$m’ełI£ŃčŻ2'!„2„pΟvtĢųńćéłćkēĪsøż ē|—Ņ"##C¶‰s~» œ1öX^^ŽÅ#®é½sŃŲĶ-žģ ÕŲŲčp€Žkų]Õ籨>$žÄqv©·æöhč÷s3lg0N§—$é8ē—Üwב°°0¤¦¦büųńŠLƒw—³Ūü©T*̚5 ‹/¾č›Æ477£““ģŁĀĒœs3€×T*Õęęę:œÓG!„ƒĮpēüśĮŽaŒ9½Ķ×PēĢ@H–å>HEˆµk׆vtt¼ćčļŲfŗ¼¼¼7Å#®ė¹-,jėm]Ā įįį}ūĖ–źĪš×ž)żžŸ^ōC4ä «WÆN–$)ĄÕīīē…””ÄÄÄ ©æ3Ķņęϟ%K–ūEāŖsēĪ”øø‡ņøQa·NI’^Q©TĻęääx¾A*!„2Ģdddh9ērtÜŲ±cū|ąkNš'Mš“ĒŃAž@§ÓķččųĄ,A![¬ČĻĻ|Dām=ūaŠøū[óņĮ ű˜æé÷ssŃžŖCŗ`0tœó ps‹“ččh¤„„)v7\GMóT*–-[¦Čr†ĘĘF㫯¾5šo眿(IŅļrss©-!„r aaaė8ē“—’’ā‹t׎ŽīĢ¬É­ŁŁŁžOQō2ƒĮÄ9ß @Ō_ŽiĖóóó ŠGÜ×3`³Æg÷ ŖK柛‹ŖHC² Óé"cåœßęĪłaaa˜>}z’‰C–£QQQ>üŸ>}eee8|ų°Ø’I’ž?žü‹ŠŠ:D$„B†+ƒĮ0™sžßŽŽ‹‰‰Add¤/RRœ3Ó’cś čtŗ¹œó÷ˆiTrĪ—Ęć‚āĻōŒŽ”/Æß €”_čīdū:€WĻ Āäɓ?¬*aŽ ¾,tŌŌŌ ““ĒŽƒ»K2zcŒ5Łl¶ģöööæ éH!„ gYYY‹ÅR x°ćc˜6mš²RžŁb±|ģ‹\Üe0®įœæ 7gæ`æÕj]^PPŠ((ń\Ļ3A7ŃH€é×čō¢®§C©Ąōzż“œógøŌj’1†¤¤$¤„„łżv~®²Łlččü†ø/ µµµ())q{ļĪœaŒ=Ÿ?¦āB!žĀl6?Ć›ėčøÄÄĀYūo2™pöģŁAįœļ÷灰N§[É9Ļ ź¶šgŒ±[ hI„ˆ9į IDATé¹į%h§,`śżÜ\“Uܐ Æ]»6“½½Żą’¹znDDŅÓӇķō6gvšf ¢¢Ÿž9Nœ8!*d=€ģÖÖÖü¢¢¢Į÷é!„BHƒį:Īł“ŽŽÓh4HKKóEJ~”®®ĪįĢDĘŲ>JĒe:īĘŲ D­é|]£Ńrrr,‚āqØ@<Ņo{ų‹~ˆü¾™™™ŅŃŃń7ĘŲtWĪS«Õ˜-*ģqĪłĆF£ńŸ¢B!D§ÓM᜿ 'fJN›6MXƒ±” ¾¾Žį1²,ońA*®bz½žyæsCBBĀśģģlš_īŸ:{¾éģģ8BŌļēę¢"æ.čtŗeœó7Œrå¼ččh¤§§#8xŠ„oƂ£õ’Œ1a›Ķ†#GŽ ¤¤gΜ“1ö•$IlÜøńs! !„tĒwŒbŒż@„£cĒŽ‹ųųxdå.\ø€–‡;¹iÓ¦Æ}‘³222“aaa›8ē· ÉcåååżAP<āĶöoĪ;§ddˆśžūļ{?lź’ŗßt:Ż:Ę؟8ēNÆ÷—$ S§Nöwż{s4 ""Āć æŁlʁPVVęĢس¾T©Tk7nÜø[T@B!$ †°ī®š©ŽŽ ĀĢ™3}•’pęīwƒiæŃ½üu ēü:A!Ķtyyyo ŠG¼§gōÖo GˆSśżÜ\ŌüÄ Ģ`0<Ē9Ģ•“ĀĀĀ0{öl„‡‡{+/æäĶL&<ˆ’’§–8©Äb±¬{żõ×’%* !„ز²²‚ĶfóūŒ±…ŽŽeŒaęĢ™5õŸsīLŸ"›V«õ›±N§ŪŃŃń!cl– ­VäēēoxWĻ€- mmmJ§ą“¦¦‹n®ū…~ O/ś!ņ«@VV–ĘjµęrĪW:{c ˜6mT*—6ņ8ēhooōw ­­­Ų·ovķŚ%jķēœ.ĖņŚĶ›7B t#­Vė?cK9>)) ±±±ŽNĖÆœJiPƒ!‰s¾@Š §,ĻĻĻ?((ń¾žu¶§NłÅ„WõߝCTcqO–O8;棙ŁEJč·åéEė¶ż¦`ŸźÄszŖ“J„¬Y³0nÜ8o¦ę·ŚŚŚīźJ ¹¹eee8pą,!MaeĪł{*•źįÜÜÜ !„¬Zµj“Z­ž;ē|‘3ĒĒÄÄ`źŌ©ŽNĖļTVV:s˜_L’×éts»—rÄ Y)IŅõ¹¹¹å‚āßčłĢ\S#ęć³'żĄœ™]ķh‡ĮōŸåąī ]­V Iś÷&žlż>bħŽ?~¼[ńƒ‚‚¼Ś«®ŖŖŖ÷ĆźžÆūE +++¢½½żĘŲĪž‚9sęܔ’ŽDķŠŲ؈ŅŅR>|ŲaAĮIV’§Ńhõ—Š:!„2\¬Y³f’Ķfūˆs>Ł™ćķĖ$„?’]SSš››Öl³ŁŽõE>ƒ1 ×pĪß&(ä>«Õść‚‚‚FAńˆļōŒŽŖ««…ŒŠŠrūÜQ£÷bŽŽ†$In#®¹ęš>Æ»ī:|ņÉ'.ĒIKKė3čŸ={¶Ė1ģ/^ģŌq ,Ą+Ƽārü‰'"$$ÄåóœÕÆPÕ’uÅ YYYf³Ł„Įtt4.æürh4o¦ę÷­’ŸpāÄ ćŲ±cUīz1ČÕh4’™““sQĆ B!„x&33ó ›Ķöwc9^«Õbīܹł™©ß‡ąKÉ-((PtѱN§[É9Ļ ź/é3ĘŲ-Ž?(t]}BkkkaµZ=ŗ› W^y%žž÷æ»|^XX˜SˆFŒ±cĒāäɓ._cŚ“i}O™2Åå0yrßzh\\¢¢¢\^ 0zōhLœ8Ń©cēϟļRl»+®pzŲė–^æū8˜ õĀ—²²²",ĖVW’ÉÉɘ7o^@¾‘õēh@hhč€ÓKjkkQXXˆ×^{ G1ųļ䜿`6›£óóó×ŅąŸBŽéõśūeY.“ƒFƒłóē{õN“æźččpf0b㜒Łł\ŠN§{€1¶ ‚’Œ±Fsc^^ ž‡¶ć`±Xpüųqƒõ;+11Ńé)ł×^{­ĖńGĖ/æ¼ĻsW_}5""īfz‘›o¾¹ĻcµZ+Vø'##Ćé?sjj*ęĢ™ćņ5ī¼óN—ĻqÖŁ³gŃŲŲ3ń§ĄE ć+Ų’ę9svżśõ}Öą;ć¾ūī»hvĆȑ#ńŲc.m‡iÓ¦į¶Ūn»čł§Ÿ~”””NĒ ĆÓO?ķҵ’š‡?øōē¾ęšk°|łr—®įŠ~?/žš(Ņ6?+++Ųb±|Ą©y’$aöģŁHHHšrfCēß~ūķ kmRSS‘ššŠżė_xēw°gĻœ?/dŒŽĢ9*,,lENNĪ' 7B!Ä VÆ^ż#•Jõ!c̹E©ų÷ąß™µ»ĆQ{{;:äš8•Jõ‹/æüŅēMŠ322“óēĻ@– œ1öX~~ž3Ū·o²¦“(.Ąu@׌öżčGÓjµhllĞ={\:'??ßéžcĒŽÅłóē±k×.§ŽŸ1cņņņܖtĮ‚Ųµk—SM""Ó¦MƖ-[ö'Šh4xė­·\¾£Ÿ˜˜ˆˆˆ§ś¤„„įƒ>šź¬¬æ’żļŲŗµgĒĻw|Ö’ŸĻČČČPY­ÖB œ9Ž>}ĶŻ.‹ĆUgg'¬Vė Ēœ={/¾ų"Ž}÷]œ9sŃī8 `]BBB“Ńh|įå—_6‰J!„¾²²²"ōzż«’$}Ź›äģyZ­óęĶ ŲĮ?g—7~™››[ģ‹|z[»vmhHHČ?9ē· ięœß‘——÷Ańˆč¹s{š ˜³³³‘’āüī’’Ÿ½;Ŗ:ūž;w–’@H¢&$™ ›Š‚ā‚ÕŗÖŠPŌVÅø€$w&!±±Ōķ­Kūś¾ikmÕZ*¶ZBfIRWŠ[QÅ¢""(²ČČLČFd™$$3sĻūĒ$ycĢləÉ$y¾ŸÉ̹Ļ=@ĢÜsžsžóūß’S¦L źO?ż4rssż¶›9s&Ö¬Yću ¬V«ńöŪocįĀ…>ćLš4 Ÿ|ņ fΜéµĶĶ7ߌµk×"==ŻkN‡uėÖᦛnņŪ÷žÜ’żXµj•×ń*c wÜq¶lŁ2 #ڃŃgņó›~ūŅōs?ƒĮP ĄHc­V‹Ė.»lTWś÷¦¾¾[¶l ×ķŖ8ēgdd¼ZXX(ä˜B!„|_AAAģ©S§rĪ’@PŁŲŲXüą?éńR‘Īįp`ćʍL,“X,Ƅ£OŻdYNfŒ½ąA!n³X,ėü¶$ĆM<€Ņøqćpāĉ×Ū”C‡pĆ 7ąĄ^Ū0Ęšč£āÉ'Ÿš}žõÆį·æż-vļŽż×ń‹_üæśÕÆĪ‚oÜø+V¬ĄĒŒŚŚZÄÄÄ`Ö¬YČĢĢD^^^ĄGöµ··ćå—_Ę{gC‡<'cN:óēĻĒ¢E‹ŽćKkk+Žzė-|ōŃGØ®®Ę˜1c0sęL,X°ēwŽ ćbźŌ©(//ļł@yß6a0 OųM mišļŪįƇ±gĻžÅ眃1vH’¤M&ÓxŖHB!$²²²ĪS«Õłœó»żš“€Ł³g÷»œv4پ}{ Å’vėõśóƙŌČĪĪž"IŅZxČEؕ$i¾ÉdŚ)(‰<ߘxöuūŹr£¹¹O=õV¬X†††ž×cøōŅKńūß’~Š[ŗėׯĒ=÷Ü#4øZ­ĘÅ_< cģHdźSˆŠk“Odeeéŗ~šł]“Ö]µ–’¾Õ××ćäɓ¢Ā)Ž•$éWf³YČŁ€„Bł®ĢĢLmllģ-īp5ē|PŪ0ćāāpŃE!.NŌørx«ØØč¤#EQžaŚÖ(Ėņbι €FPČc·–••ł>šŒėįyN—6lŲ§Ó FŌ·‰zU’€µŽŚ…t 33sŒJ„z,y’$ ³gϵēÕ¢¶¶Dccć c1Ę\^朒·Åb©|ļ!„Ņ—Ńhœ snpś`ć1ʐ‘‘éÓ§ś%’Ż:::°@9ŒMV«ÕėC±H²,ßĒ[Aõ¶cejµ:§ØØˆŽ^=źģpqss36oތ«Æ¾zH:ŅŅҲÉʖ–TVz†":±±±ŽÕŲ؈Ļ>ū¬§XąĢ™3qī¹ēŠź*ąČ‘#X»v-Ž9ʦL™‚Ÿüä'>O‡={öĄfė9Õ“Ą·ŽŚ†t &&f%€ i;kÖ,$% x܈Å9GUU<(jŁ’)Īł?4ĶŠŠŠŽ‹H!„’WXXØ®ØØø‘1vē|»‡óĻ?Tńן={öĄéō;.VüWŗĆ Ćӂļµ\§Ó=@'1Jļøšœļ® —Ė«ÕŠŅŅRlŻŗˆŠŠĀ~š,^¼²,ŗ˜ßڵkńōÓOć“O>ŪķąY ~Ķ5׹ŃG ŖįŃ£Gńė_’ƾśź÷~œsĪ9xā‰'pĖ-· ŖæÕÕÕxą°jÕŖļm5’$ wß}7ž}öŁ!ϾóĪ;½æō9ѲSdY.`Œż=¶ēž{.&OžŖ® Kn·v»åååhooŅĮū3€æ˜ĶfZ:F!„–›››ęv»—Č ¬š–$I˜:u*¦M›I2—0b;v [·n äŲæb‹Å²$”}ÉĢĢŌĘÅŕpĪļ’xŲb±üYP<2ü\`;¤„„Įf³…üg@EEn¾łf|żõ×^Ū̚5 o¾ł&222‚Žļt:ńóŸ’&“Ég»‚‚<÷Üs~'¶lŁ‚Ÿžō§ØÆÆ÷Łī¾ūīòeĖĄXšĆß}ūöaΜ9ØŖŖņŁnҤIŲ°a&Mšō=kÖ¬Y½’Ķę³…¤_!™ČÉə”(ŹVcüµĶČČVÕr$p¹\8räŽ9‚ŽŽ!cOÄÄļųüóĻ H!„ĀĀBÉn·ĻķŖäaėņ£££”Óé ×ė…œQ=Ņtttąć?äyé„F£9+”+ bŪŚŚV3Ę®²“sžmµZ_ _L€O?żW\qEČnT[[‹K.¹¤gI¾/éééŲ¶mĪ8ćŒ ī‘››ėwšßķŽ{ļÅßžö7ÆļWTT`öģŁ8~<°’µŸ|ņI<öŲcµķÖŅŅ‚ .øåå嵟9s&¶mŪ†ØØØ ī3ū÷ļĒŁgŸŻżåq)\ŽŚ ß<&Ėr4ēü}ĘXšæ¶ øšĀ 43Ņtvv¢¼¼;vģ@]]]ĻR˜Aؖ$é~N·xٲe›·nŻ:耄BńČĶĶ=ć¼óĪūESSS €_8 ‚–ś'%%aśōé8’ü󑔔Dēf{±sēN455Ņō“ÉōiØś!Ėr²Ėåś1&jdę`ŒŻl±XŽ ogø ƌƒnø!d7Z“h¶mŪPŪęęf:twŽų‚—÷Ž{’õ_ļŽŁ¶m®¼ņJÆ+ŗ,Y‚/æü2ąxŸ~ś)-ZŌ6Ŗ?żéOxóĶ7nģŲ1$&&āŅK/ ųšĮśŪßž†?žøūĖxĒGsń+dY~‘1ę÷œŠ1cĘąŹ+Æ ėģH$jooGyy9ģv»ˆA?8ē³Z­Æ!LUn !„Ń";;ū"•JuēüpĀQ ¢¢¢žž½^±cNJ ;bŁl6ģŚµĖo;ĘŲö–––¬Zµ*$‰ģģģ)’$­0UPČZI’ę›L¦‚ā‘įļ\» >>UUU!łńõ×_cÖ¬Yŗī¼óĪ Øķ5×\Ó{ ¹sēbķŚļoiÆ««Ćĉ”(Į•ĘųĶo~ƒ'žx" ¶œsčõś€VDōvī¹ēb÷īŻA]3PŠ¢`ҤI°ŪķŻ/żĄF_םR–ełę@’Ż’Góąæ„„‡BUUU ūÖń$IO˜L&Æg>B!$xYYY‰jµZ†§š’™‚>·ĮCBB222œœLūūäp8°wļŽ@šŗEłyØ’²,ĻfŒ½‹N» ŠaI’ęšL¦C‚ā‘‘a€-.mllÄæžõ/dee æÉ[o½5ąė™hjj¦M›‚Ž’Ÿ’ümmmߛōųšĆƒüw_耯nzšx “ž8q A_¬uėÖõüąw†EŲ@NNN‚¢(/ŅvęĢ™£öøæ“'OāŠ”CØ««1šWüK’¤?ŃL1!„"Vvvöå’$Żą6ι°Mų:nŠG^F.— _~ł%\.ÆŪ[{pΟ“Z­­g’Ńh¼ŽsžQg£ms¹\7–••Œ,E.€¢¢¢L8p ¤× tµsgg'Ž=Š3Ļ<ó;ÆWWW šœØcĒžæc]]]X&V®\ł/Ą pan·ūYĘX²æv)))Šét¢n;,pĪŃŠŠ€Ć‡£®®NDH'cģUEQž“Z­^Ļx$„BHp-Z4.**źNĪy€óEʎ‡N§CZZT*įe˜F<Ī9¾žśk““ų?̈1¶]£Ńü>ż0YœóbA!?dŒŻZVVF§4o^° ĄųĻ>ū Ū¶mĆģŁ³…Ž ³³s@×Z“|05ßś»vĢæµęūĢö‰Į$¬Ćq\kyyyļ㒜¬\'dĄh4žˆsžķÆŻ˜1cpžłB?K#ŽńćDZwļŽ@‹ŌųÓ ĄąĻf³9ųõ(„BéWvvöE’$åXČ9––×h4˜8q"ōzżØ]ż(ŹĮƒĶśµXTTTäōŪ2H²,ßĒ9_Au“cejµ:'}%#J+€bĄ³Ļ>‹W_{@DzzzHÆKOO‡J„ z€V«Ejź÷OUķUõ>(Į\—‘‘ńćĒ=ŽKII śt„X¶lYļæĻWŌrŻ 'ņņņĘ:ĪbųłAČƅ^FŌdid;yņ$öīŻ‹'NˆwĄßÜn÷ņŅŅŅ !„Ń®ėč¶»$IŹēœ_$2v||<ōz=&NœHUüØ©© f‰ņCf³yæą.0ƒĮš4€ĄK˜ū·Ül6ß*ŚLó€_Ь^½ČČČüśėÆĒ²eĖ‚¾nīܹµ?~<®øāŠ ‹žčG?ź7kÕUW!)))ą#»-X° ą¶Z­ ,€ŁlźwŽygČO¹khh€Õjķž’ųK ×ŗg²,?Ķū•ævguÖ÷önŒDŲ»wÆØā~Ռ±æDGGÆxį…"śG!„Œv²,Ļ”$éĪłŻĘ‰Š«V«1qāЬ£©© ›7ohß?€5‹å§8ØĪĢĢŌĘÅŕpĪ?ļĢ7ąa‹ÅņgAńČčń€…€ē¼¢¢"aŻn7Ī?’|ģŁ³'ąk¦OŸŽ]»v<ɹvķZüä'? Ŗ_6lĄµ×^Ūļ{żė_ńĄ묳ĪĀ7ß|TBŚf³aƌp8Š%$$`ß¾}8żōÓ¾Ē@<öŲcųӟžŌżå:ó½vP²,OcŒķ†ŸcpāāāpÕUWųź¶GŽĮ·ß~č”/‡8ēOĒÅŕ>’üóm¬!„BˆW²,GK’t;ē<ĄEʎ‹‹CFFŅŅŅ(Ū/˜ĆįĄgŸ}čžäĆn·ū‘«%»V‰¬fŒ]/(d'ē<ŪjµŠ]æMF‹sģ ©T*ģŻ»Wh‚õ³Ļ>Ƶ×^Š’oZ­7nÄe—]Ō=ņóóžøXŗt)–/_īõ}EQpóĶ7ćß’ž·ßX±±±Ų“iӀ¶£æõÖ[ČĢĢō;ʋŠŠĀš5kpŻu×}`?~“'Oī]Åļѽ ŖĶ\P`ŗæv³gĻŃgڶ¶¶būöķØØØŠq½|Ć{XÆ×ßó׿žõĖ­[·†äŲB!d“eyŚ…^ų0€2‹ l£k’$!%%3fĢĄōéÓ1aĀ„Ÿč·ööv|žłēspĪē”””Tˆŗæ,ĖÉ.—ėCĘŲ‚B:c7[,–·Å#£O=éG©Õj\sĶ5xģ±Ē¼.ū÷fĖ–-X±b>śč#ŌŌŌ ..3fĢ@ff&–,Y‚ØØØAõšü\zķµ×šī»ļ¢¢¢Œ1Lž<7Żt233ĆRėīšįĆ8ēœszOŒ^ąÓ`b č±°°Pm³Ł¾‚gŠWcĒŽÅÕW_="—Ćuvvā믿Fmm@ÅūƬaŒ=m6›7 ģ!„2*eggOQ©TK8ēĀ6`2ʐ’’½^ÄÄĐwķ:::šłēŸtÜ_—ßY,–’uY–g3ĘŽpš å’$Ķ3™L‡Å#¤@ą)†la½@566bēĪ8~ü8’’’pĮ >>^č=ZZZ`·ŪĮƒN§Cl¬°CXF¤[n¹o½õV÷—ļųY°1ō f4ļįœæčÆŻÅ_Œ”””Ü"¢ŠüćCŻ'"O<ńDļĮ5€? 4VP?ädYŽfŒź«^ÆĒyē7Š>EĪ9vķŚ»Żģ„MŃėõ+E-M#„BF›¬¬,$I¹Œ±EĘ>ķ“Ó ×ė‘œœL{ū‡Huu5vīÜĢźŹ}®“¬ž †g<$ V·å‹å~PagzWĮsücŒaćʍa©BOĀė›o¾ĮÅ_ÜūxĘ[¼9ŠxA­`ŒåĮĻą_„Rįģ³Ļh"Ž¢(Ų±cjj’·ƒ IDATj‚ŗŽsž®¢(ł„„„U!ź!„2beffŖbbbęČgŒĶĆ .ī-** éééŠėõ#ś˜āHĒ9ĒŽ½{qųšį`®9¢(ʜŅŅŅAž333µqqq%œó;« š°Åbł³ x„ųó €"łœsÜ}÷ŻųśėÆ1aĀ„”£‹/ī=ųƒüA¬č:Rēü̼O›6mÄLøŻnlŻŗĒę²VĘŲ}f³ŁŖ~B!#UVVVjÆlæĻ-‡Į`Œ!11±'ŪļėlizŲ¾};‚¹ģØ¢(ה”” h?fo±mmm«c×6V—NĪy¶Õj}UP ‚¢(8tč8΃Ś/ģ(½ģģģ)’$­0u°±ŗŌJ’4ßd2ķzĄc0fĢlŚ“ ^xįw‰ ”ĶfĆÅ_Ü{%śJx&-  £Ńxēü_mŌj5~üćC«ÕŠčאįœćĖ/æDmmm —øüŹb±, a·!„”°°P²Ūķ×qĪóÜqG®A£Ń -- z½qq¢Žq'"œ8q_ż5G°—®s¹\ Dõ'ĖņlĘŲ»Nl¬.å’$Ķ3™L‡Å#d04>pL:Ū¶m££‡”ööv\qÅŲ±cG÷K{ü€SOŚĄ9Š_›ŒŒŒa?ųÅĒĒ÷dū)«YEAmm-ģv;Ž?ģ>’nõŠ¢ÜURR²ADŸdY¾s¾ AŌ½ņ£“«ę“SP/@qq1¦M›†‡~xh{Eü2›Ķ½’š[ü~~ęååiœNg%€3|µ»śź«‡õģ{ss36mŚ·ŪHócœóė¬Vė7”ī!„2Œ0Y–Æ–$)Ÿs~ €(QÕjuO¶üųń¢ĀAŚŚŚ`·Ūa·Ūƒ­ģßוJ•Y\\|T@·˜Į`xĄCbu[n±XU „„Į3ž š¬ÖžĒ?ž¼žųcæ3܌±µf³y>Btö"!„2TŒFc€»ąų_$2vLLLO¶_«ÕŠ M8qāl6Ŗ««…fū4qĪ’©(JQiié.‘ūĮ Ć3s¹Åb¹ōÜGFŸ[Xѵ…F„Rį‘GAaa!­Ų@Q<óĢ3ųŸ’łtvöœźw žÕ–”ź×÷VhµŚėącšxŖ’G»wļäÆžY1ś „2b † įō/„øżŅ$ ÉÉÉŠétHJJ¢l„q:8zō(l6ZZ„Æl’Ą —ĖõJYY™šĀ}effjcccKÜ!($gŒżŹl6?+(!ĆĶšTŸ_ `†ŪķʓO>‰õė×ć„—^Ā™gž9ÄŻ¾jkka0°vķwN‘Æp€­CÓ+ž¶ĢõwQrrrŗZØÆ÷_Ļ…sž”Åb9†.B!!µxńāµZ}€<³EĘ;vlO¶?**Jdh"ĄÉ“'{²żn·[dhcģ·Ū½¢¤¤d»ČĄ¾͵µ­ j}r'ē<Ūb±¼*(!ĆÕ?š Ļ’õ /¼æūŻļpß}÷A„ņ™&½pĪQ\\Œ‡~½ßś7Āp̟?ߛ`ŒłüĮ:vģXÄĘ Ū&6‡t’K9:ņBȰ–››;]Q”lĪłĀJī3ʐ˜˜½^””ŹöG—Ė…ŖŖ*TTT ¹Yx ć}œó•JµŅd2ÜY–“ŪŪŪßgŒ‰*Pé`Œ-°X,ėÅ#døk°Ą{ž`|kk+zč!¼ņŹ+X¹r%fĶZvD:pąņņņšńĒ÷~¹ž-K’@„¬0’Ī'wvvö¹’$ķöu^ÆĒyēŚ^ ęp8šŸ’ü'¦7Y,–5”ī!„"š,ĖŃnbŒåøNdģččh¤„„!##ƒŽŠŠ@---°Łlج¬„Ėåŗƒ1ö€"³Łü”ČĄŹĪĪž"IŅZS…¬•$i¾ÉdŚ)(!#M3€uæ R©——‡ßżīwHJJ²ŽEŖęęf<ńÄxī¹ēzļõź¾B!",]ŗ4Ŗ„„委ķ}*++a³Łąt =±®w¶†x©Ŗ,Ėsc«!®`å67˜L&’”!€ Ą»šL,ĄNž<‰|łĖ_š›ßüF£qTžųāv»ńņĖ/ć·æż-ŹĖĖū¾ż&€į™H‰Hߣ`0*¤ykœ€Ė/æ<äiĻž=8|ŲoM捋åGžB!C©k«^€,ń¢āvgūu:N?żtŚŪaEéÉöŸ8!vū=cģ€"µZ]RTTt\hš2Yœób¢Ī!ū€1¶Ąl6 ?QāRšƒŽ/źõz<šĄČÉÉ–5ā‚uźŌ)”••įŁgŸÅžżūū¾ż €ū|žž§ē^–å ĘŲ_§NŠéÓ§‡¾W‚(Š‚õė×ū!gŒĶ5›ĶT†BHÄé“ķ’1śLŽFTTŅÓÓ”×ė1vģXQa‰ ŻŁ~»ŻŽw_é`u2ĘŽF„dū{“eł>ĘŲ2ˆū>/Õh4¹EEEB—K2 1·(pvļ7&L˜€üü|äēē###cŗZ555(..Ęß’ž÷¾KżO¦’÷JĖżūÓóĆÕ`0Ü  ĢWćK.¹gœqFČ;%JUUvģŲįÆŁW‹åBDЇ!„’••u¦Z­6rĪs­ŗ”””D•ü#”¢(Ø­­…ĶfCCC8śxRÅū§$I+..>*2°Ģ`0<OµlQ–[,–ūAĻx„ˆ¤p7€ĒL鿆$I˜3g–,Y‚›nŗiXop¹\X»v-Š‹‹ńī»ļöW`µĄįŁ*!t†6ŌzjpĪ/õõĄƄ ĀŅ)Q*++ż¶aŒżōĮ@!$Ȳ-IŅEQņcW‰üEGG÷dūioäimm…ŻnE¶ßĻłÓ+ōzż………ŠČą",]ŗ4Źįp”øCPHĪū•Łl~VP>7Żt2331wīÜa1 ( 6oތU«Vįõ×_GmmmĶvĮsTb)€Saķ  =’$Ķņõ 3,žįŗuvvāųqæ[ŁźŌjõ›įč!„ā,ĖÓ$IŹįœ9ē§‰ĢŹS¶?rqĪŃŠŠ›Ķ†ššŃŁžjĘX™Ėåz”““Ō.2°H±‡ć s…ģe6›_Ņ?žÉÅų!€{Ü` 466¢¬¬ eee?~<ęĢ™ƒyóęa޼yHMMŗ^÷QWW‡uėÖaķŚµXæ~=śkÖ ą+ ɑØ"u? 0ƒĮp>ŽJKKĆ\ž^ `³Ł°k×.Ÿm8ēĻX­Ö‡ĆŌ%B!¤GWÖóVy®†ą½ż::ŽööG ¶¶¶žlGG‡ČŠnĪłZ+Z[[ß[µjUDļGĶĖĖKq:ļ˜%(¤£«ŲÕu"dhÄó=`1€K¼5š2e .æür\~łåøä’KpĪ9ē„%Ńģt:±’~lŪ¶ ›6mĀęĶ›ńķ·ßśŗäk’„'Ū,ä VšœsĪĮ”)S|5‰([¶lA}½ļ“^E™QRR²'L]"„B Ėņ“®‚~Łw¾9ą“ÓNƒ^ÆGrr2eū#Œ¢(Ø««ƒĶfóū|2ÕĢn·{e$gū{ĖĪĪž"IŅ:ōŁC<µœóŸX­ÖÆÅ#„ Ī$xŠŽą"ų˜äV«Õ8묳0cĘ L:“&M¤I“––†¤¤$$$$|Ó¦¦&Ō××£ŖŖ GŽĮ‘#GpčŠ!ģŁ³ūöķ d‹Õ.«¼ą{„žG‚ī-~g^Ē÷ŗ8 āøŻī@ŽÉŁCƒB!ᐙ™©‰‰łY(+łėt:ÄÄĈ KimmEUUl6Nŗ]Tšē¼H«Õ¾5œŖÜēää\¢(Źˆ›+—$ižÉd:$(!dšŽxŖė×ęų €u}ŻĆåraĻž=Ų³§’”™J„Bbb"bccĮC|ü’Ÿ‚ŪŌŌEQŠÖֆćĒ÷W¬ĻŸ¬ķśiR…S€$I3żķ;‹‹‹ K‡Dhhh€ŪķwÕŪźpō…BČ蕝=E„R-įœœ.*.c ‰‰‰=Ł~I’D…&tWņ·Ūķ8~üøč½żĒcxŽš;,2p8Ȳcl<ņ„ŠjµHKKƒ^Ƨ½żØ„„6› UUU!ŁŪĻ9/r8’ZµjU»čą‘ ;;{ŠÓé\?õ„Å9Æ0ßjµ~%"!„Œvjų©TĢƒV« SwƵÕ÷ź9Ęe’ !„ō+///„³³3‹1v€ ‘±ććć”Ó鐖–•JŲ|@QŌÖÖĀf³įųńć¢Ć7xĶķv’½““t—čą‘$''ēEQÖ8MPČrĪłÜ’’’rAń!dŌSĆĻéį4ų眣£Ć÷éœs_ĒKBe233Ućʍ›§(J¾ÓéœĻ6:×h4=Łžįv¤īhŠÜÜ ›Ķ†£GĀåŗ8sĪ?•$©HQ”ÕV«uøWņ÷K–å9Š¢¬ äs¾•1vcIII½ˆx„B<ü®ˆŽŽSWļŌ©S~ĻßeŒŁĆŌB!¬;Ū _Q”I"cwgūSSS”V«ż_@Ā&ÄŁžFÆsĪ’fµZG͊C£Ń˜Å9/†ēœn>$iŁlö»Æ“BHpFŌ €@öź¹ŻīŹ0t…BHźŖä?@žÓ鼑1<®V«{²żTÉ?ņ477£¢¢ÕÕÕp:"Cs¬Œ}ćłēŸ÷½q„‘eł>Īł2bŽÄJ5MnQQ‘Š$B!jĘŲ8_Yó‘6 R©„O÷B‰l]Uɍ6›-‚÷öO˜0”'ŪO{ū#‹ĖåBUUl6šššD‡Æēœ[E).--= :ų0ĄŒFćŸ9ē Œ¹Üb±ÜϤ !„PsĪ}– NK™Ńw¹\'ĆŠB!C¬+Ū-<Łž›!ny2Ōj5RSS‘‘‘AŁžŌŲŲ»ŻŽŖŖ*Ń{ūĮŪ Ø„„„l¤Vņ÷géŅ„Q‡£„s~‡ œ1ö+³Łü¬ x„B¼PˆńÕ`8e3ł—$©9 ]!„2DdYNfŒŗ²ż“Eʎ‡^Ƨlr:Ø®®U¶æŽ1feŒ›L¦Q]LX–åx‡Ćń€«…ģm6›_Bˆjų©Ö:œVų+cĒŽ› „ ˜Ńhü1€<ĪyH²żz½ćĒ–Ņķ?zō(Ün·ČŠ €8ēE­­­oÆZµŹ’>Ć®k+Ķ{f ŁĀ9_`µZ?Bˆjc}5i—Ė„ u!„ˆ±xńāÓÕjµ ĻĄŠČŲćĒļÉö§ÉšŃĄårįčŃ£°Łlhn»°s^#I’€Él6|“ełl§Ó¹€^D<Īy €łV«õ+ń!„F ?YI’ĀŌ•šhooU„–BČŠ`ƒįGņÜ @XµZ•JÕ³·Ÿ²ż‘ēäɓ°ŁlØ®®žķgŒ­P¤ŃhÖPśļŹÉɹDQ”5šsrTŹ9ēsKJJŹÅ#„ •Ņdµ‚Z­  5ō½!„"’,Ėń’$ŻĪ9’%€sEʎEzz:ōz=4a»ˆ”¬äߕķ/PDŁžž †Ey ~VŒŠs¾•1vcIII½ˆx„B‚3ź&8ē1čC‡B†‰ģģģ‹$Iʰ˜s>FT\I’œœ ½^¤¤$Qa‰ !¬äß³·_«Õ¾EŁ~ļ C6€•WSćI’˜ĶęAń!„iDM²G“1– "ä!„2`YYY‰’$e3Ęņœ%2v\\222––F{ū#LgggO¶æ„Eųń(³Ūķ6•––ŚEidY~ĄˆŚ:YŖŃhriĀ…B†ÖˆzņŃjŚ:ĄŽw…BČōŹöß AKŽŹöGŗpTņĻČČx³°°Nņ#33S·œs^ 0ģr‹År?’Ē5B )æŒ ŸšyŃŃŃ~Ū0Ę&†”+„B”“““Ą9Ļāœē˜.2v\\ōz=ŅŅŅho„éčč@ee%ģv;Z[…—ę±0©T*sqqńQŃĮGŖ„K—F9ŽRĪłķ‚BrĪłY­ÖæŠG!dŌ:ᣂ²ą}w!„Õj!IÅēI“ĆÕB!ŽugūE Y¶?11qXMdĒ‡ĶfCMM 8š¦l’ Ȳļp8Žpµ ²­Vėk‚āB@Ķkåœ{¼/¤c3fŒĻLēüģ0v‰BH/yyyć].×]ˋϻ»’æN§ tK “īlæĶfC[[›čšUŒ±2Ę^4™L6ŃĮGƒ¼¼¼§Ół€Y‚B¶pĪX­ÖÅ#„"ˆšsī0Į[ƒį4xż,%<'\}!„āa4/ćœē;ĪŪc¾ IDAT­ä?qāDčt:$&&Š KąœćŲ±c°Łl8vģ˜člæĄæ9ē+322Öś\śG¼ĖĶĶīt:ß s^`¾ÕjżJDSdģŲŲŲž½ż”ķ,mmm°ŪķØ¬¬Ä©S§D‡?Ģ97iµZKQQQčą£MNNĪ%n·{ €Ó…,ēœĻ-)))Bˆ`j>ÓåĆmĄøqćü5aQQQ—X†īBČØc4/īŹöß FT\I’’’½^„„ŚŪAEAmm-ģv;źėėE‡wx›1¶R§Ó}HŁ~1dY¾IQ”W!Øžē|+cģʒ’į߄BÄQhōÕ ££#L]#>>>f?MBˆ0±mmmwI’”Ļ9æHdlŹöG.‡ĆŃs|_ž(V©T%ÅÅÅ>—ö‘ą †l+ˆ:cV«½£ØØHxB!b©9ēu¾²(Ćm`ģŲ±ŠjµčģģōÕl€’ S—!dÄŹĶĶ®(Jv{{ūĘX‚Ø}Ž‘VɟsŽÓ‡ī?cß>õž³uC©;Ūo³ŁŠŠŠ zocģEf³yčÜxįdY~Ąˆś&-Ńh4KŠŠŠœ‚āB !5c옯~҇1†„„ŌÖÖśjv Õ „ÉĢĢwē<ßķv_*2vLL t:ݐWņļ=ąąõ÷½õ~½ļõ#AKK l6ŖŖŖBńl°‡s¾R„R•™L¦¢ƒ 33S·¼ė!cO™ĶęĒ@5„2l“`ø=Č$%%ł›PiµŚŸx9L]"„aĻ`0œ @ē< żVčĪöėt:$%%…żó¦æĻøĮö”æÕĆés“›ĖåBuu5ģv;Nž>gŽĘ91¶Ņb±lœüæ„K—F9ŽRĪłķ‚Bŗ9ēæ“X,/ŠG!$Lü®<«¢¢¢ĀŃ!N;Ķ1[ĘŲ  BńiéŅ„Q--- c÷øRdģ±cĒBÆ×#===¬Ÿ1݃ńī’†c`>Ü’°ŪķØ®®†Ó)|e÷N+5ĶĖEEEM¢ƒ“ļ’e9¾„„åmĘŲU‚Bv0Ʋ,Ėė‚āB #5c¬Ößž½¶¶¶a5‹±cĒ¢­Ķg-š¹²,Ē[­VŸE !d4’eyc,ĻįpȌ±$Qqc={ū™¬ …īĮx ƒņŽūžūk/x’ūr¹\8zō(ģv;šš„Ė›¼¢(ŹŹ’’’ķ¢ƒ“žååå„8Ī÷̲ĄĶf³łcAń!„„™Z’¤ GżµµµaĀ„ aź’)))(/÷y m€…hł!„Ą³G8&&f>cģ—~ qEĀ““4ddd`̘1¢Ā ćk2 æĮæ·B€½ß &ŽPźĪö=zTųŃæŒ±ķŠ¢££_~į…BƒŸrss§;Īµt"āqĪkĢ·Z­_‰ˆG!dhØ].×ʇ=?™ōˆ4qāD`ŒŻ š „ŒrYYY©’$ŻŻõ31]d줤$čõz¤¤¤DÄ ×[śVłļ[ōĻ[QĄž*’÷÷^ß> õ$€ÓéDuu5***ŠÜÜ,:|€×8ē/Z,,œœœKÜn÷¢–ŁģS©T?1™L6Ań!„ ƒ” ĄDot:Ī?’ü°uJ”>ś­­­>Ū0Ę®4›Ķ›ĀŌ%B‰………źŠŠŠ%IŹēœ_@;::z½:ŃŃŃ¢ĀHƒķŽ5ŗŪō~½ū÷}ßóæ7_«ś ÷$ē °ŪķØ©©¢(BĆų@1ēü_V«õ”Čą$p²,ßÄ{ĄXń8ē[c7Z,–zń!„ -50ʎpνN ǐžžŽoæżÖgĪłĆh€2*äę榹Żī%6›-‡1–*rū駟½^3Ī8cȳż}õ½Ū½’ż]ćė÷½qĪæ· ˜?wøžŽ:::PYY »ŻīwR|Ž(eŒ›Ķęż¢ƒ“ą †l+h…ü·V«½³ØØhx>Błu×øÜ[£–––šōF0N‡ųĖrܘ••u^iié®põ‹BĀ©°°PŖØØ˜ĒĖw»Ż7P‰ŠNN‡±c…${“!ļ;Č÷Wįææ%ž}ß·ż-÷ļŪ®æ¾ų[E*õõõ°ŁlØ««ķWląœÆlmm}{ÕŖU"ƒ“‘eł„øŚ%fIQQ‘šc !„ 5(Šņ­Æ‡¬ŽŽttt «“Ļƒirr2Ŗ««}5c*•źQx BȈŃUÜh³Ł–0Ęō¢ā2Ęzöö''' Ļdū¼RtĻ[vææ~߁½æAŗÆ:žźōGō6€S§NõdūC°zÆ€E„R™Š‹‹ˆN&33S·œs^ *&cģ)³Łü<[;!„Œ Ż+¾ń×°¹¹yȎlŒÉ“'ū›€ŪFć›ĶęĆįč!„„“eł:łN§ó§·Z­éééŠėõˆ‰‰ö{Ėōż ü½eāżļē-Ėļķ¼M0tæŽūĻŽ}žœsŌÕÕ”²²uuu¢Wø¼Ļ[©ÓéŽ+,,t‰ NgéŅ„Q‡£”s~» nĪł/- H&„jÄOL˜0‰‰‰hhhšÕL„(ʃ~¦nBˆPƒį4KL;!!HII$ «ŲĆŪĄ½æAėŽ“Ž–į{»gś«ąÆOŽ öŲ98okkėÉöŸ:%¼ęž1f’$ÉR\\|Ttp2x²,Ē·““¼Ķ»JPČĘX–Åby]PBH„ź^ĄģšCo ĆŅ”PHJJĀųńćŃŌŌ䫣XĪłR’¦nBȀäää$pγ8ēłĪ™Už0aōz=&Nœ•JL­Ą`2ń½ϾŚy‹Ū{pÆ(Ź÷¶ō·Z ÷{¾–üū›„š–įļļxĮ`9Ųķv=zŠįĆAιI­V[‹‹‹ėD'båęęNw:kčDÄćœ×˜o2™¾BHdėžcģ+Ī¹× €––8Nh4¶“†ÕŌ©S±}ūvŸmc÷ęåå=[TTäs¦€B†‚Į`ų!€|EQn-*®F£Ajj*ōz=ʍóŗ,`}ʾöō{›švdŸÆėś«¼ß_ _÷ķÆÆūx‹ßߟ%XŠ¢ ¦¦v» ¢÷öwxƒ1¶Ņl6o{rrr.q»ŻļHrŸ¢(óJKKķ‚āB‰pź^æ’€Ļ ²Ć²¤¤¤ &&ĘßČ N§óA’¦nBˆO‹-u'ēüē·ÜN‡““4!ŁžńėK’¤ļUē÷–åļ/vļÆ}MBx”wßæÆ¾[śöĶ× ĮN8Žž½żĀOŲŪĻ9·0ĘĢ“åmx‘eł&EQ^ ä¼MĪłVĘŲ„„„ō}@!£HĻS‰,ĖÓc|5>묳pę™g†¾W!b³Ł°k×.Ķ*•j*-ƒ$„ „ģģģ‹$IʃēˆRa›š%IBrr2ōz=’’D%æĻ×`¹o¦Žß€ß×=śŽĻW|U÷d[ś›čļzEQP[[ ›ĶŠl’)ĘŲæ™Ķę  l’°c0²滉›Įų·F£¹³ØØHųY‘„B"[ωÕj=d0ŽĆDz²'N„„S”’žžŽżū÷ūŪ?ėr¹š@˜ŗE!€‚‚‚ŲS§N-ģŚŪ”ČŲqqqČČČ@jjjH·r2ļÆČŸ·×Z°;†?żŻ?˜ė‚ŻŠWSSl6Ŗ««įt:¾.@;9ēÅZ­ö%ŚŚ6|ɲü€?¢WŅfJ4Ķ’¢¢"įßp„B"ßw>LdY^Ć»Į[c•J…yóę…äØp)//ĒŽ½{ż5;åv»Ļ¢=q„pey¦$I÷pĪļ†ÓX‚„R©0qāDčõzL˜0aĄq-ā×7“ß÷żīÆż-‹“>€æ¾ųjŪ›æŒ~ Æ÷÷gļ›õļ~ßét¢ŗŗ•••hllķoš c¬Ųl6)20 ÆĢĢLUllģó~.*&cģ)³Łüh!„ŒZßYJĘū€× ·Ū“'O"111ä •I“&įšįĆžĪLŽV©T°8LŻ"„Œ2K—.r8™Œ±{8ē—‹ĘĘĘBÆ×#-- Z­vĄqŻÓßß{Ž&¼e’ū‹ėķŽŻļõ7čīÖ=Qķmé}Ūś.õļ{ÆŽś›`𵕁1†'N ²²ÕÕÕp¹\ßėÓ maŒGGGæöĀ /8D%C£ėēC)€Ū…tsĪi±X^BČ0õ§£Ńxē|³Æ ¦M›†³Ļ>;“½ ±kpI’®”3q !"åääLåœērĪ„UUķ½·?11QČ÷½š¹÷¶4Ž×µ½ ļõ#?‹·{{Ū&Šßż¾¼ļHŪīøŻŁ~›Ķ†ĘĘĘmSš” Ąkœó­V+į6BȲąmĘŲU‚Bv0ƲĢfóė‚āBƾó$’™™©Š‹‹«ēœ{]++Ƽ2ō= !Ī96n܇Ćo’d§ĆᘽjÕ*w8śE™ %»Ż~-€<Īł­_ræKLL t:t:Ż ²żŽųŪkļ-Óßß`¼æ:,óﯭæc}ż¾oß}­čļ÷}õw}cc#ģv;Ž= ·ŪūGČ@&cŪ©ÕźR·‘%///Åét¾q'~4J’ō3JfBéö½§.£Ńų&ēüfÆ0†ėÆæ>$šįTUU…;vųmĒĖ7›ĶEač!d„ÉŹŹJU«ÕK8ē¹REÅeŒ!99Źöŗ·ŽW”»ī÷ū~Ż·ŗqū›@¦?}ćūŗĪW¶Ž×ėĮī’€ĪĪNTVV¢²²‡Ćk=÷š¢@I׎žżĮ\H†‡ÜÜÜén·{-ˆxœóóiu!„Ž¾÷Ä%Ėrcģļ¾.š5kŅÓÓC׫0łōÓOŃŲųģ{xÕ}÷ægvWwŁņ_d[»2° \0¤Iš†”„ōMŌ'˜ŁµQ ęmž¾>oßZn“æM“`cbĖŅJHœ6ÜҾMÓ!8 ×p38`I»’%Ł’‘V÷Ż9ļÖ(ĒGē̬äYiµś}žGĻΜ9ē7gśžnsŅmZ·aē744ĢķW 1#ŌÖÖ---4^Ū¼{mŠŠŠ&¢żłłłS^ļÖĢĻIˆ;5ösKÕ×e ȽTSĪ*ǃ®~_Ü;pźU|²3ò,åw ®ļīīFkk+:;;aY–kC@·g°üŒs¾``ృަ³ˆ˜{„Ćį+< ‡71M‘7S©Ō'ؙ1A!3éS˲žĆēsĪN=vģXN8.¼šBüāæpūCģ,˲¾ Ąœ™]1©®®^šL&Ć---_p¶WĶŻcX¾|9‚Į –-[vʶäćtDæ[ŗ½ŻpĻ­?€źŲ>—kžeļVŠ BWĆÆ›«ė`‹ēCCCŃžĮĮA­ Õ^Óųw£@£ĻēkØÆÆĻm21·1MóSPä…=ĪłÆņņņž¤±±ńøöOų€?žķMøšįY¼Ē>dYB Ą•²ż—¾!ŪÄü£€2ØÆüė)æą<5ŸĻ‡üćšū= lĶ/½ōb±˜ė<ĘŲG£ŃŸ-1‡ˆD"×X–ucģs¦–×PPP€ŠŠ ƒAxeÖQȧ3ϩ˽ӱSĒ1bn7t÷ŗüöX:i’¢ O·Įē]]]hmmEWW×ićn§½Œ“š€ś`0ųƵµµIõÓ¹D$19ēūį]¦Š@ą&ź ‘u|Ąēg{.¼ lļŸĄń]YB@ C¶’ ĄW3d›˜|Ą’V]Pž‡1ö(ēü.µT*…īīn¬\¹Ņ£żĶ6lĄ±cĒ&^ɤƒs^‰D.ŠF£ż3“5‚ ²”H$R ąóœóŪ9ēOµ߉„K—" båŹ•i×öOEÄ;Ķqżb$~:‘~]#@Qō«ÄæS‰€ [Œ;]ķ85ż³Æ#£„„CCC“ę95TŻ_"Ī{в¬½MMMGµ'rÓ4ļ✒4Į˜ip  n#ēAį„ŅĄ9’1­:::rŸŸuėÖįĶ7ßt›äœĄWf`[Ad![·n½Ä²¬Ū8ē›”xe7//o¢¶æøøxŹėӉ¬ŪćrŌÜMĢ‹¶ģTÕ=ķ1·~Ż^u‘©¤ōĖėTŁņ§xsŽĪĪN“““ąųń擄¾8Oµ—Žcžąœļ…B’^[[k„ż0Ĝ§ŖŖŹWRR²Ą—½²ÉŪF’€7µGADĪ¢t466ž*·(×-“£ę¹P°vķZÄćqōõõ¹M½Ó4Ķ755ż× l‹ ˆ, ŖŖŖ°““ōĻ9ē·Y–åiŻß’%K&¢ż¢øžŗŚs‘uūŗÕW‰j]ä^%šÅy*Ū²ÓĄ-B®zy’:Ń­³!GüuNĪ9ŃÖֆX,†‘‘‘Óī)ŚT9D;š{įœ×8ŠŌŌtL¹ "§©©©ÉO$ĶžĢ#“)5Ńhō{Ł#‚ rzēće·ė¦R)tttäD3@Ć0pńÅćŁgŸu‹*Œ±·nŻŗ‘Ž @¹išė ĆŲŹ9ߏ9÷Ŗ37ŹĖĖ …°`Į‚3²åTĻÆ‹ōŪ"Xė²=§(¼˜®Æš£kąēt]7oÆU}Ŗč¾īšeYčģģDkk+zzz&:’«Ź dGŠlKQ"1Ā{œs^×ŲŲų3P„vŽbšfY’cŒ±k=29ĀŪFč‘=‚ b  ßsĪ@ė€x<ž(++Cee%Ž}÷]·©«,ĖŚą³3°-‚ fŖŖ*_qqń'cࣜsϊū.\ˆ`0ˆÕ«WĆķM+ŖH¼ĶtDæ,bŻRōu6ķsqL®ŪW9TŃw¹LA…SVƒNœ«D¹®Ž?‘H £­­m"ŚÆ³/ŪŅ ¶,«‰1֍F»•HĢŖ««WŽ=ąbLž4 ćʆ††§=²GAĢ“€ĘĘʧMÓ|1V©›ÓŻŻ””!ffw3ĢłēŸĪĪN øMżįpų–ĘĘĘ3±/‚ 2K$)·,ėfĘŲ<ój†+V  béŅō“t]ĶvŖ’÷įtyLnʧ›ÆZ';9Tse¦:fY–²Ō@Žö·µµMŌöĖvœĘTŽᙆcO0Ęö×××’ ÕöŲ¶mŪś±±±ŸØšĀē¼Ą'^öĀA1æp*ąēŒ±ļCóś›¶¶6œ{ī¹Žīj–šł|Ųøq#žžłtLķ6M󹦦¦wfboAxKmm­qōčŃO0ƾĢ9æž1ę–Ÿ%%%…BXµjņņņ¦eĆIhŗ5ŹėšUvÓ9V‰z³AŽ³Óžtūщzūŗ-ģęˆc²½¾¾>“µµ!#™LjKÜJ4N˜—9ēõ ,xč;ßłĪūćū”TįpųŹT*õ$ÆŹˆŽ“,ėĶĶĶ­Ł#‚ ęŽü8ēcŽ€£GbŻŗu®äĶ–.]šn)@)cģ_n¾łę«xąה‚ ²ƒmŪ¶-O&“ęŃ£Gæä”į4UcX¶lÖ®]‹%K–Lłw¢.%^ŽŹŪBTŒĪĖvtŽU/U:æ*ņ/b;tµūŖc{žT×Ųµłr•ą€d2‰ŽŽÄćqōööNĢÓÕõĖēŗØ’ųµ~Ć0eŒ=°’ž’ž™Ä?Ó4?ąE™<nhll<ī‘=‚ bāčhjjz'’Ąåŗ9###8vģXN¼Šfżśõ8~üx:oøŠļ÷ļ°y¶EÄpĖ-·\fFu*•ŚĀ+šŹnAAVÆ^P(äX„«uwrØŗ÷ŪkäŅ€t²Tõū¢=yŽSŚ:×ÖØźėET‘xńšx]žsņäIÄb1Äćq¤R)ķ\§tū{ē0Ę^°éŅ„ßß¹sgB~.ų'D"“s¾.gM'ĄMuuuƒŁ#‚ ę)éü©ąT@.9 ĆĄ„—^ЧŸ~z"āäĄēĆįš3ō ‚Č2LÓ,cŒmp€õ^Ś^¶lB”–/_žÖ|•XžJMæx®ŠÜėę:­Ó„ś«Īö#>‹ģLpjž'£s ؚłÉ £££hooG,Cæ2ßÉąt½†a·lł™Ä}øEöE›:A/~n ųĘĘĘ&^ߗH$&­“3·œRżåēŠ ąĆ0ź÷ļß’–ā98NEvIŌŌŌä'‰fę‘É€šh4JŁ…A„§¤U›fYÖżŒ±;įĪfæ W^ œś£š’K.Į3Ļ<ƒĮAē²;ĘŲJß~ūķ›īæ’ž„ćd‚ <#‰œ Ģ9æĄāé4šSį÷ū±jÕ*„B!,X°Ąu¾IWEßm”īV³ÆEæ,ģUcŖz~]ƒ?YģĖāTĪ Uš¾jÜFéé¦ćŪüŪŪŪ‘L&'ĶO§_€8.8,ĘŲ/ż~’CCC677Oś…ĻNoīG⟘Ą4ͲžžžĒc×zdr„1¶%žŠ#{A1AŚõiįpųg>ā4gķŚµøą‚ ĪxSŁĘūļægŸ}6~`Œ=ZQQńŁŚŚZz’3AdˆŖŖŖ¼’’’ĻrĪoóšn@YYB”ŹĖĖįóżžĶ€:į+GåeA.ĻUįV»/Ė"Ü-¢ŸNō_e_~>§cūU}ŗ”{qĢ)ź/Ś™Øķ·£żöu{­ź¾ŗˆæķļ`Œ5åēēG÷ģŁó»I›„łĪTWWÆ{ €W)' Ćø±””įiģŁĮ÷|~¶7įĀūŹfńžł†gńžé’ȐķšÕ Ł&ęß |›_ŚŻi9ēßeŒ9:ZZZ°nŻŗiæ÷:[Yøp!.¼šB¼śź«®s9ēŸiiiłwe~g1æŲ²eK…ßļ’ē|+€å:A=Uü~?ŹĖĖ QVvśß?ŗ”|§Č½ī5yņ¹[4Ž©ž_åpŚ›aŹgŠŻß­¾_~&]ä_ž£Ė {oo/ŚŚŚpģŲ±ÓľSDß­ę|,Å9’·@ °’²Ė.ūןźźIÕ¤h?A(ٶmŪś±±±ŸØšĀē¼Ć0Œė^ńĀAAؘŹ_Ļ,æ ąB§IgŸ}66lŲpf»ŹR^~łe“µ„]ā_ÓŲŲx_&÷Có‰Džˆs~;€ųܤKii)‚Į Ö¬Yæ?=Ø*Å_…a§½·^^oė nćN£@eW÷Lnµż:±­źi Ū#öö|˲0::Šx<Žx<ށeD_U: ÷$ĒĘieŒ5G-ZŪ¾}»RąSğH‡p8|%€',õČ䛩TźĶĶĶ­Ł#² Źp‡2(€š–3ĻĄ©hČN8Mzļ½÷PQQ’’’)˜žlÜø‰D½½½éLæ7w766ž Óū"ˆ\¤ŗŗza2™üsĪłW8ēžy ĆĄŠ+ ±dÉGo# a§rUš¾“ų× ÷tSY+ŽSĘͱ”ŖĶWĶ‘ÓšU)ž6'Nœ˜ˆöė¢üb€“M)s!Å9’/ŸĻW·jÕŖG·oߞ„&²OQ"]LÓü€GąŻF{d ĖaÕ IDAT‚ “LÅ€`0ųČŃ£G’Ž1V©›cY^żu\yå•g¾»,Ć0 \~łåxę™g044éP“¦h¾å–[Ž8pąg3°=‚Č "‘Č9ē·ŻĄ³®¢EEEƒØØØ˜(SŅ XUj:ķ›ģ5Ŗ1§ś;Ķ_'ÜU÷S }·ŖŌ~U€[ æœĪ/Ļ•#ņŖkĆĆĆhooG<ĒąąąD-æV+ʎh,,,lڽ{÷±;v@ń'ŃOL•H$brĪ÷cŠ?9šD ø©®®Ī¹Ó0AAxĔ h#‘Čœs×Ōö+®øĖ—/ŸŽ®²œ¾¾>üāæ˜čBķBæeYxąĄ2½/‚˜«˜¦Y`ĘMćiž—{e—1†åĖ—# bٲeœ#ÜŖˆ¼jžTŅźÅc§ō}ūXž#÷ Š„õėöäŃ·ēčĪķō|ńš,īźūåĻ'N µµŻŻŻ“jū(ĒTēŠ}rĪõł|ūOž<łó .ø€Sš?į%¦iŽÅ»Ē+{œó¦P(tkmmmZLs*p‡JØ€šOJ–e50ƾ `­Ó¼×_gu–c¤l®²`Į\rÉ%ųĶo~ćAPjĘæmٲå#ĶĶĶī] b±uėÖs,Ėś€ē|±Wv PQQ`0ˆ‚‚‚Ó®9‰zUC<]C?y¼N՘OU ’ŽŌ]wjÄēŌ@5ß~y½ųüŗæ*½_tŲiųāw3<<ötUU‡¾¶Ÿ1mjjjņąœWyd2…SM‚æē‘=bn@īPeŽā]455=‡’€?rš÷öŪocõźÕ“"p¹Āڵk122‚#Gޤ3}™a’‰D>Fgzo‘mÜ|óĶĖü~’V_āœ½²&¢żÅÅŧ]sō²˜Ņ«ķw‹®ė"÷r æųcļA¼æ*ƒ@W­ŸM\ć–©¤ŠīŪkUŻ)`hhķķķˆÅbÖ¦ö;9TĪ„ńyopĪ-ZŌü­o}«ß±cƒ$žĒE’¤q‚˜ ¦i–õ÷÷?Ę»Ö#“#Œ±-Ńhō‡Ł#‚ ˆ)s&Mlž'€—įąK„Rxć7pé„—žĮm²›óĻ?###é¾pēü?MÓüpSSÓ;™ŽAd·ÜrĖՆaÜą³8åį÷„… ¢²²åååšłŌoL§Vß0 ­@N'b/ rU¾JČĖū°:eŲ:įÆŚ·Sšæ[}½*•_Lõ×qĪ£żņ=änż*ǃ}nĘēüG………õ÷Żwß³°cĒ`\܋)’R“ŸÄ?1mŖ««WŽ=ąbLž4 ćʆ††§=²GAÓ⌊!Ćįš·ü„Ū¼«®ŗ gu֙Ü*«įœć…^@GGGŗK:S©ŌĒ©'‘«Œ7õū3Īł_ų€WvÅWų-]źžśm9Ķ_K·DĄÉ _ׄō»]w²©źKąVÓÆsü*±®š+;FFFĒ‹Å044tš°O'Ķ_“oqĪ›‹ŠŠźwķŚu8%ü©›?‘i¶mŪ¶>•Jż@…ö8ē†a\F_ńĀ1'”wØ€Joіœ‘ ŗŗzįŲŲŲŪ–9Ķ+..Ęu×]§Ņå©T Ļ?’E§€ˆj\·g'g…9—Æ„ćH7Õ``ńxķķķ09¢ŸnšæbĻ/ų|¾żEEE?ųĪw¾ÓP“Ÿ˜]LÓ¼‹1vWö8ēM”PčÖŚŚŚ¤W6‰99Ü!9oɬĀįšw|ÅmŽ…^ˆŹŹJÆn›µŒŽŽā¹ēžCŗK8€æmllüz·EÓb¼ßĒ-¾ Ą³ZŸĻ‡Õ«W# „•äÖĻ-’nŸ«Rü§RĖļ–ŚļåW½y@UĀ ;—Eµ.Õ_Ws/7åNÕöwvv"OŌö»Eśm[Œ1ķ}ǟ·Ļ²¬‡‹‹‹÷ß{ļ½/įtØ©1+Œ—/ŻĒ»Ķ+›Œ±ŃhōÆA’ž§CwČ@Ā[“Ļ¢w………344ō§péšūÖ[oaŊi„öĪeņņņš”}‡J·€ųūp8¼:‘HÜqšąĮT†·H®˜¦łĘŲ—ĒĘƾ Ų+»%%%…BX³f ü~żÆ!]|:)ż¢ąV ~1z?”/©ę؜ ŗØæ._žg m@ßUß­ž_®Ł0ķļččĄčč(R©ŌióÄæŖŽ_¼7€Cź ~øiÓ¦ŖŖ*µą'±DĢ(555łpĪ«<2™PFæē‘=‚ ‚Čžęā‡Ćį<į6דּĪĀ•W^™ó„L&q芔©¼~2::śł‡z(ķ‚šŠń?Œ?Ē9æĄ‡¼²ĖÊ+PYY‰Å‹§•Ę/×¹«D¶n}.ÆĒUsŅu8­•ÆéžM‡-öŅż§Z×/Š~;Ś‹ÅpņäɉµÓMó÷ą$cģ”ĀĀĀż›6mzm\ōé'²Ó4ĖcŲä‘ÉĘŲ–h4śCģ¹eøC”@xKę3 ±±ńÉH$rŠĶ£ŽŻŻ––„B!/oŸ•ųż~\uÕUųõƍīīīt—}2??’בHäÓŃhōp&÷G6vSæD"ńeø¼Śs*äēēc͚5…BŹĢY(«„±.e^Œ“ŪērdßžTͯɶåy?Ŗµn©žNNOQ=iŽnSĄĄĄŚŪŪĒ1:::Iō»½ĪOµĮ9ó¢ßļߟ——÷ż]»v%€Sµż>‰~b6‰D"åœóŸøŲ#“' Ćø±””įiģADFń<ošę vź•NŽ^DŸĻ‡kƽ%%%^o!+±, /¼šŽ;6•e'cUŃhōē™Ś1æ©­­5Z[[’x<Ś’I†Ūšt`Œaɒ%…BX±bEZ5śb“ß)z®Zėwš/ŠuU=æźXe/½Ė ņ5§ō}§1ńSNĒO&“Ńž¾¾¾ÓDæ[šæn?³ōX–õ ß﯒ŲĒ>ö†ķ§¦~D6²mŪ¶õ©Tź§p)ULĪy‡a×G£ŃW¼°Gä4”ąePį-™o(bšę­Œ±:·y‹-ĀÕW_=/J€S0’ö·æEKKĖT–ųJcc#Õž±eĖ–%~æ?Ā9’€³½²ė÷ū'¢żé8÷䨿Ī9ąvī”ŽŸNæ|¬»¦ŗ.fˆŻ3‰B[•ęŸŽČ׉vqN"‘˜čä?66ę˜ę/;5ó?ęžaŒ5œwŽy’üWõWC‚ß~NžÄ¬‡Æš$€„™|3•J}¢¹¹¹Õ#{DnCwČ@Ā[fÖ€SÆ ū9€ėÜ&žžłX·n]†¶‘¼óĪ;8|ų°c °‚@ąvz§0q&Œæ²óv Ą+» ,@(ĀŖU«¦ÜŌO%žÖ¦ūé6G%źķ,§RłSŽ·įW9dį/«„½ÓuفL&qģŲ1“··£··WiOvꦂŠh7ēü¢¢¢†M›6v©ķ'ĮOd ‘HäӜóGxÕ}ųP ø”®®īøGöˆÜ‡ī€„·ĢLĪ97cÆ(ušxųša,[¶ .ĢŠV²uėÖ”°°/æüņTœ·Œ]±mŪ¶ĻÖ×׿™Éż¹EUUU^qqńŒ±j˲>ę•]Ć0°bÅ ƒA,]źT“…æ\·ļ$ž¢ņ*ń=ŃÆūŌ•ˆ÷³ėūåµāÓŗt¹Ö^Ÿ/“ŪÉ:ŗ»»ń›ßüÉdr*ĖŽēœ›MMMfj_Dn°eĖ–U>ŸļĖn…‡MżŠŠŠ ±fĶäēēOŒ«Äø8®ł²hVEŻås±±žS æhĻ)å_åT÷!ÆwŚæˆ*ŠoŸ; oYØ«ÖŚŽ®®.Äb±IŃ~Ū1 jź§Ūƒ4ŽÉk...nøśź«8ÕöS“ŸČVLÓ¼‹1vWö8ēM”PčÖŚŚŚ)żO› @é@¹Égüx¶7‘×ųélob¦Čxń}8~Ą nó‚Į 6nܘéķd‰DæśÕÆ0000•eĄnĪł]MMMsį—%1ƒlŻŗõZĪłœó?…‡Y>Ė–-C0Ċ+牂U%˜Ó‰ö;‰śtėųjųźżŻĘäō{U:? Ž®Ė)ūnĀ\µf``±X ķķķ öŪ×tū‘Ę,ĘŲĻü~żŠ+ß¾}ūØščō ?bĪPUUå+..¾1v›W6c;£ŃčŻ^Ł#ęäp‡¹ 9²L•LL&·śżžßĀ%ŁŅŅ‚%K–`ÕŖU™ŽRVQRR‚M›6į…^˜Źk€æ`Œ}tĖ–-››››_Ķą‰9@MMMžĄĄĄŸsĪæjY–WÆ·‚ßļĒŖU«°vķŚ‰¦~ŖHæ,~ķq§c°—ē¤Õׄ“ęļęE·ī„6šŗņÓ)õ_·Ž÷]]]ˆĒćčķķE*•šķŸjŗæĄ1Ć0š ėļ½÷ŽwpĶėūHģYĻųļĀøĖ눧@ @M4„F¼ADN0#ķ÷MÓü cĢÕū3ß^ (Ā9Ē[o½…#GŽLué0ēü¦{3±/"»‰D"kTsĪ·Xā•Ż²²2TTT`õźÕŽ„9N©żr€=Oi—Æ;9äT}§h?0Łi`É{L§TAåWE÷mt©ųā˜źxppķķķˆĒćü:Æ—÷9ži1Ę~Ī9Æ_³fĶ£6lsØķŸ4FŁČęĶ›åēē?`“G&G8ē7755ōČ1” w( 7” €,dĘŽægšęƒŒ±/øĶ[°`6mŚ4©w¾ŠŅŅ‚×^{ķ“Ę_éĄ{Ō0ŒŪźėė;3“5"{`įpųćīšIžüĒāół°jÕ*„B!mSN9ņ- ÷tS’¢÷¶ ø—?Ӊų‹öT÷uz>ūXľ&§×‹×Ӊš«©T ŻŻŻüķhŗiž:ēĀųy;€haaaōŚkÆm•š'ŃOĢ5"‘H9ēü'¼Ź€:iʍ O{d˜ßĄrä&äČB2^`3::Z“ŸŸæ @…Ó¼¾¾>¼žśėøč¢‹fhgŁE0DYY~żė_chh(ķuœóϤR©«MÓ¼ƒ¢¹É¾š…yyy&cģĪł¹^Ł-..žhź———§JŸ$čEqœŽ°v›7‘ļ–ąd#}Ŗž_¾¦Š²«œNiųņµ”””‰h’ČČČi×åW÷Łc*'„}]ČH°ü{ ØūČG>ņÆRUUU\ÕŠoüū įOĢ)ĀįšĪłSpłū"]8ē†a\ßŠŠšŠö‚ "›˜± ‡Ćš_HĆsvŁe—”¼¼<ć{ŹVFGGńŅK/”««k:ːJ„īhnn>įõ¾ˆ™gŪ¶mė-Ėŗ“s~3\^«9–/_ŽŹŹJ,]ŗt’ŃEÅU×ETÆÉS„Ų« N©żbʁ›SĄiĢķT)ōö±,²œ–µćę ×tww#£§§gBčO÷~’żĆ0š 6mŚtt<Ņ?éU}ĀwJŸ˜s„Ćį+< Ął]¤éóf*•śDsss«Gö  €t  €Ü„2²u@8ž€nó|>6mŚ„ŅRĻōΜäšįĆxēw£’ŽØillüQ¶Ed˜ń.֟bŒŻą£ščæÕ@ €ŠŠ „B!*…Æ,ŅEĮķ†[¾8O%ܧ+ö Ćp¼—ų); ä²U æ[T_—zÆģĄ©h<G{{ūD“_%žÓ b&€xįÜbŒż,ģæāŠ+ž0Ms ćMżčõ}D®‰D>Ķ9@”G&źźźŽ{d lČą9rrd!3īĄ©śåG|ŚmbQQ6mŚ„¼¼¼ŲVörüųq¼ōŅKžśļEĪłæś|¾;Z2°5ĀcŖ««ŽŽŽšŒ±’ 䕯’’ƒATTTĄļWWžøEśå9NēŗŌ{y,~ńX.#ŗ}čūčjõåO1@—śÆļééA,CWW×iüÉÆņ³Ēœö ķc·Œ§ń'N £»»[[Ó/7÷Ō½¤}ēœ7ēēē×ļŁ³ēšĮƒ™®©Eū‰\b¼4ź>ĘŲm^ŁdŒķŒF£w{e 4Ąrä&äČBf5¬‰Dī朒C:s?š`͚5™ŽŅœ ææ/½ōŽ’żé,ēöł|wÕ××Ē<Ž‘ÕÕÕ+GGG«|‰1¶Ņ+»‹-Bee%V®\©Š»‰d]Żæ“€×}¦[³Æ[#6TķÕé9eœ„¾ST*ŃžŽŽÄćq MŖė—ļēŌ'@į|xĄž+®øāŸ-Z4b7õŪ±c³…æéēœ3Šś¹DMMMžĄĄĄœó*L¦cwF£Ń½Ł#'Čą9rrd!³WĻ"‘ČæpĪ?ć6Ń0 |čCĀ¢E‹fb_Yēļ¼óŽyēIiĀi2ąžD"ńOL’}ƒÄ“ ʝ> Ą“ʆa`ÕŖUج¬ÄĀ… •sœDæ8G7ꣷ÷ [§«ĻwJļ—æ[ŠæX† >Æ8&«®ÉöTkdŃ/Ī;qāŚŚŚpüųńIŃ~¹©Ÿ“šW8z_ŻŚµkųµÆ}mĄ¤4b>cšęUŒ±'ąõĶT*õ‰ęęęVģÄT €;äČMȐ…dLÓü*cģŸŅ™»lŁ2\qÅŽuĶóĪ9āń8^żuŒŽŽž‰©ßqĪwŲ×ŌŌ4~!Ļ·ß~{ÉšššfĪł.ņŹnqq1Ö¬YƒP(„@ąō’×čD’T"żŖčŗŖ9Ÿ}¬’éŌśĖ÷’ē9=› QL3ʔĀ[Ķ9@”G&źźźŽ{d ¦ 9Ü!@nB€,$ėŌs8>`K:sƒĮ 6nܘįĶMFFFšĘo §AÕš]Īy}SSÓI¶—˜¦¹Ž1v€ŗß4X¶l*++±lٲI×ä·2ń\”—ķčŅų§3®ūņ}ķ’7ģ5v ½=ę$øŻÄæĪ9iüĒĘĆÅ_Œ5kÖĢĄĪę>CCCxūķ·ŃÖÖ¦MŞ&#žįœ?ą'MMMoyiÜk"‘ČyœóćŌ«ū>ŠS’ņŒ… N¤łĖÆÄœ…æ.m^ż·›é©ī£ś*ĮīT ļÉ)Ś/ŸĖ’މ‘}Ń) GąÅļÉÉ  ‹Š"‹”£££££“Rūu]mæ°×a?ņł|ū÷īŻū Œ§ö“š'w"‘H¹eYO1Ę<éäĖėµ,ėʦ¦¦g¼°GCwȐ› ÉzD"‘-œó&¤¹ß7" fvS9ÄĄĄ~÷»ß”­­Ķˌ‘.æšcģ¹žžžf«#sUU•ÆØØč|ĘŲuģT£Éė¬šś>†a`åŹ•Ø¬¬Ä¢E‹N»& cų—ŗT{•M1Eßi¾Ją«Īe‡ƒÜ8P¶­zF™3‰ņ‹ižņńēųńćˆÅbčé陜Ŗh?€IÆō÷„pfŒÕ-]ŗōo~ó›'ż1ĀįšOØšĀē¼Ć0Œė£Ńč+^Ų#ˆ @wȐ› ™ˆD"wšSļ„wŻ3c \p*++g`g¹ĆČČŽ}÷]=zŌ«:Ęšēü Ć0ŽdŒ½1::śŽ<0ąÅ jjjņūūūW†q.ē|#ēüĆ0.āœo€wļ–žDAAB”***Ÿ’ūDYHėRäU8„Ł‹ē6b·~łŗNšŪūQeČcr¶<_D’*±/Ž»ÕŲ;Eś`xxńxńxĆĆĆŹhæ*ĀÆ’Ņłˆa?u{öģłļƒ²ŖŖ*NÆš#ˆ©ašęUŒ±'Ln€2=ŽH„R×777·zd 29Ü!@nB€,dĪ8 ‰ü/Īł’Mw>½`zŒ”„„---œéŪ'Ä9ēŒ±8€~}Œ±缟s>į™`Œ•2Ęüœó ,°§"śgĶŌ†cX¼x1B”V®\©M‰—#é*įļäpJ·W‰tÕ:Ū9 ļEu¬;—÷%?››čŻœnŽą”ļķķE,Cww7R©ŌÄø.Āļōź>)Ūąē|’ņåĖ|ą8n7õ“¾ū‘įpųFĆ;'ģ”@ pC]]ŻqģD¦ €;äČMȐ…ųݧdŃhōĆįp!€éĢė­·L&±~żś ļ,·8ēœspĪ9ē «« ---čģģōŗO€Žē1ĘĪuQņŚ“’¼¼<¬\¹Į` .œŽøļt"ęŖk:į/9„ž«éÜĆ-Ż_|>§rD]sį¢P·»üŪēccchooG,ĆąąąiQ~§Ś~§ūŽŸ†ń˜ĻēŪÓM7żüĆž°œJ󉂘įp8  ŽżŻńx"‘øi¶ŹÉ‚ b®2§2l"‘Č=œó»Ņ_YY‰ /¼0“[Źy†††ŠŚŚŠ¶¶6 ĶĻæ·lń¹hŃ"TTT`åŹ•šūżŚ(ø[Šæź\\g©Ęšü©Ä¼[ €Ī–,šeńÆžNŃ|ń\%Äcʚ|ŪŠ×ׇX,6ń ?•ą—£’ŗ½H{@}AAAÓµ×^Ū9ķŃOéż1uLÓ¼‹1vWö8ēM”PčÖŚŚŚŒÖŖ„‡P€;”›P@2'‡ļšéĪ_¹r%.¹äų|¾ ī*÷ᜣ··ńxķķķķ-eĘņóó'¢ż„„„ć"²čwŗ.ŪW‰|@-ōÅ5ā±Ź9 Fś„¾źzŗõż¶`·×ØRžU"\\céźńĒĘĘŠŁŁ‰x<޾¾¾Óŗhšµż)?ńł|ūŖ««’ż²Ė.KŁ—äē„h?ALŖŖ*_qqń}Œ±Ū¼²ÉŪFļöŹAĢäp‡¹ 9²9ėĄ"‘Č·8ē_MwĮāŋqłå—#///“ūš7pĪŃŻŻŽŽtuuaxx.üŽvFŗ………X¾|9V®\‰%K–8¦ģ;ٱĻåŗ{y®[ź¾*¤—śÆZēVß`’@ĪfŠÕĪ;Eū娾˜I`;ģń””!“µµ”££cccJŃļä÷%pŒsŽXXXø÷īŻ-ā#ĖßEż bźŌŌŌä'‰|Ī#“)ĘŲŃhtÆGöb&!€;äČMȐ…ĢeĄ4ĶæcŒżŸtē—””ąŹ+ÆDQQQ&·5ļąœ£ÆÆ]]]čźźBooļ¬Ö秃J¤/X°guV®\‰²²S’T„ŗ«Är:)żNć@zµłŗTŁ®S6lOD•źÆĀIčŪ"^ž§«Å³,ĖBww7b±z{{aYÖiµżņZ§Ś~Å^Ÿöūż{Ļ;ļ¼GWÆ^=JMżĀ{6o޼(??’1›<29Ā9湩©é Göb¦!€;äČMȐ…Ģ©&€*šššžÖ4́tė ‰ž}öY\qÅŠ£ŖkÆæŸ .ÄĀ… ±nŻ:Œ”··½½½8qāNž<9ѝ}¶PEįĖŹŹ°hŃ",Y²K—.…ßļŸ$ųÅŌzUDÜ)Š®źœsĒØ½øN¶!ÆÕ9tŽyߢwūŽDa- |łSŒŅ‹Ń}q­égŒahhhā~###§„ł«¢żŗŚ~Yų3ĘŽēœ?TXXøw÷īŻÆŪר©AxO$)·,ė)½°Ēėµ,ėʦ¦¦g¼°GAó9Ÿ`‰DīąœļFšĻäółpńÅcÕŖUŽŁÜÄMNĒ^?z{{‘H$Šßߏžžž)`Œ! ““%%%X°`,X€²²²I=!dż!ā¹x¬Šą‹‘yń¶SĮõö¹(ąåW÷9„ö;„ųĖūwśē+;AœRźŹŅ) čééA[[Ž?>©‹æ.⯳'ż³yŁ0Œ½łłłļڵ+!>žō}č'‡Ćp*‚²Ę#“ķŒ±OF£ŃW<²G³eøC¹ ed!s>Ą&ī ‡Ćƒöpķō—J„šŅK/”ÆÆ^(‘nDX<ןÖŲĀ[$™L¢ææCCCĘČČČÄēČČ’É$8ēH„R?¶½@ Ę|> Ć@~~žÄOAAĮÄOQQŠ‹‹OµrT[—/ ~qÜMü‹ót‘}ą÷ß)¢Æš§ŗ·ķH° *G…mĖ)µßžtŪņ÷(®sė¼?::ŠcĒŽ!‹a``@)īŻÄ昅`ĻcŒ 8˜ŸŸæwĻž=‡š{qOMż"ƒ˜¦y€',õČä©TźśęęęVģAr@cccc$‰sĪ Ōm>ēGŽA__.¹äj8ŽNü«D§œB®[«›~æ‹-Ā¢E‹¦µW•³ĀÉ!”о«Ö‰su)žN©õNsÜ¢÷é\wr(89-ä(¹ü¬¢ ¶Ēå’Ŗ”|]I€|Ü×ׇööv“··#•JM¬‘Óż2T×cļØ/..Ž~÷»ßķOļNösœŹ"įO‡oš0€BL>>ÕŲŲxÜ#{AAŒcøO™[D£Ńēœ@gŗkŗŗŗšģ³Ļ¢ææ?ƒ;Ė^œ¢öā.\Üŗhķ™”8ķQÜ«īTĻ#éžŪ#šā±øĘ0 åxMķ—ēŪY ŗė²=UOt’ł‰wńXl¾'_—R©ŌiėlqoY’É$ŚŪŪqčŠ!:t­­­ČčH&“§ĶUūömqĪę÷ūoŗüņĖĻÆÆÆß¹hŃ¢n|ūöķĶżc\ˆö“ų' ‡Ća?‚wā’ńD"ń‘ŗŗ:’A‘rĪMMMæfŒ}ˆ1övŗkš‹_üķķķ™ÜZV¢ĪnóÄ“JD;Ķ‘ķ§ó#ļGŽęėģŖžG•Į Šk1k@īŖ=黿i |7'ĪFŗ¢ß¾¦Šģ«ŅöeńoŁ_ś:eYH$8|ų0ž~śiüö·æÅūļæ?!śe”Æ’Ŗ}Œļ·ƒsžõ²²²µõõõß»wļĮŽŽŽ~/ümŃoGż ‚ȦiŽ ļ² ƒĮąg<8ä‘=‚ ‚ $r¦  Š­[·.¶,ėQLńUD«WÆĘʍ'5ˆ›/Č}'±NT_½w›/ŽkŖ÷•Æ;„ꫜøĶ›õ‰stĪ •£D>¶ĻÅ×õ©Ä½*µ_õĻL—ī/éŅķu™N×ķWųÅćqōōōLōlˤ(ž¤’{ļ²}Ć0^ōł|»W¬XńČöķŪGwģŲ[š ß ~‚Č0UUU¾āāāūc·ye“1¶3Žķ•=‚Č2Ø  ;Ō07”&€YHN; ŖŖŖ°““4Ź9æi*ė,X€~šƒ(..ĪŌÖ²QüŠ©ūnĀ[U‹ÆS‹¶u5ł²ØÕķYuM5W¼¦{&ݳ‹ŁŖū8 }łÜv&ČkÅč¾Īį {N±ģBśņ§Ī «½×ĶB{{ūÄ+üÄ,7ŪāMżNhfŒÕÕÕÕ½jźG³JMMM~"‘xĄē<2™bŒŻF÷zd ²røC€Ü„YHN5T1žJø9‰¼Ā9’Ņ,{čėėĆ3Ļ<ƒ7¢¼¼<³›œ%œ¢Üö§ģ°×Ł×Ä“,Ģ„æ¼7±.Ļ“ļ+Šl]ō^ž“ēȯ擿ń»ļ!Ūs’é8t6ņø“ą—NŃ}£Nœ8X,†īīnĒ~ĄéYŖżˆŸŒ±ĄŽ <²sēĪH‚ü{"ĮO3ČęĶ›%‰Ē0Ŭ:F|1žČ#{AAøó€qx4½Ē4Ķ—c#MēŲŲ^xįttt`ćʍrĖį'‹^•(–#Én²čWŁmȝøÕķ_HŸt®{N1Ź.?—uižŖ=čRšÓĻE§‡Ó\Õx:½tå€ZĢ‹kTõUĒņ˜ŖF_üģļļG<DZcĒ0::zšŲ—שāøō,ķ†aԁś={öāÓÓücœsĪģćI_A3F8¾ĄĆ =2ł| ųTccćqģA1EęnŪ#¶nŻz…eY?šŹ:ĘĪ>ūlœwŽy“„č\B%@§"Že;ŗČ¶®@•ą–I äņ±ŹĮą”®/ƑŸÓɉąō=ŹkœæźyUŸņ˜jžķOĒ9püųq“¶¶¢§§'­ŗ~`rɁʮaĻŲµzõźĒ¶oß> jźGYM8؃w‚ljÄēĒóÄ|ƒ2Ü” €Ü„2²y™ ŅŠŠš«źźźĖĒĘĘųdŗė8ē8räŗŗŗpńÅ£¬l6gN°Åŗ[ź; ĻĒd»ŖŌ1@ģv‚ü by‚Źc?ƒ,ŲUŁ :Q/Ūwr.øeAØ¢ Q„Ļ«ęŹéüņ|9J/^™HóRFūeŪétōĒ©?&~č÷ūwļŪ·ļu€šśÄ\Ą4Ķ»Üć”ÉĘ`0X][[›ōŠ&AAÓ`Žg°H$rēüļ1EĒČ\ĶPE  ƀeYi½ĘN•1 i•Š&×ó«¢Ū2NŁņŲTÓžåėŗsłšŹQāVīąöŒā³ŖRčUā^•zƚ+;Nž<‰X,†ĪĪĪӚś9EūuĒŅ3ü†1¶·¬¬ģ‘üĒ’ś$ś "ĖØŖŖņ•””ģš%Æl2ĘvF£Ń»½²GsŹp‡2rŹČBČ ašęå†a<Č9?wŖkKJJpŃEaéŅ„™ŲšēØ"ܲ•lģŌyq®*:ÆBø¢8Ö9TödĮ-ļQ^£sZØŹäõ:§*_Ų}]æhS'ömÄō~·łāq2™Ä±cĒ‹ÅŠ××7)Ś/īEģīÆŹĻcƒœó}o×®]æ”īOŁGMMM~"‘xĄē<2™bŒŻF÷zd ę2äp‡¹ 9²r(ØŖŖ*,))¹@ ¦ń-_¾7nDAA÷›ó§ŌtÕ§-ųķ4x]Z½j½}yLå÷”īsŲ™ n{’÷ē“gū\W įĶēØJäēǜ„¼Ó§tü“··#cdd$ķh? ®ńŽˆÕļŚµė„šųŹ/‡"’‘}l޼yQ~~žć®ńČä€/666žČ#{1×!€;äČMȐ…Ģū*ʛ}%‰ü+ē¼@łTÖwvvāē?’9Ī;ļVEŅub?ŻsŁNOOĻD7{Oŗ7gƒpžbŒż4??—ż ?Um’ųwĮ9ēŒ„?Ad'‘H¤Ü²¬§lōĀc¬×²¬›ššžńĀAAŽ’Ź4‹ ‡ĆgŲ ąLgżĀ… ±qćʬkØJ_—Å­Ną‹éžb6€8G>VeˆćNē*Į.?ĒTRśuötYé¢{@O'Ņ>•Hæż3::ŠŽŽÄb1 žęŒÅæ˜ęÆŗÆtcŒ5ÖļŚµ«8ÕŌĻ®ļžYŲ'ˆ9@8Ž€S5™lO„R×777æź‘=‚Č(ĄŹČM( !@š˜¦YÅŪ `łT×2ʰjÕ*¬_æ>kŹtõė²X։ńS•ąępJŸWŌ—+÷/«ŅóUūŸS申tūŸIĢXÅēI7µ_ē3 äļéż÷ßG,CGGR©”6Ś/ŚRŻ_“9¾’OĆ0¾wŃE=YSS3z…AĢyLÓ¼Š1ö$€%™|Ą'Ū<²G¹9Ü!@nB€,„SĄ4Ķ2ĘŲNÕÓYļółPYY‰uėÖMJWŸiD+7T9 Ƙ$ųuYN%*a-_sš§Z#ŽÉĻ%®sĖ$°×‰×d'J“Ė‚ßŸJ?„0wʰÆuuu!ćųńć“Ö¤R)å~TöÅkś<’——wßż÷ß’š}ķ'ˆ¹G8¾ĄĆ =2ł| ųT]]ŻqģŽSйQö9„¹!§ 9Ü!@nB€,„Ó ‰\Ļ9ß  b:ė pī¹ē" z¼³ōŃE՝źęåČæŹ9 ݲ#@¼§œ ‹śĖ{•S’åēŗ{;}'ŖLĮ¬­ū—…¶›ĄwJń·GFFŠŽŽŽ¶¶6 ò¬IŁŖqoŖL‡-Ė:PVV¶ļŪßžöI{ŗš‘ą'ˆ9ŒišĘŲ>x'K$ŸļCd/’ࣳ½‰4ųߘķMdrøC€Ü„YČÜyi}FŸ½ˆs¾@jŖė‡‡‡ńꫯāŁgŸEooovØFŽØ;„øεšNõņŖ²Łq`|>ßı˜EąółN[#;ģė¶ ŪN:Ł ²M]‰€ü}8EłÅT{qܲ,¤R© q.Št{\t ˆóS©”ņø»»/æü2žūæ’‡ĘĄĄ’Éä¤ūØī+ŽGr $9ē’>Z__æ! īüö·æŻ‹SŸÄ?Aä¦iŽÅk€wāæ1 ~ŽÄ?AAĢ(ą ‰D"°—s~ŁtÖ3ĘP^^Žõė×£°Š«lĢōīk‹O¹ĄĘÉā±Ŗž_öN„āżeT™r†€8×Ķ !_S„öėĘ5ŃqPŠ}ńXuĶ^#Öń;„å‹ūƱcĒŠŚŚŠD"”u8ø‹NŒńóc–eÕÖķŁ³'ŽÓÅ>Äs‚ ę.UUU¾’’’=¾ä•MĘŲĪh4z·WöˆŒ3W2ž€ÆĻö&2eøC¹ ed!s”,«‰F£æ©­­½¢µµõ‹œóocŠ •8ēÆi›ÉžNQm± ž*->h¹}—q«Ėēü÷µüņŽtkäõn÷‘÷.7dzjčUižŗņńSU6`Ÿ"#cttt"s@ž§ėąÆŪ§a/ś|¾ŗņņņ Ū]ü…?Aä555ł‰DāAŸóČdŠ1vg4Żė‘=‚ ‚ frx@mm­ ¹ŗŗś’ż¦įåM„R8räb±Ī=÷\TTTøÖĮ{SŻ»˜ gčr½½\‡/ĻqŪ“*RÆKŁ×5ļ“÷ģŻO'r.^ÓEłmq/ŽGõ·±×Ÿ8q---8qā„ņ5}āėŅ3 2ƾļół¾·oß¾—Å×÷ ß ‚Č!6o޼(‘H<ąLŽųb4ż‘GöB†2S ‚ 2 ż¢ĶįpųJßšÓµQTT„sĪ9ĒsG€“pW5Ō“ÓüÅŸĻ ½ņ•]'Ē€JœĖóTć¢šW•ČNń{±?u‚P§’»eøeĄŲŲ:;;ŃŚŚŠžž~m–€Źé {†ńļłw©TŖ”¤¤¤~×®]“:t“č'ˆÜ$‰”[–õcl£öc½–eŻŲŌŌōŒöˆg®”ü-€æŸķMd*p‡Jr*ČB( 466pµišŸcŒ} Óx[Ąąą ^}õU¼÷Ž{8÷ÜsQ^^īÉŽT)ņ² …¹,\Åqy¾,®EŃm§ńŪ8•ØīÆŚSö‚*Ź®łŖg‘Ļe‘­žŖˆæ[Ąąą Z[[Ē‘L&Ór 8=Ē8€Ÿ†Q÷Į~šĒ)ŠöÄü!oąœ’”1¶Ę#“ķÉdņśęęęW=²G:(0E‘aȐ9xSSÓĮŪoæż©”””»|Óxēr?^xį=zēž{.–.]źŻ]Rįœ&ÜU‚SYw;–:'€®Ęß­Ž_•^ÆK’×½–OnÖ§öŖqÕ5ń¼«« ­­­čé陔Ž/G÷uā_ńŁĆ9īŪ³gĻļ߉~‚ČqLÓ¼ Ą“˜b?Žš‰ęęę6ģ³żž'‚  ćÜ’ż ³mŪ¶½–e}“sžELĆĆ}āÄ üņ—æÄāŋqöŁgcłņ垔øŁµ,ä-˚š¶Č¶ĻUvģ’•s@uo7TŽձ찯ė¢é:§€,ŅUNńŽā}“É$āń8Z[[100 ]/©ö'eB¼ä÷ū÷•——?`¢ż1? ‡Ć7xÓp6kx>•JŻŠÜÜ|Ā#{Äģ1åWĻ”@‘aČ0CŌ××ĒlŁŗuė}–e}Ą‡¦c§§§===X°`Ī>ūl¬^½zŹ6t)örć>Y¤Ė‘zU4]t Ų‚_—ĖÄ}‰Č=t D½ŖŸ}M—Ś/¾ @%čåłNēH$ŠÖֆöövŒ&ņåµNQ~q.cl”sžx ØŪ»wļĻä¦~$ś b~ašfĄ>x÷’õljÄē<8ä‘=bv™+‚ "Ɛ§uØ­­5Ę_ųM«ĪÄVii)Ö­[‡ņņņig8„Ł«ŠēN UMå“~ݘ,ņP9Dqü>ļŌ4O• ‹Ä;9•Dµø IDATģ±īīn“¶¶āĉiÆSeNˆŽ 1ĘŲŽ¼¼¼†={ötŹß ‚˜˜¦ycģM6ƒĮźŚŚŚ¤‡6‰Łå 7Ģö&Ņ`€ŚŁŽD &€īPĄÜ„šf!”0 ŲÆ ¼łę›’Łļ÷ §ś”LĒV?^|ńE¼ńĘج¬D0D 0õßKb“_³ķ ]_q­(üķk*'‚-l冀Ŗt}ŻŽäs•Š—#ūņŽeA.GśķµNE<G[[†††”kTµż€¾£’ųs?mʞU«V=ŗ}ūö1įY9ēœ‘š'ˆłGUU•Ƥ¤d€/ye“1¶3Žķ•="k gA€³Ź<0`{uuõīd2łWœóÆ(˜Ž­įįa¼łę›8|ų0ŹĖĖqĪ9ē ““T;_ŌN]ųÅc±<@v8­'€}ą“ņ9āoÆK ģuŖ¦Ŗ¾NēNQ|ń\Nżļé$žSŽ˜ÖÖVtttøvóפō«ö=Ā;čół¾³oß¾—Äē›ś‘ų'ˆłGMMM~"‘xĄē<2™pG4Żē‘="»°Ü§dźA‚ Ā3ȐŌÕÕp·iš{cµ¾Ą7[–e!‹!‹aٲeƒŹ†:Įļ4&Ėõü¢ˆÖ„ö‹kÄ9N]śš÷‰cā=Ä1·OūXNł×uśēŪŻü{{{•}܄æęyZc{‹ŠŠvķŚu\žg@‚Ÿ ę7›7o^”H$pG&G|±±±ńGŁ#²¹Ņ€ž.%‚Č0ō‹6‹hjj: Ą ‡Ć’Ą×qŖnfŚ}ŗŗŗŠÕՅüü|¬Y³(..VĪUEż¢ķrŹ~*•š”)`Gņ如bŖ»ŖÆ€mK¾Æ&J>ioā§Ų|PD•no«Ä¹x>::ж¶6Äb1 OJķķ; }ÅńĻ ĆøļņĖ/¢££#EMż‚‰D"å–e=`£öc½>FŸõĀń’Ū»÷ųø«:’ćÆ3“ō–( ×Ҽ”€·uW,e¹(,7”ˆŃµnŪÉL)ŗś[w½ü~®Ģ¢žVÖż¹+r‘4łĪ$ *宀‹r“RqY¼pQP„†;“¤·“„ię{~|'†¤MŅ3ß3ߙ÷óńų>’Lf>ēÓ¦Mr>ßs>§j© ""€¾ŃV„B”š{ąĆķķķļžQ!`ŅĖā¶nŻŹć?Ο’ügöŚk/fĻžĶ~ūķG:½ż"ƒ†ƒ±ī9”šČ_>?V€!Ć??¼Š0ōńhwļGęæ³ÉżXKż‡?“Éśš5kxöŁgY½zõ«Ėü‡?w<+F)Pl2Ę\iŒ¹tٲe ’óhŅ/"Ć-^¼ų0kķ­Ę˜ƒ…|nppšäžžžœꕔ-ś½TD¤Āō¶Š …_g-^¼ų°t:żkķĒŁ…ÆŁŠ$v͚5¤ÓiöŽ{o8ąöß’W‹£Mȇīčµt~ų$}x·ż‘üŃīöyÄąšIłXĶ’FNÜG[=0Öä{d”`ää}čż­[·ņüóĻóōÓO³yóę×­dk{ĄŽ–ü—’˚5k¶‹»£­ĆmL¢Iżķ©Tź;'œpĀĶmmmÆ<¼©šü‹Č0ķķķg?¦; y_©T:­§§ēeGń¤ś%įx5˜d’#?¤§§ē@{.—Ė[kĻ·Öꀯw5īąą O=õO?ż4ģ½÷Žģ³Ļ>ģ³Ļ>L›6ķÕ»ł°ż^7}䒿įł”Ē€ķVŒÜR`Œappšu«†æ~ųū;Ū0ŚóG¾æmŪ6Ö¬YĆ /¼@__ƒƒŃĶ’±śŒ½£mĄFą{ÖŚKƒ ųĆȵŌ_DʒÉd²Ąøūy}c’Ē—/_¾ÅQ Ƭ1ę|ą];4~žłēyžłē1ĘŠŅŅņj1`ęĢ™Æ×7ōü”·Ćļģ­»’šĒ‡¼³ÕcõkųŸeäū#_æeĖ^zé%VÆ^ĶĖ/æüŗ„żCÆļ]žQĘ’pYCCCįŠ+®Ų0ø«ńĘ:"ŠĆ{ģĮĢ™3ŁsĻ=Ł{ļ½illÜī5#'ó£5õ9ĘhMGī’ߣ–‘Ū FīĮŲ¼y3ėÖ­£ÆÆ¾¾>6oŽüj¬Ńīąļl/’Čē=ÜtĢž=ūŗ .ø 4,/żp‘jkkK777_ œć*¦1ę¢ ¾č*ž$΁õÄ8|Xä;‰ ø ųļ$vb5°Ēń§’Œ­*ƒŌn”Ŗę×ūNbN~ź;‰øh@ Čēó!šcąĒŁlöaž]ī°Ēdā6Qšą®[·ŽuėÖńä“O’J„hjjb÷Żw§„„…ŻvŪ––f̘1źüŃīņ|ųv`»‡Oō‡ē9ŚłĶ›7³iÓ&6nÜȆ čėėcŪ¶mćŗ‹æ£»ū;xl=Š \ÖÕÕõĒ”Ļ 5õÓä_DĘć¼óĪ›Śßß’}ą#ŽB–€sƒ øĀQ)S¦0uźŌQĒŁoėÖ­lŪ¶­[·200šź„æææŸžž~J„ŅėĘ™ūhG޵‚`ŌG€Ė›šš¾wńÅozžˆ æ&’"²S ,˜Łßß0ĻQČ­Ąß …kœäź÷Ą8ÕźÕß Œƒ "uB€UnšŌōd2™C1K€æœHœ‘ūš‡9ažümŪ¶±vķZśśś^mö7¼`cc#S¦L!•JŃŲŲH:&NÓŠŠ@CC„RéÕøŪ¶½öóhŪ¶m °uėÖ6÷Ł/`GwöĒóŲ(żĄÕʘ ³³så°æk­ÕŻ~™°l6{@†·ļpϳ8=‚.āIā%e@­fłN`|' "ńP ‹ÅGĢēóŸź©§ęZkŪ€ūM&ŽČĪüCF6„ķļ“=600°ŻÄ~“n’;gųx#ļÖ﨑ąŽėĻ0āóc–Ķ˜1ćCwū‡åhĖkņ/"²xńāƬµ·crņ¹ĮĮĮ“{zztO’/)€½|'PS€ż}'1IŲ/"Ø `Źēó O=õŌńÖŚæ5ĘĢ·ÖΜČėĒjĪ7rŅ>²)ąČēŒöüįļÖ p4£MäGö ķµ£-F<ļYąŚT*Õµlٲ‡Ź¹čNæˆ8‘ÉdŽ4ĘüwŸß' …§œŚp,p§ļ$ĘįqąĶ¾“pģĄo}'1÷ķq|5¬MjX…“ N•ŗ ø­­­ķģ3f¼+N8ĶZūvR912t§ä €±^;Vw’!£5«0üõ;»Ū?ZĀaŸųI*•ŗfÖ¬Y÷^pĮÆ»»ÆÉæˆģŖööö3€ą®AŲ}„R铞žž—œڑ”M$gÅĀxøźéQik}' "ńP@X¾|y x |å-Z4;NŸ œ4õŚ‘=F»‹>Z½Ń>Ļ’±–čµļ“q†+7“ʘū17cnX¶lŁ£åēėNæˆTD&“ÉWąīēšżżż/÷éEß ŒSxpÆļD:Īw擎w"äuzzzž"śÅōж¶¶ōŒ3M§ÓGó¬µGsF{ŻŽ&Ś#Ÿ7Ś]’ŻŁłŗŃ’ķh Ųn5B x XaŒ¹}Ź”)w]~łå«‡ž§;ż"RI™Lę ʘo8 “¶¶žS^Ł%2š5D?ūҾ‡Ó؝ĄžDž$Š ‘:”2aŁlö0 2Ęüp8pćŲæ:ÖR’± ;+$ Åm[ĄšĒ1/æ3ʬ¼wß}÷żåE]ԯɽˆÄ©­­-ŻÜÜ|)pŽ«˜Ę˜‹‚ ų¢«xRӞg’ĶcÖKŌ Ž„ūGą›¾“§/. “„µI=Ŗ āÄŅ„K÷88Ās˜1ę­Öڃˆ:ß¾śr<“ś±Œ¶r`D3GŒ1»lٲ—4ŁŸĪ;I7n¼Ņs–£%ąÜB”p…£xRū~KԐ. Ī:}'±‹öžģī;‘qś;ąJć«P›TØB*HEåółŌsĻ=·ļĄĄĄ,ą@cĢlc̾aĪ0ĘĢ0ĘģaŒ™n­nŒ™ ŪŻ½_„åPė1”µö%`M*•zŃZū<°:Næ°Ūn»½šĶo~ss¹ 04Ł7ĆŽńbĮ‚3§Nzmž®P(\ć(žŌ‡’NōÄ8õ+žńČ$57M*’āąĒW 6©P…T©l6{€µö§D[„v™1f-pz+\ēŗŅ,ōÄüų É9Į`H#š] ė;‘ z#Ń)H¾ØP›TØB)ß ˆˆˆŌ¢Å‹f­½G“ą¹ĮĮĮc5ł—IJŹIC†Nx·ļD& ų9ɛüOłNBD─ˆˆˆc™LęČT*u7p£æŽģééyŠQ<©?OśN`Ž ü øœ1N Ŗ’< üµē\&ćODw¶E¤č@‡2™Ģ|cĢUĄtG!ļ+•J§õōō$m)“T—G}'0IĄ'„D{ŌÜETŪā)§¢ ĒõU8Šdo«ż½ļD$>*ˆˆˆ8’Éd²Ę˜+p÷óõĘžžž/_¾Ü×DGjGR CRDīcˇDĖÖ#ź¶æ®|­/_ėF¼~Æo ÜĀė’ÆĪ,?ÖBTě¼Ų8xīVöT‹?ųN@D⣀ˆˆˆ™Lę Ę—ēh­­­ēäóy-Ķž#šļį;GRDŪęć5“ä»ßw"DDDvA[[[ŗ¹¹ł2¢%ŹNc. ‚ą‹®ā‰”=¼ĻwRU,QŸ©*ˆˆˆLR&“™|8ĖQČpnW8Š'2Ü£Ø Ūū3°Św"DDD&aĮ‚317ó…ÜjŒłD×:Š'2’özĖH+}' "ńR@DDd‚²ŁģÖŚŸGøˆgŒY œĮ ńDĘš;ß HÕ¹Ķw"/DDD&`ńāŇYkoÅ]'šēĀ0<©X,>ä(žČXī#źžŸņˆT…ų™ļ$D$^ś ""2NŁlöż©TźnÜMžŽŌä_b²m×<¼ä; ‰— """ćÉdę[koörņ¾R©tL”PxŚQ<‘ńŠ6¢~#"uH‘Čd2YcĢr`ŗ‹xʘśūūļééyŁE<‘ ŠžočųæłNBDā§€ˆˆČd2™/cŗp×7'˜={vŪņåĖ·8Š'2?¶łNB¼»Xå; ‰ŸšŠˆˆŒ¢­­-ŻÜÜ|°ŌULcĢEA|ŃU<‘IŲ@“ ą8߉ˆWß ˆˆZ ""2ĀŅ„Kg477߀»ÉÉsŽ&’R%“ō»¾­~č; ńC‘a,X0sŪ¶m’œę(ä+ʘAŠį(žČ®ŗš„xsšŠļ$DÄDDDŹr¹\ėŌ©SWó\Ä3ʬ5ƜŗmK5Y Üā; ńb3p©ļ$DÄDDD€Å‹†į=Ą”ŽB>†į1AčŲ5©F—ųN@¼ųš‚ļ$DÄDD¤īµ··“J„V9 łpd±X|ČQ<×ī św*õc=šo¾“æT‘ŗ–Édę·{8 łĖR©tL”PxŚQ<‘J°Ą7|'!±ś Šē; ńK©[Łlö\c̵ĄtńŒ17ō÷÷ §§ēeńD*ģ*ąAßIH,@{’EDD¤>™l6›·Ö^‚»Ÿ…ĮģŁ³Ū–/_¾ÅQ<‘J ö„TÜ6ą ä;ńÆĮw"""qjkkK777_f­]ź*¦1ę¢ ¾č*žHŒnnęūND*ę’­Ń ©K—.ŃÜÜ|ąjņ_2Ɯ£Éæ$ÜyD ā¤öüš’|'!"ÕC© ,˜988xp𣐯c>A‡£x"¾<,&j (µć1ąćD[=DDDD¤är¹Ö©S§®“Öå"ž1f­1ę„ ®uO¤ Ü\ģ; qęe¢bēZ߉ˆHuQ@DDjŚāŋ ĆppØ£Ļ…axL+Å©Ÿ®ó„ģ²uĄÉĄć¾‘ꣀˆˆŌ¬öööcR©Ō `–£G‹Å‡Å©&%ąļ€{|'"“¶ų pæļDD¤:© ""5)“ÉĢnöpņ—„Ré˜B”š“£x"Õh ŃŻć[|'"¶ 8 uü‘P@DDjN6›=×s-0ŻEō{ĪEDHI¬\.׆į½ÖŚ£\Ä3ʬ ĆšÄB”šńDjPŽü3š¬×lźC,ž8Š1¤"2i*ˆˆH"-^¼ų°0 W‡: نįÜīīī{Å©e«Æn¶zĶØöō_Ž|ųµßtD¤Ø  ˆˆ$N{{ū1ĄĄīŽB>’N§Oźģģ|ĘQ<‘z± ø¶|ķAt|ą©ĄĖĖÄōż]vwŻżqFI”L&3ø ˜ī(äŻÖŚłjn&²kÖÅņÕ@Ō8šX`nłŚĶS^Õ,~Ü^¾~Ž]‘ R@DD#›Ķžk­½G[،17lÜøqĮņåĖ·øˆ'"Æī)_żŸ};šąåėmĄA€ń‘ 'k‰&ü+€;5^3‘ŗROßpED$¹L6›½ĄZ{«€ÖŚKēĢ™s~>Ÿ×[¦o&j*Ų ģ_¾ö+æŻxƒ·ģ&g3Ńžżg€§Ē‰&ü–?–×3D§T;‹z1LÄD'‡T»?QG'›Ø ""U­­­-ŻŅŅr¹µölG!­1ęĀ ņŽā‰HeMö$ŚF°ŠĢZŹĶ(?6ō¹)Ć^æs“džl$ZĮQƒ~¢c7-Ł_O“Żaķ°«x‰čT„—'õ§‰ ""Rµ–.]:cŪ¶m?Ns²dŒłū :ÅI DD¤*år¹=­µ7Ykrr3š±B”šGńDDDDE©:¹\®5 ߇: نį鯯Ż÷:Š'"""’8cķ}ńbńāŇw‡8 Łk­=¾»»ū7Žā‰ˆˆˆ$’“c”DDD\Čd2ǦR©{YŽB>’N§ē‹ÅGÅI,DD¤*d2™łĘ˜[Ż…¼»±±ńØĪĪĪgÅI4õļ²Łģ¹ÖŚ‹qT˜6ĘܰqćĘĖ—/ßā"žˆˆˆH-Š ńÉd³Ł¼µöżL²Ö^:{öģ³4łŁ^ƒļDD¤>µµµ„[ZZ.·Öžķ(¤5Ę\X(ņŽā‰ˆˆˆŌm‘Ų-]ŗtĘĄĄĄÕʘS…,Yk?U,—9Š'"""RsT‘Xår¹=­µ7Ykrr3š±B”šGńDDDDj’ ""›\.׆įOC…ģ Ćšōīīī{Å©Yź ""±Čår‡‡ax+0ĖQČ^kķIŻŻŻ:Š'"""RÓt €ˆˆT\&“96 Ćø›ü?’N§ē‹EMžEDDDĘI©Øl6{¦1ęV`wG!ļjll<Ŗ³³óGńDDDDź‚zˆˆHÅd³Łs­µćØąlŒ¹aćʍ –/_¾ÅE<‘z¢""R &›Ķę­µ—ąčgµöŅŁ³gŸ„ÉæˆˆˆČäØ  ˆˆ8ÕÖ֖nii¹ÜZ{¶£Ösa”PČ;Š'"""R—“@DDœYŗt錁«1§: Y²Ö~ŖX,.sODDD¤n© ""När¹=­µ7Ykrrs*•śhWW×ĶŽā‰ˆˆˆŌ5DDd—e2™9åN’‡: نį鯯Ż÷:Š'"""R÷Ҿ‘dĖår‡·‡8 Łk­=¾»»ū7Žā‰ˆˆˆ:@DDvA&“96 ĆĄ,G!N§ÓóŠÅā£Žā‰ˆˆˆH™¶ˆˆČ¤d³Ł3­µWÓ…¼«±±q~GGĒzGńDDD&«Ų—ØĄ½;°0³üv7`ʰēNf ū8]~Ą°i”ųÆ[€õåĻo6”Æ~ č6;łÓˆ”© ""ÖŽŽžiąŪø[Iv}’'–/_¾ÅQ¼Jū:J·Z _žąkNŽ©@.I¶•h¢±±üž†ņǽĄSå«Ķ‡WMGĒćvąg1ŽēŚtą‚˜Ēü`cs"¦ļŽJŌĆę-Ą›ż‰&’Õ`š š4š,Ń’ĒßJžRÓIĄ±¾“WŻÜ7ō ""2&›Ķ^`­uöK¤µöŅ9s期ĻēCW1c°w+d×¼B4±™ˆ‹€ĻW —Zöšą×Ą=ĄŻųæ3łĄgcļBāŸ@»4“č®rœŅ@5}oo>HT8š ¼—ØT›€’ī%ś?ł ¢¾ż_¢āT‡sĖ†>ŠŻ —¶¶¶tKKĖåÖŚ³…“ʘ …BŽQ<©œ}€æ)__"*¼Ü ō×ÅDŖŃīD«EĪ"ś÷;тa5kŽ+__&ZĮó3ąGĄD«yD¶£€ˆˆģŌŅ„Kg \m­=ÕQȒµöS…Ba™£x"Æi¼VX\ü;ńßaˉVˆ“M”ėA šįņµ–Ø@÷-¢m"€N‘Čår{ŽfŒq5łßœJ„Ī(‹šü‹Ō†=ˆV<|Ż`æŽ,>MżLžGš |x€ü¦#ÕBS&“™†įJk­«F[}ažŲÕÕu³£x"R=vžX ¼Ķs.R¦õhxųQ’‰N3hžż½Ō=DDdT¹\īpcĢ=DŻ‘]Xe­=Ŗ»»ū^GńD¤:ż%Qc²S|'"ućĄƒ@5hK šMࢣ „N© ""ƓÉdŽ Ćpī~Ix8N],uODŖ[3Q²v߉HĶ; XAt„ŸģÜ_čq¤ļDÄDDd;ŁlöLcĢ­DĖy]ø«±±q^ggē3Žā‰H24Ą|߉HĶś Ńē-¾I˜½Ÿ'łNDā§€ˆˆ¼Ŗ½½żÓÖŚkp·„ņzkķÉėÅ‘dIWm qé|ą?ўöÉj":Āóh߉H¼T“ĶfóĄwp÷³į’ÖÖ֏‹ÅWÅ‘dšüśķĘ.īN4ł—]3h«Ī”¾‘ųč˜‘:×Ö֖nii¹ÜZ{¶£ÖsayGńD$ł.>ē;I¼CˆĪ·7¾©3ļT°ÆZ "RĒ.\ŲŌŌŌt£ĆÉÉZ{Ž&’"2ŠĻļņ„$Z (ą®GDŽ|ĆwDDźT.—Ū³””į6cĢ©ŽBnN„Rg‹ÅeŽā‰HmI_ö„$Z†Ø‹½øwQ!@jœ ""u(“ÉĢ Ćp%0×QȾ0 OģźźŗŁQ<©Mgoó„$Rš5ßIŌ°šo¾“ŹS@D¤Īär¹Ć1÷our•µöØīīī{őڕžĮw’HgūūN¢Ęż ZPóT©#™LęŲ0 W³…|8N],uODjßYĄßIH¢4 ĀQ\–śN@*K‘:‘ĶfĻ4Ę܊»ęIw566Īėģģ|ĘQ<©3śNBådą ßIŌ‰”9bMÓWD¤“··ŚZ{ љæ.\o­=¹££c½£x"R_Ś|' ‰²Čwudoą½¾“ŹQ@D¤¶™l6›¾ƒ„"xœ‚IDAT»ļł—“¶¶~¤X,ź¼`™¬ć}' ‰Ńœą;‰:£:5¬Įw""Rmmm閖–Ė­µg; i1AwODź×lą@ąY߉HÕū+Üm]“ńy·ļ¤r“@D¤-\ø°©©©éF‡“’’µöMžEÄ”÷łN@Aw’ć÷Nß HåØ "Rcr¹Üž ·cNurs*•:£X,.sOD¢;»";£åčń{#Šč; © DDjH&“™†įJ`®£}ažŲÕÕu³£x""CŽä;©z-G÷!ą; © õ©¹\īš0 of9 ¹ŹsRww÷cŽā‰ˆ ן;©zM¾“6æž^žVƛ€ņµiŒ×ļATĢH»•k":Śp¢ŸŪoöyßf½¾“÷T©™LęŲ0 oĄ]£¤‡ÓéōɝĻ8ŠWkž¦śN¢ĢĒ<꓀y̱lõ€Lš ²3oö8öo€ļwƒ1Œ™ŽJŌ÷ą£ĄQ1Œ9–żwįµk'\%āĄŽÄ[XéÖÅ8ŽĪlž "" —ĶfĻ“Ö^Lsņ®ĘĘĘłėÅ«Eo÷Ą0ӉīNÅé0`KĢc&Y7ŃQœ¾¢;‘³€w§ąw‚µ70ƒų’żJrųų÷ł,š)ąĒʁ?”Æ‹#ą¹ģ± ÆżfłŖ—ŸŒq¼o_q¼ Q@D$ĮŚŪŪ?m­ż6īzŗ\o­]ŠŃŃńŠ£x"/ųNb’ 8ø x‹‡ń °*ČŲā.ü8–h™5øč“Œˆyģ])HS@‘d2Łl6OtWŃÕ÷ņKZ[[?R,5ł©øxOł­3<+ɰOŒc½œNõLž‡lžXóø*Ō(­I˜¶¶¶tssów­µK…“ʘ ƒ Č;Š'"ɲ h#Śó÷¾üé1'ÉgĄ+€Ēco"Ö­ŌłJŒcź’fŅ ‘YøpaSSSӍ€«ÉÉZ{Ž&’"uo-p‘‡qµ@v$ĪĄbk2®‹y¼)1'1Q@D$!r¹Üž ·cNurS*•:£X,.sOD’­HüĶU‰«0@“¦š=l‹q<j” "" Édę„aø˜ė(dpbWW×ĶŽā‰HņmīyĢj9NRŖSsLćœN§‚ą1GńD¤¶ÄŻi<Ī%Ķ’ī_ģE$yājŗ6äå˜Ē“dŁćX’œćx“ń5 +¦±śbGb¦€ˆH•Čēó ½½½—[k—8 i1AwODj_KŒc•­J’y1ʱę_&šdW«GʗȤi €ˆHXøpaSooļ€«ÉÉZ{Ž&’"2A3ck ńo9d‰óŲ;€Æ?Ž˜˜Ē‰…Vˆˆx–Ėåö ĆšĒĄ\G!7„R©uuuŻģ(žˆŌ·Ē8Ö£1Ž%Éō¬‡1?P¾ž~Ft4ęĆ@/š¼‡|DœR@DÄ£L&3' ßou²ųPWW×JGńD¤¾¼#ʱžćX’L«<Ž}pNłņ ŃŖ„ēŹļæHTØžö%ĄĘ™¬Čx© "āI.—;¼<ł?ŠQČUʘ“‚ xĢQ<©/o&:-.æq,I¦ßłN`„iD…Cvņ¼A¢BĄsD…‚ēپh0¼x £0%V*ˆˆxĶf Ćšz`wG!N§Ó'wvv>ć(žˆŌŸÅ1÷PĢćIņg‰šjŽQ¾ī"ź $ņ::PD$&›Ķę1ćī{ļ%­­­)‹šü‹Čd5’Ž»#HĒėŗ˜Ē“äŗÕw `ˆ ē׫ūĻ’¼ķRaZ "Rał|¾”··÷rk­«_°­1ęĀ ņŽā‰Hżi> ü/ą]1½h’"2æ#Śē •¤Kļ-_ß®–­:§€ˆH-\ø°©··÷jąG!KĄ'ƒ čtOD*ļ$`¦ēŅDˇwZ‰:žūZ z Q“3‘ń°Ą÷€/ųN$”¦[¾īž‰hu€Ō)DD*$—Ėķ†į¹ŽBnJ„RėźźŗŁQ<‰Ē;Ė—D“¹ołNB§ ų<ŃRw™¼cˆšožčļS'Õ!õ©€L&3' ƕø›ü÷'jņ/" w š?¾“Äłp›ļ$j„>ü8Żs.⁠""Žår¹Ć1+€·: ¹Ź3·P(¬tODćMĄ}'!‰õ¢$āĘ^Ą ĄS<ē"1R@DÄ”l6{\†+€…|øT*Ķ ‚ą1GńDD|ł'ą ßIHbż7p£ļ$jŒ>Ct*Ē4ϹHLTq$“É|ŲZ{ Q“-īlllœ×ÓÓó¬£x""¾üų®ļ$$ń>lšD :•Øø2Ćw"Ry*ˆˆ8ÉdĪ3Ę,Ē]żzkķ)ėÅńe%AĖ·e×=üƒļ$jŌ‰D=:4?¬qś‹ˆģ“Ķfóʘ‹qō=ÕóÖÖ֏‹ÅW\Äńčn¢cPõżL\éB«I*åd૾“ŹŅ1€""“”Ļēz{{/·Ö.qŅc. ‚ ļ(žˆˆOW94ł÷Ī!ŗk-n} õ[ØiZ "2 .lźķķ½p5ł–jņ/"5`ŃÄ’hņ/•± ˜üŲw"5Č­°pÕĻHŖŒ ""”ĖåölhhøhY« ›¬µg …NGńDD|°Ą÷ˆŽ@ <ē"µo šaąr߉Ԡż€ÆūNB*C‘ Čd2sĀ0\ Ģu²8±X,Žā(žˆH܈&žļ:¹Dā2ü=ЬõœK­ł$p˜ļ$Ä=DDĘ)“ÉaŒYAtwĖ…Uʘ¹…Ba„£x"">\\ üÖw"R·®ŽB“t½ä9—Z‘>ļ; qO‘qČf³ĒcītņįR©4/‚ĒÅń%ܬ¾ģę3©[k€O‡m Ųā7ššq`¶ļ$Ä-DDv"“É|ŲZ{ īāÜŁŲŲ8Ƨ§GĖdE¤–“’<|˜ā7©Sm Ųh~ŠŠ“Õd}'!n© "²™LęŸ]Å©bGgæōœ‹Ō·W€;Ė×pū­8pÄŪ†]ūRß7Mß¼—h›ŌDDFČēó «V­ś®µ6ē(¤5Ę\AŽQ<‘¤xŃYķs?zĪEd¤Ė×ĪXĪ$*쿃·­DójŃ ØP3TfįĀ…M½½½WcNqrųTŽā‰ˆ$Ķ^ĄO€÷”£Ś$™Ö–ÆGvšœ)Ą~Ą¬ņŪ±V̬h¦•ńAą’śNBÜP@D¤,—Ėķ†įO€÷; ¹ÉZūŃb±x‹£x""Iõf |Ęs"•2CŽķqģ]Ńč;]äjµ[œJÄ7_™Ó8®üX̉i¼żbG*L©ł|¾aÕŖUßµÖę…“ʘ ƒ Č;Š'"µé¢3Ä}X3ģż@7šY`>šMü!*Llš0ö®Hāzøé¾˜„8›ćX.Xąā+$ńߏŒBME¤.,\ø°©··÷&cŒ«É’ °T“I Ńrēæ~ķa|ę NÜg’«01ałŚƒ.§¤ž‰q¬¤Æ€‘2D¤ę-Z“hƆ††Ÿ'; ¹ÉZ{F”PčtOD浥‡ńs'~/1āī¹Ņóx®Å}śĀV1ā,ņ$m ĄĖ1Ž„@P@DjŚ’%KnhhXIt~® }Ą‰ÅbńGńDD|ź%jˆ·ŻĈ»0+ęń\›óx.¾>ŚP=|' nØ "5+“ÉQ*•ī±Ö¾ÅQČUʘ¹…Ba„£x""Õ ‹h?qœvsc‹ƒń¶˜Ēsķš˜ĒKZ ‰+\ŅĘksŒcI© "5)›ĶgŒYč(äC„Ri^9Š'"R-žŽyĢbĽ`?ąĶ1éŅ11ēb @œ=’øÅ#Ī*ŌD¤ęd³Ł³¬µ·ąęĄG÷ōō<ė(žˆHµ¹?ęńŒƒėĘØĘtįĄQ1¹fēOŁ©8W€›—q1ĄÜĒ‹{ōTˆ "RSŚŪŪĻ·Ö^»nĶ×YkOéččXļ(žˆH5zŅw“gō!ŸĮMĆø}ų'·Ļ9ˆ÷)ļŒq¼]u0;Ęń“ FØ "µĀd³Ł<šm}o3Ę|§µµµ­X,ƽĢTD$n/śN`|¬Źš ü€duD’{ącĘuQˆ»ųžŁ˜Ē›¬šÕ˜Ē\óxR! ¾ŁUł|¾aÕŖUßµÖę…“ʘ ƒ Č;Š'"Rķ’ø¼÷Y¢ę…qߣ>øųšTĢcOÄąBąóžĘŽAŒ>1&bp#p}ĢćN„ž 86ęqWÅ<žTˆVˆH¢-\ø°©··÷&cŒ«É’ 1ęlMžE¤ĪlóĄ$l!ŽsЇ›<ü'ńw×ߙ}ˆ¶*ü ųžöµÆrc­ƒa€åDE“j<p¢ü>ēaģUʔ Š I¬E‹ķ•N§ ¼ßQČMÖŚ …[Å‘ŹśšOcO#šhxø ųщ 6ĐĆ¢NšoŽKT˜xÕń;žoĈ{@ø8ų.p џ%ī£2‡ģ œAŌ„rŗ§9ģ±-Dū¦_^"ꊿ Ų8ģ9Ćļp°żYō»óŚjŻ)Dżö._{Żéóų‰xųƒƒ8>·X̾V¾VóZaēq¢ÆēĖD_Ó­l_ģYĒkł~¶_]3…ķœA“Ņ`¢¾o(; 88‚Ø1”ļUŪ­Ø*ˆHād2™#J„Ņ­Ą.āYkŸL„R'Aš˜‹x""›’ńĄL'źŅg§öjń0n¶•<ī † oŽ+_õč÷DÅ ©¾«I""’Ķf3ʬĄŃäx( Ć£5łI¤j.Ō³_9ŠóGGqd׬ō€ø£€ˆ$F6›=ĖZ{ °›£w666ŻÓÓćć()‘zęźwŠ'Ń$±Żģ(Οš·÷^^sÆļÄD$ŚŪŪĻ·Ö^MŌtɅ묵§tttÄ}ʰˆˆDū]¹Öa,Łu›€;Åź'ŚN ~©PCT‘jg²Łlų6ī¾g]ÜŚŚŚV,_qODD&F€ŚuQ@WnwK&īTO/q@ME¤jåół†U«V}×Z›sŅc. ‚ ļ(žˆˆLŽĖĄÆ'€CʔÉū¾ćx·ŸuSĘļ{¾·“@DŖŅĀ… ›z{{o2ĘøšücĪÖä_D¤*4ķü)ćf‰V‰‰O7:Žy7°ŁqLŸøŹwā– "Ru-Z“WCCĆĻ€“…ÜdŒ9=‚.GńDDjMóx{8Ž×ItV»ųõm ä8ęFąŽcŹųÜ ōśNBÜR@DŖŹ’%KnhhX ¼ßQȗ1'Ap«£x""µh ęńf:Ž·øŲqL™˜B…b_Z”ø²c_õ€ø§€ˆTL&sD©TŗĒZūń¬µO–J„¹AüŅE<‘¶5ęń\ ŗū¬»•ž|Žčn}%üu¢Ūmø;ĶAŖˆ "RŚŪŪ7ʬtņ”0 īééŃłŠ"";÷ €Yˆ¹Č¢sć}ø›Źļ’ē Ē—×XąūNB*Cń.›ĶžÜ ģę(äózzzžuOD¤Öm‰y¼ƒØĢiTwĖ*WʶXBå /wĖ+<†D¾ <ą; © DÄ«öööó­µWÓ\ijÖ^k­=åŹ+ÆÜą"žˆHč‹y¼*³ ¢„č÷W(¶loh#¾sāĻ%ź5 •óšEßIHåØ "¾˜l6›'Ŗ2»ś^tńœ9s>Z,_qOD¤^Ä]8øBqūSm«¼OķĖj`QįAÜŪ|œų{‚HŒ*±ōJDd‡ņł|ĆŖU«¾k­Ķ9 i1AwOD¤Ž¬%ZĀmbsNcÆžpŁ[F^c‰ī_įaģ;€óĖ<Œ]Ė6Īžä;©,­‘X-\ø°©··÷&cŒ«É’ 1ęlMžEDvÉ °>ę1+µ`Č*ą}ĄWxœz³ųšosø5©si#p2QĮLjœ "›E‹ķÕŠŠš3¢2.l2ƜA—£x""õģ™˜Ē;<†1žŽ¾ĆXõąyąDą¾žų ōHĀ=œ€ŽY¬*ˆH,–,YrpCCĆJążŽB¾lŒ9!‚[Å©wOÅ<Ž_Ä4Ī+Ą"`1j 7YčŽüĀs.ĆżŃj„ø±¬7ļ~å;‰ "Rq™LęˆR©tµö-.āYkŸ,•Jsƒ ų„‹x""@oĢćĶö‰q¼ąPąR ćøI÷{ąĄŁĄ:ϹŒę‡D[=ōH‚¬> |Xć9‰™ "RQķķķĒc\6az( Ć£{zzŌŻYDÄ­øW@|«†¬#ź\’. ˆŗļČoˆŽų;øÓs.;ó[ą/Æ­ųŃm%Z5ń&¢S˜¬ßtÄD¤b²ŁģYDĖĖvsņށy===Ļ:Š'""ÆńŃżū½Ęxh':‰ąėD§H“”žĒDŻą’ø†äģ±ž™Ø¹ä7‰ŪIäeą[D+`ž”ü±Ō)D¤"ŚŪŪϱÖ.¦9 łƒžžž“ƼņŹ Žā‰ˆČö|,”>ŚĆ˜Ć½|Ųų Qwł¼fæø XJō÷p:p ɽ;üšy •h™ū/ØĻ-%ąn`!0 ųŃÉRē|' "µ'›ĶγÖ^†»ó¤’£µµõół|RīBˆˆ$џ~ 9Ę1¦ąæ‰[ ø½|}šØaķ±ĄÜņµ‡·ĢܳĄ#ĄD’»>Ÿ UČZ¢eīßöĪ ŚóžWÄŪ{"N«ŪˆV_žµłu•]¤€ˆ8†į’3ĘøXadĻ …wKDDv,ĀŻi-ć1ƒhBVMē‡DG¢ ‹–ŽŽFŌ ’­Dw˜]ŗ+e3š¢-}} ž¶<¼t”/€ƒˆ¶Ÿ ]o*?Öč%»Éé#jŠx’°ėqÆI"Tū7-I˜E‹½%N?ę Ō6 [(¾ļ –H-3D{^ćō$É] °'ńŽŃ]GrīÄķ 4Å<ęj’¹_{Q!`Q£Ūż†½Ż˜IŌ§wŪį†lÖŹo_ž&:ÓżY¢†ŽĻ”ßjõÜų¤€ˆśB“–Ɓ½€ŻĖ×ĆŽÆŌ’“A¢Õ «Ė× ĄKå·v­­ŠųµhoÜõ£>ŖóÄ @+Dıt:żnaś1gAp›ƒX"µĪOųN"aśHĪ„ydvę;ßłĢl|ą÷3ß"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""”b…:‘:ōŗŲæų„‰Æō¾n¢śv뛨~‘Vća X]ć§xkĀkO–6ażlĀś[‹tą^ōBBDD¤YøB€ˆˆH=ŽĆ¼‰÷’ œŗ°d?i܈"""ĶĀźDDDé`'ŠÕłœ€y›>ˆĆ x xŃ9nW§IĄvą#ą_@…Sę÷˜¤B{`9°¢Ž.ŗ…˜ž ~R€Ē‡€«NĄfą~ąūõ$³[€U~ūęøvą:`°soē€wćOļ“œū9.@w?;÷Ü Óć”Ģ©w4UĻńE̳øÓ+b p˜süÆĪłWń˜!·bznLĪvžĮNąWĢ’]Īó9Č)÷`™@‘Ļd 3|ƒy~9īEDDDDDDZ¹‡’Ųßš#Ļobˆ“q˜d@¦į p°˜ķüžøÄ9> ČvŹÅ4f÷P÷€@ ¦Az¦±ś"°ˆĘ4vmLcšSfŽSg¢S‡’€O€;üź€ILdøv8°x88 Ó/Å4ʶaŲrb äL#ż.§ž(ą-LŽ’9ęūÕń&yr©sŻłĄą˜gz>&‰q·Sž\Ģs½“|9ųŅ)pp›ó¬.fĪõrœėsĪūó=‹ˆˆˆˆˆHō0ęķöü~ž ¬nrŹ$^Ŗzųü˜ēlOĒ4ĀżŻ†yó¦1=«Ęń{Ø;p#¦1ģ/ó†ū(Ŗūwa&żć|öOœēܓÆü_0C9 Óć ŗĘžW€ŪķmĄ…uœļó Փ¾ēXsŅŇ0½ ĄÜóm~Ē|÷9Čoß ˜Ž`Žź’_śz9׉w>÷wźš’ų*ęų†IŠDÕuC"""Ņ0 ‘–,ųŃļ³ č ŒĀ4˜;`zœWć¼Ž˜F9˜·óēüÄt}’Ą9Ž™Ŗį>K1o¹®¢ŖĮżŠi°ū+61Ćšū ¦Ń›‡éZ_Ó+Ą#Ą‘ĄĢšš gŸv˜~qż«œkūnˆ™Ž˜ēx~2½©>Łā.æķĀūJüʧbž—浘gŃÓ» Ž˜ÄĄ~ūbœz“1=-DDDd/( ""-Łrą¾ūžiHĀ$¼ĪūÓ{L÷ū˜Fžr Óųō½…vcæž*ü¶¢Ŗėžś:Źćģó’w5P\”Ļ`ĘÕ÷^«£lxõÖ¼vcÕUļē˜ÄĘŽpØÓėw¬.Ī+Āōś(ŚĖXDDD%DD¤õYy枊™0 óŻ’­ų(Lu0oūO~š;~U €˜7Ņžü‡œ]ćXO`x€øŚ³÷“Ō=‰æÓ# °Žr;0½\To$wĄŒ·ß[Ūių96ÖNĢwä/Õ¹N}Ļi;¦'Älæ}±˜¹Źö2AˊˆHėcc˜ńĢÄs0’®õĄLŠ7Ų)Ÿ™ü/ ÓcąPLWw_üĢ„€9eQ5A` ßc’ ć0I„vĄ L#ü‡zĪ«Ļr`1¦Ūūsõ”ūó¶žz Ó5~4føĀ—{ym0ī@ĻńŖńoŒļ0“ ŠBѸٹޯæoĄQ˜ܘŽW`ęPˆÄ<ć«0ßIĶ”""""""Ņ܋éČϘŁū†bŗŖ`’…˜ }ćöĻÄ š`«0“¾ģžĒŒ_·M˜1ų_ÕŪ­N9ÆsĪJæx:bfü­qĪbŖ–ä{ø¼Ęń+0ĆJώéłPę\{'¦įī;o9&)PŸ1³ōūkč9¾FõÉ1÷™ī·o&UĻ5˜‹™#ĄĘ<’ļ€5®ūL×~³²CfÄ­Ī>/&±2Ŗ{‘HLĒ"ź9nQ»Ńސˆź ĘŃĄEĄ Ģ,śĮrQ’żī‹ż]o4Õ' $1Ą¾Č Īi.Ā,qų'ŌŲikā0Ė6 Hv~‡JØÆ/""""""ū` Ч™®5 č¾źé²źŁ[€%žUoø€ć©e€TĢ’}©ūéš{ćqą²^_DDDDDDöĮ\ąoĶt­7€›öC=Wķ‡zö†|ŒßuF`÷}ė)Ó ĄZ GciŃÜ”@DD$€>ĄYĄ` øX |†i`æL<Ą|ą<ąĮuüx؁é:ęͼX¼l†ć€ŽN9ųXPGl£±˜µķ·8å–` —:Ē»91ožuĪ;8Ó Ž|āœ0Ų€id÷f;uŽĆ¼}ßķÄük=ĻķD§ģ[Ī磀( Ą‰ŁķÜŪū~ētĪ:ažõ ą5 ˜DUŒß»€gœųIvźźŠyīóœs|ĘG‘ĪńׁÕ~LJ§`žåąS`”ß¹8ēŽrīåē^m xø˜YG|"""4WØ č Äcŗ²÷ļ]ŽīÅ4bG;Ÿ» PĒ@†³ż pU’ī,Œ•wźRœķ”:āŗxՉ„Ži„IōŚ9qõÄ4Ŗī^:;1Œ¾NrŽOŽ®qź®ŽĆ4¦mą0Lä„:b˜üŪļóI˜dĀ?0ó®Nü×:Ē»K1 ż ó|ßtŽw źzēž"ź¹žkĪ3‰Ä<«o©š‹ąNąæN`’KĪē1 žv@¶ŪĄiĪńS1Ļ2HĀ$nó»žæ 0Ļ_DDDDDDZ‘šC’1įßłķyĆ]Sę² (Ć4`}\˜nśĆżö3ą=`z}÷P}ģyĶ!. ‡Ŗ†¬Ļż˜¤˜7įoS5‰ģļ ÷÷€ß9ģŽõū|°’źöĖ0 s€[0Cü'Ļėˆy^¾7’p–ß¾ —Ŗ7žE˜7÷žęO9Ū7azmų» 3¶̽oĄōhš9ÓĖĀ’…ĘNą˜zb9`i€ˆˆ“FuuĻċi8^‡iĄo6bŗä7Ö:ą\ 3Ž|¦Ėy}ā0½¾Æ±’{LćŲēsL#LƄTLĆŁ?NÕž¢s6øNY{šÕļä·żŽo6cz ¬¬ćZułĘo»Č©+ “TˆÄtķ÷æŸLÆ0=zgb’ÉĄÉĄ*æņŸ;ēų|‰éQˆé5ęū­ė‰ˆˆŠ”‘ÖČŪČņgW×c‡Ż0ŻéĒcƚėfĢ›źéNŻ1o¹'cĘ«ā›=æ¬ĘžLrĄĒ’žāßWPū^×q §lĶŪĖė(&i`qŲ‚Uó}‰_]×8ēgē÷MĄ ˜äĪNĢżŌünŠj|.ō«ß—°©’žEDDXJˆˆHkē„öœ6Q˜7Ī`Ž÷„śÄpq˜1÷S0]˃53$a·ó9 ÓĶž&źNdc„qĄæż n|ćŌocĘęūŸÓŗ—*,ǼqļüV÷-Ԋ-PC?±žŲö†ļ~NĘōbšé¤;Ū—bzW|ąwü/TzNuIĪļæ}0½DDD¤M(""-Y /-· Óą?ÜoßŖž‹Ä¬ŠĻļx¦!VćZķøÖTŸĄćŌå’ļi©Så÷y=¦qėćĀōJų„Žė”kœūšwf¢Ąŗ|ˆ™,0X+0śOz8“hš%*0÷ŁŠ³©ĻL²įüūļĀLՓ6¾Ļ§R}~‚±˜‡Ļ9˜gčKVōuźųab‘8Ó0’x‚ŖIŪ×(÷Sn1° Ó.ÄLf¢¾"ēų§˜łJĢŲtŸi˜·čĖØ>ń æ30o›uźYŠi|śĻĢß3,`=fV{0“ćbõßc–\GÕŪķ×1Żßżs®µųʉw+0ØŽŲĄ,3č’ö’.Ģ žN”jé½XĢ8ś\ĢŖĖ0ɇY5ĪyÕ¹ĻEN\5ł&¬™¬łóĢĄ4Öók…yėØZeą/˜ļčSēgf©Ä·ć`¾æ˜‰ WažéæėŻŽł[‘¬†‹ˆˆˆ„Tp¦‘ŗÓØ_Bķq޽0Źķ~†`;qćœ2±N™%TļŽfā»>~ljĒ4ÜŪ9u/¤öŲōd` ęmōĒξē¼LĆ~‘ß=ōĀ4f·ÕØ'31^{Ŗé5ĒŁ×ō¦Ń’¦;|8Õ»Ä'bŗŽ/u>[˜{īģl/ ‡ ÅtĮ_ąøŪ9ž¦Ē€Ļ@Ģ„‚¾.śńĪż¤az,¤śwŠó]{1‰Œ|ē~Į$"€[1ßm8ęyų†c“~Ĭ4P3>‘6'ó†=9ԁģgwRwĻ €'1“1Šˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ4Č u"""5kÖ,׊+C‡4Æņņņ¼łóē{B‡ˆˆHk„€ˆˆ“x3f̈·mū ą ąp =ąmTŪ¶wX–õ½mŪÆ—••½śĀ /d‡:(‘ÖB i±&Mšw šg -ŌńH‹“cYÖ}łłłϟ?æ8ŌĮˆˆˆ“tJˆˆH‹4eŹ”t·Ūż20Ęģ±°»a'÷ÊN†šųĘ'ĶĻ./€’Č^¹kĮöś-NŸ;wīʆ'""Ņā) ""-ĪŌ©S;………}t°RB“!&=“IĖQ’½ö}Ų¹l`»Ēć9źŁgŸ]źŠDDDZ*%DD¤E™4iRtllģ§–eVļńŠitØĆ’–jĒOŲĖ烷`¹mŪ£²²²rB–ˆˆHKä u"""žāāāžj’`4I©_śPp>Ī;~–e=āˆDDDZ,õ‘cźŌ©]ĆĀĀ–QV§Ć”÷™{]—]^“’“–oć§°ń3ĖåöōÓO/ qD"""-Ž–P‘#,,ģr а(čvbš'–ĮīeŲ»~‚ĶPV¶–‹?ąXŲv˜×ė}%33ó†ųųųw}ōŃŅP‡%""ŅRØ€ˆˆ“3fĢXnŪv_2Faõ™Šš ž2Ų“{ćšØ'µ¬žŅ­[·f͚åmذˆˆH[§€ˆˆ“Ó§Oļl°Ļ€”~õŸP¼{iķ0Ÿ-$ö„äŽX‘IŲqXśgīĄaW@y!vįŲ³ ·ś}=::ś‚Ē{¬ Tį‰ˆˆ“ ""-‚×ėķźr9sÓĘvØæpĮģŸž„Š"Ą‚ƱŗŸ‘‰•EŌō?0Y=ĒAžFģÕoCīZ€3Š‹‹?Ÿ9sę1³gĻĪ m„"""”£UDD¤E 3­~Ė‚šŲŗ –Ą²gMć?,ką¬~“Ŗ5žEˆļ‚5ōbč1'-0¬¬¬ģ?“&M qd"""!£€ˆˆ“^Æ7pÕŻAĶ^ž2vI6XaXƒ¦CźĄfŠPZĖĀźz ō8Éłhehƒ  ‘Ö#wģž«×)Ō³qēW”@i”ębkŅĄGT $t¼·ffffeeeå„:,‘ꦀˆˆ“ö¦Ļ°bŅ ćšąNņV`oūvż 9kµ<ąζķdą—ĢĢ̧Ün÷?Ÿzź©ķ”ŽIDD¤¹( ""­ƒ·²W`w…e1”{ēĻŲkކ’ģ&NZ˲:ńx<˜1cĘn·ū®Ł³g—‡:.‘¦¦€ˆˆ“ vī:š˜6š•: ”Ņث߁M ĢGĖ‚ä>:+±»™00,Ŗ)ƕ–Ę[eyŲ[Ķ0’?·<ζķŪŹĖĖ™9sęŁ³gĻŽź0EDDš’""Ņ*X„9ŲafLw=ģÆĄÖļ̇øNŠēL¬„®M£“`.7D„`E„˜‰#{œ„½ęŲ¾ąčņņņĻ&Ož|ųóĻ?ŸźPEDDšŠV‘Ö”,ßüŽˆÆæÜę/+’Vڬa—Ŗń/µE$`t.ō>g™Ąįįį/̚5K’o$""m–zˆˆH«`{*°źY"Ņ\ģ5ļšķÄpŠļź]R°O)vIVYvEń>F+­FDžŲc„,(‘& nn""Ņ6xʰw,Ąź|$DÄÕ_~Ū÷Ųߎ«ŽĄĪY ¶·‚”V Źėõž_qqńŹ3fĢ u0"""ū“zˆˆHې½ĀĢōŠ~xŻål™$pŪę³e‘Üy )ŻŪ®+1 ø#c›>^i1*J‹(+Ź„p÷F²7.%{ĆRlŪŪĮ¶ķ'233.ŹŹŹ* uœ"""ūJ iņÖ`Ŷ‡ØäĄel/ö²ē`÷ÆÄ·ļE÷‘‰MÉh®(„rGĘąŽŒ!&¹#i½GP”½•õßæJī–X–5HŸ5kÖ)³fĶŖu¬"""ūBCDD¤M°KĶźmvT»ŗĖ¬}Ʋńß¾ßhž|¹’RKLrG:į: 8Ś·ė„õė×?ʘDDDö%DD¤m(węk Æ£ū~įVŲø€”īCé>źl°ōĻ fY.ŗ˜@zßĆ}»®š6mŚčPĘ$""²Æō>""Ņ6Ųf.wĖųųź·›ˆŲ$z¹Ė²š/6iµzŒšHT|*.—ėŽ‡#""²O”‘¶Æ$;{%]‡Ė․µ°\nŗrŠļć˜iÓ¦ e<"""ūB iūv-ĄåŽ ]÷CBŒ“6)Ż†āŽˆĄårāpDDDöš""Ņöåm ”Co½ż—F³\a$tģ€mۚ@DDZ-%DD¤Ķ³Ks*Ēr‹4VT|–eiŁiµ”‘¶ĻY! <*.āHk]ł·Ó>”qˆˆˆģ %DD¤ķ³½ę·–ż“½Uõ·SĒ2"""-ŸžOHDDDDDDä €ˆˆˆˆˆˆČĄźDDDZŖ·Ÿł?}łvŠå‡y§L¹® #jYŠ ryčŚÓøūi­Ō@DD¤ņ²w²~łbņsv…:”:­łå{ŗö ~žśż&½Ž×SĮśå‹Ł³}c“^GDDDöõ©Ć©ÓnąŌi7TŪ÷É+³yńįė9yņµ}ʅ!Ь~9»ųõĒO~ģ„P‡""""-ˆ"""ūYIa>XQ1qT”—±só°,:vėGIQ^Ƈ˜øÄZēŁ^/Ņy„GD]ėųīm(ČŻCDT4‰ķ:ŌŖ£¤ØÆ§‚ŅāBŹJŠ(ŹĻ "*wxdµņ…y{ČŪ³ŪöŸDRjŻKÜŪ¶Ķžķ)ČŻC\R;RŅ;7ś¹ˆˆˆHh) ""²ŸŻwł „¹ĆyĀ9¼õĢ}”ęÓ„÷`žüō>)iNJˆˆˆ4Ķ«—ńņŖæ0äˆqt?čŅ:õŲ«z>žļc¼õĢ} 8l,y±‰)”•±iõR¼1‡Go<›»_ZJTL‡w6=ŹĪĶkXųŁ q<{ s/ó{ćŹ%uź>ÕóĆ'ÆŅ±[?®śŪĖX®źs÷ĘÄ%ńƜ»Ų°b1}‡įØÓ§°ä«wYųŁ|ŌiyZfµs>xń<e\óątī5°Ś±±/įĻē å“WgW&>š’O"£bøžŃwIHi_YvĢųiDFÅšŁėOļÓż‰ˆˆHóŃ*"""M &>‰#œ.÷ū¢¤0Ÿųä“Z€c&\ğfFēŽƒƒ®oķ/?ЄϐZ€˜øDz ɶõ+šT”°qÕz9¼Zćßē°ć&6āNDDD$ŌŌ@DD¤ Ä'§aYÖ>×Ó{Čį|ńÖ33+šń¼l¼^„Ņ„…GPVRL|RZĄ²IiuO("""-"""-ŲŁ—މårńóWļ±äĖwŖMŚĶčS¦ņ»+ļ ŲC &Ū¶).Ģ£(?‡y÷_]oٲŅ"(-6׉Ž X&:6”w""""”¦€ˆˆH įńTŌŚĻäk’מŠņ2rvnaĻŽMģŚŗŽž÷ Ÿ¼ņ]ś ®œįæ>–eaY.†ŒĒew½Š`łŅ’"ŹKK/*Čm°i94€ˆˆH3 sWŽÆÆ){ĒęjŸKKŠ˜w’Õ|’ńĖøĆ#HĶčNßac8bÜ\tėV/ż.čė'$§S\OĆ}ÉWļńž QVRLdT į‘Ńäģܰl]ūEDD¤eR@DD¤„eō ¤Ø€«~®uģė÷Ŗæ•ˆŒę›÷_äĖ·Ÿ XWQ~®Ż’Żį‘ęÕ:§Ē€į¬ūķGrvÕn¼Ū^/Æ?õWŽ÷į¦Ž®}‡²rÉ×ägļ¬Už‡’½0.i™4@DD¤ y<_¾ó’øńŽ=k&izPTĖO_¼ĶŠÅ_T+kYƒFžĄ¢Ļßä‰Ū¦ŅwčRŅ s³kėz¾xė†9µŚy©Żųč?’ÄSQNb»ö¤eō ĻŠŃ7é2ń6÷^rcĘO£C×¾X.…¹{Xōł›lZ½ŒćϹ¢rNćξ”Ł·Mćž«NįŲ‰“œ–AaŽV,ž’ļ?žoÓ?0Ło”iFƏ9“3ļ½š ÆĪžU¹æ[惹üž—xššńÕŹO¹į"¢cųń“×XųéėՎ%§wā¼?<Ą Q'V۟ީ'§N»÷_x˜×žü+cĘO£ĻŠŃōr—Žł<Æ=łWޜ{Oµó"£b;ń&̼­Z¼ē]s?o̹›’ż•ū“R;rń_Ÿå‰[§īÓó‘ę³ļė‰ˆˆģ™™™ē[–õÅYQ^JYI1Qѕ]ķk*)ĢĢ~uńz*ČŽ¹…‚Ü=Ä'„’Ҿ³™„æ —šˆHĀ#£«•÷T”³cóŹJĢĢü¾sźS^VBöĪ-ä—ŌŽvķ»T;^˜·‡=Ū7įõz‰KL!±]ÜįćõzŲ¹i %ŅDĒʓ–ŃĖ墨 ·;‚ˆØč€ēµ[łŒõß½ °}īܹBˆˆČŽP‘Fp‡GÖŁš÷©Æįļć sÓ®CWŚučZ¹Ļ²,bā“–s‡Ó±[æFÅEz§žuMH!6!%Øŗ\®0ŚwķSkL\b£b‘ŠŃ$€"""""""%DDDDDDDJˆˆˆˆˆˆˆ”9( """"""rP@DDDDDDä eEDDź`{½lX¹€Œīż¬{­ūmVPZ\DJūĪÄ'„ÖYnćŹ%x½ŽÆGū.½kĒdŪģܲ–›×PRT@X˜›ųä4:õHTL\½uä²yõRŠ rńTT—˜BĒīÕƈˆˆ“JˆˆH‹`Y–]łĮ¶Į²Ba¹\,xc_¼õ Ē})ē\yoĄrW.įžKĘ›Ā­sæŖ·Ī{/=žŠņŅÆŻļą#¹ö”·Ŗķūłė÷łĻ?nfǦյj†ų, IDATŹ»Ć#yā¹üīŖūˆŒŠ©v,oĻv^zäF.xƧ¢Ö¹ż‡Ćäė"-£Gƒqµ%Ex½bāCŠˆˆH«¢€ˆˆ“–eķ¶m°ĮS ī˜Ļiē\qĖ.ąÆ<ĮĮGŸNŸ!GT;^Q^FÖ½—āõT0åśG|›īń”“šŃ£N›^o¹”ö«}^½ō[ūÓy„GD2vā%tļ?œŲų$ ósČŪ³>y•/ß~–üģ\~Ļ‹•ē•–ńąNgŪśå ;r<;Ž„ä4"cāČŁ¹…ß~üŒļ>šĻżWžĀ¬gæ%:6”‘OØłżėĻē³fŁw<śž¶P‡"""ŅŖ( ""-‚eY[L(Ķm1 €ČčX¦’éqīæźž½ļ žņō—DDU xwŽlZµ”#OĖdČ'×[—ķõb{½¤eōą¤óÆiToνÆ×Ć„w’›žĆ©u|ģÄKxąźSYņÕ»¬_¾ˆnżą»ę³uŻoœtž5œuńķµĪ;üäóé;l4ĻžķJ>{ķiNžü‡FÅ%"""­‡""Ņ"äå孎‹‹+bķ=+±b;†:¤J½ā¤óÆįŻyšŚSåœ+ī`ÓŖ„¼;ļŅ;õdŅåw7XĒS@xDT£®_VR̊Å_Š„÷ą€€0w8Ēž5“ÕKæåēÆßÆL¬śÉ I8ōسꬒšq“yéћųłė÷ƒNäīŽĘ’Æßgזµ”ęGrZ'†9•äōNµŹēeļ`é7°cÓŹJŠˆŽM C·~ y|µ®üW.aŻo 9lģD¶¬ū•_~ų„œ[8ö¬™¬Yö=9;·āõxųüͬŹ{?bÜäŹ:Š óųõūOŲ°ņ'JŠņ‰ˆŠ!µcw:1`l""" %DD¤E˜?~ńōéÓ?&°s t9*Ō!U3>ó&–~ū!’{łq9śtzō?”¬{/Åöz™~ĖDFĒ6X‡§ĀŒæˆ ¼¬„ķWS”ŸM˜;œ„”tR;tĆrU_¤gĒę5x*ŹéŅgH½õūŽoŪ°¢r_a~6I©ź<Ļå #:6‘­ė—7x?|ņ*Yw_ByYI­c’}ģĻL¹įFxnå¾o?üĻß5„%E€i°{*L2$6!…Kīx޾ĆĘšó7šśSw°ģ»X“ąĶŹ:ś 9‚y÷_]ķZ¾ĻQ±ń• €uæ-äŃΦ w71ńIåēT^÷‚ėāˆquŸ"""m""ŅbŲ¶=ϲ¬ äoÄŽµ +u`ØCŖä`Ę-³¹{ę1‰šČhR3ŗ“šŃšČ(,‹ŹĻķ:t5÷āõ²aÅOrĢ4üčŹÄ@˜;œŽƒēøI—ѾKoŠœ^"""õ‘–Ä®Pša/ĶĀ<Ā«ŗ×Ū6„rĄŠņ²ŹmƧŪö}®/Ž¹7żė#bRj•9nŅeÜyįŽyö’;ńÜįx<Üį‘õÖļÄr¹Ø(/ÆÜ7ģČSrÄ8}ž&·œ;Œ~!1µ#‘Ńäeļ`łĀäēģ"½SOvl^ƒķ­’~¶¬ż€.}Gč{š‘œtž5$„gfųPkõŸŽŻ`÷¶ ōph垃†]oX.į‘ģŲøŠŅ’¢ZĖ!žxīUœxīU®7->Œ£śD7“’ŪĶ™3ē-ą'`¾eY‹]”ˆˆHˆ( ""-ŹÜ¹sæĶĢ̼Բ¬§É߄½šQ¬ƒĪ…p§1W^²Ų6¬ų‰7ęÜEFž6v"Æ?}'ÆĪ¾=Ø ’R;ņÄg¹õ–i×”+u:_¾óW.”Ē€C‰ˆ4“–Öß#¢“øŪė%<²j’A—+ŒKļœĒ§Æ=ÅWļĢćū_Ęė5 …ųä4Ž8žń™72÷®‹Ł±y ‘ŃõƾP\`āOJ x<½SĻj« åē`Y’%šøūüÜ]@õ^ Šų‰}Ž>ć"Ž’÷C\;¾iz’’މ¤“N¤¤w¢sÆA >ü¤jC źébLŸ(ŗ¦ø),ķɲ-eģ,“Ż;וž2¤säÉnžäµķW-øŌ²¬ķ{°ˆˆH3R@DDZœ¬¬¬9™™™Q–e=LI¶Ū^ü/Hčl–‚ķ+¬Yc*+)ęé;.Āėõ’yóæčŅg?óĻŒ#ŽgĄac÷ŪµRŚ›{ĶĖŽ@TŒéś_\Xņ ø0Ø=W€+ĢĶŲ‰—0vā%Ų^/ŅyDDÅT_Z\@dTLƒ½ ¼N‡ˆČčzĖł”•eŸšxL|ķ;÷&)5#Øś2įāYō=x +}Įžٳc3˾żˆÜ=Ū°½^ŗōĀ}Ų`‚!%ÖÅøA1”yąŽ·²yoi1åŪw؊p[a§į²cN·Fڶ}“eY«öĖMˆˆˆ4%DD¤EŹŹŹzlƌæŚ¶ż$Š‹¼MĪ;{VJæfgž?ofŪ†œ2õśŹ%ö2ozŒ;.:’¬{.åÖ¹_—Ų®Ž:ž÷ņć|üßqĮ¢’”ĒÖY®¤Ø€°0óĻtZ§žäģŚVoż9;ĶdiŻ+÷½;ļlŪę”)צ›|ĶĘxyY Ū6¬$£G’zėˆŠŽL2"™ŚKźåēģā«węŃsŠś 9Ā$ l›ßß6·ÖźMĮ²,<”rīŸņŅbŽzę>Ž{žļ,Zš&#ŽŸTg‘n‹ݧŠĖeĻļb{ž§V™² ›’žXČ·kJƞ˜š–žĆ;¶mlYVčŗØˆˆˆ4@“ŠˆH‹5gΜO Wڶ½¤ņĄŽŸź>© üōå;,xc.{āŌ©7Tīoßµg^ōgrwoć¹’kxlyTL<»¶¬cóšeõ–Ū°Ā +OļÜ 0C’Ó;±jÉW•Ɂ@–|ż=V¹ļū_ęē ‹æ¤¢¼¬ĪqśžŅ2z°sóŚ€Ē׿ś#Æ3«Ö±šČh†3€][××[÷Į]#‰ ·ųĆK»6ž«]3»‚k_ŚåvAoąŚ o@DD$”‘mžüłesēĪżGVVÖP˲`ū"(ŚŃ,×ĻŻ½ēžv%aīp2o~¼ÖņqĒ}½bńēoUkxęģŚĀū/<ėo?[¹oŠČćq‡GņŽógé·֚pƬ¤˜wē=ĄņEŸÓ­ß°Ź€eY1n2E¹ą“Wf³ą¹¤wźItlO9¹»·“³k+–ĖÅŁ—ŽI§ž|&©Ż9įÜ«ųąßsÓŁżIėܓųÄT*ŹĖŲøj %EvÜŁtķ;€¾ĆĘ0ź¤óųęż³ä«÷čŅgŃq‰ä²iõRŠņs8śŒ Iw†9£Ļ#X“ąMīøp4ŻūĻ×=LZFƜ:•ĻßĢ↳śŅ±[?ā’Rńz=lß°’[ÖҾk>śŒ:ėīč&ĀmńĮ/ÅōN§WZ8Ūó*(÷Ą²-eŒģIn±—  ķAq™ĶĒæóĮ/Ŝ>,68ų6č›iFŹR‹ˆH«±hŃ¢²C9d0Ņ\(Ž…•:,ģX%{ ¶#Vź€ź'nž*JHģŲ—„öĮ74×’¶õĖÓ{ŠH&̜…ĖųŸĶŲ„RŚwʶmJŠņé=xå%Åäeļ kßa q\eŁ.}†pŲŲ‰ÄÄ'ār…QQ^Jiq1ńIō8‚c&üž žųÉ5ŽR‡¹ĆyĀ9tč҇šˆHJKŠ(+.Ār…‘žŃƒĆŽ›ČŌ„× ‘ÕĪ‹ŒŽeō)SIIļD„³,^qa¶ķ%1µ#CGŸĀy×<Ą!GŸōspč±tķ;“rBĮĀÜ=„¹ĆÉč9“νŠÓgü©Śx’acN%£GlƗ¼ģäķŁŽŪN—Žƒ9eŹuœtŽ5X–Yܱ w¶m3䈓‰Oxżīż!!9 ŪkSTKYq!‡ŽHl|2ƒ?™ŽŻ¶½äķ!g÷V<åe“ėŠ•1ć§2łŚæķLŖHēd7]Ū¹yšĆ\ŽģÅėJ‰wŃ»}8=ÓĀY»«‚>é$F»ųvm)+·—sTß(–m)ē‚Qq’»żöŪ—ż0EDDšQ(—RŁ+Ó§Oø€„®X‹½īCŲ±ŚõĒ”Y­¼żķ½P’M—CĘÓiČńͰ“ƒ2"8¼w£ļŁB÷T7q‘‡õˆbw‡H·Å{ˊŁ# ×fńĘ2vx?$†OW”šŃµ2-Ėz&Ō÷!""ˆ†ˆˆH«SPPšĒųųx—mŪW’·ūū &Ż,ŽŚą¤U+,ób“Āhē¢}|›³+Č-öņÕŖNbV(­°Ń#’š0‹/W•Š)©ņ©6‡0|‘z) ""­Īüłó=ĄU™™™‹-Ėś?lO …[ĶĮ¢f(@TJHc”Öik®Æ Gö‰ā…okÆøšÖ’¢€ēM88ÆM™Ėāė¦ŽQDDdoiiµ²²²ę”––öīĮļĶ«½õūŠ%­ZI¹Ķ†ŻåLGLDp#%“b\œ7"փĶK–e6qˆ"""{M iÕ^xį…ģ¹sēžiīܹ]lŪ~0“ž•ę†82i­¾[WJb“‹ŪĻH!¬’Sгøū¬otø«ÄåāĻĶ”ˆˆČŽQ@DDŚ Ūćń\äć)ĆžeŲsÄrž¹³½! NZœ"/ V–pdŸ(=?•ĪɁGLöHu3{jŖgx·HÆĖŹ–emhęPEDDEˊˆH›±dɒĀaƆķ²,ė4Js”` V»žX»Ņb’;’Ō¹ØĆ”V`O”—]ķŹ#b˜AzB=ÓĀŁ3Š‹ŽLš^56vqa»\–uŗeY„:f‘†h@isf̘ńˆmŪWfu€šXČ]KRētüĢG'­ID˜Å€Œ2¢ņ萖‚ۆצ܆ŸĀ,^×øi-”‘¶ČŹĢ̼ղ¬Ūšū·ĪåŽąŠsļĀåahŅŚŲ^?¾ųg*ʊIKK»żoūŪ¬PĒ$""²74€ˆˆ“EvVVÖķ¶mŸüźŪé­(c÷ŗ…! KZ£=뢢¬€ķŪ·Ļq8"""{M i³²²²Ž+(( Lvl\ō.ފņŠ&­†ķ­`ĆĀ·}æxę™g–…2‘}”€ˆˆ“ióēĻ÷Ģ;wžeY'޲ĀV}1Ū¶Cš“kæy™ŅüŻx½Ž›BŽˆˆČ>Ń*""r@X“hŃöaƆÅY–5ŗ8g;žŅB’:–¦Ć‘ŚlŪˆ^gūo_ųv=’••5;”1‰ˆˆģ«Ą ۊˆˆ“A………7ĒĘʰ,ėŌmæ}AaöVŗœHlJFØC“¤({+ėæ{…Ü­+}»>źÖ­ŪC“ˆˆČž ×UŅ€xg{'ß„× ŗų}Ž”ķ‡zc€~Ÿ×MŁĒ5hēl7õ3Ł/®¼ņŹČüüüĒ-ĖŹ4{,’»"„ė`āR»“ˆ;":¤1Jóņ”•PV”CĮ® doXJöƄض×wų…‚‚‚‹ęϟ_ŹEDDö%ŖĢ¦;Ū3'›šZż€ßü>–ī‡zĻ^óūTģ‡zėr5š³ż{ą©&¼–ˆČ~•™™9øÓ²¬Ž”ŽEZ¤ķ–eŻ:gΜ'iŚdŗˆˆH³Ń$€-ß!Ą$ē'%ıˆģNTż ÷q,"•²²²ęx<ž>˜dęg€'Ä!Ičy€/€k£££{Ļ™3g6jü‹ˆH¢9Z¾ Ėœķ‘Ąw!ŒEdoŒžćl’ø+„±ˆTóÜsĻLž<9!**Ŗ«mŪ]¼^o\ØckJ–e= “ÆėømŪ¶×ėér¹r›1¬P*6³²²rBŒˆˆHSQ 4Ö½ü>oŚOõ~X£^½Ķ ŅóĻ?Ÿ‡޵?†dµX3f̈·m»ĪĘ?€e¬ĶŹŹśø¹ā‘¦§@h”c’ū[QÕ+""mG|ĆE ,,,¢©‘ꄥ¾³€Ī@f½ķ@IH#j¼X ó÷PģB=Ūqfe†Ģ3®ĄÄµ·+ DcV-ˆÅŒēĢsźóÖwR|«.X˜ī£ŪŁ·±¢:m§®Ā½¬'Hv~aī³t/ė Ē|Q˜ū,sźŪŪŲD$Ä***ÜaaaĮ-oźXDDD¤yiĄą­Ē4||c™ęŁĄ`°Ó@ż3næ¾ĖÆN}«jģ’§³ß÷s”ß±jۃI>ų$ųķ·žkG`V:X€ič8±ÆĀ G(p¶gc&!l.ńĄ5Ą7˜śV`5UĻÖ·o.0,ˆś†bVsXiouźZY¶0ó .Ę4–™DÕ3=ˆÄ¬x°Ų‰ĒßV§ĢKĄaõÄō¾Sn‰ó¹š¦ĮæÅ/¾|ĢJ·ÜŪŗƒ1«0¬qīu³S×LRgŒ ¢®4ĢXżE˜æ…Ķ~÷¹ĮŁ·xčą|’g¶xÖļŲ-ŌžžDL"²ŸøŻī ’’^Æ·)W‘‘P€ą%aŲéĄuĄß¼Œ¢Óh>ų¦Ńčmz"ę-mĶ7Š1Īž@5ż“8–ß¹u5“·Ćė8—ó3ø3IVSź ¼éü®O øøų{åīn¦ž$W.^ō;ę’ĢjЦv²%²k‰ČžL!Ū¶Õ@DD¤Q ńŽr¶?ž‡yūtNÄ4¢pŹŻ ü±õé¦īsUū}Œycꯨux1IŽ£0‰€>ĄÓĄøõ\I„ų|…YĪlęo#ÓKäL¢LBa pcŗR€—©jüļ^wīĮ7xœŽł»ŒĮō,X,tʬĒ|Ÿ>€#œķ„Ō~&š·B¤y<·ĖÕp@—Ė„"""ŅfĶĮŒ½¶1]¼kŹõ;ž[O]Ó1 9Óą ō†s‹s|WqżÓļŗ#(›čWö‹ĒS1cømL#-„śN÷«ļĪĒÆö;~QuÕgŠ_=«€n ”æ•ŗļӍé¦nc¾ƒ« ÜSƧ/ęYųź;±ĘńÉ~Ēląź~»€Y‰ĮW6PƉÆüŽ{0+u93ÖŽW¾fļˆvTż]8AąoŻnčgŚ“iĆC«ˆˆˆģ_š`ļÜ|RĻń¹Ą{Īv,ĮWo‡PÕõó9j÷&ØéMŖ†/ hŖ €óü¶/Ē4ČėsUĖt¦śZÖczb€ł¦ž‰łV`†8ųL¬§l.fXGvĒó0É#ßõF×SĄć˜æ•ŗ| üĖļó5ŽĒ$ī¦žyŽĀĢ7¦~Ķ„’÷0ƒś“SąJæ2gR¢EDZ—ĖTļ? i{”h<¦ėvC¾ņŪīŠD±4ÖĢxńū0Į†ŲTļśŻT|cźwcŗź7ÄƼi÷éā·ķ?ßkA^’mŖVnØ/Yóu7ž}ÖQ5Væ”ļ=«”ĄØžwTs\žŃ~Ū/’ļŻ’^cžĪö̰‰†”b†€ d "ZAͦ!"""mŒęh¼˜7½ ÉõŪ®k†łę¶Ųł VgŖŽ®µfŌ^H„ŖįøŒĄÓņ¦;;T’>:łmƲ®LĆż ĻjļSsņŗä9q4ō½SŸ’ßQĶÉ}sCT`→D‚ž Š~T%—¼ž¹ˆH ąõzŻ–Õp‡õi{”h¼†ŽūģĖzšĶ! Ó]¾;f¼$Ģ\1˜™źć0cŠ›ŗ[·’<5gąÆĻ’œŸšüĒ­7f­ś˜@}=‚żīėšDПļŠ†ŹÕÅ×# ‡śē¤šē’¼£ėŲߘļįēGDZ ˲‚źąv»Õ@DD¤Q ńZū’uĄ,7–±üš’Š]Ń ˆ½¬ÆŌłķĘ<—Ņeöēwļ%øDA}| ųTŖ‰VŒßöžžD¤…²,ĖmŪAåØÕ@DD¤QąĄŅ3k~/æ}%˜·ßå˜Õ *0o¦ó1“ž³ģ[Sń’Ü ģ½­Ļ’¼Ö2™]PońźįŸšæ’`‡aˆH+ģ€ŠŠŠÖžš‘”8°ÜDUć’Cą:ļ}{“FTżmsā~ØĻ’Ķ}l„jó/[Vg©–Å7qįzĢpŽĘņ’Ÿūżż=ˆH ģÆ×«"""mŒ–³œßłĪvAē4õŪp’j®K_ŸīĄ‰ĪöץĻζC¶1 ßŪš"ö½k~sńĶqMšóŌÅ’{HjÄyƒØZžšC`ķ>Ę!"M,Ų!QQQź ""ŅĘ(pąˆz:Ū_\ćšžmšĢ÷·ŒÜ‘T­i?ŖĄVæ2I(ų®½­ē„Śz`fāBĮ%.ā€ĖżĪ÷-čßpoĢ÷p&p‡³=%DZ<Æ×Ģ4€ˆˆH›ćjøˆ“ ū’°ń?7Ų.īiÜ[ō½Q¬p¶‡|Āaßö&æķßü¶GYWO ŻŁ^ä9-Į2ēw0$Čs†÷:?'śķßLÕŖGü²u}žü_5*é(b–eõßavv¶zˆˆˆ“1J“|ž]»;ŌYŖaE˜õéĮ4jąYĄm5>7•·ßįĄ-A”O¦8Ū„˜!>ŸQ•ą˜“¢¾ż¶Q¾„xĖoūv‚k“óŪžÖoŪŽq¶;—QW7ą4g{°ŖŽržĆĮ|"Ņ“‚š`ąĄJˆˆˆ“1J“|žoUļŽ¢źmuc}źüī:±ļ«ˆČ^°m;˜ŽY³fµ–łPDDD$HźŽŪņ½‡iGbĘ{ęģ·©zK’× ėŗÓ@ 2ŸM˜Fs¦Įœ†éR°ĆłÄ’³wŽįQUi’;3锆 ‚€Ø ŠŲuc”„™ĮŠb[]żtw®m];Šk„$ѕµ®uE±bo(( JƁ2iSīłž83ÉdŅiē÷<ódī¹ļ=÷›äĪ}ßóčŌØOQ3Q†éOŅ$a IDAT£žm‡’eR–CeƒqWļ\ŖŠˆ2ņAų%ØėZčNśŪŪŠŃH”Aż!Ź(?Å’µź~uŻ:Q1‚C×Bęūxøeō’É’ņ¢ œ ”õĄ}5čłŖFĆpæ>ßGąoųc”cK£Ńźā|Ół’F£Ń“Ct@ėg ŹČ;2ސüĻ€‹ØhäöB„ŒzSnü’L¾÷o'ķk.F‹ ”a›HåÖ’”ŒüU̵Åš ćEśē 5ž7ӁĢźŽ’üŒA„QÖDTˆ~g*ž­lE]ēź"ž\CÅbŠVŹĮĘæ^@9j**)KØXŸšæĆ„F£©‚:ÖŠį’F£Ń“Ct@9K€Ļżļ?®b’uØJõė8ßją ’ūÆŖŲ’gTųtIūBY‰Š8UÄ­3Ŗ8_!óø‹ƒĪY]5ū׀w€ÓQaöXŌĆ^>°Õ%ą ’Ų£”_č}ß :ß'uųµ±xš?µzķׯ °xŲTĖ\»€ó`<*z" uĶ‹Q+äŪPŸõGŖÆ ’õ’Œw¢ŒåŅ*öżåL©½—ā— ó[Ģo(gMo`*læ źŚłPõ¶ >Ėgž±šxÕaa"Ŗ0c_”ó$š{8€rš¬¢śĀ”üŒŠ$9åœéćׯA ŃhŽRJkŗčF£ŃhŚ!zN£Ńh4š„ŻnæEq-b¹ŁŁŁõi ŖŃh4¦  S4F£é@Ō%@J©#4F£i‡h€F£Ńh4!D­E…ŗ€F£Ńh4ķ]@£Ńh4šDŪź€VƜ9sX,–RŹĮؚ,Ń@‰āy)å5Bˆ!Y)„WńÕjµgffĶqša !ŗɖ !VdeeŻDP}»ŻīBüM$[ܟżT°nN§óÓ4†aDÉī“Rޘ““óf`lžüłį.—kpF°#JJ¹ŁēóĶ]ŗt錥ŲģŁ³»Z­ÖåĄh!„į—3ļ,ˬE‹•4¶ŪķƅYBˆAsz¤”ļĘĘĘĪ]°`AYM§Óy¶”ņ!DYKeÓ4K ĆČĪŹŹŗ=ųs9Ž«€[…±AóBü=++kqˆģƒĄL!Dxģ!ĵYYY«céééQ'858GJ¹QJiĻÉÉ)+˜›––ÖÓb±,ŽžĀžkš„Ļ盽téҲn>sęĢ9Ī0Œg„}ƒÆš†Ķf»"33³ģŚįpœüSŃ%H¶x:;;»Bg)‡Ćqp£":čzå !ž–čźCFF†±uėÖĒ€T!DXм;„”órrrŹźk9ĪX)å`BHDŅzŸĻ7gɒ%›sēĪķcšę2`XŠ5šŸŁl¶Ł™™™‡‚ęgšęæ Ćčt~7šŠĖåŗzåŹ•¾ Ł‹„”÷ !:ɏggg?r &N)åA!ÄF`ƒ”r}NNNuõ¶4šVŽŠh4¦Q—Šb‡Ć‘DH&§ÓkĘgRŹ»€YØ"·S€iRŹåĄX)ebą$I)S=όąy Ćx "ŪMJy£Żn?1 —šš)„Xō ‘M·ŪķeŻtģvūp)åmBˆī!²C„OŸßår]č׿kˆģ‹ÅrO°¬Ķf»U°øs\g`Š×ė½¾ĀEā`LȜ]…3 ¦˚¦ł$0$XÖÆūmiii#réééńĄć@Jȼ}¤”O¦¦¦FdēĪ{Ŗ‹N·Ł£„”Ÿßėõ^†źĘ“"{¢āΐß×MØā¹B®ĮŁV«u^ˆģżĄØŠk8¼^ļ4*ņ/`PˆląĪ“““Į”Ė/æ<xčr½ś’ŹČČ(»—lٲådT”äy1 摱“K)ē„^)åxĆ0žņūś?TQāąkŠ8×ćńü1dŽ…#BΟ \3%HTH)Ÿ„Čöīw8e„“““ĪĄ[@šāz`!šžb§Ó鼍¦ ¢#4F£éXԚ „Ō€#„Ó錦K)ĻFµUķźp8>‰‰‰™X¹–RöFu²©Bˆ¼”ŠķÕ €aƆy¶nŻZ„W![TXXX¶¢n±X›¦é£b›Ų*Ļ'„Ģ«®EØ®RŹźt­ĻēĀ0Œ ūüĒö«BŌgFYĖe·Ū]*„(⫐u%&&–żH)”®aU®ĀłMÓ¬ö„ŹVń9˽>Bˆ<)«n0dšfU׫[¢žˆˆˆ‚ĄFqqqqXXX1*Ś$ōü‡322‚» å‡Ź4D×PŁśžĶT'ņw Q„BŪB”†QŲ°Z­ńRŹČ*ä )åM@…‚Ŗ‡ć2)e?ąæ999?V©ŒFÓĀh€F£Ńh4Šz˜3gĪiRŹ—€ø] '¢Ś­’ż³Óé|EJłĄ+„(0M3ŲoĘż¦ižlFĻą ¤”Ÿeee½ßmBˆų 9SńRvvvYčyFF†×įpL® i÷!žZ¹req`lńāÅ[ķvūEBˆK”ś~Y—Ļē«`åää¼m·ŪÆ6 ć”]÷z½ŽŒą1—ĖõxtttœaG…Čnp¹\ł|¾-Ėa!DrČuü0++뭐ć/B„†õ›RŹēsrr¶éZāt:§I)Æ NW0MÓ-„XRŸ••µĮn·_"„˜| LÓ`šQUū½^ļÓ‹%貫‹a“€ͬ¢FS'“@£Ńh4šDSt €&`īܹ}|>ß_…³°āāāõ©©©£V®\éHII¹cĖ–-›…Q‹å•ŖŒ~FÓ6XŗtéĘōōōn·ū,Ć0fK)Ļ"€ƒV«µ‚ӥ߯ svvö·-£­¦#£S4F£é@8ŽeØJģ5±:;;{ņ‘Ч"œNēMžœīؐ}ò³³×·€Nęb·Ū ĆćńxÖś£˜;wī9¦i¾Š*œł¾”ņźąöMs£#4F£é@!¬ÕUąBG4§Óé”R>PÅ®ļūōé³ńˆ+¤ŃhŽ8999łų ycšęŔw͘,„ųĮn·?\XXxWpM¦¹0jŃh4švĖd Ż’×ȹˁK«”FӜ˜¦Yk t€F!„ģ2“SJy½ĶfŸ‘‘”+MFńA€0!Ä­±±±/UwŒFӔh€F£éȜ¤w7bd”Ś"ż½Łęb*pU [ӆiēUŚHm>Ÿļ_Ą·@š€×ė’““óXfffQ «¦ŃhZ˜¬¬¬LÓ<Ų<.„< ž­9čFӑ¹Ļ’zµ‘ó܅r&Ü ü±±J5QĄą©:æ¦ķP—ķØĀét¦š¦y“"+;;{;€æŻ×q-¬›F£i„,Y²ä½ŌŌŌŃŃŃ7 !nGÕ YDÅȍ¦YŠF£ią ą$`bä{ćżļ]Ą('B *2ė&T*A‚ģą •f0ŌæļąY`:Šõń5š* øŹ7Ü ¼<Œ~Čč°H)­BԺȤSjaöģŁŃV«u©”ņB!BˆĄ–ÖK£Ń“ üŻ@ī;wīæ|>_׊B€ÖuėÖɕ+WśZHEM;E§h4MĆ9 x øųµŽĒ<2ž’•vp Ź€’›’ ĄŃFÓ0†+Q«’ŸÖćø³€KwƒĘ ¼Įؚ’ Ś_ü/h{ Ź `+*!‘Ї‡ _ś·ÜØHMĒ„.ßż: ęϟīr¹>Ž BÜć_ŃÓh4šFašę­@€”ņ»Ż>?''ga «„i'h€F£Ńԟn”‡Ņ?Wć"PFśęńÅžذż PQāPįżžķu<ߛ~żŽG9 v_ėź”³¦żQėwæBGTCAAĮ Bˆ`ćæpdeeÕē^ Ńh4Õ"„ųYJ9Įæi!žt:]³²²2ZR/Mū@§h4Mż™ƒrŒ^z]…ŹÅĘŠšæjZ]5P•æ z­FE˜õŌóVTˆņ*”‘2xH«ē<šö…nŲÜn÷OĄ~’fišēdggkćæu‹JŸŅhŚē!ÄŪĮcRŹ;œNēŁ-„“¦ż #4¦ž|dT1.€~(£}Kū‹| Ų4~ ŖĄ0`Ŗˆ_°AŃų P[! ņž9T€5Aćw¢Ņ–Ö2—¦c·Ū !† !›¦9D1õ·×³¶c„”ÓG¼ā”CjCJJŹ:ŻĆV¬X‘—––6Ź0ŒÉBˆ–,Y²½ö£4-ĢÅØ‚­jŌhZĖ–-+LOO?Ļķvg !fĘ„”µŽæ5šŚŠF£©ž+Qż-ØŹūĄŸ€ĻżÆP؂}’ØaĪ÷Pžž ģŗ ņł?ōļeģē›Pa’Ž¢f@0Õ`°ĶĢØĀƒQégKӎ˜3gĪĆ0NN&£¢TRR‡Ŗ’BtfHYŽ,bėÖ­‡ĒGĄūBˆ÷SRR~ĢČČØoTJ[EŌ9ĆßęoYĖ©£ŃhŖcęĢ™qŃŃŃŃ>Ÿ/ŚėõĘX­ÖC>ŸĻeFaVVVAKėX233=Ąl‡Ć±øų222ņłVKӨ߁F£Ń“O2QóŻ!ć÷” }‹2¬ŸC­žoŖfž‹Pi§Õp®$ą!’|]ĆØ ž· ¢ĀQFūŁØtŹŁš'TTĮ|`°’g0 @0å ꯍJUH PÅ’ä?Ʀćp8z³PiGÉsK)w !Vų|¾„K—.]{$Ļ}¤HMMŒ‰‰yux±OŸ>—t §G{b.ŹA{Ŗ#J'ąT§”"æLšGŹ’6”j³ģņoGNą8ŹŪŖ.ÕŪo>FŻ» Z¼ž‡Š…Y5M„Óéģ!„ %„,„ŒśŻ%×åx’żk°AJ¹ųÅjµ~³hŃ¢½ĶضFÓ*ŠF£ŃhŚééé6Ēs Ź 9…:Ōóć”s‚$.l6IxD„a@©[½JJE%’y‚Ü<0Ķ:?&ü,±ŁlY™™™‡üįZ‡#Uó!ÄĬ¬¬OZN#M™ <ü¼‚ЬJGģ³€h`-šš6*Śź,TTÕŃ(‡é2 ?°ՙe0ŖÖĖTŌÕÆ('ĀTĒ•£Pį³Q‘_šFžžŽÅķv3 c<0Åoü7‡ó°JJ¹Ź4Ķ÷—.]z ĪŃhRSS#ćććūöźÕkƒvJjź‹vh4FÓ°Ūķ†aĢ•RŽ ō©NNčŃU2¤æ¤_oIrõ «Kéæ |&ģ? Ų³¶ļlųŻ`ĖvÆęGĶ|ą ›ĶöXfffnżĪŲŗp8s€œ ”‹Å2hŃ¢EuķĀ”i=ĢEµ[ķ…ŖÅ*RėTĄTą^”1ų ·æ£R“^Dµ}½åDš%pŖ+ĢÆĄkĄAūńčĀ« "5552::zš" å9ҩ˦ā3`iDDĊ… ŗŽšł«Äįp$”žöśĘÄĜ¹`Į‚Ņ–ÕJӖŠ54F£iÅ̟??¼°°š)åMRŹnUɄ‡ĮČ”’įC| é'‰‰nüy-tK’tKRsŸ‹I©~Ż*XæÉą«®Jė Ą_<Ļ N§ói«Õz_[tĢ™3g*<¼ !Ä5ŚųoÓl¢ÜųĀćßU'ezČ1‡ń×Ņ@EܜŖÆ‰Ŗß2Ō’>Ą*ņ’8M=°Ūķ§†į”R^ˆŠĪh) )åx`|qqńƒv»żE)å¢%K–|Ś‚:!„}īn E«ljBˆ£KJJ^]±bE^Kė£iµ9Ę«Q’7žż=ļQõ\Øö©ż@•ų“Qžg’F9ņÓQXāQ_īi–OÕĘIKKl±Xž¤räE[ćąźģģģõGšœĀįp¼Œr\ „<'''ēĶ#؃¦¢ęˆššjILLģźv»“„”––ÖGsd°ŁlEÅÅÅ;Ÿ}öYŻv°ęϟīĻå¼6tßą~’ĖĪm=+žµQX o¼oįƒ/ Ŗˆä]m³ŁffffīnÕ4“ŚnEUų/D„,Fż? ą`*°U; Uż°åXr z  µMCÕŠų™7o^Lqqńؼõz–'­H×Ī’nIb§ÜY©Ņ•"# Ÿ}éŅ„šC7¦”h€FÓ ń;.d[r8ĪéRŹēk˜ʄ.“8›”~bé~Žß÷æŗ~ żh³Ł&vD'€Ćįø Č”¼•!żR/)=ŚöŖuv 2Ÿ·°yk„Ē²³³o„Zj9ĪX`kĄi Ųl¶n™™™•Ėj4šza·Ū‡ !ŽFÕD؃ū™œ=É䨭ė>øn“ŠdŖāžU[„geeemh.½8ŽŃĄ RŹ(!„#;;ūę>§¦mb““¦F„”āńG-»¦„©¹sēŽ’R.¬ń¶ģ}Œė¼ž’īś/é ĘĖą˜AōŽźM¬5Ž0£ƒZA> ½…ģ+ŻĖʂģ)©°šś“Ķf›Ÿ™™éi)żš’ŌŌTKLLĢ’€É±®UĪlõ±n«˜&,ś·…ļÖW°öJ)G6Õjü‘`žüłį !® håÓb #,:‹­F{HÓĪšyÜø‹įs—Kąy)弜œœüR­Ł°ŪķĒ !Žj¼«EG3ÕĖŠķkaś‡ŸK^“P\Z«y•ļół&-]ŗtmSė0gΜń†a|4tZvvöūM}MŪF;4šVH-hEN‡Ćį²,ĀŸ’ [5Fü7y_óĪŽwRi‰dRŅ$F%ŒĘmÜõÆi2¶meÕŽUģ.Ł €āķ”””sŪCJ€ĆįøU  €ųXÉ-WųHŒo_Ą ÅķĒ—XC«kæÓ§OŸ©m”¶æĶŁĖĄ8kx4݇N¢SŸįD&toaķ4-IIA.yŪ~dĻś(-Ģ oRž›““³©%ukJü‘/I5É%ĘK®ć£[Rū¼÷mß-xb©•Ć®ZEwI)Ēēäälijüß7— !ŽHII¹¾-ÜC5GķŠhZ!up@+q8ĪæJ)ļź։«Ģ«Rę÷ĀßxnŪsH$]Ć»’Śūbl:2VSŸōńĪŽwų.ļ[„ ²ųŹ~ IDAT²²®maµ…ÓéWzzz÷­[·žR\\|Ųét>Ԙ¹¬Vk0RAæq©ō{‘6ž5•†•^ĒžÉÓębV€Ž¦i¾ŲZ Z­Ö…Ōbü÷ī®RžŚ»ńŠ9nŗÜG®5Ė !FÄÄÄ4źž£Ń4ķŠhŚ6-īBŲ,FÕĻ0ŸųœB_!†0˜Žó""-µvŅh˜Śż’ĀU$©āžŒŒŒ6ł}e³Łī$Øöą~&g¬£1«cŲ É*\«ßøh҈EĒs%0RŹfΜאyü-/č1| ÉCĘ7’švIbļcčwŅÅH)ĒĒĘĘŚ[V£ĘįOL«I&©\“Ö1ڜˆ‘\k÷Ņ)”VgļUv»½ęźÉMÓ&Ø4MZÜ P¦4łźą—Œˆ?–äˆäZŽŠhaįŌ®eõņFoŪ¶mRKźÓœNē±BˆkŪįąL51Śń7ļžÜ~ßęĀēkx„ùS|ōL.?^J9ŽétĪi ż!N Ś,p»Ż… œźQ‰Żé5źģĘ+¦é$ <„žG „¼sžüłm²Bäå—_~4° &™øøÖī%®;•ĢOóÕźųB<åt:ū7õłķvū¹‡ćS»Ż¾(55UƾhŹhĒ!õām`sÆMĄR``Ė©¦ŃŌ dĮƇ–W„ßBģ(ŽN±O„¶I<®…µŃ“5Žīv4S§LeƌÜrĖ-OI)•RĪ’R&¶“nu@H)T ~Śdń±• ćĶ[ ˆčµœū’©ÖIßY½‹ˆ^ĖłvķĮ&U¶*ņ¹).ńUļ1|%Ć&TlcżżOyźé=ņ?}Ņ+8XŚąóZ øģ\_…T)åƒiiiWōę¢Ė¦3éč”ō“ –Ī–IÓÜ%„¼SJŁjūF:Ī “Ū=ŗJNŪ¶B’{XÉ *;%N›ĢŲ1 }ßõąģŻWLĪXóęT÷«ŠGrāČ ×«³a75jR?ÅÅÅć[ŠPC[d`±…“Ų»Ęōg¦ѝ{_–$~~KźŅ‡˜X“Ģ„Ó|ōīŽq’żzK.<«f£ā ‡ĆqQŸ:ų>§C”4eh@9ėĢ×ŻĄÕ@üÕ}C£ny‰¶*ĘŖõ˜†ĢßPD#×“MZ•ą°ē0IįI”›ŽhjĒ–`£×Ģīħ8s1łg’‚ó/¦`¦SäqžķŠ…—ā~ńÕiš•^ßj)e|Kė\RŹŪ‚·gœēĆŅN¾qŸęd?zR…±ß¶ŗ˜<±;—ž”/£Gt"ĢÖų{į>¢‚jé !ę͘1£)¢?*”!3MsUC&‘RŽˆķŚa“¶5M[ ¾ū`„Ƕ°*õĀ’xM2ĒŒݶœžĶÉ©cMF ­Õņȼyóš$Y"##Ć+„X44>55UŪ@;źĀn’Ļ@ HŌŹū^ 0_’£Üp%š5ppp[€s‹€m€ (ōĻt °Õ#¦Ų¼Dy©gƒĄXą ’ūAĒہu~½Jżū—RK_VM»¢Õ8\^Õ]+ŚŚ“’4õĘ3č~Ao‡ē\Nń¢ĢÜd|ŪvPų‡p]{“¦ļD|¾K)[Õw™Óé<Ų6Čd@Ÿś­‚™¦dÉó›Iū㧾řæĖŻÆÅUč©$»?·„»^Ėy³Žē¤©orFź»\sė|ńĶž rs®ł„7ŽŻĮ+omć"ēœ4õM.“Æęѧ¦¤T­NķŚSÄĢ+?fę•cš’—ßÜV¶½{ÆJēłė}ßqßc?šÄā_˜yåĒģÜ]ÄWßē–É~žõ~f^ł1ļ~ø«’¾9wģ*ŖńÄĘĄ)c+¬šÅEDD\S|]q¹\Æ”"ūÜBˆK—.]ŪĄ©z„Å“…ŒMk$,ŗģo§GMr­°°°{jkÜ'w‘Ģ<æŽY5ķžYxé\óķ¢WqqńMxŹƒŽGEGGi¹5m˜VõŠŌJ™„2¤ōo? \ ÜŒ²€ææLpŹH’p*š=šoąÆØØ‚±ĄĄ|æ Ø°ĒēÓü2×ĆPé Q†’ÆØ°Å+€@XäYĄbą5ądæ×§‹{!4mŠVį0„ņž:7VSĒ&`·RpżMų~ū½FYĻē_āśŪß-X,g­Ŗ‚rčźCŖžßr×7\qÓgäå»9ńø. ĻĖolćŗŪæŖ ·o cĻ~“ĻüLD„…±Ē%Ń«G4'SžšƼµ­Löå7¶qŪ=ßrķm_’˜Θ‘]8TąįÖæCŖS='š¦ŹżĻ;ä ¤ŌW¶mšŹ‰±ś“=|śå> ‹¼ärćóIÜn³Lv`æX>żr žł„Ņg{bń/|÷ćAzvƽ$ųä“$AåѤ”×;ĪŲś]͊¬\¹²8;;ū¬ģģģš¬¬¬k:”²€-¼•6×4)Öņæ&©oq$p:ż…—W·_˜qžIx˜ż%*fœē­Ml¾Óél‡išė‚·…z1P“¾¼ö–dštČXW”ń|5°µĀ?øehXœ€2ä³üc%Ą, °\³eąß ü×?öąD„¼čß’Ź1ąK”£ęy ųŌ?~-ŖHįŹ Ł™ØU’ ū÷¶p”3CÓ18ø1~ÖĀ–VF£© aōŗšmüµNĒøW­Ęóõ·¦uäˆŪåĶ«aݰŪķĒŪū˜ ģ[æįKY˜½Ėg ā‰ūO,÷xM&N{›Ü%ecOfżĀžÜ¾[}.ś–ŪÅ„n'œń,ų‰?œR6žwČĶwļKēNåVõm÷|ĖĆO­gßžzõˆāĶēTüč>ĻrŁżøćęź£“o™ ·Ģ?†į'æĘń£ŗõXyjĄœKšąĀuģŁWL·®ŖõŽżÅ|öÕ~n»~8uÉ ŠŽ”LćcÕ§erP-Ēž¬żčęE”å5éō&MĆJk3DRŹ?Sƒżp±&ƒū銒ź:P2jØä»õÕžŹĆ„”7R¾ø×`ĀĀĀŽóx<Ū€`»Ķfū¦±sjŚzY®œp 1äÕ¦Ÿē—‰óæ"€)!/7\ålåĘ?Ą!’Ļ!ēuQžŠU‹ ”õØ/‡ŚŖØõ ŖŠ-U‡ S-ĒkŚ­"@£©Č”HD˜÷ėo`;ńx,}ū`6Kæ¾Xz÷"ģōɄMž†AékoĀj=JJŁÆ„tFQ”öY“źæ ¶v}>Ÿä² *~$›Õ`ęE;E}žĶ~&Ō­‚ńfįü³RX»>Ælåą¼3{W0ž¦œÜ€-Ū]õÖµ&— DJų÷+[ŹĘ^}k;RJfLÆūÆėō ²BmÓ4kģ9®Ńhš»ŻŽ ض%gd\x¦6žk#uŖÆ¶‰+G£Wė333Łl¶BˆÓm6ŪšĢĢĢCµ„éč€ržTe$-F|•ņ:7QõJś†Fź]ͼžÄqUģ &8SžߊæļŽJ›ŒļNĀń npįŚPs‹īN;aK“±ļõ}HS‡6[‚N'wĀõ‹‹Ā m^Ām`šx7žŠˆ‰Į6i"ꁃX‡ĆrŌ`|Å:j²øĻ!±=ß/e·Ż!@ĶyĶLzzŗĶćń\ŲNˆƒ£Ō’a8×ßBÆ[rå¶Ķ½zT 7?˜§Bó’rļw•dæś>ÆWRRź#*RŻž“:GT’³ł öyš·ĘžĖoō7ØŠ©¦ż¢ ĀŚy¦Ÿ„*ØŖßēĶp®|T‘ĮP j9ž *ą¶ZäŚ- ņ—öóbi3”tÕ"eL !YšhžrĻõ ³žiŅ™› kŒ•˜!ŃøsŻ”ūĄŖ&2%’ˆįģ{Už²DŒ&¢G8y_äc–¶®UŒˆžDˆāšxņ*‚k*ŒpC]÷}„µ\õ¦EŲ d©L“°ÓNĮ÷믄Mž„™—‡Ń-Ļź`äš2y™{1rņ·-”Æ4éńx¦]Ū'ėĆh@œ]©æ _U•ō#Ā+6“..ńāõI~ßVyõ¾K§¦Oėƒō§Ü}ĆÜYƒøäņY·!ŸnI‘|üł^½ū„zĻsāHÉ?—o !f¢jźŌ ‡Ć1 U?Ē®ÉČČ8&##£uż³k4­yóęŧW·?:J2ńxżÆTWNēć½5Å%UļB\=žü{,X Sw5MŽvŌNĄčCY!Q«ģ”€gP96g6ā\; źÄq€•V@Rł÷·ŻÆ[(Ӏ—Q)µ9Ś4^ŒAöni=Móø0 O?|h¹­-EI"ūF?*ŽCßnu€šäpNL x[q³:Z _”ŽˆA–”ą~gagN·÷«o6ķ,ä”dq1¶IŃŃx>ś£{÷Ą»kš’H „˜)ełź×‰#¶Ö)Q…č» +‹ Ī’HźAߎ1d?>¾AējnΙҋn]#yīÅßŲ/‹a0żÜ>õžgų“čHƒĀā²›ć,ą&SžžxōęĶ›»Pń»U£ŃTAIIÉ…Ōąh=ķ$“pŻd®ĪDEĄÉĒūxēcKu" ĪAukžč“ń¤  kŌN`,° Ÿ܃Zeæe\ߊzyµ‘ēzUp10UšOĄ}ØŹžĮK<[żū’¤¢ź,Auų—_Ÿ3¹ĄƒØvmüȊ-5•Ń54­’’]j‘Ć6īDÜļØhE÷;«pÆžévSśŅkøß[gĶēøß~—Ņ_Įܟ‹ķ¤Į”%@åų#HjjŖUs€”’ī]ęčŻS…łõ]n„}k¾ŖųüÖ«{k×åU’ųŪżßÓ÷YÜ ķ|¾Ę…óZ­ū„xīåßłĻė[™:„'‰ńõ·¬}L]ś:Ī†““Ŗ{`³ŁŠ0‡FÓįRĪ®n_dL:±įNs)•sóĄĮŅ 5KŚ;§O5Ö0 £Śk^W.æüņ~ē7`ŸŻn¤±óiŚ:@±ŲV;Ą7Ø ü ŒżżĄ9@:*2`;p3š”_f/åmxüó„Ęiž%„J/ø •÷“€ZÕZÜrÜßP- oGåžč‡źZp*ma?š6Ŗū@»G 7‚8­„õhå“ɚõĮg„Ē%Ż9ōõ!L$aL‰° z;z`‰Ržųž—õ(«%°óŁ]ųŠ|ōvō¢x{ „»KI8!ž°ĪažZȞWöŅsf|Å&{^ŚSI—ˆžtšDާy¬/’÷GģŃ1„wGXD™n…›‹Č[“WŠó²Xb,įŹ_ŪujWLæA·ļż”ģR+Āį]ĆH›HdÆ,ѐą+ņQ¼£„ü/ņ)Ż[1Š0zp4 ĒĒŽ5a˜%&E[ŠpżÜ“…ąźŠ;׍{o1i³pÆZM…øõj±1„_<Żņ%!Œš›Ź73±±±£¤”ež‡ jųĆš°! Ē}żH·äHŽ–ˆĒ#łąÓ=<÷RÅ2NėĆŹ×>ā–»¾į¢óśŅ§g4ÆÉ÷?dńŠMLžŠ½ŹT‚ŗŌ9‚·ßßɹgõ¦K§p’:G]’ĒĒeyą‰uģÜ]ÄŹÅ“¤ ĄŠ&UžY¤”“©ķ`€LII9’™.G Óōįóø±…W•UØŃŌ“““žØ–ÖU2v¤ITµ•ŖēĖosłūCkłpĶž2GeDø… c»rŪuĆ9鄮 U¹M%}Œä³o«ū”RNMOOļ’™™YŁ\GLӜ…*ŽāŚyóężuįĀ…-óEÆi5h€āāöżJÅ¢zą~’«:žóæ‚9@ÕÅłB«æDŻĀ}~.Øbü ’«C"„±IˆŽć=nBHžx$’YyCĀ̧jo[C`K°?&K“•¢M…żV„3ˆEāŲ,‘ū’— J÷Ŗžēį]Ć0 ܹnLś; 8¬ń6bc­ÄŠĆ½ßėÅ;”ńm³",¾Ŗu±*]<@Ā tžŌ ÷~7‡¾;Œt›įįŻĀIOD·pv>§ü‚„ūŻX -Ų­X"-øó<ų Õ¹L·z` O§ēeŖmpŃÖb¼‡<~­Dˆ"z@;Wģ*sÄ ‰&ł¼d|E> ~*Ą[ąÅk%2%’Ø~-×ÓüĄGłtæh‘W^NńĀ̚… ƒč;n“FL“Ćht”¤Ęā7FĖÜÆį÷!Ć,[8‘K’ųēĶzæl<6ĘĘ5sāĮ…孝/˜šĀ_nĮ#’ZĻc™?W˜gü‰]+“¬/¹q7žõk&NS²ŒÆŌ™ .ōéĆŲ1IlųõgNīŁ`}÷—F¹oHq*åŽ÷:!„ˆ JÓ(léü’gŗžÆWæ\¶}㣯Ó{ąšŽØžµkŽfÕ O°gŪ&ēķCš&‘Ńq :ö$ĪIū3}>®Ścøś vo­Ż—2’+é?¬ž5Z„%EÜzŃѤŻņ£&žŪŅź“ ,ĖLŹ;VUℤ;}øf/ēĢXE·®‘Ürķpö‹Åė5ŁōŪaÆų•3/^Å«ĖNeņÄīµOÖLtö3¦÷ē”»Ŗz|oʎ”|ömµ»ĆÜn÷Å@ƒk¤”ĮŽĆåru¢ņb¤¦ƒ”šv…a‘›dėJŻn͐O>’’,ķŃ `µ²cÉNÜÜec?ō²÷"vh,ūßĶEś${_Ū @—)]ˆO“±’Ż\¼‡+ē_į¹ļąŠ·ė¤?*ŽŅ=„ģ|vW„®ŻĪO&zp4Ö ^—ÜUŹń?:žšÓĀÉ’,¢-£–;MHDXŪ—ģĄ½ß]a_DĻzĪčAĀńńģ}]„:'Žļ„Yj²cɼ®rĒ…° zĪčAxrÅ6qGŠ¢-Åä}‘O¢3 Mń‚§UTH2:u":ć6ÓvŅX8…›¼¶Bœ0,­čŸR÷ā^=¢XóęTzt+_­14‘Ÿ>>Ÿ~É'÷@ ‘VŽ=&Ć\8­G *o ó—GpćUCY÷K>.įazõˆ¢OļŠéŗ¾vŻŗV^yL'Ö¼9•Į*6š™;sœÓ‡M›QXäeŲQ ,~l<–Z«’^t2ё)|>‰Å"ųé—|¾[{€«C*g¶wwÉ֝źÜRŹÉF}Œx)厠ĶO3y:)ƒG²ć׳ą•E˜¾Ź÷ŗ°īĖU,¼ķRś5šÓ/¹†„.=°……“»{ «_~†‡ÆŸĘK¾ s·”*Ÿ’z5…å©$ß|š ›~ų”KÆūg¹.Żė_æ”1}“^YŌąyÖ¼¹œĪŻRøyĮŪXmk, {&›=†o>x…3.½¶ŹćGŸr~…ķ};6³ł§Ļ™x®½Į:iŚéééQ§ŚP¢GÖ’™kūĪBÖ®Ļć꫇U2žŗtŽ`ŹÄn¼ōĘ6LSb‚>¹ĒääqÉ<½d[¶¹xąŽ1Œ;>‰üĆnžY¶‰5_īć@^)ŃQVö‹cʅżw|ÅūׇköņÜĖæóūÖ¼>IÆīQ Ļ•ö!tJć`¾›ł·~@a‘—wVļdĻ•Źéž÷’YÖĀōŻwńļW¶°u{!^ŸIRē&”ŒsĘ "#Ŗ –Ø„pĀ“·>¬Ś9*„89##ڑ‘Ń0\žÆßNšöŠvhŚØzLÓaHä3ä?ÖŽ"¼‡Ŗž¾”~ćZXė×nĮSĶ|õŽßM̐h¼‡<”īsć=ģÅ[ąÅ,5U.|neC¾: ›Ą° L·YķŹ½é6±Å«ļü@oAÕmō–$’‹| 7’86ČŌ‹ˆH›Q¾ÓēŪÅņpŸ¢rх ==½»Ēć‰l÷é©oCéiƒ{\qq6¦œÜ£AõBéŻ½ŅµB=žžŲW4Z‘VFT\"ć§Ī®dü$§ ĀAiQÓDż®yėY¾żšUĘL¾w’½€ƒ{wpó‚·ųź½)ČĻeÖMU’éó’ńZÖ=ܲp« Ÿ×Ć[Ļ>Ģ÷æĪ=ŪĀ Sr/FO:Ÿ³f\a±ņāSeĆw±×LŸ—{ÓUķĒķ™tļ3„‚ü\ŽXņ~žśēķĆArļL:.c&_Xvī-?ĆkY÷²}ÓZ|>ɽrƌėšä:tÜn÷x!Dµ^įc®’żī×ßÕ¢ōš*œ®ž{Ē%ćńš„‡Yųģ«}|žõ~ī{ōG†•@æ”"#-äv3᜷ص§˜“Ē%3bh".—‡·ŽŪĮ¢åÉz¼øu_¬bóŸ3aŚŗōčK|ēnäīŽJ~nånœ®ĆŁŗį{FČė9÷³ś„LĪžż'’zōĒēõ°ż×µü7ū>Ā#¢8-uż9˜ųĪ|¹źJ‹‹8īUņ(:6iš,ųóEäķŪÉ䋮¢K÷J‹ łńó’ńĢlaį;įņswóȍēŃsĄ1œ7÷vā“Ų³m+ŗ±I®CGĮ_k£Jbc {Rżļw.åhŽ‹­~1śųQ]*E5ĢwWŖEņąĀuü¶ÕÅgoMåŲaå…ā§œ’6÷?öc™ü3Ė71zD'Væ|†Q~Ļžß»8oÖūlÜ|˜£ĒóęsŖ–t÷a/pžY)jø ½ÜóČĢ˜ŽŸ¬Ē*vīĪZń+óžü9’ū`S§Ō½ŽIŸžŖ“Bo&Ó@€Õj}ŁćńĢFK/^ükCęŃ“/“@£ŃhUN€@x¼a«Ż‹n‰š{Ī[•Yč§ õK÷•²=g–h Ö8+ÖXõ²%؈E·ó“ٱt'„ūJ+\ ®Ÿ]äU{zBYjQõu5‘£ŻHŸ$77—ÜÜ\ž|ņÉ]'tR«ū- !*”ŚŠ|tķ,B­Ģ˜¦©!ģŻ¶‰w_xÆĒĶįƒūŲ¼ī &Oæ’'Żdē0M×XR< IDAT=ųr…«cŻ—«8uśœyŁõecǟ6wI1yūUńÓ@q¾m›~Ą•ŸĖ™3Źe7­]ĆÖ ßqėSļŃoh¹a6aŚīM?…5oÆąŲ ēšõū/āõø¹śŽē‰ŽS†į±@TlĖŌQõ ŚÖƒūšTS F\…Ź]æhōżb+"żā›żŒٹ‚ńaaś¹}øćßSTģ%*ŅŹ}·&6ÖVĮųHLPū”p4ńŌÄŚu)*örłĢ•öͼØWßņ9ß’t°^Ɛ H1łicµi§÷ÖyĀ üQOĒĶ›7/FW’׊MsrŖ įŚ–VDSgZ PéŽ_ó‚°¬ńV|…¾*sźŖ+d©x›µDYˆMÉ®ÜūŻų }”ī.7ō]"čyY"ūFÖÉ`–ų;xd„VĀ“ĆĖŗ˜ÅJŽYuŽ¢%ŗī¹‹…bppˆ„v4įa+É?¬žßB/µ‘ššs3ķõzZ¶lŁ¾ęŠ³µP\xŸĒCQA>RšŃ4’ߑŃq 2žĀ#cŲ¶į{voł…ä”A†ŅéŅėØÓńūwžFXDd•ēļ{Ōh~[÷%¹»·Ņ³’Š2ć?ĄŃcŖ]ŠÖTMµÅ;†ōoŲ½.Ņ_0Ō¬ēwv§ÄŹ™ņÜĢ+å/÷~WißėņREDEZ9ndgžóß­,Z¾‰üCnÜn“Cn~ś9æĪśČS߳Ͼų;o®ŚYiæĶj”E8Ō‡!żį§źĖ’«÷„!hć_Œvhš“{€Ń€¶F«pø÷¹ńłˆEX—°jóā揋GXE[š  ¼ßˆ–ś-ix{ K CŲDY}Qż+¶ÕVAŅ]Č’ź>8PYoՑēFØn¦GāÉóŃ3BE„>æčö‡d¤)ŁöĢv¼…>Ģ“Ø~U÷Æn\S#=oĀlS“ئ±$u‚üĆe›=j­DllģŻRŹ,Ė0`ZÓj×ņ$§ Ŗ‡æ}ÓZīIŸÄĄcObā“9MrŽŖj Ō• ®ČąéæĪ&cΉ+ń“é”Ü›¾CFqÖĢˆė”\ćń…‡óp—så)• O$÷V+³®C‰ˆŖ\š<&®iÓRŚ3v»½Põ…¦įõN:łW܋Š«Æ«ół×ūłäĖ}8/X„į øŲĖa—‡o…Ņ%e¤œ“LĘ­°n“b?äĄgó"ieŌ1*Œm˜:™š9|”’ŚpęR[/į”xŖÖ[ń¹|ø+ŻųšČ‹wä:ŠgčI“JÅ•xŖ<ØL*b»ÅÓ)ōEĄc’̽cńX=8 œxm^$YD;$ Ž*ūĮŠd@oµxQ² ŒCń*xķ><Õ¼5^ŖÖW‘8"‘ō±iT®­ĀSéFQ@mTŪیڬ¦|E…’ʂu³K )£SØZS‰×īCeTalg ¶{“CŠįāółbk#@ōDZBI©k‡ŒtćQµ×k »ĆKA‘‹YKBܑ}-‰!“hųażĀś|¾µ?+I’z¶ÜY8ŖŹ‹xķ¾qŒ¾ś^z6Žŗc/ҳŗ°{ćŠÅśül×m ĻĢŁBYq.åE‡(-8HiĮ–}3“C»7q×K’kt=Ī€Įdn°5 Z#¢Ę“:^Oøér¶€XüA„Ruņł"žI’HÉ9’“ărĻž†ŅsæŁĻkļm抋Ū5ŗVR‚žŒt#s§ht^A‘Æ¾?Č ą–I]BĘ6m«h¶’$@o’ē$:¶ ļˆr¤¤6q/ÕjuG`õ‘¬“““,IRŸĻ·|ęĢ™ Wˆņ!*ŌŃ8 0#zf®!¼ąF pČ6ŽüŌ>Į:ųæ–ē©ĄÆ@ 0æŽZmĄW€ Šł×nČĄA’ڵVM¦žB’Ś­€™ŌėļD*p&8żŽ “ˆģæęī€(~ņüćF`4š=ŠØ­ 鎤ūĻ? (¾pNjD.Y_@䋁CęF9ńH¼ńbÅGœ(ĄŗÉŠāö‘0,K –žį¹y¶½6J•¶H…žź-VĢ}ĢÄt!¦«pć|UHĶŽĘ ņ•/Æ@—ŖĆŲֈ±mĒßcõP²Ø„¤‘A…Œ(üŗ”Ń)$ž¶–āS(ūµū{ČvŪ>;Ž<'†Öz ­…G£lY9åĖĖ©XU‰:V¹9,ā z{ åĖė’Ņ„eØĶjb»ÅŪ­Ī]­øJ)#ńŌØ‡ģp$)puŚćž’ĄSkłš³Ż¬żé|ŗvjÅyūŽę2’Qx½ŽĪ „·Yb\šģŅĮBJ²ž>ŻĶuWuD£0}>…_V’–b =µńØ“ŒVF’Z€¢Vą•w¶ņōKٶā"åŪĒ®ĻÖ‘ėēHxė„“JŸ±·V„ §—öæ`Źä®Ü[FĻ»>±1 F=Ų0ĻżéN‡-\{ķµYŠ¢¬U%^’¤µ>śč £h)åoBT܋(®±(€WéĄuž9Ż€E€ŃrHńo³!ŒčmĆü1  !*üėd ģZNę ŒūÅ”`;Bč‚0ŠĻE '³żĒÉDˆŸY8ųģLˆŚ7»€žõc‚@’1«āE$ ^±āò»ā®śģDœ@õöŖ·× IŠ MŌ¢ŅĖ(>ÆĶ‡³PxĻėć©ö÷Y>žŖČŸqU­ŲöŪńT{źķēåą{Ń„éP›ÕČZ9Ÿ_šEAƒ‘>—¼ĻņŃ&iŃÄkPdܕ‡H* W™wYöęČsrąŻƒčRthāŌČzŠWĮSķĮ™ēÄē ?ŽāQČż8]Ŗ87•A…#×’'¦@ÉO„”żVŽ>M‡Ź¤ ¼6/®RWX;DÅ£P0ÆM¼FŌŠHxķ^ģ‡(.gOʼnoų"`„Ļ€½±Ł<VŅ>Z’“ō\|^Żŗ4|ÜхŽcżõ×_ƙ6mŚßöVQĪ~™”Ģvō=õ~ņ ©­pŚEhõ:÷Ę¢¹oЦSoŗöެÆwŽ+?9²ĀCtéß`-·!-«#+üŒ=[ž ]·åīį—oŽĢ‘$‰½[V¢Ż¹/0ī|^{·üÉœbüė 1ģß¶·Ó˜›Ż„?>Ɨ…Ÿ¾Ā諞…$ 汦Ŗœoß–¬Ī}čÜw >~‰µKæÜ7Ūłٔm ’$rrr~B¼ IRpX›WQ”`Ē%IR@™öł|v‚޹dY®&ŌįSįó'øĖ²ģC¼Æ (ŠŪēó»ā*•Źī@M­Y–xšöžÜ1õνt·NīB§vfö¬aęģ]¬ß\ĪSömr­‹ĪmĆĢŁ»øūį?ør\{Z·Ŗ5ŠĖy坭tź`Į«!+ƄJ%ńެtéh!#ŻHu‡ßž(ā’ž½W½ī8ÉIz’ZĄŖõ„d¦1Ōtjo¦{ē8~f-zŠn,X,ZŠK¼ņĪVJ˜ ?¹ń4–†HIRŲw(²ą"IRxÕĮf (ŹŁŠ¢ŌĀč»wļŽĪĄę#:Į(¢€0²®ŽŚ~šp?P <‹0¦ĻAĖ „‚_€©£„żąi„H ¼\ŌęS«€1‘’ń]¼¶ ‘ įyQLÄĻkpИzw?š109h[6B| Ü tz»żs4ĄĄ  ĀXƕö§"rü«ē„C¾öĆėr`VŠ£ķšŚ!D÷~p;QąĻĢN[½ģDŸ„»žŻŠGĮ¾ßŽąø»Ü»<ņZŠW†u½Ś>õ=ņ‘p•øĀj(ŽĪEg”³ĮĀ}‘OœNœ‘÷ń9|Ųö5}žµ4t»w'FóUNNŽGQ”J’K,ŠpVŌĪ‘$ÉC0Ŗ(ŠSQ”ą˜_›,ĖĪ q«¢(ē©,Ė!/Ż^Æ7šŅ-I’K–åĄK·Z­¶WWW;tĒQøab'n˜Ų阣{ē8f½5옭æ}W‰ńZ’õMOö£×…ÕÕÕ1ŌEĖ5Š$IĮ;’5Ŗ5* _¼ż}†0dæz÷ :÷=•§‰öxWŻū*oüße¼ņƱh“zb, x=Ŗ«Źšy=œzAƒGŽ?¦§yź“ųmž,ž½i$ń)hõFŹ Ņcš™¬ż%/0o̵Słą¹[¹{L{R2Qk“”ēa«®äŖ…ē}†Žfłw³ø{L{bć“{Ćcōq!—Üü$sߘŹ÷³žKRz( %łū‰±$p~ŽšMtxĻø˜·ŗ Kb±q‰”¤uĒ^Āƒ"j#2Ō|ØOšx}/}¤}kēD“åP|SĒHˆ;ŗ?ŸÆéŒO§_ŽČ„ÉKBĘbc4L½«wÜŠ`żĮgŸÖŠĒīėĆóÆmāŪCĘśöL`Ś "Ā$9IĻ÷÷åŃēÖńÅ·uQ)²,ńĄķ=xśåM—„ŗßļ½µ·Ž’;CGĄ«Oāŗ«:1ė­aL¼ucÆ 01Ējx⁾œ<0¼_isHŒkX2ā EQBr·$I:vŠq”æ Q@Ü °æŽöyĄ  öeop7uĘ?@0“ĶJń_ūż7ĄÅŌ Ć€d„Gævķ©3žńw–­`¢qćĄįzö!RjĆķ‡ ®qwŠ7"ZįR 86łUźŒQ O D…ĶˆŽ¢×¤\#®ķÅzēTAźŒH£ø‰hēŸ™ķj·źō)ɗå5=5J”c‹æ’$5ų‚ŚŲ‹oCs 7nģÅŲķv£«gń7ć½9Ą»ķä“/÷ņģ#żyā?Ų°„œ“šóĪŹä”»{³ty!Ͻ¶‰»«°ÄjuzŽŪ‡“ųčž1{ļ|øƒÅ_ ŌŲ¾«ŠßŚĢŹ5%—:‰5©iß6–«Ē·gü˜ģó|ēĆ|9’»öZq»}$%č8ep ÷ŽŚƒŒtįEĖ/“sqĪĻÜ[O.Õ›ŻĆȋrßm=پ«’ĻæŁOa±ƒViNšĪ½Sz„D$””:xåmüø4āR'Š¢oŃ1øÅ%¾śž ½9ŒKĪĻjö}S”ŠŸ§^Æ6iŅ$Pćõz œ$IU²,>—G9"Šīl’¦uĶ>č1&«s_®ģ}’[µ ”$®ģ}ā’źŠ™]ūŠ{ÄĘׄ%¦µaź»Ė8°c=e…Ø()ĄėqcNH”SŸ”!ū6‡Įg]J»ī#Žõ6šōģšę “™‡¦’Ź–?Qœ»cl{ A­Õ1pä%ØüQ ƒĻš@—žĆŁæ}-eE¹ø6ā“[Ń”×ā“Ck:ö2ŠGß’=[ž Ŗ¬ˆVŁ"wūŒq7Óoųģ\OY”x­In•M—ž# %IbņĆÓ9mģ Ų±ŸĻKjf{ŗ < æ}ˆˆrdZ@ģ¼9§37NģÄö]UäŲpłŸC=»Å‡Ų{žŃx<‘°÷MéĮ”É]Ų“µ‚Ņr'zŠŒt#Ś‡†čßuS7&_Ł‘µĖØ®q£”[' I‰z.Õ&ß_Ė—“ćœ32Ų¾«Š² '}zˆōø.-ü¾`4{ö[Łw »ĆKr¢žī]ā0Ü“jL@N5‹åh‰ Āóž"ß~5ĀĖa©R!Ŗ ^‹É¦#”lį^…Ł” įż¾XIńŒEäĘÓŗŽŚ>Īłę#ą-„!æ‘аߍµŽ÷D„G¾~Xw­ĀK]Wõ’zsj5ā¾hMoq‚Ęi…Ą*Ä=>€H»ųŗ×åø#ķP»åØń%Źaą<Œ€Ž‚";ĖW3vābƜӚ“$³vC)/¾¹…å«ŠŁ±»Š c²yj:6—óŚ{Ūpŗ|¼śō @ēk6”ZW•Uø8}ģātŒ“EœEGe•‹Ÿ-ąź[–”(0įĀlž}>·ž Šõ5™½Ŗ™żł^-Ķgżā P©$\./k6”QR&.ĢėUX³”Œ;žo%)IzĪ?»5’$±as/¾µ…[ĖłźĆÓ×xɵKX橌k.ė@‡¶±Č’Dn¾YŸļ”°ŲĮ÷ŸŽ?Có#¢3¢Ę”(G‹Ē å•ŅQWČ>ŅR ¬ųž\ę~³Ÿ½ū­ģ?TƦ­åģ;PMUµ›gźĻķ×wąžŪzŅæw"Ė’(f’”6n­ą»E¹Č­”Uš‘ߝKbĀŃ%ł¾öŽ6vī©ā†«;±hi>„NœN/ńgoŝ7v ‹"hE„Q J”ÓÕōœ(‡G÷“95Ą¢DiQ@0Š0ZÓ”č’%4æĀ ?ČDÓ³ĀA­ż'„! ¢Ö@{ĀĆąwł}¢²~,"e`>u…ōV76óz^~@×µr>Fµ¹?åˆźż§łĻ)Žæķ`§NpįŠżŪśæ’!†œ0žĖ€Æ€īŌUżßļæĘ‘ˆš’ŲĄšf^W”cFŌųo.ź’ßhń9}xķŽ&öČ Ł B’%|nޚęķåÆGaɉö¬¦ĘīaŹä.!Ū=…+n\ŹKooįöė»āöųŲø„‚}’8kDhÕõMŪ*0ņĢżf’Q·\“4Ÿ¶mb¹ńšĪ<~ßfGE4FŖkšž%J”cĖ1ŖÅńĘįlōžF€(-FT(Ą/žÆĘØ>od|³’«!łæ"QCćÕš÷ļ4zv”lń5† ! 4D5į5@„š×ß~x£Ž¶zŌ±_6qNQŽ;Nć?id–¾fŖÖUQüCäš5²V&óšL4f5ysņķ_ß:'mRxŲr}łr{WEŹP«E•ķļān·SFĻēłGpėµ”bA—Ōj)Põ’høų¼,n¹ļwŚü€8³–ø8- qZŅS č“Č”É]m ›CQÉ_ßčpŚkX<ļ’ÓŪŅoʈs–~=ŪÉi]$‡GI¬ūåÜaĻ:†žw5&sBą{[u%ė~łE‡vQc­Ą`4“”žEÆSΉŲ&°Ŗ¼ˆõĖęS’æ§½ƒÉLF»īō>å4:CŲüHøv6®X@Žž-ŲŖ+1ĘiÓ±7=N:µ¦į“ÅóŽÅi«fą—šŁ¬cżÅń³$I2Önšł|FI’7IQ³,ĖŖ ļƒĖÖ«$I2iÓ±<įĆ-xŚx< Ö7±&M“iJE\Ē(`āĉżU*ÕI²,­¢@”(’pžœĘ?@é’RŒŁĢ}ĢT降hÜ' K@cQS¹ŗ²Qćš{ŽŖ·4žźs„fæČ:™Œ+2P›Õ8 Ų:šŚ¼Č uŒ}ń'Å”Kђ’yh7Ģ䳒0÷6ć±zØŚ`Å[ķĮēQµ2†L=±=c1d8ō~n³# N$‰§%bīˁéOHƒ¢(ódYv+Š¢‚-I’4Aó,ų»§(Š"ɲ4¦ę·S*x}h³×_ŻļfJ²ž’_?Ī85܄U^R IDAT#|ø¼5scG·įܑ‘{µ+Ą7 Fkˆ='莶4ßü$ŪÖ,aęÓ7ńļ, xĆ­åÅ|ņņ½tp#Ę^ßąž>Ƈ=sĒ‹_5ėx<7KB*w¼8ø¤ŗ“{Mo…¢o‹Q±ą8äI}P›ÕčÓuČzŠĒ‡ĒźÅ™ļĄ×Ą¹hü’ƒƒY›õb\ŸI“&-UeĄĮ|‰;˜šˆ’¾ūęīÜR/_lļĘĶ“:‡mšĪ^Ü}K÷Ą÷wŻŌ›r:£ÓŠØ`I‚©wõbź]½Ø“ŗÉĖ·”RI“J3†…Łwī`fŃēgįń(•Ų))soŃŅ:#4jøu†‰üĶć1Ä1bLšļƒ}f&ł›ĒcŽ±¾[”˹#3éŁ5£QF#cµŗŁ“­‚ēŃ*ͶNcģŲ[gJ’t4¬ńz½Į­²ō*•*šSPÅ<Š(v P,IŅŌ ń8EQ$’ڲ$I– µ4õŚpé-sƒē4ŽH΃oóÜ­góæ™ĻrįušńKwćóy¹ę7ڼ7]ćMĆk)8°ƒ¼½[˜4õćĄ`23fņTžæuŪ×-£Ēą3ٹnN{ g_~gˆńŸ’ĮY—ŻĘ‡Ļߎ­ŗ2l¼–=[ž ’vnxģƒć «sΜ0…/Ž~kE ±quŃ&ŠĻNJ…ŸŅ{čh†œs%+œĆöuĖčŅļŌf]«Óacūš%”ĀiÆĮGמ#Hj•2ĻV]ÉÖU?SZ ҽR2é:`D bĀé°±iÅBŗōΔݛ8øs=YūR]U†ĻėÅėq‘·w «ĻC­ÖŠ{ččfß_ķ ”V€ŪšØ%Ń"ŲÖź†’ęEišgŃŠ¢ØƒŸ%²ü'SÓ¢œ¢¶Q¢üćųk’µ”/ÆĄŲĪ(R¶×`?`'qXš8 eæ” C¶9ČŠ'<¼D1æHH* m‚g”³Q֑'j…j“ėņüÕ&a y*opį©ņ`hc@ÖŹ!‘ŠÄiH“Š6%¼–Ļé£xA1ÕŪė*¤iā5¤žŸ‚.5<×Ö]é”čŪ"¹āÜ ™zR/H„bU%ę±Čzqoо-"eth?śŌóė¾ß÷Ę~¼5^d­Lź©Ū†[½>§’K°n©nōśžŹ(Šņ3¢ó Š;÷JōéÖøčaŠ«0čĆ i½NÖ0Ņü†ęXb5Xb›¶MÕj!4dˆĖ²D|PĖ?I"äū`4j9d왇śqż]Ė9ēŅ#ĪļŃ%Ž’>9°És¬„Ņ*Qä!SeįŒ3ö4¼G8999ķš ’$Ķ›>}z¤:7Ķ]kŠóH÷oŪmē^uó?ü}O=Ÿ’üż¬Yü“žfØ×Ēėõ 3˜p»ģŽ“’Šā\|>/ęųŚvˆÉ\—ž·w­;ōˆøVėŽ½żó¶Ņcš™ŲŖEķ^sBJÄł1–D|^…vҶۀˆsķŽ@‡Ž'Gļ6štŠóöāq‡&=o_ū åE¹ :ć:õ9Kb+Ģn–Pœ·—n;kE ‰éYč &J 2ėÅ;¹ųĘĒ9sĀöl^Ék÷Ēåt”ž…$I”äļCV©¹é‰Yté?ky1Ó™HvמģŪŗKb#ĒßĀOŸæ…Ó^ƒÓ^ĆŚ_žĒ¦ßĄcłŪ Š¢loHˆņł ¤L"=åčÅŻßWsēCšš=½uzhÄŠ¼ļšÜ«›xū…ŗß„ź7>µ†?åQc÷œ ćāó³™2¹K )ˆ£÷?ŻĶö]UøÜ>ō:™ŽŻ˜r]WöI Ģ«Ørńß7·šÓ²ŠJČd¤9ļ¬ÖÜrmg4j™ļåņÄ ė±łÅļ{[Ķæ_ڀѠęĒĻĻ:ź{ŠTD…N§;"@–e“¢ŌżŒ$IŠ–Q¢Dłgń×2žŸHh}u&É£’)ł”K? Ž\åæW4{IŽśŲ±˜ū˜Ń§éĄ’y«x\E.*VUR½­ĪHUĒØ@¢Éü|Å£ øŌęŗGŖ×.Œy9‚§4•©Ö»®ĀUŚøz^ Ś-æWP³Ē†ĻīCR.MGü)ń¤ŒNĮYpw„I–H»( Mœš²_Źpä:ńŌxPTčŅt$ 'ķ¢TL;"<Ä °`ßoǺɊ»Āƒ»ŅMįׅ˜{™1d(^X‚Ļ!īI­x’0,c[å+*ØŁQƒĻéCRKhS“$O yT2¶}v¼¶?­ƒ#A’¤Ÿ‚_²vģ•éÓķļy­Ķ„OV.Mq‰ƒ}«±V 1,6FC«4#é‡ēżß¶;lÓχ{N3fĢųļ¤I“¶ł|¾F3ļp÷oiF_ż/6­XȌßHue)Ļø„gDŒøĮėń·wŒļµ¼½)Ė…ĒķD£3pÉĶO2āĀÉTWÕÄ`Š,éōFTj V’¼Ä“6Ų±Žųäp!bĻę?ó#aÆ™:ʘøˆć­;öāŹ{^Ū¾|Įlbć’č:ą4dYŀÓ.bŁ·pŁ/ Ó7žūņĶōšŌ'E }>/Ÿ¾|/óŽy‚Sν cl³^øƒVm»qóScŒēg³Všź}ć˜óś<4ż·Ąš.‡§>Ł@Rzg]zwß–3'Lįœ+ļjōœžźdggŲæ杊š+“ŒŠ§g{öUóńē{Ć€ęģ!ÆĄN·Nqü±VüĪŻöąJZg˜8wd>/+ąž'Vcwxxąöžż&ßł}{&pęštō—:ųnQ.ó.ZĄ²oĻ”W7!”]’³˜ĶŪ*øtl[2Ņ8>6m-ē'Ws0·†@b¼Ž¾=)-s²mg%ķ³ci“ijP„=\å7:\6mŚ“ĆĖ_ōS/r I’¢Ż¢D€Lš.š¢m€ų7"¬Ń œ Œ.Ž^bŒņęÆgü×ā.sSŗ¤”¤‘I¤MÅēöQ4æ8$„½)$YB—¦#åœdłNŖ6T‰‚²„&Aƒ1Ū@źł)"ß„$?BĄÕō¼N²¦.²®Ö³Ū#–š]5ĻÕŠĘ€6Q„KKMōC×&iŃ„ėØŽZVóĄYäĀkó‘vQ*¦Ž&*VU¢o­G›Ø”|Eå+ź„7n¹$G$bČ6P³£Ī!`ßo'ļ³Š7‘ŚØC ŲvŪĀ:Śpä:(ū%ōÜ\%.ŌF‰§%¢MŅb?š÷¬=4}śōķ999¹ų[ÆnÜ.1ī\Z¤õŻ_ä$=ÉIĶ WoŒŪC’F$IśéH֙>}śwG}2-„¬R3źŠ;y딫!4ÆĒMiįA®øėEśø­Ž€āóQZp€¹oN哗’E‡ž'“پ;n—xéŒ1 ®§7ĘāvŠæĶŽ½†Ł¾;³^ø“Š’|²»ōĒc¦Ŗ¬ė~eÉWļ„yļƒqŲ¬Ø5ZԚ¦;ÆŌātŲX»ōkN>ū2Tjń\xĘ%,šū&k—~ĶIg]Śčžū¶Æ„’icC:ȲŠSĒLbÓŹ)-<ˆĻēåŠīĶÜüļŁćĄǰóÆįƒgoĮåØ{F¾ś_㒟ȣ>źĖÉÉŁN]ŚL;öH źuōĒŃiU\8ŗ Ÿ³‡Ó0Ŗ­Õn~\’ĻuWu ńģ÷ļČgļt;ńzĪ÷ļŗ; ¼ųęśōH`Ł’Ī Łwź=é8ųK¦}°ƒ×žĢžƒÕ,ū½ˆß>•±£Ū„œ×e×/ež‡xįń ź—Ä ~I¬ŁPƼļpĆÄN-Z 8½©>’$m=Š„ƒ;r•VVV‘åļET8~üŠŠb*2ĒēŽ\<ģC“ż0śē ĢĄZ`"°ģ#ʉgē_ÕųÆÅY Bż%YĀSć9üÖy²ˆ&ȟ[ŃÕÄkČø¼ Cć±n“āµ{‘ü/Š»qĻ|ķI_÷Hµ°cŪcĆŌĮHęÕŌģ°į±zPÜ>dŒ>COL× ķų}G‹‚Æ?H÷µĢj]Ļ-²V&et ŠG”jC–~‡'R²ØłBvŽģ||ī²Č9łīr7U뫈?9C=ÕŪkÅķ$MÓ5s$R  ą«BN‰ĒÜŪLĀŠP Ļ]ī¦xA1†Öb{Ę6Y$Oå9ńŚ"æŒxmŽ@Ø>€ŹŸĆoéo!¶Gų>²?—¼žµ5U‡ !jvŌr“³cĮOłÆo—J–>^’$éČU…c€¢(I’(ݾbLū¬č»VK°z£„;TóūšJ‹2ēõ(+:ČĶ’žMyq/Żu?Ķ}“3ĘŻÜč~Ł]ś58cIǘFE‰ˆäћD×K{uꄹ¶>Æ—ƆĮX×3.)ė™Ēķ¤¬(ÅėŒ”ŽŽĆ®ĖB<čõ1™ćńzÜxÜ®ˆQÅy{łå›™ =ob ąŠŸ I‹ę¾ÉOsß ĢU¼^¶­]Jyq^Ĕ-'ŻNZ½)āx-n§ˆ†Ø,-Ąå6j‘č?āBd¹eBŗC%CēT-|é0bLÓ;ļ¾gE’ÖŖ$ęļJ’dkr”〢(?K’tk¤±ā2(-‡ÄpQzr*i)¾œ |õŻAŚeÅ2 wbČ܄øšß)µZĘėļhb³{šzāć"‹T‰ :Öoõ^;µ73Ø_&/„oÆڶ‰!3]¤(õīžĄÉ½”_ U”Č‘eł°Ój™3gŽ ø÷H÷ņ÷$*Ņ•{#Ś8yÕĄ‹ĄŹ y9ĄU@6Āǵų˜įŸ\ ĢCxR†üõ@&¬ņĻ½Ø–w„Ąūˆ“Mмs€Qˆ4€óżŪҁǀ^žcxüó_ ŚO&Wm|Ō=ZI]k×=Fæ÷ļ³’z2ü÷d70ŻæF-§·Ż•’:¾žöóørg|N0ēx·„y±ģc‡$·ˆź¼SńxNŸ’<ń/kü$žˆ&^CéāR*VU¢MÖaégʶ׆mO󮑜EM tW C#>æņÆŅ5-Č:U /¾Å£Pŗ¤Œ²_ŹŃÄk 2x<Õ^(%␃¼¹‘Ū!ÖĒŅĻBˆl.…ļ¶ŚŁ˜[CS!Į$3Ø­®żšN†‡%‰ŪE™ IRä s'€™3g.ĖÉÉŁ “a“Ž;“š&vŒŅ$æÆłō(Š2ūHך4iŅSŠ¢Ü ,Óh4ć¦M›vB ­õæĪgé×3?åR[w µu†¹–/§=Fē~ĆÉlß=ā~öš*œŠ“ ·=Ū WÜ^S0Š“[ ļiYq.©m:†Ķ-+<„¢($gˆy+œĆęß$ē’ŽF­Ń ōZķžŅ"¬U‹%Iōh/8°3āuģ߾޿ÄÉ£. ¼8mk—Ņŗc/$B=”m:õ”“š +ųŒ³/æ#āń$IĀŸ⽯ÅQceī›Sqįuž˜k§’ݵČ<—ĆNUY!ĘŲø@ŌƱ Õ¬ā“.bu2I,^ē¢ĀV‰Ł Ēōm­=„o–nØĻ§<Ø(Źe’$±į×RØTŖÅ>ŸĻ‡p…±e—̰G’¾¢RIŒ» ‹ęģĮķńįvūųž§\n»®kX*US2µ^ū†źŻK’„×W;GāŪĻ`ī7ūŁ“µ‚ƒy5üōK{VSVīdü˜l>xżŲ¶{ܼ£Ńw —Z­ŽFčFiQ¢€0tæE„Āæ Š\,ŗ‡ĘšKĄ›#D~ž;ˆ‡ā{cü|`°{.°aŽF÷µĘiæž@°Ó?v±’\jēŁEm„a ųтč5 Š¾“üēŪČ®ö?¬ńĻļ¼ź’˜‹šü÷A; žćLšĻ߀0īGŸnąK 3š=¢ŽĮG€ĖüüēłpĆ·=Źq`§āńžvWŅÄܦ§žy1u2Ū3G®C„‘+Pü}1™×d’2*™ƒ35YXNŸ©ĒŅĻBõf+5»y±óæSŌ¾[x¬ƂllÜ#$k$d„«°ĪEihc@e©ŁiCń)øJ#{Ąµ‰Z¢¶…”¬kąÅGĒōڼøŠ]ąF(ųŖwyćZŖ6X©ŚPW_HÖŹØ-jĢ=c±ō·`émn2 ~H< §ÄóÕŗ^YT…ÕśbłÅš)#N-=~a¼„G†ö{EQĪ—$éĻ’Ó­³š?ūģN‰5›dNź{ģCH ŠģlŽVAE•‹“†®-“ÉlÜ °vcŠ"¼`õ[žYČ/’Ų½?ä÷ž‡™3gÉZ×_}ŗŪķ~Š’ķ¹n·{u"žq£²“€Ÿ›BĒŽ§pśŲŪĒŽų8›VžČ{OLęĮi?£Ń†×N0˜ĢØ5:ÖżņæˆĄę•‹°Y+HĻź@Vē¾Lf~żöŗö6’—’ĶD’e:÷ķ5UüžĆ§Œŗņ.ҳBŪQś|^V.šKvמ–y‘čŌ{(’—I’7 ©ž%öūĀOŠcłõæ/üÅē#ēĮ·hÕ¶[ŲzONĘņ³’ҳٶz g_:gß¶5üņĶL†Ÿƒ9>­ŽĄ®ĖĆ€ f3ū„{xižĮQ‹¬Rįõ^T@f¼š³ŗŁ]äę–oKŲ^öl–Ū'kųæó⓺„«Peœ$I_öZ÷Ž{Æ,''g=Š7Ņųļė[Fa[^}w‹-Ąf÷Rcó0~LöaÆgÖ¢QĖŌŲ"®Ślž@»Rkµ›’2''“I+xę•M<śÜ:žøæY­®”q“¬\ß° (ʊ%RFłūņēü“?¾ō@äęŸ ¬ŚžĀ›}šp B£ł‘›5BaԟFhļŌ_ā€x6h{šÓ$ß?Ö‘*ˆH…ˆ(…ZęeĄ¹žsi‡0̟ šó5Āc?!<‡ń_ļĀ ¹7#"‚÷’ pBŽˆ‚ŽUü !Z“nąü£žĘæ:FMŹŁÉ(n…¢ļźŠž¹+ܔł‹¦œ“LžēŪ’J"¦³ O•§Q 6oŽ]åiPĄUģB›¢EeP5Ų @ßFHŽ2ˆhĮŲĪh“ •A…6I+ 6įwWŠsRĒF~l«cÕ“ŸNÕś*Š–•QQŠÄkH–@ĶŽšĪĶ¢ž!ėdZMH§zk5Ōų>—W±‹²_˱ō·īoC² $œχ+ŖyuQĆBAn…‡›>,Q½rY¢ÆOŻgŠ¢t’$©ńŹĒ ŸĻ÷,ĖSń{Ėü"3øļ˜ĢĶ·qó½+ųaI>¾z‘ƒś%ńęó'ѽsäPķ5Źrī|žžŚ;o 7¼ž |æT¦^:łū-µ¶$I‘{ćCEįżgnĘå°1ńž×CŒcĮÄÄū^ēÅ;Ļē‹·aĀmĻ¢ų|ÜxZ<}†ĒMOĪą¬K§0÷©<ė(²»ö'!5·ÓA޾­¬Yņ5éŁ]čŚXŌ-ēē<ĄgÆ=@ei!zžDl|25UåŲ±žĖægų…“įõż†į›OóāķēŃoÄR31ĶT•±į·ļ9øk#·=’y£×h2Ēsįä©Ģyż’(<ø“ž'"Ɯ@UE1;׿ŹĪ æqńMOŽ f“پ{Dć`Š—šł[³ūZ²:G“Cvž5Lźz¦?ym» Äc¦¼(—%óŽ%£]wŚtģ…$Ė ;?‡ÆŽ{’²ĀC¤euFg0Q’·Ÿ>‹¾§žĪ`j“ĆˆØŠeß~€VoÄ`23hä8t†Ę·Ģé] l<ääöOJq4 µ»ŲĶ«^Ÿč˜­„(J/I’v5ŗų1FQ”’$E¼ń{H—I$'}½“}iŸĖ—ߥf÷Ņ»{<];5ŻĪ“>’éi†@׀`6l)tųqi>—]æ”ĶĖĘŠ>;6dnŸbNq™3 Ōž¹z¼-#z*€C @H’“°ĮĮf0iҤńĄyŠ¢|>cĘŒÆšÜ!Ź?‚ØPgØ®Æ·ŻšĘļ÷ßQ”Æ]½y’ZŠ5ž[šÖSaC½ķ6`,Ā aŌk”ł„”oFD4¬kāDŌĮ~ĀÆw?u*š„X1ųŻ’½ IåÄń·0ž‘ åÜdd½LÉ¢Ņ0#¶rm¦N&ŒķŒXśš©\+jĆI* S#ŠB ŗ½3߉Ļå#¶G Õ[«q†§čŅu˜{Ę¢ø•B{ÕŪŖILK$id"Eó‹ĆņüU&‰§&ųēÖŠsä91¶370ŽŅ%„a¾$K$žX77ݕǙļm {ĘRµÉJoź ^>…Ā+e?(2p,}Ķ8ņ†˜.1Ät6Q³½łĘæĻ… 2©B"|Nš-1]cØ\]–rPkų{›H_ˆžČĪ7Æ’ŌtjæĖ«šą—eņ¼[Ņ zō”Bä ćż÷ßߝ““óp @A±ÄŚ-2żŗ·|€ĖķcĢU?±g5OÜ߇sFfgÖRZīäēe<óņFFMų‘õ‹/ˆ˜3;kī4j™ŽķĢ|üłŽ?„PR.±jcČĖńž¬¬¬Ę­ĻF˜6mZ~NNNāóŸĻ×¹‰]ZœM+R]YŹ„Ūž „ēÓ©ĻPιņn6’ž#y{·žÕ…¬Ī}Bęž9a )ķųķūŁøü{Ŗ+ĖŠź $¤d2źņ;8cÜĶ!móĪw3ńÉ,ūöV.š‹ĶZŽCr«¶\~×vŽÄĄÜŲø$īs?|ņ {·¬bćoßc·Y‰O&³]w.½ż9ŚuŌäuŽ+éŁ]Ä1œƒĶZĪ`¢UŪ®ÜüŌĒō:õ“zCGOlp­g\ĀŖŸæ`Ϧ• ƒĻš€$Ėü6’#ł5UeÄXé6h$Lz “\ró“$¤d²į·ļŲøb![5–„F\8™³.»¢IVē>ččœpå=/ńÅŪ²dŽ»8lÕō<ł¬&€~Y:¼>…ū?/kŠųÆ„öłöÅĶ©Z³Az×čĒ}“ū# öčÓZ&ģŅ‹²yūƒø]^ž5åČõ¹±£Ūšź»Ūxā…õœ2(…„xł…vę~³Ÿ=ū­C¤‘ØZ_hżP¹¶sĻXāZˆéƒ3ß!Rd •AFßJŹØĀ¾ßNÕʦÆŻKåźJāÅŃęŚÖ89šT{‘T MÖaČŌć©ņP½Uō®Ö-ÕÄv‹A—ŖĆ~ĄŽĻéCRKh““Śp•ŗO‰Ø‡«Xˆ écÓ°ķ³įs)X7Tį,raŻdÅŅ×LėI™8rxk¼(Š(ęgģ`Bń* Śd-†-Óæ(£’a”ÕųųbMźŅA1W*Šr»$IĒ!×”i$IzRQ”‹ńĒJ|·X¦o·–˜7’›¶UšŚ3ƒ™|e]>v«4#=»ĘÓ>;–‹s3ē«}Ü0±SȾnĻ¾ŽĒ™#Ņ9}X:÷<²Šõ›Ė鯿X5œ92¾_"ćóÕŻ8EQžyōŃGösv;0@’¤ć.ō<łlzž|v£sĘ\;•1×N |’ą“%asz0¢›Cæcč7bL³ę&„gqŁ/4{ķ†č>h$ŻltNr«¶Æ/˜ų”Œ&ē 9ŽA#·•eYÅČń·0rü- ΉKJoōxķŗ3åŁę—RĖķ“Õ|“¢šņ ¹ÖĒźšńįņjÕ-§›/R%A’¤²¦÷:6¼’žū›srrÖŅ@ĄÆ«%Ī>Ō-P?qÜŁ<õߍH’č p¤<|OoŹ+]<’Śfžro lOˆÓņäƒ}wH?ÉnĆō—OįĮ§ÖpɤÅ!ktjofö“SCŅ£R“ ‡Cå !£­}+=²AF’%_ā¦|EUk«š ’Æ„tIīJ±=b1u0:xk¼X7[)ūµ<¤ŠŃü"œNb»ĘÓ-Y+‹zÕŖÖWQö[y ¶€Ļ-ī›ŅHėf+šx 1MÄtŽARKŲ÷Ūq¹(ż©O…›˜®1˜:Ē k¤Ą=²ļ³Q±ŖWQĆ9³†L= °|·ƒ>­µ¤[ŌY½x} ¹ÖIO„͇×iF­Ģw›lü¶ŪĮåƒcbuRÖ4ļN[¦OŸ¾žšk®™/IŅhį«6Ź ģÕ²Q‹-@„’ølläGķ©'§"I°mWø€¶šē<ŠKŒæ°-#†¤rßć«™5w½»÷›ūĒŗRž|a=æżQŒµŚZ-Ń”­™+.iĒ]7v k³ÕRäI¬Xņr|(66öƒXz+~‘ž%Ź1%Õ¬B£’X²C<ßRĢ*dIĀźš±|·ƒQ=ŒäUxPÉ­ŌHĄŠ=–ī°sėéfp*¢Ąō ĆQ(ƔX¹NfH’£Ęuéh!óx$Iäņ3 Oł›Ēk ƬzĻ-ݹåŚ.ļ5o’ēd^ł÷ öØ”Ęę!1^Kė SX®’ų1ٌ“Mu‡Cy58]>Z„HN ÆĮ0õ®^ÜuS7åŁØ®ńÕŗéz+‘ųuµŒµ‘ ·BłŠ ŹWTÖ~^›—Ņ„e°“å7UėŖØZWÕ¼É T®®¤ruÓ!õ¶=64ÕQA²_Ź(ū%üzŸBÅŖŹ&‹ü5„ʤ¢ĘīĆęR蜦eS® O”G†–.éZęo“qF.ÆĀ›ķü?{ēŽVu6šß¹’ķ$¶³CY„•†•„Ń„VŁŠ‚Y!ΕҒ~)„@š× ”’ebIN˜ ›°÷ž!†0B€ BB™¶ćŲŅ=߯]Ė’,ŪņĢł=KWēžūŽ}Ž÷¼#?OqČny,^³m2xg:‰Ą²¬kµÖŪ¦g~ÖbŸ=z&O¶ˆå?Ō°ć=Éļ•üU^XĆ—oŸžō÷ū^D~//§7„ü^^~qČ`||1׿e^oüu°fm-'žó£vļ͵Ė€žyŌŌ„yłĶ•üķŸóčŁĆĆ’øŻŁBkxpއ„0ŪMŸ>½érM`YÖķŽćü(ŠZßŃŚž †¦Č&o]¾>ĢĮ»ę†«#ģŅĻ˹šä'5Œ–KžW1ļ»­|÷c˜SĘōāŁł[Š”źų¼J‘Hä^Æ×{)t‡ēŽšš³±Ėjżd@æ>ÉóÅx½*åo=ņ<ōČk삐—ėaÆŻ{g“Ż‚|/£öČ,ē@ƞ^öÜ-³~“qą„·ÓŖµ“¾ŖÕx×ēÆf͚µŗ•żŗ ŁPH»:óøöہcĢö7!åžba"ŹļłH"¾=‘Œ’E2ń7ÅjÄČp:āB•ŗ€nz>BŖÜ ķ’÷߈~LŽÅHe€}‘Ž}‘Ųü=BŒĶHųĆłˆAl$÷(b@8;ŗī^HN„?!Õ @ § ÷G ‡ eæĘ(’ķE‡ŗżk­ŲTæ)«^†ķ ÖäE½ę.ŻŹ¦-‡ķŽ­Įq4¹ ³Ģ^Āk)zäl[^M'"¼ <ū¾©J1ē•ģÖß\n2s’ˆaf±Öo¬ćé—srTłqµ]½¦–—ŽhX1ōµwV±¹ŖžĒ*Ę3„xOĪ8y8ĻŚŠōĆ8xÜ@>ž“m¼’?üŌbįāų9WJ-,((ø;}———““3ÄćńŒ …BWf£Oƒ!±°&«7ExyĮöŁE†b߯³ėĄ†÷qNōłę±¶U„i~Ɂ,3kÖ¬ÕJ©‡Sż¾fĢż¬²vCŽżŲb݆ŌĒKk}_(jެƒ‹āāāˆėÆĆKJ:Ę@böOE”ć'²x ģdDį)딋dÅß 1žlFx±rwµČĢy2H\žl丟†”ķ[OĆYśdŽ»ßzDéžāā“w!ą#žĢp2bԈ% #åļ܁Jš$Ž’üčž]v3Rł`ĒhŪ H%€›¢ßg"†+¢ĒÄŻĪ{ˆįĄŠötxĢæRj.ĄVg++¶¬`—ž»4µŠĮЈśõõäxĆś{éŪĖbpo߬®gÓ‡O–Õ1~TO–ž¦>¢9bÆōČQ¼üåʏŚõmGʟ „ŌµÖ'M8÷ŚūŠŸU Ż);†²ŚŚpŹŁ’t<ņŌR¶ÖE”×:ķÄaüžĻpßƋ8žØĘ÷šźk8 ”!į'oö¶3”¦y®”±Dk}a6f’c”••m$õūŚ`Č*±r¦»ĢaĶę'ļ—ĻĀUõlØqų|E Ļcm•C]Xsš®yl©Ó<’y #ↁ„);oG"‘Č5–eEŠ ÄĒ_ō°ß(‡¼ō_¶{j·ĀÓÆ¦5GH] ,#F޹~éŅ„_"“ŽeY÷µ¦?C÷Ā„O7~åøqiw³™Ł¾ɮ߃x¬|Œ{¢ÉXƒ”ąó ƒĮ*D™O,¤{Q’u§G’bT"%ųbņn„±uųmÄS”Ÿæ‘FQŃŪ(‹žåGåÉ}pAōsr­$ΰE咊čļ…ˆ#kƒ4CZ:\ł>|ų‡K–,łA)µÓüóĄŠ"j–lĮ‰hNÜ·w½Ž8Äį•ń<­ó]WüÉūõrĀŽ^ć±¾k9›C XįółJ‘œ,8ŽbĘC®¼0L¼Ö÷_XĆėš’ø½÷įEōļ—DZGī¼mYæ>¹7~gžzž{6n®§O”ÄŲžrüΌڣó4Ƈä3t—čßνųفƒųåų]²žÜšŽĒ¼ljhæ? ¾’Ż­ ķǚĶjė5ĒŽīÉõĻną»u óXĪ]ææYŸ:nt/M­„h:b;M8™8kÄŗ šĀ›§żŖ'݉§^¶Ų>’ļ”P(ōuk¶QZZźų|¾#”RgŸD½Ņ Ą„$c3M+°õ4Vž3%BćY’Ö°™ō®a5Ńķeņ4®F’D¶Ņ“{m8ŗ£ü·BłyÉX–5 rĆ<6Ō·ŲcͰćluؚæ™ó.`hæĢlÓGźÉĆó,Æ„®ocńZĢšįƧć*½ŗśGŃs²c{ļß7Ŗšō ńϚü:W]ÆüśĶāͼ?w õõGžö‡žųĢ¶æ¹ŸüHķ֏<Ÿlģ]˜Ć»ĻžČżwĪäó÷`ļQ}ٰ±ŽĒžłŽÓ‹_å²Ņ’m¶Å¼śžÅ¼/X6ęää\šÕøšūż§ś|¾ 'L˜Šņ`^ƒ”  _žPĒ©cz5r÷OŐ~^Ī>Ø b)Ź”RÉ*Uu–e]›ī÷Žō°j­ HŊՊ×ßO_śOk•wZ0\ī2Źæ!c0ŗFłį8ĪõĄŗˆŽšųņLjh©¼ĶŃY›Ü†¦Y÷özTm„[ĻĄN}ŅĒĖ–G驿"Zó2Ši]KKKƑHäl\Fć÷+e·oCvīŲåլߘܼ„6ĀSĻ/ćūāÉļdZĆ GļĀŲ}4ų;ń˜!ä{¹÷įxթƾŁÄ¼Oäō†qÉŌ½ł÷?ā‘ą‘|ņŚ©\0qOfž÷Ū¬ŻŽK—+mģś?µ¬¬ģ‡ģl”!¶mūµÖOwäåå=ŚŪ0b|²¬Žź­š[ĪĄŽ½Ó?ßxøåģK±ų{ūH˜åååh­SVÄ Gąž'-óŚO‚ć(ī}¼QrÓDž …ę§ma0“c0ŗNłˆ&Ŗ¹`ł–å<¾ü1źzņ½’¢¢Ęé4“†NL¤&ĀźGW28OqÆŞ̌Wnƙ¤¦݇;ĻčäzT„Rœ„”źŌž¦3gĪ\Ls/{ą)‹—µn–ģÄc†‰hnø-łXń”Ē£5ž3©t§5Ü’čb†ī’OÅ’żœŪoųi£æSĘ»®fńw⃒Šć‹9}Ņ«Ōn4źŠ€«·®&Gyׯq}qƒ!‘HM„šUōĖųŸöfĀĻ 8rĻ\ŽłI/ü‡õ_8¾·Św—ܰ„øU)&*„ZŽÕ®TVV~2vģŲ]‘Ü,Dųų3ÅŽ{:ōnįm×a|öåB~ĖkoÆdķŗ­,üvƾµ’²™ ¹éŽĻµ{_ž}ĶAäx-Žž`5·Żó%S&īÉŃæŲ)iŸ=zxxąŃÅōė“Ė/ (Źļūšw>\C$¢Y±j æŻÄĻ-ć¶²/9ä 8æhd Š°„n«š6pÖZZUUuÖ_|‘>Ɣ쿒ž=”RŪÖ*„6VVVfœk`ģŲ±§{ęō§’šżŪDFC÷¢¶^³hm=;öńrژ|Ī>0Ÿ1Có8pD§ÉēOĒ÷ Ÿ°o/«‡W½a)NRJ}ŁŃ2'ć“O>Y?fĢÆRźČTm¾^b±Ū0ĶĄÄLWŪ)Ÿmńąœōj—Rź/”PčłÖlē¼óĪė———÷©ÖśįpųœC=4šį‡vx CēĀ$4ŗZłQUUõĒ‚‚‚:ąŅją‡ZńÜ]½u5Uį* ¼ĘmhšpU„UO®bż€ZHƁ½| +„ŚÄ-¼- ‡Ćæóz½ū5lŁŖøć^/—]”_Ÿ–͢ϼćēÜųŠ]Ä_’9oŪlüNƒ{2łü=¹ź’żčŁCO<ūżśäröÆF¤ģļčĆwbäšBž}i9żć~qč`Źo=”é3piéGTU‹>Žæ_ǵ37^}`‹äŽQ†;īõ°ģ‡³bk=ϳgĻnSה§«ŖŖÖOĘ;±TČŌč° `ˆ•m"Ÿ”{R½UóÜg5 īķ”ߖÆ< =wé_=`ą€JācąĖR"é_ÜL@ŹK7Bk=āį/S#lßńė7*Bxš ‹˜?lŲ°’“v[yyy60,śuä–-[€Ī‘DŅŠy0Y: †NČ-ėī?EYΓѯ]BłwćółĪEŹEnK3~ģąć8ø’Į'””˱”~w|s;Z²IL ƒ÷v“L­Å¶ķ•RoŪ¦Ķw¤¹ČŽŠ·wėÉ6Ց—ė٦ōg›Ŗjqłļ­ŠźźaĘCęÕĄUø8: ¾ßź d€mŪw*„~ėZt@0ü8“uż~’Zė‡ʞyyfŖÓ9Ś óŃ!Ræ„Ō„@ąęŽ–©¹Lš4éh˲^ MHń°5ū³Sł¤+R½n™‘ĆŠÕi›…#‚Įą;­ŁVQQQnAAĮ7ĄŠč¢­–eķ\^^¾®5żŗ&@Ē`čÜ|ÓՔ€`0ų@NNĪĄåĄ€w~|›:Ēx”2ēµ5Æ¢Ń(„Öēää<ÕŃņdƒP(“Ņqœć€mÓĘ+×(®æĖĆņU­·É÷ķŪfŹ?@A¾7+ŹM-LŸéMTžė•REķ„ü(„¦Æ^³)'''ćr’=zōxžhōŖoµt†īĢź…ļ©—KĻq¶ü»/ÓD½śļV(a~ķ…ŗzøó>oSŹ?Zė«[«üN$®üÜg”C2ŒĄ`č¼|ć‰Šå”’eee5Į`šF„Ōϓ֑źp5O­x mR2`Įę|±é “Öו••mģ`‘²FEEÅ·ŽćœŒ«2ĄĘ͊<,YŽż_Ė6ĮĶ÷xłfIƒ‡VJM϶§,Į`š ĒqCŒ•‡”••­ĶtŻ;īø£ ø`å—oR»9ćU Ū9į­Õ|’ɶPļ'[[ó½#>|ųU@Z ŲĀÅ”‡=8:]kv‰8Pž_ß.MoŲÕZæ0bĈ¬”żÓZŸē!‰¤5ζ_ŗ’HĆ`č‚hłĪaüļœ’}GĖŅZĄWĄælž’—Wæsé6’²øzO."f,ŖŌZ’_GĖ”m***ę*„ŽÖĖU×(n xųąÓīūj^ōāĘ2/+V7×+„&™!SEEÅÜ`0xc0ü¢«_ lt"õ,|„œH]ŹÄčƒ ¾~-Dż–Ķ ®ßWv°D­¢““4ģńxĪŅZĄę~fq÷^źźŪI°dkÜyƇO4ł,_L*--Ķ–idYģƒÖśĮhƒ”¦ €ĮŠ yį†ĒV={㣛:ZŽl±Ē{¼–““s€RjĻå[¾geķJ†öFžg; 4$%¢#¼ūć;<½ņi":°Ś²¬£ƒĮ`§+ƒ• ęĶ›·bÜøq'MD‰@åk×[üdwo7yKk ƾg|ŲK͖ʵRź×@ąŃŽ’­5TVV֌3fRź¬śŚ*µqł—ō2onĻŽĶŠ ‰ŌÕņõėlX¾ ¶čā`08§#eŹüń¦qćĘĶĪ!n±j­ā›„cF;ätÓ4äÕ5ŠŪB¾^Ҥņ_«”:„…†Ē¤ģ½÷ŽÆX–µÕ²¬WzöģłW“żß “Š`0“ 'NĢ÷z½!ąL€+‡żūŒaTį(†åC™ĒŃvĖŚ­kłŗźkę®’ˆõŪ<żæu瓊ŠŠĻ;R¶öĄļ÷וּ~Ų×½|ē4%gGŲy‡®ķ1³¹ f>ęį³…Äk-Ė:©¼¼üƒŽ+~æą Ēq–TWW_={öģŒжm_®”ŗĄ›—Ļб'°Ćž‡ ¬nbĮ1“ ­5?.ž˜esē°µz}lŁ]”PčĀ-«Ų¶}žRjMxļ2Xsį„śuķg["«ÖJ¾wIÓD“Ög†B”ĒŪC.ƒ!3ā6 ķ‰ņūż—j­’n[ˆ"ߛWuÓ)CR4šŖpUl¶?¾ž‰D~7sęĢn9󟌩S§ŌŌŌÜ„”šą^nYš#֜zL¤ĖeŃÖ>ųÄbö³Õ5†)„Ī‹:B¶Tų|¾o€Ż¢_oƒ—fŗ®mŪ•Re@€œž…ō²7…ƒ†“Ū«ŹcžoŪډPæe3UkæcĆ÷Ÿ³µj}ģ'ø2 ŽŲāµ¶mOUJŻŽT»ž=ą¼S#øo÷H 0ļ ‹YZlٚ‘j5- v»Š6C×Į C»3qāļ^ļe@0¼£å1t Ŗ”RĻ*„nźL3ĀķmŪ(„ž4š!ļ×GStb„±£»ĘŒŁŅŠžš°tE£a†VJżŪėõ^QVVÖ颁}>ß``ōkŲ²¬±åååŸeŗžäɓ‰D®Nm ]­õJ©?µg„‹ŽĄ¶ķ*„®Č¤ķųŸ9üśųH— wŖ«‡’>ķįķ¹™ånQJ]ž‘­ķGß'h­ļ …B]2”ŹŠž€Į`čPŠ‹‹÷óz½£ĒŁI)5X)Õ}3  µŽØ”Zī8Īw………ļNŸ>}kÓkuŠ‹‹÷óx<÷{'ž¶ėPĶ G8ģ³§ƒź„oš„ĖϽnńÉ‹$?Öh­KB”P§-éč÷ū/ÓZ»gfßĻÉÉ9¼¹ĘŠ’’’±ŽćœœģägSNC—a °X)õœć8‡B”7;Z öĀÓƒśkĪ9%Ā读†3ʂo=ķa嚌ĘZ)õ÷@ Pš­ķū|¾sū£_#‘HdäĢ™33.ejŲ~é„ĆƒĮ`0¶o¦L™’SWW÷G„ŌßH¢<ŁQsücGk,«ćĶß,µxīu‹ĻæN:¬p“Öeē/½&õ”)Srźėė+Ń±eJ© Ą]­é×ļ÷ƒZ+_wĀqœ„ԟ›³ŽÖśĒs…ÖŗÓū×Ö֮撞ū×7ݲūāół|@Qü˾{9œsr„ž}ŪV®Ö²a<ž¢—÷+3V£"ĄoƒĮąŒlÉP\\¼§ĒćłW8„Ēć=cƌ/³µ C÷Å ƒĮ`č¤ļāõz’©µž˜ģ÷üžš±{k~6Ęa·įķkXæQńĮ§Šw?ö°*u°yZė©”Pč½v­Uų|¾C×‰+- ƒ×v HŻæß_Ŗµ¾ŗ9ėh­ĖC”Š`źÉv|>ߙĄ½@FYLņr5æ8XsĢaz“­lĶeĆ&Å oZ¼=×jN9Ć˲Ī*//:[rŲ¶ŻC)õ.0ʵų”`0xN¶¶ačŽtшƒĮ`0ŗ?Ÿ|ņÉęyóę=6f̘×-Ė Œt’^V|·BńĪĒn±~£BkEŸB'ĖoxĒQ,ł^ń^„œ/{xųY ¾µØ®IŚüs­õÅ#FŒųż­·Žŗ,i‹NJeeå²qćĘ-Ęļ[–uå¼yó¶t“\Ż‘yóę½6nÜø\ąšL×QJ;vlæŹŹŹēŚP4C–ج¬übģŲ±/ĒMĪķG"ŠEß)^ßĆĘ*ÅNƒ4½:øŖęšušų f=ęaŃ2E$s’“Æ-Ė:±¼¼ülŹ3fĢŸRź×¢oźźźN™?¾ £3d„ń0 ƒ”‹ą÷ūqē/J©Ió÷z`ć݆Į4;Ņ ØÉļ•Łv¶Ö)V­•²V«T,]_/±Ømbx©”š \;lŲ°'JKK;½›¶”są÷ūÆ×Z_ŽĢÕž ’Ų&²Ī„ zēååĶŠZ5g=„`ä0ńr:p_§ŻŖ”l©…OX¼WińÕ"•,§IS<¦µö‡B” Ł–ĶēóMī‰~Ż  ?Īöv Żc0 ƒ”‹QRR²ć8“€ó€3]ÆWčÕSÓ³äåA^ŽĘćQŌn…­uP³EQ[§Ł\Õ¬įĮ&ą­õĢP(ōZóö¤K”¦NšĒwTu“ ŻeŪöt„ŌŽßƒĮ`³B Šņūżi­or›»rnģ»—fƑ{Ōģ0 »Q +×(¾Z¤ųj‘ä3i†›æ›Z„ŌÅ­Ķ’Ž¢¢¢Ü‚‚‚‘€›‚Įąœ¶Ś–”{b ƒĮ`0tQŠŠŠ<Ēh­'*„Nś·Ó¦k€×“Ö÷UWW?6{öģnķ"?yņäĮ‘Hä5$£’=ƇæŠx8deŪöJ©ß6s=“£”‹aŪö(„ŌĄųÖōÓ··fq§ĮÅć)7'żzuõāŻū[¹¾^¢Ųø¹uj‘Rź9„Ō“ņņņoZՑĮŠĘ€Į`0 Ż€ŅŅRkéŅ„c€£õįø2D·’:ąąą•‚‚‚÷¶§²¶‹’„ IDATm_¤”ŗÕµč¶`0xQ‡ Ō}Q>ŸÆ ˜Üœ•“ÖW„B”ŚH&CaŪöyĄMJ©²ŁoŽrs5=ó gY¶„¶l…ŗ:E}8›[ą{„ԁĄ#Yļ™mČcµÖo…B”%m± Ćö…1 ƒĮŠ=QÅÅÅC½^ļžĄ^ZėQĄ0 @)Õ(ŌZ Łī«”RėµÖUZė*˲Vh­j­æŒ1bqiiiö‡Ķ]Ū¶TJ½š°ųīŖŖŖßĶž=;Ņ!BuS¢^-3‘š–ępY0¼©-d2“S¦L釯ŌZO%{Ėöb£Öś¶^½zŻŲV”A~æ’­õSĄ`£Rjt XŃŪ2l?€Į`0 CŲ¶}µRŖŌ½L)ui ø¹ƒDź¶D÷g7c5 ü. ŽŁFbڐ &ōĪÉɹP)õ'Ś/”©„¬UJŻ^[[ūŸūļæ}[m¤¤¤ä$Ēqž øÓ·žbbž ­Å”4 ƒĮ`h‚ŹŹŹ×ĒŽ[źZü}eeå“%Swå‹/¾Š|šŽćģä]Čœ8f̘•••&#zcžüł[+++ß7nܝJ©õĄP``GĖ•ĄgZėė"‘HqEEŋóēĻÆm« ٶ]üčįZüm]]ݟM¹?Ck1ƒĮ`0 bŪö•R×”RǁO:Z¦īJQQQn~~ž£J©“š±ZD)5)Ü×f‚Ś…I“&ķķńx&j­}Ą$Ę:ąa„Ō¬@ šV{mŌ¶ķEJ©]cߵ֟ęęę_VVöC{É`č¾€Į`0 C3(**ŹŻ{ļ½Ć¦@ŪSTTŌ³  `’Ü2S"ZėóC”Ѓm%—”ż˜2eJN]]Ż‘Č5p”RźŚĪ‹9 |H4įéšįĆßčˆü'~æ’-­õaZė7€ÓB”Іö–ĆŠ=1ƒĮ`0 †VPZZź]ŗtišKąįp8|ɬY³Ŗ;Z®īĀ”)SzÕ××?ŃŒÕź•Rg¢Ń͈&<Āqœ•R{"a"{Ņ0V>ŖÆ”R Æ“Ö)„^›³-ssńł|CK”R+ǹ5 µYøaūĆ ƒĮ`0ZmŪ'*„žv-śVkżūP(ōL‡ Õ͘8qb¾×ė})o™)u–eżŗ¼¼ü馛ŗ8ŖøøxØRjĒćéē8NRŖ@)U µÖJ©*­u•ć8UĄ˲VƒĮe-ōĉwšz½—h­ó-ĖŗĪdų7“Ę`0 ƒĮŠ |>ß8ą#ĘUZėP(ņ#ź ­dŹ”)}źėė_jĘj[•Ræ ϶•\Cs)**ņäēē’Ʋ¬k“Öż¢‹ŸƒĒwØ`†ķ«£0 ƒĮ`čŹƒĮPć^®”²ż~’#U÷£¬¬l£Öś8 9Yžó“ÖŪ¶}d‰e04‹É“'ļZXXų¾Rźv—ņ0ØĆ„2lW€Į`0 C+ ƒZė1Ąó®ÅuįpŲdķĪ"ŃDhĒŸ7cµ^J©9¶m7'|Ą`h"‘ČmZėDĆąZ­õ%"a»Ć„ ƒĮ`0dŪ¶OWJ·,ė‘ņņņ7bĖKJJ†k­/ŃZƊD"”™3g.ļH9»2ŃŲé׀Ÿ4cµZėcC”Їm$–ĮŠ$¶mĻq•¶t€–e]Y^^¾®#å2l?€Į`0 C;`ŪöūJ©ƒ£_ą­õĢźźź‡fĻž]ב²uEŠ‹‹wńx<Æ»5cµ ŽćSQQ1·­ä2ü~’Zėó1@E0 Ę~³m{ąßJ)mYÖ?ŹĖĖ?č0A Ū%Ę`0 ƒĮŠų|¾ļ€”I~z" žŽŽņt|>ßP­õėJ©]›±ŚZ˲Ɨ——Öf‚¶;lŪī””ś=`ÓŠ3ÅŃZļ …–tˆ`C&€Į`0 CūšG`C’å'0)ćółĘٶ}ŠmŪ{”––zŪEŗ.H0\ęńxĘK›±Ś@Ēq^öł|£ŪJ.ĆvÉ?h–¢,Ė2:—”Ó`< ƒĮ`0ډ &ōĪÉÉ9S)UŒŌ“·¢å}±6~æ’,­õƒÄĒiõĄ·ZėēŖ««/O ())Ł=÷‰}÷z½NÆ^½¾˜>}śÖ„Ķ«I“&zl[ T݈#>/--uÜ §L™’SWW··ÖŚ[¦µŽ^Æwcyył7‰M:µ ŗŗz/÷2­õŹdy|>ß Ēq†¹—y½ŽÅÉbĄ‹‹‹‡)„¶e‡·,Kēää,(++«Ilė÷ū÷ŠD"±ļ'›7ožlöģŁw»¢¢"Oaaį>‘Hd›q-''§fƌ_&öYRR2Öqœ‘P“Ÿ#*„Ō¤@ š–KNwl?Zė€kB”Љż …1 ƒĮ`0tÅÅÅ»(„v¬ØØų—ņéółHYĮd\ gøŚžųG’v_†ĆįƒÜʲßļ@k}N’¶ĻƒĮmŠKQQQnAAĮ»Ąø$mo ƒ—»śÜYkż!°sB;šƒĮŠŲ‚’’’ƒĒyČOh»8& ¾ćźw‚Öŗš$“] ģ6.ų|¾k€æ$‘5c“֏„B”3cߋŠŠz|쓤mi(śßŲwŪ¶G(„ŽvHh&ƒĮ‡b JJJ~į8ĪóøŒ0QŖĒ9Ņ›Ąļ÷—h­Ėhģ±ū½Öś P(“2¶ĄēóŻ\œDÖFŒq˜Ė lŪ~N)u\b[„Ō¬@ PģŚ~!š‘ÖzĻ$ż^ …npƒ=”Rļżš†3ƒĮą®~ÓZ?ä&“ŻhYÖĻŻ”>Ÿļ€ŪHŠY“֋=ρn£‰mŪw*„~›(+šęšįƏŒ¹JKK­%K–¼Ŗ”śE’¶eĮ`š7±/ÅÅÅ{z<žO¼$m_ ƒG»öėēZėG€|­õćJ©YUUU/% †ŽĘø£ ƒĮ`0t3gĪ\UųtĀO!³žÉHTˆS ~āńx}™2eJÆŹ?Ą‰¶mļūŅ»wļ1$Wžüī/ŽćOcådŒéKh{•€žĄ¹īZk›Ęū °#pbB[’vĶB)uʔ)S¶yQLå?ڶ$įūÉ4VžAäŸä^ą8Īy4Vž ”Rg',ó‘|¬>IJ¬D>é1PJ¼lٲ}·učó I¦üh­Ļ/**r+å?O¦üX–åOų~:•/Pœ°ģ|+’}“Ög&,ó“dĀR)µ«ć8G5\¤R]‡/Y²dŪ~,Z“h÷Ź?Č1ß¶=Æ×»/ɕ€ļŻ_Ą[Į`pp0, …BēƒĮēņočŒ€Į`0 C'" >øŸü1¼«”ŗ£   ”ŠüÅŻüؔŖŒ}‰ŗŒæ›¬”ÖśÓźźź5®ļ_+RōūrĀ÷wüd¼”šż;¢›Ō/',H\7F­eYo»(„ej µµµµŪÜē-˚¬NѶlJ©7Äp  ń~$ī§ 9>)·ć¢ĘqœÄs™ŖßeuuuŪĀ6†žšE Yßt‡—X–õ±Rj}Š~÷ė R­÷#Õ~EĒy-”ßTm7E"wö|Mźc°Ø°°pqģKŸ>}–Ā8¢4øF{ōčń<0/śÕ–h­_PJ]—““óū}$»Ę †Nƒ 0 ƒĮ`č¢Dc™OBfĘcŌY–õҌ3ĢPNœ81ßėõžŖ”*t-®öz½sŹŹŹ6ŗŪNžŽplĀ1X=bĈ9‰qõ“'OžI8>Ä} “Ö߃ĮD„ŸĻ÷S­õ~±c µvĒ™—¤4”ņł|Ē)„†»ś¬·,ėĶÄ<ѰS•RīYųZ­õ³Į`p»­mŪ}•R'+„¶ÅŹ;޳)77÷ÉÄÜ>ŸoØRźh\3öŽćüP]]żLāģvIIÉ>ZėŸāņÜŠZ _O<“&M:Ģćńģķjē(„> ŸøŪEŻõ·,kˆ«m½Ēćymƌ‹ŻmmŪīœbYV?—¬[ĒyfęĢ™?&ČŚ?‰œdYVO×ā ›7o~*1·@ii©µtéŅ]“ÖkB”Pmā¾ ] c0 ƒĮ`0t;lŪ>\)õ,ÉĆ’¢µžø&Ło–eå6՗ć8@NŖß£Jß&dhr;HȀ{;kĒyyĈ'&t4 7Ę`0 ƒĮ`č–ų|¾£€9Hžķ•R½$ ƒ!†É`0 ƒĮ`č–ƒĮW“Öæ&EŒ~7ä ­õĒ~æ’·˜‰>ƒĮó`0 ƒĮ`0tklŪ>^)õ8©3ŗw;“Ö/X–å ©: †ķć`0 ƒĮ`čքB”ē”Rē"ué· ”RĒi­+}>ßi-‹Į`č<ƒĮ`0 ĆvĻē;˜…+Sżö€Rźžśśś‹g͚UŻŃ² †ŽÅRÓ8ų)°+ŠÉŚŗ9ś· ųųx›ŌµOŪ‚>Ą•Ńϟ“ć¶ ƒĮ`0ŗ,~ææXkd;ó„ÕZ/¶,«8¼ÕѲ †ŽĆ“\żėÕDŪ+€·ķQze(š]ōóĄyķ°MƒĮ`0 †nmŪ~„Ō=lgF ¬”ŗŁėõž­¬¬¬='Æ C'a{{č5…øų_*’5ˆ’æųØMXogą_Ą£˜cjč|¼ż3Ę"C¦\GüŗéÓĮ² CV …B­õ4Śgā¦3įÕZ_^__’FIIÉī-ŒĮ`hŒ@C.FfńA’ÄLŹ€ÆŠ¶'0ų-p¾kł4ą’ŚVLć`hæBŒS®ķ@Y ]‡gć£Ÿk;PƒĮ`hlŪ>V)õw$ä³µćāMJ©HŖµÖ$„4[”R‰M‰żl$nø“T‘Æ.ƒ3Zø¾Į`č‚@C¾FF?OīĢp½WD? ŒĪ²\‰€”9€”%€Į`Ųn°m»G]]]ĻTæēęęn …BióŽ`Ś“iyÕÕÕ×i­’@ ½P•Rk­§ƒĮ5YÆM)))é‰DöTJ ņ•R}€BĒqņ€ˆRjP­”Ŗvg½ĒćY\^^ž'õ †ķ cˆ3Xż¼¤“ā&PüäDæŒ~o+ŒĄŠŒĄŠŒĄ`0ŗ>Ÿļ( „Œ[Āj­õäP(ōTö¤Ź¶mRJ×Z`YÖ(­õ^Čx»¹Ō £Ÿ:ŽóZ^^Ž&‚a{Āā ¼żüpB3×’Ų7śł ¤:€›Ć\s€-MōWą’a š”ė·d€ąPą䁘¬CŒÆ 2Ü+ŚĒAĄŽH5ø¬­>ŽŹŅ”ü1r€Ÿ!Ē·ōÆXZ^GOÓ¶p$āŅ/ś}}ōļkd_Ó†B\łAÜūņ_ūƒ‘Š”u@%šR‘"‘aˆ+cŒƒK£Ÿ$n ˆń°8\™Š9īū"Ē·R£ 9Gs7ÉÜØ¶g“æ!Ńžņ‘kp30xX™fż#„u ræ @Ī’>Ńßj„v.š2°5E_}€ć¢Ÿēæ—ĘEe‰„mDīÕאk%SöŠŹ»rrͬ>@ī·LėVŽŹ“7rļ"ūĖcņņœK6ūq$r\büż\BĆk-Żż“‹Ü3c‘ū½r/nDrØ|ˆF“0qt…(‡®NŅfgąšč¶ÓÕveō$7z„€IŃĻ}€ÉH¹ĒTīMĄ?sęVč&÷¦‘#‘ ė§%D·_Œ”ŹLĒ äŽø?M›_7"t„CĘ4ĔČėĄ/gäÜżOTŽd¬.!łqŪ)· ržEņ|‘¤mŒ—„ł»4mŽG’‡ī“¦ Ą$ĢčVD‘NĘ ØLæ¼Mō÷5rܞOX;f™I²…ć«cK:–!×ī=nĻ`0 bŪv‘eYwk­ūµ°‹Žćœ_QQ1·é¦Ł£ØØČSXX8(ÖZŸAęÕø²ŠRj®ć8³rssļ+++3Žo†n‡1ÄŁ™øR¾ųI–ūo+ĄgĄ®Č )@5¢Ģä Š£[)ūą'3” ƒq÷5F”:d61QyJ”+F2ƒ}JĀņXņ‹äYÅ'3“,?1tøe«uõ5ĄõŪ*DéŪ›ö1 Ef¶&µČģs_`/†Dƌq@…ės¬æZ’SJ‘Ź1ŚĖŠx1ž%²™ĻMņŪeĄMI–Ÿģwb £ƒxōN²ĪwĄ4vO)³5ĄÓ@‘ė·äZ,LŅ_²kŠmxOĆėw=r’%īėą@’{}\€īŸĮ±ÄN…4V°GŒt‰« ^#’lg}о4p.škYk ×#?7uČõī Ē,1¾ö/ˆ!Ń`0 Y¤øøx˜Ēć©@¼»ZBX)uķęĶ›’1{öģL½÷ZDqqń˲.RJżń¼L‰RŠÆ ØŁa€fǁš¾} G®¦Gč‘ ^/h 5[`kl­STUĆŖµŠUkaåZÅŚuŠpÓ{µxDk}}(šŸ„Ż5:chČāŠÜyˆŅ™-ŚŹć1D ü”ųlpā|ā:ā*Ÿ8sŁ;Ś_D©¾™å\•Šną,dę.fp8QŖŻ\ŠĢl‚ø’xʵ? ŠĄĄEĄ™Ńeµˆ1ĆķŚķ–h?×"Ž1āžˆ‹öu4LĄŲ€·rƏÆ"ū£?¢4ž Ų?ŗģCÄ5ßMˆ†J’Zäœ>Lü˜xćĮeÄ ,uČõņ½k{»ŗśOü|ܶ»”–Åw_ƒ(p JŽßó³Œø’Śü&ś§åq4c†»®žB<>>@”āƁc€«PHnˆJTf—Få{ń`¹n~]~XtŁD‘®q­ė6Äxų¢xǮԈ”į*ā×ė4VŠ÷@Œp^ä^-‚ȵ‹A“¢ķĪB\ńc†¼dƚ™ĄÄčēåČ9y‰†Ļ˜^ȵw1qcHuTęõŃļ{ŃŠČ7¹Ö@Žł×oš†÷ż^Ń}²ėšOH÷: ¹NmijÅBW»Š¶9S ƒa{Eٶż{„Ō Č„DKxϲ¬‰mį?qāÄrrr¦F¦,7;°ŸfŌnšQ»9ŒŚ ņ{¶>‡Ÿć(–ż )|kńķRE}źĄ4Œ® ƒļ§le0tŒ !—ŠpfņI$Ą|dP»‚Ō.øMі€9ѾSÕ²ķ…ÄżĘ\Ēó\æŸCÜŲq>p_²]„ø#ƒ³[\æy8ßAˆ‚qRF1Ąż|%2“ćEäį{*©÷³/¢XĒB!ŚŚp ńÜ s‰Ļ8§"?Śn/לn÷ŗqĄfÄ@*wƒBŒ4§Gæ’Qī“ŃI½Č=ĖKšsā94Rqr~n ^9DIŽ÷{‘‚toų!ˆ÷KÄp4˜†„•Ü€eȱN*2s’v“ Ą‰ˆņ#Ńp3ńœ Éųr£PÄМ{š€? †„tœD<ĮGH®ˆż‘ēRrĶģOÓłī#ž84ŻuӜ$€CīėöĆ4mnG*­€²ę¤ik0 †VPRR²O$¹O)ÕTx]*6)„. eِgźŌ©555W)„¦‘"|pȎšŸŽq8xMļ‚¶OŚ_WóæR¼_ińł× ĒI©"=£µžC(śŗĶ…2ڈ• éĘü‡†’S‘Įń›Č ŗlˆ(ō·!ŹšqtPœR”«H­ƒ(„’r}?)įw÷lń lļ]āÉķ]Ņ$žH¬œ¦•hčüó„ߎr}ž_ŅļēŚ7ý;QäÕ¤WžA "neļš4mļ"}āF\1önbŪŁę@Dé¹f2±ˆßJüü%z?øgė’—¦Kō|Oܓ”éå?I­üƒõÜ%?ÓĖ$Ļįę ā9@v£±Ū{L©^FÜø•ާ]ż#ī%23›Õ¹Ģ’9ŗ v‰ē”„ÄŹ§®§iåą-āϐD#Į`0²HyyłgĄO£žéĘQ©č­µ¾Ū¶ķ‡‹‹‹›Źń’ŸĻwę–-[¾TJ]F‚ņß#Ž:$Ā_~WĻ_~ę˜ĆœvQžrsą€}4SĻpżeaŠNtŌ?é¶OTJĶ·mūļEEE)ĖF chHQś/Gf±QH¦ī‘÷iˆRó<ā:|3ķoXC愃ÉxÕõ91é˜;–7YĢv"ĻčUĀoŗ>æ•A_ ž±l³‰¹bÖźĶ4œ-OųM7Éø>gŗÆī™äty&^Nó[ ·HKż“·’œ.y£›ÕÄC#³łĘŽÅZ†Š¤ćĶ$ė'#›Ēņ=ā×j¦ż¹d;"Ž ļł@,vŻXÄ=H į½üb†}¹+Yd+«rģ’Cfže†$Ėūa0 †, …jĄJ©_Ņ“jR”Rgx<žĻmŪ>±¹ėNžŸļī)S¦d4éeŪöÆ#‘ČĒ$¼ūór5§ēpķ%aN>Ź!æ“ͧ[¼ŸĆ_’'ĢoĪ ³Ć€†Ćm„Ō®J©g|>ßæ¦L™’IX©ĮŠ)hŖ\ŌöŒƒøÆ§sa„ĢŸ\ˆĢ~„ÄĀ^ÖÖFÉTa #3—ł4Φž4’$m8’q’lDQżQā—#ŹŹ²čߤvwwĻž^…doĻ„ŲzīĒq÷° dĪ&’gŒĻ61™=Ą3\Ēķa‘īŹ9Ķo·śŗ”­“Ģ(ä%~Ž› £pć¾¶ŚėXfz=§Ā}OņĢżÉåśģŽ×–ž‡LBšĆ,$æC’ä$©źwğĖ]ßæ žšŠ`0 ķH(ڜgŪöcJ©2š.לˆ¦Ō××’¼¤¤äüņņņyÉM›6-ÆŖŖźFÄc¶wŲ¾{9œs²C’¾ķćāß”‚1£5ūŽ óśūO¾äak<#˜.­ÆÆ?bņäÉgϘ1#ŪļWƒ!ė@ėXƒ$ |I"+©åG2q·4a`sØmŗÉ66! C¢u ’ˆėā®Ż;Ÿ•M$Œ„ü•†”Š0Ėģ 4ŸžČĆTÓPYĪt†ŚĻ ¶Æł4,3—)ĢÖŻ,܊gs®Įdø­ęĶ1øČö:–­©øļ}£Ķ%• µē”5,~äeˆ¹vŽ µ£ń–ś’dÕ`0 ķL(š]RRņA$™©”Ź“ ¬›ŃŽć¼ļ÷ūÆK,č÷ūw®®®~’†į’ čēžfļ=:æāŸˆĒ‚£qŲo”ęž'-¾ü¦ĆąA‘Hä#Ū¶Ļ …B™†ä ‚1d’"ÉĘF"īÆū!»ŪOÓMµMVčd>¢ŒŽ$†x ž tµõ‡"ÉßN$uģń“löՓDĘęģgźB.mĆFÖSĻ”®œAÖ}Œ3É‘)Ķy&¹•žö>ē-Å=āy)ŪŁ\Ü^n#H6ĻCKxI(zR`ņģˆ=GÜ%žz ‡"%JæÄ`čZōF<żNFr)ÄĖå9$”n{)mٹ÷g#Õ]ŚƒÓ‘I–ƒšh7 ™yžHvž160xéßnAyyłŅ¢¢¢£ ®D<7›ėŹž£µäQÓ IDAT¾ŗ  ąPŪ¶Ļ …Bü~’H­õó$TĮŁo”CńƝ¬”ńėHöÓL+Žšź{šGŸó‰ØöWJͱm{R(z°E4Ņb qÜe¬ž(mA ˆĒä¶6¹V¦1ŻĶI:s‹OĢ_C#9ŽHņ[Od ? y©žŽ\?×ÓŠąNöZ÷ŅuĻh6g†7]l}sIwbūŗ ©qæ=į>ĻĶuL¤ ¹±h8£Żī¶[[)C{įöpxø&‹żõ„aŽ‰Ž <żK¤7ā0)?ųó貫€sŪI>ƒ!"¼aH™Ž/„io$gP’·9žk]G‘}ŹV2„YåvbGÄø™-žü”†Up:„čĢż5¶m?ƔšEĆd³™r,šŠ¤I“ž¬µ~Ų!öƒeiN=Ęḟ;ØnR€\)ń9L3ć!?®ß¶c¹J©ūż~’.@ąęŽ”Ń`H…Ig½ėsŸ”­ŅćŽSO7cÉć/S†6ݐŁĮX<}¢’б⧋›ß‚8Ī ž•|, ~¹As”¹dŌwē/Čp/2Ó™¾‚Ņ‡Ų¾f*[wĀoޜ 3‘ÜߟeŠÄcė[jč*³mīū#×MKĻĆKČyx/ 2Øč¶ū‘žümB<Df’cēģč,Č`0“'æG¤ńˆ1ėv¤"ŠˆĢH$/Pw£€Ę÷ųzÄŲŃ^³’Ķ”‘­³zõ¤}ņeL(ś0''gœÖś.Zņ¦”:β¬7p)’ł½ąŅÉ~yx÷QžŻŒŲEsåoÌÖąp)­õM¶m7U6Ų`čŒ Ž;ƒöŲö1ĀõyEĀoīŁģLfØ3 ŽĢ”¦Ń®Ļ‹~ūQ$>Īp›Kų¢p=či˜4±A™—&xQH>§”rK¦² ć§S±7 ueˆ™yO¤; ¢’{“¹×Įd?æīÉpĪČ×ēŻš±ŽžÄĆdÜīėßF’ļLę®ģn×ĀÄū­³ņńAUsī+ˆ_7G¹–»¶™žŒCĪCŗ{%qTä"Ļuˆp&TV ¤y!>CGsR†ōĆ$潅8ŻćˆĄuŃß>‹®{b@ˆq(āM·0x?śWFƱÅ$äŻqz8/Śßu4öĘ:ĪÕf>bų»„†÷½øx )µ;˜ƒä2ŠoŽŹv2[żbō/–'č)ęĮŁ©¦ō¶kg‡¹Ś”ķŻ !y…Žī óJD‡OF·ńp +­•3fȟ‚kFŽĖˆ÷gā;¼ sü1”^KcOÄÄććyÄ d2Iņė&ä¾8*×iČs;vq…äpšŽ-Kä'Hģ<Čly¢ÅŁżżiżMŹp»=€_eŠī ×ēĚõ±ŅfƒÉ<öĖ=Ū螅tē=ČD.—ŻįˆB¦”Õłč’\$ģ )ģ&~oĪyšē„ł}nōæ8µ‰¾bÄƑ“Ÿ{h[$Ė›Kü<Af;O2™xÄė’ ļó·ƒĄPd`8™1LE!p›ė{²XżīP”Ƒz*>Bž ūēÓPIĘqÄK~ŽD[ƒ”³QHś·ī÷ĄČūšhDŽa!ļĖ ń@Œė‘™ģ ļ­ˆļ £ż¹ ŸŸӑ÷L5¢Ō&›ž W„ŒS&#FŅ„v5Čó䥯ŃećcßIö9Ę/=‘ ·|’@¼K–_EĆēÅ3ˆĀ»7P™f;±uŻĻ»™ČųąW¤~õEΉ;ėäøē ć½? \mnAŒ>n/‹"düņŸ„vļ!ćĀıVŒG£H.÷ńƒ<ó‹¢2øyÉ7ōDŠ~³Ī¬Y³V§śżž)Zė[ČŠh½ć Ķ„“#ä÷Ś>”’–N‹ąhx÷ćms¬ (óūż?:P<ƒaĘŠæ /Õ]küˆr8yš× /̾ˆKßä„ģv9[”¶Jäqą{d†l¢ą<Œ(īkĻīČĖzäžÉƒ6‚øMĻ‹ŹūnTf…Ģø…ĢÄÆŪh¬šŽƒ¼č½Č õ ä%üUt7!ƒ…¢²Ÿø“ĘŹżŸŸ'Ś÷4䅾”/9ö”č÷»‘{ł` r ‘c·roж]Hśźī0r$Ūł×Č}—ƒĢ^ʔ÷;‰g!†ø—¢ķkó7y&ż1VČ~‰÷¼ĮŠŁéAę%KcžmÆ',w™ż1 Ėr±2™n·ų54özś ¹§vFī»ŃÄw7o ĻģŻ#_O’æ‹ŹihÜĻ”‘Č˜!Q¾0R6xׄå‰ūūYō’.4mH4¢żK—Ąn«Æ|†}śō®R¹ČŠM19³QOAæoHŸŗ™‘> ±ä§sg}'ڦŒŌ/®ņh›‡żzĻ48®ß¾FfĒÆ&¹k|=¢<Ÿx¤ g(C\¹§#ūœJ9­Eæó%&•qņ¢æ-*WŖžGی&µ»ÜŹØlW“<īŅA”Ų2S¬G &<%2³?™Åˆėd/ó:$_ƱH“TÉč"ˆ'Éeˆr–̽½Ęµ­LŒīė Ł ĘĶ%Ą’ 3Ł|3ߎģĻ]Ȍs*– ģhĻ„ÅX„&ž€÷T/Čåȹ;”xhK"›‰›L»Ś'–ÉŒś^LE5éĻe,LęČ ;Uæ›åśhāœdüq%½—ō  ɬö!>³˜Š%>@cƒM2®ŒŹ0 IÅ&ÄćįxāaQCWbé˟ŽKn^"ī²7€xiEEjMæø§F’2å‡ eTÜż+@ĪEoÄ ”ĢÕęĻÓŠ™Ńī‹ŪjäšÉōń8ZHüł² ‚g#”=Cih`njf~rļēŅų—ķżBĆP„XH`KBbT!Ļ©då„Żįž½ĆkRēN®¼†ōŽk鈝“h<&l«ė„%¬ŃZ7š4;ł(Ķ#Œņļ&æ'L>;ĀĶ÷x ĒGĪÓ|>ß+Į`°Żr9 ‰@fl%żŒVKYNņAtkhάg:jh\.°5lÉbČL ĢĢʧK8×\~¤sׄÆ"uĀČÖĖ‘ źIž(³;”ń`Æ5ÄŹņe“4ÆÜāF:Ļ`Õ`Č&³žŸ½óŽ¢Lų÷Ż’MoBļEAlˆ‚ lŲ»bI"§g/g=ļ4zw?Ėyzw^QN’Ų ö® b{”$ōš^·Ģüžxf³=›Ąūå³vfŽyē™ŁŻÉ<©sR<ĻfC*ÅB"Ö ›_€TŠ÷“ŌĄi«Ēöš ö”ŽŠ³‘Ō½Ēes=āx€q߆DÓm%TłoBćh†??H ī60I± Æ’²=\a½ügÉ÷łvĪū9ā xˆ@4A_¤†Š’³nB"К"ø~R ­Ā®~šEß_|Äc i wĶBjé|F7@)õ7‚ŅF18z²nęĮżLN9Ś`Ī›!Eŗųā‹ēϚ5K’ŌÄmŠh4F£é8Ļ#Eān@Š_‘(—ˆ÷ūqėAō’^w5“†ŌK©&²Ų\Wq3āż_‡xÉ«‘ȹńHŻæ1ļ:KÖÕÖyø‘@9DÖż˜‡¤ģ-Cœ"ÅHś]0 ;eHXü:$iéųOŗ†&¤›Čb¤b¤ Ék„v[ŲnEĪu’*įBŅ—(ĘčA®c1’¹¹v£‘B‡Ńź;…ó’ž·Āšū!䌯‡ ,’‘ėēARøāJaaįCLK5™y¦›N*ŽÉį},Y”ų~qkM¾×ė½ łü5šN¬<-¦'S„„ź5čŬŃh4MW1©E² {_t3¹élģ!QJW!RĖļų•ˆR ā}_‹„’‡§“5 •ś·XŪ–!R‚1¬¹>A”ć ˆįa‰%_µµĻ-HūQ??"Jējiƒo#†šī_"īüQn_Xć› tæißū‘u¾u– %ˆÄ™ä³¶Bd4A­µ¬hFÆ5ē•ˆ§Ż‹žŽxĶżółƒ‹’šśĒ}6Ÿ\Ə%~ b©D®ż2¤įSÖuśŅŚor­V[2oA>ēßŃ1#ÄÆHač-Ö±¾F +ó€wėSƒ|·žBŒM]­ŲiĪ8挄„„„W *“8ć$ƒ”tč[(£†š|ŗPįõµöŸ0aĀ«ß|óĶʶöÕhv©²ŖŃō4ś"!ˆm¦Óh4F£Ńt€ĀĀĀ r¬ŒbpM”„µ‰1ļS;/¼*ńqiié”xÉ£Ł}Ńš]ų®Ŗ Ńh4F³Ūržłē§Ųl¶ēĀ¼8ģpŁy>ŅRā,Xbpų~±¢¶¾Õb2hÜøqŸ|÷Żw»K½#M7Agģh4F£Ńh4š˜ŲķöK żŸr€üśßl6“ӏõ…­³Ż'q4»1Ś Ńh4F£Ńh¢rå•Wŗ”R­ėv8j²Vž·…QCM† ¹v‡_xį…ĒKĶī‰6h4F£Ńh4šØ444"õ•8h‚AFš6l+ĒL1B–•R·ÄIĶnŠ6h4F£Ńh4šØ˜¦y‰’½ĶÓ1Ś®i‡½F ź0 („Ž+((?‰4»Ś Ńh4FÓuäg żŪ{*Ē{Å[ˆŻˆDä;Ó'Ž‚„SPP0ļ_ŽgŒINvtļm‡Ŗw»sÖÖyØ®m\8 ^jė<­ĖĶ->ŖjÜx¼ķ$šš}ŪtĢÅįCdVJ©sā%‹f÷C4F£ŃhŗŽqĄs@Æ8ū`¤_|GÜeżƒĄŁ]"Q€Ė€C:1žBąč.–”3 üvĢ{<0#l]ņŁgo»PJ]¼|ąųŲŹöw.¢ĻžĻńӒŲM˜ŖkŻ ’Ķ:~?ėz¬s4Ę"×±%—ŽÆĀĘõA"%åČw-|Ž|ėųČwą[K†.eõźÕ‡ Ÿū5°·į:œ<1ARyęå•ÜqÓx”ŠóĢĖå$ŗģœ<}ąvĖwņ±9łŲķŸ'^Lo°ąŪĄ5 ćLä{¤ŃģP“@£Ńhœ„D¹ō×»ńŽOEī9Ö’EŒ~ļüՈar5_kĪļ¬qP‹#²^є€ZŪ/E žń÷9 1`¤!žęIˆ~}Иū#c/$ a ¢„ēČsϳę^ƒ5±•€½­1‹ƒ‰_¶š 1©ČõI^oc®p®·ę€\Ė~ˆ7})p[ؘ»•AĒŽŚž¢¤gYēš‹DŒ@šXœMą3ł8hŽ`ń$`r=S€™H$Ł©Öö‰Čg|;r ūX’’¹Žgvš:tˆ`@¢ ökæõß9VĄ3/ƌŲöÜ+åų|&ē…’×Õ{8ģäw˜ój‡œOьį{d?¼>“ Æų„'ŸŲ°aSļ¼žśF/ E:s.>»œńc³¹šģį8”7=ŗ„GŸł5dßłŸną˜³ęR±¦ÓNągćrłźė­yź;¬Ū #é de$`w(ģY²œ *ŌÓ/®äÄóŽgåŖ:¦LŹćœS3ft&OĢYĮ¤éo±v}#±P F \SÓ4ǟ{ī¹Yķ]cf{эFÓuŲ/Lāå{Ŗū܁<HŽī!ȃųząYąÄPQüŒD, ž…x™F!§KÖ'‘¢V@F$dō~ PUI£Ń“ÅR$D÷4Äņ»< ų}ŲŲ?"Ź8ˆ÷öND¹üˆ(’„ćž \ˆ¤ AĀĄ×«¶ĘGt5/zoųQ¶÷Z÷?ēķ Z·¹· ؁²]Šxō;ĖÄĖœ±ø1^ttŽ?š ń-b,Y½ 2ór?ńäĻF¾G㑨ƒc¬c܅n°ž‰Z˜Lą{¹]\|ńÅɏē’ņšAm‡’ūŁcdöĪęł×*øļŽżp:;=÷r99½™vX ŁĮüO7°nC#ļ<7C'å…Ģuų)ļšīüuĢ8½c¶ģWŽZĶāe5¼PzÓ§µf.pć{2rāĖ8œ„§^\Iv–‹y/L ‘ńŹ™£é?īy>żr3gœ8ˆ’ŻGœś.®O>49ä˜wÜ÷SŹć­g¦b³ęæź7{°’“7xōŁåüžš±ÄbäƒE?Śż‹ö„„„C'‚F³ĆŠF£é:īCņJ&ō8IČõ ˆ²Ž€<ō?„äā~ˆ<ōÕ"—[\į•ˆwl4ŗz3’£ŗų ļ} •]jėDI¹ ¹’OGŒ }äæj4š¶yI±IF iӑŠ÷gĆĘ­ [öē뻬’³‰¬ņ[܂x¦AņÓļž@Œk%ūgvl¾pE”uuä¹ĻLGĀāӑūL.’wæ#SŸĀÆmGł ńž;ÆeŚ-Ćė:“5Ēßoż2kŽ DiėČ}æ-¢WŚ4¹@ āńF—yŻn÷ĮJ©ÖĻzT'āÉĪ=m(×ß¾y®ēŲ#ū°ty-‹¾ßŹe…£BīIūēņٛDZ×™ó8ģ66oméšqü„ŠŌGŽ/d}ļ^‰L;“ó?ŻŠŗīę«öāŗßŽ ‘Ąī°”l­ /uIeU å«ź¹łŹ½B”€=Ge2bh?-ŽŻ$ + @4;mŠh4š®įrą$D³¦±~Ę#ÓWČļ\‚xź÷BśÉˆ‚īĻW]Œ„ˆNC !Ć’ š÷WÄCų ’ļ āŻr ĘŠĆÄø`G£Ńt”gßܱˆńīTÄXŽ‹¬½\ģ$æūpZHTI8ń¬ē#æć;cĎ =łČyF¼ź[ÆxrļéŽÜ‡mĪ%p-½ˆqōƘć $śbo$ņcbü،|Ā v†ö®y b8:#ʶ5ˆ±·K°ŁlćM3 œŽLt'_ IDATŅńĢø3OĢĶZij/­l5<÷J9ē†yó{e»Xŗ¼–ėo_Čźµ “ø jkŻTV»YQQĒį‡ä‡O“-•-deŗp8TĶ>łÉ!˃ś§ņŌ +ø÷_?±iKn·A}ƒ‡ņÕ ˜&ķg;PY-?ß^_ÅWßnŲ^U榮¾m›P^o“ōT“Śz‘Ł4Ķńķy—ĒŽÜŪĄ’ZoeWįh 7*;mŠh4šķēx$$óH¢{ĶbŃńę…+Y’"P,˜=ĮO“*ßį¬FšZ½Ė®łĒU£ŁQ¬C lžJ Ż5Ū0O%%?œæĖtą1? ń7"łą’Ŗ¶įųŪˁÖkuĢ”/QjĪ^- —’WŠŗ$$Ģž.$ŗ*vҶ(&>k|°²ž‹ŌøĪµ:ģ,›‘h…y LÓō× @)ČļŻŲ"7'‘©SśņŚ»kØoš’šāą™—V2rX:ūė2vī‡ė8ł‚Ų{L‡˜KFz‰‰v2Ҝ¼üÖjŒŽhānA‚3zžBųśė‹ņš£K™>­ćöĢ&-ՉÔ94³/žØCĒkn‘Æ€-FjÄ G `ÄŠōvē雵õ­‹£:tš];Se3;¾ātŠ"¤^ĖķmŒq"Θ+wŠDQŠF£Ł~nDĢn[?©RŻɵbźmc^…~ķŲĻż[ļ­„©¹ć_Ė^Y.jcxÜ7o éźł\qŃhī½}ߐõÆApäC[äõN hĘN:&²äE{Ž’Ą<&‹—·ž{īE]”={öģŹķ¼krņ]^œOĻ2Œ·^mf ‘¢o쉢  F³żžś*K‘k½ łģļG¢Ø¼ˆõBą¹6d ž÷LÄū·Ģ’££Zī‹Č߅W‘"³kśĒZ2Ü{×Īašf«':ÆŽ?'ݟō4'ϾTΈ”i(ēœ28b܆MMäē&E(’^ÆÉOKj:(v½pLeó–f–—×1lpZČ\Ÿ~¹©u¹±ÉKM‡~}"p¾’¹ŠhśæR2O0½²]$%ŚYōķÖØ€Žzƒń{eóō¬¶bĀÆÆa#ˆ4 ķ.¤'# trŸL U¦Ÿ\¤ĘHėżV$ż¦Œ@NŅō äwī~@Z¶.šk4rŸaķ³‰čńh‰Üo’\ls#÷“‡{ß ˆSå`ÄéŲŗ‰ŠÖ 6kŻm yīt“@£Ńh:ĪĆȃę3žØ\Nģ®ż“{bl’†Ąō£ˆ±`<āU< ł£ń%’ß’wäŅäaż‰vd­D*F…D T!¾?#^°f¤ĪĄh“ņÆŃt–*D;†ČßæĒŚ-iŗŠ€ēö ¤ĶŪåH:A&P8Ü“oC Øä:Ī“ŽēW°Æ·¶ĶD”ū$ė|>B¼ŽĮŠųcHÄŌ HŽżŸ-™¦#yÉBZ:ĆĮ3ȃ}{üQÖ’„“W¼ ł.U½ˆ`-Ø†5Čw£Ų’!ßŗ&K‘Ļ K:ŗd"†$r{u^OINrpұyęŕ,ün+“ČeŠ€He~Ģ~rO½°‚Éóp:m¬^ŪĄ?fżĀŖ5õQ•ōXœtĢ~’篹ųwŸsóU{1d`•U-”<ż+«Ö4‘ęl•m`’Źžł•żĒ÷bؐ4ZZ ¾ū©’Ūīł„ „%Ō&Ó7/‰·Ž[˳/—3bh:¹½éß7™3OĢæKÓ»—‹żĘõ"?/‰­Unę¼RĪŹUõÜvżøvå7˜¦9’Ż×p:rxQźė‘{Rp­“4$¢R!ʰµČżę.äłéXkÜČsĻsˆ”͉“{¾ iݹyNūČŚž ņ[Ūq¼\Œ<õµŽŸ„Dž|ƒüönCR?ļäłĮ¶EuŚ Ńh4‘|Mō¼ųAŖ,gÓ~ŪØHhh,š‡É;ātDÉæ…ĄƒÜéȃŽCˆ•{ āåzĄŚ¾ł#N±5ę-ä鵈×é:¤ŲUŖ%ß-ˆA@£ŃtŽsc¬’¹?D#|żlᭊč”$rēšvʁ :0Ī< _6~BŒńæ [īˆü~ūwB¶Ÿ Ō’RŒńĻXÆš¹Ÿz_‹\ü“%G#b ÷#pböÅfD‘ß?Öwęą°åœm9~»8Ž,Ÿ/ g¤mŪ!fœ6„ĒŸ[Ī–­ĶÜySōŚv7_µßžTÉE×|āy?h’ŠĪĮŸlˆŗ_4śõIꉒNęņ›pŒ÷[×ļ36›ßŒāé¶ī‡ļ;ˆ™×~ʧ¾ŪŗĪįP\qŃh Ćdćꦐ¹Æ»tO|½… Ɛ—Žāž?ķĻ_oß·ŪąÖæ|ƒĒ°łe¦'pĖÕc9ū”!ķŹžz}•R]ÖĶ”r¢ūŪž¾ŒžLą»~ ¢”&Šją5ė5‰2ŗyęłOИŪļ’yˆQįFä7u$”FŪYČ=7øĄņ?#ƒŸ7‘īJ#ƒŽżOđsI”sSČó×]D7ļ4¢LŃh4F£Ńh4»!\pĮŽv»ż;’ņ™Ó}>±óśŠiBu­ؤ§:±Ūc«77±f}# Eæ>Iäå$ŃÜ⣩ŁGV† hhōāó™¤[ž|·Ē ”Ń1·Ļg²lE-M>²3<0•·Ģ•™(f`šŅž°¾ŃC‚ÓĘ ž©¤§9©«÷`³)R’Cż¤^ÆÉšu l­n!Æwżū¢›¼üŗ²× -ÅÉ )ø:Ö`gk•ā÷‡ė„„„éŠĪ»ƒĒÄ„ˆbģz©ēįo-zbD ·*„"¾§Ø”ÅH¤cx»ÕsĒÉ»HJĄcDv™¤¹č£Ģ?q"Fדå€hyĒ[ŪGŅvż§ŽŽŠh4F£Ńh4(„Ņ‚—;Y00­Ź{{äåˆŅr\—DW@‰WČœ6¢Ģo·+FČYēJ°G(äJĮØį‘UśÓRQet8ƒ¦2x`d*Cr’ƒ½Ēl›ć>ѱjrQQŃņaŌ”šb³ŁZė†į5Mӟ’ƒĆįh1M³1h{£Ūķn-9räČŗāāāø*žķpžõ’7€æ_ä $Mē€<¢B®'ryØõ’ę(ćžzŸDLŽ6ʉŌ×žŅ…Ļå±dėč«%_Ü?mŠh4F£Ńh4Ųl¶ ש jŗ—+"ÅāhÓ4P*4j"øCR*d»a„Fi(„p}x©VJ™Ö¼RūƏG)U“Ülšf’ó%0«““4šr½=\€Éū2ʶ³üK†XįC ŒFÓus‘(ųH­“»‰]Ė)øDxaS,9Ā[9GćH¤†KYĘīpbt®Ōh4F£Ńh4»J©Ź{ Ńāš.Āa›-.į3MÓĢ2M3 )¢74č5Ź4Ķ}ƒ^#(ODņńLīBY&"”ń—ĆĀ^§ ^ö¬±ė‘ü’šœ’^H~’!jD+ĀšRLŁ?Wiüź¤32l¹/’j°1l}“\—[‘¢¬įķ;ć‚6h4F£Ńh4 Ć©€ēīX;{Ķ6āõaōø²lŁJ©— sŗh¾ pśĒˆTĘ_AŚ^`ż1\…t)¢|+āŃ’ é ° éÜį/ŲlCj L>¶Ö}€tŠ8É÷‰ų=b¶Ģü‰@Ėē4ąNK毂ĘŌ"F‹`ĆĆ$¤Į,ŗ Ś Ńh4F£ŃhĪ+pw$ĄY³Ķ“t Ÿš6‘mšęoŗ`ā’2Žމäķä )·"”ūµˆW½1üiƒl"ŻFÖR¬ļEÄŠ€5ǤR’:°)Hxm˜K­¹j‘6­gEHķ?žT‚– ĒZ²ž@ZBÜŃ54M\(**J³Łlż=OĒ›üjz°ińÜmŠ¦påcÆĖ>ļ‡x˱=ŪŹĖĖOVJgšf¶ĻēĆfӁH»žŽŅ………[•Ro†ńāąĮƒ_-..ŽkO\f;1Ļ¶ÅŹBb;‰H8lBū_Ē›%Ą«Ą ;łøÉČĆxwyžõ+=‡ĆQ\l®¹¶V¶P±¦±c2q:ŗę¹”¾ĮĖŅåµäå$ŅÆOü|M-qÉ’ļ*|ķi7r’l‹†(c…ū—6ö3€UÖ«-Ŗ­W{¬·^mŃüh½ “øb·@?yk4=e㭿׿‚_WÖįöōė“ĢČaéÜ|õXöß €Ķ[š™rāŪÜvż8Ī9unĮøC_åÖk÷fÉÆ5<ūJ966Ń'?™ĆÉēĪĒ“›“Ųå× Ģ°¹““4׿PPPčv»“üĖÉÉÉ)†a“>L†‘nšfk*‘ŻnĻ Śę Š&„”K)\ģ Ł0 WŠö4„T«nhšf&žö6„T†aµĄŸĻ÷Ōć?ŽmŖŚk:‡6h4=no(**ešęŸ†¤ åŌž§”čø…ŪczØóŌŃā땇4;…ƒzM¢Åh”¼”Ó4ļ™9sꛏ<ēÄL&6oŃ~ŖJ¢(:ŠŃ~†#^éąuõ„*’ žs0ģöŠNEc0ī.ēˆ¢¾HA¼ÖļÉH(ū¤-ˆA££4!ŹĆ‘ˆĒÜļķ’‰bh‹/Ԋq!iĄk]Fū.#Tł·!×¼8ĘqlȵŖ"“C’Š)4Xa­†- 7@|Šō÷óš ’į7œfė įċżoLÖoR ź×õŁY7/āįG—pö)C˜qśP’“ģlŲŌLéÓĖ8śŒ¹|żž !śĪœł!ĒMķĒm7Œ£¾ĮĆ+o®ęĘ;Ń+ĖŌӇšß²%üī¶…\pÖ0.æh4v»bӖfž˜³‚ćĻ™ĒŅ/O%#͉×g²rU=5µnėÉüłžļ©Ŗq“•Ńuь›¶*jźB~āßvŁä=‹3¤püUüŸn£s]J³½‡uv¤ĘČz"[v{“@£é¹tK#Ą\0Š4Ķ“&ēL&ŃŽvøÜ/µ?3ó|*Ż•mŽÓģv 7Mó㹦iŽXVV¶»>iz&"łåćņ|$'¾ÉG’z'ČŠHū]ü żMDF ųńēĀw),ų;½ø"×ę¤Į‡1ö¤$\ |Œx=½ˆ'“³•øżēx”!ūĮ,Eź<‡¤w"ʆė˜„n&öõ’ƒ÷RąÄČćDŅ(ŗ=N§ócĒćF¢ XVncźĮ]Ū­uń²Zš[|9¹OĶ1#3¹“pś…źn';0TN‡ c³Y^¾x”ō°åŻOM€Źź¶ķXÓ§õ‹Ųߟаf]C—–¬=ŽišÄŗ»p”éQ)HjĪļ‘ßä?:1ׇ |v5وq÷BkŸō“@£éŁt;#€Żn?PvegļĢq1ǦĮŪŽā›źoZ×õMģĖČ“‘äŗrIq¦¢ĢYG³xM/ ¾zV7®fiŻRŖ=ÕӔR_^ZZZZo5š’ˆ–`?¤ŪBx…ńžQʶGbx©!ņūW ‘Yȵ¹ų)l\k°1dZˆ0I¦x‰Ł ¼F įž5kVcaaį—HJ–®T†Āfėŗ(KæÜŽŃüi’ˆu™‘……aäņśLžśÆłō«ĶŌŌøilņRßček„Ļ4Ū>‡“ŌČcŲlņõ6ŗÖn0b©v>"²¾É+HM‘cˆ4ä#žJ" ƒ–YÆp²¬Wō¦pHŃR°ŽŽŻ{ Ś Ńō|ŗ•Ą4Ķ)J)§ Ę©¢W 21ynͳ,Æ_@ߤ¾L͛ƀ¤hĻŖšŻŃi{pdīT~Øżł›> Ž[ļJ sJKKļ·|Mųų ÷·#›™Hųų $T|:’#Žüެa“_p!¢ä’ »÷SdżæńŅ/D¢^'Š āæEāöŹæ5h!č×®z#_ Tń‚xĻŚ ūjFņņżQ ×ńė}g§‰E|@ē¬u×"éžBkć5ģx ēY˟"ēx)ŅĪŠĻuD®ž…ŌhB"zļcš[ b- éĀ?Ó¦õUq%“ØŅ9N+ü€ŸWSxīp†IĒnW¤§9ÉHKąųļué±¶ӄ„å!_åog͚Õs›īXj°9‰®  ł¹o}j-߁Ak-€DóŒŚg RåIk¹b48–@U#Ņ=äbÄpœ.察ņ0ræģh€F³k”Lóūkž<:ŽF„T€^ įŽs7¾ŪŖüļ“5cņŽĮ¦:ū<§Ł•±)ć2Ę1,e(sVĻa]ó:€»ŠŠŠ—””¼oł4šv8iå7€ČüŠ4Ä8p)ņ@Ł"žż÷šÓ‰żŠyņ»©v_ƒx“ś#o‘Ķ«¢†›CAR0Qøi»čĄ«HˆżZÄ[v’ć-¢|’Š„ļ¦!õW ѱ(CŒ+\t;Ņ5`3āåĖlGžp®CŚn$p-ś ēy‹5g5ž’(’~P ä"Ÿć"Ĉƒµ’]H§€Ė‘üdūæUQ޽QL ×¹'ń>ņ¹°čGCt&»m2Ņ$”¾Ŗ&z0̵üŠ‘CÓ¹“pT‡ē¬¬jįóÆ6óŸ{'RtīšmĮi݁„+u”Õ?¢ćŌČļp¤ķ&Č=ä)¤{É,ä¾01佈Āk$#÷©Æ#čjÄHy5ņ›’ ¹WžŲ8 )„éC:ŗ”"÷£b$B) ¹§üłG«·Ņmэf×!³›ņR)Q7V4TšU„“Ķ›1–ćņŪy’iz©Ž4f :²ņR6·l¶e]tŃšŁ³gė¢šxq S0×"ŠČkāé^6Ī$4\ž-¢+ŽåÖ±‚÷ÆA: (åmȹń|xÓ3„öKäa×ĻB$Ü’P$:! ‰PxyH1b\Bd½ŸŪ‘<Ų½‘œŻ*$šąÄ{>¹&^¤õß|Ś©żQų§#†ņšżb\YnūĮ’Ė_|ļY­ ƒł‰š8Ģ:Ēt$a.”Ń' µ öAŒUˆ±%‘€ąˆćPkŪD¹˜BddFŗuī#é=†Aƒ}\QQ±ĖĄńå÷6N=Śč²4€Q#2p8ļ}“žć¦ö ŁÖŠčeöĖøö·c:5ē+Ģ?Z’‚EŻKGūāŪPLJišŃŠąķnĢ"ōސDRĶG|ßibŲó· Źü/ˆ‡AŲ¼#©<ī[č9H·’„HšĮ„c^DīE‡YĒ[dĶ…µO¬ūb·E4š]‹ī`pŲ£xōMÓä½ĶE™ćŹazŸćw®dšI‚-SūĘ’VĪĀ0,ąFBūk4;“Y1Ö?ōž$ü½©Š€(ŃiĄhėżĆÖŲoˆž °9ʱŖe²#“Š1Æs’ w Y‚™O¤ņķeŪ½š›Æ[8ĮEōV…ÉĶ0ć§x£cz£ĄÜ(Ū~[žšČbŽÆ½? ‰.ČG”†æ¶sģnGqq±QXXų V為zųe™Ŗ;ß IDAT¹bĻ]cČHsrśńƒųßćKIMq0~l6iN6lj¢ōéåx}&§0ØSsBvf÷üó\ 6ś÷M”±ÉĖWßlįž‡¤³fSs×E1l+n|ūsČsҲ²²²ÆbßØ “p_&ŅƳāÅoD¢wźÓĆöõWgģE$}¬yˆ²­‰°#Ęŗ•QĘ\Aū©P=mŠhv=2•i¾ó÷š'Žŗ&ć¼nõĒduÓjÖ7I;ėĆsĒ®ŗ6ļO³ėŅŪ՛ ™ū²°ź+LÓ¼ōŒ3ĪømΜ9;ŗˆšF³­lA<ĘūšŠ;ž $`—**„‰ą 1ö¼Fū5ŗ%J©ĒMÓlm]ųÅ7Š=GtŻüŽ} ©©Nž[¶„Śŗ@€Äš!i<žŸCŲ{LV{GāJ°óäCSø”x!gĪ Ō˜ģ›ŸĢ_‹÷ćź[°nCü»¶}ū‹ęŠ õGc ŻŻų ‘æ•\ÄŲ7‰HEśh)Tóƒf8)ˆ Ś>æ ‘V)ˆ &ʘ&z`»æXčŪ‘ $zNÉ{)*±£ŚJl ±ÕÓĆĀĖ4恟'ź^gØVŠn(,,\ō›š7•³'†l›·q *æ ͙ƕîB)} Ņtœ–œf~Ķž•޽{3bĈł999_#aĒs•Rįł~F£é ¾SJķ `·Į×xčÕ9½¼CTVµŠŌģ£W¶‹D×ö;źź=TU»IOw’™Žu­ūŗ‚»’ė b]ė3i·Ū‡=ņČ#Ń<Ļ» g m8ūŻXö#įs Rƒcpt”qžźžnB‹žŌ>ɍ²O:¢?ł•ü󐂔ĮŽäžū#yr(„ŁPWŻŠÄ†|yžDBLżÆß#įqW#¹!Ż .[“°ĶīK¦iņīßkžˆģ£'V5U0"e„Vž5ƕŒ>Œ)ĆńS§±_ļ\27m™bÖÖ]¼†Ļ·Ņ4Ķsā-§F£Ńģ¢ųÓUš0÷Ó½—å¢_Ÿä.QžAź ģŸŅķ”’Ÿ–©`å„Ō;»¹ņß „ą—#Wؘ”ˆ>4–HŹ‘0’‘aėHM‘ó‚Ęe’"¤öŠI÷śru›wˆž—œBd‰ß _KąK$¼$8ŒÄ„D 9ń“†„ n«‡?ĶŚW‡ī^ųŻ" Ö#ݜz»rکѩ£RČ=.cķZźo|÷'ŸJņ$ŲPŹę»'I—\”ēt‹HĆ4hō6±;h4Į$öK$wzžĻ>§vF!ī÷ēū•Į4ń~’#uW\gkzč€kMÓŌF£éBŹŹŹš•R÷/{¼0ļSż¹-,]icyEĄūošęGeeeĒQ¤īĀF$?VmŸ¤Š’D¤–ŹD$-ąD¤ąéį±Ī ÷&’2P†Ōe)ĪFt؃t[ł;Ņ) RȳŠz&bóc'#RĪ!Tļėöč€ĪaCĀBüÕÕ‹ŃZäƒ_|I.G¬@£‘J’©HÄĄļ€?#•,D¬QÆh+q%byz©ņū҇ņ2¤„ icq7Ņųoȗ7x)œ±Ąä~$ZįÄ(į“ŽuņCó÷ÓŌģśÄ=Ą“žōx×hŚDAĪ“l|+VŅpĖm˜-m¤ų›&M”aĖĻĆuāō»LӜ£”Z{F£ŃtĒó‡Ćq#FĶü/l¼ÆA~ŽŽč(†ĻæńüóēxČŅ ł˜ÖĘö;Ć–Ė‘6€±˜\€ üŌF™'OZÆöų,lžƒ~ Ķåˆ2ī•!Źu¾µ Äź4±ü¼‹T‘ü±5ZœāuąH™·å; 'ń÷ä½ ÉgeķsšO$Tåkėų’žAśQ‚ō§o½’±žżl-ŸxūCz/BŒ/[skv/ŗE$€FÓ’‡&““HÓ’l[ł¢ńĮ‡0[ÜvĘŖŃh4š.āńĒo@Kx}šģŗ“Og˜æĄĪźõ!¹’Ÿ–••Ek9©Ł~²}éšx ŅŃ€Ų¤"ÅżÆdk]=š”~Öņh`jŠė$l?/h¾u„R‹äü7­óæw ŸM/ÄóĪ/ˆ!¢-Rš‰a²MEĀa¢UĮŌģśh#€¦G2,cóV<_} Nœ“¤£„}äpHpāŲ{/ģ#‡ćœ4×É'ąæ7fM ī?¶ćógń5f—āā‹/NVJ¹Šg/W|õ½.čŪjėįõ÷B®•O)„Õ;ށė‰Ōæ4耶ø‡Č"€Iˆ’NÄėŸ†xģļŽ²’f$Ge[IBŒŃ\_„Ö!ˆFŗõ’ÅDoYøbŪEÓōpāž°-¤O'i`•Uā©Ž] Ӗ`#ē˜Ü[ÜT}Vµ%Ü5I•BŹØT¶~øow§×™åĄ·ų0Mšˆ}äp<_|‰sæ 8÷Ū—–_!įø£hyńU\'NĒūó/ų–,…£§1MÓ¦”2Ś9ŒF£ŃhŚ øøŲV^^^ąńxīD_!<’–=†yIÕ„}ŚäéWķ4µ„ž5{öģoā%f÷F:G’ė±§µģ/®·ß8V#¢ü'GŁ–‚TĆl‹J¤®ĄL¤oęnĒż«ŸKRiž>ń–£k0»:Z'Ó4yūoUOOż]Ö9=ā+ĻEꨪæ¬nsœ²+RG„Š”hc{Õ’Ģ31½&5‹ŚjŠŅʦįĢtRłqå=޳W‚\÷/ŖŲyź?Ųģ`6‹żÓ1~oĢŚZœū탭wo|å˜Ķ” MĢśTbfS3(eGŒ³M‘3k4¦#M­ØØų«Rj|¬1µõв\~¾ŻŻ7:|aćŪ_Bć6˜¦Y'q4mŲźō|\…ä˜ &P‰¤%ąZą’Täļ,&¶2Č¶ūØV p¬ąĻ³)ō7HĄCĄ0Ś.¶Ńć±§43°żo9ŗ1Ł6å{æ§EģL2Ę„cøniH•BŅ ¤nˆŽFW~*1ļwßćž’1 ĒLĆūżx—-'įŠÉ˜UÕØ¬,ŽšŠJMĮ¬­Å–— †Q§ģv­ük4Ķ60sęĢ= ĆøĆ4Ķ3:2ž§eŠw?±sōä¶ŗ`ļžT¬U¼ųvh­„Ō„„„m{34šˆ6tž^ł…ĄHÕžR¤dŅ"iG±=<…Æ0¾–6`_¤²QŠø:$Żą¤:ėZ¤`)ҟ2©%Š‚D/  viTVõ2j² t­‹¶Č4MŽ½æś±i×e^°0ŽĀģL”Caz»®z±-Į†é31}Ū?§Ķ©0<]'[§ĪU²©.9ķ”ym3)“GƒĖ…{¾tHræؕä^=­Ļ9y’„>Ü)Bj4Ķ.DQQQ_Ó4o÷ł|!=Ņ;Ģ«óĆ*† Ņ]ü46Ćģēxƒģ"J©’”””ō˜~ńš]mˆÄTĖåņūé©Å|šGąt` ŗ’3Rlo¹µĻ2¤E`0[Ö|Įx­c×[Ėňr?igaC" . Ū÷ąVDį’1üŲ„Tü? ©+P\ ̊q~» W©«ZØ~b50(޲ts2¶¹»² }\:½¦d³ž… ¤ī‘Jź)Ų“ģ˜w•›šEµŌż(Y5)ƓÉ=VjdŚ\b;rå`Z6»Y÷Ģ:ū'Ņē”|¶~ø•„\©£e¾Ķļn”y]3żĪīKõWÕT}iąĻžœMĘųtV—­Į['Aõö$;Y“2I’Œ3Ė)MpovSūC5_Ėķ(”—“~ēJ ¦JP(›j•Ķō™”’§¢õ8i{„‘>. Wž e—øLo—†T}^…Æ!šD¢ģЬIY¤Iő.| >ź~Ŗ‹›! ~Iهd‘tž94žė”ķćåąś™^Ż钹ægl Ņ3Móūśśśėć'•F#h@$ėh;§æĢzłŁ\ŃΜ—GY÷Šõ ¦2ģŲ^¤į=ķĢ0×zćžn½vSŌR0µ }vi#€²+l‰6ņNČÅ4Lź®Ē×ląLw2*…Ücs0Ü Kš5śh¬čńä”É`˜­ĖŽ)>ؔĢ×ėš^(»¢yu3žZ/ī­n”[¢ 刞 ©²/A›óOÉ#±o" ĖØ_\é5±§ŲIšLļ#{aKPT}QįȒŌ?{²½u™ E=kb&Ł“³ńŌx©’„o›ĖFBNū¤“<(‰Õ­Į“¢ rÉ!uL*-ZØūQ”~G†““±i­Ęƒ·ÖKĶ7udž.žÆįYŠv–Š-7—ŌŪļÅēū»}ĪNS£Ńhz,ÅÅŶU«VgĘŻJ©ķ®™ŌŠ’(³sĆo¼dgv…„=ӄŅ9v/łūYo³ŁĪœ3gŽNOÓÄmŠģژęRŌ®]ė  Ł„¾FkŸ^Ÿšu .ģOژT–6м®…ęW70čānƒÖr&¬yl-ī-īÖU®Ü„čcc“@bæDŖ>«¢ņÓŠ²…¶*xń@RF„RõE5Ž:o«,}NĻ'iPR„l¶Y³pov³ę‰µ”’Łg‘5)‹Ō‘©ŌżT‡3ĖIź˜TW6±ž…õR}Ä¢śK' śwź|ŗ’Ź+IĢw’śĄ½4Ž{?-ƾFdaĒ>ćH»ūO^•‘^ƒĶvŗRJ»Ÿ4¦ ŠŠŠ¦–——’M)µ·ŚĪź}¦iś”_„ŗVńļĒ\7ÓKJŅīy+~ś5;_’’}ź1Mó¬ŅŅŅ%ń’I£ F4»4¦2×)tYŚN©°½ż@ՓSÆĶšž¢Ņ橿®6B!vorć©ņąĢtv~¾źB”’mĮž,i–-›"ē1<&_ßŌ)/¼+߅rŖØē P÷S=Y“²på'P÷øśødżµ!Ź?€§ŹCcy#)ĆćÓßÉō™¬a#¹Ēäņ‡›H<÷,ÜļĢÅ÷ė LŸ{ß>$>Åp쿯 ĆX‚Ķv’RŖ¢ż™5f÷äĀ /ÜÓf³ŻkšęqŪ«ųõJ©æ†1G)õ°nÜ’ˆƒ+/ō™ŽĪ »†ϼnēćÆB”ø¤¬¬ģĶ8‰„ŃD  &œ^(óƒ]1Ą£½é5c†ģ·…·vūć¹·ø1 “ģC²p¤ŁńTyńÖzńÖy1ÜM‹“'Ƀ‡-ŃNŅ ¤ˆķ6ė6潅^‡fÓūČŠ§$£Ł ym3[?Ŗģp¤_±Ļ>$«ķqNæ!@ †;śÅń5w‹ÖXŽDcys·Ģe…¹œŌŌŌE·ŻvŪįŹnƋ·lFÓ]ńųSJżK9ßNęŁl¶kgĻžżcšŹ’’’…EEE§˜¦ł2°µ ž6ŪÉåē{Ōw×Mhh‚‡Ÿr°¬Ž8Ø{”»’ŠµŠŁĻ…VūL„Ō„„„Åń‘J£i›īõd§Ł•qg`żAŠō2¶wļÆ~¬­Ī;ˆŗ£\}½X!ķ;ÓÆ£ĒČ­“§†Ś]]y.ŅĒ„csŁšÖūh^×Bż’ŖÖ°łķĶT/¬Į‘īĄ™Ż±F³œ·į6ńT{"^ŽZ/®¼„ÖšF“Œ·'Eµ§lo¤ØF£Ńhv&EEES+**¾1Móa¶_ł_­”ŗdŠ A¶„üū)++ūŹn· ¬ņÆóś`Ī›v~ŹNcóvJÓM0Mx’s÷ż/Bł÷)„~SRRRÉ4šöŃĶĪ" xoA4&«;šŹȜÓ+­ģŠĢ¤÷PćŠĘķ>¦it¾6€æ.@“n6—¤‰!ė\}\äÕW¾+ś„F ½ʦP¶Šõ-%U ü8~z;É;1ŌQRŲϽUZ&MŽ«Ф‘u4FÓżøšĀ ÷-,,üĄ4͹Ą^Ū9]½RźÓ4G–””Ģ*..ī°ūž‘Gł8)&üķ/6īžÆ3¼=^£²ZńŸ'ģĢyӎ7Ō×P£”:”¤¤dvœDÓh:„NŠh4!Ka{÷ÕON»:sĘ¢xм¾…śŸėI“Ź€ĀžŌżXGĖf7F‹=ŁŽ3ĆAź˜Tz%ŠTŃDò†ķ>¦·ŽKŅ€$²&fҼ¦Ӏęõm»/Œ÷f7ÉC“éux/–5`“8³œd˜įio^'óåLķMÕÕxj<ų}Ų]6\ł.2&dąkōEŌšÖ‰””×Ö1Üž­āåo*o"cB æ6ākš”Jd˜(’śÅõ­Ēwoq“>> _£Ę˜^G†ƒŒ}3p¤źF£éĪžĢdū{ ŌėõžńńĒß“­“”––®.((8H)up•żęJųG™ƒ±£ Ī9Į +£{¦ėEĆgĄ‡ l¼:ĻF‹;ˆńµĶf;köģŁæĘC6¦3h@tģĄĄ8ė}-š°4lÜP` ø€æ=šX ŹŚ P 8rąÓ°¹¦ÉĄ+Ör?ąh$dŽ ü̳ŽpØ%[¹%«h«ŹčÄ›dͱų,lL¶%s¤\Śrą] ŽŚ>Ųx8dŪ<`EŲ\ū“­ó]|E¦ŽĄ1Ö¹bĖ›€Īėķžd˜sćiŲōÖfܕ2öM'kRd‘;ĆmPże5•ŸVE““ŪŖŌąŹO${rvėŗ¬lwæol"’ä<2÷Ė sæŒÖõ+©ł¦¦U9iCøł])˜{\d†Œ·ŽĖ¦76G“ō«ł¦–”)dģ“NĘ>ŅgiĶ£kiŁŌĀĘ77‘{lūf±oFČ~†Ū`˼-4Ƴź˜°į•äŸ”Gö!Y!Å=UŖæŖ!s’Š94F.»ģ²ŌęęęėMÓ¼ ˆöÕ9^· üu‰[VVÖ \]PPš¹Rj ĄKlüZaćøĆ ¦ą#”óxw¦ ?-³ńĀŪ66lŽPüMąĮŌŌŌ|šĮŲ…w4šnDĻŽĮŁ1Ų%~°hFż‘Ą ąkÜÅĄæå¶©¬:Q¬§Yū½ ¶ö_¼ d{ūÓ¬nNž6#Jx¢%ĻÆˆā_”XļóÖqωqN÷×_5ˆā½šąJkĢĄ;ˆq`‰%Ó^ˆņ?Qš/īÖ#āzėŗōN²ĪąOĄ­Hč×:`8b |h]«łÖ9.³Īqo Åڶ9ƹtŠū«’½Bż„+ęŅ“²Ó¾’µYē”GŪXXXøč75o*fOl]ļ3}ܽų.Nė:£ÓFo³Ź¦pövāĢpbs* Ɖ·Ö‹{“;jń?{²GšO•'jµū„^  ˆZiß沑“€#͆IżŅlNĪ,'Ž:/¾Ęµør]83ÅĪźŽźĮ½Å=Ŏ#Õ!ķ’‚Šś)‡Ā•+ĒQ¦×Ą])ūÄ2f(‡Ā•ē/½MŃø¢£%p~Ž4 9 Ųm˜^S" 6¶“ž‹*Ææ†B­‡ęõ-Ų\6œNܕnĢhūķdŽŽš6‹Ŗ¢”ŖGīU†Ń ”źXŪ„ˆ%£'Žr˜¦Y‡’ćM]whÕhF-C}ܰŁl5tŽ$Ն’Ŗ©6›­*Ž2ų|>؎·6›ĶTJµ)‡išĒ·!Ļ`ŪĖēĄõ„„„įŽ”.㢋.nĘ,ąššmi©pä$ƒ)ūūHź 3Faš’¶šÖ|«×GU™V+„®())yug˦Ńl: ’Ćex0°!h}p bHīžæ½;“³Ŗó=ž9O­ŻU½¤·ģ„°ˆØ¬*¢qAD@™ć\A½^ĒmGĒ G½×uĒHBAY”=Ź¢D6Ć. K’NŅŽ·ZŸēÜ?ĪSéźź5˜¤»Ć÷żzÕ+Iõ©ē9U„N’~ēw~ē›ĄWłńüh\żąŠš¹„ø•÷?…>ø8(-%¾X\… ¼\üF~H9Ų€;æõ;įsgą÷‰¤€Oļn({ž|࿁Ļ໸ŽK^€ūGåOĄ?ć‚p _ ēĒ­Ś’ .°—Äų.Į@ųž.fōž’OąŖ N/{®—hų»²ėĖģóė¾ś§7O=lﱁ%ߑ'ß1½Ļö'ԁ|×Ä× rŁ­£Ėžƒ|@®}ŠDæ…\{nĢ8ČĒ;[“įŖüōlђm›xKBq øk«ĄŌ¾A6 —}‹ÖŚ4£©»˜ 0īkÖĪxL5ė̆ĻD?ƚ ŸÉlų<X»<ßęń|\sS„¦y–ƶ~pĄ‡XŖ÷Ą6 €-Ū ›6žŻģńÄFCf’æĘ˜{­µ_^µj՝żŻEf–cõćö¢æ ü.Į5»ūš!\9æĮ­üÆēõkŪ,°ŅUĄGĀk/Æ_ź-PŖ5ś5cƒčµødÄīZ ¼XŽŪ6p šQÜö…—3²Gõ.\b Rł<¦ŖÉ²Œ©¬”ś p0nūĆŅšq"n?ŪǁŸLqŁ‡Āą’’"""sŽ5Ę\ķyŽæ^|ńÅSw²ŻG.¾ųāvąsēœsĪ÷b±Ų§­µĀ5¤„³Ēpφ{ššŒŪquÅó?Ć}.JĢ žEDDꬻ=ĻūĢ%—\²~¦'2‘šøĮĻ­\¹ņĖ©Tźķžēc­=“²ķ%A`č肎.ã㶁Ż#ž°Ö®‰F£«Ć$…Č~E €±^ėb+£÷Ķ€ŪĖžĒ­šgpō¾W6¦ ם’ Œ=毜ÅUœ…KüøģkŪĆūžk¬WZMOįöŽ_ܶļ' | —d(/­_ˆŪ«_*xś3pī}—Jü#øÄĮfą¦yæ‡q siäĮ5,wītséuąįŽĢ ³‚‚‘¹Ēóąs—^zéu3=—é ūÜÜpī¹ē6F£Ń³¬µoŝ0öœÜ='‹Ū*{g$ł„ö÷ĖžN €±ÖāŽĢ{הowtßŃø@½t,Ė?įš~w~½‡k`·™‘ržÉ\…ė®ה=ļć‚å+€÷ć*,.11ĄHƀéz ÷Ķōöš÷øÕ’cpIŪĖŽĻĶø „æąö‰ j·³‰IDATŽkŠųÉŻø_šuą‡ø“¶ćJż+õū.īsZėüŸĒmQhޱ÷“½DĮæˆˆČœÓ |5ž“µµuʏ!}±Ö¬YÓ“†sī¹ēåyŽ›ć1‡įŽ”®}—ĪĻcž ‚ąQĻóī ‚ą«Wƞ¤€ČžE €±:q]žWąöŹ7ĆĄ…Œnī÷Ü>öp«Ö>š Ü ziEū‡Ąą÷yų‡šŚŪ+¾v-.YŚopóoi x06(83¼Ör\Ļ·×žnF¶+Ü‡ŪśšĘš}Ēp73r"ĀļpI‹JwāN (ł.éš\ap.”Qźp®ĒĀėpŸ_wŌāmŒ=±@ö±ŁüĻ`ā,£Ī¹—šĄ€Ķ[ģDG[›pÜ4Xßb ć_ĒD Ńt/įäüaŹł•DR"É`ń³ĮøGŠˆˆLSÖóŃhō›­­­•ŪSē:»f͚ ø…¹].¼šĀ…¾ļ/÷}¾1&m­McŅʘ:kķ°µvŠó¼AÜāŻ@—-[öÜE]4ĶóqEöOJŒ/‡ ä§ņ|ų˜Čo¦xżźI¾¶ ·7"æ›āŚå,š‡š1™^\óĮ‰<>*=>Ź=>Ź]Rńē6\²Cf‘ŁüąĮā÷-"ŽgĒõķ =3žI‘ÉÅIæoŁ"[VoÅęĘÜ£5QüšÓŗu’ŸūŁykēØēŖØ¢įõóH,J`¼Ńm9ņyz×÷1šxåI¢©Š0ļõóØ9"—€(Ų0@Ļ{±žĢŸ‡=ģ`ņļW•źŒ13~Č·µ¶žŻļå²ĒcęĶō¬µ؟ óš{±y1²mY²mYüa@“6JõAÕĢ;qń–8;®›E0K?ø?°ķŖŹS>÷‰gV­Zõᙸ±ČžlåŹ•‘X,öbJ«÷ØD"5ĘŌĢō<€˜ļū陞„1&ęyŽØyXkņłü“į±z""Ó¢€ˆ³7ų/Éuäé¾·‡Ę76ŠōÖFŚoģõõ†“ˆĶ‹Ńū@™ĶSō‘ ׁ‡_ČŠy{ēäc+4½¹c Ū®Ž6&9­ėaé¹Kh8iś ĀķuĒŌ›£ūŽzī{ür×ŗ.꟮Bśˆ4UV‘yaö÷ĀōvVžm‘kķŚµ>0cgÄWØģ$""%%DdÖ’%½ė{I½¬šōiŸbh£Ū \” žø:ņyŗļīžņ:„ €Ż-µÕLj7Ē~vxÜą ŲW¤C?õ'ŌSµ¬z×v…źeUō=4ĮÖL Ż÷ö>"MjyjŚ /fH.N­‹¹'K¾§@¶-;r†H5$%‰ÖE1ž!Čä:rŗG÷ŠŠ7ʼn¤"d^Č«‘\”ĄÄ<†6or'3™ˆĮ‹Ŗtļ-Čä¶ēFīåóćěć` Ö·ŗód·ēʝ›ˆˆˆˆģ]Jˆ¼ŌV÷ÖĪžąėŹū—|`1ͧ4‘ŁšĮ-ͧ¶`KĒM;±Å©#Ė] €²±^Ģą%#ł`Āķ„Ą7[䎧ōõxS|W ’ Ɲųc.GŻg*éĆR4ŸŚŒ»µ½Š]`Ēõķä»ņ#ćOÓtr#‘ŖČ˜ń™-YŚŻŽ?ģ¶VŌ_GĶ+j轿—śźwķZ·…€–Ó[v½.RaŃ{Ū‘cėåm$&˜ę|¢5c’™)ōŲń«vņ;óc¾&""""{"/e†Õ}µϟĮØŠ[ ėĪ.šOm¦ł­MŠÄct߯M®cņĄ|—0ž5QCć›I–ØŚ¢%³%C÷==ävŒ\3Zė^8Yd‚püČ5żŒOl^ 5&)¢i7>Z36@3¶.JĖi-¹€ŽŪ:Čuę±y‹7TœbމõĢg [Vo\R”åōfŠ}E:ļč¢Š•'(X"©éĆRŌSGóŪ›ĘōØ;¾ŽŽūȼĮņ)Łvė¹4’Œ‚|°«Ib?-g“`"†ö;ČķČa ^U„źƒŖi|cĶok¢ķŹé """ņ’„Ąģ²wÜą9ø×G’žśšNąrÜé_Ś÷S”żĘ žKś ś闧ĮB¶-KĻż½Ó~}© žø:‚|@ęł ƒOä¼øGra‚źƒŖ©ZZŶ«·“ŻęŹżMŌ­“OuŌ_éė^l¤Ł{vk–ä¢$µÆ¬p@ݱµįė¦nVŸ><‰:ÓÅąS£OĶuä‰ÖDØ}U-±†…¬Įx†ö›:F•éz d·f‰7ĘIœĀ‹{#<ŠuW÷˜łf†Üöė[‚¼³]!Z%V£ė÷Ż >Y6·AŸüĪ<ÉE  §sŠ©ˆˆˆˆģIJ̜õĄ5ĄwŹžKóŲÕ¢ €ĶĄ×I Ō{«#ķŹšžó÷Ņõe6˜ĆĮI¾3Oźj0ļ*ģ֞ņŅapłĪ<Ū®ŁŽ?䏓><Ķüw¶Šø¢¶°Ė½‰”¶L‘(£Ęō>ŠGśˆ4Mom¤ś *²mYŠƒ>–HM”ŌĮÕÄć.ųžĘau‰f·M`¢S †žĀKFv%;āqüŒ?*ų/—Żž£źĄ*¢õQņ#„łC’ČÅI…o{¼­ ;®ń§D¢©®®®²ÖVc†_ōÅDDDD^b”˜9µ@UÅs—‡r‡ßÆxž]{q^q\bæ`"ö:ć{ĻĢō<žZ>öm{äbūAšŸ\œ¤ž„:r;rųĆ>µÆ¬axćC›¦ f·ēŲü³-ųYĀržĮ§©?¾Žäāä®UńRÓ@3A`[RZł/o2čł“]¹Ę ¤–§Ø~YõČ ¬;‘ ķŹm,ś_ §ÕĒĄ ÷ń—¶T~.Ćšs™²ńĘ34ŸŅ4īųxK"œūč÷V^ 0]ž"Łķ9ę½¶žŌ!Õä» ųƒE }EŠErķ9Š}ÅŻŗfõAÕŌ[ĖK?DŌUbg-ƒÅĄ®ZĖŒ1c39""""²‹ć[ü3š2ÜJx°ų*£Wįæ¼=3l¾ ÜŽłO X¼ xČGĪžĆ­¼æ ų&pš”š1ųš÷ĄÓĄŁĄOĆ×|+¼Ļ[€ Ē·w…ó-•ÖP6ßF 3¼Ę·ß'? ĒEĀ×}øh¾Ž«č ßĻ7€‡Ā±^8³€ƒn«B+°f¢{ośT͹OOĪĽ÷¤ō^ńėž~üuöƒąß‹{® ]Ų0Čś,żąRšOm&»zėø«ł•lŃRč-L9®Š[ ± 1ŅĄ/ †'ZŁŽ5ĒDœWĻÅž"ķ7t`¢†X}Ų Pšw51hź¹lĮbƒé•>xq1$$&“kĻķöÉŁ~ķvźŽ®#¹(A¼1FtY^bäsė]ßK×ļ¦>±Į‹{4ŸÖLzyŠg; Üzļ Ļī,ā–%ó¢ęM‡Uōń×–[kßeŒŁ¼GŽ€ˆˆˆČ~H €±–æn¾Ž ģāĒÆ Ē­޾ lźqAśmĄ+gp«÷’øų šg\€ż\I’ĄMŒœ·Ū‹+ }WŌü’€{q ˆŅå‡„å³Ć›ĆGi¾‹€^œŽūY8Æ/…×Iąõ›€ÅĄ\ ~p^ų{pI/WüŲĪõ|\¢į0\bäćĄē‹€æ„÷xp°1üd¦ģĮ?@ÓÉMÄź¢tż¾›|§+Uļ¼³“–ÓZhyG3ŪÆŻ1Å ī˜:’K’tŻŁEqpā•čRł|I±ĻꑼɛōEŖ] [W¹MÄPóŠüĮ"C›†±E»kī墵Q¼˜”Š3uĄ-&f0ž7 ©ŽoŽ“ļĢćłŲ¢„8Pd뚶)ƽ'Ł€ž?Œ>J܋{Äb4®h ž„zuJA%5,X¹HsœÆŻŠĆM†Ēģōøjż wģ ¾ńī†#ėŖ¼õÖŚc1ūęMŠˆˆˆĢ1JŒõ —GĻ·ąVī#øÕŲĄļĖĘ\ ŽĻbdužIąĶ@å²ä§qA~+ć{0|\„KL4n%nÅeÅ=67ā’Ūpeż_~Q6ęvąƒø$Āżį=†€s+īwHźŠ4©CŖ©;¦nĀ&{%Ńŗ(éĆRō?Ņ?i ŽĖ®1¹Ž†«T}h ž1Šrz ^Ā£ė®. ŻcKäż!Ÿwt2’ōęŸŃĀÖ+ڰEKÕŅ*ZŽŃĢŠ3CģhsłšsŸ$}Dš?|€kJ7v䯊kŠMGš‡|:ļģuŸĪ;»Xō¾…4ÜDŻńõäwę°y C¼!F¼9Žõ-;oŁ9Ŗ4æūīn®\Ȃw/ Š] ߕĒĻx1C4%±(ń wtQ˜śŪĘŠ3ĆäväØ;¦ŽŖ„Uävę ²>^ĢsŻük£ <:ąNś’<@ķ«ji9µ™Ś£jČu䱅/”ji’Ų¼½ōMyÄa¹\GŽōįi–ž·Äõ(Z:oļ"Ū–#ßU ž„z’K’ŗ ųĆ>&źo‰Sµ$I¾3OvkvĀk§OXøźž©“!%ėžĪ°¹»X\Ś=ųõ“_("""ņ”ĄX=ø²łJ1ÜŹöļq«ź|ĻtIun?~„ī“€u@ ®‡Įßחń˜^uB?®é_ććvļŸÄU',Ēõ ø×Aö‘ žk÷\vĶ‘5DÓ†7 ÓūąÄåżƒO R½¬šäāuÆ®um> Š[Ó°żĘ†6 SsDšxKœDs5ųYŸBO żō=܏?<śuł®<[דQ¼ ¼«–ŗęvA>Ąņxl€¾ūÜv2™­Y¶^ŽFݱu$&H.Jā%=°ąū o¦ļ‘~2/Œ¬_%X¶]½ś×Ō“:øšŌ!ÕxqŲ§8X¤ļ‘~śž4ņYł€¶Ÿo£ž5õT/«¢ęČ4^,ß_¤óŽ.śļg‚)%vŽŁ… ¹(Aś0w2iē]Xß²ķŖ‘{„–§v}FÅž"}öŃsļ¤ K’lؚg0pŹĖ«HĘ ½§)ķ±µĒga]„ˆ ©Ę@`į®§2ÜóL6śwǧWLėCy‰Q`¬6ą\p\Ü\Ž1ø2÷§*^=nĻž·§øeüķ³/f¾o ÆUžÓōĖĆł¾×ÄÜ€rĖ'˜Wå֐6\ĄFNA(łp®ĄįÆ?Åmx&|œŽūüd™į•’ĄŅaĻĻ>šŲ LklĒĶ£ž<ō—” ϲ|rpZåö•JóīŹwęŁyĖĪŻ~ŻD‚|@÷ŻŻtß=u7}?ćÓµ®kܒ”J]ėŗčZ7łHȧ榎ńæ¶÷WeG‡«„XÖ枍Y"¼öeIvōūüźį!žęh·Åąŗ‡‡8ķØjāQC{ægl£µ6jŒŁŪX""""sŠcż wÜŻkq+ßĶĄqūūÅ%.¾ƒ; †Ū[’NÜńSiĒ­Šßō1r”ŽīŗųšĄ’„×*Ł÷,®?@Ų’+ī8¾"‹Ā÷/»Ž\“ĆOāŗöoÅõ1؊ėę’£šŗÕø÷śFz l>ƒūĢžĀyx®ņąŖłžd7ĶtŁæµv»1†ŽĀäųD&c‹ɘĮ3pߦ,Ćł€ć—%Č,U1C¤ā„†X譊Ąäü‹ˆˆˆŒ„ĄXĘē÷y\‡üjÜyöė€3)™®“żæp+ćwŌŻ?w„cq½ĘóEÜJł­ø€;Š ˜{*ĘõįVÓĖ•_÷!ąląsĄøĘ{9ąNࣸ’YÜüĻā’ą~·U ¼“.±ńo@ų*.Qšą{øžłįēšīČĄ‡Ć×~—ˆų~8Ę ļscx ŁĖf:ųš<ļkķéĻ=‡ÅböH”‹¼Ōų=ŽX\E`ဆ(ÖŸ·ęIÅ Ļt8nY‚ē: 4¤"œ|D}™€lĮrŲ‚øõ­Ż4Óó™ō“łŌŖp+蓉ćātEpAųžŖ—žj¾‰š×©Ūj»Ą0cū$Ć×O¶É;Š«Š˜Ž†f™ŌzÆų‰…L6f6’ēŸžŃA<šŽ%ļeyĶ”ųÖē[O}€³–¼‡ĆkŸ¹Iʬ—:4ł3ēsįš<²ezĒĪKyÜš±~ļĮ¦ēÆ ŗˆŹŒ3=ß|īø¢Qa5Øīff‡æL?“Q-2>@3ą ¶)]W`ŠH¹2ÅB!„3ų’’µ”³*ĻqĶńu*«pĀBŠŽćÅ.‹õ EŸćKĄJļV¦ī25Ē}]Åe•'h§yč[§%-5BQkAU;ZŌT= j„³«ƒōoDMpS9ŽAŃē? šÆģĀ QIPs ‘Č_ˆĖwDóüSĄŻQB\•āÓóeĄŸå8vpĄōÜč[ĪsūA€›iõ¦“•ÕµŻĖ”_eń®äüģå\įsŗ”^«­ ¶š:0Õ=Ń^~ؙŁ*ƒ'•7VČ U6q “ FˆĖ÷°Óō¼1š”Ė"„øśtÓ<’©œĒQYóbū›MGQĮÓ0Ó1I@*j¼N/+y÷&»Lé LióPÓēn&b’MsoąGŌ”T×¹dÓkHÖ ķĢo05²ČŠä— ¬Fk¬k+ƒ Š·³Qc,@:ŖüFą<šjœ_d)ł„Pōw‰/ćœ~ØėĪbąźo‘‹z—P-tūMłō@͈·x0kĒi}Ø9ÆąŒFͶ—nŹ; õ7޼SĘė0ÓƒQAŌŌß6 õ7ÉN €'@;ņóƢƊ™_oŖ©\€ÆŽBam÷³ī؋¦y*Õ(;ó‘īgUOŗŸ gg¾7¢‚ņzIsüWÅöµÕģūÕ d­km?Ķ1^Ą\él=¦ n­q~.G^Ą«„¼^O`^9ņĖ£r*£üQ‹½ēĶWMMŗŅŗMµĖqNs7DóūxĖæķMŗ¶Ø”¬ül½fØ€ŌŽņE@¶t4„)+ŸLT'ŻĻ®2ū™•c505+š/šjJĪŹä‹Ŗńl‚źŹ`n¶OAGŪ€}„ t6=ßh:ĘU;ŚØaŚ÷ź"Õhaڶ8‡ŖÅ큺؅”.ŽĒ?P5ZzSy»£.ŠŁĄTßfŌEʍQeĆPµ—nØZądŌlf›‹vę%„³ń”ØĖ”8T<¾”h"““RŅÅQŌĶ,ŲBŃĶćYMŗŸ€[5æGŻ0ž3ē…Ŗ½ļBQOź’ōY+ē}øŪō<D}·„”ރhŌsŌwĖ[ØFēXÉļKŠnŠs€å؛÷Tkƒ/ƒśī«…śü ųųŪJ~öšJŃĶ}Ŗµėøé¼Ø•XTĄpT7Õj²µēóDµ™ßć,Ōµh;źūрŗN žQļ'p Õx¬”üē”Ž÷LŌ,{GMĻQßÉ(źrųŖK[R±<|LĒ63żn6™Źx5VĢÖØŽš|ž(%3_Ō¬7¶j<„„F8³Ī}~wTAžŚ–šv¤?mJ[|ģDio]Š&€€śŪō£|žD­ķc@Ķņ–„7Ł<™'TÉ3½†‹ØiŸCµęTÖ÷ti“— XóXm·gm€bkŹńāŹū9NL‚!ŖN6ŖęńwÓļoæ¢f½±‡ö’³<]=r5ĻķżāÆn“P³¼•Å<½§³¾V!J“ƒj©@Ż ÅP¾–L°œźÜޱ¶ŹR@ŃL„åaīŠ”UJ#Ŗ„łØżzŌ*?¢‚†FĄĶŲ^_ʀjɱ֚źutGĶĪV 5iBŠÖæéQJYKS€ź&gk n7Ō8ŸiØ.r×£¦W.ĻD7™~C*`7å+E[·›¢`+J{ō³ó{Ӊ«€Ōn QµP4Mhšn9ŽÕž–§[•vF3ƒĶTÕW7ŌD ę€ęjEšYؾņߣjußG Ęķ‚Z”Zˆ«•vµłŠÜh7Ņ<æÜÓę ØŒjY(O÷”›4Ļ/·`?jŻ TėQYk…€å`ūāAÕū žXNbĖ Ķs’bū¾DuM+@uYµ§b§“üģõ*°8‡ķUī+ó¼«PŸ =ŖŪžyĘÉŠŗ›%kž›'PŸ]å<_EģŃoEÓ^WåýLńąÖ5±BT«Ń `j ĪØn½;Q-”6³[e8LŃė‚ēcmkäNĶó]MØp#eÆŻę†Zŗ@\#$ØāŹx‡¢Z¹öطȜ¶ĻŽš?(ša'ņ­%QDR4ĆĶģÆ-;‰Nė4EµÕ Z/C}—Ųźš‰(’•fŪw”>šŻæ+ǰRŹą‚š ģIÓļł”’²ZóüŹī.ƒå”Ļ‹ķ×ę7‰’«ÜWx¾”üģe>Æ jĢOYć[”&՚“¹œēóF-,©C]+žBM60 õžEµ‚MD}VÖb9³[[ŌĢkåUT Ø`ļ,×!³ę.ąvÓósXž= ĄĻ¦ēžĄl¬Ļdźż™ˆZ›G\#¤ū™WF&šE%ßF}!—F»~A,ūÕŪŅ€¢)Lw––š*ż5²B8«qؙ­™~bzœE­O’„겄 źbllĮ2ØØ™Øé”½P“ŸCēQ)žØŠ˜NXNcü­©¬Zæ f ‹Au;ˆŗĮ7׏§ ZŸ#QŻ»zPTń±•¢AżfńĄ ØZünØIžE­ cīŽåoŹ/Õ2l¾Z‰}]ƒ­łxŌ”÷ØĀ¼ĶEŌ,”Øļ«zØnQęŠå9”šż×Q­vPćqģ€¦ Ŗ ōuØ÷` źļYUŽE}Vź ž{P³°ķ@ż} PļY0*ŠŅvS{’ {¾‡j! 3åwµVĻ>Ōßר^oŹ3õy‘ū]!„°įKT+‚µ’³½žŅ÷-Ŗ¹ł÷:ÅҶÕģ;AŁ­5zŌ †ł˜·ŠķæC³Ļžī+/iŅ—ÕĶ$H“ö;ņ^­IƝĘUgž©¬uōØéPĶyYėn×D³±e¢ŗņ@UˆdPō™.ėQ€ZĻÄV¼ö{f²åšC݈Ū[źFŚV7Ńر:öęgDUŚX[÷ŌMž±rę·ū»ŁŅµČfyĪ» ė3tÕŌ¤Ł`e’Ó>[3æ•ęMŽÅÆŚæ«½ƒģ“Lém쯇ZĄ¹<ŸŁń„œÆ=jńŌ²ņÉ@ĶŽ—ˆķ÷Q!®y jš ¦\6qgiņ©c%ż:ĶžĄ³ØŚĢ0TķeŖ98Ŗ–Ńœ6›’|gj@ĶFdŽ·5ˆŲM³_ŗąßR,­ł=-~ć$AøŚD”*1£Z“’ēQ’‡ļPvwŸĘؖ‘ĶØ1åŃķĄņ»ĢˆjŲ|‚}ƒŗ=Qß33QµīÅóĖC*ó€ū(»ęŻ5ą|6jjåģbłå¢Zf£ŗ”h1åŅų”®½«°üüg >?Ÿ£‚)P_¶ŽG!„øęU4ØuѰV«TĒJŚFØnå©ł+@]ō‹s– ¦;EŸö‘‚źjQ`eūbĶļ!Åņ“ F\ \ØųĢ]•Y† 2S•?æŹź:äjŹļJO,āf:oeŽcž¢›ųėŹqœŖ²Čüxo%–©¼Ģ_·²ŚĮ Y«ģš'} …øņŽD ‘e%DuÉhš=ķ6ŹžŸŻˆZ»ełåŠĮV£Ę 4lmꜿØīzŌŹÜ śS_ØŹ Q ©Õ  —;AUę—_ÉłŁ+Æ Īū#j"oŌwęNTKĒT«Tźóą‡źz苼jŲ Ė5ƒTr¹Ź£2’¾yČŌ’×¼ņ,č'„(Ņuó źb²æœĒ·¢d·?±œĘ¹ø0T€Ó5ŅÕ¢‘‚šNt ŖŸ±-Ń@gÓóŻXND`McT_wPƒgO”’ÖՕTחe䯛¢ĖęRr0(ØZĶNØīvA؋³u¼€ź½Ū”Vūڶ`9ٟ¢€ē –³é!„3rAõCÅZ€N¢fJ+>ŶNK‚!„BēŌ ŠŖŖŖņ6=Ģ.¢ZmRP•pĖPc‰J«DB!„B‡sō+!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„Ba…ĪŃB!„ø– 6ĢĖĒĒg€N§»h Ō½cK&® <ą,ØÓé֍ĘßÓÓÓ×̚5«ĄŃsVŌ!„Øvžxā ŒŒŒ>F£±±N§«e4}]&qåFƒ^Æ? œ2 ’ÄĒĒtt™*ĆčŃ£ŻrssŅét’ŌptyDµóŸŃh|9>>~£ āŒ$؆qćƹž8q¢»Į`øQ§ÓÕÕét€§£Ė%®Øl£Ńx8,Љ‰Y5nÜø|—éŖ6räČzz½ž’€Ū?G—GT{€/bbb&9ė’ąØQ£" Ć\N×ѼĶ;(‚€ČĘøūāęé‡N/ 5× cA>¹Y©ä¤%‘rr/9éµ»§§§§?8kÖ¬,G•ĻIP#D1qqqžz½ž1£Ńųęčņˆj%I§Ó}`0¾ŒĻvta®&Ɔ sńõõżšąnŽīę叇O .nRŸp-1 äe„‘“qC~®v×~£Ń8">>~“£ŹV£Fjd4—QAŃ͉n;ļ —LT—Nķ'aėBŅ“0óņņśżüóĻ©.šÓ FQ£Fµ2s€Xó6ß`|BjįīˆŽṌ„Wš!?ÜĢ2.$’“ž¬Żu ø}Ź”)[S²«Ė=÷Üćļįį1Óh4ŽąźįMDÓ^„Ōig@ø£‹'ČPGźéƒœŁ·†”Ä=ęĶŁĄØ)S¦Ģp`Ńģv÷Żwyzzn0 uzWb»#¬~'GKTCF£„­pj×2t:Żā“““A2ĪĘ>ŌaņĄ 4 3NGpÖDµøļą(GMT™É§8¹ėo’mĆh4dĘ{āććē9ŗlĪĢŌBó0 4¶u:ŻŽ«‡·ƒK&Ŗ›K§phõ4ņ²R t:ŻĶ“'O^äčr•eŌØQ3ŒFćpNOĆ>ŻĢŃEÕ\āŽ%$n+üh?;eŹ”OYg!AĄż÷ßßX x»zųŠ W ],Q „ž9ÄĮńäe§ƒsÓĆŁŗĀT'qqqčtŗ¢Zõ'ŗĶMŽ.’ØĘr3RŲ³ä+²SĻ\Ņétm'Ož|ÄŃå²%..®ƒN§ūŠE·¹‰ØVż]$įŒF#–OābĀn€d£ŃX/>>>ÅŃåŖīdDšøę=śč£¾Ą<ĄŪĶӗꃞ‘€FŲä_³>Ķ=‹›§€§N§›;jŌ(Š^qqq t:ŻÓ”õŚK@#ŹäīH£¾āāī ¼ēą"•J§Ó½č<|‚ˆhŽŪŃÅNB§ÓÓńVō.®Į:n“£Ėä $Ø×¼¬¬¬ghNOƒŽ÷ćéźč"‰jĪĆ7˜†½ļ Ź`0¼ąč29#N7psõš”nē”Ž.Žp^5ØÕjF£qč<ŠĘĮE²*..Īø F“īč]dL¦°Ÿ§_(AŃĶĶæŽęȲ8 jÄ5mĈ>Ąóaõ;ā_£žƒK$œ…_XĀØĮ¾:īŁ{ī¹ĒßĮEr*Ɔ ónˆlŽGf7åR³Iwܼütw9ŗ<֍Ęn€/@pķ.pFAEŸ›ŽqqqŽ,‹3 F\ÓÜÜÜścZ #Ŗe?—F8›Ø–żŃét>78ŗ<ĪÄĒĒēzĄ ¤Nk—F8Ž• ŚŖ[§ÓŻāąāXåāāR@ļź†§æ¬ ŹĻ;(ŅüTD;°(NA‚qM3 |‚£šš qtq„“ńš Ā;øF£q ƒ‹ćTōz}3Ÿ łßŃŠü“ĮčŃ£«]ß.£ŃXĄŻ+ĄŃENŹŻ»č³£Óé"KI* F\ćt:]}Ÿ°GE8)æšŗę§õY' ąīäčr'„¹įÓgggWĒU,=t2–FTvm<£ŃčåĄ¢8 jĵ.ĄĆ[ŗŖŠŠŃÜXI-Z9Ę @Ę҈ Ó®eäźź*ѱ×8 jÄ5Ķh4śč]Ż]į¤\Ü<ĢOeZē 0Iā² ł qsut„B!„ržŌQV/ˆ·;½‹«ƒx­ź T ­_<³ ¹õ”7]QHP#„Āidg¦“ž’dwzW7‚Ā£Ŗ°DÕĻÅó§Ąh¼ę^÷Õ"łl"K¦fwz7ÆjŌlX2/Z]Wµó¦l[µ€]ė—HP#,8[P£ŗķ€0 8¬vŲq| p‡éł*`_”Q\ŽķŻĀ…³ v§Š%ŗAĖ*,Qõ’Ÿ—ĆŽµ‹ØCL#™®WTž­+ēńć{Ł>"¦ć¦n¬ĀŁĒh4’•~ 7w<<½Ė>ą2L;ŒœĢ ޚ±½JĻ#ŖFlÓö¼=Ćņ–&+3·øŽ˜F­=īGĖŖQĪ_'¼BĶŚ Ŗ<ØĀg j:?lģ_Ü /%»€ÆMϧ÷TZ鮜®@š`ppY®YĖē|ĒæKgŚ¾÷Ń źĆ*,‘}2Ó/qžäQBjFćPuÓčfg¦óż#é~s1>ƲóˆkOTl3Üż“Ŷ“‹I¬[4ˆ:iŁÕr¹ ’ ź±>HNVĻ Š”ćõĆxąõ]Q¹yxYĒb[fś%\Ż=KģB(ĪŌŌ£ā¾ĢN>@ 0,ZŁ6ņ¹ČŽ V²öR«²ąUą9`ąŽ5ÓgČZu»ÉbŪĪu‹Ł°d=¢qŪžūĀ£bÆdńl:°m5ß¼v÷½ų%ŻŽēčāQn1ŚÓ؍ŶÄC»Y·hŃõ[0dĢx•LĒŚ“ģ7Öž1•;žx K~aĻęåde¤ņÄū³8—x„峿ašƒÆS·iūĒĪüā%R“ĻņŠøųĀm©łgĪwģŪ²’‹I§šņń'¦QzC­zĶųoćßüõĖ—dg¦qźč^>{v0Qõš1ģ±wÕZ¹måļl\6‹3'’—›»‡75¢ėѾ÷Śõ¾Ķb␼œ,–ĻłŽke—+q IDAT“rį4zžµŠwŲ£Uņž ēē,AĶ @0ššE±}‡€e€ÕRs0ĆJ€ĪĄļØ®gCÉUSdq5«Ó¤uš“³Ųvń\"–@Fmh×ėV•LaĶ”]ė9}l?ŻŽąų¾mܱ–ōŌdnõ ‰‡v“phm{ĘĒæäĢĄ’.‰‡—­»²Ų~źč^ī\Ē„ gŠéōų„PÆy'j7lU˜ęųžķœ8°¼\U×vīä‘ĀAąįµźŃØM÷Ā“©Ł·u%ēO%';oߢb›Ń UWÜÜKN}}6į{6-'-å–’ö-ŪõäńwgāęQ“ŽdNVŸ=;˜ó~ ßš' ©Ķ’žÅŽ-+č<ą.āĘ~]x-X1w"3>{½Ž„ĀÆO\œ!Øńź±Ż­ `3ŖkŚV+ūō؀'ÕR“‰ z˜ņ>fgYB€a@S Ŗ+ŪqĄ¼PÅØV„| 8 D›Īó©|c5łż„ד $IØ`Øšš š9ź=0Wæłš~ö±³Ģ¢ټ|¹ŁY,’ķ[.ž?…›‡õšu`ūš…$ŸI°Ōd¦_bõ‚xüC ƒš„C»ųųɛȬH%(< æĄP²3ÓŁµ~)’ĢłŽ¢ļžŽµ‹8¼kCa~¶ÆįĄö5ŌkމŲfÉĖÉ⋇r`ūōzĆ"ps÷$łl"ėMć?ą…/öē¾tį <֟¤ÓĒń '(<’ÓĒö±ył‹šj!Ŗ“­+ē1dĢxš“ļ_P^>åĪcÓ²ßŲ“l6½n{ˆžĆŸ$(< CA>NŸ`īÄńl[µ€MĖ£s’įtæ9Ž–]o$7'“žø‘fÆgšƒÆą Ø)|ćß}„Šˆ÷µź5Ē7 ˜”¤3ģŁøŒ™_Žå‡7`ÜŌčt:öo[͟S?$¶iī~īSjÕkN~^'ģaś'ĻrīäĀ"ėVźū&œĒ ū_¾¬€ Ł4NÓ%o5µ¾Ž!cĘS³v»óŪ³i9F£‘›F¼`ŠxxłŠcš(ŽģŁÄ‘Ż’R#šż¦ėÓ ÷ś6=?pYyٳ W7†=ö®njį^½Ž…µ0äį7I8“‹Ōdu   04¢°ĘĒ?ØÄŒ€›žžMA~w=ó1MŚõ*ÜCĮ£H<¼›•ó'qęų~"ź4.l!Š{łj˜n,ŻÜ=©Óø-q/Ķųø.—õś„s«Óš²óØĄĀ)ļŅ©’„EÕÅ?øz½ :½¾Äde¹tį,!5ÉLK)±ßŪ/€4Ótķ©¦ō”5k—H«Óė ‹Š%#uK¹Ź ®~ĪŌ”l“·ŸłīMŪ-m6ŖK׹-Ź×}ė7Šŗƒ™õFµ½ƒe@p Ģś“L?ŽĄ2 Õśó9jüP7Jv[NĢÕĶ1ć¼ģ>Į§ķ#¶i‡ƒ¦½żp÷3ųų“——kw~ŪVżŽp ?ųzįØ H÷A#Y³ ž½[Vnß¹~ ‘u›Ņ{Čh‹|BjÖf`ÜKLy{LÅ^˜UØYĒĖsāźęĮPĄłSG‰ˆ±œ3<*¶Ät¼e9›p½Ž…†­ŗYŻetś8u“tś8޾…VdݦV»Š‰k‡^§/;QŚö¼…¶½³ę©¬^Ø*²ō.®„Ō ,².M;ōåśa”hu±%3MÕK’߈’“håfg~é.®n6ó7·r ”å Ałī*§‚Ēū·£ŗvi;y^0ż>5Ąśrä¹ĶŹ6óźQĒ1ż¬SĮōā*S)ƒ}B8utĒön”vĆVč]Šž›včcµŪ@i’Ļ&R«~s‹€F+,Ŗ.Ēöm%7; W77R/ž£A«®VÓF×oQ®s q„ø{ŚwVšĪżļdå¼x3® aµb ­Y›Ą°(‚Ć£‹Š„Iū^ų…Ū_fz :½ž/_ju’%S«ON¶źhž’„—o€Ķü|B0”ć‰kŃhYÆėāźĘ˜ńS¹xī$§ļēāł“$ŸM$łl"'lcŽÄńœ?u”ū^,^ækĮ †Ē½ü ÓY§1 Z †ŒF£ÕŽ y9„F×*gjĢUĶ]­ģ6ŌTŠÓ(Ł]k*عņ5Ö®ę„ ǘ»Ļ™;p›G\Ū›^\%\\Ü*%Ÿļ}Žļžļ>Ž}øz½ !5®MPx1č<ą.B#bģĪ/3=…Ū×šĢ ėǘkŠrs2ÉĪ*Ąh0ąåćo5­æŌ¢‰«Wtƒ–¼>i žšÉł“GH>w’=’ęŅ…³ xxłšų{æŅ°õuv嗝™ŽN§+ģ‚Sœ·_ 1 ×ÜÉĻϳYłąāźŽ” «ü/L\½ '“°¾DźEĖ& w’•‘JĆÖ×U"żū\϶•óķjĢAxÓ}©YbNVgN,üš Ęh0N@S²¼ēķ:Æø¶8CPcžäś•šJ-H9ųŠ.7mīz6^ģóŌwOSńÖ óŖ­v_ó~sõ‚łŠdoz!,“ģzļĢÜÉŽĶ’tś8ÉēNrń\"'ģ`ˊy,ń9Æž°šŃõĖĢĖ`( ?/—ØŲftźwG©i]Ż< §§µM&ćWœ¬’uO5j7`šÆYl+ČĻćšī™šŅ0Ly—ē>’Ć®üŻ=¼pqu+ÆV_’`Ī’3Įj°€šŪ·CA¾E/½^OA~Éį¾Q±M5utĖ®7–ŲæsŻ"~xóF¼š× Ix-µ¶Ūž­+iÓć‹“iĻsęÄ{^¶øĘ8CP“‚£Ņ ŲZp²ŠŠ~Ņk”f ;¬°q\  1p3jĢKE™ĒüŲŗ’˜g-3/ö©MŸfGzq 0ŚŠ¬ŌÖ`upW‰ō{·¬ą³g³~ńĻÜśŠežWÆwĮŻÓ‹šŃv u÷ōB§×[~Ō ļB8 OoÕā˜•^ņė6%éY–Ū?~j ły¹¼ōõ_Ū]\ŻhŲś:"ź6į¼ ĆZMyhD ’mü›ĢōKVk„·¬˜Ē’éŸrū#oŃØMwBjph÷R/ž+ŃĶ-3-…ōK$Øj7l‰ŽÅ•ÅÓ?#4"†­ŗ”Óė9q`³&¼Œ” ß2}ƒ–ü»t&Ó>~†~w>A`hM|ü‚HK9ĻžMĖŁµa)Ń ZZ4~Aį$žkž ¦q[ÜÜ=šń¦U·›šņńgś'Ļ’—›Cƒ–]šö ";3„C»ų}ņ;øŗyЬS?Śõŗł?¼ÅœoߥŪ/ˆŲf0p6įæ}óły2„³(Į‚€æP3…݉õ5hĢ”’FͶ{P­1Wm7Xˆjѹœ ę ég ¬O+mžć6ŃJś3„¤?Yl»ł®×™żģŖāJā”Żäfg•č÷|æå0®Üœ,ž¤fFŗēŁOKäU·‰Œ™’dłŃ2÷M6KO5¢p6ń°Ķņ}õņpvmXĀē‹NāįéM`HMŽü·ŃjŚ„C;mę#DuS£¶jĶ\õūź6ėPx³”—›ĶģÆ_+‘Ž70„ķ«’ įąN‹µc.ž?ÅŁKĢ@åīé…ŽÅ•s‰G0 ,nȚvčÊy?šū¤·¹ćńw,n ņóX1w"'ī$ņ?fż_æz·Å¾6ŻoĘŻĖĒ¢§ēąŲ»e%–̰X×ÉĢ?ø÷j}˜I@,j”ĶT®ŚĄ­Ą‹ØĮ’Ó4ĒY›õ¬ø„ØInĀ)9s™½– ŗŠC ņ߂š>Ś hšå,ųŪ”~j¦“Ż¦ż¾ØĻž1½žāc}ĢUąwÓ¹¼.s¢‰ŠmŹ®õK˜?é-n}čõĀ)•l_ßS?“HėįåCPx[W̧ū 8‹ua ņóXžŪ·€śņ×ņ1ͳoĖ ŗ øĖ¢_~›ī7óū䷙’Ć’øįŽēšŠ ęÜ»łönYAlÓ…Ū[]7s'ņ×Ģ/é;ģŃĀ›“ÓĒ÷³0žżŹz[„ØrĶ;õ£FķlXś w¬%ŗa+ ņó8q`^>%fė}Ūhv¬ł“wĘō¦vĆVץơ“”$ķŚ@~n6żļ|Ņā½Ž…ŗMŚqx÷æ¼6¼5j7Ą?ø÷æņ--»ŽH‹.ųgĪwl]9Ÿ˜F­qs÷$'+ƒćū·‘–’Dļ!c Ē6t0œ•ó~`ńϟ²sŻb¢b›‘›ÉécūH¹pšĄŠČ+öމ+ƯƋ{Ÿ’’`ŪP4ėt=>žA„X™ ļ°GiuŻ@ķZOŅéćxxzS·i{ź·čĀ’&=åBaZ7/žx'üĒ‘=›IO¹@~n6޾D7hIżę¬vKėuŪCŌoŁ•¶‘|ī$nn…ūšuģĖū³÷°wĖJĪ&$'+Oo?BjŅø]OüC-ņźvÓšuģĖžMĖU^īԌn@ӎ}I8ø“Ö=n.ļŪ(®rĪŌģBĶ`65żņ[VҜBµä˜ośŪ£É܅ lÉCI …Ļ+XĘsĄćØuhV™¶„Q4(5ÖĒ\u¾xõZ6YIŸji*¾4ō,T4ŁōČzk+XnQMō2†’ś•æĄŹł“©AfZ ™i)tī?œ K±H?ō‘·˜ņĪŽ~Ø^>×@ēāBʹ“ädgӈī7ĒYS»Ak‚Ā"ټ|ŪV-ĄĒ?˜Ž×eŲcļŠųģŻüžō‹§FPX$z½ ©Éd¦_ĀĖǟ;Ÿ, V|‰½[V0ūė×ųsꇄFq)™Ō‹ēhŅ®WįāmBT5Oo_š“ėEdݦ6ÓԌiH“v½pu-9ĄŽĶŻ“',aɌĻ9¶w §ŽģĮơö}†pĆŻO3oā’,ZO¶¾ŽW¾_ÉźS8q`'īĄĖŪNżī Sæ;¬N0züü9õCüGŅ©c…]~tz=¾=u‹~fēś%œ?y„Üœ,¼|ü‰mމ¶=o”Sæ; óquóął/ń÷ÆŲ³łŽī݌»‡71ŪņŠš'ٶzÉgKœ_8/W7÷ßēÅE×oQęĢ“”1V'±5ÕyTl³r/äY«^3jÕ³~Œ›‡-»Ž€ŖG.[`h$]o¼·ÄöŲf‰mÖ±\åW?g j@u«#Óµ„*˜Ų ü‰e«…+j1ĪĶväżjm˜ā]½Š;aŹs„ż“P‹fŽb*«*(9„j™9Q,ż;Ą\ą& ®éõ¤{MéĻZ9Ē2 -Ŗ»]”éÖŗÆ‰+,¦q[Üż4QõšŪLÓżę8›ż€C#ųæÉėŲ°ōNßOĘ„dü‚Āh×ėVj7hE@hMź·,šB¹}Ÿ!Ōiܖ­+ēsśųžĀĮĢMŚö¤^‹Ī“é>ØDMš»§/÷ėĻ éŌQ2Ó/¶ęøyxńģē Ł½a)w¬#łlF£߀ĀkÕ£cæaż÷ż‚Āxmāj6,ż…£{6““•Ž—oõ[t¦Sæ;Xųćū2µ³ø"B#ėšō'óKMÓēö‡ésūĆ6÷ū„pūĆoZŻwßKJl«UÆw=żQ¹ŹĮŻĻ~buŸŽÅ•ėäŗA%»ęXćéķĖ ø± Š+¹ę“¶åV!®ĪŌ€j½X`z”eƒéa}¦GYN”ŗĀ•ę*H²×^Ó£c’¶5¤&­RE“v½øįžg©]ß®r9£œ¬ Ƴ½~–‡—5k7äś;£y§~W°dW' j„B8•MĖf“phŚō YǾ6Ómü{‰‡w—™nķŸ?q6įP™ēÕétÜ6z\‰ķĪ&°må|NŻGvfžŽ~DÖmLŪž·\£–Õüņórٹn1‡v­'=%‰ü¼\Ü<¼Š„yēžÄ4j]f™®6‹¦}BVĘ%jÖn`uŃÅkEכF°qŁlv­_Āźß§ŠcšØiv®[ĢŚ?¦R«^3śßUśrYé©d¦„PæEÜÜ=JMėRlŚųwaĆŅ_šö  yē~…ė•„\8Cā”],žłSv­_ŹŲo–Y,R»sŻb¾ūæF“ģB³Ž}ń !';ƒū·³~ńt¶Æ^Čs_,²¹Xgu²gÓręMĻ-¼fwbnņ §A+Ė% ņI½p–}[W²oĖ yėgZ]7°*Š~͐ ęņMZŪ4Ū#P‹kö‚€UĄ­ĄKĄ0ąą×+ZRQiŒS?x‚‹ē÷’Ķõir³³˜ōփädep÷³Ÿk3ĻĻŸæ £ĮPę¹k7l͐‡-׬ÉĶĪbż’éü·qYįjä:t„Ō$ŗAKŗß<ŅęŖŠG÷lfŻ¢i$ŚEfZ łųśQ§1ÆFÓ}Ź,“WR­ś-ųńżĒY½ ž7ā7Q"MĀĮÄæū>žĮe®µéļŁģݲ¢ĢóźōśA͊¹™łåX łčt:¼|ČĶĪ"?O­żŪ·op×Ó•XĖé̉|żŹ]…Į”‹«^>äē君Åļ“ߦŪM#ø÷łĻŠ»T’Kõ‘=›8ø}-śßaQĖ_§ŽīaŽDõŻęéķK»ŽCššō®Ģb: NGÜŲoxóž.üöķė4ė܏хū3Ó/ńóĒĻąźęĮżÆNÄÕ­ō@„  €‡ĘM±ś’bˁķkŲ°ōbµįéOę—h1 ˜śžć¬_<ę|Ē€»ŸVŪ ņłłć§qu÷ął/Y]ˆyļę˜0öf}õ2Ļ|ņ»Żer”ŒŌ‹ßæŒŌ‹å>¶VżęŒ’£Õ}’m\Ę/ ᯙ$عLÕ’›²zx øø H/¶Æ1Šš-¶ż+SśuĄĄQÓöhSśp®¬×€žĄ ē ŸūŖ£ÓėéŌ’N>{n0I§óś”uV/¾ó&Žgūź…ōü@©ŃhdϦåč]\ńō.žQ²äéķgń{VF*Ÿ<=ˆvąęįEĶ趄EŌ!żŅĪ%ꊮõ¬ś}2£^żžö}†XūēŌł}ņŪ ÓYæ 0ÜŻ=I»”Ć„æ°~ńtzĆš§>(Ē»ć8NżÓĒ÷óĄė?8ŗ(¢ EÄ4āö1ćłå‹łłć§yģŻ™ū ņóˆļ łŒ|i¾!„ęWPNÆē“ߏ–š®øv0󋗹 įŽē?£Iū>…5Õ©9“s?}ō3>{žŲf k£ß¾v/ēOeČĆćéÜ8!5 ÷%ŚÅ¼‰o²öϟˆ®ß‚Ž·)W¹įĄ¶5Ģż~õ[t®pP³~É/4nד}[V²}Õ:õæ³2‹éT‚Ā£øė™™ōæłéżĒyźćy…ŻŠfMx™”¤SÜžš›vµrä« ¦¬Všā¶ü3€ŪFæaµ{™^ļĀŠGßāß„3ٲbnaPslßVR’NÓõĘ{­4MŚ÷¦M›ŁüĻ\ŅR’𠵫LŁiœ<ņ™é—Š»øāåėOt½ęøyxYMŸ›Eā‘Żd¦^ÄÕ̓Ą°jD7°čŅg0|&/ß|üƒ8›pˆ¤ÓĒ®‰o`0ł¹¹¤„œ ķāy’NĄ/( /»ŹmK³Ž}ń ēŌ1{ր„‘ Ę>ĶPAµ÷ė~ĄŲ_l{O`p ÷Ŗu'”ņ‹YŖØ× “CT’Ęm{Šwč#üżėWĢū~ł¾ÅžC»Ö³|ĪwԈ®Ļķ¾Uj^†‚|š“ėɓĪ)W9ƿω;čzć=Üłä%‚¢½›’įŪ×ļåēŸ¦i‡>xūŖ…ę÷ÉoS«^sžß4B#ėX—’tš)oęŸ9ßŃźŗ›hŅ®W¹Źåv¬åŠĪõŽ.†øz ĶĪõ‹Ł¹n1–Ģ ó€» ÷-šö1‰‡vÓcš(šwī_f^łyø¹{žoŲkõ‚) Œxń Zv½ŃbŸ­®H~~ßæ1’µL-üŽŲæ} §ļ§ū ‘ øėi‹ćtz=µ¶āŃw¦óźšÖ¬œ?É)‚šĖe0°ńÆ_ń eÄ _ņŚŻ­YædĘ5Ōt¼~;ÖžÉęåsX½ ž·ÜĻī’bŻ¢ŸiŲś:śŻł„]ł˜Æ1®īžå:Ā”]čt:ź·ģb3o@‘usņČ †ōzR’Ī^ĖvežŚ_£Į@āįŻe^c ņóųõ˱¬łć§Ā–P3O?nõ*}‡>b‘~öׯ±ź÷)%Ņ…GqēļѦĒ-¤_ŗĄ«wµ¢ė÷rįĢqöo[ Ąõw<ĘĮk9¾{į±³¾z…Y_½ĄCoL)QYX!:–·Š¢"œ-Øqź¢ZE²€S@J飁@ą"äKćxi@>‰ź:vˆ¢Ą\µ˜CūŌ'0ĮtžLÓö ÓO`“éLy§gM?‹·ų˜ĻS$eš^ß„R^Ÿ'e:G*p¼ŲėÓęŖs'Ł@Óq Ž-PŪō23¦|… ·>ōģŁ“œę~OŪž·Š U7ņr²ųń½ĒŠéōŒzõū2»PäWģ‚c4 oī~ęc«5UMŚ÷¦ĻŠGųsź‡ģ\·Øšęoćß³0Ü6f|‰€ 04‚øW¾ćå;š±ańŒr5F£‘ō”$r²2ššņĮ' ½Ž„Ōב™žBvf:Ž~xłų—yŽœ¬ Ņ.ž'0,W7÷2Ӌ«‹N§cäŲÆxóž®Ģür,Ūõ"04‚ÄC»Y4ķcĀkÕcč£oŪ•WA~^™Żw¬9øCµŠ–Öæ¾e—øŗyp`ǚĀmgŽ«:°˜ĘmmēźęAƒV]Ų“ģ7Ņ.žĒ/(¬ĢņģŽ°”•ó'sņČde¤āāāŠp ·ķĮ÷>W"=›–³zĮķ&=5Oo_‚ĀkŃ²Ė ō¹żįĀV§SG÷’(ǵ IDATīĆōž)I§Ų°t&Égøõ”7Ų²b.Yé—øtį?~š8ž¦šėø—æ!²®ķAŅZ{7Æ %é4½n}Šˆź·č¾­+¹xžAakł¹ZÜżĢ'ڹß¾yŲf™öį“xśų÷ņ7čōöÕSšÆ1ē³|ö7Ų±–“äsäååāJx­zt½ńnŗ øŪ"Ļ gp÷ōĘ­Œk“o`(ł‡’ćR҂£šņQ= ²ŅKæ…HO¹@ņٲėy’üé#VĢū­ŗqŻ ūš Cļā¹ÄĆüóŪwüśåXĀ£biŃes¾Ēņß¾„E—“ķ9˜ąŃäfgr6į Kł’‰ćGńŹw+ØUæyį9Ö-š†_PƒāĘR#ŗ>‘ušPæEgŅ/%slßVÖ,ü‘nļ£n“vÄ4nSf¹Ėr|’6Ņ.ž£E—.;Æk³5ĮĄĄPŠ PAÅ*ąQT«ˆYšj슶]0ųx8mŚv0 x5.¦iūą§båŠöMšC&_#šØ !Y“f€ę÷eؖ’1Ąē@ą/Ó¾p`jĢ[±×·Ģōśj¶GŸ˜ŅkæiņLÆļ1Tš +öNiž»›Žq^5§ķW¬G½_›%ø¹{2굉¼÷p¦¾’8ÆO^‡»§ó~x‹s‰‡7–:MŚ•™¹æ³[9oĪ/œ9AźÅs“ķ5ŲfÓ;@óŽ×óēŌ9ŗgsaP“tś8‘uŪ<.(,’ pŽģ±ļϟ‘šĢģÆ_gėŖłdg¤nw÷ō¢mĮ }ō-‹«ōK˜7ńM¶®üŒŌ¢ĄŠH:õ»ƒq/„‹¦}̼‰oņš[ÓųkęļŚĄØWægņŪ£-Ź1¦§Šå=¼|ųbń)ÄÕ)04’»Ÿł„‰ćļēēŸęį’MSŻĪ »*Ģ ņqs÷ÄPĻžMĖ9²gi)I š '"¦­®h‘ŸŃ`ąü©c„ŌŒ.uĢ‹›‡žĮaœ?Ytł0 LūJæQ,0Õ®Ÿ?u“Ģ fŻ¢iL}’q<¼|Øß¢ ¾” œ<ŗ‡e³æaĒŚ?yuāŖĀÖØ•ó'1ż“gńö ¦Qź·ģJfz §Žīeī÷ćŲ±ęž’r.®näfgr|’vf~9–Ōä³ŌØŻ€zĶ;—klFY6,™@‡ė‡бļPīXĖĘæ~-ģŅt­ņń"īåÆłüłŪxäåd÷ņ7„Ō¬mwęīgļ=Ü/ź6mOż]Šė]H>{‚Ć»7rpĒZķś—ū^ü²šøœ¬t¼|Jv;+Ī\•„źkkÕo«›;×/ęęūĒZ½>e¦_bĒŚE¦ód”yŽÕ ā ä©³ČÆI»^4ļܟW‡·dƒ“č2€¼ÜlVż>‰˜F­­Ģw1ŚšńSٰō†Ö/źIįķĄk?¬¶ųl›ƒOo?Ö,ü‘FmŗÓ©ße–W+éōq–L’Ģb›ĮP@ņŁ6.›MPxCĖčŃ!Źę,AĶ/@?`!*H¼€ŽØ€b)jlK:Ŗµa>Š˜l@Żą‡™¶ ķ±lėū 8 Ž ż›ū BuAūŒ¢ń(Å[|@ęc^0åó›é÷Ҧ֙t3ż\az}>@ą^` ŠDsīéØīm€µØ–Ÿ 3š8*0Œjå1—g°é=śÕj`•ž6jÜŠ:TĄu“5D½ēĶQ-]¢˜čś-øłžW˜ūż8ę~?Žö}†°lö×ŌiŅŽ„L±©„ķp|’v6žż+'’Gfz .®īų…QÆYGŗßgŃEęüéc×,5s}s £Ī„(ó“-Ł™id¤&c4mN+ ŖufĀŲ;9ņßFšvčC½ńń $;+ƒƒ;Ö²aé/œ>¾Ÿ—æūN‡” ŸĻŸæ„ƒ;iŃåj7l…o@©ϱė*–ĢųŒó§2füT‹óü0žü‚Bé6š>‚Ā"©Ӑī7ǰkżRR“ĻŅmąõ+Pū.œKū>CŲ±öO6ž=‹OŸLĀĮ łu›¶·;‚ü|ņr²xóž’gļ¼Ć«(ŗ?ž™½%½”:(½ˆ€ ¾Š Xé ģ½”b}mĄ«A’š?±Š EŠJo’Ŗ …ōvĖĪļĶ ©HBH²ŸēįYswvęģõŽ»sfĪłžœĻŻEBاįåW‡ÉӖå-RXr41€+s܊ĀÕŻ‹KĻb³ę`49ååם‰ŽO·yj·q&z?@©‰ÉŖjgå—ļįęéĖė ¶R[[÷Õ’ųvīl’e)żxœœģL¾ūā-j×╹póōÉk+„dé'ϰuuv¬įę^wēĖLKāÉæ)°3Õ®‡¶ŗ¼fé ¾Ÿ?•Q/}NPŪn„¾'łÉĪHcßļ?āPŸ 6ڵś ę«’½Ä޵Ėk¼SФUg<¼k‘š‡ÉģLĖN}Æźz‡SÓļžPī}ģBŽxrB,³^ʶŸ"é9šŃ¼’‡6«OßŅNĶ¢MS<¼ż¹ķžI¬[>‹éūŅsŠpj6ĮŻĖģ¬tĪĘbĖŖ°¼°0›µØ)U~ūĪ“’x®·?P¤ƒäŠ€N}‡ąī„åå\<ƒ%;‹½ļ-ņ¹Õ¬ęŠ9¾ļZuéW®Īŗƒø³Ēłī‹·Š=ßŖómEęęx¹čÓ§ŽŽŽ„„„ wÖ !ŹŻČj@UpjZ”94«Š&ęłY€–Ėņp7°m²ßų øRņfšĆ0 ĶaŲžļÜŽÜk3ó½öJī1Ķ©y›’ĆŻģł®yų;ßßÅŃ)׎åĄ#Wœ›¶;ō6Ś®Ļ*Ąčƒę,]yĖŃvŒOœä|ć7AsRŽ@ Żsą < ģFSj³_ŃēN4'j8šA)÷RcššSܱ–ß¾ŸĻžĶ«0™ūśü2«98GžŚČė¾ĀhrŹŪĀĻÉŹąLō~ö’ž殘Ćs3VQ7ww%;·šc«æ8\r<óL«×¤{6­$zßVüė6*ņŗ˜ƒ;ņVЬ9Łä:Æäų”œ8ü']<ČŲ×ē87pųs,ūō96Æ\ČńC;iÖ¶;ū·żĢ™čż ž<÷>öför¬ä/eļęU\ŗx¶Ą$­q‹<õńwVĶ5×Bf>/©—žĀ¬ßźÅCOČžĶ«8¶>µK¬×Qv»•Ģōź5mĶÓOćņācO²ķ§Å¬Y6ƒyo ēķ%»qrvŒ£żŒŗø—*éXé¶ädc49ѲS_ü°ł‡/©]?ˆīw<\`B“pž4?,x‡ÄÜEkNv‰ż_< tmāL]/tIFŽ“A< <"%ŖŻ.—* Æ !ĪUˆĮU”ŖąŌtĶ=~[Ģł_€P“µüķ‹Ö΃ŸŃœšvtjęQŠ”¹^”v?”ķF9dA2ќ–ÓÅ“ĻDˉ1”…–•F;“¶„vh@{æķtŠAQ ÜńČÓĢ~õ!’bé:ąĮ«*(ęˆwĪLKā‘g?„Ūp ,ŁYü²ō~ŽüˆÅ?ĶKŸÆĄš»*VŚj±ĆéqLÄnłĻH~żz6_Ķ|‘”Ä8Zw釗_&³3iIńŻ»…Õįļc49a³ę`³ę”āŌüh‰­EqSÆ’š×ĘoI<†fm»sPkßė ©[Š&V7÷ŗ›#m䟘&j~ꆒyuwu¢uėÖxxx˜ĆĀĀn!.–z”N¹±ł‡…Ų¬9xśĖžĶ«čÜļ¾2_ß±÷`2ÓSø?ōŻB«Ąµ›pļco’™–Ģę• 9üĒÆtč}JīÄPµ_żŚ`4:m³_{ˆå3žgłŒēqóōÅÅŻ“ģŒ4ŅS5gēĪGŲžĖR ʒՉĪŽäģźĪ“åūó¾æŽ"ˆĪ®y*NłqÜSzŹ„Æ×®tU÷YVvęŖžuéWš·£Kæū9“s;Ö,/ąŌhh¦iū†Ō¾{®ćåõŖ$CJ¹ųX±»BŒ­vmüŽk–ŃŗKF½2£ÉĢÖÕlX1›žŹRóØn£ę\Š»œßāäāFfzI©½Ž³üι¢4ņE<ügc‘œ Eż{ųŌ¢^“V8»y°éūø”ņ sģ¹ŗ—MĢ#+×ęcū·ēķx^‰§o®žćÄ\‰ŁŁ„ČÜU€: CHN8Ļś’ūŒƒ;ÖņčC÷Ó#ș³I6Ž^Ä–člҲUčmąŽÖ®ŹČīī8›Ä]RŹ»…Ū‹ģøRœĒ>ą…bĪņ’Ņ:“;oćr~L~RW.ÆÅż+ė®Ņīo7ļ/-Ϧ'ZXœZnŒ7ZȘC†£¬*gŽ÷«%0”˜6v æ_:ł°dgńķÜ71™ h،æ~ż†Ž÷Œ-s†³›C'¾MķśMóŌXņcvvašø)DķŻŹńƒ;IŠ;‡Oķzy«bŽ ĻÅįŲ 2äŪ9ņöäÉæ!lŚ~Xšv^}ŠĮČĄįϵg+1w”Ź•Æ=°”nWŅŖómĢųń²/žž’ˆ‚“‡’āŌ߅ēqēN—NŠė’zSĻĒČĶ œØŪ«Bōķū·NJ¤Õ¦n3Ä!ÄęJ6³ŚsņČ.VG|@`“V<óÉ÷L{¬7Ė>}– 6]‹-zy%ƒĒæQj›Ö]ś±yåBĪ8L‡Ž÷`2kBžŻĻāpL Ķł¦Įķx;ņ/öl^ɱ;HOID ^žuhŚŗ 7÷ŗ›Ÿ"µča'—’eŽsrWÉ=|Š—ÄĶ?”ŹLÓ}0¹Ä~-9×łŹŗ+p5$^8ƱżŪØ]?߀śy¶·ļ‰ŃäÄ®ß2ģńiŒ&üŻ ōo傇“ĀļDz ߑĢÅT;®fAó³ŪĄ¶®÷ū»+J)g/Võ›KϲōÓgqu÷bÄKŸ!„ąžÉÓ8ņē¾Ÿ’-:ō)č^iÉ ¬üņ]†ÜTØ^R~;8łC’}pņČ_y”“%”Œy”[qēNxį ƒŪįęé[ln©£NS­RTŅ‹ %åŽ\8Ķj„~Pė<ń˜”ß¦ĒĄGKģūF A°¶nÜ<ŠžĶœłé@&ŒÕ^P-6ŁNų¶4~<i˜ń ŸW³Ś¦_¤”…ѕa÷FUpj™”—Jlu‡_Zae©÷jļψ†6ĶŁø€–k“&Tp-ר¬8ŽÆĒr’Ēņ~ݐ¬˜ż*ĪDsߤwhĖ]¼7ž¾÷o„m+“’—‹›g™āʛ“ģČńƒ;¹xö8>µėå)ŅdåKŹ/ ĒÄėŹ-ž 6]ywéŽķßĪ?Ēö“‘–Œ‹›'ŽžuiŁ©/ŽžLߣE1”šŌlĶŻ*­&HžMé)H)YšvńYŠĘ ! {SgŚŌ3s"ŽŹ‡kÓŲ’…”,/…›šÅÜ»5ņ3n’R~ ¼RÕ'V7*9Y„½÷BƼ6/æ: a&³_}ˆ°ixnęźU÷@Ėēøxö8^~µK¬ÆāG»ü]rĮŁÕ½LNMVF ®ī^…Tśœ\Üč~ē#tæóŹČcŌKZ] /’’yÅ ŻcYwE~‡=>zAÅOˆ=¼ŹV7äZŲ¹ö+¤”ĝ=γ’): 6-9‡C;×ŃļĪ{ø»½+g“ģLZœ@L\Į`„u‡³ųbsŖqTwĘßźłŒ„:RŹG…UR+WŖ*įÓ'’™–ĢčWēꩥ9»ŗ3ņåŁĢ|~0 ßĻk_üV¢PŒĮhā÷Ü>¦D§ęĀm^ģ“ļ{PæYNž“˜ƒТíE^—™žBģÉæ lÜPć© Nc ŗøIµ@›˜[Š&öŽ%†Ś@|ŚV.”vYę“]šūŃšŁhł2WJC’«sjļ׿§Sū’‰-«Ā jӕž>¢øwü›|żł«,Ÿń||}†<ĘĆĻ|\l»KqZčzž„ šqöųį<éņ¢ČŹH%9ž|éׄŸ>Ė®ßńņœõŌiRģ˜'’ŽU@X 8yŽ<‚¢ųųɁŌiĀšfå9hu5/RŖ]Uķüsģ`©…€Æ)%;×}…‚ž<‘ēœå'%ń";×.gļęļx’¹9›dg\D<é9j=‚Å.Y°5ųtU¼6Čūa4…ŌĀÉ U€5Ėf½ļwŚõXČńmѱ7·Ž3–Ķ+ņĶÜ7 |v܉ŒM“–pvuĒÕŻ‹Įķˆ9ø“æwo*ņ’yvFæ,ł€Ö]ūē½Ž±Ļ¶¬ cå‚whņéŹBŸs©Ŗ|;÷ lV zߛ÷ŗćó¾cĶrŚuæ³@®ƒ?]Į?ĒŠ©ļR?knž>ŌmԜƒ;גš‡§OĮśå’‰!ńā?tģ­„^×mŌ7OžŚš }†~ūn>½ž3ŖÄqócĪ]ŲKOI,ó5eĮš“Åε_ńÄO`2™ųļš‹%:4’2Uf¬O6NāŪKJŁK±µ\ «‚T§Ę!½\»˜óĶ€h“ÉüÓ\ćņ”h§¦ZBžV ęŌT„Ż_[`Z’ž«@ēÜ×?¤čZ7ÅõSŽŲ’āUš’Ū)ąė«ģ»Ś“’xÅ=…ŁŁ…QÆĢÉ[¾ķ¾IģŻś#¬’š6Ż›gāąčž-|?*M Sß!Ŷ‹Õda=s“%k×Ā`4q&z_±×€¦ƒä ¼3¦;6«…(^˜/īÜ Ņ’ā jÓµŲ6G>Ą•?ō>>€Įćß`ЈššńGUķLę"sdbOń÷īM·ļQāÄļzŅŠ×Hė@3ŸmHańĪ¢¾~Ŗ„/·jĻ¤ŽžĻI)×!Ö{ĪU³gÓJ¶’²„Įķ4ā…ē|ņŽīŽĢźš÷iŁ©/KØŲ¤%ŠĮHō¾ß±Ū¬EN¾@[¼ äv“źÜÓQūŲžĖRś-:zwėźTÕN«Ī·å½ęé]‹Ģ“dĪDļ/ö³}:j/NGŃ®ē bmrPÆi+„¢s`G”bžIqē8v`;~¹‚ ŽŻ™“Gv™ųįtÓ'ō¦ļЉ<ōtiAJ”K„qāšŸÄ=N³¶Ż‹•³µY-ܱ–ŽCpwR˜™P¬C“ŸöfŠ­©“ģÓÜeš”r±¢tĶąˆÓQ{Y>7O†æPt¢ū}”ļrųĻ_ŁüƗ“éz{^}–šé“ˆ=Éė ¶ä9ū÷…¾Ēg/ŻĒĢēÓøeGµĮÕÓKv&É ē‰Ś»•Ģ“d:ō¾‡VūåŃ¢Ć­tŗm(»6~Ēk¶„e§¾ya©IDķŁB|ģIź4 ”’ē]×Ŗ“¦€¹’÷ŸxķĮv4ļŠ+oQ-'33Ńū9ł÷.ܽü:é2½'‡?OŲ“ ¼;öŚ÷ˆO­z(ń±§Ų·u5‘WØÖh2sĒ#ĻšŻ¼·xgtwŚßrŽžu°Ūm$œ?ĶžM+1MōRR€JAź4 AĮįļsńĢ1¼żėRæYŪ<Ą’8sˆłov ¬–NŻCź„‹<ōč vžČįbŖuMŲU8oÅĖE!Ó"ńpÖ¾cõ¼ (Bpō‚…G³HĻQķīNŹP“ym¦*85ä‡ßq¾gīŃQ§fgīq(E«uŻ—ūzŃ:šEćŠō¢dõ³Cžūū„ˆóWޟĆ4éåüøE/·¼‡üKé{Ńv†a.i{3š,ōt§¦RJ"Ž%-9žü €0€PF½2›wĒō`٧ĻŌ¦k^Æj·‘™Ž¢pĪMąoŚZóU’X÷¹IȅW,/œįŠĪõøŗ{Q/Ø5NĪ®“詛ĆžŹķkŠüqµdgńė׳ T=lܒ#mąLōž¼ߕ¬’źtč}„š`a+sū·żLÓօ7 y3ŽIœ69 ēŠĪutģso”ö;Ö.ēLjxęӕevj F6››ÕR!9;6vāČy KJphņ±-ž-]ģMj™¦s¹.•Ī5’Ė’OžĘh23śÕy…&ż®ތxqŸ½<Œ…ļŽgŹ—[óV˜ßx“Ŗj×j¶ø{įāęI·±ż—%|ōäōŗ{4[āāīIfz ) ēłcŻ×ģŻŗšśA­iŻåņ„ÆĻńüöż|VĢ~¤øs“źŅOŸZ!H¹Ē”ėŲ°bĪnō<.ļŗNżīćē%Ÿ°ōÓg‰?w’ąö=šō­@‘žĢ‰C²fé§”0ؔ&7O_Śv»ƒƒ;Öšķ¼7épė=ųŌĒn³qńl ?G~@‡ŽZ¾^ż Ö4nĒŚe3qvu§M×Ūńņ«ƒ%'‹ųs'ų~Į;Ś—G®ŪĘoēįāꉋ›'n^¾%†ßī\§ 8jÓ…Ńd¦cŸĮ >œ­ŃY/‹žFų¶4q[ _4õŠļŹ|a%c³ę°|ę 8¹øńš3›GčäāĘØWę0wŹ£¬˜ó:AmŗjŋŻ=qõš. ¾Ł¢Ć­¼2o#k—Ķ$jļÖyŒ&³3 ‚ŪŃcą£Ür×ČB»ņć¦, IĖŽģX³ŒŻ›~Č+AZ®V’ž`Ј ģāE᩿eķņ™ģŁ“’=›VČżōō  ūņŸ1ÆąŠ LļK×¢Œ¬’æĻŲöó’<;ƒ‘†!ķłĻؗiÖ¶{^ū;~w/?~ūö 6|3÷ré“MZväžqÆÓ Y[Ķ^”ąźį]¢ [@Ć`|ņæ¬żj›W.4‰ģ’œ!®ŽŲlžŽ½©Čó^~ué1š‚›5ećę4‚ji¹c6»¤m}3īN ßģŹą®v®ø; ~;šĶ=7¹ń՟é>gUŗ4uj]¦7±šSœš#huZ@›“oĪ”…k݌¦ v‰ĖĻF“‰ś{h»›ŃrMÜѼ˽ž§«°įxīq ZˆV&š*XyŌmŁ…¶=>MĮķ÷\ūÜфF”ķ¦¬Źmæ-ģ,mwź4Z^N0ZM‡”‡;—ėŚäæ‡åĄhŽĶj“¢/Ń ož†VćēlnŸŃŽ/;šĆ£“ßĢåČ_ nߓۆN,t¾V`†L|›Æf½HŲ{xž?”(bī䓧ļ¢Ap;¦|©-¬·ļIČM·p`ū/¼;¶'7Żr~ubvv%-9ųs'ųcż×de¤2ģńé¶Ņļ÷:G÷lę‹7GŠé¶ūhÜ¢ī^~X-Ł$^8ĆŸæ® īģqŗōFż Ėæ{}‡NąČ_ųäéAڹfmó®KONąĄö5DķŻJćč|ŪŠB÷w%-;ö”NĆÖ.ŸEfZ2M[wĮĖÆŁiœü{›~X€§o@ޤ°cß!¬ ›Ī¢÷C9µ—¦­:ć伎%+ƒSG÷°ž’>Ēæn#BŚ÷,eäĖų×iˆTU"Ž„m·ĶN“ź|[™ņšJĆĖE”–»Ļ6¤"g…Œ£"°Ų%fƒR‚³I`µK²­’妎ųO')ec!Ä©k6¤†#U•šiČHMbšų7 |¦óÓ¦Ūz Īö_–šŸ½’WP0įüiT» ©^Ī?yų™B°sŻWDž·°š”‚6Ż0āÅY&ŠŽž<õ_Mlcķņ™¬]^xE½v½¦Œyż‹ÓŗšóŲ›a,›ł<«Ā¦iæ‡O-›Q¦ā½>?ƒ¹SāX·|ė–”4ŠB’§}ĻAyÆMx{ó¦ ē›9SųfĪ”ķƒ‘»Ē¼JČM·”il€¶Żļ vż önYĶŽ-«öųō«÷ł±YsŲµń; FS‘‹łé}×#“nՒ÷N&8ĄDĖ:&jyŲ­M’[šŁs:‡†~F:4t"&ĪJj¶Ź¶˜l’2U›«Ņ‹*äŌMN¼2wC™Ś†ÜtK€×l)²mƒfm’¦6ĻÉĪ̓…¢ Ō>+ Å`¤’OŠ’'°Ū¬ČŽżt IDATäde`·Ūpvq+1—ĒŁÕĮć¦0xܔcMN’:“±sæūčÜļ>lVKžhĄ•²äłé9h=ĄfĶ!'+” „:ššö/ō>Eßū&Ņ÷¾‰Ų¬²3Ó0;•œnģäāV¦~ AZ¶Ź¹dĮ&\L‚„t•¾Ķ]˜łk –\рōlÉŁ$[žˆ@J¶*ģŖ,[2k5§*85 ķŖ|š{tŹæŠ&äŽ Gp'Z”Ģ”¬ż¢¢mĻ=NŃ”[Å1č‹&„ģų•æƒņ+F9ĶŽū)X‹G¢ķCcĻę•Dļū5K>-¶~†‚ǧÅŹ…ļ±cĶ2~^\8¶æn£ę<ųät»ćįÆ7nс§?žžoēNaēŚåy•¹8Dī[°N@Ūīw0ž­pV…McĖŖšBćMNōų(ƞxæLõvƒ‘'’»‚Å=ÉÖÕ…ś¬×“5£^™“·šēāęÉ3ŸüĄ’Ož)²Ž@“VõņģRCoņÓ’Į'ų{ĻfžŚš mŠÖ9ŽŪ^ģÄ÷jšw×vĻvŸĪįžö®$¤«Ō÷1`±Ć®S9tläD¦EEJ0Š€Ųd»Oē­-tD ćŌ¹2ӓé}ļxśÜū7õŗ«Ä¶<ł>mŗiįUVK6&³3½†DP3;»0ņåĻ2q*'ģāRÜYr2Ó1;»āé[›&-;«¤Ō¶ļ-ŪĒÉ£»¹p:ŠōäDw/_ź6jAćŠü}čŠg0ķzäōŃ=\Š;Kzr"–œ,\=¼©]?ˆ 6]Æj·ŃŪæ.ÆĪŪČ騽œ;q˜“¤LNĪxx×¢iėĪ…äžk×kŹaŪ8}t±§ž&-)³“ ž~µéZ ’®V½¦Lx{õš¶*v|WoŽ ßNō¾ßI¼šYé)4/&± '+“į/ĢĀÅĶļ’ Zߤ…æĘ„Ł‘Rū½<—lĒd<ŲŁĻ6¦¢Ŗ“ąT¢•_e2ų&ķwęBŠMųøšĖæšbĒÉŁõ_IćŒ¦R ņ³(Œ&óU}?Œ&§r-Ęl4™Ė,ŠSl*Xl?7wõ¼ ¤d©øš?Ȥu '£¶ƒÖÄĒĘMN‡Łæé,±»žę­µ{å;jv=“9`“Åļ7€ŅULŖåÆĻX±Fhłéh;%…ƒ™€†¹ķÓŠv@®Œ«uBŪõI§ōŗ.n¹ż¹¢ÖĢĢ}͌ętäōõÉķļJ穤ńLh»#ž¹ēĻSü‡RÉmė“{Oēsm0”ķŅdp9ä,?īhzW“]°+³ŗė£ååd£É\WėŖµ£GŽBŌmŌł^ź¶īSęė2R/‘•žŠŁŁO߀Ūfg¦“ž+wéPkN)‰1šĶEŖ-©Ŗųs'I½t›Ķг‹;~uJŒ,Šō”DāĪ '+ƒĮˆ§omj×*U*5)Ž“¤x2R“°Ūmxx×" AP”äŹ²’ž’ČÅ3ǰX²qrqĆĒ?0OŌ Ųö’Ä`ÉÉĀŁÅ߀ś…B.2ÓSČLMĀ»VŻNRUI¼p†äÄóX-9µīZ.b­ĶōlęL÷cih¢ž·«]‹s®će`ī¦Tno傔p8ÖĀł;Cnvć—C™ly) TQ%–+‚1cĘ,†ū4hMó~ekשyø;)<Ņ՝Wæ»D\Ŗ‹iv‚k›špV°Ų$¾n Žfѱ”.fĮŚCY ėäĘŅ?ŅY`mäkŒBŒæŽv3ę]`Š‹w]Śßūņõ^§ŠqW;WāÓģLˆ,}Śuéą*Īżś!–”óض¼…3 ZĆXŹ®Ø[­Ø*;5l\£* Ö2“Ļ”`˜VId 93W¾VTbq24%gŽ•Ń(J6ŹZĀŲ 9KWŽC~ĪR~;PÕ7O_Ü<}Koˆ¶Ÿ«ŻäT|.ŠTĮ4»ŖāܽüžÕź‘§Oķ29MWeGŪ²ŪQ»]ݽŠ ø”(ų6.ń=ž7äŲ“­~AC_#§mtr&.ĶĪ2r³[^sPmĮ&.¦ŚńtÉ[„Ƒk%Ó¢b±IBLl‰ĪęÖgŅsĆĖ„ƒ.&ĮĮsŚŌ3Ó3Ų™Uū3q5 źy @ńj(::7'āmÜģL«@3Gb‹Z“¾ŒoŪ{šms7MW°qéūÄĒĒK“öĮĄI`ZŌĪÕD%UyŖšS££££S)$ehK»śf~>˜IC?#Kvjõ2-’Kv!°Ł%¾nrl’„t;··ŹŪ%:T9–ėčTmT g“mܣʕ[ŅŲšwaŁxĒJŽÅŌĖēī½Ł kN–ņł_ģŗ¢EJl„° ŽŽN„uĮBŪzfŽŗŪ‡±qdä”ü1 ®c&ü•gģ†Ÿ^l46SŃ¢uźo”ådC G«čNŽŽŽNH̰“œ„rw6Ges*Ა-3‰ §¢É¹tŠģ„dœŻ‡bvEµYˆ—0ķ8įķ·§ź«Å::’’’X|³Ć»¹±½čbĆ9—Īpęē·°¤^@Ų³8œ~žé`ĶČČų-į.*Į”)„ėŽ 9ļfqw{W¾Q‹W$r>„肺]š81}ØÆ]Q8aP”§ŃR– åfĒ”ÕF»-ū ą}j€3_tv³ŽŽŽŽN!öÉ”kS'īlS0ŁÕąģAĘŁ½œŪš ¶Ī#õÄ6’®'럿rĻ &NœšEēøéč蔁ø4;‡c-LźćÉ]ķŠN6wņmH“”ŸāÓ -&Ė%™™‘AFF† ­”AP¼ŅA „H°fW©9:•HBŗŸfRĻŪĄ7”¼:țžĶœiģo¤YmŪø2ćA?łł#žø9)»Šč-„pä^K`šźļ=hŖŗ9Ą44•Ūj?ē×wjttttŹHōE+üL¼ńoTU²īˆź"#un™D@÷ńœ]’> »æĀ–•Š5'“3f0cƌ÷ŃD: åźhB+Ø6Ż×Ó);gćj¼u·=‚œ ߖFLÜe½W³ąö›ź3łõÅ¶Ō„Ų¬īŻŗ8ž|“ļ^ßÜæ”\‡pP)åy[v:Rµ!}Ź„S:Sķ|³;ƒ›81 „Cnv+pަŹąƒ`”¢¤ēIŚē|5šx€ L ļŲčß0"Øk·f—ŚVGą·Ø,nkīĢ{C|Ų6›Æwe°’Ÿ2-7=1ūnžXŻśķgŹ|“žžžŖŖĶŠ ŲŽA‹s.I¬£F „8/„ĒYćTGuž%Ŗ„_’Ī¢uŠ[š9s{+Ҭ\H±ćęb°5š1)FÅ.åzŸ†õŸ<žüq ZI4åĻ[ŠźĆM>”'xƒį€ŻnGJ•”ó1x×kQQCéT3rl’?NfóżŹõŲ/ī£vķŚé&Lźääc2('Æ¢«]he<6”Õ2<ŠV-ѝšĪy …53„Ō†:: Ux^$‹ęulÜÜŠ‰žĶ4Łk‹MÅlŌv÷ķŖŒ½åÕW§„……}•ššśZ‘܁Īh™Q\.\S9–€Ķ’…Ń|ķ²Ū:5ƒĆ±¢.ZqK9ˆÆ)__ߜ6;.Ž?åp¾ęńĄƒh„ ŅŠź²½|܄6Ń«U­/æüņļ±cĒFK)COīѝ«CJNī%3)–³gĻ®tvv^’/{ŠBĖÆŁ‚V˜~Z®Mµ£Ź85-"B‹,«¬ y!zŌ¼s×ŪžŅh¾(“ŃEœ8üĄœōš -T“SzĢšĻt©ä )e”¢oźÅ¢Ō±utŠFG/X‰ŗ`%eļ2jūøŅ Aƒ]}ūö]ģ3(ā/!„cŲQ…“;ZĀęąk“ŗ…«ŽÖŒFćZ«ÕŖJÕ®$Ÿ=‚Ó"āutŠÄf—lŻų ™—Ī!„ų:,,lL)—Äå§뀕Ą£€/0„²—vø*¤”K·ćļ"°m?\¼J®k¦£ć įä2“bPeé5v· -ģ2ŚRrĒ*IÕH’Ua—Ŗ°QUXŸ’ŸŠāo8¤`­=‡v(†pEŚž-ƾC‡ŽołD“’Ś“Xōø_Č¢ŠēŹkĢĘ Žœ<śZū ‰œ4"$|Āu_Ę2 ?d„\$+åāõ^§Š“•Ļ‘ż²iÓ&"##§ !ę !žĢēŠäĒ ¼ <€6śxāzŚ{#1žüóĄN€ó‡6‚¬¶aŽ:@ņ¹£d^Ź[Ļüž*/ßt¢Ąr*h>d±XfńH•æ/Gµ—Vć[G,ɜžk%RŹ-aaaæ”C·‹Š¾+õŃvlŖUĆ©ÉEHzEœė›’_ŌØyļV¶]„#ļWTezłu'žŲBJjb²¶Tų{c²‚śäµ÷$F„ݵ÷suŲķö äE<»oĶõ^§Š“ļ3“l6›×•ń²oŠ ¤å³€’T€iUEŃ~3.ćbōŽŹ6G§Š Ś¬y>ą`ZZŚŖŃĶ9ą6“B…CŠj|”;K—.MB¼Š˜­KtĒF§D¬Y©DmX€5+ Ė`0v©ōB5"E7U3²]¶ŗdg?Ü"Ą)ĪJ!W9w@óČɳ$öµB*÷KEI)ö£}š“ŸBŹ^‘©ŖĢŠ=§Č‰JĖÅźŚ„įU !Bā…B R|=rĪļ!‘”ē!ī;:bĪöąÅ“_’ؘ‘sV3uŖŅ$nBBā'!…Ž˜ž{Żt±CAž![€’ˆ³£‡ĻŽŠ|Ń惄PīöTE3ü‹#łm Y:M : č|'$éQ£ęŽ ‰ .…8(ƒųŲ‘c Rł,zԜ×6ĘŪlșķœš0¬°G<~+Šœ ¤ ‚x ‡œ |tšŃ¹I!‘“ĀA„-_DEœūʕļUćšŃĪ&ƒėóz#¤+pRĄŠØsW/žx»Źc@?$ŃžØFübWóÅ”÷ )”.p ÉaĖł j\XZpääŃHÕIŃh-0ŒĻ±“ĢJĪ‹ŗ!pB•g¤4Ģ;6zö–’>^cĒŽ}^Jł±‚ężĆ»žuUżŌ©¢¤ÄFń÷ŗy€DJłJDDÄƲ‹įĄb ømrUć3fĢą6”iyG(žA•m’ĪŒ”Ū¼ˆÄSū“æ¤q-+R-Ńv =Šž­e]œø*F=Cń €G­ĘõzgĻZ1”N&õB 1[—`ÉHķó=<""bY9óš°ķ9TmØR;5ÅaG4Čw‘"H"8IøåäĢ‚ū!ĆP”7Ķf‡DN J9”÷@Y)Ÿč‹ĶpDH™%å=$ł}ó…c=ŠS~šÉ,!äėĄß ×…Mnpe[!ew!hÜäāółŒb©¢ČWQųAHń~ČāÉ#s›÷SPēğĆ; īGUW7[ņd}©Z£„¦Až*[¬ĄbŽ/4žXŲ“öŠcI«Ÿņ3Tö"™iÄ膐÷ēæÖ ‹30¬O­Ö¢uųä:BQW !·ØØĻ äl kŽrZ)$ہdmł[Qļ•Łąś–j_!ųTA¼l–’Æ‚On&ķņ„€R’ˆ;¬ĄdŠ ŽxüV)Y*Ū¤P§¢IöUMĪsµ^e{!Äg™%„œį„sœŁ˜³ A1SØā qH(źš–K'’éUUg !¢„”ŪIĘ„.EKē#3)–c›‘+œ“‘‘ńæŃĶ“/“¼›jń{|µH)ž‘Ŗ£ėę‘p|We›¤sƒb·ę½)ÜįŠ|p hJ„O£-ņ~&’\īddd¼€ö}'-žūų€Ū’Ō 1 ՊR§Š Ś¬\:}€Ø 8²ęs‡Cc‘RN¬‡“Ļa š€FĆ čæŅØ2BR°#ŒNM€»CA‘“jM‹’įń /å¾¼1xQhWaä&ąŸāīAń€„WŽ˜ó]īK›‚#' •»€H­ņqԈ9 óģXzÆAŚ:D™æ 89łÜztäܵE5rŽĘąČÉē䓨‘sWx‘ļ5ļ„ååŲ„$ąDԈyóÆGN>£µ@ōˆ¹?GNVŌŪ¢FĪ[Q|O²P˜5bŽćį³=8r² fōüćĄńČŠē…`gŌĶŽE”OIÄ×ĒFĪ™įč„EDč?B!’=wl众š-yŅSQ¹C‘JķčQ³sĻ’ŚWUEąXqÖEDDd=z°b‡Żšķ}ųēYŻņ~o*éķŃ©”\:½Ÿćæ/ĆnĶHUUõŽ+Vd•v]1¼ z£å~YNfV""".Œ3ę^`j·ÖŠŁŗ„ÄÓūipó@\}+Ū<Õn%žų.Īķ[ƒå²Rå²FM)§!"Š*±ß¼Œ¶’]®¬X±Ā<3f̘½Ą'RµūÅEļ .zŠŃŒŁÅ£“®XÓ°d„aĖNGµ(7%„ž{ ›ŠV3ķ`š`µ J95f”R@¦Źdā„]„ˆ³‡Fk*|…T ؍ ”œ–RöĢū[)łŚg#Õ+u}­Ŗ* ­ž„¬‹ÉłŽš;øō›Bˆį!‘”w\[6—‚¼ [õJ•“ ©ŠrśµSŹ®Ąf·Š“oHdčBrX"Ī)cœpæŹ¤L±JJę…D†>,„<-gźļĒGĪ‹)žé+¤(ąŖfūilßÖ_3[²AČ|Ī£-§ŠĮ® uzHdhŽĖRŅH¢ų–faDDÄŃqćĘ VUõ;Õfń;¶)‚øĄŪöĒ«N3(ü1Š©IH•” lj=ų+)±Q!’¤”÷/Z“čp)W—D60 ­ō;ĄWhńĪ5Šššš=ćĘė¬ŖźĄMIg’tę .^xÖi†ŁÕ “K‘›ę:ÕÕfŚFVņE’cę/ŅŖo†‡‡O§|kĢ<܎¦J8MīæÜ _4aĀ„¬Vė‹h”?T›…ģ“MpZ§&³ųĀd2}9žüŠN¼ZˆęԌ@Ė'«J-UŹ©*;‹Ź© ^ZØ­‰¢Ģ’R ‹T%ŗJ;)ö+_oł‚[Ŗ=Į~jLD‰š÷łpĪ~R$\¶S©“—ĶYQ°j·5.,-š‹ ­=]•.ŖP"ec)˜”#3Ę£s*Ń#ē,Z<ł7#²•”¢ˆSB…>=jnńŠBų’§f; ÅhĪI>Ņr…‹§˜ ;6æčBš«]G( .Ü2jŌØ®Š¢¬nN‰&%6£“+®>˜Ż¼Q ¦²Ž¶N5@µ[±d$“™‹-'3’©żŖŖ‹ˆˆ(vš*Ų‚¦H3ĶĮłøś¬r,\øšō„ ŗŲl¶ RŹ7Śŗ*”Īüb·Ū_‰ŒŒ,4(b€łhŠ„O£ķ¢VóēĻOA“vŸ2nÜø›„”ķ„”õ…ś¦sć"„LRĘŪ#""N]Ē”»Žhõšö^DZ+Œ*åŌ\%ģvŃ­čP.¢ ŠšPģeDšģ±Ų >-=īwōrØŁd¬6\¾JЁŒžŽ97O­%$r⠄虓R¤ B)QäAŲmR %¶±³3M6“Ņ.ņ·#?ΰ[ķĮŽ=‰‘“īŠėčˆyy[üM#'D1G"H!U)…(qœČIį©~ņ÷Čyy÷jZeē<§FŖ—ļI å‚@6Źßb°6‘²{ā|kpdAG6=Ż~ĮŻÅ`2ųõą£s“ņĘYś¢Į Ӏ2­¦/Z“čųŌ©S;>}zŚC§™-'S‹{ÖŃŃ#ŽKOOĢ ')/ŽAsjžžXJn^=É]œ=zō腡mBˆ{€Ö@]!D©;®:Õ)„UJyAqF±EUÕŹi”$>A[X˜ˆöĢ,¹łµ³pį½T“ „N•ćG4§fÕä3Xm)及ĀĢę‹&} †D‰$‘#U»ņ`éW—Lō#óšG†ž® õ«ąČŠp¤L(@vSmbT‰v ń RĪ ^4©®¢(§„*€×|Tv d¬DLh¾x’§TÄ®čGēŖ©(¦xÕśŖ€{²qˆŁää#_^ ‰ ż;›ŒČąÅ“– ‰«@>#sEńlŖį¬¢ØO5œœŖJõˆŠP„|@HyĄź'…!VAm:IÄF˜[¤“¦1'82tžÄ !I) Įe™B!brTČ¢ÉEīS„ųI 7†D†žRŁ/Q½I~(Ŗ’Ų‰ó3C"C×äŲł6$rRøJ<Š\JłšŻ.n)ū{ S§NUŃō܍9²Ńh$„l zŠsĶ"8'„8ü¶æ‚Ęه¶ĖŲ-®’jėnT+"""²Ńr®l[tj§€UĄP“E†k-xØ£s#ó+Z>M·Ź6¤¼ØJNĶ ÅØ\™ó€yŅ®…päavI|ɚåF*¢/R­ƒąœ„į‰fEˆ_ģŖpTFœRśˆUŌ"+®š ɱóŒb0O¤<‹"z;'7ĻC®– …Ų!„¶ctlųœOB–LŽS$}¤”÷‚Hõ½čóēv½AȂ95Bņ›P.ēĮd)ÕēUÄXT2(ŹĄŃQ³CMz!”p›Z'g’m(Ō·b—ƒTEy^ʱ*Źdśü¦ųƒŃ+7˜4P*ŒBÜ*)åäåmłc#g’²hņ‹BČŪ‘H“Bœq"Kd†*RŽ%µ%2AĄĖłE „TžW±æ$„$ģŲČŁ+B…FȤ]‹”|—åäüyīū„P ¬”›œÅĆÖlõ ‰r‡”Ņ_‘Ä"ÄŻ1£g’ėœ‡Ü0‡ŠuŠŃ¹’04§f$5Ü©ŃŃ©D”95¢;5:՛ƒh¹4­+Ūź… ZŖp&ąZɶččŌTĢhźPYčßCźĻ4ń ĻŹ6¤<Š%ttttn ²€ hĪMŸŹ5EG§ĘbAū:·V²-::Ķ!“MÕ¢źøīŌččččÜ8lČ=V›g*ČĪÜcūJµBG§ā9•{¬[™F”ŗS££££sćąČßjS©VččŌlåõ\źNNīŃ\©V”ŗS££££sćp0÷Ų¶R­ŠŃ©Ł8œż{ØSŻq”ŠråZ%ó¦€[%Ū¢£SS9ƒ&Š¢² ŃŃ©`¬¹GŻ©ŃŃŃŃŃ)wN¢ż6T¶!::5 $£‰˜*ŁŠÄįĢXKlUEŠ‹j㬣SE©V+Ų::ÅąX<‹+±UAwjttttn,1ĪN•j…ŽNĶĘń=ŌwjtŖ3µrŗS£££££Sīč;5::•-÷ØuŖ3Ķr±•jE9”;5::::7ŽI”½R­ŠŃ©Łųä“+Õ Š£. Ä*Ł–rAwjttttn,jē/VŖ::5›Zh„“†::U”¾¹ĒĶ•jE9¢;5::::7§&”R­ŠŃ©¹x£å“ÅW¶!::Č=¹ĒM•iDyb¬lttnTʍ×HUÕ;F@=!„KeŪ¤sżRf !Ī©ŖzŹh4žņå—_ž½Ćŗ”©ŃÄs9·¦F3lŲ0³‹‹K!D­Ņ[ėTE‘v»ż¢³³sÜüłóÆ·Ül§Üćß9Ȅ ¼,Ė@ ½"ķ»oØČ1un¤”9Ą!Ä9!Ķ“““M+V¬ø^;ƒu”@°ź:YįˆŹ6@GēCŒ=zˆ¢(ÆI);V¶1:7 ųSQ”w.\ųSŽ3X ü ©ĄqnhʎŪ\J9\Jy¢]eŪ£S©H`°RQ”% .<}Ę|xx˜QŽ=ŗšžānt!Ė¤H)ĆĶfó“łóēWōNżŪĄ›Ą,ą™ ėŗ”;5::¹Œ3¦b¹”²§ć5£0āköÅÓä‰Iџ=5 ‹šCš5DK"vY g£”ņшˆˆŠH¬œ¼< ̬€žohʏ Ŗź»RŹ1č‘:…ÉBĢVUõ݈ˆˆŠLąßō:{Ź«ÓaƆÜŻŻ§£9KF!žf¼L^øÜP„žPS°I;é¶4.Y’H±ų8§J)ŸˆˆˆX\AC׎¢‰a“¢+hœėŽīŌččcƌ銶:^ Š„ŻżŗäÖTwfj8ÕBLz Ū·q1;/w’¬”ņˆ}å<ÜA  p3PŽ}ߊŒ;¶“”ņ €‹Į…÷šø5ÅˬMų„ŠY5UŖdŲ2H¶&q<ż8ĒŅaQµČ!D4pOXXXT ‚6į»4 œT'Ožģž••õ50ĄĶčFæ“ņl…»Ń£<†Š©Ā$ä$°/e»/ķĀ&jā|ž Śney Œ¾+ē¾; Ŗ IDAT+ż ”Sć7n\3UU’|ĀČĄŗƒhėŁVŸ@é@"Ł““‡õ×9vn.]ĀĆĆ’)§!śżĄMåŌg•`ģŲ±·H)×.a ‡_ŗłuǬ/(čä’eĻā÷„­ģJŚ…*U€dEQz-\øšP9õ?ąI`*ZˆĪ53uźTåōéÓ߃Śx¶a`ŻAśē[§ÉÖd¾;ū-ē³Ļ „x5,,ģƒr¢?°Mˆ¦p©ū®tō„4ĶčŃ£Ń”?š„‰FŠĢ=Xwht !ŗŅе!GR ¢ŗ !n]½q6įä™ĻQU B¬GˆéBˆķ%tŃ-œršzŚēhRā¶®©ņč™j:5!DK)% ]U¶):U”ünóÅė&/ģ±ē±,YGĪßG‘9”Zž˜zv2÷½õ)åRŹĮBˆ’1;+š85Č”pss븁–'”£S&ųtóĮ§‹'Ķ°ž>q NöĆG‡‚š \œ_“6Ūļ “„‡KéĶ„&oŪ8ÜG994¹“0.zh„NŁp r„ö]žiĒņÓ/¤’ńj|ĀĆcĖfó=wŻiØx—”ņ3ą9!„ ma,č<€ö™8ƒn¶ŗ2īåz£;5:5)e=O“ge›¢SEØ}W-ÜC\ɚóY‹—ƒ­ą¢WĪŖŸ„”QCÜ’ū®æ”i“-RŹŽÅ¬÷@«‹äŽ&;§ĀæĮBŌMUĪŪä]ŁęčT„QPgpm\›ø’óż*²"– Ęęåó0›0÷éėӓ»)µü’”RŽ+„X_LwµŠś’ ­h§”³ÉīFw„£Sܚ¹RēŽ¬ī&ćĶwP *.[·’AVăĖČGp™<į ¤ōASź{ų,_Ó€YhĻ–¬ėee£ēŌčŌX„^NŠSiMutšźą…{ w2Žż€¬šÅ…öÓgH;É`?qŅ€Żž½”2 ½¼ü†6©šI9ÕĀØj!@+BØWQ×) µn÷ǵ‘3é/O!cśGł ‹Ėŗ_Iyx”Ńvš°3Ŗś½”²E] E«Õ8Ü œ+o{Eńż£S6 njņĒśēnŅžz¾C“‡ŻNVųb2Ž’X (Ć„”c€(.ēeŽŽ&š 5ȔݩŃŃŃŃ)Å$šéī‰eŻrV’\j{™™Eś+oŠ&īOē¾<-aóæ¹?<[!W L€īŠč” —.x“ń óÓϰlÜ\b[™šFڳ/+ņR’Zˆh‘)ƒ­Ą·h·ĖīĄ©Š³\G§lųtóFØv2Žxģ„ēņē|·ė¶Ŗ“ŪߗRn:”Žż•jž;SU!üĢ­–ČIąėJ¶„*ó4‡ö#Š -fš{e„£SpiāŠĮÕDzDŁ„żsNžāƅa¬>}źY4ř¶¹§v£IĒ֘›::׊wgOģ§’!{Åwej/SSɜ3ßų}Óż~ŗxńbWrÕ.cĄ h"::•÷ę®ä¬^z©˜š"Č _¬xö쀖CS\Øe”*85žĄĄ:®Ż©y°ß\«QU7Ń!NĶķh•ĖßįŚœ“­ü=h«Š5£»ƒ›k²5§ä¼R§'¤MbI“\'ėŖ/Fϲ½ļå‰s=gŌÄ$ģŃ1WWÜ^‰ō×§ā4člĒOb؍šō''dJ J½@B§O#rĀcm"å‡öżū­øęõ3^G§Š# —F.d/\ŖŠ±UKŌ¤¤’gļ½ćäŗĖ{’÷iÓūĢö]u[ՖmWÜpƱĮLŅ.įžÉż„]r$7•{I6-”€1ŲĘ6Fʀ ¶Ü›lɲlI[“»³;½Ÿr’ųž™Ł™ŁY’„µężzĶkwē“ļ9{Īł~Ÿļó<ŸŹe°@ź‰aĶĪ"y½Ø'nĀ*•ŠŸ{ņ֟s[ÄkMNN^˜¹¾Qģõ‡å²¶’"įˆ90K&•deĮuUæŠāQØ$*˜åī«å`qö:1+&•ÄĀ׿P¢…4ÆFį±Ēpßtśö—Į40ghgœ†žō3ČĆCØkĒxķu¬L–ņƒC©dątžIר9ęĀĻž1ļ" ™/pš^šD'qõA·h 89Čš Cø†\‹®;ō”Aś®é=čcŹŁyt>²’&!»äĆ.ļYķaų†!Ü#īĆ{ yØ^szķܳ)żųNŌMśŃNŽLłWCˤ¼õ*>Φ‘eœ58Äg?ūYn¾łę÷#$6æE× 9h$EbšśbF]׿ŃĻąõ=«]§ļź^b½Ń’Lo ÕÆ"©2ĘĪ](Ö”y:roŽK/DŽFĄ4QŽ[ †Ał§[ŃĪ<+_ąļyÆńÆ’śÆ?ś‹ŠƒGµA"æbų†!¢,~‡N 1|ĆŽ^ĒASvČh! Y;śD $Emsž>p胃ϱųu?”(^@؜9˜ńä!īśŠū)}’‡Xy‘Syö9Jw݃ ‚ibĪ&LÄż}Ģstސŗ¼܇(2vĢ[öK…÷ō³ģc#Gŗ-‰½#ĘŹß[āQŽtS fÅBr‹ZŹŹHź)'aĪĢbNM£ž°Q¬(ÉH?źĘu|¬§ŸŸ~šĆ|īsŸćĖ_žņŌĶč²2ø—»qö-ž€­…TÜĖŻ}o:zō\Ć=|ōGŠ[”ē’¾u‡æø£kȅ«’ĶM|—1ȶŹeäŽ^Ō ėŠN:Qfoóą‹u£ŪĖfŪjG~{ū‹BzļėˆYÜź1ööWŪūp DØ×W§ē]—"ńų|ūŲiū:|~žDؾ|Ę^vŻ÷ˁßB\·źTÅšk„ŖFµŅņŸŲ×Įo’ż›ˆźĪ»ĶEČeŽŲē”@„Ŗż"$§K—£šJ¢‚¼”Éē£tū˜ū'‘ūūÄ,ŁŌ4ʲ*żŌukџzsr åŻļÓ, ˇ¤By—#‡P lPš,S-éę4 9$›X†EöåNj¾.-ōœČy–ūū@–Éžļ‘‡‘‡‡(ßuņņeHå ęĢ,ŚI'āøģbōÆ€$! Ą\æÕ„ĖQ‰žŌ± eż:Ź÷mÅÜ?‰äń EĀXÓqŒ×_GņłŠŸxeĶ*aģÜy7ņ@?²ßÆ;ō9 ,U£fĀü5ąąQÄąx%Āų B¢ń1Dq·Uöv*Ā;Uż»^źīĻ€æ²‰Ēķ#įJąˆ«OŲėVŻŲ«ķcN{€ Āøa,¶!¤"OBÄÓæ X0°žC5g ŒŒĀ ” tĀø˜@WI„ap³Ż–ė@Ä>ßUĄĖvūvūÆęĒė ŲķüzŻw+F! š ĆŚ›ZÆ}¬ź”]Øīŗ†ķŸNąēcgÜ>‡“}æƒ0JßÜÅ1„Ņp/w“ߝĒ2,|k½Ø³bQITČæšÆĶŚ(^ļoķwI• luu,Ż$óbŁ)ć[ē£4QDĻb>•¾"…}üżTfĖö5Ä=\ƒ.r»r¹¹ˆ Å£ą^įĘu )–nR™­ŪĒ,Ś3JŠ„“°i1+źßąĆ, »<óbK·mt ÜĖÜøœČNĖ#«“ßS 2Ū·,;d¼ĒyŃ"’ FŽ ·+(.’"·+Gō¼ŽK/¢tŪ0÷O֖{÷Õ~7GmeXMĆyåå:’t·$Io^pv—FÖ$$MĘČšØ$I“P\ zęąˆ$UBvČ`Y2±LkńAvŹHŠ$ög,¼æźń-Ż:¢¹fѤ•·ÆY©„•Īˆu·Ķ 8ƾD8åOŽÜ,U£¦Ź¢‚j½¾ü»BŸD ņļ¶? dSˆŲözF‰ō#¼'õn<Ÿ½żĒ@x‚ŖD2­õ!\Ū?Ą ś¶u#ŒÆėĘŹéĢU«ÄĒ™3j>„0hž”ŅRߣ¬CxNž–9£ęFÅ’\·®†x7‹s3Ā y¢0`=ļE5\šĀü‘ż9į9śąĻēmó„AóyąOēĆ&ą„Gė˜2jœ}"Œ%õd ’‰dMĀ2-$Yø’œĮŲwĒ©ĢVŠB=—4ĘÆW’6r™³(z’­€kČ)A€e$(M–č¹$FęłLK£Ę³ĀMōü(åx¹fŌx×xé½Ŗ·Wm–ĶŚ>Ķ²ÉžMRŲS@R„¦¶Eϟ‹CĪķĢačŠWaą=8«ńŽ ¹7©§RÄļŸ‹ qö9xO?ŠGĮ2-,ŻBvČDĪķČHīWf+ä^Éį¾ł·ØüņAĢųā‘,ī?ˆÜ׫0'įÜå(aų†!Œ¼AźÉ‘s£µ{ÓŅ-ŠcEā÷ĻŌ„=®ėł8v°vģ‚(Ńs#Äļ“Łž„÷ņ<+=LŽ5EģQ=,Ób÷ßæFģQüżģ½e_ĆÄA•æ³œĀ¾“wNÕ¾ó®ö:=„sĄY{/X†Eq¼Hā”DĶS=?Jąķy ląß &RϤ™}P ~TæJäœ0ŽÕކœ„ņL…Ģói’O¤£Ī'Ńó¢"ŌĪŽw%QaęW«2j2ŪsDĻ;åųć0v¾ŅŃ6īßdZ†1-)ŹÖĆܼ£ŽČYaŹ3eĀg„pö;1Ė&’,!©ā:ūp‚Ä# ‚§qÄęņq||T+³*‰ Ķ~œ}Nü|µü4#g0óĖYü|x÷’z<…e5’"=7Bę…LĶØQ< ƒļĄωY2‘T¹Öēd_Ź2y—x|ė} a•īnÜ+Äķ샳5£&öŽ(Į-"4Ķ2-,ƒŚžō”Īų÷'j‰’’"Ń]?žn°@Ļ(NémA{ ‡=7“‰ĒR ¾9®\Oń?æ»čśŹņeønü $}E’¤©E78XźFĶ?Ó\0ė6ū»V·Śq1bš’74Ē%fķćœcźš¤}NŹ7™3h@0w'Ņ\įõUD8V½±uPBTŸ?Eö2˜¹ BœļE@"VOÅŽG'FĶ«Ąæ÷“X¶Ķž9ÜĮ~Ŗ\䀒Ió9¼€Óü Ā#?€ż¾%ž$žó2/d0Ė&Š[!ø%@ųĢ0‘·G˜¼c’Ņd‰½_^€¾kzŃB£ß·üüY[ĻJ7¹]y’Ū’5œŖ1Ņ)’, #«3~ׄżb6OR%<+=ō]ÕKģQöŻ:ŠY6km‹œĘ·ĪĒŲ·Ę0 ā_mÅ®ē’œ=f~1CöåzVŹ>č;¢O RŲ[$÷Š˜!ė½¢Ł!3y×¹9,ĆBvŹų7łßōäĶzāĢ0ü”|’ō÷d’ąS 6ĪkÆĘ}óG-ą%IzüĶke—N2ZPĆõN7¹Wrd_Ģ€"įrį]ķaąśöžĒ^¬ŠEa_=«£TQÉ~²T3x*)ቑ4Yļļī§’ŅI?—©y}$UZ0¹YvÉ Ļ©kŲE’»ś©¤*$·„0r’ ZXĆ·ĮĒĄõģ»e”J²Bi²DÖ!¼)¾õ>*‰Jm–»’פ?r3Vjį×o¼ķ¬3dąÓ’$]ń‚o®!¹Wrģ’ŃdĶkčtŃwM/‘³Ā¤ŸMcä &~°I‘š'ī‡ųÖxmÉČĶye§ŒźSŁ’£IŠcÅ7ģŁ ½-ˆ#ź`źŽi²Ū³5”źSé¹¼ßz©gŅGÅĆģƒ 1żļź#õdŠŌSiѶĀÜD\pKüī<ńfD(—i÷|Ä.ŒŃsqŒń’ÅZƒ'š¬p“~>ĆĢ35%MGĢAß5}µ®7›Ā¾égÓ~’w°Ņék¢)Ė—į’Ņ?čØź8bŅø KßØŁŽęū"”«SķŸū˜ Ŗ§š…8_ĀźÅöŁŖ:q5Ųy¢Å²""Ō«¾Mćöw­Ś4]צ1DHÜė“VVŚA“Sø%_±?„×'„aó—ŪėH–ģ āš:ģĻ|Ŗ3 ½ƒFMö„,©§ę:f£`0ūPß:_ĆĢqUĪÓŅ-,Ój+ļYž.³’Gū›³²5 ¢x’Ū’5ƒ¦zģÜ+9ŅĻ„qöŪ·€E­-Ր³JZo˜–2ŽÕrÆęI>žjŲ_iŖĢō=Ó,ūų2±Ī+9QŽ˜ƒŌÓi²/Ķå˜%“Ō“)<+ÜG,‰UOéģæ}šžk—ųī7(žū-”€$”®_‹ė#7XŽ Ī•0Ķļ I’żˆ4¶Ė¢Č.a8×ßg± …”ķrQx½P»o=«=xVzČlĻ’~6ŻrŸŁ—²Lß?Ø01’–e1öŸćMƒĘĀh‘¾«zqÆpSy¦Bö„,Ł—²ØAßz…½…Æ'€’?ZPeśgqŅĻ4¶[Rg¾aˆĄÉfN`ĮSČ™‰ģ'’ZcČgč“Ńó"oųÜK·Ų’ći†>ŠOąė_!÷gžBó@ņøqßüQ\|?Ą—%Iź¼øŌ[ K·˜ŗgŗAž¾8^$õDŠčQ1…\”fšŌ&¤ņFŪ~fņĪɆе7‚³ßI%Q!ó|¦į{=«“x$$l{”Œ¼‘7jF±YāŚ·Ž‹eXLŻ;ŻŠ’˜%“ŌÓińģ®š iVÅĀ{¼³dßoK+ĒĖĢüb†w9!±ųż3"¤üĻ?‹vīŪ)~óŪā>7Å’FīļĆyĶ•øoü a©źø¤(—J’tä\ØGKŻØ9ø'kŽź[z±:+óGS‡3Č8ŒČqYģf­¶)FūŖČD.Ėb ’÷/£Y/ŃĮöó #Œ£NĻᘢ°Æu(•žŅq¾łŁĀ¾Bg¦ėXśÜŒ•$KMƒ³ł¦ÅŠ‚HPm}®•”ŽU±PƒāU¤ÄĻzƒŖžāXńˆ*óĒ‹Œ~k‚Ų¼Ÿž#ܟś}*cP,¢õ÷éRĄÆZ†1 ü‰¤(_9b ķ²(fŃ$·£9~>’jžą)A“F wœ}$qŠy/Š[Į,˜-gĮóÆę’Æ ōEź–ŌćraVÓÄ 7æ+OčōZD£<]ĘŁļÄČM @ęłĢ3j@L܌}{?ż×ōøõߨ<ń4•G~95är”®_‹ć’ uÉļ—9²uÄ{PŽ—[ÖóŖ¤…S•īK·Ś ʬx“°ÖT ¦8V¬yT:E ič)½ex'ˆ0KĻJį Ŗ$*Ø•ņL¹ežMéœßĮ`“wNQŲ[$r֙.8#ŸĒŒĻ¢ų½†+X–9ƒ?“$©«źWĒR7jÕėš €ļX`Ł”FEˆ|z‘õŖĮÅ%–čīDƒó›哿~…š¤XƒĘvw°zT`šŁEÖ{ż÷ū–Ą¬“üXopLdµŁß g rÆäšŸąĒ»Ī‡ž¬ §uōŒų÷—(¼Žł@Ov‹[Ņ‚ĻŹ6ʈ,Āw€šģn»ĀšÕ™Ä#‰žÖŁ’ć)“p‚ųĄ4)O ŸĻ—Ūńk¾<$)ŹĻ$I:2É?]:FĻ- j(Ģ A9aYÅż%¼Ē{éæ¶Āž•“^{Ķ¢IaρŻZŠGĘ,™øŚHQWk_U*„ķąŠ(‡ä=s0”ćeö}m’‰~üė×ćžż“‘¤jŽ‘1#)ʁæ—$éĶģÆJw8Š;|1a‰NI=Ę³ŹĆ²ßĮČ }Le¶Bvg®ķ=Ų Ł%£xU†oj¹¼*2 Ł96ŠG”o] Ū(=9x(H?›&óBmDć)Ē“ƒAV¬XqNJpųN$é'ŻšÖtA5¼ģ~Ä |>D.I³žį#…ĀZBx˜ŖÓo3“SŠ·ŲŌæøĄ>ŽgZ,?n‘ķ[‘B¼7ŪCŲž,Y Ri±”‰Z‡»T˜¼cŖ¦–£śUԀгßY›Õ«ĘhwB5„ĄŖXÅÖlnWŻž9¬™åmf»…śÓ”¢’Øšņ«/³ur+@ā“ÓNė†š-%Ž¢{©žŌ“)T抣ļqކeFĮ ·#Gü3ŠS‰Ł×,øž¬Ķ7•B{OQ:ņu+-Ó"żLšō3ižvēń¼ØŖśŪ_üāæ|¤ŪvČØ Gv)U.Gē-ŻDįõūnŖiAÕÆ UŠend§…ūö8åéֆĒ|dMĘ*›m=ü%;ØĒŖŸ,kgļY4‰),Ć"·;ĒwüøśÕ×o½õÖ/“ͱαfԘ“>ējnĢÉ“6j.F(t} ų߇§i-Ūō„įŅŹ{ō×…· ĄK/Ź%ˆś4ÓóÖ=»ƒćyCŹvaj'µł¾śjhw]߉0ŖZķ÷ ˆŚ>«9p/Š„&¹¼HA?ÕÆ‚“ųŒŁ‘¢•€eŠZóė]ČN™ž‹cųÖūpö;Ūv õ˜¶{?ż\¦mBĆś¶'Fj#pšV-īŁå±ĒÕUļĀBČ.qĻŖYęCμ9K·ˆoßGń(bbĮÆ¢U<ĖŻN `͚²ŁbXXTR:£ß]x=;/Ī,› z©d‡ŒĮ‘7lŖ˜¦I"‘ą­&P/ėæjPČ/·ópIډÕT!=÷27ƒļ “%ČŌ½ó‡2­1Ė&fŁdś¾ĪRs͢ٶ‘]rMq°ĖŅ楤‘–>SĄńˆŚ-1„—@BØ}%ņÉ×"¼ d˜ß†ˆĖ5˜“†~3ų6ĀCō„üs5|,\‡Ø³ ”„š]„ØĄ rq@*ēŅ(ń܎øż¹Ś>^pBz¹św=UčUe·ŌŌ æø†ßG\Ēśš6×#”Ļ^d‰40§,ä^>æüO#Õå„ÉĪfœć@½>fŁ‹¶źKõ2ž¾µ^VžŽŠ–ēe–ĢZ­-Ųz>d~óŖ±’Õ\™ę `ä¦aś®Õ"{5łēłķµėįt9¶±L #g ŌEĆÄQqĻl͘7Lmƽ¹ŠWiś>xrßzń 5ņ„ɹ]9RO¦˜ųį~Œœ{Yē9wFŽDÖ$Ģ¢Łņ£śU|k}µĮ³Y0Q¼­ŸWŁ!°¢b—7†Y ńŽŲ\–VČ.׀lžŸŸrĄ¼A»ąg¦ė IDATß°©jøq=ŽžęwłŹ?XA’µ}-÷UŲ[ź|mśŒV]`%©×&[9;̲ Łµwō¬Ž³ĒŃņ™tDP]§ĖQűövŗ1šæ į͘E “ÓĄūFĄķĢåäRĘ'"ŠO¾Ü¼ĖĆĘ}Ą_"Œ’Gźh"ī6ūļ˜{ } QHó„‘PAČ)’!Õ¼g‘ć™ˆü˜}¼ā:”RŌ ®GlŽvcļDąY{›jøŁˆ5!®cõĄ÷agīąZuökÉ"ēDšŒI–š­ó» *B%:šR,†Y6…¤f;”–nQIUpÆš40žÕž¦š=­#»d›üĶ/|IČFCó±&‰9Æ«¤DŒtąÓńüė}8¢ŽZųYy²Œ‘7šmš7§³ĻŁPÆ Ė±MnwŁ!:=Ōv÷ 7īen*ÉJŪśŽ±ĆÕŖµ/:„*ūģhNkō­m¾Ÿż'ˆ¼=Ür€&ɒų~žČ®ź¹Ņš»ōŅžJ]aÅł„¶é¹$V«_RŠ—Q} Īžęõ=kŽIM—#Fź©4’"1šž~‘5ļßīģu2p]?²S&żLś ½‘¦ZŲźæūŁ Ÿjh£źWk5ÖOTp/w£µ˜¤ņ¬!hÕē¦Ö6;|ŁŃēlŗłŻyBäģpSæ„śUü'ų‘5¹ÖĻäwē‘]2Į-"¹²C&rN»(ž.K„~–D…¬÷oµækWė/i”G®ņoˆĮõŁ@āü«OĪ}Ą2Dׄ·!‡UŽJ£Q°Ķ>ž“-ޱŻ^öP‹e÷" ©×[,ū'„·„žæn.Dx_uŪßKcH—‰0¾„Hö"Œ†'ģs{gݹ‚(Lz³ż³Ź×ĘĖeˆk!#ruGüŒ¹žzމ|>!Ļ\oüż še„a³Ü>‡ą5ū–d>eZģæ}’žėśŸ"|zˆJŖ‚Y² æ˜A¶*BR³ÓŲą…(Žń¬ō0rÓ•™2fŁdźīÅŻóÉm)z.‰1|ć„É2fĮ@ Ŗ8"ŠcņāāD‰Ā޾ >!›Ø` dUF‹iØ>•ĀžÅńĘŠ³āhޤ’ŗ~*q±MāQ$pzkœėśłš0„é2FVYB Øh =«‹āöuy`†Ž+{YöŃŠÅZM gƓņL¹„qŌåŲ#ńpļ*‘³ĆxVøÉļĪ×TTŸČóēĮ²D8×ĮęTYS‚˜e=cŌ<) QŲ+ū{.Ž”TJSe$MĀ=ā&°ŁßŌ®ĀŽ”Sƒō_ŪGnG=/’óƂ“Å£4I3yKRµ”x™rB¼‹Š£E2Ļgm 2šī~RO„(M–±*ā=åZęĘæÉOq¼X›åO?“&°ÉO’5}$MPž© ;d½Āg„–LŽĘ[Ō“)“Jš” CÄ,›"^¢ÖĒd·g™}č”6Rœ(a–MB§…š­÷aä 2/4–hEęÅ,ĮSƒ·ń­óQNŲ÷LD£°ÆŲŽ‘x4IßÕ½,»i„J²‚a‹vØ>Ń'˜e“ŌĒŌÓ:•”Žwµ‡æ³=«SÜW$žóŅϦń­õ>3Lš”`MŁLv)8퉶ɻ§j9™É'RųÖłˆž%xrJ²‚ģ”Ń"FŽ8*ĆųŗtĘR0jrˆ‚õÜ+–<¢’źĒ"ńūgH?—Į·Ö‹£×‰bæ÷+³JSer;s- ėÜ®\“·£ŠžŃÉīČÕ&Ŗ9ƒńļŒŲ@ Š÷xÕūSŲWlŪgƒŃoŒ<9€£ĒźW12:ńgÓdžĻŠ{eoCfngŽŃƏįßčĆs »Ef%Q!³=KęÅLÓ±,Óbü»ćBn=¢”z•š$³eXŒoßzŸč ²&cduRcE2/dŽoMFæ1FąäīŠ[Į(šäŸJ“z"EųĢŠ.,ŚåČŅ͆źrĢrÓM7ĶZ–¾¬’r¶„·éętY‚<6ūhUżlģÖ[o>ŅķYJÜtÓMŸ¶,ė‹-Ąļ­łżƒŚ—¤HhQ Å™EƒņL„­@‡źóy­ņl$UBõ©…Ö3¶ŠGA ©ČN=­Sž)£xÅ Ŗ]ĮĀź~µ°˜T0K„)1›¬T,Ćjšü2Ž˜VC0Ė„ÉRĖŚµmœ2ZH²Ģ£IĢC ŖhA I‘DĪFŖŅV:W’%½Q7§bŠš'EÕ§ŅQ3±š…—?néH’ō‘[n¹åkGŗ=õÜtÓMŸ³,ė³½Ī^>¶źćGŗ9]– ³Āw|”śēµ]õ³…Y žš.]ŗtéŅ„-–aQžź<Äs!ŃK·4NŖĪ¾Ė‹*‚YŗEyŗÜŠŚnöŪ,›ģa2Kę‚įpzJGo3{?Ė“Z*ꇠO—.]ŗŽ5”€.]ŗtéŅ„K—.]ŗ¼Åč5]ŗtéŅ„K—.]ŗtYŅtš.]ŗtéŅ„K—.]ŗ,iŗFM—.]ŗtéŅ„K—.]–4]£¦K—.]ŗtéŅ„K—.Kš®Qsp8€Wi]ļåBąa €(Wö’Ūßßcosü›ŃĄ.]ŗtéŅ„K—.]Žźt%;ć. |`Ž÷° ˜_ĢĄ |šßö! €a{›7»,ś}Ąpć›|Ü·’,97‚ģH>žŖUān¹ŽydM"¹-Õ^&VÕĘ;”<]&õtŗé{Ļ w­X¦ģ”±t«Vķ<³=Ū¶B²źSń­·‹ŗ9eEa²Ņt™ÜĖŁ¶ÅŪŗt9’(Ł!c–Ģ–…j«Čš„āu`’q–]2ŠKi»¼=£× Ö#ÉZDԈAņŹ•d³øxurÕÆ¢ųÄ9YŃօŚūV¦śæ]ģöVǻƋg•›Ņd™ō³Ķļü*¾õ>Ü#. ūŠd_ʶ]ĻæŃkȣѱg~9ŪŌgh ’zŽ^'²SB’$Qæh¦Bī•ÅŃbĖ}IŖ$ TøP¼*²& ŁōT…ĀžŁ91ķūEŅ$buEw›° <[!»=»ą»¬KgtšĪ8H“ų¾ ¬nńż: üš‡ó–]Ž0hFe;`3|“ł–Ä2-*3ez.ėĮu0öŻń–/åŠ!B§Eåꅊņ)ĶŽŽ{5ß`ŌHŖD’µ}xVŠ*ßfŁÄ,›(NI“šŸą'|v˜ż?ÜßTóĀ‚Ÿž‹bHŖ–Ø mV,TƂo½ČŪĆÄ·Ī,Ų”Mų6ųPÜ ©'SGŗ)]3ZDc迃čY}·Ž¶5Śū®éóŹĆĢ/gInK¶Ż_ųō”ÓB{ß×FjĶČ™čłüżāYšGq“Hüē3-ėĒųÖłˆœF‹hMĖ*‰ ³%ȾÜ~ śVdšż8¢,Żāõ’³§ķ’ö­Na“@ģ¢(”§J'šļ-¢Ń{Y–n‘x¤Õe÷ržžŽŽx$YwøĄę€˜x“Dcä $EBń(xVz$żLšéŸÅŪÖxw?ZXĆ2-Ģ‚‰Y2‘T ÷ 7Ķ‚ćE&~°IüŸ½N|ė¼d^Ź6՛j‡$wÖæ‡O1öń¶“¤]:c©5ĖķČ"Āø¦X\£äe`žtBĀ£ņą6"’ŁĖ@\'ĀĆPĘCY¹!­`.“,W·MĀžTģ}µŗsWĖ įŚĢ,p~+€A»ŻqD\®n¹čµW¤j{ŠĄų¼ż…€ćēŸD\߅ߔĒ(éē3xÖxš®ń<%Ų4vō8ŸBĻźLß·Š-*^zł×ņLŽ5µšē½÷Ƨ‡š¬ō­@üēq*³s·•ģ”ńoņ» Jģ»e“6ĆģčuŠsI #c0õÓi { µ»X’%\Ć.z.‰»(Jq¬H9ŽyaĆ#EpsG£kŌG‹$·% "zA”é{›Ÿ1’&?žU £E’·7h@L,džĻ4֜Ļüåż×öį^ī¦4U&·#‹ž3ĄÕ§ąčqą[ėcšƒŒ~m“ar#p¢ŸžK{0rÉĒSč© FĮDRĄŁēÄ·ŽGßÕ½ ±ą üтg„‡÷ōßoéMīgæGԁY4‘]2¾µ^ŅĻeqK—fŃdźžiÆ ēņ^Fæ1Š„×ĶžIŠ{y’*1u÷Ō¢EQ«żĢė’gF®s€ш]Å(LŻ=EžõBĆ$ž£ĒAߕ½N ½@!HßU½h!™Ää˜Y™ŪPń(„ĻÜ$rN„ųÖFƒčhÄӝ¢4Õ\Dw1ņ»óLܶæé{Ł%9+\»“wLŖę“,£ęLą+ƒ£ų š1 žN8 ųpҼõ Ą7?ņöw‹Éśšˆ=ĄoŚėVD ņžNµ’•½Æ ĄŪa^U>kžų+»]ļFÕ§ā<ąß€µ-ĪļGĄĒi4n.žįAŖ§| ų]ū÷뀯×-ÖĆĆv{†€’ \0~ŖĄżĄ'F_—:¦Ē5ą"zN„üī|m†E’%ŃŁ(Ó÷L/~bg¶™e«£P•ųO `M&ļ˜Ä,7nk–LRO¦pÄNōć^ī&æ[ÜöM~$YbzkœĀžBĆv–iQŲ[`ņŽ)†o"p¢Ÿųϲ­»tyó™}8g„‡Ą ~r;²ä_›»UŸBģ‚(fŁdźī©ÅĆ[ģ_ņń$å™ĪgJ=+Üø—»)ģ)0ńƒżXfó {‹ō\#|Fˆ)Ūų’‰Č9Œ‚Į¾Æ6 23/fI<–däĘa¢ēE–„Qs(šoō0}œŽĖ{šoō³F @aOŌ“)1ą=+ĢĢÆfkĖB[‚ø]d¶gÉīČ-°ūo:¹ž~$Ebę³ ĻX•ņt™É»§¹q˜Ą‰žšQćčqąģw’{%Gņ‰ę‰&#o’ł Ī~'ž>f˜9ą¶½0‹&ńfląģļ,<°K{–‚QӋ0\œĄē€ރbžˆüÅöśĖ€Ÿ" †æ^Ņ£äŻA²Ös‹}œ90/Ÿ±—}aż“żw³¹-xÅ^w9šŪöž“—=Ōf›aąN»MlGxIz€«ė’§wŚė÷?“Ūs3°a|„÷v€šØ,ć?Ā[ōy˾x«FĘpāü> üū¼õļĪN·’~Įžü7„PĄüsø‘oóyšĻ’ˆkō‡ö9żj‘s9ęȽš'ż\†Ą‰~‚§)ģ)>3De¶ĀĢ/gßuFa”x¼ĒyqÄbP¢[9ƒāx‘Ü«ł†g-$:Å’iõ“X®†źćö«Ē\¼mZØ9ŽæżļģóŚCe¶Bnw«l")®en¢ēFpö9\ėļźĒ½ĀM9^¦šz£`¢śœƒ.z/ļĮÕj×Põ)8ūœ ¼·I•)ķ/Q+aĶ9ļ––5ēķZ 1Ś]Žr¼Ģ샳DĻŠ0“ŸNćßčĆ»ŚCngŽĢ ĶņWŸAÓš)nÅ##©2FŽĄČ-g‘«łVł25,(O–qÆp£xŒ¼ģńŞŻj؛Ó5jd‡L’u}øGÜ-—ēv嘼cŖv²S¦’"t®U›SO„jZI–č¹$Fa_-ؔĊ!ó|5 6ģ÷އo½ķq¹/ޱQćYåAń(¤žJŁ—rxVzšmš-š/ņVĘŅ-¦~2ĶŠEŚ7Gk‘S÷Lwüž«Žć r¹\C.Ƃ¬JyC$«æœ­õU“&r5‰"Š3:®€ Å­ˆ„÷źć²ˆ UĶCÓ‚Ś¢FoÉ4‹&¹]yń|XąˆhxVzp/s3śĶ±Z¶£ŸŽ+z0ņˆѳ"ČÕląYåaōėcI}]ųŒ²S¦4Q"3š¹L’„Y±Š*ŠG”’œņ0‹?׫xTŸJq¢µŲB—ĪY FM5Ģė®6ĖoGä‰DFĶ„§c¾AāńzĄŽēj„7¦ŹæŠĘ¾;æŪ€~ÄłM1מ]mÖ·˜Ėź„-öĻļ¶Y~?ĀØŁHרiÉĢ3ø—‰0“ʉ`ņ'SĻˆŁ“3īaĖ?¾¬ö’7‹&’&ÕāżK%&~øæ6Š‘bCk/ Ģ īėg*‰2¬tćģw¶erö:‘T©eņó|\N<«=ä^ͳ’öż™×õć[ė%Õ(ĻTš¬ņą^į&żlšéūge‡ĢŠo Ü$ńX²”35²?CĻĪu¼…}Ā6ōA=Ž®wę#łD ĻjżNJÄ.ˆb䌦ūjAģŸw•‡Ą)Aœ½ā”VÅ"»#ĖĢ/fŠTŸčBXörկ֌$Å·p\5ŌEÖŸĘ=ā&óBFäčdu0A Ŗ„Ļį[ē#ø%XLˆ]ŽÜMr[’Ģ‹b0+©b`9WÄųĒK Bī7„Éńūg(Ļ–Eī‹SFvČø†œÄ.Œ‘|,Y ‡:õ²jčY5Ō.÷JKįßxl5 ŒęÄ# "ēDžąŽÉ'R"²Sd!3rć°šŌŪŽ,Ż²Pė|{˜©{¦Āe§¼`$@•ź3 »dŒ‚AeVxL\ƒ „TIŌ¼;r^Šš™!̲Éč7F›”9«9]Į“ƒÄļƒŃó"sb"óŒ²ą)AbFńoņ‘||.1éē2mC=ZQ5Z“°Fņń$éē2"ÜĀ6 1‘³Ćx÷»(VóvHšmü,2 Ŗ.Æ7NŅĻgœ ēŅń­3öäkIœ’"į^ę"vįœĢ“¤J i.{v8żtŗyfĪ9žU=NŹ3•ŚĢnā±ę—øY6ÉlĻ=/‚³×ŁŠqĻ>œh0hŗtĮ‚©»§łš0½—‹łœ‰Ūö<Ŗdgö\ÖCa_‘Ä# Œ‚‰eŠŠ*ļjžM~œ}NFæ9VóvHš$|‹Ģ_ŌžAū™­ĢTг:Ž5“ˆÖ šQE i5‡¬->±ą[ļCOė"o§®=åé2SwOćYéĮ»ĘCr[I”^ÅŃb£G¹,¼CSwM±ü·—ć=ĪÓ0x3ņćߛhxēŌ 4Ϝ÷iAĻU d—,¼¼ÉJM„Ń,›ä^Ķć[ėÅ5ä¢8vlĻb'·‰ÜG«b‘xųĄ =I$ŠóS÷L ƀ}ŸČš„÷x±‹¢ō^ÖCq¬XóŲHŖ„•]|‚n~?Sž©PŲ[Ą³ŹCģĀ(©§Óč)[]²ÅtN”•0×¶Cq+8br;s-K ä_ĖcM=bBĀu x&[z™2/dˆ]Å9ąR ū©7h®!W-4ŗÉmÉĆrÜc„`ŌøŠ^JMõvF ¢³˜šĆįYź4Šu Āc2€P<Ūko›@äדjZS•yžämHPWźŅ„$‹\Ė“0ņ&¾u^’%;Ž7Ė&égӔćz1r¼ĢäSŒÜ4Œ÷8O-W„öߒł×“X\ž*3}Ļ4±KzčW_­–n!»Ä¬]ęÅ fٳK‹LŌiAń*i73›Ū™ćµyĖ6œTƂeZ"̧E}j§øgļŽ¦Ųz×°‹“Žvkżkńx<Ń[n¹åDī܏$Iź,ö°Ė!Į2¬¹š0kqļå|Ŗ”9Ó?‹“~¦Y¹kö”Yś®īĆ·Ö‹o½ÆÖ&É ūµöŬćX¦EüžśÆécäĘarÆęѓ£H8zxW{©$+(neŃ·Æģ’Q}ŠHŅnŃ˰˜}8QĖ«Pż*’&µé׳›¤»Éāx鰄uśÖł©I!ūrßZ/ž¾ÖFƒxż^W}õ«_ K’ō–tėNˆŠ§D-¬:-ČģCŸjvGŽŅž’š~Ļūš‹Ģ‹·Lō‚(¾u¾9 t“Īz’ź:u÷ßä]Sō_ŪGš” ĮSÄPĆ,™"7E²åUCŚä¤UQżv³Ą¤Öžß[;¾b‡xbZ-=$ Būęē±®Ślåx™ŌSĶļI•š®ö:-„āS™śÉÜü½Ņļē“Ÿ?@4ž³[n¹åąvI’nŚY—%aŌ’Å2­‡V^„·c !ó\A īē+„­ēŠŽŖ,ó$Āøū,"ķ*D’|ž;ĄćWG‰Ē³°Õ܊VȚ\ó,U©¾s5Õś)Ł—“Ńó»ó˜%ß:ńŸĻŌ HÕ§:#Œgæt’euõ’aYü©nZ+’K’¤{KcŽŃs#TFæ1ĘąūŸ&’z”mŃĖłtRo¬°WģĖQW7ÉŅ­EūØļgź¼x9ƒ±oćqćv”ś”Ś÷„Éł× 6‹’½Y^¤ŃŖ}Lū{°žyÆŽćį³Ā„Ļ ·ßļüšźĆ$Ą¦§õ¶’ƒŌ“)®ėĒæĮGś©å™ Ń DhœaĮäD€±¬I&+oqłĢ“½NłSŻ|PU¤ß’$iēįińŅd)5cƒ¦‡FŁę*B\ ü‘ æiż]dž/°ēŚqø<cĄ9ˆš®VY­ž7p š3„LõnZ4 TŽ^i³¬Õ9TCÕ"“6jVŪmøųE›ż³ø‡]„OQŽ—I<’Ą2,RO§ž$|fˆŁB“ˆ†źW)M–LʬÅ,Ū$ŻVMŖžŻŽjg£·PY2rʂ5%ÆŅQ\|UķH:ÄŅ-ƾ½p¤äü¤Õ#wµ‡ž«ū˜ČüĖm³<ø³ˆ>gš©C!•Ÿåó\s’÷™šv˲®“$éč/ņ³„ ž"4Ģ²Ē IDAT~³/eI>‘¬Xō\£ē’“w.R÷ɦ“œšąFc•M¤ Š¤H ŹŃ*ö38ßČ*Œ)|I–jy õ¢žMö€o1©wū;˜ńS„¦„›möŪ? z&o-¢įtbį³›Ÿ–a”x¼«=dwäš®ń»²‰>›ćŃŻ%āY·&±nĄ!_³Łs֚^ķnưžS–ł-I’–tܚ¤Jō]Õ+„ī¶eʧ¾qˆ¾wY“pŗ0rʂ5ĒĢŖG±®OѳzĖā°MĒpŚį‡ó k { m½‚Šwa/m7ՐĻÅē˜}(±`X—„óN¹WrxV ±ƒč„=Ča0Ć÷Ļ‘ū’JŖ,)ļXļā/ ńJOX–uy×k3ĒR0jnB(–żm‹åļ°>o’|˜9Ćek‹õ’˜¹:/RD(°Iz;ž„ĀŪ ĢÉ-×s}ĢŖŠY‚ęDŌ¢©ēDŽM+"sł3óĀ8ü-–_åŪÖö ŽQd§LX–ÅŌŻÓµ—īĢÆfń¬ō>ӞI[$ÜæŃOųŒPSrā|T;¤:Ą©ÖÅ©*0µĆ1ĘÕÄM€eĮ*[ģūśhŪ퓐-Ž/>&0ķüŁ„@‹"pĪ'}Wõ’|Lä ™E”ŒVš*µ|¢ƈŸ–:(æšfįčuŠsuO–łōfČ·˜YKź|īī$½Vā^¾IśgD§.‡GĢAō<[Ą–¶M?›Ę{¼ß:łŻ! ¾²Cfšż”&JMŃė©ĪčZuc J²‚£GÄī/d€+¶!¤§Ä3ėpāZę&æ+Gy¦"BW[Õü€V97õT½°Ź3źžUÆBęłLm —ŻžmH’>T½4–aįi„ÄflžM~,Ż¢ļŚ>­Ä’øc–D®q@śĢ¾2ßŪ–U®Ūāå/ }Ą°¬eY×,eiō¼Ž˜ØzeŹ3efN=7BĻűE‹6Ė.…ĮėČķ²…\ŚP¦ØWōŖĢVj’ĘķīCI–pÄ4‘3cߋ‘s"¢_ūĮDĖś6UŖB‹xnčcŚ0xżHˆ¼/ūŒ¼Ń6ĒĖ{œW„P›ź°Q+9ĮīVųÄ7ćlo¾&ŗiqߋ­¤žóbž5½ź–em–$iߛŻä£‘„`Ōü¢ĘŹē3ĘĖ4"äb„„ń=ļ³O"jæ|xaDŠEa µŚ‰÷ś1š8"æēļ84u[¾…0žQ„óED®LøQ ó6„ „Ēäl„Įö}ūūBÅģ75yZ%õļ@\ÆŪõkŹyē_ Į?µ÷ń B4Įœˆ0ø^ī>ēś–¢ē’j@%ńH¢į„iU,¦īf迃ō^ŁĖč×Fœ ®ÖŠń¬ņ“5j·‚{ąY6)ψ]Յļvįčq“®p,Aš¤@CĒbL}b0Ön6Ö‚ør»O^,ŁĒv/sµģœ\żN! jĻ8•¦Źųփk°upą?‘s"Œ=Ū™ĀeY ²„‡šč…1&³’ż¶ÖM=[_*0T¤ß»0ųq˲¾.IŅÆ[ƎQ$ŞĮV%¦ļh ›¾wš‘ »(Jq¬ø`.–Y1E£E<žUE“ś}'JxóāYéiZ¢xœżĪZM˜ '2Kę‚’Ēžen,ŻZ4ń^ωĮ¤lß„GĻ";$2Ļgjy ©Æ ^?€‘707q  $„°`ßWG[ēKH°üĖqÆpćvńÄė%žą{qŒö‘‚ÜödŽTŽ”?÷®Č•ˆņ ’x`'qtąYé!xJŹl…ŁÓō’Ū’x׈Æüī<™ķķÕøōŒŽ‘3p 9k²ā­šŪĀU±;ļń^B[‚m~’ ~d‡L¶® ÕI7× «­Qćˆ:p ‹>`”ŠI€JZĒ,šø—¹[N/Ė×°«BWš.c™īWĖgSń*ō_ŪGvG®c¹ZDĀ"¢o„ŖxŽ3¬ń™ļĶ“4hźIäMžč{3Ź÷nī xŅćæcž„`Ōd†Ėß!jĻ\W·,Ø=ó©ŗļ&†ĄēŠ^7Ö-›AМ_e1ž˜¹bŸWŪßż#‡ĘØI Œ™æ®DŌÜ©’D„Ö}ŗī»/" “2W DhŽ_ė”xʼöżBEķ{¹…0jLūøŸCxe.ÆŪ¦ˆsūo4Öō9ęńoōį[ē£4Un)ĆX-’|2EčŌ ±‹cµä?÷r7ż×ōQÜ_bāūĀNĶķŹSITž@õŠdßJZIŒn-¢““DæN4$&'MŅ’Ī>Æ łDŠŅ„Hä•Q—&pb×°čTźFé2ō ÄD±±§Ó”&˘eIįž5¢R{e¶ŅQ5óü«¢f@äœ Qš,aä $MĀ5ä"|V³h֊‘f_Ī9+LßU½Ģ>œ 8^±ŪšŒsŠI蓐ØĻÓa¼8¹gI“Ÿ&æ;„[T’•.6× ē€ϰ‹ĻŻ>K®ŌŁž¾³-Ē{ßę3śüʧļ¢.‡Č¹=2/dD §:ōŒĪĢ3ō\ÖCļ=Œw.æĶæÉāUȾd×ä°Dī†oč¹”–4oĀs=? ĢÉ»‚}Ÿ&rv˜ņTIŌ“ØCq+µš"™ēž£Ā>”<ڤ°·Š4.É”3B8zÅł-g‡ųxVyp/wSŲÓ8Hs »pD4²vŪœAyŖ,bųŸM7߽܍{¹›ōsÕł¹¾jŃÅNpøQ*…½…ö ą–øĪ”Sƒüł‰¶M=[_*pŽŚ‚uń÷_X–õI:šü¾‹£xĽƒS÷“(`?rć0±‹cĀx·Õ‘£śUƾ3^›dJ>ž$z~”į†H?—”yAšż–e}J’¤c¾žĮR0j@ä¾¼—¹Ü/Ā@iē71pÆ®ļAxfZݽ¶? ±8q½śģżV{Æ-Ö˜öóU­7Æļ²÷Ūk·7Ž0ŚęSF(ŸBZ>„a“˜‚Ś‹Ąiö9ōĻ[–Bx·>‰š…ķļŽ”ĢõQ҈]Ć2,ŃŁ“I¢Ÿ}pļ*ž b&-ūRVÄĪ»ddĒÜķaߟ ēҼĒ{ńßüā3K&³'HüŗńåŸŪ™cś¾8‘sĀDĻm]h ՛éŸ6:&ÓϤQ½ ”ÓBD/ˆ¶la_±ugڳl²’Ē“ō]ÕKģĀęż1ć[õŌčiżwLŅ{YOM†·=k0yēä$©§ÓxV{jƒL€½’±Æ6cx0xWy(–-~¹³HŠ-3TŲ5„ćsI$ó&=~…Ša”)QŸLéē3x×zķPйü¶ą)œ}NJ„Ś hę³8ū„NM‘¢E4$E،Õ'źW’' bŁGGØ$*b`d‰|GTxŽŹ3压ųĪ<4‹kÄÅąõ”će dZØgŸ³b‘xtīż`†w÷3ņ‘aq-ģ°Q- āģwb͆Aźb”ćbb$xJ÷°=«SŲW\pókÓ“#ūr’)Aīy!O¼Exk;¾łėŒtéFw‘“z{Ēō^փāUH>–lšœŌS™­0ū(>Ū{e/cßʆS‰ņu£äć)$B§kļĒ,‘×ß:Ó *céć’5Aļåķū§ņt™éŸÅ”ĆĢ¢ÉÄ÷÷Ósi ’&-?¬=£³’Ē“{JfšEń*ų×ūš®ń46ß“H>‘j7¾/Ž$KN Ųh\ß°H<’ЁR+’­€g„›žėÄ0*łxŠ™_,>Trö:黦Æķņr¼Œ#깎ņزĦ!É“A¾lQ([ųŻ2`Zkz5ņe‹ķće~śbß{GPB”äøµķŽ–ŠQSŤµXĄ”Z1tDb’įĀŚ¼6Æ;Eūś=ķŠ’ĒŽ™ĒGUŻż’}ī%3™lHĀ¢PĮQAPTUėR·Ö¶*؏}ŚžZŪ§ėó<]čb«ķÓŚjKP«V±­ue±ā «ˆŠ"ūšB–I&™ķŽ{~œ™d’LB$ä¼_Æūšdī¹ēž{“¹s>绵H”ŅI™³Ūpšł œˆCģPū&biIŹ—ćĪs7­bFF){¶¼M`g–|ŠČöCq CųP‹!ĒóŁŃo† pzį=ajÖ¶MO›Jå’Ć ŗbŽ"/®€‰²•53Ⓢ°ź-ö?v€¬ |#}øsŻJČHµ/鮓ĪU2ø±ŽČĮ(ٳŌg7K}Žd\Ұ½‘ĘjA£õāG՛Մ÷„ ŒąJÄÆ —G}–w…;g„I;c’ćČ9'›Œ!øó“UŹųą†ŗ&×UP–żO ū¬l2мx <Ŗ}£Mpcąś`ó$UBxOøć óØCٳåäNĪŝėĀ=ĄŻ”kBM¾Ć»ĆM¤ö°lLÖīŠ22ßń!²2 ÖīŠµ$Ÿ(ņ°õ`œĮŁ&‡zج·Ł[mńĮõĒŹŹ0. ‰Ć-ØŻ¤vCšˆÖźŚõA¢‰ļ!Ć£ŅżW¼|aŠ6ĻĖŚµµ×ń ņąŹqax d\b‡ķÕXueĻ$¾Ÿyš²W:Q‡Ųįöæ+¢Qö?~WŽ w¶ÓÆ µŚQ«Ö"Z™>¦²=¤%9ōņ!ŖŽØĀ[ąÅōH N£śĪjż¼w¢j±Ķ0ń N“w®Ū‡Z^ƶ){¶¼c«‹„ņēŹń ņąĪvaųĶ#ŗ†Źøģ° “ŒK¬z WŽ‹”· aG„Eńļī‹ržč *ėmb¶¤0ŪdĖĮ8£ŗšø–Åøņ ?/½×HcLZ~ݹ»xrÓ×DFÓćÄkāžš[uV‹b;l·q iŃ¾ŽźRī$Ņ’DöGŗä®*[Rø‹Ēt8G9ét”8Šr’éOøų¼ŚwU×hzvĀ£bH® ˜øMAĄ+p‚'V×óés2łøB-ģM=ÅKA¶Ie}æGķ3L:öĄé7hQ£Ńh4G ¼/Bį¹9œZąę‘·ėńŗQKā11[²ū°…ć€.’œS'›]ĻŻCdo ‘p#@.š*uū’¢26j4šN`ÕYŲqɄ!žZāŖ3ż4DŽŪ#fIņ2M<¦`[Eœ3†y(žąćĆ Ź20ŻĄG=} MGÄŖćÄB6ÓOĶąŽ—ŪĘ”=¹¦9īlł‡Źņshķ\>ż| 1D+NŌX{3½Æ\·F£Ńō2Ā»‰7ŚÜ5M»FńA±DÜO$.‰Ł’Ø%©8ø|9\’½§Ųæo“'O.Eeq܉²Ų¼‚J7?°.E£ésH[ŽÕČ§ĪšKžßŲĄņĆTŌŁŌ4:쬌³ÆĘbWE#/njdŁę0åA›kĪņƒŠ?}±‡/A£é ŌsÕ~†ęvĪŽ;j2’ø÷F~÷ąƒ{…ļłˆ“Ÿ>!jJfs[Élžm³ódOM£Ńœü8qIķŹ.ļć¦óŚf’iĶ€LƒŸ_?ĄŹÉĖŪŗvķŚK€1(KĶē2TśōĄ¹ĒsÜĶÉBķźZ r\Ü9=]6E¼±Š­}ŠŽ ŒĢwqūŌ,[B”Ą”j4GEķŚZœ°Ć/o@¦·ćZ8ųįm2fĢhžėß(^ Ģé'}āH8 É0$ÆµŲąõž›¦ļ"„lˆ; ųÓōoź6ÕQ÷~=ߚĖW/ĖĮēN’„söpß9Ų”e6ø qµ"ŽJŃž{ą)`"Ŗpī0ą-T‘Ż~‡ć86Ø„Ķ‘ˆVD©]S˜‹²ųü“m<ŁEų‹&°ķńϳéņÅż£š®×„ė6ĒiˆéļM'p¢•’:Ș|‹ę bĀOŚvƒ²Līæq€¼~R&Į`p«ć8Tų—Q%Oś-})¦fėŌeĢO·ćķŁœUo°%ĒęT!šO]ŹZ bõLĘc2Ō¶ &[§.„ą­+$ādeT„ ά©KXĻ<Ě5ŒĒfØ+ĘĘóŽ Ż“0+fąņy8K ņÉĮ É¶+_mŖ]Ć꛹ŌÖ3ɐdڵń8ļ^śĄŖb&`W£ĆĒE®)Ę ņāWi*&²¶˜į\,cĄźYœ* FJ‡8ļ'Æeķ•Ębx7aOœqŽÉ‡É}šŽ‘R– !†…ģ>U“MӃT.­Än°łĀ9\}¦o‰°µ"N8®Rn^4Öėœ5ÜkXŽÜj®BlKÓM šTķØyØT³W’>qWŅó!4Ś H$¢K„č5ż‘Ŗ·«^ƒ{fę0ml‹JėygOŒxĀ txž‹/žō§üüŽ%lŪŗEÜ|ӍQ±_Ž<Ńć5 £LJIČ !„Dż?®é˜HY”ņ§PpM ębÓŽ(kwG© 9ų=‚3†y䓱Ņeˆ0š„;vl6”ęó¢¾Wf»{ģ"z¾$jŚÅ”¼žk³ (’×_¹‚»Jm^ĪFņ‘adĀŖŁ|ķ¢„üÅķpƒ4ųZXĀ”8½d6«D)^$y¼1§®œÉåÓ^cuė󭾜Ēd„!$‡äڬžÅ“ —³mål&ƒ,EŠ %ū ĮhƹźJ.»čöųGŌa0 ÉĒį°KՏłbņ<)ąŸræ+-åoŽär$›x‘œQRĢ×§.c¾e1ĒÜjŲ9ū¤ą.Š¢¦3!vē—‡µg‚¦“HUT5ōa=9ēå2ėTƒ&å&wŁŽdš˜Ė !:*’#QŁŠź€ß „ĶŌR” Ą‘uń:rÜ9==MoGĀį凉ģ 3ńā|ŗe –-©Ydł\¶Ļ#LGJ+öĶo¾ś•Æ|e¶”Ņœ¼Ģ~œ°U,Ēqv!°¤Å”Ų! ¼}*³“¦‡ˆŠQ¶p?Y³(+™3%Ū…Ėväv—!žB$Ā·§£ŠĀ*ZßļĢą}IԌ*™ÅM©o(›²œU‰_ߚ²Œo «Šł,0Źć0ę¼×T*Ē’Y|ZĄ_$<’P)ŁNŸ˜öõ+g1Ā=ī¹h()ęQÓąVh+j¤Éē¬Ÿ²Œ[’ļ•óØ#øøĻü xś¢„|@ĪĆ(-į9aqš_Bņ޾\.øy1vÉ,.GšŌ³7ńå›cƽ’BĖāB[ņŁ’R®’óRÆ„“˜«%<.ēńHi Č7LμšUŅÆ+!^‘R~fx? V™®~mµÕtXUœm/mć;ž€Ēćaäȑw~ļ{ß[ä2Dē*%6ó0ų&šp'pŅՓøŻī ńx<xv„vpnž/ŅtŽŠĒ „¶6°Å慆!ņóó#—^zéÆ@l1„xõĖ_žr *Gҵ3øf7ŠśvŗīVFUŗgĻžj`ĄÖśµØŃtiKź6ÕńŌ‹O±«a'@ąß>ųą,·i¤*Æ&0˜ 齚ś}"¦&ĮDßMݤąĘäNCY6’ģ±RšVRxŖy P:›<›¦½ lӖS ŃBĄl—’“‰ź$ _=“ikƤ`ź2ŒūM&HXóöLƼ=“1+W2 Į»HNKö!Oß¼`.oÖšz¦ŲŸŽNŒk"‚õaČOö'a»n-ƒćyC š®cYÖĖ@Ō‘„U„==M£äš*¤”D£Ń†}ūö=+D—M’ļ¢\ĻĘCÓ3ä¤gžüłA)åļßėįŃhśŽć°ā½×Y²d O=õŌbÓ4(„xJQ“hņŸØĢgēņ€Ÿ£²ž(:Žcœ7ož%„|`]õ:¢N× ^jś/e‘2v7ī ””įY!D{–—ߢÄ:؅ó¾4·ļVśŅ…æ4uēµŚ¾Ń“× ©Üø?’%\ĻŪ@ˆŁ6¹R=욐é8tjR’“ĆB²ZüʲŲPRLcI1ėWĪā¼D“l!ł±išlrCr °Æé|)ćMˆ›g¤Ķ ‰±Ż(dSÕńl$—“čK= 7XLuét®¼½¦?žx•”ņOjÖs(ڹ*åMY¤Œwkß@Jł›?žń”#Ņ60U š+ĄĒ>¾ā/ĀūŁRæ„§‡£éCl¬}‡ź˜ņ“vē/išŌßBĄ­Ą™(ėĶ”ŚnąIą2Žļ\čē@ÖAóĄŸ€u(kĶŌ0Ä^I_5FHjE« ›oĀx„ūŲĶεANsÜ<4eS¦.c(õäĖ ō PĮÜTę‰ńICłĪ§E<ąśUÅ .“<ü=q-5Ąó­_ĢÉoN, 9:<Ͻ@•%-ļ{–u,sSM .^Ēā}‹‘H¤”å†aüŖŗŻ‡*Ź)€_wC}‚… ž(x„üejb5G8B£Šh’n/,Z“čķvš.„¦„?›Ļ§÷£Üf¦^Ėźb&9šfxg’ ėnęϟU3$^ÆeŃī…TD*zzXš^ʁš~ī^@ČŖˆ†qƂ ŗĖ?’ĻØŹēŃŅåĄ÷€QĄ—€U(W“Æo£ÄĻ’$öw @ą;BˆUK+–²āŠ y“ު𓙨eń¾g›\r…-X°ąŁNžźžFčŸé$OJQó"‚.›]%żWRĢ"ųŗ˜×9³Žplž –³æ“˜Ņ’Yl’’EņK!ł>pMi1å%Ŭ/)f‡€™tø¢+į))˜#šÕ6S§š*’U‰kyæd6ļ8šo$ßLøŌiŽ‘… ¾üʃ,Ųż(K.”.^×ÓCÓōjćµ¼\ž2ļyVĢ ×ćĮsŃ2ŅZČy%k.cI“°ļ0¦Š 9cÕJ†&…¦žĀi|œTk‹nÕs89ž$ėÆĘSč«a_kĮR2›6 w) ¶_ų*u§¦óĢ;÷ąYP „fR˜QD–+€)śR²@ͱbK‹ŗx=å>'ŃŌ IDAT‘r*"SwRŽøhŃ¢6™»7*y(Ź7:]›“’¹sē^ <*AĖ@ļ@&fOdtęr<9dš:;aBJIƒŻ@0d{h? 6^›Ü}øqįĀ…Ē£öĢ9Ą€Pb'É!TqƗ€eØX.q÷Żwū-ĖzTJłŁä{^ÓĖß²Ż9xōÅ5'/v˜Śx {÷¦Zļ,`ŽĀ… N×Ó2ß|e…|øūFŚ7č¢F£9QĢ™3'ų®āĄ×ÓćŃō*BBˆ_gddüß1&8?CÅ×ü ųĮq)µū ZŌh4iøćŽ;²¤”³+P…¬ oĻŽJs‚‰eBˆ]Žć¼āńx–ĶŸ?æńœ÷Ą‡‰mĀ 8_ÆcΜ9³„sQŸæÜž¦Ē©^]øpaI!•)ķźÄ–śBÕ“{-±½C'VŲļŗė®O8Žs-p–”rØ¢@J©]śTāBˆĒq^X“hŃĮ#tĪE¹ -£’Äf6”EF£Ńō>¶cQ‚zwĻ„ēøūī»ŻŽćŒµm»HJ™ßÓćќXLÓ¬ˆĒćĆįšŽÅ‹÷¦ą7p!*Öęr”'UŒģCYpVoя?ÚĪ@Ō"ĄGØų0F£Ńhz”?”Vzoééh4š#’‰8÷ėQnD2e+C¹ŻM?µ¾jN>Ō’ÜĪžˆF£Ńh4 ‚<%*®F£Ńō- Q £ÜHe«m*)Ę ‚h4Ż…õ?¶·§¢Ńh4 ĄtŌÓæzz ę˜ŒŠĆIZrlZŠœƒØ˜”ļ“8IĖmhNƒQ’Sļõō@zS£Ńh4½\ U+攋F£é^—$¶3h)d*QŁÕŽLlļӅģj'‚Ķ7į©n¤Ežõi“ vG-ĄT^¹Æ/ŒūŅ7­Ÿ„;\H Yœ¼7Q2›¶M®ŪMģ‚ (K½ė'į&’yÆL=FĪĆX¹Ž³šČŌRĀėg’ćĖ#J=nż$Ü«KxҌ³ŹČ% fšn]ׄąŃŌ{kDØ+)&ZRĢʕ³¹“ƒ!%‹nmJč>5FÓ;‰”ü£µE]£9¹©G„‚žJ“ BÕǹ(E'¼EÆ DĪ€y⇠ĄĪ©ĖS—!¦,Ć0lŠ|ųöŖŁÜŚŻ'³ J„`Öé°ŗ„C‡K¤ĶŽ„ Ćį÷vy¼äM]ʀ©ĖČ×!łöźbf„;¦d ¾Ųž)%§xb\|į«ģO×NH~¼æµ&.+į_†ä…Õ—SŠĪ.H¼®=–ėź«č|čFÓ;‰¢%p4M’ %Z^IüīGÕ¹%n¦”j8]‘ŲßŗNΆ9X’S¼TZĢļ€Ū'V3ɁYS—q_²ķźOr¦ķpĶEĖųŁŹY\) ņ…C6É ¹ĮkS–ņ„hUėĒ-ɔ’+Å<^eiĮįN))]\šoŖÖ\Īi–‹; É A$k],ŗņU¢%Å<,%ćŒ+)ęĻ6_“ŒK¦ą#›;q8—„]N]Źöv.ż įpūy/ŅTĆlŹŽ(-ęe†·n¼ś ²›Ä£Q.›ś*ä|å«DQ &ę•scp#š‡¶®FŻ·7;ÓļɆ¶Ōh4Mļ$)dtŃW¦Ó¬DYnfPń?FYn2h™Rz*óŚõ(W¶Š#ųÉRp (—Ŗ$Ņa¤\ ē É|)˜ŽĮkŽEņĖ’b¾Ōŗ_) ܰņ²¤C‰§Jƒ– Ée¶ÉPāĮ6YiHbRņ”īÓgsm~ $;C@X vUō2‹§|N V ÉR`’5ėg00ݵ Ų%—®˜ŃŅH0e7N]ʂŌ÷ÖĻ` có:’ƵW]ŚIA“†÷‰iޟŒDYiveß}m©Ńh4šŽIņłÜ›Šj4šž'Œ _ĢCÕə‚63QV/&6eÅY <8ރ3m*ƒÜN ŁyŃr>›üuÕlj„äNąķ"¢\ D¦NåsÉ ü3xÖė!ør&#„)$ ¦,ēÉcJŠ ß˜²œ_–s»” ¾h÷ƒ1ų”iS˜“ö•³1ęfštėq8_Oz=ÜSRĢnģAņŚ”‹x&%a€7ęęM`Ūž\n¾yńŃ?×Į!†¤ŁõĶÄė_¶ļ¾Ž5FÓ;)@¹•4©”F£é×4ŠģzŹķi0ų$Źmķ"ą7ØUüēŪĒĒc0ŽĄD ÆĪ!x7õWCņ”LćŗÕāÉPąćŌ,c ĖGS|ŃŖb–­šĶ½B2š"™Œh?ƒXĢE±\ܵjvʉ[ „;ę¢%¬N+¹Œ”ø)”HĄižÆ“„3€’I4 x@Ā’ ÆćRš’V]FH Giõö$ą ZZˆśZŌh4MļßŲtUhFÓUö”&¶ P“ü)ĄMĄ Ą…‰ķ>TaŠĒĒ į~Õ “|épøŻ‘šžD¶Š`IKŲAø„Š;LĖŖY e±ų9’wD1X-%sŚķS` °„l“2śAG°¦Mūy„%܅๩K9@ŠlÕlö É<šE S–óHélź¤äŸ„³¹sŹRžķčŪCĄ@d‹æ— eÕĄ½ōć…0-j4šōˆ;ļ¼s²”ņZ)åŁRŹaBˆ@OJsĀ©ʤ”„¦i¾šč£~p‚Ī›¬MSv‚Χ9 øõÖ[3Żn÷0Ū¶õ³ŖŸįv»+‚Įą”ŋ·N*b£āqVßĪGŸܜŽ7?Cśż=šĘ±ŽÅ‘\`³ś…ˆd¤īom…0¶Õń#Ttt!)G“µę”4m&;‚éüķ¢„ü¶iß,ni“K2E^¹Ż“,Ü99,š°ø99ĖŖb¾& »ĶęᬚͽŅa?ĶI0$Žl}0e)Ļ–S/%Ļ–ĢbŠŌåm‚ż;dÅ \fJŃ,–€”ž®ļó»ŅßɆ5M+ęĪ{-šsĒqNO¾'„ĪŖŪ9Wń)Ēqī;wn©”ņ»‹-zū8ŸsFāµä8ŸGÓĒ™3gĪdąsĄµBˆŃRJ CēźoŲ¶M pęĪ»ZJłšŲ¢E‹Z[_T|ĶjTśč)Ą­ĄgQ"ēTįƟ§•% ™%³ø)ł‹€L “Ü* > ąøŁ$,ʗĢā$o Įp)ų&jĮ(Éł„³ųŽ#xE8 EšS”b€ŚE V 8­“˜’^s $7"i<:ŪKWqP>½ź“Lv,ŖÜ§8šß@¼©ØʗĢd¶48pž+|PR̶ŗZ^9›… ‹Ķxó$LO7CņO)ų}É,ī—‚mBb#+į‡Ą3鎙²ŒWWĪęJ^,™Åą©ĖÓ§•–‚q©÷Œą: ‹6ݟkQ×Õ|>õśś#ZŌh4 īøćŽ,)å_Q~©dš™ŒĪM¶;Æ©“Põ7Āv˜ŚX-»w±#S„oĶ™3ēaĒóµłóēÆ/KÆż2-§ęČÜyēcǹų4ŗ–‘FaS…SĢ™3ē7ē¾łóē·ēŽTšŲ¾|ųĄ™(A± ųšVŚ”ļ#ø;łž¤`·\6e‰Z¹čö”óY!ųšÜ|Œä‘\œrܳĘxx%SĮūB°É&G4õL¼h‡VĻä išu × 7’$\!ęᬘĮŸ½† ‡‡Mæ ū ø_ ®Jž7c‰×ĆÓÜ+T±ćY.øĘ|ߐüIž’9Ӗ%,O­Ø1łjŽĆ’’« EąŹ$Ü‹)«‰!9,%-¦-åķŅŁ\&į%³øiźrKX…£,T¼/aFźżE –u.·N]Fµųõ·ÄßżKōӂ›©č”FĢ™3§P±œDšÄ¢Œ".|)£2G·tžÕōKéšqżŽ<ü&UŃdRް,ėSO<ńDC7ŸĪņĶłØšMwÜqĒRʧI¤ėĶre1>{<£ü£Évg“af”ĶɄDŠ‡Ø×²-“ķõۈ˦õ–w€ė.\øÆ]%ėœĢĪAé”?’EW’»ĄŖb¾/`ŲŌeüēńč’$ꓡ³@J”žŗg‡Ó;г5MægΜ9Bˆ×Q«šLx1Óņ§i—3Mli³ōą6ÖnL¾õÜĀ… oęČn]įnŌDā9hįz Ń0gΜ›„O¦×šrÉ œ›w.¦č©¢ņšŽFČŖēĶŹ·Ų|)%RŹrĒq.|üńĒ÷v² ĢžČC¹Į^MiŽ»’™œć˜¦-åx»ōžL|ųŹŪjŖ^‘-j4ęĪū[ą€+ Æäܼs{xDšŽĪŠCÆSRÕīrĻĀ… ģĘī7”\@f ŻĻ4)Ü~ūķ“ Ćx šē¹óøyųgčM[P£įƒŗx¹ģ%,il“,kz-ĖC€Quo^G„‰v:Ó×Ć#Ņō%x0ič$Ī9ēfĻžżE)夔“„”Gū\½üx”ūFŖ9B|`tęčT+”FsD.<·pų].×GŃE2'æūF„9ØŗAŸAYg>ÜźĮqõjtJgMæeļŽ½ē¢ŒĖ×Ć£Ńō%¼…^ņ§ēņ„‘’ ʵcš€“ķCRŹ_B“.„×w_Ee:ūŚq²¦sŪm· •Rž pnޤžަ‘“›Ć-Ÿŗo”—Aƒ}ėŃG=5Y~^±ńHĒ·%^ß=~£Ō$JĻ|*fšą@°ĒÕ'Š¢FÓo‘RžŹ•Ø(£Ø§‡£é#䞗Cž%°VŠų«łÄWÆĮ©ØDdfbŽ?ļ5Ÿä¹|ĘŲĪg¤”× !:¬Œ \<ŒŖAšT:g¦ Ć0.„@0&sLOGÓGnAžÅČ>+‹‘b±ķ;•UŁV8öi×ø±ŸĘćł”“¬%˜ę—„»Ūéę&TŹąĶīÅ| ų Ķ5ŹĀĄ€Ÿ­‹ØjŚ”/ŠšO ‚iĒ^T&Ž*T`ķ œ|‚SQ«øK€7zv('RŹB!~ÓÆkŃh:EöŁŁä_šOōŸ/ŠšĖ Ž\{SF£8%kˆ—¬īó'ų当…ßæDJ9UŃ^‡ėQµ2·äų_…¦Æ!„ķĪĘcxzz8š>€é3)ŗq0ž|7‘Ēž ņōbdMmÓnįõā™=’Wæ4“ģ¬w¤”ÅBˆõ)]Ą×_¢2åž?šŻŠ4ĒŽ \в‚] d'Ž/ž‚r=;Ü3Cė»ō5Qó?ĄOP’ ”’u£ŠŌZEųoN®"D¹Ąw]hQÓŻdø wOCÓpēŗxŁ¢//”įŽ_vŲ6¾võ÷|ŪĢž’ū3ßkÕăz–}5aų°ą8 [sr0Ąoś{zš¾€€‚«įɒŌń«Xļ½ß¦‰ŒF‰¾š2ńŅ5®¬?<mŒńŠ”ņ,!D9j1õQ`:Ź‚<xźD^ĀIJ0•ūSØ@Qą_ĄcØÅy»GFwŠ—œ ¤ŻJ-˜ H¼f7£,6æBåT?YHŗ®čĄ0¦ɽ0j ńWæķT{kÓūDž¶ŲĄ‘_—R&l“É)ŽC-V4· ŠÜi4ķį’Łö4šɚ…o¤ŸŠ~œVФāT¦žkß2‰Ęģܹóץ}ØŌĮÓQ©œ/B š£e0J¼üåMT<ŽJ,ī ė€¢Ķ1ї,5W'^’‹¶©ģ¢Ąb`Źń ą7“揔Vƍę# Aą” b’z !ņr”1 †G‚Ė„6é`‚ŒÅ±wķ&ņģ?pö&ļć ’ / \gŽB¹œmė©ėŅh4'¹“²ˆÆŻ@ü­Ujļ¬`ėæ3Ϲ÷'·$Ž ”ÓļCĶÆ4G& ˜LNlē#[µŁ¼–²i÷²n¦/‰š‚ÄėÖڼ ģD¹¤„āFMnNAżóÕ V!žžMi{ŖJėĄ Ģ„ƒPyŚæ‚ŹžnU5yÜ÷iö‹æå‡z>ŹŖʁeØl5‰vƒ€WE؇ÉQ¹É’üØ„„Øq%Ęv-p*Č,ˆŗ7Kō#Óߢ”…ėóĄé(ShŲ—ø†_õ(W™7Q«Ė_L9Ž@MĢ2P÷0Õ'§U‰ų%`źž‹Z•ž>ŖpT.*ź]T0ÜöNŒ¹W LAÖÄ,ģEƎĘŪz ½x ¼4īlÄŖ·NŠO^²&p¢ Ū;¾ļ݉™ebųŻXUņļ³qŖŖpŹŹ>樑ÄV–ąšx:ęŠ!Ä×mĄ{õ•D’õ—N›&ß^½ś§)Ż­CMžqĀ.@£Ńō \Y.<ƒ3hųÓRÜÓ¦b½æ#?ē`ęųqČĆUąõą>ļ\dC#ń•%¬ŁĄ9ēœCMMĶź>śč6ōbK:08 ‡Z —ų}xb*;µĄŪĄrō==īō%Q“Lp°„6%(ŃҚg€O£Tņ{Ø|߅(³ź5Ø ŽßO“-B©ķ%ØIžf”ŁpšJø¤5w¢ "­Iü~-ŖHRõO]ŠŠį—8×Ķ(5_‡]“€”‰qķJ³#Ń×(”øHņ *åßGĄæQbiŹ\\Œņ‡żŸvīQ*?Jl5‰ūR ä >Ø?Bښ ÄP n¾L³yōtŌ= ”L§©¢fzāšę'~?%Ńv*ĮĆŖD?g·£¬kQ›^p $¼/|DQ“yj&yęRž÷ƒĒ$j\C½DF‰{—82<žŃ>b5qb‡:›Åųčȟ‘O¼:~bEM† €SDų}ąvaŠSVŽ÷š«hųłÆY*“Ļ>PŽõĮ‡˜§Ø,UćG–•µµ•[¶lł JȜ,VdMĄ•åbšƒļ‹PSZÓaŪÜÉ9ųGū©\~˜xM¼Ć¶š#3äę"Āū#Ō”t|ß»w®ZÓµ¶Ŗ5BsÄpŒœldØ×Ä Ų»÷ ™ƆboŪA|ĆF¼×]MōŸ/ ”5Ą9‰1¦ņTšķĄC)ļ$ś_ŌŖ}jnņ”•ę9TŖÅTü(6—#‹šd‚Qb£õ=ü=Ź2uʵoJąœ lH“¹0ńŗø%V’³‹Æ©®‚žÄ±sŌYłOQŪP_M¼E^ ®)ąŠ’Jāļ׳€ˆ™iRpMµėƒT:łžćvDéx#7ćāiXļ}€9v ʐ""}ļõ×`­WZÅ5ńt*ąĻų½- xRńżvO Ń'„KąéƎ8GlėĪ÷ąéĆš[ģŽo”ģ3³©]SK“¢wĶoŻÜ ˜6€Š‡!¶7×słFśp¢G¾ļ݉HĪźā1\OWfH!Öŗw9ŁČśĀ—2/—ĶNʍ“åe;wīl@Ś, ŁK¦+ÄP ±AŌ\Ŗ%vźQsxāwmŌÜ!¹RU‹ņ6 £¼G:C&jŽįGĶE|(’|Mžœ×ĪÖźP‹É'¶-(ø5åz4=H_5£DĄļP‚ •F”uć]ąZf ›•xż- ØŠĒP–—I(Ē$?¢„ x5!恖¢ęz”y:ńū©(ėŹÆh+h@ ™Ÿ DBŖØł7mMkŠP·7ŅģkD¹É=Bē”>ä!½(|%j¦Ó,jž%ō’¢f ź¾?*x°:±o:Jt¶6·ž‚–‚TÖ§ļ£LøMÆĆŖ³pćøĪ9›šCBĘbX›ŽGøŻČxkėv„ĒƒµcńÕk!CF£Ɔ" p£‹Öiśī\7q™ŌŠ»_LæI`\¦[}Ęį¹óX”ÄLa!Āė!<®sĻĘˆ>’"ī ĻĒ9X¬ŖĘž¼`@ˆ_ !Ltg ¼@ņŪŁ¢HóPnżÄkVŹq½8ʽæµ}5w)O¼@ųnj¦Ņ—D Ø Ļ”\–Ę &ųĆƧ” ×}•LąÄ1…(1ć$ŽiMŅĘ>°Õūé|_GAŗemIrźŸż„”s‚ś“W)-œęœÅ %ٟ8ö‹ØßG‰÷Ŗū;맟\™(ėą< ¬P \ū¢(±’,Ą5%bÖ”\ɒæē”\Éžš¦ßtט|PŅģ;)8s v£Mݦ:rĪĶ!chĀT“ēȁ(u›ź¶ZA0-÷®€rŹ9;’h•Śµī įżrĻĻÅ“ļ¦źĶjr&å1ċ0ž*#ēœl2†ūØ\R‰k»jXpMуQj×6k[3Ó$ūŒ,¼C2pL¤%±mĀū"Ōæ_ßŌOöYŁje×£\‰3OńćŹR•†ķ „>L,^ œ–‰l&®l†)°#±CQź>Ø'^ŻŅÕÅšdŸox¦ßĉ9D+b×wd”=ŽHmøź Ā~b1pœ&k €ŒØE™R»&ćꥑQ ńņ ³Fs0}&`7tO’&Óo"\«īŲ\j…[`śŌ³Ź‰:MĻĻ£īĻĀ;ā ­Žū3<F†qŅ>gO±Ć1ģ†8žéŃpæŖna½Ó¼¦[žzÓĻń ›~ö̼„“\0uPóŒ£ hŠ,t²Qž&”%ÅC¢¬J š­)ŠyėI*IkO h Ł"d”ęq”pIŻ“…å$¢Æ‰P’¬IÅÖL@M¾†²@„P«G ­ ¤{*ŁØųœ{ēŚLslĪS4›N“Ę_$¶c9gkBØxšß”\ņ’4¢b†Ö?§żø£$ÉBOķ&DQfßä&Œ,ÓPŸ\”ąĆ؇Å(Qóź~“ĶRēŠÖJÓ/É<ŏ“%ٳA¬JM„ż§dĄ?ŚGłßUaoaEަģž|O“ßtĆVå>‘1ÄKęŲL2†fąĪsc7ŲM“o”—ĄøL/O’½—Ij¦XW¶‹a·Åō›ÄŖbŲ!a ¼E^2OĶ$ū¬l<±'.ńä»ńō5Ķ•åR“Ō—+ Æ+ sl&NĢĮ Z8Qwž ’h9“s8ų|‰Ų$Ćc0ōóCš ō`-bÕ1%rĪČ"0>įź™B©µ«kČ:}žļ|ƒ†žōˆķ]gAĘgnp0ÄBˆ“Ļ'OÓ/óŃ4lo qG#yÓąĪQÓiIĀ{ĆT¾v+ć7ā®įøóšóōŻPŲōsłså4ī 3ōóC0}&ÕoW“?#W¶‹xŠbļü½ŻPˆ“Ÿ’·³Ķ8LæÉØÆŒ¤nS•ĖšŸeŁgd‘3)Ļ@OS˜¶“%‘}ŖŽŖnr+ü“z%Éæxł ź*j×)/oĻ@¦Ą?҇p7?kb•1‚ėØŪT×b\žŃ~\œ‡w°·¹mUŒĆÆ÷ŠG^BżGä\sį…OąźDāTÓÄ÷smiY› ·ū½nM(±ģĘ>5švéK¢ęVT Öoi?m3ŹR1•P 5݊”‚Ž;āH" ÉÓ(QsCā|הЁ¦ Œäń>”KY{Ōu°Æ#Ce `‰²XŠJ@p9š‰#ōŸc{’µ’’*zV—$Ī3&Ń&én¶ø2ńóō”öšvpē¹ n¬£źõ*¤£V ÆAŃõ…ųĒųńö=£ü¹r@%(¼®€Ź¦>]L'ę°÷‘}Ēä›sn¦ĻäĄÓeDö§ø3 ¤Ÿ{^žS2 m qųõ*æ^…;Ļ͈»†|·ŽŖ-æĢćdŽĶ¤žżz*—n±‚ź-š2ä³E ¼,Ÿ½ Q“…ÓaO IDATsn6žjJjØ^Õę&\‚‚« ČŪ3ćA‹ĆÆW3菣‹ŃšĖß@,ż}v_0™Ģūj#Ä&ŚŗĖj4} ßž1~ź7‡ˆWĒ.¤zÆčśBö-ŚÆ¬™[B˜~O¾‡Œa4ījlZ\±źš-;®W+ qĆö†£¶ŅĘōÉADÅØ.©Įn°1Ü÷@YŸ0ä3E왿'āŽĘn°13]dŽõ);¤¦ŃJµćŹr1ō–!SŚ"^cįÄ\Ł.2OĶdPń@„)¾£PĘ/…׹D‚‚Äkć—AF‘—¢O¶;īćMķźZ²N÷ųå½Ō’ēW›¬Čķį’Ę’Ć3Ś@ˆ{NŠ5šćB_5Ÿf£DÅŽŚ%M‰Ée“Tv±¤/j”‡š w6-™•ģŌdåT&å)m’3±“ŒÓIåģ.œ3•1ØųŸ7Q™66¶Ś’ Tŗčó;874'Čjg%|R…Ń Tzęé(”9V å7,±'Źr¤iiIŖßŖn4€śrÜXGʰ ÜłJŌt…Ź%ĒžµČēĘŖ·Z  uļÖaøvøó®'™§ų‘Ž¤ź­ź6.!ъ(”Č># W¶ «ĪĀ7ʇsØ)méj&-IõŪÕ=&jź6Õ!\‚×| ×ēżėÓÄK׹TBdfbŽ? ļµWIĻe3„“µĘuBˆp X£éLŪEŽŚµµ\S@`\&žbU1ŖWŖÆ¾ģ³³É–Aš:w¶u† ¦“¦©żŃ’5!€Ż`sąÉmÜĆāU1ņgäć–AĆöF‚ÕWYʰ 2ĒśiŲÖ@ķš–Ļ˜œI9å?ŲfÜ5%5Œøs8¹“sšDMīä\„”=SN¬²å³ząełäLŹ9¦ė;Zģ°MÅ ‡)ŗqY ¦į?ĮŽŃÖś%ņrÉüö7¤§ųrü·ā>X¦éK¢f#JŌ\Iū² Tš½¤9&ę=TĮ»óQļÖĢEe>ūŠæw‰r5ū*ū× ”«[źLr3ŹÕź‚ľÖä”Ņŗ>J2ŠĪBYin”„u(IŅ.¤§éG‰×ó'ŅģOf6Ū•ņŽ”åfŹjöŹ Ķ÷ö2”čJ×§&…x0žÖ÷:)̌®g ŠV{¦!;daŽń‘5!@xo+d5U=Š×Ä[ø~t3Ė…²±Ó !«V}tLæ‰Ugį ø°‚V ±—$Vė\¦ćHpCČž¦ēā’Ö= ZŗĆIŪ>„÷ —ł°BēÅÕōybU±¶‹@ć®Fć2qēŗŌg³“HG¶Y“8Œ +d„w©ß"z(ÖģŪ 2†f`Õ[i…˜uhÜ&ėō@S쌷ŠK“2ŚFŠŌ½_ßc¢ ¼/LŁ3å|j9O/"¾zńµėp*cä䱚x:īĖ.±ńxāĄW…ōŲ`5šn¢/‰šG€Æ”j“œŽ²T 2wå”ź Ü*šų/šėŚ< üUdó{؉yŹBq>*­q5鳉µĒÓ(Qóź>Żj%J ĶEā’•9ƃrū>ŹuėhŠļmD ¦£į¶$ĪēC¹Üż7*n%]ĢQ* ÄׯĄn”åg?*étąžÄyžK9&ŠŠYŗ$Ńīє}ŪP9ŁæžøNķzvŽxŚõé– ķŗ ž1~_9XuėHģz«Ž"V'“%Dxwēf†+ŪÅ)ßn/g†ĀHųƛ>³ż‰ˆlNÆÜ“D+¢”?W™iņ’ż"Ł9ٌ=śOÓ§O_ Lsƒ¢‡„—FÓ}Ųõé?sIĖkWćܜš±ņDFČ97‡‚«)‹Ƴ°ź-ģzµˆŽÓ5#©é3–$0.3żžÄB“™aāDõ¬jGĢõ†BĖ‘²({PÉeĘMÄwįd„‘X,³ķ=˜ębą!D{ ƒ4š>E_5;Pq1óQ郿š¦ƒJ?œZõ~š9Ōü™4ĒT'öw%ażG(qqŹneš6w'ĘņZfJ5õü3Jhu•ŻØTĖæ^H³?ŠŠłéČE/9†Ļ”`ŗb¢!Ō}ü°Õū+€™‰ŸS-_WsUJ»“—Ä÷±0üežœ¬÷“…”³Äkćģ}dŸJ:ėĀ•åĀ•­¶ĄøL²ĻČ¢ā… Bwī##LŻ`·ˆI^5 ¶l[—¹U½»ĮfćG‘HV¬X±ņā‹/^ßÓcŅhŗ){ēĆ«ze †× óŌL§·Lži7ŚŌoQõfU§Ÿ½F†éS5·:BøĀ·Ą‰„ļüD×§iiIj×)_sßn€@ €išWżę7æy„§Ē¦Ńt7}IŌ€²¦ŒC¹`M”¬µ(«Ķ:š-4©<,EÅzœŠŠ©EYOޤ„ ł;Źś±‹Ž¹Ufé™ē;%~£\µ*Q“’T×T€g³ę?ŒhÓQIü‰¾woÓœŽłH¼‡ŗÓP‰²iĪ¢ö6-‹‘&YD³k_ė˜ļ£’Äh›*śW“/āźQ×ßÖ鷗āÄŌJ£+p䏐+‘©¬+q('Šd¦²T¼ƒ=8q•Ł(ÜJ›~“‘_AÖĬN‹;ź€)Śd J"\įČÄ䡎Ųķ’.į9¶Ā€M¢) ‰ēȋ¦O}¶ŗĆŠŅķ¤¾u8ōJ%P‰é7ÕL–‰+ĒMęX?¹“s°‚ń¦xš#"!r Bł?:NÖåDź>µg„źĻ)ĒqØ««Cѵ`M¦Š×D (ń.]/f–%¶Žų¶Ö‰t¤ ŅOĒ{‰­#Ā(«NWØ!½„¦«X(±ųF'Ū—ŃžX;ś»”tŠg“ƒ>{-‘²(¾įd ĖHėoą øš ĻĄ‰:iż®»DŅ:ŌECE²ž„+ŪÕFXe ń¶i_p]!vČāĄSm=ģF;bcśŪŠ! Ejč$ńŖŽ‚f?ōÖ ˜6€ÜÉ9ģģŃCQ¬ …“Óo¶‰ĆÉ(l;^FÓ>vƒtd‹TĖķįÉ÷=ē:%”x“Y*LÖæJ%÷‚\b‡c4īhTϦF›h…ŚW·©ŽŃ÷Œ"cøÆÓ¢Ęn“īōĻ)€Œ!xy}‰8ŲaWfśga²®˜F£9qō¾„¦P³ŗ$]_Hīy9xņŻŖ›[ąÉw8=Ą[Š0<5kjyõ3)H2Ēf¶+*ґ̠–Is ų†eyėśÆŖ¾Lʐ ²&fµXm¦ ēœl\WS Ō¦±%ćoøÆ©†N’Š–„!(øj0žü–ū|#|dM `…¬¦$”­ TŅŌėō ō0pfŪńj4šö‘–$¼'Œ;×MöYŁķ¶Ė># wž›šžH»“śNŸ3ń¬3Ü][±źT^Œ¢¶‹ńmk3ēNĪ!ļ‚Ü“} C „h³ŌŃŲ¢£xņŻø²ÓÆ÷˜–ĒĄ™łMåb•Q¼Ž“‚+óŌōq9ęųŃ-5MÆ ¼;LŎxy>ł—Ŗ­5Ņ’TÆŖi“:ōhˆŒƉć?ÅĻØÆŒTŠåŹvŠj&iŲŚ@xwß(#īs”Ė—!n¬#ūĢ–Y½«ßŖĘ[ąešƒąŠAȸıœ&W5+hQSŅŅ3щ:4īlÄ?Ęψ’@d„O—Ńø«‘ŚuAr'ēąćGZiIåb&Ą‰K½t°ie6“9„“ŸĄøL§e*w40‘²č1W×hśUoT“1$ƒAÅ ŒĻ¤qw;dø²]d ńāķlj9Tżūh‹Ē7“üŒęMĶĆšŲ‡xMüˆ™ČĀ{Ā*š’źj׉UĒ0½¾Ń~²Ņˆššž0ń ®Lćne­‘–Ä•ķRNØ méʖ}f6v££ 4ŲDŹ"ß­#kBCoBš ±Ćq¤#13 ücüųFśm 5e­ n¬Ć?ŚOŃM…Ō® bć^“Œ!^rĪė¹ĢgME‹ę}¢a[žQ~<ƒ=˜~!ĄŽ(w³šžpŚXšš5µķf?‹×Ę©z«šČ–附-ْħeāŹucś Āū”Ū[ż‡!"eéÓ9KGRö\y¢ §WĄÄŽ84īj$²?B¼&ŽĀŻ$v8ƾGöāćĒ3ČÓd-±ĆŃņ(į=8ń¶c?ų|™§fāÉwcfšÄ«›³W½QEżūuųFłqēø.v°ź,¶74¹Č%Ē[ńBu#}ų†g`śMœ˜T…ś¶6ųD&½4nY£é•ÄĒŲ’Äņ/€’?¾¾ū„-iŲŚ@ÕŪÕ->·GKxo˜Š–PSqLPu^Ŗ j¶7R½²†¼ sxyó"QżZšžGzØk½¹ TŽ“ éy“—śÖŲ$ļ”āH’ Fˆ7H5©)R;§^@opKõļb¢XufĒ͹ n÷ūŌ+“¼¶6Ąé×Ę÷_H<—÷;· M!€)sa”üm²źćłŽłŽńÆUMfo¦bIÖ”ķÕ_CQY”æ@ǽ([į­÷ŽøYįPč-TMŻĖ~Ü*7`Ņ;Óģūį~œŌ˜ŁS æź¢ēŃ^¼aŹgQL˜m:ļķ«zZZ’Ę~6 ąš1ŗפ¦jŲ÷Ćż£ŖŠ™&“X> o)żĄĶ8ó,•ōmčg`SoŲ‹°F­ŻK½š"õj oă'ģ ܬkśŠUHĖKldš…!|>,æ…Ī»äzņč‚&żZŗź„Gž5B!Ä B;zZEK ‰źéžnŽ­Ų@øĢI9£faŠÉÉ«@źBå1*Ļ"¹y3‹<nÖ%—­žœB¢8į±¤3“<ÖńŠ«Fˆ‰ B!„BĢjŌ;Q` 5i…B!„8‚$Ø92~ÓšrlsIü¦1h?¦!ēŁĄĀŅö/Ć1 !„Bń¦$AĶŌ¼üE…Ē|@ [sņą ĄšWĄgƒ˜÷=ėšoĮĆć×B!„⨑BSēNĮ#cż3+3օ„ļŸóŲ4ūĀ~ŖƒB!„³Ņl jź€ó1ėSĄ¤u½tWŁ>€ .1}€»ē€±„JĪ’˜™ŒÓ€³€^`?–”¶kęp°rh/½ĘY˜4³Ą  X\Ś®~Äs^ŅĄĄšź˜qDJĒW.zß[:¾Ž*Ē*ķ+Ų„ń¼X:–²r sF…c8ˆI‹+³13:-˜@®Ų‚yŸ…B!„8ī̶ ę&ą/1AÄHEąfLzW¹†¢žų"P;fūš ą[#~÷°ō¬.żī!  ųĆŪ}“ōšÕҘ›€Ą¤›żš¹ĻłÅˆŸ/6mĄ’Wļ·JĻ«3Žš}ąĻ0Yyūæ>ĒlŸžvÄń} ų½Ŗōš’€o–~~7š=`ž˜ż9ĄĄ'Jū>į—‰­Œ’ļĪÓõ@µxb+¢O ’|9Uµ÷ @tYd\óøj:īķīłPV»ø–š9uųēų±üØRéÖŽé)/ ¢+4ĢōŌyˆ\&pROŠ4ÅŌŽ¦8X$³/Cā¹Ä”J° !ŽOvŠĘņZ8gT—±,æ…°q īø2Ģ£öWk÷ƒ™L!Q€ mZ,ÆĀ7}] T¹7?įųʼ1ÓÜWŁ„sÕ@AĪQB`v5ž3kš˜‘,fŃż'0)^ū8|žiLŠń$šßĄ.L p š§„ķö·xĖ€Aąė˜Ł‘]˜Ŗe0ś_īī-m’\•±Ž ģŽƒYWóĢ,„1Vņ1Lö,šĻ˜”<°Øt,ģž„“ż‡0ĮÓ#ŽĢ,Ģ—JĒ÷šą‡„ŸO¾ üøÆ“ŸgKßĻ~VŚĻg€W0Įß<Ģ{’AĢĢҧ«Œ’„’Ś™"²,BŻ9uddŖŠÓ?×Oģ’NŹaš…źĶ6</ž9~ņ=łŖMšŖ©æ4Fle ķjryŠ9”m.>üM> jāąķčMōüsżĢ[݌UcQč/ėŹįę5J™Ē¢Ė£ŌSGūķä{ßx—ń£­f^ õ—ĘŲ” ½Kbo!-5Ģy×ņŻyüč`Åó‹²ó~ž&æźš°‰nĆqBgNķĢīļīÕ°ŅŚ4¼£ą’ZT…œ™½ŗ×÷P辉\&zqOhüeK¾'Oļć}¤wĻŽæ{e+”W”óZšs qͦ ęc˜‹üė0i_eĻ`.Ņwc.¼ĖAĶg1³,W#Ū’? <ˆ .>Āč ĘĮ6ĻyķĒ0)Y_)=öƒIĘŚVś: ŌÜ ¼<És>†™¹–Ń©fOæĀ¤Į}ĆAMy†ēFL`RĻŪ0ilæ֗»Ōł’Ὄ?ž»1³K¼Ær[LC׿],XÓBĆåq2{2£­)[Ńtm#ŹRt=Š]±õHŖtć³ćžN żS | >b+bEŻyh\s:å1ć"radŌlQÓµ(ÆāŠ]¤_1:=HÓõM4¼£ö;{üxc×Z&¼ āD“|9Eķö$ug‡ˆ­ŒŅ·a|&qtE“äŽää?„`$ń\bŌM’JF>®lż÷7ć‹ūČģϐ~-MqČAyvЦ¦ŁOpIł˜Ēž[ądĢ”oÜ ōo짘(āę]”­š7×PwvˆęęŅž³Cdöf* åøRwvˆĘ«éø»“ŌĪŌLGˆ7ŁŌ\€¹PÆtu•nĪ,żŪ_śł6F4e˜µ,gŒłżvĘ_Š 6f¦äY*ƝIcŽedZŲē1éu¶/§ē5Lc oĮĢ\U:~¤‡Yk³wū}Ó*&Šō<ŅKÓµ4^ŻĄ”Ÿ^škįkš‘x.1µYŪ\(Lw–&tFō=ŁW±Ū¶.jzÖ÷<-HŻ”į Ę÷ākš‘z5U1 s1\’"tF;hO˜’2–7źN-q2ÅĮ‰;k{Āģ€v“éBž’ZV….jtQcł-¼NÖ5£Źk^Oy-¬šĆi-Ó}O…x³éy¤‡Ą‚¢GI½š&×yxI©ÆŃGlE”āP‘īõ=“īKŁę{߆~Üüäébeug…šÅ} mŖš²[IŒXkŒČ…įįąĖŲD—G)ō8š£ƒć^shG’Äę-žOż[ė9ø÷ą”Ē$„xs™-ASł¾ģK#~.W÷:ųv•ķ#Œ_›S}ŃĆŃĘc×Ūü٘w`f^>† 4˜" ~ąœŅ6Ó©°V_znµ÷kiéūŌņNCŪ†žZKpIŗsėŚ:„ŽŸčņłŽ<½OōMi?噚é^€ūēš^®NNĘ!ߕĒ?Ē?œ‡ī ›?żJi#å{ņ Ą?Ē?„”®čE¢Ė£ŲµöØß‡ŠōmčghŪč4½č²‘‹¢xB£·Ļuåč}¼oųø,ŸÅÉ|Ņpš_čģŹR ¾0ˆ7ī#ŠrxZĆq®ˆŠõ`wÅŌ@!N$nĪ„ėžn潿™¦k‡ÓŠ”5fFy kZŹic“ĶҌU»Ų,mķŗśĒģĄ³ ¢+¢Ō.55óĢy+õjŖjUč/Ž™&tÖ4nĄ(, ąoō™*®ĘI»ddČwå+oßRƒ®«ĘF\ŠI‡ĢŽŃ³ō–Ļ"tfˆÜ”…Į”%Aa>Šm…/ę%|^˜ęęrąGÉw¾ĄØ;§ķh†¶%)ōęÉväšÅ}äfńƼO ’Ž¾(ł\!Nd™ż6%ˆ^NC‹.ąŸćŸśŒ2˜ō3ĶšZ;h›s•R8'éT\'ākšįęŻ ÓkĶćE|õ^sKNƒ0żÅäÄüås ÆŽG&5ń±ŲA›y«›ń5ś*>>“uˆ®‡ŗ‡‹xź<4æw.¾¦ńŪkWÓß6@’ĘŅĢR­MćŖŅ»ŅŌĢ«ž5īךŠé!¼õŽįēFĪ’|čŌńĶ– ¦|†Ŗ›`›“0e_Ą,`*¢}žč ėˆ™Źń•Ė2oĘߥ,ęæ„ń)k‹˜~PSŽ.žęóNxNĘ”ėĮnšo˜ĖüĶĆŲō=Ł7*ÅcR„ fž磼Š|Oā`ķjM×5”=­e0³ŹŹ«hø2Nfw†”­C8YscÅö:=Häü0¾ø—ö’=¼Öņ(ŠÆć\•=˜ÅĶ»ŌbpĖąØTƲšf’š k’ŁgåQO­%ŪžĢå:stŻ×ĶIŸYDķāZ†v$ń„lS€ä„$ĻNq2·ī{hłš|‚K‚£‚šB_Cæč5k•ļ1ē.’s^+ §wóK1”ŁŌ€)«ü>`¦"ŲHqĢ Ć6LO—¦ź×õ˜@aģEx3¦ Ųęi¼~yAĮœ ·zż6`‚²„˜²Õ#ĶÅT2+’¾\žf •} ō}ģŁ}¢cx³.é*ąį1y0żĪfüŚÄ.‰į‰xHļNS{r-MW7rč®ŽÉŸX2šl‚äKIRÆ„+^`ä{ ō>ŽĖÜ÷Ģ%tڈO,Ļä³(Ćif#ˆŽĒūŠŚ¤@ĢygÓøē¤w§é{rˆ†w4LzŃSĪ /NĖ>ź§”’į‰xŸ®ø½.źqż0ŹwTµ'×:3Č7>ümĀį:,Ėž[nYūq„øøE)%ÓEāųćhSśÅfTŁ”•nLtÜÕY±„r[?Ķļ›K`a€Ś“¤÷dĢ'‘šŚšĮįŌŲŅģµ›sé{¢†+XšŃŅ»ŅęLĪÅņ*üsüN Pč)˜ō05qPćyQ¶"ב­ųø“qčkėĒ)„»yc&É쫜ŅVTʦč¦÷fŽ«rĶŹ£hii!³dɒÓo¾łęß(„Ž—|!ŽˆŁŌ|ÓņQL•Ż˜>5M„ßĒ1}[ʾZŚn¦ÆĢīŅļ›0żcjšĘėļĒĢØ|³fg¦LóĶÆē`*ų&&ØŁ€÷LJŲ\Ģń…GŒ7yŽ Ü<… Xš0%”O.m7öjqOi»cŽÆ}˜~:·ßÅøӋēELZ\=¦|ō¹„ןŽ”š–bGÉuåéø«“Ę«Ø;§ŽČłaĻOķ3#{°ņģH¹Ņ:ψO·ąā Lžgl—ÖĘø#pjWÓūX/żū©™_ƒ'äAŁPrČwē) Ø;ĒdDN6Tžq'YŪSV^«:#D茼µ'Źwk'ž‡Ę뛨]PCē@‘»-ŗ_Īņ[‘³šŻ·½e’ķZėÆh­?¦”ŗ{¦Ē+D™²M×7 Żėzhø2Μw6qąĒ•ū×TršĒWӎ&±)A`a€ĄĀRPS ž,ļä7`Ź72FŽHI…¹`’ & (Ą4—¬&¼³–åzLµ±‡1Aō3¾|t¶ōūJWzżžqŲ\ü&ø)$L©éĻ?±ż`½ėß1ʧ1ĶO_$!U:†Æļ*ĆÆ1AM;f¶ė&Ģū6rŸ»1ļć?V8Žšå·˜óĪ&“«éŗæ ķjzķ%°(@ü²8™}Yņ½§KY>‹šłaŠ’/WļYP¾č™ V*—Ož°[x郹œŗį ŁŲA…nÖ­ZÖ¹|÷±˜˜8ß{xl\“X> T)½¤4Ōžõ=SüŽŽØ—¹˜GF)¾|W¾”»œÉZXļį/ƉF—Ÿģ’…Öś3J©ļĻĢh…­ž­õų›üō?m֒ŲA›śKbŌæ­žŽĒ*e2æ>…Ņ‚÷ņ .˜æūņ͌‰”ĻUco¤¤w„IļJ£leö£Uå,¶Ņ=¬'Xy&gŖA‡Uŗ±āę]“fWAņ•…IĪó3!|^˜ų•q†2š=›bӞżi—_qn‹ĻóžóC—·Äģ«“Ö’ |A)uüL… ń:̦ L£ĶėK?0 ę'ź\õxé ĢZ‹ź3 §Nįõ,} :Źūz 3£1Ö×J_•TZæņ$& s|Šźćķ֔~®tl§UyŽÆK_0śĄT7ūpégf6kö\q΀ƫš„=ō=Ł7¼ÖĆ͹t?ŌCóūęŅt}'¹ Ŗµ&žÖz²‡²5ޘY;ņƒ<ߝ'° €æŁOfOåōe›āPq8š "~YœĪ_w‘|©z³½šł5 ĻUSÓȋ˜±ę}`v­ĶŽļļÅI›‹ž‰.r"Dp īqS’Yي¦÷ĢaPĆŻŚÅ”DåĻ’}}Ežäö믯qŻ[jæ«µŽŖ”ŚpŒ‡+Ä(E¢Ė"ä{ņĆ3O\RKtY„Ģī“™U™€7ęeĪļ4‘~-MßSć›x–•gdōˆÓ^1QÄ×äCyŌ„é¬ž“q†ĻUEüsż$w$)M/« iØåõw“•©/3{B§Ó«Ė-5±ypV5ö / ÓxUlMóHēGæē[öēłé3IĻGZėųäŪĆŖĢēż§ff“B³¹øy—|OžŚEģĄųĄĘ®µńÕ{‡ļfś‹8‡ą’©$#xź<4¼#Nķɵ¾īHåĄq*wƒ_šyaü >¾ų‹¾ŖM™«į›÷°§§HŃÕßÕZytā„alš®kDkM׿ŻĆ+f†Łü»éŗ¦Š»#9’?5 Ƕx­¼¾8¢¢W¶=‹²E՟ėkšį©ó;txń| „†ųŪź‡÷Y‰²–ŠI‡Ā$³Ź…ŅluÄ[u›Ęk‰\hĪ·ÅÄįŁķŠÆķQ“üį|ā—OT—ØŚĄ§’”©šÅ}Äßē¾ÓüĶ/ūĒ4eŽ ·lā_N(ą“Zė÷ ql̶™!Ž ވ‡†«Ģś®ū»+.ķ}¬×”O½0Bzwzx&„ł†¹ų}¼½}xĮ߆~šo˜Ė¼ßo&³'C®#‡›sQ…ōP{roĢKöPŽäo'™}R;ÓO­eĮGŽ™¢˜tŠŽĘXŌ,h©ĮI;£šŽeöš×Äo!½;ƒ“4wA-æ…ÆÉOpqmiŻĶŌŹ½lJŠtM#ó?4äKIЉ" ŌByL³L0S‰M źßZo¶9Eq°ˆ²Léך¹f-Ļą‹S« żęā#zQĖg™ œŽ<™“ÆWšŠŠyu<õj–­§–fRp4’õƒö·oØ_ \<ž¤C÷Ć=£.rśŸ6åœ#Fˆ™Ķ*$ŠtŻ×U5„®’Ā@¾ żęõ[Ķė¾8tD‚;hSÓąć±§ū ł-.]RC"ćņJg|QÓXg3˜q©ń*Ī™ļĆq5›öäxjg–‚£]Æ­®B‚1Āo©#xZ\— ^*xfĄōy:5Hų¼ššĶ‡ŲŠvŠ&õJjx­J÷ŗ潿™ųeqź/­§Š_ĄÉšõ2žR#N4ō<Ś;ŖŃf®#G[?±Ö Ö“P(˜½<µ¶IÆU0“#9ź<‘ŁośÅŌbŃ'R(PL: 5V)%ÆlEö@–žg¦vßūxĶļ›KĖĪ'ߛ7³1ŹĢŽųā^œ”Cb“Ł—v5=ōŠt} ?¾€\gŽāƒ²ވ_£ā`‘Į-Sæ“ėĢ£]Mümõ„Nāf]†^J‘T[ĖgX\ĖOž"[˜zlrŪÓIėŸ~/~2° xö Dˆ AÓ¤µ.×<Ńā|0M$w’ŪSĪ“ōsš§ķ`“ŁŸ%³’ŹRxźl¬]tq2ī„„Œµ£é{²¾'ūLwļ€²NÖ1w«|®9ht?܃巰km,Ÿ…›wMćĻ)VCipĖ ƒ[Ģd»Ö\Ü8§jśŚĄ³ žMŽŽ-m?ęxݼĖīļīU’ŗ’žż <3€]k.®&ėB>UåĘ~ūūŠ“.öóĀžsĀ6 b6 ź= ¤]²—3›½ĶcæĶšīóƒÜµ9EOŅuš#öėé%Äbł,Óro†žĒ{«–Ö®¦ėn®ˆS{ŠéÉāę]2²Ų5֨٘|ož}·ģ'|N5-5x"^tQĻ€'žK ß°ŅE—ĢŽĢpš[%…‡~ÖAxioă'āW¾žõņ5ś°=Šg÷ä8{žõj}Š]Ż^ķ*š¶%vv×X,nņ’Ģš›3›ö䊔āb$Ø³Ō¬ jŚ®ä\„ų`„Ē”‡ļ­x€ĒzLā„§Pag„±Ļd呵«)$А˜ž¹“Ŗ@LÄ͹“hGsSŁ~Ŗļ¹v5Ådńˆ4f§ę›„ŪŚó,Š{9c®—=½EÅ=¼x`ō…˜«ĮSŖRWś&U…Ä1ēę]:īéœ|CLæ•ö;ś]ē/+?×Ķŗ lJĄ¦DÅĒ'bnŽLö4µ3=­ÆÉä{ņō¬ļ™ņö¹ĪŻė&Ÿµ.&qļc%™}™Ŗ½o޻֬żéI:,nō¢€ĪA‡ś Ķ,÷ó‹Ķ)ęE=Ō-^éȳežß]dgWLAk}j|Ó2!f‰YS(@[œ®Ÿ˜éq!N<å<śEqį‹yQ›lQӟrøksŠÓēz ×X f\Å=\{N-ÆuØõ)ā!ŪĘō„Bˆ£jøĀ„ßb(ėņĄ¶4 ź=ų=ŠŻEΘ;ŗą‚„ Ę«ŹßmL?Hū@‘½½E%ĢģM¦ąņj§ĖYó|Ģxxp[š3›}X …iČ-Ĭ4kfj&ć÷ńÓD‚{ż>z\‡m;Vćm»ŠĻų}ōŖ"Ļ[ŠĶŪH¶­2AŃĀ!ĪĪ[ģn[ÅϬ,/įaWŪ*yjā÷Ń®]ž”Žī¶U¼»Śk>µŠ£ŽŪāa揗ŪV±ćU\°}5¾¶UüÄļ£Ū²xܵyµm/=uKRšļQ‡_G:ń°ĆuųR>Ē£#÷ŸÆēKy‹;Ś®āóéP6Ļ©"óqśžŗš/xż¬tvl\ÅƼ>?t“Žg!NTCĻrŃÉ~.>Å?„ķ^ŧ/ ‹Ž~J)µõ(O!pRéöļ^ZKϐĆ=ϧxā•,{{‹ä‹š—åŁÓSdOo‘ū·¦yp[šDĘåŻKkq5Ią±™>!^ÆŁŌxŸ¼’SF~m¼†“F<>ßg¶®#:ŌG Å?£yoė:ź[×1WĮåĄ×ŸŗŽE„ķcøüwė:Z|.Mh+øvĄfAė:ę(Ķ× ņĢŠÓך78^Nj]ĒāÖuĢAs‹†/ ņQgūņ,ød W¶Eń„ų§»9ÅŅ\ŌŗŽˆĒĆæžfĆ Š•āwlŗ’Š*ųĆK¢±uó\ĶåJóµ§®eqłŲ5ü÷ĮKāŌžf&e+Åt m"Żžć›æ[ĻāʉK±ślÅ×ß]Æ›Ā¶ė±ÕgŃ…‚ÄÓżœŃģć½§“żŅ>~giP[Šļ(„ŽL |!fĄl jŚ›F~i—GŹ*X»|ū“—3ż­~|å:ž^Tg–~5Ժޤ…,[Oŋh¼īrž* Äq°€œr^T‰ņ 7Ą“ę"Wqū²ĒéP7į*øĶUœ;b¼?]ń0Æ,æŸ 5ļh»šS5œ¦līĪ[œ “·>ăåē^ś0›PlWĪšžµ®ćęßū™,Hž†€œ;µ’Åā§”ėž¼Y‡µkY½,ˆ×ß=ļœł>n^Óč\ŗÄļZŠ+„¶ĢĄhśˆRŹSyQˆÉ¤_K3“=ÉēWEøī܉Ÿ×āćßßPD³ų‡c3B!ŽŽŁ¶¦ęµÖuœ6ĮćĆw“KHŽŻ@AME;0¶õ° —LҊŖmĄ[/įōmÜc¹¬o[EhO$xͶųš8S𯓭2)b€)—8bŒŒž·7’Ŗį÷­x€Į Wµ'·­btD h¼„®ÄG¾ŒŹ›_;@ĘÉPpóx­ź«…“Śqč'i\ÕČ®Žņ鷇ٓ7G× CØĘāœł¾āĀzĒqõ>K©5J©'fzĢbös]·K)EŹIM¾±@÷ŗnš<Š›ŽćŠÓüä7I^؟£\õś“9^Ž}~÷^t-Åõ2K#f»ŁŌL™²Hj—JÉļ­IW V¦ź™gYßYń¾éB¼NœnŠ.?ęƒ¾|É:ž­üœ;Wc7§ WŪ§ßᮼÅ÷žøšfårƒ²ł6€G3ØŪW®3ėqŹ6¼‹ŗ˜Ÿ\’ æĮĆ9!i­w(ežOŲ›ŽĒ©”SgxDb6p³.æģd`ŽŸŌ)IZš½œurTĒ¢±—½µų•m©Ÿ)„ĘŽ4āõjH“Ü^ėčt¢oŗØéüe'™ó¬ø$ĘŪNo PtH;Dj=®Ļ£,×ÕKńwĄw”RrcTĢz³-żl:ö‹G®QŁt Ž‚fĻݹėr½ks7Ą²ē(\¼ŽŻ–Ķż@\ƒBóš‚ĖĢäŒ1o€«­"OWŪē²õ$<ąułŠ%Ł,÷»4œÖvó‡åB¼*Ėv h^æ[o½õUą%€—„ą‹˜ž\gŽŪ︃o~ćołŅ_~žŸ×:S)õ„ŌO% G’Öŗ ĄŃ{Ņ{fx4b6|a’¹»¾7÷ŽsŪ7?Õć󨛀÷X–jTJŻ$x³xÓĪŌ¬|=m«ųI¶“­¢ ŠyXŽęĮÖõ<’ō5¼åģß²ųµėš•¶UlÓ°M),×į­ žK~Śå®Ķ†W±m£ā% 6švåņēķ×UÜ®ą„łŃ叛ō“K¦½m’…‡­W±Ń…”¼ę\„x%Ÿc£×ĻŹ7r,'ø;€ÆnMl„5~ q|¦Ē#f‰Ż©ŻģKļ@k}Ē G¼‰żĻ’üĻk7Žxćvąģ¶°$“d¦‡$f‘L!Ć#›×“q2(„~płå—}¦Ē$ÄŃ0›fjžÖT{Pk¾¢l~5ņw­ėXƒĖeĄĶhnw5×·>Ģ ™,»(-Ź/scyø·üļ|ž•ę#•^oÅ ęņœ£4ŸīQšsWqåŹu|`Å#tF"œāćĄĻ€’ńĄy+ęVWń÷ütģ~æVŠkµĆ_9–?³4kų¾ŅÜėjžhåC\ułć 9¶*͇«æu¢š|>’/@Fs_Ē}8Zź,ˆÉe,u×ķŲžJ„Ęż- q„żą•ä+Ģœé±ˆY¤­÷)2N  ”Z;Óćāhy£KK„˜õn¼ńʏ?87r.æ3ļ](łÓUÜzYRź3·ÜrĖ356qbūčG?ŗFkżŸ`ŚĢ©™ĆYį³9¹ödź¼uķ 9'G;¤Š)zó½ģL¾ŹöÄö‘=vY–õ»7ß|󶙣ǂœõ„c͚5s•R_>Dgz<āøŃ ü·×ėżūüą‰™Œ8±­Y³ę"„Ōæ‚Tæ9ĄZĒq¾tŪm·õĪō`„8$Ø¢ŠO|āŽb±ųv­õĄ<„Ō$eó„”µ.`™żJ©§.\ųĢM7ŻäĪōø„AŻxćļRJ}Pk} P7Ó3nšKąæÖ®]+ ŲÄ E‚!„b–[½zµ/ žĢgz<āŲ±,«ØµīöÆ]»v’LG!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!Ä ė’_ŠÉ¶ÆĪnįIEND®B`‚libwebsockets-4.3.5/doc-assets/jit-trust-single-trust.png000066400000000000000000001400171476025525100235530ustar00rootroot00000000000000‰PNG  IHDRŃōGĖ® pHYs'P'PkHptEXtSoftwarewww.inkscape.org›ī< IDATxœģŻwtTÕŚšgŸii3©¤BBļ-‘ސfAD˜$˜ėU±^E±Åv-WÆŌI>bƒ+( ŅHBļ„–Ž&É̜óżŅaČ@ņüÖb­™söyĻ;ƒ gæg€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆč†$ģŁWxxx¢(ćdYī.„h ĄŁŽ9] !D–,ĖIöjµŚ_¢¢¢rģэ„"¢fČh4ŗ !0 @o{ēCt˜lB|——÷M\\œÕŽ Ł DDĶȔ)S“z½ŽØ(Ź›¼ķQ#9¢(Ź«±±±qöN„ˆˆČžX "j&f͚ÕĘjµ®ŠćŹs*zļ6Šé½ Ņčģѵ³Ą”“мKgE®r^±põė!©ķ— ‘ YŠ ‘už ŅŽnC^Śé+Oļ¶Z­—,YrĮ¹Ł DDM\hhč æ(“ļźß }‡æż#j™göįģīU(ŹKÆxų”Õjķ·dɒ {åEDDd,5a3fĢT©T»ų€~ŻoC`Č€ą’Øy°š‹qāĻ%Č:w°āįĶłłł£āāāJģ•QcSŁ;""ŗ>"##Õ¹¹¹“/;Önššļ>’jV$•^m‚Q”ŸĀ¬ä²ĆA:Ī9>>~=s#""jL’½ "¢ėćģŁ³a‚ĖŽū÷‰Ų1#";ŚzzŸvå‡EybÖ¬Y]ģ˜Q£b€ˆØ ŠˆˆpRåÕ²÷zļ¶„Ćž‰š1I„FĒ3”Ņ:”R[­Ö7ģ™Qcb€ˆØ *))1Jēżö½‹Ćž‰h šļv[ÅC“ŒFcg{åCDDԘX "j‚$Iŗ·ģµ[ˮзhmĒlˆn,¾ŻF@­s.{+„÷Ų3""¢ĘĀQc4ŻEVöŽ«ķ-öL‡č†£RkįŲ£ā”»ķ• Qcb€ˆØ‰BŒ !©ąźĻŃĶDWroÕ­āŪ¾įįįöŹ…ˆˆØ±°@DŌōt-{įčę µĪɞ¹ݐō>m+¾•dYf„Œˆˆš<ˆˆš’²zO{ęAtĆRėœ”Ņ”ļEQģ˜Q£`€ˆØ‰QÅ„ģuÅU¦Ö9V|«·WDDD…"¢&F’$UŁkń÷K"ŗ’ųūg$Ij;fBDDŌ(X """"""jX """"""jX """"""jX """"""jX """"""jX """"""jX """"""jX """"""jX """"""jŌöN€ˆˆnębķžēNģ‡)?%E…ptq…‹Į­:ōDūž”Ń:T¹.;=ū·Æ ;j®±S/·cķ2˜KŠ1h܃P©5×å{7®DA^VƒÆė=dōī-®CF7Æs'ö#éš“éŅ-Ūw·w:DDD75ˆˆØ^ömūK’ór3Sklćāź‰‰抔w+O;_š$ dųŻv-¬ų|. r3ŃoŌ”ėVųyń{øpź`ƒÆkÕ¾Ē [ČĖNGqa>ōī- stn“ūܹ?FEāŽG^g€ˆˆč±@DDu:ņ ¾zu,ębtés+z™ŸVķ!PT‹Ü¬K8øs=·®Į×< GWō¹õžņė5Zxł·©éĻ>9åŸČĻĪØr|ķ²OP›‰aw…ĀĖÆu•óīŽŻÕY¹ą lžy1f½ŗ}GN¶w:DDDtX "¢:żžŻ°˜‹1`ĢT„Īż²Ś6ĆļĒ÷_¾ŠuĖ>Į†øł• mŗöĮŪĖ+]»<ž”joły1 r3Ńwädtģ=¤‘³"""¢ęŽ""ŖÓ…Ó‡C&Tß±-Ó÷¶IX·ģ¤$©t\–­Č¼xB„‚§O«ņćŁéɰ””ĄÓ7B’Ÿ“äӇaµZąęé ŸĄ$U­÷ĢĶJCnF ņ² Vkąčā Oæ čœpžäAl]½oŒ›žl½>k±©©ēN 0/ZGøøz¢E@[!źu½-¤''A„ÖĄŻ;²lEź¹ČNOA æÖšņoĢŌó­xų¶Ŗöū‘­d¦ž‡J£…{ ’*ēĶ%EH;yYé€pÖ»Į»U{čœ*µ+*ČC~NéHSa 7ėŅ““j­n^~Uāēf¦"3õ'3 /Mķ…€¶Żšj̶ņćs1~ų*[~^ŒbSA„k$•ŻūĘO¾Oß@Ąö_æÅņOŸÆŌnÅg/`Åg/Śuļēē­+?w`Ē:ü“ą œ;±æJN~ApWŲKqw„ćÅE…ˆūģl_»sq„|Ž™ Ÿ–õśĪˆˆˆØn,QZų·AņéĆ8‘ø ­Ś÷ر£³Æ/npüĻęLA±©ƒ'Ģ€{ ęćų¾mH:¼KŽ{®ž¾čÖoTyūōä$|žĀ}0—”]čŲk0 P¹™©8økv’žŌ-žõé“īRėż3RĻįƒŁćŸ“æÖŃ9d\\=Q˜—ō‹gqčÆß±*śmäf„aźS4ųó]Ü¬4̟; ­½‡ĮĆAz_SĢo?ś¶®^7/ōæż~ܽ!„@nfģX‡}Ū~ĮÅ3G¹dTj ¼[µ+/čœ9–€ōä$“錎„rŸĄå±÷mū_¼4 Š"£cļ!ź 'äd¦āā™c8žøQ‘3ńpdlyLXōę,$nY WOÜ2b:<}!Ė2ĪŸŲ‡ė–C£µß‚‘DDDM DDT§c¦"qė|’ÕkČŗ”ŒN!ĆąįÓž>Š:8^s|Ö/-ŲgƒG„ćßń Ö-’›~ZT©°÷ĻU0—”’ķ÷#섨*ń,ę¼’Ųhœ9šWOhtµēųė×"?'·ŽūŸxæŹp’äӇńĪ#·āĻU1’ŠæźĪn ²Õ‚6]ūąńwWĄÉÅõšćäaūÆßĀÓ7ÆDo…ć£9,ę¼żš0$Ÿ>Œ¤Ć{Š®Ētė7Ŗü{’ś?O`srFNžgµ‹~’Å+e+"^_\©ƒ_fŪ/ß`ń»ā1ļü]T8Ä-«įę凗l‚ĮƧŅ5wmĄgĻOŗęĻNDDD„šžRĢDDtĶB†ß…Ū&=KIÖ.ūŸ>w/"gōĆģ1¾xśŽ ¼nˆy/Ž¾z I‡÷48žØū«Ņł€÷<  tx~E¹™€Ž½WO­Ń"čņS’ģō”:ļ`ēo$ī ¹Ś¹žžmŗ ē q­œ<°«Īx¶2żŁlŅł€Ģ“ŅuŚ÷P„ó”~gc¦=…”wė,˜\)=å .ž=† N½«ķüĄĄ±Óąźé‹”¤#å‡wo ™0£Jēŗõ‰¶Żś5("""ŖGQ½Ü’Ä{z§w­/_”.ėŅä¤_DņéCH>}ū¶żŠµß~ŒQ÷=Ž)½]ļŲA‚«=īāę0›*wó,]xīĀ©CÕ^§Č2Ī+Żu@ļī]ė½YFö„øzłÖŚŁöņ äŌ£ ` ­üZw±Y®Ž€†0›° 2’$!°[_ģžćGģžćĒ*ķŚõ€™sęÕŁ™-*ĢX-\JIŖµ­—kØoāEéĀ_]ˆ?WÅąĄŽuČøxI‡÷ąxāÖJm:ō„GßYŽ ©e[äÕś:ŗąčb€‚ŅĢ%EJG;ŌD£½ö5&ˆˆˆØ DDT+sI"gö¼µ Nz·ZŪwč5¾ū)g®K>ūwü†ū·cāĆÆbÜōg‘›•†KN—?™wt6ĄĆ§% u ż/£ÖjŽ-ŪįµŲķ×%ēĘfµ˜«=®Ń:`ääbää–ĖĖŗ„¬KÉH=wk—}‚ćū¶aÊyø3ln½ļ§Ö”Eśß~ƒvIpÖ»ų»SüœŒzĒ#""¢Ś±@DDµŅh—u Ŧäd¦ÖY0—”īå~½ž”—=Šßµ>ŽĪøyłĮIļ½[ 8ėŻą¤w«qJAuœõīP©50äŌŚīĢŃœ=–€ NĮģŲėZ>Ā5¢t ߚ:ś™©ēŖ;±;ömūŻūFĒŽCŹėŻ[@ļŽ{Į­…?>˜='6l”Cƒ{ „#j³oŪÆČÉøˆ^ƒĒĮąįS>¼æ¶N~nfjƒr!""¢š±@DDujÓµŽģلݾÆóÉš‘=›~µ,w-ŗõ½ćxāV,ūų_Õ¶Q©5š źˆNĮĆ0aę8ÜkŒ§Rkąßŗ3Ο<€ōä$xł·®¶Żļß}ė–#tī—v/8»ząRņiœ?y°Ś- ļž£Ź±¬“d¬żöc(ŠR©P‘t¹° RUży T*„Ū^) m7H*5NŲY¶B’TUŚ(Š‚e?‹ĢŌóå[ ś·ī 8²g#{°Ź5ę’"Łūgµ¹^]ĀĀĀF€"×b±XĖNØTŖ¬²×B«ÉdŹ­p®déŅ„•$ѵ`€ˆˆźtŪ½’Ą‘=›°z鐓qżFßß Žprq…ÕjEAN&ŅS’°cķrl]³’JĮf\—\„(}ņmššĮć_‡O+ęe£0/¹YČĻÉ@NĘEK؊ ß}³Ē÷į_Ÿ®©5ꥱӰāó1’„iøoö»čŠs Tj €Ņ5ölü {6­„FėPŽyµ§NĮC‘txāęĶ…ƒÓ§hŪµ/„$”Ø ;ׯĄŗåŸV¹&°COĄ–Ÿ£uētė;ßK9s?.x@iĮēJ®—w Ųžė·č<- ¤Ņ‚³Į=EĀ柱 ҈;CēĀÆuēņõr³Ņšė7!3õŖ5Nc}’lģŻø)IGšžc·C£u€J£)ĻuŠøéŲöĖו®ń ģ€Ū§>‰uĖ>AŌk3#œ\\Q›‹¹tꆛ.ømŅ#UīŁkȬYśŽĘoĘÜūŗCEQšłŗ‹ŠčńĄ“’AŹ™£Ų»iönZÖ,ęāņU’ ˜žÆOŹc:Üńą3!ęķ`Åē/⇯^ƒ³Į…ł90› I*ō4ū¶żz]¾ĒėÄQQ”Š+V~R± ŠsWž/+°”B(F£q$IODGGŸjHŅDDŌ<°@DDõ2öĮ§Ńē¶{±ū÷pöX2.žEI± ’$ĮIļ7O“éŅżFM›—_„kUj-n1±ŹśB†ĮŻ;N.ÕŽSRIøeÄÄJ[Į•Ķo×čj_^ėą½›Ņ““P\Tˆ²gݽ‡L@Qa$ÕßĆŌ%•ž{öo_‹Ä­k|ś0Š ó!©$øzųĄ»e; ūą55ŗõV™©Š»yÕŚ.dÄŻå ėUGļę…¹ 6ać ptļ&äd¦A„RĮ7°#ŸŽNĮCQlʇ‡O«J×Mzä ō4{žųNBa~6Ģ%Åpóņ…»wKtŽ!Ŗö»mÕ¾žŸ·[ž‹K)IČIæµVW> Ą½…?^Zš'v­Ć‘=‘žœSaœ\\”wóB`ĒŽzēLøyłWŠŪoŌų·ī‚Ķ?ĒāÜń}(Ģρ§o üŪtĮŠ;e+4Zųv¬ē·Ü¬ !ÄEQ†Ę™±±±?Ł;!""ŗ±Ųnƒa""ŗ!„……-Såšī8mŻoļ”ljļ¦UųźÕ‡ąåߣ&?ŠĄŽ½ądp‡ęr‡¹øØŁé)ˆß“ ›^ ƒ‡Žūī¤jęµSó’ż›(Īk²» (ŽĶĻĻ%..ĪZgk""jųkˆˆˆn*ĮCļĄˆ{ʦ•‹°üÓēkm«wóBųĖ Ųł§ęHxŃÅÅ„oDDÄŌØØØt{'DDDöĒ_DDDtS’„©O}€qӟĮńÄmČøx…łŁ()*„¤RĆŃIg=üŪtEĒŽƒ”Ń:Ų;e"{e6›ćFć”ŲŲŲöN†ˆˆģ‹""ŗ)¹ył£ļČÉöNƒčfŠR±Ńh4Ήż¤īęDDŌTIu7!"""¢›œNń±Ńh\h49,†ˆØ™b€ˆˆˆØ™B„ !6‡‡‡Ł;""j|,5/}dYŽm4GŪ;""j\,5?^Bˆ_ŒFć\p[h"¢fƒ"""¢ęI%„x;44ōLjˆW{'CDD×w "¢ZęēąĢŃx@`‡žp6xŌŚ>ķĀ)d\< !$t  !j~øh*ČEŅ‘½ ʧCĻAPk“՞KI:‚ó' 0?Eyptq…‹ĮAƒįéXgģ’"’ŽģAfź9äeCtN.hŪ ­Św‡¤ŗ¶’mZ-fœ<°™iē‘Ÿ£3 ī-Цk<|ź';=)gŽZų·—§s_+!ÄEQ2Tģk„.eoEqŠŠ»Ūb±ģ Ÿ“hŃ¢öN†ˆˆ®ˆˆØVŽĪX¹šMœ>“½Ē£’^VcŪĀü|ųÄd§'cĢŌ§Š9dX­±“OĀĒĻÜŻ |>Xyz7ÆJĒNģߎe=‹ó'Öx]‡^ƒńŠsŸĀ§Uū*ē,ę¬^ü~’į+äU{½{ L|ųU 3µAł„’_¾ł/6ÄĶGa^vµm:ŔĒßA«ö=ꌷrį[ŲöĖ׀īżGcöūß58'Ŗāß111Q ¹ąŃGuÉĪĪ֔½×jµ®’$I`µZ·²s’$©…ś²÷BÕjuŖšŽI”+{Æ(ŠAQU…ėŻ+œS0č wCr®‰¢(EŁa4gÅĘĘ.·EL""ŗń°@DDµ’Tj„½…·Ā‡ qėģ\÷čūżÕ¶żnŽKČNOFĖöŻqWųÜ:c[­€«§/z[Æ|4ŚŹ`ĻKÄGOß ‹¹ŽmŃcŠXxx@ēčSA.Ņ““°e5Ž'nÅūŻŽ×ļ€ĮŻ»üzEQ°čĶpģŻ“ ZGō9>-ŪĮÅÕj­9™©8ŗ÷OO܊˜?«ÅŒĮfŌ+ײų ß ĒŽ+!I*tļ?m»õƒ“Ž ¹™Čŗ”Œ;Öįhüf|0{,žżd ;öŖ1^I‘ {7ż!IŠhu8“ūäd\„«§o½sŗŃ}ņÆ{pčÆßńü¼uh×½æ½Ó©ŃüłóóÆ8”Õ˜÷Ÿ={¶.??’S6 é,„Xz«F£y<**Źl£øDDtƒ`€ˆˆźäݲ&?ś6¾łļÓųæĻę ó-Ć«t8īZmæ| µF‡°—¢ Öčjˆö7«„“įßŗ3¦’ė“«Ź-nŽ\XĢÅč;r2Ā^Ž‚$©Ŗ“™ōĻ7ńń³qźą.¬Ž}SŸž°üÜįŻ`ļ¦U0ø{ć¹ykįжŹõw̜ƒÄ-«ńå+įū/_EŸ‘“”spŖŅ®:{6ž„½WBē茧>ü m»õ«Ņ¦¤Č„…o†#qĖj,’ōy<’łŚćÅožŠ óŃ”×`xx`ēo+°k}Fß?»^łPÓńŁgŸųGXXŲVEQ¾ąh£Šf³¹kDDÄ}QQQ)6ŠIDD7.HDDõ2ō®Ptļ?¹YųęæĻT:WT‡„’yŠ¢ąīY/# m·zÅ, Ń]Ż“źÜĢTß· j<ł~µŠ9:cņ£oönZE–ĖĻķŻ“0āž‡«ķü—é5dz ‚Ü,ŁżG½sܼ*0nśæŖķü€ÖĮ>ó_!pr’äd\¬1ŽŽµ„S0śœŒ¾#'—[g›Ūs ²Ó“‘žœ„ܬ“ņM]ĢÅ&d§'#ėR2Š‹ ė}?ŁjAFź9äf¦^mŹ ::z‰$IƒE9mưCĢfsBXXŲ­6ŒIDDvĘDDT/B̘ó9Ž„Ä-«±ó·č?ś>Ąwó_BVŚtģ=£ļ{¼Ž1Ė:˜5-źW—¤#ńPd]zĮÅÕ³Ö¶m»ö…£³¹YiČøx^ž­™©ēm»ÖyæĄN½æł8ypz ™Pg{ŁjĮ©CśÜvO­m]=}įī€ĢŌóHONŖvHvz ŽģŁ•ZƒwĆŃŁgƒΟ8€ó' eūīuęT„Ķ?cķ²Opęh|„NæZ£Eēįø{Ö+U¦%ČV 6­ŒĘ–Õ‹qįäA(ŠR~Ī»e;ō¹õŒ}ščĖæ’ųœÜæ//Ś‚_æł/6’ ‹¹ŻśB@Ū®X·üÓJ÷x’±ŪĖ_÷9 ³^¾ŖĻ×,Z“(~ƌ}%IśVq{ŻWŌ‹·¢(ėŒFć˱±±ļŁ(&Ł DDTo®ž¾xšŁńÕ«į’>ƒ.· Ē…S‡°eõ8:`œū%„T’ĮeVĖåZȲĒ·įľķČĖNG±©Ž.øzų ]žh×}@•.]8 t¾ŗI‚›—L¹ø”|°2 IDATŗ¼PÖq-P‹¹‘r¦^Ÿ/'3 %E&h“šņk]gūžx¹Y—ąVĆēŁõŪ Č²=ś*/xÜ2ānü¹*Ū×.Ɣöo×+Ɗ¶żņ æū(ĄÆugxś“‚ĪŃs NŚ;Ćф-xžóµ•ŠKޟķæ~ I„F»īąīŁjAÖ„dœ;¾k–~€£ [šģĒ?C„ÖTŗē§ĻMBnf*¼ü‚ąå„ĄŽ=”sŌ—’äd¤Ā\l‚›—ŌŚŅ©$z· žlĶĶ’%K2¦L™2^Æ×æ¢(Ź+°ĶHOµāŻŠŠŠ^‹åį„K—Ų &Ł DDŌ !ĆļĀ€1S±cķ2,~ļq¤œ> EQšĄ“ļĆÓ§Uƒbɗ;ŻéĻāŠAHI:RcŪvŻū#āõÅpóņ+?VWŗęš£Kż¶0/k—Ÿ“Q~¬l{ĄäS‡pˈ‰µ^Ÿ|źpéõ¹™õŗ_QA.ĄĮY_ėvˆeźU°}méP’²”’eÆ’\ƒ]ėć0é‘דU”lµąĒÆ"3_˜‡Ać¦W>/[ńżÆbżŠĻńæ˜wšŲ;„÷?±;¶’ś-<|Zāé’®‚wĖv•®ĖNOĮŸŗ'÷ļ@üęŸŃēÖŹ£ĢÅ&<żŃ’Ŗģ1nzéŌ’²E#^_|C/x#Š‹‹³ˆ Ż `)*ģDp¦ŖÕźąY³fŻ»pįĀĆ6ŠIDDŒkQƒ•uöģX‡ŒŌsåE†*n~r’äēd`Ō}#āõÅxęćŸńĀšų»+0~ĘsŠ»yį䁝ųlĪäņ¢˜‹‹Nśjć_ÉŃŁ()6•ėsė½€?~\€ó'jŽ}ļʕHÜŗ¦Ņ}ėRTXŗH|ÅašWėģ±D$Ÿ>ƒzW(tč9n^žČĶLÅ”¬M§ļAnVZučY„ó’¤Ā]as”Rkpbß¶ņć ›WĘĻx¾Jēܼü0fź“Pķz wēŌ¹E$]›˜˜˜ŸEé`æ Ćv¶Z­;ŒFć½6ŒIDDˆ#ˆˆØĮĢ%E0——æ7åēB‘å ’«µ“ąŽĀ/~õGµóŽ{ ƒaw…į퇇įü‰HŲ²!Ćļ*½žrA£­ßZ‡ŅEŅ­ęæē¹w †ž£ļĆĪßVąķˆįč2 ¾ašš$IČĶJƉ}Ū‘td/Zuč‰sĒ÷UZD°6e…­®~;Ō¦l”枃ĒW*(IBŸŪīÅśŸcĒŚečŽt½c–øhŁ®ęµtŽĪøcę™ņ!ĖVH’ éÉI€Vķ{ŌxO`@fŚł*ē:ōRļéźÅĘĘōŃG™L¦…Ŗß»³į BˆļĀĀĀŽĻĖĖ{éņˆ""ŗI°@DD ¢( –¼÷8r³ŅŠ’öūqöX"ļŁˆ ßĶĒØ,!Ć'¢cÆ!ppÖ×ŗˆŸ{  ™0æ|ż!ļž½¼P¶{@Ł“öŗä@ł¼r tqCć‹_  m7¬_1‡žś‡žś½Ņu®ž¾˜üč[šši…Ø×fBėXæ½J]śæŁ²µ®–lµ`ל8„‹į]©ßØÉXæās$lYSAnłH‡ŗęeōīµĻÆ?ć¹Jļ˦^¬_1N.µĘ.)2U9WVˆ”ėožüłł ū]Q”Ļhźŗ¦„¢(s\\\ś=ōŠC,]ŗ4Ķ1‰ˆØ°@DD ²é§…Ųæ}-ܽ0õ©zīŽ{t4~ŒzCF4h%z'—;W*jžž÷¶äeOÖ ósźĆtyN¾Ö”r^R©1fŚS}’ćøpź2SĻĮ\R 'øyłĆæmH’Ŗü)|}§čJŸŌW× ®Īł—“Ÿ–ķįįÓ²üųė‘—u B’™z›’[õ^ŽĪ(6`Ļ?bČ3ėu?‹¹ąäҰiā¦Ėß÷_¾«³mIqż·l, O5ś„>/7øŗŗB£Ń¼µhŃ¢‡ģ°Ąf!D“yŗvH–åBæŗÆØ—[ÕjõīšššÉ‹-Śe£˜DDt±@DDõ–’tß}ńJ門ĻGgZwĮ˜©Oā—Æ?Ä¢·faīW@£«ßŽŻæ’SA.z ƒ»w­mĖ:Żēļ{ś–.:hŖg ģ©tÅĪuŁ1GWH*5Zuč‰VzV{}śåÕ’ė³¢?ø{(}b^6|¾6Ė?}Ē·bśsŸbh…NüŽµĖŠ,cł'ĻÕtłå¶Ėė](AQlŖßŠ2e«ś’{Ł/ühOZµ@p+ŗh –€JĻ-.’ą)‡EyQ±Ź©^ŃŃŃ[ĀĀĀś(Š`Ā¶’eyShhč옘˜…6ŠIDD× DDT/s1¾s± Cļ4¢kßŪŹĻŻaœƒÄ­æ łō!|’å«xąÉ’Ō+ęŗåŸāĢŃxxų“B·~#km›“q*Mš ģ8w¢īuĪ ósžrBų“l_~ü…É]P\Tˆwć•wŲkrź@éCĪ€¶]ź¼_Y®®ž¾ČÉøˆ³GŠŗĖ-µ¶Ļŗ<_¾ā¶†…ł9Ų·ķWĄčūgCļęUķµ%Å&üū.Nģߎō”3šņ Ŗ3æ²XeCśkņĮćqįŌAD.Ž WO_8<Ņy5^Sl*Ą©CĮŃI_ēēn žĪ*ÜŽĶz €§‹ńĒŽ„š‘–g…“FĄĒ Bæ6ŻĶ¾UW+E‰šO!D‰?‚MDGG'GFF?{öģ[Т̱QX †åååż#..®~C^ˆˆØŃq""Ŗ—£ŽĄłąéˆÉVŽo^­ŃĮųāTjlüqģXWƘe‹ĻŻūg­ķYĘ_æź\~<°SočŻ¼•v”ʼż+m[ó5dيÖ]n³Į½üøēåŽņ…Ó‡j½>ėR2Ž%n…¤R£ū€Ūkm[QYŪ5_EQjlwśŠn¤§œZ£E›.}ŹļłćG˜KŠąįÓ“žł&ĘL{ŖŚ?w†¾ˆÖC (JłT…ŗ“ķ8±oG¹YĢÅ8w<ęā¢ņāK@»ŅėNŽScģ£ń›ńń3wcõ’÷ė•KEB”ž<©øćƵš1ØpWo'č$L.AhĢ%Ģž6?ģ-Ą %H˵")Ƃ§‹ńŁļ9˜4?’ż-Ef¬QÅsēo‘‘‘–čččEy@­ā*Šņ^Æßl4[Ū*&Ł DDT§²Ež„˜1§ś…ß‚:õĘøéĻ@Q,~÷1äe]*?wžäAD½6QÆĶ¬4_ąŲŅ­ūæĻšÓ‚בvįT„˜²lÅłõŗ'÷ļ€ƒ“ Üž÷bę’¤Āš‰³ ßĒ_¾CqQå9ē¹YŲ7?FEn›ōH„ó!ĆJüś?O žĻUU®—­KŲ‚ĻžŸ s± żGßWēt…ŠĘN{ j‰[VćĖW¦#éČŽJ»”™°wÓ*|łŹC€ž£ļÆT Ų~yųߑ“!„Øõ^}GNģ\»¼ÖbC™–ķ{Ą»e;$Ÿ>„• ߀¹øņƒŪ‚Ü,üßg/ Ø0]śÜZ>ōæĻ­÷@Ÿ¼‰c [ŖÄĶNOĘo’÷ [æQuęq„²‘ ń›†,_Ū4|„Ń] Q ¬;dĀ?–¦ćPrķóĶVĖwå#bÉ%¤ē[`$€Ļ®)‘Pllģ·V«u€“¶Š©(Ź-BˆæŒFcż·£ "¢FSū/ ""ŗé„……-Såšī8m]Ūī_¹™x#t²ÓS0bā,L}śĆŪZĢ%xē#pžäAō8½óBąšī?šń³’łń >å×üņõ‡X¹č­ņN±ĪĮ Ž.®°ZĢČĻÉ(ļČ:8ė1ė•Eč1pL„{šKŠšåĖÓq`ēoJWõwŅ»ĆŃŀ¼ģņ9ž0ģ®PL{ę£JébS>~v"N,Ž/$ zW/hPRdBa^vł*ž­»Ü‚'’óœō [4/qė,zsŠM„[Õ-\\=aµ˜Q›UŽÉm×cfæW¾Š’„äÓxeZ0EĮĖ‹¶ŌŗķPŗ@ā‹SŗA–­xžóµh×c@¹ßŒĻęL¹ŲIRĮÕÓo˜ņs‘‘zV‹N.®xīóµšoó÷Ō‡ļæ|ė–}p6xĄĖ/€€)?—R’ Č2‚:ćłyk”Ö”īŗšžćcpr’D.Łæ N5ę“cķ2Äü»“P£st†ĮŻNz7ĢŚXēē¹ŅķŻœŠŚSų³ÅxüŪ ˜­uF*źä«ĮĀ™-Z£…ėœÄ īĮ4hµŚX÷Ų0¬UńVttōėö„ŃuSūjDDDtÓ ž  ;8{¶‚{«śÆŹ_ß–†ģōdųµī„sęA­ŃÖŲVR©Š¶k_œ9bS<}įŠłŁ8wbܼ|1pģ4h+,Ų”ē ō<*µPęƔŸ E¶ĀŁÕ­;cŠųé˜9g‚:õ®rO•J¾#'ĮæugȲęā"”"/+ ­<|Z¢[摘ņŲæqŪäVyŠ®Öh1pĢTxł·*µs1r3Ó ĖVøÜŃ®{ŒöīŸż.tŽõŪµ "ߥ<~:tŽĪPds ó³![,Š»·@§ŽC1aĘs˜üĻ7+ķP°oė/ČJ; NĮußcuŽĒĮIŒ‹g!©$8ÜѶ[æ:Æńņ BšŠ;`µZ`.)BAnÖå*ø{ dų]0Īż¾*]׵ϭhŻ9s1 ó²u)9é”Öhį×ŗ3†Oœ…ŸżØŅßõÉż;!IśšRk„eūpóņCa^,%EČJOVėPeōF]| * hėS‰‚ˆ„éČ/–ė¾č ł2d¢_t‹ŒŒ\šśėÆ78Īl’žżÅ +z÷īmBÜŪ< ’Œīׯß/{öģ¹¶½0‰ˆČ&8€ˆØ‰±õ¢›Õ°ŽŽčģ«Aģ¶<Ģ’#÷ŖćčŌ+÷‡³ B„ń6Kņ6NQ”ÆxŲ*¦ā˜Õj½wńāÅm“ˆˆ®× ""¢&Gņ,ŻģhŻĮҵ ܝ%“m”VUśüĆÕ±ōgZpw’ąź(A@€›nźņóŏ•…¾»1?Gc‹ŽŽž@oŁ*¦¢(%IŚa4§Ų*&]ˆˆˆØÉqŅIpŌdŹ8‘fF/5fŌ£ƒ·/ßįIĘĮzčŌO2ĄI+!t°ž.*D ×£³Ÿ÷õqĘØ.„SžJ*Į^uJsNQ”aŚ0¬‹bEhhčWMfG"¢› DDDŌä8kKŸņ§ę–.°čؕPX¢ąä%3¾Ś”WŽfömÄnĖĒ…ģæ·<‘jʆĆ&,؜‡.~ŚJq4ڇ°£ŲŲŲ¢˜˜˜‡…’Pū¶ QRR²Žh4śŚ0&Õ DDDŌäH—įX.Æś"ՌßĀßM…°!zxėUpŌ H’@‘¹–Eź/ƖTa÷ŻuKś%Ėņ glS1L±;,,l ­bQżØķ‘­–”vŲ=]J7<źÕJ‹@O5¶/B' œuŅóeÄnĶĆģ‘Dż™W~­ĮQB€›-ŻUČ5•īŠB_¾qŅ…Ęü7‚Å‹ļ‰ˆˆčc6›—e£°Š¢üi4_Ž}ĻF1Żģٳuž²,{š”$I @#ĖrŁv!Ł’$)V«Õ$„ČBdeDFF6|K ""ą.DDM w T0s’øćӋHĻ·"$P‡ O5N]2#ń| ŗhqąB œ“Żüµ(2+8žfĘøī„[1¦äX±ėtdˆfĄ¬”zų\1Ū®ĪN¦L™¢Ņėõo+Šņ’=·Į1ܜ$,󆟫 BĢ·y¢7©G}Ō„ØØ(ZQ”)6 «!Ž œ{½ēÉĘ¦ !īŠõzŽĖF¬Bˆ²,’€øŲŲŲl{'DD7ˆˆšˆžęļ¦ĘųNxgM6~ŠÆ’T'­ĄG÷{"8P,„ąpģŹ„Ńh|BńĘ]S\\<żŪoæĶ²aLĢž=[———wāa·Āæ…t€³ąā¤@£ŌŖŹē‹K€’ Ą$PP˜-ÕĒi Bq²,/X¼xńV›D$¢f"¢&&44ō[S E‡h7ų;gDd_ŻüµÜŽšĶĪ||¹1Ŗڧ“k”ĮŪ÷ø£mé¼’d}…É×=Ł›Txxų°ĖO¦}möģåuv_k ššp«ÕśČ圣“ąļ#£„ąļ­ĄĖšp“įé^µĆ_S±@F‘¤e$§ \ø(’&`±643Ą^ÅEFFڦ¼@DM DDMLhhč"aąŁ&†Ļ°sFDö×ÕO‹Aķ ąRžßīĢĒĘ£EøżwI%!:Œļį„qŻ!IøKqŅ^¹ß,f̘ R©¾Céz[)Rå±ŲŲŲ諹ų”‡ņV«Õ/ˆą\ßė . ŗvPŠ>HA»@>^ ÄužÕl±g/œ<+įxp쓄↭6qVńN^^^t\\\³_§‚ˆŖĒQc4ßB<zŸvč6®YīXFT…ÆA…Aķąåņ÷#Ū¼"—ņ¬pŠHšŅKŠŖŹ™D˜+„hųāĶŌģŁ³ułłłļxĀĘ”£ņóóg×·c;mŚ4w‡9Š¢<Žzvü[ł)é.£[-}Ƈæ.+pü“Ąž£āIČ®’…IŽČĻĻ_wuc ˆØÉb€ˆØ‰ `ØuNčóĄ[€ģœэ£—3=µptt¼ņōa+,Bœhüģš†ŠŠŠé¾ądư»­Vė¤%K–œ­©Add¤:)))BńĻŗzŗ+¢ oO-<®n—ˆĘ (ĄÉ3;%ģŽ/”Øø^—%x*&&fÓõĶŽˆn&,51F£±ƒāXŁū®c‡Į·½=S"ŗįœŪ»öżƒĮww÷“^xa˜N§;+„0Ł;·¦Āh4öB| ­ Ć^’eyźāŋ7\y"44t€/ōØ-€@ĻĪ2†õ“Ń„żŸō7Tq‰ĄīżwH8±^ÉÆŠh4OEEE„\ļ܈čĘw“ż“GDDõz@gšķ:­ūŻc猈n,ūV¾Ā¬Ņ5żE™ūøSj’ĀĆĆ=EłFQ”±6 kQååŲŲŲ÷(—·#ü·¢(Øqø“F ‘qŪ@+|¼l˜9)šŪØó'}6€ēbbbøq‡:ŃuĒQö®¢(s@Rk<łhōöN‹č†uīŽnXXž^1:::z½Sjź„Ńh|^ńoŌŅAopP!~RåK”>õo]S;µ t‹ŒqĆ­p3Ųźī7–ÓēVmPįČÉŚŚ !~UeFLLĢ„FJˆn0œJDŌ !¢t3Ȗ\H\g猈n Š"ćÜŽÕ Üh§tš %66ö=I’īBdŁ,Ø¢Lš+jéüßŅ]Aä“L½³évž M+O-xŅhA€OĶų/ÄˆÖxŁэ¤;—ŃĶ >>>388Ų@?(Č8ÆVp0“°sfDöu>~52Ļģ«xhÖĒ|Ų^ł4'ńńńĒCBB¾—ey„ĀēzŽ«„Ƃ‡1j°NUÖylŗ¼<€!}dø€SgĢ–jGEy(88Xž8qā֍7rJQ3ĀQÕ£G=’$=@(Ⱦpī= qØ÷VŲDMJĘé½8ó×Om‰‰‰™cÆ|š£ųųųĢŽ½{Ē !Ū:¾F Üq›3'YįåŽ<ūµBA +ČĢRŅŖ-HnĖĪĪŲ£Guūöķ+hä4‰ČNX "j¢öķŪWŠ»wļĆBˆūŁjFę™Døś¶ƒÖÉÕŽé5Ŗ“cŪqzū (²\v(C1!>>ŽfCŅ©~, +CBBRŒ~ł+˜=ӊ஠$®ré® ĄWĮ‘“Ģ–Ŗm„ķ$IŗÆWÆ^æ%&&r]¢f€"¢&,!!įHpp° ą6-ÅH?¹G=œ=Zā¦Ū’ŠØ¬%E8³ėGœOųŠRŽł7K’4!:::Įž¹5wńńń{zõźõ‡b,€«^„TąÖ2Āļ·ĀąbĆ›æ@Ÿ2’.HČŹ©öß|7!ÄC!!! ńńń';?"j\,5q ›{÷īķ*„”.‚–uī 2Ļī‡ÖŁ/؉±š‹‘zt+Žżƒ¼Ō“O™„3¢££×Ų+7ś[bbā¹ąąą„nЦ”×;;L³bÄ—¶®‘£Šæ·Œ’¤óÕž{Æ0%88ųHBBĀ”FNˆń5aaaኢĢ ­x\­s†[Ė®põk} Ø“P©uvŹ’čźXĶE0Ą”uŁ#'å8¹Ź˜ē Š¢Üū—=r¤šEFFŖĻž=ūVŁö„õŃŹOĮ?¦Ząé~=3kzö‘°ä L՞¶ !Ā¢££—4rZDŌHX "jFBCCūųĄ{ēBԈdßj4šē£¢¢Rģ Õ,44t*€j]­“ggaS¬ŠikkE5¹xI`ŽRҳŖķ ČBˆščččŲFN‹ˆ DDĶ ą5Żķ Ńud°NQ”¹±±±œļ“ļ.Ėņfn՝æu€ŒÉć¬ņņņłßØkš`pOLLĢĻœ]g,5cF£±3€»ŒBtąiē”ˆ®…ą€xEQV !žƕĶo2F£q®āķźĪ*cāķÖĘN©É*.¾Z¦ĘįÕv LBˆŪ£££·4v^Dtż°@DDå"""œdYÖ˲\ėš[¢ÅbÉ1™Lyqqq%öĪ…®ŽåµJ šßØo·bĢP¹š«čZ”˜ĖU8p¬Ś!™²,[¼xńĮĘĪ‹ˆ®ˆˆˆˆČīŒFćBˆØÆ<7įV+īø’ėÅbę-UćČÉj»$I¼hŃ¢3ŁgOż?{÷_uu?~üuī½¹7{öF6ø·bµ īs#ŅŖuŌöW[Ū~›¶V«U먋BTԊ*Ną("{CČŽ7÷ółżqīMīĢ€›ÜŒ÷óńČć&ē3īI¹÷¼Ļū¼ˆŖéÓ§©”z™ƒ’ÓO0dšßĘlV˜yu=ś˜”÷s»Żo͜93¾½ū%„ˆ< !„BˆØ™6mZšÕj}`5Śąź dĶ{ˆ‹…Ū¦×Ó3#8 ”:Ņårż7 ŻBD˜„B!D“(‡Ćń0,šĄˆ!3®’j’ķ))n½ŽMRbČĆÓ²²²niē. !"Lž¤ !„BˆØČŹŹśpA`{ļL“_^k`³F”SŻ\Ļ “[®­ł³WJ=|ć7Źö±BtbņgU!„B“;§Ó9F)5ˆńmwŲMnĻŖ'=%J¤&Cr"¬Ś4Wh3MóĢįƇē­]»¶>}BÉB!„ķjźŌ©V„Ōs@\ą±é—ōķ…N ?§opņ±!‹/ŽMLLüs{÷GB!„ķ*11ńfÓ4 l?õ8ƒcĒJÅ’ŽāŖóŻōźrg€ß̘1ct{÷Gqų$ „B!ŚĶŒ3zlĻL‡+ΓВ‰ĆĪ+ÜXƒG öśśśgÕž½B !„Bˆvćv»RŪÆ»ÄM¬# MŌĻäœSƒ³2”Rg8Ī«£Š%!Äa€B!„hYYY§×¶O8ŚdÄIżļئLt“‘ņŠ#YYYAĮ!DĒ%!„BŃęrrrlJ©§ H…Ė&IAłŽĢvyFo„TN;wGq$ „B!ŚÜöķŪ§cŪ/ü™›äÄ(tH“ŹŃ£«„|k IDAT ʏ ™„qˌ3†“w„‡FB!„¢M͜93F)õĒĄö}MĪ8QR’;‹©SÜÄŲ‚šcÜn÷=QčŽāH@!„B“©śśz'04°żŠóÜXäŻh§‘™gŸ2`sCvvvŠļWŃńȟ\!„BŃfrrr,¦iž:°}Ō0“įƒCī1/:°sOsŌźw,„čx$ „B!ŚLAAĮ…ĄØĄö ĻYTNtp ń0ń¤æ;ē7Ž˜ŽŽżB“Ž„B!D›1M󮥶# (³’ÕŁ'›Ųc‚š ĆųEŗ#„h !„Bˆ6‘••5J)uz`ū¹§IįæĪ,!Žääcƒ‡¦iŽ”““#ć !:0ł*„B!Ś„Rj& |Ū2ÓMʏ”Ł’Īīģ“ ”ņoSJ پ}ūĻ¢Ó#!DKX£Ż!„BŃõL:Õn·ŪŸā}Ū'Ÿa2lPÓ€Ņr÷>¼’O–ģ%%ÅNß^ńMžļõĆŖ"žœ³žO–ģåŲ£2ˆuŽ[Ż>ŻMžK›©¬Ŗgä) ķó^ŻŹ+ ¶³as'Ó£U÷üźŪż<;w#E%uŒ™zXż‹¦„xŲ“ŻĀĮb’(€RʾbŊW£Ō-!D3$@!„BD\bbāρ ß6›N:ŗłā)I1,üh=µ†Ēg­kńs>žßu<ōŌŽłp'©ÉöV÷9Š’Æ÷ńŠSkųxÉ^æöļķą”§ÖšĀü­­¾ēw?ä”§Öšž'»»¾öÖ°|eŪwTDō¾M9õøK9.¼å–[Ū­BˆV‘€B!„h Sʏ4IjįŠššĖ‡šĪ¢TTÖ7{~Uu=oš“¾ö²!­čfė%ÄŁHK±“˜hkÓēi—lć”) łĖƒ+Śķ9k¼%`|UUÕķÖ !D«H@!„BDŌŌ©SķĄÅķĒoyńæk/‚ŢجŖēķE?5{žŪč@Rpõ%ƒ[ÓŻVĖ’ĻiģYs%¼rn›>OGg³Ā‘£ƒ§J© ą¢c€B!„ˆØųųųӁß6{ ŒŃņ@ߎńœ~RO^~}[³ēæņęvN›Š‹AšN3Øs””Õµø/‡Źķ6)-wņõÅ„uŌ¹ŚvĒ„’²: 橋27.d’&ŻvŪmŽC¾©¢Ķtœ¼%!„BŃ%X,–óŪĘaąhå²ük/ŹāÆöńń’=8XCŒą|s€¢āZ>ül·ēšąōĆ0™3oϽ²•õ›J)ÆŠƒr„`Š€DN?©æ¹y £†§]ʳ×óTīz.æ`÷ŽsŒß±½ū«¹’±U,üh?ķŖĄjU{dæžå˜&ļūĆŖ"~j K¾ŁĻ¢Ün=0OM¶sŌø4²®>‚«/ŅP}’æĻo䑧×4Žżp'£OYŠpĻG’q"“&ömųzÓÖ2yz-Ÿ~¹—‚Ÿ*0=c’Œt'—É W ć¢ÉZōs5Ģ$.ŖküšŹŹŹN>nń„ķBB!„"Ņ&6ŒŃśYęK¦ äŽ?~Ku›łop³sdČó^wu.ƒX‡•K/tüæż†ē_ŁčĢ‚įC“(ÆØgĒĪJže ƽ]Ąā·&1~tZ³ż*)­eŪŽ לµ’“«’³.ł€]{Ŗ68‰”ä\.“VdŚ/>ēčqé!ļ¹ų«}\tŻ'ŌÖ¹‰‹µ2~t ŌÖģ;PĆāÆö±ų«}¬Y_Ņt()s±- č_Ee=•>_7f |²d—Žšµuŗc’¾ń$%Ęp Ø–Ā5¼ūįNŽżp'wĢĶ’w\³?ŠĖF1X±Ī?±Ųb±LFBt8B!„3sęĢ.—+hŖ{Ģ­OeONŠįĀIxåĶķ¼¼`{ŲĄĖoč%ü¼?)I1~ĒV­+ęłW¶kåĶēĻꌓ{ł/-wqϽ˙3oOĢ^Ϭ‡Onu?½žt’ģŚSőcŅxįéÓ1,¹įXQIwܳ”ło„¾ö¾åŌÖ¹¹Ł9’ūžx,q±[†É‡‹÷05ū3ž˜½ž?Ü9ž„x·ĶŌė†0ė¹üå\:e Ożė¤†kāõŪżšZ77Żõ5µun¦_5ŒæŻ}4½{Ę5œWYUϳs7ņĒū–óŲ¬u\sِ°ĮŠ@c†›¬Ų¬A)5±E !Ś•ŌB!„ćr¹Nü6‡ļ™a’~ˆ[Ž{+ś»¼0h¶`ēī*¾ZVčw®ÆÆ=Ē&Mģ4ų½åą-Ł:°°y[ł”uØ®qóÖūŗXį’}Šßą =ÕάGN”gfš2†:—Į÷+‹ųó]Gś ž,Ť‰}9ęČ jėÜ K bVŅR줄Ų®±Ū- mi)vģ1śķžĒŸļaמ*ʍJ噝ä7ų(øėę1\:e īhń÷>jXppĒ4Ķ£®æžś„ßDŃ.$ „B!"铥†aƒ½Čܹgö%³G,¦Ł8Óļė ¶a&=2bł¹ĻZwƋĻĄW §šą_šOi?p°¦ŁsĀY·±”ź7½2ć8jlčeq±V~vzŸ v‹R|ńĪy|µp éiĶ×Ī;PTŪģ9~X„ ēžÕ‹E…=ļŌ ŗšāŗ„-¾wf:$'żŽm6›mBkū)„h[²@!„BDŅń CzĄfS\yŃ`žĢ]Ļ’lēwŒ÷;žæŪ˜zŃ blĮs[½2ćč•G}½ÉĘ-eģŁWMm›ņ ÕÕn*«źyĆ3Ū}8Õšwī®ō<_čB…^żzǵŁlŠcŌéö…jŲ¼­œźšzŹ*\ŌÕ”WøŲ¾£‚e?8ä~—č]āb­!3)•U“n÷‚aM~XėXPJ|ŅŖ‰Ce¼Ą”o?ѿı@)жŪntB!„‘td`Ćąž‡>°˜vÅžĢ]ĻśM„¬X]Ō°6}ķĘV®-Öē\>4ģõOę®ēĮ'ְư:äńX‡5d{kT×čĀzI5e¤‡žį_³”„Ūžš-_}»?ģµ±+5µīCź_Q‰ĪøļŃUÜ÷čŖfĻÆŖnŻó īoņĆZ’6Ó4ƒž-ˆ6ówąwžĻ’ü-Š}él>RQŃīH{€B!„ˆ§Ó9š«gµ@ļĢĆ wd£†§°~S)’[°½!šæ7¶0bX2'ņŚēž·…ßüßwŲlŠ© bōˆTāb­$'Åc³’b§oÆ8NæšżĆźcllĖ‚”fļKŹź˜tåG8XƑcҘ4±/))v’c°ZÉIv† Jä/¬ąćĻ÷R’j=ƒÓ&ōdäĶow8 _ė–ļ÷ėņw<>T£ˆ8+p-zöZ×£‡÷Æóy 88Ų×Āk&£³–²€C‹®u2B!„ašęX„üÓĄ{gšŲ‚k.Ā_XĮ+onē÷ƒRŠ’½¹½įX8Oēoąńū&=툐ēüŌ|J|s2ŗö@QIÓ÷X±ŗˆ?Ż÷³žŪŲŖū§&Cœ#čwcFų¼ˆ”ė=/£gĮ¦·āś Ę-‘ģ¹&±×Ų=דv:Hjå5-q&:Xr?ŻØf‚„B!D¤ lčŗ ~« ģŸĄiō6~/æ±­aö’”{2x`ų1ˆĶS°ø4üĄwŃg»»G I&1ĮĘŽżÕ|æņ`ČsŹ+\|"…ßfӃžā’šÕż÷īÆnØwŠ·bUuč „cĻ»€ZϹ.`'0 pž3žsŽf{śS ”yś÷?ō,æ×­žó‹Š©’k|Ś®iāgšG`7ßÄ9]Ž„B!D¤ lČH‹Ü2äi—ė™ž w0’­ŻÖDś?ĄŲQzTśšÓk(-÷Ÿä«©u3÷å-Ü÷ļ• _*{Œ…Ė/@öķ_¶ķØąś[¾ Ø8x?ĪÓĒ׎)9Č_±ŗˆ©ŁŸQē2Āö³WĻ8>’j_}»Ÿśz’Ÿūä³ūŃ33–o¾+䦻¾fĖöræću.ƒļķąŁ¹zÉÄ%SĒeĶĖ Q†Į0Œ¦Aāp]Žž¹=˜/>FĻ“_ęšc€/‹Ńń@.šzž| dś\3ĘÓv9°×ēšWŃóė<Ē}÷āģ,~Äæ„Ōæƒ^ošmĄ5 ž¾æ‰®kš5:PļyŽ+/€ŽžóK­žļśšŸ¶pė{NĪö¹®[B!:“'€)>_Æ%üœĆuzfą—Ą‡mōg ß'ģ ń}ūś#:»ąŁfĪėr$@!Dg²ųŽó1]ōØ-\ü ½.r(­[-“-čbPBDKf`CRBä2R’bønźP† LdČĄD®½b©Éö&ƙ4±/¼rü¼?éi¶’TĮņ•E”—»yD2ææ}ÆåÅÉ'ō¤Wf¬ßž“T;C&’‘ę’©)† L¤Gš’–~½2ćųź½)üæ[Ē2jx ÕÕõlŪQĆaåœ3ū°ą¹‰Ü}Ū8† L$3£1;;!ŽĘ§oLāö›F3|h2å.V®-¦ą§ lL½hŸ.˜Ä՗ fČĄD OXöȈåĆ×Īå’óŅ»g¦©—=X,ņsĪģĆ·‹ĪēÖģQ5VÆĶ(ų©‚²2½2ć8ėŌŽ<óƓxįéÓQįK„ņwz{ ³Šiųoū“恞՞DpPΊžł. qOxĄółŸöI@%šט>לäÓ~:+įoļH`ŠøUįY!īłžƒļ5ō|~nˆkZźHōäĮ£čļ©[9„’ŚB!D‡PlFÆcŒ¤€ĻŠk_F§^ŠNwģČ.G§b^ ¼很nŹétī”15€æżŚEfz˜ D—²x©…—ßńßņĮ4Ķüüü|g”ŗŌÕŻƒæ@c!@ÆWŃÆ wł“AÓæC掅bGgģC§ā÷B§ßÆʆ¹ĘĢ¢—ŲŠu –įHTķ¹Ę[sąyōr‚ó…a®)ņ\8 ąĶčOÓ/£ƒęƒŠKŗY „B4 ¼‹~£s>śĶӔ腮,Üż¦Ø½Žqsˆs-čbGc€8ōlÄ:`9z¶ĆėhĻńÆŃ3,cżčµŽ=Ń3GUžĻæ¦qvƂ.ąt:µ²Ų|ƒ.%D$UźŽoŖ ™čRāā‚Ū”R=¦M›–ąr¹Źęϟß-öZo'ŽA’K!޽Œ~ ›ŽĄ»(g÷­CÆ»oĶ5FĄ5©čÉęQč`C8V >D{I×}š8Ž”č,æŅ ’ !„Ā+=ų·”’­/­ż½V2Ōkl.ŗč‘w`š:z`h5:óĄ4ų;:Ūaz–OkšTüĶēó±č›¾žsń<ŪŠ©kšųž„h)G`ƒ®p¹e¢ćŠ =²øĄįp8œĪĘd„TCÅCÓ4ŻčĢ.Æ:„T„Ļńj|е)„*šŁŗĶ4ĶR’¶šJ)ߤŪ0Œ2Ÿkżīm†ß½-‹ß½ Ć(5MÓš3•R%J)·ŪķŽ—ŸŸ­r'¢× _W²Ž{CoĒćŠÆ)ŠųŚTEĖŹ5Ž­9źŠöp{Ī ŌTAŽZōߚCłćņ{ōļśŃV^×eH@!„Šo$^GgLÖā}ĪBĄæ~ģ@æQü? ų ]`I”·3DcÅå}čŁüŸ”glņ€Ó}īß8p¢3ö£gNīĪD/üÜsžVĻć?įĄ4t1ĆrōŗÜs€’¢ėųW¢Õrrr,Aļ-m6üw6kóēų2M3p“ČĒ›ŗ¶¹{ū}­Šųoź˜÷øļ9¦ibš&J)—Óé\¢”z(77÷½&;yÓ}>æ¤ēz‹ģy)Ķ\3ł¢ל~m[ŒNŃXÉ”­×oŖxd<:ØŠŚ?.ƒŠĖ ž@ģ–$ „¢»Sčm‰Ī@¬?;Œ{]…~Cr:5ß«=ųæ=Ū>=#s,Ģõ9·Ų„NóæšM»¼]1Š`Ļć–Ē' ×Rś¦‰īžN&ō~ĻB“ŹĮƒcBµ[¤āT·ŃŚ@œmšęŁYYYĻ <ų֜œ£Ł«ŸøŚół¹„~M½ķ-ōvz@o½÷:S¢o˜k@_¢—£ö g䛺Ƽļ9wz€]CóE Ÿ@ī h·½‡]gd{3÷ åwčŸĮƇpm—!»!„čīrŠö{ńˆŠ1čbF!ŽÕ¢³¼[2 ó<~ā\h|Cēū&؄šoōšRåy¾  ķĄĶ“ŻVŠ¢ÉČȹ¶Ū4%Š]øī›ķ””śeAAAą–zme z`½ ųdõ±= ļKć1•Ą*ōėUø"ŗē¢×ęÆņ|ķBÆćœęš3Šuj¼×ø„č`÷‘a®Ž6š¤Ēnšō!ŠÕ謽e!Žy—cf–€®Ī¬Ū¦?Ż‚d!„čĪn@ÆŁ½GńįJ„éŚ³}>÷ÖE’©’¾¼³&¾Å‘u­é}č‚PūŠo|v;=ĖŠ›„ 8,999õN§ÓMĄ›öz·‰]¦œŗ…zw·öüvƌł³gĻ^×ĘĻćM’‰¦ÓąŻč„fwz®Yäi=žx]v/:Å’D`¦ē¼9>÷z8½ŻąÓč„r{<× ü"Ä5gŸz®YŠ~½‹Eć»Ķsžļk£×ńč,„|t #½ĢītĆS!®Łīyœå¹g)ÆsæA’mz0Äu݊„Btg÷¢¾ūŃėčy‹ę]ž”ŲAč7¾š*\äĖ[/{)MWVŽÓĀū5e>zę9č„<ŃoŠŽA²DdŌŃųoW=ŲC.]ĖÕ}3<,†aĢ@’]m+čBµŗś —Š€KŃ»t”£ÕżŃĖžāšJąvtv×|ą·č`ł=!®©F§ŲæķÓö:ĖģĄC\Sē9–āŲļ€?”_§|U·¢ėęzż³9ŁóēŽŪŠŠyŚŅ.EB!ŗ3…^ėxg3ē]ęyüš¦eču8w£+#’ż& ąYt ­Ų€čŁ’'Ž)OŪĶčŌĪmmŲŃ=”Ø©Q$Äuūa·PSŪķ30M3T:{¤žŻ_ŻÜ‰Ą·čąÆĀģw/š8ŗFĢ`ōŚśrōkÅ×ųļČąõ0ś5kś5Ćį¹f?zKŁP[÷=ƒ8œ€.F‹0ģóō­(Læ¢_oĻ@/aˆEg®-Ó7€ čŻu& _÷’Š;ÜXѐ•a®ėV$ „¢;KÓõpœč7<הߌ4—&æ)®ąK”S7łœ 0šŠ€ß Ó [²īß;Ā \3iG|½żQą5Ž{÷Fāš” W6ØØ†ŒP+rE—S^Łü9Ż@jß’ šQ+Æł8L{:;5*šø_85ĄĻGkT£—)“ö¹‡hß׏ūtY²"K!DW5żĘ&˧ķQOŪĻׄ„/žTLćžĒ•žÆĖiŚ|tp=]`É»'ztšcĄ»UŌwčmśīĪ£qĻf:uńVtś’-łfi\Fpz0:P…܀^?鯛Yyś8] pC ŸGˆ¦m­UٚĆ;e?`μM,ū”żv «Æ7™3osęmbÕŗ¦¶NŖ%½–^ˆKB!ŗŖĮč“Ēa>mĒ{Ś’Ūč9’B§g®AĻDčĀ{@BzÜs®\ƒˆ/DĻtT”«-…žEŹ¢åÅł¾A ®CLō tЬēłĖ=ĻSēéć1čõŖįŅ0…h "˜%„sPøą½ŸøõłŽOķöœu.7·Ž½”[ļ^ŹG‹#Qž£}•„KĢīF”RŸE»Ü/ŃEr7F»#]•,BŃY݁žĮg‘ēų>m¢gĒCmÓŹbtį ­č×ļŠk'zžĖ†ž] |Åęo”čķ™F£%č€Į"tցד@&ž·]”y2zķc:ĖtÖĆ@Ļó.T ÷ƒž”n¾%’ˆØ EMż/]ŹĮāĪ쉠JĆ0žķNtr•žŃF$ „¢³ U5Ų׏§ĻæÕŹēXēłh­­ž–ØEg,lę¼÷[pÆ*ąõ0ĒŹ-쓇D)µŻ4ż žAa‹ÅÅŚŲ³ęJĻē”¶@ļŲ ;ßŖ…ˆ2Móöüü|Y :4 !„Bˆˆ0M3ؐ侠E"„ -Åķn’ŹjEeU· öT+„īĢĖĖĖvG„hŽ„B!DD˜¦¹V)’AąžB ¦éFEqløas³žŪČ7ß²sOuunl1z¤;8öČ f^?œ Ēe†½~Ͼj}v-¾‡]{Ŗp8¬ōļĻyēōēö›F‘”tMu›Ü7ńĪ¢ģŚSÅĮāZLz¤;1,™‹'`ŚåC±Zż07Żõ5»öTń{Žį˜ńéüTĮĶæ[Źą §¦ÖŻŠfµ*Ün“Ā5¬ŪXŹKÆoć_9ĒqköØ ė·”sŹ”…ģŁWÅ¢ˆ³R\ZĒŽżÕ|÷ćA^ysŸ½9Łoę¾ŗĘĶ9—-āū•z7Š„x 6ź]›·•³qKļ,ŚÉ«ošĘ܉X,A€o¾+dÓÖ2ŠKĘ4“UTÕóɒ= ˜Č„7|ŚP 01ĮFeU=Å„ulŽVĪ«oogŽ3gpńä’96g×¾ž•óēĻwć_ÓD%² €B!„ˆˆœœ½»„Ÿ‚]Qč PYUό;椦ÖĶłēögهēs`ĆÕT\KĶĪėXńé…Üš= Ć0łŻ_ægūŽŠ {¼žīśõŽēÓ7&Q¾m6\ĶžuWńģC'“˜`cĆę2}f­ß5ĻĪŻČ÷+2lpŸæ5™ĀõW±ć‡+Ų½śJŹ·Mć½—Ļa@æ>ųt7Ÿ~Ńņ%ćŪwTšĶw…­{öWūµß1s4óž9É?ėö9ccu baM߁?‹EqÅEƒBĖģˈaz)üŽ}Õ!Ļi+åŠĀ¢ ß±Iˆ "¢JY!>ņ×ČŽÉ IDAT€wjąą ō?āĪå—@pS“;Ņ™I !„B1†a|Xp×>Eeµ"!®}SÓ ~ŅŪ‰{ĘįÜł‹Ń̜>{LšÜXߎqaÆKˆ×o„kė æö‰§õnųüĄĮŹ+ė)+wQē2(/Æ£¤ĢÅ ó·ąnEŗ~jr ńqįß¾{·¬w·ļĻy}čMO7äååÉmkš‹&Ž÷–£ €×ć¹>¢½ĶC,Fd—6t;B!„“ŸŸæŻétž„OڱaĄŗĶŠćĒ·ļĄ“²Ŗ€¤„ą*ż¾v+{č ¦Üįøź īty/mfO˜ŁųCŁĮŃDC4­Ż2©ųóöī‡r˜ÜŒ't č‹.ÜY ģźBœgR€zōŅ‚PĒū”č5Ą~ ¤™žY=×ō\裿ĄŠ!Žē]‡ĄūčŻ Ā§īˆ°$ „č”LÓTJ©č””ī¦OŸ>Šf³]œ 7M3 hŲźHˆĪĄ4Ķ: R)µĒ4Ķ ¦i~ ,ĢĻĻoīM„ˆ¾€¾ k6)Žß¾0Lż2ŃŽ[žź÷K™ūņbV¦œÓ>½āIIŽĮ¢))vŅRģģŁWÅ?ž½Ŗ};ÖLÖn ¹ž’ż(tGŪļyL hŸÜœ’˜° XÜ lōiļģ¾N÷iOž \‹ČūZ <Ģ hOž\…Ļ–»‡G„®gąėĻĄ[ĄÅˆ“€¢Sz¼ųł±”¾pĘ])×=ķ¾t999¶;vd›¦ł ąXÓ Ž„j¢£3Ms(pŖR*p9ĪĻ”Råęę.ŠvßDh¦i¾§”ņ ¬Ś 0 …ÅŅ~‡<³÷%e®&Ļ«¬Ŗg’bVśō Ÿņßū «yž•­X­Š/Ž=q£RCž÷ų×ÖótŪw*Ź*‚.›ĶöI4ś#‚ ó<śę>E×ųXžEp p4:#  š6: °xŲ‹ąĪņŃYO{®±ļ'z®ł(ōÜk p!:üØDg1 ÷ōé`³§ķ»żD !:%7„LžóHé H²²².)((øŽÄZˆ®%8×4ĶsNēGĄŻyyyĖ£Ż)įĻår}d·Ūkń)0sęĢ—Ėõ!ŠÅ؆&„Wlom‰8,ŽØWļ¢5ÜŌu”Ö•°»f7•˜ųĶŸ|ćt:ļČĖĖ{:ĢmDĢ›7ÆĢét.BĻę5ų~µ…ŃGøŪ­GÕĖ„?Y²‡æŽ}tŲó–’Øw < 0Kŗõ¼‰V5µF“ē}±t“Ē;ӄļW‡|e™ŖQDÜ@ĀĻ€§CŸ€lgņķč÷zBžGNmęłīy|€ąĮ?ž¾}…^f0Ųœķ9ö‚’›ŠYz®YßLD+I@ŃŁuŪ ĄōéÓ3\.׫čņārrĘÉ I‚MɟyŃuT»«ŁX±‘/ æ ŲUģmŽžr:ć t{NNNטVķLӜƔņ ,_­øņ|°7]“/b.š4€_’iĖVä’ž¹‚ßß1.ØØß{ļbĪ<M|ž¹į·ķk©įC“P Öm*įėe…œ|B¦ßń:—Į#OÆå“%z’ȼW·±vc k76n\1lpæ¹e,gŸŽ‡‹®ż˜ĀžYŠÉ‰1¤„Ų‰‰i\[oµčēII¶7ł½&zƵµż†/•UŠÖ§’›¦™×ęO.Zā šGōŚü1Ą±č”|o@®]°)ÅĶ÷ź_GoŲļšļ?Φ sˆ6#ĖA…Ņ#E/ŒWV†8dšŠ_uå @vvöLÓ4Ÿõ~=$aW ø«ź˜ūC і*źĖÉŻ–Ky}ƶŌ.‹Å2aΜ9?D³_B»ńĘĻ0 cq`ūļfÖ3d@ūļJb&Å%u”UøHˆ³‘‘īĄjmŪ·Ć%eu”•¹°Ł©)ö %Õ»ŸZyē“ @C‘išżņóóep×¶†”«ą7•ąõp5p)°ž]ŸOcq½–čCš6€Ÿ{>O§ł`×»ĄtVBø}0G,>D/šŗų7p;Ršuæ@BŃØKgÜrĖ-‰ÕÕÕõ~“Ź„ż.;¬Įq]1ūj÷QZW‚ˬĒetŽtTŃ=LÉ%?ą6Ż1†a<LŒr·0gΜ%N§s=;”|ü•…Wµ’Św‹E‘‘ī #ŻŃüÉ’šl'µ™™ūΦĪ‹æ ™eš¼ ž;œjĻc¬ēqz)@Æ&®‰ޤ±€`8ŪŃ€^„܃ž{|zĄļ]ū?€š'z9×Dü"$ „čŠŗl ŖŖź7J©ŽJ).ļ9qÖÖļY½§zėĖ×±±b#jD¼ŸBDŁYN§sžÅb¹Μ9«£Ż™nĪTJ=fš¦ß²ŒÖZ(,r“™ī2ё}óƒ…ņŠ f·a2+Ūqyg *ļSŠ[ź­qī$ō.+Ķķęš9p=p3pGˆćńĄMčĮžŸk~üxŒš•€Ī؇ LĻJĻcSĮ Ń !ŗŖ.˜9sfL}}ż¦g©1ÉcčŪŗ‚UjšYį§l(ߊ]¢#™fĘ5N§óe„ԟrss›Ŗ8-ڐałJ©|Ž“†N!Ļŗ¼óVĄļ®źŻšžēĮ³’J©×ēĪ»% ]M«õ<&ū“ݼNēų(÷œ3ø]ŌļÉfīż2ŗb’ķ蔾÷€}č1fōƒĮĄ<Ą;Ūšŗhą…č >B/-0€AĄžkž'øHį&Ļćčb‚[ŃŪv‰÷yķEBˆ®¬KźėėĻ4MÓ[q—Ó2Noźt?†i°øš3¾>ųuą>źX••4{‹»„k„ŖŠ®ÆĪpQkŌP\Wģ]ą„€kLÓ¼Üétž=//T-ŚH~~~MVVÖӞ @ƒe+-L>Ć w¦üJ:“%Ė,—†,ž÷pŗ#šēŻ‘”ÆOŪō ’^ō } Żčzßś”ŠeT?CĄ'°-1zpžžń÷Ŗõœū :Ó`BĄ5õĄ\Bļč²˜Ģ@ʐ@«H@ŃÕu™ €a—(„_{:zŅĆŃ£E×ÕŗkY°ū 6WlökO“%2&y #G20a JźĀŠNĪmŗ)Ø*`cłF֕­„Ź]å=džž}¤Ķf˚5kVU·mć1ō¬]Ŗ·Į0ąEn¾V²:‹ŹjxoqȚ3ļååå-mļžtc;Š…]Ķ<<‡¬ūz] p(0HAĻŅļ6œš?ŌóXŠ^œŽp¬ēэpŅ”\_T³_±rŪōz,’«Å„ŠŁÆ„¬śoŁłłł{ŪæWBˆH@ėüųK˜cVą·č½1’ā9·¾śÕ–†Ē Ķ(D'×%‚ūj·Ų¶[ģō‹ėÅŽŃ1ŲRlō¾¤7Žžŗ Qxג/qoŻŽQTŒJNĀŚ·71§‚učTtęßM¦i^­”ś4ŖļdœNē™n·ū@ÆĆ¹Ļś-Š×Ž·2uŠ;B=-U[§xęE+å!?ž——÷N;wIAˆ7š :Š  ls®ņ|ĒU›fiāš8 D‰–°l“M€ĀŠžYŃuś @©Ļģš= …¬„Ż›£—ƒ>WōĘoÅŲ½‡Ŗ'Ÿ„nŃĒ„,7’ųÓŲŽGü·b;j|OąÓ4g(„žk÷Žw>*++ėvą!"ōžņ“Æ-ōH7™xRkß.‰Ce÷Ŗ…”ė0|SQQń»öī“"²$±*²Lą'ĻēiĒ~¼ģGāŻ@špų½K¶/Ē *Ļ5»€ūX '0(ńÆ>&tŹ]oąßĄ:Ļy.OwĻ£}Īāyž-ĄÅž¶W}Ś~ås®øų (EÜĄ^ą ą¬}¢#ėŌ…kݵ ŸĒ[ć£Ų!¢Ļš`„÷„½°Ę[q}ó-„×:©ūą£Šƒś•«)›q Õ³rb€Ł¦iNlÆ>wFŁŁŁIN§ó„Ō£DxréÕ÷¬|æZ™ķĮ4į„·­üø.äš`ŸŪķ¾BŖž ŃłI@d) ēó>ķ3€Yč÷rō`ŁōĪDŽ~ć9ß KŠu>ģčæFx>ĖŠ³’c³=ēMcB&š5:+į °]“°0 €ø˜€“ĘčšµĄR`ļé’%žėZy_!¢©ÓføĶʙ2‹’ÆčŽzMé‰-ÉFżņ”’śnpµ°¶ŸiR=+Kģōi1Ą‹¦iŽPJ•·i‡;”ģģ쑦i¾Œi‹ūäæjĆaw3n„d“„×?°ņÅw!_7j”RW<÷Üs»Ś»OBˆČ“w‡‘5 =Ó¾ ]0 x(C°O®DøĘ€;€÷ė ü=Šæ˜Œž©/.óœ3@ø=融^Æ?Żē>·£’/ ‹žėéƙĄ@t”æ$ąĻžó¢ƀ7=mWų“żĒÓv p3°8Āsæ+=}ƒ.č@/ ¢3Q`>łHÉ æŒvG„­?8ŽøĮq˜eå”ßż§–ž}TżēźW®żŚžŪH÷±³s:›¦¹”Čž‹ōĪVÖl’·­mĮ4aĮ" }ņēkš¦éĢĶĶż¢½ū%„hņ—“u.ž ńń<šēq+:%Žk":š_ą»÷\Nć·¢оJūš_÷æųŠół£č}/½lüƒ ēxž©÷e „čĄ@k\„Īzųž^ļŸ}‘­¼·Rš”„č|RŽO :’Ģā’fĪĆ0ØzģIļWæ2MS2'œœ[vvö?ŃKżR"u_„Ōó¦iCg2śqÕĆÓ/XłöGyėI†óŽ“ņĮ’Šó4¦iž!??’åvī–¢ É Yėėł§ųžiō=«›øn‹ē±@ūVō >ŌólqĢ›žčū»ķ T ė„āņ<×1čņŅ&śźkē±©ļm3:°ŠXŪĀū ёxƒÜ•zŻ3ŃīŒ¢y»…øq`Ō¾żīaŻ«žĒUø·mĒ:dp:p:°Żm9ĪĢ;v¼dšęĻ"xŪZÓ4ļĪĖĖ{ `ęĢ™»\®÷Ó}Or’š•’2ųłé²ąpÕ»!o¾•åkBULÓ|4??’vī–¢I už@ĻŗŠE§ņߋžOBÆłH÷<މ^kŠw«œĄŠ]į^ݼA–VŪO*›9ĒTH¦åo”Ć' Ī,š:Āó(ÕČDg&A!:GoʦØ_½®aö?ęä Ä^{åæŗ •–Šć¢ó©}łUān晚_!öŹĖp}³ ĒEēćži'–”dŖó_ĄŲ³חß`2ą4ŗq ;;ūxÓ4_5MsPóg·ŲNÓ4§ęēēćm˜5kVUVVÖEJ© ˜x1Mxc‘•ŖjÅÅēŗQRšTÕĄÓóllŽśؔz*//ļ×ķÜ-!D;@ė£gŹCY‹^÷æ]%ßHōy 7`ƾĒ??’ā ±¦.€šŲIžĒtA(=­Ł¢PˆŽØŪ, ż§÷ äŪRŹ~,kńµ #Č8SĒA÷¼²Wi[ģ>*ŚSŸ©}ˆIµQŗ¼ŒŅļ[/n_¶$ĪlģŚŻŠsņ‰Ō}¶ėŠ!ÅÅØ„āīø…šÜē04¾üÖ¾õ.®Æ—bIOĒ~Įdjž{÷®†ŗ~ķųmt(ŁŁŁ3MÓ|]8R[­Ö«fĻž½/š@~~~É“iÓĪq8o”/~>Xb”ø ®½Ų=&‚=źöT<ū¢•ŻūĆFOĪĶĶżķŁ'!Dū‘@d}žźÓVćyüz­\4ŌŅü ¼÷xĖߣ7~o­ķ”P÷ (ˆIÕļ°-ŽÖ­æµŲ- ×bi»©ŗä£’ØŽQ«øõÅŽ:*{F ±żćĄ0)[Õ1 ŠŪ’¬Ä¤Ę`ķøk±½’N͊ T|<*!÷Śu8¦L¢zŽĖŲƌĀõŻræĮæ/£“K²žwe–Wx›SŪŗļMVVV¬RźIÓ4³#x[xbŠ AæÉÉÉ |ńÅ‹o»ķ¶sŹĖĖē)„.<žķöģW̼ĘM“š[;ŠF?¬U¼š†Ŗš‡M„ŌßrsssŚ·WBˆö$€Čr”Å >mŽiƒōąÓœ‚.øĘŖū‘“]½ßAųTżžč …Š0ĒCńżŽĀ®BoMų šC+ī-<+™wœłĻh÷££Q„·{JĮ“?_{WŚõyŃé‚”łóģưKbūĒ‘łó˜õ'Šø+uĀJÓ+ÕģēLÄŲ³ėØXōCY,ø–}{ŻāfdQ=gnŠ=lGŽĆ]°KF†·9h¦ŗ+›>}ś@„Ō«čŒ"„ČĪĖĖ{µ%'?ńĵ999WĢœĒŚ£ųēÓV®»ŌąčŃR W=Ģ_heɲ°;—RjFnnīsķŁ/!Dū“@Ū± Óé½kŚ.r ]Ōo0ų²ś²½•ąĄk!ŽGÆÕ_¢Ž€AØ*æß ū}”÷ ø 8]?A EfĆNĀ#Źs=„ԜGJ^pt«L!:‰śr=©l:³¢’ź·‚iāŽ¼ •OżŖ5Ō/_YU…mŌ\Ė–cģŚżÜ³±‰QTLķŪ żīģh÷o&J²²²¦X,–LÓLkžģŪ`ĘåsēĪ]Ӛ‹ż=Ÿ Œ¾ =Ļ?ų z°>;ĵŽ7;÷”³özśŗx½…ąŠ; ¼ƒĪ °™Ą5čĮ’2šŽ)@4”8¹ļ¶”Ņ]uDvŻ„8|Żs9€@ķŽ:ŒėąAX ī“ĻŽÕÆ\„?Ł”wÆ­_ķæAMP6€ÅBĢi§xæZŌ6=īPTVVÖļ”R÷™¦ÉuoĘÄÄÜ0kÖ¬C-aęęꞎét  2½&~ł½…õ[×^d0śÉØwĆ¢%>ųÜJ]ųÄØķ¦i^™ŸŸæ¬»&„ˆ" DŽAōly&ÕōÆFü'{>ķ®q£āf}ÜÜä„8īžql6:åīXĄ›ö1p:ļ|ōĪŁž@?¢æqˆrŌÄś—¼° ķ¾ˆ 8 ™?ļ%ÖJé÷„Ōģ®!qT" ư§Ē bFAŻĮ:*6TRµ„ŹļŚų!ń$O ŗgŹ1ÉÄm,yR¹©’ŠuzeSś©iÄdŲ©ÜPAåÖ*’Ę&?4{Z X`׋»qWŗÉœ”‰Åa”bm9•›«‚žĆĖŽÓNŚIzr“š½ż.’¼eQ$ŽJ ~h<1©1 ėŅZWY=5»jØXW»Źæ>lĘYŲ’õĖsLŖ~TVEƋzłwą£A׌3ģ$ŒL ¶Æk¼‹Ć‚Qcą®6ØŻ[Cåę*j÷†[ ¦k6$O"n`¶d+– F­AŻAė+ØŚžēё˜†IåęJ’Ę%{ŻÕTŽ÷ÆC¾—cņ¹X2Ņ6+„VF¬“е×^›ģp8暦yIoė6M󏳳łä­¼¼¼§NēĄ| oąńƒÅŠĒēZ™p“āņIIŃZ,eė6+ž÷®}Ÿ£”ZPSS“żā‹/·_Ļ„Ń&€–yŲHĖö±æ ČĄ-ż^ōL’Hąxō –= æX‚’ŚüZąJō®”Ģ>B„Šmń\ø&’ tātėŌ;=Ļæ?ĢsķFgŃYŪ}Ž’ˆĪ*88ųØ÷|oŃŁ†?L¦É&„$ŠAIą%‘€5ĮJķŽZzü,G/GŠ9ŽŽ’Ę&Q±”’}oļk>ĤŁH™ņ|GļĘūųÖˆG\’XL—AźIi8zśO *O‘Ā„#ā±Ę[=åš^[‚µ”…(|Ē6¶D}¦öĘŽ#tāŽ£ƒÄ‘ ¤ŸžĪžwöS¹¹q§ÖųĮqŲ3®S}æE‹śm-“qV©Ē§č|®ā‡Ä‘vrå«Ė)üą¦į?0rōvŠēņŽXć­Įżķķ il"å«Ź ūLńŅĒ$āøųj_“śõ[}•œLÜ­æš~yoD;ŲĮdggešęė¦imžģ; ”ŗ&//ļ£Ž“¼¼¼Æf̘q¬Ūķž L uĪŅV®·0ł 7gŸb` žgŻ%•”Į«ļYł~u“ÉuJ©»sss#ź+ź„ķM-³ĪóŃMķ¼Įóќztd;œåžPŠ›ø¶x»ĻØx“!¬“ IDATæ‰ć&šēC“eQ1å5ŗS žz“äyóĪŌėŸvg:›ōSÓP6EåĘJ*·Vį®p£l {;Ić‰I!qd5»R¶«Ż[GÉŅʤ©Ō ŗ8{ÕÖ*ź ėŚkv—ŗN§3\%.*7UQ_źĀ4ōĢ|¤ōÄö guX?;ˆ£—Ų~=IΟEÅo~ߢLKz:‰Ž‹ķč#AWžæB)Õå²Łrrrl;vģø7Ta½Ć4«¢¢ā¶łóē713??’1§Ół!ŗŽŃ)”N:X ϽaåżĻM&npāŃ]'# ¼Bńé7ź’·wēń‘Uuž’_÷Ö^•Töō¾°Ė¾©€"ØØ,2ø (ˆŲcė̈¢ĪĢottÄŃqŌļøĢččŲBw¢"āĀ ""‹ ū¾4K7½„;=©¤ö{œ[I%©TŖŅéĪŅļēć‘G:U÷Ž:¹ÕŻÉēs>ēsųӃ>’„·ö+Č? ƒ_؃> "2ĢŽM|Ed˜^šé1HE,ėßé¹~ÕLd.IķH ž œŒC’“żšÓņz¹Ü^ žĮ,OČ'óe×Ūg{²¤v¦Čöf±SOń…—FLŗžŌ=aAÆėøtßoV–Ł!›PėČR‰˜×7ahóŠøąųü¼K÷ŸēÖRa7ļ²ė×ķ¤v¤°“æęĒÄ>’ų–/+y¼ŻŲ@dõ‡Ø»é§…ą;p¶eYó®ū’„—^ŗdĖ–-÷LsšŸr]÷#ėׯ’Ų>ž‡­_æž¹+V¼ ³óŠ„ĄŻ]׿ĘĒ?’G€ßßm3˜»©õķ»ą'æńńł’šóū»' ž^æ~żśĖü‹ˆ*DęĒ&„N s†å®ūnļu!UTf¢€³ 7ąķén[ŲA'³g’Rmé½üøŽš,Ÿ…å·psæÖŽėŪöųõ‚^/ƒl_v\SĄ±²]#= į{_H®Lö^¤¶§L‚aÅMłdž¶vŅōęFāĒÅ ½÷]„Žū.ņÆn!æéUÜīn¬X {łRü‡æģṑۀՖeķšĮįļ«V­z“eYæĄģą3]¶ŗ®ū¾™ź&å•W:Ą÷W­ZõK˲¾|˜ &ŗśpó>~÷G8ę5o|­ĖįĶžåC)xģ›??bńźŽŠęšŗ-ĖśÜņåĖÆņīˆˆ""{–T!Ÿ,’{étė“É{*ŻžĘ͹ŲA›Åļ_Dāł™®,¹¹ÜpŁżtńטåNŅ!P?y•„“v°CöØŖĢ«ZHMņ^ä]s~xnŗy—Ī;»č{¼Ÿ†“ė‰3[®\1öŠ4¦—Ļ·-˚ÖĘu³Åe—]¶ĘuŻļÓSRcü޶ķK®¾śźŅėTö” 6ģ.»ģ²Ė~|ŻuŻ3&:6ļĄćĻŁ<žÄ¢.ĒįrāQÆtǵĮ!xö%›GŸ±yī%‹\e’}e€«Ąæ¬]»¶ŠĘ"²?P@DdļP R{q6~&8)‡®?uŃü¶f‹Ä^3ŸOęÉ'ņf ĄŽżO ģQUC!- ±ü£„KŪK±üÖČg/PI#Ä|2?ēŁī,»oķĄ²;¹‹?’«ÉQ[[KCCĆÆĻ>ūģļ[–5y‰9čo’öok’ÉäÕ®ė^8—u-ĖśęņåĖ??Ūf˜×­[÷š¶Õ«WŸ|³ Ņ„‡,ī{Äā¾GlBA—Ćt9ā`—ƒV8,n-. Ł»2YŲ²Ćbć&‹ē^¶Ł²ĆĀ©üĪę\×½ųź† ^Żkƒ‘9M ‘½gž%Ŗ-żžC„āÓ©ļń~’ŪRŌYC°)ˆ?īĒ_ėĒŪų">|Į– ±CcŌ½¶Ž¶Ÿļ$Ū›üĀ„ļÕ\Ć)5Ū_A.¦Ü’†¹Āu\¶mŁĘÖ!³“ß²¬§Ī9ēœr»ųĢi—^zé”Édņ&̶½Ó„ßuŻÆ_æž7ÓxĶi·~żś»Ó.»ģ²SĻŗ®{“ōĄJg,žzĮā©|D°r©ĖŅ….Kø,lqint‰E¦>.ׅž„Åī.hk·Ų¾ĖbūNŲ¶Ó&_}*eø*ŸĻ÷ŚkƝwż*Ddz) "²wY.Ö¾Żó“Ōg.¹f¦3Å%ė¾Huu±vpä÷ģé.}Ÿy峙Π]w®ˆ¶ƒ6žZ?ž:?į%aźO¬Ć_ė§ńŌŚoŁ=„Qņt{š¶vV~~ä}©¤”µ eß[µjÕ_Y–u-P?—}ŅqœóƹęšW¦ńš{Õŗuėīī[µjÕ!¶mÜuŻKęJĪM¦ął—-žyōßżHČ„±jk &ź CŌ+ų ]r9‹¼ć2”²JZ$]-ŗz*.ē/ēY˲®rgƆ z'?\DD €ļc7Pŗ¹Čž±-‹ußīł s1 ąę]œ”Y÷ķW÷c#ŲlŌ¹ŽK>¹w׎O»IāÜ‰Źążu~|a_Éy'ćéʐéŹ0“i€†“뇷 œŠĀŗ}+PY²²Į2‰7ē‚ łĮ<¾˜Ļ>†“‰b¶—K·gFĶ4ļ5Ó09ķd]|€o’uīįE„慆“ˆSĖŠę$;Y~F>ē%* ¼'’ķ2»­źżęø2·ŁņY¬üÄ ,Ū¢ćöĪį-3=Y"1ĮÖņ1PhA˧ €Łn͚5ĶŁlö§®ė¾}/›s]÷ 6lųĘ4^sĘxŪžųÅŖU«źmŪ~7š.Æi`ķĢŽnœm–eŻęŗīM+V¬øóŹ+ÆĢĶō€DdīR@Ddߙ³I€ž§ˆÅŁ,AŖ-M.‘3K‚6¾˜šā5‡×ą‹š`<łj’göncõ\Ž`sŗėČ ęÉvgÉå±|™ĪLU×ܘ ŗ2B !Ą’‹Óū`/éŻœ“ƒ?ī'¼(DĆ) ĪŚ½ķ`ŁĮ¦ u'ĉ«ź^Ī!ē®^½z€eY …]×õń¢Æƒ¶mNJ¾ŽÅŪ<ŌX–(z¾Ž2å÷®;’\ŹēóŲcZĶ?ļmĀēĒ>7īöł|ļæźŖ«Ś÷Ö Ģ&k×®Ķwy¬Y³&N§ńł|ǹ®{4p4p°Ųӌc Ų ¼<ķŗīSĄŽ2‘½B €ź%˜BĖ~ĢZ¬JĪi"@ŠTŅćµh:0^§Źö^æŗJZE‡€ÅŽkW³l Xąż¹sŸ&öĘÄܟJ›ŁD€EŽń•ģ?\“b~č¶•,Jb~ŠCåļ¹H9s2 Š~ĖnšßŚDüŲ8vČ&~\œųqåĻxf€Ī;»*ź.æ'śŸ łŒ&|Q­gµ ?žķβõźmU]ką™±CcDˆZbĮy Ęćf]zč”ᔆqĻeŗ²tŻŪMÓi„Zƒ“žŻ2ī˜béö4=)ż_^Ŗ-E¦#C°%Hō (уF&"»īź¢÷‘>:īģn,?6NüŲxÉėYļæū֎ńż~7­ē¶āÆóO8ęō®4øfĖĮłÄu݁½?OxœeYeŸŸģü¹Ę²¬o/_¾ü’۟Kν„Ą£ŽĒ0ÆR`°ŲuŻ&×u›lŪnrǦØ:Ćqœ 0hŪvŚqœ. Ėēóuś|¾mk×®­¾k§ˆČR ro¾œĢčF1ĄÆ€Ļ3>=ųWୌ.ėn¾o×ņpø÷?š>üšM € ¬Kż¦ų/Ą—÷Ę&QńÆĄ»0ĮuĮp7fŻūĆE’ųkL3œæĪÅd·æ\^ā5Ēŗų$p£³ā[k1ūšŽŠ{ę¾žĀčæ;0kóž•Ńß齃ūšfą»Žł…óś1kų’ńI‡÷`¾ßcYMŪ¬eādČŪ½±Dåļ¹H„ę\ĄĶ¹tÜŽIߣ}ŌUKxI˜`spŌLø“2MīRmiž Ó5ńģ{¶/‡“uČO²÷¼›sGšéM\õ=և“Ī?6NØ5T²S}>‘#ۛř¤”ėøģśU;ńck©=²–`kpxŻ{.‘ghó½öbł,jÆńN}Ž{ImK?&Nhqˆ@C`øō¼f€»3$^¤’‰ž‰ū#øŠvĆNŽPOōĄ(ś@ÉܔCŪĻwRsxŒšĆkµ†š-‡Č™J”Wé{¬æäR‚ÄĘA2];Ø]‘‘įfnŽ%Ū“%±qŽ‡zi:½ ;b7”y)aYÖGÖ­[÷‹™Člå%6y""s†:łTę ĄŸ€p¦\+‡™?XüÄ܋™ æx3ė¼x-p(° 8‘å'€c1oŠ;g+š#` p1š!ą'%Ęų$&ø=xh^īĆ« ×Æ÷Ęs*#YķB S-šš2p;°n’{“ X Ŗo¶cž~-Žégš‘¢sŽ ÜˆłÕłNąyļĻK1÷|1š 7ĘĀģĆ«˜üNļ±;¼ń.ĪĮ”jތIz¼ø 3Ū š,¦āą5Ą™˜ ‡F7<Sž—õ¾ŸMŽłÅļłŽ8÷ŗļō’ä8Ü·/^Kö9ǵ¬S>S÷Į‡Źōįų Ū¶_.|ż‰ƒ?A]`üzģ;ŚļąĮīæpPĶA|`ŁEÓ=Ž’*m øÆX~ Ė¶Ź®æÆ†“Įuqö`+CĖga¬=¾OvČĘĶ»ĆŪ’•=6hćd©U`X`Ź÷0˜Ė®Ūr-[‡“ez ½-žžéˆˆČōS@e>ĮȬóŲ8L }2&ØŃ{üß0Į©€ŻĘ4›ł&ąžś˜ē7ļĘ$ ā˜Ął%®w&šü\ žæ |†ńæž}Ź{īóŽ5‹e¼ļē*wfÖżŲ1ć³ĻīFąƒ˜DF“ų6&ˆ?“@)žx#p6šæcž{ų£gļ—`’ē+€-Žć_õ>Ÿć]³Ųہ?”ų~>ł÷ń¦c b’&§c’$"Scń_“’sĮl žĮŪān×LGģęŻiŁ Į™¤bbŌ±{2nwz¾o™S~ÉdV]żõ{·k§ˆˆĢ˜iŪvž;3K\ŖūmSz’ F‚Ѧģ’yJĻÖ;Ąx~S‰ē?Åų ś@fĘŗfĢsļõ>’¬č±³1ö•”žūł¦@©×’Õ’`īŃsŒ7˜Łś/`…Rś#0Aś-Œ°’˜„L0ĘÆ0¾tš[ļχyŸzÆõ0ćƒ¼ĒJ½Æ`ś5”[s_‹ßs‘źY|÷Óu—|z¦‡!"ū½¼eYŸ[æ~żł žEDę7%*³ t_„™ÕėWĄ?a–€YoĀĢzOäUļóĀĻ=Qā± šKĢģ÷9cž;ä'–xćī›ąõ³˜€¹…ń]lŸœhŠeģÄō/x3f†|¬bīѐ÷õbļó e®Y˜Į{F*Ę*¬É/te.œ[ī½(Uęø ³ āż”Žžē&Ģ÷³„Äs"“Sš/"³C—eYē¬[·īėģõv""2Ó“ 2ßĪ~Šłįø 3Ó½³F’qĢZö¤w|£÷ł ą•I®)ńŲD³Ź?>† ų yV`z ü…‘˜5ķö$Ææ¤h ‰ ^æœĒōø SÖæ o÷>?ˆ™/tž*Ü£cJłK)$Ęąi&īŽ?ö——B+ėr3„ŗś Ó`šēŒĻ·`’4Åļ¹Håü‹Čģšp>Ÿßµ×^«f""ū %*s¦Œü˜Ņņ„˜¦sĒ02ÓüL ŽĻH•@c¶ćQLGłJŻ‹ BĻĮķILłæÅčŁŸ7®¾ ^¦§äą)Lý0‰‰„Ąė äļÄÕ#AżvŹĻĪ<¶ć*T7”ŪĀØT2įąHLĄDļł?c¾?•KJå,¾{EüƒŸł4—ĢōHDd?fY֏c±ŲåßūŽ÷Ņ3=Łw”ØÜfĢ,÷XĖ1kę?|3s\(sÓøoŗ8Œlsw&šL5@ž‘мÆÓ˜äĀ…Óųś“yÜū(fcš#®ÅTDœ üž‘™óiŅ·7tyŸkĖÓ:Į曘ų=’:fIČG€ļLyt²ń‚˲Tf+"3%eYÖ'Ö­[wõLDDDö=õ˜œÓ@n¢}ŗ·’ķżłˆ¢Ē`¤ü¼”&h’V•ć)ĢōŸŁRšĢĢz{‰q5S~«Ē’ņĘ*sL%Į4 üR‰ēĢ:’Āż+Ü£ĀŚłr÷č0o|{R*½Ūū¼“Ģ1+Ē|Ą¼ēė'8~+¦‰"Œ|?"å)ų‘™·ÅqœSü‹ˆģ攘\<žCé€zŸ „ą}˜rųS1³ß„¼øSV^Ē1» œ‹)O·Ł»¾Ų½@=#;Œµ ų̲…=-’ėNŽÉÄ ‡ƒ¼Ļ…{ō$fg…÷bś”ņĢ=ŖŪƒ±mÅ4;<‘÷©Ų!˜Ę…Ų˜% ēPŗ ŒĻE&¦ą_Df–cYÖu¶mŸpĶ5ה[(""óœ–T귘ę{a‚ķm˜ ·³Nüć˜Fq7ó ązĢ2€ ˜uģĢŚż£€æöĪłŸ)ŒēgĄæ’¤0»Œõ]̲„Ÿb¶"ü3&ąbf¼/ü’Syż±ŗ0}NŬæ™‘1U «0e’æóξ|“ŌŲ€éĆģøpRŃ9U_T¾©“øĒ{Ķ0ɜC0ļ]©DŲo1ļQį=ßĪČ{~ęļĆŲ÷\d<’"R^ŸeY€ėŗ.Š[x²¬ęg7ŽóiF– Y–•.z~€¢ž7–eõÆŚ¶ż‡«®ŗŖøQ°ˆˆģ§”ØĢßcæ]Œ ¼ĒźÖ`‚ą‚ŸqĢ~ńŸ)qN¦gĄ§0žŸ_Ę̜’ŠŅ[ż=©ų>&ŲælĢóią›Tæa"WašüZāł-˜{ŌVōXaÉĄå”^>P8gOiłf©Įg1k÷‹Ż‹Y ńµ1³4āĄWJ\³ “ øĒ&ó™‚‘¹āO®ėŽVų¶ķE;āø®Ūēŗ®`Y–kYÖpī8NĪ ¼šūżi×u‡Š¾N&‰Tį뚚šÄڵk§²ŪŽˆˆČS 2 ĢlōĄq˜`²Š…’eL¹©Nņ’ƒ ŠĘ”Ą:óļĀ”Ągʱwݱõ p<ężŪQęø;€Ć1ĖĒ̬bšJš‹}Õód]łKŁŽŁ*q!¦S~=&€ž™ąš9L'żŽÅ,µa*Ū½óœ1ēüå’ŽśočŸĆ’'az# ycz“H¹Ń‰†ąRą“˜{ŻĢč÷üÉc”ąV³Ć6¾°+`įf]œ¬C~p¢ŻE+ø^ŠĘ™7ēā¤ņÉ©_Oö-˲ī^æ~ż7fz"""{›ÕéžTå99JwĒ/å¹*®ūd…ǹ˜@·’ ~ #Ķł¦j—÷Q!ĢR‰J<=Éó;˜8)҇ ōĒźaāķ{»*šˆgž’-g¶?Ęl¤Ńyg}•*:Ƃ%\BxQ\h»a'ÉmÉÉĻV|l9žųŌ~ų7ó-ų/HķHŃó`/ '×Y¦īųŗŅK,h=«Ėoįę]ŚoŻ›Æī–X^@zw†ÄĘĮ=·e[4¾©0ĮśŽŸ¶‘½6?ŸČ‘Žf๋޻ČŹuĒÅé}ø—\_näz>‹†7˜äFzgš7“į–ØČ'ódŗ2 <3ĄĀó;4FĆÉõō?Ž?ᑽ­Ōög""RyüōÜßCz·Łq¬ń“FõqĒԟXGxI€īūzČģž¬§i ŽO¦j„„—…ńEĶz’ī?÷Œ žĒró.wu™/,ˆõ|dłčė• žG_ŠōMp;h= 2µoDDDDdØ@DdĻģĮ?˜ąx÷-,½t‰Y pV m7Œ,4h<Õ̶§¶§č}xjåī–ĻT”*ēÆVdYŲ< ½2Tž`O¦3C¶7K >@dy˜¾GG*üu#IT[ŖŌéćä9r½9"Ė#S®jˆ, Ssd-”A|1¶ßĘuĢŽŁŽ,CÆ Ń’ĢĄÄI Ė”ęGŽj b‡}X>pRf„ŌŽĻ'ČtŒOŚ“¼£™@}€ž'ūInKQw|œČQu~,ŪbėÕŪXpnėšń¦ ”Ö‹/\4üx>åŠ~sūčał-āG×=(J >€¶±,‹|*O.‘'Ż–¢’é²ŻŚ9ODDdO) "2uūMš_éŹŠuO7Ķom"²,LŻńqśė)żX^Ļ€ŻSnxWXPŖ °}_>•ĒIM^J_ØRČöd«*½O·gŌĘU9ų"#»8éŹÆ—O;ŠĘS­–·7?.^ņ9_ŌG !@ō€(u'ÖŃvćĪQĖ Ē,:!”…”ńēGĢłį„aź__OĻ=t’¹gŌ1”EaB­Ar‰ügvgčŗŸ\ž|*e[ų"6‘•QāG×h°š¼lænōnØ Īk%“0„ėø$žO0“)In ‡›s±Ć6”– ńćā4¼”Lgéž µG֐jK3ųŅ ¹žø.ł“C×=#ĶkZ"Ū›„’©įĒŻģčūÕzV †ł”<żO Śž$ŸtĄ_ĢG ŽOŻ u4½µ‰Ø€`.`IDAT”ĶÉIw ‘‰)0’ā6`g‰ēŽZ€NąW@#pžŻ7Ć™ÓöŪąv’¾ƒe«—b‡lüUėpÉ÷ąK&Ÿ*«h Ąŗćć%g¬‡ XD–Eˆ,‹?®–æÜ5n†Ł˜†•T Ė{ĒŪĖ$$¼w:Ū3’ˆ¬ˆ0ųāäåüśžóćÖVßz§°ƒAzgš?k+Y‘Ų8HzgŠ–3[- ^"Õfś5D–…‰,3³š»×Qrg…ä–$żOö³ä’%›ƒŌX7įR…īūzčy gÜćÅ;„†Čõē&ÜłĄ_ć#²ŅŒkׯv‘Ś™.y\ā…AV|l9–ß"²2Bö %DDD¦JM矒֔xī[ĄĖ˜ ’GĄ¼ĒĻōĪłå¾ Č·’žÜ@Žo‹¼ŠĀvĄ"?˜§ćöńŪęU£°žæpŻ|2Oßćżģśõ.v\ßĘÖ«¶±õŖmģø¾Ī;;‡› †ZC,8oĮųėł½å%ŖŹ)² I€äö‘č¦77˜dFßŪ“œŻ2\ÕPO„õįņųž‡zĖ6Fx&1\‘Pœ8‰Lõ@¹m¬k–s”E”QļEA¦#S2ųŸŠBu…©ä(üä‡ņ m"Żžžņ²1T0÷œ Ü \¬*ń|č’c?ų Š |ŲXtLĘ;g&W~ųšWĄ-38‘rüŪlĪuÜŖķqŠŅŅŁī,mæŲIn`|ł~¶'KŖ-Eßćż“žÓJķ5D–†‰ehóH³æį ¶Ś÷ŠķQ° ]wu³šŻ ŌłYŗzƒ/&HmO‘ķĻ™ó|ž?”!jį‹ųČõēĢŗłźā‚MEMw”o:č:.‰ƒźü8™‘ń›MuFŗ}ā » Ūm*–mįūÉöŒžmŸh–~*†“>o9E™*]æmŸš9©œóĻ<~“÷ł§˜`»ŲMއĢRn§‹ućLc:XŗO^Éå{WŌšS ž –3›3³h ąÆõÓņŽ–q]Ž«įęÜį*‚ŌŽTÉąō ŠyG'5‡Ę°ü±ƒG'†ƒĢjėŻŠ‚ž±³īƒ/Ņž»Ż“¼­;lS{d-µG֖žćŅuWĘńcć“o8vŽ–ƒnŽ·¼””Ž?tŒ{¬°üĄB &^RQüz`–XŒå$'C„2ņÉ<¾ˆ„—,!ńB‚LW–Ü@Ž\Ž|"æē „B CĉńŃ ?JM} ńxœL&ó÷W_}õ»{€ßwY–UmŚHDDdÖS :°XD>`;„׌[,j03훽sNJc~Mķ|˜Yū%˜ułIļõ æe†€ļĻNŃõ"@ÄĢģG½c[¼ē{ŠĪĖcfż}Žkg1c5õŽ8:1K Źż&Ų€ ̚1½vÆ2ŗ€Ó_ōżx{uQS4¾40vß.?p˜7¦Šå„Ü/j>ąpĢ=Čxē¼8É9³Źńm.œéqĢ6ßī½ž—ī¾HüHĮ’h­g·ā‹ųp³.»nn'vp”¦77QsXŒ”£jxfj}ܜK’“Õ#9i‡ōī4įÅįį^Å×J–³—S|¼“’_EāłÉW“ŌQCtE„@£Ł¾ņÉ<łĮ<É­)Ļ'Čöfi}gė„×*;ołĮžl‰XäćG×?ŗt¢¢»Źå Õró.č4=$4œŅ0ęČ ęÉöfI·„č}¤Æ¢$ČDB­!šNoī;Š@żČs”P 8ÖūøxÜuŻ“,ėŽ)栈ˆČ,¤@åV_Ęņcżųšč˜ĒϾł…¢X3ĖšiąÉ¢ĒļŽĪÖ+¼ĒW’ ¦ >ą}€ių·ÄūóW1„ž`Öō‡Ńż¾č}<œ<é p~ѱG’ ¼©Ä÷¼s?~4ęńŽcogüœŪNąkĄ÷½ÆßüqĢ1?+śóWxŽzßŪG0Ɋb]˜ūõeLŅ  †łž?ĄH¢” ųžwĪōMiÉ|¤²’1ź_[7DuŻŪM¶'Kļ#}ĉ^¦łŒ&S滵ĆālŁŖÆxū¾Jų"^óĄ¬;įŗó|2Oߣ}ō=Z*Ÿ;šķįÕ6#œNŁŽģøķĖqö éP©Į—Łņ£­ŌQC°)ˆ?ī7µ~,æ…æĘgš. ?.NŪ ;I—é0‘ų1µ4æ­Ėg‘H9ÜśL’{_J²¹3Gļ CČžMĮ’ĮÖ §5Üž¢ļ1/ų-ģ šį„ŲA›Öw¶Šö³U—p×¼¦†Pk|Ś™°{|)#eś£_/Ū“%¼4ŒÆ¶ŗw~ļųܘ$†æĘ‡å·q²NU³ŃÆį]¦»ŗ¤ˆ›óv#Ś£v#Øīę¤Äó ŗļ›ž~Ó)?˜§÷įńI_Ō‡?ī'¼8LĆźńE|4ÖHŪ/&+ŗ­žõõ4nžĪŽōč ’sw?}ÉŃń|g"Og"Ļ“Ū3\uļŸTÚÓj-Ÿm}SõwŁTæ?‘ŁD €Ź|Žūü.ąö1Ļ}3;’YĢģō—½Ē’Ÿ ”*!üf¦~ š/cž»ģ×Į>ę}>“xųXc’‰÷q)&šĢ,üd>Š ž×Nš:§`’Ÿe$p2&ųæ sÆĘŗxsOžӈ°pķļb’Ķų&€ÆÅ܏‡€73¾Įį—0I’Ė0A}¦JążĄƒĄ?Ė’ļõ߃Rš‚’1,æÅ‚w¶bł,œ¬KĒļ;F¤Łž,]÷vÓüÖ&“RO÷Ÿ« 8ĆKĆŌĒIU—(ģΘĄ.ć5± ŌłńE}ä‡* ŚC‹ĢŖ¤±{ėŁ­DVFHķL³ć';*ŗ–“ 4›@¶+SŃ9Ććµ&o”°š= ‰eąŁ»oŻm®į­Ū·“7B°|ÖpÓĄlO'³÷&¾C Bźżf¹Äöń óCyņCyŅ»ŅX64½„‰š’p‰+M,vp”¦Óq]ųŚ­½üö‰É·mLē\Ö’y€gŪ2üæ÷5 Ś«]×}Ʋ¬oWõā"""³¶œ\=f–ž%Ę’×xŸ ö"˜ķ§(üƒ™8©Äs’ČĢväSĮ#åśc=€©B8“čĄ,yųÆ ĪyÉū¼øŹ±¼ÕūüĘ’»1M›Ą‰Žc‹0æ¦t‰’‹ĄßWW9Ł?(ų/”éĶMĆĮa÷Ż]%Küūė#åsõ'×W°ŗŠŪa›@}`’£ _Ģ7¼ķ]z÷č;¹y俌š×ŌTt½Č²žóßZņÕŃmHr SBﯢ¢ ę51,Ū,|el[“ņ2#÷x²~z3®|b¤Ō?Óe®QxļŹ / ³ōŅ%,½t žŚź–M”dOÜG ęšœ·€Fov¾œB3HĖg ßĖI_:`Ńü³ć’Ō_Qš_ģ”Ķi¾ts/^Ėæ»®{`U™…”˜\įž«eŽŁˆ™„žœ÷u¦ŗā„ Ļ)æo)ńÜ UŒoo9Čū¼„Ģ1ļĀĢś<üš{Ld1꾝ąWXĻ?ło”£-ō>æ\ę˜Āż,ōIhƔ÷Ÿ ¼³čžü°Ź±Č¼ē®Uš?^ōĄ(uĒ›öÉ­IśŸ GéĀīŪ:p³.–mŃśĪVS¾^ÄŁDVDˆ¬ˆŒ J‡6%‡« ZĪ2]ö˱ƒ6­g· 7ķKlŻĒ4½;=7¾±aŅ Ś_ć£åęæ7ė2ųņč€=¹55|\żIõćĪ+Ų ńTą¦ŪÓd:Ŗ«Čöf‡·āk8¹¾lšY¾ŸÅ3źC›Ģ÷]™4!=0 ˜ŖlOåżĘ*TŹ$J ßW°9ˆ/V>ŁPØČČ%r/+©;±Ģdzm®¹jM)’“1ÉžósėKSŗˆˆˆČ,¢%“+Lß[iD†Ń Óļcņ›ŃĶ†¦t5˜õūå*J%*.Ę$BŽdüŽ×SķVh }_Ēīēf9Ęæ1²¤ é·°xÓćągĢ”Żdos×^QwÉĒüę‹łh=Ėä*ŒĆīŪŹżwč-ø§›ę3šŌłi~[óp9:˜ xń…‹³.½ż–‘ē²½Yśžč§īų8‘eV|l9ƒ/’nO“Ģćdģ°_ÄG 1@Ķa±įʉƒĆÕÅ:ļģdń…‹°Ć6K.YĢąKC¤¶§Čęȧģ€/bZ¢ęššį„E÷=ć– $6&hxC=śM§5š]^"ӝÅIåq“ąšE}D–…‰5×s”ó’:§p÷”ļŃ>šßÖLdy„%\L’Sd:3ø9Ė;ģ3K'Nˆߒ䖑ʇä«I2»3[ƒ,¾`żO÷“Ü’$7`ī§/l拳ˆ#~Œé—:šōĄmĮ—ķõ*%źü“žŻĀЦ!rƒy,Ū"ŻžĘI; ¾Æ£|"Ģ–‰’ŽYp¦ńß2Ģք‡`–8\œ|h c’yGĮ’DZĻjž”ķśSwEäūļ#vhŒČ²0µGÖ0“iˆÄ „vÆė]Xď‹cmjŖę&2šōw–°“[’“ß²›Ö³Z°ü5‡ÅØ9,6ńÅ\čy°·d7ē²ó¦],zļB B B“V8i‡Ż·vŚY}÷z€¾Ēū ¶‰'“0Dˉ_ĻI9“ß²»Ø)"øŽŁŖqŃ{h PwBu'ŌMxä–$Ż÷ļŁ¦ÄĘ §Ōć‹śĘ½;®o#Ֆ"?˜§ć“œÕ‚?īnŌ7‘ŌĪ4=ö”64črxhóų¤P5Śzó<Ū–įč%Įf‡›ßģŃEDDf“+üĘŚPę ³næ¤fžÅ”ÄĻE ĢR†'ŽŠ ö»æĘ܋w3²CA±±Ū÷UŖp?’³¦æĻyc-ĘT\‚©XŲ^āŁoĢžą?8łüČl“ćī›”Fˆą‹łLłzg–ž'+lOāBĒm,ų«V°Ģ6lC›†p2NÖ%Żn‚įl‰d‚ėøtü_'}õQsx ”Ea‚ ģ6šœŒC¶'KjgšÄsĆežI<Ÿ ¹%Iķѵ¦T¾)8r½“S¶;CzWšž§†ĖÓKÉvgٶn;±ĆbDŒlāÆńal,æe®—vČteHnI2šlbøßTuÜŽIāłAj¬!ø D īĒ Xøy×4ĖK䇗f”jt˜ķɲķŚķŌ¾¦†čAQ‚-A|avČ6ē'ód{²$^4Ė(ĘüõŹveĄu‡{ L&?˜gūu;Ø}=‘eaü5žį{]\Y0š\‚ŌĪ4µGÕ^"ŲÄ XŲ{Ō}L¼8HāŁDÅU …„OnĻąøpäā ļ82B2ćŅ3äpūsC¼éą0·>ä£§ÕņĖG9÷˜(OļČpś”a:Zć>®ŗ·ŸŽ!‡Ē¶¤9zILÆ%DDdĪR`r›¼Ļ+ŹÓ |ø“xóėÓ¢2ēŌa¶É{³O}µöv’†W0³ę+˜xķżg0»é-÷>?Pśšį¾å”ZąZxŹ5üFvaų_Ģ®’ĻūśŚĒ·aī’a˜Š%ö[³?ųH§Óƒ~’ČŁ§ŗµäS5“9ÉŠęŹŗŻ•ķͲżŗńēf:2lævņkfŗ²Óŗm]~(Oō>øē×r—Äó ĻWVÕ0’Ū’$·•źƒZ7ėŅ’ōżOWæ¾x™F„rż9:ļ˜|ŁC¶'K÷½ŻU_æ_ł·²»ß$CN\āg&Ų՟ēu+Cųm‹¦Ÿ<#Ī Ņ1§.bXÜżbŠG^M³øŽĒ;Žˆš‹GĢóžj›ŲŠˆˆĢ*j8¹^Ģ|ĒbJÉK¹Äū\˜Äl?w*„»üƒŁŹļDĢŗōj~ŪÜŪæ„Üå}žĢϼœ~Ć+ü¦~Ģē|Äū\*Č/|_KʌårLEĀX~`5ę~šöbž=ĮX,Ģ{ “/+ykn’‘H¤‡¢jœžÜLo"2{YŽO׫”łĶƒœqx„ĖN­åµ+ĶŠ×b{O޽„«ŗ ŽŅ—ÜH§MœˆˆČœ¦d•ł*š+ąw˜Łå—€>ĢŚō7b¶©KbJŌ ¾ŒY’¦\šILcŗ8fæūw9ą{UŽe&išVLs»'¼ÆČH >ÖbīæĮŹ»0I£Ć0ćß-:ē·ĄŪ0ßļ՘LP’.Ģ–LõĆX…†‚ßÄģ°Ķū~~ˆ©(ųp&¦œ’f 0}،éņ ¦¤’ ļń?›1Õx_ļĀō$X€I ¼x„Ń}dæ1w‚€µk×fWÆ^½ óļÉ6©9d†G%2;åfƾŁŪŹšÜc¢üśńA†2.—ŸQGĄ÷¾”¢wČįücÜōčų¾~¶Ųé%ZG¶DœZ9ŒˆˆČ,”@e~én’eLg’±žÄĖÆ=vf–’«Ą…ŽG±ē€ĻbŠjō¾ƒ |ßé=~Ó›čŽ ü¦ņį cžļžŃ Œ`‚ķ_s|p¦1ß²Æ÷sLs„õ{“pó½sW1¾*! \|rĢcoĒ$(Īf|%Fó¾~‚Éwjygn’Ežˆ—xqąENk9}†‡#2;e»M±ĢŃK‚XĄķĻ&¹ų¤B~‹WvgH¹¼¼;ĖC›Ó¼į 0·xzG†]}yŽņšG.’Ė»Üč%ŽY:¼]åĘł†DDD¦ÉÄ ĖDc:É×b‚ąvĢĢr9͘µō ˜Ąz¢sā€ŹvÅÅlC˜ĀT%„1Ė2cŽaß±-‘}Žkg)Å/V‹Yæß€™AļĄĢīOŌÕ*€Ł°Ž{­NLrÄõ®å/ó=Öb ¼×y¦ÄXĘÜSĖ;f«÷}M$‚Yē_ļÓ‹Ł”`ß,¢–½ęŪ½×’ŅĀ=æŗ³ęlšĻźÕ«ĻÄ$ųۃ’ކĄčž¤w“ßĮƒŻࠚƒųĄ²‹öéEf‹_ŽæÖĻ__ÓĮSŪ§žß}CĢęÖO.Äg[Y Õ²¬ńŪCˆˆˆĢŖØ^›÷QN*›ÆfQoÓlšÕ1¶Ü+uüDæå)Ÿt`¤“¾Ł2ĒOÖ}j€‰;÷ƒėFŖ›…IOUq¼Ģ[s7ųH$wÕŌŌōį-£¹·ć^Ī[|Ž JdvJ<— ž¤z>zZœĖ:õ¹œĒg[æSš/""sšŠČ~bn’7Žxcų~įėgśž¦=Õ>ƒ#™½zźÅI;œt@ˆs‰NéĒ/ńŽć£`’Ļc—¶‰ˆˆĢ9JˆČ~`ī’–e}Ų ąāņėæ"•»ŖGDœ”C×]]|īœzN9(\Õł·ųśłų}Ą·,Ė»$MDDdĪQ@Dę¹łü¬[·nųJįė®Læiū5Žkö)óŪ#+»rNéķĶDöżOŠ÷XŸÅwŽßćßPKĄW¾ż‘œst”«>ÜLCŌų=šł}0\‘½Ī7ł!""³Ó™’tž…–Ł^ró+ų/xā‰'>į„Ćl)JO¦‡­C[8¤öŗ2]lÜ@ŠrbĆkgrØ"3nhsˆč²Æ? ÄYGEų,ś’żIgųøqgåsē4š¾c…DĮuĄ%–eegjü"""ÓIMEdžšŸĮæĒõūżÉf³‡'lŚŹ†Ķė9Ŗžčįƒz2=äŻ<>K¹^Łæuß×CjGš¦·4²¤)Č'ĻØć“gŌ‘s\z‡āa› TeĄą –em˜™‹ˆˆģZ "óмžX»vķĻē;ųKį±žl÷vÜ3|LĪͱuhĖL OdÖŚ<ĶõŪi湝¶§ŚčļļĒo[4×ų Į/p3šąP’""2©@D꙳ü\uÕUķ—_~ł›‰ÄZąŅĀć®ėbYf6s桋;p¦†(2»øŲ8Čoļś-Ļō=M  ©©é”Æ}ķko±,kh¦‡'""²·©@Dę ~¼æ’ßūŽ÷Ņėׯ’°ėŗ›€įąąŁžgHę“35<‘Y'‘`ćĄF²Ł,ķķķæPš/""ū %Dd^pįǟ®ūąĒö§ąæŲ† ~žH$w]÷ ¼D@*Ÿāž®ūgpd"³Ė=÷’u2…/Ó¹\īʙˆˆČ¾¤%"2ēķļĮĮ7ޘžųĻÕ«Wß¼ą‘ī‡9*~ Ā ft|"3m[rOō<>üµeY’}ķµ×nĮ!‰ˆˆģSŖ‘9MĮi–e} Ó šēŪ~N"70Ć£™9}Ł>nŚžK\†’«čĶår_›É1‰ˆˆģkJˆČœeYīÕ žK[·n]›ėŗ’Pų:‘ąēŪn`@IŁõdzųŁÖŸ1˜,<äŗ®ūw×^{m×LŽKDDd_³&?DDDęŖU«VżŠ²¬¾®ńך¾„°$²d&‡%²ĻlÜĢÆwüjT3L×uæ¾aƆĻĶą°DDDf„zˆˆĢcĮ`š“™Lf™eYļHä\óźŽŖ;šÓ[N§.P7ÓCŁ+ŗ3ŻÜµū.6&^ĄuG ݰråŹž©q‰ˆˆĢ$UˆˆĢs\pÆ¶¶ö›®ė~¦ųqŸåcyt‡ÕĘŹčJCXś± s”ć:tgŗŁ4ø‰—/²epKńzųŹśõėÆōž,""²ßŃoz""ū‰U«V}Ȳ¬oĶ„ž·°ūĀūxT"Ó#å¤ĘĪōs]w§mŪ—Æ[·ī¦}<,‘YE ‘żČš5kźr¹Ü?ŗ®{éńˆģeĄ7s¹Üw®»īŗĮI™ē”Ł]zé„M>Ÿļ\ą<ąL 6ĆC™.żĄm®ėžøuƆ ½3= ‘ŁB ‘żÜš5k¹\ī@`…ć8ź (s’mŪ=ŽćlY¹råę+Ƽ27Óć™cž¬5ĢØ)·ß7IEND®B`‚libwebsockets-4.3.5/doc-assets/jit-trust-system-trust.png000066400000000000000000001525441476025525100236260ustar00rootroot00000000000000‰PNG  IHDRīk~Ö pHYs'©'©œ«UtEXtSoftwarewww.inkscape.org›ī< IDATxœģŻwxTUžĒń÷ō„@ @čMP©¢ bWŌµ!Vt][°­õgŻU×Å]»kw­€`±į**)R©"(½Bémęžž83“I2é “ņy=Ož¹åÜsæw’]<ß{ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆHSd:i’ŗ™@z-ėü©Ō±Gg×XĄ©ĄY@7 ĘĒA`!š]9ׇ£€“€¶@pŲĢ~«bĢĒ×?ŸWńšŖˆžųXP‡õŠˆˆˆˆˆH#Ōxą8¦iĄß€ČZŌóĄ.õZAłHąŪRå>ū+ö„®ėƒič{ʤ‡}öĄćUŒł÷5oU±|U p×ū@×+""""""Šł˜FāŽ#x ČöBjPO8ŠŚż³Ź/øĖ| ō/uĻ^Ą;īóŸ”ŗī'L#’ M©ūŸ¬u_7¢ 1÷nNÆBŁźP@DDDDDD¼JĄ#xČ~®5¬k•'v€° ʬĮōš”ģ®wJ× r—ł°ŖĮÖ%DDDDDD„W0 ģ=˜FbŠ{’wĢģŻŪžŽ`÷uŸ{޽’°8 Óčöt…Oż9ļUƒųŗćBL|T źØ,å>?·’z&»ĖuwļßįŽæŗ’ėžvT!Īć0ßg¢Ļ±0ó fc"…ī:ßÅōp،'š fhÅļīż<ągąĻ~®93AŠ»l°x3OƒÆpą1`»%Ąķ”œ7čæĄ˜æ§y@†»žżĄ·"""Ņ€:©[1cŪ;m˜†˜nų3€ē€LCŚ×U˜F½§įÜóĘū;L#ļyLWśžĄĄ)īķŒjÄ·‹é¢’¦Qś¦Ėż¼jŌS‘|`(fĢEbܟYīOOBcW%×ķĘ<{˜ū^å w×ćs¬ę;‰ł^ŸÄ|§ē7cĢēWr{1ó™˜ßsgąZLļ„ƒĄīrƀł˜ēüęo$8ˆĒL®8“ą“ˆøų˜„I“.Žtßó=wŁ8`fBĀŁĄ³˜ļe fÄįīķœ*>“ˆˆˆˆˆˆTSECęaƒQ„ŽÆöRœö¼!ĆO·øĻŻVĖ8_»ėš‰iLV¦*C*ÓÓ(ŻNńķńīz+›8q†»\»JŹä.wŸĻ±łīc „ŹZ˜F“Må½<=öł)Ū3‡ļÜ3€\Lļ‹Ņ<½nuļ‡az|ć§l&yš™Ļ±OŻ×æą§ü½4¬a("""āVÓq˜""Ņų¼‹iü_įs¬7¦ĖśG˜7¼¾Ž£¬É˜†ę‰µŒe508Ó]×r ‰ŗļ™iß ¼ŚąĄ4Īmw™p÷ge= 3½*“ėUÅÕ˜Ž N̲ŸažĻóćÆī§^Ł3yĪg×06g Æ«I=­0‰³Ż?å‰t:0Żś/Ēüīwa˜ ·ł¹6‡ā^„ÕöoDDDDź""ĶĖ{Ą’a&ū3iŽßü” ZPVN=E˜™ó~ĀĢpfĪ€˜5ē+ņoLs#pšUµŸ¤ś~§ģXt Żē«śÓ¹ŌõgaV Ų…™hĻĘ|G+€ą’»ņē8wż‰>Ē>¢dĘןŻåO(ē¼ĒŃīrcĖ9’µūĒ×ɘgڃyž÷öēī8}]Œł}g¹Ėfc†R܉I(ż‚I €iÜļĪĮ$LŅŻ×ģĒ,1Ų„’g‘zt<¦WĄĶ˜ī+å”ó$DŹćIˆˆˆH#¢!""ĶĒG˜.ż`Žęž+€±ˆˆˆˆˆˆˆH=\‚Y†/؂rĆ0ćøEŹs2ęoIDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD¤łzx%ŠATóĄź©ī?SŽõTyśŗļūČ¾Æˆˆˆˆˆˆ41ż€w€į~Ī-~=²įŌŹ `M=ÕżoĄśŌSżOł9~ŗū¾ßŌÓ}EDDDŹåt""R§ŗ·G:fīĻĄ„~ŽÆĪ=²įˆˆˆˆ@p ‘:„-Üū‘@k÷v&PTŖ¼čD{ŌJźī„‡€Ż˜·ŲU)½TyĻń ŪēøÄų9äŽ7¼ ńĘq˜g;ģŖb¼Į@7 ęywQöū+ļŗh÷¶Ć½ļłxž)X äū\„`¾'p”ūŚ­@žO¹@g ÅSybÜeƒ0ĻæÆ ±‹ˆˆˆˆˆH#ń!¦‘ėļē,wĻ€ė1BĻy0č^ŖĪ^Ą LćÕ·¾½˜7ŲV%1=ė.l©ćKŻĒ”:Žß}üi÷¾g@<°æT¼³0½| ,œ„ā=ü½T¼ž†Dc†Od–ŗ>Ć}<šŠAłæƒŻe:ø÷_õ¹ī}÷=®öų\“܎I¾Ģ*UßJą˜R÷?˜IVų–Ż Œ­$viŌ@D¤iųųÓõ?3ŃÜĻīsų”뼄iŠ®Įü;pp#0‰ādA¦ŃŁx Xŗ`ŖObŽNæXALs‡1ćŽ=s„cŖ[!˜7߅īs§ū\ēŃxx Ó}>øų 0ų“»\ą;Lć÷ą7 Ē}üZLR!Ż]Oy>Fŗæ‡Ÿ0oŚŪē`†U“Ātķ/ĻVąoīķ‡0‰Ļż*›{”š:š†»ląąæĄżĄf ó]‚I ¼Cńļ«#&‰S°Ś’¾DDD¤ Ó""MSeKōUf;fĘž–åœæ3—@T9ē=<śÓ(ļæ“ŌēpLO² &ö`ę#ˆ-ē|gĢ[š¢rĪļpʕs~$ęyOØFLµżTĒv̊ åŻó“€ˆˆH³§€ˆHÓāyĆŻ³–õĢĘ4&”ģæ­€;Ż÷Č®B]s˜św¹¶{Q˜YųKw’Ǝ…īĻū(Ū>Ó5Žß¬ü 0½ī£xf}šWąlŠcÆL&fNƒ*–Æ­Ł˜äĒķ~Īun¦üdŽˆˆˆ4 "Ņ“¬ĆLx÷8fIĄ=˜™ķ?®č"?fc–š{ø³„^¦ń*¦1y]ėš <é^?£Ō¹„īz,j—ų³‚Ą#īūlĘō>č ĀĢ博OuĒų¦7ĄRL#>óÖæ+š2°æŠńĢīĮĢÖæ3’˜jŅ0É ĻódŗŸw,¦!īŃŻż\Ó(ī5±3OAę­yOĢæ“›0‰«ų¼`–)“0w]NąĢ0…!˜ŽĖŻevN)UG00Ģ]׊Rēzŗćüó;÷ԟBńļ½+¦WĆ\ąVL‚DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD¤±°€ˆˆ”uć7 fYVOŪ¶Ū:‘ڰ,ėmŪ[mŪžyāĉ+;Š1‰ˆˆ4GJˆˆ4ńńńƒ-ĖŗøččxDźÉŪ¶æ²m{ʤI“:‘ęD ‘»ńĘ»= Œ‚Č4˶ķ'Nœø:Ёˆˆˆ4JˆˆPbbā½¶m?„–9‘ķ!$ +Øģi‘FĮU„]˜9©P”ć·š\÷īŻ7nœėG'""Ҭ( "£GŠŠzÓ²¬1¾Ē­Hˆ;būB«^`9¢H³±3vBźzHł 2J˜aYÖuIII™ˆNDD¤9P@Dä7n\šŽ;fŲ¶}÷ #:ŻĪ6I‘¦ĢUˆ½s!ģšEy¾g~.**:cņäÉŁ MDD¤)ÓXS‘#¬gĻž/×y„¶Ä4«ĆP¬ Ą&r¤XAX1=±Ś ‚C[ ŠŪŽļčp8ś^vŁeÓęĶ›§•DDDź˜""GPBBBš“÷@T¬ćo‡Čv J$PB"±āŽ‡ĢwČs“ļįƇ‹VÆ^½ ”‰ˆˆ4E "r„ÄĒĒĒX–µˆLćē„» ¼M` 0»0VżrS=‡ \.WæI“&żČøDDDšĶ.%"r„8Žæįiü[V’ÕųĮL~i øÉĢ…a„Z–õD ciŠŌ@DäHHHhl"¬öƒ”ļµµÆŲYˆ¾+s'vnfÕ¾N‘@ÉM…¼tlŪ¶-Ė:999ł§G%""ŅdW^DDDj˶ķK,ˊĢŅ~=žT»śn€}+ąŠfp ŁŅ¤©±,Ė%$$Ģ>ģŽ½ūäqćĘ:.‘ĘLCDDŽĖ².óīÄō‚ˆŲšU”±ū—w`Ż$³žŗ³ Ž"i‚€s¤ķŪ·Æ‹z/ŠˆˆŌ˜ž©gńńńį–e„įīžOļQXO­^%¶ ūoaW9£GĘATVh  ­]Ą"ā*Ā.ĢĘŹ9€¹ü÷mł<""āĘ7ß|Sć]DDDŖICDDź_<ĄjݧzW;ó°7|iæ–<‹Õłˆķ§É„Éš¼™° ² m#öžŸĢ2Å.ĻĶĶżq̘1—N˜0a{Bi“4@D¤žõšnYŽźu’wb’2¾dć?$«ĻeX'ŽOSć_š¦ŠŠįD¬ćļĄźw}é’Żēr¹%&&v Tx"""‘""õĢįp“,Ž +ØjŚ6ü6½äŪĻØ8¬ī†N'W½‘Ę̲ Ż@¬!÷`Åöó=Óųź–[n‰ Pd"""Ž""õ̶ķāAłŽj4Św/ÄŽæŖxæUO¬ćļ€šÖuH#żo€ø!ŽC¶m)((x-€Q‰ˆˆ4*Jˆˆ4D…ŁŲŪgļ‡·Ęźƒi‰4W–ė˜+±bŽ*>dY‰ńńńĆ•ˆˆH£”IED¢ķ³ (Ļl[¬7AHTŻŌ]˜ƒ›Šå,Ą.Ź©›:Eޤöƒ!kåX–e=œąØDDD<%DDš‚L3ó¹G܈źXóśldģ03ŖX¹ĢįZ†)Ņ€ŒHHHųҶķńŁŁŁßM›6­ Љˆˆ4DJˆˆ447€ķ4ŪŽ`¬ēÕ°"{’jŲśäŖ«čDŖQ–ejѢŶÄÄÄĒŗuėöŃøqć\JDD¤!Ń"" Œŗ¾x'¦„µŖ~™»°W¾?Vć_š›¶mOپ}ūŹÄÄÄ”FDD¤!Q‘†ÄvBśļŽ]+¶õė8°~ ®Ā’ĒĆ[Cl¬Ųc!²½Yg]K Jce»Ģp™œż¶ R×C^šo‰Į¶m/ˆOœ8qāǁ SDD¤!Q@D¤±sRĮUT| ¦Wõ®ß1¶}¶Ļ’ØX½.„6ĒÖQ”" €å€°VXa­ u8j$¤mĀžćČŽē)aYև ½“““Ÿ dø""" †ˆˆ4 V~zÉįmŖ~ńžU%’–z]Œ5ō^5ž„yhs ÖŠ{±Žižž ųw||ü ŒLDD¤AP@D¤±łÅ;A!ąØbG­ŒŲ›>-nü…c HĄźz¦ż#Ņ\XŠåt˜ĮÅG-ėŻųųųį LDD$ą”iH<³’CÕĒēŪ.ģMS‹‡Xč“9ŗīći$¬Ö}°Üä›D ·,ėƒŃ£G‡2.‘@Ņ""Ż¾å³ß»kõ­{×ø:;sÖ”MŲŁ)fgłilĮX”ŃŲÅ+aōŠŠŠŗx5€Q‰ˆˆŒ""™³{ŪÅū-»C§“«_OAöŽłX×CŽ!ģŹÆiüü-朐pŽeY/'%%Ķ=ņ‰ˆˆŽ""ŁĮPY¼ßóüź]ļ,ĄŽ½vĢg¾žŅäY–e—Ų¶}IBBĀ,‡ĆńŠ„ V:.‘#A ‘ĘģąĘāķč®X1GUżŚģ½Ųk'Bé•€šDĒõ"<ŗ-ĮaQµS$@œEłęd•ŗœC{KŸ>×år-‹æoāĉÆ">‘#I ‘ĘŹvb§żZ¼ŪÆź×¦®Ēžõćcū-GķūœDŪ£†Ņ¢],KóÄJӒŸ•FŚö_Ų»~>9ŽÄW°eYÆ%&&ĢĢ̼sŚ“iššBDDš,%DD);{?åˆķ[µ nĄ^?ßŃŃmŗ ¢Ū‰£n[·AŠ4 a-ŚŠ±’ŁÄsū6.`×/ßį*2ķ}Ū¶onŃ¢Ep=~§iüōzGD¤±Ź;X¼maEµÆüšœģŸąißX–E—ĮpōˆD5ž„Łp‡Šią9ōæčĀZ“ö=õ—ÄÄć—ˆˆH}S@D¤‘² sŠwB"Į ŖųgöŚdpę¹+°čsf<]_PAŠ4`Qm:Ó’¢{ kŃĘ{̶ķ§Ļ `X"""õF ‘FŹvļ8Ŗ0¢k×(^n'Œ¤Mćź!2‘Ę#4²Ēžw+A!įžCŪ¶_=zt%5‘ĘG ‘FŹŖ`ƌĀlģ] ½»1]śŃqĄˆśK¤Ń‰hGįWś}C ā©/Jˆˆ4»A‘éśoYŗ ¹³ŗˆ“ė5”ØŲ.Ž}Ū¶ `8"""õB ‘fĄ>°Ī»Ūė"[w `4" eŃõų‹|•˜˜Ø12""Ҥ( "ŅŌ儜ļnŪ^CŒHĆÕŖó±‡Ey÷mŪ¾4€įˆˆˆŌ9%DDš8;m“w;($ŒVū0‘†Ė²Ätéē{čĀ@Å"""R”iź²÷y7[“ėŽU•Dš©VŽņŻķØ8DDDźƒ""MœUéŻkĄHD¾°č¶¾»­£‹ˆˆH]S@D¤‰³łŽmŸµĪEÄąŠˆŅ‡”‘&C ‘¦Īvy7-‡žo_¤B„–Ē“,+$@‘ˆˆˆŌ9ż— ˆˆˆˆˆˆH3 €ˆˆˆˆˆˆH3 €ˆˆˆˆˆˆH3 µ DD¤Zņs³q֪ސ°pBB5!a]ŹĻĖĮYX@PpaQGDDD %DD¤ZĘ’+‘5‹gÖŖŽKĒžƒ‹nx Ž"€IĻÜĪŹy_pÜ©ń×§? t8"""Ņ) ""RMk—|Ēę5‹iŁŗ=ē^}G Ć©%DD¤ZFyŒWŻī÷ÜŚ%ß1{Ś›\’ąk“ķŲŻo¹vzÖ[|GĀÆ?/`ÖŌ7čŌ³Æ"""Ņh( ""Õҵ÷ĄrĻ„īŁęŻīÕo({õ?‰ˆˆˆHUh‘f@=DD$`~_»”ÉĻʝĻNeķ’ļXšU»~_G^Nǟ1ŠzõĖfńĆĒÆpĻ‹_`YV¹u~;åE6ż¼€}‡pŁĶ—9æoĒo,ų2‰ĶkspßNœE8‚‚‰ˆjI\׎=ųtNy#Ń1m½×Ų¶Ķ«÷_ęŻOٵ€ƒ{·óŹ}—–Ø’Īē¦ZāŲśe³Y9ļ ¶nXNVśA r "Ŗez{ƒO»ˆA§^Tīse>ČÜéļ°ał¦ģ$?/›Š°HŚvģĪąÓ.fĕ·VņM‹ˆˆˆ( ""”‘~€+ēšÅ{Ošķ”—Jœ·]NŅS÷zĖaŪPA`÷ŲørA„ዿż€)’¹Ēļ2†9™éÜ·ƒ ĖēšĆ'Æqē³SéÕ˜÷žŽūūČĻĖ)sܶ]Žķ¢Ā|Žżg<æ,ś¦ĢµyŁ™>ø=[7°ųŪ);äLžśōĒ„…G–(·ķןyõĖÉÉL/s}FZ ¬_ƲYS‰nݾ¼ÆDDDDP@DDˆo§¼DXD'w5=ū %,¢±ŗÕYż÷ķ`ņ wćrŃ£ļN½č:ö8†Č­(ČĖ%3żŪ~ż™ŁÓŽ$;ćÉOßĘæ¦¬4oå-‹+n}Ā[WE«’Ó:õõæ{’ż‡ĖŠW×å(‚CĆq²s ?}’ W…Ž™ IDATĪćוółäµ‡¹ń”×½×ęēņöcב“™NXx$#®ŗ~'Ž Ul\.'voeÉwņó¼/õuö]‰ˆˆHÓ¤€ˆˆ4māŗp’«ß”»r@m-›õ).gqŻśššæĒTöŸĄA§\H§žżxo\<ūwżĪŻоĖQX–Åł¹×[.ćŠ6ÆYL‹˜ŲĒ}„§īeįדøąŗ’ćņ[ʕ)Ó«’0†Ÿ-“_ø›E’{ŸŸ¾’˜+o{‚Ø–mÜ1O抁=ÜžōGōrV‰ė;v?†A§\ĄG/ßϼ/Ę×äk‘fD“ŠˆHƒpÅ­OŌ[ć uļ6zī·ńļŃgŠÉt?f0ŻL~nvļ·ał\Ī"ĀĀ#¹ųʇĖ-gYø“E…lŻøŅ{nݲY€I”nüūŗ8ža,‡žI‘Š©€ˆˆ4Žńöõ$880źU¤Ulyw~­ļ·gėFāŗõ!4<¢Ā²ķ:õÄŒĖYTb)Å}Ū gß!^ß²u{āŗōfߎßj“ˆˆˆ4iJˆˆHƒŠ¢Ul½ÖßgšiĢūb<æ,ś†·»žc‡œIŪN=hÓ¾ mŚw!<*ŗNļ—žjŗī‡…G±}ÓźJĖGDµ$;#ü¼ā^‡ī 2:¦Ņė£cŚ* """R@DDš…!g^ŹņÓG²zį׬Z8ƒU g”8Ł‚6q]銿hś Į)^G»×@Mäē°yĶbž¾åĢŖ_——[¦ŽšČŹ“õ@‘ĘO i,‡ƒŪž=…_WĪcĶ♤īŻĘĮ};9“9Y‡ÉĖÉbĻÖģŁŗ‘Ÿē}ÉĀÉÜ’ź7„EDÕč~¶Ė,Ų²u{:÷źWåėZ·ėTę˜#(ØŅė‚Bjž¬‘ęA iRlŪUī9˲č;ōlś=»ÄńüÜlŅRv²÷¬]<“…_Obū¦Õ,ų*‰ó®¹«FqxĘż÷0ŒŪŸü Fu„„†Q˜ŸK^NV„e}{ˆˆˆˆų£)ƒED¤Į³,Ė»ķr9+,›qČļńM«²qå<ŅS÷–9EĒĒrÜ©qżƒÆqģ gšŪźks ÷R~U]I -e©{¶‘‘ę=Ö*¶¹Ł•_æg ¢‘ęD išBƋ»įū6Ks²ć·_üž{ēńxå¾KY½šėJļŪĮ,G˜›Ya9—³üdD‡nG²ss„÷s9‹xü†”˜ 2ÓSq9‹ü–é{¢f–²‹å³?­šž[Ö.„0ßtįļqģ ŽćĒ= 0½vmYWīõ³?} gQa…÷Ń""Ņąu9jq]{“²s Ÿæū‡¦0ōģĖ‰ķŠ•¢ĀBR÷ncåÜĻ™’UR¹u >}$Ū~ż™s>ò,†’éĻtģq,Q-q“™~€ƒūv²š«$¶oZå½ĘŸ6q]ÓaŹīåÄsÆ¢U›8‚‚‚iӖؖ­éŠķhœtė~ś‰ĻÜĪļė–1ų“‹iׄ‘Ńäēf“•‘Ęļė~āŸ ®[ś :Å{Ÿįē]ĆWž";#WøœKžNæaēŠ¢eœĪ"ģŁŹ’™2’‹ńuōM‹ˆˆHS¦€ˆˆ4x–ĆĮ ¾Ę«^Ia~.³¦¾Į¬©o”)×µ÷@ŚvźĮŖ3ʜ;÷ź;X’Ó,6ÆYĢņŁÓY>{z…÷zöåœpĘ(æēŽ;õ"¢[·#óŠ}3™EßLöžūųN<ē*nxču^{šJv’±ž¹Ÿ½ĆÜĻŽ)÷~Q-[3ę±÷°ŝóĀ£¢óń¼łČµdŚĻ/żŸßkcŚv¢ū±ĒóĖ’«š™DDD¤yS@DDźLxd4m;õ 88“ŅņaįQŽņ–UńØ“>ĒŹ£ļĶēŪ)/²ał20×9“ļr§^t=g]~ ?|ņ:;·¬„U›øׇ„†sß+3XśżĒ,Ÿ=[ÖzėšˆlъīĒžĄÉē_˰ó®.1ł Æ­byčļ˜‘ü WĢ%3=Õo¹˜¶łŪ[³Yņ݇¬˜ó»¶¬%'ėpńóGDŃ&®+N:sÆž+1mĖ9č?ģO^ĢĢ^bŻO³ČHKńžkݾ3ƒN¾€‘ cåœĻŁżĒzZ¶nWį÷(Õćr¹¶%$$ø,ĖņžņlŪ.|—gȳ,+×ēŗl˲ |ĪgX–åō¹Žw¶J§eY>׎Ł#-ĖŹµ,+ĻēŚLŪ¶}Ēž¤;Ū}Īår¹» vOžĀ¤„„„·ļŗė®šw{‘FI ‘ęēÖĢĢĢ ]ˆˆˆ9Jˆˆˆˆ4C–e VŽtÓMē:92”i¾Ś9ŽļāććF«C‰ˆ4yJˆˆˆˆ4oA–e=›šéu×]×2ŠĮˆˆHżQ@DDDD® ]–Š/ЁˆˆHżP@DDDD<Ž~JLL¼:ЁˆˆHŻS@DDDD|µ°mūćÄÄÄĒč`DD¤ī( ""⣰ ü¼œ:«Ļår’Ÿ›]gõ‰!–mŪ÷mß¾}ÖŲ±cćŒˆˆŌ euED¤Ś>zł~Ö-›Ąå7’“”#®ØŅuS_’æ,ž€Q pҟ®©ŅuŸ¼ö0k–̬Q¬£å¤óü÷f.*Ģg٬OYµ`»_GŚž]Ų¶ķ=ß²M]ŽźĻ€įāŌ Æ'<*ŗŅūż¶śG–Ģü?Ö/'żą^ņ²3‹ėkŻž®}ŅļÄœ62žšČ5z&9¢.q¹\{ƒ‚‚, ĘsŠår¾į‡#³cŪv”mŪ”ž}‡ĆŃņ9ߌg;Č}޳ Dyö-ˊĀ}Ī·B|īŻŹ²,‡ū\‰8ėĄ™N§sebbā褤¤%uXƈˆ€""õĻU¼i—_Ŗ¹š†X>ē3²3Ņųšåū9śųÓhŁŗ}…×l\1—9Óßʶmś :…aēŽ®ņżŅS÷ŗg[bĶĖÉō{üĄž­¼žŠU¤ģÜRīµi)lHKaĆņ9̜ņw<ó1=śń[6'ė0ļ?{«Ī(æ¾CūYæl6ė—ĶęŪ)/ń×§?āØ'UŌ=ŪŲžŪj,,N8ėŅ@‡S%‡cmrrņö@ĒQ‰‰‰ĒŲ¶żPW“łu¶m{A||üc'N|®Žź‘P@D¤ž÷’v0ŒŗÓ¶#ׯ’2ļžó&“xń>n{rJ¹åór²˜üü]Ų¶MxT4ń¼åØś(4§Ó @l‡nœyé˜jÅŚ«ß‰eŽęēņŚW°÷ōč;„!g^J§ž}  ĒįpPXĒž]°vÉL6,ŸCĘ”ż¼śĄåükŹJ¢[·+QŸķr1įßcY·ō{ŗōĄŠ³Æ ¶C7¢cŚݚ¼œLŅS÷²aŁl–Ķž”¬ĆyõžĖųēūˈėZ­gj¬6ž<Ÿ)/܍åpšöY‡N“•””“)11qømŪIĄUuTm°{©ĄAEEE·Lž{:'žs„ß²ÓßzŒƒ);øę®giŪ±{µīå,* ]§œ’—{k80gś;ŽĘ’Å7=ÄØÄGż–ė? ξā}3™÷Ÿ»“œ¬Ć|=ńY®żæK”[»ō{o㒜«ngōO—›ą8鼫9ūŹ[yå¾KÉĶĪąĖ÷žEācļÕś™D|%%%eWĒĒĒßmYÖ ”2P īÓM7]9iҤßėØN9B4  ˆH=³,kS‰™;IŻūó½/Š&® æś ‡ö—)óėŹł,œ1€ćOæ„S.¼¾Ś÷ń$‚CĆ+)Y5ĖēL SϾ\’÷J˟zŃ ō;q+ē‰Ėå,qž§ļ?Ģ’+n{¢ŅŽ =Ž= oø€U gP˜Ÿ[ķg©{āĉÆē)uXļq‡ćēÄÄÄĖė°N9Ō@D¤ž?>%!!a=Š€ƒ!¶o`ƒŖ#Q-‰’ūŪ¼|ß(²äƗīć¶ČĻĶężēļĶmZ¶‰ćŗ^©Ń}\Ī"BBĆjsfz*;7ÆL/†ŖErÖelX>‡ĢCŲµeŻŽ>Ī{nߎß8jąI‡T-ʁĆĻē³·’IA^.[ÖżDß!gUļAÜģŁŹĻóæd÷ļėÉHŪÓYDPP0į‘Ńtč~4ƒO»øÜy <ölŻČŗ„ß³cór2QTX@xTKZĘ“„÷ “0üO“h[ęŗ„ß}ĞmærT’awŚÅl\9Õ fp`Ļ6 ņ}ĒÓlZµ€ĢōTvmYg.“m>{ēŸ%źqåmÄ“ķXāŲĮ”¬œóŪ[Möį4œĪ"BBƈjن®}1šäóéŲż˜}oĶIrrņü±cĒu:Ó€įuTmKŪ¶§'&&>ß­[·GʍēŖü 4%DDŽĖ²¾“m»?€}p–})XA•]Ö(süéœsÕ_™5õ V-(9ą³·ēą¾X–Å ¾FtLŪŻĆYdUm\WdæĻ¤•5Œ}õģ7Ō»²sK‰Ąį4Óó”:Ļē;@ŹŽĶÕNŲ.Óß~œYSß(±rA įŪ)/2ōģˉ’ū[„„E”8]T˜Ļäīį§ļ?.·Ž…_O"<*šŃ}ŠÓFŽTāÜĻ fšĖ’ćÄs®b٬i¬˜ūy‰óy9™,üz);6—ŒŻ¶łīƒɠG\Y"šżGÆņå„')*ō?oƲYÓųģķĒ9ż’x®½÷?8‚ōŸ4?~ü®»īŗė¬¬¬¬ē»ėØZ˶퇷oß>h̘1×O˜0!­Žź‘z¢-EDŽwą 2aļ2čtr€£Ŗ;—Żü6,ŸĆž­ųųÕ9ö„3Ų»}óæœĄi#obŠ)Ōø~§Ó  ĒYTČŖ3Xæl6»’XOvę!r2Ó ¦Ul{ōåøS/dČY—łmسջݺ]§*ĒŠŗ]gæuDFǐyčłyU®/óŠļvźŽźO2’Ć'ÆóĆ'ÆfRĘĮ§]Lt›öDE·¦° ģŒ4Ö,žÉž­Y1÷sĀ"£¹ń”×KŌńžswņÓSčŌ³‡’‰6ŗLA^»~_ĒĻ ¾"/;“)’¹‡–māüžWĪż—ĖIhx}‡Ž }ē^8‚‚hוĆĪ„KÆžīēÜĘöM«±,‹Ī,¹ @D‹VŽķÕ æfśŪ»ć2æĻ˜¶‹ˆ"'3ōƒūX»x&{·obĮWÉÄuķ͹WßYķļ°¹yżõ×ó{āććWX–õ6YGU_čr¹VĒĒĒ_9qāÄåuT§ˆˆŌ%DDŽ€ &,KLL\dŪö©ö¶YXq'@Pķßh7!”į$>ö.ĻŽ6‚¬Ć™üĀŻģŽŗŪ¶iß¹£ļxŗVõ{†¤īŻĘńĆĖ]ŗ/3=•]æÆgłģO™1ńYžśŌ‡tčvt‰2¹YŽmŻŚĖƒ#(—³ˆÜ¬Ć%ĪÅĘu%eĒf¶m\‰mŪX–Ui}ža`–¬Ž¢Ā|f~ų2`z&Üūā—„G–Xņ²±3é¹;X2óC–ĢüKĒxń^ŽĻ/‹¾į`ŹNņs³q’‘ĘÖ +ųvŹKü;ńTR÷n'ĽŖAQ‘’qīåŁżĒzĄ4¼{Ŗx(IĖ6q“ļ܋Čč²3‹“!Ū7­ ÷Ą“+±k3߁mŪ%ęPšžļ=–māŖõ ń$|‚‚+īØxŽ5wńĪüĆüēĖŗ[.$ČAæ~ż8å”S8’üóyā‰'®“mū\Ū¶k—Åj€Ž’żƒÉÉÉڶż7 .'ń»%::zń˜1cŖ·Ž§ˆˆŌ; 9‚ĒĶ.—k `Z‹Ūgadbõ¹ ,¼}ģĘ5©vQa>ÉO݊mŪDµlMNÖa¦ģäÓ·žĮµ÷ž§ņ *ŠwčŁtźŁ—.½rĪU·WXÖįāұ’ą×Ÿē³uĆ VĪūœ«žś¤71įūÖßéZPU.§YžÆtĆ4$,‚»Ÿū”×;æ±bīēe&ÄóŹu÷æĢŒägHOŻKhhD¹eż9t`m;vĒįØ|2ÉMYé§ŽŻŽe+Ņ*¶ųĶ~^NV™ó1ķ:–9V]ū b㊹|śęcäd¦ū1ƒ‰ķнÖ=I*Ņ”UĒu £sL‚G>ą{źE÷gžmŪ³€,ĖZPoyöĉŸ3fĢ:Ū¶'Ū¶ŻŗN*µķ!¶mÆHLL¼6))©ie:ED1%DDŽ  &¤;öR§Ó¹0³žķż ;’VŸĖ!ŲgNW”IX£³Öļż›[ÖpćCo°yĶfM}ƒł_ŒgĄIē1šäók\÷5w?W­ņ–e1ų“‘lݰ‚Cūw“yhæ÷ uHXø·œ³šoŽ‹Üo¦CĆŹ6ŲŪvźĮc²ą«d–ż0•›×xē.šˆŽiĖąÓ.ęĢĖo¦kļŽ‰īB#Ŗ7[~n6aåtżÆRī†ü7“’S¦—DE ņsŹ¬ĀœÕ1*ń¶¬]ŹžŻ0ń™ā„Od‹VÄ“ėLl‡®“nߙ®G äøÓ.ņĪkPį!gAXóŸD6°i_!;‘‘ė":ÜA·6ĮnYŒFڶż0Ʋ¬ŌŚ=iĆ1aĀ„’3f˜ĖåšnYÖ :Ŗ¶­mŪ3ŸLJJzh:cžDD)%DDްńćĒoLLLiŪöē€Y7.ķ7ģå/BŪÅmņÓ!¼M`­†+ē1kŚÓ~šé#é?ģÖ.żŽ”›™ōÜ<ž¼øĪʈW…ļ[éŒC©Ž@Xxqc;7;³Ź]׋ ó)*0]’CĆż7ŲCBĆ9ēŖŪ9ēŖŪ)*Ģ'#ķ¹Ł‡ ‹hA«6ķĖ,ĆWgĘžGD¶¬śƒQ<$"ØKß9ݽBĀ" ­śd”Õķ5Q½śćŃ÷ę3gśŪü±~÷ī 7;ƒœ¬ĆädfĻÖ Ž²Ÿ¾õׯ’ 'wuµļ鱂ž‘“ŒpWhóѲ,¦’œĶž g™²ķ¢ƒøņ„(®=©!Ö(`™mŪ#-ĖŚP¶ęĘiĀ„ [āććOŽźØŚ Ū¶’™p|HHȍļ¾ūnõf¼‘:„€ˆH$%%ż8vģŲaN§óKĄ ’wĮžÕ%ŹŁ‡·a5š@vFŸ¾ Ūå¢Ul®¹ūyĄ4,ć’ž/Üq>™‡0éŁ;øóŁ©Uš!ß×”ż»Ł·ÓL ×{ąpļøłŹDDF{·= w€ŲŽ=¼Ūé©{‰ėŚ»Jõ„§īĆvOŚŪ”[„åƒCĀÜŻėżw±Ļ:|¢Ā|ŚuéU„u¤ģŲĢ£×Ē£×ĒŖ…3Ŗ^ŸĻ2€»]Aɲ"ŻĻ““™^„ņÓžūÆÜw)³?}Ė{,¢…éuŸ—]­{×7gQ!9™éäd¦{.įQŃtźŁ—Ć’Ä£øśĪgxš™€YEįוó«uŸsūšĘ’†=Œt ĀĘæÆ}Nny’ėvt>±m»nĒ@4IIIļŗ\®ĄžŗŖÓ¶ķ£ĒŅųųųŃuU§ˆˆT""ōę›of%''?  $%Xś œžs Į_Oņ6zO¹š:ækÄ_’ųw:ö8€éo?Īž­«uŲʼn§īŁVå붬Y ˜nłm;×Ńŗ}gļüµKŖ¾ښE3½õõ8öļńˆ-IݳŌ=Ū8ø·ź ŠÕ æLƶūу«|ą]q ćŠņ²3+-ævÉwl\9Ÿ%Ūw1=ŅRvUz}źžmüßČīüßČīl\1·Z±śUĮņ—›×,ńŽ+3ż@…Õ“ļÜĖ›pŹHŪ_åŪ÷lLĒVAŹqńą§iäVohzn”ĶCŸ¦q(ĒppUµ*h$&Mš“ Ģ©Ćj[X–55!!į[n¹„zĖpˆˆH­) "Ņ$''ļLNNNĢŹŹjėp8nóžp`ļØŽ›Ķ#%e禾ž7Ą,÷7śĪgü– 'žooā ¦0?— OŽõv}Ɗžż†zĒķ;å% ós+½fū¦U,›5€c‡œIPpq;ò,Ž?ć6®˜Ė/‹¾©“¾mWņÓŸfE‚pŸÉ÷Z¶‰ó&~śįŠ +ŸXpĻ֍üųæÉś%eęØĢQN²,\Ī"–~’q…e÷nū•ż»Ģ2y]ś/ÉčY>pķ’ļČLÆx.»ß×/#'3Ü¬ĆtčV½Ž ¾BŻĆ7lŪ.wųBė¶Ås7ģŪž[…õåeg’“e†”G·nWå8NčnęQā|nv·žŁŠ[ĻlÅø›N*q.,<’³.æ€-k—šäŲ3˜÷ł{ģܲÖŪM¼ /—“”]l^³˜ĻŽł'/Ž}E…8A\xŻ}eā9’Ś{¼ń¾ūĻ›˜śĘßł}ķR2ÓS±].oLŪ7­fFŅÓ¼|ß(œE…8AŒJ|¤L}§]|#;~ū…gn;›Åß~@ŹĪ-%9Y‡Ł¹e-3?x™ēļųE…ł„…GrńMUś}—Ö®SOŽ9žt¦ż÷QfMżo™F¼³Ø+ęņÖ?®w/ĶŲ†~CGxϟ8ā "¢Z’›ĮK÷Ždķ’3z°vÉwLėōx2­Ūw®v¼1ķ:y·g$?CĘ”²oķŪw9Ź›P™ōÜü²čæIŸż»’`Ā“7c»\8‚‚é3č”*ÅŠ2ĀAlT96Ÿ’\»įŸÆŹ!+ß0Ą¶ķcjUY6nÜø¢¤¤¤æŁ¶}-PgcF,Ė:ò¬‰‰‰'×U""R±&7fMD¤)ˆļcYÖzĄ¼ŗnŁ kšm`ł¬ł¾{ö–ÆĢvx¬“ö[—½śm8¼€NϔېKjßļ=Į·S^ąō‘7qżƒÆUzMQa>OŻ|{¶nĄ²,īłĻēōz6`Ū÷^Ōą’Ł»ļųŖ«óćŸsļĶŽ„° Ł(2q n¬üĘ9$ IDAT$imÕŚÖŚ6¶µÓ_mkk%ā ÷^u‚ˆČސ™½sļżžßēŽÜ{³HroĘó~½ņ 9ßu’äžē<ē9ō<’¬Ē¾ō¹¶†Åæß¬Łz/GXמäoL»h~Ąćė¾x—ÅYéµ[ź5Åfw0ū¶æsZ€ū9kŖųļÆf³ž«’ł_g³cYž³Ģį‘Qdܵ˜ g\ܬēū:“o¹įlʊókŪ¢bā‰ŒŽ„ŗŖ¢^}e³±ąīG˜4£~¦śŖ^fÉļāöloh³;ˆļAxT4•eÅõÖįGÅÄsĒæŽbĄŠ£;U<ų«Ł|»ā &œy ?¼ēń&ū\SUÉÆ®[oąļ ÆŻ=įžąŹ·+Žą”_Ļ­żŗ)›Ää>„…Gāv»()<\/(pžœŸrŁ¢¬f}ŻĘō ēŌ”‘üoc%æ|±€“ž.…£ŪČŁģŅFÄŹ7ŸD[›VĢ)ē_Kxd4.g5o/3ßć{ręe×ū\k礳® ļ T–Sœ«ķč’ū0åœY̒僌™<£ĮžōpNæ§³šüy8«×ZˆŒ‰cÜ“™Ģ’Ńk€ŁŽoҌ+čŃkeEG(Ī?X;pÖ>ėŻ£bā™rĪU¤’āA†;µĮž5%&>‰ÉgĻ¢¢“˜ĆßļĄå¬Į嬦Ŗ¢§g×e³qܘÉĢżŁŒ›6Óļżdō¤³(-Ī'n—“źŖr*J‹jæaQŒ›v! ³„~i£ź]’õ/p0o+}ä¤é—5Łg»#ŒQĻdļ¶u6µå,ĖĖYĶšqÓj³ś¤gō¤é”¢ąą,·‹ŖŠRŹK ©,+®żŽ÷<’Ėż–s®¹µŁ»K I £O¼÷6T²&Ɔ¹§Äńą‡%|½³š³GGSV­éŸhēōaQģŹw±ż°‹KĘÅątĆwūœ¼·”’˜pÅšŽįģ<ābP²ƒIƒ#6ŽsĻ=ļ6«Xnnī‘ &<”µ®”j« €M)uöøqć†Mž<łķU«V9Ūč¾B!|H€BtP‹- s:ļgŌ6ö=ģ‘čż_Ā–M{xź”»ާ­3jŖ*kSŪaµ[Ņ5WUyiķĢnxd4ްp³&ܳ–Ūf³×Ų-°,7‡÷ī ¬¤€ĻLptl"‰=ū|lKŠóī”$’ U•e€Yz›Ų“”~i-ŽŗŠY]ɑż»).8„ÖfIAxD‰=ū6k Į–Ņ–Åįż»(Ī?€ĖYƒ#,œŲ„d’ū4ŗ4£.Ėķāąžm”ĮķvM|R/Sśā ą©®,Ēķrb Æ­ÓŠ\„…‡9øwĪó©Oźp’ź,šr»œڷóm¢©Æ›@Ž‰KģŁ¢gœ9"Šį½Ćųó[E¼øŗœSŽ‹äÄįø5äęUSéŌÜ:#'æ(å“-&ņ“³ŲtĄÉī|÷×e㊠1,]YŹÅ'Fs÷EIO)„擸C—JOOæS)u/m;””«”ŗ";;{GŽS!„‡#ŌBŲāŋ .¼Śķv˜QcĮfōźaŲ%(‡I[ĄU ŚÕž„]Ā#£Z<čÆ+Šą^)Et\b³ļa³Łé:ŒŽĒÜ ɽ’Ü{`›Ü+,"оƒGÖī~ŠŽ”ĶFÆžCźmqŲR6»Ćō¹×DDÅóóā’RšUøĻī£ļ ¶[^ļt›ŸščpŌ±)xčcSĢļ$ņśŚ ^ū¶œ)i‘l?äb_‘¦I|¤r³öŸŲČŚŸ¹ŽUØ£żéœœœæ¤§§©”zŚģĒqœÖzMzzśüœœœ—ŪčžB!<$ „Ų£>zpĮ‚3,Ėz0ł×įŪÅč„“£'Z.Ø<ѽBÓQ!:‰Šč“`^ÅD(n83‡]q°ÄĖŅ”Vižń~17ŸĻó«Ź©viœnĶłĒGqŹqōˆ¶‘ó™Éé_;ł½?ŸNČåää|“pįĀ“Ün÷óx—,µ^¼RźÅĢĢĢæ¦¦¦Ž•••eµŃ}Ū]fff?­õ`„TŠĒ²¬žJ©žJ©˲¢•R¾é4@ä+„ņ=n·{—Öz×ć?žļū !„h Y „Ąœ9sāĆĆß.lš¤!3QO÷kn"€BtVż\46š=….®xš`«ļ·üG½”ģ8G)õ~«oŲIŻrĖ-eeenmć[æY]]}ŻSO=UŲĘ÷m•E‹…¹Żīń–eMVJµ,ėD„ŌąŲÓb+Ö*„¾³,+W)õÅŅ„K7ŗ© …" !D'1kÖ,{LLL¦R* š_,05īæf q”MĮÜSāˆp(®ģ0ßī­9ę{ß?œģō0é’½”RĒ~³."33sžÖś!ąŲ× łĖÓZ_™““óu޳E²²²l»v효”ŗ@k=C)uвĀm§ųLkż>šfNNĪÖõCŃ I@!:™E‹E;Ī™ĄŠŚJ”ĘŻńõ×±K@ˆś&§E0n`¹{jųį懏i*UĻKaÜĄp€ū”R?kŪ^v^ ,ļv»_š¤Į·•*­õM999ŁmxĻF-Z“(Ģår­µž\4]“"4¶/Ūl¶ē–,Yņ5’ „h„„¢ĖČȘ¢µžP)efŪ’†¢ĘÖßBOBŌīP\;9–‡āŃOKYüII‹ļqżéń\Z˜ŁŲ”J©•¢jóęĶK¶ŁlO)„Īmć[/.++»ełņåķ–m‘™™y’Öz!0 čŃ^Ļi'»€'µÖKrrrv…ø/BˆHBŃÉeffŽ®µ¾Ļū±y ō_{\BųKķįą¼1Ń ąæ–šŲg„Ķž6wJ7MG),ą2„Ō«ķŁ×NĢ»Uą¶Ü¢ä›Ķvå’%Kv·Õ g͚7Wkż#`|“4@)HˆÓ$'AĻ$ˆ‰²ˆ‰†ŲhpŲ!"¢ī’2Eeø\P^©(«€Ņ2E~”&æŲFiY«>% xO)õ`jjźė©¢¢}I@!:¹Y³f…ĒĘĘnĢp6źÄ] šķbtŃvśŽ™Ī I—„اBt,Ē÷gźq‘|ŗµŠ¾_L^’¶^{8ųńŒN &Ķś„ŌßƒŅŁN,##ć"ą  ł{}6ķˆRźŚģģģV^œ;wn/‡Ćqp-Lńs@jMŚ‹} _oMß^‡½ék›£ŖöRģ= Ų³_±#O±’°ĀjįP^)µøæ““ō±åĖ—W¶Mļ„•„¢ ˜?ž ›Ķö6Žķ]ĆbQǧ› ĄŗĒŠłč=üҦ^ŗŽ ŃĮ éĘ#" ³+\–ęėÕ|ŗµŠ=….Š+-¢l Lr0mX$“Gą°+€r C)µ<ÄŻļ4ŅÓӇ)„^NhĆŪŗµÖæŹÉÉł+-\÷>o޼d‡Ćń3­õĶ4³ræĶ©ż4c†YŒŖIķßvƒżęŖ¬‚{·ŁXæUqąpó_Źk­÷+„žūČ^SJķq7;½ĢĢĢEZėamxŪĶ–e]ńŲc­oąøŹČČøų 0°sj„ōМz’Å)ć-ācŪ°—ķčĄaÅŹUŠ/r픕7ė’Æ•R?ĪĪĪž¼»&„č@$ „]LFFĘ Ą?iąÅõČs~Hb’QĮķ”€Ö«žł5®źŚŃÓo—.]ś»Pö©«ŹĢ̜fYÖsJ©¾mxŪR séŅ„Ļ×m\°`ĮP˲Ó»X)3L3cŖ›CtSŁ –Ė «×ŪųßJyß7łIh`‰Öśg999EAčž"Ä:éÆ6!„ÉĢ̜®µ~oaĄ:RŽ›Äq§Ķ AƄč؊ömdÓ{×~¬µŸ“““Ā.uiž|ĻŠÄĄ¼…4š@XXŲ………V\\ÜmZė{€Ø†.°Ł`ņ‰ēN³čŪ«c„ų·Ö–6ŽüČĘęæä×Zļ·Łl7egg椮 !BDBŃE͚5+<&&ę„ŌŻ@Oo»R6Ę^r'Q‰}BŲ;!:­5ėßų;eGöx?Ž™““ć@m+++Ė‘——÷­õĻŪų֟n`ZC'(' ™9ŻMļž]kąļkĖNƼocG^“/ż’«µ¾-''§*żBŸ„¢‹»ńĘc+**®UJżϲ€¤c1ćś÷LˆŽćȎUlū䉦•R ³³³—„°KŻJFFʵĄ#4³"k u”›!©]{ąļkķ&ÅsoŚÉ/lt°Ž²¬«©§ „čĂ¼y‰Bˆ`ūśėÆkrssW7Φ”: Ŗä06G8q½ŅBÜ;!BƲų [>X‚¶\ަƒ śŃG}$҃$77wŻøqć^TJĶRŚė91њ9»¹j¦EÄözJĒÕ»'L;ÉĀaWģČSXć½”RsĒ·377w]»(„hgBˆnbźŌ©«\.×  d’V¢“ś•Ų;Ä="tœ•%l|ēæ8+K¼M–Rjīż÷ßæ5”żźŽrssŒ3ę »Ż>hóJ„“ĘZÜt›!©tŚmĮn7[Ž­Łs@QXš‹””ŗrüųń}‡ öī† ÜĮī§¢}tć_BŃżdffžØµ^‰'ĶV)'Ģ¤ß 3BÜ3!‚Æ¢ą{6’ļŖĖ ė6’zéŅ„UŸ*==żN„Ō½“ĮdUd̾Ųͤ±’ŠįKkxw…Wß·c5šåQJ­t8—.^¼ųHp{'„hBˆn&==żr„ŌóŌłŠcš‰ šx1qÉ!ģ™Įa¹Üų){rßĀr9ėznéŅ„×`*ɋóģfņ ŠėXļ‘ŚO³šj7)=ä[ژ-;m,yĪFIYƒCƒZė srrv±[Bˆv K„¢›ÉĶĶŻ8nÜø J©™xŠVäŠ–ĻØ©,!,"†šč„ī#+ŗ¤šņ"o’Š­?NĮīoŃõ§<—ĘĘĘ.üꫯ\ ]/‚k͚5»Ę’¬ÖśT„T’–^?eœę‡×ŗˆmŽu-ÉIšSĘ[|ŠĘį‚€æūS”R×Lœ8ń5kÖ v’„mG^Ż !D7•‘‘1xč{,,*žų>C‰Œļ‰=,Gxƒ[h ŃaYn'ng5ÕeTģ„</ZūĶ»Ÿ-]ŗōžtQ4Ć-·ÜQ^^ž€ÖŗY[—„‡Į¼Ė]L<^fż[Jkxó#;o|hĆ’G€ƒn·ūÜĒ|m»&„h#Bˆn,333ø]k}' £|ŃŻ¼ü|éŅ„«CŻŃ“ĢĢĢEZė 7ĢqqÜ ü·Ęźõ6{ĮN3ąį#ZėÓrrr6¹[Bˆ6 !„ddd ŌZ’ø\)Õ7Ōż¢U(„ž™żnØ;#Z&##c”Öz±Ržk”ćį–łNśsÅQ×¶]Š’.sPQšš.·Ū=ķńĒßän !ZIB!jeeeŁvļŽ= øPk=F)•Ŗ”JŠZ;BŻ7!ŽQ1fĘr‹Ķfū022ņ|°,Ō-7žü16›ķ ‡ļ±”fšŸāwD“ʞżŠ=ę ¬<ąįõ6›ķō%K–¹[BˆV€B!„čŠęĶ›—j·ŪW|„öÓÜ:ßML“¤ż·‡ż‡÷/uP8l¶¢¬¬ģÜåĖ—W¹[Bˆc$»!„Bˆk޼yÉv»żC`ˆļ±^ɚŸdøˆ AĒŗ‰ø1DóĶw6\næĆ©įįį' 6lł† $#D'` u„B!„h€²ŪķŁĄHß qfę?N¶łkw©ż47Ģqćf˜ÅŠĮ2ūßY>Ł"!Ī’ūgY֏CŠ!„ !„Bˆ ĖĖĖ»ęŪ~n€dŃy„9`ś)æ‡W-\øp@°ū#„ØOB!„"č,ĖZäŪ–ŚO3`1ĄYYY2ž"„”ī€B!„č^”RéZk{ݶ˜(Ķ„ć›žżėūxżŻ½ŲlŠ’ūŻI„‡5o<™óō6¾ĪĶ'%9‚¬;Ē[Ēėxā¹ķ|±źĢčĻEēĶląŃMlŚZĢąŌX~vӘŻó›oóYśŌ6†ĻjuCiŚ$‹æšūŽ ŹĖĖ;x7]B B!„"Č“Ö×ų¶Mg֌©©Ž)Q,Y¶•GžŲĀ»~߬ē¹\š_’%—%˶RRźlqłųóƒ,Y¶•5ßå×kūƒ},Y¶•׎ŁÓā{nßYŹ’e[yėūڤ^UÕnVÆ- w]A›Ž·1żziŅĢšūŽ !‚GB!„"h,Xp<0Ś·ż” Ķ[ū?alF Oą™—v6ėšVģēš‘*®½bH3{zlśōŠ"-5–~½£Ūõ9-‘··œ©¾ÉōKß źs§NX š²Y³f…µ#BˆZB!„AcYÖ,ß¶>)š}š_üļŚĖÓxżŻ½7cF’éM `hZ“Ę%7ū9ĒbÉ?¦²ń³Kyę‘ÓŪõ9ĮųŃv’ŃFb||ü9!čŽ !„BˆąśoĆI'“¬ņ’µ—„a³)ŖŖŻ¼ŽDŖ}E„‹×߯ Ąœ+›žż/,®”°ø†Ŗźö-HXQé¢ Ø†źš–?ĒķÖ™~ŗ\ķ·k‚÷Ē*&Fēß?˲f¶¦_Bˆc'E…B!DP¤§§÷ü*š0U¼AūĒ0mJ/>łü Oæ“³Ńżļķ£“Ģ‰R0Ū“9PWI©“æ>°Ž—ߏcמ²zźĮ©±œsF?ī¼y ūĒ4«oæ’æoy0{3ó®>Žæüfb½cūVrļżkyķ½<\YŪ>jx7¤ !¾įĢųķ»JłÓ?æćŸģg’Į£×†9lŒĻe3ńӍ":ʼ¼’v}!ē_õnĖ|NUÕnśŽy®öŚ ĻĄ’L­żø¼ĀÅæ—lāÅ×wóŻĘ",ėč×bä°.˜ŃŸ;nCrˆf}-ʍ¶XæÕīŪ|A³o „hSB!„Aa³ŁĪ×Z«ŗm q-K’÷šsÅ>łü ®8Ą”ĆUōJ‰ x޳/›ō’©“{1h`l½c•Unξā]Ön(`ųqń$&„£5—Ō°cw)<±…—ŽĢćėwgŅ·wT“żŖ¬rSX\CEeż™ż}ū+8żā·Ł·æ0Ėz&GRYébĖön½ė+ʎN xĻ­;J8ķ¢·)*©ĮįPŒDllUU.ŽT³nSė6ńŽĒßóæĪÅnWøÜ–ßģ½ÖŌk«ØpÕž»Ø¤†sÆ|ÆökŃ#1œ¾½£©qZģż¾œM[‹Ł“µ˜§_ÜɧƝßģ€Č蔹œžž>2''gS³n"„h3B!„A”µ>Ó·mĢpRNnĀe3SłÉŻ_QYåę¹Wwqó‚‘~ēÕŌī0'@ńæeĻļ`ķ†BŅRcyćé Wļų‘ü*žōsŽž`ŁOmćW?=”åõųõŸsŁ·æ‚ŃĆyźįÓ9,”öXy…‹_ža5‹ßšŚ{ļ’Ž¢’.˜ŃŸœO#!.¬ŽńM[‹¹tž‡|ńĶaV|yˆ3¦öfܘģ_`²¦Ķ|‹Č;;W_Q{]Ż-’škY»””iq)„Ž3rא~ĖJ6m-ę®{Wóă§5ėóī‘}{iöŖ’M¶Łlg"Ȥ€B!„ „Ō)¾m#†Ūöųø0.:wĻ6°Ą‹Æļ¦Ęiaēņ‹RżŽžĶa2fõüōLŽ$söP¶ķ,9¦~‚I½å­<ŗļäzƒ€˜h÷’~#†Ę¼ž‹U¦Ÿ?»iŒßąLzž%ē¬×O»]‘”NRB8ń±ę„ØmKJ'&ŚĢZ–ę©v°ō_§ś žĘ߃‡ļ;€×ŽŁŪ¢Ś#|µÖ§6ūBˆ6#!„BŃī-ZŌSk=Ģ·}hź±±›ķ™Õ’:7Ÿm;KżŽ?ūņ..<»?‰Ö×’ź§'šŁ›²`¶_·jy³ŽäWs?7o+”¼ĀERB8“Ę÷ xŽŻ®øšģ=ūČ|öę…L8±į ¼ż<äŁī°%vķ)£ Ø†‰ ÷`ņ„ĀĆlTU»Ł™ē’õnČqƒ~§µø£BˆV“%B!„¢ŻÕŌŌLVJł­’ļ‘x쀳ĻčKJĻH©ā™—vr÷mckķż¾‚•_Ž |ygż.‹M[‹É/ئŗĘMQ‰“ź7%%N–>½ K{?½ėžSzF6ŗÜ”_Ÿč€ķ'Ž1µŹ+\¬ŻPHaQ 5N7%„N*+ŻäVóäó& ĀjY=Eņ M]€^)QģĢ+kōÜÄÄp®¢¤¬éķ½ŽK \`īܹ½žxā‰C-ė­¢5$ „B!ŚĶf«}Ńi[wĻ0‡«.̲7ńģĖ»źž}y'–„IīĮ¹Óū¼Žé²ų͟sÉ^¶•āŅĄŚŗėäUE„)¶ēMÅoHrRą]©āÖ»¾āõw÷ātį·¦ŸEÅ&»aÓÖbFM}¹Y×TV6ūĀÄxóV䳊Āf³üÆŁ7­ŃŲ‰Äö|Üü(ŽXœ ŠBŪ•Ö‘€B!„hwZė±¾mĒRżß×µW¤ńŸģMlŻQĀŖµłLkŅäŸ{e³.ÜąąųgY«x(g31Ń®¹t0iƒāˆ‰qn':ŹNlLv»āŗ>mU½³žŹÖņj‡–„łĮu»®€¾½£˜yĪśōŠ"2ŅNL”ƒšp½S¢ųzĶžņĄŗcźŸw0ß;%Ŗ¶®BS’“šæ @’ŽE%õæv»]Į33ų·€ą|൐ö(4ÅlE:8ŲĢkF—¤“žAB!„"“Öc|VŠÆwė'˜Ģˆ”ńlŽVĀ3/īdāŲd6n)ęŪõf;»Ł—§¼®¢ŅEö²­¼żģŁ ®}’ąÓż­ī£·Ų^Yy殇Žų×ųō‹Cä®+ WJ$«?ųI ³Ö|—Ģż‹Ž2żėß7Š’üeŹ1ß§1śĄś­õŪ,Ė:¾]&™ć—Tr, IDATy’Wą˜€@w Œ&ū%P ü«]zdRP!„B“;„”ßBü¾)­\{¹¹õņWwćvkž}٬‡šĒä ö[w”R擊/ŗŃĀw-YėŽž}ĶŚžƒ‡/Š·’`…_ŪśĶfĀń¬Sū48ų(i` Csōė@aQM“ē>”³™ū\ĻŽļżūژ>¾×žOˆv1 8Ųü(.’ZpcŲ¬ó˜Æ ę³š2øx³t¢Ó“€B!„hW)@lŻ6„hUĄŗf_ž†RpąP%­RE޾rJ˜LžŠ“ÆViVz|cī¹óD>ųt?ė7q♯’–KRb8G ŖŁ §ĖŖ}V]§Ü‹Ić{ņõš#L½šM† Š£_3 ?œ_Ŏ]e8]Vķ9Ž-żźŠ‰vpź”^¬üņ7’āKīųķ7¤ōŒ$2ĀĪwŸ\ Ą½æĻŹ/±vC!§]ō=ĆéÓ+‡CQPTĶžƒ•øŻšØH;’ųƤž‰ń&ėĆ'ųąŲµkWO õi¢!=Æ€mž¶w€|Ģߊa€OuFbfĶÓ0ƒńŗN>~†YˆĮ Ök0?ō¹¦æ§ķr`*š™§żß@$f żøĻ5ɘAż©Ą• `xEcź|^xśń¦b’Bą~ąAĻ˜ĄĄ4ĻŪwfĀüÆMœ×©H€BˆĪ̉I3,ļĄ™ˆOšqQĄ#ĄU˜FćŪįķa*fęäŒPwDtoJ)æEö±1m“žļułEƒč•IRB8I įĢ›Õōņņ?Ż=æüf"#†ĘsųH_|s˜V`żę"zöˆąĪ›ēåĒĻ"¹GE%5õ¶ą‹Žr”NDDżżķ£"ķ$%„Uæ½_ŸhV¾q ÆFJĻHvꕱzmy{Ė:$Žū?‰żq2I įÄʝ£³ŁÆ-;‹3FЧW;v—²āĖC¬ųņ[w”rüØDüėÉüį—ćIJēĄ”Ąkó—ż÷4®½<ÄųpŖŖŻģŁWĪ÷Žž›Ü#‚o\ĄÆo?‘ćG&RRędƖ"Ön(dßž ’{DpÕ%ƒłųÕó9uJÆf}Oź²Ł Ś7‘ŠZ'·ųf¢%¼©śO×is/`ž¶ŹøŠóž?ųž¾–aŅł½U#ĻÄüż} ’Į?˜ŒoĄ~šē}¦"’‡ųžĮ)~ēł÷ŒĒļ„žąĢr…Ÿ{ž}A€kš«p=ęóÜՊūt8ķQ(A!„…æwb^X¬lć{gæÅOš D·ń3ŚĆ%˜ōĖ«ēBÜэeddÜü­nŪ”qšō+^×lN—Ei©­!1!»½}_&—WøØ¬tŽą6…TV¹)+sn#1¾%…Ģ**©”ŗŚMD„½Į{ø\šŅr'.§E¤ˆ6łzdżÓĮĮ#õļc³ŁĪX²dÉ'­¾¹¤š=&ė{ õÓŲĻÄ ¼waŅéėFäcæWĖø÷ɘąņ›˜€Ąķ˜’ß`žV2ø ųų˜|üųi׌6a‚ŁēzŚ>Ćd/œ¬ p ä؊ Ś×åĶH„ń €?a2Ę8ŅiÉ!„¢qs1/hžĘĶB4G20“©ąĘ¤¼®* > ŠIg,ļČń­@<óBg#f&å̌É ³\Ģ‹»‰žoĀ̐xõĄ¬ńLš“ļņœÓ² _B4.Į·!:²m3Z+Ģa£G ÷¶o˜hGķö€-i'*ŅŽō‰hNąĄįPī:p,ČHlӇˆŗ®Į¤É插öO0³ņƒÓėó~O«z’…ēĶ÷šC\³¬÷źįy’L€@¼’ Żż‹bPDĖv9Ø+ ³āyŗŲą$ „B4ęLąQLFAõgHšĖŽY#y=žÕ 1E“–Õi©50Įē\™Ķϊ=mb*{ū§€W1†Ėź\ū'Ļ˜Y“/0U•s0ė*}§7cŠF­iÖg(D“ÖJ՟łm«€¢ósh|-Ėz133³¤ĪĒUJ©Ź:§”+„j h­K0æćPJÖ9×ķ9īU£”Ŗ xZ–UI «Ķf+ĆĢ{Y–„=Ē,Žž®Ekķ“,«¬Ī¹Uv»½¶Ÿ6›­¼¢¢¢¶ŸN§³dłņåĒ^9²mxÓūƁ?8^ŒY›?śļOgĆ[Bųó^ć_ɲaŽ"}I4ž™¾ƒĄƒżĘöÕ¬"@ą±™nĮōķĒx}‡&!„"°QĄ‹@f0]}Œ÷¹3“šš_Ģģ¼Ā¤%ž3_lĄĢŌ¼™Ił‰§=SńųLećbĢ`ßkŠŪsÆU˜YžLĘĀI˜e÷c¶r‚£Åž~ ĢĀ^Į{J¤užSįyģ1~ĪBŌ£”ņ›J¶Ū;V€ha’1žRŹ®µNŖó±ß9ŗ‘};ę{Ü÷ށ®õžč˜ĶV?VZ÷·ŪMDÄŃ ’ˆˆ222Ži­’•““ói£m{#0æĻĮĢšŸŽČ¹W7Ž€†·8Dc„:c1ėä½ux¼×66莡Ź0™Žüæ€{¹®!½0»‰Ād“T,ęļök^^ŠéI@!„š× 3·€™4ü£9Ņ1k0ÆÄTGöZŒ\ œ‡IĒüšps×cÖ?ŽĆ¬ēæ³/±×…ą×å}ŽųÆćœīi’•Oū*LšćŽŽ!Z/@@JQu7Ž]\OąJ„Ō•™™™–––ŽĬļģ’˜åk y¾”£…÷yŽ7Vķq6ęļŌķĄß›yĶL¦Į#Ą"Ž.Kh,U?ó7ń{Lv\]0;}Ec‚yÜ·!7`–ģłnqŲeČ.B!D}Q˜4ś~˜™’-­øW&„’+źž½¾Å[ņV1ķy’v÷ūŌÓæžuŚxšßIq “čłfĢ ü‹¶ā7čibāVtAīP'ćÖśĘ˜˜˜éq6ą:Ļæ—`» ½y·Ö›Wēśo<ļ/iäތ‚Mž÷_{Ž’€†£<Ži¼×|‹łŪx. OLŸŽY¾p~€cW5pĶe˜åw¶öž]‹ p, ø p’Ŗ{wz’ „BeĆ̆LĘĢž“6e3ó·¶”BJ5Ąė|ģ-ˆt?õgų½¼ÕŒė¾p) p^s<Œ™M9ˆ©ąœ‡™ĮÉr1udˆ&ڊßWĒŁ@‰ĖŻ­f’ż(„nĢĢĢ|&;;{E;?ź `&ž­&Ī}³ÕŽ9@_̬üė˜÷k1kś_ĀTĢwzι“°Ÿ£[ž}‹É*;Łs~6°S\¶f’KĢļ‚<×Ļ`‚ļbvŲąyN,¦x­wGo ¢®LĢņƒg½˜lsė\“ąš½ž÷ž‰Éš«ĄŌXōĮOģ²$ „Bõąr̬H &EŃWoĢßOļ±Ļ1č@¼„ŗoĢķĻ;°ohą½ÉóÖXį£ęZ†ywfį˜z{Žæ\Œģ چ_Œ«ĻwW.W·[ąKi­oŚ;ąM’‘¦’^lĆĢvOę`¶ņ«Ą,[{¤ža€ė 0‚ŗē`2č.!pö@%ęoēī:m?ĘüŻ9³4Ķ—…¬æąŲż˜%wų“»»Ø_ŲŠėaLćRĻ˜mrēb¶ż[ŁĄu]†„Bˆ£¼éš©æ?ļńŪi8ąo¬(ŅO1[ļ½ÄŃ@ĮŽ­xQK}ČŃŁÆXLåć[0©—”¢ė+÷mØ:Ö²š¢ÓŖ®éփÆĘŠńµ•o0»¹¼ŽĢóļÄĢÜ×]3’9f Łó€1ĖĀĄĢ˜ļĄÉó­ųæĆsīY˜"“)˜śG03ļÆc įÖU„I†Yā‡Éœ;€É ŲF`æĘĢņŸē¹Īīł^§įå{+1Łt31Kżza¶Dģ <čy^—&!„āØ÷0/Z“©®|Ŗēć½œ[™e?®ć‰˜āIb;<ķ©ü3{rõgPāĶ$š}ÕmƤn.Ƭw¬« 3ės &3ą£f?Ĥ|Ź,•hJ©=Śgßæ‚"…Ö :o@“ĄæE Ż“Ķf[ź>t›š>E4DB!ŗŠ·hz»£»}>Ž ü¢…Ļło Ļ({ޚ#×ó֔@k}ķĀĢö²³,Bˆve·Ūw[–åęčĪøÜ& !NāLĶ•óÆS©ŖvÓ§wTØ»Ņbł…”īAč)„^ĪĪĪ~5ŌżŻ›,B!„ķjńāÅN`Ÿoūį™žo‰©“{qÖi}=<1Ō]i±īž½VJ½ķt:Æ u?„ !„B ›1u,jķŻC…Ø7Gņ«xžµŻ¬YWĄį#UTU[ÄĘ8HNŠąŌɽølf*1Ń ædvŗ,–沋??ČŽļ+ˆŠ““Ś?†™ē `Ęé}¼nĶw¼śöņö•SPXŪ­IJ gؐxΟџ“NLö»fŁó;Ųø„˜ fōēŌ)½jŪļłŪ·8æ¾c,ÅÅNržŻĘźo ()s’ĘØį \}i#†Ę·ī‹Õ ūśĻ;j­—(„QJÕ.eRJEøŻīč:G+„"ź\gYVķ7Äf³%Õ¹ŸˆÆóqøĶf‹©óq¦ŖW¬R*¬Īń<¤Zke³ŁėsŠų’«†ä’JMM},++Ėjņl!Ś™„B!D0¬Ω۰ļ`hg…_{g·®¤¬Üšųҧ·ń»’ū–s¦süH’Y÷Ā¢¦^šßmōĻopéf®üĮ r˜†ĆQ’ó¼ż7ßšŸģ†—1’įļk™Ķq<ō·SźÕHxł­<^{g/=“#ėž¹x#•.† ŽćŽß~CEeżĻē„7ᯒ^Ē?ž0™…× kš¹ķiŸļīļ€Ķf{7;;ūĖą÷¦õn¹å–ˆüüüŚ@…Ćįˆv8µ ·Ū­"""Ž,^¼ø84="0 !„Bˆ`ųĪ·aļžŠöģ+'ż–•”Wø8eR fc@æhāćĀ©Øt‘»®€ÅoaĖö®^ų1k?¾»½~’žŠzR’#ł[ÖIL™Š“°0Uņük»Yöüžm7Ó¦ōāGé#jÆyõķ=ü'{ŃQ~ł“˜>­ÉIø\E%NV|qæżg==³ ĻĄ%ēlöētė]_2i|O~8Ɔ˜Éź-ŪKx(g _®:ĢOīžŠ³OļĖąŌąn!črƁƞßk­õŗ v¤ =šĄÕ@u&©r : !„Bˆv§”ŹõŻ `Ļ~³5\xXµ£ĒžŻNy…‹Ē$ńīņssŌOQŸ6„³/OćųÓ^aū®R>\q€³Ļ؟ŅaēƗĪóP_0£?įa6–>½^Ļ«xń<~¼h?»iŒ_æ&KĘfSüüw«ųjõ‘Nž˜Ā;ĻS/P1ql2W\4ˆńÓ_cū®R^{w/·,Łģ{¶…Ż{.’ĶKĖ “%Øé^^Nmäø(¾Āģ†ÓĮ˜k€Ē1[֊HŠ !„Bˆv—ššśfKĖZn vķ MĄŠ/~ĶPæĮæW¤ˆŚuü›¶łgr_tīĄgÓÆ½< €=ߗ×kŸ0¶ ę cę¹ģ[æ>&³üūM|õŻzż(æ,€š03Ļ1ĻŪ•WÖ¢{¶…myæ¾_fee^{!ŚB„ŁŽµ0Ą› \‡ LjƒgF{žŻŌ‰ķ(³•ī9Mœ×mI€B!„hwYYYVFFĘWų¼0ß¶ŪĘš4’éįö¶mg 'ŒNjō¼ŪnĆ„¦2jx‚ß±“FRé{$™åą¾õn½~T£Ļ+)uņöfƄšš–ÕŒKŌpāĆØ® Į×zWĄ ĻgĮīG75ų؁c½1ŪÓ^ Ü œŪŹgż x’;~Ńąlą‰ö”C“€B!„–ųÖoU\xfš;RZź GRx£ē?”ćOčšX|\ĆkT#‰ _|s˜ģ§·‘ū]„eNŠKjØqZ #l®Ų˜¬„h‚Ó[vüb¬v_„Ÿƒ˜Tż‹ÓčFÆhÜzĻ›čĄ$ „ŻDzzś ĄÉJ©”@¢R*°‡ø[B‹"˲Źm6Ū6·Ū[QQńÅņå˃?­)ZLkż®Rźžŗm»ö*Ź+1Q­w“\ÓĢ®7”žß^ž\¾ƒE·Žei¢"ķōīEߎŃDD؈Žr”NĻ‘,}z[PūÕ^¶ķ²Qćōk® ū4Żžv.Ģöˆ1@Ż5"'‹€É@2õė,>÷¹×UĄõĄĄ«uŚ#=÷™‰Yv„Y†°xų7PāsÆąGĄ€ć€ 8¬žxHF’ōüū8Ļū;¹žü¾ń/C÷!!D—pį—ž4iīĖ”īGG“žž~‚ĶfK×Z_ŠI‹«å[ŒKˆĪD)…Ö›ĶFllģጌŒ×”ROgggæ꾉†•——{čém³,“0ylp'EEŚ©¬rSRę?:m/Õ5nī¼ē,Ksļ]ć¹åśQ„‡ł ^|#ÆĖÖmńŸżWJ}“xńā–8ķ%3&,ź~OnĀ ä°3X'™˜śā:× Ę¤ß×}=‡Y‚0p›€Ć@/L‘ĀéĄBL°įēš0Ģ:žÓ0A‡½ĄN̤ÅqĄX`p° Hō<·®1ž7ź‘"€Bˆ®Į¦žó÷ā'o u7:ŠŒŒŒ+„Öh­oĆgš/D“dj­ßĖČČX9žüĘ*_‹ņdj¼ėŪ¾z]š z×č×4zŽC9›5õeīłŪ·­~ęŚ EÕ0 _4·Ż0&ąąŽf'tvZĆźõžŸ£eYo‡ ;"° Ļū÷ļ¼žĄ}˜ó™Ą@Ģ},Šø3˜æ3ĄoĢ˜Į’ó˜šc=÷‚ ,Ņ€»ź\“ŽüÆa q˜ß÷Y˜l…ū<ē† T(ŽĪōĻÆÓvU}ģV$@Ń5X(„ų÷ߋŸä¶„ė uwB)##ćą~Lś\=ö’Ć’‰qÄā°ÉŸŃ9imQį® æ&ŸrW¹ļį©6›ķÓĢĢ̧¦¦Ž&UĘ;„Ō‹ZėŁuŪÖo±QYm¼,€QĆŲ¶³”5ßpÖi}»€x>¾øø€£[^źy;ž«€ß €Ó1ŁĮKćéä՟¢+QJwß @VV–#//ļŸZėz™¶Ę&ŽexģÅ Bš-·„hŖ°µl k‹ÖRä,ņ6+­õ-yyy£,XpՒ%K BŁGQ_ii雱±±e@mÉz—Ö¬SL¼Ą…gąµwöņļ%›øśŅ4ōóß¹lĒīR^|}7§ŸŅ«ÕĻģÓ+ €Ķۊ9’_EĻäȀĻ\üÄÜīνTė«oM¾X²dÉī`÷„[ŌÄń­˜ų®:mC=ļW5rŻĻū“FĪQ˜”ż ųž½Ž`R’×ió¦īÆną ü †Y–Š5"fA"!DWÓ-ƒYYY¶¼¼¼åžµžŲ•“zLāŌäS‰²G…²{B“›>‘}čه©É§²ŖšVYA„»­õ ­õŠōōō©999EMÜJÉņåĖ+322^ĆĢLÖZ±ŹĘŌ‰ĮK}æśŅĮüćį lŽVĀøéÆrŃ9:$žČH;„„Nņö•óŚ;{(+wqʤ¦M鯟gŽ–Ą˜‰¬ß\ÄŌ™oqÅEƒš‡ĆnćpA›¶óŅyµ… ‹J_žŠ‘UץŖuž­õ³!čNwvhżJf žĄ§˜”ūļ<ǼŪ^üˆ†Óē½ūYśGĪŽJĄ¬ŪOnä¼H œ£³łI@5ģļkä˜h„„]Q· äååż±īą?Öˬ³čÕ?”Ż"hģŹĪäS7šē÷-ēūŹļ½‡F)„žĖŹŹŗP–tZėĒ•Rõ;÷(öģW ģœYļč(o‡WQZī$)!œžÉ‘œ8:‰Į©±~ׯqÓh®»2”iń Ž{Š€XŽ|zįįõw[9,Õ’»ˆÆ×ać–bŠKŲlФ„pF K`āX3łśęÓ3<»]P|ųõķ'rCśæē¾ōŲtÜn«v‰A s®H攓zŅÆOc¶mē£/¦’撓“s (Ķõ6&0ŖN[µēżiĄŚVÜۛ²8«×URg‰Pb0Y„˜m E3I@ѕuł Ą7Ž[YYyæ÷ć({³\ÕźĮæFSī*Ć©]T¹ü§p„čč¦õ<ĀšBņkņ½M??~Īc=¶>”żFVV–•‘‘‘ ÜS·ż‹56.žaܵļ©bHÓģóGOdōšÄFωq4X\ŠfSL™˜Ā”‰) ^茱£“ž{ĘŌ¦—' N Ģh›¶›l_Zė%Aé€h ļy uŚhó5³„ąkLµž@ņ1ƒóĘīp ¦(a¶ēüĄHĢņ‚†Ņ`r€+1» |ץ9" !ŗŗ.ØŖŖś)ŠĒūńeż/£GxF®hŲĮŖl.ŻĀ¶²­Ŗ>„[oNˆ °+„Ÿ={öŁO=õ”ģ Ż„……=āt:ļ¢ĪŽ%.7|ņµ™Óå÷OgöžJ»_›RjĖ Aƒü¶€!ē¶ÕŲx‹ļMĒŌ䇡-˜ ŌėŃ˜-’8' 3˜/{ŚÖ`ē>­ IDAT/øĘœ„ ģņ9ężåį·’0Z柉Bt|Ž ĄMŸŚyĢ™3'^k]›Ņ<,v8i1CZt­5ė‹×󊎒ņčĪGłōČ'ģÆŚ/ƒŃ%)„&DDDŹĢĢ||Į‚ƒš¾B“§Å‹ļžņm’ą3å•!čh»æWlŲpö’ļYYYĮ«ņ(šĖ›>_7ęeLfĄ]˜„SC0śĀ€Ž˜-żå˜%YŠYŪ’&f@ļ„ˆÅĢŽ?‰¬æPēšĻū’bŠ…óÜ# 3š ³kĄ;˜%uķ÷¼_LÄŌh<]§›‘€¢»črA€ššš €8…bzÆé-ŗ~_å>–īĪęåļ_"æ:æé „čZė¹–emĪĢĢüæE‹gA“Čf³ż£3TTĮ‡ŸĖKŌĪź•÷lh’‡ŹŹŹAwDÓ¼;¤$ł“]‹©šW`;f6擞’&cązĢ6~ł7&Š7,ČĒüĢ—bv'øÜóžWu®yų&ką)` ¦.@fÉĮĢĢ’­ž÷š§OS€o0Y[ščc·"K„ŻI—Z ”ŗT{^eõ‹źGJDĆkI}å­įķoūĶōGŁ£;Œ“˜4’Ā“ˆvÄ -š+DĒ哜”ŗJ9Xu­„[ŲWµK×N@Fh­os¹\g,\øšŅG}to(ūŚ]-Y²d]ffę+uw1ųąs;gN±ˆmž²|Ńl݄ظ-ąÖ_¾|¹äu×ÓĄ@^ē÷bʅ±˜T|0³ėƒ1ėģĒ=1“LJ€˜vłÜĖP­[<ȍ°’“03›_é¹×˜Œ§Ļ½īĀ ž/Į(ŒÄ$Ž`–ł=ŠĄÕ–üi­ø¹3f͚e=‚'­mzƳ˜š<µÉė“Ö¼č}¾*ų²^{JD g¦LghģPlJfŽD×Tī.ēó#Ÿ³Ŗš\śhŃh­õ~­õ{ģ±U!ģ^·µ`Į‚ć-ĖśŸĢŌÓ&Y̾X–#uZĆ_r°ū{æįÅ„ԐģģlßTmŃu„·afäūaśR’WyBˆīØÓ/ˆ‹‹D5miŃiĶŗī³ü•õ’veēü>ē³0ķz†Ē —ĮæčŅbģ1œŻūl~tÜ Ž\Ū®”źk³Ł^_øpį€Šõ®ūZ²dÉ:Ģlb=+WŁŲ+ĘuŸÆ¶üüQ’]^šgĢą’=ąĆŠvG4F^é !ŗ«ĪØWĄ¬9•’·”nįćĆ×~eāځ³™˜t’ üE·’–ĄģŌ9¾Y3}Ün÷«sēĪ•¤óPJŻÅѽǰ,xęuG õ䢃)ƀ—ß÷Æülķ“Łv¢ŁŖ€s1éżēāŸĪ/:yÅ'„čĪ:m@kļż·Bao|·› wÆ~’ ŚSk+ÜĪÜAó#…ŠE÷d gžÅĤ“ź6·ŪķUŸŗ³ģģģZėĻ}Ū·ļV|śµ¼\ķčžŪNi™»ÖśŽx Ś’ˆčb\˜™)¶× ČoT!Dw×)ƒZėpļæ¶¦ė¹®8ņ)Ֆy ¦P\Ś’Ņ ¢«:ÆĻy¤Å]B£”ŗń’Ł{ļ8¹źz’’ł9gśģl/i¤Š[hR¤(‚Rń¢€ „ńŠ¢¢_˽Žū3^QTŠB²€ @”JÆ”ŅŪ&»›ķ;}Īłüžųœ™ŁŁģfK>ĻĒćļrÉ%—ģ5†&ķv\xį…å—^zé}BˆOäŪžĄ“&ķŗ„×øåż5‚WŽŹėRü³±±ń]mF£-h4ĶŠ„+ŁÉņŽå™Ļ‡TŹ>eūŽ”EĶųA 8kźgq wz•Ē0ŒŸŽ„M»óēĻ?Ōćń,>WhŸh n¹Ū…„;ȏ;zz·ŻgęKӈK)Æ“4Ķh@£Ńh“VXޱ<ÓīĻ%\|¼öćcl‘F3¾¹CYŻ/ąüĖ.»¬a¬ģŁ]˜7oŽ—¤”/CF\lŲ"x0޹fŒ–ŽgŅŻ›·šßOWīj›4ĶŠ 7ŖI3ųźūHTÆĶ[GŻ"F3ҤE&r‹Ą\Võō„äĶ­<„rwł {k4»'ĒÖĒĖm/, RQQatŠAß¼å–[–MBŻæ|Yøp”kÓ¦M?“Rž ”ćžxŽ`ļŁ6ļ««Ž~Ęąƒ5!Ä.—ėŚ10I£ŃŠg ŲŖė€ÆwŒž9»œÓp ƒš4“™I%t$;hKģČ|ŽÆlæ1“F£Ÿø«ÜŌRĶÆüšźŗLG’v–””ņYą~`‰vŽłóēOŪøqć2ąø!wĪAJh¼×俯°Ø®Ō"ĄX²zƒąŃēČč.\“h‘®ÆŃŒSt @é¼ œR`9øÕ ó”h0Yų=pąjGf0iŅ6†7dŽ»…»_ļsfwĒšŌ~Ŗ–=ęĻ ņčJŖėŖ‘ń8Ö¦-X«>ÄnݶķNnVK)æ<ĘfOXęĶ›÷1Ū¶_gĪšpT°ä^“”5‚†iJ¢³ßmbē™B,X²dÉŖ]o•F£)P:Ą?Ł~?088ø~W„ŃhFœI Šo˼ÆóÕc C«Ńø+\Lłü<µ°%‰G'žŠ#$ßx ¬>ļRTVą9į8|^€¹Ļ^Ӂ;¤”¾-„HŁL0ęϟ¹”ņF`"aķFAć½& ¾`!ņ¦ŸkF‹Xnś³+oŽæā¦%K–Ü3fi4šŠĄčšJ˜™gŪtT“ĄlĄDPužd`Ż€c¹Ąƒ@%(ģ $×€G õ=ž|š;ćżXWĄ¾#PźūēŲ°xhĶŚļ8ą`ē}…óŗĄŁĒęõYūO:6‡;[€ē7 آьg&¼µś¢•Ė]”1“D£?˜A“i_œ†+äĀŚ“…Žž/և«óī+;»ˆ?ō(ńGĒ{ĪųĪ7n÷ׁ0—>¹āŠ+Ź¢Ńčb)åł#9īļŌץg?„Cv– ‹ļv±y[^Õå-Ū¶æ»«mŅh4„£€Ń!ķ ēę?żšCņ«ß)ąWĄ’d­;ų°ź!£:ē˜_ŽŹŁöKT‚Ū³ÖU÷Ÿ*`wø ų£ół Ą·rö¹1ėżyō gKśc?éģßU`»F3^™Š"@Röżr:ƒG£AĄ”³p…\¤Ž’€žo|ŁŻ3ōq¶M|Łß°Ö®'tĆoĻ„RŹ7…:ŅÆóęĶŪ'ŽOßdˆņčæ ü>É)'čŅD£mĆm÷¹X±:Æóß%„üBccclWŪ„ŃhJG×Ņ=¶^ĖZ7ų_  ø8Ųף÷›@;š# ŸBž’€æ8ūœ¬@E¬@ͼ88 ø%2ܔes=ŹłøĄ±į TDĀPŃ7 "Q"Ą€mĪŗ ³Ö½ģ¬›…*P"Ē Ø–>Ē8ēyÅ9‡~HŅLT&lM€ģ2Y:RV£ņ¹!|Ó|Ų­;čżĪ‹sž³H-‹šO™žų3)e!į{·f޼yg !^e”œ’4{Āä߯čĒŁŃDJøó&ƽ“÷W$)„8·±±1F£wč€Ņń{ŲV\Œ*ō&šPÖ¶+QÕóO>ĢZæ•2°xøUH0›FąYŸß:P”õåĄGčī’/T:ĄÉØpü—P”Šē;P"@öĻūØŗØžK€åĄ[Īš3`*Ŗ @<ǾĖP©ßžµ~JlxŲąœ’«€® ¬™ˆLčHFĀT_@ōś?bļhāˆü$}‚ä§į>ö˜rT‡ śģpŽyē™”Pč„”’ĖN4 !^R®A=£dī~Ų¤7"8ó$0ŅŲ¶rž_|#’W)„ųę’%K«„ŃhĘZ2-£€µ–WQŽśŸP¹šéŲ[7pšż’lžF„Ģ-°-—w×-äĻõOŸ'ō»/ąž„æóŸMZ°8¼ĄöBķ¼ž­Ąö”įö/qlf<1a#4 ųfųp•¹°·l%žŲ“;5Vō–ĘōŪó„”:Ąøųā‹k‚Įą#RŹ3²Ļ˜‹zzzNž5kÖeäy֐zŚą¾ĒL¤ī8bX6,YVŲłžgɒ%7ļJ›4ĶĪ£#JgšLmSQ…ó.@å¼ß笯FżĘ)œŹQ.ϳ>_Ž|Z\č,0VZO?”¤Ēlŗ#]°ŌpĘT¤ń@”&ćékł®O£™HčHf‚Ų+@ā_Ļ‘īaę:ā0dW7ÖŚu˜ū½ŁŻēäO|ńeĢ÷GęA€m“zū=Rļ¼KźŻ÷°[w`ŌÕNG„ν1f6øōŅK@=÷ĢĮacĄK—.] °lŁ2Ī;ļ¼ ‚ĮążBˆ3swžē ]=pÉ9¦žāŚ)bqÕźoÅźü7RJł»ĘĘƟļb³4Ķ €Ņł•’^ˆćQÅł–¢Bś{€*gŪQ(a`0F«’MŚń,ü>Š|%Ž]+bß@‰ck4摯^(?$BhMk*¾ī“į3(ŪO•&‰nŽ’lĻ­•Ŗ™ˆųfųšŌx°Ā)Āk"cmNAÜUŖfź½™užO‰$‘߯€ėąI%xĪ?‡äo‚”ø?z4Āķ&zū`Yų/ł2ööfģ–R+>Ąó‰Š²Ūm€łóē_,„¼•8R¬±,ėœŪoæżģ•Ė–-KœwŽyē•••żU_Øƽc‰ĀW.°šzFК݈öNĮw˜4µ lłCccćU»Ņ&F3rh`äyUļxąHT“@Z>}ø¶ˆ1 F^HŪ0XpÓŁ.qlJ_ųRū¾]āŲĶxe·źN­]ot•$øŹ\ŌZ @Ėc­Z˜$„(£ü°rb[cćZp•™Ų­;0÷œƒµ~fC" ōi’׿JģÖFR+?Dx½™cewXÉW^ĆÜkvK Ņ˜¶+Æc¼på•WzĆįšõRŹÆŒäøRʇ‰ÄEwŻuWG¾ķĖ–-‹žwŽyŸ)++kDAīNJÕæ¼YpŁłÓtN@)¬\+XrÆIOo~ē_ń«%K–üp›„ŃhF-Œ›P@ó9Āß,‹ ×y ²Oz[w‰cw”BžžF_ DĶ(p]ē{}%š,läXōøBrżuw$®Ŗ¼hńœ_S€Ŗc«\F²#ɶ{·µ9#JÅįåTYµŁśē­cmĪ„B:ÉqĀ„¼gœ†Ø¬ĄóÉOxņ)<§BjM¾ņ:€×£ā£\fzmbԌ§\zé„{ōōōÜ+„8z轋F !®™5kÖ/\øpЉeĖ–%.\ųå7¶¢ŗ)õc{«ąš?¹ųāY=\·  ŪüżŸO>oŖ£ -Y²ä»Ö2F3Ņh`tH;Įé'ƒ&T*Ą>ØŁņ|ZM”ć`t¼µĪk”}P-”Æå_>ņ%ƒ­E…@¾_ąøæg£Z¾0ČųšAR~Ėt4cŠbŃo»žģŁ#Ę+¦ßĄ]éF&'ßģŸį3qWŗ1Üŗāy©XįąEŌ×)Ēæ¢œšĻÆ!žčū¤Ž_‰µj5ÖŹ ~ļŪDnŗ%s¬÷쳦‰yĄ~D~łŒś“Ī?čļę¤cžüł'I)’*„ɈķRŹ —.]ZL:!ŽHš­yóę­B\GN·ÓDn»ßdå:ƒ/žeįõL¾æ#Ag·`ń=&k7 łOH)/kll¼cWŚ„ŃhF]"etHKĶéŲA‰Ŗ°æ'š}ņß÷ĖPłńĻ’MQŽś1Øv|¹” ÷OåŁŽī¼~$϶t÷€kÉ_äļ@TW„^T{DĶ01 ©ūģŽOtwfhUõī# rķļÕ)‰üę÷Äzkó¬M›‰üęČH„Ų­·½y1‰'Ÿ"žČć„r52·×”™Ę=ļ<Ū¤DĢ›7ļRŹ')½`š`¼%„8Ŗ±±±hē?›ĘĘĘß !¾B(ÄWŽüņf“[u³†\–Æ0ųŁ®Įœ’v)åiŚł×h&:`tHŚĖv†’8ų%p%š:*×>€š•?Ą9ī'£h×Pz’źœg%}G•ØV…yŽ}ų(šOT”£vąqąą/(ćÓØ¶„/£: øé(ŃĮD‰ć79t`Kń”~|·ģÖ5FĆ-Ą`Ilgꎚxź<“!Օ"Ł™æn€įėÓV…ĖłŸbō_`Ē”F+ šˆ~ė »Śį5°ć6ńķń¼ūBøĀ`ƒ(¼Æ»Ā…«Ü0•BlĒmR)¬hžY}Ćkdę63×&ņ\[ÜĪcø«Ż˜Ć%°S;f“lO"ķāfE]e&® 7†[ S’dwŠT÷ÄŹś ƉPu\ī?†øö÷Ź‘wŃžµ,dB‰™»“µ/€ēŲcee+…«FĻźńĮ…^Xīńx–Ÿį”’ģv»æŗhŃ¢z>X²dÉ­óęĶ{ø[1'wūöVĮ5‹LN‹zœ³QĪņżĄĻåYĒ“;Ēå+Ź'm[ ŲŠęlĻžAż;Ŗ į÷€céK°PŃ7×8ߏP’^>ƒźfą68ŪRĄiĄUĄyĄ‰@ŗönJø ø«€­š"qcÆN顝ńŒv‚ŚSj ¢÷ƒ^Śžm§ścՔķDżeÆTWŠö—:čy·'³N‚9WĪ0¦§Ę3`żŗß¬GŚß4/Ó¾Øj·møq#ÕĒW:8”q°Ćk#læ;½L9»AķwĆʂN:@͉5T^N¬)ĪÖ;sņóT^Aőø+ņ’ü&v$č|½«ßµĢśźL%daĢ×¶ńIõZżö©:¶Š²żƒ˜“\ģ„MtC”¶ēŚ d ī ź„j¼õKŖ'v$Ųńō`ŻeĒńę8‰Öžŗ*¼œKģ¶;‡7aą’Z¦īŻm#eßxe޼yū !īGMVŒq)å?R666¾vńÅešf#źy„¶-xęeĮ;«ēœnsų»_m€”ϼdščæM¢…ė·Ją·n·ūæ-Z¤+µj4“ -Ļ«Ą^Eī{ƒ³ä²ųZÖēJTŽ”_ Ÿ;K>bCŲócgÉå_ĪŹI÷¢ź E/šug1PŃ 9öüĀY@Lż§L4;E[Åŗ•]{Ēdé­5»-ģ$® 7Ó/œŽ«ĢDZ’To låĢ —ĄUį¢žō:LÆAēė]CXSĻ‚·Į;ōŽ;AŻ)µ”ź†I°¢vÜF3Ø®ĶSė”žō:ܕnڟk|Ą!p•»˜žÅiøŹū~ź­°…“¦ĄUęĀš÷ Ų3@ÓŻŪtt(Ÿ¢īōŗ¾ć£–#0øŹ]xj=L=w ɶ‰ć#“=ŪĪŌs¦ąæ|>©×Ž õžŹ’Ēš_>sŸ½@M üa¤mO\zé„_naš"Ā„²EJy^ccćĖ#8&·ß~{šŁK/½ō»ĄÕäé~ŌÖ!Xō“}ē|žt‹YÓ&4€”šö‚æ=aŅŅ6h,a»”r^cc惻Ź6F³kŃĄŲŅ9ō.£J‚įU.¶ŚöR[ jŠ`”Xh_×õēµČLĮFĶųD‹;oš;aÓśäzßļĶ„Ņ SŲ3@Ż)µ˜A“Ŗć«č~§;a#mɦ[6gĘØ:¶’ŠĮ!’ķI¶Ż×æ @¾woƒ—XSŒŽ—:‰m©PśÄ[ļÉ8’/wŅżfWæ™zP=źėN­Å?ÓOåŃt½Ń…Qūl¾m B؇öņĆĖ©<²+b±õĪžAi©pߘu§Ōā*w!“’¶gŪčyæ·_ ƒp Źö R{r-†Ļ žŒ:6-fĄ¤ęä@Ķō·>ŽJ¬)KÓŲ3@ż§ėšŌMœ†ė‘uz?č„ģ€2Ź~}5=W~k݆¢÷žū9ü .õ[x¹bR¦¶-\øŠµiÓ¦ŸI)0ĀC’Ū4Ķó/^Ü<Āćf#—.]zķüłó_°mūĪ|)®üźf‡ģoó™“-fLE‹Ę÷><ō”ÉʦĮ“…/¤R©/Ż~ūķ›v‘if бÄĶCH>k4E!„ä†ė:ļüŚŠ»jri}bŻou÷Ė£—–$¼:LóĆ-€Ź×÷Mļ †Iv&3Kځ—–ģ·¾Pż€ŲÖMŻFd]dĝ’,?ń–ķϵpž’IZŸP}å…”¢Ҥk$;“}N¼dąµ9چ»ĀE`OÕ×¾õÉt-ļPæ@&%=+zi}¢USåĘ7­/ ¢læ †Ē@Ś’ķ4÷wžóGÖFhy“uų7fŒhy¬•Ų¶8FC=åK’„÷3ŸcšG"QQAšGß'ųĆļ‚cžKńš.1xsŃEÕoÜøń‰vž%š·Ū}Ź(;’–,YņR8>Hń+Tŗć@£$¼żĮÕ7¹ł}£‹wVNŽJ;RĀ;+×,rqć®”œ’ˆ”ņ‡==='jē_£™üčf‚!%[˜Ļ'»ä ×uŽ‘¼Ŗņ¢ÅcmĢDĮŠZō®ģ-ø=ŗ)Š“%ĀżĀŪw†Ī×»Öč…›Aeg²cšPłTWжgUčŖwųö|3•ą “rŠ{ Ŗ0ž“$ĀN$„rō}{Ø1bMńAķŽ¬`…-ĢąĄć™’l»gõgŌÜ'Hpįš}é|ā?Fņ„—±·nCĘ戏 \{ķ‰ūÄšžu&"T*rīBˆ[†8Ķ„džüł'Ų¶}0u‡ķę/]ŗō޳(–-[~ø`Į‚ūmŪ¾UōxRĀŹµ‚•k]̜&łŲQ6GεńnfЈÓÕ#xq¹ĮóÆ Ś;‡~XRŽ'„øŖ±±qó;k4šI4š‰†!lääĻWœD ]×y§ūŖŹ ’8ÖĘLR]©‚•ģ į}ńw’ÄŽįdCO:”ß7ŋ03Ÿs‘¶¤ó•ĻsWŖ“ēdwrHaCZ+bį ¹ś tW:¢Eā€Ł$Śųƒž°x×c'l¶?ŠLł!!ŖŽÆĀµļŽöż\õ µƒe9@Ōxųžbyī†ÉĄüłó/—RŽ „7欲mūœŪn»mÅŽY2·Žzė« .A|{ł°,***0L)eL±Õöö~!ÄócmļhpŽyēłƒĮąMRŹy#<ō߯n÷%‹-™j;ÉĀ… m ńŠ+®ø7‰|Sń] ąxBšŅrĮKĖ!v€ä }%ūļ%ń{ĒV 蟬ųPšŽ‡‚« Å×į\+„üI8¾kٲe…[šh4šI‹4f× E€bŸ“l;E²3Ióƒ-Ō~²WȅoŗÆ_ż‚4Ņ–Ä›ā“=ŪNlkį]C!?ŽUī¢ņ˜ŹāĖŠØ0œ÷Łu aŅq" “’Ž÷{iy·…ė>ü-B¼^/±XģK—.}e¬ķMęĶ›·ā>`īkI)ŌŲŲx ćšōM7ŻŌ \}łå—ߘH$¾-„ųP;Ų1įˆą…7/¼†!™=öž%Łk¦Ķž{HŹF²GBŚ:k7 Öm¬^/hj)9śiµāW3gμmįĀ…ĆĻ/Ņh4-h4Ķ®c҈RJ„™™ćbŁuÖʝ[0ŗ„W‡‰¬ąāĮ]åĘr©„¼o1<¾>¦]0•­w6ß>ĢNŖĪ½Mv$é~·˜NƊDK_*D:u Øļx’Õ%‘R‹ _€™(\z鄟ī@µ%)v!¾øtéŅŽą˜£‚™š“Ė/æü׉Dbžā*`ļ”Ž³mĮŗM°n“ ]O»¼L2}ŠdzTWJj« ¦Ź¦,Į˜C”ŻN$!tõ@{— ­CŠŚ[›MŪ!ö²…×Μ9óļN„F£ŁĶŃ€F£ŃģZ&…`ĒmLæ‰YVZį7#+Ē|,BżG›”œeiKbMńõ|Ó}Lł\¦ß¤ā#“8JÅNŖ{kE¬a×°TĆ3“ćaxuS” †˜7oŽ÷«ŁŽPƆqī­·ŽŗqĒu-ZnZøpįĶ6lų¤ā2ąl čž–ݽ‚ī5‚ÖdÆķū{ē÷©’>Oå3$S”Ā_ RŹ;ÅočȍfĀ£¦)Ą%ĄJąļcl‹fr3įE€Tg Óoā©)­’»oZ’¶}»ļ] ”wø "5ÆĘš„? Ł-x|lkŒŽ•a*1źŗØ IDAT/Ē[[ڽĶ&Żf°XǼ|n#`’hŽgģKu§šŌøū,„»j$kĘiF“‹/¾øĘ0Œ»„§ŽšŠ‹z{{Æ\¶lŁčVŌEœņ''/¾ųāÓ4ĻĪ>N¶7? ¢N@IoxŌĀe¢ĄĆRŹ{ĀįšCN÷F£€4š>¦æīF šŃgB‹‘Q¼S½ø«Ü÷^ņÓoRqX9 ŌŃ®¼E†Æ•©ąŖtgœė\ŅįūłģĄSėĮŠŚƒ @Fp…ŗ}¤×āŪ§CłŻÕīA»  ö“µ· ķŁöŒ}‰–89~|3üC ķüöøŹL¼õ¬WŚnŹ‚ ·,ė>!Ĝ6&„üzccć’s̹żöŪŪ€?ŗģ²ĖR©Ō™†aœ.„<…‘M™Ų6 !³mū±@ š„SŪ@£ŃhE F3vLX ūĶ.*?Rp ź?SOŪÓ;čYŃ[°åœ·ĮKŻéµ™^ńÆtŽj €“Ćė*w ķA¢%“%ĀT_Ŷū¶č AŻ)µžü^y¢%§ÖCŁžAŗŽč*hį1ģ ·ßKkśLÜUn’÷‹nŠbĒl ŸAŻ)µ4?ÜR°ÓAčąĀ­„’čĘ>q"¼6Bå1•øŹL*?ZINjކ ö“µ“®@ˆ/}éK'Šėõŗ„”ōgĆ0¼Éd2ŁYˆ€aŁ*IȶmWÖžUé÷RJSJYžµĶ³¶ūl„©,»mŸmŪBØjBA–³jŪöABˆü*ÕšX'„°6½+z Ķ įŸégęe{ž0L²3ܕ.sø«Ü§;—®·»);  w„›™—ķAdm„ųŽvĢFŚÓoā ¹ī̤tæŻ=čµ!`ś§^ĮźM!-ItSŒXS iIŚ_č ö“5÷ 2kśLĀė"$Ū“ŲqĆ-0|Ž©>³ż€rž³‹ʶʈ¬˜ śų*³żDÖEH…-„!p•»(Ū/ˆ»ŹLÉ~&OΟ?? „¬`ø‹ģˆ ˲0 £ąv囗¾mØs—zģp‘R>œH$.ŗė®»*C“§‚ž«Īņ;€ T[–uˆaٶ½·a1˜ ŌP|ś@h6ė…ė„”k¤”o[–õžwÜ1tؕF£Ń JĒ”]ĄąEŌķ|ĄįĄ!@š€ķ9ūNV[“€ƒ€š4Je^l(p®£»Ž²”k€iؙƒT®ūkĪŲŁś·ńo`ąDTxü£Ą;Ī›Ė^(U¼°N`łĒ×96NͲńĒĘÜé²#Q³O”¾“O”*÷†õĄĖ@ž§gõc|ź^€ŗĻO q=ēœ£¾Ć`ź;^•.¦ )ō® “źi¢öS5x¼>ƒĄœ@Įż­°Eē«t¾>ś-Į#k#DÖG ĢńćŖpQ~hfB•dgŖ$`ĒÓmøŹ]ųgłq…\T|¤bĄ>]ov#“6•GŒŽm‰Ńņx+µŸ¬Åš”XFYsɤdĒ3mD7ēÆBÆźōR¶fФüĢÄ3;žŚA¬I×µ¼ Ć#Ø:®Jķ77”w<€čę(ĶüSÖü` Sž£’,Įօ‘uāŪćTW5`Ū$ 4šNōŖRžßģŁ³Ŗ«Ź+n½õÖvą_Ī2€ TK)+…T*å5MSX– —r»Ż‘T*5 £mɒ%Å·ģŠh4ša¢€Ņøų0šÉO_ł¹³dspJ0ČEw—;Ēœģ¬»ųŹį%2ō:cŻœ“g¼J$p”„PŖóµĄ×|Uš¶ €'²Ö݆rŽŒŖœžwŅŹŠ@-p/J4ČĒėĄPNzų-pł’MnrlĢn)ō;”Pq&°ØĻ9¦˜ü-gż·€_ Dƒl:€ß°ł3ØŠæŗ<Ū’ĄõĄ÷PB‡F3\&¤kбåö­xė½ųöšį­÷`ųL ·@Z;n“ģHŪ'ŗ1Z0E”ÓnõZyCŚsé|£ Ć% ¶É“¶dŪ}ŪīÄ?Ė»Ā•©źIe^Óņ‡źH`'lšīŁF`Ž?3Ū/LLI;ō¬č%іĄ?˲ļŁō¼ŪCųĆ0Į½ƒx<øB®L‘>;)±¢ńķqĀ«ĆXįĮSšl”ē½^{śqWŗ3זģ莎—;é~»‡ą>¼ ^Ģ2Ćm -‰±Hõ¤ˆnˆŻ’_l°ćźŗż³üö ą®P­ ķ„MŖ'Ed]”Čś¾i^„)Hvėöā“!D‡mŪ_nll|d¬m™H8A”I"F£Ł„h xD9šmĄ€7QNf-p(š]ągؙēōlr-šjĘx šź „š!’*šeŌ¬õęœļĪś?ļ”f›’ Ü œŽŹĢ ;ĶY’7Ԍ;ĄBąŪĄjąFą}Ōlś Ōlūg’ƒčUą®žv¶½2ŌMrģ;%R܅šĪł.EĶŌß⼦ł)šMąCĒĘPĪōtTåŻłĄØļ`SĪłīīA}7Ą¹Ą…(!e*Ś"}~‡ŠŚų?ēŚ,T˜Ž…޹LqʶP‚Č+Ø{[ģ‡rü惊nø³ˆū£Ń †ū»æŻ|OćwöųĀ„Ŗąo‰ofĻz‡ŽUazWįš/}«ÄWē3Ł•¢ķŁŅžÉ#ė£DÖžj¢£żņčs±ć6=+zčYQŅi Ų!²>2ä~VŌ¢ūTąŅšźŗkmؙ4¼œÓŲŲøn¬ Ńh4ĶšŃ@ńü*”’ėĄ²œm£œĻ›Q³öią2 ålž8Ϙ·kQ­ē®¢/ |• ĶƒØōO£fڳIGüÅyõ œ’Ą±Ž¹ēßüpą?_£ųR].ą³(qäÜ<ĒŻ lD9õŹÉ÷”œ’TŹ@īSżķŽŻßG‰%Wēl’ J ČęŌµŸ‡ŗOĪśo8Æ—ŠæŹ’KØŹ’Ļ¢¢ ²9%†| %Ędó°Ī9ß'Š€fēŁčBžråsž5ͤēöŽŽŽ’Ō­å4fāS\ƒ` Ø_P_>īNžœµī8結cŲ<‡r‚sS–1Šł‡>ē>7Ą‹ UļrÖ””r÷s’48ƇēŁv5„Õé”Ņ Ö8.œ œAßæ½CQQ 0Šł/ĘĘ[ óøóš]™÷HTÅCwĒīȳ~ØļżiŌ÷~}ķM±ltaŸteåÅė‡ŽU£Ńhv ąŠ„K—^¢F£™č€āy×yż=p*\} }EüŚčŸ£*@¢rÜ÷,0n:~3·jTnØ{šGQ!čg¢„ƒtāę§PįļwŠIĪYļäüéŅܹ痨*“„Љŗ'g’ƒšYß䌓¶37`glQōłŅ’ĘźūŲĄĄ‚‚ƒ•žŽ†V¢®g;J4čaą÷®Ń”Švž5Ķxc‹”ņ¼ĘĘĘ—ĒŚF£ŃŒZ(ž»Pįퟧ˜xåō~üÕŁ/=ū]r<ß/büÜŅŁ…fŽćؼ÷Ą©Ą?œõ¹į’ j€J[ųz‰ē̆BHTAĆ;˜NŠ‚^@Õhʱń›ĪRŖCW ST¢ž½ź ł£$žDÕ,X@_*Aś¼[QQSXXŠhC;’f¼ńÆT*užwÜ”»Üh4Ķ$C œD9Łū”ĀÖg3eŖĄÜgP³ĢæwŽq”f‰æVÄų„”„ś Ź!=%øQāD+ŹaM“ž~@E F”RyÕ:š8Tq½Øū³Ŗˆß·€³Pé į,ļ§/læ;vĀ®tuŖĮzńzó¬K‹WG ®cźŗf£ ž†*6ųƝ°O³{¢F3ŽXäv»æ±téŅbvF£ŃL “P:«ČŸ›*\ü+ō =Ø\÷Ūčs@G‚”fŠĻB…ĒŸˆ Oæ ČīĮ”.łü°hĻ?aś i T„ÄłĄ'QāEŚĘw]#ØŌˆĀ°¶Ģfż»$¤™ŽŠšų ZŠ”†vž5Ķx¢WJ9æ±±1·Š±F£Ńh&ŗ`ń<‡š .+°żŌ ü¬¬u«×YwϰÕšć%Ųb”ŖÖW'“?ü`ó:{±öwĪ’Aö)–3P÷čē¶ŪØ€l›Š±ń@”Ū9óhBĶąś̳īŌ5ķ]ą˜­ØNÕ ..h4Łhē_£ŃŒ'Ž7Móhķük4ĶäG œ®’¶ĻE“Ė.œ—i’ *L?—)ØŠż }ÅęŠ%ķģUY?_ŸĶ ĒžĻ£*ąēć"”0]©3÷čTņēė ą$ē}ś>½‹rĢĻE…Ųēćā²ńIŌ÷o¦~łS5†śŽ÷öA@~“mĶī„vž5Ķx”SJłĖT*uōāŋ?kc4F3śč€āY \ˆŖ²’U”c؊ŗ‡3Q³ß&pcÖ1®.Nž lC9” ØõĄo)ÜÆÆ”" .rlø†Eūl”³ūgąeTźĄØż*ą#ĪŅžc÷pYéœćØYńēQÕņĆØ…ćQ©ėč«I`96޼ <挓¶ńH”0ІJqŲ®A}?BuMxuϦ§£Śår;Ŗ8įµ(±eź{ž*¢ PԃF“vž5šŻ“°"ó#„ģ&«p¬"ó `Ū¶%„Č.X›B„³ŽŅ×é!D/Yq„”]RJĄ0 菌–”Rö:7‡B”7Ææžś‘LQŌh4Ķ8G ÅóŹIüo”#ū±œķ×7g­‹£œįŸ œĒ sŽŁüųõ0mŗ ų±ó>7ü?{Ÿn”“żqTī}¶}9Ū¶ ӆ\Īvl:5«ŸM•ŗš}²^P¢J'šT=ƒOåŲųĒĘ&vŽõĪųæA}/Ē8ė“(AāĒĄ›9ǼŠZų±sĢŃ9Ū7¢œ’į~‡šŻķük4+…+÷–eI—ĖeK)ū9Öńx<ķX“L&cĖ–-‹¢Ńh4Ķ8C „ńOgq”fŻØä6²ö:Q•ļæ…źPŽš™oA9ĹÜå,ŰŠY†ā!gńSū{P3ŁłZżŹw/†.ą;ĪRjæ'P³ėMn•÷ ³kć CŲq§³äņp ąG„`¤æ‹ōƒšČsĢ+ōExLEu Øk©ī šÉͤrž=5n„Ke%;’Ų »Øć Ÿ»BeCŁ ›dGqEĘ]!f`°…±Ā)R½ƒw覥SėĮUīBøĀȄµI“&°¢„wųtW»q•»0½Ācģōxš1ćµ%K–¼2ÖFh4F3Rh`x¤P9÷„²ƒke·³$P3Ö»Švg)…]ecP #)”Ł}˜TĪ?€oŗŗÓźč]¦łĶE7å¬ü³żl’{sŃ@åQT|¤bX¶v¼ŲAū ł3¬<õŖ>ZEpŸĀȧż)ā-q:_ė¢÷żŽ‚ū€8ŖŽ©$47„é/,XÄ[t¾Ö9äxF£Ńh4#4fō˜tĪ?@÷;=ö Ü;@Ł~AĀūé]ō˜ņCBēægEįßæƒ8ēĆ%°g€)Ÿm@øūʖ)©["LįUQŽz/ gÖ曼cĒSł5\wµ›iēMÅUŽ’gÕvfž ·ĄšCą­÷Špf=ž=ü“>њ?ĘiāmšRyL%­·bĒ‹‹Ńh4F3rh@£ŃhF‡Iéü§i}¼ß“˜“ŚOÕŻÊämw…\ԜT@Ŗ;Ŏ§J˜NæšdWŠm÷l+éX+6Š&ÓoRFĀ-–¤ćåNz?č‘`śMü³żTŸP…»ŅMÅåD7GˆĀL9»W¹ iKŗ^ļ¢ē½^’I¤%ūķēŪĆGõ±Uųfų(?$DlkŒž÷v"®2“²ż‚JHŃ„ē4F£Łåč6€F3ņLjēĄŠX“>®fĆÓ"@!źN«Åš ”呖’g~Óįł2a“ģL–“Ų±ēŖ8¢<¢ßņp /väMG°¢½ō²õ®¦LŽ~õ±Uö īĄSć`Ē“;hūw;‰¶D?ē@Z’č†(Mwo#ŗI•©>~ąxF£Ńh4£…4fd™ōĪššš0ŻļŖŁė²ż‚™ŁŻlBsCęč|½‹čęŲ€}†Ätkdbåƒ{+;ćŪćC¦.Xa‹®7TW6O½WE’ą¹ōxVĬ܏Į¶¤żyU—ĄUīĀ[ļ-ÉžB>3`ŖTsxi†ĒĄō›Ć>Ȥ;ž‘{ÄČ\›W?¶h4F³3čF£9vē?MŪÓmų÷šį®tHp•¹ØuB’­ ڟ+µ&Ø" S;/n§^ĶÖGÖēkĒŸČ†Õ'ØŁzß4½]}üL'ļ?њ(:Ÿ?ŽÜ’ī›į%ŽRz<¼0准(;  OĆŻßiOu„ÆŠłZ'©īTž1\‚ŠĆĖ īÄ;ÕŪĻń·6±¦8įĆō¼Ūƒ“ū_\õĒŖ)Ū?Htc”öē;Ø<¦’Še˜A]Ńü` Į}x§(Ćp÷9ļ3¾<½ßx­µö‡„Q~pļ/Ā•umā­ "ė"t-ļĀ ė® F£Ń‹4fdŲķœPNbĖ£­Læ`Z& Ż ī“Z Ɓ“$Ķ“ {?“}¼pŚśŌŒ7ؙśÜ¼ū\\•īĢūDk¢h;śöug`:3Żv²„Ō%ˆćƒįLżĀ4|Ó Gø*\TQNčą2¶-ŪN¬©ō…«ĢÅ“ ¦ā®Ź~Ćc˜ķ'0ŪOłÜM÷lė×ņŃōø+ŻČ„dŚłSńŌzŒa]yÆ/·Xbŗ­$Øļ»įģ‚{ņ_˜o½o½‡ņ¹!¶žµ‰d{q%4F£ŁŻŃ€F£Ńģ<»„óŸ&¶%Fē«TS™é \=•מ|‰–āķd žZ•ĒT˜ćĻŪjOZ’č¦(ÆtŻ°Żåx¦J˜9–I‰³1|ʀ€To O½gŠÖ¹˜AœImWØōŸāźUgœ’š‡aŗßī&ÕkaE-„!0üŁŖŽ­Äš4|¶žM‹6÷›uo8«w•iIŗŽč"¼&’P„)šŌz(?$DŁžex§z©9±šÖ'vAHGTĶÄč~Ƈd›#Ł•Ä [tœn ƒtȎ€TFpƀ*ØųF7½«zIu§ į1p]öōSulfФę5læ{É÷P£Ńh4šŻ-LNüĄgœ÷¹I®åĄĄ,  ųšp$0X¼±+ Õh&»µóŸ¦ż…üsxė=Ō~Ŗ63kŻ£óµĪ[8~µ§ŽĖŒ‹§šŸ.LA`N€ĄœķĻwŠńRG’ķYačŁ³ŁÅ`Ē•jŸhKŲ¼S¼˜A³Øō“8¢l*-ß^ø”¹!zW…3żčDK‚Dk‚©ēNĮrįŸć'²V„=ų¦ūšĶšŖb¾ZŃp”čĘ(vRR>7Dč ;žÕ†LŒ°č~»›Ö'ŠŁ"Lv Gxm¤ą} :µ$ŗßī”ķ_9#’VŲR‚!Ø>¾ ’¾¼ćh4F£ˆ&. @ŲŹĄfJÕĄ=Īū=lĒd:š20#k¾ĢžÄŲ Õ@%ŠĢ@įB£ohēßAZ’–‡[˜qńtĢ€ņŲķ„MĖ#-;Żē>-&øŹLdJҵ¼›šš0ÉUåßNŲw•›Ą^*¬ĄšTŸPE|{¼_®æ\ņSŅ©ŁįźŻļtSyTĀ4œÕ@óƒĶƒŠž™~j>^eSi…ķ¼ ŽL½®7ŗŻ7²^9ŚfŠÄ[ēɁŁ~’É! !væÕMłÜĀ-šÖzˆmė’“#-IŪæ†Wß!éō€ģ: łˆnˆŅė¤C ØQ Ńh4f Z˜øüųš`yζj 71ņ«(ē’1ą hq¶µ:Ē œĘŁuüųp>}"†F3ŃĪ®²žÕć…Ką š¤ŗņ +št@KŅōצ((±!Ž'ެŠÖM’ņt · źøŹž@–Æ-K Č8˜"'Ņ?Łž¤ó•įßĆĒĢÆĢ$².B¼9ޱI‰į5pWøšķįĆ7͇³Iõ¤p…\ˆ ī§["‡v’ŗ–wį*wõkuč®Vył‰CēĪ';ūöq•» ēž'Ū“%GS †LØūģ)P› M¬)FģĆč*QæßO2™Ōm4F3©ŠĄä¤Ų«Ą¶żœ×_Ļęlū”³hĘ1BŹ—$Ņ?ÖvŒ?ÄžĄĒwŃÉÖ¶}Ņ•ÕoŚEē÷˜~“ś3źH“%†Ą]妞Ģz¶Ü¶u§Ď;éöw“ [y’\;tæŻMå‘ų¦ś0f¦3Avz©­īŅūēėFŠöl;v¦źŲ* ·(Ų”CŻü` õ§ÕAØÄ⁨ā{ ŚÓ”ćå)f™śłOŪ:$NĮĀģŠ4ٹü#Ax]ļTU/Ą;ÅKl[œTW’TEŖ;EŖ'5¢‚ØæeiŲ«ž›¦Ü„Ļ§Ņ ¤”ĻßpĆ ›Q¢ł}Bˆ'GōčF£Ńģb“P:0å`§ē¶£fį‹£œ ‚ŹæO¢fŻß ųž`³³Ļ(§=… ݟåģWé¼@¦”MĄ6ēżaĪś7³>›Ąēs=*z m’VTZĮŒ¬sgćqģŸķŒ+żŽ U÷ĄAĄ@™³nš.Ż+ģė¼OŪ·g–}mĄ†œ±ƒĪö:ŌwŅ¼ĆąŃ •Ø:UĪēn`°ecĘß®üņŻĄŻcmĒxćwžŠÜ5ĄFö§“óߟŗÓk1ƒ&Ņ–“<Ҋp ¦_0Mµüd -¶{ģ要Åü†"Ž*T•ż WF°GIåhwæŪCŁ~eųfųp…\™.VoŠTÆEdm˜ČśØ*“ēäžēĖ©ŌĒ ·w¢-¢į\‹–’¬āõÄ~)£Dēkų§ūšĻö“ĻŽŪÄ[„W…é~«{Ųį’ĀTYAÕ1•Ž>q#eKāIz…śŻż*šU)å‹Ąw…/ė„F£ŃŒ1Z(Ļ73ólė~ üĄĶĄÉyމ7?B9ų§w:c|ŅYæų)*??›?g½_üÄy’ ŹiOOķ<‹r“Ó,Ėz’ ࿁/×ßžµ}³O]žkh¾,ÉY<°uż¹ō8ēł?ēó‘ĄÓ9ūüĀYī.vŽū€ß—9ח < ü'żzÓ9ękyŽxøX›g›F“ūĻCł”Ŗ<@ē+Ä·+]³ky© tpˆČŗČ¹ę#Iv¾苣·cYmģ„Ew§«ü[±Ā³ĻVŲ¢ky]ĖĻ͇¾āV“Ä>öŅIE_<±#AlkńaōŁi£…LJš–mĖ*tWøp…\øŹÕbx Ɓ†’ Į}4ݳ­äZ¦ß¤įģüN1Äå›ā<ņN„—ÖÅŁŃc!K°w½›÷õń¹ĆƒTŒć€ē¤”ßBÜ4āÆŃh4Ķ(£€ā9øuĻī@ĶŽ·^ą`ą"ągĪŗ?:Ē„€§P3ą£fékP³ü”œgÉĄŠūļ9ėļEĶR·oær¶5kވ łx~ūÆsl=Ųø•¾ŁņÜT€l> ܂šåæ X t „…# ÅØČƒGcŖ€8ךŹé "'.G ļ÷£¢Ņ×up4šwē\ŠŀcĖ—U(ńc=ź;™œœ <@‰ßBE܉Š\ńšyącØū|ų ÷A£ŃĪÜÕnjNŖ њ ć„¾pó¶ēŚ ģĄ]å¦īŌ:bMqR=„ÕšÖ{)?Li—ÆvõĖG ™ķ f½Ļv`KiægśĶŒĆžźźCOŅS½©¢:N;;P]J!`ųŠ0 ·S€Ż×łĄN©×ŲÖXŽźżćŲÖX^qĀšŖ‚‡•šĀ?ÓO`v _­‡”0¼Ó¾8 O›¶^‹Ÿ=ÜÉ kž+‘’¼ß”ąż¦w¼ŌĖ~¢œ/t7J)CBˆ_ ]£Ńh4šń‹ŠēJŌģńÓ73M#* ą›ō óQĪ’ Īń¹Ü|\üō„·—rŽyÕyŻ×Y®g`Ą|üŲy=%üxæˆć¾‹ åæ„aēBµ¼u}iątT*Ć"ņ_÷SĪuœģ»–>ä”p‹īƒV8ūä>ķ] ü8ĪūŸĪś‹PĀĢ (!"›? R¦”&ķüēA˜‚†ĻŌcø…śß’©”j&·åŃV¦q†Ļ š^²3©IDATžĢ:šī.m¦Öš”ZØ~÷Å ŁĪ}:ü”“žīą›ę£ūÜ? łńMófŽ'ڳ—`ĘÅÓh®=o¾}>¼S½™ä­ÄŽBYTłI9"ƒį1ŠŖ~_f=Į}‚żZZ;3F1¤Ćš“IRŻ;YŌqLæIp_MŅ»²7o};nß§åńV{0&¾iŽā g5ą©q³”-ŕwķ ¹{hį¦7nsķć¬iIņ_Ÿ®D®–R¾'„xø¤‹Ōh4f ŃÕm‹ēēõÖŪßV£œŌō“ē‰ĪėĶŽŁ„ ?ūēl»Ī’®ĘD9Ó]Øņ|üUĒą€¬ukPż-ŽIĻĄO-ў£™oc ó*āÆĪū£²Ö7 ŗä{Ņ·«Pł£SNZ3ŃŃĪŖÆĀŪ 掗:‰· tdc[ct¾®Āįż{ų©<ŗrĄ>ƒ‘hķÓ;­ų~ļi'Rڲæƒ-Uū8€ĄŽ¢ąŠĮ* A¦$±Ķ}*ģ„™UwU^µ¾ßx©ńģ˜MlKizśŻ“©ŽAöTøjśVoŸćž¾'éč…Įp•™LūĀT¦}a*¾¾ƒ\²eŠBé †Ļ īŌZźN­ĶŲ=Ų€VTŻūRź9”PF`ŽŸ®ØĶwīn+ŹłĻę7Ć,~¾Ō3Ō„ŌEY5F3qŠ@ńĢF9ˆ¹Åń²95+Ÿž²Øw^;Pańł–tģeMĪXć!½š£fÅ =!YØ"…'e­{ Ņ’:jV}?TĮ¾ÓP5ŠZī³ŌwPč~¦o«³Ž[ ŠJ8Uˆ1›'PŃ #×ČZ3YŠĪ²łxsœĪAf¾ŪŸo'é̚g‹Ł÷UUóÓµŅX+^yTžŁCūZ凕g*Ū‡WGķėyæp:|ŗnČĀv凕g…šźš€ ōiA!t@ž=†vĖ(#t`YƖ쨉bˆ7Ē3©UĒU!ŒĀöūgłńŌ*'?š%\DÖ* ÕSėÉŲRˆ@Öwk¾Nš]”X’źJe¾ÆąŽAĒs•¹pW*½=Yd«IaŖOP?7>ÓĶ–ŽįE3Üś\7kZ’ ¢ü¾>¬A4F£t @qøPÅē6±ß֜ĻÕÖē#÷I§ÄŖP£Bś©p0Ń`cĪgŖap}Uż³īdŗzcūfßĻļ£j ü.k]7źū܈*ndčėŌģ^hēæép~HKUż, ]¦$-¶0żKÓ3i[n߂Uż¾įŒz„[`ĒlÖ_ßæX`Ū³ķL;*†Ē`ŚyS‰m‹Ū%Ł™ĀŽŪS9óf™‹ĄlfVŪŽŪ“?7P× ÆV•ųsü÷ 2kśLz? “lOØŠx)w…‹ĄœŽ)J°°6mĻÆć•N‚ū.Į“ó§Ż%ŗ%FŖ+•ińgz ̐²Ļ7]‰©^‹ö†”;JU)æę5fū™~ŃtzŽė!ŁžP÷Ćm`ś |Ó}”¢ōĪdg²_ˆ|¼9NdC”Ąl?õgŌŲ;Hd]Dٜ°1¼¦ßĄ?ÓOh®ŠVÆ ļTų*ĖIÆ?½Ž®7»Iu«óŁ1›xsiKzW… TFÕ±Uxj<„×EH¶'3Ā€4ńT»©8¢a dJ^]\ÉtQĮ¦N‹ß~QJ[Ā-Ļõš«sŖA©½v؃i4F³ Ń@q¤ŸRKuʽα×±o®=īu°ų5*% Ū§ĖY’Ž0ģIOރ*ž7Æg½Õ¹įtTĀ=Pķg”¢6Ī@u:8 QhēźN­ĖäŲw¼ŲQT{¬)NēkT]™)Xlń¹Ų–Ķ4SwzŹ÷žźÅ7Dč{²=IóC-«Ö7’£™†³ź ģĄ šTžԟTOŠķkĪėĒ·Ēi~°™ŗÓźTuś"Zė%Śl ¹ß¬x)t¾Ž…§ĘChno½ļɹAd}XQ‹ę[DB“<ŅĀ”³§ą›ę„læ`&j"ƽ­‰.˜źMŃū~/e–į®rS›es÷;=“>®ZE¶=ӆ§ĘwŠ—ą¾ĮLōE>¤„źLd×yŒtTĮ3«¢XĆ»õ^X#’ƒčĘ(©°Eē«C·»KÓžB® 7¦ĻĄ]éĘSćĪTĄnŽ"L1 ¼>Mxm„č¢M÷-Ć?ˇ§Īƒé71Ü*“ĶŽŪ¤"‰ę8‘uĀė"ƒ“6ŪīŪŽoŗ²ŹšÖ{p…\™švJbG-ā­ ¢£ō~0xØ~ļŖ0‘Q•0ӏ»ŹYf"œdwiIRį‰Öį5"k"Ćī]Æ„–ĒZé~Æ‡Šex¼øB.5#nK¬Ø…¶ˆnŒŅõVw^”Į [4ż„‰Ą^‚ūńÖy0ƒ¦śR;b‘ģL^”7OŖB¢-Itc“¤"†Ķ“Ż£lß ī7†Ė¹ß±>ފZl½³‰ą>‚{ńŌöŁź»Kõ¤ˆm‰ŃżnOI­ Ż5*:ä­MŖUåE-Ćē1yOƌ2«ĘĶ«ėcBpĪG‚4¾ŲĆēō –­Z^’TW¦CĄ‘³½2“0­Ńh4͘£€āYƒj÷W“Ųē’„ÆPą:Ō¬ņ4`Cc~ŽŹ‹æ‚¾ ’„0  ²åtĻDՋ(äeüU+ Żi “Āu ¦qī|×µĪy>ČqŸ~Šź"š[TqĀ€eØB¹$Pé PŃšŻ› įüŲ¶N;—–“°„!Fæ¬K|{\õ\2%3UčsŁvßö!·“’ž=ō¬(®r1j57ģ˜MכŻt½Ł="ćClK¬ä"‚ŁH[…ĻBŸM×]t½Q¼¤NŻouÓżÖą÷( Š»jųaśłp•™4÷(ĮaJ…‹ßż³ [Jö›āĮ낽ėŻ>ÓĖMĻtću+‡ßė\÷¤ŗÖ3ęŲ·ĮĶŹķIZz2ĀÅ`æKF£ŃŒtĄāyå”~·Ąö¹ØBwėč+ģ÷”óś½Ēü’ķŻkŒ\åyš’™õ®½fķ±¹_ŚÄ!Š RDÄ„!‰¢&MŖŚ”†’6±]pŚT@š½} "Ŗ,”ŖXuź6©ńnhÕ4‘Ź%‘P‚ƒ­—Ņŗ$8˜RlĄ ^ŪxmÆ×»3§Ī޽8k|Įė±w?i“:·™gf,yžē¼ļóv§š;ųó9tąPšwĆĻ?ŹėŽF™ź}ĻMµ¤įx>–Ŗ9ßŲāEŖžóĒ9æHÕ ’ßߛ½ÆGGcślŖ•ĘóéTßĆk£Ū›SÜų@Ŗ"Åx®ż«ĄŌvŹ$’IŅÖÖö†Lśõį£LÄ`*j––G3|kŻīüöU]¹å}³3’ōźžČ —Ÿ–oÆŪ‘CŒŠčß]O÷ĢźæÆņĄ)YŒ€ćĘ€#·,ÕŠö?Mņ¾$O%łIŖ!äļJr}Ŗ®ö9暯„Jv?—äź$ßM•˜NKuü†T‰nOŽ>łüńčßU©ęÄ÷„ŗcØ„÷ŽÕŅTwÕæ’jŠĆ3©bķLÕQ’£©~JŻ3ęšSŻy,Uþͩ’żóFŸćĀTKö7é¶ł¾īJUT٘jÉæ»S(ø/Ég’lHņ@ŖŽ ūR>˜äŚTĆ0ļ}ž©īšßäGIN²%U‘b^’_Hņ«£Æń£ł`˜TN©ä?I¦OŸžÜąą`#£…“¾Į¾Ģé8Ül˜Śź»źÉÜdެ¶ä•į\· 3÷ųĪI¾šįm$ĖžåõÜpłiY½~0ūzzĮ;ĪhĻćĻU£.ęĶjkīī;aoŽ€#÷BŖsYŖĄ/tüµ$_LÕM¾i ÕŚõ÷¤J@/?čš]Iž*U—ś£µßxć,»R8kōµž:čx-ÉϤś¬:R}/"ī¦i£ńĢM5‚aGŖĻģŲ&4sRY¶ćn-“Æåe§dņß“xńā?)Ėri’LÆMĻ >Ÿöāė«ßæłž¬ßłL’ä=ŻļÉõē~üÄ '‰™uęœß8'›śGņÉÆlÉ[éĆxĶĻĪȲ›ę&ɳEQ\|¼b€‰dĄ±Ł‘äæŽņš”$OĮy»r`ü‘h ^Voć!γN[ÆēĶč­9ŠßąH 䩟ÓęĆ\»+Õtƒgq¼‘Ŗ˜šæ‡8>ž‘˜b§tņŸ$µZķ”z½¾4I†CłmksĶÜk[œ“_ܛ‘Żõ̟;-ætÉĢ|÷G{ŽéyŠ$·^·æĶ?Æų`¢iLE§|ņŸ$+W®\_ÅwšŪkś×d°>ŲŹą¤VÖĖl’×jpŻš3Ģį?*7½·+—žŪ‘T£łī9ĢépŅP¦šI‘ü75?Źč{ė{óąęÓ(µb'0šō@önŽ›y³Śņ7žžīĪ£ū)ōĮ‹;sū‡ö÷°ż|QĒo]J˜` ĄT2©’’$éķķ}ŗ,ĖūšŪ’·ūł¬~mõžćӊ3½źå›µ)©”l”yå”-Ł9’wŸÓ‘ŽÅgäēĪė8ģumEn½nv–žśéi«IrwQ_Ÿš€ą8Ņ˜*&]ņß4sęĢŪÆHµtf~Š’ļŁ×Ų—œõ‘LÆMßžéP©ļ®gó×ūröƝóĪģȽ ĻČźõƒyųé=YūĀP†Ft<÷mmy’‚ĪÜōŽ®œÓŻ–TkļLņ„ÖDĒĪ*Ą¤p˜U&mņßtĖ-·\TÆ×צZ­#IrĮĢ sžŒó²fۚ$ɬöY¹żw“*D8éŌŚ‹Ģ¹öōt_>;Å“ź'Q£L¶ķ®gϾ2óŗŚ2³ć ?•Ö'łĀŲŽp*1˜ģ&}ņŸ$+W®|”(Š&ékī{iĻ‹ū“’$Č«Cƶ"<8)5†Ėō?֟ļ})Ū’m{^ŪüZjE2Æ«-ž>­™üļNr’O%¹LņĄ©Ģ`2›ÉÓŖU«ž\¼xń•eY>˜äŹńĪŁ0°!gN?óG'·‘#ŁśD–õܓ‘ŚHŗ»»sĮüõm·Żö„¢(¶“:>8^Œ&«)•ü7­ZµŖÆ,Ėė’Ü•d×ĮĒ×ķųoĶaėÖg°>˜įįįlŻŗ5O>łäW%’L6 Ąd4%“’¦ŽŽŽ½===_,ĖņIž&Éžī;†wä©ķOµ.88 ÕĖz{õѱ»~xß}÷żO«ā€‰¢L6S:ł«··÷•žžžĻuuuĶIņĆęž'¶~?Ɩ.‡¦5żk²cxĒžķ²,’¬…įĄ„Q&É’8–/_>T«Õ~7ÕņeŁSߓo¾ü —Ć-Ž Zļł]Ļēū[ßæ]–åć½½½ßnaH0a€I¢ÜXk4®“üļŽ{ļ]›äo›ŪÆģ}%l~ ƍ}-Œ ZkӞMy ļž4ŹFs×®¶¶¶?heL0‘ŠĆŸĄd°dɒöįįįG’| ¹ļ¬égåĘ ~3ŻķŻ­ Zą?·?™G¶<26ło”eł‰ŽŽŽ[L$€)dɒ%󆇇ŸHņ®ę¾ö¢=WĻ»&Wͽ*ķE{ £ƒ‰×7Ų—ÕÆ~/›öl:ųŠ÷ōōÜŻŠ˜ąDQ˜bn¾łę9’TŇĒī?mŚi¹xÖ»³`Ö‚ĢŸ9?mE[«B„ćj`d žĶ³Ļf枍)Ėrģį½eY.éķķżūVÅ'ŠĄtēwNŪ“iÓŅ$˜ä§2żZQK÷“īĢh›‘m3N|€šÕĖz†CŁ9¼3ƒõĮqĻ)Ėņ…¢(~«§§ē'8<h €)lŃ¢E—$YšäśVĒ'P’?ļźźZ±|łņ”V'ŠYøpį•In¬Õj/ĖrA«ć °7Éź¢(j4ßģķķŻŃź€ąDSą .\ųĪZ­vY’·7īZ­ÖŃź˜ąX4µZm[Y–:;;×®X±bW«c`āü?ĻīŻŲL:̜IEND®B`‚libwebsockets-4.3.5/doc-assets/lifecycle-context.png000066400000000000000000003523621476025525100226010ustar00rootroot00000000000000‰PNG  IHDR­±K· pHYs„„‹» tEXtSoftwarewww.inkscape.org›ī< IDATxœģŻwxSÕšļĶNŗ÷`•U½÷žŹR– ‚""ˁ{€"(*‚܂*‚ ŹŽ”½”¬B„Ś“I³ļżżz›Ūģ6i }?ĻćcnsļĶ!¹99ēÜ÷¼‡A5•‘±;J$’&Š`Ią8&źˆ€hŽCDˆ)8ˆWvy !„BˆG ĄĄ&·ĄįĆą d3Ą5†į®²_µXōāć{ēVva+SŁØ¹¹I5XŪ•ӁaŠ@ 1•].B!„R™øL€9Ķq8ŀ9ČHŲ}QQŻŅ+»TžvOv23÷E3 ˆ8 d P»²ĖD!„Bī W{Ą0͜yK\\œŹ.ÆŻ3€œœ=‰œE4ĄCŚUr‘!„BČŻpąÖ@$ZŻ%„² ä wu +ė@ XĖ㠃G“ŖģņB!„{ƒc˜ß9Žū%6¶kve§¬īŗĒqLvöž Ė=ĆH+»L„B!¤śą#ĆąXŻe Ć0\e—ÉwMąŅ„åĮĮ”cD÷*4­ģņB!„ąĄ|i0ai­Z]t•]OTł@fꦂžøDWvy!„Bq ‹ćø-œāĖųųvE•]WŖląĘ$„BŹNćĄ¼jųB!„»— ˆhu†oėÖķ­ÆģŅ8R%;9™{†r/øŗ•]B!„B¼Ę 3;:ŗóņŖ6G JurŅ÷·įD–Ϧke—…B!„rc° fFGw=QŁE)V%:7n$)å2īmpx €¤²ĖC!„Bˆ™|ÅB3+6v ¶² S逜Œ½½9†ł@½Ź. !„B!~”ĀpĢ䨸.»*³•Öąø#ŅģLĆl†Į[ U{ !„BHõĄų<źVč+LӦʏ(@„trӓ³"īwŠź½„B!¤:b˜£ŒČ2.*ŖūŊ~é yĻÉÜ3”q@B!„R]q\[Ī":’•µodEæt…Żąø?Å9Ł5އW+ņu !„B©Ā8DÅܜĆ0[*ā+¤!~g5ßßnhE¼!„B!wŽŪČHšpTT·Bæ”ß;99»ć8V²×Ö߯E!„BČ]ģ¤Ų,Q³Sš?_ÄÆ€ģģ 9Ö²•jūóu!„B¹G\åō‹‰ézŁ_/ą·IĄ¹éūļkŁIB!„B<–ĄpÜŽĢ̤ęžzæÜČĪNj –Ū Ņē'„B!ä—Ć1l’˜˜ī'}}bŸwrnīmĉ™]b|}nB!„BŖ‘\1gé×#Ł—'õi ;;©Xn7€8_ž—B!„j*‹±p=£jt»ą«ś¬“³7žµ0ū)ęŸB!„_bR!’t‰Žīé‹³łdpzśkaÖPćŸB!„_漂3ÆĻĢÜą‹³•»ĄqŠ%"Ć 豋B!„BJįø¶bžŹq\¹Ūļå>Anv÷ )ļy!„B!ĪqĄC9YIóŹ{žrĶČĢÜ÷ XSŽóB!„B<Āq 7*&¦Ūź²ž Ģ ÷Üō¤Ę¬ˆ; Ø¬ē žÓė øzõ& F @]ˆŽZB&•VrÉ!„BHSC$nŻéRY.S€ćŽHs² ū“/ĖńUUæž“pżz: ]»fųķłģÜŪ¶ĄōésłķĪ]Zćē?p{ÜŚ¶ćŪ„+pģX2X–ęžjü@A”łźB€FSäÓs›LfžÜ ÕźÜóžßbń’_|Zā;Zž35¼žīB|ģ«ož@NĪmĄÓO?Jā‘¢"=_—k}üŪOˆ_q\ۜˆü·ĢööPÆ;9{{s ó¢·Ēļœ9s Ÿ}ž«ąo2™ujĒC®”°P ‘Ų'Y\ !å0uŚŪøu[ =j Ę<ü@%—Č’öģ=Š%Ÿ-ē·żåC(ņJ,—§ĘĻ?Æ„„bŅ#*µ<¤|.\¼ŠŁo.ę·?żų5ŌŖEkŒāĄkŁé{7FĒwŪćĶA^uŅӏØ8ʰ >Z?€8÷÷Śm‚Ÿ·ŽœŽÉOŽ‚R©ØÄRBJ;xšŅ3²Ś7«äŅTŒģģ[Ų½ū0æm±°.ö®K—­äļ¬N~r4‚‚|’*›T’u”ąóä®9!Ք"ęū7’ZÖŖÕÅć/ŠW)£ŸĒ©ļ}ŁČż»!;sŸĒūŸ=[2§£{·¶xö™ńž(!„Üõ µųžūU€€%¦<5ŗ’KD!Ŗ”\ʽ /B<ÉĻIß߆c˜ēĖT,āµŪwB  I“•XB©Ś~ųq5ĆżųćĆRÉ%"„ ÷JVցžīģQ€ć8†cŲÅ(ć¤aā=ŽĄ?–Ėe•XB©ŗt:=¾]ŗ€µ®œ6eL%—ˆB*…”a-_rēQ†Oō¹YūĒ‚A÷ņ•‹|žEɤŽīŻŪ”UĖĘüö÷?ü…¢¢’Š­[·ņłĒGž[Ģ՜NƒOįš‘ÓČĢĢE~~!Ō„",,įį!hŲ ŗvkƒųøhÆ’-gϦąČŃ38ž rrņ Óéa0š؂B.CTT8śōī„ŲŲH‡ēŠjuųįĒæųķ„„:¤·ĒeHNNĮ¶ķųķ~};ć¾ūGر,‹OāŌ©‹øx1Zh“E0›- ‚L.E|\4Z“HDŸŽØņøŽ0šL8zō,öļ?ŒĢäē _]ˆĄ@ĀBƒ„ ź s§–ØWƖŪómŲ° WRošŪ=z“GĖ|^īĀB-öģ9‚³É—‘šzzƒZH%bØØB½z5Ѷm3tīŌ"‘wӄ²³oįĄĮ“8~üņņ PPØAA*•*„±±‘hڤŚ·oŽ„„nĻgū}=ź~ž¼~=;wĀ©S} E:‚ƒŠ–-£wļŽØļüū°āĻ’}Kš7¶$kČĮC§~W»tn¶m›:=/Ēq8ž öģ=ŠŌŌ4ØÕ…ČĖ+€T*AHHĀĀ‚Q£F Ś·kŽÖ­ļĆ8ÆßW®ÜˆĢ¬\~{Ĉ.’MĪžm#G@|\4ŅŅ2±ęļ­‚}Ϝ¦žęŪ?fÜyęéG]–Õ–’śrsóŽ꓾ń­V‡¤żĒqōčYdgßB^~4š"„†!4ŌZÆ6jTŻŗ¶Att„Ćsčõ,ūn%æŻ°aīŲĶć2éšż%õfÓ& ЧO'§ūēäÜʞ½GqźŌܾ­F¾ŗF£‰Æo"#ĆŠ¼y"ŗwk•Jéņµ/„\ĆʍÖy†A˜8q8ėõ{čŠi:| ēĪ]F^^8ĮAØU+mŪ4Aß¾f©Õü²üoĮßn¤e ¶ū}=¢¢ĀķŽ}lĀC tYnŠė 8v<‡ĘĶ›YP« QP؅ˆa R)ŒF‰uŃ¢y"ڵkęu˜Æ.ÄĮƒ§pģŲYäęęA­¶f)T*dP*ˆŽŽ@ćĘõŠ®mS4n\ĻķłlŪƒõä_N¾€={ŽāāÅ«ČĖS£Hg@xX0ĀĆCŃ Amōļ×uźÄ{’‘ŹĮ [vvҹŪÕmąĘ$% n-õ[>ĒįŻł_óŪóߝ)č|ŗųg»†E±}IDZ/éøŻßĒ=2Ä®—_€O>ł ?ž“Ę;‹†¹Ā0 zöl·fOGóę‰n÷ß¾żŽ’`)N¾ąv_‹E0 Žļ»FH@€k×nēĻˆż»z|Ēć«ožĄŸž‰D>¼æŻ>Ēį‡Wć‹/~ÅĶōlĪ«R)0aüƒ˜õĘŸMŗ.*Ņ᫯’ĄW_’ęqŠŁ¶m›bö¬ičÖµÓ}ž\µ’ż·›ß~’=…O;¼óīWXõ×&é=:¦F|4Žx} ö Nrr ęæ÷ ¶nŪļѹ†A÷īķšęģi‚ļOióßūĒŚ“i ‰DŒ7f}‚Öķą’īˆXl½ŽŽļ„†ŲÆqųż÷«pāäy§ĒļŁs{ö±ūūģYÓv8ŽĆź5[šžKqćF†ÓóŚŖY3ĻĻ| ĘsŲøV(傺ęäÉ ųnŁ».ĻyäČ<7ó=ž½éŠ”žž1šš&8Ÿ#.üĪįßgL±ŲæF£ _~õ@*•ą™§Ēłåu²³oaį¢ļńū`2™Żī/‹Šæ_¼łęt$6L<§PČńן-HNNÄĒEcą€®w”¶nŪ/ų<¾żfžĆż’“S0ļŻÆ°cĒAĪ«PČńČŲĮxżõ§ģpŸsē.󯆉‡c’xõÕEøpńŖĖ󇅅ąå—žĄä'GŁż[óó Ü^cß|»Āį߇é]”µZƒ/æś–.ūÓć:±Nx<3ćQ<žųCn÷½~= .ĆźÕ[ģÖžq¦Mė&xżµ§Š«W§ūŲ¶1j@"‘`Ę3ļąŠ”S.Ļ=kö§čŃ£=.xÉ£A)RłŽY”šŗcCŻŗ½]^ n»¤ 7jū®hÄ_®\¹=ĒćŪ„+_}ż» SĆ0 Z·¾]:·F͚1ÉdĖ¤(Ōh”VkpźōlŻŗŸ_Ō+åņuL›>kV^ę0‹…ÅøG_ĘÅKWłæ)• ōīŻmŪ4Axx(‚‚T0LPhpžülŪ~iwn³,‹9oŽfĶѵKė2•”,X–ÅÓOæƒ+WJĀ‹ 9zõź€ę͹\‹Å‚ĀB-nŻŹĒ¾¤ć8|ų4æ’ŖU›Š¬I̘a?*{įāU¼ųŅA622 =ŗ·CćĘõ…\½ĮM”ÉēÆ`Ū¶ż|hœĮ`ÄĢēßG«–Żękξćuß}õ1 Ō¬‹°°`hqóföģ=*ų1L¹|o¾µ_|ö¦ą\=z“GķŚĀŪį›·ģƒžĪœF‰ hŌČžv|bCūļŌÜy_Ų]Ÿ]:·B‡-P£F BB‚Ą², Ō¤^MCRŅqĮ݇ÖmGćĘõšņKö+Pøąetļ9:µ‘ņę[K°eÓ÷õ«Vm4@§M+)ˆŠ ǰ”ĀļdŚĶLĮ1ƒõ„D,¶;·?£Ģf n%‹šÜ³|ž¹¹y=ęyäåš‹ˆEŸ>Š¢y"BB‚ R) Ópū¶gĪ^Ā–ĶūųŗI§Óć©©s°g÷ƂPĖĆūć½÷æåƒė6ģt"VĢ`0 :ĢÜ߯ī.å'ńģsó©YėÕ«…=Śį¾Ęõ™\ŠĀĀ"dgßĀńē°}ŪMÖA£“›Y˜8i¶młbkĶčt<;s>L&3dR)ŗwo‹.]Z#::R©łłøpį*¶lMāė3ųįǿзo'ōļׅ’›J„°»ĘņņŌŲ³÷(æŻ«WŁōø[ņŽć0eźĮæE*• K—ÖhŻź>ÄÄD" @ ³Ł“É„””ė8pš$NŸ¾ČļæråF“mÓ“žiwž¼<5&OySбD·nmѼYCDF„A©”Co0BÆ7ąĀ…TģŲyHš[ńöÜĻŃ®m3“iÓÄåæeń’Ÿłė#!”ź‰ÄÄ„‡‡Āh4"/Æ'NœĆ†w#/Ļś^T¤Ē„Ē^EŅŽßż"K|‰›•ž~äūųųvNG]vDząb\ķC|ćć^l÷č5ļ<š@¼9{šĖćæłv… bšōÄH¼9{šĖ/ŖŃhĀ –ņ·Š #–.ż‹¾b·Æmć_$až»3ń䤑.Ę:ƾöVÜ ÓÉɹļ¾[…W^žÄļØĀˆįż±ü×ŪwÄ­[łˆˆułļ]æa'’X©T`Čą^‚ē5š"|ōńüvhH¾[ö.zōp½€uFFžxrßøIŚ»wAĻže[ųzÕ_›¶!CzaŃ‡Æøü÷Y,,–.ūļ¼ū%,Ēįó/~uŲP)”*¾š0¾yó>$ķ/ ;kÓ¦ ~ųž=·óEöģ=Š'ŸœĶ7€–|¶O<1Ā®‘ņé§? FSŸŸł^|a¢ĖŤŒF|ø _|ł?ÖĻųćO~ĀāOßpY&¦*•KĻvڹ|ķÕÉŲ—t“&Ķā{«WoƜ7§ b¹}[µĪÆ0tho¼śŹd—å¬a5¶ó_%&ą»eóŃØQ]—ĒķŚuS¦½Ķ’(/]ŗĻ<=Īī}«];/¾0ļ½’ ąōé‹ųķ÷ ’čPĮ~EE:Ģæ³Ońq„;׳ !śkõfLŸQzņåēoUXC¬Ųš5[pķZ:`ŲŠ>Ø_ß÷į ‹—üĀ’ĄĢē&ą„Ÿpyé0ēķĻńĖņµ¬óg~üq5fĻ*¹vj֌E‡Ķł»¢ė×ļĄÜ9O»-ĻŽwz؟ąyŽć0÷/ųļ–B!ĒĒ‹^Åȑ\ŽŃÉĢĢŔ©spąąIÖš”-[“\ĪM`YZ­Ķ›'āŪoę”A}ǁóM3±xÉ/XōŃ÷üß¾łęA **Üī;|ų“ šĪÜg=Šu÷—M›÷įų‰süv»vĶšĶWsQ»¶ėˆķŪ`źō·ł¾ –aüųaI…sf¾žęĮ ą˜‡ĄüwŸwŽd±°ųž‡Ux{īē°XXX,,Ž{’üµź3—e*nüæöźdĢ|ī1H$ö÷Ē&<ˆysŸÅĢŽēļ:efębłÆ’`ś“±.ĻOŖ&V*6Lš‰³=œÖ—.ż+8Jūy°Ę¹—4&† 酼趗.“Ińöœ§•üŖæ6ń#AÅR._Œö=9i¤Ć8ĪŅ”J>żä 4mZ’ĘōŸuöaF=Vi2™ń÷Śm.Ļk6[šßʒļøæ»Ż¢?ėÖļŒ¤|ųįĖn’…Ÿ~ų@ИqTfOē&¬qšĖ¾}×mēF,aś“±xbbÉJ¦;wrŽō՗oćā…üƳۧ,V¬üˆæߣÉāŻ»µÅūļ½Ąoēå`×naL¼^o„1Œ9³Ž˜źv%Y™LŠ9oĶĄż÷—ä#ŲšļNĀŻ>żä ·w–ŗviO?yß6›-HŚļóō£.o©—fū¹°,[ęrx‹ć8Įū7lhÄÅEy|ü°ū 8øä‡ėŌ)a¹Ot2§Nõn4ÉöśS«5viJkÜøz°ÆGē8°» ģ))×½*›§vķ:Ä?óš^½æƒ÷ģüøćųq™TŠ… _į;ź99·ńéāŸłēÓŅ2ńÕ׿óŪƆö\÷Uنwńauvsšż«<>͇PŽÕ« Ć`Ҥ’0¬¬[vó† ķ©“ä&¼m§Ų£É„Ķ›Kę= Ś[p<ģ¶élĒĘFbŒń‹……cäˆü¶³ėŹÖ““F9ĢĢćˆmR£Ń„ė^Ģ{© . |dģ Æ&?8¬bbJī$īŪwLš|ŚĶ,Įõ1å©Ń^ĶĮ±­Y–u9ē°v^xa¢Gē–J%˜śTIjŻ Rė‘*-&@!{ÄŁ“Æ0Žćޣђ»…ķmÉĄ@•×Y`ڵk&Ķ?wī²ąłó®šėׯåuJ°&6?Ī,Ė";ū¶Ż>&<Č?>v<)—7¼l(££#ŠÓĮČžł ©üć^=;x=”ѶAQ։Ą'O^Ģ™čāe żśµ •ž\üåęĶ,A˜AŸŽĪS :"“JQß&[Dé÷ļ‚Ķg£PČŃŌĖ…ī:vh!hų\J¹ębo WĻöĻį‹E‚ʵځFĪ+łNuīÜŹ«ć†ċ'ۜ«“ĪZ :ąK—ż‰ŌŌ4Ą¼w¾äē.bž»3½*Geį8‹—üĀoæšüć~y6õjĶ1öŚjß¾¹`»ō÷7""TPw¹ėģŁsT"2|x?»}l :uō>o»vĶųĒ9n'Ā÷v‘u¦“ŅIŌłždļKył‚łuķŚ6s±·=†aеKI6·Ņu–m?OŌ¬+ų]NqS'6iŅĄīópÅ6–ć8œ=ėzŠ…T! ^u¶.€Ć9ŁŁū0Ą}ž-ń•›7³ųĒ5¼ųR P"44˜+ε]€”K%•‰£ Āī4iŅŁ„-„†Ł§˜1¼?ęĪū‚ox®Zµ Ææf?‰eYüūß.›ćśŁŻĀä8NP6hą}«Įƒz"22 ę7÷DšĶē¢R)īżź¤µjĘņŸĖ­RŸ‹æ\ŗ$üń(Ėū÷ņĖ“ųŠ’Ņ©ćl;€‘‘a.oA;"•J…ė×­#ˆ×®¹ĪXėłč: œTh6{–õÅ7of :†eÉ\SĖę˜[·ņ\ģ ¼=ēilÜ“yyj&¼=ļ <=}žYW’Eé×§ų5¾/mݶŸŸXŁ«W“n域Ŗ““’ļoY>£øŲHˆÅ">ŽŚŃ÷wÄšžü¤Ž”Ė×qžü§qīlĀāć¢!FÅn–³ĢµJ“››ē0n±X/ī\•ž#bņĆwĖ_JZ•å»bہ¼~gīJÉł…)Ąc¢Ėržx~NĢÕRē/ĶŪA—:uā!•Jų°Åt›°ARå5ĪĪ>ŠĄÖŅO8ģ0,÷(ń’]Ć6†7,4˜Æ¼”TČQ܌((ŽĢØ JFāć½ļ`DD„ā1›~GŠ'Oœ[õ×&¼öźd»‘ŪC‡N FbF²’Ńė ‚øš²tŠ5ŖėQL¶+¶#ßQQįeś\$ҒƱ?F£±ż¼²½¶üJ˵i°ØŹoĘwŠ3H9ź¼㈿®²]¤ X ėõµa›=ÉvTŲ‘šš¼=gžįĄĘ{pźä…’uZ7ĮÄLJ{õś•É6ŒÉ_£’‘YRƆ„–éū«PČłėÓŃ÷÷z@©Tš”FėÖļtŲ0›-ų×f½‡źėptßöŚR(d^—¹t Ü\[®:`āU IDATvüü½ņ§Ņģ²Ģ“±_a»x õü%C¹\ęUØh±H›óūŗN‰DˆŠ ē“8[³ˆTM ĒN†'€¬¬1ą,¾™IH*„mœźƒ'Ѿćh{»W¤3¶m+Ulž˜ųųp¾pżz:Ž[ö±ĶżŽ(1Įįāe„ó3øYŻŅ_l?—k×ŅĖż¹čJ}.žRzކÆ'… %3w+:c{W¦Hē:·TāтēFWźś|`š”ņĻĶæ;«VmĀŽ;±ĒÅ?äb± ¾\¦GeŲ³÷(Ž9Ą&ѹ“wįSް}_7mއM›÷•ė|ŽņĘēń/^iyż†‚,iÅöļ?.ˆ»1Ā~ŃCėk”|w?śųG|ōńå+³»ļ–“j}·üŶĪŹö;(—•dh+żµķ‹:Ń]P:i†'Ź’ÉļzżŻ5»ŗć€į»£āāznŻŲל¬ł1e‹y •¢t֞ņ2—Zģ¦8N°Ž*łK³f «»®\%œ Ģqžż·$ügŒMl³­Ņ•ŸÆRczĖäćĻ„¢n™Ūv4dR©Ļ‡fKÉčµ»Œ*ĪŲŽ~–žq®źŒ.&å)‹ƒÅĄJcAĮö“„R)B‚½ ¬L‹mF’_yɾ”ģK&Sō”£EŪV0?wī2._¾a·Ļś %õ^ƒśµŃ¢¹ćy^ž.Tę)O®­źĄ¶ĪŹVo1¢’; F£šs²Ųœ_éƒ:ŃŻµč}Ą¶ƒa4RąnĀ2 #_śļvŻwŒÓƤj1%_üųøhÆ'•Ö¤‰0£†ķ(›…TĖmĀ„łl7’ü³ļæ÷_ń?~ŽĻ” ‰+„åö_Ż­žź/¶rhHGiH]iŁŅ»ÉŻee[Ńsšļ{WÖĪ«m'ļn…,bäl-OŁŽĢ9³ekž³ !‘HÄ0›-Šė xcÖ'ųķ•łõ+Ź‘#gų¼š­Z6FļŽŻQ>¶ßß:uāѲEc{»×ŠĮbpЧOG„…óėO¬ß°3Ÿ+YŌ¬ō¼'G“‹Ł^[­[Żēv‘”“¹٬YC»UŹ}~›Or®—GńdąĀB-ņÕ…Ų¼y† éųĒ&ü§{÷¶NS'–¾=ėėWOپo±qQ>’\üŶÜ&“,ĖzMÄåłmFø…ExĀ6Ō”¬““+‹ŖTƒżÓ_d{ņ5½Ž€Y³KźżÄ† ˜üä(¼śŗµŃæuŪ~lŲ° ƒ÷ō[|”¢b’‹Ł~:vli·*“ÆČ¤R Ś›\æ~‡ PzŽÓˆįŽ>k™‹ļŲŽ{dü!§ūĻ•¾‹ģIŲ]iZ›ø’ҹܶNtæļŒm]Zz‘1Wūz~ž’rŻ k…;ķ³²öՏ‰éʧ#üŖ3hy·»mƒW«uŗźs™Ł.(Vœ‘ĘÅ+Ł’WœæŪ‘€„`œ?mĀ€l³`Œ9Šé9T*„`„¢,eNĻČ”¹ōJž~.e«Ō+C`©lłeH×·/é8’Ž•^8ĘöĒ£¬×«ķ<•²Ä³V¦€į}ž¾6>]ü³`2čüwgbĀ„ ōĶ~s± õkUsęĢ%>[NćĘõ‹Įł‹æėU[¶a@§N_Ä ›łlĀ[¶härÅ〠,suRzYY¾³¶”“Į„ĀńlÆ5ĪP¦»Ö¶wubYņųėmź\w‹Œ’Ŗ‰a1Źv»ō}"שZH•d›ŗ­¬?ā‡ā+Ø5b?2ujĒćčѳ„©-=UXØÅ»óæę·›7KDbƧūO˜0 ?’ņ7`ū¶ČĖS#--‹oÄØT ÜĖéńb±5jÄ --ÓZę4ļĖ|īÜA™'=1ŅÅŽŽÕōĮērņŌØļ„DF†”‰—éŪŹ¢ō:7Ņ2½NaŗöŸmųé§5€n]Ūą‘±ƒłē¢£K*,š¾cÅqœ [Itt„‹½«žŅY•Źrm\»–Χ?•H%čŅŁńŪ”Ė×ńåWæńŪśwEÆ;¹Ūߙū,F޶ęžOĻČĘ¢¾Ē¼¹Ļz]–ŠšéāŸłFŃó3«_|÷%‡åĪܝ„„šN×čÜ©%ā㢑ž‘ Žć°nżN̘ž8Ž |Ųvœ•¹øŽ.iĘEE:~’54oŃa”öi›«Ū: \gGrÄv „ōāi¶uĒq(,ŌŚuÜ)!³žĻõāl¶kūxB£)d‡óf R…0xĄ‡Å›ü€ōō‘ŚVF™Hł$&–¤«¼”rĶéd3WyōeŒzųyŒzųylÜ“Gšœm:ĢćĒ“ł¼Öž*ŠĪvEDGZ4oÄO6šLų{ķ6¬·ł4ا]NéŅŪ”łš‘Ó^•ę– T¹}=G%&šóņŌeZPģ¹™ļńŸĖ/Ė’ńśų²Ø_æ¶ 7æmƒĄSÅ):ūzC›Ī_^~Ż ©ī\»–.ų.K¾sńä»!hT%—a·o—®ąÆ‹×^’Ųé~ƽž1¶'•J0wī3üsŻ»·Ćż»ńŪ˾[‰³gS¼. Įŗ¾vńŅU~¼^½Zxp˜g«:——m½wĪÅbkĪM&Œõ’9Ļ_pD$į!›Ųžāśīų‰s|ƒ^$ᔇ\’ŪmĖģj8gNŗČ—wŌĆĻ;\“±²ųós§FĮ(ż™2,„uŚfUųڵ„uVb©ł!g“½ū&\¼p•ßv7÷ćŲ±dÆĀ˜ŽŸ8'ø+Q·nMÆŹGŖŒöiiłd¾ Ė•IÕÖ¦õ}|¦–¢"½ ±ģ‰ R!.‰6 WhŪ¦ ’X­Ö`S©‚;[¶&ńU*…ŻĀPŽŲ® ¼rÕ&Į*™;Čż_šķJ©IIĒł»žŚ²„¤Ģ¶”ŽhаŽ Ové¬FīØÕĮ‚f%”©ޒɤhެ$½źŹ•½ŗ%­VkpšąI~»Y³†‚ē›7OŒą®żŪ.=±KklögķĖ9é½¼D6Y’<żQµØær„wמŽ4Jt¼^Åź5[°gĻ~ūÉI#Ń ¾pQ··ē<ĆĒ ›Ķ¼ņŚ"ZāR“–Ė:—ĆK>[Ī—é¹gĒWXŹRŪÕ^³³oa×®Ć^ģh²ą½lTŖ^-m„MąŲ±dddäź½N­w \–ŁęŗŚ¹ó rr¼kĄ9ZŅŁ—I„Ø[·†WĒūRE^cī0 ƒf6uāŚµŪ¼:>55OnŲÆ]æ~mĮ Óß{wžõv &—>i……Züµz‹Ēē’cÅæüćČČ0»6¹kˆå3‘ÆIE,œĻ,"UZTTø ĆĢ[s–øŒ³·Å²,,\ĘoŖŠ­kĮ>]» 'ܾ9ē3ĮÆ+.^Å×ßüĪo÷čŽĪ£“œ#†÷ēć9Ć/‰īŻŪ¹=~Ōȁ|#Óh4aęóļ{<¹jŻśŲ¶żæŻÆÆóE­\‘I„xšĮ’»O’ŒNŗ8Bč£ą³MˆD"ōļßÕnŸŸ~Zƒ—_YČ’Wœē½¼FŽ,©ŽOĘā%æxt˲xkĪAŒléEĮjÄG :hK>[īńČó©Ó!-­[ŻW¦–}É6ŽöˆMĆÜŪ÷wŪöųvé _ļæ’vćų‰sü¶ķ(~±‚ Žžū9æ‚_|ĀnæśõkaҤüö‘#gšæßÖ»-Céć£G½æKä‰k×ұfµ”R³FŒĆ…’ü„~żZ‚U†_zåCAl¾+&“‹>žßŽŽŽ@ėÖM\a½óY¼Ņ:Ė²Ųšļ.Į`Ž«ģ?ÅŻYX °6˜g<óŽĒŅÜÜ<,ūn%æŻ»w·“Iż)0HgīéwĖ_և|ņŌ|ńå’<:NÆ7ąÅ—šA‘H„^=;ö‘ɤø`ɼ–’ż¶ĪćgŚĶ,Ģ· W‰‰šh„ßwŽłŅ£všæ·bÕŖMüöĄ]}š‚T,Ž?²dƒ•Rš*źfŗuhY)• L~r”ū}ä¹g'`×®Ć`YYY·Š§ļD<ņČ`ōļ×-[4FXx0dR)X–…Z]ˆ¼¼œ8y?ž“žāĻ3vĢ »žb±S§ŒĮÜy_ŅŅ2Ń·’D<žŲpōīŻÕEPpdR)Ōj 5ZÜLĖĀÖmIųń§5‚p§žzŲ£O@€#FōĒĻ?’-ųūˆ<¬S'ƒ÷äGŠöģ=Šž½Ƥ'F¢sēVØS'!Įą8 P£…:æ—R®aŻŗ‚‘śąą@<2Öńzž˜:u ž\¹:M†|=ŲC÷B«Ö÷!2"”ļ©Õäå©qīÜeüöūzĮĀCśwqw¹c×!AzĒʍėŁuąŹbōčūńŁēæņ+>~°`)öī=Šq憠u«ūŽ   Fj‘—_€ĒĻįēåkqčPÉõŌ³g{‡+*O2†-ŹĖ/Ąƒ§ąŃqCŠæ_4mŚAA*ØTJčtzjqöl ¶lMĀņ_’,šóܳv©+\£Äœ»ĘsäČ<9łMŒt(źÖ­‰Š°`˜MfčõAØŅąA=Ń(1.^¼5ē3¬ß°ć‚¶m›¢F| ?"ØÕꐗ_€k×ұaĆNüņĖZž<±±‘4Ⱦź^šį2Aę˜×^ģtÕÖ_|+žÜČO–Ÿ?’k z ‡Ė„G³_xéC¤ŻĢBēN­…Ņŗn`€ !!ŽÅ2Ūśü‹_łĘgžy“ĀS¾>?ó1<žÄ¬amŻ{ŽĒųG‡”OļŽhŽ<””ĮJ%°X¬õźķ<5Ž=‹ļ¾_%ń}ü±=Ŗ·†ļ…‹¾|łå’ųš8©T‚aC{»=>((“ŸÅ’vķŚu;Į¤'F¢KēVhŲ°BCƒĮ0 ŒFņó ››‡Ż{ŽāŪo’¬*_–yO¾”P2™”a{’ƒo”Õ”OŸNˆ‰‰°ÖEzČå² 5r>łō'~ÕŽwŽż ;vĀ#c£u«ūŠŠ ˜Ķh“EHMMĆ”C§°tŁJAĒqč^Ch&?9 kžŽ –ea4ššČ£/aĈ2Ø'š·h„ą@Ŗ`0”Ńįü…TģŽ}?üų—`5šÓĒ B8ÉWāAS0cś#:“7ź×«Ķ_£MŽ;‹?WmÜ–HÄxö™ŹÆsI9p%m}rröĘsę¦ó#Ŗ‡ĘÕ«¾y""BqīlIöŽćW2R7’Ż™˜ā¢1ܣל?oį|īŁ xsö4·Æ¹ąĆeųäӟœ>o[™:Ræ~-lŁōƒĆž,Ėbō˜!Ž’čP|ņńėļśōEōķ/µÜ¹żg'ĀŽ¾­FŸ¾łUO½Å0 >łųu<:nˆĆē›6Źßb~ęc˜õĘT‡ū-’õ¼üŹB§a42©&³ŁéóQQįŲ²ł{‡·’ā Aąż÷^šYĒsŪö˜šŲ«ešSa”ĮŲ°į[»°“bS§½-ēń֐!½šż²ł'„ĘÄućßĻ/? £G{>rüĄą)|ˆĶ““Fāƒ÷_t¹’ę-ū0~Ā«.÷ Į…s’ žvśōE<4⧦D"Äb‘Óœć‰æüü!śõķ,ųū©Ó0šžÉü|„ʍėaū֟\6 ¾’į/¼1ė~{ģ˜AųlÉl—’¦aĪĄƒ®ļh½õęō2722rоćh&DGGąČ”•e^8®<^{żcüųÓj§Ļ»«W[4o„7|ėQŗŚŌŌ4tģ<ĘīļśwÅÆĖzT^£É„aĪĄ±cÉe.³³ŗśŸuŪ1ł©·ųķ“ė;=Nƛv3 mŚ–ÜmZū÷—nWr~śŁw݆ČMœ8 ¼ģQœ™>cžZ½Цulüo™Ćż6lŲ…ÉSŽōz\±ččlüo™ÓI“óßūŸ}¾¼Lē¬!`kžśÜį]öf-†ń::“ ŌÖś&8(zƒQ±ČÖÜ9Ocƌqe.©±%>*ŖG†83ģļ!“»ĪėÆ=…O>~ŻiöW~ķ±nķ×NÓ{‰D"üöė"Lœ8ÜėŪR©3¦?‚¹n$•Ö¼y¢`¤±iÓ^eĮ ĮęMß”{7ļē¶bÉāYN’ޘ0~–’ņ”Ól5F“Éićæe‹FŲ°ī·±æžŠ·O'¬Z¹Äéz ®$6LĄŚæætŚų€/昃3<­²%‘ˆ1mź|ūõ¼*± Ķ€ž]1mŖ}£ĶęͱićwNWueYÖić?&&ĀaćŸeY¼śŚG‚Ź»óžsū?žŲC‚Ģ\+žüĻmøŚ’ųü:ū«Æēė¬éÓĘVJć|š"Ž™÷œŻś"Å\Õ«÷ßß«’śĢćFrŻŗ5ŃĘAØŠC¹’)&“Jń÷ź/0aü0§wœ•Y*•ą™§õŗ®ö—łļ‹ŁĀ_-Z4BĻžīW –HĘ’īL¼÷ž7üß~żm:ujéō˜ŗukbēöŸńŪļšļæ»pīüeA(Byčõœ[šŽd2C[¤ćˬTȽuń£Ńm‘f“R™ŌiœvU£Óé”×`6[ •Ią³ģ,ÅדÉh‚J„ōɵTŃX–EA”Fƒ2¹ ĮA^Ż9³XXjJŽ Py}§¤2čõhµ:0 …B•źīūģ¼”Óé”Õź ‰ •JīŠEé µŠéōÉeĖ¤wŻŖ®F£ Zm, …¼Ź,J„ÕźPT¤ƒT&EHp ĻļNh`0”PČĖtŁ†-Yt-_WOś}“yzÖÉóŁė5Ņbv·T:éčĶ"¬N®˜ D„BīŌ „ś7%ŅiHN:łč_ļ–Ļ_³Vˆ3;]‡Däų…Ü Į-ŗ @!äźBˆÜŅIq8=Ųįs!r3Ę5ĖōŪk7Š(†¹Ÿ3³ v¤†łķµ !„Ü]Ø@!>²=5 f'9ūG7Ér«ļ Cå"LavųܱLĒB!Õu!ÄGŽ8żS˜Ń„¶ŚļÆ/±čWĻqƟ“9…B@Bń‰L¹ĆēśÖ½]®Œ?Žh_ąō¹Š )!„Ŗ:„āĒ3>×±†’G’‹ÅœfŹŃŹ*¬„BŖ.źBˆ\Ģ pų÷ų bVŽ“YAˆP™>—§s¼6!„ź…:„ā×ņ‡×4ÖVX²42|r 6ōĒU»ČIšPB!Õ u!¤œ“&1n9ž`›¢«°rlMĒ…±Ćē­@!¤z”!„”SšZgMė:”Ó0Yģŗ (29īĖü›†”BČŻ:„RNłĒ£’"†C\Å’ļO Ž× (V+D_!e!„RµQ€BŹImp<¹6Hfø‚Ān6^Ž„Łā¼ĄØDB!Ō „rÓ8‰¹¬ ›+y*Ü,9 C€zįEPJŁ )!„Ŗ:„RNFĒ€¹¹B^ćåpˆÜŌę*p-B!U%…&„rā8Ē”7±’Ć4F ß †ÅIŠ5 ÆølD„BŖ6źTcf–A”A µQ­Q £EĖ@kĆĊ`rO¬’Z ”°”Y(7#HjA€Ģ…Ä!+“£‘”C˘Bæ½!eĮ8łŖTDō’®k”‰‹‹h#†įšŽŽŗx01äB^B!Uuīaz³™Z2 åČŌȑS$EAŒŪz ōb$>o HE,¢Œˆõļ“ IDAT 4!&Ąh}`Dl‘JĒ«“z*éF(¶§†cQ’K[Mˆg“8?·³9ؔᲳnŻÉ¬½…µ¢Š±¦­b Q?TētÕ`B!÷.źÜĢƒjRóø^ @¦FŽĢB9nė+žć5±"Ü,Tąf”żŖØ! 3ź‡éP/T‡śįEØŖƒŹ‹I‰…F1LæœŒĆŒöi¾,6!w„YA(p’óßkķ(ģO ĮŽėÖ5žļxmāīŻ»j–Ž"‚\ĢV‰…ŠŅ å–›iƒR©Øp—į8ąF©łJ¤ę+š§Ä µf7ńæUZ/Į±Œ Ė` ›ØŖCĖŲB“Š-D½Ó,ę™L8‡2BŠ)C}O7ZČŻE!vܑÕ:™ģ+/E€e½’ī3Bf<Ü4 ­b5¾/˜Ÿ- r‹dP$ČÓI”6ˆ‘§·ŽŁĢ×I”3‹ 7‹`²ˆ 3‹`°ˆ`vńžHE,å,¤É̐Y(³ DnF¤Ź„˜@¢ŒS˜Ż¬°ą¹ļŽ×€DÄānW}vNBœįXX$"ŹF„ØPÅ7ųĻåŖp.7rUŠz1āW•qp9O‰ĖyJ¬>0„­b Ń>¾M£4‚øźäœ@HÅŒ,kżż(ņTRE#•ĻY¶Ÿ£’ŖŲl­ ēnxuŒTĢA)a141}ėęWÉF ·H†ĢB2“rdʐ©‘#K#Ć-Ō§a‹&V„<y: ¹Óż¤"1&ÄP?\‡zaEHїiĪÓķ" nė„Ųs-=źä—£ō¤"© ‡ŠÄø­“Bg”Č$†‘ĮdfPdYēŅŁ„䉮„Ō‚@©µ£iŪéŒPšhōł<ŗż7B±ś|Žļ“Ķż!6ØPåÉp"3ɹø£‚ęi𻓧“`ĒÕ0ģø†(•=ėä£{ķ<„)Ķؚ£M„Ŗ7‹°üt,¦¶¹Y‰%&U™Ś A°Ģģt‚®/)wD œ,ę ė/Fx¼ÆTĢB*ā041źß†“ 5üsŠdøšÆĄ•<%Ró•øšÆ@Q«óL¬ir¤Čq8=€u•ēų #„”I”Ķc4p3 aę؍ÖU£9‡ęŃ„)+&U,qĶĀ2Č-’"S+Gz” YZ92 eČŅZļ8¹ŗ“äKĮr³už\  ±$„źQ?L‡@YŁ®“,­ ŁZV$ĒbBó —Ö?,ąĘ 3²³-(*āPPČB£įPTāe9ØT"3 ` R‰)B:ȤtOĶŌØ8ĪŗĻ±Ģ@Ļ FZó‘(1ÖB¹˜ƒTĀB%±@gلԛDИ$~›ä˜S$ĆŖsŃXs! õĀōøY(Ī™’Ī®ŗčZ[³}z^G‚åŽ~& ½Y$ÕÓé8\½jĘķ<EE,ŠŠµŚ­–ƒJ)‚JØT"1 !>NŒŲX±Ży÷§…ŗ-—Td{Ö(źŻrųŁT$ ĖąJ¾ērpń– Wņ”Šų9LŹ_XŽį;;ƅA,āŠ0L‡Vq֐Ęų@ƒŻ1—o+ł:“å,;VÆv½VĮ%'F ƒkj%J{5O‰,¬J„Ņ$(0Hpé¶šļŃFėŗ°"$F萪ó(„ģ–ĪŚĢŪv% jØŃ0¼Č÷….‡[·XģKŅćōi#R.›‘’bFź3Œ&ļź*‰Ø][Šõ%hŠPЦ÷Iе›ńqŌĢu†ÉĪÜG÷„*™cp:+Ē2‚p"3j?Ž@˜ŅŒøĀT&„ŹĶU˜Ŗ° TnBˆĀŒ ¹„L“ä“&141“& 4&1rµRdYG²4Ö’Żd()3’Z°Ø?…••™c­‘!S#C†FŽL éėČW”ĆWQHXÄ­2¢F°õ¬#_Aełzbmpęöŗ‚„½o [Jj¾oļ¬ēš¹īĒqł\._1įrŠ 7Ó-^wœƒ‚DØ_O‚śõ„hŲP‚ ¦q8 ÆĆOź-M"āī4üs0 Ž­J»õoa­ -k£µŃÆ7Wõ'kŠ+į6ŗÖRó~—ŸŠĆĪ«”0±Ö÷@,āšTėtt©E”@ž”®‘ć|Ž WņTø’ÆD†FKčūKØĀ„V1“Š-DÓhÓŌ¾/lNÄ­")ˆPššaßK•: ÓqŲµK½ū ػπsēŒ~Ķ–VƞŻ»Éѵ«½z)R=źOP q.ęŖ°’f(„ū<“‡a€ø@j‡čhD\ ±AÄų>®Š9E2\ÉSāJž)yJ\ĶWŗM[č)©˜Cךł˜Ō:Ż'ē»—™, ®«•ø’ÆDjžu"y¦¶ź’FŃąĪČW³h-jŁ¬–¦ÖKšģĘF|˜Ę»½.CģĒ 0& ƒg76F‘Ių㢿­Ē®Ł»Ąłų®ėœnŠ Dé!@ÖļÄ †9x ž-(½Č²å+“§2ƒp<3§³ƒģŽ“źF"bŃ>¾kåć‹Cµ`“ß„„ÅĀ~—¢ P _ÉŌČp>7ēsœ«B¾^ZŁEņ+‰ˆEÓ(-zŌÉGėøBHk}“£•įå- ły3‡õnal³¬ -Ėr8|Ų„•«“X½F ¦rš2Š«§?¬Āż÷+«}Ču*@ZI7B±’fnł¦"bÄQ7T‡:”:Ō Ó•yRZE+<‘€“™AøšÆ,×Ä>^ėv M"µ>+ć½ W'ÅłÜ\ČU!5_‰›…ņ*ßŲ÷D”ŹˆV±…h«AćČ"‡YŽ ĮŅc5`²0ˆ8<Ō(Ćåų„<……,žūO‡ÕGƒ ķŲŒČś³fĒæ9Žœ3¾}ŻŠŗ”čųJGžuĄĒƒ ÜLLź”ƒv-+6¬&K#ƱLėŻĢ‹·Ur‰!rĖ»™f„(̐Z ’²‰-‰9ؤ,¤"ņ;õ¢Į,„y-"h bhLbhŒbhb%ø­“"·Hźóøo†±_B"āŠYMҤ“.(„e#[EEP@ĄėŠ¢Ø8PĄ…8āĄŠØ\nAåŖ\āB¦‚"CdļÕI÷Išóū#PØIڤMK߯Wy½HŸ“óäōä<Ļw}¾©aU"…AdΐT:†ų¾3xA%_čłī;YŁž„—0ö¶@&OŅ×<ÓJ«ą#L6 ;2‚Ł’FziuM|O€vAfz“ŃÓ£MŻŪTŌ»(Čß(1Ź8˜Æåļ¬ Žh< @°ŹĘŪ#N]ŌN‹M2Žēk8^ČńB5…ėƒš9J™ƒKcŹ_B·šŠJ‡ųĒ»cŁŒżģķ Dę]—B;­÷Röīµšł=欭ĄdržHŪNKTæ(D‡Hī¾\ yŽ7Jū<Ō—˜K£¤V¶9Ōõ)X+œM½śōVpļ=ŒH@€o6ć vf³33˜,oź–¤¢µ¢ĶÄh,DkœMƔ6‚¬>-š¶;ŠņŹ"Ź,‚ägŹ”ŲŽjHxäņL®lWęÕ÷­ ‡ł%„&‹€Žf£Y@.Q)@ ¢Rˆk :́FÕ(Ss›£Œż¹AģĖŃp¼0°2­Ŗ1I¬Ø•Ō = ™¹ĢB°,˜`™Š™©Pur `: «°JŠYdč-R*,NćÓiqĀŁž¹žJ‰ŌXycxRe¤ĄŪäēŪY“XĻēKtž½&K$7ŽV1cF0Żŗ^\†c«Pē*Š“Sl$%Y)/©Øp Ó‰čõŒ&¹L@£P«UčĮĮmŪJ ‰Ó’F$ē…bl`č;"ŠBŸH==" ōhSQļ\čę‚ü‘Ź·G¢0[„E†v(ęĮ~ĶCåĄŲ§ŠŌģĻ ā@ž†<}Ėßš×E“ĘĢŠųRśEéyasĒ*…ėbƒL¼64I½]»,|ša97łŽƒöOĆ ‰€hIū-Ō)X 5wó —0ńA S&k jų&Co‘±++ˆ™Į$©½*É`#!ÄHBˆ‰ų#q!¦w÷6QąL©S¾ųT‘Š#łÆH3«dv^ŸäuĒŽÅ&p8UĀ”d i¹R2 2ņ%˜=¼“aA""“ékē².vb#wūPX!gGf{³9® •ÜAt ™h……µ…•3Ņ”![‰B^ݰ—^M˜Š”^ē3Ł$Īŗ9Ćłś¹\}éåŹļ#jB&Ż©±—xW !;ĒĘŪo—³re…ĒE¼MD"0z”ŠY³‚茄e§Œ£ÕN¶²}»™;͜8i%%ŊÅāžń™„Ø~Q“GX—ŠzĻC !¤‚Ėbōō.'6Ču®sKaū™`V¢Ō$ĒAuƅ;Ą‹×¤Ņ%ÜæT¼I…Uʔû…3ąén×gėÉž;›œæs0;ó‡årž„bŚ4-}z_Ü9Ü’Do‘r¬0½9ZöåaµK¢ĖEU"ˆÜ‘A~¶‰Ō Īä X= ƒ*”}„ƒø(Ū9čßÅAē¶v¤>r®‰Ą©"5ŪĻ„°;;Č+yÅąģŃ£žŽx½¼„ ļ+ & +äČs*Ķ/P×Ū(’IDĘ÷ŹcdĒŚS’“mLšRȑ#ŽõjEF*éŽ]K·nZāć  0P†Fćü±Zčõ6JK­čõVrrLœ<©ćĉrRS X­ŽSłR*^{%„pnōM cCrXƒŠĒ£4.v6ĀźVįSéUä½]qģĶŃ6ų}“+gꀺSNeJųęWæ”śTG½!*į–AVīn%H]ó$큹~K ćh¾¦Aé-J™ƒ^‘gµńŪW{ß+}̾“X½X»»ģŌŌ?ø¾­vd†°źX$&»Äc.‘7†'»%Æ|Ž”+“¦sų°7Ņ!K€#Ą±³? •( z½€ž@dßāā¤|¶ø żūµ¬=Z‹5JJ|¾DĒēŸė))õ4fh§P®œqecģf;9»s8³õ ågŹė{Å̚Ä5×4ÜÓŁŅpˆéeJäjų;;˜ģ³Ż’kŗyEģf+Yg#:¼{{kU"};;ø¼«”}m„y!JPa•²-#„Ķ)”d뮦¢“žUŠr{’īā)i\ˆŁ.°7;˜ßÓB9Y¼`©Dä­įIDV_ĄW˜1³¤Į^‰D OŸ`®».ŠaĆ"<8‚ś—Y­Ž)cĖ–|¶lÉē?ņŃéīѼåf—?ܛķŁaõ:>Bma`ū2ʖy“‰h‰ĪÖčģĖÕr(OƒŁ&Az6Šé Aäé«2čU=(»HĀ{‰ vk>Ņ…J˜ųo3· >Ÿ¤·Hł5%œßÓB”bŖ²Ń?ZĒ„1:z“1 ÆAŲ›‹é¤Łwrįź,“„“tˆOĻ[Gņ5üß®ø7یŅXX0<É-„~¬ąŁé%čt ¹ĪÅĄ¶³?¾–æ׹ŒŌ…\ą„—‚™WOĘdż•…ĶčŁ"=čź^{5„Ž­Z)3ĖŲ•”eżÉ0 -ē &‘Źo¦C¤4³œŅ”ŸĶA"@’®nøĢʐ~6”ž¹ŅŹ”lN cgf0f7"“ˆt Æ t9½£ “õᆒŸŌn\AI'Ÿ×! ĢÓšó©6¤–Ŗź”;/lfī°äJéP“Iä…Kųļ× Ėõ80œ ā¹ćŽö“ićyL›MdėÖ|–-K#11½¾~ʀ*LŐׇTk*V…+Ū•sul/_må<¢ie*ŽņWVgJUȤΦ;{­ĀĪ[#OWÖJŲģšż69Ÿż"ĒdižW¼S[ĻÜn¦M¤œ7žŒ§Ģ\æøŚŹÕ±„\ŽVG|ˆ±Ńļæ21›ń4vŃBC“¤o•›elN cOŽ–3åJ仏S÷$Ü~I7v)¬uŒ(Ā› Źx÷’źvd֎ģ~ÅéńoŠžE]ėpõ»÷ʍ 䯅”Č[@±elŲhāłJČČh¼BZu5½īėMX—P6;ł‡ 8óĒŠO7č}%±cÕĢ{-„ŠŠ‹»“ę?IĖųę7›÷Ź°Ś†˜2D‰:L…*B4@vÖÉŽ“ƒEļ{Ս nhå®aVBµµ„Dvf³19Œ”’śē*ŖåśD9 ĒūF5]~õIūF bõTš.Ņahß·ĢŻŚ‘ÓÅ*œ‹JżĂ÷÷Éęŗ„Š‹Œæ»€żźwƄ†*xä‘N<š@]»6<ÄS ߟŜāļæ={ö„våŹéuG2ĮihöÖ18®”Ž‘ś^Œč,2å²;'˜£łXEÄZī_™Dd`l“.ĶāXš”yߐYŠ6ō¾&‚r‰gŕ…+Ś•qul]ZĪjč-2ŽŖ«¤ĢJ±J°ŗØ«WŠŻĻĶ.į«eśzĢLv«€Ģzļ B€QĄæpÖxʵ×*łņ‹6Ķ^%ØEéé6ž””Mæ6¾.÷9¤RD»ˆĆę]«62RŹ+/‡pūXļ¶4G’³%,ß"ē·½2ģu\f¹ZŽ*L…ŗ]ŽC^}ZõC.Öß΃×[hWƒFöēūڱõLH½Ž[-·sy[cKé^į°ń ©ö\W at“^ąĆ%:­LÉߙĮģÉ "W§ @*bqÓ³z!r‰ČÓ½Ž3yB6Iɞ;""xģ±Ī<õT·„÷x“mŪ Y°ą8kÖd»5^(gŲ›C‘Čkö`†)m M(fh‡Ņ:å[q‡(T¬b®–!”˜dTOi¹R“Mā:+V?)šõķÆnTįŚc.“8ø,FĒÕķĖč„÷YćŖ–FM)³R©ˆ­ŽT!‰ Ņ>ŲĢ«CŖöJ1›E¦ĶĀ2P°yóéŅ'—ĀķC¬^Ęg‹ŪŠ·x}Ż«·ÉłbCĆ{•4 m‚E¦Œ¶šÆ+llĖańŽvn×-¼‚Aq„\Ѷü¢Oōv‡@r‰Š}¹ZvgQ`P “Ōm 8ģ"Gæ9B֎,·Īqė­±¼÷^Ś·÷’؜Ż.ņŃG§™3ēeeu{ļƒā‚ˆģ‰Żj'oÜ!ć•9Į4ÓVĪa¶ ü™¤įĖ”ˆš@¤r „©„”¦—6õŌ¼†*LMdļ„ Ŗ)%‚Hæh=×ÅÓ;Rßb -ż «CĀń5ņ“ģĶŃRb’ u`±9å¶e‘7‡'®“ššäB~łÅ“Ģ X¬š[“P‚3-č.<©øģ2‰+#x÷?aÜ=¾åvĆō'ö'Iya‰}ӕ³5)—u±3ļ!­JŲM‚É&įH¾†•k¬,sʃ#Oļį”÷l ī÷yŗćŽ@>|?¬YE®š•šēŸ&ī°Šć|A€Ń£ŪņĀ —pÕUį>šēčt6¾ų"…7ßżōr~Ų³Āķę@NŽ‘’{+ŗ—W(°qC]:·Ž°¾ %GĀŌ÷•čŒ÷ę’ƒzژ7Ń\Ł4¬•Ę!3ĖĪšį¹4OżX “¬ō“ŖÜ ŒĒ• ¹\ą‡Õ ą»ž/ޤY«VUšųŌ"$ž‚ƒåĢŪ›ĒėŒTŚ<Ŗ”ņŲc{Ų¹³ŗ®z] ¼*€ßEŠ<>ē?É.’šģ§J²Z€Ęµ'\oē­É&‚üæ–“E°ä =³ŸwÆ1\@€„oæČm·ÅśxVMGI‰…›ož“mŪjožs!=zČŁ°. „ņāśžśšģ" æ§¤Ø¼õŗ^Čæ®°ńüxs³J©hĪX¬"7Ż”ļA/”ŸqJ|^ Œ&āŽ+cóoQ„ūæ3S:cśCÆ4õ$źā·Ķ&¦wWńg/°§“~~qkäśõF~üÉ’+łżÖHJ¶1žī ÷n²9ėÖ į½÷ś#—ūķĒr›Ė/c÷ī‘y!W¬0šĪĀ2ĪŹ{dI˜±čāU»øŒ| 3)©0µn|Į‚·ŹIMuŻLHą³Ļ“xĻ’?Ńhd¬];„=ܓCž1³¤Ž*l­œēūm26ķmŻÜօC„W’@qkz”ϰŪaśŒ73N’GĖĪłÆ‹Æqv7v͜—K¼Ö ÖWųåNŁl™<„ŠķE&:Zɖ-×µø…;,LĮš5×2q¢ūŻéŽYXĪś ž½«.Õ Ģ\Кóz'2$¼°$ėE®āmޱņÅR[c,čĖż÷ĒūvB~Jxø‚uė®%"ĀuńZI‰ƒł š‡£Į_9)įĆZˆ|›)Ń ¼žmõlćl˜Éwœ Ēq˜ ѳš=ć‹„:v'ļ߀Sķ§¹5ųņ&"š ąŗŸJNŽ·ßńļē¤_ĻĶ.įČ÷n²„„@žüs8żś…ųxVMƒL&šłēW0sfw·Ę‹"L›VLf¦¶O·Śf-Vr&ß/o½&eļi)ļ¬hŻx ‡CdęsÅŲÜų*ŒŻ–éÓŻū޵T:tdٲ+ŻŖ›Z¶ĢĄ¾}-MöÆq°;ąĶ’µūž°ū„”u»üCŹ(–rŌö ™Žżä8Žp¾‘<DZ¦žV½Č˳³ą­r7FŠ8›|ųxFĶš!īBŸ}®ćųq’5˜ün¶*±‚o¾5ø5¶K-;wŽ sē–ŻWœŽÉ_¼Ä­ń%„}¼Č­OcóяrŽŸń»ŪĪoX÷·Œu·Ü>É·Ė+Ų³Ēõ&õÜĘ·Umnø!Ę-gƒĆ!ņÜlwÓZ¹ÕŹ8Łś ō”O~’Sfhś/i¦cvŖvjĻvĀBó«yļżrŹĖŻÉ“X‡3÷ß5;wfÓ¦Muž¼ņŹ+ ™¶‚; H6¼1ß=©å¦ĄÆvii6fĢtƓ\LŒŠ †uńČ§ĢŪ›‚3‹%»»k—…w–ńܬąF˜™{l?*ćūmžįÅńg®PŠ5ÖA§¶Ķ#ĻŚRG6Œh…hTBÓGć,xėm×įW©T`łņ„…¹y9vģÓ¦M«sĢu×]ĒģŁ³Ż~ObīÜŽlŻZĄŽu˃8h᧟Œ¹Å’Õ.ü…ār„뛇FøæQ^!°x‚wš]ö!†R~DD*Å($Ķē»PP`ēėoÜq¶ß¹ż¾Z­–#F°sēN233k£×»[pģĻl]źµq“‰C‡-ōéķŃ}æ2^x±Ō­¢ß  9k×^KBĀÅמžć/£øŲĀŹ•.Ē~ų”ŽŪnSÓµKÓoŗsŠ$¼žµ¢Y©5›Ą«Ėųģ#ž÷ĢØ‚… NŁĆ"ž{  ““ö%JčѤóZ¾Ü@n®ėBµ'žčāq“ĄŅŅR~żõWLLLLc›öŁ“dɾžśk¶lŁāń±2™ĄāÅ—Óæ’F¬ÖŗŠ÷Ž/ē–›Õ­Ń7łčĒ€VįƒšĖ_2F“rI\S:Gj>·Ch^…±Ÿ.Ņc2¹³  xnt-\øÄÄDk>ˆĄĄėŌ•L#ŠĪ½ŲāEž×ŒÖo €5kŒlśÕõ“Q"Xµźź›óļ ‰D`ٲ+IIѳwoŻM,V‘ēž+!qUd“/Šļ®R oķré6i¹¾Ś(gņž›?eßĮę@$Ū~i,BÓ“D·ŪįćO]ēµFG+yå׺ε1{ölFUļć}INNØ÷ń={óä“]Xøšdć޵²q“‰]ńDbėKZžĄoūZU‚C„„ė¼=ÅŌŌSi֔—;ųj™;^ųƒĄŸĢ”G<õŌS|šĮ9r¤Źļž|ņIBBBxķµ×*ĒŽ’żtīܹ\N~~>7n$11‡Ći½žśėģܹ“   n¼ńF, üń}ūöå駟F¼ĄūĻģŁ³Y²d ’żw>E*š+p}£~^SARr0;łĶ–š“£QdĪ+īåI½ųā%ŒٲŌ~Ź?žXeŃzķµ×ųžūļŁŗu+S§NeģŲ±<śč£lŲ°”rĢźÕ«™2e ?żōL™2…)S¦°yófē’Śk½éŠĮu$ćŻwż[éĀ_ųśW…_)Ł4Wv—r"Ć/¶.Ķ–/æŅ»‘ū/āĖf_éééŒ?žx ŹėJ„’yóę”Ń8k;‡ ʁøå–[0™LäēēÓ¹sgV¬XĮŅ„K+»ė®»ųģ³ĻX“h”••QRRĀ“iÓ­µ9óŻwī,ļĀ¹ĖŚ8p wÜqG?111TTTšĆ?0vģX„ R®æžz“Z-Ė—/`޼yüõ×_ōźÕ‹{ļ½—I“&1lŲ0fĻžĶ„ ˆ‹;’—J„ōźÕ‹‘#G2mŚ4Ö¬YCvv6÷Ž{o•¹;–õė×SPą U#Ī(@Ż|’C…›)WG“?‘ ķ,łĀu(*$DĪ7ß\…TźßŃĘdÜøölÜŲ‘%KRź—Ÿogé—:¦>į^£oņåF9„­³śr0YŹ–2®ėN~ČĮCV·dמŽ=E­ŗŲ¶mCĶѵ!C†ɍ7ŽHbbbe(`ķŚµ˜L&ʏ8S‰† Ęśõė‘HĪūd^~łe^żu^~łe¢¢¢ČĶĶåĉDFF`³Ł5jü1?ü0“&MbҤIĢ›7… ²iÓ¦}Ę :0wīQŅŅźŽ"~÷Wµ·ÖĘņ-2ģĶ+EÜÆŁvHFZ®•ųčę!”ąOģŪgįt’;©„?5č<Ļ>ūl­æ=z4999,_¾œ &pé„—²wÆSehģŲ±?~œżū÷# `źŌ©Ų’ńZ¹r%óēϧwļŽœ9s€ÄÄDŅÓÓ+ĒŲl6¾ųā žxā ž|ņIĢf3 \zé„,X° AŸÆ*?ćLŖŻŁ©Ó9XæĮæDš<°h±£ŃµUōśė}hŪVÕ3j^¼õV_·š÷|ņ©Ž­ėģMJōß’Łź©i(K×É[SÜdÅ ×én=zqóĶm|®łóē3nÜøŽ= 8CĶĒŽćųńć•Ē%&&ŅæŗwļŽÕjåĄÜsĻ=U6’wÜqv»½ņ½nøį†ŹĶ?€L&cŲ°a¤„„5ųóŌ„\.aśōn.Ēż¼ĘŲčĻ—ę‚Ł æīu’9(•ōļȍƒB¹åŚP®ķ§E«nM”¼‡æģjr’e³dÅJw¼’pJ]֟ŪoæAjüY»v-›6m¢  €±cĒ —˹馛ųß’ž8…är9÷Żw+V¬Øņ³pįB€ŹT! ĘHēēŸ^YpŪm·QVVĘĻ?’ 8‹•/|ßK/½“Ÿ¶ ųŻå(w֧ʤIæAåå¾üʵ÷’²ĖB™2„S#ĢØł¦ą7ś0iŅī:ĒŚłę[?Ōx=¾Ū"Ēģß5¬Ķ‚ō| [ÉŚ·5 PV«Č÷?ø^ܞž·š]¹ā—_~qYo9ž³XE~ųѝMčo>Ÿ 8=ō+V¬`ģŲ±<’üó >œŠŠP¾żö[ĄéąHNN®ā9ĒĪ;k|żBŅÓÓYæ~=&L 11‘±cDzråJL&ēó,66–Ž;VŽW«ėė”߄«bąß’0‘Ÿo'2Ņ? ś&5–|”§¬¬ī§™D"šÉ'—·¦žŌĮĉ |ńE ;wÖŻ’ü£Ź¹ļ¾@rß_K½~ŚŃźż÷Ė6ŹŅĒÖäjNžĢo›MÖ½ UpĒķiFĪ‚¶[o½µŅXæ~=F£‘»īŗ p.€]»v„k׮ՎIpؽ¶Ģfƒ_3q÷x’xN6Y Ķ†[¹’·ŽŚŽĀaF͉Dąõ×ūø—•mg͚Ę”^ż§¼UļŚ‹$eIŲuĀ?¼žŹśõ®oø;ļlO@@ć>öʏρHNN&11‘ĮƒÓ¾½Ó‰ŒŒD"‘0zōhf͚UågŚ“i\vŁe„‡7½~ōż÷Ē»³u«±ÉÄü•Ā2½§ÜūŽŽŽ LūOĒRˆ"Ų"™ł^ž,ƒÓ&n¹¦śZŲ.BA’®ōźØ&"D^ĶIжJŠD€.ķ•\Ž#vUs•Ćƒd“Tؒ"— “TŠ>Rźߕ¶m\Ś-¾]ŌD…UušJi©@.«:°³ļ-œĒ·T “ hUŅŹóŌ7 ·awć?c$½‰ŗ 9»} Āé,‚ŠōÕ.Ł¾Żbż@ć…īwģŲAZZćʍć–[n©,žE‘Ó§O×i8p ›6mŖµĖ…üņĖ/°lŁ2ŅŅŅŲ¶m›W?Ćy¶ŗ±m»’HŲ6Yą\(ÄĻ=ד …š ƆE2hP¶oÆŪ^µŹĄm·ś¶Ea­ł™R‰@æ.jŚE*P*$”člJŖ Æø5čB~Ž)ēŖžUI(ŲÄź‹ŠTh|å'w¬&Äū~"’ąŗė®#::šåĖ—³f͚*ņŸr¹œųųxÖ­[Ēm·ŻVåø?žųƒnøcĒŽįŃ9år9f³›ĶVFo={Óæ(ū÷׎{Äfƒ]›~]kO€sģ<&Åīfjß.j%(*ÆīŃvˆšĒžr®ģy>…³S¬’…S;Š-®źõNĪ4ńŌ{é$e:æ‰ó»°f{){jč{~쾓¦ž'ār3'“åęĮēÓĖ6¾ē\wŸ~/õ•Ņ!:€w¦ĘŃ«cÕµc’)Ó?8Cv”…ČP9߿ٕĻ~Źēż¹Ø•¾³+'ŅMLYĀņ×:W¦7ÅE)øåZē9ƚt„2½ē϶Ē¤Ųķ4j ķ„—Ė„8p mz-·Łę–ąĶń³Ļ>[«wżŌ©S¼ųā‹€s“æ|łrž~śiT*ß}Wµėš[o½ÅW_}EDDū÷ļ§øø˜˜˜ī¼óN<Č”C‡\Īå\1šK/½Äܹs«Č+{—mĄ=@ķķ¶mž£˜Ödw®;Å7ÜĆ嗷z’ŻeöģÜxćŸuŽiŒ“ƒ)²‹Üó†\Ś-·£]„»]ÄjQ*$8Dųqk1Æ.ÉÄlõW±{—$ØXż{±ĻĪpmæ ±A¹µ•Rfō/k˜GŽX5SJAøöŹx“Œ gĪŌ½čŲQĆĄm¼vĪłóēóå—_Öų»^½z1gĪĄ™£ēw²`ĮĢf3·ß~{•±3gĪäŃG%;;›¾}ū\©1`ĄŗwļīńÜz÷īŃh䦛nāŹ+Ƥ_æ~Œ3Ęć÷¹{īéP§šē¶VąBöŸv’9Ŗ•q,µö(ÖĀå9Už’ÖcqČeĢK&5یCéĄ¼Éķyó±8nž|’‰»F„3wiw•"“ \ÕSĖ«ĒņųŲ(ę.Ķāƒ•¹,[[Ą¤[¢č™ ā©’K #ߥ’=ÕAø÷•$R²ĶH$Š3AĶÜÉ±ĢĖCo¤”ibéšĮŖĶÅdZ˜ts$Aj)s—f0łĶdR÷žŽēPRK~Ī@o¬ŸšO…IąT¦”ß1" AŚ ¼žē0Döļ·øU$5č<:Ž_uŹbÖT³ĪāŽ łśėÆ0`'Ož$;»Ŗōč’ū_rss¹ūī»0`!!!”––ņńĒóńĒWÖ?mß¾½2uØ&NŸ>(ŠÕd™½K)ĪT ŚÓ€rsķœN²Ņ„sÓ§H7‰P^ī”CrÅĢ™ž/|3£Fµ„OŸŖ½©šĶ‰«+xōßuiݰ۽Ū*,HĘĒÓČ-¶rēK§9œ\(:Ā»Æē‰Ū£)ŃŁyū›śk»āš~Zåsą¾·Įlm˜`µĆ–RĘ ņŸbąhI/¬¢‘"1ÄK"÷įö§^•ėƏņJ EHH#FŒœ9Ŗ5”ÓUż;ß’ż=z”>}śŠ¦MU#dŹ”)ÄĘƲbÅ ¶oßNYYaaaL›6G}“2ļ’Ŗ«®¢[·źŠ<ńńń :“Źk£Fā£>āĒdõźÕ‚Š`ąśė]7`ܾĶ7č<-‰Éī•ƒÉ½px°ŒKT¼ø(ƒ]GϧŅ–ŚXüc>o<Ņž`“Ņ«¾iw+~;_;°f{ ƒūhéÕÉéŃĻĢ· —[1[8z!@÷*y+•½'Ļ;ī¶(gŁŗBž¾3…ÜYØüń÷yü{`Óļ‰aį·9’Š<÷޹ÅVĀ‚d(dŹ R‰XyžÜb+V›ēžüõ»e~eHˆ“^I[śćĄŠ5BįO_±}‡k`Ų°(Ɯė’K.ńX_æ’žu3zōhF]ē{,^¼øĘ×ĻIž“Ē{ŒĒ{Ģ£yÖEÆ^ĮDF*ÉĻÆ=ÕźČQ+„eB‚›gŌW¤åJ(,s’» Š`³»÷L :«Ž’Uż¾?÷,m"Æ4’3«’ĶŹ 64*×é QgSvz&T•āE§JQp Œ‚R+&³ƒ¹K³ųtfńŃœÉ5³t7š-ÕξÓīįÓS“qåżēęµe1bÄ”J%?żō3gĪl„3źV‡;rŌ?Ņ››Äųm³k«’¾ūā[OźĮ=÷t`ęĢƒŲźŲ\9b%'ĒNLŒ÷Ӏö'É0øYćҧ³šĢK•Ķ’…lŽ[N›y„w):\Ī{OĒÓ§SÕE+æÄʬĪš×YOŲĒÓHÉ6P%g59Ėē’I#%ŪĢ£"xäÖóĀs9Æo}ĶŅ_ ˆ •óŸiø¬[Õjż“3Ó?HēhŖ„BĀŹ×»²ķŽé8›H„’Ó«Md܋§yļ©xśvQW;Ļ­ĻāDŗēŽÆćéRJt”Z’I” ®&(¾ęšįŗ7A€!C<Ė£o„*‚C‡F°bEF­cģv8~ÜŚŚ 8œź™Tf°”RŌ~L\”‚v‘ģ:¢C­tŽ3[«{kĻ9#“ŖóĻ÷šźÜMƒÖŖēzėńø)7Ų«(Ėķ?e Āä G¼Šeė Ż6jźĖįT)‘z_,$%¹ć8:īzH3BE®¹ęšF>ė @¤®:€$·±łžF7Dvøį­»ūī0›–Gd¤’‘#£Y·.§ĪqŪw˜¹}¬÷‹÷ŸvŃ ÕŹ(,­ż‹°ā·¢*aė—Œ%:LĪÄ7R8uĘH…ÉA‡č^z°o?сaO«\lF_ķŒ<ōF v‡Hß΁¼łX{fMhĖ”©|¹¶€Õæsēˆpī¹¾ 7ĻtŹŽ•žõ˜½6Éy® Æ%qźŒ ‹M¤{œŠ¹“cygjF={‚ārļ|›Ķk“Śó͆BöŸ20īŗp:¶ ą®—’°;D¦ż_ ™ĄüĒā°ZEę|ęÜ<åÖ³ĄYa’“µ3š8"©©u_=‚ˆŠjĶMo(C‡FÖiœ>Żj¤åzę`)ÕŪ‰­}I¾T7_Ź€‰G0œĶ™WÖ`0œ3"*LŽI‹ŃU8Ļućō“ä—ø~nMĶ.ņqb“n‰dÅoEµ:y¼Łł%Ńažåń7’’]żķD ž²¬­œĆ”µ×Æ&%ūĒśŻčqŚcǬ.uh/æ<Œ®]}—£ŽŅ¹ė®ŗó϶ūHŠŹ“¢·@„„ 7s^% ź£å»ßŠŲyXGŃŁ“›éFŽ[‘K›]ŚŸßą8m`é/”ģŒvÖ±js1=œFO™ŽNF¾…2ƒ‡č,vĖČ· «°£ 0ø–Å?ę³ēørƒ“ŁĮÓ>JĢ#>& RF/ń÷böŸ2šÜ}m ÖH™zGĖ7q$ÅŁ*ÆŲJF¾“ŁA…ŁQyžś¤’œĆ“k|1™éĄl®ūzöźÕš—ī zöt}SRücqkj2ņ=(©‚Ėŗk*UržIƎj2ņœ‘®sŽ“ŃÕ ­ŽķœĻĮb]żžĀ?\égĻÕ>Ŗz„ļŚ~A¬|½KeD¢g‚Š»F†óQb.Ÿ|ŸGf¾…—lWc4ߛū3y­)g®Hv¹ȩ́1å?[6uRłłv—=°ƒF’Öü¹ĶõĘsÄļäź^¬øsżÜ“ó ½Ng¹K‰P™“ļ µRJ€\ؒƒŽŌlēk!ē½g)5äʖģŖ\Ļ/S}ŁŪjT!)Éunk·nA0“–O·n®3ī„“|Īä{¶d;:¹ IDAT¼~»±‡CdÉó1 ˜čp9!rśtRóņC±ōé¬fÕ§XA©ŽĪ‰t#oŒ O'5•JJŸNj¼1‚éF K=’;”źķ“ —Ó·‹š@•„BBz®™“3OßCĻj„©T cŪ¦Œ‰D.s:r$Ģy(–ō\ Ė7a³‹¼õM6WöŌpÓ Ŗj0ezżŗžķ= ip£Ļ3­@];()qål«;k Op}-“SšŽŲjō ;]o<[‹FŪ¶*ŗuÓrņdķŠ3éé62³ģĶóŽfņHšĢmĶkpzįk aŸ#*LNĒvJöŸ2œĻyµT7LēI5źóŸÅę¦aQš³¹³OÜ…£†ĻSn°#æ`ĮJĶ1“Wl„k{%æķ)Coō­"Efą—uME²gw6®­ø&*JIHˆœŅ:R÷ü%¼Ż”Xmy%žmJ3ó-<Ż!=æÕ8GAėæ{kJ”÷čŚUĖß×.›[PŠō [SS¢›§÷p}-ż”kz£~k,V‘ŒŒŗ½Cżś…蛍ų믿NēĪyüńĒY±b‰‰‰¼õÖ[Œ1‚īŻ»WӇµZ­,X°€Ć‡{}.™™™,X°€ü|EŻdš`׊'Ž®DĻš0 {0©¢šRĻ…ōøÜ†®ĀŽŃģĄ`tŠ¶z!g§Xglq ‹œ+ÄŌ# ˬ8Ěók/IP±ź®•ržķ"½N!§ŠĀ¾“ž:¢ētFÕs„d›kT6+Ń9õž’Łé·Ü`g’)ē¼ėÓųB*Ģ­€ŗŠ»e4¼'Cm >œāāb:vģXÆć÷īŻĖŹ•+1™|WLī]\ĻS§óŽĆ²!4ź."5ՎŻÅ÷¼Gß伞}śxķóvė¦EźÖzNör±^Fg›Z½ŃĪó’™ó`,ÆMn_ÅCn²8ųrm®:_PūśWYüß“x>Ÿ]Ջ]hįé÷Óź„¬³ńļ2īūw>ĄO–0ėć3¼ø8ƒwžčĄŅ;UŸU`aÖGgpˆpŻeA »4ˆgT꿟Ź0±jK1“n‰āē턜ÉuŽCßn,䟎VĻwęŠ¾°(£A݇[#ēq'”źjÓŚŠūøs-õzo±ŗÉŌź‘nLŒM0‹zŲ‚4¾žŠGøš¾šļ’›?üµŚåß¼y3V«•~ųgŸ}¶rÜĉyę™gˆ‹‹Ć`0šėÆæ2}śōŹtŸGy„©S§VnÖ,X@Ū¶mٰa3fĢ >>ž’’žüóOf͚EvöłüAƒ1cĘ .æür“Z-f³™ŒŒ ¶oßĪc=ĘŖU«øė®»¼üÉ]_K½[F™oiŌU15Ķu˜ĻWÅz‰ó jÆ%1cĘ n½õVŠ‹‹«“„~ēwxēwˆ'55pvŁ\“h”””STTDYY&L`ٲe€3omŊ“iӆżū÷ĪwÖ¬Y•ļ=eŹn»ķ6½öy5mŪŖČŹŖŻMIń^®®(B‰Īó‡pj¶™_O&X#%.*ZJI¹ŌlSµ°wn‘•»ęœ&õ8qQ Ā‚åœ:Ó°pkqyƒoQč u/nr¹„²i6£………¼śź«lÜø‘‚‚T*±±±Ü|óĶ̚5«²ī(''‡W^y…Ķ›7STT„Z­&..ŽŪn»gžy‰DBNNƒfīܹ¬X±‚Ż»wc4‰åį‡ęÉ'Ÿl”Ϥպīō­×‹D]Äbn–V 1iLĄ.ZHwRīpn2傊ÉÕh„Vń’’ššŹāÅ‹éŚµ+'Nä’ūEEE=z“rĢ€ˆŽŽfŃ¢EŅ»wo¦M›Fxx8£F9;ꆆ†’PyLDDcƌ”’ž|ōŃG”••ѽ{wž~śiŚ·oĻŠ”C aŻŗu;vŒ_|‘ÜÜ\4 W_}5Ó¦Mćķ·ßęłēŸ÷Į'ośĶ½;4ŖąZ† :uŅųäÜƇG.—3eŹf͚E÷īŻ‰ŽŽF*un śöķKß¾}ˆŒŒ¤øø£ŃH»vķųšĆ¹ūī»+ˆŻ»wóÉ'Ÿšé§ŸVną¹żöŪ™1c½{÷œQ‚Aƒ±zõj:tč€ĶfcҤIģܹ“Ń£G³uėVzõź…\īzQõ”Ī5u%„Ž3LļP¦·sXļŗą ØĢVcQŪ9ņji²„«°W_ˆCtv N®Aŗ·Dg£¤=ķ¢rE5lÄM§Ž’?1šœł„eĖ–qųšaĀĀjoį ĪhA\\?’ü3YYYX­VŹŹŹ*ĆZĖyļotttåęæ±q/WW$8øį‹uEkĪk£ŅP•o!ā þ›"1ÄK¢\«Py w¼[z½­Ń €ōōt€*uCē2dK–,Įjµŗ÷ÓO?UymōčŃÕʍ9’’üē?ޘ¶Ktnt˜uoĆŃrQ×ć‘mæ ō¬öŗŽh§ØĢʞ†!¶źĘłĄQK·\»wŃuļūčŚkķ ōśźżĪy党ZHŸÅh¬žŻ žĶ>wœ^Ƨ°°åĖ—³gĻņņņ ¤oß¾ØÕj¾üņK/|‚šp#ąN’ʍøQōąėb=AHHHؒOšąƒrõÕW³råŹ*i=5qģŲ1®¹ę$ ½zõ"88…BAÆ^½X³fMµó5nåź7|cdößg_‹ÄlEhĀŪ €\Ē Ŕʒ[0ü’ģwxežĄ?3Ūw³é=$$ōN؆"Ņģ"öŽõģ å<ńlŲžw§œķģŲ–SlHļ"%@BHļ}ūüžXŁd7Éf³ęóķŽNć§O e`’–„Ÿtļu¼‰^+{\ŚĆ3ks÷„_÷$oæż6Ÿž9|š#GŽ$::»ŻĪ§Ÿ~Ź×_ŻŹóą=Üē²=o$ń± ż‡T­Q·Ó¶+<žųćüżļĒl6»Œ·?~<¢(rų°ūŠÆ½öįįįlß¾  cMcc#O?ż“WēŻ<)}č­fJ„¼ū„Bźqį Bjż¼Ų1SC!a$łdžX·ŹĖĶōė×ZĄīNš|]hņj4šę<$wćšpU Ūn·£T*}bp(/oß m0~qoö$F}ēÖC»Cbö{[Ņ)XtU<™Ʀ½u]źšėŽQżõLO (Ąh÷ŸöˆŠōD®Šėöyųšąą`¦NJ~~>åååģŻ»—ŹŹJŹĖ˱Z»Ójéž»ŒŒģł*i>UÜÕ>·Ł¤n³j¦„„!IŪ·ogüųń­Īgffāp8ˆ‹;öĆ5m¦'&‰>|˜“žĮóė)m½·7±ZŻæ·ŚKFZ½ę$ßń}Œ/]Žķa—\—öµK|• éĮꖕUĖŲ±ķ‡öy›ŲŲXŠ‹‹‰9”$NQQ¢(Üb܉žÉ¢¢"ōz} £ENNN«kåååŁ}Ō'+«ż.—žü½ DˆA¢ŗŽ;A]£Gß:Ā©éĮ\pjx ĄØW0u”‘„(5¢(P\aeż®ZŠN(†¦bŅš ā#Ō8$‰ā kvÖ4T78ˆ~ń$j ҉\<Ćéiڰ»Ž#Åf.<-‚õ»j Q2f€Ŗ:;_®rĘX§õŃ2~H!õ&;eV6üY×\łģŒ0Ŗėl¬ŁŁņŽéÆaÜą ~ŚTŻf±OčŁó5Õż™šp‘°P‘ŹŖö¾§īĖ_hhpųHLLl•ܝ<ńÄ|öŁgddd T* #<<œ˜˜t:ļ¼ó×^{m7\Łżw™šāy{ųTpēŖw8$źėmŻŅ“ēŒ3Ī ::š .ø€{M]]{öģaéŅ„„„„0o޼ę×čt:BBBųųćų€äädĢf3ūöķĆjµņĆ?“x_•JEZZcĒŽE”P°aĆ$Iāį‡īöĻ”™éž{LKóĻRˆ¾&1Ś» @Y••‰Cyž’~]˜XšōAźB°N#ņņ]ÉKŽÉgŃUńLOaĪ]ĒB‘ ēŽ©ę³Ų}ȹö‰VsćÜŽųŗ„——6—‚Ž Uņé’ÜqQ,w¼”Ć'æ”sńŒ¦ęĒMÕĶļ9cl0ß­sα+$ĒČwōOS¹QDœ‚k®×Æ]SSƈ#øä’KčŪ·/łłĪšŪ}ōQs“°ćŁ»w/‹-jīü»råŹ†ÕĻ>ūĢe.Tvv6‹-¢¬¬ pzšB1G’$ņņņ€–į•ŽA“ļmödĻņ>…ĮM¹>p ­±±Ż#Ż 2„ļ¾ū 9L«ÕŁf„ž pķµ×RTT„Éd"$$QłńĒ©ØØ ¼¼„RI||<†… 6ßp?ž8‹/ns>/½ōO=õŻŅĄ@©Ī;ZØBA:ØėZ+&i¹’Źx¾YSÉĆoäµhč5iø‘eōć¾Ėćø’Ÿīs5¼Ķˆ4=ń‘ķ—VõĮŒ1īōé£D£0›ŪžNvļön ł¶ø÷Ž{INNnž’C=ÄģŁ³Yæ~}ó†sé„—2wī\’’ŽåH<óĢ3œ{ī¹lٲ…ÜÜ\DQäŹ+ÆäüóĻoe”xå•WØ««cėÖ­ŌŌŌ0kÖ,.½ōŅV㺃ݻŻw Kõ“Ķ­§IŠöž3ZYkG§0 ī«ćž„¹ĶĀ?8ū¼÷}’łk Éq²˜ˆ W±bcU³šŠ`rš·×óŠi<7}°¢¬YųžŖGą½ŹZō)«²ń͚JĪ<%€Ż‡łó`ēN kVĘ 2fTņõšŹĪ~ˆ$ų0H”ą"ōQAĻĒt·‡'žRLw(ą g\ŗti‹cMFÉĪĪnaµß°aC‹’’ūß’\¾.77·ÅėŽ|óM{ģ1.æürrss©««C­VƘ1cŲøq#Ū¶mėŹĒrĮ`ÜÅæś‹‘Äļ<……&ś÷ļžnĄĒęqż}„RIŸ>}ZoU2488øłß:®żrPZ­–””ęŃQ Ū—ĘŻÕOļ( v2tmŸüRĮāk RPUggö„˜Ł•ķYȶčē@ćĆ[Ī(ÄP%åµ8&¢ĄąĆŅĒaŲ0O¾¤”ĄnG .äż÷ß'##ƒ„„“Z-V«•µk×ņąƒņūļæc³y{źvİažaHō©ēžrYYµLźßR Iīćžćā½k±HŽ•ČlŻ#„C HŅ‘orٱąūõU4š(v»ÄÅŅh‘H룔ŗĪΟxó˜>&˜ļLĘj“8\ģ“Ö$ÅØyč{^Éeå6§%söų^¼#™‚r+GŠĶˆ¢@æx Į ž>Ȗ½õĢĪä‘ĘfĖ[Slģ”3ÅVΟĪc śPßč ·ŲŒZ)£Į~Ä_ž=ÄÖL׍LŗBb”óz<Ƈ«ŚU$É)¼^xa¢gå]‚‚‚øńĘIHHč‘ėK¬\پ ŠƒĖ Ą°¾NĮŌ›%’ƒõŠf£‚öhż¾±jŒ­×ņ6TQor®£æu„ĢÜF†„ź™4ĢHl„Š˜pšĢū¼÷CY§ę£Q‹ŲķĪā'b³Iؔ¢ąģ¶žŻŗJø2ž3&…±üē2fŽ įƒ»īńŒéļŪµ°8“T…IrīÆ"Iāx”ųIe†6˜8AƒJ%`µ¶g<‚3Ø÷ģ/;wī솒öpÆddųǽāSĄ·‡'1¦2īÉĖk ” !ŗ o'ėyC(5źEŖėŚž÷Źm5ĶĀ{}ć4,xśėw9ļ…(šč‚>¬ż£–»—ę6' é¼v?]ßü™Ćŗ?ėøé™ƒĶ›˜(Ą»Oć¢Ó"Ų²·ž{’įt‰>w[ń‘j®xäX½Väo×$šÕźJyćH³‹=ßÄņŸĖ™f`ĮyŃlŁ[Ga™ūŠyķ”aTŖo‘P!p±_@’MLöČņģ> Q¦-2p’?9Cė7}R|źh*}T]ݶ ø}{×-2°s§ūļ15Å»?’Šä®/Ä&‹£Ć͌ʪ[Ęš…u‡ŸĘ“QĮ-Īõ9+lpĘ”žŗ…öó IDATø±š3O åüiįhŌ"A:ƒNĮ„!AģŲļ>t§Éõ~ɌˆVåIū'jQ)“§%Ī[ė%ā"ż# A1šz{©©.¹@¼b$”ūóxŽ')IAb¢’¼¼¶ć9ØcćĘr&Lh]=BĘ=|ą>9Š_\ŪžĀ„ĮvŽtÆčAøįÜčĒō‘¤X 3҃),³šžŃ°»]āė5Üva ­Čž#&źMā#T\wN4Ž˜š» ’y°».‰%HÆąH‰™F³DbŒš›ęĘšēĮLęcėSa™…Ų57ŸþÜFŽ”X8TčŚj¼=«žĀ2 ß˜Č{ߗRPfÅ –ŖgĘŲąVÓöę8“§ę”×ó\¾gGœģ Hēka 09CĆK/»•¼tOžZļfŠŪž“Fś<95UŶmmkżGŽ4°­O{3ībuĮūÉz1aq Ė;ļXŖ©·£o§*Eś@§Ž ęõÆJš›ĢœˆīØ5+6\EˆĮul¬Å*! šÖßRH‰×²f§39øŖÖFu½›]Ā u’9“Gē©Ęįh¹5šü°”ŹėŚž˜žönń*t5z†(Ī Ź‘FŒB,:!“Gę29CĆG·æi½÷^®¬t‚½{kŲŗµżj-J„3ĪXęƒ$G;Č-q斘-u vœ ˜,*jl|ųS9o}[Ņ"DņÉ’P]gē‚éį$D9µ vVļØeéņcåØļz9—ū®ˆcĮyŃD†(Q*j쬒³Žē>(hq½Ļ«`ōם…QÆą­oKyńćBjźķXN0rX¬ ž>ÄĀ+āøå‚"CT.¶šĻĻ‹yćėÖūŠŗ]uōOŌ²bc×+sĶN—…ŌŽ0a¢†šp‘ŠŠö RF`$°Õ«×ŽŽŽfāĉ –/_Ž­MP=aŠ A„††¶Ø.Ō5ś}Ū”PĄģYžSĆŪē ĄčQźvp ƲŠyl6‰ß/mwŒF#0dˆ÷ćŠĘ¤9ų® @i••‰C.cR§Œ ęŚ³¢ŚmSßTÕāÉw 8\ŌŅr„TGcS¤$hÕߥ5g³iO]‹qOܔˆAė>SæāØ÷įĮ×·(ÅĪĪ×:/[’Ę š½Ė»=D”„‹Éīv3§ĻŃńŃĒķ{m>ś(—^…¦„eąŻws܎™r ūj•ŠŖz@A™…{–:=8¢ą¬ĮßVCÅ“ƒ{^Émõ~nųÓåųģ|7?{p®y®Ž7$HĮˆT=µČ„3#ųrUE›OQ)`śhYčj•Ąyēźyū:7#gāM`śōé|’ż÷( jkkłģ³Ļz\øķ¶Ū˜:u*#FŒšŅ;Īt;āŌiZ¢£ż§\¬ĻWėÉīµO¬×2m³qc¹ŪćĘŖŃj½oFījBÖŚ?źˆPqś„ÖVd…B`ĪŃŅqķ5Ž)*·ā`”‹øŌs§„±īõ”h5‘!Nż÷ÄŅv¢Cūµ.ßź@©lł”9_;Ŗæ”ÕųłgEńó+ƒ½ģķćŖĀŒ™ZĀĆŪ_Ņ**,|łeKUd˜Ķ€‹/lż ČĄœq6Ÿyģ\ ’'āšø›ŗ'ļw»{;ēJ’DUUAAAH’DVVƒ¤¤$jjj0­ŚŌ×ÖÖ"Š"ƒ»ŻNMM ĮĮĮ8ņņņhhh 99£Ń7!’V«ƒgŸŻėvÜ9gė0dŖ-.›n=©€&¼%ü'G;8e˜…B]¤ēɧÜå`Lā€B7ćŚęŹ+ÆäŸ’ügó’³³³P«Õ,_¾œššbcc3f õõõÉ;ļ¼Ćgœ(3oٲ…łóē³{÷nāāāx÷Żw™1cF‹Ā!ėÖ­cžüłģßļ,e:dČ–/_ΰaÚĒüłēŸääätśsµ$˜åvŌ¹ēčŠéükJŠÖśÜ‡öČcÕüė_ķ—©œ7ÆŸ.—£ź(æżVĀōé+Ūc0dķK@„źž›ńĒ-Jžx_NģŽ{°QöøaŹŌB2³Ś·NœĮśõīc6»Bee%įįįÜrĖ-|ņÉ'”••qé„—ņšĆ3dČ~žłgf̘Ńā5“&MbŠ A¼żöŪlŪ¶ōōtžžyžžyŠŠœŹ¤J„āŽ;īąłēŸļÖłü÷æ9̟æŃķø/>ö°ÄąÉĖ/čŲ—'{µ½ĮCW˜™=Nöt–Ź*éc Ø«s'žm:æĪDEE‘””ÄĖ/æŒ$IÜ}÷ŻlŪ¶Õ«W3yņd>ųą–-[F^^‡āóĻ?gāĉÜ|óĶģŚµ ‹ÅĀšįĆłĒ?žŃüoI’X±b ą–[na÷īŻŲķvFĶ«Æ¾JQQ'N`ūöķh4n¼ńFöīŻ‹Ńhäšk®į‘Ga×®]^Čø˜ÓīQXµ2†ż£ž=²{¶{7Č·ßP^޵Į'#žÄźžy¦¾Ū„€i#mł—§«W08É! ’pĖ-ĮnĒlŲPןv½ ”'¼õÖ[Üwß}lٲ…„K;īRé„—xć7(..f×®]Üzė­¼šĀ |÷ŻwŻ0Ūc44Ųyä׉ŸĒ3|øšŒSdįßWĪ”½wŽ >ĀĮŒ1²šßĀBE®¾Ś/āX ½Ó×)--eėÖ­TWWSUUÅÖ­[Łŗu+ŅQWŠ®]»øźŖ«X½z5‡B§ÓqĪ9ēšŌSOńĶ7ߐ““CAA+V¬ąį‡f芔$''άY³xä‘Gųžūļ9|ų0łłł|ūķ·,Y²„ &Iß¾}5jK–,į÷ß§¼¼œœœ{ģ1233;ż¹Ž‘„'ÉægŸ„ó;įzH3Fķ¶šÅāą7²}4£ŽAy¹Å#”ęā »·q‰FÓFŹ›·9}¼üzĀ…čILtŻxēŪ©®īžļō®»ī⁠==ččh÷/8Å‹sÖYgͰaĆxńʼnõbł:×<öŲnrrÜ÷Āøļž`9ŸĀ&°Ń/NVą»Ź•³l(ähŖ.sė_‚<,r-īāŪ;Ė®]»š•€˜˜T*f³™ōōōMį’111$$$ 6›­Õø¦°”ččhāćaž;vģhq]I’Ųŗµ«UŽąš ėżķ·»7Jõ>ĻhāĀ õ<õtū1h/¾˜Åķ·@ƗŸvOxį…}Ō¹ˆ‡?žŲX“»)ž’x.=ĶĘ÷Ux1’õ¤&X/qś89ęÕT*[o bŃ_Ūo†WXŲČćļęłēGuė|ŗźb>>vœĶ¢"""Ø®īzõ¶ČŹŖåå—Ż[ČP2gŽ’ŌµögDī¹ŠĀÆj½ ²1 ƒ3dCˆWˆŠRpłeA¼õv­›‘‘ĄE8›ƒy—K†„8óī–-[Öękōz=*•Ó€üžūmĻIÆ×ź¬&X_ߌŃõõs0ĄżØ™:FŽš?ė?ōœÉz¢›Śh%%&Ž|ó fŲTW[ł÷æøwįzŸXO’£L!»i½Å„§ŁŠid©ĮS®ø<Čm½e]¤ŽļIüż‹*~;`ķ6”ģųD¶ĪŠ“Łł »]ā†6c6»·VßuW°Ūu\ę#SķĢ#+ņ”IRČi^ćöī8 ŻŻÓ”¦Ę™:iŅ$Apł·råŹęqƆ ksܖ-[š…|­¶µ‘¢I9č}«ÜŽR*įĮæ†ø×SōŲ£Ō'AĮŌ©īŻJĻ=·“I^0ŻńņĖYTUµoEK/õ]Śkf[åŠ/¤ƒ¹²Õ«#h4 ļkŪķ–JĘCōĀ¦Rg~ią„Uķ—ŗōKĻē==śčnÖ¬iæ‘ Ąˆįjęžē_u­Ūęš ŅÉŹ|G9{’!}żC(•ö³Ēö-»ģ_‘ćŲ€ ³ūł!11 ī_čIxŠÜŠÓŠ}!I)))­Ī >œŸ~ś‰~żśQXč¬LäjÜųńćłé§Ÿˆ‰‰i7xšąVㆠŅÉYj;÷†™ėÆ32tØZ’”€;<ˆ‹ŹĖkąŁg÷ł`6K^^Ļ?ļž;:ć -śūīfLKp0iˆ,؁ĢEÓ¬²ĄŠ ®ŗŅ@zzė¬Į‰FĘÜ2„¶eäO™ö—v’żŚTĀ³ÉŠÕ„ÅbįąĮžõx®\YĀ“Oīq;Nž~*LŽÅīaF‰›Ī–śŽ,q棞!d—82ɳoĮD-V©‘ Ē!²ķ«Ģ5Śs!5øOßĪŅŲŲČŖU«X“hcĒŽm¶ÜĒÄÄšŠC1vģXņņņš“‹/^ĢØQ£šĒÅĒdzxńb† BII dß¾}<šĄōļßAŠjµÜz뭌9²3€›÷%¤=W®zŽU&gh?޽ąÉ'÷•å.NķäåĪ;·»żøóßߌ·Ļ5£VęĀčĄI\vZĻ[…§ŽBHÕG{ūXTz×éO¹•ŻÆ$$$ųĻ>Ėžżū‘$‰ŹŹJnæżvŖŖŚĻ[čNŽią²ĖÖc?®ĖvÜųx&żuig§š†p4ÜēŠĖõŒŪZ¹’ńŒó2¬Ģ”+Łx„(ĄCW˜īŽŚS"µn"U/•Ó •õĄlŗŽR Ļ>ę”·~ p'Ż):.X°‡ĆĮęĶ›illÄd2QTTÄ©§žŹõ×_Ķę|n®¹ę‚‚‚Ų¾}; ˜ĶfņóóIOOēśėÆoN.¾ęškHLL$++‹††yšĮłź«Æ:1»+€‰|ō‘PĆ«zŽKnāĪ;Œ\qeūš½ŁģąŽ;¶ńĆÓ|4«ĄaŊ"¾üņˆŪq3NÓ2j¤ļ7ģ„(‰ĖN³ńßż× ęĻÜ9όÖĻå¬*ĒŠ„}Ų%F!–8Å”ųǤGŽPqõUA¼żNŚ0-ćī‹:øm£CÖÖ2fčŽa‚ °lŁ2®½öZ €Z­Ęb±pĘg0nÜøn½v[TW[9ė¬5›ZÆ9\ƒ±O0!IĮ¤ž•†dsPs°‚SĻ6SRß@“AVN;Ė=YŲ“+RPīßBBO3Ž•ōžS=É*5øż4“4#ƇūoēĪRTdbę̶Ć~ND-ڹż ź‚‘Ül†Ž£Ź€C(oT‘Uną×CįüšNQ»C TkC„…»&'90[v’Ė*éąÅæ˜HŠńĻū£Č±ŪeşP1Š•ŚņžĮĄ*¬VŲ°ŃS„4 ģü;dÕstĄmĄ _1ļ|=>Pr©ß(ƒˆ^/ņĖÆīo ]»Ŗ)+³pę™q>˜™±kW5§Ÿ¾Ź#/ČĄ*^YŽ¢ ·½ÆE7ČΊĶJĢV’˜“æ‘ēąńkĶ(Dh[Hčq`s~0ļ’ŃöaŖ4±éÅ͘«\Æ9v»Ä—_ę#0eJB ­ģķ°eKsę¬bß¾÷ƒ…–½ĮÜS%²*‚(©ļ˜µĻ!9æ7³M$·JĒĘü6ę3'µ¢Ćsļͤ°SŪ °÷p€<üŻ@°^ā¹›Ģ Lņ_ļgoW&OÖRXhg×.O QQĄTą0PÜ}ó }‡€AæbŹd-o¾‰²ĒĖźt æQFR±y‹…Ü\÷åŃ6o®@ÆW’‘ѳ±ķ¾äŠ”z¦O_IY™{Ķ\­†Ž&>Žæ6ƒF„:ųi›»ÉՂȉ—n1ŚvžŖßᯠ@n•–7&c—\ ķ¶z _ŲDCYū ō’äōø­YSŹģٱķź^¶,›‹.ZGy¹ēÕ{ž\Ę%;“‡EÕńó”šf”¾#ØD •BbNj9W*DÆņ_!Æ'˜8ĎF[÷ū×ŗķ "‚ėߥD’¾/Š{\*įb2Z”wx fĪŠ±{·•Łž–«Õ“q†e‚‹< ’FNĒYęŌóßqŌH5Ė?ŽB§ <‘_ä4!Š’z5œ˜ĻæE‹vņź«ū»yVžANN=³g’Fa”gŻJ}$Œ‘#üSXŅ×Ī#טå&BǤƒgo4īŸnļ@¢Ś¬déĘ$,v× ²RtpӈĆhmžwž]¹²„ōōŸųńĒ"oMÓ§”–š¹ą‚µÜtÓĢfĻ7ęū†pżuĒ4Ņ­›Óó;\ßI =¾†gļē’”ÅDź#Ä­'ø|†•E—\ėc߉×īn$5Ž’…ʶ„|M/ž›P*aŁėLšŲ‘ź0xŽ=ėR€'€łt$Ÿ!-UÉGFa0žš~¦DE)xżµ?I‚ŪoßĘ¢Et’ÄzŻ»«™2åWš¤F/œ}¶®Å¦ķd µ±čs@ÅĖuj„ÄÓ7˜HKš’ĶĻߑ€’l§¬±ķEüź‘ELnęĆ¢:ŌØ„°°‘9sVqŁeė)(š\yčI‰×_ĻfŠ ’ńÅīū…Ļõ×qß½­+®‹Æa\|5JŃ3eU@āŹį…Ü2öAj¹ł•'œ1ŽĘ“×›Ö÷~ƒĄÄĮ6^½³‘˜°Ąų¬ āHÄD§H!½Æ:”V+šńGQĢžÕŃ<Ā8ąo8­éž„a®–©zåčQj¾ł:†ˆæ£=ĘÆB€šHLTk×y–„²vm……&Ī<3Qģ]åźÕ„Ģžż%%ž}ÉÉJ>|?­Ö’懓A:‰Ķ™8ēE4jxā: é3ŖŲ±­…ŗ1½ąūźS?f‡óó”ˆ6ϟ‘VĪ9œ‰Æq± N›®åūL44x.|üłg5o¼q­Vd̘p”J’|Ö6n,ē‚ Ö²lY6»æīŗ3˜GžŽvBŪŠčz~Ė Ēb÷dó$§āąOõÜżÄ(‰™évöVōŹĀ ̟cį¾K,~ßģšx4BĮB ‚‰+õ›¾'ŽF„8ļ<=ÅÅvžš8' ‰D`N… Øõśü:G0pNe žVłibŹd-~Ihh`/h~©Lš¤įČ;īöģ†Ūŗµ’Õ«K™3'šćt›X¶,›Ė/_O}½g›wX˜ČēŸEł]Ü{ ķė !RbŻnåIWŪØ“xī&SĄ ’Վ|,“Ž££|Ū³ VĆ«›“ŚŒO]Ē‚Ńo#ˆ‰QpĪŁz~žÅDe„ē³ŁĮŠEüē?±Ū%ƌ G„ņĶ`ķŚ2n½u+<°“üüŽy*y8„{ī i×;§VH$›Ųā¶*@q½†ƒU:Ę'Ō¢{xŒA+1g¬ ‹M`wNą¬ėīˆušĢsĘŁŅ ¬t„ „ NCGož›E˜=[‡É$±isG»‹@20 ˆźĻŖyŸ`p+Ī„ŽĖŠóĪ×óę›čuž±ŽwæhÖV«ÄÕהyT؉Ø( ļ½7‘9sü£ QgØ©±rć[X¾ü°ĒÆŃé>ū$Šqćz¦ŪoWŁ–„ąĮ·44˜z÷BŚDdˆSų„˜×öؕŠ8ąX…$ūĮbé|3Q˜6-Š«Æī˼y}ī>o¤Ć!±aC9ļ½—ĆņåyTVvNyčÓGÉĖ"3¦c±&›Č¢_ŅØ2)=® 4:¶–ŪĒēyœC s ‡ß®WņļÆ5ŌXÉõA‰ī¾ČĢ`?.ń)ćūXYpc{öt~Ķ9F)°ūøæ®–6C€”G’ŗų~Š'AĮ²×#;6€bÕ<Ąļ€Š ó.,ķšĶַƁ„KGsī¹]æŗ›‚‚Fī½wģ¹ÕœĀ’?^ gŽł¾·:võ&xīc æīč}y‚L±rĖy–€©óŌjxhe*¶6¬Š)įÜž[Å?^^Ļ‹*ilģŚŅØT ŒĪōé1LŸͤI æÆ% 23kX¹²„_-į·ßJ<* ģŽÓO×ńŹŅpBC:§xg•ėyrM_šųLźSĶĶéGz%Ķה—·$Ó IDAT×|ų‹ŠÆ×«0{CėFśÅ9øj–•£mņļŻ‹0™$žöP%ļ½ļķ®ļõ@!NĻ@μœMĘL8Ė‹jq6ėŅœ9ńG’¼›Œ}śK—†ąńž® ŗZāźkJYæ”掣gdzdÉpFŒšæ&uu6žłĻż,Y²‡ŚŚŽUČŠéŽ|#’™3Ūņ"’ŸÆQńļÆUXm½cĒ1HüķJ3n¼ææņüśdž(v]õŖD›œƒŲĮøóĢL+7ÜXNf¦÷ŹU $%8ŠČĄFś÷7b4* RŖĘhTŅŲh§®ĪF]š+łłdf֒•UKffG =E­†Å…rć‚®»“?ś3–Ÿ†auˆ‚ÄČčzö•ė1ŁŚŽ4Ļź_Ę%C½iPĻR]/šÅ%Ÿ®RQ×č_keZ‚ƒK¦Y™9Ö&'÷bÖ­7óĄdfõ® _11 ’-„‹/öm.›/ ĄbæÜRĪ7ß¶ß¼§-fΌįńLJ3qbŪUB|Em­·Ž:ČSO털øć¾ÜŠ‘÷ߋdüųĄŒł÷„üR—抰qoąšĖfµqėyĀ‚ęQ ž(1ņüŗ$—ē“JŸšMLPēL¤V«ÄŪļŌńŌÓÕ]Œwõ?2NŃšōÓį ąO›Ķ!ņ௩”Ö«Pˆ׌,$Ö`į¹õÉķ*W /”;{ŗFŸ·)ųa³’==˜,¬×JLaēōń6F§Éʎ“…Ž“V*•pķ|#‹īP™č@$ »żµ’’¾ėYM|WLŸĶüłż˜7ÆAA¾ 5Ł“©‚÷ŽĖįŻwsØ©éœu11QÉGF2 ļØv䎵»•¼ü™šā+…—–ąąž Ķ ė'Ǽvv‡ĄC+SČÆuķ»zd!3ūu]ø,(“±xqu§ žD“U뢋 ^ĒČ©ÖņČo)H’ĄCSŃ?¢½e^XŸÜfS6A€;ĒfLœæ” |ņJD~Ü¢dÕ rŠŗ_€ŃŖ%F§9˜1ĘĘ“64½+LZ¦äåŁxę¹¾ų¢[€9ęĢŃń×B<ų䐭Nhbł' <°Ø¢Cõ»OÄ`P2o^.¹$‘©S£1½Æ HģŚUÅ7ßšžū¹ģŪWÓ„÷ėj¼n Ņ`ųtµ’ĻV©Ø®÷oE !JāŹ™Nk;©ŗyśš•9a¼½#Žå¹£™'¦g£šb¢é?5ņģ³5üŃÉJA=‰Ń(rĆõAÜ~[0AAŻ÷ü|•Å{£yzĘāĪpĶ?ŠƒxycR›9:•ƒ‡§"Į`Y­@EĄ¶ ¶ļW°3[$æLÄŽE{„A śŲę`Ģ;C’ķrN“L ޱńļןxļż:L&’1EQ`ę - †0rÄÉ!ų7° @f–”y%N÷ų„½ŒŒH 2’œl@”čŲfYUe%3³†mŪ*Y¹Ņ™ØWZŚõD=µJ`ńāÆÄė2& |³^ÅĒ+U”Vł×Ń7ÖĮ§Y™™. žŻüõ—4 j]‡Ą-œ”Ėš˜Ī{ ŪcćF Ļ>WĶšßż_` s ž }b4°;~<ά”ŠU~Ö įõ-}hk³‰Ņ[xōŌCr§ąnĘj‡üR‘ĆÅ"y„ŕ"Vh4C½I¤”TJ ōŅI“ Q£$’cD¬Č ćc ķ,ūO-Ÿ}Ž@q±…„…†ˆœ7WĒĶ7“šŚūŠŽxB@+‹®ā½÷됼üI4‘Œ¤¤Ŗ"(H…ŃØ$4T՜¬W[k£ŖŹBQ‘‰}ūj))ń¾PšŖäŸÆF0f“ģ[mĀjXõ‡‚7+؜©ģ²U«³hŌ0m„9cm¤“ÓĖQū-»Šƒxn}²Ės£ck¹{bĒŖiu†ßךłĻµüņ³ ‹Õæ–с”\~yW_„Įą7å·ū#łdwL›ē‡E×qߤĆNŲ–‘‘ńo‰Ķ›­|śY=ŸQßcy ddh¹ųB=眣G§óµ±§x ‰;-Ü%;vž{¾-“ZŪo3rē!ØeŁæM*j~ŚŖdåN™y ģŻlhŠØadŠ™é6¦·£×öŠG( xiCŪ‹Œ­Ž Ą’ÓŠ'øė^7O©®–ųæÆėłäÓ6o6{Żį)”!"ēž«ē¢ L˜ąŸ ĘŪ;āY™Öęłó•pž Ī52“‘‘ńjk¬üĶÄļkĶü¾Ęāģīõśõé£dr††)“5̘”#<üä Ÿn^£ŲlšÖŪµ<ól µµx9{–Ž'—„‘”$Ē’t„“ĄĪƒ"Ūö+Ų±_äP‘ˆ„‹„DƒtogL;cś;Ņ׎JžYzŒā:5÷’Ņß„ =4Ŗž2r|>§&“ņĖÆĪĶmż:3UÕŻ·)0r„šŒ -S&kČČŠ Rł·EĖęxn]2{Ė\—Öø’”†Fy»¶øŒŒŒ?RTdgĶī¶’•e%ū ¼<[‡ y‚ JŅŅ”¤¦(>\MĘ)’“OĪšOčU @%%vžłÆZžūn]—’„{‚S&iøēī`¦Nķ]µż{ ‡%•y%"‡KEŠ+LuŠhh4 (D FB§Ši$B bĀ$£%’£„Ė1Æ~Å7YQ|ŗ'Śå¹»'ft¬T”±ŪįĻŻVÖ­3‘•ee’X©ØčøR VCJŠŠ“4%i©*ŅÓ5LšØ&88š¬Yu_•Bi½k/EˆĘĘÓ³ ŃŹł2ž‰‰jʇp`Ć(D&$BįÉ“Å*q萝ā"õõRó_M­S+ 1č £Q 2R$%E…V+’”W*MTT8XöŸZŽx³Žš’öœvšŽ»ļ ö[×½ŒŒæšōļ}ŁćĀ‚©·ņü¬ż~C^Yå ū€ŚZµujk%źė˜Ķ‚ ,878ƒˆĮ ŲGAŸ>Ź^•X~øZĖ£«S°¶QtxL÷MŹ•E*æ£N*į€ż73QG‰HÓ{pV22§W+MŌŌ8XžI=Ÿ~ŚąW9a”"sēź¹ā #†Ė‚挌;,v›æ„ĶŃŚņ}īĄR.\ҳ’é ķ•q˜?²Ó¼ŠĒAFƛ쳒HƒTŽźųåŁhi—$#㯜ĮQĮĮ" n0²ą#ūXłź«–RĻįþ/K„V œzŖ–‹/Ösśé:Ō~³+#ć«d¢B:ˆ+!Š”m”®«ģ- r)üƒ³ŠŒLą0½o%™åzÖå…ŗ<’џ1 Ŗėt'g™īĄ$U·q¼ ­ +2ĆI”O’4 ļ aį}!äęŚXµŚÄźÕfÖ¬1QYåż0!…† U1~¼– Ԝ:Mq»22®0IÕdŚĮαŖ;Ńāśt“;|…Īåq­ŅAZxc·\S¦ū˜?²C•: ėZ÷s0ŪE–mOą”ɇNźŽ'2ž†k9ĮŃĘqå¤SŽ'9YÉÕW9keŪķ°g…Ģ,g¢Ž6²ZÉζyŌÉ®)=5UIZŖ’žż•¤¦Ø5JCHˆ¼{ÉōNņ;Z’%Ž,"„tBŪå;‹+A -¼„ŸĒžĖ“F«tpÓŲ|_Ż»‹NĮūĖõü’ĪL9HFFFĘ«œŌ Ąń(0|øšį.bń-ØopPSķ ®N¢±QB„0q4QO$(HņeN>p-˜5P‰ļ+%mTŽI0Źa"JJh#gõ/ćėĢ(—ē?ŻCzl a:¹*ŒŒŒŒ·P«A­ •CwddŽGj£ė•$9ŗ„*^Åu)œ0¬2s•²½(˜¼źÖžF«Čņ=1ܜžß3“‘‘‘éČ­ŒŒLĄŠVS7­BŽæ d”‚ÄMcŽ“ʵ./”=„®›‡ÉČČČČtY‘‘ ”m¬X¹b|Ą“bbNZėņŠM¼ūG6y22ž€ ÆA2†¬ČČČ „kKYŽfģ œ?؄H½Õ幂Z +sĀ}<#™–(q]‰L…ÖĒ3‘‘é² ##0„i] ‡Eõ*ĻD¦;P+$.VŌęł/÷EŅh•·-™ž#J1 Õ1ŠApÄ.#ćÆČ+©ŒŒL7Š=īš¶šBe•Ėńį½…±ń5ŒŠ©uy®Ī¢ä"}<#™cÄIPŒB%B…DŅÄérLĄ!+222F…ėŗü*Įõń®20¼Įåń²e² ·pŁšb¢ė„ąDPe’k™žB FĢ0幌PĪ#E1• ‡’Ȳ ##Ói"Ä“VĒŌč1 ±Żr½AQõmžŪ|$ø[®)ć{ā‚ĢLK®ryĪlł*SöČČČČtY‘‘é4QāāÄį(Q# DiŹéˆŻŌb$Bg%¢$ŃEąd7|oaŽ “m$}ÆĪ „²QNü–‘‘‘é,² ##ÓiāÄaŒP^Ąhå„ PĪDK÷Zā'ÄW»<^Ž bk±[Æ-ć;‚56NO+syĪęł![öČČČČtŁ„"##PĢJ©ą‡l×ÖžwĒ2"¶Āuüø?!IPR%p¤Dąp©H^‰H­IĄd†:“HƒIĀa­tj F H'n”Hб“-‘åĄŠ‹ĆĻL+ēēģꬭ;@’z(Œs”¤¶õĄĢddddY‘‘ ("ōVFĒÕ¹“ö—7Øų.+ŠyƒKz`fķcµ ģĪŲ¾_ĮÖ,™G˜]5ņ€cI°Ń!#RķŒīogL ‘½§+²Vé`Vj_īk]bŃlY‘Ī~ų[ĖČČČų;BIŃZ’7•ÉČČČGV¹ž'ÖōsyN):X<5‡~”>žUkĢXõ‡’Ÿ¶*Łq@Łuś‚W‰ “˜2ÜĘģq6%¾2PoUp÷Š˜l­#V *;KOĻDBVddd’méƆ#!.ĻEč¬<6ż ĘĀC¬vQ Ķ“Žbū?lR²ź ¦žKLīė`ĪX§·øKżņŻ1|·ßuĢ’u£ 8µo„g$###ŲČ €ŒŒL@ReRńĄ/imv†UĻ}“r[ūÆlLD©øeģÆĻG’`Ż%ļžØdonė˜õžD„€écl̟m”OTą-łÕf%÷¬čÕŃś·N 1ńÄōģ˜•ŒLūŲ0Sć(DD‚…xrŌµŒ”Xxßõōō$dddd:ŠVé@£”ų£8ČåłŅ5„ *ŅćjŽį’/+Š=„A$‡˜ˆ3v:æ’?oSšč»Z>_­¢¬Ś’Š«9$Č.łjŠür‘”XĮŌos¬Ź eoYŪ%q*jīxUĒŚŻž+{ ³žśPĆkßųļļ|J €¬Ļ“½2žˆ’TÅŌv•f*h{½•‘éNd@FFĘ#į_DA¤āĆYuŽ)IUܔž²;^ۚ€ŁŽZm(,wVł9r-•ž¢āÅO5~™ćŠ?¢(½ė¼ ł² ć?x¤8Z' ĖČų‚“kW“‘‘qI¾cg»Āæ€H?Åd4‚ч³ź<§$VqĒųĮf¢ō—ÖžķEAķ6 “‘é š”€z© h…Pt“.i+#ć+d@Fę$G…5,Ō·8hĀ’‡»bł!;¢KļQcRr’—ńä•TziV½ƒ/ÖØˆ “øō4«ūĮ>bTl-?lż{ļ+5`²‰h•m—„•‘é) B$m—‘ńrŒĢIŽ€@²b"Šćģ"Ź€ž¦&WrV’2bvV+:·ā FcŌxsj½‚£ö«JH£cė\·I»KdKFFę’Ł;ļš&«¶’ž¤IŪt/(“ŠŅĮ([@A6( ˆØČPAQ_¢Ø¼¢Ln?^}Ż"¢€ "š²e2 …B Ż3mڬēū#6š”Ī$…ó»./éyĘ9ēIrž{ūT†”™¾ŻĶ¢;+0RJ”łHąG8*ÉŪÕCŖ1eĶšįÆ‹ÉōÅ,K ɘĢWė‘e0•HŪsŁŻ‚ß]L ÆĢ§3t„ŗž¹e‰©k[Ū-ä686—ńķŻ·f…@ ø”‚kƒYĮ©oŽdś²ē¢?Ł%jŌJ3śJ*˲LĮ…Bņ“E(Š•tŒ5ńöŌR”JWŽŽŻœż—*nś(en’3.‘@ 4 ”ĻĪxšWB ź „$ÓČĒ@»FÅ ŽĶ„W³Ā}õčM ²u*°“+H’$¼ü=)ÉŃaŅ»YL“‘§@”€Īq®±ĻÓyp4Ė·B{”^É ŲT5 ‚k±@ \W„łčéĒó=ĻńńŠÄs m†³Į²Œlś[h”$ĀĀ@Ł€®ä‹ jR2]’śhŖ³Ūn–%Īäjœ<@ h8ø~‘‘žÆŒģ棜ßq‹ū.‘”½V Ø4*"k—W¾{;_ĘŽR»ģDī†Įo’ąśŅQ:‡Ł~N @pPB™ęćd›“0Ręźį®Ü'„ƒ@ 8Y†%ß«/Wŗ•AÆÕ£×ź)8—R­Ä;Čc©±VżōæĮŸ]ųz浕›~ßI›x0 sķžOmP*db‚t$fUĢś#<‚k ó ŅĢ‹g2Ķ|„8e_|¤kĖØ p>Ā ®Kž<čĮÓŽw²šō&“ZJ J8Ŗ†Å‡«ÕŒ® ‘j\b·żB”ė=AmŠSĀÅ’&Ź8mŽL±|mĪG(Į5H±œM¶ł4ņEdÄFČ+‘eųĻļ*§÷Ū²™»Ų“5k¤fH÷@:ÄŁZ¬;ÅūŠ£żåš#oO=;ų1z`£†Šļ|½]›Š'³@bŻ׎”™æ}­°Ģƒ‚Rįä4\Jä<»ė·IÖsڼ™”jX‚k™Ónrå³Ö6_)Œ8e?āēneūQ%ɗœo’håĶāǚÓē_‰då[ŖźŽ½5”†…qüœŽ{^_čåäŃu‡·H ¢™ĆćåJ€Ō”ח…’»Ēµr¦“Gä¾>£äčY×,}¹Ī^,³**‰¶1¾Ł˜ƒÉ ķb,՗»“ņA!Įīc "LĶĪ£Eė. ŗłZó?KćĒ-¹ĪŸČ|ł§óéʑ$hźgß ö:ъīųI7Éz’Ķ[1É'ŽJp- b‚ŽŒĢ9ÓNņ’*¼8"÷fż×.{{ŽkéŅŹ¢“‰ņĘC ūN“x¶„Nń>ģ=^L—Ö¾\ČŌs1[ĄSÅLFh Š3©„\Ģ֓žkąŲ9„e®/Čuö’‚“©JZEŗ¦hZs’2’ó*fżÉ,v§G Ø+x«ģĖÓŠr r)r*ĮR 'NА €@Š€©Šš/”¤±¢•G徔`Ėa×.{»i¹§0~%ć5$](„¤ŌĢ”¤:Å[„Ų®­}Ųsģrģś«’¹Hz®Nń>tmķC“5>Ž ō™EŸ_ä« Ł®šŽ•ß’rźcßś™[ā:Ļ„@PW\V¶R$gŲ=njØX.ØB0éę£WžÄ({ā-9qTīĖÖĆJ“ö‹Ē:=‰Z’D§x ā}8tڲ÷`R1Ć{įķ© ”…7_üfź% Ō*‰åk21/g ōUņÄč&嚘EųļE€įĹ7÷¹Ž"œS`äLZ)]ZūŅ©„ƚĮēPR !ÜŽ3„d’ųßGm¹«o°Ķ}ņµ&¶.B­’ņs½-'O+±÷”kR…hōvŪͲ$R ®Ź•€@éņĘ`%*¢”ŻQW’1H °‡X‚ŠŒŒ ū–O!üWÄ`‚§ŻĆę±ū˜–A7Š4TĶ”¤bŅs ¤ē˜4,Œ³ĖČ̳|¶² ĒĪ–0åŽF”–™9{©Œ’R3MCU<|g#Ņs äøĒĄæNxнóCy²KT„hÜćłµE1Ź^”ÉEčŃ”‘‚Q QNP®Ūo„ 0"c@’dĄŒØ—$hHH@Œ²erQ…#ŠH<ń jى„ÅQØY ؐØćšų9%„z×V­-gw¢–ńƒC),6qöR™µż`R1CŗņõFŪ“~Ļxž—&E2ē”HkŖP“Ięh²ŽioĆģ&kמ$×|7½Œ($³\ńóĶ)u½×GĀ’d#HĘæß?fdd$ŁM>;¤skŒ³ó¤ĖHčHeHø×ē$ŖŒ'ȞČhøģē •bB¢I*Œ®Œ@p`JPH%X¬%jdIƒ,kpg Ɂ¤†”Ø\¢E%Ćl¾™Ri’łh<ø0¹¾‡†,ĆĮÓ śwr~·‡‰;Æ4Ń™^ EH’ad®-$ŹžVč -Ź>Ȳ7īüŽ«ŒkT0¢Š€Ä",Ō'ņß bH€/²ģ‹»åe8™Ś0éŖ2ę„$W€ē•.Q4Ŗė Īų.ź’~ēø8Ŕ@ p å%H ūżķhXļ˜kJ0ƒ”’·ėUž3±„9"IZdŁ_WÉJV”„®¬a-Ī • Y®Qž¼Uc=z~$3’\ˆ$#Ž9Įõ‡„¤<$А堿= ƒkF°,Ą"ÖR p9f$)(F–ƒ×WcMĶp/ÄµĢł ×(Zµ}ÆCI=y,†¦<$I¼sIŹŁ™ÜĶ n÷įU‘QH¹Hä į_ p#$ (¤L$©W[GĻg ėæ³ø˜£Ąč‚¢¤ŽN ’ČG’rÄ;G Ų IÅ(ČDĀ~mw¢+FR–X@ąŽH"I¹øR HuQXŹõˆŃ¹ĪWø’żļ—\§q¹2’”‰$iÆ~Ŗ@ ø>‘,މRW¤RīŁ ē IDAT[Q²XEvĄż‘Šż½ ŗĘbZX,<哏հāÅĀCź/%j”ĪĻŪ‘~YgyöMV°ģ W##Iه§»' R(CA&÷«@Š`Šƒ‹”Ł¬ś*éŃŽgż-’%.ŲpķHĢ—ź`(fdƒŹŪ@`‰¼æSŃ» N0 I9ø:¦X TĖļ7g+ļ®HÆgt.š|; õ©ż'/ƒ” ’š6 ‚źcŁ£ź~į@ , É%ƒ@ ØKō(¤<Ģr0ĪŹ›\RZ7żx©ŒčDl¤”–å3ńœŽu;ņ¹˜­·9op÷ŗ¶öÅ×[A^‘‘“,ælĻ##×bEnķ͐ī,_“Éč!$D{£7š9u¾”ožČ”¤ōņ:č«dDŸ`š7VģļŃ$s0©„µŪóČ×^Žqėć­ąĪ>Į“‹ńĘK­@«3säL k¶åQZę¼u³®žwµp`Ŗ­@!å€ū5FF’ri ²ūˆŻ Č`Éö.H/!źS7Rµ÷z(%V̊įÅū#ˆ ÷¤Ģ`F’ą”a¬Y܊ŲH/Ą"p.{¾’~ /µD^‘ µJĮ˜[BXõjK‚ż-/€ųf^<<¢’™Ė€.ž”źĶ4R1}\¾œĒßU}|•|æ°%lLxˆšāR3/%OŽgÕ«- ņ³Ü/ŠWÉŖW[ńäčp‚ż=Š•™i¤āßDšŻüx¼ė1äēJō&ē+ęzq ZīACCF½¢WÜG¹ ’T”¹z Ž(<‘P'Ą«j³ōīčGē–>Ly5™m‡‹¬ķ¾Jּފū†„ņņņTā"½čÖʗ'–œcƞėy¾ŽJ¶/mĖM ¾¬ß•omßųWüaż»’ ž|ųl ŗ%ų²óH#ūÓ(HÅšgO’’~y ŒnāÉ/Æ·āŽŽA¬\—ŽƒC ōą¶é'¬^€Nń>|57Ž!ŻłqKnķDŠx:’%Wā ą—£ō WE2  °#‚ĖH€d]= ($± ×’”‹,7¦¾C4u ÄFzQTb²žņµ&¾ß”‹Ze™ĆÅl=÷¼xŠÓ©¶–c½ŃŒÉ,äo»ģž°ŁV(ßzČr’ˆPK–žŲ/ŽŸÓŁ’ē.•±f[&“EŲī§aŪ”"įą`R1©™zZGyÕdŚ5Bćå@ļ@PÕÄk,#‘‡;YėAĆG’ŠAÖ8Åšu5„€”ēź‚zĮh)”޽öRi£ 9ö7‚¾ū]ŗõßÅ:3Ž^ ^y(’ĘA*|5JTMBŌx{*P\”ėhmŌr¾<(,HE¶ƒ~_üų‚õß>5ń`ɓQĪó÷Q¢ń²/ ×¼ŪJŒöCœ|T® I*é>A= #‘L#WÄż‰± ×0’T„,ūõ' Ö…ĄC e†«+[śš’Žeūa-[”+3£+3“‘k°+œ_ķŽ*„„Vwu!ÖĆC¢Xg"5³āzłķ9$žÓ]õu…;y4Õö˜AxœA}!é‘äd4.†›+2Hb!®md$I‹,Ō[!µĻ€“•g$Ą×¾y’Š0b#<™żI*}:łq1ŪĄ£‹“mjPI’%;PuÉĢ7`©ž9”)…%&>Z•ANœ#o~u©Āy±^蜘($Ął €Ö`’³ń­¦`1:‰Ls ž(DĘge³‡[g’¤R$QéW øę‘ŠRŸé}›…ÕžŽ)e„«hķmÓ®ąŽ^A„Xböż4JĢf¹BŚö±4^Õ_rϧ—ѹ•OåC愹ŽŽAųü}Ļ”t=7µõEåaūBńR+ųļ+q ė霍g¾Ž2A¾ĪUŒf‰2!@Uu>{‰¢«Ÿ&µA2ŗ¼6€[{$Y[ÆŹQ®Ī“t­fj`3PIf"żµųØŻµ’©Œ$#Ė~õr÷ęk?÷r!SĻŅ™-X泀Œ\=*‰›ŪūŃ&ŚŪŗ`ēQ-ć‡ņę“(ž:®Å,CTø'#z”ՙ𮦰jK ć«9ńlŚW@n”/O·v Ą×[ɏ[-{¤¾ŽĶØžĮ|3/žG,›}¼• čā§Z²ÉHTŸ4kä|ėyN‰Źa(U€WՍH„ ÕMŖi³,‘®õ!·“āĻÓšSˆš×┨ēµL*ŁūźēÕn«H˜@ŖŸ“ŸI¹|²æ-‹|ė垁»’šĖ”Žęć¼xšŖ"Q‚Lż(ĶB-9ūÆ“ŹW]™™ń/ŸęĮįa“jīMϾŒ2³ üėõ³l9` Wüco/|tŪ{rßma˜Ķ2—r ¼¼<•.­}(ÖY^*YłFv)Āl'żĪ#E¤’ĶēR¶ž±/ę¾ŪBéēCH€%ĒrZ//OåĢߣ†’/–1źßILJūX ŗØŠźLœŗPŹģOR9wɲžękMģŁ×N’‚ėšƒŸLąŁ›÷»z(d2õ£tŒ•ٰÆ^nŻ`zs ·ßģxoĄŠ_²*Ō=øbœ_­=«Äžw¦‘¦¬žµ÷8ÆMŠĀæ@p ‘YāĶēGZóh—#õr‰2d„šdØ‡ŌŸņżČÖ9ÆŽ@ą®Ė Į`R RŗW¶ĖbX?tŽ7±aŸÉų'«6ē²jsŻUöRĖ“Žržw*³Ų~Pu¤:9Ż’Yė{÷bgj&w:†ŗ^Ž—„Xd^ē¦ŻÓ^O±’ē EĢæ@–8å4wÜ#•Q_ÕW;Ē9ß2}½Ń)քŹ:V¦ƒ=a>U7$Õ¶ŽL‰Įƒ ­kóz ‚ŗĒd–8WP_iŖe\“œĆ-I®Ÿ‡a4»åt— 7»©5¼žƈP3ƒÜrĖÓ5Cēxē[’f‰“Bū @£j(P»ļ]a™g½yƁk)(­æņę’ģšt÷īädm(Č[āĖūüŚ§@ą ņJdīż¼ӓ@ż,¶½Ūł~kżģ1ĄĶķœļeI+ōthÜiPUo²‰śņ<„VDl؛*܁€Ō|3ŗ*T{Æs$C}.?qO@’®[$Œõ¶ź&€ś¢M”‰(Ō8W`?¶DT1™„Tæļ/•Ä»w»aȝ@ °ņĢj-‰®uĢė¦11īµ1Q 8“śūż·nf¦E“kg}=0„ŻĖŪѵµM’ĄßGY”"p}3¤›k^b)łö;4ņÕ£QUķe.É×ĪwB 44\<(@ą^HõūūŌåŚń0¦ēčŁq¤ˆķeA××[Éīåķø­‡ćōžuJ :»f“õ¹ū @t@uŠŻ‰č}@ą*\³žøe$ą:¦~Ć!7Yń« ƒ±įףz°ˆ­«—§æ>čÓŃH€ó_bfYā‚ źń’ cvA>@ ”Ų !,2ĮuŠ\ææż™”7šųiGż/!ž,}>†wæ½dŌĖŪ˜w­Īb9ŠÅŸ©#ƙ¼ą …Å&nhåĆäŪĆhķ—ZAN‘³—ŹX¶:ƒcg-Öķ.­}xį¾ć,“ĢŅ™1(’öė>1*œūn #=GĻćož«·9JLpråßrĪå{Sf²ļČnXu€$¤@ą2\cōvÓ @ Ø?īh@鄤,9…F}•ōźx9ĖXĒx Ķ©‰iźIūøĖyćūtöĒĒKAa±‰¦”jV̊ÅŪSĮ;ߦ3ļ³4V®Ļ"ŲσO_ŒÅĖÓ²tūk”“mįZ%QŖ7óė®|6žUĄįÓ%üŗ+æŽ==Ū™ˆmźšŲ±,»ķ I¦EPuB€ąśĀM=@P4 13š#æ’U’KąīcZŗ¶¾,ØvŠ÷į`R Žžā5ģ”–™yźķŠJL6÷ŚšN¢Ć=9‘b+ąėĢ,_“‰ŸFÉć÷„³ł@!kž—Wļó?°ī«¶WG @T@)>UÜ,×#Ā ®K¤GåQ’”†»µ“lī…Æ·ÅåŠ1^Ć”ÓÅdńT+8|ŗµJ"Š×ƒč&žtmķCrZ)9–„ßшį=ƒXųŸ4Žœ)”“ĢL™AF’`ó µŸx0įV=MC\—±ĶQų‡$Ó2D(@PBpyyyģŪ·Ļįńššpbccńö¾\Ńņāŋ$&&:¼&**Šųųx‡Ē“’’8vģ™™™H’Dpp0]ŗt!::Śę¼æžś‹‚‚‚*ĶćĘoÄß’ņfĘĀĀBöķŪĒ… (--ÅĒLJf͚ѣGT*ĒÕVsrrŲ±cYYY(•Jš6mŹĶ7ߌż:@jj*$##“ÉD`` ķŚµ#!”¢0tźŌ)Ο?Oß¾}+GUHMMåĉtķŚ•ĄĄ@Ģf3›6m E‹ÄĘĘŚ½.))‰””ė“Z-»vķ">>žØØ(vīÜIqqՄ”ž={Ś|7u‡§ ž¾GϳK/§’ōšö ¼Cc”ž—Ćl$I"8.˜’ģLśź[į-ū|ÉĢ3r6­ŌjÉæ©§cœ]Ūų°ėļš°„ mŚWĄŖĶ¹6÷‰°ŸņŅŁDüķ=q%Ņżķ¶· )A­Y䁠2„ą:Ä­·ŽZé9>>>,X°€'Ÿ|€ß’I“&UzM×®]Yµj͚5³¶Ėøqćh޼9’$‘ĶüĮģŁ³4h‰‰‰4jŌØ¶Q•‰'))‰×_—^z©Ś×’ż÷”––Z’NJJbÜøq<žųć<šĄ6ēFDDŌvø‚«0cT§ŅTč#Āńšv,8›ō5 yŁ“ØEķ!qk·ę®H³¶:]Āó›")$žJ¼ģXµ%—7§Eńć¢V$]Šį””håŃ$c2ÉÖ ÅöŠdœ*ęé1įÜŅĶ]©™©oœ£“†cæ’)Cõtˆqķ^„=iö­’]š:q$@Š0 €‰ŽŽ¦K—.Ś»vķJ\\;wę÷ß·QZ¶li÷š=z°eĖ6nÜhm[µjēĪćÓO?eņäÉ6ēŃ®];‚ƒƒyä‘GXµjcƌ”uėÖ6焦¦–°${żšL&Ž~ūm:uźÄĻ?’Œ‡ĒåÆPPPM›6„’žÄÅűhŃ"«––ĘŠ+9r$üq…kz÷īMĖ–-łąƒ¬ Ąž={Ų¶m3gĪdŃ¢EęOėÖ­éßæ?K—.­‘ ^Sś÷ļO»vķX“h'N¬Zu5ڶmkówyØRDD„Żē.Ø_$„DóĀ8Æu,ü—ęź(+ŖzuŁ’odĮŹ4¼=üļąeõĻ}…x{*(֙Č×^Ŗ×ļĢ'-SOßĪž„zPfŁw"›5ŪņŽ+ˆōKźĶ3Ėxó«KäŁ äæ–ĢˆŽĮD…{ā„–0×QqµīmŒŒąŗæåüuɾī[F¤Ķ>£†Ī°aĆzżżż‰‰‰aņäÉ 6 €’’Ś·oļš~!!!ÜvŪm̘1???›c6ląĆ?dß¾}ddd`0&!!±cĒņšĆ[ß Ó§O租~ŖŅ¾üņKnŗé&Nœ8Į[o½ÅÖ­[IMM„øø¢¢¢6lĻ>ū¬]ļŸžÉ{ļ½Ē®]»ČŹŹĀĖĖ‹ęĶ›3lŲ0f̘QĮPd2™X¾|9_ż5‰‰‰dgg£T* ꦛnāŃGå¶Ūn³¹fšąĮųśśņĆ?Ti^•qė­·’œœ\”ŻĒĒ‡ŠŠPŗtéĀSO=ec:}ś4ƒ¾ź½?łä ĄxóĶ7­ĻS”PLŪ¶m¹÷Ž{yšĮQ(•ŽÉGåĉÜsĻ=ĻiÖ¬wß}7S§Nµ‘dYę‹/¾ąóĻ?ēšįĆdggŪ„,Ož<Łę¾o½õ|š³gĻęžūļ·Ū—N§ć–[nA§ÓńĒT„y\ĄMhŪ¶-J„’³gĻVłšØØ(¶lŁ‚Į`@„R±uėV<<<ø÷Ž{^3fĢkH˘1cŖ=ĪS§N‘‘‘ĮōéÓm~Č’Ä×חįƇóŁgŸ”ÕjńõõeėÖ­Fī»ļ>»×xzzŅ£GV­Z…ÉdB©T²uėV‡×ōė׏ššp¶lŁāT,‹QBBÓ§OgÕŖUNķ[Pwe‰w÷4ē¼Ö~JI}±ĢĬZõóßß²+“]ĢÖ³|M¦³įš™Ÿ©b÷ĻūœO/³{}±ĪĢ—æWģÆ64’yq¼…‹«ęf«IÉ·æ⦈ėלŸššJQQwŻuW…cEEElŲ°U«VńĶ7ß0zōhĢf3ÉÉÉ“k׎›o¾Łę|Y–9räsēĪe×®]üöŪoÖcĖ–-ćŃG„Q£FŒ1‚ččh ¹¹¹üńĒ<öŲc¬]»–5kÖ T*iŪ¶­—Łl6³|łrZµjEß¾}mś-ÖöļßOæ~ż0 Œ1‚ńćĒ[½Ģżõ‹/ę믿fēĪV/7Ą§Ÿ~Ź”)SˆŒŒdŌØQ4mŚ”¢¢"8Ąo¼Į·ß~ĖīŻ»iÜø±õš‰'ņÕW_Ѷm[&L˜`URRRX»v-C‡eŃ¢E̜9ÓęY’s?\møpįZ­ÖĘ[~JJ K–,aŊģܹ“–-[–(€äädŗwļN‡Ž;,, €#GŽŠ«W/|}}5jQQQH’DNNėׯēį‡f’žż|ōŃG€ÅĄųϰÓĢĢLVÆ^MÆ^½*ģ»S(”––’œœLŸ>}*F#»vķāÉ'Ÿäüłó¼ńĘÖcO>ł$ļ½÷qqqŒ3†¦M›ƒįśõė5j3fĢąõ×_ąŃG壏>ā駟fšąĮ6Ÿ}9sēĪeĒŽ,_¾\’WA(nBII &“ÉŖW…ÄÄDbcc­Öć³gĻn7&½œ€€üüüHOOÆŃ8Ė­W³xGFFb2™ČŹŹĀ××ןYˆ‹‹sxĶ|ĄĀ… ‘žp®N_5OmˆŽŽfęĢ™¼ņŹ+üöŪoU²Č܏’jĀ‘ _‡Ē :#‡20]—ńĘÕųkd^TG Æė7×ī¾čXšźÖōśUĄ²&-]ŗŌī±ĢĢLX²d £G¶¶0€wŽyĒī5&Ląæ’ż/gΜ!66­VĖ3Ļ?üš£GęĮ“Łf4Y¾|9={öt8Ögžy°$©h×®]…ć6l`šąĮĢ›7>ų€‚‚žzź):wīĢÖ­[+$•ųå—_>|8ƽöo½õ›7o櫯¾āĮdٲeŽæeee :”ٳg3aĀ„z ĒlŃ¢…Ćg±sēNś÷ļĻ3Ļ<ĆĻ?’lsläČ‘Ģ˜1ćŖ÷÷Żw1ģ޽»ĀūtįĀ… :”åĖ—³hŃ"˜;w®Ķ9»vķbõźÕŒ7Ž©S§:ģgĀ„ L™2„B»Éd¢[·n,]ŗ”Å‹£P(8räļæ’>wß}7_żu…„&“‰Ń£Góę›o2iŅ$Šh4|śé§ōļߟiÓ¦ńŻwߣ\sšąAŽxć  T! BPQĢM(· _©ĶļßæŸ7Śü·~żz¦L™Ā¾}ūl~ØEEEUŹćėėK~~~ĘYTdIƒxµ~Ź­#å† ­};"$$„˜˜ė"¬Õj‘$©R…ĄĻĻÆĘó©-Ļ=÷-Z“ąÉ'ŸDÆw]ETAĶųķL0›Ļ9¶™ŹLdNǤwmĘWā©‚W*%ŗ±ė…€=©…N€Ę¾zš”Ś=&€FѳgON:Uåkś÷ļ`õLoŚ“ ­VĖ‹/¾hWų˜5k†ü±FćĢĻĻē’ū'N“+üƒ%D„_æ~6}¬_æ­VĖ /¼`7£Üķ·ßN\\Ū¶m³¶­Y³I’Xøp”]曧§'³gĻFÆ×³vķŚͧ¶ōčуńćdznŻŗ*gģ»’¤¤$Ś“icט&I Ąh4V+”:(•Jśöķ‹V«%+ĖāIżłēŸ‘e™łóēŪĶÖ§T*™;w.²,[÷9ōéӇ©S§ņż÷ßŪ„–™L&¦L™‚··7Ÿ|ņ‰Õ(pŒš8‘•+WŚĶøsžüy6nÜHÓ¦M+„»8Ņī  ,° ÷)ŗŽŽŽUNAy%åŁ{®ÖO¹‚ ÕZ66–g Ŗ,Õē• ”JåU½"µ™Omńööfɒ%Üyē,Y²ÄĘM,poŽełšõ±Š.är$³™Œ#uׯšļ”„¹“Ji殏ó^œ+°oč&6’^___ ģfT³Głś]Jqüųq€J÷)yyyŃŖU+’’’j4ʓ'Ob2™l2»Ł£cĒŽüłēŸįēēgM›}ć7:¼fęĢ™V,󉌌¬4DĒŽj<Ÿŗ OŸ>¬X±‚żū÷[•²źĄÉ“'ŹO<ń=ōP…½u‰V«E„RYū8~ü8¦BČŠ?IHH@„RUxö‹-bķŚµ<öŲcōė׏€€ŽyēöīŻĖĒLóęĶėm×Bp"ĒŽćüłóŚ5jă>Č /¼PaS“½,@………|ųį‡Ģš5‹ØØ(«ąļļOJJŹUĒQZZЧ§żzW£üĒk/żē•}Vė}¹G :VrŒF#z½µZ]i_WóŌ'#FŒą¶ŪncžüłŒ?žČČH—EP5²JŌ|šW$&³}+‘Z)ólĻV—™X»ūś\&=Õ0÷Rz$øOõį?Ī:Nė{cdͬ£× f³™ƒҬY³*YGÓŅŅųä“OHHH° ĮŁŁ–}%WżüüHKK«ōG” čWė£ü’ŸŸŸŸŸÕĖ\YÜ÷C=T”Æ«Åņūłł!I’˼̀5ÕwFF†M{nn®ĆĶŗVAx̘1¬Y³†;3{ļ½—-ZEćʍńššĄÓÓ³Ę2AU8tč«V­bĈh4–½VYYYÖgėI’ģzų}||ųōÓO8p 3gĪdęĢ™Ģž=›ššĆ×Ū<®5®Ļ7›‹X¼xq…WĆQ ^½zĘņåĖ­ @@@€ÕbSÅÅÅ5Ī_īö½Z?åĒĖū)’e–ś/¾ų‚5kÖšŽ{ļŃøqc›¾*ÆV«ułfŸwŽy‡öķŪ3cĘ ¾žśk—ŽEP9:ƒ‚7w6G«·æü¼>. IDAT)$™i7^ UX Ļ™Æ6ÕON}wÅĻ[fŃ÷±ü”ģJ³vŅ< ”hžCqqq…¢“²,“Ķ_|Abb"Ļ=÷œĶń•+WņĖ/æŲ“•••qéŅ%zõźÅņåĖ­ ®4ģ8ĀĻĻÆĘį*Uķ£<œ“  €f͚QTT„$IÕņ2WÅx¤T*ńöö®ń|ź‚ņ9•+9å¼śź«¼śź«vƉŽŽ¶†ōŒ7޳gĻņÖ[o±nŻ:ė9J„’ČČHŗuėĘSO=EĻž=k5ĪY³fUČŲW\\LFFćʍćż÷ß·¶WÕpWīµŗ’žżūóČ#°téR¶oߎ$I,_¾\„žT”4PT*­ZµāŅ„KÖ¶ČČHrrrČĶĶu(0_¼x‘¼¼uɬY³ųüóĻ™6mZ…ŖĄ=Ųv!=•d‘¹¹Y>Cć*¦Ļ¼w V‘&ę~įE^ѵkaźo℉eū»—š°łœ}£†—‡™‘® Ļp'Zµjece‹šNóęĶķ†ÕōģŁ³‚Õ,x¹exōčŃH’d —Ńjµ„††:‡N§«4įCeTÕĖ\.—Ļ)88Y–ŃétÖ0“+ٵk.\`ŌØQÖ¾®¶ńÕd2QVVVćłŌyy÷Źp„:XēR$I"22²B˜źóĻ?O||<ļ½÷^­€»ļ¾Ūn ĢĢLZµjŬY³ųż÷߁ŖG,”””8|ö~~~ÜqǼ÷Ž{L˜0”Ęć¾^ @F£ŃŲÄā6Œ¾}ū2gĪNœ8Į!C¬iĖ.^¼ČźÕ«łńĒéßæ?¬qæÆ½ö£F¢k×®L™2…: R©(--eļŽ½|šĮčõzfĻžm½&44”ēž{ŽyóęqóĶ73iŅ$Z“hĮ` %%…O>ł„““4›Q›6m˜’üs»Ē#""ˆÆrńÆźŅØQ#:uźdŻD–g_\\l­d­VKAAA„ó!?5G( ˜°°0rss1xxx P(X³f ³gĻę‹/¾Ø‹ēO>Éüłókõ£¹ūī»łé§Ÿxłå—yį…l2J(•JzōčĮĀ… +XķēĢ™Chh(K–,±Vū-'66–•+WVŠā?śč#Z“hĮG}T!“F£Ńpļ½÷²xńb»ŸéÓ§;œĆ·ß~[ē ĄčŃ£łų揳óĻ?ėüŽ‚šc–%–ķ‹pBämäéī)ؕ•[¾ȼóX)Ÿż¦ęĖ?TŻgl‰“ya\bÜw2æq¼Ø žS_” ÕåÖöīŻ»–ŽŽ¼²‡āĢ™3Œ;¶F}¶lŁ’ąą`~žłg‡YÕt:æžś+Żŗu³ īåćłöŪoyńÅ+\c08räˆM!«īŻ»óŻwßńēŸ:TœŹSt÷čŃ£Fó© ¾’ž{üżż+„×T‡ķŪ·#˲ŻwæŁl&##£B‘Æŗ$44”#GŽX’īŽ½;}ōk×®uX”ōĒÄl6»ōŁ_ĖĄ ōźÕ‹ÜÜÜjmNŗ÷Ž{1bD„™>žųcŽyē›ų8Ž~ūmŽ|óMΟ?o jÜøq•²Ó4mŚ”ÜÜÜ«nιżöŪ¹żöŪÉĪĪ&==²²2¼½½‰ŽŽvč~•$‰'žx‚'žx‚K—.‘™™‰Ńh¤iÓ¦4ibß2«R©˜5k³fĶāüłóäää`6› "**Ź®ÕfĮ‚W­ \ÕĻbҤIŒ3Ęś9xzz’››[iʄõė×[=3åįLķŚµ#77×aż„¶mŪVz\P;~I ådŽ£ļ%<Ņ%• ļŖ„ūT*į””zw5²ä5{O6Lo€ŚCfü-ĘßbDķį~!?åd•ØŁ]Éę߁:'čś”<®¾÷ß?ļæ’>·Žz«ÕŸŸĻ7ß|ƬY³hŪ¶m…}fF£Ńšcź$¦°w/½^OJJ ļæ’>[·neęĢ™RxźtŗJĒ Ńhšōōäž{īįŁgŸå‘GįŁgŸ%**ŹśŁž9s†E‹‘‘‘QÆi¬U*•MĢ’ØQ£˜5kS§NÅd21lŲ0›šÆU«VńŌSOѬY3‡ūµC(µ --§Ÿ~ŗŅsžyęnŗé¦jg©Q«Õ•¦¾ĖŪ‘°­T*iŃ¢Eµ7Å(Šj544“ŅXPG4iŅÄ”ŠļˆęĶ›W)æÆ··÷Ué£GVØvx% , >>¾‚°µēc/„šR©¬ōŗ«Ԝ¬b5«O8žŽĖ&!“śu$š52ó棄lŲēĮGkŌä6WtOÜ­'"ŌżCgÖ%…8L×zK‹\»ķ‚ŗ”ܐ——g}—|óĶ7Œ3†gžy†gžyŌjµU å›o¾©•‡õ„—^"++‹?ž˜+Vąéé‰F£A«Õb0šōōäå—_¶©ƒ#I«V­bäȑL›6iÓ¦įēē‡N§³nJ~üńĒmbŌCBBX»v-ćĒēī»ļ,±éf³ŁZō²}ūö|÷Żw6ąīŻ»×a²  C•ē»oß>‡÷R(<üšĆĢ›7ÆĀ±Ł³gŪ„Ś^ÉŅ„Kyųį‡yź©§8vģĖ—/ē“O>,Ę©¢¢"L&’$1qāD¦M›Vå1W—ėē§R©šööfŻŗuŒ3†ńćĒ—÷8”g;Š‹‹ć›o¾q(ēj‡PjAHHČU5ęś3ŌžØØØ«~v屄‚†Ķ—ĒĀ1šķ‡žDś—qw›,»ĒŖ‚$Į ®Fśw2±iæ’’ū]EZ¶ūXļŅŹĢC·•Ń6Śż€Ā2¶ž·ÆxéŁ\äž/ē„—^rĒnOOO–.]ź°Ś.Ą€Xŗt©pŚøqc6oŽĢ”C‡Ų±cYYYFiÓ¦ żū÷ÆŌƒ¬P(Xŗt)­ZµrxŽR©äƒ>ąłēŸgóęĶ\øp­VK`` -Z“ oß¾v‹wEFF²k×.žśė/öģŁCNN`‰q0`€Ż÷q=8qāŪ·oēŠ”Cäää R© „S§NōčŃ£BŲĢ+ƼR©å½:ƒęĪk·Ę€Z­&$$„o¼Ńźe)§I“&,]ŗōŖ÷īŻ»7`QH>ūģ3^~łe¶nŻJjj*………NĻž=³téRzõźUéńņžģqß}÷Ѿ}{t:Õ“Ѿ}{Ž9ĀĪ;Ł·o¹¹¹( ‚ƒƒéŠ”½{÷¾ź³3f mŪ¶JB 2Ó·»ļW!„u?¬?Ī6㳃c܂¼%¾¼Æņb AC$ÆDęŽĻķWHŻw-ƒŻ/~Z–½©¾WÉdz}xu[“Żc 3sū%é_V'}Lšū_*¾ŚäĮłL÷P<”Š»½‰‰·ź‰‹h‚9ß%6āēSavm—a7cSM$-µĖ$”®õaĘū’F-ńƤš½cvļŽm·€d9”””5Ŗ+Ø_öīŻ[i†”   ‘-ĪĶxfµ–Ä ū{”ž¼é ݚÖOrdŁqUśśBxĮ5‰,ƗG/Ŗ#ŪdÕ©š R°ī†u7p2UÉo{”lÜļA¾ÖłįAŃįf†t3rŪF‚üÜĪĪsUt…ĆŹæ•™~Q×GųOrr2‡rx<::Z(nHJJJ…¢l’$""B(—"@pM²ķB )łöCūź—SÆż·Š4Ń*ŅÄæī0°ūø‚='<8xZɹŒśQ|˜łóē3dȇeÄĶŚµkė­”ŗ źd—Ø8˜n’;‘VLT`©“G$Øßoä0mė­1y„hœ»ö ĮµˆšŌGŽaėÖ­äääĻØQ£šššąĖ/æ¤cĒŽüžūļ”––2tčPk9ļääd6nÜČŋi޼9cĒŽ­ĖöĆ?dóęĶ=z”‹/2cĘ āćć #;;›M›6Ģž={čŽ½;]ŗtį믿&??Ÿ#FŠŗuk<ȶmŪČĪĪ&!!‘#GڵęļßæŸ?žųƒ‚‚:vģČ]wŻe-€rüųq~żõW¼¼¼øóĪ;­E¹>Ģŗuė0 $$$0bÄ<<Ć¢ź›'N°xńbėß6ląĒtź&OžŒVė>æĻü‘)S¦pųšaW€ŌŌTžzź)WCp !<uĄŗuė˜2e O<ń£F²ZĒĮR鯼BŽįÇٿ?Œ5ЧŸ~°T³kŚ“)z½µZm½öŽ{ļ劔CÄĒĒ[…䒐`-ž‘‘AQQ‘õ¼ļ撞””¾żö[^xį&MšĄĄéßææĶ‚_~žĢ™3­×÷źÕĖ*̼ūī»4iŅ€7rśōiüüü¬–~???Ž’}ė5o½õ–µĀąÖ­[9qā[¶lį‘GaźŌ©Ü~ūķLž<€5k֐’’bõ:dffņŪoæŁÄÕ·mŪ–ĮƒSRRĀĆ?̱cĒ bįĀ…ÖsöģŁcĶĮüōÓO3cƌ Ļī×_eųšįÖccĒŽ„Y³fÓ¦M† BTT`)Ęsųša233鎽»µŠšØQ£8ž¼µlüōéә8q¢õóŲ±c‡š8‘R£‚3yŽvõn–ĀI™Õē`†ŸcåĶŪ ¼7Ąłóē9{ö,^^^tźŌ OOOņóóŃjµ˜L&’’’ˆ„E‹ÖkRSS9}ś4jµš.]ŗąéi»9žĀ… lß¾uėÖ1pą@bcc¹ė®»0-­9BLL  iÓ¦ÄÄÄpīÜ9Īž=KĒŽ­U‚F#Ē'##ƒČČH‡ŽNǁ())!&&ʦ:oYYŪ·oG­VÓ”CėXu:{öģA–ebcciÖ¬™ulqqqģŻ»„Rɍ7Žh}wpäČJKKIHH°©ģžœœLJJ >>>téŅ„‚7üܹs¬]»–įƇ[­’:Ž'NŸŸOtt“õ;vŒf͚qčŠ!Ś·oO` ­+??ŸćĒ£ÓéčŌ©“õyÉ²ĢžżūÉĖĖ#<<ÜĘӝžžĪɓ'1›Ķtīܣꞙ™™$&&ҤI±ßLP+„Päēēv¹Z„J„B©TZćōĖĆCĄb½Öėõdgg³zõj8`=@bb¢5wšäɓ™5kV„}’3dČĆĆoļĖĀR©D–e²³³y÷ŻwłņĖ/ĖĀćļ_±*eVV–Ķ"ĮG}dż;4ōrZE///ŒF# …‚… ņā‹/b0P©T6óµ7÷¬¬,.WdÖh4|żõה••‘››Ėm·Żf=VPP`Ø‘ŸŸoÓ@£F¬eąĖ='W’Ķŗuė8~üøµĶ×חāābņóóyžłēQ«Õ£Óéh×®]…gšÅ_TśŒĪ#1Ė£Ł~ųOūFīc]Ųb0I|~ø’¢m ™Ø”×·ņ6oŽ<¾żö[śõėGNN‡b×®]lŚ“‰™3gŅŗuk¢¢¢X·nóęĶcüųń,X°€U«VŃ»woŅÓÓ9|ų0{öģ±Ł7µqćFžūß’’””ÄkÆ½Ę³Ļ>ĖīŻ»ÉĢĢdīܹ 4ˆīŻ»Į† čܹ3ƒŠŠPīæ’~ž÷æ’N=ˆ%""‚;v0`Ą-Zd3‡ÜÜ\zōčA·nŻhÜø17ndĀ„ <ū쳌?ž6mڐ’’BFF;wī$//>}śpĖ-· ŃhŲ“iÓ§OgģŲ± 2„öķŪKrr2ÅÅÅlٲ…3gĪ0hŠ ś÷ļææ?S§NeöģŁL˜0©S§räČŗté¹sēČČČ`ūöķ(—"~łå¶oßŽÆÆ/ŁŁŁ,X°€nŻŗqÓM7ʶmۘ8q"Ó§OgŌØQØÕj:uźÄK/½d#¬oŪ¶ūī»Įƒ0iŅ$¾śź+n¾łfī¾ūn¼¼¼ˆŠŠāōéÓšé§Ÿņ믿2mŚ4 „,Ė<šĄüšĆųūū“œœĢ„ hŻŗ5›7oę®»ībΜ9õłµ\Ć šóó£øøŲś·,Ė”••UĖčļļĻ}÷ŻĒæ’żokŪ¶mŪHHH`ļŽ½€E€¬ üżżł÷æ’mU,L&;wī¬p^`` Ķ<“Z-o¼ńƼņŠĆ{/_¾œZšŻ»wŪXāķqe?²,óÜsĻńśėÆÓØQ#6lŲ`=–’’b Æ©l~%%%6mZ­¶Ā~ {׍;ÖĘ˱cĒ‚‚‚xå•Wųꫯ¬–ņĻ鏱ƒ%CŅc=Vi_ēp2ĒĒn»Fe&&HēäŃŖŹŖČ*VŪ=Ö, Œž‘łN‘ū±lŁ2Ž;f5ŽL›6Ÿ~ś FCLL ?’ü3`ń“¾łę’³wßQQ\oĒæ»“„w¤*bĆ *ŠŠ"Xc‹æ˜X¢1–˜cL,I¬+{ohģM,±×;v¤ˆ,½ī²ļ¼LXYP±ŽĻ99vīܹ³Äݹķy¦Ń½{wĀĆùzõŖ40Ō§O"##iß¾½Toß¾}©T©S§Neżśõ@žēx¼¼<.\ˆ‘‘‘Œ;–?’ü€AƒIʵk×fŃ¢E@žzõŠ+2yņdd²:äk×®%$$„©S§C»vķ¤ļŸž___ź×ÆĻåĖ—‘ĖåŒ5Š>}śH÷·hŃ"ŗvķŠF£!,,LŚ[V«V-¢££Y¼x1C† ‘–ĢōģŁ“ļ¾ūŽąą`"##¹zõŖŌ®ęĶ›söģY­µõƒęįƇTØP~żś±téRŚ·oό3€üA'ooo¾ųā .\H:uŠüĶęĢ™ĆĀ… yļ½÷€üČu+V¬ĄßßŸŹ•+óÓO?Ie ff͚Exxø”ŻyéŅ„lٲ…^½z”§§Ē®]»ŠÓÓ#!!???Ńž5Ńxčßæ?X[[³k×®§†člŌØ:u¢I“&øøøpłņeFŒĮ•+W“–˜ššrźŌ)qwwīö5mŚ”™3gR¾|y©}»vķ¢aƆZåš4i"}˜š››³zõjn޼YbŻęęęDEEqūömņņņ C­.yn`` ƒ¦nŻŗŲŁŁ±gĻi&¤Zµj̚5‹Ö­[£R©ųģ³Ļ>|x‰÷]±bE¢¢¢Ųŗu+5jŌąĘ=z”E‹±wļŽbĻkŲ°!“&M¢E‹”-[–7n0pą@nÜø¹¹9gĻžÅŅŅ’ū÷ļ³qćF† FŻŗu:t(ū÷ļĒĆƃ+W®šėÆæźÜS!¼|Ń)ŗ"«Ų¦£'·G_WRŒŲUBŲÖź±ČJ'yņC­V£R©“fn=<}:#FŒ@.—ÓµkWŚ“iS¤­ĪĪĪ҈±±1„……Ž‹‹ «WÆĘĀĀ‚š5kJūžT¾|yęĪĖ’%KˆÅÅÅ…Ķ›7#“ɘ;w.“'OfńāÅøŗŗņÅ_`oo££#Ė—/gŃ¢EÄĘĘāģģ̦M›ĖåŌ­[WėZ/3‚†/>Cwņ/7 ńEł:ŅK(t‡_ IDAT.8»l«žK25ÄŅ-är¹ÖH: -¹Šƒü%—eŹ”‘>!»™™W®\!55õ…Ķ2D†+‡ü@į%©’Yżäъ+¤ežŗīcžüłddd°uėVŒłóĻ?™5k–t\×9O^'##ƒ]»vįķķ§§§Ö{’žž^ģ2ŃFFFE–sj4×.L”P0aĀiK„R”V«¹tésēĪeß¾}R‡Ŗ ƒńdŪļ߿ϭ[·prrzźõįyˆĄ Ņ„KQ|žœž+¼‘·E‹“hŃā©u;::j}`l@“–ē<ŖlÜøqŅĻ={ö|źZz™LFæ~żčׯ_‘c…Æh-]*˜Ī}Ņ/æü¢õ{įø;wÖ-*ąąąPdŻØ.¾¾¾ŅT1€··7æžśk‘r=zō(±ž¦M›JS­…UÆ^]kma5Ņ]*0xš`­ßŪµkWāµ…/-[w¢:;žõōĒkn<Ö½TĻŲ īÆaҶWA&“įččČļæ’N“&MČČČ`ēĪŒ;–äädēD‹ŠŠĀĻĻÜÜ\zõźÅ AƒŠ„C644äŃ£Gäååi ō<+–/_Īȑ#±°°ąīŻ»4i҄۷ok•óööfΜ9ōéÓ…BĮüĮ¼yóJünŹĢĢÄŁŁcccņņņŲ¶mŪSsŅx{{³aĆ‚‚‚ŠÓÓcĖ–-DDDжm[bccIHH R„JdffҲeK–,YR$Üta5kÖdņäÉ 8"##„ČO{_öīŻĖȑ#‘ĖåüņĖ/ܾ}›=z`cc#u<}X²d fff4mŚTŠTøm?3l``ĄG}ÄåĖ—„ ĖnnnĢ›7###ęĶ›Gæ~żxōč …‚=zč|ų·¶¶–fļ›7oĪ”C‡ØWÆjµĀĀĀpuuՙS૯¾bųšįx{{£V«©R„ ,ĄĘʆ*UŖąé鉅…ÕŖUĆ×חœœʍǰaĆØ^½:yyyx{{³pįB(ž¼Ax²ųŲ£ÆŻĀX¹,šüÉį+ņ¶KĪW+ņŗµ±ŒÕ½ŠFÅ„72CC÷):}x’Ź6Ź—Ü¢§Óhh°{zA>ś­ŖĪ,²żąļŖ{¤Tx5fŸtćäCݟ»V™|xū„…m•ÉҐńß6Ǧ™2b_CĒL elź+¾cįu6|K—ćtļaZļ>>\øpˆˆ’““)_¾<½{÷ĘŅŅ’ōōtÖ¬YĆĶ›7Q(QÆ^½bŪ~šąA"""øté?żōĮĮĮTÆ^­[·rīÜ9rss©]»6|šA‘ ]ÖÖÖRø²ššpüüüˆˆˆ 44”Zµjaii‰££#„……ń÷ßó믿R«V­"цlmm„gsēĪÅĻĻ­[·b``@÷īŻ©\¹2‡fēĪh4¼¼¼čŅ„ r¹œ2eŹ`ii ĄÕ«WŁ“i™™™ZaDÕj5›6māĀ… h4unŠS©TlŲ°‹/"—ĖiŚ“)Ķ›7ņg5V­ZEJJ nnnōģŁ[[[ņņņX·nēϟG£ŃŠØQ#BBB¤:ūķ7žüóOčŪ·ļSCĻ ĻÆ¢m&ēćĢ‹¼~K© W-{ē³É¾j;nŚq­˜Ø?2üÆv4 }±aūMµbÅ zōčńÆ" érńāEhÖ¬Y±enß¾Ķŋµ’›gß¾}8;;S½zõēnKvv6Ė–-£_æ~E6żFEEK@@Ąs×ū"ģŁ³ŠßT/O3/ĄÕ«Wéܹ3)))4mŚ”‹/ņÉ'ŸłYżĘŽK•*U°¶¶¦M›6}śpįĀ6lˆ»»;:tąśõėÜŗu‹ÜŻŻ āĪ;RŅpģŲ1ØX±"Ż»wēüłóŶŻÖÖWWWŒńššĄĢ̌%K–0uźTjŌØAŻŗu™?¾ń °Ó§O³}ūv ?č¤I“šõõÅŃё֭[£T*‰‰‰aĮ‚čééįįၱ±1...:CØ:tˆČČH ?„iXXuėÖÅŅŅ’÷Ž{¬¬,žüóOFŽIƒ  dƆ ŅҦŋsļŽ=hÕŖ...HŁ&MšÄš5kØWÆ>>>Œ9’;wiĖøqćŲ¼y3 4ĄĖĖ‹”C‡‰J„¢eĖ–TŖT‰   d2™jtҤI¬\¹’† Ą?üĄš5k€ü/²‚æĖ;w }ś’XĀs«j›®óuUžœæāĶ^rk„Āī&)Ų\BԟÖSĶ^÷ßOx1īßæOß¾}K­ž‘#G‰—ł³ ™čŸĒŻ»w¹téR‰e=z¤•L¬K—.$$$č,{ńāEīßæ’Üķ€ü¼ ū÷ļׂōōéÓO][šęĪĖ­[·^Łõ…7“˜xAź×ÆĻčŃ£üa…pēĶ›GµjՈ%33S+7Ą©S§8räķŚµćĉXXXH‡‡&66Vmø{÷.{öģA.—Ó³gO)Cą{ļ½'åŲ»w/wļŽ•Ā¤ÅĒdzk×.­ü…ÕŖU •Jž}ū¤ėīŲ±ƒļæ’^u)[¶,_}õC† )ń=˜:uŖ”šd÷īŻ\½zUŹiddDhh(óēϧE‹ŅLFq4’`ćĘÜ½{—Ū·oćķķMPPśśśųłłńčŃ#­s÷ļßOpp°ōžxzzJY7nÜČŽ½{„PvŁŁŁģ޽»H²±7rāÄ ¬¬¬HKKc÷īŻŌÆ_Ÿššpš7oNNN+Vdśōé@ž’Ź•+„™ +++¢¢¢€üw“'O 88XŒŌ”’ņ6™źiČQM˜³÷–-µR_A«Užœg]Qit'2r1ϦSÕų—ÜŖ7ĖęĶ›ńņņ"22###š4iB¹råø~ż:‰‰‰ÄÄÄ`hhHpp0ēĪćüłóØT*źŌ©ƒ··7ēĪcĒŽüńĒ„‡‡ÓØQ#ŖV­ŹÅ‹9{ö,999ZłU²³³Ł¶mŃŃŃ888ŠŗukiÖņĢ™3\øp¼¼<źŌ©ƒ——W±ķ¾|ł2»wļęčŃ£„‡‡S·n]¼½½¹rå §OŸ&==///ź×Æ_äÜ*UŖH!N×®]K@@{÷īE&“‚½½=eĖ–„Q£F(•J6lŲĄ‘#G¤øžAAAZõÕ­[ggg233ٽ{7*TąčŃ£ŲŲŲšžūļKߛ'NœąųńćXYYŃ A*UŖ„™™mŚ“‘’Æżõ×_?~KKK­Œ¼™™™8p€Ū·ockkKpp°V2Š)))8p€ąččHpp°”8ķŲ±cœ9sSSSź×Æ/%•LJJbĒŽ$$$P¶lYZ·n-“œœĢŖU«ČŹŹ¢Y³fZ’A1š‚Īkhhˆ¾¾¾“œ„ąrr²ō@YĄÖ֖ÄÄÄ"õeeeahhØ5ÕXP6!!A+³žžž”IW„RIb%Õ_’””­å)¶¶¶(•OYųŽ tŽ=+™L&=ü®Æ]»väääP§NjÕŖE÷īŻ‹Ü_bb¢V\ģĀ›ÄÄDzōč!%a[“h‘Ī„8J„’ŠŠP©Ü²e˰²²"//°°0üüüfųšįR:ų'’.|ōŃGZ׊•ÕSx1ōej–ѝ9öņ#S¤čĪ,”®å‹}ļõåy ō»\,ż)ÉĉéŁ³'ÜæŸ ˱cĒ b’žżdee±iÓ&>üšC”J%éééōźÕ‹-[¶••EJJ jµ„RIvv6;vģ sēĪ$$$™™É’ž÷?iÖ²yóęģßæccc.^¼Hżśõ„e©}ūö%))‰ŌŌTzōč!Ķė’MRRyyy(•J²²²8räĮĮĮÄÄГ“Ć_|”s’Ū±cĒXæ~=cƌį“O>!--Ė—/ćļļOvv67nÜ`īܹŅ}©Õj’““IM-ŚŁ_½z5§OŸ&55•¾}ū2yņdT*[¶l”k×®@ž2¦o¾ł…BR©¤M›6Ņ,İaƀü„³]ŗt!++‹»wļņĆ?H× bĒŽčėėsāÄ ź×Æ_dÖ@­VĄ‘#GŠ××gĻž=łƒO£FĀČȈĢĢL:wīĢŋÉĢ̤N:\ŗt cccvģŲĮūļæ/Õ9vģXāāāˆŽŽ& €{÷ī=ż*į&f^ĀSŽyyyØT*i¤ €„„%iiŚ')))Ņ(ya©Ē §OIIĮĢĢ ƒ"nżū÷gĮ‚¢R©Š×××:ēyXXXh՟œœ¬³ÆĀµk×5j”4"²’~¾śź+>,•±““䌵kŅļ…’6VVVlŚ“Iź\}š3gĪ <˜ļæ’;;;ŖWÆĪøqć“Ī×ŹŹėīīNLL ńńńDEEi śÜ»wädķĻ›øø8Nž<©U.33“¤¤$ }ˆeŹ”)üųć¬ZµŠ_~ł…iÓ¦accƔ)S¤Õłóē³aĆ?~Lłņå„iŪE‹1kÖ,f̘„„%ćʍ£qćʤ¦¦JSœOŖP”£Fbžüłt芁`dd$mŽ­_æ¾Ī‘™*UŖ`nž?ŅŚ„K „c-Z“ĄÉÉ ccc­H8“'OfęĢ™Ģ˜1Cz xyy‘““@Æ^½“Ž…„„`mmM÷īŻÉÉÉ!<<œ““4*TØĄāŋü©×2eŹąģģĢźÕ«Y±b¹¹¹tģŲQ š4i .dΜ9ØÕjš5k¦sÄ“iÓX°`³gĻ&//6mŚŠ«W/d2½{÷fśōéČårZµjEæ~żŠh4|÷Żw,X°€°°0Ōj5­[·¦_æ~<~üXkŖV׿ /V Ē,>§ūĮsõ_ŽT³OĒÜšß/Qž.-W_Nø‘«c?€©šOż VĆ=»¤¤$é!0==]k™d333233„ß322¤uāĻZÖĀĀ‚ŒŒ ­²Ė—/§iÓ¦EĪIOO/¶žāÓ}C…ółēŸė}ś —ĖÉČČŠ]‡üż]óēϧR„Jdee±xńbüżż©P”7oŽd÷īŻųųųC§N8zōØÖłµk×fȐ!>|˜*UŖE·nŻø~ż: …‚ØØ(<<<ˆ‹‹#""‚AƒQ·n]FÅńćĒ)_¾ūŒaƆѩS'>żōS2336l2™ ///¾üņKŒŒŒŲøq#3gĪdźŌ©XXX°pįB¬­­>|8S¦LaȐ!čėėS»vmiP%$$DgSSSʏĻØQ£hÕŖƒ "11‘‘#G’——G͚53fL‘óÜŻŻ„„9mŚ“‘ö¶4jŌ+++ŒŒŒ“£~üńG~łå¶oß.ĶØ]»6nnnѲeK­cĖ5'MšÄ?žH’žżQ©TŌ­[W *˜ÉżųćIIIaĄ€X[[3`Ą4 …‚õė×K³ÜfffĢž=»HĀĪĪŽ_ż• ƒkÖ¬ĮŠŠéÓ§óĆ?°xńblmm0`eŹ”ĮÕՕyóę1cĘ i UAčр€lmm„ś½¼¼“–‹ ‚.²ųŲ£ÆŻ˜\ ¼ųfEŽvcÉłjE^·6–±ŗWŃ0]‚š¦Sfhč¾"Eē±oORŁęéѝ^6F»§|‹Ļ9—øµ[X‚*žó°?lo%’2 ˜Šģ.ęYŞ'ļBœ9ӏ—ÕŁńØY&žw_«„?2Y2’žS±i¦ŒŲ×Pē1C›śž·ļ___vīÜYäaR„cų–4.Ē©uZļĄ Å{˜jÄüÓÅæwvƹ š~­žßÄŽŽžU7C„·„蔢ˆˆŽ9ņŅ®÷ŻwßqåŹ•§–S*•O ·ö¤Ķ›7YĒų2\¹rEŠ>!ĻK”ŸĒą:÷1ŅÓc^,=ļĉhK¦*ČUĖŃ ć~Š{oŁč"āŖī%y'£µC*j€yg\Ūųv±!?āĻÜ3nD%š[& lMʽ~ūMŽtéé鄇‡K›|KŪęĶ›±““ä½÷Ž{jٱcĒņłēŸkmN-ɁP(/,г:|ų0jµš&Mš¼Ōė Ā«&f^€„„­‘č &H#ńĖ–-ĆĒLJöķŪ3wī\–/_.ň·¶¶¦[·nTŖT‰-Z––ĘęĶ›łõ×_éÖ­;wfóęĶ„‡‡cgg‡†††ųśśź o¶fĶāććńšš B… ŲŁŁįėė+Åź/ V« `ķŚµ¬\¹’īݻөS'Ö¬YSģØzxx8žžž„††²fĶęϟZ­¦U«VŲŲŲH÷ҼysŅÓÓ9zō(§OŸ–Īæqć»wļņóDDDŠ”CŖT©BėÖ­Q©TlŪ¶ &о}{Z“hAxxøĪ¶ŌŖU‹2eŹąīīŽÆÆ/2™ŒŠŠP²³³éŅ„ uźŌ”S§Nܽ+²¾ ł:xĘÓ¦ā³G÷QēÉø“dĢĮŪb)PIV_r*6ó2@eŪ śyǼĽ;222ųõ×__hüż÷ßO-w’ž}|||^Ųu=Ź™3g^X}ĻźŌ©S?~\ē±zõźõ’[$/‡˜xŗuėFėÖ­™4i±±±DGGSæ~}¶oßĪĒ,„ēŽåܹsR(²ĮƒłøŪ·oēüłó<|ųOOOüüü066¦jÕŖdffāźźŠƒƒ_ż5”””%¶Ēßߟ˜˜”JåSĖ>|ųŖU«āēē‡B”ĄÓÓ³Ų ‚}ōmŚ“ĄČȈ &@¹rå¤d$lŪ¶óēĻ?õ}›1cFFF4mŚ” ĶŽ;1b„4ĀōłēŸ³cĒŽ"熄„šūļæS£F BCCIOOēŽ½{Z9N:Åü!’n ’.5bÉRĖ8šŒõŖ<«žrÄ«L*¶&"fż“ޱfOTńiCėŻG_®{†šl¢¢¢ˆŒŒ”ņdgg3yņdĄ–-[8xš ŽŽŽōė×rssYµj—.]B&“ѤI)\õõė×Y²d ©©©ø»»ÓÆ_?ōõõ™8q"F’)N IDAT·oßfƌųųųI2ejjŠ©©)‡fķŚµ<|ųŃ£G¢г ¬™™æyėÖ­Čd2jÕŖEĻž=µBzHNNfņäÉÄÅÅįļļ/%Ƽuė6ląĮƒ888Š»woŹ–-ĖĪ;qppĄĻĻČO¦„T*„8ż*T`’žżX[[óńĒćāā‚F£aÕŖUœ>}GGG²³³12ŅĪ®T*łé§Ÿø’>S¦LĮĒLJO>ł„ .°}ūvbccquuå’ūß3ĻpĀėF̼īīīŲŁŁń×_A—.]ż˜ ‹Bæéėė“——GjjŖÖėVVV(•J>üšC’““ ÄĖĖ‹vķŚq’žżRk{ļŽ½‰§Q£FxyyѱcG¢££u–-ĀÖÖ„RYā½”ÄČČHėCW__µZMrr266’ųČ<ūöŪoiŌØ®®®R–õęĶ›óŪoæqłņåÆkmmĶĻ?’ŒL&£eĖ–Ģž=Č’N>}:^^^@žLń“LMM eźŌ©Q”B¶mŪFóęĶłč£¤v¬X±„R‰µuń¹Fįu%:/HēĪiŲ°!&&&ŌŖU«Ä²•*U"&&†9sęP£F ¢¢¢8qā+V¬`ńāÅĢž=›Ļ?’cccöķŪ‡³³3 …BŚ'P¹reiÓ¬.666œ9s†½{÷R£F ©Ž']½z•… 2xš` ‘‘‘Å–]²d ^^^˜››óóĻ?Ó®];*W®ĢƇ™;w.Õ«WēęĶ›œ:uŠŗuė’žžĪčŃ£©V­2™ŒY³fISµÅiŪ¶-ćĒĒĘʍFĆĢ™3„/°'Y[[³oß>ÜÜÜ B… Œ?ž&MšĖŗuė8tčP‰×ŽMÉYś\Š7EO¦A­yŹ_Ø52–_t¢¦CÖĘļöˆö½dӎ•%K„{Yō󉔒mĘĖmŲ[®k×®¬\¹’öķŪIXXéééZ3°2™L ąššŠ„å?Ū­­­Q*•ŲŪŪÓæBCCQ*•čėėÓ»wļRŪ|ÄįƇ„Q{###&NœHµjE“r7Ė\ų> ī%)©äĪø………4H?'%%™e.hŖU«†™™DFF²pįB.\ø€³³3»wļĘÄĄO?żsss¶lŁBff&žžžŅ:L===Ö®]ĖÖ­[ILL,ŅčÖ­›4śÓøqcś÷ļĻʍ177×zØ×ÓӓR·öŁgXYYI׫^½: (rMš4”yóę9r„„„ŗuėFĻž=üéčE‹qžüy\\\Ų½{7ĘĘĘ“iӆÄÄD¶mŪ†••Ó¦M“F÷‡ ¢UÆ^½°²²"88˜¼¼<~ūķ7ĢĢ̘6m11ŗ7<˜_~ł…uėÖįååEDD ,`õźÕRjuww÷gśū ļ†Œ\9æßµfó4ŁÓž ÉĶ“3÷“+cŻ)½¾ębҌ˜ņg¹bcż„V£›˜)yŃZ“hĮgŸ}ĘīŻ»iŌØ&&&¤§§[¾`V“ s°R©ÄĀĀ‚ū÷ļS¾|y~’żw ݽ§§'Ō¹.’æ:wī½zõbƌ;vŒ/æüRg$”Ā3‰‰‰X[[;»knnŽžžžÖĆūÓ:šĻ,³››?³ż,ėųuµC©TYz*o Ńx Ŗ “nŻZėwooo¼½½ü˜żß’}‘: Fcz÷ī­ó-[¶¤eĖ–:}ņÉ'ŅĻ2™LŚ ¦ėß|óōsß¾}éŪ·o1w•Æ`­c‹-Š+[¶¬Ī{ųšĆłšĆ‹¼>vģX­ß o6 !$$¤Äö@žrįMæ_}õÕSĻŽM[®ŁóŪ5{ņ42ņžÅ‚~®?6åč}+ŽĮÜųtC~<āNrvń_Ė%ѶRĀKlÕ»ĆĄĄ€Ö­[3lŲ0~łå—§–oŃ¢_ż5ü1999üüóό5 ===>’üs²²²pqqįęĶ›˜˜˜H”«mllX»v--Z“ qćĘÅÖoaaAtt4TÆ^½Ų™Śųųx¦M›ĘW_}…••;vģĄÕÕUgŁ•+Wāė답µ5Ó¦M#$$Dš1Ÿ={6ÕŖU挵k\»v ///nŻŗÅ”)Spuu%##ƒ… >uIRHHˆ¢ōŃ£G¬Y³F Čń$VÆ^MÓ¦Mń÷÷gĄ€,]ŗ”²eĖrņäIĢĢ̰³³+ńz‚šŗŅ9¢ßwÆŗO’ÉRK„ŽŪI–œ-ÜŲ@Ę^F:Ī„7[V.lŗØ{v {4¶ĘY/¹EĻB(>¦ü敒£2ӀÄL}ōådČžÕĘŽKńf–KB”’īD¶yœiĄä#åIĢ4(¶Œc*ŸųF#“&Čd9Čųo’Ņr Ł{Kw¢F=]|žūwŒ»»;jµš~żśIģ†śõėKe²³³iÜø1 6$''‡Ć‡K×®]銔ęęę4jԈC‡qōčQ²³³™9s¦“Œ„^½zRĖ'›T*īīīøŗŗJQć ņ½<¹g ++‹† R½zuģģģ8tč'NœĄÕÕ•ļæ’CCķ¤qjµšvķŚń×_qęĢ‚ƒƒéŪ·/zzztģŲ‘ćĒsźŌ)ŒŒŒ˜4iöööT«V ¤aŁ‡Æŗ‚ ¼ •m”|Põę«nF©xē6;›§ńcó£¬ś« —āmIĶ1|ÕM„—ĀĪ$‹:ĪqtŖv#=±FJƧ¾QĆž1;oŗj†:ļ ˜&ļ8™Lƒ“YeҶāķ·v¶üėX)²Tē"ŹL#TyļŌDˆšRØ17|żĀ#¾‰śöķKzzÉk½;vģH`` C‡% €”C‡[öäɓL:•®]»Ņ±cGfĻžĶ”C‡J¬ßĶĶiÓ¦‘žžNß¾} ’~~ŅĢ™39ž×5A„7—Xū"‚PJzöģ‰L&cõźÕ:ļŲ±ƒÄÄDzöģłŸ®ćįįĮØQ£X·nųOu ‚ o?ŃA(%åŹ•£aƆlŻŗ•““¢q¤WÆ^\.!ėģGMłņåłģ³ĻČĶ‘ĪA„≀ B)źŁ³'lٲEėõ””vģŲAóęĶqqqłĻ×166fźŌ©\¾|™°°°’\Ÿ ‚šöA„ē“mŪ6lllŠż/66V*ŠB”`ÕŖUZuDDD™™É‡~X¤~•JUbżK–,ŃŁ®Ž;ҲeKʏOLLĢ‹½iAį­!6 ‚ <§ņåĖóžūļ{ÜÄÄDśŁŹŹŠ¶mŪ²eĖāććqppņ—’˜ššŅ”C‡"ēĖårś÷ļ_lżÕŖU+öŲ¬Y³ØU«£FbŊĻr;‚ Ā;FtAžS5ųńĒŸ¹|Ļž=Łøq#ėׯgšąĮÄĒĒsąĄŗvķŠ™™Y‘ņr¹ü¹ź/¬J•*|žłēL™2…’żļž«zA„·—X$‚PŹ‚‚‚°³³“–­Y³•JõŸ£’gģŲ±8;;3xš`TŖ·?” ‚š|D@””йsgŽ?Ī7X½z5NNN¼÷Ž{„r=333¦L™Ā„K—˜?~©\CAxs‰€ ĀKP0Ś?qāDN:E÷īŻŃÓÓ+µėuķŚ•ĄĄ@ʎK|||©]GAxóˆ=‚ Ļi÷īŻTØP”Ųć:u⧟~ŅzĶßߟJ•*±lŁ2Ń ØÕźė·²²āĢ™3%¶Q&“FķŚµ9pą–––%–AŽ¢ ‚šśōéCFFF‰eŠ‹Ņ3aĀ"##±²²ĀŪŪ[g™&Mš P(J¬ßŌŌ###ś÷ļO½zõt–«Y³&³fĶāüłó[_Ū¶mÅ, Ā;D{TóŖń$¹,xķš%ĀK Ń(Š`÷ÜēŻIVšķĮ¢£ęÕõ™ŚŽō©ēĒÅőžž^ģqcccœœœž»]o²œœ)±ĢŌ©SńņņzI-A^ŃA ?t¦ ­\¹rģŪ·ļU7CAxĮD AAAx‡ˆ€ ‚ ‚ ¼CÄ AA„·DJJyyLL04(ł1/))?š‰‰!††/£yĀkBtAAx!>ĘĘMGt³“4ÅŻ½ }z5§ē‡„“ 99¤¤4Œpp°*µė<%K÷ņåW‹9{z6®.E£œ9{“VAcX¹|$­[łįąŌ•™Ó?„{·&EŹęäŖpvķAųü!tģ@¢2•ń߯b×®Ó$*S„²žU\ł¤­÷;'Wń kŲ¼å(±±JärU=Ż40„Ī”hßan®v“hīĆąAķ011āÜł(ž×’—§ŽŪ™“³žóŻ^gööö¬\¹’˜˜˜"€Õ«W³dɾųā Ź–-+»pį ,`ҤIEźT©T|õÕWÄĒĒcddDß¾}±²*:"¹gĻ:Č3xųš!ū÷ļ×:žšįCT*•Öu<==’õż BijŌ°3§’Ó!ĪĶUsēN£Ē,įĪ8.Ś­ÕČŹŹįfT )Éé(Œ ±µ1§\¹¢—±±Jāā”dddcem†­öö–RqqJ’’YKFF6wļĘP¦Œ5©©™dddaccZG\¼’¬Ģ\]ķ°µµņ—ÄÄ?JB©LCad€½½%Īζdgē›(Õ§PJķJIÉ@ł’#ļŗŚmcmNóę>lŚ|¤H@­Ī#b˟¼’~ƒ§.ŁŃåō™œ9{“Ż;'ąē[Iz½Ŗ§Ķßó&33‡°ŁæI€½ūĻҧw z÷j.•uw/ƒŸo%¼@äó4nT//­ė˜š*pu±#°qMķČČČęśõh²²s(ć`Ełņ/?¶½šģDąxō(™–­ĒƝx&))»÷ā9{ī&'N^eóʗ–055“ņūpęTåŹ:ü§śōōäx{U`łŹHFŽč„¾¾žÖń““LÖ®ūƒĮCHJNćAōćbėKNJ'śį?ĒĻ"8d¾¾:ä}Ź8X”T¦q÷nĖWFyš<»wL@__¬¬ڽ?KKSF ÅŃњŒŒl®^»Ļœ¹Ūøų×V.‰‹³-C?ūgTõÆKwY²t/?|ß S£’ō~Æ/CCCźÕ«Ē±cĒŠh4Čd2éŲńćĒ ä?žąÄ‰ZāĒŽ Q£FEźÜ³gqqq 2„Y³f±aĆ>žųćŪŃ©S':uź¤õZÓ¦M¹uėQQQ’åį„111*ņ \±¢3Cć” ūb×oD“—§A.—ńćOė ›óŁŁ¹EŹ/łõ Ŗzŗ«¤gļ)œ;_ō߀Ÿo%֬ͅ ·čŌy¢ōśį#—š­;€ėǰlł~¶m?ææ'gĻÜ$'WĄ”ŸśŃ£G3>łt;vž$/O;i­ZåY³ņK,,Ljū-ńńI ņ>cĒt“Ź ł|Ūwœ¤Aƒjü1Nē{Ś©}ūMēŹÕūTõt“^?tų%Ś©čgȳ8wž&6ÖęZ’…5mR‹Eæī&Q™Šµ9j•…‘a‘r2™ŒIū`YhŠģYż½šńóI•¶æ•öęīß6{)HLLĒŚŗģ(ÖV&¤¤Ź•™X"‘°`Ń>?ŽW˜\]ķ˜7·æšUåuX¹źIIéœ?ūnēnš&ųµbڌ­d¼pxJäż qćĘččč(”]»v CCCŖWƎAAAŖ¾;‰‰‰vv\żc5FFśDD$PæįDĀĀb‰ŠJ,õšØ“6+VįŌ™ōšm¬šóW‘J$tļŽX­n\\ V6„kA~~!J„Żņ5% Œ½½%›6ŽgöœlÜō*˜aooAµŖN Śž:µßL3ūųq<]:{SµŠjŃ033dü§]Ń××ŃÖDŽ} ØS§Žą×* aƆhkkÓØQ#ņņņø{÷.uėÖ-×’÷īŻXYYŃ®źą]5šņņā»ļ¾ć‹/¾xåFADäC¤dM“H$˜[S¬P)Ž,ĢØ]«’ZŻŗu+ unjī‚TKŹåĖ!$'g˜˜N\\*įįń\ %/搕ĖG¼ÖJūÓ+QN½|Mś¬@ū…ùƒµaŻśćņ> «räčŖ²RÖN}}ŻR•R/kՍõÉŹŹ-s̬lÕ5óg}ųé5køąģlƒL¦…ƒƒ%–x7šĄ@_—Qc֑–ž…¹YŁnE/¢§§Ć…³K9wž‘Q‰ÄʦpžĀ-.ŽĒŠ!ķłņ‹ÆÕČæ‹(¼J4å Eńµ›4ŃWĶ,Wr`éŠCČ^8`› :`œ“‡ŽL›‘Ć;±g߆_\žCff.)©™Ā ‹Ź7ӕh³srņłdč*µkR©„āb%YŁł„5 R%[ź×sēšį?ąč±Ė“iSK uæzK c¶¼`‚}‘ż.ró™ •®®źģAQaŁmÕ!³ē†®¾éįۘ„„4āāSIHH#**‰³ēnŅł£Ļ9õó"ČåŃȧė7œąÉ“§ø¹Łcoo‰“Sƌéņ·¢9ˆ¼}š5kF@@ŁŁŁrżśuFŒPm,4h€¶¶6Ō­[—ĄĄ@A0x‘'Ožpłņeʎ‹LöüŒLæ~ż˜;w.—/_¦iÓæwīEDä}E”(ę‡UB³:2m*TP­ižžĪlŪśNtL††zBˆĶ×”wÆf¬\}„ÉSU®<¾Ż½¢Eł“jY++¦NßĀź•£Ō„€ĖWBųzżqzõl*XėÕscēwgiŁ¢&µk?_ļÓŁņķ/8;Ū”U_‡ŲødęĢżŽfM½Ō"FG% ‡ÆÓҳ8q"ĘŖ æs‘·‹(¼\]m ¼ö€K—īRPX¤¦)މMęɓ§(ؗsŖĄÜĢ™L‹ĀBßļ÷WĖxxüD  ŌØQ‰ėAaäåąY݉ć?ĢĒŌTõ¢T(ŠwŸŅ(~ĮBQāgļīnϹÓ_ åJ„’õN T*_łĀčŽ½s?’ŽćĒIMĖÄÄĀķė•ŪęUTt“&,,®ōł+¹’ šĘUŚ¢Ógo2÷óļˆß©į~”„%ÅÖÖ\8Ÿńŗœ=w“†ŽU…lŒ ŠE]·ĮN b@’VoxG"o›¦M›"•J¹zõ*ŽŽŖEæDšńńį×_E”P¤ÕG©T²gĻ\źß’=ėÖ­C__’’é.DDŽ.¹¹ł„F°čÜ©3gØ"i5iģIßĘūń ?ŸüS­ž¾¾.³>ė@’~­8rō2÷īErļ^¤Z=]>}!śNóę^©ÜbNŸQ :6(w¾}ū“`’Įßø}ū1ēĪ«]³³³`ŹKŚr™6U«U$:&‰AZæŃł±Ź•ķØW׍S§ƒų؋÷Ÿ={}}]vķœĪč1ėšŖ5##},-M„hHŚ×cŽ?”ž¢Ÿ0hČ ŚvšĒŠP++Sņņ HNĪĄÖƜ-›'½‘‹b«–µØįåB£ĘSØTÉ“2ˆ‹Kfķš1€*ĆŌé[Y»fŒ(¼#ˆĄ[ CūzģŪ‘ČØD7JõjN˜›‘‘‘ĶÕĄ(ÅH„źÕ-=¦o R©GGkžŃgX˜Ó¦Mmżƒō“,ŗuõÜxž.]?jČÖm§čŪ§95k>÷U*•¬;FRR:]:«“®5<]ČĪĪcŪöÓ ÖAķ÷×½Hī܍ [7Ÿ7ŃāżtėęÌiĻć¶—D§P(T®I!÷£gäąć#&mz077ĒÓӓĄĄ@œœœpuuÅĘę¹®›7oę·ß~#++KĆ’’ņåĖ„‡‡3tčPś÷ļÆŃ’éÓ§Y¹r%Ē§o߲Ϻˆˆ¼LšŲæ~-K½¦#Ó¦R%[5 µT*aė–I|6£ d<³Œ[XÓŠ»Špf­vmWīÜŚHšķĒ$'ĖÉĢŹĮ@_ Uüū’si ŅÖß»ó —Æ„žžE^^>>U©V͉!Ÿ“+5{­±±>gO-!ųv8ŃŃÉäääabb€95køī={÷żŹį#ž‘ÅŻ»čČ“3¦Ė?§ėĒ›LåŹ„GĄ;üż\<ÜJ½¦­„őCsÕr 4ØļĮõkėø}ē1‘‘‰äå`ff„§§3NÕćšŪŁYpīōWŖ³{ŃI$%e ÆÆ‹‹sjÖ¬TęęõŖQ„ž ŠÕ•qāĒłÜ ‰"&&‰””L¬¬LØW×Mp[v°·¤u«ZйtŽDą-йS hĶī½ˆˆH "B]K¢„%åó9~øøŲØ.)“z0yź7\üķ»£v­jGš7ó"?ækkSә:}«p]GG†‰‰ryYŁyXZš #Ó¦^]w®…rī|0ēĪSÆ®ƇuĄ·›?dŪöÓóųdp»×ņģÓ»9ĆF¬A©T²rł’}ŅD_nŽzDŪž89UĄŽŽ™¶CcHJŹą‹Ļ¦Ūڵ]3Ŗ3³fļ`ż†8V“B_O‡ÄÄtī?ˆĘ»Aæajś”CŚ3Ó;ēĻćģlCqq17o>BKKJēN*Óš5Ēüówƒ7żĻ÷+ņļŠ¬Y3>L\\œ†£FP*•¬]»‰DB“&MŌ®ļŚµ Pe öņņŅč»V­Z°{÷nQłąØVµ¢ŚĘōuqwwĄ½Œ o ††z4y!HĘ«ź¶oWW­Ģ±üī‘J%Ō­ćFŻ:neÖIHLć÷?žT‡_ēĻ€£ƒÕkĶéE*W¶+sóJ·²ęY𛬖–ō•ó‘×yę/RV¢1Pmšņt.5w؂ŸųųT„K§ņ-1"’’ħ—KŻų‘JbwnZ’8”a±‡“’šIZjŗz2ģ-iÖŌKš—WĄ÷‡.ŠÆo‹R7ŁÅqõŚRSädfåbnf„‡»-[ÖüņÓ9}ö&±1ÉH„ĢĶiäS•Øč$’“3čŌ±ąĀ“““Ļ™³7yń”ĢĢ\œ*šÉą¶Ļ¢…p’~4ņlEؙŅŲ§śk‡`+((äĄĮߐjIą×JCÓp÷nCcčÕ³t’č[ĮįDD&‰KŗĘõ PŅR³ŠŃÕĘŽĪ’Ķk”jõah ĮĮIHH#7·S3C|¼«R«V随Øč$.^¼Mß>-JµXüu/’[ĮįÄĒ«RÄWvµ„m›:‚«Õ¹óĮųĻŁĮõĄµÆõŒžė(•z(yó5"CyæjFqņ“Õf„ļ›™Ų8€ŸŸR©”€€&L˜šĀü”X[[“––F•*U ®åęębggGŊ¹{÷n™żwģŲ‘óēĻ­­-¾¾¾\ŗt‰“““Rė—dŽŒŒ,õŗˆŠõæēņsˆę™¦ŃuchāT¶2E"ÉBBz™×EDJČČČęiBŚZŖč9/&ł;(ŃF©“ż×Ē-ow‡2M|%čééØe„- 77ūWśŌUØ`Ę ­5ʽ¼\4Ź tÕ— ‘HhŚÄ“¦M<˫ѢE !ŪoŪ¶źæ{‰DĀ„ øwļž†ūĻƇiß¾=¾¾¾åö?iŅ$LLLø’>¶¶¶4iŅ ‹rēS­Zµ2Ƌˆˆü;˜š Ź‘÷Ń ""ņNń.XŽ r¹¼Ü:ĘĘĘhk’7t=¢@DDä}C“ˆˆˆˆˆ¼111BŽ‚²X¹r%µjÕś—f$""""ņ> """"ļ)ĪĪΜ={ömOCDD ;;”ŌL!ņĢÓ§Ŗs-„%Øś/RPXD|\ ŽŽÖj¹{DDžmÄoŸˆˆˆˆˆˆČ?ĀÉ_®Ó²õgĀēa#V3jģŗ7īēŹ•J?’>ś0†zŽIOĻśŸūŗzõ¾ `‰ˆ¼)¢ """"""ņ’Ā„ń¾|:ö£7n7tųj~»Tv$-6r æ^¼ż¶§!ņž"ŗ½Ī_¦ÆßWÄĒģC&ÓbąąDD<åK«ŽØŸŲŲŒõ111ųšéŪ!..…šuĘqåÕƌ’ō:}}xĻHDDDä}ĄŁ¹‚FxåĒć ¾ż˜ÜÜ*X›Ņ A!ī­ąpäņ ‹~ü”ŗuÜ06V%4‹ŠN"88œĢĢ\¬¬LhŠĄ sc‚ƒ“!Ϧ°°ˆ‡”±üvé.66fT­¢Źæ‘‘Ķõė”Äŧ`bbH /—rsˆü7€w€ŗx“ö7́½ś.fš 6ŒżęY’+ōé·æ~-ÕŅċˆˆˆˆü;¬Ys m™›6Œąóy»ŲŗķU«VÄČPČØDäņī÷ǧaU–|u€[Ļ6¾ßn;Å®ŻēčÕ³K— åźÕū ²©T‚ƒ£99ł<~Oæ¾-X»f ‰„‰“æĮŁÉš«pq®€\žKLl2Ó§ödęg½ĖžēŚc,[~ˆ*—Āӄt¶;™Žź0Į^6n:­­VV&<}šFjj&«WŽ¢æ_K–Æ8ĊUGpŖh™¹éiYÄÄ&óÕā” Ś^cÜGāčŚ}>Ż} Éæ–.ūžÕG©X±ęę†ÄÅ„’™™ĖśućšķęĆŅå ŗ†\žĆö§Ł³÷<Ż}³rłžø|ƒ–ceeŠ­9Ł< aÜخ̟7ąžķŠ¼ĻˆĄ;@»vuQ)ŌŹ ‹xų yfVV&øU¶ %&¦“››Oaai©YDF& ÆÆ«¦…ˆˆHąéÓ4ōōtØ\ŁNŠ*€źP–.śśŗ<~Ovv•*Ł–šāūeŠŠ„†Å’šš‰……1īnB²±ēKVV.¬Mq¬hŽL[£NTd"‰‰é˜˜RÅĆQ£ŸÉÉÉ'))++S!5|a”‚‡”1dŹs05SõQņŒ’’2ČÉÉ£ PAZzŁĻ(6.C=ÜÜģŌRɋü·ÉĪĪęŲ±c\½z•¤¤$d2+V¤cĒŽ“lٲܶ»wļęŽ½{xyy1pąĄRėlŚ“‰ČČH¬­­™6mZ©unŻŗÅĮƒ3f ...B¹R©äüłóüņĖ/<}ś”ĀĀBlmmiŌØ={öDGēyb¢!3qyL›6 kkkvīÜIll,sęĢ)·¾\.gɒ%“nݚöķ575/rāÄ ._¾\nfĻž Ą¬Y³J­£§§‡µµ5M›6£½§$'g°yėIN\$d«-.V2dŲ*¾Łü3> «rč ź»W„Ś.LŸŽĶ…ö3f~K‡õX³j“°^\üķ½ś,fą€6x7š üńS®®Ž÷[¶žĀē_ģbü§]…õćE Y±ņ{¾›AŪ¶uÕߣŌé[Yæń;Ō'<<ž O°żŪ)tżØ”Pgž‚½|žÅ.zõjJRb+Wį«ÅC1¼£Š’Ŗ5Głrį^ōo„6nTt={/¢[W–,‚D"!4,–Uk޲sūTŗtöžŃ¬ŁŪ™ółNŗumȁ}žTóż¹żńė×RčsMĄ1lĆĀƒ…²c?^aģøõ|6½ŗośkł@€w€å+‘ĄĮżŖ?źc¦’v@•,##++vnŸFżzīL™¶…Ógn°:ą(«ŽŅ±C}öģšAtLƒ‡¬äīŻŒŒō)Č/¤X©dĢč.‚ō?bTöö–^{@jj&EE ¤ sēų1®_ĶS§ƒ?q#Ečėė"—gcldĄ7›&Šŗ•jA>rōfĢ܆\žƒ‰‰šļšU£ńķęĄO?’ɤ)ߐ™©ŗ–›[€ŽŽ6Ė—§wÆfćffęŅ£× ō8°Wµ98ńÓ5¦NŪBzF6¦¦ddä`iiĀśućhŪ¦6Óflåä/×Xūk ]»ŗģß3“ČČü,#""crrņQ)˜6­'Ó¦|üOüJEŽc™™sńāE¾žśkÜŻŻ9}ś4•*U ,,ŒeĖ–add„L¦™Åŗ„#F`mmĶįƇ¹qćĘ+€ĢĢL–-[†ŽŽĪ+€óēϳvķZĢĢĢJĶ“ `gg'%żŖēnČĶĶ%//€‘#G²yóę2ūy7ÉĻ/¢øX‰M…灤R kʐŸWXn[¹<‡cŲšõ§jŹ¢–-jāģTæžŠ€Ž½š©){ŗuõaöܝDĒ$ n2/RTTŒB”Pk#‘Hųņ‹deåŖŒļFFz¦¼¤Ī°”ķŁ°ńńń©„…Å”„%eČ'ķŌśļ×§!!‘dfęeńOÓ2lķŪ×cé’”Āw9(( §ŠÖjćH„öoĶögHJŹŠp9z‘¼¼ė]:{sķŹttÄ-ŸČsÄoĆ;Fa”‚Y³w°`ž jƒD"!''ŸŃc×±|Å!¾?0›-ßL¤°PAūNsšėׂ”Ÿ“^ˆ³üw` ÆĖŻąMŲŁY T*9~ā#FжMm!‹ļł ĮģŽ9Ÿj)lŲx‚‹öѧw3¬¬J÷UœåæƒOĒueāx_““¤2ż³oY“d?­[ÕB.ĻaņŌ-ŒŻ…)“»£ÆÆK^^óęļfņŌohßN„Y™8y}z7ē‹Ļū£ÆÆKAA!ĖWfŹ“-‚©µ„ÜÜ|ü.E__—{ga` Kzz6ŸNŲĄč‘™1½'::2rsó™éæń7ņ×ķMlŚ0žĀB>śœž7aݎĀ3Z¹ś(NĪ8{z‰  Ś»ļW¦ĶŲŹĮm5|>Ež;(•JüüüHNNęģŁ³jY€³²²ųā‹/X½z5̜9S£ż‰'HKKcäȑlŻŗ•Ÿ~ś‰ž={–:–««+ŗŗŗL™2…öķŪ£§§©™|™yóęqśōi–,YŒ3„_ÅÅÅmŚū—ņZsło īvŽ1LL hŚÄ“vęŠØQ5¬pp“Ľ²=­Z•ļ÷š““Onn>ūö_äō™›j×RR3‘ĖŸkHlmŌ“²”l¤ ŠJķ["‘йSz÷]ŒOĆŖøøŲ`og««mŪŌ CžƒžžŽFÄK ctdŚ$&„£P#“iihŁ­¬L9ę+į%5yŚf ŠųłÄµĶzjŖ‰D"øI•PP 2!Ė3s).½łlę·üöŪ]\]ķ°·· ’‹--š×£żĒ¹~]µw芔ŌėR©___>|Øq-11‘Ó§O3dČŒŒŒčٳ';vģ )) kkėRūkÓ¦ ½zõbéŅ„ mmmˬóõ×_sęĢņżū÷SXXˆŸŸ~~~rąĄrĒ\µjR©”)S¦üĻs0`AAAø»»—Ū×ūŽ»»;ÅÅÅDFF¾ķ©ˆ¼J„’o6’Ģ/§‚„²ĀBæ’ń&j›CC=īÜy"¬kŗŗ2jÕŖÄŗõ?’œœ!Ō»|%„EKöS\\ŗ{Ļė ÓŃf×īóģ?šÅÅ*-q±’ß.ŻA__#C=jx¹PPPĖ-'w¹<‡ O`kk޳³ 5kŖĪެżAؓ—WĄ7[Nbbb@•*źa­»~Ԑ%‹>aȰÕ\¾@żzīÄĘ„°{ļņóUJ­‚Ā"¾Łr’ż.bdō\fhØĒŻæ"„gšŪ„»lÜō99łBٟ×CÉŹŹĆŹJ%,ļŽsžĶ[Ožķē%ņa ZŽ1bb“9vģ Ę« ¼ö€®¾óÉĢĢU‹čó"ĘĘśčėėŅ„³7MWW»vźtP™ķ^‡”ŌLöī½ĄØ‘„(   aęÓd QQ‰XY™—W ”żČĢĢ„ °cc}d2-rrTnN/jõ ‹hŅl_ŒÅÉI„-m×®.VV¦ ²’ƒūüiŌØ*˜!•J˜0¾›š ‘—WĄ÷‡.”§WöaG€mŪOÓ¼™Ƈ=פ+©[<.3xPŪrZ‹|Čdff*wŸ7e×®]888Š¢…Źgøyóę888°k×.&L˜Pf;'''üżż™;w.§N¢cĒŽ„֓ĖåÆķG’"Ó¦McįĀ…„^óööžWÜiš7oŽ–Vé>ČćĒgȐ!ÆŻW‰Öæä™ˆ¼Ō¬Y‰Q#:1l„ŹŻĒŲȀ¬¬\ u X=F­īˆįY°h[·¢A}~:ž%ėĘ2|dU=Ga` +(•†ķ€OĆŖ{^ŽVĢü¬73f~Ė”i›151$+;™L‹Æ– AGG†K— å‹/÷0Į^ õČĪĪĆÖ֜õėĘ!•J°07fķš1ĢōßĪŹÕG055D.WØX³j“`i‘ĮƒŚ’”,§’Ąež~ ź{°bŁp¾˜æ›)S7cffHvv&¬Y5JmĶ>¬_.ŲĖ¶ķ§©[Ē_~^ȒECųtĀFvļ½€¹™ł…äēā×·%Ÿ­”GŽ^&=#›Ń#;’ķg&ņž# ļy¹|¹p/õė¹ ^€ØØD“µ„jŃōōdÄĒ„ŖµÆįåĢž½šnPE؛˜˜Ī„‰›ųjÉP!ōŚ›"‘ĄĀÅūquµć£.Ļ£DF%"‘HŠÓÓĮŻĶ©TŹž:äyd½ūEGGFÕ*ŽH„RtuelßqFMČ9q"ČČœ+ØłYöķӜ”9ż-ćČ”¹Ō­ć†gu'Ņ3²9~⚚™ō—SAĢōßNĻ›>Fś:ĽōŒöаX¾Z;w2iŅ$īܹSźų%s{1Ģēėāę憳³s©×<<<ŽøææC:uʌDTžU£4JŽ%ĻD䯔s§4|a3žÕ’!j×-ü„9³ū“LZz6ĘĘśxø;gĖJ7ö#śömAdd‚ ,Ŗ^͉+æÆ"11ųų4“eZ8U“VsŻ<|pކ²ĖÜܘ®Ćξl÷—éS{2~\WbcSHIĶÄŠPwõ0×C>i‡_æ–ÄĘ&“š–…±±>īnj–‹^=›Ņ­›q±)$§Č14Ō£re;ĮmČ£Š#7ž\‡Ł a·§Mł˜^=›¢’lż<Ø-żśµ$>>•äd9FFzTvµÓ8Ä;vtśōnNTT"śśŖ¶mZ×ęÆŪ›HHH'6.]m\]ÕCčߊ}ū/–ł,DžˆĄ;†››=}z7§[/©TÉ s#2ä9„‡Ē1}jO5Ķz—ĪŽ,]ö=?’röļ™É’ECńøjĆ©čhD*įŃ£8źÖuSŪøæ)ęƌŻ…!ĆVįģlƒµ• YY¹„†Å2lh{lmUn7süū1Ó;+V”B3ŅHOĻbž1}™ańĀO˜5{æł ;; 2ҳ‰‰Mfźä±³³Š8Ø4nģG$%gЧß~8ś^žĪĢ›ŪŸQcÖ2{īNllĢČÉÉ'""™ŸõV³,téģĶā%8u:77{ī÷gźä3īk~<ˆ££%ÅÅJĀĀāØRÅA½¶k÷9®…‰ĄŒæłÜÜ\ōõ_ßbVrŲ·Q£F<~üX(÷ńń®/]ŗ“Ģöŗŗŗ¬]»–.]ŗ°zõjüżż5źXXØ|œKBa¾ cĒŽ}ėQ€Ö®]ū·¬„‘žž€xfē]ĆŠPOķ\ZT9}}]µģ½eaiaŒ„…śwF"‘`ccŽM®žš›|--)ĪĪ6ÆÆ$oNyYsuueøŗŚįZf T.Ŗ.6øøhŽ©#Ó.u.ĪN4ė9UŠ(™Ņž‘¶¶–„> PŻēĘõŸ–ۯȇ(¼źŌ©Ģ‘Cs…Šd#†u ļ…Č×ʌi= '9Eޱ±>µkUÖųcž>µ';Ō'ģQ,ŗĻL‹µk»r+h=wīF—‚%n®öŌØį"“[“ąĢĶÕƤI„Žš«Vļe|9ˆ#:KRRFFśxy:«½ä&ŒļFĻ›š04–¤¤tŒ Ø[§²ŚĖzČ'ķčÜ©÷D“†‘‘>µjŗ ÷geeĀ‘Csqt°ŚĢ›ŪŸ¶mź |ęŸłéø®ōźŁ”‡”±$$¤ ĻØD)aʤ“oWŠ°AóQoīŽŽÄż(bćRŠŅ’āZɎ5\-”_ߖ©©©×JŲ¾};ƇēäɓtźŌ©Ģzļ;III8::¾å™ˆˆ¼”$2ło# o scZ4Æ!|.MR©’-•*½Ś,īå錗§ŗi_OOGHˆR/GP•VåÅ9•…SEkœ*–Ѥ{{KģĖ1µ‚Źæ¬XĘ::2¹H$s åi^ijŗžÕŌŹĢ͌hÜøl—Œų„4Ö¬żŹ¾E>,ŖVU¹.\ŗt‰Ź•+—ZēńćĒŲŁŁ a8ϟ?O\\C‡-uÓ}ņäIvīÜɅ 4B‹¾L@@žžžLŸ>®]»Ŗ]svvF__Ÿß’±cĒ–9·’ŗ2/^ÄŽŽ›WkuEDDDD4‘R4 õŪž‚Č[ E‹8::2oŽ<5j$%üųć\æ~‘#G e»vķB"‘0gΜR…†Śµk³sēNvķŚõJĄÕՕ3f°pįBLøśśśōčуƒŅ£Gz÷ī­vżÉ“'lß¾Ź•+kĢūCA”P°vķZ™>}ŗ˜ XDDDäo" """"ĻŠÕÕeĒŽųśśR£F 5j„³³3ŁŁŁ<~ü˜Ū·oćźźŹ‚ UŌ cĒŽįķķ]¦ÅĄŻŻ pōčQ6nÜųŹC³fĶb×®]ģܹS榊+ø~ż:}śō”zõźŌØQ---"## BKK‹]»viø}ńŬ_æ¾Ģ1W®\I­ZŖųā©©©“k׮̺ūöķžægĻ®^½Zj½ °dÉᳯÆo™Q€$‰ZhÕ³gĻjĢ!==Ē“ššJƆ ™;wn™s)Qy¶mŪņąĮ¶mŪʵk× A©TāččČ Aƒ9r¤†ņÖ­[4nܘ”C‡–Ūē¤I“Ų¹s'ĮĮĮ4mŚ”śõė“‘‘Qj]6lŲ@@@ffĻ]åģķķ fēĪœ?žˆˆņóó133cāĉŒ=ZM±¶¶~„ÕįEj×®M~~ž+ėéźź¾væo4‡²ź:99ѰaCš7oĪǬ– YäĆęzP(śśŗī®*\¾‡‡»C™n²ÆĆĆŠRS2Õ¢ Šˆ¼ˆ$ńéeĶÜÖo©$xē¦%""ņ/ Tź”ÄźÕ_""Cyæjjį=mµYékXJ ‘õæēņsHFłčŗ14q*]ąH²ž’95‘’&ͦįźjĖīļfeė7§Kgļ×:+÷¾įRy«VŒP iż¦Lž²™SgnšąŽ–nb"’/(ŃF©ü÷æĒ¢ åįéSU:ņ—£ą|ØÄÄ&cbl ’łMIKĻBž‘żZįįDDDDDŽŪ¾Œž®zž‹EKąīīšA ’Ó¦}̈„'Qų`1:”šÓń/…²ÓgnP­šÓ+£ö¼ųv’’Ń£:3jäßuųõść¬ßpœÄų’ąĢDDDDž›ÄʦpžĀ-śūµ’V]ųõ611Itéģ„å3×¹ąpbb’…p”!÷£øxń©i™XY™R¹’-­[×Ā2ĒD'clb€‹‹ ?üx¹<›āāb.üz›„„4ŖUs¢AżŅ#ß)Å\øĢ£Ēń$%e`fjH³f^Ō©żÜZX\¬äŹÕ®…’—[€µµ)uźøQÆ®*qfFF6?æŹĒ=špī|0””1éÓ¼™^^.jcæLų³±Ģ͌hÖŌK#ņބߒāęĶGdfåbeeB³¦^oäŽtīÜ-¬­MÉ/(āņ•{äęP©’ ¾Ża` J"˜š’ItL2^žĪ(ÅģŻwķėqåź}ĀĀbA"Į»-[ŌTėūVp8—/ß#5- s3#Ō÷ĄĒG=Ø@ąµ\¹BVVęFx{W-7ņ Č»‰ÖŒéĆēæķI¼ŒD’ł¶§šŽaaaŒ·wÜÜģ…²nŻæÄÅŁ¦ÜŲžļ+[¶žBżzīŌ«ēž·ū02ҧnŹŌŖY^J‘mąĶ-;鳌ü”»æ‚‘”öUß<{®ČūǟQE„%if®o'ĒÉ“ģ³ IŽ<Įšˆ:YY¹t﹐Žź Öč~–ņćń@ŖTq¤ś³p̳üwH—ĪŽ|·ėƒ‡¬@OO‰DBDD›6Ÿäńć§tģX_UöÓiŪ¦›6’Ģõė”DF&RPXDTTęęFŌ®]ś!ü”ĆW³jõQ@INN>÷ļG³tł÷H¤?óŸ2u ĖVĀŌԐĀB÷B¢Xŗģ{¬­M©Uӕ˜˜dz÷[ĀÆæŻįĻėQ*•üžĒ=V®>B•*ŽT©āˆR©dšU¬ 8&Œr?šÆ–D¦­-l¢ĒŒūš%K"‘@a”‚  P–|ucc}Aˆ X÷Ś×„z5§RļiÖģģÜuŽĆG~G¦­EJŠœ={.pģ‡+ųõkL¦Ķ®ŻēŲ³ļW>Ō–ĀĀ":tšĖÉ_®ŠL¦Mxx<+WAž‘CėVŖĖWbÜųõ”TŖ³å+‘œ,§]Ū:,X“9Ÿ‡ŽŽ6$Ü ‰bŁņļŃÕ‘ŃŠ»Ź’ž%śO"Źń’hų—‘ĖsøN#ŸŖčMćzP(™™¹X[™P½ŗ³¼«°PĮ•«!x7š "2‘ū÷£ŠÕ•Q·Žvv꛲ȨD>ŒĘņiXE#ž||*7n>"--KKź×s£Q÷D#ÓÖĀĢ̐«ČĢĢÅŁ¹ ½«š)[s ‹„6\¾‡§§3ńń©„„D”T*©Y³U<Ō“ „¦eņēŸIJŹĄŌԐZµ\5²5&%epķχ¤¦Ź177¦vmW*:~x–‘ģķ-©\ŁŽ«×īS»¶+©i™DD$0 k®…Ņ«gS”J%×0޶ļ8Ķųqݘ3»ŸŠOąµōč¹€Õ«F!•Ŗ‡z]»f ¶żńŸŁ‡ķė•9Ÿ;wžšóÉ?łåē…j‚Ķ[O²xÉ&Ž÷„°°ˆż/ņŻŽitģP_سqÓOģ?p‘AŪe­ZÖdīl?įóøńŲŗķŻŗś|ū1§NqęŌbźÖq{ŽĻ7?±|ÅaĘŚ•枊äČŃ˜9µXͰöV®:Ā葝5ī·,²2søvu-ffŖóM±±)x7šÄń×čŪ§y©m¼<Ł±mŖ>wļ¾_™6c+S¦ō@Y¬duĄ163‘¾…6?däč¦MłkkS¾ŻvŠķ[§Šö™@°īėٵē<Ęw{­¹‹¼ˆĄæL‘BAヒłįČfÖĢ>œųéćĘoĄŲXG+ŅҳˆˆH`ŅD_aa8rō&L܄‹‹ –V&$'Ė cтOž'—%‘w¦M<¹vķcGwįFPīnö“i]‹ÕĒ{GJŠœ¦M=8ńć—čéɄöryńń©*ČĢĢĮŌōļą‡…¹±†{P·|HHH'?æ=†|‹±±> rʐg“˜”AjZ–Z»Ž½š©}önąĮµkTc=ŠĆŹŹTmóąŪµÉÉr Šø{/WW[µĶ?@ūöuY“d?OŸ¦¾2‰f ­ZÕ6’–4ō®Āƒ‡Ńe¶éīŪX-wFī™4åĀĀā(*R ‘ØžŚÜŚÕ”øXIŲ£8¬­MŃŃŃ&1)ƒ¢"… L›8Į—‰|_kŽ"ļ¢š/canLõźĪ\½ö€Ę«£Ps+8œŗ4äzPØ \ |ĄG]¼ųzż“mS›m[§żÜøłˆN]ę2wv?ŒŒōÕĘ8°wÕkŒfīl?śūµ,s>II,]ž=_~1qc?Ź7nś‰ÅK0x` õX±ņ0ŸĻéÆVgė·§Xæįøš¶A*•š d+:2mŠbʍߡņ•‡éŲ”> i,_qˆˆ3ä“ē1¾×o8Ī¢Å4  YY¹,Xø—ˆ š„RÉņ‡™7}ū“@W÷łbQFsīĢR! pxx<­ŚĪäŠįßÕ“:/’“[Ą½;ß`hØĄŽg˜5{C>i‡•• Ó?ū–‘#:ņł?įEzšūKŒŸø‘AŪąģTe+3oŽĘŒź¬vkÖ‘š¦M<ńŸ³„RÉõ 0ź×ó ~=wBB"ÉĶĶ'0š>ĪĪ6‚E4šŚu€ššxņņTœ¬­M’‘¹$&e`ie¢QnggĮ¼¹ż…Ļūüʶķgˆ‹K¦°PåBV”‚™F‰’u”©T‚R©ŠX˜””•„±ĘX–ĀXéYDG'SĻ{¢ZE‘j̜œW‡ą-”‚µ¦EÜĀ˜ōōģrŚØ?W]ōōtČČȦ°°ˆāb%Ž&k““H$ädē!‘H˜1½Ó?ū–3æÅĮĮ {; ÜÜģ>¬ƒšW‚Č»(¼š=Ӑ€ŹUE[[Š_æ–Ģž»Pi@īߏ“ū ¾ŒéK/"c}Š‹•$'Ė5€7įah E1ƇuP+ļŻ«7n†‘‘‘.‡ĪĘÕÕN­Ž±±>‰‰ź”óFŽč„ŽLõµŅҒҹS¦L» Ąƒ‡1(•JōWϲۻW3n‡#—ēpēīōōtųB&^‰DĀ€­X±ź0įćĖō‹|ļU„Ķ?@åŹv“lQ“[ĮĖśöi®ö’8  sēķāīŻ'øøŲ’"gĢØĪjZ”>½›1uśīŻ‹ÄŁ©łyŲ¼ä®4|XįĄ›ˆˆˆČ‡JÓ&ž¤¤Č 'čF(=z4ĮĘĘ;[ nŻ ējąš5Qi’ssó9z-cGwaŠ3e“±±>Ož<ŧɔWŒōjōõtP(Š5ŹŠbbb’°³·$ä^óæÜĆ7'м™2™6¦¦†|č’`µxōōtPk†/q,•]mٳkF)=€Żkj’rr5……¢²·u9¹š!r‹ÅČdŚH%ōõu9zhN©m­Ÿ £GvfČąvDD&›Bll2§ĻܤGĻ…Ü Ž(¬’"ļ>Ś@¢ šÆŅ“©'»÷^@”(&((”ŗuÜØ_Ļ'Ož’š–ÉĶTžóĻ"H€ĻæŲĶĆŠ²²ņČÉÉ#;[u`­DūšwIHHĆĢŌPC«nmmŖfqHĻČf䘵ÄD'‘›WHVf™Yy½¤1{É\«„%^Ą i˜›#“©gµ±1ĘŗųŪ ōź³X­NŃ3 IVÖėŌ+Ķ”jccNJмģ6vźmd2-,,ŒIMĖĀäŁ½÷µš ,V’•• Ą'Ÿ“eԘu|µģ{\œ+`ogI„J6ōź©n>łŠ°¶6ÅĆŻ+WCøy+œÅ‹†Pƞ;A7Ā | ųūGF%’Ēȑ°“x®=šöZc½jż³µ5ēéÓTrsóŃ×׏CĆbiÖb:7®MČż(*V¬ĄĒ=šØµ- ­żŗŲښŸJ^^zzσÜMĖ֟|sƒjżIͤbÅ j¾ž‘Q‰,Xø—5«Fæö:4,V£,<<^-*‘f›ڶ©-|ŽŠN¢ °kkS”ÅJrsó133Rs»ŹĖ+ąÓ šŸŁ™Ž6ĆF¬įŲįĻ©āį(œkÕŖµė~JtT•+ŪiŒ+ņNRØ  ’*|Ŗ‘››Ļ½{‘Ż£~=wLL pw³ēęG\½ö€†ŽU„ßĄeTÆęĂłƒT›u=zŗ:Ōo8ń#½---ĶģĖ<}š†_’„ŒىÉ»£Æ§ƒ””Ę0uŚė'ŃÖ~õXR©CC½R}ż‡ ķ@e×׏ł\"4¼ Eém$„ö mJ„j×j+„z›:łczõlʃŃÄĘ&—Āé37Ųņķ)ž¼ aFłhŚŌ“ߝE*•›Äõ=Ųš"Ń1I4}f°¶2EKKʁŠæ5ŗŗŚ„†Ę²pŃ> üwø™™gĪŽ¢Š‡#ŗ$¼½« ‘H˜7Ɔ¶§‚µ)ńOÓXŗģ{\\lpŖhĶ#3āā’9!˜F>ÕTйalŽś‹ŚFžU4lX•āāb¾ųrC‡“ĆŚJ5֒Æąźj‡£ƒŗ:2²²rY“d?½z6ÅÖÖœŌ”LV®>Āķ;OŽ(ÆĶ•+!lŽz’īŻpäčeī?ˆf]ĄŲ2ŪlŲųžÕńņr!=-‹‹öįč`EµŖQ*•Ųؘć?g'cFuĘĮĮ’ģœ|vģ<ƙ³·X0‰DBhh,K–dųŠöXY›’ĒögŠ××ÅĘFe%?q#õźŗ1tHū×¾‘üąļgSycLL ØQƅ«×īs=(”ŻU'īŌ÷ązP(÷iß®.)©Ŗ( ūöĢÄĆŻAčćŃ£ød.¶6ęČ3sČŹŹUs%JMĖÄ£ź~ły!éiYčźÉ˜?o€ŚžĘĶGo4–9Yäää ±Š’“3Øź9Š3§S”‚……EtéÜ@8`Ŗ(H«ŽįÓšõÌEF&j”EĒ$•›!"2Aķsnn>)Ér,-M„(DUÓXl–.ū23słāĖ=ųĻģ#üKęļRy÷DS’]*"""ņ®Ó“‰'Ū¶Ÿ¦Eó‚ā¤~}wfĻŻ‰››½aĪŅŅ„E’׎}GGU“žŻĶ¶T mS ”R¤—Ņ«tĮĮ**M„ J,HSéØ4¤IŖHļŠō^©Fź&;ß – óœć9fwöĪģėĄĻo IDAT&ܝś¾£{šĶ·Ėł|ŌB v¤ßöü{čį1jī€{ ’“ Ÿ\Čü›iPæ"æ-Ķøu„Ha'~œūŸ}>Ÿ ’T5k<ǜ™żQ…† ^ [×Ƽłö·ź|_7z¼Ž˜ļ§gŗ…(3n®ĪĢ›óŸ\ĄĻó7«uÕŖY†93ūÖՑŸü„‘£2cĘZRoE”«^­4³f<Ś„^ūvµY±b'Ÿ’°ž/œšÅ›rÜķåŽuų Ļ÷źźFŁ2Ř7w€šoaŃüA 6–­G’b ĢsE™;»æ:q5kF_F]ĢO?oRßc‰ŽL’žCµńĒŗżź5„|+E "ŁŗÉDŹMõź–gŻŗ\øFÕ*ÖaÕj„ųå—æł÷ŠyFź€Ń C§³c×®ćź >>‰IS¬{tsrt4rųČ^é\Ϧ3}·råüŃėµLœ“‚wĀĮĮ@rr*Ó§ÆÅĮĮ@¹ēżłļæóܼ™Ģ‘#©X±8` Ó9gīzŅ-Y»9‚5™Vk­ėćļŌ5óœœģ)[¦É)fRSÓųaz0oæÕGG#iiéĢūq#³ē¬gČ ĪY®ļŸϲģ·ķjä†;±}ūQ¾ŸöĮ}_óćO›hóRMJ•ņÅlNgź“ßŃŲiØZ„”łē›oWšéŠ..ģˆ‚Õæļa⤼ڄ>–ÆŲ»› Ÿ|ņ²ŗŠ³łĻC(Ђǭiß}’;…ļ®M’$© jÓŗ&QįæŚŽŽF›m6Ā×_¾Ķø±=HHHF§µS;²ƒZæoJ–ōÉ“ķŻ_ob³Zݤq%š4®Dzŗ…øųÄ u5”hĆ_!„ &6'Gū Ūb/žūé¾ļē¶ĄāŽĢ™ÕŸ”3‰I)rq“ŁV4h`gµż·µk[›Ń#_'>> E!ĆłĮ X»f4`M~f4ź3lnŁ¢-[TS?Ļ»?ÆŪ^ż_Šøę~\{鑤hA‰d.ķ\V'ØÓ¾ūR„|Õ^µŖ„č?`&ĪĪö¼p«£ķčh䓏;1ōÓūÅ/ŲŪøGūöA88ø~#ž’÷©£ēŪĶ9j!ó~ÜĄ ٓዠeœķłnźū|2pÓ¾ūāć“puufŅÄwpp0P£Ęs“~©› U£3ÄDßäƼȇϓšjĪŅ{.TȑiSz3pЦL]„Öåę꤉ļ`ooĄŽŽĄß}ĄĄĮs=v1..$%„ąāģĄ·ßōRs'dEķŚe÷Å|< ĪŽ›7“éņæś<Œ[½Zi4ŒĮ #55 Faā×½ŌßŃĢ}yÆ÷4~üi£:8Ńjķ>¬‹š‹į« o3ōÓłvņ v$9ٌ%ŻĀ'½¬–łižfŹ–)&’$=ó4É󨲺męaučuZōŁ†{ŁŁiś~åńß³££Ć­Š©ƒī”‘ńÅŗ²¢½5PŗņōA~õAŸēK­ŖS«VهÖ!å©JDčĪķ(ŌĶė–ÜM£\žģpk~g6§sķZööuk‰‚Ė—#Šé“°ĘÅ%rž|aĮĒŪ /Æ"„\¢Ha'DEÅąīnęėFt<—/Ebļ ĻŠźŽö„†Ż **Žf.ĀĀ¢ ¹…^§% Ą„££‘H||ÜŃhk¤oW›Nzbb Q×ćl¶Ż˜Ķé\ ½Īõėq÷­+--ššĀ#¢qt4R<Ądsݐ«Qø8;Ü÷ę’nļi89łjĀۜ=w„„d|}Ül¶īÄĒ'—@Q_wü{0wVjÕ*Ćŋį˜ÓŅÕż„wBChh4£?Ļ eRĶi„…EƒAÆ£T)›ż¤ßN^Į„KjRé!ŒÜłuc|¶%c6Šr^Z¾i÷ų±Ä³ĖÖ­[ Ąßß?ŪÆĖņåĖyė­·²żŚ9aƆ TŖT “ÉōšĀą»ķI¬=ž1ŅÉ»UBØć{ß×)ŹMbīū¼$IRNh"×ēį·j…ا»«?étv6Ł{Į:#pļc·¹ø8dŲŪw»ć ;ž·¹qʵHĘŲęµĒƘĒ÷Ē{yɐųīöfÖv~¶×Ōéģš÷ó̐=÷nZ­¾¾nj¦į{ŻżŽÄĪNs߁³³}¦3!NNöŒ¤ ( &S‘LŻ¦×iųy+źĮ[o4Ļō9ééōóĻ?Ó”C‡$&&²eĖ–lüųćčt:ŗuė– -³Z½z5.\ kŒńļæ’ž”C‡fū@’$IŹA”Öņ€ō“™4ńp(ƒĆ’ž€ƒCīDč¹7£¤”·ŅÓÓŁøq#!!!ųųųаaC¦~żś8;[Ń{öģĮĖĖ‹ŠŠPüüüŲæ?qqqŌ«WāÅ­ŪöŁ“iįįįx{{Ó¬Y3 ė Qjj*kÖ¬!66–   ‰ēŸžĮŃёӧOóŚkÆĮž={ø~ż:%J”ąÅ­[ŶnŻJé҄ٹs'III4jŌ___ÜŻŻéŅÅZqĖ–-DEE©ļ­L™2TØPˆˆvļŽMdd$eŹ””n݌ æ7ndÓ¦MhµZ mŚ“Į`0°{÷nΜ9ƒ££#/¾ų"žžļ‹…]»vqīÜ9œœœhŠ nnnlŪ¶õė×sõźU|}}iŚ“©ś9­\¹’äädźÖ­K±bÖ$BńńńģŚµ‹Ė—/ćēēG£FŠétģŲ±ƒ¢E‹²oß>*V¬H™2e²ė×/I’ōLQP"5 \Īė†HRvsp0ŲÄ}ΊB…3ʒž ŻŗucÕŖU$$$°yóf‚‚‚°X,¬X±‚%K–ØåŗvķŠÅbaҤI“nݚ’ż—S§NQ»vmNŸ>Łl¦f͚l޼™ččh–-[¦vx>’üs8Ą©S§ØWƇ&44”¶mŪņ駟ĀÕ«W©\¹2Ū·o',,Œ±cĒŖ3ē£G¦C‡?~œ#GŽP­Z5BCCIHHąƒ¬‡ŪO:ÅĮƒ9xš }śōaćʍ\øpš5k²wļ^®_æĪŠ”Cłģ³Ļ2|ĒēźÕ«„„„pšąAŅŅŅčׯŸ}ö!!!ģßæŸźÕ«sķZĘ(d½{÷f̘1\½z•={öPµjU"##9sę —.]"<<œƒ’”dĶ—1hŠ Ž=Ź”C‡ØY³&/^$%%…š5kLLL ³gϦS§N|łå—4k֌żū÷“ššq›$I’”5Bį’VQÄE!ä€$IĻ®½{÷rśōi“ZėY”Y³f‘ššŹ;ļ¼ĆąĮƒéÕ«ÄŪŪ›Ą@ėV¼ņŚkÆ`6›Łŗu+!!!0mŚ4õŚ­[·&&ĘŗæüĆ?ä½÷¬ē>“Z-›6m¢M›6ø»»³nŻ:4 3fĢ [·n|łå— 0€āŋ3yņdFEóęÖķc7nÜ`÷īŻ4jt'söķė/Y²śōéĆĉéŪ·/Xī½õÖ[1zōh›Ļ”’ž$&&¢×ėłä“OX¶lēĪĆĮĮzŽF§Ó±bÅ >üšCõuBV®\ɕ+WŌÕ°nżéٳ''OždĀ„ źsC‡U;÷‰‰‰lŻŗjŌØ”~~Bˆ‹³&ļūꫯhß¾}V~„’ōH.] gĒĪćt}­ažµ!..‘5Į{éņæś £™˜˜ĀŠU;éņJżūFł“¤ū³\ŠZ°»ØõPŽ’$IO›7Žxƒ2eŹąėė‹ŸŸMš4Įh4R«V-bcc¹xń"Ė—/§{÷īźk¼½ļd¼ttt$99™°°0l®¬žæÆļ\NNNźL¶———š\.** µœŃhDÆ×«3ē™Õ{ƳgĻ2xš`žžūoōz=”””¬]»–E‹©e"##ś¹¤§§c±XŌĪ?@Ń¢E3¬$%%a4m:’E‹%""c.ŽŪīž,œIMMåŚµklŲ°jÕŖ©ĻEEEqćʍ ļ]’²bļ¾S¬ßp€ĻGt}`¹gšŠyy:šńLŹ–õĖR }ūö"4ō?ī” ­“ž&ÄEMzzņ©¼nˆT0DĒÜdė¶#YNŒ’,ĮöGÕ$%’jNcŪö£yŚ^)’KOOēå—_ęģŁ³¬\¹’>}śšķ·ßräČzõźÅ¢E‹¦sē甸»SŪ‚ Ō€¬pppČŠ©OII±é\?HJJ ƾś*'NTĻ%8880vģX8 ž÷÷ß?ōZ™e ONNĪŠƒĮ@ZZŚCĖ=Œ££#=zō°iēlD’ō(Μ½Ź²ß¶ēu3źĻæqčŠyś~Ųöį…ołlųkĢž½žS§Cr°eŅÓČŽlwFėćÓ0*"lg( §VžQēχ²nż>xæĶĖ=z‘—;åņ…łĀ^ę–o'ÆąŌÉźÕ-’вz–_–üĶ?’œ„?¹m@ʜ‚f͚±aĆŹ•+G©R„Šét˜ĶÖAf·nŻØX±"5jŌ H‘ūG~Ø\¹2}ō'Ož¤téŅ=z”aƆ©t³¢J•* 2„®]»āįįĮüAŃ¢EÕ‚‡2deĖ–„qćĘDGGc4©Y³&sēĪ„aƆ˜L&6nÜČȑ#ٽ{w†×FĪž=«vąYŗt)mŪ¶åʍ,_¾œįÇۼĘĪĪoooV­ZEĖ–-‰ŒŒdåŹ•ź6&£Ńȅ Ō•‚ū©V­ćĒēķ·ß¦dɒœ>}šf͚qžüł,~E(2f6:sę*K—mēā„p4 žžtīT’%}8{ö?ĢXːAÕŲ‡gĮ¢?7¦F£ž£Ē.±båN®\ŽÄN«!°ø]ŗ4P#«-Z¼£QG‘"ĪlŲx˜˜ü=yėĶf˜LE8>”ļ~ęģ¹kÄĘ&ņŃ'³:ų5ŸĶƒX,‚ąµ{ٶż(ŃŃń)āL` ÆuiØę…ÉJ™q_,”q£Jüwä<‡_ĄlNēł²~¼łFS›XūS¦­ęwZŚ„»>|ų+Wļāņå4ėgšŚ« Ōˆ{īī…čŌ©.“§¬bś÷"T¹|óQ)T,čĘķo”#¹[»”Ÿœ:}•q_,yxĮ|8ļ½÷*Tąż÷ßgīܹčt:J–,‰£cåsČåæ¹§Łæ‡ĪŃ ń`öķ?…ŸŸ'¾¾nlŪ~”sģųeŠó`Õź]ÆŻgóŗ‹žäĉĖz¶ļ8J“fC9zō"&¼¼\ٰéź7Č„Kį€5³ūč1‹>āg zž…X¾r'M[|ŹĶ›IOü>FŽ^ȇ} !!™’%|ŠėµLŸ±–Öm?#Õl]ķ9ʶŒNgĒӃiÓīsµĢŠ•;y½Ē׬[w€¢¾īx™Š0gŽzŚu­®N_øĘ޽'iצ¶Z’ĮĪŅ¢Õp®]»A¹rž”,įĆĪ]ĒiŌt(Ń17Õr;ŌaõźŻ$$dÜ (¹|’Vk ŻńµP”Or·÷§Q®ĮS~.įęĶ$Öž±Ÿ Āš-źNĖęUqw/ččx‚ƒ÷ŅŖeu›ųžįįŃlŲxöķ‚pqq &&?ÖķēŅ­Y??Z“ئfēŪą4II©ųūy°ać?\æGŃ¢īth„““=11 ü¾f7G]bž‚?łj‚5†x‹ęÕlffnŪ¾ć(^c³pźt[·!,<×"NxŃ“Ie›Ģ„w—qsuĘßßD³¦•ՙ޵ģ£D o""bŁ·’ęŌ4J–ō”]ŪZ6³!}śMĒŁŁž/ƾ”>v#:ž’įō™«č“vųłyҲe5›Ü#G/"4ō3§÷yŅ_›” Žńą™öĢäD"°_ż•yóꑐĄÖ­[±³“‡ķņ³ĒNFŠr='›öĢčłĪd’“Ķ,œ?P}LAÓĆØ^­4ćǽIßžÓ¹r%Š•ĖGžn”ü ļńQ’ŽōźŁ‚Ī’‡ÉT„料Æ^#=ŻBķŗѱ}CæBļ¾cĒĪcģŁ9 GGėŖŅčxŹWģĶü?¦I“Ź,\ü¾\ŹŃ’f<°Ż«Vļęþ?ri©ę4K¾Éųqošz·Ęj™«WÆSµF~Y4„:už·–łāM^ļŚ(C™%‹‡Š ~EŖV+Į«G©e.\£Fķž¬ųm8õź–gž‚ĶLüv’żūƒZfäčE\øĘĻ?~¬>–jN£a£ĮŒӃ† *ÖĚEż»±xį`7Ŗ”õ_””oŒńčÉ/—¢š•‡©Ī`­µreo®Õœ%O÷lLxx4Ķ[GA„J%ŠéģųmÅFŽZHšļ£(Y‡q_,įfB2ļæ×Z}Ż/K¶2÷Ē tėŚ˜‹ĆiŁzö*V,Ž¢(,łu+£Ę,fĆcš÷7±zõn6żł/ ɔ/€AÆć§ł›™vźu)壨d­Zµ¢zõźdy ŽT埿¹‚īģ¹P:¶"&&Įęń å‹sń’õPxĒučņŚ®ßˆĒĶՙ½{O}“öķ¬3ągĻ†Ņś„š™\ߋ·VjÕ(£vžĮšųŅŻŻ…šˆ'ĖźKrr*µjŚęššõu# ĄÄ•+DFų’œœJķLŹųū{råŹCöMW¶)S¼ø~~ž\øF½ŗå¹t92CŅK7Wg¶üżūöŸęł²Åpr²GÆÓ²sūD›r:&SBB¢ ŖÜ½’XPöXcŽŁév`yų”ŹÜ"Š¢ž×ĶČ1Ógž‹‹֍Uc՛Ķé¼Ōę3fĪüƒÉ“Ž„mŪŚļµ¬Y»—ķ‚Šh¦L[Mń«V|¦Ī’§¤˜iŲx0sÜČč‘Öķ !!Ql’ūk­G<"#c©V³/7żC‡öA,_6œuėšvĻI,_6œGńÕ×Ėčż^kF}~'cčå+‘ŌŖŻŸM›’å„V5ųźėe¼ß» #?»įŅåj `óęiÕ²:ĀbaĻ®IźēqęĢUź¼ų1młfM«°{Ļ ŅŅ,T©|g†wÕļ»ńöveó†ńh4Ö@©ę4*¼Š›õėņŚ« (_>{{=;v£Mėšō„¼fŁm¶śHO'ėwŽ”āb=v1£Ē.Īš\ ēØW·<®®Īü±n?Æwm̵{©W·œŗ7?6.Īę恷©½ŌŖ†ś’£.Ćó OōnŽŚNcŸÉY7''#ŃŃ7¹™`Żf”Y¾''{¢£ļlÓ)R$ćÄS”BÄÅ%ÖÕ gg›ē»æŽ˜={Oņrē±$%„ąāā@±¢īŌÆ_‘įĆŗŲ¬Ž;:1›mįK‰6WkSķnµVOĻaa;/¹ŚŠūZPRņŗ9ęŲ±‹“h^ĶęĘ”ÓŁŃØį lŪn=Žńr‡:ü<aaŃxyįŅå¾ĄÄÆzŻŗĘ%Ś·«ms0t¼ųbNŸ¹Ŗ>Vµj)µóąįQˆ€WÆ>ŁlAŖ9K—#hÖ“ŠĶć~Å<ØX±8ēχ‘šjęņ•Hš5±żš÷ó¤B…ĪŸUk޼ŖĶēQŖ”/åŹłsņäš5­Ā¹ó”x{»ŚD$1ču¤§[ »uöDÆÓrźxĘ/¢¾īźv+)ŸS“<į÷·$=¢Üż~š9:™ōķ»6Ūbīeg§”C» ‚ƒ÷Ņķµ†ÆŻĒ°!’³¹Ę”IļåŁ„Ķķ-®ęԌźŌ”4ģķ wŹdŅńNM1Ū|ŸŻīčß͜š¦–1™ ³cēQ›ē rdтA\æĒÕ«×9w>”OGüŒļ½ÓJ-‹——룾M)Ÿ"Wļ?g==k„ĮŻw=!¶”(¹ŁŠūRžī›qtĢM~˜̼Ÿ6Ų<žœl¦D kg½fĶēšńv#xķ^z¾Ż‚µk÷čE„Jź5ƹ”o'ư¹FRR*U«–R¾{yō6FĮby²V|¼uöĆŁÉ>Ćs… 9u=īN™{f6WĪ,*ƒ›« 1±Ö%ą”d3®÷Ģ¢“kW›Eæl”bå÷qssĮĒĒ•bE=Ø]»,=ßja“Õ·PaG’’döŠ!wo†™:~ü8×®]£I“&¹R߂ hŻŗõC£ I9G C!’¬„TŽŽ®œ;šįń1ć~įęĶ$¾o=kÖ±cŚ“żœ?’ś7āmfö½½2æĘĄĮs)\ȑO‡e=Ŗ–Ā£ßyøB£Q8söŋ{©''§rńR8…ī”9s•€Ó=e"p÷pQūļš›ė'%„pī|ŽŽÖN{•Ź%łbüƤšÓŠė¬÷æžļL¦t)_ ģŒ›› nn.T¬Xœß×ģįĢ]“|!W£ˆ‰M°Y— ˜ÜōRcāŖß“ІBõš*9I螼-™Fƒž^=[šF÷Œ‹Ū™HE”cĒ:ÆŻGĻ·[°&x//wØs×5t čߎę±Ū }Ī5ž–Ū7)sZĘ­Z©©iō:tj™LfHRÓ0čļtō’3vĪÓŅŅÕz<= {Ļ,Š›«3nOdd,WB"¹zõ:.„1yŹ*ŅĢéō¹+žņėńxz><ō›”×DĢĘ&''ÓØQ#vķŚĄ”C‡Ų»wo® ¦OŸN­Zµ Ä`Ȑ!4nÜ8ÓH@™‚䱉µoİį?įéQˆēŸ÷ĆŽŽĄéÓ!Ģ™»ž±czØåŖT.Æƒ‡Ģ„YÓ*øøÜ™(jß¾6“'ÆĀŃŃH™2EŃé“=z‘E‹·0ć‡G wéåU„ČČXfĶ^ĒsĻ„Üó~6Į52c0čhŌØ£F/"&ę&E}݉‰M`ÅŹh4^|±F£žF _`äčEDßUfłŠhµźæXA½^šŚ½Lœ“‚ŗuŹ‘’bföœu89ÕpÖÕ«•ĘÅŁ’”õKցPéR¾Ģūi&SJ—ņE«³ćä©¶ü}ŲfŪķŸ¢r„ź*øTŠ(Ö>o®źĢ³śMkN7oŠjō ĻOŗ Os’“©0‰‰)j,ßŪ’ņ7'N\fĢhė8¬cū ¾’a GŽ\äą?g˜6„÷]×(BJ²9Ć5fĻYOTT,CļZN͊GŻ3éģlŃØēŹ•HŖV)ióÜ„Kį4kf½”[ĖDQ„ņ½e"hŃāN¶ĻĢĀtž;JŪ6µ(_ΟK—ĀILLQ—^ĒOų£½žż:ąįQH­ćŅåžł÷¬zääT.]Ž |ł€GzRīČķŃ’©S§Ų¼y3'Nœ`Ö¬YTŖd¤!„`Żŗuœ={–2eŹØŽÅ‹SµjUžśė/ڵkG‘"EŲ“iēĪĆŻŻ–-[āīnčpģŲ1¶lŁ@„J•Ø[·.`MÖµfĶĀĀĀØQ£F&­²&([¶lģŪ·ž={’˜˜Č_żÅåĖ—ńõõ„M›6j–Žæ’ž›’žū“ÉD™2փ‰„J•bŻŗutźt'SčüłóՌƒüó$))‰ŚµkS½ŗõLN||<+W®$22???Z·n½½=óęĶcĒŽÄÅÅĀ›o¾Ijj*«V­āŅ„KųśśŅ²eĖ1¹—EŠ( /(=Š«]ź“šję·å;˜1ėRRĢx{»2dš+t}õN–]EQčńz~šæ™’½ņ¢Ķ5Ž{ē%EaåŖ\ ‰ĀlNĒ×׍/ĘöPæÜŻ\Šd’1·hQwœī &6xwz¶döÜõDGĒóż“hެj†×99ń÷óTž~ŚŒ÷ Ó¾ūˆˆ“:-+gÅoĆqsµž śž»;vq&eFŲD¢ėūa;<Ə?mĜšĘóĻū³tÉ0œ­+čĀ½[³pń_ź _ßö¤¤¦ńó‚Ķ„…E“šjĘ×ם>¶U#Y,‚Y³×1dš+öK’ņ”'»Żé©iŗĶ·P>> £ĀĆvP óo£\„€0Ē(… ×IDAT<µē7ŖĢˆĻēS»VY*½ˆ““‘³ēB™8iŚß‰\¾|%KųŠwĄtė’—¼“ ³qćJL¶š^¤\9ģ œ:Āä©«löfE‘ĀN˜Ķé¬Z½›Ź•quuQoLņb½ņLżn5^¦"ųū{ŸČėös%$JżØWÆ}ŗšuųnf³™7ŽxƒśõėÓ¼ysRSS ¢]»v²yóf~ųį¶nŻŹwß}ĒĀ… 鎽;'Nœ ’žōė×wwwƌc3ųųćé޽;æżöcƌ᭷¬[2Žxć FE§Nh֬͛7Ē××—Ż»w3mŚ4¶mŪFtt4)))ܼySĶnüꫯāļļOٲe9}ś4£GęŲ±c0dźķĮ§<€ņ$EįMy£ĒĆWˆś|ŲÖf„ö6F”÷»/ŃūŻ—īūŚŪe÷Z»ft†kۃqc{dZž¶&M*«”CĮŗĀœ™>}ŗš ĖÉÉ‰æžś‹Ö­[sźŌ)‚ƒƒkĒ{ĆŪó@·éõz~’żw 7n¤Zµjj›Ž}÷]ž{ī9"""Xŗt)3fĢPW/"##3½ŽŻ~śé'f͚E͚փ–„K—fĮ‚“mŪ–ˆˆFŒ”vāēϟXĒ§M›6“ooż7včŠ!,X ®D<’üó˜Ķę8°ōš”~ļHy£FēšņzųŠ˜ŃØgöŒ~Ģ™·žŗuŹa—ɟʯSųóĻCĢų¾Mp ©`Š}®Ķ9!VŽż³Ķ@(āWE(ćČ;š€ū'n)ČEaŠĄĪ Ų™TsI‰)6)Įļöń€Ž|< c†ĒµZ;F~֕‘Ÿu%5ÕLr²Łf%`³ßņn[6ió³F£0kF_füЇøøD2?CPÆny¢ĀUööveÉ─õP°F£d8tģććöŠ2Ļ—õ㻩b&))UM£~·7{4eī¼ lŪ~”ė•ĒĮĮ &ŠINN%9ٌ““­öNĒcļ¾S?~™Y3śfśž¤|Dčäę^Č3™īlÆspp ķ®³,„‡‡séŅ%›żš/^$..///†Έ#HHH@£ŃP¹re"##ńö¾™K£ŃP¬ŲĮšŻ *„Į`PėŚ±c‡M]IIIÄÄĉĻĀ€€ŅÓJ9<<œO>ł£Ńśļ111///ōz=;w¦\¹røøøąēē§vö3Ó·o_ŖV­ŠƒƒŊ£Q£Fź5 ŠHŁhś÷Y?³P”BS&½—„²~œūŃć6KŹō¹ōBX°[v÷65›LõĪG„ļś!2nĖuvŒ(<Żé­õ:-śBOö ×ėl>.FÉ“ćYŁ2tæ2ŽŽ®ø²^ Mį»zfĶčĖų æR«ęs6ļŁhŌc4Ś\Ģęt¾žę7¦’a¦ƒ)dŒ•—²2«ęääD•*UXæ~½śŲ… puueŲ°a“k׎ž={°fĶ‚ƒƒqtt$1Ńö@{\\ÜCėrvv¦]»vL™2E}ģäɓųūūćąą n]ˆÅÉÉ EQ°XīdUBØu;;;3{ölJ”°FIHH 44”›7oņŹ+Æ0aĀ’““9}ś4ķŪ·§I“&xy݉ˆÖs Õ«W§_æ~˜ĶfΟ?O÷īŻmĪ$BŲ£(±<ķ™č%IŹ{B<^ė1ķõö®}ńī2¬1)ˆ_r­9#dÖÖgĮüŸ>”Ūk÷}·*•K²ģ×O³4ąŃéģųmé§ŌŖUę”e„¼¦A«7Cz½ž›7orāÄ ²~400 .°yóf¢¢¢8wī/½ōQQQčõz"##‰‹‹#44”łóē“žžN±bňeƆ ÄÄİbÅ N:õŠŗŖU«ĘʍŁ·oŃŃŃ:tˆf͚ÄŌ©S‰ˆˆąÄ‰üś«u„Īd2Īß’MTTÓ¦MS uźŌaŹ”)„„„pżśuʏĻĢ™3INN¦S§Nü÷ߤ¤¤`ooÅbQ3!ŪŪŪsųša¢¢¬¹DŗtéĀĪ;ILLÄŽŽž“““œ5Y“Ū_Ź’$=“ģryŅKYrļ#¦žĶé©?k5śqäÅi¼{XWō€Œß.IO3kē?ļvŚŁŁ1aĀz÷īMPPMš4”téŅźó·gśźÖ­«īo7,Y²„o¾ł†‹/āāāĀȑ#)Q¢ƒ bŠ A4nÜ777Z·nMTT†+V0nÜ8ʏO5čׯŸŗ‡ž6F£F (Z“(S§NeĀ„ „††b2™˜?>ƒ/¾ų‚įƇӱcG¼¼¼ŌmBZ­– šÕW_‘@ĒŽyåkĐ”C‡ņå—_ņÖ[o‘˜˜H•*U7nĪĪĪLž<™Ļ?’œŠŠP\]]łöŪońō“FHéÓ§Ɔ £eĖ–l޼™E‹1yņdBBBpppą½÷Ž£jÕ|°ˆü˜N(ÜD–$)§œÉ­ļ<©‘–!5w¦µG„ļ\† SfĻå¾d4Ź“e­•$)?SĀń„”Š.ĘłlKĘd8弓|ÓīŁšÕ:u* :4ƛ’«¾ŪžÄŚć'ŒŽ­B欟)SˆEQā^P’$éQ ;,˜ČÅšŸK<½źd'•éęs³ņĖĄh ¢<Żg$éY%(ōĝÉV=BĪ`?. „BĘ$†’$IOBP˜ÜL¹%ĶÜĢĻ“žžA›8–³MŹ: …Ɂ‰$IŹ^Bg}²]”B…(\øp^7£S@ČĢį’$e/!Œ4%õō¬õgfOd:PEĤœmÓ£Š"äĶX’ž2  ^ĘXéŁ`ż’~¶¶ŽI’”“4\s·J!¾Q%Óåąū®AÄĘĒ-–s­z4§Ü5I’”ƒ„( ł(īæ$ŻĖ" cM&I’ō$„p#7·ž×p(’š¦L®e{«—Š`Q<°¦l—$©@Fė`^’ ;ī äAuI’ĄA®Ÿu M63óAxG+V,(IAł:{Ūō„„Bø#’T Üņŗ’ōH:ī2Z•$IDą”7gX…2®X± ¤yč~š›I)3ķõż€€ģjדč@x¢(‘ Ć“IRa¼ÕłĻ݈^Q –JÉÕ:„¼q6*=Ē®-Ѓš@Q¢€œ«G’¤§ƒĄ!\ņ¢źs±7cę<¬ŠCŋ7LŽŻ5E,ĶžveBx (×Qd¦`IŹ×„pŗū8ēķ,™>oaŽ^™GäYfŌfž·ńčtX„'n€"•’$eFƒEņ,p>.UŖÕCoPYZĻōōZl}āVe;;„𼕓Eę ¤üGĮ"\s¼ó`rLÅ^—]=éiP8;€vXš@ąŒüŽ‘$ɖ‹0åYē_Ą_^^uVg„l–74 ÅŅ|ŗßF—[į•d„ IŹ/F,Ā pȕś*{ÅåJ]RĮP(7s¶_WˆBX„‡uk$IĻ8 ‘wj¤Z„č›ÕņY˜LõžCaāć5+ēY;&¹ IyĢŗ=Ļ-Oėw­Ž‹!_ĪSHy@«zU ÉĮōįEAČĄ’ō R8b^·öūēa’Sˆ/½½ėĖjńGjé•+»ģ :q(łČ ĖE Pn¢ˆ› Č-’”v ņ$ܙØDsžõåx¤Ģ3š,óqNįŖW ,üĄ@ŁH (‰ĄM²ÅA’¤üDƒ·¶ęƒĮæątBrź ŋ7Ģņ~ĒGŖD†īŖ/ń¹œĪģńXP”$‘J*i6dI’›Ųßŗóŗ1*\3p>ʞų¹5šYbƵP$ ?—d“š¼ŗē§¢(‰($!#IŅÓB ĀH>Śm’ŽF4šō¬»ćQ^ōX­ß9ĮąĒymŽIG!HAQRȧĒ$)ŸS@č@1`ĮBO˜ ¤<¢f$Ģ ¤”3(rP Ił›„ķ­Šóś\Ļä›UBˆ1&ﺟ=źėk Ä]DxŹj<Īėó ė2m`E W$ɖ@AAčn%BŹ7³’T€Yß9’”Ļ(JAĖś}ĄĆdR”j¼ļš±æÉ##·—隿@žd9$I’$I’¤gTŒPØf2Õ9÷8/~ģaއG½Ó āuä†$I’$I’$å!å­ĒķüĆnŽõšŖū;(žä’$I’$I’$eŒ6™‚V>É5žx£“‡)d„€ßŸō:’$I’$I’$=€`¹§WŠč'½Ģå•ōT³ŅŲó¤×’$I’$I’$)S,ŹĶŠņäI®²-œGDÄ>/,ęŻ@@v]S’$I’$I’$ĪY ČĖ«NDv\,ŪbyzÖ M€kŁuMI’$I’$IzĘ]Š„Yvuž!zß ŗ 0e÷µ%I’$I’$éi'Ņøyæx<;/šķŁ<<źFC 2»Æ-I’$I’$Iψ”Xšfwēr0„gŌµ]e,±šĶ©:$I’$I’$é)jf^^uŽęÄÅs,ß±»OŠI”Pø˜SuH’$I’$IŅS꜅“:9Õł‡˜LuĪ”ŃÕöēd=’$I’$I’TŠ)({…bWĒĖ«ž…œ¬'G`””ś"škN×%I’$I’$I“Xi¶č™LµĀsŗ¦;p/!„&2|×h`XnÖ+I’$I’$Ił˜Ee¬§WķQŁ‘ä++r½#ŗó%”°(œŪuK’$I’$IR>'å “)henVš'3ń{JaI_ TĖ‹ś%I’$I’$)/)({-Ščj2Õ9—Ūuēų€ĢxzÖ:ćaJ­-£€ō¼hƒ$I’$I’$å 0Õżz”ó¢ół`/~ĵõŠ(sRyŻI’$I’$IŹ1 §š·M¦Ś;ó²y²p7OŸŗŪ’R+ Į(©yŻI’$I’$IŹff¾LHL­”םČ+w ßSQ–) äu[$I’$I’$éI)šgšż¼½ėĖė¶Ü–Æ·E†mo#ŠLóŗ-’$I’$I’ōØ\FQF˜LAóóŗ-÷Źó-@™ńšŖ·&6>öy š×ķ‘$I’$I’¤,ŗ†P>ō¼^øT~ģüC>]øŪ•+»ģzń¾| xēu{$I’$I’$)הƓĶĢ,V,()Æó ł~p›8vLįŪEb P>ÆŪ#I’$I’$IN£(?$$„Ģ,^¼ar^7'+ Ģą6!„±³‰‚ŅKŚ) Ļė6I’$I’$IĻ”`•e¶ÉTū/EQD^7čQøĄŻBC·yh5vÆ Į«Č¬Ā’$I’$IR°Oƒņ‹Ł’²ŠĒ§aT^·ēq襯ĀĆ·*ĀīŚ DuņégI’$I’$©ĄHö ĮJ”¤-óņŖ!Æ”žšĄŻ®]Ūā®Óš …ęQNT’$I’$Iʚs(lWRŅ“›Š­y=Æ”ŻžŹĄ½"#·y‹4»:ŠF©!,¢" Ÿ¼n—$I’$I’”§®"8Ŗh”ĆÄ^EŃķōō¬–׍ŹiĻÄ 3!!{Ż“Zs);4Å–Ehü„b1”(nŠĄM ÜP(œ×ķ•$I’$I’²$ YBį:B\W„&\(\RÓķĶšÓ…ŠŻČėĘę…’7ųÓ  ÉžIEND®B`‚libwebsockets-4.3.5/doc-assets/lifecycle-server-wsi.png000066400000000000000000004443721476025525100232260ustar00rootroot00000000000000‰PNG  IHDR»x¤‘ōX pHYs„„‹» tEXtSoftwarewww.inkscape.org›ī< IDATxœģŻwtUšg6½÷R Ō„’„zčéM@Ŗ€"Ø4A»RŌĮ‚Ø€ōfh” ”KdōŽĖ&;ßK&»Ł’Żąó;Ēs23wfīĢĪā¾sļ}Æ2X\Üé EžÆ _‚//¢‹øB„+8@€@„)»r«,½ Ņ!  ""R! ^‰"ˆ >ÓūMcĖ·ŗ/”¼+š"ЉŁk#SŲ6„ ˆ‚(ź€Į+•ÆtWDˆ—Qv¢āR>,Ļzz6Ź*hģˆ‰9ę.Å6„šØĄ“œ«EDDDDDd9€ ŽCŽ ’pŊ­āĖ»Råķ?ģŠā“ø8ļ&‚(vŠ@²r®QYPˆĄæ…=¢ ŲķįuF”w„ž·’L°+Š¢,>žXs(„ØXŽu""""""z» (6ŗzäļ„¶łå]”ēį•v£ŌĪLĒ_\"""""śo‹Eüe" æøz6æQŽ•y–^É`7*ź_kS!w q “(ļś½pD„‹2įē¼Ö¢x t‰ˆˆˆˆˆ^rB  ā\lģń>å]“r vć¢Ķü NåY""""""*3ö‚(nŠŸVž•(—nĢ¢øĮ$>Īė;ˆx§<ĪODDDDDDĻƒš«›‡łxAh$īg~Ž'Œ·ó±‚ŠåyŸ›ˆˆˆˆˆˆž»]å rwo›ńĻóQ¹ś7/ß“‹·w“ÄēuĀēģĘÄs—a‚ž×9‰ˆˆˆˆˆčÅ WaRŠŃĶ­Uōs:ß³ī)ų?óŃ éŗ`"vpskõ¬Oō̃Żčč#n2Įō°±ö³>½ąD܂‰Ykw÷Ę1Ļņ4Ļtꔤ¤Ld&{č@@M(ņö¦Fw~¶§yFāćĆķĀ~hü¬ĪADDDDDD/­“åu|VYšŸIĖ®(n0 dkč‘M!ZlÅC¦ĻāąĻä ńq^ßbgqģņpåŹm({[ųśz•ٱ“’RńøØ«ŗ“£=*UŖhо©©øxń:EÄ ''ŁŁ9€w'¾Qfõ#㈢ˆK—oIĖŽ^pqq,ĒQi( \¾r[m]P _9Նˆˆč&Š]ćbĶ—Wև.ónĢq1ĒgāWe}ÜņT½fg¤„)[Ö»ukU+æ,³cÆYŠ÷Ž/ŗ]}ūtÄņēéŻ'--sę~M›÷"/O®¶MÄF‡—YżČ8łłšōn%-żÕū=Ŗ_9ֈˆJ#33UŖu–e2b¢Ž–cˆˆˆ^m¢ Lóšh¾°,Y¦Ż˜ćcŽæˆ_”å1I]~~ ~k’ Õt‰ˆˆˆˆˆ^F‚(~}¬{Y³Ģŗ1Ēŝ¬!* žÄ3Īšü_·uė>œ={UZ61‘”qp |}½`ff Ax.S'•%™(ß±±Ē‚=³śżÉd‚ŚæĶ2ßć=s"œˆ[¢¢žmęéŁ(ėiW&Į® l—‹@ݲ8ÖM—.!čŅ%ÄąņDJ÷ķŪ‘.Ń3`ee‰}a+Ė»DDD’AB ©,÷£ŸöHOżŖ:.śX`śßē$))Uś»r%Ļr¬ Ń31*>ęŲėO{§ vŸō† ?=m%Čpry¾ō·‰‰I9քˆˆˆˆˆčف“¢Ā+=Ķ1JŻYEY|Üń5įō4ųÆKKĖĄū|#-;-æ5 …ØV¾Š†»Õ’U€ ?’ō™Ös(pģŲY9zgĪ\Fbb RRӑ›› kk+88ŲĮŁÉµjUEėÖŃ®]˜›™|-ńńIŲ²uΟæŽ7ļ#%9 YYŁPˆ"LMM`ggGŌDēN-Ѧuc˜šjģqq‰˜5{‰“\odp=6o ĆīŻES„Ģœ9Õ«i’žÜ¼õŪ·ļĒ•«wpēöC¤„g"77`aa++ TŖä‰ @?ōģŁõ‚ü ®‡”DQÄéӗqäčœ8qń ÉHIICNN.,--ąčhGG;ųūUE‹ йS XYYź=ęgŸ’ˆ‡£¤å † ~½ZeZo¹<‡ŸĀ¾}ĒqłŹ-$$$#-5"D˜ššĀŽŽnnĪ Ø‰ĘŃ­k+˜›ž<>ÆGĆĻāōéž×VĮh×®©Žć_øx?ü°`ggÅ‹>„;‡ķ;ąśõ{ø’1äyrČLdų÷ō&¼÷žWŸ|ż7Ąø± ®’ćĒ1˜÷É’¤å=Ś¢WĻvZ˦§gāŠįS8zō,._¹…””t$'§A”(€½½ķąīꌡ@?tźŲ ÖŃ{īµ…āąĮSjõ–Ėó±mŪ~8x·ļ<Äćˆˆ¢ˆ–! ±ņć“蜣2łVż¾U­å¹$U«ś`éāYhŅ$Pc[‡Ž£qéņM€£ƒ®\žŪą@Iu_77g\<æM#؎O¤É_ąĄĮ“×Zµ ʒE3įķ]AėvcēŁ={ö*>š³Tć„…>ĪĪ˜9},FŒč­3ūvĒN£qńŅMił÷ß¾B×®­“–-£įg1cĘBܹūČą}ÜŻ]0ē£ń8°k‰e>9ó¾— CT¬č†ys'¢OļZ·ļŁsĆGĪ˜››įʵ]xwņēŲ¹ó²ęffxq]»“>77g\ŗ°&&†uˆY¶l-ę}ZģīŁõ34Ø­V¦ @•æmĘĀoCrrjńCčŌ ~m,\0uėÖŠŗżĆY‹šėŹĶ€Žšc޼‰5jnŻ~ Q¶CūfX»Ęų)ķ¦ĶX€ßߨPĮ—.l×[¾’Ą)8r䌦ŗwŽ‚ys&čÜ'--~µŗJ’~öé$_ry>¾™’ –ÆXgŌtl!-bÉāįć£;)`æž“p4ü,e~…?V}mšń‰ˆˆØlˆ"&xTl±¬4ū–Ŗ³²9YŌŽ|H/œ÷`šŠ©Fŗ‡qoĶĮ²’ŅY¦ @×_?’²ŃØ@īŻ‹@モƆõ”žNIMGX±!]=Š–]čŪ§£F —ˆF襑#gŠ”Óh£‚<]:…^}&čŹqŪÓg.ÄÜyß?uJćšįÓ<ä£ļA\\"&Nś?’²Qo¹M›ĆšśŒ t ::o½=’[¶¶Ä²yyr 1Cė³§JõÅS||N¾hp}žŽyXśŪ×× õė«·¬‹¢ˆ©Ó¾Įģ–čĄ¹ó׊½ĒŪ8}śR‰eļߌ~ż'i tŸFĖ „æcbŌ’ē§P(pžü5õgĻ^Ń{ŽÓg.«½ģS=gįqߝō9¾ūžO£ē?~]ŗCTtœQūŃó%ų*1ņŸŅģ[ŖnĢł2Ł€hWš}É8³g½ Q,źĘ¼hń*dffP¶Ų”ŌšźÕ;˜üŽ—P(”?A@Ū¶MеKźÖ©GXX˜#/OŽøøD\½zŪwĄ±ćē„c|öł2“iŒŚµ«kéw üŲ9iŁŹŹtAėVĮšņö€³“e7͌Œ,\æq›6‡į̙˔Įņä÷¾D“&pu-ź߯o'ĢūäéZ7lڃ×^kSāż =¤¶<`@g2“¦|‰ččxi¹BW¼>Ø‚ƒąķåkk+ˆ¢ˆŌ“ ¤$§įü…ėX³öo©[pRR*&Lų{v’\źy£¢ć0rō,µčM›”gĻv Ø WW'XYY"/OŽÄ¤\æ~;wĘĮC§¤ĻrłŠõh×¶)Ś“i\Ŗ:”Fzz&ĘOųDŖ·µµ%ŽŚmŪ6AW88ŲĀÖĪłņ|$%§āÖĶŲ½÷(¶l +jūüGōźŁīī.Ēæ~ż.&Mž\ķymÓ¦1ŗui…ŗu5Ÿ×k×ībŪöżjĻėē_üˆÖ­‚u¶z*|nĶĢLѱc 4k/OŲŪŪ ++Š»W{Ģ™ūT÷ŠŠĆhެ~‰÷)*:ēĪw}zwŠxV~]¹kֆJĖęč߯BB”f _ŲŁŁĄÜÜ YY9ˆŠŠÅŁs×°nż.Ü»ČĪĪĮ[oĻÅ©Sō7P})įähīŻ[£Aƒ:puq„••%,--J¼mZ4ÆA¤ŸN¾__/­eo޼ōōL@@@MܹóŁŁ9øxń&ņärõ?y²čå‚Ó“.ėŖÖ­ß…-[÷IĖžžU1ģžØ_Æķą`o s sdee#&:ēĪ_Ćź5挵;”/0>żt–’8ÆT÷€ˆˆˆž ūÓåŗ»£ŃĮn\Lų @ģaģ~T:ÅLjżø|¶lŁćß֟¤ģ«ÆB~~e ŗņ×/о]S­e+WöDppFŽģƒÕkžĘSæ(Š((Pą×•›ńķĀjåóņäX¾|“ģźź„m[@;:ėÓ“iFģ‹ł ~ĮĀo ģŖųŪŖ­˜6µ(»ø­­5śöéˆ?WļŸ¢7ŠU5mź›jč¾}šŻ”‡©Cyr9¶m? ÷˜Å[Óč¢Qfć¦=Ņߦ¦&ųńsõŗ…,--šżw©µ‚O¶c(¹<_­5jģ˜:Żāŗtn‰7G>xčRS34ŹĶ’z*6mX"żPŖŗWŲ"([ßuŗÅuļŽÕŖõ>ŃÖå59%Mz™Ó§½©3Š-nČą×ŌĘźnßqPjÖÅŪ»6lX¢3Š-¤HFGĒ«=cŗ„†–ž®S§:üüŖØm?tč’([ÆW,’Dg «ŹĢĢ ęOƒ—§»“®¤ļ ¼’‹Ķ,³@·PĖ ¤æOŅŻ„śß‹ŗ+7lXÕÕŗMUNN..\ø®r.õ.̹¹yjC¦OcPB=SSµ—„99¹ˆM(q?"""*_‚([x’ž!żYZ‹1*Ųµ4§‹@ećŖEååhųYé湙†1®A^5‘PZZ†Zv_8}¦čĒ­ƒƒ-ŗwomš±A@Ļžm„å7ļk'õ‚üÕā›öź=fhča) —Édčׯ“F™Ó§‹‚µ- R%ŻÉiŠsvv@+•–Üė×OŖóēÆ!##KZ9¢QūPō¹( \»~§Tõ(ųų$éļ¾Ų(ŅA~ ōƒ••fףcįē¤īĀff¦:ŌČēUååFFF–Ž1¤0qĀ8©“~ėҽ[kXX˜KĖ”*½“‰ORūnhkużēhQ¢¦ j#(°äĢĄ…,--ŠK%iܕ˷JÜē£YćKŻå^Õōī½)€/Nu\z£†uŃH%›“®1ėēĪ_SėęÆXŹį…½ f Ć’×T„Ŗō,śI½eˆˆˆčE&V±±2{Ϙ= vŽ{‰¢8ĶųJQyQMšćėė[£öÆ[G}Ģcń77T^5jXרiŠ r墵œœ\iœ¤*ÕDUgĻ^ÅżūuOµ5­E‹š¬č®¶]EܼUTēfMėU_e‹Zß“ŒK*Tčśõ¢ĻÅŽŽUŖxµæŸ_˜™@øuėA©źQÖÖVŅßééš-ŹśĢ’z*ö…­Ä¾°•˜6õMķ×o½<Ø\ÉÓ wUÅĒčŽŗżPołÖ­ ėlggƒN[HĖ«¼TŃf×®#RŠ.‚ÖģŠŖßĶ @ć§³Rżn>ŽŒEV–ī`ĶŪ»‚Z«zYRķZ,Š¢ÖÖŻ”Ōtܾ£ü,ÜܜQ¹²§ŚŌIgt“ģŖŽ×ussF͚¾jŪUŸEHKĖ4øŽŽ^ҳø/l„Į=ˆˆˆØ¼ ³āćĆKī÷„ĮĮ®"Ÿ‚Mé*EåįńćXéooķSåčćįį¢6F.%9Mm»jąYµŖń?¦Ūµm¢öƒS[¢œ~};ĮĘFł£VElڬ½u7..§UŗŲjėĀ—¤Ö‚SMĒÜ»ś¼;ń ©¾+J™Ō&2JåsŃ1…‘>ff¦pqq”–SRŅõ”.[Ŗłź5ćīŻˆ2;vddQVÜŅ<ÆnnĪjÓ„¤¤é) ø¹>ŽYµu6""—ō“¦ŖŽŠśGŖ~7½= ®G! ®jĖŖĆ Šsws6śų†rrr@ķŚÕ¤eÕ1¶…Ī½*½hųdź%ww©WEDD4bc5öS=Va2,U¶jcųē/ų99¹Oq5DDDō°U`Ž”… JPw¼:āˆŅ×‰Źƒj—Óܜ\ģųū ŃĒ055A^ž²•*5M½%O5pŌ–Y·$vv6%vß“µµF澝šĒŸŹD47ķÅŌFküšŻµėˆŌ ŚŚŚŻ»iv©ĪĢĢR[vw7>ØPĮŠĘRż\„ś\T[ÓҌka}½{µĒ’„@”P ::-B† ^?źÖ­oļ šņt‡—·<+ŗĆÓÓŻØ¤?Ŗ÷%/W^Ŗūbff†‚eĄ“Ŗ'Pb’)U:4ƒƒƒ­4>:4ōÖg799Ēe'ļŪGūœæq*×kōµŽ»§ŽĆ!-5C£'C!AVöŻ—UµlŃW®ÜœŅģž{Vu¼nŃXŻąFxō(€r ¢n*ߣüüµ±¼-Šua.Ō·Oi>į?Wļ@čĪаAmŌō«/Owx{y ¢§;<+ŗ•źß("""zńFĒʝļįRā<•»‚Bœ+–rš"*?ŖćŻŽ?Æ6=Kiäęę©-«»––ęŋ—™aĆzIĮīƒ‘ų÷ß+ —T[Óŗum„5OńnŅ„råiåŖ|.WÆŽĮ˜±?ÕńŒ_ōiųūWŤwߥ’„PŽ>wžĪi™CP¾ń¬č†5}Ń ~mtīÜŽ^Ś[2UļĖńēqüDŁ>ÆOĆĀĀŻ»µĮŚæ”S…ī<ŒŁ³ŽÖ(·{ĻQi©©© zõlÆQFEµ9©]¹Y ŲJ+§ ÆÕX-Z4ÄņėW®ŽFFF–Ś÷O5³j÷å† ė`ó–0©Œj°[xœBœSš1c,:%õ2)Lʧš˜Æ¹¹<ŸĄ~h€›=ü‚ˆˆˆŹ™ ŹfŠWL‰M Q'j‰Ąą2©=W¹e©&ƒ€¼¼¢Ų–Ļ.p,L"ShƒJFe@™Øę„J`4 æff@3ų±“xvŗ>y¹eż¹ä—\Ø Ķśš-,]2«Ä,ʀ²{ł…‹7°qć|8kš4ˆÅK~×Z6ƌ¶āĻėÓRm„½{7Bk‚2Õqć­Z«u7/$—ēėó[e|­ĘhÖ4Hź>žŸ_ –pJ”PHŁ«MLdjS éĖȬ:^·bE7cŽģ°{ēO:ä5XYéOΘ—'ǃ‘?vĖ~ü #GĻBː”øl@‚/"""zį ‹;Y£¤B%¶Ö*LÓ!¤lźDĻ“™iŃĒÖ Am­]{Ń“IŚ²„„…Ōŗ›_šllÖ §ĶģŲ~_|>Ej‘QmMóšpA«VĮZQ¼%·¬ƒ!C©&—ŖYĆƒiŸ›ŌPuk>m•Œ6ųõīüzwDDDćöķ‡x‹ččxD<ŽATd,"£ā«Ńź,—ē㫯‚³“FŒč­¶Mõ¾4Ø_ŪØģŽŚ4iųTū×¢ECxxøHćKCwF­ZEćUÓŅ2päčæŅr_-‰©e‹Æ RĄŪÆo'µqÆ„į驽 óó`oo‹Ą?œ2MŠÉSŃŗµņ;xūöC©›½æUiü=Ō©]––Ź)†.Ž€\ž/=jćuuta.äģģ€Å‹>Ä×_}€›·īćįĆ(DFĘįńćDFÅ":*‘Q±ˆ‹KŅxÉšąA$¾žŽž³ŗĢę¢&""¢ēĀTTLš–ŽBś6Ęʞō€Xšŗ¾2ōāRĶVZ£ze¼;ń2?~a°[–]Fµé×·ę}ņ22²œ’†żūŽKŻ’=¤VN5I‘z}Õ[~žg÷_]õØčéVęŸĖóäćS>>ŗ§oŠ‹Kĝ»pčŠ)¬üm Ņӕsē/üo¼ŃSķ³R½/ÕŖWzį‰ ½z¶ĒO?o ĢʬšU:,ģ˜ōLYZZ k×VZ#“É`aa.%SjÓ¦1 |ŗå­E‹R°«:nW5Ór#•ńŗ€ņåF½ œčńZ[¬[ū-Ś“)šzŖ0š%""¢—Š…X ×L¢¢BgĖnTŌæÖ@®ŽéŦ:MLaYc}õõORwߎš£iÓ¢®ĢÕŖśąŽ=åŌ3…YU›Ø–…vƌ1zĖÖæ’± °oßq¤¤¦#loøōĆŗvķźØS§ŗĪż]]ąč`'MÓņąa”Ńu¾~ćžTggg£2śRż\ŅJł¹üšæ5H~2TÓ¦AčŲ”y©ŽcŒØč8Lšü„“¼ųŪz[u‹kÖL}^ćĒ1ØT4Ēl•*Ec€ÓJȤ¬Ė×ßü,%źŠ”Y©ęRÖ§~żZšõõƒ‘”ct§LŽĢĢl:tJ*§mn]UUŖx#!!@馎’ōśā IDATŠˆˆĘŖß·IĖcĒ xź,įO£I“ ˜™™B.ĻGvv.]¼‰FźŖÅU l «ĄgĻ^Ř7ū«×õö® 6·µŖßß&½`š÷«‚Ļ?›lT›6 ĀįƧ(ē*&""¢— ąˆˆćßųų4׌z 3Ų5rą\ /±š5}„æ/]ŗüü˜š>ü:99U-™P½zžjŪżüŖ`ßžć€'/@”PüŻøy_mŁ£„©AüP/Č.Ž@^žŪ·Ą•¬«ūw.ńœ5żŖąōéK”ß~kĮõ”­yR}=J\ųłU‘ž¾{ļRS3ąą`kšž ,XøŁŁŹģŅĻ+ȑ 29rFZŽŠŠ7*Ųµ±±R«ZP¬U¼fĶ¢ūréņ-£Ÿ×ŌŌ ,Z¼JZ,aZ«ŅżśvĀ·‹~Pģ8xBź–ģą`‹šé=Ž_M_œy2/ta÷_cœæpß’°ZZž8aˆŃĒ(K66V ņ—‚ŪS§/”F _ܾ£lłvr“G5-sq«NEtę_åż8i`ęŲøéyŒ‹Óœ§·$Ŗ­ėŠć{hŃ ĮĶÜ\ģąOmuG&Ę>«ŃóŃ¢yiLdjj6Ėb\’Ć’œQ[®]K½Õ4¤eŃt ÉŲŗmæQĒß²uŸō·æUŲŪ—š ÖKśūĻ?wąŠ“–śŖtsÖEµĪœ”Z¦ ‘““‹Ż»JĖč)­[żzµ¤.® ü¶j‹QūŸ9sY te‹öóąęꬖńöŹÕŪFķēĪ#µA>ŽŌ¶7oVO nÓŅ2°~Ćn£Ž’Ļ‘ÓjĖO›ōI—>*Y™/]¾‰G¢Õ²0wėŚ%dśVM¢vąĄ iźCż£ņŻō¬č''£öTÓS§.āܹ«R7’ jkĢ (ʾ0yō(ńńIj-»ś‚ŻJ•ŠZ|<ˆ”ĘƒJµ ŗ—·ö鰈ˆˆčÅ'ˆŗ§ Ņģ&D÷ æi‚^xÅ38kö†3hߨč8|łÕ i¹NźÓ“j¬ÖŖ8kÖbµŖś¬üm3öģ) ;wjaŠ~}ūt”Zd.]¾)%Ę idP ē€ž„Żyr9F½9‘Qq%ī'—ēcźōˆŠ.*Ū©£au.ĪŹŹÆuo#-/Xų+Ö­ßeŠt4)©éųčć„Ҳ»»‹F–lxgā§čŲi“ōßÓα (_(4R銺šŪ•OŪ’››§ö<™›™”ZµJjeÜŻ]ŠZåy5{±Ś3¢Ott<¾ų²čųµjUCź• Ś×X5kų"  (öĘM{¤€śø^]ŗtn)½Ü‘Ėó1ōijĮ—>GĆĻbżś¢={¶5“źĻ”z°{Ij©Ō[p‹S}¦¶m?€Ē‹rL“h©}~]nTō²)''ļšµŚK }.]¾‰M›öJĖŖYµ‰ˆˆč„Ó:!źD-m“vc.aœh¾†'œ>} żN)õž>ŽX¼čĆ2¬‘~Ļcįē'—#++ƆOGƒśµŃ¶mŌ©]Žv°··EffRSŅ‘˜”Šsē®bė¶żjI‚&O®qlfĪ‹)ļ}HNICÆ>Ņ­[5Bõj•`ccSSddd!==D",,.ސŽćą`‹·Ę֝ø0QUįŲŻBõ$¦RUµŖ^Ō ­Ū ø~ż.š4ˆƵE£FuįćS66ÖP ==éYø~ż.vģ8Ø6®ÆaĆ:čŠ¾ōM»žAZZäņ|Lšü–żų:vhŽĄ@?8;ŁĆŽĮŁY9HIMGrr*.^¼‰­[÷!9%M:ĪÄ CµfŸ¾}ė.^ŗ)-—v lq#FōĘŃpeB°ÄÄtī:­[#$¤ŖVõ»»3ĢĶĢ`fn†ģģD>ŽÅÅK7°is˜ZÓ³W;­]·?š=GĆĻ"/OŽģģ 9õėÕBŪ¶MP·N ­Ļėłó×°uŪ~dddIĒ™Ž½;ą³Ļ„B”]诫½Ī©ÆŠ=Ŗ/.^¼!ŻĖ‚ö†3ø÷…©© .˜J• 7ż,YYY¢aƒ:8qņH/7d2ź×Æ­s?ÕÄUE‰ī ™rhéāѹėX)³z\\"V­ŚjT½gLƒĘe<'3=_"ÄĮ¢(ĪA-‡ĘƲ„˜šV“§æ¤—ҐĮÆaėęļµNż”““>ūt̟¦·ÜŅ%³šĶץĆĆø|fžžU±īÆExķµ6FķąGi¹{÷6js —ÄÖÖ;C—cÜ؁sļ–¤}»¦ų{ū2Ō¬įkŌ~ŚtéÜ{vż„V­‚ œmm­1mźh¬üõKƒ«²“tÉ,|łÅ{p/!”Xq‚ `ŠĄ®Ųŗł{89Śė,7ųõīŲ¶å7&ŚÉÉŸ~2 ß.œaŌ~„įå鮵ūø1A¶ ųnél|»Šų€ÕƦ/Ö®^ˆžżJ§ž<µl© ÖØ^Io¶ŗukhćÜĀ€`×Ū»X…^=Ū•Ģ \\±tÉ,|šž(£ö#""¢ļøø“Ż.5~aĒG[& ’|jõrX°šWäää•ɱ\]0žķׄåĢĢlµ ²}ūtŌ;}΢ū¤īÅŧ2ĵkwpģųy\½zŃHKĖ@F¦²ū§­5ÜŻ]PµŖš7«‡Ö­ƒ "óó pčš)œ;w 7nŽCLLrrr‘‘‘K sŲŲZĆÓÓ5ŖWF›6Ń¤q`©¦ī9räŒZWņĶ—"$¤‘ŃĒ€ōōLģŻŽ+WoćÖ­HHHFvN.rrracc [[kųxW@Żŗ5Š”}3µLŹŚ( µ±£]»„ō’į޽9ņ/®\½‡¢’œ†¬¬(°³µ†³‹#Ŗųz£iÓ “mÓ¤ÄģĶæüŗ ŃŃńŅņĄ]J¬»±ņó pōčæ8į:®]»‹ųų$dee#%5–ę°““€½ƒ|¼+  &ŗt ŃŪ-U›ė×ļ"üŲ9Ļ«››3ŖU«„fMƒŠ¦Mc½ĻėĶ[°A%éՌéc`nnVŗ‹‡rģlįŌ5`aa†iSß,U‹æB”@xųYœ;W®ÜF||23³‘š–KK ŲX[ĮĖĖ5jTF›ÖŃøq€ŽļĪž=GqęIfdooŒŁ×ų ,…ā÷Pއ-)(_ńÓzÄÅ©Ļ{żĪųĮj/µJŸ„żNąŚµ»øsē!’S”ß”ģģŲŪŪĀĀĀNŽöØQÓ͚ÖCŪ6Küü’\½CšfŹÆ¦/ģjp}ˆˆˆč¹ū޽B‹IŖ+Ō~•‰ā“ųXÆHLMI/¤ŒŒ,tļń6®_æ Ø^­Ž…Æ}Ŗ.ÅDDDDDōŅ‹vóhī­Ś•YmĢn\œw"]z!ģÜłŽ?WW'89Ł#**›6ķUĖžüŽ” t‰ˆˆˆˆØbb̉F¤®wź ŖŠ.`ą@/ˆk×ļą—_7éÜŽ”}3ōļßł9ֈˆˆˆˆˆ^T¢LŃ*Į®Ś /A8 ‰^ ½z¶ĆĻ?}ĘV]"""""ˆ¢ 6©)DGq3Lb %C3Qyøtł&öī GJJ:rsó`kgƒ ®hҵkėNāEDDDDD’Iył¦ŽŽM•nĢ&µ]zų!0ĄÆ¼«ADDDDD/33yk[ÕąVZ”Wˆˆˆˆˆˆˆžš¢(®e°KDDDDDDÆ™J\+@LĢ^lSP<;3ŃĖCžÆ°pōōl”%™Ā¦čŃĖĶĢÄD^(ģĘ,ź•kuˆˆˆˆˆˆˆŹ„"xģŠ@@łV†ˆˆˆˆˆˆčéÉŹųVƒ]""""""zˆ‚ØlŁEQP§œėCDDDDDDT„ŗ Äŝ®…<ŗ¼«CDDDDDDTņyn2…"Ļ·¼+BDDDDDDTVĢó*2ČŖ”wEˆˆˆˆˆˆˆŹŠ‚ÆL„Ā·¼+BDDDDDDTVDˆUd€Ģ³¼+BDDDDDDTV^2@t+ļŠ•¢«L€čRŽ!""""""*+‚(øČD®å]""""""¢2#\eąTŽõ """"""*3"œe"`UŽõ """"""*; +óņ®QY!˜3Ų%"""""¢WŠŃ‚Į.½b”-»¦å] """"""¢2d&+ļ•5»DDDDDDōŹa°KDDDDDDÆ»DDDDDDōŹa°KDDDDDDÆ»DDDDDDōŹa°KDDDDDDÆ»DDDDDDōŹa°KDDDDDDÆ»DDDDDDōŹa°KDDDDDDÆ»DDDDDDōŹa°KDDDDDDÆ»DDDDDDōŹa°KDDDDDDÆ»DDDDDDōŹa°KDDDDDDÆ»DDDDDDōŹa°KDDDDDDÆ»DDDDDDōŹa°ūœÜ»ą&Š©ó›Ouœ©Óę#øÉ$§¤•QĶJgßžćn2Ūw,×zгńćņun2W®Ü.ļŖ• ƒŻ2tżś]ō8ėÖļŅŲ&—ēćįĆ(D<ŽyŖsÄÅ'įįĆ(( Ouœ§•™™‡£žžY®õŠfśĢ…6|zyWć„–ššŽ‡£››WŽU!""""*Óņ®Ą«$%5GŽœAp£ŗŪ*Wöľ°•051)‡šż·œ;{ ÷īG”w5ˆˆˆˆˆØ½ŅĮnZZ’“Óąīī ++Kµm±±‰ČŹŹ†‡‡ ¬­­žy],--č§·L~~S Ļχ«‹#,--Œ>Off6’’R`bj'G{ė~Vņó ™‰ Ü\`nn¦·|rr*ŅŅ2!“ ššp-±|įg)“ pqq,“Ļ,%5©)é01‘ĮÅÅń©īUll"rrr.%~vYYŁHJNCA~\]`cSņõäää"66ö¶pr“/u]Ks/ssó“ søŗ:ĮŌT÷KQ‘œœ†ōōL˜™›ĀŻĶEoyP(ˆŽI€‰L† \Õ¶åää"1)¢BGG{ŲŚZv”Z¤¦f %% ‚ ĄĆĆę%ī“žž‰¤¤Tƒ>§üü$%„ ;;öö6pt“‡ „®/•Ž+ģNžņ%žZ·;¶-ĆW_’„“§.BE˜™™¢{·Ö˜?._ŗ‰g-Ę­Ū¦¦&čŌ©%¾]0..Ž€cĒĻ£O߉˜6u4¦MÕcū×ŗ˜<åK,ūß\ōļ× Ż{¼3g.KŪæ]ō¾]ō`äČ>˜’õT(PŃ+M›aĒöe€C‡NaŠą÷ńé'“póę=lŁŗŁŁ933S“mÓ_~ń*UŖXⵯYŠå+ÖįęĶūŅ:‚żńžū#Ń©c ½ū''§" °<½Üqśäķ‰‰)ź‰jÕ*įč?«„õłņ|Ģ™ūžųs;²²”u·““@mńÅēSąč`'•ĶĢĢĘüæ`ó–}ˆ‹K”Ö›šš QĆŗųhöŪhÜ8Pķ¼7īĮ²åįśõ{P(”]·A€æUL™<}zwlßqcĒ}¬¶Æ{…¢k~üč°P’¶j V®ÜŒ[·BE€L&C@Ż˜6ķĶļU”ģģ|łÕOŲ°q’“S„õ2™ õė×Ā܏' iÓ µ}6o Ć¢E«pūĪCµõÕŖłąķqÆcĈŽŅŗ¹ó¾ĒĖ×aĻīŸńż«±wo8ņó NŽöx捞˜9c,ĢĢ ūz/U%§¤aÜ[s°s×?ĖóŽv:“f}ų–ڹÓÓ31ļ“°uŪ~dddIėĶĶĶŠ*¤ęĶ›ˆš5|(_4Ōōė‚×uƒOE,_±éé™ߏ߮ijó×P Ņm߯¦/ŽŻ#Fō6(ĢĖ“ćŪEæażśŻˆŠŽ“Ö›˜Č䏙ÓĒ¢M›ĘŅśAƒßĒéӗ°g×Ϙ1ó[œ8yAzN<+ŗcāÄ”ófµsDDDćó/–cßžćj×īźź„ƵŇŽSū.ѳ÷J»…^ņ>š4 ĀŌFC&°oßqlŪ~cpķŚ]„“lˆ^½Ś#''Ä®]’ĄŌÄæüüY©Ī×µKjłWEllö†C`€źÕó4)¼ióĶüŸanf†Ć{Įǧ"SpžĀu„ķ;†›·īćč?«õ¶._±sę~ϊī1¼7¼¼<Ÿ_€G¢ŗó0†˜‰µ« ]»¦:įä䀶mcoŲ1\¹ruėÖPŪ¾{ĻQäē oŸŽjė.ś ¦&&5²/Üܜ‘ššŽŠŠĆŲøq’“R±vĶB©ģŪćēboŲ1ųūWÅ냺ĮĮĮé陸wļ1vļ9‚~&楞ߤ€hĻž£˜šīgØ\Ł' …»»3ņó šša¶n݇·Žž 'G{“iÓ¾¾^>¬ tēa¤§gbšėŻ„sĖdŹįék’ ԙߢf _¼7e\\‘—'Ēżū±eė> 1»wż„śõj•ų¹Mx÷3„††æU ÜNŽöEׯßÅ®ŻG0`Š„ķłµjU|Cޘ kōėו+yĀÜÜ ‘Q±Ų½ū¦Ļ\ˆ¬¬l¼óΐÆżƒ©ß`ż†ŻØVĶļ¼3.ĪČĢĢʃ‘Ųµūż;’^ jKūdgē¢o’IØ^­fLK s܉͛Ć0köbøø8J/RRÓѳ×;ˆŽI@ūvMįļ_ĪĪˆ‹KĩӗšŪŖ-øvżvl[ĘV^"""¢ēč• v߯4^Zžōī0“‚³gÆbņ¤a˜=ėmiیécмå`ģŁ{ry¾Į­dŖ&N 8qņö†CĒŽĶ @ )"öģžUŖx«­Ÿ5{1~łuBC£’ĪZ÷͓˱šŪ•ØPĮ’ž¶jŪnjéNĒą?ž„7؀޽;`oŲ1„ī<¬ģ†ī< A4‚]8tčwµnµļæ7mŪĄž'›ܼy{Ǝ”e‹Ųøa)LLŌs£¶Ģžśėf|óõ€5k’†µµ%Āöü''µņ}ūtD^ć±kĻ“iÓA~Z LJuįĀ Ü»… 4“T­Y 77gģŻó‹F—Ōķ›aųșػ7¼Ä`÷޽„†Fżzµś÷rēf÷ī#1źC¬\µ ¾™Xæa7`õŸó5īū£N@8xB#Ų­YĆÖ/Q»gćߌą&°mū~ƒž5cī„*Ÿ Ų±m™Śõ{0š4ˆµ…JĮnrr*ĀĀŽ”qć@üµf”FPēååoę’‚›7ī#  ¦“>77+–¢ŃŖüõüŸ!vļś 5ŖWVŪ6}ź›h2?,[‹ńćė ££ć±qÓ^ųa×ĪŻå9ƒž§`łŠuųiŧŅz…BīŻ[cž×SÕŹģ߯{¼ķ;JužćmˆŒŠĆ¼¹ńĪųĮjåEQĈ‘3±go8žż÷ ‚ƒt֕ˆˆˆˆŹÖ+™¹ųg33SéGf÷īmŌ¶™››!(ŠyyņrĖ,ܹS @€ŌRyęß+:÷½zõŅŅ20p@W@üP³¦/.^¼Qb=ŗv µµ%BC«­OIMGųѳhŠ 6*WöTŪ6 gń£ęčŅ% 8į:`ąĄ®.ōx­ ģģlpöģUi]|B2¼<=4‚3Ø_æ~łł3 еÄėR• __/­c/[¶lˆ_~ž Żŗµ*ń8§Ÿt[8°«Ö$;·„¹¹nŻ| ¶nĪĒļ vķjå]\aaaŽøø$m£FöÕøg.nTE«uńÕEļ½l ū^ŽŃGćś<<\Ьi=$%„"++[Z?{Ö[˜śž(­Į§—— V„ū:Ō ņ×ų¾ęääāĀ…hÓŗ±F  (»·kŪ ÉŅó„ĖÅK7”P(ŠÆ_'­ćĀ[µ †·—Īž»¦±mģ˜ė‚ƒąīī‚{÷Š 8q¦¦&5²FyA¤U…ß""""z>^ɖ]gĶōO~čŗ8kn+ü1_8.ļy«ZÕGėzOOwŹń²ŗn31‘įā„›ZĖX[Y"-- ­¦TĪŚ ]»“Āę-aøyėüjśĀö†#O.׌Ŗ«k²²²qåźmdgē æ @ćX>:•%äņ|äēēĆÄD¢%½÷ŅL÷½ŌuīĀ$Q¹yrX[[ĮÉÉļN|Y8}śRÓ2ƒŒŒ,dgēbĶŚæ@s,ßGóųIÉ©P(°±±ŅłLĘÓ))éšö® óŗÓJxīĄŻĆW.kĪ'\IKŻĄŹŹBJF(_ 8:ŚćÖķ‡Z˧„)_¢~ˆˆˆˆčłx%ƒŻ—Īõ2™ ©iŗ$§¤(·-^ņ;/ł]ļyrrrKĢ&Ū§OlŽ†ŠŠCš{efzõŌ ˆĢĢōgQ.T˜“GßŲc;[k$&&KĖ3¦Åķ;±|Åz,_±^Zoee‰ŖU½Ń¾]3¼7e„A™Œ Ķ›3#b°déjėml¬P­j%t킉†–˜„·0‘XaR3mŠ·“_½zcĒ}Œ;wi”õ¬č®6–U•Y ™Œ QŚ{©«NŚ,^ņ;–,żCŗ7…A€ö€T[+pJre×öķ;ź=gńs—‘©|ī¬ō=wv6ȓ˔P(¤±Ż`jjŲ?)©éHHHFĒN£õ–+LąFDDDDĻƒŻ@vv®Öõ ……B3}?ŗŸ“Fæ;ń “nÕHļyJšŽڶi''„ī<ŒŽ…ŒŒ,:|-[6„»»K‰ūė¢P(ė™’$£Æ6…­„…<<\š÷ö‡G£ńųq "£āš82ēĪ]Ćwß’‰ųų$,]2Ėązųśza’¾•ˆˆˆĘ£ˆD>ŽĮćČXDFĘāōéKųfž/HĻȼ9ō§°7€¶–XmDQÄø·ę āq >™÷.Z¶h{{[X[[ĀĢÜ ö¶ØéßÅąė0Ö³ø—ŖŽ†ŸÅW_’„ @?|šĮhŌ¬Q¦¦¦°w°…¹™)vļ9Šńļ|bб ;XōģŃƇõŌ[¶Ę“Žŗ>wņ|ŻĻ]^®––j®1DQDŊnų~él½å¼¼t·@QŁc°«EacSįåā“«|±*]wU„„gœõµ:*§3©T©"Zµ ÖZęžżĒHKĻ4čǼ™™)zöl‹ß߆ū÷ćĀÅČĶĶÓŚ…Ł…­×™™Y:ĖdddĮĪVYN”P <ü,\]P»vuxVtP4B”@ė¶Ć±{÷ƒ“¼<9Nž¼€ ŻP³†ÆFŚ<¹ÄīŻGJ vžL#SŲ ©ĶŠ7¦A&šēóƒŪwbČą×0žķ×5Ź(““gŠuėYÜĖā< Xøp†Öł¤iÕ,|¦]\u>ÓŃŃńˆ‹OŅ’"ŖĻ]¶Ī2™Y:{WĀĮĮńńI:ėš••ŪwĮŹŚųy³‰ˆˆˆļŽČ„ IDATØō^ÉUO«bå8Ģ"µn?vüœÖõ2Ay;óõ“"isņŌEiŽSU§N]T®ä©±­æ_Ą%c`ÄØѳ×;0tÖ“ĀĄ6tēa„††……9ŗum]Ā^śÕØ”L4téņ-­Ūćāļ'Ż]e2FŒśĻż^ky™Lww¤gdjŒ•ɍu€²nĄ ÷°`ĮÆZinfg½l”ŚO¦śW%”–ŖĢĢlf“ ŹńŖ …ĒOœĒģ–@&“”g¶zėŚøq ֭߅?­WKf•œ’†%K’Ą÷Š”}3ƒ»i6i/OwlچO }ūfZ3=£EóśprrĄO?oĄ¦Ķaˆ‰I€B”@FF.]¾‰w&~…Bn]‹2!שS'O^ĄŸ«w !!YJ –““‹M›öāäÉ Ø[§L‹iuuuBNN.žZ·S 6 °°0Gõj•¶ļ86mCRRŖ“Off6V­ŚŠ«Wļ 0H³e²øę-źĆĆĆæ®ÜŒuėw!66¢(BEܼõļ½’ čҹ%ĄŪ»,--°k×\»vGķXgĪ\Ęä)_ņžQĄ[»võRŻKC¾ĢX¾|ZVó¬¬lü¶j Ö® Čåņ%“ÉЧOœ;w ĻłĒHŪ²³s°isBC£zµJZ³˜« ņ‡·—Ö¬ż®ŽČØ8(••k×ī`Ā»Ÿ!''×  ÜŗōļŪ …cĘ}Œsē®I/ 8wž.ü2™ Ś7+õ9ˆˆˆˆČxģʬ…©© ¾ųā=Lžņ&MVžgi©ĢĄjkkQ#ūā·U[4ö«ZÕ ÖĮٳWŃ2D9÷n­ZÕšĻ”?4ŹŖjß®)VÆłæ®Ü ++KäēēC.χL&ƬĒĮļIė­.KĻĀą”ąć9ßįć9ß)Ēꊬn¹€rœź'ó&|żŹ`£#~ųß@ß>JŲ£d––ųž»Ł;nŽ™š‰tÕķ^=ŪašėŻ„åĻ>„!C§āƒ©ßąƒ©ßĄÄD++K)Ł•ƒƒ-¾ų|ŠĘ¹śõė„Obņ”/„ róĘ„ i„Ææž£FĻ’ź`ff ss3©›«««>™[ņ½273ò’ĶÅč7gaŅä/(3b«¾ÜhŁ¢Fī@™ėż÷FāĖÆV M»°³³µµ%’“Ґ'—£~½ZØU«’ hU.ŅŽKC Ųæ’± ®ŽuėwĮĮĮ …II©ƒvÅŗõ»Ō^0čóѬńøvķ.Vü“+~ZSS˜ššJYl±tÉ,½sģŹĻä‡>Ęš3ńĮŌoh>wķŪ5Åø±Kyå@Ū¶M0yŅ0|÷żjté6€²ūtaŠ/“É0cś˜æĒDDDDT¶^©`·G¶Ø^½ģķ4[!»woƒ*U¼„±–Ŗz÷ī€:uŖ«uĮģ߯ź×«…°}ĒščQņó PÅ× tAzz&¼½=PSķ8‚ `˦ļ°ćļCø{÷’į驜_T&šńGćQ±¢»Ęł;vlŽo¾žŠ’³wŽį5žm’eļ%;‘˜!fŒ"±÷^UжԨڵŗTkVĶØ]±7AŒ"ˆH‚ˆ FˆDdļ=N¾?Žs8ĪÉR-Ÿ¾æėrµyĘūÜĻ{Ž“¼÷sÆć'.šüy…XY™Ń­ė'Ō­[CfģAŻhÖ“¾Œ¬NN6\ŲÅ9ܼ߫u““LJKK15­†³³Ż»µ­0»š›Œś¼FFāś¹;µ–ėÆWÆßĻOc×: ē·ż¤)źźjŲŁYKŪ:wjMhšA|N]āžż(ņó PSSĆŅŅ”OŚ4”I“z2×pmT‡ė×ösęĢe"ī>"++‘H„––&®®uéąŃBaŻŲż;ćąPK—BˆO¦ØØ‹—%‚>iӄąė8}:€ū÷£¤Źž¶¶M›Öǽ}sōõ+gÅ_ė 'OśsļŽcrsóPSSĆŲŲ€¦MźÓ¾}skś”oGŅĮƍsēyž<‘H„¾¾. Ō¢göųś^%ę5+fĒŽ­011ĀÜÜDįśC†t£E TT*¶ĘVõ^¶o×-i}Ü7Šæ3..Īhk‰ŸC==|ĻlĮ÷ÜU®_'''U5UĢ͌ńšp£f ;jÖ“ĆÉÉgGž~žx…utA¬Ģ?ęɕ+7ŗN||"‘##mčŽ½­\}ē²hÕŅ•ąƒųųųs÷®ųsRQUĮŅĀ7·†“jé*3žÓa=iÓŗ±L٨י4qø\Ū¼¹_3dHwΟ$**–¢¢"tt“±“0”CĒVŅ2^oGq©>MøÆĖ³ - K*›% š`¢U„½Q=j¤ąT­ģü7ņ(%Ę_y?Åeøp!ˆ!Ʀ±xŃ4ƌš¾ÅųąHĻWcY 1B¢?’6ŹJ„ ¬›HϚåē,x…³+ šĮ²ż¶„ č ¢R%Ü5ē~Šöūå’Į²ū)**&'7m-ĶJÕĄų/ń8M‹Ÿżß·µs™ūɓ÷-Ę’UĢī’jjŖ*ˆ!Ø Ļ24¹kH~‘ąØ%ša ¬TŠ«E ̲+]ņ°<¢Ņ –€Ą›D„k!*UBYI°YV„ ģ ü²śŗ !q•KŌ& šoržI5Ģu ł¹Żc“Õ*.ĮXI¹‚盀Ą›–(‘‘Æ‚‘VńūåƒGPvžĻx–”)(ŗ4 Łź\Ž1¢³cŹßŗNiiŁęįŗę*hØ Y™>^bŅE$ē(>0*ē«!š‚²+ šĘåĆ÷-‚€@…\yfš·•Żņ˜ī®•ąĀ/šń²6 “w ß·’׏®€€€€€Ą’¹…²õµÕU•°3^śŽ/IŁ"Ņó^ÅęU\^@@@ąŸä£RvļŻ{ĢĮCgéÜ©5-Zøt›³¾WØ_æ&żśv|ĻžwX繑HÄ7“>{ߢČpńāu.‡2ztŖ[›æ79RŲøi?īī-hÓŗq™c×yī&55ƒysĒ”¬\ńĖģ¹óŽ*³_]] ccCš7o€Kg™¾õī%99 €I?ÅČČ Ģė,]¶555¦Nł¼B™ž-öģ=É£GϘ;g**Ā‹æĄ‡źʬīÆū¾Åų³žJŽw+”€€Ą‡ĆG„ģ>|͚µ;15­&Uvo޺ǚµ;8 óßVvoÜøĖˆ‡tļÖ£w!ņG‹×Žc—ü£Źīžż§ŠŌŅ w/JϹƚµ;鎭ķ{Uv<͚µ;§Ķ1Ļ2Ēzķ8ʓ'±Ģ3®R×¾|åžž»+5¶gĻölX’3jjā_»w'ņĮS2³²Y¶df™s7l܏––ę„ģ?~sēłī»/?(e7-=“ćĒ/PŪŁęĶ]Ž·8’ >*eW®źšĶ¤ĻØ_æę߾։“Y»nõėה݀~Zƒ©iµ*)» ūöŸBMM•:µŗ~›čč8ģģ¬Žé?ž0‘6mšČµ—””šųŃ3V®ņāĉ‹¬oø‡ÉߌćčhĆĪŽ|6¼7 ]œå®!P5ā“™1s)cF”]‰ĒōńŃ¢… ßĻ/ø0 |0„ŻŽ$2ņ ķŚ6cŌØ~”––²’Ąéw¾Ž­ ]œåž5v­Ė A]ŁŗåWŽ='7÷ׅS()1{Īļ”– 5Üž’ųč-»wīÕéŪ§­ZŗŹ]?88œ'/q÷±ō»cmmN§N­čѽ½Ō…zõšܾż€Ģ¬l.\ ’>ÆĶšÕgÜŲ!¤¦f0ė»ålŚøą_}>f>ze7!1ļć~Ō©ćHOŚPTTLæžßށ.66–Ø(+s’~.±qÓ~¶lž•®]ŚPTT„÷q?™k„H’ȐnŠrsó8x !!wPUUĮŅŅ ]]m?ŽįÜł@ÖyīfŻŚčŪ§q/ń>īGaQ¾¾W022ĄŚŹŒÄÄ.‡²{Ļ fĶü’ÓGWøĒ‚‚BzõĻ­°ūčack‰Jܽū?æklŲ°^Kpwo!3aā>‹²²2Õ«›£ÆÆĖĆGŃ\ ¼Åī=':¤;«WĶ“Ž?yҟ±_’@QQ1&&F’—_@DÄCNŸ¹Ģ¶ķG8urc¹īݧN]bü„Ÿpt°aŃoS„/õįį0p2éYhiibkcAI‰ˆ›·īqāÄE<×ļį„÷zll,yü(Zęó(,|õł˜šV«š^I˜=wwļ>ĘŹŅ+ksS ¼ʎެY5Aƒŗb` KRR*ŽĒżõy?œd®qŅĒļć~̜1¦Ņėsųˆ/ZZštėÖ-<īĒӧϹ‰ŠŠ2ę&Uj½±ć~äÜł@œmŠŠTēęĶ»\ŗĢŽĒ8峉N¶€ų»3hš®…”ŖŖ‚źźźDD<Āß?˜æž:ĀÜ9ć˜ņķHéµ·l=Ĝ¹+PQQ¦†“-šš$$¤pżz8ūöŸ¢oŸlܰ€ė×Ć9ė{E:÷ɓXéႲ²ųłĻĶĖ—>ƛXšÖ÷X@@@@@@@@@–ŽY'}ü gņ7#ø{ē$~ēžĀ÷ģVĀnåŠĮÕ¬\µ##㯐…I‡pśŌ&i[§Ž­ųsĆ>BBī0zT?8xFī'N^DII‰ŗTz]æ A¤¤¤ÓµKtt“čūŅÅžŸpe.“ōLRRŅ177QŲoiiŹ“©£HNNcÉŅMk­ßm !!…¾ŸĄĆČ3ųļärĄ.?<ĖÆ„ˆJDĢ™ū‡Ü¼ĒQĻX·ę{¢ŸųqóĘ™›ņx—@HšA®\Žß¹æøׇI‡“‘‘ĶŹU^Ņq{öœäZP}z{p’®WöāĮ‹»wNp9`66–,]¶™ųųd@|øņŪ¢ Ō©ćÄķ[Ēø“ ß³[¹ry7a·ŽŅøq]Ž;Ļ£ĒĻŲ¹c)‰ńWøtQüŻ3z€ōy•(Ä::ZŒч‘/Ÿ5wĆRٽ? €Q£śI³ŠJų¤M¾3€śõŖ–ŠźÄɋčńӏŃŅŅ”ékéֈ”Cŗ“ššAxų™¾īŻŚŅ»—‡Œėb£†µéׯ…<}ś¼Ņū3ŗæ\Śn|>²ŸŌ-Ä®”ßĻ¹¹±Ģx ęĶgż=ļĄĶ›wIJJeš ®r.¤źĢœńzz:\¹zS”|×®…1jĢ\lm,9|h ffÆÖŒ}žĄĶ[÷čѽ=½zŗĖÜUU¾<[[K.śWxŖĀē#ūāŚØŽL[żś5łbĢŅ3²øv- €^=ŪcddĄ”Cg‰Dұii\½z“¦MėćąP½ŅėJ\˜ūõė$mėŚ„ ŚŚšó>OAĮæS²!''_ż€vm›–9nÜø!Ōp²åÆķG¤nüoƒß…kŌ¬aǤ‰ĆQU•­»Ų„skzōhĒĆGŃ<{öB¦oņ7#4Ø+źźjUZož¼ń2īŹjjŖ|7ėKtt“ˆˆxųJ®—ß…_N‘ŗŹKØUӞɓ>£øø„‹ž×xž<¬¬z÷r—ó$066dŹä‘ōīåAa>G#C}–/›Åņe³fwČGļʬ=@\sučīr/ß ~ž\åkĘĘÄS§Ž“œ¢+A÷"‘&Ō“¶7iR_įx ±µ-)9Ś¬-ŁĻ… AōķŪQn?‹Éʛ&$¤P³¦lƄ/ć{££ć¤VŖZÆÅæŽŖŖ æ/’NF”póÖ=†˜‰„„)‡­‘S®ccāhģZGn®‡źųūSXT„ŗZՔž²p)#ưä#īE Vę‡ īŹŸöq5š–TŁ?}ę2EEÅ ŲµŅk¦gdqęģeŒ õńšxe”ŌÖÖ¢k—O8|ėÓg.Ó§÷»É.żó/ėXµŚK®=''ēq‰äååcjZiÓŹv•WWSćׅS2l³ē¬ąŲŃuUVČ ÉČȦU«²cm%ĻÜÓ§±ŲŚZJŪ›5kP„µ$¼yāĻŅÄĈĢĢWnŪ‰ )菥ČČUSö» ÆÆ‹²²2””¤„gJc÷%tķś ]»~ņV2 ¼[ž“Źī€žš\æ›iÓ3{ĪļTÆn!Ż“©nA³¦õqwoQ闶’™Y9ܽ÷ˆNĒo¦¦e—›/Ó®„„”p|UŠĮƒ»±qÓ~&LZĄ”i‹°±±ĄŹŅ K+3ģl-iŃÜE -~Ł×ÖV¬˜éæ— @f¦8¹Nyńø’Xä×ÉŹĢfč°é())q䊩’:éYlŽzHaV`x„häå nšn”ŻjFś Ūõ_$'§IŪFŒčƆū9pą“TŁ=qā"źźjōīSyÅōŲŃó1tHw9„½_æN>āˁ§ß™²›ūƳ&AC]ęĶąŅĄ™±_ –;€xw÷tļŽöeą€ĪU’Cņé”ń¼ü3'A]ķķ~Eéźi+lWVVF$*‘‘M[[«l¹ õdä266dš ®ģŻēƒsķnXX˜`ee†••ÖVęŌ®ķHĻķ’V|³€€€€€€€€Ą»į?©ģš™piĒŽžēĮƧÄÄĘó".?ækR%gšąn¬]=æR×+,,D$”ÆÆGƆåŪammßm-Uk+3®^ŽĶŃcēyų0šŲŲxžĒ%q÷©©€ŲmwŁŅ™äæt±TVVģÅ.)5£ņŅB,‰ÖŌPƒ\zśŗōķӁ5kw²yĖA¾Ÿ?^nŒ$6ÖÖʒ5l^GrO% }ŽŹ** ŪUU${~e„®YĆ· 9qņ"KO§°°’KĮtźŌJβWūˆ]˜ƒ‚Ā8xŠLŸ$ń’ß…k$%„V)ŁVY,Y4]&łßį—ŸæĮĻļ?/XK×.mŠÕU¬L*"Ow^ĪŽä™S}KåömÉ/(@‰ņä’Wå5o‰•Ģ”wo‚‚Āx—HlLzŪ½Ž2}Śh,,L¤JkNnžĀXH‰EPĆ(I¤”ńŅĀ«ˆÓ§HIĶ`ų§=eŚēĻūš””t֬݉¶¶&Óßp™•XÕśōńP(’?EJJšĀö¬—VoccC™ö#ś0aāϜ:@Iq ……E Ō­ŅėEEŁšš* )RWņ×ŃŅŅ$//ŸĆG|7vHvóĻcccÉäoF°tŁf–’¾•Ÿ~œT鹒ē­,K3¼:ōØLłŖw‰¦†I™©eöKåzM¹WVV¦c‡–tģŠRflQQ1›·äǟְŻė³f~łĻ- š·Ų²e ÉÉÉrķ˜˜˜Š A6l(׿råJ 'ÕŠŠĄĆĆÅU  &&†ĀĀB“µµ±µµ„{÷ī8;ˆVÅÄİ{÷ī2å733ĆÅŅ&Mš”·M9<==ÉŹŹRŲ§­­M5pwwGSSģ‰%‰X¶lY™×ÓŅŅ¢sēĪŌ®-oč)--åŅ„KKQQŗŗŗ888Š£G^Uøøqć¾¾¾•ŚC³fĶššx减‘‘‘dff¢ŖŖŠ‰‰ mŚ“ĮĆĆ•2Œ<ąÄ‰<{öŒüü|LLLhŚ“)ŻŗuCCC±×ehh(/^$::š‚‚“““Ø^½:]»v„~}ٰĸø8vģŲAēĪqu•/a(šļńŸTvG™ĖܾuL®ĻŲؐZråźMž>}®XŁ-•żQYY āāĖ\óą”³lŲ°—ysæ¦}ūęw 2 ūt:£bø~mæ\Ÿ™™1īn„†F‡…… ÖÖÄ=OTh™|#N$qõu°··?‹+S†¹óWRTT$§ģ*))±|Ł,RÓ2X²t3ZZšL?LŚo’ņž¾x#«ˆ3—vŸĒ’DćMėri©āI%_[Äu™¹ Žz¶gŽü•|8kÖ¬ażśõrkmٲEįZOŸ>„oß¾ģŚµ ooļ*ķ»cĒŽ ƙ••…§§'ŃŃŃ|÷Żw2s¾üņK…s"##iŚ“) .$**J:~üųń\æ~%K–ššŹÓ§Oyüų1 DEEŃ«W/~łåöīŻ Ą¤I“䮯¶m[lll䦗/_@@@3fĢ iÓ¦„‡‡“””ÄćĒ‰ŠŠ"33“mŪ¶ńšįC,³—mŪ¶±|łrL\\ŃŃŃ<}ś”ÜÜ\öģŁCZZ¤¤äU~Ÿ~ś ooo&OžLBB111<~ü˜ŲŲXāćć?~<Ū¶mcńāÅUś,žž“–ŻĻ>ėĶŽ½> 2W×ŗT·6G__—œœ ōčŽ½-żūubź”Ļńń¹ÄWcægõšŌ®ķˆ–¦ii™‡„ŸĢ A]«T¦¦²|>¢GŽųҧßD\]ėbSŻ]]m²³s¹Nll<]»“‘*ŚŻŗ¶„±k]:ĖÕ«·p®ķ€‰‰ÉÉiDŽB܋Dš6­O—.bĖ•¶¶³f~É?®¦e«a4jX›ź6”—š,ę””Ø««ńķä‘eŹØ©©ĮÆ%ōé7‘ŁsW „­ÉĮŻPVVę矿įėń?ŅŖĶ0ÜÜQŻŚœŅŅR’“ÓøJAA!3g~!wĶF ksĢŪ–­†Ń AM444ųuį”JÅJŠJD“l=”–n033&'' ƒHMĶ`ęŒ1¾LTõ:Ÿ}֛?7죸ø„Įƒ*Ÿ…9šŚ-bb^ą\ĖžśõĖ.i„¤¤Dæ~X³v'ūœę§&Źō»µ*ߌūĖ‚o錄M„åzŗviC7Īū](3ūų›Ģ˜6šĖ—C}ĆĆĮĀÜssc.^¼N;÷‘8:VĒÄ؈eKg’–žÉŒ™KńYo”ü€€€Ą{B[[›Zµj±bÅ īßæĻ_żÅ¢E‹04¬ŲėČŽŽžŁ³gsįĀ®_æN“&MČĶĶe×®]ōčу… ŹĶ±¶¶fŪ¶m\½zOOO&LPģłõ&vvv¬\¹’£GDß¾ņayUEWW—ńćdzk×.®]»V©9µjÕbŚ“i|śé§„„„ąččHbb"ŽŽŽŒ1‚Y³äCūŲµkööö¬_枔C‡¾•¼›7oFMMC‡aii)Ó§©©ÉØQ£xņä , 44Tźņ½zõj¬­­ńņņB]ż•EYY™”C‡ņųńcęϟOPP­Zµ¢¤¤„m۶ѦMV­Z%'‡¹¹9ėÖ­#00OOOęĶ›÷Vūųēųؔ]mģģ¬Š×år¢„„†Æ¹ė6jXŸ ü¹a!!wˆŒ|BNNśz:Ō¬eĻŠ!Ż’µü—ĻĆĆÅ‹¦±wÆ÷ļG‘’’F:ā—`+K3ĪŻŹ:ĻŻ\åģŁĖäääallˆµµ9ĘŹ—_ ”^K[[ ;;«2c ō°³³BKSqÜĄė4oī‰ć²qć~BoDpļŽcrsó1Š×„f-{>Ł—qc_l©©©ršĄ*ÖyīĘ×÷*7oÜ%3+=¬9²ćĘ‘Q<¾7;[K¶ļ8FDÄCBoˆćO éŁ£=ß|ó^KĪeme&g5Ö××eߞŒü|6¬ÜŽ­nn éÓŪ s6m>Ą›w G$*ÅÄĈOŚ4įĖ/āīŽ‚7Y¼h:ŚŚZ„†Fp9”ŅR&Įzƒ—÷u§×R¶n;Œļ¹«$]¼Ž††:µjŁóżü |:¬‡Ā¹¶6–ččhaanBćĘu+ü\$„bggÅgŸõ®pģ€žš>īGhčJKKQRRĀŚŹL”±,Œ õ±³³*3ŪvyXZ™‘_PX®ĀõėĀ)D ŸH$’‹m.‹¦Mėćsržž{¹ĆĆGшD„éćŽ¾9ŸŽÆÜĀ%Ÿ“F%ž’×133ĘĪΪ̤So>—†zœ>µ‰U«wp) „kAaäęęa` G­šöōŁĻ†æśÜTT”9|h ė’Üùs]'33 MM Ģ̌2øćæ*g”VUUa÷Īå,^²‰ū‘Oš={UZbIUEåńųØ*OŸ>­šw¾¾>&&²^O>¾\ł¬¬¬ŠŌŌ$11‘ģlł<śśś ‡j•`芔œ:uŠąą`:u*Ū+ėuŒŒÄU+ ʼn@#""ČĶĶ„gϲCTTTčŌ©6l ++«ĢgūMlmmQUUåŁ³g•_Y ”±l–Ē›{ „¤¤¤Ü=kiiŃ®];Ž?žÖrÓ“iS9E÷uŗvķŹ‚ ¤‡999ܾ}›Ń£GĖ(ŗÆÓ¢E ŒŒŒ¤īŽQQQ$''Ó£‡āwĆ××Z“h111ŲŲŲ¼õ¾Ž=•²ŪĮƍą 2m­ZŗŹµø4pĘsķU^cĢčŒ=@aŸ„„) łö­e}Q£ś1jTæJĖÕŲµ.®’©Ņćuuµłn֗|7«ņItŗukK·nm+5öš”5 ŪĶ̌9}j“\{‹.r®ĆallČŖ•s«4gü×C„KOg ÓĖŸ–žIB|2ŖjŖxzī&;;—±ó—;ēMŖrŸėÖ­!÷\”u/ĖāŪÉ#ųvņˆ*Ķ‘°ļŽqt“!(p_•ÆķŅĄ¹ŅĻčŲÆ3ö«ŖŻggJ.E÷ŅĢ̘_NQ0Z1zz:̚łe•P5hP‹];å}XX˜”ū»@@ąß¢qćʤ„)NŽ'aÜøqüłēŸ„……1iŅ$¹c%%%š5kĘāŋqww`ėÖ­L›6Mį5ßdöģŁ,Z“H¦-++ gggrrr?~<žžž ēvźŌ‰ČČH…}jjjōéӇ7J_ŠE"NNNŒ=š­[·–+×ɓ':t(ĒŽ£woń!Xvv6“'OꥁrŹ„••S§NeśōéRå299'''fĶšÅ’%KŹ\kÖ¬Yüõ×_ˆD"”””8ž¼tĶņø|ł2­[·fźŌ©e&8RVVĘÉÉ‰Ææžšoæż¶Ģ>’uźŌ×kšąA„•]š7ēf‘(¢åĪ333£““”ŌŌŌJ+»III£«ūnKŻÅĒĒ£„„…ŠŠJ„Śżżż„ßyØŚžóóóÉĪĪ~«=DGGK?£ņÖ¤ÉȒ““‰D ¢$tģŲ‘ŌŌW‰+«²€””AŁżĄųؔ]wĶõėįŒłŹ ē“Ošņ随'gų¢aƆåŗRJ^.³²²čܹ3"‘ˆÅ‹Ó¬Y3“µµIKKćÖ­[¬^½šnŻŗqūömjÕŖEĒŽٰaƒĢµ–,YBff&æžś«L{£FäÖ=tč999ŲŁŁ±oß>žųć23¦Ö«WüQ¦-//???¶oߎ””!›6Éŗ¾ ćʍcĻž=L˜0®]»biiIff&111l޼™™3g¢¢¢ĀŌ©Sߣz7.³ßÉÉIś’JJJ҃ %%%$$$ąķķĶōéÓILLā Ė@āŗüfBŖ(<Øxōč^^^Œ7Ž–-ÅŁśsrÄy¼ŽDĮMOOĒĪĪ®BŁD"‘4vU²Ö» 00K—.Ѷ­¬a#,,Lįž#""Ų½{7sęĢ‘f”ĪĶ×„ÆŹž«Ŗģ–––’——Wé522Äe8%ŸeUÖ{›ĻPąĆBPvŹ””‹3«WĶ#''G‡ź“mŪģ_+ų·°³³cģŲ±Žóńń!11‘ƒ2`€¬·SēĪqss£]»v8p€yóęŃ A4h 3žØŌz^^^XZZ²lŁ2̉'ä֕`ffĘ AƒäŚGŽÉÓ§OŁæ’;QvóņņŲ·oƇ—ɾ+ačŠ”ŲŁŁ±k×®w¦ģvģŲ‘V<š%eŻŪłóēÓµkWžųć&OžŒ••Jń&k¼Ä=WBDDD™™ƒ5jÄōéņceK–øŌ¾YÖhĮ‚ ½bbbHLL¤E‹ 6L®æ<®_æNÓ¦MåŚ³³³yšąŚŚŚrńÅĮĮĮĖ'˜hŻŗ5ćʍ“ž\ś²JĘŪī¹2Tuü|q"SÉgY‘āŖˆŠÖR{™“ōmö#šĻ"¼µ ”ƒ…… C‡tē‹1pwo!(ŗˆkH‚b+¬¤ŻŃŃQś’łwˆŽŽĘßߟ!C†Š«W/ šņņz«kÕ¬Y“ĢĢĢw"Wbb"%%% 뱂ųE»¼:ŸļUUUf̘Aaa!gΜyßā|H¬o*Feec !)) iÜø¾¾8_ŒÄ:Xyyy ×255ÅŃŃQīߊ”Cٲe žžžez8”…–––Āk¶nݚ… !uƖ (sII Ü»wīŻ»KPɞŌWfĻ•AYY==½ ×xÓŹ,±ÖWåū’w?C÷`ŁØ’˜·[·nÉøĪJŠ××ēńćwSBmēĪˆD"† †¦¦&żśõc×®]$%%U˜TźMĀĆƱ±±AS³ź üŽÄŌŌ nŻŗUę˜]»ä˚}(Hšņä’/#IØV^¤×iҤ &L`޼yÜŗu‹f͚IµUT›W¢XKā>%Œ?ž1cĘTUōriŠ ū÷ļ’Ū×QVV¦M›6Œ5Š+VšäÉ„{ĪŹŹ*w~FF***W\AC®!¹ļęęęҤpå}įįįōķŪ—™3gņõ×_’ķĻPąż#(»€Ųb{ą@Ł Ó:w=zōĄŚŚš‘#GrņäIź×Ə••666ŲŲŲP½zõ Żž*ĖŽ;ØQ£†T96lżõ{öģaņäÉrćåöPPPĄ©S§ aĖ–-ļD.mmm>ūģ3¶lŁBbb"mŚ“ĮĪĪkkk¬­­qpp(S©¾’~¹÷łéÓ§ Ū„“7144¬t"%æų«««W:Kö   9÷ūņüHīi­ZµńĀȑe—g ĘŲŲXŖ”ż?ńśžeö\^ćąą`œœœŖl™–P³fMnß¾MIII™Ž×ėŗuÅ4$YŠĖrɤµz%Z'''TTT*< ASSSšA]ąĆAPvń ŪąĮegBĒĄĄmmmüżżłį‡8wīŪ·o—ÉÜŖ££ĆŠ”CY¼x±\©¢ŖDdd$ß’½“ĶĆĆsssvģŲ”PŁˆˆ(sĶ›7§U«Vo-Ļ›¬]»+++:Ä¢E‹dÜ#•••iŪ¶-æżö›\!ooo¼½½«¼ŽŠ+Źģsuu­’² b—ĖŠÜ3’‹üšįC¦M›F›6mø’¾“üŠßASS“ °`Į@\ęŋÄÄÄpūömV®\I—.]øwļÖÖÖŅycĒŽå»ļ¾+óŗ³fĶāŠ”Crķk×®„[·n ēTÕBVZZJNNĪöå<&&F&±ˆ³UĒÄÄHKķܹ³J5‰%.ÆÆĒ’®]»www5jD=Ø_æ¾ō!88˜³gĻbnnĪĻ?’üvõļóꞕ••Yæ~=Ż»w§nŻŗōźÕ‹Śµk£©©Iff&×®]ĆĻĻ''§ræńÅ_°gĻf͚ÅĮƒiÓ¦ fffńäÉŽ;FZZ›7o–‰£żłēŸńõõ„WÆ^téŅ…¦M›¢””Į‹/øpįwļŽeśōé2Y±W¬XĮ'Ÿ|BóęĶ鎽;...čč萛›ĖĶ›79uźr%ÓöģŁCXX˜Ā=4nÜXīx÷|ŌŹn||2„„„XZŹĘōÄ>OąIT 99yøµl„”Aåjšż] ‰OĘĄPļ_[³Ŗä琐‚™Y5““ŖӔ˜˜B^^¶¶–mĮś„„ņó °³ūoe®|›g7īE"E…Ř›£©łvnJ’.:::•rĆĖÉÉ”°°PŖ0ŖŖŖJŻwŻÜÜ4hEEElŻŗ•ŲŲŲrėZ–EAA{÷īEKK‹•+WŹōEEEbeųĶŅ9’>>äåå”§§‡““Ó¦Mcśōé2u\%ĻpekīV[[ŪJĒ ƒŲźččX®wFõźÕqtt”‰iķŠ”7nÜ`łņå\øp£G’ŸŸ5jŌ`žüłL:UC«+++™śŻo¢©©ÉłóēY»v-‡bėÖ­¤§§£””……īīīLš4‰vķŚÉÉĀņåĖ9uźdggchhHƒ Ų¾}»œĖy½zõ¤å—|}}9wī999čźźāąąĄ„ ˜>}ŗŒ[āŅ'Mč÷&’ Ī’,­²Næžß°ā÷ļ<ųÕ)茙KńŚqLś³ļŁ­ŗČ»•üÜŗuŸ^}Ę3sĘfĪųā_Y³Ŗ(++3ś‹¹ŲŁY±mĖoUš;mśĪś^!&śēIńÄo~įŅ„`㯼oQžUĀĀīÓ³w՞ŻO‡ĻäīŻGÜæ’¶m›żĆ ü›Ģš5 OOORRRŹ|a•ø¾xń⭔ݓ'O’ššŠ………B„D[[›]»vńŪoæU:>ŲŽŽgxž»ųūūÓ©S'6oŽĢ_(ž½ųś=ųА$S”`ģcēm3P—e”“PÆ^=…‰ŁœœœäźL—GóęĶßY‚·×¹r„jļ.ŖŖŖŹŃŗuk…cźÕ«Ē¶mŪŖ“ŽėģŁ³§Ā1LŸ>]a¹§ņ033céŅ„,]ŗ“Ņslll–+‹† ž#Ÿ”@Õł(ėØäē0aŅ:vj%£č޼uÆĒpp؎ēŚ8ø%ŽU’üoxķf­Y²ts™cf~· 3‹Ö>>“k×N&Öõu† ĘĀ… ٱc‡Lb¦¬¬,…{xņä sēĪEMMM.Klrrr™ūVWWW˜‘׎ŽwwwžüóOtuuéŃ£VVVčźź’’’BPP?žų#ŚŚŚōķŪ·*Ū/“ØØØr?GGG™Xä7Ē‘€··7[·n„K—.4iŅäČö!PĖŪĒÄŃ£Gß·,²›–ž‰ēś=ōļß ‡—VŪčč8¢£ŸsēĪC^¼HāŅ%qŚqW×ŗčééPTTLXŲ}G՗›²Š2¶6–4k֝WĮķ"‘ˆĖ—C177”V-{BBīšąa4::ZōķS¹ŅŅŅRBC#øł„ā¢b¬¬ĶhŻŖ±Ģ:7oŻ#+3›»÷¢^īć¹TnK+3lŖ[pżśmńžā’ ¹Cü ń’7lX]īŽ}DJJ:Ÿ|Ņ”ÄÄ‚®ß&5%M- œhčā,c;uź(vī:ĪęĶ™1½źccć¹t›œģ\44ÕqiP‹ŗuk(›››Ēµka$%§‘—›ŗ†Ž64iR55łGT$qļ^a·ļSXP„Ŗš*¶64iR_ęž½N||2””$'§”¤¬„©‰×ĆÜ\ńé~bb ×ĀHOĖDUM•:uqmT§J÷ 44‘HD³f ˆŽŽćZPłł8:ŚŠŅ­ŖŖāTł·Ć#¹yć%¢j8ŁŅ²„«Ā}ēääq-(Œ¤¤Tņó P×PĆÉŃ–ĘėŹŒøJ©HÄćØgDÜ},½/5kŚĖİgddN\\"¢ŖjŖ89ŁŠ¼™ **Š?=»­Zŗ¢««-3īŽ½Ē$%„āęÖuuq\Jąµ[hkkŃŠÅ™˜˜Ż&''s źÕuĀĘF±õ£  ą;ÄĒ'““‹šŗ*F†śøŗÖET*bńāMddf³}›|rŹséŅ%š6mZfÆ^½šööĘŚŚšćĒ3vģX¾śź+…c;tčĄöķŪßJŽ={öPTTTn\mŻŗuiŲ°!‡ĘÓÓ]]]@œQŗ¬=°qćF¬¬dó.?~œćĒ+œcggWf) Ż»wóÅ_°dɹŲaÉÜƇcccSę>ŖBE }öļßĻ Aƒńļź²īƒšš#FŒ`͚5ļD.•NŁŻ·ļ¹¹łōļ÷ź”w’S,[¾Uśóļ+^ÅųžŻJCg._¹ĮäÉ ‰}ž wM==~]8…”CÄ)Ź‹‹K8x ķŚ5£Ø°˜«7hŌ°v„”ŻŒŒlzöOppøL»‘”>®’ w÷Ģ›æ’;Ņžƒ‡ĪršŠYFźĒ7‡3pš™kL™śźeßūØ'nn Y¾b'Oś3oī8-ŽHI‰HfN³f Ų±} ÕŖHŪ¬­ĢhŃ܅M›0ł›Ļ¤ŹJeX¹Ź‹•«¶Ė­ćīŽ‚Ķ‘.œ>s™oæż•“tłbŻęęĘlŚš nnÆŅžG>xŹčŃsxōų™Üx}}]/šĪĄ„m…EE̘±”żNĖ”Åqā…Aƒŗ²ā÷ļP-IĄ’„›Y½fEEÅ2ćŪ·oN^^>•eڌ%defÓ«—;6ī—Yæ~żšģڱŒ¹ó’ąäI™yεģ9°ÆBœ<éĻ”i摑‘Ķ›XZš²yć/4k&¶< ūt:……EŅž„Ė^¹æÆų}6Ÿ »qmŚ|€_®'?æ@¶–lŁü+ ߈gOOĻ*óŁ]ļł#nÆÖść/Žyūqėę¬,ÅEÖæüź{lm-iÕŅĻõ»ežeee¾üb łVęŚW®ŽdģøHJJ•“SUUSÓj¤§gįįŃB®_@@ ņ9r„¢¢¢rǼžØĘŻŻĮƇIMMESS###ź×ÆÆ°äČė¬ZµŠĀĀB…}ķŪ·Ē××777…żöīŻKll,ÅÅāß×[·n%77WįŲjÕŖQÆ^=™¬ÅJJJųśś–»†¤V®D¦×KŃXXXpņäIāāā #)) ‘H„””!vvvøøøČŌ522Ā××W&Ó«"f̘ĮšįĆ„Ń-[¶¬PNxUvΜ9 KŁ())Q­Z5œŃÖ֖ėųŲPJŒæ¢ø:ł’)½ūLąĮçܹ}\j9‹Œ|Bäƒ'\ŗ‚׎cŒ’z(Mšˆ3ģµmیŅŅRš5DAA!S§|N›ÖŃÖÖ"3+›{÷¢XžūV22²øp~;ĪĪQݶ=†z|żõPźÕ«‰©©]ė–%AA·éÕg<**Ź“j՘‰ć‡akgEzZ&gĪ^fĶŚ]čqėĘa““4 øJZZD³tŁƒÖ? IDATfzöl/U¦ķķ­©įd˹óģŲéæ0æ,˜,µÜµiŻ„jÕ óåŒfīœq“j劔i附…ŻgŃādgēr3ō0¦¦ā„)?üøš?7ģ£c‡– ’“ÕmÄŁccāŁ¼åW®ŽdŹ·#™;GœśŻūø_~õ=µk;2wĪ8źŌv$//Ÿ{÷£X“x#OŸ>ØT‚Ŗvī#¹wļ1ööÖ̘6šŚuÉĖ-`ė¶C9zC=LLŒ˜9ó œœlHINgūŽcųųų3fō/šˆ½\÷CCCƒÅ‹¦ŃØam”••ÉĖĖ'$4‚ļ+ʁWöpāÄED„"|}Ʋo’)&NųWW±UŗQĆ:ŲŚZr5š&żśƒ„…)³g…“£ ŚŚZäęęį{ī*ėōŒ,ŽY+掯Ŗ•+µėvēŹ•WqVׯ‡“››Ļ7“>£_ߎ2×®]Ū‘°Ū÷پż(łłhjjгg{āā’€S4oրnŻŚŹĢŪ½ē$„„„¬[÷­[¹Źō5kր¼¼6lÜǵk·ųä“Wnpe=»‰‰©ģŁ{’7Åßæņ()±yć/4oī"m«SĒ 33cŹµk·¤ŹnRR±ĻčÓŪCī»éčhC͚v4n:ąo'fų˜ŃÓÓ+·¦¬ÄżW@@@@@ącć£Rvcb^PPPˆ½½ādeńč‘Ų%ö“O+t’—ż{÷dSˆ»4t®²¢ йskeAB“&õŲ»ĻG”»ę» wo¹6%%%<qÓ¦MĖżŪKHHÉÉÉhjjbkk‹›››ĢžßäŃ£Gܹs‡ÄÄD©Ė“&M¤%Ė^',,Œōōt¹:¾•²›‘)Žg|Ż:Y²sÄń=zŗŠ¹čźj£®®&WjdØ’R‚‰±āv‰W^ķæƒ¹™ādL&&byŅ3²dŚut“PUU!%Eń„²øæ‰ńK„699 ēZöččh”¬¬„Ļ©KDF>!55ƒ‚‚Bņņ ČČĢ"𪸜Ci©Xѱ“0„N'6nŚO䃧ŌvvĄŚŚk+3,­ĢØUÓ^&stĘĖĻėĮƒ§¬Y»S”L‰‰)€8I–®®6)©4hPvĮx33ć*)»e•ŻQQQFSSCįGeeŁ6-””ĄēT‘‘Q¤„eJļSzF/cĘ%÷©2$%„bblØp}7™ų[ e)ÜÆž]‘Āž×12Rü½‘ĵ•¼ŪldØO£†µ9}&€5kwŅŗUcŒŒōÉĻ/ īE«Wļ åkqŻå1uźT._¾\f杝ŽŽŽøø¼:˜ķÓ§ķŚµĆŪŪOOOVÆ^ ĄĪ;>|øÜuŅÓÓéŌ©sēĪå×_`ęĢ™\øp”̵µ““;v,Ė–-“Qś*āģŁ³Œ5ŖÜ1ÕŖUcŻŗuҰ///~žłērētźŌ‰``šŹ0Ș1cø’¾Üx%%%ś÷ļĻʍ„5ø‡ ł{÷U™>|ü{¦fZ:i¤Š« ˆ‚ŠĄŚEŹ*Š¢Ų ŗāŗŠ¢Ø/"vTĮŸ‚¢č® XYĄ€ō"„ō^¦×óž1ddH! „š|®+äŌgΜ̜ū)÷3¾ŽsMWĶŻm·Ūyä‘GX“hQ¹’’’˜7o×\sMµż§L™ĀŠ+Ŗ=EGG3gΜj×銔CLš4‰ß~ū­Ę2 6Œ… Ҿ}ūĄ²ēž{Žõė×SZŚ< TBÓiUĮ®^ēoŃ;99O}X,ž`W£­½¶'$D‹×Ó4Ač©ĮĢŁR[¦bƒĮŸ¤Āl¶-w¹Üx½¾@Ki}š•÷ŌóW§ØØ”kÆ€ĢĢ,“Z qqэzTJ%‘Qį Š“_Ó·ö—$‰%ŸĪę•W?dćʝ¬[·ĻIļ‰R©`ģĶ£xćõ§P©”ŹÕ’ŻŪ\»Ż‰ĒćÅnw ÓÕ>/¬”–×֜ņó‹¹öśū9v,—-±±QėA’‹{’¤Õ—Ėå&¦–ŹŗŌ–”¹!Ņ »fĶ& K‰ęÅ—Ž«¶^„Rr÷]7Wė¦-‚ uIKKćĒ Zf6›Ł“i>ś(÷ß?éé§ĻĻ‘––Ę“iÓøöŚk ­_#H›6mŖŪn·“——Ēāŋyūķ·Q(¼ńĘõA'¼’žūÕ²pū|>:Ä3Ļ<ƤI“4hPP’“ļ¾ū®Z†r»ŻĪ’%K˜?>3fĢą­·Ž 77—Ń£G£V«™7o#GŽ “ČĢĢdٲe¼öŚk”——³zõj~śé§ €uĒŽL™2…žóŸŒ3&č¼U×pźŌ©|ųį‡Lœ8‘x€Ž;¢R©Ø¬¬dćĘĢ˜1ƒ1cʰaƆ é³&L˜Ąš5k˜>}:ūŪ߈‹‹Ćl6³cĒf̘Įäɓ‰‹‹cŌØQŲl6FM~~>³fĶāśėÆ“LēääšĆ?šüóĻ3jŌ(~’ż÷:[†…–©U»±'²×VĶ­/Չ%g Yi«ŲķŒ¦†w+iIŹĖ+ƒ2!W©źZrźŗ¢ā2dY&j꣢ŅRcĄk;Ń5·ŖõuŽ{Ÿ“™™Å Ļ?Ģ”»Ē³˜õŹ‚ ` ))ž¹ļ> ų[ ‹ÉĪŹēxV>K—żĄK oß®ÜyĒMØOtAzįł‡ƒĘųÖÅhŌc·×~T”›k]×\ęĪū?ŽĖå嗦rē7U»N3_œ×ą`W«Õ`µÖœ±üĒ-V!ZM­­ÓgƋ/æGDd(欞„?žČįš‘c8N$I"<<”n]SkmmA„Śh4:tčPmyļŽ½Ł“i .Äb±œvLū[o½ÅÕW_ĶĢ™3yķµśĶ/ÆV«kßųę›ofŌØQ¼÷Ž{<żōÓAŠė#--­Ęc÷ļ߃ĮĄ7ŽČš5k‚Z7{ōčŌjYeȐ!üüóĻA™Ą?üšC***ųļ’Ė嗏»č¢‹øč¢‹P*•Ģš5‹Ķ›73`Ą€ r 1=99¹Ę²–••ńńĒsķµ×²xńā u¤¤¤0dČ:uźÄkƽĘēŸų[œWÆ^Ķ“iӘ9sfŠ>ÉÉÉ <˜””ęĶ›vW¬XAff& ,Ø6ZUfłØØ(ī¾ūn–/_^ēthBĖŌŖŗ…‡™hÓ&’kP“Č˧vć­b6[q»=5ŠgSCŗ©Ö$÷Ä\¼§**ņ9uģlUęįŚ^Õ¦  ø–óśĻå?Ļ®] ŃrĻ”qÕ8šww>Łž=‡yń„÷Ų»÷ąoeLˆaĄ€^Ü<ęŖ@¼u›ĢJLŒæūLeeõézŖüō“æ{lUksDDXµóž,æ–×֜vīŚŃØē®Écźuź#66ŠŅҊZļ©U«ŅIė<Š…Żąc7%I’ČČČā…ē±nżV'įa&’“HNŠÆµ·‚ ‚ 4VU€YQQqŚmĢm·ŻĘ;ļ¼Ć¾}ūĪųܒ$1eŹėׯ?ćć¬j¼q]ćtO-KrrrŠuX·n‰‰‰ÕŻ“?šsnŒ7āv»¹ķ¶ŪjŻ&))‰!C†°vķŸÓ7žņĖ/Ü~ūķ5īÓ¦MzōčĮžżūĖÖ­[‡R©¬±z•qćĘ”T*żz„s«U»WĢ޽G°ZķõާgNü·–®®U]`»v©^x6T%Ŗė5Õg›oV¬®¶ĢķöšĆėŠØÕՂŚuė¶5'œŖĖ©óĘVēē•ézŚ·ó'¾RŖ”ø\īē®u»=ÕZ+ĖŹ*x÷_KXóæM5ž×lö×*NŒCķŲ1“ÉĄźÕ‚ŗ;Wńz}¼ōņū¼öśĒÖĖž=Ó8z4›ƒVŪž·ßvĘųžM*„‡Ć‰ÓY=õ¼Ėåög뮁FćoŁ®éžč×·f³•_ŻVmüYaŠ©SŻsA6·ē¦?€,ĖĢ›÷L{rwOy–›ĒMeÄU“é?p,ķ:\É !ų꫟Ļi9A„ÖA–eÖÆ_O||<ńńńõŚgöģŁčõz~ųį&)CÕ\Ī{öģi’ćU©¬ō÷|ŁĒåĆF^~1Ÿ~ŗ‚żū3øåo×Tk%[¹*=:՘™ø.ļ½’9n·›ĮƒūF~A1Ÿ,ZAVV÷ß7!Ģh@’^¬]»…)÷<ĖŻw%::—ÓÅäšŃĒĖ9~ÜŸĢĄfók½{w!4ŌČkÆ/¤²ŅB÷īˆ‰‰ÄėõqģX. >XĄW @£Q3éöų×ÜĻøiĢĆüķoW“Ų6I” ØØ”o¾YÅ”ĆpŪÄėeš|Ēüųć:žvėL}ōv:§µĒjµqčš1Žyw1 …ŸļōI˜šŅ€½Hß°ƒ)÷<Ēä;o"źÄuŹ<šĶĀ…Ė-ęUשJR’’KśĶ·aw8‰‹‹&::‚¾}ŗ2éöųæĻ’ĆŻSü×>-­į&*+­üš¾OÆ ±m,—½øZy֟~^.DĖ×_½Cß¾Ż(/Ƥ¼ĀLE¹™’Ņr22²ųhįW<üčKōīÓ%č~A„Ś1{öģ e¬]»–={ö°dɒz瘈‹‹ćłēŸē±ĒcٲeŒ7īŒŹVÕ²\[ĘčĘZ¾|9@µnÅéééddĻ8b·Ūłųć)))aƌåf³®ī^U&“øZcĖo6ū{ZÖē<^Æ—ŹŹJĀĀĀØ¬¬D„RR{®™S3E×ēõ€ж¦~?„³£Õ»W\žzōčÄĒ]ļ`×hŌóŁ’9<ōšK|üÉ×|üIp×ĶÄÄ8ę¼:-0ĻŁŃܼ÷>gĘóļŠ­[Gž÷Ė¢Ą6&ü•Æ–’Ģęͻټy7Ļ<}>ņgY/?Ī /Īå“O¾ :ž5× ć嗦-[æ~+{÷aĮü™4„Édą¹é0ż¹·yžŅĄrI’?n4Ļ<żē<Å=x »v`Õź ü÷—ą x;·ēŸOŻĆĢēQPPB·n 5ņé¢Wųū³yėķO«[§ aŚ“¹įś+Ėžzj ‡O­ą·M»‚¶W(\Żå¼šüŸ5±—^ڟٳžĪ /Īå‰iÆm󘫚x¼¬ųöæ ŗ&gꑇoc÷Z½•«‚“etķšŹ?ž¼›—^~Ÿ‚‚’ Öła— `ĕƒYµzĀ’…>aü_éūö3ōģ™Ę‚÷gņōō7™óŚGÕĪŁ9­ļĶ{mIŪĪ†Æ–’ĢȑCéßæ'ąĻ^•=€ͽ÷Ķ`×®ƒ"ŲAꄸøøZ° žÖϤ¤$\®ź½©źņŠCńŃGń÷撝«Æ¾ŗQÓU©J‚d·×æ—b•7Žxƒ/¾ų"h™,Ė}ŗÖŲRŁ«ggÖżo1™™YdĶĘf³£×ėHJŒ#-­]Š-jµŠU+ŚĄ1¼=ztbÕŹ…µN4jäPV­ģDrrõn3Ļ=ū÷Ż;žĢĢlŠŠKƒ¦Ų’-«W.乑cäd`¶X鎭SŠ6·Žz-&ü•]»RRR†Z£¦[·Ž5ĪĶśŚėÓ½{G®»vx½_ߋ3ĮnwŠ­[Gnŗi;w ¬¬£AOĻžiÕ¦$ŅéBX²ųU JŲ³÷0V« ½^GB¼Š!«ÕĪŠ”•oš ¾lųõs23³łćXV« …¤ >¾ ={„U›V£V3ó…GųĒ“SŲæ?ƒ‚7䨨pRS“jœ&éŽ;ndüųŃģÜu€¢¢R =]ŗt mB Ł9<ų`ķć:N¶`žL¼'>°Oõ޼łqOõÉĀYA­ĒƒŽĻ’ļuņó‹Ł³÷pąŽl›C×®©˜ĶV.»l‰mƒ§LR«U|¶dĒŽår<+²² RRžœƒśšk†1zō„8IVV.·›P“‘¶‰±Õ‚ĘīŻOwļ^ĀŖ• ƒīŻéĻÜĻCM Næ\ś&JUĶ;ƒžU+ŻŪŪ·ķ„°°¤ĘģŃn·‡õė·nŖ¶^AjҵkW~’ż÷jĖ‹ŠŠø’žūłŪßžFēĪéŁ³g½Ž§R©xēwøüņĖyé„—˜5kV£ĖVÕŻX«mx‚ČmŪ¶U;,Ińńńüżļē©§žŖÜՔ¹““”W^y…»īŗ‹”””Ą|²&“é“AŸĒćĮćń4ŖüUē€?YÕĘįšƒ«jÉ5™L ®¤ ­W÷d‡ĆA›6 KŲ*“ ­.Ų’ӛoÉōgßfč%ĘcFE…Ÿ6sk‡ItčTē6’$Ń»Wē—Ė`ŠÕ¹_ddXµ$Q'‹‰‰ŖsŗI’HėԮ΄R!!ZģUėz€O˶ķ{łńū š&ęä–o“ÉĄŠKjĪ4xŖŲŲ(bc«æ.£Q_ćõ’$‰ŌŌ$RSė~ŸNf0čøųāõŽ^§ aŠ_śT[žŲ6¶ZPY›Īiķj]W×{Ō¹sõŒˆąoĮŒ‹«ž•Ńd2Ōy_„¤$ŌŚ]©Tн{GŗwÆ}| œžŽˆ#""ųŽMIIąŌvÖnŻj?R©ØvŽūī›Ą+³? WŸčŠ>‘šˆPōz²ĻGE……#ǰŁōźŁłœw¹AĪmŚ“į•W^ałņåüüóĻõv†Īųńćyć7øóĪ; oÜleežÄ“ ĶÄ šŁgŸ1|xż* öl̽{÷&66–E‹‚ݰ°0,–ځ`øjžŻ†ŖšÓ÷tē±X,ØTŖĄtE‘‘‘8¼^o­ć’_żu6oŽĢ_|$Iõz=U窚bI8æ“ŗUU^}å ’’āY¼ä»s]”s.%9Ž½:µNצ¬¼’åĖWņŅĢGéŁ3ķ,”Nj÷ųcwšĆęó÷Ēļ¤SZ;ōz啸Ünbb"¹įś+yū­§łĻæßC£9}7$AA8Ŗ -??æĮū¾öŚkh4yä‘FŸļ^’Č“C 111ÄÄЗ—X–””DfffłKŖŹŸ–ÖøēČŖW‡®s»}ūöѾ}{T'zŒ%$$ ĖrP¶åS­X±‚_~ł%šLœ””Dyy9EE5ĻXžD[%%%~=¹Õ*[vĮß*ųÕ²·Īu1Z„Ļ=Xļm#ĀCłvÅÜf, 4ĢÅ÷hP«¼ \ˆœ™ĆEÕ³Ī ĀŁTn?³)[Š-[ü³Q“mŪö4[V—˜˜ČōéÓyź©§ųę›oNæĆ)\.oæż6!!!uNļs¶„„„ĘŠŒ9’~ųÅ‹3iҤ÷yė­·$‰«®ŗŖQē4haaa̟?Ÿ[o½µĘīŠééél޼™üówäȑ<łä“¼öŚk|ņÉ'ÕöÉĪĪfėÖ­\yå•Aū¼óĪ;¼ūī»AsóžśzŖ¶Ī?­6ŲA„ EN…G¾>}WŸcĒŽńłēŸ³fĶ&OžLjjj£ĻY•ŻząĄÜyē¤„„”V«1›Ķ¤§§óŽ{ļŹ“iÓūõźÕ‹‰'²hŃ"rss™0aIIIX­V>̼yóp»Ż<õŌS}FĶW\ĮK/½Ä=zt e9''‡ļ¾ūŽÆæžšaƆÉN§³Ę÷±ŹM7ŻŌØ®čBÓĮ® ‚ œg’Āģ@ćĘ ĀŁŖ­9cK••Uk0Ū«W/>žųćFµģ‚?›ņ;ļ¼ĆØQ5OYY^^ν÷Ž[m¹B” gĻžĢŸ?Ÿ{ī¹§QēnjŃŃŃäęę~7 ¬Y³†§Ÿ~šeĖ–ńį‡mŸĄĢ™3łē?’yFē:u*Ģž=›©Sƒg Ńh4\uÕUĢž=›äää u}ō©©©,X°€»īŗ+h]ß¾}™?>C† ,“$‰o¾ł†^xO?ż“ZHdd$S§NåÅ_¬6Šf³Õų>Véßææv[©0?½uō9A„ „Õ­äџ:ćņž>ƒ œ+zäó׎%gtŒĻ~ē猚}4ĮDBXĆÓϘĶę ®¹'Óėõ5v›-//G„Ra4 ćt: Æ5'Jyy9²,˜&§®s‡……5(1čÉ\.V«“ÉĆz:v»‡ĆQēy- n·»ĘVfĒĆńćĒ)++C­VKlģé“xz<Ģfs­×śT………āt: #%%„^ÓeggS\\Œ$I$&&U{’WŸĻGVV„„„€ĢrmUׄ.”””µ&ŹŖÆ­·óż¾š3Læ5ź ‘!-·B©„-»‚ ‚pž1ؽLģ•Ē’Żń"ąZI‚įķŹŁ”ō¬ž÷7Žą·ß~«u}ūöķ™={v`j›†85³²^ÆGÆ×7h ĮēŽµk/æürŪ̚5‹ŌŌŌĄü¼õ„ÓéAxmŖ‚ūšØT*:t芠sVķא.ŚU‰²*11‘ÄÄÄÓox‚B” %%…””Sē’Ø®®ė"“,"ŲA„óа”2†$UgÖą•EĄ+“±'zuķŁz›Ė 7ܘ"§&§ N[¢öķŪóü£Īmāććė\/2ģ ‚ ĀyJ­š‘ę8×Å„”1­Œ-]hh(]tѹ.† œ·Zķ<»‚ ‚ ‚ Ā…K»‚ ‚ ‚ B«#‚]AAA”ÕĮ® ‚ ‚ ‚Šźˆ`WAAiž IDATAhuD°+‚ ‚ ‚ “:"ŲAAAZģ ‚ ‚ ­Ī'Ÿ|Āųńć1›ĶAĖ3227n?üšĆY+K^^Ļ>ūlė>üšC–-[Ö ćżņĖ/|žłē5®³X,x½Ž—ńdN§“‡z€wß}—ļ¾ū³ŁĢ£>ʈ#Ųŗu+“&Mbüųńgt®śe™ŹŹŹf?Šśˆ`WAAhuvķŚEzzz P«ņłēŸ³aĆ:tÖŹb±XX³fMė’““IHHhŠń233ٳgOėn¼ńFvļŽŻą2žĢćń*Ś·oO\\K—.„øø˜÷Ž{>ų€N:ńꫯžŃ¹ź£¤¤„6ūy„ÖGu® ‚ ‚ Ķa̘1,[¶Œ[o½5°lłņå\wŻuß322˜;w.999ÄÅÅ1yņdzõźÅć?ĪĢ™31™L̘1ƒ{ļ½7(0]¹r%yyyģܹ“.]ŗ0yņd,XĄöķŪq:\vŁeÜu×]ų|>Ž}÷]6oŽL||<=öńńń8Ōj5’üē?éÓ§ß’=ƒ|=ząół˜?>7n$::š°°°jÆÕjµņųć³’~^zé%śöķĖōéÓŁ“i_~ł%¹¹¹ÄĒĒ󥐚šZm’ōōt–,Y‚Ūķfōčсåv»Æ×Ė_|Į‚ P*•Ģ™3‡U«Vѽ{w***˜3gæžś+ß|ó YYY“oߞ‡~˜ÄÄD^yåRSSłé§ŸxšĮiÓ¦ |š˜L&&NœČ%—\ĀŹ•+)//gŪ¶mdeeŃÆ_?yä6nÜČĀ… ÉĻĻēŽ{ļåĘodŌØQgxg Ѳ+‚ ‚ “J½{÷&33“ŠŠ öķŪGLL QQQmʎĖ„—^ʬY³øöŚk™0a’$Q^^Ī×_ @vv6K–,!>>>čų»vķāŁgŸå’K.aŌØQĢ™3‡ß~ūūī»‡zˆ„K—²dÉ~ūķ7T*O=õ©©©€{Ū¶mVŚ9sę°wļ^¦NŹ€øį†˜7o?’ü3?ž87Žx#Ÿ}öYµ×ŖŃh;v,±±±Œ1‚#F`±X3f ä‰'ž WÆ^Œ=Ē“onn.·Ür 7Žx#S§Nå?’łO`ŻĘ9xš }ūö„gĻžōīŻ›±cĒ’˜˜Č°aĆøöŚkÉĖĖcҤI\qÅ<óĢ3ÄĒĒ3nÜ8¾żö[-ZÄm·ŻFjj*cƌ!!!'Ÿ|’«Æ¾š &PRRĀ®]»xśé§¹üņĖ™:u*kÖ¬įƒ>\+“ÉÄŲ±céŅ„Kćoį‚#‚]AA”ÕŗńĘY±bąļ†;aĀ„ õü1C†  ,,ŒāābÜn7÷Üs‹/ąėÆæę–[nA’¤jǟ2e cƌ!%%…ü‘ĒœŽ;ҹsgī¼óNÖ®] @ĒŽ¹’žū鎽;÷Ž{/f³™²²² céõzžžyśõėĒwމ×ėÅjµ²zõj¦M›FŸ>}:t(“'O®VµZĶ•W^Idd$dąĄlٲ…Aƒ1vģXśõėǤI“ˆŽŽ&+++hßµk×rŻu×qÕUWŃ£Gž{ī¹jĒļܹ3©©©tźŌ‰+Ƽ’ŲŲXśõėĒ„—^ŹźÕ«¹ęšk4hÉÉÉLš4‰£Gāp8˜={6Ɔ Ćįpąp8?~<ÉÉÉ\rÉ% :”ß~ū €Ūn»‘#G2`Ą&OžĢ޽{ILLä²Ė.Ć`0på•WŅ®]»Ó¾ē‚PEtcAAZ­ńćĒóä“O2iŅ$V¬XĮڵkyżõךz½üć’@–eڶmKXXJ„Y–4h%%%äää°|łr>ųąƒųee%Ļ?’ŒÕjeżśõeK—. ü’ī»ļęõ×_Ēćń––vŚsEEEńĘoĘÄ>|˜#GŽžŒĢ²,Z‡‹ŠŠA^}Ž[TTų=77·^ūEDDPZZ“¬øø8č€?Ųܶm[ą÷œœœz’äņUuć®2wīܠЀččhāćヲO’ż÷ÄÄĜö²,7ØL‚"ŲAAZ¹1cĘ0eŹfΜ“„„’’’8pą+W®äĮ Ś.""‚ųųx¦M›F’žż©¬¬dΜ9®Žµ1™L”””0ž|ś÷ļOæ~żT>įĀ%‚]AA‚ȀͭÄé•py”Ų= ģ.Æ—WĀęR"^YĀéńw¹tzø}ž+›[ŁčskU>”’æG)ÉčŌvcŌ«½Ø•2„½Ź‡JéC«” QłP+|čŌžßU ŃõQ€k®¹†6mŚ0iŅ$”Je )ŌUW]…N§#44”’ūß|ūķ·?~œ#F0hŠ <.— »ŻNtttµq¾U.»ģ² ßļ½÷^:uźÄęĶ›q:L›6Q£FQVVĘ¢E‹0™Llٲ…nŻŗńŅK/ž@Q§Ó0}śō ćM›6 ­VĖøq戎ŽfƆ “iӆ/æü›ĶVc™Ž|óM–,YĀĪ;¹į†HOOgٲeģŪ·ŌŌTV­ZUmŸššpÖ¬YÊ+ČĢĢdÖ¬YlŲ°”Śu>|8*•?|øõÖ[-Ų‘‘‘¬[·ŽåĖ—³k×.ڶm˜ņ遟żķ·ß²téRöīŻ‹Ńhä?’łqqqÕ®e÷īŻݚµZ-’ž÷æY¹r%ĒĮ®PoRa~ŗč ‚ ­Ē§ Ā©¤Ā©ĀāTbq+±ŗTX\J¬.ʼnߕ˜]Jln——W‰Ė[= ĻłD­”1Ŗ½čÕō•½Ę‹AķÅ ö”W{1i<˜“^"Bܘ“>LJ…x$ji>ū=žŸ3jīźūŃ aĶ—kõµ×^cٲe<üšĆÜvŪmĶvAØĶæÖŪł~Ÿ«Ęuo:Hdˆ§ĘuŸDĖ® ‚ œg<>‰2»š‡ŠR›†J§’2§šJ§’r»šr‡ŹąŗßĀz>s{%ʼ*ŹõĢ‘“ÖCØÖKØÖCxˆ›P­—(‹(‡›(¹paxā‰'xā‰'Īu1A8"ŲA„Ę#K[5ŪŌžū‰mŠ­ŹJ|ņłŻśŚŅČ@„SE„ShkŻN„š©ó„s©÷­sktkpgta҈–A„–B»‚ ‚pŽ”;ŌäZ4ä›5Xµäš5äY“ŪŌ"˜m”<>…V …VMėõjo š­ś7Ī䤭ɁV)ŗI ‚ œM"ŲA„ffv©8^”åxyĒĶ!äVjÉ·j±»›o¼”pnŲÜJŽ–ė8Z® Z.Icp‘ź$Éä 1ĢARؓXƒ …$‚ą–Źėõ²’~zōčŃ,Ē7nsēĪ $€”i‰`WAšˆO–Č·jČŖįXyĒ+“dUź4v“„“š·^h•2J„?ó±ńÄ2•BFSC ¦FéC]K(—WĀķóž2U8= Ü'Z¹ķn%Ÿ„ĆsžUČ2X4X4lćĻéfŌ mM.:DŚén£C„“€[ ‹ÅĀ 7ܘ+·©ķŪ··[Œ„ęŅz¾}Aį,«pŖČ(ՑQ¦ćH©ž£åŗˆ)2µ£Ę‹AćÅØög(6jż’7j¼h•^4J½ĘKˆRF£ō¢’Ń©½h•>Ō-¤+®Ć£ĄćS`w+pž–mnN™Å­Äę>‘eŚ­ÄęR`s+±žų1;”xZ@Wq·OĮ!üQĀ/D¢ņŃ>ÜN‡;©vR#lDčÄXą†zśé§ ēŪoæE”Ppłå—3cĘ ¶nŻŹŅ„K9vģƒłóēóģ³Ļ²e˽zõāå—_fĖ–-Ģ™3‡ÜÜ\FŒĮwÜĮŲ±cyī¹ēŲ“i6›=zšņĖ/ĒęĶ›yé„—ČĪĪĘd2qĒwpēwb³Ł˜>}:Ū¶mĆétŅ·o_^~łe"#kĪ2-BÓĮ® ‚ ԃ×'ńGEez2Ku.ÕQd«yÜ꣤dBµĀB¼Dhż„#uīĄ“:aZa!LOМµē»•ša<ƒ·ĄāRś“R¹üY¬+]*ĢN%e5f§’»šR» ‹ėģ>.9< öŲ_l,‹1øčm„K“®ŃüÖƎ;ˆˆˆą‡~ĄćńpóĶ7óż÷ߣT*Y¼x1+V¬ gĻž|ōŃGäää°|łrt:ƾś*3fĢąĶ7ߤ{÷ī >œeĖ–”ÓéX¼x1GŽaٲe Žyēž~śi>üšCn¹å>ųą†J~~>Ɔ ć’K.įß’ž7%%%|óĶ7hµZ^~łefΜÉ[o½u®/‘ “z"ŲA„Č@N„–½EöŁ_l8'­¶*…h½ūĻ]Õ’]D\Dh=H羁ņ¼dŌų[³N³Ū+Qd×PfWQbWSbÓ᫆’³P¬*)Ö’Žł[ćŒNŗFŪčm„gŒ£Č]£{ļ½—°°0n¹å6mŚÄąĮƒ1bƒ`Ė–-Lœ8‘ØØ(&OžĢøqćŠjµ„‡‡£P(ˆˆš_÷­[·rĖ-·ĘŲŽu×]Œ1‚ĀĀBōz=Ƈ 11‘łóē£ÓéŲŗu+“'O“äNž<™É“'ŸÕė *ģ ‚ Ā Å65{‹Œģ+2°ÆČ@…óģ|MŖ$™£?so¼ŃyāĒEƒ[ĢėŚؕ2 F' Fgė=²D‘UC¾Å’S`ÕP`ђoÕPjW#7CĻļ|‹–|‹–5D d:FŚég¦o¼¹Ör^ˆtŗ?… ģv;jµ:°Üår”ŃüŁE $$›ĶVćńjŚÖjµbµZ1AŪ^qÅ >¾ MK»‚ ĀK–!£L϶<;ņLäZjŸ_µ)ؕ2I&ÉįāŒNL.ā N¢õn”µ$oZ>•$*)NåņJä˜CČŖŠ’m!«"„ģJm“V¤ųd‰C%z•čYŗ7–X£‹~qfśÄ™ée» “]>|˜pģŲ1āćć«mCnnną÷ģģlbbb$ ł¤ŚŠš¶%66–ģģl|> …æȔ)SøżöŪkŻG„ę'‚]Aį‚āö)Ų[d`{ž‰ł&*š)SrDˆ‡¤0É”’Ćü?qF‘e÷B£QŹ“·Ó>Ü“ÜģR‘U”%«RĖŃ2=å: ,M3¼Ą¢įĒ#Qüx$Š‡Am˹$¹œÄŠ ÆÅ÷ÕW_åąĮƒŲl6¾śź+ž÷æ’±oß¾ m&NœČøqćŲ»w/Z­–ƾśŠ§žz £ŃˆĆį`źŌ©Œ1‚[o½•kƽ–Ƈ£×ėłśėÆyä‘G0Œ1‚뮻޿üå/ņ믿ņę›o¢V«¹õÖ[ٹs'jµš/æü’^xį\\AøąH…łéā[WAhÕ<>;ólĢ cw¾§·iĒŽźÕ>R#m¤FŲčé }ø“C)4Å„$³\OF©ŽĢ²2ŹtMš+9ĢĮ%Iå J¬ ,äüø??ū=žŸ3jĪZüŃ aµ’-=šgŸ}–āāb¼^/C† !&&†āāb čŽ½{`ۜœ¶mŪ†Ēć”gĻžtźŌ)°.//ōōtłĖ_žB~~>›7oĘķvÓ½{wŗtéŲvćʍ=z£ŃČå—_覜Ķ¶mŪšł|ōģŁ“Ž;¶ļׯZmóö*ĪO’Zoēū}®×½5ź ‘ēÉßń¹$‚]A”ÕŹ,Óóėń0~ĖĆāV6É1’L‚ÉEĒH#m¤F8H0:D’(”YäY“ģ/Ņs ÄŸ¹)z"($™>qFw,¦sTĖ;z&Įī’ū’‰'’œœÜ\Å„f%‚Ż3'ŗ1 ‚ ­J©CEśńŅ‡5Łܶ&'ŻŪXčÖĘJ—h+śV4…Š²U¾¼}¹f­Z¢"ūŠõjłõÉŪóLlĻ3Ń>ÜĪȎ% HØDÕŹĘ?żōÓēŗ‚ œc"ŲAZ…}E~ΈbgéŒ³ßFėÜtkc üˆŒČBK‘`r’`rrEūR|²Ä‘R;ņżćĻsĶ ÆÜ9Z®ćż­‰, ń0"µ„+Ś—ž˜Ćø~ņ,Z>ŻĻ“ƒ’@tn”„Į® ‚pŽņųlČåēŒh²*ߊ+IŠ1ĀFæx3żāĶ5fÕ„–F!ɤEŁH‹²1¾{ ŪóMģĢ7q°Dß ¹K*–īåēŒHnźRÄ„)åõJ¦¶hW<ūŠ ”9T¢K„ -ŽvA„óN„SÅśćį¬ĢŒ¢ĢŽøÆ2µĀGZ”>q• HØ$B'Ō…ó[¬ŃÅčŽ%ŒīXB™]ÅęÜPŅGšGEH½QīP³pg?‰ā¦n… HجuŪuĒĆ9Xl@)A¾Y+‚]AZģ ‚ ē ‹KɵaUfn_Ć3*«>śĘ[ųKB½āĢh•­kŒ¢ T‰Šy™ZŹČŌRŽW„žĪĘģPŹźzķŸkŃņÆĶItkceRļ¼j½—źłxG^“*ł-ŻŚX›ć„‚ 4švA„Ļé•ųłH4?‰Ęęnx›ichR+0Ŗ½ĶPBAh¹üó<ē3®[[óBł)#’ŒR}½öŻWd`śšTĘt-dTj IfO”‘77%#Ÿ„ėöJM– N”)‰`WAh±<>‰µĒ"Xq°Mƒ§\‰Ö¹œ\ΐ¤ 1W„Bf`Ū ¶­ąp©žŸŽD±-Ļtڱ½nÆÄ{bŁ•o"Éä`õAūųd‰ģJMsæš÷ŅķčŌ"-–Šz)•³gJ»‚ gČ'KŲ= œ^ Æ7øÕQ„š”Qł»Źj•¾³:µG…CEžUC—>fmvšX¼;ŽKĆ¢;GŁ™ZBæxs½ģBSńų$ĢN%.v··WĀįUąp+pł8=ĮŸ’$£;‘łX„1j¼Õ^ /FƒŚ‹²™>3:FŲP("™>ō(ėŽE°īxųiƒŽżÅzö—č †ķrĶõÜT¶f‰1ĀĀ…K|½ÕvAj`v©Č·hØpØ(sØ©p*)³«©p()uh°{ü°NO2žźŌ> j/&ƒĘ‹Ić%Rē&Öą"Ęč"Ęą"*čŌæå„²to’ļņ āĪ£–Ķ2»ŠĻ~gsnh½÷QI2+™ZJūp{3–®~,.UŠ=ćō*"nÆ›[‰Ó+į9Q9¢ņ5*…Ļųhü÷‹QėÅ ö¦õāi–hī–DŗĒX–RÖäĒn-lnłV-łf-łV5%6Mą3ĮģTRįlśĒ*“ĘCŒŃE¬”źĒ’y‘`r ;ƒłž+œj6e‡au*yrČ1®J-įć] .9M÷ęZ>ļ**<²„Ŗ‰ŸĄ£õēĻg— œ-„LØV“śÖ‡vAø`łd‰\³†<‹öϳš‹«[Ł,ē“»ŲŻ Šmµ'‰Q)|ÄÜ“‹°Ó!ÜAj¤ä0Gƒ"+j<>‰÷¶&ņüeM@7· Yį|ŗ;[=Ææ^ķćŹöž¹AĻf6eū‰ 'Ļ¢!ßģ’·Ä®¦Ü®¦Ü©ÄӈäYõ„RČDėŻÄčÄžØ ikrŃ>ĀŽį Ę#(1°=/”īŃVŚ\MXāóĖ+q¬\ĒŃ Ł•ŚĄ{ÜĮģé˜]*Ģ„Ŗjcl% ŒNR#ģtˆ°“a#1ŌY ‡I’9Pb żx8C’˹ŗc1ļ”&5hŹ¢“Z4$˜š68mīhŅć Bkno¶^­vAø Č2äY“-Óq“<„£:Ž•ėpy[^čń)Č1kÉ1kI?ī_¦RųH wų§Ź‰5“i;ķ]ö‰n…Ł•ZVbd‡’ę.z£YÜJ>Ł‘PļÖ\µĀĒ•©e\Ū©£¦łj·O¾ožØŠq¼ĀōŌ7£msšų$ņ-ņ-(üs¹Ä'"l“wŌ«+·,ƒÕ„Ä'Ć;ųē%Šņž2š‡G–8^~ās”LGf¹Ž<‹ÆÆe_Y&š9±īx8ą*Ń=ĘJŸX3½cĶuV-×”VųūwÅÓ­…~ńfžtœ·6%ćöJ4äQZ„Éo†`·S”^±v›ōø‚p¾’€ė;Ÿėbœ7¤ĀütQ- B«ć‘%2Jtģ/6r DOf™‡§łZŪĪ6½ŚKĻ }ć,ōŠ5W ųdīż¾ką5«2³.?B¬±åµŲ-×ńīę¤:[»«(2C“ʹ”ka³ĢéYfWq°ÄĄŃr݉7ä¼¾oŒj/=c-ō‰3Ó3ÖRk&źcå!<·¶ņ‰nØ·÷ÉkµŻ™½>‰Ģrū‹ (ÖsØÄŠ"+½Ī”“ ·Ó;ĪĢ ÄŹjIŚŽŁ”Ä¶<2*…L+’å௠{%½=V·¢ŽAæFé榮EüµcÓ?„ŪÕĢNo׹ńū‚ŠŚHĄ5iEŒķVxŚm?ģ ‚Š*x|GĖtģ+6°æŲĄ‘R}«|€­‰J’éofXJ=b,Hģ)4ņśo)xO éS*d:„Ū™~éŃÕb÷æ?"ųtw\½ŗż^”`fl·špüq¹CĶžb=Š ģ/֓ߊ§OQH2"ķ h[Éą¤ņ .Ļߎ꛿mpx“J³Gn– …sįxE» ģ/6pøD^W`4†¤EŁŽ®Œžm+qz<üSēĄē€R÷]”ĶĄ¶€æāgvz;ŠģÜõś,•¹4¹‚»ūå4Ėkpz%¾ŁĆ®yM£»Z ĀłHÆöŅ>ÜĮ5iEtóY7ˆvA8oYŻJvŁ‘gā÷BS£ę_mm¢õn.M)c‘ƒ%ś B„Bę¶žł\޾ō–ŠO¾ÜĖGŸvŪ6“zēÓ+Ę|Ęēuūģ+2°#ßȁ"Ć;7ØZį£ŪJ†·+£S¤Ē~N£ģ¤®Ł*…Lē(+’rģ–²ń<²ÄļóŽüŠzõhNzµŅ‡ZYó#—ÓćOvēō6’g˜Aķ%ĪčāXEžSZmu*/Æ]u“Ę_Éįš(xė·d—źq×£…·}øƒ†e4K¹OęöJŠAøčÕŽUQ}>Į® ē•B«†ķy&vę›8XŖ?+漌Æ? ®ĪMXˆ—p­›0­­Ź‡NåC£ō”UłQłPŌRŪ‰ĢĶf— «[‰Ł©ÄāRRįPQ`ÕPdÕ4(«sc©2³G&ZēnösÕĘ'K,ŲžĄ†¬š:·“$•ZĀĶ] j źĆģR±3ßČöüPöĪJ@q2•$£×x÷‹Zé#D)¢ö”ńƆ|«ęŒŗå֖lĖė“X“;1VĀZhwf,ń{‘ YalĻ­gwŪśS*dښœ$…9ˆ7øˆ39‰3ų?'Τ¦6j…ÆĪÄRŸ‚¬J-™e:2Jud–éȳh”LŖöcKģČe[®‰‹ü=)” ™»śęŅÖä䋽±už-Ł=Jln%ś3Č .‚Š”DĖ® õārAF†›Œ G2ÜÉšpō؇āb/V«ŒĶęĆbłóćD”5Iz½‚øx%©Tt쨢cŖšŽU$&ŖjĒźV²%7”Ya(14iKF“Ī?­OūpķĆķ“‹°×šøē\sx-×q¤TĻŽBƙ·fĖ TŹÜŁ;—KSŹu»]¦ ĄKE„ŒÅāĆfóa³ÓįCÆW*a4*0$ĀĀÄÅO#ōāśöuĪĒĘ„Ü IDATåŁ;Ö̽ē4ų=±ŗ•lĪ eCV8‡JõMŽś­s“į %ĢžgÅˆŃ‰¦‚ž†šÉ9•2Źōd”éš“’äŌÄE- .ѳ!;ŒĶ9aX\M3M˜B’‰7ŗhn§}„ƒįv’ĆģĶŌ65›[Įb» Lģ,0Qfo|[†č5^ęŒ8\ķo0żxģh[ė½%!scä!ĢĒ+ČČōqąŁ,cµś(Ɛ±Łd\.¦P’g„^/a2)Hl«$5Uķ’žč¤¢]Š µZtÜį̈`W„y<°wŸ›uėģ¬]ēdÓ&'NgÓ~\DE)øØŸ–5\z©Ž=4ģ*0²>+‚]ł†&™«“*1S×h+¢ģ“·Ŗm™­Tõas+ł½ŠČĪ#»ņX\{ØÕ(}̹ņpŻ-HŲ½ŪŎ.ö‘é&戛œ\oƒIƒA"µƒæ‚#5UMA§ʦjŪIĄ ] ¹”sQ½ēvūģČ7²!+œŻMsĻ„i=tØŖ‰8’ī‹[ÉļFvå›Ų]h<£€šŌÄEUģv³Ł‡Ķ&*>\N„’“”&‰ŠŠ3_**Ö‹ąĒ"šd ®R!Ó.ĢA—h+]ŪŲH‹“¢jž^ĶMŽ—‡°£ĄÄʬ0ņ1.]„¹8”’.Ī®¶n_‘×6&×ų·ęóųŲ³x¹›rSōą2Ø WO C†„pÉ’÷„^/Ęé ‚Š0"Ų!Ąå–Y½ŹĪŅ/m¬]ėĄf;;ŚP-‰Ci7, uŲ™uSV*dŚ…Ūée;ąŚZÅlM<>‰y&¾;ͱr]ƒöUH2]ŪŲųĒą?‚–ļŁćfżÆŅӝlü͉ŁÜō×.qp[zÜŽ3h™R’¹«_.—$ÕÆµ9×¢eĶŃHÖĆę>ó–½P­‡.Q6ŗ¶±Ņ%ŚF[“ćŒŁRųd‰#„:6hõ¶6āzi$/}‹wrģ°Œ G<äęÕ?ų UŚAEźI=;.ŗHKŪ„Ó—å@‰ž’fF²-7ōŒĒ.'‡9čc„k“•Ī‘VtźÖłŁPÅķSšå¾VeFžČ¼\’ė'IšŲ_ŽÓ'öĻÄp>ŸLzŗ“/~„ņ>}PŖ•A‡ō¹}]™Éįiŗq‚F-qŃE®æ^Ē7ˆˆÆ §'‚]AŲ¾ĆŲe6¾łĘJYłŁ{ų‹L‹ éŅdbūÄ¢P5žĮÅØöŅ+ĪLß8 =cĢč[ł,ųŻĶ9aü”IV…ŸLĆĒģI2÷ōĶ£ƒŗˆåĖmüßēV22ĪBė„©£Ré0ŖJ­k•ƒK÷ҧ­qćōŒ„«±ū¢<”‰’d‘įŒĘ(Ŗ>ŗµ±Ņ+ÖJ·6LĪVŸéŅęV²źh$+öĒ4ü~‘e ÷³}ī¶&-S‡j.¢eČ-— ŃҦņDY¤gEšĖŃprĢÆSI2]ŚXég”_\%Qśs—˜ķl’ÆöŲ:3OQÆLŹ5ŃŖdŽy€œcNV¬°±t™•ćĒż]›µa! x¬?ŗ6:Ź??æ v°cžŽ¦xµR*aȐĘŻ¬ēŗėō„„“öæ^AK»gI¹Eāx‚¢ «l » œn’“!B42z-„ź}ÄGÉ$µń”ó§ ĶD–įææ8xėķJ6onŗyKė#¶o,®ė„1ŽŲųc]ō‹3Ó'ĪLZ¤ „āĀś(ېĘū[Ļü@^kŸY‡½üģ·dJJ*­·-8ĄŽ‰Q2ę&=“ļ4’’¢¢Ü”ę—?ĀYūG$eŽĘE Õzčk”o\%=b-hσ±˜Mełž¾?Oę ĘņŹģx'; š“lU ‰‹/Ö0ō–d2ŒķtK§öŃ7®’¾qzŘ[}ėmM<>‰·7%³§Čˆ„Œ ė/ž£ł¬š½³ĘõJ­’¾÷ö%2- …Ź|k•õ3֟Aé&6VÉż÷™4ɄĮ ‚^A‚‰`·VHģ8Ødg¦‚£ł ² ˜ķų’‘ &\&)ĘG§¶>.źä„WŖ— gĄē“YµŚÉoT°c§ė¬Ÿ?žāxz߯»q;Ū ˆÆąś¾•$…Ż½%*²jŲSd`Kn(ū‹ Hų+1¼ fd”ģ/fė»[›Æ ¤PHüõ®$čßµŚ| õ„wó—¶ō‹7Ó1ĀVļ±Ą­Ķ†¬pV$³,„$ćCjTšć±{X;}-nk󓐚ښüĢ`¤ŚęšŖ…J’égaPbżā*Ļ‹¤RgƒŪ+qØTĻļ…F6g‡Rl× UłS\Õ‡ģ“Ł6w;Å{‹j\/)$ŗż­mµE”RąsūXłČŹFt593&“‚;&yč!ᢋ³ ~"Ųm^l?¤dŻnŪ+É.j¾§)•ŗ„x¹(ĶĒ•ż<$Å\x5ÖBćķžŻÅ“’(cūö³äVüō`B“Cė½½Ūę&{y›s(;\ČÜ|³f„Ż4YX[—Wāp©žm¹”lĪ ĆģT¢VŹøź1‹Ļ+³{į.ņ·åŸ…’ÖŸJ§bŲ¬įØBö>Õ^$V2Øm9iѶVß=¹!œ^‰}EFÖ2²£ ŸJ‰Ļć󏽬ŸG¦`g»>ÜŻ,åėxMG:^Ó±^ŪJ@Z”A‰ H¬h±Õ[’"«†ķłF¶ä„q¤L‡B:}™ ø+]¬{n-Gķ×øĆčtŗ> ųß?’‡£ģ܌{7™L{"”»ļ2”l ĀO»gą‰5;TüøYM~é¹yœźœčåŖž^F\ä!Ü(ŽJ”f2ÆĪ©`įĒf¼ēųypŲ+Ć Æ;;Ø,Ėļ-&ū×,ŠöćóTÆŌ SšÄ”Ü5Ł„RļÕ䘵ģĢ7±#ĻđR>PGk™Ēįaݳėq™[N‹yT×hś?zq½¶U+|ō³08©œ^qT’ų<¬É”ĆnŽ|Ó̊o­x½`L0Ó3†Ų‹b MCvłŌŠ:[Ą}>™] vP°³°ÉĖ×at*i×wŖs›P­‡K“Ė޾Œ6śsWqw¾«ŖųŲžgbK^(6—h{Ņ›āWŸĒGĪĘö~¶·ĪcĘ÷§ē=Ł4gTŌ¹msėÖMĆ«Æ„3`@óQ ‚Šzˆ`·6ķW²x•šŻ™-ē [­’=ĄĖ-WøIˆ­½nÆD„S…Ż£ĄķS`s+pžō’“…Ø|ńž*IĘØńbŌx1h¼Ō^TĶ<ō³=qŒīXLdHó$Zžµ•éĻ–SRŅō÷…J%‘’b <\MX˜ƒAIȉVøŹJ7V««ÕK^žü|-ļ»zß?¾Ęć¹ĢN²ÓsČZŸ…½Ä^Æ2ōė§į·#IėtęS‘“6łł^^|¹‚?øˆźElŸXbūĘ¢P*}2’ņχZŸG¦č÷vĢÆyl޹šŹąg×¹MœŃÅšv„ M)-{u°Ūež5·’·ß6ćr×ü™¦1jˆģIlßbzÅ”ŌŌŽŌmu±īŁõømMŪYßFĻ%Ļ AQCKsŁ‘2ŽÆ=N;u9ÆĪ £sgń7ß¾ū·g¦—cUźHčŸ@\’8tŃzŇJ t)—}2[߯FÉžā:§1ipY\nĢF£Ššp’÷CÕ’m6’wƒÅ┼ÜEł’gļ¼Ć›Ŗśüf§{O t°÷’!²Q܊A?Qdˆ (ČR2DdÉ*›B…ī=ӝfŌFJGŅ’†¶ä}ž>ŹĶ¹÷ž»Ī9杭AÆ·ü\+Ą°”|:ŪÕ"åÆlŲ°Q÷° »fb0Ą‰«b6ģ“p5®ö˜BōiÆcä£j}ė§Šk0@†RJJž””™…²U"²‹$ä‰PI,RФ;‰™o{5>Žj¼Ōų8jšqPćeƾ+aX£ņśļ-iåYĄ“‡b,Ög(^ÜNŸ”ąē_ ,r¼śj śbo_sį×®å²ys6Ä•oz‡ ‰ąż).Lœą„°¶tVāä)cߏ$9łī]»]]%ōīķM’žŽ<ų 'A!ŽÄ9§”k# ]š÷­i4z¢¢ 8w.‹C‡Ņ8t(ČČź?÷Äb˜ś¾ ćßµ=sų}W!&f•ńś0GG1Ļ=Ąšįōļļmµ{_Čʍ±lŲƵk¹Õ>ĪOŲńĶ×ī÷µRŌ†ū ›°[§®‰ųāgмś1qvŃ3óÕ"¼]jĻćNĶ—r-Ӂėö\Kw¼«ś™µ±Š@3÷BŚłęŃ= §L\īśK~ŽqCk hķ]Ą”±Õ>ߚó˜ńaNµ“ß¾¾r&NlĘ»ļ6«QĒbc ų꫾’>„²ź‹uooæüäIŪ¶÷ĖھæŠxćĶ ”Źź}ćmŪŗ0n\S^z©!nnÖ½o?žĮ?F±qclµÜdĒŖļ<ĖėĒø]ōzK—å±`aŚ»HąļoĒĖ/7fȐ†tźäVģ¾\ÄʰkW6ÄpśtÖ]«o_9+–»Ū²“WĀŻĢžž2Ž~» &4³śq'ĒŽe0ž5vļNŖÖž;Hłł'/“÷ÉG€·÷4£HūßĀL$00¦s"T=‹å¼ł9|µøźŚīFģłųćÖ ˆ“’„4÷‚äd%‹Ż`łņ›ØTU€œ…¬[ėIĻėæ{ć–-¼7Y¦‚ÄC•Ń”ƒ+ļ½×œ’żÆq­°Š„¦±xq_AaaÕĒŖN¤ü¼Ń w÷Śõ.[„ŅĄof°ļÆź•|‹¼šBCFŒbą@Ÿp+āśõ\6lˆå‡¢HK«Ž5ųł+ŗZµŗ]ę`0Ļ‹—T}Žšó³cŚ“ŒrĻ”wrāDŸ}v•½{“«¼o³¦6mņ" Aķŗ&6lX›°{© ³×˹]I ķ§į'ŌV)ן#ćBŠ3ē“ˆĪ¶³vł2ˆ„䢲B“V/@„³Žsw•khä\ÄÕL'“w¬ēķÄ:<| g™yf½ŽĄŌ²Yæ”jI“šóŃG­ppØŻŠ‡ˆˆ<Ž~ū¤Vi?™LĄŖo=xģ1»źŁ½ēėå¹Ģ™›ƒ”ŠWėÖ.|õUyÄ·f:v—¤„1gĪUV¬ø…NWµ‹kŃBĀę_¼šó»±Ł9z†æšNhhÕ掄R!/½Ōˆ™3[Ѭ™S ō®jØTzÖ­‹fΜ«ÄĒVyė×yŁāx’EÆ7šžŌņQU†X,ąwš2{v‹ĘāÖ»v%1aĀy¢£«vž~b6oö¢y³Ś=ڰa£śŲ„݉N2å;9éŁ÷޲a :5Óńł(örĖ>~½AĄµ {Ī';q!řŒĀš e"=>ŽjÜåœå:ÜķŌøČtøÉ5øČŠĖIDzäb=rŃ%†*B«’Æ‘ÆR ‘Æ‘£“Q(%­ ų/µPвc‰ÅBķ|ņ™Ų-άö}œĶw«ņŖtŽ^½¼ųöŪ.“jå\.Ž36oŽcāÄ Ę2Fę •ųågOzõ2“®1÷ól–.«Ś³wpóńĒ­yļ½ffgҾ—\ø `Üøsœ:•Y„żÄü¾Ó‹€€śæˆMJÖņŅŠŖ'¤ ¼łf3g¶Āßæö)„Ōj=kÖDóŃG—ÉČØZżēūAŃe.S§)X»¶jŹŠ=ae¢e#=óß(ĀÕńī_H…'ć]Mt!Geł ĆĶNKCē"üÕų9ŖšuTįćØĘĆβ5Ķ%O-&>GĘ-…=Q ;¢r²‹,'Ų‹0®K<4ØÜålÉŅ\>’Ā|—g¦NmÉܹm­ī¢h)ŅÓU¼śjh•ÜÖģŲīCūvµŪ:QV¬ĢcÖģŖeļ~ä_~ųį6¬[%šōz«VE1yņ…*¹67m"a×ļŽõŚ„9.NdzƒSIH¬šĖw—.ī¬\Ł™.]¬—„®ŗdfŖ™>ż«WGW)ÖT$‚„‹Ż2Ä”{W»Y°0‡ Ķw]ąŻw›±paū:” +sē¼ō҉*%? óĒ.o¼¼īo6īī{a÷č%1Ÿn¢ÖÖĶ…’Żčc`ĮX%>nU Rņ„œLpįd‚+)ł–‹r‘i tUä¦$ȵˆ ×¢»ĪPl 2”n¤;p1ՑĖiŽw]ė×A¢cĮĆ7q”–æˆŻŗµ€wĘg™ķ¾źķ-gƆnµÖmµ* °lYļæÉģ¬ĶīīBvļņ”IHŻ×Ž’ŗ­wŽĶ2{į/ ˜9³ÜŗVÄåV—ė×s2ä—/›ÆąéŲAŹömŽ88ŌŻė®ˆŒ O>NT”łć£ˆ/ælĻøqMźÜ»šÉȑ§«”‰W,†×x1葶ēŁaŠuė x’ó“~yyÉX澏>źWƒ½²¹¹ƌ9Ɩ-ńfļÓ”}ńXa«ŪlĆFżā¾vO„‹ųpݽÉ×Tkhą©ē›ńEø;›~Ō:'\9ćJ”Ā2Ö!O{ -= hå™O ĻB<ģkæ`k ^@D–=Sw©V2.‘POgæ<Žy ”ĢoGńҰt³ßŻ\ٳ§7~~õĖ„oß¾^xį8łłęÅ7ŠŁæĻ—ŗ»˜Ł@Ɉ‘™f'£ņ÷·ć—_zŠ»·W ÷Ģ:h7īė×ǘ½O’žvlXēDRwŸūäēü\*—ĀĢ/›7wbĖ–i׮މR©cĀ„ó|’}”ŁūČå¶lņ¢ū}Ćū×~%ƍČ0{ŽčŲэ?žčUÆęƒęͻƇ†™­Š_ĪO=ėœ"Ȇ sß »×bELųFF‘Ś6 „ųėłśŻ"ķŹ’óeŒvēŸ8—»¶XŗŹ5“ö.¤•g>-= š¬Āmeč v^÷bĻ-O4ŗŖ½oLģGGß’ā2ÓÓuō˜JjŖy«˜>}¼ųķ·^øøŌŽŪ9{6‹Ē?Jzŗy1}ƒ‘³~‚:ųéGGkųH*yyęY³[“pfß¾>4jT·Ü–ĶažükL›fvū±o:ńéģŗ+䯎Z Ć^NēŸcęĒ®Ȋqt¬ūž ?žĶ;ļœ3Ū­ŻĶUČļæyÓ¼yżo'1IG’)(ęõ}ŽXæ>†Ń£Ļ˜ķ4cŗ 'Ō­|6lŲØ˜ūRŲIņĪ29¹…upµ[ƒtl¢cĮXRqń+”Õ øāÄßŃī\Kwø«LŹ\Ščč›GGæ<‚\•Ü/wž`“;»oz P—²ŖĪ=”‰ ,t{‰†¼dž"÷ŁgšĖ/=ĖėwŅõė¹ t„ø8ó2·~ń¹Ər¬į^Yµ{"•Ė—Ķ˶ūĄīüńGo¼¼źÆ5kķŚhƌ9ƒVkśĖąĒÕ<žxŻü§¼Æ0;ūŗ@Ÿ}֖?lUý²>””™<ńÄQ23Ķū&5ń÷~æ:ķŁa ĘĄ3ƒÓ8{Ö¼{ņÜsüōS÷z?GģŚ•ÄK/0«n»X Ū~õ¾ļ²yė R ¤(”õC!f£ś?GnvwQ¬½qß »9^_ '-»n&^ØiėŖeśĖ*®¤9²ę‚?ŹźizEB-= čč›O'ßÜzįš\¾8Čõ DB=zƒ½”z‹¬ę0¶s ę²`”yńŠśšĒ½k]ķܚ"22Ÿ‡śŪ¬LĶR)ü±Ū·N%¬ŖJFÕžż}ųż÷‡j}I)KšėÆń vŅ,×ÕEČß|źtÖÕß~W2ę ³ŚŠD¾ł¦3o¾RýŗwTUŃõČĆvlXļY'=;Ģaö§Ł|³Ā¼ ķO>éĻŽ!×ӛq¤ņÄGĶŹŌģķ-āą¼½ė· „°TGV_h€¢!W6ź/!ī…¼Ł)_ĒŖ—“«MÜWĀ®Į®–qģŠķc®Œ /éŲ›T­ŗ³Įn…ōl˜K·9f׉­ļäkD\Mw ,ՑóÉNhDˆ“zóļÆPO8Ž`üšh³b°ŗw÷ąĄ¾÷…°s;ēĪ)č×ļ yy¦ß½&!bņCj¹Üj5FUœ.]Ü9x°NN÷ϳ_»6šQ£N›—ש“”]æy×ÉųŻØ( I%?ßō…J$B6mźĮsĻX”g÷–„„B<Ģę ysēø2fō½Æ'liŽWńü if}=äÉ_õÅĪīžęJŲ°!†×^ 5ė=ö˜ė~ō¬łNŻcóä||(MÖ$6ī¼ŌĢķ‰\l~9ÆŚ†čż)ÆĻŗ×°›IŲžOݱäÜ+nę¹ v5æTƒÆ£Š‡ƒ¼Ž!‰'›eā¦DV‡? K#hढ“_7ɤƒo>^ö 4"rŠ$HD &,¾ ŸFPØ0—ڲ„3ō«·ńW•įļoG×®lڇNWłj&K”G&ŌzW5E¶ža/§£Tš^5iāȁ}qwƼéŠĮ ;;1¤šl›œ¬ĆŃQH×®µū¹ß‰Jeą„aé$$˜Öv °vm7^z©‘zvļqv–šŌSžlŻo–¢ėŲ?*śćė[=µĘĄšįdfšž{Ū¶ua’žūK!VBūö®8:Jų믓moŻŅŅ®¬^dšÆŒķ×½ˆ“PĀQõBˆF.*œ«Vė¼6qߨqĀc„|’Ēżµ¬.Z½i‹‡Dd W£l>éĶ—o1øE>uÜĶĮäŖä‰¦|Ś7Šåß`TūD:śå!é+t­‹;‡"Ęt¹ 1Ū¶õÄĆćž}× šažüöfµ]¼$—øøŚŽ}Μl³°^^2öļļ‹ĻżWb`źŌ¼ūnS³Ś.\”CbRķ~īw²diW®˜²paž÷æĘ5Ü£ŚEćĘģŪ×Ē,EZcąŻńYfg4Æ ¬X‘GÄMÓ«„;ĀÕõžS†–0yrs^}5Ь¶Ó§gQXXæ•÷ ¹÷ēœaĆ|āsė–rųNī 7fF/²#2©ś²½·›„] š3}eĻåŅČGŹÖ¹ĶŲø7ƒÆ5­!¬Kˆåbü»6(7õ¾Æ£š~Yōjœ£¤n-k;zƒ€[YvOpåB²#ŁE¤B=łŁž™u M”é…ĢŗuŻĢžÄė3<’üqvģ([¶éNō—óĖϵ³,Ļ…‹j{<Ķd=]”PĄž=½4Øī×P¾4=}ūāÄ Ó.ßO>iǚꆋbT”†Ž}SP›”Oœ2]yšŌ IDAT„ ˜§ģ©?žĮ€‡P©L (³>vaÜøŗŸu7!QĒC½’),4½œŪ¶­ē}įŚnŠ‚-]»īēźUÓJäIļ93ķ+ōźŽ0ūH0‘Š’JN‰…0ø]ŻnlTŸ¬BG”žlo’ĮŠ6¦=§j+õŪ7ć_6–Ü•  €³ƒÉæ‰ŌįQ…¤*Ŗ—xi×‚ęœ¹VĄ§kL/Ę­¶HKFxžĶ=JEˆ„:śę1 (‹V^÷M&ek#hęQH3BF¶‡“)—R˜÷IŠY‚īØQA6A÷_X½ś.\PSPiŪæqųp}ūÖ.ķ¶NWœuה  0mZĖū^Š…’āT;vÜg2CļīŻJöPņšĄŚ_WōƙŁf ŗ½{{ńÅķj¾Cµ˜ž==łņĖöL˜pĮdŪł ryśi{źöRč“O²Ķtß}·©MŠż1›7?H·nūM–ÆZžM./s¤Q#Ėø½'äŹų'Īamj§”D$0Ŗ[ķšmXˆt]a·®SļŻ˜Ó²…¬ūĖņī:)YF}Ŗæ3-~ģŚ@a¦’ø“ ø¦Ē±ā±ėŒļOk› kU¼Ō“’§qć°imZƆö,]ŚÉ ½Ŗ;ø¹IY½ś³Ś.Zl^†kk²m[Ye†zȓٳŪX”Guƒ† ķłį‡®fµżlNŽY‰jī%;+ä3Œ{yÉųłē÷MfŻŹ?¾™YBRią“YµļŪÆ 7nhųcŅd»ęĶX° ƒzTwhÓʅ¹sM+‡Ōjųz¹i °9$å˘ūO'ꯄ؆ŚFŻVgšĮ7;„(U–ŸüE"›?kŹ÷愲/“x²ōv“0v°]Z8ąé*¦°HOT’ŠŸ’ŹąšłāņŪ©AxŗJš–āī,¦]“⤣ęF’[ ĆĆEĢ›ĻśŠ£#nNb ŠōD'±ł@&‡ž=F»{>~=€Ł«xķq/ZŚ!“ˆJRńķŽTĪߨܒe6Ć œ¾*¤Oūś³R[łę›\Ōfĕ-YŅGĒz’9W™žż}:“›6ÅUŚ.4TĶÉSŖZ“¬Ź`€Ææ1YV*²jÕ6ēž}¶/¼Š_Æ“ŻõėöķSņ裵Ӻ«ŃųlŽiaL € ŗÓ Aķ¼Ž{ĮźÕ]¹pAAttåóį®Ż…œ9ćČŌŽoæŖ,]–k–÷ĒāÅ‘Éź½}£Ź¼ūnSÖ­‹ęāÅģJŪż²)ŸIļ9ćēW}ėnJ¾”¹GƒŠžŲ›VPŲ°aĆ2Ōė‘/&UĄ‘K5“mQ“²ĆݹŲj,ĄwŃ­µ#Ūdńłŗ$ÖģN`Ŕ Z4.^„œ»QĄÉĖy(UzR³4œ¼œĒÉĖyh“$bė> įį\Ų&‡%›“łłÆ äR!ßL ¢o§āŲ"{­ƒģX1%ˆĢ-kv„±õ`& ¼¤¬žŒæ§e“­žS‚s© “‘”㧟M+. ņµ¹¦UĀāÅĶŹL½x‰e4÷–ą?”ÜøaŚu}ņäę“lY÷ck‚Å‹;˜„Zø(·ÖZw·ļPo:»šˆAUvcæuė[·nÅ`‹æzõ*¬Ņ>aaaģŽ½ū®Ļ]®®¾ż¶‹Ym—,5ÆdQm#6VĖĪßL×:“=ęg…Õ=D"Ė—w6YwY­†•ßV’=ÉPJųüXZŠćbmŲ°aźõē¶į/™Õ„“^RZ4¶cśŠ8Öž‘Īīć ~ž+ƒq ¢IUhčŅ¢ø”Ļ÷愱č—d2s“\¼YČ¢_’YōK2J•žŽœ ö—3öĖ(–mIį×CY¬Ū“Īȹ‘DÄńbRē\»'/Ö'²ķpßķLćÕŁ·ˆ<ŌŽ²õcR„œ·Y ­Ķw«ņL–›‘H„,_ŽŁJ=Ŗ›ųśŹ™9³•Év‡qńRķˆSYöµiĮ»Q#{>üŠōuŻÆŲóńĒ­M¶ »¬ęČÓnĀÖFÆ7°üÓ›”yó*vŌŽŽfžüł(ŠRŪ÷īŻĖ!CŠ™Sø» ’ūß’øpĮtŒģķlÜø‘±cĒŽÕ¹MńČ#ę)÷Pr)¬zł7ī%ĖæÉCkBāą fŃ"›ūreōģéÉšį&ۭߐOVVÕ½Ü2”>=LžZ„žßŻ•Śz½ü¶a£VQo涤L!/ZƆžF[,”“.v).A«3Šļķ«lÜg:;hp9nĕ^x pžF|J[l]*½ŹĢՒÆĆŪĶņ1Źk īŁFÅhµšĖ&Óū—_nD“&ŽVčQŻfÜø¦x{›Nø±q£…Bī‚£GĶŗæų¢6%TeLœŲŒĄ@Ó5ĆĶq·6»Ķ“īńE»Jß툈¦M›FF†é9Ø:ģŁ³‡øø8Ž|óĶ9žŻbnˆĒ²eµĒ³Ć õüŗĶōxõĘ!ųūŪÜŪMńńĒ­M†ƒŲ¼„js„B)fĪŃ ņÕ"t·•uĢ(”ŌZ6źõv„ōĖA1w©°®©YÖ’™ĪG#˜ńZŅ’35$¦« Ļē·£ t&ĢĢ."\Åüµ“e™ß\Eä䗾 „ŗģńō54z^r>BD§f¶rCÖąŠa%ii•ßk”PĄūļ·°Rź6öö"&Lhʇ^®“ŻĪß ™ó™+rł½‹Ż“Łōb*8Ų‘!CY”7u‰DČŌ©-7ī\„ķŽ+".Ng±l«–`łrÓxŪ¶.Œ\īo …‚ØØ(n޼ @xx8¹¹¹xxxXį1cbbøpįZ­OOO:uź„‹KÅÉtęĪĖĉqt,­t '** ƒĮ€ÆÆ/­Zµ*ÓęvnŻŗ…H$¢aƆ„††’’’‚££#ŻŗuĆÕÕÕŲ.""™LFƆ 9ž<ńńńxyyŃ”C‡rß°”=“'7göģš Ļ šĒ%QQ‚ƒė†bw×ī" *Ÿļe2!“'7·Rź6!!ÅcźĻ?ĒVŚn민5Ö<ļ¹ģ" Ÿ "W%F«/=§htBód8«ŖŻg6l˜G½vÕZŸ·ž„}±¾8N7ČO†Æ‡/ Įžr>€»³˜~O«t2s“|ņCłåˆŌš{›$jĻi±MŲµ[·š¶ź>’|­[Ū2:šĖ;ļ4eįĀ([Mssõüµ_ÉÓOŁ[±g’QP`ąĻ½¦—LŸŽŅ–”ŹLF fīÜ«$&V|_ Ų¾£€‰jGü󍳬ū3f“*·:Ą2dˆń߃`ųšį¬_æ¾L{„RÉóĻ?ϟž‰R©”œœģģģųę›o9rd™}<ČÕ«Wٳgq›B”ąÉ'Ÿäĉøŗŗ" ÉĖĖC*•ņć?ņā‹/–Ū߉'¢P(HMM%>>©TJ~~>¬Y³Ęx-o½õ2™Œ¤¤$ĀĆĆ‹ÅįććĆöķŪyšĮĖū½÷š³dI99[Źõz›·2}ZŻS·l5­1"Ȗ“¬ ̜يM›ā*Mųu劆«WÕ“jUyn”\•˜9’’£•tKųņD -j½‰Š€‡½¹†@×"Śłäįi_÷\ėmŲØŌK7ę£a"ņ•Ö]¶hlĒäa~dęh9žĻĪ£Y¬Ų–Ź”ÆcŁ&‡‡Ś•ÕŽ™!]”A"pźJž1qUɟöæ·uĻŽ\“oK Xćä꟣»Ļō?¾™zSpv–0bDÉv[¶˜V4Ō»vš“Ö4h`g«§\d2!“&™¶nm©¢{bMņĖfÓļ`Hˆ#/¼Š°Āߟyę²²²ųõ×_8{ö,YYY¬\¹²ÜöėׯēŲ±cœ8q‚ĀĀB²³³ÉĶĶå™gžaņäÉhĖ ;w.oæżv)ĖėŅ„K¹|ł2/^D”P™™Ivv6Ļ?’<Ó§OÆōšNœ8Į°aĆČĪĪ&//ŌŌTśöķ˘1cČĻĻ7¶ūóĻ?5jłłł†››'N,÷ø..ʎmRé¹¶žZhVfć{MR²–ćĒM['N“ĶU”eKg³½młµņł9_-bī± J Z}łĖl]$&1ONz”¤<—S9ėĘŚK~Lś«Ó’į`“;M±iĆĘŻP/…ŻæĪXßĶŃ^Čč§½éҲt|˜P¾TwXe‹Ōz<]J[ŸÆÅ*ńpÓÆSiė‚H$`ņ0?l{oc3Uųēr½tØUģŻ«¤ØØņWHˆ#={zZ©Gõs„ÄC‡‹Čɹ7 ^s®Q£‚‘JėåŠ]cŒd²ģŹ­H-ē/Üūe:lßnś=˜6­rė¾T*ÅĶĶĶčŚėģģŒ››åĒ0GDDŠ®];zōčaÜęääĬY³ųąƒŠhJ[™Nžłäģ슭‘ŽŽŽĢž=›ÜÜ\N:el×®];ʏL&C(Ҷm[ʎKXXz}łP“&5ĆŽ¾ņµAB‚–“§īż;`Š;L åŻŗyŠ¢EķšTØK˜3GģŲQPa¼mFÄÜ£A¤ęKŠT`Ń5—Ä<9k/ł1q_3F»QūÕ06lŌNźä’•+ąL„õ/ėbD!—# Y=#„K7 ČČÖ"B³Fvų{HxkAt©ö§Æ0źI/¶}ތ¬\-K6'sžFžĢęėÉADÄ)IŹŠ @Ė@;\EĢ]—hõėŗ“æĪˆy¬«éR6ŖĻ‘Lkģ‡4Y*ĮFY:tp„m[._®øv©Fcąä©"d]÷?E¶ž'+_h 0|xc+õØžąę&å‰'üپ½ü‘öģQŅ©£eK·U•#G”¤¤T.āģ,įå—-ū“oߞåĖ—3nÜ8ŗwļNƆ  ((ˆ>ų Lū¹sēņĘoąååUjūŠ”C‰å§Ÿ~"77—ÜÜ\ łķ·ßŠjµčõzD¢ņ…ĪvķŚ!—žæ[¶,Īa‘ššjÜÖ¤IY+­³³3*• ­V‹TZöz{Ėyī¹6n4“¹µ€žÖ‡šž#īĘū#22’ģģŹėζjÕŹØ”°*•Š+W®Š“iSœkNˆöŁøøH*uyONÖqSKóf„ßÕB“©”ZT0ĶS‹Y{ɟ³ÉΌ阈›m fĆFUØwĀīé¢ILUP¤ē‡ßӈN*žd ųį÷4®Ę»›iuž7ū:»Ü@†‡‹‘6Čäšł\"KgXžjS2×b”“²Ć^.¤HcĄ`€É_Dzżp­‚ģšv“`Ī\ĶgĻÉlR³ŠßÄt5?üžFn~Łļēæ2 »Usn˜£DĆ½õØ®×?VłBĘ&šÜƇ2uź„JŪ;¦²ŗ°{āøŹ¤µ¦GOš6µli±ū…įĆM »ĒŽ÷6fó=¦C^|±”I+eUyõÕWÉŹŹbĒŽģŽ½›ääd“Z-2™Œ7ß|“„K—Ū^¼x‘æ’ž›U«V•9ĪŚµkyżõ×iŠ Mš4A$įęęFÓ¦M¹t©ņļĪŽ¾l¬¼½½½1ī·„;bóÆ1Ф°»g’E ”yüž£Ö8}ŗņ9B*2dHÅ.%%%Ń„KöīŻĖ AƒŖ¼æ¹Čå"ž>€5k¢+mwüø’ęĶž‹‹“Bę "CYsʲ+iŽ|z4˜÷ŒÅßÉ–ŲŹ† s©wĀīłˆš™”ņ u,ś%ŁųoŽPźßP< żyŖrmØqŻĒģ>^ŗö”ĮĒĀņ8Vq&ĪøU™s—šķŽŌr·[ .G‹čŽŅ–ØŖ&ˆŒŌ’”\¹Ö¶m[W‚ƒm冪ĖSOł›v͈‡³4łVå¼ņŠMÉQ]Üww)YY[ĻĆĀŌäęźqv¾wn⒘PvĮŻYķ*cāĉF·dNGbb";wīdĀ„ ¼šĀ ōźÕ (¶źŽ1’2ĒųōÓO1b«WÆ.µ}óęĶĘųįŠČĢĢ,³­ØØ½^_iFhs0Ą‡€{*Vgēč¹®”}»Ś™•łĀy ……•+Åz÷öĀÓóī¬ÓĶ›7/•xģNL×/¾“ٳg“Ķß’}7]«q6-ģžsLÅØ‘ÅĀ®J'`žń@’ jŽ# S)aĪ?AĢx(Ś–ÉŁ† 3©w_nÕRul=āüMŪ=®)Ž™±Šķ×ĻŪ =©æ“hįl2Céµkj22¬«Š9vĢ“°ū裦“§Ų(©ThņŪŃjįTč½[@&$źˆ‰©\Łč@Æ^^•¶¹ĮæńŲ–šŲc1tčPćæE"5b̘1DG/žÆ]»Ę®]»˜:uj™cčõzbcc鎽{™ß"""Löõڵk„Qœ?€ ˜ÜßB”€”CM—ģ2ē[¼WücFßś÷÷¹ėóH„R‚ƒƒ+ü»ÓU<33“ .pżśu Jǜēēē£P(P«Õh4  …¢Lҳ““4®\¹B\\*UÅß”V«%""‚+W®›kłśČ}śx›Ģv_ā‰£Ń ųņD ±9ņRut«ŠP`@$4ą*7ķ¢œÆńÕ©Ęä©ė½Ź†”^ »‰éR¶@ƚ¦¦¬ē6ąģ9Ó ™¾}mĀīŻbJč1ąÜyė•}HO/Ž«ŒFģmż»Ä!Ą…SMa®Ā£*ńśŽŽÅļś?žČÕ«WIH(ߕ»C‡ģ޽›ü‘ėׯ“™™Éõė×łč£hŪ¶-_|ńC‡%(Ølfs”PH`` 6ląśõėäę꒜œĢĻ?’Ģ¢E‹P«+¶¬ggg3räH._¾LFF'Nœ`Ā„ ųūū—+@WsFĒĶš²øWœ>S»¢—/_¦sēĪƚĢ-[¶ÄÕՕ—^zÉ(ō<wwwvļŽĶ?’üƒ»»;īīīʤcįįįōčŃڶmKćʍ±··ē駟&'§t~…?žų???š7oNŪ¶mńšš`ŌØQ•¾WUÅÉIL—.ī•¶Qdė¹”gį©ĘÄ(ģ*,/dˆ…tzŁEb^h•Fß@baÅüŒB ߜ °%­²aĆ ź•Z(<Ę&„Yƒ[‰BTjŻŪ<.õ’›·*xD"}ś˜oÕ±Q>żūū˜ŒŻ»uKĆ G¬œvYSavĻ,a­¹ß1Gø|łŽeć5Ē}¾_æŖ½:tąµ×^ćĖ/ædžüł“iӆ˗/—i7}śtnݺŘ1cŠŻ–ųĀĶĶ бcG¢¢¢Ų²e /^¬š|ß}÷#GŽ4&–pwwēż÷ßgęĢ™¤¤¤”+( 0…BA»vķŒŪBBBŲŗuk¹I§ŖCĻžžČå"ŠŠ*öÜ8yJ…Fc@"©}Źó›•+᜜Ätīģf„ŽĄČ‘#qttäōéÓ4nÜ„RÉŃ£G=z4ŻŗucҤI̟?Ÿ¬¬,fĻžM~~> , M›6Œ=šĀĀB.\ø@ćʍQ«Õ„……1lŲ0–-[fTø@qLųźÕ«éŃ£jµšC‡1nÜ8š4iŒ3,v]żśysźTY·ś„b!ė"“Ž}„‚®PPlµÕéĮ@q;™H£L‹‹L‡»\ƒ»½7¹W™'™Žf…ČÅzfńķ¹$ę•?]MwąŸ8Wz72/|ĪZ¼ųā‹ųśśņõ×_—ŚĖčŃ£˜?~™ŲķY³fqņäIvķŚ…^Æē©§žŖšīīī<üšĆ¼śź«Ę±įڵkŒ?ž·ß~›gŸ}–’żļ„ŪUĘęĶ›‰‹‹ćż÷ß7Łv޼ytīܹĢö÷ߟ‹/ҳgOf͚Uī¾sęĢįȑ#åžęęęĘ Aƒ1bD©$~o¼ńb±˜+VTŚÆ7nšĪ;ļ˜ģ’Ēl I¹_ØWĀnlZķ›˜ź#zħ iŅ r·8U'2²ņ…Lp°#nn6-ĆĻ?’LHHŻŗu«Öžę,M= Kbιj“’ćĀ… |ūķ·,\ø'§ŗ“0«eKg|}夤Tl¹3„pŖI.š(}$Tļ=X»v-‹/&11‰¤8u̘1¼ņŹ+ĘdOĪĪĪlŻŗFCjj*©©©øøøŒPXģ`Ü^$..Žččh ..." 7nœń}™={6~ųa©}ŻŻŻŁ²e iii$''ćääDPPŃ`ēĪĘžÜĪ+Æ¼Ā³Ļ>kR(–ĖEtļīĮįĆi¶)(0„„yóŚ·«THJ®<¼¢S'7$’»wŚ»uė]ŗt)÷·Ö­[³nŻ:ōz=/^dóęĶ<šĄĘ߇Nbb"’ö©XØY¹r%R©”–:^Iä:·=üšĆōīŻ»ŒūūØQ£xńō’fß¾}lŪ¶Ķ¢Ān×®•žŽäÉ&$ė’ūÄBŽR.2 ®rNR-öZ<ģŌøČ‹[¹™±Š¼µSc×">źĆ¢Sø™Y6yĄ¦+><ą—‹¤ö¬Ē Y³f _}õ•q¼8~ü8@ pšąĮ2ĀīŚµkqssC*•RPPĄ E‹„Śét:Nœ8Į–-[Ų¹s'»wļ ''‡šōÓO—ŪƜœΜ9CóęĶiŲ°l·¬¬,8@ėÖ­ńóó«Ņ5§§§³téR 'OždŹ”)Ʋo·słņeŽ9BŸ>}ŹüvāÄ ¶nŻJXXX©„€§N*u+"77—Tx}÷3õJŲK«W^ٵš8›°kqŅÓu&ė»6o^w‹šdƌ 2¤ŚĀnÓ¦N…‚J³ß¼e=aלsµmėj…ž˜Gtt4«V­bΜ95&ģīŚµ‹Ķ›7³qćF‹·uk—J…Ż““āļŠÅÅŗŹSbb+Z¶tĘǧzŽnnnø¹ż§ä‘ÉdČdeźH$ŹM@$•JͲ° ‚ƒƒĖķC vvv–®ńöö6ŗ_ßIE}ƒb«]eĀ.ĄĶ›µOŲŒŌšōiŽÜ2eyĖ„%”,¤…B! 4ą»ļ¾C ŁĪĪĪL›6ĶģsķŁ³‡““4Ž9‚Z­&;;ŪX[łĮ,Õöv”ŗ„N:­e „\š}}}ĖĶņm SsmÜįXŚzēńÉT\åäāšYŁKtLźĒģ#A¤ä—ż^óÕbÅŗóx“Œ9u读7{öģ!,,¬”444___üżż -µOrr2±±±eÕ§Ÿ~šo¾ł¦Ģ9t:Ɔ 3 ‡·{ƒ”pēÜJ÷īŻ7nćĒÆ°’S§NåÕW_5ėZKŲ“i†Ł³góÉ'Ÿ°mŪ6^{ķµrŪ:99±’žrÆé‘GaåŹ•Ģš5«ŌxYŽyē³,¼÷6a·Ѭ”œœ±ÄPm&>ÕfE·4·"M[”,!ģŽ¼y“””ģķķń÷÷/Wƒ©Ó鈏'11NG“&MŹĶ¼ŖÕj‰‹‹#)) ƒĮ@³fĶšń)ėf©×ė¹qć©©©ŲŪŪbŌśCqĘÕ¤¤$5jDaa!ׯ_G„RRź¼111čõz“Z-ŁŁŁDEE”±ž˜ĀĪNDƆöÄĘTŲę–-|‘fœ«iÓū+^÷ʍlß¾ŻāĒmŽÜ‰æ’®Üµ-*ZCĒÖõ ˆ‹Ób*ģ°}ūŚ£š°4K–,)×b[“kgś>ފŌÖ-?f s”b–Rˆśśś2oŽ<“ķ¶lŁĀĉyå•W(**V"¹ŗŗŅ£G–.]JÓ¦MMcŹ”),Y²‰D‚§§'R©ww÷r-cåy899‘••'Z»råŠń·Ż»wóÄO˜ģƝ„„8" ŠjĖ×.e«ˆ>›‰ÆcĶ/£$:Ę=Ą¬ĆĮč eē¹}‘<œYiŒÆ5)q‘=uźTa·{÷īųūū³k×®Rū”Äo›ė^+‰xńÅŁŗu+ׯ_/WŲµ&ėׯ'((ˆ3f°råJÖÆ__”°["‘ˆ§žzŠƒY”g…ŖSo„]½”8AU]fÅūAģ9‘ĶW›Ź/+TUš5”#•¹ełŗ»ńéu[±PIL0ż÷n“öW®\aŲ°a„;wfēĪFKĪ‘#Gxå•WHLL,ÕbĖ–-FįxļŽ½Œ1¢TLŒ@  _æ~lٲÅ(ĢīßæŸ×_ųųxc;”PČąĮƒY·nœ;wއzˆńćdzjÕ*ć¢I 0tčPÖ­[‡D"”sēĪĘEĶ÷ßĻ÷ß@AAA•µ÷-Z8U*ģffźQ* ŲŁÕüøU¹°ėļo‡³³e­LyyyģܹӨXhŠ ­[·ęį‡.„8HIIaóęĶÄĘĘ"—ĖĖXZJ()S‡Į` €nŻŗ•²¾Æ]»–ĄĄ@<<<Ųµk™™™8;;óųć-6ĒŽćųńć=z­VĖüłóčŪ·oµ-ł·Ó¢…éočÖMė »·Ģpe·”Õ®6ҤI«ĖŠ壵‰·ŽB“*tė֍“'OššJBB‘‘‘|ņÉ'Œ;Öd™”ššp-ZĊ+xć7JÅ*2¤LńŪė-— T*Bš¢E‹J%µŖNM_(ĪŽäČĶ›•”Œ³^Ęž@Kģö IDAT—"ś*ų;ŗlā,…RĢõ Śxē—³§õéŅ„ vvvœ|(ž˜rrrX¼x1­[·ĘŁŁwwwžyę†jl·’~ņņņX¹r%ķŚµĆĮĮ???^{ķ5ž{ī9öķŪWŖ“'O¦OŸ>H„R|||=z4}śōį?ž }ūötīÜ©TŠÆÆ/;w¦sēĪÕr4ĒRjĪ3¹[ŠŠ hMČ9^^ecµī†uė֑••Exx8»wļfūöķ?~œ•+W²fĶcżĖ>ś///bbb8xš ū÷ļ'**ŖT¶^€iӦѦM’’’8}ś4GŽ!&&†ńćĒ3wī\23’ĖjzżśuŽ9±cĒŲ»w/ŃŃŃ 6Œ>ś•JÅĉ‰ŒŒdŚ“iČår"##‰ŒŒä7ްȵ›s/ó ¬ļ˜šfś]3GP·aš«]e¤¦X_įaŠü|Óļ„““eöŌj5QQQž)•J¼½½¹|ł2óęĶ#==Żøorr2žł'„ŽéźźJDD111Ęm^^Å ×¶oߎį߀dFĆwß}ĒéÓ§ĖŌāżī»ļøpįPnóĻ?’šėÆæņŲcYäŗoĒŌ|«RPk¬7VxŲihķU¾õörjķ séÕ«‘‘‘¤„Ēʇ††"‹éŅ„ !!!xzz…]FĆŁ³g鯻w™ćģŪ·!C†”ś{ģ±Ē $44”Ÿ~ś©TH”%7nœ±<֝]»v-ÕVÆ×óÓO?Ѷm[cvńnŻŗ̆ Ź=¾B”(s\;;;:tč€@ `Ū¶mU Ėŗ“>ų Āžßž%’~¢Žø1Z°,žH$ąĆךlo7ģn$#‹ųhU"Š]ķdBfąŃ„Ńč$’ĻŁkÅķģ„|:ŗ!ƒŗ» ž×."¾ˆŁ«8£|WŹo)?iB|Ŗš7ęG”Ńš–ņŁ 錏‘’CiuĖåćļćÉĪ×±db ½Ś’·( ż”ų|ķ³HN_µŒ›Ka‘Ͳki ĢX`;ŽE|ŠźÕ«‰‰‰į·ß~C„R‘M^^ū÷ļ7€ÉÉÅ.ō%ńķ̜9“qćʐ””Ta»yóę]q’’’ptt$<<œšššRķq",”<7ÕvķŚqšąĮŖ^®IĢYZCč1G ¾›ē^>ś(:t(“ØaƆhµZ222šõõ%44”1cʔr©rrrāµ×^cęĢ™@ńdžüy-ZT&įŠ[o½Å²eĖøvķ=ō=zō(µ` …Œ;–Ÿž™šššj»š‹9Ļ=/ĻśĀnļAu“SŁ(‹¬RÕü‚Ś—€±¦¢·sćʍrĒ÷öīŻĖ AƒX²d “&MbŻŗuŲŪŪ#‰ČĖĖĆĖĖ‹mŪ¶•ŚgĈlŻŗÕXzŖÄÓcšąĮŒ9’ńćĒćāāBzz:®®®<õŌSdd”N¼ōšĆóĄ ‘H0 ØT*zöģiŃLĢ%8›a”(Č7 u³Žzس_—RĖ*½2 „ä«E8Jk‡’ęöøŻ§Ÿ~šŠŠP£Ā {÷īFa÷Ņ„K(•Źr]˜U* …¢Ō¶¢¢"rssń÷÷/7®ūnéŪ·ÆQp½“åL $!!Įø6‚’ĀÆ>’üsNŸ>]F@¶³³3zæŻNTT›7oę駟ęųńćÕveīŁ³g…óčżź]„]•å›ēūŗ3ø·ŸüĄ¹h“zKł`ø?Ÿ½Ą“SŠŻnŽźĒĄ\ųtMįŃJ”*=¾īĘńåėIō{ēE*=†ųŃæ‹3ŸĄ„[…ØÕz|<$L}şÆ'Ņ’«ØīŠśøKXóa éjŽü2 „J@_O D"šöĀhb’Uˆ„Ś7µgŚpfŽ `Ź×±,Ž”Ģ¤óÖ`o\ÅĢŪP,˜\UZģ)-xæmSÓZū‰'²lŁ2<==ńóóC"‘ąīī^jš.±Ą¹»— rqq1ĘEeff"—ĖĖ“½=ėkNN 2¤Ü>Ż™l¤¼‰ĖÉÉÉ(<[³„]3žÉŻbŽs·l¼n‡ŲµkćĒ'-- µZMnn.aaa@±ÅDÆ×“‘‘aŒ©ŗĘ’???NWnöÜ—“””ć¶ņb3K²»Žn®)̹—Ö°čßIĀ•„¬vUįŚµk,Y²„9sę”YčÕeL½Öųö«Š9Ź7K¼#‹-*UŪ¶ų€gžy†ęĶ›ćģģŒX,fŠ AL:(xu:]¹õżn/Y£Rå-6JŽŪKTv¼’Äd5Imq_/{ĪŹß¬?e'$$°jÕ*¦NjuaW„Rńä“O2yņd}ōQ‹Ū”PØÓaµuęR¤¬ü‰H„w/xUfŃ-ggērK•‡‡‡żū÷/³½Y³feāķķķ 3™LfĢģ[Qi,KcggzŽ(“œ Į,üUˆ…z“ś²ĻY”¬=KzGGG:vģČ©S§HKK#::šīŻ»ļŽ½;\¹r…S§NŃ AƒrĖ•U„³³3Ļ<ó _~ł%ńńńFok’ŸŸo¬šĀ /”ŪfÓ¦M|õÕWf—EėÓ§vvvåƻۨ>õ&fWnAĆGJ–†VAv {؃ÖAvĘxŻSįł¼·4®xĀńt•Wvq_<śy¹IĄĖUBtRYé0,²fDp3žæc8;ŠX=#˜ÜoĢ¢@łß¢ĖϽų"sņu4ō––śĖ)Ša/b_MaØŖČ„µOė]×±·7½Ø*(Ø^†ŠČČHüń2æEGG’æ¤ĢĻ.ĒP¬”|ź©§ …ųūūc0øzõj™vß~ū-C‡ĄĻĻĢĢĢ2nH_}õĻ=÷\©må%! +·ģѝ‰NŖŠ9÷ŅŽ¾ę‡Hƒ©Ā™€PhŁ÷ʍ;v,;vģ`޼y̘1ƒ©S§–r}’H$8;;—kUæ=>ĻŻŻ‘HD~~ى’Ģ©·[šoĻŽ]BIöŌņ< ,9 ½ŽśŽ)ŪŽ^lѼ uNǁŒa–¤¶Zų+ĆĪÄ”ÓP©jWŸė2……¦]‚Ŗ^Ā÷® øŹŹļW®Ŗö»P\o÷Ģ™3œ8q ”°ŪµkWD"”””œ>>3xšąRķT*;wīäŌ©SāāāBĒŽyī¹ēÉd°|łr4šāgõēŸ’žžŽ³³3o½õ–E®ŻT6ęāk¶Č©,†ƒ Ńü|-2™uĖfÕWĢ+­o3’KōPĪ:O„³Ž±Ć\zõźÅ¢E‹ųį‡šōō,ĀāääDė֭ٵkQQQL™2„ŹĒ/ńŗ3a¢µXæ~=‰„wŽy§ÜłŌŪŪ›E‹±~żzlņxƒÅ‹£×ėm5v-L½v-)|©õ|°"īßć ńó”ŅĄSĀ#Ż\™ūfC.D—¢B„1 +ĒeH$  PŖōéŃé Ȥe')”ZŚ‘˜®6 ƇĻē²óhsßlHV®–·¹ —æ]_æBžĒšÄ’ŹŘ»©-[¶dāÄ‰Ģš5‹>ś{{{ iŠ ’gļ¼ćš8’8žÉ+¦leˆŠ'*hŻ{kėjÕÖ¶ķrŌQk[m¶ŽÖjkėŽ­Zø­dĖŽ!dßļ*52 „$<ļ׋?ø{īī\īžļś|g̘;wīØnpąĄ̜9]ŗtQ:GūöķńŻwߨNQŚæ?f͚U«™{PP6nÜ śaæoß>Ģ›7üń‡Ņøžżūc͚5JŪ†ް°°šE.Lž<¹Ö÷ż÷ßǜ9sj^ž111uö­ c1v­µX,Õ÷sƋąą`lŪ¶ -Z“€ææ?„B!bbbšóĻ?ØNc€yóęaĮ‚˜?~ēżŚµkµT“#""°~żzXZZ¢cĒŽ5*Ź[·nEpp0kĘVTT`šąĮ˜?>ų|>?~Œ7bäȑJm'|}}!•J1gĪōė×-[¶D’žżü·kó¹ŪŲ~«ÉéQY)Ei™Ö–øø8lß¾cƌQūķ·ß°jÕ*Ģ™3§&ócÖ¬YČĪĪF‡ŸŸmŪ¶įūļæĒżū÷aaaQ#0óšįCĀÕՏ=½{÷°zõjܼyŽŽŽJ„čŪ·/āćć[[[$$$`óęĶŲ²e ®]»±XŒC‡Õdoܾ}©©©puu՛±k,ß]ŠęYQQ!…ƒ1võV÷ˆĪJ}#Æ#xĻdWTæOŸ> Ńh8sę † V+ZٳgϚwN}"»/kƒč“„K—*µĢ{•ƾś Ż»wGtt4† V§“§§'BBBpśōiՌ+//ÆeĢR…¬¬,äēē# 3gĪTŚ’ųńcµå/Ź`ÕŖUŲ“iScW¬X”uM²¹`6Ę®>Æµó<‘–+ĘO'ņ!)’%BJ–ŸUaü{ų{p‘‘+FQ™Nµ_*^-Ŗ·•”Ė WP(.—”e‹Śķ.\Ł8¼®5}›†ØŪ’}Ył«ö<&~ų %ęlxV£ź\PZmø;±k‰MõėĢĆėĆńöשJRų• aÉ5®E€9 ‡ø¼¼ž¾M›6įÓO?E\\¤R)Ѿ}{…B%a žżū#55éééxžü9är9\\\ ō² Gff&ŅŅҐ““ТТE‹ZuW£FĀkƽ†„„äęę‚ĆįĄĖĖK)Ś÷‚„K—bżśõHLL„X,†ŸŸ_xŃĖLŸ>ƽö!”Œ)m)+ÓÜÆL›ÅeCï~]lŪ¶ ‘‘‘X·n8:tč€C‡a޼y5µÓóę̓D"ĮO?ż„}ūöĖå¢WÆ^ųż÷ßYćY_±b¬­­qģŲ±šŌ.'''Œ?«V­Rŗof͚kkėš–D<Ó§OĒŗuė”ę8|ųp,_¾GŽĮįƇ1yņdƒ»Maähŗ×är B”LÆu»S§NÅ7ß|ƒsēĪaōčŃ5Ū=Š”C‡*„•{zzāŹ•+55×§NĀˆ#pāÄ L™2ū÷ļĒŻ»w[ÓGž>}ŠĄĄ@lß¾Ÿ|ņ .\ø€;wī ))I)Ņsśōi >·oßF=pēĪ…BXYYįóĻ?ĒģŁ³õöwš£vÕ5ŅĘõžkŠgEsFÓū–Ć”Å2ü=R)UĮeэĖŲupp@dd$Š‹‹UÖÜæ(wb2™µŽįL&sēĪUŪC·cĒŽ˜;wn£ĪÅÅsēĪ­SIŁŁŁYķ~www­Zܹ¹¹!-- o½õVĶßPĖ–-Ɖ'šģŁ3888Ōh™Ø¢wļŽčŠ”¦OŸ^£Z T×ggg«½“É„“““VóWµ¦2wĢĘŲµäP`1©ž : S; ęaā’M3fŠiŁ·Ś‹”]P½H¾“P‰‘}ų8s½ńiUÉ)8Ś1ńö8ˆ„ī?­ŽŽ\`Ü{œæU†ĒiUĖ«Sœßē©ŒĀż§µÕó¾Ł—{Ū–ś`öŗ_©HWRSÕ«VŅé4Ųš!caAƒ”>µøXæß_ģŽ½[å¾õŻ/X“h-ZTkÜĖ‚L&‘‘‘u*L¾Œ„„%¾żö[|ūķ·jĒŃét¬[·®–ÜPŠ‹5«ėĀÉQūšŚevčÓŲ B@@Ž9Rc즦¦āīŻ»ųąƒ”ƾūī»JābƇŸĻƹ_īŽ½‹€€%CØVķķßæ?āāāü§äžź‚kšąĮøsēŽĘg‰¾ŠdZZŅō^+ßP“É8HK«D‡¶Ē4“ž®žĮćž9!’Ńė¬Ķu“Šo¹‹*ŹŹŹŌźep8„. ėׯÆsģĄ1pąĄ:ϳ}ūvµsyįD{A«V­Ō£i@@€Ęk¾ŒŖ¾ĄÆņŚkÆ)i„Ō§_üēŸ®Õø–-[ź4’ꄣ» :ąīH!-Æį/§­ĒņŠÉæެk ™œ‚ Jk töü]XUŻ“/m¼-p`? ‘*ĄeÓ!)°ņē,”üū2żfoü=ø8°Ęr”HK$R ė{ŽĀŅŚ/]Š>ū) ¶ÖLü“Ģ_¤ !½ nIĒ7‹¼qįm!–RÉ(XYŠ‘W,Åūß§+ćÄÕŒįćā’ŚB*£šĶ¾üzŗ Öµźƒ—31võMĖ–šæŽIIśWÖ6qžüy•mn‹„õ’K77ŲšŚÓh€½=u[»źśš<ÆV/^C“”¤Ła乊i̚ÆYR"Ń{ÆŻ©S§bóę͐H$`³Ł8zō(¬­­1jŌ(„q...µŽåp85%eeeuŖ5»øøŌD&++«š“tOOOxzzĀ××}ūö­åxk,49šĀį” ooĶ¢Zś|G¤§§c’žż˜={6œœœ’’‚Ƈc芔čŌ©“Ö牋‹Ć©S§šĮčµEĢ«TTTąĒĄ tV”~‰D“4õĘ®··įkdŸ•Ōżüt¶ŅÆSTsęĢQ)8ł‚1cĘąwŽiōyŗ`6Ę.x8+–ך‡Oz®Ć?H€;nŽ,XrKx˜"DQنin±c#’dž%—޲J9% !Øśoįš_"Åų“ąćĪ…ūæē«ŹŸZUc@ä(xéür9…¾OG—«št䛏]7.\X`1i(,“įA²°F%ś÷+1hQ<ڵ²ϊ”×>»žĪ¤fWßųłV«w«ēML4£ēUģģģjD­ Ai©łłźŪÜųłīńčć£ŽŲĶČ¢ŖJ®U+ c&::ŗ©§€ÄDĶŹ~¾†5ŚŪk6®ž> MżƒÓ¦MĆŹ•+qįĀ 6 GŽĮØQ£”ŅčhT•H$µŚ½€N§CöÆŚÓ‹~©@JJ āććqęĢ$''ĆÖÖ7oŽDĖ–-õņ·ÕE))źŚ|†F›ūR›ū[[RRR°lŁ2 6 NNNxņä –-[{{{ŒŻ»wļbٲeX¼xq£»„„„X¶lŚ·oß`c79Y™Lż:ĒĻWæżĻµ!¾ŠJåv]W›Ęģ^ż"–ϧƒĻ7|TĻŠQ»—™:u*Ö­[‡ĄĄ@ŲŪŪ#<<\ēsxyy᧟~Bqq±’°•T*Ell,&Mš ŗŻŃ¶mې‘‘” ęółąńxJŹŖ/ö‹Åšė¬uA+‡GDķ4aaAƒ›+YŁuæ#īŻ+D¢[E§ˆ†B£Ńšģٳšž¦/xüų1nŻŗ…üü|888 C‡VyŽŲŲXܾ} :uR©ĀūšįCܾ}eee°³³CPPP­H²B”@tttMÆ÷ĄĄĄGs_ęęĶbcüż ›ió Ļł•Ŗ•¶Ū9©O¹&š3feģ¶kIŒ]CąćŖ ­‡‰€6bbÕ/ģ.]ŹĒ¬Y­ 4#óäŅ„|cüż ·ŲõŃba}õj¦Nõ2ĄlĢ—ōōJ¢3MÕŖ#‰š¢vš õś2yņd,]ŗk׮ń ”„Øt9ĒźÕ«1xš`L˜0-Z“@AANŸ>ŅŅR̚5 0hŠ ¬\¹aaa=z4ī¢ IDATœœœ  qöģY¤„„)©¶r8x{{cÓ¦M …°±±ADD8œŚŻ t!>^s«’¦He׆ÖldeםÕUY)ĆķŪÅ qŌūµ3331iŅ$œ?¾¦†{öģŁŲµk<<<ąąą€‚‚<žƇǟž©”ž'NĄÓÓ¹¹¹Ø¬¬Ä”)S°oß>ÕżRgΜ‰}ūöĮÖÖ...(((@II ʏżū÷ƒÉdB(b芔øzõ*ÜŻŻk„ŅōŁ›ōāÅ<cü ųŽ (ąp¼³Ź}4āYj°¹¦†ń„4ogœģˆÖŲtõ'N…Ę"8XsÄčh͆”nd2 W®Øjc³hźjø^•ķ5/š.\мų"ØēĀĶߝ@->‹Ę€Ė­ŽŚ©ćöķb”Ēŗ››^żu“lŁJūx<‚‚‚T˜;v„››ĄŪŪŃŃŃšóóþ}ū‰­[·‚Ēćįܹs5†HļŽ½qņäIXZZbĒŽX¼x1>’üs”——cß¾}µj÷’ųćxyyaóęĶX¾|9D"õ%CŚpõŖ6™ĘŁ€Ż5?—“qęéƒū÷ļc×®]8yņ$233q’ž}dggcß¾}8uźbcc•ĘĖd2””” 99ųųć±’~Ü»w°oß>ģßæ'OžDii)Q\\Œ;wÖ“ €;v 66×®]CVV=z„‚‚ŠéśYŅ–•Iqļ^Ż"L@uˆ!"gR‘Q¦Zœ.ŠIĖĘÆ×%Lćt]6€.~rœ»cv–QŃÅ_’‹-B5}B8EŖ.\ČE5^esēĪbż»veĆŅŅp¾@&¼¼ČČØū»•”T¬,!<<,ėCP6њ>! ‹6„vķŌGķ$bc 1xpmeä†ņĖ/æØÜŒ;wīØÜwöģY„ß»u릕€ĶšįĆ1|ųp­ę‚ØØ(­ĘjƒBAit2€ææq®#śöįąĖ źĒ\¼˜‡O?m×čsÉČȍFCXX˜Ņö±cĒbūöķpuuUھf͚š¶44­¦×÷£GŠµkWœ;w½zõĀȑ#•Ž›={6Ö®]‹˜˜L™2ŃŃŃ QźĮjee…%K–ąņåĖ ž»¢£ók ~¾JŸ®ĮZS=)“ĀįĒŖ£ŗ0Ā_³óʐP…åĖ—×¹ŸĻēcŠ AJ‘ųōōtlŻŗUć¹#""жmŪšß pōčQÄÅÅ”  <9r$Z·n­tģĻ?’Œäädµē÷ššĄĀ… ! ±zõjōīŻ£FBTT¢¢¢0sęĢZ=_ęōéÓørå Žzė-ųłłį믿Fa”śĻ§}ūö˜1c†ĘæPŒóiŽŗų)pNõ{™ t ³/1v ''Z·f!1±nc,+Kˆ›7‹Š³§ƒgf>>œ©qLß¾†7xśöįā½źSl£¢ņH {=Q((\¼ØŽČ”рŽśmķ£ ½{spī¼zįĮK—ņÅŲm.<|X†ĀBõ„":²µźiŪt遵5 AŻĘŲÕ«ČĖé½MÕ«tķŚVVVčÓ§ĀĆĆįķķ ųųųą­·ŽŖiõņR.ư¶¶š_MvAA*++±aCmk^.—ד¼ÉĻĻÆeČP¹­>=šUkFƒ÷ oøtq(ĄĖC€r±<Žz”³†’Td‰M7¼ £TցN•FYÆ»aưŁģZŖīr¹ååÕå‹/Ęwß}ČŹŹĀ† `ii©¶LaĄ€5ĘīéÓ§1}śt”––ĀĆĆ...ČĖĖĆ®]»‰Ļ>ū +V¬Ø9v’žżøtélmėīCŻ„K,\ø"‘6lĄ¢E‹0jŌ(X[[cƆ (//Ē?žXēńŸ|ņ RRRjzćīŲ±©©©°±±©ó˜#Fc·‘1;c·Gč46Ō”=©¤ƒÆ%‚­Uī+ȑ–#ĘŻA­óŚó˜č߅ļŲXŅ!’PČ-’ ęaž=W~”öė̃»ūĪ«÷ņ īn [kŽ\R/0¼· N^­~ źf‹VnäJp*VużĘÄP•Iqńnżjæ[ŹamARÅ“>!µĘ.ģŁ“FŒŻz PPŲæ?Cćø>} oš„„h6v÷īĶ Ęn=¹x199ź ɶmŁMŅc÷}ūhv²œ?Ÿ‹µk;`6ęITT®Ę1!!MēšŠ“ ōčĮÅŋußĖ2…2°x±~Œæŗššš@tt4vģ؁ėׯćąĮƒČĢĢ„H$BŪ¶mU“ę ĪÖT/(((PÉ÷÷÷‡ææ?@(‚Ė­ż½ˆ7”PŽcĒj»m&µ÷Ą’TØSĄĒ{Sr+ĒĄ–%hėT }Ęy)—RķńūĆuŗ,ŗÓ;äčńŖśeŚ“iŲµkW­ķ¹¹¹˜˜źŠ ”¼V )›E—MǽÄJ¼¹īD’źšÕ‘}ųųb®'XLŅrÄØ+ĄdŠŠŅ•ƒåÆÓ°ēļB|¹'»ę|C{Ś¢WĘīØ>|ųøq4»“9€Ć¢×»£śņÖĆr…Ō1āSkæ ßī„ų“Ŗz»aŻ׋Iäbē/ź{@īߟoæķĒ8£ĘŹłóyČV“& <A]›"²«łš.ä‘Tęz²gOšĘ1Ś|I` |>%%uė"ܾ]Œ¤¤ “n]w¤€P7ūöi^č6õ} ‰žż8j]Ų³'½ŃŻŖŖ*ųłłaūöķ5Ū(ŠB||< €~ųk×®Õś|ŽŽŽšōōÄŽ½{Վ³··‡@PūYTT¤żäėąŲ±,TT(ÆsXV,xõÆ-(£hø™m‹›Ł¶p“”"ȵAnehm_:­žA”bKģ{삤"õĻłÉķóįĮÓÆR¹!hŃ¢/^Œ+W®ąŽ½{JĘ®¶ģٳ8vģX-„īV­Za÷īŻpwwǁ”ŒŻ†0cĘ ¬X±gĻžÅˆ#jķ!“6sęL½\ ?Ģr„<“{ż ²!ļ>Aš[qJ?A³aŻÆŁč`…qŖ[*ø:²ńÅ\OÜOŖÄ€·ć1üƒLų8 c"üę#l?ž‡×‡9bd__–VdäIž+Įgoøė½¦“ͤŚ…¤076p5F—Š‹%ųóĻlĶČ|ųõ×TcFްŪpŚT5øø0й“ś +öīÕŻ+ŻÜ©¬”©LM|•°°¦čŃé4ōź„y{÷¦`6ęG||¹Fį!6‹†=šą cĒXBCwīćńcĶŖÓ į‡~€ŸŸŠ’œ34 hÕŖrrt‹:zyyįŸžQ¹ÆM›6x÷ŻwT‹”ݼy³Ö˜«WÆźt=Uüö[Z­mlhźs …,œM±Ēŗ«­°čLkl¹å‰3ÉxZd ©\ż±d”qńw²>æä‹UWZi4tƒŻĖ0ħįĘ}Sń¢ļ¶LVæõś7`ee…ØÜļęę†īŻ»ėµmٌ3@£ŃT:c(ŠĀ޽{įį၁źķšż`v‘]ŠI†M‡ŁØėĒŚSPĄžæ 1o¬ ڵ“„ۂͤįćm™((UN9K)|(CŗŪbt?>N^S’rÕ'R™ė~}Žū`l{ÖÜ+N[BŚ+H ³`±h7Ö ?ż¬¾äʍ ˜0ĮÓ@³2}22„8|X³Į3iRÓõ0ž4É ÷HŌŽłå—gųšĆƒ‰£˜dB PæØrwc ¤wÓGō†pqś“Pķ˜={ұbE{"R§#ŚD÷Cśp *NWZ“` o_.¢£Õ+Sūm"vīģŃhóFaa!f͚…©S§ĀÉÉ b±—/_ĘŻ»wńÖ[oét¾iÓ¦aĖ–-ˆˆˆĄčŃ£įįįŹŹJœ8q‰‰‰5õÓ§OĒīŻ»1oŽ’<ŽŽó7õķŪŪ¶mĆęĶ›qšąĮš(š‡‡"##u6vƒƒƒqšąA¬]»‡BUUuŖ¶ææ?~üńG„‡‡Œ;v`õźÕŲ±cĄÓÓß~ūmƒRH×­‹WŁ A!SąŃžĒč2·č,ŻJä^P&b¢LÄŲ·»[9ęeÕĢĘĢ£Gj‰ …BÄÅÅįųńćX±b”öoŚ“©NEwüžūļ€ņņr%cS[ 0dȐ:÷ōŃGj÷Ϝ91118~üø’Ø”ŗęĒ«=ē×_]+› _ĢÖż0uś\·p9tø;±QPRmš9ڲP^©Žˆ,«”ĆĘŖ~ʆņåžē°āбxR ½œĻĻ]ą6$…ŁPtīÄF›6šū<®]o€Ł˜>99Uųõ×4ć&O²jRƒ‡Ļ§#4Tsėš5Ŗe„Ś<˜‰¤$õŽ#?Ī8Œ:^f”qܗ_&4Ś.^$M¬^ż"‘zg ›EĆōéMošLžd…æĻŖ_”?xPŠ3gršŚk®jĒ5w( Xæ^³CØKgķœK†bāD+=¦>•łüł\\æ^„^½ōÆŹ.‹ńģŁ3õnt:|>_/*ø/ČĢĢDq±žŹo€źčžĘš£FZĀŹŹ4^t––tLœ`…]»Õ‹žüó3,]Śžž/jggg§×ó©kóu-]taõźĒPhhćA‹°thlģJq/Ē—Rķ_`…Ę^ݵ²«ĀėsįkÆž™`lŌ„ĘüšįC„‡‡c芔HJJRJū]²d‰VjĢ|>榅‘.899įüłó:÷{{{ >'OžD~~>œqžüy`ٲe* lŠ5 Ēl#»0+Lwm÷§¾8¼®uĶĻĮ5žŲŗ“:ųZbżoوyX!I(°˜źOĪų7B¤k$}ń˟łČ.”ā³7<dØz;+0 Qa64Ó§Y£E Ķ™ ܅X¬>=·9s÷n ~śé™Ęq“&YĀýi21^fčP ųųh6¼"#hLĖnīģŽŠG4‹ō,X`\ŹĘżūqįā¢ł^Ō&=»1ńōōĝ;wšŽ{ļ5é<4±o_ž>Õݟ8Ń“TĪ/ęĶR’rÆŖ’ć½÷T‹>Ŗ¹zµ@«–t³"¬ĮēÓĮ¤QčįVŽČ4|ž„sŃα²A ĢŖšµāķnYX9ą™ÉŗźčŲ±#f͚…””$''×ėööö(+S’l «I}×'3fĢ€L&«I·Ž»w/ ¦NŖ÷kōƒY»~ī ōn§›‘6žć$„½ūDé§×œ8ōžūæłÆe@(‡%WżæĆ¦C"„ •5µ+–RX’[6‚ŚXaDT”g†IõšNŠ6˜?WsMJRR6o®Ŗš9£PPXøš.ärõßAXųŽq<ŚĪ%.® ’ūßSĢČ4))‘`ٲ‡ǵjÅÄČĘeä0™Ąœ·4÷OžĢFLŒśVv įŁ³g˜9s&Ѷm[Œ=ŃŃŃ5ū † ‚ćĒ2220dČܼyļ½÷zõź…ĄĄ@Œ3—/_V:÷óēĻńĪ;ļ k×®hŻŗµŅyō‰H$ĒŹ•qǵoĻB# w7ĘŽÕœv}ōhNzn€™2…… ļi, įph˜7·ösŁŃBŠ0Ÿ",듆-ƒ0?(ƒ[£•]˜tŻÖ~4ąe+Ā0æ"¬˜‚żRŃӣ̤…Øź¢U«ź~ńõĶāšõõEFFž?W}_ĖårÜøqCI)\_ >öööŲ»w/„B!Ž?ŽĮƒĆՕdZ+fmģĄĀ±R°™Ś?p² $ČĢWž)ŌN,(•Į™ĻŖ‰ŽŖĀĖ…Ģ¼¦ķ}Æ—’)ĒŅé®°¶Š=jÕŃGŽ!A$ŖŪTDDŲ€Ļ×ü5żā‹x¤„U`F¦ÅŽĻpć†ęö cF[iM5“'YĀĆCs ĘŹ•qė›+Ÿ|ņłłšĖ7–¼ĒÓŲĘ„)xc–5ģlÕ÷) ˜?’N£Eųg͚&“‰łóē#""ååå2d®_æžļõ)DEE!33PYY‰ØØ(Œ3¹¹¹˜2e ʎ‹ääd 2=P&Š'N`Ų°aX²d zō職ß~śm­õå—O’¢>ÕؾL±TēŻwmµŅx÷ŻPUEt7^eÓ¦D<|ØY5jĘt+™VÖlz{–āõN9X5ą¶‚żŸaaLLmŸ‹0Ÿ" lY‚Žž„čįVŽŽž„Õŗ³:=LJ½Ņńư¬˜‚©ķsįeŪ°Ņ3c‡É¬~æÉåõ»''L˜Š¢°dÉH$µ…bwī܉ŠŠ „……5hžŖ`³Ł˜mpD­źĖŗßžćĻÆšöxŻź: ą½ń“\˜ VV4¼½€‡µėŌæŒ++e˜>ż¢£‚Å2{–V}‰‰‰ø~żŗRė‘ŠŠP%ń£†’’"Ą† škużżXžšiS½ŠŸ/cF[h¬ńNI`ɒ°m[7ĶĢų¹æŸ®9źĻåŅšĪ;ŗwÖ`1(ųņ«ąĖ'ÉWyQ]Q”\^°}ūvµõ­sēĪÅąĮƒŃ»wo,X°[·nÅĶ›7'''”––āńćĒø|ł2Ś·o_KŲ¬ØØ“&MŖóüöööŲ¶m›ĘłĻ˜1[·nÅŹ•+amm±cĒÖ9611Qķ5żżżE”šfoģĄŒĮ2DŻc"3_F@ō½rÜM¬ÄšyžčŅŚ÷+Q\!‡›†Ö^˜ę™‚Ā®SJĒYrč˜4Hµ HF®7W{ y֌:Ē„d‹p7Aū(^F®æü•·F9£J‡ŚĪ ż¤šs'5MĶ‚Ö8x°O“Õ·~Š-ħŸ>† DĀ^$’cźŌ먬Ԝ•0gŽ ZūOT÷3gXcĒO¤§«’ŽĻʖ-O±p”æffÜK0uźu©ė°ģ#Xj›’ysm°}G*+Õ’-+VÄaÜ8½·˜5j”Ņļ įįįøyó¦ŚćFŒ”ō»µµ5|}}‘ HJJŸĻÆÕc344To‚C¼żö]ĀtšŽ»6FŃvŖ¾¬Zi‡óQ"TTØ_oߞ‚¾}0}ŗ·ff¼2Lz]«ūćŻÅ6F”ē`JųųųĄÉÉ©Īżšńń©™ār¹šńńAII īŽ½[ēq’­©ųᄆ†bĻž=8wīJKKĮ`0ąććƒ+V`ɒ%Jķ‰\]]Ń¢E µēwq© ŃétųųųĄĮAõ:¼WÆ^ ANNFŒ++ÕĻ^OOOČårµ×¬ot› =ĶĀŲe1)¼?Q‚~äźM,JAó7¤bžXg¼ÖĖÓĀköUåø'Ą’å"»@9½‚gÅĄŖ·F÷åĆÕQ»·»£o„“¾ŗĘ›EĆŗµv˜8¹@ćŲŠææs³Wé]øš<МšęźŹĄ‡ļ¾¶6p¹4|õ%“§jžÜ?üš>zõrDPPżkóĶŠfϾ…Œ Ķb.ĮĮlL0ņžŖ|> ęŪąėoŌGw+*d˜2å:®\ Õkf‡ŖÅŖƒƒņóóÕ§jį÷¢Ķ P½`åókß«4MķY6nLĄ¹s¹ǵiĆĀŲ±Ę}hĀҁ–Ų`åjĶblóēßA·nö0®lC³`Į$$hVómՊ‰…õˆź6gh4RRŌgÖ+ ŅxŒŖėL˜0&LŠjüž={“>·ŚłŠh4\»vMćy.\ø õ5 G³0v Č_Ž™aRüzVug÷©ģ>„yQł2‚*9¾Ž›ƒÆ÷ę€Ė¦Ć‚C‡LN”BØŚKóń¶L|¼-SćyoJÓźś_(ßUsœH¬@č"ķ”;YL +gI`É5^ńžż¹=Ź'NŖO‡¢(`źŌėˆŽˆ.]š§į³eĖSģÜ©Y}¾Xm§±WeS2p ƆYąĢõŸ»X¬Ąäɱø}{ų|ż–l˜7&ąÄ‰lćX,¾žŹŽ$J4/āįŠa”Ę’EųųćGŲøQ™2Yķk* °Ł »ĒŲlvįū*ŖźļtåęĶ"|śé#ćh4`ż:>˜f°š3Ēū ‘ ŽI-Č0nÜ5\¹2ĶóY±~żüž{ŗVcæ\LJc ¦VTjŹ”)ųšĆ 8#A3fšˆ×ž7†Jš(•Ž{IśOGIIĢ#å÷ŃRx“ ccõ*>¢/‹PV¦Ž Q^.ÅšįWqķZ(||4+ŗš{ö¤ańā{Z µĄØ‘ĘYÆł2ėÖņqåŠHc*kJŠĆ†]Į… `eÕ¬ķ€żū3°|¹fõe˜;Ēʗŗ® .·:³cś ĶŖĖß|“€¾}1j”»^®­Jé4''ŽŽŽ*Fkƒƒ !“Éj„j@*•*„)և‚1&NŒÕJ“kāD+„ōę4čzĘ‹U 2f\Ę~±ńńå1ā ¢¢šß³bēĪgųäķž£FZbą@ÓRčnlĪ;×ŌS t¦Y)ŁŠiĄ§ÓÅą[“ˆe] č$Ćø¾$}Łque`ó·ZE£rrŖ~yyę­čų2§OēąĶ7okl!T§żżļ;ӈ|»»1šńr[­Ę޼Y„)S®CÖDķʊóēsqSć"||XųšķžŸĘĮ6L³€Ņ‹Ģ}µ#śå—_”"°eee8}ś4ŗuk˜ČQ·nŻPQQS§N)mß³gÄāśw0 å3ę235§±ŪŲŠńŁ'¦uh¢gOŽ]¬]zņE3ę$fā¤×†?’|ŽłóļhõŽpwc`ćW¦ńŽ źiVĘ.8ŚRŲ0O NóZ jC;/–Okx ”ń>ÜoĪÖ.Z›œ,@HČ­Śn˜:'NdcĀ„­¢9t: ?üĻNN¦#8ņ֛6Z;š×_Ļ1{ö-­šĢė׋0n\ŒV‹v‡†Ÿw8ĄŹŹōŅ×®įklET|£G_œ'šė5‘””„N:įõ×_ĒĉѶm[H„R¼’žū :oæ~ż†I“&!,, o¾ł&ĀĀĀšžūļĆŁŁ¹^ē”J7ībcµ3ōWƲƒ‹‹é<“%ņ#śöŃ.•‡ńćc ¬£ōʜ8q"“'Ējåd2ķŪ“jūG ŒŸfłMn橥ŗ·Ä`éŠ×Üńła”Ķ IDATp¢°~.q˜«VŚ!(H»Z«”śö½Ø•X“©²{w*&LˆŃŗ‡äļóŠÆŸi„¦ŃhĄ÷›ąå„Żā|Ļž4ŒÆż’ÄT¹p!įįŃ“ė¾f5ķŪ›Fśņ«xø3šŻfķźŒ‹Š$æŒōōśõŽvuuEdd$bbb ŗĪv޼yxšą|||T‹“DFF"((@uzrdd$¼¼¼j3""C‡­9žĀ?ž…BtéŅׯ_Ē_|ŠŠPę+—Sˆˆø‰³g5 RĄø±–˜>Ķ“E©ź‚N§aėöpvÖīYń×_Ļz ……õØ;»véöŽųōc[ōčaéķ åēĘ4[ėęĀ=&¾ŲĆћB³©āhKaė{Upį7ó„ ‘ž.Cų°<k—‚Ęē³qōh Ø_ŌÄQ((¬Zõ«W?Öś˜ŠP ģżŻĮdیüs_‚‘#ó!‘j÷]ķßß 'Nō…­­ixźųćt¼ńĘ-­¢ł0z”~ŚŃ°ZScąÓĻJ±ć§ ĶøŗZąĢ™~čŌÉ®‘gÕtˆÅ ̘q‡kŖÕu£Ī¹ĄĘƼ}żŃŃ"L›Qc*iߎ§O÷ƒ§§ńėh E+WĘéōŽ:Ōæīr4 ń:}±ź²RJžĖā0i8ž&Q n®$ČńīQåŒĄ×ü 1„}^ĶØį˜÷Ó^ƒŗŹšŃ1ę—ɤ5.| ›ßC×Äšöfb’>'­Ó1KJ$<8+WĘiU×hģŠ1bÄU1;±±ó'Ó5t Kg6¾ü’ÆõBģņåōėwOŸjg™/œ3gŽŠŚŠķ؁MßŖī—hj¬ųÜŻŗi—Ł‘“S…/įŚ5żŌš„„R„…Ekmč¾Hc7wC ąāūĶŚi<@\\ŗt9‹S§j‹’™"EEŒ©Ū;¢k6¶żh*ķA{K?|seSO¢)ń÷P µ‡Wć˜hn}[¶Pą»…bø94 s¢E ‚‚Ų8~\ØÕ½KQÕĘϵk…okkÓSį,©¢p8ŖS'_ĒŚ/ą[µbāČ!'ŲŁ™ž"·cG6 ®Åh—v˜—'ĀīŻ©šö¶B‡¦į+(cĀ„­[KՎ”£‡Ģ¦žŽĮ ”?.ŽŸØŅØŠ "‘dĄ××ķŪ› ÓÓ§6ģ2nß®» ŹĖ¼(hNźŗķڱĄįŠ—oßį~péŅ4•¹ŖÓŪ«ŖäŲ·/ÅÅR äĆ4­¾[·Š[·“»7  5GŽ8ƒ× !Ær9ŃŁ?L: Sŗ’4īęJ‘ĀßO”õ{üķ…hļ\æ²c Ł»ąéL”{k®>b@,5͇»®“k)Ǧ·E°·1ż(_sĘŪ‹‰–-Y8}F¤•Ā$¤¦Vb×®Tp¹ ōčaš‰ø±wĘ±ęœŹp vƒÅ@QB‘ĘćZ“`ąÄ1gøŗšžq_½zqP\¬Ą?’h'('‘(pōhrsE0Ąl¶é-čΟĻEXŲeźĻœ8~ŌīīęóŁGGč@.ŽB$ÖüŗJ)9’…gĻ*ī Ėō>’—9v, #F\EF†fÕå¬üÜĶ«HŻ\ėÕ„9͚qc-±yLÖóÅż÷Ž?č×ļ">4nń*оś5‡ć¤ ž5Ģit|†śĄ„³‹Śc=<˜8rŲ žžęeģĄŚ5v;F·/ńöķ)hŪöŒÖiŸĘĄóēU˜6ķ:ĀĀ.#7WūVZ<ū÷:¢eKóūģ M~żÕŽöĪŖ={ŅŠ»w®ŌÜ…r,XpćĘÅ “Tūyo/°ĮŪo7æDŠöǹÆÜ"¾Æł‚e©ž{qļ^ zõŠĀüłwt2›Šƒ3ѦĶi|żu‚N­×<<˜8|Ų īnĶÓŠ%šÄŲ} /g¶æ/Ā„~ęŁg֒Kį³™"|8I 6Q¢6+¦L¶Āī]ް°Š-JSˆ  sˆˆøit `ŠŖī‹Ų³ēyüv^uĀY±Ū¦ §žt†æŸł‰3ÕŖ«?žą€™3tS•ĶŹbāÄX z‰‰Ę[Ė+‘(°iS"ڶ=ƒ}ū2t:ÖÅ„:šß”ƒvµ­¦JƞģŲꠓ£ėĮƒRtī|Ÿ}öȤԺOœČF»vg°m[ŠNĒMœh…Ÿ›vś~})®b”\\ūę 3é°pŌģ(S((lߞ‚€€ÓųņĖ'(/7¾µŃŋy0ą"&OŽEvv•NǶm[żŽšó5O‡@؆»ÆĄfRXūT÷Z̳gsŃ®ŻŒywļ6ķgž2b±;v¤ĄĻļŽ’¾Ī loo&NwF` y:9^eŲ0 ģśÅ \®öŽ.±X5kāx'Of7āģNJŠ#F\Ř1×tn„ńŗ5¾×²]“9’WY·³GR®}«”ĀB1–/ˆ–-’Šq(*jŚH/E§N=GļŽQ4(—/č|ŽžĮœ<īböļ@ŒŻ:$ĒļĖ…ė.3é%—Mį”l[ROgóOŃnītļĪĮŸ:£µæī }…‚Ā”C™čŚõŗv=‡Ķ›“—§}ŚhC¹wÆK–ü“˜<9V©6ST¬zµ£'ZįŠgŲŁ6ŸĒŪ¢…<¬_Ē×YiZ” š×_Ļѽū9Œs QQyM¦Ö]…õėŸĄŪūOĢ›w™™Ś×c¾ s'6ž>ķ‚V­šW¤&<Œ‹ćGaoÆŪ=ŸšZ‰Ń£Æ”K—³8t(SėŗCšģ™óęŻAŪ¶gꄼh!æā7ėn BÕĘ. p(-{½DI‰«W?†‡ĒIL™r§N=×)eø”$' °reüżOaĈ«ø~]³fƒ*ʏ³ĀĮN°µ5įŁ@КfŻgW[¤0šķa6RsLkńÜ;PŽ÷'JąlGŒÜę†PØĄGĖJqš`Ć˜LBC]0x° tF—.|½)t 2\¹R€‹ópęLāćėN£vķęŠNouŖ½ƒĪ->…T ÖÆćcŚTŻŅz͉K—Dx{aŠŠź’÷š°Äō鎘9Ӂ«Ž+ČpģXöģIĒ… 3“§N±Ā—ėł:§ņ›‰‰RLžRˆē9ŗ2б£–.mƒńć=`aŃ4Vbll!¾’ž)Ź¬×żĄ`ė×ņ1kVó£z•#Oœq"Ń©ÖöÖ¼ć’sęįžƒ†Ei]\ø7Ī””Ī0ĄŽŽś6’É(ܹSŒ‹ópźTbcÖB‹Ė„aĶvx}&¹7^ęÕ>»4ąē،½DĶ‘”Bf©ņĀŌūģcWKdrąÜ&~b#«ĄxS4Š«aR“õ&)ĖĶż*¹¬UUśłšŪٱл·#ڵ³EėÖ6°AėÖ6ąóŁąpT;ƒ**dČĻ!1± åHJŖĄĆ‡„ø}»X먀]+;ōŒģ©rßÕWįĪ“ąēŸЦMóH]UGa” Ž)ĘåĖ Ź»ŗZ OG ģ‚šššön˜#A&£šąA)¢¢r•‡«W 7ĢĒåҰv _ēŚes%'GŽł Špż†öiŖÆĀć±0~¼^½%śõsjōŽŌĻž šūļéŲ³' ÉɂzŸĒĮŽ·4ÆöBźŲv×±™µė•Ū; šQļtH$ĄŖÕ„ųyg…^¢śt: :Ų"$ÄmŪņjŽ^^V3䏏¤HJŖ@bbĖq’~)._ĪGEEż7ÆāēĖÄO;›Myƒ.|ėø|ā ŌĶ„¶ł {¹€±@Œ]QPĄõx&vŸa"1Ėx<_tг³†JŠĘ“Dr ’ń4YŠ>*ALlżæŚĄdŅ`cƂ R)@Ŗ“bŖ:Ų<BæØrŸĖ³x¬š/‡„„ie^4&r9°ńė2lž®BÆiɎŽ“icƒ€Z·¶››¬­™°¶fĀĪŽ”P ś§°PŒŌŌŹGGjj%¤Rż=ŸŚ“aįēŸź•¶oĪČåĄ·›ŹšĶ· ’ü¹čßß !!ŽčÓĒ AAüĻO įʍ"DEå!**÷ī•4ŲŲźÕ“ƒm[H ęK¼±{ĮĄ–%x£ó©įgω°|y1²²ĒAĪfÓ’}F°acƄ„%‰åå/žR½µÆĀ`ÆĻ“ĘgŸŚĮŚŚxMI]Ā –…¤”“é¶"ĘnHĢbąģ-Īße¢¬²i¢^Ī ź*CX79܉‘K؛³ēDˆŒ,©wŠc“B†l§öBvr`†ū7,½Ķ\yōH‚–•ąī]ćo¢ \. ‹ŚąŻÅ¶`›·ąrƒˆŽįķ…Å(,ԟćäÄQŠŚłśZĆʆ>Ÿ ++ø\ %%ŅC&+« IIՏÄÄ ¤„UB.×Ļ҃N§įŻÅ6Xś”­NŖŌęŽLAüæŚ@ŖØķœ˜‹ažŹõ®UU¶üPŽļ¾/‡ÄL;°ńÕ>ŗv% u„t|rÉEBā4$Ō¦«kŽ Ö­#‚±AŒ]= ‘Ńp-ށ+ųē)%‚Ę3|i4ĄŪEī ’¢1p ŚS^®Ą†ÆŹńėÆH¤¦õÕļłQOŲłŌNÉėįVŽ…=L§o¬””(ąŠ”J|¾²ÅŦ’¼bukłšņ"^n‹™3¬=ß\(3q(Žń…VJȳ•8XJŃĶ­#ü Į¤›ö»ƒ»z†¢€“\:ī>eą~ i9t…„4ŀ  ØÓP%”É,8TõąYQpµ§ąķ¢€|<„Ę£ @Ž­Ū*šėo•ØØ0ĪØŸŸ/‹ńąģ†"ÄĻ;xōČųŅ›˜2ŁóēŁH®ä8ˆŒRķœŁ1C|ŠTīÓ–Ū·Å8|Dˆ «‘a8G™… ĮĮŒm‰‘#,`cCR• ‚fˆ±K źD,¦pē®×®‰q-¦ R”•éē‘įīĘ@ĒNlōķĆEß>“nĶҘ¦ŗł¦īåŲŌŚī`!Ŧš$½Ģ«9SUEįāE®^ćŚ5’ž6nĒʆŽ^=9 į`š`.üżˆhS‘ōTŠ'„8p°Ņ Ģ«°ŁĄ€ž$b×N';`\ •ū¾ņĪVśslddČq-F„k×Dˆ•čUķŸĖ„”Kg6śüūŽčÄ›ÜAGˆ±K t¢ @ާÉ2¤¤Č’"Ei©…²r*+ج¤ĄbŅ`eõߏ­-..tųł±ąėĖ„Æ VVŗ/Z.„ń±ė~mŃXš ^ćönnäåÉqõš÷ļKš4YŠ”)²²õRõåńčšõaĀ׏‰¶mX诋‹NŲ¤]Œ‘”PPˆ‰ćĀ%1b®UįQœ¬ŃUœŻŻéĆE’¾„‡[q”²žZK<)“ŖµŻĶFŒ/i_Æ[ŹĖHN‘!%YŠäŅÓe(,R@ Ø~7TVRT(ĄęTæx64ŲŲŠaeEƒ«ž~Lųł²ąēĒ„»;ƒØ)„CŒ]`2‹˜XņwT=“F`|Ū|ƒĻ©¹!SHI‘"7WA%…²2ź_'‡b1`cCφQćčąóéšńa’4T„“Lė±bÄ^#1IŠäd²³eõ+²³„Ć׏ ?‚‚ŲčŪ‡Ń×B6><ļÆņóyĶÆSŚē~RŠ„Ÿ:@0ģ¹2x؊‘YV[“(:Ń&ßĪŲįphh׎vķšz&C`gKǰa6Ģ¢f›HD!%E†ōt)ŠŠ’svTVR(/§`ańrVGuŌĪŻ HŌ¶1¹”ŹÆÓŃŁ•ˆų„ę1v ‚IģV†Ģ2ēZŪĖDLü“cƒīīåM0+”łĄåŅČB` ‰Č2 ×2mUīs²” Ą^hąBÓC\¬Į¤čē]Zgōö‚о’ŠˆÉ“C©Hµb`«ҧš@ 4Kˆ±K L ;®]źHĒ‹/“B\¾µgD M‹TNĆń'•ū˜t }<Ė <#@0ˆ±K LށŽ%uīŪ’Ų„Žā9`Šüāˆ¢*ÕQŻ ×rŲq·@ +ÄŲ%&G ³^¶"•ū2ŹøˆÉ²3šŒ”iČÆdćĻ$G•ūč4 £ <#@0ˆ±K L€Iķźn”ńūCW ‰x@0oä ¶Żu‡H¦z9×Ē«Œō'Ķb쓤£‹ķœ*UīJéŲv× Š(²óåh‚’‹-Uīc1(ŒkKśź„ę 1v ‚É290ÆN…Ѥ"Küž°…a'D ābŖ=žLR-J#ü `Ļ•pF`|c—@ ˜,­ģŖ0Ģ·°ĪżQ©ö8V‡B)@ ˜*7²lńėC×:÷ūņ«0²uŻĻF@h.c—@ ˜4óįm§Z¬ Ž%8ćh‚ˆ@3@0ΦŲcŪ]÷:Uē9 ęeףœ@ šÄŲ%& “FaAP،ŗvĒœńĆ-OH夆—@ ˜&R»øįG®uźŠĢź”ƒÖD”Š@ €–ŸC\Įä¹ūÜ’»ķ©V”ŹĖV„¹]³ėl[D ĘHJ±%~śĒ Ļ+8jĒMl—‘­I«!@x1v ‚Łp9_žqS›²Ģ¤SŁŗ#ü ĮR &„¦¦TÄĀńDGD§ń5ŖĖ‡ūcz‡͌@ Lbģ³āt²#öǹhĒ·atėōó.!µmĮØ(3q6Łēž9@¢EłÅąVŘŁ)¤Pƒ@ ”!Ę.@0;®fŲa×?niŃg×ŃRŠA­ŠŃß»ÖlҦƒ@ 4IE–øjŪŁ<­ž_t…©ķsī[l€Ł‚éAŒ]@(„ƒ"žZ‚™ĮfP`эvž„"K|Ć )C«ń,ŗŻŻĖŃÓ£ķ`ŅČ£‘@ 4>ie\ÜŹ²Å­ē<äW²µ>Ī’%ĒünŁčģRш³#ӆ»FŠTADZ'NˆN·ƒ@Ālźéz‡A§ąi#ĘŌ¹hėXŁ(×(²ńó=7<)“Ņé8K–]\čä\@ēJؐˆ/@Šåb&Xįq5ē[”؊„ó9:»TąĪĻĮ· Ļ&@P1v”-·Ēެ‚šOG¶ÄŁĪĄĄf™Œh™! ō„¢$Ųm„ ’ŒJÜZj3½ø¶üµ…<Żć2)y¶ü~Įu“.^_¬$:Ż‘čtĒrŪlJšw.$P[ˆ·SžŚŅ’÷t*’“sB4b9…j.ēŲ‘kĻ•\[®ä”¶¹õG£•G>CšgŅ3 õ Lä'„M»7‰V^*^¼ŻŃrC!¹øŒ^łõƬϭ o§"ĘuHꎶ)¼āĀžgN¤8a0ÖmąW¬ā\ŗ#ē® ‚mJt.$й€ąæžč\ S…Øg“‚d-2ķ‰ĻµēJnéTä1R[m=rč˜ÆF–E!D]`÷&a«Rąė\£_BÜ(¹…+M€ŹÄmAYÜ”E~±’£‰ĪD%kų3Õé†fBĻ/VU:ģįXL°sŚB‚] r)Ä_S€B†…ønyÅ*ā28ŸåĄÅ,{.ēŲ‘’g{ŻėųkCck ƒW¼óčč­ĆÓ”øŽū „M»BńG#ĮYDga2Į…lN„:^šIUWd]ĶŽėQ¶ųh’¶\æBÜņié¦'Ō]OØ{>Y ,DµJŒ .åŲī@l¦#ē3jTǶ®łjŠu×ÓŹ-ŸÖyh å%–BÜ`ģ !D% hįŖ§…«ž;Z•nKŌŁ›éĄÅ,.ēŲq)Ė]ń€ó‹•œLŃp2ESŚ7ĄWSHˆ{­ž*‡ -D„l\£ęBŌ'ƒIĮ¹tGΤ•¾ ŠĶtØ×|elU&µ»äüWĘvēBå•BŌ; v…ĀJ~šBü4…ō Ź2oĖ(Ps9»4ų-iOrž-%Ę7dc¢4šNŌŁ±ē’ PZš¤G¼J§D:ްė Ń˜€ųl;N¦jų3UĆŁ4G Kź/øU+Mx;ą\śļBi`[€SJ…¼xBˆĘ@‚]!„øīöÜķséā“kŽV–šęJ® ¹v\łėWb®-Åuœ«LAɱd-Ē’K§?»Ųčą„£³Ž®>:UMB±Qɟ©NIŌ•¤©—$R6*šBüµ„æü4…8—fWWĖl !„hŌ$ŲBˆ:¦V˜Š -¤ĒUŪ&ił6$ü_Ī. NŅŁbØć‘ąģ5\våĖ®Ø•&Z{äī—K˜oŽ’GÜ<ņ‹UMŌp$Ł™ćIš6z«P”fiś+3zséh­·ŒŌ !ÄMK‚]!„Ø'JEé“Go§"ŗł– ¾’cG|NivŲĖŁvÄē8QP7’DŒ N„:q*Չ•Ē}ięZ@ļ€lzfKXŃ(—(8’äĢŽxŽ'×}I0[•‰f®zZøč t)4øv* j…¢)‘`÷2fĢT*_żu¹ķ‰‰‰Œ=€wŽy‡Įƒ—Ū?wī\~żõW¶oߎV«Åh4ņÕW_ńĶ7ßpäČņņņpttÄ×ח¾}ūņŌSOѲeKóń±±±Œ7ާžzŠI“&ըϧNbńāÅģŽ½›ŌŌTŌj5 6Œgžy///sŪü‘—_~¹Ņó( BBB?~>ŒJ„būöķ‚ŻÆæž…Ba>ę…^`Į‚tģŲ‘{ļ½ŠŠŠ8ž|8#GŽD§Óqśōi^{ķ5>’üsöģŁCóęĶHOOēšįĆ 0ooļrēŅėõlŪ¶õė׳dÉž|ņI.]ŗÄįƇłĒ?žRYł+FSéö5kÖpčŠ!ģģģųä“O*»*•АrŪ¢££9vģ·ß~;nnnęķ>>>\¹r…Ƈ3räČ*Æ TŁWŃ“8ŚKėpzå„Ó rl‰Ét$&£4Ūlb®×ó•=.ˁø,ÖżéKgƒ›gŠÉ['%QD½É*°aēEW"/ŗ‘V Zi"ÄMOē¹sēŲŗu+wŻuŠėXX– «[·nęĻ:~üxŽyēNŸ>]'Ÿ_ˆŗ T”–jķ‘ĻøÉ\ʶgo¼ ū\HÆįŚČ Łö||$ļ£‹šNæąLlnŅ`Cԟō|6Åx°ó¢[­JŁØL„łęŠ'0›Ī>yؕkz²BˆĘM²ÜÜbś÷ļOzz:ēĪJ§)+•Jzõź…——!!!ęu»F£‘˜§0CiĄ¼vķZ\\\xģ±Ēčܹ3īīī899Ѿ}{īøć>śč# *½¾µrrr€Ŗ“CUēłēŸg芔ę_C† ”k×®t芁~żś±xńā ĒŲŪŪ£P(*ż5žürm·oßN||<&L0o+ū’²ßėÕ²eĖ*ūóČ#ŌÉ5Ä­'Ų„€q’Y8,š¹żāŅ"mĶÖä&élłā˜3¶“ę—Šėø$Œh² lXyܗēkÅoē=jč*ŠÉGĒį |0ņ Oöˆ'Ģ/W]!„5&#»·˜²Ąuß¾}“nݚżū÷Ó¦M\]]čÓ§9Ų=uźŁŁŁå‚]€ššpΜ9CLL 111$&&OBB‡bŚ“i¬_枭[·Ö:kpŁ4ćŚL7Öh4åFš”4{±Z­&''‡ĀŠ '^{ķµ*ך^;•zŊ(•JʏoŽÖµkWڵkĒW_}ÅkƽvŻŁ’Ÿžł*Gµ;wī|]ēBęß;%q,IĆö‹īœLŃ`²r°6§PĶź“¾lŽõäīÖ©ōo–‰ś˜Žœ–V¹‰‰%čtFrrLäēÉĻ7‘Æ7”Õ(Ńj89)ptTāᮤY35””6ŲÖ~‰źMCW¬ā·Xw6ĒxÖøt‹¾ĮY nž‰—SŃ ź”Bˆ[‰»·˜®]»¢ÕjŁ·o’üē?Łæ?½{÷6ļļŻ»7kÖ¬A§Ó™×ö^ģBišŲŗukZ·n]aߌ3X“h;vģØ4+²5Ź‚U½^‹‹K„mHJJ¢cĒŽå2)W•łČ‘#ōģŁ“yóęńłēŸ—Ū÷ÜsĻY•Y§Óńķ·ßŹŁ³gĖ%āźŌ©ėׯē÷ß/—¬6¦N*٘E½P+M„ūēīŸK¦^Ķń®l=ļNŗŽŗiĪ™z5_óć§hOF·I„pV“YÓ{.¦˜Ż» 9r¤s1ĪĒČŹ®Żč¢R© 0PIĖ–¶“m£¦O{śō¶ÅٹiŒŒ”lŽńą—XOōÅ5Å:xėŌ,“n~¹·Ä !„õG‚Ż[ŒZ­¦OŸ>ģŻ»—ģģlNŸ>ĶōéÓĶū{÷īMII ‡fß¾}xzz–[ƒŗeĖŽ}÷]Ž|óMŗwļ^é5ī»ļ>-ZÄ©S§jģ–j¦¤¤ąėė[i›W^y…O>ł„äää uu+FHHQQQµźĄ7ß|C^^ēĪc芔•¶Y±bÅu»B47w“Jcxh:‡Ł|΃óYV›¦·ay”?[bŻy c2|t7ø·u/3ĖȦMzöģ)`×īB’“ė®6«ŃhāŅ„.]ҳ};|ø4• ŗt¶%"Āž!CģéŻĖ„ņę*Oc^qfĶ _«_@éK–^ŁÜŃ2@g)ļ"„āʐ`÷ŌÆ_?^~łe"##1åFv;w£#ūöķcļŽ½ōėׯ\2'£ŃČÖ­[yąŖ vĖÖŪ:9Õ>Ūd×®]Ų¼ys•ÓvOŸ>««+^^^VŸ×ĻĻÄÄÄZ÷kŊŲŚŚr芔J?߄ ųöŪołšĆÆėó ѐŌJ½²éMtŗ#?Ÿó$*I‹5cn ¹ö¼»·¼ņ˜Ų9mćdJJ`ĻžÖmČēĒó)(Øæ‘Å’8r“ˆ#G‹X¼$?5wÜįĄƒ8Ҿ}ćŸó—åĄWĒ}9—įhõ1öj#żƒ3Ł*‡Ę].H!ÄĶO‚Ż[P’žż1 ,Y²­Vkμ `ccCxx8[¶lįĢ™3<śč£åŽˆˆĄÅŅ7ß|“ššš č„K—xłå—Q*•ęrEµŃ³gO:uźÄ«Æ¾J›6møė®»Ģė`F#Ÿ~ś)»wļę‘G©Qfe•J…ĮP³„}:ß~ū-'N¬Õu„hLJ×ö^">ĒŽĶ1žģwĮ`“üwīĻT'ęžˆРīj“нŗq%JL,į£sY·>ŒŒĘŃ·+‰>]–˧Ėr ·å±GµÜ}—#×Y)­ĪeŲ°žOoö\vµź€Ę¶„Q­ŅŅ<›Ęqæ…B4}ģŽ‚zöģ‰Ū¶mcšąĮ’@õéӇwß}“ÉTa½®V«eٲe<üšĆtéŅ///|||ppp == .šī»ļRė>*•JÖ®]Ėȑ#3f “hѽ^ĻåĖ—ÉÉÉ!,,Œ·Žz«FēuwwēŲ±c¶ūłłU{\bb"_}õF£±\ękŻ’żĢœ9“+V\W°^m’«C‡]׿¢¦ y,,»Ū¤ņŻY/ö^vĮhŖ>č5•ütĪ“=—]×!™Ū‚²ź©·U»|ŁĄGėX±RGaać]zųp‡§óʛY<ž˜–‡’©ĮĪ®a§8›Lš[œ_Ÿņ¶:ł”ƒ‘”iŒM— W!D½“`÷dooĻ[o½ERRR…LĆćʍ3—¹)›N|µ±cĒrŪm·ńķ·ßrģŲ1sMÜ.]ŗ˜1chŪ¶­¹½——³fĶ¢OŸ>5źgūöķ9sę ß}÷ū÷ļ'99£ŃČąĮƒéßæ?wß}766ÆėŌ©³fĶ"88øŹsN˜0–-[RTT„­­-ƇƐ¹¹2*• wwwf͚ÅčŃ£«lēėėĖ‚ HNN¦øøø\’zōčĮ¬Y³Ŗ\‡Į¬Y³,öĒŁŁŁb!no§"¦†%0ŗU?žóäĖ®38gØłčp{ā]˜Üõ ž 0}5įJ Ææ‘ÅʍłŌrrGƒøt©„¹ó²Xŗ4—gŸufāCNuŗ®×`T Rš°tʔ<[>;źĻé4ė–gŲŖL l–Įč6iøŲŻD7\!D“¢HIŚÓx_mߢ~ugՉņ#|Õ¼wwÕ_2._¾LqqÕ_ µZmÖ¶Ž(ÅÅÅ\¾|¹Ś6>>>²Žµ ;—ZĀ3ßVL^“āž? 7āz]̲gĆ)oާh­joÆ62¾C2ƒZdT`m<ćMw’ģėN^d0ĄēĖsyėķltŗ›’qש“-ļ¼åFxųõÆé5Æģ”w`ĆC3*mSbTšK¬ߞö²Ŗ¦²B‚3¹·]*®ö²&·ĢĒGŲs©“ğĘNĮ†Iņ²±1aō§ŁęŸGµLg|Ǥģ‘¢.ČČnńĪ;œ\åžAƒ1mŚ“zģQåRSS™={vµmfΜY.i–¢ńjęZĄs·]āTŖ+ū‘[} ƃ’/Žł±'Ž…G»]ĮOS1˜5™ąĒhOާhx©’łZ÷mß¾B^˜É™3M'č:q¢ˆ;F§š8ņŚ+®ø¹Õ¾tѾxb3šÕƒŻų;– °:#wˆ«ž‰“uĻÆuŸ„Bˆŗ$Įn±xńā†ī‚UüżżYæ~}CwCQĒŚ{åńźąX¶ÄŗóżYo‹µVĻ„;2ļ÷PžŃ.™”é\g.-ߖb£‚øLŽ$j óĖ­Q_ŠŠM¼öZ6’kqеµT*-Z8Ѷ­3mŚhiÓĘ{œœŌhµ6øøŲ T‚^_‚Ng 7×@ffēĻėˆŽĪåĢ™\ΜÉ!#£čŗūb4šŲ°!Ż» ųh©}z[®~­b£’5'K—SÄeŁ—Ūg2Įē¼ŲxĘĖŖddnʵO¦OP–ÅéŠB!D}’`W!DP+LŒj™N’ą,6žńbkœ{µI¬ŠJ¬9é˱d-SĆāqs(]Ūy"Eƒ­ŅD±QĮŹć~töŃ”VZµĘ'”0õ‰t¼ž’G!!næŻĒüĖĶķś§Ÿ?ÆcėÖd¶nMę÷ßSHK«}?Kø÷)̜įĢ’Ķt®ŃZŽĶ1ä—&'L̵#=ßĒb2õj>>Č©TĖKIŌJ#[¦qW›TģT7’q!„M»B!ź”ʶ„‡:'Ń+0‡ĻŽśsÅĀŌęS©NĢ‹ åń°:ūčŲ}Ł•¢æFs Õl‹s«rMéÕ6mŹgśŒ ²³kxµi£eāÄęLœŲœą`ėėĒZ+$DĆćkxüńPJJLlŪ–ĢŹ•ųöŪxņóKj|¾’x÷½*āĆ%īxzZ®S”SØę‡³^—”ŽcµŅȮˮ“tÓóń‘² ,5v)ąŃ°š»ŌøĻB!D}‘`W!Ä ŃŹ=Ÿ×Åņk¬ߜņĘPĶ(oN”š{›ŃĆ?›ŲŒæ§Õ|sڇˆąl46Uƒ~˜ĆĖÆf×jڲZ­`üų`žzŖ½zyŌüµ¤R)6Ģ—aĆ|łšC6\ęŻwĻpęLNĻYĄČ;RXæÖ‹-Ŗ“o8ķÉd‚æ&•|Ę # ‹÷ĻFiäĪÖiŒnfõh»BŃP$ŲBqĆØ•&īh•Fgļ\– ®šdG&ąĄ—Ņõ»WÅQ%&ߝöfbēĊǘąµ×³Y¼¤ę¢­­’q悙;·=­[[—MśFŃjÕL™Ņ‚I“šóóω¼śźŸt»‚%IÅDĆŃétlŻŗ•K—.”×ėńšš <<œ®]»¢øj1¼Édā믿¦E‹tļŽŻźóŸ:uŠ#GŽpåŹL&Z­–vķŚ­måĪāććłż÷ß¹rå PZ.ÆmŪ¶ÜvŪmŲŁ•Ÿé±gĻs»Ŗ8;;3|ųp«ū,„e$Ų½Å<óĢ3Vü¢¢P( büųń„††š·§„„1gĪīøćīŗė.Ž{ļ=Ī;‡‡‡Ææžz¹‡i™S§Nńæ’żĒœššpf̘A~~Å,///ŗwļĪąĮƒQ*k–]tżśõlŪ¶­Ņ}vvv4k֌šū°téR¢¢¢Ŗ<&,,Œ{ļ½·Ņz¶;vģ`óęĶÄÅő‘‘££#>>> 8±cǚž999<’üóV}Žxć óĻÉÉɬ]»–ØØ(RSS)..ĘŻŻN:qß}÷ŃŖU«JĻĖŚµk9uź©©©øøøŠ¶m[ī½÷^ŗuėVé1QQQ|÷ŻwDGG“‘‘­­-DDD0nÜø ÷`öģŁx{{3sęL«>›A.…ĢėĒĻē<łž¬'†jŹŲ\;ŗX\¢`[œCCŅ’Ź\Ź`€ggf°~}^ū3vl v%(Øī§*_„RĮčŃžÜy§?_}™™3£ˆ·>»qf¦‘ūĘ„šårOśõ³Æ°åqæ'‘²Q¹æC2ĆB2ØäŸ{р–-[ƌ3Šé*–sėŁ³'ėÖ­£yóęFīæ’~¦L™ĀgŸ}fń܉‰‰<šĄDFFVŗ? €eĖ–1bÄó6“ÉÄÓO?͇~ˆÉdB„R”V«Ķß;|||ųā‹/ŹóĪ;ļšĆ?TŪ—öķŪóēŸRžNQsRg·ŖM]ki4 ŽŽŽå¶—””péŅ%ģķķ‰ŒŒ¤gĻžœ?žŠŠPęĶ›Ē+ƼĄ€Ų¹s'+W®ä”‡Ŗų~ż•#F°nŻ:īæ’~ÜŻŻ),,Ä××·\یŒ ²²²€ŅI?żōŽŽÖ1c‹-¢yóęe½^OJJ F£‘÷Ž{Ļ 3†~ųĮü%ąjééédgg¾}ūĢõ‰KJJxąXæ~=ööötģŲWWWōz=ŃŃѤ¦¦Ņŗuk¶nŻJPP©©©J(egg“žžN@@@¹·Ūę{śėÆæ2vģXt:”””¢R©ørå ēĪC©T²pįBžzź©rēžņĖ/™:u*ƒŽ;āééIrr21112{öģr5”®oæż6jµš:ąååEaa!ēϟ'!!6mŚDXX˜ł˜ąą`ZµjUå K¤Ī®Hȵ惃AÄēXŸEX„4ŃŃ+’ės(]«śŲŌ4~śI_£k·l©aɒp†÷µÜøŠé üē?'y’żs­>ĪÖFĮW+=8šļ€÷x²†…ūša¬ĮSßOSȓ=ā –µ¹×åFŌŁżõ×_9r$½{÷fĮ‚tļŽ„RIRR«V­bžüł“nݚ£G¢T*)))A­V[ģ8Ż»w3oŽ<&NœH‹-P(deeÉóĻ?O||<ĒŽ£uėÖ¬^½š|I“&ńŅK/Ń¢E ņņņŲ¾};O=õYYY\¾|Łü"õī»ļfĒŽ9r¤Ź¾ŲŚŚxŻ÷¬:RgWˆ¦©öśÄMk̘1ÄĘʖūuįĀ8€B”ą?’łÅsÓ­[7^xįrr¬Ÿ>8pąĄ ×ĪĢĢ$''‡9sęšūļæ3gΜZ}®#GŽT8÷•+Wˆ‹‹£M›6Ģ™3ĒThµŚ ķcccÉČČ`Į‚œ?ž?üŠÜž“O>ażśõL™2…ŌŌT<ČoæżĘīŻ»INNfŻŗu\ŗt‰)S¦ąååUįÜ/½ōß|óM¹ķe®N§ć”‡ĀŁŁ™Cdd$Ū¶mćōéÓ\øp>}ś0}śtŽ;fī[ll,?ž8;v$..ŽØØ(¶nŻŹ‰'8ž<£FāĶ7ßä÷ß7óŪoæńöŪo3bÄˆŠŠā·ß~cēĪÄĒĒIII ćʍ£¤¤ę‰s„ØJ€¶—Ä2,$ŻźcJŒ N¤8q:­ō„ßģgÖ(ŠU(`ƌ6œ81⦠t45ļ½×•C‡†Ņ®õRQ±‰É¤q4Ŗt$¼äÆĢÖ¦,j¾-(‹—ž—@·‘zēwŠjµüüóĻōéÓT*¼šĀ ¼šĀ ?~œżū÷×ųÜĒgĒŽLŸ>łóēbžÅåźźŹ=÷ÜĆ?ü@QQ|šłø_~łFĆG}dtœœœ=z4Ļ?’<9998p Üõ”J%!!!UžŗŃ®¢é’`W˜uļŽž={V9½÷j*•Š%K–””dń½Z­–×^{žżūóŁgŸQTtżµ(ĖńĢ3ĻPPPĄ©S§,¶W*•<żōÓŲŲŲ” (W®\I`` ü1¦Ü1 …‚ū￟Ē{̼vŖ66mŚDZZļ½÷=zōذ?00åĖ—c2™X¾|¹yū_|AQQŸ|ņ AAAåŽńóó3ķß~ūm¹ĻcggĒŹ•++ŒōCéžÜ¹s‰‰‰aĒŽµśJ4ŒāābžųćFŒ››[„m"""8{ölĻægĻʏ_e›vķŚŃ¶m[vļŽmŽ–““ƒ‹‹K…u¹eś÷ļĻć?^é!!„ø$Ųå lll¬j{Ūm·1qāDŽ’}«‚HkŒ3†ÜÜ\Nœ8Q'ē+SöV8!!ĮŖöjµ[[[ó›l“ÉDTT @­®z©ū AƒŖŽU£G0dȐ*Ū„„„ЬY³r×8xš žžžå¦_-88˜žżū—ū½=zō(]»vÅÓÓ³Źk]ļēāZ…% ö'øšß}Į¼ø=”Dm¹dTÕ1™ąJ®-ėöY椣{wwŽĪ}÷YnÜČ98Øųä“|öYOģģ¬{|gdyąį,ÖüéSķ:ékŒ®·aŁ‘žµ© Ė£üÉ)”4EFFåFOÆ5dČ222Ŗ X«rįĀ€ /OÆåļļOJJŠłēN:‘˜˜Xå:ßĪ;óńĒ›—J !č&O.aöĒpąĄ}ōQ«yūķ·łžūļyśé§k½†óje‰—āāāŹ%”ŗ^—/_J§_Ycūöķäåå1`Ą tÆ^Æ7Æß­Š‡GiŁ’ĢĢĢZõ3>>…BQmZv«Æ‘žž^a-ōµ®§o߾Ƶ’3gĪdżśõędTµU6µ©&ė€-‰åæ’ż/NNNåŽ&Txø‘ĄĻ?’Ģȑ#™6m€9‹“½}Åģ¦WÓjKĖ—\żšÆ ½^ÅŒŌ†äädóĻ999ø»»×čZłłłV}‘Ś!®5„[½słż¢;ŃŽŲ*•Ōl’‘ŚNEȈPĪ}]e›1cY½ŗ÷M;mŁ’Aƒ¼Ł¾}£Fķ$%„ź5µGÖ(ŠUPšL©0īŸC’ą,Ś{åÕ&V7ˆ^_ŗ^½&Ék¢,OCu3™ ō™xu•…€€¢¢¢X¶lGåŹ•+ģŪ·ääd †Ņ%C‡eļ0Ō¹ IDAT͚5ę—©PśģݰaC•×éŲ±£»BˆZ‘`÷äīī^aŌ“øøFĆ/æüĀŅ„Kyį…¬>ßÓO?ĶgŸ}ĘsĻ=Ēw܁“Sķ³F—%O©MB¤°°° AbYöc•JÅ|€‹Ėß#JÅÅÅ®F£‘¤¤$4 ćĒ7Oū­¬¼ReT*•łÜµaķuŌju¹k”””T¹Fźz®UöE§¶ŸGˆkŁ©LDgœM¦^́+Īló IgƒJi²nŖ­B†…pyē% 2+zS¦“ąÓO{ T6ķš,<܍]»Óæ’v’“+xیmku k£2a(QŠŚ#ŸĶ2čƒ­J 64FeϲŹJ օ²ĻyyyÕ>Óõz}…—Ą>>>MF.]ŗÄW_}żyó˜5kĖ–-3ļwqq!66¶?B”’`÷Ō»wo>žųćJ÷Mž<™_|‘ū￿Ҳ<•Q«Õ,^¼˜ĮƒóśėÆW(oSe#ˆµy[=`Ą€ Ÿ‹‹ ĮĮĮ :“ĀŌ©²lĢ×Ņėõ<śč£<üšĆ“jՊ>}ś˜§?WVĖšjeoø-˜VÅÕՕ‚‚ CµoŌóóóĖŻ#777󛾚\ĖŚĻs£FÄ­ĶĶĮĄšŠ †‡fkĒĪK®DƹQdTb4*Ŗ]Źk2isOkŽ-?^nū=÷šÉ'M?Š-Óŗµ–Ķ›ū3pąļ¦4»¶pÅ·«7ÕĒU«Œ”x:3øy&}ƒ³p‘©Ź^ŁLžźž æpį=ö=ō?üpĪ_ģźtŗJ–Ńétå–ŻlŚ“ {{{\®R©¤yóęĢ;—Ÿž™M›6ÕØ?BQ[ģŠr&L˜Ą_|ĮŃ£G­v”4‘ŃøqćXøp!“&MŖõõÓŅҀҩP5õß’ž·Öė“®ęąąĄŒ3X½z5‘‘‘ōéӍFƒJ„";;»ŚcĖÖ¶śūūןŚeoė³³³ĖMńŖģ:~~×bvww7'©JēĪńōōdūöķękYūy®¾–7B€¶ ’¹Æ} '’5ģøčFT’`4V ֔j%~=żˆŪvœK„Ė šb͚>ØT·F [¦[77¾’¾/#GąÆY1 h7”&Så±®BaĀAm$"0‹žĶ²hę*å…n&77·r®ĖÖ­[¹ūī»k|ž²ē’éÓ§ ©<øŃhääɓtźŌɼķÅ_¤ØØØŚ¤•ŽŽŽüł§ŌUBŌÉĘ,Ź)›®Z›Ņ?ļ½÷666LŸ>½Ö×ß¹s'*•ŖÜó!”=čĖFš ķŚµćĄÕÖ©üć?€ŅõEµŃ¾}{€jė"¦¤¤SīµnݚŲŲX’’’*=¦  €³gĻ–›Ęݾ}{Ž?^n½ÕµŹŹOŌöóQSj…‰n¾¹<ŪėŒ:‹éč9ōĶZøęļžÉķ'”žiÕJĖ÷ß÷k²kt-8Š›eĖž.Węׯ­æ3Š«FøM%&LFg3įržFžeb—$ toR£FbĖ–-j֖Y»v-żśõ«ń¹oæżvģģģXøpa•ĖX>’üs’’’5j”y[×®]9wīŃŃ•Æ§ĻŹŹāąĮƒ“nŻŗĘ}BˆŚ‘]af2™X·n:tØńńĢ™3‡’ūß5.óÓO?±f͆ VķØf}([{{õŚįńćĒ3wī\.\ČĢ™3+¬y=tč‹/®2Ū¤5F““sęĢ”{÷ī¦éõzž~śi C¹d`ćĒgɒ%L›6U«VU˜vüī»ļRTTÄȑ#˳qćFf͚Å’ūß Ó¦ćāāxłå—ńššØ¶’7Źž]:6/MĪ£ń׊;€€ŪP;Ų *.Į.t÷aķĒ]pqiZY—kźĮ›±sg*Ė–_ ķŲ¶(Õ Œ# µ’ģ ŁÄļŗLŅį$ ²[«»ĶÕ-2Ż»)š?>›7ofąĄ<üšĆōģŁٶm?’ü3÷Ž{/]ŗt)wÜńćĒyūķ·+=§³³3Ó¦MĆ×ח_|‘łóēĘøqć ĮĘʆōōt¶oßĪ×_MėÖ­yģ±ĒĢĒ?ū쳬[·Ž>}ś0qāDBCCńööFÆ×sńāEV­ZEbb"ļ¾ūn¹ėTŁ';;;ž}öŁėø[Bˆ[•»· ;wVȚ\6ķčܹsÜqǵɛ9s&Ė—/ēÓO?­t’:th…ķ.\ &&Ž’żZ]».9;;£T*Ķåf̘ĮęĶ›yī¹ēųč£čÕ«®®®Ķž={Šh4|ōŃGµ¾®——K–,įŃG%$$„~żśŒ ©©©DFF’’’Āc=VnMTDDÓ§Oē’ūĶ›7gąĄxzz’™™Éɓ'9yņ$żū÷/7Åü¾ūīcćʍ,Y²„ļ¾ūŽˆˆ<<<0™LÄĘƲk×.ŒF#«WÆ®€$**ŖŅßĒ2[¶l±:Ł–•),41ėßg×]ŃqöŪ³DoŒĘ£­·ąÓÕ„ZAĻG:Ó„ėõ/ah -źĘÉ<5v.vdæ;ž„} čÓŹÆé?mą“Ou<ł/mõT\ÆV­ZńĒšŅK/±zõźrĻęĪĖܹs+wčŠ!:Té9›5kf®B0oŽ<š5kĘāŋ™?>F£ŃÜĪ×חiÓ¦ńņĖ/—K`ÕµkW"##yłå—łä“OŹå’P©T„……±nŻŗ ßA,•ruu•`WQ+ģŽb DAAA„uS;tčĄSO=Åć?nŽęąąĄķ·ß^nĶNxx8ĮĮĮ•žßÖ֖>ųĄü†ÖĒĒǼoĄ€U&Ó ć_’śS¦L)7ÕÖ­[·ęöŪo7gN¶FēĪ«Ž¬R©øė®»ŹÕÕutt$22’/æü’ļæ’žØØ(ņóóQ©T1kÖ,¦NZå½ęöŪoÆö3Nš4‰nŻŗ±lŁ28ĄŁ³gQ(8;;3tčPʍĒčŃ£+·hŃ"FŒĮš5k8~ü8‡B­VĀ“iÓxōŃG±µµ5·W*•¬^½š±cDzaĆNŸ>Mnn. …¦NŹc=Va”æoß¾¤¦¦VŁ!źĀŖÕ:.^¬˜(Éd4‘v*“SiØķ’dä£mé}O ŠJL8Č(%*¾ĀŻć|&ź²|½’~’SƒF#÷ķfÕ¦MÖ­[GII äęęāāāRéģ(•JUķsļZ …‚‡~˜‡~½^Ozz:EEExzzšXU¦WÆ^lŚ“ £ŃHrr2z½'''ÜÜÜŹ=ƒŹ|’ż÷V÷I!jJ‘’“Gź 42æĘŗ³źDł„@|Õ¼wwķKśŃXœK-į™o+¾ōXq$,„Š‹Mōź“D||õYµZ5§O"  vŁĻ›²—_ž“’üē¤Åvó_r•ŃŻzšń‘ö\*ĶźÆ±S°aRÕĮāĢ™39qāD•ū»wļĪ›o¾Yē}¼ÕŒ0śÓæ“6Žj™ĪųŽ•ēĮBÜwm¼÷Ž{¼žśė :Ŗ в„å{™™)Ó7o„Ķ3Ų<³”»!„· v…B4£ŃD¾…üdnn5 [·nEEE,Z“Ø\  Š©S'¦NŹ»ļ¾KAAööö•ž#++‹~ųččhŒF#¾¾¾téŅ…žżū£Pü=533“Ÿ~ś‰S§Na2™psscšąĮōčŃĆÜęĉģŚµ‹ēž{€Ķ›7“Ķȑ#Y³f .\ĄÕՕ¾}ūŅ·oßrż0 lŻŗ•C‡”Óé°³³#00ˆˆęĢ™C³fĶX“h‘U÷ÅŻŻņ½ŌédĀ—Bˆ¦A‚]!„ &?æ4ą­ŽV[óGÕɓ'ńóó£yóę•īæ÷Ž{Q(U»gĻž„’žää䊻»;ńńńÄÅÅńĻž“/æü€óēĻÓ§O ]ŗtA”PpńāEfĻžĶ›o¾ÉģŁ³ˆŒŒdžüłę`÷›o¾a×®]̚5 ÜÜ܈ŽŽęß’ž7ƾś*sēĪĄh42tčPvļŽMxx8^^^čõz¢¢¢ČČČ ’žL:ÕźūbͽŌéddW!DÓ Į®BˆcM`„ŃŌüQ•››[•ū{õźEÆ^½ŖÜ’ŚkÆ”V«¹pį>>>ęķ‹-bƌLŸ>°°0–.]Š‹‹ QQQęd“ÉÄ“iÓxļ½÷ĢĮne¢££Yµj<š%%%Lž<™×_Y³faccƉ'ˆŒŒdķŚµŒ7Ī|l~~>:u¢gĻžŒ1Āźū¢ÕŚXl##»B!š eCw@!Ä­+/Ļr`eM€v-N‡FSóµ¾e<Č=÷ÜS.Šxā‰'P«Õ?~€äädZµjUnŖ“B”`޼y¬]»S5Å;™0a‚łg•JÅC=DAA—/_@Æ/­ĒڦM›rĒ:::āēēGffĶր:8ØP««Ļ¬³ā÷D!„øČČ®Bˆ£RYnc0Ō<ųrppØq xµ¬¬¬ .€½½=nnn$%%0zōhʏOŸ>}čŁ³'Ҷm[† Rnmļµ|||*ģ·µ-]S[TTZ‡µsēĪxzzņōÓOóųććēēG^^ūöķcļŽ½5šĀ `2ŃĀ`ŗJ^ƒ !„h"$ŲBŃ`4ĖuGuŗāŸ×ŻŻ˜˜˜*÷;vŒ5kÖšĢ3Ļąļļ_aaa!juåH•JeFļ»ļ>\\\ųå—_øxń"{÷īåāŋ¤¤¤0jŌ(~üńG”ŹŹ£ĒŖ¶_ķõ×_ĒĻĻ   ŽyēRRRP*•±`Į|šA‹ēøZ^žĮāik~O„Bˆ›»B!ŒFc9ąĖĶ­yķ[???āāāŖL@µcĒŽ~ūmž}öŁJ÷ōō$//ƊžäšKżłēŸ“oߞaƆ•kóĆ?p÷ŻwsčŠ!zöģYćž_}žīŻ»óöŪoćééiU€\Ü\Ė/$ŲBŃTČd%!„ ĘŽ^AØf:]̓ŻįƇ£×ėY²dI…}F£‘5kÖąććSéTe€   öģŁSaūŃ£GÉĖĖ£Y³fL:•yóęUh×”C€ėšJ 0yņd¾üņK|||P©TøŗŗŅ¢E ŗwļĪųńćk\'8'Ēņ½Ōj嫁Bˆ¦AFv…B4(''ŁŁUO­MN.Øń9 ĄŲ±cyžłēٹs'ƒ ĀŃё¤¤$~żõWöķŪĒŅ„K«\S;qāD¦L™Ā¤I“ˆˆˆ@«ÕϧŸ~Šææ?C‡5_gĮ‚øŗŗŽ››)))|śé§hµŚrµvkćܹs 6Œ>ų£ŃHff&™™™$%%±aĆFŽI\\¾¾¾V/%Åņ½tr’`W!DÓ Į®Bˆåć­&;»źéµŃѹ˜LPM®§J­^½š²vķZŽxć ²²²pss£K—.lÜø‘»ļ¾ŪÜÖÕՕóĻ“'O¦°°/¾ų‚-[¶žžŽ‡‡żśõćÕW_ÅÉÉ €łóēckkĖ?üĄŚµkIMMÅĆƃž={²eĖÜŻŻĶēoŃ¢…łüžžžT賃ƒ!!!ŲŲ”f Ž°a .$44“BۈˆZµjEtt“ÕĮī™3¹ŪųśZ‘5L!„ø (R’öH!„ ęįÉilŽ¬Æ¶M|ü]8ŌSŽ½{“™™É“O>IóęĶqttÄ`0””ÄźÕ«ŁµkW…ZĄÕyī¹(,8[m›ļ7zÓ§·]]t_!„hP2²+„¢Aµ µŖvĻžĶ¹%ƒŻõė×óÖ[ońŁgŸO~~>øŗŗŅ£G~łå«]€³g-ģ¶ •ÆB!šy¢ !„hP­ZY~?žĶąĮÖuMEpp0~ųaļĉģj÷»ø(šņ’iĢB!šÉB!„¢A•ŽģV/22„zŅ“?ÆćāÅŹĖ)• µā÷B!„øYH°+„¢Auč`ƒ­Mõ٧"#S()‘×cūvĖ/ ŗv‘µŗB!š v…B4(]»ŁVŪ&;»˜#G®Æfķ­ī÷ß-»}#$ŲBŃtH°+„¢Įõėko±Ķę͉õŠ“¦É`0ńŪoIÕ¶Q*Üv›»B!š v…B4ø+FW®¼€If2׏/æ$’šZXm›öķÕø»Ė×!„M‡<ՄB4øŻm±·Æ~ŻnLŒŽ}ūŅė©GMĖW_]“Ų¦o„åŃu!„āf"Į®Bˆgg§`čķ–ėč~õՅߙ&&'§˜~H°Ųnō·^c!„M›»B!…ūļw²ŲfÕŖ‹dg×CošŽåĖćŠėKŖmÓ¼¹šīŻe½®Bˆ¦E‚]!„ĀĮöxy©Ŗm“]Ģœ«§ŻüŠ‹,\xÖb»ūĘ:”Ø~¹Bqӑ`W!D£ VĆ=w;Zl·pįYt:C=ōčę÷łēq\ŗ”_m…īkł¾ !„7 v…B4Ę[žŹœž^ħŸĘÖConnÅÅFŽyēŒÅv}zŪѼ¹ŗz$„BŌ/ v…B4;Ś0p å¬ĄÆ¾zŠ””‚zčŃĶkŃ¢hΟ×Yl÷ōÓĪõŠ!„¢žI°+„¢Q™ń¬åą+3³ˆŁ³×ConNńńł¼ņʟŪuģhĆąARrH!DÓ$Į®BˆF„Oo;z÷²œų‹/āŲ±#µztó™1#ŹŖuĶ’7ĆES !„h²$ŲBŃč<;][īgŸ†v÷·£Ó¤Īųõō˜L0mŚ!ņņ$YÕÕ¾ū.žÆæ¾l±]›66Œ)£ŗB!š.EJŅSCwB!„øÖ¦²u[m<{*•Ķßļg/ļŗĢŸ«J§éNšŌ‚åĖ{6T7•K—ņéÖķW22Š,¶]½Ź‹Ū‡H°+„¢é’‘]!„Ņ믹”õ²§Ė#ĖŗAż‚Šųi€ŅéĢ_~y”zŲø?ž«Ż;ļt@W!D“'Į®BˆF©Ys†ż; [ēŹ×ļ:łž]¦čÉ'•U_]k”ž}ö({÷¦[lēčØąÕWÜź”GB!Dƒ`W!D£“ń¬'yŽUgfĪKŹūū’ó Ittn=ō¬ńyķµS|ųaŒUmŸū?üU7øGB!DƓ`W!D£ógŖߟõ®rĀŽ+čĖאMM-dŌØ$'ßZõw—-;ĻK/°Ŗm÷ī¶L}\sƒ{$„B4ģ !„hTr Õ|t(Séó’tœZ[y ŁŲXƇļ %åÖx׬¹ÄOŖņ^]ĶĶUÉ'{bc#µ†„BÜ$ŲBŃØ|y܏ģBu„ūŒÅ%ūģ%…%UģX}śl#&FWe›¦ąƒĪńŠCū()±é*°čæīČōe!„· v…B4;.ŗq0”źuŗń›Ī’sŁņŗÜóēuōļæćĒ›^Ņ*“ ęĢ9ĮSOĮh“®zą“'“Œépƒ{&„B4.ģ !„hŅņmX}Ņ·Źż½³Yōl!NNÖMĆMLŌÓÆßvÖÆæ\W]lp99Ō÷o¼qŹźc† u`ī×Ų+!„¢q’`W!Dƒ3™ąćƁč‹+,y91„ėŗv±eŗžŲŚZwŽ²ąšŸ’ÜO~~ÕSŸoGf¾… ¬ŽĆĀlłäcwŌ•Ļ B!š4EJŅėę@ !„7Čoē=Xy¼ņQ]…žŻ7޶łęmß~—ĻæžĢ°z/@·nn,_Ž“.]n®QNƒĮÄūļGóā‹Ē),4Z}\›Öj~ųĮ7×ŗ{Ɲ_¬bż)oN$kHĶ·ņƒMˆZi"P[H’ę™ i‘¤{¢q“`W!DƒŹ*°aö¶Pņ‹+Ožtg«4īļ\aūēĖsł÷‹YVe".£V+xņÉV¼ņJGœmjŪåz³gOO>y˜cĒj¶öøY35æó®Ózŗŗ"/żJš¾ńß7!źCDp6SĆāŗBˆjČ4f!„ jå ß*Żm!cŚ„VŗoŹd-,öØQ)ƒĮÄ’žMŪ¶›łņĖ  ó}ļ„KłLž|€~ż¶Õ8ŠķŲцŸ¬Ū@ąėÓ>č q•=—\8™"u«…hĢ$ŲBŃ`Ž&i«Ģ¾¬Vš˜Ö=eÕSwĒŽudķjO4ššM&LLŌ3iŅ~Zµś™’ż/š‚‚ʱž7..éÓŅ¦Ķ&¾ų"®F£Ö·Ł±ń[o¼½ė¾ÄЉ§:?§7»©ģ јI°+„¢A•¬8īWåž”é»XĻćÓrļ¹÷žsøysĪyĻnęĶ+YšŻ³‡978ccS:ö„LŃ«+{!~/įE&ęģ ‚ ĻÅīėNl w1øĻÉBĮO®cjTōGŌ½ūJFŽL$8$§Äu’H U« ¼ż¶ŻŗU¤bÅŅY›V©T–ČʍŃlŲMLĢ“ƒś‚Čd¾žlĖȏ¬‘”b¶œw·×Öėiv²”āėņģ{‘įExCĮć‘»„2ŗiłYŽLʱ ‚Pę2Fģ¾ęTąžwüī+Šp«hĢ–ĶĪ̜•ĢüéÅŹŌœG­†€€hę ūśŚŠ®3ķŚ9Ó =–?¢LMUpõj'NÄsųp,ĒŽ= 5UQģó<®recV,s¤aĆ瓹¦‹“:Y<—k BYė¶<…Ü¢'Dį ‚]A”ĢķøZō’RłWJ”¾KZ‰Īkl “'ŁŃ¢¹£?O$6öéęā^¾œŹåĖ©,Z€©©”źÕ­ńń±¦bEs¬¬Œ±·—aeeŒL&%=]©ż—ĆĶ›\¹’ĘżūYOUCŗv5ēŸ IDAT×_°³3’AĮģ ‚ e*!Kʁö÷KU Ø÷Ō×h×Ό W~ž%ÅKRQ*Ÿś”ääØO!<<åŁœ°Ü*óƶtļ&zTA”0āė`A”LķpB©2üųéä•D ł3¹Ž……”)_Ūr`Ÿ+Mš˜>“s>O2™„Ć­9č*]AA(ģ ‚ e&]aı(;ƒū,d¹t÷6¼¦īÓØ][Ę®Ī,^䀏ĻĖ—9U&“0h %Ē]łqš––„˜…JAŹģ ‚ eę`¤#ŁJƏž®Ž X™”Īz· ōķcÉń£®¬Y]† žOB§ā0‘Ičß_äĪū́jÕÄĢ#AA(ńäAŹ„R-)p®®¹LE‡j‰„^‰Žx݌7^7ćčŃlÖ­Ogļ¾lrr^œUųŖV5f@ Žj…««XÖGAJJ»‚ B™8cEšÜšc§½G"²ŅéÕ-ČkƙńŚkf¤¦ŖŲ»7‹æ’É$ [o-ٲ`c#å7ĢŲ߂֭ĶJu½\AAxUˆ`WA('īž«k,QóŗgB×ę)X2`€%11¹ęx"›€Ąnß~Fiœc"“а” ­[›Ņ²„™bņā¬A„—ŠvA„R—©r6ĘŚą>æŠéŲ›—NPY\®®FōėgAæ~šlĒŃѹœ:CD„‚ˆ%‘‘J""df½ū×­¢1^Սńņ2¦ŗ—1¾5e4jd‚……H›!‚ „I»‚ B©;cƒ"ךŲܖ•“Ėø6Eēīn„»»ž2?É)*R’UddØČČP“‘”&+K„„[;#,-%XZH°³“bn.Ę$ ‚ Āó ‚]A”Ō]z`ip»„,—ś®ée\›§gg+ÅĪVōĢ ‚ Ā‹L<©A„Rw)Žp°ėēš†±TUʵAįU ‚]A”T=Č4!>Sfp_-§Œ2® ‚ Æ 1ŒYA(U·SL ÜW«‚v_U·nŻbćʍ÷ŁŚŚR±bEŚ“iƒ½½īŚĢ.\ąß’-š¼īīītéŅ;;żģßiiiģŚµ‹ššp©¹ZWÆ^eŪ¶mīwss£aÆԮ][»-44”ƇxŒ——;wĘŹŹJo_RR;wīäņåĖ$&&"•Jqtt¤iÓ¦¼žśė˜™™iĖ.[¶Œ¤¤¤"µćć?ĘĘʵZĶńćĒ āĪ;( ,--©V­]»vÅÓÓÓą9är9$((ˆųųxLLLØR„ ;w¦N:ÉĢĢd÷īŻ\øpŲŲXšóó£K—.ŲŚŚź”ß¹s'W®\aüųńEj— å‹vA„R—axM+%NŠ2®š¢ˆˆˆą«Æ¾*“Œ„„%‹/ęķ·ßÖn;uźŌ³··gļŽ½4mŚT»mĻž= <˜””¬¬¬pvv &&†ĢĢLÜÜÜŲøq#­ZµŅ³vķZ¶lŁR赬­­Ł²e ;v,“\ž‹/>±ž£Gę·ß~ąųńćO<ĘÅŅÇS«V-ķ¶72lŲ0233±µµÕåwļŽ%''‡jÕŖ±eĖź×ÆĄœ9sø~żz‘Ś1hŠ lllˆ‹‹£WÆ^allLŊ‘Éd¤§§ǘ1cųņĖ/™6mšĪńōźÕ‹ššp,--qqqŃ3a† ʒ%K06~ōQõųńćōė׏`aa««+qqq¤§§ćääĚ5kčܹ³ö˜ 6°iÓ&ģ Ā+J cAJUAĮ®‹„tXµjjµZūO„RĖ”C‡ØZµ*Ɔ ćüłózĒ>|Xē8µZMNNŪ·o'##ƒ1cĘhĖĘĘĘ2xš`lmm9xš )))DFFIjj*ū÷ļG"‘Š«W/RSSu®cmm­wµZMVVū÷ļ`ųšįØÕE_Ž `ūöķzēĢĶĶåŚµk“oߞyóęØs̹sē Öc͚5üšC@Óę¢}Eķ15$/!Փ®“••Ķ„K—š÷÷×Ķ-*[[[®]»¦ż¹yóęŒ1‚åĖ—JĒŽqwwąĪ;üūļæÜøqƒO?żToNģĖĀÖ֖””ķĻ]»v„oß¾,X°€£GŅ¾}{ÜÜÜP©Tܾ}›;wrēξżö[ķ½(.©TŹ¢E‹čŅ„ µjÕ¢GųśśbbbBzz:ĮĮĮ:tķrŠ,EōÓO?ńŁgŸQ³fMzō聻»;ŁŁŁDDD°cĒLMMłį‡“Ēųśś2nÜ8f͚E5čܹ3U«VE"‘p’ž}öķŪĒ•+W2dmŪ¶Õ©gnn.}ōQķ7nŽŽŽ%ŗ‚ ¼ŲD°+‚ ”:?—4ƒĮn¶RJ@“m«&s/Ķ”{i¦ō¬ł'sĆó|…ņĆÜÜOOOnß¾ĶķŪ·uö™ššR¹reFŒĮG}¤3_׌ŚOOĻB“*Õ¬Y“«WÆ"—˵—.]J›6mX½z5’ż7 H$œ©[·.S§Nå­·ŽŅ9‹‹ Ļ®ŃhÖĪõōō,Öŗ¼vvvxzzš½øV­ZŚaÉ IvµqćFV­ZÅśõėY·n įāāBżśõ™7ož¶×ŪSSS<==±³³+°Lūöķ9sę ³gĻęšįĆlŻŗ•ģģl¬­­ńöö櫯¾b̘1zssGM͚5Y“hŪ·o'>>µZM„J•čׯ“&MŅ“Ī3sęLüżżY±b›7o&!!µZM… Ø]»6ćʍćż÷ß×9ĘŁŁųąƒ÷ ‚šr“ÄŜ(Ś*ķ‚ ‚PBŁJ)Ÿļó!ÓĄ0e[S%ƒėİāL%$@$Ž­Wxb”ģ½»½6†må)cr'‘łVx5t[žBīc£ą»„2ŗémĆ‚šÜ‰ž]A”Ō™«hU%‰ż7ō3ƦäóĻegTj *5½iOĻńŲ™‰ŽŻ—Qll,-Z“(“̬Y³čŪ·oÕØlœ:uŠZfżśõųūū—QAģ ‚ e¢£go: RKōöÅē[sW*Q³'Ā‘ĮubʲzĀ3āāāBddäó®F™kŌØŃ+ŁnA„™H{)‚ ” W«ŚT-h”G°B%åąMŅåFeS1AAŹ%ģ ‚ e¦Æoę2ż„_§VĆŽż!Ļ‚ ‚ E%‚]A”Ģؚ*ééóą‰å”* {# &“AA( ń)BA(S­*'c%Ė}b9µZĀ ­AAŠB$Ø„'P(”Üæ’€¬¬lĢĢL±³³ĮÖÖźyWK^:9¹£ķŁtÉykUØ$ü{݉7¼03~ņŠgį呑‘APPU«VÅŪŪ[g߃8wī YĆU*Õ}Æ‘››K«V­“Ū ”””\¾|™ÜÜ\¬¬¬ššš aƆ:kōܹs‡+W®ŠøqćB׏ĶļŚµkDGGėm722ĀÉɉʕ+cooÆ·?,,Œää‚ę©kŲŁŁŃøqcķĻjµš .pęĢrrr033ĆĶĶ¦M›bcc£-—Ą™3gŠT'''ź×Æ_`;@³.o­ZµØX±¢Įż*•Š .pżśu111ĮŃёęĶ›ćää¤SöäɓdffŅŖU+½ūŸ_HHiii“hŃ ±„• Ļ^¹v›µ„\®ątŲęē]•bS«Õtzż¬¬,Ų¶uĪ¾Uæo꫉æčlūyĪ—¼=“G‰®õÕÄ_Xõ»ī=ڵc1M›Ö+Ńłž§Ž}>%äæóÜ»sü‰e[µBZzēĪl+Ö5f޼5„ŗˆB”ŌŁWÉĶ™Įƒ»ņŁčw055yā¹ ā­!ćųž»’ńńČAÅŖĒ‹, Œ¾ż?cņ¤‘|6śķē]2į[»+¶¶ÖŸÜ€\® ²ūkD^ߏµµås¬Ż‹G©’rņ¶ b­8kZ-A”ŅĻĘ\…JĀį[¼Y=¾kY„RI§Nhٲ%ūöķ`Ė–-Œ1‚ÄÄD½ė8::2sęL>ųąķ¶;v0jŌ(iٲe‘ź»dÉ~żõ×÷ѧO/^Œ£ć£ŃŸž9'Nœ(ōÜ­Zµ" €Ó§O3pą@"""ōŹ™™™ńŁgŸ1}śt¤R)aaatīܹHõļŽ½;;vģ`éŅ„üņĖ/–“H$tļŽæžśK'ųš ‚!÷ŅLX}Ī y1Üü”* ŪÆV SµdFźg\;}©©*""•D\W©$2RIä %ii*ŅRU¤gØPź~÷…µµKK R*W6ĀĖÓooÕ½Œńņ2¦J•WśQk¹¹97&88Xo_HH•+WęĪ;„„„č».\ ##ƒÖ­[š^ŚĮƒćććƆ hŲ°!&&&¤„„qöģY¦L™Ā‡~HżśõiŌØŃS×{’žż888h–ĖåÄÅűgĻ–-[FBB‡Ņ9¦J•*z}~y¢R©¤OŸ>dee±qćFŚ“iƒ„„%YYY\æ~Y³f1sęLjŌØĮ°aĆh޼9aaa:ēśį‡Ų¾};'NœĄŌŌT»ŻÖÖV§Ü”C‡ō¶„§§³råJÖ¬YĆĢ™3łžūļˆŒŒ¤[·nŲŚŚ²bÅ Ś·o*•ŠČČHÖ®]Ė‚ ČČČ`ófĶź£FbÓ¦MĢ™3‡āēē§s-¹\Έ#°““dłņåH$%ūū ‚š$Æōųī½X”õŲ嗓#'*źII©„V‡_ēžIƵhŪ¶‰Ž¾vķüi×N³ųüģ9«˜}uåS]kČ[ŻņV7>üčīn?ō„#^M …’ļ¦.ÄČHŹŗ5³iß¾™^™””tśōūĒŽ…räh;45^&&2āb ļ¹y•¹Ūf3æĖŽGŪ±ėzŅsŒP©AMŃ?Üf+¤ŗéHēRčŻĶĢT&ēŲńBžĖįĢ9 Eń‚ź“4ii¹Üø”ąųcNœœŒhŃܔ6mLńojŠĢŠi^9­[·ęäɓܺu ķöŗuėʞ={ę½÷ŽÓī Ņ °gĻär9‹-ŅÖlmm››NNNųūū³gĻžgģśłłįģ쬷½gĻžX[[3gĪuźbjjZ¤kŸ={–ØØ(ęĻŸĻ€tŚāģģĢ_ż…»wļfŲ°aŲŲŲč7o8qƒ 077/“ł{ ó“jՊ={ö°’~m°»dÉ2339vģ˜ĪpkŠōœ7mŚ”ÜÜ\/^Ģ•+WØY³&R©”U«VįēēĒšįĆ ĘČčŃRb3fĢ <<œE‹QµjÕ'ŽA„’*wĮnvvįįdddbaaNķŚÕ174_$--ƒÄÄ” %ŹÜ\¢¢īšį;īī‰M ;;‡˜MĘŠŌŌtm++ ķČŹŹ&..''{,-͉кǽūq(ä Ü*¹PŻĖż‰u >—;3ٱ3€*UŒéÕӂ,ń©QīĆEÖ¦MfΜIPP6Ų½’>QQQ4oޜ¤¤$BBBtŽ ĘŌŌ”¦M›””€»»įg®ÆÆ/;vŌėÅ, }ōsęĢįĄ:ĮnQå Ć.Ø-ōļß_o~ģ³dddDåŹ•IIIŃn;vģµk×Ö tó4h‹-āŲ±cŌ¬Y€źÕ«3mŚ4ƌĆÆæžŹøqćø|ł2Ó§O§]»vŒ9²ŌŚ"‚å,ŲŻ¼e?“&Ļ%)éŃiss3¾śr„vžäÖm7~–ĪqMüū`ffJō­Ć|üÉwž8­ŻæzĶvVÆŁĄ[ƒ»1÷׉žbčŪ˜0~8‡vQēœŽÕ«²pį7Ō÷«Y`}ū'µjUē×‹6gčE’ĢčĻ~äĄĮ“zūÜ*:3żĒĻyóͶŚm={ĀĪΚG ą›oꑔüØ·ÜĀŒ ć>ą“OŽŅ9Ļŗõ»˜:u”NY©TŹ{ļöF„*žpĘ­Ū2qŅ/Ś/;@óž˜0žFå»öż‡Ć»=«€T®ģ @B|R‘됕•Ķ°į“Ł½ūjõ£6Ō®]„K¾§†·‡NŁ/æś™M’ģ%7W÷¾½ _~9œaļ÷`į¢õ,]¶‘„K¾§wƎz׿ü‹Ÿų÷ßcģŻ³œ† j‘›«bÖģ,[ž7Y:eķl­=śm>5¤Čķz\@@o “£[·,Š»7nÜfü„Łž8­Ó~€õ}™5k<~õ|“Ū²³sųzŹolŲų/r¹B§¼««_Oɀ]“Ū† ŸĢ½{qüļÓ”ü4ciiŚ}2™1ļ¾Ó‹¦~¦ĢžbĢŲŚ/“ņkѼóēM¦JĆ [ņōź=Šœ9ĪķąõĪĆÉĶĶåŅÅ]˜˜č~ł˜˜BS’žxy¹pl-QQ÷7aĒ‡éŻ—zu}˜5s Ö*“/‰ø¦ŃĄ5›Éęģ‰päæ»6H%šįŹ…‘«$DŪŅĪ£čæoł©TjÉaÓ¦ öģĶ";»ō‡Däöm%ó¤2A*õżLčß߂¾},qpxµ¦C“hŃ©TJpp0ƒŠ·Ķš5#11‘Ķ›7“‘‘„„拪ąą`7n¬ķµĢ ¬vļŽĶǬw kkk8PĶĮĖĖ +++.^¼ųäĀųųų ‘Hų÷ß鎽»Į”½ėÖ­{Śj*++‹›7oŅ”Cķ¶›7oāļļ_čqUŖhž—±±±:Ū?ūģ3žłē¾żö[śō郇‡~ų!ĘĘʬX±B _”Ō•›`7..ńfóī;½hŅøR©” Ʊlłß|ūŻ||jxо}35¬Ķ”Æ5Ä ֑«Riėä ±:“ķŚłs÷n«~ßL‹ę čŠAÓĆW«VuėžņėļxyVa֌qxxT"..S§/±zĶ6æ5–’‚’6Ų›tźT8a,[:õ„üc?vü,<É oҵėk˜›™ W(¹qć6‹’Ň#æåTčf\\ “ŗ~=ŠÆ&žĢ{ļöÖ¾FĆ#X¾üo¾›ŗZµŖóŚkšoė eĢŲøŗ:ńƘŃųÖō$33›K—#Yŗt#)©éHIą09 IDAT„Eæo ńɌ7“wŽīI“Ęu12Ņ\{ٲ|?u!ŽŽUy½“ęK‡7ßl[¤a©÷ījźŽŽEĖę šŪ¼5xyiŽ/•*»˜Ģ®ŻGŁ»/÷ߟDĄńµŚ^ń™³W²a㿼ީ%ƒuÅŚŚ„2—ŪwbX±ņ&Nś•ś~¾4lX‹Ž½;²tŁFvķ:Ŗģfffqųp0•hP_3÷mÖģü:÷OüźłŠ»w'ŖTq%7WEtō=Ö¬ŻĮŌaccÅ;o÷,rŪņ„†^ąķwæÄŃĮŽ-›ēćįQ Šļż|Īżūq Ņzõ|pqq"11™³ē®°vķś‚ “°·ÓdżbĢ 6oŁOė֍yćõ–T©ģJFF7oŻå÷?¶šæĻ~ÄŁŁQū¾Ķ߂o¾Ē!Żi×¶)Ę2cnŽ¼Ćśæv³bå?89Ł3ę‹÷HJJį½÷'¢R©ųö›QŌ©ķDY‡œc鲿łü‹ŸŲüϼ"·_&3¦Gvüłē6Ž„SĒ:ū÷ģ @©Ģ„OļN€f“A’Ÿ}Ÿ·w„¾Ÿ/.®N$%„pžüUVÆŁĪ Įc8ø¾Č=Ķ/ƒjvY|ŅųoՑqų¦ū"PŖ N^„RIŲzř6īÉI‹Ø*jžŁœÉüł©DD–rn œ='ēģ99Ó~Lįķ”V|ņ‰nĖĶ£¹PvvvŌ«WOgŽnHHŽŽŽx{{Ó¬Y3”J%§N¢M›6ÄĒĒAæ~ż“å»téB½zõ5jüń¾¾¾ø»»S©R%ŖT©B͚5ńōō,“öH$õ²/'%%1sfĮ#øzöģI͚5©Zµ*ƒ béŅ„;vŒ† R„J*UŖ„»»;^^^Ō®]ū™|f8vģ˜NfgŠdČ^ŗt)999LžüšCśōéC`` óęĶ+³×E„W[¹y¢Źå ~™ó„N/OēĪ­©[§ļ¼÷»v„}ūfŌ®]Śµ5ėź5ŪQ*”zɧņ>„ž>}‰Uæo¦aĆZ&زµµfĒŽÅŚētĮÉɞŁsV²s׎ÜMļø¹æżIu/wŗwk÷Ōm/k …’żū©WׇyæMÖŻŁ”9NNöŒüų;Īæ¢ AÓK·|ŁōģŃ^»­sēÖŌ­[ƒ·ß™Ą‘£!Ś eÅŹM¬_;Gūzå•oŌ°6ż~ŽTśhžĻ“Č fͧóZtīÜ??† Ļ®]Guźś$IÉ©,\üÕ)ņq¶¶VģŽ¹Dgčō€]čŪo4§øzõ&¾¾^ģŽ}{;žüc†Ž°āzõ|x£ópBĆ.аa-6ØEµj•9t8ˆ¬¬ló<Dvv}zwB"‘ —+Xŗl#UŖTd÷®„z=¼I’žüńēÖb»ē/\孔㰵µfė–łT«VY»o붃ܹĆųq0~Ü0ćŽ܍*•]łaŚbvģ8Ģ»ļōāĪŻX¶l=€æ=žł{®Ž¼7ŽhIĒNĆųcõ6`77WÅø±ļ3aüpņƒvÅæł~’c‹6Ų=pŠ““ ¾ž üwǚ®ŗ˜!ĆP8›!7"č®-­Ŗ¾” €\”fŪÖL~ž5•›7_¼ ÷qYYj–-Oć?ŅéŁĖ‚/>·”ŗW¹yDØuėÖ,]ŗ”¬¬,ĢĶĶ Įß߉DBƒ 055%$$„6mŚŒZ­ÖĪאÉd?~œ… HXXŪ¶mÓ†Ū¼ysžųćjŌØQźķ111!+Kw“Ģ“‚Ż5jh{ØWÆ^M›6mŲæ?įįįū|:͚ äņåH:æŃŠ7ßlSäzōģŃĮąüä¼ełß§sÄ_ė6ų±“Ō|°ČūöéDff6‡ėĪqŪµė(€ö÷ćŹÕdffÓ§wG½@ĄÅőŗukpåŹ TŖ¢Ļ¼zķ~¹¹[7ėŗ łņ`š 7 ßįįüčšKš%7Īž¹ŒZ­f@’.{2źÕõĮÅőK—ō—čxė­īzŪlm­h÷š?±± ÄĘ&ФIžł{.ƒu5X' s²³st†C…ÓzTrsfļ¾@”Ź\ķö””tNŃ Æ¶ĒūŌép 4|_:vŌĢ×ogy"“ŖhéžĀ/®1¾eUķ²‘€N/®B%įŸKĪØž0Ļwßžlš·ˆįÓщ/E ›Ÿ\”fÓ¦ Ś“½Ļ䯓IK+ßė ·nݹ\ĪéÓ§ÉĶĶ%,,ŒfĶ4 LMMiŲ°”¶ē7/ÉQ‹ŗ_ ŁŚŚ2iŅ$žż÷_.^¼Hrr2„‡‡óŪoæqöģY *›%ßRSSu² xzz’˜˜XąæŽ½{kĖ3räH¶lŁĀٳg‰%;;›ČČHÖ­[Gff&}ūöÕ ęKāŠ”C„……éüŪ½{7~~~ 2„S§NiĖZ[[ bóĖĪĪŠk{ž/¾ų???T*+W®ŌĖė!‚PZŹĶ×ʎNv: {ņ䭁Ŗ(„ $nnśYķšŻädżLĪsū“Ź•]éŪēõR©Si“ÉŒiÓ¦ QQ÷Ų“i/ń É( RRŅ‘Ė<¤™Ēūų˜<]ˆb箣̘>Ę`pž²ųö»ł,YŗQ›LĒÄD†…¹fę¦TóØLdäm½cŠśåäČÉɑcQHekc]¬ś ² ³`į:¦ž°‰DBu/wśöy__OjÖō¤^]ŸB3¦8ļÓ+’į›oēi{e2c,-Ģ‘™ČØYS®“wõŖŌ«ėĆž'Ė˜˜Č8r$„ŒŒ,y¼)©š÷äŗõ»X·~W”uČŹŹ.R°{žĀ5bcčܹ5Õ<*,“œ’†Z­ę£‘ß>ńš É‚šyĪ…±°0Óū¹ ^kk+s'$$3pŠĪ_øŖ-cee±‘NNöT­źVāõ­ū< vwķ>Ŗ vwż{ ##)½z>Jž’÷…Ų'ŸN-ō|y÷åURŁ&‡ ļ2ØN,‡nڳ/ҁ ¹1›/;ć_9E»x‘J„fĮĀ4ęüœZJ‰§r€X ūį’g<üÓ|’Ģ x£Nž$66—OG'²yk&æžb_īęóŗŗŗR£F ‚‚‚°±±A*•j3-ƒ&Ųżõ×_‰ŠŠāæ’žćż÷ß×9~Į‚,Y²„¤¤$ģģ ßū¼äIÉÉÉ„ģ^æ~¹\^āįŅ{öģaäȑ9r„×^{Ķ`™üm) ^^^˜››s’ž£/x«T©BDDį#KĀĆ5#T¼½½K„^‚ %U¾žšĻAAĆ M/„łcÄēĶ[C… ö lxŲäĖ $ä<‹—l ™æ3gŒ„FjŗŁmĀčŪ’³ŸßŌŌ™Œœģœˤ„oXiqÄÄÄ3cĘrlY»z}Nī³r÷^ß~7Ŗ•˜÷ŪdźłłčōLß¹CĆĘśs®śōīČwSrōؼީ%;wÕĢĶד(•h^«I?2˜¹9?;Cō éѽ==ŗ·ēĒéK7~&æüü•^·T*A"‘“±ŠŽpssӇõŌ”Y0ļküżż ,’ų¹²²rP*s ~Į”ż½|8”ü×¹ržĀUʎyŸwŽī©·ĢĻų/g—8ŲĶėM’wĻqfü4–ģģŽ ”eĖF8;?źQÉ ĢƒNl(ōK33ĆĆ_Ö&Jzł< [xBnŪp:ʆ\•c©šrłxT"Ē?«/R€pąpø$€ĮYĆXn@E Pp‡b¬+lȑ#Ł“ļĖ‚łŽtģ`x©¶—UėÖ­Ł»w/vvvųśśźōÜęõņ®ZµŠ““4Ś“Ń6R§Žęļó‘#Gt†ēˆ±±q©÷źĪ™3€®]Kö|Æ[·.@”Įn`` @©%w’H$˜šš¢Ģ7Źč7Ž`Ź”)lŻŗÕą=V©TüöŪoѱcįĻA„²&‚ݧTŠ\ϼ!˜Ž¾iŽŽ¾Ļ–­ųzņĒŚa«/£ąsŒ’6™R~))…w* {’’ ¦—šŌ×(Čńć”Č Žy»ēs tNŗˆB”däČAėPŠ=īŁ«#S§-f×®£¼öZSöļ¤iÓŗT®ä¢-ćč¤yOš˜ČØZÕĶąyžūļ<1±ńƒæ¢õF6śm’X²t#ff¦ü4}ŒĪ~G;Ōj5*8ģ-ĪĪĪa’Tt­€³³#ēe[ZZXĻ£G’#33 w÷GK©T*bćØd`ŠAŽļe޹ƒ‚Ļāą`Ė„ń ĄS yEļŽ˜1s9!’ćĮƒ¤‡‰Āt? ę-Ėäąhkpžæ\”`ļŽ\œ ’Ŗ0–ØiéžBKwĶė˜Ķǟ$—ū„# £FŲŃøOÓ;œ D<üšp›5P hų% VU ś€QŸX3i¢Ęåä ŽŗukV®\ÉĪ;éŽ]w¾½»»;nnn,Y²‰D¢·~ķąĮƒ™6mC‡壏>ĀĻĻŌj5qqql޼™;wņĪ;ļŲó[kÖ¬ĮŚZwdQbb"ūöķćčŃ£ōźÕ‹ęĶu×]OMMeٲežÓĘʆAƒѼysš5kĘ“iÓøyó&mŪ¶ÅÅÅ8tčžł'õė×כ·ü,YZZ’™łh*ĄØQ£X¹r%o½õļæ’>mŪ¶ÅŃёÜÜ\n޼ɚ5k8yņ$Ÿž9...…œY”ģ•“GeÉ:Īča/KN޼Ą2Gž‡\”Š›š—$ČŪ»ŖvŪü…k±¶¶äŻwJ>ĻęE›«ł`©Ź5œ8%4ģĀS_£FjŸ%&&^oČšÅ‹×‰M(öŠä¢ŗ’0ITuÆŅķ(LŽ|ēļqØį{\ÉĶ™fž~ģŪțo¶%%%]g~(@͚žt†O>¬wµZ͘±3¹s7†ČėÅ[ŸņūļžGBb +WmĘĀĀ\»Ģ@Żŗ5Ų²õ'Nž6˜łśĢŁĖ 1…>H“&u©S[3īdŠķäüä ŒųšŠ®tÖt8xą$ļ¾ŪKg›B”äųń0ll¬pyŲ³ŖR©“ļēĒ)•¹ēGŸŽ˜9k»w#..]ß|M§LŻŗ5Ųų÷Nž0ÜĪ ēÆ1|ÄŽ{Æ7žžõžŖ>åÉoóҘ13™^¾"ˆŽ£ HcŸPöi„!’­š­ŗ·ĒW­† Óų/TĪź?œŹÅڼyóvćāātęėęi޼9›7oĘĒĒG/˜rppąčŃ£L˜0 hGoäß?vģX~ųį‡gR×qćĘÜīééɔ)S˜4i’޾øø8>śč#G=:vŠ AH$vīÜÉĉŁøq#kÖčNį°°°`Ą€üņĖ/„:uĖÉɉ˜˜ķĻööö?~œ/æü’Õ«W³xńbņUŖTaÖ¬YŒ;¶Ōź$‚PRÆt°ėźāDdäm~›·†6mciiN•Ź®Ś!Ž®.š k÷īc“lŃ//wŒŒt‚ ØØ{ ž5£>BÕŖndeesģX(Ó¦/ĮŌŌ„Ż5Y™cbāłėÆŻŒłā=,,ž<²$vģ<Ģøq³hŌØ6­’¹T®šeofĶY‰••^ÕŻQ媈‹K`ĖÖ¬Xł é©+©Įß$ ŒwŽż’)_Œ··Y\»v“©Ó=“v$éaļßõˆØ#åēīīF}æšĻ“uėję|-Y¶ÆźīŌ©]‰TJ||ū÷ņóƆļqļŽ9t†ļ§.ĄŲŲHūĢcogC·®Æ±mū!¾ó¼‰››3 ÄĘ&°aćæ\»~‹ŗ;[øD"aī/IJLaž‚µ˜››1nģūŚzĶž³’Ļ>ŸĪ—ć‡Ó¬™VVdēȹvõ&?ĶX†D"”GwĶr\uźxÓ ¾/+WmĘĢĢ”®o¶ÅŁŁÜ\wīƲ|Å&ŅŅ2łŃ@½z|’ĆB$R žž~ŲŁZsūö}ęĶ_ĆĶ›wxļ½ŽŚ/JźÖ©AxxSXÄ»ļōĀĪŽ†œl9×#¢X“h=·oĒhļ³­­U±ī€‡G%6¬ÅĪ]GHKĖ cĒzēéÕ³3g­`Ģø™ÄÄĘÓ²Eķ}‰øÅO3—č½ŽÆ*µ¾ŸšĢ¢Å%ķuv'€§é.©4vąō^£Ø#(ņü÷_ßŒåļ ššx¹åyيįŃz­ł­Y³†åĖ—øüŪ·oG.—sóęMŅÓӑÉdŲŪŪS©R%½9ü|šƒÖė”-Ģ?žČ”)S “ÄÄÄšh­={öč 6$żœœœX¾|9K–,!::šÄÄD¤R©¶-OZh޼yĢž=33Ć£¦M›Ę×_]h/w@@€Ž—€UŖTażśõČår¢¢¢HMMÅŲؘŠ+āģl8Qēć~’żwäņ‚;AJĆĖż„|J}8ŠŠ‹ü8} ?N×l;°~ƒ9Gś÷ļ̦M{yo˜ęŪZ/Æ*Ų =Ē[ƒ»±w_{{~¬snkkK/üVŪ+¹hńzĢĢLł`XæRk\®$9%ōŒŅĶDھ?żś¾Ī?›÷Ó„ė‡:ūŒ˜0~8ÓZJBBÉhōķū:ēĪ_ełŠMzó›7«GÕJ;Zāó&Æ·’I‰‘ņ y«õ™ųLėPŻĖ/>—¹æ­¦oæŃ:ū$ ćƾς…ė ŽćŻŪ1yņ\"#oÓ¾}3ƒĖ4͜1–”Ōō“Tłū×cźw’+QŻe2cV®˜FæŸ3kö ,,ĢųäćĮøUtfåŠłßčiLųjŽŽq&2S¾ž˜&Mźj·-_ö ŸĢük™æ`­Ž1]»¶Õ[ŪŃю7^oÅøń³ōŹ·nՈo¾žDūó„ń|–…‹Ö³pŃz²•Üœł`X_V¬ü‡„„¤!īÓ»“æžūš’õē³9;;²jŏŒśßLœō‹Ž~™Ģ˜Æ¾”]¢ėU&WØłōÓD¶m/Éßø[Ą&ą4O7LłYŠ–ہ^@;ŠÓÓ{ė–’½āŲųW|} ‚ŹRbb"#GŽ,“Ģ'Ÿ|¢3/ÕŽŽ¾Ą²ęęęŚu\ cbb‚ĻĖ™ššj—Č9tčK—.-“üņå˱µµ-RWœ€:?###ŖU«FµjՊuœ……†gBŃīeau611)q*KKK,-ĖgVqA^\’ø˜/ŹSæÄF„RŃ©£į9,;v¦Bš7«Æ·ļī½8ĀĀ.ó¹\ĮąA]qrzōŠU«Õœ9s™ėQ/W  š!Ö€ Ąõ"•’¢fŠ[ńDG?yȂ ‚šbćrJØ];®]Żū¼«!B>›6Ī}ŽUž±ļHᯠÅYWū0M"Ŗ—Y<0¼AQęņĘÄäŅo@»w:S”BéeėA„—…čŁA^Hü‘Ī¢E©Å8ā40‘—?ŠĶ£ž–PŌĢŃ·n)y÷żx 1CIAD°+‚ ¼p.]’óĶwÅ‚üŒfiŸņę0(Zr®°09?NO)Õ ‚ ĀĖ@»‚ Ā %-MŰį‰dgµwr°ˆē³nnY¹LŠ6¤{ń’4öķ/nęjAA(_D°+‚ ¼P¾ü*‰7E,½XĖ‹³vniŗüDQzxÕjųß’ø}[YźµA„•vA„Ęę-ü³9³ˆ„Oæ—fu^@Ąo„;9EÅē_$•zAįEõJgc<şn#:śjµšŻ»—b"“=ļjiżłē6OŃ·O'ŗtiS¤c&=…Rɬćx𠑉“~„yóś|0¬o©ÕõȑÖ¬ŪĮķčūH„Röķ]Qj×2dōg?’™Y“!{³fŽĆĮĮö™×aģø™XYYšżw’{ęē.©ƒ‡‚Ų°į_FJ½ŗ>Ou®-[°eĖbcćquubĶźYĻØ–…[°pgĻ^į×_¾ĀŚŚ²L®)<©©*¾ż®ØsM/ ŗü*ōč>ī š¤UŸš¤,́ŁlŽ’Aß>āwGAxõ¼²ĮīåĖ‘ ō*•šš5=177ÕŁæeėĀĆ#ųāów±²²x.u<{ī2;v¦nŻtéR“c &'[®Éeddd±cēaLĶLų€Ņ vϜ½Ģą!ćHĄ×× ™IŁa°s×22жēwß}ŠĻ>ŲŻ·’¶|’ĢĻ\r‘‘ŃģŲy˜»@Ż’Ÿg÷īcŒüų;Ld2j×®ŽŌØģ–5ł/ō{÷0sĘXķwīĘņūļ[hŁ¢ķŪ7+³ś„gĘĢāāŠ2ļ6˜¼ŹCtOąÉ‡o¾M”c lmŸ¼|QqÅgØ(ņsAx¹©_ÅļÖį%÷Ź»{ö Tę2kĘ8Ž{Æ·Žž}ūŁŗķ ŽšÜ‚Żžż;Ó A-6Øõ\®_T’ž{ •JÅüy_3p@£ņgL©Ģ„fMOŽ]Ā%@• IDATó\®_ŽķŚ}€æ’ž•Ķ<ߏ<s’ó¬E"‘ˆ`·øtIΦ”d.š@7­”kō2X x5 -õąA.³ē¤0ķ»g^ƒ+±¹L?PŌaē‚ ‚P¶^Ł`7)I³v£æ½ē\“‚µhŽą… , £½—MŸß½T*•˜>‡åWEb’fh©Sæē\”¼śjb2Ź"uŌž\-Ņ9›7oNŻŗ…iŲæ?·nŻ*Ņł^<¹Ą4I« ¦¼rUļ¾k‰wõ’’“4Ī%]Qv£:įe`!S=ļ*‚Pˆrģ^¼xE‹×sįĀ5SČĶUį\Įžz~51¼?õżj0õ‡E„q÷^~ō ffš!Ģó~›ĢčĻ~ :ś>Af¬yø/[:•jÕ*óöĪ;¼ĘėąŸ»²÷NdIHģŃŚ{ļ=‹ŅźBV)„5Zж(ŖØÕ¢„±÷&vķ+""{'7¹¹ÉĶļ+—+7ÉEŌžĻóxļyæļ9ē=÷½7ļ÷|ĄĆØX~ū-ˆ#GĻ—Dnn.vvÖTÆ^÷t”ÖŠßā%kY·n7æĢū†æVog’$Ä'³léT6¬Qč=­[·›ÅKÖ2iŅ0ŌK×~óÖ=~łåOΜ½BbB2VVT©ZŽQ#ß7z½²Õjžüs+Ū·āŽ½HŅӕXŪXįēēI‡öMč×·#ryŃ/5_3‡Ó§/ń €ļ…©‰B/f79%%KÖq0ų$QćP*31·0£Œæ7:6ćŻw;!“ió¤]½z›ĻGNcŠ wP*3Y½z;÷Ā#鯫m‘q°†Ü\ ¦f¦…ŹEDD‹~ āä©K<ˆŠŽ‹ƒ£-•+šĮĄīŌ©ól ŽÅK7ųyĪ ._ŗAFF&ŽvŌ®U…ĆūćļļĄśõ{ųmqļ¾Ū‰÷t)ŠĒo‹ƒXæ~£¾H›6 ‹O„ŹfÉŅulß~ˆˆŃäååįåéF­ u¹:uź2¬ŲÄÅK×ILLÅŌT““= ¼ĶĮ}pssą£'ɝ»hÓö#½˜Żä”4ęĻ’‹Ć‡O—„R™‰µeŹxÓ­kKzõlƒD¢uŸ<{ö ćĘĻęƒŗÓēöęµ}ū!ęĪ[ÉÄ ŸśŻ5ś._ÕÅh’““ƇOжm#¾x†ļĮ“„†ŽeÉŅuœ>BtTR™'G{ŖW/Ļ'÷¢re}ėYBB2‹~ū›#GĪO¦2 KKsŹųŅ­kKz÷j«»ļ¢’õĻ„\¹ÉŖ•?2gīJöķ=N\\"..Žų—ńfČ w <ƒ*U6æ’±‰;EFF&6¶V”-ćCēĪĶéÕ³ R©”ŲŲś½ū%õėæÅäIĆōśx§ļ(ⓨžV]Œ>2Øčx¶lśU÷ż|™œųGÅÉSĘŌĒ vŻoĻž=9rd‘2]»v}•]€X“ŽAEJåęĀÜyi̟ēšÜ#łŚgr%Öź¹ÆŽDüģ„gƒ@š’Ģ”ģ^ŗJūƒH$Ō«WŚµ«¢ReŸÄÖ­ٲł;wžöĀ zņ¹s'‚v‘˜˜BoŖV D®ĻęĶūٰa/‹N¦k—DEÅqér(ļōELl<žžnT®€U1Évbć¹t9”Ō”Ēīz7nÜ”]‡AdddR»VźŌ®JJjWÆŽ¦s×”ČdR¬­ŠīW£Ń0཯8xš$NNö”õÅÉɞųų$._¾ÉįĆg>tš?–O{”uJOWŅ”Ć`nŽŗ‡»»3U«"“Ė“愄rōŲ9NŸ į×_&‘”äŅåP¦N]ČĆØXķ([ևR„\‹''Wćgj¢@­Īįųńó\øxÄÄ4 ŽŽv” ,M³futłDEÅŃŖĶG$%„R£F%š4©…L&%22–mۃٶ=˜•+~ e‹zFŻsLt<» ÅĶ͉źoUĄŚŹ’Ūa÷ł;h';wf×Ī%”ń÷¦~ż·ńł÷,]¶Ž ²»råĀĆźmšĘ~;ż'(åįBƒśoab¢ą^x$“&’‚‹³cłuėv3lÄTr9*ųč‡:[Ķ»,\ō7Akw±w÷2¼½Ż‹;;[Mē.C¹~=ŒjUĖŃøqMärIÉ©œ9Bpš)īߏāĖѐ––Į„Ė”ÄÄ$ģ/!!™K—CINłw]TÆ_£mūOP«sØ]« +”A£Ńń šµėv³ió~¶nY  )HHH¦U›ˆˆˆĀĖĖŖUĖ!•J‰‹KäĢ™:MHČM¾Ÿśy±cß½ū€3g®Š«×ē܏ˆ¢VĶŹ”/ļĻżūٵėūögӆł:/µ:‡½>ćŌ©Ėøŗ:R¶ŒvÄĘ&pöÜ<ɉ˜7÷k\\‰‹Kbć¦}zŹnllžÄÜ܌ū÷£ųaś(bž––Įö‡ØS»źæ¢čĢ™›j„T.ŚĢĖĻ4—‘‘•Õ›® šRœ;ó† ŒiCéŅĻ÷§æWÅnÄ[’£)łŲ_ąuÄĆJECļäW= @Po„²»dé:²³Õ¬ šCćĘ5õĪ] „EĖŲøqU*2q§|3a.‹—¬e钩–ÖÉļŪ»€Aƒ'±ió~‚ÖĢĘÕU_a˜6}1‰‰)ü¶č[B›Ļµk·ißq0S¦, Kēę,;»w-„j•ēWŗųi)ééJ~_6öķėŚ5 _ŒśÕk¶«ģīÜy„ƒOŅ„ssęϟ —Z©Ģ¤oæ/ٹó0gĪ„P³fį.€ł/ņ£F’ĄŖ?·ņēŹõ¤?’ŚĘĶ[÷ųšƒīLņ¹Ž‹sZZ={}®U¼>ķKłņžŗsQŃqĢüi żßķd”e,G­õ}ŒŠŠ£~þܻiPĪŻŻ™eK¦R£F%]ŪŖ?·ĢšÕ³hžTÜēłó×hŪžV®Ül“²›”œŹ€žłéĒ/õę¾qÓ>™Ģ¬Yæ³pĮ$ÜŻiŃ¢»w%$䦞Õ04ō.·n‡Ó¦MĆb³F9r†}ūOмYV¬˜”÷Yž9Bē®Cõä³²T|3a.ŽŽvģŚ±½óK–®ćėoęšĖÆņÓ_²tÉz½3’C‡N³wĻ2½ū:|Šė×Ćxļ½.üōƗz}eg«iŚģ=žŚ©SvK‚Y3ĒZ+q»ƒx§w;¾łzš õ¹dé:²²²Ł»giM±]»ŽšŽĄq¬Y³C§ģ.]¶žˆˆ(¾ł>cĒ|¤·&II)tź2”eĖ70th_<Ü]Š_£Ń`goĆęMó±°0×µ­ŻÅšSłż:ewŻśŻœ:u™wūuäǾŌóĄHMM§GĻĻų;h'C?ķK``iź7x‹uėvsļ^$¾¾„8wī*½zµaŊĶÜ»OŁ2>€ö¹ÉĶÕPæžŪϳ”ĻLHH6‡“I}7pļ„Ģ”ZµjXXXpāÄ ½v©TJ³fĶø{÷.aaa˜››S³fM\]]ÉĪĪ&,,Œ+W®č®±³³£F=z*UŖDXXĪĪĪܹs‡;wīčQ¦L|}} &7טä\†Č–¢ug.Ü#'7,Jå§žĻŗėk›Å°š,æčAŖźx}ž›²J>y+…Ld­žŸy#žZyyŗŃµK 4(ųrV„r & ‘‘1%2V^^ƒOR¹r@E B…2“nՀ›ö­§üóį )ŗGŽœ„|y=E“/ecĒ|Äź5Ū‹ķc’÷Õ'J-YX˜3xPoNüs“§.©ģlj. ‘Hųrō‡,DÖ֖ üŸ šČńō”ŻÖ­ź3 g£ĒQ«µ/ˆ·ĆīS³fe¾?˜ üq°·E£Ńpļ^$Akw±rÕŽ0†Nü½ ÷Ā"—ĖhڤV~ßz«£G ÄĮĮų¤.‰„1_~X@IļÖµ%3g.ēš‘3ŗ¶÷ta÷[æ[OŁŻ¶ż½z“)v¼#GĻšłgļų,kÖ¬L‹ęuٽ瘮ķÜłk$%§2ꋁ]€?čĪO?-ćä?‹æY@&“Ņ©c3śō.č’lb¢ R„²lßqˆ¼¼<£6.^įįqsu2čżŃ¼E]†{—Ą_]Ū‰0Q(ųü³īĖŽŽ–>ģĮ—c~āÄń ōčŃŚØ9|9ź=E gÖLœ8[·ĆumūüƒD"aÜWŸ5°±±ā£{0lÄTžłē"„iP_«ģžphU¤Ōš5Œi‹›ŪóÅŽ¾åžF×[ÜO1#>óx…ž y”²ÉĘÕJULį/@š’Ąń—jģm”F£!9%ō“ T*5éJ.]ŗA¶Z*»dJ#¤„ež®¤ĀŹŁÓxzŗŸ¤§ģVØPę…ĘĪĢĢ"--??OƒēŻŻŖC™™©īÅ÷iņē—ųü“EėźiaaVØu2m<ŠłĶēyÖ©j•@ÜܜX¾l …žcķģģ@͚•‘H%¬X±™Ķ›÷3šżn”ņp!''—%K×Ѿ]cÜŻ]ōó/GųLó°µ±ĀÅ„ ė0@™2ŽģŻw‚œœ\‚ķééĘĘMū™8aØNqپćv¶Ö“jUæŲńbcµīĄ„Kž,Jė)»ŃŃq”/ļgP^*•āīįBtt¼ĮóOÓ²E=Õ;=]Izŗ•*›ŌŌt’SŅ8s&µ:‡Ü\M±1ąÆž9y‘ µ»hŌ°nnN:%ÖD”`Ā7Cōä’qv¶/ąŸ·—öŁŽxźŁ.Šņ~S¤R)6¶V¤<į֏³³ĪΆ­sž^¾æńIĄc„õŌ©K¼Ó» µŠW®@¹r~ŲŪŪröģݹ“'/annĘ[oæü,šńń¹ģŁcLɰ€q„އ5kÖ0eŹ:wī̲eĖtķŻ»w'!!½{÷bggĒŖU«Ų½{7Ÿ}öŃŃŃČd25jĆ ˜1cļæ’¾īŚŖU«Ņ“iSNŸ>Mff&iiiüüóĻ”*UŠČH­÷‰££#Mš4aÜøq%t'›fõ§=;Ö­Ļ`ų0›ēE.ÕągÆÄĻž¹»ą_įPvćć“ųś›9ģŁ{L—“&…6aRI‘’Ņ“vAkw)«Ģԟ‹ģ瑐  ±²,¼’ƒƒ-¹9E»Ā%'§’•„ĀÕ½A‘r™™Ę$Œ)œōt%ęęf…ž·µ± C©’ū¬q‚¶¶V:÷ó¢čҹ+VlęĀ…ė |_ŪöĮĄīlŽr€ ē1aā<ärn®Nx”rÅĒǃśõŖÓ«g[£5;ūĀ_ ml­Ńh4$&&ćāāˆT*åŻ~™ńĆŽ9C³fu ‹ąŚµŪ¼7  &Fd—Ī& Ūäxz£!9Yūü~ōń`B”ż¦Ä=M^^sę®ä›ˆŠŠ+pޘ{ų`Ų°w9|Šį#¦Śß 7w'<Ü]šóó¢I“ZtīŌL§§§+±°(āŁ¶Õ>ŪJ„ń 𩩉Įv‰DBަϔä4bcpq+z3$óŃļ——;ŽŽī:‹­ZĆ„Ė” č߉DĀŪoUąĢY­nv¶š ÆS»vÕž/ƒuė•Fd`Vūž{ KKK½õ{’øø8\\\øsē'Ož¤{÷ī:eW"‘Š­[7Ö­[‡Z­¦Q£FŲŲŲ0zōh¢£µ›¹¹¹óēŸҹ³¾7ŹčŃ£9|ų°īxÕŖU̘1ƒ~żśń揦än;k?ƒÕ«W?÷żé“A«šĪڵ/¦ģ @šŗšF(»ļ Ē™3!ōčњzu«ccc‰©©)ęf&”)ėCŗļ”ŲXłā5*Ѷ˜,¹^,¤%…LV¼Ā•›[| üģl5fŒśb`‘r†,MĻ‚:[]čK&@®&?±”į—ü’ĘŁYk†HzTF“ÖšćĒVsōč9ĀĀīĆƇ±<ˆŒaĻžc¬[·›ć'.č’hGQ럿rłćÆ]ß>˜9k9ėÖļ”Y³:ŗz¶=t}Ķß(lŸŽĢ~ōüöķÓA—ŚĘŗ/ś-ˆé3S½Zy}ŅOOWdRÖÖŲŁŪ°hŃ߬߰ר¾^%¾œ=½ŽĆ‡Ļp/ü!Dł0†Č1lŁz€Õk¶rSgįĶV«1§š üu7y ϶*;{{[† ķ[¤\~z€õßfĶß;ˆ‹KäaT™™Y¼żvE@ū[é݀1r†Q©TŒ1Āą¹¬¬Ē’kÖ¬aęĢ™ŲŁŁ‘œœL͚5ńööf͚5ø¹¹”V«©S§uźčĒ÷ŪŪŪćčØļŃqūöm½ć¤¤$Ö®]˻ᆱSv»wļ΁xųš!ööö“hń84F„R±uėÖēøćĶ@cŠŠŻ ½™Ć„ĖjŖVy=6£@ x^^{e7""Š3gBčÖµ% ęO,p^[–ęy“~$ßŖąĖšaļ–XæĘo„KK/<Ķ}||NŽEǘZYZ ‘H^śü-,Ģu%ž ‘o…·±)Žõŗ(ęĢ]É“éæńóģqōėŪ”P¹¬,­„śI«ejj:‰„ęĶźHP•­¦s×”¬_懦ĀŹŖp‹z> I…žKKĖ@&“bgg­ksss¢eĖśģÜu„ōt%Ū·ćė[ŹčXi{{ķ3”µ4š8Æ?KK­LėVõiŪ¶‘QcÅʍ{±µµbĖę_ ZƒÕj£ §źų·³0?9®B.7Xę)=]Ió–Y¹j³Nٵ°0+ąEņ$łēŒ +xV¬¬,Q«sžéūŪ ž[¬^³S§.óČõ=?Q[·+’›«įĀ…kœæp]'’²¹~]Ķ•+Ņ—ä/¶Y’““Ćāŋ‹•[»v-³gϦcĒŽ¬ZµŠīŻ»Į±cŚ0kkkd23fĢ0x}TTT±c,^¼˜ćĒS­Z5īŽ½K‹-ųąmņ6Ö®]«“Ķ·:?;±Ą š²v µīV­b|>@ ^Gžŗ/‘ųGnœ…•I¹w/ņ™_øŸD£Ń·Ō¹ŗ:beeĮŻ»†3ž‚¶ž¬‹[}ΟæöÜćĀŌŌGG;BCļ<ēN„N”+ ??/”Ź,]¼ēӜ>}·śLœ4ļ…ęėććAff–A÷V€[7ļ{h,łµo޼[¤Ü±Gɜgßnßq0-[ŽĖ51QPµJ9ņņņˆŠ6|O£Tféj4?‰F£įüłkø¹:p«Šæ3™™Y,\ō7—CnҳGk£-«Ś—į7 ?Wƅéūū{Śr7…Q«N/Ė·3jü„„dœ u{¾uū¾Ž±Ć£˜ĀāĮ/_5j\xl}.‰Ķ¬ZµzŅļŻ/ ž³²² \9?RRŅI“ŃäćSŠøøDŅŅ [oŽŗ€‹Ė‹=Ū†šóó$>>I7—§Łą\ÜźóÓĢĒ®żõóćvO_ęܹ+ø¹9įłØ¤WõźJ„œ=w•“§.aeeAµjåK|ŽO³y‹1µ)C€§¬GLL  {÷ī€Öź¤ū˜˜HVVžžž’•-[¶Ų1Nœ8Į•+Wčßæ?;v$;;›Ķ›7¢×_͚5‹é­(Ž+±e«ŅˆÄ`@ ¼Ž¼öŹ®‡» ‰„C‡NPō’SҘ:m@±q¬Oc÷([!z퉄V-ėóĻɋ¬^³½€ūhxųC¶n;ˆ+¾XB*C“lQ°°–-ß ×®Tf2qŅ/FõѦuņņņ’õRSÓõĪee©X²tõźV”¹6y”įų») Ä.F>ŒeŽü?‘J„4jų"/uŠ“I-ll¬X¶|Ė–o( €ØT٬_懟f-G”Ó­ėćlØžžŽÜ½ū@/‰S>11 :…©© „<Œ·°Lœü‹Ž³˜——Ǣ߂ˆM „¤SM›ŌĀĖĖ9sWŠ£»q.Ģ-[j“Cż8sy«čÖm9zō¬^[͚•pp°eŃā ®\¹U æ-[žzõŖ5¾G)Wī…GP¶ss5¬X¹™k×n?:Ö~’üż¼P(älÜ“O§ę³qÓ>vģ<Œ±Ų>²ē'”{’ččxFł#ćæžŁØ¾üü½8s6„³gÆ8w÷ī퐋£Īŗß“I-rrrłnŹTŖģņæ-ĀD” ~½’·¶iÕµ:‡ń_’LF†ž÷*##“å~źÕ{üżuwwĘßߋ“'/ręģ 3h­Ļ„9uś2gĪ„P»V•%™Ųį#ʔ*^i+IÖ¬YCėÖ­iŠ žžž:f€ČČH,,,(]ŗtėʏϵkĘmn.^¼˜>}śŠ«W/6lŲ@F†ö÷J„RéJݹs‡šššbz*Šó@Ń^±±¹„†–LāF@ ž_yķŻ˜]]éŲ”)[·¤jµ.TŖ€••ńńI„„ÜÄŽŽwwēgvlŠą-~’c#2‘ļ¼`ogƈżéŲ”)ß|3„S§.ńłČé|7e~~^˜($%§z—¼¼c15kVÖYŖį­źčóN{Öü½ƒŖÕŗP¹rR‰„ȇ±DDDQ„r —C[KM fž8†ĮC&Ó¬Åūųś–ĀŻĶ™œÜ\¢£ć‰ˆˆĀĪ֚ÆĘ~bŌų~ŠÓ§/Ó¼å@ŖU+““=©)i„݉ &&·ŖWąü…k$'§é¼">žø ¬¦Q澔-냃½-÷ļ?$*:žFjpčŠi£ĘöńöĄÓӍcĒĻS©RG}:wīÜA£ŃP¹re†Ī޽ƹ[ē'ŖźŠ”C2D%Gp(ŗ’£Ē²(WNÄķ ąĶEöåč'æźI¼(mŚ6ÄŻĶ™,U6 ńÉ$%„biaN›6 ˜={R©3SZ·zœ}86.…BAėÖ °1WPš€€Ņ:Ėmf–ŠzõŖP+z÷n‡£ƒy ©)éd(3q°·”IćZLłvķŪ=®ƒ—„L&£u«ŗ,­Ę˜˜Bn®†¦Ķjćīī h»ž=Z£PČÉHĻ$99s sZ4ÆĖ¼9ć‘Ėåøø:źŹĮØÕ9¢’»ĘÕü »O£†5ų~źē(•YÄ'$“’’Ž»›={“aŽÜÆ uk½qćū÷’ĆČĻßÓK,d mZ7ĄĻĻ‹œœāć“ČÉÉ%0Š—qc?”[·–¤¦fмy\]š„}ūʘ››’™™EjZ:¹¹¹x{¹Ó±CSęĢOé§ŹREDDćą`G§ŽMõ\¬Ė—ó£v­*H$bcˆOHF*“R„J S¾N½ŗÕÉĪVS»V]ĢyćF5ń÷÷B.“‘©Ģ"K„¢J•@fLEżzÕIOϤYÓŚ:ķČČlm­iß®±Ž’L&„m›FäęębbŖ ##[:wjŽ*[ĶĶ›÷xų0–ĻF (v Ėų{Ó®m#ĢĢLP«sPff‘ž‘‰„„9mŪ4bҤ”thßD'ÆP(čÕ³ ĪĪöČd2TŖlTŁj\]iެ“' £WĻāė$.¢v‚WĄ±ćēÉĢĢ"..‘oæ[€\.ćģéuE–kGRr*£G’H\\"[·,xÕÓ<ŤÉÉ,\Tœ·Ķr^49•¹¹9ffEŸ”J%*Õć°333ĢĶĶIOOG­6ģękjjЧ§'r¹œČČHŅÓ‡ƒČår¬­­IMMՋ'wppĄĀĀ‚2eʰcǦM›Ę÷ß’B÷W4ęĄRŠŹŹlk+įĘ5OŒHō/ĮkÉkļĘ,¼®,^²–Ż»ŚøÉ%æ}+ŻB­¦nŻjtļŽźUOE`€3g©įżā ž233ÉĢ4¾Ö1h-ÆO–$2„J„ҹ>?MNNII³²wéŅEWĆ÷Š”CĢ™3ē™ęõģda@@”))yÜĖ!0@¼ ąĶDXv‚WDxųC"D#—ÉØ\9@WH xÓ ,IRrQ5Į“!Ą›óēÉŌŌ___²²²^0łŌ³ŠčZ¤Äļ˜hß^üöąĶDlē Æ||<^õ4‚•„M1Š.Ą]Ž$E“ÖąŠPćKk• †K’=IŲ5Z—g@ Ž<^ūŅC@ x}ø}ۘŗē_ś<ž¬łż4Ę}@ ¼žeW ’·ĆŒ©ķ*”Ż’!(ŗĘ¼qŸ‡@ Æ'BŁĮæĘƒE+_ZŠ·H Œ!(XžčIŒū<@ x=Ź®@ ž5ŅӋ‹×H|éóx…BĮڵkiҤI±²żõćĒł“*1Š^Ė“4c>@ ^O„²+(”ąąSlŻv„„äW=ĮSh4¶n;Č©S—_õT‚gĀ8e÷ŁŹ= ćʍcīܹzmR©”ž={āėė[ģõŻ»w§aƆ/iv/ƒ¢×R©ĢC£y³’ @­ŸÓkOv¶šK—Cyš śUOåµāڵۄ†Ž5xnā¤y|ōńnr^šźČÉĶ壏'0ļ—UÆz*Į3‘‘aŒbUtŪ”R„JŌØQ㹯733£mŪ¶%8£—MŃk™—gģg"Įk‡Zdó” ŠŒŒ”e«č×·?Ļ÷Ŗ§óŚŠė/°±¶äÄń5ĪÕØQ W7gģl­_ĮĢĮ›Hń–] Ś?K%K=š÷÷§B… ŲŪŪ3vģX‚‚‚ˆŠz#ܬY3Ś·o••¬Y³†°°0Żł>śˆˆˆöģŁĄ˜1cŲ±cŽŽŽ“hŃ'''"##łėÆæøwļžŽ¼½½éÕ«^^^˜™™‘œœĢŋ111᫯¾bųšįģßææ„ļ¼x+yzzÖāg^ oyŁłŹ®Å«žŠą’±i J•Ŗ8‰^FŻśõėÓ°aC¼½½111”gĻžė”Ż!C†ąļļϹsēĖåōéӇqćĘQ»vm®\¹ĄØQ£8tčNŁ>}:]ŗt!00ćĒcaaAŸ>}ųę›oØ[·./^ vķŚ:tˆøø8NŸ>J„ĀĖĖ‹aƆannĪ7ß|££d)>Ū²J%,»@ xóČC¢ŹWv_[vķ:Āķ°ū$&¦pķZæĢ’æŅ^“oߘ»w°}Ē!Z¶Ø‡•µ%Ū¶sļ^$MפmŪFØTŁģŁ{Œ›7ĆIJJA”ćčhG­šUØU«2‰D7ꖭ‰ŽŽcŠ'½ ¹Éž’««#eĖśŠŗULLęĮŃ£g¹If¦ [[+JÓŖe=ll¬ Č'§¤±{÷QīßHbb*fø¹9ѰĮŪ”/ļ_@>[­ęąĮS„„„’˜˜‚T*ÅĪΚ·ŽŖHćF5‘Ėe\øxcĒĪ Tf’››«[333S>žHūøsēaĀīDšįݱ°0׍£Re|č4—/ß %%™LŠ££=5kV¢njzkµgļqnŽ¼ĖŠOūrėö}öģ9Jdd,ĪĪųū{ŃŗU}½¾ó¹?ŠĆGĪv'„2k+ŹśŠ¢E=l‹z$ pīÜUNüsøøDT*566–”-ćCėÖ ±µ-øī‘cŁ·÷8QŃq$%§bcm…——͚ÖĘĖĖżńzg«łmq+””Q£šģŁsŒó®‘•„ĀŪŪoWāķ·+>Ó\FÅräČYn޼GZz6ÖVųū{ѼY]\] ^£ŃhŲ»÷8ēĪ_%-M‰³³=M×28v^^ĒO\ąüł«$$$“““‹ •+•„iÓŚ˜šščd9Ä˔|ųAw®_æCš”ÓDGĒ1xš;”ń÷ )9•NrėÖ=RRұ¶¶ĄŪۃ¦MjįééöL÷.ųo`QģÖŖPŅ ļȑ#m‚)___ź×ÆÆ;gjj €µµ5$$$ąééÉ„K—:t(C† )“o'''üżżINÖę7pqqįüłó|öŁg 8€~żśG¹råP*•ŗk›6mŹĮƒŁŗu+ŃŃ/# Ē“X I±2@ ¼nH@%—@ęė¼§»~Ć^¶mÖ_øx ÆЦMCŚ·oĢĶ[įL™ŗó®±’?ØTZżŽÖ֊¶mE·#×Öv477C„ŹF£ŃŗŪ5oV‡•+~@”Šz{Æł{ĒŽž#))•Ł?’Q`N¾lŽō+ŽŽvŗ¶~\ŹĻsVčś|;[kV®ų:uŖźŚNŗL’cHNIĄŅҜŒŒĒīhƒõę»oGčŽ<ˆ¦gļĻ ‹0øNÕŖ–cķŚ9ŲŁZsźŌe¦L]Ø;—ž®ŌŪŪŪź”Żuö°cĒaz÷j«SHoÜøCŸ¾£ˆ|kpœõßāĻU?źä7oŽĻ†{Q©Ō̜µ¼Ąż{{»³eóJyøčŚ.ś›)S“S°$†„„9KO”EóŗĒ’œœ\>4;<ļčhĒŹ?fP³fe]Ūśõ{ų|ät²ÕjŻxłė.—Ė˜žż¼÷^23UL™ŗ6­šĆKuĻŻ“|ōa¦}?²Ų¹¬^³1cfźĘ~óę~M·®-õŚ•ŹL:wZ QÕ?.eąūŻųaĘ(][¶ZĶ»żĒpčŠimŸ …®Ą×·›6Ī×}»÷cé²õ\»ʆ{użtéŅ‚2žŽģŽsŒį#¦’’^`¾ …œÆĒ āÓOūuļ‚’VV²b$$€/3IUa¬X±B§čŠ*øūö.gߎå|7yøžģއiŅø&ÖĶåŅ…ĶŒŽ€)Sžļ¾Įݰż„ß=@ōĆ£\ŗ°™¾}:pąąIvļ9Ŗ×W¶Z͟mćåÓø¶ŸØČ£?¶šöķzóžĪR påŹ-fĶžŗuŖ|`‘‡‰>ε+Ū™łÓŅŅ3’ĶĻzżžņ²TŁ,_ś="q7l?±ŃĒ9~l5 ¼Ķ¢ß‚øu;\'?fģLĀĀ"ųtHNżÄݰżD„süŲjśõķĄÅK7ų~Ś"ŗwk©[#{{[<=ŻtĒ×Ļ+r½‡ŸBTt<ć¾ś„sgÖó ā”×w²ßrŚ·o̱ćēłež_®[¼8ˆæNäöĶ=D?<Ź©‚诫-÷ļGńćKur÷ļGńŻ”_©\)€½{–ń ā±ŃĒ ½¾“æNB­Īa̘ŸŠœc>+VnfĒŽĆŌÆW½{–zcQ‘G¹|q Ó§}Ajj:C†~«SĄ322łrģOŲŁŪ°mĖB¢Õ}¶{÷,Ć×§“¾żE·Y’Ļī=ǰ±µāŠAķg{’ŽAÖžż3žžn,]¶ž‹—n;×Äľ7_ßRģŲ¶ˆˆš`b£s3t7,Ÿ†©© c暉Z­ŸOīų‰ ˜(Ų÷;Ńū÷?6ņĻɋ:ŁÕmēŠ”Óō變+—·ņ ā"vk/Ó¾IxųCę?ńÜę³uŪA†{—Ż»–pżźj¼]‘ŲŲ™„B”`Éā)œ?·‘‡ŽpåņV‚ÖĢĘŻŻ™o§,ąŅåP£>+Įć«ā“—AllĮM<•J…\^tZ‹øø‚µlÕj5 ÅcŸPµjU/^L’žżéٳ'Ɔ cŊÄÅÅqéŅ„æƒ˜yV&ssQ˜A o"yńRņ^oe×ĒǃŖU)WN»ƒīč`KÕ*T­ˆÆo)=Ł5*±rÅ4lXwwg¬¬“žtgĪ„ąīīĢąA½±“|ü’åīīĢēŸ ąÖ­pžęŪÉĆh×®1––ęČdRŹ–ńaīĻć155įāÅĒ ĪŁ³Ś8¬ńćQ±b…ŲÉɞż;Ó¾]TYŁäåimģ))鄮¼G½zÕ銔‰ĪP¶Œ}Ų€°Ū÷­»sš”STÆVžÉ“†Qŗ“'––ę˜ššP¶Œ³fŽÅĆŻ…={Žąģģ [#…BŽ™©‰īøbÅ2…®õ½{‘„„ܤ}»ĘŒüü=¼¼Ü1Q(°··„Jå@ž: ;[k¶n=XąŚ±c?¦[זŲŲX!•J)]Ś“Y3Ēbgk­§ žæpÜ\ £F ¤ZÕrŗ{···„G÷VōīÕ™\FffńŁZ7nڇ\.cńoßQ­j9ģķlÉ¤ø¹9ńįŻéŁ£ ÷ļGqżś@›™:##“īŻZR»v¤Rķ  L&„ZÕrōīŻ„2‹ČȽq,,Ģų}Ł4*TŠ~¶ff¦4iR‹±c>ąŅÅā•Ż+Wn’•„bŲ°~Ō¬YYēNlgkM»vŠæ3vv6ÄĒ'é]gjjĀo‹¾„råär™nģńćpņäćčÓg“Öß/Gˆ‹Ėc—hkkK>ś°īnĪÜzōL=Éˆįż™šĶŽŖ^GG;ĢĢLٶżJeć¾ś„ĪšįYʹ\†‹‹#M›Öfś“/ČĖĖcĒŽCÅŽ»ąæ…„•1ŠÕ«QvóƒKś:ę̙âE‹pqqaĈ̘1ƒ?ž˜«WÆŅ¢E 23_–%»hæq++ aŲĮ›H^^‚^oe÷YhŁ¢ž^Īo*ōšøøDRS ŗj6kZ»@›ĪĪ<Œzl!Ź¤z}=ĶŅ%SōŽmm­ˆ>^čœbõ“ņhN”7ī’›«”FJå„R)ƒõęĪ]Ć.ĪĘ”MāR½zyƒēĶĢL)_ޟÓg.“““«‹hڤVy^ŽīDÜœ U¦[«¤ņ³fŽ5z¾×Ƈįćび³ƒĮó]:7G.—!“łP³få"×=&&@ēZžO•u'Oāļē ÷,†T¦]«ĀjOš8”I‡hÆT©,NNöŚĖjŻ.“’Rtm ~Ä‚_'ģ_©Ģ$-=ƒŌ§ī  U«śŚņ7 }®•*–“$Į“ŲX£Y¹oγH©R„ęĉ$%%‘‘‘ń/īZäY›āÜŹ@ x=ɓHä ‰™/’yŅjū$99¹l޼ŸCGĪJ„"+SEZŗ’‡…ĦXYYl—ɤz;ż-[ŌĆŹŹ‚?ž†JĖāė[ J•rų”+ÕŖ—ĒĆŻEƏōt%AkwqņäE’’ÓP*3Qg«INIÓÕĪ#_”1¤ōä3dš;…ž3–“4ķĖYaė`ļ`Kn®†ō „^É"kėBÖJ*%ļ‰ēÆaĆ8:ŚńÅØ,[¾žŅ¾žxxøąé銇‡ U«”ĆŪŪŻ`_O’­V“ž®,ŅRݤI-š<„¬ÅĘ&š×źķ\¼tƒŒŒLŅÓ3P«sHJJ-“†³į{Ėßä0ĘZT³F%<=Żųö»_ Z» ??/ŌąE°³³£B… ōė׏mŪ¶accƒƒƒööö”-[–qćʱhŃ":tčPĀ#æŽeü VąM //ļ\B޽’†]×0ׯ‡±yĖZ4ÆĖŠ?fčāi󉊊+TŁ}|łqĘhŻqn®†˜ŲxnŻŌfŠž3w%Żŗµ"0Ą—mۃ ¹ÉĮļšķSI¶<©§ģš›k­…Yę@ė‚œ˜”J…ņžīŃXŹ)e­S*³H$XY>éf¾Ÿś¹īX£Ń›Čķ°ūüšć~’c#Ż»µ¤V­*…öaffŠD"!-½š5IJNåžż(¼<Żpp°å÷?6ĻϳĒŃÆoĮ—Ī…‹ž6Øģ–ī.L~ĀU9//ŲŲDīŻ‹dĪÜlŲø—Ī›Ó¦uƒgī[£Ń0懄”ņpaļže]»ƒÖī2ŗ?Sķ³°yÓ|ƒ.ÜAaųūĖ‘H zčóņ”ŻyóęįīīN«V­0`ćĒēśõėœ;wN/s>wīÜ!1ńqŹÕ«W¹’qlū¹sē &¶ŗwļžĪ«£vķŚŲŚŚDnn.iiiDFj÷™9‚ŸŸ½{÷.é[Řuō÷ń@ x3‘ ½'Ļ%ļž“,S’/9k×nąKč£9uļŽŹ`O—żń,„µžEGĒ:‡Q_žČ”C§¹¶æĄ}ęéĘīā¢Uņk"..KKsƒ®­Ę°dé:öģ=ĪāEßźźéJ„ڤRnnN¤ īĆ©S—¹zķv‘Ź®L&ÅŻĶ¹Č5 ŚÅÄIóXŗd :6Ó= Ż»µ4(eDģķóņwŠNÖoŲˬŸĘąć£}A•H$øŗ:āźźČg#pąąI®^½õ\Źn\\II)“iŻŽ ¢››«!&&AĻõ¼(ņŻī“’R *»ééJ&;ŸŠĖ0šżnĻ<_Į›‹……w79£rАņä@Q2ĻGZZƆ +Š^£F ƒņćʍÓ;īŃ£‡Žq­Z†ćÖ'Ož¬ū¾åxūöķģŚµ‹˜˜4 ęęę”-[–O?ż”;w>ĖmI@±eĖĖ®@ ŽL$yš»R‰D~÷UO¤$033 1Ńp‚ŸĀȏG 7ģͽķQ6ŁēĶŅ œœŹ‘#gørå–Įó÷%hŹW,YEóėž>‰F£aēNżŗ±eŹųąą`Ė®ŻG $OmB„Koąė[Ŗ@ü„™™ ÉÉiė’>MÅ e01Q°cĒ!²²T·†Ž%äŹMŖV ,¶ÆĀHOWräČ.ØY žæVFXŽk×®BxųCNüS0ö///#GĪP±‚6™’īYx"aV>™™Y8pŅø›xTYŁ9r†32w?ĶżūŚgįy­Øfzż<́ƒ’™™eōs^»¶v£aĶß; ž?|ų +WmįĮƒƒē’mĖē]b o’ŗJ«V­ˆåć?fƌ̟?Ÿ &ŠØQ#fĶšÅąĮƒ_ĀČ‹•( ”]@ ¼™Ø4Š»r—ڱq1'ŅćL:’§8;;`ccÅž’0|ÄTüż½±“4ēćzy]ķZU±²²`Ž/¢TfQ±BdrńńIģŻw‚óēÆE»GūvłmńZśōEē.ĶńńöĄĪΆŒ %—Cn²iÓ>\\iP’-@›åyśŒÅŒ;“7īāēēIž&Øč86o9 Ėp›?'…BΐĮ}ų~Ś"š5Ÿ¶māååŽL&åįĆX¶l=HRr*_|ń~¹łū{|Š>żFS³FeLM¼ŪÆ#öö¶dml¬č×·#æ’±‘-? I“Zxy¹‘••MDD[·D£ÉcŠ ēO†Õ¶MCfĪZĪGŸL k—ųś–ĀĮĮ„2“ė×ĆXæa/66V4o^·Ų¾† éƶķĮōķ7šĪšSŗ“'¶¶V$&¦pąąIĪž½BÓ¦µu‰Ÿš7«Ćśõ{xļżÆx·_G<=ŻČVe~’!k×ķÖY“Ó_ąY(Œę-źbaaĘČ/¦säČüü¼pvv 33‹[·ĀY»nff¦“kŪč¹ś·¶¶¤vķ*?qOM¤qćZX[[˜ĀŁóWټy?VV¤g(źÆuė”/ļϬŁpžĀuź×«Ž­­5YY*ĀĀ"Xæa¦¦&ōķSŅ1ˆ‚7ŚµL ..yYąåĘŅž›ü/ŽhOqnĢŽŽ2Jy7f@ ¼‘${zÖNK$’¼ŲčćW€āµ‡’cärsĻWćgébķķm‹Uvmm­XńĒ &NšĒ‚…kōĪłųx°lÉT†ö}×įg”V­*,[2•™³—óĒśeŽLLŌ«W©ß}¦‹½­\9€ŸgŬٿóÓĢezņU«²ātė>\oN#†æ‹B!gńāµ,YŗNļgg&Nų”O>īU`nßMĪ ˜‚ƒO| Š*2†”]€)SF`mmÉŖ?·²xÉZ½s„™9sĢs¹ŁęS®œ®ü‘é3óē_Ūō, …œoWbņäa:碨VµƞÅŌļ°@š™™Ņ³g¦M©kėÖµ%wīDšū›ųnŹ]»L&„aĆ|=~0Ÿ šųBĻBax–r%hĶĻLł~!ėÖļ&7÷±„]&“R­Zy&|3/Æā3Qʂł=ę'vģ<Ģę-tķöv6|5öc.]ŗĮž’(e…‚ ėę2ł»_پ=˜ƒõ­ŽÕ«•gҤ”3H š1ć‡ĀĆ!“T6žÓyC1\ŠīIŌ’w³R @šÆ‘G  ֍‰>¶H‚dŠ«Qɑ˜˜BLL<&&&ųū{”V琔ĢÄĀÜL3kˆųų$ā擐H„ŲŪYćāāh-ØyyyŲŲX‘‘‰:'§ŠųĘüš¼łņO’––All"éJl¬-ńšpĮŌŌ¤Š9=ŒŠ%)1S3ķt„f’SŅPČåĖĀÄÅ%Ÿ„T*ÅĮĮGG;¤Ri”cäßSäĆ4¹üż½Q(äŗū“±¶4x}žÜLL89Ł,ƒ£Tf’­ĪĮÖĘŹ`ęą““ 4š}:'Ož$,,ŒÖ­[G‹-ōśvuueęĢ™œ>}š°°0._¾Ģš5khŠ@æ [@@+V¬ąźÕ«Ü¾}›Ż»wÓ¬Y³¾·Ē”*+Õ«‡ČĄ,‚7ō±^«ŪŚĶÉSĖ%&ō¬½@ ¼LM%ōėkł…iÅH6¶QĻ=֍7ČĖĖ£qćĘܹs‡ŠŠPīŽ½‹¹¹9-Z“ ~żśœ?žM›6qüųqär9ÄÅŅիWŽ­­-ķŚµcĻž=“mŪ–½{÷bnnĪ‘#G077g͚5DDDąąą@§N¦I“&?~GGGŽ;FBB«WÆ&66???Ö¬YS‚.Ģļ+įģ,£cG”ģ ą%×,›Ćłz[ź±ŃĒO5’õ) ą?Ill.5jE‘•UTĶ]€ąūĖŃёųųxzöģÉśõėšóó#,,ŒU«V1`ĄlĒŽŁŗu+oæż6ēϟ׵K„RBBB „[·nōė׏•+WR”BBCCurr¹œ[·nqųšaŽ’}† Ęܹsńõõ%""B'׿V®\ÉčŃ£™5kÖ Ü]=`D±R“&Ś1ōSĆ5ā@ x8įāVæ~žž7/O²ėߟĻ“ µ»lĆ®]GŒ¾¦s—”T©ÖYÆ­vŻŽ¶įvŲżēžĖ€÷æ"°\Ūē¾žEٵėmZ+æ“rŚŲ†ųų¤W=Į½{ci¬Œ6~÷启üęS±bE¢¢¢ō]FĆŃ£G ŠÉݾ}[OŃČÉÉįĉ:¹€€®]»¦§člŻŗµfo¼[¬”½”÷X•Ąx@ ü"‘Hv?y¬Ÿ”Bš·›<&ž«3z˜÷Ė*¶m fŁŅļńö~±„)*U6É)id«sŒ¾&-=ƒ””t½¶””4’SŅČĶÕ<÷\222IN)Īšå‘­Ī!9% •JTæ*IŅӕtķ6ŒzõŖóķäįΧ‚RU¤# ŗˆ€H %$$!!}“MvēżcÉŹ²›° I–r¾’(3wļœĀ'sęŽ{.xÕVĻ=烷÷ÕÖH !„7.Ť–œģ†„œŪšq”°Ŗ ėʐp.™żŽ ĻæÖ“гkĒ"TT|¼eĻDaĶh4±’ĄĀ#Bģž?|h¾>ņ³#œ+*Ź…^==ł~~īUZC€Y•“Éd"55•×^{Ķīy½^oi—Ąųńćķ¶ĖĪ6æH4 h4¶%14 Z­ö"½øśĢœ€ ƒĖØ®Bˆ›ZbPXōŽĖX%»ŠŅӘr~ūP‡Wm\'1)…ŌŌ‹h… jžD„ŪŠ/vįĀEĪ%¦ąķåI͚øøüūąa2™ČŹ6?€ ČÉεŒ„z{yZµHJJ%==“"£OOwjՌD§+}›‡””4’Ī_@«ŃŽŸŸc%Z­†"£­Öö!Źd2qģųņó Š( !ł_µĻÓ§ÉČĢĘŻŻŚµ#qÕéJl›••Cbb †B¼¼<ØŽ«kéķϜIĀh2V ‡¾§=3²8{6 UEš5"K½oNŸIDÆ7æ¬ØF@€ŸŻ5 ŽŽž˜L&NĘ'›«'$8°°j(ŠõȈ^ŸO”?_oE!))•”Ōt|}¼ˆ¬ZźżÓėó9sö<łłxxøŠ—WÉū_ ‰?™@ž„Qš_›YÅńdg™g -?Æ.Z-ŽŽę)£Z“Iµūn(,äōéDņņĢ£]įĮŪŽe_ś·įćć…ŖŖœ:uެģ\ŖU <¬šŻ¾…°gņ$V­Ö“ž~µ™-CĄśJ')) ­VĖāŋmĪÅÄÄiig2™ģ¶kŪ¶-¤„„mÓ&44—ņnä¼Ąå7ģš<É?ł÷(„āf¦.RÅźAĀö7¬I]Œ†.Ł7ļ'f}ņ%q-Āšį}yīŁVĒ×’¶7¦Ī‘#ńVǽ¼<čūŌ#L™< WWēĪ%Ó¤©õg»<4Äņ’æüü-[Ü ˜×žN}żSN:gÕŽĆƝž=;3żõ‘ø»»YKH8ĻƏ¾ĄīŻ,Ē“Z thÉļæzÕd°Oߗٵėē·Z ƒ”ÉS>aé²udeYO{®_æ6oLA»vĶmśśćæ=ęŽ;e9ęććÅØ‘ż9¢æUŪƇO0iņ,¶ļŲg5…ŚŻŻ®]Z3ż‘VÉŃłó;ī]6lÜaÕ¾Y³FtéÜŖŌļx„}ęµ×>`ß_‡­Žk4ڶmĘ»3ĘZ%€II©Lœü1ėÖmĆ`(“śLƆ·óęōQ–æC€vąļĖĖ/ bĀď¬~¦‚‚ü™4ńś>õ°åŲä)ŸšŻaåÆ_0õõOłć÷ītÕéčŪ÷¦Oi•ō&œKfņ”Y¬_·Cįæ1ét.“nu?oNM:Q–ć99yL™ś ‹—¬µ™īĪ”ÉĆčöØy “)ӞƷߞl9æaćNnÆß0ßļĖgŠõ”!œO¾Ą±#k-mÓÓ3™4e+WnFÆ·žÖY’öZL›6‚ķ[XŽ=žÄ.fdńŃÆ2ö•÷¬~öżü¼ył„gś|/„øš€ Ęū1vœ#kČĒ€S•ρ £cĒŽ¬_’ob­ÕjłšĆ9{ö,‹-āĄŌ«W-Z°sēNK;WWW>żōSvļŽĶO?żÄž={3f ͚5c÷īŻ–vC† ”|“Ą(Ģ oéš4qå©>RY!ÄĶMU”EW³IvƒĆ£ćR“·Ÿ"«$Ŗ šs—ņŚų©Q#œ‘#śUŻ< ūlĀy–,YĖ„‰”sqaąĄĒ8rōƒžOpµ@ʍ}†5"Šj4$§¤±tŁ:¾üjīīnLš8_oF 7žų}óncŲņū÷čt.&z?õ2‡Ÿ }ū“mÓ OOwrrņ8zōK–®„wŸ—Łņū©Y3Ār'Ļšü ÓčžDGīææ!Ā’žwœļē/ē„—gPē¶(Z“øĒ*¶¾żĘŃčž;xēķ—šõńālĀyü°‚¹ó–čĒ«Æ<˜G˜{<9ŠųųyøŻNHHéiģūė0ĖŻD'G²uĖ|Ė(ģØŃoóėŠM4n܀ζ"0Š<"}üųi.\ĶóC§äOlLcڵi†Æ7C!s¾\Čm·EńP×6–%ōōxvīŚOLō}t| o/ņņņ9qā ‹—¬aĄĄWY·ęīŗ«®å3))i ō]»¶aÄš~čt.9Ļ÷ó—3eź'ŌŖIēcK¹ŖfżśzńƏ¹ģŻ{µõū:ą` p”Rbټy3æüņ «V­bĻž=œ>WWWš5kFHHĻ<ó K—.eļŽ½lŚ“‰øø8’’’ØS§õźÕ³Luvœ< ÜyՖĀ[o ŃČZ]!„7µ³!!Ń;ÆN£{»±qÓN&MŠæŸ“'½˜ Dżd’UūēžķAė¶żmFĆK²ą‡dfęšęōQ ÜÓźÜ3OwēÕ×>`ī¼eü¾y7ˆfėÖ?8|ų½{uå“Ymś‹‰¾GLēūłĖ™8įßļž›«gÖĒlīQÓ¦ ÷¬7ļs-CßB!Ä Ha¢(6v iLźWŖVy G9ŁéӉ¤¤¤1pąc6‰.@XX5š4¹›­[’@ÆĻĒĆƝŒŒ,jÕ²¼öņņąĒ`2]ķAĖZēc©_æ­[ßosN£ŃąļKJjŗĶ¹Gio•č{²ūƒ,^¼†æö.S²k2™ČĢŹ”fĶ›dą‰Ē;r{½šÜV§†Ķ¹ŗŁkÖ¬~$&„ZŽķŁsww7žģŃŁn =Ō–_–oäąßGi޼ū˜,{<Ńɦ­»»uėĄĒ³¾sčūOīn§/€Ž£™;o'Nœ„ćpšļ£<žŲvŪ?śh{FŒz‹æö’cuÜÓÓŻī5Ś_šžm/9ļ×ļQ›c!!AÜ}w=ž·Rėž=čo§=˜ļ߬OžĖĮƒGéÕ³ {’<„ŖŖtėÖĮīŚģĘ÷5 ZµNœiæ€Vxx0©eÜU£ŃŠØįķüśė&ŖłÓ°a}¢Ŗ‡LXX0~“nŻ“„kŚÅÓƍĀĖÖŗ¦„gāēēĶŽ¶#Չē’,ė…Ó.ż…„Ųß#22Ō±/$&„¢Ó¹X¦ń^é-I9æĶņēāJhļę抯))Ö/"‚‚ģŚrs7ģl“TR14w7W«µĀié™h4Ž?ĆI; jJźE«ŲĻ]ŗŸ”v~~Šś{E‰ēU\ŠŖZP€Żó†  ›—6ŽŽžųśŚSWWŁRJ”ĶŠē}Ų¹«€Õ«ŁbØ0˜‰£#¼7®.˜×+_——Āœ/‚ps»īßY !„×Hł½ZDō?öĪ”RRż”ė>Ł-„æ`󔞥_\…·{÷N8x”oæū™ømZµńóó¦Eó{˜2åEźÕ­épgĪ$Ń·ßXŽ=es®zõ0‚ƒķ'¾¾¶£ŃŽ—¶ƒ¹x1ĖįŠ}2k"#G½Åģ/~“:®ŃhØU+’īOtā„1ƒ¬F E±©*]’ĢŒ,’“ÓčŃst©ķŠ e\ś^^ö ¤ųūū:tŻā>üģŽ<Ś“““€Ē…Į.ēķķ‰įŠ„ĢŃ{QžĻdfda2™čŁ{L©ķŠļ_ńƒJHŲ+JN®ł^¹¹•<åŃŪŪ“¤ĖFłĮ\įYˆŠ¤(0ėć@žž;™³gŁ‹¼.ęéĢļPYkxKśögƒŲóŽ»Ō­SŽ*ĻB!čCUŌoJ:WāoĀ‚"Ķ"7ś>PņpŅu øxÓŠē{ѽūƒ„¶ «fłĢō7F2eņ0Īs.1…ÄsɜM8Ļ?’œdåŖĶ=všm[8œĄŒŸš!ĒŽŸaŹäa<Ōµ ~ųx{YŹG» ćĢ™$›Ļå^J0®TæĄRp¬*æXX½ź«RŪł]--a.(å;T¤Āžž ņ %¾“¢"łūiųņ‹ ļžB~¾#ĖJ"×wÓ•\•rż·°ćļž?ēCīņļT!Ä-!Õ`P––t²Äd7**ZŸœ7[Q”É•WÅš0 śśśpO£śvŪ9OrņTÕüĄ“yó :uŒ”vķźŌ®]ŻŖżøWŽćŪļ~&žT‚Ć£»[ćöҤÉ] ±ÆŻóŁ9¹v_(ašrZšy½š#ūā^ł¹mŪ’¤AƒŗŌ­S?ī¾»žåüŲ—ž¦ž]Ų°qG¹“]’_.¦g–xæ32³9°’|/Nļe›™a?IMµ³–¹$¾œ8y£Ńdwżź”CĒųōxśõ}”Q#ūćwiwN /TU%''ŸŖ{0ōš„ØČȝwŽfwŽ‚»vķĒõŅŽĢʼnxń,{zöCĘÅ,Ö­-ńÅÖUĻ2(ķåCvN.A%Ls¢¢5iāŹ×_1čé 92ĄKęõ» €Õ•[ÕFŽĻ2źÜك7^Æŗ—wB!„3) ŸEEE—øī©Ō=mTEłČ/­³Õ«[WŽ?öž]b›—ǽKÆ>/a2™÷wżō󳗒“+śµ—F‘‹ ­ŸŗL&EEE–óWŹĪĪåųń3vĻm»bu±Mæļ n]ŪBR„IKĻą¹Į“łį‡•vĻ{zŗ£Ó¹›ėČZ8ū4ØKbR* —Ö’^i͚­ōč9š›¬æĆŽŁmæuė_ū®õ0MģŽsĄīłrśt¢eDüöKU³÷īż_‰ķ Ō¬Yu;m5øÓ¼mĻåūń^nß¾Ćōč9š—ž‹·łŁ±ĆžżĖĻ/°{®ųe@”ƒ#Ā·×3?P’Q½:s&‰ää4«-š„Øl:zšÉĒA8øró¶D1€W„ÅUłšoQ–D7&ŚÆę!+ „BÜ"ōE&ćē„5(5Ł ‹Ie~ÅĘT±¼¼żĆ^|a/¾ŽV«Įh4Y®ß„KkÖ­‹£ØČhµx@’n|łÕ">żĢś‚ŸŸ7³?›jYļź(WWŸĢšČ°įošā„DīJļkĄčQŽUō“§Ul&Oz3æ¢ĻS¶Ū1»ŗź˜ńĪĖDE…ę‘ņĻ?›ĀóC§2ģEė}hŻÜ\yzŠĢWśÖ–Ų7`ŚŌįLós>=ŽöŚ:ļ¼óÕ«‡ęūų٧SxaŲ4^;Ó¦½‹‹–—Ę ¢}ū²½Tø·ŻŬYxyģLžl»J@£ŃšŅ˜A“lq/`^ć;gö4ś x•3æbĘLŪµ¾thÉóCl§„ų8Ÿ¾€ž^±KNг[ąĖÕUdz§ńģ³™8éc»q=÷lžx¼c™¾ļå²sr9}:±LÅ߄5ŅUUygF&ŖĆ;Ćƀ–Ą\ „²Ā«.ĄĆĄć@Éõģi|Ÿ+óæĘĻO]!„·ŒB“†®ÖȔߌ)ÉŪ甪Æ=¦ŹõēŸ‡ųsß!ĪŸæ€¢˜·©[·mZ7E§³ĪėUUåĻ?±ļÆĆ$'_ĄdRqsÓqēuˆ‰n\āÖ6iilÜø“3g“ČĖ˧]»ęÄĘ4¶œŪ°a'ć(,,ĀŪŪ“zukҾ}sŽ=ÅĮƒGy¬[|}½9zģ;wī§k—Öčõłü¶a‰‰)øøøP«V$:F[Öŗ[±āw²²sxŖĻƖckÖʑ’’F’~Z%0YY9l޲‡cĒN[¦,łÓ¬iC7n`)ģ°ž·ķ$%„2 æķ>»K—­ĆÅŅn¶·:žœœĘ–-{8uśłł¼¼<ØJ›6Ķ ²é'==“uė·qśt"F£‘ˆšč§‡;+VžN‹÷p{½ZvcøŅłóų}ónāć(*2āååADDmZ7µlŪt¹¬¬6nŚÅ±c§ÉĻ/ĄŻŻ•ČČPZÅ6±$åŖż“EQģīĶk2™ų~žÆDF†ŅįR‚¼sē~Ž;Åć=`™¹µė¶‘ššn³mffæoŽĶ±c§-{@‡†Ń*¶‰Ż=  ……l޼‡’żļ8ŁŁ¹øŗźš„ń} øæ”‘ś;÷sšļ£¤¦¦c4š˜4q(Š¢°ü׍äååÓ»WW«ö¹¹z6mŚÅ‘£ńäååćę¦#,,˜Ų˜ĘÜv[”UŪ•+7““›Gƞ]ģ^ū‡WāļēC—.ęѵ#GO±k×~«ū'DYĢ_ĖŲqéeżd!° XĪõU±Łhtģo_VšvķÜłæÆ«įå%‰®Bˆ[Ź×!a1ƒÆÖȔߎII;jiÓÅ\R!„pš5kō šę`•ę+­˜“ŽÄŠ ¬L܁¶˜·²æłÕōčīɬŃé$ŃBqK)4QT?,¬MüÕ:ü2łü¶/øjö,„BT¶={ <$Ä$‡Ź4—ą(ęÄw;`æb~ÅŅwa^GÜsĀ[Ž^4 /ńaÜXæ2īB!nŠŹģąš˜aµu“Óä䝔Šj< ų–;2!„¢‚¤§›>"ß6\릅ĄßĄAąĄ <£Ęöųw €ū(ļ(n±ą`-³? ¤uėņ%ŹB!Ä .[Ńė·Nr¤q™Ž §œß6ó&†B!„Ó©*|öy6oæ“įą^¼ŽČŽē€$ĢӝĻzĄ¶Ŗ¾¹~£;P óŽøį@PØn§}łÄĘø1ūó BCÆŪz‘B!D„RU^ y×ŃöeJvćć7¹{yøj•50!„¢²ģūĖĄøq9pŠPWĖż½+ę$WW©WóöVxeœƒŸó‘=t…BÜŹNffg6ØWÆ«½7Ļv•yµOJҶ(,.ėē„BˆŹd2©,Y’Ēä©\¼hrv8¢SGfĢ z¤d¹B!nm&x,,,ę—²|¦\„-RĻoūY5ļ“ „B\W6'cÆIDATRS¼1=ƒ%KóʱEŃõ”~}oæéO«V²6W!„V„„Å…B!„BÜ".Ŗ˜ī mu²"ŗÓTD'įį-O©ŠŚpr}K!„B!„7&µoE%ŗPÉ.@hhģzUeBEö)„B!„āę¦(Œ ]]”}VdgÅR’ć>EU^¬Œ¾…B!„BÜē¼Ļį¾ół|ŽØŹ=xnaa$x+„boQ&x "<Qpe¢3DĮX°c€ƒMDDDDDDDĻirY€˜ )"($ H1Fdwerį^VAžzõ^Č7lŠĻĮŠ<Ķbc#,M…‚f¢ ¶!“Š}ĮĶŠ±éNŒ!\€K€xI&  E³+ķr ŁÓŠI7=$%…zˆrY 1ŪB&†Ž‹ˆˆˆˆˆˆˆØ‹®ĖD12!T®P„¹»]1tPO &Ż“HæwŚ”ŠTčAč  CĒDDDDDDDDd0BÄQˆĀaó‚c/¤:¤šŠI·G$&†7„B1š`d蘈ˆˆˆˆˆˆˆj 9Dü D”)v»ŗv¾mč€j&ݤƆ֑ĖdCÅH@Ÿ""""""""½ˆ®Bw FFŪ]\:Ž0t<†öÜ&—nÜ8dfgm?H“E=š?DDDDDDDDUJ"ą‡¢bӟž×b Ļ]¢)>>¼… ˜ ˆćŲ:"""""""¢g–€4ˆų©X×=oEž›¤[bbhĀGść9ŗo"""""""¢šA  ~ęģ"‚hčhŖŪ3|Å“¤ų‚±š€†Ž‡ˆˆˆˆˆˆˆˆÄ‹¢ [įāR°C^:šźņL&ŻDQ”%şAü@#CĒCDDDDDDDD*ī ‚°ÜŁ„ąĒg1łöL%ŻDQ”%'†ĀhlčxˆˆˆˆˆˆˆˆØB׹cg׀]‚ ( LUyf’nIqį]EA\ µ”c!""""""""= ųÅx×Å#š/C‡Ržś¤[JĢ©Ś ™ń'¢€qxī‡ˆˆˆˆˆˆˆč9¢€|ŗ›[×;†äq<µIŖ7™ŁZŪĪa&sCĒCDDDDDDDDU&OÄO“>š5+4t0•ńT&ŻĀ b½±©”c!"""""""¢jsC“k¹w>ič@ōõT%ŻRRž¶U* ˜@fčxˆˆˆˆˆˆˆˆØŚ)|+‰skÕ Ź2t0ŗzj’nńń”e~ŠĄŠ±Ńw2q¼‹KPØ”ŃEOŗ‰āŸĘ‰ń¦óó:""""""""29¬Øåb6_Ś:mjtŅ-!įt}™h“C„čočXˆˆˆˆˆˆˆˆØĘ/ecŻŻ;Ż5t šŌŲ¤[b\苐 ?A„ƒ”c!"""""""¢šER!/»ŗ1t,źŌøb¢( ‰qaA0įFDDDDDDDDꀣ Šæ'&„}*ŠbĖqÕØ‘n))ŪļŠßбŃÓAöˌÄq5©ŗiIŗ%'‡{*äb€Ö†Ž…ˆˆˆˆˆˆˆˆž:—ŒāG ū†Ø!I·„„æ[ (>^†Ž…ˆˆˆˆˆˆˆˆžZq‚B6 –G§ ˆĮē»&ŅõÄā0&܈ˆˆˆˆˆˆˆč1¹‹2ÅɄ„š>†Ä I·ÄųŠ—DūX2""""""""zfŲ@÷'ʅ4dKŗ%%„Ž„Ÿ˜*""""""""zö€)qgb\Ų«†ŠĮ I·„„Š©¢(l`lˆėŃ3Ļ6&ʇæcˆ‹?ńB ‰qįoC×<éė>ķrrņpļ^ ŠäÅČĖĶGaa!:uję-‰ˆˆˆˆˆˆˆ“Eo»ŗ®}’}¢I·ÄøŠW ?¢pP§{ωxų Š”CKü“ķó*;÷±?ĀńöŪ‹„ķ Īmńć†O*ģ÷ėž£Xæ~Ī_ˆR9}ż0ģķlŖ,FŅOŪö#•™ ˜>}<žļķ±ŽčéqöģEŒŸš”“½?ų;ųųŌWi÷Ҙ÷pžß«ŅöęĶĖŠ©Ķ‰‘žNĖ–ÆĆęĶū¤ķwߝˆ7§Ž6`DDDDDDTCˆ€ų†‹[ŠĘ'uĮ'6L*!!l8Dl@ Mø@ff6Ņ3²ŁŁ¹Uzī¢Ā"éÜ@ÉȵŠ,Zü-¾ūnG•ĘAU'33 %I·¼¼Gót‘+}Š‹jŪegē*µ“É«=6zŗåē(½gņółŁ$"""""€ėćC³]܂~y|"I·¤ø°ž¢ˆOźzĻ‚ ’]ĆŚµ;•öYX˜£Nw˜›™Œd56ID•päh¾ü²ģ.æZcc#FDDDDDDōL1!lMHOwu 8RŻ«ö$XRģ?QPü V)ÕĖoĮĒ!Š"@|¼h^8f’Køѳ'55’]¼.m—ž """""¢Ŗ!¦Å݉‰a]\\/TēµŖ5閜ī©(VC„uu^ēišā‹]‘¦sū«WoJ»vm©S^ŖŽ°ˆj“ƒ¾7tō”Yüńt,žxŗ”Ć """"¢šĶ L‰9ÕŃÉ³ėƒźŗHµĶOLJ µQČŃįU]×x–„¦dH›ś60`$DDDDDDDDĻb#ćC©©vÕujIŗ‰¢(‹…ZUĒłŸå’ę”R"""""""¢*×¼ø°`‹(ŠBuœ¼Z¦—&ʇ/ōƎs?­ ¾-W‰“k×öhŁ¢‰“½aćÆČĖĖ—¶SÓŹFŗ;w ߬łI圓ß„1!—‹3_ĄŁ³‘””Š“ōLäęęĆŚŚöv6pp°E“&õč//7½ļēĀךļæWpõź-¤§g!#3 ¢˜™šĄĀµj9 iӆčŃ£#<Ü]4Ęøió^i»~½Śčßæ«Ī1\ŗ“§ž‘¶{÷B“ĘŽjŪŹåÅ ū—.GćŚõ;ČÉÉEVVI…ZKKs˜›™ĀĖĖ -[6Aīacc„sśČĻ/Ą?’\Äßg’C\\Ņҳ KKsŲŪŁĄŽŽ ÖE`€4Ø]įł‚÷ŸĄżū±Ņv÷:¢Y³†UwZz&N:‡«WoāŽ½Xäęę!/æ`ogS34n䍶m›!0  dUTä#2ņ ĀϜćĶ©£uźwūöœÄµk·‘žž…“ōLˆ¢{;ŲŁŪĄĶÕ­[ł 0Я¤vDÄeœł»dšæ——†é (,*Āɓ’ąßÆ"śĘ]dfę@&`gkśõk£]»ęčÖµLLŌ’š½w/ūœPŚwįĀ5„ķoæŪ##åēR&“įķ·^ÖéyxŌõč»8z4TŚ7nģm5¶/*’ćūu?+ķsvvĄ˜Ńڽ߸y‡Ÿ–¶Ē¾<ŽŽź’x”––?ž8ƒ+WoāįĆäęę”°H3SŲŚZĆĮĮ­Zł }»ęØ_æāĻÄƇńŲ÷ŪŅöĖcĄÉɾĀ~DDDDDō|ĮI a³,«źsWyŅ-!!“— b^UŸ÷i§PˆX²t­“mii””t[ńÕ&¤¤¤«ķö/BĆžUŁ?~ü`•„Arr>’r#¶o?€¢"y…q ‚€  ¶Xøą-„x49r4 Ÿ,ū׮ݮ°-P’ čŻ+Ė–½/OW„cÖÖ–Ų»ļ®\)YæĪŽĪ½zĄŌT·šk¾Ż.}¹666ĀK£ś©“Ek×īÄŚu?#!!E§óš››aĀųĮ˜3{2,--tźS‘¬¬|żĶ6ü°~·RrU?榘7÷Mśil³óēƒ8qāoiŪŽŽ¶J“nii˜æšGAA”N}<Ü]0wĪŒŁ÷±Æö/>YV²®›……y…I·S§Īįć%ßāņå:ßÖÖÆNŠ÷Ž sµmN‡Fbł§?üż[bčžŲ»ļ.ś¦Ā÷”»{-|¼h† ī”rģę­ūJæŌY¶|Ź>cc£J'Ż(]ÓŪŪ¼ ±ķÕØ[*1ZX˜cÄš>“‰°gĻQ|µr³Ō~Šš5)““Ó°lł:üüĖ!ČåÅ:ÅŠ© ęĢžŒZjlsēnŒRĢ=ŗwdŅˆˆˆˆˆ* ,IŒ =ļāō{UžµJ§—&$œ®/@ų€QUž—t}ć.:w‡Ķ›÷é”pJ’R§OG ß‹“ń[šq­mW®Ś‚ Æ|¤sĀ (įwųH(ŗvž¹Ør|ĀųĮŅćōŒ,;®Óy qģ²¶]ŗ“‡‹‹“R›āb^™8 ‹«sĀ (öĆś]čŁk’^ż4‰‹KB^Æbõ×ŪtNøĄæ’^ň‘ļą‡õ»;†Źøsē!zō|»vż®sĀ bćńö“%˜6}) E5FØģó/6`äK3tNø@ff6V½ /˜‚ŌԌ Ūēåąėo¶aꛋtzoÄÅ%aņ”ų~Ż/:ĒT7Ŗ«ō99{Võ3Y^DÄe•}yyłøR®Š‹:’żŸōøC‡05QN¤ĒĒ'ćÅSšÓö:'Ü üĢy >­ĀßUDDDDDDz’A¶ÅƆխʓVŁH7QüÓ8)A¶€CUóyŅ·O4ŻžßQ„}y£{wŌ©ć[+˜[˜!== ŁY9%ÓĖŽ„Jńdeå`Ņėózz;ģķl¤s Ö/ž¹¹%ÉØ]æÖiŠéŸ'’AvvŁó5rD•6+WmĮį#eSéd2:“oNZĆŻ­ll­ ²²ršš+WnāČŃP)ĮtóÖ}¼łÖ"ģŻóM…ńhRT$ĒKcŽĆŻ»1Ņ>kkKōź€V­|ąR˦f% ‰ää4DGßƱ?ĀńąA€’¤å‚…ß UKųūkŻSՊŠäxó­ń0&AŚgeež=:”Y³Fpt“ƒ½½ ņó •‹ÄÄ„…ŸWJ¬ž²ėw“lŁo¼>²Śćݱ3_®Ų¤“ĻÆMS“Ażśµak[2]8/ÆĘ#"ā2NžśÅÅ%IĮ+Wnbƻ˰uĖgZÆsćę=,[^2źĶĘĘ ½{¢mŪfpt“ƒL&CzZ&.]ŽVślĄĒ‹× {w4nä-ķsuqĀ Ż•Ī’ąAĪ_ˆ’¶ č™ ü·‘G§›źC“‘Fˆ–OŽ©Y–t«_æ6nß~šæżWŠŗ•Ś>……Eų÷üUi;(°­ŅqQńŚó”>Ķ›7Bīįåå{{[ŲŁZ£ °™Yøq³ä3Q:"¶ØHŽf~ŽĄ€6ØUĖQ»'"""""ŅŹÉX&nÅ]]a”ز¤[R‚éB«ź|Ļ›•_ĶVŚźXžÉ{°³³ÖŲē“„3šĆś]ųxń·P(P(XóķOš÷’\„­•„…RÓLĒ©¹9ņ§Rā$ S¬’aq…IŽæž:‡×ޘ‡ŒŒlĄW+7ć• Ctž2\¹¹yŅōOØUĖ?¬[ŒĄ€6ZūŻŗõ_…ėŃw‡„āzō]ėF*öīˆÕ«ęhœ¶ø4/ó|­Ū‚”Œŗ\æa7¾ųl¦Ō¦yóFŲ°~‰Ræ?ÄłeI·uk?Ö:³2ż¤¤Ū•«7 kkKµmĻ•é6ł‘˜5ū+%#ą^›4\mŸ ¢” Į<śŁ9wīĪ»$möéūxuā0­1Ļ™=߯ū ~  d„āžjŒˆˆˆˆˆØr„ĄäD¹WÅŁŖdziBĀ™@³+lHÕB”P`Óę}Ņö°”½šń¢iZn`jb‚łóŽDŸŽŅ¾_=¢2Żėڵ۸xéŗ“=uŹč n@ÉŚh_­˜…¦MĖÖŪąO•v姘!8ų„J›ņ ‹ŠpäHŁ"ķśwS¹×G× [¹bV… 7pssʏ?Q:ߣ‹Żėcć¦=ŅćN[ćŪoękMø%IĶ7§ŽĘ„ eĻĖĒĻ 99Mõü–"śśaég”šuķ*c×īĆŅc''{üøńFuéŅ‹?ž.m§¤¤#<ü|•ĤÉĮƒ§¤©ž2™ ›\VaĀ 4ØĶ›>UšśųóĻ+ģ׬YClܰTė:aęųāó™hÓŚWŚwśtd…ē~Ź'ĮŠ‹J °ņ’’Rqļ^I‘/OWō±›t,"RuŚi©æĻ–ž³¶¶D«GFĝ-{:ul]aĀ­ŌŌ)/)ų½v]÷iīDDDDDDŗEa~BBX§Ŗ8×c'ŻRRž¶DÅOą:nsńR4ŅŹU;>mœ^żĖéĶĪĪÅĶ›÷”ŽŸ˜Ÿ_S4oŽHŚŽ½ēˆÖsž>)¤ vĮžæžŠ×®ķŽ>}‚tŽŁĆŻŻ»ūKŪ’»®„µf )ø~żŽ“=mŚ8‚īUˆ'•{]Š‹øx±rqč«“Ņk©įĆzk¬<©ĪŠ!=aiY–“üƚć>uŗģµīčß ķ۷йoƒµŃµk{iūæ’®ii]āé*¬x ”|V†ļ-mß½#Mg5¤śõk+U>«f­E d i©¶m›ĮÕÕ µk»(©¼š””Ŗ¶_ł)«ż[ĮŲXłŸ†ŲŲD„óź£Qòåā“õźKDDDDD¤#cAĶÄÄ?µ˜ŃĮc'Ż…ÅŸš~ÜóPåżw”,Q`gg­4²LķŚ5WھuKiūz¹%MšŌƒ§‡ ōįÓ¤žōøøX$5#¶&Œ+Õqwī<Ōx¾²Ńrž.jG5•ŸŅŁż½’]%1—Ø‰Æä—ū ’]SZÆSĒÖśÅąS_iڟ>,ĒŻ{1J‰Ńī/ųki­ŹÜÜ ŽŽ^Ņv||’–֏ļĀł²é˜:é÷ʉŸGßūźtėÖAēs—ÆŲ«P(™•­„õ“T6ŚMÓŗnJI·’ßķŹ=Wå“r„Š‹ų§ÜČ9uÓ²e2Y¹öś-“°qĆR$ʇ!1>¬Āõ÷ˆˆˆˆˆˆC(L?yܓ<ÖbAńń”E`ŹćAēaL¼ōŲÓÓMļž¶¶Ö°³³–F•/Ę7nŽ—7lØZd”"-Z4ʗ_|Xv=+•6Ƈ÷Ę¢Åk››Qńėž#˜łĮk*ķäņbü~ųt¹~}”¾Ä%_üļÜ-KŚ5PS¢"tƒ»{-€¹£šŌ‰)÷ŗ8ŲŪĀŹŹBļsxy¹IÉ6uÉŹźpó†ņHdž õ/Ž2{Öd$$”$+5ŖŅā/*”ß’®ZZŖW>1–––‰āb…ĘbęęfJkčUÄŹJy­4¹ŽU…«[P v’o ńæēÆ¢°ØH„ĀhłŹ„„ɶvķšKėĮ‹øŒ¾};+õ‰Šŗ…Ģ̲Äb`rš(—“?r4 ¼? 6j~'Ų’%$„’āź^ŁT:évćĘ!3²€X%ėĀQ啉åč`+­Ć¤ss3)éV~ź&„/ўś'5œ”ÖmSĒĘĘ C‡ōÄö%~Żs¼?Ie„Ś™3ē‘šZ6•VŻŌҜœ\„ué<=õ™M›6Ō{Äą£J×J÷ÆĢėR~żņÆCuŹxä:zŽl “N`uŹĢĢ–*ß%әõ}žóņŹżEYŁ9kööŗ'Üj²ņ#Šņó šß…kJÓråņb\ųÆd”©© Z¶l@yT ŗ‘nå×s³·³AófTŚōé(¾ø}ūŚūÄĄ/ EóĘØ[ĒīµPŪĖ­Ā5)‰ˆˆˆˆˆŖ™Lō7njŻØŃ‹7WU餛­µķ\bÓŹö§ŖS¾R`hŲæhļÆūškź”Vh,•››'=¶°0{¬sk3~ü`)évēĪCDD\VYŸė@¹Ŗ„­Z6Q[i²|€Į¾¼—]¢oÜ}ü×%æRŸq½•½MMLTÖäŖIņyN¦æóŲ£‘—›Æ1éfl\µ•D „vmwŌ©ćŽū÷攬ėVž³v5ź¦ō9j޼‘T}¶yóF033EAA!Ī_ˆ‚\^¬ōžPZĻ­Skµ#›6mˆ1£ūc璊V¤¦f`Ė–ßTŚŁŪŁĄŻĆ^ž®šštAĆuą×¦)ZµöQ•GDDDDDTM|ģmķ?°¤2+5J->žT=AfV¦/U½‚Ā¢*=ߣė,• dn^}I7æ6MŃ¢Eciūт …‡ż%m«åØ& «3fm ŖöuyRS•^ļjL²V…ĀjxNō]gģi y]7å©„ek>šš˜HÕHóņņq5ź¦Ræņ#ŻŌ­ēVjŗįķ·^֚ø°ŠGźŖü“ÖŚ^nUžŗT—ņļ'C=wŗztźšŒw& K—öŠęéR¾‚iZz&®_æ#%ÜÕQ¶żŹ¶#"Æ`Ņ«Ć(rst“SIŽ«ćą`‡žż»¢?ŗŖĖČČFll<ŒĒĶ›÷ö/ŽŸų …¢(bĮĀÆŃ’Å®JėU“щ±”ß¹x®øi½¾­ˆ¢(KŠ’JæøØŗY–K<ä<²žYU(_u35-CKKõäņb¬ż~§“żbæ®hŠ ¶Ś¶„~Ś~°ė×Ćčׯ DQÄĮƒ§¤v𦖖ī\12-U’˜>Œ—Ŗ4Ąk“†+%uQ>yU~“š®üóWXX„œœ<½+Æžõ×9üwń:ĄĶÕYėėõ8¬yMrržžēŁŠ<Ü]Pæ~mܾż@IŅĢ×·’“Óp÷n ĄÅÅ µk»+õk×®l$młä\ł)Ŗ~*EPōegWRUŁ×·z÷ Ä[oŽĮ®]æć’¦/P2ā-2ņ :vlõX×!"""""҉LųJEAtž¦WŅ-91l ”ž‘Qu*’„8GƔ¬Šū#\Z ­aƒ:J•;ėÖõĄ…’®>ˆ×ūÜYX²t­“ķē×LcŅ ()ØPšt;v,éYøuó>bć¶¶ÖčŪ'HcSSø»×B\\RIĢ1 zĒ|éR“³ ˜2å%½ĻQŪĖMzœS¹×åth$Ņž—čōņtƒŸ_õO1­SG9Éņ0&AmĮ m~Żs?’rгG§jKŗ™ššĄÅÅIšÖØiJ¢6qqI8qIŚīÕ3๩œč'%ŻĪž½ˆW'Ó:µÜܜįå銇1 ø{7ÉÉipvvĄ™æ/”7HżŌŅÜÜ<¬ųj³“żŹ„!*ļ7m źŽé3–IӞo޺ϤQČ(0ĘĆ̚½Ž+=_œ,äp³~2EĈˆōŠ.)>l€]ŗvŠ9é&Š»Œ’…ł• ‹ŖUł„Čõč;*+"Š"^c¾”t[²xŗRŅ­I“śJ.Œ¼¢“ö“.īŻ‹UŚvqqŌŚ¾Mk_“lŃ/]Gaa‚ƒćĪ’FŽĄĄŻ*,ŽŠ¤I=)évīÜ%­mÕ¹[.f{{ŪJUKlāS_zœ‚””t89é·ŽŲ3?Ē;o½9ę‰$ݚ4ö†L&“’üsQļ¤ŪŻrƗ««SU†§¢Ico)év%źō­{üÄßxļżOFF2Ü»SséÆī5õż°u[0€²‘jڦ–JūŪ5—’Ł‘WŠŖe„Ļy@€ś¤›L&Ć7k~’¶żż[ź•t377ƒ­Ņ3²ØM!""ż¤ä™ąēĖ®ˆŒµ…\|¼ŹDUIąėœƒ”¾‰hāT¹?^Ua‰(ž¹W^Šiķ-3'Ińž ¢Iå£źŅ¦MS•¼”99y9xRÆž—/ßPśņźÓ¤¾Ņńņ_¼ÓŅ3qōh˜^ē?r4Tzlkk ŻøQ« IDATļŗžö?~ōx÷ÆGņ§“=jTæ ū—łÆÓˆ‰MŌ5\ĄŃr1·lŁXKKĶ|šŌƒ€’Äę/»~׫RRŖR"£I“z•ŠC_––šõ-{ģŚ­_ÜÉÉių÷üUi»|EŚźŠ¾} éqšoč½]ł¤l=o/„BOš±‘r²<·š“Jm¤i ±q‰xš ‘‘eI7u#ŻŻyYi=7'4n¤¾°¹¹ģm„ķņÉY]dgēJ 7pw«„W""Rvų¦3ĪĘŲ1įF5Žąj²VŸ­ƒÜ"Ż’ŲODTķ4NL4­ks~ƒ‰b„ Ģ«|TT\]Š¹s;i{ŽüÕø~żŽN}åņb|śŁziŪĪĪ:µVjÓ¹s;„ŃJsę®ŌłĖņåĖ7šĆś²‘—ŻŗvŠiįóįĆzKėˆżóĻEÜæ d*mG’Ч“ŽGJ&bśō„:Æ÷õĖ®ß~^ŚīŁ£“NżeffЁ^¶æ\ń£ŅŗWڈ¢ˆeĖ×I#ŒŌʱ~Ćn|0óséēģŁ‹•ŠõQ#‡÷‘Ÿ={«æŽ¦S?¹¼ĶZ””ųźÕ3 JbŅdųšŽŅć˜ŲD¼ūž§Ė‹uź{õźMģŻwLŚīŪ·s•ǧŅ$m©ŹŒŅŌĒ£ ²°šó8! @É{®u+µżŚµU^×My=·6Z×skŁŖģo7ė~Ų…¤¤TćݰńW„mmÓŌ‰ˆH»Āb§ļŪ: "­² p+Õ²ā†DDO b”(ž©ÓĢQ%ÅŒ…€ś·|vÜ»£“™¾¬¬,šŽ»«.  Ģxgžś+ …‰‰)čŃóUŒÕ={tBĖV>°·³µµ% ‘žž…ōōLœæ…Ķ›÷)J7vŹH##ޜ:‹>^ dÆ½^ÅųqƒšB74nģ ++ ˜™™"++YY9ø?ĒOœĮÖmĮČż_qA0eņ(īĒŚŚƆö¶Ÿö+ķ9¢N “ׯ_żśuĮ”C%ÅN‡F¢s×q˜ōź0ųwh ooOXYY@QsvnŽø‡ß‚#xŁōBGG;FÖiņÖ[c°wß1äē ;;C†żźŽ¾};ĆÆMS88ŲĀÖÖ…EEČHĻBZz&®\¹‰Ÿ¶ĄéÓŅy ģŽZµT§å?ń7Nœų[ŚnÕŹžž-+o©Ń£ūcĶw;œœųdŁ÷8yņ,ƌī-ĆŻĆ––ęČĶĶGvVŅÓ³JŽO[öįŅ„hé<żūwUYˆæŖ5jXƒvĒž%ÆŪīŻ‡ńĻ?ńź+CŃ”CKŌÆ_66V011Fff622²“ˆž7ķEAA!€’$éø±«5֊<:šqŚōOšĪōńčŌ©5ģ`nn†üüé}SŪāzō]Ą¦M{„Ļ«ÆoÅCZ“h 33Sāü…(é}Rr>õSKK½4źEœ:ušąA:w‡ńć”[74lPGe:rRR*.^ŠĘ®]æć·ąćŅ~_ß:UH%""õ2ņM[¤ūr$D†’UČJåDTć4LL4 ĀŃ)ŗżÄwKfÖ??bb•ÖŅW­ZŽO4銩 Žo"¾ųņG@aQ~Ś~@*H  _ßųpękjMņNüyżUņe9++߭݉ļÖīTŪ^7^©4°"ćĒVIŗŃGCkU+¾ųĪGI>ŒĒā%ßéÜ_&“ał²÷”¦Ćé«q#o,]ņf~ųDQ„B”Ą¾ßžPŖŒZO,]ņN„cØ GG;¬Z9_- ?Æ4°"®®NX²ųÉÄżÅēąŅåhiż»{÷b±hń·zcž¼7Qæ¾aGNÕ«ē…öķ[H#ÜŅŅ2¤dwyKOĒ”Éś÷P'(Š?nŚŅ(7@óŌR ¤€E‹q¹¹łRŅ®ō|Ś Śæī9"%‹SS3°śėmJ£)MMM`aa†ŒŒlµē°“4ĒŹ³*¼7""ŅĻ;],ŠŚ“ 2œ¬Ó÷Ŗ’÷ŸˆØ&DĢEń'ADmķ*üW511¼/āć”j7óƒ×P§Ž,ųié™zõķŪ'_=OcÕF™L†?}…‹¾Į¦ĶūōZąŻŌŌÓ§ĆĢŌ'ō4iŻŹ ŌĘ­[%Õżüš¢aƒ::÷wr²ĒŃ#šÖ’-‘’…śōżģÓ÷1h`w½ś©3aü`ø»×Āū|†ųųd½śvōo…ļæ_gg‡ĒŽC_½{āׯ«ńÖ[‹„Ä„®Zµl‚Ö-†—§k5E§ĢĮĮGoĄūƒ'!ŠZļ)±³³ĘüyoaĀųĮÕ”ī¾Y=£Fæ+M©®nm” g”jē§9éķŪ5W*ŗī.&.e2~ܰ‹‹­[ƒÕž.),,Ņø6Ÿ··'VƚóDŠŠ=oģ-øŁrż,2Ė|Ż’GDd`-’ī@눚 “n‚Bń¾ųœŒróõ©’X£šŹ³wP> hÕ²l-£Š’(MšŌƒ…EI…N77gÆūŅØ~2ø‚ƒćÆŠH\¾|wļ>”¦ŒIńŁŁ ^=/t hƒA_€_›ŠæĄššš`ł²÷š’7æürēĪ]Āõėw›Ø’äpuuB£†uŃ„K{ŒѧRɗ˜ŲD„ÄĆØ‘}õ>‡‹‹~ݵ /]Ēž=GqńāuD]»ŌŌ „vĘĘFššpASßčžBGŒŃÖ֦׏hެ²³KŖ)Uōõź€#öāšįÓ8~ā ._¾Ūw"++G©¼½=Ѿ] Š­ĀQCõ¼=•ßWzVG­H@§68÷Ļn;†C‡OćZŌmDßø‹ü|åīęØ[×ķŚ6Cß¾Ń«g€ÖiĄÖ֖Jq—¾×åźź$µ3« b­½ 6nXŠ;wb÷Ƈqž|¢¢n#1)Ei7##<=]Ѥq=ōčŃƆõ†½Ęó–ĮÕU÷Ļ"Pņz–æOcÖ3¬_æ6NžŲŠŸ9„ĆGBqåŹ ¤¤¤ėu]}8:ŚįÅ»ąĮ#I¾“’­„k—ödäc×®tŗ¦„„>’ō¼3}öī=ŠˆČ+øzõ&ā㓄龄ĢĶĶąåéŠ-£OŸ ō±+ĢĢL5žūŃ÷VE•މˆˆˆˆˆ*CPæ ’nZ³ińńį-d’«Ø=J«žŁX[IÕN«JAA!ņž—ˆ±³µÖiݵм=m vļ>  d:ŁēƒagW5ėX%•^‹ärÉd* Ų?I™™ŁPˆ"¬,-t*2QS”¾ŸĢĶLk|b£°°¹ył062Ŗ0™Z‰¢ˆŒĢ’©Ś„Ļ‚āb²²s @ØŅĻ;)KŹ1ÅūĒ)ķ[Ųǽ Wś(3_ÄK[”gģLmƒ€ŚÕ÷H"¢Ē ‹b w÷ +šhż†/S VAö„j„źü²nffŖuō‰6WÆŽÄ•+7įädG'{ÄĒ'c÷īĆ8ņ§ŌfĀųĮUž¼“:Ŗ”UՂųOŚÓ”ü155Q)ņ4į©z¾‡‘‘ģ¹¹W"""""zŖ F‚š€šhLŗ=xnˆ/WKXD償¹€9sWj<īåéŠ÷Ž{õ FDDDDDDDD¤ŒæsēĻYõ꽐ÆīøĘ9†¦¦āˆxņ«·•ćåéŠŪæäČ"""""""ŖQĄŃŚĀlئćGŗ ¼Į•ÜčIšń©Ž½‘š–Ā‚"XZšĆÅÅ ­1ś„aiY3¦•§€ų:€źŽ©Mŗ%$œ®AÕŃ’śUX„“ˆˆˆˆˆˆˆØ¦€RcCė8zŻō˜Śé„‚h4 ¬XJDDDDDDDD¤Pd$„ī€ś5ŻDQmc"""""""""*GGŖŪ­’tKHkmŖ?"""""""""¢§›tHHkšč~•5ŻQř„DDDDDDō,IĖ3ʝt Äē˜A  ѓ!""##”P(4^§  ‘‘‘ˆ•öEEEįÖ­[读·Ę~nn%ÓĪņóó‰f͚”iÓ¦Ņń¢¢"$&&āŸžĮęĶ›±uėV:t&&&Ž»”ÜK·0tD5ĪŻtsC‡š,ėS~CJŗ%$œ®žO>"""""zV|ńÅhٲe…ķ>žųc8::āņåĖØU«–ұŒŒ “iÓ ,’n[·nUjsčŠ!ōļßÓ¦MĆŲ±cµ^ėÖ­[ĒĢ™3ńć?bėÖ­j“nåcėܹ³Źžļ¾ūoæż6vļŽńćĒWxŁ“inß¾}ūöaȐ!*Ē'OžŒõė×ćģŁ³čŲ±ćc_ÆnŻŗŲµk—ĪķG… Øģ/..ĘģŁ³ńÅ_`ķŚµ˜>}ścĒV] 䲊=gņų¹Ø6P'%ęTm'Ļ®„‘n²@MˆˆˆˆˆˆŖŅ•+W0`Ą•„ŲŁŁ”GŲ°a233akūxkrmŪ¶ ¢(bĀ„ ČĢĢÄʍ‘””¤öŚŚ¼ųā‹€čččNJ§Ō•+W`ii‰Įƒ«=>tčP¬_æQQQU’t«*FFFX¾|9~žłglٲ„F'Ż4ń““į£\׊žmóå 3Ÿkˆ=i #ć@?å’n2… |1ˆˆˆˆˆØś™››###CćńE‹aźŌ©Ņ4ĪŹEŪ¶mC«V­Š¬Y3Œ=ß’=vīÜ©w²(-- `oo’X1•277Gaa!ņóóaa”: ²K—.ˆˆˆ€——W•\Æ*”GŲ¾};ņóóūuzŅL4ŖU³×£#z\ĘŠf")é&½¢ 0XDDDDDDō\0`:„eĖ–įĀ… RB«”§§'ڶm«±X€®BCCqūömŒ3йsgxyy©LW­ČŻ»w1wī\XYYaŲ°aS©@.—ćå—_Ę©S§«“V›••ڶm WW×*¹^Uóöö–Öy#"¢’Ei&© āćXB3ĆEDDDDDDĻ‚V­ZAµ?£G–Ś-_¾]»vÅܹsѦM8::ĀŹŹ ¾¾¾čÓ§–.]Z%ɜ­[·B)é&“ÉšŅK/!22W®\QŪ§K—.*±×«WĒŽĆÖ­[QÆ^½ĒŽ śõė‡Ł³g抔CčÖ­<==aff†:uź ((o½õ"##Õöµ°°Šų<7hŠ@mŸ‹/jģ#8 WüÖÖրĢĢLżnœˆčY& åƒį€4½Ō²9Ž­%""""¢Ē2cĘ © ę£|||¤ĒµjÕ‰'pļŽ=DEE!..<@ll,¢¢¢°pįB|ūķ·ˆŒŒ„‡‡G„bÉĖĖĆīŻ»¤Tįt̘1X±b¶n݊Ļ>ūL„ßĢ™3ѰaCi»øø‰‰‰Ų·oʍ‡tļŽ½R1=jٲeųč£pńāEÜæqqqxųš!īܹƒŸžėÖ­ĆĪ;1jŌ(„~kÖ¬ŃX5499sēĪUŁļęę†3fhŒÅ××WÆŲu©ŲJDō227*n ŅŒ kÉÕ܈ˆˆˆˆčq½śź«:U/-U·n]Ō­[Wepp0† ‚ļ¾ūK—.­T,ĮĮĮČČČ€ÆÆ/žųć„cNNNŲ¾};–-[##åńT[½ō£>B“&M°`Į‚*Kŗ%…#Ō]/)) ­ZµĀĀ… U’nƽöšĘuŌnß¾­6éęāā‚>śØj‚žž lÄ•YK‘2އˆˆˆˆˆžÉÉÉčÕ«~ųįm +++S@u±mŪ6Ą?ü€^½z)ż¤¤¤ &&'NœŠł|ęęęx¬˜Ź›6m&L˜ ńx­ZµŠ³gODGG£ØØØJ®Y•āććaddT鑈DDĻ*QZe…t’SŃc°²²Āɓ'qźŌ)m QPP ¶Ŗ§.āććqōčQōķŪ·nŻRł9}ś4č]P!-- ĘĘʕŠéQ÷ļßǾ}ū —Ė5¶ÉŹŹ‚‰‰I•]³Ŗįųńćšóó{ģbDDĻJI7-m‰ˆˆˆˆˆŖŒ……ŗuė†}ūö!$$¢Ø¼ŲMnn.ęĢ™¹\ŽnŻŗUź;vģ€\.ĒųńćQæ~}•Ÿ   tčŠūöķCVV–Nē Åɓ'įļļ_©˜ÕÆ_?dggćĆ?D^^žŅ1QqšąAüžūļ茵+AؒkV…ųųxLš4 111˜4i’”Ć!"ŖqD¾`\RQAt1t@DDDDDōōėßææÖ‘O!!!šõõÅ7ß|ƒ^½zaąĄptt„‡‡œ‘ššŠŪ·o#;;żśõĆ«Æ¾Z©8¶nŻ +++ ūģ3ÄĘĘbė֭ұiÓ¦įŪoæEóęĶ1gĪxyyA”P 99üńęĪ‹?’ü‡–Škäåå!-- ļ¼óŽŹZ‹ …‘‘‘Xµj®^½Š#GŽčtßr¹iiičÕ«—Jü‡½{÷āųńćøxń"źÕ«‡ĀĀB¤„„aāĉšńńQjŸ’’‚S§NaŃ¢EHKKĆŖU«¤cćĒĒĪ;Ń®];,\ø(**Bbb">Œ÷Ž{įįįŲ½{7€’ŠÉMš4‘śēēēcõźÕhŪ¶-zöģ©tŻŅ¢&”””čŁ³'ĢĢĢ0vģX“hŃęęęČÉÉĮłóē±k×.8paaah޼¹Ō×®]=z4j×®?üŽŽŽČĶĶō7°yóf>|GE—.]¤> .ÄāŋѸqc|šĮØ[·. 55'OžÄ'Ÿ|‚cĒŽįŌ©S033“ī!-- …B§×‡j(Qp6† 8Ŗ 둪^½zaĮ‚jmٲ'NÄŹ•+±xńb„cżū÷Ē„ Tśˆ¢ˆnŻŗįēŸĘ÷ßKKKDGGć»ļ¾ĆĄ±wļ^•餳gĻ–:ūöķƈ#”Ž/\øPJś=jģŲ±Ų±cnß¾śõėė|߃ Ā’żß’©=öŅK/”’žŲ¾};ęĶ›'ķ>|8  Ņ¾øø~~~Ų“iV®\ ApöģYģܹ&LĄęĶ›!Ź#„ęĶ›‡iÓ¦a͚58qāŗwļŽ×_]©Mjj*VÆ^€€|śé§jc5kĢĶ́† Ŗ’ż÷Ń®];Ģž=bƌhŲ°!Ī;;;;•>-[¶Äœ9s HLLIJeĖŠ„K;v ¦¦¦J}>üšC|żõ×xēw°eĖ*@ÓÓC€č$D'CBDDDDDDō,xå•WмysģŚµKē>‚ EEEHHH:t¢(b޼y×oūšĆajjŠżū÷ėć‹/¾ dŗlUéÕ«LLL4NĖ|”‘‘:vģˆĢĢLiŖėĮƒ ,PIø•š;w.č}Ļ„RSSqęĢŒ;VmĀ š6mŠ”C‡āŲ±cŅōŻ3gĪ ..Ó¦MSIø@ŻŗuŃ»woœ;wN”väČČårĢž=[%įVźķ·ß†ƒƒC„ļ‡j.p’‰€ź»…ˆˆˆˆˆˆˆ*%00ŃŃŃ*kui“––###8::®_æ ¤˜‰&VVVšööĘ­[·ōŠĻĀĀōŠÆ"ĘĘĘ066Öūž---aee äž­­­Ń A}ÜÜÜąģģ¬÷=—ŠŽŽ†B”Šś¼@óęĶQPP€‡J±@Ū¶m5öyóĶ7±xńbi:]^C###ųųųTś~ØF³73CGADDDDDDō¬šņņ‚(ŠHNNÖ©²å™3g°k×. 2DE•œœ i/Mlmm‘žž®W|„ ž{{{ėÕO›Ė—/#//O§sŠ¢ˆ'NąąĮƒ;v¬4’/99ÖÖÖöÆĢ=—JII€ _—Ņć„ÕFKGćŁŪŪkģÓ½{wtļŽ]ŚNNN€ ļÉĘĘwīÜ© rz ™C€)—t#""""""Ŗ–––TG’½õÖ[˜1c†Ņ¾āābdffbÜøqųśėÆ„ż*…Ō±¶¶V[åņŌ©S*ɞ‚‚DFFbåŹ•šõõE›6mt¾' däÖü”“OEÜæ+V¬€L&ĆčŃ£•Ž3&&&JūŠŠŠ““ƒ)S¦ąĖ/æTŠO×{.M†é+??*¼Nés÷hŅM—¤`e®UŁū”ĶĢ¢h –/%""""""Ŗ¹¹¹ ²[·nŻ”Ŗa% ؐ„„„ąµ×^C·nŻ”L-,,¬šZr¹\ķšoC‡ÕŲ§S§NŲ“i“TńTWk‘œį* IDATÖ¬Įš5kŌsuuÅʍįļﯓæoß¾*ÓE šŪoæaĻž=xķµ×Š®];%÷\:5S¹\®q“Š”N­­č:r¹¤ēØtÄ”(ź>j©4łZXXؒx|ōZšÖķ£§š™1 TīJDDDDDDD*J§>ŚŚŚ*ķ5j”Śź„óēĻGćʍ1gĪ„‡‡ģģģPPP€ĀĀB­ ¦ÜÜ\µ£ÆNœ8”r}333Ō®][m!]|ųį‡5j”Ņ>AąęęwwwµÅ^yåµÕK?śč#4lŲ‹-BHH€’{ĪĪĪ®0޼¼<89U®&dé½WtŅÄiés[ŗÖ^é~u®^½Š+W® wļŽ°³³“®•••%­[§éZśŒ £§ƒ˜Мn%"""""""½Üæfffpwwש½½½=ڶm‹³gĻJūœ Ø]»¶Ę¾>D‡Tö·nŻzF®]ķŚµµЇ››š5k†k×®Iūœ‘““ƒģģlI(¹\Žøø8Uźŗ„Ļk||¼Öv„źÕ«§Ō/&&¾¾¾jū¬_æ«V­Ā­[·`gg§ōŗ¹¹i½VéučŁ!¦2CADDDDDDō¬HOODZcǤ×ōM'''i 0 d (kģó×_!11Qjū“QwĻ …ŠŲ'$$łłłØŌ55jgggģßæ_ćTŃ¢¢"£qćĘ҈ŗŅi³»vķŅxīóēĻĆŚŚuė֕īŠž^ŗt ׯ_j_CŅŽ“†‰ˆˆˆˆ_ŸĪĆŗ3ł7$Ŗ&Š§ØĄ_~~>ŅŅŅ”öåääąņåĖX“hŅÓÓ1}śt½Īibb‚¢¢"ˆ¢AŠÆ_?4iҳfĶ‚‰‰ †.œŹĖĖƑ#G0mŚ4ŲŲŲØ²ś4011QZ·näȑ˜;w.Ž~ūmČår 0@­—““ƒżū÷cśōépvvV™ęŖ+™L†wŽyóēĻĒ+Ƽ‚Y³fĮĒĒ2Yɘ¤K—.a޼yˆŽŽĘźÕ«„~uźŌĮŠ”C±aĆø¹¹įĶ7߄»»;DQDll,Ö®]‹S§Nį­·Ž’’­:u‚ææ?>łäŲŚŚbōčŃ҈·ĀĀB?~Ó¦Mƒ©©)^żu•X322¤uįeeeUéuķčÉaŅˆˆˆˆč9caR #™ˆbEŁśKi¹"€§(ėAĻS#…”CPkłņåX¾|¹ŚcÖÖÖX½z5 ¤×9œœ —Ė‘••[[[#$$£FĀŌ©S1uźTXZZĀÄÄDŖtéęę†_ż^^^}O†ąä䄌Œ ( Čd2XZZāŠ”C=z“”H“²²‚‘‘‘T=“N:Ų±c‡“ĘZeĢž= ųī»ļ°mŪ6ĆĘĘŁŁŁ(**‚±±1f̘·ß~[©ß?žˆÜÜ\,Y²K–,„„%är¹”80`>żōS©½ Ų³gF…wß}ļ¾ū.,,,`nn.%m±}ūvųųųØÄ٬Y3÷°uėVŒ?¾ŅĻ=Lŗ=g¬M‹įēž…s1¶7&2#™ˆzy†C‰››Ö­[§ö˜¹¹9ÜŻŻŃ±cGŲŲŲ(óńńĮŗuė“N!|łå—’Ÿ½ūƲ>?ž~ĪŽ#';2ŲKŁ`ÄY .üjµZ­Ś«VæÖRżÕQ­ZWėlÕVūU«“„.¬ZÅÉP6 #Œ“uöžæ?NrjĢ! įóŗ.®$ĻüœprĪsīēžÜ7£GNwĶ9r$_}õ›6mbƆ 466’L&ÉČČ`Ā„ œrŹ)m².¼šBʍ×a†TońĢ3Ļ0wīÜnļ3mŚ4žyę&OžÜį6?žń™5kĮ`0Żh`ņäÉlß¾/æü’Ķ›7ÓŌŌ„$IŲl6&MšÄÉ'ŸÜi§O½^Ļ3Ļ<ÓiĄJ.—óÄOpė­·ņŃGQUU…×ėÅb±PTTÄüłó)((h³ŸÅbį½÷ŽcĒŽ|žłēŌ×׉DČĶĶe޼yL™2„Ķ>|žłēlٲ…uėÖŃŲŲH,###ƒ1cʰ`Į‚tGÕß’ž÷ÓST;2kÖ¬N× ƒƒTo’BÜĪAA„ćĢ>‡ŽĒ7Ć}ՄĮG.œPĒY£č87’{4Į¶Ļńb›œ§—µ.Ō’śėÆwXć RYGćĒ?¢ń 6@€wŽy§Ómf̘ŃeHœ.}Ƀ#Šö9]l r÷)`DĒ‘é&‚ ‚ Ē”‘]TĪ»‘ƒNm×;B?Ń*LĢöQbéß,·Ķ›7wt³ŁlC.čFټys§Ū”––Š › ō’ŗ ‚ ‚ ĀqJ!K2#ßÌ|Ļ@E\G5چ2³ŁÜŖ™ }K6ŠAAAA„”FŻAAAA”‰ › ‚ ‚ ‚ ‚ ō1tAAAA„>&)‚ ‚ ‚ B7ø\..øą‚×>œėÆæž“N:)½lėÖ­Üzė­üļ’ž/gœqĖ—/§””‘#GņĒ?ž±Żc½żöŪ<öŲc<łä“Œ3ŸĻĒłēŸßī¶Z­–ĢĢLęĶ›Ēe—]†R©ģŃćŗóĪ;łņĖ/Ū]§T*),,äœsĪᬳĪJ/’ÉO~ĀžżūŪŻG&“1gĪ®½öZrss[­s¹\üłĻę£>b’žżÄb1T*łłł,\øė®»³Ł ĄīŻ»łŁĻ~Ö­Ē0iŅ$}ōŃōĻ~ų!/æü2Ū·oĒår`±X˜6mW\qsęĢi÷8Ææž:ƾś*åååųż~ōz=“'Ofłņåœyę™m¶…B¼ų⋬Y³†½{÷‡‘ĖåäääpņÉ'sĆ 7ŸŸŸŽ>™L²hŃ"/^Ģ-·ÜŅ­Ē&»D¦› ‚Š”H\Ā•揬i (iš«Śü«ņØ9čŅb÷©Ū]ßąWį +šGåĒŅ@?$AA„^‹D"|ųį‡ŌŌŌ`µZ[żK$¼śź«Ģ;—Ææž:½ĆįHļÓāóĻ?ēć?ęOśo¼ńF»ēŖŖŖāĆ?ÄćIuŽÅb|ųį‡ģٳ§Ķ¶ ¼õÖ[\uÕU̟?æßߣǵmŪ6Ö®]Ūīŗ@ Ąß’žwĪ>ūlzč”ōņ 6šÕW_µł=hµZźėė¹ė®»˜9s&N§3½Żngśōéüāæ ¶¶–¹sē²xńbfĻžĒćįWæś'N¤²²²Ć±–——óᇉD:ÜęŽ;ī`įĀ…¼łę›±xńbN?żt XµjóęĶćĮl³ßųC.øą¶lŁĀ‰'žČ¢E‹9r$ļæ’>gu7ŻtS«ķC” ,ąŚkÆeĒŽLŸ>Å‹ó½ļ}™LĘļ~÷;ʍĒʍÓū$“I>üšCvķŚÕįų…”Cdŗ ‚ !Øœ@LF(*#“lžˆŹDåc²Ō²Øœ`¼y}TF &'‘„`TF2)ŽĖˆ%Ž^€L)O¢’%PȓØä Ōņ$ZE2Vž@§L}ÆQÄŃ(Uq Ŗ8&Uƒ*†IC«Lµń ‚ ‚ tfٲeÜ}÷Żm–ļܹ“N8G}”_|±ÓcĢ™3‡ĆĮĶ7ßĢ’%KŠétŻ:÷yēĒ“O>Łfy"‘ąąöŪoēąž{ī鎃i¦×ėłąƒŚ]ēv»™1c÷Ž{/7ß|3r¹€#F°råŹv÷yüńǹńĘyå•Wøį†ų’ļ’qąĄžö·æ±|łņ6ūüē?’įĢ3ĻäĘodõźÕŒ7®Ķ˜n¹åyä^{ķµ6Yt;vģą·æż-§vo¼ńF:k®…×ėå¼óĪć¶ŪnćüóĻgŌØQüć’ąÅ_äšk®į©§žB”ųoøÄēóqŁe—ń‡?üåĖ—3}śt{ģ1Ö­[Ē=÷ÜĆķ·ßŽ$µ¾~޾}; ,ąŖ«®bŪ¶mmÖ CŸŗ ‚ bØ WX‰7$ĒQą )ń†åøĀ ī½÷Ž#:·L&ć¶ŪncåŹ•üõÆķqŠ­3f³™‹.ŗˆ{ÇSTTŌå>Ė–-ćĘoL’.‰o¼ń .l7ąpŚi§qŃEńꫯāõz1=ėo¼A"‘ąńĒop0<üšĆL›6U«VqŪm·šŅK/”Óéx蔇ZÜ wÜq«WÆęż÷ßOŻV­ZEiii»7HMyżéOŹ]wŻÅŽ;˜4iRplA7A„ąŹi (i *i Øš„å8›jž°W(P‹&Ž@Z‹%%\!%®TyŌn§–'ČŅGÉÖGČŃGČŅGČÖGÉÖEČŌGPHÉ~µ ‚ CY2™ÄķvSRRŅ­ķ,XĄ…^ČĆ?ĢW\Įȑ#x ‹/ęĮ¤¦¦¦U-±#e³ŁØÆÆļVŠ-‘HĶJŠjµ@jŗ¬ĖåböģŁī7cĘ ^zé%öģŁ“nõĎ;0›ĶŒ?¾Ćm¦L™‚Z­fĒŽéeŪ¶mcŹ”)˜L¦v÷;v,\pA:».‘H°k×.–.]ŚiŪĢ™3ÓćA·ćŗ ‚ žØœz抆€g0•”ÖŠüs_E *č!7ĀqUu‡9‹&J1B1D)L1L”9„F!¦Æ ‚ ‚Š}>ŸG}”††.½ōŅnļ÷šĆóĪ;ļšóŸ’œ·ß~ūˆĒŃ«®®īÓ ŪŽ½{ŚŅŁžēŸI’ŅĶģv;V«µÓż, @ŗłAOÕÖÖ¦Ń™L†Édju—ĖÅĉ;ÜG«Õ¶šJėv» ƒ]žėHplA7A„^šEåŌūŌŌzUŌ”4Ō8 ƒJœ„hp IeĖ)ŁŁ O/“€L]„BK˜"s"Kˆ"s³FLUA|šAžxā‰ōĻńx<Żšą†nąņĖ/ļö±†Īķ·ßĪm·ŻĘ[o½Å9ēœsDck™’Ł2žīJ&“­š“ƒ|üńǼšĀ Lœ8‘ĀĀĀōŗżū÷³pįĀ6ū>|˜ššzč!ęϟŸ>ü7ó­«ń÷6H …ŗ%u>5¾ˆČTŹ’@C@EC@Å暒Ö±jbY‚Y‚”XCŒŹ SĘn ‚ ‚ ˆ¹sē¶ 6% >ūģ3ž~śiņņņøżöŪ»}¼›o¾™^xŸ’üē,\øFÓė±E£½+šėńxČČČčp}AA’÷’×ķ1ØTŖtĆHÕ°ƒTÖīH&{WD©Twļś¬e ,€$Imj¹uu ŪēźķćŽm"č&Āq-–Ø÷«°ūTéĄZK Ķ/‘2)‰V‘@§Š£U$Rß+ćh•©Ī ZEƒ*ŽŒ$e Š©R:EIJ¢U$‘Ś©}¦Uđ+©/š”ĒŚÖ”‹%$"q‰xRF(&‘HHc2’IĘäDā”XŖ»j "'—ŒÉÅä"2<ŃųĄg:C œv#[ķ©@œ$A1Ģh›ŸŃAFŁdé:n_/‚ ĀŠ0wī\~łĖ_¶Yž«_żŠK.¹„»ļ¾›Ÿžō§ķņoZ­ę±ĒćĢ3ĻäĮäŽ;īčõŲZ²Õz’µ©Œ­?üįķ./**bƌØÕ­Ėu”––vŲńtłņåÜtÓM,Z“ˆńćǧ>ŸÆÓq ÕMµ7Ģf3•••]n [Ćjµ¦ĻŻ‘ƒ¢ÕjÉĶĶķ·Ē#Ū†Ę'JA„.$’õ~%U ÕŽT}ÆjÆ»OE,1šĮœī2Øb˜Õ1Lź8Mź«QZ¦UĘŃ·Ņ” “ņ8:Uµ|hÜU‹Ä%<ްoD7$Ē•į *q…8*\a9Ž ŠH?č’IŅõā>:˜ZfÕÄ—égB¶‰Y>¬Z1%UAŽ'§Ÿ~:’ūß)++ėQ#€%K–pī¹ēņĄōhzźwÕÕÕ©i«=”R©øęškz}Žļŗä’KxõÕWټy3ćĒO×rs8īW__ō|ü-, .—‹D"LÖ~S²X,†ĆįhuŽŒŒ :#3uźŌō²É“'óÖ[oįt:ŪmöP^^N2™lÕavŹ”)|łå—D"T*U»ēśšĆÓćŽ?"č&Ā1+•SįŅpŲ£¦Ś£įGMWsT*=%fM›.,²i£Ųt12u2µlŗ˜Ø vč”qtŹ8Ęp»ėŻa ~Õ^55>5Õn5> M%}Ö¬öjØöjų÷ž R’1™¦å{81ĻC†hĢ ‚ CJ]]Ļ?’ū¬×æašA7A†€*\skØhžź )tLfMŒ\}„\C˜\C„\}˜C„\CTՆµVøµpj8£2 ti9čŅņśīlr fø™=ÜM¾AąAa0ŅjµÖ=ĖĖĖcɒ%̜93½¬  €k®¹†1cʤ—-_¾œģģģĻńē?’™•+W¤3®:«¹¦R©ČÉÉįä“Oęä“OīńćZ“h#FŒčŃ>K—.ķ“#gVV×\s EEEéeZ­–5kÖšžūļóŽ{ļQYY‰×ė%''‡éÓ§ó½ļ}sĪ9§Ó.¢³fĶāšk®A§ÓuøĶ%—\¼yóX¹r%[·n„©© ™LĘĢ™3¹śź«¹ųā‹6lX›żīæ’~.ŗč"VÆ^ĶīŻ»q:Œ5гĻ>›eĖ–µ øA*{ļŁgŸåŹ+Æä­·Ž¢¼¼—Ė…Ķfcāĉ̙3‡„K—¶«$I]ÖĪ묋¬pl‘źķ_æ‚ApvŸŠ.-•-Yl. žØ¼ė½2N®!BN:°!Ē!Ļuø„VI‰C5åMzʚ“”9ō}Śķ¶ŲdĪp3 ¼X4]×°A”}7’{4Į¶7o‹mrž^Öŗ»ē:=–Õjm·Ö×`ÖŲ؈Ēćép½B” °°°G$ō§K_ņą“ ł[‚Ü}JēĻw”oˆL7Aś/"ē€KĒ~‡†ż-œ:|`3Øā 7…Č7†n S` Q`Œ`P‰śZB÷Ȥ$EęEę KR˚Jö6„¦ŽīØ7ą õž-¶%īÕ¹ŒĻņ3oø›‘U)‚ GŃO~ņ“N3·®øā .½ōŅ~ёūŪßžĘŪoæŻįś¬¬,^yå•~‘ _D¦› GEä Ā`KHTyÕpčØpk8äVSćÕtŲÕóX¢’'ÓµĻtŖT'Res×Q Żi“+‘øŌŖŽœ?šš.ŒŹˆwŅu0‰%%Ŗ½Ŗ½¾Ą¤:“̶łe 2Ś7GA† t„!ØĘ§fOƒŽ=Mzv7źq„L6¹,I”)Äh[Ń6?#“i¢”XźB_§ˆ‹¦Bæ‘$˜”ćcRŽĘ€’5ūl|ZiķV÷ĄXBĘūl|RiåœŃœ9Ŗ …(.żĪīSqĄ„å SĒ~§†J—†č Ķ^Ó)ć˜Õ1 ź8FUź{]s×O"VžśŖQ&Š)h‰Ōre u?×5‹%d„ć‘˜D,!#•„(xĆr19¾°<½Ģ‘ć‹*šEäxĀņnŻÄčkÉ$TyŌTyŌ|t0µĢ¢‰2*#uM5Źd„)„\tgP‡B­V“““Ój¹Ūķ¦©©‰ĀĀBŠžłHķr¹$ ³ŁÜf]ee%¹¹¹ØÕŻoČd·Ū±Z­=ڧ'|>įp9„¶^ IDAT›ĶFEE(•©zµ ‰0jŌ(ŹŹŹŠėõ•qĀ@A7A!;ź ģŖ7°«Q×£ģ=”Q$(m¾;Śę§ŌtYlŃø„'¢Ą–ć +šFų¢©‹ķP\F8–ŗ&žū}$.‰ĖDå„ćR¦ļHčq²$*Euó}­"$^G§ŠcQĒ0Ŗć˜Ō1̚(FU³:Š”łīæ ōD¦.Źe“ķœ?¶Ųųą€o¤ė·ōp\Ę뻳łō…K'Ł™šŪA„pAŽX4!cŸCĖžFū:8“^{M̚(Ś(6]Œ MŒL]£*IƤŽaTÅ0jāĒT…,Bś^\ž$“ą )p†•ø‚ œ!%®‚¦€w$ÕõÕR臒;WHɦ%›jLØå Ff™œķer®Ń §ß͟?NĒīŻ»[-’ŁĻ~Ę+Æ¼Ā¾}ū1bDæŒåŁgŸE&“qĖ-·“Y·xńbV®\Éäɓ»}¼«Æ¾š;3éÓ§·Z‰DųżļĻ/łĖ#ļźÕ«Łŗu+<ņóēĻē“O>”¤¤„;3wŽy‡E‹±}ūvB”^x!?žńč|]Ł“iMMMœqĘGõ<‚š]"č&Ē `TĘīF=;ōģ¬7Pć;:wØ,š(£3‚Œ²łm R8€w\Qΐ’¦  GP3Ø ) Ā’ć‹(p7Śŗ“õӗ’ÉŌTzq-¬%1ŖāX5ŃTē3C˜\}4õÕAÆA9”cUœļ­ēĢQ |zČŹ;å™4ŗžŌYļWńūõ…œćåŅIvr bJ“ ©h\¢Ü©co£Ž] 8ū?‹M’R…üs a²õ2uQ241lŚ6]‹6vLÓśƒ$„JcXµ1šg~¶Ė•SļS7w‡URēWõFįø,u­× ē՝©2)ĒĒäl/²żƒīĘēP•ŸŸĻ–-[8ńćƬ[·Ž1cƓڮ¶¶–h4JNNjµšH$B4EÆO5ÜH&“øŻn,–ÖO4Æ×‹^Ƨ¾¾“É„N§#‹QSSƒV«%++«ÕöĮ`ĘĘF ÉRÆ17nÄ`0F‰ÅbH’„Żn'''­V›Ž7‰PWWG^^^»5ÓŠŠĄÓO?Ķ5×\ƒF£Iļļp8äęęvšŻW]]Ż&oĒŽ˜L&Ün7ļæ’>O?ż4£FJgŗi4’­YŪŲ؈ĻēcųšįČår‰~æFƒŻngųšįģv;¹¹¹čtŗVæĖĘĘFb±yyyH’„ĻēcŻŗuõ~u~M%ŽPsp-Ø:&j¶ōF,!į )p†piŪ¬7Øbä"äź#ä#Œ°„aŠŗ\B+*y’Ó‹œ2ĀÅĒVŽÜ›Ł­ŚßŌŁYoąŒ‘Mœ?¶e?O „cYd2V«•;všüóϳhŃ"^xįī½÷^&MšD]]mėæ’żoīŗė.ģv; .äšk®į¬³ĪbįĀ…ddd`4)++ć/ł §œrJ«}÷ļßĻŁgŸMqq1”Pˆ@ ĄÜ¹s˜:u*[¶lałņålß¾«®ŗ µZŪķfŃ¢E,]ŗ” /¼³Ļ>›üü| ååå¬ZµŠ‚‚N<ńD222ČĖĖc͚5œ{ī¹Ō×ד››ĖĪ;Y±b×^{-K–,Įd2FijjĀd2ńĮ°bÅ Ž~ūmĀį0Ÿ}öÆæž:EEE}ūD„ˆ › R-FwÖŲŃ ?*Ó²ō‘ŌTь“r|dj£}~ŽIĄTRļo¬5Ųźż*ź*‚Ń”T;R¾ˆ‚}ūŗVĖ­ŚEę`jŗo¦ŸK•˜÷² KšųްńvYę31;KJ¼]žÉĘWŸXĶX[Ū”‚ ¤ų"rv5źŁj7ņu­±ĖæÆ#„S&(0…f “o Ql Q( :©€\ź=łŪQ9U5]j¼Ŗ¼j*ś(2–ŲݘŖŻūŚĪ2uQfø™?ĀE¾AąśŅ9ēœĆāŋyą$‰•+Wņ“Ÿü$<;xš óēĻē7æł šĘųŠC±råJ X·nsęĢį7ŽąņĖ/o÷7Żt_|1”PˆK/½”mŪ¶”×ėI&“œzź©lٲ€‚‚VÆ^ Ą›o¾Éƒ>Č+Æ¼ŅźXr¹œ/¾ų¹\Κ5kųӟžÄ¢E‹øóĪ;ټy3YYY„B”vƒNēž{. ,`ҤI|õÕWÜwß}\rÉ%üś×æąĖ/æäĪ;ļlt{ā‰'ųłĻε×^ Ąu×]×ęųļ¾ū.3gĪäÕW_„¤¤„¬¬¬ōyn¼ńFV¬XĮųCžž÷æóĒ?ž‘{ソßĻ7ß|CVVļ¼ó¼ūī»ŌÕÕ1{öģōy/æür.¾ųb.\ȦM›xņÉ'™2e ū÷ļēžūļo÷’@Žt„A"•±³ĮĄ¶zŪė 4ū¾.[®!ĀŲL?c3żŒ³łJӃ$ŠPQķUSķQSÓņÕ§²ŁjĮTą Łj7©iŖ#,AĘd˜˜ķgŒĶ/²–Žc*y’³F5rj‘“wĖm¬ŁŸI4Žyvl½_ÅŸqF©ƒ„ćźÄóGH½§Uø“|Sgąk»ƒ.É£š§!IoQd 1Üfø1Ä0SčøhN4”é”ńę:ø’½™KJvkŲēŠQÖ¤„¼I£^5”¼SžÉ;噚CĢęfV›īčŻP=^ &L˜ĄĘ™Ÿ„R™žŖŖŃh˜4iR·ee%K–,iuü–ń|ہøä’KŅ?OŸ>;wvėåååx<žtż¼ŗŗ:> Ąˆ#Ņc///§ŗŗš+V¤÷­««#O•diÉH„Ōćw»ŻŻƒ  "č&ØĮÆb‹ŻĄ×v{uĒ};e“„&Ū„l“³}}~įÕTrČ­”Ę«¦Ź«”Ę£¢Ę«ī÷ŗjBźŽ÷~‡ŽżļīĖD)O2ĘęgR–©y^Q³ė8„SĘY6¾ž%VķŹį‹C,I‰w÷ŁŲTkäź©5ŒĖō÷ÓHašH&”Ü”cCµ‰ÆjĢ8Bp«6F±%•Uj Pl ¢UŠģµćBJRl Rl ²°$µ¬) do“žr‡–2‡ž*śˆ‚»‡Ü¹5¬Ü™ĆȌ³†y˜‘ļʬAÜŽŗųā‹Y¹r%UUU,Y²$]K ąå—_柒ü'wŻu&“‰ŚŚZxą~šƒp×]w±vķZ¦OŸŽÉdźōŗøŠ%$ģ>•.-‡=*ܹ4Ž…­;²$U ƒ*^G)O S$PÉØ©.£jEµ,F™ś^ŃA³ˆļ65ĒdĒĮ؜x‚19ń„D0&#–HuE Ē%\!eŖ“jsGÕžČŠĘ%vŌŲQoąÕ¹ 3…™–ēaZ¾‡"sØF &šמXͼį.^Ś–G·óę+ ~|QÄY#Y:®~ĄØBI:ÖW›ŲXeī“Ģ£ )IIFŃJ­J¬A‘Į&“bÓE™£s1gø H5ŚēŌ³«^Ļ7uzŖ½š.ŽŠ¾$©r¹CĒ+;r8!ĒĒ©EN&eū‰†=²dÉ~żė_sčŠ!~ń‹_“Zg·Ū™;w.S¦L`ķŚµéą“Z­ęÜsĻå§?ż)?üp—ēÉĶĶÅēóQTT„ĶfR„–Ž„Ÿ~śiŗžŪڵk?~|·ĘÆÓéÉdū,wß}w«ķʎĖ'Ÿ|ĀŌ©S‘ÉdøŻnę͛ǶmŪ:=¾B”Ąļ7…ž'‚n‚pµLKŁ^gą›zūZ}˜Ķ¦Q$—ég|–‰Ł ŒGL‰Ę%*ÜZ*\Z*Ż»SEū«8tw(åI2µ‘t·1“:†YĆ ŠaTÅ1ŖāT©åŗA–9HJxĆr¼y:ēÉ© ذūŌŌūT4•}˜«ņØ©ņdńƽYäĀĢīfīp—˜vrœ™åēŽS÷óၠž¹7»ÓZŠÉ$¼]žI™CĒõÓ÷Y_“J—†õÕf6T›iģFēßīPČ”ZCŒk.ē02# jn =¢S&˜œķer¶—‹'¦(lÆ3°­ŽČĪz}ÆŹuÄ[jl©5’©rņ§9±hÄu@whµZ¦M›Ęŗuė˜>}z«uĖ–-ć¼óĪćÕW_E.—STT„ĖåJÆ_¾|9/½ō‹-źņłFĆĢ™3‰ÅbØTŖ6õÜ:ó‡?ü%K–`0ŠjµŒ9²Żķ4 óēϧøø˜+Ƽ’o¼‘‹.ŗˆqćĘ”V§nŚ=óĢ3möūŁĻ~ĘE]Äßžö7T*Ɔ ėöŲn¾łf.»ģ2ž~śiT*ńxœ—_~¹Ķv .äĶ7ßdģŲ±˜L&|>·ß~{—nóēĻēŽ{ļåć?ęŁgŸeöģŁ=Ÿ ō–To’B\BŠĘ%Ź:¶ÖłŖ¦oļ–ˤ$#Ģ!Ęgł™˜ķcŒ-xD]ŹI‰ƊżN]Zö;µTyŌG„3jwIŲ4Q²ō2tQlš(ŚVm›6õ½A5“?üG2ź|Jģ>5u~vŸŠŸšĆnMŸÖœ$“ą”b3 <(Ä]ļćŠ;¤ą…oņŁRkģr[ƒ*ʵÓj8!ĒŪ#„£+•±®ŹĢڊ *Ü½Ė ś6¹,ÉHkqY>ĘŚŒŹˆšˆĀQK¤®3[‚p‡Żg.wF!%™9ÜĶāҦ!óæGÓŲN­äb›œ§—śģ<~æ­VŪjzē#<Ā{ļ½Ē‚ ųÕÆ~Õ£ć…B!4šö_£¢Ń(Jeļntwßh4J<O!™L‹ÅŗÜ÷HĘÖržH$’šu& ¢Õj{t|æßF£iwjīPtéK¶ļIŖ wŸr`FtüA7Ačž°‚ķuz¶ŚMl«7ōi`$Kab–Ÿ Ł>&dłŪLq쉦€’}N©[…K3 õײ$™ŗ(Łś9ś0ŁśŁś(9Ķ_$8”%“`÷«©piØti)wh9čŌöI-@³:Ę÷ŠœœZäÄv»Ų ƒĻĘݚßåtq XXŅÄÅė:œ‚-ƒŁ—–µ­¬Æ6ńū“Icr¶r}LŹö”;‚÷fA8vŸšõUfÖW›ŗ,Š™±¶KF52%×ĖP«ˆÕ_A·ö¬Y³„RÉi§&j BŻžŗ B/$“©‹÷oģF¶Ö©tłņE‚ Ł~&g{™”ć#³—XB¢Ņ­aŸ#Õ«Ü”;*Å ;£U&Č3„fŠP`Q` “gˆ”ŠQ}$šqĄ”aÆCĻī=eMZ¢G0X.K2k˜›³G5R` ÷įH…ĮĢTšü׳|S×uÖŪ[€gņ§ĀŠŽK|qČŹGVAV›Y‚œėå„%– āó³0Ųrkšp½Ÿ.]hqĪčFf仇Ģs| ƒn‚0ŠDŠmą‰ › tS¤¹0żV»‘ÆėŒøū0€Uh1)ŪĒä£2½Ź"ńEåģsčŲפ„¬IĻ—–H¼®–tŹłĘÌaņŒįŌWSø×C”÷¢q‰=zv6Ųb7`÷õī®·$ĮŌ\/ēi ŲģćQ ƒÕ§•^Ś–×el¶>Āͳ‘oYapņEä|p ƒŲšEz7…H’`tF€™ĆÜLĻóˆĪĀ1# ģwčX_ebC¹W׬y†0ēm`vĮ±|A7įx&‚nOŻ”¾Øœ] z¶Śl®1õŁ“Qµ<Įų,?Sr½LĪńõj:Ÿ;¤`O“žŻ:ö6źØńjś„+f¦6J”%D”9H”)Ģsˆ,}¤Ī,ōFµWĆę#›ktõ¬ę¤²;NŹ÷pĮų:r ā’łxPėSóä¦į]Ö Ņ(ütF“³E7ašp‡|Taå½ż™6 éL1Čó†»Åū›pĢK$%v7źųų`›ķĘ×ķ-0†8\3ņ=Gi„GßPŗvīÜŁ¦¹ƒ “A·'‚n‚š%›kl©5±·I×'ŻF%`„9ÄäœT­ŌģńōJg0dŪŪ¤gOƒŽš^f0u—\–$ß”Šb„)H”9D”%„AŌ­9fÕśŌ|yŲĢē‡-4õpډB–ä{#œü`\F1­pȋÄ%^ܖϧ•–N·SȒ\>¹–SŠœż42Ah_WĶŪe™¬Æ6ėE3 Bsˆ9ĆŻĢĢw‹®ĪÕPņq„•ZńFz–ż6Śą’‰vJ­Ē^öū@ŻÖ®]ĖįƇ¹ģ²ĖśüŲeee\~łå¬_æ¾Ļ- "č6šś·Ą“ R‡Ü6ף\k:¢š/ߦ’'™˜ķcJŽ—)¹¾·dw…”ģjг§QĒž&]Ƨ vWŽ!B‰%H±%H‰5H‘%ˆJt_Rņ a–Ž«ēćźŁÓØē£ƒV6ךŗõ5–ųĻĮ 6T™Y6¾ŽS‹œĒüt”c*y’«§V3ĪęćÆßäw8Ż4–xžė|ģ>M¬rÅ·…ĮĻ‘³zO’©ČčqR–`j®S‹LČņ„ ĀąaÓEY6®žļidC•‘w÷gu»ūiY“Žß|RĀō|—L²M—āń87n¤øø˜­[·’““ĆäɓQ(ģŽ½›ŒŒ öķŪGnn.„„„&dśPö hŒŹŲÓ¤gg}ŖWõt źŠYKŲ¬AJ,AJ2‚"ƒķ8"ć2żŒĖōć )łø"Ud¼;5_|Q9ż&ŸĻ[øņ„Z Ķ”£?`aĄĢ-tSd ńčŗBŖ·{w_&˜œ+OØĮX”_DćļķĻ䭲̗~(¶9„ČÉģan4 Ń-[8ž(d ęŗ™[čfG½·Ź2ŁŻØļræ$©Ž×Ū |t=‹JCŗ1V8ęĢ3ĻdҤI̘1ƒŻ»w“H$X³f æ’żļłąƒ˜={6?üįyżõ×yå•WX°`n·›Ļ?’œ/æü’Ļ?’œM›6įt:YµjćĒē/ł Ļ=÷§Ÿ~:>Ÿ+Ƽ’Ļ>ū “ÉČ3˜6młłł<šĄĢ;—‡zˆ{üćœrŹ)ø\.®ŗź*‘Ż&Ē1½T8n“Ś6V›ŲTcī³NžĘSr}LĶõ2Źčv¦Gśč#ņņņøė®»°X,äęęņžūļóüóϧĻ?eŹŹŹŹ1bŪ¶mĆl6§ÓĶ73qāDęĶ›'¦— ÓKžČt†“xBbw£žM5&¾Ŗ1öø~E{ŅÓFs½LĶńö؛Y­OͶ:=ŪėģmŌuŁ!°74Š#3ŒŹ0*#H©5€V)īä SHIęŗ™5ĢĆś*’Ų“Żif¤ž¾Ž)Ļdo“ŽkO¬&§ƒF n O5ŒŸĖqbž(ŗ,2ØāÜ:·’?oĶćĖĆ×y[_•Ŗ§użōŖ6Ö’Čą‹ĆflōŠ„Į©Ź£ęłÆóŁē辔*­2Į©#œ1ŅŃć2‚p<e p˜CģwjYµ+‡] ]g¾Uŗ4ÜżI ‹KR7ąz2ĆćX‘›››øA*øV]] @QQQz¹×ėM܊‹‹©­­m÷˜MMMé€[˶»wļ&3zōčōrNGYYÉd’P(”øµģc·Ūųń ‚pō‰ ›0ä$’ūZ6V›ŲPmĘ>ņ§¹Ag|–Ÿ©¹¦å{»=%“±«A϶zŪźśnė·U1Ęfk 0Ęęg˜)ŒLd3B1ސoXŽ+¤$•‰KD2ü9ŃęļŪ£%PɓčUq Ŗ8e½*ŽQĆØŠ÷( ÜB.Kßf÷šŸVžµ7 _Įź}æ^[Ź•Sj˜=ĢŻfż'©‹Õ/›EŠķ¦%øvZ5ĆMaVīŹ!ŁĮĖĢW5&ž°¾gJ‹Ä%>ŖČ@¶ÖEŠMč‘XBāßūm¼±;‹XƇßeTÅ8½ÄĮĀR‡(Ÿ =Pj ²bneM:VīŹ”¬‹ ēxBāŻ}™|m7ņ“éUCīõŻļo]ļ1¢Rµ½))—Ė[ż‰DP*ŪæīW*•$ d2Yz[•J…V«%lŻØā©§žāśėÆOoŪć ‚0øˆ ›0$$’»ō¬Æ2óU­‘@TŽõN]ČŌE™–ēåÄ<cln²’Ąa·†ķõ¶Õ(wčzÕE­3&uŒ±¶c³R5¹ņa1Uk‹Ä%ģ>5µ>5vŸŠZŸŠ¦€ wX#Ø$?z’{jy‚C„l}„œęłĘp·šd(¤$‹Kœ\čbõŽlŽ?Šy‘ņPLĘæĘA—–‹Ęׄk¼8ƒ >©Lݾ®3MČPŹDęå±JĪՈUć¹­ł>'¶Õųż†Bnž}…”ä­½Y„ćRjj`µ™óĒ6ōėø…® ÖæĶƚ§æÖķ&GfuŒóĘ6š½BēĢŗ„ž2ŚąöłYwŲĀk»rp;’ŲXćSó›µ%,_Ļ™#‡L}O‡ĆĮ›o¾É¹ēžKyy9Ū¶mcģŲ±m¶5j’üē?łž÷æĻēć_’ś7Żtjµššš’É$’$1qāD^{ķ5.¾ųb«WÆęG?śÜxćÜpĆ X­V6oŽĢÓO?Ķ 7Ü@QQoæż6gŸ}6‡·Žz‹Ūoæ½æ‚ ō‚ŗ Ē“ƒ.-_2³”ĘÜ­"š]éM}¶hBĘīF=[j |]kĀŃGµāZ˜Ō±ę¢÷Ęd(0­;ˆCEØó©9čŅPįŅrČ­”Χ¢)Ød >ö…ć2¹5m>¬ŹeI†™Ā”Z”Xƒ”ZC>Æ“Ź—L“3oø“æ~“OyÓŗŽŪg£Ņ„į§3Ŗ0ŖbümGnz]" Ūėō"Ūm˜3܅VēɍĆ:ĢÄÜQoąÉĆ9gt#o—go®Yi÷Ŗi *É‚ļ"q GP‰;¤ĄVā Éń„£r¢ ‰`TN8.Ė~§ųæ$%Ń*RÆr)AŻ’½šĄ Š£WŰØcdė#dhc}žŃüæļā¢ńvę¶ĶV(k+¬¼¼=Æ[7'”ņ$KJ9{t£hŽ }D"õzbž‡·Ź2yoŸ­Ć×|HՇ}mgŪė \R&uĻ3ī›ĀĀBŽ|óMīøć“Z-=öƒĀĀB,–’–[xśé§¹õÖ[łõƍV«åōÓOēŒ3Ī`ńāżņŹ+Œ=šgŸ}–Ēœ_üāÜwß}ØÕjN9åĪ=÷\”J%_|1§v‘H›ĶĘsĻ=Ą³Ļ>Å;G‡ IDATĖ­·ŽŹŠ+Šét,^¼˜ÓN;ŖŖŖvƒ€‚ ¢‘‚pĢ©tiXWefcµ¹GE”Ū#I0:#ĄIłn¦åyÉŌuļC 7¢ąk»­v#;ź =īœÖ"ĮX›ŸńY~&dłf™lƒ‘+¤¤Ģ”å SĖA—– —–@“ļkōõ—Tē]/'äx™åk7. ¼¼-dty¼\C„¹Ć¬Ž›Ī†’II¦ē{øazU__ Ūź<¶a8ŃN‚"*y’hs–[ĖĻO“sz±£ŁĒ|9µ>5µ>vÆ»_…ݧ¦1 ģÓ÷‚Ī(¤$Yś’f±3…)±)0†{ÕI0–q՛ćPÉüna9½˜šŽ—b ’÷Mn:K¶30=ßĆEėČҵ_W²?¢rœ!%ī°_DN4&IČDåDā‘xźū–²ß&—%1(ćŌqōŹxs5ޱ¹\ĄŃ°¹ĘČ7õF~4„ęØ_šźż*ž’:æ[õެŚ?›~˜ŅŒ@‡ŪrkŲŻØcqéŃ}?8’F - įX%) <‘é&J6T›ł¬ŅBM7;+vD’`dF€łnfä{°j»wAŪąW±Ånąk»‰=MŗN§Śõ„LJ2Āb|–Ÿ‰Ł>ĘŲ‚(įŸć;¬`O£žŻ:ö4čųy8Ų8B >:h壃V”ņ$ć3}Ģ*p3½Ą“ž€(*y…,ńßŗJÉęßa÷©xcwv«•‰¤ÄV»‘XB&žćǘ@TŽ®ŗX“³½Ü:§‚G֍č0ąōŻ,„h\bC•é˜ŗÕłTTøµpi©pj8ģŃą‹ył‚#KJ́æÖÆCjy‚"Kˆ’Œ #-ĘgūŃw£ž™#Ø Ł|ܶšæ³+ŅČ»ę )ylć0öw£YBiF€Ė&Ū)±»ÜöHł" j½©µ>5õ~®°WH+¤ģ4š|$Ōņن(9ś0Łŗ9†Ōæ"sŻ4I*sźY[aeB–Ÿ™ƒ'»Qܲõ~9·‚O*¬ü}gN§å\œAæż|—M¶sj‘³ŻmŽŲĶΧ»åuF£į’ųĒ@C„cœŗ ƒVcPÉĘj3ėŖĢTŗŗWĖ„# Y’qY~¦ē„!tēĪq¼šu²üŽRF0ōHĄ)ENNČńņÜÖvŌwœ)KČxįė|j}j.™`oõ÷ŚPņM]jß’ĻŽy†ĒQmųžŁŽW½[rļ6ī½RB€$_č  !Ó[ $Ħ÷L1”‡Š Üq‘øÉM½K»ŚŽf¾ėŠ-iWZõ¹ÆKXšŻ=ŪfĪyĪó>ļŽZ#£3Ü<ņųE‘Q£Fuõ0z8Šč¦Š­p‡Tl©4³²4‰ķµ¦vea©E‰”)>NŹlbZnSL¹ˆĄöZ3ė*¬l®“$lĮ„UÉ Nö2*=š—m9~įŖŠõøƒj6WGˆ·U'¶l8DAĘ –0Ø%ŌŖču*­ZBƒšED¤8,żaWP…;ØīņVoHŗū“łr2)Ęžv~'dY`m™­WŠnaI¤Ś£”Ź„„Źu!Uŗ“T{“4% ‹r¬ØE™Tcˆtc€ s|›ŸI>²-Į6å€Õy£.žg6ärļœ}'¼ĮÉ^®œPĪSėrg·µ„(FKS»Ņać‹ģn0±£ÖČĪ:ūz¤ĘŽ“ˆH;ėģ¬7ņĘw¤™‚LĖq2'ßAšéH)fa„åpӟˆ,šļƒBLgę1•5éx`u>˱ƒS¼ü~ByBJI%Y ¤IǾ#ūzö; ”»t s²w$²m2Qįұ²4š+eŌDīę¤ 7c3Ż- i»ź£åĮˆČK›³øvri§Œ[”÷dsÓōb>Ū“Ā›ŪÓ[ģ,üéžź}~?¾ģpƒ“ÅŪ²Ā*K·Ż"ŗ)t9¾ČśJ+kĖllÆ5µkŃ£eF¦y˜šėd|fSL„æ† •6TXŁ• ²Qȳłīft†›!)^Ō ½VH õ> ėŹ¬l¬²²§ĮŠ”‹n»>DÖĮŅ d}»!„M&ÉĀ®‹`Õµ/]’ÜĮhžPWCµ'ZUćŃPķÖRćÕ¶«›n½·łÅ°1‰ä6VZĖBžNųĆ"ÅN=ū ; ģsč©ńh»…h–ŖÜZŖÜZØ9ņ{½Zb€ŻĒ€$ƒS¼ŒHs£‹”»c½O‹F”)oҲt_ŅįģæšĻö¤RėÕPÖ¤§Ź£¾§1¼­’Ź;_t+qźŁTeasµ™CWI­GĖ»Óų_Q#R=Ģ-hd`’MU–c>»aIä„ĶŁ\?„¤SĘUåÖ²huA‹ ‘DAę§CźųŁŠŚ6;9eJ›¢R;źĢģ¬3&¤ŪywĮRńm¹oĖmˆ‚ĢĄ$ć³\ĢČsb×ɬ­õjq|­Ć’@a„•ĀJ‹ŅäF!nąōAõŒLsóäś~ŃėN3¬/·āš°`Z ŪjĢl©2>ļl¬°réŲŹNµ‚‚‚B碈n ]‚,GĖ‹V•ŚY]j#i»Cē茶©¹MŲbŲ™oō©Y_ic}¹•Ż F䬿5¢Äˆ4ć2]ŒĖtŜ§ŠłxB*֗[Y]jgW‚Ž’£I҇éŸä£ŸÕO¦%@–9H¦)Šį„t¢ cՅ±źĀŻ”Ēī‡$‘b‡ž½zö7ŁÓhHXŁtmÕGĆš5bŌ¹jŌDŠØŽÓ?„?,ŠˆøCQŻqÕxBŖv‰ęG#ĖŃ÷õūZ•½5œ$°„ŹĀśr+“ršņ˜ĶŃąWóĄŖ–7£&ĀU“Ź“’9£Ž«aSu“éŃī:c—•‰v6’,PŌ`¤ØĮČŪ;Ņ›įf^A#£ÓŻŃģNQ&tšó$ÉšĻM9<˜Z„9† @…’g pϜ½<·1—MU–f+j0ņ—åżŪ¤rŌ”»tä(• ½EtSčTŖÜ:֔YYYb§ÖŪ¾Å~ŽÅĻäœ&fę9)“iŽæšõåVÖUŲŲ“ ”Ŭ0"ÕĆøĢ&Ęg¹ŗU>‘±„$‘ĶUfV•ŚŁZmj± ",Ś0’|ōOņŃßī§æŻŒ£ ;”%%{”ģ¢n„FŸš-Õ6W[ų¾ĘŌ.u7ļģHē³½)ČDˇc%Ų]odDš'”Ļ+,‰l­Žę’m«±tXWaQˆ–ńfšd[£]D“ō!lś0Éś]$”‚¢,C½_sнŖŗW=ZŹ›¢„Ģm}¤P3ßłˆ /mĪfxš³¶c„˜$ņÄŚ~-v"Ļ4¹aj1™ęŲŹIeą€ĆĄ¦J …UJœ]“Ē©WKhD ½FBÆ–ŃŠŅ1ł­G.#²€'ØĀT×x$D$ĀJ …•’ aÜÕaĮķĮ°Čā-Y\5Qé.­Š6Œ‰ė§–šßé¼·3­ŁsR…ėųFT•Ģę*‹"ŗ)((ōJzß*B”Ū-wˆ mE1t#k‰lK€©9MLĶuÄ4Æ÷iŲPa‰ mõĘveÄ"Ķd\†‹qY.†„xX®x*Ü:–ķKbe©=!eDfm˜a©^†§FĖó²-–{ ts’ aę42· ‘$²£ÖČŚ2ė*l²ųƒØx°”ĀBx|÷)1 D¾«6³©ŹŹ¶3½Pdk²&o|—ĮŪß§3.ĖÅÜüF|šcÜUaIą€ĆĄ²żÉœÜæ­J棪™žė䣍¹Ōx“Ē-ę›C&Z֖ŃM–aWƒ‘Õ„v֗[ŽĮ®Ńßī§Ąī§ŸÕG¦%D†9Š©Ÿ_A€TCˆTCˆ©Ē¾fސŠ}ö6Ų×h ØĮ˜.«ˆĄĖ[²øzRĒ1’ޜÅ>‡”ŁæēŪżÜ8­øU»$ lÆ5±”ŅŹ¦* ¾ŽūžŖÄ#bkŗ)ˆE!٦‹DEW]«>ÜęėB(r$& ŃÆ”Ę«„Ś­‹ĘŒ hϦQsÆMHXWnejŽRfŖŠvą’†Õiš|av̟Õ`DąŪrg®ėŲž€pD¦ŖIŁ0WčŻHŻcŖŻ§jŖV)oƒBĀ‘dļjL¬*µ³”ĀBØÄcˆ©9N¦å:ég;qēµ£©õjY_ae}¹•}†v mjQfHŠ7źfĖtĒäŖSčZĀR4”wپdvŌµÆ!‡F”žźaL¦‡į)nrm=[d‹oHÅ'{Sųß®“»P ‚Ģ‚i„m*K>u4ß«ŹĀ÷µ¦v§āÅØ‰.Š­ŗ„ö`ćŒCī˜ŗf}ańpž˜/,vÅDĖU4T2~• Ÿ°1‚F”YtJ©Ę#®Īˆ$šÉŽŽŁžżw ®7£6³gģlóųʚt¬*µ³¶ĢF} n©xŠ«£ŽŠI>śŪ£?=-.@’ö4ŲTķB\Öt¼³$VD®›\’šę'ė+¬<¹.ÆŁæ÷·ūøeʁ³Y÷6X[fgm¹5įnT•(“eŅßī#Ū Ė Ó$ŻģŅĶ‚ˆ$Pīұ§ĮxXh­pėāŽ0k"˜ēg‰:b’taģś0v}čp÷¶D!~õĮ²ĆØ+¦Ę£„Ųih1Ųŗ5šĪ$žß˜Ćm³>?«D™³×1)«‰ē7å°Æ±õFŽ HY“Ž\kģ%E!Id]™…/$³§īiˆv—’ā9č`õ0ĄīėńfQˆn IńrĮČjź¼Ö”Łł¦ŲwŽ£$Į …9-„¾ h‡ŅÖP«d¶V[˜žēHŲx”U)"²‚ĀéŽ×øŽŠ"ŗ)“›PD`M¹eū“Ų×ŲöQ#11»‰i¹†§z[ķāčŖXWncu™¢”Ž&éĆLĢv2!ŪÅŠd„l“;Čx½2MM.—Œ×+‘Ąh±ŪL&£QĄhYUbē„ĶYmvū¤BLĪq2!ĖÅĄd_»ŗˆödR!2ĶŹ›ōhUaIl“ų&*Qj±“d[¹Sŗ˜vdć µ(“gõÓ?ÉOĶG®5@¦9ŠaXĶ!Éś0Éś0ĆR¼ĒüĶT±Ļadoƒ}zv՛š‡ŪēŠ‹Č{|SœÄÜüĘcž–arē¬ż¬.±ńņÖlĀ’Šl•Vr­µ­>fµ[˲ādVŪŪ]:ŁĻęg|¦‹Qén$ūŗM™sG‘j 14ÅĆ®z#u>-RœėOwHŋ›²łćäŅ„ŒēŻi4N<5k"Ü0µ³öˆ»0,‰¬+·ņå$ŠźŪ/“ @Ž5ĄšT7#R= Mõvśw6‘5“²›˜”Ż„,þF#*-¬*µÅ½–V•Ś˜–ėdTŗ»õō1‚*w4G±Ž§Ęį׊äWSļÓą ØhškŚ}~…č{j҆±ė¤™¢™‘¦é¦ht‹¶żīŪ·wd°”ŅŹ³ö'ĢĮļØYYb?&f@ę`£–V$"Į†ŹŽŻņl~*$Ņ+(ōņm¾®BŸA)/Uh3•nĖö'³²ÄÖęüA€‘infę9™”ķlÕżŠVYYSfck•9ęNyĶ‘¬3)§‰IŁN'{z{Ż`7„¤$ĀÖ­Aöģ ±go˜=E!öī įtĘvz²eč™z×,u|ŸC³&¤œ&¦ē:’Śŗ£²/įŖŁ^gdC…•M•Ńq• ǜׄe’ aj}äfų*Aꆩ%ŒĪHüĀ.,‰lŖ4³Ŗ,±32ĶA†¤x`÷Qä£ŸĶßć›°$²³ĪČę*3›Ŗ-Ō¶£ƒ­N%±čŌ"’õ'^:żjž½%›Ā*K³bgžÕĻßęļmö16W[Xŗ/™ļjĢmLՂ̰4ć³\ŒĖp‘bģžĶN:Š{—÷goƒ1ڤōŠkĆ"ųhdL+aL;æÆu^ 7/|Āė·,˜V|ų1j½Z–ķOby±½Ķī­C¤Cœ”įbDZŌ՘Ń¢»³«ĪÄ?7eSėÕÄÕ䥤‹šč©»ižŠ—š…D8 ”8uT¹£?Õn-õ>M‡9¤ćĮ¢ 3(9ŚÄi ŻĒ€dßqī¹–F®ųßDAęұ•Ģ+hlżF1RēÕš|aEõʘbŽF§’ųĒ™;ŽÕzU‰ē szŸ =ŗŽ*t,Ščփ E ¢^Äćšd\~‚!0čd Z0heĢ&$³Lŗ½ż§°$°©ŹĀ—ū“ŁQŪö¬¬Ls€™żœĢČsŅŠ­]’vŌE²7TZńµ³]Ŗ!ÄĜ&&g710†ŅU…ÄS[aĶŚĖ—ųf¹Ÿāāö-~²&f1öб1«%Ęeŗ™žē`L¦»Ē &]$ ;õlŖ4³®ĀF„K‡Z%j„т(Ȝ7¢†ŠRńUĒ/T‚ĢŒ<'æZF]]䰛Ńć‘q¹£ē+³IĄdRa4‚Õ*’œ,b±4ØójX¶?™å%öf4ńn 2<ÕĆšT/ĆSŻ=.Ū+Ź]zVŪXY’k&"3<ŻĆ-Ӌ[ ßHjWV–Q#1%ĒÉĢ~'{[=ž€SϚƒŁķķ$˜j 1)§‰)ŁMōOR„¶®Ąé”łļŽ|ĖĖśõ„NfCŽÖ'Šžj¾ļĖ™]ąą'cuäg)§æXłp üŁĆk©ójŲVcfK•…­Õ"2ĶšŃܶ‡N-āŻi,ݟȇYąė=fī8«9Ž֌ ƒŖ4HƀjFÖ”ė—ĢŠ²d¶“c‘Ń]öŃóG¦y¾鎤‚dšƒØÄę'4‡„ĄöZ3+ŠķĢŹ?¾$Čķ–Y³ÖĻŚµN¼»°i»D}U9rģbš»Ü·}`SoŠOp–āaZž“ÉŁMJēAĘeF…'Y†NŪkM|[n„Ųa@­’ KBLß_Häõļ2¹|\E›ĒRī:q‰—Yęǃź¹ē›mĪfU‰2#Óż} µĮH4£óŸ…9Ü:ć@BĒ49»‰”É^žµ%›ĶU–˜¢*dY`c…5įŸ9øjbÆlĖdU‰=”÷­ Š“€SŌsžČź®JŸBqŗuSĀXæKÅś*6©8P%vȎ›V-3ŖæÄøAfŽŽ00ūŲ…;¤bń–,֕[Ū4!™‘éfę9˜˜ÕŌjłhOĆŖ;kŹlT431•4SÉŁMLŹib€]©Yļ $Ifé–¼įį‹„>‚”Ž9Ż*‘é·OĒ’sģ¦,ÉŌl©”dy õ;ė+C¢(0mŖ– .0qöĻMhŪ^]×ē Ev5Y[fc[•™Ę€Z"p0ÓF%Ȥ9+Ł’Ńn¶ķW1čܑ$ LBPEĻ'rDfĆS©ßQ÷c«õ*śĶÉ'oV†Ō¶7PI2„‹#ŅŚČČbÉČP1xš5  fŠ`5śkŗT˜k ØŁ\e¦°ŹŹ÷5&åśŃF7CS¼¬,µ×PE§–xąä¢sˆzB*–|—ĮŹŅ¤›¹Ą¢SД﵂‚BÆAŻŗ‘|YØęõeöUvIJ„IcTTŁób¾F”˜œėb~ACLå£å.=+KlķH6i"œ”åbfžƒiž_<"”ˆˆ/¤:¦<€A#óų*AĘØ`цŃuR[ę ·Ž*—–ńY®Ny¼£ …d^_āį©§] [xwÉÉ"æū­…ß^an13LįÄx½KŽšņĘn¶l–dŖ jR‡§’22•ʵå4 jVŌ žé`śĶķGÄęĖ—ÅUb:ä’†0ąōqŃ؉0%§‰éy†(SŽćhŃeS•… —M Ł}²$S¹¾’’ÆKpģO¼;B&/˜LŅĄ¤c~ļ­óR¶¢Œ²Õe]Ķ/ŹrsÕ\ü+—żĘ‚ͦ¼ŁńRėŃRXiaŁN#•!Ėįļ§ ‘#2„+Kپd{+÷rb“żfēaŹ2įŲē le)‘ Ä¼…óŠŁ›w¹«™‰9MœÜ恔)­Ļ3NL8 æ“ų“PĒ®F rv½ŠęNв$³ī‘u4ī‰=lßh˜8QǜŁ:fĻ60z”QģŲļa…KǦ* …•ö4&¶Sõ‰°éĆ$ėCŲõįƒ?!lŗ0I†0FM­JĘ Ž UKčT2µtLgō@D8ģ. †¼vm€›omdēĪž•ž®āī;mœwžIebĄķ–y}‰›'žtQS’ēךg%oVŪ’³ćøœÆ–˜pĶŅF„µzœ–ØŻVKÅ·åųŌsĮ¹F®ż£…ŒŒTÕEŻ·ķ  9" DB•ŖŲ÷É^<Õ›õ¤Ņ©čjģģ]A*×WR÷}r+O“Ią—æ0óĒk,df*ļ{,ģŚęƒ<,yĆKYY•V$yh*écŅH?)E‹,ĆŚEkpp&ģqž9ˆĮ?tÜļ?ÉĪjΟģbŽ4åÄÜ™O?óóÖ[¾Yī'8ņKž…¬ń™¤OČĄ”j"Ž ŖEA| >V޳‚HØmå÷II"giąüóĢLž¬MŲõµĮÆfm™Õ„6JœśÖo'jQ"Ē$Ó Ė Ó$Ėżwg7g ˵-eN{ ģk4rĄ©ow<ĄŃØ™ßN(gznā¾×'ĀYņ]ß'!Ÿ`»|H²—;gļ§±Q¢¬,Œ³IĘć‰6[r¹$NĄn1™DŒF›U ?_ƒÉ¤œ#ŗŠčÖE,Ū¬ę™÷“Ō8»ń…Aȝš‹Zwü"E%ʌĖt1树‘éīŻe² E FV•ŚYUj+KäĆaP²—™y¦ę8Ū<ŁqśÕp(wi©vėØrk©tkŪÜ "‘˜µ‘Ćķßū'ł”ģĆ¢Ļ1öŅęl¾>D¾ŻĻ½sö³«Ś46Jüķ~'ƼźīQ¾Zcś4‹&1th×.ŗ#‰§ŸvńÆ»q¹:?mųłĆȟ_Šģßż ~JW”R¶ŖŒ@Ó±ā³Ń(pÉÅQ&-Mab!ŲYgäŁ½|ųJ5¾Ęž—¢×Gß÷ ¬$Ł7ė‘eųr™ŸĒobŻŗ–ß_s¶™”a©Ōl­ĘW—øĢTApĘ@ņēä”2hhŲYGÉņ2꾫=,“ŽÆåśė¬üč4ƒ²1ėÖxó-/’żĄƒÓŪEZoב:*Œ±¤ KAP ¢Ąž„ŲõĪĪv)?_Ķłē9’<łłńW:xB*ÖWXYSjcg½)asµ(“k PmŌ?ÉG®%€Z쾓I(oҲ«ĮÄę* ;j­f¦µ†A-ńĄ©E’ø«ĪČSņpUĒęģÉ2ļūŠŚŠųKLs²U Øaą@5C‡h˜:ELjå|”  Še(¢['S^'ņŲ;Z¾ŻŃ3z:«ŽōQiØ“ŃIQ$!OćäŚyudŪ[v4¹ƒj¾)¶³lµŽ¶'ÕŲüLĻs05· »>>•;Øf_ćĮš 4“³jg“f 2,ÅĖŲL£ÓÜ­Šw==jQā¼5üxP}‡ķ­·<Ü~gcĢłXQ«ś÷73dˆ…ĢL=&““I…ĶĄÜī0O'LuµŸ}ūÜģŽķ"H¬ų£Õ\½•?]oķQ”щ,Gß÷{žā¤®®ėėõIz¦ß> ­åH)š,ĖŌoÆ£ä›Rjæ«mµ\ÕføéF—_fQŽßVŲ²5Ä-·4Pø©ēgģ$ŁE,°rÅåę/wė jxóČ#N6mī9ļļ°a®¹ŹĀŁg›P÷¬Ėz‡#ĖšŁē>{¼‰ĀĀö½§¢Z$ipi£Ó€oīHĢ • ~ś#×]kaĈ–牲 ß՘łŖ8‰ĶUęĆe™ķAƖœāexŖ‡a)^ ģ~Ō=¼‘N "š}™ĶÕŃlFw0ž‹›Z„1.®ŸRŅ#<Āę-AV¬š³jmˆź”~äĶÉG&- Ilū×VŖ «ņXÉÉ"3¦ė™9SǼ¹z ”“†‚‚B甈nDD‚W抰ųs ”pĻšä‹¢€Ę¢f'»‚ Ėd$ÉÜra€‰C_tļk4²t2ėŹ,mŽmK1„˜ŃĻĮō\g\%’ ~5;jĢŃ.UõFj› ‚E™!)^Ęfø˜å"Żtģd:øņĆᇻ1©E™ūēļIx­Ļ'sėm,y#1„eƆY™??9sŅ3ĘĘĄf4šų>;‘ˆLq±‡ķŪ›X¾¼–e˪ټŁA$ŅžSܬ™zžy:¹Ļ—$īŁę–[Y±¢{4)Ń'é)8„s¦ gqå«ĖńÖşó4z“–&1aBļ:_$‡SāĮ›xé_."½¬)č”)ZX˜Ģšį}×ĶŗzM€[oėŁ±ƒiųūżvfĻN|iaO搀śŠCŽĆٚ=…ٳõÜz³‰=»ƒ*VŪYVœLµ»}ēhJfhЇa©Q”m€Ż‡Ŗ»ŲŚKXł“(™ŠŅā.AøzR)“²›:¦ŠŹ0ļ¼ćåõ%öī=ÖIgļogĢoĘ KÖ£R‹T¬«`ėK[śų‡;FĆyē™8ēl))ŠóYAA”cQD·N Ń-š×Wu¬ßŁ»ģ‚ēĢ qÕĻ‚ ˆV™łlO E mĖjS‹£ę“MČtÅ4rśÕ|_kfg‘õ¦vOČz04ÅĖ܂F&å4”%V–ŚyiS6įƒ}•(“oóóēŁūf«ßµ;Ģæ­c×®¶OčEQ`īÜt~õ«|N?=“¬,Cb÷ƒ,[VĆėÆóŃGķrĀ„„©ųĒÓÉ}ra‰ĄĆ8yģń&Ā ®6ÉĪ60t؅!C,$'k±Ł4X,L&5¢u565…hj ćpٵĖÅ®].ŹŹ¢.ŠWžĪĢwŲŠjzÖĘHG±|¹Ÿ?\Ż@mmāŌ6›MĆŠ”†µ2t؅ĢX­jL&5‹›MsŠÉżq:C”•yæļ»v¹Ø¬L\9£F#pŪ­6®¾ŹŅ§Jzc,Ąi§X“(‰œģŽ5׊•-[CÜ|sCr+žˆÓN5°paƒ…/“oĄŖ sR¦›ń™MŒJw£ķ¤¦V]Ķ–j īNew½A€8śF£’xüGE˜ćŒ9ł!į0ü÷ƼāaĶŚ@‹ēQ-2ąĒō愿a¾\°,® ĻxŃjįŌS \~™…™3šo⢠  ŠŃ­ƒ),Rqß+:ź›zēl^„Q1hŒU’oømŻ~6?sņLĖsÄŌH Ō©cS••MUö9 ½fĮŠLš3ņl©¶Rķ9Öµ”e.UĶiŚ_fśé§>~U=^oŪ^ōĢ\qÅ~õ«|ņņŚŽH£-44łĻJxńÅ}lÜ{¶£E»īŒ.Šū ÕÕ~’‡zV­n†—ŃØbƌ4ęĶKgīÜtFŽ“bµ¶Ķeäv‡Ł¾½‰o¾©į«ÆjX±¢·»żŠąųqZžł| yy}·ō$GuņČ£Mķv·Y,j¦LIį”S28å”LʏOj·øU]ķgłņZ¾ų¢š•+kپ½żNŒŁ³õüćéä^Ÿń'ĖšņĖnžöwGĀc!`·k1›Õ‡£¼Žh€ĖR„¶(1`±ˆÜrsß*>äF}ń%w‡½®‰%Ē̘KGcégkó}äXüŒĖt3>ĖÅĄ¤¾Ł©zįŹ¶×™P 6Ļ•'e9łć”²6Ż6’y’=/>Žtœ«­5,9ņfē±ć?;āźlŽFÖrݵ~r–±O~f:Etė@ŽY”įÉwµmŚ]ź ˆj‘ģ ŁØ ń/NMšÓóĢŹwP`k¹T-, ģ®7RXi”°ŹJ·ćKlśp“ķ»>„M!ŁĀ¢‹`Ӈ0Ø$“jép+xJFÆ>ā  †“€Čą ©qUø*Ü!OPM£_Mµ;Ś)µŃÆ>aĖōD¢QÉ,ü°¢M·’ķīū‹­×/ź¾žŚĻU×4“+»ĶbQsĪ9yüźWłĢš•†VŪ1eį°ĢŖUu¼žz1o¾Y‚ĆŃv'¦Ż&ņŲ£IœqFē ĆŻŖŖøŖ}"«ŃØāģ³s¹ųāN>9•Ŗcæ'Ū¶9Y¼ųÆæ^LEEŪ]pŁYjž{6…)Sz§cŗŃ!qŻu |śYbœ‚*•Ą„ IL™’°aV† ‰:Vūõkż{sȽø{·‹;]¬[Wφ „Ɖ¹Οoąé'“{}ŁŲŪļx¹ó®FŸC¦Ó‰ hĘn×b2©±Ū5˜ĶjB! '‚ĖĀé QW øŲ›ĮO­W1ėŽYčlń;ŹS !¦ę:™‘ē ׌ó½tĪ€šļŖM¬Æ°ń]­™ˆ$ r“B†» DįŚ‰%LČvÅüø”Ģæ_vóŌÓ.*+{^.Įȑn¼ĮʙgvL†‚‚BßCŻ:ˆ×æŌšģ’zēÄżö;ö{ĢĒ ŒLs3»Ÿƒ Ł.4-„ÕŹ@Q½‘Õe6Ö•ŪŚŪD–)@ęZĄgZč:±ü $‰Ōx4T¹“ģwŲŪ`dæĆ€7”øÅ‚ZģćŽYūc™cĒćOøø’ļŽøwJ¶°hŃ~ö³œn)P­\YĒĶ7of͚ų]€ēžkäńG“ŃōŅRÄ<ėāŽæ8Ū¼š=;ßżn ?’y.Fcēŗ‡üž’ū_/¼°Ļ?o[³ Ą‚¬Ü|SŪŻ=]»B\pa•ms ŽaeĮ‚aœw^Kē;#™/æ¬ęńĒwóÉ'•mrvh4?–̹ēō.ĮuƆ 滲޲ņö-€ Lüüē¹ĢŸŸĪģŁimvŖž—+ĢņåQēźūļ—³wÆ»]÷—•„āŁ¤0mjļ+Kt®ŖŻ®aöģtfĶJeäHC†X((0Å,˜ūżvļŽ–oŪę䫯ŖY·®`0>10kbcÆóń&M„I9MLĻs04¹o:Śb%$‰ģ®7°­ĘĢŗ +u-•D(Ņņ\SLŚ0œŗ'¦j”µkÜ|kĻΉ<ÄĢ:.LbČą¾›ū©  Ń-ĮD$xģm’]ŻūK“҆§bŹ0·zœYaVƒ“ Ž ž’!å.kJm¬.³'ŌѦWKäŪüōOņQpšæ™ę@›ØĪ@–”Ņ­cO£mÕf¶Õ˜ń†Ś'\ØE™‹ĒT2Æ ¾ŅŹ{īušĢ?bßį0TÜzėpn¹e8:]÷vČ2¼ōŅ>n½u+uuńķŽŸ<_ĻĖ’NCŪ‹ōuY†‡vņąCm+Ł›1#•{ļÅÉ'g$xdmcĖ?¼‹×_/nSS /0ńČĆɽ¾;bį¦ æ¼Ø¶MŽ™±cķÜpĆP.ŗ(æĆ]m±²u«ƒ‡jŪū.p÷]ö^SFžģs.īū«“PØmÓ=«UĆyēåqÉ%̚•Ö)†,ĆŖUu¼ņʁv9WÕjøõ׾њąv‰ČU=ŚĘ/~‘Ļ)§d0~|RĀæ»O˜U«źųä“JŽx£„ŖŖÖšäLĖaō„£[«  Š}QD·"Ėp’Ÿ­ė嫳ƒŲņm$õOjöļżķ>NŠĄ“'šœcސŠ%6V”$QāLLH½]bDŖ—a©§xÉ2…žūQH»Œl©¶PXiisĆ­JfŃ)E¤b›¬?ņh 9ćzŒłó3xžł‰ Ųŗ ŪØÆ²`Į&^~ł@\·ūŁO <÷lJ·tņÅK8 7,hą’Äļž˜;7‡>‰ńć›?'t%ßļäĘ·šé§•qßöĢ3 <ūL :]ĻOÄēK}üöwõų|ń#óóM<öŲ8žļ’r:hdķē»ļœ\sĶF¾ł¦6īŪžń+wŽaė±īY†»’ģą¹ēćŪ49D^ž‘oŹW ģt·źŃųż^zi?<°“āā¶9».½ŌÄĀū“QõšČ¾’~ąćŚėā’®"=]ĻEåsÉ%œtRģ• ķ%–łüó*^}õļ½WŽßbǔΦcö}sP † ä įŚ^Éæš2mTĻ+YģĪ#E F–H¢°ŹJ0" e‚Ņ‘“Ÿ(Ā SK“~üłä£|üé†ĪÄ  ¢(Ÿo<Üt'7×€ÕŖĮj6Z2Tø\!<žh^dCCābO‡4Ü0@ĆóĻ%3ft/ŚeUPPč4Ń-<ó–7–õ ²ØČ—Ętä9Ė’Œ§Ęƒ·ŹÅ}:™4¬ł‰Ń~‡eū“XSf'iߪƦ 3,ÕĆšT/ĆŅ.’m]\YZ­Č‚C¹óĪ‘]*ĘĊ,Ć«Æছ¶P]ŻŗŪęh.æĢĢßļļžBrK„B2×]ߥŪļÄßåwĄ3·ß>œ‹/.č° Ę¶ I¼öZ1÷ßæƒ¢¢ų…ijĪ2šģ3©=֙üŅæ\Ü~GŪJžóóMüéOCųŻļb0tķw¶¦ĘĻ3Ļģį±ĒvŸš:›>6Ń—Œ><·tpRņM U*‰„$ģ6‘W§õŚģÅ®FŠz¶VYŲPa”Ųi@£’ EĄ¢“xš”Ż4Qq-„{īmäŗŚļn3TLŸžŹ¼yéĢ›—Ī„ ÉķŖ”p:C¬][ϲeÕ|õU ……mr»V ¹×Īeæé.h…ĪCŻĒežńAߛ*K–QCČĀ]ķF G/ĘF½Ģ×ų’{dē+XSncپdö9ŚPšg 0.³‰ńY.śŪ}ݶT4‘xB*¾Ų—ĢŅżÉxƒŖhnøģ¤ ę¶PfśńĒ^.’m}Ģ ³³ ¼öŚTęĪMoÓxŗ»v¹8’üÕlŻźˆł6·Žbć†?õĢ&Y†kÆ«ē?oĘ·@æüņ<ōŠIŲķ=k³Įć sĒŪxā‰Żq-N?ŻĄæ^Lķńn™C¬Yąü j bƌ±³dÉ4FŒčyŸu‡#ÄUWm`ɒ’ønwĖĶVÜŠs²ż¼^‰ß\^ĻW_Å'0 *n»m87ßܽc‚A‰‡ŽÅ_’ś=^o|ާ™3t¼üļT,–īūüNÄĀEŃnĀńRP`āž{FńĖ_öC£é^Ϲ¾>Čćļę‘Gvįń«ś«“"Ö~6ĪŽŚćÆKƒĄ ’LįŌS” ūŽĘT³µŚLae4źäŠqLŹiāĄ0滲žĶ[ŚŽ K§łÉOrøä’N;-³CĻ;Gˆ÷Ž+cńā,_^Ū®Ę?9ĖČ£$aµvÆļ”‚‚B÷EŻĄ²Mjī]¬ėU‰"É"óĀ©v™ŠRłxw*ī6f“©™aiĘeŗ—ŁDŖ±ē‡“ĘĖŖ;Ļf## 2’Ü6ŃM#JŠ#FXłģ³9äęö®ąq'Ģ¹ē®Ž«ń…¦šÓŸō¼×įžæ8yę™Ųt‹šüc"]”߁£źxž÷æ ~żėoihˆ}ŃpŽy&žz"¹GøśZbĒŽ?ūæšøŹ.¾ø€gŸŲ#Üm-±xńžš‡ q 6÷’-‰+.ļž%óĮĢŗŌÅ-øqFO>9žŗ’sŖÕšų£Éœwž©ƒF¦Šß~äāKjŪ\N:|ø•kÆĀä‘”Ōł†…’/‹ą©§Šāv?bŠ@5ož'Üܾ)¤  Š>Ń­”× \ń°OŪĪŁ}‚1"œö#3oļˆ?X]†¤x™–ėdr®3¦ĪI½wHÅöZÓĮG ސ •”8\o¢ 3"ÕĆĶ3Šł½Ē#ó£Ó«Ł]› 9iR2<›ŌŌŽ×¢94W^¹ž—^ŚÓńf³ĄŅĻ28°ēLĀžy¦‰{ž{nßŲ±vŽ|s:C†ōŽņŠāb^ø†µkcļ`ū§ė­ÜvkĻq>ż’’gž¤šźźŲΧF£Š^˜Ģ/~ŃÆƒGÖylŻźąœsV±gOlb†J/½ŹÜ}5mq¬źt"‹åŗė†tąČ:–Å‹pÕUsKµÄé?2šŅ‹©Ż¾AŹ]wǟÉ7gNĻ>;‘aĆz–õ£*øśźĀørūzĀ÷²·ńŁē~~we]›r»[ӝ`Pā7Jøļ¾ļc¾MF†Š7^OcäȞåöWPPč|Ń­„ĀxLĻī2Å^ÜCēåcŸŻęXLĻs2=×AJt“Ŋ,Ƨķµ&֖[)qP«dĀ’ŠŖóR%ČüvB9Ós.W]]sŠ~”É;ļĢĄdźę«–v"ĖpŻu…<łdQLĒ£į£3{DnŠ—Ėü\ō«ŗ˜Ė,ęĻĻą½÷f`µö® f qńÅkyė­Ņ˜oóĢÓ)œ{NĻs5ƒpęYUlŁŪy5)IĖĢbęĢŌYēS_䬳–Ē,øšLŸ–ĮąAŻóó÷Ÿ<ū\ģĶąĮŽ|sz§źw;v4qĮ«Ł¶-ö „K.6󊃯7Æļń'\üķžŲ#zC®jSSˆ+®X×¹X§xó?iL›Ś;7’ŗKŽš°ąĘ†ø2@ 2óč£ć8ė¬ģŽX; %^xaw޹ĘĘųŹe•ŒA…XPŻtćå÷tõ z*æ«eÕw½[pH¦<;B+Ż‰¹ \vR%ē ÆahŠ£Fiß‚Iś0CR¼Ģ/hä侍䘿H4ų4Č-$ŻÉ|_cfv¾½ZāÕ×<<śXl%†S¦¤šŃG³{½ąŃ×ųōÓ³(+ó±iSė%Ŗ«%šš$N>¹{ļ¼WVF8’ĀZ¼ŽŲ·Ÿ’<—wßķ"«Z-pöٹTWūŁø1¶ę!_ćēĢ3 ¤$wļŅ­rē]|ņilÖģ¬,K—Īeņ䞯$¤9ŒF^ŲĀĀFöīmŻå Įš5~q” µŗ{‰’xÖÅCĒ^"~ĘY,]:—üüž'Ÿˆ“4—\RĄöķMģÜ›šøekµZč–bĶ[oyøķŽŲ„§ėy÷Ż\~ł€ŻI[§SqŽyydgųüóŖ˜‚ļ#‘h÷Ģ“ēHOļYēćžÄ /ŗ¹ł–F¤8¦åz½Š;ļÉkÆMeĈīėW©&MJę7æéO]]-[b»ż™÷Ž÷2q‚–üüŽ7?RPPH ŠÓ­lŁ«āŚ§ōķŹqS«.<%…S&ŁČJÕ¢U Ō9C¬ßįańǵT5q"\{^&9éZny:}ć/³˜:ŹĀwiGhg‘6" Sś‰s7ņķ~N.h`ZžŖū?—ž‚$ ģi0°®ÜŹŚrM5*A&rTœF”žęį—{™1³ §õ×äHĖ—Ļ'9¹oķźE"2矿šwß-‹éųwŽNcÖL}Ŗm„Ćpö95¬ż6¶.æW^9gž™Š£s± ĖpŪm[Y“hGLĒ­åćÓ{D6D¦æ¹¼.¦cūõ3ņĶ7ó)(čżyI€Ä¹ē®āĆ+b:žŅKĢ<ų@÷qHłÉĻj…b»~^tQ>’ś×än¬Ÿ"™«®ŚČóĻļéxQxóTfĻī>ēź+ż\pamĢn¢qć’ųųćŁdfvŸēV®¬ć§?]³ó(+KŗK3HMU„·DóĪ»®¾¦1®ęÓ§§²xńģ99‘‡X±¢–‹/ž6®Rg³Yąż÷Ņ3ŗoĶb£÷Ķø:P~³}T*Ž6€Ū.ĶĮ博ž7 ¼¹¬žŻ%~.<%…w” ėČīkNš–9G&TˆÕŌ±‹ŸĢLāóLJ£JĄB»aOAב‰“F”˜™ēąĻ³÷sßܽĢ-hT·# 2CR¼üjLOżxZÄ/FW3<̓JQ‹Qnkµ™«oōÄ$øåęłģ³9}NpƒčwöÕW§2ujJLĒß~{cĢ‹ąĪꁝ1 n^ŲÆOnu5.\8†ß’~`LĒoŪä®?Ǿ#Ž•”•…¹ž†ŲŹ(SSu|śéœ>!øA4×ģĶ7§3cFl%“//vóß|<ŖŲp8%~{e}Ģēš?žq0‹O镂DĻÓĻ=7‘… ĒÄt¼$Éüįź†˜ó ;šŗŗW]{łŽœ9i|õÕ¼^'ø̜™ŹŹ•'“—›³²2Ā•æoˆ¹ėŗBl¬XįēŗėbÜ®½v_}5ÆG n³f„±eĖ8ļ¼¼˜oćv˜A-{öĘY{«  Š'PœnmąÕ/“<’aū2]~>'™ūŸĒOóŃźcmł™:Ž_8„/76qć“Ń ūEWõc`XDœ IDAT®žso߯®Ē‡_œšĀŻ—å2ꢭ qÓ €!YĒuēF˜=ŲIiŠŠe"ŃŅŅĶÕ>^błĆ…­ŽF­ųź«ł½2Ū)ŹŹ¼Œ÷9uu­‹Vwße皫»WƁ­Ū‚üčōź˜&óēgšńdzŃézē½9$IęĀ ×Ĝ+Ō]‡øų’Z>ū¼õ²R£QÅŅ„s™>½ļ}ĻĪsē.cóęօŌŌT«Web·uŻwC–įŅßŌńé§± €×\3˜'ŸßĮ£ź>Üyē6žö·ķ1;s†Ž·ŽLGՅ&)I’9’Ā:–/­üūē?Ļåõ×§¢×÷ngWq±‡ÓNū†Ż»c+¾ż6×_׳šHtW 79ēܚ˜6e’“µ¼ņŹTĪ8#«ƒGÖ9Č2<žųnnŗi3įplÆA~¾šž—®”:+((ƒ’é'5‘»’­k÷NŚ5ēf Q‹ÜżĻćK՜ī£ŃßČ«ŸFKNd#ŁŖęĶ/£N…ŸĪJāĀSSłfӑ —”żō\ł\zF?Ÿ“ĢœńVlf5»Kż‡3®>'ƒŁzĢFWŸ“Į/OKeī8+&ƒŠ]Å>d`ž+מŸÉ“QŅ’4 ĢÕó£)6DA`OYūŚ“†|<Ī?¦4GčJŌ"dY‚ŒLvńÄm{ill=¤ćžūĒšĖ_ęwĀčŗ7V«†Ń£m¼žzq«Ē®[ąÜsŒŲŗpa~4’$óėĖź©Øhż6n\Ÿ>£±ļMAą§?ĶįėÆk()i½±Č–ĶA.ž•¹Ū†—ś©/¦¼/A€wߝÉÉ'Ēßiŗ7 ×«8ė¬l^{­¤ÕN˜^ƌŪ-sź)]—ŻųÆ»xö¹Ų:ī]|qĻ?? ”{~D;„yó2ØØšQXŲz6ZIi‹Y`Ҥ®Ėw{ųÆ/‰­œķ”S2x÷Ż™½^p°Ūµœ}v.ļ¼S†ÓŁśÜqõšS¦čČļ§äkµ‡śz‰³Ļ©””!¶·¬,_~9ÆWmĢ LšĀō驼÷^Į`믅Ó)ńķŗœoź¶s…Χ{¬{Æ~”&_c›’Ÿ©cwIó»Óϼ[ĶÆ6Ÿ/3“Ÿ¹ćģäMaęķū‡0q˜‰²Ś ;Š}hTw_–ĆS ś>nŅp3æżY:\ŻPbO™Ÿō$ »2kĪĶl’‹M{TīīżŞĄ /ŗŲƒžōÓ³øé¦a0¢žĮœÅ7¶žzų|2‹Œ=ܼ£yåU……­ŸĄĢf5K–LĆlNä­·fÄT¶µkw˜ēžMüčl|>™;ļŽ-ż¦›†uŪīrEn®‘7ޘÓbéåű}Ÿ:‚ŚŚ_[§Ī3ĻĢęÅū–ąŃó?ž1‘sĻ­DlуM”–vMiŲ–­!~$¶÷sźŌŽfŸr ēäų䓣¤¤“m‰Ąu×5ąõ*øŚŠ,ĆõŖ§²26‡Į°aVÖ®=…Ń£»o³„öpŹ)|łå'ƒ­{¼\|ļŽ®=g^2ż]ƒóō•F]j)V5§]æ“ZǑÿ’!sę%óÄ[U,ŪŲIJMŃņŅž¹,x¢8įĶ/Õ0~ˆR^Ś•ƒšģs­—k*ž}¶odzÅĆ_’:š>(g×®–_ĆwŽń°ąOVś÷ļŚÓmc£ó"ż¹ē&2th÷*‹ķ 23õ¼öŚTN;ķ›V»č=ų“ŸżŌ@^^÷ŗ¬>ņؓ’’Öϵӧ§ņ׿Žī„uęĶKē¶Ū†ó׿¶\š(I2·ŻŽČ'§wśłńī?;q:[æ.dęõ×§ž0Ćm×®] :€P_|īŸ dee‘••˜’1Y–Ł“i²,3bÄ †Žs ŖTƼ2…¢"W« }>™?ßėą„:ש#I2·Ü[ŁšįV>ü°ot’!‡žūÉ'…×Ūņ‹UVįįG\Üugļ:š'ŸjŠ)Ž¢®ų„KēĘ$ˆöd&ONęėÆē1ž×ŌŌ“žŚ<ń¤‹iSuĢ›×½£'‰;Øb龊zį¾³) pb4¢DžĶĻü‚FRŒJ…[ß»j·ƒ%_i$č3£×‰ųb°)ĒŹˆžž|«šjc_oŒī“ Ź="ŗ­ßé9Fp(Üååg³’Q©„˜Z“·—Ā"Ūö‰Œ ģDvÆ½ī¦ŖŖõYž½÷Ž"?æoŖĒƒV+ņä“ć9ķ“oZ<.gžmāĮEɝ4²óčcM1•‰\yå@„Œų(ęĻĻą¦›†±paĖM}>™‡nāńĒŗö}>šŗŗHL<›Mƒ%Ózmø~[øēžQ|õU «VµÜķuÓę Ÿ|āēĢ3;ÆĢtĶŚļ¾×z¢^ÆāĶ7§cµžx³šņĖ/GE–/_ĄŸ’üg/^Üģż„„„ńč£rŃEµmą¹ćŽ;ųūß’ĄęĶ›;vl\·/**" 2räȘŽ?ō:Lœų9.WĖN¶?ō±ō _§– æņŠ—ĀM­;&M&5oæ=£×‹-1uj O>9Ė/_ן±Ļ=ēā‚ Œ œ˜Ķņ¾Āŗu.ŠmƒnŠ sĢÄŽĄČ‘6>žx6óę-kõ\"I2W]SĻW_f’™Łū«{ŖÜ:ž¶¢g@‘ް¹ŚĀūSX0µ˜!)­Ēµōf”vŒø|’]•ø‰Ē'”IP­æJ%`Ņ«8o~2/Ż>ą˜Ÿ‡®.žś#oµŪw¼Š"I2‚¹Y’ź}ć"Ż …dž~¦uėūȑ6®»nH'ŒØgrź©™œsNn«Ē-Y≹L£#hl”xåÕÖŗĢL=‹Å·ī Ü{礼œoæćķ²ņ“ńģsnüžÖ7Qī»o4żśÅÖ!°ÆpØ f,BäƏ:ŪÕĶ<"øłę†˜ļŃGĒ1n\R\÷Ÿ™™É† Žūłč£0`æžõÆŁ³gOG/¼š .ä‚ .hó}<÷Üs<šĄqŻfČ O>9!¦cļ¼ĖŃi§%ž¾(¶ČĻ<3#”—]֟K.)hõø`č’Ł;ļ°¦®’æöވ,qo÷VŖ¢ÖŖÕJ+¶Śž“¶vi­ÖõķŠj]ÕV±K¬£"®ŖmµĪVÅUETĄ2”½CņūƒMIr$€’×óų¢©«QÓ°m]³é»Įœ_b±ˆż04ŌēkTÅĀ…mps5\±R÷I³e2X·Nų»lffĄŚµµ~žf͚!‰ˆgńāÅ4lؐ¼<Å0×k×®aooĻ®]»¶_½z•±cĒņŹ+Æ0ž|­÷MSV­ź Q˜µk³‘j9—ķIM-eĒįp›† ĶX½Zū÷óiʐ®åR¬I'źÓLāżRVÆŃģ9öõםéŠĮVĒ=ŖŪ¼ür#6ę|”AQѳū!Ģ)#‘źĒzŌ“QP材õūŻkHbšˆńڇGdņ\^ p⧃i ū¹˜Š·£]\—w搾6ürō”Āą¢]sV½×ˆĄ±$¦V®ŹZ±¤ģ@fb²ót3‰üż¼!/Ō'W¬I’’%œ ž,Ģ›×ŖzólšŃG-ټł‰źAUzz)'NÖh® €-y‰/«VuØ”=½¬Xсżū“()Q½ˆQT$ć»ļs™?Æöx—”Čųžįœ_£G»Ó½»C ōčéÅŹŹ Z3uj¤Śv‘‘Å\¼XL§Nŗ[É=|¤® ?»?žøŽŽ–Z?JJ 2™ KKKFŽɊ+8tčcĒŽ•· ĆĢ̌^xA¾-))‰aƆįėėĖʍµŽÆŹąīnĪ‚­™=ūŠŚv1±%8XĄó#tēŽX·>G£‰ųš5õd%ųśŚóĘŽĒ©mUĀŃc… XæĀ +ĖĒgŸ/üyœ0”“'7®Õ}V­źČٳ¹|Y}é;Ö­Ļfę ķ ŠKEHe"L ėž© S#fŠ»ßź+!ē Ł~±Ø¶»Q§Š‹nšūy#­Æ’żžÉ ?ęLpeL?{¢nP*•ŃĄŽߖ–dēIXµ#YććmܛŹ7z±óÓ¦\æS@Vn)vֆ ōµęƽ®Ż®|ņĀč»ČdšĆ¼&\¼™ĒĶ{„xTéćØćī1·Å4sƛ?Ļ";wę ®ą·mkƈn5Ō£§Ÿ&M,yé%O¶n½§¶ŻĪy5.ŗż²SX|yį7Z·ÖWyĀĖĖ‚ ńćwŌ¶ŪšĒGsm0Ø%#ļŃ£…¤§ /”ĢŪ²zóō3iRc>ūģ:ńńźGŁ™§SŃmĶZįäę>>–ĢšÕBėēĪĪĪ–;ŌśõėG§NhŃ¢aaaD·#F`eUv–››Ėˆ#°““d×®]Wīś\¾|™;v(l;uźĢ;Waū°aĆ读·ą1ßæ?žx‡čhõ®žÕk²1\uDBuŠ4Ļ¦ææ cĒźČŖųā‹vģŁ“HZšśÉŻW+³ō¢›Ī+ā÷?„Ćp›6µāŪo}k GOåEZ:vž=zt>¼TNż£ż™“T3ÖŽcŚņ;DŽČĆĮʐF.&•ČX·ė#gß"į gŚ?qł„_}ģ|»_Ą‰‹Œ§.góŅ'1\ø‘‡½µ!š™cge@š¾T&.‰CņoEŅóѹŠłŻž%1­˜ßĻf*„³^æSĄōÆīp/¹ˆVĶpsŅĶdāļkśӚ$4TX€6ĶG'g™·ŽĪ‹õū…‚®3mrér17n;Iõā‹ęĢ›× "8”ņ÷ßµ—Ćeē.a”5  !;W.É~}ÅČȞĶŪķŻ›Oqå åsõj1‘‘š9”5Iš­ŠÄÄDģķķžY[[cccCHH~ų!~~~rčŠ! Ė>ė·nŻāźÕ«PZZJ`` ‰‰‰LRRVVV“oߞ‘#Gbm-\]¬Ŗlß¾ģģl¦NZķc…‡‡³oß>µmśöķ+ŸL*C$‚ ¼X“蚦ćœ>]X#¢›Dūö ‹/U©pXߙ:µ‰ čvčP¹¹2,-kÖ2ŗoo ŪŖys+z÷vŖ™=#˜›šņĖX»ö–Śvæ„j_t“H`÷aŃmΜ‚•”…°““dŹ”)µõńń”K—.„……1räHvķŚÅ‹/¾ˆ‰I™°qłņe čŽ½»ŹctčP–KrēĪ aŖŗĘĄ@ÄģŁ-xćójŪķŪ[Ąg’ƒJFÅŖåŌ©"’’Õ‡¢‰D0gŽ^ׄ2'j3Ž{ļ’Śv°ō )ÖÖś Ÿ'Yµ:[pžceeČņåś¼ÆŖ04±~}gśö=¦öZ–W÷Ź‹KE|y¦‰Ł¦H¤"Œ ¤HōF7=zžō¢›—bō”ŗ¦¤ž‰3 KKżÆ‡®łū“px…&•8Ė™2e ›6mĀŻŻ-Źņ„„„±jÕ*8|ų°|R„m~żõW’’’“"ŗ;wŽeĖ–ŃøqcD*ājķķķՊnP–`XHt;õWĶ„ø„Ÿ-$-MżwŹĮĮ˜aĆ\k¤?Ļ}ś8ŃØ‘…ZgE~¾Œ' >¼fsų>",“Nœč„ūŽ<ƒL˜ ,ŗ8QHq±vEš' IMU’]¶µ5bņdoķTCY¼x1·nŻāŅ„K,[¶L¾ļć?fņäÉJ_wīÜ9V¬XĮņåĖiŌØ‘ZaNWLœčżyWIIQ½UīÕę÷X“šļ^p§M}žMM™2„ K—Ž 9YõóưPĘĮCŽ·ØĮžÕmīŽ•pššoĘģŁ-5Ŗā\ŸéŻŪ‰#ÜŲæ’¾Śvƒs™ö¦FFš/ȕ”Šųņ“w³ĢäUBKe"²‹õÓx=zžōĖ=\¹­æD5Į?wō⦮)-…³įź##1ƒi>ɦM›X“h 9r„#GŽpłņe¢¢¢H$]×UJJJ‰DÄÅÅ©ü7{ölĮć4ibIóęźĆ$ÄĒė^`žūoaqoüųFÕvĘØćĮƒL:•[·Ō Ob±ˆW^ćÓDäÖ& œPN‘ˆj‡ Ŗ"<<__ß ’zöģÉóĻ?ϼyóHNV,“k×.|}}錵+÷ļ+Ÿ¬,]ŗ”ēž{NaŪåĖ—™ŗ+O°°–µµoæ-œ³VOYNM!ŅŅJ9zLóœÆ™ˆUg=¹i†¤ō±PW*qó”^@Ö£ēiA/‘«”“ī§éE·šą^Š>kæ®łēj1™Yźó?téb……f…K—ŹB9Ž~ūķ ūZ“hĮ!C8yņ¤ĀöŅŅRNœ8Įµk×(,,ÄÅŅf͚ѭ[7‡YII 'NœąĪ;ddd`bbBÆ^½čܹ³J'@TT§OŸ¦WÆ^“jU6ųÉĢĢäŲ±cÄÄÄŠ°aC  0É+))ĮÄÄDķ±5eĄ€ܼ©>OŠß§ yŁS·ƒ%MŸ t#¾”“™™Ipp04kÖL°ż¬Y³hŚ“©Ņš¶9sęŠøqcŽ|óM]tµŅL˜ŠˆĻ?æ®¶MMSør„˜œõßń^½œšņŅĶg/++‹ .ˆ§ēc1###ƒ¤¤$VÆ^ͦM›8{ö,ŽŽeäŌŌT.\ø€™™~ų!Ū·oÆp܄„®\¹"’;**Šž={āęęʘ1cšōō$??Ÿ„„vģŲĮĻ?’ĢŋńńŃžDń„—śšļŹԈ’ż/Jm›3įŤ¦–āģ¬_č•É4ĖłöŪ>ŲŁéóæhB—.öųū»p䈜Š¢””ł ,ģ”ČD|īÉĶGęr‡Ū“ÜĶ2å|²µ<¤ÕÄ@†£y1f%˜źó½éŃS—Š‹njHz(¦DńX#ħźÅM]så²på»4O’kjZ–$>++ GGĒ ū—-[Fzść YYY 4ˆČČHœqrr"--ŌŌTFŒĮ޽{‹ÅäääŠÆ_?.]ŗ„§§'öööų€Q£FŖtbEæ~żč޽;ƽöZŁ{¾r…PRRBÓ¦M)--厽{äēē³k×.FŒ<Żd2×®]#::šģģlœœœhٲ„F‚Q9żū;óķ·±jŪ\ŗ\ÄˁŗŻņņd\øßööĘtéR· (>|˜ģlå…[Ž9B§Nu§’_Ė–Ö‚!¦·bJxš —š™ąi"Īhźd­S¦L”_æ~¶ß¼y“.]ŗ0o޼ āŚģٳY¼x1S§NUśŚ'Łøq#FFFDDDT؈łžūļÓ¤I~śé'>żōÓź¾• äĀ‚Āyg}؝|–7n”†‰ūųXҽ{Åg°«WÆVų{öģŁüß’ż_„³aĆīܹCŪ¶ĀU$ĖéŁ³'GŽ”I“Źē”lß¾}„_£ŠĪķhÓʆk×T ©ŁŁRž¹ZLĒÕNžŽy!×½…ČsēĪ‘Ķ Aƒj»+JiŚŌŠnŻ8{ö”Ź6R©ŒæO1zTĶ3ŖĖœ;WĢŻ»źs š™šžūšōĄĒ·Żž8œOf–¶6Ŗē>©ˆ5žÜJ·(sø)y$HJE|įQa»H^6“m‹Æk6^6µWM]=ečE75Äė]n5FbšˆR)č/¹ĪˆS?øčŪWóÕõ!C†`ffF`` ļ¾ū.Mš4ĮÓÓ šššĄĆćń`ą›o¾įŹ•+œ={–®]»Ź·’üóϱ’~^xįÖ®]KTTgΜ”[·nņv›7oęµ×^ć·ß~cųšįŠļ-6ŗuėĘ®]»0ž7”ŅŅ„Ki޼9ĒŽ“‹„………šÅ_(ˆn„„„ōčу³gĻ"‰011”°°l 2zōh¶lŁ‚¹¹š@½gD"Ō&Ӎ‹¾ÕįlD%%źŻ}ś8ÕčÄī÷ßēųńćāķķĶ+Ƽ"k7lŲ@VV©©©\¾|Yžźķ·ßfŪ¶mddd’’Ā?’ü#ß÷Ö[o‘——ĒęĶ›™4iĒŽ欕+ąķķM`` NNŗu‹ōļļĢO?ŻQŪęō™Bƌ®™3įćPÖēŚ¢yóęLœ8‘~ų‰D‚”įć!Čo¼ĮĮƒ™>}:—/_VŲ÷_āććiٲeĮ ĄĖĖ‹.]ŗŸÆ½Ą'ńó³ĒŹŹœÕßįČ EŹ05­ž÷ėļÓĀ“„ѣݩŠI×××WįļÖ­[Wž @“&M*-ž9;;×ńfŌ(wµ¢”¹Ż“!ŗir?uķ@āĀ… DEE1qāD…ķėÖ­#::ŗĪÜ7ey©Ż ģ^źE7ŲŖŗŅz9/¼ą†³sĶWį~šé×Ļ™ęĶ­ŌF<þ}ł¼:ŃRéžR©ˆuē=ø–fA©T¹ą¦™ īdšq'ӌż7hé˜Ē°¦é“k |ĻõčŃ£ō‡źAČ£­„.FµŻ J$"R2ōG]¢‰čÖ”CÅI¬*œœœŲ·o‰„W_}•=ząīīŽ©©)7&((ˆččhyū3gĪŠ»woĮ ą•W^ĮŻŻ .pžüyśōé£ øLœ8n޼©°=!!AƒѱcGĮ 11‘.]ŗČ7(sč­Y³†yóęÉ·I$rsséŲ±#111H„R HLL䫯¾bĻž=,Y²D£ėāčh‚««ś°MīEuørE»®Ęź2ž|‚‚‚8ž;vģ 88˜‡VŲ—˜˜Čܹs0`3fĢ **Š‹.ź<« IDAT/2oŽ<Ś“iĆŻ»wuś¾4°®^-Ńiž$*Jż¹ĢĶ čŅÅ”†z£œ6mڐŸŸOl¬¢T,Ė'õ_żµŚcø»»«ŅĪŹ•+µÖē'14ѧśū^\ qZśŽ’„AnĘŚRŸ4¹~ŚČϘ˜(œĻ³E kš5SŸT×8p€3fŌjŖŹČ‘n‚mj:×f]D&ƒß’ŠĢu©§ņh’óõ÷ߕēv”ŹD¬=ēĪ„–e‚›ˆN·`Ex#¾>ļAv‘Žo£GOm ’ę©įaγ/ŗ½5ʅŽķ­:ćFmw…‡YąZ»óĮgšŲXįpC‡Ź­äūūūćļļOaa!IIIÜæŸÄÄDnݺŦM›8xš ŃŃŃ4hŠ€ĢĢL7n\į"‘777<(³ć'''Ė󱿷]||¼Ā¶ōōt D«V­Ų½{7&&Šy”ȗ_~Éżū÷iŪ¶-5ĀĶĶÖ­[+„BāēēĒØQ£ņŗ¹¹¹1cĘ žüóO~łå–.]ŖŃuiŽÜšū÷U'Ė~š ”œ)VVŗšc愅žŹøµĮķŪ·±²*›Lž?žīŻ»ĀĢ™3å¹’Ś·oO·nŻŲøq£üuĒŽ S§NtźŌ‰ļ¾ūN¾/!![[["##åājRR­[·fłņå¬_æ^gļI“Éz¬Ž]ådeÉHOW?”ļŚÕ“Ś]ÜhŠ Lģ}ų°¢„k×®¼öŚk,Z“ˆĄĄ@\\\”ć’žļ’ųī»ļhÓ¦ žžž4jŌOOO\]]«äŗŖ,}ś8qš`’Ś6±qZ·®ž‚V„@a ##1½zéóU‡īŻ033  @õ÷ēܹ"d2Ŗä(,G“ŹÕŌž€š˜˜HJJ ÉÉÉH$łB˜§§§Z×ptt“BĪŌ:`dT;‹¹nnf4mjELŒj—ŃŻ»%ø»×ß)ŠĶ›Āaė ˜āļÆü,„T*eüųńjŪøøø°vķŚ*æŖ8p€_~ł…-[¶čō<'z±pį5µå OV1•É`m„—X”>V”jœæoĶ4sŽļš@SŻøĮõčŃ£½µH EŗŻ4¼©ŠÓäõZČ Æ•chB¾ŽÆw}¦øīßW?Ąjٲr9ˆņóóÉĢĢŹÜcŽŽŽōīŻ›ĄĄ@.\ČžżūÉČČ`Ļž=Ø 366–‡ręääČÅ!Œ±°° 77—ŅҊļoĮ‚¬Zµ Ž9ĀĀ… ĄĶĶMĮéÖ®];F­²B§NHHH@¦nõBLnßŃ]ĀH”šUCCQ„ļwuxūķ·Ÿ­Zµ’OŌŖĖ”)S܌®®®<’üóœ={V+ĒW…‡‡9¶¶ź'—ŗv5–§Š*Ty³&°±)ėCł÷żæ|ńňÅbµÕ‚Ū·oODD#FŒ &&†¦M›ĘąĮƒńńń”]»vœ;wN'żĶž•B‹šž^JF†śdŲ~~öXZÖ_ń@˜šŠ£‡śœxyy2’’«÷ĢŽŒŻśõ«=ŃmõźÕųśś²qćF²²²äՇwīÜ©“}BBmŪ¶„U«VŒ7ŽqćĘŃ„K¼¼¼ˆŒŒ¬įŽ?Fį2ņBõæŸO3šøż=14¬Śø\&“JT”śĀUĮ××—ŠŠŠ*½öęĶ›ņ1©.iŌȂž=…Ÿ)Oꮕß_rćņKnåä²ģŒ—Ō®£Vžś†~¤¦†|-ē‰`ņpgF÷³ĒÕĮS1ER"¢rYżK27ćĖNųŻGŽÄ§cj,ā¹.¶Čį7łF†"Žć°¶ø;—9’R•pņR6«v$“™[6 45óŽX†t·„%³J8s-—e[’ČÉ/å“In ļi‡©±ˆų® Ÿ'pų\fbŽאēŗŲŠĄŽ™ ’sä\kC_ØżŖ8łzĒæĪHI‘ D“R ²!-+V¬`ńāÅ+-lPžØÜĮęąą 2ĻRnn.ÖÖeŁ •„<æĪŖU«hÜø1/¼šÖÖÖüņĖ/ōźÕ‹^xżū÷+ˆ/÷īŻ#00©S§Ź·•””°téR.\ČĢ™3±··gȐ!“hŃ¢Bbńrņņņ°²²Ņøŗ©&¢[r’„öķtćø}G½ćķm‰‘QĶ­¹(s,™šš"‘hGRęlrwwēŌ©SZ9¾:š5³āܹG*÷ĒĒ—P\"ĆŲH·‹ ±±Ā¢›&ŸK]““Sę@±·W^ÄĆŁŁ™%K–šŽ{ļ1eŹzõź„“]ūöķ+øÓÓӉŒŒdśōéŒ3†»wļź¤š¦&×Qᄚø$»vÕŪƵA×®=š¢¶MlL n®U’< ŻO‘ØvE·>śˆ·Žz‹µkײyóf¹ÓMY”$€E‹!‘Hˆ‰‰‘W ŽeōčŃ̟?Ÿß’½Ęśž$żū;³qcœŚ6115³RWłKƒŹŚƒWĶåö$cĒŽeŃ¢EÕ>Ī“\øpŌŌT­Sųū»š÷ßéjŪüõw~~&ȀĶWžh“² ÜŖ@ńæęöŗK3½ćMžA/ŗ©AŪĪ«—:šįĖ Łv8³Q¹äHqu4bŅ0'¾Ÿ×’w£)(’ba&fü ®ß-`ĶĪd’ŅĖ&Ss&ø2ŗŸ=›ö§r+¾R©Œf¦¼ń¼3®ŽĘüßŅŪ¼7օqX±-‰[ń…ˆÅ"<óĮK ).‘²ä‡ūü~6‹›ń… ķnKSwSֆ– #7ī•…Ä}ž¦']ZYšżÆiÄ%–ż8·õ1gR€6–|ōm‚VÆ čnŗ$7WxŻĢÅ„rÉr›5k†T*åōéÓōéÓ§ĀžóēĻŠØQYn wwwNœ8L&SÆrrrø~ż:cĒŽŹBYΜ9S”]aa! .döģŁrŃ ŹDŗ?žųƒ^½z1nÜ8ĀĀĀä”-Ż»wēŻwßåć?–·722¢WÆ^Čd2RSS±··ĒĢ̌żū÷³|łņ a1‰„'NTŖ‚©&×R“{RRSKÉŹRģš_4+«Š²P¦' ač’-¬ÕŠnIY8S³¦ŗ ·ŗ}GxYD·ŒŒ µįjÓ¦Mć»ļ¾ćwŽQź˜ ÅĘʆēž{Na»££#C† a޼yLž<™ØØ(ڵk§Ż7@™hml,¦øXõā“VD7 ŽQī鳀&×16NBß¾U?GŒ€0īéi““‰Ś6ŗÄĮĮģģģ000ĄŪŪ[mū7n0lŲ0¹ąąććĆŅ„KuāpŅ”Ī…«rß¾]E7©TFų™ŗ¶ž——ǶmŪ8sę yyyX[[Ó¾}{‚‚‚°µµ„ØØˆ… ŹŪļŪ·„„,--™?¾ü;wī$<<œģģl4h@ćʍ™0aBį8>>žąą`āāā066ĘĻĻI“&aa”½¢G6`įB”J×EĢų~ž§!'ļŁi-‡[cŪJe"ā³TE%2kĻy°øļmĢk.÷¬=õ½č¦†B-»ĻGō²ćÆ+9üļĒū Ū£ļöy3üZZrźrYbč¤ōb^YCŃæDŒégĻĘ}©lŲóx5öÄÅlņ „Ģ{Õ {kCeKhģjĀ/G²żČćœ9ē£ĮŪՄĪ-,žż;—óѹųø›āboÄĪ£Ū:XāļgĆ'›;žx2yübYß&wf~p"„„Ś ņ õ¢›®Č˾WVV•†N£F9r$Ææž:͚5ĆŽŽžüü|¢££łžūļqsscŌØQŒ7Ž~ų‰'2lŲ0INN&$$™Lʘ1c "$$„   žžyģķķÉÉÉaÓ¦MäēēĖ÷$ŽŽŽüžūļōķŪ—W^y…ķŪ·c``@÷īŻYµj¦¦¦“jÕ Y¾|9 6”O*Ž|óMčŃ££FĀĆĆīßæĻĻ?’Ģ•+Wųå—_4¾6š\ĖÜ\ķ»ERS…Ū¼yĶ…–ÖånŹ'ÉŹŹRé¦Ņ&š8DSS„4kŖŪ~<|$śÖ“iķ 4XXXČs»)ĆŠŠuėÖŃ·o_¾żöŪ ūƒƒƒ)))© ŗ•Sīš-.ÖM™””// nŻR7J“ū!„&¢[‹ŗū.?zōˆM›61tčPڵk‡L&ćĖ/æTŚÖÄÄ///zöģY„ŖĮŁŁŁ< mŪ¶H$…‚pź°°° E‹$$$:1Åb1;vTŗļŅ„KH„R|||äé8žĖŋU¦»QöžŠŠŠøvķšŅ}’%))‰äädµm ,ķŽ®ԟ5ō¢› µ•āźh̾æ2*læ_ČĀļ‰Oy¼ņtéVž\pp²- G½p#ÆĀė£n ‹ƒ²%¼łeŁĘĀLŒ…!F†"l­ hŪÄ Sį7åŽĄ‘.ެx®ėw 01įhcHŹ#ķZŒt™Å ~£‰ĄSŁ–„„%’ż7‹/f’žżÜæŸüü|D"®®® 2„%K–ČEƒęūļægõźÕģŽ½›üü| ńõõå×_•;É ÄęĶ›Yµj{÷ī%//CCCZ¶lIhh؆††lٲE¾(£+4YˆøwÆźīØ§%ü»2|õÕW˜˜˜°’~ÖÆ_//ŽāääÄņåĖyõÕWk„_"¼½-‰ŽV^Żʊ U·0Ęӊ&ł?ūōюĖķöķŪüłēŸJ÷łųųąååÅ©S§ø|ł²B˜2ĄŁ³g鎽;żõ ąČ‘#@™s~śōé¼żöŪņ¶įįį\øpcĒŽŃæłöņgJxx8ƒ ŹD¾éÓ§+äõˆˆ [·nģŚµ‹—_~Y+ļŻČHLŽ>\qQ°‡ŽŽü[–"@Œ ±D"R©H.‰E`fTŠ­‰S Žf%Ų›•`eRŠ­I 6¦¬M$Ų™•`b ų»Ó¶A.ŸˆeĆw"“”?ć®§Yž`KL­¼om’’‚ÆÆ/3fĢą«Æ¾RŲ·lŁ2V®\‰””!™™™ īÄōōt:uźÄ«Æ¾Ź?žČoæżĘ„ TžG$Ńæ¶nŻ*_ÜY·nK—.%>>žōōō c UtķŚ•³gϲbÅ Į!fffJÓķüóĻ?tźŌ (ĖI½xńb„ÆļŃ£‡Źń0@@@Ū·o—/@Žæ___-Z¤ąUĘ·ß~˧Ÿ~Ŗ¶ ”‰×µU0ēiE/ŗ©ĮÜD»“bC2r*Ś$„2§Ył¶'±¶(ĖBØ®Źff\–£©Okę½ę†gƒĒ“I©Œ‡Y²ó„Wßmž=×”ÆZØlcb¬ż|PھŽz£ÉP”čæø»»³iÓ¦'Ī“‹„„źIąäɓ™$$zōčL&#,,ŒK—.±dɝ÷Y#UG”ĕ9‡HTya½Ŗ|ųį‡ŲŁŁÉ’.,,äĪ;$%%ѬY3–-[¦Ńq¾üņKöļßĻīŻ»ƒf̘AXXŻŗu£sēĪø¹¹akkĖƇ9{ö,iii¬\¹Rć‚,UAč;ž›Sż{ž­ž&&b6¬Ś3Ŗ:Ģ™3Giž¦ŲŲXüżż™>}:·nŻŅųxo¼ńb±˜«WÆŹU ¬šęŲ±cyóĶ7>|x…źŌŚÄÖÖ[[#23U ŁÕø§‰…ŒąéŻ,--&—łłłÜ¾}›•+W2uźT^|ńE­†ėU†-¬ÕŠnłł223„ŲŁÕæzrš8hŪ“ŃNѝ-[¶Ø¬ŗtéRęĢ™Cvv6B@żüüˆ‹‹SėŠ.§mŪ¶DFFVp>YXX ‹IKKSŲžŚkÆ)üݵkWš6mŹÅ‹µ&ŗAYń"u¢›µ§ ®&¹4r*ÅĪ“[S Ö&„ؚ•`cRŠI –ĘÕsMȘī—Č7ēŻ9§BxŪuŻ™.nYŠėĘ<¬Y³føøø(-†Aƒ HII!22’¾OÄüŸ={™LFļŽ½^³téR:w­øø˜#GްzõjŽ~ūmĀĀĀ*œĖĒĒG.ö–óĆ?°}ūv~žłg…Ļę]i{÷īUłü‹•?w¶lŁ‚X,¦eĖ–lٲ…E‹©t“1¢‚€VīīܰaŸ~ś©Jgŗ&lŪ¶M­k]Ua<=ŖŃ_15˜W.ŕ ER ”y¬Ģ (.‘*øŪž¤čßÜ1ÓæŗĖ­ų„mŅ2%‰XńŽ'g®ęņÖņ;¤e–_(ER*毱. ņž!-,.ėĆ+‹bIĖP>} e—€¹i=\r¬!ž+ā*ĆŠ°śƒOu‚[UŪjkŠ.‹5ž„WUl+ĒHƒ¤ł%:ŠnŃ$”ø¦Ä###¼½½•^O77· ƒģeĖ–1sęL6nÜHNN^^^rŃķ‹/¾ øøX¾ĻĆƇ²āąą`¶mŪĘŽ½{),,ÄĒLJŸž™įƇėü=j$ŗåŌ€ÓMą¾›™` ā÷G[xxx0eŹ„ūüüüšõõe̘1 āIėÖ­™2e ęęę^ćźźJpp0ĒWųī6lؐ+W®°uėV¢¢¢HLL$!!&NœČøqćšóóÓž|”ū^\"£øŖ©”—§žscm]·V™}||xć7˜?>=āčŃ£“nݚV­Z)“‹åŅ„KœœĢ™3gŲ°aƒ‚ąe‹:3fĢ`źŌ©ÄĒĒÓ“©nc“­­Õ‹nÕĻ5YdqwÆųØ D"R©p½½½™5kÓ¦MĄÜܜ6mŚď?žHbb¢Nݦźpwž ĻɑńÄŚ@½”&sEĪž=›¹sē*ŻW>.čׯīīīø»»Ó½{w<==ńōōÄŪŪ›Aƒi4“µµåŃ£G¼žśė$''“““CII ·oßF*•*|žÅb±Ņ;RSSIIIaĮ‚ņ톆†ŠöhŠŠu¼øžWŁóņP݊Ób‘Œ)IĪkBBVÅŋō#"mčéYwÜn½{÷ę×_„øøX•RRRĀŋłąƒX±bD·ņ×>IĒŽåNĒ' ąŅ„K:tØBi++« Æ;~ü8½zõ’ē¬VFæ~żT†‡*£““”­[·Ņ·o_ʍĒ“iÓų믿”ę̆²¶’”,ZčäɓßœÄ¶ĆŹ+ݤe–żHJJe$¤*ę©ńl`Ģė#œŁ°73cVęüp •øūŠIÄl”ßčé’:‹Š„ĪÕŅˌńƒX±-™IõsÖ<‰Žé¦;,,„'ŪźņNč©9J­’ÅŅR7ˆ&“»Źęļ«*Mš4!.Ny¹={öTŲÖøqcvļŽ­“½——W…•Čņ$ū:tPB K4r5ź(”Xį÷½&īyėÖ­Łøqc„^Ó·o_…Aó?~<ćĒÆ°ŻŹŹŠ7ß|³Ņ}Ōš9„ŲŪW}1CHä©)ń¼2”ÆŒgdd°xńb<==9tčB›Å‹sņäIƌ#ĻÓ¤ź30vģXy‘]#č^Ģ­ś˜G)t…““™™™ģŲ±???¬­­•:ÜŻŻY½z5ŽŽŽ“iÓsssī߿Ϛ5k°¶¶ĘÓÓ³z_†fnóR@ūՍė:BE^D¢ŹW³W…™™™‚ėYvvv\øp½{÷rūöm8vģ_ż5………œ9sF° Īļæ’N@@#GŽ$ ĢĢĢšöö¦_æ~ mÅb±R÷””!„„„)䏫NŽ7MÄ˚Ź/hl cr‡ū,9卲t`ޱÆs¢[hh(—.]¢k×®\¹r…‚‚ś÷ļϟžIDD„ĀkĀĆĆiŲ°a„h|||8yņ$J’jŠ#GސœœĢāŋ5jļ¾ū.!!!*E7uøŗŗÖj1=Ź©¾źJ`„åļŽ?qł ķn‹«£ā|L Ä"®Å©.ۜ“_Źķ¤"^ģˆ™ÉćŪ&ĮøŒģcĻƬ¹K­e#ÅU>Ɔ& ņ³AüŸß™‚")öֆX™?xħó([ĀÄ'ŒŸpģˆELźH’ĪÖääkWp°2ӋnŗĀŅRų«ž“S kM®„®D7 Øp¶?uŹ+ķÕšøĒ¤RŻ?ŪÄ—@Ū…oź;}ĻŖł±Ģ«Bje‰ŽŽĘĄĄggg9zō(™™'rÅÅÅ8p€ńćĒ#‹¹欰” ėÖ­# ___yNæ]»v©L­m„„T];ŻźŹż?~<:u"00…źßO²aƬ¬¬2dīīīŲŪŪÓ¶m[Ο?OHHHµćÕ”®„ż×EŅÓՏß]\ĢjŌE{õźUΟ?Ļ믿ĪgŸ}FHH'Ož$11;;;~žłgĮcüśėÆtźŌ‰={öšĮ0eŹ‚‚‚šõõ­ąŚ”H$ņ*ŚOņšįCńōō$22RžļĢ™3U~ošˆ—B÷C›4±+ ‹k–Ņ}·3ĢH/ØĻ xģV{2Ä4""±XL—.]čÖ­›Ā¾ŅŅRΟ?OÆ^½*už˜˜\]]kUpƒ²4)ĘĘƌ3GGGüżżŁµk—<Ż¦äååqõźUڶm«£žź©*ucY­ŽāęØŻ Æw„еµ%‡W·ą~z 9ł„8ŚŅĄŽˆ}§2ųGč°ä‡DÖĶō"|Sī§“WPJCcģm Y¹=™āIéÅüy>‹Æ»3v ٹ¬- iįiŹ„[ł4jØ(ų¼”ĶėƝ8¶®%Ié%„DČoi,ś>‘åÓńœŸ ‰iÅIqw6ʦ܀łĮ‰Z½.P&ŗ9ÖĻPM`©wŗÕ(š9Żt£|Õ'Wc‡xōč‘pCR›ė“XXØ’<=+÷¼® Ń}ø'B䨒M47Ʊ9))IĮ eł¼.\øĄ† š÷÷ĒŹŹŠĄĄ@>łä~żõW‚‚‚ä"\`` P–ŪąÅ_$++‹Š®];Š‹‹9uźcĒŽeśōé|żõ×:_ę꼇ijłU£Ō„°!ģģģ8žżōS’’’05}œ×ĒÄÄsssņņ‹ŗV"²²²”ę˜:qā„ŅPé½{÷Źó CY5Ōk×®ÉC„µ…££pʚpĀ?ÉPŸGDÜÆö(.%[ćļż°ā‹jvķŚakkKxx8ļ½÷P&ŗµjÕ kkkŗuėĘŚµkIHHĄĆĆƒØØ(rrr”:ĆbbbäéHŹ)))aļŽ½œ:uŠuėÖi½’?żō“Ź…‡öķŪĖŻ{PV½{ļŽ½ 2{{{9tčūöķSźöæyó&ĮĮĮ ŪRRRŲ½{7R©”/¾ų¢Zżß¶m›J—jĖ–-+„šź¦nüĀ×Q<h÷99½˜a3oŅ£­%®ŽĘX[“WŹõ;\x¢RčwūӔ:É"¢rōn4][Yāā`„„¹²$üżO‰O„¾æś]Z[ŅŹĖ S1Yy„ĢŹ%· ”m­0‹(ż×yqńfĆgݤ{+m ¹qÆģ‡ģȹ,½{æ–8Ūan*&-£„S—sHU‘ē­:8ŁH1Ӈ—ź M„˜ŒŒbĮ6z4C“k©+!F“ćj" źŃ ÖjŠ/š $ā–RRX¾Ü` IDAT"ÅČč±9Ö2B÷ŻŌTDuó › ä9-(Ø9‡Ä“lŚ“Ii!‘HÄsĻ=Ē?ü”åüźÖ­aaarŃ-,,Œ-ZбcG¹‹­yóę|’ż÷¾f͚Ŋ+xļ½÷t.樿§ffUf«)4'ĒŌ“ī|7E"nnnø¹¹É·9;;+mkeeEĖ–-kŖkaj*,HkrOžE„ÄFmŠæ 99Yé>Ö®]ĖsĻ=ĒG}D÷īŻ9r$ĪĪĪrōčQbbb*"­[·fåŹ•2Ćß»F»£±XL=ÜlgĻž•§"čÖ­P&ÄyxxØĢē0}śt•ēX“h‘B%\mńžūļ«Ü7{ölŃ­ÜŃV¾0räHĢĢĢ Qś¹Ō4śė¬{||ŌÆ^޽›Ga”^üŌB¦……Ż8Żģ5p5ĘÄč]Ś"&FX¬ÖäžT— „ĪoŽƒŸ233+\X›”’ >kēźßs!gÕÓ&Ž AHXXaaaųłł)T–+Ÿ$żłēŸJ__>Sį‹BīÅź8Żōa’5‹&¦ØżL"ӛō@Kå Æ2ä՝о¾¾¾˜™™NDD666 æŻ»wēāŋ¤¦¦róęĶJ L&&&“lŁ’ÄDķē*ה-[¶ “ÉhÕŖU…}žžžXZZR©c6hP>V^ØHOŻ@ļt £O)_­; g•Ž>z±G×ų41äüyÕ«mR©Œ[·rh×NūöśśDq±”ø8õ¢Vo#”DRi׆bĢĢDØIĀž¬ˆ/u7Ō‹n"xėČÕų$MšŸćYq³6mŚ”iÓ¦±dɒZ9’­[9‚i}|ŖĻ­¬Ō?$ KIM-ÄŁ¹n…ż—ĄĄ@¦OŸŽ………<4؜† ņꫯņī»ļĶ€077'++‹Ó§O³aĆśōé#ϧ+rr$dfŖw[ Üuh"Ų ‰~z4G“kYa’u cc06©u»é‹īh!1½6Ä_+cÕs®œblLėĘgĄŲŲXīf³°° k×® N¶nŻŗ‘ŸŸĻwß}‡L&SZDAsss$’Śyæ2™Œ-[¶ąģģĢɓ'•™:u*ĮĮĮ\¹r…öķŪktÜ+W®Å7=u½č&@ēfz1H×ø;Éh`W7¬ĢĻ2šL’ž;]ė¢ŪgŸ}FóęĶ‘J„ģŻ»—““4lmm `āĉ”‰Ś3gĪdšąĮÄÄÄpäČ\]]łę›oäÖź£G’””„……žžž<’üór»xxx8?żōo½õ–ĀŅ§Ÿ~Jaa!K–,aęĢ™“k׎I“&)ō/44”ćĒ³fĶŒŒŖŸĖ$"ā!ÅÅź›M›ź®,»X,¢qc#®_W=Œ‰É„“T†Aż›th!!ĖĶÕ Z Ų5ŧ‰nµ&×Q“ū!„§‡š1nŻŹ­ó¢ŪØQ£˜6miii¼ōŅKöoŲ°† ņÓO?±råJłv&L˜ĄŅ„K•ę{Ó&7of ęļõō¬ś=ÕD°»}[ļ@Ö·oē ¶±±®‡N7ĄĀRDq†ź»>ĢY»]ĻŚs«yéśY[Yz÷ī͊+055UČ eN8CCCÖÆ_¹¹y…¼mš`ffF~¾zēzUŲ»wÆŚ|j#GŽ$22’˜˜¦OŸ®Tpƒ²E«ąą`BBBųꫯäŪ“’’*8Ä ørå Ė—/ĒŻŻ½‚óļśõ넆†*=““żśõ“’}šąĮ _ŸdŲ°aÕ.ÖPߊ‹n4v‘bg%##§n=„ž%:7Õ ›5A˖¹œŽKį­·“›¬z÷īŻ$&&"‰3f ...ܼy“7ŽxƒĖ—/³fĶ ,‘hHHR©”>}śČ«¦½žśėlŻŗ•ҬY3$ ēϟē믿ęūļægņäÉtźŌ‰I“&qżśuN:…H$āȑ#|ņÉ'l޼±XLff&}ōAAA ?nŸž9 4ЊąpüxŖ`›-t'ŗ4õ1ąśuÕū K¹s'KöćYēįĆbRS Õ¶i"Ö­-¼½‹EjXWÆVæ0NII rp`dd¤rąXNvv6ęęę‚ķņņņäIöµMNNVVVU~½&×±‰Oõsēię^̦W/ĒjŸK͚5“W…²b ²*T–²¶¶V;©166ę³Ļ>ć³Ļ>#;;›ÜÜ\¬­­±“¬¹ē“FBj5܋k" źEń/æü[[[¦L™R­ćåUur2ؗN7(s]ŖĖļ«wŗiāb©ŚŹ„P;ŽĖ5Ó.QŻJ÷Ó§Ož÷æ’QPPP!ļŸ……mŪ¶åŅ„Kōļßc插ī:::’™™III‰ÖęƽöšŚż=bĖ–- yN’KŸ>}pwwgŪ¶m,[¶L>vść?ųć?”¾¦cĒŽWgķܹ“;w*}Mß¾}9qā„üoełŸäīŻ»4jŌHm=ŠŌĻežJ _ógKr¶3bH7[ܜźFBķgķśÖUŗu5A`žĖ‰©‚aSU!++‹ČČHÖÆ_ĻŹ•+9xš ~ų!ß~ū-ŁŁĒVVVܼy“={ö0oŽ<ٲe K—.å?ž`żśõlÜø‘ššp†Źņåˁ²¼ ß|ó §OŸfēĪH$f̘A’žż `Ź”)¤¤¤pųšałłbcc¹|ł²¼68v,E°MĻ&‚mŖƒžS§Ņ“~ŽW_}•ü‘eĖ–Ń·o_Ś“iCŸ>}X±b%%W{‡JXX³fĶĀ×ח &e‚̧Ÿ~Jæ~żhÓ¦ ={ödģŲ± +sĄßߟ‹/Ź·I„R‚‚‚xēw(..fĈr1÷IV¬XĮčŃ£‘Jµ3ØĀŋU aóńńį“O>ašąĮXXXČP?|ų×_{{{ĢĶĶ122ĀĶĶ™3g*ˆ,÷īŻcōčŃŲŲŲ`ccƒ‘‘žžž,Z“H!Ažµk×:t(ęęęXZZbjjJ“&MX°`ŹšįƇ+M¼oß>ģķķ¹té.\Ąß߬­­‹Å“k׎ü±Ņ×Ca]N7”<œ Žü“amm««k n ™čVā7ŽŽFd*Ѧõ?ž`ÜøqUIk“żū÷«Ģļ§)„$&ŖĻłØļēӊ……z‘'=]_hI[Ø+ PŽ„ĄżŠ U-ՄžÖ}ūö%..Žøø8„Å/~ūķ7āāāųå—_*ģ9r$qqqjs½-_¾œččh¹ĆoÖ¬YÄÅÅUØZĪĢ™3‰‹‹“žĖ‚ äżU÷ĻĘʆłóēG÷īŻUöO,sžüyNŸ>-ß­ņø=āāŋųśśŹŪ{xxögŪ¶m|šĮõ_Õū×£šśū«S u.åpä³s©Ś61gÕ{˜·1Ż'Õj_,Ķ k+żŖZM`i)¢];c.^T= zų°˜Ė—3éŌÉN«ēīŪ·/īīī ŪʍĒ—_~Itt4]»v•ost|ģŚˆŽŽF&“UØč0fĢŽ|óM¤R)b±˜0aĀęĢ™Cbb"111ģŚµKžCڽ{wڶmĖ–-[ ,, +++F„•÷™›+įģŁ‡jŪXZŠhß^·ī§V­„ŸWĒŽ„0yrc­ž÷ōéÓģŁ³‡FńŅK/ajjŹÕ«W™;w.ńńń¬]»ößs㯿žĀĶĶAƒŃ”Cžžy.^¼ČK/½ÄĄå®ĘqćʱqćF¦L™‚ææ?³fĶāż÷ßēäɓˆD"6oŽĢÖ­[9vģĘĘĘŲŲŲ°|łr¦OŸ._–J„¬Zµ „Õ­Ŗ‚&ā‹&SmѾ½ ŖŸ§‰ŒS§Ņ>ܵRĒĶĢĢä³Ļ>cŲ°a|ūķ·ņÕĶqćĘqóęM/^LóęĶ)))!""‚åĖ—SXXČśõė?~<łłłlŚ“ wwwrss9qā‹/¦iÓ¦¼ņŹ+äēēóÜsĻaooϚ5kššš øø˜3gĪšłēŸciiÉģŁ³+ōm芔¼óĪ;$&&*|øF×"7W¹sź7mlDxyiAtÓ@8^żóFfœ;'|«“ĄŲÜŻ ¹wOõ÷S“Ŗ×šKhhØŅ‰č³ĪĶ›5“sńiÅÉɀ7T/¾‰¦Ā•‹‹‹ĀߍWnģ.t ŸDčżé©:ś'Ŗų5—ą`mĢĆģgÊ~5.ŸÖÜćjœöcŲ+Ė€ŽLj&śJŠ«§©ZŃ `ĒŽx­‹n®®'łå?”=žĄž÷DZÜggW±?H$>|ˆ““PędņņņbÖ¬Y̚5Kž£]Ī”)S˜3gŁŁŁX[[ĘčŃ£µ–—`ĻžDĮP‚n]M02Ņķ³¤WOSĮPĆcĒ„£Ŗ`llLxxøĀ½tvvfŻŗu,[¶ 333Z·nĶ©S§01)sż]¾|™“'O²}ūvʏÆpĢ”C‡ņķ·ß2eʹ«qąĄ„††2tčP>žųc&Nœ(ĻG1uźT¹ēļļ”åżKJJŖqWcļ^ŗu5>Iƞ&8 Žįqüxj„E7€žżūó믿ʒŽåŲ±cģŚµ‹1cĘČ·6ģ’Ł;ļ°¦Ī÷’撰÷EEqoE­R×WÕŗ÷h­{ŠV­Öjķp|¬ÖUg[ÅU·ÖÖ½ (Ȑ-ä÷?R#Y@€€y]ׄÉsĪy’“sĪó¼Ÿ÷}ߤ¤¤ĄŖU«‹Å\¹r…Č [:uāéÓ§²źZ§OŸ&**Š}ūöѬY3Y»=zšųńcvīÜ©PtėŪ·/S§NeĻž=Lž<±XĢĮƒ™Ü§‡‡ēĪ)_*Ķ‹7ÖĪ8šėÆæęŌ©S\»v €I“&±uėVBCCŽķ”1xš`$‰Ņš8m±nŻ:ęĶ›GTTT‘÷„‰{µ8sü*ćq¼āŌ .JŖšj{{{śöķ«²Mޘ^žņ„>¼TDBčŠøōŻX&FBź×0£e]KjW5ÅĪJ^3µµ4 V•Ü ­³!MkYм¶6ņķ’ßf-&Qņ6tjRś}ųhŻJ½°ukŁŁÅ’’ē@z7¼ģ}T…ę…ͼ›ōõņåˤ§§S­Z5Μ9“oū¼0ĘŻ»wʵkד*†©m£É9(*¶¶Bµy㢢ҹ?IėĒīܹs>ń“GdddšüłsŁk½{÷– n;!ƒ\1ę}üüüxöģ™ģ’¾¾¾ 2„éÓ§3gĪ$ K–,‘½ß¦MjÕŖÅ–-[dÆķ޽777|}}‹ž!—/ÓxųPµ3ÅĶU¤Ē“¦“n­>”ž‘#…›H¼_,ļ|“jÕ*_Ū† ’@jj*†††XXX°’~īßæXü_øĶ»BZŽD¼iÓ¦łö×¼ys^¾|©°_NNNtčŠŻ»wĖ^;vģÉÉÉ2ń644//Æ|«Ļ€ ”ÉWĄæ’¾VŪF›×xÓ¦Ŗ÷%ēpń¢jĮHj®\yĆŪ·ŖĒ"Mš#T•}\¼<5q m1äÖ­[¬_æ^Š“aĆÖÆ_Ļõė×X±b{öģÉ·Ż… ųöŪoe’’å—_˜>}:Ķ›7ēšįĆÜŗu‹’żļŌ«W#GŽČŚżōÓOųūūÓŖU+žż÷_nÜøĮĻ?’Œ··7gĻž•µŪŗu+ŽŽŽ,[¶ŒŪ·osżśu,X@­Zµö§(hā@öōüpE7͊īhĻu™žž.—FÄŪŪ›:8ÖŪ·oIM-žb#$$$he_%Ut§ ˆ³<ˆU,ŗU·S½h§ ¬­­éŠ”ƒŹ?½ÓJOyD/ŗiˆ_³Ņ‡vtąÜZo¶ĻÆĮ*’*üõsMĪ­­Ķ¢ń•eUh>nlŎj0’s7N®ņ&`Ž›¾õąĢoµłf˜+yŚDcžś¹&uŖ•nÕWG)u«źVī€ņN‹Ęj+%EF¦süøzOAˆŒŒĢ÷Zllījō»¶ī÷qrrrĆŪŽ'oP”—Š=--É“'Ó»wovķŚEpp0ėׯ—ŪĘĘʆžżū³eĖöģŁƒ«««ÖD˜ČČtœO:šjåxźŠdāæm[øÖ«ČźŸ'v¼ėjĢs¼å‘’’;8}?A?ä:“““ÉČųÆhĮ¢E‹xłņ%Ė—/gęĢ™ł~GcƌaĻž=¼}ū©TŹž={}š“'OņģŁ3źÕ«ĒĀ… åŚ=yņ„ū÷ļsņäINŸ>Mhh(ÕŖUcńāÅ@nń•)S¦0pą@"""dķž?N«V­˜1cF‘>ó»ääH9sFµÓM$‚&K΁¬kh"ņÜ»§ż¹<ʍĒĪ;K5)“¤Nø, 7n¤mŪ¶rÆmŻŗ•:ąč舽½=µk×fÜøqDGē”hŌØvvvT«VqćĘås¦Ҷm[\]]qrr¢nŻŗųūūóę͹³³³Y“h 6ÄĮĮ*UŖ0zōh­¹Ü$õ.d[!öö%7Ļ‘ 8¢x”ŪÄ oĒ·%Ö=z>4ō9Ż ĄČ’Ėäź£’q©¼‹¹©ˆŻ§ćŁōw,é’?_TŽN\K"5=›JŒ¹|’æÕ‰;_ó"*wŠ‘’Åŗ}ŃōżŲŽXrę¦ö,ćEĮŽJŠ_3½Ė­4čŪל mŖ¬»wæ$$$…5 Ÿ[ę]LLLhŚ“)żū÷ĒŃё»wļņ×_1vģXlll”nēęęFß¾}™>}:gĻž„jÕŖH$nŻŗÅŁ³gY³f [paéŅ„L›6M–ęĒdēĪ|õÕWl޼Y¶Ļ-ZP·n]nß¾­5&##›•+CŌ¶ėŪ·äÜ„mژ`f& -Mł.<<3gbńõuŅŚq…ęåFQåjĢsȽyó&_ÕØøø8ĢĶĶe¢ŪėׯłöŪo?~<Ɔ £iÓ¦¬_枱cĒŹ¶±³³£OŸ>Ņ A5j$s>•Ū·¹sGõ$ŃŠPĄĒ—¬Ó  KvļQ}}oŪʒ%õ14,ü`?ļ™ššęĖÉtńāE6oŽĢņåĖyžü9³gĻę×_ÅĶĶM®ŲĮŪ·oe‰Ž+TØ@VV1112‡k*s’XZZҽ{wvļŽMµjÕHHHĖ čģģLbb¢ĀÜQėÖ­#55•/æüRķg |”¶M·®fZ]LŖSŪ[[! ŹCķŸT¼¤Čŗ†››Pm®Čąąųb+¦É­[·d’?pąC‡å‹/¾`ųšįˆD"^¼x!{~üóĻ?²¶/^äŁ³g²87oŽdķŚµÄĒĒĖž%ėÖ­cÜøq >œ~żśaiiÉ£GX½z5W®\‘…^ϟ?ŸŸ~ś‰‰'ŅØQ#²²²8rä ,ŠhPWÆĘ“Ŗ&O:%Wh ąä ["S/ä4sMĘÄ@;•Żõčѓ½Ó­Ō®’C½j%/…æ3’WTt0¤« żŚŪ3ĢρŁ#\±4aō^Rö{ĻäCer¤šō•ŻÉa1ؽ#ŻXĶżŠšiiLåŹŖ—Ū³³„,^üHkĒ:t( , ,,ŒĆ‡óöķ[V®\ÉņåĖemzō職·w¾m·lŁĀ/æü‚™™ĮĮĮÜŗu www:$YŽ;ʧŸ~ʬY³dŪ¹øø°|łrÄbq¾šV777š4i¢5fżśP¢¢TēĀ00€žŸ”œčfn.Ł£(9 IDAT Kõ‹7j×ÕxäȹÜmŪ¶mĆĘĘFeĀģ<Ēć®]»ä^ĻĪĪfļŽ½Ō«WOöŚ—_~‰sēĪ„Q£F >œY³få[3f Ē'00P«.7M¾3ßv&„R•¬s'3lmT?ŚccÅEvGÕ®]+++/^,ēP‹Å,^¼XV$ĆÜÜœæžś‹?žųCĪ˜‘‘App°LˆmŌØ€e˖ɵ‹ˆˆ`ēĪųųųØģĻĄ9}ś4ėׯ§U«V² «[¹844”ķŪ·ĖmÉ÷߯0üż}^æĪ`ß¾WjŪõłTq®œĀ" hŻŖd܋å…ĒÓ¤Inß¾­¶­&ß[+­æŃĹØInŠ’@Søŗvyi’““IHHū³³³“Č)*R©f)JƁ¬K…ZśØž$’Ο/>·Ū»:t___Ö¬YĆŠ”C4h³fĶbĮ‚<ž\–ær]ļ.\`śōéŒ9’+V0sęLöģŁ#sÄ/]ŗ””C‡ņēŸ2a† ĘĻ?’ĢŚµk¹xń"<`ķŚµŒ5Š_ż•aƆ1jŌ(vķŚ„pZNœP*®Éż@[D¦³żž³Ņ÷?®Ŗŗ*wy';;›ččhž={&—ƒPm”Ż ČˆĪŹĖl¶–ģ[T“€o=׫żŚŪÓ®”Vf"Ņ2ņÆJ({ĶĀT7N·•”-Kž{Ō“‹@ ŁÄpóęDDh§Ā­@ `äȑģŪ·K—.qčŠ!ʏ/.ųūļæÓ»wļ|Ū2qāD9sę gΜaóęĶtķŚUÖfņäÉåĖ6jŌ(vģŲAŊ¹yó&ß}÷£FāšįĆ̜9S+Ÿ-33‡%K«mמcKV„é×Gżyޱ#œ§Oµ—ĒĆĪĪŽ 0xš`ʎKĖ–-Łøq#³gĻV™8ŁĆƃĮƒ3mŚ4Ś“iĆšįĆéÓ§^^^\½zU–äūäɓ1oŽ<™ū駟~B"‘Č*ļåѦM<==‰‰‰‘ 7, ŃŃ…_÷ķ«]ńESŒŒ Ē'źÅօ ŖĶI§ 333Ö®]Ė–-[°²²ĀĖĖ‹zõźįääÄŃ£GeyŸ*V¬Čĉ™3gNNNŌ«W ąģģĢ… ˜;w.ÕŖUcöģŁ,\økkkj×®M„J•ØR„ ėJP…ŸŸ–––ģ޽;_õŪN:ńŁgŸ1pą@lllØWÆŽŽŽT©R¦L™¢öóžņĖc22T/ŗUŖd@³fŚw.|Ś[żłÜ¾=œĢL½Krs ^æ~]mŅõģl)[·Ŗøz÷ÖŽb‰&īׯ»#Ōv( ŠBųµŽ©ˆ<'ÜüłóY·nÜß²e˘1c†V§Ÿ9ƋŖ]¾ffšk[Ƽ£‰šØIŃm`llĢėׯyųš”Üė£FāńćĒr®³Få+ˆS§N²²²HJJ";;›§OŸŅ¾}ū|ĒÉ[ø %99™˜˜…ķŽÆģ[XŽSüżYc_Ė‹Š%VŻ<>ƀ%—ÜÉĢV¼xŠČ%…j6Å_D” ģŻ»WaÖ¼?777üżżyūöæk~śōé*·łņӆ‡‡3hŠ lllpvvĘĆĆkkkjŌØĮ¢E‹äR¦¤¤¤ØŻæ@ য়~ąĻ?’D püųqŗt邁Ź…>‰D‚££#Õ«WG*•ņąĮŽ ĶÆ_O1 /- M<³i]7›ówKnņÜó#[œķ é8õQqņa —7ŌÉ׎ĘĀ€ŲDyQĖŲPĄŪtݐļž‰qÉ:Ŗõ¼Ēˆį¬ž-±Xł¬;33‡ļ¾»ĒŸ6+ұjÕŖ%—ļ„“HOOēģŁ³ņūļæó駟jeæ«V…h$NŽ£PŻ‚šŃGĘTt1 2Jł.;[Ź’%X»¶‰VŽ9zōh5jđ#Gˆ§^½zĢ™3‡.]ŗČŚ|öŁgŌ©“’Ž@÷īŻ¹zõ*QQQŠÆ_?ś÷ļ/sŗŻŗu‹)S¦Č…’ŗøø°vķZĪ;G\\œĢ=•““ƒ™™~~~ <†„K“–¦Z|±“ҹSé…0õėcN@€źÉēķŪ‰>I·nÕīoé҄ԭ[7ßėÄ××—Ė—/Nff&ĪĪĪtéŅEn½bÅ ¾ųā nŻŗEtt4‰777:tč w^~ųįĢõė×eEŖWÆNĒŽ13ūOųųå—_ņ¹ŒŁŗu+ōéÓ'__7lŲĄŌ©S¹}ū¶ģ·åįįAēĪÕVыĻdŻŗ§*Ū čÆŻŠŅ<:t4ÅĪNH|¼ņgx\œ˜ĄĄŒßMš––ĘŸžÉ£GˆŽŽ–Um8p LŌ„\'R@@ĮĮĮdddČr& :TN|éŅ%eĪ‘[·naddD:u7n––¹÷¹S§NqšąAfĶšÅŚµk¹{÷.&&&4lؐ1cĘȝĻÄÄD6mŚÄõė׋ÅXXXŠ“iS† †¹łāuDD›7oęłóē$''cllLėÖ­æ_ķ=!C†päȶoßŽæææĀ6G%..ŽńćĒĖõÕĻĻ/_.ÄwiÜø±Ņ÷ōčzŃ­Lé-ęŚcS22KęĮ]©‚įÆ3ó nVę"¬Ģó‹µŖ˜{K^tóŖbŹńąā«F¤)õŖeÓ±IéV‚ÕĪĪ" 0S;1xΈUiŪÖ±ŠĒڲeK”·Õ&>>>œ>}Z«ū|ż:ƒłóļ«m×ø±‘Vq”PĄ§Ÿš±r•j«ü¦MĻ™3§6®®Ś™\öģŁ“ž={*}õźÕ _‰Dōļߟžżū+ŻVŁ@ešąĮ <ȝ@nŪ¶/^pėÖ-V®\Y€Ž+'>>“5kŌ‹/=?1ÅĤō&vMšS£ŗ!!OU;ŠśéF¢Ū°aƔ¾ēģģ¬ņ\ēQ»vmĀ¹½¼¼TWQÕuMūš>Ė–=&%EõsK$‚¾8K ƒ‘”€Oz˜ńē&ÕĪ­ 2|xU¹I²D"įć?ęöķŪtčŠ'''ŅÓÓY¹r% ,ąŅ„KŌ®]›äädš4iBTT>>>T¬X‘ØØ(vļŽĶ’%Køqćnnnæżö’ż·Ģ±FPP;wīäüłó…BbcciÖ¬)))ųųųąģģLdd$Ó¦McÕŖU\½zsssBCCiŚ“)FFF“nŻ{{{¢¢¢š÷÷ē·ß~ćņåĖdddšģŁ3Y%äČČHŅŅŅę”JsŻžźčŽĶT«"¦÷äE‹2dˆ;BaįŽWaōčŃ“k×www:uźD÷īŻ?~<}ūö„S§NˆD"öķŪ'—cKŪ8::ҧO&OžĢ½{÷šņņĀŌŌ”§OŸ²|łrŗt颲PŠ&¼|™¦Qhiæ>%—āA—ńņ2ÄŃQ„Ø’#ĪMœ‘ęH‰¼EģŻ’ OEGgpģŲküü\Tģ©čT«V§OŸņąĮĀĀĀ'<<œ#GްuėVBBBņ¹Ū”‘'Ü~õÕW“jÕJa›ŚµkĖÜžŁŁłŠÄbՅ84!00,Ÿ“ÜŅÕÆ~^rBŹĖdn»°ż^Zŗ%Ń¢Ržviˆ„EO擝#ąųs[v?¬ “Z)@OĻXܬŠž™‹‹Ž½{+cĢž=›-Z°uėVÖ­['ę>iŅ$ÕĻ[~üńGbbb8uźT>AkŚ“iōļߟM›61cĘ ¹qIćʍ Uu¹gĻžXZZ²uėV„cŁmŪ¶!2dˆÜėmŪ¶Õj„g=%^t+l„ ķ˜Å†Ć%“#-ź„ŽķLš©kɕū© €ŹŒųr  ˆäeÓ»ü6›‡/Ұ¶0`Hgœķ 9y½tcŌE"˜ś©¾b©®0e²5AAiH$ŹīR)Lœx7:)ézyeźŌ›$%©•žŅ?’jjI1z“9ėÖ'£¤0$bqsęÜå?ŠęjōóóÓZž¼¢`llLZZ•*UāŸž”E‹ZŁļüł÷Պ/B”€1Ÿ—¼«ń]˜8ђ)SUēh¹|ł Ū¶…3p`åźYŁ#<<eĖžØm×£»UŖߐŖ__sµ¢[hh*żĮ€’Ļæ’ž›+W®pģŲ1:tč {=>>ž:uź°råJÖ®]KPPOŸ>åīŻ»r×pdd$¬[·Ž~ųAöz’žż™={¶ģ’‡¢{÷īœ;wŽ?žȝ¼N˜0AV”r'ƒ āʍ4iŅ„U«VńęĶž|8Ė—/G(r÷ī]¹ÉŌłóēiÓ¦ ¤_æ~;vŒ›7oŅØQ#~żõW„ļ½{_rļžś…Čāļ×Ļ\­čöąA2‡EŅ£‡k”ŽŃ¾}{ęϟĻöķŪłēŸšóó£S§N|ńŤ§§Ą©S§°··§K—.|śé§²p€J•*) ł“µµ•Ė—čīī®PŌ“³³“sø°`ĮŽ?NPPb±˜ *0f̹T+VTX˜A‹?R^ķģ,śą‹(ä!ĄG£kņ¶ŹēŅ„‰ ¶?$üō!ׁ/Š]t[±bU«V„{÷īrŽź1cĘąįįĮµk×čܹ³Fū²²²ĀÜܜJ•*ÉŻļ ×É»fĶÜŻŻ©\¹2@a˜_D„śbźP¶īPŪAiq¶Óa¶œ³ÅĀ(›Rhģ’Œ§C:F3*¤K„\ziĆŃgvJ‹&äįiŸF÷šŖ+¬ź*€¦M›rõźUāćć åPK>läĵ$ī?OĒŽźæÓ˜#åĀŻT¶Ģó@ō’WH%YRVļŽęŅŻ”bļ«*ųJØīŖ!®zĄĶUDÆ^fģÜ©Śķvļ^Ė–=aśō¢?pŹ’žūš;ŌÆ¬×«kDūRØb™GEś÷3'p‹źó¼iÓs†/š«Q[޲¢ŅŗukZ·n­Õ}Ž»—Äoæ©w¹uėjЧgé­éó©K~I&"Bõ€Żß’&~~.ŲčP”]bņäjók 0erń ­Q·®wļŖPρ|@Ÿ>•dn·`kk›ojggĒčŃ£eE0īŽ½‹··w>ѼbŊ“k×ŽĒåóVŽ1Bī’:uąÅ‹·kҤ WÆ^„sēĪr‚äV™vwwēĪ;@n…źvķŚås/“jՊnŻŗ)ĢS¦Œģl)?ü Ž”\£ŗ!-[h?†gMź×3äöõNŌŠnb5gιׄB!žžž ]Ƈ—żūŲ±c ÷9aĀ&L˜ ū’„K—¶›1c†œ+ĆÄĄᅭžļæ’^eŸwīÜ©ņ}EDGghTܦϧfˆJ¾¶NždBzÕŹšŽšk5xy>‚œ¬Üėiß¾WÄÄdąäT|c˜’ż—„„:vģ( żģYī9U&،† ĄąĮƒå tģßæŸ™3gŅÆ_?ŒiŠ [¶laĈ2‡\ll¬¬ ja9s&–Gņ‹źYš‰g©™"ĪGŲp>"·šo‹LūüŹ6÷ļ'±rå¦Mó **J©sč]ēZrr²ŅdöŽŽŽłÄ“÷ŻMy9ÄŽM:m`` Ėń¦¬Ż›7o ”_æ~łŽ›””$*Z³fĶ|mTŲoe¬[Ź­[ź L™lYčšNuŒmÉä)ŖØWÆĘsš`$Ż»«’łłē‡¤§«Ī³i`ƇåĻö!"•ĀŸ·*’#Ķ’Ū643ĄŠÜqRnøazz6æžś„Ÿ֞čš>'N¤gĻžT®\™ŗuėbooĻėׯ¹|ł2>>>“lٲ@ū[“h~~~T¬XoooˆŒŒäڵk 8P–WpįĀ…tļŽŖU«Ræ~}$ ĮĮĮø¹¹)Ģ{Ø)?żō@įėŃ7¢©Ń½F–{VD§ŖŻē‹“y&Ó}Ā ģ¢Ó²³³9|ų0ū÷ļgäȑłņA޾}[”r »TŖTIV”T•`gooϘ1cņ½Ćõėוn× ADJ~___ÜÜÜ āūļæ—s?add¤0ÅŹ«WƔS$Ń A„żŃ£čE·"ąę(åė~™|æ¹dŖĻ¼~#įõł•Ń8%ĀYņŪlī†*Nī.ɒSr˜„©”y#20ŌÆ0źU«0i¢5æ,Uf“™™Cß¾øy³3vvvŒœ)Ɔ]!::CmŪ.]ĢčŠ¾ōĆYÜŻ 賉ķV]šį޽$~łå13gÖ*”ž• ÖÆåĢ™Xµķ:u4„~=ŻqŒ hĮŅe)ÄÄØž®ZBß¾•hÕŖč ¤Ė ‰‰ʎ½¦QŪ©SJFhĶsQ>~¬Ś!5wī=śõ«Œ««)ŁŁŁrnedee) }R„&m5i“••E… &nÜø±¬ąŠ¦ŸC11|ūķ]µķÜŻ 读ų*ŚŪŒ’-QļD8ń:섹¹~ø®ˆ»w“ųķ7õIļŽęø»ėæC€ćĻķ MPœCOœ,&3E~~°zõS¾žŚ [ŪĀż>łä9§Pūöķå*ĶūłłńąĮžłē^¾|I||[ Žb_’šĶ 1Īve×¾\Ž™2Ł’ævæ%,Lõą?<<Ń£Æ²gOėRwn•&sēŽćųqõ•žLMü8æōr¹½ĻW_Zqą`šZWćw߯£m['Z¶Ō,qqyēīŻ$¦M»©¶|3SwĪ7€‰‰€ofZ3Ķ_µ£&;[Ź€—øy³%³ˆ¤ĖH„0zōU^¼P’ Š«§–ĢB„P(`ā+&MVķvKIÉĀß’&;vä&ˆW|ž—.]Ź“'OX»v-NNNEš#’}&'KX½ś)ß~ė­d+Õ¼/€“jÕ*_®E¹°eEōīŻ[įėžžžłīĪĪĪj÷—·ķ»¹)ß}½0(s¹å‘ņ*•ŠMĮ>S•³/ķøų҆tIÉDsčV3Žžžqe*¤TQõŅ““4vļŽM@@}ūöĶW-ōŲ±c*n€,”¹ © ņčׯÓ§OWś¾:!o芔,^¼˜­[·ŹD·]»v!‘H”†–Nš4I.Ą»(sÕéŃ-J_)*ų÷ĶäUœ€Ū”„ū£I“ >©{I2¦k&­ė–Õ”‹ŚŅ z'Ͼ}Ƙ4é«V5*žé[¶„©Tåń„ænnŗs‹­VĶP#W£D’C’ž¹y³3öö¶«ńķŪ,ś÷æØ6t `ŌHKj×Ö—[ƒš“ķ-ĮĮŖ«“½|™ĘšįW8tč£ZTX¾ü {ö¼TŪĪĀBĄ¼¹%ėXčŻĖ”_–šā…źE’;#čŃ#Œ5jšņåKnÜøA£F’Ż·³³³ ”…ZU­Z•Õ«WIŊ’…3¦„„qžüy„ƒż¢R£F 8@ff&FF’ŻoŅŅŅšóócÖ¬Yx{{S½zu:„X,–s¼EFF²}ūv¹b)y”FiiņĪŽ={^šBmŸÜ\E č_ü”ˆƒš³tY2ŃŃŖļ/‹?dš`w<=õĀŃ»üńĒ3ĪžU?nѕ<›ŗĄ¦Ū.¤IĻUCxy^ń}ońā‡ŒU•еSį¼Š”CYµROOO‚ƒƒńńńįŅ„Küžūļ=z”&Mšpłņe<<<€ÜÄŌ/^¤qćĘ\½z•ĄĄ@Īž=‹ÆÆ/.\+aiiɁšōōäąĮƒģٳ—.Æ~ŅŁ® ]ŗh¶„ F“¤Nõ.¬[·ń÷æU=Ņ}22²8š©©ź“ĄiI­Zz—[ģ[#‚ī:+}_ś8‚”—)*÷ĘɓźSk|ˆ,]ś˜;wŌgó¹ÖÖŠĒ††Ł“ŖœČ”fį¬ķņķŸņYĆW“«’@ ū4ģL²”†… RģL²Øåš–ž^1|Ó:WÄZļ5nVå!ą^j IDATw.fkk‹X\ųĻēććƑ#GHHPęõźU 7o ¶8p "‘ˆ   ¶mŪ†T*eȐ!Z?ŽŻAwbŸŹöVR–ŽĶ`ŚS^ĒėŽ„»¤ųØ~³‹)¦¢_zŠ ++!Ö;еŪkµyæ¤Rųüó`āć3łśkƒé`)qüx4½{Ÿ'-M3—Įā…¶T÷ŠŻ[«ÆÆ ½{™±gÆź¢ [åĻÅŔ¹sk«m[žX±ā hęęl’± ½{_ĀumńĶLkNœL'4TõDU*ĶuH99™|PUĆĆÓųæ’;«‘0cd«VŚcXŠĀśO?ŲpęLiiŖīŻKbƌ0‚‚«­ÄY£F VÆ^­²MĒŽ&©;vLö’O>ł„O>ł$_;sss¹vµjÕā·ß~Sy\Č-¬°qćFµķڵkG»vķJaĈ+lŽüBķ6Ęƚ»µ…H ¶„ū'1j]2kÖ<„];'śõ«T2ÓQ&O¾ĮĶ›ŖsįTØ bĘt½Ė-;GĄźk®dd)^r2Ϥ·oMå‡ī«mgn.ąóĻ4[üĄÕRŒ«„˜Ü’ó²s$Š Čy' U(”bmœ…šĆ‹L022R(ŗ………É*_+ĀŻŻ‘H„ææ?Żŗu£S§N,\ø-Z`jjŹėׯ9sę ³gϦR„JųłłÉmŸ””ijgŹ'­¬¬ppP]˜ŹÅŅ:°oß>‚ƒƒ©Zµ*­[·VŚ>>>^å1ķģģ°±)½zŌ£»KóeWG)k§¦SŻõĆt¼ł5Ėāūab}„Ņ2Jżz†ĢżN³›¶Tš›”zŹ”›…\–E¶l £K—³¤¤hVV}Č`sśöÕ}ę‹m©VM³Õ’yóī±jUįģūe‘-[˜6M3G‰‹‹ˆU+ķĖD4ss×;`l¬IEI)żū_ŌØ`HyąÕ«t:w>ĆĖ—ź…h€ysmK½J­››ŸĻŖDóƚóяŃplCĢ+(¾÷ģŲĪ”)źCńŹ#3fÜÖHp˜<ɒŖUK^LhÖ̘ż5{nŒq…óē㊹GŗĖźÕ!lŲ ™÷ūy6XZź§9ū;ņ,A±{S €Ń #ńiaČ’uVļž}ņ$åƒvĄæOFF6żś]ŌČu9q‚%¶¶Eū=Š„RģM%8šgŹžģM%¤ą`ooOrr2YYņßÓ¦MńššPś—{ķŅ„ kÖ¬!$$„:`aaH$ĀÕՕAƒaooρdEņ T¹’yóęiŌ’!C†ššŹćĒwīÜįńćĒtķŚ333Ł’Õѽ{w9!-55•sēĪńüłsRRR°““¤N:“jÕJ®2hVV{÷īU»’źÕ«Ó°aC^¼xApp0}ō*TČ×.--Ć‡(m“œœĢæ’ž«ö˜uėÖÅĖKw"6g°ķ†¼ ńŪ6Ļ©iÆŁāfyD/ŗ#b ,ŻeĢ‘«åŪ†mlž}Äų5ÓĢ ¤G÷‘H¤ lj“oćåeÅĪ>Ō­k]Œ=+~bcÅ v…ž‰Ņx›jÕ 9tĄ‡²%:ž¹)•35`&LØĮŠ Ն©•E-zČĢ™w4n?ėk¦N)›“ŽńŽš×nĶ>,YŅOõĖĮĮńtķz–ŲXĶrĀø¹Š8qĀ[›ŅuĻ<ˆ5gÉ„ŹdåäļĒƝ;łBé¶?žX—ٳ˿š¶téc¾śź–F­­Ēqs-Żū÷©S §‘č_©’ēĻ·§rå’Ė?WšüóO=zœG"QEāč(āäń TØP¶žĒŚ&U"ā»SÄ„)våV±Īą»vĻ0x'OŲÆĖ“łyź ēff".\č@ƒn8[PPƒ_ÖØķŽmŽųś–­ŗ‚PŃ-::šżū÷«Ü_·nŻäŖhė){čE·üč}×ň±!|3HĢģAbLĖ§¶YŁ)‡µSÓõ‚[9ĆŠPĄļķiŌHón%Ó²åq6mz^Œ=+^NŠ”Aƒ $ø¹øˆųk§C™ÜFް`š ĶĆaWÆ”OŸ‹$%•ŸŖÄiiŁ v„@‚[÷nfUŌU–üĻVćk[*…/æ¼Åĉ7‹ĖOŚ„€€“kwRcĮĶÖFȶ ĒRÜBLłõŠbĮ ĄČ\õ"߷ߎeāÄå¶2±Tš’嗚 n,_fWź‚äęۜ4Q³āi|ōŃI?Vü¾<°’+z÷¾ ‘ą& X½ŅīƒܤRX{ĶM©ąf$’2®éK9Į `üxKjTW:Ÿ––MēĪg )’æ?Eœ:ĆØQW5jŪ½›Y¹Ü Jvv6 *’$’ņ3ĘŌ£'½Ó­„x-`ī&žG•³s³,¾ģ#ĘDs]FO#>>‡ŸÄš$¤`ĄŽYµŖ5k– a"&&ƒ3īš¼@łél¬…Ųļ„—WŁ­Ž– Ÿ‰ćšįt·qw7gūö–“ha_Œ=+~=J¦_æ‹Ü½«~e?V>ĘlßęXęĆDrčŽ£`×v£F¶ģŲįCõź„SµS¤§g3sęV¬x¢ń6&&vķp¢yóŅ}Ų½J1į§sUHĶT.(\]z•ų'ńj÷5`@ežü³&&åGœČĢĢa̘`^h¼ĶÄ –|7GwÜ:YYŠūÓ._ŃL ¶³3āŠ”hٲlߋ•±iÓs>’œF ųēļ T­Z¾ ¤ŲX ٻǑ¦M “Ż•+ohÖģ“&ŻŠéÕīäd _}›† ręLl¶­Sǐƒūpr*3:OOCtĀŻ½`æē3gbiŲš(_}›ø8ĶBįJ‰$‡õėCńņś›µkC äŹ46°q½żū•~xĢļ7]xƼµß2”ÉK ¤¬YmW k8%%‹Aƒ.1dČe^æÖ¼pŽ.+fŌØ«ōźu¾@ ' ź°É#vź{z“Õ33ĶDA©V¬xBėÖ'xž\óŹćŗĘٳ±4hš/GŽhžWµJ¶nqĄĀB÷Ō’$;GĄŹąJ$e(¾—s˜Ü, #õ‹ęB”€ßVŁćā¢Ł3ļįĆܜ¾qŽ—%Ž¦}ūSēmÜXs· =z> D_5z^iwāCÅÕQJ×ęY4®™CbŖ€ˆXŻŅ@ EŠ”IóGˆńkž…„™^lū‰ [WSW®ˆ ^–‘‘Ķ™3±üśė.\ˆ zu ŒŒŠ÷w/‘äš÷ßQĢ™s—1c®qš`d” ōėgĪĘ öXYéÖµŖ-LMōķcĪć'BB4wI„põj<æżö”čh1õėŪ`i©.Ąäd æžś„~ż.rāDtĆa[ł³c›#vvåOpĖĆÖVHĻOĢ8w^LLŒę.ęœ)/ĘÉĪ{½z6XY•žyĻĢĢaėÖ0ś÷æČęĶ/ ānn.`ó&:v,}—Ā”žyŖļ’˜(aƌ;Lœx½@Ļg{žrÄĶ­|-‚†­w ŽT.ō «E#ĶĶĢ4onĢž½ih’×>%%‹;Ā©[׆5ŹF>_u䉣#F\%=]³ūiåŹ"vķp*·ćDEdd ł'Tž9UÕ^D«Ŗ„?ŠS:܎Ģā^”ü5ó‘{"öfŗõTŅč )čO^ łēŖ'nZz%Š9tnšEē&YŲZźzņsž‚˜qćß]“0c33mŚ8āė넯o7¶E$*śo’žż$NžŒįŌ©NŸŽ)pųčū˜š XøĄ–4ÆōY–ÉŹ’/ćŁ¾£pŽ SS£GWć‹/<ØS§tV{?NaćĘg¬[÷”””ĀUWīÖĶ”µæé¶#F›$'ē0bdē/ιfb"bČwFŒØŠ‚~Œ…†¦²eKėօU8G­³³ˆm[©]»ō' bĶYt±ŠŅ 1ßµ}޹ažūpzŗ”Ļ>Ʊć’źÕ³į»ļjÓ«—«N‰6R)8šŠłóļ*¤ż£LŲōGŁsD:”ĪŲńqdš1Ö°”-æżÖX§ ŽH„šœ3īS0§„›«ˆ;5Ŗ¶Y޹nĶŗnJßoé–Äø&/ µļsē288Vćߟ@“&Õdɒś–]į)9YĀēŸ³sg„ĘŪŲŁ 9t°Õ=>,X_HAĻūč )äG/ŗé YŁpõ‘ˆ£× øöXDrZń+9åŠŖv6›fįQQ÷C^õ”>±±ŁŒ›ĻŁ³Ś I²²2¤V-+<=-’’ŸŽŽĘ˜›`kkˆ……"‘¤¤L’“³HMĶ">^Ģ“')²æū÷“µīęYӀšōü°öR)¬[ŸĀ?&‘))üc¢aC[† «ĀĄ•©P”xscÅʼnپ=œ-[Āør„`˜w‰ą«/­˜6ÕJ§D‡’ + ,LbÕźä"Kšš°`Čwśö­DķŚÅ'¼FF¦są@$[¶¼ąāÅø"õł£LX³ŚGĒŅw5¦dšķI”„Š™f3·ķsœ-”ßė²³įėéńlŁZ8ńÜĆƂéÓ½5Ŗ„wääH9|8ŠļææĒõė…Ėٵ«)k³/³EPĪ_3bdÉÉŸ …zõreölo6“-¦Žœœ)ū÷æāĒJ@õņ2dĒ6GĆĖ3”ńfütŽ¬Å—›•˜¹mC1žęų×ī4&L|S ūk«VlŽÜœjÕŹ^µėóēć:ō2/^h~ļ“°°g· ź «tļ Żō¼^tĖ^tÓqr¤śJȍ7BD< ’XDœP.ö9Ō­šCćŁ4ōĢĘÉZ’3ŠSp¤RŲµė-sæOäĶ›ņ%Ö 1܂ٳ¬03+»«µEåÖķLĘ|ń†/ ē{—jÕ,芔:T cGgllŠ&d¦„esńbēĻĒrįBgĪÄ9‘øƒƒˆ5«ķhŪ¶t“ē—6ĒOd0qŅāć‹~];;›Čܬ-[ŚS³¦e”ĀŹsr¤„…„qćF'OFsņd i^A"|ż•5S§Xź„Č*~½\™›Æ‡h‰„R¾jFmGõB©’/™eæ&ŗŅ°««)ƒ¹3lX•u®>xL`ą ¶n #"¢pu&Œ·äŪŁÖ:qn‹Ā½{ Š-Pxųł¹šĶ7Ž“n­<\¹øÉĢĢ᯿"ųłē‡….ÄҼ¹›±±žpŸĖy$ešŻŅ‹ó&9ĢkūŒŠ–E_ˆ\æ!…9ß%Hx351sf-¦O÷ĀÄD÷ŅŲX13fÜ.p5{cc[6;|°ć½č¦ē}ō¢[~ō¢[$9MĄĖ!a1"ć„$¤ H HKI HĖ3–&9˜ƒ©±{+Øģ”C%§*9J1ŌCŠ£EsX²$™ß’H-ōÄN—hŻŹ˜… m©YćĆr·)#1)‡©Óųūoķ=,…BīīfŌ¬™ėh¬YÓ'',- °°Ču5 ¹•łRS³HN–'&$$•G’yņ$…/Ž’­½ß[»v&ü¶Ź®@Õ<Ė3‘QYL˜Ļ…‹Ś-”  ØRŜš5-©^Ż ¬­ ±²2ÄÄD„D’Cb¢Dvī#"ŅdN֌ ķVĪv­(bõj{|Z¬€Hqr$Ğm÷•¾?¬~ŖĘhŸ'O¦3aR|‘G6“„wo7|}hÖĢN«įcYYR‚ƒć9y2š½{_ŚÕ–‡­+Jæś¬6 ĻfŌč8īÜ-|ŹOOK†­Ā!īø»—LŹ„+WŽʎįEr¢÷ėgΒŶ˜˜”mUHr„ütĪg Š… 0¾éKš»jÆøĮ–­ołzz<ټ WÆnĮ²e éÖ­¢Öś¢M$’6n|ĘģŁw œŽÄŚZĄęGZ¶ŠgHI£Żō¼^tĖ^tÓ£GÖ3o~ĮĮŗYĶP5ŖņĶLkŗu+żźŗČæG3ųę›x^¾Ņ®šQŚŲŚłņK+>mQęŻ0Ś&ĻĶ:o~qqåē¼ĄČ–|3ÓZ§r|Ŧ1ė„ālÅbVs×$&4-\n¦ØØlʎ{Ć„ĖŚ¹?[XŠŗµ#Ķ›ŪįåeE͚–Ō¬i‰……ś|FoßfɄŌGRŽēģŁ˜Bē_|Ÿ&MŒXæĪ7×ņ' gfĀwsłćĻ‚Wß~”P@Ė–ötģ茯Æ-ZŲk­°QBB&gĪÄrźT GŽDR“¾~hyU5į÷›9¦zŃ-?zŃM=ZēŹ•LV®Jęč±Ā%3/ijÕ2dĀ8K>żŌQł›£i•““V’–Āņå)EŹõ¦ Ч9?|oƒ>TIIIR’/‰?žL)°ĖA‘‘‘¬tķ-šŅ²…1‹Śāå„[%)°ųBīĒ*œĢ3ł”](¦†…w«eeĮŹU¹į¦…™4k‚ƒƒ1VV†X[ē:V…ˆÅ9¤¦f‘”$‘¹V‹##˜<)7£”aéOź‹“ƒ‡Ņ˜ęŸPଢ ŠŠ‹nzŽG/ŗåG/ŗéŃ£§Ųø~=“•«S8v,‰Ž 4Aīä{Ü8+:u4)ńJ‹e‡%üōsĒŽ§)y}AˆŒ…di!İm[fϲž “…;w3YņK2’ž[ųó.ØŽĶƒ*Ŗ"2‘™Ź½Ą{$>OŌngߣvmCü§YŃ­«™N^ļgĆmŲxĆUį{¾kūœ*ÖŚ)\–Ŭى…ŖnŖ«|ˆi""²ųfVb‰,p™™‰°°0$++WlĖĢ,Ž<®††>’ܒé_Y~ŠyUßēn“KÆT&;GńMĢÕ2ƒ¹mŸcbP¼ēēłó,>ó¦H”Ī&&"zōØČŠ”UčŌÉYkNKE$%IŲ·ļ›7æąōé˜"„BéŚÕ”_—Ścm­ƒ’R@‘čVßՀž ?ܐŪc39"‘{M/ŗéE7=zō3‰I98ĘĪ]i‹‹E¤qkåF5æj˜ž?öī;>źś~ąųėVīrÉeļöŽ K„•‚øZ©µŚVPiŻžjµÓŖEmÕ· µøEÜ ŠŒH=BŁ{\rw¹•»ß1‘˜ļ7‹Œ»äó|¹¬}¹@\œš+~¬ēŗkżHNw(Ļ×ńćžz¦wŽ1÷Z””¤…I [2 ź ź9śß£ĻvæWͼy:ī½;©SE°ķ|œ8įą_O7šī»fœŻLTK½,•ŌĖRŪls˜ģx`³CęY=7~¼·ŻjąņĖ<3Ų`u*¹ćóįŌŪ¤?“VŽ©ąņ½_*öÉ'Ü’ū: ū7Ū°7ÅĘØųćƒøü²”›UńégV֫æēJ›©å‘æ{^6ź@+iŠņĒÉXŅ)łĶSĻåßó@XwŲķš‡kyįÅī—fž^Æböģšļ†īD0eJšyįœddT±m[Ū·W°Ķyg_śųĄƒęĘ_xßDÖ¾TgÕpė'#z‚‡ūż¼<†‡ˆ › BæČ9ķą£¬|³Óʾ}6Ļ’#(zZ4oœŲf›­ĪĘ7}''ś0wŽŽEū2mš¶ō…œÓžżļŽßŅHCCļŽa™Ė„Ÿo³ĶavšĶƒß`očüāBÆW°t©ž[~ķϘ1āūß›ĪœqšŅĖfŽy×BeeēQא‘!Læm: ‰Žy‡_>DqFIƬK§S°ä_®»Ö¹s=摞»'Āy÷D„ä¾ø¼0µ²oN×7ļ¾kįń'ėÉĶõž M\œš_ŻģĻĻ~ź?äė›*öųóįgVŽ{¶˜ŗ–Ģ “˜h5÷ߥŠ~ (&»š‡v$Sn’ž¦PĄoÓ ˜y~żózbėÖFÖż®ŗĒå¦RZīŒi`ŌØāā|ń÷×Ō\¶®Ń(±Z›Z-ÕÕ98{ÖÜZź\TŌ»÷ÉÉjžŻĘÄ "üCn7Üüįh¬N‘‘*Č{śŅ“|¼ē£·‰ › Ęn‡żY6vķ²rš ƒÓ¹N ŻĪœ™ń»™„ oßPx¶6kēš=ŖQś`g³¹łźko¾ięćOz§¬xĘog2"¤Żö£Æ„š›BÉē(• ¦MóįŹ•z–_į'~ś˜ĖåfēN›ß“šį‡,–ößwƒ–Ł’—Ž6P:vdÓŠvõlH@‹‰4¬\éĒŹ~{Ē@ƒ]ĶŸ§ŃŃ~½ ü~n©żpwŲé„÷޳šä?œ<å¹'Ę©)jn»-åWųś¾m]‘_§ćļ»1Ł›³$ÕJ1%§Ųüx~ÆAśR|¼š›oņēśŸł£ÕŠļé9\JŽ™HN|6ēÕcĖX2¼ŗWÕVm­‹æüÕȦWMżÖr¢?h4 V_ļĻ}÷āē'~6å¼ōm ŪĻŹö†¶q&īš•?ŠĖP"č&‚G±;Üäē;9ć¤²Ŗ £Ń…ŁģžīŸ‹¦&šóSąē§ @‰Į_IVŠŒ“Ÿ8ŗtx«Ę–Ą»**šųģs+»vŁųf§•ŠŠžÕŸĪŗo ķ¶Ÿżā,'Ž:Ńśß””JfĻŅ1g¶–E‹uÄD‹ņį`6»źXƒL IDATŁ“acēN+;wŚ8rŌŪ S×N%lL˜äsšlMģx`6c÷ģĒÅ©™;G˜ŁZęĪÕå}“P^?ÅĒ9”’ūę'ÕņóI½“ż×U.—›}ūlłĄĀ[o›©­ķŪŽP]”Ó)Xt±/+Wś±pµųÕĄéRšŪS(ihŪ;IÆiā³N°ńÅz^x±źź’J9RĆ­k \q…ŸųžŹp’ŁĒž¢@ŁĒĢN0ró”ó»aŃ[22lÜuO-'Nō~«€ž6ūDöT£CÉæöÅs¤B”Ž m%5r[Z!:Ͻ™×DŠMÆ·~OߖŚmŸSϚŅ™PB’;yŹÉĪVޱs:×ĮéÓĪ.] NłĶT"&„·ŪnĻ« 2’$cĒj˜3[ĖčŃķ'ģ ƶĪÅ »B8äg-BsŠ%%EMŹ0 ©©j†W3mŖ–ÄDļ¾R·7)øż“‘˜$z4iTn½ųŌ€žØZ­n>śø‘wß5³s— ³¹oOĒ_?›ŃFŽēyhÜNf„kY~…—^ŖĶō%|r:”’‰’Ü÷ąy ¶ŠŌ»vYŁü¦…­[-½ŅŅį|*Y¶LĻŹ~̘!>³;óΉpŽ“)=jįžŁłØ•žXu8ܼüЉ§žn ““›½ö‘±c5Üł».½tčö‰ģ 7pŖJO~½/Ž&ń‹=Ō)n­Œ µ ź£öŽDŻAšzÆŠā³3ķ3E’ƒyčĀ3°"”«jė\œÉuR^īlĶhl0¹ØÆwįv+ TP1ŒbŸČvĻM ±šĄ¼¼XµŠłu:Ś1 §Ģ“½Qžu,4äa67a2»Ńéųł)ń÷WМÕŖD)ŃĪŪmĖ įåƒŃ’ū–¬dÅčŠ~^‘<§°ńĶN»vŁŲ·ß†ÕŚ{§>>0gķD|†G£Rø¹4µ’„#ŖŃk<'˜ąIģjīü^My£™ū¾„&·‚OrĆų$7œE)Õ\>¢Rß~ą­c²S,'E5“ øAs–Łõ?kīÖŌŚŁ¹ĖŹ®Ż6ŽsP^~žYI*Us¶‰4Ģ™£cĪl))ār£»rŖõlȊ‘ øłišøcVĒÜ|4 ®¼ŅåĖżx÷]3›^5“¹·o&Ų÷”FĮ‚…:n¼ĮŸyó<čŽ ŽIüĮėEųI÷±8T˜*ü4ŽWŽ |O®¼®Ī¦¢É„iėģŻaÕk%÷©•.n™^ˆļ ¦”™“„æ6sāėš÷ń¬Ļ­OsCŲ|4§K‰B “jųé„R’’Ō,\Š;«±ÉAVņŒZ®ęrŅĻrCłāL‹R«¹,µjČž¼œ«ĄØćėü É}j…›«ĒuŽĖT„‚)S|˜2Ň[×6okhpq:×Iīi'gņTV5ÓSՍ±® •Zń]Ŗ²µæjT”š”ļØÉÉ|†f ½×T˜}xroķ7¬döģę”;ó/ō%9Y\ ‚ŠÄ'Ž ^/ŅĻŽFå–lÜzŗZ/‚n^®£ ZÅGŻŁß²K„§¼Ål$xX0r©A²Ģ-»ŌŠėA·é±õl<ÓŽ6ūÄMó“Ī·GšĮÉ0–¬bŃ ¾er¢ZŗĮ{€Öɲ‘•ż¼"”·8š¬Ļˆ§Ģ$ō\:¼Š”ļ©I}˜4±9ÓŅīp“egļ>¹¹NNå88“뤶®ū™­QQ*RSŌ¤¤Ŗ1\CzšŽ1cԃ²/Ø ŽAŻAšzj„›ä FNI\ˆœ®ń€ ½)Xļ@”@²Lu£†Ōž_’ЉķłĮ²e„Z•‹&•0”/.%uҟM3bż¼šĪÕÉdŻōE³qµĀĶĀä¶ž Ē%ń;ßäRŠčRńĪń>Ź cŁČ $×”ń é}ÅѤ`óŃöCeZ¬S!zßy)—[ĮSūā9]#?1sjLWŽé¼tŲłh¤„iIKkūw£¦ĘEQqsÆČsKL.šK[zE)IHPa0ˆIĒ‚ xtaPb‘ ŗåŌčq»ūęāPčj…›'F‰ ’źFńgĢӘ*Ž9.»’šńe–„gku8eŹĒy`ŁXƒLŠ­ÆśĪĶOŖåƒ“ņ?CŠ\vź°«Ų|4Š­§ĀY>ŗ‚y uƒŗĒć‡9įTY4’ū’­ĢK诬C”’¼v8’eŁżÉAüjjį;— Q"ŹAšnāV€ ƒĀš‹äv³C%›q#xP_éaµādÜÓ¼w"“]:H3&ÜĢ…I"0PP/=x@­t“ŌŲĻ«é\½UśūŁW“C} •žL’!§KŃ¦fÓĮhn’lŪĻĖ–5{³ŖF ꄬīævBé Č [sĀųüŒü÷6ÜĻĪoÓ Š±RjA„ĮBŻARCä/T÷•Ź7,¼Cˆ^:čVŚ õ! Œ*‹†/ó‚%÷©”n~:”tH—•¶ĖVŠņ·ććÖrMŻ“}×OńŠQŻ "9Ż ŒV5›EóŪļ‚orüѫ‡¢±5IŸ¶§ĒŁÅ „ąY2‹yó˜|ɰæOw¤Ų‡æk‚ Bßu9^¤É„ Ōä#Yb%Ž.Ō×I¤æ­ĒäZ' V Œķ3Hö²|”h.ķĶbd¦ń•˜¤3†„ńÉéPœ2YF “jˆ5ōlŖā`SÓ(t —™Ō;Š,Né`O@eŗAsVdØÆC6@)ĒéRPkUóŅ·1|u6˜‡.<ÓG+ģ?Ė d—J—śØÜ¬;8ū| vĒ«üؐ#ŁÆ@£róŪ“¢{8VAš "zć%—ūóXjdJ<a0ˆö·qÓŌbR‚{V^5#¶^2čVbŅRTÆ%.@œøz«ƒt0¢Ś¢ĮźT¢S‹ęįĶģP±£@:ĖĶ_ÓďE໕ٔ’Ü蔓xå2Ę}X/”§TńęŃHģ®®½FéĘįVŲȘ0 £Įäj§KÉk‡å3”–Ø$L¦ü^š\EõZž™Sęg[”€_O-"U¦u† ‚ą=Dy©(iŠņDf¼ø ƒ^©IĖ?ö$bģįĻśŒł©; ‚zŗ,ĮĬ’ŪŻ4U…·-/«LFŌŅU}ÖtßÉezźN¹‚×¾.ޜ›`ÄՅWQ)ÜØn.VĆś‹Oń§ Ļpõø2&G5ōń ūŽÖSa”É|ĘEśŪY2¼ŗŸW$œÆJ‹ģN” ¾\3®”i1õżø*A”ƈ ›ųāLŽ.Žåog²«ŲYŲ³Y”杤@éąĢöü,œą ž-&ĄŽR!}é_Ņ ‚nžą«|éß[_‹łI5ż¼'Åņ¶d}½Z½¦‰ŁńFŌL$Õk\•ĢŠŃ7±ccĆͲżÉö—HOƒ(Į¾N‚}„>d&×ö…aALŽ’ĪašńĪĢJ7šņĮ.éÓņŃafę$ŌõÉ­õå‰ĢŁļ%Ą5ćK™-¾Ÿ‚ C†ŗ ½ĘétRVVF~~>uu}{2a6›)(( ¾¾¾O_Gš~ V~>¹TvæÅ”ā‘Ż‰ļĒl ”ē⬲%‹Ė=+P1T(e‚nf‡Ŗßś}y£P_‡liپĻ+}Ÿ)ģ:RįÕ٧“ł2SJujļĢŪž"[V¬Q¹¹aR‰l€VšEõZž±;±Ć߇e#*YœRӏ«Ašŗ Q‡F”Ppß}÷µŪ÷—æü…BV«ÅjmŪĒÅf³”ÓéX¶lY›c-[¶Œąą`¢££IJJ"88˜ˆˆ®æžz Ść@”P››Ū­5766ņ’÷$&&āļļObb"ÄĘƲnŻ:jkŪ–œ,]ŗ…B!łĻĻĻyóę±eĖ–6Ļ –}NĖæ_’ś×’ė{ä‘GZænUUUķöÆ_æ¾Óc·ü»÷Ž{˜0aB§½ģ²ĖŗõuŠęÄ×qIjµģ~«SÉ#»ł0'L <œB#C„³Ż²J ² ȅ¾¦—žŗgu*ū­ß—·š+}ćØĢäCqC’LķŖÉŃŅA7{“‚ÆóƒśmߏdÖyk3śJ³’;)»łØ "eYž£ŅģĆ£»“09äŪĢMØć'cä{Ķ ‚ ƒ“z  Œ±cĒĢž={ŚķĖĢĢDÆ×c±X8pąééé­ū²³³±ŁlĢ;€ņņręϟĄŚµk™8q"J„£ŃHFFƽöŪ·oēčŃ£ =ĻBijjā²Ė.cŪ¶m,[¶Œ;3°°0ŹĖĖŁ¶mO>ł$Ū·o'33­öū ???~’ūß·;^YY’ūß’X¾|9»wļfƌ­ūƌĆĻ~ö3ٵLš4Irūʍ §²²’’żļ¬Y³¦Ķž¹sēņšĆ·ŁöĢ3Ļ`2™øė®»ŚlOKKkż’±±±¬]»Vv=)))²ū„ļ]5¶œ¢z-G*¤ī7¹l>I^­/æ˜\ŒÆĢäSaąMŽn,i«·©9^„gløtÆ,”oÄH7ه欤p?03#¦žĶ2—oĖ ÄzŠō×±įftj—dĻg¹”\”\‹JŁ··- Œ:Ł2ņń2ƒ)<™Ū ĻfĒŹfFÅŚXœ"ĆHš õ65īI Ö*Y55¦_L‹‚ C‘ŗ QJ„’9sę°}ūvœN'jõ÷? ™™™\sĶ5¼ōŅKdff¶ ŗedd“Ż^żuŖ««Ł¶m[kš­Å7ŽČŌ©SłĶo~ĆĒĢ•W^Łćõ¾õÖ[lŪ¶|?üįmöŻvŪm<ńĬ[·ŽW_}•_üā­ūōz=wß}·ä1śÓŸ2uźT6mŚŌ&č6|ųpŁēČÉŹŹāčŃ£<ņČ#<’üólÜø±]ŠmśōéLŸ>½Ķ¶÷Ž{ŠŠŠ_/22²ŪėŚS*ÜÜ>³€'2do{KČ©Õsåč2f'ūq…BWM‹ną•ƒnÉ&Õ_ A·~Øs uRokJq°ÜŸi1¢ €œp?;±›dVہ2K‡·Ļš(„‹9ńu|‘Ņn_„ŇĻĻ„t˜QÜ6‹”ĶFžč…Mé?8ĪI™ ¢JéęĘÉÅØū8)œ‹£9S¾Ģ$Ÿ™:6ÜĢ-ӊdKń].'Ŗō›tŌŪÄ@ ”ļųØÜDųŁaĀOL„~#‚nCŲܹsłąƒ8räHköV^^\tŃEģŪ·ĢĢĢ6ĻŁ³gz½ž©S§ŸŸĄœ9s$_£%`———w^k}’ż÷ńńńįwæūäžÕ«W³nŻ:öķŪ×&č֑ɓ'£Õj)..>ƵlŚ“ „RÉUW]…ŁlꔇāųńćŒ=ś¼-ō•›ui…ü+3Žo;č’UŪØfCvŁ\7¾L”öx'£ĆĢ’ĮÓ¬’jÕ²M߅¾‘ŅHviūß©¬ŅVO,ķó (o69ŖA2čvŗĘ“C…æ]-J©ę˳!’C2Ž9ĮōŲzB}„ĖĻ×¶¼`—Kß0‰5ŲH•);÷Tłu:Ž;.»وJŁž‚g°7)XŸ‘HLŸA€” ·§åĖO.œ §Ü$Jń…žQ\Æåh„—¦V%Īo”_ˆžnCXK¶Ś¹%¦-™léé餄„µ ŗedd––†F£ <¼ł„ńōéӒÆ1iŅ$Ün÷ygj™ģ*uY* ;ÓåVxÜdå(;Sdz»YJž™£©÷ čŽTųóźįhŁż— ÆōŖ²=§KɆģ8œ2=(“­\>Ās²…öœ.%Od&t85;!ŠŹéhUņ7²KÄł…ŠļģN%ŪĪ‹)悩ODŠm›:u*~~~­6h.-‰‰!!!““4ņņņ(// øø˜ĀĀĀÖ`ĄŖU«šńńaéŅ„üõÆåķ·ß&##ƒ’’ššzļī|}}=Os[·nĖ—/ļŅńźźźøēž{P*•ķś·ÕÕՑ••%ūƱ±ķēO>ł„ŠŠ ®¾śjFÅäɓyķµ×p¹Īæ/˜Åbép=F£(ģ.µĀĶo¦qÕøņN3pœ.; ‚øūĖTž“Kn­o?­RčČԘz“ŅŁl_ę…PeŃō󊆶ÉŃ&Ō2„SŸžķēÕx—”FŁ’yµņ4e՘rŌJ™õÖłņōžx®Ž;½Ģ*1šxF|˜qćʵž÷ʍŃh4¬\¹²uŪÕW_Ķ]wŻÅöķŪYøpa·×}®'Ntøž>śˆ%K–œ×k E ąŅŌ*Rƒ-<½?žŚĘŽ?]n» ƒŲ]DB •łIµ¤ĒÕ”„Zįę¢äZŽ‘(Ļr4)Ųt(šuiĻś‚^ÓÄø“dŁö±*?ņź|E©œ „ĀMrP#Ē*żŚķ+ļ OŌ@‰ņ·qو*Ž;!¹?»ŌĄ#»Y3½@]Ļ˼.%o‹ą“ÜPŁl „ĀĶS¼«ļٱJ?>ɕD_9¶Ü£hm¹ŻšlV,{KdģėäīŁł]śł7JōĀ„žb“Ŗū¬%€ ߟōCܼyóxč”‡Ø®®Ęßߟ“f‹9’ąąąÖ [FFFk ī\‹/fńāÅŲl6JJJ(..¦ØØˆ‚‚¶nŻŹŗuė(,,ä’ųG×©Õjq÷ Zj‚Ćį //×_żė_,Y²īū;³fĶ┇’=fRRRė’Æ­­åƒ>`ńāń†~}ÕUWq÷Żw³qćĘóŗ >œgžyFv’äɓĻėųC݈P žŸĖk‡#ŁS$Ū¤ū\FÆŒęæ‡#ifF¬‘É‘ bāi?[”RĶ'¹”Xķ³j”ų"/„‹’k`eCÓ¢”Ł^‰ļŸ ēö™"*'Źß&t«lōĢ,„ĖGT“UH”Q:(x²ZϽŪR¹f|³āŒ² ä„4¹dņÖńˆN3V4²Ša^Ģ5ZÕü'+V6ˆ8&ÜĢ¢ń™å©ÜĄĖcŲ]$_yįļćä®Ył„ė»Ś+«}ē„X5Į¾ŽT0-xƒŻg8œm?|Dy© ōtāęĪ‹Ūķ&##ƒ°°0l6[k†›B”`ęĢ™­}Ż222ZKR„hµZ’““INNnŻvēw2{ölž{ī9yä‘g»…„„`±tÜ$łĆ?D§Óµ ru4½tźŌ©ÜrĖ-¼’žū¬ZµŖu{xx8]tQ—ÖõĘo`³ŁP(üżļo³/,,ŒwŽy‡§Ÿ~Z¶]W †.ÆGčƒ“_M-ę‚Ä:6Œ¢ø”kå—’ģRŁ„4Jć"̌‹03>¢A4§ķzM—Æā­cŅ7’=EˆĪ!ۃJč]ć"L$Z%›Šg—8VéĒ1YVR€t š³ś£õŅÅŗ™łüį«a4Ų„O%MvĻfÅņމpę'Õ2-ŗ^v(Ū gjõ(óē›ĀąN3fÅ×ńćQēõ>śS“KĮSūā©“)ēŅk\Ü8„Ų«zÓ 5’;Åö³Į²ūµ*ėŅ ‰5XĻėuĘDŖHSL…ŽµæŠ‰C̘„!‚nC\ĖP„ŒŒ ĀĆĆŃh4mJÓŅŅXæ~=V«•¬¬,Ö®]Ūęł«V­"##£uŠé) ŅÓÓŁ³gÕÕÕDDH_w&,,ŒS§Nuų˜U«V‘žžŽå̲łóētz܎lÜø•JÅĪ;ٹsg›}N§“ÉÄ;ļ¼Ó®oœą™F‡™łÓü3|q&„sĀŗUöįp)9Pfą@™ˆ"\og|¤™!F…›92+AŽ„©Õģ*¤T¢ ĻłŻEīO'”2?©vV7ō,I©fCv¬ä¾7EņĄgDPA‚K&ŪĄ-Óhß„éÜ:£G÷$aļ 8XaöaóŃH6ÄßĒI¬ĮN€Ī‰FįĘŚ¤¤¶QMqƒ®ĆcüŠōŲznœRāU?Ko‹ädM÷6””0Qę屎<ĮĒ9ņeĮ•›ué ń®)ŗ‚ B߃†8½^ĻŌ©SÉČČ 33“‰'āėū}£ų““4źėėyżõ×±Z­m†(@s0¬  €ŅŅRŁ×(,,Ė’P8 IDATD­VŌću¦§§“ŸŸĻīŻ»%÷?~³ŁĢŲ±c»|Ģąąę»•6[Ļz§äää°gĻ®ŗź*jjjŚż;{ö,>>>lŚ“©GdžZéę’Ōjž±č׎/%ø‡Į²J‹Ūņ‚łOV,·2’ß~6‚ ٱ|‘Ā™Z}Æ6ŹŌJæ˜\";ĆéRšŅ·1<‘™Šå F”ēfʉņ—žLĶ­õeOaĻ’ fU2e¤¬fįīŁgńļ¤Y| “]ĶÉj=ūŠŲ]Hv©¼:ßnÜ&×pĖ“"ŁĮž(»ŌĄĒ ™_Ǭxé‰ĢĀĄ{’d8œjß?“…ZįfķŒBʄ‰L^A”=‘é&0wī\6lŲ@hh(K—.m³oęĢ™(•Jž|ņI”J%³gĻn³ÕŖUüūß’fŊ<üšĆŒ=š°°0\.%%%ü÷æ’åķ·ßę²Ė.Ćǧē#Ńoŗé&ÖÆ_Ļ•W^Éć?Ī%—\‚Į` ””C‡±vķZŌj5?’łĻ»|Ģ–õü0čf6›9sęŒģóōz=QQQlŚ“ ·ŪŻ:µō‡BBBX¼x1~ų!………ÄĒĒwymē²Łl®ĒĒLJøøø[ē£r³8„†Éuģ* 䫼`ĪŌõ|ri•ECUA» šƒj„›ƒaA$5’l%>ŠźU’žbD؅ŸŒ®ą£‘²É.mĪBL«cѰZ†‹l„¾ VŗY5¦œ'÷&HīżH$£šėbfØ8Y-ݶ!Lļł™OĆC,Ü?ļ,’̌“Ģ8ķ-zM×O,%=Ī»&vW˜}x6;N¶_h¬ĮĘĻ'•ōėš„®ūüL(o—ÆŅP*ÜÜ<­˜I‘¢ ‚ MŻę͛ǣ>J}}}k?·AAAŒ9’ƒ2~üųv“@ēĶ›Ēć?ν÷ŽŪ:ÕT«Õ¶ d„§§óļ’ū¼ÖĖ–-[X½z5W^y%Šl²Ū›ūĆ ^xį&NœŲåc”V«©­m[vöÅ_t8)õņĖ/ēż÷ßēÕW_%,,ŒE‹É>öꫯęƒ>ąµ×^ćž{īéņŚĪuōčŃ×3iŅ$8Š£c Ó(]\˜XĖ…‰µä×éŲžLFQdóžīpŗuĶżÆņ›³.Õ 7ńV’ƒ­$4įā¬čŌb@Cg–Æ¢ÜäĆ׳ņżvÜnZ'ŠĘlĢIØcfl}7^ ]15¦‘”ÉR:£MĶ›Ē"X=Q>;zØ9U­§Zf`€·‡c VžU_Źüłó[K:>ŒŃhÄĒLJŌŌT,X@``ŪiRkÖ¬”²²RöxJ„’ēŸž°°°Öm?žxk ONbb" ÜsĻ=$&&¢ŃČOWūя~Ć d3Ńī¾ūn¬Vł†»<š55O2;wjŖŠ·ƒ¬¬*åŗń定coIJĪ;×ĀéVWēKŽ2ź‚t’ƒ¬ÄlĬ$[‰ń·”š¦†F}¬åāĒéV²«@~²\‹’-oä£‘$52#¶ž“X#”^Yä ®WĪC;’%ƒ/Ūφ0'ŽHŖč}ĄG§Ćd÷‹0õćJĪFåęŚń„̉ÆåżSįd•œWšM„t3)ŹÄ²•${фŅną…ќ•,Ņā†I%ēŻt_čūJxį@Œl†¢ø~b)$Š~”‚ BĒe»Äķ5÷ŠŽdrkŚf üz¶/ĖĘI—kÖÖÖņÅ_tx̹sē%÷®æ;vŒ£GŹīW(¬X±¢W$ō·—2­¼ńmŪßé1õ¬Q8@+ź§KɑJ?•łs¤ŅŸ2SĻĖØ»CÆq`%1°‘Ä +IÄ첽͆ 7šž‰Ž;†«›Mč4—ŖĪŽÆcFl=zQy^^ü6†Æd&żÅųŪųӂ3h”C;‹ó`¹ģ‘.Åjį÷sóśyE½§øAĒž¢öt¹ģT©p3,ø‘IQ&ęĘ×ģėŁ=ķ:ņī‰pŽ=!_–xń°j~:”¬W$tÕž’žŽG“KžoȵćKYœŅńMѮؐ‡ūƒWMъé„BÆ{zg#f[Ūsċ‡U“ā}75ĮۈL·Aس`@› „©¶¶¶Ćµ*D*ąįŌJ“"Zū¹Tš}8\įĻń*='Ŗż0ZūęcÖāPr²Zߦ„O£t‘h#1Ø9—d%>Ą†z6ĄGU0&ÜÄób(ėF)7“~M7ŽfnB‹SŖ‰– tlÕŲr²K ŌKL.1iyļD+ĒT ĄŹ<ƒŃ¦ęÅ1²ū ;’ śk°²b“•£+ضhČ7ź(Ø×a“ŖitØpŗhÕ.|ÕMDś;ˆ5XI²vy(ƒ'Ė( ä½nƂ¹zÜŠżŁ÷d‡Źżyfl‡·£+z%ą&‚ "č6EEEq÷Żwō2ŗdöģŁķ†3‚7 ÷³³ ¹†ÉĶ'äe&-§Ŗ}9YķĒ™Z_JM>ŻĪĄź*‡KIn­/¹µ¾Ąw}ā¾ؐd%5ÄĀšFb V{8{D؅æ-Čegaļ —ķ™%ĒѤ`[^0ŪĻ39Ŗ%)UŒ åŻį§iāź±ålȎ•Ü’Ńé0¦Ę40Ģ KĻ—ó»^_µ2Ał(S£ėūyU}'Tļ Tļ`Jōąo6²JϳŁņe‰~š&n™Q4¤n†x‹#ž<™³ƒéā—¤V³l¤|ėAAų!tAčCQž6¢ümĢK¬ĄÖ¤ æĪ—¼:g¾œ­ÕQbŅõjćńs;°aG~óäTŚEJp##B͌µ0"Ăf6ņV)Ż\XĖģ„:vęńuAP»RżĪøŻĶ“O³K L‰nąšqeDų‰Į ]5+”Ž]E©šo·ÆÉ„ąłģXžxį™!€p¹üg¬ä ‰×M(G=ÄKŽQ™IĖ“™ ²AµŅ͚…bx‹:ZéĒć™ 8:Čp»xX5׌%Į‚ B÷ˆ › B?ŅŖǗ®Šļ³¦¬N%g:ņj}ÉÆó„ ^G©É§Ćņ–óau*9ZéĒŃJ? yjjrp#©”Œ 1“ŅH€Ö{{)żZįę¤Z.LŖ„ĤeWA ŁTš»×/»ŌĄ”r?.I©aŁČJ1U¶ Ą/&•pļ¶T¬Īöˆ¢z-ļ cÅč”Qjēt+ųϾ8ö–Č>fV|"FŲ`c²«XŸ‘€É!ߋėŗńeŒ 7÷ćŖ„®8Q­ēńŒDMņs/H¬å:уOAčtA`:µ‹Q”Fˆsŗ”5ųP`ŌQhō„°^KA®Ć ŗžrŗäŌčÉ©Ńó1ĶÓpc 6ĘG˜abT˜ ķ Ʉ‹ń·±rL+ĒTWēĖŽā2‹©źbł©Ó„dkN» ƒųé„R¦Å žĄ¾ŖwpÕŲ2^>(ŻæģÜ0¦D·/3=VéG½MMZœ±?–Ł+*Ķ> @2“ÉźTņÆ}ń.oŸõ×"ŚßĘõJūr‰B°7)x<3”ĆA:— Æjm; xŽÓ5zÖļIÄŽAĄmf¬‘ŸO*ōmA„¾!‚n‚ H­t‘h%)Š ŌµnƱŖ)0śR`Ō‘_§ć¬Q×팭®(iŠRŅ åÓÜԊęģ¼q‘&&D˜H“öśė „ä F’ƒ¹rl9§Ŗōģ)"³(s›µV5’ÜϼÄ:®_*²Ž:1?¹–¬²É€S“KĮ³Y±üiž÷ÓL]nĻeĒ¢S»¼&čVcUóąŽå3rķų¶³*‹†'2(0źdŸļ«qq[Z!¾ń³äMœnOķ'§ƒrįé1õ¬SŽ«ŗā¬QĒ?ö$HfᶘSĻÆ¦£T ŽO‚ B’A·!ģ›o¾aŻŗu’ū|}}™0awÜqÉÉÉ­Ū_~łežzź)6oŽLJJ UUU\rÉ%üä'?įŽ{ļ•<ޟžō'¶lŁĀ¾}ūČČČ`͚5ķ§V« %22’Ė.»Œ+®ø¢ŪL—,YBe„t“ŪŠŠP† ĘźÕ«™9s&‡ƒōōtŁćEDD°`Į~żė_ćēē×fßéÓ§yę™gŲ³gåååŌ××LJJ —_~9æüå/ńńiˆl޼™G}“Kļįŗė®ćöŪoo]ß+Æ¼Ā–-[8yņ$õõõØÕjĀĆƙ3g·Ür #GŽlwŒĘĘFžyę¶nŻJAA„††2}śtn¾łęÖ÷®²²2žyęvģŲAaa!uuu’˜˜Č¢E‹øå–[ų¾,źČ‘#¬^½š{+Vté½ ē'Dē$D÷ż“T€F‡’Āz]Ÿõ‰sŗ«ņćX•o$Tļ`B„‰IQ Œ4”öņ‹02ĢĀČ0 W+eG~Ÿä†t)˜¹#?ˆSÕ¾Ü6³ˆXƒt02£(-§Āłė‚Ó½¼rļ”n˜(_fZŅ eĖÉ0~ņ]™éĪ‚@j¬j4głxx¦„Õ©ä‘]I4ŲTķśÓ,7°al‡YŖ>*7ėŅņ‰“r½ŠĖ­`ĆžX¾-7Č>fXP#7O-B c÷,FģLźš&ĖԘ~=­•čÆ(‚ œtŒF#YYYĢ™3‡ččč6ūŖŖŖxöŁgyė­·8yņ$AAĶ ŲKKKÉŹŹ¢±±¹ Čįp••…J„āšįĆ,_¾\2”ŸŸOVVVė××ד••ÅōéÓIJJjŻn·Ū©ØØ`Ļž=¼ōŅK\{ķµlŚ“©[·C‡ŃŌŌļyóŚlw»ŻTWWóŅK/ńÜsĻńĮ°dÉÜn7YYY 6Œ©S§¶yŽĆįąŌ©SÜyēlٲ…Ææžŗu-ß|ó —^z)v»łóē3mŚ4ōz=ģŪ·5kÖ°qćF¾üņKüżż dŲ°amŽæ}ūv, K—.m³=4“¹ÄÆ©©‰K/½”/¾ų‚ŌŌTęĪKxx8‹…¼¼<žžy6lŲĄŪoæĶe—]Öśü††ęĪĖĮƒIOOgɒ%ØÕjŠ‹‹yóĶ7yå•Wxī¹ēøį†ZŸsśōięĪKyy9sęĢį’K.Į`0P]]ĶįƇ¹ļ¾ūxī¹ēŲ¹s'11Ķebf³™¬¬,**†F?&Oå«qIö‰+06įņź|É©ö„¢—2āŖ-¶Ÿmžģé§ibbTÓ£ė™enĶTņVZ•›‹‡U³0¹†ż„Ž9A‰IŪįsŹLZś:™›¦K–›~’JQ}sę`ŒačUšĖLĖył`“äž­9aL©Ē ibć”hÜnJäÕśzōäŲ&—‚'2Ø0ū Vŗ[3bš\ Ž;Ī–SįĄÕJ·Ļ,lS^.x>—[Į³Ł1dŹ>&ÜĻĪoÓ <>h<Ōµ<¼+©Ć@ų„H·L+4MvļĪdĒ7»)..ĮŌ`Bē«#*2‚©S'³hтÖÄ-_~ł5ū³P^^©Į„R„Ā`š'5e ^ĄčŃmĻ÷}ģI*Ź+‰ˆ ēĪ;n“]Ė‘#Ēyå•×ørÕr¦O›ĄćO+łœ_üā¼ųā‹ģŻ»·5CģWæś†Ż»w3~üųvĻyśé§Y³f ėׯēą’K.iĶ l1oŽ<ņóóeלŅK/ńÅ_pēwņšĆ£T¶Ķ)**ā‚ .ą—æü%yyyčtĶ„KśÓŸ8xš /æü2×_}›ēTTT°pįBn½õVV¬Xњ¹vĒwPSSƧŸ~ŹÅ_Ün-ü1—_~9÷Üs7n”\Æą9tźö8£MĶ™Z_NUė9U£'ÆV';eÆ«Ģ» ƒŲ]„^ćbrt=3bźaņź‹„Ā͌˜z¦D5še^0ļžˆÄ␒ZYJžµ7žŖąŠQßgŚę}7©V„p³æ$€e#„³p‡Šłß3妙nȊ·—»łę†Jéęt­Ž£ƒn›GqŖZó»Į'•*Ķ>ü';¶Ć’Chž=];½q¦žXŖŠKZn» ƒdć§iāwéƒj(Ķ`PjŅņȞ$Lvł€Ūø·Ķ,4S•7mś_~ł11Ń̚5“ƒśśzNŸ>Ć[o½Ē¹ēžß¢Ń4÷6u¹\ücżSœ8~’„„ųÖē4¹šØ¬Øāۃ‡Łæ?›Ÿżģj,ø õujkźØ3©¬¬¢““Œčč(ÉõģŁ“IŃˆĆīĄfżžFT]m–ĘĘÖ Ü¹¬V+ĒŽŸ$;ė[źėøč¢łTVUa4v>xĘfµQYYÅų c ‘}œĪWGbbBėך»veĆšį)mÆ×ūār¹Ø¬¬"11žää$Łc7^˜Ķ*+«˜6m žžßWŠ8Nź8y*‡żū³Yré"V]¹¼Ó÷&‚ēA7AVK€(''§ÓĒĘÄÄš‡?ü;wŽy‡åĖĻļ„V«å©§žā­·Žā•W^évŠ­#ƇgΜ9ģßææĖĻY¶l/¾ų"999̜9“cĒŽqģŲ1žš‡?HÜn¹åž~śi6oŽĢ<Š£µ¾żöŪ„……ńē?’¹]Ą ..Ž{›nŗ‰;v°hŃ"^{ķ5¦M›Ö.ąĶå²·Žz+7Żt,Z“³ŁĢĒĢŹ•+%nŠ\¶»téRŽ}÷]G›Į;jLŽj`rTó Ŗ½IĮ™:_NUł‘SćKNĖy j°8”ģ*bWAZ'3bĢŽÆgX°ēL:£VŗYœRCZ\=oä›‚ äB‰nąŻXj®W xå`4 4¹aOQąŗ)€&•pŸL™iq½„ĀŻt³7)8YķĒŅįUż¼Ņ®łčt(_ē·™4|¼Ź{·„vؘ HēąŽō‚AÓ#qØčJĄ­¹\ø@” {˜’-Ū•„Ń*ł36ÜĢŗ™h¼ų¦Ń¹rsóųņĖÆHK›ĪM7ż¼Ż¹ä|ĢŪoæĻĪ{˜?æ¹B$#c'ŽŸäŅ„‹Y¹āĒķŖM¬V’ūzž·łmf̘Ö&p4räprrrÉÜ»Ÿ’Øż }‡ĆAöƒLœ0žżū³Ūķ fõźk%ߋÅŅČ’żž|śé—­A·īŗų¢L˜0¶ĆĒ,Z“ Ķ›ĶvķŹ`ŌØüō§Wµ{|Mm-&Žē'Ė—uy-Ė–-!!!¾Żv»ŻĪ“’ü7Ÿ|ü9sf§+=„Hļq~)Ā VSÓ*7£B-,YÉļŅ ų÷„'ųė‚Ó\3®Œ  ēUe“©łüL(~Ģ}ŪRłüLh—xŖ@­“§s{Zē™+Ÿę†°!;–­§ĀČ7źp}÷e,iŠRŻÅ)©ƒY˜ŽĮŖ±ņMå[n-rŖ}ūzI=r ĢĄ›G#Ū܌Vu§·Ä +ĢĖ7/ćt+xz_\‡7ŹĶoÓóŪd ÆŌ¤åļ܆‡ZømfšAT¼woó ę+~,yóö’K.B”Trņä÷7Ų³³¢Õiłń–J¶wŃé“\¾ģRģ6;‡m³O„R1eņDöffµ{Ąį#Ēh“42mŚän潎—±cFSUUĆįčö󽅏×\½·ŪĶžŒŽæ”’‰ ›ŠŽŪķ¦  €»īŗ ­VĖŖU÷Ih”Ńhųē?’I~~>ūŪßze-III”––ö8h%ēųńćDFFJž€üĆįąÅ_$((صO\yyócKÆ;9ø\.źėŪ÷yꊲ²2åūÅ“¼@]]ó„K£±yŅ_K_8)ćʍć7ŽąĀ /l}s%§åż¶¼–0ø(`ć’Ōjī˜UĄ–žąžŁgY:¼ź¼‚EõZ6ŠāÖOF²!;–“U—Üy²ÉQ üe~.#;¹ Ž]Ä[Ē"Śd4*7ūKå®% ’kaīŅcĶU¬Ģ­õå_{ćirwæ;žģ„:~?÷ aśĮ{Ń8ٚ<‘‘Ą¾’ŁĒؕnÖL/dLX×~¶…žQfŅņšĪ$j;ø„†Xø3=ŠM¢.*.! 0€°0ésBFĆņ+.oӟ­¤¤”øŲ˜oų&%6gh•–µ½ār¹˜™6’’RŠ‹KŚ=ooę~bccdKO;ćė«Ćķvc±4ö賎"66C€¼¼³½Az(/øüņĖ%·+•J^xįʎķ8 ū\ .dåŹ•<öŲc\żõ¤¦¦ž×Śüżżq¹\˜L¦6S3;ćp8Øż.Ż»…Ūķ¦²²’W^y…ģģln¼ńĘ6ū?śč£v„•V«•'NąēēĒęĶ›[Y-ƒ$|};ĪĄ0š/°Fc§ŗjjjĀįptł5Za->’ö=“äX­Ķ•Ī^«å˜-=apS+]Œ 73&ÜĢŖ±åT[4d—UjhÓĆŖ«MŠÖņÓXƒ•Å©5ĢŽ7zŻš…@“»gŸå懣ų"O¾7Œ›¶_{“‚ŻEĮ,N©éė%z“CÅžāĢ6§’<£/¹5: [®ŪB£rsŗFO˜Ž3>wŖ,ŪHwļłØÜütB)$Övž`Į£˜ģjŪĄ™:łæ‘jEsĄ­„|_š e&-ė$ą–håwéƒ.ą`m“ā§ļųF×å—/ióßõ ‡t|ĪŖÓ5’.4ž ²Åķv3nģhō~z2÷f±üŠļK#ķv;¾=ÄŅ„‹q÷p¼zaQ M›’Öī°Łm˜ĶŅ7ĶT*:]ǃ“:b·Ūe ąē×½Ža”!Ōw”_ žOŻÖ¬YÓ®/Yuu5[¶lįę›o&((Ø[=Õ{ģ1>śč#næżv¶nŻz^k³ŪķŻš^ šÕW_ŅA£Ōōōt~ųį6Ū“Zm»RZ“É„F£Įårµ¦€Ö~f-e§éÉɅR©D„Ruś?¾ż“%ačņÕø˜_ǜ%ø IDATų:ģj2‹ŲYșڮĖM ¶Ÿ ę«ü`fĹbT%1Ļ ¾7hyķp4• Õ nšūįu%ŪĶѤdOQą ŗDūŪųóü\^9Ů ngK“8šŚąü©½qäÖč;-‡m„•ŅMzœQܼŠī¢@^Ȏé0‹W§vqŪĢʆ‹nž¤ĢäÓiIiB •{fŸÅßgšÜō~zL ßPĶĶĶĆår1|x ~z=VkĒķöꞔ:Nr’čŃ#  so ńŲlv¾=xˆåWt<Ż34,„«Vż¤ŻöĄĄ@ĀĀB:¬béŠńćĒu:½“§øšĀ¹½v<³Ł"ūõĮ»ˆš¹Š”ŚŚZ E·ƒ^Z­–'Ÿ|’3gĪšČ#ō赫««ÉĢĢģtBhˆŽŽ¾Ļ›<¹yźŅ¶mŪdŸćp8Ų¾};“'Oīö]Ę“'OꥁķśÓėóĻ?`Ź”)@sŚšįĆłģ³ĻdļDž8q µēŽšįĆń÷÷ļšż“¼VTT±±±Ż~/ĀŠ`šqrQr ^ĒĆ O³txU·.jÜnČ,äŽm©<µ7¾Ć’®¢S»Ø·©(7łąt)hr)ŗœłpŖZÅ‹'¹žŅō“KøqŅ’³wßįM•ļĒß'I›&Ż{o  PöPYnÜ¢ˆ”Ÿ8¾ (."Š Š"øPPœˆ ˆl(²g÷Ž#i³~ ÅŚ&m”tĄżŗ.½č9Ļ9ēĪIGņÉ3RŃØlØźF)œt0ŸÖłöķ!vexŌ=p°ÅŖ0mc ;eĆjSųjļmsø¹;›™Üļ¤nĶLF‰3/oŠ–Ąķnn®Ö²˜×; ņÉ'ŸW~ķZ‡ īĢ¢]5‡`*•ŠŻ»²uĖ©ÕSwļŽƒŁd¦WÆnĻ«×ééŃ£[µ’Ś“iu΁[Kb³Ł(,*ĀĒ×»öĘBˆfOB7a×öķŪłį‡čÕ«×Y…FƇēŚkÆå•W^įäɓõ:öȑ#ÜqĒ īæ’žz_»”Ow·ˆˆ`Ȑ!,Z“ˆ%K–T[]µ  €{ļ½—““4F}Ö×}ą(++ćž{ī!==½Ź>›ĶĘwß}ĒĢ™3iß¾==zōØÜwß}÷‘Ą£>JiiÕ7dƌx{{så•W§ęt=z4æüņ Ƽņ ååU?į4<żōÓl޼™{ī¹ē¬CDqq q/ē¶ö™Ģz˜ń=“iļ_ZēA…6lMóąéu§Ā·Œf¾łźLLxŒ»¦ ÓXėŻ‹I ģĪøøC˜K# yią1ütf4ué½f³q8æiB·-©ž¬8č_æĄķV›B…EaŽÖpŽÜNn3[…UTUR”fÖęVvü|ūźM½ņk³ŁLAAEEEØÕjžžy†zÖ×o(§_$ü{ÕĪ?ü!C†pĻ=÷šČ#‹‡‡łłł8p“ÉÄØQ£øļ¾ūĪśŗC† aźŌ©LŸ>°°0Zµj…ŸŸ‹…'N••Ehh(Ė–-«rŸxā vģŲĮüłóY“hqqqøŗŗ’œœLjj*...|žłēUV8}å•WŲæ?“'OfŚ“i“iÓ///ŠŠŠ8xš ƒ+®ø‚ēŸ¾ZS¦LaöģŁ5>†aƆ1žü³¾¢åÓØ¬ō )¢gHI….ütĢ—-ɞ˜ėŠ;ģtų¶#Ɲ‘łÜŌ.·f°ą‚Ā©ąØC@)ĖžbKŠ Ō)˜1Ł6§xŅ7¼ąõŲ\+ˆō4ęn$Ƚ‚Ocķ'Źüṙ/žŖõƒ€ų€bĘ÷LĮEÓōæ{Ä%Z^Ž%[ ¼½¼ųæ’ĆĀ…1sę,tzīnn” ”— ( Ɔ¦s§3ÆÕĀĆĆxąžQ|¼äS¦L™ŽUŪ?Æ3óņ 0›LųłūņšĆcP©ģšR…=ŗńĖźu (ōčŁõ¼<Ę­[·³uėö÷¹¹»1’­Y•_æńĘ[Ļõďœõœoß­ś‘ļVżhw’5×ćę›®Æüś…fŲmėęīĘƏÅĖóÜwB4JVʦ‹ū šāĘhŽåUķ‰6īR×uØy9ļņņrRSSž388®éęĒ9©©©Õ†=ž›««+v÷‹ęiń#_ī®ś¼ö)ā‘žÉMT‘hL免‰>üxŌ·^Cļ‚Üʹ£Cf³Z1ŠdQXu؟ļū”pjÕM{é‘L÷Ēsķ\LNŗ0wsłF'»Įۜ!‡ńՙĪ{-%jž_KA¹¦Z<åō’l§W' ”īå„x”źn$Ģ£œ½ ׊ó^§87Eåī aOfķýĒä2²c2»Bó’^¢å•:n‰Ķ¢—ō½·3 Ū2ÜŪ»j‰šnŲy?ĖŹ ģŁ³—¤ä eT*žž~tźŌš?Ø.**fĻž½¤¤¦QžĻĀ ^ŽžDFFß±}µłž7n܄‹‹–ž=»WnĖŹŹfŪ¶ø¹¹rłåg>Ü.(,dÓŃ©SĀĀNĶüĒ›±Łlōļß·ĪėēŸ×b±ŲR¹źŖ¤„„³kWB­ēėŁ³žžU?3™LüņĖÆDFFŠ”C»jĒå¬[÷[­ēnÕ*†øøÖ?~’jīń¬Ńhō§]Ū8\\vZ·’0PZ^õÆėU1¹ÄśČ0y!Ī7 ŻZ€ś†nĒŽcņäÉĻłģ³ĻŅ©SĆ-kŻžzź)Nœ8awÆ^½xņÉ'±"Ń$tf›ĀʓŽ|wŲÜZ†wż[‡€FvĢ$Ō½łō Ź(ѲhWGóuX ™ģZČĆ=R±²ęĻ`RńÖÖpžĪv«¶ĻImcl×Tz…ÖpdÚ¾1š#yzŌ Xl§®ķÆÆ ÜĆHøG9Įī廕äfj=.EżķLwēĆŻ!•;ōᤶ1ŗSż#.īįąĶQZ‰–Wė“Jió ÜąģC·¢¢bņņƂę°'šøøHč&Dӑį„ ŲŲX¾üņ˦.£Į½śź«M]‚ā<Ń(6EēqYT>æ'zńĶ”‡=Nū;Ėē×»2$6—›Śe7‹$Č­œgūŸąĻ$O>ŽŒŃR󛧯ī˜m E>ū:MēdeŅ„‰ür܇e A•Ć;­68š§o”Š­[H1}Ā ’ Ö*„whe&5_ģ dżÉŚWōәß+™Y0”ŁI+ÖņʦH Zpąv.RSÓŲ²„ę!•§y«„nBŃ Hč&„¢ŁŠ(6FåÓ/¢_OxńŻa’Z{¢˜­ ?ńcw†;÷wI£•O™Ćö›’–Ōā†]ÉīB÷w–Ļ­eŁŽą:n—E0cŠ1 ܚ©:^ūĆqąåiä©K%pBѼHč&„¢ÅøÄƔiŽ3²c:Zuķ‹&lJņbź†3Åęd/,V›M!§Ģ‰ ‰^UŚÆ8@z‰„¢y1šU,ÜŅŌe“iÅZęo ēµ?#ėTzŗ˜y¼WtIµ;$]4­#yz^Ł嚃h/“śÄMęąBŃĢČšR!„-ŠJ±1$6nĮÅ,ŽĀŽL7‡ķSŠ“¼°>†a­rŁ•į†õŸ™šĢV…/÷Ņ'¬°ņĶö® ĒĆW…h*Ēóõ•kšŠŹÜRÆE¬|öw cŗ„Öø?ÄSÅ3WéŖT!jµh³‘ÆŹ›ŗŒf)§Ģ‰Ÿś²!ŃŪa ó_ń%ÜŻ1@7Y¶¹ŪéĪ[[Āö\lė[ĘøpĆõ×Tžūé§§šĄż£ Ąl6SRZŠ^§£  €rrr©ØØĄĻĻgēS=¼óņņšöö&77EQšńńFQNż6›¬¬l|}}Šhμ…,--£°°½«/Ļ3|Y, 1 ąää„ŃXNvv6kÖ®§G®čõz:“oGttdåqf³™ÜÜ<œµĪxyz¢( åøøhÉĶĶĆÓÓ½^g÷ž”””RVV†ŸŸ/*ՙļ£ĀĀ"JKKńššĄĶ͵Ź5322Ńėux{Ÿy܃‘üüüjǘL&rsóšj€zBˆ ›„n-Ōę“&6Ÿ45uBѬt)"ŚŪĄ»ŪĆ8”[· ĢlU±=݃+ ņĪsuBˆ³•\ØåĒc~lIńÄ\!n匸$‹ž!Eē±:ŃP¶¤zņŽŽP‡ĻqĒĄ“Z>|®MffoĢ™ÖYKdd8÷Ž{ÆĻš‡^ÆCÆÓ‘’’Ęu×§G÷®¼öŚ›ś£R©(Č/ĄŻĆ'ž7žāāęĢ™§—'jµš”äTī»ļnāāZ³nŻolŲ°‰ŠŠ`ŠKJŠh4<öč8 ™õś<¼}¼pŃŗpāäIFŗ…~\MII ‹?ZJæKūąėėĆĻ«×ņŲ£ćųóĻ-|õõ7DD„c0)7yśé'9vģ8Ÿ}ö..ZÜ=Ü9y2‰;n扞=»W{Ģ«WÆåM›qvv&-5'žO@€?Ÿ|ņ9IÉ)ųłś“K\\kn¹łŽ;Į,!$$“ŁDNv.“&=ާ§o潐ģģlüüüHII„GĻnÜ4ā:öļ?ČāÅK‰ŒŒ ØøC™«®Ųϰ¢%Š­šŌJO qqńŃɜEāģłźL<Ś+‰¹…s$ϵöl Ė‚ĪoaBˆz±ŚvgøńĖq_ög×ńgłž.fF“ĶāņČTŠ„3-ĮŸ)ž,Üźpu|@1õJĮI%Ļi]Y­6¦N|*„JK§]»8FÜx-‰‰É|»źztļ ĄšaƒiŪ¶ 6›_|™ĢĢ,NžL¢m»8n»u‡%##“øøÖ¤¦¦3aĀ£xxœZ„č„—^£°Øˆ ž wļ\{ķ0<Ģwß’ÄÄ Ńŗu,Ļæ0IąŠ”#•µžšĆj&?ż$žž~|śé—lٲ ??_Eį™g& R©8zō8_ÆXUcčÖŖU #GŽĄoæżĪŗ_7pūm7Q\\Ā3“ŸDQl6'=Ē-7ߥŸnįÖŪFйSG6lųƒ¬¬lņó (3”1uź3Ą©žm“žzė®ĘŖļ~┇ī'66€—_y£Ÿ1!ąFB· c@ ;ÓeE=qńøÄ_&·gēDŽ-)¬=į‹­ļɬ@r‘Ėy«KQw%6$z±ö„¹eNõ:VļdahlC[åČŠĆä׎|œāš÷v׹bĘ÷LF#!j½T! Ä×Ē›?üäŌ°É‚tŗ3ūĀĀBS‹0xzyb0‰ŠŠ`ŊUćēļK€æeŲÕæ_~ųq5……”WTœ’ŠŁd&;+‡=»Už·mŪ6“mŪ¦ÖZ‹Š‹+7€ŠŠrróšóó%$$ØrØØ——'åF#yyy¬]·€NńˆˆÆ<><<Œ„½ūP…~żś°lŁ•`0(-- .®_~±‚½ ūšöö"4,„V­bŲ¶me„e|¹|eåłĢf3ÅÅÅäääTŽ+€ØØˆŗ<Bˆ‹”„n-ĄĄØ|¶§y°ÆžŸņ Ń]QH— ā¦.C“@ļ fŻ lŲØ’„óV›LR/DS±Łą@Ž+“¼Ų–źQē•HOsŃX›ĖV¹ø:Ɂ–dŻ –ģ ®q!›Óz…ņ`·T ÜĪĀæē'Ū¼y+{žęę›®ĒÅEKqq)_}żMmOóńńfźŌgČŹŹ&7/æ÷īgļŽ}Œ3š7ē-ą”ļĆ×םNĒ[óß@­VW9—ÉdāŠ”£tčŠ®ĪµĀ©¹äNm5Õ¦Vkų'¤;=Ē›Õj­z¼¢"++›O?ż’qćĄÕU››Ļ>÷"ńńi×®-™äęę±vķz ņ psw#((ž=Ī„‡={tĆŻŻ•¢ĀöƄŲj‘ß9Bū$tkTŠ‰}łķ¤ū²ŻČ©ē§¾B“Įnt *¦OXaS—"ZØėćršv1ó[¢7y jL²Ś£ĶZv™3$y²1ɻ޽ŚtNV®ˆŹcxėܜåoKóĆ?¾Ųč°Mß°BĘtME-CJĻYqq ŃQ‘„„°wļžZłķ·?(.)į¦×ÆĖ>ż“ÉŒF£¦M›VØT*JKĖHOĻĄf³̾æ÷Wö>;xšė~żŚ”V«ØØ0a³ŁŖiž~¾=zœV­b°Łlƒ¢ó›ŗ!„h–¼\L\—Ķuqٜ(Šń{¢›’=©°Ŗ°Z‡½(„§øBĆÖTžJńäp®ž¬~6½\L ŽĶcPTz'FŚÕ%p•ĻčNiŌŠÉIŌ@§s©²Z§¢(hµĪ•_÷ģŁ•yóŽeÓ¦æpvv&,,¤²g˜NēR%Ó:kQ©TōķŪ‹÷Ž’gŸ†J„Ājµ2rä­hµĪtėօ‰“žĆŻĶ •JEhhF£‘śóžĀÅ<żōT*†€³³3—“‹ćÉ ĻŠ»wOŗtŽGūĻš×Ūo晏?ž«ÕŠĶf#44„®];qüųI“Zmem*•‚Ö„ś”NĪĪØT Ó¦½BE… _oĘ<0½^‡F£aāÄēŠėuø¹»ąļŁlęź«‡°dɧ,_¾«ÕŠŽU_Ł{Æs§ŽL™2•JuŖķš!hµĪÜ|Óõ,Zō1+W|‡““’æ*+ŗ !Äæ)Y›ä}ˆBˆ ’ŁŖbo–+½Łį†Fe£ĀRæakqjęŽčvž*¢ŗE›|P^mūÄ>‰t l™s^–™ŌģHwēÆTOög»:œ,ߑ`·r†µĪ„_x!•„m-‘ ųüļ ~:źė°ŻŃyŒź”~““ļķ ĆöŸoćŪ»j‰šV7MAā‚õöJĖ«¾ķæ*&—XCU$ÄÅC"y!„,ŹJ— bŗSjR³5Ճ_Oz“XØ;5÷›Ģć&ÄyS\”!!ƕ­ižģĶrÅ\ĻyŚNSøÄƔŃyt.–ÕH[0°,!ˆ_Ž;Ü®nĆmķ3§(!„ā<’ŠM!ÄEĮÕÉĀĄØ|Få“V¬esŠæóĆ`QšÅż‚īO!DćH.Ō²+Ӄiīœ(ŠÓ°nW' —EpeTž® V£hV›Ā»Bų=ÉĖa»›Ūeq]\v#U%„Bœ_ŗ !„øč„ø—sS»lF“ĶęHžžß“¼ų3Å “„q‚·ćĒ³xńb¶oßNNN...DEEqĶ5×póĶ7£VŸZ“téRV­ZÅĀ… ńōōtxŽńćĒćķķĶōéÓųōÓOłę›ošÅ_ ( ?ü0ŁŁŁ“jՊ™3gÖŲvŻŗu¼÷Ž{̘1ƒ€€ĘŒS§ĒģėėĖ‚ źŌVœ_f›Āšc>¬?é͌AĒq:‡aš%&5ū²ÜŲ›éĘŽ,7ņēöŅņtƶžō)ÄI-½Ś.f›Ā»ŪĀؚęa·ÜŽ!ƒa­rÆ0!„ā<“ŠM!ÄEKQ om|Ėø¹]&üÜö¼_ó»ļ¾ćöŪoĒb±Š»wo¢££)..ę×_eéŅ„ 0€Ÿ~ś —&‰NHH`łņå̟?æÖs’ųćW†n{÷īełņåÄĒĒćäTūʐ?žų#‰‰‰Ųl6ś÷ļϰaĆŖµ9~ü8Ė—/ē‰'žĄ×חćĒWٟ••Err2mŪ¶ÅÕÕµr{iii­×ēßĪtw>I&׹DØGy½7“EįHžžƒ9®üķŹń|Ö¦ķļZA’šBśGäć«7ółDóa¶Ŗ˜æ-ŒéīvŪ(ĄČų ĒHąÖ’ĒŹo¾ē®‘·¢×‡5`eU„¦¦±vŻoŗ !Z Ż„BŌ ˜¬X±‚‚‚.\X%pprrbźŌ©¼÷Ž{|’ż÷ ŗÕ‡V«eX¹N§ IDATīܹ\}õÕĢž=›gžy¦Iź £¤BĆ×üXŅ…3!²ŁŖP\­}ŽĮ‰#¹zŽåé8š§'©ČóY®4ZW' ŻBŠéZČ%ž„²(¬ԤfÖęŽåéķ¶Q)6ĘtIćŅ ÜĪVyy™™™hµZRRÓšõń!22EQHLLĘŪŪ‹ÄÄdBCƒšöö&%%•ģœ\ō:±±Ń899qōčqöķ;€««g''ڵ‹C„R‘’’JVvzŽ˜˜(œ(+3pģŲ ŒFaa”U«Ėh,ēšį£˜-f‚ ©łƒŸ’’RRRR1„ĄįĆG ćȑc(ŠBŪ¶­«ōŲ.+3žžAll46›Ń®]Š"¾¢łŠM!„h$»vķ`ąĄ5īW©TÜqĒäåå5fYÕ >œė®»Ž™3gr×]wѤõˆś3YUütŌ—oścƒjC@=“œ56öe»r²@ĒńGsõē<'[M|\Ģt .¢[p1mżKŃHŠvĮ+0:ńź¦HR‹ķ÷”ÕجŒļ‘B׹źįÆØ»œœfĶ~‹ššPbb¢Y³f=žÜ{ļ]|žÅ×äēåÓ®]^^—±rå÷deēMaA!Ė–}É /<ÅŽæ÷“šš†“³3&“™øøÖ,]śÉ)©“nKqQ1K–|ĘŌ©“)..įåWfÓ„s<ĪZ-ß}÷3żśõašąA•5 F^~y6mŪ¶FļŖēĒ”{·. ze•ڳ²²™łņlŗuķŒ³Ö™_ÆāŠ+.gĄ€ž¼ūŽNnN_}µ’)S&W«Ńؙ÷Ö»ĢxéÜÜ\9y2‰åĖ«¶Bˆę@B7!„¢‘äåå”ŃhšõõµŪfīܹX‘}sęĢ”}ūöL˜0/æü²©Ėõ°+ƝöSR®Įd§—Z™IÅøĪ߆įžåt ,¢kH1Ń^:zÉ-sāÕ?£Č(q¶ŪF«¶ņXÆd:”4be.•Jń'EQ, ONx³Ł ĄķwÜLēN©ØØ`ļßū™óĘĖ•=ĮŽygįĘ®ĄĆŻ+®€ÅbaĒĪŻ¼1{fåĀ>‹}Ģßū’’Źå—õćŚkOĶł9ąņ~,ūōĖ*”[ZZ:AAÜyē­§Ś čĻįCGŖÕż×–m ¾jƇąŠA—3oŽ» Š€»ļŗ  @^|ńerrĪ ‰wvv¦g®lŪ¶ƒ/cŪöōķŪ»įnŖB4 Ż„BˆFR\\\eqĘҧOŸ*+¢žŪŻwßĶŌ©S«m‰‰aҤIL›6µk×rå•WV?X4+Ēņu,ŁBb±›UĮQ²†2 ࢱŅĪÆ”ĪAÅt ,ĮO'‹!\ŒŅK“¼¶)’\ƒż…[ōNžģ“DkŸ²F¬ģĀP¤©Õj<ÜŻ)łgń?_JĖŹpws«2ōŅ×χ¢¢¢jē3ĖѹøTł»įėēKaA!…EÄŵŖÜīļļĒ揿_•ćĆĀB),*bŹ”ųūūćėēĆeżūV»NqQ1±±1g®įėCQń™ž>>Ž•’vŃé0™Ŗž^0 ?‹?ZĘĄ—±{WO?ż„ƒ»$„MCB7!„¢‘Ųl¶Ź9qÓ5×\ƒ››[ūŗtéb÷ø§Ÿ~š%K–šč£²gĻž:­€*_¾AĆҽĮlK÷ĄaŅրœTVb½“ó/”c@)1Ž™Ÿķ"—XąĀė›#)*·’öĀCkfRßD"<XŁ…ÆÜXõ~šĶfœ4U_;;9c±XŖl³˜Ķh4Õ?qvvĀl1W;§F£ĮÉŁ «ÕVeūl®ģ§zč”ūpsu%//Ÿ'yēE̘ńB•s:9W­Él6£V«źųØ!44EQŲ±s7žxxŲ_!W!šŠ„nB!D#ńöö¦¬ĢqļŽŅŅR***šöövŲ®>ž}öŁ:Æ^śo:Ž7Žxƒ#F0wī\&NœŲ`5‰sWnQųž°ßńĒŅĄ=מėß![[æ2ZłpRռ⯸ų/Š1ėĻHJ*jīQ ąåbbRßDĀ<ʱ²‹CRr*G'66šC‡Ž`µZŃėuUŚčõ:Ģf3GŽ£U«ņ ųūļ t9jµŠœÜ<¬V+NNN8;9sąĄ!āāZST\LĀžæé=v4Z­3›žÜB||ōzŪ·ļb×ī„*”ŪɓI¬že-’7n ˜Ķęj½Ō"ĀĆŲü×Vŗtétź¼›ž"2²~sˆП>ZĘØ»o?‹;'„ēŸ„nB!D#ńńń”¬¬ ƒĮ€N§«±ĶM7ŻÄʍk ēĖ7ŽČąĮƒ™>}:#GŽlźr§:³mKó`IB0eźóøyŗ˜‰õ6ēSJ+QŽF ŁDäø2ēÆŒfū=”üõ½{ņń’Oyśé)L˜š(cĒŽĖŠ•«ųä“Ļq÷p§_æ>„‡‡BjZÆæ>ƒĮHPp #’™»ķōõŚ·oĖ‘£Ē˜5ėMJKĖšņöāī©Vw]IMKēõ×ēb2™ ęöŪn <<¬ŹPŲ ĄœœœpqqĮß߯r{‡—`±XčÜ9ž¼Ż_!„8ŗ !„¤}ūöŲl66lŲĄŠ”CklsģŲ1¢££¹2ĒęĶ›G||<'NdĄ€M]ĪEķPŽž‚É(Ń6Ų¼lNjž¢=“ņ1ŠŚ§  GDlOóąķ”˜­ö·0ržź{O³Ż6āÜčō:ʍ{ Śö{ī¹³Ź×±±ŃLxņŃĻįļļWmß’_­J„āĘ®©\|įßī½÷®ŹŪkóojµš›F\ĒM#®«¶ļ?\åė?–ččH>ūü+öż}€ė®.Ó!š- Ż„BˆFrżõ×óæ’żĒœü‘˜˜˜*ūß{ļ=Ž=Źäɓ›ØĀšÅÅÅńųćóśėÆWéy WV™3ļ95LXÕOƒ‡ÖĢӗž$Ų­µJęcõ³)ɓE»Cö“Œö20±onĪø/Œ3ŗ©ĖhC‡^ɰaWįåéŁŌ„!„]ŗ !„ÄĻĻE‹q÷ŻwG·nݧ¤¤„#GŽpģŲ1ŗtéĀÓO?]ķŲĮƒ£ŃŌüg{ƌ 2Äīu‡ź°Ą?žH@@€Ćڟžy–-[ʧŸ~ź°8ōLpŒ…: \8š§#­Ä³EA­²a©eÅŅ’*­P“^¢•9¶D½­>ęƧ{ƒ~æÅł–ńDļDtN2,ł|Ņh4mčäķåÕŌ%!D­$tB!Ń­·ŽJ÷īŻłų揣¶mÉÉÉ(ŠB—.]xź©§øūī»qqq©lĻ-·Üāšœ§W&>|x•:vģXė±@e˜7|ųpüżżķ^ćŻwßeɒ%ųśśÖŲ®U«VÜrĖ-v÷‹sée$Ņ˧FWa³AF©–ÄŽåė؟ķJV™3åfNj+*lTXŌ5†#›ĀG»Chļ_‚^‚Q6ą›ƒž¬<č8¤ļXĢ£=“qRKJ!„7%+c“ü5BqŃ+·(Œłī’jŪćŌ̽ŃĶį±&“‰’’‡m<<ŚĢo‰ŽWVīZȃŻRŃČ÷S­ŽŪ†ķ?y÷ķ]µDx_Ü+DĆ{ū„åU&ƊÉ%ÖĒŠD qńžnB!Ä9Śŗu+=ö˜Ć6Ė–-#..®‘*jžĘϾ}ūģīæüņĖ™={v#Vtįņq1ćTL— āŹm„&5‰….$øp²Š…cy®ä”i8ķŹźć> o•Ū„‹ęĢlSxw[[Ó<¶ėQĄ}Ó$ĄB!ž!”›BqŽ.½ōR¶oߎŌe4{üqS—pQsu²p‰_)—ų•Vn3YU$ińՙš°2ќ•[ŽÜĮßYŽ{”^Ż:‡[Ūg"K­!„gHč&„Bq‘rRY‰ń’įE¢f„&5³7Gp4Oo·ÜÖ!“į­rÆ0!„¢…ŠM!„BQEŃ‰×žŒ$„Hk·J±qoēt.ĢoÄŹ.lū3-¤ÉĀ&¢aUXšŗ!.^ŗ !„B!*e—:󼟑d•:Ūm£QY×-•”EXŁĘfƒ’ ČMHµæŲŒ I‘±ąB4 Ż„B!„œ(Š1ėĻŠ+ģæMŠ9Yy¼Wķž5? Ø?O3§¦.C\¤<\$ą¢1Hč&„B4°£Gņż÷ߓ˜˜ˆĮ`ĄĻĻīŻ»3lŲ0“ښ‡jķŚµ‹ß~ū­ņ½^Ohh(C† ”cĒŽUڦ¦¦²téR®¾śj:tčPć9?ūģ3ŠŠŠxšĮŲ½{7«WÆąž{ī!((ØĘćęĶ›GXX#FŒą§Ÿ~"!!ĮįcÖėõ<ņČ#U¶>|˜ļ撞äädŒF#¾¾¾ōźÕ‹!C†ąģ|ŖMaa!ļ¾ū®ĆsŸęććƘ1cŲŗu+ėׯgōčŃVi³cĒ6lŲ@RRRå} c芔“oß¾JŪ¤¤$>ūģ3®½öZ.¹ä’Æ»téRŒF#<š@ź¢„ŚŸćŹ›["0˜TvŪø9Y˜Š7‰ļ²F¬ģĀåid·„n¢ xø˜šŃJč&DcP²26ɚŽB!.zå…1ßU]āŌ̽ŃńŖ}’6yņd^{ķ5l6”””ØÕj222(//'""‚oæż–Ī;W¶7 Üu×]¬X±•JEpp0Z­–ņņrRSS5j|šĶ©ĻŹ6mŚDæ~żčÖ­[¶lA­VW«eąĄ$''sōčQŽ}÷]ʍĄŻwßĶ’%Kj| ~~~ōļߟ•+Wp’ż÷óį‡:|Üdff`³Ł˜0asęĢAQBCCQ…ŒŒ ***ˆ‰‰įŪoæ„C‡œ;ŅÜyg{&«żĄĶOgb℉»U’žõg¶Ā·‡Čv0ŒWˆ†¦QŁø¦MAņs,D£žnB!DYŗt)Ƽņ 7ß|3óęĶ#88«ÕŹņåĖy蔇øé¦›8tčPe€öŅK/±bÅ ĘĒ‹/¾ˆææåł²²²˜6moæż6111L™2„Źõ.»ģ26nÜČĀ… y蔇ź\ēe—]ĘŅ„K;vlexWf³¹Ępļæ>ųąŽxć ī¼óNęĢ™C@@pź>|öŁgŒ7Ž[n¹…}ūö…ĶVõóæ×^{§žzŠ]»vU (™:u*«V­āŃGåłēŸĒĻĻÆr_FFS§Nå½÷Ž£U«V<óĢ3UŽ=}/^Ģż÷ß_§ė q!Y{‡O‚±9ų(>Ä­œ‰—&ā«35^a8 nl›Ķ¾lWRŠ“”™j’ż*ÄŁŅØ¬ų»šˆ(ÅĶYz¹ ŃX$tB!țo¾Ipp0K—.­2ŒT„RqŪm·qāÄ &OžĢęĶ›éßæ?V«•>ų€^½zńöŪo£ügV怀ęϟĻÖ­[Y°`/¼šB•6#GŽÄjµņÜsĻqĖ-·ąėė[§:Ÿ{ī9ī½÷^ʏĻŽ;ź¤ÕĒ›o¾IDD}ōNNg†N©T*FŽɑ#GxńÅٱc=zō8ēė™Ķf>üšCśõėĒ›o¾YmPP ,`Ė–-,X° Zč6zōhŹĖĖ™ųąƒZ¹żöŪķöČ»õÖ[¹łę›Ļź>œ«†ŗ3fĢą«Æ¾büųńüžūļ{ ŃR•™ŌĢł+‚C¹z‡ķ®ŒĪćīųtäĒ@!„8{ŅÓM!„h@ķĮOMj ɜO­lW^^óJcŽŽŽĢœ9“-[¶°xńā:_·cĒŽ<üšĆ|ōŃGlٲ„Ööłłłv’3Ą¹Ż‡su®÷ŃĻĻ—^z‰M›6ńÉ'Ÿ4x}B4µ£3’ˆrø)Ąm³ÕI7!„ā\IO7!„¢xyyT†Ouįįįœé©eOYYą8Čŗļ¾ūX“hO=õ7ÜpCU˜6m_~ł%’÷’ĒÖ­[.Ŗ°zõźZ]8›ūp®ņ>>ųąƒ,^¼˜I“&qżõ×ćééŁp… фŅJ“ĢŚIŽ”ę¹įŌ¤ž÷tJg`T~#V&„B\ø¤§›BŃ|||€3ĆLkrąĄbccyė­·*GĒü{’é9Éj¢R©˜7ołłłL:µĪu{xx0sęLvīÜÉ¢E‹ź|œ=u¹»vķ"66–… žóõ įļćܹsÉŹŹŖ×}¢9;^ cĘĘ(‡›Feåįī)ø !„ HB7!„¢ø»»ćļļ϶mŪģ¶9vģĒÆģiF£aĻž=Ͻ}ūv“Z-±±±ŪõģŁ“ūī» Ōk1€{>}śšģ³ĻÖøČ@}ųųųąéééš>=z”ćĒ£×;žSŖ®bccQ«Õuŗ:Žččh‡ķśöķĖØQ£˜?>’żwƒŌ(DSŁ“éĪĖæGQ\a€‹«“…É—&Ņ#Ōqp-„Bˆś‘ŠM!„h 7Žx#ėÖ­ć‡~ضĻb±šžūļ£R©8p pj±Įƒ³|łrvīÜYć97oŽĢŠ+2dHęI›9s&Œ?›ĶV§ŗO/ŖŸŸĻ³Ļ>[§cģQ«Õ\żõüōÓO¬Y³¦Ś~³ŁĢĀ… Ńh4\~łåēt­Ó<==4hŸ}ö 5¶łż÷ßłöŪo>|xåÜn޼śź«øŗŗņČ#Ōł> ŃÜüžäś[Ā)·ŲÉļåbbræ““ö-kÄŹ„Bˆ‹ƒĢé&„B4)S¦šóĻ?sŻu×1tčPzōčV«%##ƒõė׳wļ^}ōŃ*=Öf͚Eæ~żčŻ»7Ƈ§K—.øøø`4ٳgß’=nnn¼ņŹ+uŖĮßߟéÓ§3~üx“Z-aaau:®[·nŒ3†… Ś·mÜøqWō|ēwP«ÕL›6µk×2lŲ0†N×®]qvv&##ƒuėÖ±’~&MšTēŚźā7Ž ’žōčу«Æ¾šN:UŽĒ]»vńĆ?ąééÉĢ™3ėt¾ĄĄ@¦NŹ’ž÷?“Z-111 V«ē› ųę ?+ŚJ ā^Ī„¾‰ųéLS˜Bq‘‘ŠM!„h !!!lŪ¶Y³fńÓO?±qćFJJJššš cĒŽ|ųį‡Œ=ŗŹ1ķŚµcĻž=¼öŚk¬^½š5kÖPVV†^Æ'::š±cĒ2aĀ¢¢¢*qqq!&&¦r’z蔇X¹r%'Nœ <<¼r»‡‡111øøøŌx܌3Ų“ieeeVn÷÷÷'&&†uėÖ9|ü§{„EFF²cĒ^żu~žłg~żõWJKKńōō$>>žO>ł„»īŗĖīy¼¼¼ˆ‰‰A«ÕÖy‡HHHąÕW_å—_~aõźÕ”••įźźJtt4ćʍcĀ„ DDDT£Ó鈉‰ĮŻŻ½ĘėŒ?žoæż–¤¤¤ …8Ÿ,V…% Į¬?éķ°]Œ—'ū&įīln¤Ź„Bˆ‹’•±IĘL!„øč•[Ę|wIµķqjęŽčÖ‰‹Õ¢ĶF¾N(ƶ}bŸD:–4AE¢„0šU¼½-Œ=™5ɧµ÷/å±^Iøh¬T™Bqq’žnB!„u4bć 6\qż’žūX‘§xcs' kīÉzŚeÜŪ9 µJ>wB!Ī7 Ż„B!źhŊM]‚Õd–83ėÆH2K/ruėnmŸ‰ż™…Bѐ$tB!„¢…:–§gö_į”TŲYÆRlŒŠĻ`Pt^#V&„B Ż„B!„hv¤¹óĪŽpLū}דj+’×#….AōX™B!@B7!„B!Zœ_Žū²lo6S³¹9[x¢w­|ŹÆ0!„BT’ŠM!„BˆĀ|sП•¶ p­`BŸD‚Ü*§0!„BT#”›BŃ@~żõW¬V«Ć6įįįÄÅÅQPPĄöķŪķ¶  >>¾Ź¶ōōtöķŪg÷˜ˆˆŚ“icw’Ń£GŁ·oŁŁŁųųųŠ­[7"##«µMHH ++«ĘóØT*āććńóó³{-!DĆ3YU¼·=”­iŪµņ)ć‰ŽÉø9›©2!„BŌDB7!„¢\sĶ5 ‡m{ģ1ęĪKBBW]u•ƶ­[·fłņåtźŌ €_~ł…Ń£G;<¦[·n¬\¹’šššŹm‡fŌØQlٲ„Ęc Ä|@TTTå¶éÓ§óÕW_ٽŽZ­ęž{īįż÷ßG­V;¬IqīJ*Ō¼¹%‚C¹z‡ķŗóŻ“qV;wZ‹éīČq£ĀĮ\q¢i¹h¬tš/”c`IS—"„Ā Ż„BˆtÕUWńņĖ/ŪŻPuHŲ /¼Ąu×]We›ÉdbĖ–-Lš4‰Q£F±gĻž*ū,X@=Ŗl+//gõźÕLŸ>ńćĒóķ·ßPVVĘŠ”CÉĢĢäå—_ęŗė®#88€ääd~üńG¦M›Ę°aĆHHHĄÉÉ©ņœ:Žß’½ŚcČĻĻgΜ9|ųį‡ōīŻ›1cĘŌįĪ!ĪVV©3³6GQ¢uŲn@d>÷tJG­:ūĄķė|{Č’¬ē§£¾ÜŽ!ƒį­r›ŗ!„vHč&„B4 oooŗuėVēö‘‘‘5¶ļŻ»7{öģańāÅdddT¹ÆM›65Ó·o_~’żwÖ¬YƒĶfCQV®\ɉ'X“h÷ßµZćććńõõeģŲ±¬X±‚Ūn»­ræJ„²ūXzō聏kÖ¬‘ŠMˆóčhžž9…S\a’e»ÜŠ6‹ŪfŸÓµĢ6…ŽųžÓ9Dćśī?ĆZå"}…¢yR5uB!„ØŁé¹Ö ė|LDDƒŠŠS“§oŲ°FƝwŽi÷˜[o½•Jņ ź|OOO¼¼¼źU›¢~6§x2óH‡›F±ń`·ŌsÜ ĢVy{Š’”šŌ”™dˆæB4WŅÓM!„h¦öļߏN§«2×Z]މ‰‰A«=5 ķĉ¢Óéģćé鉇‡u¾Nzz:“mŪ¶ĪĒ!źnõ1>ż;›ƒ‘¢®Nķ•L;æŅ¹ę/5¦ #āioév#Ėv”W~}öƒ‰…Bœoŗ !„ čąĮƒ¼śź«v÷;ooļŹÆ÷ļßĻŚµk«“±Z­üöŪo|õÕWLŸ>½2@;mēĪÕVI5›Ķ¬X±‚ķŪ·óÉ'ŸTn/..vøęęęFAAA•m‹„ZmpfN7OOOž|ņÉZĻ-„Ø;‹UᓽAüzĀĒa;}OöI"ĽÜa;!„B4 Ż„BˆT[čvĖ-·T ŻfĻžĶģŁ³klūąƒņĢ3ĻTŪ>qāÄŪ«T*^zé%FŽY¹Ķd2UYĮNGiiÕŽ2F£Ńī «>>>|óĶ7DDDŌzn!DŻĶ*ęo #!ĖŻa»Xo÷NĀSkn¤Ź„Bq6$tB!Š 7ÜĄ_|Qēö5­^j0ųüóĻyūķ· ēŁgŸ­²æ¦ÕK‹‹‹yēwxī¹ēˆŒŒ¬ Ž<<<ČĶ­}e;£ŃX­G½ÕKyī¹ēøžśėٳgoB4€|ƒ†ŁE’Tčā°]·bĘuKĘY-ƒ …BˆęNB7!„¢ Ł[½“_æ~lŲ°E‹U Żģ¶ 2† IDAT­^zé„—²fĶ-ZTŗyzzRRRRk„„„ųųTĪfoõŅnŻŗįååÅW\ĮW_}ÅOł„/æü²J{oooüq^zé%”zŒ[Óh4x{{“™™Yēc„PbR3k8ū³]¶ ó(ē‰>‰ųéLT™B!š’•±I–>BqŃ+·(Œłī’jŪćŌ̽ѭNē(((ĄfsügÕŁŁWWWĢf3ÅÅÅčõz»½ŲŒF#ƒwww4 ”––V~]“²²2ŹĖĖńōōD„Ŗ:dĶjµ’””D^Ž©aj„……ÕxžŅŅRL&^^^vKaa!Š¢ąįįįš1‹śY“ŁČ× åÕ¶Oģ“HĒĄŚÅĶWf‰3sžŠ ­ÄqĻÕöž„<Ņ3 ½“µ‘*;%§Ģ‰'~93·ć˜>.ŒˆÆ[/[Ńx–n7²lĒ™ßļ\}7§śME „¢qHO7!„¢8 ØžėtO1G\\\*ēNƒS³³³Ćcōz=z½¾Ę}*•ŠØØ(¢¢¢j­ĻÕÕq/8µ2Ŗ¢nög»ņÖÖpJMj‡ķEēswĒtŌ*ł\\!„hé$tB!„ā<ڐčĶĒ{‚1[ķįV)6n¹$‹«[ē4beBü?{÷Uµ5pų75mŅ{‡„Š[¤éÄõ³€ŲĄĘŎŲ@EAōŠ…«Ø€"  4AšŌФ‡ŅŅ{™ÉĢ÷GĢHĢ$3”$Öū<÷¹rĪ>ū¬2³fķ½„B\N’tB!„ā20+Nxóó ŸzĒŁ«LŒN&Źæ°qB!D£¤›B!„—X™AÉg1AģOs®wœ»ƒg{$źVÖH‘ !„¢±HŅM!„BˆK(·TĶģ]”œĶ·Æw\øG OwOĀÕŽŠH‘ !„¢1IŅM!„BˆK$.Ē‘9{‚É/«’evÆ |‰JE£lÜ„B!„h<’tB!„āŲ™ģŹüč+ėn˜ nŠČā®ö(źvU2$%%‘••…V«%((Čbē²²2JKKquuE©TŚ<YYqqq”••”R©šõõÅßßæŽk ĒŽCÆ×£T* Äǧö|•••XĮÉÉÉj—i!„×Ū‹ !„B!j1š,9źĖ¼}Aõ&ÜŌJ#F§pw‡k+įf0xēw ¢E‹tėÖĪ;ćååEß¾}ٱcGńļ¾ū.œ={Ö¦ł’śė/†޳³3;v¤[·nDFF@DDóēĻÆuM^^÷ŻwīīītéŅ…nŻŗ…ÆÆ/įįį|öŁg5Ę=z«’[ŗté?'!„W©tB!„āŁŚ0A§50¹{m¼J)²ęcņäÉ|śé§ÜxćĢš5 ___Š‹‹9pąŸ|ņ ƒfĒŽDGG7xī„„śöķ‹ŃhäŁgŸ„oß¾899a0ˆeĮ‚Œ?žüü|ž{ī9óu÷ß?kÖ¬įÉ'ŸdȐ!ųśśRPP@||<_~ł%=övvv<ųąƒ5ī7zōh†Zg<=zōhš× „āź%I7!„B!.@F‘–9»ƒI)¬æaBK9ĻöLĄĖQßH‘5qqq|öŁgÜqĒ,_¾¼Ę¹‘#G2vģX:vģČĢ™3/ØJlÖ¬Y²cĒzõźUćܰaƘ0a ą7ŽąŃGE§Ó‘™™ÉŖU«˜8q"sęĢ©qĶąĮƒ;v,,\ø°VŅ­gĻžL˜0”Įq !„ø6ÉņR!„B!čČ9Æo ³šp‹ō+䵞ń×dĀ `ķŚµF&Ožlń|DD;węąĮƒ4’śõė鎽{­„[5FĆ£>JAAžł'iii˜L&ŗvķjń'''®æžś ŠG!„8ŸTŗ !„MĢh‚ͱĖØD§Upc{-~Īņ¹˜ĶÕę³ī|wŲƒ±žŁ†…eso§ōkj’¶‹‹‹ cĒŽuŽ™3g™™™ žŪ`0pęĢ™:nÕZµj@RRžžžØT*:Tē5+W®lpŁĢéĖ MŖŁ«<•B÷€‚FŠL!„W#Iŗ !„—‰ĮØ`m¬gēĒvΐe„B4’ćYN|ŗ/ˆü²ś_žśź*˜Ü=‘ —ņFŠL!„W+Iŗ !„—ÉīdW²J-oŠŽÕ·Ī>…‘×°&֋„Ē|0šźßæ­³O!]—‚“¦²q‚B!ÄUM’nB!Äe`ÖĘY®rS*LŒé”Ńø q *Õ+łā@1©–™TS7EdqWū õēå„B!l&I7!„ā28žåDb¾½Ås×௓„kB\N yöĢŻLf±¶Žqöj#ć#Sø.PöoB!Ä„%I7!„ā2Ų“āRē¹[å4b$B\{v$ŗņÕ”@ō•õ—­čŹyŖGĪ’B!Ä„'I7!„ā3Ņ-'ŻŚz–ę^Ņø qŠ•|wȏ?Ü­Žķ”Ļƒ‘)Ų©¤™‰B!.Iŗ !„—X|Ž#¹„–Åö Ékäh„ø6¤iłxoIłvõŽS+ÜŻ!ƒįįRq*„BˆĖK’nB!Ä%v,ĖÉāq„ĀD¤Ÿt,āR۟ęĢū)Ń«źēé ēÉė’ ÷jS!„B\~’tB!.±Ō"Ė·‡»—ābghäh„øzL ~<źĖo§=±¶H“³o£“Ńi+%6!„BIŗ !„—XZååm!®e‰WÆģ ’ŻÄéĒzĒ)€›"²ø«}Šśū*ˆ‰Ļ6²-^ßŌaˆIĢ56uB!l$I7!„āK/¶œt p®häH„ø:Ť:3’@ ÅV–“ź“•LŒN¦³oQ#EveS)jÖ ž~Ŗ‚ßOÉæ[Ķ™P+¤ˆB4W’tB!.± ƒår7;©ābčJ–ńa}¼§Õ±-ŻJyŖ{^Žņsg+wžŽz²K4MаQk9öj©|BˆęJŁŌ!„WEæ]M²“Mˆ –VdĒō--mJø l‘Ė«ĪHĀķLŒJ–½'Æö‰Liź0„BŌC*Ż„BˆKL„0”§v†ĶP)Ÿu q!v$ŗņĶįŹ õ’ 9hŒ<Ō5•łŁÕ§W s†Ē’X`G©^žĶj®5F‚]ŹP+ei©B4g’tB!.1Ńbr £X–l ŃśJKŽśŚTŻÖµŒ'®KĀW'{],µŅH˜[iS‡!„B\ń$é&„B\bĮ.e䖼jO,ph‚h„ø2„ŚńÉŽ`’ėč|¾-r¹Æs:j„ģm%„BˆęC’nB!Ä%ä\ĘįŒŚI·ÓŁM ”ŅiNˆzm>ėĪĀæüŃWÖæ¢NSÉ#Q)Dł6RdB!„¶“¤›Bq‰…ø–[<ž_®ęTŽm=K9¢Ęe2A~µJN'Ż#„ķJō*¾9äĻĪdW«cĆÜJyāŗd¼d9©B!š'Iŗ !„—Xgß"TJ•ĘŚ §½).WtŅ­¼ÜÄéÓāāõÄň=­ēĢYYFŠ‹M)-­YÉēźŖĄŃQ‰“£5aį*Z…kˆh„&<\Cp° „R’s×ŗc™N|DNYż/OĄŠ°līé˜!›Č !„¢YSœKß!ÆV„BˆKģŻ-8šéT븃ĘČģa'qŌ\{O pō˜ž­[KٲµœŻ»Ė)/æ“/t:QQv čoG’žtī¤A!9øk†ĮØą×S^¬8éƒÉŹ·–NkąŃčTŗųŹrR!„B4’tB!.ƒMgāG…•f J…‰[Ūdrk›,iB"„Bˆ+Š$Ż„BˆĖä»Ć~lˆ÷“xnlĒtnhÕn&lŲXʜ Ų·ÆłnHÆŃ(u‡#“&¹Š*\’oW²Ā 5’;Ąž4g«c½ōLč–|Eļƒ(„Bˆk—$Ż„BˆĖ$«DƔ*8i*yh,:meDF£‰ Ėłąƒ|j¾É¶S* lĻsϹČŅÓ+ŠŃæ›%äZi–p]@F¦¢Ó4ĶψB!ÄŒ¤›BqĶŪÄĪdW‹ēnl•Ķ˜Žé:¬gźŌöør’m’¦PĄčŃNLŸęŠ——Ŗ©ĆVčJ~:ī͚Ó^V›%Ų«Œé˜ĪĄ¹œB!Äe"I7!„ā2Ź,Ń2uc8cķ½ŻTJÓÄāZÖ(±äåy’ż¾śŗŹ«¤xČÕUĮ”ē]yų!gT’{k–’ņķų|‰64Kw/ebt2¾ŗ+7!,„BQM’nB!Äe¶č/~‹ó°x®µg /÷;Cż[É_¼eĖKxåÕ\rr.}ƒFIĖ–NøøhpsÓ Ó©qrRSQa¤øŲ@q±¢"iie¤¦–^ņūDvÕ2÷#Ś“Ń\–łEĆU¬‹ódł1 ¦śæĆUJ7„g3ŖŻ9ŌJyi*„Bˆ«ƒ$Ż„BˆĖ¬XÆbŹśŠō–K±ŽLe@čåYJWZjbź ¹ü°¤ų’Ģē쬦śõó¢];ڶu”eK'4šŚ•|–8uŖ“' 8x0-[Ī“KeåÅæqpP0s†;cīqŗč¹ÄÅI.°ć‹˜ ĪŚPŻęéØgbT2m¼¤Y‚B!®.’tB!Į†xO¾;ģgńœNSɌ!§qµ3\Ņ{ž<©ē‘ńYœi{²ņZµ;ŕ©[±>ŽÓź³R+LÜŃīo ˆ#ĵ¬qB!„hꤑ‚BфŹ+¼¼©ēŠ-w3ÕŖ+ę%} ąÓsßŲt¶ļ°méŽw±xq/ģģ®īĻŚN*dųš-œ=k[×·ŽtcĀxēĖՕ'·TĶwł³/Õ¶żžZy”špd*Ī²”T!„ā|’tB!šŲ±L'ŽŻQw7Óó©”&B1ļ­$›ę2ėիū£Õ^Ż ·jńńEōéó;ééÖ«­4+ö”[7Ė ĻkM„QĮ†x~:įC™Įś÷‹ƒĘȝķ3Ü"G%!„BXpm¼B!š±Ŗe¦¹6U˜L¬ßo[’ØW/OV®ģwĶ$ÜĀĀt¬YӍձz½‰§&gS! M9‘ķČ«„³ųˆŸM ·®¾…¼=č4CZJĀM!„¢.×Ī«p!„¢2š¤ŁŃŅ­­Źz­›Į¤Ä#ĀŻźøöķ]XµŖ?ŽŽŖKę%2Ņ+śŚ“œ6.ĪĄĒŸŲŽżõj“[ŖęóżĢŲ֒äė\ķ <•̳½ńr.°B!„õ‘å„B!Dxs[Kb’īDŖŌ*•ĘŖ$œ5†RŸŻH]ėQu:5{÷„m[ŪöäŗZĶ{ŠÉ“XgoÆ`Ū?BCmė€z50ü~ʝåĒ}mŖlS½Cņø·c::­Ż;„B!®qRé&„B4»ŪgąlW‰JQ•;ÓW*lJøØķÕ8z9ÖyžÓO£Æł„Ą¤I­5*Čźø²2S_Ģk„ˆš‡c™N¼²9œEłŪ”póqŖ`jŸ³<•" 7!„BˆJ7!„¢‰UØłdo§²1mß«²¢’£‹Ž‘ŗ;„Ö¹ńćĆųā‹ė.e˜W“¼<=ŃŃė‰/²:ö‡Å^ äŠQ5sÅZżåǁtŪ:¶Ŗ&nnÅČ6Yh”ĘĖB!ÄÕG’nB!D2«c½XvĢ“ Lؐ|3Aā¶$Ž->Zćpp°#ĒŽŻˆNwķ,““Ŷm™ ° “•W<ŃŃZÖ®ömœ Q™AÉŖX/ÖĘz¢7ڶȔ“oć:„ćÆ+æĢŃ !„B\½äU¹BфĄˆˆ,ĀŻKłxOe•õŖ7xµó¬uxīÜ(IøYŠÆŸ7cdž²hQB½ćbb*Ųńg9}z[o(p%0lKtć§>䗣ö}įaoąĪöéō ¹v›K!„B\*Ré&„B4åj>ŽL\žƒõěÉƧ7RY^µĒÖ 7ų³vm’FˆņŹ”‘QFŪ¶kČĖ«æćf’žö,ūŃ»‘¢ŗ|¤;óż?Ņ‹“6×ØL Ėī“  IDATęÖ6™Ų«e)©B!Ä„ šņüĆÆ7uB!„;µ‘¾!łTšÄę8ÖæŌTŁĒ³(Ķ.C£Q²vmÜŻmK°\‹t:5Z­’õėÓ뗐``š`üżUŁ„u:Ē‘O÷±:֋¢ Ū¾†HæBžķ•H÷ĄŌJł,V!„āR‘ī„B!D3¢T˜Õī’靀£ŗS‘™Œ ÜĀÜ7.”°0]c†yEzüńVųū[o”°h‘õ¦ ĶMj”Ÿģ ꍭ-9•]wgŪółé*x®W"ĻōLÄŪ±ā2G(„Bq푤›BŃ µ÷.ęķŠR -žW(Į#Ā„RĮŌ©ķ9ŗ+“½½ŠI“"¬Ž[±²”²²+£ā+§LĶ×xiS8{R]lŗF«2q{Ūs¼3(Ž.¾–ææ„B!Äœ=Ż„Bˆfjü„,~YUFū±īTu𼧆R=;O±dIļ¦ š TP §E‹UäęÖ_ŁõÅēžÜv«mcM!«DĆŖX/¶&øa°±#©Ji¢H··ĶÄ;ž½ķ„B!ÄœJ7!„¢ŹĻ7±ī·2LFGa’¼ż**1VžóY™Ś^ƏµiĀ(Æ<..zØ„ÕqK—–4B4 —Y¬åėƒügc›Īx؜pėą]Ģ›×Ēń`×TIø !„B4’k:évųƓüņė&ņ󯼽[,9pš8æüŗ‰¢¢ęłFA4®½{’ā—_7‘ŚŌ”!.ĄŚu%”—’“`;wųŪ§o£(µ£¾Ŗ»¤©Ņˆ} mK Å?…Õ1›’(%/æłtńL.°ćóżLŁŲŠĶgŻ­w·ż[˜{ /÷;ĆŌ>g r)æĢQ !„Bˆó]ÓI·E‹VńČųWIJJkźP.‰ ~ę‘ńƒž‘ÕŌ”ˆz¤„erčšIŠ‹K/ė}>łt1Œ•-[÷Ö8^YiäŠį“œ=›rYļ/„ø8[·•Õ:V–SĘ®ww‘²+£Ń„B­äD†” ¢»²uéāFēĪnõŽ1`ēŸMŸ¤JĢ·ē“=Į¼¼©;Ż0šlK¶łėŹy²{Óœ”§|'„BѮ餛Mįė?1tŲC={YļÓ”}8żū_‡ææwćEE% öƽžńe½æāāģŲa9įc49ŗč(G¾>ŒF GŅ*9²«Ć}÷…Z³m{ķÄgc0GĪéxļĻP^Ł\Õ ĮÖ xŻķ <Ų5•wÅŃ= ŪRtB!„ārP7uBˆĖć?Siź„(ö“ž4+É4ļŠRęŻå̱t©t»#G2eŹ”zĒlÆ#ńŁP'² r)G§©’RĮŽDw6Ä»“Rhß {č4•ÜŠ*›į­²°SI,!„Bˆę@’nēY“xły<öŲŠ>޹ė ūö౉cP«Uęsgūö† ķC›6U3—––±eė>:Afföövx{{ŠÆo4QQķSvvk×m#))œœ|ģš÷÷”ænt芏¦9*ōz¶m‹a’žcœ;—V«ĮÓӍž=»Š«g×_kµ˜˜£lß±Ÿģģ\JJŹšōt#"¢7 ļ‹Ng{77ƒ”’ķŪcŲs”ŒsYhŌj<=Żč~]'śö®qļ­[÷rčšIĘÜs3^^īµęZµźΜM6’œ=›ĀÆ«63tHo\\u¬Y³•¤¤4 †Jüż½6¬­#Z˜Æ7ü÷ÓÅ“nŻ’¾}¢X»v+±§ČĶ+ĄĖӍ^½"é×7ŗÖ}F#۷ǰgļrsóŃ xzøŃ©cC†ōF«Õ˜Ēnß±ŸŽńĄż·qśt"æoŚIFF6÷ß+[¶T-ó¬ž^ZöÓzvļ9 ĄĶ7 ,,Ų<ĻĮC'ųsĒ~’’Ó©4qws”cdž鍽½MĻžĻˆ‰9Źw #0Ą‡Ķ›wsäh,eeUo"ĻÄ'ńń' š÷ófōčįękssóŁüĒŽ‰„  ''|4Ø'­¬W‡œ/>>‰M›w“’’Aaa1:g'Z†2tXoü}€ŖŸ™ł’[FHH·ŽTćśeĖ~#-=³VŒæ®ŚĢٳ)<ōą(ŠŠJųqéZśōŽ¢]»0Vž²‰C‡N R© ń§_ßhڵ oPģB4•ķŪ­'{ō!ŠUI «¶"ŗś“nķLP#ÉÉu/½÷õ×?ńƒ5 ŅØJ0Œ¾s2É)ØÕ* †>Ł1āzęń&J„õ•½Ūwģ灒{ĀĀb ®.: ‹1«^T?6ń¦æžT½sddd3śĪIœq/§b«¾ž±cF°uė^óĻ`5„RÉ“×žą±‰÷Ų»Mi_L…Õ1ś4B$W·Aƒ|ųöŪ³už7™ &¦‚nphмåj–÷ak‚&8k+éąU³i“ĮØdŗŽĶg<8–édóņŃj®önĻfhX6Z©lB!„h–dO·óōéSUå“kWĶå&11GčŪ' ų§J©Ś®Ż‡šņr7W¹½>żĪĖaĪ쉋]OjņV’“ž`ėßŃ»W$«VżĮoæm·)žē§¼‡ĮPÉ·ß¼KJŅN\Gzź6vļ\Bß>QĢūģā擼ćŻ÷¾$öt"o¾1‰“'֒𼕔¤-ģÜń7 ļ˶ķ1ü°dyü§ó¾gĆĘ?:¤7›6. )a3ɉ³wo½9™‚‚"žxź sā¬>Ī^Ą±cq¼śŹcœ8¶†“”m¤$maĻ®¹eÄ@vļ>Ģw ±éYŌē×U›=j‡®$-e§N®cÉ÷āķķĮ“×?©õŒvļ>Œ§‡æoųš“”m$žŻÄ¦ ĢÕo Ļ‹é7?åĄĮćŒ3‚?w|OJŅĪüĪ®?ąéÉ÷“ŹŌ?°ÓSOŽć·uó9ql 7 ļˆõ_±ażWŒ¹ēfęĢ~Ń|¬WÆHÖ¬ŻĀņŸÖ3zŌ0öģś‘sé;HMŽŹŃæ~å?S!5ķ3f~qAĻiņ¤ūٰž+~žéz÷Š4ßĪ쁪$×3ĻĪ@­V±xŃ,’6“š¼•ij›ųuå’l:;F`g§E«ÕģĻ„ńw1źŽaÄÅ%qģXœÕÆaß¾#„‡óŌ“ćššpŖŖ¦Z“äõiO@NN¾Õy¬iŪ6Œ÷ߛ‚ŸŸn®Ī ؃iÆ=ŃhdÕź?jŒW©”ĢŸ’:µĄĪNKĒŽ|žŁtŌjæüŗ ØZVŗfĶZ“äƦŅ*<Fƒƒ=aaĮ¼ōā£ōģх-[ö’Ÿ_³‚᱉cxõ•ĒˆģŚWģģ“té܆.Ūąėė @«šó1WWł™¼1}’¹zĄŪۃēŸ{ØØö]Xŗ @_ŗtnCĒU•š.®:óż«+;³²rIHH垻obČą^ŲŁU-[³··£GĪLzj!!žµŖČ,Yµj3̚Jæ~ŻŠéQ©”ųłyq捿yń… TTčĶIhsŅū¼Ÿæźēńč£÷Ōų3ü“ļŪ§ę’ą°°`ęĢ~Ńüü1āzyųNōzƒMß»B4µøųś“nįį:ÜÜ4õŽÖEEÕ®Ŗž·ÓV Õ¤;óü†Vü|܇ŠJ%cÕK,ąę`ąū£~<»¾5ookɦ3ī ^Fč\ĪÄčŽršėCsQ+$Ł&„BŃÜÉņŅó„†äWćM’ŽæßäGGw :ŗ11GĶēŖ÷ć:’MæJ„$';½Ž€FSóńöčљ½»—Ś‹§§ēŅwŌy>=# €ü<ĖūĆTS«UQZZ†ƒCĶM™[G“ØORb­#ZŌ¹o[dd;–üø–ŲÓ V÷”S©U—P\\Š“SĶ„9ĮĮž6? k^߯ārŻ=ŗŌŖŹŠˆhAP`ķźooĀZ›Ē“—_ČõuĢ՞]»&‰Č®ķĢLJ ķsA_‹JUõ&,##ŪāŪuk¾¼ yz’s™9˜L¦Zūż3‚±cFŲ4WRR:‘Qķ,žÆ~^±§€šIļ{ī¾ ØJ²¹»¹0tH/ÜŻ]ٷR°:9ާoTyū÷ļfqŸĀšæ÷ĢKKĻ“)~!šŹ¹s•äēןPiÓĘł¢ī‘““Czz:†€€œœœjÉĻĻG«ÕāąŠ°„•¶0™Läåå”Õj-Ž»±DDčP©TVÖż¼­UŗÉsą›Cž$äŪc4*jU­é+,:ģwĮ1¶ó*fxx6‘~…Xų§M!„B4c’tū—¾}¢ųaÉŅÓ³šóó"&ę(NN“mF·čެ^½…ģģ<<=ŻŲ¹ó PóM’Ø;†ńé¼ļéÜõV:tˆ 0Ą‡  _|  &2²¹zȚ‚‚"æš={SPPLA~!z……ŤŲPiTĻo~J—®·Ń±c¾łįļļMĖ–ADGµ7ļ©PT\R+Av>wwWsl¶Üūŗ>¤KämtźA`A¾U÷nHttĒzļe+7ĖĒŻ«*ūņņk&&=’®ŗ³ÄĶŻ…”ŌŖg[]QV_ŒnWü«ŅķBæ®[oĢgŸ’Ąš”c‡BCš÷÷&0Š—"»¶ÅĒĒó‚ę¶…‡‡+ö`ٲßŲµó mŪ†ų÷ßYP /­[Š„s›ö$,**A«Ń ÕX®Ęq÷Øł½Tō޽ū°y̾˜£DEµG©TŅ-ŗūĪKzļŚu??Æū/ø8ė,ŽO”¬z·ji9!š[–3¶mėrAsÆ_æž_|‘żū÷›©ÕjČ|@§NĢĒ;vģČ=÷ÜĆūļæA÷ŖOyy9Ü}÷ŻüšĆ—|~[ŁŪ«väģŁā:ĒŌUé–[Ŗfł ¶%ŗ”T@„±ŽŒŲ$Ź4J#½ƒó–CˆkYĆ'B!„Ķ‚$Żž„:é¶k÷!n»u0ūö”k—¶ØÕ*ŗEwĄd2³’(Ɔöa×īCµŽōæśŹć„‡‡°ń÷$&¦ņ×_§ČĶżg ep°?K—̮ѩҒ²²rFŒ|Œ'ā  uD BB°w°ĆÉŃ{{-ó>³žFå‰ĒĒāļļĶź5[HLHćÄÉ]5–“śųx²hįūté܆Š =C%jMŻßÕĖ\mŁÓķį‡FįķķĪ/æl&11•Ķ›w×ŲOĖÓӍoĢäŗė:Õ3‹uu%1«»|–””Y<^×5„„å˜L&JJJŖ7¤u9Łļ„Š„sVżśß}·’ŲӉģŽ}˜ŒsYęęZ†·ßzšøķ’Ž÷|_Ķ›ÆüĎ滧īŚ}ØĘ’ÖČ®ķX¶ō#óņéŗ”””¢ÖŌż|ŌŖŚēśö‰bɏkÉŹŹÅĪNĖɓgøeÄ@ŗuėČļ›vQXXŒ^oąTl£īZk©Wŗä$ėI·Ö­^é¶uėVnŗé&zōčĮ²eĖhٲ%„„„:tˆ™3g2`ĄŽ9B@@Ą…„Ż *•Š &Š­[·Ė~/kڶu©7間c¤¤Äˆ£cՇ • ~>įĆŚÓ^˜Øj¶PO”\ƒųé*šĖ€Šq/O>qÆłX~~‰‰©|·č,ų™/ē/åŁgžÆŽy4Z ee—©‚ågWō޽ū0ĪĪŽFŗEw [tŒF#£øø“ÉdŽNˆ«IQ±õjĢ  †WÓNŸ>ąą`6lŲ€£ć?[ōéӇ޽{Å×_ĶĖ/ælu®²²2ģķķ­Ž+..ĘĮĮ”Vu¬F£įóĻ?Æ÷Z½^¦ŽJŁj&“‰ņņrs,„„„üńĒtļŽOOŪŖ‚ƒƒ­?ĖĀBް7Յ(®P5øŪh]4J#×2 E.m½Š/¤0N!„B4SŅHį_|hŁ2ˆŻ{sčŠIōzƒłMõ†ūūöaĻžæ05Žō'§d0ś®§Yøč×s:8ŲÓ¦MĖŖŖ3?o›6r?yņ ·ß6ÄāłŌ”sVē(,,fō]Oó駋k···£Uxœ½ Ęq;;-įįĮŒ3‚ČØv;žĻ³Ø®@+Æ#¹–jńxõŽa’–’ZõŒ<=k.?MJNÆs‰aJrŗy/5 ŁŁyĒœ;Wõ<\\-/ilØ©/|Ą„G_«qL­VčĖŠ!½¹ćö!TTč­6а‰…jÅ?w`ō]O³mŪ¾Ē]]utźŌš—_¬JŪņ=ģććŃh$7·Ąāłsē²’žūŸļ„ź¤÷®Ż‡Ų»ļJ„’ØØŖddd{T*%{÷a箪„ŻÕūĄ q5)*²žĪqvnX…ŠŠ ¶oßĪčŃ£k$ÜŖuķŚ•ĄĄ@Ž?^ēqqqŒ5 °··',,Œ)S¦P^^nĻķ·ßŽ««+:•JExx83fĢØQ%ݶm[Žx㠊ŠŠšššą«Æ¾bäȑøøø Õj āķ·ß®q]ii)Ļ?’Q;Ǧͻ€Ŗ& ÕŗuėȁƒĒłóĻżę±Õ\]tlŻŗ—Ÿ~Zoq޼üBņņ lŖPŖŽģģŁ”Zē*+¬Z³Åź:#{öfå/›,&™ŹŹŹÉ8—…ī¼x¢¢ŚŸĢžżĒjÆŠėY±āw”J„¹óg]“Z >Ɋ•æ›—Fž{®ŌŌĢ Z¶ ą·õŪk_÷Ūv‹ĻŖŖžŖlēūDGw¬q<''Ÿ_~Ż\kü¦M»HI=GŌßߎŽU{łķÜyŠb·Īüü"~[æWW-[YŒĶ’źä¢„d^Zz&«×l©³Ćmuā±®F¶pp°«J&Zč«Q«Łŗu/›6ļ¶|’Ä›ļßķļēžćŅuĻ/]öPµ¤¶š9é½ū11G‰h‚ĖߕŠ:#mŚ„s”]»äGhčå_'Dc+.¶%éÖ°Bõģģl***hٲecŽ=ŹgŸ}fńœĮ`ছnāąĮƒĢœ9“Õ«Wóć?rß}÷1wī\¦M›f;jŌ(™?>;vģ`ķŚµÜvŪm¼ōŅK¬X±Ā<.??ŸŅŅŖeü&“‰ÜÜ\žzź):tčĄĻ?’ĢņåĖ:t(Ƽņ ‹-2_÷į‡ņńĒóÄO°}ūvöģŁĆ’%KŠjµ:tˆ¤¤$¢£mƂ­ļY:x8ŠuBW¾Ž '¹Ą®ī}Ūl ĀŻKÓ!ŁĆOņRæ3 l‘‹NSyĮs !„BˆęM–—ZЧOß-ü…߬ $Äooó¹čč|ńåü°dm­7żĪĪN ŲƒĶ›w3ņÖĒéŻ;OO74j5ē²łyÅFJJŹøżvĖÕkē<øļĻśŠē¦¼ĒŃc§iˆÉd"%õ+Vžnn¤PXT÷>4 …‚[nČŅ„ėøįĘń pŽŽŲiµœĖĢaÕź?ČČČęéÉ÷›Æ™ųčŻüöŪvFŻ9‰7_OHHĪĪN$'§³uŪ>Nœˆēī»n¬ńLź2rä ¾łvC‡?Ä =ńövĒŽŽŽĢĢ\Ö®ŪJRRNøŪ<~Š 8:ŚóŃÜļ8}:‘ė®ė„B‰åēŸ7ąīīZc¼jC%7Üųw޾ą`?**ōlŪĆś ; ą–××oooĒ“O¾ÉÖ­{iŪ6 FͱćqüšĆ“ ĘßiūŲÄ{˜4łm†{ˆ7_O` /šäätÖoų“ōō,¦<’0*•ķłėV­ŖöœśāģŽūž®DF¶§oŸ(FŽ2ˆuė¶1tų?÷svv¢  ˆ]»±aćŸtéÜĘ܉óBhµ‚‚üŲ·ļŒ•vķĀŠj5<õä8ŗtmKHˆ?ŸĪūžų3ÉtģŠ OO7L¦Ŗ Į\‹B”ص¬Ś’»ļŗ‘¹/äõ韰s×Aڶi‰‡‡+Łžė[·ī„Mė Ü«Ęu}ūDńż«qtt`ÄĶ××8w]·Ž’•2zŌš ~B4g¶Tŗét ūõ]PPš÷uuWåŗøŌŻœ!&&†S§N±vķZnøįóń‘#G’œœĢ’%K˜9s&yyyńųXśö‰bōØa—šŁē?0’Ėj\ēģģÄ­#ńĘōI÷Hkˆ9³_ä™ggšĖƛųå×M<łÄ½h5–żųÓ¦¦M»X»v«ł…BAŪ¶a¼õędś÷æĪź=¼¼ÜYńÓǼ:ķc6lŲQc.''FŻ1Œ×^}ĶæwT'½ ŠčÖ­f•bttó߃,-W«ņrėŁ{ū†5qŃė«žmtpø°ĪŹ))UU®Ż»wÆu®G,\ø“É„½½=ööö¬X±‚   ĀĀĀŠj«ž žå—_¬Ž§wļŽµŽ…††rīÜ?ÕĢ~~~ģŪ·‚‚‚‰Ā˜˜ …Ķ{¹U³··ü”‰“#ś=vĪZ”˜P«Ŗš(\½QA|ž½$Ż„B!®1Šsé;.Õ^Ąā<&“‰“ōL ŠQŖ”øŗčšńi؁jii™”Õjšņræą ōÓÓ³((,ĀdŖZ ėēēUļ’ŹŁ2 IDATų‚‚"²²rŃė øŗ:[_ŸŒŒlņ 1M8»8ąļSļųźęNNśZL2mŲų'÷Ž›ĀūļMįūo£¬¬œĢĢJĖŹ š÷©µRÆ7<€#®ē«łoc0T’••K~Aī.V«÷rsóÉĪÉĒh4āéįVkÆø†Ŗ¬4’™™Cnn>~žŽø»Õ¬2ÉĻ/";;—ŅŅrœ ōmPE- ‹IMĖD£VÕźØk0T’ž^õ½goo‡»‡k­mUQ”'--“āā\\ńóõŗä_…øZ¼6-Ļ>/¬wĢ©S7a{Ӕ”‚‚‚ųę›oø’žū­_@UåŲ=÷ÜĆūļæĻ‚ xšĮ)--­Õ@aɒ%ÜsĻ=äååįźźŹ7ß|ĆäɓÉĻĻG”PąēēGHHżū÷ēå—_ĘÕÕžļ’ž3fPXXˆ‹‹ ‹-bģŲ±5ęæżöŪ)//g͚5¼ņŹ+¼óĪ;899ŃŗukģģģČÉÉįäɓ<üšĆ̟?ßęēšŽ{'˜:õPē5N>ś:'gāóˆĻs «X P`Āh²!§7{ 9…F%/»„B!®Rév™(ŠŖÄ’’ÅĻåļļææķKeźāēēՠ拋μŸÖÅņõõÄ××ö¤cu󉆰··#8Ųö®V«ōLÜŻ]qwwmPLõQ©”õŽßÕU‡ė%jŠPgg'ŚŌ‘ÄU«Uł]’ūhµŁMét֓8……†ĶéįQõ”Bv¶åż"”Ŗ™‚ŸŸėÖÕŽ‡±:Ѧ×ėk%ŻŖ›(TWŃ=šĄŒ7Žääd’’’HHHąŌ©S|üńĒäęęņ嗶u¬¶dß¾}¼żöۜżōSBCC „oß¾@Uć„ jop!ž~śi:uꄇ‡īīīøøøPPP@~~¾¹’ĪV¶$0’ÕŖL„¹—ę^b>ViTV¤%!ρÄ{NēTż¹A‰VeĀ`Tšū]ŹŅ2§A1 !„Bˆ+“$ŻÄ«s§6Ģ’ņM›Ē«TŹBˆ¦ąäd}éu~~żÕY–Œ?ž©S§2}śtžyęó~hyyy¼šĀ pŪm·Y¼¶S§Nh4ęĪĖܹsQ««^>dff²pįBs²ĪĮĮ„K—ҳgOžyęóÖ„„„8p/Æ ß¦ **ŠAƒ‘€ææ?±±±äę꒕•EBB•••,\øŪoæŻę9my–ĪĪ֗ö«”&‚\Ź r)ēü_3K“$꣑ļĄé\Gār%é&„Bq¤›BьøøZÆt;s¦ØĮó>÷Üsœ9s†7Žxƒ·ß~***ČĢĢD­VóśėÆ3lŲ0‹×zyy1cĘ ¦L™Āwß}GHH%%%¤¤¤ąźźŹ¢E‹ ćį‡ę¹ēžćŻwßÅßß„RI||<¬\¹²ĮqŸoƆ ģŁ³‡“““ZX ·Żv~ųaƒ’nńńõ?K…¶¤[]¼+šv¬ : ž}ś„B!ÄÕG’nB!D3Ņ¢…õ_Ķ'O6<£R©˜7oS§Neū’³w×ŃQm‡—M6n„‚;×"EŠS”_”H”“Eж(…Ņkń—ā!w$qw·Żļ…e7†·Ģs§ōĪܹsgļ†ģ»ļ̜9CTTr¹Z·n£££Jż ąęę¦ü’Ļ?’œ=z(ƒ^r¹WWWŚ·oƲ‹čÆæžŹĒĢ­[·ˆ‰‰!??ŸŠ+Ҷm[å4U€Å‹ćīī®·fĶ»£Ž?ž‚‚ 0³.//øø8µ ŽŹ+  ä±¬ą ž^‰UAAA#±{© ‚ ¼EŅŅäøU‰(±NŪ¶¶;Öźõtč-’””„··7ø»»#“É066&%%…ū÷ļ“““Ć–-[Źœé–œœ‡¹łß%ÖiŁŅ€Ū^|3#AAįŻ#2ŻAį-bb¢…­­611ÅÖ H}=z{˜››sćĘ ®\¹Ā­[·HLLD”P`llŒƒƒmŚ“ĮĢ̬Ģķ–>Ž•ŻÄÆJ‚ ‚ ĀóæI o““ RÓ2ŠÓÕA*5ĀŠŠąMwIįµŖģ¦SbŠ-""‹ *U2~½z;čččŠØQ#5jōĀmłłÅ—Z§Jń«’ ‚ ‚š|že`į?ćüłŲŲ5ÓųĒɹ U;ÓŖĶ0¾œ¹ŒšˆµówīüGYæOßOJ¼Öņ›°±kĘę-ūUŽ'%§2sÖŌØÕ·*ØėÕ ĻšŻØäŅ–ś ū2eźbĀĀ¢^ź}æMā擰±kʰÓßtW^X½}iŌdĄ›ī† ü«¹»ė–ZēŌ©ø×Š“’¶“'cK­S„J鯅 ‚ ‚ h"‚n‚’%-Z4PłSæž'6¶–„…E±öדh9„75žÆ„„…ļ™+ģŽs¼\×ĶŹŹ¦gƏųeķvōōtéׯ4„Ń£śŃÆ_'ōõōŲ°a7ķŚ$88ģeÜŖš‚™Bė¶ĆŽhęĪ[MƒFżžÓĮXįŻÕø±~©uNžT’D(»ü|§O—øŌӕPĻKģ¢ ‚ ‚ <1gBPņnęÅźŸæÖX–››ĒĖ7±xÉoL˜š g|’D"‘ØŌ鯫ūöŸāėÆWҾ]SŒ ĖtŻķŪs÷īzöhĖŖŸf£££­R®P(ųfĪ*V­ŚĢĖ7ńć²ĻuĀĖGXXōķCbb2!!‘äå•·BAxŪy7ÓG"E [?‹BĻü(ŹčņåDRSóJ¬ć儇‘‘ų~RAAx>"čäēIRR*ZŚZ˜ÉLØTÉ-­āюŠŠ#:&žü¼|LM„ø¹9©‹ņņņÉČĢBOW##õąSAœ“ō t“µ‘JČÉÉ%+;©1ŚŚZÄÄ$‰©©”Šķ4¶Q$--ƒHŅÓ3142ĄŅŅ Ē ¶/6(ĻŠÓÓeŹä‘\¼tŸKœ9s…ęĶė«Ō©T©4˜%K×ńò Ģür\™Ś¾vż.ćĘT øH$FźĒŖU›¹};ØLmfgē“‹‰Ō‰BB"‰ŠŽĆĆŻKĖ'‹lēääņšaxįŲąPĮs3ÓbŪ•Ėå=%9)=}=¬¬ĢKėšˆāć“ČĖĶĆÄÄ77'tuK~ėåę呙™¾ž®Ę5ķ )©éhkiab¢ŗ¦SRr*įaŃäääbb*Ź’śśŖ™Eϧ‘‘zŗŗDFō•*9”Ų'(|~ É)iŹr3™‰Ś9rŽ—LfBåŹ•ŠÖ.ž}K||9ٹH„FøŗVTé»\.'5-€œÜĀĖi陬~H4>C‚šocm­»».Å…ĀĆ3¹p!Ę-_cĻž;vģ(=sŗyóŅ3AA”8ļtŠM”P°ģĒü“j3©©é*e2&NÄĒ Q9~š ßĪżYm𣑑C‡ō`ÖĢńčé钐ŒWżŽT¬hĻł³[Õ²ĀņįĆQ3öAO/šĀŠ•²hńÆlžs ?ÆŽŠÆļee]---Žėڊļ—NÅŌTŖ<ĖäÉ 9yź"r¹\„żŖU]Yøąsš4®óBcō¬^=Ūįćs‰ónŖŻ>łx(Ū¶fõź­ Ų…ŹnN„¶™•Uȑš[ĒŽĪŠaōT¹’’üø|Kæ_NJå3Y¾|÷ƒBŲ°ī;:wnARR 3æZĪŽ½'ČÉÉUž'‘HšņŖĪÜo?„^=OåńüüęĪū™?7ļ#%EõYqr²ēĖćčÕ³ŹńMģeéŅuDF©®d` ĻąAļ1ū«‰hž@t?„Vm†Ń¢Evn_¦V~Ęļ*}ś~Bæ~ųiÅ, 0x9s֏\¾ģā©ō}ŗtnĮÜ9ŸbeeĄ‘#~Œųp_͚Ą±cē8{īS&dŹä5öéĄʎ›­rĢŻ£“ņļa>*ĮÄ|˜žå÷DG?YØÜĀBĘģÆ&ņžĄ®*ķ;~Ž/g.ćįĆp•ćzŗŗō裖ļę}†©©”HµõāŚw©üūĮżkØ_æ†Ęž Āæw3żƒn›6=A·ē —+Ų¶-“Ōz͚‰|AA„ē÷Nݶn;Čw ~ĮÓ³2Ć?č…µµ9r911 lŻz9sĘÕ„"]»¶Ąß’>Žž‰½½ Ó§ĮÉɉDBLL;vfĶ/Ū066dŚŌŃŲŁYŃ”ƒ7śpł²? ŌT¹öžż§č×·£Źńń¾ĘĆƕys'ammAdd,Ūwfļ¾ź³błL 0ōž Ļ ¦SGoš5óĀÜĢ”ģœ\nŽ dŪöC¼?čs|Nn*6séyT«ę@`ąCåśĢłęc†œĮ—3—±mĖ÷„¶éīī ĄŃ£gqÆā¬±Ž––‹M)w'}6Ÿ l=ŖlššpA”P0䃩\ŗt‹ķ›Ń°aMģmHJN% ˜mŪŃągųœÜˆ££?,[ĻŖŸ·ŠÜ»]ŗ“ÄŚŚœ¬¬‚‚BŲøi/ć'|Ce7'jÖtąļ]Gł|ņBll,łō“”8;;"‘@dd‡Ÿę·ß’"//Ÿ%‹æŠŲļźÕ+SµŖ+gĻ^%))ss™JyŃóSč ¢oæOÉĖĖgčīø»;ca.#:&žÓ¾—ł{×QĀĀ£9°oµJ;óęÆĘDjĢC{ąģ\õUŸÓ§¹WqV”·l=@jj:cĒ< €=ĻGŸĢ”_æNŌ÷* ^ŽņæĻĘM{˜ōŁwøŗT¤Q£Z@aāˆ‘304ŠēĖćpq©€®ŽÉ)i?~ž;ch Ļ’Å_`ff¢ģĆńē¹s'ˆ†ö@ö8ĖĪĪŽŗŲž ĀæMėÖüö{z‰u¶n åūļ뢯/¦@–ĒŃ£1DDd•XĒŌT‹śõD¦› ‚ ‚šüŽé [т’[7­­j¦@īmš¬ŁsēÆ+ƒn{÷  @Ο›)ƒOE†éNZŻ8yņÓ¦Žąƒ!Ż9xЇż£tĖÉÉåč±³…AŽg‚q5<«š×Īå*ŒĆ{Qæa?ŽńSó9}‰€€`śöķČŖ•_©Ż[Ć5łč“¹lŪ~/¦ŒzžįŃČśq¦TJjZ±uŗtiIė֍8yņśŠ„KĖŪ8°++ś“oē¬ā”ĻE¼źVĒĮĮ{{k+ŲbļPņ”Ļ’xyy²sū2•)š¾¾—¹téżūwfåć ęÓźŌ©Ę瓲uŪ!&>( ¢yø;³}Ū2µé‘5jø3zĢ,|N_RŻ~Y»=]]ģ[­ōüä“!“m;œ­Ū2ū«‰jÓC‹ōī՞łß­įŠa_½’žņø\.ēą!,-ĶhŁ¢kŻAZZk™CīmTŚłhā`>>Ć‡}¹~#€:µ«*Ė,-Ķ9~tŚóƉ§ge<=+pņŌrsó˜5s¼ĘŗYYŁ,ūaŗJæū÷ļLķŚU™0ńvķ>¦ ŗ:ģKNN.‹NVĖ€{`WڶēģŁĀLö‚ ‚ ‚P’w:Ó­E‹dgēąćs‰ČØXrsóHMM'''›7Ėå<É0Ø[§ėŁÅо sē899ąXĮkĢĶeŹĢ"ZZZ ܍ļüĀńcēčü8š±o’I$ }ūØN-…ā§Ēé~Żžūxż±ČČ8lm4L,,dÜ <\Ī)]Ńśk::%?:•Żœ;v+VžĮĖ71õ‹’³ķ¼¼Ŗ³ļĻdgēEtTŃŃńDDĘĶißˬ^³“§.rōŸßŠ] ķYvvVjĒS &'G= ØP¾viO­óW·N5NžŗĄ”©‹ńŖ[]™ēXĮcZ<Ī8ƒĀ^ssó°0/>;Æhmµøø¤bė89ŁSæ~ NŸ¾LJJ:2Yįzvūœ wĻ'פ¤TLMM8sęŠĘ¶Š‚ÆĻ®]Øi|^++s›E¾nłOķ8ZµŖ+.\æĄńćēÉĢŹ&==“¼¼|¢¢ā8wžz™_oAųÆé×ψµæŸY pńb"ĒŽÅŠ®ŻĖŻ@ēæjžü;äåŸ=ąčØCćFāēŽ ‚ ‚šbŽé Ūɓ;n¶ŹŒP˜„ćéYY- ­æĪܹ󀍛öpĘļŖJ™TjD“ĘuųśėØR¹’ņų ÷ßcÉŅߣ¾ó0;· 7/#GĪPæ~ \\ÕśT֝‹²Ē,žŚ‰óu(ŚDĄŲøųŻT‹üļ³įģüėVžō'śwĘŁ¹B©ēčć^ÅYmm·¼¼|Ā©SŁæ’}ūŖ,Ė*åńė=aā7%ÖĖ|`Xøąs&}ö7īaƆŻ*õģmčŽ½53¦ÅĄ@ŸōōLå½G*-Ģ x:R“޽ŚséŅ-Žõ£oߎ( 8E6|25999¤¤śöŸTb{YOŻÓ«TŚī¬O‹ŒŠeŠą)ܹ£ŗ3­®®vvÖŲŁZ©½Gį]Q§¶U«źPņϊłó[DEe±aĆ£Rė č_øóµ ‚ ‚ ¼ˆw6薛—ĒÄē ‘Hųķ×¹4lP ™LŖ(±ÆŠ\åmm-ę|ū ³æšHTT,…YX‘±Ü¹ľż' ʙӛ•Ómm-銔Gž%9%+Wn“’’N SļŹ£(ؑūŌĪ›ÆCbbįōĪ 6„Ö566äėŁ1vÜlfĪś‘?6-ŅXoį¢_‰‹Kdž¼ĻŠÓÓÕXGWW‡ż;sźŌEüļїēŗS\‹e A˧ūR±¢=ķ\NVV6”aŃD<~ݟĪĀÓÕÕUYć,'·ųÉEvFF%/{toƬÆ~d߁Ā@ćµėw ˆaā„A*Ӑ%ššpįšĒøˆĢ̤Äņ7įėÆWrēN3¦„g¶XZš©¬s7xČĪæž{(oֈįR¦N+>+ąäÉXŽ”m[x+ɷߎ&;» Ä:zŗ† SKAA„÷ĪŻŸÄÄ ƒčö^kµņŒŒ,är…ʱ½ūNŸ_@ļ^ķ©XўŠķŚŹr£’šē꿄†FŖd±}0¤ų°gĻq®_拞ž.Ż{Ø.v_^EĮ¢¤äT\4”ēēąŻb0ujWeõĻ_抵žvńRįzhÕ«W.Sż^=Ū±qćnŽõćČQ?uNžŗĄÕ«w˜4iŽŠ’ĄXh””ü©4ꏧ}š™™»³«Æļe¤&ĘŲŪ[“œ’Ę޽'ØįY/Æźxø;ćńxĒU€ÉŸ¤fķīœĮlŽr€øøDF ļ]lF•&U«ŗņįȾ¬łe7ķV+1¼nŽĒģÆWp?(„–Ķ`mmŽ••9É)iDGűwßIvķ>†••y¹īI“Ž›cn.cÖ¬ÉĶĶ£UĖ˜˜JÉĻĖ'88Œ ×еK+ pS ''{žŽu”ZµÜiÖ¬ÖVęčϦ?öK’žO^׎½Ś³xÉļŒ9ƒ QÉÉ}}=ĀĆ£9pЇć'ĪÓ°a-ģKŸ¦Ū„KK ¾XĢŅļ×ńša8_LQß”āż]ٳ÷ƒ‡LaźŌŃԮ偮ž.Y™Ł\½z‡ļŲ€>mŪ4y”±+bkkō›¬üéO:th†‘‘!V–fϵįAµjn\¼t“ vÓ³g;d2)YųūßgéėHII×<¶y¼‰ČO«63~Ü@LL„˜H•NĀɰa&üø"¤¤§¾ō‘€¹ł™łägŸēĢ¹ĶĄN8;‹é‘O[³ę.hžRāi½zįźŖy™AAA(Æw6č&“I™łåx¾žf%½ū|¬V޵kKōõōˆOHVūģÓa\¹āĻ–­Ų²õ€Ś9&&ĘüølśśzjeļģŹw ~ĮĢĢ”6mæp’MM„ü²ę[ʎ›ĶŌiKÕŹ% cF÷§CūfenóāÅ›Ź ,Mōõõųų£!LŸ6¦Üż2y$ļ:JLŒś‡žŖU]Yæī;&O^Äśõ»Xæ~—Ę6Ü«8óÓO_½p– L&å·_ē2fģW|>y”Z¹D"aČąnōéżd ēŠå3łpŌL¦M’^c›ÕŖ¹1sĘ8å’üŃnÜäČQ?ŽŸ8Æń^V.ŸY¦žJ„FtģŠŒ={ ¢O÷«H›6™>m K–žĪ Į“ÕŹ ų~é4lm5ļv[^C‡öąä© |;gßĪYĄß­Ą»™W¹ŪśjÖśS¦.fŹŌÅ*eNNöōī՞æwUŁĮ ĒaķŚķlŻv­Ū0ū«‰Lœ0čīLŽNĘĘ&N0aī¼ĀŻ—ĶÜĢ©5¼&FÖF(ä Ā|Ćø»=€ĢĢŽ’§O·AW÷MfWqēN*S¦Ü(µž®®„Ļ>{±_AAįi’Ųhæ’ēZüĒ……Eqā䢣ć‘ĖåČd&Ō©S•&ėpōŲY’’RŠ_53ķźµ;Üø@\\"99yH„FT«ęF“ĘuŠĶ²9yņŽ’cĒ `Ī·ŸØ•ß¼Čõėtģą­10rĘļ*ĮĮaōėŪCCåńĢĢ,NŗHЃPRRŅ166ÄŚŚ‚&MźPŁĶI­Mbc8üĻ™bĖMM„ŲŚZR§vU•k ćŒßUjÕņ NķŖÅ¶såŹmn?Ž”²iÓŗjż+(séŅ-ī< >>™ģģd2)fTÆīFŻ:Պü¬ė7øy3Īšcmm”±NNN.>§/JBB2FFX[[ŠøqmµŻS”pŖćißĖ…’˜˜‚DRøęšWŻźŌ­[]ćγ·nŻćņbc•ĻWķŚUiŌ°–Jżģģ¶ļ8ŒSE{ZµjØÖN`ąC.\¼‰‘”A‰;·ĘĘ&ą{ę !!‘dddaa!ĆÖ֊6­aa!SÖ ā”ĻŁ–Ä IDATE5Ŗ­²>]y¬¬^Ž:n 0ĮˆŠCņ D Ox÷źPŁ" 'Yö›īŠ ‚ ¼utŽt„WoÓ{ÉĖĖcäˆ>oŗ+o•““ ÖoŲEÕŖ®“o×T„,)1•›ö •‰ Ūsڹóbb˜8aP™ĻÉĶĶcć¦=“iÓXŻ„wZXŠ>G‚-‹-ļļ£ øx7Ógå KʍO,óĖS§b©Qć0³g{ņŃGUŠÖžwŒ’“ó˜=۟Ÿ~ŗ_®l=;;mvn·~©·äl]V_©Ą8ć—Ö¦ ü[yWLfDHtµÅ÷ł‚ ‚PDL/}¬śy3?,Ūš¦»ńÖIIIcĪܟٳ÷ěīŹŅś»™7õ›ī† üė(šū ņ嚃`Õ­3豚Øv¼g#V.·@W·ģĮ³¤¤\&Mŗ†·÷q®]Kzī>æ ¬[÷w÷,_~Æ\·ŠuŲõ— +¾¼ļĄ/WDĄM;fĘĪ»¶oŗ‚ ‚šVA7AAx‹}hɃDĶ»•éŹå¤˜øZß¾FlŚ`‰‘Qł²ÖΟO Aƒ£ ržŪ·SŹŪåWJ.W°kW8õėaäȋÄÅå”ėüźÕõ8°Ļ7·—›Ü’b€¬ō„¶)’vG‚-Ä4kAAxŹ;?½ōĘĶ@žųc/·nŻ#!1KK3ԯɇ#ūąģ\AYwժ͜8u‘ŸśŠß~’ ß3WˆOBOWww†}Ѓ-Ø“ÆP(Ų³÷{÷ąĮƒ023³022¤R%ŗtnA澝ŠÖ.Œ}FFÅņɧóéÕ³ÖÖęü¾īo=Š e‹,\š9„±ś—­Üŗu¤¤Tär9–fŌŖķĮ‡#śąįįĄ‰ēYµzka»‘qŠ·’$tt“Łŗy©²ĮĮaü¾īo®\½MBB2ŚŚZXY™Ó°A-F}Ų{{՝óbcX·~~~W‰ŠŽĄÜĢ”5Ŗ0lX/j×ņ(óųß¼ȦMe’5ælćč±s¬]ó ;vžĆ¾ż'‰ŽŽĒLf‚‹‹#Ɔõ¢YÓŗ„^sŁ9ćw•œœĀn>>•cćU·3¦U©åŹmVÆŁŠ’ķūȱ³µ¢SGoFź‡žž®J݇Ćł}Żß\¾āÆ6–~Ų{›2ĶŁs×Ų²å·ļ‘––¾vöÖ“nՈĆ{ahhĄ“éßō ”U+gac£>mī¼Õ\æĄŅÅ_P©’P8ī7īįęĶ@’’SŃ×ÓĆŚŚoļz|ųa_Ģd&Źó暽œČČ8¾_:•Õk¶rģŲ9’’S±²2ǽŠ3ćĒ ¤jUW._ögĮ¢_ ¦ @®[€ ė¾ĆŲøüėGååå³uŪAŽ9Ć£H²³sŠŃŃĘÅŁ‘޼<ø::ŖSĘ||.±ćÆø{÷©©é8ŲŪŠ¤IF}Ų++seŻY_-'::Žo¾ł˜Ÿ~ڬ|/R«¦;cF÷§fM÷r÷[Ź+1[‡wŠ’91Ą3+üŪhÓʐæwŚšžą8’’äe¾vA‚?’ aĖ–PzōØĄōéÕhŠĄ¢Ģēælyyrvģcžü»ĻlŅXŸ¬‘É^~ 4Łą„·)’vr ”©ø™—}­EAAų/{§7RŲæ’£ĘĢB”Pąįį‚%ŁŁ9DF㉉1ū÷žLµjn|:i>[¶ ²›aįŃxÕ­ŽL&%4,š{÷’Ÿ_ĄŠå3Šæ³ņ2—mŪadd€«kEll,ILH&čA(éé™tī܂õæĻG"‘šąAMš ¤R%BC£ŠÕÕĮÅővm›0ū«‰Ž{D§Ī£ČÉÉ„^=Olm¬(›ČÕ«·ŃŃŃįšĮµxzVfļ¾Ģ™ū3‘‘±Čårķ€Ā Ū9æĀ€ÜŁs×0šäęęQ©’ķČĻ/ ,<šššhLM„Ųæwgāć“h×~$‘Q±T«ęF“““ˆŠŽĆß’>ŚŚZlžc ­Z5,uüšaԘ™Čå ÜŻ±µµ"''‡ˆpĶć?yŹ"6nŚC³¦u¹tŁÆŗÕ‘JˆˆŒåīŻhii±aż:vhVāugĪś‘Žœ” 怚ˆŒ •˜fM½XöĆtnߢuŪaŌ­SŪ·ƒpv®€““=éé™ÜøHVV6:z³qĆBe»ēĪ_gĄĄ’‘““[üXī[­ Œ–äēÕ[™żõ tuupuqÄ”‚-éé™…’””BµjnŲ·©Ōˆ„߯cį¢_Y¼p ƆõTi'33‹jžļaeeĪå‹;H$ģŚ}Œń¾A"gG*8Ś’Ć£GÄÄ$PĮĮ†Ć‡~ÅÖ¶0€×½ĒnŽ ÄĆŻ… ”Ԯ偾¾‚Ćxō(CCü…jÕÜšõ½Ģ’&ŽItt<¹¹y89Ł+ūsāŲzLLŠŸŠ•––[•“iÓX–Ėå ō9§N]D*5¢†gōōõHLLęŃ£ŅÓ3éŲ”7,Dņ8żgåOņķœUččhćY½223S23³xō(‚ųų$ģm8vōwåėŽ­ĒxnŻŗ‡LfBzz&^^ÕŃÓÕåŃ£‚„¢££ĶŽķĖhڤō ® ¼ˆ5Wń •i,s5Ļdv‹‡Åf¹=+čA>#?Œ'  ä ]Ij֔ńĮĪ Téµmøpńb"›6=bėÖPāćĖ—Õö“ŒY¼Č}żW“us$Ų’?nڽ’¶įßlš÷#Ŗ[e¼én‚ Ā[įĶtS(ĢśźG ōų{ē ¼¼Ŗ«”ļŲq˜‰ĻaĮ¢_ٰī;•²Ü¼<ΟŪF‡'Ł·oѽē¾³Š>½; ££ĶŁs×Ų¶żĶ›×gżļóU‚ éé™ >C‡NsĘļ*ͽė)ĖBB"łō“”L™ņ!zŗO2©~łeYlX÷;·PéÓÕ«wčŌe4Ū¶äŪo>”{·6tļÖ€&Ķ’žžÉ„ ;ŌĘį‹/– P(Ų·g ÖR)Ū¼e?“>ūŽ…‹ÖņūÆó€ĀM"£bY³śzõl§Rßļģ5z÷ł˜ß~ßYjŠM”P0sÖ2ōõõųkĒrźÕóT)ß¹ó&|ō-ß-\ĖĘõ TŹā’¹|q'vvOvõ;üĻ>6•U«6—t›;ēSęĪł”ššh¼ź÷”k×V¬\>ScŻk×ļņóŖŁōéŻįÉõć“čŁė#’s’ūŌØQ€/¦.A.—³w÷*5RĖ­ŪņɧóX°h-ė~›_b’bb˜75..Žüż× •ē,?æ€é3¾gĆĘŻüńē>ʍ@ŸŽX“ų7ö8„t;~ā™öVÜś}Żß,^4…ęĶė+Ÿ³÷ŗēźÕŪŸ»ņ8rďS§.Ҿ]S~Yó­J¦\FF ŸĘ?Gü8sę Ķ›×')9•E‹ĆĮކݻVŖdKŽć:/łŸVmföWUīŃÓ³ ›’X‚LödŹŲńēßŗ•Ā”)7˜6ķ&-[ŚŠ¶­ mŚŲRæ¾::/'˜•’’‡O,'NÄrčP÷P{FF.°`@ĶSt_µI- qµ|y›5ĀŪźLpŪÆ?`\AŽļlŠķįĆp""c8 ‹ZĄ  _æNüōó|}/£P(”4Ÿ~ņJ ĄÓ³2żśvā÷uqūNµkypäˆ_N«–Ż#•ńé'Cń=sæg‚nujWåĖćŌśdggMīmh÷ĢN›^^Õ10Š'""¶\cpļž#ōļ¬pōž{,_ń~g®*‡”­­„qGĻfMė2ft,,4h|öŚ‘± čßY-ąŠ·oG~śys±ć’tĄ  SGo<<\øw’Q©×.śõkØܬ¬Ģ6¬'_Ī\FཇԨQ…HŅÆ_'µ€ĄĄ]X¾|gż®•zMŸ‹äęę1qĀ µēLGG›iSG³aćnüü®0nģœ+P·n5Īž½JRR ęęOĘ’žSōīÕ€K—n‘””ĀäĻGØÜ“““˜ō鬜y3gü®ņ¬/gŒU øŒӟE‹#0ša©÷õ¼|Ļ\`ʔզ¦2åó‘ųś^ę”Ļ%š7ÆĻåĖždgē0|x/•€Żć0VÆŁĘißĖjלrĘX•€@Ū6iŃ¢>§O_&%%]­\^–­·mQ“{ŽÕ=ž &å’pkh(aŁ4kŖĻӒČČx¾äö‚'NÄpāD p š4±¢zuS<ł/|Ķ’čźJ3ZŹSdŠEÜAA„·Ć;tK{,)ZŒ^“¢€Rff–JŠMöL IYßĢ€”äT’’·f­īė˧4de©Źtt4æ,))éĢ÷3‡ūŖE“““ŠŅ*ßf“EżünĮ/,]ŗNcĢĢĀgY™9čÉt1¼;vęŸ/ąŸ/ĄŌTн½5ķp¬h‡w3/ŽėŚŖŌ¾”wüŸŗčk¬/)ϼ«2*nŃ’g/•’\tZ°p-?ü°^ć9Ec™™•]bŠ-łńėŅÆ’$“й§ģģ\2³ž|pīŁ£-³æ^Įžż§”A·“§.’žž©Ģr{ŗķ>™‹ĪgŖÓ¦‹¤„g`l¬šŃ¦««£ÜšćYÆbܟVŲ4*ęY13+|N22²Tź—ųl™™š08\嘎Žv±Æ÷“÷ö« . ļ¶]ÖŖõ©ƒžö‹g‚¹ŗźņ×kž9’Ķō鉄G¼ŗ,•ää<’“Ÿ-¹ņhŅXŸ… Ģ©ZµųŸ«‚ ‚ ‚š&¼³A·ÜœÜRėČ养¾éź–ķł¢@S~Aį™œģ\““$ Ś£ÄóŖ=Žł±4cĘ}ÅɓčŠ¾M›ÖE*5ĀÄÄmm-ŖUs£c§Qej§Höć1hڤ®2Ŗ8E;C::ŚqžģVŽ?Ēżū!DFĘKXX§}/³~ż.†éĪŅ%SKlļUŒ’›ōd,ėP½˜ģø":Ś%O;ŹĪ.l«G÷6Ź`&O‚ml,ńö®§2r’SH$• [Īć~¶o×T¹±†Ę>ź¼=S£rrKžą^PPųœčé>'9ez¶čź©žų“H$jS™‹hiIT®%/S`‚÷5Æ?ęhšƒwÅēŪ¹³8;Š“‰K–¦ņŪļi䖾–y+9Ųė0óK}ś•k­;AAAx]ŽŁ [QLffń[še&™˜Ø~Љ‰WŁ‘±HQ¦…EaV–±±!r¹‚/gŒ-wڳbb8yņ‚ŚŽ™E łłåĖZ(Źfjß¾)#†÷.óyFF†ŹMž–žžIŸ¾ŸšĒŸūųö›OŠĶ‚§ĒæųiNOĘæųŻ.ßE÷Ś®]S>Łē„“5rDŸb§&kŅ»W{||.qōØ=z“åČ?gØWĻSåY-zĶūöķH{ k¾Œ 332³4f½‡M¤…ĻIŁŽŪYjĻU^^¾ŚTę"Ź÷¶eéė ByøgUlŁĻ“$/“q-¾łŚŒ?2aŻśtVÆI'-ķßT®XQ‡±c¤ ū@śŹv&AA„—įÅ"A’bEˆČbė? ĆŲŲ##ÕąQ@1‹Ę(łwqqD”P¦yĶ›{÷įīщ_žPj‹¦“V©ā¬±<2*®ÄõÜärõm..…k^…jXŪŖČ Į“ńØÖEŁvó–ChÜt ĘŗR©õė×@”PSl›šōųG['ųaFF?Mše(ŹØ{..ŽĄ“uÅ4Ą£ŖKYn»Df2är9wī½P;-Z4`ɒßÕ²×22²ų~Łzå{µQĆZčėė±aĆ.µĄ›\.ēĒåIKĖĄ»™—ڵę·†““ •cĒOœēä© xyUWŪ8D^ŌÉGęš~Ļ=žµõĆŅR‹ÓeܾåȦÖtļf„žī›jÉd>*eß[NūŲÓÆŸ1Å,{*‚ ‚ owöWW‰DĀ7³?bōŲYtī2''{ģm(Ė $::SS)Sæ­v®––š  V-¬­Ķ‰ŠŠćʍärßĶūL¹VėÖčŁ£-»÷ēä© Ōš¬‚™¹)é™Ü»’ˆ˜˜jÕō oŸŽ„ö×Ęʒ޽9|Ų—śįåU}==’SŅørÅmmmģ쬔 å?­q£Ś\½z‡fރšpwĘÄĘys'QµŖ+ ę’†O£CĒQø»;ćXĮ…BA\\·ü£ĆĢ/Ē+Ū?v Ē£{Ļ TvsĀÖÖs ńqIųß¾Ozz&ćĒ ,uJØŹųwU’°°(¢¢ā011fŚŌ1„ŽĶó211¦zõŹÜŗu:u{įźZ©[6/-w[‰„…ß}ĪŠaSéŲi.Tp°PŽ„ŽŽ63æWj[ö6|1eß-ųÆś}ØQ£ ÖVędēäÉ£GX[[0qā µs{÷lĻžż§Ų½ē8-[6PĖę222dŽÜI|öæ4õ~Ļź•±µµ"/?ŸČČX"•1åó‘jm—W£Fµ8rŌŽGćįī‚™¹)“’7‚ʍk—«öķšŠŖUCŽõóf7*UŖ€••9ńńI¬YYŁŽ{D£FµØS»ŖŚy‰I)DFĘŃŗUCÜ\+ąģ\®][”­­EBB2į1όå4jT¶€S“ĘuhŲ r911ńDFʒ™‘µ={¶cł²/±×MX©’7nR±¢=#‡÷¦J•JjujÖp§u«F( bcˆˆŒ!--ss:z³|Ł—ø»;+ėß x€TjTlpųڵ;ø8W cGo•ćõ¼<111&77”ä4“iß¾)•œнo¹\ĪÕkw©]˃Ķė…Ķ= Ÿ×¼Ü|’ILJA[[‹:µ«2qā`f~9^ewՆ jāååIA~ ‰)$$&“——‡s„ Š•—MWNGŲ²õ)Éi=ņ;™™Ł„…G‰––mŚ4fŁÓ5¾'įE܈1įTˆ¹Ę²ŽÕāØl‘łš{¤ŹČH‚——żś3a‚ ­[ā訃–ŅŅdgæxNKK‚££-[0j¤”Ææ6cę 3ŗv1¢J]“µßŽ€Ūƒ$#nĘHՎwØŖ‡ōH ¼CīĒp14_ķø·S2ÖFÆg÷bAAxŪIb£ż^ĻW×’ŸNšĻ–­¼{ss± ŗ üWtė1ž{ 8ō¦»"¼CV]vä|øśæ%:Z –wŗ‡TOżĆģŪ$)INPP÷ƒņ Ī'9YNJJ 22df.w`*ÓĘŲX‚ŌX‚±±Śø¹éąęŖKåŹ:’ŚµŁŽ[ņĒMõ] —ō0ĘÓīH ¼CÜÉe„Æś¦EÓ¼QŻ*CĆ‚ ‚šīæ ‚ Āk¦P€¬ęiųµlÓßś€€¹¹ čÓ AÉėT ‚ ‚ €‰©Ł IDATĀ»JŻŹaųš^“mŪc SAų÷šśÅhŅÓÄ·ņĀėšb@z®ę‚›8¦¼ęŽ‚ ‚ ‚š*ˆ [9Ō­SŗuŖ½én‚š’iŚÉT^„Ūńš³Ü$š“`AAAų/A7AAxĶ‚5gLW4ĶžWL-ž{’““ÉŹŹĀČČ™ģŻX·6))‰ģģlŒ155}%×ČŹŹ"##¹\Ž……::eūÕ;##ƒōōtd2e:'55•ŒŒ 07×¼I‹ ‚ ƗŲ^KA^³čtĶė U³z³;– oV·nݐH$jd2UŖT”k×®:¤¾įKŻŗu5ž'‘H°““¤K—.œ9sFķ¼›7oŅæ,--177ĒĮĮ333LLLčÕ«WÆ^U©Vģu“µµqrr¢cĒŽ?~¼\÷ŻŖU«ū_Æ^=,X@~ž“€t„J•4Ö×ŅŅĀŚŚšž={ŖõąāŋōčŃsss,,,ppp@&“affʀø{÷®²ī”C‡Šķ׳zöģ©C‡ÅĘĘ™L†ƒƒŃ„KüüüTź'$$ ‘HųüóĻĖõ ‚ ‚š|D¦› ‚ ¼fń™ŗŪKs^sO„·¾¾>“&MR9VPP@tt4G„K—.üöŪoŒ9R„޽½=Ÿ~ś©Ź±üü|ĀĆĆŁ²e ;väÖ­[øŗŗ…·¦M›¢P(:t(uėÖÅÄĄ””n߾͖-[hŚ“)ĒŽĆŪŪ[„ݦM›Ņ¼ysµ¾§¤¤°}ūv:wīĢŁ³g©_æ~™ļ[&“1nÜ8µć?~œéÓ§“˜˜Č¢E‹”ennnŒ=Z„~^^!!!lٲ…Ó§Os÷ī]lmmšóó£mŪ¶0tčPjÖ¬‰T*%99™7n°uėV:„ÆÆ/µk×ĘÕՕ©S§Ŗ“šąAnŻŗÅäɓŃÖÖVÆ^½:r¹œ.]ŗąććC›6m7nÖÖÖäęęĮž={7n·nŻbåŹ•ŹóÓŅŅhŚ“)÷ļßgĄ€x{{cllLdd$»wļfśōé\ŗt‰æžśKyĪƇiŌØ™™™ 4ˆ  “ÉHMM%00-[¶Š²eKöīŻK—.]ŹüZ‚ ‚šņHb£żoŗ‚ ‚š®HÉŃįćC˦4 ”¦mśkī‘š<Ž[ņĒM;µćKzći÷|ßivėÖ ___’““5–'%%Ń“iSbcc ĆČØpšrŻŗuQ(\æ~]ćyūöķ£{÷ī̟?ŸéÓ§н{wŽ=Ź… ØU«–Ś9”””xyyQ¹reΟ?fŗ9991sęLęĢ™£ńZ×®]ĆĖĖ‹ńćdzjÕŖ2Żw«V­ %88Xcy^^õė×'$$D96•*UĀĶĶ'Nh|8üń>>>ŹcO‹„~żśˆD"!!!+++ž÷æ’±téR÷XVīä²Ņ7Kķų4ļGT·kS ‚ ˆé„‚ ‚šZeęi[fa$ÖsŠgnnĪŌ©SILL,6Ų¤I“&M ƒXG„GnNNN 2„‹/SękÕ­[;;;īßæ_ęsJ£««KūöķIII)s_ž½ē¤¤$Ī;Ē Aƒ4Ü<<<čÓ§Ē'3ół¦z8p]]]¦M›¦±\KK‹iÓ¦”P(ŲææņųīŻ»qvvfšąĮĻ+Źl¼xń¢ņŲĮƒiŻŗµĘ€€ £Fāžżū<׿‚ ‚šbDŠMA^#E łåŚõužįiEMė•'11( Ā„„„MķŚµK<ĻÓÓ…BQlZq HKK+×9„Ń×/\1=½l™ IIIĄ“{¾’>r¹¼L÷œ››KXXŲsõ300LLLJ¼ 2®EYv‰Dć95jŌ`Į‚xyī¶˜˜H\\\™īąĮƒåŗAA^±¦› ‚ ¼F%­é „łó¶ (9::…SĖ"!!Ł³gchhČĄ•ǤRi‰ēŽŠ›īŖITTaaa4nÜøĢē”Å„K—ŠÓÓĆĮĮ”Ōŗ111Ģ™3™LFÆ^½€W{ĻOKHH(õśśśčėė+ÆQPP@FFF‰»ĘJ„R•õåŹ{?)))eźæ ‚ /—ŗ ‚ Āk¤]B`-3_$  %300@"‘Øe’łūūcaa”rL”PœœL„J•Ų³g…k fgg+Ū*IQ@'55UåųƇ9vģ˜Ź1¹\NDD+W®¤   Ųi’ÅÉŹŹRk³čŚäčŃ£ 8CCCe™ÆÆÆŚ=ĖårRRRšų?{ēÅÕĘįg„÷¦ "Vģ]P{ļ½ĒŽ{ŒIō‹±kģ»ŲÅö†,ˆAED@Qz/»ß «ėīö”yĪŁs’¹3÷Ž™ܙß}ßßėąĄńćĒå"åēžsaÉČČĄĀĀ¢Ąż åBXrr2R©“@ķ}>ö|ŃM@@@@@ąū ˆnß ½LD؎x‹IÖĘŽ$ż[OIąDzz:R©--ÅG8 ~ųį„żŸ?΁Ų²e ͚5C$Ʌ«ŒŒü«åfgĖ<ßÆŅ °k×.vķŚ„ņsss–/_N»vķ }NŃŃŃ4oŽ\e›¦¦&Ż»wW*Ģ`kkKļŽ½•ö įȑ#ø»»ĖÓq?÷œ ‹žž^c䍓7F^źģĒŽŸONNšéē# šy¢›€€€€€Ą7D¬)ÅD7‹ųt±R[tŹĒæ| ü·Čó*ū0ŃĘʆ… Ŗ<¦T©R,X°€1cĘąāā"?¶ “¼bś“ 2„Q£F)l‰D-Zµ¾dłakk˱cĒ”¶cgg§R˜*S¦ŒŚs9r$ėׯgÜøqTŖTé³Ļ¹°˜˜˜Čæ£üHKK“”««‹¾¾~¾Årrr8tč%K–ÄŃŃń›€€€€€€Ąē!ˆnßkÕ¢ŪĆ7ś“/’&$š!ĻąßŽŽ¾ŠĒ4iŅ„ Œ‹‹ VVV€ĢķSƲ±±”vķŚ…Ÿt!ŠŃŃł¢}6iŅ„ 6L„J•>ūœ ‹••=B*•Ŗ_½zEff&„J•’o³““äåĖ—jūŽŽ¦GŒ=GGGLMM‹ÅDGGē;ŸĻ=ĻC0ųʔ3WŃüFŸ¬”š‚€zöļß@Ɔ }LžļYž˜¹¹9œ8qBžNł!‰¬­­)[¶ģgĪśŪóį9—)SkkkŽ;†TM ᬬ,Ž9Błņåå"ŻĒRæ~}āćć¹t钦}8@ƒ äŪźÕ«Ē„K—ŌŠh€¬Š)€X,¦N:œ={6ß¹```@5>ś\>AtųĘT±V–%Ńąf”1 éZ¬¾Y‚l© Āż—J„ÄÅÅ)|¢££¹sē3fĢ`Ŋ4nÜų£Dmmm233åŪ&OžLhh(]ŗt! @A|{šążśõćęĶ›Œ5źéöį9‹D"&MšÄ­[·čŪ·/ræ3©TŹŻ»w錵+?f̘1Ÿ<īąĮƒ111”oß¾œ_~łåĪāū£źœ§M›ĘėׯYµj{öģĄĢ̌„„$ b±˜É“'–čV¤H¼¼¼0`Ż»wdED"‘<"­J•*ģßæ_. 8;;³eĖ&Nœˆ›› «<šēŁfmmĶĮƒ"šŗuėƲe˘1c†ĒļÜČ_&&& )–’,ŃM@@@@@ `„ōRļ@9óTģMŅ KŠUj{§‡Vn L–DƒC¬hP"5Į1s"""äFųŖŠÕÕżWŠnOŸ>%00Pm{Ń¢EŃM@@@@@@ą_ ŗ |'Ś9İگ„ʶl) D—.Ę/ҧb *÷ų{Ó¦MŚ“ió½§ńĶéÓ§}śōłŽÓųnÕK¾޶‰8X¤Ŗß!7²-["Āć”5‚„€€€€€€€€€Ą?AtųŽō©]Ø“Ń7©bnG}ż |ŃM@@@@@ą;RŹ4 ·’±ī—#‡Öß`F_AtųŽD%ėš4NDł'J„""“u |eųf& š9ü' )lŽāAjj}z·ĆĀĀō›+‘Hšõ Äß?ˆWÆŽ’žž±±!ÖÖ4nT— J³¹|.Æ^½e’“Ō®]™õkę»o\\ī»<ŃÕÕaŲŠīßh†źńōŗHXŲK† ¾^”Ž;}ę?SŁf` ‡>åŹ•¤Fõ hh(ėŁž&*:€Ž½Śbii¦v¬ķŪ’’ŹčŃŹŌwƒ¹z5€˜7q$'„`bb„……)Õ«W žSu45’½ZŗŸ_ ¾~tģŠ;;›ļ=O&K¢AČ[=Ī<µąv“!"@ZpŽ©D‹P­Hņן¤Ą7eŊø»»sąĄJ•*„Š6`Ą#;vŒŁ³gÓ£G¦M›VØóų{óŸŻ–ÆŲĪė×oiÖ“ž7Ż^½zĖC~Įß?Hķ>;5cÕŹhk‹æÉœ>‡ČØ×Ģ™»Ž ćū(ŗÅ¼‰cĪÜu˜™™|wŃķČŃóŒłR©,¢¤WĻ6…ŻŽ9‡Ē”3īW²¤-+–’‚sÅė²mĒüü ēĻæØķcåjw^EæQŻŅŅŅ6üœ9{Mķqvv6¬_;‹:uŖ8Ļ"—.ū³xÉfŖT.§ ŗI$¼Ž{ceeNżz5¾ć  ęĄkN„Z!•Źź$H„²ŌŃĀ ž'źņš-S¾ę4Uņö­„ŠŠl¢¢³IL”œ,%%EJjŖ„ōt)śś˜šŠ00åž·„Kkaoƅ¶øĘu’aŠ/N@@×®]SŻ2339pą™™™¤„„)‰n.\ €2eŹpżśuš4i‚žžĶ›7§téҤ§§ƒ§§'Ū·ogŊL˜0AŽĒżū÷12ś8æĄ€€¬­­©REń÷&11‘ĄĄ@vīÜÉŚµk¹zõ*ęęꤦ¦€ƒƒ%JØ®Ś ČÅŖ—/_R·n]޾}KóęĶqvvF*•Ē… 8xš §OŸfŪ¶mbfönA+''‡‹/R¬X1*V¬Ø0†––ģųÖ­[ŲŚŚāä䤊žžžNhh('NœĄĆƃk×®ÉŲ€€š5kFRR...4oŽ]]]āćć¹yó&cĒŽeėÖ­\øpcccJ”(›› .¤Q£FŒ5Jéœ5j‰„!C†ę+ųšŸŻŗukIrR ¦¦ĘßlĢį#ž‡æM›ŌcčŠī8”·G[[Lō«7<}ĮŖÕī>rŽbÅŠšæ™£æŁ¼¾&ĘF čß}}Żļ:?æ@ʍŸKɒ¶ččh¬:j­ f’>žJ£ÓŅ3yó&Ž+Wü9|ä}ūMåō©Ķ8”·W:¾x±"ģŻw‚ż;R»våBūū최9{ ē5=ŗU«”GWO‡¤Äd¢£ßpōŲžŚt€~¦įē³cć’N ZvvC‡Ķ¤qcGźļD7æ75Š$«OšDŅBEø½D»ƒŠ2§ń“Æ4C!”Y\»šĮ­Ū™„„fńōI6qń’‚T–”(”EŁ2b*TÓ õœt00„ø<\\\šńń”_æ~ņķwļŽ%==:ąååEBB&&&ņö7n`aaAåŹ²ß“¹s碫«K`` ’°•’’‚““³fĶbģŲ±hjj~֜ŻÜÜŲ½{·Ņv©TʦM›>|83fĢ`ķŚµ ķcƌaÜøqöæfĶ¢¢¢šöö¦Q£F m‰„īŻ»³}ūvf̘Aٲe™;w®Ā>)))Ҷm[6lŲ vWWWÜŻŻU¶=šuėÖqłņe7n,ߖ““Ćõė×qttT:fćʍŒ1‚… 2ž|f͚ÅŃ£G™>}:ķŪ·§xńā ĒL›6ČČH:„……E×F@@@@@@ąŸĮæ7-fżo KOĆĘĘź›ŒēēČ Ÿ;ŌÆW÷‹iڤŋÅŚŚ‚jUčŌ±)»Ż— ««ĆŽ}'¾Éœ¾%EŠX°dń4f’>ž»ĶįéÓ 4}=]vļZ‚Łg®Õ«;аa]…OĖĪōķӎõėfń晣IMMgłņm*Ÿ5k,Ó^Ŗ”š£©TŹž'135f—ūbš7k@Ń¢–˜šQ¢„ uėVeīœ “oēFll—/ūņł |]ŹY¤ņ‹K‹š…āV2- )bB†ŗåņ<^—·śļųÄÅIŲµ;…ŃcŽRµz$Ī.ŃL›ĒŽ})d~²ą Ļžesö\«V'Ņ»O å"hŪž5 &ąē—ōć.Į探E‹R¾|y|||¶ūśś¢””Įųńć‘H$ܼySŽ–““ĆĶ›7qvv–§XѰaC•‘d“hтųųx¢¢¢¾Ś¹ˆD"† FÓ¦MqwwW™¾YīßæOńāŕ7„²vźŌ „­~-:wī ĄćĒxžü9~~~Œ1B„ą0|ųpjժž}ūäŪtttŲ²e )))Œ­øøzłņežśė/zöģ)O@@@@@@ąßĮ2ŅmūŽ#„‡GńĖĻ#ŠŌŌ@"‘0ožŖT)Gƒś5ٳ÷8CĀHJLĘĢĢ„ jҵK ÄbŁå:čq†‡Ÿ0 GJ–“Uź’ģ¹ėųųÜ„s§fT©RŽS§ež"ƒwUė·U¤ˆ]:7'āå+2³²Šœbš“#įų o®_æĆ똷dfdall€ƒCi:ulŖ0·Bń8t–n][ ­­Ķī=^„„„”££M‰6“nåJŻŗU•Ęxśō=NóųńsŅÓ3°“4£EóŲŲ¾‚žT*eī¼õ”(^”Aƒ:Ėūݵۋ¶m”-ćqč ŃddfakcM«–.4nüīavé²­dddņÓ“a*Æį¦Ķ‰ŠŠaā„(“ÅÅ%Š§ß$'„²’rŹ–±+ōÜ?…įĆz°råNNœ¼LvvZZŠ‘Žu«Ń­[K8ÅĪĒ8°S}Ę'$‘œœŠ‹s­|ÓakŌØĄ1Ļ D¼|Uع.]¶++sڶiÄN÷cÜ |„–¦&mœȾ»ó|øté&/#_‘•™…‰©1U«”£Cū&*…k?æ@.\ō%44œä”TŒ e^wmŪ4¦rå²ņżRSÓXŗl+–”[×Jż¼Œ|Ķ–-ø8×ĀĶĶI©ąĢŁkųś’“+^>}ś‚9s×`ccÅŠ!Żäū†…½äĉKŽ{L|B†ś-j‰››Mܜä/¬ߊ¢† ØE·JÆønŠēckR³4Ȗˆdy¤ܒ‡Yń“óóϚCN\»–ĪŽ)œ:•FfÖ·S¾²³įęĶ nŽĢ`łŠDŠŁjŅ„‹żśPŖŌņńWWWvģŲAjjŖÜ Ķ×חJ•*ѰaCōōōšõõ•ū=xš€ÄÄD6l(ļCWW—ÄÄDµcL›6¾}ū~“hŖęĶ›sžüy>|ؔ†ZtuuIII!''GeT^ĒŽń÷÷ĒŽŽž ĢV5y‚aŽ÷q’ž}ź×ƟļqŽŽŽ¬_æ^ỬWÆ“&Mbɒ%ģŪ·ž={’žžĪšįƱ²²bõźÕ_ķ<¾’ɧŚĆ‡ĻqżĘm¦’4,Wt“²jµ;U«–gśĻĖHLLĀĘƚŒŒLbbbŁ»ļŪ¶ęŠĮ•čėė‘ššĘŖÕīčźjóćTeߍ?žŲDŠż†ėĄż”¦®Xžs”Ļ!'GBļ¾SšööCWW+ÄZZÄ'$qŠć K–naēöErį*$4œU«Ż‰ŠŽįŲŃ hhj`mmN\\"II)¬Y»›łó&1dpWł§N_eČŠ_ÉŹŹĘŅŅ S#®^ `÷/ź9U/ō\V­vĒѱš\t{ń"šU«Ż¹sē!7|ī „„E‘"ÄĘ&””Ā–­ Ņłó&ÉęņœC‡ĻŅø±£’‡\\|"æĶZEéŅ%˜9CŃ'%##“ƒ¦óģY«WĪ(ŠīK kįčXU^x”R„²Jūü6s4§N]ažĀt豆™™‰ŠžŽa Æ‡††oŽĘē»ß ißĪ ÓĀyóüµéśü¹r'/^D!‰(^¼(™™Y 4 dQ††śšśõ[öļ?ɂ…ٶe‚8:gī:V­vGCCvéčh›ĄŃcXŗl Lę‡A]HKĖ`ÕjwŚ·sS)ŗ½zõ†U«ŻŃŌŌP+ŗ]½Ąś ļ" ĀĆ£XµZ–"T­Ŗƒ\t;uś*C‡Ī 3+ ssŒŒ HIIćĶ›86žµŸN›²qĆl•c|mōÅZ–‰„ié8nEq,؊ :hh@ŽD½ņöšĻāõ(ešöŃc¾ŒĢaƆ$öķO!.īÓ#Ų¾$/#sXµ:‘ÕkqtŌfų0#ڶŃCCćæ#ˆ»ŗŗ²yófüżżåBšÆÆ/5B,S»vm…Hø7nČĖ£mŪ¶üłēŸüöŪotźŌ‰’%KŹ=Õ@QW“hŃor>yŽt/_¾ü$Ń­]»vģßæŸ~ų‘#GRŗti…¹S»vķ/6ß‘H$lٲš4i@tt4¦¦ł{ē„ĒĒĒ+“˜={6žžžL˜0ęĶ›³lŁ2‚ƒƒŁæ?–––_éL¾’ÉōRuÜ»÷˜Śµ*qļī1nł{p’ž'ĮNŅ©cSnŻzĄ–­‡hß®1Śb1ž^ŽJ}¼xEą½Ē8;צHŁ*rdnŌ‘•„įįQ,[¾”ĆfŅ­ĒDFŽšÅŒ™rźŌrr ’āsźŌ¼½żčŲ” Ä÷Ę>®^ŁEPą1Μތ¶¶˜?WīP:īšį³ĢŅŽ•! IDAT›;‘АÓųū$ōńiöķY†¾¾.óęÆ'3+  .S¦.BGGƒ+yäÅõk{{zžż{—s/čńĒ^^•\¹Ąųqż >ÅMß< 9Ćõk{pp(Ŧ͹uū;7ĄKÅ5?}ś*YYŁtÉŻ'©TŹų óšõ dź”čŽ½Õ™sa(Y²‘Q1*Ū­­-˜:e0qq Ģ_°±Ąž“µÅøŗÖęŃ£§,^²™˜˜X•ūźS²¤-¦&…7Ä~ń" CŽYCŲÓsÜ<ȹ |čŽ½AĒxz–»·šā¹7[7Ļ''GĀÄI ČĪ–E<ɚµ»qu©ĶŻŪG¼sTžž>µ SScęĪ[’Q÷yAüņóŸ"(š.εx|ŠĒĮ§8|h•|æ_g¬ĄÜĀ„ ē¶ńčĮ nśąAwn¦nŻŖ9zž;w}±y | Z")޶‰Ģu{¬ĘĻØk›ˆ†HŠH¤:śL$‚Ə u žĆÆ3ā©W?Šõ’ž6‚ŪūH„ąė›É”o©× š;“Éś†xߓ<ń,OX{ūö-”””Ō«WEJłłłÉ÷÷ńńĮĄĄ€š5ß-(żöŪo“lْٳgS«V-,,,000 B… “hтY³f}ÕŌŅ÷É«ųłaäŻųńć‰D*?66ļŠäōķŪ—Ń£G³{÷nœ±±±AGG‡Ņ„KÓøqc&NœČƒ>{žēϟ§yóę Ÿ&MšP¬X1®^½Š»»;¶¶²ģ“4™Č­«›æOm^aŠ„„…ķzzzl޼™˜˜zöģÉüA·nŻčŽżūWwųņü'#ŻŌ”-³jå …Š¦f¦Ę,Y<'/sźōUʎ鋙™ nnŽœ>sŠ'į 銞^ŽH„R:wj&ߖ’’†®®k×ķaŃ›H$č!ÖŅ"55Ģ¬,6žµŸjUŲå¾X.ÖåGÄĖhJ–“eų°čźź(“ÕØ^Õ+šōé „ćZ“pQHg‰Dø¹9ѹS3Üwyņüy$åŹ–Ä×/˜˜Xƌ‹ā*rćʎ Ų™5k•Ķ“?–ŖUĖ3ż§a ŪŹ–±ć·’”Oß©œ>}•Z5+įęꈙ™ ĒO\bŽÜ‰ ©€^^ވD"…k0Į9G·n-™:ešgĻõc04”­j'&&«ŻgčnģŽćÅN÷cōķŪžÕ+äŪēo3ĒŠķŽ/ŁĀā%[066ÄĘƊbŊ`SŌ;;[j×Ŗ„«kJ•‹µŲ±}ŋQŲ~äČ9Œ Y“`Šü|““4iŪ¶={“fĒĪ£<|ų„ŖUĖs’~ˆ¬źŚą®J÷pĶ4°.ų˜˜T`d_aŃÕÕAWW‡ĢL™X¬%ÖRć’xń"ŠaC»S„J9…6[kƌźĶņŒLāćŌ§c |kJ™¦1ŗNŻ+isś‰9ēŸ™+E½åHDÜ}e@D¢ō3ņķ/""›yó9r4…O“ל.„…e3õĒ8ž\™ÄŌ)ĘōźiĄæ9¼téŅ/^\Įęėė‹T*UŻ–,YĀÓ§O)]ŗ4>>>ŌÆ_ń{–¦¦¦œS¦LaŊōė×kkįÅE@=‰IÉræŚ‚(YŅ–ķ[Ø“6łR„…½$š^0µkW”ŲGx</īŻ{̜¹ė04Ō’*¢Ū¹ó7X»v7õœŖĖE·Ć‡ĻrųČ9ęĶՑ‹nkÖīF"‘¢Ū'rłŠ?‹žŲÄĄä¢[č“pęĢ]ĒOӆŹE·šēQĢ™»Žqcū}sŃķĀ_V®Ś‰«kB‰nÉɩ̙»MMÆ&ŗ„§g0gī:ڵk\hŃķéÓŻ”nŖJžŻ—.ū³xÉfźÖ©*ˆn ŗ½G~-ĶLyž½Ū廿¹¹‰Bq€Ē‰—ųaČÆ\æŗGmń¶Ļ墷/?M_ŹĘ ³)Ö±éW柎«kŒŒ ØP”ō÷žŹæ†jÕŠæ#Né+žwFOO‡ż;"ś›yמ;ƒ3’dėęł“m+&| „_ś÷Š«æŚ:b222‘J„ˆD"ōõõhŻŹ•ƒgĀĪΆć'.!‘H”¼Åņ"…š7SJ²”=ēµxņäOž¾(PtŪ»ļć'ĢĆŅŅ ē5±²2GOO]]mŠ±äŠ”³ÜņgÆH^„–XĶ5łRB–ŗžµ“4ŃŌŌ =żŻKd=§ź³µĘÓĖ›ßž7‘H„×qo455čōŽž”‘Cƞm¹rÅ_e’±±2•Óg®all€„„Ł-²Ÿ  ĶĶŌ ¹y̚5޳ē®3wŽzŚ“i¤Ņ-++›”Ō4t“ÅJ‘ZzŌŖU‰µk~Ć?ą>WÆŸ˜ÆœiiéH$Ä*Ņ5ó051ĀĮ”4EŠČīUmm1'¼6°’Ą)īŽ}ÄĖ—Æxņœ‹Ž~ddČRŒ\]ė°ļņÆö ؎ÅL£Q#G®]æÅˈW„æˆRˆ“µ±ęĉ ŠĄß‘jŪ&QŪ6‰ēńŗµÄļ„1Ÿ›Ń»²Ģą=3~ŸϦĶIØČlūD$Ąk ˆĢżÄé@Zī'Štr?ʀ`›ū±T/ä| ŁŁš×¦$NžJ㯠Ō®żļŠzĖŃ®_掟ŸŸRDX½zõä‘nŚŚŚ89½+4£««Ė7ŠÓÓS+ŗI„RRRRŠÓūś §NĀŌŌ‡O:>44”ššš|«z&''ÕsÉórKJ’ż®×ØQ‘Hą čŪWud‚D"įĀ… T©Rmķ׿)šż016¤aĆŗjŪ;“oB‡Ž£ńń½‹æNNÕ¾įģާ_ßöōėŪž{Oć_Eóf ņ}—ž'bllȒÅÓ¾÷4¾‚čöźĢéAViŃŌŌH!e®sēęō8ƒ—×EFīƒ——7††ś“lį¬p¬ CĀŌF™å‘ēū‘“­>%15kwcbbČeļXZš)µ{÷.°ü0Ė‹ņ¢ę>$ęMÜgõ/ļ'Fu?™YYdgē(xihhŠ©S3Ö¬ŻMą½Ē”+kĒ… ¾8;×VįĶĢĢB*•2ožśǟMM :vhBĒM¶Ē'$±{—'³fÆażś½Ģž}üS@ąkSŅ4Ńu"čWUKīs‘Ͱo Pķ„õq¼ī½÷IÉ÷Ba TĶżT”#² KDD6ķ;¾bŅDc¦L6ž×T9­\¹2ģŲ±ƒøø8yJiõė×ēŲ±cčééQ»vm…Ź˜“lŁOOO8@×®]¢‹ÓÓÓYøp!III4jōõVÆY²d ŽŽŽŒ7NĮsīchŻŗ53gĪd޼yL:w‘ى„żū÷sżśuzōčń„¦®D^DZž‡›µµ5ķŪ·gēĪøøø0pą@…kœœœĢ”)Sxśō)Ė—/’jóPE:Ušń½Kč“pœœŖ±gļqž?dā„ģŪ’7īšęm<ėמ&øté&.śšņåk“’151ĀŽ¾ķŚ5¦ZÕw‚ł‹7‘‘‘%/¦včšYīŻ“żwėV®ņ,©TŹ™³×¹|ł&ŃŃoHNIÅŌĈ2eJбc3ŹŪ+Ķ;((OƋ<{A\|"††śXZ˜ŃÄ͉V­\•,K^æ~Ėį#ēøLbB2šXZ˜R·nU:ulŖrśC²³s8yź2×®Ż&2ź59Ł9R­š]»4/Tz :._¾É„ĖžōķÓŽŅ„óō½té&—ÆųcWĀF!õ4%%C‡ĻāļDll<šZZXYšįäXöķŻ Ģ¦‰OHbÕ*w*8”R*&·vķnŽĘ&Pŗt śöQ̲ٲՃČȦ’4Līxēī#Īž½Fpp ‰I˜QŖT1Z·jH­Z• ¼WÆŻāāE_ŗumAŊeäŪ_F¾fĖ:th"OÅY€Ä𵻩T© ]»“ąįĆ'ō8C‹ęĪ_LPNNNełŠķŌ­S… Jć¾Ė“GžR¾¼=’›9½“;vŸ;¼ĪÕ ĢĶLØU«:6ÅŲXõs̉—8}ęoŽÄ”£«MłröōčŽJé~X¼d3FF†Œ!³ŠŽ~Ć_›ąęęDŁ2vøļņ$č~R©»6øøŌVŅ@ö7±wß ‚‚BHNNÅŌĢēZ“nåŖ“Æ:,ÜHvv޼øÜÓņ¢†mŪ6¢VMÅļ: ą>=N…X[L¹²vōģŁFĮļ>gĻ"8zģĮĮĻHHHĀŠPŸāŋғiżožü=D·÷ˆˆˆ&;;GɀT*•ö«ĭʍ177Įóø7=z“Ę×ļ.]ŗ“P*lP³fEĪæĮƒ”ł®P…††P¼xŃēEźT n€‚’ܧw®įjś ‹ų¬žóxöLu?Ļž½P:æ.›³fķn¼¼.R­šiiété¬čć²dń4…9UüńĒf‡„±léty¤Ū—"2ź5·n= ˜­5vv…óU5²{ögŪöĆōėŪA©½xq™ēŚū)Īźˆ~õ35©»…AKK›¢V¼~żVķ>^^ŽlŪq„ɓҠ~MV®ŚÉN÷cxX©tŽÅ‹”wƶ>rŽ'Od÷¹¾¾."‘ˆ”TÕĀnhč󏞷*Ćź«×n1iņ~ły„R± S#†ėάŁkä’4Œud 5ž^©LšGbāēT$.Wõ’ŸĪką|īGØ4ź/ĢdgĆā%‰Ü½›ÅŖUꘙžóÓME"ĪĪĪxzz"‰"Ł@閑‘Į„K—ųńĒ•Ž_ŗt)·oߦG˜™™Q¬X1¬¬¬ˆ‹‹ćéÓ§$&&āźźŹŲ±c?{®žžž”)SFa[JJ o޼!''777ęĪ«tÜģŁ³Y±b…Ś~gΜɠAƒ˜4igΜaƌ,X°;;;¬­­IMM%,,Œ˜˜J—.ĶĀ… ?ū\Ōann¼ó§Ųøq#-Z“`šąĮLž<™råŹabbBll,< ==.]ŗ|‘k, š1˜äf'ä1ńō¼Čł >Üøq‡>wYvDzF&99†˜‰——7 {&Ņ××#ęM,YYŁü¹r'³~ĖØ‘2ßČ ÷+xŸ:u…S\ X1kźŌ©Bff}śżČåĖ7033AWW›˜˜X²³sX¾b;K—ü¤`§²e«æüŗ‰D‚®®ffĘdff›ĄöGhÕŹ•­›ē˳$®^»Eæž?’ššŽ¶¶K 3’SRILLĘ}—'«WļĀóŲ:ĢĶÕķŹČȤ[ ųś¢­-– loŽÄįqč K–nįą?åÓ‹Æ_ «V»ćźR;_ŃķŹś ˜†••9Gæ‹č }N×n扊’Y¹X[[““ĆŪ·ńlßq„eĖ·qōȬ¬ĢÕömldĄ®Żž(ˆn©©iĢæ‰DŠ••™‚č–Ćœ¹ė°³³eĘÆ#XµŚ¹ód EŠX ££MbB2ĒgÕjw¬¬Ģæ˜č–ššĘŖÕīT«źĄÓg/HNNE,֒æOÄÄÄŅ„Ūx‚ƒŸ2›±X‹×ÆcٽNj?oęĒJŹ—³Wčwę’žÄ×7CC}lm¬‰KĄĖ˛իw±eĖyŌ¬Y“įĆeEiŗuSöų“··'((ˆĆ‡sżśu¢££III”B… ø¹¹Ńøqcڶm+ąčŃ£ŗŗG†¼Ļ°aĆT.tččč`ee…‹‹ 7Vų7׏ŹJ>÷ü°³“­’ąķķĶɓ'¹xń"įįįÄÅÅaooOŻŗuqrr¢[·n Ń~„ÅšįĆ|ļ>dčŠ”Ō©SGm»ƒƒƇ—P(R¤=z”K—.ńņåKRSS)W®­Zµ¢U«VłŽ  ÆÆĻšįƕDUĻ!o1ŪŚźŻ3 T*åÉÓlŽ4—†®uåžĻ‡ŸÅĖĖW×:¬X6]^€K*•rūöC† ż•9s×ұclm¬¹å)Ry†ĄŠå?Ė Qéē¾'ģt?ĘåĖ7iÕŹ•?N•ŪåH$nųÜeČŠ_łł—å“mÓC^½zĖĢ’­ÄĀĀ”ķ[Č£å@–%1õĒ?8uź G§KēęH$&M^@vvė×Ķ¢};7¹UMBB2‹—lfć_ūY²t‹‚(ń!žĘ×7ńćś3eņ ł{ŽD"aļ¾Lœ“€åĖ·±cū¢/ņ½ØāęĶ{ōųV–f9“Z”ŚäÉ yõź-K—üD÷n-åÉÉ©,]¶•5kw³`įF–-®¶ 4؉——·‚_ų»ČĪĪ”U+WNŗBDD“<ąć^ŠcRRŅpq®Č<¾-ŚDĶټyžBįŒGžŅ»Ļ–-ŪĘša=ņ}ļtrŖŽX¬…O®š›‡æff&”/_EŸQŸ»8ēĪåkx/˜¦Mź1sĘ(Ź•³—ßS³fÆ!8ų?NĀØ‘½äē˜‘‘ɶ퇙łæ•üüĖr%ķ  <ü©šžtåjMgņ”EÜ š@»€š“'/3qĀ&M(æ?ļ3pąt6oń`äˆ^ņ ‡iÓ“’’ŹŚ5æŃµKsłļīƇOčŻgj”ÆCP 'R¤ģŲq„¹óÖ³fÕLšēFÕé 7œ>s=»—ŅÄĶ ‘HDvv;ŻņÓō„üoÖ*.]ÜČ<ļ§ż“„"Öüµq5jT” čįįQŒó;ūöŸ¤];7•|’žłO¦_S#~±‚3gÆQ±Bitt“ įü õ5B¹BX—NĶŁ¶ķ0«WļĀĀĀ”†®ŹnåĖŁ3eņ`žX¼‰ŗŽŻØ]» ööÅŠŅŌäĶ›8ž< ēɓčė벓yŻŚ7aĆĘ}“h9„ęĶ133&))…{÷sŃŪkksbbāČɑ|’–„„ƒ謆ūpiŲ–-œ122 :ś —/ß$=ćK¤.É¢ŚwMĖĪ”,iKffWÆŻāŽ½ĒT¬X†¶*ŖJvī܌ElāEx4M›ÕWY0āk2eŹ"•¦ū±q‰ņCēZŒÓē£śmڤžüP$!žĄ\yŃĀ)ōģ5™ŸYƊ?·Sʾ8E‹Z"Ö›ĄƒOˆŒzŽŽ6óU¤Ø~,' ąÄ‰Ktļ9‰† ėPĮ”b±˜Ä¤d|nÜ!ųqmŪ6¢L™HܦuC-ś‹©?žĮįĆg)UŖ8¦¤¦¦ó8$ŒK—nbeeNėVļ*ēōźÕ–„˶āÖd-ZøP“ˆ%Æ_æåģ¹ėjƵU!‰ØX±4wƒiŃr•*•EKK“łó'įąPŠZ5+qšąi>|BÕ*ååBkDD4§N_EKKSe„”€Ąß©~Ÿ“ĄŚµ‰Ÿpt6pš¢æģÄ>šTą²øZ@7 ŌGõšäI6­Ū¾fļn+ŖTłötņ#66V!RźC444°··—’ūöķiß^µ®®.6lČw<}}}śöķ«ÖsģCfĻ~g[!’Q…””!ÖÖÖ¬__°…Ć‡ŲŁŁ8÷ŃŠŠ mŪ¶“mŪö£ĒÓŃŃ)p¼uėņÆ Yŗti•}hiiѵkWŗvU¶T( &&&}-ņ#((„ć'¼‹µØ[·ŠBŪ’ÅӔ¬=Ī»Ą §*>"‘ˆZµ*1yņL™ŗˆóē}č߯ƒüy[/×.G__OÉ÷÷ģ¹ėhhh°|ét…ÅL œŌdĢč>Ģ™»Ž+Wüi×®1gśē[ IDATĪ^#++› ćū+n Ė’˜3{<.ųpéŅMŗtnNHČsž?¤gÖJ&&†ü>kGŽžēō™kłŠnAA²× ćū+hhhЧw;.\šÅŲųó=HÕx/˜>ż¦bnfĀįC«2D¢£ßąć{—V­\éßOńŁŌŠPŸ™3Fqųš9ĪæQą8.εšņņĘĒ÷®Ü’Śß?‘HĈį=9uź 7żƒä¢ŪwäĒ?~FfVżūwTŖT[”BiʎķĒÉSWˆĻMT‡5jTäÖķ‡dfeÉ'’€ūŌ©]™ņåķŁ¼ÅC”ĶĒ÷.FF _ [k¶n™Æ­–••ĶńćŽTŖT–©S~PX@ŅŃŃfÄšžxzysżś-„ ˜A;+,øŗŌfŠĄĪ¬^³ ’ ½ÄJńĖĻ#¶U«źĄŠ”Żł}ö<|‚ ‘Qƹ}ē!­[7¤[× ūW¬X†©SĖķ” "ļo<ļ:ØśĻcš]hŚäż…––&? źĀ¾}'¹}ē!™™Yhk‹9}ś*™L:˜Śµ++ōaggü¹iŃrē/ÜD·††ś*o g—Z“hī̆ū¹vķYYŁhk‹qssāןG،@srŖ†ƒC)^Eæ”{·–j LņU*—eėöĆÜŗu?æ@@vƒ±¶ wƶŒÓG)Ž““ Ö¬ŁETŌkŠ/Šv®!¾ŗü]]LMŒŠzoå{Öoc±¶6Ē}—'›6Ė"Ć ōhެćĒõ§K×q ž*łajb¤ņ扗ȔĆg9zģR©S#śōnnj_GŖ¼ž]»“`Ɔ}tļŚ²PćHŽ=š1•4õõu151āĶ›8Ž|ąi'ÖcjbD«V®“mӈ®]Z(„)æS}čģÜŁøOVfāŠUŌÆWƒ‹ē·³įÆ}\¹ā@ŁŁ2mm1EŠXŅ·O;FŽč…ƒCį^VMLŒ02TżPQ¶Œ§Ombٲm\¹€··Ÿl,±ŪbÖLš8P!œÜĘĘ OĻõ,[¶•k×osåj€¼­H ŗtiĪS+ˆ¤S§ FWW‡={säČ9²²²133”[×ōīÕ6÷{wĻźé厧*ī‹Õ«’Ē/æ.'0š‘Ü‹`Īģńh‹ÅģŻ»ŒåĖ·qźōUö8…D"Kæ34Ō§AżŒŃK0ųĒ‘™%eĀ„8<}Š×ŚuĄČæć·G · /Pų(ŌׯsčÜõ;·[QÆ^į~Ÿ¾䥁jŪ 8räČ7œ‘z~’żwĀĀĀŌ¶»¹¹ńĖ/æ|» ššŃ•ås²³yó&ŽĒ!Ļ‘J„Lß_)ŪA•gRdd ŚŚbłāé‡TŹM|śōE”ēłkksµŁyÕ<ŸåŚŌ„„„P¹r9•ūŪ—,ĘĢ£(•ė‘œ—nY©RY•ūkjjP¾\I®ßø£ ą|HŽ;ɝ»pu©­Ōž1~ĘKšć0zōœ„”>‡¾wŃŠŠ ~īżb` »N÷ī=VČ1dpW•^ĪŖpq®ÅĶ›÷¼L:UHJJ!8ų;4”‚C)Ö¬ŻMPPµjV"11™Biڤ~¾ē÷„ØU»’’=TĢ›XRSÓqr¬¦6ķ±\Y;üü‰ŠŠQŠ j×Ŗ¬r’5*š2āUsŖWOu•Öb¹™Ay^ōy}½Ÿšū>u?³æuÕܟ%KŚrėö“±“4#,\v?;9Ŗ>Ÿ<’·ˆß{ń÷ėņŸŻÜwž”¶­wƶōī%[MMJJĮČ(’U‘HĕKī…·U+WZåšffe‘‘žY`’źŠŃŃfĘÆ#™ńėH²³sHIISŠųš0¾æüæ[·nHėÖ ?ģFĪčQ½=Ŗ·Ā6MM ʍķĒø±żČŹŹ&++ }żw^ƒOj®"‘Hķ¾ŚœGff¦ĀŖ°·/Vč±Õ±{ג>f钟Xŗä§Osļī„īcggĆż{žjŪĖ”)Į ߅ ''§¢©©Q(ĆXUųŽŲ—o{¹²%Y·ö7@¶ā“––žošCy{6¬’łB$§¤¢ÆÆ«ö”GSSƒ ćū3a|rr$¤¤¤*ō’į÷kæĻ’UŒOHR[ V@ąŸ@v6 ö–S§T{"Ŗ' Ų‚¬0Āß)2_¹ Š(Ü"IB‚”½bػNJõ’ĀŪšįĆ •Vłw௿žśŽSPAJJ¹‹ŠbiiFćʎtļ֊®]”­ntt•Ż““S1Čē™Ū4·Wrrj”瘜œšļs|^Æó._ĪžĖŽīģŪ’§O_š""’ ^½~Kvv"‘ˆ§aź” 5ÆĀbhd€[cGvģ<Š×qo• É©¹ĘņKķĖKMTå«ł>"‘ē59z쉉ÉÄÅ%ņęMœ<ĶÆvķŹ¬]+3Ļ {Ill½z¶‘Æ””Į”ƒ+9čq†[·īó2ņ5aa/¹r5@ž]ŌØ^Ļcė ¬¦Z·nU“µÅųśŽeĢč>ų”””A166¤D üżƒ6“»ÜūĶå‰nŖHI‘}z¹Ł`ŖØU«2µjUFOOńž«¹?óD§ģģģ‚'PČ¢Y¹}}hKōį˜ß‹¼ūŁŲÄP­öѾ›ŚˆŪ ‚čhhˆ7¶sCž¾>%JeÜŲ~jCaT3w^{ö~LJi°YĮ‚*OŸ”@įŗ$Æķc‚t“Åņ—lÕ}ŹŚŒró<’’)”ęūĉKźÓ°a]yÄ^~c¤„„#‰ \˜¶³³ł?{ēŠŌõĘį' SöAQAEq‚ZµukėjėÖźæZŪŖu“Õŗ­Vk[īQjuŌÖ=ź·ˆāP½GÉ’CH4&`ÕZ½Ļ—Ö{NĪ=÷ä$Üüīūž^ʍżDćXaawīÜēÓ”“łł—5|śæž/ģ0(u”9³Ē’’šĪōK(WΌOi¦gŖDĖ^wdąĄ®’ųœžģÜu˜s篑^½P_™rąƒT&ćźÕ›DFF«ūkĢĒ܌~}»hłĖ%&¦0÷§5¬[拝»kˆuŗ033„¾mĀĀĀQ(\øA͚nźõ Ø_›óÅÅBĆ®bgkżR¢ Eõ’½÷™{U¤¦Ż‹‹>S•£ē3”o.Æ Õ:Ī3Ž žY‘æ’2ewŲ‹ÅLšų=z<Ÿ?˜@Ł©V­2“&~¦7\@@@@@›+³X\–¢ w€oųo n*ņ€EĄj”•OK'9¹ˆŽ}SHI‘æĢ‰ üēØčāD~~:ÅóYÅ'`og­³]W”•KE'RR3ÉtGņ<*ödS„ßU­¢ō3‹{ØŪć*;;—AƒæcapˆzĪ ,6 ‡±±¶,1BÆ_’ÆéŌå3­ćFF¼¼ŖÓ¦MEErī?xØwŒēE"³|é4‚ż?a›6ļÕhW5HLJŃ;ĘŌé‹éńį( (l§Š »Ź… XX˜«½õźū ‰øp!‚а«IhÜč‰÷Öŗu»hŠØ'×®ŻÖ×ÉɁ¾ÅBÜŻ»1„Ī (ȟ“ōLnތęŅ„č÷¾]²t3=>„.¤§āAL¼Īž·n)…Ķg=’ åķe%P]Üæ’ü{ø“HJCPiILŌ½Ÿóņņéńį(¦ĻxqQ¼Æ#‚č& šąlhS§•å‰å5`&Æ_±„Ź!`6J®t¢£e|:4…"Ćt:·‚FüP(¬^³]«­ØHĪŚµ;“ŖŠZ›ėĒ?JŌ³”łł„„hūK„2ÖoŲ  No *.b°rÕ6¤2mėƒ?öC”Pą_Ļ €Śµk`aaĪĪ‡HMĶŠźśĢenތ֚ó³ˆ%.]ŗNT”ī"į×nąą`Wā8Ļ‹‰‰1ėÖĪĘ×§&cĘĪaē®Ćź¶ZµŖįčhĒo[÷kn„ಇ‡JMée CE'BĆ®rńbõźz©}·ģķmpwwå„넆^ĮĻĻS#²ŃŹŚ‚±’Ą)c_-öŌW8ćYTQt!›ö’–žIżśOŽ'՞X¹jR©ģ_M-e%O?_Oöļ?©³˜HNNæ®żK—®k‰h6ģÖņBĢĶĶcėÖż˜Ó°Į‹+nąįQ•ņåķŁ½ēk [2Y!ĖW”ģß­ U”ØJx’'Ø •,]¶Y]ČīižŚw‚'Ī#ß댐^* šš“’"gŲg)b¢ä°C#Āž{\¾¾J÷h‚\.ēóį½5Ś|ųóĻćäääѽ»fÖWėVMØPĮŸ~^Ɖ“ē©^­ NNöäēĖŃc”ŲŲXŖ+£–F@}ĢĢL ŁōGńæŸDŗłųx`ffŹĘ=Ąæėē¦bĀųOéÓo-Zö§U«Ęø»UB,“’’ĪńæĻŸÄŲ1ƒ“ÄĻŌ“ š5ļCóę ØPĮ¬¬8EÜĆĒ|>¼÷ M/‹Å|=v0ć¾™K‹–żčŲ”¶¤¤¤NJjŁÓKUՁ§ĻXĀŁŠ+8ŲŪRæ~mu±É²Š°”/mŪ²}ĒA.^ŗAP ?¶¶ÖH¹w/ŽćŸĆŹŹ‚Įƒŗ•yģ’‚č& š#—+ųüĖTāć Š”¬Pśf?5„(`0C„·ēfŠØ‘)MæM A,ckcõ\ų,,ō›ńŪŁŁš×ŽåĢłqŸ8ĻÕpet—X,Ę£Fƌė_hżūųx0÷Ēq,_žG†RP %;;—¾}:S©¢ž¹œŸ~ZĆÉS¹PģŃ%‘ˆ©Yӝ‰»2lčĒć­\>ąÅ!üžū!žŲ{Œ¢"e4Œ½½ ķŪ7ćŪÆ’§N+;fĪĪŽlŲ°›cĒĪ©#äll,iŻŖ1#Gō׈t311ĀÖĘ “'ĀHŪ6lÜš#Ė–’ʙ3—ÉĢT¦ŲŠD"jÖtćĖ/śņÕØ­±Źh’éāfÅĒž6±·¶²D®ŠŒōqt“cė–yōühc枋½½ śŃÆoŹ—·gŊß8r4T5eaaާ§;sf1Xčx§y< @£§ŅG7ŖĆĮ§°µ±¢y³śm66–üµw9sZĆɓ W·•/oOēN-żÕ@\\Ź4cŽiŃ€ŠŠ«TŖč„‡GÕ'mĘĘ4iR—Ė—nąęVIūt»­fO \ĘÅEŪž.Ž”*䦫"é³ˆÅŹĻ–¾J”­Z5fēŽ`‚‡pöĢeöķ;(ÅßjÕ\9¢ƒ>‹Tļū–Ķæ¼‘Ż{ŽØ½kTÆĀŌɟ3ō™żomm©](‘ˆµ®Is”ūłi”oĄ€037ełŠßŁ“¹\Ž©© ž¬^=“^½F—XUųYźÖ©ÅœŁcX¹r‡A*•‘_ „×Ē17/ŽŪzŠEØ €ØRƒE"«WĻdéŅ-ü¾ó›·üIa”ņ~ÖĮĮ–6młfÜuź›Š(1įō›~W. šŸ%xqÓgś¤2XĄ›/ø=M `Pś ¶‹‹„ćG±³ūēī£Ų®]Mõ§÷-Øķ,<Óxółó†”ą“ŚiŽßŻĒŪ±,Å^^ ‹ČĶĶ+sį€ŒŒl¬¬Źéōß’É ÉĻ/(S1†ŒŒl,-Ė©S K#;;Sc½• A*•‘›—’ŚV·/(¢P( ’^& …‚ŒĢlŹ•3ūGėż_E*“Q(+,“€•››‡‰‰‰^‘źE£P(ČÉÉ{.‘^ŁX[[Ø«’S²²r077{ekņ: xŗ <…T*#=#KÆģė„\.'=#«Ä N/žģģ\Ņ3²tz¼hīß/dĪŚ¾5ŗ¹,ęķÜīsŅ?“ńńE|?óß­ä% š:bd$y®J66ś‹•IpSgØąJ’©*™˜涂€©©Éæ.ø2jÉÖĘź­Ü@mWĮ ”‘_ÆR\2¤roY±±±|a‚(S«ß&Į ŃM@@ƒuėwQÓ³GކžŪS)•ų„djz¶cü„y’öTŽ*z÷KMĻv!%’œœFmļ( ._¾AĀćd¬,-pwwÅĶ­dĮ@ąĶgŻś>2¤Zé”^„#‰ø{÷n‰}āāāhŃ¢E‰}^o P’˜Ei·8óęgŅ·ffĻ•V”œ¢*   g į³!  ā­ŻŅ3²ųā‹<¤ķÉdaaĪø±ƒžY/õ±~¾ĮĢŌ„–-±rÕ6ŠŠä˜››ń ćöüq”ļ&Īēńć­ńš7oĄ‚łØTŃI«ķYŠŠäLœ4Ÿuėw©KéŖ016fšąīL™ü¹ZˆX¹jĮ‹CŲ’×Jüż½µĘ›ńżRöüq”Ū·öckcÅåĖ7čńį(¾ų¼ĒއqżŗęÆ ^8‰-؏µm7„–ļ4ĀĘƊßwB”xņōŅÄؘqć3rD?õ1¹\ĪŒļ—²rÕ6¤RMo!±XL‡Ķ™’ĖxµX·vŻN~™·–)“?gį¢j±bÅņé|:t²ĘėĒ}3Wż’+–OW—Źžcļ1&|7Ļąõæxń:ƆOåĮƒG}kzøi\»!ģŻ{œqßĢ%%Eۘ»nZ¬X>]- „_»Åū|Ī7_įāÅė>rV£æ‹KyV,›N£F~źcŁ ūlŠ–Ēœ„e9ƌT¦¹Ž¼ͰįÓøqCūG· ³M׎UKKĻdäØYģßR«æ™™)Ɔ~Äųo?UkĪśa9æļžØƒś˜T&cüų_4ŹS«HÄtļŽ–Ÿē~©© ‡į‹ßkōyÆĶ'€R¬x €yó×±aćNž½OOw@)2ū#;wF.׌r116¦’÷™6õKŒ‹KĒ/^ĀŖÕŪłuõ,&MYH\\‚Ękš7oĄŖ•3^kS_—‡T K—鎓Ō$X_¦±«U«Ę™3g8yRūs ššZ¦ń^Ob€?÷Kģ•”TÄʐœēŽv«aŸ‹­™Œō|!Õ\@@…‡}.6fBf‚€€€€€€Š·Rt›1c ¦gĻvōśø#VVŹ ‰‰'xqS§Ó¤I]źÕõRæęÖķū܍Šįƞķ šĮŽĪP 8C‡MĮŃюI?Ć£FU¬m,yō(‰£Gϲ}ĒAłŽż­,u^«×lgõš¼Ūŗ }zw¦Bd……ÄÄijlł–.Ū‚—Wu QįyX²t3µk×`é’)ø»¹’”œĘÕ«‘, aą'ć9ŗ•ņåķÕż ĆĘƊéÓ¾¤n/¤R)wī> xń&fĪZ†G*t蠌ŒXŗl ‹—lĀĖ«:ƒ?éŽ[Պń81…æbļŽćX”3gщsš6}1žžŽŒü²/•\ šį§¹_pųšö8Ű”Q£FU@)h\ŗtƒO‡NÖZ’ųų$Ž eūöėŸ‘‘MŸ~ćČĪĪåėqChŃ<±XLLlū|––å˜?o<ŽŽ5‰DdeåpęĢ%ęĶ_ĒŲÆē²}ė|×Ķ›æŽŚŽ5X²x •]ÉŹĪįŠ”3¬]·“Į’›Č„ ;ŌQgcĘĪįČŃP:wjIß>±w°%!!™æ’>ĒōK ž«T*£OæÆyųš1Ÿ źNP ?ÖÖ(påźM–-ßĀē_LĒ£FU||<9r&ūœ¢Ķ{tėö޶äH‰M`õźķĢ_°ž*U*Ņ·Ogs łß$z÷źČ»ļ6ÅŅ¢±±ń,]¾…}ūNšĖ¼µ|7a˜F’ļ&ͧiÓz¬^õ=NåHKĖą÷‡ŲµūƇOēš”5O=‘S§/Ń£{Z¾ÓˆJ®ČŹŹ%źī–,ŪĀČQ³ØRҦMźšÓOkŲ°qžžŽ ЧņöIHLLeĆĘ=lŻŗG[¦NłBcĻĶżi599yLņ…Aė;~Āæļ<ÄŠO?R·ÉårV­˜N³fźc͚TŸfĶū²aćµč¶a欭-ٽk±V”·=ŪÓ²õvī:ĢģĘ`ań$%ö½w›²ażtĀžż”Q ‰‰©ģ?pŠ÷ŽmŖ1(yż»wkCnn>żõ·zż÷üq”ŌŌ &OĪŸ÷Q÷­_æ6Ś7§q“xų(Ń u<~üR¦Mż‚޽:i“śq‡3gÆh½ĪŽŽ†];ƒÕ_ļ¶nBVvŪ·ąę­hü|=INNcļŸĒ šaÕŹź½ZĒĻ“¶m)(²aćƒęzōX±±ń Ų•Ł?ŒÖhkŃ¢ŽŽÕéÓwŪwĄĒǃ¤¤TīįcRRŅ‘Ieų¼Œé½±ØÖŻÄŲH§mĄ›IaaŁ9¹˜™šhŁÖ¼9¼•¢Ū¦¹”+g®%$ˆ%ŹęädĶč++ ŗwo£Õ’jų-ÜÜ*i >*Z4`ß¾ܼuÆTŃ-77KĖrH$Ś7ķ5ŖWį|Ų6Ź•3ÓńʲŃę½@ ĮMEūöĶłnā|­“SggG-± ”éÕ«Uęzqŗ¢T&ćŽ½8Z¶l¤ó“D"¦UĖFܼĶķ;÷5DĶ>ŠėßUWĆo–øžĶ›Õ篿žVÆ’Ķ›Ń“iØÕ×ŌŌ„wßkŹŗu» :÷{ļ6åŠĮ5øėńߒIČĢĢF*“ixµµk×LCpSŃ0Ą—ķŪó ?_OnŽŗ‡\.§m› {µs§–‹nW®DжMĪö&ėRµjEņņ ed§B” UĖF:Ļ]”‚¾¾5‰ˆøƒ\.×xļŗu}W«æ Õ«W!&&^«ķƒ÷[ė|ļ|8w.œ˜˜GųśÖTū«uėśžĪkhŠĄss3nF*ßćŲŲRS3xæK+-Į ĄÄĘ6m9v,ŒÜܼē¾Į‰ŽŽE*“ńN‹†:=嬭-iŠĄ—C‡Ļ«1—®:®ÅÜÜ Ά^ŃZ[7Ÿæöåch”ŪĖ1ģĻĪĪĘŲؘįƇk‰n#FŒ 22R-ø={–ˆˆ>LJJ •*UbšąĮōčŃ___rrršóó£mŪ¶±sēNĪž=Ė™3gŲ°a}śōaÖ¬Yźń;tč@›6m?~ü ø’óĄm f‰½–-ĖznŃ  ¢eƒź Ń=o “©[Æ+&ĘĘÄÅ7č5YY9ōė’ gĪ^”÷‰×®v* $99 æ.ōčі%Įoz4ŗ€Š+W"éŠi(Ć?ėep†Ą·RtóóõäĪŻ¬]»“¤ä4ņó ČŹĪAZ #ģÜÕā^š•—ģķmtŠii™ŲŚZ±~ĆnēŠˆø@vvn©ó ōgž‚õ¼’Įē4iRWWg*VtµR*Wv¦jՊe»P=TŌć/WŽŃPzŽ=‹³žō''b/)£r²sQ(Ųč)®Źu„7×Ó8ŲŪ–>q¤„ebccųś«¼×ģtöw®`xį‹ņåķ±±±āč±0¢¢bHKĖD&“‘““GjZ(=Ąrͽ¤Zēg1*öūR8HMUĪUµfZs-C‘ŽÄĔā9ė>·„e9·mS’;[õ„ÓV’NG[ ¤äääiUx:5łiŒ$:+Š:źY“gÖCå÷wéņ RRu§Ō™š“£|Ɵ\³īłü8{¬Ž6CÉŹRžĻ¦„§ĮŹżšš”!ŗ9é[+cŠŠä(„po[·–ž·¢€kĻ}ŽĄĄ@¾łFwźņ‰'8{ö,›7ofłņåT®\™ŲŲX¼½½ńņņR§¦Ž=šøø8š6mJaį“Ļöśõė¹té:uā·ß~”žžõźÕćĪ;ź~»wļ¦oß¾¢[÷īŻ¹~ż:—.]zīėÓd'Pršöķ;2._‘RÆ®É :§€€€Ą±HŒ­Ęz lébÕźķœ9{™ @zöl‡żsŽ× ”ĒShÖ¼;·ŌkK²zĶęĢYɲ„SiÕŖń+žį«å䩋 ü£GbŲŠJĮ3g/3pąxFģĻšį½’ķéĄ[)ŗĶłqæĢ[[\UÓSS¬¬,02’ąįįFTT¬Įceff‘––ĮŲq?–Ų///æŌ±F5üüvķ>BhŲU6‰DLÓ¦ž,˜7^« dYy:­óiLMM016&+3Ū ž k ¤H„2µ°ejŖ’‡‹*šH¦C|y23³IM5|ż3‹ÆM_Ä ¾j¬ŗˆ{ų˜nŻæäžż‡H$b¬,-(WĪc#lńōt׊‰ ‹\ŹČ(y®Ve˜k~¾2‚MåEXŁ9y˜šźsVEė=żc(sd–”żUė±(xc‰żĢ‹×KuĶvvÖešOYÉ)łĢĢōļ{ÕZ=»ļEā竚(šf’œ\ı愒­P IĻO½zõpssÓŁ–™™ÉٳgٱcĮĮĮtė֍ JA,33“?’ü___öķŪ§õpłņeŅŅŅšō|RśĀ… ‚ĄŠ+8xš \øpsss:vģČ÷ßk4łg\F™Š[­Ä^۶墛€€€Ź‡ŗ·oķ/ÓkTEŗ-šdPń8‡\.'=#‹Ü\ż÷ł¤gd!+4$’žæM”¬ōŒ,õļ€7Õ5ę½Į×ų¦ń։nw£b˜7uüżō#-Į -Õė'88Ś’—[ ×hō޽8NžŗH£†~xzŗėG.—³xÉ&ŖW«L‡-055”zõŹź9öīՉ›·īvUķó¤ś¢y6Ź@Å£‡ŗ <Š×}<55…B”õe Ææź5ŖŌ[[+D"‘:šLééJ”čétÄ‚£ƒyyłÆæ*ź)5%;[ķØĒ‰ÉŸūĀ…\+U`Čą:ŪU_²Ļ‹}ń\õ£ŗĮ1UŠejJxh·Ėd…øUkææ7ģ^Ŗ^›’×ōō,ut䫹é}©ļżŽ¾ć "‘²ˆ†śšKųL5‹Ķ[ž$ōĢ–ēŗ!°-~Ÿ²²JŲ÷Ŗ}/ˆnś1,µō8ĻŚ¼,6oŽLHHĪĪĪXZZR§N“T…BĮéÓ§Łŗu«Ī×?Łö,r¹œU«VńÕW_1vģXŗwļαcLj‹SŽL&%%­īŸž^öJ­JĪY€žšŌT9GŽęÓ®­`^- šśpżś]z~4Š‘#śiTø~‡÷Ś|( XĶü~”ŗķžż‡¼×ęŽļҊ•+f°uė>&NZ e!Ź‚ZK‚'kŲqtł`8U«VāųŃu%Īļóϧ«ōt쬜£ŹÓmĮ‚õ¬[æ‹éÓFšćÜU꬘?’X†½½/'O]dō˜ŁfŚŌ/8|ä,ćĘżØ³pž»»+‹MŅ(ŸÄgƧ©ż ŸĘÜ܌oĘ ÖHń”Je|óķOlłķ/ŠŠ4½wŒ$|Ų³=sf)13L_|1ƒ+WoŖ’½nŻ.µł§’ūļg(0=ŹŲq?÷š±Önn•^8‘† ż :ē¶mūłnā|ß>¬X>Ż ½ń¶cȀWó«ł5@õ [_Čé³i„QĒĻ“£ĒĀHHHÖ鱵巿˜7Ö’X¢č&‹ ^¼‰jÕ\Օ@Ÿ„ØØHćĆ[„ŠR]¾~Kėƒ«7ŹźÄ‰ äääi)óū‹=Čj=3Ļää4ΟæFƒ¾ĒUŠ``}@™†ZµjE.]ŗ”s|…BĮ©S‘HÄTswÕ97]{{é ”õ«ćÉŃ#”ÄĒ'i==ķõW³8z,TKt•Źd;fš¼ōĶ ”ūėņ•›:Ū „V­jˆD"Ž ÕØ“ŖBõ~BæZ9z–ʍėhµßˆŒB&+¤zµ*xyUG$qņäFģÆÕ?-=“šk·ššØjšž)uŠ£ŪŽ?§³°GZz&_Ž˜Aƒ_ŗwkC•*±³µę䩋ZÅ,@¹UO‚+=óĒĀČ؈‚) …B§—ćÓxԨЉ±1§N_ŅŁ??æ€sēĀ©TŃIØF% —Ē‹æ¦?ZR‰0üs’Oٳg¹¹¹tķŚkkk9r䈺=!!‡²mŪ6­×öė×cł_ż•iӦѹsg:uźÄØQO~8.\ø… –šjC)ĪŚÅžęšaAtx½hŲŠcc­ß'.DŹ¢f/^×hSõ *¾?æuė#FĶ¢zµŹL›ö%īn®‘˜˜ĀŽß±ē£Lš¼eK§–y~£F %55æžĪw™żĆhŒŒŒ(÷LĮ°ÉSŅ,Ø>mŪįģģHUHHH¦_’ÆQ(`äˆ~4jTScŅŅ3‰ˆøĆŅe[8hŸFżśµqq)OƏ;ŅØ”™™ŁLŸ±’zŽōī­UžŻ?·\.ēļæĻóĒŽc|2Ø;ŽŽŹßBĻž®›ĶؑżINIēĪ,_ńķŚńī»Mš*ŽHŒ‰‰gĄ ńI3zO®ńźÕ›¬X±•~¾%ōģ(OĖČÆfįčhGšŒ‘xŸ#++‡ćĒϱ(x#¾›Ēśµ³Ė|-o B ¢·Ft«S× ‘HÄüėpt“Ć«V5$1‰‰©ģŪ‚å+”Oģs LI8 +ūœ¢[÷/łüó>xyUĆ¢œ9™™Ł„ gé²-”/oOófõK«Q#?öļ?ɘ±shŪ6'',,ĢIJJeļŽć\ŗtƒÖ­«CB•_źbfĻYIQ‘œF”’¾qć.?’ņ«ŽōŅÄÄzõĆšį½qw«DTŹ©“™ūóĢĢLuVTņé$Ęū)^^Õ135įFds箦ØHNŸŽOžöōśø#?Ģ^AG2p@WŖV©ˆ‘‘„‡ٽē—ÆDҹSĖ2Eŗ©Beē/X¼HŽ““66VTÆ^™Aŗ²’Iŗõų’/>ļ[źśwéҊß/aę¬eŃ,Ø>ĘĘF<ˆyÄź5;tV×ŌGŻz^lŪ¶ŸoĒ’Bß>±µµ"7/Ÿ;·°dŁfuøwn^žs=Ķ(_Žž¶mƒŲæ’$#FΤWƎ8•wąqb2G†±n½į¾Nļ¾Ū„JX¼dEEr7®ƒ““…²BnDF±défu…^ggGZµlđ£”|6|ķŪ7£¢‹²ĀBlĻ­[÷ ēw²|Ł4žĶ›7 E‹õfĖÖ}“oߜ¢"9›·ü‰««3;w,RGō©čѽ š|DȦ?˜ųݰRģ?‹*0ēĉó,_ńuźŌŅyR~ž;‘Ÿłö~—VŲŁY3ćū„üõ× ßšŗ8z,ŒĀĀ"&ŒŖ5VP ?—/ßąźÕdņ6 ©"‘/&×ļ?€gM7¾łzsZM’š^ŒŒ$LŸ6‚©SƒIJJ5h¼V­3ū‡ŃĢśa_žA«ŻµR–/›¦6R/‰g%=-“ ÷°a£v™ķ:~žüōTUϚn̚9ŠÉS1yŹ“h‘HDĻžķ(*,bĒļµĘŠ’ŽÓŗ~;[k.Ø1菉© #FĪŌ8.‘ˆłjŌŗ~š®śŲēŸ÷&&ę[~ū‹/ŸyņŠŗUc~ž¹äJrĻŅ®]3|}krįBż~ ĄĮ=˜5ó+Z¶lĜŁc˜9k¹AėokcÅÆk~ą³įS™2u‘VßQ#ū3Įzƒę5aüPĀĆoi„/«š¬éĘŠO?dé²-$%„–ś$Aó~ž–““ ¶üö[~ūK}ÜÄĘÓGņŻÄłcjj†õ?2tŲ‚‡¼8D«}ņ¤į4 z"ϟ7O‡NfĒļµö‘±±Ɔ~¤õGše"‰X÷ė >+·²b„fJ›D"ęCzŅÆoõ±o¾BbR*Ū·ąōķ°šfAõ5R2T Ž›³”WX¶ü7–-WV_Ü»g©ŽPģ™3æ"--“żūOjyBŠÅbśöéĢčŃĖzÉo§O"ųœy!ē2d:tŠŁVPP įѶyóföģŁƒX,櫯4€üųćtėÖØØ(Ī;G||5ōÓé³×¤q] lö2e”{wݦڵkĘĮC§‰ø~Ē Ń  G¶ZĒĢĢLiѼæmŻG|B²Ę5蒁–UźžhŻ€ė7 ÷Ͼy³xĢÖś÷ܬ–q‡>lÆNålŪFū½e¶KŻ:µ(*NįOH"33›ŽZh n \ƒĄ¦õŲ¾ć ā“^JŃõŗÆĻ³“n՘ß/Õś\é¢s§–4hąKu=<# )ÉÆīaš˜#”–ĻņĘ1ś« Ō°Š«$&„"‘H°·³¦A_ķš©ķéS•/šTāxŸ źNƏ;rér¤ŅQ*ĆŚŚ×JØ[×Ė ’PFķŁ½„ččX"#£IIUnbKĖrŌ­SK§ēŌ'ƒŗó~—Ö\»v›Gń‰I$Ōó÷Ę£FUnß¹OƏ;`ńLJ[͚nĢža ēĻ_#66ž©ŒŠ.åiÜøŽĪō7ss3B6ĪåÖķūDFF‘™™5 ųQ”‚ƒF_ccęż2žoæł”«į7I(6ī_–n IDATtt°Å×·&•+»hō’ų£4mR·Ä4EKĖrÜæš+W"‰K 33[#vŠĄn|üQƒ×?(П ē¶sī\8±q ˆD"\+U Q£:äääčOķŚ:ŒĻž”RE'Nß@ųµŪÜŗM~”råĢ©ZÅ’Ś$'§ŃŗUcŠĖ¦{{Õ`ūÖłø¹éN­mŻŖ1Ū·ĪW§Ą‚ŅĒlĻ®%JCŲČ(ņņ (ļhGƆ~ź ©NN:Ē{N įZÄmnݼ§,&aj‚££õü½µ„Į Ų½k1wī>ąĘ(22²02’ąää@}o­›šQ#ūÓ»WG¬¬ukųsęŒÕHė~§EC¶oÆ× UõϣƓ½Q¹² ž±Œ»Q1DFF‘––‰‰‰1¶ŌńóŌZ SS‚Nä»ńC¹r%’¤ä4Äb1övÖŌšØJM7ēlZĖwråJ$ “)(Ŗ z‡żˆ÷»“¢rå'U„ķl­Ł¼égīßHDÄRÓ2H$8:Śį_ĻK#-ą“OŗÓ®m^„‰†ńłg½Ō-Ž| ‹²ŠųĒēY±bE‰ķ²güW:Ċ+J„œ9£)śEEEįććCļŽ½qwwĒŁŁ™ĢĢL&NœČ¦M›ČŹŹRQR%äü|嵯]»ö9®Ø,\Z—Ųćōé>śPš^x} ōēē_~%4ģ*×!))•ńÉ īŌ÷ƍH$āāÅ5ņćńćīŻ‹Óˆā ŖĻܟ֩«÷ڶ ¢jՊøVŖ€KE'*»:ė“gyŃ<]B…J³ŃćÓk_ģå›üŒĄea”ż­ŗ×·“Ō¾-‹i¼D"¦ŽŸ'×®ŻfÕźķ¤¤¤#•ŹČČČ¢ @ŹébÆ8¹BÓ«ĖĪÖZēļ=Õ±Ā"Ć«†>{ĻØĀÄT)⾤ ¤õ@ŖłØ|¹KC$į\AŪrIc¬“L ĮÉŽA’ž°ÕøąP¼§RŠ3‹ !;'‘H¤WTUķ¹”嘉‰)Åó¶ÓŁąąÕOĘ/ö¤Ó•£ž·ƒr¬Ō”ō—"ŗ•ś¹²W]cébY… ŲŲXräH(QŃ1dddSP %?怤ä4Nœø üV1Œ#¼KegkM»vĶt¶=ėyeˆŃ ¹¹MėõžńÜŖU«\&Sw[µ‰äÓŌōpÓ+*H$b7®£ÓßKž5ŻJ­b¤¢Bڼ§;|łiÜÜ*iT҇D"¦~żŚŌÆ_[g{Y×ßŌŌD§/˜‰‰ Ķ›70h Pža©ćē©ö{š 4DIĖĒvq)ÆóĘG$įć恏¶ųtdš”óõóõÄĻWõĻgńØQUCųŅG­ZÕJ¬pōlJƒ³³£NDīėńž«Q½Šś ®!č[Ū’°±±¤E ķ÷«¤Ļ•”ū¹“łūśÖ4xž’}āā ‰‰)ķ&ś`X¶> C‡-Ókd2Ƈė7€~üų1óęĶ+qŒeĖtūĄĢ™3:tčĄéÓ§9|ųp™ęVv®Sŗč–/ˆnÆ |055Q§€Ŗ<Üźū{cooCµj®œæØ|(£ņsSł-ƒ2Bjž¼ń,]¶…5æīŠmÜŻ]™=k4-[6z—£&»ø*Ø> •/\ŃK™ō1fģuʑ„e9ĢĶĶ(Wάøj ęōbɋ‹–¬ń¢ŃW…SULUä 4ĢĢL5ŖŠ>„„r¬ĢŠ©ČĪVžOWĘź<"‘ØL‚fvv.ĘFFz…Ųrå”{NõQ 𱤼J²27W>„”½¤čŅģģ\$±Ž ŸgƱ$¢£céÖ}„2°ĒH‚„E9,­,HÄ8;;āįQ•ØØ˜:’7©‘E:ˆ ’õ*šŸÅĢĢ”ŖU+ź /×GÕŖ•prŅżÄE@@@@ąŸsż†!7^Śéś’uņóó±¶¶ę×_-Uø{1D ¬üŖ’Qcdä[ü/ ššcjjBƒĪ_ˆ ØHĪł ˜S§Ž²HVżś>œ8”ōĻ Uś¹©*~ŖčŻ«½{u¢ØHĪćÄdābxų(‘Ū·ļ³jõ6ž7t2Ļļ(1BēE#)>ņó t +yyJĮC%Ō¼ BCƲaćš7oĄ‚ł“"‘Ά^įą”ÓÆl>ƒŒ ŻB˜“@ÆkJ#?æ©T¦ó=•J•céųžFT¼? ¤:÷€ŖąYYö‡D,FVXˆ\.×)¼åå)#ļUcŖÄ³ÜL»Ź\I„žŁņ’f# %+½ožQķ”)S^ń3x ¢Žw£ Q( ŒŽĘ/•Ą@N¾Ddd/^§vķjA A}¶nŻG\\”aWquu¦jÕ'ßs;w&!!™Ļ†}ŒD"¦¢‹]žˆI‰„ē®āFä]µoŲ«ĄÖN=”™•£3 #C™ĪX–āk’” Ń#¾č£3õ/-5ć•ĶåU“Ÿ¤óø*½W•–X …‚„„dB*RŹ0–}±Mff6ŚżUé®V:RŠõakgB” 3+[é—éš{N•›šŖ?³aćÉĻ/ üŹnuDœ>S9ļĢ2Ļ»,Ø>WYY9:ÓŗÓĖš¹ŗxń:5=ŖŅ»—ī‚ iioīēįE")RĈD7‰»w Żā^ś<Ž–Ųš“£ !įÕ¦2 ”FPqŗč©Ó—ø|%RĆnEõ’GŽ„­å¶’I¦N &Y÷UQqz^Q‘\gūĖĀĒ»'O^ŠŁžwqō^ ,N^*3’¼|Ż‘JgCŸÆŹėĖDĶ”›§ßÖØøO^ }žÜwBēń”¼J°Ń믿µŽI„2Ž ĆÖĘ ēŅ-_j×Vīzö‡*ŗóY_pÕµ>ķ#­Ā§vi{Ny\µēTöAGŽ„źģŸššAll<Õܕ¶PUŖTÄŹŹ‚³”Wt¦oŹd…œ9{K-_ō²PŅ5ÖöVŚ•ŗn~®ōEłeeåp-ā¶Ac¼ķ(„‰ä¢d…HńoĻE@@@@@ą­äīŻŅŅK@Ā«˜Ź[@|©=īFÉpq*˜ ¼>Ōó÷¢\93Ö­ßI^^¾†čęåU s–­Ų‚\.×ݚ4®ĖĪ]‡ųÉŅJ°³·!=-“ĖW"Y¹jÖ֖Ō-NW}U¼’Į»Ģ™»šļ&Īēńć¼½«ćää@bb 7nD±`įzĢĢLyæK«W6§ŗu½˜9k‰U‘Ėå$&¦²k÷aÖ­ß@^®!ŏ^ öö6˜™™rāÄyVÆŁ·wu$b±†'y„ŠŹĀ]‹‡`ld„³³#VÖÅżõ7cĒżČ¼‹““=©)ģųż »÷„nZx{WöŌz™õƒ²"n£†~ŲŚY›Ą’„›‰gč§éõ|{šĪZ2ė‡åL™ŗˆ””t||­[7& Ą‡ "4x}zwbŽ/ćÕ}ʍĢā%!¬ß°[c|oļ¬\1CXöö6ōśø#3g-G.׌žģŠ”ßM0¬ “³³#«V~ĻČQ³˜=g„V{… ,žŒk±Ø„¢ZµŹōčіķŪšł—3e1·żūVR½ze‚ƒ'ńĶ·?3}Ę­1]]Y“p"vvOŅ2—/›ĘŠaSŲ“y/›6ļÕč/‘ˆłōŅ»WGõ±‰ß}Fbb*{’<®Ž*S!‰čŽ­ “'é/PeU«Vä£ŪóŪÖ}|1ā{@•wčąÜŻ]Yŗd ć¾žĖŒļ—j_c„ ,XšĪ”Żg™2ésnތfé²-,]¦i9åė[“A»²zĶ’’Ņ^J%Ö7…œTŃćǧ?)ŠŽu/J•ćÉJŠ8¾UÓĄÖÖ[[[īßæ_b?kkk‰'//ļÕLīQ ˜Zboæ±aōW†U*xUDEÅņša"‘ˆfĶ4Śnß¹OB|b‰D+ŅMEJJ:WÆŽ$įq2……E˜ššP³¦¾>5µ*ž:} s3Sˆŗ’ˆˆøCjj:AAõ5"xTójŲŠ33SÆ•Źd\¾ɃÉ/R®œ9īn•šóóŌ0‚W(œ};uŹbi$'§z•Ō“ Œpp°„aC?lm¬8yņöö¶ź±ĪŸæ†\® Q#?­qJ›ó³ėzö NNŌґʙ‘‘ĶÕ«‘ø¹¹źōK‹‹KąFdIIiˆÅ"z}ÜQ£].—s5ü±±ń¤§gQÓƍʍė0ćū„, ŽČ©“!TŖXŠ°«$&¦ ‹©Q½ õźy•Õ±ó0¢¢bøyć/’¹r%’¤ä4ĢĶĶØ[·5ŖkÖn¼Ć£‡ š”\9ŻÅ¤2WÆÜ䎽8õžØZŅ:uk•]uėö}īEĒ’˜”ŠSy{ڵk¦n+(réņ bbā)(baaNµj•u~TܾsŸ7¢ČĢĢĘŌŌ;;kźÖ©…““ī4ч¹~‹Ä¤T$ ¶Ō­S ggG~™™Ł\¹‰««3ÕŖUÖ{=śęGbb åķhß¾¹Ę5^¾Ƀ˜GźktwwÅĻ×Sļ5źBµoīܾOžSćŌ­S‹„ĒÉܽó_?Oƒ+¼¾ˆD¢”¢’³wŽaQ\]~w)Ņ;REQQQTDĮн`4ŲQc/I,)j$_L4=1QcƉhģ5ö‚ˆ…¢X0V,€t¤³tvæ?–]]wŠX÷yņDęŽ¹÷ĢĢ˜9sĪļ¤%ŸīHtąe# šŗQ\,£VķŖōŚ"€ēSŻSOOf͚q÷ī]²²~¹Ÿ5kXYU^½zŹ”),Y²???>ü\l|¶8 *ķńŽTS>ŸS=Įh’2:ŻM7}uŗ ȑ‰d=Åb™NģĖ6Dąõę­30M«Ą«@Õ¬^³ĮÓHJN{٦<7īŽ½Ļą€ilŲų× ™ļÓĻ2jōĒ/d.×—üüźhŖ>æ2kkkΟ?O·nŻžj’ .šć?rļŽ½glŁó¢źs™/tn^,-ĶØ]Ūń™hrŁŪŁ(5ĢäˆDŗ±āĀrY,r•fJ(..afą<Ö®Ū”µOXų%fĪćĀÅk/вēĒĻ ē³Łæ<÷yNŽ"4ōEÅŖ•‚.^ŗĪĢĄyœ »ųÜmxZę|¾ˆ?­{!s:tŠ™óøwO=*ęöķxBCĻQš/v}ÖäåzNćń?-«VocfąłänŻŅ\ĮŹĀĀ“JĒÆQ£XYY)SXš6mŹ Aƒž¹ńjT}.óó_l?—Å{SGp.buź8żć±Ö¬ž–£GÖ>«^¤99™ńāZµŚ‚,õe[óo§¤¤”õA{8q"BkŸ[·bY“ē™:^&ūœdó–ē¼|闬^õ ÖVę*ŪccY“‡[7cŸ» OĖ–-Ų·?ä…ĢuńŅuÖķ!--ó…Ģ÷:p<8œõA{(/W/ė- š"ČĻÆĪŚ{öN7777d2ÉÉņjžŪ¶mC&“­*²=aĀRSSIJJāĮƒÄÄÄŠ³gOe{ļŽ½‘Éd4h ×ŖłšĆÉČČ`ŌØQ$%%‘••E^^111ųłł©ŒŻ¾}{Μ9Caa!IIIddd ‘HŲæ?QQQLž<ł™wµ"ŻŖ}( P "’ÜÜŽ(®PE]¹Ö¼ĪōéÓ ’7»bhhš²Mų—q+&–]»½l3ž::Õ©öōe嵑œœL@@ļ¼ó?’ü3̜ł°Z›¹¹9Ó§OgņäÉ“jՊĮƒS\\̦M›04Ō,x ņč¶ĄĄ@&Mš„—— ;;›Ķ›7+5āD"›6mBWW—^½zįęꆇ‡£F¢E‹ģٳ‡īŻ»?óć®Ī¹Ō©¾¾°€€€€€€€€€€fd\P”„‰ŗ¼üp Ō`ŽüÕlŪ~©Tžå;ōTŽ­‡ņR¹kWG×īcÉĖ“—'ä)‡ŠŅĘ3?ĻŠ€Ž€¼źĢŅeršŠ)īßO¦   sSÜŌ”ænŒŻ_Y„ēę­XFŽ 䝷022dÕźmܾ‡žž.­[7ē‹9SØ_æ6æ-ŽĄ¦Ķū‰‹KĀČČŸf|öé$š7{X¹gÄČ@ŠŠK˜3{2 ¬åā„ėdddcjjDóęī|šŽ:vōąč±³|ś™\°;99²²råńœ9ż§2ē’ĉÖż¾“Ø ×HOĻD_O[[KZ·nĪūļ¬v… #‰æŸĢ©“šļ7…ä”t$yDĀóV±dٟLzwĘĖSŽ$’B–-ß́ƒ'‰M$?æ sSźÕwįĶ>™8qśśr[/GßdāŪ³łążQäęę³ać^bc9Ÿłó ‰dɲ?¹~ż.YY9Čd2jŚZćŁĀ÷§ŽPVpścżn/Ł@nž„‚˜8å9²±±äąž•Źc gĶŚ\øxģģ\ōõõ±±±¤}»|šĮ(µ*>SPPH§.£ČĪĪąķwēP£†>ó ¤sg•ž_~½„½{ƒIHHĮČȀF ėņöŪC4šatŹĪ]G™ūĆJęż0“!ģŪBBb*sæŸĮ„ńƒ(--c}Švķ>FĢ­X²²sŃ××ĆĮĮ–޾­˜>mŒJ‰ī!C§‘›“ĻįC«5Gßø»×eÕŹo”ŪŹŹŹY¶|{ö“˜BNNśśśXX˜Ņ¼y#6ØĆ¢ß6 ÆÆĒ€žŖ/ßū÷Ÿä·%ørEžŅfggCŸ7:1ó£ń˜›WžŹu•IS¾PF vč8BY }ߎåŲŁ=L£KHLeī+ '##ssZ“hĢGÓĒ©UŖŹŹŹį·Å9zō ‰©cnnJĆu4°'#Gś££óģ(’]ŒMŖ³žż‰üü|¶mŪ†½½ü> cūöķ*}Äb1C‡åźÕ«DEE‘’’ĀéÓ§ńöö&44TćŲb±˜qćĘĄÅ‹¹sēŃŃŃxzzŒ‰‰ µjÕā“O>įčŃ£Ź}Æ^½ŠÆÆ/mŪ¶}ęĒ,G»³P‰qu”ڑɸJ§›ģ ¼>™¬ßMąĒó±··”{·¶ŲŚZQPPHbb*{’:Į±caœ9ż'¶¶VXZšS»¶åeeÜæŸŒ”a jזē¼;ŲŪP«–I!)Éédfę`cc©,lfj @aażLåŚµŪŌÆēBēĪ>XYš“––ĮÅK7ųō³…DE]eŁŅ/().!..‰_‘““G§ŽŽ“ōjĢķŪń‡sńĀ5|}[qōŲY:ulEŪ6žÜŗKHH$QQW‰ ߊµµ¼śZRrńńÉō0{{[zõlŽŽ÷b »Č™3QlŚų;ūČĖ0W_FF6R©Tł3€Øb9z†Ńc>ĮĢԘN¼±±±¤ØØ˜ųųdvķ>ĘĮC§>ö;õźU]ś89%ųųdåĻĪĪvč׊'==“²°¶²ĄĮ±&ęꦔ––18ąC¢¢®āźźŒÆo+lm,IKĖ :ś_~½„°šK­Ÿ@qQ1qqI|?wŁøŗ:Ó­k[ełīcĒĆ12 sSŗvmƒƒƒ-ÅÅ%¤¦fp<8ŒcĒĪrģČZ5Ŗ‹¹¹©ņœ$%„”§Æ«üŁŹņa¹ä ’bĘG?`llHĖ–8:ŲRV^ĪŻ»÷ٲõ ūö‡pšĄ*„ƒWb±X9¶L&#''{;Ģ*΃‘‘źĖųŌ©_“™•K§Ž­0źŅš¤¤4N†žcņ”Æ(--cŲŠ7ČĖ“—Ä”÷¾&++—† ]鯬!®zĶü‘Ķ[`eeN»ö-°¶² 3+‡{÷ڰ—C‡Oü¶¶ņؕä¤t2³r“G\|–VŖ„¤?›ż ė~߉“cMŗwo‡­%ÅÅ%$§¤É”C§x³oޤŹ~‡ŸfłŠĶųś¶bų°>qśt+Vn!:ś&»w-V:Š4a`ššĪĶ•PXXDmGDZR–Ń.--cą ÷‹ÅōźŁ]]nܼGHH$gĻ\d’žJwnn>}śNāöx6ØC×.m077!--“ ÆųæłD_¹ÉO ž§Õ6×“źüķ­ŚQō<(,,T:ÜÄĒĒ`f¦½4¼T*åāEU-ĪÄÄDlllH$deeįėėĖęĶ›‘Jå:jĘĘĘ“iӆ”””gvŖTķĄ4©–#T@@@@@@@@@@;"dnb™ųŠTōśh˜¬^½ ccCŽ]§t(Ų±ó“§|Eš‰†ōęķ‰Cx{āņņ$Ōsė‰w+„#GĮėꏒ_įĢūšƒQ*QEAörķŚm¦Ny‹/>ŸŖŅVXXĀAļ³cē¦M£ā„)).!4$WWgå¶ļ¾_ĪÆ‹‚8ÉéŠ ŌŖå lūāĖß*¢æB5Ņ_¹=/O‚’›]Y¾ģK§Bdd4żLežOkéÜŁ‡öķZо] ŗõGll"Ū·ŖSX¾|3f¦Ęœ ŻØšē¦}L›>—Ż{Žńьqź  –.‘;wķ>Ę»“¾ąķ‰C;v€JŸ;u•1cś3*N–’’R†˜Éį#gˆŠŗŖŒPČŹŹe劯éßOµRߚ5Ū‘ÉdģŻ³”† ]UŚ"#£éė?™}ūOŅØQ]ś÷ė¦ÜæAC?ģŌĪQqq _½„š5­9vd-öö6*ķŪwaŹŌÆųmń/š­õ\ŌPŽ=÷‡•,üå¾łśCµ«GūG†oÅŲųįKś¹sWčė?™å+¶(n ŹŹŹŲ·w­Zy(·Ż¾Ļ–­ńlވ];«Œ°č· ¾żn9k×ķäOŌj{UlŪ~gg{BC‚011Ri»}“=Ēckk…góF*m·ļijgוsPTTŒæ)„…_āŅ哚t×:o“&õ•ētŲ[ĪĘ ó10ַؔ¤¤oļ¦üöėgJw€µėvšÉ¬ŸY³f;‹~ż¬bŪNn߉'pęgŽW'?æ’žSŲųē>¦}8Zåžx½16ŖŽÓķ夎©kÉÉdU?+”––*hŚpvv&11‘ńćĒ3lŲ0RSSŃŃŃĮÉɉāāb¦M›öŌvWN5"ŻŖåŠŽH¦s*ÄMJdśƍ’øÆo+>x”šĆ Ą£‰ O­|–œ8žž.Ó§Qk344`Ģ辀ÜĮó(ŻŗµUqøųõņ KēÖj/ļ~~ņ¶ää4µy>žx‚ŠĆ ĄĒ§mŪxrįĀU «/֝˜JĆF®j7€Ž~¾Ģ™=™V-=4ģłlP“˜9c¼ZT“¾¾ćĒ ā±ółĘÕn^^™ōīP5‡@“Š5‘’Rż5qįā5²sņ5Ņ_Ķį0h`lm­Ō®÷?eźŌjN2oļ¦4õhĄŻ»÷Õśæóv€ŠĆ äkP&“1~ü µ±ūčėévé©ķ,++G")¤QCW5‡@“ĘõŃŃ“šö@­­cĒVjNGƒ &w(>ėB&3gŒSqøŒ鏞ž.÷bĪuāDFF¼7õ-µ1LLŒń֛H„R"Ļ]y¦ö ü·ŃÓQ£FUNķQe’UfĻžĶżū÷±··§’ž|łå—|õÕWōė×ĀĀĀžÓĢęUö05"Ż^ūö…08`æ. z٦<;wepĄ4žž;ęe›"šœ gpĄ4‚ƒĆ«ģ›Āą€i¬]·ć¹Ū„øw¼[Į»õŹĖ…Jģ’ʊŹe×”"ŅĶѱUAZŹ™æę/Õ¬Ä÷ßMäkŁŁ¹ääęQZRF~~„!Ā~ IDAT²eiié33-=“š¶VHe2²sņŌŚĶĶä:TŁ*Ūķ48l)…vvźm ½5…==]Üź×Öh[:Nœ>sŒĢœŖQįāāČłóWŲ¼åŽ­šāģl§Ō³“4ēż÷FV1Ā?#--33jčk<Ÿffņ“ŽĒĻg·:Ē œ9k¢„§g‘—'”¤“”ü< aį—yŌSuIMĶĄÉÉN£}vvÖÄÅ%U{Ģź M#ĪĀҌ¢¢bd2™Š“ŅMƳȏ’kĒ9:ŲjĖĄ VÖę$&=}Ńc]]œķ¹tłIÉi8:ŌTi?|ų4ååRj»8Ŗķ«m[ZŹ_¦ ž]„G==]j×V·A_Oc# Š•ŪŅŅ3ptØIqI)Å֊"5śń5) `g'&>¾²ļ^źkšYSYJöó@"‘Š©S'V¬XAjj*YYYdff¢££ƒēĪ£°°źJ£ONÕQ¦övB%ēŔç9vģ,S&§n]Uš„ÄTBCĻQÓÖņϳ’IN„DšĮū£pqy¾ńńɄ†ž#«BY ś„†žcļ_'7v`µõĄ_&É) =ĒĄU{’z®R)”gĮ… טšölōtuńööИ½#š‰.×ŖÕ®Rg½N·ØØ«Ģśōg.]¾”Ö¦)źęY••KbR śUŚÆØØXåēŹ^ƒžäÉÄŲHėK•“‡³“]µĘūtÖ;ŒČ~§Üfmm£cMźŗ:óʝč߯Ūs{‘ĖŹĪ#77’‰Ļ§6ū;wī33šGΆ]RKŸzš5‘“-w“Ķųčf|ōƒÖ~GžS 5’’ÕvÄbõ†üü€J«É𛙐•­Ł™XŠ‹KšlވæöĄ§uM›6ĄŲŲ™LFRR*wīÜĒĢĢDś(/ņ‰¾¾žZ”›6²³óČČČ®rMWŚ.šśQæ¾>ńń•9˜L+ž{ś{N¹¹ņ///¶mŪöĢĒ×ƚ5k?~<‰™L†««+^^^ŲŚŚāįįAZZ­[·&-M=jūŸQµ³~}½g<§€€€€€‚Ė—o°>hƒõTsŗõčŽGG[œģµģ]}¢.\e}ŠŽŽ÷¹;Żžž«×ī°>hŻ»µżO8Żž=v™LĘ/ g1xpƗmŽ€™ģŒāŸJ§›ŁY¢)/Ē¢GNN>o˜IqI 3ĒÓŌ£FFŌP:ŗõxr²Ŗ(//ĒĪĪZQ„ Ezė3Ÿæ }x2'žW‹Ę\ŗ°‹ššĖÄßO&))ū )$&¤p"$’={ƒIJJcźõT»gAyYę¦Ģž=¹Ņ~Ś"Ū„¬¬œ£‰Obņ¤a“j遙™1śśśąäX“Ę}ŸČ¾Ņ²2ʏDćĘõ*ķūxōŁĖ¦“TnūćђRV^ށžSĻńõ7K9rō ėÖ|Oä¹hn݊%/æ±HDżz.ōķәQ#ūż§’ŹŹŹØUˁ?UiæęiŌ ŌÆ§KppU½xN·‚‚vģŲĮ'Ÿ|ĀūļæOAAĻ’¾ūꫯؓi“&MRk³µµåžżūųūū³zµęŠČOOÕN·ŗõt«ģ# šŗQ^.ålŲEttÄ“kŪā¹ĢQÆ^­jaxˆ"K©¹§šŽńÆB“Ó­LŖsFGōźēžž>EVv.ß|żļ¾3T­żŚµŪĻe^c#ŠKJ=ŖŸĘö²²rņ%ŌxzGFeäęęSPPˆ‘‘ŗFW¾DŁdeeQ­±ŹŹŹILLÅ“¢réćäääÓŗm›7ļnN7c#DéYZĻgy¹”¼| 5ō«ŽXøzķ6wļŽēŻw†ņå冀ēęę?±}¦UkŪ¶õ¤ŸW}ņó (+/’W9Ü„Ž[Aöȉ¤PYW6u‰¤P-5÷rōMLMiҤ>}śtś‡’;051ĘŲŲPėš,--CRPųÜīq’.nՊ¬Ŗ Üz.ó2___źÖ­‹¾¾>R©”]»vqķŚ5µ¾ĄÅ‹  9Y^śĄ$$Øė*ęēē@xø\ÅŌŌsssLLLČĻWżėģ쌮®.%%%ĻśPĶ)ų llt°04Żž=ģÜu”¹?¬dŃÆŸqńĀ56ž¹;wļcdd€‹‹#żü»ņŽŌčé=ü` “ÉŲ±ćnŚĒÕkwČŹŹĮČČ{{[:wņaڇ£Õ4‡““Ółéēuœ:Ńr©SScll,éҹ5ńńI;F?’®J§[||2‹~ "ōŌyRRPTTŒ‰‰ Ōaš ^Œ7±XLaa;Ė?J*²AŽō…RšfŽ3éŅ„5gĆ.ņį“ļ™ōī0&Œ¤“-55ƒ?­åDHééYaffBżz. ؃ń攫«CNN>Ż{ʃ'²+R=ĒMųżŠ÷…?Ļ¢C{/åńžŗ(ˆ!$'§SRRй¹)n śƒõTyFĻÉÉgį/æsą`(I‰ņ(ģZ.ö ڧŹāA –ÆŲšµŪUģ8u:J™óŻ·ÓčŁ£½²ķŅå¼żĪ†¼ĮĢäĒvõźm–,ŻHxųeS‹ÅXY™Ó¼YCŽy;€.]ZWĖž®ŻĒāī^Į{ņŪā ŹµbeeŽw+fΜ@óf •ż§LżŠė7ī²lÉ|żĶR"Ļ]!77ŸkļĆĘʒäätżDČÉH’’Ņ),,ĀČČ·śµń÷ļŹ¤w‡)×i»öĆ)-+#7WĄĢē3ē‹EĢ™=’7åļOqqIŹ5–ššAQQ1¦¦Ęø¹ÕVYc JJJY²ōOöžĢ;÷)**FOO{{[ŗukCąGćÕtŻ·ļ8¦Ķū¹z5†ģģ!'#ÉĢĢ `ŗē7üģttĤ§gņŪā G˜BAA††Ō«W‹¾}:óŽŌŹūćŚµŪŒ7‹)“‡SXXLІ=ÄĘ&24ą ~Y8 €ˆˆh–­ŲĢłó“™™X,ĘŚŚ‚Ö>Ķxļ½4kŚ9:åŗg’Vžvvph›–z&Κw{5PäŚkŅCøy+VćvÅ/ŻŹD }d"„ź»Õęų±0ņó 4¦+:tŠń?cĪģÉĻM-:śmŚØgG_¾IśjN"ŹĖÕu†Š‹Kšn=„Įƒ{±tńējķęę&8;Ł’ĻōŹēS*S?ēnõksńāuŅÓ35Ä8s&ŠĮӘ>m ³>y§Ņy²³kB½(Ą--kBa£¦s¤ŠV‹‰‰Óŗo·ćČŹĢįÖĶC•Ś÷8šĪdz¤N'nÅÄjü£••CZZ&?üdccIll¢FĒīÅK×Õr;łOyQs S,ĢM•’·µµĀݽCü°²ŖZųüiQżl!7oŽcž¼@D"µk˟/ce dēäaogƒY…čāٱ°°˜øø$„Ć **Ō÷ŸBll"¾¾­x£wGtuuÉĪĪ%<ü2³ēüJJŹ>Ÿ3±ųį<ååRrrņ±·³Į“B;ŪØ"«)99^½'’’ņ€fMāé×##ŅŅ2‰<Ķ©Sē¹}'žOž÷¶r¬”ƧsįĀ5ÜŻė1r¤?ŗŗ:Ü»—Ąük”۫½Q]āā’8u꼊Ó-<ü‰‰©čźźröģE§ŪŁ3ˆ‹K¢A¹¦ńķ;ńōõŸDy¹”N[Ń£G{D"‰‰ņl£ą¬’ćGzõlÆ6’ćÜæŸLrr:;wĮݽżśu„¬“Œ;wīsōX”§¢8ø…ņ™?55ƒė×ļŅoĄ{”••įī^{;ōõõČĢĢį>”F£Fuń³ ŗŗ:¤§gq9śß|»Œč蛬Zł .µ+9RČŹŹĮÖÖkk¹óÉÄXž®œ‚ßo+×XŪ6žźkģÖ=ę’Ø<¦ ?湑389Ö¤{÷¶XZ˜QRRŹ„K׳ż÷]„„DrģČZĢ*ÖÄO?ÆćĒy«111¢}»ŲŁŁŸ_@\|{’:Į”Ƨ9|pīī•g.UĘ®ŻĒČÉÉ£C‡–thļ…H$āüłæY÷ūNNŸŽāų±uJłœąąpFŽž±HŒ··Īģ•ēāĄĮ“8x’-›āŪ”%¶¶–Ō®ķDiIyyģTäņņ$ōõŸĢ½{ øÕÆMß¾]Š×Ó%==“+WbųįĒUœ?’77ĢG$Q\RJ\\óęÆ!##WWgŗum‹gE–Ī”C§7įS¹ž®wSœœ| ÷Sųkß eĒöEjļ^Sb­Ū(æB«>]Ź8ŒŃ½H\jÉīž½ĒéŪ§³Š¦Öwłé§uĄĆ;ĘʆčėėqõŚmŅŅ2”¤ÅŖBČ=ōŌyś÷ļ®2vŸŽ9x0”™ó˜ūżt„č;@zz&ĖWnä•UŸ³ēüʆ yŹ/[ååRV­ŽĘÅK×鯻£Ź2K+3 ’.&""Zåę166ÄŃ”&ĮĮį\¼tžī*ūŸ~ö R©”n]Ū(·7jT—³a™ūĆ*ęĢž¬übs;ŽO?[Ø6GķX±r3­}šÓ®] ņņ$ņ¢&9ydfåq™M›÷³č· NÜ ę~VXV¬±Čq×§w'BB"łų ųś«077Q¶„¦f°jõ6D"QµÖ¤ĄėE³¦5ŠŃ žūGh‚ÜM¬=ķūæÄŃ£G±³³ĆŪŪ›ZµjajjŠT*%''‡ččhn޼łfmReOO!U@@ąßIVV§Oż‰“ćĆāSéé™tź2š ’āŪo¦”£#&1)%K’ÄŻ½ūö.Ss-üåęž°’ß’ŲÅǁˆˆŒ&..‰įĆśšė/ŸŖĶ=Įę/XKĆu”śĻ+Vl!##›ļ¾ĘŪ‡ØōĻĖ“šfæ)mŲĖ“icpr¬Éö­æšć¼Õüōó:¾śź}ڶń¬ņø ćŽ½&OĘW_¾ÆŅVVVN÷žćٹó(ŸĻ™‚©©±ržÆæYŹā%™ūż ¼¼«ģ·č· RR°`žĒj Łōō›Č’„2yŅpĢĶM8pš$.\cČ?/š­ņ ~ńŅuśō}·ŹćšńiоžŃ*ŪĻ’›Ęīõ166äÜłæUŚĀĀ/!‰”Ń…ė×ļF")䊁UjĒu9ś&=zŽgĖÖÕrŗ)ŽwŹäį|ńłT•ćڳ7˜·ß™ĆƋ‚X±ü+åv©TŠG“ś¬ZłŹ‡ńŸ~^GbR3Ē«É)38`{öóьq4jT—ĶžĄ²å›łāĖßų_ąDüü|Uö[^±Ę¾’n:' ViS8”‚‚ö2}Śjržüß>r†¶m<Łŗe”ŚGpŚضż0Ę"?æ€_įäX“ƇV«½ßļŪĀų‰Ÿńė¢ –/ū²ZēSŁlÜ0ŸŻŪ©l’ņ«Å,]¶‰-[2fŒ\Ēśó/~CGG‡cGש`ˆˆˆ¦’Ą©ĢŸæß-•÷ļ'³~fķŗüśĖ§*EõžÜ“{÷˜2å-¾˜3Eåś–”–ņֈ@Ž#*ź*­Zy(Ū²²rYŗä ź©Ü&“ɘżłÆŌąųŃujzŒ§NG1xȇ,ųy-Ū¶üņŌēźUA†ģš£??ętB${„nķŚyįŁ¼ū÷Ÿ¤q“>Ō«ļ‚®®ii™Ü»—@‡ö^Ä܎S«8)‰čŚ„5‡ŸĘÓk¶¶Včėė)C7Až‹ŌŌԘĶ[°go0¶¶–ō讎¹ßĻ`šą^8tŠ»Ž²gļqœķ±07%;'ÄÄTŹŹŹ3ŗæŅ“ü¬±“4''7ÆVqv¶ĒŌԘūńÉdēäammĮē³ÕåüŗviĆɓēx³ßdll,166dŁ’/hÕŹƒŁŸMāƒißŃĖo"–fņóQC““LŅŅ2Š××ćOüG67oīŽ••9ūö…P’X/lm­h×֓ßĶĘĻĻ—€€ŽlŻz#GĻāäd‡•„9¹ł$&¦RZZʀžŻń­†ƒ£nŻZųłłrčŠ)ܛō”aW jšąAwīŽ§Q£ŗXY™“­”p@×.­Y½f;ķ:¼…­­%5Ų½k NŽ5łõ—O=ö łK 3ģl‘–—“–žEVV66–|:«z¤:ul…žž. łƒU«·ammĮČžUjˆ=)VVę|ńłTfĻł•ī=Ęch(×µĖÉĶ'==ŸfŒéÆÜgŅ»Cٽē+Vn!hĆ\\ÉĻ“”œN·®mŌ¢?’|ĪĪö­’Q«ópĶŚĢśōgö8©5eóŸŅµk[¶ļ8Āø ŸbiiŽ™™1ß~3­Ś*2bě:|ŠM›÷³mū!jÕrĄŌĘģœ\S)/—2yҰē^ĮH࿇¹¹&z\Ž®¬B²ą ÜAV=Š‹‹9}śō œ±j§[ūöÕ«ą- š¢ykx_‡€­­½z¶gćŸūHLLÅÅŁӧ£(++gŅ»C5F`½ūN?üøŠˆČ+ŹmyR*;q4­ų›VńqccCʏSŽ755fō(>™õ3‘‘Ń č_u„Gm˜™3zT?† V/T„««CĆuŲūW0R©“ŚÅÆBNFāą`ˈ·ŽTk³¶¶`Čą^ü¼šw¢ÆÜÄ·CKΜ¹ĄŌÉĆ՞[[xŗÓ¹“ĒŽ‡U9Æ””^^‰ŗp•’’RōõõJ„\øpA{bllČŖÕŪ()-E_OŽy…† ]•)ˆ ‰©j¼VĶ›5äĖϧRSKF—&tuuųhĘ8µćźēߕļ¾_Ī™³Õö™;w†Z&JDd4::b¦LV—20ØĮųq‰ŒŒ&,üÕ­–m—111bÜ؁jmņ5֏YŸžLdäś÷ėĘ©Ór鋷'јu2vĢ/ŁČ•+r¹Žč+7)**fčŠ74ŌōķŪĀĀ/UĖ^m4iR_Ķį0uŹ[,[¾™Óg¢3¦? ‰©ÜЉeČ?ļ ­[7£yóF\øx²²ņ* ņEDŹ»ļMyKķśźėéńöÄ!„†ž#<ⲊӭG÷¶*7€»wˆOfŌH5‡€o‡–4iRŸsē®üėōŹ_ "±v§›žAńŃŅbż²Ē·æJčźź°{×b¶n=DHč9²³r‹E4õhĄÄ ƒ=ŖßĻ]“†*žĖ—}ÉŚu;¹vķ6 ©čé멨YӚƒV²qć_܋M¬••G`‰ÅbÖ­łŽ#GĻr<8ŒŲŲD ‹hhgCēN>ōģŁžīŻŚ*Dz²¶`ōØ~“ōRI°°0cōØ~*7‡[[+Fź§ę¼366äČį5lŲ°—Ø ×ČŹĢĮŪ»)žžīŒÓ_cŠę¤w‡R³¦!!‘¤¤> “¤Lś:xp/<<ÜŲ¹ė(ׯß!/O® ēäX/Æ&ōóļŖń†ŌDß>•ĪœG177įŠUü±~7÷bÉČČRI ^¼h6ƒōąČŃ3ܽ—@AA!5kZÓ”½Ż»µUłZR³¦5£Gõ£Y3ĶNĶ5«¾e箣‡“žž‰T*Ć­A†ķĶŲ1X³v„„ź/Ä_õnnµ9u•ä$¹¾ƒ®Žü`ĒŽŽœ9½‰­[r9ś&9”ņMšøÉCÓG¼łD\īīõųkļ2¶n=Dbb Ł9yŹH-Ÿ¦”••anf¢qßīŻŚRŪ唀xƒu=ŖŸ2’qŽž8„V­<Ų½ū7oÅ"‘ąäl‡“c;|}[ŅĻæ›Ź/ś:uœ8qü‚6ģįęĶXŅŅ3ØWÆÓ§e芎|?w%¶čÜæŸŒ½ƒm„æi®‰\[ĪŗāžPčhź?zT?Üź×Ö:ęć ŌcC>MJź $…JM»Ž~¾jQœ2tho•ˆU]]6ĶēȑÓŸˆ 6.‘¢¢bźŅµkz÷ņ­¶Ę†ĄėGū†U8Żx§Š ¤‰‰©U\%tģčMĒŽŽ”—KIHLE’_@Qq ¹¹łädēq6ģ"ååRŹĖ«ļtKKˤIćśäåK4¶[XȟÆēHńžā⢹OŻŗµ N7€¼øĢ„K×ńńiFLL¹¹ł“jŁ#/ŁČßWbšņjĢ­[±deē2čˆ‹‹#I!æüŗžŻŪįāā ā\ņ„zڊ` MŌ©ćÄ©SēUš¢Š¢g“•™ƒ™™©ņ9ZmžŠwė„„źÆł³®dÉĒT¬±ø8łG~—Śš B99ŁqōČZåūRV¦üŻĢĮĮV« NŽv„G\¦¼\ŖÕŽŖØėŖłŲÖÖ ccCŅŅäė+--€Ś.ZļŻš¶V”””’—/Į²bj#+3}==5Ķ8Ś®‰›†B„iérŪjÕŅn›­­’CQQ±JęŲkH™žž¾J‰4的e—ģ“”Ó zņ0’FF†Œ;€±chl¦¬¬R…nŠ„„¹RØ7)9¼\ …EňD"ĢĶL°“4W)D šŖcb"¢s'Ž+¬¢gžµÓ­aƆōģŁ'''/^LBBBÕ;=GÜŻŻńõõeÕŖUj•Ÿ䩹•Ó·ļÓ}Įų7”ˆ\źŽ½Ö €Ü 7€œœ<āć“ńšh@‡-«]XŹČȐ‚ķ³ äQbÕqTƾż!XZ˜±yóĻ*EÕ•<ŃxśśzŹ”;mšĮ%„„)# ¬,Ķ+²1 ”鼏ņąAVµēÆQC列;w©TŹłóÓŅ«‰2b±UK"+“øĀĆ/Ó¤I}•ˆ¦ū÷“ŃÕÕÅŪ»)ŽŽMUĘ./—Ņ×»÷旅³Ŗå(JII׌–Ÿ_€¾ž^µ¢ ČĪ֞:Ŗ‹y’ČD##ƒJטä±5¦ø69Ły8:ØGČI„R&Mž7·ŚΜ tUö2äŸEbü[čŅ„5††Ģ[°†č+7UŚJJKYųĖ—ąėŪR¹½’īŌØ”Ϥw‡ņqą†ųŃŗu3ģķmČĶÉg÷žćL™śćĘĻRīÓ£G;JK˘õéĻ*‘s.\cÕźmЦ­j¤±Bß*$$¢ZŃĢ.µģ‰Mä|…ö™‚¢¢bżÄĶ Ey¹jV¢XŁ óōķӉ„ÄT¾žf©Z”Sll"ėƒö §§«Ō?ī]”żūĶ·Ė”b÷ w­\µ•KOčtS8Ņ–.ż©TJ«Gœn ܒ„ŌŅ Żź×&&&–}ūBŌ9·bb9†¹¹ vŖqjB&“1cę*āų%%„|õõbRS3šėUµ< ¬Ī9ė³…dfŖČYqżś-Ž€žž.;z«“Y)ÖCč9µTČŖÖŲź5Ū122P^'æ^¾č舙757oŽS韕•ĆóVŠ©“͚6ÄĪΚ-[pā„ź:)**ę»ļ—“‘‘M·®mŖu“‘˜”ʏóV«¤™fēäńżÜ•J-h[[+||š±s×Qvļ9®v}#<ģžĶiŒø|Å5™=ēWµ¢…1·ćųiį:Äb1]:W­īģlOóf ٲõ ū÷ŸT±M&“qčŠ)¢.\ÅŪŪ济t!ŪŖi»Ę*„RÄ[už€b* šBØQC„’›FmŠ\Mķ!žĄQąéæ$š››ćķķM³fĶČĖĖĆŪ[ž‰ƒƒfff\¼x‘N:įźźŹ¶mŪČɑ?D{xxąīīŽéé鄇‡“­š:!‰h޼9 4@__ŸōōtĪž=K^žjÅ+}}}Ś·o³³3‰„°°źU«>݀ʫD‹Å"®:µB@@@࿀…¹) ę2mĘ\ŗ÷%vvÖ•š–A^ž„ŗuk)‹«efęšķwĖx’½‘|ņæ·5ŽY^.eäØ@>MZZ5kZ3~Ü@öī fĖփlŁz[[+LMIJJ£ØØ±X̼gbQ! Æ SGoōōtłuQ«VoĆÖ֊·†÷ÕZxlҤᄅ_ę¾ļāVæ6ÖÖäęIø?™ĀĀ"ڵmĮٰ‹dgēao_Ce]]ę/XĖŅe›°±±dģ˜LņS§¼Åńąp–.ŪÄŖÕŪØUĖ##²³óHLLE&“ńåēS•U[¶lĀ˜Ńżłcżn<½(£ “’ŅČ˓ЦusĀ#.Wūy¶pĒČȀ#GĻ"‹ińH‘4&nŌąš‘3čźźØ>›1c,aį—?ń3Œ ©YÓ3Sc<Č"©"Źģ‡¹3ŠÓÓųšÆFķŚŽDGßÄĆćMj¹Ųc`PƒŲŲD$’B\]™öįčj34 7;vꥁ“8p++s,-ĶHNN§  ‘HÄģĻ&į䨚öŁ®] ŒŒ ųż÷]lŁr[[KüßģŹēs¦0aü *×ŲüyŹ >õ.ß~·ßN#155ĘŽĪ†ā’’’Ņ(++§uėf ‘ŠŠŃ3’Ē@&¾=‡”Ćg ÆÆ‡£cMŠŠŠIMĶ@&“QÆ^­jŸm“jåĮ¢ß‚X¹j+ĪNvˆutøs'ž’’RśöķLĻķ”}ē’8“AC>äw?磙Ę8:Ų‚HDffé陚ķ7VkŽ7ūv¦gö9z†&MßÄŅŅ++3RR(SKgLK½zš««>Ī‚’cč°éŒ›š)fÅW@ž>ūąA&&FZ J¾&ČÄååŪ55h¼ŚĘ¦„ž9… ”Ÿ€€€€€Ą bų0“j8Ż,€ĪČoOGćʍ9zōįžŠūųų0zōhŽxć $ M›ŹõbNž< ĄīŻ»éܹ3%%%H$,--)**bśōé,_¾[[[öīŻK›6m())”   $ “'O&((€zõźqäČźÖ­Kff&b±CCCå\’= o•½|}kąäųōZ-Ļ“ ź0zT?j×vŅŲŽ²eFź‡„ÕCy€!CüšlįĪĪG¹z5†Ü\ ś¶zx¶p§„W† }C© •””FiiY„ÕutÄ8ג§Ą)^Ö Ų»g)»vćĢ™ $§< “¤·ś.ø»×£æn4n\_m¬† ]Ł÷×r¶n=HBB ¹¹¬,åÕ?k2zT?š=RD«WĻö:øŠ]»ŽrżĘ]Š‹Jpt°„m›ęō¦°°ˆ;*+*ššpcߎålŻvˆÄDł<ŚhFF†ģݳ”}ūB8}:Šųū)”–”āģlϽ;ā’f||T„yęĻ ¤[·¶8pR®«¦§‹wSźE }6nü«Ņj®¢Æ§ĒĢĘ›ˆ••¹ŠĪ™žž.Ó>MRRvvÖjh^-s:t#Ū¶āņå›dēäQZRJĆFu2Ä??_¼qāU…£CM–ķž‚’āŹß1äåęćėۊ6>Ķ=ŗæ²¢*ČuėÖÕģ ŃÕÕaĖę…üµļ””ēIHL„“¤”zu]ps«æWƒĪĪöÜæ’?7ķ'..‘œœ|l*¢ ųkļ2vī:ŹŁ³ÕÖŲ€žŻqwƧ2Žūļ¤};/vļ9FLLœ\›ĻȀ6mŽM ā§¹åVß…Ń£ś)SA+ĆĀܔѣśŃ·Og,,ĶŲ“i?÷b().Åßæ+=ŗ·£ŸW•ō]w÷zœŻČö‡9žo2³r)+-£QCW4ØĆša}”éĪ ||šRVV¦¬¬@,óĒļ?pąąIBB"‰‹O¦“¤”ŗ®µØWÆoöķ¢¢ hcmĮčQż“jA6oÖ°bķ&*ź*Yٹ”—•ćŽØ.nnuxė­¾jNÕ× [;uҘ˫5’-5õĢH‘Œ ēg–€€€€€€Ąćų÷K#<¢øŠ^¹Ąt *ftuu155eöģŁ :Té\ĖĖĖcįĀ…¼÷Ž{lŲ°Ł³gL&cįĀ…Œ3†>}śT*ÅÜܜ„K—@ķŚµIJJb͚5ōéӇ>}śpįĀd2ÖÖÖ¬Zµ ???œœœČŹŹb÷īŻxzzŅ­[7īܑ믓jՊąą`LMMŃŃŃŃŖ·S=C«ģµc›-¾¾BåR×“‚‚BZx ¤ °ˆ·†÷„I“śXX˜R£F Š‹‹ÉĪĪ#*ź*[·ÄŃюs[•U"žŪø5ģEc÷śģٽäe›" šŸGĆmķŪoÖŌ¦õ7fAAÉvdjkxqg}ŠJJ_kQĀWŽ ®±>h²,ø€€€ĄōiÕ)f`FuJŚ(++#++‹ĀĀB¤R)YYYdeeQVQ>;;› &§Ō8éÓ§üńaaaJgXNNŸ|ņ ŗŗŗtčŠAŁoåŹ•DEE)÷ĶČČ`öģŁŅŗµ\;¤G¬Y³Fép8ž<[·j”ĆxBl€žUöņņŅnÆ5FF†lŽü3mŚ4gĖÖĢ œĒÄ·ē0jōĒL|{3ē±}Ēa|}[ńēĘ‚ĆM@@@@ŒüĀ’ŻŚµ&{»ŗv)JK9³x­s’ ¬^½ćĮįōļ×M„rOvNїoąā⨬¾ņŖrįā5 ŠŌ*ųüŪ¹y+–Ō”t¼½›Ŗ…ķļŪĀā%™2å-•ŖEÆ:WÆŽ&##‹vķ¼žQłmW•.] hį©ĻÅK%Uōģ„·Ÿ¹ ‰‰‰””ØĪooo™™C† QŁ.‹•Ńlb±[[[¬¬¬ŌśÉST¬­­155ÅČȈ˜õJpׯ_G0ŽźTyżhĘĖÆÖ* š²iįéζ-æPVV®Ō)++/GOWSScģģm“Vųļ²kĒb __Ń{g‡,ČÕµK‘¶ÖJ„°R ļ!TųWrķŚmLcęGćų8pāĖ6ē¹2kÖĻÜøyø{Ē_¶)OÄņå›Ųųē>"Ā¶ąźź¬ŅÖŲ½žov„ÉcZÆ:?Ī[Ŕç¹}ėpµ*ļ¼Ž|ų)cĒgTŃKLęšOŠ*hāńJo"‘ŗuėFóęĶÕś_øpÜÜ\Œ‹ÅōīŻ›6mŌ«}EEE!‘H05• kŖõy¼ŲĀ“ÓhYe/=ŗw3ü‡s ¼:čźźąāāš²ĶxAxxø½l^d:2éŖŹ:Tźt³·o’wZņ™#ˆčõlķ<øƒ ·–€€€:½{Ѿ]>gĪV„ķV ¬y®öČd2233™7oK—.ÕŚO$Q\\Ģ—_~©,˜  CC¹³ĖŲŲX­ĶŹŹźXjh®¾÷8_}iHų¤( šō“včx­²UÖ–‰e?‰d¢WĘ3“GPŠZ¶lB:Nlß~˜7ļįŃø>S¦¼ČĖb;FDÄe22²‰DXY™ÓŖeŗ÷h§1¼ślŲEΜ¹@bb%„„˜™šŠ“iśöé¬,c pļ^ūö‡Š”CK•A.Gß$4ō}ūtV‹ŒR°mŪ!RRŸ @Dä~[¼€¦ čÜŁGŁ÷VL,'NDG~~¦¦ĘŌ­[ æ^“Ž’8§NēŅå ÖGY:ūQöķ į^l“ކžž.qqIģż+˜ŻŪ”ÆÆĒŽæNBII)NNvųłłŅü‘ŖDŚø}'žƒCHMĶ ¬¬Lyœ€r>€ĀĀ" åņådgĖ£$¬¬ĢńņjŒ_/_ōõ«Ÿ‘‘Ķī=ǹw/Ģ¬ j`kkE»¶žųś¶R©0£ ÅøvM®U“>hVVņŹLCūaooƵk·9N·®m”՝Ž;Ėwy÷”DDFsäȲ³s±··aą€ø»×C*•²÷Æœ>EAA!5é߯M›6P³%55ƒƒC¹qó¹ył˜˜QĖŁ^eĪĒm?tčŃŃ7ÉĶ“ «£ƒµµ­[7£[×¶čč<Ōńųk߉’·wßqUÕoĒ?ē²7Č^‚±œI–J­LĶ‘–š6“įü„–© Ӝiš KMS³„‰+÷ĪnĶ=q"ČT¦līłżqå&qY‚ö¼_/_ٹßsĪsē<÷ū}®^dĄ€ž’Mü¾x™™™¼õęKDEű|Åf._Ž`ī¼`ĢĶMxćõóż;āæNQ`źŚ<Cv¶ZĢčē€ó@h…ĘIżśõ l···ēņåĖōė׏+VpćĘ ƒć¼¼¼8qā½zõbóęĶÄĒĒÓ¤I/^œo\^Ķ·Ņ3†–Å ¤[WK‚„–›B!„øw˜Qܘb“n®®[c£÷—KT•,įV'͔ٓ8söÉÉ©¤uČ`0ŗ„KWŽēäÉ śdB^ƒ:~¾¬X>WWG@— ė7` ėÖķĄŚŚEQHIŃu”›0aĮĮßč“Lē/\eā¤9Œūģ]ƒI·ƒO0qŅüü| MŠ-\“2_ńżĆ„„ąĶ¾ŻōI·9?üĮų ³Šjµ˜™™banFrŹm“Z-&ĪāĖéņjļŽÅ^³Ķ[ö0ļĒ`Z·zŅ`Ņ-xŁF6m坷_ĘÄʰ‹×˜8iœ`ē΃ääębkc„?÷W_/bŌČ·ł`ų›Ež÷ÜŁĖLœ4'ß¶»’?ļ|ē/\„{aDGĒ`ffJNN¹¹ŗBßžž5X¹|&ĪĪÅĻž8rä4ÆōNRR*––ęŲŚZ“‘žIbR _} ķždŃOSŠ,"{ėfbøgĶžē”²EóĒpssāŲńsLœ4;}l͚æX¼‘cĒαvŻ}ͳœœ\fĻYĀ÷ߍaišFžśk?ĘĘFäęjQU•ŁsóŻĢ1¼üR[żyÖ¬ż‹”Ć&“–¦[^nee”oó>iņ Ō‹qc’§ąĄ ^c‰Iŗ¤„……9™ØŖŹwßCÓ¦ X¶ōk,-u3T–.ŻČ–­{x³o7ƒI·ęžAbb2o½łŃ®Éō/’™™Ó©ckIŗ ń/žž&ōėgĆģŁÉ%ż6pˆØ°x‚ƒƒ=z4ēĪćąĮƒÄĘĘāģģ̰aư²²bß¾}śqƒęźÕ«9r„ųųxÜÜÜ9r$fffśų+¦LĒ‹‹M€–ŲĀł“ÉŹŹęļ£g0š3Žyūeō×u±³±Ń-Չ½ÉäÉ?Š ¾ß?’:¾€.IøwßQŽ~{4c?›I÷īĻWXaŌ-[÷0p@O†{;²²³9~ģgŚōt|”žž…? µió$‡, Ļ›słņuBvż3ÓĶüĪ×lųS‰‰¹É˜OńŚ«pp°#7WKTt³fżĪ‚…+ų|Ź\¾žźćbcóŁLŅÓ2łeŃTڶm©O®%$$1zĢ·,_¾™}ūÓ²Åc…ĆŪŪ]÷ÄIsX³ö/V®ųo/7ÜŻ‹ćĢŁ‹lX7—&M`Ė–=¼Óo £ŽŸ[·,¤A}?23³Ų“9”w‡LdĘW õI·øø[ 6kk+ΟĢć×ĒÖ֚¬¬lΜ½Ä{ļOaöģÅ<Ó¦AäęjywčDŅŅ2ųrś(ŗ¾ų,66VdgēĶŌ/~d՟Ūų~Öļ÷T?°aCż5>ā BB³cūĻX[ėf¤xxø”ś˜Bü|8Ņ–5k҈ˆČ)f¤0 ÄUH,Ó¦MĆĮĮ‰'bkūO‚óēĻÓ«W/nÜøĄøqć°¶¶fśō鳖ž>}šīŻ»“ĄČ‘#qrrbĮ‚é>` cźŌ©Œ=ŗ”ŃõZ—h䨑¶ø¹I!„BqļE®(JqKRJ–tsv»ń[\“ē'(\æö€ņņrcńļ_bffŖß–‘‘Éŗõ;iÜØ.£?˜o¼»»3Ÿ̶­{ٲuZ­FĆŃcŗ.k}Ų/ßL*ss3Žzó%Ö¬ŁAFzq5yJ'/iy#{{||<ņ9}ś"YŁŁ šŠ>į`d¤!(0€×^ėĢŚu;øu3 77§r/Oƒu?nˆ~9¦©‰ M›6ą³±ƒy§ßÖoŲUdŅĶŅŅݬ*3SE)š>ćć8|ų­Z=Įw_Óo72ŅąåéŹäIļ±mū>6lŲ]lŅMUU®^äÉfh×.(ßkv¼Õ·Ė—oęŅ„š"“n&&Ęś8mltI%O—±eā„a<žų?˳ڵ "0(€æžŚĻŲ±’ÓϜ“°0§ė‹ĻņŪok =ĀķŪéXYY°aĆnŅŅ2˜0~(mŚüSĢÜŌŌ„Ęź2åó÷éņā’Ų¼9” ĄĪž½Äµk7诫#o¼Ž%ß{©QƋoæł„mŪ÷±~Ćī{Jŗ™™™źßæ•„nI—··›4R¢ 3¦;ŠėÕx“Śā~§;Ÿ%kF0yņd¦OŸžoŪ‡~ˆ±qĮۃģģlFŒĮØQ£šņņĀĢ̌¤¤$bccóĖČČąŻwßeŲ°axyyajjJBBńńńłĘ„¦¦Ņ½{wlllpuu%##ƒˆˆLLL˜1cZ­¶DļŚŻJ4²Ł“f¼ż–M +„•/**Ž­Ūöāą`K§Ž%ūp”2„]¼Ę¾}Ēšör£uė{-P9Μ¹Čį»V„Q£ŗŹä;~Žæ’>ĶĶ›‰dffcgg›«õØYÓ;ßŲÓ§/räļ’+Oއį’v!ģ*ū÷ą…OćčhxwVv6ü±”Šć››™āéåFÓ¦õ LĘø~=Š;ņč#µņ=›&ļ\öö6tīŌ¦Ąė'O^ąš‘SÄĒ'’‘‘‰½½ ..ŽŌ£v­źĘĒÄÜdó–PjÕŖ^äóĄåĖ× Żów¾ÆŃŻ×Ø8õ­M@@=TUå×ßÖ:ĪĪΆj¶ŌoP{邾ę䒽“$K”tS”¹±Q”ŸĆĆ3Ū­yóĘłn‘1dffŃ¢eƒū(Š‚æ .„]åęĶDœ«af¦ūĮtåj„ĮL®ś¾üƒ/Ó;ļķźÕHƒÆ3˜±cWh AėŸ5}¼×®Ż(ó9"oÄ¢Ŗ* Ō3Šh4ŌÆļĒśõ»øu+I_WĶEQ8sj]”Æē]˼„Ć©®d¤«‹nI³_mŸÆå½Æ¬¬,¬¬,ø|å:-[ž^~äNĒŌšpŻ× "R—ĄmŲŠšu477ĆĻχS§ĀJó6„å uks†±į›oK²ĢŌų˜¤;:==½@Ń“““"÷Ńjµ„‡‡{ģÜÜ\®]»Vģø”””|K³³³õ³įŠ÷Pt©‚<ŽŽęžąˆ|¢BTYaaW1r>Z»J'Ż8Įˆ‘Óh×.čKŗķÜyqf•hģČoė:ńń ¼õöhö(<©óōÓMłīŪOõ“žŚ±æ@ɕāLŗĶ˜ń«žÜ@RRJ¾ wKOĖdÄČiŞĒĖĖŸš’ÆNō©SaŒ9z–(閑®;—æ|I·„ÄdŽé7F_ɐ–-ćūļĒāy× ˜ĖW®3bä4zöh_lŅķšįSŒ9‘#ŽŅöļ?^¢÷0xP/ź”ÕŖ%ŚĒÄʗ_zžI‡üśˆ‡›‚2NQZ·(éņRīĢv‹ńüØ{Ļ‘U!–– ('Ż)ĄæcĒ"®GÜļų‰sś:Y]ŗ<Ćwß’N·—†R³†¾¾žxxøąīīŒOu¼>¾¾žō. דi}jÕņfŚōłüöŪjÕņĘŻĆo/7ÜŻiŠ ŽĮšråÉĮĮp‚ĖĮA÷‰@^ķ°²HMÕ=ZY^8;ļˆääŌ"“n KØżņėjöģł›øø[ddf‘‘‘IJŹm}ƒ†ū!o©ÕŻ4]ÓŲ¤ą?Ū'7tēć'Ī2ø|XUu3fŅīĢĀ,éuĢŹŹ&33«@ĀZQ±>eĒ‘#Y„„f”`t-`<ŗÄ[|1cdķ€>@ń-H¾łŚwwYV*„x°8;W£s§6xy»Uv(Eņńń s§64nüą>*¾Ś»c± C’šśæśßxö8N»ē鯻uü|022")9…ˆėŃüōó*vķ:Dæ@&£ IDATcX»Z—hk×.ØĄź—„[Ɍüp:5kzóÉĒż œÓåĪļwKNNe㦼<]‰»EpšĘB“n’Ä^ƒÉ‡Ų~+!™µkw°vŻŽé?†½”Kņ5O+ƆM&$ä0Ļ“iĘÆwĮßæ†žZ݈Œå—_W³mū>śöżˆ­[–ė¹^źÖ–ö탊S«fž™vŽŽö|1õƒ撒R¹q#–å+6³äõÄÅŻbńļ_–k¼¢jSQĪ8»6’£¤ćKœtS”¹qŃ{'ØØ‹‹ż`ŗ}[—xČĢĢ*4!äėė…ÆÆ—žQ?_¶m]Čoæ­!,ģ×#¢Łąø>‰”Ńhųų£ž śśżyw˜š˜°~ķ\~žåOŽ?GdD gĪ^āęĶDż˜¶ĻµäēESĖż‡Ŗ>†B:†š™™¢( éé%yx,ZZšn†F^ĆCņXÅuĶÉÉååīĆ8zģ,uü|ń«ćƒƒ½-;;ģķmJżÉTeÉk˜’œŠQ!Ó:žzŖ)ŌÕŻ8ä]GCɾ<%½ŽBˆņgdß}ē@›gbøu«$Ė.=Ń%Ž> Ļx~p)@o ä †¼kĖóm„[©āĮóČ#µ˜’ćÄŹ£XAÜ×sę•ū)/ Ō1ø$ҐˆČvķ:Dżś~›¬5ląOŪ¶>õ*œąŚµųųxąWŪ§ĄŖ•Q±š”nbBIĻæfķ222éŁ³gĪ^bćĘŻ;~ŽĘ OzŚŁŁšŌSM ¾Ö„sڵļĒŃcg »JŻŗ5 Ž»ńń l޲‡:~¾üśĖ“ĻmŗkՒÖĻōåų‰óœ?„ČD÷¢nݚ%¾¶y,--ŠÜēƒ{óB§lŪ¾Š#÷żū_TEU?S„¤uPJžtprm¾4.vļT ÆY{Ą™™é ó÷ģў÷ßėSāżźųł2aüŠ|Ū’’R9wī2Œų‚©_ĢćµW;ŗĪžn™™Y„ ŗÕŖŁx™\¹Į“/°~ż.6o”C‡§Ėtžō Ć5ėāć /ŹėˆioWöŗ:fw{E%šŅī¼Vܓߝ»rōŲYśöķŹ“©# ¼~ģų¹2Dz™™ėf¢Ķ’qR‰¾ļņf®uÓÓ3055)4™śo…|_!ī‡»1æ,rāåqdd[³p&s€Ā—s/†ćčhÆ/"_XBāŹ•ˆRĒ­xöZ“hæ/^˼¹ØQĆKæŻÜ܌G©E’~=Xæ~ēĪ_)6éfa”KF–),ęĀj¶…‡GąääPäy’M5šF]Żtuōbćnŗ_ttxS?5¶[·¶¬śsķŚ÷£mŪ–xy¹accEJŹm:IHČa7Ŗ«Ÿ"ėååFÓ¦ 8tč$mžķĖóm[beeIDD4+WmÅĘĘJ_«8¾¾ž˜š˜°xÉ:’“SńövĒÅ„ś÷¤ķs-™`3›Ńc¾aēīCԬᅓ“éé\¼ĪŚu;°±±¢Cūā—–>Ó¦¶¶ÖĢłįĪæ¢ļ>zśL›7‡āāāHlģMƒ×³}‡žtyń|Ŗ{™™ÅīŻ‡Ł»ļ(~µ}xį…’/k­ćļĖŽ}Géüā`‚033åÕŽ©YӛA_įó)s zśuZµzo/7rrrø~=š­Ūö’“Ɛ!EhÕź ĢĶ͘4ł._Ž NE!6öėÖļ$6V—$*M÷Ҽ›žĒҾŻSXYYšģ³ĶõI±ŠņŌSMiöd#ž“‚£GĻ€½½ ™™Ł\¾Īś »±°0§Ļ/ŗ_ƽ֙…?­ čé×hŁ¢ ^^®¤„eÅÖm{166bš ŽśstźŲšļgżĪ'£æ&4ōoź×÷#++›C‡Oqšą‰B—ש£»&½_Į³Ļ4ĒĀœ.]ŚŠ°Ałž‚āaÖė+“ŒŸXŠY£µ/€ Ą  ģu5+Ž#Ą[@éf3Ō¬iĀ‹°³“„›āįsāÄyrsµ¼;ø·žCP## ­[?Iß>] 9Ljj66V¤¦¦vń}ūv%°ež*Ažu|ž~_¾śz·ŠXķS}Žx‘ž=Śė’ßŅŅ‚žżz°zĶ_;v–ģģżģ¬+WuŽÆO¾Ņ0† ĄžzŖ)k×ķ ''·ČšĪ÷bĮ‚lŲR䘹?¾B£Ń`jbĀųĻŽeŲūŸóę۟`jj‚§§+īnĪxzéžėććAĖåū••ŖŖ,[¾ FC×®Ļé·wėśĖ—o&xŁFŚ=hpßóē/ór÷ lOHHāōé‹Ō®UŁ³Ē–ūu52Ņ0~ü O’c151ĮĆÓ„Ąµj޼qzwy¶lŻĖsmß*ņ<· ļņ¾xÉ:BB¹’Ļ?MĮŹŹ¢ų7ō/Ö6VÄÄ<Ģ«Äé&Zõ“{Łńž’nŽžO_‹Ł3MUw/ūWe=z“ĒŅŅ‚ļgżĪK7䛍ęķķĪŲ1ƒ<ؗ~Ūóm[2’Ē‰Ģšµ˜+·äļģ\Wzv`̧ƒņŸ_“šsFś [¶īįŪ™æ`ogĆĄ=ńōtćżįSJ«½ 3gŽęó)słsõv}“6ś÷ÄŻŻ™?W~Ļ”©óŲ¹ó6ģŅļgiiN``Ō_ß¾ŗ(..Ž/żšOĒ|Khčvģ8čf:Ķża<7īfłŠ-öńĮ[\ŗβe›ō‰D33S:ulĶĉC‹yv·Q#ŽęFd,;wäģŁK€®`kĶšŽ ś:Ö֖,\ø‚ew>łŻų† ü:äõ%ų<Ü]ųeŃT¦Nū‘E?ÆB«ÕźPŸŁß„]‡~\ænxfŸ!½_ķČÉSX¹j+ ļĢšs¬fWįI7## KĻ`Śōł¬śsß}’›ž5cc#š7kĢčOę» ˜4qĪĪ,^²ž%¬×o751!  #F¼E³fōŪó ĒNšü6ībķŗ€®źKf0qŅ"" vŠæ'aa×Ųø)„ł –ŗDœ$Ż„(Įƒl°³Ó0bä-rs‹Ɠ7k¬%š;°(qŲūČčRŚj™²ųw'œœdM©āįdj¦»‡¾\ČJ›±cēūcc#ŒŒ4D\Ī—ąŹÓ¾żS“o’TÅ RėŹ×דC‡Nróf¢ž™$ļCŪØØ8lmóĻSU•ˆˆh,,ĢŹ=1ŗęE•ZŃÅšĻß»woG½zµY±r+ēĻ_!ņF Ā®²wßQżEQčÜ©5ßĶüss³2ĒxčŠI®\‰ y³Ęxzøč·?żTSŖU³cĖ–=$$&œ-vūv:' ŌØVQŃjµÄĘŽ$4ōļ ¹'ļÜ© žž5Y¾|gĻ^&*:Ž‹—ĀŁ·’˜~Œ¢(“kÄģļĒH~ŻNM+“tQž¬lĆ3č@÷ż”p«ąŖØ»å–üf*## ŁŁ9äęj+¬A”Ø ŌIÕ<ĆļeĻ{žX=}Ś4Ž1ńoźŻė1Ŗŗ¬¬l’ÉÕęāäčPlł¬ģln%“‘‘‰­­ÅnŽO 3+wē2u…ĢŹŹ&6ö&––źhiµZSHI¹„„9v÷ü‹*7WKLl:蘚šąźźXņń&„„o&Pč¹MM v’ŻtģjÕģŠ,j_RFF<Ü]Šų/%Iō””³sµB_³°0ĒĖÓ¼Ģē°““Š×Ģ+/vvÖåZĻ”4¬­- 4;(Š••E©¦W›˜ė›7”†ƒƒ]‰’ÓBˆĀ=ß֜ą?œéÓ7ž„ÄŅĪZsś/ K¼…÷{‰„Šh<Į½~ųR7+¾żÖSYR*„xøYZZ°iĆ<~łu5'N^ 2"†3g/å«IŻ©ckę’8Q’”ž7_L‹ęz„ˆČ8ALl<¹¹ŗß5jx±n͜"ļ³+ZTTĆ?˜J“&¢ĶÕņ包ś•' »?ķŁ£=“'\"Y•˜ššąć恏Mš<ŹcŻX¹jk”I·’ŹĢĢbõŻź¦Š=G8yźB¾×Æ\ xł¦|I·’ØQƋI‡Ńöł·Y¼d}±öŹ‹©‰ ŽŽīx{»Ó“i?֕•«¶ź“nUŖŖ¤¤¤ŹóĢĆM«* ø×„”!éąęt 6zļPß-ĖqÄĆÅĖӕ7^ļBߏE!žš53cū6WŽé“æ’Īŗ‡#8Æ=3@p(z)ƽ3jĶŃ-u½÷¢É¦¦šŁX{ŽyŪ¦”Ķ%„āĮåģ\†æ™o[FF&—/_gņēsY»n»v¢U«']rćµW;ńŚ«ōćsrr¹q#–„Į˜žåBfĶ^̸ϊ¬Ójµdg•7ģ›vy#–ł?N"  ™™YÜŗ•DVV6¶vÖŲŁZ£ŃT™Ģ ®ąćO¾*v•»»3..ՈŽŽCUÕ2­lڼ%TßTnõšæ wųš).]ŗN­Rvw­u§ģLttł~ų¶xÉ:Ž{  “G½Sč8''<<]øz5’¬ģģbLTt99¹ųųxTv(¢‚Ø(ßŗŗ¶ŲW–c”)é i?Qs•@ͲK<źÖ­É—ÓGUvBńŸāåeĢŚÕ.LšœÄsSJŃ`įn ŗŖõˆN§k@ܝķ„exž@}t Ź>›ŲĒǘē9ŅøŃż]²/„•iöœ%¬Zµ•_~žBæ,ĄÜ܌G­Ķ›ovcė¶½œæp…V­žąŠ”“|2śk† }ƒŽ[éĒQ½ŗ;ļ ėƗ3~āÜł+ś×,,ĢHĻČ4˜(Šˆˆ)²~Ö½ruŃÕu{ėŃ<łDCŖU³ĒŽŽ;;ģķmp°·„¶Ÿ5|½*½v–Ēė^\­ēÜ\- ÉŲŲX—)į¼ €™ßަ]» ƒc¾śź'~˜»”eĖ7ńчżJuü¼¦qå½2'o•Tx1×JUUnŽLÄĀĀüHøl¼ÓxćÉ'Vr$¢‚„©¤Œ)ėAʜtsvL‰ŚóŠVa÷R€E!„åĀÄDaü8{Z“0ēżį·ˆæ·¢Ą: ąuēO»;Ū²Ø;Šu@MŅŃ5d0æóĒ °A·|Õ(æyŗt¶`Ę—Õ°µ­³„ā~:~ā<¤Kē6^»pį*öwŠéŪŲXqüÄy¶mߗ/é–ēāÅkØŖšÆó|͚Žüż÷¶nŪKŪēZź·«ŖŹĢļ~-ß7sGūöA“jõ»vŅ7NKHL!11™¬¬’|uü|Y“h µkUƐ8J¢YóĘXX˜³bå^飁ĒÆ_`ŒV«eöœÅdffńĢ3ĶĖt¾ųųvģ<€••]:·ĮĀĀp9ž=:ÜIŗmęĆQļ”8ѧÕjłaī€nEyzüńśŲŲX±vķ^ķŻ‘Ķ3xžł –“’r›6mš•ėł+JHč¾ųāGŒŒ4łŗóЇFŽõ 7·ēo—õ@eNŗ8¹·<µēsE”ü*Z !„āž<ß֜}{ܙ6=‰…?„”¢»iqL€źwžTc¦|īĄ³Ļ”½~§B<ˆ^čš4Ó¦Ļē’›Ąź5ŪńõńÄÉўŪiœ?…›vćą`GŪ¶ŗd™æ ź×÷cń’u\¾|Fźāä䀢č:v®žs;Š¢äKtėś+Vlįķw>„sē6ųÕö!55Š=Gøz5²Bf"ķÜy;2gög¼Ō­m¾×ŅÓ3ˆŠŠcÓęPĘO˜Åōé ˜ūĆųr=’‚+ŲpgęRaŚ“~’Įƒzį`oĖĒõgģg3y”Ó@ŌÆƒ—·īnNhµ*·n%ršŠI}֏?ź_¦ŲV¬ÜBvv]ŗEDd VV|śIŁjß²xÉ:BB9¦y³Fł–lĒĘŽäåėęęäpķŚ ""cųäćåžØUĀ87·Ążåq rIŗøøeMŠ‹1m‹®@‹B!*‘ĀäIö¼ŅӒQ%päȽŌz«:LM °aŌH[Ģ̤x›āæĖĒǃ•Ėæć‹éóپ}?ééś×¬­-y¦M3>łxwfŗ)ŠĀŅ%_ńł”¹lŚŹžĒõ捍hŌØ.ƒõ¢uė'õ۟}¦9ßĻü”ƾYÄņå›QUFCófXµā;z¼ņ~¹æÆ={Ž9w‹ÆYX˜S³¦7ƒõböœ%\¹Qīē»x°‹×ŠćķõO氁zāēēĆüłĖ8tų'NžĻ7ÖĶ͉W{wdŲŠ7šõõ,SlĖ–mtÉŠātėśS¦Ī#8xc¾¤Ū­[I¬Y[°œ©‰ NNt}ńY†Ó`¬‘1ś$“!nnNEĘԧϋԬéżƒ9pą§N…å{ŻÅőž=Śóް>„®EWW®Dū=s÷LOŠ5®Ų½ūPqÖ֖8:ŚÓ„sŽxćE‚Ź5VQ؄:»EN-ÆĆ•ė]kTŌ>_¢=¢@åµ½B!D>Z­Ź²åé|ūm/•ńėŠdj¢šņĖ–¼’ž->>åöY”B<“Z-‰‰)¤¤ÜĘŚŚ{{Ūbė%'§’””‚‰‰ ¶˜™]3++›˜˜xķ±“,{=ĪĀĢž½˜qf1 OśöéZ ł{“?WogĢŲ™śī¬UIRR*))©˜™™bgoóĄŌ%« ÉÉ©$'˵URœQnN€£ēÓ×Ėė€åžQqL̾gU» ]k2!„BTZ­ŹÖm™Ģ˜‘ıćU{ꛩ‰B—-ł-¾¾’lBˆ‡]RR*={½ĻߟŃo333ÅĀ܌Ĥż6O–.żš:~¾…kÉė¹x1¼Ųs~üQŒå±U€VU”®®-6—ēA+d}FlōžOŖõуB!PUŲ¶=ß§±m[YU(’ęėkL÷—­čó†..ņ $„’%Z­–óēÆpšąIbćnr;-ƒģ¬lll¬°µ±ĀænM‚05-zfŌöæöYÄrČ<ÆöīTéP…UƒŖņ”«{Ėiå}Ü Iŗ©ŖŖÄĘģżSĪq|!„B”¤$•Ķ›Ó^žFHHŖz’c°³ShŪ֒žŻ- 2§„ĶքB!„(;UYéģÖüeEQŹżNøĀnkćāBmŌ\e7Šø¢Ī!„Bˆņs#*‡ŠLBB3 Ķ$ņF¹µ=ĶĒŌD”IS‚‚Ģ 4' ĄSÉ“ !„BˆūLįo”¬§]\Z§VĢį+P\\؇š«ģŹæ‰B!*Ō•+9ü}4“‹s¹x1‹K—søt)‡ōō’čįnL­ŚĘŌŖeLķZĘmļ”ō”ŖŖ•B!„B!„(/źm`²³«ł—ŠņųY璁Mŗå‰ßė©f«ST…×xŽB!„B!ĘŠĀņœ\Fzx“¼VŁĮ”ÅC“¤ŠŚÓT«š-м²cB!„B!„„vś¾‹K`heR𤀪Ŗšø˜=ŻAł x¤²ćB!„B!„ESą“Ŗ2ĪŁ­Å EQŌŹŽ§¼Ŗ*š†*Ō×(jCUQź¢ā‰\[!„B!„B<“(Ü@嬪rR“ŠŖ=™‘ktĘŪ»Eze÷ ’ÄP Ū`fooć£Õj|5(¾Z­ÖKŃ(ŽØ8Ŗą¬€#`X `€Š=ņõB!„B!DŁØ($Žł[¤(ÆB< 7U­zS£ŃDhQÆ*ŠŃ•¤¤[į~~2+5ź‡Š’„˜_iÄ÷"IEND®B`‚libwebsockets-4.3.5/doc-assets/lws-crypto-overview.svg000066400000000000000000000174471476025525100231640ustar00rootroot00000000000000 OpenSSL mbedTLS and derivitives genhash, genrsa, genaes, genec JOSE, JWS, JWK, JWE TLS-library-specificand cipher-specifickeys using EVPor bignum TLS library-independentmetadata +binary key elements JWK JSON keycreation and parsing libwebsockets libwebsockets-4.3.5/doc-assets/lws-detailed-latency-example.png000066400000000000000000001432211476025525100246140ustar00rootroot00000000000000‰PNG  IHDR X'bKGD’’’ ½§“ IDATxœģŻy\Tõž?š÷ ū*ŠŹ".‰©Inø+Z¶Ü\nݬ›eŪ÷›×ņV¦fuė—¶˜–ä’–I]ĖR,µō«¦)²øb*"ā†,ĀĆ6Ą³ĻļƒĆa˜f†3s†įõ|šĒœe>Ÿ÷™9ēĢ›s>ēóhµZīłĄŁ Įą,Ž!Įą,Ž!Įą,Ž!Įą,Ž!Įą,Ž!Įą,Ž!Įą,Ž!Įą,Ž!Įą,Ž!Įą,Ž!Įą,°‰]»v ‚“'Oźę”—— ‚   öj_żµ@ ČĪĪ6XȧŸ~źėė˼NNN^³fÕńl޼Y \»vĶŅ7v°^蚐`€MÄÄÄ;Į:yņ¤···X,fg9'Ož Œˆˆ0XHļŽ½‡ Ƽę+ŃA‚V@‚6:pą@½kśōéįįįģ™§Nš:uŖ@ Š{»\.'¢ œ?Ž>p ŲJLLLZZšJ„b&Ož<9uźŌØØ(]‚uóęĶŅŅŅččh"Z¶lYpppRRŅ„ ¼¼¼–.]J¬[„‹/^µjUmm­@ aaaL YYY³gĻšņņš2eŹ©S§¬ˆ3;;ū™gžéßææ§§gxxų믿^[[Ė,²¢^fCN:5qāD//ÆAƒ}õÕWģź²²²üńĄĄ@//Æ!C†¬^½šˆöļß/ŅÓÓŁk>ųąƒćʍ³b‹€w®|N+::ś‡~øtéŅųńć%IvvöŌ©S?śč#f&Ób,"’H$‹-Z·n݈#˜+X:~ų”Z­Ž¾}{VV¹ŗŗQffę”)S"""āććżüüāćć|šĮ³gĻŽ3Ę¢8 ļ¹ēž¹sēęēēÆ^½:##ćōéÓV×+‘HŽxćõė×:ō×_}óĶ7ļ½÷ŽG}”ˆŅÓÓ£££ĆĆĆׯ_vóęM¦äY³fõķŪwėÖ­ńńńL!·nŻJNNÖM@'£°¼¼<"Z»v­V«=pą€———\.æ~ż:åēēkµŚēŸŽßß_„RiµZę’URR»„O>łÄĒLJyżžūļwė֍½ō”‡źßææT*e&Õjõˆ#žž÷æ fÓ¦MD”››ŪnŲD”••e]½Ģ†œ?^·žČ‘#ēϟϼž6mZhhØī½zėėė[WWĒL¾żöŪžžž×LJ[„`+ c.S­Õj™XĢL¦VqqqAAīž  …ęž”jjj”JåW_}åÉņÅ_TUUYäņåĖ?ųąƒēŸž?žČČČ8~ü8Éd2«ėõóócæÅĶĶ)M"‘ØÕź>}ś,9((č‰'žŲŗu+żöŪo .“t[ĄA  ŲPtttBB¹sē.]ŗō駟23§NśĶ7ߜ8q‚īöę`…nŻŗ¹øø¼śź«Æ½öZƒÜ±cĒo¼ńę›o2“/^“Q½®®®ÅÅÅĘVxķµ×bbbžśėÆ­[·Nš4iųšį–V Ų“?­Y³F«ÕNš4‰™õÖ[oķŽ½ŪŪŪ{ģŲ±fåįįĮ¾Ŗäé雚šŗvķZ«#Ōjµŗ9»wļ¶Q½LƹråJ]ŖlŃŃŃ÷ß’ņåĖOž<¹}ūv 7,°””C‡öīŻūąĮƒcƌф£Göõõ=xšą“iÓÜÜÜĢ,*""B.—oÜøqҤIžžž#FŒųņĖ/£¢¢¢¢¢-ZŌ·oßŖŖ*ęāÓ_|a¬cĒŽ±{ļ֭ی3f̘ńŻwßĶž=»_æ~æžśėO?żÄy½:k×®:uź„ –.]Ś·oßŪ·ogff~óĶ7ŗ^}õÕE‹uļŽż©§ž2ó“GÄs#{pvO>ł$½õÖ[ģ™3fĢ ¢•+Wźę,]ŗ4((Hļ½ģ§U*Ղ AŸ>}˜™¹¹¹O?żtÆ^½ÜŻŻūōé3gΜ£G ƒyŠPODD„V«-++›;wn@@€ŸŸß£>Ź4W’łēŸ­«·ķ†<żōÓ&LŠMfdd̚5«[·nžžžC† a.ļ锗—ŃāÅ‹Ūż`Ą‘ “Z­}3:0ź‡~xłå—sss‡Źw,`=$X!777//oįĀ…‘‘‘ą;č$XįĮqā3YRR’œœŻ¢· …Āčč蔔”?üP£Ńœ8qāÕW_żź«Æ¤R©ÆÆoJJŹŲ±cżüü˜•årł7ß|cNęūŲc=öŲcĢ»bbbF5zōč+W® >œ]`=ŗuė&  `Ńr·œœ\.?yņä¼yó˜ģŹ:Ó¦MKKK“Éd—/_–H$Ė—/÷šš8uꄦ¦²Ó)WW×ŲŲXn‹U*•ėÖ­3fLÆ^½<=='NœHDׯ_·zsl W°œœD"Q«Õ}:öĄōéÓårłŁ³g322FŽ•’’ŅÆ_æņņņiÓ¦éÖ  ͽ‚cf±Ė—/ßŗuėźÕ«'MšäēēWUU5uźT™L֑-²)$XN. ĄÕÕµøøø#… >¼gĻžÉÉÉĢ…„éÓ§ļŽ½»oß¾īīīS¦L±i±;vģxć7Ž|óMfņāŋŁ;Ą-B'ēįįŠ‘¾ALLLbbā©S§t™PFFƾ}ū&L˜ąķķm»bµZmccc@@€ī]»wļ6V ‡‡‡#\ŁB‚ąüÖ®][[[;aĀ„mŪ¶%&&nŻŗõµ×^³“éÓ§Ÿ?¾±±‘y²/22Ņßß?%%…}Š ķ+f̘ńŻwß]½zU*•ž÷æ’żé§ŸŒ•!—Ė7nÜxžüy‹ž”än€³ "‡jõܫߓˆŒŒų`óęĶ‰Äœ•ÅbqŸ>}.\ųÜsĻyxxŒ5Šó*ŗ ōäN¢†jęŃ<¾£hGq|%X¹yó¦J„zé„—"## ® —Ė=<<ģ•C`Ü"p*‹/^µjUmm­@ aaa C‡?~¼R©dÖ9vģ˜P(üśėÆ_|ńEfĢ™1cƂŋѲeĖ‚ƒƒ“’’&L˜ąååµtéŅv«Š;yņd//Ænݺ͚5ėźÕ«Ę‚dŖ8|ųšØQ£<==ūõė÷å—_ź-m€±ņMl`Ē?O+iœB‰¶„“ä8qŚ8^>‡ŖŖŖ’ūß~~~łłłłłłwīÜŃjµ—.]rwwēw“ZmyyyPPЬY³“ZmEEÅ®]»ˆč?žČĻĻÆŖŖŅjµK—.õšš2dČüqēĪ[·n™SűcĒ\\\|šĮ’ūæ’KHHø÷Ž{ ¹téRww÷!C†¤„„I$’ļæ’ŽŻŻ}Ė–-ŗ„m0]¾± ä ,pH°tŽ’żnŻŗéĶ\·n@ HLL|ųį‡CCC+**˜ł)))D”‘‘”[“¹b”””dQ&L8p R©d& ŻÜÜ^}õUƒogŖųóĻ?us^}õÕąą`ęķh·|cČ “Įč/^œ˜˜8sęL…B‘˜˜Ų³gO+»ŗŗĘĘƚ_øL&»pįĀņåĖ]]›S‹~żśEGGŸ8qĀŲ[„Bį< ›|ųᇷlŁRPP0hŠ ¶˜S¾EhkhƒŠ%‚łóēĖåņ‘#G²3ƒ…B ’‰D¢Ńh‚ƒƒŁ3ƒƒƒ«««½Åßß_—-15QII‰ĮĢ)ߢ “5$X]BYYŁāŋ###3337nÜČmįB”°¬¬LÆF&m2H"‘466ź&™ŌŖOŸ>V—oÓ “,gćįį!“ÉŲs“Zķ /¼ąīīž˜˜øxńāwŽy'++‹Ć*<==ĒægĻ•JÅĢ)**:uźTLLŒ‰B~łåŻė„„„\³Żņ9ߥB‚ąl"""ärłĘϟ?ĻäėÖ­;~üųŽ;zōč±f͚aƆ=óĢ3MMMVńńĒēēē?ņČ#ūöķŪ±cĒ<ąķķ½|łrc%ųųų¬X±bƆ G}å•W8°bÅ öMC=¦Ėē|;ŠĒöRkÕ%ŚĒł“j„|}*•jĮ‚ OŸ>Lļæ’¾n…k×®y{{/\øPkä)Ā   ‹Ŗ`f=ztҤIžžž~~~3gĪĢÉÉ1öv¦ŠsēĪ?ŽĆĆ#,,,..NoiŪw+ßōņC倽-[¶lĒŽzmŖœ np Ēp‹€cø‚NE"”Ƈłŗ<$XąT)7—ļ  ĖC‚Ą1$Xй}śé§¾¾¾Ģėäää5kÖšķ/ sil¤;ų‚eŅ$>œļ ŗ†Ž½{6Œyœœ¼yóęwß}—ߐ`€“Hč_’ā;–ø8J°är¹‡‡‡³Ę°`Į‚ Ų¢d«į!@§“lŁ²ąąąĆ‡5ŹÓÓ³_æ~_~ł„ŽŅ¤¤¤ &xyy-]ŗ”™ģرɓ'{yyuėÖmÖ¬YWÆ^eę744 :tüųńJ„R·¦P(üśėÆõź½xń¢@ 8}ś43¹iÓ&@šĮ0“7oއ6ƒEegg?óĢ3żū÷÷ōō żõ×kkkuåčn.^¼xÕŖUµµµ@ „……uąī\Įč¬jjj–,Yņć?Žwß}{÷ī}ķµ×|||.\Č,•H$‹-Z·n݈#är9%&&žķo›6mŚÆæžŚŠŠ°bŊ)S¦\¾|¹’ž>>>»vķš8qā’ū’o͚5b±ųłēŸŸ9sę¢E‹ō*ŒŒ HNNŽŠŠ"¢ääd//Æäädfirr²‹‹ĖŌ©SÅ`]Q………÷ÜsĻܹsóóóWÆ^‘‘”ĖĢt>üšCµZ½}ūvfüiCGŪ_ƒ ŲBI‰–5Z(t-%%Z"ś³õ鈹 ōēŸźę¼śź«ĮĮĮJ„R·4))‰ż– & 8YA«Õŗ¹¹½śź«ŗÖ­['~ųįŠŠŠŠŠ ƒUĻž=;66V«ÕŖÕźīŻ»/Y²ÄÕÕµ¾¾^«Õ>żōÓ&L`G؃uEéÉČČ ¢¬¬,fņ“O>ńńńa^æ’žūŻŗu3Q£}ą!@g% xąŻäĆ?\VVVPPĄLŗŗŗĘĘĘź–Źd² .<õŌSŗė:żśõ‹ŽŽ>qā„nÅ‹?ņČ#3gĪ].—Ÿ={6%%eäȑAAAQQQ)))999åååÓ¦Mc‡ÄŽĮꢖ/_žĮ<’üóüńGFFĘńćljH&“™ń!ń @g%‘Hu“LjÕ§Oƒ+…²²2ö̲²2&-ÓM.^¼822233sćʍʼ>|xĻž=““““““™‹LÓ§Og&ŻŻŻ§L™bž&˜YŌŽ;Žxć7ß|süųń÷ŻwŸ§§§łUš @'öĖ/æč^'$$„„„ 0ĄąšžžžćĒß³gJ„bę:u*&&†™Ōjµ/¼š‚»»{bbāāŋßy禩x[ &&&11ńŌ©Sŗ¬(##cß¾}&Lšöö6?~sŠŅjµŗwķŽ½ŪXŽpe @gåćć³bŊ 6=zō•W^9pąĄŠ+L<:÷ńĒēēē?ņČ#ūöķŪ±cĒ<ąķķ½|łrféŗuėŽ?¾cĒŽ=z¬Y³fŲ°aĻ<óLSS“Į¢¦OŸ~žüłĘĘFę)æČČH’””öżA3µ[”@ ˜1cĘwß}wõźU©Tśß’ž÷§Ÿ~2VZDD„\.ßøqćłóē%ˆv€nĄI„„P]ßA°Ųį.–ÆÆļ޽{ßxćĢĢĢ^½zÅÅÅżĖd_«3fĢ8räČŹ•+ēĶ›ēęęółēŸ÷ļߟˆ222žóŸ’¼÷Ž{Ģ-ww÷]»vEFF.Y²dĖ–-m‹b²Ÿ±cĒśūū‘P(ŒŽŽ>pą€ –9EmŻŗõõ×_Ÿ2eŠZ­ŽŠŠśķ·ß˜žښ3gĪ‚ >łä“źźźŠŠŠāābKćį„@«ÕņR1€-ˆD“kµéŹĄ -[¶lĒŽzmŖ:®©‰ŠŠhČnKķrp‹ZŌŌŠ”C|Ńł!Įą,€N)..ŽóūƒĄ$XC‚Ą1$XC‚Ą1$XC‚Ą1$XC‚Ą1$XC‚Ą1$XC‚Ą1$X`½•+łŽĄ!!Įą,Ž9J‚•’’ņŅK/Ż{ļ½ŽŽŽįįį‹-‹Åŗ„Ē“Ö³gOöŪÅbńüłó{ōčįėėūČ#äęęŚ} š¹ņ@³>śØ®®īłēŸļׯßÕ«W7oŽ|äȑĢĢL???Ż:ėÖ­ėŪ·/óŚĆĆC7_©T>ōŠCb±8..Ī××wÕŖU±±±YYYAAAöŽ ĒI°āć欛9rä³Ļ>»gĻž—_~Y7sƌ÷ßŪ÷&$$dff&''O›6ˆ&Ož¾vķŚøø8;D ĒQn²³+"Š%¢’’½ÕµZ­ŽĢōéӇɮˆ(,,lśōéū÷ļ·U¬&9J‚„ēĢ™3D4|ųpöĢØØ(__ß'žx"//O7?'''""‚½ęšįĆoß¾ŻŌŌdŸhŲ1ĮŖ®®~ūķ·G=kÖ,fŽææ’æ’żļųųųC‡-_¾<))iņäÉ„„„ŗõ»wļĪ.”{÷īZ­V"‘˜®ˆ„555‰D"ƒ‹D";Wc/B ŽV‚TP_šÖŁ·% ”€x,”¼¼\©Tvö­0³Ū“½ćĘÆ¦¦¦G}4'''--mŠ A×9yņdLLĢ;ļ¼³fĶ"źÕ«×ƒ>øk×.Ż «WÆžĻž#‰BBBģ78†Œrъk»Ä,å;€®båJō5źlD"ڵ‹–ā<Ś1ŽuK.—?žųć—/_>v옱슈¢££ūõėwįĀf²G555ģjjjA@@€mĆp:ÕĀŹK÷ķä;ŠNρ,„Rłä“Ož9sęȑ#£G6½²J„Ģ눈ˆœœöŅģģģzyyŁ*V'„(ź}ŹųŽ¢Ós”K„R=żōÓIII‡š4iRŪ„ģÉ?žųC$Mœ8‘™œ={vqqń‰'˜É’’’äää9sęŲ!l€¶„¬… īŪ·oĮ‚{÷īef4hŌØQD4sęĢŠŠŠ‘#Gśłł„§§’ż÷}ūö}óĶ7™Õž}öŁuėÖĶ›7ļÓO?e:õ÷÷_¶lo]›£$XēĪ#¢ųųųųųxŻĢE‹m޼™ˆf̘±k×®}ūöI„Ґ_|ń£>źÕ«³š››[bbā’%K–,Y¢P(¢¢¢мųā( Vvv¶‰„K—.]jņy†   ;Ń"‚£“ĮpH°8† €cH°8† €cH°8† €cH°ĄzMŽU|‡ąˆ`€õžæ‰ļ,Ž!Įą,Ž!Įą,Ž!Įą,Ž!Įą,Ž!Įą,Ž!Įą,Ž!Įą,Ž!Įą,Ž!Į¤„ń€-!Į=Źw¶„ lØŖŠvļę;ˆ®d˾#"B‚6%—ӝ;|ѕܺÅw@DH°8‡ €cH°8† €cH°8† €cH°8† €cH°8† €cH°8† €cH°8† Ą±¤§“RÉw–;wŽļ ,Ērš Éd|a¹={ųŽĄ‘ Įבlū IDAT袶mć;ē…  ‹ŹÉį;ē… €cH°8† €cH°8† €cH°Ą†*„åi#¶ņ€½!ĮŅŌ w)ßQŲ,Ž!Įą,Ž!Įą,ē”vQš!Įp&§{ļ€ 8 ±˜D"¾ƒ ""W¾ąĘÕ«T_O””|Ē€+XœC‚Ą1$XC‚Ą1$XC‚Ą1$XC‚ĶRRčüy¾ƒp H°ŗØ&ŸJ½9R)56ņ €³A‚ŠE`5ß!8-GI°RRR^zé„{ļ½×ŪŪ;<<|Ń¢Eb±˜½‚X,ž?~=|}}yä‘ÜÜ\ó—€­‡Ÿą;ā(c~ōŃGuuuĻ?’|æ~ż®^½ŗyóę#GŽdffśłł‘R©|蔇Äbq\\œÆÆļŖU«bcc³²²‚‚‚Ś] vq€(†ļ(…£$XńńńƒÖMŽ9ņŁgŸŻ³gĻĖ/æLD ™™™ÉÉÉÓ¦M#¢É“'‡‡‡Æ]»6..®Ż„ĄÆ-[čÕWł8uł255ѤI|ĒąĄå!;»"¢ŲŲX"*))a&8ЧO&"¢°°°éÓ§ļ߿ߜ„ĄÆ[·ųŽ ³Q»(ų” Uź·w\ G’8Į99J‚„ēĢ™3D4|ųpf2'''""‚½ĀšįĆoß¾ŻŌŌŌīR€ĪåŌŌϤ‚z¾£pŸ}ĘwŠ%9b‚U]]żöŪo=zÖ¬Yŗ9Ż»wgÆÓ½{w­V+‘HŚ]jB^^žīuSS“H$2øH$±s5ö"”Šn ģo”ónJ°ŗ™L.“É:ūV sJŠh4¼Ē —ĖyĮ JØØØP«Õ}+Ģ,Į†“¦±±1&&¦gĻž7oŽŌĶģŁ³ē?’łOöjŸ}öóńµ»ųµd‰]«»TV2+5Ī®U‚IųF¬“²BT_gŻ{ǤZpȵ]łĄmJJūoLIŃ8Šü:&e…UkµŚ+,ZŻ,ģĄlZ‘sĆaĖ Ēŗ‚%—ĖüńĖ—/;vlŠ Aŗł=zōØ©©aÆYSS#Ś] ŠIåēSFßA€U(ĮR*•O>łä™3gŽ92zōhö¢ˆˆˆœœöœģģģzyyµ» “Ŗ®¦āb¾ƒ«8J‚„R©ž~śé¤¤¤C‡MjóģļģŁ³‹‹‹OœhīÅ®¤¤$99yΜ9ę,»y’}¾#°¤›7ł:GI°.\øoß¾łóēWTTģ½ėņåĖĢŅgŸ}vųšįóęĶūį‡öģŁóŲcłūū/[¶Ģœ„`7¬¦Ģ`oJ%µū8£P«õ6t&øžW®üÅwDH°Ąž"¹œļ :§ćĒ©¶–ļ Ą H°ĄŽ.^$…~OŃ`–ĢLjhą;0,°ŽĒó€éjTŚä/łĄ†`õ̹L]ß­Ųö8ƒNqß§©‰jjØÉEŚčÖŃpåīN>Ęa1N~],°­K1ėł8sż:9B׿.f÷8Éw,Žn=N~],g Ō†¦ń4C‚ą „õ”głŽš!ĮĪ\ŠŽĄwĄ 8śońń|GŠ,ąL}ĄūW*“ap4°-„k“šŌ|Gįčīšpō“"ńAkH° sūżwŹĢä;pjēīż¹ČżßQ@'ƒ €ēĪńA×Pšn’JÓÓI£±µą@`šcϾ#č®>h’JDė…® ǐ`p €ÅŹŹhÓ&¾ƒčœ¤Ņ.q E‚žżüŅhH”°w„vPZJ2™m«ŠjåZUER©­ G‚Z påąA*+ć;{9{–®_·UįH°ĄØƒ<<}ēv„£ļĒŽńA'#Śž`€Q©©|GąNx*ß!“ć,Ęį4Žh{B‚–ih Ķ›ł¢Ć.L’œļ€3ī’”R(ę; 8žny~üf™KßQtH°Ą2 UVņV{U7å4ś:Ćļ10=«ÕgčŅŃńwĖFļJ ٶ{rO/Ür5g„ōōō#GŽœ={¶“““©©©gĻž÷Żw_llģ¬Y³üżżm"€Ī¦M“r%ßA€Ķ¬^M_~Éw\0uK«Õ&$$Œ=zģŲ±Ÿ}öYEEEHHHDD„››Ū±cĒž{ī¹ŠŠŠ Ł-\°Zqų ¾ChVÜ7MIJ¾£€NĢqvę.„¦†p{#J%„„éĻLK#„ŻO·oóŠÓ •–:’īdź Öøqć ęĶ›÷õ×_7ĪĶĶ½“¼¼üĄ;wī2dČO?ż4wī\‡ ’q€(†ļ(ˆˆn…• ī'rkUCggīR**Ø®ŽØ;ßq8™ŒŽ„I“ZĶų€y½vķŚ§Ÿ~ś‹/¾ˆżć?lp£¦† łĀfx¹Ģ 4Uō°Łš `‰«WķWWF†żźźˆģlŹĪę;GU_Oyy|]ƒY Öłóē~ųaęõʍ—.]ŚŌŌōā‹/®Y³Ę–±7nߦ3gųĀfxŁ“ZaĶՁ‡xØڰēŠ;vŲÆ®ŽŲ»—öīå;GUZJĒót f%XÕÕÕAAADtåŹ•’’’—_~Y üóŸ’ĢĘI][näN¾C»*ó,¼Ń“ćiv:é‰äśX'Ż00Y V÷īŻĖŹŹˆ(999((hŲ°aD¤V« …m£Ē&»Äw`Wõ®5•¾ܖyÉIO$}tĆĄśˆ™łėÆæFEEŁ26ąŒż{°‚FCø,ŽI5†Ų°éx'źaĖžl}°45Qi)ĒeŖÕ6|2I`³¢­bV‚Õæ’ .Čåņōōōfę/æüņ%†Œ¢ĀǾį;ąŲ;tąĒe66ڰ ßĖ£lV“UĢJ°z¹÷ļßæ[·n\Ē`™ŗšŒĘī%|GķÆæØ¢‚ļ ģ+#ƒJļŌxäoU;Fr¹]k4Փ»Īß’žwc‹öļßĻ]0“öĶõ«Óõį;p\™™@½zń‡åę’FC}ģŌxźņSõٳ4iyxŲÆF³,‰DĀž¬««»vķš››ŪčŃ£m𦠀žś‹ž~šļ8ŗ’Ļ?ē;–ß'śßAt~f%X©©©zs***žzź©… ršJ” Öét+õõö¾Ä Šq äźJ„„b×’_’Tj«’++©gO[ĪØ©!µŚ¶Uč4yW‘ żÕtÄbņó³Y4Ŗ«³młZŅ*|$DŻm[ ß,hƒÅÖ«WÆ 6|ņÉ'ÜFīąAŹĶå; %'Sv6-Z„d8xĢV%Æ^m«’u¶m#Ö°ŗ¶õ×ųM!ž‰5¬A -˜¾ļ(lĪŹ‹ˆBBBņ0¤“c«©”¬,¾ƒ°½źčĶĻ'NšA×ĆÉgŽ/lŖ¤Ē„w-ßQ8+,•Jõå—_4ˆŪh€[”–Ęw¶'Škpž6“‹“Ļ_ŲŌķ 4¹_%ßQ8³Ś`;–=©R©ŠŠŠźźźöb@QólŪF/æÜjŽHDYYōČ#<`žģńۈ^n=čü:׿ӟj:y’ŲøēåQu5‘›ń÷€½“żÉs¾ĶaV‚5tčPö¤§§ē?žń§Ÿ~zšąĮ¶‰ŹŁääčĻ‘J©°P,QÜfß'UÉ\³šę9 3Éd¤×DE"”²2"Œßꌞä9_ę0+Įڱc‡­ć3„§Óõė4oßq8ŌTŖÆ§Y³Zę$$А!üd":D Ų£®7čāESē«śzāq@„Kł¬'f/%2µĶõõ”•Eę<ĶÉcĘXP{B‰ÅöīĖō>čąļŠ1dÉf˜ĶśFīĄ£Ŗ*‹ł©Z#PWްCEEEŌŠ`‡z:½†**ā;čĀ:~ŗ®­%‘Ø£a(•ö{JŌ¦¬G}ōܹs¦ßßŠŠšÅ_|żõלFķør…žś‹ŸŖeĀĘ+ĆģPџRq±źčōJJų ć§ė[·ØM‡›««£+W:Z‡L%XC‡‰‰=zōڵkĻ;×ŌŌÄĢ×jµEEE{÷ī}į…BBB~žłēqćĘŁ%Z°žLÖ”.ā.ŪĆÓD”•E7¬ŗÜ|į.‰9–¶ßČńć¤Ńšmœ?ODtčžĻ\ŽÉ~€tL%XėׯæzõjTTŌŖU«&MšäķķķėėčęęÖæ’¹sēŽøqć›o¾¹|łņųńćķ1XG©ģP³ś‹¹ ÅöŗBēķ*,“ņ¶ĖĶ›]nhd×öÉĢ“_Æōöqó&Ńŋś?7 E'ūŅi§ Vxxų¦M›ŹŹŹRRRÖ¬Yó?’ó?O>łäņåĖ·oߞŸŸŸ––öÜsϹøøŲ'VųņKŗ{‘ĆößņŗBDåå“uk;+ß¾ķX—^”ėųųcż‚9‡؈ćļ*‚†“ÉśĶÓ&Ł(ą¾å©é]ńrÆÄ’ö’%åöi€uėH2šR…°|ėVZ¾Üʟ¶+Wh’~JK£ÄĖ™?żDä0;€YOzzzĘĘĘĘĘĘŚ8hG}=iµś3‹‹),ŒˆØØˆÜÜ($ÄčŪ+[w§pmT D¤V·?¾˜JE õAźWJd| ĮÕÖźæŠ‘zVŖ]fü¶ÖĢ9¬„ībšB W{4[Ŗq“i„fż ˜Vß­˜ČŒhLj»«8 iäīõz3åīõŅæķg⤧v•7ø7¶;¢Ÿé]Q!”)…ķ÷V7X3÷ÓźźHćŖŠŌR)Õ֒·w«Ÿ6…‚¤Rņõm§…‚I.oÕü‹ŁRŁša§·~}ó‹µkŪłŁ :€¾8× EĘ=æK{šE§§;‡˜&r+¬ļkt,ŅĘą…/Op]Š1/š.ĆÄIOX˜jļ§ĢÜ[:B$²ģž Ćž“!ĮźōjjčēŸ-Xæ`@ŖEåßøA½ĆĒ,A¶ ĄŹ¦»ŽO”ąąQšŽhūEŲ?$3«S(ؼœ³ŅڲōH±…J·Ņ‹÷õ‚©Ž¼ƒør…T*¾ƒøĖҽŃüõ ‡čŗ¹F“įVnßn~aŃIŲN 1]rZÕ×Sj*9cteµšāćłļ² V§WSCZ°¾„gŽė×ķ‘`=jĮŹtżŗĶBį•\Īs‚Õö‹°HfV'—;‚Uį&*ńµx_G‚Åvå )•|q—ķ¬‚!ś‡īÕ«f½Q—`Yt6†“BL—|ö¬Y ÖĮƒś­bģ Vg„·oŲ@DtķZWĒaÆ w:Ģžc×®µsžżī;£‹ŒÅykŹv"śķ·ŽÄeŠLÖüp]ŠŽOF›!µļR4Ēwe%ķÜit©–āćM­`ģK¼½aēĪ=Į“>ĘdÅ,åE÷ü^ąy-+„›\ĄžGöķki¢ßܳC»G¢1ééTRb“M޳‡ū2y‡«³Ŗ®nÕnńĪ"¢†’Éšē44pßKŠ®p¦|ńžÆ‰Ó(*2•1h4$‘pVWCCĖE{ƒ­nŪö) kZĖģįm5u+#²aŸMĖ}Ą‘ØÕ³ń Éå”V`d3īŅ;lŁGœA ••±ŹÆ'­¶„½°ī0Ńj­iqßŌdqG¦{…0ö%ÖÜ)+ėP§õ~†+Vxč7$WeRƊ&aƒŌƒ›HĘ6ʦŌjs/ĖUTPMMók‘Øyß`‰lķī$õõ$—›»ÉõśŸ½)ę\¶Ļš˜•`;öūļæoĄĄ%&.ĪŌŅoæå> a_'ųö[ŗšV“HLµį“HhŁ2›ŌkzļÕY¹Ņ&µsåģYŽ|ūm«„é÷ß-{ūŹ•$•Ruµž|©ŌÜœķēŸéÖ-‹ßåPŅ^Éw6Q\lA3š~0wM+väąåqøI³¬€€€ „††.Z“č zC²\i’vF2Ÿ±1Ć%S’ģJ†Z@{C%XĢaw*3Ū¬“˦˜—gż­“ĘĘĪŚ›‡§PēĄ4B­1ņ{Ą‘zamYw£MåM'ß죀żZć¢, M7§vK£t³Jµ+³¬ćĒßøqć_’ś×ž={FŒ1yņäŸ~śIÖīÅkøėĘHĪn/§¤ž_VFuuFßUeeNy_ųå°;WmłmŗżeźH7M"±įC^6Åį)Ō9œ=KDT2$٦µT¹–ß 9il©éńpŁGūµĘ]v}°YeYzYō°—}˜ŪkŠ A_|ńEqqqBB‚»»ū /¼śÖ[o]»vͦńuŖ«);»C%lŪFŁŁ­īV€³ŗpĖŲŽ5Šć_e%]ø`“źŚŚ¶ˆč¤Ńß0 Ļ‘X§ŗŚ†OŅY-;»åĘń®]¼†BTSÓ”'EˆØ¼¼sܼ¶¬‘»»»ū3Ļ<ółēŸGGG×ŌŌlŲ°aŲ°a³gĻ.īą8ŚĄ5™¬£]€ääPeeGčŹĖmÕQPa”ššģ—ø3·ŌKJģT3ÉĖć;‚ĪI&sÄG¹«ŖZڐšŽĒLÖŃö» ŽŅW»i$Xõõõß~ūķØQ£&NœX]]żõ×_———’÷æ’½téҼyól"pīąA£wC Üoœ†ŽŅ¢c[5I-/'ƒWÉčņe;EåŅÓiÉ. <~Üš|‘ČT³b';81öĖ7±=k\ŗŌžµµrgjB®·mŪ%56Zܒ=럒1eݧ—žŽņ,¤łÄb>[ø“™ Vzzś‚ BBBŽxć”C‡ž8qāŹ•+ƽöZļŽ½_zé„oæżö\‡[uŠD¢7ŽxcҤI^^^  u×–Ē“Ö³gOö b±xžüł=zōšõõ}ä‘GrĶģ¶ (/ēņ?QYQ£«µ @ø&óßQo§VdŪƄƮöŁ“īq;ō m5ō*ą;kTūåč?/—“øé–Ÿ‚{Ysīöm}mTUuŻ;!fĶ9vģŲ¾}ū¾ū¼ņJPPŽŅššščččĘqūöķ_żuÜøq“&MJ1Ґ{Żŗu}ūöe^{xxčę+•ʇzH,ĒÅÅłśś®Zµ*666++«mØ]Š… ”“CōOnJ«‘Zāїćhłė/ņsŠq~;‡+¾'²į’w ŹMQßßņ:1‘čˆˆ"źč‰,V:śŃ¾£°XNß?/‰”‡[Ķ”H诿hÖ,+ĖtāS(ņP/Å8KßµoŸÖœW®tݶ¼f%Xū÷ļŸ9s¦‹‹‹Į„÷Żwßqc‹Ķ6yņäņņr"ڰaƒ±kƌ÷ßŪł ™™™ÉÉÉÓ¦McŠ _»vm·}zXeļ^zņÉVsjkéĀź×ϵ׸‰«#®{ēOµīķ'NpnŒŲKōdūė-UVRm-uėft…¶‡ ·$ż²ŹÜnĻM(sŸGd—cĻ–ŠĘ;Õ^]TŌÜ"ēvdĖvQy9³ų'¾• š›j4TZJĘw@ŽåęvŽB`kfŻ"œ3gŽ±ģŠ³8„fEŅŲŲØÕõR|ׁśōéĆdWD6}śōżū÷s¢UŅŅōē44Pf¦j—ŗJźūZß·±>·:‘Ņm¾°»ŚŚvśżo{˜p«”gakEÕż§j\mÖć»UŽėT{uEEó}%qx{¦n„"«Ż¼Łüō†VkM «ó<Š8³ŅšU«V½žśėz3.\ųłēŸŪ $£¢¢¢||||}}Ÿx≹™”GŲ«łśśč^ …Böó•ēĻ·¼vuuÕŻē=p€Ų%ōļß_÷ŚĆĆĆŪŪ[7éćÓRxÆ^½„BaņŻrfnūqŸd@@€^ ÷ü^āV ·š»»;»c—«««ķ¾ĶŠŠPOOƒ‹:¾GŻsĻ=D“~½õ%˜ū¾}|ZF%ōīŻŪĶĶM7éīīĪŽ@&0"rqqõ÷÷'¢s稢B’sØœqŻÆy|;ö×Ä^W”‹ĮEB” ū<Ģ,*u/Ģ =¾~=]¼H%%äīīØ ‰½ć¹¹¹²÷‡‹[N_ģӈ±Ļ!ß3·$ü ūs`o…»{K ...ģ’É;rd1½³éĪ“rUWw3Vūk Æ«£ŹJŠ×½oč}ąģ#Ėą™öČ""ęš).¦ÜܖĻįȑ–­`šŪ²OĀ...ĢVܼIk×¶ŖW÷£P1öHiĄmæ»ķü««)?æ‡n5___vxĮĮĮD”zDįSĶžŽÜÜÜŲæ8ģŠōJš÷oy  OŸV?1žžž—bÖß Ļ÷ȑę^U{ö왕å¦KVŁGS«½ŚfĢJ°|||ī“>»øø˜żŚStttæ~ż.Üķ ŗG5­o°×ŌŌöīād*<Š„½;zS#.<ć IDAT”3ö¾ØT¶ÜLé`Wõ`Œ#?Ü`ģ.ƒJeóQöŅӉuɏÄbSƒd;²FACmæVV}½mļQŠÅ­ĘŸ6ÖU„¢Ÿ¦6l k4ī䩨ȬJJH|Ļū:ūX+āž’” ĮĶ{ƒīžZŪćΊ³DŪļŻüńŖu¬øĻØņh(éaųģ`ėsY ÖŌ©SćāāŲw‹¤Ré—_~Łńެ¦R©t’-EDDä“n=pą@ö?N¦ÄėVmXG› wĘn„äņ–¦÷ēĻóŠórä1RŒ B¢PŲ¼…Gjj«>~īÜ”_~±m6R/¬­ܼƒHlūDĖ;­ŗ›:sĘšjj5ķŽŻ*‹5”^X›×7Õą"3;`+( āHž÷uö±V4Ź!<¹@&ķ×¼7č:øl{ÜYq–hū½[1†•Ć)½ko>;Ųś\gV‚õŃGŻŗukšąĮoæżö† –-[6xšą‚‚‚Ū6±¶ Uė<žųć‘H4qāDf’«ēÄŻ\“¤¤$99yΜĪ×S‹MÉż+Ŗ‡¤żłg«™IIf½Wļ]`;ģŸlM„¢Ż»[ĶY³†ī¶lttfö SZŹ}<}G[¶Š?mė9y‹±7ęå=<5ŅkžZęZœÕæÕP·Ri‡zŗĻ NŖ 6•§K’ō$·7qwų-F??ū)*j'„cY\Üü½lßnź-—/ė’ƐœTäÉ]×½mXżIęēÓ_ŠļŠCb–Ū\2™žuDęf„AWc¶Q}ȍŖQI—/SJ’oEżČĢü¤1°X2ĄŌ~oĻ,™ŁÖØQ£Nœ8ńĪ;ļ¬_æ^­V»ŗŗFGGÆ]»väȑ\Å”Õjūķ7"ŹĢĢ$¢#GŽōźÕ+$$dŹ”)D4sęĢŠŠŠ‘#Gśłł„§§’ż÷}ūö}óĶ7™÷>ūģ³ėÖ­›7oާŸ~Źt4źļļælŁ2®bsj7™Ā沬õŹjڊŽųqee¤voҐ ļ«]DīķÆēģnß&V»ŪŅjIļĪ~¾­F}Öi;č”ŽĪ¦Õźß$Ņø6ļģ¤¼œXķ²Œjj"w®w«Ū·õcÖM²ēkI«ŖnŻróó3:Ō£¤§ŃkØŹČį©Õź_~– k}Dģ9*I$¤Ŗj"²ø“ZĻr•—©&••Dn&–7«Ø ŻīÜöCŠj-gB„"”ōśó¹u‹ ‹æā¶½wDc#ŻmēM*•[œģa‰I"!•Šņó‰ī>ū®Õź‡$‘“”ÉØõ,o¶śF4.ĘóÓ}ŗ]ŃĢaFMŒ¬Õ’FCZ7Ƨh©”ņņØ"R$ŽŪ›¦¹÷v]„„äęFjusŅ”qm9Tźzߢ¤ņŖ—–H$Tķ_ĄīŠłŠu'V 4jF#hļīj÷F„„ČšśDö~\×ܱĒ—œœ,•JĖŹŹ¤RiRRRdd$‡qØÕź¹sēĪ;—y2ńµ×^›;wīźÕ«™„3fĢČŹŹZ¹råæžõƃ¾ųā‹ēϟļÕ«³ŌĶĶ-11166vɒ%/¾ųbPPPjjjHH‡įu5ļ½§?篒sŻ;Ćv5ž~¬M•ąŒ~żUŽŽĪVTD¬G‰ˆ®æŲ¼†ćģ$Ÿ}Öjņ½÷š·‚=_ģRz:ņ+»†ÕFł˜Ć«OŸā7ųxż9ĶOį™c÷nŹ0tśģ3ż\¤]99Äz2KŪ¶™5öĪīŻTŁņˆ$•–Ҷmו÷ŲWZWżKw41»¢JeźŅ‘™**('‡NMż¬żUŪŠ;Rt÷³žXŁveQt›³)<źo=e vÉ=õߝÕķTł˜Ćz‹²žqˆs…YW°t<==ŁO4p‡«kŪDu–.]ŗŌ䘙AAA;wī“A\ŽEÜ;[[¢¦»„3jfō¼3šˆŖ^TÖ{čģ¾-v'~2ASE"¢!ÄüÓśB•#ōŠ]ŠJÅåš6rż:ŃĶ›Ģw(fč`ēĘ å彦PŲ¶O‘ˆ”.Ö“h»uā>D£m’žė×) €z÷¶¾„ņrҶ7Ä@a!Ń}ķ¬#•’X¬‰Ś½Iڽł Ļ&›{}‹­v —ŸmEė”J÷ÓĘPy4HÜÅDśh^^ūKƒoÅ\Tß?[#jiŚÓę^Į:|ųšóĻ?;±5›z®Ū«q“Q:ėé™;1ͽ1Äl/²×Ģ¢[^× k®<ļnŪf"5ÕŖX¬%“™Ū:G‡µ>ŽYŪ ‡Q«M}#¶~1=½ Nm·.wŒ]ūØ=|˜’’H$jMc²²Ś|Ҝvob1]m3x‡Ā§¦|Ü”¶+_½Śź§ÄLŗ_N\xHķ&Óż“1d~ŽĘ IJjæ Cł£Ēd锽*7»v?nV‚µ~żśĒ{,+++00p@k6Ś'ļ&¾>{-óŗ1(æŹŻh+åŹūSõęØÕōŪoś«Yóo=zēÖ“įżJ©Żd¹ĆŚ|%vt'š›+ĮÉÉśwśĢ—Ł”O@ļZvįXkJė\ÄŪmKnZŃŌN³µgĻv¾‘ƒ««[nnŽßĪŽX_OgĻŅńć͒ٶ=Ō %Ҿ¹\Ŧū’Y$²`üD½~7ŲrFķŌŪ­xTŠ ¼‰­öŅŅÉæ©ļ6äjūÓ¦Ŗn<³ŅÄÆ”}˜•`mړ髯¾ŗ|łņoæżöKk¶ŽŚ„ņ’Ö„7w ¦ō«np1:NCžæ™Z­Žƒ$sŸ”ęK{yS`qūėuBj”²¼·;t2©6ü'åÜŗE¬ž„-SݧCŸĄ„Ö[PfMi—øłģÄD esŌÜÓi¶¶  ó öÕŠŠŅØCŅ·½Q.§‚ŗq£ł¢`Ū³A“ QŽĶŒv^ęŃ]z¬«³ ]šTjt°ÅŹ~—ō‘äźźfU’V{iż€+äŅ|%ĄĄO›PS{oŗ‰_Cū0+Į*--;w®­C‹Ü™Šźnąõēß·ŗØÆæ6µ“<ņˆxši« $•óÉéÓō×l{Īū¬y*Oéé©«9Į`™—¶`xS•§T<¦¹oö“M܄eDM ęū 8r„NŸÖļYC,,;=šƒmē¤ÓT­‹J÷µ¾oč„tõYėOSęHI10óÆ~{ä>F®·pJ×==˜u„­”6m¢ŽźkšÓ.w€ˆī<š£“w>}÷ݚ»ŗķ³‡wbšæūĢ§Ģżvlń=ęM’ŽZw£Ÿoø7ģÓ£7U»—éŽāČĢJ°FŒqķŚ5[‡Ńø(%-“īś’}Čz|Ž·­¶W”JŅ „uQi„*"‹IŠņąx­_±VĄéćĪ`¤Õ6éj5©<„ņśŅ[ż/+ŠŖ\¬½ÕZ£PŖhžēŪ`™j7£’DKŪ“{hµw’…e?õŻ.…‚.\ŠļjĮ­P£š«Ņhš¤—(5jŻæļJI½{•Į7s}µø˜T*żęŽZFķҲ%’Ą<›\ķŽÜŠDÖ]’G¾®Īpƒqƒ3k½Ke ڬh©eW1x9¤ķiJGÖ³X+ģŠł¤¢Āp’ j”RKęuo•ʐę=“Ł£˜–XM«6Uʒ-­–**ˆ5Ÿ¹Ōn2„WĖåö§­k ¦uQ‘ÖMŃx‡ˆärҸɉ“ŌśHŌø)ue²S RśHŌī2Ż÷hś!PǬ! )¤u•“^G'ZĆ÷RŌ. Q™†Øł-ķ’66rÜ7‡™ĢJ°āāāŽzė-ŻŠ4ą .śŃÄŅ’Ø_>V>ŪSSc`ø‰ćĒ©rtK÷Ž—‡üŖr·kƒAą„^•JĻś²ńvźBŗŠózå(ózm#sŹ7\…QYIŸ|Ņź9yŌn²šūĪź&/śQ¢hŌŻõ øœŪż¬Į7ź]jźøĆś¢9噿ø1°¹³¶Æ_½J¬!}Ū‘Õ’`©›yćĪtXIŌÆźŽ5@ęėcįc­öLƒƒ›ųī._¶¦Ļˆ¦ī¢:#ƒyģ߯?§dœž,cG¢éß"’ ø,ėŽŅ˜ßą%C3Y•’Ŗ ’“b”E}OܞścA­:ę0ͬkīܹ¹¹¹ćĒ÷ńń nĶÖń9“cĒ8(¤r°Y=(s5ÄRŁøƒķÆd{ĒŽŃļæó„S‰ w2¤FqÖš©B4ʂŖ$ņ I$ęö€zģ?’Ŗź”•QĪĄƒVģ·ĆNÖ Z®Lˆ‡ź·® ĻPyZüų€ŚU^1ś˜Ņ«®rGMŽ­åČ#\tˆ³“O8ØT¾Ä% ,1q­ŚjyįśGĮsš=™Õ!ÄsĻ=gė8ŗ‚³g锇:Zˆd@Q{ż„0ƒhF“»Vū*ļOķ™ĖAAsö,UUŃOš‡ó‹õ{ug(üŖÅ)¾ņöŗß1On.‘?UD¤’v–™o)æ/•dT_O ™3øčٳ¤V“‹Å]—s¦¢‚Цž=kīź¹|”Q8H7Y}O:Ń ö Ҿ¹jO# ŒS»(jī;Tquų½ķ,;›ÜĢčž©©4ĖŹļ ōU OõTRM~öåŻĖ\¦Ę °Ī¾ś×’ss-ĀSf%Xqqq¶Ž:Ø1ų¶‡Ś›y™IĀ`±dš…ąĀ ņĆ-4ä=łyŲĶiM= üźVTP~~ĒĀGR5¢’ĻŽ›‡¹Q æÆ¶–zßÜn»Ż^/ŲŲ`l6³ˆ bBC†IīĢwó=7“›ł&dī$_ņe˜võ“—Ąu’OO2sõζæf/€żūM_“üĢOV¾žļÅÖ?ų™Ÿ¬ŻłļĆĆ`i`8|X½Lb² 6Š(" 0Q›Ó(ŠŹÜū`Ł”>ÄZȤĮo4 ŒfŖ–“D}¦± c 3BęSOŹ0“lr2ֈ ™ļĄČHf–«@"āØõ:Ó~vż{ž•I!‰Ū-`ÆƊVģ6łĆ rmrœžW 2ę”C »W¢ŽY˜äfvż{±&yčPĪŠ¦ö+ĀX—?*aFƒĒĮ„½ē>żć"ĪŗéwŅ/ÉćōiŁ2ˆ—~ī=[|+Åg€$ÅZ”g.hŻ/Į„½TmJ掓Ž–ö*x=™„`|ˆR°¾łĶoŽyē===?ųĮ’ ÖęĶ›»%ä1B äŌ¢Ę/ŻSb gĻęL*øäD¶óy6ŖE P1Łč rüø •€wå1ŲSä —ō…”x^*ŽK3»tup¼^8؁\Ģ\£Ņ $ˆ„©–š0fręŠŌ p]¶Ÿ›J$öĶ…{Æ7÷Je fgŃQQ Vww÷—æüe£1­šüłób6ØMń®9Ā7X)k28!ŗåæ’»øņ§¶œĄē3“=U`ęŹ1p|>Qū×ų¼ņŠl»W¹įüye/”[N­~…6Ėļ’ņĖ¢Šżå/²_Y,Ž®ć~s‘‘„8rDzBOżąYr2Ö¬”ŖG»Ņ¢,«Õ fZ‰NLL45ÉļiYašƒ,§aąāįŃ ’m<Ė7u/Ąšlpƒ‘ƒfVOšĒå[ĻŁĻˆd¤Ę㌠Łģ ŸœÉ¾yKüHčü5XVÜł HR”óČLLȐ×\0ģVrį¦!ėŁ9WšÕOˆĪžQ’VšĶ¦alLT…SSĄčd ÷ĆÄY넌2,äø\2ĢOĶ!k|‚>U²PŠļ32`Pčā…„`Ż|óĶ>śh˜—Ż‘ ˆ§žzź¶ŪnSL° įĆ»¾%ų} }šŠšß<=„_ü"óĖ£GSŸĻ<(\?¢~6Ō)å%zų¶g$œ„³³9ĄYušĘŖ+RžµĪ®<œ1į}>8xP+‰äD0˜uOOłå$ÖŚņ¬M Ä>PÓćøQ ~QėR-}…hpk"g×£YĘ\ijöCŚŖ‘C©Hėūß’~__ßŗuė~ųa†ažzź©«®ŗźüłó<ņˆĀā!E38 v Ä?‡Źæ9Z8Xø’ÆWģ[xÅ a*ŅÕĮd–·b te†p,VU±>nś]®Ś±°QĮe®ģވ5Ķd' -PšÖtõN 1čó •“Ą?Z¢›]Z‘ˆ1Z÷x$væł"‡Ž¹Ø'OIĘ#sę&Œµ(ŪW|\µc"ƒ88)ė]l²ēC‡­^½ś‰'ž iś©§žš?ž‡~øjÕ*E…C$pšTĄ±)į]5½AŽģ<éLo(Õr–ĒZ¹Œ0£MŽŁĖ%&.œŗå…Œoģ—‹Čä'D±~ź:qDŅ9ßvhÖ¬ =kvoų—œö3)MoP0ģĪŌ-/:ĻŹū;3SR‚9ĻŗRoĀ ŻĪ³%V’‡żūEČpA¢!æł3↾Ó y& U.ĪŁ¾.eūŠĻł¶CTØ˜iż›2o yėņĖ/ß³gO(šžž…Būöķ[æ~½¢’!JŠæķæˆz—kŻ~­‘QćóÆč€¤oˆw­ŖŹ>”ßżeKŁżWŹW—1ˆõÆ}MŃKäēÜ9‰'ę›1ĪĖŽ›™)c€2’žā‹ĀCéÜüĆó µ ~į‘4ٵ$œ‘Ńvų 23Dī„™õū>ŗäEĮ‘rly-iz%łÖVÓqlf}źY@’™6×Tu ֒HÜß_ @m GŚG&®{%ĻŪ×ČHq!gW¤1ž¹DĀ-“} bļŠX³Ćyyqūƒ£7’A|įĒ÷‰tūźŃG¾|]čquāne²<{Ļ~.%dhž°{Ցd[rÉļ^u¤Ų)‘ĮæKHņŲc¼/o’eāĆ”!€ą¢sŻw’gĮś'oų£˜9ć^u$”®'ĻĒ™e5Cz.ĀƇ·–WŽÅ²…a䏆B4Ģ2¶œ[÷”–éŖL/ ֐™!N}čZљÉ4…¢ŠX° 7MU¹×+=ēg`3lb([32„-³ci:ߎOÄdč 6J‰ėM‰{åLLvxˆ<ž}bšIU2Ž×£­“ń[&T/šOW%¤z$ŒŃp•Ä܈Ąéx¤¢!§ŻqÖH³UÅY3ŃVQ¤X B$)󅩊ń}8#ĆX#Ą¬Č“7ūADVūCõŽ`sqy»č?'nDÄ<{YKŒę%~Ķžo|{ ĪD³"`ņ†Ś‡€¬~ˆ±¢ŲįCE'ĒL>Nłwm g¢‰ÜÖėœ‰¢¬™.œ‰f-iņ3¶c ¼mY Į„w ]ė¶÷T$s’4…‹«ŖDņ)X?žń›ššāĮ®6lŲŠÄĆf³żėæžėg?ūYµäDdfņŚ?ē9:pgīw|¤HfgįłēÅ>sć/‹Ŗ|÷né™OčŖČä-¢$óxt{‹™š‚Į¾Ļ„?h[(øøŸ$…>g7ļö-˜ėĒ7=ŻsŪO‹’Ź}ŁAĀ$[ŌȂѡ¢„`S×¼NŌ1:»ywvŠX™š*);xd­§XS¢ĪY0šż½“Ūvp{qOÅ<œ¹I¶ŖÄ`Īsģź«ÆžźWæ ?ųĮ¾ųÅ/666&Y­ÖuėÖŻsĻ=Š ˆįé’)ŪE³«?„ō—xßreY‘żūaėV­…P‹ą²œ&ŻŻĄŠ@·N‚Õä]Ńm%ė‹­œ"Ni\—O×ńšńÕź]U*3ė$F:q¬¬™›×½ „G„Øs»,(“¢-ł©5U{žādˆ*Ʋąõ4ÄŻ,Vd[ż.Ąvi5Œt“õˤ FŁ‚£×½Z0Ŗ{åюŽMłĖŒŻöģĀž[«ģĖģ«ög`C‹rFH™¶†:”Żˆp®ŻŸOÉČĶĄ@uꗮŻåS:_Ūo½õÖ[o½B”ŠwæūŻ––µ¤B ąé:fā¤ĶŪ8W}Xsęž7ž®ž²1Wy¤tꔂX~ŚJÕ źī¦ ˆÖI3Õā]ѽąÜÖb+?|øTńÄćZy<]ĒŹCĮZ/1ąEw7liÖDŽ·ul,CÖ»g-v –Ä÷Su4#ƒ=ˁǓЫśĻ (X£«÷HV°N[ŗ;ėė¤ FWß©bmł‹¹Wé€Ī_fśźīUöeŽÕū€32įEVZųŽ›¶†)›g`ęŅż‹·J8ńÜ9€™_zWtdĶuØ4¢l°~žóŸ£v%#““-Zdgō¦?toŹ ×īYw3ŗīÅ{Gdćē?—~.MĆKŃ7rŁ—(Ķł;Kż"'n’”’ÉI8u‹ õdpĖļK¬ĮQ(+öČHIA§Tćƒ xO(ņ~‰Œ_’’\U‘µŽŁ+÷L^[t4µ‰¶µ28ŁŃ¶Šō–4„É+v•^­rō(¹CSÄ*ș3gbé7Łß’żßĖ-RåC©TeŚkš͵éöŖT­bĶā+A_RyaY“Z×2“Édm|Hkpb¢čŗTµ,xͳ"³mŹN¤uDXųr\>Cą`ÓD'½€±…˜ö ¤ÕC’Ąq`µ]!k!X³pZµh“ø%ŅäLHUļ2±–<¢Q±O­°’“Œ%Ę-yīŸÆ@ ^\õcM3Ö±œ ™œ‘a-€Š8ʦxO`ĪDQ īXƒ³Øü}d–™y6Lތ1LUŒćŖE:cpF†Ė±8Ć™ æŠø£ƒ.^E٧”¢©BE)X>Ÿļī»ļ>$ž ¬ ąō¶G/a1(æ^˜™‹ZėÅŽ5G¬tMö÷Gnäę·r:fWWŹ”ąÜŻZĒn«Ć‡!„O}Ŗč W¼k£JŅłŌįé§Ū5µ_ūŗŁ¹ œžWŃf»óŠw†œŖ Žń+j™€™Ōä//:tæČK¹ż(¤(Œl}Vdm‰Ģ33łŌqÆbž^¬ō…”CŌįw¾ó·ŪŻÓÓcµZŸ–.]zäāÄ7„‚ŸƒøZÕ[Œ ĪRķZ*ąj(ų«‰dÓ×§µéÄ£W+Jøs ,uKŒ¬/ Rtu€1“įNłoöh[qńŹē,«ģ 2\¢óĘ.VĄĆ¤T"mź„4ĻĻ—ö‘µ“­pÄĪDQ"ŅršĶēĆāŚn f(°«¢4¤-[¶|üńĒšąƒ~ė[ßśę7æłć’xĒŽŪ¶mSXŲü(m¶WŪ¹ņd&FtĖKJŽė3Wļæ#" ->—‘Ń«ŒåEųŻļ~wbb¾öµÆMNNžö·æD"Ū¶m{ņÉ'Æb µ‰ „Ąćn‹GċĆüœV@WE³¾BÓō÷Ć„—j-„ņų[s¾·?«„<œ†‡”£#ńyD½7Ģr…hpižģrŽPбł„­2Öģąœ+„_ƒGØeÄ=škD¹EŹ‰ĢƒH.x“õā“ߥ…gŹTÅüPD‚2xõī‚Įå‘üˆZĮZæ~żwŽ ‹åńĒŸ …Bo¾łęüłóÆb™— ,jˆō®|#žyĘ<Nw Š5̐õ…3¹ŖÉo~£µŖpaż¹åz5|ƒwʛe §¾e=E”#’)åžŻ»·p÷źĆ„ä-ę3±īÆ"Kƚ§żKōåõœD¤żP’hĖT°ż°FzźęœKODżģ@SĀbl› āąŅ^¶¬Ā¦ė‰FTƒp¼;A nnżXk)”āć!$eƒZ€ą²3`ŅGL^­9æįU˜]+e3”hžc #Eə6X¦.Ū#¦˜“¾Ź hō.ՅoĮLFLU4Ś¢ˆ½‚V€² “BäŪ"¬«+œY)$×£Aę DĆģtż ĄUZ ¢ƒƒ)"ĀT>"óĒl”@Ō9ˆcŁtJq[ ź|&Jbš<†æ`”“³Į½DTr“@gp„nMF a{Ū)€O”XOéLO\"C=Œ™ ‹‰'æ¤ÉY¾×C>ė›ßü¦jr Ć÷¾ßżnāó£l–­ęĮŗŽ-~tū÷¾›ü÷Ķ7aĮ őN8 L9›^õn¢YTŗ–įmOG _Ā©p³!I˜qt! Uć“”dswō(ĄÕ„TÉąµĻĖX[ßÅŻ•“7ü·?¹˜ŽņŗYźFœ äS°¾óļØ&GÅćõ'Õ#—6P”šTähŖ^‘Ą/$YTvJaųÕåMóDW'ŖółŖå¬Y , 33°0÷«WćD[eˆĆI4g_HW¹x€Êźmv0Õ!Vdöµ8œ@>>²^` ±FāĀp–5—äQEжõD€¦Ŗ £Ŗ hŸ>_įJRµŁŠ»É[¤”,+TV† @“rŽ(cš)żŽ~Uæ c÷né¹čŻĘŁīµ©—NēfEāČĶ΂ÔDÅņó{īį0<ż“lµ:šųć%×Ó±{Ä&wĪ‘’ø³ä†L\ū§¢Ź»W„­Eä¾õ™"%Ęqµ@ōŌŠāžäū€jō÷C@Ž ķšÜ_"™]’7­EHqģ˜Ö ś,-q8äO2åéŖ4ėi·B! ­ażGC_Ö vČō®9B’‰¼„ū÷ ¬‚萱Õļ*W¹ŽņZźsē“–@8ė^æ_Ś¹Ńłc•ĖĆy…Ą=7Kģģ'!Ń Ćł¢~"€ ––Ųķ (X—TŚ[•Ū Į 0Öp¬QéÓT°ĀĘ gĶį²S°FW‹ņՒ†±R™j*†žŠJz›ĪČHV°"óGYSE+XīĮžt’@ēYҐ¦€ –Ž@ )•īMņlµØĢoĄ˜Ød¬Ešź«ęĢ<żóŸ§>wwĆŌ@÷¦gž‘» +ܳĪ+×ń€H¤@ˆHĖdhq©¦ļ_žs&Æ0¢­S¾²­ŃÅšz SĘó¬,)wœŁM‰p_ŃÖ©hS™Ųm B ‚U6Čåś.;Įz}gÉĮģlqVqb’8>_Ā09cČ"-ņu0˜H£¬·ĖžH'£B‚’·Āaš×Śõé$H™£œ!Ÿu=Ɲ×x±Äh.čyI1UŃ`ÓDĤ łm$)ć܊ßHWe k!Š2˜ĖĒęs(QK×ä4‚£$mL¬·1y#ƒ ‰ō¬…`ŅC}r&ZéčźŅҬI„SÄa9÷Ŗ *XeĆ /h-ĮÜę‡?,ś”gŸMū÷Ą"<ĀäåŻwįšįÄg—K§łćŽ®|ž®–ĆH»§·åŒ,0yćĖŠwß#Ź]½·įpO›‚öm:dtė³… U:½ ‡{7įōõÆI«$°üT2±Bto/žI'šQäY$¹{e,½ąpĄø@Āõ¹ÅŃ£…Ė„ (/Hå ˼"ė¼Acįt÷p6Ś2U굑9k&W’%ūūHz¢0$tu0{Õ°Dq|b@K/ dŗ‡ĢAž,"C£{Ķ!å©d™W±–I·¹h»$ĪHĻ SmD>čŖČŲĶČžŽ»Zó¦9Ń8KVżFT N¢Qy«¬|PĮB„`,±žµ«{z“®ėæņE„ŖĪ g¤ż+Nhri>/fµžcb˜¼žŗ6×-ū¦Z‹½2¹œ²f2é1½ADžjŃpFF¾’˜YÆH H’JKÄq­:œ£¬  ‚… JĮ™©™łāpLN*øšīģŌę”ĻŁŲ<ķ7Odµ~B†óR8}Z›ė–ŽæSū5ČéiyźįŒt2–^hœ–œA¾’-<ÆDµ iõž'·39T°Eųö·µ–@Sz’®2ŪÆóa=æķ—Z‹ ?ś‘<õŗSxPY.méhö²÷cF½z2ĆŠ'~­µˆ.Ų½[”ox) ‚„133™ õА6’H†erģHĪ T¦ųZĆš7 Œ%Ń~’„”! jżžöĮdįH‹F )%£óaĶšiĻg¤)…©ZærNõ„L”hsĪAåGÄe4…STŅÕ!mä£ĶBžp&:Īē)ŒØĒÉö¢éR“®,Ł·ž{.ķ›§žŅFɼ%mnqźśÄ°]øį9ž÷n7<’<–ŸģæéWÉ/'®aĢ( m :ū½D`łI¶Æ/ˆ6k¹Y6u՛*\åäI8yR…ė ™ŠtĪ0Ī:,DNN/Żévk-„>Č6BŹŽ‘‘Ĺģ¬Åi™"›TĶ×\|–¬ÕA õJǹę@ž£‡~ĆPĻqPĮBäd|Å~æĢŽĮåJ©)[ķIÄĢ[Nø-Ód½GĶ+† ÉÉƳ¬;ĻŃb“R Ŗ –ųV~ĢX„#м’~Źeę•WŹ2ōčąg~¢µ¢8¾ā•IĖHįr”ŖĀĒ®~RLÉ×ōFX€W^ŃZ‚9‰× »vi-„$KĢ·JJp Ŗ:ą[&}­L»+Éų …#¤—ōŃÕ &eBrńµ~£PĮR‰˜%ČŲųöc@Žœk”PT"KĻ§[E’t„v¹ä©pÖG±ł Y¢Ve("@g`#5¢š_Ć£«ƒķoČ™śH4ś“ĢeŁL¶õ Ć@@$@ņ@Õš„ ,SdLšų霑Éõ)ÕŗK”ą™bvNŁŖg` S²FųAĄ0ŠŪ}ė§ZéØ`©Ä‰E;#VļOˆ*¼sgyŲ|äG.7ņĒß ,-æīp^³ÓßY`›šügeź£2Ē﯄ _1ˆY}ÉĆŲå”6U«Ų³Ś2|óļæw»,Ć·zŻ‚ ‚ˆĀŃõaž£$Y` †5Qž%© £ÉˆŅI>ų Ი\|Dņ¹“-˜¶†‘ÅĄ‘#e¹¼*‚ŠQåqŽ—”’Ąa½86o’5ŃłĻõ,ŅKōU%ŗA,ÉŲŚwņ%ˆv¦Œ™pÆJ)=žK2 å uq”käsÉZYŸĻō­·`Ļž ·«Åt“k©D”łüŅÄā]uLšūš‚!ĪT`’}f…ˆŌīŖ€Qf…@K/\Ø;y®YśŖƒęü÷W>#ś—4ģ›’’n™6k½Ó·ģd“qڳśŃ0›«ĢÉ+žłKźĖÉIšJņv¹³v®łČ…:ŒŪąv­›„)Ā‹ĪÓÖ°ÖR ˆü ‚„Bf_ Jm“g€”I#„[\^øPųBÉ=’ĢŒ__šA¢-‰†Œ5¤‡<Dƒ‹±ÄČk‰gŹ”ž1‘¾¦Q¦xįC$)&#a²LņƒČ *—ßąc 4g`9 "Brē¹:°¬‚)…$å2æŃ'LŽ šL”%"‘hnŌLW¹Bū‰yŠŹN\ł©ZśŠ{IOpq߄µč|L‘üš¢Œ^/ōōĄ#-ƒ>łį!ØKgł£y÷ŠŽ(jĪä'‘øtŖØææ«Gk)IJwÆÖ ź‚ ¢84s'«§lž2kšįæmNڦ`®QÆH|UNM ;[,,¾Oœ;§µŗd6ē7’ ,bĻ"Ś‚ ¢8Ń(¼śŖš”ŹÉ”»TüKNsĘŌVH ól2f˜ C(£5g/4 „özF ąķ·µ–@—œ?Ƶŗ—£‚ ‚„ć㉽¹žµ:Žü­.żW–€§2ˆ“ˆ±łķéIeŹ+ˆ[ų”¢· įÅįŬ;tØčz4$†‰ ­…@ņāZ·_kŹ×eūµ”lČ~p)*XšįóMĢĢ?SØģ\Įى’Ŗ÷°ęĀöĖ““ąw.™)²tŸ8!ÓZŒū‚~ IF·G’„k-BynĒŽKöƒK PĮR•“'3Ó üĆ·EžŪ»ķqłRŒCwŠmWæ>ĢČS×|»ø¶¦Ń=wøµœRN>ń„pv‘o[ø4Ģ~Xģ$Dąż÷µ–@æü„Øb,Żł%— Ž7ŅPŗ' ¢gPĮR†6ݧ˜­®Q‰||²Ąšhƒ’ĶŠŠę¢ĆPŅĶ“ųK ~ų6—r3:”t&yQĄų(a]*”Š4¤°c,±˜Ą>£ŒńŠY ĮXŠčk “P‡Ä”1Ō ¶Ž ~Æ’Ū-Žų0°Źµ(Ö,beX&XsāFāĢĘM:¬‰ ؜ńøŠĮ*·ŅæŖØ`!„BŚü§—„ÅB~ź©’*äĒ =yRæaŠt”ˆß2®  gPāŠē'ÖąŒ6Ŗ÷“¦fÖżM‰jĻ_÷œÕĪ)f6åĖī€čŖÖŪ»`ŸÓ v;ō7&”MūŒ "†.Ŗ'›;…?Ė ]¼`²č:±Ö)~Śš@@b…²t×ĢrEśehHĪ„2YŽŹŌ ŹM~DŸōõi-¢:Ø`!Ņa8uŖøSöļž,/4]“`²\ŅDó4Y“2¢fKM "Kwy:ɰ;1!6¦¼jLLčzķS¹Éč“‚¹.Ź,õ`MŌčŻOņæQĒSTCŽ]żdį2ĒģjĆaČyŹųõ/K“ēż÷įŲ1ųÉO¤-‘±Ję'Ÿ”®–ÉĖ™;S}ēńĄš0Ą“…¹B «ƒĮ%*-D”>mŌd×.­%@ʦ*ź[õ±ś×=wJæzQ°ģvū×¾öµė®»®ŗŗŚ`0Œf¹z;Ī‡zØ„„„®®īŽ;īčļļT7pdCZ¶Įx’ Ž+ćH<‘H¾\f‘šĀŁ#eÅ3gY ļ搵³{„B‰€³˜mwWńł!隓]@Ŗ¶Ō0.D£Āė1tućŌŪž‹Ö§ś.nšĪ0ąpä9C,W„ٲ¢°&*Wj<ĪĄ2¢½RJ„ŖIMršĪtŽŃ’7¾„į÷kŸB)ĪĄ1UäU4Ā3½(XĆĆĆśÓŸZ[[Æ»īŗģ£Emß¾żoūŪĻ~ö³gŸ}ÖįplŻŗuffFĢQżĆæ’»ÖBHåŠ!żo½UøŒŅüčGEŸ2µ%GÜśčļO,e0sķ[!6·£ø\EÄ;ĶC4šoĶRM¢m±&9tFłp8tš-Q+žō'ģ¤ Š‹‚µeĖ–™™™]»vķŲ±#ūčK/½tźŌ©_|ń’ńļæ’ž·ß~Ūēóżō§?sToHĖATČA@$ąčHE§ŃÉ/k)ŠÖ0]]Ņ#ßuIaósĒŅ£qć}ĒŅRmÕÉkұRBrʤŠ~°ĪĄFŪ„C9 sŗ*Rā#N'ˆ‰ŗ,zQ°ŒĘ|’¼õÖ[‹-ŗå–[ā’vvvŽzė­o¾ł¦˜£zćša)gĶĪ–M|šüD" kčU)7ŖņJ®"Yē!JJ;~͟ –9łŸ’üēćR®ŃłcŒUĒ^veH8¬—]NÉšS*qF&°\—¤!«ż%>āt‚„œ`’Ń‹‚•Ÿ¾¾¾uėÖńæYæ~żššp4-xTτڇbó&sķėÜ3k¶«)O)ō^ż,õ®X“š ‚Ļčé½$”õž»¬ˆM“ÉkäĢÕø{·Œ••„抔(Ńf;ߣ°(DŖ§Žŗi¹v86bą¢4Č_žG†L^ł<ū¬ØĀT?2‡ŪöģŃZa,±`GŁly”‡‚åńxš››łß477sēół Õ3T­®ĪaČ ą©‹šōį<&÷‚>`Ŗ¢ŒUŲh‘0ÄÜM‰wϼAń5Qø ² ÉBx~JŚbĶW?¦¦D‹“é¦åŚžÉŚŅ`-DžG†„ڇ@tģ(ÖLPÕźšŁė‰±¹¤[²FZ²““ś”‡‚ÅqœĮ`v4C¼µĀh4j·ŪŁķvžb’Č(Š¢é”_ĆŪķć¦iŚćńœś‡‡ć’yfœ4Ms<#,†ęE„jęøō ™“‹rŖ/O¼†_ż*^Dz9ką‚ń/tü8™ü. Ąš0„B@DČÜæõˆÅbü³|>ß;%ɔõ MÓ‡b Ī”O?Ź•¢č\­ąw~†zĶ‹X,Ę?KĀhŚķv–gŲ’O’Ä sÅą8–I£xę94›Ö“ÉC? $•²‹Ź!Žƒ SwŠ¢HžW”כzā$EķÆéuö¼]+?/Vư—ov6å-™§ü‹ĘbQžh†y‘$h:ÕX†”łŻÅ?%šļ,~å oāĒ„ĶjŠ?'ÓZĮ?”1rÕGsŻ2ü®cY&W+–įXžœ¾»I’ä‹ÄŸŸįp˜­Iž%Śp,Ēšdˆń24Ń4“ń$üĢq,ĆMž¬fX†wcAšĒ"m>ЬpO²,ĆFń{’āːފ“G›ó ĆoĖ¦ŻŻcĮoĀókČh涌§=,ųŻõqķŽ©•ļ ·‚b„[‰¤^>9Žć³ ĖoEśŻ”ŖŽ¢hš-;Z|ŽIŸx,›ļi‡¢(†×TęTޱ`ų3*}4yÅX†M“žH‹ĢVp9Z‘ö|~+²~j…[V%ņMy(X---üŸšz½ƒ”©©©ąŃæY?µĀ­ą?Ɣ£<¬uėÖõ„/÷öö®X±"~'ä?Ŗ[|«>ęgzŽ{‡ 4}DÖĻö·ļŸ°–}Üß±mæ€`²‚šå$ÄxĒbhś(’$ĮXį2b沤Hš£7ż>ć›3×ü¦” ÅPJ¶(÷†ż²É s•ņP°vģŲ199łĮÄ’ššzļ½÷ī¹ē1GuE“m¼21T#Ü1Ț‹Ž&@WE.,<˜§Ē„y¤—Čł ņ¾*–±ĖŽN~>æ*MčļϚ¢5£Q", ƒƒ0qĢķ%š§g¬ćņÖYIL^«żÓö+ß.\)’h‹±čŻ9Lģ D+ĢF/ Ēqƾśź«Æ¾zźŌ)Ų½{÷«Æ¾zč¢Ō¾š…õė×?ųąƒæūŻļžüē?ßu×] ßųĘ7ÄÕdćģ\6ʔ@¬ÅĪ…Ćj灵Žę³ł °ąń” V:ŽeGd«K*®eĒ“ŸķĒł‡¦¦ ŲY“ß I‚=ˇ•eĮn÷*™ŪKÕł||ńȉģ^xW/\)ŖĪĶXŹ<ֈ8<«Õø§ō¢`1 sß}÷Żwß}Ļ=÷|å+_¹ļ¾ū~t1жÅbŁ»wļÖ­[æžõÆéK_jooßæŅL'’Q¤,ˆ“õ5$fü‘-ŹRē÷¾'üż… ļäčöµØČ‘-ĘLįĮæ“"ÉčĶS¬`ōŠ˜1:|oj\†ļ}”¶Źi%ŗsgį2EŃ×p¤׿HŪX“Ž9}Żė2ŠTLŽšG­E@e‰5;Ō‰ėa.\DĢf3—7Ty{{ū‹¹s#ē?Zv„BĄ5īĆx„Į²ĄqUĮFQŪoübœ‰”Œ‰7'¢*ČKÕųsœ'–ø ‘ĆŹvQ™Ż[©b”N¼CčZæ„pŁLh«('üXĄšÆ,]ŒŪ‹rF†hš‰Ī›0ø×ˆ—$.Ė®ŌļOŒ…ģ³2œQzp^ĪÄpF†±E-TŒRåĮåŽć›ä惢Ą\ņĆŪįČĮŲ"fFĀDS•ĶÅōQ¢N­¤”H^X#]ŹĆA¹¤2N]TČØ“3ќ!Ÿ{A~Øj?s:YćcMTĮbńüzD£S²`¹ˆ“ęŻ'S'¦łqwō¢ó&|>৚LžXŗm gdh£@2ĘNf+¢«ƒÉž¤«ƒ¤5±ySü6ŅUłl¬”Ó$re"elįlūVšVöõ—3Q!«Xgæā rųˆ… ė<ńy[,L•nŽrbPó¶BKmF¶žNL1ž›ż /(% –Ÿ¢U Ķu쁯–ŸVķrzƒ¬öĖŽü‘­Ļf|Ź øDęõ6Īž~ōŽ_±U‰=ŃĮ/<’üžÜ¹ż˜¾ž5~łó·•—Ao/¼®›€ ¼'Į‘Ž“ˆBÄēm±Œn}Nf9UPó¶B ўø –š9į9mc8#ł<ų|Ąä]y¢­a §ČkĪēēF’0<æ„ü,ž?BÄ.+V6ų H„‚ ¢=ī5‡ąä‰SBŗ IDATIõ®Č™čĄņÓ$)ąØ!ÓÓõÉ:†©–¢óĒh[¾m‘hĪ®“ßlNi|+NF܌p^"°f‰ ˆ4PĮҧNi-A%Ņ»žeå*łe¼1s‡N'L^™Ó€|–ø}cI™ŻFj{cMÓ„Ō€ JĄ÷ꢵĘ={f R Ø`éˆYĢʦ®V’Ą·ØO¹śK!Ō>”ėŠd–ł|¤m¤”kł-.A[{ŃĪĄĶŽbĻƒF4CJ,Åyųaé羦¢‘k÷Vy2€ßĮ‹–B”ÅēkÅnž…ŸėÆ)5ri.J>Ļ<“pņ’ž’!QD‡H‡æc·)²ĘF48C‹ĻĄ™Ļ>Rzmn²ōJ$ŠSŲąēį±Ē¤Ÿ»ė# ڧ•Ļ”CŅ/Zģé¦ĶK0(*Ģl.lJńk ŰoŸā—@ Qp8‘ūŒeR r1=ķĀ”É[ˆµäÖGŹ„JbĶ„¼YŸD.<±%ó'9@i ‚…ØĒōt"€I¦ĀUĢķģĢ5æü>Ś6IÕ䈒T>Øé²ÖĶŠā† z _tņ§½{•”™« ‚„fצ }«±f2°tīʋ*—K Ģęłóågāv~Ć«ł ōōØ#Ha$ūg\øēQ²VlŲwåpZ'‡[õ’”ØwEŪҲ‘µ^2Ż{4Ś6N„GpšRjēAōYė%źÄĘņU T°ō‚æ3e+īdMt“]ÅĄP„ß/ `Łķ)³°rĮ±ģHž££ŖČ!ɒø×~ČØžø&æÅ5]?ص ØźŃ˜¦NѶ•’Œlœ„Ósg¹ŻińżdNAŪB:ĢŠ ¢‘¶±h}"×Ó ““¢Īڽ[A‘äå{ßÓZ‚tĘĘ0 nŠŃ›’ µĮįyaMōģø„—bäęē“,•œéŒ©Šq†²|3åLL2éĆ-.%t¼£$,örøŻ™ßä§ē€‹ŚŠŪŸŠÖ&lĖ)*aFĘÖ,³É<ąĶ-×l$,˜`›¦avÜī„'@ķ¢Ą«mÕ~aLLJNŖjŌČa–F>å8aęØ`©ĆĄi©öTže'‰}8Œ©HĻ-EnjˆFį‰'2æńūó3FŽ]V\ƒc·ż(ža|Āa¢ŽY8\T%ax6·\æz/Ö$Śē‰'ą‰'rfzž¹6gčQ)…į›D„XE9*X:Å·4å$ę^v\CI¹p!ķßȂa0ęĶ¢'E /ģE"RņI¦·WĪŚN×cŽõ¢ā”ź=Œ5Zz=Œ%FŌēSŹ=ĖDŹ©Ń 3+ ź!˜j90iļ{”;Ø`éך“Ÿg.= ”$‚däH.9ĖÅmņ (ˆE’…Äī'˱crÖ‹A_ē0Č&+Ńä¤å°Ó¤ŖĀ±¼Ń«g.ĶŹ•#„¼ś(¢“kõ”M³Rn?ā69µ–){PĮBę #wü·Ö"”=¬…,Ē”™å}ó_ä­P…Č׈šØ‘_h2{QĮRĘTöAĆ+ƒšĀ … ‰€5Ҳm –œ”je3gʰ%’?š•ģ`§+5·cŖdؚ/;t’ B4™½Ø`)·w}Kk99“śY “ĆČĮ®]ZKPΰ üāZ QDZ&żA­„@*T°tDø=ÓĶ߆fĘEąõ&<ūrk±3Ö”Ł—ČŠ\ś‡Ŗó²’²ö""żäN@ŹT°t„ė²żßŲ× ÕC ȇćėź&y¶>śHq‘Ō!²`˜Æ8"¢/¼ µHY –ā„B@Ī+,Ŗ:k±k)€ply Bż‘?_{ Ęjś‰F)nA‘ˆpŹŲPg’šmæ–$©R„:ū}ąQ¤ņŅ0ż]=`B««4B!k¼ü]=”±4/¾Øµ"T°‡$• : +XKŒ® h(m ƒĖĪŃä̈qę x«fhI9ļ(J8’ Ńäō,×W|2¢É3F<E*Ÿ˜(µ†Xė€2ńĶŹ’¹Ę+Ö:ÅČ1D?œ8”µ"T°•PēM”•XĆlxŃy5®Ŗ$.ļ{NÜüüĄšŁīūgF{¬¢9zTk ©,PĮRG6ä5Ŗh\n€B.åm–a‡1ķ*–+>¾¼x8#MW+žŒe3s ƚ§€µPنķį¶1ÖBČuiYF¤\P!f„rtŃ!Ø`©k¢\ku]5ˆkŗżŖ7Dfh[8“h@żėĪlz'הћž“ńBe7":g` €—+‚ •*XˆÜ«ē9JÖ»©ŁĀQʈw„€©öĪź R~XøŒNŠķøėŠ‚ĮA‰ēŗŻ9Ó{+D « £ĪžB¶Å_¤ ü9T°)x—å CÕśéjrźÉN`©@v½żūU—£Ź(ōŽnĒ]’PŒŽJ<×ēS[Į .r¬-s††ę„»7’Dšē@^PĮBŌ ø¤/2o\Cžö7QÅśśĀ‹æü2üä'²K„Ąųõ/k-‚öüž÷ZK€šŲµ śś^z ~—åCņń­õ ĄPiPĮRÖLbų¶*ƚ(Ęå fńc-k¶" £“ÕžŒob1dŚšzĮ)%„RŖÖ«µź‹ _J˜†Ø­ņ;0Z«j¼@ 1R~bh(*å©«Ø9—n@M@Kq" ‡ ^ōš¹Œoå1Ö¢`RÕąŅŽČ¼1ńå‡6’Q9a„ĻéÓ2WȚČc—=+s„śćŲm?ŅV€ńqįHxRT° `,1¢>ńbź[zJéĖM.>"WU, nkˬ… šš×@ļŒgķ–Ÿ;'„ž@øŠŻJ’ŗ3<Ÿœ„į̜±" *XˆŠU‘X³#žŁµśŅ—»ŠµG®ŖFׯ³Œ%W))¬+—óYįoOž”R×«Fų. !ˆœ[«ZqįBĀH A ‚ ‚Ą+Ƥ­K< G.®yھe‰_?·»pøTÉÅøķ|ņ½"N“mÜ7’¼“å«”)]ÆÅŹ‚ėŠ}޲Æč3$'Ø`!ś";:¹ LL¤ķDø\ąŗhYĖX£Tm"¶IŖēĻ) ü­\÷ ƒLUš "c‹Ö`¶_… °låG% š‹^mŽÆOg¬ fæVUöĀ!"Ø`!śB0æžŹ<óŒĘ0U‘ÆüE,æż­Ę’Ģģ7żIk]‰dnžš‡™eöīUM¤ŒAK_čŁ¾GvKŒ®Ńāå=Ē‚žŁY…`h&Æ«VĄѹH©pŸGܽPńhx„Z 5 łÜcRČFŽ32ĮŽRÓ.ML”XĮœĘc³3ÖHņ_ĪČ̶ h²{‹T Ø`é‹3g“–@EجUūtĀ}_8{œNŲ·¦¬ĆēŪŒīū7½ ŠÕ ŽųŠĘWŗ“ŒLoĄ7z±tw |ÉXbŽMY!n‹äųĒ%V0§¹ŠŲMņāé0–ŲŁ»ŽÉ™öA ƒ ¢;¢-vFīpY³k?Č_`’~8sFŲ†½ą¹"™™ĖIĀóGhŽ Šq¬«| p’Ŗ’Ņ3ŽuiÉvķ‚ 0W7RØ`!ŗƒŖs3™£ßų; øV÷öĀؘ°ķj Š¹"’ŅDR¢i†5ė,čS:¾%rKÕįŽĮӎYš-Nkģńćąpč.(¢sPĮBĘĘŠa `ēN­%@ę“7d¦¼öy õųVœ`¬ ¦F˜S<(ü½wĶ‘hĆ <÷Ąž žHH¹ƒ @ÓĄ)˜$P=ˆF)ɈFg<§[/HAD‡`˜ђhė„Ö" ’ÖD³5~­„@Ź\ĮB-qnÜ«µ‚䃱†1@"T°¤ čéŃZA¤PĮB2`#%!‚”Ø`!ĀŪoĖ\įīµ†Ć2׉蓯»µ–A-øńćé¦óJķ’¢‚…T1¹ć¤UA cPhPXTk Ń+É)J”ŹQĮB=29 Œ@A¤<@ AADfPĮBA‘ 4Š ĀD›1Z¹#‚ R@ A„aĢg"µ•5`@[wAņ·DæøÖąL“ÖR ‚ Eƒ ‚ ‚ ˆĢ ‚… ‚ "3Ø`!‚ ‚ČLy(Xūöķ3¤3oŽ<~§ÓłŠCµ““ŌÕÕŻqĒżżżZ‰Š ‚ RN^„=öŲāÅ‹ćŸ­Vkņ{Š¢¶oßīt:ö³ŸÕÕÕżą?ŲŗuėéÓ§ŪŪŪ5’ўŁM­b­…Ė!‚ ˆ”“‚µmŪ¶Ė.»,ūū—^zéŌ©Sļ½÷Ž-·Ü[¶léźźśéOś³ŸżLu½Ąšh`«“–A™£”Ēa’H$Āe„Ą}ė­·-Z×® ³³óÖ[o}óĶ7U—AA ¼¬nø”¶¶¶®®ī3ŸłĢŠŠPņū¾¾¾uėÖńK®_æ~xx8Ŗ.#‚ČCdĮ0kNåxw­:¤”0v/‚ ²S[„ _żźWo¼ńĘŚŚŚćĒ?öŲc[¶l9yņäĀ… Ąćń\qÅüņĶĶĶĒł|¾źźjDF’ˆĪ›°Ņ5É}Ėz4¦āĮīEDvŹcėź«Æ~ā‰'īæ’ž»īŗė?žć?vīÜét:’ėæž+~”ć8ƒĮ ”Zž2X4µŪ킇ģv;1ŒHd ,Ćņ÷5†üĢ—ė˲ü½Q†N¢©T¤oŽK;‹fR‡†į UMӂŸ9Žcٜ5_‘­ s¶‚¢R+4i­`x×åĖ@Qt®V„B©¼üVD"ąt¦2Ž0,ĖoE8nĒń+ē·‚aXŽ7žTŽbĄq,Ć 7–MėIž!~ DZlŖ†“^eÓdČ5Ąå †a9Ž'žøV¤M›ōV¤M~+Xi­ąÅÆOoŖd“"ķPzO¦Õ@§ĻØ­ ÉŌ“į86w+~+hZx,¦7ģńz½É=źŲ±d ,ßš!}§ęĒr O’Ī9£r߯,ĆälļĘŹ˜*ióf…Ē‚e™\=ɟ]­H{”±9Ÿ0Ļ( ­ˆ×šĄ®‰Vo,£éĻØōVšśŸŹ!W+(@øi£™Ł ^O2,æ4o 3ž“TŽ Ļ0 Ėę˜’Ī†×i&g+ų#›Łüß,†M“¢‹ä †aŲ\³šÉŁ ŗųV(Gy(XÜtÓMK–,łųćć’¶““šŸ\ąõz CSSSžzŗŗŗ’Ÿ«««;::uttšWĀų‡DÖ`4ł  ÉdülC®CF£‘ÆDšĢ©CfKjŅ`H;ĖlJ2™LHÕ`6›? £1g Ą—Ad+Ģ9[a±X„[`ā]—/ƒÅbĪՊŗŗZĮV°,˜L)kw“ŃČoEmmj•(­ær~+L&£7ž–ÅĄ`0šR÷WZci=É?ÄÆĮ`0©Ņz՘&C®±Cα0™ŒO£r“¢Ŗ*5m cīV˜ų­0›…Ē‚© 577óYŽd Fžbś„OĶ ƒŃ`āÉPeĪ9£r߯F“)g+x7VĘTI›f£šX¦\=ɟ]­H{”s>a2žQZÆ”ŁOš.£éĻØōVšśß’!C®VXLĀ­HĶĢVšzŅdä·ĀĢčŒ'­%Ē„7™LFcŽł`įßY`āõCŚCĄ”³ü‘Ķģžo–ɘ&ƒÅ,X ēX˜L&c®YmŹŁ sń­P޲T°€¦éäm°nŻŗ¾¾>žŃŽŽŽ+Vąž ‚ ŗåŵ–A%)‹æčoæż¶ŻnæöŚkć’īŲ±crrņƒ>ˆ’;55õŽ{ļŻsĻ=jK‰ ‚ åbä~÷Żwwtt\~łåõõõŻŻŻæłĶo/^ü/’ņ/ń£_ųĀ{ģ±|šūß’~<ŠhCCĆ7¾ń meFAdĪR Ö¶mŪ^~łå7Žx# -\øšK_śŅžē¶µµÅZ,–½{÷~żė_’ś×æN’ä 7ÜšŅK/Å AAŌ§<¬‡~ųį‡ĪS ½½żE“h@ Xh¶p9QZ æ%DX(–5.†Tåaƒ… "™ļŽž?h-‚°s§Ö ńæŸ:«µˆ ‚…Tž¶”Ā…¤x–MFj#øś¤8µzŁd¤p9)PĮB*„©5{µ©LnüŲÕī¼[ŠÓīŽŽtlVk)D6PĮBŃwæē°’LįrŚqļžńäēOīŸŠPŃ-Ø`!‚č‹K‡‚fš+\N;֟O%ĻX=äÓPŃ-Ø`!sš‰ ąeśBę4WrŻzdFCFŠCA¤ņ•ēõåL€ Rį°f’©Źi@ĆbHä"f†31*­1U1Ŗ6sᇓcB. •Z‚€`Ś]„ÖRA•Ī6ÖQĮB*œX­;Ҋ6"ˆ¾ˆµŲ}ĖN*Qó_GwZD:œ‘ŪLk-Eƒ ‚ ˆøWÖZь}žŗp…Ūg ‚… ¢ ­`!HY°vŠW­ššrØ`!H%Šź=° wBAō*XR ˜®ŁOj-’Ś‚aŹd ‚ ˆ ^ū‚Ö" ¢Ø`!¢fš]3ä×Z Am@ AE°’ĢMi·ADCPĮBA‘T°AAd,dNćYu”¶”o‚ eÉĆæéÆTx4©ņ,DYV`f4Ad΁ ¢,_ų FæDAęØ`!ČåĪ÷Q÷EQ T°dŽreÆ[kA*T°ę’ōĒ>­E@DY6öĪn’OžŚļĪd|ÓīŠŻtĢ)Wż2²©×­OĮ9*XsŽŚ„µ‚t8cü9KWĖćRE1U$[°ŲBg4曆UĶōJ«e¦¹4²¬UDżźSEźT0DsŚ]„‘åŌ¼"*X‚ Śš?_į’ĖZbž®n5ų§? d|sM{CæWMDžį±ź£ęQĮB*™­G]Z‹€ ˆ.ØŠÓ™+v¢Ø`!•Ģ-GgµA]P”Ū1Ŗ0¢Ø`!Jń’qHk”¢Łūģ_§“–AōÅ?żé¼Ö" ˆŽ@ QŠŽ™Š]·Pģ|w¬p9Dy0Oˆ~čpāś‚¤@ A2ę_Ū«µ‚  ‚„ėחTöe3Ķn8ē<“éŒOL —Ÿó›iżØÆģĆ›ˆlźõä9ŗ§%‚TØ`©ĒÖĆc‰Gg²āŹ” 6’Ż~pFšŠŽæ9ÄŌ°żąŒ•ŌXæ¼ė=ĢƒhĄŻ³ē9ŠÓA* T°tÄ;Ē“‘NE߃oMj-‚Žø×HįB•ĪŅ©Šu=ėpŚN•Oļ-3ŻŌF0÷īÉt”¹wĻ”(×Ķ $T°tÄźį Ö" Ņ©Čį«ČFIfՈšęųœ¢!DuĢxxh;UŗĘ䉀Æf†ėg|yÉxŲÄØjQT°é|牓Z]ś?ž M›Dļ,›šßūnqkKß~RÕXöŠ"Ėņż63¤ ß}āTé×B䬹˂ŁX}ØĢņ.›Ą%D ęy‰śpaCÉf?9ĻKØ 4ęy‰fæœęž]ća•³¹!Ł,ŠTQ…ż„Ś]å÷„Æ0PĮš»\ßķY6Yfėźwķ» µȜ`cÆwÉd `±5Cž}śĶÜ·±×»fHĪw’Ļģ™ĀTʚsē~G³æ°Z݉ٲ{ĀWØ`!E°ń¬”nb ^z!°b\ŲģćĪ÷•µx½ī8†qGŌ c&¼ęB¾č'õ!ź¦cił ƒdSĀäÕ§ŅrtŽõ¾6öéŸ84­Ī…¶WēBśē“ļgvEž)R"Ø`!E°b<ÜģÓˆH§#Ņī§~eƲń„Va¼"D Z|DēL¦)4Ÿš½n0m„­&Jē?„:JÆM;e“Ā÷K.6ō«“ų·ns’&ø²/³+ņÆ®8ė¹¼ßUø\eńÅ×0b%šåd%€ –ĢóŠ}?؉2 ŃŗĶ·a4±\cPŲV±åāzR}˜¶Rl#ƒ“Eėøź‚čV°R°Šl®”Ō-¾„q“ųŁ[ĶžTµÉk)DM”®¢˜ŒŪŖtņ‹ē¶-‘ģ©’c^UĒ[LžÄŽAŹ$ھ!DKHķĄļŽ*Š­¢Ų*Š©‰&‚H%‡&õ„ Qń«˜¶!”j¦šKņM" §ičÓ×,}qżńŁ’ó‹S·p®ę™¦ĪóÄ|KŲ†ąŸŸ×£ŚŽT’ļļÕ{³’—熭ˉ™UĆžŒŪŖtņ‹ē¶­x|k|žG¬^~Ļ^ū’ā×ŖłŻ»zŲæb<ørŲ{}wb’+9{’łłžų‡ū&:f"Š1łō»ŚŲPžĆkżš\Ń T°ŹŒV/±rTŲ1dż€÷Ņ ĮĘ Wōef³YčŒ.~ŠŁF0½`žS4äŗžÄ.ƚ”¬ µźņŻE×öĢ&’*M<­dc\{!e‘“ģŽģŸŪ=uŪ”Ģ}ØVol‰=”ēÄl:£ńSrqEß̆sŽĪČŚ ŒŁŲ+½gVŽ†Ģ ·łLv?üٵᜟæ¤zM“_2)av¶ĮĶg¼āWh6œó×Dė+[NäK\(ˆą)[Nxų3jŻy>?|Iā7 4Éּ˜­^āžw¦īzņÓļ&¬éÆ;įŹ~FĄŅ©H< D®īĶ 1HŽ·{ņņ³nX5\œ%Ł–žŒ«dS„s„^åדr͐æ:FĒćßVŁpĪ»ķąD›'1ŁāĻŽ„Sį³ §¢ūߙŚ~` rwEm„ę?®łŻoE±"Ąåg=Šź%. ¶x?É©æ;ā‡>µobĮlTäU’æS{g7œóßüQZ޵+{]Ÿ88±Š½ī„Ų9)žpø¶gvåh(ŽW5Qś³JŽPźƒ V™ŃįŒl8'<}Æ99»łŒ7ž{pż±L· e“”U#Ā®"µźśn©œē Ł~ įy“ń¬6œ Ä_L+ƒmNĄ'>Tć »ŠbÆļvµśˆĶ§S:G²{3°’ĢŽ}öOīϜW ‘øń_®³Y6Źo/xż±ÉėzfO‡7ŸöĘ»bū‡ ÅīĘcŅ{fĆ9æ…b¶-BEćĻ®ė»]üĘO|˜ÖŪ.JxóŃL½į–£³āC\ßķŖ'v¾n? œō3‚§Ü~`foF]Õ#3Tüš%‰ß€Šź%ņ;w8#Ÿ~×~÷{;ž–cūĮéģg¬ ĘC™ēźŽ Z}Ä={ķ×öøąņ¾ŚR·˜ÉøJ6õaįgcF=ńŸųpjÓw}ˆŒ Ęæ­ r]Ļģ'÷wĢDć’Ɵ½«†ƒK/Ę łō»öø³g®‡CCˆä?®łŻoE±"Ą–īčpFÖų:Ćńś“S%~w\6ąkwEīzoj±=$ņ*›Ļx泍Ē×w»īų ­E7}äŲ~plŁdhūA±s2.Rüį°ķCū†sx_Շ©{öN%o(õ1kuį9Āēžrź±­ŅĪŻöįĢŌā†`gŚ—w¾?yf•uŻ ļī÷ģŒŁŅź%¾ųڈ‘5]6ą0%‹ŁzĒ>ūéµ+‡g–:Ųg>ß¾żą”…¢xL°éŒ‡¶KµĄéI;ÅÓTuŪ‘QC½yūЛ޹BµQ½“A¢Æ IDATÉĘŗA_„ŗ½˜ī󻔍1q’ŪcoŽqiņß{öŽMµ%^“īŻ]x[pĒ>ūśó1+!¬ÕV"ĀXjm½ē†vˆOÅ_~ĮCÆżöž…ŸŚ›“lÅD°ÅćŁ~ŠstÓĀ6OtŻ ļŌšŚ‡^Om“żĻĻM.¬¶ōŹŁĄ‚Yāü²*ųŅ«‰ xÉMg<·œżŽW—ŪęŽæN$%’ż§ę%н1ōĢēŪsÉß5ī˜‰Œt|źo“c]–ĖÜĪ£Wvä*×ū“#–äæģš8½Öt’®³AÖ‹m?8ušŖÖ/¾6’c‰=¼Ąī„Ͼ3«‚žĆYiY\Ų9 Ÿ|¼{}kü›x÷ž[ai ˆżĮøķš e±ęļjwĆäĀźģb­^ĀČ0ŪN½żŠų77~ģv·p‹ķ® ĖŒt€•`>qČqąŗå°żĄä‰u5Ł•tNGI ÷ł]\·bķ`ąķŪ>q`x(½k歈^b’ėoūģóMŸß5b¤ Ö$üPŚtĘÓź%nüŲm¬?½"_{o=<óö­Ko=<³™ā­ˆ÷•™a7œó_X֔,¹b"Ų9#lĘŗ÷ŠėCĻ}n <ōśŠÆ?æ ß²‹?Hz}h¼ĆX¦ąŽw,±Ąž›—$‹żæźM>ÆžõiǾMĆ­GQ+4ūÉÆü¾ļŸ^ær$`€v?łPG¼-ļmiæé£©&dłDL ÷ł]6‚Y;¶‘£OüĆŹOļ€e“”’õŪóńS:œŃ?½ź‹Æ˜Æķq,n€Ļ¾3Ś58±žŚ|ĘkŪw~yęÕ»×4yÜĒ®Øżāė#—^PĖ҉*+ķ\V5ÓÖśwoö‘ÖźÓ«Ŗ`óļŹq²&BFŁÖYāmIžč¼rWėµ=®7„ž<ōĘi"¬Œ+j5 tĶĘß½”…ß½÷īnöE¬$¬ŒRUÖvM\2FY‰ČėŸ\¹Š‰wEœ/½:na¬ćĘ ±³+Ö_˜°…|پü³ļ Öźż×Ō‡k©vWlv^ ,tF,4Pcbøļ=Ö·sŪ%š…7Ī_ן½ÉīóŠėC3óėďx± ‚„,‹§|ĻzęB9§Ģž¶“µM Å.œ ÷wUµųˆ%öm6W‘ģņ‰°‘3¶yˆ`]‰ać›&†[ģˆ ®`ĢʖNķ \Q3Ķų!hń‘“Eų¢Õ?„Šj‹ŸŅā#—ŲƒfŠ®Šm¢.bš×W€…f ĀuHĮB±œčåŌ† e#03ŖZĮ[(dl³–[:1ˆļ‹¼Śtw:Ņ:¦#Sm‰GĢ"GЦ墙č²ÉˆÅ¬Lu,®58ÖÄrFą–M†œŃĢpĖ'ƒffĮĀ™ątKڹµz¾›XąŠšĪJ2 A –M…XßZ:bŒœ‰ś0Ue‡[ t‡ ܒߎF¹QŻ ’KµH„„µt«Ww»Ż—Ųƒń†ML€Ų,a²a²M2“įq2^&pĀa9!L¶—Ģć¼$™/c'&NllÜ6ĘxėĘŻ’ŗ[»T*Õ^5Ŗ]-KjµŌVÆž’>ų“„*UŻŅ­[W÷žļ½”]T»‚YĮĪ4ʅĪĮ,ŖŽ>Äeqė0 0ZĮZdĶ›ŽŠt»ØŠ>ą¬čΜbU‚’µÖm•Ķ~™’Z"¹žóæ C¹vqa“i#(Ķ1:ƒœŃŠ:Ģ:xÕĶI”¬-ęĪtŲ:ƒYWĪ®a5O @W‰ rŅĀ'ŠŠĶõ^į7v1īō„Ē1Žą«¦[ĻæC*ŗBCc\P%ŌLX5½}ˆo‰ŖŖµÄ÷KĖ*©ØFZ qQ°+ĶQqøQ Moä,:X5½9*V°HEc@māiYõ°²q’M1īĆ&&æ‡ŌČ$FŁįąÕĪ`6ÜčY0ÄŃ¢(ŚĘŠ;‹Œ 51J¢%­1.ƨš%yaoŠ ĘæēŚœF*ŒÓ°hŗ'#‘ŹhŚ UwęFP4B£umQh“ÜŖ¢*LÉZc\ģʎ¬DŁ"½%’u²YJQĶU…XRQ)Y€…Į¬UÓ/³u„²'»ZV;ƒœ—•Üœ,Ó4įh¤Ŗi $xRV9,ŗŽ>Ä[5ŻĆŹķC©hmƬdѝ¼Ņ5Č v[S\m”éAN±yŒHRÕŪ‡ø:V¦՟–8'µ0(:sJkD€ĪAĪČ$ !QŖĀ:]œSī å$Z{üiÉ!X U”µ©Öi1:„¦łS’łżZ5½m˜ö;;YÕ*SššuŃz4Éø¼F‰DØZŪGɲLS.NŽÕŪŚ‡ųĪ Ą¼?%2¢Ŗ¤‘MļĢš¤ZéĪ ÷R ¼“ĶśŅ⢠'ŲŌĘĖčø6ś8FP­šf\«ĪPĪ&©°`(;ŲD¹· ŚÆ3”ł•éÕĀ.Ā™Ń>”żĢŖ€½÷ßΐ*ģ|%ü™—ūĢ;Ā\s„RѮ߿ŹoNÆÆ?’ØOŪĢóé?ō—?Ö?’ädł žĖoūkŲ·żĄOߟÄ^¦¢†\9åŪ’6óČÆ8•1.Ž„_b†D®=<™žÖuGbęŽ;_ŖOŠŸ~yŠ›·ārsĻ™æū·üT‰¹1·ī4ńīls4÷ÓßiŽęZG²wķ©¢…ļś·Gž×ūoéøē÷§ą³k-ū??ZłēÜYyåÉōēvOpUæśÜń‚¬ņß’õøł÷ŗ#±ė’6qߟ?%vdąęžcóNĻņÓ)cŲłŹXJ»ĻqžÉĘ)šåÉÕļD–N¬ī’‚÷ģ.«”_ĀēKæ;Ūē—ō]1ŅęÖ¹ OóÓ/֕Z0§`^#“Üųf‰īcÓ]{Ģ£ägÅ;÷Œž’ś# » š·m}Rč ²łYńŸrŅ•S®ß?n7}Į£mŻ‘X÷9®)ŹģņŁ—ŖÓ̔̽·ōLįHlĮšnvQ­OŽ>>=¬T/ń‚w܍ Uļ`E» œ9Å[q׀aŃ`¶9*0¢¶ķķŃÜÉŠĄŒ…\üa¦9*X,å~·™w ŒŽÉތlü¢*ĻĮ+kŽ«:ˆ¤¤„gŁÖXÖ¢)6IµńŹ¢¼õڇx›œlśŠ‚†šknY0ÄĖ6:ź+|}i_¦æ“cō².ģ%wÆOJ„Ŗ7G…ś”HI£Ļą§R½KGÕ¹9E·ZÆ9 µ;€Pu3÷ާ}h¬äõ„%»Ø¶„²¼ƒXz&Ś”€@¬\ĮŲ…P+*—–ž õč>—%­{€m‰eś[Xy2sŖĖ y¹7ß§SĶĆ*#Ŗ¾“ŌĢ4Dx£ķaQ0kŦ˜°ōlraˆć²™śoŃ”9*ĢĢ™Ļ<ÄŹ“…Ū—hI[0œcė+IV ʉē_Žń“ sP°LŠ7#Sņčå $»Ø ć4cŒĀ”üVœL÷-ņäæāĶČFd4„h[F,Emm^ TĘ-C–ö•øŚķC¼CĶ$Šæp“żĢ¼¼łŒĀĮĮ+Wæ‹×ˆ7å.¬Yt©›S4‚BÕĶÖŠEƒY „ü²Wµ%łņ¾ĀG~ž.%ĖŽ¢V¼Ā“t³^1.ož—hœR¾†¤XęGrÉĖ[tč±Ļģ*ś|ÓĀ·ā|åƼmM”¢y3…_‘{'\ź§}ˆÆć&.. aĀ“LlĮšnv,±#Ģ­ļ-HĖźÖ}£?)šāUé»ęĆ«N¦=ł‹æūŠx„>%ųS¦ó£3¶¾^y2}Ķ?ŹÅš_»?|ž“sM=& o« ¦§ļśĢK}wæŲWNJ¤øåąŲ ÆėMl};|KĻ%ŗvĶśŽdG©\a^Åż™UŒ»pŹ’~––µU'ÓŻēŲ«ŽŽĀŗćĻēĢ š£‚7-ŻżbC‚ZÖ&÷°®wl Ū¢Į¬‡•nÜ7Ņ5˜łĀīžėߏ·¤EƒY›TQėĀŽWG›²nÜ7b“Ōmo}ź?NėĘ|bļhņ7•ˆō±7‚_Ųż”'#-d7 ­>ž°‰*l98¼éplՉŌg_źŪt8¶įPh]o‚Pµ•'Ó7¼5n3aŌd\^ps²yy'Į81ćļ / \y,[\šó¦#œsŖqy—IOŲJjå·¹óO…­‰įÜĪWĄ.ØwæŌWüT $D_Z $Ä2'Pņv^כŲp(”’–yyó…C !~ö„> TķīūBa­¤ąā\Œęč蚬“¬-=3zŌBÕĶ•½ŽŒč/źRø©hŌHž.%Ė^GQŪ[AZ¶1/ož—X\Ī/īĻĘoŚ,yy \s`ģ3ĖØbeߍļF¹†æøśbŸ’ŹLj¤¢ņXØ ‘ŠÖ623Ń*›&ZEĄ¦C„ŽŠœ°ņƒ±|Ž:RõœG“ƒ¬iµćÕš7ž½t„f .“•¦yŖŻ±·ŗYæMmĆģåg'~Ģ’Ó/­>‘ŗē÷g e$ūČ£ļĄžzžęæ_ŠęĶHŸšā…ł.ŽWŸū ą“oy}“)ī¶æ \ŽĒŗ8eõū){ŃL’ań‡,īOwG'%ó„Ź›żY„LAŠP…ZGų@|jדŠ֓j‰ęŠ'ÆQŗ„Ŗ;x…<æŒąL©+ŪŖQ’UÓŪ†sõ Ž.©ĘT{ī¬äę”āAņ¾“TŸ^õ§Eš§ųś¤ėœ7$%påJÖ¼BØZK„·VĄ[XmkŖÕ'…†¤DŖŗ l6’xXÉ&i„¦3B‰%ąÜŁq»į¬ŚhZ¼٪龓d“4WN!U½„ØnŃu’ł„ē'Ł&©”¢yĪ#Cßm’Vį…£ģ¢Z>d{Ö*߁[[„V8ÜĮČ*•,Õ0ƒ<¬‚cHŃ$šīŹ)ĘsŠR“ńę©œhtśPŠvõ”„DN³¶łPģżĖ›ĄŸā7ž“½„Īœņą’>ʹ=pūŸĻĄķÆ Š 1–µ(YūŅ…M,{­\°ö¶}CēŚWŠæ¼yĶńŌĮÕ•¤vQłŅó>’ń„ę+_{ę„2]S„ā<©Ø YÅńnÆøą‹æ;»’Ź–†xĀ8J™-æöĢ‰ļŻ·øąÅ[{Bpį7—÷±fVœ—ÖO“Īh“š¤}~÷épć4e\_Jts¼`Ė ·ö„‚¼éĶŽ>ÉI,šµ¼iiū›‘[ވ•/Hk[°fҧGvuŸŸŪméŁŅ1Ė-afŪ·&Ķ›‘ķ¢Śm² “¬™ĖuQGΜrŪ_‚uYŁXl‘įeXqj, iĀįołžÓ{q°Iź]{ƒÖ¼ Ö©M§ū†w£KϦɊ糸xī¬h“K-žptކ…!Ī™S ²Š‘š|ÅA]’yO蚿„kufVœfFZ`õ‰Dm£"®8SEŠ®:Zƒh-3÷–T¼œT“ńŽ*£!!ڤYŻČ„Šģd¤Ó+X3iķłb}ł©Ń1ķkŽ/=ø½3ČQSܘ9E љSZ#‚]ŠĄ&Ŗ­ēCž×‰@]VŚńZȗ–źX9NĆõļŽ5é­­ęį·åĄ0ŲEuē+įüɁ:ƒµ6²m_čŹcńé\ÖŹ—Œł‹WŸ]}I[ĒŹYeˁĀsĘåĶwŪ_Ā[÷•žm”Ŗ‹\CFZ`ĆįȒžZ|kU‘¢ėö×`ęL3÷–“ģLéÉrķ’¶ģLÕCA[#B%§!„ ¬šŌ2“ƒ]„Sīó»HUßšn¬äŗQ׈Å]ü"ė<™lēš¹śXĘS}tŌTŪžęN©°įü„L“;ŹņÓJ! Ž•ź“„³\y,±ż­(-ņž|ņƒÆlx-¶ yX‰j³nćēw5/-?É)»ńĶqēņŲžf8}arqR#Ė•9„›_Ÿ-QĢ[’6+:ĒėXiĖĮiL÷¹ß÷’ź¶%5üĄµĒ’g;5üĄY‹PõµĒSŚ:pþ‘¾Nz ež7@Ü8žęØ&ęyš ŗ³VM÷§J®JĶ5Hˆ-#œ/-7Ęrī¬R¼|śŒk‰LįĢFęµŖö(ĘģŽu¬l„oSŠĪŠUÓķ¢ ĘRVq”s0Ū5ČѲŗ0”³čĻImŃa¼i²iIc•’µ‚~“Ö=˜5— ®cåü ŁóW:3;(“oŽęņ§5g•TµņĶ-‘‰;ćŹ$¼†§xO…(Eo©ĮZ±jŗF/ig°ż”¤:ö½ūÓQeĒuńĀ‘³U4o»E×}éZ.)™#HVžĢLē)”¹c°Š<±ńPéx‚ ‡Ę äŚx(ģČf=¬”p޾ŅęŚCÉ?nmČßlˁ‘ŒSqeåś„$Ń6JąÜī%ż¬h›Śi’Ā¢A¶1UiœÄ4œRmm90+° ėzł³L…ü¬HˆŸ}©Ļ. ŸŲÓ“¬n}gˆ–Ō¶pV“ټiA°U=K¬ŗž5qǟĻMŪxŻU'R¾““¾79ŠFĄo¶Œø/ąėć¬?Ó’·5Ėą{C¤F=¼øa¢C+XČŠ5Č×LŸÅŚpdÜuxn~}”¬L1“ĢZÕ ],#ZĪt5šŪ¬9>?[7žįEā6ĢŹÅ‹ęŗ G¢“TŲ@µ¶wØ%ĢŁ«‰ū±jśeēXß,j¬=+Y§qJXs<5ŌTæģLĄ’’ś ūFŗ‚Jc\LųØ­o‡;3g…ę(¬`!€¦Øņ;fś,¦Š’žq; Wžˆ9øœh³ŁE”÷ŠhŠ u9ķL×Ų6]ƒÜōĻ»ø¤ÆźŃūµµø†O`^Zҟ.žä°ū\ŅɊŗµŠ˜ BÓ[Fų†ä|ŽÅvšŹōLiźäHE[0Ģē˜ ŹĆÕ'Ņ—÷ Œ '|°ņƒÄĮÕmÓyVhŽĀ BcīŚÓļČń9&ėŻūō”Ų"„fƒŪ^ ­VwķłŠxeåɔn%ĄÅÉWœęT‚€¦˜ ŅĮÕ3w¢hīĄ Bc^µ‹*XĶJ8x\ļ ”K#ØĘrRę'”¬É“(ES «¦X|³onB4 į(B„J[łA¬”Ō,e”KÜõoN¼ŗäa ”Ņ–.\Ė!„ŖŠ<©`E"‘]»vłż~—ĖuÓM78qb¦ĻĶyWœĮ B”Iš,Y–o¼ńĘ×^{ķńĒśé§‡††®½öŚ‘‘ł6% B!„ꊳäžė_’ŗ···§§ēŗė®€M›6uww?öŲc?žųLŸB!„.Eó”ėå—_nkk3jW°`Į‚믿ž„—^šŁ³B!„Š%k>T°Ž?¾|łņüWV®\Ł××Ēóóg©p„BĶ!ó”‚•H$|>_ž+>ŸO×õT WåD!„Š °čŗ>Óēp±Ą¶mŪ~ó›ß˜Æüą?xąĀįpKKK™Ļž=ŪŻŻmüĶó|2™lmm-~+ū|>†aŠßššžōāoēNÉ`%­ąšųD„d©Ųˆ/Š,sYŹéJF‡Ū»$> `‘^E—Ē«šåp%"ƍŻ›"ķL*2Ģx¼ ”Ó%ē²¼¬ŗėÜA«ŖœŠĒ½õõĘ.B6£ĮŲh›ŪĆ'£œ¤8HĀŲEŅ-¤ÕĀ8ėĄ’Ąå8ž”IŹį’s/Ėšb|M[):‹xr.K2Īt"īŖsÓv§ŖČ¼([ĮīŖ“sœ™ U–ģnßČĄc‹±‹™ U‘·?2pÖ×ŲlģĀ&āF*õMB&‘“5»E%§&K™ k¤ĀįoāRQHR“IĘ” 93Ŗ$*Vdž¶3š,é0S”Ź’ ZhM2vŃ)[.•4Rįš7ĘFĀuucA”IЌT0žĘXxŠh”²i’q&"Cf*EQTĶn£UE"H:1SĮ±—7 pI’qŹ\6§čŹb¤‚㯿^8‚¤EŽÕ¬$ŗqJ¢…²ŹįSIÉb%4Łę¬3N‰——ĆA“Č&yEcHĀL…Če}MmB&AжdtŲŪŠd¦‚&­No —1²Š/Ф 9#M— ™Åøré˜j!ķ©[ĄHEcG·Ą&)ʙŽ„ķnŸEĶTøŚ^ē2IŽœŒŻŲÅH…"mnŸˆYÅŲÅH…ĆÓ *"€ÅČ*I+2lfx65Ra䮜(Ū-šy© ķNIą%U§4)?ƓŒS•%ÅBĢŪG~†'HZU$QµŠēwŹĘgRF*l^_bxČßŲ"²I’qfÓ)›Żf¤ĀįoŠ†Īł›ZÄLŖąNłP ©IVŠĪĻš”ĆŦSīś&ĻZH2?Ć˹¬ .‡ Ą¢É’Ŗ©’¢Ł¬`œ’d„H;#eÓ¢j!4É^ē5R‘ɤ}¾U•UEʿӁ²‰<ēklŲ4AQł>›NŁn›ŻnäŽü ŸŠŌ7/ŗ~d7žIDATžr8rńØJŅ4hęm[ßŌ¬*2AŅéH˜ńłuA0o[—ƒ±»}B&‘å%ó1Ra·QŒŪ/°IŽĢ o¤ĀQ¹,Åøāƃf†7Rįš7 lŅBŪøxÄåk03¼æ±E•D{/1²;ŻV]53¼Æ±Y•%›Ū z|>c!“2RasūTEd3¬™į³‰˜‘ [WįsYAvzĮ k@šk·Qłždŗ¢HĀŖˆ“ÉĻšš,Y):›Ė¹PxĪbgųTĀHķņ$¢#ž¦f1•¤œ®L<ŹŌłŒTŠvg2óÕD6Yp§K<ÆSvR“Ś–Ÿį ’ΦSīś&UȝŸįe.+čVMPŒKd“@ŁŽeœ#‚fuŲHŠqŠ™”¤aQģN‘ŠT<hė2I+Eēßé;󬯩MbS’ĢĻš™xŌUßhŃU‚ eĖĻš‰ČpCk»ĀēH;“ĖÄU¢ón[óіM§ģ.7H‚yŪŗN›Ū#°él.gŽ#F*\/ARŖ"³é“™įT8źźÜ ˜ŽL¬ß~ēĀĪEµØŒšAī~æ?™Lęæ’L&-‹×ė-æ£Y7†aĢ*TĮ[f©ų­ ?į¦Ū?]a*B!4ȯ.ĀåĖ—?~<’•÷Ž{Æ««+æŗƒB!4męCkĒŽĮ`šÆż«ńßP(ŌÓÓ³sēĪ™=+„B]²ęC –,ĖW^ye<蔇\.×Ć?‡{{{Ė`!„BM‘łPĮ€‘‘‘ūī»oĻž=’$m޼ł‡?üįW\1Ó'…B”KŌ<©`!„BĶó! !„BhVĮ B!„Pa !„BØĘ°‚…B!TcXĮB!„Ŗ1¬`!„BÕV°BØ:===<ņČLŸBhVĆ BU+X” a !„BØĘ°‚…šŪŽ=ŗcĒÆ×Ė0ĢÕW_żÖ[oÆ?’üó‹åčŃ£łģc[½zułąžūļonn~ė­·6lŲĄ0Ģe—]öŌSOoŻ{ļ½?üp:¶X,‹eĮ‚ӒJ„Šƒ,„ŠÖŪŪ»iÓ¦‘‘‘_üā/¼šBccć¶mŪ:;vģšx<Ļ=÷œ¹ńČČČ«Æ¾ŗk×®ņ;R©Ō·¾õ­Gy¤ææ’›ßüę·æżķ½{÷Ąƒ>ųo|Ćķv÷÷÷÷÷÷’żļŸöD#„ę\‹!4‡mß¾żäÉ“Ēw: iښ5kŗŗŗ^|ńEųņ—æ¼wļŽ«Õ O>łäż÷ß?88ŲŅŅR~Ēūļæ’‰'ž8pąĄUW]ehõźÕ«V­zę™gą{ßūŽüćT*5S©FĶ~Ų‚…š«$Izżõ×ļ¼óN£’V«õÖ[oŻ·oŸńß]»v…B”žžćæĻ>ūģ¶mŪZZZ&܇Y»€īīéHBh^ gśBh’’ɤ,ĖO=õŌO~ņóEUUUU5žŽ²eKgg§QÆ:qāÄįƇĆ w·Ū,Š¢A˜Śō „ę¬`!„ę*ĒCÄWæśÕÆ}ķk%7°X,wß}÷“O>ł³ŸżģŁgŸu¹\·ß~{%;"„ŠEĀ Bh®²Ūķ×^{ķo¼ńŲcŁl¶’ŪģŚµė”‡zį…~õ«_Żyē‡£Ā˰Łlؚ…*+X”9ģ‰'žŲ¼yóęĶ›æžõÆ···ĒćńwŽy}ōQcƒ%K–¬_æž»ßżn(2ĘVøcĖ—/EńG?śŃʍķvūŖU«¦&q”9 ƒÜBsŲG>ņ‘ƒvwwē;ß¹łę›ļ»ļ¾S§NmŪ¶-#Ō½­­ķŗė®«jĒńģܹó+_łŹ÷æ’ż 6Ü|óĶ5NBh^ĄiB!„j [°B!„j +X!„B5†,„B”Ć B!„Pa !„BØĘ°‚…B!Tc’Y D3Y:N IEND®B`‚libwebsockets-4.3.5/doc-assets/lws-fts.svg000066400000000000000000000220211476025525100205540ustar00rootroot00000000000000 OriginalTextfile OriginalTextfile OriginalTextfile IndexFile SearchAction Keyword Auto-comp-lete Result lwsac libwebsockets-4.3.5/doc-assets/lws-overview.png000066400000000000000000024654731476025525100216430ustar00rootroot00000000000000‰PNG  IHDRõ’坧 pHYs(.(.ČmtEXtSoftwarewww.inkscape.org›ī< IDATxœģw|Õś‡ŸŁ’M ”KéEŠ€ˆ F bC±`ы]¼¹*"DÅk—Ÿ +ŠŠŠ‚ˆŠtADz!žģĪĪļŁÉĪn6eū&¼Ļē3ŗsöĢ™³›ag¾ßóž÷(‰„h “öl­€ć<[CĻ– ŌĄ¤yŽ-Š<Æs€| Ė“öہžĶØ/‚ ‚ ‚ Ōp”xwą¦5ŠčœōŚÖöa°ųݳ­6j ū ‚ ‚ ‚ Ä1bƒč œ šüæi\{T>9ĄÆĄĻĄ2ąōhAAA”#@ōh œēŁĪź„ŚÕj„Q£F4lؐ† āp8P…zõźłŌĖĖĖĆét¢Ŗ*’üóYYYdeeQ\\Īē(–ß_„Ó˜ ‚ ‚ ‚Ĉ,QĄ„č!żUĀb±Š¶m[N:é$Ś“iCėÖ­iŻŗ5mŚ“”yóęŌÆ_?¬Nååå±’~vģŲQŗmŪ¶7²iÓ&œNg0Ķķ>>~“°:'‚ ‚ ‚ Ä1§p p9śœž Q….]ŗpŚi§Ń·o_zōčA—.]Ø]»vŌ;§ÓɦM›Xæ~=+W®ä—_~aõźÕU5v o!‘‚ ‚ ‚  ”aĪn. ’Ä}Ż»wē¼óĪ#==žżū‡=¢m X¹r%K–,aįĀ…üśėÆØj„y^C7$g€ ‚ ‚ ‚P­i<ˆ¾œžVŽ–œœ¬]xį…Ś+Ƽ¢ķڵK«ī>|Xūąƒ“kƽV«_æ~¹ŸŪ³žC_Ń@AAAŖm€Y@å_«ÕŖ 0@{łå—µ#GŽÄ[³G —Ė„-]ŗT7nœV·n݊Œų}ÅAAAAHh:ļ.Źŗ]»v՞}öY-+++ŽŚ<ęjļ¼óŽ–žž®)ŠR‘°8=ö>AAAAؘ6Ą›€“‚Öįph×^{­¶lٲxkš„aóęĶŚ=÷ÜSف…@æ8ü=AAAĮ‡čó×K `4h =ųąƒŚžżūć­·–ÜÜ\mÖ¬YZ›6m*2ęķāš÷AAAŽqlĄ ‹‚µyóęŚsĻ=§åååÅ[_W\.—öĮhŻŗu+Ļ(žźÄįļ-‚ ‚ ‚ ƒœ¾†}‘Śøqcķé§ŸÖ ā­§«-ŖŖjsēĪÕ:wī\žpø&.yAAAᘠ.šąĘO”Ö®][{ä‘GdÄ?‚ø\.ķĶ7ßԚ7o^žš Š:‚ ‚ ‚ ‚Ps¹؃ŸUE3fŒ¶wļŽxėåKnn®6yņd-999 Ü XāsY‚ ‚ ‚ 5…Tą5Œ@÷īŻ[[¾|y¼õń1ĆöķŪµ#F” °h—+DAAAØöœlĘOl¦¤¤hS¦LŃJJJā­‰I>’üsķųćd®ŠÓµ"‚ ‚ ‚ TCą^,ķwÖYgi[·n·>ęÉĪĪÖnøįMQ”@FĄk@J|.AAA”ŗ|„ŸØt8ŚōéÓ5UUć­} .Ԛ5kČX“Ó5$‚ ‚ ‚ $8 ų‰É.]ŗhkÖ¬‰·ÖŹįąĮƒŚ°aĆ™YĄyqŗ–AAA„å< ?9nÜ8­°°0ŽWØ·Ū­=óĢ3šĶfó7T`R¼.*AAA!±øæłž‡C{õÕWć­k… YŗtiyS^lńŗĄAAA„ųbžĄO,žp ڊ+ā­e…ٳgÖæ’@&Ą@ķ8]k‚ ‚ ‚ Bœ°oį'ūöķ«8p ŽV“¢¢"ķŖ«® dü ŌÓ5'‚ ‚ ‚ Ę$dśæč¢‹“üüüxkW!BøŻnmŹ”)– ühƋOį˜EC©tAAˆ )ĄüÄ’wŽ)KüÕPŽxć@É7-āu ‚ $~"\«› ‚ ‚pģįā'ž§No*D™Ļ>ūLs8ž&Ą_@óx]Œ‚ Q£ łø‚ ‚pŒR]o‚V`.p™Q ( O>ł$wŻuWüz%ȌŒ †N^^ž¹x pp0>½AÕāŻ” ŠžłÓ‚ 5ŽźhXw€ŃF¢(Ģž=›[o½5~½bĪŅ„K¹ą‚ ČĶĶ5ÆĪŽÄ§W‚ Dą×XÄ AŖ+ÕŃxg.˜5k'NŒSw„x’‘‘ĮłēŸOaa”¹x0( |” B„‘/ų!ę€ ‚ČT7ą`š¹`Ś“i<šĄqźŽ|÷Żw >œāābsńĒĄå€;>½”F””T7E7µśŻćƒfJ5ņ^ļ‹jÓgA”ęQ.GŸ÷_Śēɓ'óč£ĘÆGBĀšÉ'Ÿpłå—£ŖŖ¹xp_œŗ$Bu$A…ž± ęcA¢5 ‚ Ċźņ@qšlŒ;–7Žx#~=ŽŁ³g3aĀ’⛁WāŠAū±÷Sby²05ēL£@LA!T )° Óoééé,\ø¤¤¤ųõJHHīŗė.žyęs‘,OAHā(ö£!š«›ˆŃ2āeˆ) ‚ „K¢vō‘’Ӎ‚.]ŗ°lŁ2źÕ«æ^ ‹Ūķę²Ė.c޼yęā@o`_|z%BL‰ƒŲ”Ča?"eÄŚS@A†D7^Ę;õė×gŊ“k×.Ž]ĀĀBČźÕ«ĶÅæé@I\:%Btˆ”ŲWäĒKÜ”ų÷ś ø,N£ļ‘0be(b‚ åČ—ļ;‹…/æü’”C‡Ę±KBuįļæ’¦OŸ>dgg›‹Ÿī‰S—Aˆ1üįżh‹üš&ęcI“ƒP ‚X˜% ‚ $źƒÄńĄ: QšČ#šŠCÅÆGBµć»ļ¾c芔ę•ÜĄōi%‚ T¢,ųCū‘ś"ģ‡H‰h ˆ! ‚pģ’ˆ`p¦Q0tčP¾üņK,Küz%TKzč!{ģ1sŃ^ Ÿ ‚P!Qü”ˆżH żź,š/‹B›E”ĶX)ƒ c Z¦€‚ ljų@r?šø±Óøqc~’żwš4iĒ. Õ—ĖÅĄY¾|¹¹xpIœŗ$‚™( ž`Å~$„~"ˆühˆõźB"˜ ‘0‚5¢a ˆ! ‚Ps‰ūʝ€µ@2€¢(̟?ŸįÇǷWBµfŪ¶mōźÕ‹œœsńhąƒ8uIŽ]¢ ųc)öc-ņeAMbm„k c DÅ3@”ʐH€}­öӌ‚Ūn»Ł³gĒÆGBaΜ9Œ;Ö\tčŠL„čaŃŒąOd±/ā>ń‰¶QŽ1/S@¢AŖ7‰dÜ=„źK¤D“$Å~4E~Fā܋éQ2 "m k ÄÜ3@!įH„‡ŽžĄ2<}iŌØžł' 6ŒoƄ‰Ūķ¦’žüöŪoęāہāŌ%AØ>D(“?ѤÅ~FbÜk…’aƒ RĘ@4 1Ajń~(Q€_¾FĮ‹/¾Č­·Žæ 5žU«VŃ·o_Ün·Q” t@ BYb(śƒü‰&ö3ā?€ō‘0Ր©‚ ń#Ž,Wļ;Ż»wgõźÕŲl¶8vI83f oæż¶¹hpgœŗ#‰ED" žHˆżŒųß7ƒf‹_Ÿ{Ē«#a°Źōŗc’…CzśkS 2C@ĢA„źG<d¬č‰’:’ųOˆ S§NäääEÅčQ»ć×+Aˆ#1ż±üįŠżŒśf1_…|¬1ŒƒD5 ŅĄØŖ!‹č1A¢O<pn^3vĪ?’|,XĒīĒ?ü0S§ś<Ҽ ܧīBģI ŃŽąÆ)b ("źćC¢éaō#C ‘¢$g€ Btˆ×CŲ “P…åĖ—Ó§OŸ8uGØäēēsōčQš4i‚Õj »½£GŅ¶m[>l9ĪĄ¶°„D„ˆžpFžüźĶ*āk¤ĒĮˆTt€˜‚ ‰C¼„n^2vFŽɼyóĀnTÓ4>’üs>žųc–-[Ęžżū±X,“lŁ’ōōt®øā Ī<ó̰Ļ#υ 2gĪ.\Hvv6V«•“N:‰‘#GrŪm·…µbÄ“iӘ-ݹč">żōÓ ŖWĪ_|ĮčŃ£)((ØRżĘ³`ĮN9唰Ī+D‡M›6qĪ9ē°oß¾*3iŅ$ž~śéĪ÷ŲcńŠC™‹¦“Ė©.‰MœE¬F ī_"ō£ūŁWU^„Ę«ˆōĪQ-Ķ1AŖL< €„ĄĄŅ„K8p`Õ+fÕŖUœqĘU’M›6eŊüń!Ÿ[ˆ<‡¦oß¾üż÷ßAūüóĻ3aĀ„ ĖĪĪę„N //Æ“8Č+’(AH,¢āŸ(¢?#Ź÷«šŗož $¹a4éb5ĮPˆ¶1ž@†€˜‚ ń!Ö§+Œ¾}ū²|łņs»ŻōīŻ›µk׆t|$¢„Č2qāDžžłŽMIIaóęĶ“lŁ2čcoæżv^xįsŃ`vH„X„ŃžhˆžDüÕMģ}=}“1 ƒźdDÓH²ŻźdČA„ĄÄśaāUL Ö>ųąFrc~ų!—_~yXZ¹r%½{W§GĮšĖ”C‡hٲ%%%%!·qēw2sęĢ ūūļæéŌ©ŖŖE끓Bīˆ D‘PGūEџčb_Ä}ā‘č&Au6āfˆ ‚PJ,8R}@č!ų»vķĀn·‡Üą%—\öź÷ŻwÓ§O« !2¼öŚkÜtÓMaµŃ¢E vļŽ¢i6Œ ˜‹śæ…Õ!Aˆ!Žö'²čĻ8æüŲ’Ž‚®‡3¹ 7©Š•ŻėŠ+MJ4]@K4s Z¦@zmĘŅ ØA„Š±Åš\Wį’7ÜpCXā`ٲeįö‰„K—†Ż†~ū-|­½wļ^öļßOóę̓>ö¦›nņ7nB !ĪDz“?Ņ¢?Ž£üž‚?^āæ7EžĘ8ōåX¦(—ćU'·(nÖRłŖtA³””rŽ‹—9ą¹īKÆæH¦6Ó+iĻü[P3Ąü;Sž`ü^ł’ĶæoĮ˜šžŻ#@„c”XŽH¬@Ļ€Åb᯿ž¢mŪ¶!7ęt:INNĘķv‡Õ©V­Z±cĒŽ°Ś"ĆšįĆłņĖ/ĆngŊ!­šąr¹hÕŖ•yõ< ’ Pˆ5qķ–čψš}&-Ī#éå żDfg5ėoe“Ŗ@š 8ŽGža€¢°mƒ›c׳ņ‰wŌ@4"Ņ«Ų^¤#"=E@ŒAŽ5bŠų4hPXāō‘ūpÅ?Ą®]»X±b}śō »-!<GDŚINNé8›ĶĘu×]Ē“iӌ¢TąB཈tL*!”Ńžš.śćҟČ#ś5MŠKEŸß–B®ńZƒ4£nE¦A,(/j VĘ@4"2Ŗą’ŪQ™!PYd€łw­¼Č€ ¢Œˆż?b‚P払ą“©o̘1a7Źļ@hš#AŸH,ÉØ(JXķŒ3Ęl€~ķŠ D•H ’ź.śćŅHģĒCč‡#ģÆmƉyŁtPKhwbOŽ~ügž‰dßŖ ŽŚä”īhŽi‡Użncm2ba DŚȈŅTć÷*Sdz€ Ē 17’““>|xŒN+T' ĬY³Ājć”SN”^½z!ß©S'zōčĮŗu댢ó€ś@vXBóÅhUEF5üńūѹ’g'Ÿhm¶of Q^ŻŃźDł«ŠõšGīŽ?Kw“?žAŅ„÷Rå„e*ūÅĀ ˆ‡)ąoäĘŲ HŲØ1A؁ÄĀč t5v†JŻŗucpZ”ŗ1xš`š4iĀĮƒCnćŹ+Æ »£F2IčÓž/ģ†"*ük‚č¦ą‡Ųex¾YČ[,lUUŻpŃ®C@u¤Ŗ¦Å aä­2åö]·ˆŌKļåp¤śQŽß7ŚĘ€æ)mC -BŃ!Lˆ”‘Ø™ B $*;sēĪeōčŃa7ŗxńbĪ>ūģ°Ūųõ×_éׯ_DŚĀćÅ_düųń!Ūŗuk6mŚrƒ­[·Ņ”ƒĻćęgĄČ°Žybęé’ŒÜ'b5?– ś¢)ōC”ļ’ÄL§'ū½ŻĪ3Kx0ĀŻŖ6tP8 8Śv¦ÓĀMģ¬ģ˜ŖF„B¬¦Ä*Ÿ@8ŃéN jā@I(±H,"†/’’’øą‚ bpJ”ŗrĖ-·šķ·ß2žü ŽKJJā­·Ž [ü“oߞ“N:‰ß’Ż(„ På0RA0Vų'ĀhF„E“ÄææąĘč~4„~4Bš-6¶įŌ_»Ż“‹Ā)Ŗ ¹hŗP˜OŖRŁß$ƒ Š5 S VQ‘ˆȈpd@øQ2=@„c‰hõS’––VAuįXĒb±šĪ;ļ0zōh,XP„cŅŅŅxļ½÷8żōÓ#֏óĪ;Ļl¤§QĆBj…(£0’D ń¶č¶ą¤Ųõ<ū$[‹ õ×n7ķö„šy2÷„÷,żūGĻŅ)ļ­v²†ßŹźóo 8˜vnčÅ ‚£\évŃSƒf ba·ŻĪ·½Nååé‹õ$‡Ēn ähŠĄYHD:*ś{†bÄb*A, sī€X™į$,/W@XÓÄ”šm`°łC‡­ Ŗ 褦¦2ž|fΜɓiÓČĪ.?’ŽąĮƒyöŁgéŅ„KDūpŽyē1cĘ Ÿ"Ä*£ ’Œ0EÆy40Ņ¢?š‚?Rb?–Bæ"A_· ŪrčÆ5¶‹Va­ß$vĀä³Ł$ü,÷:‹¹^Óhl”ēs&’ŻĒxėŌ³yäö×8RQ;/ŽLŻ„ßņ’źb„¹\ƒzØ4+Qé»| ć/lÄõÆÆeaf ļD!ĻųäÅuÖģĮb¼Õėx"¾ģOy×@$ŒźdÄŹ H“Ø1AØnD{®äkĄ ĘĪśõėéÖ­[D–ĒGŽažüł,\ø;w’››K‹-čŁ³'_|1}śō‰ŹyKJJhŌØ¹¹„KJÆzEådBõ'Hį_“D$‰ęžp“…~UFė+’ž]’^¹Ÿ,Ą Šīd:<>Ÿ½žõ²–mć”įō>œÉæÜ*<ā]U,lHNį’&ž›7žcL.Ģ'ŃpåR¾Ņ4*¼Į+ õčǐG^ąQ¶ĻōžŖļ±æ>™ĻT•tSq‰¢°WÓh>įü…šržc_ņ›’ynéĒBMe @ķ:Œyó>®Ø_žēB;¾uōÄ\øł¢1} šłĀ]bŖ–3 *ł*Ź©<’0P„D'ŚĄŸ@'€ęĶ›³wo™g‘@ˆ6^x!_|ń…±« £ń두pT#įŸq ‰žDū•‰üPĆļ QKžŠ4=ō¾AcĪūæÆXź_÷āü×UĀ(›oēżĀÄQéÜP˜Ē³ą%7cµ²äā1\6f<łŽßµ ĖÄ+ųJU9ŻtĢv;KŻ`ss¾¦ŃŻōŽĻo~Őś Ė ¤Q§3”°'<»šŻĮ3ĆF1ćś;ČŪøėŌ;¹¢ —™@-Eażō׊„ŖŁHø­«ŖžØV*ćgf0§¢ļ/˜H‰ć\zŻH‰f DĖ× HĮ›b‚PSˆę€F@GcgąĄQ<• Dž˜ +z>‹…ń두(Ä"±_U„“Gū£!ś£ÖŽą“Ų¤Č7„}sæņ]Ū°„ė¶ŚķĢ}ņ ŽŻ•kŠ&H‚ÉÆóļG®„ŸŖŅ  €›våś†åæõ2§šrŸt&3|Śńšų|ęO<‡_UUO0œ_ĄØģ,¾0¢ ,ēŃ’h©¾Ę2¦Š?ūüö+3 ź7A3Ģšżū‡j „c DŚH1µ©č€H™éa& ÖšģW9O€‚ $Ń4ś›wÄŖ§œr ‡ƒāāŅäÕĘr¬įŸČ£żŃČŽIŃŠą”Ų„ŠO©@<łå1* óxĻ<’Šp«“ $ -vÆ5FŠĀŸćåŅn§z£žūĖgŒgäĪü„nÆäāFš5>yšŗŖź½d6į•@}9®īŌŗŲ­Ž|©uyĀ,ž īĶ_wžĒ«Ībīp:±z N>“£ĪšœŒ÷9¢ą–é¬)ļ³_:‘EÆ?LCa’VśóŒ÷U—7bĮbć÷M”Ҥ?m’ó£Qēå‡h}×sl7Ž·ZÉ+ż@š¾ `nRąæM©ic”g„k k DĀHd3 7ĀQįNØlA1AØDÓ(MśÓ½{wģv{OulĶÖ­[ÉĪΦ~żś“oߞśõė‡Żn~~>‹/fūöķäęęҤIŗuėFŸ>}°Xꅊk×®åūļæg÷īŻмysN>łd† BJJ0ccŃ”WÆ^f .Š Ų· ±” c^4D8+śĆüįˆżŹ„¾?ć†ÓūŠ?ŒW Ē“ĄĪĄé„Mkyąź!\?ķ”×FöžĄsĻV,l8ó\†^vÆĻ’z›¦ßĀžŻ›u@sÓ./%µŽÆĄØŹ£Ž±u­U–ęåžįłēŸgٲeØŖZśžÕjeĄ€L˜0K/½E ī9|×®]L™2…÷ߟ¢¢¢2ļ7oޜ»x÷ū× IDATļ¾›Ūn» ‡Ćtß+ā믿ęžūļē÷ßō¤„„1iŅ$ī¾ūnRSNጠݻw÷/: 1j.qž±ķ‘żÕAšd)öĮ;Š?g2õ–|Ć,ÕÅÅTüyk=Ģ›3Ę3ąŽŁe5ŪćcéŖŖ”®yŚ“ćżÄ?§aēīĶøŃ“śÕzó1šĢ~sŗĶ8“oWé®vśšņCķ'Ģ`óż±OÓt]›„¾ą5Ü.šÆ-Jłķ”Ö±°Ó0ÜzD)nŚĘkÅVö³™iÖUQ8`$+,)”±Ł0P¬ä™Ŗ§•g&ų›#•Q‘AČØĢš7 ¬1 Šy•‚`Mp D1Ŗ2Eąń18œNž«(,2Ä?T=* īF€˜‚ Ĉh>Š?€ˆŖ1hšĘK/½Ä”)SČĢĢōyﯿžā§Ÿ~āå—_¦{÷ī̚5‹³Ī:«ŹmüšCš4i°®? ,ąŹ+Æ$''§Ü:ūöķcҤIĢ™3‡łóēÓŗuė*÷½CW„hEį_SFū«“č”ŲĻņ«óļ 4޹•nj õ¬÷=5WMĮēGŌŁXś’Q]\bģ+ ūmI|–œĀJœ%%t**ą. HŁ·•ŪAĻ–ļӏLĪ(mĆĀś;_`M Q{Ź9}ü{5M™?“›¶ąkœ;šĢMĖQѧX}Bćė»x“hĆ²ß‹ÅŹFÕ„ėWÕE{æ:Žg…ā@Ē›±ŚŁUš¬P£‰_}_‡¼’¶,öØŖnhnłtŹ”Ą˜ˆŠ¢ Ŗj2Ź3@7"e ų[Ņ‘4"M3Ą˜"0ČŹėšF  ®ĶųQI®€ŖLˆŖąY]FŒA¢M“ €®ęšj8NʎĖ»ļ¾[iŻõė×3xš`fΜÉķ·ß^iż}ūöqŚi§±sēĪ*õåǤ_æ~,[¶Œ-ZTX÷ż÷ßēŹ+ÆDÓŖvłż÷ß8p æżöĶ›W–©b&NœČ‹/¾Xåś[¶lįģ³Ļę·ß~«ōsEƒīݻ붼÷»źóNŃ£ ’HŽöū/Ł Įˆ~Cœ|ö6¶'&ŃēōóY?ć’|Fs Įļ/öĶ\5˜ ósøCUé‹IØ.œGŽ’oxzź\ž$OģĒōõK¹ČI©Ć“kļē’łöw#«0Ÿg\N†fīŒ’ęŪ–«Ä;„ĪfcE]ÅbįoUÕ €¢|ŚŅeę÷›5DU25M½ĻÉ¢q£†ģĖĻA!€l³ó‡źāŠó ¤ųŠfs?mZ”÷»©å,ū}Ųlģ1^»Ż4J)G€[4’üß+^ ]Ś–F²Ł0°$™¦h¤–1*ścūQ™IP™AČH+AĖĪ*[Ŗ)ķ¹žK—*ō‹ˆ–!f@éR„vj.†8‹xn•sėÖeڼĆl t\F˜Qb‚P‰–ą“|ØsēĪQ:M|™8qb•ÄæŖŖÜqĒ4lؐ+Ƽ²ÜzN§“‹.ŗØŹāß`ēĪŒ9’eĖ–•›saÓ¦M\żõU’{÷īåŅK/姟~ 9/Ąūļæ”ų7Ų·o×^{-ß’}Hē ‡““4š5kƾ}„`mbŽ !*YU”:’HöG"{(¢ß sĻ«N.ź|7ŸĖ@_āĶL°‚ßXŌ¾*‚ßœ„o’,]Źl§“kŹ©žZTĄ”‡FŃōŁoøŪ’Ķ›§’9å.=}Ϲœ‚¼AyŃ-¼=÷ijiM_}ˆ.gń‡¹Ž[óJX«żĘžĻ°·‹•ķŖŖgŌW“3‹rEįaŠ<³ß)'MŻĮßŅž~øiR`NRhń&ōi/°—ż;(6 ½;XĶu,ŽŖnżµĖMc’ć“wĻÓ ÜfĆ )ŁdiŌ)ōūĪSŹÉüļCM‚Š ‚ņ́X™„Q;|ėUÕØNfĄ1ż•‡Æ(ü¤XłŃ­rq‰ę½ö/mDū"•äóDzł¶g¼&\F„ŒOŻJW#@„D Z@kćErr2M›6­ jõäóĻ?ē„—^ ś8MÓ7ngu͚5 Xē•W^aŊ yŹeŊ¼śź«ÜvŪmßæļ¾ū(,, ų^eüņĖ/„ŃĮRRRĀ<Ņy~ųį,XĄ\r”ҦM1j‰*ü3ā8ŚKŃoŒWgōŅt¦Õc_Ę6ž4UIźp <Ń_žąÆŠŲæé"śä”›ÕFĮģ%|¾!übŖYü+6Łģ,p•0RÓhą,ęę/a±‘ÄĻ, ļ™Ķ*’23=Ļ ųĆY,S] ČΦ łĆOÜ{õÆ·!ź}'éX“ŲęōČrU ¼€bįn}Ŗ^I±7_O ,VŽ–ī˜ęéŲģŽ.øŻ•®œ ī Ž-äW]Te.[Ré++ŖŁ0H©å5’šģyÆ4*”²č;¤T4ŗ_ƒ ˜ÜįšžU5āe†pü;ϐ4p8xó§BŽĪķšN4Łūļiš>ę£™üōyž»õž¾ųvJ“*eD1O€‚ $Q7ZµjtrŗźĄäɓC>6??ŸG}”ٳg|’©§ž ¹m€3fpė­·–łŽwķŚÅ—_~VŪ/¼šBHĄwß}ĒŽ;Ā:÷kƽ7`ٲŅ(ŚĘ@m ?ęĀ"^Ā?‘GūSb,śÆ?ƒ«WsnQØ*C€:…y¼L2ź&§š}¾Gt»] ņžį~ct’±8~ĖŽŃT}¹ZE!+÷°ļ³żShē,f‚gWK®Åæ§Īå9C¼}ž:~?—¤v9Gx(s/_ū‡ļ—!Ąč½=‰•† –ŠI+Äā'īKGŚ5µĀĮp’j³­Č#Ż®Ą€ÅĀ!Cłø]45֒)Č+ūŻŚl›v“¦:IÆ i4-ډµnĆņE¾ā¦4£«Åę¶l6öŖ.O[.š9ōŌęöFEŲl4>C6P«w €fŠL•¾Ń>S<>hƒ s 1®)ŠÜ/Ŗ!҆@0SĀ5Œß„`¢Šó 8;žLéCĪÜ©$ķż‹łšF‹'mvVŗJärńßW`åÅ·³hhśߞ?_]­O)ÉØbž€xŗ F€ į- •ń¢M›š7`ŗnŻ:6lŲV|š³fĶĀfóż¬]»6l”¼sēNÖ®]KÆ^½|ŹæüņĖ C’żY¾|9™™™wÜqA÷Ķ7߄u^€oæż—ĖUę;‹6’¶"¼eĪ…R…8„;Æ?XŃV[:ŚĻN'h*§āYĒŽĄåā|`’!ō»Ģ¢åz&{M£żŲ“h=ć+|ęCł‡ōW&ų'¤3²0sķµČ÷0ŸlY͇šŪ›¬VÓ(³ŌȞ­Œ=0Žjć“©sy¼āķģĖČŪ»ė6üĢ: ¶ę¦Ū¬»x’Ė, aŁż|JgI9³Ą·9ŲEēūp–Ķ}h±Y*ŲUʄޙƒmŠ€m9=u5ŚŅ+×Ŗ‹&„æŪ…w=VÓņzĶZņ×į„»öyoŠ|ģ=ŽyžžøœŽÆÄbaÆł=G2ė‹=‹ŃØ*=Ėk ØEÓ¼ŃXµj±Ūų ąø†ä›&~'m]Lr×>ŗ‘Q+ÕWP=!ĮŠPŖ*ž§‚ā/ž§XüJEā’2*õĻB€o%ͳUõ˜@¤čÓJ(ā'(ĘVQ½Ąoc»¢!gvIā‰Ž6ģŁĪŗ’"¦i*š’ŠĀ{=ł„WcM_Ģ?Š…ŅĒCŪt<ś?ŗ”ƒ()Q²<›¹­l;Š’–{XßņsķtruaS_ŸŹ“ų/±ZYiµņó_k½†x^ŠĖ©ČŌiĜ@Ÿ÷šū8dw0×Ų/8ʹBJ­K¦ßfˆ€#‡°¼4‘ÅUÅłœe”»Ż¾@}Ąbå€éżVŽ<óV`ŚŅ‡±CDh¤Ī}”lˆæĶękślĪ“hW|åėÕw²S1%ćŪ¹I†Ø ­KŪ²°Ėü^ż¦”ź;Mćų™÷•ŸpõåGé¤iŌõģŗŪuĒĒ‘ļŃß7q伟h`¼.šū¾üæKc«žŻ›ĶŠ ó–ģŁę­0%ŠFC(³•ƒ‘3¼ł×ÉMB1oFyvŠyk޾”±"ū Ź–,,[²°dŚP2mz{{v [ ć:˜¶ŠØźļH nŠļŹ ’6: ¹Š’R»°€·¬B¹„ŸøŻ\6“ĻĆ/ęc21"@ņ‚шšyDjŲ°’Å|«!kÖ¬‰H;?üšC™²„K—F¤ķO>ł¤L٦MWĆ šŸž9čcöļźŁ«\"e$C€køę]Ō5­Š£ž‰<āĻŃž`Fś;—ŌāęĪ6¾łįsöäēš–Ŗr9划”T&¹†–ß»öM/¾ł;;2÷ ›y”?µ‹ŒćT•³6®Ó#²ķ(7_ĢɝŹ;Ÿ¾Ä®¬½ü}/¶­ē÷±½™÷ĮćĻ]æ?•īhŌUöŽŗƒ1cīē` Aµč#RZĘ~‹ČOi‚hDæß ~Ę3G_sÓqŪŗĄłōߞLėÉCłęŸ}|ī,a“Yü+ GO<ö…ļś&­×Ų“*€FŚ{ĻÓ¾ČŽhsŲQ¬VJ(óóčP]Š-ļ»Ż4ößčXQгX_ 9…_ż?WŻŗ”Žl\.Ņ§ŽźłffNę#i"P|Ņid”¶įŁRjy£)œE\ńäX.ņļ× ć9­øqF½Śi¼ķš=X¬^żłĻ!īyéß“r}&_Ɲś,E˜#E T)ZĄ Z *ŠØJ„@Š_„@ ü£Ą72 Pt@°‘•T+ƒąvs¾¢°üŻÕ^£« —Ó’Sł6бŪ6¢ØnF* Ė~.ą“- tģfwč–ZäVń'#ŹŻŖ Uæ÷ ‚ @t"|FG£eØŖZy„*’“`ńć ČĪöŸ5(SVÆ^½ˆ“]«V­2e©©e¦¹†Dżśå ī•Orr2G­¼b%ś\ѦQ£2žb$įĢóO“’P‰öh ‡ų’†KĪ™Q6Ū’ųŹYĢĶx„“¢’Ą[ä˜GśĶsłĶž£oą—’M§Ø…F½'§Šū™¬øy×ęńę šTC–żĄĒ'åÜ=qåy9(—Obż³“ČĮ3"lKā‹žgx“Ū5‚ŅÕł6”'ųŽ®’õµZv"ą½i4Żń§ēŅĒå¤ź¢§©?ö%shŻ{&™G_ś7ķ·üĮ·šVŖ ‹ķIĢÆŹ7zóÓčŪȼēr^w•p1Ą”L:ٽvč üżņ½ä¹ ģ¢OŻ X-6vāŅĆń%“÷æa#īŁ”æÖÜ49’…%9„ģā£ć”i!W%Żūń]Qļµrłx¾łßŁ®¹i(‡öšŚćøś_3(]Źęń;œ“œƾ#™w.¼šĆžm]z/½ż,7xŒåp&ÆŽy)g§¦±X5/—Ó‹‹øŚų¾-ž{ļ £ōɵōĻa³±Vué4Ŗ‹›7”öǽtÆõ¹Øl"×dgdFQĶłĢQŁUˆ8Œn ų4(·@€H ؁ō• üč€lÓoFGO4JEŃU‰ %*ąź4Ņ4ZY­|—Š ŗ8 ēÖ:ōAćx›ƒg 4ŅJ±xĘ•>¾² ĖCč˜•å³Š Põå%Q  ń @Ÿ Ź«.—«ņJU䟞©¼’‰`ąÓN€łę!ČxiŚ“iDr ¤¤¤T^ɏ:uźDdž~g3#З׳?…ó³{;ŸzĢkIWÖEæŠĀī'se«¾įŻĘgķp"/ż±–QęU ÖżŹ ‡š§a”bš’ąO$́`ŒdŹPÖ(3} CĄ0ĄkTflÉņF“ĘŚ hܜ" _u3¼—ƒµźšó²L–)žćÓźp“Ø0—‹­E3æ¼ŗ”GÓćų­¼sÜy6'ęškR7[ĀéAN mēŽŃnżēž3%Ż×tŒH¢@1A(‡h>ĆĢuźŌ‰Ā)āK¤ €@Łģ­Vk€šĮ؝ää WŠ*ńłvŹŽ˜ßĖ܃āHį«‚<ŻP] žšuƒ†y—“ƒ²£”¹‡Q’,*ōĪbĪ+.ä2Ą¢(l®×„IĪåG€'n„ÓīĶ|¦iz@AQwüń+Æv=U?1ŗoOā'Ćp:éYXń8EaƦé+Ś2±œ:{¬vV$9XYÆ+Ļæ†uF¶yc^żģ»é”z–œ]{påmP&!Kķŗl(š¤®+)”“ł½¢”Zµų6Ēcø\œõō}t?…2óŗV}K-Uõ^ZnWŁ€žż)|ūYļłÅŸó݊żœ’Ę_n'Iłyō+*ąF#ā@QČ>é4-āĆĻņŻĆ昔s„'ń¬œąvÓĖ]ā[ĻbįÆöݹśāė(×uæs:«gOå¼›yRu(ٌjKā‹SĻᾊڹž¶½÷"§­_Ī­ŖJ; ?)‰ OäÓ1÷č ż³@/5 LשæA®9ČؕІÅpeŖ%Ž!PYt€ażWd„jT%_@ #ą™É;­#ņŽš/§“ė ōqūeŠ…Cؐ1Ÿ”Ą<’ćT•‘ŠĀņ·ū®F”Ŗœ‹Āžy;Łē¼¹åīā=‡@ż¦üŽūĄ`;w8ü—§ēĄF€ŪÅxžé’Īæ%?€ ±$€OhfRR™HĶjO`µ²Éåņ.i‹B¾ÕŹZ›µŅXŁ®++ƚČA’z|Å\N&]Œ÷,6’E(­:°1Ó#EÜ.:ū‹ÓóG2ļƒ9Lõdæ·ģŲĢÓ;’b„’ų¼¹Ü„i”Ī%s»i÷żg¤s‘ļ~ŠĀ!ĆŠÜ“É=ŹōÜCߊBŽq-øńā±ģ/*,’:ŗļ¼ž$+vnį.ÕIŗ¦•Fŗ,6'§ņįČky£ė)VŌĄ ÷ņ'0üŻgh·{'§¹\4@ƖœĀö=X6bŒ¾Š¹@S®¼}ÜĘæ+:We2 ŹåD„c TÕzŚ@ˆ†@(ŃĮ˜įDüüKŸJĒ5ēÕż;¹©0OsŠŃjgkŠƒßf±āģFōŅ4ŚŲ’xÉ|Ģ™õ8CÓčj³1Ó\nLĻZt4×­r±¢°źƒ]ŽeJG5¦ĖÅSn˜^ĄĄø—Ō®MO ­ÅŹ+ę÷ƒ5dZ€ ” Ą'RM4„c EQHJJ¢¤¤t8K €xFøuž”„łGz“O9ķł‹~sh’“’qąĀ~¬Ö<>/— ²ķ,†²‚ßŸŪŸeÓż±ß”8ŽäZµŃHżx&=žõ«J“µ™ęģV;].ΰXŲšÆ’qV£ŽpbO¢<„ŅÕgéCky£Ī›“ ŗYāvÓiķ/¤ōģļ˜Šw(łó?äµĀ|īP]ō›=…š·ejĒīl’k­öļäśOø|Jm¦ęs?`]ł#§ <כtĻó™ŗŻe£ĢŲl,mف‡nŗß”„ŠCIēšŁܜwĖŹEŌ9śµ{Ifū6Ž| ĮpÕ$ž†²†I *3ü d„‚łļé-8<±bfc ’¦@U š3‚4Ż (ozĄ÷;ųūĢę¤gbJI “(!MuņŸXYp”‘u°ĄØ’Äx9LŠ›7ē…@myV’ŖGw4ŚYm<`®“­OćI®Ķ¼ OÆlN‹ƒ¹hjµ²±U+Ž-*Ņė„Ö/2-@„p‘A؇ĆlČEc"=ź_Ż„0Dk“ߌæč]ųū×˶£8|]T ®ĪĻ=Ģ=U<=6‹N®4ö;õįÓŅž9üĘ­:ĢĶ=¬.'ƒ·­Ć޶‡wt¼mœV+ĖUgäd€#ÕĪ[dG©ŪŸķa€ŪMē-ĖØÕn”ļ(zyųˆĀŚ4&GøŻœ8o…®/] Oq0>śóčŁ³æw²¢B”+Ęó̜§ęÖóąrqś®-|æk‹ß÷–ħ÷=ĆÓ’½•KŻnŚēfÓÆÄĪŸJVń)µ™•’ĀĘ¢żĻi³“ŁųV^}®æJ‚¼SėāNÉŠ?y°ĒCRˆ‚ŗ*†Aø&q˜ ”äZh‘0E 8R!!pŲTĒlT6e Pt@<Ģ€Pr,ŁĒząR€ŁSI?EŸ¤Ŗ\É3g7ā!«•ā#™<®iœbKā!Oų¹ōJņu_ƞƀWU.FaŪ‚#¬Z‡žE¹|īīs»¹nėVž ”( kŽŅWģ&Y L !\$@Ŗ€Żī{YĒ«ĒÕUų!£”’hĶļ„č7ļ7<ŽÆ÷īŌư5¦„ۃo²Į’ø@ĖńŁk±Čy“Ō(ø~:‡óA)šKŚpŽ |õŃS„#üiŸ>Ė)w½É/ę~G2?äé@I€ēĮ;_ō§t0ģJ–æ1ƒbĻ®mɆ å]¦ʟCn¦koVgģ-a]µ„ń_ē;Ÿž¹’pR^“ĶeŁYō+*ō]vÆ}WŠO>‡KWĻn·wj[ß\~'Iƒ†Ķx Ø€6 ³ŅæžÕŹ”Ņłö›gų&C(.ŠžpA¤— Ö,ØĢ$Õ 0ÆZ‘7ž9Ŗ”T° ŃU5BI ÉØCüŸŁ‚nšF«•OU7§åd•&ūsŪl<łŽ}µŠW¦b7ÅwzU’_÷M&ŪWŅ“Ń­i©iō±ŲxąīĮŌ.Źå}€ä4Īų:‡_®jGóżŪyMÓlµz“•ŽI!}ōh 9ćm IDAT–’fąs~J¤óČ“A8v‰†ą3§Ņé,÷÷SŖ ~«NČEŖ"ž#5Ļ?Ņ#ž”ŹüžXöCÕDæ9¼’Į9¬Ÿp6»5–Y‡ ŗHōƒw™Ī§²dõB4ō¾Õśß$NøvjąŃ¹ŽC(œ7“%ŖKO”—“ÅŁŽ<~5š×­Ē2#ўŖrźŃCŲ·@ ĘŹ¾õ,ßŗJ”k‹ ō‡ł`øšj’ō.OäAa>·ß?†“ŗ łJs‘”s”A%E\ $×ŖĆŌĀ\Ęi͊ Ybē9’ö†]ǁ“Ļäœ÷Ÿęņ‚<†ø]œ€§ĶĘušåMź Ɋ‹Pn|„% ü›Å|`·qЈĖWU—Iuš`”zŒIQlägH._ōcTdkDĖØČwŗ@0f€9`ef@¤¢GžŃĆ’kĮæĻĶ®žĒYN•ĘõcŁ÷;ų»“ĖŚŅ|ūvV½:•õ+ÜzāP3ē6§½¦q¢-I׎ĘŌ€¬\ (Ž=*ą÷%ŒšŪ“óuŽĶóīßģlē—‹Įuźčõ5¢cQßĻĖo½Å@Ą’œĢ'sņYm>o¤óČ“A8v‰†ą“÷×6-ՖābŸ)¬rQG‘PGżAų‡3āIįéŃž@KöU$śż±%ńµ³˜qĪb†ęåš”#[æÖ0źn2×~Ē·›ī»7rš–ł8ór ‹ņs=™ņK8 ˜fŻy#k_|˜" YÓØ;g&]ļ}Šßõ¹Ø„^}Žūē nØ.śN›ĄŠ_ąėņ>'ĄÜ’ŃģŠ[}ę5oĖć»¶pś=W))blę^ƚ³ŚX1zÆ|4“¢Ü£<īvÓķķt¼ę^Jü ±Ū°®ńOń.šnØĀŻnēńŚ­Ņ$ÄfbF(Ÿ3Ó "“ ę@0Ę@ S Ų“taø†€ J­T4C JÓ¢hTuŠ@eQ¦ØN.VÖ’°S?ä®'ųĘ|L (ٹ“jż·mDiŪÅ÷{ĪÉęt€”Ś|o.WK‰Ā®ū~eՖU(Nw»n™įM” „Ń>ÉbK(GźÓ Š‹yGQX§it-(ąŽŃIL|æ„’ł®ˆēhA8ęØp¤ń@Øīhšę‡”ŠJØ „Ŗ£žU’ŠųĻ%£Šā (i!Žś÷FŲ &Ü'(‰’T.ž÷€blęņĢ=(™{P{P|„æiÄ?ŪŽblFYīa”ŹśÕNõŠfU„÷ŪOŠøŗčoŌRš ä7AÉ,ÄR«‡ųäźmŚzŅ@€¢}½>ąČCqä”x6€–­½‰īT•^_æGżŗčażun§Pl³±ĀؓµŸžv’ `ĀłŽbńY™<;ē Z›?[Q!JQ!JꬓĒrߏ ½ū -Jģ(ĘvżĆ¬­Ó;(Ē<“%±šŌó¹¦É 8/¼™wŽkĮå§ ”ū ł+©ÅŲŅŠ…°y •äT=“>€ŪMc€’b”J7[Œ¶JśQ•ĻčūŖź÷W\„āæåŖXŒĶü÷ ę{7®óĢńŽcӜXŠģ(ĘL;žGŽ<‡]ߒķ(  tƒĀc£!”n~äå č Ķ\/; %ų5÷”åd”Ü}.ƒ—|¬§6Ų’…eK–ĢżŽc÷ģ@1PłoßNPĪjKgM£‹Ż^vŗ‹™e™,³ZłĀjåūĖŗ”ŚKŸ~Ó¼5ی²!ĶčØiō·YłtX“†Ńvļ^|»7yč„č it³Z½¹T•‹#õės†ŪĶ9Ż»Ó Ųėv2ķµs˟äč7…²÷Ć@÷Ģ2Ÿ‰Ŗ›ļ‚ T¢aH€P£())AÓ|žĈ0Z3üžĮĪõæŒĄā?#FĀ?”x ’rCųū‹~CųW$ś+žf0ō:~<Į÷Xvlbh~ŃØŌś,2^«NĪ<ŗ›9cæYM|œmŠE_ć°®Źą ’öģ~6^2 ¢yüuźćnz<”gēGÓh“~5ß>|+W¬ż…”¢B”E ©ūŌ½\ōÄ$¾-Ģē^M£ńŗ™īßÖ¤ēł°k¦Ōb¶ĶĪ›E)µxžų¶\šß—øę‚‹8œtķLńæań°Ń^ • ÷Ōdu5&%6jC„[¬Ø¤”šž§‰„A`6Ģę@U?j8¦€æ!pŌd Tµ ĆLs䔨ÅXāa@īŻ\L©Ķā-¦ß]c“ߑŖ£ÓZÓče±ńҼĆü šūļäX,| ¤­ZÅ åŻ³ ŻļŹ3*hšÜ‹Å„O4¦ų$UĪĻĻ/ƞ T \ĆEńčG$ įˆh‡ū‡źlF’h†łW–ŠĻ?¼*_¶ĻéoœsÅ=Ļ"W ę2“ —·+j«>ŗ yæ¾6­4læž[ĻŠsĀsśÜX#aŸ{‹KŠø 7—³€ĻĶ"æN~.ōü“VœZTˆ(,ŪaįēGo扂|}¹/M£aN/¼5“ē…|M#Õ|œ¢šOĖĪŗPģµ7øźVvą„4eDly¢¼’»ūńķ9ų׿µ¦Qwēf­:Õ0s3ĄwSīŠ¦Ÿł$‡÷zØČØlŠA±ß¹ÉhUFČØŹō:žė]%pŌB gŗ€1U ܼåM0O8šĶ@kŻŽ/šć]E`ĀON懧¾į{ĆØ_‚v\3żX’āĘļćĪ“Ž·‹”CofĪų)’"Ÿ@ły¾ś€ī.鍚18cwåU@Š:õ`Īʕœļ*įįŒĻxČS–kz÷L}®æŪ©O[jP‡mFŽ€\ŠT•KPŲņe¶¾“fv6#Ńó=ĢŸ{‘’BŽŃćhŀØL )‚Pc‰†ą33ģŸʬv$Պװ\Ō ’IžDųūRŃÜžŠ²ų‡"üĖżłM¼ół“kóužĒP]¤Æ[Lr³|Ķ4Cōƒ×IīŚ‡b›Ÿ$zه8«.¾É±Ģ¤„±8Ėc8KH÷įæą VŁż5ÆĶąÄ SŲh\%vóz6w<ĻĢYw@A.÷VO±ā'žŻII,č7ˆū‡^F&E(”,ā#š‰ūݵūįČāp¢ÆÜ£¬[BćVō‹U ±f1Lßu@“ €APž9P‘1IS C@óœ×Č!¬!ąo@y*Z^°Ž·ÜUĀ«••“Ÿd‘/ąį;hė,f¢¢Pś¼ū»ĻåÜžē³ģ’;ōČ¢ņVŲµ•'T•ß¾BŃø™¼é’¹üóüt Ņb#(žĘį.0ØŽqōps|Ū.üņēnT” »®4Ü_Č-öžF\Ś‚öžŃžŅ!!°}ĮQ֘ϣiōvīŽ­G˜¹ŒČ,(K ±KŌ €¬¬ėČB5"Ą5,u8$ĄØF¢<œP’`źĒKųGj“?č7‡õw:•ļV}Š. k-|ƒ3’Ÿ½3³©ž’ųóÜuvŪ0ö½HŹŚ†"„Č**Q I¤Åe)’ÆVŠ"EBJÖØ¦$‘-‘µa fŒ;ĖŻļłżqę̜¹s—s·~ßūzēółœ;wĪ9Æ×ēż~½›ŻÉ&O¤ß½,Ÿ!Ž&I°ZčR™-J’ßā¶nY%#ŗØóń ź?žbQ®nÓÖX“:ö8ÜZšŁ“198\¼€mqcĒĻē­O¦°%ż$Ćķ6ڊ"UĖ‚–SF#©µ²rŠhžö÷¹¾^H(ŻI~ŸŹžˆ¼ į¼č¢† ułålVŅp:¶}.Aągl•"˜2Ó„šc¬”– ćĢQ†z±h*<̧“Ņ¢ŃQDń’ øpį‚·vW-ĀEf]®’Ļs“Éä”eąČĪĪ.±ļüłóZŽÜÜ\’Ü“ćķU'08ްō<ˆXī‹QųCWż#ī%’+iµß[ˆž!ÆĄĢéW¢`ŒaS~®D¼ķvŗ\¶ó¼1ŃéWbä$} Q$0lś–Ū[ŻĆ&oķ FRĶ€ŁL“ƒO”l8”<ŪĶyŒpŚicµ cŻ æ/(‰¢×ż Ÿ°žˆŖ²[Ä^-:õĀē:Ūv夔7ų&¾Ä"AĄAĮĊ Aˆ9Ī’¦ĶjD`PÅ ®5P1Ąn£§ įĻ”S9)ßw>šL-ŃIK½±h•Üf”`ŖZ•3³+= ĶKCłÜé ū¬Ē¹ńµoųó’aŌ]4/Ļ„ļrFąīN!  ˆ»śMw:ݹsó.qC|ög_äa—“k岂½ó‹w°ėׂųPj;ŒFąČ€X§#ÕK4ųO š PšoUiQ Š(®~DBČBrI7üū¬l‘žž–~22Jš<‡«oO@øHx0¾įŖqéŅ„°ō<|‡=•.ŽĀ ‚Yõ/‹p9Ļ?P“BzłSŪžj%ž¬öĖpļÆQ› GIæ^Q¤ź'iöĀlöz;_ŚÆ×ó“ĶĘ9—éÅå ÅRĻg,€ÓĪķēÓŠU©I”zx{g~ūj””’.Š$mžˆš÷?Y“zē 6]Į|<‘ż—°Ż‰f$>„ŸÄŪuĮõ§w„FB¹wńĄßÆ*X@µ8ąI(Ų蔵¢@ ‚@ b@9½ŗ(ˆŸL ”(rML,ÓØDįRRŚzBr¾I· ł|6ÉN'mõzĢ\Ģ.€j5qéulw:čīrRh½qį³2NŠšT.=C…éKÉTV ØYџ°b-ŗ›»į FŲx†ć „ żŗiļ½,ÕJxšŖŠ"mĶ€fĢØ^÷²LŌλ̻@ł˜8zlW\ž¹ĮŒmTI$$$”ŲWµjUžž[UŠŖOŌØQ#ąsjÕŖåQ”uźŌ ¹@qāÄ ÷]'K}W#ŹxÕ?5Ā2ń?ä·„„Ņ ž”†łG‚ō+ółĒĢäȈœ]Ō8ŸĘ½P\šV–/6‰m%ĄnćNČLa¹5kīś»?z…\Q$AI\3–OæĀļņńÖmÉ’a5ā’8~ļżģ¾¦iÉŹį"ūJĀN’ƆŪuyʁ`…_P+*Ød”Ą×Æ7q haĄK¤€AĄhG4ÄųWmt€ģŃ'ŚŃDJ 8’6ńɤšMrd€ŻBOAąōŠŅ}āčt“‰É|c@+84ģwvįPl&ĀÜרätŅNÆgARA_æżĘ¼Ž ©6ém:“æO"׏Øå}X)LķĆD§{ļyœ»G/ /! M\mŗHQ7§ŅŠh“|ęp0āōiž+h–Ć  ¹¤ü“Mū~ž?ėŌ0 Ńh€(¢ųßC¤^ NPšNė<…µk×[_UŖT Øżm·ŻĘ¾}ūB·cĒŽ%öŻsĻ=,]źµD­jōģŁ³Ä¾¶mŪņÓO?…Üw§N>§Y³fģßæ?ä±o»ķ¶ūnßįK@čJĘ’s”ĘŖøĀżÆFā/“~(IüƵŚHˆæ/Ņ_Ī­­ĮČF«™įV37¼‘~%š“$uūwˆ€ąrqĶ’ØÕóIĪxj[½v­ž_6:¶Ül®"`ü›ÅĖ#ü!’żp}o¤µH‡łéŽīJ:µr¼±ĄŸPPŽ€čķėaĄKś€{”€'AĄŖG°:‹Ī T( 1 .±bą°S B é EĢA3§“›ō±¼[‘L°™é)œ8ž¹&„\’:jµģ鞐ä rh/=mly¾–ĒÕź9ą“ŠmĮŪŌÆv ’T°!NA•ĖYTü<•æĄsz€ÓNo ōé×| „Gks£ĆD¹_³łŁ×µŹB€ŁL„’§’÷[†¼=ӎŠŠÕnÄę„{9w”ćž|«u:¦o¶3ÕŪ©>üM ˆFDÅ’"%œ”’‘——ĒŋINNöŃkrM+ęQŽé¤½^Ļ’śŠ„‚”źģ?n[>¦>Ź”“Ƭ!¾ruŗ¾ś5ū/¤Kר4 ¼˜ĮżUŖ³ś¤ˆ€”ŗˆZ ?ŗ Jū~œ—ļłjRbA8ž=]L«}µķŌ’nųœaZ=[AČQŃjÕĀ …D…€(¢øŅQĀU6L8Øü!įņžŽUå`śhÓ¦MĄQjū0<šĄ!õ}ß}÷Q¹råūSRR<¦‚”C‡uŽ 7ÜąQ”£Géü`pąĄœNg±]„>‰«Wł&Ü?V ßTÕ’)¼‘’kšMžÓ@šźoT„ūgf df \Ņmrۜ,+ž2łO.ŲbSņRØ(oäæ`ĢE0ę"äē"XōŅfŌ#”Ć÷Šæ%AŽŖ×Į”Õóƒ|ܜ˽3‚ɁFŽl¢ŹUņb‘Œf½^«M‡`Ó!Ų¬ŅVx æ¤ßfEŠ»mųūeŪ²m\häĶ®CPn¾Īó³©Ć†ČĄå]‘÷õzśÜõ:ySū»„¢ļƒr³Ū¤ļ”rół{\āūģ ńEF«“%‰^š[õ9N49N46 ‚ĶO5 ‹AŽ<O*ŲD;šĖ›æ)_֙ĖyGw®­Ó˜¶C'Ń"6Ÿ5Zv_WW"ńÖ|zY=F³ĶlB0›Øv;½ ›&->żökPP±x9Į”ć8 ä‰N®M;Ģ:@[½¦®‘Źņ]2 \2 \H—6»•^‚ĄĮqŠīåß:xdƒ{ž„Uīß×3@‰†õŲ`Œeō»’õž>0čV*~÷sģ[;1¤g˜ščµTRL[‚ūów%ŸÓīĻqwˆØ{ˆ"Š(Ź‘Š(–ģŽÜoOčŃ£k×® ¹@”Õjyį…3fLŠćNœ8Ńė±I“&±lٲ Ģu:Ó¦Móz|śōélÜø³Łpß×]wƆ ų<³fĶā¶ŪnĆjµśo솇~˜¶mŪ=v°ššŻĢ—ł*ÅÕBüÕ“S"g’HÆų‡;Ģ?ŲÕž@Wś}ObÓå‹ŅʚĆĮ{¶}‡’ Ʋ•©LHŗ<Ȏ Ėyšž®ģh|+…71›’ˆåŠ æūź~0+ūň Ź§j°+łĮvåü®Öōå—#Ԋj>C_QÅ>C7@žg0Źh@¢‰0ęć-UĄźD0äē«MP`“#ĘÄyļÆ÷ć\BņŚįµOX²ū'V:­hNn&Ęé ½ŽĄŹśĶ±ĖķßLŃŵ1q¼&GXó艡„>ĆŁŖō H؏(œ²ŪyX8ÖšzzLœĶéŒL„$E9ĀK¢Įs¹FijˆaŖ²rĄ#iōŸ·9ڱNO•Ną+ąĖœ‰Ō‚Ņ(PĘß{éhÜĄ=’]K±ŚĖ‰ ģ®õdZ@4 Š(ž’#R*€dīZ ]»vlŻŗ5ģƒäęęrĶ5×pīܹ ĪÆP”’üó+V ų\«ÕŹwÜĮoæżš¹żū÷÷kō·råJxąD1°{ēŪoæĶ3Ļ<ć³Ķ²eĖxųį‡ź»|łņģŲ±ƒF4w|śé§ 4( ±[¶lÉĻ?’L||€u¶Ā€ēž{Ž9sę(w5i%ąeEžS#ī„ń/Ģķ×K+ż >·ŌåõƒŅE”żæ¬%iĖRSĄ·+Uå±gŽb=”Ģå÷Ÿyü> W³‚źŁ6u+¾ī”p«%ųņ\ĀIčķö«kåNÆ÷M.Ō’ń@Hʁr.ĮĢC| īP]u  cé2Ō¤ ČšUb0XóĄOߢŗŻ†ī©Iœ”«¼Ž—,ł¼T»1­‹£?Bā+8¦7°bź ž–ĻĶ:‡ę­QĢ“[yŠUØĢ}s?+¾Ÿ(…€gŚń¼ĶĀ”jµi=÷ U®†øx.1‹žĖi­žÆŪx¼—ui2܍Õ@MZ”dx3 „’%”ø¾EQo€(¢øņ©)TŗH«Ø.— &¼ ̘1ƒĮƒužŌ©Sƒ"’ …źÆ^½šöķŪäCŠ®];,Xą·]ß¾}™?>#GŽÄfsĻn- FĆ“iÓü’NĒ AƒTEŌŖU‹Ææž:dņ0pą@8p ¹¹¹~ŪwļŽĻ>ū¬LČ?”H_1ĒŹd"WTż] «žĮ„ū‡jšw%­ų+Mżä}jˆ «ż~ py½]7L©_ņ›ĆA[€œlī5XŲ%słe»Ź į÷Höż<-ĆIōՐ{‘ W™ž®Qń¶s ‚ |żī¼‰qą1Z ŠH5‚@ DØõ š¬_ĄĄē$³P§M9 ²—ÓIŠ a’ćoI<|ĒwtŒqåX#GŁ‚~Ń4>pŚéĻ8soZĢ\“c`«\F  Aģ6z G'Å_—@ V~ĀŻ@bL,ßÉQƒŪŃ<ė<Zr’Ŗ°ęÓSE©‚§@čĒ“×-ųޱ7wš~J£@Ÿ… 9Ā͟Įh€ØA`Q\}ˆ”Ął—/_ęŠ!µÆÖaŠ AŒ5*ąóüqž~śi’ } zõźģܹ“nŻŗłm«Ńh6l[¶l!.NŻ«ā“O>ÉÖ­[ż†¾7oޜ-[¶0aĀUżōė׏}ūöńŠC”Óy~³MLLä„—^āĄ“lŁRußžŠ»woŽ9°aĆ(WĪóŗbėÖ­łź«ÆX³f IIIŪD‡Ć=ĀcąōŅüb„É?¼Æś§Ŗ ’js$•Gž8rüåü~ˆæ§ü~oä’Ż T›?‰ŹPŪƗrūóR¤¼~ołżžZ0ŲĻ IDATrūÉė÷Ńłü1qlŠh8h0š·§6Ź\žbŒĒéG"żņękŽ2<åģūjHn¾· ³ROtŃBo(*#xɀ`Χ7`i{ß øƒ¦gųŃngØĶ³Oó{wKf?&e0­}½ÕĀ—‹z)Ō‘ąŲ ģDŽØōš“?o€) ø?÷Ż!ŠD½¢ˆāŠA$’–É?Ģ›7/h9E‘éÓ§3iŅ$wƶŠh4¼ōŅKL™2%¬ [¶la޼ylÜø‘¼¼¢7ÕäädŗvķŹ³Ļ>ėŃõ_-vķŚÅš5kų믿ČĢ̤|łņ4jԈ®]»Ņ¦M›®%33“Ķ›7sōčQL&)))\żõtģŲ£Ń_¶oh°Łlģܹ““'O’——GõźÕi޼yŲŹ!†‚Ż»wÓŗukå®7qe42‡æO/īä?R«žWjøØ”žžVū§ ¤æŁÄ8Q¤!ąŅéX×ŗ£L Km˜8CüMߢ²2¼’ūo©płń÷?Iš²M±Šž…õĪÆF²õFņģ„ŽŲ)w8Ÿ V(‡ `ŠŃÓ@Ēńʐ£Õ#źü„¹GŽ+\@(‹ĻD†AlHæjS ģŽSŽ€ö”<ļ‘2Ōx(į-M Ų€ ‹Hܵ›ėG}ČÆ© HŚś _8ÜWŽ‘“ÖIeC'ÜĮ/üé_qņ܄$D9"ą©žŒ¶X˜V½:ķĘ|ĀŽ¤JˆŪ×bX4™“Z-[ßßɃlˆżŪ3Ļi§_ƒė¹ńѧ97sżĶfĘŽp3wüƒi.uD'ķq _WTķDmj€'ˆTZ@4% Š(ž’ ’łPōb7pą@/^Įį$ĒöI“&±~żz,K±cƒĪ;3eŹ”ˆø?8222øxń"UŖT!%%%ģ©Q”ęĪĖ³Ļ>«ÜÕŠVžgP «žžA“æ@Vü½+KāoĪA˜6˜÷ģvq?®Ń°ēĮ tiv'÷cīÄßé’ÄæXˆæųĖé/ŚÆ‚ōĒć¹\š7Bųƒ%ūވ¾Œ¹Ō"mōWŚ«ž‘&žą™ü‡‹ųośˆ¤{ŸÄōŚ@ä^f¹1ńĢÕ8žoā1§ƒ;Œ±¼;e Æ@٬ö»»÷»#ŅČ*¤ æ?²/#WƒvY&]³l tĄĶŸv'ü^ĪÅŅŽÖĘ&H.čŚpŚ˜’»b½4ua‚čņx]JH]Į#B]IQ PAąj‚²\©e¼Ž—Ń–|^­×’fĆŽ–J’Yt|į«Ō8²›Cz#o/\ĆĖņž'ŗńžŻN’¶Ø7pŁĻ“eŠĶŹó é÷ńZÖ(…€ńq Ēōz6Ł­ōŖP§?K“ŹiL]k>I{ń÷Koū’G£¢ˆ"Šp!ŅĄR æüĆńćĒ©WÆ^„‡Œ"ŠŠįr¹HIIįāŋņ®£Ąµe8„RG !’„éščŖ8ĀżC%žPDž%ž“š¤9© 囟ĆS.‘† šŅįÉ·ųąą6ŒK§ņ„ÓA{ĄŽ¤·<9Yz¹ ń/MŅč*’—:rķøKö”ø)Ż¢lz\tń¼ ĀśŠÓ:9]ŁŹŪ=-¬*b7Ęą*&ÄųP ū•AąNĪ•bB@B‚Aø‚PDp z•i„-„;*@)üł1ß/¢cŚ4ć±I}eŽkgWØŹ}ęóKBāéhg¾Č1†ŻŸ¬—J˜f_¼F„?¶ń«qµÆćö—?åD…‚4‚'»qūå,6ÅÅ1ņĻ< ݟt„Ā®M,Ü[°ė’!†7æŽĻģ: ż_S¤„€aˆˆŠQDqu RUdlA!lÜø‘įƇGxČ(¢æ’ž»’ü’įĻ’®ą’`WżÕXF‚ų»ÆśJüZM|ūŽä%ń ücĪ#6÷2s1–wdņp}[¬oćéƒ[ŁÄż‹,z†‡ĆÉßńW’~æīżJŅļ…ü+IææŚ'‘ üvBœŪSћ۾7£½ļ,Ō9ĻL“Q3æ@įŌRū\o.Ņ2ąś Lŗ©ĒVĀnŒ+Ź—v(Ś_i$>ø_‹Cń·ēė"uzDY,0ƒĒ؇š"xū<ōR?ÅÅ&•¢€»Hå.čĀĮį{Åß®čĖWt€ŖŹŒy`õŠĘ*ß >_oB€·*r§I`µ#Ø.X„ūE5;bƎXšu”ŹŽŹ0­±•®ˆ‹įH÷āēp‡(RÉ[”˜ŒžHęsńČÅslų÷o>:_*0ĢĻ”7ą¬=k䊻¶¢Żµ‰U¢“› 1¼ĖŽ<Cl¦ŻßŠ“Æ.³¼ˆ§žAš&’Œk®°øÖĒ9©aØ æ L)śæP°ßėøŃ*QDQśˆtrśō6lšŃ4Š(®lÜøŃ}×’Ä—7.’ž\ƒe„źšłWėīŹ‹³?ēģot ÷Ļ̐ż=¹ś{ź7ׄ°|^y€·6~ŹŁŃ’?ߐŖÕņ;' qR©Œ Ąē8kŒē]»>Ė&y_}öēä/»ų{"’ €Į‚`+Ų܏{tļ÷AśeĒ~+žJ§~_ķ|¹ó+ŁĶ®"Ēw½•~µ.ū‹sčüg>ė#Ež•°i¹§+ÖdńŲ…æHĢ?ŽšĘaGPn‘žĒՇĮ"¢±ˆh/›Ž!‘ŖBÄųŲ¼Œįi džīÕĢ¢ŗw4_lnU|ŽdYYĄcƒx0*Ŗ ø¶źäJŽī#2ļ&XŸŹh*„†H†ü—ęŖ¤Ćż½üӊö{[ńļ«žrØ?Ą…s”³[ø–~HÅ^#¤•ØrÉĢĪŹą Ń%ń[cA~–=ÜŁ÷7-g˜(’xų £bN–Į†łū[ķ÷āāJæ]'•<ó5_š_†Oٟr…?ŠÕ}_ųą2Oē8%²PZ5ĤWę嵙\wē>ŽHiÄ„ŲJŲĆā  €³Œ…„p_'8“O&Sß®+˜‡Æ·ČP"b"€ˆü;ćūаéäッč÷æ;_©JĄ[d€Q¾ozˆ PFœ=…~ķnr‚pēŻüqcņåv>£$!@S üEäėņ­’je#.„CÕsŸ²öӉ“<÷m*¦°'= ­ĆF7­–­&+ׄšökŌ5‹3rՀX#;ķVČĖ¢ž)“£ļ<Ć-¢H5] ³.*Ų/¤#äē0 °”ÆÄ¶““×ŌEœ5ó×’ÅJA™įĆŪŃøōL“‡2Ø|ööĖłäž'?y~QĘKYDx‹(8ī3Ą_J@4 Š(J„ńPŸE/Ek×®„k×®„0¬o˜Ķf.\ČŖU«Ų±cGaՀråŹŃ±cG @Ÿ>}ĀNT].Ė—/ēƒ>ą×_-V¶Šh4ұcGƌC§N‚cóęĶLœ8‘;wz<Ž“iS¦L™BļŽ½Ć~}æ’ž;cĒŽeėÖ­^Ū“jՊ7ß|“:„uģpįܹsŌ¬YSł»Ł ÅĖżæB„ü§F(×?T“æ`ĀżĆIü“<=atž]4HŖÄ£/}Į·r›—ī%Õ墹FþiKč 'ö+óūĒ>ČDsc{ĖŪiżČ3ÅKķ¹C é÷t<¼~µ9żį$żjó÷ƒ!ü ‘;§į#+Æę‹<¦ź$'R ¹|$õƁōJ, Åä‘f<Ž (wžļŪžäÕ:אa¬‹Õ4—5‰/+DZ<Š9 …oPé9hÉAąyž< õÕŌųųõ š d¦£[8‰•N‡A#dĒÄ1ÄdŽŖX5ž=y„āąÉŖŚœ‹°`­ĘæĆo ¦PóčģŌY|żmĢīŠ“ģwʱČé Ė 7qŻø©d<у×ķVžn؊kĒĶ'`ŹC4:ū żõĒ ėõ|mˆao®‰eĘXFÆĪgž€Ź“ɾČ‚Ą”Äņ߉iÕŖK–, ۊyZZ}ūöõJĢ•čŁ³'Ÿ~śi@• œN'/æü2o¼ń†ŖöżśõcŃ¢EÄÅ©µøņ?ž˜įƇc³łĖŽFĆ믿θqćĀ2v8ńĪ;ļ0jŌ(å®g@ «ž’†pøü_M«žŽˆ?¾ź.ādś6-°ĖÄ ?abwް[ŖįĆ×¾eˆKdzr5~ČH£Æ5Ÿ'*׹‘’į‡@Ć-€dh6!LæŸ 6 Ļ"IvV ÖÌß0 ą±ĪģEĄ4sƒT™%©ā˜ ŹĻ彤ŹÜ£Ē”}‘^v;½E‘€óŚøvŻ>Ī460ĖigDĶėiōįž3UüĪi­–%ū ń5’@EŃ2:xhIƒ@AśOTˆ"Š 4^ ą8P ))‰ŒŒ bbŌøš„óęĶcäȑÅVŽ}”\¹r|ūķ·Ü~ūķ!{üųqڵkGzzŗźsš6mŹĻ?’L… ü¶E‘G}”Ļ?’< yuźŌ‰õėףӅ– ²jÕ*śõė‡(vÆ~÷Żw1bDHc‡ķڵcŪ¶mņ.¤R–gĖnF‘Į•ņ%­ś‡īļĻąoĮj’“÷ø{¢O—g0åē3óQīĶ:ĒrAĆįy›øU.åwŽ„öĮls¹h¤Õ±óÆéāŽæ%įÅǘj53°Üv-ś ‘JXZtŽóm}µ«żį$żžVłK›šĒ¢ Ó1°š\t0ĖgGVąč 0 !MōÓN„Ŗ‡X~će>¬~gckbóKB€ÓQzBB8ēĮ T@ĄĻµ…Iwt@iˆӇ1Ó–ĻĄ/S«F);čėwiŠk$njvÄĆ»f1ĆmVnEC^|"ėŸžÄŹÄrÅEBĄ7‹)ßó1©ŒŸ/ų–M„Ņ‘_¹Ļå FL";_ü¶}Aܚe¤ėõ,]ø–” U ˜Š9N;OvčGµž/HÓŖ`Cõ7˜²hŗī K/¤#<Ų–æŃšļ:åń†4¦īŁæ9lˆįÕ=fIdš‡«! Z% Š(Ź‘6鏻šŽ`2™Ų“iS) [6lˆü\¾|™Ž½{sāĉ ĒĶĻϧ{÷пU¤śŻwß ˜üƒ”.0i’'j§iii 80`ņšģ³ĻrąĄĘ'ŅŅŅŲ¾}»r×ODÉXBžSżõ# Bž[”ŽüŸņbņw ŽÉæ/ƒ?™ükš—kBHƒÓI§“›7-cķgÓØ¤lŪį!¶VŃE£…Æ“bŃ#õµ*įJ¬Č§ƒ[¦_äߟa_‰¾=˜·Å"9Ŗė¤Ķ‘€ Į­7qm¦“W½v("Õ?Fhä¤TÓ@x„.€ēŃ÷”.gRÅq’“;”l!^E@u®Źł:t¾6Uó)H÷pßŌ^C‹ +Ų”Ęƒ%>[?†ƒjMåļ®ŅPPĶ߂'3A„‘ /—$»ĀDŠ[_ę'ać":ŹĘ½Fr ąč1bV|ČWły¼črQŁå ÖåLޟõ<‹r.—u7 t7 üé~’ óż}¬hŹYŃx3 ģ5ЬIėY2å;^—É?@|uœ˜ŗ<ՓG?L‡@#Iy8i_— oÉžE[Xv!aD_Z‰"µ V+ŸOY’Ņ &–ŽžiīŌ$0„#~śMõņ,Ö p īļFEųQĄråĮÕPa±X6lX@ä_Fff&£Gzģ9sęp萚Bd%±iÓ&V®\é³Mvv6“'OŖ€·Žz‹S§N}ž”)SČĻĻ÷ߊ/æürŠc‡K—.Åå*¶˜šeYĶ%"Pį“«&äßÓC½ĮēūćšJČ0įžį"ž²«’Č8!œp¹h¶k߬x‹dBżooY«c ŪGeŽ’˜i¬4Ņ‹qęYĘzrōļ7„ó†–˜ó²e…œ` A&žžø I?ąĖÅ_ƒ(¤_&"‚ ŅÆĘ„æXßnDŖģ{"ünē䣊ž•Ļ›¢H¬ĒĪE$Łš®ĮłĮeą$Åėü¹Į„C{śžø|‚Φ‚9­’dś2·æ’·` V(EEš% 6Š€ 1Ą‡Ē'P$ųźß]hy'_ .œeÖŗåT—«Ų­_}Ą(§ƒÖq‰La_X@§Ųxf;lÜ÷ŃėÜå©OÕż‡E‘ŗśų«„"Ć_Õ³ J KøĶļĄš\Ž-?Y­<`ĪåVƒ»·ŃӔY\Kf_ 7 Ö¬Ļ×i'd”Śn„`ź>šĀšD5"Ą!•Õpd„R)Ą—ąžĪL•sŠ"Š(Ō£“€ŻĄł‡o¾ł†óēĻ—ŅŠ>łäNŸ>ōłß~ū-»wļų<‡ĆĮœ9s‚ąõ×_÷y|ٲedeeŻæÅbį“O> ź\«ÕŹņåĖż7ōuėÖqįĀ…śDQdįĀ…Ź]6`UM'ģšWāĻ]‰ŸDhłž©’VżÕšēæó;Œ+gQ9VąžēÆÕó;`4t¹øaĻ&Ö|õ:)ł¹=‚1NŹļĻÉ”XR•8“xĄį żœńÜä>¶Éęŗ¼ Ų‰ŪżOɤß/ń÷±Ś/æųG’ō+Włõ>HX8 ærußŪ9ņžĻ.ńØC¤™ĒD¤•zæĘAĀœĄ§`®D…Óułõ­g‰ÕŁB!Ņžą­ģ](›Æń")ų¬ )MaĄį/JĄĻÅ ęoČ] ļžÄ€@¢ŚŻGVµ:<%ŠTÜó ļååH神i-¹<®Ń±÷é™Ģ•Ļ«~ _ä]¦…|?[æœJ“‡2ėåĮģœųkgŒfŠŽķÄŹB@ĘæōÄk®e­± ”!@Mł@„0ī}vM_ÅcÆM«)Ė™™c@h׆ρ“ü\fæÜ“WĘŽC—ē:ŅWīć’Įį — e׌8vį„!Ä;Ü«Õ²žįIX•ćF2Ą_›Ō äūCP"@Tˆ"а “€Bfe³ŁųōÓOKqhX±Ā—U‰:¬Z8üłēŸÉĢĢ iÜ={öų/ÖÆ_R’ UgŪ·o''''¤±N'?üšCH}„?’ü3GŽQīZ”½2”EČææ9EbÕ?Üįžņæ}Oä_^ńŸś}–¼Ī®]ŪŲ¼p6U©(9×_gd`ˆ‹g‰ pĮå¢Éļ?ņķņ÷ØVØV‹¶ā€%į‘głR$w’ō³<R~æźŠūž5İĄn„Mm˜æŸÄßWnæŅŽUžp~%NZˆ½,2ŹÓ1@Jö5y=Ų€SųŒ.øŠ„›ņriuł)֌¢z„AփE8ēN‘ ŅĀ€ĻĻÄ-JĄoŚ€ĻÓŪ…BŪ  z™ķ±‰¼ėpŠęó9Ü °śCz‰"•ŹU`aB<Čé¢\"Q#łŸ7Pī׍¬³Y¬Õ.€#'›™ŸĶeCF:‹Įj¦»FþĒĘs ŠR"%ČČ5!Ü=’œF7r—VĻ·v+Oåf±2ĻÄū?!֔‰0±'ĶD‘śz=_\HGøŽ°~÷q± |ķķ9‰h€ŅH p_hš— ˆ"Šp 4€Å€]žį£> *gū9zōhČcŪG(©‘č',X° Ä®²˜Gøq„†üūk##UOūĆīÆlćų'#•ō³;©&ŠŌEźļū‘o–¼&…ųĖ(W™ß¬VڤŌę1ņD×īüo?~“#&ń— īrŃpÉŪ¤(_P6Į–Ä;ęN¤™§üž¦Ķ˜]„_y‡^ŹcjĀü#½Ś(é÷Ҥ‘ üīų>—‡E±ø_C!rņž#„„˜ŗ·źĪü§ę³eÜ)ÅĄ qčĻÕ§Kv 3Ļ“Ÿ‹6āīŌ!„k vj”V(PFF#xÜÅæż ø %<TFxū.”¶ ’[y¬NcI“4]¤µĶАo¢=`»·ŅJE<uŁēh —Ą~€_6ņŠĖEƤņŒzå=zæņ½ė6¦c|"Ÿ¦ŌÄńŃ4q¹hĒ·ž|‚*z8īMü*éÓWņäāŌīŌ‰Ć'P«w,)@öEé]µ>ß(Ó,yōņŗōe³2-Ą‘ˆˆTJ€ū¾hJ@Q”.JSČ@ZQąČ‘#|’}‰źUÉd"/O‡­oœ=ø\øRĪóž¦wéŅ„ū7™LŲķv’ Ż`6›CĖļ'œ?ŽŻkį°¹Œ¦˜ļ_!’‰†ü—ęŖ8ĀżA"žyyž37ó^LSDwoą«’Ržļģ,N;wŒŸÅĪZuč#˜D v’ĢŚĻŽ”¦ŽČF@ųūJ”"é=’ρó€pę„ÅĆüūåō³ÓŲ(»o« ó÷µŚo×Iü”~Į…&ܤ搚ėĀGųv«ˆFŽLš°ē†@`>ÆŖQÆJ=~yķ²eóÖcoasؘ½v¶TVŠĒ­3óZZņhz9[6ś@‰ŗN±‘ź…cÓ¹õ­f‹”ąKš&ØAøEoķt A@ļ&F€ļɗ–ąK0e”3†Åļ½Ą£ł¹Ņ;éłÓ40„Uz»›t:žh܆bfC¹9’j“›Łżó×T“YyP§góˆ·ųĀZ@ęįąŲ™RŁŌs§čPÆߏ}LĪCÆ?G‡³§ŠApB€Óą.¦[ŠÜ=’œŪnrl<»õzŽf'å}+VėtŅE«å»~O`)-@<”,£Ü÷y[(ˆśDEŁ"“ŚoćC üĆģŁ³¹ūī»#>ØĮ`K?F£1ąsżÕmR‡¤¤$ÆĒ*W®²ŠP±bEōz½’†nØZµjHćŹØ^½zXś ļæ’>K±śK !°zŹW®Ōmd“BzAń×.œ«žņæ=­ųƒoādś5óøÕj'¹jmžł'ä0’É«ysRb­fĘŗ\4ū~+*&s³Ī˜ol]«ć§ƒ6ó¦ŃšÅwłķ±ō>}„•¢‹:{·±¼R5žsį ƒssiK'…\ŹÆžõXcy?ßÄd‡ū–ͤѓćłŪSnįr ?¤ ņq½|v…„ū¼4šFč¶¢\~om26gÓ"ĖEk»H}4ā]Õ 5"9˜t"'ŒžIų½‹†CZN­Q—X2 >Šo§Ż9S<%×åŠŹõ<žœ‰"Ę-tō½µ/ßž0½gõ&żR:-ź¶`ÄĀĢßģf^~o3ĀVĆårÜ—ÉAėeĪÅUĀaˆ¹:ļkŸ¾*ˆ“œ0­ ŻŁ£ IDAT² §ļü•p/Éē§‚_±2ŠĪ‚ū\Š_©BwĄSYB‡AłR§sĶ©°ō RPLXyžJ zqˆö‚¹ś*1(‹:¢|’Ń#•„"Ż*Ļ„V#{9‹YoeøFĒß;4Žß?œMYčDµ5zvÉb¤ĮˆxųWāģfzét켫ßÅDbĖWęcå<¬ņ½Üį’‡~Žc6 ĀĻ1ќǨ|[NķgWÅ*äÉ%““|nģēżzóõXŖŁ­ ˆJW&Yˆ­Tp¾"J(Ż‚¦ZĮßä;ĖX¬Č(0 Üš1€„˜ų¢“€ŹÕÓNJ‘N5ė"ŗĒpŹĻĘ:~lHcAP[.° j@šU.0µ`Ünmśį¹Tą ”„åw‘)E’|• E„h™Ą(¢„-|ģnŲøq#žł'͚yöR bbbHNNęāŋ!õS³f̀ϩ[·nHcŖé§qćĘļ½÷žr—˜WFÓ įł÷tž·p¾TFAäśūD¤ˆ?@ +žÓŃ#'›i¢HS&®qw2÷Å„¼“ ½˜LYĆk“zg53Üé䖕óXZ1™‡ŹµĘj0ņ›ŁA›Œ4ZG_˜Ķž™ĻÓūŌ߬t¹h|éONŚmÜ.„\ē~,Zż1Ļhõģ@tĻļ/l؂ų{ŗN{A%é×{yŅd‚~õ:^rŃĻwˆŽõ\³³ Üj²Ex×AnŒ+»XÕĶĪ6CŒōÉØ­Ł^‚šūy"fŲčāyrH«ńaÄ=Ķī”{«īTJ¬DfN&©‡Ri^·yɆłżn=ĄT‡śöŃąņæ©\ĒAB™h—vŁ? ø»™’ŲP(ų Aīā€'a@­(ąTܟԈ J1 p ÷p†‚jųˆ ó#(+(ŀų‚óā«cż#>ŸĆ¢‹iōw9h`ˆį«ęw0«Bevf—«h ŻfEXūƒD‘rI•ųĄ’G{A {šĖ¤u¹y 7ĶiÉ\ėrq]lTSˆs)’oӃ·}Ć£m{ņœPĮ†x!”r5©Ÿ““×Ō•žķIP#Øżˆ ½tRé½D)ģó8¦üĪ¢ˆB=J3@ĘÜb?Ģė­]Xq×]«Ä„`¢ī½÷^“ZmHćVŖT‰Ö­[{=Ž£Gś„:uź„LŽk×®ķóś"E‹¹‹C‹øJĶ’J“ü§Ŗ ł$×0¹ž”šüyź3ׄpéŗW`ŽéŸÉäæ«™1³2¤Pc.Ā‹‹yÅĆbœū?œĪ¢ć”O`'€%VrČéØWŁ_’zz ē6ī]T]Ō_ł5äAä0’6w‘×±m^Ē£GIļjóūż…łĖ!žžĀüÕäõ{śģN™‰}ēOĢĻą×  mŠŁł÷Q Į¬„ūi=‹ęēóż²sWJ®æū>÷\’²Šjņ'žCóęDŲ­<ˆś>j،–u›p«VĖ.€¼¦|š M²¬h,z„*qˆ“ē3Ö``9€Ćƽ’}™łĶŪń`³Ū(¦‚ų‡›“¢» p–‚Wņc{i+(*åwWw.AąÄßÓg¦6·_‰@ņś^䞄&~4¹˜"B5/͆SKķŒX^ūBĖwė3蒝FL~Ś|;Z%é÷Ū‚šėEÄķØ•D‡H#'©pżoQÆ_Žł’3óĻšļ’p.ū]ZtaÅs+Šk‹§`5®Ń˜_’B—ęRŠĮ†=؝\››ŽL÷VŻyČūģ~c7:­N ¼¬}Y*£wT·ę‘b6ct:’¾$«‚ a|‰žąIš{ŽJ1@§õņ9„ Øńššåą.‡µ¾›—“:öfe°pélN^8Ć'‚†ó×¶dHREœūvPNIŠhJž%& ‰³$œ>ħ›+¦šä³ļ0Óh”¢¦ęOå1‡ƒ»ć˜ņźBzõ#žŖ˜ĢHŃEmė¹ąĮ|š¾„ņŲāī°dÕžŚĒZĄ„ö=™Š?@Ī墾S 6S&‚© 5@i(‹P €w“@»‹A­AąÆŠØ1L C•%¢"@Q„e!Xw °Z™:ujÄķŽ½;·ŻęyńF ž~śé Iö“iӂö!ØT©/¾ų¢Ļ6111¼ńĘAõ0eŹŖT©ōł½{÷Zäh×®?žxŠc‡ŠE‹qüųqå®5Ą/ĶÆXJžŻNņ$£?m±ź_—¢U’PÜżcõ“Ē2Źįą~Ą–X‘”Æ}Ėø!or|Ų\·ģ̃‚@:`Lū‡å€rż”Æ„ė„w©3H†Ø½~ŻÄ ŽŸ\.šŲ%½nĖåüś=Ēń¦7ÓCŠš/€9O2½ņVŹšHüż¹łbź§D f~ŁHųoļŸsņ± ϧR §Ž§ŹóĪ*‘Y§R՚ŽŽĮS’}%įwĒßvąé™)Bqk²’hŪØ-Ū§n`Š{ƒøo†“’æóčN²r³hZ») ‡/,B““INLf殍tnŽ įXĘ1ޤaēōĢ{jF½‘«g HŃ^bĶE-XŹ‘b1S=?“D4N-‚Ŗ-Ne»Honóšżi{‡?‘ PĄ“0ˆQ » ‹ž Ōž¢¼‰ŻęīI (4āŌ©”QP\h{Ÿ™E÷j ø?”%!ż(ZeīŃrZ€,@d¢ü>ښäŃ]ŁŪ”m!ņU¢"@Q„e!¼"ÄzŃ¢E;v,¢ ‚ĄēŸNrr²’Ęnh޼yH"E“&M˜?¾’†nŠét,_¾œŠ=iĒÅŃæžžł€Ēxä‘GxöŁg>O ł³ 4ŒæQ£F¬Zµ ®“­($Ųl6¦OŸ®Ü%ƖÉd‚…§’)Æ©é„ņĢŖŗ‚üī/’<=A+yč[ćyéåå|)·­ BV¹ŹLp:h?ńqŗ*ū«RēS/1Tg`@~.4:ĪśļVŃĢä@£$÷ęTė[é”Ńp9žjˆ8Ćü•«żž>/("žņĻėrøf].lZ8”z9ItŪ\“„¤qcöibmfi¾žæ?8ģ—]^¬öŠūęŽt%ÅŽf°ś·Õ<0ē6ļŪĢžÓūpŗœlŽ·™]Ēvq’-÷óĘƒ{]Ķė8}ń4«[Må¤Ź“¬/„YmŲ³ķG¶SsXMžųą VīX‰ŻYą<č#ŽZŽDŃNKńv[Ļ}Ił„·y"2Œ/@­0 ‡ė‡" ”¦ ą~L)Č}+ąž” šČsl>yC&³Ŗn Ģr)Įju±é lv9höö8žJūcŚq Óё§ž’V’kŌcib96Š")©øĶ^pO\:‹ö¢‹ś. ߝļ£xjåjddŠ &“)5q\K‰1ų2.×Eåk7ä’UšīD^v:ø©j †÷|ĢsRN¾Į˜‹P-įąVŒ›æąŌSh¾ÓP ‘ˆų{/³D‘ŹÕėY„’ą žDåūKTˆ"ŠŠPV@.š–üƒŻnēµ×^‹ų õźÕćŪoæ%%%Åć“hтµk×רּ: 4ˆ>ų@µÓ~RR«WÆČ»`Ö¬Y¼ńĘŖ<A`Üøq,Z“(,į÷‰‰‰üōÓO 8PU½zõbĒŽ!E„Š?ü“'O*w}’ā5@|9Žø? K#ßß×q%B ł÷„@Jū)ŪØYõ—‰?!?aāW,lt 7OüŠP”ēŸeEcŌ#<0„Ķ‚ UiĻŗČ«vy‘Yņ6Įöųó Öéų ŠŪ­Ü}Ā÷-eØļ!œyüyī˜ü>c ¼ÄßÓgźjær’Ź|š²³Ā%a؃iUŻ\.ų>(ĶÕĄCżułpļYŚ›ž&I“N-įWnN‚]tŌ-€ĀłbŸ‰Lč5”ŲaƒĪ@›FmXśĖR§oŲ³–õZŅļ­~<ŪõYĘtĆ5UÆįšŁĆœÉ:þÓū Ó6īŻH«ś­õ;}•Ģ×#äėīnM8ŸYÜW¤˜P9Ą]ĻŃP”īh€öåéąr2 &†ē—ī„Xł)µ)īū|łøļs| ¢ˆ@Tˆ" (+ąL^–,YĀīŻ»#>č­·ŽŹļæ’Nß¾}}U£ŃČŲ±cłå—_ØQ£†×v`Ų°alß¾;ļ¼ÓkAčׯüńŻŗu xŒńćdzoß>śöķKLLÉ× NG—.]Ų¹s'3gĪ Ł P‰øø8/^ĢöķŪéßæ?åĖ—/v}śšż÷ß³zõźĒK999L›6M¹ĖÅU“ś_Śf¾Ę $äæ“Wżå²źÆĢó_ōu/£¼LüåŅ~ƒ§J5ŖeāoŃ#”fŒäę^g»(R@tQoћ wÆ)Żø9Ö¾OńØVĒNQ$ Ąb”•§€ś±#ž2T’`ĀüƒYķWbMMNXX*–Črõ€|$w˜£ĄßĄ ą_ ­ą’' ö’ œĮgŽ»Nå4`ętnO’‡$g.%nzžæ{½y§čÅg_až§ÕhÓu kUU)W­FKv¾g§¾{7R;¹6§/žęÉyO2ó‘™“k܎Ćg’@Š„…$¤LÅįtp× „aÅż\:ō¢“с!?Č羯šųHmĮĢ3čk 2ŠĄ“(PŲg¢@ &FØĄ{t€Ņ@Py}… QąYø£;ēĒĢ„wƒft¬P™Q•«3“ŃĶdnś”.Ķ1¬³YīķÉ?˜­Viå=°Ūh-h8óŌTVŒ}ŸgŸœJÓ*uč§7²66Ž…oÅl³ ˜óč.œ{t,æXĢ3ĀįƒüŪ-wó–U`Õ#¼>‚;ĘöaŪs÷ó×øYµ5]ĻķJĆ̆Ü;ŃŚKEpśü8E?¢×ƒh³Uż–YeJÓ2Šr"€MB5˼0K(š`~=ś<iūĮ-Ćżių}Å­žüZ`E›U ó>E½Ķ`PkAÕø¦ osMµŚüÕķ÷$ŽŠV°Ø eŅDl'x„pųQõū^¾aæ`#°Q½e%jB"cź4f@j=d›?eEż§…Lr““ „ŌjČ’{…%Ąsūį2ż~Ś:—’V,·Ź©~/W»’~ŻZcæłß’rh?ŸŁŽ¦y=\¶7s^¼“§ßųœ±†é*ŠJ²3OV“QŻDƵ Lö ¦¤iėk”EÓrŽ"¤ö=ī@Čšj?ė-÷ģ@põ£–¦]ą¼É¼¢ŖŌάG×&g˜ļŪ1ƒöī<:Żś8o·Œ·Y˜1QśVĘ6h? –mµ„x›Ą8ā(Fe #Ž@3€… 2uźTnøį†rņ–-[ҲeĖr®P“hт-ZDޱ HNNęņĖ/ÆŠs„ƒ$IŌ«WÆB„”²`Ū¶mŒ1ĀøŖx”’¦*‚üŸ(—’HūĒīŃGżŪĆ€]Ėq|4ˆoeY3Ū Ą&ūé²sæy÷ž’™yĒģiöā‡żīįåĀ|r«ÕąŽŽgöź¹$NCGU„žšŸčߣŗ„`æv]ÉU č±`Ó…ÓĻ!„m'­_»)ń‰ųCł=Ņ_āļŽ&ąü3—ĆFž}h’Üp#F€>Ęq aƧ¾DŅ6žÉó®¼€ éMȵ'”Œ›‡’·"ĄŹźĻSµ‰6&.ČčGó@—ųxŽĒųdėwÆēœFē˜ÅQž!ß į­io‘™’ÉŚkX¶eyī<®8ū ¾ZśsÖĢaĄ­莦;.‡‹…ė2ė·YXČŚ½ *H(H~_„fž0D+”E(ż˜ŹBfĀ@¬¢@iŠp‚€,!ȁūhYÄ€ĻŽāś#ūx÷š>Ųŗ–} .~ØŃ€™×õfUŃūF pi)ų %5fb€.ųAŚö¤Ą{“ŗ3Š©ū;õą%»Ć <8Xķ.ą‚9ØŻõZˆ6Ź~Z®X@ŹEÉ% v'ŖĒް~Ż[z fzŻŽm¼=[¹P›Īgī@yĶņ¹\”ŖdԨǃæĖ|Ļ!„įżøæ~£€  CÅ”‚½ĄŽąœyP-DMp„¢!D€<'Bž”Nগ d¤VGÕ32¼Øz&€.œf!˜ źŅŅļćQ‡ƒ—ļaG”É{żÜĶ$ęg3JU9uüPn˜>–ū~<ŹźÜ* €öüāˆCCe?xg+žyęÜīhCAqÄ;üq<ž §³”ĄŽŹ™MōØ(³æP,*GņMŹ’ĪrØõoLt’fćMžĘ ćY¦½ •Ģ›É<"9˜†öPįŹ9Äø—īį2g źÆcą£\P˜O@ɬĖ}/¼Ļl€VWPP­Ļx½ÜųÖt6’=ŻæS7²Śwå¦VmhŪ¶ye©ń×Sż#ūéšKįŅü#„éźi¾‚ŠØ×ų~u”~~8Ėl’¢kŚNŁČæīĄxęYöE(ØAƒĶMxąČFå$Aö¼Ć,zŖ³¤XĢ֐Ōdmx xņ³'yū¶·©›Q€łėęsĶ× ę_¹sÖĪ”}‹ö¤øRxźó§X¾u9>ŁĒü?ę•Ģśmc~CĻa=ɼ7“’¾ż_>š÷‘– aɃŠö7#Ų#\Æ©C~HŪ8IJ,’Œ`µXĶ”¢PeV%”ūY]£Łō’Œ%ŃzȒ”Ķ`„ė6– LÅŁGö1Pߦ(Ō-Čēž›ųfų,’čYś=œ‹<*b4%zy„//‚’å‘||ūį“Ćxå”Ó¹BUµć’Ó™¢Ŗ¤.˜Čй“Ø pt3NŻ#ĄēA(ĢåjAąp÷GYZ–Vn6¢ŪĶM’ÄĻ=„؟µx¶V|$¤ΚØĻŒaŌŻżŲf,STŅ0V£I`hY@,&P²,@ßn, p…ń0¾ža ¶£%lģ3@ėāeö½¾hÆ©*u“Óé€ČęœcüŌĘĪ€‘‡’˜.*ƒ/@Ü0Ž8J‡Ź¦ƒÖŽ`ūöķ¼öŚISŠĒI†Ææžš™3gWķ…⇗ŖŠHäßųŗŖŌūGkōg¶¾<žĆ™ü%jż»ƒ»&#ŻēįjĄŻčt®ź?A/Nfü³ø'£=ŃvöĆ{łō“×hhėą~n›Äņ~ļ2ßøķ©˜0Žģgčņ¹$ėÄßXćUwŽü÷!öœ(āÆ×÷Ū-2">|ūģ>ķa]`'¦Ҳ@į.«ćČv³”_DØhĶGĀļvō4ŚņŠ)kµ9ˆ=’©›~\²ĀÓķ}*EAÄ&ŚųjéWüś×ƌøWĖ4šųĖDN©y ]Īīb:Ċ­+ČsēqŁY—™n’xŽĒĢż]ūšüūŠß<łŁ“Ģ[7·Ļ –‡©®rd” Š(!cƖõ"ĖĘÅśLŃ!\½½ÕbŹS0(Oq ’(Pт€Q 0ėPt¾(ŀµ ÉܾžQØęŖP§ Ÿ{wmfŹČgY=ņYޜņķs "–Ę40’O ·>Éŗ.7j%Y÷÷g’+™÷½žóĖ,žxõ.¶~ž¶V2 ģ[Ėļćb»“yi™Čz’W#9CU©éJā{ć9Zw`ž {ģ/ĻJj*Z”'š½ä.@Ųü;U”±Ķ¦µxÕ”›:óņJ^s8“@żµī Å&±z…ł~wšˆŖrvFMzŻót±ķ©±K@Ē ŚłżIcXWfD+ °€bǶ»%7ęģćŒc»HĖĖA2#u”D­”Äߦ ½Į6ц(ŠœQ’ 6ķŻÄ ŻĄu­ÆcÕ¶UüøžGŻ>ˆDgš;Ÿ‘”¬ČĢż}n‘Ū(꭛ĒųŸĘ[_”af°g!«ąQEü²ˆz2Ō’Gƒp"B$” \„Œ ŒŪJ+D#8)J#äf#ż<‡÷E3;U”ŗ;ŸŪwog˜—YūĮÓ¼7žŗż½]«Š*要F!Ą2©Bh-Ÿx—7Śž‡V5ėqgr:oÖŖOQļēe hŲ lÖK«ŽģćR€õłÉ(ę^v ŁÕyRUh2*ź„©€3 ̟DĄ.953ŁPŲœvól07 ¬ˆl€+N§±ĒĆ+’÷:Ąo”Ū7€šv/ó³łDųeč4FźŪ~*`J³s8ļŒ  åŪ*0’9ą«Ńtˆ#Ž1ŖŠ°¢æšūżÜ}÷Żųżå"Šćߌgžy†żū÷WżÖN¶•ŽÜę/ÜTʳŽßY0"Öö~e‰ś[ūŻö2_ "æ Wų IDAT…sU•Z‚H6hä_oė—¼>Ž.Č~.ųwčĪžv»&ųż“џ3užć^§*I5jsæ(²A‘©3’kźCå‹·9,ń×£ż:ń‚†žŠžåa.ń£–<š›E’ū±ŖŲ §µ$Šńų>øć0KŁ=¦%²ÉĮmƊhŪ "“Ÿ˜ĢŖ«8­ĪiL]1•÷’÷>©®TżMj6aį+ éz^WŚœÖ†·o{›_ŽųAųdĮ',ްøtכ„å·¹óH^<¢|»„ĒUæB”,KyĻ'f"±””<‚²f „kQhUz.+1ĄJ(0a0Æś}ĮĪöfxn\s3¤¬@U•TO!7ŚĖ‡ßŽdķˆē÷éŗoŽXŌ%¬īW„:]Ļ”ūś3÷ŃA|z÷ ,ózČ‡ĢŚ|łŁ<ōĮC¼šŁ›“õy¼^Īrox„-śxŗšōP¦9]|ä÷rÕ;Ļr¹Ž14!`’~ڤWg]¤¶z6@Ų²€J“  ļk– °o+#ĆWŽdŻ%iŚ8ś«*§¹Rx³]׹ūĖ„µ»T“d;Uć¢E?x>aū?/ŠRó’#ā"@q˜£Ŗ µ`+ŗ‰®]»–!C†„Ł=Ž8¢Ēüłó3fŒqU>pQ5;ńP+€ü›ÕŌ-²H»3¢¼ėżĶ֗µ½Ÿq{4Q’kpź­żšœƒÆV&”.{9Ooķ—2ĘĆÆńŗ ² 7›VĻÕ8ö­V" ķŲėļ>J§ļĘRgЃ<šs”!‚@εw² Ūm\Żēuŗ\ū»Ŗń¦¾?\“?ō!ż L/³qŲGP˼XpN£sųcč–)ņ% —XQ]6ēā¼Ćœ~d/ÕÜr8 = 6j‚Ÿµ¦ÓAĖxķėר~ouŗ¾Ł•Ū†ßF¾'Ÿ· dó¾Ķt~­36ŃĘģ~³YņŚZŌkA÷z Ŗ*?®’‘Æ–~Żõ…"LGդݨøm6ŽŪŠ¢vĻ++i/O_Łs '˜ „J+ X‰Sį<¬Ä€h²¢¦ ¦{a>=£™Z:|< 6ƒ?ĆżA]C£#UÅåóŠłŲ~Ž5†ßt1`ćo¤@ÉņcAØ!ĄÆ„Š­ūźžĀv?yÜ\āĪ£zrČ~ 6¶éFĆw‘׍pÉxs²ł¾^<t²oxŒ?@+ °ōlg9ečė¬J\;“Ÿ»gŠM•¹B”XŠłÜfßßפßĒ£‚Ąī‚&·M ÷ö %÷{śz’ņ²Ø·öįX4%”ėā"@q”ŖŚæ°Ą¼ģv;?’ü3^xaåĪ*Ž“ĒēœsĪa÷ī R»§€w*iJaQUœž·œ ”3”†ųƒ9ł×‰’G#رn){=tE ˜ĆµĘż^¹†W<…<P£·¼:¦Ų›Äˆ—īįŚ£‡’ĪSƎāS·„šĘŻ<hXiÕx¦ļ>ƒg’”§«¤hæÕ6Düó ©×5;fE!µĪg)fé’¹Pl‘;Ņ“ŅŁūŃ^¦ÆšNĻaQń 5ę›DjĖÆ˜V½_7nˆ”ZøĆ9Ā{=ˆÓŽsĆŽ$˜ī°ö¾½—»Žæ‹łŪ@t:³ó^šG‡W:°tóRR\)x|¼~ÆéP1ĮŽö‡dńm89m;R˜Y£ß×oÅ^ĮUZ)¦$Ńś³$*US`p•± Ā&o“”-KyEi:˜u0éLhzŽh; čcŚģØßćüæ’ąKŌp®Åøüjųü»’ė·l€¹ßĮ¼™°r)Ø%ÆÜ+9ł51‰łē¶gĘŠŻ=¤ī>ĆuXµŠ»8 ū[Õ’»čpųQźĮ«w³ŅngUŸOčM>LDI¢š¶~¬uśP·®'įĖls$0©’ĒŚw Ąš$Mł‚ ’łƒĘs/hÖ(NŸvĪ„DėkHō”§dĖ@®TT½S€±] Žƒ’õ–z»@Šŗč?oYŲēfņņŠ`ccõzōž|'ėõ.oö!aĀūü {j—x‘ŽÆ «N9ƒ;&Ƨ(åņ"‰į²Ģķ™u¹ąū½lhļ¢gj ~ž“˼ BGG“@Y—€›Bö{5d{ø‚öO•½_ÅGy£*e,>Ō_ų|>ī¼óNņó«n‰vU÷Ž{o(ł_ «¤é„EU!’åYļ_š”’ŠuŃDżĆ‘’Ēļå†U Xå)äIU”¹ģē¢_¾*~”ĖnķĖ AŌ²Žā™JöÆw <5„ļD‘uyÜØ§ū?ūĆ]I ÅēņŅ«ńxß!|fšī@yEü£uō7ŪmšæŁ±² į|nĄŖö’°éŚØ‘•ŸÅŌ_§rƅ7P=E s¹.ŗ_Ō¾×ö„i­¦ęÅ2ė@q"kÄ9…Ēi||?)ŃDuŪxY ŹZ‹ĘČŌ2B±šĻ…“y” «¶Æ*Z—[˜[>ä4ĆbęR¤ģĮ'äH‰L¬I¾×®‘v«EŠqq łš-±Žn^Ę„<޶²f„f H6Ķ|04S –lŅd „f@é²¢É Ų°€Z;×óA“äą§ą6é×ģ x¤/L’ –n†×‡A§+Į^ÜĶĀį÷Š>ēż—Ģ`åšē˜:z÷®ųžZV†P±^)p6Žæ “ä$8“‡ĒwmeĘ;šęˆžtņ1ļŽ“źZė@żfp=*I™|e, 0šF“ `ehĢŠKĀeX6; e}#źŸĪłĄŃ#»Xv“Wū?§ł6LśˆWT•†5ėóĄ=OćūĶĶš:ø@Łsvkrōó]šĘå²L/»“¾:łæ4•’øŻŒ;“›õ—;yvĖjėĻś¢Ršʔ  żSՂ¢qÄQa؊öD`pŗ¾āžūļgŌØQ•7£8NZŒ5Š^½‚²’só@Kć®J( łÆŒz’Vh@įö‰…ųƒ¹Ń_h­č1įˆ?Ącwpg^#AŁ–”ĘąŽ’efū;4"ēĢCpźü>Ź»žf`s$0ž½ÆéŚ™qü—ļ§w^6o¾Ūž„Éiēā֋W'Ž Į¶-“$<­Ś³ųāk5O@#ž!©žPöˆæ_B°ró‡šæĮ(Į¬H?h$H7ūų_śTŚ–Ų©,ģóbB‡3:°Ø’"žųģ f®žÉü—ęÓØF#eā’—/aĖž-%¬˜åĶ›Čo²Œ‰5›2½ÉÅlw¦›Ńš‘ÆĀ8&м™“ĀÕfćķxt=†ö`ÅÖ„¹ÄŲ‘œb½9sjķedŪ¬HiĄäFķX—”‰[R—‡^U€-"ļ‘…Kö@yg Ě%`<č¬Ę5Ė 8¶ē¤˜ą÷qN,ē˜0:]e¾M–ĮėÆ|8r~YKęĆĻ æ¤Ü¦Hv~s%3ÆÉ™Ģī|=;++#``/–J üüüGZ;ėÕKHš?‘>ī|īVUŅæ+‰‘}ßįuż˜¼Äwś²PUI{jēW«Y,Q&ø“sœØl€ƒ†}#e6F½!ž\ś×kĮ•łGØuü0‹ž_ćį=«9Žz1éė–ń›LZϵMĪ@½åjżµŽÕ‚_%‰ļ}Śl|=r4ke}½K™ ĮŁį2„x&@’TÕ/’³€•EĒŽĖ=÷ÜSy3Šć¤Ćļæ’NŪ¶m), ?Ü|^IS²ÄæüWT­’œŃ¤Ī™ĘFT’%ÓļčĻżĶ[kNżŗÉh%Ü:žŗ‰× yPkÖē¦ēŽa”q|·„šĮÓ“Ż»ļĪŗÖw?ĪŠź>õż‚RżCˆ?X“’Iü­ŅüõķfĒIæŽ,Ē—Y¬UĶˆū³§Ó!›ŽŪ„Ļļcū”ķˆ‚Čė߼ιĻeä}#™³fW4įåaH²#„ÅD~LÆĶW Ū±6½Fbä¼nCP °-ßÉĖėń•*–Ģv°‹v|Ū|a Ė 6  –ķ’šĆļt³×‘Ź÷ÕOcNĆVģ“%•{ʓŗŗc ŹS ˆVŠIy(/(‹ P1ążž .,ąśXēp_-Āoüė€×[¼Īć†?VĆāł°| -™I¤Jk])|ß“%3Æø1øŠ(!Ą(€¹* ģĶIāÆēßåćż=?ńūÆØW«!Ē[w!W_ļō”¾ū<7eedJ:Oõ¦•…a&@tB€;¹ä>®ŌĄŗ(„€H"@żĘØ_ĪĖwač]¬R”FĒ[hńĮ„āh(Ī–ųT–¹¢IΟ¼żŪ7 ō8‹é*œsśł“śbG:¤Ó1?›¹.·Ģ.૱ .ÄGy”Ŗ•čXĮµ“=ō«WÆ®¤éÄq²įŲ±cÜpĆ ”ä’N2ņ’jH+›Ŗ@ž] TEņoęš’ė2Z£jĪҧ¶ā%üMžBžīx‚£?įš^Ž[8³Ų™ZO÷„bå<(X’ˆŹąÆ4©žVä?Zc?Ą4ĶߌüĖ6jŽ|E>§š’Ą"a>*4­Õ”.-»P#µŖŖ2ęĒ1œŁąLŚ·hĻĶļŽĢŠ­+ųxŽĒ¼’żūt;æēŸbŅ€ Ė2o¢"QŪ]Hķ‚,\zy' ™Æł%ŌÓ]üœÅ³ń|ŠR2ļŗ¼! °$’Õׂ½· ±ß‘Äö¤źW'¤C•…=°Ųd}TDAEō–Ņ–D[J`V: —ÄZ:S¹@˜R«1żĀčĮÜSZņZæÅܑåĄbü9°Ø*4;īź Ć>…Ćį†žŠ“ŚÕ ~?ēå§ßʕ<Mi€Ł}ŃļE(P÷m³Ņ€Š²Ib“ßOSÆ( ØI)(Ż`wū«ČóI¾Ą}~ķ2’sŽÓOŁrĒćL0~gčŠM-!rY@K§€pķ­Jöģ@øķjäĖīĄŸœF?<‹'²¢]¦Ö1$Ó]–¹Õ•DŸmŪ4?€ŪĪēaUåŠÄž÷Å*Ķ×aq‹ŲķõrYy™FÓ&0Üyāę€qüÓQU€”ĄTż…Ūķ¦{÷ī9r$Ģ!qÄŠ¢pūķ·³}ūvćź-Ą’*iJ–ˆDžÆKKžEpśßB,ä?Üöe¬÷oL1ł?zįÆcˆŃ’ųėäæ ArG_żMó @5“ö3C‹sńŌk@@QUź’0™žn !ĒØ?°eÖZ8 9ķŗ²___–:’X\ż+Šų›ŽųėĆä)œj¶ ?PŠR÷KOæ”uCÖń׈æ˜÷Ņ<:žŁ€Ļ}†Oö±qĻF <ÅaöĮ3旿ō¾¢wÉĮTĀ:œ¦“”zØåĻ%EPI!d6jbžsņ”跈óŪ€FTœ ¢‰ f…ĖHłPćWüˆdٜlue°3!“|½@%a§¤@`%Ä2n4¢@؟@iXüB[ Z‰ß~BŪć‡y.†K.Ūa{HuŽŖZ’0¢@­ŗŠ„<ŚZ†h}>_ń=(œŲ×üi!„BŅ«ó½$iå„E÷žū~r`Ÿ„0{"Æ« u3Ņ·fMD6@ ŲJ–£é(7@nv±P˰ÆŃ@_Ś%`Ņqę\ų_Ī%~Ī>Źg;xļŁŪŠß®›Ļ¢va>#l6&­Źćė \U–>oJƖdSä”zׅTG%S“<…Õ! .ÄńoFUTą^`«¾bēĪōģŁŸĻg}T’zōķŪ—9sęWå7€”»  ¼ÉæU›æps(O§+āoFž÷€Jž{ĀÕūG2śÓ‰æNžīyÕ‚Ø™?Čš—ī„Óßæh“wūFģėW?ļźWOf¹3Ń^7wæ÷Dq„ćć~\’ŸĖćN“ė6ÄgJü“Š’‹Ęą/ōŗJÓĪĻl[iŒżtb`Eü»Į n™zfē. łÆW­³śĶBQ®|uØĆō•Ó8˜}«fpNćsHu{4ī9ŗ‡™æĶ䖋o!9!¹ä alѽÉ$)~2•<\īl‘—jGi’ĮĪŗ»o9ØMĶ2™J™ą@+g7® u Š> m6v%¦²!©6‡«į³Ŗ“ŠŒPKiē[žBEæŪ³T$QĄJ¤"'j1Ąo.¬žś;61+sϰ`vČ9c!’&Ł”Ž6‡¬Ś”ź÷øXĢB€•Qą]Ļ3÷±”šOŒ3£Ąd`ģ3\ėus{b*ożļe–†¶ ¬Œl€<'‚1 ęśńĘlׄW¦“õ—Rҹ^ńsł³črŁ©47ū†MŒ<tä1Š:ŻĻ瀧ugŽ0ĪkÓo¼ŲSŖSŌ5„-až9ÅE€8ā(Ŗ²a»Š£xóęĶćĮ¬¼ÅQ„ńÉ'Ÿ0dČć*-ņ’gåĢČAžC±Øœœž[Qzņo†ņNłw…Dżuņ^„fmüŖJC»™6źMö=t5{‡<ĆĮ‘żŁ’ŠÕ~ä–=} OnZ[,\/o";įšn†½}?/½q'ßģßÉTU%EŁtywތ”īęužVQ’Pāļ¤ū—x#‰Žųūc$ž:éGüC …¬ZÄ£#T›×ĶØKÆĖ{ńįżrłŁ—ŠŖI+’’yę‹g˜¾r:²9ę^0š$g·¶æ5h¬Ń F“œĢ-ßÓ~?—Š#)—÷äæ­.Äy¢L÷¦Ī_‡NüC,”b‰æŁ˜VÄæčx5čż,F˜Šó{:ŻĆÖį[y’Ž÷¹øłÅŌ«¦%lŲ³€Ū܈(”üŠšūū\vŽÉżļZ’żŚļŁstO‰õ‘ꔌ‘T…$Ł‹Żc ¾¾PR¦×†«I(é§r쬭 sć€õčhNCk×'…ݳ$4“ŠSŗD’wBĶ_,ÉĪFW5Ö&×琣²)y’¬ŪŗDÅŽĆ@v!˜-1‰Z ćW–P* •DQ§ÆĆJ(ģ€H„²aŚ' ōū83ź €e‹‹£öe%’²ņC€Ä$6†^Vųscޠפat8z{$!@N0¾Ö3ĆrŽr[B"Ÿ>ōe8QeLźĮ¼, Öl€;B¤lĄ²]`¬%-Ś¢ōzG.Ž%~ĶØK—„‡YŠ&•«d:yöŒ3h#Ь-,ä«Ücü¢Č\/9x~ĀLźGu"mĻ–t¶Óßl;”|Ž1ˆ„Č"@8! .ÄńOĆÉō~Šo‚ šé§ŸrēwVā”āØ*X¹r%—]vyyAyß7öń’Äād#’į¶›°Nł]WŚØń‡¢ön”äßĢįÕ\3>„“×K }?ÉNŽ»F^7ü~:H¾}ńSī-uóÅ{yŪķę^Gš“äƒ[å/ ę¶~euöēźo÷i†]E+BzĶŽ1sō7)Zč÷!ČĀ9<› %™w6°§äqi‰i}ˆ,ąö·s,/øMĄ”'§pc›ŁqxóÖĶcł–åL_5£¹š•õĖ7¾Ģ«7æŹł}ĻgĶßÅAųWo~•—o|™sž9‡u;×XĢcHPo¾Ģ-¬Loȧ§^Ā*)³ø`ĄXļŹo}^Äć‘ö÷6Ś®»ˆ¼©%ü$KBE+HŹC3'ō|w'J@ū0„uö€ė4žŠ"ÉdKÖ'd2æę鬨u‡ĖÓł’DD×E›–­ą04…/ÓxŠ\śą Sāó"¼ŹR2Ę"FQFclķęŹ£å MBū½²Žšd¬sŠ„ĻfĄåWŚž’ƒŗÖū ?÷÷xą•'A1˜{6;’ü÷lšĖ&ļ‹įż]ö uV-e€ßĒ™ØTSU-ėKȲ'0/­³/æ™%õ›X;‡$ŠĮĻ‘:Ś‹½~­ĄG.D9Č `wjū’ ęæ»j“Ź«]`4­CĒ~īj¬ūƒßl"Ė׳¹Q_{{2wm£že—°¹ļds?•ķzœĶ$U¦Cś\8y·ÖmĒ KŁ!ąÕķį:Ä»ÄńOĮÉ$|å’Ūl6¾üņKzōčQ‰SŠ£²ńĒŠ©S'Ž=j\½ 衉iČžéä’D¤ü‡’«Øæīšo…Šˆ‰[Bxżvśš@ÓsißūY6,žCŹĢ/Y¬*4E¶ßŅ›Ėš]Da“ä?\[æņhé+ń/r“/ń÷„¤7ĻęįAóEB°³äńMk5åÆńägOņī¬wKlwHśtķCĻö=9»ŃŁŲDYłYōŻ›‰K'Ņ zžžąo>ž÷1yøčøF5±żżķ|šżōg(Ķ­ Fl#|/ćoV§4ąÓ—°:„…`Š6FWå|¤عķ6“ęтZ„Ś"CF{ÜŠrņJń­œ“ĢD‘üäŠv¶ŗŅXT­Kk5cƳ^#‘•*”®Ž&ŚĖ|ĪXģ$b!¼%āĄÉ"ÆÄ9¼^ü„ *Zˆ„Żą·c¹xēfFQ>…+Aø«7¼1,vĀŗv |!xģ[įōZMqŪķžB…O℔ܛs„¾DŹW(“K,MIgf›®Ģ9«uÉ^&”­ĶD(Ł:°čĆwGŃąB@8¢oK»@+Ā ”"Ą%¾TŚŪŽ Ę’Œ„‹w” én“Ąc~ƒSøaI³r#“ļėāˆ#*œl€˜\®Æp8|ūķ·tķŚµņfG„aĖ–-t芁‚²p·mC•3«’Ølņ"ĢžĢ`–ņĪč¢ ’QŠjŻažĶR%õÖ~."qŹ'l@%)½O¾ų>_詘ĆūÓįĄ.&BB"=÷QńÆ©¬Ä4ƒ?‹)WiāÆcJ7y³ääŃśo„@v|°€»>ø‹Å£ŖęĻT.‡‹Ī-;3°ē@šÕmF‹Ē[°żąvfõ›E»fķØ÷`½ ŽOt{‚Ÿ7żĢŹm+‹i¤˜_S“oš„bUZc>mܞÕÉ5‚#įŅ©!ļŽ£ŪØ}t7m·œĒ½9§PĒj’Š@µuPk ²M%W²³Ķ™ĀŅj ł„FKv%× 0ÖŽņGż8ó$ķӔģĒ]] g”X>ä¾4÷{‰Ę&X“”Fzob¢yÆż²7ā>eJ+üō=×,b²Ŗ’J ^CXŗ9vĀŗ’½šžŪACū7ųkČ(L}Ÿ‹÷lć=U Ī’%9žpł1…‹R2˜Żŗ óāƒh„€PB@ĻHöhcčB@“" ÷5甂ćԜpˆ"w£Š1ƒ¶yYĢ—$Ž]īćE€NÕiwœ‘ŖJšhcAݦ¼ņÅę iiĒĘE€8∈“M-+w.ĮĄår1cĘ ŗtéRy³Šć„cŪ¶mtźŌ‰Ż»wWļ.EŖ¢%’”ÄN,łoTt½$—’Š1bMł5źo¬µ<²ĒƲIUIÉØĪ£Ļ f̜€7{1Ō[Čķ€ÜØ×<ņ"«ōc­Śś™Ķ#“Ī߬ĘĀ“Ŗņ·“Ŗh⯧ł›mÓė§ē‚¶bē"Øh€Év·ó»1ńń‰$'$“]ĶŖm«˜¼l2c~ƒlĢķ ą¬gńĒŠ?xźó§xgę;\įõL}z*wp7Ÿ-žĢjśš”ÉĒ&h1šĀ™•©ł¼a{Ö$§ĒÖ»@Žl¢Nī^ĪßU›“ā ŁY±;¶Bس5ķ/ü‚H¶č`›+‰e© ųµžYģtfRhwX—?É2Ā/~NŪ­ TĪõ 4ņC#=%Z‡ vŚEv$#®m( +Ū ā6”ŖĖƒ¢ ŲBŅū+*ŻŽ ‘D›hBž=^U?^“iūyüъ0Vā@ѹ$¾¬‚€™°g;Iß}ĘDŁgŃҳœšżJhŌ¤l%Ū·Āg)d=öē…žkÉL¬[Āpæsėm¤¤€d×Ęõøµ±•Čł²$ń[b23ĻnĻōvWrXßkY”6@Nąg}’H"„ÉØ ’€hD€;. sćo¬`ŪćCˆ `1 IDAT¹ź¶'š_^‹ÓāAąw›d7Ŗ*Õ«UćŠoŽjŁzFtŒ‹qÄ'£ZYļ|ą}…Ćį`āĉ\żõ•7«8N6mŚD—.]Ų»wÆqõ““’ •3«’(-ł7#žpr’ŠHł’Nٵ•k2ź°ų±‘ünÜÆ<Č2šŅ}¼VX@oĄ{QgZw½Ė`ī–Ė–’:w‹T…z¢ČÖūѹ^ć` mŌæ4Ä4S±¢Lü­¢ż@‰šąÖŅæå˜„ ļĮ²g½jõčŁ¾'횷£]³vŌL«É’Køā+šų‚c•u2ź°ļć}<’Õó¼5ķ-ģ6;nĄŲ…cŁ“w“ł @S(,(T-ʐmw²,½ _5nĖzgŒ‹¹SóčĪĪöÓao+.ĪjJjyĖ ¤o€Zæ Hn<‚ČÉÉfWæ¦ÖcmęéģM6!’rĄĻ`ƒLķß}\Ÿ£šź—f6ŻéŖ8ė\›8ż I8ÖÄžD£<„„Ņˆ¢br^ä{½E"AŃń1ĪŃ( „f@l‚€™ąõ"ŽČū7b™Wišģkpēƒe+Xæ¦~Y<¦hcūCé"އuĖ©¶t:oxÜ\…įūH!-“Ąļ+y®Q$œyß]r­Ę‹B@LefŁ€Ż}6@iK̲b- 0Š`]įE€_!Ž{3T•–MĪä¢ÉėŁp‘Ä'²B—›zÓ¢ļx^ū ߍcŠŖŅ¢UĪ2ÆäŪŻ1.ć%NV XÅ.µ6›±cĒʍ’įX³f W^y%‡6®Ī:«+gV%QŃäŃIXļ’×±’¤2ł’ś3ŅęĻä-Ÿ—ž€hw0žõYZ>€Z āĮ.˟¼ČEwńœßO{€äŽ|ś†™7ź:ļŪĶ€ÄD>xaÆCłŌłŸŒÄ_Ē]€ż#Ó|vš•8(Ųe5b1’ƒ~×÷£’Mżé5Ŗ£ę¢nF]ŅÓhÕ¤}ÆėK£ĢFœ÷ģyl;ø-ņ€:jB±ķc0Ņ6£6œĖa{"‹ŖĀ7.`«½zTäEšŗé(2‚ļ8öģ=ddļąŌü£“ŹIäĀCgsjvS\j+ŖE?¤m†ĢU(Ī,|ˆä‰vöI lHŖĘź“SŲ”Ł”ĆŽD¼’½däBż?īĖSč†s?S¾dA˜ÕJrŒ9W²ķ+1‹äƒ l6ėæ‘ ya¬Ā€•(`Ēb@Ź’ ‹ćŃ'ūh±æREā¢ö0jJŁJVż?Ģ(Óīą—^øżĻ_©¶|6OęÓƒ)^ 2Ŗi]ĢĪe’t IbuBóŸĮ¬oĪ@,Æl€“µ$ ą<'/z½<Ÿ–F×Y,Ņ×·™ŲV*\”ÆėՉ“5?ńnݦ}śšī»ļ"ŠZ†Ē Ä”)SøóĪ;q»ƒ<ŗWėĢ:ńˆ“’²“’};° z„…sĆµxäŁ/ųb7ś3‹ś'3¾¤Ę’Y¬TÉĮ¼F§1čŽ¾ü:^ØÉßŅł¤åf“й‡f2YÄ?ƒæMüõóįõ .9Äyėҵģˆ8Z"gx4©Õ„?ßł“ē~ȓŸ=I£8µö©ü¹ūOdˆ<@(Ŗ•%Ÿ Cóqx>6'VgjsXR«9GŒŃóH„ßć*O!6OŽœ]¤ŪG=Ļ1šzņhę÷ŅŠÆRÓ]tO:.o:’߉ ŲAō‚Ķ‹ź<ŽćØ®cȂ‚Œ€[°‘+Š$öŁ“Ųš˜ĪÖŌŗģJkĄ±“jøeÕB“×*JŻ>y ΊżĶ‹„Ķķ„„~&8¢Čł( „o3X‚‚Ł˜ŃˆįZ (DŸ‰" ĻÅėõEUB ĻĮ(„ŠæĢä“õ˘ Ŗ%|I+oķ;‡"d̟ kV„?GjŌogdq!ŠŚ’RC”Ųąr1³į©Ģźq[NÖl€hKb®qš–ģ§•ĆĮt‡Wl6žO ;߇ Amćä旗O=›†/ķ_ ōoB]o®7`[³VĮēéāˆ#’“ēłéĄeƕݻwē‹/¾ĄårUάā(7 6Œ'žx"Ō)|ŠŲZ9³*‰8ł/;ł§¼z=īg*@­¦t~ā#­“£4)’”Ä_‡×0āUڟv>›.»>šXSŽ­żJ“ī_g’ņ&žfößVÄßø=÷ ćųÖė q‰T4[N“ĪŚg58‹«[]ĶéõNēŗ Æ#ĻGėēZ³ļx3Źmhµ’Éī©AƒŁäٜ¬N«Ė¤ŗ²&„~ɶ”f„ßųҊ°Ź2‚߇čĪĀ™æŌœ#Ō,tÓ:ąj`wÉ£*’6ņ_^õž 9Ś:c‹æ~WqO~ļž{ޤn›ÖxĖĆč‚3¼īöemķWęt’“„ųįĖEśę8wļĖąÓÜĄßśŲŪķün|ńčģ9ŗ‡YæĶbŠōAĻ?n6BlØ„łĄ4ž‚’rR‹Ŗ7azsŁīĢÄ[ZĀ ŻtO‘l BAöÜżø “ź-$Ķ—GšætŸ—4E&QPp*ZʁŠ Æh£@ɵ%eO$;!•œäŚRvR:©I‚Oµ£˜YEF˜!ČWģT”WUÕŖųĮ«(@ūł½Z \¼ķ"KAÅ|Mqōæ19e^87żX +j™žWĀń¼ 4żņŹ$šłmØ%Jō®įę˜CQ*æĻ4’PŅj6ēp™^U’–o¤·v‘.£"P½LY`nı$ĄÓ¾‚]éJ„¦Ķ!³¦¶_“žż­å©1p‘”Ā[Ļ d8T]o€XJbĄŚ`Ōø¼« °æ.B4f ķ‹sģ ²%Æ.÷·œmėāŸ›æN^“ŲQĖ=ŠĢ-®ŗĢĪ!(W¤c\ˆ#ąŸ%€v=Ʊ233™8q";w®œYÅQ*ģŚµ‹īŻ»³jU‰šßłĄXz‹ŸxÄÉxņMŹ’ū/ŠćÅÉZ+¹÷zs4 Äd¼4‘”„MłśCń"ź_•ˆ?˜§ū—ń­ļ^āĮMdNkĄ4æLӝŽåbaR’’vAćéxD›“Ŗ3£Ī¹,É<‹ĆRĄ9?VĀÆ“ż „4EFP›ŒŸ‡Möa÷ęćōåāōąlŖŖńQDAŸœ&yxT¾$‡ «‰(¢ˆj$|6ĮEŸīw_ś—¬ ʬ#ƒłh‘¼<"4ę2@R€ź)Æ@¹…āģ×5)é'É.(Š;ų}ІlG“ :ķŃ]ß\š…üoS÷’ƒ¢ż,ŽxīŠnEē ĒūZe#Į%šł ļ“9Ēø;–y—7>šhX €‰ćąČ!mI‚S[hcÉrlb‰Œžęŗ¬÷n®žģ3R! R»@8qŁåi8ģf’ę~ĶÜŌTž’Å`øó/„’œF–ä`Ąro“MąŸ‡6Ÿw»‹G_Sœ9ŠZd.ą’Q”«Łµu ¹ėÅE€8žmų§ :ŽÅš$Iƒę±ĒCž©—żĻĮ¬Y³øćŽ;8~¼D$p4ŠÓĪā•ƒ“ü—¦Ķ߉Jł/ČCx”'_É~ŗÖnŹeÄo/te’ģēJIāG›Ķ"ȲLME”€(±'%•}9©(‘RžĮšü—5Ż?0#’±¦ūW&ń•ō+#ģĒ9æŪvÕ·Č­Y§©_s9!°ĶķšLDqć˜ŻÅ²ōF|ŪčB6¤Ō¤0\Źŗ%)ˆ„ž`ü>Dķµ]ō² 5į7āGŸļ̵Šo”ZҾ”^4?†<Ė=¢C šČ†” ž ¼ }.NLüĆ% Å={¹4!°$Ģ–ū‹±?”[žj b‚E–ƒ•P`ŗŽē ŖE1k#$‹šõ‡…ŻönWޤ’q÷CpćķŃžP’łĒP˜§œ-ĪŅ žJc(XŃŃ#ģK®į’6]ŠķōŒ-!²P^Ł'Ā Z`P+DųÆÄWŠĀEusټķü Š&•’äę2-%…’.Ģį‡K“čVPĄT›ĻßżŽ^ķŗæ—mģ öūé±Pµ.qéāųćŸĢ„;њ@įŹ+ÆdÜøqŌ©&<G„ĮćńšŹ+Æ0xš`”ąog?š"hŹoUĮ?üGõ‡Š©÷xņR¾š{¹F’˜õĘnĖĘ£ęŹŁ|§(4w}’ÄĻ]nēŽ6W?…¦üŸŒQ’“ųėLS¶!ø °ŚHęģZ|˜Ÿ^Ņ­¹Ē€DyŽ"’Õ×@ķŸpŪģüåJgN–,¬wÅLEŻ4_ć:›bMę‹ö± üŠŒ ~oūüJŹTŁż… u-ĖB#’åE|D ęõ#H²pšz9ż§¤9ŽŚ \VNĢó‡ĶŒ([ ZAAvF³Č $Ņo~Žāń́¢cCJōłZ >ų aīŸfśšż¾Ōū¹Ŗļ:•ƒÓφ”¢Ą æ×Žw:£8Öb»E2HEA­w ·Üö$?‡n(µ–ŁUm«ĄXĶw,Œz×ō|£Źœ/9 Č~/ŚlĢżn·<| µ’ŽČ*A`ż+cézõŻ%ļŻ­EęÉ?*\dvķ::ĘE€8ž„ų' €o€Öʕ5kÖd̘1\}õՕ3«8L±qćFzöģÉŚµkC7z Oü¬¬'’±“’„„|}æł/ČEųاļŲČR@h|:ķz fsšĆ7$ĻĢ£žBŗŖ*µČEŽ"‡PpÉ2ĶTU‹÷J‹Į͵ӊØ¢‰śæ’:­÷ļ¤wÆēy°v½@Vm™ü•Gæ~˜łÆ ā_“^ÖĢ’ŲĢł«Ļføģ “(^ģ%²CZ4°”’p&@Ā8e²Må°ĆÅ/Õ1«öłlJ­Ežf įß P{+“Ī•9Õ §Č©ho±€€,ŖäIpĄ ;S¶œnge³Ą#²Ķfūž+2‚īęoօ@‡A‘ōņs_ĻWÕ+-®ČĢ‹š@ ėĶinŪ¢žrFWšč‹…+‡˜µ,ET?čxßņxcšY$qĄ“•_ˆP`ŚA Œ@ Ś‚³?LĻeD› Z‰[÷§M’4o‚,S% ‘DĘ} ń1–˜¶ņ‹åXØ'–%„1äWxĄn·ˆ“G*Ū °¢|¬ĢüiÄż<ąõr'l³3åżqÓųĻ–ųF–iפ ēMŽV²æĢe™œ—s”’ƒ——{˜ źā)ˆÆõ¤£ ū‡±©a\ˆć߉ŗą>ī2®Ž½{3pą@RRR*gfqZN÷°aĆxńÅ),, Żüł¢‰Ų‰C“ä‚€ ł/­ŁŸ‘üäļób7Fū½Ü(9ųzųT0›Gh½’¾£HĻ=÷­Zµā×_ ݼøxŽRUŪVNņČčŗHN’fä_Æ÷_’+Ž—ngŌwćųmĄ-\§ļ“ØÄĒßą/‡ƒ)€móÓ·‡>ˆ„ŗüWO@•$¶ hęgįRž‡æF›yÓųŃļ£ ąKMēå§Gpo»+Č2#ž:łwĘņ/؈f)’~‚‘üG"žöā?sēىÓoCØhā/"žŃ#ü©Č©Ķ8Ņä8Sź®g‘N-…æp Šh„Fģk E•kµ†ķM뢰ˆ}Šą;ŌÄx ¬I«Ėo™MŲoOĘ'*Øfw™Ż2ićż<»ĪĻx7\Fł}_J¹"]—āš…ĒŻw¾’¦“O#į—„_‘ōE'}‚QPķ¢Żnē{ܗśP›šžÉˉ麠c–wl·S­æBɹBvĖD›ˆŗ8Ć,Eū9%!”—z Å&«Bčb% ćv¢ >U Z°‰Œ ‰aĄn—‚ĪŚļ;TŠ „(`ķ‚. čb€ĶšwłÕ{9WgSĢųL„cķJ-_„ßėü<ČÉŅ–¼\-+ą¦ž+ ›s’ł—h1qæĮ.i‹¾ƒ•h\  z ß5f"@؉Ɂ}Bž‚h$÷^w°Y®G!‚Ó^R(1æH"‰yN„r­MŪvᐾmC@hćä)柾’ÄŠ%ŁĢh›@/æ—ēõ6‘_BĒ5bQE€Šg@#ā"@U ’&`'ŠčÅķB&MšDóęĶyė­·p»ŻfĒĘQPU•ńćĒ’Ÿ½óŽ¢Zßų÷LٚFz/‚‚"ö†{’ bļ×v½ök°+zķ½!v°Wģ((ŠŲPAz !½m™™óūc2Éd3»©Š<ŸĻģ”3gw“™ó<ē}Ÿ—Aƒq×]wauäx <…-ŌĢŽ,Lę’’dh ł_¢±ä?Õžę’’>Ō’’‚ČĢ!Ņ}(+¶]Ėó=gó…b4ŅzNÅžb³±Wł;W’Ÿƒķ<ßy­ś¼•¶šØ¢²Žä§pfg÷aYz'*5½ž˜|ĄĒ&ū|`ńN©äD6ŻsR-Våqo(‘WfT;‹øŖ1»€›š[©SōāėĪ…_iÄOJz…õ“žį_c`V_3 V†ćĒ–äĖ,CSĖÆ‰ÄFP#YӜ¦¢H‘ŖYÕ­Įń:ŸeŠę¬¤{µį ZœH& ˜–f‚8`™«Z°\‘ŗKP]æn1ĄKP]8ĶCłüÕņįk–Ä®oŽ—¹éQV żŁ<’o¹~6ā6Įß°V-‡e‹aår(Č‡Ź {õæ­‘Ž{’ļbę$z½8B€ūŲĘF$"©ŠĀh€  )"@ ¼īžŖRDM4¶Jp  ‰Y9| ˜ļ¾ČÉĪö ēŌ}ÜiÄøCU™ņæw¹`Æ cćQŠ|Ü"%}toŻóØóF’uBēŗ]36µŠŽvl!ų'«QŪOb uŠ·o_&MšÄqĒ×^2°ńŻwßqŁe—ńŻwßyķž8ųŖmGÕHH’&‚6Dž½V’›JžwJ¶Ó…MIž[ĖģoĀq\)ć6lŖ  Aiz&ć'<É'ēšŅćy0į€'ļ˜ĀµNŸīĪÄęīĖ9,?;¤¤›¢°tģæ8`šT&®śOƒÜÆ>ä#n’½ū||pą8.ße?JSż55׿„īž åłæ|Gå­ä>!ØŚł0ł‰’ —[9—ŻĪyĪq±$~©ĢŲź»×'¢¢śz¾„ķńJń2ÖżĮ¶,_¾‡D³Ūʁ<¼zLĒŅ+‰•õZŸŅ;2«ćPęwźM‘ØvżwĘlšĖB¼$ųw±ä Śšł(ĄģR„>}øz)˜)ā~é|‡Č:ŗ‡åŖT1/VÕżŖ¦z޵ģZ›ż°ŻwźCī¹0ż†ķ¦’ŹR#MĶĖOg„Ž—Ųg¼¾³¾(Vė]Ū OSBĆØńHҦ&ų 8ĒśŻć5ū’•TżB.ü)šóö”¢LS¦°gÜü8āx8ųئåüWV@a>l܅ö ’ę łÉ ūłęģ œāa©šė;r­-iÕq£īwčå ŠŅrīŠŸ«wĶ» P¾äū>s÷˜[s|+™6Å %eńsE,Ę-ŖŹė(l° ސ’žšIæžĢųŖ!Č}29ز”75‡t¹UU¼’Ó•!Æå/€‹#8g:Ś{&¾ÆQ-ōh7lĒ–Ž:»ĄŁŲ¹ę‰‘LŒ9’‰'rŲa‡µłĄžNųłēŸ?~<ļ½÷ž×ī0 ø•„ØŒ- ­éų’O#’ī|’Æ&“žŃĖĢ‚|Ua©a0ģ2~ƒ·ē² oaÉÓwŃó§™ü˜{ʇcOÜäüy\YUÅĮ–ĮBaÕą{ĀE,M$’ žw[ IDAT_~@ÖGSłJJŗ±Ģ&^vĻ6äš¢ī ‹/āŖ’„ū»knY?'Ōß4ĻŽĄĖń#5ł¦A/)I …£ŽąØ‘{±”9+ž-!ž‰¤?ń\GÉ’‹ĢüÅ (-bĻUC9¬`;ŗČf65 f#³Ć*5¾?„uāŪŽƒł³KJ„SU‘ī÷gč(/D¹”œŚō””Ųw¬*컘C@vƒū£ rGvD>ĘJ»'œ­V9Ń nĀÕ”āÕé“+ŠĪXGÜÓ0“•@YćÆŻŖČ€dÕ·»ÆŅæÜ_ėšpV_¦y›ą5!Č£Yš Ųā²!>ŁńĀKØ \Žt‰ā€[Hܗ( (*Ņ9¦øĄņ=ūæüĒcQ¹@F–M’·Dōī—Ż˜šššU·Ö^Õ/,Ł–‘-M€P(ÜūXÜqŸŗNó©„€Ęˆ­aøx§łÅC¦¦ŻpĒą™tŸļ%Ăõ…€ęŠŠø Ė©/œĮ!å•\ŒEwEįēĢ\œ¹žŸöŹf×¢">RU¦½2óNƽ¦ÉŲ¹ÕƒžœˆžŌD^—’³³õF&¾ohŚń÷Ę?]pƒżw{sŻwߝ‰'2zōč6Ų֌yóęqóĶ7óę›o"½ļŽ®[‘ŻRńw#’--ówÉĮģōQzżóüšŲ‡›üWźŽć4·D+¹8=“«=«Ŗø;Ģ:JćĪ ĒóŲC7rk4¹Į0\ż·:ē:+’לĪĖFœŃ€å šŚ¾Ē1~ĻC(q_Ē™÷Ä¢ˆ[.į¶X„żū įüS®`ŽÖ²źoØõ’^¾ƒÓ‹óķGĄ gšŅGóŠ€<,Ųü@Ōė4ŸųW™vˆsCÄß G)ZAZž2z•¬cĒ2½ó†1¬¤?aŁ ’}ć Ä”Ćļ;K«"&ŠĖż!~ŹģĀś±,·7„¦ŠL$d–…˜ *ąČ/ ± ļS¹@Ć.OŲūūh¹åꇒW•v°³R©iĀŖ!ü®'SŌB˜q©eūµ«øß² jüŲg0’Y:Ÿ·€ą~cŁqŸ£)qČ,‚xšFö-+e—žŪņÖø³$qÕlāļŒ{Ķr|+×¹/e©rżŪrÕæ©Äą•;8³(Ÿėœ×šĘ¢ē˜@ØńEōšKü“…ł7ę\°E€’—ѹl%ƒ#%ģXdXŃś” ĖjŽó(°²ž@f.ÄŅŖˆ (WtÖi~3™—Õ…?r{‘—Ł é‘óš¼Å•„<—l!%–­Ŗgb'Į6šųč^Øæz˜HŸźŖVØŗ½Jn%|¾%QÓ?Ł(ųH Æ¤ˆ¶5’óBOź›RJsōœ¬›{’ź¬×¼æĘ ·rØ"G„Ä*E©1¦4P®Ļ M¼„”© BA¢Hąj:±ū“’ˆ/=œ7v݊ųåīS>ųFģj’lYšćl˜:Žzyó“kU…3/‚%‹`ł›ōĒb›wLĶEz&}:Æ M¢¢ŁĒV {õC©čC„4’Rc«1½oEа°ā¤ēpFĻߎ]źßZ)‘“ŗū7µpč z¬ZĢW(,=éBŽ|ńAŖv=Œ9Ÿ“§łøī»(÷ķ¦3É0ø ”Į±ŽQ`Y ’>Źc_»ŠŽæŚoŒnvõŚŁ³gO.¾ųbN?żt:uźŌ¶#ŪBQYYÉŌ©Syąųå—_’¶øx‘ęUżnS““’śN’—ĀŽ…ėxš ĮŅķ÷ꡓÆ`cŁpÕ’qS“Š+”¤wąŖ{^cŖŪģļŅćx4c\z&WßõOżņ-ąņŖ žų„ Ļēēżh„³ĆéÜ9ń ī…Ś4€T.’P—üĒ«ŻŅVż ÷wĆ_ݾŸAē™ņ\n'žĪ[ĒõR’‘Ū… §]Å+^}ÕĖ& ž ‘~–ó9ÄPāEčÅėɈ¬„{ŁFĘŹŲ֌ѷ¢ŻĖ»‘YÕ_4ĖFX ńXj|Åą/@†ÖBh V ˆ”P¦Øäk>Vči,ĢĢęϬī¬õ $&žhųēŒé½8­„;’^bÆųēŃ:+ź v…ƒ¬ä‡‰5xµ’ž]³ĀŸ„稵:T¾F7Š5¾/-šµ,›ģŁĮ`s‡|gcæOģümų„Į=ÓŽļ> °AųEg×JŗY%zV–s„” ÆŽS5ŽĪČO™Ŗ•4­ŽŠ©”Ź ėiŚ©BŠĀÆĮ,å-M³*’]«)pH»# F¼RˆŠ*źD©4Ų§GQ„üą­’į?Ļ.{XŹŗӂŠ!§ži‘*ųō}˜6¾œ¾eåŃomŠżĢ:g§ūõEĘM ŠąÆ}J”ZĘX!dEØčĆCūĢ?āĻæOĖ>śY)ōAYī‹,ūĻ€Yżkņ4·4l!`9Ž"ĄEG‘ńÕūĢJ÷=‚ƒy׎ˆŪ=“Ń„„¼ŸŽ}Ŗ*8Јq}0ȉ3+yŪŻG»ŠŽŚ€Ō8{bčY?×ēóqŠAqŚi§qÜqĒ”Ŗ­ĖŗaĮ‚L™2…§Ÿ~š‚‚‚d‡­ī'i@ņ–…*łoØĢĄµĒrli1“E(ü|üi¶÷X*ßgį›r#WFl@Š|¼µ’Ń\qĢé6-¹ēj†.Ļ×BaéųĒŲ-£ƒ=izų6†¬˜Ļ}¦ĮHģĢj]ŠN=—ļF$Z›üoīU’Ÿæ¢Ó‚o9R˜„ząÓCDZ *ŽŖjČēļęŌ‚‹Ć’Żf’¢“lTQ‘1×ēųAyįž™čyņRlo‚͉0¶ščA?¾L{®Ūö”Į „– kõ³’cQ+»t£|ZڟXØŸåtRoõā­Ń +·¢TŽOuŽo „\ī \¢”^cs" TSQ+ĖŽ _€B•õ„†T|ŁWMą-)d“ ]ā@MśKšźoŽ÷e]>x£š9Ė”u¤„̰гņ¹ Ó“‰’ššį›šĘK°š÷&ö”P0ź’8xč.vyMó ū›)`õž«Ī0|=īšU-ł×63¼@ņ²ĻJŪ8č”PBGRęß6xf§Üē·†/@¢µ¾­)ŒpĮą¼žņ·ä;Ū‡ūoÄ8G÷s[<Źżz€ógWń\āx ]hĒ? ķ@ĆĄ!Ą•Ųµ =Ń«W/N8įʎĖȑžzĮßK—.eźŌ©¼śź«üśk½4p7ęc’—ŁJˆ?““HNž\ygWUp?€Ŗńõi7süŽūužŻw>;mXĘŅb€lČķĘÅŸ°Ćīžs oūåvęÄėā“H5Y/+FyųJN-/b¢”vŚZćÆ|˜Ē½Ž‡›¹5†ü77äæ)«ž- ÷ķŽ/\Ēx)kNµr;qŪiWó¢sL¤õɛyۈ30œĮKēēęľ7'ńw“~½ŗCwŸńŠˆ£T”ā+/ \žGv¬˜ÜŹr:›:š9Ņ SJ‚–‰OŲ傸¢R©(”©:Z€ü@˜ ¾46¦ēPźLYz&Q©c9ė ‰į󪢋gāń{«ūx¾ ‰m¤·)C¤3!žÖAĪzķ§żĖ2īīŲß·AweŒbZłĘV+ń‹’Ž|śüā[“£™ńxĻ]Ņž„©)¾K ¬ Lƒć“ķdČóĆauQāö¢`ż._Œˆtõ6BčJ¼č‰ž3³Ē»}œ‡ēŸ;­<5īļq›Æģ×S{’¼ćŒDrßVꀭ!$Žs;O)Mv×|Üü]”I‰Ē8x2ź­ēr„apž,õ¹gz9ūGµ‹ķų”]hvÄʐ"‹³’žŒ3†Ć?œŻvŪ ĶcUcküyó˜>}:Ó¦Mcīܔž)Ÿc’éle„OŪÉĆäl³æ Ē1Ž õ×}¼vżkœp)ż2вųk‚/>Č-±gb_Sśƒ<~öÕÜüśÓģ±a5oh3nžŹńīšÄiĄ«Ńó—¹L2ā ė/ŗ“r»b“uČ’¦\õ÷ ÷÷ö_½„ĒK÷ń“iŅĶ2éČn}øtÜÅLĄļ>Ī®żĪĄ¶Ē8Ęv3vĀżŪ’ų{­öė¾śż%’ńøD±,„,C­Œą‹ØŚH8!dÄ`¢c” ‰bŁ÷CՉūt¢z˜*_åĮ ŖTxzF\·Ė£%#żĪϟXęn‹,딤oØ­Āčs€.Ž»„…ń{šįķ:‡?Ėī«•4aYĀ”ŖņJń†³Öč±S=Oü¼ŻŚ*PŽŚč1Ļ·fxIڽG¦ż’ŃE÷Š^®AńFėQi2(Ł~ŸGĀ”7ŻŪLK •ęļ€w9L)‘™ÄQ~E)O¤ģå„Ö¾ń*9{­P&3EŸ§'A‚@ąSź 5ē7FˆĒ±,Äcw¬¹©“Äōt)>ī$xä„śŪ„¬Kś…#nóż0>yf~Ń-¶NĻęCz6÷œx «.RŽ!@*©I¢ā:²©)ėLČ-pĆ' vfdNY;0ÆŪ«¬x—¬E—®Šśä¾¹)­U&°9"Ąs÷ ßs€€¦s<Ę5?&¾ vÕxŹ49QQyIŗe1N׳Ļ'1žtŽÕ  1L+™ ģ¶Ŗ9s;¶^“ ĶCgą ģ‚É8YYYŒ=šC9„Q£FŃÆ_æ¶_‹‘——Ē×_ĶĒĢōéÓY³fMC§l¦OƒwI•-’¤3®–’H-“łO$žŠ<ņ_”#*Ė7žĀĆń§ųƒ<4ń]n›ügŗĪl\ĖĆRŅ@QXŲo;Ī\¾€» ƒ½ś gŸÓ®fašėG˜t ’‡D»ä^¦nJņßąŖ?x’’Ö2łūāE†v<æ?8ž7-“NŪä¬N`Ńŗ•Ž|‚ū¢ö‚’QĒrųŽ{ֆ8>z#D*9D÷1ēĀ[8Ķ‹ųCræ9ˆæ©xō·±,;EĄØ“…tŠi i)Ha"ż R a™ ’¤ź°]’Ÿ6ćOĘõō”ķMō’ędå)+ö[Ÿyg÷ķĖ‚YjDQ„q©L.ÜpĮzl¬ēI[øŠmžžæż†“gūŒ ĻÉģé+IeąW’o=lYl›læī攓J|ŽX„čVQf¾jxtåō`Č6(u (Ȃõę HŃŻó$AaN®>ÖR,’Y$jÆć-ų»ü že½Dēļ_}ņŚŃ ’]ėņ›ąŖ"e}²_óāūJ‹aöWšåĒšūĻv’tč~fž|gūüµmŽŠĄÆ`yi*H– ²{(‹÷\üŖ½$²²ĆŹ{öĢZš_›Ü§(čvŚZD€Ŗ$"Ą^Ų„(Ÿ™ŖŹä÷r~ļČ! ½D€CŗÓoćZžŠż\>;Ā#e ņq^<Ī}ĮtF}XŹēŲQ›RhŚŃFšTĒŪŃ ņ€»°«ģ‡M|=³D‹‹‹™6mgŸ}6żū÷§[·nŒ3†x€Ł³gSV¶¹ 5×"‹ńóĻ?óōÓOsę™g2pą@ŗtéĀŲ±cyę™gR‘’š6ßķ \Åߜü'āŸJžB½’~”K4¢U\|óq\”Hž&>ĮēŸĄn>Ÿżœ“,/łC¼˜«’ä\/ņÓ—Üƛ—ÜĖTĀö\„)ä?TŻ Ńlņ°›G“”üG%Jāö·ąą…?ńĘ£·rŸgHv';ątķEä˜s¹\UY"%™ßMēZ÷¹#÷į.!ˆÄcģņś굟ļEä+$J…DńQŸ¬';Ē KE8”žńÖ}v‘gŸ³ßTuČÜÕ°I¼¦cł˜įlāé¹ÄBiăYDCŁDĀŁDҳˆ¦åSs1dK©ž”&[ńwČæeŁā‚a Ģ‚įIÉæAŻŌ¶Ą:’Ś¢–t“z­-‹Ž(YodÄ£Rµ,) C*Š‘ĀHuKx²§ƒ+.±*KWbĶ€dMQäĻ)®"ń³†m6ā4_ ĀöRKrѰ_ä%žŹģ¤äß>/»²Źźę¼L<߉õ“&"±¹»±,)ź5ETÅR4aT…€Ŗ(!Møū¶L)ÜķżWņwY»"z^ŠĻ‡>żėo3M0Śfø›³Ļ¬»ßē‡=÷‡kn…ŪeKųیPņ8œ+ŅżXīźžfõóĮŌ¦Vū|H|FD-ĶK¬uŽMH5Ó5„įņĄ‰Ē‰Ļ.CC,Żł§ė¤ģ ”āīŻUÜē¢ °Sޜg`ŸN…ŻŅØ-µ×åVŻæāXįŽŌˆTŁu£®²æ‘ŹŗĒTźæŽčT–#²ŽoU)‚ ŹżÕ©€%ˆĪ®cJ E¾ŗżęƳ_—ׯī̇ŒT•w&½Ā…½ŲωIŹ+W± ‚i| ö¼ģ“OĮgŃJNw;£‘ó>7Ž’!Uj;ŚŃšų‡ßĀ[ ĢNĒŽ 8;ß=iÖčŗuėxżõ×¹ōŅKŁc=ČĢ̤’žsĢ1ÜpĆ <÷Üs|łå—,[¶ £-y„”¬]»–o¾ł†_|‘[o½•qćĘ1tčPĀį0#FŒąÜsĻeņäÉ,^¼8UWqģŠž3«ßóQĄėŲbĄV‹Ę’÷M|k&’}Ø%’yˆ¦’²”² ѹ7ę±—qŽŖņ@e·L:ƒ’óēAĒQzē‹œŸ™ĖBP"%ʊøU(¬ŒEūŃ4;ß6AÄ4»%öį•ļ× åūū4„«Ož½&P!¼óżņ_­`õWų ‘ņļĒ^ų=ņx¾TU–E*9 9=ųĶ}\÷>Tm;‚’fU%‡æó»;ūöŲu™Ł< °nW­^fæmÓD|’)=‰|k›ō{Ø%żžÄߟ«9ćpÅ1ņK¼~*āļ~ĖBØBhšā÷ib¹4ŽHś7Šö5J ĄÓ’¤‚XŁ)¾wńšx—h™éq©•ŠĻR’ūŖl Uj“Õ‹TCA į“RQ]–/y §«ÓŽ’ŒŖó®ĻÆ­“,Uø›"SŃÄÉ®Æųx]1,E–¢ 4 4 E( >t}ŖeiHEC*>EŠŽB@C¢@²žŻ¢€aXJĢ§Ø†#54]C~’”¬ėü¹eći`×g@Ż×uHµ`¢ `z ®¶1ßöųĆź;ˆ’læ…Ī=?Qp Īv/ĄŒ#„…HÜī\Ļ ½Zpė~†­Žó×C Ē T£ō5!­RŌŠAÅļū(Ä[519õDØ1ØćƐ(@­@ļ R…šU!R‰` Ž(Æ»æŖ“śu+Šß•ņń{ 9įą1uļčID@JjܼÓAōŪž3ūž'<£s·Ä9¢{ž˜ja©]hG[ ż—lÓ ģƒmx$_LMÓčŌ©999ää䐛›Kvv6”Pæß~Üdee!„ ““Ó41 ƒ²²2ŹŹŹ(((`Ɔ 5’G£Ķöį[ƒMś§Ÿ±ł Lµ*Z+ļk"’ė\äæHÆ»æ±äß½’ĆɞłK‹m€x§œ8įq¾pö»' 1ķōųķ;2ŒZ“®“ n»ī~h«Ķ5śkźŖæWø?Ōų~õ ö^ž'Ļōȹ’w_'žóÄDn¬(åUeٹWsTF&qSE¬[MąÕ‡ųĄ2éJćŻ3’Ėu³>dŠosx,œĮō³ÆåNSED Dk…śė€/”³Ę„ł»į%@$»nb’‰pÆō»· MSÜ.,%†ōM±"Z®ynń-fó8—ØŲĄÅdü„"ŗļ÷uü>§ÆæˆT¦o(8ä÷œŠ+<ūZ‹Ę°9‘¢ ą Ļėzăļuß><³ŪĄĄt%%4¢fny©u”eÉ=B‚Uod樯Z2IšV\hÅűėd‚ ¢0+#[æ] ¢uõ/IQ^üQĖb W—B‘k²:śĪØS¢/!œ_CX$­©gą:ŠPŚ€…ką ÷­|4µś6tģoy[]­Ųqü7K*Æüż‘™Ė½g]a›Ņj®ļ͉ŲwĻ“šā ŠRƒĄĀ‘“ūTv;õ#„’.¬ŠéŻ?ėxNe’»»öż×S(¾¤”Q=²ģš_õÕ9§Q) ū—ŠŅ ÉŹ¶4Ą īt€ż²Ł­¬ˆÆƒAĘ̬ä÷qM©Šn ŲŽ­ķ@Ū 7vŖĄžÕm0[ögæ˜||uW#’NŲ\¦[ ł//Eä©Č 0Šņę½t›;ƒ„¤»”÷đ’½‡_É?Ų+Ńā±+9µøˆ[‘…`ży·0²KÆjšŲLņß—’–ż5%×’›·čætĒZ&飝˜5ī|>s÷ūčÜ©äPŻĒĻēMą$wn)ĄŅ?H÷Y¦[¹Y¹Üö5<įģ{ū9v[2Ÿg°Ė3J‹L@é֗«?7ń÷ØŅī>=ټ¼¼ą¬ō×9WAųĶ󼆱ćÆVü1ĻĪ6Ņöį’ntĆ£Ų‘‡>źÕ5ōN÷aĮe>!äkK†ĻčZāķh]u³Ū7Rųģ0-“"7ģ’°ūˆš7]ś6JM4j=Ł’ų̘•®é¢Pm@4pPUnm™;‰ŌüźÆĮ4å7Åņž\WTČ”‘Jc ś”ž€ø!œ„5肛Ÿ¢˜õHæK 0ž‡ä‚€4OL\>”¬ŲŲ·”ė¦gĄ¢źäÄdŽ’Ķ®æ6¬oĀš7‚?Ą×g]Ļæōź{³j"µ„ļ*Bż²GMńh¬A [Øģ|DØp×7ŽCųaÅgżxźņ_+ˆgX»ó+wZjś-ŗaR/;’Ļénćn_ „ŽHĻ’ąćnóϳļ-šh  wzŻĻ©%"Ąøįtžk«t?’™©­8ōķG(…yˆŪ/䘃OåŻĖŸØķ:Ŗ]hĒVˆ-™„ž‘ģ †U·m؍lK,~Ē&łæß+6Ć8Śķäæåä߯!üµŪ”Ėš”dAžö#8䌫Y6łwBŻKÆOŽÅąæ~ćQĖbHæm9ä“k™×RņߔU=±l_Œžę¼Oāõä|2ó4×JO"ń/Z…’ķ§ø±Ŗœ1øBvż¾:ę\.éŽĒ®Śžć×tžś]>’’pĒīÜpźåuēšxńŽ^»ŅĪūßė`ŽŲå@Ö8$zʽœUø+!åŻpĆŃgŪ"ƒ óÆłŁ•ߟĢŲÆ1«żP{~…‰>G28śUZō0,IP,":au6,&Y‚˜¢"Ż+ƉÄßRģ0’dUWtŻŽ‹¾¢āœ|Ģs<ZBU¶6GūÕ}~š- ?Ū{ĒąožL5ŗqI“óĖŻóŸ2uéÆw° ,bó*Ą@<£ō*ĮˆiįE™]}öŚ.<'·‡ÆHk„Š’„øT&ƒõ޵„¬Ŗ2·­Œ[’2-† BįOæĘÓĮ ž«ā¬˜¶ąi]%ą56ĆØó^ŸAąłI+ĻŲ°*vFc®³żųäĒZĒ’xŠžTÕÜQėVĆM—6’½oĶPņöĆ1Cv¢NqDµzÕ¾5£šbבy?$õĢc„”5/Ńé—Sė”ĘŌ äŠŃ+N‡zŽäßųõ‰]~õƒ³oÕE·™zÖY€%Ģņwró_¹¹Ó¼Ł6Øįæ—pŲ`ŗÆ\ÄK½rņ‡ Y¶°÷¤Ķś€BĶĒÕßE¹`Ÿ ©*ēj6H“ƒińQ3ß+“‹ķŲśŠ.l9żŒ+9‰ IDAT¾ŲS@ē’ŽąŲ£CÓ¦ m96į_^ŻžJ[<ņ­[2łß ;G-Łž-•ü;˜x!{å­dą Ėö<„C;‡/ņļl[¹ßĒ/2ōōėųÅŁ—,ßߣÖäæ¹!’`ętŸó1KI(3‡;Ļŗ§Ą;ä’¹ø·Ŗ’£„BaZ:oY&é•-%~€YēŽÄ¹Īj’swsfQ×…¢ĆĒqČĄ(Ö „3ÓD<:žÉ±»‚|yžźŌ‚’ųU†Óc×ŃĢģŃÆ¾I*ņæ)ˆæsīAęœ8‡–Hö‹Ā0YēO!‰ł$æg™|½CŒō"³Z °ۃĄJBüu€Mü£Õc~¶¬ģī dżśš&°°1#Ś„PHÖi‘V<|IhJŅ¾ķÜÓ_”·*Śį _Žm„Y¦‡Ķv€§5m Hb„—½T³ų#»—’Ż^Ć3~Źčģ+×ŌĘE4Ķ ’ RH?&ED‰ÄhĄB«½¾ākܤ]±„“”śĒŗĒäų½’Ņś=Ÿ[~3ōo:śx앦;ž§>}Žš(+ų€µĶöœzäĢ04dā2›GT‹kXr¦•Žo" }eæ_Ųé‹ķßļRÅŪü7«ÓŠ»k„*€ ;}2,’5ā0©u8Y %W K}\8ą›”ŸõD*@é6Z[9ąÅõśė”'Cė?µ†ŖB@k‰Ļ݃~ļYØ(̘gp¶³oߎl·q#?ƒ7³’÷Ęö§ėŅ„ü ųĆśæ¾øŅ„żO»ŠŽVE»°õ!ūįŸN]Ÿ!Gvī„%lžBP[&6a¹æ’ņļåōļ R‰øķ"Ž*Č·Ćэ_Ž9c†@EPø5»¦cöēÕGsņż[;äæ”\’^fąüŁLšųč_wsq"ń÷_¼Źą_ēšž”ģŗ/Ēļq$+>}!æ’Ąd)ÉģĖŻg^Ė3՟ŸśäͼmÄNcźE7rS¢³’—o3ą§Y¼h}pį1ē2lƒædŽk]õoLØSˆ’,‹ LĪŖ(eĖģéįß¶Ōēw‘b”éC‚z½ūœCü£®÷lYRØ&ā±ŖņWāBöŖ×y9[FģS<„‘ōµjt§ļĀowü¬Ū65å„fšć²üs–÷ŒźŁO°t“Ž49’¼€¾_ūcŻVūēuģx·Ļéæ2“ˆ"æBßR4ÅßQ(ČTŃŠL2)w  ŗ”Ajq ™ 0÷ėĀ^Ÿ½µńĖ’aÆó¼pÉõp儺«žń+ü)ź}Ž‹4vdårļY×Öփ›Ų« 9ūMPņų½„€T"Ą†‘ļÉ=M”©±OużØćÄÄc½„Ÿėw°Śū’œĀ%;>~„eƒ”ńōāOīõĆ!óz)+w)¾Cź™g +ņŐ/‚'8}%  2ŗ™D€å@g`ĻŽģY¼‘5÷q·ĻI¼"”ėĒ3ōĪ©Tž»YæĢā)é/„(,øtć_†Ńš"@ā—•ThŚŃŹhưõ”›äÆÄžŽ-T’¼“z_ķä?)6ł_“5’’lšEž®„wÓ;Ųåź,ƒŽĀäÕæŲ”ą¾ė¹źŗ³øm¾‹ VŌöŃ܍%’ŗŠh łwžĖāģNÜģšįŠ=øĒ‹üū5ĖŁ ę3‡üŒ>=śr- ‹ øč—ŁäB˜}·e +Ź9ž½×ź–«3MÄ>G²$=‹ēV.挏(Z2ņߐ³2W7łwöÕsó‡zŽžŽ“’ ¹Oƹc®ÉŌJ8“„ä@‚VīcŸ¹óéóī?K•^Uč†aŸzHĒņė"ź×…Cž-K ՒB×t,E²“gē[J“$戇,=·r̈2@šXœ#¬$÷ś ¶\ÜÖČ")łW Č^©ET]”źµBŖĀjKņvVB²–i!LC*‰­Ę„_JÅŻjNŌŌŚ–pMSQbÆfÅ–"HÅi–…X³¢2ż‹÷6ŽŚņŠ«oĖ’Żū*Ėa领ÆŪP…!IFO›Āąė“.įÆ{¼¦ÖFgżģ0U„įŗē¦Ŗą.Ž•’U 0 „č5@˜Usr?y‡(FŠ*`?/c®g„óK•YšZEÆĻ:Ü(ĢŹOBÆČÜżŒš“\֍ųėh©gžXzdYQÄ«B€_O]!Ą©©Ė&«°¢¬.ŸÉ_‡čäyTų&ŸoŅÓcÄ8ūķÉä­^Āb +· ĒÜ9•ŹqĆéüĖ,>“Š#» ū÷ģÉĮXų?|^%SĮĖzZйf2“WhGk£]hĒ? ͹‰¶łoč”±E’šGžĮĪ÷æöž †¹Ąˆ3źŁ{ųäŗ³ø§Ŗ‚KcĘ}:¾@‹ĶžšRāOH#Iy%ē/ņ/F›ó>='€§_ĖógßĪ%»QKģŅ~ĪdĻ”öbø’°ųų×|2 6°?€”žČN`ēłu?‡ŅxP’ĘųH%j"‘?ģdõł²’\£ū°šZŅoS€©Gį­J» ʦ˜øˆ2æÜóėĢŲä*¢§T)aM«Š×’0Ė’BU4”k:hÕŚC„Ō„ ~Ī78"@¢ąüŽÕ×ČrQ Ex”äė8cŪ©‚OĒd-½õ_l… ĒĶ„ŒŁ÷K¤Õ)É[+Oöū€/xØėĻC¾LSsʶµš]) ߝa0ē„§sōa'²ĖWk™wĢz/ł/€@ƞŒśd‹Ž\ĮŖ,Ž<ģTŠöq\ŖhĪ,ķ†[˜˜¢ļv ­‰v ’4'ļæ1ä?CžįļGžĮž\ś·ūöJµe±m,Āé€LćŃ’Ćā¶2ū įļoÄłÆY¹1źš~’=Ÿ¹™7ē~ʔåÖ\CED]}žõ+™ÆŽĮéīÉ]L¢Ól£”h”aĪöWęą÷'óae9Ēk: ¶ß…ćĒż›Ż¹ž{ƽBPjÄŁöÕĒ81ń=fō$zĪx.>h æŗ··%ń÷Q—ųēKOŹe­d‚eöZ–B`U–uŽėjå«V]#ÅRG„ZCüÅBČØTeTŖUX’ż­m)–IĘaźĖ$`FePTIĶÆB8K/ļ½<8'éŲu’ęā·:Dõµ’­ŲJčö›nhŖ(õ• įtµBźHiIįÕāV59×4Ļ&uU4ŌP5j–¢ KQ…%„ˆU7·8*bĄ-x‰–uš—(`UÆü×ZŻöüƒ«Ī®(5vmĪWҳw5yw‘żz„ßl¼ 0’×†ÆŁÅ&ū}śŪÄ?Ė5 ;"@Óģ’Ūfæ”\1pDŻ¢šĪź»{[K£ ¾, q[Īw’”¶äö|·Ø­Ēŗ‡°jŌ_'.?$öõ²Ć䊿ŽˆĶ\8jķā]ö÷ƒż .0!×R3ŽPāyŸ;Ļט†(ėt\°¢ĆŃOKDš"#ßvæÓ]åA‡Üoģśļō¼mīŹI¶4ąåoÉ’±œ—æ+eśŻ/QqPś¬YŹ—@Å6ĆؒͬrŽæf,”ūÆbZ$Ā ēīCVSE€D$Ī-ŪE€v“5Ś€vü#Š\ÓæDx‘’)n֍!’©’·fņ@Nx”«Āé܅Ü ¦sßæļāv‡ü‡©Ožć"ł74DcÉsCž¹TnŹ,“ˤĻō¹¼]ž?{w ó¹aņ} 6ł±;ßq#ĪąWäˆGn䑵ĖxPJŅ;ä2é_71ꊒć!QܓĒa»Pб«ķF\øž’üöƒ"`ŖˆxŠpĶ@}ā-'žī뮌“1ĶąŃ 8"Łšƒßś…|gß»‘żłė|$MöäĻ3Y·›Ÿ›"4” hŚŃ hŚń·Gk:ž'bĘ&,÷×ņŸˆ>l9äßĶ®€{ϼž’¾‹žW?ĀaĖ!’ž‹cˆdäæ)łžĶ łw&W¦¼#%=·į*ĄŖ*gÜ«s {Ņēz÷$š‘ÅT€¼ÕÜōŻĢZŹ5p'Šƒ!Ū,pŻ īVr īć»]ąČÓ®ā™4V½ cõ„sĢłLÓ}ü.%és¾ąŒ ‰byLS­ś'#žį皦‰XÆ~žˆĮŽ^c؉]{d-v’?°Ż÷Væ^ŒķrR@£mŻ#AŁ}V—Ŗ[—-‰ )_k¦É ©4 §:@ĢB˜q¤°¼ BĖ Z I8ÆHP Cj2fiŖ&,_X¦ekśĶĪQĢ1 9Ų}S@Ż€ÉQ č1×g PYĢŌ …&LĖ#Ēž&4Å~ߤjD‚$ N³=\+ųɄ$# ()•d‚Ą÷_ō[škéi¦4իƽŠīĪłÆGś“†‡ °j9”7g$u”(Ó …m·‡ģŽö-”1éVS[€™'’Ē÷Œ¦śjŸIī±H2i^4@²”€Dģč·‚Ÿékų»ż@‰o|&żŪ±ƒ;žqѽjł5‘Q™9ņ„{ÆzKjįC²<£šŻKedcÜ²l÷%'ZZĘ8Ą –’r~·—ēQQ÷9æzׄ—Z"pØDä*BŌ™ø±%Š/=D–” ńx䩏){~v\ozΟà  kvFž`±“īēJiŅméÄę¶”`µvlŻhŚńESÉk;ž7…ü'ƒ{õæ[łO£vRą<üc¢÷ ¢¹]«é\#ČæūZŽŁ_‹ņżi\Čæ›ü;ŪŽ;ŸŁįL&¬_Ęķ|CŌĶē<ż2žŠt~—’ŒŁq‹{,CvćaŖit0ÄūŽĀūŒfUā$`õ²Ś4ŻµĶܜՉ’¹ˆ›’ēļØuļoMāļV ¾wLīŪģ’Ćņ°Iž*l«Ņ(޳™P¬Ē¶9]…ķjߢ!™ū]Čuk—YŪÄ ”a Ä,DÄ@±,„j!TKxÓog€¶G’q蕵_P„Ō€€.Ģ9ZQÓ7æĖB=ßūĢjd½hQżśzЀޤ$’Ż~öÉ@™Ńte}0K_‘‘«k„Uč\"©öj² BA2O÷1Ʉ:B†ƒdĀ@µ8Pg¬B EH±zEEęWŸå—VćJez”WßRo&žT‚€Q_X0ƹ#± Cß°ÓīŠo żŗ±ŃNk+(*yū«]Gu TMõ GhI4€;% ±Ńīž›ą%D»}BÊ-čžł ‰™łÓŹż‹-ķńeß²–Ür2ö»T»Ņ_¾šŅsĒ,vžŃy;½³­ģ{;€ŻpOvś¶¦ćj`ķš_÷7µŽWč±U×ō™³×ĻĪ!Üsж¦|MĻĒ„h·īžÉ~£z0dÕ*¾b}‡°ļ'ėX 0;Ā#ß\ŠoHuU‚VÜH*“G“£…hŚń·F²›äÖFžśļ€¶&’±ˆŻÜ«nņŸx¾;äæ1äZ'ßߣ”*äßk"•(ǜýšĪŸŅ"ēŪøŻmō“(j¹ŻĪ\ƒ 0ź„’ńĪłūĪņō¶€PUÅAŸMc{ÆU’Ļß`šŌĒųģ§ģ ˆ©"ö;Ž'_γĮpݵš†Āż”–ą‡i}āļ oK®ŠÉ²] °Wū7’Ōä.)œˆ„Ųµķ •é²Ė÷Ż*/Z¹8Ö§8Ļ Å£RÕĄŽŠ4ü¦Xēy¢ćž¶9”“4!P"¤Kӄ”YHŒB¹žŠ¬Īž‡ē¤ÆWS×2HĒ.Ń—Õ cķPŻW¾ōékUŗĢ÷ŠF‘?¬.M勞Ń2“ˆš!rm"w#ES,)šŚōź¦Rq·ÄhƐ}G8hHH„wõ— Ō,EKG²_~ķ#Ö²˜ž}©ēųļ)$qüOžlFųæ¢Ų”ż;ī#÷€®=@ˆ¦GljćĮ˜ƒ†é’8"P¬Ŗ>Q!Qœū^¢ąyr 1щŚ_SR’Ž£śĮ&µP_Õ(żFF kVöćq„4c؝ŌXž£=æņ”³æ¢ć)i‘œCŸV՗½f}ź>××õ›Ņ+Žī1@Q¬ŅŗĻķżry˜#@ݹE[‹?G¹++—c¶μ=;²gž¾@᯽įĄ©æSóÜøņXĀ»øhvÕxdt„Ŗō4£‰"@{e€v“Ś€vüm±9’7ł÷»Č’_…u’®Ū‚üCŻPĄXÄvnˆü;ŪZ‹ü·$ßźOŽÜF™Ż‰ Ų‘+« žžĻLbŌęśģ’,īĆƒÖrķ3j'ńcĻęAMē$¾?~ā”ļŠæfL&ā—Łtžm.÷J‹ŖŠÕšįž‹oIŽā5Ž3]&k…Žz0€åŲ+ł­±Ž[,”NŁH/vµĶDŽ/Yļ*ćŠn)ŖŠd(®¬ņž!%ŽĀ½_;õsāQ&¦e±MQ³®i@HD{e€vln“’ā“ćo‰Måų?£…åžžIäßėüMMžCž”eä?q[šÄœ]”Ļ5BPµĖž½ēa¬p©D}ź^ŽĒŲĮ`Öł9'¤!Mńż×t›łÆZ„ ’–ÉĖ™9üZ^BßŅBN±,rCi¼sę ¶Ł`"R’šŸŻÄß}LõvOā_ ƃd×ČSæmš†…mNX1`IėŚ· 6‰ĶH~ˆĆŲõ›ŠS½{śgfõńå2D\F„śéʒƒęwˆ\ķyRŠ¢ÓźčCRb»7‚‘¬øžkīĄą;=‡…’LĖŠ"`ēµGĖ-=YU·õ‹«ö(0¢{’>ŗŖ§LMFk`å@%vJFœZ±FĮž„šSėÖŁHNŖU ¶ż (ƒ„JDõ++Ņs|ßtœŪ”W0Ļ—®·1­«Ü”ČD’$Ø“a ( ÷”Xvˆ°s^²sņVW„½żŹź ‹ ŒQ ē_F ŅBÕĄˆ'÷°LÄÆĮš‘¶yŸaŌžwæNŲgÄ!žšŚˆĆOßĆŪÆ¦¾žб ōīŗTÆģĒī;é¾ź’ŪŅō/³ĪŸłoĶ'¬x,†¢Öż¾b±ŗĄRÕŚÄ%ÌI÷67T­īö( &ųu8Æ5W‘źcė§#U£ī¹šVæ/CÆ?–ȶ:õ½žm©hŻ…ż]«\ś4f¼Ü÷=Vjé‡#͵™óÆ94{å=sVZ~F<Ōū6 Ü8ćøĪs÷››ŲļŹŃeZjŚ!­™«Ż}ÕEkĮ¾„PVæqžÕż§¼%…>ĢYzŽ€YżßóźŽ1Dśću·BµÆCq¤SŠ!”†,LG0I¤E«Ćņ3‘y ĒōNÆk1Ū±+r9йOķuzW'„ĢąšGßå£]F՞³[••ń :tbä§yü°³Ā;B”xŽĮée)RōGyģ›–šzLĀ1]?OŅ·°’i·hG“ŠŠŽæ6”ć24†ü§Śß\ņßĒõóIž]+µM%’MqśoN¾²CEøÉ’’ßȘń2C®yęe<§ūųNJ‚?ĶdR¤²nąx „¹żž\#‘h„½^y€bÕ’#÷cŻ£9YÓY$%²bĪZ½„Š7r©e‘Īąµ“®ä¦Ä÷ŪŠŖ?øĀż›ēߥŠæs½D/GHųĢą¢¤äߥ&Ņ›‚üƒMZWcö$0}höU“:Ž?Rd„„©ŖhCH›'d’D‚46Ÿ@ZÕ+¾rA°D]”łt%¢)µłó& „#­³Æ ³³oA–”ĻßöÓąF_E#I®‚-¤tĮĪē ŖnŪToė‚ŠČƒ^)4=$ejLÕÕ Įt}A‡ž?3z† µ°^3öz%ń6a‹»ZTJÅŻ¼Lų¼P1 i(^T•šX ĀRŠÓ<Ņ>7oċ/¬øP޲‹rV“Dõæ Bѐ–ŽŖŃ4?šŽ°ce·žŽ!öĶ)ųē‚ä× †`Č08ōXŲs”ņo¹B÷S^pKpüWTņö¾Aó @÷łPU]Xfķļ…ĻēĆ+@S})£ÜÆ›b˜,%Ą½-1ĄT^)?&lH[óša”&’¶ń“mļ72·æ_j釆¾ńĖ Ó—ÜSą<[׏üpx<Ųk<€Y}{æ¹ūĶuWģX5jåY–š60|e?ŸŪ}įEkg¾3/0:õVWõ}ęi)ō„eJł‚…P?% -"Š|uū÷ŠpębsKłĄMž÷鏚²2¦**o •÷‹óy聫Ŗ› iŃ šęą…vSĄv“Ś€vüķģf˜Šü·Ōńæ1äA"nšZīo‹%’Õ³…ꔳórśO4ūkI¾?$_õ7 Äņ?H{~"×|üßżńĻTUT}?ģv0×Ai<Ęš’Ē…‰Ÿ×Ø#X–ÕÉ.ᗿޒ~’)=œ}#÷gĶ—0&§+·śĢÖuü7h§œq·ųµĮņM ÷otžæ‹ųC㈿ӟóóbInć5.$¶i_āņUkCb‹)®SŲÓź¶!fīZ¼Źź«°|£Ŗ„åŹBĻÉ$MŽ$½Cd/ѤPØŅ|J”RŖ¢†T¢Õaäžl$«OhuZ—Ą/Y1߂m§‡Š‚…J›Ļ C*CŽ Ėp±WTQč ©ftóĻĖčX«•Ō’”±ž µVDs…-”)a9-QPUjRDi…éī‘ågĪż¶čĆŌrźNĒį¬ģ!!BE‚ šĀõ+üČŹNbߘ€®ĮŅEõß{·ž°ļh8śŲnGZGlpöµ„ć?`øvŲŽ”bŸ”Š!kM½„Uõ‰ˆāSŻ÷fwZ@½Ī›hčlK–Š\_€ō_/[Óć³ō³²;eXę7ŃõĻØŃuužvtĶź~IĻó²"z!|ĀŖ˜Žć‹AOĘ\Ļā0°n÷Y»˜žŌŲŚ[{Ķ9»ęłļÖ ›w'jč ¤Œ„J~<µß/G.vśik “ŃĄĀ|n‚ænz”3Ē€’„ūxrļĒI“£žtŽŻ,•ŚSŚŃD“’Ā“ćo…æƒéß?ü;‡y‘_õ~/ņŸxlkēū;Ūę|HŸ¾äyˤ—”‚|:źHīŽvj"_y#Ö­ą^Ą4œ“?_œ}šØ2QŸĄ”xŒ|¾?ļ&ĪJ 5UDÄ@$†ŽCĖĆżė…śCJāߊ5ÜxÉāņR8Ék|ä<÷l¾$ż ėøHŻøć’Šs]‡ęf÷Ņ Ķ ©}QPtōļŻ#ē{ž ±SšhUd=“ļśf0žQ©-Ļģģūö¾;@’ŖZ’;÷VU§É»3»³a6X ’dAE²‚"šCžØEŌ‡> Åųęˆ"0šA2’ĆĀ’^¤[ IDAT– lĪ;i'O‡Ŗŗ÷üžØŖīźžīž°³Ė®ö§EļTŻŗUŻÓSUßwĪłĪ#Ķ'^Ŗ™buˈ‘e rŅZömĖ4t®M-čo·LŁjަĆÓ sŻ/ö3Š“ŹDĖ‹Q ‡$uEŖŒµ“#K&ĻæU;ÉźfyēĶĆGį‹NP® `ŗĻ¢ˆ86]xj‚ĄĻ=Ö>wɝ_“m1eh†@>é÷D€ÜkP@Įz¬Ņ. H§Į̘=øåoł©ö„RģĖns=ņĒĶžū޳ē.Ŗjü}Kģ—WrPfL©ż÷$'˟_ųå†ß›&…Ģńl(M,Ā×lŪ†*( )›Ķt8Ł©\Y@±’ æ,`Ìē£,iˆöXĀX^×l½‰ĻĻ;ʼnb8ł£ų–Ų”fŃŃŽń»ķG{f=ÅAMpķvĆ‚ SlUKė§E^h: ¶ŗ¾Ńźµ$iĻiؓ>¹,‚„Xė<ĒŃŅq“äŠB. į0[8“ämć” sn,\ p)'.…‚€WžĮ,ƽŠÕņ«ļ­łÉęõ™‹FQĮĄ#ō…ä?»µD6²ū’2ŠUoT!“6ĄZ‚µ•ćaĒ€ĆŽĪŗ˜=Ē ;ę‘ö"„映°·:žKIķ¼ įB›q‰ø ©AŽ“#żqÓ¦_‹•i b+ļk“Ž# ļ×#õ(&$ŚīlzķŌW‚{Ø3ń=1›ń 3;~\’҇—Ž7¾ūé’b=‚X÷Um’ó„µ­w%ĆŪ“éˆWŁńY× év’bī“Ón?7ģ­"@€b"@$Ž’t\žĪ.ŗóFļŠżĢ¬y6…æ„÷żó8Ē0š»¾xč¼żŠ¼+ĘR PA#EEØąŸ„Č1ŒÖōoø1o7łööņģšÓ”Ł0śØ€€ŽNĢĆĄ[“f•Ædßśfˆ«čĮœ÷—ßą¤`[šąwĮų£ŋÄÖuX8šØ!1<ā_HžK¶õĆŲ ž†œ‡ ¤uj iåĄ#M½E·ģ~ØņĒīiVé>5£æÓip–VĢ6PõDŸ(;€—–滳¤?¬ōśõjZ„#-Ń©’›£uf_¹»L+YŒ{*ɱ‚ vĘ«īæO–³;Śż¢BžK:żūoŠ{ÆA&Xō€R˜šwB5œ;ėB,łõ÷pKžß¶õųÖ+ĻbÅ;ŽFŪß~‡š¦cĆ1'cóQ‹pMo‰ćOÅŗĀżG’īųŸmń0ā¶~åZś;>ą)@2ōK–ņ¼ģÅŪkGÜ ÆG}ōOŅ1'£§„ŗŌ¤u[“ĮŹŌ5E:ē®=šŚĮƒćb~ €ē|?Ą6ä}®» ^†Aņ/BĖ‹% ź‹FÅęź&s[MƒLjÄ( !ėą:č›ĀɘŠõM²ĻŒk­*Ł×·=ÓŃßåĪuRjF}«9”f»QÅ2YÆÄ@“Bŗ^SŗFCY€kyæHĆ&HŪKńõ TµJ$ŗ$ƒ"(\!iPŌnĘå¦Dƒ¹zā”ȆŲ$«³¦ÖHiæTAæMŃ*.ʶƒö|ä·å+ōČūleī1©pė‚÷„ņCŲkV÷7>ś×¶/„’<§ÜćVĪńxrļ ”¼ķžŹœ`ĀóGpČ“KК uÄs‡€R6”Ėłé÷eBær‚ĄŽīųMÓĢß¼ē£uÆ''ŅŽćÄ* 2£`Ó4į8€ķ8B °Ä¦i©Œƒ¬7€eAn(c‘‚`²³ļʐ¹Źā ܇o€ą6£$(šžķ*Pą ÜŪ‚[’ ī…&ų÷°/iłłRŹI\»ś3ėSSĻCĖČĮÉÉøŃ9ńĶ4=qŠß óšæäT풐™¶ŸNyśŲ.Čņėž¶-øqzŗńäŪTÖķŅķż+“JB֟”͚uµ|óHJl½®šD€BO; {X)P&„=ŅIPą 4Aõ¾'@rŌPÄ`` Øj»7¾æ4)ä °©"ܰch¦ļĘ&€^īǽī]ņ$Äå§¢öهš3faIo'®8:†Ļ-NįÖĖNĄA̘JŅ+ˆ{'J7¬y E”;ē¹źp'@…ķ‡3ØāPA9TT¢ öiģ©’å’‹‘’ᢒ3QšüC€VņŸ{ƒŽK9ņÆ\Šówb’“Ļǚѐxóe4Üwž`Ģ9ēš"¼Zx~@®Öz[aŻņSüÅu0WJlŠ×ą‘\hXwł÷pŽhÓż³’Éß(‰xž!ē ½öe…ĶĘ62ź`õŠųK5Ó¬¤“ŁśfjęS±ŽOm?Ą^Pvn@+Ę'Ć”^[½’Ućf=åĘõFʌÉÕµĶÖS“L,8Ķź”Ā^ņE\ąY碒Zƒœ”²:œźžöä¾N{fŗWĶ“3j »\§5Ŗ“ꂇŹĶżéYs) IPZJ SvYQ±=Rkl¬dmJ4FŚ ę@$"œ!ēYęGŠįęÜUĀ@p¬‘Ń£5ÓżÜüŽ5+/cȲ=ūņÉ}8½?üšļ Ī(%ÄāĄ/ļčI@9×%(×{u‚R ×a8Jcp ]Ü /ųy yę~ĆĢ­ö¬ć?bUņłO~}ņ­HĪ”2ī;:Ž“#ņQ0o ‚K­Ź8ł&”rņĢü¢ŚęTĮWŁū{gaīOŚYY»ģ³gŌķø©Ļ“Ą™)§F7ĻūŪ½€y°t»oš÷bĆ×BĒŻŻĘ€±o\ @²6®°”7€C#øŹ¶qķ¤i8üń-xėŲ&,č饃†[\—įås>³Æžeī×S1¬`oB„ ‚}ūł/†Ń’mCēŻWÉæk€FBžĒŅęÆc¢æ»?yc1ī¾ļ÷8(W¬ŽæüŪ 1ēč‰Ęń¬_‰kŅÉ”T-Lž v2ģCŽĆI W)ĢčļĘeĢ0&ĶÄ c!’åZū9 1št’¹Ćó9¾¹~Ŗ1Ö²…ä¬bē †gĘ÷v‚$KoNV£ÖNéF7©cV\ŲµĶVŪ!Ū÷Ō¶Éā> xū™Č’ƒ Ŗ̆g08 łoZnbĀzƑ¦čŒVɵµ“¬ĶUu†÷ī ZĖ™/Ṅ›1i×M²z&Ήm˜>q^ü©)ó«^m< ¾©¶Łź5"¤“)°(µŒ…ü{Ÿå–±Ģƅ'|ēšIh¦bæ¶ åŸ4Ó µĻæķk?łó’Z~óźƒŸaY>pŠÜ‡"ż9"”¦€ŁldÉ?Š™įɇ£Č$”"oq)”²/ ”v#0e "‘jH)ŽĘÆH{Ą]m/޶'!%µŸž‰ ×ÖÄ,õż É,’ĢĀ4MHŔ- P¹²„AZ1™šņŪeÄ$Yp-•Ҥ ,@IŠ`o€ĀsIIął%cõ0e®t.|üÄĘ_÷L}¬ž‹õ+.yGć“ļ¼›¢’š__Į$[ĄŖ­ī­«?ēōweæŌ®J7,жϺī,ĢżĮj{ķÖ_^P·ć¦>Ąóˆl -3ķw€–U'`0’2ŗ»ĖR}Žø)”g‹Žü¹6õēŸĆŚFAčŗśGX ϵc¹”øĻuqµ”ųÓeßęW’™+?ˆŖ# ÜzŅDśv˜VPA)T¾4ģ³Ō’½Żō/²5÷óp©’ūłc×Ūü… xšp³ühzęÜą:8„É©3ńłs?‡ĒKÕūä_lü.°ōyÜ@N˜„ļ\ōø5ŲVHžŃ~ānĢ_µWĮ1æ{ļyx (UėŸżw “?`÷„ū—Šų„˜‰æ„Ō·@}ČĄš”ūķqLĀ5ŸaĢxÖhŁyjź¼čƒ“Ä7Fāä&“ŚźY›i޲%sĢK‡ō78Q—IŹ! Ą¼\±ōeļKœ€×ęÆXÆĒ"ØŪl`’Ē¢J ź¶ņĶ -‘g›¬~«ŗŃ"ą„®„¤³;“F]…p@¶«ĶtŸKöŖźTæ[›IŖZ7©ė\ÕŹå8+¶˜½œuApH’mX4(-ŃgĘeO$&ū¢5²/Ve Äjeڔ…Ez¬śšūŽO€ad¬Ų{ 24ƒž{²cŽŚ•}ĒģlOķŗÜ¦i"‰ĄŠDĮĢH&SČŲī-`hmŲńæ˜éßČZ†K¤A˜Ś¢0ūSZ\LŸķ¢ŗ†”\‚rŽņ^•ņ2\WCč@*é”oó· ķƒ€{ź°ć«?żs'¾^éøTč÷,58"‰į8ٶŁl¶ćäe ö2 ¢ģį²Śf5‚l©Ąaez¤­ ”vµM lūPś-#‡ §ó·ShüÆ`Œi‚mOŲü–‰Óˆu_Mǽžöꙫ “Į6æ·ćĖŚ˜xigŁ’°N$¼Kh€})ąüCŠ“l ÅV ’g§pŗR8+ÅgžMįvx_3čnƝĢŲ/ĆE Į?.żśę”PY_˜ PX pmčß„2*YCEØ`ŸÄī ’@i`owüŽüG Pd°ųłķä?Ļģ(IžĆc»¾õnŅĶB mĪ;pŁ.ÄņįRžm.ž uÓuųb7ž ū€ƒpəĒ+…Änło\|ņyųóäiHē6ÖØ?P¼Öńņ¢žÅŽ1Ś:’RŪeĤŒæ’=õŃ6ŅW”°”Ō { (ŁRoŚ‹f¦e]dɤ9Ńæ·{+—6 Iƒn¼uujęÖķ©–>ų¾Į‰ŗ°ŪVy0uŽgxÅ| ¬Ń”n“żžˆ*ƒÄ€kj›#‹'ĻæQ=Éź±b"[`® kĻh•_ļD¦‹A3“$e³`f™T–3Ø¢®­-ĒaK»,™¼č'1Xšä9fT¦#q‘±bĀH~ 5‰ā˜CjäLjRóŃ] ʉšA/>Õ9oĶņŽ£wvdސ~Ć'żŃhŅšźż‰bĪ`™TÉĮlĒ‘@±’ѐū!‚Aįö‚}ƒ}jjÓf¹˜Ņ¢0eŖƒ†FĶš„WĒ…‚Bow2)54µ=lś‡ÉÓ#æ¾ōŹę[¦ICČfŅu Š…eŽĄq üļeVČ8Žk˜ŠŪvNDšI{ŲYIĄHE€Ā’€‘ˆRŻ2"Ą¶w|EG&¬wŹŌ†ļOxźä;-{ƒ ŪOŻy­6.³ķ}žüéO·8šD»ń8kūaO½“…ŪóŪł×_“=Č8ˆaČŅUłŪb5`ģŖ2Žśź@€‘Š?W¾†ÓŅ)|‹ÕŠ„³ŸnÅk)€ćƒ©~O„ĶRā!Řχ6NÅ¢ė¶`ÓHE€J)@»  ‚}{:õ¼M’*äüÉ’]×ć}­›š#fÄ ĖŽ<Ÿ:ź=h+ł€Ž°nż~ļŲ8œ½‡‹ŽsŽ ¶+ŗó¼Ūzü(Qƒ;/»ß łßÕØ±Nåęrüሿe„Iįń÷Śźāv”?5dp?€Ķ„fڃØ0„ų¦ęWLwÖJėõIDļžqTõņhL³ RŠE²Ż©Śŗ:5§£Ķ>nÅaƒļī¦¢ÅgŁ}h\e¢eqTDƒfTlؚ`¾Ōt@ģõś©Ńv#!"b¹H9;ČKI¦Ŗ [.  ®ŸŁč»bįŲ9!øĪކ &̾£? š®ürēģšŲŅų č:P Äe’Kd0°fZüĢĪ9kVö³³-Gś#‘LĖB$ÅÄ&ę'±vU=;Md‚¹ƒ¹˜ż¬€4R© X‘Üś  ņ÷*,äŽiE€‰MS\4NR˜ŠčBČ L€ąŲ^1DĘN£³£ ŽĶÅkż‹Ōü—ö“é_¼J.¾āŚ™_2āļøŠ,"łæó‘d€”ąńĪ`ŲC>•Żå 0Ą¶fǽōum5~:³bŹć³?(·«¶÷m¾Ü‰M’mõÆųģŌgÜkųĒDXµhūēT“ł«ÜÄŽŪŸ²ņ欰(±D€LŲ4pD€Įfol”pŹ~˜±ml™ƒ“X…mKž„øģd|ŻuńU)ńŪ³>…«®ž%2ėW€>rŽæč⊊@o7*@ūöĘŗ’ łßMä?DĮŹ‘’”ń‰{š$3b¦…—Næ —“ģŌ®’k–”ö’ş”Āl" 6LĘON:w×O„}ĻpZūü3ŒÄł'ž……ū4źo°öPŌ8āäGż@Jƒą®dę¢vŅ—ŁaĄ¦r3ī!”¦¾dŗÓWG–O˜½gö!‰×£u2DŁa9ŠęŌ“®KĻéŁęµiVź][µk‹{ȏ/„¦½įI+,M’MKlŽO0^kÜ/öZĆōh[¬Zf‚8‡ž^ŹE÷½„]ēG[#?¢_x~»BčĒÅ‚Ba€ōā3s׬ź;ŗÓ#żõD+ÉFśIä¾ G½»3g§@čķ2ń֊6­‹Akņ®š\  °Ÿ<āŗH%3ȤUir_Źpä~Øp€ās†!5µ M u ÕՌh\C»Ēa(©‘L ¢³­«¼Į_ A@ļéŗƒŚĻ¹dŅų¬ź)$ęp\h bōB@69óæ`[Q!  @`„ģįE€aJЉĄčK†Ėčm¹®YĒ«ŲŅĻoé=éĶÓķš?@Fjó·¦?1ć†ģœ!`ĆŃĻ™¬=ö.†tvžlścægśā€å‚W-Śńi+ݱfŚŹ£³ŻĮģ±G"‘?¦T)0z føŽĪß§”pĶ%ˆē÷H^|"^~·°Ā Ń(>÷l ·ćNž„łŻķXlųłīÅ7łō®ˆ•R€ v{Ķ ¹‚ F‚½­īW’w…üōb!ņä { ł·ümc!’#mó÷æßĒmŪp=RsĒGO¾+J‘’Āz’RˆĄ ^|Ӟ’~§¦g7l0,jŹ,|åĢOįĮĀżGœņ?Q’‘ŗū»€(›™n.›ł©äŅ !@¬@w§2gļ }Րżö–€‰&ß4żyKM[o­Ø›¹wÖĀÄR«ĮH Kx×ķŁ×iדÆOļß³Ķ>¼+jæcĆįéęĮF½Ūd€Ś­Z^ˆp¬_ø‚ØĻŒŠMń‰ęė3£oÖO‹“Y ™ “Õ0©Ö…„zœ’HÉžŽLšĒ fŠĖĻ휳fEß»²¤_ƞ߲Å „(Ų‡K(œvV;  ɤ%ÖÆ‰aå²RLį ¾Æ ų’%fd2.R)ŚE ņ_‚¼Gī …¢„ĆĢiEźźD•F4ĮŠZ„B{Gz»öJĒŌĒÕ_qŚ Æ;š*u„ |÷~?&ņJ¼ˆ¾›uż—¾÷CD+ķfĒi.”‚€‘eÄŻÕCK …€‘ŠĄ®ū¶ ņ=`ė‡śobYu Tęõi÷EO|O€`NÜvŌßģo:õOLb¢`ūåÉÆ¾ēl«ćYL Ü>÷æ'õNżŅ+ ”ķjŚļü\ķŗg„äįD€~5»QMg€÷€é[×įQF}#>ņL^IłŪNlĄQżŻø @œ™Ń‹į Ļ$ń ‚· ūü »‚ģmäßč’LŒŽüO0h‚v•üŁßWÉ@ęoŗW ōą³B õųć¬Ē£ł/4ś[·5ü’‘ģĒš¹”ŲÜ2ß>õB,.Ü$)’{UŌæń7ØP¦Ä£ē=kŲżÖż€U%gßs˜/  ö{<ā6ķ0WŌϊÜ;ūŖ„Ń:™&ĆÆ×fͤÓ,ū[źö-é}­ö!é~÷ ¶{ĘöN<]ÆĒķ~™č˜ņšÅu[ M[¢Ėˆ‰ 5ęuÓ¢kš­«Ś#’TŠX!üŃ)‰WN~Žƒ[D( ’Śė’?‰kq”ń ĖŖģy°A×WŹe{…Qʔ€į—1,}©ó€u«śÜŁaį:ŗ^h,ĖOļČwžłq–Ārxę4˜Gžƒ…&lŁśK«Š¾#ą(÷ĀŁ÷­5Ą@*åĄNk±žŅŁ侔i`r_lī²s‹1bqF$ʰ.X¤±mŪv ō¦Jzģi4OŽšÉ«fü/HA ×É6,)*dd[ž… µĖvčXĪ #Ē-` ¾ćeŚßuĻĮ™É§ß@XŻ‹?Žōō1O9`ĒQ½3ݰčA¢–Xm©ßü?j^ł•¶°9 5L›ē?ō~]uĄ•LęB‚īŽ÷-žųÄeǽŒŁ"@Ųp¬"Ą7Āøī \»šüų¶gŃl{G—:ü˜$žńŽcpÉMO£ēø.L§ń«Ęi8ØāPĮŪ…ŠPĮ>öŗ’™9łʧž×Pé=Č IDAT™āéķ’¬ä2 qóךóLļ7L¼qö§ń±Y3‘čƒq×Ķų@_7Žf€µxż¤³š÷©3‹7®+ēņæv)źV¾¹‘ū V™VžĆĮX¢žĮś]‰śļ ńĻ( Õś@D¤żØ?DMl>7žū";æ+:×[šĀko'f(įćą_£vmŹXŃ“ōīé‡$–Gė¬4 bø€`&HÆ §Xō»±¾Ķ™ę®-™yÉ^w¾ĮŒĶvSē~n¤·Å%=lĮżPH›PæÉĄ„µ&×쐀’śMS“ZUr]õdkEć“ČęD½ŁkŅSŌų.DśĆQżįæv™Ā׊B¢/!Į "Ÿą»E®·¹/FźĆĒ׌BĞ]9dŸ`«*&pˆį€ą!–ˆøX†`~]0ČŠ¼fyļ“K»uµgŽéŗ\7Ņūv†ÉųŠ9mˆD¹¤ąż[B‰Ī Ė_‹cĶJZ‡ź>!ĻĶÆ5ƒ5N:ЊĄ(Aī ‰ś®{oć#Įįęō> Ą2Ń:…”Ūƒ­7"“Vpģ·‡üĒ«?ūõ™W[B(®ßĎėĻ 2.»ć” PV@N,ŲE€ļßų)7:怓¢Ķ×k7žęŃLż!õ©ĘÓĪ×քO‘V[k6ŻtöōUŸĪŗÄ„EÓ» G™›zšŹØæ ąž‰·¾7±śā-Į˜ń ;CE€±vłīēżÓÆš„p‘aįŗ;^Ćwf˜—šL¼g>݇ū÷“€’'^žÅQ*ŲūĮ(Ęłg ’@®ŻßĪ6PwAÆŪńj÷÷Ļ@ž—܇i+^ĄõMxńœĻąé`\Pļæm=b÷߀Ū] cqÜų±ųļÅOā×®ƒłį㠁ŽŁā‹§_‚ĆėĖ‘’š9ÕčoOFżw5ŻšĢģ 3G:[wźź?Zƒ÷s±ō­ś”¹'!ĢCŃæLŅĄa·ĘSK.kœægŚĮU+k2£“.ųü½žļ Į^ķŻ©źz·ŁÓ:ķ9©µŸ›įIJźŗŽF훬ŒTƒ¢LƎk„cé¤k@ Ö+ļØn58Ń&ŁŠŠšŚź JƒvZ1¹5Zo¬­o“6Ö5[m±j#)-ŅYņ?ĀÆŻ\”> ś92-AŚ;‚҇pFv1’‹CDÄ® ĄXPĄ#ņLE„U>kĄ-č^0ŅČ! £Z2dV^ŸIŗęl?½}[ņ½Ė±x +–ō‚™1wĮ ŽqDßņ/eŽü“$AB‚ü×tŅĄ[Ė-,{E` ß#с AVš’­™\GƱķC¢ł!">ŌH°¹/Õe ¹ķœ ‚4«ŚEw_¶lؘMö¤A\Ś|锽`Ą3’Ėńłä¾” 41Ūä²! ,äe8€ŽŽ< \ Œ`æņBĄXĢw°łÓntś Č=t깚µ×}¦iÕw;€|cĄB֞˜ŗƒ)z’Ō½7M[\÷µš\…"@”ĄŽ$ųåfĘģźj\Üׇ_ńǼÆtµį:ƼĒģ žl^)Ø`O£"T°×coKżß›M’J‘ 'ģ«ä’×įc;Ūń50"fĻżū÷ń GžƒżŽ| MĻžÕ“ˆdF\tDāXĢF&…ć˜QĄ~®8÷r<Ōū~f{œüsŌ’Œ#¬lfōg”ˆś›¦!J­@¬A”–ĘoÜŽÓżj÷Ų2dķžC-€iÅ7%ŚÜļ³Ŗå«“ēÄ0±.R%ņŗ Ķ䄤ēÜņŻ“–é~K¶Ś ½ķĪŌĮn§%“ŅÓ][7BqRˆƒ9@hƒ„6Ņ”«&ĻōˆH AŅ n#.Zc5Ę–Ś ęęš&³#Ń`öKKøBB¤æ°næé×. PŲĮßCŽģ3ē:(xDX’ļ b/Ø %D¹/$õ*o’ós]¢°ėƒŖP4śŸ=žČžOČ(ż +‰8čH^±¬{Ί„;?jŪŗ©”hj0cįRRiétzT$•ˆqźYķØŖV Ÿōüˆ¼č?„ HH°6°aĄŅ%ŒÖ­œó ä?ŗū?k­dR ģ xņKy"N("d…ƒ”ä>GņG>ēPį ?[ĄŒMbŪÖõŲŁŃ‰Ż ‚:ņ„ Wž|FÓAźA–äkϱ?*…WÆׁö‰~žP"!“ĄRBĄX²ā>’l€±˜ī–r€£~§3ń˜Ok?œ‚Ź,“ɵwL^|Ō}¦›bh=śåE™ŖY'G7<>kńaOŠėŽļüŖ6'|^pś±łĘ.?|`÷бoÜhD€R¦€ļLą¢L W4ĻĄynĄz8ąD NMöć"¬Zp$Īøåäé ‚=‰ŠPĮ^½üĘōÆBžs łGą]4ŠćßĆ’d’8G¢x°y&n;óSx±”Ó’ż·ć 7_Å̈%jpĒ—āū“¦yĻGk–”ö”;š ĒʑDHy"Ī8īŌü&v»BüįžvWԟr™Ļø[ćĢĄD—?nąJKBĪžaņO`ž¹ü+Āšėäį²øµ·’ŠŽˆ:gČĮĄj¼}e3‘’… aņR“g,tDė¦Ī?Ś4'¶ÕŒ Č RÖs¬p«<ÖL®Ć2ŁķĘS]Nm²Ėąō©¦tR5ŁžØ]®QšćŠ0ö%hApr„IŅ¢®HLtFkŒ¶x­±³ŗŽčŽ&Œd$*lČ¢MŃņRė» €Šŗ:œÖŸOö½5ŃWŃ>ńöH¶€f3ˆ„„ė²[qp,VŠRĻ bfŅ”ćÄŻ£²³Č5\W~I|±ƒ°0L—Š!Š”ōž"u’=ŻéŖW·}ø·;sh"4O"*›0ŃIČØ(śą–ÉYD‚³S8ś„ž²©’ł ad£’BåD! 2ŠŽ*°ōEo-Ė@kB.' _`Zi@ūmś“PšQG)ud׍ˆÜ—š3O0Č Å3 ¼cĘjуukŽĀ@_į;ÜeL½ńā/Ķŗ=ļZäŗŁ ³€ņe»’ ą8^·!‰Ū†Ą  ”敔ɰmaƒĄń0,Ö&Š¢|r;Z x‰ĢCuSÄÖćV\ϲ6’QL„žœ“įėŸŽ­½¾z÷’b]÷ž?xĶ†ÓłĆ¹O4^o§0–ö€AĄ/ƅõŁoĀ€%OB|źü§mć)ń‡Ó.Āēæqsš©å#.˜©w¬Ē¶`ż¢Š@㌊PĮŽ‹=œśæ»M’ö&ņä’÷fņ7ßK ā#Dč›¶?®<ē3x ł/4ū»ż'x’@ęņkųIįgŅ»Ö­æĄNG[Q¼pÅuø$Ų¶ÆGż/ż’VėÓĄ±Püå\ׇ‰¾ …Qo]öX¬AYņĄM³xagźŠk3C>S@'€Ā'¦=¼ś’˜OLÕõ[“Ģǧ_ÜŌķąąa¶ń&&­½č¹`&7ĶRe“™L"ź ŗ‰Ō N8)•PIp\Ž)—-fH˜\iŠ“ŒR*ƒVD$#Ur0’0’f\ŲŃØé* MQW”bĪ„~§#$üŁ/Œź³+Čõ‰¾&ļĢ‚‚qÅH>3H o}˜ŲgI½‡ŽŽī+ķÆ'BčsĶŽ÷›÷4]PfPś7šCŽlˆüūoV¼ŁuČʵ=§ āxSPWUd’0„#2ژˆĮĮ R©Tɬ€“?؁†F§LŻæQŽü ‘+ĀšÖĀ™Ž6a¢·øõp]†§£ųĒ'€‚UšVyBƒąŚhé-CŒūĘ@ī }Šī3TPŗy¹šozڰ~ĶjŲ»ŠDµ±ä³’µßW¤é“|ßē#‹a„ķĶŠÄ®ĮAęĶ!!*n Ēń`Ø$`DپA`©’)Įnųēqź°;D€ÖSv\åF'_€…Ūūgį&×)«īh±“Ō¦xŪ½Õķø}ĖöCnū_MŃc«õMĖ>ó¾ ­7f•”°`ö€#‘üs(ģ8āäÆ ‹™Š¶¢"Ą8u€ĖNAŻāĒp +œ‰ćŖēqŹą¾ ėĮ•®‹ė ßxŌĮ’Ūķ?€Šš/‹ŠPĮ^‹ŃF’÷„ŗ’™?ņ?Ē’“{ łæ’F¾až‚=k.<ćR¼ģśćvµĶߒŃņÜcų;3¢‡³Ž{6Vī ä4Q’r&ā³ń[Ų&CüštKž¤šI?rQ’,ń8äk¤5“a˜HõØčĶ¢ū÷‹§ 9ذĄ®?Ē3Q2śķXų×Xڌ‰5§Gœ²0ńFÕDs@˜2÷ŠŽųūFx| ?µ]3)ÅBŪZ3i[ŽĶ¦ćjƒ3l×-K’2 r…I®ˆ W€“”0s5žAZ½fĪFö¢®ß—ŠŚKõNGIćw|>v…—ŗļGõµ†`-ņˆ>+ĪEņH±—aĄ ŅĢB ”üĢf°)VÄA¦ŗ™4MڊDU܊iÊiˌj)L-„E†4Y” #J¬ ¦ ‹ €ˆ‰%p‘WžįG;ÄJ±Ö6)­ÉQib(įŲ6ŪŹ!ĒM);md2)r”ŪŻ™©óŽÓŅIgÖÄ:`b²~{#…©…ˆMF2c` æ?/+ ir'¾g™č?HųD?xĶEż½lD†·<1dąńūńś’ąƒˆĮŒģē‚ ļ5Č PJƒ ąŚŅ–wœ¹µ) Ź łū×e ¢ ‘z…ŽĪ­X÷Öj/»a”uœłŒk™é.#~Y€&bäeć’ ą‹…ŁŖDIĄHDļż‡Hn°īmŗžlśąģ+ž Ezū÷g<>õē€×"pÓ¢7?h×ųSbdv·BXļtW¬ć®O[vŽ« ,aņl^€T 2~ń»Š°| nfĘˆp3>lÅqöƃø/³ØR PĮ8”tćą *x1–Ō’BŒ&õo%’€ßź@Šī/Œ‘¶ūŠ“’būåķ³‡É”Óėœ ±īOņoø £Ž­Æ-Įßūpī¦Õ8A©üFvc!’eSž ʐ’›ü•éP_£‘:‚š„æ×@}+ōUĻ(l>‘Äk=`˜üĒ)Œśk$4“0ü}©ÉIć”M–ó’†Th°©ōy;P’ü@Ór“!(mFDG“ŹčŠV™™,™ȧOś%<™¶žźM—¬7ŻAvź@čĀ"€…E+B ¤ Ŗ‰ŃPXHõ0%W Šß BČ`S?DXčŲšŁ Žøˆ›šp}#¾4½›īXźµ%¼ēĶĄ0Ą‰ xWn#ÆĮ‡īļÅ#ļ1ńßv?żŚ‡ńŲu÷ļZt.ņE€;*†ƒ×¦"ü«”"T°×a,.ŠÅ¢’#Åėž‹b“䓚£’Y„£’#%’iTHž”‹žæŻäß3 ¤‰…ä?`Į«ĶĆ՟fŹgi±*¬ģlSƒ1Įł’’½%å?ˆś—tų÷Mžą ÓlķuõWV°ś3Ģ·”žn£i\öϳ?/źRƒŠEż!¼Č7 BśøÕnKtŸķš<“ņ¤ @#{ÜŁˆ˜\z³™$4®5\)©77¶E¬Ć šSķ)GŲ…Ÿ’žÕTB’b|:ŌóŽ„ńkx" ”ÖwŹ[WŠōKPBäRśZ39ހ˹ō/ŗO^ĖBfbiG W Į~ھ³"ģkbfR®”!böÄژ!”¦[]=Į©NLpćÖ7i`ĖŖÓ£† YĆRĘGž y{1°¦›n[īģ-@U‰–Ć‚RJ)¼}0¤īAMÄ@Ķäš«qž’ŪŽeÆ}½! ĻųĻ'õˆ¾gÖˆńČæ'$ żµŪ§öł‘ļÕ’š1ē“/ ho¼BųYچV6Ų•ˆBĀŹ„ģg zˆØSél’ćÉŪž ‚Æ„ 0RōļLØ•ūć„E ‘VŻX³j%ŗ:v–ÜgŚĢųļßó”ÉoŗŚ+Ū‚Xk€Čq)OŠž‡\°šÖs¶$@h&”]vƒė±d@&pąj&3T …A.“Ÿ “µˆ[¦†ćxµWiŽ2LĖbÓ¶‘ D¦iĀq DÓ²Ūi키ał%Žv‚%\esą \ŸčGŽ~ ;Õхj€VŖžØ8u/uLŸžęÄŻšż/°j­éøėœ†W?².˜oėA-LO8žj–ńį_"ū›ĪXXņÅIĖŽ{y$"@Ÿ öH'AAĄhE€x/(9Œ€fp[šL^FV„ä½õ+@Š/ø6¾M„ųfćĀæ¬ĆŽWjž‰ė·­Å•/=Š÷ų;ą² CšĆ"Ą7‘Ėø RYüė”"T°ĻąŚ·)õ¤¦Ű;ėžw…ü—ś?ņļ »ü+dZŲądp|z'÷“ćÕ }Gżāž…(ęōļd0¤ō\ņßĪ”’š|Įž…Ē.źŸȦ’õžļŽˆ7zlžį6„ÆŃ@ĶbĒžA³ˆ|jŖe ‰śūs»i/ŅmųQ’€üK"Ć@U˜ŽcŽ»”Ѿ°č‰4śļµ§ō¹ī2,-(ūW8õ%‹„3.ŚāuʖŲ9Ø,Ą¤y…䎚ÓķC?Œ0ńGūušŻ’Ņg]Įz¦°£}ĪŻ_šČø / m«…Iæ ?ƒ“dĮĢĚÉQ,‚i†Š®†ÖZ³ŠJ\ff&͚ģX¼ŚnؙģTG›T<Ö¤"V£¶Œ6dĶč“ć÷.øƒlżæ×ŠóĀ:4Ö ÓwAu HdI; į)nĀ[¤tpžÅ]8fpō Ąę Ą›ÆėV{ū’/#e÷”,Ń÷„B.# Č xäo½H ųœ¢ä ä¹ć0ūóūyŽÕ$—n@ś™l2\gŽ "0e‚ ä“ū”¦€įl”]‚’¢Č>»öµRJ£só ūM9l` ӉK_Gr ™—Ø1–|āņrµ`¤aŠ®K€–œ_`Ž~®KZ“f2̜w„ŠLZ®ƒ»V_}ĀģśWW:åŪ ³$rŽZķPą “µ$ā–Š6rŅL2jr\'m[ķ™š¦ 8e ½‹€ķhķ‚„e±(Č0¤ERAI€’ ™)-^IĄp"@øC@p„€‘ˆS^9ėÅ-ļŪždģ]Żžų׌ųæ'Ö’øĖņhėawż=¬¶UoüùÓßŗtōqj;~ĆÜHÓ²æNÖ­DcaĪKUó×Ö…Ļ=yٱ/ 'Tct"@gĖ?Z ±4X ”B  óŽDʗń[fœfųŁ×nĀÕ¼Ų»s¼Ó{/1š»eńdP˜Pˆ‘ˆ•,€=ģÓ7ż žł°·¹žļk¦…äćæŃ’’8ʗüŪ)ˆš˜w3 ¢üOüö[śī`šQ<¹ą(|÷ÄcC@ž7¼…Äęõ˜8Ї*;«Ŗ½Gˆ-Ń8ĀķĶ‹’’kPu÷oqÆVhž5Ÿüą„X<ę” Õ;Å g׌žeDŽPŌšČæōē$‡ w¤Ó_čŸ1¢?Y]õeéB‡Sžµi›żś; ’ddē·m–›ķĘæÕ÷üO²Š§¢v ’‰j¼0e%ģŖV‰łÄaˆÖź ĘāęyńēfEwD^ūæ<āļ“~eŪķeHæŹÆæ?ƝŸ„ņI?ūĀ€«½“~Įģ™ōł)żŚóäϦėē~°p]ųb€¬@ &Ö‘‘©ohvjāSķxbŠŽ[“UÄld±ļDņGƒ®6`ĖÆ  LjČ«ŲˆŅ0! !MHƀ4 į­«ŸHųéŸ6Êä?+'5+Æ twšżyµ’ż,„™ó^]œĮSöē¢ž”óńcü^ˆ²tY'‚OśżŃŒÜ#˜Ļ×^;Aåh°’0(ę‰B" īEMCÄæœ`6ÜH;½Ų°u)4+u|ōņYŸž¹_¢7Øķ×”–}9ŽļzׅÄ*Ʀ?„`Ž"ŽOm=g’g6äF"N}źš’p¹Ćœ›#ē 6±Śe]Ā °l— 5tl&HÖ0ģś?žm‡óč›ūõ¦¾9×ÜČ2r˜mbg„9AUÄjKbóoĪm~żß7M>ĀX{ųć?Ó¢ź ~*Ņžč·¦Æ8}9Y‡ėŽ|ų3ʚōŸ`ŻZ»ķ»'ÕmśśN ß`ķ»Vžœ‰µ\°`é¢Ė¬ŌK°{;”ņ†vćŲ&¼«··1#B„~,żóø`öŽŲŸ~Öm×ćNfœ8e6ęŽ¾Ū ēX4F?€rYą_ ‚½åR’`_!’Ąī3żŪķž É?/ģ.ņŸ€¼ķŪųŃ §įŚĒ ėĻćJŠßǹ;·ć;=Ī”@„9›0 ōTUįo‹ĪĀÆXˆŽbä’Õē0éŁūńcĒĘ”¦…—.ż&žŸ”Co|c®÷Ļū`¼—±’AÅ~qdBĒ ¢žR‚“b’ĀĢÖ³»Ä-ƒé&™€ BÜq±•ųuŽś‡‰?«|OļœXdś)öʦ#ĻųŖ6Pś»“¢Ąī}PĻg L&„pŽÓ±9Mˆå Ó£OM>0¾²ŗŃģæ-D(2?<ńgB®@łlS9ģ„ģėp–€„ :kŠ—#ż¤YøÄÄJz‚€߈I1H;$ˆ¼Ø¾ Dƒ€š3 WK39±zJ¦®®EÅ£SŻXt GĢFöģ03t:Ī8ж ¶čŒ ķ8Šģøk، Ņ vh„€“7v]°ĪE慟N“ż ‰@¦éEā-ī Būā@ēš'ŃĀ?°1BHé „4 „/¤abž!¾ńÓ­„ö†f ķ­V.#¬{‹ u”ėæoH¹.]Ą7ģ„ė9›’Ü刂ōžąg”0$į$?Lų/Äē e^C9Ź8‚ج†eÄseC±9žś“ŲѹŽ›†”:ņ¤ ×,:uņņ0i.@Ō€Š*ˆ–ó“@ķ{Ć$Ż903öŪ7æ{³£#-UfĻÓ'Ķøć§Ūśg4Ķm|~Ƭśå½ŽœÄš²ąP!!Ā’åę² $qTŪŽ“'Ą¶‘ÄčD€p«Ą±vŲ"EźD둯bĶūéȄcY&NŌŽŖMæ9³qłæońöˆcćÉ­?e³śīΟĻxvŽ÷9Żé•FX`ĖÆzO’O”¬:_ø?šžbć‚ćU„ Wæį\'2ó§LÓi’ĘA/NśU°}8`øĪće øi-čŒøŅRžgįĀĪ^4÷ķÄ£$ńp¼ æQLÉdp53ę™Q\žH · UŗT° Øģ5Ų“®’#¬ū/:fw’’>Pl’÷ņ7ßI ąüÉ3šŁóÆÄC@~›ææžļk߈Æk]®ā;BbÓ±'įŅ#OÉõҀߒ’ÖŻ‰‹X£AšXĀ™ødžaR\ZHžwgŹ’xGż É?aP‡Ņ‰ædop¼Æ%Z¤ńƒ³#Õ÷Q’ åßÖL¬ņ;€ž! )—Eļ&§ī¹TßG×ĢΜUö/ʆ×°ÆĢ˜į`Į«÷ÆfĒUé£ IDAT³ŸˆrĆĆ6#bsm£ł|ćœųK3"ķVLøš™Ā­’†«ļqŸ#ż¹h®¦æ8égfäjŸō^šæö÷wKr…Š(NųÓńD]²”v¦[]Żā$¢ÓU$2TF|Ł03t*·? =„;˜‚LB§2PÉ4t& Ź@§ÓC%ˤ~¦š?‹lUHnShŖA[æQ ż7<Ā/żčæaB OXšĪ žóŠ Ģ˜M0¼×tŚĄ†µ„Õ+4zŗ$  ‰Ā€r Ü~Cŗ:²į}ŸÖ‡ ‘„ū!Ó?_+ž=ar„čŲŽ’ „ŸUąķåkŽ”ĄYļbo~ĒV`— GĢŖ…!­¢ä~W’ĒWeŠÖµ=ż­Ą5õę³ļ9}Ź sTw™@B‡"ö”Ž …B@6žą ¼H~ųĄžš«×oø¦×n<©Ͳˆ8=­fÕ/?¾ą«we³J‰Ž|EEx’‡™šĪ-iŪJ ķ`Ū…Āl€½Q€ž‰§Ęz޹÷Y"ŠD·žéŒ Æ~luą °åäö/»fć•ŲJośņOμ}°ąL ÜqĄm-½SĪžQ“’µ4-?fI°mŪį[/s#Sæ €„J޹ߋļž|•~%ÆM9`“Ā„ĄČE€Ć«qfjw~ųĆŪš­SĪ…J|bŽ5Ѓ[™½{3VĘ«qÕS½xģsJöE ‚1¢"T°W`O¦žļJ˿ђ`ŒŃßń“¦ū"łųåWšżŌ Ī‹WćŸś¾&’€—ĀŸÜė‘pxO'ę*5ŅBæe ?Z…öś h%īļEĶÖõ8¶w'žՆ‰Õ½ēMšā=ó(ŗńŪų~rŠWįoļ’¾×܂\1)ĘVļ?Ž)’åŚūłQˆ ““õ×3ņ9”¹ōżWwƳNź7Ø&Ą]("_<ŁŖYZ.꯳Ǔyļ3Ó£"]ėķ)OĒū’mŪ ēˆRē›E ^I@FžP #ŗcM}Łā)oXŽ0©3Qm¼Ś4;ŗxұVµĢPØõ_9āĻ䅩³¤Č#žÅH?³$ML…¤ß{†÷Ūzch‡…«Y°+ˆĀõæī_˜ŅU5“õuū9µ‰YN"6KF‘^ c‡¶ø}p{ū”zūįö Ā速„N¦|ŅX”÷Rd{ń-ƒ’¼¹‡t’ŒŽõ.Ŗ%£©Ž3ÜOHć’³wŽńvTåś’®µfv9żœōFBhI%„^C¤+‚"  (EQŠ(¢¹(Ø?AŠŠH,ˆ Ez zč ¤’ŽONNßefÖZæ?fĻ>sö©iąõž7Ÿóɞ™5kfļŁežē}Žēu‹ éØ0ūÆTH8 „vßĒćņŸ-ﲯµ·ƒ°‰Ārųøaƒ`Ń|ĆņÅFwH’Ÿ’g†÷ßĢ Ę~ŗ\)€Ā:źģ‹| VXÜD‚ƒŽŽ›C?ĒM³|ŃZ^{ī5>|{6F›Xę?šH”„CQu Āŗm,~>ķt«I'Ŗ‘Ru’į)Åü¶²„µ–-«XßųĘhR)łŃ^ŌŻ6ķ˜a@Xy#"Ż  „°›§øoĪĒ.jŽėūŃ)%TnééäŃŗj_æźŌ‰×=Ū©$Ą š»”øA`āĖ=•tG}¢šüIčšųw dÕ.ΊCgŻźäW>6ōŁIEcÖńö~å”?ØüڟO˜1āWѶīH€x‹Ą¶rX±_ż÷Œ3ų4ß9žåŃ?Lśmŗ¶N×_žmE“·ĒK–-Bœu{Ķ\×¹@ģ+O ’ūl&*—ÜS«ųčˆĮģåµ³ĖKYžŅŚ‹lŚf–Ą š9€ųÄ擒žķPjīśWW›²mU÷’Ī"Ō/.d§kžĀŲ4é’¦‚čÜīÆ7š½×żG…Ć ±­ ’īż9'­[ÉÆ‡¹_恷“Ķߌū™šīėÜg-©AĆøīœļņĒ|æń,crɃNä£Ķqśß’z’~żõōÄJ²ž 7“4Ś eŽć2=¤Ń³Õ»ŗjeµr‹åŸ‘Ė’ӹ̾³ƒü/«×w*žk™Z_šõ€”õęq­@Él£N­ž›’Ź Ö ÖŽówééŌ;…2…?0õeõ’š‚§ߤ›`U;üżcf%įˆĘt¹š[7*łźšŅóĖF&[• ³e=’ōÄMūŖX÷o‚0cžĄ"„"^Óļ[ō”­E ¬“˜8č×2@Ź¢CæEäRéšöįƒvĪWVī¤Ó;XWu2ŚÜ0¹<ŽĘ‚ĘfüĘfü¦‚Ķčl.6*¹ū”ļnūÖ’FCėJlŃ ÆƒÄ6Š<);j’„‹ćDĄ?Tå Ŕżó\rͲ’½%Öŗ˜"čļž°ÖÅĖ»¬X°d‘Ļū³²<ü§¦b{?ac_DÆD<ļO,ż®Ūe·qūÅ#Ø<!\¤L‚L D’Öę ³^x7žA{k[ć‡%Č‘ö© •ÖĘtt °€ö5~^£(£,YC:YŻ£`kF&×̚ óÉymH%Z·Ū”ü/§ž;īG†<"ą]‰€N$lRY€u…‰¼±śø±Ļ.=ūNkeJŠ eźĒæōö˜-•°,¼h’÷ė¹6åd>üü¤«æ·]ÅĀÖā¼[ (õŠq€®%:ė[„°}łü;¦løŅ-kƒhLą¤Åŗc›gXéī(ƒögwx¼āˉDĒ„$@¹,ķŌ9ļĄE×i§źå×’|ūW†^Ÿō;?NlŠl Påakuß @‘-ŁvhĒfZ¹Ūqųćk>—÷DLP ÄfÄ0Ÿx|ÜŅ’‚Ōź.kŁĮĒå–ożŒ_y1Į¶Ŗū’öy ~ū9žŖ5{N=Љē^ŁŁ­Æŗ’Ŗ|÷Rš¾’ū2üƒž·ūŪ–n’ļ½Čąēā5Ą}6ūīøGxß±9ąß Z!~w65šM7Į[^CŃ­~sœž·¤Ž[IžSa’®0:£IéŠĒ½ü”Ė­9ϳģ¾1s7ĒłĆA©ŠLüϊ‚¶Ļ­$ø(<_±čŒdķ·2‡ćæ1VČXkĄųĒI_[ÕŗĘÆZ3/æÓ»µmg­Ųşų±’²X=+aGĢNh)Es²\.¬–xcČĪås«G$7ŗitüµ³ńŠŠØXĘ?ü‹F [hĆg“• kś­@ˆĄ k•„•Ę/øüĒAæ±Ņ „ŃRå$›‡ Ž1[]½³_–ŽÉ$Ża[ś:­mxńź ńź›ŠŁX éŽy’®ą?×hȮР­²TlCĆ0ūļąD¦łhčĖö:0Ć·ÆźLÄe’Š7Åå8Š™øņ‚õ¼żJ=ž×XĀgo‹¤@ų#" 0ĘBݰj>żłƒŁiņx„L"D¢ü Ā’…L ŒŃĢyż žõų“¬Y¶,LōKQTx0øŽ‚•…ć/Edhńs>&$U éAøn*FlŠ& ¾q Ķ+ĀźAC’Ļ}Śč{F-+I‰F2ö)ū"Š:Ż’…ł UsļzóśŪ=Ų݆¼ųƒ“Ę’źiĀ}W˜§>:g·żĒ<9æ<±Ö“²Ōżp’žq5@) aI€蜒CųA8fżAOMńż(@yż#GuņNaīŽH€ÄŌ¢=ž¾Õ8'ĘÉÆ¼bŌ›cžM‹ć7“ŲZ¦€Żł”Ę$°o•¬;j(“›źy1ę‚™ī bkÅ0Ÿh|Üą’“ńŒ\²„w“˜k-S€”B0sūķ9ėяXŪŻ¾[žļNźö+yˈŚį|łš?óR|æ­åųßßv[üCg ?ą:€8ų¶Żr9>FģĄŸ½ēś’Q£ŲbÜģْ£ø[*V\t-ĒDólųßÖõž[’õ‡ørŗŸ»øÉŚĻu7…ų#„ŗė ©Ŗæϊ€ćrG~ćeMVŸP!ŌĢó!WE7ĪĘX•DIų8ų7a£V[ŚŹėLõšy¹]>Łćī™›¤ķĒbD§<Įø™I[·Ģ ¤͉”üØvXāĶŗŹ>¬‚):nŗµE#?„;)(Jż£r_[X„ ł…)øųū~JżEčÜo­«lYŠōŪ@J梢®eHķ¤\uĶÄ Ü”Їm³Bg³xk7’_׀·~ŽśFL¾{üqļč7Hļn[/࿯¹; ‚ g r–ÜzC…5 ®éqś­Ł’Øī?*—#?©ö9“ ŠAXT7’ĪĖ&F ĉ‚鷍bŁāF–.\Įšåkń¼<ژųīČĀGĻŻ‰„ĆGOęcöĘqÓ ]„p"‰.ČĀ’" " !%²Š põŅe¼ōų“¼óŅĖh­‰”Å’D(»ĢŠž@t2ֆʁ^.@Ś$eÉ:*Ź”ä–w–nj[Ėŗ†…ڧ¼Ā™sš‘Coßó€ŗ„Q“ Q UT_B˜5„č³, šėÖ·o¹“17ā€!å+ļ;Ļ‹‹¦rŅ ½ā¢yÖå&¤‡„e!o `čWtcõÉFē[ˆīH|Ÿö }ūجouŒčÉpk ŃUJæ9$ĄĘćę~Ö+›p³°¦eŌ#jRä Š  ’\٪ݧ’ÖŹŌįXė'r‹/ÜiꎷÅnn¶”ŲSĄĶõˆ9°†C[ZøĶZ†+ŃS§qémφ®9ū:Üc 5³ 'o‰Ą@)Ą@ÄcĖæ­b 63z“žGqUŪ7Eś°r5§ h›r0{ßõ/š~tégīć»AĄ/įõĆĒp̌Ģøč*Ÿ„ūģč‰\tĒlVB’źžćqĻĻ8Żv<Š#®žĪ¬ų¶¶„ŽLĒ’(r1€ßŸvÅķŸų϶”žüS~<~7¦ży·)D²ŒWƒf&“l`ß$!ĶŃmęæšа–)޶Ļé/ųß\³æĶ­÷›ž#ąļš’ż)Ÿ?/’IĜĮR=‹@lŠśˆļāy.£¶ĮčķG‘i˱lŃ }ųķmķ¾ßكĮĀĪ»āŲ/@M] B&‹VœšO(Ā„-A…õł±æ1;ģĄ™ßž'że^}śf>ń$mĶĶ`lģn_„X棎 hN­QŽ$]™ 9o=­kqE•eƒH§Ŗ»(9ś ĻϰzĆ|ڳ8Žh˜øGĶO:mŌ U0ģS„Ł}](扈Mų9Å`¤ć¾,Œ3°&ś,T DćL 8" l2!Ģ»ģˆü'¶y_œxõ]ńó5 %O[LØ š×xųWžzFs~čįŚŖ:„ÕeNė[;×½rϱ;ÜžŽŒ—tą+"5€ļ8Rań­ŃVd“R9¶Ü ¬ēƒßn„[.LY"ļyBkf’]åū"ņŠiW( :š‘6žp ­=«5ĀQ ķY­*ßAD\ŗV„±Ń’FD$@5IĻ"KI€ @D$€«¾q@åöīɁė DfĆŹĄ ‘źŽH±ńłœėbįXĻCD$@9°zĒKkĒ_;™˜j±™²¶÷Ļ’źž3 ¼’i+ĖÆAŠqĄĖ!" h q —AD$@-ŪeŚÄJ²-FvØŹšq`Y+2NŌÆA0»n)"NDqųh&67óØP¼šJń“|†/Īzžūoś.'>|7»ͱŽĆļ 4Øn- /€˜ÖK‰Įż JI€ųæ €ųÄb[e’Nš į°ź© Gė+AģŸäb«ŁĪĀ 7¾ßļš*Žomå>!X·ēģ?ż%6>š‰ėWń „`Ža§sČå¦uSźžmDž—ē2ü÷ø]™ņŻ_³`į»8’ø‹ķ•Fv ˦œĀŁOŹōÆ'š½›žmję’īpe{+ē ÉʉūrÖ1_`~dų÷ČmL[¹ˆ»—9—żœĻFsō%ūļüæž £_~†æYCķ°1\łłoóŠÖ’[»Ž_ō"ł/5śS”T‡ä?Ŗ÷ŸgōŠg|ļoÖāVńÜWŅWKB#ńp®żØ%ڻ܊š Fżõ,U{„Ša¹²5śo ¬Ų]TٵĒ'jgDģš*߯£œVm v&ž -X‰F¶®ö+7,ɏkYēO^Y“?p实vŁ:³Ua\z£dŌ[ [·ÜŃBЬLˆśd…³ zXbö ±©ÅCMNRhQõ–’āɔ’l©(+mDx:PŃ<6°BX%|¬2¾•ŚZeśAm•!”Z†ß>Øz÷|Eåd먾x¼.a­Å[æ‘üšzņ«×‘_³ćE¦ÖŻ|$D·ū\¹­Ąqü&€£”ž=™JR³Ż`œ–å’¼ƒ7qŚ×Ų{ÜdŚ7üæų8Ūæó"·jĶön‚7æņCĪu]o¶üŒ’%GBGÖ?Śö@>Ź*k.8&™>u‚pÖÅ]’„gŋ6»Ū[Až— 0Vø7ž–ōHTė’fоżK~ė-Źä÷rĖÆ<Ņ©y÷õ m‡™~Ė’Ū#YqķQŖęī€æ«­·Ę 42»1H7­ŌƛVę'“5“Öń'­ßŃŌ2R;v3Ū…ŖUŠ!s][·ĀŃ<„D³“V+ÓUĪ‚š‘Éłµc«Sun›R‰µ…÷£“į‹Ņ!ó,Ā×ŃYIiE!shĀŚžō[«„°VųŚŖPā/¤ ”„ ¬ōmĀi:dǶAµSüŹņIVʾv‰ ¹•ģŹuäV¬!·rʋ}ą:½#z&6ü÷ø½óBļŁ’~ įƒśŁ>'HķTƒPį]g…›¦’$n{3ĀkB‰Ņ†ķ›QŪ?Ypų;!(/:’w”H©8čSĶ|å¢%…ģ~÷Ņžh¹{éønž•¼:£)¢Ś@)…P‘ņ@‘͵1|dĄ®S‡ŃÜäÓ°>ƒÖ*”üĖX­q9‰” ¬Hv‘ž‡*†ī–B†0—<ŹŪ3gb“Žź°Dml½čr#ś@ū/ē#L’ņT÷%­™ ¬Ł°?ČQ]ė¾~Ų±#~æó¤źbIµt…U¢£eߖ¦Äŗ–“ƒœ;޻ᦼ.Ū`Ґ™WŸ2ńÖ¢1ŗ¤]ą½sžēŌåĶæYxź¤¶ŁƒŅ«^Ą"ÖgĒćéŌNĆŹ—žīÜ=¾ó;č»$ą™ł_Ÿ|čø?|T­ŗ§’€žśøÉŽß¾N<@a· /č °ęĄG÷ †’We"h}ØlżŒ;*ß9}NZdĆŠ»fÆ{·oõÅæZ”Ę`ĶśŌś‡??üSę7ķzē˜Ģ£ö×īŒJ`Q楶¦7>ŹŠ¹G½ļŲŽLmÖ æ„TsdK  É~/®bĪY3ųŻWøŪZq“\ł§·¹uü$ģ±c·aæ«Ę×­aįÖ.艀ą?1€ųų£`BÜ]D@©ōS\’æŗu‹gó µ$~ś×÷ųŸń“°ŗēęļņ­9[(>ńl¾ōßæ#7žŪŻį~­9n=wŻ»lˆÖŸRĪ—ü<Ÿžpfüø=’w”¾yļHÉŹ›ŸåĝɍkøĶZvDŠ¢/» ^SŠ|¦ó­aÄųÉzž,„¾M’6×ńæ?ķž6ü¤ś_ó’ŹSŒœõ ŽH€]öęģ#Ng^ųõ÷ł«ļ1uģ.|õsē3³»× ŠRš?óIĘ.x‡›7r®µ¤—łĒ|sĒMīræŅ'ų;żoķz’޲ž„ąß%tāļüG`ü>?’µzkĪĢ·•ÓœøaŸg…ćøcÅÓ~ūŽļŪģµ¼ƒUå7§:eEcŸ Z˜£3×ŽŽØ7Ūѓ TT gĘW“#~ÅQ€?„ą?$k”ō2:‘Yķ×ŌÆńĘ“Ö;z-z‡¬Ō£FėA-ĆtŖm˜–^¹ķY)l!Ł.©X+©\­lĶ*G;”•žphuj}²L-­ā.ŖžXU6ĢŻXYī䬃é ų{…~¾¶Ņ+¤TĀ+Pąy³żÖ*°Ņ÷¬ŅÖ įKi¬–ĘXi4Ŗ}ČŠŃ̓ļÆŖŲŻŖMĖō[? »b-Łe«É®\ŪUŅOw@ść’=O³õĄóā€özCŁĪu*«+‘Rā{>^ŽĆA2ج†tĪ'h^‹“™-VD-’Ā€ąµ ėž;ÖIåpč1łŅ7–ĘĢžzĖųw,›Ą›3«™ū~eG™ UJ)ź†IFs>&TóiķŅҜ§qC–öVæØ2ŁAȐ(ū޲’]–Uø®„©‘מz†güė7„ ŽĘTX:p»' ä ¼œO>vkØ*‚R Ö7~DSėZ’I¹j·}ź~{Ų1#ŽuĀ .”’ĀHĻŲwš’ѵ“@wD@D„ļ…pÜļüņõŁQŸ”^żČצ\|jżc„‚ĀÜ÷įĒ.j Ū aüķ«gßpęNW?f ¾^¾LŻ2ū××e¼źV³ż=gģ;ü”=“O/:÷÷֞pkR¶Ļ>aē_~o|ĶėĶ}‘įł‡Ļe“HĀ6’$Ąś©žą>õN+ÜqXļżį×ė§<¶kūšO’ !‡^n„ͽjq·GØQNÄZėĻAćSŪĶ~@_$Ą–šVųXźĆåĶi 0%É¾ĻłH>“†ÉÖÕ įĖϬc.Ą!eœ–Ķr€›äŠ]öäĮ[^£bŚ&*€’›1ą0{ōžK£»ģ<^(ŁžŪ÷ŲųƓ9ö•G¹×\łÅŻuŃ’ćg^LpĄ1œĘ¬®xōnžX·ŒĻżžŁb©nŠæévNZ²„Ż€ŃśŹ!¼•i$Ž3«×ŗ’Ź:lu—55šĖNäÜ_>Źļ)oæHb§č²1…—”~s Ķ}…÷W/å$ązŪĒŲ¼vŠ;ųD‚ŽĮ-’ŻEžŸ¼‹©Š9µ£Ć„́ǰŚ*Ī|óIžd4cęæÉ=œ}ĀéĢK—óŖļ1ÕĖŃ+*’KęS9ė9²au!©2ž>ī~8b»É\=’Mqśß’z’žžS^"ˆŻż*‰Ź¢¤Žb|ĒAƵ K•³…æŻœåҳĀų÷5āpYžV‹Ö7/Į»ĢBāuŻöƒŻeśü¤ć —Ø}­Õ×·. ņZpZŃū8B¬;*QsWüƒŲń”õ'¼&F*”Mŗ“)å;£eƒS©²•Õ~}k£Y’i ʖÆŃc‚%fØ lU ØČUꓟ°ŽI@{ „›6Ł"­š1B`¤9é)Ńź8Æņł# IDAT²!Yé¬J×:+ŹėœµÕĆ ‰'ć8BŪBÖæ š Ļ·20VhlŲÜO !ŒF[į›@Fāń„Ö k„4ĘHßRZ!¬0RjKU n9zŸ|mŞŚu‡ötM» ŻŚNféj2KW’[µ“éń›d[’Ž·÷sŲV’ŁCūzCjl5ʱ”•—£Txɉdc ~;„”vÄŖTš`ćZL{=¢T—ŻėüU!ūfŽEq9ijćYråÖłjś#zń°6V«_šhjL„/„)(ÆŒo»#¤Ė,Ę:ęŅ”Ŗ¦ŒŹź”äóŠÜ˜£µ)G B8 Āż¤Ə¢€Ķ;ūt,#:¶×Ō ęø3ĻąÓ_<·f¾ÄS÷ŻĻĀŁ³;~»mé5¶…ö"Ąik'“Éb%§2Ś£¹mR™ćvŖ|ōųÓĘ<^žVž&l« PJ輕‹› ½Ā‚ Š(¾śŚX'Bu“6°!Pā =0 Q$Œ¶āŸ‹/<°>;ź3I•łčK“~z»)|恽PĒ<æųĢŻ?jšriįĶ„ĮÆ_sŹĪ7¼ˆqA c…ć“›ż‡’óöē—Ÿy VØ÷×rų¾cžłGǬ•„¾³Ö>üżµĒżÜZ‘Čéņ=ÖøÓųš×ß4ڊ€t(wŪó å ó­Ń©°®ė‚ļ‹ČP„]įg}uP*QōP 먄šBŸ’={ÄÆx_žq?­)Ķłˆž<†¾uƼģālŁēĒ‹ĢŖNµ>ˆśCžµ¾ö »²RXoNåźū/hyś}V¤֟/,‹±ŁŁĀo~+Õ¾ō­”Ėų~Łś<€ČŠw“m¾@<2mˆŗ mAP…O@_~åkķ1?€e ʂ}'ĻuĒģȟV~Ä,„ųėŁ—rł„?'įg)Ÿł(7hĶ9Jń;×åå|ž+>xƒ3*įˆžJśŠøĄUtWƒčŽč”ņg žĒ0klŖōæ»(Ķžw?y˜ģńÕܙiįX­9ēW—2tö«œń³æ‘yĶēŖR¬ńóÜųĘóĢ8vNxb~hšG@ŗUŪō½²”£å¾źžn~žgĻŪ—;³müōĘKxöāX¾×ax:[uį¾Ra«­I‘ĢÓkōdś×%Ź»wü¢;š_F?Ą\ ßK»æ¦$ų5?Ķf8eķrnūŚUÜ”įߎG²:H€ŽägÅ-°n%ß¾łūœ«\V•UņÖŠ1¼=ķ>,Æ$čNöæŻŽ“„ĖyB :šæ|ęf”Öüo-§’­^ļߋäßč¢b•uBUĪšņg6säTǽņĄDjĄ+?\[`ęųžqSuź)aŒÅ/Ģ-Žų,uß™«? Ķźƒ<ģøŚę“¾Ąą‡¢ćž¦=ü mō—čģ×-¤Ź³§9µ7ģ(Ņ{Źś' ć(dl»”X'!Œ;Či/ÆNäŖŪtcózu®YĻͶCrķz˜ĪšĮež¬69Qf¬MZS,Ļ8hį _ ²"!Z“Iِ*sźSUĪ†Ō §1U擤ŖTÖMČĀ6~ŗXźūB  |m¤1V(R"Œ°įzČŅlæń ¬֗ŅX#±Rå6Ž3¹}hŻ~^:½sÆJŽ’šÉ|“’Ģā•ų M7öžūŲųļ%śŅ{>jļą' r–¦ÜĮil¹$™J’Hŗ@Hd7‘ •ŗhÖy-ø5Õ ±²µ…lĆ*Zū­ *.‘—~†B‰¢Œ^‰,€c„D7@æņmdĀ×aögKĢ’ĀO“¢„ÉĮqaŌ8Ćų –Į#X·ÓŲŚv?Ÿ›p4“šŚ!ķ­>­ĶYņYČ.Ęq2 TśO—1!1€(ĒaßƧ±ļįÓX:>Ļ?ō/?ł¾×ӏ”ÅČērdŚ3äs^§­ö¬OżœÉ{U>}Č1#ßH:B£ 0”Gˆ#„Ž„€Ć÷Āqˆ€ lĮ©"E€±"®0!E+”# ŽA~ŃxV)Ąyė:gƁ—B “=rܟR”Öū„'… »¢V®ĖŽ/›µź˜Y+\€ķŖ>¼å”ox1<žŅq¬`»Ō¼ŗęłå”p0ÆĖ†¾•Žė˜ˆ+vƒ·}źłÅ_’…±Ŗ`DÕü›Ž™xĖŪŅøBßśŚ ©„ĶIG”— Ūžń;‘2ē[æ@Dę€q@e}4°„$Ą¦–’hlŠ nœå;OüG“}Żao}ŹÆ™ņ)arÆ zēĀsŖõā|ėØ3Ŗ-ŲIO%¦•j¦ŹdĒń+Śc$Ą˜f\DmL°©¦€ ˆø@O$‘LņÓ·sa©éa#ٽa-Ó­ePY§ü«ĒÆca.Ė„Wž@&ÅtW š O£{?€(ā$@ H€’ŲŌū†ˆ-Š-­żļÆė’1eœäe¹O^•’÷“ęB!˜5a/>sļ›”“’J>›mć!h<‚}Ŗ¦ī’%L‹ęźoĖæ[®”ü±ūłŌ%·šŲųŻBDöčo)ūūƙ)%«®}Ļ ā-’!ļ>Ķ_Œaģa_`æĻŸÕU®›Q÷ĻÖi÷W žż~Ōżbńl*žłwųA¦²–;Īūæ c¢Śž÷žcÄ«O2Żh¶’ĘtĻgŚč©•]Öu™®ä­ŗ!¼;åŽŁ~Z#`ŻĢtēöæ©ąsĶž¶“Žæ;É?ĄÓÖ¼Ų7—k P#ÅßĻIUüʁ•·éöé¾µc„%w“JŸ·»S¾ŹĶ+NA9`ÅJŌ<č7üŽXŖÄŗļ”8‹¤DXZœo0:·~b„Hµ8@ąØNYi¬p47ÜGvŁŽˆ|üB»@ė[„ćzĶ:™kŃåA–²¼gŅAΤu`ÓŚ· LŲvÜ:ų©¤Ģ WäÜr'“(—9§LeŅ*§’ŅWŖŠž«p­K3žEą-£Bé)š7FJ!ƳŹ7VŹ@†µż¾U™Te]óØį{gjk°ŽSÓÓ„, 汙ö…Ėi_“æ±e2ō±Õ]t»ļ¦d’7-C߯¶žwīsīNē,°Öæėc…;¶'”ج®"¼omR–!U(•wTX/Æ Ęv š=|C…“¦Ā:“­_Žß²¬ßż9BH”ė £Z§h(eĒc%Š°Ppä‰8åKk Ūū•Jż»÷0„ĖĘeɂ2Fm/pœx»Ą¾Ķ»›/Śī{–öÖ6r™L(Ł—”Ź”Oé¼\ ¶Ü]454šÜ?ꅇ”ycCń¢&Ūž!ӞŘĪ%ÕR‰LŻąäkS÷ņų.{TÆp„°J£!uĒ>ĄŽė”,ad¢’eQ¦æ§²€{\sĘŖÖæ °KŻ??mĀĻvĢ „°9B™žoŻü½Ęü°£„×>üõ)ßü•¶XŁ„ AŲ­8yĒWžł{€aåK~ī—żĄq…ĮBķJąpĖ;w^Óę× P•\’Čł{Ÿ{m4Ÿ4Ā*ćŪŅVķ™pRXVęĀ1Jb¦‚„ę€Q›ĄĶ)Ų”„ķĆēßs9€`7żž±^Õn·Ž4ķOyēøÆĖu’ŹÆ<ųż£żŖŻīƚ¦]ŸR”£= €›ĄĘM”ƒ€®ķē²ņ,×fÖOxsē§<›LwŽ’ćōX¶ńŁÉ|=Ÿē:”x}Üvœ}’ā°›QG bj6Ćäńyüö·YO1-F D<€ųŲb[’•޹īĖ$Ÿ¾—ÅB0’;×sĢ™ę?ĒmB°dš(ŽaĖĢĮĶ üv„ąķ {rŹõo³śžŽœĄ×³ķ\/KReÜt¹üyŚ)dņe¦¬YĮs\zķßø€:ųÉiPæ’æzčöœ~ÕĶ¼ŻŻėóq™žõž”¦Aŗö’ž īČē8JJÖL܏Æży–‚’dįļÕē1³@ø fM˜ĀO×,cĻö¦ęsģk ĆŗyiŒć²(™ę­”#™qņWxéć’Ū¢Ž_É?u€ksāJc.¤°äź”|p¬P/¤Ró¢z’GsķG-2Ž$…˜ūUź¾åJ”„Dą8tČX!aÓuć«w.Ą¾Ŗü’i‰ź9ų‡0£ßšjż#€ß-š:Źņ ķõ“”ŠŚ8:o•ļ[‡ ą aœ¤T…c,•BX! ’¼šµßXRme”EDKiBĄš7…~Eąļ[)¬•¾¶ŹG%›FŁ­½¶n’ ,±CÆØ7ކ&Ś.„}Į2‚Ööān=īÜ®żøÉąæ×źc^ŲŖŅ’†¹>ł6HķTp$•5U`°!ĢŹ+Qžå(U…T“>©PŖ#sÆCął8ZR©RM “­_ŽĪ7wIZ…5żNĢń_:.*Ö@ė’c„€Rur'qm ośšč¾KĄ¦›Ęē3%Ėń ąåóä2Y¼|¾W㿨ÅaQ ! ŪśxĖgZ[¹ļ7wšŌżŠÖŅF>×UJ«„£·Æ˜qŠCg–•'ņĀQVĀbQ!Kąa…4ÖFõų…“°Ā*%ĢęŃXӍ7@ų! ‹‘÷-śŽqĶŽŠqēļ~ŁÆ‹ćKL_\uŚN3W}žV@8Ņ[}žŌ+Ī«KÆŹ…5¦óńīzū†Æ®ĻŽłĄCžæģ¤n}-:¢””“’³~qĪŗĢųó’Nū{L½č›UĪ:?n(°>¦@r}2>ķÄHķāŠ €ē”? ”€ P(“ÜøÓuĆŪ'}÷J·½<č™)—'¼%ėb—~Ŗå&ėVž*üÖ&=WõĶhߎH€N@ä&ē0ļGZÖ|Š®·öū“ßq÷æƒĄ^圛ĻpK"Į5w<Å/ö†ÉĘłž.’|Č hŽn ‡Ü³Œå„Æ' tŲŌ°Ö !z“)ūŠ` >–Ųé’ęf’OĢ”–Žp“\šjŽßGė­āøL+BŠ6h'żk ļLͤ «yŌZF¦«ųŅĶ<ķ³)-’nłå½× ĻwŒ4'Óüf’Ćøėµłj.Ė%“÷cæóÅŖL+⽤¼‘ī°·é VwWōÆūĻ9ˆ-5żė/ų‡Mwü¶?pŸZ³„;„ mźaœxČÉ,ļ üGūæö,#_~œ?FJ€Żö圣Nc^tüYO2fĮ|öiŻČŽł,{kĶŲh›”l˜rēxŸü0tnļ×SÖ_ż:oHƒxćö¼µ2ŽzĻz|tĆłcó¹2Üę#āĪß 0%ąæ[ąsōū_JcĀóņ“Q62õÓVµVÖ2lčž¹šŹ½­T½VŲD“fČ,YAŪÜ%xõ±ŪĮĶ’Å՟0ųļyš­ž[WjZWi’ć«!)©Ø®ĄuŻā`é4ąØŠ˜ĪQ!h RTÜóĆģ¶*JųĆ6z^ĪC–¤vHhMóźÅäšÖ€ńĆ:ž‚ĮŸ*“ų‹”ąWŹAØ(óļ[ „8ę³8ī“ =żŽ3ōńeÓ °ļjػ \ī¾Ó¦Ń/ļįåóXk{ĶžG$@)ų7Z³fł –ĪŸĒāyóYüį<>xómZšZŠŗ3,—Räj§fMÜ­vĘ»VƐVå-c!“ĀFD€D+u&…°F+ū ŗ]HčDlŖĄ$„ķĪ ą¦7żćVoŠA{|ō’£ĘMĻq::I€EwƽŽ•Ó•Jų ߯ķ+§Ŗt&*l7šŠ‚Kž»įĄk©¤æīŌ~ö•G¾]ü"É~gˆZ~R$@w¦€¹Ų˜(¶”hžų£Įe‹~YļY `k÷tWņÖ{VČŖDėœóĘĪŲķ‰D¢cŽž’~ķi©5’x›©ćc»Ų„æę’]_yo_$@>f(Ų- Ѓ śG\’=’żÉ3×ńV4nŲ·€ĻļĄˆÅ‹Yź$ųĮ·~ĘMæŗ”do8}ktųæJ¬X±"=zt²š&7'jk›śŽć ń±ÄĒ%ż_āŹŃlæaó‡ė_ó¹"¾żš:ömmä! YUÅ_mę€ć&0jłµ–‰É4—ü#Ćķ›’żźžæ} ‡5®åž²j¾“oēpI&¹-ŠLäOŸč,qļ©åßÖ’°’ū’)ą¦ļņ;?ĒįÕÜłµóó¾Ą“~Ö ŒčŽč®ę’W:’]¦6o`ź.SłKĄ’ĒŁęÆGšßƒäæ ų—®01ŻĖ}§ {ŖļÓé²/ģlÕcų7^8KGĢ7¹”’ōŪ~kU€Ż^&Æ?Ł­yB@o Ų&Œ{[fĶŪÉä_H } Ų/÷ +½’Ā~0…ϽŒHˆųļ¢*°¶hŚg˜!č /zžV"¬‘¢/ą/e ¬”Aü…/„VF[Õ0dŌ¤¶C Ņ©ī>ö]ĀšĢā“~š¹ÕėŗŽ& €’nēŽĪ$ßli˜ē“QŽØqI—§I„ÓÅć8ŽƒRPJ¢¤(ØB5@±@T!D-Bt“ѓ…Œv‡*@cČk\-ÉmXK¦aų™ŲG Ē)tp:‘@)” •Ē~®ž£?ŪŠ!×ļÄ{ĪŠ÷$ķļ>ćßS)A÷ÄC"ĻG렘żœ’ćd@SCKęĶgé¼y,Y°łļ¼G¦µĻóÉ“gČe»ĶöÆ1¢āÕ { žU^!³®+“•ĀøRį # Öqe „1Åņ×1½1€Ā~›¢ŠYó>Õį‹€vĀłāćW·MØ¼ēƒ«ī³§Ģi}ļ›{Ÿwi8ĒFĒ6°Aæ~ūö·ęOŲ®rŽĶgOžļæD]žµņ”ń’ZqśķÖŖ2É2ęž ó—…Ņ`e²ć\ƒĄG÷B¤LhXJ„c „½‘„>i ^ TŠ1fżaoīÕģs/ŲģšYĒļV¹ę‰ @D”ś”ĖĪĒn+‡ ;Ž0¬}ȅD&öŒŹÆ’©”ÖóŻa’ŲdęĆ/Nz{×ēz#¶¤ ŹĆĘż $ŗ+(,ŲĆj8“½™gnjaĒ,gł‘CŲ½y/{&#/ŸŽÕō8Ši„ŻĘڵļ•WVެ–2H€µd±©Śk„=אż‡Ä€ ą@lóŲŅ’žĘTąÉ•,ŁGņVpĮ§Gsē“+Ymm#³ŽĖ“µĖyµ„…‡¦$¹ņ”øé7óX}õÉłĘcü=ŸåWŸI2ņ©ł\5:ö„Üų?v޶=üš÷¬øé)^ĻEBŠj-ƒņyĪśįߘ=ƒ’xl®é|üą š˜ PSǬīĄ)6‚­„h¬Ä æ½dB؈”Fb#"ŅÄ:HƒÕ‘E5@dŽ•ÄH€Łõķb _y#Źæ0Vm„ˆ\š¬ŽxxĮ·‹ĄBzĖ?³Ėõ.2Ē–Ż«_^qŚĻ­Ue€Ż¹īĶk’BpĄ„ÉŪÜ;a7?D$2$¤ģŃP؜E§.®õ}ŸØC€’®ˆH­ ųD$@ĮžŒ‹Æsįw0""cĄč žĶŲ›1 «¾ßŁ n ˜Ź…÷?N„źŠAŪ‹éś'²ÅcxˆD[Ng Ż ć$Ą†‰OLjÆżŌō°u Ķ&Ū]øć«;? 0wZCqź.õŅnl}ھ•+ļĻõ×0ՆČõb ŲŽŒ(/- Dm7 :2,]Ų(&ūyj^ŁĄKiR‘Čį-Źsõ¼’£{Ķt²€čOW€M1¼š’̮֮-Ļfuē鄔ŚPxŽ©TҶµµÕBϾ ’)ŃoćˆĶŠĄ'żār*£łŗkłwź~LmŽČ߼ŻēķĖ ?怭»Ę° ¹ū.üįµ,¾ž!¾³×4vK¤ų£4·5qķ_~ʰ\/ąk™žEѝć?l=š_į˜‚})ųž/ĶźCH|<_’ŠeÖPūīėÜūäż!”}t[žF|RąB@œģü‡QHŒ[”,’2žói$āS‰ŖYŪ‹äį®Č&÷£»½ē¶Z02l·,Čz×d.Pˆ 8ÕļBWÉæˆĄJiIGu’ʄŖ…Hņo\)ņÖJ­‘ń¬ž£ńń—ÄZ+¤µĀ „uT8.°Ā” ,@ijžš°20BłZäžRZ!”ĮJĻ ”—T$õįxq‚¼qL^ø~Ī$2Ā©\½ŻŽG,Żkź›G?½/šoMū¢å¬{čyVżéŸ4æżaļąæ·ģ_ąæ·T}_ąæ·ģæ3ōŻmėü÷[U ĄĀ†|pjd„å•€@*UØŖš~s\‰r%Ž«p”ĀqŹ‘8NXą:H“’J­"™lF)PQI€ēžP./£rP •#źĆjHß‰Ŗö&=t¤[Včq/Ą (ī' ķ;õ•+錎/ꄥ¾s»Ą _Ś ļł¢ķŻĶ×:Čbńó9Z6šīĢ™ÜśĆ«øōŌ/ņ³‹¾ĆŸož5o€¶ ŗX©W[¾~5ŽC¢š=gŒF"‚ĄŹŸ:aīĘż¾¾ń­ŽgŲć×U&›|#ĆłŪm­óą‚‹Æ lbĄŠ²„÷œ2įē3ßJ£øNŲ©DŪb‡KĒqCر"šGKWø„- rڊņ27ü l·Ņ(DTVż^E­d”@(Wų±ÖĆ! ŽuTBDæ³ä;ųZѱ€šV””č/ż­ß7¤čøÆ(Ī»ļˆ¶NZhUy€ė­z:īcāQši7į±ķ÷Ž‘™ŗcEØQX³>ÕśŅg‡æ»ócłĀ½ŅŲy§ß€Õ+¬#—Žø¾x/™Ļv>Fto–qµ±õu„'0¤ÓÅXÖŚłõ(_ιnių’²Ų‡ŗi§·4uÜ&+¾¼Ruō>½ķYZ^y"œsA_/ō”ŖŻ’ÄŪ’¦°¶¾²©iéöł¼?Rś¦ō­ €R^ĀŚµ„o„’ø b›FOōąÕ=|ŁlŽō’¢CØ“š²Yžz@Š’˜ŃĄ¬tš3­eĢ’„¼tų ö)Ł­B:|8Ē0巋Y­üŹĻČże&gīæ?GŻü7Z ēŗ’ææĪ[ƒGs¤r˜éē9’ƒW™żOó3/‡“®āŠ\†+nø–1ēüŒõW?Ā5'~…]+jøüąĻŅ°ÕĄ‰ī­Æŗ(8ś÷įų_ īKĮ<"ę_„B5Dk#S7üG±÷a¬v<_–ŠåÖRõį,ī|ī&l šæ9mžŒF”‚Ń ųĻKD—Ģ'c™y+;pĒ!!Bc»K½#Ź”üć8ų‘·ČPāJēOvkž'’7b1€Xgż3ļĢ­ūÓ]ķė®ųm~ż÷ōėaĒ"Š“ņ›Źōć’ptWÉüÆŠŃ¼˜õךb­?t–ü÷”õ—Qšõ/ž6v};‰PJž¾ßaīĀ J€sŖlųʉ»žŗ|Æ=Ü>tšÉV©īl7Šįol¦ń•wYq÷Hū[u IDAT?X’ÄKdW¬ķmxį"n[šßóq»_¹­ĄæĪ«üyHŒ©)ØØŖ(Ōä‡5öŁ’č/Ŗ’/ŽÄqĀråDū)”#H$Ū(+[C2Ղr((:*śßqØØ¬ vų ʆ×āŽIrÜD’#'!ҵ Ų0eimdˆW0Ė+xōœ”ļęŻgüćķż d@ °ļy¾® ƒžźž“šrYŚ›6²qķ*Ö.YĄŹ¹sX³xĶõk:b0§œ{_śÖ±ēū“®ØD)‡l&Ēʆ&74’ˆ¾ÖP‚ŗ}DZĖ×mŁćœ>ÜnūA ¤ŅĖŁ2/§ÓA^§½¼M›œN›Ą$u@ĀĖ›¤ŸÓ)/kRł /0ŽļW{ÖÉēŒėåuĀ×µy”üZäU”DaKˆ+ ’ D€ÖVv§2ŒH€.D@ŒčP ŒDXc…•BD„j¬¬I­«¦jŹÕĘ8…łŒ±bvż”#_Yõ™k­•i€‘•żžˆ§Ļ5ÅcYqĻ×|+£«¦T83æ²ŪwGócE) `ņį¾=‘ŅČ:H€8 Ż“‰„KæH6Ÿ(čžB+D_$€ė ČfQķżkżōĀėŸīW"Ą‹ŻĻ”"·łÓVœ›ÆŽż^‹ØƟ[QĻ±ĆŽ?ō («,[ūŒ'­÷€vjö‚Š:ļöł „­ć$@¶ŃŪ·¬¹ó< —{"†ę.«ŁwjgüųæH7·r‚•·>YZÅńūH^¾č8Ś÷¬æ0Éeż9ßī"~’OĢõt掓ŗ÷ß-¬µĀŚÕMMĖwhmm%„)½Ķė™ŒŖ¶!#ū’+.Ž@üļŒĖõąŪQ7ūU°–ƒ‡k’üWŸ„=¤Œ²Y~T(މ4i]<kRå|ķĮ6žŸgsźž.>ŽżšÖņC­9Č$RÜbv²¼ńĪ 2­±Ń²’OüŹŖfźŃd>NÓæĶm÷Ū\üĮžŻ5\Ō²‘o IżIßąČQćÉĘėž{’ĘyłÖK Ÿł(÷č‚'Ąūqī“Ļ0’“’„ē+6£Ž üGC`ķ` āŃ|öØÅ6ø `˜Tæ=ƒŹéŃö|įutS’‘’@JG<å7ķ3'Č|Wc»$'$“OpŹ®?ÖōJ)ų×—ž$tņˆ‰ĖżĶ&[žŃčž[r]°ĀxV¢ 3~)M0( ˆĢż„•Ę·Rk«D „ÆÕ]ż§ĮÓ×~ƒÅīŠ-øń½óv8’6Ąń€L^pĆ!ĖF^_vڈkĻź^Śź“ļK™z`ZPīœ<_ €éšzž^‡€¤'€ÆM -ĮŗN ¦ ›@©LöJ¤ 6 z0%yĻź įąķŪO€L? å ŠŁö€u{~¶sŁg»N÷Öėīöškųē7lČė#«vœ{½­MRńŹæ»`bÉś‡š2;X4B®ųĆÜŁ ŃC3īßśĖĀė¼õæ”@®®cóp|¼Ćłżj,(Ą±ƒĒ`ę7Óš3/xĪRča&p{(„³ß‰į¹Ģs tĶH•ü½˜™V a•ƒĶ0ĢĢč `Fgę`0ą<3sŠ-`‡[Z‰śÕuųBæÓŲBl‰Ÿ-~)ćæ|włM§"ōæ'ń4Ūų“”xāü;pöńĮ:t *×.ĒcĢŲÕŪGJ¼ōČ˜P¾Gś—W{®’•Čž ©ÖY~ķńŲ¹a®¶mģF„%ĢØ(.lj—OĘoŪöźž/9—ĒZp…ų>Ę»¶Āä“/Jy4[mL¦ō’רū÷×ņł Ź?Ģ+ĀżÆÅ]ŁL’²E¦įŸŸŠtüpŚ 8\BżÜąs›żł%’Ņ'ŻwĘČž•™ŗŠnixÉŠ Hģ©E'ŽįUųŠÉĖRłĮ?ądšÖ)«ą£DżŸjŁÜĶ— Pc!É/vÖ _¬ēÕųA½R OŽākm„ūw~ @ĀN?öd6Ķ×N0ż\qj{) Neē<šļÜč»ceK‘d±ÅÄl+™ų×w/ŌŠ³×f(40ė5ņ…O iŽhœ»vkžG@~pÓ““F]ł·|Ł`zÆūīņGĶ\}Ą ŅY  xčŒm»¼Ī;iV(SÆŪĄ™sŹŠO­čļˆšü/Mdš“™ė³‘›Jމ®óŲż‘żÜĶ”°[ß>½r"āÕ Hļ °f»ēŁĮ²k@ośöˆ!_Žž$J½Ža‚ƒįō×ķ, P†ś©­ŒŠś ¹Õö˜«†>oŽeF …põg1< ;hø[) {Pဒ_»0355­-&²ŗI™`åüą4Fńą#X„µDō# ~Ū±…Ų?Klīģ’Ēė.Äčx Ž;矸ņÄóR_ o>yóiøĖ¶q&ŽŽżO8ž¾×gŌ]ŗcĒX F†tüšy=¦­Ģ³+-’rj]y.vŚT…«l »aĶa`ūķvęQČć­ % xłqģŌT}ā1ŌMĒ“ŠJÜ6ńJĢéØī’×’– šŸ¼W“4ąTöĄį8娉ų¼«ąp€ųœ/P>żmÜ9j\÷cÜž£@Ż’źąßWļ?yÄ–:.Ƽ ;üÄŅrM{g?z7Ģd{õž/Ś^ĮÖ_sD‹N‘Åēé‚lü{ć9J€ų·-§4ĄßvĻš×ķē’9€?ą€”@¦ļóķµ÷ĖüœRxséššo鎘NĘ?ų³P$[ ÓVRšB¶„5õ©ļÕw?#•õśųĀlhFć·‹Ń“` ؓڬļ ųϹŁ/ ž³{ߟ ü;»ö ³ ØAVD”é:ŠJ ]ÉætH!’ņĒ•^B¬‡ŹQx-½ĒĀ)B&[J)]ó>W@)b€U-Må.Čx&ĄÕĀ÷˜Ä@"‘@¢5£5‘H@³ć‡ÜöƒIæ-Ł*PHįtp_—¤CfčA‰¼<pžD("Žh„tX–†xL H$¦A$S„Év})rÉv}.™‘,Q ¤£žö‰6®ÆAݦ¬Y¾’{śYØ`+ʶ B da!‚ƒ Pѧ}pˆ€Åė‰Y«ęòBcC“Ņ"-Adi:™liBZBė˜$l°R¤!PÄ^Ē"bRŠ…īTų޾?Z ąž6€™ķ__~Įī kw¼„!ŚJ‰™¹{tå+'Žøśa§`Éi)8Æz÷o/;ć~›e!­1åļ\zĄ Ēg)šĖ‚`€!BōéŹc‡ÕÄz÷i­M£{~8Pdv½‰t9:ü–H€†ŒSōSŚfvšB×ĮP;ņĪ›*Ļ}"0€­ėnR씂%g‘Ł8¹rśöß[PS8TŪ8zŚ9(æ€ +žŃĄéeĒĶf‡LpI€&ĮvH€Ū0WW - ąÅ( Ļ)…J{c÷–F nmÄs%½°Ćõ`łćCu_+–Ėpą÷I8Ąq‰eÉDRÓuM;€ž•Ź%ŚĢŖYYV^^"śÕosĒ`Klž`äü¤xĄõĖ»šżß[ĒķŹĀE$ńś!'bĀu"-m·cWZn ĀĢ#pÄ ó°Įæ>ų_³tĢ®Ųξ óv?Źł­DēĄ?Ų1w}1pÓįŲ½n#.ģæ.;ķN,åD¶Āćlu’kę ōĀĆ8¾¹ē1£g ‚É8·žį`ŌwEśļ™žuT÷æ¹Ą?Ō­Fš„ćeĖÄ0"4ŒÜ'ī{4f9ōdüOy #¶Ł K»÷LŻ_Ųō[’J8Yü¬сٟ·üCRĆźP[!Z²ƒ¼uG=¼Ōг°āanųg <Š _?1Xś/mĄæ’_¢~a2øp؞·Ń{} >ł¾Kxu©"ƒh“õLš”]Źś³ą¤é–{6œV~žė滎-I©2€4ąo ”Šų3 R ĀtŪłŁ°ecAQŸŗŽūŃČÖčą·ĶŲX‹†o£eŃrG*{wšRīĶŚ’½H{ąæģ Hļ2ųļhģ š5ߙ0ā@`@>H—(.-ŠÓĄ¾&eҹßĖźė*Hi;`Śėą‚Æu7†”j(eŖ½9Ė” £µ±4śI€<šOĪ1;ŖgęĀw äŗå'hM@%ŠlŠtŻ™¦C×$¤®CøD„šK¤H rēč÷»”€ ä¼“ H‚¤p ļ¹Ū²„€pŲ ßéļ˜°m…u«7 µ%†og|…^ū/ņz”¶yP$Œą€ Øétˆ›1|æa!¾Y¹H(Nh’M”I“4¶4"Khä(¤4…ʶdé:[BH[ŲŅ4RNש K€”MD¬ °Š5Eģ6œÖRŖ45ČI@ŌßnŲ­÷ōŖĆOhH”ģÄA‚2ņ‚õ3GO{qļž/Īœ¶‹B×Ä{…žœwŪ½ ;<*‹ęŽ}°›^Råxo0ĖÆ|žįė›k³L–o”QY÷Ź Co~ Ü`f’¦;·_“‰ŌĄę#:«ØóöȦņżžÉ·šēŻė³mŽ­Æ<§ ač½_3‰(cŽnÖ¾Ź Ķ ””RęwŻ’ķˆŽknHāwæ  +„?…hŲ ś­Y†Å”(NžÕŒgcļØc’mc7¬dt+ÅīS«1םó’y3‹––åeŹ-²56Ąŗ.“@ž§-Ģ¢™Ø{óÆu|?Wl!¶Äf_Bśæxč¬q“²p>Ūz'ńŲt¤ÕźģØćĖĀåDXŻ­¦Wćso]6ąü£QšŽ«xܶq0aM~ Īü¶S; žC Ļų„“u’@:Y÷?÷cD^z—Ęšq6 ¬Æ€SN¼s:[÷ŲĢąŁ,t›õ>öhiĘ`©”©[ ęļ~(föį7żūōæč?ėS<Ē %$P?b;œ²ß1˜Ÿķų)#óĻ•xUŁ(żćÉ_9MæšßY§’öźż_°ŌI5JŲ%še1ņcąqģ–ŽŠŗ•Üø"_jš†(^śF¢ł@wҟ™(~ pĄ;4 ųÆg;ōD|ćS Ž-Xpńhź¶ČžŁkļ箳2JL„ üUFÖßy]§ ”_aąE:ųwÖSąßVīXB)A ޹—ņĢż,&K ”B™,”AŅbKk*(īUß§ĻŽ‰hdL»iJf“®X‡†Yó_W“ZŽH’•Į×ĘžyM’:; ųo\i£y½@’|PHC·āB„Ća_ĘßĶ–ĖT&ß[­‡&l'ė/ š Wž/݌æH‚č“}½²¢äc3Eks!„ ‡pU€·M ¹ó&AmŽĆ’Ų2LÄcq$bqŪFˆņ#””™”¦AÓõŌ<’j€Ō܈DŚ:ųęN.@ŅkG(’ @”$’Ē"œ’†ģJ” Ōļ>OÄX·zZš[ńīK/ćū¹sŃ­ŸŽP”„ ‚Ż$Dęµ&€4 ze?„p[7ęŒøŃŹ ÖϧoV-†&Č™¤±%$YB%ˆMMs™B#[²eĄń`AJ—dK)ģL"@5Ū1 %eĆN+ čŒĄ+ ²«:[ „¤õ­•‘k›…J8ėej<Ć`z`Žż×5%Šw€’pÕg»č.I_ųzŻAÆ:īĆVę:­a½ł›3Gža$XūŪ$Ü}3I€ĢR 7 mgū®’Õ»µG¢p»Ź'V¢›><±ßĢ}æ€UĆ'•7õ½ükeū g”'Gææč†ņ5Ķōq, šs”ģU”Ö`na)öœ^Ļcßs“ļÄ'Šņ‹p܇›0ėč‘č¹bžQ1<±ÕČ{ųĄüļQš"æ(jQfšžB(MÓ¤2ĮÜ) Įœ@:BPÅóZ9Ģ!Õ⮋F»o"¢¶2Įßql!¶Äf_Ņų/ B8ÓLą."|ß·/Ęæ²k¼õ‡TbPÕJĢ‘)`ą[‹pHæAąlą†ixѶq€®ć!˜¦“ĮČėVŒćŽłoé@WĄ\u’‘®’^Ż’ƒ×`· «ńfDŹzć¬ĖoĆŪ›Ėō/ęą”ģŽ’–š|3žŅPĖ˜S-€õłExj—ƚİhņźČßy Ćę~‰§Y”±ž•ųė±ēā]’¾š•ī$üāƒŲkõÜ'$ŖĪ¹ū ŠuĆæ_ü'|ć·žg[Üļse? @‹}zd(rc!‹,SvéGVģ‚fÅ{Ģ­eųŖżdt¦”@Óķ–­æQ±;Ųz iÆüY+~8ŠlĄÖ³xŹØ¾øNYū ¢¦ zĻ Ż„Œi^?lj“õŗž%\£ĄĄß#¼­³eż- ¤üY›…%$)Å$„$e³ ‹Év³ž¶)„ –Źda™$˜m­9ưGmŸ¾ū'ņĀŪ¶‡\Y)4/X††Yóa64£ct½ĄŽŁ1ī » žŪPćķg’;M,8āõ µ‹,h=#…AäwĖG^A¾ćĪļĖž{€šIö„†ÖAJĖ­÷Ļ^÷O>Į¤ ĄĶüKéJē!ŽŚ ńÖ'ėO”œ#yf€ ä”;ĻDźxŁŁš)½ęGY †aĄH°ā‚B” B HŖ¤ī–-„^GŸ:€$„« wŽ®Ģ_Hą—n­æŪ¢P$U Y®a›G464ccU 6mØĘėO>ŗŗ(€Jm)–š}me@E‡ …ˆFŚ_“Ķüķźļh~Õ2!ŠDJ $Yš$p<¤dKčdiŁR KčŹÖ%ŁŠ…­ŁR'›™X”ĶĄSPģųīiłIj€Ģ’ē4ų‰bƌH‘Ī»yBUÓ  ¢5}{ź¶^ž/›“¾$‰7ńīŠÓFĶ\æß$Å"A’aHį׏m×óĶŁufYų³UĒUėógTŚųß GŸ>)[9@& •ɶ ‹ÓH¦inV €Ō>¹ü¤ –Z:hģŖ) ·¾jߕ§Ł‘¾×PĘü¢„÷O(]xQ•g ųż^.µŻ/VżÓŅØeŗļÉRĖ—Vbeøõ»—ŠæŪu–÷z=8ĢM“ēšs—¬\:x¦ Õw<‡ćö? v ą£ ×ĄķP?éE“īÅĮ­­x€ÉĒG_‚÷O¼mĄėæSC@ę“ŚXEOķ°H8~ą\€®kŹ0Rd@.ŗ³QQ}Sū]Å`KlÖų„’ą‹į)6u+ĮŸ¦Vcn ƒ‡£×ŠEXŽ8*ß\€* ·ō—Ž»q¦G"8ė­<§ŽFßåsń13¢ƒGbĒkŸqZ²yўōßž +Ņ’G®Åø–zT^ż/¼”éś’ĘCؘó9žQ Źzcā…7`ŹO©ūoĻń?ü?q=Īo®Å…@ÕRbƒm£;+t÷¶{Vā†ĪÅū^Ķ’ū/bųüÆń Rč‘<¼¼ĻŃųū h̬ū’äTĪś“•BI÷^øž˜‹ńņ/aųēĆŪĻ’<ćŽ?-üąß/łŅĮ?+Š ¶:m«“ HŠÖ² pĮø[ó’dkćč°ObÄĒ鑋¶ēšbMÓš¾Õ°Ė;~»IūŃź^x­7Ą*^ŖāG¶²DųīĆ„SŚHž5@)ÉVą”¬ßĢpłĻ–õg‘"œ“ HĻåŸRČüŁOVL0YdžŠ…°Y¶„£%+śœČĻƒv® 3£yŃrŌ5Vƒ_½×> īī:ųO.ž•Įīa6ų· ĘĘ9&Ø ½WĮPÅ„EN­¼šLś¼æ¾Œ>„²Ž”P¤fŗąß“ł{„éŅzš;`Łė ąh!ZšŠaÄBÉģ?É$ģGšO¾·“[*ą ÷öäÜ2–e;ʁ €¼`ŻņĆžĻ« Rs””® p¤ż2©pyźrŌžäßĖų§Õ’'錜דąĢuSuj75`Éüxū¹€n•:„Æ‚‡!ZšAīåz3 `e_† †ˆt hN4bĪźyXXµBH˜š€‘$™šF–t°¤N–¦“-u²„d— ['²!HII6iŹé H‘.YS˰6 iNY€_ ¤ü@ÅO)"ąĒB'č.šįźćGĪX;žN×0pżQCo=·_Ń¢:ųĘJš®Ł’ļĢ"E” ož0ņ–»»é ©Ąnxtī½g»$ļ7šÉ?ļ\öŚJō”wGhIžSIŪ6Yų€ŗŸ`Ćp^Ē%ōhļš®£ŗ8ŪōÉ3^ęķós’ c’]ėö‡…„ÕņAįĢĻ.ŁųJņKß¾lĢ“™ Q&U7W|Ōė~ˆŠō¬{Zg€vH€l~æd)ĄCŃgõxĄšėāG+šµAų½ē1ɶq¦xYH,“ œ'$^žjįld‰=~G„3gĪŌGŒ(źivO‹l©±–tļG;³–¦ųq@Dy’— ·[b³ÅĻmüēÅb€Ęf,Ū£»4×ćU`W †W¾ū·mrö č}Īõ0€ÜĄˆ0®48óĮÆ1`ČXēG”Ą.½1fŻ:L•¦<> ńöŪŅü)钝ēąŌ¦:ÜŖiųśņąŠ@±ļĖŌ­ū’ō”~ō?¼¢V ĀQ§^/Ÿ×ōļµa×µ‹ń$»¤7y.^ŒäĮ¶$čżÉ¾r&Ěq8\½w““’r1n‹ę;÷Qß|†īÓßÄż¦‰­€Ķyx±g%>.+Ēś–fDV,Įī Õ8ł”Ž›x.śMƒ’vźż¶ą_7ā7µ€÷ŅAĖĻåMŠÜķ5Msz;»×źnšø‘ķć@‚6®ŸŁOj š¾Õ8nž»VµmwœŒ2xyB üßėNƒ’’øķ³’dÖ?ų{Ēn)÷\Ā‘’31łåž‚A¦OīoŚB*ÅĀ“YJ%DBqxC’»·ķ!r·™f eÉ*ŌĪųf]cĘAl’?7ųglüք!0 t]CIy™c˜ēü~ٿ̬…”š:hŅHÖ’§ÜžSdAŖŽßsż—éj)@h¬+†e€/Dņø¼n^øwÆ® `źŌøGē’`3ĄPģnĢ Ó°`İM”€†’¢B„BAĒ”PóĢ}õ’n¹BŹōOŗąŽ3ō||€ß·Ģ²æ3 ¶²±~m5š›ZńŁ;ļāĖ?A“»D~ƶõüzH jL5Å IDATX>n®‹ž Ė,›yń²%3’ŖĢĶŽŠg øi’¹Ł”žŪ÷˜¶ĶM¢eķ7\¹Ļā#Čą{˜…«īŲ¾pĮåė½qü$@3üUÕ-š/Q P ź#:[ pĆæ÷Ę}^O`—īŲŖ”“™Ń+ĘYŸ¶āUųCG™ =ߏćd‰=6³! ūu¹YIę™z}}“·”ča™ĮœI°&LfęÜ€®{õ’Ī>I ΌGÄ8*“‚Ó€Fe£  ī’Š!ą`Kl¶čˆø>cłęČžūc’ŽX[…ē˜1Ś›R0‚³æiĮc@nšW†č§aąsK1Ļ[V ĒųoAøÉHą’ŅŽŲūŸoć«lą’üæąĢx ū—ōÄ?†Žŗlą’į›ŠwĮ\œ{żpE( ö²’w_„Ż7®ÄĖ”=ļ\ķįū!Č0ż{ėtŸöŽCīzö{pz×ę®ūšb¼b™Ų¶ wŸz-ž¤›ž¼’<†-œ…»lƒ@ૃ'ąģĆŃMõŠ_ŗ§××āL0Śŗ'{ó ąėƒOĮ¹½+Ńā_ž{’š„æ®¼ŸĻĖĖ;DÄ~šÆ`]#Cž“ź.k`ū@ȇüģŒ`©óҤXdÅŹ?2/ha{œZh©”įGÓKßńĄæųŁėżY0‘=ėĄ’9²ž¹Ąæ—õ7l‡8šöf™6 E‚„$“ķfżmƒ…RBXaJڶ¤lQSŽs›Ęž}³5Y”õzø[µµÓæA¢Ś¹żŹ žŪ®H_Ō!ąm‡č4±ŠEšßĪ v ¤g[×ųļhģ“Sź<©żŽB¼‘PŌQR^Š`(”2óó2óžö}^æOƃ¦®óæü' „ą÷ä’$Rµ’2™]ØŪX Ū֒­’@šĢßyęb{J;"ŲĄĢ«ėWÓ§‹gS«Ń($™$ŲŌ¤“„ʆdiŗ0…pJ’LÖŲÖ!mfS¤( ,ČöB’Ņ=5[œRh‚ķ6Óč¢@Ó ģWx$€sųŽc kē=¹š–— (š—\¶ćij¼ķ,ĖQcי}Ļ¹ķ?‡ś€&Ģ –ŅˉŲZüÕ­G ¹óĆäT•Å’]zĪö³kö¾†}qõ#īüXHšo9lßŃ=Źū]J$¢É ”½āóÆ^ø“¹©6‰÷l{ĄŸŅpÉųÄ;,ŪÕüśš÷ņĻņßXč0Śķ¦īhD†¤(Ų‡”U'e’ķ7sŪŪ#~lkĄp8Ļgóų1]ĘFń—x+žE„y%½0aʚTėhüŽ ēϟčŻ[Uˆ` —W`–RŖl€¦iŹóf#8ØZ]ɀG451ēē7“UÄ6ĒńżŚ‘S>¹%¶DW¢3Łlnšļ®ÅŅćĪÅīĮĪ’ēēć0ügFfĖææ=‚–ląöł3ī$BmŻ\žm¬ŌŚ‚Sm {o\×ļ>Ėé"Ł2’eżŠ˜ˆćÄ{®Į®~é}N Āŗ+īÄÕiąhćųæļ”Øī; §1£č‹wp·ӈūos’ļ?F‰e:Ē4f¼¤ƒ/Ę‹EĒž…Ć£yxĪėo’ę“xrįW(€üB˜§\…ūvŲ ć£xŽČi‹čZ Kšļć/Ąé™ą?3~KąDaDD)gųgņƒČb1( ą½X|‡\ą_)¦Ćō‚ˆV@ģ]§X ;@“‚hØo<=P~ĶīZĮ9}µąCå"šā ßut ģ¤ĆōŅw“vĄæ’: ž-™ąŸ“_ņ/m@ŗą_1“ž ›…ü3ƒ ‹eB‘t”AN(i–“l[X ! ša±–ˆ+]™¬7ö_>rŪ ė*śŅų­ZµĻMAÕkS·€’®Œ½™ĮĖz…xB O>DŠ1ż †Béréeģ„S'ŸTøŖéµÕA“M:m’¼æRŠ„t{cKMGnļ–x’y„œ6yĪ“R“gW€AšŗP¦¶ x‚ŠäIšÆĄųgŹ’J1X)ō€Ž¼nłŠĆŌ6·bĮüļ±|é*Äā gsf(›ĮŹ~9ź19ęšJœ’;kŪSß$9µ¬±±«W­ĒņÅKšÄ?ļĘŚÕĖP24˜ü€ üHšļžsłJ4æ?ńy߁¹Ō²DTQŌ—Žw°ŚišvsžmRÄ4UŲ4UX™ ;l™  ² ,[éfA#Aŗ·–©tŪTŅ“•“LŅģĖ„©4eŲĀ4,–Åd)’–Rén;Ź£äō‰É/£ Ī MY(å–H¹æ1¬|­K“5ō.ų”9([W€Į‘~oüpö.Žv^¹×+ß_2Ń’yś§¾č¤ü`ż'̤/Ś“Ću“^ūĒäT…FKGwN=[czM™£“²AvP#]×әƒ3_ŗ¦Ć‚©1t’¶o¾ī~¦é|Wėŗžü-“…N¤ī ¤ŌÓĢx„ūf7ö°żĖ»÷æ–@Ń“›A!+·sČIiå„īŲ™ōPf `Ė÷:!¤īO’Ēā»Ń5Pęzļ~gÕ®ŽcŲu³Ņ„sk·~o›%{Öž/V°Ćė¶Vt:ĖČAJ/8ތŽ~qŁĪ w¢{Ś{Ę3i€„JÄŅ_ׯģōG±ļq¬Ō¬§¶‹4¤7@u›:üVOʶA\oÅÜńŲcŲ#ųõl¶åwš+āæ_÷'ņrŻßēĀåĖ? UW;“{/s–z_;žśÜž.|Ńh„į”46"ĢĢ’'°óOŗH[bKr“ż»1Ē—ĘO5žĖ5±äX沝ģ?¬ń­ÆDŪ–§nĶ.ŗFœÖzŪzŅ’IēbŌ¦*ü@Ō21źÖw0¾=é’åĒį4ŽōÓšģ—’{dĄ©¬ŗrõžŸäßīN)XL.wĄ7+å`(ål£”‚e˜ˆ5µ"ŠŠ£G”Wō‚ī•x~Ņķ @Āķ Ļ,0Y åb „XØ­i@]mc²ÅŸå6õž™#.–نMŪ²·Nھ¤k}Š@–»} ·$šłė•ߊÅėW‘ S“d  ¶¤&L)ČŅń¦ŌÉŅŁ2D– °„ŁRV®²G †mgUYų 3”€£H‚Ÿ ½’€Æ«öļ’įźć&٬u€¾y ™0ź¦`ž†]Ź__zĪ Ņ4‘XüČĻčYŚd! žżKźåąŽł?<|ŹČ«'?æčņżØŪīj( nxćōŃgŻį zƧ“ėģļW0-³}%€"Vn¶æ+JīŲyō§‡”½|—Žū%O̦śµ“¾śęµĻJg€®šz±v|ćż,ó’HŹųvŠ›Į=SĄz-BvūįL+ŠėJ8޽&ŁĶoJ«~Ė`7[–L‰2ͬ½£ņ½’;Śóų5KŽ²•ė0pśFGyĖ‘•÷bs؀ŸĒpõźĻĆįnyż ø·ó-Ć,ePĮņNf–R”€¦yĖs( ę3ƒ/˟TÄą4@4Vh713ŠČłłZœØG»IŖßCüŸ`1¶ÄÆ?Uė“ ü‡½öÖpļŽ:žvp!¶Ś’Ąę’¹¢ß0<@¬\€?{ĖB æżCąŠg1÷Ę7pėøńų»ma‡†uŠrµü€‚B,ųi2ü#üūæLŗ)’IšļĆЉżk&扖V„ÆlAwžŪūVś‘¦m×eٰc¼ÕfaēęÜĪ: 'ŠėųOĪ9µį¦…& ‚łŠ4„å%ŗéŽI)!…ć‚Ÿ^Ļļu!<ąNŽažś„’ÆtŹ’Ä€«ŠRćIÆ% k ČJK:ū{"{bO¶¤pµóA`ŀ¢äq²rˆĢ»+€Y#RĀ€aŻ Įp²ü^¶Ÿ• Ūf°ķ»ä€CAŒFP³i¾˜: _LūkW­ƒi*ŲŹ!Üį€d€;/÷ÉcF"n`õŖõX»r5žł×}X>–Ž8B؁ˆ4bUÓ}Į„7ĄŹė-ŲuĘJęĀÜtÅ'cĒ—Ķ<ź’˜ƒfµDpbˆō¦²#÷HčéÆłk—¬ģ:·  ó÷ŹÅõoŅa¬ć™‘ µ³F…¢ŻIÓśŁ ,÷_ż›É’¤‡ĪzÖ1) …:‘ĖōuŖ®ī ķÉo?¶[āWL–ńܝQ`šøCH@3ö Žsm l™6m6-6-„ C…LĮD !# £€‘P«•qÓRŪfé©Ģéij)wQ <ƒIøŽŠ$,”“H² Ł|„+æP d*„EńÕłĮ˜ Mƒe)¤ęrŅVW?[Y4÷nŠHÅG÷œzåžĻ,Ūf‚®cž†żzßżå÷¾³äģ—>YuōĶ¾ė’|sū‰¦–'ŗLŲLĀØøļ7ĻGl·ĶŽ»ō«ö7!µR%!eN1@ź¹ś 1ć>9—@ę=EÖ7Śzd®Ō}m‘eĆÜ™9!źg53 K­Žuöå,£PZėźk†O-½Yƾ3 EeÜYčĢ] @"‘ę”õ½/,Č6„L@k† Öņ§’[2H’¶™*€\$@G*€\jŚ!@uõ¢üźź™cō:ŚK}ŃI2ĆOčŗöSÅĒ©HÖ”tVąN€¹sĢźo4¶[āGĒOĶžg~¹ŒÜŻ–/D?Ųē8œór ~˜ŅŒ^ųh\ÌqKēὉ»”ŠŪ§”ÆÅćxśń;šĮ g ‘Ėür<,‚sׯĘēŪDq¢·ģšżP¼`:>±Mo›8Ŗ®oģ>’žął¶æ3Åe˜ @,ł{Æ\‰WŌŽGīüē”a]PuĖvR2ˆƒ&Ž‚į(ī‰ĒqņĶēā$CĖų²÷oŸ­ÆĀnT~ųŽæ]A\Ö “ņ ń•yfŻæ•ÉŖē’SŸÄp ]ŠwÄÅxK`Z» ·ų:$³’9Ąæ‰ŪˆŠĢŒüi’Å!@ Üošof˜żRąßKe”‘-ä@Jõķ£G>É’€Ī‘/ŗ ł4œ¢³øõļ3…1ĄŪß’šƒÕŅĻ[žOZ²}‘†ų÷$’Žų‚Aų÷€|{ąŸ”{\Y²žl‚tļ½”‘õϬõ–—õ¤I½MÖß&Ņ¶Ņ ƒ56XŪŠ£×v«†øŅŒFs&&bk6`Ķ³ļ śŻĻa·fłnüēˆN’ŽFėˆXhoĆö¹‰öēń“ęÜųļĀ€^:¶I”u£B g2¬£ °¢łŃ6)·™óäS$Żż]×{IN–_óg’]BAŗ>R¦Z J·U ć@n«<ĒMß²erśn…¾/ėšžrj;fåJž™Łõ`ō¬,Då 2 ×@ ø{Fķ0•ƒ{ƒ„pLžÜ’e+(·@);I(¶””Ū¶(¢!ƒA¬Yŗ oæš"¦¾ń6–,\ŠXĢ„m+—HPŒŚšF¬_Wƒio¾×Ÿœ  ” ¤Üü;qͳg’}ąæ“¤SöõéX6 uźĒH,X¶²gų(¤i·A;Š”ŪģaGĀŶ©ĀVBD””"¦ĮaĆT!ĖP!3”Āieq+h¶"ą© Ci¶khŕę©H0‘§ ¶OvĢģx±ä"@ųŌŽ±* ī$ hĀlĖõpŒū4wŪ pÜŠ[ßV:斝zæuÉųŹ’ĢņųĻVŽšöŖ‰’‰Łłc’ÆÅ2ZÕŅ’ĢūfŽu„-ĀŌ%@”ŠHŲ [2©8ŗ1‹·Ž’č‚Ā^1Q0Išµ!¼å Œßaģ”;v†Če hw¢Ą3,ūbæYzówD—=ž“i‚ŖG½8Ģ ” Z¼źö”Ÿō}į‘KĘMĒŠG€l™7ĖŌ@ČĖÜX;ü” FĶ„jФĒõi€š—,ȌŽ2żæ”! ?6ńŒ‚źśYcmjŚ ščƒä>)KĶ/ó~׿0BœžLE½ó§żž§æńŲBl‰Ÿ-ŗ*Zųīh­Ē듪å) 7`+šŒn׃ø˜Ćē|޼uRāi",~ķqÜŠŽųcFćy"ĢnmŃ#Āør @_г„Ėzb·Ć±µ®ć9ÓÄ)Ļ܎7»E€“ż€ÓoÅwDØmnĄ$£pųї¦·ßĖU÷ŃQøåńIč×@’8üūD\ˆƒ.ŗ×4|ŚP‹I÷\ār"Ö"ĖæGš¶Kp^s®åįѽOÄ ogśw֍xė“«ńv¶×Ž su’ßĻB·‡/ǽ gā­īĀžŽrK‚¤½;® MĢ(œ÷’ō-T“ĒŌĪz’‘hŠä;sk¬ĒmĄżļü ”Ń“{ĶdūvųĘI#Ÿ7[®µ4™ąß«ł?Š Ÿźł6( ’³éī×͆½żąæšķȳõl ŚqZž< K½æwl.ų‡”šĄæü3Į?+¦¤ä¤l“õ&’²Ooß\Ye°°’Y!Ų†%m›…e“iqƒ„2…lŽä÷X>bkŅ: IDATō¹õ½zŸČBF²~«©Õļ}ŖW>€QS—m“ŽĮ’f-? ü·Ē0tųŗŁv ü·G,üH5Cę:ü[1FŻ ziāĀŃ0ŠJŠ „ęfž5'»/“dĘ?© ‘ö˜\łæ£v{Ż“ė@äŖ¤Sēļ–xķ’’ƒę ’3W-`[žrbǾ8UĒļünAæćčĻŹgōē,'I°UwōŖ(t®u  =ś–bģn[£W?§ģY)å č·½÷±åżµ”,[)”ē磩¾Ÿ½÷^~ģI|žŃtlÜP‹Ö˜fŪ¶±n] Ö­®ĀK=Š/?š†¼r™³Ž?焦lŁ’÷9j;vöYŁ0—,Eė‡ĮZ± 9Ż„z”‹£·ŻWķ?Ҳ9’°TX™*¢ ŽŲ^Y€EA#”B†”vĖP+Aø… [J3¬Ł&KK‘fĒH7m¦a å©LI¦”„ !<53(³$ 3¾ģz4:ǘ›( TĻĆõygéÉŪŽ÷z[ąšAw}¼×€g@ÓŻļz%ĢDD~²ö˜›•’Ż [°zŹ Ā™7E“ĘÆ >^6žŃ¹7×år—łH€nĮ”]Ęri8Æą(°""‚R컲~>i$3Øø[Æ VŽ-ĻFdĘęščńįØ7ó_¹Z»ļõR(曊ĻĒŻgøŠÉLYbõŠIe‰Āī@ÄńzĢ’=˜Č_ šĆĪ öŽX|ź4¦ą®J¶_;ąé”›£ SšcJrybyŃŁR€ĢD]Wƒ“¼ī£Āš†™;Xõbe”/eūRhŪ¤Óķ³šÖ95@ ąN›dDsöły~ĪŅäßzl!¶ÄŠŸ£ķ߀Qø‚+čóæĄßĻł„J_ÄqŸ˜Ģ6ŽŲ«ÄłžśÖÄ-ß) +*Ć–…ć¼m3æxźsŌy SŒ8®ß'€{m Ćõ ųj¾~ś=,}u%N Gq‘mcÜ“)x’ę“Ń×£¬7”ų†Ńņ¾8śü’`©’5‚ZöcŸž:¢F'|7Sn;§Õ®Ē¶‰ĮFTÜöžGć$©aN]5ī½óœœŁņoņ}8µ¹W…ņščI7„µa…•Ćōϟż7;Q÷’ķ‡(™:/&bO„xK³sܖūCk[ qbķĄmp&āJ”×į…÷žĒŠlĒ 8ąßcń£yX䎓4²%سąp@÷o ü³å j‘@3‰J7ˆ~€fÅ{=ŽÜr ėr¶Mæį š)ĮĀ»ŠD’ˆ.Qń«ī‰m|`r¢ś¤É‰źSžo|8€‡Čš}y†ćж޿=šļÆŁ÷Ą?d‚’ŌÉóIžŻõŠ™b†ŅüYH€ ¦Ķ¶Y=@^Ö?nššgͲZ’øÉŅ4XŪÆ’žUC·ś«eµä`ÓBķōŁXżäŃ“pYÖĖć]<ß“yÖHo/¶˜žåŲÖ½Ÿ·šDXC G>t=€Ņņ2Ķsś÷Ą>%ūœ^‹?™’ļūT~U@2ÓÆ ×äĻ]ē–$Żž]R@¤«4pÉMH°å~Än›?†€c©ē‘䢳ēģĻPpĶ’œ~}`ÅŠƒƶ)GaI4™õwΉ€ģ ]×ŃH?l·Ūō¬(w$ü®€ķ‚}ĖRP¶£`Ūv•6”eƶ-G1ĄŒ`( ¶m,š9 />ų¦¼š ¾›³5Õ Xŗp1žųē=X½l) ūėČėŁ¾*5ׄĪ.’ļ˜7jwģŽ:Mąxń¹ß¢õÓéPõõŁ7Ö„.ĘVl-½§*Œ–nY€a©ˆi©°ē°mØ ‘@Ų0TŠ2(`Ä“@£!Ū“l9jÓVRYj‰Č!,”©šJ”Ū'²Ż’€ _hR¾BHŚ·ā±W%Yu0gć^W|¾ī°ä÷a6@LLLМ_ )«OÜŽP¾PYūŹEćνõ/C’öžYcĻø,OƝUĶO’¦jĻ^¹HåūĪĻE”õÜcė±;ßEĘ9Ÿ—ó‘Χ'Hžæ с•ć.‹†ŠÓü²™nN?`-2„±īe­ymäōż»×Ɗ‹ßɾUW¼ö™Ėó2’2­Ś¶E»ÕŻ`D†?%¤ĢļJ6½µ×°łū.Ģō HīӅR€L@fl®R€Ÿ[ŠŌōQIuŻ—»ź*“ŸĶܧ½1³A|MvŲ確†õcY—¦Zś(€’eößżŽb °%~–člö’DPźøé€<ģóš7ØŪżHD„W•3ĻŚŽŚt¹iCzOæįŸ„¦NÕKļģ-õ’ū{•Ž Ģć6(óX \F€Õ’’±÷ęńr”Už’ūyžŖ^īž{oö¶ĀŖ ˆ" ‹ ø€Ėˆ (ŠŹ8.¢"£¢ćč8.#:ø Ź&²oBŲ $ČrCö›Ü½»–ēüžØŖīź¾}·0|9Æ×MŗkyŖŗŖŗŗ>Ÿó9Ÿ£ó’yŒŪv޲Ü4]ļ/R’!¢+$’ńOœž+Ąæ1ˆ«+²ž&7µĘ0ąY§VÖ_yš­•qµõ¢Z’0†ŚXQ&Éśoml™±jŸ}/čmk?>u(+b`Ķ:~{3[]2øĪ,1ųīēz§é_ͱÓ4DēRE~F Ž1ŒŸ<×Ķąč”I_¢0‰“?2åSÄŁ}eā–v‘{æRœÖ‰›æŠĄ4fœżOµLjüøĆ€NĢ’J„¾ÆRÉåø Īš—&§ĢÅŚč&Kż“Śūś¦,ó÷D]}.ś :’+J’ĒDCōLØČęņģ¶×<ö}óž4k& ĀTI@ā FĄ?ž+-$Æ£hŹuČäó¬Yµ’›w5æ¼ü ~’ć’”0Š;b½’pēWiEÜØ¤ā¤o«éߨV®šm·l”’žū(<õ$„µÓj|C›óīżŽRož³0°ŗŽ6uڼW$. ēł66[2 ōČŠ‘ (Šć­3H Ęj凑 ¹W¦KBŹ ō¾Õ`ZĖņžĆ¦_’UMŲŠÓ|ēŹSšßO\ž©»VŸ¶Ē– 9Ēq°Ś "Bßj— ż»ĢI¦ļ1īĮæ&žķńs®øÜØ SŠ™‡ÖwĀPŻŒvŌp$Ąģ9ūī½×Ģ=.ÕŚģ"ÓZ$PVŹŌ©ŗõķĢ=`æćĻ ė_6ƕ€²AŌ2F•Ķę¼ŌóÓŚ7=pš–ŸøķĪVHoŻÖŽ7iÉG£¶Ļ1 °v÷’›¹āš‡o3-ŸŠAĻĻw{ž”wL_rĀr¹+@Å.Ö*ˆc$CĄ-kĒĢõŠ×J°aĆķÖ¬æē­żAęh+vJõ]ÉTĖüGĮo†‰ @2)›Ķ–ö”ŗåŲB)^|ń ©ŲIģŒ1ĒöŹžy$łoäš¹°ČŽ_»šĀמĄ{µį'6䬟ż;×~žä²BėÓß`QęĘ“ÄéS_Ć{V¢ģņPlhūŸIų»—ųD&Ē··X䬒(-ićæŻÅ mSx—@¾c%·~å}Śē¢.żüś_ø- žahérćoO'ŃmK¬eŽž›“½*©ū?äŗ?śENÉŌqe”Ąū’ėbžžĆ‹#W’™ (¼ļ³<›6žK¤’Ć}ĪŃÖż’é Ī |j͚żßĘGœĀĖe’Óą?‰“?Ī?v_ĵf“łu\ö“ÆńĶK£ ¹j𿶃\÷VNhϵĄu ’©y£’ƒĘŪFšq«4’®¦‹ÜWn,޶+@Z5J¦”×Ī0I§ļ†€IĀļƒoš°”ėŽ£B;Z]aŲ­Õš2’įĆq†č!šDÜĄu»žcšżkllØ=vs³ūFT¼įvxgüó£šļ5nPŪ54¹‘Ć„Öra¶žwüµ—;ÓĖ,õ©,_ <.VŠÅsrāU±ń<ō ü,ߥ©öpCõŲÕ7ĮZćŽŌ2ļläc½|O)–Ķ]ÄÉ_žP®ū’ö'˜×±Œ?‰0aöīś™ļ³ŒVMö?ķśóoh{č&¾;cßy9’a64ńĶĻ’ˆ¦×©.»7oą&d²üiÖ<žėŲs" }µ­Ł’ōÉ^u9ˆŠøĖn|ųŌsø*Į?T¶üK~Œ½›IŽĀ|?"o”fKs+’»ļaüeæ7³ą±ū™x’-|Ė+pˆć²ģŸįōʉxĆe’k‚’įž“±Ņc¼Öą?Y&Ÿśøę’“ßģ÷ż0™ 0sż™ŖåG¤Įæ¶(Iģč4O²Ł^G«¢ÓW’ÉēüĖ0’ŗā˜˜0µ^¼nъ±A„Ü"š_z6®šżP5a؍„¢ ”h½¹¹uVēōégZ×RÕŲ»t›ļ^L80Ź_āįĄ’ą•“F¼Ć€ŸQ c’Ćlpl ½Ö¼aĄ’HcWŅčM±Ė²ł¹€ģ”&²ćėhhldüä 2ž@Æx_®ļdūŗœõWQĘ•(¢]SĖźūP*ō*Źš+„QĘÄŪ(ŃXN”™WQv>V.Ķ” ‰?Wņ'ń‰²ž āVQ€i³›™<½%:–R–ü“žß¦§©iUš&¢ A!Ö®^Ć’ĒŸ æ§'īF¦AŁPĀČ@‚P,a`‘ŠR(°yĆfś{ūȵɈ²’š§:5!Ūdb!użņŚØ=öŠ+^U pw™FfĻ=Pnķ›ˆˆ<½īE{ß Ļ­<ķ(O¾ 6µD’«†l^ĶßūĄ3ėŻścJ_“č`Ƕ~*®óOśi(J…’Éxbkžg…’„}‹l5¤wÉ ÷}vUĒ“ėMX>~ŽA’_ƒ$;kBÄ8•ō‚æ÷ću·r~²¼ß[žæęøīŸ‹ÓųløA]7cÜz«ė߆Ņ-J ÷7ÆžĻO·,łĀ:€z˜vBnÅÜ’ū†ušĪŒ–ńi\ó›Oxņ£Łlå63¹č}ŠäT¶ƒĪÕEóź|$ķjShØc|›øKõ7—ē5yČø¶Źeū&Gļ'ĪDf Aæģ²øÖŒ8z†X鬚Z<cßM¤Ųø Ōv”D Ś(‹hc”•@[1&c%2_c“ @Mé=±3‹ƒ±"±łŠc¬ˆ‰n΁ˆć+ å+~ōŚuŅ:ž‡ø®cć½d2®-£y™L&š^@$kKˈˆäÉŚžč—ŗŗ¼„W¤—^ih؏–ėŁ*"---6Éʍ"ćĒ÷”RŪč0šĻ‰ĄĪSlOē„xN)ÖüŻF­÷Ņ‘°’‡ę9³Pąæ•b„ŅŽ‹¤ėž”üW×äõlÅżĆ8§{ §AÖ” ™ ­Ł¼š0>üęX>Zš_mś·#€ßbnķa›‘D09ŌŗŚ<ų–LīÅdÄä)ōŃĖ$˜š7ŪwE€LhĆ\óįlūO üÆ'؟ˆÓg-ŹŖ2ąPĪUƒ’Ä”z“ą?©÷ßVšo=Ń ”Öāh%Ź „bÄjmCŃE+ŚśÖ]7cĪ}mķ'ˆR5uÉaļ›īz„¾å«kž’š±ƒ£²:ƒƒKF9dÄĮMF‰¤ź®51ŹT8ńC°F”$1’‹}čTō:ŒŸEA ,ŹRP! $ ”_||ń$„ÜĪą?ō„ Oų˜¦uÓ[ČęrL™15ŖÕÆü (O\łĖ’Äč/Źš'ķū•Ń~k4Ķ­©kčǘxl"ć?|U®÷¶cRąß ”¢Ųļ°z¹K”½Œū‚*FG7zе v‰ž1µŃģ:æ•qķõŃQ‘™ H"żOžø\[ās)ĻO•D„B<ĻF’¾ĻĖĻ/內ŸĮ+°V°a’•„IĒ€02 (ҽ„›Ž®np}ZēdF¼¶‡’uķN¤˜Hfķą?y©2.™yóqfLb%Ķż]ĮmĻ?Ŗ·ōm1Z<ķ*ĻŃ:"2xF+_»ā»ĘųĘąė¬Ēń•#¾kTh2*4®”ÕY “QÖQˆŅF”U‚±Öq•hŠŅJFC„€Š‰€ŃZ#A–Öu5R‹pˆRś÷Æ9yĪŻ«Ļų€]š–žųC{~łjŠ%ĄiŒß÷Kj鄊1FI- µ®±~·¹‹ĪwŻģ|“ŹŁGT™`)[øš”|­$¬Kļ¾ļ’.*ų½A- -ĻŽf ~€8.“¾5·žė NćqéåpS\yłīō{ ›lRöæaįµsū'œšS“;°ŽßłŸmæé;9iཐ&Ąó‘l¾r čWNO“ł&¤į•ņūįH€40 00Œ6¶ŲÆóś) ŖmŲ 1ʆ”DÄ5n–Ó@ˆ Ź"Āȋٮø©×£' Æ7`-Ų„°Ą€RjŲć¼#ÅN`gŒ)¶Wö@kžäæaß¹‹Ź7™jIŅ[šxGæŒįg—’Žóß~Ś`1ŃJPgMgļb»üa 7ž”L¼Ų‰žģ±²y-Tė$Īøä·Ü—,—ėFõ¹ØD«•&šŠµe”õŪ3åńūųep€Ö<7e&Ÿ’Ģ7ų‡W@­z…Ģ/æĮ÷¼ļÉdøńżrĪ»S¼’oūgæ’~Į'ś9–ąfxbįa\tš±¬ŚVĒ’AąČų•ļ_kšæŌŹ„{‚š[Q›ÄtäQķkœāÖ/‡ü'ė-‘I·żW„Č€ ŹżŻr­æHĄ’R;0įęā–’ž¢³æwfĀ5ɘišÆÓĶ"ŗVÖāƒ/,ĖFk‚’0Z> ž­«U±PYė•Yķf”XQYD[_“ļkÓ[—k_7s·„¹Ü®5·@Ļ3/²ł¾Ē°ž_s‘š± ąæ4y;€…"«s4!O†:\rā’'ūF"`©GP*Ž5jƒ·č[“B”Ę…hCˆ„ØBśµOAū ˆOQŠm‚-ÄšwØ:xƒ%Ó?OłX1ŌĻiĒu¦Ģ˜J&—­üIĘ_©²Ō?Éś—: t™$@•½āĻ„4·vŅŠŲżŲ@P%˚’O@üGeQhī-†µ+Rrü_©Ą&φń)¹žg³†¹{§¾1Ń1ĄI½Ž3ü%" łŗ„€2©¤%T1‰Ö&x…Ėž~Šžz† š Ć8ūFåJDžBzūzéźģ"šŠ“īīiŽ7äõS5Q;Š|«)M|­źžĒF, 6¾t&N ³×ŽØŗ<5#ƒąŃUĻńŲŖÖž“Ø5@ߘH   \­7§‹ŚHØ2*t #5€tĘZG)IŌÄ GY1N%ą­äµ 6̬vó[v}Ū¬ß<•$ĄÆĶżŃc’u“ œ¶ü+:g’ĻżĄg8Ąq£yµH€)ķ»LŸ5kŽg”čń×G ĘŚD$@šPZ•ī€*•—¤\ (rŒÖĄ@ϵwüćŹ_g¼ŹŒłhH€„0a“ģP*€4 °įĶ·ī+õó²Śø™žµOµ?|ś½9oyÉDóū€Ž#–æ/ČĶśØśm?ž­R-¦ÖO¢sY@±K؟ӎ“s™0uĶ’’“ÜæŚK-žŹõżIĖæČ0vĶOj’•*‘Mć¶ŠŌÜeõ“ŗžŅø&" “S*!ˆLłL¹ Ņl^ē°įU~„M$’V"¼ƒ’äQš\ęī37ćė3”ŪIÖ/eÉ?h¬D€ßB¤¢emDD›H+RÜC|]õwwóō#ņņóĻcĆ &b?d æ@WēV šg²ĶĆŪ8žÜ:M¦!ś²ļØąæ4Į2»ĶÅŁuvLV…¬ŽŗNnž š{+Fy™“Ą(Ļń×ń]G“_9ŽļdÅwŃ”ÉD$€«TØ2&%„ ¢„?C•XKņ‡"”Ā ¤©$GŁ ¹ž„ó FŚž IDAT\Śyšg4įĄ…’ĖŽņ,”Im•\śČļnѹęģĘ;Ī;š¼K¶…˜9oļŪĘMž˜6:IUt%I”|ƒ$Q)Žˆf×6sU „²~ĆŖo.~ś/W« *ÓN“UEŒ² P“"’p]Ä ŹÓ¶Nż@żę?¾Ģ:§()Üײę'ēLYrAé‡+!j©ąõ-čĘMF^[ĄjC×¹Óư~_k6‰ļ`Z;V‹Š²ö)@m Q9€6ŚFwŁ(ėŸ ·™qœ±™Œk)"Õ@”Pģp€ämƤ€n‘.I›¬l” @į¢ŲIģŒŃ…PóŠ üŸ=‰]ėyÖu9oāDnīčą„xģļ–÷~ņ šŸ„G&ä8ž–ī­’‡ä8;›ćł»¶rļŪ§²kēZna—\=_ÜĖUÉr+ćõNŹsWąbĄÉäøäŁ.…‘Įß<›©Kå:±ĢklįģKK”‘­’5aé’÷.䠎•\?kŽžą—xīļW1ž[łipX¦Ž+Ϲ”‹ZŚ"Ć÷Ļēƒ][ų±¢½mŸ>÷[\»µ äoÆŗ’ ˆŚķ@”é’õ·yļęõ|@–ēė¹Į!ćż"{ڐšĘm®ĖÓū½…Ļz,:ī4ø5ąĘīųæ=Į“¾£Æ ƒoö ‡+(NUśŠcœĢ­…Å/JpFæČAÉņuJ=xŠÓréLb¶ä8Łžéwū½ß ‘V­čQ¢lˆ4+šŽČ¶ž»Ŗ_Y’Ym’ ą?^T,Ź DUKž}hßG¬Öa`M1ŠŗˆiXæŪÜS‹ ū×<Ö]?GēOl›»Mœæ}ĄæBѤźGžfņ4I–œX½±Mą?ž6Rć@”ćąa‹ī§‹ŗm7żaŲ}ė-]/ŌĶhĮWOkė8Ś&“År|UäŖ‚  ,’W*ŹųĒ®łZĒ@]ńZéhæUģ®×Ņŗ…Ęq½e@«ø“@Ya(5Jc’÷:’ėÆ]ečܐ$ż/RßŃōčz“VhŸ˜göüöxæbš7vgōA”±„ś’dx]Īųǵ’žnm¤°:Ž%±qɈX6­_Ļć÷ŽĖŚU«ć®–B±@_W½=½dĒ MÓj6Ņ|É ;r-&S³3÷ėŽü8{“ą?ŗµ•ܾū¢ņCؼBpDz'Xµy­ŃŹĆQUj噌ö#¾ÉhßhøŽņußuT`2Nh\  ]`PÖ*;¤/@B¤§o pūŠÓözhķIߘ×öš·OŻżŠ;’ł0Pl0?Xü³[ÕœŻš·Oķ{ī·M īGKøĄ¼=xgcCÓi+/0 P²Ķ†˜(Ÿ¾Į÷üĮ~¶géK|öå•OlxĶüb@õ|7~ķČŚƒn٧oāŪ~"˜Y@ ½ ?˜ńĄžß“Ā&[ÆĖ¤J½·µ`$@ŗ ­€×¦ –  ‘EjҦ/ĻR&æH|Ż¢µ²-‚ˆÖŹ‚-ʆ šč}ų:øĘāĒÆÓ€/āŗ•@±HB»nW€ööü ‹j’żß*€žSĪĪxCĶŅY¹zQ<åūü“£ƒ‡ś¶6¾ š“‡éjkåX ·ŠĖ_ŽžēōōŗēM“_ä+…Hņ¾i Ė÷ޛÕāéBæ8ø‰cŖ·§¾Rl6†«½_™—įGæ±R’>Tōt¢Ī½ŒWŽ|'Ē—kfīŹC-;\Ż’7Ļ嘮­,ŠK>ų%žkŽõ~6~śß9=“ć·^?üŃłÅK‹#ˆžo?ąŹyūrL]??‘žū-®­7iłW£•ž'QŻą¬/ń»–ń|šmČ®}Ż|ØÆ‡3‹ż¼# žµfc6ĒŻ¹:nq3ü}Ÿ½¹“߯w+„Ķjš_ė8„# Ž’ą?yŒ ü?aezŸš€)J’ųŻ&{ć8涍FłG9¹ÅŸ4õ_ŲUe.QŠŠ/rČż­’±F‚&ˆ{:kŌB§nõŪÜĘó3qw+4†H3Ą,'’£×ü‡ƒĮæg“®ž­'ZłQę"šļy|×ó”kE™0°Ę÷µŁ:®u׎½÷łüPą?ģ/°ī/w²łŽĒv𯕦]52WMā@™Į‘vW §²[ŲŹ„0æc‚’ŌŌWžZÜ¢GƀĻ.}.{ö7s?‹Ćō^,pvc†;l”ž®Nc·)VQŻz_o?±ćžU©Ī_)ƒŽ³ńéLB˜üG*’ŗž“6{e—S.)(“±™ Qe…@L4¾Gņ¼GÉé?zL‹ž±eš?cN»ķՎ6e’A“ Pņ PńJ"V\Å_I”ČKœń/ūDÄ@²¬&źCķ›…ˆÅJŌy „µ•I3f"VƒB±Ą@_¾Ž>tĘŅ8uū€”Āø#]1•ėŽ5k4"±yTū ŲĪN wßMŲŃQ{|&ē·×ĮśØłūčzė“÷}›÷}›—øU`ąŁœļ‘ l6l&l&ōÉzrßwĻ:Eßŗ~7,*ć[Ń6 uŌPėĄUō• ƒØ< "µ—Ö‘Z ŹŖIHÜ!ĄŠ(«M©`t/ÆtŃGĻüć3uN÷3˶,:ē…ĪEķÉ|øał9Ē$GØ%»aDŻ¢\ā‹ ˆŗø®[’«¾Õ™†śģ>ū¾éÓõ M§£tr[ˆ{r}¦ŽyrĒQŃr„†€R>U5;µ~†#KAU:HJéĘŻf|aĪmpŖ;T·ū«UŽ˜V6FŸ±ĘÕS£5 ”Ÿ£V½õł“z'¼żĮĢBĀŽü¦»Nžž÷‰’!…M Ļ–?HąO>!·y·_NėžxJ •cŽŌ¢¶€é®żUmŗQÄö¹Cŗčʑ“LŗlK¤ŪNą4=mŻ5»·nųś{•Ŗ{V—vµņl†ųŹÖÜfXĆöß-Ŗh~ņĻąpˆZīų7Ś€CG&“‰.ĖĀš ėźņc„>¬hk3o”ŽoˆÜ’äŲĘģ_OĖóĻó"Š¢×|ś|ą”sĖ_ūćʱwB˜© 7å2üÆršzł¬ gĻfįÕĖY›“3¹ą=4ÜłgĪū×’ä;§}Œ`ej{'×ń‰āßūśŃ|ÉgųĻŠēCĘpĆéņĮ³æÅĄLjg’Ÿ}ēæ/āč]ęńÄ'/eż¶J’7®Ć|ēn TŠŸæŒ}&N‹īX^Õ¢æ_čįĒįǼ›3<Ž­^1Ļœ†jł7œō –GžC¹Ī?1ż»ūjv{įIŽēXh--F³%“ēŁŗFžŁe.‹8>j˜Äķd÷gžĮ’XĖ$7Ćcē}“÷C™H¶ūZ9žžF% ¾"ŖĄæM-W žnķń«Å^pšÉ;ŻĶōBlųgEü'½Āōū‚āÅ2 ‹Zvf¦ż³MF!ģZµĪ ó;ß·I‚ć“ؾ™&wåInūm0<ų·®QÉōjšoTI €Rї]ÅMµf\[Ķ­=ķDDBÜ @ė4Š_§²ž(S"–> …žČß?JIœŒŒ~Ō,‚V°Ū^ćh_ObF(1 Q–üGj‹ŠęĒ™żH! b ’śŪDö_Ź5E$@Yö/„Ńó/ļGÄGXl ¼“ōyžø’ŗ;;±bńŠ…~žīnߣu÷ Nv„ó<ā„h¢É(ņ-f•ĢHc½ņ¶˜ž ½”Śc›É“Éī½øC"}ŻĮ­K£³g‹6Ź3ڵ#žÉč¢cÄ3Žö“ßu#ƒ@“ß8ŽoŒ®Q”“ÕĮ .ĘXå(!¬ō‹")’pJ€G7»Ė«>šC•Ė˜āš}'žķūū“ßżĀ«Žųņ­ ?%جV¶ļŒ¹Ÿ5sÜs[’m«ÄŅ’”Ą?T¶üKźž³ oś—,sĖ5ģńă\˜…oā¤#N$ŹDlų‡Ń;žž­F™ķž® ķ{֊=ąŌLŻ 3“Łjm”åI²ūRDiķØ4_v}×Cf4*sļG3ķčT«æb ژ(“deFž%õ™†’5$’P’E l *-ł/ƒƒ(eB_t@Ø/rłO$’';ó>f35žÄŲt÷bzž}±ÖģŃÅ6€’d²VŠ6ÕČx©§:r2r›“!v$šŸŽ®Ė6oįåĪ. ¾J‘m®#ßZO¾µ“qثƧ©„‰ĘqĶd2™2”Ørķæ‚”ĢžX}ɉU,=ni딵=2$QØDU`āq NToPź ž{ś”H>Ÿ$ü£?KŽĮĶ*ę/h§®)eś“ö}*–ž—Ģü BōYlģų-ƒ{"ŠM<¢yV„ gJ%LLmģ É,–UĖ^ä±ūī§kófl` %Ąś!żśū(ōõÓ4݉ ū†9Ļ#N(OĢ4h2õĆ(^^'š?hģQ‚’$t]™}÷C·“Ō^>°”÷‹OĖsėViGµĮs“*jGäµI€AæOØ/HH€’µčˆ$Ąh: •}ećĖ?ńü™žŹRŲ~~éրkß±ęÜ0;å‹JĀÕ³īXpØéÖO !"Öŗä8æ~ī×QfZ2]a·ˆØ”rŅÕ“öŗwL{öŻ„¾¦!ąP@­¶€=+Ž03ź><i>ИLCĵ8ZÅą¶’ŃŹ†Ń -Ś&%iqMn"h[IhKģōŸ&Ź’’„ŠœWI…‚ "D²„m„ €††ŗč8T›6YiL‘!ąÆoüóµŽ;cĒŽQ’„£VŪ?ĻćWuuō÷æs¢vøT„øæ~tAÆį÷÷°õ‘€÷6·³ČÉšÆN†/·OeĮ=ŻÜ<–Żø w44ó€i3‘[ø$ߥ¹rĄ}ćļļXĄŒZėÕ·š G)V­ėąŖgžQĘ›ÕŁ’Zė'ąæą ö9šž]ŹY™æõ |č;_ą—Ļ/„\¬ŲŸżWŽŸŹæXĖō§Æ,}HG"żß֖騖ŃA%ų/}FFž=Aõnžw3< °q sŅˌT÷_ZīU‚’Ać ž;ų׌U͊’ĪōįĄ;¼&ųĒ™‚é>Ī4_˜Qj%@„‡Żäw9üĒÆ_SšŸ’ü‹öŃjQµĄæŽėż%©÷Įæ'ń‹Ö±A$ł/xŹŁŅŌ:{Ķü=/ ü7l¦ćw·¼īą_ćU{1™·Ų]Yh'3Ušv‚’ņ0„‘ĘžŠ’Ļqą“)œ¾`>'ķ9—łŚ0ż[_ŚĄ+‹—³qI/Ægżźu¬xž%V/_ŖM[ Ć0ŹĘ£Ź Ÿ2ųŗži’Ś„tł3*…2 mN©Å Ŗč8`“†Ų4°D0ą6Ō„AYV/V(Õ’[””ÉaĮA؏Į’ńG‹÷9.Kˆ÷)©ķŹ"p/–Ņ_ ü‡*Śžµ%°U@¼D¢¶~/æĢĶW]ÅŻ7ÜĄ–M#ĆæŠ'š ŠEŠżäĘ鱃’b$%Į°cdś7†ĮƲߵ6kū(>šžóĻ“x:¤Cmœ£ę.4oßcæ0PõāI> m>ōɇ>¹Ą#ļ6ėydƒ‚d|ŸœõmÖ÷ÉD%Öõ<ėxu‚¢rl(Ś·¢Å†JÄ-Z¾Ø­+&¢­emYU•œĮRI@r€tIĄ ³~üą¾oūŖ£½MéĻdT°uAū=’~œ’ŗ×Ęæ/É¢$ŒĘ3Ž2ńxsęīuDŪä]¾Ø“iޱś`ˆĆūDŚ/ŖņüŲ”żbų#›L’uā¹’ ¬T©ÄA)]öŽŹÄъž8nĘ3Śę·U—$Ƴ©å‡*p“äGÕ³P²|u)€ŪūĢżŃ~«– {]2Ą‹Ÿ»6Œ’@ĆŹ·õüŲo˜’s”™&HæćośĪ„•—ķµĒß̼ś—>³§¶½Ts÷¤ć.O›”4²ķ„еJŗ3Ø-›+—MJ`p‚,‰%©émaŚ7żfļ™uŸż°¦ł­¤YŌ>9U·ŸźošnŠhc¤bŃA2’0Ž@CNŻuŻŹ±½ŚĖe³Łņrƒē÷U½ļn£•I;<¾ėļÅĪų’Y¼Śģŗķß]ń¼c2|Ģ÷ł!Šewįų‹W²zpńæknŞyåWu“Ł’įŚžŌĘ ]\©[§Īąäož™g’y/=?5ŗ—õv£¾t2kćk_æ[Gcü÷ķóXŌ±‚ļˆ°‹ÉpĻĢ=¹üŸēEƀŗä\¾4ŠĒŽĆĆ‡æ›³;Ž­PņŽįW?`īiįŤĄ¬Ņ’ šŪ$żUĖæ,“»Jōļ;­eҬy|ģÄsß«1ż{µķž†’zģąßZT!÷WRøŽB“†Ī“L݇g¹™­ąßqHž=L¾5čž©…zµīÜģäj”Ąæq*ĄæÉ:„‡$kQāGšśm’é¬ŅęĻC“ØčA1’Ւ’ÄģĻ ZѾ'F…Z{”˜ŠgķōY‡öŸpŠØŁ(®§–ҹ­µžéŽØāĘ©&eū3£³ūŲįbG’© Um[Ńēy,ŻŠÉĖ[čń|”n\Mć[h˜Š‚qź7~MĶM±t?ž©¬BDˆ¾Ø-ķ½“Oģ+Ėūµ"rłOÕčWü™x¼h™>įŁÅE’tæÄĄ]¬Š>)Ļn{C›Ø}ŸØHĀ_jē—"JŖ!2ž‹A•2ż‘¹$ķ’J¦aIt€ŲH`c߁õ+Wóų÷±qķZĀ0Ä+–0°„A€ļ{<ś{śPŽ„m^5Ā#å`>ōRŚ@]ū0䘪ł2ž0Śknųqk^½Ć¬[{ÜŹÕ--d,DÕ××ZŁŠ»5øiÉbÕ?Š£Œö“¦č8ŹÓŽ.ŗŽxĘÕEķ*ß5Ź7ßɋ§¤»W…Ž–@gTŌ*Š›6Ō6mTYz²!qf~”JØTōÓ¢ļ^qŚ¢®Bū”śģ– ‡O½ęŃÖśPĘEN]\ÕJ*3oŽ‚“źš­8˜’Źö«” Iņ§­Ä_…Ņg*}„HŖż%ł>C…) AĘh „ž3÷>ų«óŠšq4„)Fj X] PR؁ūēÜXwĄęłOčÜõ‹W”3{FĢv”tcc׿ĒOųŠÅf˜5 _Z zr~Ėo½ųč§ÓŪL”Ūj8” `Fcå ącΊĶGī-6w€ „^iS2%ŃŚXc«J+Kˆ¤KŅ "Ż”ÕŚK"€ĘµR :ŹųC+‚8_Rųå׀ųRٰ¤š"3@āõc½—MŒ3k)ŅŁÉ„"¶/~(ŗ»Eššš,l:E6Ł” £C˜VRȎŽp'°3†ŽWYūŸ’P&Ž^lj޿:Ļ›yäąē‡ļ}Ärpz½ŃÕą;’0™C6­ēZĄ“Nāō+žŹ½ēzEŽx’…¼’ c(ęŗQŸ8ŸäņÜsé­ü>MHŻ\µĖ>Ǿ+—r“Ņl0†eĻa(Ā łä¾ĒĶ^õ­Ļńįž-|Sk–ļwgœžIÖ$ė{E”Ÿb¢ÓĄė-żüWE’żøī—ņŅ~©'”Ƨī¦cŖūĘōo{µūKĄ?T:ž§Įæµ(…£Æ±öƒ³•ŗ“YžĢæ&ōO]#ĮłŃēWĻžžk¼°Õ׃Ą?`3Qūæßtžń žGvĪß_5.}-ĄæUØØeąČąhÉ?€Ö­½ 0VD…ž66ć[Ń¾Æź:ęķłžb}żµŽoŠÓdž[ °fC­Łc‹Q€’<.ÓĒDÉńĘČšoTš_~Ąsė7±rk]…"J+Z&µŃ2}"¹śĘqi×Lkū8²ł|š§Ąłó(ZĒ÷3~R_\ūŪ&­«2æō^ŃÕ),{²Äę{PĀōŁ L›Ó„JZū©ōĒ€?Ā>&–žƒ ‰ž)ū‰ŠQō©K™O±•-ž"SĄxy½ßųŹZą~Ö­Z•„ˆµQę?±6Ä÷C żE …RŻæ›cĖæaĄ²œ¼&Ū4ĘƁ>ū?ŅSeźšųzg­«w=q¦M«µ¶ß+†·.}\ÆŁ²­Å›/žgģ{$iĆŅ ėųÅw/ā-žƒśÜųÕų©|ŌZ¦/~ˆ›~ń}ęCžÓcUg’·ÕõæŚy$é…œn ą’łGi]±”Æ4ć7Ūüó:ƒ£õ‚s6aĻ^,įwV¶A”Ń?ÅĶ]—G=PDöüc±ē²Ķ”­ ü‹EķēäļJĘßų»Tƒū:€„EÕ’:ž5±Ź2^˜ĄµśÖń}1=™ŗń/ļ½š¼”Ą’@ĒzÖü9ųץDšXÄ4c3÷’4ųÆ\hĒ’ Eė²hŚdNŁkļ]ø'óŚ[é]ßÉK>ĆŹÅĖč^ßÉÖM[X±l/®¤kK7‘/Xœ9L#eƒæHīot™H¦—Ė"“ĮØģRQ,H,³¬m„y ZŲe×F’bI:$R’ü”ö‚¤Õ_ņ:Źė”ŖTéąÄ²)oS,QˆećŗuÜyĆ üõź«Y»j%a`½€0 ‚€Ą‚0č/R,š=Ę)īv’(0™!®Ÿüėž‡ž?ÄųO=‰’Ō“ˆüü­ė2Y÷Ľ”fĢ ›’r”O>ōl>) š=2'ß#g› \?PNP§X“nˆ#ž2~(ŚC†Q‡0QY@I’”toIwØY`L©ØģÄę®N4×Z” Ėæ?il“EM?~ā¼Ł{_ädÜyeR1y²äóńTĮŠP|u‰€Ŗ|&—S<=9«„Ī*ö¹HźżÓ†|ĄT„źóͧķæ÷q †ź&ōZ”LøēMwׯśUOą VīóŪ'ą?×y×i»Ż½ŪŸ&>zä£:ŲśKQīīĖ÷žĖg’õ6/ŗy¾ą.Č;–ŻŹq«Kj}žžŖéÕ„½©ł}]å×Õ„Õ“×JPć9-“ßxÕĮ9Žżø ėCTtWžŚŠ’Ņ/Öńu:„“:Ņ*ÆŻA`4įø2č*Ŗ„ō/¹ž§c}‰h}ģ IDAT£ŲZzÕŽŽ½¶Ö‚ŪüŁ^ŲIģŒŚ±j’GŠ[zx`ü4VŠD8Vnļy|'™æhø•SqÖxŽtł—Xŗn5’ø÷^:ę9\õéƘPkŁK~ĻŅ=ę(„XéłøqųŪ§¾Ćł M埣N„°ūžü,ō¢¾~2ŸūŚÉ|øÖxaȞn†»÷<’ƀš6n,­Y¶š`žL–ūŌ·øyŹŽä—=͇sż‡”„’I ’ž3rĖæjé:²UĖԊ4ųšV¦ßz-æ²!Ó]—%ļž?†±›ž%ńZ¶ū+msšæ æ%ä ģF‘ Ž“õ){‚ŹĶQj Ą€ČŽWÓsł UˆH*Įæ¶¢2Ę)U¬¹ŚxÕą?[üh%5ĮæÕFü•’‰€Äą_Y­BkM Śx’¤Žß÷µŁŌ6qž+s÷ų¼Ķdv”:¶>ŗ„uŗƒp 0hö˜cšŸUęšI¼EĶa“i£~ŠRoÄ ü«Ō?;:ųÆ^$ļ:2cgī·7‡Ļž[šXłųR–Žū›V¼B×ÖÖu¬ełs/²¾cÅŌõ£ŖĘNŒK-‰; $j4JĒ;Ŗ I§o JģX±d3°÷m“MĢ§źś£Ī%ą#Ię¾\ė/VŠV"/|*“$ž±/€HŅ×ÄZ¶vvrĻĶć–«’HĒ‹/bĆģŪ $°”ų~ ž}śūŠxž‡_ōÉ6iź&l?Ó?•š_“Pþż§’a„’ĆģsŠŃ÷ążŲžžĮ«k„ƒfĢußkQhœ†Ą§Ī÷Čūä|ßę½"łĄ·9? ėy6ėy*c‹6ėūAĘ p%ˆ<üPLÉ µ  ¢Ķ¶’"c&’Yi`—]gļ5cÖī’ę3Q’ky$Ą&SĖ$@šˆ†PƒIdh)Ÿ«Aķć…JŸ%ķPŚŖ¤®+zĀø™Ÿ›1e°Ą¶“¬9Tõó“ģ„˜Āŗ+v¹ļ­CT¾Łüų'¾„”ŪvžźE7Ķ[½č¦y½mĒ\‰Rm w_rųÅāŠWvµ@ā#5®j¹ÖŌėź¶€i :/€Ę®OÖĶŁpåa=Oū“Hökɇłu ģ£H{Ų20B„ŪüAåsÉč"Ä#ƍ…žšØ?mPWW7RtPTZD6‹;rKĄ7vśdg¼fńZf’“Xź–Õ¬Ž:ēhš~|{„æĘ’!Ö[™šž•wŠŗi3×(Ųąŗü9°ģ†¼{Éżzā>ōäīŖnū·õʋ0Ł}×Głąn *ŚžQ6ž»ś?˜Zčå+ą/’Ēuļś]É2…~”2¬ <ń ØUĖČÜņ;®h>šHŽ;č8zJ;Żū*’ńœ`œH­ēa(˜dž‡“žWDź×ķÕÖżg²ā : Q?æ”/÷õpŖYcXqųI|¼~ žXL’ ŪĻń8šŸ˜žžֆ2oŅīy¹¹—’e“55Ÿé>6Ōē’µŲ÷}Ł„ˆģńgÆ÷§ūźš’·d›ž†²ä^‡GŠ]G ŲŁNžy‡čį ų·JT"ķbPžŃHĄ?@MšVž‹E…ˆ–…1õžØ’"ĘGthzb$®÷'Tf͌YĒō“µæ³ÖńµžĻĘŪ¢ļÅU5ż˜£Ę³|“Ŗg†ĒD©Go{’`‡ŒįšLée-|S Čk S ˆj­0"ųƱ­‘ńbĶmĶ?Ž9ćĒŃ5Pä«_”cŁ*Ö½ŲĮø)팟1„ōlé"__Ēų‰ķäźˆĄtāü×üėØž^«š+I¢HźöUL‹‚µBS³ĆūĆĶ8(TTļO ņ•ѱü9él®¢ńb±²(Edt}8±±‘ ±@Ņ @ˆ #”·»‡gY̲g–zֆQ­(ŃėĄbm€ -6Œę‹^Ń#š|“Ķ3†hm7ō)>ā“£¶ĮO`š?ŹķnKŒX÷?ÜT¶»ļūÉ,\ˆnÜM]Ķn›ä¾g憚ęg·[¶(ˆh-V#¢CA»ÖhÄ*±J;!Š| Šā(‹ PNVŲP2Źŗ`“čČųÖ$å  lhEi­De”ˆ'Je”Ų莮MZC”1+ŖTˆĘQĒ@ų¢7’k%j÷¹ūÓŅÜrRRČį‡Ė‘?»‰- ŽÕĪ;z:ły÷FnXŠĢ’ś,×mŽä-æ&’Ź*®VŠuūĪ©GŸ}ĖKąæµŅõ’=ß`ĶwOęónü'ŃŠÄÆ»;¹ā²³łRč3; Łk÷āūYėÅĒå7—±§ÉįŸ}>Ė>t>ĖF’žgjÆFś_͊o³ō0ń®ŁlŽ{>‰/ĶŽ?„‡"Fmś7FĒ™ł Ž!ĄÅ>„Ą’m”}óTć¬"šlõäAŚ)kEg÷gyNē Nół7]½Bh}4ųīņ¢÷·¦īŚżu݊Š}ćĄę£;¤ųa€fåÜ3_×m(CųHƒ’0Éš02ųÆf×KąßĘą_ŖĢžˆ²N•ą_“ļi£BŃ^(fĄš†Węķy¦ŸĻļUėĄū]¬»ńü-Ćśįns“šfŃN›Ķķ ?›Æ.†Ę3Ŗś%¹RU±Dķ±«ū`š¤Rc³_j°ź zź}§)-łĒĢgCžY»g^ŁČęÕėihmfĀĢ)“Lh§Š_ ®¾Ž¶‰m“¶ŒQq¦>Īō›Ä O£tdś‡¢ģ@Dšb@ūÄ,s6cŒ‰A|3]"*R”* ®õOˆ¬*]ƒåģhLÄą?Œ‘U¢ čėéćé<ĘņgžĆ÷żą'ą?BbĆØö?Cˆšżā@0“Xki•!¾=ՌŃćāųL„ꍔż3ųąW_“ĆĪĶfkļčpćŠļį=śĪÜŻqfķ:haݚoPļŁļ`’ÆĻ?¬Ų“ĪX“Bé0֊”Õ¢¢ū&ˆ’~­tÖ*B­$c}‘hOÅQŹńtąg,N(ÉkDŪ@”q"€ ¢®Õ$@hŒÖ~(F'•$Ɠł|ĪĢ›æēū³¹üĮ"‚(–²ĖK©t%ū#@m@{bP&bӀˆP% :Qy ĮūsF«§I€d?+IĒÉīuą~§ž~ē#Wż¾ŚyWD q ʆp””§;[žõ@śAՉd D]’Ö€“ÜļĪ•Gu_#nć©(PaļuŸżÜ…Łu’ÓCʲXDe³åqÓ$@µ\½ŠŹÕ žÕk/€nTCŠ4čėB„ g·}¬>›;ų`W¹jŒĘQɉɁzk-R8ƒ×O˜©Śo±Xß%̓xB­ ‡Td4œüA/\7ū5^‰ƒ®—•Ŕ;44Ō×$ :©ThL›6ķ õÄņ*xŁń’j¼Ī’ÕŃ8µ7šŚ’wełwZ­eŸeAD$µ’YĄŒOs»ć'Oęm—ż•Ē’õĪ{+ooŸĘŅĻ^ĮJ€ŠģPmüwч8UB²_’)æŲŲ‹¹ü\x ųÓvåÄ’½7³£*Óǟ÷œSuo/·÷tö•,„° ²‚ˆ(* ¢Ā8ŹĢ踌#čŒ3ćč׳é8Žć8ć8⊣‚" ģkBB²½Óétzßī½U缿?NÕ½u·^’&ĢūtŻ:§N-·nÕyŽ÷yŸ÷¶ĻcM:āæņaü‡1Øś‡ļ[zyTųÆõ$įærĆQŠ<Ŗ’ćÉū€P½q-_ł<īóµż+©ų?ųći؃„š+ß\Óóčb Ü^ž³xāöü‹üėa« ŠcŒó Ż{[7ō•ˆÜ“b;‡*EŌön·į“ė,ų‡²Ń’š˜“Ļ" ō‹Ńž±’ųē€Ų\Pö™ü€nJFVš™“aūTõęĪæU»nQõ¬ĮWö£ć”g`Ņ(nKvŚ8YÕaźŠÆO%’±ŲńžóGü^ü—š(”:ß¼|Ø ė“a0픢&© f#Q[„ꞔĄŅ3Ź!(¢üś#Ī P‹„ųڟFÓŌņ,C TōJ†Ī† "ųö³į°=Lˆü €`‚ÜƃĆŲ“j=¶½øž—²‘~mEżŒoąožµŃą ]Ę7Je„Ė›Ŗ¦ŽŸ.’Ƒ¹N€#’£6#š_dW%M45!¶|  Æ/3³’Ģ®mz;]Ź”””’B¤„ā“㊤HK‡ŅŽDZÅ)-„š¤"Ƥ8 Č7·B€„1a%ĮÄ&\*D… Ć× i+" XSVY3{ŽĀŗq§%z!BAæSFŃĒ‡ČŠ®ÉØų‡Ā€"ū­ ’łĆļ¦Te€¬(`vŸĮõÅXE)Ō Ę!A¦½c××nųķ©#@=² ®TU€ń ¶¾­ē_Ł©~‡Lwüėģš¾öm³>[×=ļoæćömüöÜÕ§?¶™ROŽŽy¹ū;AĄdenŸ|AĄłSŽ[ŁRyö™eNÕiDB‚Į$„ń’Ž!–€ē0Y1?mE… č³ 20Äe ¬8 ¬·ˆ…P†53“]`U’‘ż,@Ɗ†U„Ń`–, Xp8ž”Ā0„–Ņ5~p+Yq@0|ĪzA›ālE€P0vEӁ “Qö·€Ģ©8sMF$0É̱XęüʘĶ`ŠVQQnęž~;HU•1sWs]]Ż¦­Ńܜ\»v-Æ\¹2ZąøsœŠ8ac²»J¼R4ś?’•Źżß“·/!0¬=|ˆ5N¾dfD…’žkö̜Ė¤¶ćŪż]ٶææ…ą(Œž’ū'°š oĒ?·n’==ø„Æßü›[š—IJŌĄ¼ē“øU)<Ą9“·<ł8ŖĀm¾ūœNįķÕ5ųPØśµPųo$źæ†Oõ$Ė’0k ś®üž ? üGĻė(D’F,÷§ Į~ŃĻĮpŗ  h3@ńcÉć^ņ¤Rą?m˜ŹAžĶe ßZ”Źž*Ś™9. <’qŪ®Tõ5ąßh"ĮæoX䋿õ”×¶“Ī_tG1šĻĢčzzŚ÷ų„ƒ’FU‹³œyX¦O€*Ņū ž@ “&7ąśS–āāłs “il_ż"ölŚŽĮ¾ģŁŽ‡½Ū†Į†Ŗ?يBx>$ˆ f=¾¦ieȈ A™? īh l§ššėņr“3YĢ&č8Œ’ÉÖ=¹’÷żŸbó /"NA{Ę÷”}¾gEžģ²ß÷Įž¶¹’¾?ķ#™ō‚ō§L 1eĮ‘éŒüb£ężGFų}øńõwtX]€Āa‰Č9{öBē­‹–øļs™ļ›2?Šš=Ä“gbžXjŲĽ4bŚgĒóąz>)ß·ā€šYĀ#၅Ik”ĮBX=Jy$Ć ‹!&.›šÕ0lŸżP2“Ā @`Ź”–YóžōYG©™a!šĖ2Y¢±Ģ¼ß{ĮuĢ@~@&f‚Ö ß'ņ5Č×D:X֚ČĖ9DĪoØ@0Ųwō›Lā õSqŃ7īĒsQGP<śēÕųtrŸS ¼ē&|ąģwd˜@xī·(’ńāæ}»qü÷ĒžŸŽżŅS(»ū暏é$®'Ā€ćā!*Ā„ŹĮŖ»ž-{iŠE’£Ō’Ø`¼ŌßϾ G*łžoō? īµ–÷?QŌ’ń*ž;°N‚|šäR’­9ā ™źß{黆Į+@‹eģKĒŹVėa»Æxž@ó–%š$®Ųē§ĪH‚(Ł,Ü5—Åėž ßxG ž[2p¬ą?šļ‚6$}R³&ķ±0ZHķ©=!54-īšŽr3SĮ\ z8…C<…Ὃ]ņ#¶§ Š„źRĻo /ųśވąæŲ°«³ĻīŽOšēĢ@U} ›Xzz-ZfWBJ•IĄ> f΁`8ä°_°𘭟,¬‹ ųj’Ę2 œ~ŚÖcx)m/nƦUė‘ćtc µo£üʇļ[šæĶõ7VPk°o A*éĮ£n~ NŁß÷Ø+ņ¾©¼véā5²č¶£}’clŹģŲ‰ž66åäAH8K—CNž\“ÆŽŻÕ”ļi‚RĀAJˆ T #RŽ)é’ē8"„\NKžė(O:F“r|W±ļHŅä² ćD˜sXO`Μ¹§Õ×5Ž@BŲWh«B*Z~l,LŹōĮ2]ŠZ‰ĪInĻ`]¬oØŽIy®L{®dł,„6eŖ×+/ėõķÉDٰļ*ĶŽd‚٦pfŸŁ²ƒ!ć†AĀŗē¬N@ž×™[Š×éO>ū?_ˆź€Ÿ§PŠŒ\0™¤Ū^°ę"?qʀȕ~ßĻfß_}e F¶ÆYXĻĄM8ڲ€+gÜZÓR~Ņ›”¬XÉFH0Dö„P&dc`@ģ8J#(õēŠ0Ä °Kģ±`cŠ3Ģd”ps`FŚFöƱYP° fĶģ”ģ‹°T d'ĀK2˜įKĆR@0¤ Kgx`ęt¶`õ/`¤˜SČeÄ3ĆŠc qĒsżĢż'6śnę.ķŒ6“Ć€u±„ĖĒ%ą>ļ:ać“b€»"÷IŌ0Zō’±#p¹’9ķ§&pÅšīqćųr,Žś{pėā/„š8„—ö÷ąn" 4MĮ;žŪõ€u¼ėl¬<°O–Uāćß}’u48€»|ź’—®ĘCų[!°žM—āŗėo³d«äčĄØo~ßH'q½rń»›>‰.<IųŹø²§7>–šŻī}Ūuųė³/D~ō?ź õßĖs õ’hĄ?ų攞kšŒMōϚ#2ķq)īŗõ0›‚5ÜDņ‡ļꏖ;’ ”BŚ€Ų0IJ*Dsž'üy.÷”aiĮżųĄæ6¤ŒĒB{B¶N›~NÓ¤wE‚OKwöąąo…ß”‚8«uk0G6”.-A…U|ŽpvLĮA÷×ųv7Ģx¹£«÷¶"V[É3§ĮĒ0yj–œ^–¹ H© H"Jł·æį”ųƒDüBšO Č Ś€}CD ZFĮē|Ś?`Œ„H±cĖ+ŲšĢ ģ“Ą_khĶąų›ų‡`_kćŪt_ģcĄĘ  —UÓ”7–fĮŒüŁt¬ZBÅØ`ŪW üŒ}4ąæōāĒ.!ˆč› ß?p0‡Žaä?ų_ūŒ›wbż³ė1Ų7cŚ÷aŒķ …ż“ap ś§°o CkŚ×о°­PN[ē3#–Ø[Zõ4\œæ²ŠPVWżų/¹ßbƒ½6¢ÅĒ.ŻA47ĆYŗÜ¦—ä÷„’é{_\ĻCŻJQRHJK%RR"©„¤‹“#)-]¤„ié²ēĘTZŗģ;ZÅȗRhc¢œåŽŸ³pńMn<¶$zn"Tī Xcr å@ßPµ³e’ŹŚ=óʈQ®ččFčöźĖ7÷͚¼»æ®*­Ėā¾q•įŠ źpĄ't„ĒULąą”WžvĆŗū7D÷:¢ołN€±°BAĄh»ć€UD(° ĄńĄnéX'ĄXX'µ|¤iJĆ¢ó]§|iFcÄDĀ@ƒ™…FŪ‰©tŌĄDFÉB!&£ L®Ąęų.åŠģeDņY9’€ķĈ!…‘łŸRZ-€QŠUžGcØ6ĄD:P[ŒŻĪmm†›3€Ķ ,>į8aÆ;£’€Ķżæi6Ś…5””øļ}Ēū?’ [¶3Ģż’bĢŻæ÷1cJy·;ŗūŗńo “~ś;ø e~6i$ῘÅķē;?†ó:öㇼi3pż_ÅóÉħ“ ł8®ļéÄׅĄĪSĪĮuW|­į8!Ų…’jŠP’¬ąµ ž«¼öńP’‹ęż—ˆžGōļhĮæm· ?‚Ō®rŖˆŅ ‚õ>X(„štjxįZś’šģįÓ+ē«ņ/.q*† ]`!)qDĮ撀<ąßµ„žĘž}’iĶRŪ3ońéŠŠS ®'€žĶÆąšĆ«ĮŌ)“”MA‹©B,żźT÷=mLą?²īÕ’D„ ®~j'MģŲ°Ÿy*3Šńž££„|mķx¹µSšPžØ„T ³ŌćŌs§¢aR„r@l)ū™”€ ē?dXō8˜` =”Ō9ĄšLŲF0ĘF’÷ķŲ‡µO¬G_wƍÖkˆśqv9¤ł%ž2¢™uöf†§5¼“}%IEØ[čęęę—ŗÄ%WdW–Āŗńæ#’£6#š_dW#ŚHą?ÜVŌŌĀ9e%Čq ŗpŹóżū·¼Č{{A!)‰ŅB!„„G$„‹”””v\¤Éi„(ķHįK—=W _Åȗ®ŠF IĘqČ© ±¾¾afĖģ[…9¹ „œ,ˆ…°ćeœ žö¾©~ßį…U„AGcŚļõė«ÖuĻinl¬JėŠ2ĻHĢRĀ£ĪMs÷ŗ-ŻŃŃŗ½3ŗÆ±¦He DA~Ų7? “±8&’°xś­“ėŖœēŹņå ""RĀdRųÄ0Ģ,¤‘Ę:ČH”Œ1BH nEŖIč#q‚E€ķkyĘ  i °1PėWĮĄJxĢĢ„Ž Śm2€$3ā”`˜ĖŹbCąB@'•£;6of,>žo\Å„ųCH IDAT6.+õŠ<ņj=?²>؟Y~ģĄ?ōDŚæņ爿ł2«ņ/ŸAŁ‹ć£1O9ųķćžĒyėžĮ}W݈į¾`»«oG׆‡pO{+.ōRø55ŒwK‰uKĪĮ{/|rR¦8õ?©@Õųß·źŖ÷aצµx¬·×ōöāĘžĮƳކ]é$ØĄ¹oĆĘuOcė`?nlŪ‹w¶īĘcĖ–į0Ü,­=ŸśŸŒ€ŚrXŠ:õ?šĖ•„ž‡­Bē@ØüĖ0śĻfüŌßäõšžŠ‘1ƶü¼’𸌶 TŽ@ż>€Fż£q*ž‡cGĮ’ٜńˆÆļ|^˜O­7žū^`’‚W˜«j öTņT 8Õsŗ¦Iõš.öūĄ$ ŌķbļĀ!6Ūg‰ŲA "ą°S”ń€{ÅĮæ Žü+#Č"ą_ćC¦5ˤŒUķY°ō£~YŁIČ7ŗWmDēks£ÄG`BS¼ KܙhN)(}\¾_;🷦p˜1€Šļ¦Ļ™‹¹ĖOųž‡ÕxŚóF’ĖĪ~3ˆƒ½½9ƒkšX±Ą)Õ Ģ­®Bē”ĆŲÓŚ½¶m8Œ>Śś2ÄŹÜü„ąß–‚°O!C€©g› `QW°>ˆž·ījƓæ{[^Ų†äąpü‡­5|ķĆhöm^ærżż@Ą÷­ąŸ ¶cF’³)Ģ53\8„5™ĒžK“K—ąVˆœ¶āÌõŽ+y7ų/}0E·Ÿca4ļ€żĆÉ$ø½¢±±Ą @J 1æi’ōł ÜēF$ļć} Œš~Ynä½B€žp7Ŗ¾õ|pÕeļĮÆĻ¹÷nÅżķø|°7=’G“žõ6¼NN?;¶¼„gŗńīīvœźeųam@ó ©’&§„„’¢`7JżG‘čæ1ć§ž+d,P@³ßŃø©’QēŃ«•÷/ņ·,…āą?_ń_ E÷śęķ»Ų|Iš„ P;^¹•½+÷±öÅb[x¤ŌK7¹€āļätM¼€ųAö/lÕé”%NåÖü³arƒ·½a¶ą„€ŃöøµĻva@Œ\j%ž£h&’ƒļÆTä_ a$KO³š¾'ū,Ӛå [Łøž¢O˜bJ’¾FĒCĻ ļŗ‹]źqY•S……Õ Ńk„cJė?‰|ąµ’ ąœ+®DżäfōuĘ©^7nŸ/æ°÷ģü7M›Žåo>-óę£nR3öļŲž ENöÕ’Ń­„0£¶³Ŗ«ŠŃށ=­z»Rxå„n¤†5ź'W"ę:9@Ÿ‚Éq˜ÓońXd]Xj›öļjƓ÷?‹Ķk¶`°Fū`6™č¾‰ż0ŹÆ}żėkķA{:Ć`Ć0lž—Eå “&&ļæ4āÕ$ ÆkīŠcžK}ģĄĘ<¦½ T[Šēź”’ R³źٰѭ=ƒƄ˜-µš Œ&Ā>ü9ųA8,0Ėw„Qp ćC'€ ¼E‹.ljl|/ rK}Ļ”Ź~1'@”boћºŻg7lŽV£6Ī1ØF²Ę9Ō;µ¢³g@;2mā1ĆJZ‰ĶĢ3)SĶ#ėČb_ėæVArJsÓLoļ¾M›Ć½…N€ŠÅVĢ DĄ*äB:¤-œć rü„µ…N€Š`$ȍ8 Ņ7S½z­B: †$håܛg.›{Ć»Ŗ*§] ’“ŒaŠX°˜ÄŠģF f ć  cčȤ€Ą‚żbĄ>EF“.× @R0tī hø^ƒķ¢€DČ┢@>ćŠĘ‚|ū5Kép“ €‰kԐq L”ŠĆļ²¢¢œ1›Ė:z€$B@ŠĪ@eå Ą {żŁńż’÷æĒ¢ä nļļĮ {6ć6XT= _žŚ“Ų[ącŸĒ ’ż/Ų”Nā¦žv\÷ąńČ5ŸĄ”ļ:3‡«>†’]÷fśiÜüč=˜_7æŸ6ǾFŠžļ{ńŸ| ÷•UųŽ9—b“ļVœƒž$~Õś ĪMā–5@śü+° †±ņ<“Ų‹‡źqߏóq8·Z—Žž“² 9?śŸ±%Ø’@$ŹnrKą„ĄŽˆBźæĀčŃ’¹ĪhtŸÅŲ©’ŠsóžMŽ÷ļF=ą ųĻTØų’k ĻŽĀę«$¼°Eu ö įö3Ÿ¶>ZYE“®YÅ҆I ā•2¾ŖLg/ėÓØ>˜Ó6›įę9"¾Ęa2±bą_)č Hū?”"æ·ü€œ§„MˆĪ:˜@^ć?š/<ĶB¶‘•gXÄ“Ģ]ųgF©†ük©“i¼÷1 ķ>PģRŁ$I“T“`fÅ,8A5"­$Rń“’ŚS”7¦ąŅō,>ķtŌ65aīŅeˆ••RCCxžZŖm‰Į‰§_| Ź*,gµ}ļ“ļŻūšƒ’h§˜R˜]_‹–źö¶ā¶CšŅ>z:ÓŲ¹µ JI44WAˆˆ€D0®@€ U:ˆ2”ć@ž~`56­ŚŒĮžA°ÆįcA¾oÕż9ō9ų³¹’F[ē ’Ś÷”Ÿ‰ś[ā*[]€ ōØāÕ³œ’ąz¢ĄæŠQĆąų/ńQkp[+P^Q™W؍rzm=\Gł»:ū8øć œ •€ˆĀHŖ N ’!qfJB0Įg[²JćUY\ž“tńuU‰Ä[ ¢W:ų‡9ē"†N€0ź:,ŪŽ-_+Zõņ['ķļZP5ź4Į¦dL ySĖt ²«R¦ ƒŒČ²ū’Ļgølń_¾@ÉœŅŲæł,€3V|dÖ)sŽsMuå”+¤P ŁļÅnbaµˆ8`L°„—Ų‹C$؊œZ -%qÖa‚`²ņh›C Yą–ŠRŌO†–’1‚’2sVÄʤÆ!¬ūUBȌ€! CGÉ–Ō0ĀįMČ18GåM0ņi{O„‘|€M ‰:\×a¤óÉØ`ĢsDĄ?pü:F.6{ĀNĘż? r’3öō!ėzpļYĶøüp;~ٶøŖ·Żż~óŹf| ÷Žļąź%gāCŸ¼½>q÷WŃŲöŽ{ŻŃ?XBg)6śį7šAc°bŅt\õÅļąIĄ*’Ąå7įš¤F\}ļń_}ų›ĻŻ‚i×½_üÅOš )Ń’WßÄæŁÜ’h]X Hō„óžG²üčf}^ō?ēÜ0FÕ’ķćĶūö-ļß9ŽĢX6ż”ŠdŽģ&2)*%”µ™õõ°ųżo‘ī‹HBQ+tā1?um‡Ńļe –/yˆ‡æŪÉų›³Q¾I`”čjQs’SŲó‚ś[ ®ė5žE?Nj¹DÕ|i*žÉć ų:W¢ą?ĶŁŚĶĀ·åžB+ž`,ą_{¬<e_eĶ”ƒsęŽn„¬Īæ6^ļžęQxŻ}„¾†1Y­[‹™3įŠĀZšžćĄń<ĆSPZķ÷zµćüŪ¾„”ž~”'Q3pøķL1ČąÓęĢCmc#ĄK„±uķšq’¼… ’ц†Š2¼céBl>؁§vīEWū!ŌOjĀ@϶­oĆŁ—-Ĥ)µ™yj)h„.v"ÜŁŽƒuOnFėīƒ0Aī~&jˆųŠł™lķgTżYy’¾„żĪś6œa+“Ŗ[ŠčĪ»T£Ū8•Gžbæ£n:ųmķŃąÖQ l üė€ĮAČ9s 6W§LĮJH’įmŪ`lŁc!,3Y‚‡$Ä Ņi &Ü΁Ō1LŠ5R¾DLiĮi ̆U•‰ÄÜł nqān 3@ą¬ß*ūūˆ8ĄĄpP€Ąģ³0BńsŪ.ŸÜŃ?­ü(®ąQYLÅČ£3kVm]-Ņ^k’¼©©DyZKaSŒa‚ & £Žłi9ē,Z&/ųĖŽžŸhŪæ'ó‹Ć‚“¬€– ųŁ ˜CY/A@ ØłģT‚¼°ļ¢z¾…Zé4(Z<ä¢p\OœJb1š9+><«21ū"lj/bū`ŽĪcHĶDŅp4“\3gˆ²8·`¾d‰õZ=€ĢA !ŠÓ¼1lælWc …żÜĶ ‰äšF“ær»åm“–Rņx„Ņ(='ŒZYķH–H$øČWśŗµc@ū9adzEł’hķåQĘ*&ü7Ō‹sHŚÓI|īŚ*\—ßēmxvź\¼…=}}ųń•§a·Öø¬ŗ’uąySVĻƒ¦®!ؑ„’Ŗ$‡±’}łą?ž[v!’ģNÜčĘńÓt7żļ÷°aøw0ĢžŠ«žYź)‹š_¤ łĄ¾˜ź’H6ź’X,ŒŽDż/¶üķ<탨č_’±HńõüĄ$ˆĮā‰¼Å‰Ø “ XćķAīGŖœ§*_z{¬ęĻb[ķ©š”$Ql"Įæ3šo˜ é`ų†¤‘,IŸ™tŹ—†@‚„<’Ģ –¹sŽ«bŖ%,›:BĖV!¬ĄšÉ乃4 <æżā¦×ü‡ęHE±Ų©U/lkNģDĆĀy—Ü”¢ĀČ:—9’…żü¼L8ŅEękžņ#ėÓĮ/:Œh)U„@OĪ<óöE—½ł>YU³č“Bŗ'eōĘxĢ0ppS‚Xėām`‚ē1†|ėĄ*‚{ĆqŅĆ ·^ēė›ńĆkÆĮ`ÉÜ’aūÜżć=8ĶópζMųĶY¢3|!ų ’UÕ¼ł<°ź1ōśiĢ‹•įW·~ _Wƒ£Ā@6:/ü÷ƒæ«śąŗ'š>õō““_^Æyź,t8nĄŃ ’/Ō’£ÉūråĘ žā¢} ×a˜ 0—j į*ūj\Ś—‚LR*b jōT’Y2öąöAšR²“õŁ>Ńśįv I•ģ /rŹŽķ'ėē«ņŸœ!ŪT°cqŒĄæļ…ųgņ<-4(üw×4ĢnŸ1ē6"ß7…įżķ8ų›GaRG^ęÆ!րU Q” †ÕX¤c.|G C¾NKOą?\Œ••aÉYgC÷“1V…ĢÅ0uöLš1ķūöĀ÷²ßżœ%K1}Ž|@rpkžƒU¬/z²Ēüē#żR«ˆąJ‰M Ø«(ĆīĆ]čéźA÷į. õklßt±ø‹†ęŚĢø½]CXūŲKXõšztuōŃ|Ńē(Ķ?üóƒ’~jæö5Œg`Œg—Ge˜³ękζXB 1}‚Ø’£ōxĢōųĖŲŃÆų/²«mBĄ¤…{{ĮCƒMM.š*TS^īo?ÜĆĘŹ}Ī [„5önH€ ¬$Irõ€€ŽM†‰”`Į߀ˆ¹³¦”ꓚ¶Ļ-’9”śs”$oū‹Čf[ŪŹźŻK Įƕ))Éć·ķša“ØŠŗ"–6Ž“bˆ2ē‚Ģ”  üN¤Sē%÷ķßø%_„ `8ĘxsŽØ‘T€4€s–~lĮ©³®ŗ¹ŗ¬ž"‚¬ iķ!Å>ų.9sęį²H‹ ,iŲ&ČŹNP$gŸŠRĪŲör »5 ‰‡łž™T _ȒŠŽ-¤dč jEA>AbC a¬¶¶1 ±Ņ„½ą™}Ś~ʾ`d0_£ĢzGęŃü…Č Œ4äō“RrAž 9ō T @:›6Źjkƒ±‡Š>Ȩ̤tØĖī÷üół®ćŌ šĘ朰#³cż_9B{~ō’Ķ“°R§øćGxźō+šcųĪõøųžŸćgéaüćbSī~Ÿi<+ūŠżöļŠÓ¶·wJPwGv¼ž®ģņoEjpøxīLĀš1Sēāīń‘]›ńõõĻą] OF*Y"Z’WßĀ÷|/ü<–č(üēVŅ” Ļ9™Ļėėéʓæīō†‡z·ōöµ>­>łĶX»äTōEyIcž‹Ś±¦ž’Ķo)ļæ(ųGiš_,ļæßĄł¹öæ-R‚i`±ŸØqpŠ“²£įšõØłž=¦Æ{?{·3[ē~nˆß:IŗĆ”č_„&’–xó7 3…^Yü+ęƒR{Fł>DgmӂŽ–·BP dhW+Śļģ _’Ä̊™hˆČ ŒŪ|„ą'¤Öˆ%SpÓGī8Öv<‚Xtźépū«č:ŌŽUž‹N=3.A9.’ĆƙžŽėbĮ)§f>oy~“Ī‹¾LųĻ?Ļ£’Q›ŪP‡)UUxdūNģéźĮöM[Ń4u2†SŲ²n/Næ`1önoĒ+›÷Į÷M†¶ĻĘ@kĪØūŪ mZū0:Ģõ(’&k ?Ģ’7Ś÷srż£fåА˜®&.ļsŹEFź`¼/õQóž#Ē2.š?śpćėķ;öƒ×1›ƒmšµ†\¾"“VšZŲ4‰\%SæŁ“‰|Ÿ“f,²W ¤c*ĄeBR K |&йĀ#x)a:@ėC{›š7TVVœLń=YG’U]2ė‘qp™aČ@°@g’äŲĖm§­šZZ¢¼\“vœTµqēz]óŒr†¼sR=GūÓ  ,Ō =••µX¶ä­[^ÜōŠ `Čl¹? x*`Y—ž.¤ś‡©Z¤_Č’.– PlY@ĻU(`łÉ[Z[Ł|‘Ū¢ˆl)9‘ņŃ1ltŸÄč|sm˜¤¤‚~Ą×LŽČęłr1BĄ& Gö",T9~ g‘8¾4 ɂž€«$ēœńk%X†8rŁ{Ō”jÜ 0kčø“ €?ać;‹æņ^…#E’±‰’Ķ,²žāÉXš­Oć—æ’>¹ńdøĒĖcųŪĮ>ü •Āū’)Ž’ŪoaŻ»>½×_ƒt,Ž_<÷(fł>>ų?Ä|6ųżÉēĆ[%>ņĶ/įŹ›žčĢ8§‡³ūQł8»ŻYįš£÷ĀO'qć†UX4k!~W5 &ŒžĄÅG¾׿łķx€}Ņ±ģ_(ü÷Ź–”Ž9ónVŹA¼¬ 5uõ²aŅ”IS§/8­²²åķ{jo[÷tÅuĻ=ؗÆy4Ywh/R³OF+üöłĀ„śŸæm4mähJžq$w?:¦Y`žc Ł^æ‘D’@ ķÄS÷0æ+ Ģń)ŠÅĖēyc@B)€A" Ė’y±TĶī€ļ±Yb€Źvöh”ØXdĖż…ą_ĮžjŠ!ų·‘[īBŗžć’ÄL4fš/DGcóŅĆ-3> *ōÉ ¼¼‡~’ųĖņU:•X˜Xˆ*§źˆ¶/e,<ׁē: f]ā¦=Nģx’‰šœrŽ ņü’€ž®.ܳvķDy"ķė×”æ»;³ķĀ•§aRK  æ»ėŸz<—ö<‘ą?ēøĒžó‡+öŽ”˜ßŌ€śŠrģķźA_o†ś }ĀŽ—ö£Æk ˆö[u~ćrżs"žQ„’°ÄŸćYĒ€ÖA‰æ@łæXŌ°—ŃĻV)Cõtn¢ųŌkÜą$ -€ŲF’’¤D’FžŒ šŠ ŠŪ jš\ąµeåbjuµæ­½ †3ļ3«·FLLY:€ō 4#HI°f)‚Ō#r™½ĆC{&56œI2€¼y?„ÜćĢ×lՋUŪÆ˜œņĖĖ _¢ē3wÖU;M8Nf)ųƒČ°Ķ‰gĶKā pAš„”•Ź÷|æXŽæ5cŠkä‚čŅŪēEŽRösžOĆ£h[±@ b„„‹åś—¶į¢k+*ŹZX, IDATƒcˆä’÷ŽkąćŚŽKoą {õ­”ų_h_©1Ļ+ń>-Eż¢\T‹K{zš‡ŪšĒ7ÕąŚĮa\!%ī»ĻĒąÓ§ć›/½€§†ńĻ‹]L}če|vŚLšCi|öņ¶ ąėéaü lxßĒšµ(õ?ßā} ‘”’‹­’āwń¹æū8:†śš×žÅŖ-kń[©°?•Ä„`Ō,;_`£’ōŸżšÆ,EŽKƒ*«”Óéä3 ¾Ś¾Ėµ&h#ąk clłŖŖźjŌÖÖAŃ „ø$•L^rč`žųY{²·ėŠĘ®¾żĻÖ4™µ+/Ę Ķ3m"Ә…’&Šś?ĀŌb¬ą(Aż?Ń?c@1įP ŠsK<ö?K„?t˜Ķ ˆ]ģž†ū_‹ŹļTƒ|(•’įöŽ =Ü_¼Ā©OBå&˜s.Ŗ¶!sĄ?”‚ń9žM‰¼’°/gbš€µ(ų‰qƒ’CĶÓNļnn¾Eœ»½¶”óń5G$bė óóP©*GļŠ/ųÆkš„)³f°9š›W?é\p/:ķtȀÓy° wļ.rL£Ÿå6"’Ģ · šžSsqõ²ÅŲt°OīŲƒÖŻ{Q[_‡źśÄĖbRXś¾Ö`m`Œm`Y&Čē÷­Ņ?éS2Q’‚T6h"y’*.P9E½Ę‹mG vKĄ)ĖV€ėĘ£G±ūsŒv܋žžC3}½ąVCrČÉ}ń‰ęŖŖŲ5'/KżrƋ:Ā‚¦,gßIÄ ŅI7ī#•TˆÅ9JĄpņҶoi}"qFÕ©®Rõ‚ €nŌY˰ćķĮkķŠ+Ė›¼’RVW]N­ĶeŪ÷§«S~Üf!¬¬ĀxSåžzę7\łŌ3w’(ž déżŃuaõ€R©ÅŽŻó@ŠĄ®*§SW\wjuõō«„TM‚„1!-ˆ²5 ƒ» kyok­™$ŁW°‘! ‰ģĮēŒ)‚{-\a ‚PĢĘp¦ŖČ :Ž_ņił¶"@”`1qĄŠĀĘ|K§X8“,Õ)ߊ”g±XŒĆ‰P c›/Õ^G'RžT­˜ųß]‘§Ął‘õ£‰’ķ.ņōx )#ģ’#ŸAė=ßĒļ†śńĪd£Z)üįŗ/ą)øųĆćg›ŸÄßĒōƘ‹ćžygĆÜš9¬[żüĄÄSļ¾_ŗę3H†jż@aō?ers’7<Šų÷žź=ŒŻĖN)tż%‡@ŹŽōN<·õy<5܏Yž‡·śĪą5ĻĮß{GP¹Š-,ūFØó£’qЦl{”ń‚Ŗź†YP”$8Ž@ܕØ(HT ”ĒbŽ„’$IÄbq446bęĢ9jŃI˦.]r굕³ÆnŻ\õїžt/{śĮ¹›_Šå$Š]ߌüw€WśŠßŒRņO‹Üöč˜T‚‘”B!ų E’Kż73 PĶGłĄr'žB™ķ]ʜɀ; ^“ é•uB=_!dœ^`ڐ·““W@5;k稊}!ųrE’$J’0ļŸ‰É‹;Јą_ˆ1ƒß¢cņ”ŻS¦¼E®cϚĶčzņ…b—wT«rXTµqYvDŪ­1|ĒA*n_Óņ5N ( &üGaģxĮ?8ķĀ·¢¢Ź¦fģŻ¶»·VK€’Dm-N>÷ü €Zóš0<0×ńõ ž£‹M‰J,œÜˆÖž>töō"•Jƒm]v[vLū™Ü£żL:€­ ”š2“Æa˜K¤IXcFnÉæN”—>ƒR+"ē4†›?V%!œbōü‘7>!ś—ŪVräT |ø²i2WɄ*c19­ŗĘŪrØ Ś ¤osšY¶¶ Į`# „Œ ¤EPšĄ’™4—œīŹDå 2N„ēnyį‘k’]ŽÕ¾“ź`ß¼ń«“¾&(.īŅMµIæ®*­•°hõRąŗeĖ++ŖÖµŚŁ ¦°½üć”.(? ŗ¢VžuĘĪZ4ēŅU”מK$*(, iŌŗ"T’ŒŸˆŲ‘Lų)› ¬ø_xc ™é±1Yö1˜@LÖ:h£ąÄƒŪŃ[ąL„66=!›’€@„@°oŠ€śh €ö”½vDö%A,“ME Ó 4$ A ¶Ī,””G Aa?„ˆ mĄä1„ąPuŃq²Ŗ’Zē:¢€Rģ‚d& Ó/šą8YĄD¢2ć1H"L†TTŪļF]ŻģČKįN:nSN0žm“č’xģ±ļȑ„’VŲ ąŃ}ŲzÅbœ»{+īcĘROć¬hæ;æˆŌUoÅM7œ‡ƒž‡?’śēŠ“q+®ūō”’ž§Ń޶÷ĄŽŽŅ©,łŃ’_µĻ’?Ń>Vn}ų~Ul»PųļƇU•ĄÕ?ż¦÷  źükšŹ“Ł#1/śŒÆģŸŸÜ ą0LBĀó“ˆÅbB"ę) „„$ĖŠ,Į,`Œ³„[ę`ö치7o¾BĪ7FĻ?tšąūöīۃ‡’w{kŪŽē”WO›Ī» ;Šy±_-źĮŃܹȘŅR’ Ķ ķƒŅ¢v EĘ”~åķLB90‚ébğęč<į%ļJƒē¦Ą‹ļ5ß]"ōß_Čåė£9!$ S¾€*¤ģ²L 䈞ü‹HŽž u ųē"ąßų,}_ˆĆ “–t77EĄ÷ŖŃżÜĘ"wt›ŸŒ–Š–‘ė12&B²,n©4Üd ¢HĪõ«iÆ)ųį8@óĢYhœ: }[Ö¬Kƒõ“Ī8 "¢:°k'ŗ,8·×;ų­*ęā½+—ā‘—w℃šR)ŌŌ×!Vƒć(póƍ¶Ė¾a £M üŸÕ(–ėŸ ĒŁeÉūÆhRˆUNų/:B® EPńń’bOˆž£™€·ę9اŹs«ź‰)ÕUńk–/ŗgżFč0ņOdµāŠ3÷¤‚瓟6Hŗń4ĮwY#åĖ]{÷m©kŖŻ‹¹ !ٲ@UĪÖČä E£äūz;ŚÖQZcu%ķn«‰ķiļw§5 ye®6Ģ‚ņ;öśe¤2)œ¹‘“&ϒ릃Ū?qØcO?ī‡v“‚€åU5źŒ“®=£ŗ¢éJ!œ!(K 2dęqsxD6wA£“J&)"+9҇m4IR9uZ X, Ä’ ŲII†‘?i;2ÓĮ¾õØģ(ģ”J²ĪƖö(ÅķŸ`‹ÅŽnŃ ±Tć/0¶|é×ČN8NXEé’£E’Ä¢Ź’æŻŒ¶æx7Īč’š3Öøäķ.¾žĻćS ϲ­gĮlNćÓKʱ75ŒÆ>š<ņŹ&\õąj€ńęž?’[|Ēh,˜2oū›ob-ņ,Ź$ˆŚuǾt”ŽłŠĀč1 §^žSĄ7‡7¶ž¶1‚¤#08 įi!!ą(וˆ¹– sb*pH‚„af†u ø®ƒY³gc޼yRL"ж]±{÷N¬žæŻ=»öl[ėqĻźÉ3±ö-Wa‹ėf_ÅrąŽˆś?μš ¼»ģd–Už±BK“:0C:æG~¢śRŌ¼č ’Óaé’ąZSūS!ˆ%€”mÖCļ ®T‰-*xS†y’0YÅ.ž1ƒņ!J@!øü{ĖĆõM‹Ooł ņŸē t>¾½¶¹b#› ‰9³Q«÷¶Æ¶1’ńŅ1åCĆH ĆŃ1G!.%\!į©œ`āH!᳓€!‚f†Ē)cņ5†“a_C‹ńµ ’9cž‹cl'‘õŸ¾²ńEÉü×77£yęLVčióźē Ī-ze••Raøæ?“;z¬Ąqt:všŻś-óg£¶¼ ĻģŚ‡īŽN$j«ą8.”C`Ć6 Ąg›×Æ}hßd…ž8’]ŹŠ&Kżw+Ź›dQD9nš?¼ė–p4¼V¢#ÓØą$ĒĀ8E’J·v+‚‡‡ąÆ[ µāōB'Ą“Ŗź²·Ÿ“8uļK/Y' 0^'€›&ĄeMŚ{÷ī»oĪÜŁóįC@!Ē :ś‡ėžį†‰d8æŗF@UEƒ³·½3¶pzöÄw’Ī×`ß!8„…Ÿ Ģ÷A*āČw@Sķ$ēŌÅļ|SeYƕRPMPv ēŅŖsŠ`L,óī/6†ˆ$mHŖÜß/Į2ģŒcdKk&Ē”‚~œ3ÉUŒ1RZ-¹łŌ{”$X=†üŽRH8Pü/¬PšFš |HČ­Dš˜Ē¦ Ųņ}Eµ£Xq5€bÖ5z—kÆ=¶ŠqŚ ĄŸšM`éæĒJl“ēX’ļēųö]øś»_Ęj·źĶØūĖÆą#ó>Õńx`ß~{5ZūńéA¶ķ·ū(–ū’ÕŪ0’ęĻcĒō8ż’ї1Eūø4žĄēЁ’ŠĀčTłrĄ’ PqŃϹ•/i߇ƒ! „„"”€ī/…‘e¤Ņ¾/L 8Ņ:GĀub®MPBBP idzfĪÄÜŁs ¤¬‚.lk;pįĖ;^Įż?xd[ó¬]vź[Š‚’üč1 ©’™óɧžē÷Ÿ ’Åņž£Ÿcš/„"”¼U@FōÆ"õ§ö«?ó{·ģeļv&øŒwĖ÷Mēāwø5’T„Üä/‡;nģe’B˜"b?©ĀŠ‹žiŹĆ$°#Ē žĆ1¢ąŸĄ"’^ZHąæ«¦qīįi-BæHēS/ųĖ8ę'ę£ģ5¢ü3Gk”§=Tx>j‰P-Źˆ)NC„²tX*SØüĢĮ ö_c |c„aĆč÷<ō¤RčN%‘ó³ ųϬü烫q‚˜±`Ŗź¬³&Lāåu/Œž‰KĪ|S¦mĻ–Ķčé)z S§bŁŁoFU­ß÷=“ķ܉—×­Å`o_Ń›hš_¢Ł×čą?\³bŚŌW”ć÷[¶£·³å‰Jø®"ĮFż}ķ„ž¬@ČÅĶ gKg EHLUł3žb#Mų.AĘĘGż?”ųŸ?ö8ĒNĀ_»źŌÓAe¹N9§¾.vłāE©ū6oaRšĶ RŽ‘1<ę“Ä4³ ½­£«±iŅSUÕēĀgAŠ Ć0‚{72,€=³sču`5ÕbWkĢéčuTK“ņÜr£™ ˆ„„ü‡NŹĘ»Ćq~”œÓĻ8żś+ž~öĒ÷Y@č(Ęš}£OēbŅŚš©ńS^~AuYĆe ‘ ķ7Ń,zÉ}ē !ßD2ļeeDņī/­ABdSņŠB“¤Ņ<8# dT sQLN™AEÄ<Ŗ{adKcōœņB1Ąģ:)%©²Ił÷ü’ģ½wœř>ž¼UŻÓ“6gķ®“ZiµŹ‰œ3Ų‡ūlŒūk0÷s:ŸĻų ēÄļœĪ8ŸķĆG¢Į$Œ@圵9ļ¤īŖśžŃŻ3=3=³»B2ņYļGŚé®®Ŗ®®žé®ē ĻĖ”iZ:~߄æAČ·ÜW擀wµBPÅsĘ0’NčhĖ €ņņrå«Ų Åļ<ǧœąų;“·“śo<±’`yu‡ «;rńx䙟£LXųŠ«ĻcŁ®-xō¢÷ŲJ€!€nųWl ń“>€¾‘!»Ÿ>OŖæį>Š·>É»7ą„—Į¢’Ix²q*,לæu-ŒĆ;p€xū|<^QłĶĻ”żįūpŁ“ā‚ƤŹ:ģ®l²iN„•ÉkŸJ€„Ē ›öČX©½i’°l®õ_JФÉ:øsņĒ"Ń®qŽpˆs©8ŪĀ_ BJ€s[AĄ¹ņp/‡%ģ6 Ä84!hp„‚ aƒĆ08 C×8ćŠ8GiY9LMGsK{õžņź7^=°}Ębµw¼®’šŹX’EŹæ$Ė’€Üæ×õŸwź+bŒ§Óiä*4MƒdŠŚČŲĪAkĆZ*h Ŗi“•8w5rķ0Är(öņ ŃŗknR\šŸT¶®<ĒśĻČücłn’ ä‚e‚\š/Ą‡bŅY7SŠĆ"nšŠ÷—VNīn™öQ0–‡Ōū^YĮµ›r‹Ē”ØÅ̲™0Ų;k4Ņ…@E<¦x3“&Ś…ÄtCĒŌpµĮ J„ƒt ē@š6Ą? FŠ8G1D9GU@Gc(ŒÖHĶ‘0Ŗ‚!„8‡)R9ygöKŽPvy|>r‚k:N¾ųčĪrÓźUčń0’gźgzhœŚŠé °żź??Ė4󮣦© §^z9‚įŒ¶“1ŽņŖjL™5  ÆÓ6€t¾ēõ\é;žŻ²PķµÕŲÓ7€įŃ”¤T! °ÓžYvźæüu©’}UČvż/™¤#X–oż/†‹ż Ēėén”rš\eĆX¤ć¼Ē.īāŠ…b'£+*xdĀŅß:aAõtjėl!°Ŗp˜JƒA±½w0CSē¤s8);µفźŹvßV¤lŽ "N¶Asøw`_CSżbbd(©ˆ)rN”=©Ū/«ˆ›e(O tģ<Ō+«¢q«”2nF‚B1;¤éeDś¹Ö”ž2\f€LŸį%įČ]{z„˜ ' „ģ}7-`CUkpł¢kĪkk<éöP°t D(ržŁÜDv̾Go{$0²½ÖTz¼e^nŒ=Sö„\n€H18 €”¢ōr‹R`Äøņ|č‰_ćŽ¾NܖLąb3…3ā1¼kżJ\b ü±¹ IÆõ?ī­"·ę’\ā?לļµz›Ž{wĄ€ŚūÖäėJĖ+Ė1”Dlk=Ą ”½}ń¹møģ¼vLo©F]MAC‡i)HIi…ēŒ8@ Rr;‹€ā Ų€_×9BŽR€1`×įCM@J‰ś†Ę€Ęė.}ž‘ŽŠ–ى•ŗPŌõH?=¤÷žNĄõŸIł'”mķwąB©Œõæųw]’„Täużēų—© ųO9iö&ė”Žff<³[¦ZMØFIˆ( YĒæ½6\óƈ$Ų¼ć’$)ŻQD8oĖ€€żę< ü+é¬|ĮæbˆI ”²,.,pĘL©ųP“|RgėōŪcyńżÆmĄĄŖ‰ĒüW•h/™NļŒcX8e¢vx3IĢӃA4F#(  ļløņ6ĮæżįžtG)P ¢%As0ˆņ@¤⦕·ųžk€€Š¶p!ę’ŲšÖ®x./FŻ;Ę–_t1A;9Ööuo cļž<šÆ8ķ²w#`ŲŹ 3•B_ĒahŗM€1†šĘF”VUįšī]v¾čœĮÆąßż04³źkŃ18Œ¾‘(„ ¤„eŚJ)¤_K¼ą?XĮ©ē ę7E»É*/ųēĮˆä ˜ąæ@ĮQ’ī‡eAõö€źźA<ūŹj£QD CģčóUŲۊ˜R¤@’ģnāŠŠ1Ųp(XR #dÄ£%‘Ł ĄU¤Vn8€"lī8£RJ­@LČń)D@Go mÄj®‰§JKL”qdŠ»„€póŌ{›;JĻżR‹F«ēöö<K˜~„€ł„€u„-ĮӖ^wIKó’;Bzt)7<¤xŒČ­\ē;ĄŪłŻ(ę†&Ä YąŪ¹nĘø“{v¾ŽeŽ&š#esx P¤Ą‰»©@•Ģ Pp”¶%Ką(\@ ŒŁūy GIafĪģėƒ3‡$I ĆvįQ)§w@–Ē#„¤+Ęx:“Ą4›0K Y–€ėšņr¤¦‡čövRxėŁĒ¬±ČQ$s1…HMMfžN(NČń*…Č’^p~ÅŬ’@¶`E×ō‘X’÷ę”ßłoXżßßĀęTģėĀ{žł5ž¾ś6ō@9€BÖĄÅ7aÅ æG2īŪŽ‹÷oœóĻĀ0\ü>¼“ņQĘqŠ┆&|±µ ߌŰ9Ē ‡v”öŒ+šäŪµž“fƒV?ė?`Ķl«žÜŹŖŗ)ŒqDB¶õžk¦i{ę“×¢“$ˆ†šR̘VÅs1§½õeØ(Ć0tgįIŠXĘS€‘­PPŹ HZ Ūt ‘H€3›ķ:™ˆD¢ŌPß:ļÕ§G.čūKĆT eż/`żäø‘yY’s]’}łgX©ŃÖ ‘j š&jFb˜‹c­%TEĀ pžżzJCń‚§bdœ€ņ ė¬N™ Ź:ē(Õh‡Ń £Ź0ĄÄ,Óf˜/"G ü3cłCÓķ_Čśæ¼„ĮžžœśŁ3Š2{6&·Ļ$q¼öĢӐRd×$`źģ9hœf'4JÄbXńŠo±gÓFģŽš’ń8Ŗ›šĄCIyĀ%„čŲ³ūų’YC°’rĪ0»”£©:‡†”/©²°ūż{ćž5ƒPڤƒėł×;>Ąė÷½("„Źr” '’ ųōįóµ»oŸk2Mؾ^P](ēłÅėJ¢ąœ‹=ĆyJ0E6ƒbL‘‡R¤SÉ[ Š?8|°¾¾¦]㼐ع”PI+ĀvtžTQģ²üdFc£I%ÓKaI…Ń„@U©ŽöĘź+ ĒLK”¾Ā@e‰ŽĮ˜ ™CK]ż#ö>0grż#fš~¼Ņ5‡C¢uŅH²ŗ,ii\¹nžöõ¹.’yY¼7#Ū €ÖÕNiŲµgķ_ĄĻ @Ic@mõĢčéKÆ~wKóā;Bš""g āXłŻ{ēŚ'ģC€R6Šu;Ĝūlļ¹}¤Ź»²ßCʽ"Rö6c¤‘rLłŹķĒĖQH)‘IĮG``ŠĄ‘M8MćVA€.•Ķ°Æ”MČr< ģtƒÜådP6—z6ŅŽž¹ ©H¹JåĢ;“®śĖV6ą×Pn¹”Ti€„d,sm× ā÷K*18ŌßōÄé¶µ(dż÷JpōÕßāæ>’>t õāĒ_ĀÓ?¼ļłČ·±ÅŻó~ ą—Ž6‰(”į—_øē™),»±’aäĒĮėæ+–9ŗ•3~&cĢŽ×'[  kvü’ĆCÓĖROGĀJĀA“43ū5D ń„ĄĄ`żIō&0' Ź”uŽw“\bT|©]v •É ä‚~/ųw极lšĻT&īß žÉ™?é!żÅtÉHH%,ę’1=RŻŃŅö1ÉņĮ’š¦]č}” µ…Æ-ŃŌµj÷v„,GC<‰£¼$ M+®‹Ī±¹­·žó›’> 5]C®£&B{*…ŽDū†GŠĒ^źēt“¹’#’  yzŒʁ;rźgĻ€Š1ké²tŁÖ5k`™©ģšĪʤÖiéz[Ö¬F2@Rb÷¦ čķ<ŒS.¹ Įpš¦8ƒJ“ž•ĮæoMŸ’ÜūļŅyķÓPąÅ{ į¤ń“w0*Ӈg •JĒżŃz Z°čH ¶ąu-ČąįASŽGĘ’ęś©ųŚ'~Œ_=ńc<ņĀo󛾃Œ’ł»>ąß52 ±n-ų¢„ œ÷Œ¾¼¹I ”¬WöīvŠ \N H•ęąP„2e0¤ C2ELØū=Ś({ IDATŚ6å£L„PŒ8IąŁ¬ł#ń²B½Eå_®Š‡bØ. ąwÆt¢”ĀĄG.mʁžJĆ8#|īžķ˜ÕĮåĖjšÉŸŲ<3ó¦Fqė%Møķū[²$«‚ų?—7ćöl™šĀŗA£qÅ“:‚‘äR¹Ėi;Śs wś=Y ¾„€z xź™'ßpń‹ÆžźÉ\B@ĮAMUS£‹fwa(Tv‰Z§$)EŹ’bSŲÜ 2kĮ#IsIė¼$éŃ(rŻÜ½–ļōå˜H?k„P¹_„Ģ)”,⤩B$üiĢ’ė „¤L–'uA‘0)’Ļ.c Bj’'Ł$’)āΊy,P귐]W×µ¢øźŖėĻZ½ś›FFFNQJńO%***½óĪĻŽó‘ÜŌėßjŌæż¾„---ž1¬@¶Oõń'''r¼¤žĖ•½E޽kūšģ»NĮü¬DG”:@aę’/=ŽG¾x z»ā×{7ćÉ’¼7|į{x5·½Ėüæńy„„…\Ć÷X*Źś•xĄ1ęK³Żäs­’®čdY ĖģŪĄ4P™”AƒĮ ɤDļ@5•¶JĀ'@1€9ŠēU ėˆ† 450[K®#£) ¤ŠÕ?Š·¶„išĀ‚°lšo+ģ8Wį¤Įj˜ŌŒFKæņ‡ļ¬žPø¶ėž nĄ*Ąćś_@ކ뒑¤üĖsż‡B!×H‡tŠ£5°œ%¾ą ”¾Ł~üéT’æ% Ū“ÓMö}{ÆL~żĀ@Õė@¶ė–ö9¤9ą?…tŠŪ4ųĻ%żK*řd¤Č2-f ʕ –ŠĒY°ģ@[ūm’ńW0}žĀ“Ā`th{¶lĢ®I™¶į’’tÓĮžī¼ õöāÕ?=©sęāĶæ¼ųĪ‚’s6^šļŹü¦zTFCxlĆ6$Rf¾ČW(@zVŽįj F ĻNŪå7¶±Ą’xßŲ‘Ü{]øń±$ż+vMÅĄ’Ā™ĖšĻž•e5˜ÖüR~$ż+|Ģē2ī¶cƒWŌŠä›kĮž”\8„„£¦i­?tŠž’(2”4Ł6s¦J‘b*å(’†„‘dŲæÆć`m}õĘhIdŽ«ą%€%G“ę㌰fūž~ĆĘD'Üń£-HšŗFø÷֙hoŠ`Ó¾ü泓PW@g ó[J²ęL‰ąĆ˜Ńʖ£GĄÄ®ėŒRĆÄb 씈®€r½|²¤½@yäy’¢„Õ7Ļyī¶ [žŪåN­›^:kśé†B—1š 1’Ź£;H+”„—ņ×YWū^ ”Čņ r+rĒåß§;»Œšr²ÄQsćRčwV»–“Ó÷,:é _Ų=©v04*BÉųéÓ;7—„FÓżK™ö$ŹRJ8€ŒEždŅž9äˆEz³Iž²„øŹžbŸzɱCa͚u”«®z’×Ļö–+„‚}}}×~śÓŸ;uļŽ]’šÕÆ~a” ŃhÄ÷÷Ø.48Žń’ Ą ±„˜ū’Ѱžēņ ųI[Īž€üĄæŸõ’ė·aŚĮøžė?ĮW7ģ@ྯą[Ķ3šķOއW~ųq\¼w ~×±øóf|ų‹’ĒrŪ’ģ›hŁø?PuÓgć·üXZ’€“o a[ß88c`Œ!ąˆ§l€ƒ‡GPSuĄ>` ü“‚żÉXŚSĄ *”¬4#¤Aάn‚õˆįp÷ w¢³k½}‰4ųĀ‚F0ˆ…KN™¶}ė–’ü‹Ū^øōõéŗZ$QČõ?ē©{,Sž¶2 PÜ?d +īUŗe)Ķ~:ā4‡ŗ›ućÓĘ»>Ō#­+TéęČŻ‡Eźw7huč UĢõš€G”Ō‡|šļŗž§ “Œ„’·ćŅ"žŠKŇŚfŽ,5=/åģčĪčžóʉā˜Q2ezž#ĮQ®ŖFć˜!ŖĀaćē¤zūą?«8³“õ1>š_ ³,šŸŻ ”““sJKŠž4ŃŶįaŒ:ßæ· ž \ZšīHX–§Vī<F(”&ž€Mƽ )=šįœł0“I„"Q€²Ŗ öōę l°·ė_ZQų¼ž1ūÉńžŻ‚¦ņ2\·h.Z·±dŹ_ ¤×¤Ņ“0fWšō½%géź÷Ź—±„Ÿč!ņ’š?qÓõæ@é„g¼_ŗż»0t›“āł5šą‰ĒsF’#o+āiŒ¶j āĶ×Įē/ĪV8ŚT5œHY»śŗ20‹`B¤”"RRJP )Ē>L¶Ą ¦’\"̘ڵ}ߓsĪjSWaIĘ5&‰SčGūæćp,½m Ė±īš–B’؅P€”s …īĮęLŽ¢³æóZ¢X»}‹¦•¦›÷² 3É(e„Ҳ2”ćåą*ȓ ­HæoU––éMͳ?y°kϧĀF 0}Ęi—EŒŅKg:)R6ē~Fs $ģ°wé€b)Éve÷HJ%mŃ#‚˜ Ās”œ°· OO‚ˆōø… č Ķ™„éœKoø…ŪEē`$ų“WĢY±½iAēP¤^yFĀ™²4ö­ūĘÕÆ=Ö\>œ¾ńRHb®g^ž·¦EĀwu&²bō¢¼:Ā&¹ĪŠß·½B °×cVn³¬‹r½¼¢ėŗ€X,Ę®øā¦ļ /"Ńhde0<0<4<‡€Ģ=Mū’“Ņ\=]8“kWAš}éknšŽęū“&æėĪź²ųĻ->NĄæ½I؊„qƒł(uˆ•„•K)¤ć›‰¢Ušę@€Lōlöö2PJ x‰’Ę"ż+ŚYöN±9Ź;4…†»ÉˆįļūæųŚ'~Łßپ”¼µ-;Œéø%ż+ÖŌ9®śz 6¬ĻWĪ#ć]³Ūxm“B2„A)”!-–)ƒĀT†0R1L °RX)i““”%5ÅćRiż]ƃ=ƒ«¤“­Ū ¶Ąq…?*„,h-Į g7ą#—6£²D‡åt½iß(fOŽ¢©:ˆXR`õ¶A,l-ŠÖĮ¦ż#Å;/ RŁa5–`$LIäøØ+6͆“¾PgC)@¹ˆ=ēfI’DÄ–-ŗō+ ē]ōĆHØō*022īyȚ9"()T&¬=G”ūn÷=–½Ÿžī»Ÿ•®„­8HļšžÜ} Ź|Tž'CAćÓ8ėŒK撞Ū~³¶żāŽ”HCU$ŃsŅ”®µĻŚūÜÓ½RJö¾¾æjéµ?=ūÖCƒį ņČO€3Æb£øŒu›€ĪJŠō “SzŽęšūsŹĪ?’ź÷ŗą_Ó“®~šżWwwo¾y’ž7īģčÜ~ESSć· ™LĪ»ś½’x]V?£1ųIYY™=Ÿ,€krĀąļ@Ęr’»Ö’±äH¬’…¤Pģ’ßĀwæy;ZĶn€hn’ōżXįæõ“8ōĒj\śģšĖįA|ķ“’€ś/ß‡Æ õƒżņ»8ņ ÜŌ¾ »/¼Ä& ʶž»2ėŁĻ¬H)D*ėāœ5ŗ©’8ć`ÄŠķt=£P’Ą„Źi čwÉ]…@ĢL”{hR ()!„„RĀž/Üm M#ŌׄP[Ą¼ö*(HŒŒÄ±sOžZ± Ńhsę.®Ł±vĒ÷mīųü»?‚§¼×v¬\’Ó}ŒĆõŸ““ā@sćžs\’svĢQ$¤­’O×į”Ęńn^żģ:+°ėÅŌĄē‚ŠļæŒU¾œ=6EĢQZ¤ĮæĒõ?ō@ä.<ą_ Ętü[’+©3aI.LĘ÷Mk{w"ĶÓ£%u£ćŃ ¬ń¼n©&3Ėf"Ģmzčh2…Ł)“ĀA趑d” üū-ö 3žgõyŌĄŽPóĪ‘œ?%ĀĀŅp¢y!ö‰={w"Ķļ*k?üƒW­DU]=ŒpZ €„ēœ‡§‰ŽŽCXłÄćéKˆ–•”eÖģtW^õ„‹ųĶ€Ż7 eÖՓQUß€ŽŽĆ~Óó6ĮńDīķüOš\ž8%A7,‡ß¼¾±ø‹k³vŗõ¼ėä’ #BfµÆ.±ų|o&j‘ÖĆ,C‚rŻäųw% ćž;~„óO¾#±a¼ōĘÓøä“«ńš§ <ńĒ’ōÆØšļŠźé„ÜüŲ¬łŁmuĪ«ęµĒńś1š„ūƒ$"'–Ū1EĒ”bA”$ē ¦T¦LM)6?ĄöĶ{^X¼|ībxČå–bœ’GEpłņ\°Ø ¬źĘ¦}#˜ŁIg»Ų°w8vŠbŻ®al=0 –L/g„ý¾É×ĒĖ "t27ō„½”Ē ”1›Ū”’Nż“[@Fˆóɤ6A¾Fz_‘R’KZ—E)!i\KG>HHbnJ:„ņN ą”ŚĖCŽ€“‘^@@JA 6ĄļßlŸüĶg—^6””jLZ§¶~ķƒ'o\sf[W'Ł”%Š1RJ’śē‡N;ūO›š/ųĢOŗčW|łŽė£¬0™vO°ȝ[\pŸgå'IÜĶĒŹļt•‰((&‹,ŅTa5Ā®]{›7oKū.¾ų‚O’ēžß­Ž:+Wžł»Ó§/>?™LĪŁ·w’-~Q°Ćį‚Gžfå„Ąß©Ü=¾ēÜød¬Ō~²wŒ6<Ē[PÜś“g@pi¬ųŽ’ū{Q †äÆüG Üśy\­šh|ŸüĢ ųŻWļĄWzćēÕĶč>Õ ž‘õßōX’tڤā{9ć`ĢüĢaņv ?(BwoÜ8i–’ŒoĘl/bÉz†bPʲÓYIį žķ’¶µJŚźh%j˜7³·¼wj£ "LžŅŖé4żžŸE’f¬Ļ6ę×õČöĘtż÷Shpāų‘qżweB®’Čvż÷¾sć䒾-ŃJwß@µŸøĪØś&éšņZ’óqR`äó€„@.ųB1é€Ódü`Sóé±²ņós§ĶAēc/BYyŽrEg:f•Ķ:¦ąŸ”ĀĢŃĪ!Ā”²’#’¹eo#ŻßøĄö0ünAœŻŁK{ŽŪi#C8’¤S°ü܋P;©) š®ĪĪČĄž}č·Ų³y#¤c¢Ö:Ģd*k½;}Į"ūłB@מ}č=tŠg¤ŁūĆż}8“k§½ĻsN95=>Ź› Ÿżqƒ’}:ųĻ̚Ķq’ģłøń¤؎Ś/W ą†øRS^ŽŗŅj00{+’ĪĀ^Ąß Ū¦7į—(1[0®ŗćīüŲ“žÕVÖćž/>†óO¾‰T·ßs#ęM_ XńŚ“™ŗĒ+é_±¦ŖÉŽC»wä•SI ¼fŽLč’ †ŹB…”†Ā”†Ņ0M2)tS(=eɀH‘F–ŅLA|$žLõt¬PB’’vŲ»"ĒĒļVDNžYއ_ķĀ3oōbŻ®a$RĀ1‘oŽ7‚°Į1oŖ­°„ĀśŻ#8cN6ļ)ģÆ>†$RR)ř€F JÉōäzõ–¶u‹ˆ<ēņz ØōĆĄ{kŅ ė]q®'«NĪą„TÄ ø(Q€%€PžĒÜBi(k H‚S@c9į–ĢĶBĄ”„oßßyi霻?åś”D tqsē[~ų‘ļż×MO?yJėtŠ@ZcJŻ{Ż+ĻM®޹fõIC†asXžfoŗlūöøn’ā¬ņ\ų.J_ĻXÖ頖óčõß’·ūņR˲j ‰¼ž«_żtuś £—Ŗ®®ķķm’)ӜvõÕ7Īć“2^wÕÕÕĪØ{|Ė Ą’rłk’“B©’ŽDĘbž×CF÷F+p»XōŚćxźg_Ądc43†¹K‘üüwp³Ā, g%ųp(‚ļ¾ėf.Źü_ą¼¹Ö?h嵞ēŠe‚bd+ēœq€ĪŌĪŃŃ=āÄü;V—Ą~ż1[!F“ ōŒ& •iƒų+™’¶7€„’”» ·LĀ6WI”–š×ĶDzE R ““MķēüįG„æ±"+⩨ė?Ļ pd,×’ģ>“ H×t›ńŁ®’Ž—† pņsż—ŽėüK—„ž¹$~īu%«cĘh…c*K!”¼©žurłÕų$äå>&ąæšh mŁyĄĄŁ’že,żŲĒŃ|Śéy}f®„Ą,jūfŌģ߇“—Ÿ†3ßu5š§ĻgŁnŻłą?S’ŒÅ°ī…xāžū°ņOO`㫯bļę åŖ ©-ćĀæcżŗ¬¾ Ø)6ÆYķ¤*jjQÓŲärü”%>sząßKšų×’ī MĆõKę”ÖCŠ(d „ S'MBkĶdL 6K ¶ĀQ8+g“xĘą$ćkč+(ĖĢĻßéßÜé‹ńŪÆ=9Ó!–Åķ_½‘PMu-Hš ¼²žygĢž'ę\Ćg>šeŌV5ŒsLłż Ņæ1{wBܟWĪj"įąUóŚ!UP JĄ°„2,K–DPZ* LH„`ˆ„ X– $Ā)Ҙ°xŅ’ŚÖm{_3fÆeŁJ€Ōz1÷Œ[*T—Ś~~SjCØ* ¤ļĻHB`OW•Aģ:lSؽ±ss[¢Ųt„ń’0KBcACɀ&•›4¼J¢,”®d&ټ/NŽ¢\€-y©‹³ŽÉüŸ‹S"„ōß2ēÖ¶ąŖ;Ąæ{’5­’4{6ø@°Į?gFĄ.ÓCww iw–Ķ`{Ų‹Į‘D}±¤mł—ų—ą—RZiĖ?œŠ{Ūł”@F!„ 1ąŅsŪpƕsŲ^õ Ķ5;ÖŌżń”Ÿ²+€·įśāÖžLZŗ×õr]’Œė?`ĒÜ{•)©Hz L‚`dކL‚ q7EŸ—Č/'ī?ŚO‚øēE§4žže.ų÷A# ”²,n§ūS̔Р—•4ö6M¾YQ6„€²:}fQ:š,ŃIĒĢŅ™2cÜm&*µU8cɳĖ|«óŃ~åUhXŗ m—½ Į²ņ¢ąæjÖ¬ü1ø›£Ć«W"ŚŁ‰E§œsŽs=¦Īž ¦i>§Ī»b+•BĒŽ=Ų¾īuōĪXų+jkÓ±’Ā@wwĪełƒÄīMÓ„­ó²„Y×2šOŒPŪ،‹—bī©§£uŽDĖ+²Gp€wߊ4\æt.&•góf0",›5 õ "TE+ŠV6a„ģ0UéüWH{Ø4?€ß7t|Ā8A²¬qśÉ±’E]’}€ōE§^‰ūæōj+ėŃ3Š…Üy9^Y’<Žsžū«ßz±ÄhQĖ’‡®¼ļ×Gńš·^Įœi‹ņOõ‚’¢ÓåœXnßÕדw˜O®(Õ/lŸ*-iX– ĀBŠҰ,eHĆ4UP˜Ņ"%ua*-eZŗH’¦’R‹ÅRģąĮΧ•PRAJ KąCćw+ O­ķĮEKŖš[ŚńĮ &aóžDC™×Ҧ½#Ų°o$Ķö’ęž(…#Ž’€Ńx\R†–äŗTŒ)(;°?ū9B鼘ÉĶ ›3 ćõ&¢ģø}åć+BŹ4æ`.)€{īl±«X9^”óiŪ[i,lTj'/h4Ž}M”f.g„¢¼m”±\µsʐėšķ—§@ō±3×=śO§®·s0J`(Š\ŪŽ"¤"é”yåģY÷Ąžžp•Ū?vhņ ‹²¼ŠēĢ7Ma¾@2}=é” A55‹+/Ÿ÷ĢņåW~$S;^švuvöžīn_xįyÆ@ Čė9ēœ ōķ0<<ģÄÉłĒ’[ž6š’ €æG¹ūÖ+ “)FžWČśæ÷Īß˳ŪxŻ’ktčŁĒ?ó <ł­[ńī®ŻųĶž-xģ®āżwż/Ą7ć]‘(żó=x=”R PQė’1ˆżlėæą ‹ļZ©Ąu(š§½J1ō„`YF@`ü10Łź”dC‰$:»1<C4¢!ęą PŅVxŻžįZž]°ļ*`›¬”ō( 1§½·Ż|ī’ĶėŲh„ee<7īśŁ7»Næö’$>ąž^_GÓõ_JgŽė?<.iĀN¹œėśyDĪ›MXŠqOÜæ” ę€ü«”ćŚļIł—÷ļ\µėśŸ5 X™qśžĮT‚lšĻXJ(>ŖG*MžžQeē!ΈŗŸ}‰CŻ~Óģ+q“—¶3Ėæ®k˜3½ 5y™ ”:R-Ķ08Ü żP'P$dĮKž7>š^xß_yąW}āéžZ/¼ҲpxķĢŗöĆ`矒”f§æŚłóqĪWžŻŽĀšļ}Ćö{°’³”$°d_B aβSŃ2k.¶½±‡÷ģ“ĄĄĪ%eI"˲žµ/9 [_ V*å3gž-ēc×[o¢uī<j›š”éXfźˆĮÕ¤IXpśYˆ”e§Ÿœµģdō<ˆÆž£ƒéĘļ4ųw7t®įŚÅóš‡õ›°Æ×Ī={źTL©ÆGI8ŒŽ¾>ŒĘć0tÓ*¦ćŠČō„śķ¹÷“¹1ūv`³g€ć @†mżwPOĮ:cvu$š·i1šļSś¾Ė?‚ĻÜüe0bŲwxnżŅµŲwxĀĮN]xął×ž(zĪ©møõŚOzŗ°cߦ"—0Aš?–Œ„ )zŠsTIČ ėĮ/¢Ń¬jśü†ZÕO„VķŻ/ ””€€TDLIAŅL*bŠH*+Į@d)t „¶m;“­¶”zWˆ­SÄJ‚‡“ÉѲ ­ó?żÓmčɬV^Ž4€ĶūGQÕ°§3‘žą¹õ}Š!wX¹§©Ŗ{$\ŻR5ø’Ƨ½¹Õ;¼­‡+JæśŌÉ7,hź¹w^ÓpætŚJiy~}ļą³·?q×ŌźÄˆR)SJ0Ć0mßDĄŸ0'Ć×ø2- šĘ•e‰¦ŗķśhfézŠÖ91æžõCÕÉdr hšÖy×]ŸŚ£< ¹¾Œń!°,+½qżWģ€ł·æ€wÕÓŌŌtT87žšrBšæXŽiņæńČx­’żŻ…ÆexäG/’џbĶÆž?\²żM<ŌµæżŌõųzu-žėėĘ7ā£ųqBùmR PÖÆ"Ēś_h –8/h} IDAT `āÖXz±µwhē€UnЈl«æĖŠ,a§ģ鍣±!Fd3Ē0;ž“q ĒSĀĀh,•k÷Į2-a"`(‰h(j(+  ¬TCYTscė”×õßž“Ć\ßU7$@”¦2„;nY†‡ۈ—Wiˆ„kĻš;ƒ Ÿ9ųŁĖqŲĒśŸ'użwÕßŗ×õß±ž ,čuń§ė?GöP äŅŚxĮŃødĒż§½8@˜ō‰ū÷2ž› ©)¦±”PܔZųPėŒ+M+Ļ‡¾WŽĄČ–=fÉgވcféLD“B,oOŖŹĖ0æ}‚†Ÿź+#JאœÜˆTc=ōĆ]8œ§Č“9@×/Z.ŲĖēUĶŁ8bšˆF±č–[()Ajtˆ½ˆóžū r™“ݶDXšĮ[•3Ś!’ɬ>s.*6 ¬Z jkGdņ,:ó“Ī™‹kV”æ³ĆÓ6o“¾:‘įž>ģŪ¶SŚm„éó uī\l^½ ;Ž\ąŒ9‹Ł|”Flx‘Ņ21”T”c «Ū{ЬłĖ=æ·tźÜ¹˜sņi¾÷“ØijĀYW_ƒ+_ĮŽ-›}ĮIE¦Ģž‹”Ž õöśx4dvЁ’܂bąßŻÓĆÕ ęą‘[·$Ś'OF©£!nØŖBg_†c10bh*™Œp2ŒC±Ći @ĢYJ:y¶‰fĄ (˜FŠ‚46ų/ÖOöóä94ų÷lŗ»>śŸøāœė붬Ęm÷܀ž!;Ēü‹/€”””ĀŠ5O“ž3bųāǾC7 •Äßæ)3gļ÷;/:f’įgvó ¾M‹ĪsĪs „ńęZ°%ĖAFöb pęŌ&9œLŠM P‚“‚©¤f»`+€Į%‘¢”R¤¤JAAĆĪmūŸ=ośTŪźĶTEx¢gtę„^݃©¼²Ža½Ć6āµņŽåŹ‘¦’€ŽžBV•¤¬pPHIŹqŃw½g\ Ą!Tö§! ­(ČüČHz4¹÷NI€x.÷^–H!‰>W\ Æ¤7įo¶„Hg”ī–ŠØūĀLĪ²į·v``ß/Ź_f”Ī@D‹Ž]y‚BŚZš1­yŅ„ĢjŠs¤š`6ŌŚŠ€ƒĪÄĀ|Ė‘Źłxūą“PŻ›6¢qłÉišo%ń²ćg’Aóég ²m`Ēć"ÖŻåŠ¼cjėf æ4wŹŖjpŹ…—įą®Ų¼vĢD"w“¾ąßūŗV`d`Óę/@0cūķxäéó aźT¼ņŲ£6Põ–ōäĄcžØ”‰€’–Łs0÷”“W&R‰önٌĮīnB!Lž1µµ Ę1ļ“3 •­[ņpXūŅåØl’D:vļĘėĻ=sD࿘ƒųw…sĀ•óŚ#ĶÖÓÕUV‚ˆ04j J£!=ˆ}±½H™–ƒļž8œ“*{²ĘP%lģ߯qžĖK*qļæ<€„sNüyåĆųģފ¤øŸæürĄęŻo¢«Æ0‘Ö®¼ Ū—~öšw±~ėźģ EĄ’˜+ŽbଦGŗšI& 7¼¾p²xdˆ`\Ü>5ŃOÉĪĮ>((HR°Š”$%)&-H%ĄA¦½öčėjl޽U^žOš šŅ±=ēT*åŸ:÷x”żĆ*¢¦ęžr*Ŗź'aŽi§Ū ėœa#DĖ «†rV?ć’uu˜sņiéżžĪN¼š»±uĶkčŲ»ū¶lĘ+ż›_[•Ž%ž¹ä$p]C „«ä«¬oHƒ%$¶®]sģĄæCģŲ’($ŒT¾©Ø¶¢e÷ī‹bjxJĀA0PĘ©*\KŽĀ¾kOÆšĘ0ćžY;Ę’¶É³š?_> žū†zšõū搞u-€3–\X±ęI’–IÓń±ė> Ųsh¾÷ą=XŃĆc’ +C W Üį!ČMėņČéHc,xåœiĀJ(C e! iŁ\¦T†e!`&„‘2Š…%u‘" P|ӛ»W©L%®āŖÄŲc¤Ē˜–@ץ€*¦D]yĀ -I Īz6żx*@˜>ģ‰ĒOOÆ{?@E•,FR—ī(Ąī_Šu@€Õ—Õž4)xłÅ!­¹u<ąß•›¶XQ~żt¬¾“ø¹£æ6:ڳīp][ēpŲp½²«±śę_\rłŖŻ“–É“Ē7“¶¤„ÉHĖĻj0”Ōūś£mß|nĪÉŽréĖqĀכߕBĒ\2@;ąŲŅ>kŚĖ044<ūg?žMc”zėÖmuuu_D”ś×½ć•¬ >\€Į`Š3†Ā?—ŅŅŸ±vųq,G1Øć„O¢īņu½ą¼‡&āžæĒē5ø  IEĪÆū“Ł›SV•s|Čs¼÷’¾x¦Ükż€¤tž9Ö’i²µźzˆ ރ×ϾĻĪ; ĆĖż{b£@ÄcÖ"Cž—kżŗnģ×wÆõ_zIš“lė?`Šīķ ¦4·Ķׇapčŗ śmb@FRSšĖŠ4Hż‰)™Nń'•€Pūöch8!,DC:·ĄIŲØUŚ a XBŲJi+,ÓĀąP;°mg7Ö¾y/¬ÜŁ…76ĘĪŻ½čģĮh<‰ĮQ]Ę'7ch8Ž]{ūlM¹ L}k„vU(,ž«ŖWYL@Iē{]’ĢƒČ¶Ā™F\¹õur_@\Ļøž\²?‘±ž[ĀÉąĻ "®ŁRW Mcé¹×HΈ+Ū}æ ė?qż÷Äż»ąßėśĻ-'A-c¶ė?Ą¤A1NČ’[RēŹfüē½5usźźÆĖÅ.©ŽAtüńyū¾ŽSZ"-Ø2ŖĒ]¼R cŁüŁ(+9:!Äd4 ³”*h€Å oh@ĮŸ_Y.ą;ršŸ^üē­’³Ė*Z§cį-’"BļÖ-ÉŒŅ2”OŠÉgƒķ>b‡Ó0żŅĖ1åģs~łŗŽ\Wp yąß½Ó:%e@8 ®iØkžŒ²źjōu‚%¬œž£“šA…“ƲzćĢyśĀ…•–ODMē ˆ³SfbžvFC;Ąc¤„ā£/ķhž·jOC '½ė‰ÓĪæÕ¼ ŗFBÕ˦~ć+Wüåw—ĶŁ}4®I[!Bp##4õöžźµé ÷ō–LżĄ);_Ō™TJA9†'ūz™Ć_`+b”Ą€)b™yd,C(Üy±wœmęŒp<$瘐ŗ¦+™²ł M ‡zš±k”sĆÖŖŪoūĄsn’ŒLA—_~Ó-==}§@MMåSßųʗwėqĪ„­{õz5XY! &thŹõŚ t…”M/`ĪMŲj‚P(¤€Q`D%Yʁōv.Yäń$'BžŽäī1_ńł²¢@›#!’;+õßh0"oź?W1»,įĆā’NÄž¶õbÉī·\«?‘MČ€A –Å”q޾žBõōĘbH •’Ņ’JŁ@¾¢ĢĄžƒ¶Åß4-G;!ą,  30MTJ ™”HĀ& 4M!$¤Ņž‹ Ä±{_£0B ÖŃX_‚Iõa“M­ĄÖvl'×ÕÆ=Æżn×ęų’Ń{(čś_Œųą⾂®’N*Ą¤åŌōZ’‹øžk¤Ī‰åz+sż÷’žĮ1äyĄ?3šļĘż+E¦TDN¾S )Å Š„¤b#Ńhmocóū)Ē#KÄčųćs©ń“)M MB]°nÜõĒ+ÕeX8» :?Zƌ š!Xõµ°źk”u÷"°ļ X<ž’ƒ*ĀųŸÕēƒ ƉĻ9~čĆć“ÄźoC`ŚaĪļĆöG†4M€=Āģx/ ŽŪ‹?Rp cxaė_fĪ&ŁĘŚĘfœqÅ5Ų°ź/8¼{§=?EĄŽŠ0ŠŻ×ž~KĻæš®£nņ\pżč:°±įaTÖÕ£¼¦ÖQ(lćuĻtŽ žA@ŪĀ%Ł”©–…µĻ=Ó󝦜Éß»i:öģD2Gyu5&µNˆ0’Œ³Ņõ„ibūŗµyWō×’n+}tˆrX,;¬Ś!9¶żG5Ņ1IoE'ö Ž#H³’1÷$'€ĻŲµ Š€’‚GĘ[”HÓbąß#×]ųÜłO_ēGśqĒ=ļƒaq÷GæśźF|žŸ¾ŽĖμw~ļv\pņ»]}Ų¼k½ļyo¼üV,š¹šĖĒ„u[Vį8Ē"[œŲłˆ6„²"°hZˆ×•—r„Z— Óę-LłźCA7/_æ}Ķž†µ/ķh^rד§N éVüĀY»_žųYė^k®åéŚĶ”DŒ) Ęø4¦Ō¹3æüūõ-WŻūlū‚Ļ\“ńõōe IšĪeś=ĀįND>Ćßø,ĶPW…œ3Ī=÷䁖©“ŪµsļU‡ŗĪ½ą‚Æ}śé_<č7M‹.>’śk·oßõa ¢äĶ7ßųżńœśH¤²²2=Šl €Mf«ÓU9”ų_(’›Č’¼’kż-ūoh )?Ó2Vģ?ž ±’®˜rūė@ć›Pćv&s$c„ī¾8ŒR†” (å~ Jøa6ĆEYĄvū·,$! 1įXł½HĪ W)  Č DŹ”H„lå@Ā0„„„dšg@J ©†ćčÅśM.i`Fˆ˜Ö׳·’ł¾~ÖUž”`Ī»ÕĒõ?W²\’ā?ÉŅŚPėZ4-ķśÆyĄæ‹œĆśļŠĖśļū÷sż‡Ēõ?WI”4žGśgogĒż“`LyI’øĘR)ÅM©…O™ž!Å(œÕÆRčzā%X#ćOGSiT¢)Ü<īś’½7³£*ÓǟsŖī~{»½w§ÓIw'}Ā*‹²)ཱྀŒųGeĒQgt&ˆĖĢ(Ž¢32ˆ2*‹ˆE•°$²@Ⱦwwzßūī÷VóžžØŖ{ėŽ®ŪKŅAōĒū!tŻŖS§N[·Ŗž÷}ŽēŖĶŖ©Ā’ys tMß, Źr^ŹDUUp Cķč‚‹g6’9šmšŸ»{a 8®OŪŚš•«P³ŅŠ:öĢSkopōÉ'ŠžÜ&™Ż¼ū½š––v’ü’ ŅZnN8/3†|õ{ćE—ķß $“ ¦f€ĖķĘŹs/Dyu-ön{É<>Ļz’&’ÖR߉¼šŲF¬¾š"‡ŹĮ5sǵ?øs†ūz§žżĮb4/]–YuhēDGG³MņĄæuŖ)Ó”ˆĘоof/Xh”’0Ū„“Ių‹Š‘N$²ū:#tŪG§1Ÿų·Ģƒ„,÷•Ŗ¢¤$%ĘLMµ®¹čM·¾‰<'9;ÜĮĀÆŃN—øĆ€3&s”älš ü3@QT|å’‰÷½ż@{ĻQ|ņŽ÷£½÷(ąź[ĻĘ?~ģ¼ū¢bå‚3ń«o?]lŸM۟÷쀆ڹøåƒ’8Ń{ßčė†PüßxĶ­XŌ“&! ąYu «™i”ĢŻf•äĢŠÉ° ę<ĮŹ0[ēpˆ)ČFk-={’v“ȶv'CŠÕXrƞļį•łD×S2w0 ,\Š÷fk³š*žvå¾÷é?}ūOg $„Kłō9ƾVāO¦ Üōm óR¤KÉ\¶2½VE€øh׎ßķiøģń} ēżÓŪ÷īœJž‚€ĘøõFœē0JŽŸEĮ„)¹85ūę_ŗļŗ÷ęÜTJ«xå•Woki9÷ŒĘʆW"‘HIGGĻł‰D¢Åj»|łĀļ|łĖ’Ųf}6JŅxh„-8—€Ļē%ē*€fž’dö׃’ßJų[“ œ3Ļ™·ŗ lėņsõóŪY“‰’ 8loĻ[7żæ@4 6¤€YQ{HŪ‚‚Ž0˜fi_n>p¾£č˜żŗ¹ g€°Rø³ųߊž[ 5i£ł3ÕP®Ļžg@¢Cō_J02ū²¶©BuZcgü}qq1WŸGWĢ4U ’G{†0gNˆČžfŽæü­TĀī}=¦€ē$tÓY ¤Ż M‚„“Ų$Ą™„Ź%<Ŗ„×#ą÷Hx].• p Ó d&o×ÉH*³ļ“T6°­"M³Ļ‘uŹÖ.3ŪÆõßė üēDż·Q’0•§ž³ Ø’’cE1Ęč@ż·‚0.³L+ļ_ Ėäż¹©“"5R;ZHółäĻŁšó;=Ü^pNó- ŃZ<¼šO󤬩”‹ZęĢ ųG¶/f£XZ†™/q?ōśPQ<™OŪ•©§žĶćŲ6X7qŸĘÖéĖš…Ź!Ņ)lžęנdz iŠk€/T޳>’EpUÅX{vžšą?o {»Ń0!€ņģ]“¤¼U³fc »ŗUe€[Ä™Āąßś“J$Šq`?҉‚„„p›źä FĮ=/mĮ±=ÆO ü30,\{&ŹŖŒąWll Æ=÷lģ±Ü’± c` Ó+,ÆĖ¦}ŗ=̚׊āP9ĀĆCŠÓ…į­Ąl†ĄæÅŚWt äöŒ“ß ų|Š…@Źøõ!Ø#-“ —]³„d~6dĀ—Ćå?Iź’i’Eü÷—Ä;Ö_Ų±ļ%Üøįō wgš„µ6m{ÆŲŠÕ‹ĪFؤn—žļ_|ķ=ĒrĄ¾ūłŸ¢±¶D„Ļ~ūz“÷uBįk±„a!žć~„y³įź ?„eóÖ`÷‘‹ä7‡}®'²é€’qŻMņ±į°źZĄĪ²b€:'T¢ŠP4„'.Įˆqˆ12Ōļ œˆspćĒzkj*–ŗ\ÜćS¢b4r„eÅō¤×ß ‹&4l;Š!ėĖćéU-Ćńł³¢©"æ ęó‚1KžĶ||æĖŃ-a¶ŸPęZg'1f£ü›ż02Øż@1ė Łz“Ņ-,ēY“wĖ5ĄLĄX©gQU­÷āå%®%-* ä8õgŹÜ†¢ņŲnĪ 3"ĘD#ƒzĻ£³›zzĻk>ŃķóJA”=+·Ņ%˜™^¢pāą$ME@Õōmµż½%+ź‹ćūׅG­J Œ²Óü­õ&k‚8Ļ:SēDE@Z)ĘwØX"‰d¬—™ŁęąŅ$urN³ęĪJĘā‰];·½~¾”ä‰Ē³»»ūÖ ¬²Jų1ĘR+W.łÖ‹/>öMC°“¬lŹL €@µRtø4•ģųßķvQ$ )x<†0įHŅ¢’@ EE5Łą ²2ółöŪo+ą-ūĖŚķ“>ŚĘŪ¦“ŲēTÅ’ę`j„’2–żOŖ`ÅŃ»#˜Ą÷ˆž€Ē ļ©Ź¬jfVPø”žĻć„Ī”($€p$‰ _5"ń$AĀ’6g@q@ē€: øÕ¬ Å ) ¤”! ¤„ 2i’DYśæ4—!%8—p»$\Š„ōH$HIŠu@€¦’¬Ļ€įGč‚ē~éki^ężĘ² †v ’åĻ+·![ė¦5ź?I0ÕåLż—v1Ÿü¼‰Œ_ųgŸ÷Æe™¤™Ž 3ļ_āŗtq2E’ŗgϹ0¬Ķ?×č”vŒ½v uAó*^“µ‚OƓ>kjØCėÜq NÉ&’ČŻ.*B!š‘0Ümąį¬¤„|s’ßjœ{§Œ^/ø”ćīupć£HdR1ŁøŻ–|š#P½ĘÆ{×}?Ī !9śĢ’#T?ÖķʛLkV °$TŽs.'v>÷G õ÷“Qy:ó~8į¤DĒ÷ķĮń}{ą/*F ØZ*…šČ0Čś‘Nü{|>4ĢĻś¶Ž¾¾+[ĻirqeĘT— se…Ÿćį1³$!C͜¹ØžŻˆz:ć(x£Įę(RĀ•CśKDZX«ŹŹ ‰5F 5®Łč×:_8‡ Ąd¾7KĄP VųK‹ž„ŅI¼~xĪXržÜü|łŸ6Jō9tšŅė›põ­gćĒ·’Ėę­F"ĒÖŻĻk÷¾KoĄŚÅFň_>}¶ķ}qŹc0 _żūļĆ„fŸŅėW\„Gæż"¾÷Šø’‰»M ÷”E4 IDATĪŌh5Ķ·”)ƒs3„Ó ½»Ą—ÆĶ8±€¹ī{ג¦ÄĻ¶ļ—šNBcĪ„’&©“”ŒøLJR!YšćR&bZŗ§{čÅĘ9՗sUPSٳ#{śė<ÅoŖĄšŹŽ.*ö%õyõ‘dS]4]HKf¤·ˆ,O0SŒ2uĀb0£ ™"2ršMW˜dą q,Ū3“Įˆq `*_9c%īÅÕī•M*/:ķZ œy‹żjKSR>œ;ƄLU9ś"~ϧ¹ųʃ}åĶnU¤üītÜļ±€;ŗõx±/+ń„£„¾T¬"˜ŽVSŃŚāh“©:©ņ§’Ÿ³·ņÖ¹³ŃŌ0‘Ģēō-Ė"p’¶µvē€Õ^†J -…«£ŹX9·°f”Źé€»āæ} WU,żČu€Tx ūżHn;ŪnEõ ˜{É„€=»Ń·s‡ÓĄĘ0½ź¼»ÓxĮmĶ‚l·×‹3/½»^z]G1²„ŲÜłX7ļs"A"’­|åĶÕdOÖ¼ėŲyŪdū:¬“mKk)ÜõĄ×ščļGW;rŖ,™N :ddĢnŁõlNeØ«jĄmŁč8’ŗC1?ˆ5×_ł),i^ ųłļˆŽŽćųä{ž ”’ |žŗÆ”yÖÜqĻgs™kĶǤsåpMqߜė(<:zl^.)Œ—ū¼ī+ĪMžz÷QɉH‚ Ib*—LŌ8i\ŗ“Ü%(­r)Atō`×¾šŚ²µÅ]pĒ嬢g†Ū#×T0šÉĪč ³]G(–‹ēD“‹g%«K“ŗKÄ8·r’Į-'e«Ģe²eņū ߙéPƒķg〠%IĘYVŌ.ÓƒY'žŁŚ’)#0RxČ»¬²Ü»bŽŹ‚§%Ś_Ȃ˜»2IYgF”fÉn¦TÅSĆ1_ 4UŒ¶÷†ż•ƒQoe—tx#Ķ5…K=äO÷¹™Üß[²rOwŁĘeu£cBJpīģ?RNƒMPoœ€€sķ¹©k>üŃ«{Æ’Č»7ōöö©O?ż\(PRšŗöo$—*]¤dŌ b±8æõÖYŗuėŽõĆĆƋR©t”äs»ÕīP(ōŹ7~ōįĻę³žhrzƒ(d‹½i#žłö–ą’vūIšMöy3ˆ’EĀ`NÉćI¬xń?''žgߖŹ*’ē›ŪażdŃ’üöÖ]ŲńN¦F( _­* 8SĄ é½‘8øĮr‡Šuōö…1·!˜ž  nŅłĶåņR7Ś:tH)Ö8̈æ0˜ź?YyżYҬĖ œæõZåāą÷Cc3@Jņöu‰’÷̃”åk/’^Ż4äXCEJ3å¹Ā^į?²•ųĖģo§ž«†¶‚ՇЬ~ĶDŌEźæi&õ?{   ųOąŸ“Ā$ˆILjÄIQøL»ü„ƒs?F,×ē Óś~’HÓ1U›œ‹€:3Ŗü–Ķkl8½ąßB|včĄ 0ž³ż Ėː./ƒCéč‚28’r³83ąę]łNk9Ł÷‹‡ Ēb搫Õū²ėoS€»~rožD*-Fżŗ³Į]nŒ9„ĪĶ›!’Éqķņ†3īX¬»Ģå‚45Œ]Vœ}.J+*°ēå͐M`/Ėć^žĄĢĮæ­³śęy™†mū÷A 1mšļńł1wɲ̶ƒ;¶AJĀ@ē uw¢®e¤®Cč:Ą€–å+1gŃٵ'Ģ8(³Ē:}ąßZäé4Ü®R,Ws1†šP]ƒƒHZi`ØtÕį-ß’ aÜWĮ MΠ꿇X٧üOHżw[ŠŁ×6iߌ1,lZŽźrć·“i[nł?Ęnæł{ų‚ "Ü~÷­ˆ%¢ż’sėēį“ļū£lą]ށ”žĀ6’wŽvĪ\r®}ŪGŠ7Ō»õŸ“ŽŁézp<°ÓȦžM£ī Ø¬&÷ģšWQ*Īn¬Õ¶ttw’’‘dŒI0H]rpbœK––’1Ȕ&©£m`KSKķÕŖKČŚāöd,żōČPźŅŠ›” ų±ž1ļé‘Ķ5±Ōņ¹£‰¹µŃtĄ«IĘlĄœrQ¹]³©²Ą˜‘[Y/›Ķ m²šLå!ļŹšrϊF•ł’"Š T¹x}­&:»ķėķ%…Óe‹n’éÖ„—=·ėŠgĻßń—I”°ŽŃ"__¤ČŪöūz#~’PÄKū¼į˜+Iŗż±“ˆ¦]·"ÓsBńC#I%‡š*„Ę8Wßžé„ē äÆd• šŠl“tčšŖnҶÕŌTi÷wģŃ@ą6»’ÉO®śÆļżļ{O“w^­ėzn‰ étŗ1ÆŪ°į?>žųćO}īłē’Xø©iEEEŽzĶö–ąoÉ&‰žŸnk?bæÆld,ż˜~ōߢ’;E’ ėߣ*ŹūEŌt Ē0ņ²€:zRZ%iäų“„”zFĄˆĢ T„|ŃætZĄ„d£żÖ_+ ń—6”?›č_&ņ/ ÓÉ0ś·™ŖU!`4ÄĢ«ńˆ8sĖ“üæĖŖŹµōÜ”ĒŹ«·G’]„’¬;–äÄøŖ:S’%˜•DOż P’ͶÖņ”©’ l"fŽ? @‚øŌ‚81—šäŗĘ\KZ?.¹’{¹”’ÉĶŠFĀSšSØńÖ r†Ėż5ĶŖCKcĮ»'e…ĄźOž³e£()\Z1ŚÖed,§ŻL‚W0€E0Ōüc}½8ņūĒs‘k¦+†Š…‹PæĪØ}~āÅ0rÄĘŅ4ǰųƒ6Ŗdęår,½žģłŁOŃöĒg €’ńކĢĘöćĘõ?»Ń~ʘ3!|ž ¶žé)(ŒA1Ž3/ȹó‘ÖŽeŪ0ųw¹Ż( …2=ōu“Mü óV­ā2nų£żčko7eˆ€u>4ng·Ļ‡ÅgƒĮĪ.Ä#aŪ±œœ3 ž­E5…*Š)÷‹1†ŗP' ™%/ŖŌzHM¾hĘ Īįöھ»,@!”ā0žéڤy’­Āqß¶ö2€$‰ēv<³ļ5oū0Ö-æ°ńĻ`Ė®g§4k̜qÜ~ó]šø<$ńÆ?üŒĮ0`@86Šæ’ęūń?_zg.97^s+~óģčīšp¼' ž'³ Óįż`EE@ (g½÷Ü9µ²;§¶Ń!&ĮH©Ä—ŗB’„Hrʉ1IBr:v“ēHķ¬ņĪ ēõ\MScéxz8؄ÓėKfRŪeŗÖŽ;†]‡ŪÅģŹXjEĖH|Įģp²4˜ £l4Žü=ę°€!Óoßf,›,Ę2‚~¦. ŁĢPÄ# #-> ń¤}ƒsRįYQ]ę^>Kå>§ Š7Ō‚¼eåHžHaÄ̱’ż¹»ö<ņźĀó~·§eķgĻß± <Š.ē•ETŒ…„1y\^]ź āŠ4Kõ‘¹ąŒI€)Į' čŒ+.é$ś—oF^>!Į[¾¾ałI¶Õ* 3©¤d"n›6m.śŌ§¾ņńööĪQN˜PUÕ¾@ °Ēķv ¦ÓéP89OJܾżÕ»>ųĮæ»ęĮ’{Oį‘F15nš-Ł·ß>…}žrö–ąoČ&ū¹*żßIüļŲ>°Žv0żų‘0”¹>`a±‚ł„ąĢ\ŗ@BIźčŒāą3GpDx‘.n€^ٽ® "ŚdŽr'>¾‘„’N&śļdS‰žė XDģŪĘĶ\$™FTOeœß Ż ókś‡"Ø(ó™@\duHfæ"äˈż„I@ńHõ_ڜ†ź’Ș‘ćĻ!Į™ń‘©3@”aXy’Ó1 ¬𺁑0 ŠŅ²®ėXś–c\7«Ŗ¶#T-·,ZĆ6/Zī°Ø’Ŗõ_¦ĮTwö‹³–Ņłū8P’9‡3õ_U2ü“„žŪóžA”Éūi¦)ŅøŅŁŅ|¹īqĻ͟Ÿ‘­{?>ń‹ØŻ‚j3›Ÿ_WYłM§)ēæųĒ8šŸibĆ×yūXKŒA–C[±"†ŚŽ >4 {˜cdWLžsüXųī÷ĮSlųkv’ģ’ …n\@\ö±æH]ĒžŸ’tÜźÖ¬Å¢|Čh#t$‡ąÆŖ‚§ø«?} *—.Åö»¾—͹Ļæ3 gąG€|^Pen2bõ¬\på5Ųüō §“ą¶ V­ģqó0į±0ž³Õ—ĶŠB!0f•š’ˆ OüJJŃŠŚšŁv`Ū+ʋž$ćɈv‘]o s×Yfü›‡'1*ČÜ^¹¢ ¶¢]żżRfö¬r5€“ĄE2%"ø<Ŗq³„‰t8ĖÉäp“¼kc: }Rš?Ńw6 –“®‘·q9`÷”Ė”4GuyžéśÆś†ŗń­Ÿ~Ł”ļĀą>|łMXŃząĮ'īĮk_ÉŁEÓÓøė”;šĄ×ŸKućҳ߅Ÿż®p„° ńńdą’ļČįŠĢ Č½Æ‚Æ\øl/<Œ3ļU‹ć?ޚ ¤NLpÉ)ł{:'Ī ”I"…KʘäšĒwæ°pI㮐DŽQshgäHæF:æä/‘p°cūwfĄ’²¹£‰Ź’¤®r"ū“ )™Ā @†źļȰęĒŲ–Ļ`TP²łżRJ¦(Št*Øg÷Æ©Ģ§”{×֔y–Õsī~Ó`&7 ĶUXe™ Įa§ķŗŠYĄEb}S×®g4ž½ńõy³Æ]~“ĶžęʑÖK©3pFŃń9g”m/Y”t€ m"”ÓTäā™$tØę›žWUIs@;6Ü9’‡?üł·R©T&‚”(ʈ¢LQxxėÖ'/7oA’ˆČćqĖÆ|åk³¾ūŻ»®iZĆ3Ļ<óź)”••e0”ĄæżaƆ©vū†Ū›ęb~ĖNŻ~±€MSŲĒžĒ^o šƂkk=8Ga¶r˜lVXZh4‰]a<ūāóųķ®'Ń»«éĘf¤K[ +ė!‹Bų4NCéæ™ˆž»N2śs× · O ØDtÆĶĒ,t ƒź*„ŽīŽ0ŹKŻĮ?‘DY± ŅB %Ø™—ng,śŠGz2‰M’üŒ;†`u VŽüITÆ\…Łē_ˆt$Š×ü£)?ė ؁żž (ļFV\^ŽóÆ|¶?’,Fz”(ŠńągiŒĮ6æ+ēŌ³«n.wöę§kš ʧž uĶ£œ€žīķ™üŪW¤æ ų·–…„7AĀW2ĪaźVUŌ”—£{` óć¦0`ÆÖxcŠ‰l²įmĆ`¦ƒ9r•ß š?Q3ē¾ĶßHU#ę7æ‘MŪsY·’ö’¾ƒ æšÕ{nC4žRß–Ķ®™‹Ļ|Ą(ŲŃ{wżākĪ!ą`[¶‚Zs}ėø~uŽėŪ’tpöYķ\pĘµĖ¶åō`–äœɬ¾A¾™`ü¶)€łŒ §]²Q~‹ ³iŠöµÆ}·åūßæļn!D1x<žŽeĖŻū£}÷wgœqŃļŅi½īSŸśāEO?ż›ß[ūÜqĒ—O¼šĀĖw¼üņ¶{b±Ų¹÷ß’pń'>rŻh|’Pź(ŒJeŽ–Gx³Ū_> č-›;ś’T¢’–Ū¶åą=£¦l;¾±Īƒ#Å^<ävį½S’–) ‚%¬o©Å—Æ;›?zžÆ(Œ Ÿś *7’ĮĻĮ}l7”ž¶ģ5Z ż?Ϝ¢’–ŒžŪ-/ś_Ø/ż4E’Ą€ččMKh:eTō…Š!tFF4_×ŗzFǁ’ģ_ó$*ʼf €ĢT Œ``Vs Ā߇ՋZ3‘’™±BB™ĶYš?i ĄÄą?ēĮō„‹>cde6=¢0v+ØMkŗäp™€z’/Φ£ę¦(Xzż -Ǿ‡Ź9ą+Æ@Y³ńvpģ©'1zģŒ“‚ļŲ€CæŁh4¶2 sĮžBBŁó:˜6N[ž¢"¬=’m˜Ż²Rt«²Ok¾oć/gnž¼$IløūL'ĘĢPZ”ó|Bøó³’‡;o»o²“r軹0 ģ:ų·ldč86®™Ņ*VWÖW“„Gy¤$ŌÉC)É-$¹EJz„ —HJ·Š¤ėčĮ®Ķŗ$ˆ“ä:+ņi¢©²-ŃPņŲ@*Ֆ„ž&ė‰ć™ķGåH¤S[<'œ8{Ń`tÕüįD}yL÷yu™äł?tsl÷_°ĖL!‡<[Ūlµ3Š¤śI &„t$@ !ƒī¦ņ7)ųxyõBb~ßDmęU E×Ųß[ŽśZwuAģj7C? $, “1o )„­ Ķ„ÕRĖL*WŚŁM·v?ˆI¼. ‰šžš§_µĄCCŻ#Ū·?łī?’ł·››ē¤gĶŖ{ öķ=xMžī7żŻĒ¶YĆüń\5®’(ĘČŚ 0TWW’Õ ¼åų±S”’OŊvlŲ¾G ķÄWk ū=nÜĘŹ'ß{bćīŖ.ŗrŗébÜGC8ė…ĒQõŅ£z®.ć:„Ēķši–žĖ³B„’&’z=•čæå xą”»wųą>cü) ™™Øæ”:ˆŒåžĮRÉt.ų·wK”æ²Ügäś CPJ™)(EnŽæŖd5š$V/Ø)—`ÜŌ°åżKŅKcQ`pč2#ĄHˆ&€xŅh§ ä¾_ˆ$–­=Ķ­-( éąV·ŪƒYs±zݹøčŠ÷V“.¾ąŹŲhć7~~—öŪ{¾=öõ_ß¾¢ķˆʧžŪ£’NŌ;ŻÉŠž“„®ˆ\ € ©’(ŸśoŖvŁóž„ąŠŌˆ ”®y­ļŖR–ó„aąé-©4¦ju¾:¹Š&o8ES«ĶĻ8RfĘl˜>»ÖBĢO¦ž™}ūDąßŽ_qśņÅŠĪ\ Y]™r–ĘþÜws†Ś5F•F"BĻŽmyŻd÷Ÿ{ń%(nhÜų+¤ĘĘrĒĄ]œżŽR£#¹Ż‘^°õ?’Æ’ä^€1±£ĀŚH‰”½»­··óƒ˜ælęÆX ®ø  !a gQų`”4 .3ĘP×Ō2eš,\{f¦’®#‡qlšżČʍ‰šWŌĻĀ9Wæē^ū^Ģ_½ŖĒ=£ą?’<@MÄįęćæśżē¬SĄQ­Ģ†Ŗ»Ąt&MGX®ćʞōl.LüŸŒčßTśĪæFžßń4¶ļۂξ6īŲ0 ¢“ _¼į€ĮŃ~üĒ}’ģŠoaše×,Zxäéū°}’f‡!’?ßt4ĄžćÆē“{ēłĄ¹+/ʙKĪ›č¤ś.8Ģ»Nü›FķĒ€Ńń,oĻŪZjyy0(uę&ĮuęŁē±XJƒ7ņ’ €®éčźĆģŗ"[³,Ÿż‡”ØŖš›t~ƒąV³ŹžBŠœ’.Uf¶ł$n¾Ö;IIč$tõ:ū€Ī~ ³č2J‘ŪMŅŒNfyé¼éZOOjjj ÜK§nV»<ŹŌķD"'\N–Rؔøjń‘®Ēv5o?«±³-woiÖtī[Hć½L2bÜŠžrؘAc„ÜJŠbč9(pŽķ 1@KżüĆöģ>“Ü\¤Æ|å–ļ0<f»Ļž–wŽy÷ŽX,¶ęĒ?¾’]·Żö™»Ā’üĻ*6½šĀVĻW]uÉ«S;³ĀöW–š–ąoĀ&”’ŸŠųß”`ŽA]u_š(ų¼׌K…÷Ģ…ø±&„Õ÷ü_ßż°(†W!U= Ÿ§ 0‘ųŸ“MTś(żw"];–ž;É迀GŻō%ń½ŸŽõš‘ŽžĪo]rŁ»\RÄI‡GэR~ŗQ  ³{ µ~ōKõŸ² €šJæķ7F”?[:Pš%’ˆ„!śƑ°ļø4rē˜„¢HĢŖ–hØ`ó5 ō f]żĄ‰ŽˈEõbż%×@Ó„„n“·/KCĪ øĖ|X”±yfĶiB<iźļo<ņŚĄū_ß<8(ę;šÜ/œ÷ö¢ž%óuHC˜/ž3Ń’)P’­÷ ‹śĻtpūóO¤H±•üƒ:—q‚Ā„N<ź÷VD+«®ĶŸ‡TßF·M :›gœq4[œĮĪIŚÜ†:ŌT„&o8 s¢óOœ’o÷öķyą?G ĄŽ±Xī1rö±9Ø8}ł°X JŪ °Ž>;Ģs’ Ą‘ß’UK—ŒįÜ w ļµŲ³ūłp¦żüw]_Č Bķ}ščɤmÜŁŽµX ½;w vĶZT.YŠāŁŸčȟĮ<€9PŽĒ¤¶cYóŠŻ*ƒ,ÆD¾ĖŹ ė:,[…c÷alhŖ¢€q#6ŽĮsÕMž­qģŪŗeÕ5Ćåqć¬ĖÆB×ŃĆč=~ ©DzZC,<–sĘ8Zל‘é«}ß$ć1§ĆäĪOžPˆ@Ņ(;X9«‹×Ÿ›CūģĒŽ-/ 22’³ŪøóČ?č4Į¦W)ąŃbj`<Ӛ1T‡B8Ń×ĶvćtsŖŃ€^½ÄM$cÜĮĢ2,G)Ż¢OO¤æ¢łFDŲw|`ݲóqљWt””“Ø,'b;ųgŒaĆĶ߅ßk|·ĻnńT.„Ļž½žóĒ’u•†ŠéĆOżƒ£Yģ—oü6ŠC:ģä8¢ć®ė¼©$čš>°…ĖsŚńŖ"Æ÷‚¦ŗä¦£'ø.„ &øĀ¤ŌI‚™zÄ%ˆ$c$śĆ±ĮžČžŹźāÅL“œ1HUaP˜ P0„ū½#2Œ‰žČ‰Dēp‰»?1ŪĖX…;ą/å~Ƈ)Üżń„Ž”p‚ĒĀ4KĪb¢,˜k[’醪Hzve\« „“Æ&\Ŗ œ"øŒ“!u ײå\CVY@åjXNĘ&Šą-ĘHcdļŸ›RĖv-t %wtÖųϟQ\××߇·_õ\ööĖšĶ;¾^`^§bŖß‹–łq˜ŌŃ<Ӆ`Ŗ¢Ņ=zźI€OHā@6"uĘø›øȉę+E@€s)%S¹b& ̼©źÄ¹)dVaRU%ü±} Ļ)²µµyćĪÆÆéģģŗöxęžĻž+ļ;~¼żBˆ Ø©©¾ūK_ŗ­`4¦Ø(8>Wnœµ”„„ÅÖčL/Įś·7mnĖ[6u£ ĪžēĢŪŲ¶uūņž-‹óöi³m?“ģš³pÆĄŻ žopŹHiµ+ęāÜ×÷įxG'¢±ŅŽĪÕDćLuˆ“[Ńwƒå‹’%ģēv±=&Muµ¤Čöė p°üč&Zl§’«Łmdö%%X”čæD­v”€-^‹#»·Ÿxiļk'.iljń’’)…éH$učŗ@2™Ę¢łå9€?ż'#zļu+Ų¼½iM‡^—ČØł[Ń~Ė@ŅØŅ$R)# 4h8œHaœÅ`V°Ø 8k)péYĄÕė—+[%-@ó, ¾(+J‹t\xՇįńgŽM’2e ƒQq@‚ŗ.”ė!sŪpE?P„²ŠJ„*Ŗ¼ oSvĮK~Ļ«/GŸ8’ö‚l¤¢Ź› #>Ą©’īaą<‡ś†LōŸ¦pdKž)Š•÷ĻR¤&øH“"W…„¢ėpw“.¹QŗŌœ:“¤éčŁųgˆÄ$Ŗ•6›˜‹÷T ]NĶJŠXŃŚrŹŃ»j¹æĀBNė¬7ź<šŸ3·TU TW ³ymżXKįķ=~ Å ³į+ !X[—?€cOż€!øžK_†ār#ŅՉķ?ø+g’Ģ’Łw¼·s/¹Œ1ÕÕ”cÓ³¶¶łąßi]>Čž-㣣 šš SÅnž@z*…¢Ņ2] ć,;_Ģ–ĘaßŃ `:€€Ač:śŪŚP\^Qc(./G]s f/X·Ē‹Žö¶œ.ęĶCCėB€–JāÕM‚“@ń$ąŸh^±Œs$c1tģߋEėÖcĮė2ŗ–ĘĮÆ`ßK›‘J$rö-t§9=šomÜė†Nć£Œ1ų½^„ćńœõ*sC… ÉeÖ0Ó!Ąs:7ä™’ć>ž$ųĻß·«æĆ=X³x=¼n.\{–·žū_B$qÜ׎ó»/ŗ¹ü¦ĢēeóVcŽģEŲsōUDbc™ļÕķrć 7|ļ¹č:@g;¾ōƒ›‘65.[->qĶm™~ŽwĘćĻ’Ā~BĘé’–Åc`>’øŅ€J}q@t†“4šHƒÄ@œFŒƒcÄ@ÉÉT,ÕWS_¾ œ1f^KœxŲ­‚‚~IeEIQUšŌ*ƒiÆŚŠĒ»ŅżC]ZļŠ č‘ż£Ć²wh@v÷Ź®ž>ŃÖŻ”÷ wėétŸō¦«FS‹G“Ė›F‹f$[꣩źŅ„ō ©ŖfŌßvķZӛ“ˆ””õ›ėˆ1£h3wb†³™—œńŃų`§ų3Idä­²ŗŒIg ,ŲĶ}%E_¬Ģ³øBažõ§¦o~ŸĒŚŽćžļGUe%V,[qJż)šśt|/#•ĄŒ’}Œ·Ÿ°[ėŒäć|‰8WČØ±˜u’p€@Œ›ż3žŻ¦rzĪ|Ą €Sv<Ģ&$(9 چ4.nöĖĮˆKn.Ņ(Ghģ#%Tn° ‚szę‰M„ĒŽu¼ī³Ļ^õМ9 ))­ĒžŃĻāÅóŪīæ’W×éŗ^łČ#ƹˆüز²ā'nżwUUÉ•¬Č‘Ėå"¤4Ņp»ŻĘøS@€×ė% ށ8ĢsPš}S~d°x1Żž&.8sooŁ_Ģȁp»ķ»*`“ų_™Ę.ļšĮįNŪF#łīư!&°­a%ŗ–ŸXe=„7*N9;%’q0;żßr¤“`é<Ķ;żß^śĻĪ(5×Ū9Ń’¼ü]6zæ®vĢJ>ņĄpXm6?Ę޵?¾ōņw7ųż~”AJ©”]ך”k#čS³ ³¼`DöņąNk„””b“ö/tPgŹśŃøĄŠ˜‘2šžK$®X/Įf()°$(PŚtFåB0Hk†3#ˆ%tDćјŽpD Ó1 ėH§õ ėAKAdčõŁe]× ‡Œ!‰€11,QvĻ[ģżÓ¹—”½ībŒ,@Nō_d:vźæ=śĻˆ2L+śĻĄ¹ŌĄu]WDš)$™*4®ŸÓ|e<z{ž< <ż"ūĒ ;²;„yEófą0Lį ÖÆZ‚Ą R’güē{s{'ž ŒĒbąm@oŸU*ØjnAØu’##UŸĶ—^†ÕŸ¾°ćwįŲ3OĮ¶Wę<ķpuŻ’ug­<ū…ÄČ!«–}>LČC;ČxƚłČ€ņrh‹—Āɤ”8qŗ¦”·ėŗŚŽĀÅ9ĪĄ+Æ6ŪéŌĮæ}‘1†Ś¦f4-^‚’ŠŹĢyڱG^ŪiŸbœsõ{P  8øm+Žķ~=’0ö™ČĆ„×ß®(ėļ‡Š5”×ĶŹ“8с½/oF*^8BģtłĒϟƒ©€’LKĪ–B/ m‰ĒŃ7<>ß{T `„ ˜žh.Ę ¤2ćŻŲž³—AĖ?½üqOJ'ė{2§¢Ć\ÖTŌćßnś/œ³ņb@,ÅŻ;~łĢ}9©ö®«Ėė°ńĪĶś‹Ń7ŌmÆćüÕļ`° žył1ģ:“ „ÕølżµØÆjĢō}Ɔ+p°ŻØ*®ĄĘ;7£“؝żķ˜UՈ?oū=nūĪõp0C#=iózą[؈5[^ÅįČ"‰RE!čT䜒oŃ’u3śī³Ńļ§żĻ§’O9śļĶn³¢’Ö6»B=`PӅm[>ų€Łó0ę FūŌoö®* U׳|~hZ ‡J<Ø(óf…’Lj?,€”čķ£½sBøTaFü³„Éd0HDbFTž1‰s–Ļ̽KUõ-«1Hė F.UĀļ1XU!‰†jBs½Äā&Āź…ė—.9SāüUg-!¬œolk©—ØÆ"T•IŌWB%±øD2•eØŖ ÆĻ`q1\.Æ?•ĀœĪćÉ·młÓČū_~!|ńžW£óūūÓą K†B®8‡“1>Ąˆóńą8Ļ”žĄ„¦+BćŠ$® +%”¦p}݇€ÜäĀŲ‘ŽņŚ”ēĶÅU“·Ba3w«^Ō2•”)‰Oɜw"•B,žD,žDŅ9T]ŖYiĄżČ‚ū<‡Ą”ĄæĆvū&’ę:·T]e0t ‹:‚ 92‚‘Ƈé<‘ŁŽrŕ(kjśķFÄūū'’0zģ(š/»Œ1Ø7ŗ_~iFĮĪ|%`^dp¼*c ^æńpĮ¢bøÜnŒ ¹¶€ń]٘'ž-‹Ž ćÄĮ8qč †ŗ»Ń׎ށĪčZ¶Z@ym=š—- §ÓŲõܳĘ}-ÆÆBąßķõbī’eąœĮĄ_d<R‰öny‡vn‡Š5Ē} ĒųcēĻĄ4ĄæłYa]q;Š®{\.H)‘Lē ƒzyšHAG*{,n^#Ną®Ž„Ń’7üŪ?FćüžÅGŠ=Ё5‹×£Č_ŒóV_Š5‹Öcēž—ŽŽó·n½-³ ¶ČīśīyōNŒF†±|žZų<~Ģ›½笼«®ĖPū{Oযæ‡:²„æśÉļcqóJ Œōb灗0öbģ:¼ ›vXU Ę_oMõ­XŃz&ŚzO|ŗÓ’ćV9M„$C ¹ŗ.÷žįQ¹Rōj»{ĆFt3FŒIÉ#ćaÄ9qP"–/[Ā9ēŒO)#ČŹ*—šz„ z•„EEqRT–$DuYBÆ+OhõåqmVeL›UןĖćZMYBT–&õŅ`Z|BŗU"U‘Ä™ł$4cĒ™ėÄvGk<ū:ה½zģ¼ŖĆ=+Cż£Ńx•7‘.v„5æŖ Ÿ¢ Æ¢ æšŅƒ®h2ä‰Õł»†ēķ]VŚ1Xć„ęõDtĪ c¶§ÆqnRiĘsÄ Ć30H s¾²?¢Ģ©ÜƒTkØČ[ęēSäź’ā‘‡qŻĒÆĆ®ŻÆ£·ÆūĄÆ7ž—\t1**Œź4 WPYQ_žź—Ø(ÆĄŚÕk§ŅuAcĢM)tĖI£3Ų0Sµßz…į™,Ę9Į8l>VSóJ{õZŸKėXŻ8<ČĄč`(Ųńūj‹INfj1Ęɐf`Ž;–Õ°3tF[EÉÕ Pa“Ó€3²źŖ\!n^4šq"4·±!łšĆ•ŽŽ„—ōö,­Ŗ­yråŠ%¦rŸ1&EWč„W¶…ŪŪ;—VWWżś²Ė.žŚĖĻżž¾žƒ™<¼d÷Ėŗ\.Ц g±ÅK„„„$āv@Ū(PZj?€73ą- €ær›)×Ņ&;ųüŒ0>ćVń±źž”­:„ŹO¼Ÿż_ąœC”śŠ½“I”ēÉǚVHü/ǦXśĻ}K’šŸČę-ÅXUEģcæ¼÷×ßX¾ā‚«ē4™ŃnöĆhm*ͤdĮæ †AØ­d„žŅi ī’¶4€lé@)%“ąĢ(’·’8AH#’T­”±}t ”™Šü čj+Ģw^ó1f-[ļĮĆĄįąP°’8°ļ(Š? øÜ>æZ*ĶS©DUx4]µ{kä¼Ż[#ąœ%üåČM’4{ƒI—ĢžSčd¦,* H‚if偌źæF\)R‚'ĮżCs®'ä¢v=ĒĄ_žÖ¹7śēĄÅfŒyˆ²’b4ŌVOŽpŠĘC8Ć”¶Nn?Ž¾> Ž"ķ ©Øåå%˜UUÖĘ“6ĶAue(ü½Žw˜K§ž³7¹q`rŁ"°¦9`GõĄŅPʉö1 8€¹Ŗā«’žÓ8üŪč~å$GFœ_ąķéĮĄžŻØZ¶Õ«VŸ>šo~ęG„„€güFu»QZU…‘¾>TÖԁĄŠ~ō ļ%ēĹžœ:ų·.‹!‹ēl“öŖj˜i<ŌŻ Ż*g8š_×Ņ‚kĻ2˜ ę:"BבĆ8ø}+“TjÜ÷ń—’ĄS)xŻÄ„³SƼ¤‰t©<'@„R‡n=‰4KĄÉĢPŽyĮņ좓½ŁĄæżĆo7=„-»žÅW>q'.\{Ö.^_ßł<īzčkxč?‚$ćq’Īó?a <žüĆxįÕg>ł#üaó£xß%7ą¢3ÆDS}+Žœ8€§^ڈ‡žŗÉT6õćā3ÆĀ„gĒm¼ļ¹ČˆśgDĄ?ē 6Üō=,mYĻŽÆŽūŁóQąÄ§2=}GįQ ó8ŠŠ”³Um./v/Æ«Lļīé³ōL0‚d ”3ŒAØ`rd(’ˆŖŖ)^™Q€A!I¦2NŒ3€I@‚)Š …1\Ĉ©ŗq‚ęćÜųÕ“0“ĢFyy" ĘģtBĘIčkšī;±¶|8V}Ņ”4I*$ü»ü»ĻØØŽ“ĪŚ3RQ×=n‘• ąÜx77ÓĄ)+ Ģ”!„*k|nqVK6•œ†Š²Éß_śśūšÅ/D„Æžėķx÷ÕļĘ”#‡pó§?‰üāēńų£e~+^Æńfx¼­ķdO=c^^±`TWŸWø0ņZH`R0;ŒJI,>Hąęs÷¾ö«×Z®xl÷œ³zlĻģ3Žō/Y^7²õ‘Ÿ}h¢ćKHĘó^š…“¢¢Pü‚IšøL  Ó PTŗŗ`8ī¹÷Ī»ßyłGĻI&S³žés~ŌÓŁū™ł—[Žs»ż)ą~ņ @WøŻn %“ɉ߽󫃅ó>N“ó_‡½åų“Ū§śÄq°C;ĄźöaŪƒÆĻä˜fĀęĻFÓ5ėńŃĒ_Į’>ˆTŻ, µ"]jsœńæ‰l&J’ĪŃ»UÕ"żń/é_øļ?’Ų94°ģęEKW0)ŚN ²1W¦ ‰ŚŖ QņOH¤ŅnÅŹ½ĻFž„“„ —Ń.™Ÿ4N2 “Xyy#ž÷ƒˆƒ™ĆŖC@M9pöR oŠ#|żšĢKĄž#F®(p{¼PTtMƒ®iB÷Å"śŅ»’ć’cļĢćäØŹõ’=§zļž}If2I&{Ȟ°$aKŲDŁADPÅ ˆ¢¢WQŌėvܼ *pAP@P ģKH ūžL23™Ģ¾OĻtWóū£zļźž™¶ūćł|’é®:uźŌŅUēyßē}ß=ß«©õ=Ņ'+ž• ćŽe"ÓJåDķ ^”*–õ_))•SʽS¦ŸŖ\FŗžOkZ’õźØJž{Š)ó¾ć*› H!˜;mŅž?R`ZomÜĘ«kÖ³s÷^„[ &‚5EĮ ūķģÅ~CGĮźV““wŅÖÜŚŪ°ža1fL)G.œĻŅEó)ų“„<Üdä?¶4Ķv Ņ:…#Ń ę!śūaēnhŚ—~ą©cvżūiЧNeŹĒO¦`\ ‹®¾†ö­’Į`W'µĒĻžžGĒõŽ)ä²·¾žŹyóń„ n7*aQ|§ä?µU –ĀS·“H,¶>‚†ĀazzØ[…ÖŠ†ķ[Ą .a'ēŅi €aČę鏵$Ćøāö%§cæōdpĪäß*`öįGR^S“5¾ķo­bĒŚ·3ö•Śā½'’ńV®~\"L3{ī+„`li){š›3äļ’JךĢvü¬ˆu–Č`Ÿ/”ķ}j#@^ņ?ÜŅwņąΰ²¦µ³™kr'y67~ö‡””qÖ±ńĄÓw”Ģ%cųź%öō¤µ³™ßż“ŗzŪłżĆ?ć÷’,ļ˜‹ JłĘgŲÕ ž|ła¾ö™Š;ŠćHž>}ņUĢz0@š’`„čø~ÄäŸŲ°öģ„ā2(H×@zŸ26²£­WDµ–ŚŅ KImi%,—‰RB[ʰ,Ė’ÖĪ-{W•–g!¤e‚”†¶„XBKa ”µBIˆkßg"ꐆNū]ŁS ؘa>ė„-ņV(Ń.s½µcYe{’Ų[†Fū¶¾yÅ­›fV¬éœ]»©»$4dŗ ­„a' LŒMaĻ„ŠJi!Ś%ƽ撱.U[šzŽĀ {{üę-›āüs?É埽€%‡-į÷澝3Ī;“æ=ś7Ī:ć,žyīnųśW8ōąCŽńa oœ6³Ķk}6J‘6“‘é>Ū×ōū‡Ś·µĻłé3Ås ©ĢƒĘtæ}ŚģŻoDQ…І“½’µ®‘¾>TÜÓ=jņŸŽ¼¼„WU5f”s"Éāņr"į0f4ʘŖqv^€ś]ÄĖq )cF€'nœ¹$ƒü# sß>jb„ KƌåąN¤nĆ:ŗZ[°¢é?b)$gĶfŚ¢C0ÜöƒŻŒDØŪøž© lr‰—Õū€‘aYųĶ0}Āē ąv¹Ø(.¦„3½$ž[x(54Gė“cI1ˆ³Ł/ņŸē˜‡{ū¢!Ń$ IDAT4é_ž¾Ó×<ńŅC¼¾žyn¼ōGüńļæ"jŚĘÓo^ö³„¤’ūw~™žž®Œ®rŽ€iųŚg~@YQJ+nžż©3ư§Ä™Uā]M¬šĀUē| €Õ›_åżOvĒi÷[ĪŖóב°/š–u°p Éi¼šŗĄ 3ŖĆ[_§”°4B!“’`)iY¦’–ˆ¢ CYmCķ­}[ĖŖ ’,C !“–R55R Ū§k٦8)…ŽW I&ŅK>Łtģø ĄŅŠ“č·BčMõ‹‹·6-*„|W „G¶õZöܚ ”Yć_n©­ź,škÓööŪĢ_HA|Ø19č3—Œ5Ōų"Ø5˜Žī~Ayq~Ī7mź4„ „ÓĪĆ=ŒåG/ē'·ü7æłżoٰq†apÅeWpĪYēcö‹šy}zćšxb=H¤Ļ#3ā[ŪŖF­Üśā‚9’Ü4ńŗöĀiń8©]~wž«÷N(č½“°”R m„¼ō-„„¶#JaFāQg%žĖ†+¦Ȟ¶™8×ā²qõu7._¾ųüöö¹pį¼°“>śńǟ*üяn9¾®®~Y__ßbĖR%ńu<ņw®¼ö†µÓ§O¹uŻŗ•g)ņ¢: v4›|š‘ąCŒ-’oډ8\rµ!Yx€ŗ>ąšŗ1>yņŽ9ō$žxéÆ<÷ę“]l,G/:““I×O’«6½ĀŅyĒ$Ö§āBrÓåæĄėń1 só_L„$8Ņ(É’pČl<†][aꬓك*  å%ę¶ÖvaiKXZ`Z¦Xh„„”– ”¶mŽūVIYpŗéŅiį2 m)- RÄ…vXMü÷¢-ģ ·ŌqéxX·³ Ą4½ņµķ'U¶÷ŽN\yĄ 1޵{N··ćµ¶Sź{*Š£.©ģų!pY3 ƒjéCWā 5×=ƒY®<)yŖ«Ŗ9÷¬sy葇ųÄ)Ÿą¤O¢ææŸ{’÷^6mŁÄ¾}ūp¹\œ~źi\ó…k™}Š,Ē~V¾¹’»ī¹‹ŖŖj¾õõoŽčX ćQUc#47ęŽztŻä#Ūś|cęV·æuŹģŗU·æ<ū“¶>_åų’p‚hŲaųYF~O= —lζ\07\¤Ģµ0&¾XÆn@»\4óēĻG"™&ÕØųāæ1ó‘Gžų\gg×ńZėœ«H$2ożśMwŽ3ł'Ķ;ׯāÜŖÓqimmmŹ~W^ķƒ‰ ’Ēpó(ß)ql]…`#Ÿ‡ō˜4ęLfÜ“j–Ö·³ooć'),Éΐö*†<Ž'ł.ļZę’©÷ß2Hw{É©[²,ÄÅ7šĖ»Śå~õ„ē/·ą`Ö¬¢aoēœ2“’"o, V/ĶøŖ[w“`Yv©?—°„’ń’{*VŽOŁ%qp»!…ķõ0ļ~čAŠj–Ņē:„LĻæ„ģi’€Mō»{”«:{ §ŗū2}ŃĻ…8Įw»@ŗŲ\ŲöDDJP¦m PŹž\PZĶĢŁ3°Ģ(>·`źŒéŒ©Ǧµ«½;6oü̒ܲg鲓JoŸ¹Øø1SśOŖō?*Œ}“¦o¹Żé,[kZ’ż:ŚŹa•p@Č¢Ņwąāōš<c?“9˜–Å£’~‘ß\óśc:Ķ€öŽa‹Ąœoa®“ø’ŸOóĘś \ńɳ))L–¼i@1Ķ'÷ĻKžÓ»Ņ” bŽ\Ĕɰ³ö6eGŹXVżś6\žÕ‹S}Ųb*næƒ}«ŽDAÕāÅ!P¦É¶Gv$•™„:Žd֑č¾>Ü-ĶD*Ēfšų|„Š‹éė²ÉOķ”iDĆōuwąq¹”±sz€É?Ų®Øu/=OSŻ&ĶžKYõ8¤tw“aF".Ó,¢vμ„§„©ŪøžmoÆĘ2MŖ&MvŲWÖL9oŁćsųūž›üg.ŽüŪ žĮ>¢¾BĢØóóaLI {ZZ03|Å® †ĢAĶ~»s©ŃRŲIā„ ÉüIŸ8ćR'¢4¦¬š«Īż*‡/8†€/Čī¦<óĘć<ųÆ?Ņ—źYw:i}gļoī4[ŻŃѯʏR¤’Yä?ĻA‹øéņŸ°·u·Ž’={y ©ŽéHŽ3ŽÕł'^Ę¢™Kų̓?dϾģJ.y澇;ĻłŒ4"ĒźęFØ E„i‹ż'N«źŻÕ٧-ĖRh„%¦TB`)%,µ,ĖŠVwēĄ`[sﶊqE3%åZ[Kh©µ  €*”H:Ÿ“²#Q FB®—·ž:¶7\öž«K=.Ÿģ8Ŗāłu«]KflķØ)Šś™_äSK+ S±XMĪ~“†Ž>AIQ~ĪūÓż7ååå|ż[ßą¦ļ~›Ž¾^ŗ»»)))įŚ«Æį’O_BUU¶A>óš£ćī?ŻĶś ė˜;g®=—””-('Ļ‹XĶMŽ?{„©„]‚Tšƒ“_ypzYWOyId“^æÆtåß×M:õ¾7k']pXŻŽŌŁµ©”šH#±HZ`ŬJ)‘ 3°ˆS̈#ŸC#ąŸ Kx ·Jwuf·KEf€å#hįņÄūÅå‚āpI³Ģø µlxkÕō'’Śō“·_ļ}ā¤ó«ņx] éæ–hĆP¦]”±}ÅÅ'd‡··0“oäŁbPŖŻ?+^”2¶b’r ōōõó›ū’FKo'śB`ź»ņfK@MSģzp/ß¹ķv®ū̧˜<¾&CŸü¾ō`ŗŌ>•P'©…ˆBˆysS&£·ļ@ģkĪŠ[Ū}©h”×~ō_L?ėl:ļ|܁ć::qØZ)ŽśŻoč­ÆOŒ‹“Rŗ<ä?±x×.DYŚpžD–•īļNJFA¦4‡ oÆ":¶·×26É)łOA&‰q"5ŚhklĄår*.AAYU5sŽ8Š@Aab£ž®.Öæō]m-É#'éę”Éū3·É¹Ź©ßLCƈČģoŌÄļŠ›c*& ƒŹ’ö¶„?C‚ £šFs'ʰˆ„į¶gt‚˜ė5²ā˜Šł‚Œ”ĘV9’igqēM£¬ø"±¬ø ”łÓåŅÓÆįGø‘'^zhæČ?Ąļś:Æ­]BŠÕŪž²õČČ?¾ņéļQQ2­57ßq=ƒ¶Ö·(”¬ŒOļŖfL-’ńÉ’`ķ¶•ü埿Ļ3ęįÉ’ČÖCžĮ¾®Ū7ĮĀ„¶…;¾eĻå;nŹŲ”n®×ĀPĀJ m) K mšR(–ihkŪ¶ę5%åĮéR)‡„å’h)–ŅH)QRŲõ¦•]3OJ²BRĒWXŹN8dśå‹›ĻØź*:pmG —4„e-*}iM¹’“ł“Ż„%%.ĆK_'ŲŁ©ń²Š†¢‚“ӝ·ŪĶu_ø–µėÖņŅ+/1©¶–’üŚ78ēĢsšū³esu»ėųćŸļį¾»)%Ēs—^| Ē,;fT*/eI|+įĮT§½„,aČx,¾­č0M-Ü×īk—ˆć»ņČMo>æ­fikæ7ä$ŽTJ !S½’ )]Z %¤Ž%ĢŚÖĀ6VŠ#Œ5‰ æŪ§¾ó[&’ņ—·ßš Nćóy7M:éĻ’ł•ėž<ć¼3»āå £µĻ«~žóŪī¼é¦ļ=fYÖÄ·Ön¼HdmĪĢ˜† &åūņåŠÜ>¤8Šņ’ŗČ™.=@ݾė˜7Šā õu²³m--M z|D)ČnūN’’åņžēJžĒpŹ€TäKžē"yś:õ³¬XżœuŚė’Z{oõø‰%c«ĒqļߎfńĀqœ|Üģ÷›¦¦*”ˆńŠ(¼īŌøŪóŸ*œņŗ”7öyŻŽQÜÅųŖ.āķķ’hÄŹ"ś¹ „-­3$7‰5B«l#ō)^|+ž9FņGƒŖ‰Q\Qm“”1|¶j]Č¢„GѲÆŃŲ²nĶ'žrŪ®ł‹-æsśÜ‚z4BiiXJKӲܭ'ž‡”iw™ŁÓOĒ«kF5¦ _%Ać@ŗ×aŚÄńūµ][G·Ż÷½¾0֕ §ßÖ»‚2°.³xtŸÜq×\tsfŲ%˜Å ’©H›\;' t*=ØCAÄĀł00`' ¬oˆw—€¶<ü»W<Ēä?NÅģ9>½ ģxātmŪ–9€w•üāinbØ:u¶’²!(®Ø }ļ^Ą& ÓgĻeż[obZ )D,ϳHŹ{ó’'#2;«X¦Iw[+BH¦.Xˆ×ļZiźÖÆeūŪ«QŹJ?zįŌqś¹H?Łƒw&’9œEžEf‹ƒIŽEö÷ć)(&q~«|> ƒAzśÓƒR į¢\VÓµ+YÅć™I…H 3ŖQ‘'ų½~łÕ{äżö·xeͳL7ć;™’‚2~üÅ;X8s ?¼ėʬk—Ųķ0ū}~õS¹W³ķ’¹Ė8m٧xųŁ?ńśŗēėŠB‰p`zś»] !ųęē~Šß pó×ĒĘ>ņżęf>ņ?\×€†0ajŚ*ĻĀź’視nkwg—ĀR–ōJ©-KY–¶¤(KHiuw„Ćķm}ŪŹĒĶ”†ŠD…BcÅŖXR CÄ¢“A<Ą™£ @C<_€„\ā•­§Ž}?Ɇa Üż’ŽęÄ9Ŗ‹½ø]2=ŸĢ0*„lgFį0ļĆŻ{v³nĆ:~öćŸqŽŁēār„OB•R<÷üsÜuĻŻ<+yZTTĕ—_Ég.ŗ˜Ś‰µūwBŗLšŃĒFēɇRiÖ M<ĆcÓ*»śWŽųš@k,7R -Ѷ"Ӏ؄„ŪHĻųÆ,+s ”ƒÜ<^ „&£D`|†”Mtl­ 3š] €(ą‚+^„’Æ×»słņ£¾’č£w½čĮA§Ģ+pżõ’Ń~÷ŻŗeŪ¶æ ‡ĆG¶µµĖP(pi脎œ‡ł”ĀG€’CøyŌÆ!! 1_ś˜_&ø½ö³ĀtH\īņŲϐČ`zūLD#±j$)0\PS”v4å&nEą B_'dääĮˆ„sXšō›¬ioaWĒnŗ+«0=č™üo¤x·’’ez’­X­śT„Į¢cØ?č0ŽłÓwß,7~/¾^GżŽN>}Ö Bnʔńøa» ~…R•šž§?½™¤×ļį`„÷ųKpūBL­1Ł”¢’Ā&÷R€K¦Üń‚:›Š« ž‚”3Ó’ę2 “z%X•rÄ2źvLxł©ķߎŗ¶ēéćO­~Ģ储0š&L>2źóMĶģ£õŁ×ŃŃš®CŌų‰Łž¢¼¤ˆŅāŃ3÷®ž^~ńē(Ä:_.[偀 ōYė)“[﹟/}öÓ4uJās'ś#£eQK!õłā’D-ƒüŪbŪ‚ˆ¹³`Ź$ÄĪ]čśFūFN™Put°é¾{Ł”6ÉĢTré ’iČ40ģŁƒS…Ź”šų‚Ac„Óėó3eęl¶oXc“~įĀ%bžw‰ü§-Њķo­¢~Ė&jgĻeß®ō“·e Õõ„ügČ&~kˆØō¢•󩼨ˆp3CĘ0Bš„ōXÉYsŒõ !H ÄN½`-łwņH^tź•Lk‡`ÜńšĻłå½ßKt5±j ßūĀÆX8s1ēüsų}~¾õ›k³Ž;Ć::…Ó×¼7a”@7ž—!héhā÷ޜ¶ć‚`Ŗ ™ąÜć/eńœeü³qKÖ ņŅuĒ1ēnžÖ[¾cJ]×P„c ”ņ¬߉3ŖūžšFX+­@Y–©„%–Œ‡lßÜ“¾¤48Ż’BH–Kha “ŠĀ4µ(!„ŌZŁ“)“tHč4ÄUuĖĖŗ*Žė7HNøŻ’®°Į ›Ū9~N9cмH!F„čķ„tŽė3wĪ\^{žUŠ‹‹Ó–wwwsß÷ńĒ?ßCŻī: ‡ĆA&ÕÖī?łĮgTĶź³l@<ż_–ß]”6‰Ļē“WJ é °ē‹)ZYJHi`,(`ŖICźT@Ċiø³”†ĖHzŸ2žNÕr¤LIĆõ×ć3qņ_P\y’żw^}ŌQ‹{sµ÷ł¼:^ōøć–æ¶mŪ“ÖW\qżō§žśėFrnłįĘØšż>ȉüż+ČbŸH]&$œp)œr•MöSaøą¤ĻĆџL.+Ŗ„ÓÆĖžWV¾my œ|%s”żļ”+”l\zoŽż4|ģ³ö>N¾;5[r5w U‘5ż½”54ćļ gE3^K(ł_ļbé?oFūLؔuž ęē¾ĶÅCŃÖ{·oŻBthˆm;Ūųļß¾ĢĪŻ”7Öˆ˜v"@­Äāž3!OĢ^æ» zĆYM!ŖĪEy'PUcR”熄 ßö°ū½ąóŲńś†ĮÄļ£vę!ųCĪŃćĀoE ų¼‚Ŗń™wČ̔œōąŻuߌ¼®grÆ/PŅW^qrę¶½›vŽķ'ž5žqøåu’LßļxpˆŪī}ˆĀA¬O½ä?ść h~łĒ{©oj&§’’,ŖĄ9 I@éĮ`ęΆåG!'ŽO*Ē2<łw"§Nä?µæ\dĀi‰3cYø›óW¤(*/O#yÅ%„Œ_KŌ“ģ’¢±Ü"¹ĆĖ łO=Cį0[ß|#'łO\Ū¬®ßņļø_dŻör Œ/ĻO_JIyI‰ćŗ£åC›ŲkKŪćQq™¶Žšb3RbéxĪ Ī9žÓŌķŻĮm÷żWZW»›všŁoŸfĖ’Ó—_Ą¹'\2Ŗż¾ņ/|éĀ›[nXæ{ĒõÉ8’Ųń¤*āėŖŹĒsķ§¾Ąęŗuüé‰ßf āŻ"’£ŗFZ#¶o ³¤„Qšx¬­°”r+-¤N!ä9RY8õ™3ń’Øįre{𣉿¦hhŲw4€”rąæųĮ—Ž>ziR>•«&` ×\sUāåŲŃђńŠMĖĖĖccŻ<ļƒ„ BčQÄ’ēÊŲ3oß.¤Krtź:eĮ–×ĮćƒIóŅ·›4ßöĢÆ1»Ļķ«aŻóÉ©ž{—–žį^xśą™{ĄŒĀŅ3Ņ*ٰč(®„7‡Ē ŪVĮÄŁ0ż°ō}M®!$UCa*ū{š‡ū‘Y„?yŹz¼_É’F'ļęŗ‹¾Ź‹Ēö}mēĪķÖąą]żÜrū+<µb;Ŗ ŃJaYšHTÅ^깓ÓycR­acv¾£,Øāeč¢ÅiĖfM²I4Ųł†Fb¾MĮ»Håöś˜2géˆŪ» (/‚’šx½Lœ2 “ęTÆY9šå_īøĪŠŖ“ >+†"Cd“’XĆŌÉų0ń’©¤>'ł'½]źŅäR!ĮĢƒX~4rāxāRģd‹Ģ¦ī#«•#Ńuōŗ³ĢŠŃP‘«\ąr» „Čj&Ōā µ¬Dčc »wü§ĻŲ0k_Łżķ7łĻ‚ÓqdžėČqńļŽĮ¤+÷”,ä÷tˆBRaT#¢Lm—b·“ķżW){ĢAž‡ćŻéūrn]*a\åDŽÜų2J«¬~Må?u5ė·æEKG;Ņ=éyĒ‘ü;f8tö‘œu¬m xģłūxéķgµ+ Ś÷{Ԍ0“„’—żŒ /DԌpÓļ¾€i„æĄö›ü;čQ^€ž^Ų»'koé„2YYŌ–rk„<ŹĀkiķ±”åµ¢ŚmF•'ž›š×EĆQ„¢Ź®di”©…iZĀ45ŹRĀNS¤’f ŚJ| jyåƽK÷/łĢ{€ņ² /ļģaGóQĖVmÅ)#‰¹ļéĪæ <’⠜vĪéœpŹĒųĖż÷RTTÄ×¾üUŽ|e%æ¹õ7zš!ƒA¾yć7™?o>?ūÅ-D"ŅŪBAŠ=ł Ōeń"Ńö—ōgæZÄÕq$ŸD SiL'ŒQ+›ä§…Ę8°żüÕ"Āp:Ÿf2S²M‘ǦŚO•²B%%Å/wŽ!B4ēEMµå¼łęjŸĻē{!ücāĉ#ŖŻÜömÕH6ł@ą#Ą’Ü<Ź÷K[W!†ŗq¹]Ł„’v­…Į>˜~hŅū. ˜¹ŚĄ! .»×Ćęג’Ā)Ņ™ń/oż ŗ[mł’šgĮ‚q±s·×ž¼sŻ×@¬yŗZ`ņ‚ō}ł<ˆ)UŒWQŹz: õ4āŹ'’')ȗüĻ|“’“ō_&TŽķ”8õrž“ü§Rż ć@ŹNŅHdjĀÆ„ „sē —WÜš€’Üžf'bäTbØ‰«¹™|(()A¦IĘSgĪʂ˜Ą6¤Ėø÷ü;£'’ŁÜ>³ĆĢ5łÉʵr"’9Tõę'’"!ąŹĻ(*Š‹‘ŁĒÜĀK±¬ˆ)“I#@|¾/H³ŖMR!÷JÆ'iÖv|ŽÅ65­(_¾å³œó•å¬ŚųJbµĖå⫟ł/ŖŹB †#’łŽ¼|^?7]ž „“u5óÓ?}+e}rćø 'ęµ8㘠9žPÅæd ūW«°œ›&šĀĪ1å—üéŠSƞ߃OŻ^eØ Cj ˆXŁ „į`š¹¶Ém*šł|õB āµB÷ˆüI_|foømĻ'[Zv]v÷Ż·ļķx?Dü’#Ą’Oȕż’ŠBj„Č®šg™°å Śä v.ų `ż £ß’˜ZˆŁÄ?Ž–=¶©ĀV,!”­>ŁŒi IDATFkhŲĮ¢t„@U9e¦IéŠ ½ø¢)Ä>Ÿür'’ĖĒ{F’ü/s±™Ć8e4Č# ‰÷?‡}œ­'~RŌÖÖTßÓӅVŠöĪ~”¶Kž Eņ“°Cā“œ|y“,DU_‘£8nAf„TētĪČ’^ XPŹ„i Š:–ßĀ‚ˆ ƒC¶¤Æ·ŗś #VŽ0<”>VƀŹR(+²Ck ŠŠKĖßfĻ_Ž ok=}[źF5¦BW!%gyļ~gĄOEIž‡Lōō šč³/¢–kؾż{ ?XgZ¼ŗz-›·ļ$‹pg’r’ Śś4ņŸhNāė0 cIU„‚Č… 0Ž=YS3rņļēµI¶ąD\Ó(¦Ho%šó i3āW½>&O#jš˜–…ŅÉąwBžEś±£$’ī•Lļ&}Ū†‚÷‹üĒWøśq{rs&—aPVXčø®Š(Åkłģy±ai„‰P€ø×põ$%ĻŽŃĀž;.s¹V–P¤;čM„Ó£R¤kCdė7ėĖJ®{šŠćųé)7^rĻā<»„ņĢnsö¦ęā4”r„äŒČXnøŒ¬“nf}ˆārŬ¦)✚šź×ŗŗŗݽ»>-ø*Ė5ć`ĉ‹…s•ĢĢXSSó”ČśŸ‰ 2ŒFžŸ’Ÿ EA²˜Å±ćm€‹mĄĢÅŠ\­õ¹¶Č`±ķÉO}–ščm·É=€/Ę¾Ķ ©x_§ż×Ÿa¦Ø,%¤,Š"&Įt@śGWŗ<—ü?NÉ’āpņīē•’g–žĖ|Ž’ųg70m!]—~YŸŁīx­³£#VöO'#A\ŠŌm] „ĮPõÕŽüd³¶ĘĒīZĆĄä£5[1B?0½ŠŁ ­]öųė›”jęńō zś”§ßnÓ7żƒ6ŁŒŲ壦ż½«öµCs§mˆBW A)).)Ƶ}Ę?¬"Ś7ŗ1 f½£ß1j«ĒfMp‡ĆcϽ„Y ąš>œƒZsw=üX,tŁpŪ’d1łO&Lt•ņ9ŻĄ0łĻŖ>@†"B.œėøc'¤Œ52ČnśøS–ę!’ŁD)}{18ˆ§;#»j Š‹“„õbØ[æØ”ØiaZ:Õ ųn‘ē ³śŽ¶ź 6æńfL>ūa"’€]Pę—Hƒų<Ł & ĢØNÉū§@(b•TŅL5#8€@@$:ÄöśĶĢž<Ÿ’B§ ŁG-`Ņøi\}ŽIr>Āż·ŗŖ|<ē O¾ü+Ž|2¹ćŒ¶…±2€ė·Æęóg~™P ӊņķŪÆI—žw®ņ‘ōįČ’0üū5čī„¶ģødß1“+“ĒåÕŹŠ&­“GGµGGµ[™ŚŻÕÖ?ŠÕ1PoELa™ ÓŌB™ ­ĄRZØx(€Ž•2U±?;÷-*TŹõNīŖ÷ %„!Vķź¦½7āą˜Č0į”ś^ƗÓgämóĘŹ7øš’‹øņ?®$ņ„ė¾Ä”ÉSFx¹pM˜•ś=MęÆTB¤€Z¤‡ $%ū››Š nx䐣—ŻvŅõÜuŌ÷ŸÜPsv[ŸgĀų’ž ‡MčxŚTŅūóēf `å+õxŒÜ®'‹įŁ©R¢d¦¼įĘ+“Rö›¦Uv꩟¹*s ŸĻ›{<žõø'˜7`ĘOķC$ųČš7ļĒė{El›ö}C“ÓżhEaėJ;#’AGŲ$Ž)ö?޲jØŸķ©šų!ā8e°ßĪ5ÉŖĮ >ÆD`düś½^<B*Š/2ˆĖ“BÜÓä’É’rß“Gž’~'’©÷?Į2¢Ÿ½‰«=Įž?tv“cŤ»QÓV‡oʧ@Ź® €Gś(¦ Õ €V1fĢÉ'RTł ¾»< RV=»ņ Ą®°ņ±„§e¬w&’RH¾sÅ/šĘJ„‰tŽ čŠ7@S[=—|ūVnx‰’ńé+3vS«ŠŁ×ĪĖ/ąīæ’ŠĶuėŅ;ܱÌ9wówBžóż>Ä®­öK+uYŠėņQ[”-ÜZįÖ(·ei„ķd€–‰'¢,OŻö–ŃØĘ²e’Ā2µ0-%”RXZ'Ā”ŽåPZ¤Zµ%hģœ1śä3ļʊ|ģh ³»m€ˆ„Ņī÷‘ä趉#Āį0¹’^Ž?łN?÷ ž]ń,óęĪćž?ŻĻW®æa’:Ķ€‡²Y"e6c*KČźKS©“ą†Ī’ęĒ-žųmŸøņĢßģ»¬™xnSw`rUaxĒóėļ{ō²g¾öÜuĻüņ/Ÿ}åĮĻl{½®üØÄö–] īÖO Er$1śųP“hŒžG øµ†(gœyBēģŁ3~PWWÅGœKYö‚īŲ¹ĖuÜqŸX<~üĢ’ōxJW\qÅuĻŪkzģ?ł·?ųąƒ?4j€Ź~p’§būj˜q“ön‡ŽmKŲĻŸČ "߯Kžļņæ\„’F ĆJ–0T! ō_įWŽŁ½Æ®óŪ”‚BCJIk'TgWWH…7ÅąņųK0u<Œ³Ė<-8U¼Y©;—‹ēĄæ^·óį”Ų$0Ļ6©OR)mļ|wŸķé·,;LŲlć@ާ®yĢ x݊€Ē.Cč6Ąc€×e+|zģ*hi‡ŗFŲQ;ė“ó) D£03j×Ęõøe·q{<³˜”†~DĮŅ«1¼ąT"÷@—żØ®,Ɲ##žy}5²\bMw~ßpų ¼½ļmź»ėŁŅ¾Å±Ķ{‚B`<śģs,]4ß^–'Ń_ŹāŅ µłO¶J'’yŒä$’ɝ& (!^ˆœ>kĖ6tS“MĢŽ5ņŸ¹Ģž¦;:0††°¼¹ŸNĮ¢"ś:;Ó~_>Æźź 4“7£„DF"$3æ?ä?u©Č ¦÷ō.’œŲOņ/mZ„E>m†ßė%ä÷ÓζØå X}DĶ! $6łW-"^»Aąp‘2cäÆžg_œ+Ļł 'q’ūō’ »Ķ'ž…3—$¾÷Ƴē#’Ć sČėw¬ęņļŸ‘w·ĖCĄg{ –-:—įfGĆfīxä§ćČ1–|ä8ŒŖń0æ°%”õ;aŅō“ŞĆʗ ­nģŅŻaK)ĆB˜ŹŅ––©“4EDXm-}ݽ]ƒ­Rś* )0M!)4–°0Z%Rkþ§u¬Ś¤Z{&ś†ĢĄ‡Š[ųü^66ö3£:„×å%QFsč Š uŽyT*źv×ńĒ?ßĆ}ÜGww7RJŽ]~,ŸżĢ„»üŲQżę†ƒ†ĻÆ'N`ēęŌåJ™Ā0<*™ĄFkæßó‡WšõĀöŖł;Ū‹f(- €B’P[OŲ[žéƶŻóķoxŻ’ZŪ„`n)ōōņž5«J{cwiÉĮŚ y % ²„üq†Yv1źŒŠĻæśĄ½ g¼²æ?\yŪm?|ˆ§HƒĻēÓ’}ŪoĖžš‡{–ķŻŪxl’Ą2„Tš…õ¬³ĪšöÆżuKö ņēŃł ćCõ#ż’ļ@žļ’ŠŪ®¾ŗŽNŪ»?˜#“~o»±ģxžĒŚŁżŸų]’“»Ü6YĖ„eB<,JY°v…]öļÄĻA{#–ŪŹČV(ūœZćrYČø·>ĶūßĮč’MW’8Ēń¾$’aéæ“å™ćˆHŖńąō+ųūŠū¬ĘĶkŗn † ঄Ź‹³=ŽqÄĖōY öģƒoƒ3O|lŃŹĻįÉżlwDI!,šÆĒœ*żaŠ2"€ĀMÜŪ:³ļ„é”8…ūoAJ ”8ĮŹyD Ē ˆ bńÆY3–-·“ž>”i’¶:Ų² ¶ļN†”im+2ĆV į!Ś ƒ‘J)Ž:įD"V˜ęÖ=tt5ņłšfeŒxēØėœ\(¢¦ÅŹõ›°N°'¢!Oˆæ?Æż3WĢß6’[_æ5»į{½X³÷7­Ō54R[S“Až“H#ܐ4d…d¹’pä?Ń2s‡}¤mSXˆėЃ”·µ};Ŗ¾1cü£%’™¤3åøROJŹWw[+ָ܆(ĆåĀ_PĄ@oŗrü˜jš;Ū2@ā5M܃嚢ŹCž“  łÆd’Nż„`ČĘ@?ž@!‘”Ü/ē²¢"ś³ā“…”Š1ģ3÷ \Ųs|Ėn#±ł¾õ¶8čāˆY%<¾²uø¦ļĒ/,£”uĶ ¹Ė@•śŲŅŌKW_eA2%›±ČŠ6eBk[0\Įīīn®¾ī ¬xaJ)ŠŠŠøā²+ųĢEŸaRmķhkÄćę XI€©µ}Ķ2péŸ?~śŪ•‹L%ÜeĮpÓĮ[ßŗš°«fTvwõÓÓ¾’ĘīŠ9¼n褯>Ŗ”šyUą„me5¶ YXŃ"ÅÄūb;…Ÿ%”0ā„S©ķŻdŠž³įq»ōśõ+~†"ķx‡Äē?ĶģW_}syKKŪ1CCCóÉöE)ĒżvAAįÓćʍː BˆQš-Ž[|dųį@ŻI+2Ž!–&oŌņ˜Z›ü·ģ†Ś9°é;;ZfrŁīõ¶ģpń' j ģŁh/Fl#@&\ˆ¤xö÷l“ µsķœ [ ° J«³IVx(6…±NóN`Äņ’wšü/ĻęiČōšēm;ŹäFŹ2%©PO>v«K«ō'_}Ŗ÷w>_p^/-vR;oŽÄųåÅv,}<6žÉ׋˜}Ź ŒĆb„’‚锩v5Śńō}a;–~¤šŗaL©-ĒļKWJpÖ1PYBāĒ"­Ż“†Žįü‚ &ƒ)ÕpņįvÜ߶ݰq;¬Ż;²«/ö$ZJƒŹŖqLŸ5Ÿh4Ź”©ó‰F"“·ģ£©±žŽÖF¢}üB?…” ”.cōZ|Ÿ×KqįčŹ.ÆßŗÓ4a¶óś+¾‚»ß¾›’}#‡VŹĻNü·¾~+gt6o{œAs©$*ĮUešņ›o3i|Œøę ÜƑ’4rŸŗŽĮ£ŸNž«Sˆ^¦A c )ūH%5…‹aL›†µe+ŗqo^ņŸ†4n”Ifó“„@¶“@@Øø8Ė „`rÕx65ģĄår!}>T €kpW’"P; łOæ.i;Č:Ī’Č?€Pi99¬p»\‡BtöfĻM}FYB“-ģk%¤ˆĶƒiĻB#ĄhÉüėߟ’_®½ą›H!9zŃĒxä¹{³71é’•æÄēõ³~ūjŠ J©SKļ@·CæÉ••ŃŁÓžsLł‰“3ł‡d€8žųųÆŁ°ó-‡MGFž3o§œ-Ž%ņoÆ×Čŗ-ØY‹Ņ{fV„"µ%V]§„%–VĀŌ K)m SZ¦ŌVS}wóÄIcŗ¤!Ф”‰F””B(!B(mXK*aC[ a>tōWū6/)psīQcņü^ƒpŠĢeŲĒkZ#{ ąœ#ĒpŹaÜłĻ†¼mK‹ülŪÓξī0ćĖüųm †ćžPŚ©A!„”[ūże¦6­øš­+™¾wh-$Jįҵe½›·¶-xą­ńĻ›·§.Ž’¦¦Ā‚5 ÅKJƒC©³e©Ģ2€ƒŠß Cƒ6хKg^(QÜ1:7D¢Łł¾zć&?ššß?ŁÖÖq¢išYe’¤”ŻĮ@ąłŹ1’>ļ¼³žłĮ¾ÓJÆÖ½ S²#PZZš@ģh#–vį rÜ<¼ķ9/ JŃ}ŪčĢę½°ś_¶Wž ĆaÕ?ó÷»w{¢’¢ƒv™æLø<Łžż–Żéį']a«2Ń7Ėab dĢŖłnČ’3į”üļŻ’§b¤Žƒ÷?‡ACq©¾čéūn±,k”? ­Ū®spxu»]6©ī C_ŲąÓ_ų‚RZ;M‚>Ū«ŸYžo8>Ļöāwõ&īyŒCSÕ¤“ #™œpGÜō;øč$8r~²mŸg)–!ōp6ć‘Ć놹SaŽųŌ‰Š?¶Į[[`õF;l ­5‡±,żø„ ø“œPaęŌ(‘”A:ŪŪčhkaļž}ōtuā󌁂`€PĄO(č'š;–‹£Ŗ¢tŌ„;vĮd¾ģ3ķsłøźŠ«8āG0§rč-äŽÓī`;5lnŪĢUgåŁyWaβXµv#yŖ3įN%»yČ‚ܧ®w’ó§Ą)ž?u Žä_8’Œ± ˆ)™½˜›·ĀŽ”x«,N+2–e“’ō 2Čüūą ®~Ģ@n™”ŪėÅķõJĮ*+.” %Ą`$ŠĖ0ō£‚~dxwšTē#ņŸ=¾¬±Åż¶ `0·‘µ¤°žĒÄ[%F9V7ŚŅ !īTC€p„FūĄČs.žxé!®½Ąöźµč„,@üŲĪżŲ„2Ė~¦ÜóųołÉuwł“z½>īłī“ģjÜĘ÷īü2­é%ŗ÷—ü¦$ŖkŚĪķ’÷;vŲÕ°ƒŹüޤ£Q"~Y»; ³JŹŅVūO˜^ŁwĒ}ŚŅn-“G[Xʐ&–å&*M!µ¹·¾cėä@Åa.—@J—¶\i*“0°”B¹4Ņ+!VŠŌB÷ •޾Ęn.>®šØ©øļyū» ĮÆ®:ˆļßæ“†¶į ĪBŲ}Ģžq{iH:†˜=ŽÄėvgœž +YĘż/ čĘōń×ū¤¼ltłyŽ9„4&Lécėś|­fŒéŲµ»£pź 3÷laĖü·Bķ\Ųü*ōē R“¢¶œß•ņ*ˆ„³“ūŁ?—QlBØÖ>—½no;CR` ) ”Ū~/ä’šī$’s’’ŌūÆ,DNėiĘrāAō\x W=p{ų[ż}Ö)`ˆŽAŌ„¢ϹN=’¦ĶœE4jwŲÓoĖß*‹ķõ#…Ē Ē ®°æƒ¶a“YIƒ~;|”„Ā1CĀļ‚·6Će§ƒß¢ß³”§ŸqF(KęĮ’¹ “|pÕ[Š®„vņD¹ßRŅ0(*)%XP@U͆‡čéź «³ƒ½m] †“DŠėqŪ*`€`ĄOAŠa Ŗ¼,ē>!›ėö –8gŗdĮ%<±ķ šū›qI×-¹ŽĖ»œ«½š;VŻĮמż5 ½…œ7ūņ[BęzŅ„|. wņ?‘Öaī±&žā9ģto/ęę-č½ÉTĆyÉv«“ļ¹¶w··ē5„ŠŠčliÉZ^[=žõ;6czÜHe „i ƒ~"2<ˆ«Æa„ßc‘’ÜäX©ņŖ¤”ŠÖ•Mœ ᢘrŗĢ“ —D‘:I¤H¹Æ0̹hlŻMS[Uå5L®žęxlÕøžB;`ńõ/Ņ?T0ō¤L*2ÆÓœ÷ &ŒĢ„±“łĒ‹šōkfõķ<ęüä‘T(­ųī_d(ž8ķ9ģ$ßłŽüēó0‹†¹F©keŻTŃŅ4+½QōxU•FWļmÓJ[Z`*Ó²0¤% ajsO]{Cõ„’9†Ėš†fTIi% JiC),K¤©śKŻZÜ …`Ęų.)ŲŅ0@ÄT\”„Üō…M*Š<ō Z”„\ų<’’‹”؇Öī~CQEi›źR/;›čŠI ü.‚>ƒļŻ·“ÆŸ7iDcńø]4u 1Q°Ob\ „HŠĮ„2 }æƒ=ļ=ł·į‘cf¢’Ké,ĻüɳvmzzSķ ’\?aī'mOKł,ž!OPŌió÷<ōčŚ ē¼ÕXāū4M©č[uėŁ+ļqZĒł[Ź)‘(!ɔĀ[äĪ6lbac³A·Ū„£yźYG‰ ќyęe·õōō%źł|ŽõćĘU?zĪég>ń’śfƒÖZCXūµWeętĢŌWuB𿓪Ŗź-óχ Œ¦ü_>¬pxµ¼øŽfÓåv‘VxT˜}ōwŁ łĄ&ž53`ęŅü*€`1H#Y¾ »Ķ6ø½É¼?„J ~³s?ń1ōu&U©hlaĮ K2äö8¤͐’G²üĆ;“’§.~?“’¹Iz’£:ĆŹ™ŗ ¢…oß’«HcO{Ļ唂Ń; ±”;Ÿ‰Ł‡,ćŠe§¢U)SbĄbńńEAØ®€‘’©(†%sąÅÕö÷Ž(Ģ0"ŒäÉźvĮŲ2čč“+¼²Ę&į_¼ęX”p#†;°(+‚—ĀIK큣ˆJ;O@gttA{'“vŲ‰3ĆZ Ć  Ø Hر …Ćōöö0Š×Ėą`˜ÖŽ.Z;’“~!A?Ķm³x!ĒĮ(½}żōt÷Ƅģµ.éā+‡…gw=ˤāI|óčoņZĆk¬oYĻżēÜĻā;pĘĢ3ø|ŃåÜšō |kŁ·ŠhŚųÓ˦óåßį܇3AīŖAŗ%;w×SV\œNøq Üń„¹7‰U±e)}ü':ČCž³ódģ—Ō/QXˆē°ĆŠ]D7męęäśō£Ķź,É%ó“ŁŚŠØo{órĄ ŃÕֆΨ•U* Ą$‰b)<ČųÜNTĄOŌļGāźķO>ŲŽņŸ‰ łżo ōćņ`åVƒt÷öuPøJé‹v5#v2Ą”„€öcńĶ# ’³§.d÷Žķō…{3&ķššZė©*Æ!(ČZ'„ą;Wž‚€/HԌ𣻾Īń‹OM4‹+2ÆÓ¼i‡pŃÉWšļ×’¾ßä?{½ż' “āž§īä­-Æ'Ö½[ä?ļ›ż’ĶõčŖō‡¼oŁ”²čśęU¦%…ĒŠĀŅZ›Ś²<¦!MŃfóŽīmć'—Ķ—Ņ.!gYi iµ”š`h%”†ŌhĮ`¤`TœāKgM$ä3Ø,ö°·cˆļß·“óŽĆÜŚZĆ¢©…<ųR3ēe×¾śŌ DMŵæŪü’Ų;ļ8»Ŗrż×.§OŸLMļ=FH Eš Ø b±ż¼`¹źõŖ zÆ×r/WEQDBOč BHļ}’I2}ęĢ9sĪ.ė÷Ē>gfŸ~&„ęåł|’™³ĖŚļZgĻŽėy×ū>/—.¬%äWUė'n:Ž€ß<ø-z鎘üž±ĮÕŖöźmį8qÓĪIņ!÷ßH“ S ko/\æa=÷-¹ē–?ĻsO<‹7€k„t“0½ŗtÕ^RI_1~’įįŻ»^Ū_;ołö”«?Ōbsļė#G¾¹æźäŸŃöóó׬ų‹¶Æ^ņʈ1(Ų‹ĘŽ7sX{‡¦Ū¶¤PP¤ĀĄüв-”$UEĶ `’Ž—- IDATźšjŖ”fźžt¤ßhŁJĀUW}kN’ü{<ŚĮ ę]·lŁĖ„”’¾Üރ`0™āgmq4ksµšŽĒ€÷1nČ’) UuH_³·uå!R┇N€ņx}™“ÓŠqļ¦`ĄÄyĪ9Ķ»¶Ž £¦Ć°‰°{³-©īŸÜ+*Ģ:*ėaåż6$ŃF|×YÉĘRÆåj/u[āq“h#ONŖP|Į Ń,9磇³n×T]GÕm[€¢8«gPĄų‰ū}ؑ(jo$#"ąķ ’īóß3ä?K[ŁČ?„iōŪy+!Ø(-åhGf}* \©”ÅjŪy^‹dµŅP’±¹påE×pĶ'æĻŻĖnć?’ņżœäŹé…]BAÉŻŸžięMs¦·<šKvŲĀeē\Õ\O¤+ć;öčnųņM(ŠJgO;?»ż;®¾;?ėŖ9Ņ~(C1™)^Łš<Ÿæį|¶ļۘe÷ É!d#éłw}Čf®½¢i²ŗōŠ$ŗź=uTuģ™ĶXŅ’R˜aŚBx„i iķŪut]cŁdMStĖ–ĀŒŪŠŖ(¶©ŲhBJK© K" Ė3Ø ¾×¶uńāĘFÕś¹žScØÆōrŪ“ŃTAWÆŁŸšņęNn½f2?MKQććß’²ƒ>Ćę_.Ī…ójŲr`Ļ`L自 ŗ"&¦ėJ) X@  7*)œOQŲŗm+=ņK~MŽc£““”ķ;¶3mź“"ZPō€2|lŲŽ¾Ł½Õ¶„Ąµ:’„SÖ?łĆG|ék÷r͌ƶ5ežXĻŽö’ĘŻ­e“„D¹tņī'-L1Ŗ"łö›×YH)Q¤¢(2Mg/s?E šŲ`b -G䀮hč žļŪw°ßóué„\sūķ7­‡˜Ėąć¤c4yņū*ąĄ?9ŠY{Ók±;{xÅķ¦,tž¾“Ģ”-Æ@Żh˜t2¼žˆ?׳)mØåģßŗ*U,šŠčj§;+’ą“qxwfiĮQ3`ĀVĄš'cұy/¦„^M„Ó§Óė `ŗWüGų€ģéEń’g;'WųʱĒSüƈė}ä³,}ń!ūČÖuŻæšūCeąįh””²¼„K¾š4݇e ųb…pÄń¤tD Į‰Ų±ZK`L£SbÆΘGZÕńøQ‘] ų¼Žz’fXxę9m‡€Ē©šNC`Óć=-e[_ÜqP:ū9© ¦‘Q²Ł9_€ß Æ3Ž/XAg¬ćq•HÄK¤O!1hļŠÓ×ēÜ©5•y=\m“vv£…TLo&Aæv޵|ņO²½m;’ūŚ’NTĄ5']ĆiqśuŃċxj×S4u;"K§Œ8…%[–°£}‡Ć‡‰™1Ī{ļx¼čq+f•Åį–¶"Č?©¼/IŅ2=9ó’ū©¼{²E7éĻ ’ølH·«8ņļ¶E©¬@2v[;ęöķČęĆéĖJō³9RÆZWW^€?‡ $"ä 3 lSE ”¤¶Ÿģ› b(}1Ōī0²žo‘’ō¶s’ä6=އ¦ū1ÜN“’@€öžGĢ3 µæ¤Ļģu“DBŠ–HU€”(BÉW€É£g ©:Ÿ<÷jVoz‰ēW/ĶŚ½Ń=lon{-„µU üė?`ėŽ ÜžŠM q#F,%żKüņ%ßat£SĪīwü;m]-)× ų‚Ü~ż£<ŗŸn½–¦¤xP¾Š’,]æcõĄīl÷VžM…÷Ü{yOĻwß͐–hŚ…•źöĢZ_} ĆīŒ JLŪ–ŪČÅmóčįžŻĆ*&ĀBؖ-0Š˜Š…ŠŅ`IĻ |!+69N«=G¢ÄM›ņFs{¬ĄYŲ“Æ—>Ćq$¾“¹“Æ|xŲ`.ŸEUč5l,;•Ć F 0qR( }UÅ ¹¹™Ē–=Ī£KeõėνéõzłŠā‚óĪēüóĪĒļ/~µÄ§ÕM Ē€P„4m)„ššĮ¤=“—žżĻ«¦\śśž!ż!ó!ŸŁ~ÉŒŻżŪ9kWKKb˜¶šzÕL5æ4ÖoY6Šj'ŹęPÄ/ #­iŖ4“oRkuĻŁ«†Tö+M.Z4?EI¬œA½żøńĘ+ļŗėĪÅ--mgMŸ<łæ—=żō†Ā¼?šąŸłŹ’BżhäøĢ7öņčˆ:¾#„ć£2Ģ!&;^qVfŻhmrRJ‡€Ēń>2ŌÉÕWuG0pķÓ°óŌólVÜē¬źO^HhŚī›Žį“]€UBgŽR›«7‚nE£Ż"\]‚©{\čćžo¼Kį’n/ńæž}YØŖ‚XtkĖk䕫žķłoĖ ółżttĆØ)'89½d×rQgå=.ō¾Z;ü1 NZ@>xu8o!Üó„óžGõ_¢ ¦N˰Qc0ā1ö‚‰#ĮĄw}źH" £³ÓąH‹Słąh›ć$1ĢŠ!œJ AƓF” gŠśė‡ččK]U4m“³ļ<›ƒ=Ī{tʐ)¬>äLNĘWgŽŠy\õšUü÷9’ĶÆ^ł·½qĆJ‡±üsĖ©ņWq’ęū¹į…ŠĮü~Io4ŅߗģDŸ āBŽI#ÜÉßDę~wJAö\’ėŗ ÷±wcŁlQŖ«šVŸŒŻÖµ}Vs³«Gé:‡¤‘óövØĻFN?@(JFĄ°šz6ļ߅¦ėؚ†"A ™:Ś®±”~¦Ļ‹ŅC ÷‚i„v=ÅÖŌž¼ēČņÜ̳–åsvņ@,ŽÆ4@8O “‚ŹŅR޶·gŻ_”ÕŅlķ韠KK’ä4Bu];›@ĄÜömfNšGMe=æśÖķüśĪq×Ņ[œwBŻĒæųK”`K›{ŸśsJÆū⯠J1-ƒė~’/˜¶Ó”dž}O¤›ō/qņč|šĀš'y|åżżū’G~ż“×Ó0d8 C†3ĘüćéŪMžSvē#’ŁŽ/Ų¶Čæ;ĒĪA½ž 9qō ŌED~„ŖļĀQÕŃǶĘlKźé‘&–˜ŅR<Ґęž]m»kźJĒiŗ¢Ų†”&¶PUWY@Õv¢¤D2Õνh3ltupKĶ«¶]ų= ŃxvM›¼mY6¦ec'żł’©“z¦ī5-A,.ń;ńKCGG<ž>ņÆ­~­?¢„fH ’žŻļqŽ9ēQ:¶M–ŽU¤®!f nm{‹Æ²nćĒNŲ¾}Éś c:c>ļøŖĪ–‹fģßėÓb–[£æ=ź×o}aŌä=ķ%57_¾z™hOUi%ŌüóÅż©Ŗ"Ud“~€Ā+źYęĶ:šŒ'žM×~óŹ5Ļ=³"lŪvčwæūó響ģe÷%ół|“ŚH$*®øāŖÉkÖ¼yzWWׇāńųLn­;wnr8vc>Žp|ę9o'>p¼P(’æX,ĻņŽ? ¹õE¬Ē_bßÓX_‣ūį™;r·õŚc©Ÿ_ZRœ Ń'œæ^ø'’žH¬ŽB§¢ŅŖ{i-­ ×[ķńN7Ā’Eü/k»oQüĻķ4°³“5c>ŹkøņŁū"?ļķµfƒ!Žxe+ž^ĘČq˜³`1'-\D $”ņņ8¹ų}‰§¾aĀ¦ŻŠÜ Óʀ?O(B]œr"<›Hæģī…²c\µB0oń9(‰W›i9%' c³ŖĮ#ƒ­»įõžį§!<.Āo¦¾j„p'>Ż!ū*`ŁŽ€¦e¦ˆ§DÜp&,U•åy«¤Æ`ĒāRĻž'“Nž“ŲÓ9błĀ¾ųį©?¤5ŅŹu‹®ćO|ƒŖ@gŽ>“kŸøE(Ü÷ńūųåĖædɖ%<÷Łēxrד¬jZU|ērĮ ½=}i“ß,„;łó-nw8Ę)żæ§;r ²%%5!Ż®«TW¢VŸŒlkĒŲ²ūČŃ ņŸB¼Ż£”Ę\”žn„i"µ<ÓEĮē÷ķͬ©]U^ļ°3G×4¤Ŗō6¦ŪŠ’›¢ ~ æ%EķĶ!ų^'’D!óģc"’ ų¬UĒNO›p”4 ³»›x–(]x Ś%„Ķī„€p“¤Ä pˆĢ¼-čģiēóׄ?^·„†!ĆųīēĘŧŠ»–ŽĀīƒŪ) –ó„K¾ÅŒńsø’é;RĀé/Xō N9ńCüé”’aėŽ żm—†œ€w>”]óšć/’/ŖŖŃÓŪÅOnūVŗY̚4ŸłyÖly™ūŸłK~ņ_Ytž…Ⱦ¶ ^7Ļ…Čr§±o'rŅ )»=ÓėB}+÷dWŸ%„Ō-‰)-òģ %!D7¶­WTTōېWąśė%?śQ>sßu|ąxŸā†ćDe¶ƒ5»¼š¾¹{ÖN(|Ö»åkˆĒMڽ^ūü“–UńU»œ™ļ±š’Į _ų6 Vü/¶‚öĄµFŒ„ėŹļń•µÆÅ†Ų¢,Šv©§FlŚöMėõķ›Ös÷mæeĀŌĢ;õ ¦Ķš‹īŃ}éDx=ĪļIŪŅĖץ¤0Ŗ!w?ęL†żĶ°uC„»{„Įb䄣”VŌ`qā‰/°+ ‡Z ±fšķåC_vī‡õŪ`ćNŲ¼b}0¤~4ēM†i ÜAŠ4ŠUP½Ž·Ü²Č~ś*±°ķÅÓ|į’ŁsŪ3IĻ`šŌ®§ˆQĪs×,»†÷½ČgÜČĶÆßL܊sńċ9>Ģż›Æ_Ko A=H©·”ļŸņ}z€ß¾ö[¶µmüÅū«šGĀ•üČS]¹ĒÉį?F@̰šéjä” ·ā>D¢`—„<ņ²bĶŚ5Üž—Ūyāé'‰DœH¶qcĒqńG.āā /f䈑żĒ~ńŖ/rī…ēńÆßū6śĆmƒ²Ē ŸZ71b8LĖŖ¦Ł‰bŚ)0m[hŠĀ¦CU„w­;uõ¾šé:Bćlé<-‚^³½7¦V½F÷sŪjkNųäŠ÷·ĄRm”¤oLLWU5m„?Ļ\ČÄłéxå•G;}śÕ--m—¼öŚŚ›JKĒ^[^^ö’®{Ś;;ŪgE"}'I)3–Ø4MŪ žnlöŌw޼jŌØi¹C\ŅŽųĄšOŒbņ’g»G ėFæóyž0œ łśvŪöV`˜šŲ :…#š‡ƒ%e“×W{?†’{øĢ-ņv‰’¹W’u2žż Ćäyœ6?z7pwūQükžavėAōvŪ ¶¬_;dĖśµčSOœĶ¬“OeÜäiĪ\ÅUŸ¢–ó˜7LX» ö5ÜIPšmąœæŠÉ‘oė„˜ZŌi§Xhŗ—I³Ns^Ü8+ģFbμﰣPv N…$āģ=[vĮö½°}Æ wV÷M#²/mę,pä4TTųugBaŗČž±žtøĀ«+³ŌŁ$łŸĒćčἬؿ‚ūWō>ičIܹīN4E㲩—qĖė·Pā)įäa'såĆWņäOņč¶Gyaß üęœßpžßĻĒNWłLœcI‹ˆ‘^œˆCČēOv0'łOYM/šü÷ļNq0ōŸ3°3•¼»mÉāH!ä9muļ.6"ĮiC­®F=õTģ¶6ŒM›°[ZS†,łOnRĆ=¾`Š1.ĖRX}u {›`š®”*!¦nŸfXæmvĄķ÷”F£(=ƒ%’īԌŒž¦m,łw÷ćm'’RĄ JžŹ(”@€¶īnĢ,įCšŠ RFÆÕ (jb5ӖND€pψpŁŃīąŚ_\Į¢Łgó…‹æĮ ęöŽtsē汏K~ƒi 8*~š…_Q,DzL®ūżæ`X©NŒlFLįŖ‹¾ĄKėžåįåwģpö/Ÿų>ĆźFšŪüŒ‡÷$ĖłpĢäæłx-šüj:ĒNq`rŹģ”mś”ڐņŅ^æl‹XXŠ”¦”Ā”–¢ŪŖŠ»Ū£Ń®ĪŽ£UzØĘRlijRئBŲ(Ŗ@ z…6æT÷ö’»†)) ŠHÓrÖ”K©ŌRIŒŖOÆdõö|r™łŽTUxŠ’i®gÜ`Å#Q˜gģŚ½‹%?H}}=ŸłŌgøä¢2uŹŌ¬ĒNœ0‘ÓŸĪ²'—ŃŁŁIygt.ØJé!tm`VDÖPżMĶUe{}ņŒ5MuSwłGJŠÖŠņŽ3‡·¬ūä¬=ož0“³ć™ķĆjƽoöæ}{ɉk¾³ģūé:ŠŖHĖŹ]š3³{§™§ ®kŅ(ā^óx<ŅŅå®]«šłĻ_{ßsĻ­ø¢££óü£G[ʤ+„čół|/UUU=sĘ©§>żŪ[nŁ/e,) Ś eggņz­Šµµµļ+Ńæt|ąxÆcå’›’ŸÄčÉČ1S1wm kŻ.n^0•ŸK;ļžx…x{7-ŗ?Ŗké,mH˒ρćžošˆxŌ©¬kYįż¶ŠH.\Iœųج>„Ŗ"U-æo—ų_®ÕŪĪl7–v­ņjśĪ¹Œ•ĄJŪF¬}‘Q{6³ «#¾pķ«/O]ūźĖJ bڬ¹œ0g>#FbŪĪ;TUS£–¾SG;iéóŸ>zÜž°óRź‰&Ht‘wö„§āõ‡°atŠpRLÓy—o޳'::ÅĄ0”é0ģ;»›`ū>ˆĒBśŻ¹B8ΊńcF3fģp°Õ}cp!żÅŚÖŃķč $QS•‹ü æ=¾ļ°/?öe®žy5 % TŖh;łé×-ŗŽæ®ū+›ņ1ötģįʕ7°tĒR.?8õé=Ā7Ÿü&;Ū² ß]ų]Ś£ķüś•_g\G‰B„Į“ŅĒ#)„ŪEž³ī\Ń…Č’€ī@’„Rˆa±äŸ¶ŖÕÕØ‹c9Œ¹i V»K,1½æ.ŌīLætØŖŠ¦ė˜ńĢÕhUU©*­ #ڃDz±u’žK›BļĒä&E`ƒŲJ¤µ§'!Fóü'>(Ń(ŗ7D÷fMUe²ƒFnwRr}Ė­ųŸÜžMC:7Ğ={Gvw÷Ģso×4µ©¤$ōāŠśĘ’õ»_žŅK/ī ü6a)Ćī:€Ēī[zĻāĄ{Ēkj¾¼Ą{hŌDģś‘Dļ|†‡ĘÖó±ŚŖ÷f*@{ņgiS4š<:»JŖhROoi9Vž’ń’O,ó["ŠAŲŻxcŲø ʔłišHBR Ū+jiéęčÖ&ö®ÜĆAKÅŌ½X!/–· KQ‘IgĄ;%ž— Ŗ‚Č¢ē Ddsœx*{N<•=¶Ķ]G÷Ŗå_•3 /\½ņ¹ƾų\ؼ²Š©'Īfśģy”WV„œkŁšĘVg%}ņhŪč”L¢±Θ ĖV:ļ×Ī0T„(_°Œ±Óēg¬LźÄU‡“Ēā°e7Ģ_ø=pTśļ\źųĖĶ“¼|‡šKtæÖÆ©Žźķ¼ÓNCURĒ R:"‰mŠŻ3`SæXPF @ņĻARU¶Š“Ć-ŪŪ¶óķ§æ ĄMÆŽÄm¹m;h,m䜿ĆsŸ}ŽÆ>žÕžć§×NēWg’Š3’z&c*Ępū…·sźŸO„Ģ[ʧ¦}Š˜‘õ:j›Jżøš”ém.”?Ž7įĪCžs ż„^7›C ݆ [HµE°U««G«ÆĒ:r„ų†MČ·H\Ŗ] Ī9©uĆė÷gu€в«Ó4Q- ©D²ĶtņļźQ’ē“Į’A?fЇéCé ;’ĒČæ0Müž\¢Y( éčéĮĪņ`W…F‰,£ĒģpfŻI=w©Rg¹‰“ µó(­G³ōŹKŖśC’÷ŚÉĶ÷żgFKC(‰Ąą®°“ŗpՅ×2iŌt~ż·ė9Üv0…H{t×_ż”7āÜšĒoäż?ĪäæpŪo?łĻŪpņßoׁŻČŅŖ”ś¤!A„¾$ ‡-)¤.­dY@E zKswėˆQU½ŗī ØV£·BŸŖ ŗfy±m ĖVP… ŹÆ)ąG<Üćæīߛ²ķ·ąP›CΟ}³Ī°Ŗ¶pŅ~óŠ>&ŃŽcŠÖķĢĪŽÜŻĆŗŻ=˜–dķōSo“ńņęŌŚŗmŻŁ’zŗ#qlŪfH‰Ÿžš®”W 0Ē÷CÜx“Ü3ųP0ÄüyósīOb×ī]\’“±źµU”––2~ģø‚ēäƒW­³öīč÷žeĮå3·n·måŽĻ¼ssEØ/H,!ŻsS€ĪOĻ_÷UwOŅ֓o½2#Ģæ˜ø¢\ ' ė9†1Pķ2éˆ?łÉoF¼ńʆ’šz=Ū‡ ²ģ”Sę>qūķæŪ,„”~¼v¤PŃo!XśųCJųĆzūLš½vCģŖm učHā)–¦…’ējÆŲšÓ@DzPgWP»h$ēWXXāe¦Ŗ’—–ž5¾b9ŅÅ潇Yóą+<½y‡Ä*J‰—”aÅ= ŖĒĶĻćź@źĒBā)Š+QąŚ™Ī6Zt -ž†ņ‚”jźŖ'­)M»;ęæöŅS³W>ūäų!µõL>a“§Ÿˆ/0šå“tĀs«įÅ50n˜P›ąÆ fĄīNN½eAWOįŠż©sĻDUµžÕ7¼ŗ³rp“ĆÜ¼ŁĄ IDATIE™!ó’‰ĘĒ–å‰ Q( ‚®8„ßN®š'Āś+ėĒPQ݈e N ¹ Ś»”£b±Ģ²ż€*wh`:±MluĶģėŖĪ™Vx;ŁöÆ6½ŹČņ‘¼Ńü†m0©zŽ éŽxʍüėS’Źž®żō™}TŖųꜯrēś;éŽug6lÕnQ_3„2œBøSI_AĀ]ł/Vč/•ą’jWš' Wžæ(`kFjBŹ*{*ĮŌjėŠźź°%¾qV[GVŖH‰Ņׇ] ¼”×ļ§7×*sišŖcšŗe#UéĶlä?}Õ6Õ(— v0€ ųŃ(Jw‘Å3łĻ@žÓ›u[ąµ UĖ+Ø( „Į YŹ5”jÕōZ]ŽŚ¹%œIµ’ŠŠ\öåõe“M?ųĀQYV-m~ųūÆ32Ė»•*–tt·2fčD®¾Ųū{uć‹<šÜWūźĒ¾Ēč”N©Į›ļ’9»n/`Y r&U4ł/Ōō[™Įr,¤]$›Ķ¢·ŃՊ,ÆvķųN]¹÷Ķ(RÕl[čB¦”Ņ#-i©ŁV¤!ZV9{hP­V…Ą2M,UŲEEU$u!Į€hÜfÓžpʶmMŗ"RĀė;RŸūķ=+7„ź[tGL^ܘ]óbßŃh~#\hnķ%ąQZåÅļQū£’…;Õ)ķYPh҉€'Ažœ÷†YöÄ2xh +^ZmŪŌ××sĖ’žŅŅcl4(Oń ˜¦)TEOIĄ+óĒÆ-Z·AÓԌ;dß4„˜3ŗ½Ć²iÄɬŸHUT°D\عT‡³@S 0ņÄ4K×óxZųÉO¾³÷’Xņ×¹sg-½÷Ž[^ļCJÆ7×ņW*vīÜ„~ś²«§nŪµka$YxĮg}ķž›oo8b/cĒŽuŁpÅ%aæ»ųĄšOŠbó’“= X[׊ūś ¬{śunŗ`>’Ęqr6,ycżš5»t?[ĖkhŖJ8eõ? ’ł’ƒ ’7 D$Œzå NWĶK},bp3ŗF`h³‡V1{žd®Ž„ O¬å¾æ­äåŚz¾rŒŠJ Ż;†?˜š’dƱ„’§‹’%‘žŸ ¶V}@×PģV7(Šw£·nYc5lY×2kĶĖ/Xńōć3ė‡ŽšŒ4…±§¢'BbqX·ŽŲ5å0}¬óļŅ3įž]ŽŲž¦ęÖ(Æn`ųų™Xfv2GžÓn”ŌŃ>”2Ā‘üóÖņPˆ®p˜lÓgUhdįd@"qW؀-ŠLł{ŹjXś®“Mgžtg|!w-½…u;VgiJPˆXڲg=’öłńč"}½Üpė7«ÆēMs"Wœ÷6ķZĖ_—ŽœŻÄܦ¦ģĖK×óŻ#…ȁėꯔļäBä?Ū½–ćŗ¢i7²¬:e»>®: Ö—¬#aSŚR“–ŠŻćkl˜8tōČé£KK*ż–©aš¦a Ŗ:š¦a™6ŖźD Ž*ĒØÅ÷®ąĄ‘nj‚+|x4‘“ągMHߗ@oŹJ Ü .†Į³ĖŸćĮ‡ä©gž¢ÆĻ‰†˜Ņ’ŗ#óXÓ“…Ļ£¤hŲ¶)„’6”Ģ’Žh[¶P%”1`šS @UU„é@ —ī_ڼŹÄZ1å Ž!öģYó€¤Oāõęö-“¶¶*Ÿ¾ģŖ‰onÜ8æ««ka,;YJŁ/°ōŅKƝÜKrVø~š’ļi§ü’åE’ųѓ‘'IüčA:–­fI™ŸQ§žČeÅūöāåõX÷=G³¢±[ó°”“œ#i3X ł?į’ŗč‹£\4’é3ø.ąav–& E Œ¬cʗĻeĘł³ŲõǧųÓ3›XÓ[GWÉśB„XŗuāE„’VüĖI €ģį’)}R“žć’Ś9š¦aŪ -ÄŌŁŽęÉs½Ūq¹4Ü­ų^]qdźĘµę­zį©…u£†Œ7į£Ēöæ8›[¢żÄĖ0y¤³ś¾t„ó~éīMÉīežvŅ9YEÉÜP'Ą4œtā×7Ć¢™ąÉ©P“č ;nŗĒ9·3ģD(i#3¤a åC±Œ·¦īgZŠv¢ŅWū½8q¼£c0q8tv;¤ÄļóöY…ÄāÜ$vņčQ¼ŗ{Öü·!g! .żĒ„|eĪWøxŅÅ<·ē9öuķC" č¾³ą;\|ļÅ|aęxp˃“EŪ²7²jk«(/+M%ü9uĮÕötāMvņļ'Č jS2ÆQˆüg’īܧgŚēžś»mp÷K­«#PW‡uؙųʍXż×P"ØČ]M@Õ4TMĆŹRr ®Ŗ†ęöLÓD“ŌōÜņc!’in—‘%Doµ'ā„įda<Ē›ü§Yžė““Ļ9ś‘~Y×/)ō–ų„M8ćĢThŖJŠļ'É"ž ”hUōZ]H[BR ĄN ŗ"2*bÆöŽĶęŻėJłß{šåpē’¤ €ß`ī”SøéīŸpšč¾”ńōčnųŅMØŖ†aƹžÖk±ņ)©ę{s„osó錍®›wÓq$’ÆŪۃčhAVI9Ī»xLeļŻk#šīó×Ō ­­­U •iR 3ŽfčqŖw“@L ÕąŃ$Cü6‡#dšß"¶ģ-X’Æ„£įhœ“G—QŌQ…žœēqŽ4€Ņš–å1޾c;·ŽžG[ś]‰ØŖ”C¹č#rń…eņÄIżĒĘb1nüƟ3|Ųp®üģē±mÓ4ķš)õć2łCæČĀÅÉ]ējÓ©oʔ¤šiŪu\šŗ&%yśŸūāųW^Y=æ½½ķäh“ļdŪ¶+ӏBDŖ«+æ³lٽämģc{_øæ>p¼‡ńnÜA“ēbŚGČŃü·głƒßKåœÉ{ńŃć€7¶b’žQ{tu” 6ÅĮI3WTcÅs(üKųæi Ŗü¾1™« r…Č)÷Ö0“†1׊Ÿžµ‘•ß»[;Ū9X=”ž!õō©JźWŸÜŪVŚź»EFŸ#žłĆ’“PMŲ.§[¼ÅŽK”„åJlń‡ohވ+źĶėW5Ų¹~ϼuÆ{ęTU˜:lŌX„¶¾Ńé‚éčXVBū ē}ÜŽ •%©ö5ŒšLĶŠq9W’ŻščSRŻu¢ęeŽMA]5|h.<ö¢cGk )÷`Ņ¬Ó 7” śbN¹ĀŽŽDEo3'Į 桛ŒĮ³”'1æ—R 8«¶y $™dqŚų±¼ņ!^ĢqBԌö‹ś©BES4~}öÆ9©ń$n{ć6v¶ļäįĖfŃ_ålCŪ¬2wړħL²›B‚ßņjūĄe6§q–k"’"Ÿ-.–Ā›]†ø)¶ø÷§Łn«ÖŲ€ÖŠ€u°‰ŲĘMŲ]](ŃāBgu'§ “¤U(X–…eZhŖ:ą¹K›H–ü»æ‰€P+DD"ˆ¤FĄ?%łw ĘśŠ<>Ģx~UѲ`0§@:>$bö TZ"@qŹ8:ēĀqäeŁĒpū¾M|źūgQ[Õ@_,švģĄe @sė.?ūjŽŲŗŠ{Ÿŗ=ćŗW_ü-ĘsČŠü5;lÉmGŃ6’üB!’žļRŗ8ņ_äń (wcUV§­©ņ—OÕPÖ ųżA!mӈcÄcÄ5]ó`čqtKĒ0āhŖŽåа„Ā„ Įįģ·ŽqCz~’±bĖŽv*¦ -„4ąIł2äPÜĪ! : "Ļ“’ –Öīŗū.*++łģ§?ĖG/¼˜9³ēd8¼^/O<õŠ"Ųŗm+O>ż$'Ÿ4?üöƒč1čTŒ^V„ŲÓ6…¢fĶ7l)DŹ>·ø_Ģ“…¦*2—“ †.§Ŗ*Rfa;åMĄćˆŗŽĖV°_ŠåšÄ €TÄųĘ7~6ź¹ēVĢ;|ųČɽįŽy–mWg(ŠrH×ÕŻńø9AJ9¤µµżßĻ:ėć‘M›6Ż×Š^`dįĄū 7 ņ}” īü7FOF^4«·ž®öŻś0æź‰?}6ę8]{0X¹ó÷pŲ„{Y,ćĶŗzöLOgumĒaŚź’`Ā’c”óĒ0ś”aüŽ«1‰·Š@,˜Ę)÷ü;æ’g~æa3«cQŚkź‰hAlŻ“¹@Ÿ„Ī@˜æ‘VF°˜š’c’K¶zbõß ØMÓśulEF²=M[2sžßģł%ūm[Ž×ŅtøōĶWöž°u“ļŌҲ”sėGxŹ+«3 0-§’@iĄY™W…)³Ļ,øśļ†ßė¤4uŌżĒž¾x6lŲįhÄ ‡¬—ųœėiCYUŻ s’M zz!Üė¹ł”Ļ“ĘĮ ć”®"ŃÅńO¢7!h,„¤¬$˜s;ŁMīŸ2~4^ÆNßĘ8 TõzG`I‹3’z&gŽ>“»7ÜĶźC«łĢŒĻšā¾9Ōs(ūIĶ`±8åŖYż$÷ųƶ»NÉr”sņ82ö“e²:`Cę9)ä_¤‘ūć‘ÕV“aĆŠ†Ć<°{ĻŽl£žĶćq]s ¼¤Œī¾^¤m#„tĀхHyX½ņļŽ" Q‚G=½ˆ”¬Öņ ƒ@Iīæ×‹®i9œ4eJ+ģ¬ü'ėw%*·$Ė®¤;P2ģĪ3#°l“C-ūÓĪvßäPt•e5ŌW£/åś?\ƒMźĖgˆ©|ž#×°mßFnä¦T;ņ›™Ćęc`ĶŁošžƒ!éƒ!’yĪŅł¢Ē#Fi;Š]U›r¼2§.h/ļĀ4L -ަ{0 Ż40Œ˜+ @GÓāØiQ5I¹×¦3ööF¼UDc&w3{tcė‚=޽ÉBÉY… 3ÄæDś ¢€¦źÉ'Ģßļø‹… ¢kŁōė”··—ē_xžeO.£µ­•ŽŽ^öģŻKii)ŖŖŅŃŃAEØ-7.šł Ž’WȾčh¶šijŹdŌ¶M¢f8Ü”4§€e9”Ž )j€ÅĆćŃ3TSĒ›÷C‡_bYVm¶sE9^ŖØ([9sꌗz螝tKłČņåśå—_ž‹H$ņ™–––ŪN<ńÄ£MMMĻCoŽ3ųĄšO€ōš’Įę’§cĹČ3żÄć1:V=Ē®æ?Åļö7Ózé\ k¼Ļą`ŁšŠrā÷=Ė!E°G÷².Pʚŗ”ģ;…¶śńÄCeŲń¾Į;%²…’‡»P/ŸĢ‰³kł³ŖRü“ō8 aC~w ßūįŸłÓ“yĪ48\SO/å˜n'@®š’¼ƒāIÅNFŸkZ"ü?×Ó%nĖ ;j‡{{><*°Ā¶YiŚmźź§÷L^ūjš¢`ØįĚśŸĻ7°4mZŽ€ “aö¼“ā=ˆ°{! ąƒ®Ä‹aĶØ,užåƒ¢Ą§Ļƒ’ü³³BßvŅT“fVōõ“°,§Œ_<īˆp'Ń0¦Œ‚ ܔYr5„#ō;?ŖŹ’)jƒĖm×Uł'LēÅW×bζr(ł¼}ˆ[q–īXŚ’¹>TĻŠŅ””ūŹéģĖ\åQV †ØgxCóŹFø‹]mwMÜŻÄ;ƒP'ŪJߟܚFźSlÉāĄż#«]…Ó7RČ}ņŸµō`’Ø:Ž}ÄHüCjčmvéå€^ 쓪“œöž,Ӌmė(Øo łw’BA–„PJ‚īEōō‚-3 z6ƒßä?}kĘu¼ŅL!(¹P ę, čQżx ?q3ŠP%RĮy˜I‰”„D$ÕYL^.”u¼EĘžņ'ŹÖ«;ӊ߮ū3öŁrŗŖj\’„’qVš-“nż:¦ĖŃZ4Ł-ds¶ć ¶åž)ŲPa?CśĮÅŸåž)4€8ø»Ŗ&å`{d#Ō…Ög`šš iqCÓŃ £? Ą4T w€P3Ŗ4^8ōŽv¼¹½…РάŃåŌ”yPÜaż®4€ō”€¤¦¤Ć¶!ų¼¹’REį“E™ó‡öövžzöi–=¹”V¼H,ę¬c——;N³O]ž)nüńĻŠõģNƒ|% ±vltŁ!-dę\#ķ³¢ DŲ€’tfmŪBQévX¶•!!i:i0±„źņhš&1²ŒiœŒ€ń”ßćĀ0Œ›ü+ŠŅ _©¬¬|yīܙ/żå/·nHæ–aé^YZ“hQü§?żéæ}ó›ß¼XJYŅŅŅņąĄx0ˆü’|X>ČwMsc1#NŪ/#Wnįž‡9ōٳłģøį4K›ÅāĄaä¢gū~šõė뇳cŲTZ'N£/Tź<–RĀ’‹Ģ’OrŽFP®œÄüiõüIˆw":‹M>4o#–ßńYŠŽÕ•ÓQP**hµ£Nųæ-œø[óOpé’\¶ ®sKƒżŗZ¬ßń:w=qkʵ¾pŃ7˜<Ź)ś§Gž‡Ķ{ÖekjP×Ķzf>’^ˆüē3¤‘łN.DžÓn Į’žż}‘,Qcrżµ0Š”9«üšŽač8zZ€®QC‚’†€Å”ČŪ’Eł–q“#Js[˜łć*˜>¬”ŸŠP”Œæ•lUQ•Šēˆƒh4ŹC>ĢżKīēÕÕÆb%ź1’sĻ>—sĻ>—gœĄĢy³Ų¶mė1‘’$tŖĒƀĄ4M!4µØ™ŌĮNŸļok¦LÜr“tXsGØ>fjž_¼cŃø#«¾{ĘʵŠ’*Śē8X€ž%xÉYäwĀüӟjZ" Č["ÕćŃ%H&óB$i2¤ź•łógætÓM’±­Ü[cF‘RJ)æ¤7{_’ś×#ßžö·ö›¦œbŪvƒ³µéżššཊ÷‚‚D Ч{h[żöŃ&ś~üšNŸÉēĶēŌŚŹć[&°;Œ|d±e+i±‡5Ū½^6JŁT_Ēžq3ho˜L,TŠķńe¢“ņFm€ōšĆ@\:Š)Sė¹åŻ"’Ix=Ø?¾ŠOż%Ök»yFQ±!¬”#•“Rž"Ä’r…’ē’+&ü ‹’į ’H†’§<Ų©JĀŁeŪ©$œ ŖJRFxöÉ„»ęĪ“?A ³źÅՓwoó^īóUL­Ŗ©O?¶DœyžÅNłæA:¼^§ŗ€i8Jū«6Ā)ŁKΧ`ŃLŲ°Ķ©\`š0nĘÅ_4 š UeŽ iĒ=OĮGW” §’O‹†š!łWŠI/ŗ§Œ•„„,˜5ƒ—Ÿ]5ĮŹš¢æ“HV5­ŹŗOyJ”±”†ŁÓ§ą&źÄ6Ģ¹õ`÷²īBäß\@Ü4Ų²c'ė·leĻž&ö:LGg‘Ho’D2RYQɈĘzFĘ S&3iüx<=½—©Īlp“b7ńL±»łB §©˜|źŗŽßėĒ4M¤-),2C=3$gżœŽŸlŸRH“*°KB ¢ōö"ŗĆ™‰b®•ł£ DF?rŗ2®•™®¾A˜&~æB–Źz)P’b€9tüZ)šŃā8/Մ  ‰1„ÓFó"ėødŠ’D @܈sż-×"e*3Õ8ž+/ü:{nēOż&×e |Y©ć[œĶłŚ=vņŸŚö»GžSžNļ‡ŖŌˆhkb ęŻØ¦įäśk:¦Ē4t Ɠ`¢©&¦¦”&¢4UavĀ{,āņ½åˆ6ÆnjfX„…+iØš”9žX’·ūqKˆ:ŽžB§mß±O}īÓ4l`Źä)œwö¹œsö¹)B€gŸu6wß{7ķķķTVfhÕ]”#©p˜@" (ÉmOm^ĖĖSĪŲ~¤üÓVRys·ķGKOZw bé=W¾rO¶kZ‰Ä~›øP(¾ ÄÕĄ~ĶkƒĢ”¾r½ž¼ |Ė½óÅ>)_šzõČQŹvŁ'üøĆ4rxč ±±į:£ĻšJJśĆäFŽé:w9°xš{šą}„éšĪ…\ł’ą¤lv}NFxhßų$ĘĮƒ„Wl ķł7xuń‰œqź‰LÓHŁ[Yh:ŠżüėĞy•ö˜A‹¢ŃäŃŁéń³„¼ŠõĆh3‰žśÉÄu/2Ižć}U”Æ3G©?Ć@Ģ(”zĪPž¬(¼µāŖĒ ~/ŚÆæĘåē}—ĪC»°48Tļ£G b+…üBo%ü?yÜ Ć’‹’ė×` ü_LŪYżwjė©żjY®™ÄÜÅ%[ę.ęŗöƒķ”§Ż}޺ןŸżųżw=ē¢O(§÷„Ų&EyŠōA,‘Gæ}Ÿ“k?~xó\ńaŲ±*GN T6ŪÜźæŖ•epŌt Żaø÷)øō Ø*É®įźkYIŒÉ k¢WضżEg.āõ›‰®“ą“cīĪŪ‡`oµ¹ś[C%±„æĆŧ¼…Õö’=`Š”šśŗu<³ņ^Y³Ó0©jKEćjOXČčŠz4M÷a}˜ń(įŽCnŁĖ֗Öqēż ėĪĖY‹NaΉ'ōېśŻ \w`³‹Ü»ķ.‚üÅ;ÅY1ĖSJ¹$¢#҃ˆPTʼn“m÷͚IžS‰cź÷”FźŅIū„¤82B$¶S HåS™«ŽłH_”~WņŸųßg›tS„Į`N€B¢œN»Å‰°I¤ąČ~%,DFÓś“nk.”%ŹŽ|ßĻŁsp[Ź>UÕųÆüÆīŶ-~pó׈åņx0Ndł-æĶEbóž¢É”¦ßŹL0Ėw)z{=Č’Ŗ ؂ųÄŚĘ>LÓÄ“LLÓĄ0 Œ„€nz0āšf iŖ©a©*¶­b[*>ĶfvąåCv’ßü» ‰ä•‡h 'V1}X)!oŪs' @¼…4€ĀQųćh:ŲĹgŸĖ÷æūļŒ=&ē±_’ڵ|ėŚo3łØAu q5„ģP@‘JŖąži‹.æpÉśQ—H)”Ræqtfcók'jŁzĪŌ¦}õ!3śņžšŖŪęž k»‡?łšķW<ūųƒ³ĪżčeĢ]ø[:ĀV…:„ł”#ĮßW¬…šrØ(@¼+Jį²³%Žņ܄LIÄā”*NzĮŃV' 'w.…Cs›už†\ Ą ü\vŽŁüeÉ£ČŃF{Ž;Ā >¬²xįʏ•Aøū?ęIH!{Ę£šjūÜch[Ͻü ÷<²”ĆGÓ8a'ü'4ŒŸ7čš\@¬·ƒƒŪ^fǚGY~ćĻiØoąŠK.āC§žŠPWwŅķŹOžŻćÕ’üŻ’š B iF¼^4UÅ“²‹†Ō2:ͤ*š«„#@*i#D]A IDAT1ą·ÉŽBä?ĖóńÖ%æ$éꎄæĻŲ÷™•)cNąÆ’žM»×foŖłOšAœ›}’Ą7’>ņŸ·į,/z<²ŚœøŸš÷c•¤>£ģ©eXė{±L#C×tLMLjĒ04#īD覎iꨚ‰jih–ŖŲHi3“DgZ„͆6‘Y;÷]Ąš­G ÷ĘX8¾‚…ć+©yQ1čÕżA„D ;ŹŹœ±’Ī7杗ü464r嗮BĮŸžp‘H„žpµ5YuķrĀ«ÕŽŠi€lŪŠtČś=oNµdŻčKUՎ_8}÷’Ī]õ’¢[(ŗåDh,×ŅņĖ‹ŽųÓ'ļXų«„¦ō„ę–eEń bGA,Ė.^ ±Į¦Šdž]×SKfy5ň Ÿ/h÷>ō‘QÉ0}ż?Æ£µ p‹H/^ü^ą. 8އpē’§ ŗ±ü­ł‰ū±DķHäœó0k†Ó{h%ń-oŽæ›–Žö¶†Łöą VK‹Fj*CŌ«£ŗÄOĄėūԾ²«ėp}G:ˆIAÆPčŅ<“؇=^š}•Vpøn(ķć§®‚YYƒE‚¹£¢ßJłæhå_¦ņ‰ —ܵĘŅŠsD×ŖŹ3ßßŻŠśšdN滑CG ¬BE&MĢ™LĶW.ą¼[—‰zJ0+Ŗ‰«žŸkõ?_ųæźZÉĻÜė”Xq–¢$Ä’4MC¬ųŸźčs)‰Õ©8īłøŒgN•ś6B*RL<±¤iʉ%7®xŗsśūŻĻ<öąØs.žSN˜å„œŁłēŗę¼œĆ¦³¢¾ģųųé)ŅY1kö¶EŖéź6 g Š€ź 8jAŲpī·»–ĀĒĪ„ŃõÅ“šÖ•āē8•Ķ»vóś[°®¶ €#䁟*ueU|ö’‹\+]P/“ģf\•r‡Ś÷Bś÷nپƒ›ž|'‡ŽeģI—0’ Ÿ#X~l¾Eo°‚Ń3?Ģč™&ÜqˆMĻ’…’ŗłVī}äqžõ+_dŹųńäĄø\)iz YČļR#CsBˆ(/)Į2Mli;‘‰ }B2–Ē•üg#Üi9žRQ ¼JCŽP`ø×Q-@ž³’ŗćDž3.œ‡üĖĘē—Ä ¤ %~?įpÖŻŠŠČQ»,“d¢L  $C”Åq'’›wÆć7’æŒŻ#ĘņåK¾ĄŽęÜüĄ/²7uœÉį¶ßņŸóˆ·‰üˆīVD“阤HæJ|¬u·išÄMĶ`ĘŃ-oµ]Ó±5 Ė2±TÅVQ=’ń5 QÓdG—†x·œÖī8Ź”#=ĢSʣӇ0¢ŚžÅs/8Īi}‚ ™)FźĘ'?q9·žéVž~ļŻüųŗ ¶FYõŚ*.»ā2^yucFįÉGŸ”.€Nłh`Eņ³išBŃRCóE‘n1[‚ødśŽ®’šė/“’d9@[€ŹÜ­ķŗjGš»żEĶX2 ¦VBJBÓm™ŒČ&}b8s6·;4•’;ŸbdšżTüöŽ;Ī®ŗĪ’~N¹uęNĖĢ$™Iļ  Ho” (".+Ōueu- Š.‹ė*.»²®mU,ج¢®„(ģŅ!!”B ! !½O/·žs>Ÿßē–sļ=·Ģd€šżåõx$sļ§>ēÜs>Æ÷ē]<ģ’?ųIĆOś‹łöw¦Óé@  vwNŻņĒ{ļŻ\߄o†P5¾Qčœ‰źœ‰> ¹ś ģõĻ‘|õewļc_¢ŸW2)&Łi&fhٰƒĒ„ķarQF–i’‚Q]gX ‚ō™Mōw60Ų<…‘™Ż$:ę`µvøēŪ”0*"“*÷ޟĒĀ’%āhG·Ņ<­…¬gŽ™ üĖ7į/»ź\” |źoąźwŗł_» īųƒ{ĄŻ=n’šKä¾÷s‚7Āęm®³¹[n€‹ź9|ņ –żźA6ģßĒPؕd“Gw–ļĢėŌ@÷S­Ævś_Ķ€aya‚Æó?I^SĄĄ}ü–9’ó“—£RR)”yN’ż«wĘ%mėNæ õ†ū’pšĢ_ŽöæžŅ5{Ņ9—\Ę܅Kp*ŻŖ ‘ ¤Óīé{ß ėpł •zŠ .g’érŪv£Ŗó!\Méø¦~y\±ͬTKåėV$’X”ļCßwŁÅģ¾ķ ūчó!B‡6§C‚ķ.Aš ÉgÆ’0A3P,“(!±~d·Øt į@É2e?W7°ÉĻ~ó{ī¼ļ~fs>ļųŠķDšĘvS -S9é7rŌņ±śī’ąć7ÜČU—_Īß¾÷* Ż(^ c-#’eĀ’bhPWXg½† Ž Y!€Ė’õ¼a¹w<…:Uü•~*#5¢¤-ŹČ?Ž4MC55¢bQÄHm¤ŌG@qc¢4gÉ5’軂µ¼„fD* ¢z3 gŌ%żJdŻ{ć†ŌÜ՝« 6ß-‚&4¾xĶ·BH%¹é¶kIgRõ45¦~«ÆFžk5}(»·Z‚…’Nź&’õ4§@܅š±°(Ė^Ś„óŹA¤cćX쬀É`™÷ÆabŲ&¶c£;vÖ! Dפ­ŠM–N5Źb搎~(’ņq@JÅÓė÷Ó7˜ą„ŁM¼ķųÉ,ģŠ4 ćØ,tb`Y…Ć?Ģ›;ĻüƧŻÖ|„ étšUOÆā”Gā”GbŪöķ<öÄćĢ3—³Ī8‹¾¾>&O®_č¬Ėš „tQ°aō čH÷A’©³×­©Ō–#!Dgcņՙ­ńĖe².žČˆ€’łēmÖ?@5ųń~[ųkXXĀÄT&€éė$0 ©dv ƒŚo?ļŒ-[¶]”H$N³m{^iłķŪwŃŁŁ¹­©©ék/æüņĻ:—mćĀĄ›7Ść=±Ų’ūaĄLT÷LģĪĄY½ė•ēIģŚD’6ö IĘiȤ‰¦ĀŹ! lL„Š„@¶0±õ ÉP€d0F"ŚLbŚTŅ]3°šZq›”0*A„ˆ”ĻI½ö’^äŌ’m ńÖé\£ėŌe@õ«{ą™µšĒŪ`Ö4ųÜW`Ė67oõ:ųݽpēm0m*|äsšßæĻ~ŌĶ’õ=š½›įō·ĄĶ߁żŖ~@K ćŚ+8ė_~Ęīž½ō·4“v’ŌxÕ’õ ūE_Ķ€ŅśajåārƝ‘ó?Ć(8’ĖŖ’ēŅsź’¹vU®ŽĒłŸŹø^hįū–ŠuWX ”.ŗ¢ćńåo“źĮ»œż‹~óŹīscē\|S§ĶtcŃR®„!4F •õšü&čī€łÓü×"i,ÄŅ&” ‹ĪVŲ™u“¶ÜŠ€‡Š¶&×aΐå ~õæpŁ™°laķŗ¾äßCX+Ū¶»’…&ŸłŠ{¹ł·3ōóQœ÷:å”3^HŠīčunü‡æcJG{Łu’T&»Ž|*’’|rkTčƒC#ÜōĶo³cļĪžą·˜~Ō9ÆÉRD[¦p־ŎupēoæČ ^ę+7Ž@sSSŻäļŸjo”:Oøjł B †ŽBf½tģÉ}¼ĖW#’Eäȟü{‡]‹ür”CS#²1źśˆĒ‹ˆ‡!łŠ- M7ݵ­‚P €©ėXĢBz†e`;68 t•w˜#=īß²©•}/½fÕąw›…CQ†FŻšŸæŗ’G<æéi’¦ŖŽæ5čŗļ˜«µėi­FæU“ŖU®EžKn¢1‘ß¶ĖÆ‘čŁ]³Ąšœ‘6°ŗLōżŗeb™6¦ccŁ–ėŠĪ`ZÓvźR7plĒŠŃ¤†fč5ƒ„]&!#ĆsĄ Ö³čŠOY¬\·É©ó›yėŅNm$ŠØŁƱ@ŗŗąÓY@»÷ģĪž‡Yńä ’Y_”Pˆ³Ī8‹ĒW<ĪUW¾›Æ’Ē×ės„f†ōīī”ܹ­(AsOŁ%JčŽšŅ»uŻŽ¶“Ų8«ėŹe›¶ą€£lĒ¦_ӔzāS’÷u„ F^’,„%”fLQ6 U& nL¬Õ‡“³Ļ¾ōÆ^}uĒuŽćtū—*@J9k``ąÖéÓ§“żÉU›Ņ]³Źa‰#€’‡šZŲ’WC÷L3qf,FĄ²·’ܹ•‘­{ˆ §zŃG2hV¦ĄŲD ˆÓ܂hEF›qb“pŚ;P1 )HÓR‰:Ē3†šV13Jć¤F®®wžŗŽw9ĢÉŚDĒ jJ~Ī;ęfó.^­,Ō=ńX—üœ{Üż@½½ŗøźfüĒ’0č ū;šŌIF:(§Š–ČxŌ’e½ź’Y M Dߨ¢ž_ÉłŸWż?—ē§qąwśŸS’·=! õlŗTJ„ĀĀ~뻦žę͜Q•ü{'T‰üēK–V)Y#/C®H؁ż{¹ń?¾Ž­ĒøäÓæ§”eźDƂ/fs>mŻ‹yäöOš±nä[7}‘ɝE“+rP诹ū¬‘/ź”JŅ|ŠŽ2˜t*%QJ+æEÉ÷ā/UI󔐯 BÓP-1hjt£ŁH E=7P¾”~¾t^ę1ņ 2Bį ‰dmM€h$ĀąˆOhĶl“QŃ̰ģsOżs~tŠœ¾Öä žįŚÆæŸóOzO¬}°Båj æväæVæU“&„üÕČiŖRhö"»f„ŪKc8»{q Ūΐ±Ģ|T+Ą2-2vĘՐ¶tŠ„Äq$ŗ¦PŽC2uŽźŠŠ̰jgŪ¾fŚ Å+;yyG? &§.iē¬E-Ģj2½‘éż‘»åĒmP?0™47Öǁļŗ÷nnūńm<·ö¹|ŚōiÓ9ēģs8wł9œvŹi„Ćaνč\ž|jU]mVBP“ĶĪh»·ś/‡D¢ń÷§æšüŸÖ͹ō{O,¹āō¹;æ3µ©‚WQoMGŠŅp€ŽUwé9ØrŠuSŁTš…-ōŗ‚]{QĪśSdD0…ą¶;~ŻōéOžÖxfŪö)™Œuõ‚åĖž…[k ÕYÖį…#€7źµ’Ÿ(쨣önT{7ję2äKkÓGpF‡ÉD2^ņt\„šŠ”Āć&ԀЄ«;̤ķ’Ēž/™@»d1—écšśæēĢ›åŸ·÷ģļĻükį»÷½š°ę†ØKąĘ‚XśUēq܏īcĖą M&Ń6™TŃj½ź’^y_õƦ€×ł_Ö,`,Ī’rÆ %„jbłzV‘MSŁv[ŪńĖ?ŲżŪÆÄyź‘ķ—żōÖÆ>oŃŃŚ©ĖĻ'ŚąŽ^ĄĮ„ƒ0b¹DžĄ.¦ c¶ÖŠš,üŌI00~§ÓH7~ś¦MR“üūŪr¢_œX¶FŽōӉŅõźéļē³7ßB e&ē’Ķw „źˆŁ8hhķāĀ’ŒGn’æńŸłĮWo”£mRaÄ„¤ŗŒōWæ;ė±’jo‚P ˆŒeÉæ{²\NŠņŸo^øQšcØXbd1āx(%äÆ'łĻ!$$‰ņä24VDµ&†œ^p„+•‘sXˆ X6§J歆zäK<}OIŪžż–µ]­`5ņ_ µHzµ®jLø~ņļ³ŹÕ*×"’>ė”܍œ2Ż=ĪBM cµjĆ6Žeć˜¶“=ż·3X™ 3€mŗaĆDź6Ž­# )54„M0§3DSÄdķĪ8›¢ “1ŚÕW„‚Ż=£lŲŽ‡&Ž›ŽČé Z9vf±†ę} ˆ"“ŸŠ#@É|,,[`Ö8’Ł/~Ę ’üO!8éēøčü 9wł¹Ģ›[¦Ī¹ĖĻå—æłzz{hŸTĆ[p˜“Ģö~·m[覞·55€¦HĘśüĻüč®—ę ¹ŗ§š®©‡7wužöł9ǿڛ3˜ ¶ŪR FL{𘮁g¾qÅŚūZĀvF×5å Ŗoš½šJœņ,•č«é-’-”ß;­§§OæöŚĻߖL&OBŒ“¶¶Ž~Ā ĒŽõūß’r}{ūŒ_§Réå€öōÓ½JŃÆ6­Ł¶ķī“O>ł÷¶mŸĒ? ø€7’?"8ģ0Aö’¾ĀŻž>fūv#Ś:Q&Ŗ±Õem#ż…2”aDÜ̲¹VHŒøy)«åČȃC ’—N¢u6qE½}I ɔK żJĆܙpĮ™…“¶ ξĒū~»üLŗæs'ŻC줯„“f(„ž_šWT’7 džōß( #˜W’/®RMˆó?ļéæPJxļJӄe+”)](”čģ¾ķŻÓ~¾uÓč£ĻÆzłŠ;¾·~É¢cŽćųSN'¢ f渚ˆ{ĶmööĄĆ«į‚³ķ “įŠŁeė£é0}2lŚī~Oe 4AO×ęP6ģĖ īyÜõ;pYV^­ŠUŠ6čżæ2Łõ|óTt#üć5āž‡ćžß?ŽxA /–PæCūśa+A[”qō¢ł|üżļ”!­a»īć9=_¬d^R_Õ_BEŠ›>sć-_LjuqĪßž#šĘ8I„cœū·?ąü ×}ń&~ųÕ[hˆF‹ÆgnÜŽõØēAT§ ž‡Z8Fö:(©PR!JˆōaGž½ßu š›02ŠĶł8<Č?‚%'”•4M†AĘĻĖ`h&A;DĘI¹B#+¬QŁ3PÆ@© UÉxk‘ŅŖš]‹śźŠŅESæU}‰tåŗÕ®ķ˜Ęå3łŗ×ĆwĢu\#ŪBėŻ‡ģ(Vk¶—4ā¬Āv,7`ĘuśgY¦éjŲvĄ hŪŲ†ƒ&ĒA×t¤”M” ‰!4:cg,hdvæÅó;ćģ‘„#!¢įśŲy‘Ź8lß?ĢīżĆ $3ŪĀ?3ƲYĶLk ŃŅх(šƛ@2f YńSO?Ąæ’#.¾čāŖeÆżäµÜšŁźŅÄŖM uk2*c³äŌ>‡wóźĪw.ݾ]iJ}õćæ÷„Yē÷ĘCł ÉCŽ4™L¦>²yņ•—}’Ģł\ūš×І–ųē8īžÉ!#tLUv°“uśēEžøÅ.¤˜fȕŹų‚e²‰,ȆRšqįłW]‘#’Į`ą…üļ>ōå/a(FT$YJ„—ŒŒœü X¶l™3uźŌÆīܹó<)åŅ‹.ŗØõžūļļó[·ĆG‡^Kob’?𐀦*Eżģ’‹§Ģ l!2ˆc¢“EWēH]µšØ¤µ ZšąĀ3żó'Ėéhdzj˜ĶĆģ%3±4½śķ2Võ’\” *Ŗ’ć>Dr‘%¼>*©’ū|\Ī’<§’*«žÆI÷3€Jd2Ž[T(mʬȁ©]‘ÆĶ“žķ¶G_]²éĒ/°xé2–{< ŻĄŠ dBsdßO¾Ó;\'|)}ŽhFØņ7NcŚ[`ßA—#$Ӕ”"Öą:ŁŁ×ć~ąiˆĒ!hRl’P™ÄåW!‹¹|MĄ;.XĪŃ ēńÓ;ļfß­½ČeN…śõhŖ ¬ćI°āƒļ{§½åųĀ™Ž$ķą.dGWQŖšŪ€µjĆvµlÓƲmLŪd,Ūõ `d8މt ”#‘ŗDJĶѐĀ@S MÓhĢlŠŁąĄÅĖ{ćlŽ?BÜ„Ā&‘`€hÄ,ÓP(āI›įx†įżĆ)Ré ±ĮQ]a–tÅXܯȔęÓ`4£Ų;œ!ķH’¶Ä:†¦›­XČ `ųł$™Ųh©“"VCpܱĒń§{īŖėD?™ēRqDé{5ū’Ņš9ž_+ü_ĀBœ>—S);æØŽ9ÓaÅ3pžéī÷{aj‡ūłų£ąŽ;įśk q^KLæBĄ9˘žĒ•“АJ0ŌŠ„­éØRɧמæ(} ź’#;&O9Ųzœ“6f*˘””ÖŠa †P*!4•ŅLµG73»‚±ō¦Ž™}/†e:ļG@3DīōæHż_3DīsNż_iŁSü18’S%BļéæŽWąJ”TKӔ£Ž®[B FO7{Ńi xn'›ī|ž/®eįŃK™·čhāšėČ/…¾Œ{=ļ|>ń×&™Ž³ż–,é“a`Č )hē"L‰ccd«k’šųó®iBž¬Õ484Ońs¦wóåųO®y»y”¾g‡óņ sØ[§°ċmƒ  øōģ³øxł™„Ć!Ÿ1›‘GP ėõ’’|UČæ([·Bµ?Ż÷k׿ĢÅ’š?#ÕD—ÆB -œńžop’wŽĒž ļŗōŅC&’)‡CH)ó’²½2Aä_¼VäæŠ č:¢9†ŠEahO”ķ5_Wņ A]UņoU„h(TÕ ¢Ē²ŗĻā,łWyg€„ó©4®qf×"’Õ*×bĘÕHz-ņ_wæ~łU Ō"’%7ŅXČÕ9ÕZ"•D@6yæĪģö+)tŪ°,l#ƒee°-WĄ²˜ŽM&caŗn`6š£”i:JWH%‘ŠlDx0u–ˆIS8@wkˆ·Ģ¶98œagŠ]½qvĢ0œr°]ĶA,K"•D‚P@§%b0kZ”é“&1}RˆI&#–ĘŽ„ä¹ āVķg™. 5¬3¹Į`v‹Akc€© ¼ę^3€¢–ŖGH§…«UeOšī+ßĶwæ+ßžŽwųłķwT,7åégžfœ+YóÜj~’«ßØåe°‚ZŪģ¤Ü¾)÷]ڶ@JEŠ•ühÕā…«wµŸÕNļæé­ĻŻvį¢ķ{A)a„œÜ¼ŪC©ĢķW­śõ _»hłSŪZŽqą9o¹ŠŽć]Ė/Ō¼VF‰6€# Z VöÓ *ås0S –ew455žłŗėž¾7¬¤7 ļæņŹēžéK_RRŹYŸśŌ?¶}ū¦[zsyėÖ­»(÷Yd×iٲeoŖˆG’ €Æ7¼ź’ÕPk]j’_„ į’¼ČÉHÓ “ÖČŲtļŗ¾šu׉}"k×—]’ż{x’µpŚ nøæsOƒ+Ž:Ö^Ŗć-‹iżĶ#“„4ZńĀļv¢Ō’6wĶO˜t±“ž£”čØ4( Ņę(;i’Ž2¼»ÅŅņ…HSņĮIs¬5ؼ¦UŁ™Ō8’Cƒ¼śæG›@*%t@)]XR MC8i4„šR"ķ(Ż–Ž6Š5ż8„ia€–eÓi^ŚĶžū^ąÅūžfÓK똷ų(fĶ[€Ąõį`ŪOĀ›—pܤŗ^ł¤MÓ`Ž4X»ŃżžŹ@x7„]»ŚWŽČŠņ Č©9žž–ć9ķ„cYūņfV¬~žī܄” ½KƞźĄ$ ÷ęĢ©ƒ¤a ōż:j§BZ’9³§±üņ“8õ„c Ce„»0”Śö’ŽJUż!Z+Ī/é7?ļl݃½żÜńū?rü„Ÿ¦eŹ|Ÿ«óĘ”­{1ǾõS|’gßē¬SO”½mRń¼Ę ‘,ōŚØGPQ2g’Ÿ.“‘7łĻ߃øĖÖfhйń:GGŻ0j%ƒ8dņļŸyT}ēj”`MÓ*^c]˜„É8IpBī¼ł3PČóœŅėV Չō”‘’Ŗ«ö:’’j×·“ąkIžĖ‹ŌOžsŠz÷ ¹$†³1Ž“5pÕż-,+™1±Ģ ¶t}Ų6¦é`;†T()‘Žƒ&4”&R¢ =/\24A,¬ ›Lm 3j”dŚ!c+’–$żgK…”k A8Ø4!CĒFcs_†wu»Õ“ IDATd°ĘxĢģ(čI8ō$^<˜&bÄYŲ`aG˜hČĄŠ Ļœ²Ł€ū © …« W.kŒqĒO~FWWWQz*•āŁ5«Yłä V®ZÉŚu/`gĶyŽvÉŪH„Sć*6§žrOms_|_8õķ-޾O)W’‘#õR(B ă„„HŪzE9]׏Ōü RžY%Jõ£DBš”ibĄ4ƒ¤ōć†Ozš 7߼Ŷķy÷ŽūĄ²oßtĖ’īܹS›;wīūGFFž@±ćŪßžö+ćŅ#€7źuųhķWD]ŲQ„?ū’jmeķ’ĖšzŚ’Ū6"b2·žŽ\\vk°v=œp4D=ZW±Fųõwą÷Įąˆ«%pé¹nŽŁ'Į1ž°m]šÅkĒŚ»‹¹Ż„m›¦tŠX2Ži'Ќ¦ś‚@WS’ļyqö)‰ŽÖ*K?v|#¦“ŃOéi8a¤7:lLßÕ¾ ļĪĘęäpFŗ&Eź’ä¾ś©’×åü/›Æ²åõ# •°[“–ҐBs,”;ŽŅG[[O*½”a„R4Ķ…To’õĻ?ĖÖM/3gįb¦tĻ@0&3I"åŚÆé„Ķņ}^, Ż°m·»YH¤Ür…HŗŚ]M€:Č?¹||ņÉ7S(Up ”süQ‹XvŌbRé ›·mēå-[Łŗgū6õ04Xs< 1„³YS¦²čō9,ž7—–X¬”»×Jų‘Ļ,ŠņK×£d‚Ž}vŃ|}Öš‡æų±ŽY,<õŻes;°ųĢ÷³mĶŻ|ūĒ·só?~Īg½źƒ¬*Īõ4!Š…†#%Rö|*K&KIdUŅ|8oŠ®»v`M ˆįQ‰“›`­y”Ćo~EŹU•ٵ¬u5 ­āÄ;B#i™t#(Q0Č [³µŠóšé÷Pv$5źŽ›ü”ßÉ-Ә=e«^~ ā=_7łÆ5ŽC\«ŠäæVW„k5Ų vŗ($ šÄn10Fl¤cćdÕ’mĒĘrl¶ėжlœ€cŪHĆĮ‘6ŽrCJt„”hšM!%hŗK¢][vE@˜aƒ¦@äŅɬ€®¹æ]ƒxžŚ•dKß=,WA†ēöex~OšÅK¦DiŠ˜˜‚ņgKŃ¢‰Ā󭂉@Ŗ†ąŲ„ĒbŁĻ<ū +ž\ĮŹUO²ś¹Õd2™l7‚E Ņ‹±īÅuģßækŸMžFp²A8h‘HåŽēŻ+Q Óp_'Ģ<ŲKlģiŽžŻÆOüˆ}AūČę|FÖž?’ÕÉoįj¢¶qS1¢Ce¬ŚŚįpxS:Y’L&fU* WŪ¶=oļŽ½ļvw_”L&/PJå¤3v[[Ū§.½ōҲ—¦(ў8qDp8a‚¾˜0ū’¼žö’éZĄ`zķå8ēT÷Ą_ÅžĄŽIš±÷—×Y\rHŲŅ uÉxz‡YS1„¤ĮJM¤¦,“€S,p®žĻ}Ū§LŁ2å³Ņ2O߈*@‰†ōpč½»WO}G¤)łĖĪe=’št¤ĒĄ«žŌT’‹ó?)5Ķ’ēJ!„Ņ„-•¦@‹76O¶CŽöeĘbō•Āl…TĻ(/>÷ Ū6odÖü…œqŽ[iˆ5a[RA&ćīõšKŹĆY›|`Vģƒ!Ė5HSIąPŗB†WwQā°­„얐’±„ųPh¬„ŪÓG8dé¢,]¼°ˆp'“)Ņ–EŠ  ‡šVܗ§«ŹB‰ā1ĶK”ēSc¬Ž¹×o Ų¶sO­Yƅ’߈CpøōZBh:Ē_z=žčcl{ĻU̚>}\ÄkLu–Õ Ż-ė«.ų“’’¬¢ū @č:“4£ĆĆO䝶’’2b:~ņ/ˆŒ…n„°ķŚ×# U1ķWå-g€(2(#’Õī³Z÷`µÓ’ZäæābÕÓo•DĻ%Ņ„ĘūĻżs§.Onx ŗ`”֏®īµņ!š5źV%’c½FJ¢÷īĒ™\ōŗD.nÄY9ˆeY膍cYXVÓŹ`ŁAlĖĘ6-,Ė"pp¤ƒcK=P*”P(ܐ Bhłcu/ivņįšŃ‘õHŸ}‰ŠlŁ÷§yfW K¾6\Ki‚õ=ōsźō0s:ˆ4tW ^tņļ©…ū¬ņ_šdŗhŪ–‡ć8¼ųŅ‹¬xr%+W­ä™ÕϐHā{Ģ›;ÓN9ÓN9•SO>•ÖVW;£Ææ+Žż.ŽūĮ÷±āį'Ę« ōöi–³£č$[ %4%””J†&ß2żĄ–ǶLåŸļ>łĀ[’śŃ»†+.HŪ¶ö§ētß³nś Ļķn;˲µhWsāÅ/æ}ķŠZ?DĒÉM•æ|`øžI}ó,’Ā ¬ĄŻŸy‘!#ĢlŲæ å‚Ł³gżļsĻ­}ēčhā¬o~ó¶I7^ūɃ„ķĘb±ÕńxüŖt:żvoŗ¦‰­“'OłŲž={wS6‹kĪįpĀĄa„ĆŁ`=č«`^„€~x-ģ’-`ØŻŠĒī¶ģ`<æęĪ€—·Ą3/Ąß\9ÖV ĶhHB¶MÄNaJ‰…®†Ujį9—±’Ł£®LD>bĻ„K D41¹fĒ£]gNZŲsKK·µ’PÕ’sŠ=r”’rĪ’ ݻΒ”­„¦ aYJSJˆ®©'SņFŻ“ed̚ ‘©® y`˜—ž{–w\õ”*ß\+ń Ā.Ė=‘ˆ…”5KęĄŖµn¹d ¢ģ/.p£1N¤JÉn1É."Ü5LDäæšŖ}$& {5…¶|ĘPIcĮ;†jcõŽ”¬Jžs„5*_ļX~sϟéœu,³o?SœJūōÅÜńŪßń„Ļ~†Ś,ØN''9Ōė+@Ó śæB”pÅAå„k<äߓ˜kĀ‡C'’E¦ĄE?ØāŗĀŌm-®iĄŠ*ž@+uXF‹f^ņ”Ź<¼)J4ü!Ŗž Ņ…A€0'rp%²3”Ķėɱ2|I©7æō*WśR­Ŗß}P#É·mæ{Ī<śęN]Āž¾ķ<³éŸėē;(T[ŸÖ½¾ķ ߏeIUŚÕz÷įtĪ(*#4"ŸźĒq²ź’Ž™óüoe°ģ4¦eāl,+ƒ‘ Øi8HĒvĶP”ęŚēåo$O˜=ršB^¤,ÉĆÆ&Ų186›ļqA€Ņ ŻžbKošSfÅčh bźŽõ-ž W{*:Ny8ĄO\÷Ixš†G ަMÓŻžżĒæŻĀ…ē_HgG§o{m­m\óįkųĢ?~†ĒW<Īyēœ7®išLš€”®M£:qćę_ƙ·qÅö)žö­wŠN÷fl#8 N±וWĄ#gĪ;ų‡ļ^¾śŽh0{xÆå𓄦éŹėŚq”Õ© P jŖ¦Yī#%üćĪ›·ģÕLƚsĖ-ß»ł£xßGeK“ «pžāĢ›7kõ¾}ūB ƒÅb±{ī¾ū§wMŸ~l”÷7’›3“#xżqS;øzģ’_€=•Ū©ä0ÆŽ÷DŁ’'h¶…¦iŌP¾*Ǿƒš“ߥƇļ’>ża8©ī8ƒ†BBĄ± fҘŽ¦{ÆSįÄßĖš3#”Š®Ēߒ‰~†×’ü{ cįĮ “æ»]ćI†£4ÆÄ1²ļQ’הč…RŹćüÆݱ¼śæRĀ’…¶”TB)]HKišžŃL3k<¾“©‘—¶ųŽ]AĆ ˆNWüū?œ¼ó"žó ×s’æaēÖ-¾ä'}½šĀfX» Œģ00:qŠyhY'€zžE]²‰­BØk’’ü-åÆj_tŚNžć„ījŚžäæŠÆš|žĢ¢¾JóK×Ć3Æįxœ'Ÿ]ĶĀ3ÆęĶ€…g\ĶCO<Įh¼žčšå‹ ^m]hHE^PDoŠČ‹(łī¦Õ"’Å÷TQb‰3ł/‰7«ņ< &µ uuBC4«ÜWĪŅ&„ügĖ„ź³ĆŠu‚fõĒXDČė]{Ķr~¼īŠ« jv-»’q7\£øo]Ÿė“6¶óĪÓ>ˆT’_>ül9Veäā.źvł}wH;4Ÿŗu7—N"F‹ÓL {véødޱ,,Ū±3Y!€÷ą8¶kąŲŲŅqėH÷ •t…źB!KNšsžBü0š‘üqĆČėCž=0M}IĮŸÖöņź8»ŲYj™3Ž*HgŠē622L$ęŠĖÆą›’łMžYń4ļxū;…B\żŽ«+’’rš{öī㬠0DĆōZMSź>šæ·<óĄƒRjʞĮ†}‰PwÄ“v >łw§lśÆ§>sßµ?æśÉ»"nXéȒ©ö*äU;¶q„į• Œ“œsĻ=óz!„'ĻųĄG’q7®ĀšļüēĘ„Kŗš“Ÿ¼fn__ßüd2łįüń¤“Žw¦L™rŲ«łWĆ €7!ŖŁ’OvŌŁĒLüķ’½ہż>u_OūpĆŪŖrarM,]æ½ulu^Ht†t0»XxWKż?Óߊø÷…ߐޱōõj”hŚßņ/vŚün÷Q½ź]ś]G•)uę}Ō”žÆ”ė±JSŗpl„)…Š„Ņ2MI„ M™|¬Ņ“"±Qś`郿U‡o6ø’2Ć ^ް†õk׊ŠcĘÜłĢ˜=Ł Ń1yjQ½ŒEщœķø€śŌuW 0iŽ5xøtB]…ģŗÅ „;ŸļKø=ⁱī*ˆśČIæžY” %ØŅ ]a+lšņ{Ìw ŠĘ"-ī¼óēĻ]xį;ß7o֜=ßžŽW¶$(²nŒf͚į¬]»āY•Č |ząP].sŲ戹M‚/Ö.LœĄjŲ=Ę>F†ų8’ż° „×"JJ’ŗFM#©”øž_᫟‡– ˆöõĢZųÓ’Įæn|õG®žœTYā_ē]JDf$Ś»nį·¤£=¾Ž' }“/ś©]/:Z×ŅįōˆAMØq©’ėz^ż_I„PJØõ[9BŁJ „p,”K©“ŃIm'•¶7\įō߁˜ūϊƒ“€tb˜ /¬fżó«ˆ6Ęčš>“ī³˜6k“ŚĖ߉hį‰ū‘Šģ ¬m;454T$»ło9F3&ĀĖĻg{ö«%ä¾ ”®4_ņOéXŠf]§ €g,>cØEžsķ®zn-ŻG‹¦Mię­'LbZ{ˆƒƒ¶ķO²bżĄkjꕃné^²œĒŸzę5Ōė@lB¹j¾9Oھ¤Ł“6.ņŸ«[R°Œü{Ł=žŪb¢Čæw,fVkD #Éņ½š!ݱZU‡=t؆°©…ŠéŲG  ×d#osXä čP4ĘqKüŪóę½Väæ4’ä…ēp̬“č>Ą½Ļž²zW5ęTłŖ‘’Z]ÕŁÆ6ŲćJ² ]˜Ęi1°G- ĒĘÉ:“, Dz°ĶŒ«`;y-Ć1q”ƒ£4ĒAź"k ‰œ3ĄŹfi[ń—͉7Œüē DbQīZŪĆŪ…]QBZé˜+ü0²H¦‹£ ”’€3O?“’÷Oøń_>Ļ}ķ[D"…³i˲xģ‰ĒųŻæēž?߃RŠw^v9'¾åÄqĻKCõIŁS— )5Ķ ÉēHKģŠīß8}Śó;[gll˜y`84s8˜ņšµ~xvs<^چ“}Õ8d„žµŃL³Ü7@ć’Ŗ1R“Ü’/V… ŹD&m¾X¼ųM§ pDpøą rXż’„9¬ĆžænÄ!Z‡ĄHÉwĖaÄ4jF$cĮŖēŻæŽX{ކ]eLĶuˆ[ōĆ­žO׎mźūÖ,łš“ß@ņŸ…B$bŪ÷’=2õØÄ3²Ń°żÕ’ŻēØVIż|N’]õ’Üįt”&”.%…-ŃŠŌn…C³½m(Ė&¾iĒ&ąž 4 …D™- š ±wŪ+l^æ€HC]Óf2¹kķ“§ŠŅ6 p£Eh€¦@‡j‡å®‚ķŲY[É\lõC=m§xo\ƒP—‘’BÆÅł„cńvä%rÅIÅć®Až©1VļŹÉqæŅqŲ°łN|×{ ¢!åĒ“ņŅŽQā)‡·Ģ±rĆ`M›łiķ!võTˆ4Lž{ĻŻż÷¤mŒ§SVŗ~µ¬z5€āżŁxČY üÉéÉō!’’Ö?vņļM0 “ö6°lFÅī©ś!’¤$  Ņõ‚ĮŖł%”†²'’ĀÕŠ ’ąłÆŠ—’—jeĒHžė„·|C8ʧ’-J)~ńš·Ie’„Å=_j’jŁ>“Æ{=j‘’jėQkq¼æ!)Ńś÷#;ŗ‹Š8‹O a;YUĖĘ13d¬ ¦tĶ+«Ąvl ŪČ:”yg€9Ÿ ‚āÓ’¼©HŁ”`(5Ęų~Æ4!hji䮵0ōNęOm$ {œ QɂpĻŲ- ŖÉįĪ;ē<Ī]~.÷žå^{ü1ęĻ›O,c÷žŻlß¾Ėv7§MMM|⣟ąc×|ōē32 ¤«ė£¤”B+‘‘†ö—õ3¦<µ­sʦžęY{‡"3“Į©JoiĪ[ø’ēÓbń”ƒ:B9Ž%t]wW§$ŗS)t]WvīÅaW/ `‰„0=öū^dȈ@ö$2 Aķ“@ ±±±¢ćĮ7;޼Q'ŹžKe3ū’R€^¹h‘@łĻ¤Õģ’­¬I€a"Gģ‰é.-{øć•ŻH4¶¦cėŗæµV©ś’®§}̱ń‹…'ˆ÷¶üCß«Éī\(·j¦PBCł©’ēą§žŸĻS*k’ŸU’—šČ8YēBiNFéJ Ń?uʉ„[±ŃWv ė•šs€¢D-“cĢŽĪÜÓų”‘Q†Gčßæ‹­›6ąHI“”‘Ī®n:&wŃÖŽI0¶³Rš¬§cĮ£dwćJmK¦VłĒ›ļY?už"Ā]JØ©@žė>m/ī·hÜ> ŽJÕÖGž=ĖčłĻ» ßŗk7©TrĢĪ’Ī?®ž‹[ļŻ™ßv6xļņ)4EM^Ś1½O÷ōœf=³O¾}:מp‰ō”mt'Ļ9D"ĪÖ;˜;kVŻõ\5ŻśśVŌ/p¤Dåüʕ’fŠÆEEņ_ŹmüžÆł/ŗO)žR42BVEƒĮ4`R+ZS#jxFäwE÷aQk%ó*+@@Hźßš†©ėXU®uX‹’p†²fø¦*Ūq–ü—Éź –‹×Ø[z*7äW¹J¢ĻZ¾ū¬‹4³rż’ńņ®ēˆEZ8qĮŁ<¼ö®‚CŲCŌf(żR÷zų]’*äæī1Ało×  T 4!ŸDŚ6¶ea›vÖ$Ą¶ml;ƒmp®?Ó å8®3@é  G„šŗUe‚Ėgv§8?<Ȇ®ˆFųßu½4FL¦µ†|—¶R8ĄdFTŽł !ųļŪnē[ßż/~ł«_²ęł5ł¼ŽöN>éd.æģrĪ9kłx=’—Į¤qšd>Aę¼€憻N>ć® ³Ž™sü6œ”é-ń¦·Ę·.ķxµ!h§ļ~”ūōG6w^łõGēķśģ9›^ȕÕuM)iÜ}ć8‚¼†]LŸ¬@Ÿķ›Ÿ6€ß31 (UyÅIˆ(£ŌjŒ-ą0~ÓMuŌyćqDpć¦:Čł”:+voGōdÉöĄÄ(0ЇؗBkˆ¹æ¦ŃaDīó” “*V߯•ģ’ e˜Č”;:[(SƄįQøū† φ£øé£ xģ)ŲµŚZą’s ±]_Ž÷?ź:h[ŗĪ>„ŠŽöŻšĒūĮ4įŹK”£­¾q¼²GƒŒn ± ©eŻKĖ Ńö­›u’æÆŽ¹¾^PhŃžŻķŸµø©i²1¤k…Ćü±Ŗ’ėä )K ”t!m© ahRĻÄĖÜ6Ö­ž_“ł/IĢ~ ėߒ†”ÓÖŅD[ÖvD)E<™b`h„Į^Ų±•d*M(”uR;­ķ““MrOIl°-PŽQĄ…æ~0Ā‹Ņ²-ģKŌü{Ę-|ęTDøsė ܵČłi{ į.bX%}•Q:|Č?>cɗöNŗt\åZ»öģ%n ŅTæ±_ČŌ8’ø6~łč¾<łoo šĻWĶfóī~¦‡ –µ1gJ„[~»-_ļm'µóųK‡LžZ¦FŲ±kטöXN’Ē-@J„ę½ Ō±xożŲ٧šW§„ęhXńćŗQß°ĒHžkeūdÖ½|>ä@$ćhńadŌD)¤ćt‡{,¤t\_ŁČ¶m¹¬PĄqÜ4ÓĐŗć 5‰Ņ] ¦”-gPRŠŽødŻžŖ:ÜobŃ Ū’¬ÜŲĒEK;h‰˜e‹])`:­ŠOø|`š&Ÿ½īz>{ŻõōōöH$hnj¦©iģR} !•ŗŠ‹öļš&ŽŹ«+vµÄū;;§µÄ·-žÜæmł‚}[Oģ:Šg!ĒŹŗp45!?zꖍgć¼čĻžš}ĶgĪŽü żŌ ½˜ŲŪŲĀ@ĻHįĘ$…Ÿ@%ŹßŅҒﯪ €/~Qń„/khÆ'ŽŽ  ;<°Ūa gb ±o'ŚŽōŃA4c-™p va˜ØpŅ ¢›ĮŖ+ŠJ‘†bĄk劋Rū’¦Vœ]}¬ßEŻAü>że8åxxu'üźnxų׊Ō_ż>ģŽ3ŗąīį‘Uš½›”o®¾Ī;š›ąĮ•@_?|ęf8å8xh¬|~õŻśĘ±ri4RF€„ #“ź;n=“>G óÉS»8łŌӉ64²jÅćlݲ€öŽNc1 ĆääÓĪ`ļžŻ<ņĄż8ž“¢SN?“ł‹³oĻ~ą~lĖ" ³pÉQ¼²i#\|)įp˜Ē~=»vśŽO©ąœž›Ń»&ńjź’ŖD(PYż_8®€RJŲĶ–Ž6ŚŅ9KF‹· kp„ō¾ŽjK˜ķ¬čeß²#z©±‰§ˆ4DĀ4DĀL›Ņ@:“ah$Īąš({¶ldĆŚ8f @¬©…Xs3 ±ft]ĒĪ:”ŽŪ•©e’e ŗ®¹!•¤Ä²ģJÉ1±©Ļ@U’i»g¹ņcńnŸ>Źķ’‹Ók ¼Ņ2rXÓ ø=ūŠŌ>±`łŅVi‡§7åÓŽsövõ¤øõŽ]H„80˜į¦÷Ķ”1¬3’t˜ßeĪ”?üĖī1õUBŠŌ>{Ęę:ó ¤’(¼’Ź#äæč7bšˆŽ6Č4!²¦%#ńé»hų€ 0¢©"Š…N€™B8€™µüĻłpČMAUWŃk’j•k1ć²{¦V»~÷€‹P Ā{–€_?ö}ā©‘|ŽńsO`ė¾—ż+—tQI;łÆ:§ZĖSużÉZß¾b ē5ąģģĶ;“- ;żģqčFp5lĒĮ” %]g€ŗęzÓĻ™G™ x|[¢Ŗ:żéS›X¹å³;8nfŒ –[ÅźĀøtFdMźC5G€M˜-¦hŠI ”ü6Ÿ<óÅõŸ8sŻKŽŅ”¦ W4čą«–Ś“‡¶÷E'=“¹£ż¢…³žĄ|Ė®9€ē{”Źœ¬#@汚LŒętŠ“h&&“5Zš+e–(¼YpDš&€×`µÖ~uŌŪū{·  ļ„-œę¬,›­1ož`šÖH31"J‘‘Š”ķ0²Ųž“yeß^žzčq^lАŚ9»±§µ§Ł,<Éą8ģ’M !’ō «Ī9)ź4½žÄįĀ3!mĮéļ„ē_r ż—®+„H]ó"üĶgݰ©[²z’ž¹ņżåĄ­’ “ŪįœÓ\AĮhjĢEJxl £†ĪØ Ń!Ž uU ` “ IDATÉž’ą‹‹Ž£Ķ—¹tOŸĮ·oū)ė׭Ŷm®ŗśCÜpķĒyiŻZ} ļżĄ‡q¤ĆĘõė¹ōWpܲ·šŸ’ö%>š‘rŃ%—±jÅcœsžEsģq|ķßæLSs3_ų×[ŲµsŪ^ŻĀ¬ŁsøģŠ+¹śŹwNłŪ4§“±·ķyÖ0äŽPXؚ^ž–yõ’¬gY%eź’B‰Œt4e+”iB([RJm¤}RYčæŃŪJ“ĘĻõ­&šC0 £-@G›+—p™7ģŁĒĪW_AÓ " „ĀĀįJĄØE^( ćš뺁”2–'-Åäşpł“½ł÷'F„$§˜x{S¼}ŌPq¬…N É%ćöé£łĮH|”`“•za‚ —Mā®Uq²¶Ų³:Ć;§‘/ܱ™ŻÉšY•ŽŒķ~ŪIķ<łņ }#Ś*maxttLu*żVż`eź?•³ÓŌ¢ąīęł/KD ˜ŠŽ±Ōą0"™.*S™8» UźS»2j9!£Ņnū w‡Ÿõ ąŽ«±ōrńā<Ÿ+^±nm²ėwš®Ó?LKC;k¶<ĮsÆ®Ģ§GC,č:šŒfĆĪ5o(ł//Rt£śwU«ķ䌹Ačžļ:®ÉBĶn@>Ś“uņēqhgXl3Sš HĆĮ‘šrŠ•D*‰PMihłqøfŪ%½‰7Öé_-蚠1åї{čn 2„9ˆ®iŌō ²~^—€Ģõ# µOKÉįĮĀ #‘”’R Ć0eŽzē£dχ¤“š{*’ōŽŽ–ŪVĢ9}þ¦³u”2sŪJ^F9€Ž«Ų™µŃWE™`ŗ²ź ’р”Ę«;RłĶŁ =ćlō0ĆĄ’įēpĒÄ3ŃcÆŠŅēŹN«Lć V7Ź ̊9 «–Ng¤”Ē^ŻĶ]ŽĻŹęiħķ&Ż:»±ŁŌ”ÕĄń Ōžß‹L”@&ķŸīGĒ µ¾¾ƒż¼ÜŁŹ’jóÉįŲÅīß  S;a`Ųżīõ«ÕÖź>ÄlęĢtýŻq'|ąŠā¶&·»’feĶé†j V¾€ģb$ÜČ` ČH$ˆed…)~į’ŅCįp&~O„öŽyåU¬ń¾š¹ėų§/ŽĢļ~//­[ Ą”©]|ąÆ/§æÆ—§Ÿ|‚/ÜüüäßŲ2\ž®wsĆuŸ`憗˜;’õĆ’ę[’ł"Ń(÷Üł;śæūG"üęī’eђ£Y»ęYßq”G÷7^j¾#2‡¤æ šØ’SPł/S’Ēuž§²ź’č–£©Ęh™ÄŃĶ;*öU`џŠ‰¦01µC{‹ėŗFksŒÖęĀ K"•f`h„įŃ8½ūśH¦3Ca ÓD× l™č:–¶m6¦uźŗOÓ)%’%+Rį®uŚN±z7©eU|śØ6ļ|Źņ=ė‘J„1‚õŲŗ8}q (X±a ŸvŚāf6ģewo\;»‘­ū“¤-ɌŽ0KfD¹ń§Å&)ŗ&ņB„ń@D‰'µ z`%ėY8gv&C $·Āoņ_Ō[)-#cc'’Āó_Ńo*D›ÜJ§QƒĆLÕ$’@) M`×qßL3Æ=T±Œ!¤Źšdœ)OH@Aé"Œ 5źŽ›ü£ßł]Gsś’‹H¤Głõc?(Ź[:ėd4Mgż¶§HŪ…ū^Į;Nł ¦ąĪ'‚ķŲu’’q łÆÕÕD\#ŪFķGĘW=~õ3O””bŚō˜¦I&“a㆗غå„tvN·[żĢ*’‰½=ii­~zź8§$÷öżŸŻH,””Ę¢ž/„¦YR MéB:*»æVš-єTŚČŌĪ…čzŃ­”Žß‹•“äTB5ņ_‚ŖŽÖ8 ‰„‚tuŗŃ,Ūfpx”ĮaWS žČnŽ„@A:cgæÖIžKČnH”nQ“pOÄi»Ø2Ö¢Ķo5ļ ¼ł„ėQc¬¹.¤’ ź7\|yWœŽįŻXžM̌Ī0k·T‰ĆA³ŽnįOOÜÓ’5Æ ³Ą½ž3;Ć|ōān&·yeo‚Ÿ>°‡=}cߋ䮶eጔ|½JJlĒqϐ„@hĀēŽ+`,俤ℓ’Ā}żś‘ļŽäF!j¹&#Ģ>y!_ZŠÅū\Ė7žż3OõĶgpī’ݳ°BaT%AŒĻžæZ±~ü÷žu4×Ē)ąpųŠõpÜQš™k\’BaĆrÉ9pĢBøīĖpĆ-šƒ’xū‡į·0dō£ōF ±µ >¤Ddāį·Wk³µµĮžB½½Äb1t½\Źk[ńŃbMĶ„Ćac1ī{ģ©¢2•HC&Ę0Ŗ_8M3ĀżŃSśķƒas°Č!`©śæwžJ ĶsśÆ„–t4i)Ms„¶Š¤TŚhkŪŅŅ>Gk…ž«EžK~™A­zH­‰‚i“·6ÓŽźZ¢)„M$apx”Ńde/!儻˜ģV&ÜĀó”Œp{™GMB]‡ßDђ—“~_ņ/JȽĻX‹ˆXŁX‹‰G8Āé«l']Šżé<‘÷Ī#,ÜĮ}F'£I‡’½óŽ“«Ŗū’ūÜ{§nĶfwÓ{o AéˆQŠ(ųS|‘GŠ`”G,ˆ`A°į£(‚( ˆR$H黣l²½ļNŸ{ļłżqgfļō™Mų<|^ÆdgN?ēŽ¹÷|¾ē[^ŚŚĻųKgVpėļ_ćā«Mć™·zX³}€3–Žį?Ļ›ĀæŽUō0"ʼuE—ē±O‡Ä:Õ/‘h„‚PJüZČų߃%’vŽųæü§”u¹”Į į "ĆįœóŠJ0˜viZ^€ŖhØŗ݌YZR$}@Ü:WŻÜł$’…ŪĪv-G°rł%Œ«™ÄöżxmĒó)µÜN/s'‰nÄŲŅli³•¹Ėłg‰µÓR²mß:KQ:ē„2æ½Yǜū}”’ThYłP†z¦TloäÉå˜ĪNLĆĄ4bI'€f2€Žn蘦wh94¤jHSbŖ&†i „@Q¬€{z9Ō;Iu•lŽŃʁž0µ•.œJ®Ę"‡Ł·a4eŪömlڲ‰H$Ā՟¹ŗ`Ux'(iä?ŪłūpYł†żcOvhfp|e`ē¤j’Žćū›Īš×¹gŽ„¾AE¦aĘ Uœść×ßłĀ‚/_°t’—¼š,JŖ£j–“~Ü:ŗpk.“R¼)KõuE“ŻĢĢ™3åøqćfuvv~_Jyv–Bϟś²ä½kx_šoŒb"Ā«Pbk™1ÖäwŖƒ O釾 f^pü2?ģ£-d`ņ ¢Äż‡“’/éĮŠąƒŃÖAߛ»xęų\8š¶÷€ÖxųĒą«†=ū,OķvL·_’Š×ŖĶĄĻ%:fĄSAGY9Ż5>eå¹ģ’‡›'L“†:'_›±X ÕFĢ5‡Ć ’•…Č !šxĖBshtwurŁĒĪĖ(Wß0n”3+?Ŗæ§ēU—O x*EĘć9§÷Ąržgķ·MC* *†4…)Q Óįˆ–yē§ō%e~õ’É?€ó¤CQ*ĖĖØ,/cŹŠ„2ĀŠ$Ü)${$;…P'ž"Ō9É¢^z~zæÉĻ…Lr›+¤­üäß&ė° /uŹ¼^b”ƒ3ųūēŗ>wÖ$\…źrESĖłŽŸ›Ń ÉŹecŁŚģ§„Ū:‹øtÅxōDxāõ.¤„U›ūYqÄ4U „ECC”{§]>\‚¹@,N:ķ*„`8œ$’Ö©1d%Ķ’—Čj/EĻCńøĄS”f’ „6M‘`¤ *œŽĀśĒN<覞$’‰£&’…Pā hņŸ#»Ŗ¬†ÓŽųŗ”óŠ‹?ÉøÆN9‡ź`ó޵Db!ĘTŌńÅsncLe=/myšÓü(oļ_ŸŃö“†¹ģķŲ‘u,E“’BČGž Ö-`÷Ÿ­Ša {>›’sĘTʞˆ%Š Ć fÄpÄ¢1K# ” q3ĆÄP%ši M,!„Ĕ°·æp4”JƆaJįĆ"°Ü­2¹ĪC(jŠÜ‘ŪUœ×­a(ŪŚ†™ŁPFę¤3nĘWąœ¤(čŗNcS#›·lfóÖĶlڲ™Ķ[6‰ ųjjjŠŌrM©Ø2ĶG€Łš‘…M{§ł†æqüŒŽN!0AJE¦D‘ŅF-]Ż\:±’§¶Žæź‘ S¦|ęŲ–=2»®,L_Ļćp“p»eÖ×WæāõŽ3!šænĄī’±ŗŗśÄĮĮĮ?“Ū½ŁYĄĄÉ$=&¼ūx_šo„|Gƒ7V”hÆ²Ņ£škE!‹¢ś”‡"PŽ˜Åu>žānėvtwгšhBU˜Th`ķp¹1+}„ōWZ:ƒ3½īҵ*ˬżĶŚ–CĄß=f…H˦?µlż{ś-ŽŖåõžŻżČ{žÄ€ź Ó愵Ŗ–ŽŠ*" gyŁģ’żÕĒj·Æ·‡qć'$æ×Õ7ŠŪŪ“uC?1®śßŽzĆŠńՌ”¼¢’špFŁŃBhŽśpŸ^6:^S-ėĆ>›ś?HTTLŻR’—B*¦‰"%b°~ģ,©*{į¶nŒ`~‰L)'".åŠÄą-ŁHFgo/ ˜Uäi;©Ä!”& ł·§”joū“—pCžÉ7Ö4DŹÉ~Jæ_RēĻ__Ļ`÷Ė ŽÜ5DĻPĖfW1йżMč S[éäŲ¹UÉP€3Ęy˜;±Œ½!¾sÅ,ž~£—C”¹3T2łźiaāų3‹*+„$R‚ż“„²`UXf*Š ,g_vüÆ!’%ņĻ#µłęįq£zÜcö"##¶n–@q[W1Ž…‡ 9&HS L*©~2nŸłRóņŅõĢe+Šn¶õKÅō†¹84'ū{ščlĻØ™šžæ¾ńU&Į5¾§ĆÅĻž¾•Ē|Sšlo‰Ń.„ąĀć®āŌ%ēń܆ĒųĖkæNi±$ņŸqĻŁ*Zž¼ė\€üēi[čĘō„@“3+0w1ā'ż–/=.Š1’f1 =†i81uݲ’7-G€Ŗi"…‚”’ Iø[šĖWŒ§½?Ÿ_é,Xv4X>§ŠOŸ1ŒŚJ'›öóć'³G6Øš:ŲŃ`Å<Ÿ7Õī?—€pTPž}Ė“†a°{Ļn6mŁÄ¦Ķ›Ł“yoo;Iö4McöĢY,^“˜%‹—°dń’œcH‡[­›Œ ėWŽ.¤Š$Ņ0M”(BśŹ"±s[; C‘†(Š"³–7vWx7Ø>`0ä²ģ% @‰ IO%!Ą:ZĘœ>ōļ#,<øä¼yĒŻ‡–z<Ž5­­ž+[ÉtĢ™sźœ4ņæUUÕ ˜Ü ,Ž®~QpbļŽ¼ĒńĶĀE€Ņ#¬y„r—¹T~Ź!S°/ćk™ó…sųį/žĘ·¶od]$Dē¼#ś¦a8Ż©æąŃ:Œeń  :ć&Łz€æŹ.YAa‘hźjįŹ‹ą†ļX’ŪÆ\ •ÆĮą0¼µ®æÜ.Kš•«Į5J~ų՟ōÓė©`™¶źZ+«‰åR’×c(zÄyt”v_õeĪ8ūž~ā/DĀaĪüš¹¬sm2ßétįt¹0tO}ś*6o\OgG;=Ż]  pÉeWņ‹ū~Œ¦NŸAÓžŻ£›`BQaæsnhŠhņł“n ÓDHEŠ\ź’ö“\ꒁ1¾ ēĮ=¹_Žy79~]p©ļ¬@®Ę!æŸp$ŒĒķI“’Iūœå4Ż–zčNŪķżaPł¹Ę’•ąŁfkCZŁĢ&O˜@pøŸHp—wō±—÷v„ŲŪ‘Jš™]ÉpČ`w›uņ¾|N5;öųīŸ÷2orē,ĖüÉåüž_ķŁšĢ‹Šp/”ĄS&N,Ŗ|$*śDJ Š‚P”8ł'“pæÉڈŠ#’ļō<ņŸ½x1Ŋź7_’2Ų›× @×chqU‹šėV8@W\õß0-ibJ3‹@÷!šüļq*|ņŌńüqU{RC`Žä2f/ćÉ×»Šjcgk€›~³‹æĪō_æd³Ę{“ĻģtŒ©ņŠr `Œq>šj’ Ē?'ügčŹÜ'VqōõõńāK/²iĖ&6nŽÄŪŪŽ&hÓŲR…©S¦ŅÓŪĆŠŠ_üü5\÷Ÿ×įńxņ“šŖQ5x{$e„¬Ū‘ķ*õÜĪ'¶L›¼žĄ˜i{:+ē“ zč¦pWyb-ÕÜÅ*BfL8^S·mg#FDøT§Q°Œ’5MKŁĒČN\³¦g5±ˆ`”āĘ%ƒń1ƒ”e†aLVÕXŠÆ‚A ŗŗZ¦ ŚŪŪEccĖ}ÄÉæāåłó矽uėրBė€Ä’.¾Ąū€÷‘Äat˜ kžAń­ć—ƒū(2ŽįĄŲjź?>·’šnoÜĘ[@ŪL”ŖZŒ1īšV%8L)³ņ5Rx0}ć |’/üłČ™œ0o ó2ĘV[ŸKM{ō¾‘Ļ_ž,|žRŠ!ą’øVüéĒÚæ@W/Ōoüł{ö)Öæʽ™ķŪńĢĢß>MÓĶ~o{ĒŌŃQ=† ę°Ā’e«£šihyÕ’žö×?sģq'ņūĒžĀ0 Ś[š»_=ĢÆ3†‡Sšü~¾qću€%užń]wrć7¾Å‡Vž‹‚7^{•;o’z”. Ā4\S#žPyD—=n›ŠTNõ‘®žOBż_ š¦ŖĘ*ĖSÆ«„@ćžģČŹó “W†±ÉįC>õb)­øõ3§NM=mO'Ō6’;šÓöp4ŹśŪ0māęM›žĪŻmŸÓģū ‘m¬dęŪŪK%R¶>Ņ#„Æ8ņ/„`ęŌ)hšFwóF&Ī?‰C‰–®0e.•Ļž9‘_žćµUöĒ#lo °½%Ą“-]„»*źŚ»‡ĆɌiӊ**E£§Dm`(ˆ¢*(ŠŠŖ*#ė.ÄA‘ęŒ_kIä?ógV<%?SĶ?K݌yŃv’7Ŗ¾¼nTo2Fė‚hqZ¦Š8T•˜‘»¼¦8-“SZį’Lėŗ ™ą22C€‘2¶¬_ņ•-‘üBV"=‚Į@ßūóW8ļŲK™R7‹a›ĄSŽĘåp³„ł ®:ó&Śzšłł3ßf(8Ą²Ł'£…­qæB(\¶āZ–ĻYĮöżxąwŽ…8żˆ X:óxt=Ęk;žgķĪaJ£aH–Yē[B‹“ļōæŠŅ ¬—ļP²Ś¦­ĢÉ̦HÜɟe÷ÆFüŌ߈éI¦i‘}Ɣ¦D5 ¤Ŗ"UIųą^·Źńó«yduG2mīÄ2¦ŌOŠü#T“©#Ä`@gL„3§ ²Ģ‰?bŠÖfF½MUȰ‘IūA‡#‚BvęM|ńĖ’Æ.˜6ejņTÉā%,\°ņ²rb±?śÉ=Ü}ļŻĢ›;Ÿž÷‘¢ēj‡¦”MŠu)“‡M DbŠņģ¶É Æģ7uwWõŌÖļō s‚Œ{ĪsŒ7ŅøhÜĄß8{Ósµž`,wD0t33¬µNÉL5 Š2‡Ē$š9ü!¢¢2.°»o~ī¹UĆ0&TWW¾j«Šž‘óēĻæČ0Œ$ręĪūń­[·¦ßąWĄ%@mj+ļŽ¼Ė8œž?³EXó JÅzĪp:øŸw‘ü'ą« ęsēpӝó­ĘķHÜ“Ļ\DhĢDĖh4³Ł’'ąBdĆD"Ćżō\{?xų~ä«(h|wŽƒ_Ʀw𖺐Ÿ¾•~E£Żå„±Ŗ–}5ć鯱žg³’ö»Ė¤TĘdkӎį”!¾ō¹O3eźtb±(­RIqG{·ü×RV^NóŽ&ō؈3žµk^į“]ÉÄISčė픷Dzīźźäc>€-Ōėu×\E“ŲXįŅ1&šWEƒ¦ĆéĶōļjJ™ā‹ŻŒI!RŌ’…Ša¢H1TW;ŻT””kéģAĪņāĪGžs IC…Ąńic[ÜŚŃŬiSÉEvÓ w!ņŸ~ŚžĘÖ­üż•W‰Ę¬ėŗzż:–-ZČGWœ–A¼SČ»­lŖö)é„ö”Ū āhČæ½±lĀ—ŪĶģ3iß½ö ŽnńóåvPUf=ąaƒ©õ!0ć§éZÅ¢cĻ,œ7æ(o)%”F#Ö&æX ūż(Ŗ‚ŖXf"¾äCšÓŠf'ÉéßSŚNmÄ~ϧ„Ź}š‘IžmuÓ&™ŚUŪwÅćĘįń v·åµ=¶Ćépä” įĐQĖ"Å ķų?µ^Ī/ŁśČS° ”Ķ“X€ü'2;ś÷s’3’6fĮ‘3>Ą’é`SÓk<ųüŃ ėõ“`е»ŚÖ²UŃøņōėY:óxÖķy™_ųŗ”sęQē¼å—%›œ9~ĒĢ>‰_>{'ĮHŽHć%’’\Ųē$łPŗ1ķ@ĪØĄŲ3b`ź–źænčq3›S@=†Ćpb:ŅŠZÜ `(\üĪøĢ­ņŸēNfī¤2Śū¢üüļū1LÉ—ĻŸĄõLe  ³©i˜“ÕąŅ·~r/méē]ƒ\yśŽnńsī±uD¢&Ļmčåł½ż(BPīVéν§)÷8Ń I×P„HĢÄė²žł~‹ŗałPņģĘĢ_Ą-7ŽbžE‹©¬Ģn±ėp8øžĖ_į•5ÆpĒwš‘sĻ/Jå? īI@ĘĮæ¢(É©˜ĄÓŪ¦Nøé‰cæ–Čw9Œ”‰¾Ą–©cB{4ō5~xńĘyc‡‡U‘†‘Żī^%·“æ4Fœžk¹BfQ(ÅĒā¾}ū“/KĒyŲ0vģXy÷Żw»æHs»Ż7oŪ¶-—Ć ā0X]ĀŠŽuų>2q[įĒxQH'’MŪŚ&&x~%ģ:0ļ2&ÖŃpŁi|®æ“9­ŪŪ±—ššÜ›±øŻ¼·cü½°ėĘø;.Ö7čįÅP>z=ž>?n»+kŲS;_A§ĖržŁķ’ƒĆ5õyļH)iŽŪ˜AžhokeĻ®)ä?P0ČīŪ“ä¬P_žįį5ā` µ~6(ŠĆk„Ģ*ĆӐJBż?‘Ÿu˜20n0fW’:](¦©(žšš…é}ų÷d™k2QŹfK”CósĶ‹bIG’ŠĮdذL²›÷“=łO,¦]»xüʼnƢT•—3oŚ4T”šĘ–­¼ŗaC¢‡ƒ"ܙ¦¶*ÉĻ©ćĻEž)b,)¦ éc‰§,?r1¶>OьŖųĆF2ÄßSk»©«vróǧ±ņ˜±Œ­f‰4MZßžĒ/+h @$,)\`)Ī%0üżdj IDAT ¢*J\ @Į:/£#ĶÉä<¤9­¬¤Ł–fæēS‹ž{‘ūļFs/5wįĢ iZį…”#ęIk€œOŠ‚(•Ÿd'„Ł‹!’¹ŹjŖĘ¢©ĖRņ܆ĒųÕ³ßK’EQ˜?y)Ć”Z{›¹śĢ›Y:óx^Śņ4æ~ö{č†Ī˜Źz>|Ģ%„c!¾÷Ųqćo>Åk;žgīÄ#ųāŹŪP•ģė^ʘ –O)XĄī?_»i•ĮŽxlH¦V`*2i ėŗ%ˆ’Õ ӈYžĢø€‘f€i $Kp“vü|oķā»ī„Ģ­pö1µĆ/n²ŌµŸßŲĖ {Łq ĄīÖ Qž~³‡]­!X:³’%Ó*ųĮcͼ¶c€Ož:ŽŗźĢg櫓n„ oHV!,Yo †nf¾/r™YEcłÆŒ×ė募憎;>'łOėÄI“µ·ŃŁUœ©C:Z¹CKķhdCn&U4WĪoi]6„ėŸ—-Ūy’o.yé†M7žłŚgÆyęGæžŌ«O\{Źö-3Ē uāŸ‘ü/ŖĢž_< £¼­­€@4÷µ[¹ņ ¢³XL/Ɵ³ķo~ó›WK)'!¶Żwß}æĖ3„VŪēŃ{Ģ>Äx_šoŠR#4mCl{­Śä·ŠĀŲĀ5ŽY3Å˜Ėy]mLŪŪDuĒŃpŚk'ß3g̩ˠr±ńÓč­‰Wæłk~ŽDVBšŃė lÜM›ĖĆīŠjvŒČ¾śI VśˆåRż+džQJÖbxÆ@ 4="+bÓ-bÉO*8ؖÖa6õ°«’K” ©†T¢esÓū¦«’’üŪ7āZŽMÜ”DIźĘZZŪSŌ¬„ ž¶'ZKåÉöŸ_kł‰˜5y2×_~—ŸwŸ<ēĆ!xaķZ¢ŃXń„;/ł·+æP"%ŸŌü”™Š>ČXŪøN;ńD†ū;člqōu8Š9å«īfõÖ~Ź=jŠżh)hß³’`§ŸTœĘB D‡ž„„ ƒ˜¦Ž¢ŖUAkÓ!ģ1²Ó>å%’"5åߕügōvˆČ"MĶwœ˜†B”Zœ8-˜”– .2ć e>6óŻĘ…Ų|>’^ˆüŻo¶|Æ|,ŗ”óŪīęÉ×7BŽL; O5ÆķxOŸžO[ĪSo<ÄĆ«†·ŒžŁ°UŃXæēeš;w2ąw/žˆ7?A™»‚ OŸ"łęThyņĪ·t§ł:¦:ԟZN˜ć=V$Ó° 3CGÅŠu]·LŅĶLӌ dVņœ ÆnėgĶööu…Y³}ń5.Ā1“{­ēچĘa66 s 'L[_˜€Ī›»“D^xģÕNō„yüµ.z‡¢,‘I²—Ļ©bk³æ`Ä!ˆ5ÆtŸė4>z#¾¶ö5^xŃ:p–%vÓįcǧ§é˜ĀtS EQ¤KŃĶß]öÆĒn9mć[˜Ž™<57M‹”Gź_6M˜xĖ“‹żäƒ¼čC?9żŗuĶń8ĘémēŁ}'H~z‡C“ČT- »qćź UU;†‡‡gijĮ#÷ūµ×^[ī÷ū“NĖĖĖo¾āŠ+ V­ŹÕżB¼g_ß7ų7ĮĮFčŲ‡˜ŽĶešĘń‡jL‡BĄy'ņ”·v±½»…”ŻÕ„Ü^Lo¦SĖ$¾£q˜—sÜdĀ”ŻOlä}?BÜ} WV•óŽĒuė‚|’š-“;Żģ.Æd˘ ģ7‰žš:ЁĢc:…i ̈VrDƒtģŚ¾ßžņēŪLɐBQ ]zcŗtč‘|0eq +„E<—śØŖŗŽt8jķub}ƒÄJ :łČæ qx”vĶ©’„rįų‡ęÖVę̎HM”BøSÉD‚hƒ!z¬Ø@'uTņ„qĮō̚2…]ĶͼłöVŽ_zT‰ä?½ßŌȱŲÓóRČY6ӄ¢ŸĘÖ²xĮBv¼ņõ3Š;U-BƒÕ[ū ̃]ÆžcŽ\J]mmĮ²¦®—DčõXŒX±f=@’ąŖ¦”j*а4PDRk<żš—BžÓ‰ō”$’Äó“’¼BŒƒ$’PJšč(Āż¶Cq!L¬m¬ Ép,bdĄ’,'Jˆ„ČWš$’©m[ßŗŪłźƒ—c˜zJA̟t¦4_3…ł“—ņ§Õ÷±jĖS)>³ØE’čĒóžņŚoxś­?fšdŽv¤\Ō¼cĪĢ·Ļ'ļf(_Ūy:C=P•jq(§–ac:†™ˆ‹ ōų©3ÓĄ”*Ŗ”H™°/ 捐u¼®ŅŻÉ##üģ@O„źņŌ÷ŗŪ©pŅ"æ~®5½j¤„Øn¦¹÷Ź™ć`Ż=Żlڼ‰uÖ[Ž7oąĢÓ?Äøq£?lvPށm#)&)æp›$f ńjcCŻ›-ućwuWo,ŸŠpN ;Ē™ęČ&i|up}T±ę4ŒPTwŹ…Žč†pjéa’,g€£… ˆPņ n·kS œą÷Wä*×Ü’żß’RÖØŖś”””g a²ķsŗWw ļ ŽĆ8Tš¶!śŽ ŖĪÅ·~T‡ÕøĻ;žsYE[ė^«jˆĢØ&ātÅßé0šé-ǘ8 æ¢mõ.ž»ävĀ÷üW̜„ļLŖlŲ‰¼ų†šŚhwŗŁUQĶ걣1n:cź-Ēnsäm˜Ķž@ż <甕W‡YżÆē3ņ\n7åå ō÷a”`’[4¤‰”Ā)t™¹‡L ’'„*@&Õ’„.…ŠG¼’×Õf8u īM{qgŻWåŽl„$Ūņ5qų„¹„{¹P8LWO uµCø‹1ŪL9źjjℬü勱«¹™]-ū8zĮBEAQU4Պ 2Č~ŅOK'’öZéæ…¬¤Ł––4Ū¶÷żļFžŌRÅh(–kVabiHkl"n 5`Ž·rʓ-oŻMDįtŽ›Z9…üŪŹ.˜rŠP˜;ń~óÜ÷yk÷źŒ~›:w :³',”Ģ]A 2œl³$ņ_pĢ9‹Fį„Ļ™Ŗ õfņŚi˜/waf2 `ŗ€a꘦> Ż @5єŃMŖ”gY.Ät‰CKżżœ~䜆c¬ßS˜»Å 3łˆL„ŻägDŠ”© $#lŠ’kkoKę !X²x œW\vyqę€JY½nJį°] ŲŚZ_½¶¹¾aWē˜q¼ć:‡=ĀīŻ)g^§Ń×PŚÖPiQÓŲŃYµ,Ń|˜C30…B:É· †p&Öæ„­¦ęŠdŹ»)ǚŗ\Ī‘BaR<Ö××=×ŌŌ|¶a“ēĢ9īŹÖÖ æLæā³gϾ<6ž52mŚ“‘p'Ÿœė2iū¼½ĄTŽ1¼/ų?€Ž}ˆ©*W)‚ĀGBļ2>øˆ9O¼Ģn:ŗŪ؛†īp"“B€ƒ€›ŖPüGÆ:åÕč“f2,Möļidõ_”’æ?Ė%[Įõ0xėüäō[ī£/¦Óęö°§¼Š­uŲ5ncø«Š™5Ž #ö’¦Čcą”“¦L冯ŻĘĢŁVP(Ľߒ«^x–ŹŹ*®’Ś­½ÜrtŖė:’īAzš—¬ųŠŁœįĒł«īE–Ŗši¢ŖTČ’'M„)„PĢĢė!„*Li ÓŠa%\Qž!ŲłČd#’pųLJ%’öń  ©„…†ŗ±YOŗÓ uāo(f_[¾Ŗ ĘՎM!0¦ŻŽS$lø­üé&ņ%KXæ};æ{źo|dÅiüīoOŠŽŻĆė›7ń…‹/fśÄI”Bø‹!’¹ż„MĶ^'‡IDĘX ŽY²„93g²įļ?ā”+Ā{žŗ‹E ²tńā¢ŹūKj?äĻįø,zśŠ4MUQ4 %.P2“3āxŸüēŸGä!PµCk *„” „ RX‚€x žŸĀŁ ‘’\Ō"źfĻY„¼ÕEžÆ…œij½®r¦7Ģ% ńĄ3’Ķöżė³2rp€ MÆp̬“9aĮYücż#9ŪĶģ9ćBēSīü<§’…–¾Ą5±(JxÓcS”®t`ųœ˜ƒŁĶŒX S7,’¦Ż ĄÄ”Ö>@šĒč{Ue-Ż#ĪWk*|xŁX~ņ·–‚²O)Į4%Īø¹SBä•&yCxĘb1½„˜>"ŒÆ¬¬ä„殏;\²c–Q7¶®Ą ‹ƒ*\õB9{1öį2÷§~{Ę·°ŻĶ ź†pÕU„÷;„cͼq}N™Ń½Ęؐß@J—C5Ą mŠūŲŁ?9åŽÆ’}ńN›×žr¾©a-O6¾ÆijÜÓHÜĖ_6SŠõb8’7’üß „‰ŽŒ+rļ÷æńä¹ūģ¦i6“·wŻV_æŲuŅI§üeöģŁC?žŲÜĘĘęKĆįš%‰ł—••}m÷īŻłÖ1ށē€ÅĄĮÅĶ>„x_šnā0†LDhچ8°ē‘×®¾%¼nŌӏę„'^cOg+ÕĶ„*|Å ņEˆ©]Ļ\sMC–Õ”Ov1äņŠŅ²Ųµ?eč”rü7?Ê£ēzm€—Öaž×=ų7ī¦[Óhs—³§ĀĒŽŗqģ?ƒĪŗq„œJ»»@;T5˜×si.\wÓ×čėķįS|…X,ĘŌiÓéźźąÓŸūµcėøśŅÓ×ŪĖų‰“’õeåmu€4tŪ+2=ü_"M1S EŖĀ4¤0 ©a˜(©šÓkz\Sģm›‘(‘¶øĆŒMŚ·|›¢,yŚax„,łAgO/Ɓ•åedītBOYõÖ:^Żø‘Ė—[F·}© %…ą”y½œŗüXŽŽ³‡Żūöńƒƒiš84ŸuVÉä?9A‘e¬9Éź:„бö’yż%ŲĘš„Ļ~š/Üt3ūß~‘I N὆}›Ÿ„mĻü÷½÷U>ä÷cé¤@F‰EŠ—1ź†ĮPĄOUu•e * Ĉéūä¤nڤ³Ī#ć1•eń†JŃP„@UŒöĀŖ©”‹%īŁ<©/”Õ „’’ģ¤4KbV"»nj»¶b¶¶=Ī2tļåįÕ?coēάL$½°ńqŽ™u2Ė朚]uĢ£„<ä?OóXĪSSĖ07„ų0f¦a9ŌGBZ¤ßDf<@…CŅQĢ ņ AÖšHIsj¹Ū­šhLošš×5É“+NφĘ!¶4~śC–:ŖĒ!P…ČjóŸŠ HG4 wFr‡ƒ]p!•IĀ?mźŌœ~ īz!Ė8P˜X;µż…1åŃžyuż­œŚŽŗµĆēūĘߏ½łœE-’øžŌ ė…"L E&čeĢ0…²¾*Yļk}‹ļüƒ^÷4_4Üņœ†DČEuŻn—IĀ­ķŹ3O -Y2ļĖ7¾ż?RJgWWĻ­>śč­Łźz<žļłwģųi i%Õą»Ž÷ļ"gĄD€Ž}ˆ9aĪP]ļĻ“…pŌ<¦>¶Š©C½ģč¦7ä'R¦`ć°€ č6ӗЧĪaŲįÄpļ&¼©•ĮÓ®cēéK9ö’ĻŅ¤Ś”ž­ÓįÆaÜżÕ›čSUŗ\nøĖhŖ¬”ql­“¦ŃW;‰āB&É{tSE8+żƒĮ.# P‹ń•˜ÄŒYsøżęė“^ż7o\Ÿ’÷³ϰæe»wķ%#ŃU'†¢¤ź:d„’3%”žÆKCH] °Ō’„”bp\ż,™Ŗ<@°¹ĶR ĢŲō§}ĖwesäiŹ”}k ņÖ&cĻŽf–.ZX4įžPoģlŽĖŠåĖSOoü¤X·Ģ“1–źŠrŽœ7—Žz Ó4)óz¹ź‚ ™ŌŠ@:”.4–4÷}©łk`[ ;ńŹ0°åēC²%ŪXķc˜;s&ēł!žūómŌN^„§ā½£PģāĒ¾ĶĒĻ;ŁÓ§Ug8īÓ”X†J3]ģźīBĶ”Y§’Iņ/ųæLžÓ3ł·E-®߇¦ašķ  'ŗ³’Å’!-¾/”™sś`‹BaRš>ūCÓoz]{õŽįN¾óč—2йe8TžŠˆVĶžŽFüį!Ŗ'Rī®Ä.į7Tˆ¤Ū ©Žd„«`»’¢ūĶ>ˆDŖ:܋Ž05%[N)Ē\ßo™Äķż Ū?]7Ч’ń2¦aiئ45Ŗ\ÅÜLł1ŅŃ É)‹kčбzk?żžSź<,ŸSE8fŅŌnōÆ8¢†½!ĪX:†żŻa¶ļ$ÓēN*ć¹õ½|ģ„zŪB¬oĢ~Q4Uą+w¢iŁÆA>G€łw}÷®¬é±XŒę}Ķttv¢Ŗ “&Nb’ķ°f”p8U_MĢģėP!‘šĖKžC‘NM1@Źķ]¾j€P,õģĶ4cEKzöEe_oŁ|‰]SJ ŅgAÓ¤”i1 †.4›ĮépČh4aŁŻĖ/?µźøćιtėÖm?0 3# ·¢(ūjjjnéīŽüWsŲwļGxį¶"žz„Dػũpq1ek'Āō%Öē²*˜~Td‰*?n¤ }¦-±Ś˜<²ģC'̶ʉūš±ófĻž„ĻēūNeeł|>ßĶófĻ>ż…^8¢»»ūq€)­YQ‚>÷¹Ļ©^Æw‡Q§įPį} €’åģ@sTST<Ø) ,rŽ“ Tõ!Ų¹6ÆJ-wŌ™Vśī‘ż>eUpō™°é_ŠsƒŻŠŃ4RĘ×8š6ĀŽMłĒ²pӛ_c|p€źĪVzė'„Ą“”¹ jHUEŽ›Bø¼£ŖžpO ż=“ūhśél½ēQ ±Ó'P?o*¾‰c)/sćŌ4ŌHįc6·ŪÕBø©• RŠŹ€§Œ§›Nw9Utśč­©cøŖ†HY†Ćiü6ób£+ečRw \3J™ó~ūk®½įf†‡łÓļ›āHēįß?Č÷ī¹’śź×¹÷ūß!Z‚šb!M=ØŖP"š|lĘuž3Ć’©B‰iHEH„!©)½Ģ“*Üߑ™ćn)fS«ˆCóŒO'7„’Œl›aƔģjlbÉüyÉæ@ąr:9嘣łēš5üéŁrĮŠÓØõU³vĖŽ|ūm–-ZœB؃įæź)ö““pŌü”y¼¬^÷&>ń_¾ürj*«ā]‹ŌAøK·’O+‘ŃXVņo[Ė ék’īr:¹żś’āó7ŻĢšG¾ĮńßQ€}^Hi²ęį[ö4ńÓ{īĘį(Ī)åPi‘‚f‰!„ŗzŗŠ\4‡†Ŗi(Ŗ’ ’—ó~ާ"’v5ņœ¤9åOaҜh8…ą¤vVņļ² CśØџP(IJc–±ģčchljbÕźU\zåe<ü»?rÜŽ+i 8”ņ†°Éę‘Ė@Q„L“*œQżŒ9ūzŪŌO\š‹}·”2“«ÖéÅTĻpŌQŁåwόéJ9€Ļm¼ó¼õ?¶÷aQ”*YŽ[9åė™öµc`ł;p:²øu ‚-Ų©§žŻöÖŖē‡1Ÿ«Ø(3@Jś¤¤¦&ū‹pŌU7­»»{[|H3bü¼kx_šo€|!WåÉkچX¬2_Q[jŸC= ƒ/Ķp Üžrė¤ß.ض“£čĶaį",=baŲśrįžgOfŒń õ”¾ą0ΐ…Š‘S÷ƒŠCĶ*‘¬9šI1w5Fu%Ń”>üĆŻt ōŃĄ SÓ1„ļĄ:Ŗ rSā‘&N¬¾ ”s{ ŖüŖĘŪM泌Ź*ś+ŖŖ®'ąŖ"Vå#橨`*ˆ\ŽOķö’v€Š‚D`  nBśĪĪ·&éųēÓOR;¶ŽĖ>ó9fĻ™Ē÷ļø•PČŚdlŪ²™Üq_¾ékLž2Ūo¹žīŅ^Š… łM”ȰĆ-†œn%j*H%ńņ“9ż‹«ū£fĀ—ƒ‚0cR‘Rˆ@ey©i5ö¶£}Ak.éī,‰é¹łw€BŒœö%ÉH·ÆmŽæŸ9Ó§ćńøÉJžÓrĀQKٳ?ū÷ó?Oż-%{įĢ™·äˆä8:{{yš‰Ēé@QĪ>įN>f9Ršōō÷±­©‘76oęĢćOČsŚžNźøģćĖAžSČ}z~Ji&vī 2>ä4Hō1yĀx¾{ĖWłņ7oću‡›åżŚaאÉiš¼žŲķ“n[ÅϾ{'2k²"   “Į_¢¹ĄŠš0įX”Ŗr/šŖ¢Ŗj2Ąˆ@ėæt²÷oOžÓĒ’e©ć>ōę „Ź¤”"ī_U8-įpRż_Œģ« hˆ,Ÿr%•4ō¬¤“ȶ ‘’¼ĻžŌ/RJ~łģ|ś“ÆpäŒć˜?y)ƒ>źŖ'3b<śźĘ,2>=óDMY†nč|å#wįrø D†łÅ³’Ķžö­ÉāæžN;ā^Śś·Œ{8÷˜³N#oĮ\ķŖCż˜Õ©Žēää2äž^Ė«æi$Ć’%4Œøs@ĖLĄˆū0,3i J•ƤeøÄł]D0cŠaę“jjĖ™ż„ČĖCu¤I^ķX€ÕƼĢ5_ŗ)%Ÿøčb>óéĻ2wöf/šĆŅ#–rĖ·°mĒvVžæ’Ü}ר ŽŻ”BUņ3č^šŚæ|e±į§¶NY¹æælÉžž²%‰¼2—Ž9³vxķņ)}ėo:mū[Ŗ3A`SØRH RtŃ5U•Ż.[”=ĖĶaŁļgD‹Ń÷@zĄļĀƒK–•y³ śūsāĉ)…N>łäÖG}4!8ئą×…õĪā}Ą{ņ̇Ž}ˆ2KG[æÆ ĘLˆ?·ā·łŲI`ĬævTׁiĄ@n8e!Ԍ‡7’ŃPö2vL¬ĆmŌD#Tūpė1D4‚Čē 0Ÿ@/Źā0T ‰³rŃźt³–Š@”Įįn:‡üxüCxCA¼Fw,†K˜8 ÷_¦ŠŠ•ØĖKČķ%ä-'T^IŲ]E“܍ī®FÄ“g IDATĒ'žĘČŲs©łēƒi"ܦęéÜóO𫊣$ļ|=ųKöģŚĮu_ż:ßžĮ½Üų„Ļ£ė֓uÕ Ļ²æ„™ÆŽz?üŁ/ųāg/gh°4BŃĄ®ØbXóØC’ō2–n’/U`ŽŲ’›1©`!Q„nJ%0¶vNzŪ”–v }óRäfµØ«pp”Q“Œ$ČNŒß ÓdGc#G.\˜R7õóŁU…ąŠsĻćŁ×^卭o‰F©õł8aé‘,_“E€`{S#ųū߉D£ø].>¹ņĆĢ›>!@•O{.¶mgŽōéüś/qљgSQī”ę¶vrc'ļłŒŒÕNź3Č"ßĪŖFš³­Of…Č¢±…óęņŻÆŻĢĶß¹“hp€ć>ńTGŚnā0B†xå7ŃŻø–»oæł³g]w°·4_”į`°$ēūģGÓ4ĶŅPÕų)˜żzü›‘’ŌVG=Ōqó…Rƒe 8@gÄžß>Ś\”!ć¹”šY Ó¬ł# ‘·ŗČ󵊜äĖĪšŽ¹’™osŅās8qĮŁTxŖhėŪĒ_ÖüŠĘömyĘ,2>–»+łŲÆ`ćŽWŁ²ļ Ž˜žAŽœv3ę§š:·óĄ?æqšO–iQ0Šæ/#ML©Ą\Ża30 ݈”–&€™ h`HCš˜ ‡€¦U“ nŠ" „C>poŪ‡Ęœqå”»Ō¼·XNG€:ø Ø|ŽūÓ{1 ƒ~z?ē¬<'™>{Ölvģܑü>ī=Fµ?„g؍śÜJA…S£­­jH—†”¹0ŻcLŃX’ŠZ,‚‹¢a”˜™ś{r*HEÅT+0NŒ2†Vfi1(VžLńčŸķĮ_Œ@”š y0]U ‡ū†6«ī1,užk×¼ĀM×^Ć÷üsĪ»šć<öšCÉ¼ĘŻ»øž‹Ÿć?}€«¾šÜõo•Ś|VHÓ$ö{ŖEƳLń£ CÖöRÅl˜Rf(ŚK‰PP1¤)L„" ”DŹ+2쒃-龄37[YQpcj8˜(‘YI† ¦e¤ļŃ ‘’öī?ĄŒ©SØŖØČNøSˆ²Ą”©¬<ń$Ī>įDb1—ĖI‚K /½łϼś RJj}>®üČGØ«©9mąv:™?s?ūćčīļēȖfŽšæ m°¹ķ’…żo–±¦¬]łOæ}\#ė“Öő»°äØÅ‹¹÷ŽosĆ·īą™{?Į —ŽEUŻ47:ył®CĆø’ūßcV‘N’Ąņü_’ķ?(ńō µ£Ķ””9Ø UU¬“ĮØH3¤Žć‡”4S$łi#å<8\ó°ĄĆ!p‚ļ’"®—ÜNĖL^]Ŗ&BvRš=1oÓéć(qŕϸ²˜˜¼øł ^ÜüD1ĆŹ™yᯢÜSÅė;Ÿē÷«ī`]ćjęO:Šmū-[ć³Žś››_§µwo~ņ_hETĢYD€ˆEįŅmó=\ćB–)ČX<̟aĘÉ~āÄ?†®ŗXM)1L‰jšŌyŹ’@lōļŲB\ó³ƒwl,%4¢ŗLcž„rŹÜ#[Įl£ĻõūŒÅ vļŁĶ¬™³RČ?Ą¼9syń„mc’tuu¢:1=†C+Ī<ĢU8ėT”*VB éO EU¤™ŠX5`nĆąšÜ†!P¤p8 CŽäméŖ®xewmC_ĄįżŚŹIb5c‹®ŖjnĀNb{ĆįP„̲YŽʼn'kŻQįŹg`뇛o¾µöŁgŸ=¢³³a4™ÓõɦiN2MsY, ąjąó%Ö9¬x_šnį0†L`°”jLmż„:æoÜŃÆė-@ķ¤‘ōź:8°3{;ó?./¬Ī7„€śŖŪśØˆā ”Ę¢ł5F XØŅ©bŖŅįÄō–£ŒŸŽĒdź³Ń0¦‚°;ōSUdā„?W8æ\0 D6Į¦K(kØČŠ*jŪ?¤ō+F”—¼·q/>÷OŽXztŠ æææüé\|é„6›įĮ^SØrČįŃ:Ü5ź #w6ó/ńŃf’O<üŸ(¦‰"M©˜U÷xRŲ—4 "­v•”l›šT¤oȳŁų6OV’a'Øi©ßSIF>ņ¤dóö휐šģŸ‡PŪĒ„e„ü†”<öĻgyk›å`ö”)\zιxܞŒžp Č}?Lw?eķŻŻümÕ*Žœ7—I ć(–p竽˜żŗe ēWˆü§®}–|FĘ`'isgĢąĮ{~Čmwżˆ§ļ¾ˆE§}Ž'_Ž¢–¾Ł*Cņö‹æaėæ~Į‘ rū ’MuUUŃõ„”%ŸžGĆaĀ%š  ‡ØöUįt9qŲķ’GIš3N‘‹!ͤĶBš“÷†=)KŻCDžß1 †ĆąP%~ņ/læGrļĻ ±L‘ēkÖįg[ĒBżfĖĻS ćžČÕvś•-¦ß<‰¶¼…“į˜Y'3źē/Æż*%?AžL:š•G]ĀēžĮmŗ#ŸCŅ¢×*ū5ŹYŻ–”ų0Ü©Į‡ä/fc(P›Éæ¦i™čŗ‘4¦¦‰ŒŪžĶ­6Y׿ž÷„ƾŽ!"1™u>¦Özqj¶ßSŹż–?ŗA1~|>_ÖßėÜ9słć#Óßߏ?ąē®ż7×½ÅŃKłCՔjŸNowj²Iś< ” PeSweŁkūźźvvU×ķ믨ļņ{źƒŽ†”ˆ£!f(e•īX‹]P,4Š:ĖD6—Ė™\h!ģ'p7ß|Gķļżõ­ž@ą£ļĢÆSŃ"„¬&koĶńŃ żpā}Ą»„ưi¢§ …J²ųė/½m–d³fģŪjyž/«‚īąļ·“š6ZäŽSa•OG¹f »×YNKŪŪx£NFFŽĆ =O·‘ólнŖf]ĀÄ_ ŚÜüĀaėĆ,Ńü b‚„U ¼DŻĮ¦H’ąn§Ē—”_TŸN'Ć9<~;ņä• iš„‡zÚGōø+Õo…”NL‘Ēž_1„ˆ„’CꊐŅžj_Ō””H¤³©gŁåøE] 4"0 €T‚kēžHFrƘJ2ģŅɢٮž^:ŗŗWWŸFT²œ¶'RmżKąO=Ķ–Ż»8įČ„|ųŌS¬ˆvR#Ą rߟž@WŸE6”Ļæ¶€Uk_ēŹ /dį¬ŁŒ™4Āå“=e-FЧŒ?umŅL’ė“6ļ“1äv–h_kRĘUSķćG·ßŹćĻ<ĆżæūMož•+®fśŅ•(źĮæbM#Fćŗ§ŲöĀčįA¾|õUœöŁ#¶ōEbøæ½DWÓC% šö5ćph8\Īø@EˆømzŚ/¦DҜś=iNikäKźŠe’ńæ€ü§5]Šń`i]Öi¢—øI@2NKÜ!`–•Ģ9ĄōµĢW”TņŸ¾Vłźę]7ayåōei7_Å\mg\\Ü/Ÿšyłē#žŒŠn‡—‹O¼€ĒÖü²dņŸž>ÉW0ē“Ņ2”įŒŚŌ³&9ыÜķĒ4ćŖż†‰'ś†®£ŪLĢøÆÓ01¤*-!ĄtŸ`G?ŽW²Ā4%›{SīąŲY>|eE¤˜ė0¦fĒ}ąƒüę¤e “'MN¦Ļ™=€O;‰žŽ¦O›Ī=wŻ;Ŗy% QY›)ˆ×4…3ĪĻ’ÅYW6õT.Žźj†ł©S5‡«Ü±Öˆ”zƒQeģŹmŹŪ©A’v{éu+ t84^Ē,.’øēž_ü  ŸeOBtØŖŚ¢(J‹ŖŖūŖŚāp¹öUVV6Ÿ~śéĶ÷ߐŖŖ~Ė4ĶÆbxŗČįæ+x_šĀm„æ·ó"DȊ’ĘS G-g€‰@ c'ƒŽøĄ4+Ż·źKTŒć/€NŲŗŗōžNœ˜8„‰Ć,`("9ˆŗ«@~>"’¦1ø>ŸĄō:ŁŅ]čec韣÷7ͬœ”` š¦ń™’÷EÖ½ń:ƒƒĢ[°ˆSN?“;¾ńU.½ņ*w嶺³‰“¦pŃ'/ćÉĒFT9Ü'œ¼"„Ķ-›Ö3P„—ń`—‰b ŗ¼ŚžŹ1Z§ęV¢ õ’\ö’–]H© ©›ŠaHEk|‘Ā­¶o™›-2só’Ӊ4  ģduäūH«9IFrų¹IF.ņŸĄĘ··1vL-MKĪ'u<62,RŪX»yK’üŸ}ā‰œŗly¼‰‘ŗB€?ā¾GžDGO/.‡ƒŸ½’ųēŠ78ĄCO=ɾ¶vžųŌS\÷éĻP뫦0łO_;ū*ŒŌµ×!v‰uIż›’o'näß¶Ę„BQų謕œrüńüĻ#ņÄ_æÅęž˜iGĒō„+©Ŗ/^M?Ž=4­š½ėž$ā#gŸĶæØ¤S’ŒX¬dG~‘PˆH؇-6˜¦ĮöV7§GĀž_Q2‰j‰¤95'iNikäKź/õ/łOŸK1(E`Źų * ĄIęŚg .ļ×ü(ń훾V£n:žyĶŹ[iķŪǟV’œp“ȽŒ{/woē-æ _y-›ö¾Ęƽk²;wŁeųŹjŁøw ›×$‹4TOā„łgó䛿% ³ō¹S³Ž97Ō@?±“Óm1±SvĘĆZ§žŗi Ēķ’Ķ¤źæž hH#.,00U‰Ć!8ŖVēp.ż^Ą¶ę>¢QłÓjX4±ÆĖŚĶe]?!ņJbEh|ęŠĻšū?>Ä 7ߥ’ēÉßś¼¹sq:”——sģņc9ķŌœĪłø\ē›FS+j•„C¾ø!@Ģ4…¦Ø¶Ø`T¹ō®ź’–ŗ²`ĒųźPǜŗįöcgö“Ķņ Š0 TĪ{ąÄ+’ønŹWĘū"7éøŻŪP•Ō ēŲ’jR•:†%ļEG„"Šp8r,€¢(ķ“'OøåĀO·źū×ŻŽ‡ĻŅ)ŪŪM9nÜøų÷mö1ķ‹’zš#9¼x_šo†•P6FHYŒ;ĢÜčmµų)Ŗ%čmÓ“ÓCYµ €Ą`j]E ƌ‡ś©Š¶§“¾cQ„M¦©ÖĪv¤“}ć ü$ŪČBÜŒœōēs˜ĖdĄ“”+*²¼æ»#²#ŌÓ¾¹¬jb^'•Œ›0‘koü“µąĒwŻÉŚ5Æ ( õ ć8ķĢ•TWūčķķ᩿ž™?’ń÷ ŠÓÕÅĒ.¹4„ĶĪŽö‚=!2ŲvxÕO•Ö\įÓ4·H>śŁģ’MC* 9‰® C*ŃņŠié}„[Bė"7~%n.­:ÅWJ%Ūļ,ł‚”Ūwļbń¼łł ·xÄ’Ū'’“r’’`8Āżü‰ö®.œW}ģ"fNžźĒŌņé\ČżÓ.Āźē©žĻ¢…ŽĪØŹń¼“ęrOż¾FĀ0?Ņ“ „WęBzfÄLph‘Ż4£ĪõxTėÆ Д֮¹”’Ś"YhrØ’ŲGZɅžž›÷vPWįfŃŌ ŖK]IĻR&g™ŅL ŗZffķź’šŠņФņÕUÕŲ¹’°Ęc we>łž¹õ•G4ÅaVØ)ĶEJE˜1RÆŖRž7„郭Ķ%,Ū]1óĪÓwm…h(@Õ3(ÅčHü? ±š[‰p:5 6A¶’ƒxĖŗ}Ėņ˜ēŒĆĪ™»U_ŗ'Ł€YėEī "MS&Ų’ė:¦nķžĒ"Ą¦i )MLi¢ É©#T^Śc0ņčü1‚nHŽ[ßH‰G匩LYŒ;Õö?śŚõ:£#@] iٟß+/»"ļ~ƒA4MCĖ&Uȁ«R×M”i֎æ¢iäxæ¤DöKJ9iTWó9“›žtāčīŻ¦Pā&ö:‰ęö!ŻŽ ‘4M•‘#iH N”" <ĻżżżcB”PÜ®„ H\H×ŌŌŲv ²²rmssó5XšG„Ć-|ĢńT–wń;y¼Ź#&͇Ó~Ģ®æj“  ķuģėÆŚÆ¤*³w’H6¾ó/…™gš×Ńv/a†¹¢l!'@¾Ši@N Q•Iq!½5ō¶±»sߞ×4ē“kT‡ėČ{%"śŚ„®ū<^eQ¹cgQ„£ĆéQ¬+¤Ŗ ‚LŠ„ˆŪūGĆ’ÅŽM](RJį/-©45%É×Eø„3œpѳ]\W.#ł3…v"Q8Ø1#ÉH%<ŃsIÄ4ee—Ā£H$’HÉźu8ūŒhš–Nb“Ź œY0g.Ūöķeß”~÷ųcÜpń%Œ^ƒ ‡łĆS‹©ojBSU>wõµL3–$B.`ń+’ ³§·ĖÅg®¼UQŅ · ”NźKužäyI'ui;±qb%’3¤Ł’§÷!S_“ˆlōϤńć˜4~<7\}5`ĶW{g'>Ÿ]×Ń4‚‚ŖŹĖq:‡( ĢC×éioTSJzY ½³ƒĪž.JŹJp¹œ8ŠĆa©—\®T=(ņŸ:·"å +i&;łOķ@ĘēŅn)Ļ„ķ8RŸK»q$Ÿ¶G.ņƒk–ÆæXĖ €$)Éæ<­ĶŒé'³Ž÷p¾¼i÷HęŒÓGŸĄ¦«r¶Œųiź¬ēģ®ą„1'óŲ»÷±£a}R»‰øxī +­eGĆVģxÓ¶Ī‹ę\Ou‰•gå΁<å…Õ\6ĻŅĀ;Ō±m‡ÖPą.į”Iērė9ßęå5ņŚŗÅ6ķŚŻūY†e›}ą¤āļF$§×bīöcDżÄ“Œ§€fL ĶØ?‹ü#­Č .MeŃh…×ö˜Øå±„”°lcŗ®3R9gN­ ¢hĄö_¦FÄH:Čī0¢Ė ~ėÓ±vżZ^ó Z[[?nŸŗéfŠ‹Šćé-­-\qķ•|ī3·ņ…[æ0˜!Ę”ā“4ņ0Mµ/oE ˆ CNŪŚyŚų¶W$RźRIŚūRUE¢g¦GzŁīĀÖ`<^?fŌ‹6o»Ńēó_žūß?ņƒ/ßō©žmФH ©©©CńģźņQÅqĄĒw”zJŹ1Aö Ż ōuB(`©ń›F²ū!š[’ģ4b8°ƜcgĮžĶŁóĘŠŪģńp¹ z¢'};ķŁą‚$;‹˜æ‘ÅĖ’‘ސEEjD źhö‡Wuµģ^^=u”¢9>ņ/§Æ³U†ū»·ŅPPįŲVVć<č)UżB‰;žĶl’;ŽŚ’+t](¾²ņ1©ķ½’g˜é¼.@ņ óš%ņŸŗ˜KįQ¤’’XŁ^_?›¶mgĪĢi$6Ón»Óįą ×\ĒÓÆæĪʝ;XĪ’ĀŸ~ŠØŖŹ-W]ĶŌhXŗÄŻöė×±n› ū†‹/„¢¬4aV[ŗi¢* ŠPRęƆpĒ~Łō5‰håmBīsĢGfņŸ˜,ŅČ-€Ėé¤vųpŽ6$ŠŁŚŠi nåÖ×с1Č2ŪwķÄérār»pŗœhNgōzFw’SI3ƒ'’‰Ē©ĻBVŅLnņŸ|%LćMgņƒäūaPPĀĘwžeR?eź|AŚ 4µŸĖ¬Ł2Ō„pŚ=’©"ŖhLy÷­Čłń8Ų¾‡{žł*ēŸx-Īł$·_ś#Vģx‹g—’ø?-Dłxü½ū6KŚŠ±œ7ūĀzˆĒß’]Ņõżä‚Ååš°dÓ <»ņĻńóī^Ā7Æųo.šs+w¾I·?ѤĒ~ā2Ė6{ņ3 ōŪųįEFśÅÉ}ŌĪß4Ōž-SSŹx>i˜HÕDŖ–A`U”ŹĀтwČAšøIH$+¶4ÓŽdöčb.›3Œŗ š*lÆŻ`aē·Ų?¹ē'Üw’ļ’Ī-~z1/?’E…Ö¢æŗŖšŖŹJ~ń«{łōMŸ’?E8+„¢(‰‹ŲRTQŅķńc™v“¾“qōųMåć:ü.\‡Ń7¶¢ļ]ēģZ:®¢'͉ĘP©¦iYCĘēN§Ó&Ÿ½–ŪśåK–˜ųPYYńŹńćėr_‘iӎ¦_÷£†ć€2ģ17 é)Dv4±¹¶*æ²Ŗ†Ķ®sg£  ³ ζ“Bü) tåŠ3X÷:œ÷Y˜{¼ł°åG ¶b(V>§FČåĘp:œĪO¶‰8<÷)‡‡L{¹"ØfI¾P{Cż„]-;JʆMš„hĪLčj'ŠŻT]J³§LŻRZėÜQRėčJ“ż‡ĮŁ’+ ĀžŗŌ¶‚MŃĢ 3•J“ķ3„.ėÓ+1sܑi;Ń &#Ɉ,$#…š¤ņ̌öÕŃÓūźPS]MĶšaI$֎ģĘĘąt8¹éŅK¹¤oeÅEłę)ö:„¢(Ürł•Ģœ016šxĖ­ķ<óĘėœ2k6s¦MOj#Ö·Ē^zŸßĻ§Æ¼ŠBoarzĀŸ–ÄłĶhBFSŚHJĻ2éd4¹wĻQGg'”AŖžGB!ś{zrgLA_?M­m—ārEšŠzœüsņƒ·Č×i *¢oēXż2ńZ Rg~ 1Ć”m³"Gzf¤ĪWŽys$N1³€ÖžFZŗ2ž8bc†Męķ Ļc˜:Ƭy‚u{—qó¢;9uʹL=—ÅĖ`żŽ’šzuķbŽŻüHŗcAEØÜ“š”ņŅź‡éčXl͟xÓFĶ„­·É²żOĄĮö=Ā>¼®B \Å ūk4ä7UģŽÕƈPéšØ$*ŻHՊų# Ć2ˆŖū†aZڦ‘ !`J¤iŁ’›Q?֞¹¤®ŌĮé†déAĆZxc˜R²lc#-~fŽ*āŖyƙV[„Ū1°RŲÓŃü#äīǶķŪųŻæ§øØ˜o|õLž4™·ßy›?üéÜ’ĒųÖ×¾iõEn¾ńfīśĘWYµśCĪ8}Į`†ƒŖÉŅ2IW[Ę»$ŗ‚3ŃÅŹĆĖžóÕ¹×ļė(>)ÕĄ¶–ŽÜYsĆēOŻõ‹Æž½scęFœ &[dD„tR&ŒµUŹźd” IDAT6€X€ !įĘi{9w~»°Š0AJzroō\|ńÅŽU«Všł|ƀįŃk€„¹{žŃąøą£€<6«Ā‚bäko³iśhśU•“ЉĀręēļKOėh€šńPæ5ł|ū!+ü_w‹ z;`ē‡0å˜8v¬Ģžė>ĀüB”ßė%PźÉ¬€t¤"Ä «Cž‹ž3CZēb”’ņĮ‘Š0PT@ 0Jjé”>6·ļöy;·kåĆ'MSīcXWJśŪ›d°·#¤9E›«XŁR:̹©|”«ÉįQĀXZ’Iź^1ū€Lö’R˜¦PtkTj“”ęŽŒßŖT¢mŸ)}‹'dž0|ää? ɐR²jżzĪ]øĀ/iÄ5‹Ŗ}iQŗ®ó—gŸaO}=ŖPøé²Ė9aņäŲĄćmź†ĪĆĻ=G8aXE%×^paįŽåūpĖ&Vn°Td·ģŽĶ)'ĢXĄŪīDb(’’&õ;eG€X٤ĒFŸDņģˆg*aØ[Ųwņ˜#ä÷ӓG$ŽDH «µuHöć·mÅérąr»p¹]8ŽØ÷éį2“ūē2ė8ČGK"®śk#ɇMö,‡9›Źš?[ݹČÖwśĮŒŃsģ»’'Ž;Ļžū 4Ձi¼½ńyš»ńßĻ›3¦_Ģ'š/œ÷ž]žŽŚų\RUväąœ®dtÕ“ķāĶŸ/ņ”rõ©ŸGJÉćļßGXOVn®-ÆĆė*$öÓŅ{ŠnpńSƒ™gėTŚM €čÅH dµ³5‚iŹøĶæ‘ąŠ0Ģ$?FŌ€™ąÓD* Ŗ"WįĀ©FxgS9vKPēż ‚!NSĢÕó†1«®ÆSÅŚūOŸ(Ūy"ū†µ.Čå[hĻŽ=H)łś]_ć ·~€… Ī`ßž½¼ņŚ+qĄü“,§½ĖW.Ŗ§Z\2ŗlCźS( UE‘k+K¾üäĀļłĆjy‘[oœUŪ±tx”æżé cæ|ķ‰ūsłō†m/l©›ś÷#nypŁÄo^vBƗ¦ ڰŽĢpīp M“©Z!Ņ7Ó\n—$ŏH~ūO<ń¼ūńæ¾0lē¾CÕŻŻŻĆßšpX¦ėśpÓ4‡›¦Y#„,jlŗ{ĒĒq¬07įwIR—{ż¬-+ba¦2~ĮŚż÷ĆÖeéé1•ż¶ƒÉē{Ū!䚐 [?€QSaśéph{zŌ€Dl܍OQčÕ4ŗ]ŽŖ”Z åFŒč‡‚(†Ž0UĖ©m$„ LįV¦”ØH5jŽūm@^ŅÉƉ ‰R”(HgzńxZuuŻūŽö†-‘¢ņ13¼%GÖŲ8S’ ŽęƒRö5§Ņę,R7p®«ė¬÷”Ŗ!„”H”›ŌōI4ĆRtū©+Ā4MEW§t;«Ėč}>  ūzōpøYBY3ƇśØ‘’”_)~0tŽ––A³Ą¾Ž"”\’éčķ룱©‰¢ŅB\.—‡CCQ,ļ’JŠqųĒ•ü§œ<¢ä?õ4łäķ4X€ü!H–Ä’É(©‰…€ŌAŲV•ńä IiņTēh8[²Ķ5n’Ÿ‚E3/ćŚÓ-ėēW<ÄŪŸ§Š]ĢĀ—ņśŗ§Ńļny‰Mõ«øźäϰz÷»yõ©ŗdŸt#ŗ”óŲ{æIrzķi_¤ĄUÄŪ_cWS²&\pāõ,Łü<ŗ”'5Rä)EStłl9]Ö~e"’ŠÆ£“:łdŁĘ0cę€]«’Ēż¤łHd<*€¦F—;¹Ų©šÖn?>©åÅbØ8ŠŅǚķĶŗ4N©ąā‡1eøÆKM7ó"éŻ;ŲHŅƄ žļ5ŅŚóHõsååWqŪ·ŃŃŁAEy‡,Ē]}}½yŽ6š,®Hż2č¦N%¹ļ’õśģKüaµ|Īč¶Wŗqé.†?(”g6ŒżRoŠYø`\kĒĀɝļŗtß#+Ę|ēOĖ&œųßWŪ ×AW–Õš¦Ź|Žit””fĻŪžĻį  ²rĘSįpų)åPƒĄĄÓC({Ģp\šąX‹”C–Tičä„LE…ƒŪ¬üžVŲ³>=Og³EŲķl÷w­¶LR±}…%H„•/Z J2 Z;{Ņ­9étzé.)#čń`:œČ#P×įŠ”Tk/ǜŠĘ¹£A©x¤DŃMBA¾ž>6õ³’õlŚŪC·Óīö —–a*š% Psų*°ÅАˆ˜oEAŅ&Ó %öŠõŽöŻĮ`×ō’źŃÅŖĆyŌ¾œĮŽNś;š iźA‡K4¹‹Õ-„#ė+ƹö—j>” 3U€a*R(‰ēTŒdū )RR}ÕU£$ɖĮ¦öA,ņģŅS—ö™ĖŚ}”†Džć§ó'iėŽ!ŒžŽ>ÖmÜČü9s’źO"]6Zn§“/^÷ ö¬gŚų ńĪ%¶¹}ß>Ž[½€+Ī9—‘Ćk’—@`H“‡žyš`(DeY7]r†išwßįWāĘ”9¼†KĻ:›9SgÄū²iē6žöĀsøN~łŻ’ČŲ×y{īW †B|ķ³_¤¼¬<…ü'NŠ@;ņŸwčĮRJ:ššm÷čė¶±įĶ·n¶v’=nÜ7šÓ¢i(ŖH'Ü)7ķ`Čb¾£AžŸÕŌ&—ü'=O©e9Ž|0€ ÷ŚD Ä3Å»%Sód®?{&»9ÉUQī×yjęüņ\„²ĀJjŹGć ö±§i[r.!øxī \2ļFt#Āߖü*NīÆ=ż‹Ģ›øˆ“'Å£ļŽĒĪʍtöµņē7žw櫊GŃü»å%;ÄĻϬ;™9ćŠćėäłU„õ|bĶLf9ž`ļl~1ž6}ŌI\>ļjŹFŠÕßĘ[›ŸcٶW,²>)§²÷Z ؐĢį^¤ģBšŃ~Ó°"˜2Ķ€”†å@Zį„ibšS5Q¢„D‚a%.™VÄŗz[ŚtÜn× o†Üčī±f{+=żAFWx8cr §T0ŖĀ‹SSČåŠ/Q`—+SI]5ĖŗpęŒ™ĢŸ7Ÿæ>ś7®½śZ ,ß©“§ „äł_ ¼¼œµėÖ°ų©'˜ŅüœćĶEq•årwd =…c œzĒC7½·Ų„ab(x¦įq]mż®ŹXĪ“FwzdÅ:īā¤Jņ0ŠŃŐĶ6pK— ŲæłDņļB4*ŠŅ4ĶBˆ&Ą­ėśĄx¬ ūXGŽ >&ųaÆ®ėYēš:dÕō×WšŅ”ZžCÓŅĶL¶äPPŃưüū“mĖķĻļYg¾£1·ĘĄŅ „€nU„Õć„«Ø„·phį4ģB„ߏzf9µ§OįŹJ/ēzL¶nöP 'ĶĀģģeߞ&V¾°†W>Ü̾ā2Bž"%„č1aĄPśĒ#ąŒØ9Aš†I1”źI4h‘®züĮŽŽ¾¶ż½S½„Ƈ–U;•!†ˆ±CČ׋æ³UFBž°¢Š>§W9ä)Õ¶×:7WŽr6—j>Q Łt:bö’2AÆNJĖŃ“!„ŠM”C*”ĀĀ4õ’p‹}üņt2a—)ņ:{ņ—łÉ8\ņƁ†C2mņ¤š²˜Äśļt82’Ć0yźµWR2eģ8ΜwrŅxbU½ōö[hl@U>wĶ'Ŗą—<Ğśńö„”jnāĒåÄiÓ¹õźOąv»ųp“e>8kźTœNgVņßē÷ŒīnWWV¤r}H!õ¹Č?©éņ– x»ų¦iŅ9€¶Žš››),+ĮćqćrÅŌ’ŠP“…a)ą`Éā=>XŅ|LÉj_N&åĀ8ņ…™ĖɎ ņ¹ś"!£$ę<Š–)f>ĢńrĶ_=ß.=ĖQ<ĆuœQ7€Ķ>Ĕļ{UŃøyŃœ<łlzż]<šź8Šŗ°4ęM\„aźT×pū„?béÖWx~å#„"<ęĆĀ–CkųÉS·%9ō8½|āō`ń÷'ļ“85ןń„<·ņ/#~@pެkøtī§BŠÖŪHK÷!ƛʵ§|‘)#fó·wĶkß§ŌēĄJ ßrš”`Ÿ/FX>I}Üūæõ``fB(Ą˜6@lē?vŪY )AU%n•ÓĘ1¦2̊=ż4ś$EEīĆÖhķ°}]>*Šœœ=½‚3§T0¹¦²Zt{>Ū+3ÆHśŃĮ•…ć*ŠĀ_’ō_¾ó6ž{&§rģg÷Ž=|ļߋēu»ŻÜł•;¹ōāKsŒ:3Tœ„ŗn §Ó‘īö(!ęŸKՃ†&śŻӔrą(péķ=+š@cĒõĖ7' Ŗ —:FX؊ƒ\’š¦ÉLĖcļ1‡Ó! - _?PQQöwæßæÉįp4jš³­ØØčPYYaė9§œqčŽļ|§Ų°a& ٽ[2a‚mZ>üē---ļWÕĄé»}ßAįøąŸć¦!GNĄŲ¼’īś6žWĆĶuŸr!×WŅ­Ø“:\4yJé^KŲ‘Å`¶€Ił"ˆPå†ŃĢ™^Ė—‹Ż,ł;@ŽC€RQĢųŠbĘĻ›Ä õ­ly~‹Ÿłåµōy‹–c8œG&č`"d‚¦aŗK –£YsźvŅģ6Ś=‡¦ł»šG¹‹ŹK=%šĖ[4¤/§ič{»övšF$dU4§hwz•}…ŚÖņQ®ŻÅ5ŽŽĀ2ÕÆ(BBvó…"¦±]ӐŠ”))¤B/šŽL-²ä5Ø\v’6ŠĶ‘õ’JŪā(qßŗs^źFŽŹNžŚĖ¤j/¼µb9møN®æä²YįŽ¶w/o|`Ł]vÖ9ŌÕÖņūĒ’‡=õP…KĪ<‹sN=MÓXµqOæöÖmŻĀ×wż˜™“¦°y×ę͘•0!©äßB{gG¼ĻUeIcOWė“q@˜ŅFRśGLž{ŚŪń÷ ʜ¤¤«„#_×ӉEµÖćˆīü»ÜnNŖSCQŌdņžĻ@ž“{;čq+ņ–n0ČWc@¤˜sH9Šļų^ča’¬/_[RšŌ¹¬eCž1½ĪR’ß°EüœĖįęóē’ÓGŸDcēīå‡töY‘gÜN/7,ü Ļ,’3m=Mܰš6Næ„YcOåÉ„°aßņŒcJzɾ<®˜’J *X»w)›$;SĄEsn¤Ŗø†­‡Öšįī%€ą”IērŁIŸF7tžüąVī~¤Äķšņ©3æŹŒŃół— īę¾Wž=é›6Pož×‰ģĒō&lģ:0 TdČīčq?FĢ1 i`HKĄŒš ČØķ?QõD™µ”EQšØ c«¼T9iģ ±f/{;#ØN%…nœŽÜö™†)iėŠŅį§±½iT88gF%óĒ—2©¦€Ź".U ”ģꑈ‰rqĘĒ?ĘūĖŽ'‰šĢsĻPVVʘŗ1Ō-ĶØQ£Y;’‰&2göÜnwÖŗrC+K?7Ąü­_Ŗ{¶½»³öŖm%ESjlŠ=įöĘnļŌEæ=’Ķ}ž)a])®(o’ī…[ć65ŖŖ¦M]Č0„KMŽ4‰üŪ9Ģ {ļ’^Æ[JŸśŁ±ćżG =&½RöHS–”YĘmRRU•ńā477ū…æNf~”8.ų'ĒŲ)˜ĆFxżCüü%\§©©cūœxk‘nķN' .MåÕō•–£;]ČphPÜ €ˆŠ@‡eŃF5’»‹=œs¤ś+¢n3—Ģcūo^äk·²„r ½eµĢTA@>żŽ†¾¢ =„„ŻŚE}‡D‡æ•ƒž>szŲß6&ŌŪV-4W±ÓSärz‹ĶåšÓ…¢¦¼&¤D„1ĀA"Į€ ūū¤˜BJ]ZÄæĖįRšÜÅŹī¢*ĒīŠZ­±h˜«Wõ*:V0™$g‡Š9ąlQÅ $~²U Bź–@7„bøI‡„”„Ś’LYÖv ™r’ zōsōæ™üƒ5okÖÆĒėöP]UeKv“Ę™e·]JÉŅ5–ź’¼™'PYZšÜžōłśłŪóĻXćĘsž‚3xļĆŁ¼ÓŚA»ńŅ+8ć¤yń6Ģ=‰‰ucłÕ#¦³§›5[l^?Ų°̘4—sĄŪoā\“utPVRЦiÉä?v RH}ł„Ū’>Rō÷ō I…æÆ»› ĻŽłX.ģŻ·^_Åe%ø=.Ün§-j÷/’ęęcLž“[IØ>„ģaŒćX’S?:€ŲėLÅ5Œ\$=[Ż9&,?ņŸ~Ź”:˜\;‹ˆaŪAK­±ČSŹ—/¾›ŗź‰l©_Ć_޼‡`Ā.ü'ßBYa%{›·ńž–`J“Ÿ<ł®<åL½ˆ/œ’]VķZĀߎłåąĆ5 UÕš…śxzłÓś<ŗj"gϼ‚P$ĄāeæÕ%#øęTĖ?Į3+žČŠ]oÄĒŒųyä_šćalõNØ;µūŅM²³ĶUZ}ɰ¢4„¢»ż– @šQ-C ōhø@õ`ł0cŚQA€õ=cŁĻĒęJ<EĆŌ–ŗh÷EŲ×`GS?ūŗCųĀŅrJŖ T”ŃMtCŠčBM…b·ƒ¹u…LQĔŌ;))pąrØńp¦‰×,q:){&śžo$= ®ĀĀBī¼ķN=åT¦ONIIIīBC„г4Ÿ|Ÿž·cåū»F\žżœtõSŸ[ņ0€Ŗ(²ĢnßÓVTqØ» øÄ:pژžgvłźW †a „b9‰#I@'©ŚIl$±šÜ‰!ķœvŅO'ŖåF ö£‹ć€1žŹņŗ}'Ļoåš:䤣„ß|Šż;šŲ“q|öˆuš£ĻĻ-”S49\ģ/Ŗ¤¹|ž\ź’Ž,iŗŽšõ¢~s>·Œ*ē[Bą9ĀŻŽc¦Üūy~ń¼ü½'x“g$­U#č+«$¬®I@¹B†r¤+ ’"ōR·Ö_RʁŽŗś[”ƒžN9&čcœŒŒ :*B¾ĪBiā•§PUQŌčĒĻŅ4)…0čŖ!UżŠCéqŗD««X«÷VØõ%Z³·Jė*ņ(a܊i§k!)Lņu(u!L)ӔŠīŠ\¦ÓQžX&ŅՋLŲĶĢ‹üēB†²0Lż=łĮ”’e«V²ą”ÓØ®¬ łÓā9@¼¾°¦§ßډž~õšŸih±Āa­Ū²™u[6ćv¹¹ē›’FQAQšP¢­Ó Y]QqDȬønlܾ…ś†ś|żhšĘō “˜5-꫹čĆß×GO[g^6śżōvv©Ķ`(Ć­[p¹ŻxÜnÜn7—Ķį@Q”)ś(ÉZޤ$4›Všˆ’’¤ÖŽł‡Įkä›[ Āé &WæmÓķę%wŁĮ’¬Ū\£ÄSjgąrøŁRæ†P$@EŃ0næģGT—Œ`ٶ×Xüžż ;ęć†OeĮ“‹Š½w_Ü®>ńóÄū÷óį®wøqįķōŗ³“›÷3€)M}ļ7ŗKč8Q€ŖØÜpĘķ”šāźæŅÕo½ó®˜’\š›U»ŽfŁŽ×Ņźń„rļkžļ×µ'•õśn ĆP¤nH™IWSó9“tÆ’Y²ü’å*įQ]Paę~3īgĀ„ Õ=EŌXūp0°ńžöńĄqĄĒ wįśĘMCȏq`9ż¼Į’~30"wÉcG_!ФŁédÆ·}Ut֎ɮžŸ z1ŅEŃēń‹b鞌Į””^±€ĖĒ`śWą×‡śŲŅU5‚€¢ ‡0— }¶t·Ó,&Tķ„5j_W»ŁźPv»Ķź`ƬŃĆ¢ŚĖJiŠbią‘EH„¢ SQ„Ž""ŠŠĻįݚWms*­%J[a„³ÓS®śÜ…jPQ1c&RČ,}ŹĒ ”¦RĆĀ_YV›śÅ ·š¼É¶Ż’,ä@zśł’…ä?FīuĆ`éŹåœuśŹĖŹŚN_؋„‰ķ».J‹Ščīėcņõ̚25ŗvD"^\ņ6›wķDĮ§Æ¼ŠŅ¢b^|ū |Mć]š‘p ,„-ÖāöÓW^C(ęĆM0MӖü“DMŖĖ+’śšÉÖ?ü§Ģæ€ Ū¶rßßžB_²Ś}CKÓ1|>:[[]N‡‡l÷°fżz¤x¼nÜ^7n §Ć‰Ŗ(Ö~އMšķ‰‡Ż³šü'?^YÉb׎4ł?!ĘP”R÷}Ļ—ąüĢž§ŻeKŻ¼dĪf{˜łĻ˜#×}%,§yö}@]õD¾|ńŻŗ‹yśƒY²1Ł1’¦:¹yŃ](Bį„5ŅŌUŸÖÜŽęmü׳w¦ŻcÉs¹Ś#üœ7ū:jĖǰæu˶½@]Õ$fŒš?ŌĻs+’’6ĘņĀj.™s¦4x|Ł}fŠO›œ=čDüŗūӓ«½ى)e‚?Ć˜ŅŠ`čHSb–ÆÓŒ ¢æeB4Ė,@`ē„Oxœ §ݦ¶ĢCD׉˜ń· EµĀ”jŖ@QĄ0¬(7}AĆr<$@ MąŠT@‰¢K1M+.ś;Įł_¶HvŠĮÉ|>KŽ]ĀźµkX»~-{÷ī„£³§ÓÉø±ćøą¼ ųņ’•āāāܕŁCuČā"šĒÕ+¢)ųģé[w*ŠĆ†‚%Š]źRJ§*L=Ór>Q’pįr™ŅŽ ?“U™ćüŸ•ŃküĄš:äĢ™„¢ł©·ųĮ§/ę>‡vT“̇Œ›0ŽYC‹¦±ßķeGI5‡*kč^†‘Mż?¶ūI‰  GÓK)æayœxԐ‚ć’č7łįæüš_×og”ÓV9œ€ÓÓm:Ü€™ÆoEAŖ‡‰C†+ •N9Bķ ö)Mz§Ü Š‚@æ,’aQQ`źŅ­HE3„R†SS"ŖS4Æš{]š_+T|ĪB%PZ©Ķ0B )­ė› QbŸ¹_1€‰ˆ;¤ŠP@„‹ŠŅYįö5č\³zäzĀ‚)•d$œ<¢ä?•å'Ś”ZŅĄYČ †”óŽņXpźiT–•g<ˆ”3Ʉś†K.ēOO/fĖī]üģ÷3cĀ$ü” wn§ÆßR9?kž)̜4…p$Āū~Ą'Ķ£Ŗ¢)A_:{ę‰zö7£„Ą€HūmDżX¦±{SĘ=&߃2ę)8Ć$h*hŠŠ'Ŗ&]BkO„śĪm>ƒ¾IP—˜ŅŚw pŖ‚B‡ Ā«RķU)ņjŗ5<M5£‚ĻLó#²¾£m…Ņ Øå^śįæ=ĢĻ~ž_ō&„łóz½TWU#„`ūŽķlß±ē^xŽŸyaÕĆrWjU-*5‰HōūųšŹ) C“·Īß½CQ¬‡ S(А·?uŅŁKvU]Ōµ’b·Žš™y{ŗķģ=Ūģź,4‡&‡"Šī!į–Ī< v9MźÉƒ IDAT(×]÷±tö— Ē’DŲ b®ĶłqӐ¾K0¶5Ņ·f),ŻÄƋfóŏŚn5††Väž„]Q8ąp±Ķ[Źžį£éØ=“Ż’H”üß4§\FŸóAmeŽÅ×oų)æ>ø“µ2LKÕhüšŠ×8’!£ROAvmEA¢`jna:<ĀpW«#D‡?$5ÓPµPH:dDjBØJX—Ŗ¢`z\š”iĀp ]Õ4Sp Ó”HŖ ,ń<*öźVł8 RQ¤*LC iJ!JÄDĮĀ4…ńzŅ1ū’¼nķlä?S‘”†ŌSwłO$GšüLj[8į½–²ąäSVUœ7Ķ pOŸ0ŪnśOüć%šŚŚhjkĆķtĘćØ®ęŖó,„œM;wаLęĪ8éä”~%ŲÜG’®Žz’Ÿ=ušĆļ‹ÓåL˜‘ä¾¶uX€aōō÷ńŚūļPčńrĪé Š-ižŽ]µœƒM,_·š±£źāB ģ«ßĻ?`ŽWTXÄ=ßśn×į:Yü}}ÖĪ’ <Ņ4iojˆ -ĢH8fõŗµø=.<<^n·§Ć¢ĖN6ÅIV:¹O>™'g=<éu‹¤ćĆyćgŅĘ5“ēšpa RøsX;”H†“Ō“Y‡m“–:ŁŹę'XČLž«ŠkØ.Į–śÕ|į‚ļ ¹’Õ’ä`ūž“ŗGVŒćüÆ ”c_ŅõĢ4WœüĪ›uMüxīų3øhĪõ¼¼śQ–$„(łT§Æ…76>M8¢„ŪŅ8.p1©f¦åßeļ»iÅēO8›É#fÓÖŪČ+kO©wpä?)‹”ˆé:%J\H§Żł b걈–`@šę€3ĄØ#@)ML$Df{ēŠ¤ÆĢŚ×įsMüķŅÉß¹lVÓĒ”üé5Yž4MŪļĒ|h$»°uNü‰ĖĄ@N7é!ż$w„())–ŠÉkÆ-qÜvŪwf·¶¶Ī ‡Ćc ].”Ō4M)„č !–oƒōČ{ģq\šĆF"ēIؽ…öÅKxŲėdÄÉÓz\#„®^ä=ŠŒPļt²µ ˜­55?žņ1–óæŌ2Żį̟¤HQ¦š†“xč£$’1 ƤčĻßą¶«žƒßŚĻ᤹r4 ĢŒĀŻ”†Œ"1 mŗ‰H}sĒ^BE"„©j˜¦¢(§.C`*šˆ˜€¦"M„C‘BqDŻ(EÕdŒÜĖ„ėd*ҶO‰cPSŒp€Ŗ”‘¦0¤¦Ē•&ŹŽ“w¦[ä"’y.LĆR’’’¤ÓöĒiu§/T Ż`ŁŹåœzŅɌة‰gJn7üĒęcĀč:žż‹_¦£§›H$BUE?śż}؊Āg®ŗMS6ķÜĄ˜Ś‘ŒØ®¶%’±c Ą–Ż–£Ąy3g„¬Ųœ%÷E7Lŗz-•ŁŖŠ ʍ®ćŃž„?ąg÷L7>>·½¾~57°rżZn¼ģšč*ĒźK,NžƒĮś0ņ ˜&ČFžsa™]_ŗč»¼¼ź1ö6oĖIžņ#’Ł1m“µ2uŌ;šū—@·æ#­ø"4nZtŠP1„ĮɓĪfLõ$}÷·ģmŽjŪīōQ'qެk0LW×.foĖ6&ŌĢ`ь˹śŌĻ3Ŗj½÷tCĻŲēÄSŗ”GIüĄŁŖ’”ŠŁßJ?92N‘§”+ēߊ”’Ē—ŻGÄc‹<ęŹ.‹źļGO @Vø­zÜĖæ™@ō ÓÄ0ōxh@3ī(PZš2Jž‰…“–CĄ„CŌ¶^¼³nš’†5AšūŒĆsČ$:*‡ü°æĒO±j2y˜‡Ś27å…g}vŠuI.—ŻžåA4Mćчeį‚3ló «Ę|÷ū¬[æŽ×^mŠę1(x’š¦) )„¦$;šó…5%ž‰ē67Væ½sųNĶģ}ą“+æuęÄę¶o>wŅiĻnõõ’Y]7å{ēo_kŪhöˆ€įp8$įō«"ū”zżä7Jįæó–Žw߃wł|ž„”¶ BŌÆ=Ą½ĄOÉŖļśŃāX\Gäą¾‘ƒŻī uóĻʘ{¾ÕśÓ?ųՇ[yėhõ%“w!ügzZ{ØwhlöxY_VĆŽįé.©L'’-÷܅ü(Ÿ›Ļ=ĪcÆöŸ ćFPöŪÆpkŪ!&6£w.g~¹ąČ%#lŪÖ,€š’¦(HERQ„Ō4K0;'¢Óź—öd?Ž4Ęo½įßó1^-ĶD€SJÅ4Q¤@1Ī¤±ŽļĒ F2y’ĢéYN§Cź¤šŲTs˜„ĮŽĘücĶcüāłÆŃŚÓȼ ‹øņä[mē"sŸ“3ś‚–Jx«ČźC®=õKx]…,ßł:{š·¤Ōm÷Q±A–k(B6ŗå®ø7Ė»æ)MĖ&_FwžM‰i@ōwŠ#Ą$TŽ”Ųä­=~^Žį£épÉ 4‡†_q²āP··v²µ”Ÿ¶¾0!ƈ›a$!éyĻŽŻČ=ĄöövNœ5;#łOČéÓéķėÅļ·¹6y@Sœń0d“3•2n Ē_›y„n*ž ¦4=zęĖv€“Gwīčš¹ņö’ÆiŖLó0 I›ftI ‡…E‹.ŸsĻ=æ^Õßļ»Ó†üĒZīšXŻ–’ ¼ĄDĒĒĒ„HŻä¼3ŃgEOIūžšwī}c%/™ę±ļցFä÷’@WCū4žÖVŌ°}ō$ZĒN&˜Ėóæ~”;fsu©—krē>¶X8›Qw^ɕ­ŒiƧ¤§ ‡ÉżüIß18Š?¦)…Ę€Fh$Øźk ŹBš½āŻ[NfHEĘw’ӄJrm–@)¤ÄrXXX&…HZŻE:£Ž‘ņœ±lėÓܧĪ„ĶČĄ™ųŚ)™$-5“NHFłĻ,18lņoó+qRJÖnÜĄ†Ķ­õBiä?łCĄ„Qu\wŃÅ\“š¬$ĀęX.yÜ.×A³!’ĮŖė˜3}j4Ö|š“µÄ©‚öØżæŪ妸 „U`ż¶-I}ŁŗĖŅ.8e¶%N]±nMŅøö܏"—žs>Ć*«0„ä?~u’xēM‚į”ļ¬ē‚UŻļBØ?L“Φ&‚C\ųtvw±~ÓF<…x ½x<4G4ģŸ ūwäÉź}¤Éāóq¤Éā}x,Č?€Īčf+#£ Ә~ź<„§'$łĄĘ}+łŁ“wŃŠ¾³NøŒļßų{¦×d[Öķōr×?å“ ’•sg_”Žģä ŠSĢ’M/ņĄ+?&¤læÕ%#ødŽH)yģ½ūčģkå”·ž¼ś#z|œ9ćR¾sŻopØŸ*Mu0¦z«wæ›to“ö4ņĖæ›_'^WQ#Ūōd ’m}Ml;“—ĆĆēĻł£+'PY4œė|…ŁcN£Ū×Į‹«N©ūšÉ?B Ų *\ź’Ę@(ĄxT€Ø9@Ü`4`¢#@Ė ś;~—§ų ę3ź»užÜŌĒīŽšQ]äŗ\śU'ļīīeåīNźŪųC„y"ŸHS&O””±1/“Ÿ¦ęf›¶lā©gžāæŗ—Ūæv—_{<Ć ZaD×E®7Å°āąŽż…',Ū]] *ß|aīĀM „–xĀõ?½rć»ńžōyŠ FPŲuį”ŪŹ~t‘‡t$ §Óa]„ßgĒ“v±>ūÆ_±~żś§cÄ_Q”½………?Ø©©¹šģ³Oćńx¾ Ŗź)åčüąn‡Ćq*š÷h—węŪ×cć&’Ē0&öõѹśCv-~‡ūw¤ńę ø¹“(kD½#†„ėŠ|ž¶°A½¦±„ €µ#Ų°ŠŻ›¹ā”[š‡ś“Tģ5Łև×åš$yōčōšóēæJÆæ+ė|äóµä_pÓw0³ī¾~ł½IiO­x€@xą½0’™ „|é'+=V€ØJæ#ų¦™Õ 4öżM‹&<@ņ­æÉŖµ¦)Yu(ĆęŠ1ŪŻR„  ČĖÖ¶ķ}ĢS˜J/Å^D·(1|Aö A#‹‚¾~××ųäĶ×s×7æŹ7īś:ĆŖ‡q žźė9P€śƒæwļŁiš\õ‰«Óźihl`Āx›höIćsĘģžE‘¦i/tøaīĪW’ėgžÉ3īU„Œ¦p95£÷Ūēlżm#lÄ®™¦fmI`å s÷ēåP'™°:¢N’Ēb6=@ņwņ©ē’ńM)e @a”÷wO’åį’øąŗėB€„C²¤dzW Ą4ĶRŽy‡»ļ¾Ū¼ūī»W !®cÅø ųļĆčęQĆqĄĒ?ĢćU~Żlož"Ģ®6BŽc熽<½÷!®?‡›ęMc¢Ķz删µł×—ń}øUį€ÓÉVO*‡±£n"Ķ“gā+–?łODȏré ü›Ŗ’— ī'^„Ÿ’ʏ†ī^‹ĢæśW^ĖVĆwĆŌ p Nž æųw«Üõ·Ć a×>„ »^zŹJ²·PąA½ūĪūĢ=Ōw6Š[VBČS@ Up“{čšӔ¶i1Dņp֗ˆDē~©U›<‰&BšÖZK—EŖB ‰iHEHDD"Q€…i½³×¦Öä²ū·+’ö#a3”Nx¢eŽ ł·]Ąęļą/©®<É,G[[Ææó&§Ÿ|šåķ>xŪ™Ä+M$` äąÄ©Ó©ol`Ó®lܱ•YS¦§ōß*·vó& Ó Č[Ą”ńć“WfAkgՕ•ńŗ&›€×ćĮ°nė&Ī=ķL:zŗhnkeö“L7ŪM[g{ė0aĢöŌļ`ņŲńŒ9šŸ|ć»<ūŚĖ¼»j9ĮP×Ž[Ā’åKłĢµ7pĪi¹Õ2s!ąóŃÕŅ’æŠvLĆ £©‰ppčA¤”,]¾œˆ”ؤoQž‚\n§EU¬pXQBsœü§Œć“]¼ÉižD‰’ĄqŅu.ņŸm蹦ELišźš§ŲŻø•Ū/’!'O>›ˆį–ü&^< š£'¾LYa%õ­»SźĪüqņŸiL§O½€ 53čöušüʇӪ Fü,^zZÉ`ÄO äĆć*`LõD:śŅ…vä?„łŒšŗ ń‡ū@ ģćOożŒåcØ.Į‚©3±f&k÷½ĻęśU 5¤ŻĢy“k—_=„0 dRį±ģ÷Ķ„Żż˜@ÜĄ€#@ÓP’Ē4£¦Ł²G=ī¦ÉūūCģh?LgJCDI±‡Öž ļīč$¤K& ÷RāŃP””g?źÆ t3—ˆN™ żó#Üś„Ļńō³OgĢēr¹?n5ūn õ§‹7Œ=/qTī8sūĖgOliM¼n;cĒŽ/-Ųż3ėĀ l{©š*õĶ ] MĖĒKæū “0ƒ1œõXځ@ą<‡Ćńv_ߦ߯™¼`VU5”,„ ‰åą:`V䥶¼;pŒp\š\‡ĮH‚ķ;Ž%Ņ~ˆĄļŸ”iźjĪŗō Ī™6–ź#µNéīC¾¼ŒŠkĖi“84öhN¶³µŖ†żc'Ó6q:ŅrŒ\NOģ #Ī­”¶¬€kóÉßÓ÷>?ø .?Ļ,øōčĘÉ’ n»nżŌ7Ą„·BĆē vøõŅTxśEąüįpÕłõõ‚Sؙ:’9{[i/-„·°„HQe='ĄTķ?¹¹¼čēćeßQõ~S‘"›}‚iŹtG‚Ŗ +³8jĢėŪbšVū1_(©[awMĄp¹ŖSˆ;³ØGē"’C\l„Ķp<ķ°ČZ³™IĘGAžcKއéS¦3uņ”ä>ؐ’XŪiéŃ_ēœv¶ocĆA~÷čߘ9i Ó&LĄėörڜ¹ńyZ»u3sgœ€¦Ŗ s!Ņś8Wm–@UEE<]‚¦LcÅŗ5¬ßŗ•sO?“-Qõ’™“§ąp8˜;cKWÆdåś5L36n’?eü€oъ²r¾pż§øž²«x’Ć<’Ę+ōōöņࣤ°ˆ“N˜ĶP „¤·£ƒžīī!IõH„ަ&ō!h $bÕŚ5“wwRXT@A”—‚ĀÜ‹ü«š‚"”ćä?Ó8l> G›üDi’ł L ž®„§ģu¶†N,Sßq5壸tž’gļ¼ģ*Ėü’yO¹żNK¦e&=„„tB MŠ ˆe‘Ŗ –]WŻß*«.¶Uvľ*»Ź¢ˆ(½÷4H%uŅ&É$“éõÖSŽßēŽ;·Ļ½“ ĶWĆÜ{Ž÷¼ē=ēžóž÷ū¼Ļó}®åä™g"„B×@;YuoŖ®×å'1īg(ܟÕPéä?½<ĻÆH„æ†ĖN’(xå§Dā”²ŚŽ~pKfœÅ¼É§°v÷Ėy[pS‘ƒ,œŗŒkĻżæxśvvޜŚ~Ø·•ŚŠFf5Ģ'äĮÕæLk”¼ßØš;4Œƒˆ‡Ž4·Ź Žt >ļś¤ e§ÆügŗżK{D/@&28ĒI˜|®¤„W÷½uä?‰Ź€‡!xy{ɜ?Aƚxo•Ū[‚Rä79Šv€ėoŗx¹tĖžŸć€ć8–0ē l 毢o’³Ä÷`ø„īļü›N˜Ä©ē,ᔓO¤±*X¾ęœmƖ=X+6ye#½†E·¢pŠåf·ĖCKE=µ3iŸ6™'«žč8†Ē“ļ—Ī#3 |Ą`åō¹,¢“~¾ś:ų<šŽwę–µwĀŽŻšÓo;ß§4Acģ;čžįRēÆ[wĀ:Źx¬UnżNY~Ū{:講̰æk¼¼tŠgĒ­ĄēäŲ9Vcƒb#¬b/DLÓ)”})G@ ĖėĪ ¼0ś xŒ‘ügOü ĶŹ¢2JQņŸēӑŒ·’ü'K-ĖfӖ7čģīąōSNĒēń¦µ—Fž3Ī/O¹ĖĆoü8}ö^~m5›vlcӎmŌMœČYK8_KJvµ¶A/FžÓ;+tö8¢yõ5µ#}‚%'ĶgÕśµlٹĆ0Ų¶Ó.^xā<„€eKNį•×W³jĆZ®¾ģRsfäŗJż.=ļBĪ>u?üÅŁ¾{÷?śŠ˜ Fü¾  €×ėĮåv£¹4TgI xū’’rxĻeĪyPü<ŽŒxłä§Ō“6‡ģ"& ™Lä%Ņ…‘=ĘMØØē½§]òĻG…žPæv?Æl};‘ŠuĪäÅ|āāÆņ‡—ĘźĻåiØL ’\v#>·Ÿµ»^fcėŖ<}.Žō†Ö,™q §-Ć­{ˆi^:ÅČ’([ūĀŻhŠĪĶļś:÷½r7ė÷¾Œ”’Y óøśœ[BšĄź_0Éc,/įZ•DžP¢alofŽtYķFv› m‡ŠŪIQ@éčXvJ@J#aȔ`Jq=Żę %Æг­ė­%’IT=tõZ¬héC0{R€§<pĖ„Ȭ¶®¶ŽŸüčN^²”†ś§Čq…"“@©ŖqŸ}šō‹ĪšŽ¹ćĆK÷ļMß2Tõ’»ģ;»‚K{ęÄįõw_ńŚŸź‚łG UM¦L¤($ØēnA<õߢY·³Ā䆇CBaH)UĒŻK9īÅ>ŸÆ@J™/ęļ=iŸĒ ŽsōqÜšwŽ9g`W7ßW‹=q5ń-ėģļ”c_­;įõ_=Ģō9S8ń¤iLŅHM} ž‰Uh>ĻČ8fY0ĀnļĘ>؁¹}ŃĶ{f@QčS:Żnč:ū¼AöUÖŠ>i*½3N&¬ĀŖ®ĄvyńhłÆk#ŽØÖqÕųų@©ūttĮ¤zr„JĪ„ĄöuŸOŪÖ…²*ł¼Pī|ėҳ˜čæ‹”ö÷µÓØĄšTbŽw(@rL k‰Ui!Fl‘ļŗÉQR–i«ldBsĄ¶„‚å¬3ZRR¢Ųš:!}+Ŏ0#’£ULlŠ[±āäœIFzĆćIž³Zˆü§ŸGGg'O<ó$'/\Ā“©ÓrÉšK~ö¹„wÕėvóįKßĖå]ĢĘŪhļ줶¦&U±·Æ7%²W]YU”ügč=Ž`żÄڌ³\ō¾ü½o±’ŠA©¬Ø(X?RJ†śśźė+9/{6ƒƒōwuy’$ö“¶²eŪV<~/¾ Ÿ@ĄQżw»Żčn U( ”‘ūķ(‘’lb1Žä?}ƒžĖģ¾”xoł‡±y˜„zŲf"ŽZ8D?a @$®_Ęyę;ņ@žZįÆę‹?Č‹.CWuBŃ!žZ÷Ļmś+†OµķŅÜ\}īgš¹yÉa>ƒLŃN!’^õßX¶ĮC«;źłä– 6ļ[C$Ęėņ1§éd6¶®(øož>ēÆx {÷= ±ĀoŪŁ$Ņ’ČMčx@Ū ÅśƒGOˆu,Ø­ńÓŚÖĒk{ńøUfŌłńjJĪÅ,”šĻ“@/bp»Ż\zÉ„9Ū„”“l£»§ ŗŗš©S¦ŁÉH4ÆĢŌ›=TE¾¼»~ĀŪ¦\;óü9Ż`Ņx÷/ų§¶~ß)šb‡s; s—ß·Lhł«y¤ŒŻ¤'ĶõŅķ’Ń"Sī€ōKUUw›¦9oxxxJ¾:õõõ}»vķŽzė­Ś~ō#£©©É | ųA¢ŚŽŽ£ü±ČxūBI¶Ś,¶)Ɵ†œv)ęIK°^~ cė:B{÷Ó5Üžp”»ŪŁøó–¤Ī¶Ø°ń IDATH¼ŽøH`0Ä„…Ā€ī„G×čt¹8ģõqŲ_EW]ż3N$T7 #Šä,V²ŹęąĆ’»j*ļRJVŻ2M j×%‡ƒŸ~ŪqõO¢¶D”æRąu£\žęžžy¶÷öÓVeŲ,Ż ĄVjö|M,§¬Ų¾mT®GdŌJSż×Fɐ/ ­¤mĖ37µ„ŁzŁ­Ké䜕–T M÷HMͬ4†ņļZlõæĄ•Źcž• jG‘¤æĄÓØ@Voflq¹ä?½«WMä“’qńøĮŖ×W³»u/§/=•`°"“§÷=ł9=¾?Y Ąårqź‚E9ń’—!œŒ<ń(ļ~Ēłż&7MBjŚ9%ɗó}04D4ꬮ„‡AfMNĖŽŻģ?tĪī.Ī:õ“”K»®ėœ²`1/­Yɖ–  qĘÉy”dzŠXאś‰E©dt€‹Ń×Õ5ęx})%]]„GŃĮ(ūŪŚX½öu<~/ž Ÿ@0€/ąs\’Ż:Ŗ¢ ”ņ/²ļ”|¤9ćOi¤9ūO’ķF¾g“šQżų%’Wąčz0MH >@Ó,m{„ģ' ņ®łē;ņ@ä’šVpńŅ+S©ü¢ń0O®ż#OƐ˜Éiūż§_Gme#[öÆeMĖ󩂀§‚p,Œ-³r‹u*oŸ3ļp/’óĀ%5—ŁŒs'ÅĶė÷¼Ģ™s.fŃ“ÓG …ZŅA°ūš~ų×ā§ŻČĀ©§ÓP5Ó2x~˃<¶īwiuKģõhæa~(ńܱLT¹o'ÓśŁXÖˆėæ•0H{Dķß tV’;„„tańÜīhfšĄc“'U±mo'U> Nc•=Ė}¦ŠQhį)B”÷żį’xī…ēX·a™ā’ õõ|āĘOpóĒoF-#!ŗāšÖ@8Ÿ'€aŚĀķRŁqøf 6ö솑)ß??ŗäģ¶~ß)õ‘Żņņw‚ī˜yīļśÖŽĪą¹ĄoG;¶¦“£ų—Ļ0 ėšĢqžĆŚŠ° ŸĻ÷Üąąą¼”?Æ©©JÜ`ķÜ|óĶƾśŖÄŻwßżą]wŻÕœ)AuųĒņžęąøą8hž†lž†¬m$>)ęŚ-D[·0°'ķ±>*†Ø6 Ŗm‹ Ƥ‰?fįFAׯU%,4†uƒŖ‡Į ŸĮź TM 4m6‘šZĢ@6A(uÕ?+\Ē4\PιVWAGTڵIĶå“ZĪ_J㯧!ÜOet€njqL×o²÷ŚPWumø'0#öLµcb¢@óKEi ]†„fvŗ+̶ŖĘČn5Nī'mś(/MMÅ#͐Žfö¶4¹DbUĮsŒ™Ļp”É661;ŠGõfLŖžČ:ļźīä±§ēÄY³™?oŗ®gö#OüæČčS²żÜņŠ`€Kßq>½ō<[wµ°uW B~łķ¤:™}=Šˆ’Ø­®éCāļ’“ęÓ²w7¶oĮ²­ĀeK–ņҚ•¬X»)%'N/®” šŚ¦õ؊J0P<űmY öõ-½_fŠÖžĘƒÉ²6ąŗė®3Ææžś! BJ™ķбų,šōXĻąhćøąĀmouH¬źÅȾŒŻ‰ōlf°ė0ūŪńF†qĒ£øa¼¶nŪ8ĖoŅ­bØ =@Ģķ#V5‘ųäJŒŹfĢŗFL—éń:&ŚØvDÆįb” —ÓĖŁgŃ\'ÖŻf8y>¼6’½‡¦˜5ž÷Aų×Ļ:ŪśJSł/g. `™Ō†‡©źēŠ„!ĀZMiįūGēoŪˆī“…»+/2cśRŪVš‹ļį&Ņ}{+„ŖY{\^s]uSčYÓŠ~²ķ³C dVF€Œ2EŠBsN)e*€“„ČĪ÷ūr żYƒ÷hq’yPŒó­„­Ž4§„æ/ņŸÖ)ŁÖ²½ūZY²p1Ó§Ļ@ˆ‘>ęL?‡BžĮ‡Žż^ĪXz*[wµŠŽŁ‰¦&D•RMfC 'ņ+B¤nÖōcœ‡ ­ü ½C]©Ā³Oŗ„ŁM YÓņ—žrB(lÜ»’¶ž½Döo˜ŽŁ1’I5Ó8ŌۚwÜnļŪ€ß,Žv™ä?”ų”ž”¬źå‘’‚UАˆxnnyQķN)łŪŅN…HŪrtRžH‰e„ep\r2ōF „§|Ɨ75^Ś»†Ł|`Ę*¾ZW ćƒa FĖ084ȵ»Ž®ī..¹čb>’ŁĻ³pĮB~łė_ņõoŽĘ×¾ņÆTTT‡¹ž¦ųæ?ŽĻņ›–3')ą[Té(Š"‹yZœ6µóxYŹĒ¶6Ÿżi»·šø?õĄ™ŸŒź„sfv’ī“)]żÉ;%W‚ŖeäØ5•¶$’.—^“Æ#Č߅ßüę'ū^|ń•oD£±ļæō‚äæ K™Tīž„mŖ3£CźĢöķī+Ō•»ü"𲤒e)„Ģv +äҟW@Ķųƒ™XõĻČ Ó2x<9©ĮōÕ”,bēd ¢„ÉV¾’ˆ=2Łł{$’©ÖP¤B4į•UƲńM,ZøÓg¢%Ձ|äŸ"ä?ŁęśšҶšx<ŲRr×’ü7kYŗ`1'Θ…0„©™ Õ5ōōõ2­y •™–>MÓ8eį^\½ÆĒƔʦŒņķ»wņŲ ĻdlS„ąüegń±]E6¤”D†‡čķÅ2ƾĘaš&DĆeĢŠą@[Æ®^‰īq§Üž?>æ—Ē…KÓPTuä:-ŅL‰ä?ūOŽW™M吝œ‘įhGžgõĶ@,Zž=e”čžļĄJéĻqQ)óä“Õ‡" Eś z«˜?ķÖļ~µ`]€K–~˜¦ ÓŲÕ¾…—6?–*¬ Läƒg| €SOxC‘*|Õ\zŹGx|Żż<²ęóv¢„-^’= Į~™“š—rūŸ¦w8W)Ųė ŠåzÆå?jž÷јļ³vłO~·-„i µ‘ vQķĮNˆžI[:™¤Pü·°ß±“n’N@Ź``ŪŲjŅąŒ§Ūä?‰É •ģhėef}ˆŚ Nu@õ'(řē±'§«»‹ė®¾Žļū{©ķM“œwՁƒmĢ«8 ŸĻĒnż<Æ®|•ÕÆ­“@ąĪ½“m[(Ję$õŌɝ}‹šŗŸŁp°ö¢e?|ļRŠDˆÉÕį×īłČŖ‡3*KE4U†×%æ:¢`Œ|Š4·S/ĻOĒ {É)Gš?š¹!BTHœ6}~ƔiKlŻŻī[öõe¦lnn–¦i^ĻŚµ’„KmœAP !ŽMw”,7ü`ė¼#j›‘n`B=’Ģ”^§­®ƒ#”ĻBD]ĪvO32:Œšn įe»ł§{d y< qJ3'do/w}6nƒįLm†÷~lDšÜeį_·ŁYł_2„ü’žG0-mĶüŸ–ƒ{ © ęN”ęą&*#a|FÕ¶ŹhęŽ2aۈĆkē¾'Žü¤”"‡8–„Īģ |yė3¾k*š†>iah}ź„\B @ÅF¤›F„5„P+Ķ`*l¤”Ār»rĪĆģOL¢F³Ŗ(Īžü—CžĀv8ėšćOžsŗ3Žä?ćĆXÉŠæ 'NĮPhˆ_z6°xńfΘåÄqä!’"OŪé]KČŽ'³#F¦Ngī¬ŁlŪÕĀŚ76ŠŌŲĜ™³RõNž·€§_y‘EsN"ĪXr /®^Įģé3Q²0O]øUÓčėļCÓ4jėXuYŠĢRbØ··äx뼐’Šą ==Č#šHGĖ®¼¶a=^Ÿó¬śńś½ø<.ō4ņ/„ȹĒK"ĶdW-@žsXÄŃ#’o–ƛ‰X¬ü{Ė(5€mb 9bČKæ^ép4Rš3vŒ`ƞ•“|ƒ+ĻYβ9ļäkł1¾vO­ū–mf܍5Sx×ÉW`Zæ{žGŽ>AWóI¼.?-7ńŪgļ oø›©u'pĖ„_ćŅ„Wq°{ė÷¬ČčDQJ[¤ĻłNVJI×@;īé>yÉmüä‰oŠ—fBpž‚÷°µmm müēŻ„ČK¬Ō¶G#’é—-É0ąÓŗ’ZĶ·“.žHģ¤ŠŸ• ś‰L2é)ųiB€Cq›żo ®E…ßÅn -‡‡™Qē#čÕp©¢č„Æ”€C ·’k®ŗ:c{s“3QmkkcŽ\ēŻ–Ģ,3Ö 3ŠP¼„ĢP’ūźg’ļ¶ĒĪŚæ±½f!ĄI }›īølĆÓݲŅwā–§ļRUŻ./7€‰Ž‘Aa œésžU3érɂÓė\g†)¢CÖ¤…ÆÅŃZ{»įøą8ŠbI¹ ĮšŌ”zŪz!A „‡ņ’fōĶ4½äUē šK8ŸWÆwČm­ljIū—Ž“²Ģ “Ė^KĮ“&ÖZ‚±^#ä<‹…m«ųĖS>t°®”·eŹm¶”Ž-y °-„¹Å7‡»¼ÆLYŌ’S_Yŗ Y— Ū–B …)-Ž@"…i+ a»\9‚ęąpĘ÷¼«ł­ā(ó¦°Ī™¬7łOon¼ÉśÄšˆČb/‰@(NR čģē©§žÄė~‘ ²xÉRt—ž±Oö‡ü^#ä>żzå#’@Qųź-·²mW ½Żų<>ęĻ™“~ā,I0,˜s'ΘũyRśĶ˜2•EŌ•mŪ&<8ČP__É©Ö !2ŠŻ=f”ĄlH`ć›Ų²c;>æ“ź/ $Čæ·×K×ĮØä?ÓXS„ügßW%qœü—x“ü‰}©)Ó6B @8ϵ#Ļ‘+pž‰¢DŚłŽ ó›gīąµ–¹ś¼OsٲėY:ėl~óģr°{ŠPøīüĻ”«:]}/‡ūŪRĶ,õM_Fļp?yģ[Žh €}];ynÓ_ųą²qņĢsF e’’bē“ŽĒÖžŽ†ŖfN[ĘW.擧7>ĄŚŻ/cY&—œüaM;“Øꙍ*p=ФŸ»é萒bĒUŒ(v¶jP…A™J˜$ūÉŌ€©•~;IžIÕM¹ž'¦˜»zķcRųÆ&Vūiķ qØ/¤jšP…ņiāx¤¤5 `Ā'+M,K&iHź¬Xµ‚łś’हłßu£ĀÖ<†i MsVźE¹ų FiįÕ¤uĒåÆ?o"ŸCJ© lE*2ߝea”䔢š¦Źb”mFāæŗ®ŹqĻJM'‡_JĆ’Ź+oŖß“iG½¦iĆ·ŻvŪī+®øĀXŗtéŪē&LĆqĄq¼­”+%HlēĮ/īÆ\nųݟ᳊§[9xpŁ6>ÓĘe”o-ŠžM'œķØžŗ”¢ø Ł8ĮŒčgļ}mĀģ “ūŪ!Ż„Éäd PK’ H©)m” Ą [HMĶšÓ–¦…‹å%Ź)ŒFžp²³£ŲŅBΐś7KžÉD”óг –\1×2ņŹK/ņņ‹/²dńĪ8ė,¼@źDRū!łOFŖ,˜37ēŚ%±dŽ~ēOQ•ü)MUłę¾œ·¬āŃ(”ĮA"ĆĆGć`™&ŻŻDB””ė둲,^Yµ’C‡ŪńüŽą_EĄYłO’EŃ “’“öŽ“Žrņ/„$>†€„z˜ŅpÜ’!„Īo•Ņ×(Ö@1ņŸ[öÆå[÷}š÷/»žs\Š–ö|žæšżLo˜C[÷žZ7B żž >|ĪĶÜ÷ĀŻ)ņŸD4!„§k#¦örś\Jæ“0m‹_>ó]޵ųC\²ä*.;ķ£\vŚGGŹ-ƒ_?ūō…ŗsŪ-į …Iz¾M%öŗłķpłŽkä “Š { ’Ź@"+@RōĻ–V"ĪlĒ-ĄQžOˆ&vĮ¶%{śŽ^¼kRm€5ķżč2»ŃĄļö½ŽR‚-A-R霳Īą‰§Ÿä“SOKmÆ©©Įēóq×Oīāūw|?•ą†koą¬3ĪS’Eõ8ó³±Ē¦ŖŖ"±$[ڃī~·Žoøµ‹ēöµ{U‹‡·ŌÕ’čłY—/i\ū_nɍ’ ņhćŗŻ.IZF’f;«žIž $ŲLĘūŪŚ;æjŪv*nāŹ+Æģw¹\÷Üu×]·/_¾<ŸåU®ŗ9F…žFp,ŗŸDCˆbŽńń("pķ[BSš^3•šŚEąāwĄGÆ8‚ŽŒ>/šmć² tŪB±KŒłĻGŸ†ŽÕsßė«ų G2JŅRźzZ«æŗkʉĆ+4æ“åČb”’Y¤D)…°¤.-ĆØa…Āä#%£”ŲÄ„hżCV˜ ­āķIžs[9āóp„÷$ŠźØĘ‹Ä>A<eõšU¼¶r]x!ÓgϦrĀTM•üCVyņŸs®™ŹØĖ–„Į4 "CC„†‡1Ēčb™Ū²źļ'400nīžą¤‹zįÕW ć ųœx’ Gķßüs„ČæPА’ģėzœü愈E1ˆJu¶¤į\?gDN\æDHŒČ|4s0ŚÅ)°Ä5"üį•Ÿń̆?Ń7ģå ĮzŽwśuŲŅāžæK&=Wœõ ‚Ž*Ö“<Ļ–żksŽ{bÓ"ŚžEõŃȱsJÜRŚ<¹ž¬ŻżēĶ{'LZˆ¦źģėjį© pøł)FŅG#’Eū\¤ ņžF£½Cóe:RFH śŁ2”šŸ$ųv"Ü$`'tdŠü;÷ų°CG>̾©PŖéģ‰Ņ6Ø«p£c÷8aj!×P`Ęō¼ēŻļįŽßŻĖ§nž$'Œh$7MjāšįĆ466rÉE—pÅ?|hĢä@A÷,Kóų̟ŽqÉŽĪš9¦%ō˜­śLKøl[Õ方[¶pŁRd,·=|óKW-˜üŁĖÓ.ŁŃį»ģ@Æū”’śpĖ«åšt—&ćńŃĒĄr|čN¹¶££ėGyŠŖāńųæ|źSŸj\¾|łņäĘ“ų’o’lę—qČ7 Ē o&Ęy•÷H°ÆČpß6.Óį£SC˜ÖŲńÆ|óļ­D܉oפDĶ—o,8¼rŽUńĄēĒ£­±@¢øĀŻŸo³„Ś4'²B(q b4ÅĢów$„ćQŠ…“qÆĒ'…ČxšC‰ųūB—<é)<ć+6OLbŲ¤RÆČØP.i.Hx#łĻīKZAž‰”H?üŸ‡P””'@² !„ć b‘(>ł8 [÷3kśt*jŖ™0iފZ2v“@¬”Ļ8Æōdī“Mž4M›‹ ‡‰ 9®2–eźļgxœ‰?ĄƒY±zØ ž€_Āå?ü룹ż|,LšŠ’fŽ:ņŸUTų7};2uØ·ņÓ[ĢxÓ\ćuŻ+LŌŅõTœWŠ“„a¦§ ųsć’CE”% dŚ#%’CÖpF…±’ę¼” Łä?«†ČüOa²”MÜ2ŗ$řG:ŅóHzUASB(yPC€"6ķŲŹį®NN[¼„ĮŽ>U„²v"Õuuø<t— ESsŽĘėÓśšIīĒ“ü›ń8ńh”X$B$Į>Aæģ¶ ƒŠĄ€³ā?N®žIŲ¶ĶĘ-›Ł¶c;ŗŪ…?óļųT^ŗŪ…KS‹ žeŽ HsāOQŅ< łOŪ˜Žźø‘’’“ rž’<ēqŒ€H¤|TÜ4Kö°¤g+©ė“¦‹Y<«y¢~ʗāµó•>“ņ7Dć~mDÉߣ{¹śÜĻšĒWN(:”³óūN»]s±~Ļ “&’śįsøé¢Æ¤¼¢F˜ū_ł Æķ|”ō–Š‘’*Žł^+įG3ł/ҶČc.‡üŪ2µņļ¤łsĀlĖBŚŅuL¹ż'댤ģ+ߎuL ĀÆs°=DO(NĢ”xōā?O):Į *‚„GĆ  ”*5æ€陠üų?wkž{L¤Ä”RQ Õ%lE6–”ҒҔРR*ŠfƒĀ5§,Ąbl^ éŲŁ|B¬·ā_8‚9ĀxB ōįīźOwģ=ü­‰SD«§’x”ŒØ*™–!“¢†Ł)½īŹģżĶį6 b䓊ÅČ ™Ć Įž# Ķ9Ō…’‘NrG¾ēŁ÷ ’"õU¤¶k€Ž€@QUU”»æ—'_zžÓL}m-}‡;čļčÄ௬Äš£¹Üh.]×Ń\:ŖŖņ/+ĒHž‹ÅˆÅbćJų“lj$6N)ż²Ń?8ČK+W0Ęė÷įõyšżų¼>/Ÿc`Ń5E)ü§oņŸń[fn¢q›M­Cō ™ą\Šļ!·›Dć6GåOJ™÷½d–)ėFéčģ`ßžżtt¦£³“}öŃŃŃAGg­­­¦Įžm»Ėī» € 6 (ł¬Š*ZĘJPRńɲāB½itM“Ęx ?F€ō£‡ešFÕÅŸ÷?ÉĻņĘo4¾š…/Ü988ų;Ū¶—h}Ž`ŽųuxüpÜš&āķé°4vä0µ£lµ\2 IDAT€]ģ9ūÄ7į@GŪ÷S !0…2öŪĆ ųBūæ'E"ÅņćŽ{~ĮŻwü{vµŒõšÜü™ĻÓv`?žåĮ“­ŖæÆmā§4żšw'z“.U¶BjPȐŲ-«BZ @ŪėŹ1[Ūł £‘’&[åLä@`I“ØŒāޱ“’QHĘŪ‘ü;›F¾IEAM„” (J"6R%Žņʚ•Lnlbɂ…čŗNxhˆšŠŗĖ…·¢_ €Ŗi©vUMsžéŠā¬`«ŖŠPÕY®TEU±'唳Śä¬ū„Ī]—tš`²žŖ*R¦Ł×ÓMķ¦e MĶ (n—^ŅŪÜēóJB#5/½ōÜÖ5kÖŁ€ŅŪŪē†訂D–ß3Ī8ćł'Ÿ|)åŒM&s֍µļGĒ Ēń¶E@G>±™ż×M\U fŠK᾿Ą£ĻAM|q9Lk‚žAø’a8} üų·ŽAś?ū9Ū~ų§å0­Łń"xč)Ųø†ĆpĘøęƒ#s™WĮ’ž¢1˜?¾|Kį¾X6lŪG…ئWTl„ 7łt“æ1ói+McŁwÖģ9x½eé9hlj&ålø§ōķ¾ĒU} ŖZ*Ņ–RXZqMSZB: HœPKwē¬p–¤Ė8’‚(@ž“„hČĀēöf—dķž÷KžE „)Ń4-į  ŖNģ¹Ŗ©ģīąšóĻrņü…4Orrmń8Fw7ƒ==øÜn¼æ)%¦aäĶå{Ģ@JⱑPˆČš0V+ÆcAWO7+׬a8Āćqćöyńł}ųż^¼~?>ŸĶåBםė­&Vž!iłČqņĻ1Gž"cˆ’‡D@ 0¬8RŲ 'ĆG:łO”0‘. %“R®ź\wž­(B! qį’ĖéīdŶ§Ą²ßɕgߌ[÷°zĒs¼°łį¢ĒĶų*.ü Ķ¹½e›ÜūüDāĪ{®{°{Ÿæ#Y¹xŸ‹Žf (Ł’ÜTāļ0ź».·BÉä?ķyT,;=Ê_Oøł&S’%5dŅĄ¶‘ŲHH…$’G`ŸŻ²/ļ)žZ×C…O£& ³df0e8”ÉĻSėzX4#ČÖżĆüō±¶QZ,B8«äQĆĘ“åØŅ`„,Ėbßž}45NbŃĀELš4‰¦IM464ŠŲŠHsS3õuõģiŻĖgæšYī¼ūN.zē…9š£w^q'=óEÉIӗŽÕ‡Ž˜Ņüƒēꯊ1čIĖ»;‚?m˜Ģ·üó·łĀ­w~pQė˜.°¦9nžQŌ¾9ŗąm·}±’;ß¹ē±X,öŽuė6½ø'½ü‰'žčB„€źo|ćźm·Ż–= ĪMü=ŗ/ü1āøąm€·@ >»z ä„ōqž…prq”€°M¬g€uÕ,(VoÕzØŖ€ė?æ¼¾s7üģ;©’éļņ~Ćš‡Gą³·ĮŒÉpķąŽį‡?‡»¾ † «7Ąi‹œĢ4wžźėࢳaĒnøõßąĘ+ažlčč)ŽļõŪ±‡Ć„ü„T1·V|Q< [AØi =}»'Ļ2ƞcį)Ó¬¼°ךz÷e›ÆRŹ"s%[J‘.(E' ©K¢Xšš“8Ā*aņ[ĪŖEĮjÅČCę õīŗĢ’q G“ügO@Ē“üēh$ū—Ų¬Ø”@UŖŠ’šŠth$ĘŖõÆS³§Š“.¢Ŗ"įS$%ńh”x4Ź@w7š®ćöłœĆ~ Ą4 āŃ(Ńp˜h8Œ„ĢśĶ2QlLČ®X‘v>¼ū”«h؞LĖĮMüį՟ó¹÷ż;WŸūŽśõ(BÅēv&Æl}‚’{ł'yōņ HÉžõ+Üö‘ŸQį­FĮ’gÓŽ·ÓJ»nc ’łÆÕ›Ož ·=>äptō‘|PĀ£9÷QRŌĻvāśišIå’„a S/ĄŃ°ŽÄ°˜å—4£*‚łÓljāō+ižč!³šŗZ;¢ŌW»¹hÉš&ø9Ų3Ž¢ŠĄ°²Ī”ĄsQJĄ»/~7­;öŽZƦ¦†üÜłģoå¾?üŸżägJģp¢‹RärĘ<ŽG«÷MØł—‡—|ݰ_­?ŗćƁuuhO•×… ·Ö9ąŖn鮘Øßsźm-¼}NŻĄ§M (8«üŖ¦–ķęo0’ĢÆŲj`†@ų~ š‘Ė/’ҽ÷ß?ææš_'O>æåĄėėŸŹŖjbŊ:Žć‚Ģn’)¶•xo*ŽŽb|£dJrōpĀ[݁1Bӑ.7Ö”֎f˜: n’’3ĘJ ßŗs¤Ģ0ąK·Ą’yąuƧžī»ź&@ß üņ’œz•Aøó¶‘ż^ß [[ĄżĄŁ§Āēn,­ļ/¬'.ĀšĪ€ŪKX÷aeŒ`%bąPķĒÉŹ”rž…³źÕ—ųĄW1ab-O?ž]¼’ņ+p»Ż<žČ_Ųß:ņ²Ø¬Ŗęŗ—ćr¹xöÉĒiŻ;vŅüœ{Į»°,“§„Ö=#e'Ī=‰³Ī=Ė“Ø­«c÷Īyū(„źõW^:Ų>Ų©»”·OXążŒŠŖš1A“RRŚĪt°š–c²"iKæ%Lz V,6)ü'> šƒ™%ć@ž“Ū25Žä?½åń&’"ókF ‡8€‚ĀFN(€¢;.żš¦ÓT"!ž~łEfM™Ę¼ēąre¾ŽMĆĄLˆēhŗŽĖėEw»q¹\č.ā(,ĆĄ0 ŒX #%5מ|0-‹m-;Ų²m‰ĻļÄö{}>|~/^Ÿ7©ņÆ£Ŗ ŖŖ€PFōŹ ’éõʛügmwņŸ~9ū–yĒ Ācš0L«Ä †ƒ¤ūæ2¢ H[+pmJ&’…›Č[Ų4a:ļZņfœß½p7]ƒ‡ųönå=§^â駃PŲŽ¶g7ž™-Öęi»šŃ’%§ĢzŽj:aŪļZü!L=•ļžéóXv Ž£CF©8ęŪ­„ĒDžĒŠØČö2 }2–Š€‘tvB€éOźž!’©)Ā‘ŒčŪ„Š5ĮĢF/ §Ų°g˜ ÆĘ’™Aŗ ¶·…°„dõö–Ģ rŪ53yą•ŽTČĄ‘Ā2ķ„ž”cü(v…ņEµŒ÷[ DQ¢Ńr’į9"PTEZrD¶ļ§//:ß°ß{NjūÕ—æö H©H)=—e©Ršq)A>ü…N=÷įĶMŸ’Ļēēœū›¾öׂ`Ō@c¤ž“ Gõ?ÓhoTōxÜRŹŃƽIU€+>ų®ž§^|īöC‡:īikkP4i`J)“‹QA€§žzjXŃT!‰Hųõ(|KpÜpo[č:²:ˆłÄ<±x7Pdm¬@&ĀĄPfłTĒ˘ź„ĘüÄjēo}- ēz¶ąqøgķj…s ɀäĮOVT†47¾a—S)S OĆ4;¦Ÿ—½żc7Š}äZ6¬{¦ęÉüŪw~HWgk_[ŌfsŪ·’ƒ_sE*Ęł3_üO?ž('̙˻ßwŸøī*śz{˜æp1·’šG<ńČ_؞0Žżs>~ķ•ōõöpņ©§óĶļŻĮKĻ?C8¢”q”X:Ü?Õ_e ŗ}ŚHšź¤,6Į!¤Ā’"æ@āEVlzȾ1;FԊāU½YmŽüē¤Fū ’ÉÆ"ńžT©HBqV¦5UEÕ5Ōh #goŪ~vķŪĒĢ©S™ŸĒ„iNH@M×ĻŖštž%S EI¹™:ī©2„`[–m§t’Ēļt}„¶mZvļfóÖ-č8.· ·×ƒ×ēužł½©U=±źļh.ŒÄūCłä_ø‡Ęƒü§ßćGLž³ū’¶±Ų³šv"’†aaÄ˧ŒÄJ7v 4B’Š’K’y”²üĖ"’Ŋ³n!®;’VTE㯫M׹!½üžÅ»ųż‹weģ[”Ņfߟ‰æ•ž>pśĒ°„Ķļ^¼“}];¹ääc˜ńņE’Ź1†8›Š½ÄJl{4ņ_Āo”óLZy¼S|2j%<ģŒÕ}ĒĒõ?‘!ĄNy¤LhGš>|ķ üåūłļŸż€’ź^N=ż žzü®¾įFžóüģ®’`bmq!T}8ä=ĖßmóV)Q5 Ž:cUpž­D:D["¤Kó„ב–…4Ģāä”-„Ī›ņī–g§>£ÆęMkó8łĻGž3z¤ĪJ†¢HGPUPu ]׉¹āhŗF,cρVZ÷ļcÖōœ8kn×č}VBÜ/9–…J‡iYģܵ‹-;¶‹Ēp»\ųƒÄŖæCś=^noĀ B×Q”*(ÉTŒ ¼-ÉfoĖ>æņŪ=-ƒÄ@HĒ8–°H1rĶ ƀ“}Ź!’„Ėō/~·ŸH<Äž®]<»ń”¢ū–CžÓńį³?‰×ķē„-²ūšVI¤T„ŹœÉKhŖžJļp'[¬%f÷D+‡üśHžKīWņ€™ß@™Ll{D™”‰pR7i ¼šdŠūƒ¹uß0'M pø/F(j±qĻל߈-%ĻmĢ\é_±­Ÿ‰:gTuÄ€PŌ@UnMqŒ%ģ3€Ī®N^]¹Ė4Y¼h1³fĪ*æ”äķE¶Æ›[³#QS©Ų?šN«…2k޼{Ś0y’e —W3C„ĮŽ/<øexō$\RÓ“7TUŁ%żBØż¶ķXü…”!b¶mKŪ¶„mŪŠŽ“p-™öŒc Ē Ē‘¶VDKJū”ž]xgG˜ķU9q’d:æ&𦓠Gś9<b×=ģīfئÓ߀¬ĮņWa»iI=¾ń7$Y Ŗ#ƒuDWmćĮ÷ŸÉ—Ęū8éųĶį•׹ųēoCRĖ.ą+ģ){žHTUčׯtśƒōüÄŹ%’ŅÖÕxĢuI”ņķ[7Š×׋eYŲæ€ŽĆŽČM Lµ9ś+†a°yÓF&OqŒsē/ą„矔a’³ŗßÕŁI}c#ŖŖ2wŽ~ż³ =”Q!”Ąœįīį†Š½Ļķ—©«•󟦖)5%É$‰Ž@Q3 V$::łēÉV>R”Ž~³ŸIL:NžSUJ8HRG™X*"AVՄ0 †®kčnń؋x4NKėnvģŁÅŌ¦ÉĢuĮ`łyßnˆD"loiaĒž]X–…īŅ TńxÜx¼žŌ?·×=āīÆi(Š@IøÓä?ó(iĶgķ›}_ż’€Phl±É„¤“±¤‘Čځ3 ‰ē]_ł ÅHižVŠq×Ć_Ćē `ĖĀĢ”h»E^'Ļ<‡…Ó–Ń7ÜÅ_Öü6£Nó„é|ģ’L}ÕČ¢åpd€ū^ł1›ZW~ØN¶0IĻ·©Ä«]ņuĪsø’ūœ[Q±rłšj^VĒ›Id’éSŪvr# ź’Ž#°ēnŽā½§×ņ‡—U’žÉ®µ•.%āż+żCaĖń#w  Cq\š‚ß­āRK_,)-Ų“O?ŊU+ųŌ͟¤¾®>£ģégŸfł§oN¹ż+ŠĀ÷žż»\{õµåv_hŖ¦ ³2›œg_Qyę“Cė¶®>÷Ś{ßń„/Ūłæ×œ²w—[IČ6Z°łpušWÆĢXśģŽĘ«.˜Ó¾ŚŁŪ¤Xp‡Vb @]×eqĄ¤Lā…9ķœs–Å”GŅmɎ‰Uv=õ6 ٵK2k–óŁłg !Ž6 ߎŽpˆ’ė/£ź-4Wŗ¹r–Źs§ ?¾bū5UĆÜf¬PŒ–a^kiå‘WW²©b"‘Š 0ƒ•Ų/r,†€x¬ų«GӑµÕÄæ’>g­R[ī1JÅöݰl‰Cžā¦ć!Š< 6l½ƒ]Č_?Bæ¦ÓéóÓØaĄ[E\R°,D¾qPĒsūZę •’$\­“<Óp> %æ¦ćą@?UUÕøÜnüž7|üŒ“‰āŚ5«ØŖ®AQśūʳ„«Ŗ§24(§…zĢ6O„+"]…MÆŅ–B*Ī«QJ)¤BJ„Pń¤ßDv4’(_ĪÄ„`µbäæĢAli” -ÕʱJž³:7®ä?»ń’Ī#éV,AA 4Ŗ(( a@=ÓļrĒ0b.b±8ڲw’>Ŗ++™6y 3§M/+&ņX‡”’C‡ŪŁŻŚJ[[BUŠtĶYåO(ü{¼n<ž‘Ķ„”k:B)w%K¶żM%’952:s_e6?~ä?ćhä_JI$; J °-«dĄøCØĀ™č'Čź¤.xaŅZä"ŽFJóż¶ H$”čPöyöͳ±ł÷»ƒ\qÖrī{łĒ+ūSjgń¹÷~·īe×NVīxš _5ēĶæŒ›.ü æxźv6x­Ä>åļĘɱ 9Ś}<Ž¢9ey xTgå_Žˆ’Hļ—$ś¶$”ąŌ³S$R@•GĀą(}+‚Żķaā¦dƞ‘{hżīAš'zRÕœQĒi³+ ›Ōu~ņ聱0”]”ҧćŃÕŅ %(>ų—yņé'łē/f®ƒķmmå¦[>Ą­Ÿś,uuõÜż“»øķß’+?teĮPŗBRÓ†™Éü•}ư…® łļ\æa;ĘgŽhƹš;O/ųÖ÷Ÿs©ö°"0ć–ā7,`9½ė·ŸzĒī–R&k…F,ƒrČlžńŅēó$R¦™aįĀy7p=;8nų;GG+bĖĖØuxG|A peź«PnęÜĢmšĄõ§œĄžŻ‡¹’éų³·†žiĶ„ėfbŌŌay¼„JL€®#½°„bę ³yę‰Ē¶MOw3fĪŹ1  bš&“šš9°ÆMÓ2\‹ Bxcƒ5Ńaū ß§}‹HéhÄ#m`x\žģ:v<·‰ģI’›Iž“e½fÕ®š#&’é„ē˜ ’łHßQō` m!EUQ-ĖIčrįŠø=.ŒøA<Lj9¢|:ŚŁ{`?.M£©a“ilh@;†=lŪ¦£³“ƒķķģ?ŲF(BKdCšWq»u\.—Cö=Ī_=a péЦ9"B¤ (c&’i(˜Ń"£­DĶņŸqčüßsŚ&/±Č )ū±²‡‡ŃŽu¬"4|ōć’ć2āˆć(@Ā»U ' #@žń­J#’%ÖĻŖ(€©u³© Ō²~Ļ«E÷N/™;ådNŸżN†"ż<øņ—õ®>ē3Tx«Ł}x+æ{ńG”»Ś73"ŌWNFSõ”a ’QĖ$’£aLʐdŁ(äæ„w]ĮŠÉMł²%xœ WJ ¹śŸę “ŽŒÄ’Ė„W€”Ÿ.ńk’9ö‡uoV ĮpŌb8:ņ»JI"żßų¤4-ÉŠp”ėŖØö»p©JRžf”żFo[ˆ\e’-[·ššc0eņn¼a$EՄ ˆ•!š‚„ė(£x%śū©svlūä9Ū·&³Ø.aKE³„åüʊ¢ä$ĖQÕB ]™ŠuU–V32NÕšÉäŠÜ—¾ōµŚż’Ÿ½÷Ž“äŖīÅæ÷ŽŖź&ĻĪĪĪF­¤•“Ź !! e!8žż0Ę<ólƒ°¶1Éüž6ĮHȈ !”œAa%­“»Ņjµywf'‡žé\U÷ž÷GuĻtWW‡I¤ł~>3Żuó©®pæēž{ĪĮŽĄņåĶI?éVJJ•JIõķo’EbŻŗ·”,ŪżGGŠöʱ¤xāĄn°Į‡X>/ūž„y›ĻA?Ś/<_XׅkłžyÓCxµs-kĪ@®]_8Ēšjļ‚5ރ‰Ļ’'¾žżæÄ·#Į#‚Æ*/æv%š3ĒÆښg¾ĄšžņćS7?ųšó=¾öłņ¶.yėĢ÷?ł°óē…Dų£æĒ×0č `_¬½Ķ]HDā°fėż_I0’beż’”„­ š®ćŹk®Ē²åŻxźńG=ōnxß°ł…MčļėÅigœ…-/½)%^Üō,ŽućMŲ²łE,_±§œz:öģŚY·/Ī™•-vV`Š tVūÕV° S†pg“k @CkµČ=4X)aN€Mož9Čiæ®Jeug)Ē|Č’t_ÅŅ“Óqęxīו‚Ō¤4 [|–ß ÅgZ°Ģ<,ӆmŁčźĒ¾¾ƒZš[ŠŁÖ†öÖ6“¶“Ń­¤F'Ę1<<ŒĮ‘ ŽŒ@I MŠ4 įhŗ®Į0tžŁ7 ų {ū5Ÿ½  ąBü³ńéU’ā9+E%¹/O¬EČŻõ#äs»\%*•nÅC…ĢC®¹Ż‡G3ҩٛ’@f!Ąņ”89ž#8wBwń|\[ŲéßlHi1ūĘ ž«;NĄĖūžĮĻžśwLfĘkÖõÜōÖ?üāéļ!•›±/?¹ēll\u2ł~ōč×*ü„üšRI8>Ąœ®ā”žŅŸ IDATųō†&ūŖ¾_™ŌąKl–äæįq•u_[&ę”°„Drb¬…ʼnŠ"„ĶgĄē"!Ž ! #kB4֌x¬”H”`-ĶmXѰcāŲ¹_ūF’śŗš|ˆµé-¤õŠH™SOوǟ|·Üv >ōįµÆį£’”RųÜg>­Ä‹ąš°ć÷ ošµ ŒqApÖ~ł="' ņ®#1æøŽ Ā盽¹Ō|ūæäół+ÜéwÜqGé!H”ŪJ÷'=ąć³ķ{±±¤x“aÓćąłg°fp«8żpō¹¬?zžż7›šÆĻmÅż©<†6œ…d“2›į»7tŠBvw!½e ^ū·»šżæz?>Éö޳ø žų+Čīķǐ/ˆ½Ńö“vaØ©YM‡š­€P`¤xWµüt:»dß*•„*˜į©d'¦xłÅēńW_ų2„Å?~ł pB*żģ¶ćų7ą?n¹¶mćąž}ųŅ_’F†‡p˾‡/żć×ńó{Bbb·žš?ŃÕŻ]9˜¦VMł¬ņŪV%ź+ŠŪĈĄˆˆICÆšG!K,ÜdeNäß3£¶Ó?ƶó*);‰Øłw ©Rę5į«ģkŚöź«Fēóķ‹—BV0GęA×lA/xū·MlˆeŪ°MĖł³mL„“˜˜Ją•;@ŠĘÅŠ‹!£)ƒß_ah2o˜¦‰É©IŒO$0‘˜@br扤Rą‚CÓ4ųü4! ś“æĆŠ”VžuĆYéŗMąš€`%^żyaėÄō9*?Įå×p}3’RŅ\^t~Žż]Ć(ķy‰üĻłœ5§šRJäkģ’×4 įPŃp ėnCA„‚!!ų Ą]čĢ™µŪdĆ&g,Y;‹¬Ģ:ŸvI3‰)s‰|Sf^_‹˜łwe’ą”Æāżż)N[ż¬ļڈ;Ÿż>žyża”.––æęģ”%ҁm6įÅ=O•µ{õŁŽ³“ū7’‰te,ų“{Īcū‡·C•xµ}ß[?-kń·?uĀ 62īzG»Ó?w’瀀"I¶­@¶ •Ļ‚ĄˆXq5¼hiĀXŃ€ˆPœ€R„hŪ*\ō±’bŒ÷큁$ZĆzZ‚ˆ“‚_–śhÄą£ōQüģŽŸćÆ>÷|ö ==ĒūšĶĘuW_[Vö“§į“’Sœ°žųYĖ”“hĪI×öūĻl8ž¶—æĪ'T ˜vŠG ŗ.³Œœ4Eœ„PęU'zģ“oŪ½£8ļÄŁ’’"FĶQDõč¬Is)į©$ÉD«¤sęĪq“„ 9<^#{ü™ĒX\'Ŗ!9ÜdÓK×9cEócø`Ž¹ØąąDPš”Ūg@ŚRJŲ¦iKŲ¶ķų¶°$l)!-Y;ōcrƔoZP €` „`ĄŸĻŸaĄļóCĒi“^r)ŚŅ†’ JJäLł|yÓD6›C:“F:“†eŁ`œ9žŌ‡ą¾€BÓ wHæ¦MM/D=ŠuhzA!  0!fĢü9Ÿ&»Œ³²ßćX%’½- łw ś˜&’œŹĢ©^éź4A[K š›šŠ£)G8ŌØžŁƒ@Hä'0’Ępv#Ła ¤!i¹łĶžü»óĒS#ų·{æ„sÖ’ŽsĮĒpóE†3×]„’~ņ»¬hūąČnŒ%‡pūoĖ£Ū¬l_ī–5H¤ĒšŌkæ©ģ–s\²Ń™j<·ėŃéō³Ö]Œ“Vœ…ƒ#»š”‹?€Ę®žmxźµ{aŚłé~ēLžkŗēŖ²@ĆäŸyž:Uėz*ü:X1؟ćC‚Čq'EĻL&ØŠ¬rJµąœģC’Īßał o=źoŽńd©L§.oÅņf?‚>męYY‡»Ŗ¦W­-­øć§æÄwž÷w°ćõ׍FqŻ5×į¦ßWQöÜsĪŹēœ;'9ˆ3Ŗ·ŽŽŸ Ē&C'5Ņ^@—Ćći’¦ņŌŚŃJįéŠs‡S¾¬dÜļ£ ×‰O£ü™: ««ū?R©É{•R$%`ŪfT©éL)¦5Q—X ą4$ĢaʒąM‚»ĮŲs8'"pĆBīĄo‚ƒ_v>ĀȽ/ᇶ…ż`¢{5LĆ7’P¾Ō²•ČeRśĒŪq«OGģęĖpɑœ×żĆ`}ķV ö#Ų_†]ŻinGNœ½’©Œ± 34„RÉźŽ”'jxū™U_Œq¦l Ś&Tŗ¤ėaŠM–Ć’Ø?œ‘&*ʶŸøŌ*V‹ü7Ų »ģ˜9Š5ĮÕ3“­FH³×€¼Čæ{6ņ_J–Žņ_*+Ž«ųIĮˆ8„®9Ī£¤„ōł ”„m+(Ū†mKĒJ@ŚP¶t¶„T‰WRĮ&…D2ńIrVīJ¼U½W»N‰3Vüt¹ą ŗĻ€/ēňéš6mīÆ|hš€Š5čĀŁĻ/“BD!ĄøʏĢü‹ēĄż{,&łw_ä MžkŹ1Oņ_zėäŸ$“³ß’‡oiĮʍŃÖֆą"X»ŌC“ÆM¾f¬Ļøź™4'q(Ż‹¾töMķE"?1kņ_ŅnŚõ^ė{ 7^šĒ8sķ…ųüßÅ=ĻߊǶŻķ„—+TÜ“ėQ¼°ū‰ró~Ępb·c(¹ķĄ&Ųn2Ė€ Nø ˚z0–Ā {žöĒšīóĻė­ŃeH妊ՓŗĻĄYė.Āw~óydĢŌ¢’’źmW;SuŚ-ä{¼!jÖe–Ls^ķ` 'Ę%Š@Θa”]GK0=M$1½/ŻĘŗŽ?_4äƒčā•ŻCPéaڹÉa{ĢĻā± ŻŸĻH$ŽH8ŠH4†h$ƘqW§ČŁP%xÓ4V­\…o|õ‹+ˆRUkĮ9Ažę²MĻżĶeĻ=«i»čÕa÷H$@œq"Ę5u’–e+šģŚ?ķŒe^łĀeŪ^ŖhtŽ›„ ]#2+éD]€n}jaJ¼wļꇀqĀø¢Q%©µ5®€…żū «V•…DŃhÅŃ^|Ąßųgo™»D‹‡%Ą1†Ēē@ģ;ō3åųcG†ü—€½ćl\ŸĢĮzl;n3€½šŽńę6ŲFóü”š …!{ŗ‘RYō}īæšŸĆ XŸŗ— >ūó6(üÅæĄüöķŅ ģõ‡±-֎ķŻčoé@ŗhś/©žø”,/c@ĪŪb∁PŠ„$’8U±%šq3m”Ąy„ÕCŃ6®Žl±Ö¤Øło`²åS™HŹĀ6ø&pØBžŻdi‰üW•£ŒüĆ!qD4ż)84”t)/Ó¶„T¤¶- ¤ßł“Š ¤I'µ”EOŌĪ{~:lPnJ\Üw_/®ö3^Xńē‚;N …˜6įē\@/}.e@iYʙ‘Ļ“Ļ]'Į›,ł/ż=–Č’‘C>kĀnĄüŸsŽ––477£¹¹>ßBśĄ^8ČbF šß¶ćłqģ›ŚŻ“»q0u vˆœ俈d6<üĻx~×ćøéĀ?ĮUg}›÷<…D¦Üœß½·"ž``bEń\Žć\ķŽgæYpžwĆ[>А?Š×ś^Äż:rVšŠš‡o’+œŅs.®9ūĆųŁļŹ- F—ėœČ’ōėYÅŁĆ*}6‚ 8cŠ˜Ćoƒ‚ó) LC‚ŗĮ'Ępˆc¼Ø(„Ģõbh×c¬sż%G­`h<ƒż½½ćŪhėŠoi[fČŹMk’•ėBJ1C7( #Œ ‰āÖwu-;b2Į9Q# n¬ļH„"®3Ņ®NhyķÕī¦ģ’śģÆNūīŲųŪ’uå¶Mµźkš ²=(‚'>¶+i1ŠŚŚLhĢ`Yų{8Vą³žv‘†5g,)ŽBü|NZoģŻ6öĚņßVæĘāƒ1°kĪĒ»÷õcäą^ܧū`o8 SĶ!Ų󵚔āĖa­fHälģ’Ö]øeĖNŒ|õxOg3*œČ-F&€?ü22÷?ē¬üūĆŲÖŌŽW–­DoūjLFc°ucīŪx4?7×ĻG”£¶P„įž@ŁT6;'"Fäčõ ŠÆ“ Ū^ņ_;æĮbŒa4?ŠØ­éąośŪł/ķØ!ņļź¬°D§•ˆ;ŹĮo8kLJ)'ܔRNÜié+Y8VŹŃW)c 03ļœŁ©Ź€ņĻ ŪV¦É?ƒ` Œ ‡Ōs!xįXĪ?Vųä¬Xß!’NĪĢ·ęļįŗ6–ČæKŽ7łj›’3ĘŠŅŅ‚ööv“aG—sE³ÆĶmēąĢ¶s±Óx=±;Ūїź-YF}ņļŹ|åĄ&|eąUt·®© ’•Ķ8×Ėš¤ćgEkIĄ/DƒMųČ;>Ÿīdz;Į¶Ļpüœµö"Le'š_9Ėł­lić±mæĀ)=ēā„®Ójōė•Tė%V^wĪ俁wĒ[¢jݲŪXəPK˜!Ī$ÅI ’8³9`' 0 2õE5ƒsē ąœ >“ĆyF Kķ»]Z«ĪõėFųØ»”„"¼°}Z~Li¹}JØqbB‘‚GÓÖeӊŘ"IÉT‚%“ `8Ųw€uu-;āņ)٘ž… ^w.’Ž3ö~į×§f6ļo>Ż6•?©ßP †”;J–:AO?UXŌDöXUæąÆą(އ%Ą7¶o?ŽĀw9ĒqGz,„Š5ˆß'>ü•aØoņŗyb©h3¤QeGTĀlL1ā BµōĄģ±0{߁{®ų4†žé’Ē{/;=‹9ēūÅ#žMLM`Š0°7ĮkńVģčZ‰ƒķk0k‚„ĶŅé_ø-Ź ÄĻübĆē÷cٲåŅĘą@?¬N¤j¤œµģŒˆq@Tś= «t¬ś,d¶?¹›dŌ-[‘褎ZcXĆÖxd-‘’¹’WgUå`WåŽæ€¢©M²āIŽ_=…ńŸ6F-†§*qF5ÓҌ|¼ąØ°h Ą-`¼ęż‚óBʀ"įgyc…° Ó+żnŅ<}šŖ_å?Ķł#‘ņ0’ƒčģģDgg' £BWzĢ"؅pzė™8½õL$­$¶oĆKc›1eMΊü‘5ÓŲ5°­v§%×Ėó{Ē„§½箿S™ ¼°ē t6­Ą»Ļūā”ģ~æxśß~=ˆ÷^ą8ūžłÓ’™|Ŗ¬YMs~éÆŹ˜‹ü×ėםēń–ØZ·ā/*O‹Éŗ+®ösŲĢ&‹1˜`Ģbœågf8¢·>ėŗ ”3ā‚AN\0āD D Œ ‘;ų#Ņ×~"XWÖÌw ĮĪŚX_Į’ “ü¦‚®“"ß)J)ĄH)ē=DÓĘĢQR£c£ŽΦq¦Ģ’å+„ˆa–‘¬ŠųśĆ'žb+äÜĆō¦6Ź×tAĶk„æ2J5 @Ā3uÕŖU32?ž8pńÅ^ÅZ Ÿõ=dń‹i ‹‡½ŪĮVöįJ”Į)[ćˆÜp1ŽwėC3ö!luĀéČs|˜”Ā€Zރ| €ń€»wĢ›’£ļ<}ś&\pĘ ˆ.„ Elzź‹ßCś”ē0&t ų‚ŲŒąõęvģéX‰önLEZ`kdŻWymX` ĘźFŠŸqÖ9ųŹ7žÕ3ļ•-/į/’ģćųŽį[_ż ~÷äće.¹üJ|üSŸ†®;įĒr¹žē'>†}{vĻzčŅŹ8$Óź’βdŽ.…ØTL;llbR?īN’fņfRMe"a%Ф7•dÕ!KÄh”Éæ{¬Ģ•V“lzÉįžńyÉį5‘tĖQ1ÄŚNēJ ^łqYĻ%{åyĮ”“ĒPaʝż„3ś¦WśŁ égÅ8ŌršĀ8ˆ3'lzŃ/ ÄæP“Ģ%ß“C9fNSõk£ü§9vČæ;sĮČæĒ]z¬’Ȧs°­™łrkk+ŗ»»‹ÅŽi¹ADąÜŽóqvĒyŲ=¹ /Œ<‡C鎏‚sxĢ,æß²ł4žķ¾/ā/ū<.?ż½øüō÷Nē½Ö·?zōkÓNż®=ē÷µbĖž§±e’3Moč>°oųµé“°?†óÖæ†ęĆėż[°gčՒ178źZäæzחzegIžKįö`p0Ē–Z2Ęl,ΘÉņąČsĘrLc¹@ČȅĆ~Ÿīdœ4ƒ“&q‘Ę1ĪĄˆ1āĶÉō“@ų¢Ć¶0R{ū8Ų;AĖ uūā,¼įō¾9aZ)’JDŒ”VA)bD©$ąlA#bSÉ †£€³QU—…Åį}ż±3Ošõæ§qŹ”€Ņ…Ģs+oėĮdV“Nd}ĒĄi]Ū@AE  € Ą|•™&*öŌ@( ”‡ˆć˜•+€ |±pģ­E8Ā8āÓ{·ƒķ¹”5¾u¤ĒR ēoĆ'_ĘłƒĆźEŗ£–‡ -€SĄ Tó ˜z -9x™G_Åųݟ¶+ĪĹŗ '_rš¾¹ņœ üę·°’ć.dzć\`ĢDŸß}Į8ö¶v¢·c9ĘŚ:‘öĒascž2ē 0ėØ1Ą+Ū¶ąß’nĄ…æ׎p#žņϜU ĖĢ׬ŽDš©æüküš{’wżü§š†6œŒƒū÷ĶiģŅ2L”3 ‚UŻĮQŲiU`B’ˆ³Šē•j ś@žļ™ŲŠ…P‹ü{`07ˆ&½iVäßĶlšü—·…&’„ŁG„ü—÷\!nj½™räųœrҧw¢8Å4ÓnŖŻ=–ŽeĘ9įĢH¦Ē]”‘ͤU•ĆMš]r”µWåņ$Ķec+k¤öļ±ČäæL÷õ\M޲&“ćX'ÉS‰48ēčģģĊ+–mG88ÖĒŽĒśŲńČĀó#ĻagāuG5W”Öśł=,E`pā žįŠsÖæė:O‚eēńŹĮēńJļóÓہÖ.; ēŸp92ł~žĢ÷*Śł#8÷øKĻītœ‚‡ż1ü«æŠ¶Ø³·ūņÓŽ‡WnĀ-O~ y«ÄŹ£ę˜kädŖZ„nŻŹg]濖|wmgŗĘ8SēL‚Ćf ćĢä‚å4Į³ŗĮ³Į°®>M‚ æ¦4CÓi#MćÄ88 k‚Zäo'{³Ķ̧ń›bp<…ĶÆīµ£b8ß”wūćZDX§~ĀŗæˆM¤æ×oŁ)é8Ŗˆ€“%SD’ ¾gˆ9ŪŃĄrfš‡gk ²jś·”\£²-9€ś&ƒ­}‰š©µćŒĢa:ÕŲ]_¾jėóeī°ģĘ=ęéŗk UĢ|>cf’¾‡G@÷ś @€®Æ}Ö¶ÕńŒ±“«õI$g…` NgÅæTėpWƒāV,)Ž <¶Lā#LCĻ‘K-vå[pÉw~‰×Gb“· 鹉M͘ƒ›‘Jų‚PB‡%NĀT f  ©±>Œ=±‡ī›£>¬¾ņ-8į‚ÓŠqę Æ[ͧ{æŚņ&°»źŁW`?±łūžĮT"‰).0į `Čš”/ÅĮh3ś[;1ÜŗSńf˜†’ Puß©³ƒĮAŒg·“ ½µ‘ņf>ĮžC€©ÉIŲ¶=}\Ė»W@×uÜĻÆ@D°- ÆlyiĪc·óiÓ°¬ĢbŹ[!B^Ž ŒÆÜ&jMNŒæd§Z²YOŒ ƒ”Ā…½ŽwϼŚRR‚ģ\†kzRųXžqę­P43õP@ńmC¬āĻ€“D 2ĻXmāR­®w3Õ*†óĆč¬˜©ė&KnāVH«I6+ŗ‡«Īų .Żųœ¹ęmxzē؉ŠgNi^eNĆē£^ĮZI^ķŗ_ÓÜqhZbNNŒ8@œAqā` œą ŗ`š€®käó „ÜŁ sB×A>æF b”©@ų‘‘W™M)ėäHC?übŗg¾«y2uü²‰ńu­¹É&ĆŹ“zrlĻĖæwšed7Yžƒk»×Ż·EÓ²¦TDR)&„""“„c D¶„Ųčä®ä’¹å ¦eS:›²ó¹œŹē³Jڊ‘"’ND%bŒ‘ahV(ģ7ćĶįlkG4ŻÖÉĘćŃ|$ä3 ßÖWŒ „1®Dб‚7FR224.‰ˆ8AIp"0ŖH‹sNՖķ8­o›LDŗ_H‘4F–łę;ĻD5Šė÷”+»(³(S”øīhjŠż(Ÿ7[–")UDIÅ „h*|‚ˆ8%ĶyüpŖ;8¢XRcø Ēė<Ń€õhøB°£Óń„œŸŽ3o{[ĒGŠ{覺WVFˆ Fŗ!tPŠi ō(’² Łį1LŽaprū3)ÄóYÄ­,āƒ)D%"ĄÆ$ 8ē›Œ,ʐ҆†”īĒ¤ĻÉH “±&LÅŪ‘ 4ĮŒĘas$ē»ßß’ƒ‚ū&“ęcƢƅÅ]æøŸü‹Ļ‚@xč¾{ēÜV>=©Ą‘Ó}|BóńœĘŖ+FˆĄl·%€Ē ž\+ •D`h°’g±*䢘:Dw`…7YržBZ]Ņ욤-äæ’/¬„•SŽ£Įw§īkĆ%ĒB’ę%’uäš¼PŽc†@<Ņ ]_Zńomvܰś½8ŚĒśĘhnøž³½Šéæ“W;©»u .Łų.©w<¢Ķ„§]Ż~>ų¶O1†{7ߊ‰ƒ ŽI‡­lX2?ö›Ķ?Aļčnl=ųl1×ė;ż«Ģõ~O—~s¢ū9'ę8d±-29g‚ćĪ|‘ ®3ā#”qŅ Fš104ł Īņ=3śz’Hn`ź‚0ߢ‡”Jaėī!5<>˜9®+9uRĻŌŲqŁ©–ؑבBć²µyÓsĻ?qŽ9fĪ4³‘šĄŽ«N9ż‚§Ÿó³9ŪVL)"SŅ&0ED $•„”'µd“OB*’~ň”‚TT$Ąˆˆ‘” éV(ā·b±`. X>C“\Ņ„šŲĘÆš²w…pĪh:š“ĒR=ēŒd•©ÜąÖA IDAT‚˜ńŠ4ŖšųēeéÆė™–k,u"ŌĘ$FG7’&”)ź„Ā”ÆY”»Ū‰ ģüMgNøŹ€oĮ‰p7€Ė±p§cĮ°¤xbßš3>p¤śē7ŗČ&?7OsćĢć±ģÖū±2•ĮĆ&' Eę*Æ4 Cź~Ø`+ģĪnd'F1™ĪbhjžüV~Ė‚_Ł0”‚ bRpX¾rž0ņ”rŃ0rž(¬H¶†ž…]ķ÷ _9„¦ž¢õ†Åīļ’÷߆šéĻž Ž?ń$üūæ~¶={½¬™NH.XŹńQ_Xd`T÷ąĘØā%^¦CØ …=ŻD£V]ļ&¼+—NŠr2‡I+øGŁŌŹMx i MšŻÄ­tģ³&Ķī±!9jՆäpĶZK³—Č?*Ī©ūņ¼ę!GÅ5“Hr+BC,҆€Ļmyŗ„F°2¼ ^’Gxyl3~;ų8LU… Ģņś(-˹Ą.ü3p&00q=­ėš’]ö7øó¹ļ#geqöqćŠÓŽMhxvēĆxģ•™­Ą¦Ģa<5„ępzZÖįĄč.08įK·x¶ö;©ā™3‹q7PŃć [µncćš²Ōó¬IT¼Ū ”rčc…9$ƒó|u6c1Ę ˜1… FąĪ³‚ +uRĻ±‘ÜŽĮs[$VėI04ž¦W÷2ĘdśŒu™ÄÉ=ɉuĖ2Éę(Ė n((8c*V©ß»öåß=qĻēgÓz(—G·>{įŁ]żĀS>Ÿ™WŒW¤@d)pʔt|8ėϊ‘‘’ $‰g¤¤Cżm €1ʈs¦4]“ž n‡ƒ~Ėē¶Į %4o«Ėr(ČJcĖFŖĶBh”·cŹl¢VĮҁ€ŸMĻŖõ>”ŗõĄ™ī"“>`€K|ĄfÕÉaĄ’ą †½ŪĮč |Z.i¤¼ī®’ĄŽgmOo}б øó[å~[:Vg½ø÷’”×?éB`ĆłĄÆ¾ ˜9`ŻĄIoŒ’ŻWŁ$šŪ_‰”źćhŠB_Ūć{G°mb‘t“f~Ö?u 4g[€ Ņ"˜–‰t~ĀĢAĄ„°‚™`Ģ1⤐>?(…Ä Žģ…I¦ģ…}ĖpR%–œƒ4 z€2Ķ×0ĪÕ&Ō¶m|ūk’€×^يOüł_Āļ÷ćė’šw³kĆĢAšŁl ĢGa1nDxm½¬`DĈ 3Ŗœ1LoØwĘ=óü{õ;DÜhšI®BšŻ.$i.ļ¢Žyöt5WŻ’“ZrŌ$Ķó”£&Įs“M/9\ē¹4{‰ü{Œ„¼³cGŽc‘ü3† /ŒX“ œ-śĀåg“œ…õ±šČ”°kźõņõ®Z™ ødć»ŠŻ²Fvā_ļż<>|ń§qźŖ·ąÄīļNS¤ššÖ_āžo±X+“ūōėāź3?„‹O¾?~ü ÷[GƒÓ?w¢Ē ć %§ƒ)ĀŒĒ”‚õŸ“‹³PĒ6Ąż~™žcć%é ąŒ Ųjeg" ?6øk`ehxrc\ˆÖ9ŗ}®ÄH"C{śFlÓͬīČ'ׯČ$Ž_ž™źnÉeC!²t.$@’H.‰~Ÿ™¹ō]Æ<õŠ]'½5›ņ…ÓSų“÷žóÖĖŽµå‰HŲ4‰;fłÜf4­ˆ ®ˆI)ĮH‘3'…"bąJ‘‚"F`\ 0W\J÷i¶N\ ĪHQ“m«Ā_5źĢ9Æ Bp"^ޜŌZ ·« Ą AÓ¼,JŠ–ü C/wčŒ`žÖłžü€3Č{\ą½XR,a±1xģø0Īį sZ6ė–­āķĄųĄLzŪ už2S3éM@rĢ!’]ė€Ó/Fū€×Ÿ¬<Š9ʃŌxż¾OZ{ūљM"6xĆ]=0õņœļFĪMiŗc®Ļs _R³Į|L€+— q?æĻ¤…ćÅ0õÆ=jŹõOM%^ŌęóGŸŽw&&Ęńåś~ą>¼üāó ×ĶN K&4üb Ų¬%øą6ć ^cZĮŠĖūÜY x̆ŻĪ…<ņNlč« ĮMb`,?Š|0æšU%Ķe) Eš+ZēÄ·"ě›4»+Ļ^"’žrT±ŗ(ѐfWVm9Üßf)Gé5“Šrøļ›7ł×„Žx“>ćˆ;1C!¬…qŻŹwcGb;īæ9™«}xŻŗ%_Ś¢]øāō÷Ɩ6n{ź;°¤‰<śUl\yĪZ{Bž†}xśõŠ7¶×³Żßķø—n|6®| ‚¾02łTķ—M½÷Ńa&’µŪ.}nzLć8c•é%q˜­¤å„< šŌ`…Ąƒ€”)j‹äķ oļŌŲŌ@z’ȲąšäŚØĖüšfĢZĆfš6śF§ŌHbĢ„=™ķl63kŗrSk;³éå­łtŻ;wąÄ“NnX`å3°2S¦Ɓøč F“¤ęcuW„“C«5)Ŗ’ŲФØī„É»€›Ä”@čĻšššŖć˜łÆč׃4{‘„%ņ_UŽŹ*rĢ’4W•cHsyN Ҽr”^C -‡ū¾y³‘’€?Œx“}iÕqB|V„Wāž¾{°/µ·zĮ:˜3Ž÷_ų§Š„Žū6’wپž-žĮÖĻx6ˇ*!3…[qJϹ8¾ė4¼“’·ueØz]×sś7§FØŅȋ×k(+Ųõ‹–FX-—6)V8$Ŗ>HUp€ē9FQDŲ*čĖČÖųAslr054é×Ę:SŁŽ¢ØĮEPčŗĮu! g¶­ ‰(—7‘ÉåT:“S©ģ”„T2 Zł Żvnys&³¼ŻŹt¶ZŁx oū|Ģā%Øt™šXA20Ή4µXŁw¾wū÷’lĆEÉIG pßķ'æżŚ›w>Œ˜9Ę Ę œœ‘LŒH1+!ø’¶8'!ŒcЁ1īÓ%9ĪˆṐб“Źˆ=ž*—źAš‰§» °įŒŗŌLĄņH›aÕ­<"¤*“f0 cę°ŗÖųXį{²V“G K €7&'Ą4ąų¹ÖpžÕĶĖ€=…hoBsŽĆå „«b9i͐’Ł¢½~%ŃdšˆNNĄgY`– ¶XVõ G¬žO®Zy‡œƒ Ģ`[vOņŠąS¾Šņ·Ž~ēˆD¢HLLŌ/ ē‘›”Lc“F÷FZ“~=&²ŒĻā7-¾˜Ü±„ob8W'±ÖÆWÆX½}’UП@OØÓ+&P¬œŅ”}ó$’n²T1f²“Čäß%Š‚’÷ k’M/9¼Hsŗ¤Ł-ǬH³{,uäX"’š¼Ęfpʏ¶#ą锼)ŅBøaÕ{ńĀč&üvčq(r1ÆĒĒĮĖūž†. <“õeyÕ®½s{Ī=īķųĪż_( S8žŒ:F›5Ś®Kžx×U}“ÖJjąėÜŪJ-©ČUŗ €“UŁq‚k‘˜*Ÿµ„y„sp®ČŠMŠ,Õ֔3×t¦³“©ƒ“ÉŒ'Rŗ˜Ģč"™ÖµœÅ™”‚I"h*Ø)ŁŚ¦d8hYM!iĘĀŅj ŚfSȶBAeéI"ĪAPµŸ>„<:Ļē®zßėŽóÓćß^“øū'ė/½ęż» Ē̜ēÉqq”qbŒQQĄ‰9Š((å>©x•čL•åųL¹éU~ēKµE7dĆ%Ėį¬óŪŠuNŽīēiöŸą‡k7Į 6˜A‰Acl €,D "2¬‚³’æˆGv ƒ%Ą{·ƒöƒóÖŌ/ķ Ū&G €"š—`Īj~ēź™ōxA 6^PL=€5§{·Ģ¾ļö&h„•B$•E „ˆ5ĶÓsfŃÖ’  @ÅŚ‘HŽöżŹŹGOÖ}‘öł“wž…£«{ĘRi°æ‡śzqÅ5×aŪĖ›‘ĻēqŃ%—"ŽąŁß=ÕP›Łńa’f&ē ‰ž`LŪlÖ'|AnYµŌłpöž;_ Æ:ŖT0>ūɾ›lŌ-[‘č]¹ö¤Č„Ä@n=…€Ä­¬ł*¤ŁÕĒlČŘ˜ü/ųö…F|x‘f·5H³ūœ.$ivĖQQwå8VÉæ+«ŗE=ä8ĘČæ¦hŽuB×jF©^ĀƒįģÖsŃ\Ž_¼i;]Ģš([y ˆšäö{ńŌkæ©Ų×_ k;7`mēIųšŪž?łķæĀ–üz§ōœ čßSkĄÕ›Ÿ…šjy^O§ŗIŽ/GļŗeĖÜ÷V¾ŁŅ–uż@•85Ė %cåĮ‚t]‘(h(j ē-…°ż‘{oŻpI*„G“ _óŻ?9ī²ėnŽł@4.«D؟=8gT×w]Ģ°ĻŒ×@a¶Æi‚¬yö’€Æ,`·ÆD8*8^Tk1”Ķ¾Q·ŌĄ’ą †ÉqpG|>mŒ֜h†£h[¤&€©ąø3•’\ŚŁ’_TĄŽ—µ§g\H hŠōæM~!i#deą›šo=‚G#,Ģ9i:T0ŽllŽģÜós.Nśc”é5·Œ cū¶­é[_ڌ¦–4µ“L§ķ|m;õDsK nžƒB7 ģŪ³ õ©cb|¬īXĶl™©K׳Ø?"v5wźƒq1;w«%ąFj~T™œøÉs­ŗŽM̲u(Ū‡īi‚å&K„_šü—M”–Č’ĢØŠ4W”˜@M¢ŗrT~ĢCŽĆ軀•Æ"GÅ=é!Ē1Fžžš¢ķÕW0—°čXģĘļÆū(~Ż{'zÓ+ņŻ×¶ī0“UIüņ¹’@<Ō‚3Ö¼ +Z×a{ߋX×y2šĆķxķŠfŻ]µīlƐŚ$Ż«¬×żŽPRĶĖ{zƒ“Tõ}ZäōR©i@aQ`ösA‚g?Œ81NÄ É‚RPÄÅ'EDŒ Īc8)ĮøbŒƒ"¦źZ·7ą?Ļē®üĄöGīżļߞN±ä¤ÆłW?Ył»>øū¾p¬Ä¦Ö£­BŲ¹łań¶Ź–©$ʬņ ƒW čĘlWžtC#Ó¬ßöl ”§¦R,ąóŻ©@Āq;” E©ä‚VJÅ€f)8QF<ą`ńšĻK €72IppēÓĘXæCä›:œU’ÖŽcæŃ>'æuзñœŁŽ•ĻĻü øšFąœ«€–.ąå‡5‹‡KЇ@*æ’ŠsŁq<B«¾ē’h CFz015™1Õ·ėĮhĖś+˜ŠŖj+_Ųō,^ŲT_ųļ¾š™Ŗ}üż>;ėqI3Ōą›sLéa¾'Ų©ļŒ-ÓGÆł ¬µ5€Ü³-8~„*ńl¹±¶‚h471ÆSY1GŠīkÆI––Č„ MšKk’ę²Vē&G頎˜dāū.p_Ļ^rTܓrKäŸ1DBMˆ†šōH–  ńžÕļĒ#żbėÄKŽ…ÜŗG~Õ믐‘·²ų÷’Wq3.>éZ\“įĄŽ”ך_O|½~½ņ=ˆmĆu½ŸlÖ­ščõõz’‡Ąõ†—¶²ĖwÓĻTųĒs‚ y”a̰` ®ąŒ8$1ÅIpgś”@…ēcķ¤UUģ÷ö»·žD›ņ¹«>šŚĆ÷Žvā;RSŽąŽ[×]qƇvż&±ē¶±Vy-]+p.Z_/ś+ØĪĘ] æQH€Dk€jxż/U;®”'ü~![ D£aŹ īų(āQ(†iėM;6Jl'`Cѕ16»ŠÖGKŽfŽ@<f[ž;„g…iG€Ėœ}S-ˁŃ^`j Čgf6u̘’—Ö}äĒĪv€µ§o»É 5Ų(”W ŗRJ‚oŅÕ’btząhB.ڃCžxņŃÉŃ=ϐ”Gō!$­<&öIb*­ų¾p«¶­„Ū8 ŠÜ¬öžW ŗ€™cÆzGĘéŸWŪőĢō•æÓ\“±%ņļ-Giʂfw£‡AŽš¤y®røI³—$e‰ün0MŃö%ņ”ƒćŅ®wāķĖ.-±Ģ*Ą}”»Qq_U/®Hā×/ž{ūā枟ų§»>‰ļÜ’9äĢź”ČŖ·]õ VsøajæC=ž5R¦Ć÷–§ŗ«1%ŻJ‹Ļr*1YQCd¹•x* ¢l(9@¬ÉĢ^żĮ]†"ę$¤&}ĶwŽŗžŠt²±Y4kp’žb‹Ę}Ģ6PwŪænč– WõĄ…}ömo¬Ųъ%Ą ¶9æĄ–© ‡č7w:¾4ݱ+€¶©Åg”„HŽ’ŲqŲ¶8ėŠĘūN;›s ]«£(ąaŻ0 EĘᄦC5µ!Õ|v‰pāĮ‰×ž—–yD”V.‹‰¾½ŠČNk~v Ų¢mm^éŪj֒šĶO;ʼ&¼ä¶@äß»™…#’¶S5G§óßäæbD LžKū®KšŻc™…uPŽš¤ŁK7iö’ĆMš½äØ )Kä’pƒqŽÖęåś#Gz(K؂ӛĻĀå]WAxNgIž«€!“O”wl½Ūj»łoą]WłvØ^·ö;ŌėŽ/‡{«kŠ,”Ø mŸė¬ÆÜś‘s %˜­Ą¤“Š1@€Ą½õ /„A¬)Ÿ½ęę]•É„Ńņ«[»29”/Š7+Žą‚Fˆ}õ_µ–AćÖńŗ¦-ģ/‘­ ąŽŠ³ńmWÜtÓG§½¢mģŲxL­ņ×ĀŅ€#Œ/ōåŁæCŖBÓA¶Bb¾.…Ęś €Ö@fŹłE@×q@{s\*°Ņžæ×įg+N:׃5¢ī€i9ŅēCĮ¼ę(ƒ‡C‘£!ČP&Z²xeŌJżÆŖhėŚ3Pō°y—ŹOM 9Ö/Į(­łŁžp³¶¹u•ļ•X·1ŖøÅ#EĹżó– Ö{‚ØāMĮEƒęg ŽaŽóļŹ 5Y£ŠŽō>“ś[ĮĮ€J¶ƒ…&’n9šü—öøhäæ|$ .ĒłÆ”c1ÉæūĀłÆ8ƒG/h/ƒ±8sų%, NŠŸ‚€ą×}wBNær#Źõņ½¦Žu«Y?4‹Ež«÷[®P!»1Jķ„°k¤dِjÖ ‚1·•7ÄXz™2ó„sĶ>Ó6ø% A®¤ĘM L梁d¦#:” hYB)n01ˆā¹%Äøčržūņ£M¹ģµ7ﺒæ<ŌćɄŃr×OÖ]użĶ{ī ĞĒĄĮHĶg:=ŗĖŌo€Rø§yBpöLؾЉžEg«Į`€.ėuW~dUooļ-·ßŽ«ž|ņɏōoyņN“Õlf#€N8la €Äbw!°¤8šs76P®s%HÓA9 ‚~œ7Ÿ>ĒĖ֑ę™ÕĄ±` čX ¤Ž3Ąj ¶>ī(Ś{ź+†Ę 9`s‹sHŻØżčɳrv $H ļה&Av•¼£ \y“gĪAzVx%F•ĀĖćūLJŒģČ2ĖĻ ·.‹²EŒ-­l©‘~23 ›sžŅ|l_ØE{©­Ē·-¾Ā7¬øYõ…(&*łz‚)UaųÅ“‚ ŹäÄM ½®Õ„wåŚ“¢Ź68¹*2™m €xķ–& Ż1O›Ģ6…«;÷ µ†'3>IĮĮ4 $TńtohŌĄZpęé/Ś”Ļ^{ó®ūī¾õø+Ņ©‚ą–µW_’Į=wGbv™€‘Øj,±ąœWødŖšP-`€¬ņ}–еź~ LFĮžßgčås©šŌÓĻæ€`ŒMŻtÓU•”ü6l ƒgg³Łļ8„$ך=Ÿ†Ēn„£K €7‚ؼ…–/ZP»«Ēśʁx»ćŻæˆÄ`åæc®ż’^(ś/å \iż£`0CNÆ§XTsü—ĒāYü[(<œÜkó:ęŅ”sP° &€ać„NłĢH_*—;5ÜÖ½ÜiÖrĪL¤MŒ!=1¤@*Æ 6”…ųŽp›¶„„Ū·£©K ÄD~~qKąˆiŚa'’īŗõņ<'~…¤}™h÷w€•‘Ä7łG9ŽÖķ ‹Iž]œüW•cČé97łw„$±¬Ää8ZĮ¹@KÓņ„0Ē V‡×āŗžqWļ/ •ėÕS‹¤×#’ ¾7¼ó+ øŸkµŚöŗ­[5±Ö;“˜!\¹¦×¬ b‘ h¢Æ<›oą!Ą#„€±T»ēąYM#S=Ŗ:Ø:ˆĄrV,8ˆĒwłõńäźÖ×ūÖ,ė A‘ओ2’F|z„†1ļ]Åüb–ēv€f3{ķwżęī[»2ŅćÉ)£å®Ÿ¬»ęśī½;ĶÕ`±å ĘALå”ŹX;gåŹˆŗpO=GcŹ!AVžM³6W°P-˜_9rhl^ ‡PČd2€Ļē{š›ßüÜF*ÆŪh4zN6›}@Ą•„ųœņg t{Ų±ä`Ģć×ųó*_·ƒÅĚ  ĪČ”1<×hŲłĢ¹¼L 8JX{¹‘ck«T’æü8ē31T,;Ń4¤tłęČùĒ_Ś`Ņ3sąf<›†0óą¹ D.ć|7óąÅr‡k\³ē  Vl5F:6`KSÕBłG§Fvæ4¶wŪhzbXŖś”ukBŁŅćCŪūšJ ä9£IĶĻ÷ūcā…¦nć©eėü[ŚWƒ”˜Čńy9żsAzXč^[Ž’µČ?deƒłĮ2ĀćIšęHšü»Ē2Óż¢ÉQyørøY­—nŅģ%ĒBł.š"Ķn9Üētŗķ²Žź’ę#’壝µeuē ĒŃ Ę¹³ņæDžY¬ ­ĀuŻļ†(]Į®ø&Q–W™TńŠ«Y·zŪ•9īēZ­¶=žŖ5ėÖn›y}T-ęaą=/˜iÆ$ŸdC”2]Eˆ€T>¬=³ū]æ{ż†•Ć“+£s!’^嬖ČkēŸųš–KOŪŃ×Of…°l0R^Ķ{ļbØ6å¢Ż±x>{õwŻ [ HNź­wݲöŚä”Ļ?’€ó_cćœ{zjäB/›(xż÷ž}6¶LdM’+‡N•¾¼vģśż¾Ī׌Y³%e¾—+ĖķĘi§ÖžL&oĒ ł’>€·øĄęBŚĒ•Ž_ŽĢĢõ•¤yA˜y8Q•cĄĖlé0 ݽ[O^”¦!\­\sб č\ķõ•ēېaĒ©_)Fūœ=żīē]įųČgåĮŹ“œś½ÆÕū¶ŻHsŽ$ב ó  ČĢ×}½Ķ EŸĻ9¤>/!T Ę ķhź4 $s0M!¹ł ¦8餦C5G!”\ÕņŲ/HŹÅ’4,Üł(lˆĄöū1®÷b‰ÉCč7§²ŅćÖ&‡{;PCI·ĮĆlĮŠž’ Ģ:Ödfƹy÷=÷ÜvÜU©¤Ö”œŅZļ¾eķµļśƒ½wEc5BH̼`5PĘw7Ō…ķ·1c” ę` P³qęEAŠ4- #Ą“ €żūūŲÖ­[’@w!éļümIå^ąp€ēē1čE2TS IDATĮ›MPśH*žMÆźō4Æ[5G‹¦!"¤ I‰L*‡)ŪBz÷!øå^ Į¹ œkøō³²ų FeĄź t?ri<ŁĆ•ÕŹÅŪ€ßHŲ¹ ˜šX”;ųC•é#½N½ÄpyśÄ Šs¢ć8Ph@.ōīpüŌ[tDĀšcÜša2Š„¼®×>oš ‚ężžŃ%Č®ńn2³ąJ‚½­kN;om ąœ€ćü:Vp^iM$ņÉ śĒ“Ų{`/>ō*žŪ֏@¦/;…TaÖ_­8;te‘÷ć”Kš£_ĪAšA†;ÅŁĮ@ ™CčMNš5ę$­“fbEjl¢%5‚Øb< ė†”é>ʙc7G RP¶©Č² ‚d‚ē¹Ę’\g Ć`øv Цķo驆¢mڤҬ…ćh¶Ė,źŪŖīĄ9ņüZ³ļĪ/;§BåČŹś2‡ŠģY4ŅģfUÉ?›ī¹¬“zäæ‚0.‘’£—ü{MąŠö…7"łchŠ-["’o ¬ˆ”L扔‡«ņø>ĖéŸ×-TkLOÖŖuŻĻĢŖj޹ō€W4]åĶҌ<—;wS.ćH%Ųę}ļhH¬=,«® œMf×.r{sģÄe›¶Æ^6•Œ„¤*Z?–rčz+öŒńŖ^ć-fęšģ¾ēīŪÖ]NjMÉ)½õĪ­¹žśßß{g4¦Ņœ$u:ćŒD¶ņü5Ήh'Ł€ÆĘRĻyaüž«:U)g)ė÷€¦i“Ö „šĆG™:mr.†”²;’Éäł~TLļėėcė×_ö"z'0Ęī’āæų„/}éK„Õ÷•|?*¹öQ9ØE+łäÄGÆEüō ø8ĄEBąō’ĒŽ{Ē×Qł’ļsfnUļ’%Wlć  ŲōP$„HR ɦl–ŻĶ~“|w!łn»É²›ĶnB~)„@BZčB±1` øwŁ–lõzū”óūct„[ęɒ[üńK֝™Sžs5sę|žóMc®ŌjhįøņlB “=Ń8[ś†X½ę-^zč%Śqxs;›Œ)ĖĮ”©Ö§į¬i$±{?ȧŲõ¶ó“ļ<ļ~¾·żo°3Ōw›^q~ĄQŒĒŅü„·ˆKɀ¦Ń2PRN"X:¹O¼e ā²ÅG釖ńž†R®zӂvä„&ńU–2»²”Łsšøč‚„Øö^6湛g~ōOõū,«#ZZƒ%%Jjł-t¶šØž#z+jEؼGv…{ŌöHæhJ «iFLM3Mj••(3 ĆÆl·ŲJžn“ŅhÄ+¼cõ'‰4gŹćJšSĪå$Ķi"ø7W¢:Ić8NžŻĒ‘=š£oid‹£ˆüeµų}ć O{GN­^ĪP¢Ÿużk³/ŗN÷ł^4éusé•‹x¹Ķ Oł-ŹÅ7TÅLČ·–(9r]¤XŽ~§£ŽóiŖā¦O¾±ć½õż‘¦Lģ)‡MUéśöó– 'Öl\ŲŅŪ[Yf%<¹ćŌT„AEM"ņ¾ģzäį_͹*r”Ż3ēš÷Ż“ē÷UUy,\VŅzę&KV…1/„Ģ.8Õ¹•ĆŅ_Ó„Bå×čŗ®ŒyuŅ“šx<Š„¦āX~gĘ4Ļ Ÿ‹%>P<„»¦¶ö±D"įėķķż”išWŪÓÜÜü©Ūoæ]e(ę¤|ī·0‡Ēŗ 9/H@~õVjē6ņĮ€Ÿh’åäÕ9冔”ś½,ö{Y\UĘu'4Ƶ—ŠŚÕĻ“/­ć÷æĄœxq…€Įˆ…Ą×æī“qūķSCē,B5ĶÄ|äž_2‡}AÓ'ŚV.Ɣp"uŻ`˜šüė HŸĪ@%ƒu“é’oˆ:IéMKųTc)7jUӞˆ–ZµŌ²č‚ÅÜųĀ[<śoń æžš"e•Žčp)’AQ¤D PR¢ōrāžrŁ[ŽĀ@¼_ˆõ©ķ±a»"‘eńŖĄe†”‚BįUÉ“B˜^ƌ Æ{üb8X¦y‚ZجJ†Kk“ئé6>akHC wņ$!nf+|I“‹£#čŸėi–²ŲŚÅĀņœf·„łĻįםV÷8ł«;‰¤9‹ŹN„4gŹ2©ćČ8ĪjW‚’ķRŁ—KŪ9śŹ»`_G2Jƒ•”*·Ē1E8æįbAv…vŒĢGž !łĻ]%gæīeĒIž õœļźrA¹D€VqC%ĖŽx§^Öz)é@(„ 2ē)QqÓ'_Żvmćp¬ö°™ŽHšīī^¹4‘xuĆI'ōvW—[ ©ģlČ4ŒIWUÅ"ļżąīG¹öū"!½2ÓĖś»|ey9 ņYkęk,ŽæˆüNœY53”iřłēŠm0"ė71š+‡ż‡ 3’]l>śŃž÷G?śŁ‡m[5F¢Ń/DöķūBFÕŽŖŖŖ÷ģŪ·ĻąŸ,“-ā!ıŖH#ž’óVT”r›.¹Bˆb“Ēæ—Y3ųĢGŽĶ§Æ:— ›÷pļŻĻŸ B@GxōQ¬9sEĄT)NXŒõö*BŪöńĖesłŚTō1™xa-Fß0½^?ķžŖź•Wcz}’ż˜"ž@~n1Ļ­įv]£y2dNEyŖ«ĪāĘ3NäŅ?ĮOŪČŖ†jź‰śERC%Mś„†bŖćø@J”-…ķ“Jšå°h ÉM÷)æ°¤ĒŒ(Ÿe)MźŽ›-P^ŸnźA‘Š|ĀšłuĖė6>a{tm#,23żN"l„™Łło…ĻKŃĖ­B —|Պ^Ļ“ü§ #ŽA‹ŃL¹§<£LņŸEžŽņŸ}œu8A"ėÖWŚįöåŚv”¾&ŚvŃć(|/dž…²”_čxī…ńÜæG:|Ž„5‡[Œć˜B!ø¢ł}üŗõśā=…ɾ۷Э}“FüĻ€’Łūl*’EēŌŲÆŃN%eŠ @Ņa7£+ĖÖÄ;ßÓp8Éšōémżg,’­Æ¾³dÖ@_U©•ŠEĘZ6Õ0@’M¶H„RŲŲ©Ńü…P(Eu],|õ»žų§ūg^¾ņ¢ŽgĶ‹8¹#팺¤”°ó~.#}'Ą8—ćRę±0pGš €é"ŒŪĘ¢‹ ™sĻėõŒ[†T|ė[’Ņ»mŪö+^xaÕLÓ<;õš¦iĻ666~®­­Ķ-Į¹>3ņł~SLøB8bäGūŃW¹ ¼„Æčļ:”ż—•°ōŒEÜy÷Włüʝüņ®ūłƒa0„wļ&ÖŪKb×.¬±/Fqūä °č ģ5Ļūås<0§‰ĖK&n0ՈĘį”ē<ZKĖéŖn Č0’÷˜(#‡ææ"8»ž5>·.åk5„|tŅ…Ļ@c ’ü¾ŗ| Ļ}å>~Šp vĆUµĪ|$‹°pĖ˜ )QvžXD¹®›Œ¼?„Pŗ.”-Q~/J iź^eų4„’õ4i¬dt]#Ų6"ąŃ”­”Hŗõ©Āˉ¬ž‹‚•‹°“ÆOd©o„×SÜ¢h‹­ŃjE.˜ĘCžŻ®+„ŲŚĪņźÓŅ/å ®yIŅxÉeó“J|>ūöõaZvĮ¾&“ēS<¤·]Ų<>•l¦Ķ& ć‰ŠŸ=Žn™¤yĒq0ŃżóŽĆ…D'’īŠ4Ս9ē‘ć8vą‘®m¾_¶ž”„Źc YÄ­›Hg_)śĪšĄ-˜’ź2ŸŒ§_w€“µ4‘D;å’@ŠÜó²[ŗŽU5žęĻ%Ś”†®¼»»NYäó½öÖ¢f{Ø,h9ņ©Ńʦ˜m”dNÄŖźXäcŸŪł;°”Rć¤r.»ūR 咕/«¼«;@*"ﳦ)åóy ’vGSĘx(õ8ņz—”UjōĆgžyhō^qį97Oß²kū|„d¢¹¹vĖo¬ßĒØ æ®OmF> ü`’RK €$ń—ßž-3jų¶ĒƧ@A?3N_Ģ’żŃWųčÓÆņżžę„H„ĮD‚P8Ltp£»«njńõ§!šŸ¢:³µą4Œ]›č}nw^}’ń^ S?H®#”‚Ćóƒū—”s„Įē­ nj7·Dß“eNc4ä)ÅŹgī?ŗąu)¢I©ŌHx@1RDK-ģfEP$&RͲRÖr® ¤k4M*‹Ń®Ē< ¦¾<& Aü•æ}č§{kk+[”Į†ÖōĀYü€ ĄßMDÖC…)³Ś=Ä€˜;Ļ/æĮ?ĢidĆį&’©( 2ėŗ łĻļ|ž;*Y˜HŠ QŁŻMpĒ<›~‡öĀבæūŻä‘ōŁ °§Ļ%üŌZž¼mOOV»“‰­{°….©³Ēćc[y mµÓ•UaŒłæi .¬gśūņ»CIžSqņ ĢżÕWųg5ĢÉū¶Rß}€€i8™&Ņ^Ŗõ€›/”o‚±ĘŖįAāģśg™ĶŁ ģō-įõ­Ś7łŸPƒEVĖ³ŲŚځ©ŒI#’©Ä-ł//šO’ųīQņoYŠŹŠ_üüEœ²lĘqņ?qL%łĻ¼‡&›üēĒA’’Ōļōh&’å%5xōĆny|‡3+g±¢äœŃćc/č_Ö<.™’§•–•TÉq“× ö‡Hī*(#֊Tö/JĀ)kć;zĻ«žšĖxŠįõĶŖ{§µ¶”gŲē5l¤=B–ó-Öņśå§`2²-ål[åi[˜ Öč¹/ē@¾uŖīŃĒ’=ÄæģāŠ_øČõב&ž…p,( ļų<ßų8ś½|[€KņŗĆ1§…Kn敟_x:—Óc1j(ķ|_Ū“’Ł„˜,%@ćLŌŅ•$[č’ßGųnļ ū&£ŻÉĀp~p?ż¶¢Ķćaki9;[č™>‡øĒ‹Ź ĒY$Lqrµ—Ģć^ÆĘģɕz|˜ßBćO’Žæ‹÷±ØmŪĮ+¦R:1X½9^*^™ńĪ:3/‘+× ŒFżB$Uʎ L+Ķ @óp˜Č·&;L’ -¶v‚m”]ŁĶL!łxßU'S]]B8œąßæ’4wŪ<ńÄz„€o\AScź&Ė1Bž3ææIG†DS7Žćä’°Ąļ R<ōļÆg6ŸÅlq‚ū;Ą łČī* •'ł/R€ńȝśŒ»g0\ĆćgnĆ 'QJ€1)”’ģģ;·Ņ°ŹŽXÓM N̟±½Ż_6Ņt[åžą¤p‚įI;7-K]åڹĻGź¤ź`skMČb åsį ct_×ó—u ˜p;™īŖć÷ū²Ś “CqØØ(wļæ5ŸTGŽv€äæŹy ›yC×øäp T„Aźoŗ’ļŽz Ÿ“,f%4„{(ļŻŠæõōM“¤˜³µņ2¬–ÖuZļ~ˆÆ †ŠQeM=|ļ>†{†i×t6ŹŲPÓĄ¾ŁÓÓw’Żt•y\ QēĒ÷EüĢ«§„ą8lX4›†’żŸéjcīžVjś»ń«˜Hiē®#3Iü$cĀÖNĮü²%•–6K Ÿ“ÓŲČfŻB×&›ü'?īī§/‘ņøN1łĄŅ%N|Ģ'ŸŽĄĪŻ¦Å#­gõźų}®zļÉcķŌ ¼SJž3(š4gVu!Ķ™'¦rĒÉĘ8Žņ/„FeECį¹ä8ŽYH)¹ØłŻTš•Ή"ßī׳ MžŻęĶqŌĶy²łĻׯČxÜ,ģPbd×ßÉR”<Ÿ~Ą! !1ł8i.’ó§(żÖĻłKį‰"÷Ł āø§˜ÓźP‹.88²·č ģĮ~b¶A÷¶ ¼šżßrūß\Ķ×j+©šœQhīś ”··±O×Łč °¶²šĶÓO sŽb¢¹Čæ×‡JÄóæ qėbĪ­ rÓŌHpųÜuœńävnßGÄ[BĀ'ņūQY™<7ƒå€ĮA< ¦ śäO ŗ*”Ę4P2¦°Ūq+K%ƒ>¬pŠ^ ą‚ɽ@Qä߅(ßo޳ŠÅ¬»Ć{˜WvBŚÅń’œr»ęī®--•”—ł“!€hŌą›ß~œŽŽøa9óęÖńėū_ēSŸ<‡ŅR55% FŽ4gȒ9ŽœDõ8łĻ?Ž ’’Ģ‹“Fž]‚£‘üū¼‚ž²Ć-Ęq!˜Õ2›„NaXƒ!Ż_ą"’…0G§(ņ_Øłqōėj0[÷H’njdÓA!8¶ …Ę×Ubäė’¾ų‰®—ĪmdK[˜wvgnćĀY‹*©-óšČšīŃsg/ŖäĀ“«)źč‹óŲkŻlk°`z \ķ:¦mķ"q‹esÜē€W· ²vĒŠčqEiE`wWYåģęŲ`m•óźĪźFÓEĒÄWł6ĀÖUŖĖ¾CĄ9ÖDĘÖĢ„»…(z×J“2ĖÅĆćq¦B*'U`Zś?—3ć…×ėQ(•Ć%` €_eYäE­Ą¬ Kväąh“€öó;ø1č懄ä?‰E³Yń•›łG;Į3Į“įa*÷ķ#°~=śžmˆM/LdŠCŅą¬KĻžĻž¼xēÆłśŽ}왬1ƒ}ØžŽŽĘn]g½/Ąk•5¼Ó¼€} O&T߄9ŽĄĘ,wŖ4üsėųE¾šz nł2|ģKš•ļĀ;[Ę®żłēüuŸ’½wLMżĒ§`õ:øė§pĶ-š¹†żÅÉźÕ‘’ś).źan÷^źś{š[1GV-ŸŁ~ꌙ E* &Ū 3`MĮĄ4ć|Z…ŠT2€ HÓČRh÷ģ?īė›<äæ 0ÅŹQ­ˆÅ–Ū™½į= ™C£ĒKžS/"ĶmķŽŪœ9uYd³·7B0ča޼z¦M«än»„ŹŠ”Pœ’žįó ōGŅČ"܃œ †±¶Ó::&Éę}<Łä?mŐ’LYŠĒŃHž…ĒM’# RJĶZĢÜȂ±PvIdĶA©× ¼ņŻbnó_ŗE“’¼281&;S°P \iÆ@ŒĘü±•.„Ō¤t”’Éf… ?:ŪoŚ„®«‰Å3KųĄyY_­G|ąÜF淌é Ī_ZÅ'.mꝯ!ī}͗ß?›ŁBQ‹ÖĪ­1‚>ŁŃćīĮ}!cōø±ŹGu™wōx0œ¾]-…$b4Öµ÷zƒŃøŌ,kä&±Õ()/“0sÖVI?ĘäóÖĖIųǧ H–ĪōoŖŒ”27žuą öÉ\,"L›¶āßN<ńāO<öšÓ) ʁ“RÉ垬Y³Ę¾‡^8I/Ž6€äO’…÷–ųł1^’YX<‡å_ü·Ŗ³ š†‡©loĒæžŁÉS\x5ęłW2Ž©Cey%3+ę0=:{ģä8ÉśõĀ×&üŁo”*.cŹ“°CńQæįģÆ8䎩:šP”tŻySŽW ”Rō󯵞#Ø)÷°|^zfĄsUįõ¤D°‚kĻjąÉ7zxųÕ.ŽŁ=ĢßGkg”kVÖÓÖćOÆwó§×»Ł¾?Bß°1züÖ®a6ļ č³·;:z¼ć@ö–²Ļ[QŅŽć-é’^å²"ĘQ?‰5R7dDžą{n}»Ī 9§•Ü«½l„™UES^•ŠLū51ŲžĮ•×|vÉŠŠšGŚŪ;æõ‘k?ænęĢ3¾üo’öŸ£Ń]ŃG• €ÄŻ_ćĢŅ ÷qtÉ^+Oāüž!†~żöŠ6[ĄWB°¾Ü~ī3ē:J`XjģŪ½み~qė>x1מ4Ÿé²čP¶ÅaÓ.ģ_=ĮŠ®vŗ¤d×Ė–@wŹkŁ>c.ū¬ T^UZį2­›Ē!U:Žŗ2>U¬\æx>łøńZēųÉēǮݒ(\r|t䌜-°f\ń.ēxŃ<øķēsg7Üó`±½:ųüµ,ūŻ ¼Ż×MwM ”šzŒ©RL6„ {l{ƆŪü=»ƒē Qßø“’>_uVų”4›ņU [e­D$JK”̲Z00"`ŚÆ į~±å|œņŸÆß°fūš–/»4Aņžyóyļ•'ń‹{V³qÓž“źŠ°ćū_UL"ٶ׫sóĒV"S‚.^Ż©ōō Óŗ§/{8Iž3æ‡É&’b É–ćh%’S4Ž£•üėš~ÄEżß°};’}ļ½ōō miläsłófĶ:|‚żböŒŁō¾ÕC81LÆÆ{Ü Ŗ¢I:YOøK#yO¹—Č÷-Ō¶Ū3-$*CYf‡ •1ó8J€ŃōBIPŲ {¤¦„„”JŒ¤™ÓóęŻÜŪåŖ3ėycŪ ‡ģæ{y-ŪŚĀhšÓó¬?%:«6ķņ*`õę>tA^]’0'O‘VYV¦čņ–ōG<žfŪČó’Ųø©ņĆĘł$»•Ųµ½³tĆś=UÕ”sĪ[Ņ™3 S2šB ¬ŌS£×-4©§›ł§z©y”„,,¤ė.³&5eZŹ}z„ßćŃUŚX ‡ņ;*§1ņļóyǬ'ā@ĘŻsż‡®l}{ćęŪčłŪ¶ūū’ń›ßüŽgļŗėī»öŚĖ¾’’qg@ ж6hI©|ĮGÅśŻ G ‰€øć3Ō–—rŸ€Ąįh*pÅY\±cū_Ū„)ęp/öŽõ؁2bÓęō†źØ “œįĆŚ¶Xo7ß»Ÿ]³9󊕜·ģD¦|w«0Lxk+ęćÆŚŌJ·”tź^Zu/[KŹŲŚPĻīisé]øŒHÕģƒ“a ŽWyµā‚@Ś6lß _ū¼ūõ­ŠŅO½č÷ĮĄąŲõęʱĻuÕ0—īfć¤y”ž³˜“ßÜ˾žz*ūˆUבH @ävH‰²ķÜļéŌė¦i¢åٱ’6Źö)nܘ&xóŌBŃA½6Ōėł8@¼Ļ÷,åįį4ŠŸ'®€P#>.㐚°-P¶ĮH4`[ a+Ž e–ÕJ‚….9›¤»•'ł/ŖóāŹļ‹“Qć«”ŽW7.ņŸŁri‰²2?—]¶˜Ķ[ l5ZĪļwžNęčīįÓ-ųJ IDATiÖuÉ­·œĆģŁµX–āēæXÅéĖgrņÉ-|žsļ⇒ó­­½):xņŸK‰‘Qā8łO—,‰Üʑyę8ł/ åeuqäN®ß¶ożčG†Į¹Ė—s҉'²­µ•gW­āŽü€;æüeš·˜5šy}LŸ6³Ż ¬‡ˆk9²£’3a{|YõŌ`,•0)‡Q*BŲž+„THl”iRéĔN?–ņ Ć®Ź,‚-m®<½–SN(ēĶC,ŸWŽŠÖcf½CŖĖ<¦¢½7=Fü¶żtMPUŖÓ9PÜr1šhRDee}Ća_ܔŅ#°3WŚR8i5!”kžÄhZ¶«e$’Š6æ½·bĖĘ}Õmūz+:ōWhļ«éź¬K$LĄGnŗš‘sĪ[Ņ™kÓ„PR •ŒMp(ģˆŅ #Š4MY¦Éh,€\3½K\ŠÅ)°žŽĀ 7¼'tżõWžäõ×׿ü替ü¾¶¶Žæ·,{v(łō½÷>ō±|ā—ē·ņ®'žxīˆJ§~°8Zډӹ[ fnA¦ šD»ł½|xū>:ū‡IˆAŒ!ĘŽõX„5ØĄ¾ą ƒΜ‹¬ņ*Ā«ŸÅŲ¼ŽHG}{ūŲ’Ć?²Ž#™·r1§.šĆōł3ØØÆĪ|IJ1Bm܍¹i±W×38”_Hŗuv—=ž»ŹŖŁÓŲBljó¬?£ŗ ?$bˆP xżØ„9> ʹ®ŲņżCŽ "Gü¦žAˆH™IĪ<Õ½¬ M3>\!ó_žĶý“E“Ŗ9ˆœ…1ā÷_Ō÷źŖ|ĶCāKŖ­®äēŲ°§Ų1G©`+%t©©„=¢²m…°GÖ@(š„rŃĖ č’ …źnÜDUŻJ¼ĀēR,q9'€—^ŽĪE.dž¼zŽ÷Ž“yč᷁ǣqįŽ…ĮŽݤ’f)7ßt 4”Üū«Õ¼õö>ÖÆoćĆ:ƒę–*:;Sž,ĒÉ’XŻCIžÓ[=ØqLł?šżę½?_±¦iSįaīśÅ/0 ƒO^=—ŸwļZ±‚’`‡žy†ēVÆęcW_Ķžöv*ĖĖ©(;øpŖŃ2m::0;<meė±3¹Ś1ō/¶–½QoD€~ĒōŌčō„°hJׄ&„pęe#„FĢ®Õ Ō?l°jóļ[YĻŗC\qz-O¾ŃCUŁŲr¶¢D'Ė^ń EœseĮÉU( „to,!“ROörĖfdūDēÄČE!„jŪŪüČū¾÷I˲µŖźŅ~ŸOO”–Ā3f7XyīĀ³f7ō-’ ŸĻ÷ūł³ggż–-[s~1GŽ€ä/īąćšĘū·0SŖrŹ>u57ÜłKc&11L¢· s×ZģmMłkÓŠčcę\Ō̹XUuÄėN¦ż Äöl”/ŽG{8Ģö—Ö³žÅ·h¶M„>ź§7ŃP[NEĄO׊mŠ`„0÷v–‚(‚a)éóųč–ło+­ £”–ī†9 ĪY@¬e¶ć‚ī b.³ø×D%t÷ŁŻc¢Œ”kf±¬ŠšR+‹6%#\1š#1hE\t|ā†b[?._IĶē¾Ļ“ŠµĆƒtTóV¶†ʶœń»Eū÷iØøU䫌…ŌŪ%ó¼Y½e¦ģ֛kā½B`)…fĘd]NŁŹĪēbb9ļƒ\F+4:VŹN݆ÓJœE¹ūśęŠ“’ÜmOœü¶Į†ĮMœZuJF?ő ǹēŽU|ęÖó¹ģŅÅ̘QĆĪ]œzźL¦5U`YŠ'žŲ0śµ !ųŠOē”eÓųķļŽąµ{8ń‹īūĶėü:ŃØĮ¢EM““TńĢ3›ÓĘrœü$iv»Ęqd*†Ž2”—ÖnŅp’c18<ĢÉ Œ’’$Nœ5 €PÄńE~įµ×xśå—łā7ręÉ'jQ’Ŗ „¤eZ ‰= cÓŁŲ;vńÆ č_*loöŽ«åX¤Ņž‘įø(F­t]I!BH„-UBTe”śŲkŻ|ūęy\pR55å^Ś8ĄU+ʖ(MbŁŁĖis„ źŚäĻVŗš …„7ES <¶38Ū-ī !”B!„£%Éiā/”eFmäŽ?žż’wĻŻ^śźK[Kż‘ó.ZŗéĘO]øÉļõXŹJóh*]ež/Dźy'†€²œHż™+Ō?o>’эs>š%ŽTF@·śs Ōgö•łžŹ ŃW]ščkŖˆõĪØīŸ^>}ZoŸ,bćK÷ 2W¹mTy<ŗJĻ źoNZ¶Ähk[s[[ūgõžKčśÓ4—'‰mŲŗõŗ®?Y[[ūŽŽŽ7'ÖƑ£BšÕ[©ųłęįäPįŌœxęV®ŁL،‰zˆõīĆX½{ž|ŌĮZ$qĘŲ̬ŸAxūZā}޽Ž”~vĒCTĒMj ‹ŚmūØŚ¦(W6„|ؑūF`#ˆė¢šĘ¦3 =ōł|ō•”Ó[ZĒ@ĆtĀ ęÆoĀ,ÆĀöQ±ČŲ<ęõ£±‰­ MqĪ|Ī¢x—æ*ĖaÓ6X2ß9N±Ņ›=ŽÜ0µ €ŗ*“Sē1só~6 P‰3¬[Ųn±FL±²¾Ÿ‘ }īļeĖā¾Ó‘ 1¹ßż%¤:䛌Mŗ×¶„T}ŹufBĖRH)\åOĀ#„²pā ŠDFY p^LŹ“Qʰ”0¬ņź£~ōŅĄųÉ!LšŻ_üź¢@æ=ń^öFö138}Üä?łkżśv~öó—¹éƳXø ‘… æ–xÜä¾_æFėž1Sž«ß·Œ³V:i}ģ^zyĒH_#ķ)E4jŠÜ\ÉĒo^‰‚U«vĒhņŸ)Ąd’ęŒKłĒ‘łiœć8Nž ¼Ž>ļ‘ćyŲ;0Ąsƾ Ą;[·ņݟü„.æœŁ-Žsj{—c˜ÕTēLÉ==Ä ā‰ÉŻŃ<w45L£ż@; Ńi zś ėĆy‰2pXÉ’xe*†ü#ĄÖ],£öH]„™$’EŅÉ”¤ĄÖh›Jˆ‘®¤Ą0‚EŁKvö'X³eėĪiąé7{³üłCQ“_öұŌļœ O~|l)4ŽJO4.5Ū‹§”t­×ČØÆfĢŖ‹üßo}čUlµśĮ_æ<ūį߯9ķ¾Ÿ?ń©ĖOŲšń[.}mŁé'Œ¾ŲN7ŲXh9‰”ŌueXg^¹p÷fÆ“~Öõ•õ†ż•”„Æl8$“ņØį© 'ōśž¬œMcz­Ī·žĻćŸJż ų5ÆŹi‚ü¬óĻq©æ":&df€©––&{ļŪ/=IUłćs朶bß¾żgšęå–e]ŃŁŁy¹”ņqæß’­H$ņjA”@é h‹gšMµ‡[˜CńĮK¹xķ¶6Cr˜PČK¬µó/I‹~Av„łä&…‹@mr¹Ö0 Õ0 kęģÄĢ›ˆķŽĘPG}"ƔƔ˜&%¶…_)¼j,N‰ )‰ūt" Ń`įŅF¢õÕ$jęb46c×Pžąäŗ3 Dm3Ē[ļāsąī_Ć“čč†W×Į‚‘Tė×]7Ż?¾Vœ ¶ĀiKĒ®OĪ=™¦õ»©‰„(MÄŃms²‚ŗYd"IāĒ㐠RŖ.Ūu¶)źĄQØ<ń Š(˜"ĄIū㤽ɗ•T"a§*„׋šč(ĆLkĄµŻ¬ł eŲ|u‹"’Łü°`»cm;¶o£ÜSF•·Ź„ßüä?ymķ›ūŲŻśēœ}åō÷GųĖ‹;čé3åæģŅÅ\|‘ćšēē¶šŌӛŅäH¶UYä3Ÿ>ŸĻĆ®Ż=\zÉBŠ×_ßĖžżc–&»`ŠČæŪ8&‹ü§Ö?nĮĄQOžŹKÜó.<æf ¶m³rŁ2*ŹĖłóŖU¼±~=Ė—.åśwæ›ēVÆFĮé'@g·“÷|Z}żįūÆRJ¦O›ĪŽÖĢĻaKÅ;®/÷¢ŽGiEĘIž‹kt\ĻgQäŹE`õX8ՕJ’{”Ž"ĄŁōG÷z<Ā™•”ĄR¾¢Å}ōµn–PĪŸßźĶŗ61 ų4ŖĖ<ō QŹŚrĒja`*š&b¦¦¦jDaćÅK–q‰Ć‡BI%TžŒŃčB(„Iõ›ĪŪłīėĪh½ļī?ŸųĀÓėOśōĶ?ųģ‚EÓ7ßóŪȶ:iaėĖ͌ęÖ¬=+ēčR(%•°ėJI)ģ?mWۃ§’ūēĻßü’üŅ6„ü]ĆĮʁˆÆ| ź­Ž7\7ä8¢©€Ž®k*§ß­ł×ńz=iŠ„Ü##”_EŠˆv°k׫Į|„„åō“;::žŽ²¬k•RWF£Ń+…Æhšv'šHńc:ü8’ß»%›·0‡MµT¾ēĪčEāZ„pGń±ššPó'É ‰†YØy³°ę/Įī>€ŁßKlg”¶ķō÷w¢‹N“žZ ōTr§éŲel_ Vu vYVõ<‡ŽłƒØ¦R”OŸĻ’V~Ėaī@Ā%Ł *½Ø"Eś=œ8ޱžķĒ!…ļü͇ÓS,"OY ßø īł=üįIX<ĪYī\›5b)®U°|éx{w0e†AU,LixOuŖbŅCšŠSZ([›¼5“Ģx/«\KÓšxxTÄ;˶d½‰HƲ3“!€eęØ-„.`%#)ƒ E<1Liz ­$ˆ90š(ŽųŸ»ķ±J)Žź‡•µ+h¾“Udö‚2ŁśūĆ<śŲ;cuSdX¹bW½×!«_ŻÅCæ%€ĻēįÓ·žKE…³;:gv-sf;ŗŚóĪĻ~ü¶oļ7łO=>bȦ,ĘqœüsLĒwDķžų ^‡÷]tŃń“ˆ†śFZŪ÷0‚4Ěé“§]/šü»<ÆŁä®›ód!ņŸÆ»"ß±n 5%’ÉSˆ¤€rŒ % ‰ķŃ„W r¤‚±G,ū{ć|ė]„cŁ;»:¢X¶āŌŹy6EApŹÜ2ŚzbDā£: – †!¤­„Ą{4¾F\Šwt ś__µµnó†öŚÖõūŪśźśz‡«m[ÉŠŹ’ž5o]øøÅ5€ķŽdAH)”åR3fųäÆÖ̹ą=‹ŪwŸP £)%=ĀÖ4a+K©sæwé—;†£+o'`z[Z’ģ®… F©¼‹n&įbåé#KLŲXRP!E@?P•rÜÖÖ¶ųHssóāĪŽŽŪ,Ūžp¶eYė€o2±ÆõāHVhU|™|‘(Ža\t:'?üÖbÓcF"¼?‰°X óO+ž[Kq©Zf”Zf9ķVµ”–_ŠŁß‰˜ģŻ…ģN‰W ½%(æ×9Ī@E†Ļż@z6ÖɁ™@$bHæ‡Yć­[U w~uģų’%)™Ļ®¾ĢłÉć3"P,™’qūx{wpB ~Ó¤<”Ԉą±cˆĀį Ą ėIIJĶܕwō©¹1<,‹śjāqOńL‹Ē“&eh5¶EeÉFŪ™k}Ė$g €“r— P‚­ ”8ÆK “xb0sšÖĖKĒ9›¤»•'ł/Üąųʧ–uYl%ģļōæĶµĖHÜČ*qˤŽéM¦“ĶY3kłą ŽÖė­·ŪųĶżÆ¬ĖŅ[‘šäć_Iss%†ióūß䝍mŌהńĮNcC9§:ƒ;{H]ćqä?µß“ę3JdÜ@Ē"łĻøōWOžŹ‚•‡[„4ō ŠŁÓCi08šęƦ²’O]żØ"ą…5køńź«'X`<‘ ŗ¢‚€?]qzĻ’ȓ/¾HUy9ŸuÖqĄ$BJÉ“†iģmŪCc“™>o Ķ”$SIžó·}čČæ,Ośż¦ ;W)£R€ŽĻæR $ĀF”Jy¼ŗį̇R HŒ‹XķėŽ¹žĒ,^‰ °­=ĢŽīKg•rŽ’*ī{žĄxŗ(¦i‚ę„5šČ½›ŽE¤SO(M)ą?æóŠ/=·éTÆWO,XܲóĀw/[·péōĪ3WĪļ¬,/M(’1ŅÓŽ®£ m€» ČT<¶qVóoޚwöĘżÕgÅM­`OoIÉ U”pf„˜©Ux4••ŅFćžē€‰3öԆ˹1x½ŽÜß³K’W”’8É|cķķķÖ®]ūńĖ/æüŽŽŽŽ/ڶ} p š[`=šļĄÆWbĆC‹#U łŻ/1×ćįż‡[˜Ć…ŗ*J.]ĮéO­”;aÓ‹1ŲŻMtćF̦&Ģ¢"žL’-ĪSSׂšŌ4 vō=IĆ}0:uŠÆ•ˆõgˆXš®1īČLŃH >/č‚w6ĆĒ®\y ”¾ › aŒĘńĘć=ˆ˜,7€Bˆõ—– ÷—N‹‡üÓĢø·ŁJČZĖ”5Ź–ÓlS4+%ņ†»v[([TXaݧWd+^Ó`©D‡/1Bü1„†@I@†¢™åõŠŅъ9å-b±åü*~±•’ŗ”*¶nnņŸDæ1Ȗ”ķ,¬X0i乌k–”{4öä—æ|ÕIčB@Æ’©,ZčdųÕÆÖšÖŪūZC}üä'ÆpŅŅfV­ŚÉ¾š.V­ŚÅoģ9“ä?«ÄŲąóՃ$’ī‹ģÉ!’™L6łiŏ“Móą÷Y¤xpŲqÓ©®ĢVL$¹ź*>g«+—ł’?ĪcĻ?OuEw|ń‹£×•Rtõö"„¤®śČr}8Ś0­”‰¶żūĄ†ęčLv—n+ž¹˜ĄTł/ŌüĮ<øsCf »/āłIāļžäg!c%…@y¼š×‰’ĖČ䤊exŅ²Óżę/Ø(ŃłĘĒę7ltMšō›½¼ø¾²ŗHCĀ0•P¶.U)BŽZ:B_Ž‘æ}×M/®{c÷śżŹ¢×Wo[Ō¶··a°?“±yZMØriiBźÅŐRetŲŻWüŃK‹ĻX³Æé¬ž6€G³ĆgĢģžćk{ꮹė…EW]0§ė§~Æ°Ķ‘į=¹©„”/āß\]ćÖ¶®k*_DcäGS…¢øĮ]4‚ö_ŹHtȬ•f:N;ķ4ÕÕÕµųRiié·Āįšg€/K{€;€’~\ØėƁ#U §Uó7Ł2N9.\Ī¢§Vó&‚Žh”žPˆįżū‰OÄ  ¶ó ”©2Pżg *«F„*J TŲ“== ćpöCŒKuUų…’żńģĖšõ» ±tĀŁ§ĆłćŽ$pp( lšZ&~3†ĒΈޟ @īRS~;)ęõ¶5‹o2†|W+›Z&’ĢZ` ©ŗ5Ķī–:]š×īōųĶnŪšT‡zõ†żu¾ŠX[®&l!”T9Ü,P)Įit!”h •B įųj”X_fU½¬,?ł/<¶ !·b!ūäxȱļ‰ģ„ĀSNspڤ’`ĄĖ '8†Æ¬Ś‰a˜®ä’¢‹pöY#Į}g”ü'ŃŪā…ælåC<Ł³j˜ŽRÉ®]=ō÷‡ĒdI’8Č?™_[ņŸĪ}Żļ) ’“ŖÄ8”± Ž“’,”Źø±T–;6u½¦‰Ē%Ek’ücę’£ēyī9~÷ÄYäõŗuÜūšĆtŌ™V_Ļ×\Ćņ%K¦l<Ē2</µÕutõtRƦĒWNȓtUĖSŃmžp¹īzŖŠ‹&kŽÉßnzŪy„Ī$’Vy»'š$ļcq}’Ź)”'‘”¦IƐB é-Q“¾¼;Ŗßłķn Ė}YüČ«ŻČ‘b ›=¾-%ÄM›½]1Ww?½ŽĶ“k{röłÓ§Ś)†9Gćqӧٶ¦¹¤˜Rõ§,ŸÓ·üō¹/ĘćÖK>šŹģg[»ä37žąģĘiÕVœ½pĆG?qŃś––šH¾öRŪĶĘŲʍm qŻĻŽsĖ®¾ņe–-<u„Ń+fv¾ōÅwm^ŻPnDο벓7wV\rĪ]Ö²“ehM]y“·½/P’ĘŽŚ+l[č§Īģ] )ŻLCó›ä‡Ė6”ĻēUŃQŹ…f·ee„*ū[č&Ż ”PØSqšą #?³»€’3ņūŒyv‰äZā‚Åų¼¦0ūс™M”Ļifī®°mÄćō nmÅh*JķŲF‰'¶G¼÷b8u‰³ū_[³š'[²Āšz(teį±-4ĖDŚva €ƒI(”ķQJŌē~É«½RZ4ÆŚÆiŖOóŪ½ž@¢£¤2ŃQŃœč“•„lį$‹Ń©”čŻ[2+Ō[y#@lP«ŅŅyĮ‹\©õŒō‚iu„°…ŠĀVȑŽ`8K=?j5¦Ģł e“æ|u‹"’Y„©p»cm^llŚL‰§„JoÅA‘ 3Ų³·™3Ŗ9ćōY¼łę^B”t³Õe˦sÕ{÷½U«wńēē·ø’ęgĪįŒ3fšĒ‡Ž.LžŻ8Įqä#’©‹Łćä’8łĻSįĄvpØ®Ø`į '°yēNīłćłųu×”åɧÕŃć—$Éę•Wø÷”‡²Č’CĻ>ĖÆ~)%Ė.Äėńšö–-|ēĒ?ęĘ«ÆęŖ‹.šśĮƒhjh¤«§€ęČL¶V¬Ÿ:ņ_x8‹"’.Ķ[žl§S»/’4÷G$Mž0Ą)&„Šć•^‡ųćÄŠ gČPQC <®E¹ 23œ<»ŒO^֌&[ŚĀ¬Ū1Ģž®(¦­č2Š˜¦Āȳ4‹E%(ˆÅcfŠÆ æŽ%2‚Ų8ѵ5’¬“„Su)ļ²·{ŠWSWšśtūĆ7Ÿ·ć£Ÿø`ėžķ]Į_żü¹%/üłķӂ%Žųßžćuė²fŠ‘Žō‘ŗž#.AJtĀ=żĮķ=§<걒–žU=}ūK—Īo=`!•Oš&Jż÷µÆžūmŸž7ĆĮ%Ļmõ/Lmj^ķŠ3ß}ļŗ—rݐź‰&įńź*‘P$ČEéĢ|7äõqc›W½8;’’|ųG ųšĄq¬¦ĘĢd8ņĆWs™Y œ»Œwµ³ÕŌF£t†B īßOüĄ.ģÉ“ČD ضŒ'“¦Õß7łk¼PŹHZ@³øöw÷#µT>47:?‡ įˆ#· Ņ4'ę:1ŽT€šßÜ%£ęzM£CxĢNÆOuj¾x§æ$ŚYQktɒhL×ub¦’: ė:É6š#£ŹīƤĮīb£ó9—Å=³)™ri±„n«äEM‚)¤“•7ŠŲŹPRŒĪõZy3ŻĆLžĒ+ÓxČæ,eńfߛ¬Ø[A‰Ģddd7—Ÿ4’ü«ų›ĻžĻĢÕ|ķ+Wp߯װqć~fĻ®åc=!`Ė–~÷ū7]IsKK×]w o¼¾‡Õ«wÉ’6†É‹]9ޱ¾Ž“’ćäüšłJŠäD·Ÿ¦Ÿżš‡¹ćæž‹'_|‘·6mbłŅ„ż~Ž{ŃEi»’#.ӛšxé7øūØŖØąŽ/|a”üæ¹q#÷=ņ~Ÿŗå–žčÄÖmmoēŸī¼“ū’ō'.;÷\|.yŻ#?ŹĖ*‚D¢‚f F5ƒŽ,#¶4L˜üē{'e=Ććh»æ’Ģv†’?€ŻQ)ķ*J”l'?½°‘Ā–B*l„ĀÖtĶ+„M*B(”™JW]†%š'åf\³u5[iŖöqŚÜrV,Øążē4 k‚’C+C‘ÉqįŒÄ*a”­DŠk[Ž}īļUڈ–Ą&!–Œź¾śū7~ņo.}öC=oĒč5Ź+K_žē÷æęńūW…BQ l„ŌT1ę £Q’sč6>}öśÜŗrżæ¦LGŲVĘBīŌé=/žķ“’ś‹5óOX³·~Ž@Ų[įńŲ±sfw¼ó™swl„rƒ&QlZDcŁMż~Ÿ"ZXqSUU©Ą¦Žu;Ų,ŹW5Ęł’Ēq³Ūqs˜ˆĆ$āHT@ż\0“œU‚ėœs3Cy-qŲ’'kćÜSĮ4 u½ūu_ęŸī|īiƒŚ–ńĖ·ž/ŗ=m!÷ü‰Z„صm*b1z{{‰ōv`n[‹HU¬…q…˜ jĻ„ōĀSƉJäČą1QĘȵ!˲‰k’ģ7ĶŽ!G4uĖ MCŁćü¹Y4.Ūžšœ”ŽęÜ'u`Ū)5aŽ"Ā+…²G¢ųēːD°4E¦ԈÉ:Ēż 5č .…2‹Ģ ŖRŲ6 „c2§ [%āĘ ļhjP­,čh ¬± =7Iwés¼äæpƒć+ŸZ¶ˆ–ĢVĻ, IDATv¶ĮŚŽ7YYw&įI[@Ž—4÷ö„øóߞęņw/ę“Óf²oƳX­©-ć–OƒĒ£±’?’Å*T†©„ z¹ł¦•čŗd’žAüżŗ1YRÆ©-„æ7ŒJY'’‡ü»…"ÉæūtT£äÜżObZ}=ß’źWłżSOń—×^ć±ēŸąŅsĻĶRtööāŃu<ŗĪ’ÜwU|ż‹_¤©ĪŁĻŠ'üųžūQJń‰÷æ”üĢjnföōéģŲ³‡ŽQ…Aßą RJ* , uģŽ» €¦Čt†¼żø†æqyfSÆåÅa$’npSX}@!ŌH³# ”I+[!5["•īѼBPŽy¤”R Ķ& ļ‡¬ÉQ$q /ĪcÆuóŲkŻ“Łģ(ŗś#v `%*JŒDĄg[2¹c¬lš9ׂŽU€;žyü­˰“kn8kwņÜkvŌüėW~óž®ĪĮzæßżšMļzźÖæ½"ŃŲąģč[ī©BnKŌŁ5į/œūÖz,1ŠŃ&™ Ÿ8cĒŽ[ĪŁ¹Mz„„”²”2Gr jZī1čZŗĄ<†¦rYcx•Gy¼Nö€,@Z€ą! .äaŲõl ņ’“ž’Gp%ŽuĄcfņG¦@ztĪ?˜ēĄģ“‚žT”UƂŽŻŃĪuŽ" «c K/#–[PÓģ“°ö©±ĻćĮxõÕųšė™ÖŽE«mS™HfØc7‰šFŌTZ$ŃJ¾\šłį/AĪżīńśQ‰Ųų׏R¢b :Kü̜ h‡ {:°[I,SJ””)lj¦tɐ &.€i‚,0-X&hcel)”ŌT—m‹RĖŠŅ¬¤r™r„ž—¶PéŹ]j*a[Ž2`äG8р”JÉX¼ßJQ!š”—bō;ž•E‘’LŅér­PŻ UĢõō[a+Ģ›}ėF2ŒYœiF›<ōšŪ<śč;Ų¶"Xā㳟>—ŅRƒC1~|÷KÄ3Ņ$ įü>üį3Ø©)!3øē—Æ’0¬”ń9eĖĖ|įóp`’÷żśuĀįÄ1AžÓz›dņŸqrŅÉN%Fę§"Ęq“CJ ŸÆ@šĆŒŅ`›®¹†ƾšŽœ„¼³§‡éMMüšW梬“4ü<õŅKō8Ń®^{ūmf573gśōŃėC”Bˆ“ æ~ōQÖnÜČϾõ-÷ •Ē‘†ŗŚ:Z÷ķF)EĄ PƦߗ‘›~_£Čś»Įń’ń ąÖ„å f3»ĆNÖ9įDż— Ā•ü§”°•@ ŻVŗ®ł„%”Ä™·ŖŪ¢”Šņ²‰ _UźaZµ{C} ¦—šęŽüY„}ƒFc„«*7ć^ݶ…ęģ‘ä³°qRę‹Ņß¾·§¼¶¾¢ßļóŲ(Å®ķ„_ūŅ/®į/üżU¾ńڶ™÷żā¹wg*¤Ź.‚>H)”.“Q»7Śź«ūĆAļɍŻ=M•1—Xś©°ČM5-’ VŸ–'Z?ąŃõœÄBp‘:œq<¤†Zmjj:ląQąO!Üūˆ"w~ŽEB0éڽūG:PŁŻ{³ĖT5‚īq~J*!ģ²rÄČyØ»”mKv™Ę9 {a؆2йƒ–Ģ£¹½‹*„،ÅF£x»Ūˆ‘aA=?Iü"P›nŗĻ‹FR öA°z, üAT,‚š›ØXŽŻ~Ā.ɎXīAéģ”({'Ŗ°mˆĘĮēķ­0£JŠŃ ūöCC­s.‰ĮačźqĪē³8/[ö` ” š†)$J&Ą&Éģ©™©3!œč¼yļĢĄ‚RG­©.Ūslƒ:G‰2ĖJ?ĪģW¦8¼Y TfzĒO(”¦„-#±^«Ŗ,-f„^YŽŃ?4„ä?wŪ‡–üg•9їčēķž œRu²;ĮĖ<ćBžS‡bdøńcgR__F§¬¦InüŲ™”•ś`Z%š&łĻØ8éä?ē8&ü‹”’šügŹ’r2­ÄĘq, ą+ŗå$CAm•{pŖh<Īąš0C”Õ|ć‹_¤1…ü+„xvÕ*V,[ĘŚ X»q#§-^Ģ W\eYtõö2oÖ,JŽO÷īn^zżujŖŖøūhmo§¬¤„sN;s—/?®pĻ룬¤Œ”C2¢Ķé €Š·Ģė®§ ½h²žŁüķ¦·]če˜‡¼ś2b$,ģčˆ"„Ž%ĄˆĻæŹ–B( Źšy„”BjŲRHG̦ Uįļ3ÄP”dŻ„’'O«ńqžŅ*6ī Q[īį‚„UćVų<’ŗ /m=…=ĖCQƒhl8V_eD*ƒ†įńØQJÆ„k9BżēĄœłżæ»ļåś~ļŃ„eĮŲoīyń\Żć1ī¾÷ó÷74VG›gŌ ½śņÖå–i Ķ3NoÓž™wÆZvŽ«­ļšhV¤Äc¼Ę@u ŽUSft¶TD;ēÖwĢ­ģ_9³«/_“š&•J öWČįb<Ūę>ƧجĮ`@…Ć%Sz”³ĘĪo² Ž4€¬®:øŻ’\čmū\Żä®Ø›‘ņyŗ» jD5Ń»ßisu{v™Ė? „^hß^<8¹Ķ ę©WØTŠ „(5 ¼Ćżh½ˆL7€# AeM²āA÷¢J½Ų݃liŖā܉“Ń;7|N<^~žóHšµƒéMŠŁ wÜļ>¾z'üé9Ø,ƒž!ųĘmpõe—ŻfB×{„P £&4. ’Dö¼eń~铳’Ł{ó89®ņÜ’{NUõ>3=ūhf“Œ,ɒ%ÆņnģŲl|Ķfc0$cł±%šKB $äŽKČ%$l Üp‡Å6°±Ł–lK²dŁŚ×iö}éé½źœūGuĻō>3I–—ĒyŗOU:§ŗ»ź<ļņ¼%ĻåZü‹·™mƒZŲhL”…ćzDĘūļžEc åd|”ńF«¶†Dgٳ8Éoāœä®SœOĖÜŻśćĶēVƞi+ITē ’ī ÷ÕĆæÜK[k˜ūī{–žŽ‰¼1dIóš5M¼įf÷‘øéńCģŽŻ7ŪWĪjõÖ[7ŠŃQRŠ{ļŻFd*Ybb§‡üē.š_–ä?“ žĒ«ä߅ßWZTō„†ĮŒ`]&ģ?—üģ?z”¾”!Z›šųÄŻw3>9Éż>ŹcO?ĶŽ½{g¼žoøvöūćGĮQŠį±1Ž÷õQ ²÷šavīŻĖS;wņ§÷܃aä|»zz˜ˆDXŃŽžŠMhlhš1ųķUéj"ÖŌi'’eqÉæ6 ”Ģµ§5‚l¬ŸŁņB(@Ö”($Źļ7}†Č÷„”ĮļµU•g_tŹžāZ˜ ĉį’x’ńwžŠ篨ā?-A p“wŌ© ¤mõééŗ•² ­+89ČYŁK7r‘ɏ’o½¬ū™'÷ļüĮ½OŽ`§s՚%Ÿūā]?on­M ąé'ö/ojó,8¤”z}ĖXg$e>9ó×MÅ­śHŹÓ8‘š¶öO…Īc0SŖXŠgWyģįp 5XL­¬vś–ŻĻö=_µÓ4+F äŅėāČåYƒŸ.S‰zNœwŽyg-ēš/Ī6€¤eqįéč<•€Č˜› PW&¾ 7Ÿæ”½t@6`¬ļŌ±ښhMP­5AŪʛˆbD Č·ƒŒ‡ž$±¤ŻßSž|”j“/Ž>œŠlJJĪöļ­ĆŁ×Ķ3¬ąż'Ūēš¼ēm.łĄ‡ž ī~|ų.H§gõOŽūųėĻ ’ž}ųĻž¼@kųķ¦„dŚšµ¤„- “SBdÆZ ¹?Ū„KĘ)0*Wm¶ØO7€«¦.5:ŅķY6Ž]³”iÕävu~€•,é–#˜ ‰D“˜ķ™ü@6@“‘¢šĆ®Ū® āõpŅn…[noĘÕ®†GŻō+箲zÅģė kį»÷ŸģŁ`ēŌŠ8“Ó~/iÓŖ”問ÜR€ ­‹4™R~-„@Ué“ŅNpŅļ“G'=Ė“QĻr•4–Ūi–«“hGWDŠś¤wCtÆDS)å HĄq Ąsd ”•ŚŠč”n$€DÉŃ©Q “k¬Śźü/s’’Ņg›×yNF ÉŹŖŽœŻNž³(GžŽxėĀa?‰Dšļ}o;*–’C6›«xĒ;6"„`ļŽ>ßä.†…lÜø”ėg5ĶĶÕh­éė›ā±Ēö³oß/kņ_“GłyœNņŸw¶W0łWż’å2ĮÕ+VšĻõWe·¹Ń¹Ķ yķuį0wßqo}Żėˆ%ČL™Įe¼’o¼į†ņŠŅŠĄłkÖšä³Ļ2’ŃčāŃ-[h®ÆēD?«–/ŒÆ×KŠ wĖ€W§Āų”Ÿ¤礘~„Ā\äæŅé”C“ŻVŖ 34[ž!3} …J€B¢‘BIŠ>æåC ķ–’sS„)µ4UžøŖö윚¶Æ+_œBš¾›Śųņƒ'čI`™’Õm³ś–!XRėRĆ.Ø#‘tųä潯oćņsk8ŅćŗókłĢwK:|įī5<“m˜žbż²’µ©æ¢ØžžĪ!UHFW,IM¶Ō¦~S8JäÓj×ć"™U šŻ½srĖĪĶž8š8æ5ėŃĪüłčŸ¾åyŠ¦p+)ĢbvłdV0@T‚4äL.ĆÅm#—-}źxĖ*€\wą{·_ŲuĀ'…Ņ–©žė W=ÓU×ō…GĪū|µ7=`PY0é™’åĆŅÅŃ%䯚ł¼:”ēZfGéėų˜mŪēmŻłB šīŅūV;ż›æ™£ß³g“@dž†‘{eO-F{aÅł¬qÕü“±Łmį&°¼01č BµąA|zvŸŚLˆr5Ī<&¢±–š”1‚ZŠo*…99‚ģ?öā„TÕ”…P ŁR€ó…ĒJJb‡ūybĆrn=Łóę>ļīy'Üõ x’'įsŸ€ÖĢē­lŁ]'ąP˜‹ČÕ’ŽĆ$„Į”åa4 ā ĪłtŖ*äBfĀīKŻTŅ0‡śCķÉi’ņTŌ³ĀNĖ[®Pi–f‰~rFĖ![°B­Gä’}©„†Ra× ”Rj…BŚŹ&‘žÄgĶ<üźPQ%€’ē_”[„d‡•»©hX˜ßbkī~KIŲ?uÓ°Xh_ł/$ ¹d³±±Šk®qÉĄ/ŽĒųx¬ˆlz=wŻu>ŸÉčh”ūīŪ‰Ö×ą], –äō-hk«į®»®ä‰'ŽššĆū\-‚ V­j¤±1Äńćcō÷O]Ē‹üē¶5#Fī†³ÉˆńrƒĻ[,^örE¶¬_*U:%µ.¦.ó:ėżśżÜzżõEūŗ9ķK[ÜšŹG·lįgæłĶĢöRĒT‚ć8E©/uŌÖÖĶźćō…ŗ‹w¬ōĢ(»żĢ‘’¹žG„Įi%g‰¦Ņ®§_#DĘ.“8Bk­Śė3|BJ$5“F€aķ3lŚėĒööž2¬ę²Ną†‹dZĶäź§ģņ냵Kƒī±~YˆxŹ”)ģįH_Œž‘ƒīod*ęš$ӊ“£‰&Ź2†±©£ĆńóW$§VµÄ#õÕvŹŗb^ŗĀ•FĢ^(fÉŃé†iŗ*žRJ­sž¹uür „„G¢ŽF€K—å1¤‹Ūǧƣ–©"ģ·KŸ»6ēYp^H’q’—2 ĢāóŸūF½mŪėėź ‡k4hFp/As¹?óĶg?{ʆ{¦p6Äõń‚āXµS„\Æ}m ›}ߐńųG'ŻÜO‹ŪÖ½?’˜l?óR—8…hi jh ?ą×O:y2źł A;螂{O}3zü‘žRšųŠ$`®R€¾*\Eś‘<°@.Ī=~ņ ųĢį]†~ jką}‘ixżu€ė$9ń$|’Q¦¤Į˜åe4fZų° £„ē4T2ߦœJx|£Ē«W¤"ĮŽdĢ\įŲf‡“–+”#ZŠÖžPŌ"Š)aźnÓ£NX>}ÜHw×µÄU^é ²üTęzSh”…V6˜ŚJ eH”KŒ:9!%Vø†ōčx‰‰g’,Œü„Vīꐒ¹·•&’Yģߋ‰A[°µąˆÅ“€µē6#¤Ņ6[·v–$›o{Ū%““T“N;|ē;[‰ĒÓ–ä=ļ¹’s×ø9U;žķęÉ͇‰ESœA·Ü²žė®[…!%?{ČĶÅņ˜&wÜq1ᰟēžėᇒ½sŽäæč: iĪ=¾ä‚[ō•Łs‘ä?߈QŠWaßÅö‚ē*x_Ŗļyœėe!šy“(÷ŅĀ…k×ņ›gžį—O<Įu—]†ßW>õ!ėżæõ†f³įPWįźj.\»€ßĖ[H„Ó<ņä“|żūßēXw7oyŻėęŌ毾ō%Žö†7äé¼ŌQ®£§oV§¦.ŁH°=ģ¼Č„]*n˜ę2,äģ蔨 į F2Ģ;+(u¦¼Ņn €©‘ĀAåńzżR†ŌBø¤THįĖPŗ¾*ķ“T?=ѽ„Į”Ž’C śŒ¼’JłLŚ|„üŽŅč.Ō…Giä<“ō„xī`Oŗ©&9wyr|ic2ź÷)GˆW‡Ź”Ä(›‹n‰"g3™ ß/_Ļ/»ŸŌ:{ZÓ54d,„Ör1_½eŖéeįH|v÷’»{Żꆪذ42ŠPóMüŸóMšįÕ1TQJō¾]{É|Åć©DyZšRÅYgX³”N£±kjÄ-’gy]!Ą\@6äzĢÕ ØmqŪr 3ł’ż§k„åšā|ZćÓÆć`ʧ‘£‹»^ĖAŸĒ5ļāģ+XŻJśūO°óķ×°gY3Nrxyhm†Æ’ox×GąG愫.ĄęC(ą ī,ėß®Œ’ų)éįqĘżAÕ W× UcKĒ­`(“S!l’d‘­Æ®ݳģ=¶mvØ“čŠJ¶Pā³/nŠIĆPŻŅ£N˜–:nU©Į†äńšÖĀ„l¤œ‘H"Żś±„ēQJŠaVÜš†v”“ „–Bi-Ń2rźŖņnĆV}øŲp’WsNņ?×)NĮbkīn*“f×Än iŠāo^ł/<¤į¾×ŚĶŸF8yŪÆ¾z%7ŗ7×ūļž¾¾Iš¦[7̐’Ÿżl7On>:ÓóęĶGéė›äž÷]͹k›1-Iē±QšB„Ć~R)›GŽWś:Ķ«ųJ•$Éå§¹ø¾AČ ß~BEF‹BĆCQß% ™¶ŠŸ;¼"ŌŻ-ĆBĪUõe„«.¾˜Ēž~šŻņ‰Ļž7\wkVøŠ’K—ĢFåĢåż’Å¦Mh­¹žŠ+f¼öBöqÓ|ŽōŚ×ņģīŻüģ7æ”*äö›nŖ8®=ņćSSLE"§n²gŖCÕH!Q™PdSYŌ¤j™šę„—ų™Ķ›ü—0ŚUź7æļ æļ¹ČĮMŖŠ ćiœ‰øBh-„f¦ Zŗā¾Jh­µŅBhCjey æČ܇$"S-`öž%$ų“^Z?š›Ž1åpUM©FįąüØįtÜęŁC“ģ:6ū½k©-æź­tɶp¤˜ž^Ó_ŪŸŖ­¶S¹RJ—WŠŻĶF€KŌķTZžų¾mĖ7\°ttżE+Ę Ć ”94|Ą<1 ( h×øąäŅŅB;—Rjˆ$ĶʐeÅG;tŽŚkCł[m é»i:+afJšeKZ˜Śņ˜šŌ¼³iguK^ūŗ+śõ«'Ņ€5::ž™źźåõĖ–5=ōgō'/¼ēCš£ÜįKgŻ“®¶nAQą †Ö®x_s‡kČEVp¤üU°ģ¼b€p&dtnįĻSŸ…”5Ą£5–RvŗųŽ·ŲX|ųĮL)ĄądK6„P‰Ŗŗ•čO6óķŻĪ?,vŖH馢Æ\ć“ψ†fӇö>¹¾ćIų?÷2e˜ {üōV×0āÆ%) tVńæPp>•‰6ęQ Ą“RédŌū.Ź=#iič>ĆPŅkŸšÓ]žźäńśU±™8E„¦aR„NJrū3šB„Ž2B€Ł6t/¾!жr«ĖńčPaH«¾@øüĻ·$ęEž+-ŠęZKbŃæŁ~Kw©µbĒčs\T·ö@ū¼ˆl1), ŗ™’½š|/7ß“æßü÷J~ō£ŒŽFYŅRĆUW­äŖ«V°u[Ū·k×6sõÕ+Ų¶­+üƒK:;Głžž%™tøūī+¹āŠdo:ĀT$13bQ0ØĀy-i©fp0āJ/’ę‚J’ę¢kTĀ€ĀāŌżēšĒ«ä’ōĆó2’›/¤”üÅ>Ą’ņ—<üÄ|ē~WÜę†+®ąCļžM­äżŸšā±§žĀcY¼1Ē8šōsĻĶäžßuŪmüž[ŽĀę;øģüó+Ž)ĻŲpĆ §n²g¤”„‚”™jµÉ†YĄüQ‹Ų±Ä!‹żĖ…2}č#šÓ—õž“]Ż(©ī“)ؐZK!“”(„P>ÆĢčąrįŽ‡„»xL)tm(å¬^rdśłīéõ\,Ļp&t’źuavwEš{]ļ~8hņåÆTv‹pó% tĘ MF¦ŹK¦M5j‚&Óq''d~÷Ńa=15[æ,6~žŹé±öędĢgi% 3Ä>s9ņĮÜ×WżµüÅMJiiš†ŻŠT3¶¤µvtي†‘Õkۇׯ_6zīm%j—-Ś“Lķ†<ĻśüŻŌ„ā܀uĶŪ=¦S²6āPÄßpn£[Ż0  ¦į©“.ų›Ū>[ŗ\c ąÓD5åżōīÉų»Æ}kjjśƒ€'‰||ļŽČĒļśš‡ÓļżčG»¤”‡ Ć8lĘa˲‡ĆįĆ]]]%źÉ½4pÖ‚ŽS"_£% Õ ®&ĄŌØ« 0ܝߞŒéquąEŠšaā~f`*…‘J sš×Tø«œzßI=*ˆ1Ō”c÷\„JśčDlqcńPĶķ$’ćIž|ķÅl½`%W,¦æßū(47¹·øĒŸ’¬[Ķ p燔„Ŗ«`zzĪ®Šš…o“źbŌ 'TEoM#“U… f1—`¶@” J$„TżZÉ6!õøįµ·Y^§ÓćO5$ŗjź'„…Ę4IŲZś2n}BJC̈ś9ˆœ~YœĆļ†D; a”ų›Ł-•aJ”µ€ÜR€†ŅŽ’Ā- “aH%GĘ”#Æ?«>Gč ’ņTźūŌ“’9Ēh”yn|7i­č-/O63m•jĖē^£‰É8’ö-üį^ÚÕM|ź/ŽPtīŽž ø’y`Y&·ßvBz{'yąĮŠČ{öō#üų'Ļó–7Ÿe¹ß”†† ”éédåyUA/ųąk˜˜Œó_߯Īčh“ä<^©äæ`ŠÆXņąy…’gį±,ŽżM“Ų\ IDATę7ó¶›oęĄŃ£ŒŒsβŁzȹ„ü%¼’<ś(©tš7Žpįjwł¦µęG? ĄŪo¹pÉļu—]6ēxfŒ ×__dlx9 ŗŖ:ĻPŖĮPŽQl /¼'£Ōż©ün%›ę‘Š6æ~3KO‰š’¾)…pWb–^j!„Ņąø%„BdŹ𦶸·§ög?ŽvÉž½ŻĒŽ “=ų£­ÕƙllŖYŅZ7¼¢£ičš6t]uķŗ”ÅĘĢ OŠ’Q Ską?~wĖO¤Ŗä4Śg©±ėĪ*Üd¾)d§„RJX²j&„=x=+P¹‰>ń×\šśī‘‘±?ÖZgÓ,„Ōj„ŌjŪžČää$Bˆ®~śaąPĪßCø>ѳg›@¤S 'C EÖ{ļ øŠž±©YO’H†ųOC*īŖž7“Cļ!7ü_˜ĻJŹl @”–B x‚Āuųk)…–†Š7ģß]†dļb&ą±õ²¦h:„vNģķ±uMÕŗ@ī½ėųP‚¼’xޘ¾ų“®™×?ŁājŅi <=ÄOēóÓo™Õ¬ūžć3ƒ遜>5<lHõ ō'V¶Ä'6®‰Æ_ŸlØI§¤Zą^\bœė¹‘j¶&bId,'~æĒ¹śŚµĆ—\¾jä;’ž›>śēołłļ¼ŗst8b=÷ģ±ŗ{»ėŽh|nŪŃõGõ/«o¬™v ”`XRW Ü¹ 5UY¦Ō‡†Ā”žé€mؕõŃ©„Õ±²ģč;ļŁņ­åČ)ƒ8c~Ŗj–i–ÕK(‰2ŗ~|ŗpĘĮP@‡B~5td××w>ņoļ’G×wuø:_č8Ī9J©ÕZėĀ‚fąĀĢæBŒ3k8˜łūCJǽžqœm"qŠU7N1²~Bøyž±©Łš’įA֑^h]5kČV8“å’rKøiC€Ō©5‚ÉSžR„‡{2„±ļyŒžnŒĮ¦į`5ŪŌ¤¢ČŽ$щ)ģPmV£½ (_ØFy|čDµkšX± L)Ą,|TĖrGŸęŠ—~ČW’ā÷ł„,ÉśņįńĄUē·­Yéž+DøŽųŗŁ÷ƽz>wĆ;’’HŚfĄāhu]µ-ŒÕ„HɌŲ]š¹Cż ×PĄI Ś6˜&†ĒīT)Ļ5:-; “““#{wĪć¾v@{ńm\‚¾*B ­KĢĆŌŽvyy¦:Ęč”Jn)@!„2b‰a§&8“ L³:„=å깝”ā’<[sķV²ł ‰žU:6»ļމ$UŠuᵋ&’Ł÷ӑ$?¼oęø·Żīžø|ąFFܐC ®½Ī•mxį…>ŗ»gs_Ė•ÄŽō¦ !8vt„ūÜĶ’øeėÖµPWØHž-ÓąņĖ]+ŽÖgŗpœÜ¾KĻ#Æ·y’’ÜsŸjņŸ;³WÉ’éƒӘƌŌ+J)"ŃhYļ’ż9Ž’ŗw]œėżæóÖ[ō=śŃĆ»eÆæž`ąåY!(^ŠŌ&ė÷åJŲžJm-æKÅ óĄ\†…'”68żSJĢņ[­]GņLįŠ*Ch„*ņVISh#«žŸżg Bh²yZ‡)uĪ’hJėŻ“ūŗ§_š¢Ļņœ‘›XŹVlß×ēDb£ńÕm‰‰‹WE‡/Zo®M$-i(YaŹ•r‘±ČĢÅŖ$ŠwüčP0v¬uē·” ¾>”zŻMößō¦Kŗµ#ōóĻ~öśÖļ½éö+™ŅŠå īeKń™¦ŌŖŌҼ@T@9šdg[Ó×7oøéČHųĀxŚĢ#ĦT‰Ś@Ŗ«-=r󺁭øźčA§„iĮŠRŸ)ģõ–H؄U«V:;w>¾ FŸ®Q Š·ŽzkĶŽ;VLMM­H§ÓJ©ó”Rė€5PT޼ø<óÜ`ƒū3—S‰³ĪŠ;ŹIW/ é$DFŻšžŗ%.¹ŸÉ’Ÿ5Ģ2Ņķ²ŃŁü’±ÉOžžčˆBōt!">ŃŃĻ:ŸĆ KW¶›¬6č"ßŪ®5ÉdŠī¤ĆńHœ]ŻlŁŅĖ^OD{v{#v]ŽĻ.eȖōųŠ)»ü³'[ f£—3łżĶüņ¼¬æķ:n9Õ×ād üį’"¾æ“AcUÕ®[B_} ӞźŒ÷?‹LĀž`A%€Å )Ń^–ĻīLOƒÖ¢&ŅØ 5ĒJČę»ČÄ’2?Ć#Ń)…˜Ł§ lĖ@(ČĻłRh­J•ū+a*ÖĀŠ†TŲ„$ڐ("ń!r ž¦zģ©Č‚Éy"}fÉў§’üg_ 82u ¬ÆĶi.Ožó_ĪMšƒA‹ĪĪž}öÄLsGGÕU®—uĖę£ł-2Tø 7.£­-ŒRš‡~¾—Ń‘iīżīvV­j¤·‚‚QēĶć¢‹Ū =¤R6Ļ>ŪÓ÷üēń*łeĄ2ē2Į¾ņÕ˜˜š*ņžg¼’Ėā­Æ›µŽ?³k×Lī’Ęõėē}®—sī.¼/¦ab;³”Ä”T5B‹™jó&’¢Ģ.eĶ’Ż—Å\äæÄ³÷ǛρtŚĮŽ*ķŠł)ׇ„5Z(PR G éF”üA3(…Cj)q=’Y=€Lž¼3n ¤Bh]HźÕķ$-O§³·3–™ŽPŻnؤ0µhōOėēöŚ~+[æ<>qŃ9ёõ˦'›ėÓ Dä¹G 3YŽv=ń¹$Ü(-³„0„^~NSŌļ÷Äæńå‡/ū§Æ¼ļ×YAĄ,6\øbĀQZl~r_Ėļø¦3Ū®i ­Ń3%s!ē(IńĶ­Ö}żÉ >h+éh]ķKõ‡¼éqŠIŪD’Vćš“oķš“oķ®žś7~żÉ5'īÜŲõķ?żž]Ž#ēUA!×čaSŽ2«M079/ā>(ė"XP¼4žłĻæ2+vāTgķ4:ó½¬Vėó2ÆWf^ūqÓ^”’ķ„pÖ¶dśŽėQBœ¢„•2ķ5„Ān*@tŅČb8c 7»UĀ/~€CĪītž«§ qh2±‹¶ZĮ{.‘¼Sš¬šė#^Ÿ—U>XUąĘöz>qÉ2ĘyōłN~øe‡Zˆ-]IŖi ¶Ē‡öłKĻÅc£Ė•,„/€j_I"gųć_ēßB>^9s'žfü’_"ußc XŽCģ 7ѹ¤•±p=))óē}¦„­Ŗx'#nŽĆōPhEØ96. ŹŗĒm+-r?r!Ń:—ōĻ5.\€Ā”)юć Ē€lś£TBKShR:Æ€0„–¶p„T ĄJ§%ŚpŚņĪi5ÕƑ®yŒ.g^3’+¹eŽ–r 9ł|ŗY łŸ ŽFŽwb\\!fī'Z‚üēŠ"ĀX‚4ß{ļ³ƒ4³_ęövW¤1včīŸ=ŗ ł÷zMn¾yŪ·g``j¦Æ#G‡‹Ē’Cž…€«®YĄĪ=ÄćéWÉ’«äæ$žŽ_ÅjcŒāģYŸ5Čęöē¢\ī’łK`6÷¾x¹ēžg!„  255¾)µAČ®"bMŻ Ž.ł²Ņn%›O1łĻ±|(#e`÷L)­“Rd<žø„’%Jk”[@*!„ņū½A‘ ć€RēWfœå™U‹@#… PķKėUĶÓ)æåØCŻÓéCĖ‚”Ą9pUš”rŠń©{:‡©éńdK]2ŗŗ=1qĮŹŲųŹ–h¤”ŚNY…p}ųZ]x_Q™\Ž“üó¾ßōėÆé—oøķę’ŁzÕ5k÷]råźžsÖ,Ÿ‹Y?ųΦ‹ńT`ĶŚÖ !…ž· 1S GG«ƒ’¶łü÷ŪJzĻoŁōē7>÷Š„ĖGĘ4ZKi9Ś‘­õ–£ķuģm[æķDć5ƒS¾ ’¶eõ§Ÿļ©½ļæŽūĢ}Zk £\õ—1ēM87ż?E¦†@ŖŌžIrW«>ŸWĒ NĆĶZųčG’²ixxŌūo|åxMMµ†1Ę(@°¢ģ°Ęq ; ŚĶĢQ•ėŸžaœmŻÕEŹqč7MŚNē‰Fū ćBØiœ%ö¹Ž€ń°S®ų_ø ŖźĄ±a²H¾āĢ gˆąąŽ4!P%ėǟ²„»ćż߯Y–üY­ÅļqņÕ’šZ4/oāŻĖyץ›Ÿ<Čæoż /4·3µb ɬ!ĄSU¹`”āl€°=‘B˜“U³b9Óń zīž'¾ōÅ{ųš;näŖÅŒżd”5|ņ_Hżó}ō[ŽŖŲ]ŪĀ”– 647-”Ģ é?€“¬iéšģlV€LLū:€ēfś”B+J{čUŽ@lWÖʍȐ)W8°ÜŲĖ ’ *cķ”ĄS 唊JĖĮ‰¢zžĘŗ•Ź‹¢y.¶Jž Ią¼ėŅŸŽæķŚŁż„¾ń–‹7Æß°|Q‰Ā–)g|ģ_Ū|ѕ)Ē\Ł1šĖoŽłŲOLSĢ*ę,ź®]=0ņšÕż›¤æłņćkĻūęÓk>²õxĆ;’ōž ūæšÖ]W<” ¦×Š…SĻQŠ25©āķs ’£Xš­ożąļćńÄėyäń/?śč’gćĘeéŗ‘°^ü³ĄŽ,¶“S³Ķ S6§Ż#Ģd°äꒃµ3ŚĶ+\#aŗFuĘńŻü’‰)!°qæL¶”8†®Ŗ+žvV*X®Ą`bšWx[GłˆĒä“RĢ•}æ0±¤žß¹ćJ®9ŠĶC÷oćk£ƒō¬ź`jɹ¤B•ŌšK±’č ŹæŒt{’ńxšcü¾6:Eņżoę:Ó8½%¹˜ŠĀ=Ÿ#ž“ß2`y9ńBm#{—tŠÓŲŹōŒšßB”`¦Ą Vr‰““V‰¶Ā“›ļČ5Ų”~ØYŹŅžr:ķH”ÓB˜hĒF Ī)įÖ Ö¦!k:6L„#Ścͬ<Ģŗ0Ā2ŃéŁŲS@žŠ9Éé³-ś¼…ĒV"|@ĆDrœ'ū·peÓåTy‚łGłĻž)$ĶCƒ®6ƒßoŃŚ¦æ2w¼ėÕŠāź«:ųõÆ‹¦rw¬Hž®Ų ĄżƒŒÅNł/üŒO5łĻ=j^äæp,'iÄx„ ¦(G”ˆ:^vFVp8ÖĀŗ`K}£‹ś¾\!„ąO﹇щ‰¼č€gvķąw.æ¼Ü”%QĪūŸH&ł‡o~“ē˜i{tĖŚ[ZųÓ{ī”­¹y‘3yqąóG8„Ņ9©Ō•s‘’2·y÷ÅßęJ› oøE}—1tO(2y’"óĻ}-ÜhV‰%@ “B(ĻŖ’R`B-dĪ-4[2Ń6„"ąÕŹ[憎J7Ö&S=ĆŃDē`æ÷pgȇŃč śk̚ŖØ x„,s]“†éXŠįÉø™˜V£S“Že¤Sį@*¹²#[ޜ˜^Ł’œnoHĘjBétŠ«m·¼!(]°Rø5” Y$bWźģ²Œ2;ć¬į`żłK'æśōˆćŲģzīDĶąĄ„/•“åeW­\ŗ¼)Z*D>“ŠYÜyAN€”³ipdøv„!uś޲åycÕfŁõģĒ_{pϲpōo?łÓKžįW–Üłņ †į)"ū¹0MCk[H“qūĻ¢dĄ‹æ ‘Hœ·qćE6’ccćĖŅ|6T"ű€×,¦1Ż›…T<¾œ€īāżFŗ]@}«ūžÅ ’ļĮĮõś§€¤¤„Ä1ĶŅæœJ„KįųÄōY± ¾mJöō^ ¤Ä6“w w4jłdĀgźxøĮ#šZėƵ Uõ55zæßÓģ Č&‰¬™eĀ½—å.Xܔ0•¶B)§ŹļŲ-5‰ŌŹųtb2ź‘S1ƜˆZF4jÓiC&RR:Ź@+0 ”e*ō:vµßIWķt8d§k«ģTu( ˜ŽćóJ[”JK)‹X“Dø!ĆŁ”™ļd7”^_8ꬊ—œiZėģ‘ŠįĮˆ÷½oūņ;£Ó‰@k[Ż ^x®kõĆķ¼ś‹÷ćŲ›ļøņÉO|źm;K†9µ2ć5M”K ņ+p²C—RK©•Ā˜oōRŪ9‚Ś@rø““Óó·Ų:Ÿ¬Œčßb–Ć Ą§½9Q1öļ;lÅćÉjŖŖ¾’ŁĻžÅL”<~Ŋ³“Ś“ ®æĒsppF€g’ž^ÄpO+ĪF€óĢžXŁŗøŽŖÜg‰ 5F{]@Øz–Žg¬ß-{‘Mx±"ö#›Ī‚¤eaWU”–ŒŸüŠdŪ&¤ÜĢ}ßœ~y!,Ļ›®ä&õæŲŽé$Ē4«;H…jP$ œ`n%€¼v:TƒÓŽA2äa䨅ŻŪKģć_aų+?āŅ?y'ׯv=m>Ļā ųźHżó˜bŲ“č ų9 qø”•Φ„ 5¶­nÄĪÕk0 t6 @:č¬G’T –ÓČVį…Ŗ|įé™_ŠéŠDŽzNj€L9Zy „<öLĖ»bćęļjDĪŠ$©˜łŚé‘ś7®Ž8ž³F•­ [~"®ž€ūW¼ĘTZh”•Ś4ÜHĆP ‰6‡¦śs–äuįii„Że~Ō̃üWl)×8Տ—Ś:'ł_ĄyKnŹ8TŠĘö2žœą¢ś 1¤‘wī“%’ٶ”į’ņ/óš×¬äź«W²n]Ė oĪī{ÓĶnķšū9|dxf€ó!’ÕÕ~6lpæO?Õ9³ŃēsæĆ‰Dŗh†)©©ņ1>?³ä¦¹4ł7LÉźU ˜Éįƒ#¤RĪ‹Fž—“Vń–ŪÖ‹„^ņ­5#C“LŒM““–aH‰Ø O›°6ŠĒ2’Ų«†€čhoēKŸž4OķÜÉž£GiŸ#Dæœ÷?2==#&ų‡wŽ9Cž³Xµl;öģa`xųŌOā Ąē)„AĮTO® Ō}”Źl˜½ļĢuóŸOßåÉ?€ķ Ē>1‘ żĻįČˆXK!EF)•R!„#„p„PŚŠJIÓP‰X:Łw|drlhäˆį'm,Ū@Ø`ŠėkiŖm C-ž ÆÅ²¬ÓćmĮ­8ķB‚Š Ś0•öJG¼R5†SJ9 bI!’iSŲŹ mŲ B[R(ÓŠŹgiĒļQŽĒr”×±,ķH©”v„6„ҹK.E6t_h!æ9«™h„¢²†…(Są?æžėõé”m~óūūöš5K"”ß~ėēļÜxÕŖƒ±HŅóĆ’zņõ”’¤Ą iøżfm'ĻÜP°¾etĻöć-W דLŗł|8†„§ø·2Ū>ń¶R'®8gll¦ņAv?Ә‰&ČØQ^ū¾˜ņ«łgæ^kķXŚŽžhī¶ ”äQpõ‡?\½u’ž/*„ī"’'tpš!ą;ĄūY\†ĀiĮŁdČĀŌæ”ēŽčöX,]HK×ĮŌ“tøā~ūrÉ|ažŽķŚŻ ńČBFtj 5ģ>J ˆ11)]€Ļ‡^³ęäV"Ū6!Ķ¼Ögq/‹ś[ ?væ IDAT¤D¾žræŻĖ÷“¢Óćķ¤<Žü¹ĶC `”ĆBAĘ}5¤:‰ō2ś’ż#‡?ż Ī}ēėøųĶ×Ņ~ń¹<Öü©U4ļĄžĮ£$īßÄd"Åøa2č÷Óķ ŠUSĻń†VśŚV0^WCŅ_ē’’“®¬Cp:„³Čź8ŹÖ¦4EŻŖ¾'«›§ŽQµdtĄ0…BšŲŠÅ’r·_ézņåžĒ[’,3nĢŪØµBøÉ7vJ®=ņ\ųĻ×^?ö™²c—h•Vh«øJ®Ē#T:„„ŌBkah™ČmJ”-”@)sp| å([rę~ęin@HWˆ®ó"’•Esé¹[s÷}äædßs»vņśĪŠķ%’žęņĘK f<;‹%’ŁK‹„ųÕÆ°iÓZ[kˆFgĆ=ĪYŻD[[ Zk}ōĄ‚Č?®ør†!˜˜ˆ³oß 0¤ĄćqæŃ‰„]4®_Ķ5Æéą×æ>Ä–Ķ‹'’ÅWgĮó°LÉ›ŽźCśz·‘‹“æūɓ’łźSd”x¼–ĒeIŅéA ēĄ¶ś{FIÄŻõ˜#¬y«qGŪ#+Ł{55 B7½ę5Üōš¹³8+y’£ń8ׯgㆠEĒ Ž•&aėóĻĒéXŗ”6œ•b¦e¹Žź‚ēS QķÖA.ÄĀ~Ŗł‡œŃæRp|Åa»NēøB‚žtK¦I”Z ąH!”(¤VĀ­ “’ą%“¤”•PBgE’¤:šˆĒzū£G£J m˜BI%“?ō‡Ć5õ@h‰×ėkńy½ĶĖŪ,$õB‚)”6ÓŃ>/×»®4B+”ÖĀŠVf¬–Ēt“ćIWŠBh-ŚÉ ŽŌø$ęŽ8Gi:)Ķ2*ų•!¤”…@÷÷Ž×\|Ł9‡Ö¬m‹ iĒƒćoxÓeæødćŹQiĪÆŁuɟ|ź¶EasAĶž^ņIāßŗł7ĄÆ3ѳū…8¤0gł;Ē«üSĮ ÄĮjŸc—LQ¢yX–©5z¶@zķõzt"ūɔPŒ}=}+³ļ_’†ö—=i)ßŃŃŃvüųńŸj­ĻĻŁ#ģź€™¶÷}Ą_ĢcZgg“ ¤'¦ŁŅTĖ;ē{PØ®|s~[*Żå?JFūÜß©„ó’³éq /bųæ35M\b@ˆ )滄eŽ…=ņpü‚g8ßkr/"łĻøõ*Ž>2Nd÷Q~ź3P¾ć ĶŲ3ßŅ2ģ?[ ū>Ęl‘?€2[Iy|Ø@©©¦ūśžćÄW䡗ž›ö —¶ß¹„e:Ø_ŁF°„OĄ‡ śSÓM »qtaæp˜ÄS/0m;D¤Į¤4ó‡šzé ÖŠS[Ļ@c;­DkėHKõüK3“#æH,H  ¼įč“Ē'ģ‘ĪÖU”¶Éī`u*^X Pø(‘½'›ø÷ēcO7ß9CžµVŗō5ƛųY AOńÆ>śC;)/J'ŒKz÷V]Ѷ>²™Ÿó/¤ŠŽŅyKĒČ/— īH˜hf„•–d„ “aHå¤l[L'tM }¦…Y[Cz,?Œk!äæ$^ņ?ē˜Źö½@ņ_bćDzŠMżOpYÓFšżM%ŗ]8łŸi‚tŚįųń±¼ÅźŹ×Ū71‘``pŠ…fĒąŅK]»ń3Ļt”2ß'ÆĻœńv'vŽ<–-­åź«Wąń˜sĻ£č:• ’bńä@åxULC’æūāČ’Bo££Ń™ēeCCx¦”!€ķ(ŗŽ×K>%čŶg›ó7dńjjĄā1>5œ۷ć÷zó¼’¶ćšČęͼ­Dś€ÖšĒŽpβe3ķ<ößč!œ6ŅŅŲČßu«–/?]Ó8i¦‰ĪföٹRæļØōø˜G*Śüś-uĖß=]>6–-]+؄[Ļt…}!µ#¤P†ŹZ% ” –Jø%‚3æ3Æ%Kžč’ÉXlø?N(‰–Jh©„ö}žPM]ƒ/ZR 6–ÆÅ+Ćō„‘-„F)D®^›RiG»|W ”µ.#®fY¶&ėżv!UA !—Ā=@1ϊöąó›i;ķĢ8”vn?V'„Š^²| ĵ.]Ķ©„:«ęƏ9’1UĀĪīśśźÄ kĪm/įõz2W+ㆲĮ¢ @ Ąü_’[pĪČŁL|j2ž˜ 1Z·īÜXuu•†qĘĖ<ÖZ[[Ļų©Ö:«žžšE Mū:ą>\cĄGĻ‹ŖČpŖq¶²©/öž.\ˆĄćs½’U®īćżšÜc•5ģ”{L &+D’ wĆŚ+ž?ŚŃ ÷ßb±eW&ō_A‚Øa’ pźėĖÆ:ŹU8¶1ō[BõŠo £¤½łEi ßńZ~ļŲ½ ö%å ^w!ÓÕm8…‘å„c@ĄF[HgŒ–…Tįt¬!ī“’Ŗé%6ÖĒčš8½Óc4$4<ŗƒ¦‡·Rē8Ō(E…O•)|'pS”RR’&QæŸqĖĆøĒĻH0ÄH؎±ŗ&&ź›ˆ5Փ–~“'“ļ_JšÆr…O‰@!Ąįƒ—Fśė¾0~“‘PĖō_·]rā·„ŗČÕļ÷7Åʬ÷d·U7'æ¼üņ±‡S  +松ūs]›kæ„”GF<7[2" ,NėŹ×Dh“)…¶•H‘n”©•vL”HimH” JŽM÷Ŗøi¹€y}ó“”<ģ4)žĻŁk%ņ?×a„vĖ,H²ÆSŚę©­œ>—5u«ÉŹ/-–üŸ7æ­ŗŚĒśõ­ģß70ė)›ƒ4_²q)~æE"a³óŁž™}¼ŽŁG]"‘ž Ē2xĖ[7Yß”•×±źź¼å­ēsšĄ[Ÿ9NĄo® L،Ēq2ǜjņ/„K†²0,™³ū™%’MĶ!ZŪ«±m…eIīøó|D&p§·gź%a02“ü^K„®Z9ø’īK,ۚ©ķü¶ ŗznæąų§Ż›Æ5Ćķ ĆS*HČ_īVZśZ˜UR”£¶n4@ī¾®Ą²¬™Ųīļ~÷+ļ¹ē=»juXųXŪŚŚ.ėļļ—Ų ›¦y›mŪ[ N÷p7š^ü¼ĀTĪ8Ī6ø?‡ōWīcėåėéö{ę—0֏|köž7_³Õoīu©“’`'<ųe°@Ą¶¢ŁQ°ły×ėL"˜“$Ó¦E²¦gÉōõ×£7•øw”«°orõo˜¬;5£?öźā/ĪbŠšړж…^ź%ŽÜF²aŒHdŒ”ń‚‘ ŖŅ1BÉ”“CP§ńiÖHĒ0I™’øe÷śˆŖ™Õ W ֓ ×»"ķ,Ā;Ÿ5[ž*€,¤"›„ ģøoĘ-RÓqŲ2łž…ŃYŒ®ż}€åsž^~łXžEWJ“?”Š{«ßĘ'ĢŪŅIq–†įu” ČL%€\%“ĪD9›1#˜ŃBhGhm(©µPZK”µ””BCć=vGÓ¹żZ- °ļpž*±ļ¹Č™Ot^ä’$[³}ĻļŲ’äŽē-µ-’ŗģ›<ČĄ’cļĶććŗź»’÷9ēĪ"i“K–dɲ,ļ[¼ÅIœ8‰! IX¶R Ņ§+Š %t{č¶<“““¤PŹ–„²‘Å&ūfĒ±ćŻ²µŲŚ÷‘4Ķ̽ēüžø3£Yµ8¶cśäózɞ¹÷ÜsĻ™;sļł|—Ļ7ÜĻÖźĶy‹’ū^/łOżüšÜs­47W³xq9wܱ…ŃŃ0?’ł~Z[g$ĶR ¶]ÖĄ+Ɯ&·Iä’LEäQ×¾m•E=ŅĒŖÕ5qĻpśČK/“30:«äÜ*ŁŚ1H%°d¢Õ¹!’ j¬]WC}C >æKЇBüzW+kÖÖpŃĘŚén¤`l,ĀŠ`ˆžī7 /n°c6½Ż#„'#9÷k£Īؐ@Āpņąų˜Œœv»}T»¤Wƒ0B ć¾pmŒŠ”„NRPH­•Ö^„!„Ś6e„Ņʑm)“ōj-ā„é¤Ū׍—l m!"ÆtDsqT.)×vav üR„&e,8!Ģń~)†¢ŹŅŚOTGˆŽMLF&Āķ§u_Ē)K ą/(õזUV—Tx|Zææ°ŚÖ#¬©1!ČQÉNĘE’BŗO—ø_Ś +nVH\!réKbӖ%#·4%eĖ-®[ܼ ó©ĒlødŪŹ×¾śµ=cåģ\Z»’XŅkœ”š…ÓŚ)Ńüxߏ„æsĖgbZ&,ž9¹š?xiÕ±o¼ūÅŁÜ0˜“K%s‹ Ī„Dˆiź&Yйh˜×ć1Ńčōp}x1ŃŁļæ ŖUėVķoowūö|?$ŚTUUÅ;ź”zÓ¦kČ“ĘÄ©@ pĆųųųŃsķ9Č23k5‰s†żĒ°GĒ™‚q`DF„$äń-„\^.“F4tq‰Ēā·ĪžhĻV5Ұm-7īia“ƍ‰ŗ¢…tfäĢ˃)ØĄž # +q"SDĀ!&F‚ O…šD‚x¢ł­?»óĻ‚ļ{ßū*łĖ_~>‰ÜIÜT"„8P[[{Kww÷ äi±óP88?øŠ 8@䞝üšO>ČG•<’źō x†0!#ĄŒŖB&żbµµč„ąrGdā…GQ[_ēõKlžSÜ|W>ū{{ūhk!äÆd¢¤";ąLay0_ŚēGJ±£†ˆć !Ē‘±(r*N¬½^.Į/Pī_ĀĖÆ¬ō1EČ!fÓ˜«ąŁŠR$]bĀFkŚ $½Ā0eDBŪ¦Æ½ō6cÜ{†§Čyŗ¢)Ō™(ķē•$ šŁÉW8ä©.%Ś•™ļ%¤0čt£@j9@i”‰ B€vRPémv„hćį>SZ˜¬"ż><eŲC#sfõó!’sĀÜųxÖŽYÉ’<Ī›s׌†… 2š0)Å’·MŒŻ{é™čeSͼŹ{ÖČb¶5ū÷w±W6iN–>ĪĖÆXĄ”C½ŒSÕü§+ÄbŚŃųünyē:“G>Ź%—¹Į0Ž3>ćóY¼ķś•<śČQÖ]äV8~l€{ļ} Œ”“ŌĻ–‹±ly==ć³’’ŠŠ"®ŽŃL4ź°ūåS „²ę!,\XJĢ֌ŽLbĒ4ĀR KIVÆ«”aQ)……‚£S<ŲK_ļDł_½f;ŽŅœ–ž0<ę_&8:mÕ¾ņźf¤tžņģ3ķG§ĀM›b,8EėÉa–-ÆdIs•UÆ#ė<ĄhĶ@ąHh_ßO-&µ}Ÿ¬yÓ0ŽłÖ·ró5×04:šTśO„źwföį`ļŽs·Żx#ÅEEliįPK „Åż’¦›²śuSĄü)•Ē“Ö|óūß§¶ŗš?»óNlĒyC„„Ģ}N_“pĪ†ßœ›Ļ2łŸķ¼±‚l@“mH#0ƽiāł’H” FĒ„é\‚/q„0Ž@h#Šń’F”•ĄHå>ē€6€V"čl©‰zŽu³#®Ax²ĀõsĻŃH)¼ÕŅė­†ņKaå'Gķ[OŚS§wŹą=—tM”B©ƒG»Y” £”01 Ä`$ŒŪ†N+Å)¶ŽŽĀYX\UVQ]]TRZ푾jÆæØŹ#¼•÷ „5/?e<…)•1ĄWŪ«ļłĻg·’š{æöz}V“¾”²o銺īõ››:·_µ®{į¢ŹIH/#8’‰o:÷O\“`<āYpĆźŽ{’ēŪ^ŁcYJÆX02~õŅ®G=мļs]ś…’dū;FKÖND¬)LLIķ÷Æ;ŌSzĆƇ>śąO~gĘAŲłiŒYeŹb ’^Æ'k=žÓŖ ĢöķžÉ'_|ĄS ŽžK_ś‡?¼ėĻ’÷q Bk½ŠΤ”zäŚK.łŠÆž~¶œžę”×ķ³“=ļø ‰(€ŲžCtŸīć—Mu¼’Ō#­8‡ZĒŽ‚A$čń.*Ć^·½cĒÜ qėaĚ×X.9w£>;Ø.£pĒŽņģ!ŗŗ;®YH¤ €öژPQ¶ąLB€ąźÄ\Ē“*CŖ<åĮX cŪ®Ąpm§vüĒr·+ ćĆ5$;ŹŻ–küŹI1¤xśē‚¼:gŠ GŪi « Ņ+PĮīŅ%Į“Wj Ö©į@i4ä¹!žÖT,ż8ž—slRMGji{:Ø@Źō(#1ĀqDjņœˆø€%…‰9ŽB)]yž„ P!0J”ULk54qŚN1ų.`b8W~r63Ÿ/łO%°łĢ„ļ3 ’9ūžmu7OņŸś"5®DІĪp7£§FŁR»‰źĀŌB99ČĪ9ę ’™!źs$’õõ„,Z䇟oK#’ąŠ‚[7\æŠŅR?O=u’®®Q<–kĖ¢ŗ:.ß“‰ž¾õĆŅ?<Ģś•+¹iĒܵ «Š@ĒŪŪhj˜–‡yfĻz(*,äĪÆ|…įaźkjøõŗėøś’ó·4Ź÷ójĀ‘ ęą9'ņŸŁvŽ;fėŃH…ć/NŪ¦'£8]授+’0Rŗłž“”h$ސĀ1R8Jn:ŸZYR£Œ¶„0R¦ m„ćY_5åæć-ėv0]¼čL!,«h™XµĢ)üĀķC”ö»~zOMUW°ĀŠh5‰Ņy_N)aü“Ž®”0ŲSö遃½ŻĆō(%L4EjŒĻ摵 *ŹŖjŖ|¦ØĘWXXå“%é©F5‘~·N|źn8ü‰Ļ\wxߞö²=/¶Ō9pj᫯“.Ūł«ż—|ćÆ!Ź+Ć7½ū’’ĒēßµO3]” ēÄeŗŽA*,H–ęė źJCC™ķnXwŗū‰Ö†{8°čcJččõ«»žż«7ļßUī‹EwµŌWåįuwķ+½žo[ūŅo8²7SłĻ²T2‡ß²Ō“'ńaćn±<¾¤dźnĶįłĻŚ2EĪ ÕE•z×®Ÿæ¶uėŪß³wļžok­Æ­uf ’Iæß’õüą{[só\0‰JY°gķĻ+.DÄ Ąä};łŽŽĮ»•œWTō üüIWõ_†~`P0ī0URÓ3‡ņ©B€‡_F.—üž9ņYÅÕ[X÷Ä+4‡éģég¤¢‘XQÉ“—z>B€™ūóŻl­ø7?Ė6ŸĆXÆŒ“§+e„ēļϹņ<=_ŁäÉPŸ±6ŅUŗµ¤1ų@jīźėŽcåĄ€Ēļ<]Ó<~RćVH»‰ŲHE8äYŲ¤”žZ˜|i©:©°ĘvĆ…–Āh\!@ŒŠƒ–Š*ę* ĖŽ”S4gč,¬…ƒĒņXgx…f%’³ā,y÷sŠõ™;Óó¦ŲŒĮ•.ֆ =ÉS§Ÿ£©dUÆĆkłr“’Ģ1ē<ņ°n½k÷é«;8ŻAü?Ü  †Yŗ“Š ›źéģåŁ§Oł“ć$¾na)_ÜĄŌTŒGI/%SZV5mĻNž“6“·³rÕ/)ē¹gŪÓę‚ÕkܟN{ūććœxß;޲ģŁŻIo÷8å\ŗm–„ŲvE÷żģ€{.!Ų~õ‚“'†yųĮ£˜xČ’‘Ćż¼ė=k)+ó³aS-ÆģīUÆwę%Ap4Œm;X–¢ŖŖš‚2hm2:<1{ćLœ#@ C@Kø†U…=4½)˜Uåå|ž“ŸäwßĶw~ņ¾ó“Ÿ$÷­Zŗ”Ļ}üć!˜ ‡ŁwäĖā­Ū¶eõŽDx~Æ[}ėz·R—Öš{åŹÖŒŽ±ć’K˜‡łõ‹/ņO’ńĒĒyĒ[ߚÕ×¹@>€eITا$GōŹLŽłó(ś— Ū_‚éÓ>1¬ć%C ˆøśæ4"NōA:įH…£„ŃBHG įĖ8B mŒŃJ m,“Ź(‰ŃŒGˆPĮ½ĆxÖ¾”Īzd°’Vi xه"ž?¹öŌČī żņłŠR9QĒ”²M.a:)…‰źō%¢RéV¾É©ÓŃöBKż¶=d¢ płŗ÷.[XwŃnG€ÉČó¹+„ĢÖmˇ¶^¶b­ rūƒžÆżł½Wt“öÕ\~õšN©ćʑjdŠńæ9ŽhXW×? Ąģ<ŗčŠ;/?°æŌr­ŅĖń{7¼-‰®Š„”^Æ÷­9› IDAT©7ŽżÜsĻõę•W^É)²ž ÉT뀱üMß\ˆ€ÄÕr€©—Ņv¬ƒŸ¬YĀGf:čæöĘŁœ nŽ?Šēń0lł˜((%Ö°–yil“F¤ĪSÄłyŗ4ÖPŌTĆśŽ 'Fŗč­`²¤Ē;—»Ę<`y0 On®PJ›Č~>fŠ7ʉŁt2…óįLtŹ—ōtŒÆė7F,ˆŽłß.lĀBŪ&õ”£Õk"!ß»8UKGīži,®ÕhåÕµ#-ЧR÷I Q W€ö`T4=!4Ž‘$Ęķ1Śq0˲µ­ŃF”•D{{Gz¢¶ĮRI;Æ·¦aY;ÕX›ķ)ŸIŸłŸsTĮ<½’³‘’ĒAAėÉ!Ö_TĒö+›i9ÖĻH<„>}±6{Ī[«kØ«+ĮėSÄ¢Nr§²$+Vŗ¹Ļ^ėE \]@ Į½÷¼F×é±é˷7ŃŠP‚ņH“­©Ŗ,¤¢Ā]?’lG’ütžräp?k×Õ°nż“ æo‚Śŗb.ß¾˜~1Éädnbo †©© PY]DGĒY(ssšÓß;Š›·ō=ń 3DČńńŹxGBuoFĢ€ «Vń_ž2=÷-mm(„Ų¼v-×\v*-ÖŅсķ8¬hj¢“ø8«Ļ?O8aͲe4Ōŗ– ļ’āśzžā÷Ÿ¢BWēŅ‹.ā«ßś?}ųanøź*¼OVgł®ŗ’™ĖpČ’|žGs!’vŽš§eP›xŁ?„0F „«×oĀUžhcāĘ!”Ń*ąQĘB!“B!0Žyi¤ų>#¬Ź 3čõĆēńלŖ®üŅčų²ĒĒ~ņEÖÉĮ ĻhDj;»ä}>DŻ{Øk &×µ¬bŃ ęł‰¹ŌÄ *¹æ9ÕÕ„‘OżžŪ_žČ{¾~§×kåņŸFÜ^mI•ŒR˜|įėėF‚>³Æ»źŖėæżĪ?Ū°pxwiQd¬µæ¤ńpołåizķ”GŌ_’ŪŪŽķÆ+‹„s(öEc^„Süł6 O¢€ūOz¶Ń%†Ē£f$žg„øŻųņĖ×DOŸ~ń^FŠ6lŒ©ØØp)zz uuÉOhĖ–-³Żø?$"~pözöp!иۚl‘ČƒÆ®PSS̃æ<ÄČš ūDĀ`ۚ‹/n na mmĆģŪߝōŌ=ót+ĖWTć÷[|ąƒ[ųńö2:NÜ¬ä_­'G\˜4..ēdĖ`rK—Vā÷[LNĘh=9”Ą±£żéäh96ČåŪ›RPš¢ŗĘ5†L…cŒ Oē9&pōšk×ÕPZę§“ĢOptŠ—_<Ķ-ļ\MMm€}t#ÆģéāŠ¾xŹD:C® Ŗ0kßł†c; ōfĻs®P&FŽZTēo¦ĢŽ’@€÷^}Žż#A7ҧ¾¦&k_p|œ{y€[ÆsukS½’æuė­Iņ°~åJ……LLNŅ78Č¢ŗsæŌ49‹Éƒ%jŸ®v>ÆÕMf"’¹¦¾šĆyc…eYŪ¢'†¤kĄ-įė¤pF Š)„4Z(é”)#4F 7’_mœ¢k)ż­?Ņ{>k9ʲāŗėĒÕĒw’ā-)Ūŗ2`‡`*ķĀ)%Œ£ćė±”²Ž¹„‰åZ‘,V>_`Õ|t’½/6=ÜYuŁå«N_±cMŸ×ėqR ­'zJü~oø²²8¹•Rm Ņ’ĘLWMœYīžšĪŸžŽĻ®šŲszĮUOžXų®Äž€Ļī’š%G°vĮH’żbŪ]·üėuyŻŹ®_\³“’x÷DQŃ÷^Xr;Ąu«{wĻvZ„Ԝ¢f‚/D²ūH/&œ'–¶ø8`²?€¾œmgFpSøß4Ģ ŒÓ’ÄžńWń7¼¾[įoīŪE¤wˆ1`A7Šåń0ąń0Ø$RV‹^˜#üĒ B€mG‘›%o™é¼K7ĮųPŗ ¤®ł xü0pŹ-KŲ¼ š.‚ēī…žSÓm—m†Moƒ©[–Ńć…ŗ„PT6mØ_én‹exŹĆć¹ ĖQeĒØ›œ¤r"HWx‚É¢btˆl€ŁŖD¦«? ҟ¹=aČ·.0€ H%ŒvŒØXŁõÓ¾W–Ž¢µ¬ŠŒł?vü±U›<žč«iÅĀj£Sėˆ§”Ē9ŠpéĄæ&ūŠĀ`ķšd\0õ¦’’uÕzgžCŽ4)LĢA #lŒķ ¢-p…QJj'¦58v*Õąm؋²O?ņ?'Ģ‘Ļ›üĻć¼óŲo0łĻÓ”I§IÜUž6é5wOö1tā׬]°šęŹ%ˆĮ?Gä_/¾äz/¹¤‰ Dćłß‰‰€ÅM;ŚĻ«Æ&Ä]Øø=jjŹęę[–‹9<üąį“‘ŒŽ†łŁO^åö;6SZęēwlęū’¾;ī-Ÿ»Ś(”æ‚5Å,^\Ęɖ”ä¼VÆq½’‡öŗzœøæÆo"k1?::å cHAI‰Kę āsĶEŽśz'0ńėUSSLptŠö¶}¤…kÆ_ŠæĄĆW6±õŅEģy¹“W÷v'Ó†ā:Uo¤ 1ŒŽ†ī&?Ÿ3…Āž_8ŻYD¦!`IįjžÅ}žŸDĀė?0œī‰0Ęšö3Bį0›×®ećj·ŚqĀūæzéRÖg”ŒŁ6ሻ()Ģ”%p. uīo1™²(™É 3¤g#’9˜ž|Čæ¶¼8žtC 32z$¬…:Τ“ˆē’ƒŠBā$ņ’…Ą%üBhWšĻh%ć©}#=hSyĖRQõĻ a½!7œāĀ²Õ’ŪžęXõWuуĒU“O”č‰éŖą±h2ä?J܇ŌéR÷ʚ¶ņ]“ł¦„ «€ Ę+¤0Ł«{7œæėŌ`ÉSX’Ą½/oóx­X撼®µėOo½råé«v¬ė¹ž–-]Wæõ¢.*öÅę¤9ŸŖ˜GĄ#„1Ųę_oßłK<¾ūņró’®‘Ā’ĘŠÉ”[/jkóYŽć Ķ—®ß÷7·sŻgīŪ·ų3÷ķKV™fYõÄ®]ÖrRa™“gšŒĪW*ßć±L46ū3 ‚[ą,é)ų.š `!óŽ >?øP hÜnģ?ꉋø|õny£u.q¤ ēž§†‘ōJč‚nĖbø°PCŃEėŠsńž'ŠzģÅņ”‘(7 ¶ŽŹæžOr£E)ƁwĄ%·Ą#ßq=żBĄšķ06;’cŗ¼¢ąĖømOMĄƒ’2·ó7ÕQąóPP¢04ĘX‰Ē[‘=’\B€…^L.€L!ĄTäŠȇ™t^7^‡€q-ģiwōD€£1*n˜(¬+ožāp[åß#JtTnŒDż3ūS>ūåęͽ”¼īsOjŪhi坷KܝxxSĄŪ‘©åmKĖvŪy•жvH7e°„0q „аZu tÄV§—[õ5Ō2žr63Ÿ/łĻ$±3;sßg@žsö=»kgÖ¾g#’łŽM9µøŲø¤ bb¼Ś÷-C'ŁXwu„µ™‡ž5ņļ°gw'ÆģīÄņ(tŅŚäž›œ˜ˆšą‡ŅČ? +^¾¼ŠĀB?vœ`0½ö«ŗŗĘųé_å}·o¢“ĢĻ»n]Ēžs"Ճ<łO ­uŲ54U'ü~‹ęęJ0†ƒū{“Ķä;1ĘŌ+fpĖ&yć:fPy‚llŪ!œ¢¬¼€²Ši¢qüŲ§ƒl¹¤žµėjšz—o_LӒr~qßį¤``¢dbEERЬ’‚ēįP„¾Q"‘\”ē…Ē{¾š¦!`žX»|9Uååliį]»øń꫉Åb|÷Ž{yaß>Š‹Šųōķ·鎒÷½żķY}µž>ć8T”•QY–ķŃ>Čū» “…ˆYOn:4'ņŸŁvĪ;ęŽXa¶š¾Ż2”ųāfē’#4H-®øŸƒĄ‘BŲŅ2¶PB!“”Ź1­‹®©·Ž@ņŸ@QaQC]Ż»æ|ś”ē«RŠ«ģÄøG„5ÄIJŪĢü’h4’ó^\įÆ_äŒŌ׀HIį׌]Ģżīß|šw?{Ӂ#Æu?ūėC ÷ļmoųõćÆmüå}/]éõZŃʦźĪ;>öÖn~×ÖSdA#…4zŌĮė+Pęøy„­?“õČIƒ4Ņx“>õž-ķ7_Ōóło?µbŻkŻeKm”ŗØnųčŽvä„”qcž„ɕr„†XFĶ8Š.Īš˜ ė.0ą‘Ēvś>ūåæÜÖÓÓ»uj*Ś µ.0ĘH)eÆeɏĒwtĮ‚ÆżŻßżŻ‰›on¶aĶzg(žwAāB6¤EĆ’ßæóO_’#ÖV•„•Vųoƒ± Ģ7̸֌½Ąi!8-½ō{½ĖĖ™Z±'ÕūpŪ,żöv VFi’y=Ł*딢޽4MžFśÜmkƄ†•Šqȍš@Ūžiņ®§pź 4™P jØėč§r že×9 ’³7ßg—üĻvŽ|‡ŗĻq‘<™Į5Äõš™pB<מ< ŠjŲT%Å¹ĻżzČü]ā}‚ØŠ”ĻČļ÷€1ˆEmūƒLŒēPozPĘf™½ēoęÆĒĆē>ń žęŪßęū’õ_üųĮqGkŠ łā§?MEœĢ'¼’k–-Ėņžƒ«pł¦Mēmü1;?s‘dŲ‹ćĶ6Ģ™üg9sw’žf¦ĒT.ä4éŸĪ’—ń²~&īżB#qh‰p@:2#’_Jķ!Œ(^Z¢ź?žĒo4łO ø°Ø¾ŗömx²7üµBkŖ­:Šö)'q{NGJžæć¤§˜hDłk=ÅÓ_Äų­:_ھ’¤j¹¬Ū°8ø~ćā­9$z÷s-_żĀn±,å,Ø) K-ēä!œĖ%W›Ž`ļ’kĒ;¾öŽ—ŃX6> „4…¾˜óŁ·Üē‘b/JĒ1FJ‘VlÕœ–› Äó’g±łz½–Ä?­Ą~vķ7 ČeĖ.żžžĮĻh­d:IFFFøå–[ʕĻ„v–••=400Š2—¹\ˆ˜k™Č7 7Š8Œ‡"ō|ū^žfrźĀSS|½ˆŁšæĀäš#ø '§%tA—ō0jl$vķµóóž“EEĢ+× v‰ū’©#Łū:ĒŪÄM1vĵR–VĻ÷,³£®ŠrĒ”l*JŃŌ$V̓ãoŸøåäļĒr0*^%`.–Å|m”ƒ‘ÖĢć•jnóQ #gsrÜ<Ė‹²ĘįīÅWłė•×{żÖīw7lķ}ĻŗŽ_·rĒÉ?mÜŌ÷Tr\q|ā8©…‘³Ó<Ų3–uÜ%W¬üģ—n}xt$T¼õ²åYg‘’z4Vīu[ć—)ā$ž8É’Õ‘%Æœ®¼ī¶ļ½õĻžo«©L¬ę¤’}ę7¬:‰•į :~‰_ˆeeGXä’\v€/<ū²oÕŖķßķķķ’źĢä? Ŏ1o·mūļ!ž>ĀYU$.˜ģ_blH¤X©Q9ҤÄ茄‡£@Ņ…ƒqpBķ..:R8¶B[J:NLkÕ=Üī,®NS ö-Ŗ#tŲµZĶ…¤§m>‹‹-ĖņšŁü+›Öq¼ć÷ķœAf6ņ?ēóęŚ?ƒ9a6ņŸ¹RL§Õ%4 ˜8·ŒŚŃj”u • V°fį ¤Rēœü:Ō—Ć#&’}«xźĀsϵ%Cܧϕė³LŒE ®)„|īóŠŚŠŃ1Š•Õ,j,§£}”ś†R"›ćĒŅ ŽN|™œTź™’€øĒ?˜ØN å d—Kō9[ųž×śŲvÅb<Ii‰Ÿ‘øčaWē+VV±|yGõŠ°Ø”ž¾ ¢Ń³ćM7Ę 1<8ŽcŸ}}4£d„,$ę›oęéłĮ¤ö±w|1GCu¬(ģ}3" ……Ü~ÓMÜ~ÓM9÷Ļężæū¾ūˆD£lß²…… ęŹ^?lg€ˆČV¾i’ĶŽ“Ūéœ-(ňōåX¬eH[!1ńdkƒD a“ˆē’‹DžæŽĘB8a'ņ’Q’’ß½Jłj×Ļ}4ē‹ė]ūź” ‡N ļ*÷Œ÷ZŽI÷BĘb3ę’Ū)$¼²rŃŚÜ½§&å'{ą™_n|ā‘}›æõõYPS:“bÕĀÓ/[~zūU«»/©™h9ŚU1:2Q&D. éŽ“½J‘ĢĒ—ŅŹĪŸį–»Æ«j±ĘÖł™{¶éĖ׿ņ÷ļŽt:éxQ9Āü•‘ĘN’HÜv)ēy½wa/>ęא0#ģCšŁÉÉÉāo‚ß#åååÖTV-«ŖpG÷÷wWō÷6OE£Ķ±Xl¹mŪ—cāīQpeüļŸ~Ó8oųM1h\>3 <³…üć‡oā-õ1‡ńļyn’4łZ… MJŗ•ŸaįęfģkÆEßvꞳ9000oWMAĄėĖ£UĆŌ¤€÷>ī¦ ¬æŚŻ¾Wžcx3·cO{„2įńąÕšB­ń96ŅŽēōēĢ„ąIļ+)8“Ą|p¶uRÓysMH…•ći’Z0±¼°ķ–•n*Š#s²c ­“ņ‚6ąW H óŸIģ/u_" Qķ@Ha°‘fDpKŽø×J Ę`aDL‰Š–K舥()“ˆėx:NGķ„,+i)÷ŌT!¼Ždh^ĪłŸ™H»o>öŽ’Įʦu¼Ö²‡’ŚõĆyö;7ņ?ė—d¾¢©mó Ņ_@ʍÓ+"06ŲĀįHßNōŸdSĆ/X”TŚ?ä?iN%’RJśūĘyžłö“) )xļmŲ÷j'Z“ƒņZІF·üÕĄ@茌m­Ć¬XYMeU! ‹ŹŽīǶuŚ<“ķ~‚JåžGˆž$Óx<’ŗŗāœ¼*B>”ĄRĆNS—sķ#¬XYESs9ļæc–%©¬*äé'ŪŲ··{Ę>g…1G';'ÄßĆČų8#ććc°¼”½±&µ7žPū¦!`HõžÆX²$k’£Ļ<ĆKū÷Są÷ó”w¾ó¼ĖŽĶ\yB"āÉŚę¾˜żęŸ·E¦&ä V˜ķœ·öĒæ”né;¤AmīŸ– G£…ŽĀŹh”„ĘĒ*^Uä©ÜvĮj}YR©¦†õļ?ŃŽÕVā_Z;5aw©–‘’O4ł’UeŽ+° f’£‹ h’‹®»žöö—~’³·ģ}rēkµ{w·Ö=ŌY’ģSG6žÓ×ī^ƍFmļʋ—|żóKŸƒ%§É¼”n%“CÅMgģļo}éxļ¶?żņ#’Y×Xą›ŸyKĖ\_øŹč™}ĪłŒĻŹa¬HE|‰ēõzM$„Ÿ™¦žšÅĻżUĆŠĄČ§”’Ū·oūČ|ļ@qq”f4 GŒ1åååŚčÓ{Ø©qĖ‚illlčķķ½Ń¶ķŪ1—ć^¢ÕĄƒĄ×/2£ åĀĄo yNDLį–Tš<ņ÷y< ƒ×,'®8ŸŹžgÓšx!—`¦@*Ńł‚įŃøē?šB“S­Ą¾<:ŹI÷xēŠ uóńĢG 9‰±@ÄCōÓĒąʎ‘œœm#-ĖhmDĀk/]~R~Ęńå1¤Ž)Õ°¤0 1r!“Į`p–ŅʑŹŹŃ–…ćŲĀC¦¦li²O!š××2Ֆ”ózĢ6sććɽWm¹ŽÆx7#½|ć‡w”óŻĒysīši0g*ś—µ/GĆĦ”2®%Ąż3÷‚:®>@Ō‰ņRĒž>ÄÖ%S[YÖļė!’™ƒš‰ü|ļ»/ćń(Wy?y.ĮŠ•Õ,[^ŲåU „8~l€Č”Ķšµ5x\żŃžōŽēhÄhoc(// ¾¾€Æõf1’ߓYļӝ‡s"Ąq ]§ƒ45—³v} ^ėM;J*‘,Ųß?ś^Pč!u’)āŖ.iš Ē›~;2Ą¦Ķ ©Ŗ.¢&žŠÓ3No÷8g Œ„Kź8œm„#FFˆ¦~3ć8hĒAŖ ;ŠóMCĄüšž<øk„7\uZkŲµ‹Ÿ>ü0B>żPU~ž¢Ķ§¢3'@F¦Ÿ~ēŠügļ› ;3’ß@ģŲ€62įłw«ÜüÆ Ž1Bƒt„ŽPĀQ--į(KhÓGnĀs~J1œ!ŖĖKźOõ­{KēąH_eŁ@øŗ œ ‡I(%LŌI_ۘhDÆŚ°cµĀ“hŸšÄēTbZb¶¼*}ļŪŪß{Ē•mB ‡†&<ür÷¢’ų·__}ÅÕk^żóæžą³r®‰ż³^óŌƒéč š* §:Ænīųæ|ź/~÷§Ū’蟟^ó¹öį’»æž®=»2Ū+%ĶLī}„”±”Lęūφ„`ā’\Huõä*ŻżŠ/vŽ„;AsŻ[®žŠĻ~ž£Ć€3§µp"” IDAT*§N:|ų?@`m(ś"š~ÜOõóń~?;§É¼ųM2Ą“ ą`=±›]Įö·ń{‚ł{øßHÄl7ģ?ĆóB)NA»Rōł|Œ•51Õp)Nõšüߏ¹چy'O:1WŲ/¤t©˜…]?„ĶoƒÅėÜ‚O|?½ģ_t <•~ÜpOžóDc Źifš‚{lL,čß\L ŪOĄŽ!įŲ­S“Øž1T”FŲ1¤-¦KįI…±,taó¢•BdęˆH £g©60—r€Jap@gņƒ|ĘŁ¼‰Å“ōxdZ@Ü«Ÿ5V) ŽI“§»Ā!#Ō ņo–%tÄ6i oR ƒBx&!˜™ ¤{ ĘM/Ęe„e£]©ŒcYFŪ£cĘh#¤¶ś‚m±€ońĀtĄ¬Dznnö™‰“ū¢iįRī|ļēˆŁQ¾žż/1 γļŁVwē–ü§3/ …`ڐc.B"āŗ@!g’§Zž¦ņT%7o¦““Ä «O9*'łO;}śē“Jū3Ēž­?(ā„üRŽ7:~l€]O“płö&Ŗ«‹Ø®žŽ9²ĶĆ!›¾ fõu®é1NLDQ½ Ą²•ōõN0Ų?A‚ł'µ2½³DßÉ*)łž‡õŃŌ\Ī‚š«Ö,ąčįi#Ŗ‹ėńł,b1MGūhrūę- ٰi!#ƓH%)+ó»}Ć3Oµ' ą¦Ü÷³ƒ4/«@ŻŻćŒŽœY~¾Ö†ąč£Ć!ģŲ¹ńÄ;ŽĆąŲć”ģhKO`Œ!‹įæĄ ¼i˜©Ž’ßy’ū¹÷WæJŠj­±K)>ł¾÷qÅęĶēulS‘<+øQ*"źF̉ü'šĢsĒ™.–m„»&ģĪ ŃcÄą(ŃīŻ-¤p ʑ`K))±•Ā6Ņh!„c„p„1Zų—<ÅĖ/=ĆaW4Ö4^yšxŻKµ#‹+Š‚QtŠDS¢ •Ę5DH|Ś%E .šÓ RHś+/ØPRčM—®/;gØØ*Ž~š·®9QR˜śžwß^XčM³œŠ o~ā!ɱfˁ_Z²č/Ūö©ŚāpĒāŠńŽu GŪÖÕöOy¬Æ~É6. ŽóŪOüƏüššß{š`ĆĒG¾’ļ賟'śHˆ&¦”×Ģż€ –²LBŚĖ†4 +O¼œ 'GYĮ1žųü¾¬“ˆįёĖü~ļK’üĒG&ębw:,K¾›ųÜēŠ»īŗų1š@1š'Ą£Ąćsčš ĆoŠŅSBøß]µū0Ļļ&ņ™÷ń©ŗ*jgģįĮąę›?&tģĆĄ.łoQŠ!hUŠnƗŃņrĀM`WÆĮ¬½ķõ‰Üi‡y«EĀP6CJœ· ]ń?; /?äÖn‡Moƒ—œŽļÄ ußÜĒ1™^وÄį,éĀΦąŲˆÉ)¤×ĘsSėWTsi”—•E^–X’JKR$$Jkģ˜M(a 8Egß(Ē_:ĮīĒr²°ŪW‚]R†­¤+˜Ė 0/œ…r€©Ę…_HŒ”`kDźĮYiyĪkvÜŪ?Ņå]0ŚU°%:īŁ¼dÓŲ·¼%vȤ»K¦¤"@\€ø5]XÅHŠĀŅFŒ0n €RR+”µ9ŁŪ[×č §“}õµˆųŸ ³’’̶³l ółßśk|^?’üÓÆq²ó؜:œ…®gv–¢fŽ5 łOy‘|ĘĒ  MDœ„‹øH `†bC>ÅįC}É|ūō¾ó²Ī%hk¦zA€@ĄĒK/œ"“üCŠ@ŠŖæHéÜND¤„š¶ž¢»kŒ…õ%¼ķśå46–22¦¶®˜%K\Oēī—N'…ü,%Ø^·„Cļ/¾xŠöÖ2‰ŲÉü’3mkĘF&Ē9G„1'&CēYt ć Ģ‘hæ’̃ +‹Ö7NŃ?jq¤Ū‹9Ā}IC@ø–=,)|ÓGĀūæzéR®Ū¾+¶lį;Łsš ŃXŒåMM¼ć-oaq}żģeLMĶf“Dh RĻž<šŃš›ūĶL³!VT™µĶ>ŌēąŚ|5īŸ1-¤Ń”e¹²(ąŸ\ŗ¼¶kŻĘÅ§Æøfmēę­Ė†Ā”ˆgxx"«Ź—,•?Ā HK˜DpbpŹļ+ōŲćƁµķĆÅėŸ:1-%v|°tķ§~¼Ż^W7ŌvݚĪÖ?½ėļn’Ž•īdõūnłĪ5•÷|ā©ļśdīÅVĀ`Y$’SZ–2öŁz$$Ż’éæ9'f/šz}ĒÓ(6`(//OŽ ØÉ×’W¾bøė.€ūwį’~‰kxÓp‘Ø ÅÕĒOa>’MF>łnīøj3[9£[ŚłĮŽ£8’|Įń£¤„ż-Ž Ķē’’‘ŅR&›š°wģ@ĻźŽŸ‚!N×̳¼mdŅMšr—ņóĮųpžć?嵊ø^}<= `>č!†Ä¶ĄQ«›s„`ۈšź#Kٲŗš÷Tq’”棒ą±(.ōS[YŹśęnܶ>ńžę©öņČs9^ZĪTY1Qo Žņē7¤•Œ‚w:g’<65 Ą¶ANß"< ĖÓÆBhŒ#PĀž²|½ķ5”!ϦXŲŚäDŲDŸż…Ļ4n{.ŸN@Öx2tŒŅŚÖB !Œ”B[ZŒŠQ -•ŠF¢„ŽŒF'ÅHØŪT%ś–…·¾†HG×Ģ‘³øŲ’Rņw|™ŚŹzį—ģŚżŠœŽĶIžgó c‚™½’sŽ*˜#łĻµ!-*Ąu 7 8)m„ 'ÜK’”ĒØ/idmĆ*%…XŽø€d>OłĻįéĻؐy­Eś?iӎÅ4-Ēh96rŗ”cĻ€ü#Ür€—\ÖH,¦9vd0‹ü#DŅĆo©DßéóČ—@<ōĄQn~Ējź³jĶ“%W;†WvŸfĻ~v>v‚ēžé ¤Ä‡Ö†‰ńȬg‚H$Fpd‚ńŃēˆ÷ ‡%6‡DT3F$r†( <ąš¹[‰ŲPč5tyų÷§Ź NžŸBK“Ž—}‹96YĒŹ7#ŠZsߣš¾øņQA·ß|3·ß|ó94¦fŹ­$%[b|³üHr>glHś½mŽĶaˆźÓ®ņæ0FH÷6o¤lpĀ‘B8Rā(-„pŒŅŽRŹķ(©=„«·œĮˆŽØÆ®æøg ż…ŽP}oYÉhD©ښ‘’ÆĢŚęķė»Õhˆ{ņÓ!…LJÆ$‚šæńƟųõ‹Ļ{ķÅg[ź½ÖQߏŸæāGw?åóx§ŹŹĮ”Į±Š5kf,G'¤[E)ó¶ ÄtN½%ÓUü?ŗõXĖo]züoF¦üÖcG׿ŅYŻųRkĶe!Óą„ÉÓćuKŸ>YĒæ<»Ž"Ÿ=P[ni®šx¾e xŪu’ų֊}ō™o,Ŗ OJ|ĘĮø©©8‹Ϭī0ĘųL8‡`ŪN֗yņ×LOČÄ.ągĄķĄU$W>&~Ó nH$šH ē[?ćīCm“æļZn¬,„8ē!ĢcjēˌĆ(ńRøäæhǦĒ[Ąhi)”eˈķ؁žŹW0_ēmzG†@qęÄ1ZVĢÓŠ=/&R× mÆ„ļ ”ÆNž¹žXølZPšLŠ9Ą’زRn_¹Ų꫹ēØßŪÄ[—Vpg”—g6jŖ.^Į{¶,ēÖݼś“głńćxµ²žńŠR"VZ*7" Ÿ@.y&Ī4 Ą=‡0įXLd¦†ų'„Ż×Ó:Ų6R*ŃŪZ¶l|Ą·5²¶ŲQ¹“}o‚vd҈"µ0vŹxµFj-¦Ÿš Ōt&Zœ;ŗÆ-mŒZ e”ˆG Ē£ķXĀ1©EĻpkŖĄæøžČ©tā“ģ/~‚1WĀsŪµeĖźmœ8u„ļŽ’Ķyö;;łŸuœņ?ėøāf%ćžćęuÜ qĖ€Ę 7®×ūōx}GzX^¹œE QPčĆWąAČTś}īÉŠŁį¬’€žī1"›-CD¢«!į›šćŸ9€Č”Ķäd”h$żųšdŒ{~z€E‹JØ«/ĮR’ąčķ#LLä ”tsż§Ā³[>h”±I‚£„'sŸūla*a($œKš3|±”Y½²3aĒź1[š—÷Uć÷>rÕ(W® ńąŽó» Ē#Ž„źXZŲĻņĀ><ā‚×¢:ėxfĻŗūūY¹d ėW®|£‡“…Šdv*J*©•¶0¾®ßlä?Ēżūu‘ĄńŠVzFµÓ;f쁐Ž—’ƒx m$ńņĀ1[ !„#Ž’Ź‘–p„4Naķ• •'Puf£zc° Ŗ|įńÓåCć5-±Ś¶1otPCīüŪ‰˜āŅėrõ“Ę“:GĀÄ H„ĢW­Ų¾c}ŸĄ¼Ŗµ1Ļ?søź•O֞ź,ŪrqsĖo’īõūĪĢܘ®H!(÷…cÜÜŅśį‹OœøįŪ7. E=„żī£_|š@żā×ŗ*· •4õŽū—œ,Ž–č¬{¬pÓ»æ{Ķ]|źé/7–Ę&󝯧fNšXjNŚ^ÆerĘ’>ćMšz<ķ±hlU8¾ś³wżuÕ]wżž@ö‘ƒnŒöüš® ØĘuō^ųM4@¶@ćņ•čÆw3õĀ~Z>|7īŲĀõĘÖf4ž|…Ų>ĀŲXˆ1`čÅõü·mø†€>`““”©TņŸŚ×WÆÄ_Ļ$˜ ĻbųŚ5ōy=ł#Y,ÄR~@Ż-pŃhZŸmhŽÓ⮌ą™Lāf“Hޟ’̘ŠBĻŅ"$=D”…¶¼Łwƒ„ąėŃˆL"Æ«§łŹz¾šqV  X^Ļę/½ĶļÜŹžæś ß>ŁĖ’ĻŽ{ĒŪU•ł’ļµöާŻ^Ó{%$B‘^Eé¢޽2ć ~…Ÿ 3–AŌqœgGȀC‘"-”€“’Bz»Inæ§ī³÷Zė÷Ē>żž[’ÜPŌĻėu’sv;뜳ļŽėó<Ÿēólj™F¢±…l(‚Ŗ,ą@Ū*‰±†Čø+…±¬ź€yčœ óÓßnźŪ^»Ų/ń2öqF‰Į)c“f£õWŌ“śĖĒM‹ÆĒ„_™ż[hW .G˵ $‘!4¬¼¾šF[KēŒ„žWŅ(gĆŽMī”SNB«Ā“'T7Æ FÉĒók˜’.>ó $śų[æ†WQ/c[Ķ ­ōtć©aČŹH$}Ų” CžGÜ÷6­\ “—žēŒĮE@ŅM^ķŖu€ė¹¬ī\Ŧ® Ģl™Ķ¤ę‰„ca¢±vČ®Jž+ß{,É’ w;ņĖžļn{•LĘ«x‹āū®xyk×ģ-ó(ÅćnäńG7V]‡1lßÖĻömĆxNDd]xŠž¾dA©pŠŽĖóč‰ĒI¤öżföŗI@ ģRžĄW‚„üäŃ&Œ~A)ar‹‡ē :zߘ)—k^KNbcŖżÆ2pČģŁœqüńœtŌQoöPĮCŖŠEéś<%j˜éė›@ž²±*Ł’•{5¹°ćæBū?©…DQBJ-JJ£„%}[_”l#µÓt䜿ÕžaĘų(Ż©żKE×GCaK4ĪķM·.H6u8µ]~^ž_Y’?aÜģZĒ®QÜ»ZĖæĮH$ŅöĻn|džŽ­]¾§äŒ™ķ]'œ¶pŪI§/Ü{ā©‹öˆ`ŽcŒŹį„“LÕö®…ś‰©¢<¼¹¬ O-s:kד×%·L؋»Ÿ9~ż:ŒYØ/m½eOmōž×¦N{ugćĢ­=53»’‘iшV„õ’łp‡eYĄ²­AU™–)Ö’W†£óķ­‡kskžU‚Į×öIS'Ž»~͆³Œ1µ7Üš“œsĪI?żōć3T¹UŽ7n_²ųłöaæ7o׿d—r€L&Kņ§wÓ{ĻR^¾ąN8i1s"į7ö³ĻÆĘæćāŪv'č^Štž­¹’wŻ'JzölT5ņ?†3l‰Ōą'2¼ŲģPÖ,WŹ@ę_ßdō“EO(½A†Ś”A’Ź„A[æ‡ĮÜ£”s{š€ Åū!ĒĮÖՐģ&Ā“ęŒÔs[ą'PxO+( ØDļīĮĖÖmÅWš¤%;¤B!TLä~ū1ņH`]u™ŅČWå`ĆŠ1ƒpŲLŽŗł ü÷īęę;_āńń“énGŖ”O–ö‘£v€„uūyä}”öŒe9eė|ßĒε÷Ėqeį§BįŽ-­‡§śBĒxéŠQJ‰T¦ß‰śĖ¢õŁ—ĒĻH-—Ķ: 9ówßČ|._JŒÆ¶§ Žńó(„°, G ƒ-”Fq“ŠJ ­FŒm •õƒv€V& 7ŁAsmAū"‡š¤ øŪĖU#f’G"’3«öę \łįk@ĄżśZŗūŠAąšh-9糜zŌY„œ0™lšGž|/æyą§d½LłG”ƶĮäøcWŁįö‘üē (?s „ĄäĀ€™k%Ą(H{Vļ]Ŗī-Ģj›Ćø†vlĒ"Z&u@ŠĀ{”¾żX“’RūĮ%’łwģźJV¼w¹É”ėśd³oņ¦•&OÓߛ$“9øŁ~80āŸGŲļ¢+nÜ£ō’(ÅŹķaŽ››bŽD—u»Āų*8ĘųFŸOÖĖø†`†»yÆĆ-O4їzcņł@Ą†Ō8fĒö0'ŗG¾}Ī„żE{s3’ųĮ¾ŁĆØ 7ėāÕóšKɛž ŽLžĒ¼*IśģŹŻ*ØÕ!5‘i”A(ƒPR %-|a”¤¾4BŪ(a m,K[5Óg¤Q‰«Ž7?ÆėēÖG÷³u©€–¦ę™ÉTSSĀmׅœlÄöŹžĄņõ’󧝲Yø VG!“ĢQJ‰æ’ą ēķŲÖŻ>yjĖcąÕ—·ĢžŻÆŸ9yņ“֎}śōe\|ģ– ”!ŹL’4ąŲĀ`4Qż”(=½†1 °-a0†žLŌ¹õĆOüع¾ĀƒGppP_CĶW>Ģ’›?‰C¾v·ŽwŁ„5M­de…`_Śęƒ#śT”@ŃPJŒŃČī ­3S{źŽį¦CĒč¬<ĢT‚&-¶OŒ×†&4Q+löN\Ü÷tHćK+ äŽėūJHi zß²ĻPŃ*P a“UꨄĀ(‘m i¤­µQBKi”“QĀ–ŹŚŁ»I•"3§”ƚü‡œ0_žÄæR«ćW÷ßÄ«ÆæXŲt\óD¾ž÷ßgBėdā©ž]ł“Ū§sŽI—0sŅ\®żÉ•Ø|¼|ŒČ’HŸių]Ljüē‘?ē QX ¤š‚* 0R€I•äÕŻ+ØėŖenū|š½f½ą„lĀ5!"±P±Dą "’‡>D"K_šž ~>B7 ņ?(Ī#OŌŖÉžßjŠŚN¹ ō%I&2Ćö8+d=ž™L‰ćä~"ÓA<µ—t&E4ŗļ‘åÕŪ#¼¾;Ä{ŽŠó½{Ćѐę²wuÓ·łę#ķ—žŃĆ%Ē š“Gßø–sYcóZrėS景ĖüXĒ_E ୈdrx?ę²ģ­āo_ q©Ķ­«ö¢ņz¶?šĆuØ łæīLµ7‘—’DN ŠČÜżX?מO !żŹö¶“nRz°šƒ{¶ŃŁ`AŹŚh¬©»/ÖŅ—n‹ŽkŒ%,kĄd³.Ŗ¢žæ¶¦eQžµ&˜×‘W RÜź p’^œ¼s{wūu7}ź÷ǜ8æSa¾óµßµņÕ­“kk#é»ęŽ÷õõ&īūÄgĪĘYø",)-#„0£DJKšŸ-›{čĻž÷éĖNZ}Će'½¶Ŗlƒ\[Ė¢¬öĮBšŅ9^ž¹Ubh 6ó/GNąŲö˜ŻY¦OŸźņ“÷‰Ÿžō×÷i­Ēe³Žq·ß~ļ²ūī›üĖcŽ9ę¦G}tĆą½¶0{öģᆰˆ@žpĻ0Ū½%šv@± Æȗ¤²īŻŻ}tŽr/Ūo¹—ń‹ē2ļÄƙ5ĶķĶc“éķ‹cVoÄ[¶’ōĖkˆ+ (fż÷Čžw(ņÄ€ Xįå?Ć7¾¹ęš±ßĪ=Ó>’ž¹’Љ|òˆå×Å»įÅ%@ē¶bŻ~ž¼ڦBóų€ü÷ķ…=[rD?‡ĪķšąO eDė‚`Ā@ģŻ<ĻcõS°į„Įc¬öW­4,{…~½ŽCO}ŒdM;峖šš=Äōź>}?‰…8aų£Œ=¤@\tļŖ‹Ńņ¹›ų±—f«Öō4µ’µņKõpķór§j„ūƒ ŹxžĄvŲōųü/+×9Įč*²~Š–£7„¢ź…hKś„–ż«G©“ÄÖ-'õļŽ^ī }|˟ۘyl×m6ƒŪ²TüÜwa“Ah)ŒTJ3ļZ…DB–Š®o !|#--¤Ń¶@ūĀh‘oø”ću½pŅńF£įÉ„Ncčųšļ’"3&ĶįĻ+ŸäOü¦°¼”¶‰o|özŚ›'šĀźgøń÷ße ч‚xßUœyģ¼ėŲ yą™;GĒ>\!FGŅ«­ŚGņ?Ņ8ŹRó Vˆ`Aqq>(`‚NŅyĆ@q?ĮK;^¤ĘŖaVŪŚŪČf}}iB›H, %äž ’cńī³ĖkŒ‰,żżś2ō÷§éļwH³»#Žēéā;¾ĶÉ ev‰¤H ¤ßҐÉféK$(柇RżéN’~?¢¾ƒžT’~]YĖgĻ씵VŃ·øšØj†’¼Æ±ń_¾9ŹńóŠćž?Ée[—CŹ}cĢ}c±.5évfE÷2/¶›<8­’†źˆÆ öż’[µ?©aæÕ_ŒłČÖ¶ ^¶¼£LžhŌż+ĢŁĪ-„š„DI‰o,ć )}#PR%ˆIŪ®ŁG›źĮ@mŌ&U…ī(y„lIÖ/gŗėv ļÅ0ŌÄB5žiI$#1/kKģRł€Émsź-;:’_t,3ļų—ƒ%…Ł“¾£iμ Ū9nnafžŹĖ[¦yīā•łYÆ}åŹ[OųõĻ—žņ‰Ļœ±-‘¶UTŽBę_ [вKøĶążWģl™„“ ŻšŌĀϧ<ēG_<}år(åūA (ł—fČ0£aĖ“›FhØBXźĆŽĪ·5ČP.ļ½é¦ļļ°¬ČY7ß|ĖϲYo‰1&’H$.}ģ±Ē.uē„X,r_[Ūø„?üį_:ūģ³›ćÜq\|1?åEĄ1‚_óĒā³Lü% Hžó’ē•)(ŌŻļĘ­XĻĪėY “ŒkaÜó˜4}"š‰¶5niĄnĪ՟@wt”:ŗQŪ:šVn µm7)‚ ~Š€’ödż» ČžžÜ’]‰~?7īücX\KŃ`8œZaŲ2½ņz:X:¾‰³óĖŻ4l~eäćun Ć!Ń<†Cß>Ųa¼²Õ;@Æa·]CwĆx’Ń:Ęd«ÜŹöÅĄóM6‘O/āĒoł/Å»ßĮ‘7Ą’ūģøŃ„Ńō4·ćVŖ6‹”F€]„ą,_­$&½§©ŻO‡Ź”BčN;¢^ŒŌ»/Œ›’zÉnŠŲ€Ł@j„–‚)KzžT/“Ō ģ~1Żć|(Õgß_ßj ³)…A‘7”ƒFH#Œ”wˆą…¢²ĄŹłh#Œ°#ŚŲŚHH’„ʲ¤¶-­t:›6ŻÉ“ÖM-ϲOˆ»qėeŹ«M¶N<ā N;śl::·óĆß~§@Ф\õ±oŃŽ<—×>Ē÷~ł5T^j ,»“3½€ÅóŽ £~ßjė«LüF±oy`axņ?śqå³ńC¬Ź_ń${”!¶Č«¤•óģ•ra@BŅOšźīD÷ʘŻ6—¶ĘVLŚą¦=z’8a‡HÄ! a;VqD<+ūé IDATc@žģä•»hhŒŠP„¾!BmmˆŚŚ“&՗}Ü_üü%zŗ’T%’U¾¼·"łĻf=RI—T"C*é¾a¤cHf2ōĘćdöĮÜo(h£‰§»Id{0¶AF!öПźg|Ėđ@@ŽOĖš»ēŠ\/ų½Bަ¹Ž1'C"#øņ¼nžōj-Ļ®2¹Å££/˜vՄ5Ÿ<µ—WŌ k^Śewß3%+ ĢŽķeNt7įæŽō'†x%^¢²•ä ėĘP{ņÕŪ’¹Ævå’A)ž6F!6-„TB ßH”“š Ś’))rķ’¤šEķøZFS? &6‡łüS™Š(pnyd'KWörč“Z>~ĘDŚCx¾acGŠėīŚ‚Æ _¾xĖÖōńŌŖĮmNG‹°ć8ž¶ė~(āyå4 ĮōĒŗ MŹ«uˆÄĀž„%öīéļÜŽ=īģ ŽŗąÄSlYśČŹ%#27ū“H4CאŹÜų4²ź±¹«nĪä¦Ä* śgĻĪæ¼;¹å;ē?’äPo+„ :äå°lˌ‚öT…ćŲU÷JņŸGŗāõ ’ńķŽ|ä‚ .ŗčŅķŽ½÷j­u€ļūG $ŽHpĪ9ē$-ĖZ+„\#„čś“ÖFk֗\28(½q\¼Č[)(ž y5@^ ĻĘ÷š@ в§›ę—Ń4µ@̶‰ĘĀDėbD¢)‘É:™A§]“›-4Ņš ØWžų§(fż{sļם{ōt–ˆSNüócŻÆæ€J#Ąį|¦/@7¶‘łój~śž9‹1¹\Ü÷ )étl:but74ćÖŌ¤8äc²6b_|JĖTė Ēń_±16ūŪ_¼ū,üŹųČwnē—B`,›ī†f<t” Į…m$€}-PŚ3„›X‹õīoœŚu{ū¼ųf­:kDÄvČj„Æ(8ėł/øō?Žæ7ś’ „Ó³©žØśĘžĒČ%ßóe²äÜóŪWųNłĶ”T% tP߯•ųxŗX Ś–Bė|;@ĒR(å )”ekߌֵA•¢3¦ān!¢5\¶{ˆLĖūN’?½ūæH»ÅģĀ…§˜3gkĒF¾ėæČ~φš@¬Tµ¦”ĆŒcŠĆQŹŽ;ęŖ1ōŖŅMJŌBL%1åŗ”e‚²Ųœ@Xdü$«v/'¼'ŹōÖŁŒkj'dŪd3ٌ}),Ū"uEĀ‘²ōDłÆ\)Dą“’§‡Ö¶jkĆA@ !JCC$÷<Ā@_†!Éæ(’žŽ*äߘ@ڟNŗ$²īŲwZkR)śćńQµó Fkā™^āŁnŒ„! Ā[’;pGo–8²8lZ† >/mŽrÜÜ$;{võ:œ½8NĘ|ėĪvLv9ėˆ8ļ\” >¦ųÅĮßśé „m˜7Ń„¹V1³=Ė+[£¼ø)JŹś÷·-Sš8PųĘbmr’ķLv1榃ˆ|cćæ&h­I&†/( ”é¢G"’U˜ž˜’’XŚ*×Ŗm}Fw„4cr’’œü?×ö%¾(P² ’7ʲ…ʵ4Ņi]·ašŃÓ'ŅŃćņĶŪ6²ƒėq4$¹ü¼)<²¢‡‡_ībę„W^8 Ühˆ„$Žu`_Ž%±“±bŠˆ£•-JŪ’Y¹ś’śhóaB“ŸģzGM®E^IDøä#'l<óœÅ…‰Źƒ÷¼05ZJÆ_³³aŪ–ĪŲÆoyāč©Óڵ5Ņ€m‚ŗ4¦ĀPŚ%‡aü)ŒĮŠ• ;]ÉČŌœ»ŸųĻ —Żõ‘_žqŁŻÆN’dŅwB?øä…‡KšJ)oim(ŃÕtž~Ł3‹ˆ֞)–’ŌüėŹåĄ`©)P­ā–Ā&…!J¤Ps$É¢E‡x;w¾üó[ożæß|łĖ×^ŠŻŻżAĻóN(łVj”RG*„FÓ¦ņąĖ£ŲīMĒ_RŠ=•j—bf¾ØĻ=Ju@ļš‰ $ |?6啫•ä?;v¾Ž ÷>ż¹ēńÜś4Į)š'ž„N‘#b,|¦Ģ%ūČC¬xĒ!,ßņęf½GĀźMč×6Ói‡Ųб£±ž¾Ę)x”0&Įd3åßÅh|ģĄVT¤SČ«Žą3uįr?„7Ÿ:ćž_ƞG×pæĮKśbĶxXé÷J|*ĖņŲß2@¶&ĆÅv-‘ęäŅ–9½›šҶ®8’¤ĘčÜņž^Źå7ņ³r@Hb²„’_A…@ąģoŒĪ6”"_PŠ€öYBg<¤°“XFIKŪŅ×Jķ£•0ŹX–r6ļŁ¤Ÿv²±dįzēLhGĘ"čŌ-Ƒ’”6„‚Ó’ō‰³Yµįe”V4Ö5óž3>ŠÆ<~pŪ·Éx•1h8ķØsxm9Έ$żL’† hT[“Ļä4ļ[ŖÅväHŗł¬æ(œĀüÜ’PWeX·w%›÷F˜Š0™ö¦ńŌĒb!P¾"W$ćDZGœ°E8ʶĖgŲ•äæ4œ1”įŸ1»$āYvnؘ“æõÉæÖ†LŚ%“Ź’Ngɤ2T3”>ŲČd³ $“$R)ōØ Œ1$3½ō»Ż\Hā8a Ār*IÖϲGę#»zm¾swļ><ĮńóRtXÜõBĘĄ”M{\_°|K„[Ć,™‘až$—W·E؍hN:$Ń+jxš•:lĖPÖüĖE„lĆ#+«G¶ė£Š¾°‹'×ÖšĄņŚž^ņš±ŲǦtÓ#]RŪAT|Ēæ6 $āh£‡Ż¦¬ ?óÜņ?x݁”šüß]‘“’u’†œüß`tNžÆĄØœüß%,ćKKśFXJj£,ciiG(ūßXc3j ’ņĖ ¤]E:×rśä…Md<ĶŻĖö¢”ėėż«AJ!“!Ļ““üŅPåŌÖÅM–šDI¾©ž‚!@:µāi{֜ń…ˆQ$ņc±Pę«WŽz @m]$ńo’ł‰įk‡7²šę¶eŁōŸ:|ŃkmSOķŚųžC·m˜ŚÜŸŗoõ“iŚ{ŃÄī ć2ī]Ÿ~šwĖ™—>üڤ|ņNĶÆ>žģļeEż% „öŸŪVjS=ėļ8¶![] 0lwIHųŲ…Jæē=ümCCĆo>żé·üńŽ?ÜÓߊļūGj­ē1“øĄ®ī-ßJųK äQ*©Ļūx% ‚l|„ V£¦ā’(Į9&ąKÕÅ@†¢ Yņ<•[ēR¬ń/Ķų-nå~bī‘˜é Qė^"~ßs\÷‰³8ڶFģ ÷¦@iųå闒ݶĶęŚ(;Z§3P׈ EŖ|5%ģ?_P¹I ĘĻdįųś·^„Ī’ˆļüēœ|9Ū÷n#‹#a[čJcĄ2Œ²ąhŹjŗ:»ÄD#Ā&j"¹Ą÷ŁŽqUQ›(„0ų¾Ą¶Ł¹¦įļČó>[÷—ķKQ¦%Fź\ūA] "ė„‘ŚˆR@ų[ l Y„0Āaš‘Y­„#µ1h[ ­l”,e)[*•Mk—½ż[™Š4+?!‘YÓI­\;ų‹‰ü1ŁĄ ·—/ņ_łŲy—±§{Ļ­\ŹéǜK$åOĻŻĆ–Ž ƒ3kņ|N8ā ŅnŠ„/?TX/„Åō ³°,›­»6ŒŠ*p’É’Į2ż5łÆG>E"sA€¼3{¾M &ȰäŹŒ¦PĮsW»léߥ®ž“֌£­”ĘšB”Ü_‰1xY/›Ļ?$°‹PÄ!q…lœSh[XFž+>Dåē,Žźäß\×Ēu=Ņ)—LŹ%›}ódąZké4ż‰®76Yhc ‰L/yāļ€#Ā`ē–;ƒ#:éM÷0®®J›š*Hd$wž¹~Šņ°cHe‹—Zc/mŠņҦĄƒųŒ… |%x|u@ā}%p,°¤awł“,Ŗh#č°č88žɦL;[3­Ģˆv2Æf÷ßcˆŽŽī·qĖÅŪžČäT‹÷ ƲÉÖ4—/Óo(łæe”!/’G‰R(„ń-!•Ą(Ū6ʶ…/”„*?:“Ō‡@G[¶¼½1ÄöĪ̘‡‚§0(a‘kŁXŁžoĪ”#Ļo+ÄčŖ¦lKźÆ~éWĒoŽø§ķöūætW~ł%=yó>~ņʎ½įžī„3gīųP(¤Š9Źzś ųPeEA„ońōĘɇ­ŽÓrōS›'ņ?K3Q·Ć±“ 0¹!(ō­śž]ŸłÓM¼õÉg7·æ÷½?=9v÷„OŽZŹŠ-dU¶C#Ž×¶-ƒ_e³ @3`Ŗ ŖąėWżė”ė®ūęÖŹåuŌ–õg?ūa]śNZ[ļĢ=÷Üc]}Å3÷ōō“e³Ł6cLČó¼~)ånĻó–üąo+ü„ņØ ”v ° ~hˆGžüēóK08 ąåŽ—ø%ĖüÜC—<ņĒ3L™ĪØqj…ĄĀćŃė^ ½ę V®ŽÄm‡Ļįćś|†ģ–]ģ±ClŠFŁŲÜJēŌ¹dbõ•¦9TI–Tóš³åb6Žo 1d2¼ k7ĀĆO‚ėĀ“ÉpƉВ³ŖŁ“ īü#d²pę‰pl®ė©`źX·–½“'ĄGßįQ¼c[#įo|‚óæp‘Ép^[ˆt^G•ĶBhķ÷§€TźUV:zĪZ‹Ż„s8poį˜!a2Y#"€°0ų~  ?ķ„7.o’ŒwŽ 0Łö‰e@YĘ_HaĪ_S>HąŻŠU>—Dhƒ±P !-“/YR»F–%0Śml“°ŃĘG ”Ų›»Öy%€čģé¤V­ŅA|Ÿ³čĄö=›¹ā{ēŠY‹yeż ,œµ€Ē^,¶ĆČ&ģD¹ü_Į’wpę§hŖj.“éw=~+÷=ł»3Hū2ęĮ!Œ”7Ųē Ņ>ģ08QdĖÅÓ!GüKIrEY€°ĘŹYQY‚¬ŹŠ‘ÜJWŖƒ:§‰¶† 4ŌŌPbÉrå{ ßS¤ā™Ā0,ĒĀ ŁA@ œ ä•)oņÆ|…ėzd³>™t–¬ė‘uż7®† •NO„H¦ÓcųÖŚ'žé#įö`,’²Œńaē^Ū‚°ÜJo¦{Ō€”°vg˜wž`Įd—×v”ē ź¢šē§xpE-®_üĶ[ėƒąĖž¾¢ņéˆéi.:v€?ŅĶ®‰Œäū÷nĆ6ÖPȂ"`Jø‡µ»Ø±ŽvóŪ·zś‡Æ5×ŗ\`D„ī®Co‡ģÜŚvŠEüuF'²CĖ’„PBą#„e į )}aß¶„o ”°…’Bh­ćäĘq$JT…ń_4lįzūxæÜGųžoFēžÅå9‰}¬¦ł01Lķ%б£'ņģ“kē’Ėw’ī>Jŗ$wv „^xzmė¢#§wrč”KZyU¦Xz  ’Čį:ż €_}ģįßÜæzśŅe›'Ģ\ßÕ4cG_ͬŽtx"Ąæ>|ä?żē‹ū&Ō'_ŸÓ:šśÅK¶>ńĄŖ‰/nk=ļ¬»óÓKs”•Æ’ ĖX–eŌ +~iAéž! „Y—0Å CųåOŻtć?ꦛ~эFŸkmm~ņōÓOyģ?ųʎ‘Ž{ĮKüĆ{lŻōéÓ×PĪ+M5’†·žŅy”–Žä |¾4 Oš­*|µi.4HUPķQJųK3żcv‚\KѰŅ`8Ģ=3ļhüīķōßt?7~żĆ9±…c5®±ĄĘķ˜Ū¢SŚl ‡YWŪĢÖöéō7ĆG0 ³†PC²%$¤†ž‡ø|ļ‹…8j4cyśųÜ×į¬SŅ’?·BW/\öQŲ¹>ōy8õxh؃Ļ~~õß°p.<ņ,_ ĒĮ¢łšóßA2_ųŌ较‹NgśĶ÷pōė{č©k ŃPK6ä F*M7„1V•ŅĻ÷Ąv°§&ż'7[»ŲĖ8gģY5īŽq ÷¼A¶¾’ø÷nÆŸŚæ=v¦g“Č»ųšŗöģ5mŁŽ|æ“ Ą¤ÆPŅ žČ$_ i[FQézT„Āhc„²ŸšVČ( ŅĖŲŅ×J B+mŒ–„¬m»·ł‹§ÅM,TWŲ§¶†Šų6²%Ī”ū1Ł*¼Ź-ņ•W ’łŹƒžxoŁž–åšÅ}“)ćgšŚ¦Ü÷äļBņŁ‹¾ÄéGŸƒŅŠ—Ö,coo‹fÉGϹŒ)ćfņ£;¾[xL’F •Cę͇8LéĪe“¹i”ĀäŹt®U /AT “(ų`<•„'»‡ž®njū؏“P­”6„6Ɩƒ3Ŗ†bP ,’!ĄvllŪĀv$Nžy(ųß²eé71*ņæ?½ēKĒ©|…ņ5žēćy ?ėϳĮė7›čW¢ ńO§Ń£éA5Jų*K<ÓKŹė AįĮ/%žvł—¶Ī%K% ¢l¤×ķ d%b’³ģ®Ŗ”¹Vqéé=tĘm^Żį¾—ƒKĻ;&Čś‚§Ö•ß­Śź}|=ńązqč” =¹Ÿ§ÖÄŲŽāˆéik5ÆŚæ.ūd«ŪŹv·…)įn©ķ ÖzK·¶~ĖĀĶŗ¤ÓĆw®ČśåŒÉŲĮ둯üdėŚ/{~‡"G~Jå’E÷£eIįI‰/,|!ŹĖ’ŃFŁĘha£ń:āZyii9ūÕ¦;‘ń±¤ 6jOULɌbbӘ4ūę½=_ –Vžē•e¢ēN<®Ķv¬vtqžŸ'‹†"I·eQźa€ŸßŲ ŁŽg¶;ŲŽšć’z`Įm·,=É÷”mYR½’C'>yõ?½gł¾6:!»xŁ­rł _æ’°[/^²is0Ni}÷’ļ7GŻ]­u鎝=µ³6uÕµ©«žč‡ÖN&꨾ÖZ÷õ×÷Ōxī§ÕÜyéS’ÕT›-Ü4-錼dST1Ž%plƒŽó:ĖŠe®7ß|Ūń€ŌZ·%“Éó“Éäł?’łÆøõÖŪ¶Ęb‘„-ĶO\ō<ń½ļ}„§ŚžÓ§O/łO§Žō‘ŽŅųk äQJĘóĻóźājŠ ¬²}+ŗb}éū½aĪr*€m¤{;ŁżóųÖēßĻźkhf—7 }qĢõ·Ń£`{ČįµhkĒOfĻģCI7ĒP՜’ ‚żē}ü,"ĀžTĻe£Ļõ?ƒæ;žłsĮė­»Šė~ó8f1|7WHŠ×- įÜš­ 'jȆǖ>`IÄē/āŲOžėŗ÷ŠÕ8žd[#鑬FÓ @ŹĮ4a “»R €¶E;ÜõōÜj-'÷nm¹>¹·ö¾X£ūg'ęuł¾ ėdhb:åĢó]ūpķĖ9„ĒĀÄėĘe~8óˆ®Ēµ“z0”W€-1ZķĖŹ”Ҳ e9™€·ęʤ%“P–Ģ—X!©ŒĀ.-PF)ŒPbG÷z3wB™‰KtΌb`XR:ä‹AYąJ¬X’ g/įŻĒ_Č/ﻀŗX—]ņO,™,{zvńż_]ƒ6šĻ\x§}½ŻüŪĻæĢę]ė°-‡+>t §yÉtœ[īżaž 嘫¬%łśÕŽł/Ż W/[4ł"· Ź„#Kų›į Œ2`ƒņ}śżnāń^jR ŌG› õ…‰F"ŌF£U••0†ŠņĮ°,‰Ģ=¬ÜCZ)%B:™Ėģ)±J²–¾ć’^¬Ē’†óŽŒ³iļ›Sµ§  ŗ{ŗG Äe½Š”©3Œ|ÆŹõū`?\‡ ÅŹ–é„‹·¾+'’Ē ¤ĪÉ’µFēä’~…ū’ łæ°ŃBÉŚ÷3Ż!Ė™¼?cģčɒń4Kf×±teoÉr—w-i!’d²š–ś±’ū‰§Ü,B§CĀĻŚNN¾LwČįĆļ=BĀ„‰Ķ©LĘ ßüƇē/9nĪī_Żüų¢ēŸYæą”w.ZžįOžŗņ÷æyfŽn_vĀWŸ·Ā”A2{Y)GRJcLéå8čP¾÷ŸÖLļł2vÜōŻĻ}ēüē—J)ōėu±{WΜµ|WĖģ­Żusŗ’”™€ŲŽW³äĆ·œpéC—/żaé1ü„·[;•lvu‹?c›źµ ÕP]­ōγN]Ž×榻»ē„T*}œ1¦@)5-O~,O~ģŗė®S×_żņh4¼“¹¹õń«Æ¾ś¹Ļ}īsƒ›žąķĪ’’ź„(%镗KQń’PūV>ÆözĢpĶB 8~žŽJ’ŠgxåĒwńõ¼ˆƍ2vŽBū“ ’~+}lwB¬ŽĘX9®­³g0Š>?Å`C„ł_5Tkč{ˆ/.ęa‡Ł£ļĆśĶšÕĻW_æb ¼c1ģč^·4Ā®ŻÅõ‹ęä`ŹDč”=b%Ī=‘¶)?cAw;{;čiØ%+Ū‚sė`—„cÉt݌īŲŌz½1¢>› æ7› æwŲ ŃZļÖ}·7µŗ}yb/%Ę×Įü{`„…Š #«•!L~„%C—H”Œ%l4 •/pÖģZėĪ¢˜Ś Ožˆˆ„1nI†w„:čÕgäżOßĮ±‡Ā{Nł s§.`w×N–r µMttmē[7_E¢—ć;³Ž‰tœoŻüE¶ļŽT¦*ųß’»ž£=‘³Ox?,»‹==ňŌ>_öa‡ŃÄŠ«öó}‡ÜÆ@ś”P`rD¾$@@³%Ą2 @+M\õ÷’Qź2M$Ó ! 9±H„X$B4Ś/i¾R„®ōō­ß÷I¹nšH§Ē¼WiŸd¦ŸT¶Ox[ %’žŅŒæ°ƒs¤ łä!sŠ a³‘Īō¼ ä‘ČH^Ł)¼>uAŠ“'yfmlж­õŠŻ½3Ū³\zz/æVĆ}/Ŗ£g„iŖU<üpAĄDs­bR³GGÆCW|˜Yõ¢,é搚æF‹Ī®‘{ §+ƒŠöא7ˆüdėĒ ^öĀvm”6Ȝü?0Ō"(PR朒KŻ’Kä’Āää’…#”PĀųŁī”pŻ~²¾ęéU½|čŌ Œk #ō%=–®ģå#§Mą‹ļ›ĪŖ- NXŠ8ņĮöżÉ¤#żH8“‰å¾ éjjCĶö B‹/5 Ž:vVĻ9ļ9ņ„_žģ‰“nłÉc2VNżćĻ}čcŸ9m=Z˜õkwģ^śčJc ¬Ŗõ’i¤ŃڌÜ`1wšiY”‡–FĶnėødńėæ8wŃö52ēö?§m yå;W­X/ŪRźDʱ~óņ“éĻmnš×Ó}A Ąź×üU„žš¼ŲŽm0†X®ž(€pø$8’Æ]{Õ®oć«’ ęg===ācūü‚իלŌ×7pR6›=Ö,ß÷ŠĒż£āńä/æüņōW\ńœmŪĖ¢Ńč3_łŹWž¼źŖ«²Oš¶ē’Õ€R¼a$~“ș…š„üŌ €S.F“Äč”kżJžłÉųögĪē+õµ v3zHĮ÷~ÉĄęl³B¬GYŃŌĪś)óéšs4™ś¦r‘R¾ FߊM!'6rÉhĒŌÕŌćµ1ģźß?|¼øģ“ć«oė؁©ż¾Ą’ˆĮĀ’Æ ō²3ž"R(;„>Š2yta ćD¾@˼ŽuNĢæ“ļõ¶ĖżŒ]Ś„!LŃĖ£M™§ĒĻļ{.ö²ZVź>`Œ–"p®ņłŠÆĀøŚ‡b›-1ŅWŪ*Øņ(5“Z)% ѕŅļ,d”VHņݤP–ŃZ £„“”H¦ā¢3±Ó“×M)ż¢£³¦’zķõ`lÕ¾°!fV£!’Čz.×Üō>qŽē8õس8dĘįx~–‡žżæ~ąĒ¤2Iźk¹ōĀ+1ĘšŸæŗ¦Œüßµąē)$O-’ÓČäøģ’0j†ŹEūLž‡ū>†Hī1°”WŠKŽ"‚8®‘” R™tIP&W¤%Ą7… €§3tg;ču÷PcÕQj ėÕŅ#„$Į€pĒžŪ-s(h­I».i×%™Éąłco(˜Ļö'3½¤u# "$Vžų"ēą#rR’¼Ģ_ˆą¹Č{F䈿Aš(ŹZŗ2G3ŪĢ.Ž |„–å›#dżĮēzkĻŹma.=£—'^«įžåŁ·¤į݇'xaCŒĪŃ×a Ī^GŹ@‘ņģśw>_?fķG‚F°5ÓŹ¶L “½Z³“:ūo€”ąf]āÉųˆŪ„³%©ƒG%ޘŸ87‹lm…ē„÷„]>óæ\É«D‹œü_Č!Ü’„偒ņiK--£„å›tjūŗXŻōc÷wØ·-ŻĶŗ,DM IDATŽž,3ĘEéKś¼ŗ9A&«łĪķ›8aA±°äާ÷š¹óŠ·’G—w³½k’ĻŪ¬§čķOö5D½žˆģM›PŃĄaįŌS&ٶӒ—’µ.'–F”Ąa<«äKϽŽü•o_üņ'/?sõ֍]±%ļ˜Ł¶ĀÉq÷oŸ;bń’™ė+ĒSJŚĖŸ«! Äų/P(ą/2÷ÜC6o׹²Ž³šāÉkĻ}aYąJY=ŲŲĖśŸ=qĆśKSė“õPŪŲ–eü*ć±m+GŲs*€j·*ķ¬ŹłĢ1¦dئ˜Ō4QŻsĻ/^óJMMėßqĒŻįÆ}ķ_Łµk×əLęTß÷#ųv¢¾ļŸęūži™L†«Æ¾:ń„/}éĻ–e= …I&“/łAßāųŪlęmŠkŁ?€<ƒŽµ•t*Įī5yōū·cžńB®ßĀĮw*Į®NĢuæ¢oW'Ū-›•”/4µ³zĘ|:Aŗ’ü—b“ķcĄŌFźėĀ£Ų9¹ Œ?q†įS—ĄĪķ÷œĢųoŻŹÄ>Zzélš8‚Ėč0e#Ŗ„=cI§°Mż”ĪķS:’)ŻŪŠŠµ„ńp|«Į”„£śkŪ2[ĘĒ÷…°s¤HĶuEžĄo[Łp$¾‰L8¬’¹ŖcŅŹ(e‰j÷ )0B ŒR¢”ģ—žŗ¤ Ąń-įāK©‚n¾É—hmłŹR !”Ų°gmYˆĢžAjĶėÕmzĘH&ļŗ)~|ē÷ųÅ}7ŠX×BĻ@'YÆųs~ōœ¤¾¶‘‡žż+_qбĻ;éŽ;ģ4¶vläĒw]7ź÷“jĢÉ’>¬nÓįČ’P ņŚ-EėS4 Ģ­9’8ŗ3­ <@‚\@@kMBõOõJGØ 5PŖ/øÓX–EÄqˆ†ĆDĀaĀŽó¦¶ķ{3į+EĘuÉd³ĮĆó†4Ԛ"c[—õŪ»W©J”3;3ØÅß;ę¤iˆi~5Xv̬4ē.‰óą+u<¾Ŗ†‰Ķ9±#¦gxać~•Pļ7 ‚n3;Ż&ʇś9“v'öšuīčģīQžÆ”)7 Wa?C\æVöß­mĆTĮ¼ ]Ęt¦Œ ž\“ҁĘH4Ź %¤š……/-|$ž%„’Ā(ۖʱ…'m”m„–ŽŠH£ÕĄ‹+Mū J¹_r„ æ<øĖĀĪn—ß=Č3MÆ%ći²¹ļłé×öQšY]]ITÄIw58])©&/’o?{‘£K&ęRĀ÷žåīÅĻ>½~öļøśwć'4e&LlNAąœ Šß—ršškāW|ł=Ļ•ī?Ō—&dłĢ&ä8z()żņķķM×=väe/n÷Ą/½æ°¢JTJĒKĒČźgvn²&­±¤(ž!ęŌ–)Æ’/Eõ¢€rAwČ-#‘°)·™-÷¼ų¬÷fŽżī —Ö××?½ßøöĖß­łŁm·ÕÕÕuŠėŗ§i­ČmZkŒ9Ć÷ż3|ß’Žb7ššš°}„”¾eš·Ą_ Fņč]€yēÅųé £Ł±}_s3ż—žĻåGĀĀ7bNūĢ üŸž.×c»e³:\ĆK ķ¬ž6‡‡.!9q~$†É¤‚ŪZÄǦ `ˆv€~qś4Nbōö¢u„óv˜‘£‹„ ­‰ć‚ƒ‰yÓOjbr_œÖt?±d {\pŲ×2€Źåƒ‚Ø%eJacT@ę£ķÉžI-ɧ,Ą¶ń3Fڶƒ \Pןęcz¶Ē¾ '¦®hŲP­ @8„sŠ\™ćfćUÜĮēČ©JĖ„ƒqü  @ŚŅH„V`YćXĀĻŲXұ”ŃZپš•­}kóī-zÉ“$§'²ėėµµāķķ*’Ćé”W Ś tš–qÓģvw”­Æ«ią¤#Ž‰ŅŠ»ū堃:s19ū³$Ó ®ūÕ×q½ cįŲ!Ž:ä8¦ŸE¢—ēW?EO¼ā3 9ę}$’#uLėž+wjuü7,l*s ©SäÕĀ”Ø h T.  žvéõöŠēīĮajœzjC @ˆ¤R$3Įo „$ģ8DB!BŽCŲqplū/.(ą)EÖóp³Y²žGĘuńǰŽæź{śn@ś³żųdƒģ¾““ģŪĮoČłM@ś%A ĄirAŌųē~{)Ö"ČuŽĮYcņ±€ÜĻ5kŁ“š3ꀔŠT£°¤įéµ1z„Hžm+Čö?æ!JwÜ¢6¢yļ1<·!ZlŚāū÷µ’t%–4:Ł„6ŖY·3Dwā™āŁFv÷40)ÜĖ!5»h°—ĶžµbĻŽŻ#nS)’×”ŠhžLžÜś*ę/ģTė?A@äĀØĀ(#…²¤QBą oŒTBHßRIĖų–-”ÄųĘ6ZHK‹ō…–Ęv|’[z’©žõµ5­‡ŒågX4½–½}ƒŌYGµ²~Ē5(ƖŽŽ”-½½µ”¾ī††ī“eeėf‰Ł‚XøīpL…éRU¦\ĢÕĒ2öc½ŗšņ«Ī}¬¦6RŠ÷÷&g_Ó¾šš©ŻÓgŽOÜųóü“A“@Ś–2ø4ģ%Z#¤mŠ}ą¾×fĪ8ięīu…… ŌB(Ė T®RüŽ)ķ_I‘ó[C*[FŪ¶1&÷'ac•ĶU€!J"&2Čß`0‚ Š5_žrāš’÷Ē€G”ÜpŌłÖlŚ4/•JšĶfO5ƜAąö0ž€r] ģ&Œv˜o6žx›a,|ę‚©[ē/ZĖĄ²Ų¶cž~Ēw_Äyļ=óĘ5_€½Ż˜[žHņ„×Ų--¶Ł!ք¢¼R׏š³ŁuÄq$§ĶĮ‹Ä‚æŌŅ Ą°Ŗ ‡˜PĆqū2FĖ‚ć–Ą­wĀ1‡Ćöxi%¾ XĪiš­ĄŁ§Ā’…°r-L™Ķ^6Z€pśQL¹ż ZśØĶfčŃ ,ŹģJ…Å2ßó°dy¦ŹL2īŽŠ0ßĻ8-”Æ£eVĻėąCN`£“%ĒĻŽÆč߯Ŗ|9³kSŻU­³S—į+]Ząk#l)ŒņŒĄ*ŖŃ)ŒkUĪõŅ2€Ņ{‰­1:_ l-„§…0ŚZ»Żl©}oG÷f/3ē‰ĪžQ&S¾/R÷*Ó“AūĪž<ŪrX·uŻeėZŚøņĆׂüĻļž•ŻŻ;X0ćp>wÉ?ÓŽT¼×|ōÜĖų̓?įžgīØ>¤1R3T. DNŌ(<“„ßļ¤?ŪIXʈ9uÄBuŲVØLö^üHǶ ēŽƒcYŲ¶| Œ1ųZć{Yß'ėūį÷ż15ķfø~†Œ— •(~įR}‘—šēdžłēE3? Ū`É@ҟ#ž"ŸķDz’Ո?jXEgę8<åāX×EĄóį¶e<·¾<ƒģœõQĶC¹ģ’ɇ$±,ý/–Wė%]ICLóļģa|£Ļ@ZrŃ;4w=_ĻÓUüņŠ€n3B}R³‹fgģ×Ūż¤Fp’Hf*ņžį”čĪCžżP *T>4©,Ł×öØąR+ ƄD ‰B(!„/$¾Ā·$¾Ę7–ń…“|)ń„¾tPBj-%:¾iŻ›Xūtm͉c8cq ó&×`KĮė»’üņ±Ž19nŹõĶ®®ųŽŚØ»½)ÜŪqā¾e claĢ}×4ĒvČQpX 6ę“A(2x”aĶźõnÖwĪ{ļQ…¶tæųÉ£snłŃ#'g]?$„Ōēæ’˜gæzķÅ/TŖ¬ĶY &¹6|²|YUh<é°rWėĄt&Ā5]‰Xh\}Ź·–ųó«Yõ®c9ēō£8¢½™1ŃvõbīyŠĢć/Ņå+vŪ6›,‡5±zÖ4¶°yü<ö.8ždÓTtžü…Ŗ>9T–ø)d4Ä>ßT>’qøā›pÜ{aź¤ĄĢ/sN‡?æŸŗ:˜<Žoƒļ=D"Į|4ǁŗżģÜ4:žGs&EĒ‘šbZ%ĻōKQ„ `ŸĢsW” XłØljo}cĒŖöK½TčŻ@ĮÕŖ{[Ćŗqsŗ¾Ż2=½CjŒŸDD}·ufā?÷¬Æ’å‹éŪ_n7ÜńoųŖś s0Iz«żSBŒ£ēŹ¢üwÉĖżóĻA‹@DPµ*)v °rŠ‹ą„4¹×ł†®v0Ķ*č$ąš4®—¢7»Ē8„ķZ"N ŃP-2'•5ʐõ<²žGeÕÆ“,˱ķ (`YX–…%%–”ČÜó1Ļƒ2„5Zk”ŗųJį)…ļūĮóƒP³?”Vø^ŠŒ— ć%PĀDśó_X䲞Q–ĢIūó5ż…śž|S_)¢$ćŸSŒ!«’`‘ l^gOz&“k§ōļa m "’¶e8ó°8Ͻ£7a!exic”D¦|F.|ü”^Ūšķ»ŚčIXœvh’÷3ĄŖmśRcėe0tdéČ62.4Ą”5;žj»;GĪž¤Żņ뱉”¼®Āō&łČ֏“Ģ}i‡Ęד¹6Rj:hūž!…/…PŅ’JHć )|[_ŚĘ–T¶ ķXBI‰–ŽŠ”-į2K_L»K.Œ†cmcõ9®’ĆÖ±:T^ŪŅ™µdvwmØk}ķ¶~'”ŅłĆō#†ŚOHaLµxŖ„iÓ[“–”śŪ_ūżQǜ0wē#¼2ó…eėēŸpŹ!«>ś™Ó_yųŽåÓī¾ćŁ>wå¹+k yīJbÆ«Ź{8!§Ų2&W7Pˆā!¶õ5ĢÄMĻ,ŗōĒĖé–šĢŽ¹Ķżkß1³cĶŽ°¾.䗝¤õ!ŁŁ[ōOX|Ź_“üU1m·¬Š ē~Ė’ƒēöCŽz5 Æš”c †!ćꎷŗĆCuuŅŖU«ģ/|įs 6lŲtJ2‘:Õóżć<ĖĪ£Kń„ā­õĆĄA֏=žxćZĢ | ¦žd“†Ž«Iõ'éżćŸŁyß2ę3Ÿc]ųhŽEFśk,GŚ…ėńžy…äņ5ōjčD°SŚlŠDXm`sŪ4vΚCߔ%øm“PagčĻń1„ķłT°/‹pÓȈÌ}7Ą”óąO憎~hj€O|10ōƒ@źō­/Ā—ž<Æ<ó’ĻO~GšŲĢžLT)².5iĒĻ"C‘ ®›ē’ƕ §Øā„RššĒ Źŗ77LŲ»zāF‰Az@ķĖy»×µ]o×ķ¹“”Åķ-]7nĪĄŚī­5Ļū®uL²7t.šXåž>`‡…V¾TųēÜŲd®•`¾ @ aņA į`¤/ŒĪ•8Ł’Ÿ½/³£Ŗņ’ž{«ŽŚ{wŅél=!$A”EGtĘ]ĒmfÄq\*źØć‚£ .øįŒŹ"‚ˆģū¾!{'ŻtŗÓūöÖŖ{ļłżQUoė×[6‚Ćł|’~Æī­[·–WUßs¾ē{Čh2,Y° Kg,mH“! ciRFKW %GØ?щ†Ź9Į¶HJ„5#½„„`ūž'Bżć¬»­}:{÷`éüUxė)ćĪĒoBe¼¹ąß°¼łh¼øżÜxļoĖ›Ę%ļś*¤°š‹[®Ä½Oߚū…ķO抏’ļ|Óū°·§¾xoŃv[žzœ°ź€[žŚŗZĘĢkŚąŠLˆņķćw˜:«€Ęn¦ü­ąŃ’sUŲūHäGŽż“¶ą³üš=f£ M@Į5ƒĶ B¤""ŠˆUˆCȊ”Ż £5²Z#ėŒĆQ vĀw ‘V½ń„cĘ6Ęž«V@-üGб1ČŖ4²*…“JBé4 , ū„ "żčG>w_`yżr9BRĄ+UķŸS• ģ]ä9 8w,Ē™`Įņ6 +y ęTĢM*£}šmn [÷¼ä=ŠŖcÕ1ƒķ]cßGOZšĀāFzŗ ļNŗ­3Œw?‚xDėXӜĮhZŅņ‚ŻNŗ•h°G±2މ™”‘C¶­#Ķ\×Eoļ¤ż²®†*QLēXaqŽ¢y;DąŸIŒ’ą<Óé¹I‰<õO8^ƒX“š‰•/·Ŗ¬H%%¹d‘Æ •°„¶¤Šla+ m,Ćq©µ¦žŃžMwG›Žļ”ٳƒc©Œ‹ż½!™ŻUļŪ3«v_¦„AÖA,T!#‘źcr^Ę2fʱŖÖĶėy“!žŲŅ]»¬s8¾ų‰Dćü'v7¾åŖG×d›Ŗ’-ˇ·œ¶¤gó;Ö¶µ}ņŌķ[óŌā]÷niś»}#[Q•öšvø` ōlI€ƒ/¾IK²R $»ždrüQˆŲaöźļŽŻī˜Åcž®YäĆ’¾„ Š÷æ’}Goٲㄑ‘‘2™Ģ™Ģ<ó9-„|RJye$r’·¾÷½ē?ö±å~ć¬sDŪk€æQ›ŠĄ(Ą•žżaŃJļÕ·ŗéMĶp·¬GŗÆ żéat<·-OmF31ę/_€„+š1gVŖfÖ! CF# P&NeĮūś”ŗśąnkGjG;F0$ƒB [JģµĀh G±»¾] ó1øōõH5Ģ…Ŗ®‡‰T€kÖŁń߸ʉ’•ķ'j–%±ßåŚj ńržßżöā¶ŹC\<±©¶Ńˆ17 Ūd@&īEóĒM°ĒßmŲdiõm›õ™ü aśB•ĪĶъģ¶lŹ^Š~˜ ÕļŪ8ć_ŖOļų¦0`@±)UõĪŃtV¬ī ÕVĻ҃€ĻšhŲ~”EÆÄ#(•^:w`”ęDgl2¤ĮŠĘHÉŒė ‚&°–’”ŲÕ½Ķ8 ¶b)2ŪvśźĄĄ’˜8Ķėjķā[æł¾ųoćƒē’+ŽsīĒ „A=]ųŃu_‡aƒH(ŠKŽõŲVæ»ógEą2N[Öcįģe8õŲ·ąŃļ-:[ÖćŁĶap“ķūvN0ēńäNüū*ó¹ątęIžā»÷Gx^e€€@~‰AųąŸs¤}mM Ć`fdL •»^ŗAHD‘1„ķĀVbŚV†ĘŅæšMWeqSptŽJ{i>Ÿm/Ź/‚²…ßū…^n?ÉčSžęOĶ?8ģæ ņ^Āsz‘“\³…ĶaރՁžō"4DĒęBjkė įk76ę„hće*gć¬ÕIt Z8ļŲQ¬nNćŽ*1ÆŽEĘ%t¬ÆPDųĄiCøééŖ"Ą¹Ē&vmŚOŚŚ8ÖēVā‘”åh ćØx'ģÄA’H“®īĪ)„Ļ$Óc‘‰:ćŽcīĻY¶jJ]ņŖmuOĀųā ††Ylh!„G’—¤H’K’• į1)[H%i!H“€‘dŲ"ÉF0[Ņ•œIwļ{ą±įIJ7VWTzźĶ~Śs[»ÓĘ8{ⱑmMńĪīxdĄ•’XYÄĒuĪ !)äÕ’ĖŻł… ƒ]‚¼čzĒÅ'¶_ōSvķŽŁ]ŗbĪåķĆǽz~K,. ¶ē® ‚!ąēö (ß Dś’\AłæwĪ] ­Łöō«÷“3ųŽTFŹ?½¼“ł±³—oļ©Y¾w(¾bĻ`ÅŖū·ĪĮ7ļZ“œSŽ²tęčĘgŚźĻżü-kϽöOŽ"X°”ĢĢSæJ'āžY,}äĻ(†¬Į²ņVT@f0>żéKē?pļż§ģėķ;%NŸj WŅ!6„Ćį«««ųÄ'>ńųe—]–ĄėׯēuėÖ9žõż“ׯB;X:„¶h%xŃJč•'ĄŸ_śiĄXa˜Ā’€ĀĒšÓ8DFj vV‘ÖĘXR+2 Š–$£-hm‘"c“µ£·ĶYۜBČĪ%Ȋx ”y³‘ݽwŖ§'o’2¶¬yš›ć¾§žŠŻæ_ųŃGpōāc±bįj\xĘūį*?ųŻ„H¤="ł?œżQ̬›g7=Šæ<|ݘM¬]~"Žvź»0šĘ5·|Œ #‘Å÷÷ÕIę<żżv×é(žĄvK×)ćŅńļXA¶‰,M'/śĻ~ŠS^ĄpAŗ€÷"hWšX§įč”ļ$l ĆaŲ2 ۊ"d…!ÅßĘ#˜håĄU8ʁ«3puŠ]?ž3ÅHōI’ ŚQī‘£ń{ē‚ $@A“Ÿ(üįƒüœš?ł®”Āė{2ōOå/­ <ƒŽÄĀWÄW”é’LJœ¾2…¶Ž“Ž}tI£‹ś …ŽQža oZ™ÄĒĻ€%€G¶ÄŹV²łč™ƒØÆŌČŗ„gZņ©U13W%pū‹•‡lŸŗjt;՘ĮŠX×ß,#ĄƒĪīĪÉ;H”ä’³eĄ”Āeež*‡Š ąTÕ1Ė>½GƒĄ xŃņ]¢Š+"xDJ)AP°XI‹•BA@ !µ”ČŃ’Ȅ}µ|‹’zfe×PGĻć7Ä£gʒņˆ»Avō$ĢīžĮΊPrėĢųŽ–†Ŗ#6%sō’ŚŹĘ<żß‡ˆłL4ƒ‹‰ˆ 7žĻc ~žć{Nq]mĶ_0£ū W¼óÆgĖ@2™‘į°å~ś‹OšĶ§zŹū‡Ób3l­aė,,S  /$8©A£ć`ŠfżžŽc‡ƒbŲv…{G|ÖČ §ĄåŃógÓ÷üHģ.7e7“»āÜóF~īQ÷= >Ņ957_ÆĢlY“a2:Ė¢ō¹  I¾č_`†ČD…i€˜Č0A0¤ŌŅVŚhŅB-,V¶–ŽQŹ»z·˜³×n/ŗr9²»‹_ڦķ. žĖ¬ū‘ >ł³aoO;¶“n(ķbOw>~įēæųó•ŲÕ¹0wf3Ī9łļÉ¦qĶ-?3īĢŚ&\ņ®K’użčźĪµōŸĆąh?n~ą`‚äĆÉĄ’DŃ’żbB &’SfLżŸh³UŠÖeĪE’=Ŗ?r“zb䐹’ĶUĀf€}F€÷Żw hæ~½É"k²€bė9$KX2‚ ĆaX†%½»żĮ0ĆJ;PŚ…Ö\ćĄ1Y(•ń¢īŽń ½šŗ„²}ĄŸ/ÉēGł yĄ/£÷ēÄū9”?Ī_˜ŪĻ9€_Pż±DŲośą¢ŲŽw7†³‹Q/PtxLĀOļ­Ć?œ<„Ėž¾Ż#¾}Ė 4Ö(( “÷Ś`&ÜžB%ÜĒi+SxhSłGßžØĮgߌ)€ĻßėÆB[og“DŚxü0ö8UčqŖPo'°"Ž…¦Š•d;Ņl_ļ>øīäŗåŽ«įøÅFŽf.^šļV4@[Å|?t°= IDATiͰ³qŸ—E9ń?U'X„&‚X‘ %K I(©$±²“°Œa‹Œ–±#¤`&AŽ?ķpmU2=¬žß²§³łĪ…sWž? 1˜Cn©Œ‹'_ī ‹LKulpĆü†¶ĪU{³B:ŒlµõĶŃP“b yļīS×uµųåÕ÷¼ęømĒ×ÜuĒ-ėW}ė+<żw}ńf€**£ź'æż—{Ć0ȖåµĘ1k\@Ļ.\³£ķkv“Z¢YK Ļ?«2™żĢŪ^ŅŲ¶ĮR0Ū‡Ŗc×?×|Ōśö†•ķCń•~aĪŅUg­¼ü€}Q@oHY&eĮ‚d†eÉ1 ¾44 eCģä’ėėW}i``čcś…B/Ęćń'¢Ń螬XlĻŃkÖl¾é¦_µĢdȕVčžę ^=öšąUnWąĄtÖXWfł¢•ąu+”7ŸsB ōÖą“lF²³ ƒ=Ć%÷ĮJ"$²¹.Bl ™A°!”­œŹœHn]ŖjTĆlØŖ:˜ŗYž_“¢ %§9ē销ĪndĖö›ÄŖ+·ž±?kĆ\#Ž·µrÕpgÅEnZzIē„Dķ‚ģęĀzH€³¾CCł;ų†‰Ą¶ ø†i< °p Œ-ņļEl É!‹uF“ 2LFŅ– ­IFƒX‹wo6Kf­†•/w`××Āž™/ x(Ą?\}ćwpÅ'~Œ/č»ųķ_’üĖhķčč‹>xßĖMļ’§3¶ūėūž'(Ø6 &®ųœ„€ąņć¤ņ]M ^5k$ńs7>ć@<-2\ Ū¬/-ŒūĘZØ=[śK°0Ö)Ph”ÅÉIœlµµÕ[“éō†l:{4 ØŽć¬u]wE"‘Ų9dY-ĆĆOæéMo}šĮ’ŗuĀKģ՚’¼ęxÕŚTҦ¢°¬¬D‰gėį‘·›—€›—@ÆhąnķE¶³"5 ī…°‡ œlĮÕ@E LĶ ˜z•ą æ²<:ļŪēo£ŌźĀ0„:ÓMlĒŅĢ9ż§W•¦ŹßżJ?8ŽĒL˜j@éņrb€)WĮ®ČžŁŽ|ĢM†ĻuFCæ‘DZˆX8 K¶÷ļŖé3šfnxĪŚ‘+ŲPNsŖvNśńJ'­JSa9@m˜ŠĻ¤% µ|`#L‚XVÖČk$Cd @¤‰Éh¶¤0¬ÉøŒ°„†1JRRJ×8nš:ś[xĮŒ¢ Ń£–Āķé›üOf¬»gß.\qͧńՏüæšó¹Ø?<µń!üź/?*fĪĢfĄŽŻ›ĘŒõO| f/ų›şž}n»‹ę,ĒG.ų ²nWžžkųŸlЁ’ńwg‚u§fÓVü?ąķś+•R0™ąW—{¶ūώ¤ {„Ļ`ņŽ f°Ļ €90 r¬ƍƒæ 3 khNĆ ž±f<übGzht“µ"4²~veŪ†EM[z*D—+$q@’Æ©œ¹¶ÜyŒÄ2ģ’ÄęĢ­ėoŻÕ_~ĢÜØØŠ¤$ˆ¶l쨹öšūN EsC!żė„·ćōu碫ÆW’ńŪš±*|ęæŪ įæ’ų­"Å’S×¾B<ņü]ćīOéĀI!4į× ŲAż›ņŲeĪQaŌ8pī¹ ĮÜäčł.Ÿ©.H Ÿ!8rĄßw°’Āå„·ē—lļ/ēĪFąˆšb=Ā®ōĄ|0-°*%NÓ/:@ÓĄŠCŽ^/rūLĀ_8 Dī@äsų ¹pWįwšÅś(w\=Õ?Ī3ĒŪ'ļ5ÉübŠn;cĻlnß&4Āų—Oa•xķ£‹Ž@” &$®¾§ž0‚Ė/źF2+š•ėĒMsÅŁkčOXxngŽõ^×8iYiG`łģ,š\¼żu£øę¾Z“õ޼·aų£‹°%9Ėāū°0Śš8RL=åč2£ t "#.I8|–©ž=fYö™Ż†S.Ę’#h!„ˆ’IOüĻ%^ł?%) FK!µ¬…0Ę"ÉFcEl-„0¬†$æš›cź*ś’KxWėö®ćŖS?0·qę¢ĆD¼Č’#:ŅŻƒC­q;±~fÕīg—ÖnÜÓߝ±ÉÕd³X8ē˜˲’”’·)ļõj"<ż©żņœŽīįšĻżóoĻ9ż-GoHF–­˜Ó“·¶öTWUE@p÷Ļ’¼ō$„P[L[°NŠ<øL›5BīŒÅ„ż„°ĒLHJ9唈Rs=ĄF“ģ8”Ķ€ÉUȹß2ĀĄ¹ēž•<ēœ“‹FƏ Åü„Æ’°ž–[n;±««ūŌd2y†1f.0óŒl6ūŽl6ūŽūļæB4µŚ¶ż`$¹’¤“Nzš®+Æģ’Į’Æ9^ 6™ĄȧLd§OC`*ÖøĄ»ėĢØS‡·½ZÕżBóĒŻ“}Nē ³nŲ·qę^£Eø˜<@ÄI+lÖG*§ė'žŠ×g‡Š –!ĄšsX£Č<¼ĄŚ h¹j4 €˜µöeĽ–å§ø¬Y€ #l›“v”Ci­”µEZh£¬”Ō°źŁMMÕĶłAčņÅH<ūĀø‡ö@Į`£ÉaüīŽŸāwwü48€e×»ķŃėqŹŚ³š®7°­}#Ž[qĪ?õ]Č8i|’w_E:ėEų \rń„˜Y; w?y }įžÜʛ›–ąc÷Ylܱ~¬`"›Ę/tZą’ nwj›-?`)PĪįžf”OĪēš ŹQ÷=榀ļ€'č]Ąž Żā{ ō©hżĄ@ȏ ś\\ą5Cń{!^žTrrQu°_}ƒü~9`€÷‚1ŠOČ3|lj¼³€ˆ<¦Čż = p8xSa’39Š@?Ģ{m"š_Ś@»Šļ¼Œ¾ō\4DZ‰ņƒfm½!üąöTĒ Ź•Ł¬±Fįøiüžńš¢`ŻŁ«Hd%¾{k’YÅųŚ…=xćQ©Ćī,a"x~t¶„š°4Ś…±^ȉIĶG„ķķģ€ćN!4 `$9–%Ąń,ø UšĘ|84fBQØX‰Ī…adŪ£A0šK’ł‰LMĀü+'ž',øl±€BhiAK‹T žēÕYį`3ģū‚X‚ ls«»†YD¶oķ0’›Éž|Ń¢ysŽeüĄ‡ŹFSŁŠ‘mFĻͬŽūų’ĘM- f¶DĢ N{ZÅPń‚ĘćÖåo€~d]xĢ®BšÆ-F)YWĻ< }ó}_¼eć ķÕwüyż‚‡īyyÅ`¢ŖiNmßĻt׊EKš†næõ™5«ŽnnęEć”’©žR Ćž…Ÿ LēĘ+?‘ŅėT.MĄ[ßsåȲ”?O`ł’@Ś²­\‰Ąr} -„g's¦½€—^ś’z/½ōK·Åć±[GG™?ųĮ÷ĢüńgŽ844tšć8§3{Õ˜y”ć8 ĒłšŻwßmÄŃGæ(„¼_ńųܹs‚§YžŖ“×cVŖ0•4€ńt`%Ą›'yōģ°tœ¶¦¹ą®Žāõw€‚H „¾œÄ¹£ ųĀxkk€o~8ķõ^ŪŻßü108ģµ]0gցmļåpˆµ,dĀ6ÜØUž¾^˜ l1Ąpm:Q5oąęĮ–™GCĖ¹=$¹=sŸ×gžn\0šr(JŚJHa hLV„¤„-2YU\tHĆKšt,Z£ µĻ46Äl1ۊ`BĘ@ "„"ėH#m„Ż1@KK×(欗wo4MĒ4N/¼h>R7ĆdŹŠ8'’X)ųŸRßŗū;qł5—ą~ļ=÷EżžūĘo”£»5·ĀÅožÖ,;ŪwoĀ’Üń“Ü`ŃJ|ī恐ƼƅųńgÆCßp7īzņf<³ł‘qgšŖż+·Ā„sū¹Š N…Ø4`ų+1ąīÆĘyƗēłČ¾p=ļųÜž¦ ›)¹ų}Į”‹&[fKę™‹ŹƒrėQ÷ Oł÷Yą.šxŃ’Ņ8“óŅ>c†Ņ^é?ŹGõĮ?kŠDPšÅ’¤€ —$)!…BŗB(eKVĀš-6šÅ’Œe8,ÉH)ŒQģ±Bž%„„ęøUóŠ:„&gė¶nsżó#«Ī\¹dŁÉ±Hh¼¬ÅƒfmūFĶ3›ö ii­ˆ¤žkŖŻóĢŅv,ØŁwžó„ćRž=.XfPŅŹ¬?bĻ X—-2]”“g9śæĒY ąõ³$« µŚdł’Sµ0Ę©Ÿ 1üj¤×^ūÓöŹŹŠßbˆÆ}rĖń”}hĶŽ½{OĖd2§+„N ˜ł8„Ōq>æk×® €ÆųŽOō°×Æb»l :S±©čLĒęÜį×ļžXß®‡* Ą ėź”[»ńĢŅ9“śB&µÆ|8īąŚ+n.»xąz`4 |ł?O}øš\`× é+G1>I$…T(NJĆY|W,M(²i°Ę˜ @Z+N÷ÕŌōom¼ KĖlWeؙ?üXõ¬Ń.!,r‚\~i5h<ē.1y!żŅkN)˜ÅĀahxāą…f,C-ŹE6˜r)–l,ÅÄÄĀ2†Œ-HC6BjWMJģģу©ŖåĪI‰ČŅEHmÜR2łr'B“å×-ߞļP_=’rŃ’Ć_¾v< ŠÖՂ/ż÷ĒP]Q‹Ļ×qŌ‚Õøż±?āɗȍ½īØ7ą§½ƉAüšŗĖ”“ėƒ6½ų+˜YׄŽž6<¾į~Œ3ŽžżæŽīūnyčĒLöoBōÆt…ż=G>x»cę}%+2ē@µś ö!DžŽļ}ńr’sDĪÆ8‚ ¾÷ŠåI² P )²ˆ0Į>‰ż`ņ9 ß=>ņĮ_ö·!  ž„żČ°Ė9߉'\üĮŸ|‚ņķåģ°€’±f£–~©Ł˜[Ń<~Ē#Ō"6cķ‚4ī|± …„éĻ^=Š‘“Ą“ŪóOś%ŖbĻ·EĒ.ČąųEi³ė\ܽ”/śm‡ĖR&„ĶŲ’œÅ±,uƦq ˼"Öŗ»ĘLĶ91”pŹĀSć1¹'ų7ŅF¶b,³%ūH«WśOų¹’‚ 4‘Šš œjRą'bEŹä @Y‚•e[Š Ä’¬ń?ņō™¼;šŸƒ.@l”8n)5§v÷ ÅfĖĪ>'õäKƒ»ēĻZvÖ¢y3gÉ17Ž·Ń”ƒē¶ģĖģķź I§„&6ō|cõŽ–6mjŸW·u“Ņqż»kŁlG/>m®”b–`1!ͽeū¾ŠGīŪ¼ģ?žė=÷@6ćŠ}ēÆĒģÜŃ] Yjå1óŗĻzۚŻg·¶ėœs_×”2ź”ķŪ:+/›5†qYUĮ ,lI3 -„`ž Ÿ×8<óėӀ“mę’£’Q£Ōƒł˜]9ń¾ųńšPØ ū”ĀÄøfŊzė֭ϽϢŪ|ż,|õÕWæ~xxų$×uObę7Ā{»ŽčŲÆ9ģ5Ą«Ä‚Ų́Śé)  ąöiŽóJ¤„āąpę¶ēńä™k ¤Ü’k~ū.`k šėļqą\u-ŠÓ<ö,ŠPē-#Ö5ép“Śę]0½Ę1Š  AYvqčcŗb€±“Ėę€6.‡mY Š6$†Č2ķ2¤·Ō/ś]ż¢¾bK€q@B€a<Пčˆ6vTŸ”MɕŚĶĢTEÄ®eqG¼Ö}döźį‡ŲÖ\č`¶±1Ø„ TlH’q4 Į`ā“_!Ą^1" Él1ùl[aČȬі$Į®'[j6F MJųBEbóŽMü†„E.›čŅÅHoŽÖc_2'ƘÓhņ;»Ų,ž»’ś®ÆąņŸ_‚½}»½ż%÷÷Ļ8jĮjli{ ææėg¹ĮgÕĻĮæüż—ĮlšĆė.ĒĄponĢ Ļx?Ž]özģģ؊Ėq \åÅ/X;¾ūÆæĘ»ĪśžŻü(:zŚr³|ĪÓŲæńwwŅL üO>Üōśö-„Ķ®_ā…B‚š"Ø9V€„ Åüˆrų>—÷Ļ%mAX\‚‹“ ŠĪVѲ)\§„½!ērļƒņˆ%ē™ˆ/exŃżüŲłž… ¹! Ē.7ļqlŹąæ“ļÄ•]T…ĒљXŽ‘F„­Ć €Ō,éa‡Ę •}£õ Ē/Éą¦§Ŗ M~oß¼:ö^m=!œ³6}C¶v†!#~å"šY¶±99-©F,‰uci“¶xåĆ#Cčėļ¼#¦@’łĻBˆ1€]ƒŅ×D!-֌2Ø?Ą·rŃ ‚eRz„ ›¦Ė± ĮĪ1 y›cŲ§bˆŽqvTVVŽĖ8øģ²ĖŅ—]vŁī`Ö¬YS»uėÖӔRgc˜ęT{Ķšj1B>4TĘ®Ą”)¼śÓ¢q˜-żčėčÅśęY8q¢ż˜Čöt!ųÅułeBĆ#ĄŽ}Ą¢yÓ6“Ū ÷Ā!ĀØĀ@$ŠDøŅ‹å—ńSœČ|}q÷`ž[>"#YeŁŽmCÅRXžó!A‘}›šŽœ ½M»rŒūƒApę;]ņäŃ¾Šł Žļ欢Īeį=E…»$•‚†„$°P؀ņ0`#˜ņüŅG-ˆ]/ @€m£Œd²-mkWĆb­]£‚‚”¤Ģ®®6µ¶yńPU0EB/šĢŽVA¹£RŠĒé1ŃuQž`p“?üżeųüū’ßųēŸąĻż=mxŪ)ćčÅĒ”wp~ų‡Ė ÷ ‡¢ųģ{¾‰x“’{ĒO±„uCnĄµĖNÄ;ßō~Œ$‡på¾–’ `81ˆ®¾=Ø®ØECM#:zڧ8ē ŚJöiM%cļ‡ā’4ĪŃ“ “MZ” Qčš&åæų}½W_/ØK@|n<° Ƽ®9Ęß%:ųŹōą{ąOČ]T|ŽrūKå⁠¢ū…ó-ō©Ģ²26Ń9<ˆŒ“qą¢Ā܏–‘9XU·zāķa–Čüź”:œyt<}ßæ­gÆM`()štKžé»ØŃĮņŁYüōŽ:Ąŗ…iĢØTųĪ_f {ȳ¾x`S‹3ŽI”"¢±½3ŒG¶ÄŠœ‡Ś¶ =XķFHLT|Ķƒ–Ö”©ńl$é@—ékź(8„&$²ÕcE#³zŃ_õŸį•žÓ”AP Ņ Ņ$H±€žųŸ$”ģŃ’ Ś“”¤lÉŚĘI& #|ś”ųŸ%ˆKŃ« 8J›H¤7QaeœøŻŸčHwµī鯱µ­vicż¬³gŌÖĻØ‡ķi8—;{FMŪ¾įtĻPbŠnOXfŚ+Ā£[gŌōnk®ŚÕŃX·sø¾¢Ē ¹)£ ŠŅϵaB4^¹ŗųfœO¬—Čēė§’Y;“vķlZ‰HĢ2Ļ?½«łĆŸ<ć‰÷ģŒ°A:åҟnxŖł–ėžZsÉG~~į/½šĪó/<”(§$(óW‚ć!såčD®Ÿ)œ“)ü A–äėž[¾h÷`EMDj·"¢ÓRh=3žMŚBėź˜“©Œ:ŁŹˆrfW§Ó…š€¶-Ų՜Ÿ@‰S ų Ļ*ŠćĮ|XRęÖss’•˜=¶R@¹ŗįpx ©  “|XYk°6lp3®øāOtłåGf>Ņģ5Ą’;Xå§c+ š6$ Ą ć•p×ļĄķāH¦ĖŖ Ŗä\ņ!`v#H‘R7ć˜6ĄļļĀØ“0`‡ŃW]‡‘pŖ”žZ1ĄĀ4…C¢+GŹö§›.LG߈J%²YXÜ.-ībĆaåŹe`T(W¬j®īĖ«ŽŅż’Цé³(D ‡©@‚˜ ēŸ…€_J2 ֚¤”F)–` ÄĆŠ„!d\-$iAkĖh”Y #]lļŚ‚c›‹®ŲŃG!»k7ŲäŸpåjФ IDAT@Ėx¶?ą?° ;žÅ·®ż>ó—åżwõuą;æż"†¹e½ąß1Ö"<µń!Üžų¹gŌΧ.ž*ąŖ¾žįž¢ÕTÖcɼ£ą*-[§8ē æ¾bąʊ’å†:š_nģ`³eoīFK„\9č“OČGåē |šė9ü_vÅ­ĮörĆN 6VpŪ Ą”ĒĖē ü„ĒcĢÖK?MŲmņ¾e֝Z’ńĮ`“`0óśMh(C›>’ķåŻa¼¼Ū{PUE5^·(ƒŸ,ŽžŸ·6Ö[÷†! 8{MĻ·EŃ=”]\:ĖĮĒĻ@× …Ö¾Ī8:‰å³³ųł}uŲo©ļż4Ļ0ŪSXéĆņų>DÅŌDų–ķīhG*š¼#¼č’Šhłŗntz×õA°LuX§Ōė¾$;Ūū5‚Ĥ¢ŅP$HC°"æō‘p‰Čµ„pÉb%„ŠB°’R(iK%%“0V\(Ož”!lÉ„ādĄF‡d^ĢN°€ē°ą˜»/»pVŖ§ŽķŽ;8³»otŽŽž‘ė{+ę¹:<»¦ŖnVezśĪw½÷“–O}šgg]uåmo:ļÆū_Ė’ A,¦a [ŅLDėæķå…ĒoģlxŻTĒ[:sä™Ū?v’Ļ — )&Ś$B<}”ŠmgIė ŻA"™sšJLŻjkkssč0nM•Ė.c\~ł~Īׯr;X:ūc‡# `p’ń¦’`‡Ą³ēĆłĮ_q×ikńÉśŹ‚’žÓ™{  5š”‹ˆĪ符 Ų¶sF-o¼jw7£QōÄāčÕ UY%Ė8 -éńƒ(č*įØ¬“"ŲÕ3÷mjś¦qE®( ”VĘŖŻ'ŖŽ’ß`I7=p-©‘©īZń>-˜üO{°iĢc`9įŅY“ī?]š,hZŠg6?ŠŪ½~ĢŲgšvœ°ņTtō“įÖG®ĖM©±n6N\uŖ+źŠŃӊ'7>ˆŒ“3Æiƒ’)«WHńæģŲĖ ‡¢q[Ź–²›h7<^ą˜`݉Įn1ȝH]ŸKé’qŹmųP‚’ā±/ų÷šÄq+Z»cŁœÅ“ģĄ‘k]ƒÅƀē®ÅĪī¶u† ćģµ <×EĻH¾ß9kGQÓŲŽBUÄ`(%ąŗŽž˜ķØ9YĢkp±£+ŒÖžĆėPŲ‘jÄĪŌ Ģ `E¼ •Öō"€S5c ¶īŲ:eź’„Ń’ŚDÆŁ”µLMŒ(¾L’ē;5&ż'hbhP,„’®ż÷J’ AŽ øŅ‚‹•% ,!4,hIB #C¬-_üOŲ’ń扢’F€…ɇRŠaņ×Ń\):^1Ŗ*FRɚ衠ļH¤Ŗ#ƒ©ŹXFWD7Qʶ Ė@‚ˆµ ­ĄN6$U&j¤jƉŚŲP*rŖ#Ć®Z‡B®ė~ĄÅqœÜ ؔ”‹h×VĶ‹G#±U'õ…ĢŲб',üõ’r’KĻ·UŻ|Ć3‹žztŪā÷æóG-Y6«óĢsWļøšŻ§īŖØŒč}qŪ¶ÜYsjÓ„ćś… +Œ'ž_ź–dÖ !4_~īSOœtūęÆÜžśwßæmī9§-Ł{ļ•ļ|ōŽŹˆq½RĢ,BF2BI#¤ Lr1Ķ?hŹen–śJąsl€B˜ZVł€.€ÆūĖgGF’ė~tåÆ:fĢØč oXw×ÕWūyŁ<Ā„‰q[ś€©Iz¼jķ5ĄßØķO9ĄQ€+ĒyüL%  TąHJˆVĄĢ™‰Ģ×oŸ^·ļ˜= ¦8\Īj·ž|ńŪĄ{.šŽłZŚ€ļ~8õÆżc_Žžf`gš¾wKNw+Ą57CmlE_$ŠŽhöÖŌaØ:7_ŪeŖb€VPAJ‹„÷mšłŁü Ėģl\Łū•šŁĆ–e!£ 2šäQI‚•ĪĖ U¹¤BK܌8F0±.‡BÄŚa’ä ’I¶ĻƲ„ƒĮ¬5AJˆ 2F¶,ĮaIdi6†„1¤ Ū¤…††&--©,ĖøzCŪ³¬ń(DģXīŲF"ˆ,[„Ģ–ķ˜*ųŸœź>5š_¶i`,zó oĒiĒƒ®¾=ųéMßĪæ śķKę…œ÷ÆČdÓųÆėƀ«H!pńYĘł§¼»ØĢŁEg|Wßō-lj{”t3e÷gü‰O„ķ`€’)nw²U§ź¦ėX˜Ī`4÷“—äżOgģ"+a5ń Lįŗ›Źf¦5§Éŗ4ŃæiaīDʹ½ļŌśŗģȱ[Ÿ«‚ńĮĢńK2؉+Üób~ßl‹ńś„i<³3ŠˆĶųź;{šÄŽĀc !±oŲ{„Œ† ĻtpöźQtŚøöįZōŽŅ‰ķŁģĪŌc^t+b]زĘ`©²m-Hg¦>ęąh¶lī?˜Ę‘Ć žYŲe£’é{vb°!_?ˆž“ЬH‘Š+äZ‚¬Č®$”¼ŅR²²CB±e „m( ˆ’I)ŒVB%„’€‰£’ŖØ±db;¬@ °R&vLEw"e$6ŒDąfżą€-Œ6I֎ŃŅ2Fŕ”¤F±m+R¹w,@”3B–”’Æ]rŚql`S^³BzŃų¼ ¼łé 08ęøęįÕė®×®^’כŸ›s×m/,łÅU÷¾ń7?{ąäćŽ_ҲsGē¬N^ŗ-±`*„}Mb¶ ²©d¹ÄÆ›ß5pēĒołÉ7ļyĆ 7æ“ąļŽrõĒ~ęŒ æ»čŲ~t=ļfš4—¼’å$ō»,żß’’1NU€Āņ摞zŪ5££Éc ›uęvtt½÷†žśŽ[n¹g÷Ģ™õ÷œ|ņėīśÅ/~č !•wžy%E.€į±żsRÓį³#³˜ķk6®]~łŲGÄéöļ5§,/ŲÆ*ųÜ6Ī£&<Į#Č.ÓV`ø`y}I{į#Ķņ)ž<d°šĪ·‡Ā€•¹„(ą:^[4ØTsY¹^»eZåEš“åčļIoņ’€‘a˜}Ö !,A¬ Č ņ$D$ˆ IHõŚ•™ŃŠĢT5cYāw¹šf ˜Ę$Ś/in@ oŽd¤ *˜³ŸSķ=įHņŠ^’«&!%\fĮäÉA³`&Į†„Ń,Y±”MÕs Ļ‹UWƒlK+rõ³¦ ŅĖu˜üO6öd!JŃā9˱¼łh|ėŚĻc`¤·Ø­ŗ¢—~ųJTD«š“?}›Z_€$KŽż5œyüłHf’øékqćżæFKǬ]zŽxÜŁhė܎}{Ėołµ¼’©|ńĒžīø“8‚Ø”@>æÜ?AEߋśN\>~ZąĢ¢IĪŃt@śtĄ’„c—™ąäs;nČjCŖw6b•s_µ©…6œ’I{é˓č  ®œėąÄ%)üęĮ:<¶-†Ma¬™ŸĮ± 3øķł*ģéóžĄ]C6žŪÅŪć8qIKf9xn×ų!K=k=ĆFŅłµ”Ć*†é™t㨐YDe9U±éYo/Śö“M¹æ« ŗĖ; L4 =Æ’€ē4ĖŌ΃ЇUtO‚S·lV ņJž¤ŁSżw…$‡H8B’CR8R +,d…%2¶YiQÖ¶8[Y"–ҵBP”©-4Ł0ᨭ„EF³”’ÄdŒL-I Ć^l˜½“"”‡=ą-®† ^3 #Ģ,² ¹*bgt<”V1PŃpJUW$œPxTEŌ ‰¤T,œÖ$Œ% a`Y‚™ ri–dXlĄB' „ĆG/zÓß UĀÆhĄ ä‘į;Q¼[-™Fzq}{uū®ŽXmmÜY³nįąŪ޹®õ­ļ8a“R&óāś]óSÉLä[?üĄ}5uŽ Ą0w,‚嫯J[śJEŽMŻAZysy/ƒ¦aBņēN>{E×ī5szžtēģåŁøčm¶4՜¾¤{[,¢”DČxo$Ą;w¾¼-¤±”ł2ˆB!;lŲw(Žé "ēąńœ=ł¹A† Ųšč’Ņטæpa¦¦¦ņ¶ŽŽ¾ŽT2wwŅZWŒ$ŽŪ“iūÅß’žO.śÉ5×.žė_ļƙgž²»ŖŖĀø°žX¶m3Ąń]:įpˆ‘õšF$a åÕ ŒĒsói@]]]”C€ÆøāŠńdGø½śŸX’njpd•œŽ½Ņin-tól¤n}On}ūšwÓŻ‡Pų§w—o›3 øō’鎘7c€_ōPŻŃ8Z+kŃ:£ ż µČŲ~ō_X`£ŹŸ·"1@?Ō?QIĄ‰L0|Š` PX‚@™}Ką_;±ŗĢ’D«†‡…“`‚RžR"„,ĖI°ŠŚ÷ĘFx¾ņdž \ĶŗD¹W8ŠŗZŖWĶ\’ŲD,€Ü±`įj-‹YV#Ä €Ąįeœ¬"cˆm"ĶLŅ0IEĘXФ„-”0ģŠ[Õņ¦•³s²°"BtŁb¤6m;āĮ?Ü÷Ģ_šÄK÷#•Iµ ųŌŗ¢®jīxā&<±ń€÷œūIœøź4 ŒōāŠ_~=ƒ]€–Ž-hé،o|ü§ųō».ĒēÆś`^H°üĦŚT2ēץ’~’‚¶‰tqė”ĮnŃŖÆ’Ņq™ōWģmŸ‰…Kށ“žv^©®{¢„i»51 m} ļn¼wĄĘ/ØĆœ:]Cc©ž‰ŒĄž~³k'Nų=yYĖ›ܘ™Äu€ÖåŌ Ė©Aƒ=Šåń}h ķ×8éL;vmŸÖ:}ƙqSLc™Šć!4#-d«ĒJ!eīŁn`/n ‚&Š”ļ6W+Aä’$—,į IŠ,r…M®”ä ›µ”BiŪhKŲƊB‹8ģłöYūōĆ ō_`Aé?ųm(pPų’ģ}wœřöóVUOڜµŅ*g! A ‰ŒEcĀq6`° ¶Gģω³Ļąs:ē€M8ĆLD’$”³“Ņę&vwU}ōÄŻ™Ł%¬ē÷ĶvWUWwĻt×ó†ēMTü‰y’“÷1F¶ĻÕgŒœü}EP°Į9iĄā¤YŌ›#ūL’–ÜŠgZ\®„Ē?&žS’D"˜=ᬑœó:FLAQz/ »¶·|ż¶‡Īīhė+vęĄŌø Õ-—_sź¦+Ɲæ÷Žo\²ńKß¼l}oOP”–łL`@˜É^žX瘾‚zŶŗšõM•ÕZ“ÖNZ­µ1®”Ο²ļĶ-mõė*O^|ļāÉ·/Ųōą-§ķŻ (™¤»!ŃTĶxųæ@F¢’”ÕéĢ•'~ŁŹ’†H‰ĄøćĖ75Žńå’®Mż·ß’žo5>ųų9ū÷7-ņūó“ÖÜ¶ķŚŽŽ®k;:ŗ®<łĢīāā‚åćƌyö7æūåņ“Nš™"RTT˜C„€½˜0aBR£\āŖ?Ś8vŽV’*8ˆr€¹|]³• Ś;Äšķ£œ`ø +FĮц®ÆÜ‹?©Į”™0Ød݇…»ī…¹t5Z\^ģö`[EŖjŃļ-Zü/ŒC$(Ę^3•Ģ–¶$ Hfk:ī>Å”ń>.hŪ 8/_[iŠ=`ba~LA×Nī}{ų„ž‹E‘Ž0¶±h~O‹»ŖcgĮĮ^q¾–TĶ…üBŘŠ}km±Dč’Ą€ŒHĖh- „,›q"hƒY †P–&iH%AšK¦¤`d+®-Ī ”m›“¹q#ęŽI÷ńL™ˆŠĪŻŠfzļQ>ä?ó¹tĶĪŗb’øīüĻ`śøŁŲŗw=žžŅ½€éęąc§]°?zšĪ8ł”­» Ż}ķVQ‡ćē`ÅūKr:§!­Na~üȋžåKžó½¹”Ć*BGO*~Lń5c˜;w.„Äęm› eŗąęō†mB¢ø‚¬¤ńvX)­ƒ¦Tc‹lķ×ę†6é8–ć¹’Jk(b`²(ŁēĢf¤-Ę` F&cŚ€-IĘHrĪlĮ“āBKRLWJx Ɉ“–RiÅH3FšR 6ĶżgBŁaِÖE6¢ÉĶ.r(žōqēÜCZf`š1ƒ’Ä’ø$=¼vҼAmY"€’6Ęf©üģūOŸ,“?ųŁu/•—„?xooÅ’žõõy?żĮSē=ž÷UĶ÷ü⓯Ž_ć/++°“>©Y¦S†’‚(cł=xbŻÄ—ļ¬;'cƒdXx}Ś ·œ²÷;ɋ-ĘŲŅ,‘L)]Ü£2žB2Ų9¬Ą—¾tSóķ·ßųæ]~’ߦOZpoæ’ 8“SøRŖ¬§§’Ź÷×møņĢ3Ļė.,,\:zōčgżćæ6÷ĢYéE9†ĀŃĻ’ŽŖjŁŹfĀŃR ĄU]P9ńü}hśŌŻøūŃļćĒ“FaDŚ>Gś'ģ{@«įĀO6—VbךQ謨A$™üs F"Õa ‰?”%„‚ę±(eiĪ rsč’Q]›ūĖˆ˜ģwÕ1Ž °lb†Š±ƒ+PLŠ…84,I†OY°e\Ę “h]Wxj‡ēcv˜ę€+“ž÷cBT Sw%ˆP‹O“(9 €ŒkŅRsrIĶHY’ ’Pd3E6氉“%66ģ°§ŌNC”;^ō‘\¼“' øaĖ Ė:$łO×>ė†L»r#’é0wź|\|Ę5čńwįW’÷_Ņ†ĒķĮ­—}D„æ<ū 4“ķ4öM Ć*źšī–7ńŚŚ“ö Asöv’ ‰žå56„Ż—×ŲC‘’œ½ŻC{’ó"’97ŅżåfX8ņŸvl‚ā6“ÆĶ/ Åūq «6Ä@G/Öļóbg·ß…×”µ—c[““ēvÉģ>,»…n—×ʏSģ“ųÄi}Ø-µšÓgŖ¶Q„Ć*Ā›½E(įALņµ`”·sČÆĮ¶]Ūr.ł8U4Ū{2ėȚ€¹R⊻.ü -ŁŖąLWAi"‚EÉ?‘ML[Ä`s"‹H›Ä™Å9Y$Č‚,fĄ‚ĮlĘ µPŠsCr/$c¤DŌūŸ\śO€ XL“Ū`J™¶słie&ŖüŲ¶ å"Ķ£;ŁūŸ@ĀūDsö­ÄbĒ‚Žóž{”„-8ŽĄ89– H’“I†…b_™p»Šf1PژŅé#Ÿ¤­›‡ż÷ÆoXzŚ‚É휘ņś ūž?-ēwżčšīżõK§~łs÷}ģń’ßćLš””ą„Ń'ø“Ä ĘS (™ ×Zæ¹złŅ?¼9£įĮÕ'\&„Šœ6¶łEć[¶ƒHµõ>"ŅL;ÜYaT…ŁóܳxjAœi¶qmKĮ>’üą„’§ŽķD ¾ņ—]ōÉĖ£ä_Ķ>ięWo¾å†×÷»?·ó…@p¾ÖŚPJ•õõõ]³aƆkξč¢~Æ×»“¶¶ś¹ļ}ļ/ņ²ė¢?l§Är;€Œ…^ƾśØ×8nųĘ¢@@Čß õƒBg{$ņøAč"!Ū ķńA—Œł¤€å†®Ø‚=a,z×öaǧīĘŻ÷ߙ2 ƒÕpŽžōO؟’)Ś {½>l,ÆÄ–ŚqhŖ­FĄć…Hņ=YŅ’q°%3EøĖ‚~īQ«d„Ļv{/5%^pl Ģ Ó& É£XJ€bŠ ¦ mFŗ{·wTwCį…fŸ8Oi8u¦¢Gćź JĢ+§–©‘f±(©ś0¢5ƒa`€©•&Į4)hĘ,Å ” œ’€ąd+¦8ٱhʤMõ)ćNKß;yB;vA‡”—’ņŸĻ=JüyčÉ’PĒøļp‘’|ļQĪ䈔}TAbKج„}eģyājTV” j},Ą–ĄÆ—TąĢ)œ<.bĄ¶&7 ”1JĖ6ā¹÷›éŅBß½ŖOæW„Épś¤ ¦ ćÆĖ˰~Ÿ£č³vOŸ=· Æoń”'č<Æ+ m|įĀ.4vųٳ•‡ü'£Wś°¦¶†c‚Æ ć¼mHēxŽ]æ]yŻŁ†•ɽL€vdĆ’ĆeuĄ@ļC¶¶tH)0ĒūOŒ¤ćżwĀ’ dƒ‘Ķ9Yę͸¶×cĢbLŪ °1) $ēÜ68$ZrʔJ3Ī#Ҷ!·Ū’³"šAj˜¶fż2+Ręµ5#µ!ĘI¹9)ĶIĮCŹk0ɽLIŪ"Åš’OBģo ŃõIõžĒLŽ÷?Ń?ńæc/=Qi0rėu“]ģõ[81–j čéöR*>{ŽŲn%ó<ōÖ¤gŁ{įesš¦N½äśĖ~vŻĖKÖÖ.¾dnćĄ{—‹wŽ’gäh*D’Œ÷’Üüõ›®›»cėwŸ;õ¬—6^¼jwķ¼›OŻņä­§oŚ­5c\iʕ†ÖŒR0”-S*ClĘł`jīhh¤:’¦68Üło}×~ņś'µÖO<ūģóŽļ}ļž³.…Bēk­½Zko$¹¤©©é’_üāŽßżšKßśŁgsōćøą8įp¤“7€ŗ[A»>ŸŠˆŁĄŁ3p¦ņJŌb’RēŸéĆ[¢=hbWoköķĒ«ŽĄåU0GC¤ø ²¼ŚŃńx'dŒō§HBI9äŲ‰ŪŚvļÄś‹æŸ|ė:\Ē'p†!†ŅÄ>xtō7ĮV¢Õ0°Ē[€%Ų0b v˜ˆīŠ˜Ģ ÅmLҟ- 9 ąPFÄŅ |Jó–P[Ń}fæē3VŠ8·½±ņɦэHRĀv18ÜŻ¶©uWÕÄŽ&ļE‘ q.4 “Į]jkA©õbŻ’rO© I8ńs€”¤6m'ĆL!^6i &%1GՖāsV H ƹV†† ¤"Z‘p3­)­1ƒl.…°¹Ö$SŅdd3ĘmĪ”TL™zCć}śųł)×~ā8„wģ† ‡&é!ś7$CÉęTĶp°8ł'Ą.T•9” »·„ō-)(Ć×ÜĪ~ūųŻhźŲ—“?ó¤§č_Ö 8)ĶfX8„Ń ƒĒĪ}ÜA“4OOy¶ēEž“īQžĒͲq(ņŸķā{t(É ĮŹVøö”(“ }Ūž‡˜v)<žµkŽMō…86ķ÷ąŅ9ż(õ)z$NÄc«KaKĀi“‚p %kĻehœ3Ż•Ū}č 2ܼ°]ż¾V:$ł/ņ*Ō–ZŲŽœg©Tn¬óĀÖ`-ĘyŪPތ]{wŻ1 Jk“v3gb`×uō\óAØ|ō Ü{o·6·v(0RDIŹ’Qļ?l"²ŽXŒĆ↶q‹1²“ͳļ?نÉ9“`¤$—pӁ)•Ķ‘³Ļ Óų…Š †Ē®AĘßsUITŒ•īńg˜X€n»»™wm~³4šŌĖEõ-Å„<ģ-q›>Ÿˆ)Ę”āICE½’1AŒHS)Ž’!Ä’‰`ĢØ“Ź…pMäääĄēj£āœ)­5.æö”żN¦šĻĒV #žŸ}Ü®ķĶÅkVļéõ¹"‹Ī›Ń2°rmfXų?@Ńš’”ĶB Ķō?7ŒuņȖ¶į%žxĖS÷53yß/æūÜ)§?»iĢ%7?|ī·Lh^z÷„ļ,-õ©H:’ƒ£0č\3Č]ę!„V"" I!‰M«V¾_Žče(++Ė*ŖqÉ%ƹųćĻśµ’™ėÆæiܒ%/?hŪö$·Ū½„ˆśĒõTUUõažŁp¼ ąQŠCUp Ņ—Ģ· ¾`Ć^Š®-`-ĖPQø_¬ ā7>Æ 9ĆF©dp CŪ@]‰§ŒŖĄÕ'Õįņ †įė×”i÷~X] C@ĒuVÜN @Ą!·±Ļ’u™[¼ĀŃf)(‚”SI–®Ä¾WW£gźhŒQ_ś“~ ņŖ;ŃżĮN4ø\Ųę-ĄśŅ*l؃=#'£«¢¦ŪUżWˆ+Ą$—żcŽźlüzg* ؓJj :’€J±’‰Œ8A c»×…z Zkftž¾ddW‹Ö Ī˜m›ŠB~oAóښÅ-[+æźo÷Ü$->Īm‘īwŁ/ŌLżbŌÉ]— ķt¹„ Ɯre¤µØØCLŻß©ČH°čłGK‚1(Fˆ•$e˜Ń’€P ­ŃC’HkIN™žØ°MLE ©4SŹ)ˆ¶~æ[5ŠLaā÷KĖ4¶1sT'1 £?õ:Ž«1qį‰~¬ŽyX^Õ[sģļ7šn3Cź€¹EA@{OĮHfŸ§¬é…ŖĖcx'1Mˆ–žćż P”)3FŚÉ„Š—Įœ0}Ҥ'MŽg¼Óś}ĆÖ¬Ž9–ˆō7īŗjłų‰Ćż€ƒ¢D_S¬„EŃķbŠ%į\ó„pb¬bq“?׫v×UÜłō™·½±{Ĉėęl[KDZ0®‰ AŸ;¹iߢń«ßoŖ(_S_½čŃ÷'œ|bm×ćŖĆ%£”Ēä7ĘΉ@Z‚ĄÓœĒžBS’Nc\ Ăœ9Śń}N:SZ3–$ȘfŠ%Į“ƒ”ށ!&›Į9Ó! X–){ō™›°ŽŽžöŪoæém×QšhJšł¼–SšŖ«.ėŚ°aÓ«Ū·ļü$sĒŽWó›·5!ØŸ/Śæ{{JKK“ Ž—<Ž#ŽƒIȇ" Ąæ ,°%¢ wÖÜBųĮƒĻ‘ć‡ć–Ń5ų·½­xžł÷š§Öżh3žš 0Ė*!“’) pR`ņ$„Åģœū%ģ½ńc8÷s—cöŌ±8$qœZKVBŽ}?oo@hr;j’[Ė+°kŲx4…¾Šj˜_¼š lMīs®%MÓ)_x(µ”ó¤įóv?ēØž нoZ7VLīi,¾Ģ ēHqqCm÷•šĻÕĶč}ŁšZL“bж )ĮĄµtx¶– d°DjG€Ū’ZFß4™¢TL Ž 24˜&-„ŅĀĶ“­H‘V$ RR › ‹ ŠˆF؊”Eģ’ '/J>×Č:ˆŖŻ°;°vsv>“½aī<1k_­5ył>Üvå7ńĶOżO,{ĮHžz%¦Ž9›÷¬Å£ÆÜ—Ō7 łĻćøyO9ėI¾†…ģĪuØ<ÉžĒĶkģƒżĖŚ0ĶõøźŒ›1uŌ,¬X’Ŗ ‡£Ū߁P$0ØC¾¢©ū?ņŸÕj—įņ+Zą 8/ ’¶kŠä+`ƒKäkŠšövĒN:ŗŹBoÅ«T•ŲŲ֜ źn”qöōŽŚźC_ˆcX‰ӂxģķāx%€¹ćBøįĢŌwø°hZŪ›]xąµ2Ätā8Óšŗƃ.”½£#ģm(ҹ?ėż! }A3sҐ#Ž ÷Ÿ€`ņomk×ÖĪ®ĮŽ@ÅJ’ öž“Å m1‚Å·Ócd ®mĪ“4 HʄŠ(/Ū§n¹2Äf\®‰Ś0 +9iY8õ”śöå/unłć“•#xGĶpÆæ¼ŹPPÉ"ŽĄąŅœ[:¾Ų²¬øGÄ4ĶĮŽnøąsĻc4Ųė $Č’ ķl€;ź²7<†ŗńöóvÜüł ¶Ai &ī|bä]Aāā{N$€s#™ -µĪ9dõ7oĢ{ŝPJ‚1Ž®¾vüę±’‚Šņ9.ś—aĆĮߣjś!’’,ßŲ“sžT7'? p?ī¾ńÆ(šĮ–ŽŚ“æłD¬psbÓGLń?SßŲ&é#RÜ wŸ#(ŗ7ĀÜÅAć.†pśPõ*źŪ Ō·'Œa‹aT„ćyU ųŲIżpqW¢:ĻéGk/OńęŸ3Əuõ<°¢ å…Ÿ>» c«-lkrŽfe –}0–¶ģˆ„CčīŲ‡ÉÖŖ¼ČæiK“wgµŻG4÷?RX él©4Ā/l‘ xīæ1 ‚$b6$i²‰'ēž“IDgĢbB[‚kĖ0Čāœl. !Č&Ņŗß5„¢]ÜņyÉŹĘĪó"īvĆ.¼4XtĀģ=»~o §~Kx¬«»ØT„KŹøeYJ’™I«-É”ł€‚@TüĻ툒4éā©‚ó28>”Ģżģ”3vˆ{¦T|Ēū?`Ńū+ė 3j5P©]bˆXjś:br¶©„ręIĆŪŽ›]׌MŃ`w÷W+N°ŃælĒͼ;·ļįćgŽč tį•uOZ朓.ĒĀ™”¼Ø æyę?ó~«äLžÓĻ4ĒCO"#łźP«Ząņƒ”³Uķ@Ą5žj0湅«”ńÄźbÜø°w^Ņ„ ĆĖl¬Ųäƒ?ĢPQhcśČz½*‰ø€H”ąwł9žē¹ŹxDŌ–Zčģ?åś©“'żį/÷’éåɓ'Ę]^¤1ÆŗźĘіeĶ€‚O;¢@]ŅߋŚĒ G1>jiõ;AöSØkį).03Ÿc,FĆɟ»æżÓ³ųĮŽ5Xk†Š>ī„Šja»<Ģ‘Ii.7“qĪĆWU Ųć½T–ĀģjE_[#Zū;Q  śµX’źZT+ åJ”D>(x“ó;Š=­1˜ ˜Œ!ąņ Ē0Ših÷śŠVP‚öāįč.Ɓæ²a_lƀęZf¹—ÉQÉ( (kˆ0Ę””6—į *0Ķ [*Ķ c䟘jt›ĻWNź}”¤²·“1AŪ—×͵hI#Ķ k¤•žéŠŗ½Ät?q4s®š«§ųļÆlēń( €Ū©dŪ™g|“¤ČN-¾3 Œ'%M0!ø6•5( @0’R@ŗ]ʊD£Dw°ŪŚÕ¾‹M¬N.p߉'Ąlh„¶¢o°TüĻ·C^ä?i‹źŖĒąė7܃=t'Ā‘@@EI5¾|ķąq{ń×ē~‰ū7ē6œē|\ōoHņŸ§§<ہóńvˆčßɓaLĶ$4vģŏū*ĀŃõū;Wāæo~3ĘĪĆČźqhhߝåĄYž< D’25SÜFؼ¾ŽDĄæc7jŒ‡u5”Q’ec›ö»ńĆ'«1®ŚDW€ć tbÅfĒ#}ڤśB„źS×īõāÜ~¼øN¢ŪĻSČ?Œfჽ‡^d1šƒ:Ö`²\J«k‘­Ż!˜vö>öč€ē7īĮ \6J¤ĘŖ …šĖ;$ŚÉż‡1E€E…’bŽ‹™Ž÷ŸÅ½’Œk‹Ē¼’lĶHµ»?~²ß·ųÓ;ā܂>oŚ·“oö–‡6?·DŚhŖ©0śE1×.NČ­ō_²Ę\,ü?‰`°iÅBxOŒõÉõ6Ōwxū³Očķ zŠK½”3NmųŲ%³=>—õŪGsōÓ÷Wˆ'Ā’I;)¹Š’q-Ć Ćŗz ®"+v֝śäć÷MÖŻłēU3ē¾ŗ­ī<­AēLjXņł…ŽzyėØQzsźM®œrį5³öż>Óø†’ !“S2!“.µ’?ˆT @ŹČ¼óĪó-Zō‰īwŽYū#„TI(™õžŗ š3g~GAAĮk••å«gL›žī³ē7644O=õĀiõõõßą""’õ×ümYmĪ ĒEr¤|-陰(i{²ąf¤ŠīMó©@īb€õ;A»žŽ±e /q†)¹Ī’PĀēAщćqĘęķhhhCÆ“ᅐEŃ \ tˆy½ł\ŠŹ€ö•AśJaU!XT‰^Ÿn7Z].4 7… ū  ūø ū ź öŗ=Ųķrc‡·Ūž’Čƒ\`²i@‰xXMn­ØBŁlŒvŁčą{Œ1gīHˆrÓ1QG D_5,~ä$ʁ!źõ 5ˆŒ”C( ’J‘ Jjf‚⤕$EÄ“­™ŌÄ“‡"®”bhźķŃS†'‘Põ"įŲ~ģÖ¶”ÉVR:DĆld(ņŸ“æ”m/c8ćÄópŹ aŚ&¦Œž/^ż”U`ł{Ļćńe÷gšX–9gœ„üżKmœuÖGüĮ ÜvÉwįsā//ż-]ūćū-iaęøy(/ŖĀÖżkќ“/ŪŲł’’Œ-Ž0łĻtłlOīžR0•Xb…ü}(•{a{GBYµoID,BK€?ÄQßi ”ĖYĘ_~r?¶4ŗ±©!•Ģļļ2pźÄŹ 6īOŻW]lcń¬~<ū^z‚‡nöw”ø} jÕvPĪśī:ūĀč dÉū  ưĒt€uųĄ „ź‰ƒ~S”ē·J{OAGs’%Ł °ĮČf&1f1“,Ā3¹@˜»œ…¹ĮƂ#" fŗ ˜Ā`voį•Ó…ęĆ ’1q檜3µÆ­Ćö·omÓŠ—OXn7)/l#ķ\YZ3,žgšŠ š1‚iF £ā „g͸诫`Eó’cK#'ÜßY0‘ŽzĘIK„é¶ūóYūöt”—•[šŗK^z~ŻŌĒ^5É4홳Ēu ĪÅ>FŠ,JĶb"‚±4­¤ ŒsM,±<ćÄ£dœ@š¢c‘gš ˜Ņżoļ;ū†ĶY¾cä¼ĒÖNZø«£dbKö~óüu÷żæóŽ_SQŠœ<¦£õįw'Ķ"hÜrꞕ¤(Nź‰XÜĖ"8WŠŽ‰ŒsēX‚ „ĮĄ’y\ˆé¤(ÄīCTLPC%Ŗ Ų\ŚYĘ:aśŠ9bƒI÷\ĀŁēŅZsī|¾īŗļ*--|rŻŗĶŽP(< ÓZūLӜÖÓÓ{޶;>µté«_|ūķ5·÷ōō\Ŗµ.€’’’_,]śä«A­į‹‰öõÅсć"€ĒńƑJ˜čĶÕļµ<ƒź*7ža„qłŒqØQ\€Ņ[.Į·~õīŽ»«4ś€@uķ ’4Q† mEĖ tIlW d‘ {d?BķĶč Ń臻æn3·‚K:\Ō©9/ \¶į‚é*EÄēå.UR«øŅpCq O¢BAĪ;&[ŠÜņ- ĆįŠP[(FBčļHhÄÅēÉĢŪ¶a@Pū «»w—Ü££Ó*Ø żŚU 0(ĘÉUķļ^©łP Ä\œLæš LKł#4’õ„“Š ¢ēįXÅAŒ  !4H D4Ó¤„IŠ`L“‚ 2\$•LpĖVqe+n2²9# ¶fŅRė÷mW«ĘQ‰·4ł¢ųN<ž·Žqę;š¢ EžsōĀęĪ‹cž‰ĢĒ}aåćX½łuœ2m|žB|°c5v6lIbś›³·ūš‰žåKž—č_ī‘ÉR¦įrū‹ž@”·;łh­šų÷ j1²rŠ|„™ģkKŌMŸ5~>.œ{5FWO@0Ą{;ߥÓo?Ø/wļ’PäĄ=Ź‹ü§;ó=ŹelŪ@ø¤ žŽņÄ6[”„½#ōxŹ[ŠUŗŠ>tĪō””ŗŲyŚļėpŽ^—Īķ‡i/®s ,ę\ćōIA¬ÜęKŃ 8PhiĆŪµ%žwœ˜SŪCŠž€ŃåĶ!p(a{J`”Śzv‹„†Öķ”żƒ$'uŃր$Ęl"rD’8YęŸ¶˜€ÉYΉܓWyüÅׯ°Cd9xšŠ’9w^ݾģs\˜¦ĮČ.p.¦b9bŽ’xœµ8€XīLüoź„s‰PŒģ‚Q°mø ”Mål³£eż°{“b•ą)“{JĖ󱊱“³į(ā*„‰1hfJø  Q‰¦ u“$ `0ŅVT¶ PŒ4Ł’F0EPRē\I©™S@jHA\›diN‰(iĮfq¦Ą YZ“"Į”ŽØwö~€ó¦.L¾V®ĆaŌT;©É8Dä?óé7ęBJ;{ŪšĀŖĒÓǃpI!ņŸ×œpųȾ÷čp‘’”Ž;p߁øų”ėįsāKŠŌY?ØÅ¹s®¼³m,iˆpõ™·āœ“.‡Ņ ­=šŗ °`śbĢ3æ~śŪ‰4£Tō/‚ÕNY@f')ā›6š;ƒØÅZT„ŪŠWs"¬8ĻIØ(”č p„-ēBīj1š©E=˜Pca_§3¦šś–Ō7ւ©Ax ·¶|…^aõ øõ9fėõ™6Z»‚Cz„µĻ<²Ā Ēū?Öę6enķP`¤Į 4A1‚„f’ø¶ę§¼ŸÅH›Ä™É9YL)œÜ³ײ³ņó×kī«8b'—#\…Ć ‹NüŅU~Šēóé`A!³Ŗ«XHŗ¬ōŽ’¤Ņ”ՊŠk ^ ;Tŗ÷€`Šā÷|ėń¹–„ų÷æń³ī¼ėŅŠŠ|(Ę1ŃŌŽ…ēMß¶žż½#bC'‹’1FZå`āéŌņUŹ?ƒ ¢U Tō,bk²€-XyaøkĘš®ĒO߯)ā‘„ ń?ĪXZĶæœL›¬ õ' +Lą¢ā?żć•ķķsLÓ.cŒ…½^×¾ŠŠņ ,|ķ7æ¹{W¬łw~„ż®»¾ü,ś™“ÖZėĀBŸB?t_®Ęæc‡’ē_Öģ8Žܕ{”R‹ņģ³{3Ør ŸĻ÷XG§ž€™'Į…mM»mJ;Z!b‚Rd@‡2 ;uæ×% h·*ŻÜp¼žÉ}ĀpH|̤Z)C¦E²åšKh3Ć>Ą!óń?¢ ‡ę*µ]lŒżSĘbH‰ĪR,Q Õ¶-Ōæ1ņėŚbӀꃺyސŒ+Z —E]:6ҶNž;¶L¼Rb9pNIĄŌ¹ŁŃ(€DŪčqštśxK2 ™AZIff)„•6\$9ŅåҶ$×6ćĢbBی“Å,ŖooDSoÓĄ1 fĶpDrĄ^ōtķ³nHlrŲ9uŚ®9w8®ųŸ•ü5
    ¤ō@ÉMŁ,œyĀfϼż·A]GVĆ¼I !•—Ž{pެ+qĪI—£/؃_>õ-Üõ·Ļā›÷/¬ye…•øfĮmŃ Ažó0:eŲ”±oVņŸķ{7¤ń‡¦¾_­Įˆ¦Ī (Ų„ņ†‡Peļb°c€?’xfnjšąæŸŖBsĒØJĖ6`ÉŚ„^B±Wā‚ū±|Sz‚¾|%h”…6”¬į”&’aS¢¹3(Śžń`ö„ÉŠ³xl÷‰­z~³Š–żSR€“@,ŖśĻ˜ML[D°ˆ˜#žĒ™Éœš¦mNŚ28YB+,ésæūŻćį0±„¬ą@ L^«««;&T’āøą ”Vóż¤ĻWX‰<–Ćųżi »7ƒö<·‹š?88’ĖapÕYøŠŠ`zć^ ß¶=]ąń_RĄ@”&‘ĢŲÓŁpe¾Īޘ\pšŠABdī—lˆ\Y¤‡mĶYąDdźćȜįh Ž3°-••²ĶÅ ߚpƒ2.bŖ¹n^ó·¼%ŅR*Q‹×¶m0FŚźqūö~Pqʶ׫nÜŗ¬öėŪWŌ~m×k•×wķö#†‹2SŠ,i›}±Å¢#{i(FIĘ ĒHĮČŁĪ¹SāG4 A Z×DRsbL)fdŒYL'[ĢŁLÅ9YXµk­–:å>±ā"x¦NJlȓ“dڟ7ł?Oł‡%ś—ķœr÷Чįøā†®łG3\1’&p&šņūO$å÷;„øńÜÆ€3ėŸGg_+†WŒĘå§ RŁųó‹?¶†õ„–¼ū¤²1ŗf°@Y^ó:‚ä?ē9@Ry/ĖDؼcP“PÄFKWҊ€ķ{u½KąĶX­śŲD 2x Śåēxbu ~ūb^\WW’'ŅøįĢĀ /Æ?pÅBōcx÷Sp5æ60Ń8G„M‰¦Ī@N)öč(߁˜ų Jø*\ö/üÖ%;ĀFZ”fLi‚ 0[ƒ¢FXÄa#“qXLP„Y†ĮLf”„&®śJ.æŃõ€ŹN¼y~O·=®}Ÿ]ŁŻv+ Š—ž‹Ā4Mš4¹’0bÄŌ…™WVIęŌärŒ`\ŸuĮō¶żś†5O¼ņõ§®øö” ė߯q˵øģ–Oüöœßžōł©oæ¹uā•מ¾˜Ź|!3y–LįT’£ŽØ^ĢūO&ż{ß“OxõikŖGI}mL§MŗGB¬/ń_ē¹¹ŅÓF. €’’ĄÉXxųoVżóń%æ”R–9ĒåŻn·{‡¼•ˆāž0Ó4'īßæ’[wŽłwFšüßžüσʰōg›Ä €÷†šōQ„ć€ć8 “ԃŖMÜ̦}ŲsɆŖRž7ōõ`\ć^”÷6`Ųé÷ę€ķ†1ŲHƒˆīĖDÖćķŽ•(ek²³z½’„Ź&v|Ć[čŲ·mCåģķÆŒųŽ®7kžźŽ_ųćPÆėSfˆĢ ńzŒ››6•Ü»żÕźo™īIŽąŽĒ"`$½ģœ`1Šæ„F¤ O‹EŲ  ' €1”Ü\I1K0%ČfŽ(’ĶYčōŠĪÖAn;ļŌ‰`ÅECŅ”æŅ4Ȳ÷’’Įc8ä’øāÖīYœ_$DŒ=aÄ ˜=a> ŗtxōŚFÉ?7šéóæŽ‘UćŠŽŪŒ§W=øśĢ[Į™€ÖSGĪ‚ŪšĘĒu 78†S‹8„›DŽ1ƒę|(£7r.©įąß@ز¶w°£/¶ŃŌé‡ÖVēfT6ż/jPŸė‘Žzlovįw/ ĪSO‡Å'ł1¾ĘÄƕ!bēĻ99FŹM(Ž’ģī,å)‡@Ųtī™Ź!>[• ‡õš±ĮŹńŠ“ų”?‚Č+;į?‚&‡.*F°ŽŠz’µE““ņĻLĮČā&ƒ¶ Ī,ĮÉ–]1¼øöˆžÜĄW9¹ČUyęÜ®kDKk¤ø§KR‚$‡Ž‘žäBˆ{’«‹Gø]޹éĘźīÆzm[ł“¬®{cÅ–Ź‚·üĀ×.Ųśä«_öĪļ_±\KM<ōś<Ιܳ³µ¤»Ėo$Ū’„’„S½’)IźÄ8Ӏ²>”ˆ†¢¼²mäĪ”}ė›Ö„k—<ŒĮ™N&ž±e~ĶŅ­ÆŅļĖ!dE£@l­iZĒžśÉ=ŗQJYĘ…O?}Ī×ŗ»7ŸŽŪ»łāĪĪķg¾ńĘÓ³Ļ8ć”OWVVü1ÖZkwGGēēīøó;Ɲuօ§Ē³’>ēŸ!2uęĢ™sĢD×8†q×!¬œö²{3Øa\³9ī8ųY~œ=3_ZÉhŚŪ€ž‚jČįŰņŒĮpA[fśkź%ØP†üżĀp<õrˆ|ż£A €)h 11@ [ õŠr]Q0¬’‡S:wŲ–ę08€– å³ŗ‹?#m6Hžš˜n'¦ū•¤Šä6ƒü¬=«* 'žŻś‘ÅDKŚ6l!āicŒ‘VJBĒŹjҊi0EPqNq-’øÄI [kĖP‚)„8Iī"›ƒŁJ K¹øŠJ ¦µP«vo@]y \‰KÉ8 ęĶ‚ŁŠi įCŅ·ÜybÖ¾y7=®ųŸ[CäO¤s<ŠŠc¤č_ֆY®1':ūŚpŹ”³įubłĻĀmxpįÜ«1¦f‚?~÷ģ÷±BQ1SGĪB ܏†Ž=X|ņµ8sś…xśķ’ÅŹĶK1k¼³žŚŚšAü8.įĘŁ'^ŠcęAp;›7ᕵO¢'Š9Ä9åOžó‰8Ékģ4ä?ÖĒ?|?JźĒƒģŌeW(āx“‡UĄ ÷ƒö<qU“ŃY¼½źŲ.hK‚-‡žAuBēĪšćį·J±Æ#MØŚØ`](é\†@÷ĮWa -]”œ“µĒ‚=¾å Ž—/¬ĀJX¾²AŪCĻl‘ŹŌ ©e’¤“ Ąl0ŲDdČ"F Xdr®-ĢbYdq®,GĒdØ`žŁGōäe“ÆšŽŗāu]-¬)X«ze©iroō{—äż7cāQLŸ“štF,‘Ÿ"’$/Ō¤¾~˃óŽ[½{dl›×ē2O=cŅž/ܹxĆ„?„ń’+ē5lü`_ńĆ}mņć’xkĪć’xkĪió'oæėžkVE+dBB/ ÕūŸœpĻiā"­ ¤w“”īé(š2¹ŖgĆȲ@Č”‚Pl€[X¦œćLüņs Ž¢O<ż>Ĉ¾ŒĶičh€ä_}o0Ä[.€ńćĒžń„—žń‚ahE€ésO æüņÓ˽lՊw~ų™/~łŹśśżŸ¶,k¼RŖz͚÷™?’œ_·nղؘÅÅEinó„-8n8Fp0Õņl©M c1scģANūˆ ¢ī“§įŌ5;°«µĶcź4k`gūög "õAdŠ–•hC@”å'Śp ‘7AE¢dæ@¾rPG¢"@JæŲXN@\ĆŚ¶m ė{ŗæ½°Æö”†e€3¶tyw½>ākVČø–Ļ.Ÿż|ĶŌŽ‡*†‡Ū ž=kŹo ÷Ÿ°#üä¦ue FĻīyMDMĶ#i)͹-šø `ņœRÅA+ пʤ8#ŅŹŠ`š“e‚“bšn’L f([J"K2)4‘Ķ™²¤Š\HĪ-K†ÕŹ]ļѹS$Ÿ•(/‡{üX„w¦z™R=ōąbĢężĻ£o>ä?óqÓķ;.ś—Õū’!’ŹÖ0Ūõ `īÄ;l2:öąēO|7’5Ģ;3Ē&t_;÷āĻK~ō;wÖå "¼¾ń<µźAĢ;WžžiÜpÖqΉ—Į%ÜŠZcłśg•ÅĆš—žÕ„#ĄI؞ˆÓ¦œ‹ū^ś1¶ģ?Ć$Œü§1ėdģ{Šä? eXč±EõcżRB‰Ę6?†WBp ж%={Q=ā4ģc3Ńł“Žcœi\<» §ńŠeX»g Źnv²j"ėjZ€Ģī} ½=”œ„’4Ó°&6C‹r4T ^’Y[Ūµ¹®Y‚‘Ö, Θ$‚„“óo¢¹’ģ’³÷Žq’Tåž’ūœSÕŻ“s؜sbaKĪ ’“(1¢xŋׯ^½ś3\ŒWAP@¢ "9/q—lĪ“sźPįœßÕ3Ó=ÓÓ3³» (Ÿ×kvgŖNsŖŗŗź<Ļóy>®øJŹ€ž/„cYʑGŁĘµmĖĀh72§TŪļ‰õ@ī˜CŠ<«jZgkÓ®†¦xc^i(Vž£‚ Bé‹d+aC"‘ Ų “.>v“cżķĮÕcÖ¼¹kÜW®;ćåN[XæoOKäę_>9÷™Ē×ĻZłĀę)Ÿüā)Æ^|ŁŃ;.šŌ±č—½ŅŚŚóĘæ{nśŖ×·+(Čõ€¾Ü’LŃ|щOŁ'0Ņżż¼E ž÷ŚīŖŹ„c'ĻŻūĘĄa,) ~ö»\ŒĄ€L1ŽÓż£Ā@µ’lnśÕĘū¾_ pź©Ē=3p„p_uĒ[»öõŪėėī<śč“>QSS{-`Æ[·įĘ믒ÕŅ«?łłż¦č¤„}¼ń¾ą}Œ;7!S\śžĒhpų\¦æ¼ŽImģŲ×@kłdܒ0¾c!zĆ’=@^“–"0–‡±C0 Ąņ0žģ³lŒēn7ą¹„ö¾č]źł>ĀM>NÓÄjĘW«×J€w‚zÜ@Iǁ”˜ŠYµ›Ėę²ÅóĄ²lzšņ ė^’3ķÉY½Ēذ’’¦Ū‹Y§ś®œœ?¦»Į7 „%ģ71żØ†›6?=f’›PĖ{ZƧĻ„źĮJ‰A#Dc’ŸC/ @[–‘®AۈL,Wģ$  ·,`/ @He,”Œ«}cci#µ­lį+_ŗĘŅŅŅĘÕJ)ckKićź]MµzwÕ99=é2²`.Nm:äōŽÖų™÷Ī’£_•ńŸuŌĮ Ft’wżĖ6īŠ»GߣŹęÜ#?Ąż/ŽLO¼‹_=ō’˜5~!ó'/ĮR6Ūė6ņÖö•ųÉ"PBN9€7ü€µ;_cĆī79jyų„äóźę§Ł×¼ƒ¼HWŸó?”V±fē+ÜõÜočŽwpųģ¹ų˜ĻņéÓ®å?’ų±žt¼VC’™›¤ŁˆĘšr¢ÄŖźÉm̜v<ĶŽ¦.ʔę )NœÄĪg[ø§āXźĢxōæYÖę‰ z˜1Öį’Zξ֑/WĆĀe›ńė^¦»'k†ļˆŠŚ• µ3ƒĄĻš§5`ņ޽¼€XédŒJw™„G쁵¾Tßµ ˆž‹ž²ž@x¢/ņ/eɄTƑʸ–±¤ "’J¹Jϲ¤Ū^xņģń®BHEįä“f÷ģŗcCgƒ»;6Žn÷}\å;&Sō_YĀĢwŹ"„¬R2˜įFʾźu2Ł@ĢĖĻnsŌ svœsŃņ!0E Ēwvw%Ā8{ń×5ņ×?yōØź±%='œ“  ¤4ßżā5gl“¤XgH/»„IŅ’E0'm†¹č:Pų7I£¼+a[Omž<&į…䂟†ęC&t¶i Y²eĒ9 w}גžNs$ ~ŹŪR¦DĘ}|ä°źžŠ¼(ebM·L°ß"#į" Ż=}+ßīīžUŃ®®®ņ·n}õ¦Å‹ÆŪ¼yŪ Z›ā’ųg_żÉĻß8°miiißź€ž§õFųēĪzŽwü‹ć`§”lDDšČqņHśŹ/†CO…­o@ŻvXvhŽų[z»ŖÉP9 Ö=—¾}ęŅ`ūK÷ĆųŁ0eaęq^}µTĢJIČbb¬‡Ŗö:öuuĶ+@c1$÷¤,€Tø6FÄp,ßC$āHßCø ä²jĘĻ.gfe“CPhIņµA8>‰„KwC»7īe÷“Łkåā‡sšJ šU#-Ģ@-€w“ąx®Y¶Lķ…X²īń?č5ž„2»KĘ·’xü¢¶5M{s«źŽŖ>Ńw弦Ķų+fµo2€%…C¤ŲyŽmČYī%ÄĀDĢ ‡s¼DoĀ™Bh—”Y¾ (ž•,«#…‘Ś  "Ø `Ä@@”Ē—–’Ś3ÖZ |Œ6Z Oøq„ŅZ)©µ'µ J"a¹ĻmYMõ’J"Vß'.,‹ÜĆ”ū…•É CÜ00*ćŌb#>ö}Ńæa’`3ü£D’pÜ¢³(/¬bĆī7ٰū;ƒ6׬eKĶŚŒ‡å†óÉĻ)$įĘiéjčJkŸē×?Ź«[žå¤Åēņl2śéń_¤¬°Š {Žä¦Gæ&Ø'śā†ĒX0i §,gJå,6ģy3ćɏœZ·s@£÷žŻ˜ĒSkó‡ HöA”Æön~‘޶§ļśĘŠŲ„'ž½ĀyŚ1šńĖÜé0x9E$ņ+mżm³ļ·9)4Ó[öϤ–ż³T`üKćJ‘,ū'¤kYŅ‘–q•2ŽmKDz„'-|­1ž5yö»z‚¹c•w¼żĒŖöNSŌŻ„mß7Āƒ£’$(!LYфćŅ:ɈwļŸ"%ĖO¤’8Ž«&N-OjÖÆŁ[øms]å÷~vÉĖUcŠćõ5­łÜłņ¬^€ä(#Ée@hmŅ,źäTøõµł3~õĀ!ēĒ]+·w_y^¬nޘÖMW,ßüźÓšĄō+k…e =„dUļóvā&ĶA ×F™”ŅśįųŻvmzĒpK/;wļ/®’½cŒ =śč“—ŽtÓænŒIźW…śūO[‡ĒČɉ˜M«V>.÷IĒqķččJf6w#H·ś×²’ßwü+įŻHX·99Ģ‘e뇅 Œū}›“Ū0f¬~ü”wźŲ0aĪ`ĄųY€c Æ(č«y_ś±#m!ęNfśś]TutSm¢Õ©Ą å%Ÿ*)"”°H¹v©iƒŚ`ų‰#Ć6”OĻę„q%œRaiČ¢zøs8y|śxŚėŪXæq/Żś O' 3·§(Wę`ģZ)̻ʐżO­=#„%B³÷„ꓵ#¶y{ņŠ}_ĪɏEĮ¢l\“±ńmļy/nŠ±/ļüŠYķßĘ3KH)ŒļØd&„°£1™Ī!‘Źģeō:”ē!,ĖHߊ'Ŗė{ō'*€+FŠ;O IDAT1©,©>¦%ĀŅ ć )-­¾š”Ō¶'1Ā“R[¶®‘B!±|”]é9QżęīuņČiKÓ.au” ćp÷Õ¤lĶnˆŚųµQšŗ!KäsÄüū¢jügg¼{ʦ¾Ē”ŒĒĶż/ŽLźg”mhßų}+c!$iõ<„ įĘxäµ;˜;ńPO Ä›;ź …"$œhJ_^_Ÿ½ƒV—L`ęø…¼°į1H-Äq’l—/½įȍ’ŽM±Źz„gźœš„”¾5JanˆŠā"łboo܁hŚÉŒŹit® Įlšż«ĮqGę谄ĻXUK^ūk“5ķ&>ҚŽYązšŗ–oä4~æ¢oÜ0*bB-Ÿ6č^ó÷“›ÄŹŻ!“ĀB„ą#ń…0žŅWŃ_öOāJ GIR GJ\)…§”ńTHzžČ‘Ś*üīžä#·jA®ėQļŃ„m:ĒksŗķŅĄ’Mž{–0ÓĘ^eY‘Y™"Ń©[¤čß ’¢Ä_’Ī9kņņ#.IĮæ{qę²#gģ¬S”S\–ėéŠeąnö‹’I!ŒÖɜ| B­ķ',aNs}]EŃĻž=ōbKwɤś×#J'š»sŠ·7Ķ|nŪøćŸß6īøyc[V}ļŒWš=¶;MØY'×RJcÉĮ©R)0& ćØ8’pūŅaŪ–q3|—§OŸ’ØŖ®ųk}]ćy-gMŗ¢żoūćO&Ožšv x”Ph—ć8‡j «® HUŃ3fĢ{šęŸ ļ†@łŚĖvyļ0&  µ1YpŌžĪ„„ĘĶ„āŖą÷^TL€p–Cg²b’P\ Ūh”¾ś0D;G?ö¬‰Œyk•=Ż5“Ŗrpņ=t61Ą”XŁÄ@ ƒLõ>ś.Ā‹!–•Syźd>Q‘Ė–¢x“琦xJ5GM©ęؓń„{xį–'¹kż¶—”-.Ą āŪ!“#ū3²±B£d t dą‚Ó‘sZņŠøes® •Åz|€„',Ė2…ćŗļkŻ^|‚·ŽėjȽ± *Śb€ī–pI¬Ć>@ ŚŠŹV_§ššÓĮ#<_dz™ų ”‹Ń¶@j#²“4ąū¢U:8Ž/-K颍­…ń„š-£%ĀxĀÅ2ʤ„„«µ±”Ž1(³±v§™R6AŒ-Nsää.^DgS&į0jć8Œā€Q’qܑ ›¹ĆŃ:²<Ņ®FiürÜQķ>Å’Ń^«” xźēüķ{hźØĻÜ6CGq'Źž¦mLŖœĮŃóNćłu Łü”CĻ ±£–c|C§Å#ÆßĮ ėC)Åōźyx¾Ē®†-}ǜÄ'˜9n!on}ž²‚JŚkpü [Ģ?2ıŁóž‡‚†čø}ČŻ“±b¹ŪtFOS]šƒ„‚G«1†Ž†mئĢ,ŸJ¢čźõ˜[€ˆt'va·½A{K‰ƒ`ųtÅ\Ūb…\‡‚.éĮ›śī‹†ÅJ&ąŪ“qĆį“ö5 ©tDHæŻ‰Ø^˜?’”u“__[vŲ%·ž:żĒē­¼į„õŁĢ1™!ʟ J*£”0ž½ ž“(K¼Ōž†§żÄ÷žū›?’Üē®Yī8ĪøššśĖ–.żąQ³gĻśķM7]’Š!‡,2_§µµUĘb±Cr#‘Mi;ÓԚ ĄŖQMė=…w"”L$ūµl‡Ķ”Ÿņ“›ÜJžŲ÷…䥖yļćʆµ„öŸÓRü_šb&…"įļ½((eCė€:œū‹Ŗ2ņ}Ÿ²DœĀh7”AQū %‡B¶’€™P!Éæī0¾qł|žSĄ'÷ĒųˆMäiœ|ż'łæ’ļ¾ć73gūfJ›źˆ$b(å’]’Š”+!'הĪPūSūI) Øušd÷}9 @…ōœŪjÖ²0Æu²ż·1Ų-[‹ĪØYS¼tĻ«eæ6ZT䕹wXäėūiyeBż‰P²|£L–ūó<„ĘOMD󽓹Ś^v|æÆd`꾐mi‰ÖŅŚ O)ĖW¶ö•-<%‚ˆˆTøJį()\!pĶó[Wįśi—S„Cä,˜Ļ~’Ł¢’#ŽŠļ‡ń?āh÷;'ś7zVA¶‡é*KØw4×¹’ĻĢl†Qõżżˆ4ć„÷Ę}/ž×w¹ųŲĻņ‘ćæĄ“1s)/0’W6™YćŃļäæļś<æzųæčŽupń1Ÿćæ>ņ.>ę³äóę¶ēˆ»+`ÖųC˜?i)žļńŻKǵż‚ļ_v+ó&6p6ió2ś?B&Dę~‡1ž‡a”éžø?2tnyÜńŲÓŲMw,ż)ķkŸŽĘ­$¶ŻĒŌ¶»˜o­”*ԁų7‰©Ŗ(ÓĢZ&4ž‘ī­ŃÖ\;*c}(hchl‹ŃŠU¦0†;£ī]_½z”<āEcm?³Ż÷¢6’¤ń’‰^῀öļe’Œ+•H ,ū§„q”ž­LĄ°µļŲӇd+»ą9ŠóŪ9õ°æsĶ?āŅćo'7ÜĻč9|ö+T—Ōsź”ē“§žŽ‚œ žZUÜĄ'Oż×\š#Ī]ń¶ ī÷‰{8gєä÷³*¦UoēģĆ’BI~ē¬xńåūŅępĀ¢§™;qcĘłEЧ”x®)Švz¹Žc”öŽÓļ<ō,aŖ+'äēEŠŽHFŽ3FĄūé…”1ęĮ{ŽūŸłĆ’·ŽŲUŌkYåå…żŸßņ‰Ē'OÆnyüįÕ³^xzćŌ³.X¶öü¬Ų;pn*ȯךdōpéæTį99°,`»ZŠĘ„Ī#¦Ō6XÉRČ‘„wķ©«V½xõŸzś¼ŻD]«ąŗ‡–]įź€E9\ ĮTH5@įr›jˆ2©øµ“ QŪ¶ŅŹ\čCg“~õ«ŸūT$ސH8S׬Y÷ƒ#<õŁéÓéņĖÆœßŁŁ•ü$‚glk[»<ōŠ#¾ęūžTĄ²pį£ĆĻ:sēžK=`¦OńEĄ‰Ą‚l‰)ŒŠŽĄjĖb°xx h%ųģ]‚e»Ļ°-ßĒ@¼“i[ŽDt4#­ ¦ķļüZėŠQIŠRłų æ£)ų}ūź`{Iņ5“Ź8T—֚B×” ³°ē"œ"fø’€Å!ĢhY¾ƒņ£ˆ+rō¼2~hY ~S(…Z:‹cļų Kn{‚;ū$tާ¹¬Šh¤/¢€l,€ņ†`¤Œ“•ą'\c‡ķž5®¤Ūh@逄ćŪ²„XJ 9%‰ū»sƋwZgm~|übķØ½Ē‡ņ½æL9¬įA°‚ˆ’Š› %Fk”ń|ŁĖ°„0:µ*€Įh° æ"€NŅ’{ßå©,‰!,·“”Fj#µ–Jų¶žg#%ŚSZø„ :įƒeŗb]zõ¾·å²IiJ”IqkjqėR¢C£4,S7¾Æų?°ļwĘųķgōN’ƍ;pßĮ4ž÷÷3ŚR³Žė’üu.9į*Ž™:ĒĢ?€/ßtq7Ę\:óX„¬|ū <Ļaƞ7Łøw5GĪ=…3–]ĀsNĮó]}ć.¤œÄ'hģØaõö—˜Z=‡ES§0wˆZņٌ’įNć@Œ¹ŽNFjŗ'ī"÷T"sVÖɔ€¼å…9Ȕ°1†ÖÖFh}’œH ˦+œK½WI§Ÿs'šĻKųŒQ äõ¼M¬łmŗWd/īxŌ·ÅšFAłŠłq¼Y5 Q ķƒ‚håŒAĻ æ±Ūğ٦“ĀIź?Z¤ ’Ié ‹”žRĀ•6ŽRøRGZ2ųW)ķbO)éa _*|_ 5§ĖNųAĎ³½nŸžĄ’±bĪJ>ĆÆ8’Čū)Éoc|ł>¢‰\īxöʖÖņū«?F{O1›öĶęŖ³Į± žćĖ’÷3ŚŗKųüæfś˜müäĻ_EĆuž{š&ņ××Īą3§ßČcožĘĻü2¶rłöG¾Ć÷īŗŽ{Ē©T^En¼‘¼XĢ„½(Ź÷0įdōŸ@?ię”cO0Éš‡¤}•ļ$2³‘,¹¹!ÆfOkį—>qˉ3ēŽmøąŅ[N=cQŻÜE;ųĖ¾ĘH!µR›@;و!Jäō7¢ōŸŃ(©ŒL²rĆ^tO›=łµ=cJ—ŒÆiµ¤4~Jž¾”Ę\ž+O7õä¾¾«āčæ®›8įĀÅ{v§ūm)MjnŸüGɁŒĖžD€JŽ“ŠaŅu#VH÷5IĶóĢƒe®½öó{N;ķÄ_vŁē>µ{÷¾+Œ1ß÷+öķ«½źž{žrÕ}÷=ܚ››ūF8Ŗó怳ĄiĄ >öׁ‡?8b@‚~GĄæß§sq°Ņ:šQŹ÷wڇö(MqTL€ī6čn‡±Óū·W¬€ż”ūgBA.C®Öä¹”x™-Ņß«`{×|퓺¾LÕš\„ŅX_]ĪÕU…|V¼3l›4äå÷¹³ųŌüI,¼ś·ÜļdoµG»U… 6@¦ćņiHj LČŌԲѾF*‰š<rWk/<Ć8ւ^£ÜBh/l¤—@X@õüĘg¶?;é³FĖ2ć$YŅtV&nšŗ“åož¬w„FKcRiū}ó—mĮĄŠĀ²ŒŹÅH[ }Oeü`.ŚC2@(eŒNV\#Œm”«}#”šŚ’–ö<ŪC m\”„Ҿv„2J*cIåæµw+Ó+ĘSšb‘Č]r(]?ƒN ŽöĢCļāŲŃŚ/ļ”čßhę<¢ö©m’ ’Gc”ī·ń?‚IŒźsvŌoā{śēÄāųć›7?’ó_žņŽ;~ń‹/Ŗ©©ūļ)ZėŅīīīSŗ»Ó·m{˵×~å+Į_Ż ©ž†m@ЁņļŒą˜nģÆQŅķ/¾ģž`ۜxĢ1„ęĻu°ų`%š]`&PF2Ųzsż·Ćpk—ŌŪöĀŽ•{³W·‘ˆ!„Ń·eH“ŌB~ ŲÉ×Hł„`[K ä• ©P;ųųņń`ļOńµrĀ ać“s u“#{ÅžB½”žd@ϐ½¤Ć ~ z.¢Ä"rŻü¼ŗĻæĘ*ŽYÄņŪæĘwŻVīÜLem-9ž‹ō}Ä@'€Lq×ö$WVRa”Īīpė=NåT˜‚Ŗ®G£}QÕšźÄ„Ęó\¤“—ē‘—Æp¾ū— /S“[œųæéG4|xāŅ–æX–Šxń®PNĖÖ¼:i {)ćh- ^’kʐją+šR^"J‰~&ŸF§Rź,aB!”…šĀŲĀ22„¶„Š–ŌŚ’čPHx"$\aײŒ'„rCJ$¤Š.J;śŁM«Ń&-N Ā!r–|9³Fč3]Ķóņ"å’(Ńæ¬‘åGč3ōš¾ā’‡8›!mćpĘ–ĻŠŪė6ņä[šŲ›÷¦ŃŖURÕ#‘d¤"īĘxä;yzķ_°­0g/æ €ū_¾¹Ļų²’R(,esń1Ÿē¬e—‘.Čr¾™Ļgšžƒgü÷ĀHŸī‰»šr³”²|­©o锾5Š?„4¾6šęÖfön_EūĘūŪ|‡ńs#;Øu`‰pu’°š© Lr_cJ󝄷ßBbļstu²›=1—= Żūeü›ĀXłWļ>QÕĶ-&^8˜P˜X¹[»;Ū5c$:Š—>éŌOHć aś¢R¤­zˆo½Lß~Āé ośÓ§_üåmŸüū䩕­7’śÉeēžō?gŻüė'–nŚXS u:}æÖß{+Ń÷ėHī. X²ß õ‘„oļ8{Įöǻ┢oüåø+ĻüŻé—ŽżęŒ)žīKh-ÄӛĒ.VŅx'ĶŖßg¤ģ³Öm™Ngé}bH52ń¾Ń ;·Ņ=ivJ½­!SU“ųō§Æh\·nå/wļ^ōi§š‘ŖŖŠ›srĀ«„½/m+µ»²²üś[o½é×]÷õŒj%%%}sČŖčńķoæēƒŅūĆÉć.~zyE<õLŸ–’8Ü~ū~Ķ©ø’€~p'ŠLą¦Iš~ZĄš²¤ÜRŒTĀs“ŌĄŒ%ÅæµJŖąķ—”½1Ų_>!`WĮ¦WæüĢōæė¶Ć‹÷ ?®’–6ŲŚĒźr2ę£, 8P(_½„ßę…96S_ļęLbĀķßä}Ÿ6¼Ķš+Ę#Ć÷'Y¶,„1¾D ÅČTŠąj_ŪRIDÅ“=›»źŠžīĘķÓzšņÆiŁT¶»dfó6[cDO "@åĀÖ?÷ŌF^ÆžßŁæJpō, ·#”æ{Mńł‰Nū<Ą+—ø,ń”Jc‹Y텐&5%#É0Śi0R,č)!“ń}ÕĖP!”„Aø®O صo#,)¼„‘B -,Wų(éjKJKūŹÓ³l™Ąå“ō“čÕ{ߖ‡Mœ—:Ž]]ExśTŪ‚ä;iüīūcüæÆųŸõš¬*ā~ŠYY¹C;šiģlŲļI‡±tʱ¬ŪõZÖANZt.%łå¬ŻõjP~p×yĮ¤åœ»āćģnÜBYA÷¾Éęš5ūåéo8:ŃæŃ8pŒŅōLÜCīŽ Ų=Ł}ģŻ1—hÜ£ø LI~hČ}š[›”µ!֐››ĒĀĀtŽxöXZM -N>ށ½ŅC>DÜB‰½ˆĪķ8ńn†VF8p8ž¦¹=N41œY‘ŗ¬wz=Œ®zŪAQъéƒī'ŻŅcbnö“Ō-A`üƒoĄį !\”„#¤p”2ްdŸš_R iü O…„+~("\Ā“¾ćf%ahŻæ¬Š99“u—PZŠŚ?’/+l””­*ķųŚ–±”¶ąx!~ūŲ§øę‚srųĆS—õµ}}ĖRŗćł1ēeīyį"M]Ćė[Ҋń¤ĻĶmPĘ Ēė[Źz¾cĀ¢øØņÄžy¦\sś/·ĮnL@ćõÅ­%æżåSsĘN(ėüŠå+vĢ?dBĄĀC'užō7W¼ŗww˚oķO‡oŽX[żūß<µ¬µ„+ņåÆž±”WŲH§ )RŒć>ńĄą÷Ōl€Ž¾¾ęK/-ßXsć ‹>°„”dŽ·[>ļ‡OÖ=¾ø{wAÄė®iĻŪŠ•3įšÉ ĻN,é‰e2””ƒ”0L¦\¤ ™A{—ŲjĄ1I«_™‘Sg>ó©o,yąžæĖó¼Ā‚‚¼5S¦Lxö{ßūś#dz"MČæ¼¼ŌšĮ?½jāęĀa 1³jÕ[¶å)=É” Ą˜!>Śahq®€ŒÖ rą·GÉY7B[҇rĶ5 Œ'Ÿ ßżī~;zQ \œ| ŲL #ø³ŽóŽ—w+ Ą×ĕIŃĢĢč“|V‰ “Ÿčž iO ؚšā}O Ń»#tŽĒäs\#Ūoü‡"'ŽyI-€¤@7LI@H×šŌ——ó£¤ńߋi㩼ķ®¾č;ülēf6U扦!ōP4žT-€4‡Ą(Ėŗ l‰·p÷÷¬š:S{rjŪꊛ¤Ÿ(ŸŽ“˲lķbžGIi“#Æ8ډ‡Ą I]-łE› /ŒwYē#r”m¶ź˜é\’ōń<Ś7~²– ą+ĄÅų*ŠPJhß7’Æ©€ …č°:ᢄ X£µŅį{Ę”ėiPŹ3ž-„£•VŅ)}aYŚ(’ĶŻ›ōŲāJ9¦°"õZå,˜‹×Ԍīe^Ė(¾µ£2žāø#6s‡£fdx¤]Ņųåø£źūE’²6±3dšĘŃ8CļĻęĮē×?ŹŃó?ĄŅ™ĒįśÆŗ†öš} r‹9eńłhćóąŹ[GĢf(/¬¦¬ ’Ŗāq¼¾õ¹QDč3ŸĻhœ!£$éE6ҧgānrėĒjĖÅģ…6†ÖĪ8]=eEņs²W0ĘŠÓÓMOO7°!¹‘*ņ !R©Ą±Ź‰R@‡—CTØŅļØ`į2ŻŲ^'ƑP¢Ó½7Yśq’Ģń‘ĆӆöĪ=‰ż^@śÕķx“š’!Ę?@Ołt“eėk¢w­ńkŅØ’H©xDż-å+0®RĀJ8R G*™P–q”ĀQŹ8¶’®"é0Źö„m“/5ŹKŒ” 9"ä„b$Üō{-į†‰Ųż. ½Ķ°-—Ö®RānÅ×·yiƑ1ēeī}ńBN^˟_>oȱ|·'ć Lo²²ņ1‡rĪR)UAÕidŠŃ*ś—é5 …ä×?}|¾ēzrÚ½•Ÿ’膩³ēÆæč²[N:żz L˜TkiīĪ=÷CĖ×!ōżZyH{kOų{?¹äõó3€Jk[i†} aĄįļæKoŪqńāķæŗóŁS’žö„ł[Kfnm*ž …ыʵ¼rć‡_yHkHÉķ—JŲČ …Į RR”T&S*@¼¾c3Ģ×#5[|`śŽé–~šÆO”Ž{÷#?ń}æ ½½óčÕ«7}ꙗ­¼¼ōļG³āŽŪn¹qŠõģÅāŋœĀ::ąœŗ‡hĶŠ4ōiż«`4,ī¦Žu\t¬\ģ<łdøõÖĄ!šč£p÷ݐŸs/öĖ€?×Ļ|,=ļŠ÷Cąō5ŻāˆvB¬+`X” ģŸ“|Ö7ķ %Õ«­~šńMū§ ÷ß/½eZŗaš‰ģ' E^s(_*ŹįÜŃĻīĮü©T’ć\qÕÆ¹1Ā·Bųe•$:2±ö·, Æ]#± .öŒ[¼ūsµoMü¶ÖūJf6ļtu2 Ā€ąŠS—SŽø©äCN—u}Ea‰»Tžī‘@źKCjat3 ĄW |”Į“(+MPa|£”ŸOZĀ„#ų‰øÆ,KįśFY҉+µ”¶šCZø  §”®ŃJ[;>Ā’F+÷©oˆ –œ("V’[N*r—-”ē©ē0:…Š›-ś?āżčŒ’”ĒĶ“ļ}Ńæ¬Ń’ƒhü7īĄ}Ycõļ¢ńŸŽwöĻH]±v~öą7łÄ)×pĜS8bĪ)DŻÜ’ŅļxyÓ}=ž±ä#DB¹<æžQźŪ‰ggģą™u”ŗdGĶ Ŗ‘^vüÕĢ›ø„‡^ū-] 札ßSü®azCtL-~8NNż˜ĮķĄõ5õ­Q¶¢¤ <¬# Ę¢±(ŃXčŃ*„؎ä`…óvZåć©<|™‹'sp‰€”x&xņž ź•[øw]':^éw£Ü6D¢hGė~ŚĮĪē ¾1ttOŽž< IDAT;“w%Šū]-ĄąNiBWu ßōB¢° 7o°ąeōń-ŚŻŻ”‘‰&Iż‰/„ń„”.WHéKøB‰„T8Ź6Ž„pBB9")ü§T`üc_)髐Ń6B%P^{ĖHēk)’ü6Ū‡ĪÓlļ)¦ 7½{an'-]eaų♿äĮ•ēpŹ”sĮ‘÷ń§ē>Ü×ö™µĒóßż3Ēm!7å­ķ‡ 9–ÓYēJÆ…Æ{WžļE‚Ņ’±§e:F“żOł¢JF@YE~ģŖÆ}`ż”ŁÕŻO<üVÕ=\9ć;_»÷˜ßżā©¶s.Z¾éü±ēoüų3Õc‹bł…¹®R?õųŚ™ŗg#Šž ‘b@gš XĀņ¦–Ā˜Ė–nŽöŃ„›¶J‰^SWYøÆ=7w~UG넲X”B÷qüX"=ZÆS"ł©"©)ŪdŅśĖ”ldYŹĻ`”²~SæśŁm'&““Łę8n…ļūÅZ›HccĖŁÜ÷׳}xźŽ Ęß{ÕUWžłÓŸ¾"™/48½ //׊mHsdųZWUUżKۘ#uHąą/}6n„Å‹Ąģٰ`AĀÅCüąqøJŸßOΔޠš€ĆūN€Qį@YvķjjBÉŌżEs U€TŃß·}/Lš8Ś›Ą;ˆ!¦6“‰+^A؟ ,€Ė¦²¢²€«ތĪ9†Ł+7pĘ]/ńēœ0 Ė¢­¤"óŚK*LƒČĖ$ć9  ’Ŗż€GnYWūō7\-<¤”Āą¹ĖÖ`”ēytÖW7m.½Ä‰ŖÓAō­`…0Q`Dn{mä[ ”ڊ)±VĪé|»—ąV’`yZ»®l)…‘ŚRō9𶒐¢OŠ'Hš@©$  w½e×ƀE„ŸˆZåł¶ĀFH<”¶µ’©|£PJʘŪe^Ųö–8iö²Ō»G™?‡ŲŚõɓĢtßyć’}ŃæQģĪfü7Q=mGa”¦ķ„ń?ŖI …“—Ńļ`gżęįļ»”ßėŪöņƒ{¾Ä܉‡1oŅ s‹©oļ/ėU]2ž£ęJ܉ņČw;ēŌ¾+‹Ę±böI$Üæņ'œxȹ,™~ «¶æ@KWĆØ®óˆO(kw#0žS(mE‡\r÷Gčį„„ėSß%R”ä‡É‹Ųūu^¾ļ,žnR½čIź;`8®Ą?JuĄó = :ŗ0üĮXoFŗ(»FĆ; ߎ+›2xūĪVć>·ÓGc2R’…‡®ĀE WHįHIB įH%JŠ„“…#-ćŚa‘°-ĖUv暟KO)įĖčR‡ć;÷4®·lękH”Yæ{ha°š–q,œ¼¶ļļĀÜNƗ%`īæšfßÄ·žųßtF ¹ā¤[yųÕ3鎔›W6ާ->øōÖļšOĢZH3Ö¶#¦¤H)Üp$X’)sŲĀ ę+eM"YO‰HÖŌ”Ff42ŒRʉ»ņS_8qSÕŲā„”pņ™‡4œrę¢śÕÆķ*¼ćw/̼ńg_~Ē-Ļ-:õŒÅ›/æņų---¹cʖ“C ›@U’D’VŅż—ƒ#ż–%ū ģĮlR˜ėŸ]ŗ0l{nYnu­QlKRœ¦07t`©-ļA8ž¦½+AWŌ9ąÅ•Ī‹ćά‡š; BŠS9#ŅA&ęŅs×[¾6";õ_ WH\!Œ+®T2AļļHi\%q”"!„š”2ž°”+ĆĘ–ķYaćK„¶l|˶LQėŖŗę°“"”ń†œ9n “*wS˜ŪÉœ÷S^ݼœŻ“†<µ'WŸÄÕē^Ϲ+`ÕöCłų)·pü°žhlåņ¹ŽĄ}/]@}[5·?})ē®x€žųG~óČgˆ;V¾½‚Ó{Œ»žæxČqܞćõ“ÄBy" ©„eć{Ś1ŹwLEń„32“zļH%śĢ[””±©3ō¹Ko>²±”#ß¶•ś¹‹·|åæĪz`éņémK–Īxe÷ŽĘ5·žß³3žrļkó¼÷µł+ŽšµżÅgߞqķwĻ{ čSžĻģ_Tšū@ e:!ė/ė¦Ńܓ[1ąp”4^Dł±HȋęŲ^ONČę†½č¼1­;žßékūU¶X2݈Ņ#„‰ļgV³a›żµ°-+lą7ĖĘ¢w‡ ä×KŁŸ5kŹÅÅ9ś®»nxĢK÷ŽūhŃų˳vļŽsA"įL3ĘŲxé„—>0~ü¼šŖŖŹ{>üįóīžńw泏żĘ.¦OŸžrõ‡ćIæ70œ@Ӏ`#=ų`` |šƒšżļƍ7BN}4¬X,NV­‚‡:Øó ß$Ģ>Cąč X’’39R ~Eš½Q)?½ŠÉŸ^Mį’żŸÄ0i£Å˜©˜œ|tW”·J Fv÷÷*ż;Ų -µĮ¾ü’t@W $¢PZ »ÖrP±³ILXōäŚ8‘]{Y}FČp]Ä'įs!‹Įīł xž5ųĻA<¾œwßUå°e\y-xŗŗįŅsą«WĒųaųų‡ąö½“īż äēf “ūŪWpśU榾>ŸĪHNåXb™Tü„Āø>"5³?‚€©,)­`_Ō%œk›Śå3:÷”\ī%ģćIyÆØ’FŃøčĒ,h{ z©0ČņiŻ»ŠĘDÆŪś\Õ/µ'g5n/øŗ|jō 2$ŠÉ(~Æ€åųĘOyUYˆT€p…A!DĄ@„Oąq÷„0ƒŃi #%ĘՁ  p}c,é+)„gŒ!m-Ÿ¢¼RVmiXćd†tšĒ“ź9,œ¼œ¶īfžZūĄØśV=C¦AGOkڱ½Ę’ģq‹X6óŗā,"”\Vmīų€Ü²wPō/k“”:äŠ=u'9µcu Y‚}\OÓŌ£„#N~ŽMQ~ˆ°żū{§a ōÄ]:{¢‰aŠ’č|’^ÄJ&ā‡g]FŲąūm‰$õ_d žP’%ސĀ–p”%JĒRʱB*!„LH£lķŖq•m»ŹĀ³¾ ßFhBZ‡”ŌB #C1W:M;LxܜLs3įmīžĘ‡X½}1ß»ėŗžł&rEčļł|¦Tļä?Īū)–ņhhÆāæ’!ķ=ŜuųC„ķ·=y9Żń|~’ÄĒøäų;øė¹‹ūŌžŸ]w',zšW7/ņvī[ķ ATXtYāvžšmŠ‹ēœ9OJ{É%²7ō9ś’ęÖß<;UŁRė¬\÷Ö®ā‡ī}sö”˧5ŸpŚü>Æž¤©•ŃļüčāÕm-=ė’pó3S{hÕģŁóĘ՞u޲ߤD’#ū¢’©wƔ¢/Ķ^„TH]½†ļOW2’ La(_k_É –Ų!“ė)üd*€oPžōm©„Q–o,OŲž"¤„ŌB£„ļeIcI„óŸÜ“Ś:{įČžŽ‡ÉY¼˜žW^üžÅ·sTĘ’Ø;Å<²–Ćm=7åpŽ…,{ŽQŃæ¬;³’8nÖęĆ|F£1žŠóŹ8łŠóń|WŽ–õŲ‘M»ßŲ«a3·>łS?Žė<[\ĮyG|€æ¾q; 7Żū¬„äÜƃżĒĶ?%ƒēĀ©‡\ÄĻ’z-µ½śzdŽ—Ł#3VR_ƒWŠENŻ‚\¦‘ACgŌ”3ź )ņsBäēX¤©æ‡KxtĒ\ŗb.Z$CŻöq§6 KŖŽŻ~Į‘(ĪPņļõ½Śy«V#¤1-@/¾xé!p…ĄEŹź? ”d ś/kŪʱ,įŲŹr-…gYøvČx„”ÆBĀ×J›KłĀ¶Œv¶„§¢Ū×{C8žņŹŁÜśäH”iļI×T’öķßŌ^kÉī»†Ÿ’åKAīg: šńŠ+gńŠ+g„µæėł‹EśmåŅ-äķ½§@ēžWBŅ ё“+¢Ņr=ƒ«ĒUMū`z¦€T±?Kɾŗ÷\0“µō„Ļ<ļŠ§œ±°į”³ŌÆk_ł¶Ķõ…'Ÿ¶ ¾wµ®”0Ę@qižū察¹ń‹_żąĘh40 “Ž!B“DRˆ0Hūģ…RRõ9ĘõÄļżųĆ·ņĪÓĪ~~Ēų#Ž›¾ļ…;.{ōްm<©„1ҘØg‹ķ-Ey»š‹ņŸŻX“<¤ĘB¦ śõÉH‰ć÷¶“#7Ü}PdJ HĒ@ĆĶĘ¢wŒŌeęųńcÜqćŖ°†œĆŻwßö&˜7žśēǾ{Żw’ūƒ»wļ;/‹/TO,vü† oælŁ1łłł¹|łĶ÷üł÷Ņ:xÓ@\xį?SĄyæ‘ķ  rī—dė '{ ®¼¾õ­ ź’ćĆ„—‰'ĀüGŠę £ų,AJFA0ņł6ėōWOū€[ĻGćé7ž”æ¢Ā"ąą»ÉćV”W\žÜ_@bg±ĖäįH}_8ą[uo†öecя®a[,AV5¦™ĖąäĮĹPæ#śK…öæ¦ ½4ļ üīŒU:įŠS`ÅŁé?Ł“Ł×ˆnl”CHŚT˜Īpnn:℟s(2ąÉŅÓ’_(<ų©ć¹ˆs§ń1))Ģ>ƒ+߀„Ÿø8 ż§RųŪ:ą•·ą² ū`Ž,[;öō·łÄ‡Ą¶”Øęςڬ…JÓa)ÄĪgy“Imõ”µuXś'@&f€ŅéŪz—ä*ŁVśÉ’+5Fkϓز«ģfϱŽ"ø5µöž.Õrłō“¶_S1£aCØ×įīõætŠ7Z…¼>µ XGh¦HÓ_[K1ĻĒ„¼¶X©Ū|ßKŪÖWļÖõMÆó_ZĀŲ!“+‚ql#Œ°|cIįY¶Ö–D[!į [xĀ2®Tҵ”åX ĒJ*+ˆŽF’­š­Æ©5¦ŠšŒŽĢ²¤ń3āż~’£0ZF”¦Ć¬sĪ2'†‰ž˜U°Ę¶č’ˆ#ōĆļÕõH3‡žŹųń½ŃæéĢĆ?JŲŽšÜśæŅ8TōĬ‚“+Œ6š×¶>Ć[;Vf=v`߇N;šÉ•³ØmŻÅŹĶO jɌć_>•Žh+·>żS~öš7X·ū5źŪ÷ŅŅ•¬EūnŠž Ū¼£[ÜIדxłūg˜ĘŸę޻껨i'ė½·*+ŃøGSGŒõŌ4÷ŠŃć4ć_—tć,ÜżOaük"Z5cPé<Ż5ń‡6ś©@ P’…”¾ń/¤q±¤#¤p„0®ʕŖÆŌŸ£¤p”’ „p‚²ʓa鈐ń”²|+,|‰ŠvHz*liåź¹!·ĄyäEc̐7Ng“pń?n˜¦ŽŠ>ć48åŠĒyņ­“ŅJ¦B{q:v<Ż”,ŚBŚņ‹ühažš–,:qŖ²ģ94ų“žy#†Œž?ūäĘ2€Ū z7w÷$ĀS¦WtösĮi?>õ©ĒÖ÷«Ź@ư0Ēė_°c†uī&H•¾vIk—L%ȳ’®żķ¾“fķyīé­Ž=ļę³.­ėȍō¶Ļ ¹žüźÖ޳īŪ[q3M倒}Łčż;ć%JķX©ōRAE€Ō6Įo–Õ߮ךæż®ž<~łļO;ń’óِ֬38ī2dØvĘéĒuÆ^żĀŸZ[w\pÉ%ŸTYYqƒ”² @k]ŌŁŁłŃæ=ńij„„Ÿ;vÖeæūŻm¹@qqqę‡Č®Œ[ßóŠ ’æ8\—_ˆΟūöl€K. œ‰@i)Ōdaī'–'¤ō–|·õDņ§€Ą!q50“ÜéČ0ų8p9š<šK`5żēé2Mōö`’YĻĶEēą4“ńčäj®Ŗķśē”vk`Č·a¤®y:s 潛 £yšöķ«ƒ}™ėʼ½/Æ!!$ķŹ¢)'—ŽüBœpŅ ļ„žļ `oVe!Ź>z?jal5„3574‹›ļžŒd1;hmOÓL b“—¤ŒgĆ˜ÆżŠ)mĶģ)i¦„¤ˆÄ@@*†c ˜ ŠĖš5”NnŚÓŗ½r„ļŖeVÄū{ٌŽŪņ'7ģµ-x ÓÖŅ“ZźOĻÄ9’?{×^Gum×>gę6õ^l˽7ÜmŒĮ€é›N „! I ņRxi¤ĮKL3½S nøŪrļU²dIV/·L;ēż˜ŪuƤ+ĖÄįĖž>ŁwfΜ9Ógķ½öŚĪ¶jĻĶ”y\±ŚŪĮ€ØT€D&I§ UH2ń©$,&ķlJŲ^r)„ …1fP‰–1Mb%f:˜‚Kp;ĄLXwh/õĖ,`E™12Ī®qc`µ¶Į¬«’Æā§¾OųļöÉ÷9’ī¶æģd’ް śå Āé£ēĮ§uąż /vٶw »Düź wąŠ6]ųµ’B4F!*wą²i_<żécᔀCµ»”*NXĀÄåÓæ‚A…#q fÖīżĶŽø—Q/§Įw\Q: xUĄŃ’ gMX l€hóküš… * —SĖĮC2(§†I@·ü>Ķ€_³NHŠ/éfTVY#¬‚^”:FoŃČĪ%’„„ļ…­–Šķ’’E’3A°ˆ1“¢T’I'…é\”@ØĢS˜Ęx˜śÆs3øŹ X&sĮT% R’‘“`AU™eI9īźŚF’Ń}ä)õļ98¶¹~<žõ{0vąNüį­ļ$m×|`…iŽ6G«w¦S³'ƒüÄu«4Ģ•”6D€MQį•@Ņ"TW6{*ŽŌg;ڜŁŲąuN9øĪŪpœ{Į„ć@k«_9^ۚ™W®Å÷쩤"AQ€øS[) 0%a >)õņ„æłhZė¢M£.æśŸ—Üõ»ĖV?=sŲ±˜ĀvVčŃČE&źćÜŽy[üOĘ/“0‘øN!$é3”%éēÆO<}eG»wģŚµåcēĢ™’ķžżK޾ńĘł/’ō§w‡CMč "LśŌSæŪļ’·/[ń»ļ|ē—=zōĘ@@Ÿ€ ƘXSSó»»ļžįœk®łņ×Ā$Ą_DKö”W<†ˆ–”«WŪą°Å’.»Ģv ,Y¼óp¬Å܂Fę;EĮä—āÉŚ¾;zæĄC8qšmĄŁ°ńĆN#ȃ½Ÿ½b$³TX%C 󊔯߁„LõP{ŲŽņ'{W7Õķ Ų6ÆMé7C¼-‰’D.Ó–—£•u™ih4Z(Śß[€®ƒī‹Ž·®Ģ\I$ōµ`Hż« €[o°’žš `Ź„Äķ{C_Īš€]9ć“7Õ#³Ż„;€ćń,€ńųØü4ƒŌ„)s†4ž¾pLõ5£ęīśŸ‚AĒ+‚$`š±˜ˆ8ŹŖÓŠ­(xÄŌŁä`’ĒKFś×0FŅĄō(§z ,¦BR Ā `ŃNĖ · ±$#IĮŖD$H؜,Ī‹;¤©r2‰KÓaGTtʤĮ u¦Ī Xķ-‡fÅ9² žiSĄ=ŻP„z×ž«ųŸŹā®ĄwćčN¶ŻämS’=DźĒøzö­ bŲ]¹3G‹©ĆĻ„SuŶMĮé”dV c&Ģ}>ņ2а»j3v-ļŌÕ9ÆDNz>¶W¬ƒĄfh†C–“ž!E£qń”š‹žĀ-ēŽ‹ wvŅ1%s/ĄWŃ’Ėōģt ?#ūÄ«a “včØiōįpM;*źŚq¼Ł6ÆænžĄt,–€×o ©]CM£‡kŚPY׎śV?¼“1 «ØĘĊSüšå †éŹč4ß’į^aT“¤d …*™L „ÄžtbLēAÕ›śĻ4E®ŖRWUč*W •Ė(źæbqYŅ!„Sa6õß“$$©'7iLw“.~7~lĖwœÕ„ā_[šÓ‹Ęö<üņ…pØvH’VuåĻupN 'jÓ2Š’‘ĄŌÉē VTēx»Eä}Ó%&©æįÖŁGŸ÷īæłżõ«“€ĮŸüć'“]nÕ\śŃĪĖ“šļK‡fe§ł'LŌ ½īߎ.G’e4Ū1Źi ×Qė…—)±öP›Ÿœæ~Ó·ēn[ŌpdŻõŚYßxaćØÄ(īŪ™3v›ZńŽ>2qō?‹ ģȘ¢(Ņ0€ĢŒ“&UUėĄ²¬ŒŠŠŖ›zčo––žöäe—}e^]]=ļi līÜ9-[Ö¾ŚŲX}Ղ ĪČÉÉ~‚1ÖżKJ^o_PPš… łwe‰>0ĄÜžtšĮĄw™™@[P[k—üå/GžńąĢ3Ļ>¬¾ÆS ąŲµjZhˆźLc°éžpÓIއķd˜« ą8"ŗŻņ÷śR šö)K†Ā\żĢiIJ’|Ģė‹~O¦­Ü£±ŖÕ®4Ōf£=+–˹NzĆ0[@ƒ†£‡ų¶egIĬóƒi ƒ:§üõ™7„ĻŒ_+²}ĶhČ+„ó‹oŪ‚€A1™7ø¶öjP89¤_Ųu’˜Ņ2"©w&€@“;£f{öõZ«r­ ƒH¶ē ėų¹'K÷‰Ør}Œ“ ±DH ’…XŠ¢„)fĮL%H!‰¤%C¬@($ȔŒ)$CJ“ aĖ!Y’)ÉL” A–d2IL`ŠÅ˜ąąP7¤ä``–×ßf.ŻWĪ/5¢.9pϚß²Ļ y³ŗX'oš_Å’ų¾{Žo'Xzl†/‚āhrLŁdŒhgN>S†Ļ“łšńä† Ö IDATa’±)Ÿ£’ŒĪxą Ļuj‘įĪĘy§Ķ‡ŽZæ0I߄g–žĻ/’ĘōŸ‚y§ĶĒä!sPš;æń]˜q¾»TĄ—–"ų™TLųTAÉsĆUSīė"lĢ0 SG[TÕ;•3Ø*ƒĀTNP…8g`pFŻŽ·BHXBĀ–,KŲŪ²‚¦eW6ūœLdś`l€ō¤H„;ɦ§@Ėģ\iŁÜu\jĖZ .ł' ™’`˜A,˜óĻIgLźœŪ垘B:gŠlź?ÅQ’¹NŖ4E1mį?&XśĻ„%œN‚‘4ąNs…ʧ[Ŗ½—TPZ’”ń=óɗ?×ćŌŠ–Ÿ>żė.Ū4\iłšö5ŗÜ¬Ę“šģgtÉ%Hŗnh’ˆįźŁ6[rŻŽOńīśEšiķ8gĀødśøóāŸįē¾æÖ“jį)‚’.ē¤ /£>Ķ‹Šćū:µæxź p©¬Üõ>j›ˆĻDåż[ĀĀöŹõŲyt¾Å#(+ŽqeÓ°åšźÄćčĮ9Jڤ+šßƒN €åńĆ7¤JK&œu`FšŁ X¤w;$¢N×lŸ‰óõ‘I·£#DnG—~›‡YŽ4x †vš/½ŅūāfS‚óżĆ%’,ŲŌLšÄ˜ĮøŌ‰ q Ę”sUj ēQŌŅmÕnØ Ėį„É6õ_FQ’…’süs<nęę;½µ‡Ÿ}ĮüĆūØ'õģž &L UŸż©s:īt”23‡źr É;kņłCī@ Åó'ŲA³ųėA€šĘ‹JžōæLt8kĘģaÕ_¾ż¬ż#F—vL™9¤eźŒakģ©s¶lOĮŠÅmgĻw1ŹL؟]Ūk ³¾łŹ7“ųa±…÷vĮ£K§“Oé|ėĪŪųٰÜöö«O;PYœéūŪ=oĢ¹å£Żę\ńĶżčĮoüś×®8qĀÓļ½žĢ§ptĒN°i½Ó§OÕ÷ļßś>ڤl•@bį±AƒEõ· =ŒŸņÓ2%@jQĶ;ļī»/2ŻÖßż.°nPZ œ>šų楶>.ķ›0öø3`ß'ėQΌƒ]‚šó’!ć¾»āPŲ).ō õ’虄ģQæ{’Šo“Õū±y’Qōm”Ē>¶wWBÆiD=WpŲįBE~š ƒżYˆśżŁź„ı Tā€ĒķĄČTĘ3v$0npēOūx4²Œ1»2ĄßŸīž9šĄcĄ•_āä>“¢<šĮ%(ŃČÕ½py5šDŃ . 4Æ©–0lš[ˆž(…W#ņ»½.³`’²ĮwWl(|YkwŽ’L‡²J¼÷»°ź;¹|5@ÄĖzw›ź¢RĀ㉢ŲÅ ’d„Hm[Ė ²"©,$©J’D$9‘åPČä¤XÜe§Øi8U2T»Ž2—:ć\ē*ÄŚC{­ŹęćńĒĻ1 ?ŌAćgGĘŲiFą?钞6čbÕn€e—sOäéܝc”‹%©ŠžÅĢģ•3$ńĀ”ŽGw(³ĒΐĪ3Sż ٬QóŠ?0×ķÅĀ%æC}k ¼¼³žyTߏ4W:Ę ˜Ōƒ¾S’]ķS‡ÖĶšĆćLĆüY·”4w`øčFQvĢ}†ļoz!A‰!·VXQ’×l7;ąq„#'-ÆĒū3’Ī‘$ #§# ŠÆRż÷Ō­—RBˆŲæSŤӀ1ų8“ •§$ų—\AGńČĪįYŻ‚÷™M–Šģ¼02Ŗä1˜D0c1č`ĢąœéL•¶čggLcœ¢Ø’d؜™ŠĀ ī&8³˜ !”śz#éTH¤e;õ"Ϧ¢qżŗĖĮźÕlxZ×ŪWTįÉFEN5de²#ĆŃÖS‡(€×­|ę¹£+/½zʁŻ;ŽåŻvŻßϽūÖNßøźPdŁą|’ÅWM>vÖ¹cf‘(@\›hJæˆū!&Ąļ͹ØÕļČŗ`ō‘•÷_°śł»ĻŚüʬA5ė-IlłĮ~g\żŌe÷üņĆéÓ€Ó‡kxž«?qėĢ=ļ@DŃĘˆ!s‘8śou!CÖy‰ż„’ Y¼8`ŅŅRAÓÜ}÷ķG·m[ś‡ņņ„ēžqĘĢļgff„bY{{ĒéŸ}¶śļżG/9ķ“9w,\ø(, ž¬@XzzZĀżėR`Y—Ćü²D€čAī“Iiƒ~‡øńF`ńb[ąß°5®øšx€… †¾W Ų• JdĆDžŒĒ90ĄGś„žS±¾Ū  [ļ¢W؟÷"]āö)#§ĮĢ)BŪ3ąķ>t2§‚«‡|cC„¢bzŽ@{Q˜.O0’ߣ’T“`j £^÷§¾ż`ų`ąįgÆŲ+/>Œ Œ üåW¶ź?üe‘~¾<øōÜT·nŪčAČÕ5dūŪąń":ń>ڌøJ\a'@p|ÉŖě4£d§ƒŽ@u^Ń”Ėī©ŻTų²īSƁ„ ø"¤z3öĀ£·öŸÖø2¾>®¬~y™&¢p’ao¶Ćž€‚UL3ę!Ǥ+” ä(PY!'€BąBIŅ’L‚Y*–ŹÉā*Y¤’IcdŖœt…CS84®@ēŒ4sń®Ķ²-ŠIjŚ=qø{Ł~v醦FŸėžŪŸžūÕOœł›ū_’õė’vN8%źŚQ@Ųrš~{„چŗ=PŸ›~Ø1{ŠEcöųüåĖÆŸ²÷šķ§oŪżŌMæ?(·­"Żi“)$ĢE›F\łķWĪ:Éį-_?cĻŽ°ö˜ÕYń_ D@E§ź‘¾ķ`ˆöĶL:k*”˜¾T՞2d¾xńKÖWļżŚM7]MAAŽkDä]79Ryß]wż`uæ~cYõéŚN7TüGW—ŹU±“ĖŗjūfŃߥ;’œRō?deeĄŅ„¶ā’3Ļ?’9°~}dł³Ļ@EÅ 7™ „ĶČPĄ‡^Ņā»°|oĮ¦āŸ ¶öu»ö¾6ĮÖ@čµ»ż~ü} _‰z|½bĻ ŪøÓ!Žģ€ćĒØxķSüĻĶį÷ ?uR ųÓĖh3LT)ģq„cQ?/ -Qō?d=ÕŠuPi&÷fléiĄUŚæw™ŖQŗš“ĒŁń6oNģōÄ1½ŁŗmCū!ćĆ ČŠšp/HGĒw²h:æ®Ū޾ޤ„µ¤ŒŽ*Ō\™ū# ž(& WÄÖōRß3…ŽoP»üi~¦4ķĖ˜Øµ»†[²%ĮHĖ»ŹF·obŠ%L!IAD€¤&@NÓĄĆzįa3 §ö+Œ\"˜śĄ‚U4H )‰ @2R!MÄćS@–)ƒ©~FBL!”ƒIə$Į˜$.UÉønrćż]åŽgAį‘{‡1ø§Nwł HĶĪgKü’Wō/…Å]’īʑ"xHšöü÷`)—Øßó&ĻGvZ6\…5;;µT8PŪłjš<ģ œ?iŖcķŽO°’ŲŽTFŪŘ;Ļ9\·æzł›?9iłŠŒ†—ŽĒųÓŃģmĄ§Ūތķ7žy7fŒHŁh†ėöŠO¶¾3Ē^§źĘŹŻ‹Ńh0b˜7įjĢ›8nGZx»Æ¬ł;ŖÅ Æ0³§¼¦„£¢~zl=8AI›„.J’0r[`ę“BiO‡£!¼#‰ ĶŅ$D¶fq3D– ļØSü@ · †»s=cmå!an® ņžĆ%’“®Į ’:iž tE¦rŦžsaŲŌÕPEšÜSe$Č)-'›śĻb©’!g8c0-8]$rŅŻ¾ĀbļńƇžų4śłŻĢ‘žÄó÷łšÖV+š@+c¢Śéaū²óé`A?:^Pjś¼@Ur0Ł„ £Ž‘Ͻū­UŒ˜Ę¹¼āš©5—_;ķ؊wå=’ÆĻ†/Y¼mxNnšļ•gW øę¦Ł•Š#Jp8A‰Āx6@§Ü’8 õńń¾ĮeįśI»wI`ƑāÜ=u¹£®=mßū_±kū×^<ļ¦O÷•Ķ}qӈ}7N;|VēO_ʘ Pbņś‘LÅ_ķ–Žovō?£I°ÜŝĮåL(P‚d€­[wzÜn—9fĢp?Ā©‘ķėžś×ßķäOß{ļ’}šĮß^yųšŃt]"„ty½Ž1³gĶ ÄŒ6IuϬ¬, 4ŪHŖ ›;wī©Ci:A‹wئō¦£9s€ōt`Ų0 ±±óņ%K€?žxź);=ąÉ'{5Žd– [?€vÉ<}#rŒü Hīż9Ų—`kh°ł3"ųĀżīk1Ąšy0īCėŚmXÖÆO7 wąx„J üõ5ųU£JQ°ĒįĘĪģ|T–MD[’"š2ś-Õ-UAVoĘ·xę±«<¹ČūiŻĄ÷µe¤Į)Ņ„§iĦ$ ł¤‚€qÖIO Īa aŠŗƒ'µĶł¢œŽÜi­Ļ*m_˜?ŗ~«­ŲĻ™.@­G\%ūsÆ×}ü\))3z[ZŠRķ®$&ł_Éχ{ā¶lŻŁ’Šžõd"ŲwŖżöüw ¤??šß}ß'žA„ĖgÜ —źĘŅmļąxKu§Ęēf?ś?ŻśDDA«÷|„Õ{>Biī@œ5īRĢ{¾słÆńŪ×€£õūüĒĻza埱­bvUnŒkH˜;ī2Ą‹+ŸĄÖ#v:ił”•ų`óKųž";-ļmZ„v Ą…“®Ē””g§uą’ ‡źv ,Ūęż—N½å‡V†Åų3ŃāmÄŅQ̃®ĄwÖŻ9L¼Jų‡pźŠJŽC/®oKƒŅš „-d}ž”ūޤbAäxaåµAdśČŌŌæÉ,‡ŽĀįĘ+Ś5ųžŪdIA! ,0fĮD0÷ŒDd'éŒ!Ąq¦+ Ó¹"uĘ”s.u•3CQ¤ĪMꔆtŖ¦ā”– ŠQż· ąRIŠ8ź(śoPt’’22zæ²ŁēŻŗ”nĒ£žōq÷\ĖŌō¾W”ģér’ŪßķŠZŽT«.Ś“žķ…„źį~ƒDcYIŗ•WŠoä6Tµ)ļ$dBΰ}R~ų­&lŻx¤pąüo‡®.~sóŠ?>¼8šåŪēģ¼ę¦ŁG‰€%lpö毒›ŪØŪ^Z–ēŌ>2WY¤UD“¬ŽMÓ¶ļ;cŲŃŖ,f„Ņ Ž4ez6VvöˆŠUŁŽ€!@UŠŌ®*–0TG'ĻCšÄ2Fį]Ö€MšŒ³äŃ’žy‹o§DĮŠ—^ł šžo>ųē@@‹©ƒef^ccóYĶg]wŻm÷åēē-¹īŗ+žzč”_īéL‡|÷Ż—Wrń?ÜvŪ]Cļ€ÖÖÖŪ®¹ęęl{-²rħŸŸ\«¦‡{õŸiń €ĪŅ£=“¦&ąĀ }AĒ’ˆĄM7ŁeeĄGŪ·Ū €?žńĝÄJdĮfpŲūs¢ ‚ZšĖTVRUąG?ī½p:?“K"VU.—ķX±˜7Ļ.x‚V› Š ;>b$~œuĆų"iŻŁķSģm;oĄ‡ź'ßş¼~ˆógb>ėńMߙĄæŽAࣵØf»6„ecGé0Tœ _A?XZ:¤«hUAŃįū”YŹĒö¾õūļßi¦’ŠPB×CA2¹¦A²TX@<  'U¤bšÅ­9=V{ĪŠšƒŖŖP`Bg UÆ+½Ų×ä¹[J CfL68³Œ7³Jü«rśłŖ“€Ć]æĒ3§£Įu—””V·?ㇹ}w"( Ø SJÖxŲ=¤ž@Ś×œkūˆYm/1") Aś|*`A.·K Zzß„Œ1A° )œ Ģ0ƒŖ Ha9$3LŒ™`*™LJ0•+Œ,Į$—³1kÅž]”ļÉ`ÅY1XuŠ@ˆŽčŚ3ž+ś×³†č3$…ķ¦“ų’S=V=’ŻuŻĶvKrĖ0{Ģłšixoż¢NėŽ8ćM‡fų±jׇ ū8ÖT‰Vü>­N¹g޽Ļ/’S×Nq̉އ”;*ā¼ķDp«”ä”AJm±:f¹…ČNĖCmK%VīzŠ?o.˜t-„ųĒǿĔŗŻįTŌļƓK~ æęƒ) 0"\1ķĄāĶ‹ ›Zc¶gzœéšé]TNčֹׅ«$n‘$ 3«fV j{:”¶tš¶4ńo ąöŲ¤Ó€ČöĀŹöBdzc÷1ɍqŖE’…ā@GńH‡“,ßså¦Õf0’’ °²’·óž  ’Į’ĘIƒBš]ņšĀY@åLW쨿®:™ĪœĢP¹“øSZ"+†ś/IrNĀģ÷CżÅ“ē3FŅć&Ė2•@Łw½Y¹qeŻĘŸ™|ā)蛚”=4_Ć!yšŻ{[ ļ±cŖ{2²iKQe_æĮ¢6·ŠšĻž}ݹ SJ‡ x7¢|Ū6Vfl+Æ(xä‰×M?cX@ņż7·žöĮ·§<ńŪ&/ż`wæĒ’žåõæņ–õ~æĪ`čČb/$É(Ż nĆDv>t)ʔŒƒ‘ČŗĀY˜Š 2ź¶ ‡šĒ哦™‚Ōq%ĶĒB’“bā8Żä®±%MG" ߎžŪ[³£žafē$XRśŠ }+IŲQ—&8wČ$²Pa»’Gæ½/ž…·fggī`Œ¼¾@©Ļė.„T¤”Īśś†Kžüē’»hŃ¢7>ø’žüļm·]ŸT‡,żŅNDš”Ņ YYY=Ņ.«Š?<µ ½$ɟ’Ļ(KŲŖ‡¶q#0nš§?sēk׿’=šŅK@}=pė­Ąüł'͐» @Hæ/ńĄƒ°S zdii6bŅ$»źĮ_’ ŌÄ9‘ž}ųĖ_ģ҉§ŸŽ£ęX;{ŇH@ ÉXŻŁˆ)§_C ElÄįē—ąm\1×9Õ¤iå}n^?š××įŪ°UŒcźĄzw&¶—”bĢ “ „éJ·‡'2    ųŗčā”¶vdč"EäXtĒč6 Č@’>‡“,!@ń„źņ M?ÜĘßĀÕ#ėżÄš«†ę—G=łŽõ×øĢ™A¦Ž9-Mi³ļUoĶŖi:œž;Ė`CkwēL)Ū¼Q1M4Õ¤WļõÜ¢{ł9”óQķüżŒt«½»TSL.™‚Ī©$„¦RšŅ"E0éą$tœ¤„ŖDŗ€PI˜°Ą,Ɉ« K ¦1KJ.d05Ą”Ģ|w÷fĒSfĆ« ę7ĀēƒYS›ō|RųŸ®D&R‹ŠwÓaWŁn£Ż]mø›f8ńõ IDAT®ŗųšOUń?&śßć}÷ S:1ŃŻīCŪ)’_‰ś&\}ś­ bXŗõmtŚb¦¹ŅqóÜoƒˆšŽ†ą‹.’wŽ@S»­Ęŗ«–$śŸīĪBYĮ0ģ®Ś å…ķžxDö‡˜B‡fųįTݐ?•õūķŌpՌ[Æ®~Bڰ+fÜ"†e;ފ’!«¬?ó¤Įs0°`8Ŗ›Ū)IĘŗēϼsF_Œw7=‹%Ū_KŌ°ėŻJüw2&afµŪĪĢļ„Ņ‘Öį÷z@ę©ĮŖ ‘į‡H÷ĆŹöBŗŒī.{$¼£NšĘŃQ<Bé,÷½½S‡[(ž)œ÷oJ‚E`1`L'=”÷TüW”)œEJž9¤ĪŠ¹Ź Ea†¢H“œĢäœ,8¤„rEż‚TH•1+†ś®¦‰g3FŅąv3+{€§£ä”ėjW}³Ķ3īŽž’iŸ‹`vżĪw¬Źå5’ŌŽ9]“/- Ū ś)»Kʚāä+.ģÆde\ „"cö³'>Š.[®ĒŽOĄŗÕsnjė×8}öpˆxõņ½E³ęŽ8zõuӏx±Ėó?ūŁŽoŲšŁ‚M›¶_‘““½ułņWõpŲūbį’X!l¤t“ŁßžfGbĒvĘi=÷šōӑéūī³™·Żv¢[`S’ÓpŠųqF°Ó ¾”ŹJ? ŒLŸģŽ¼Ż#99@sāŅ“©˜ĄåŽ āš"™@²Aūz.g]@744ÉmŲ’īZ<½æ Ǿz)nėWŠ»”’TģĄQˆ?愖š&T1{”»3±„ Oę””ē…šµŪūŃ Ąe@ö†vųo IŃŠ’kl F‚"%p‘F^ ֛T€x'@W©!³,C2Ą0Ą™›Z3äaKē³ģŅpdϖͬ–œZØŖ ҃ž~[Ė[ŖŅv ƒĘ“׫gv4:÷WļĢøYėP/ƒ„S „p¤™«„„92ü…rØ Ņ0-²¦“„Ś9°#$Ā (~É$ 0©šR…pčdIHÕ`6a@”ÄL)™Ŗ²€”‚‘dLrĮ¤®wģܬ^>a:”čĮ5u2üŸ­•ģaq €’”Ę„“ž»”&šģ{šßŻvć—õüw·±O<ų€Šćū1~Š4Ģu.6X‰š¦J@¦'w^t?²Óóq f'>ŁbSŻ ³J1¦l2$öŻ‚ć­ĒĀ]Nv&`Ū‘HŌ½0«óN›·ĆƒCµ»±n’'škńjMF ß½ģ7(É-Ć{…KśõüG™i™ųxĖ«øtŚ—š­‹žŸķ^Œ_#&š…A…#±½r=öŪ Š/w0F–N„OėĄūå‹o$x®āŅ)7ŽZæIøÅ1vŚ ;0 XŅ6½’ŻY‚†Ā­Awk@½œipŸ äs`~Č8¹śŅi@øuH·įŃ Ņ#f̩ܧų'‚·`,Gē,B}C„Š×TZ ’– ž#y’ĤIŒŒK›öÆ0-&ļŸ3©¤©ŠŌU'iĪt•ĆąœL¦J‹‚ŌĘIpĮŠąB%¹JR‹Éū·Ž€`,(£]y‡Ņ˜å1¤,*õt8‰U+¬]ÆŚść6oÅłēdæeššVpRR-ÕņčņĒ}­ŸÕ«*U9Ż“?= ; Ź”ƒ†ņŚāV»Ć­S']xć,’ˆ…‹—$+MÄĀYš…ڈ1%­”e5UMĪ5+öõū˳·-9¶“}Į—fīy÷Õņ”¶Q—˜ ‚ū˜~ƒQF1*,Ŗa'ż}écѦ SwÕęgĒŠYŒ:¼žž³7mĢöčüįź„Ÿ–W•/\;vŅ®ŚÜaš©:‡“īłŁEåļd¹u`ą ā"ś‰aŲ[f2ų‡¬+Šæż#j‡Ćāqł’ ēń2 ųųƒó =Żs`ÕŖ×ĶČH·E±×7€‹/>æłŠ+.~ĄK×]÷µYK—®øŪē Œµ,‘¹lŁŖ'Ī8ćŅ{?łäŻwb: ĄF„A[²äM^ÆÜH™–ęIøŸMˆĶƒļßæ’Fō/Žā',»w/ŠŅŅü65žškģ ś…ģŅ€fJŁź]š ūT+č›Ē¼ąŪˆ¹|ŗ·ėÆ·óū£Į’āÅĄµ×ķQbGŽŲŠJKūÄć ƒ- ،ˆ0`ē‹7Øl?»7,€¹€\PŠ  į94ڹ·śž‚£ ęāśóg`†ŪÕ÷:|//AࣵØ#Bµ¢b·¢b›' ;‹ĖP9f*ZKĒAĻ-ź| zĖ›ŲW‡#3’ÆŅ¶æš­ ‹±Ųt‘”R`ƒüNzAK– Ķ`Ā”€0Š”Ļ|-ž‰d{ĪŠÖ{ņGŌļVT*>KņPŽ>c6yÆYWŗ¹Ī׬ŽŃü|öįu9s„¤0Ńį« Gų’™Sę=Ź…ƒéĮĄ9c–4MŅˆOHč¦J²š ĄN10UI"*€ IB‚KfI)œRdI"ՔLr²A技%‰qp&„`āX[ƒ±dļ6å‚Q§QB&Ęįž9ŽŸAzcŃ’SXÜųļn'¤{ڶąæĒŽ….7Üy2j‡ßßšŠó&]…Ÿ\÷Gl=“ŗ©į“Į³ąq„£¦©’Xüiaö˜ pćÜo‚‘żÅ'„ĞŖ-ųxókąŒcd’‰Øm©Āö#6-?Ė“‹ļ]ł02=¶ś”aspޤłxśÓǰÆz[ĢȈ²Óó‚æœ½n?±÷Ą‡[^A«æ猿gæ5ĶČņäBH·×?n{öų+Ÿķ~šHxCmĻsņ2а»Ŗ{m /_6óĘĻĒŹ=ļ£üЊH E­ś#&žƒ·¾Śe߉ö'Aó$‰&½‚³„S‡pź@N[øIŅT0]td(`¦˜Ģä€ @Ȋ}H.’\܄T¤bBŖ&ą4 œö’2¹;šŸéŸrą€/o0ō“Ί’ʞzé{mG“čŸ%śg1“8l±?fēüsNš]ņq¦) t…Ać:ēŠTn—ü#'7˜ Ć.łgēżs‡4.ÕbĀ’–p¹lÕõŻMżgzlÄŲ4M·A-WIddqį`KQ,Kq’^}ō_ķGĖ÷¹_szöȡ(īÜ>a…j­5²vóóZĆ®wš˜Ōė.Ŗō¤ńżé9b~?µ¢loČ+6}E7†÷Ÿćvg^t.ū×åu$mĄ~åõSk‘ ć=ż÷•ƒĒMP?rlIx;4Åķqt*b/(d—Äė A2NBFVŠ §»vń{O¬œ:žż]Ʀæ±uÄŁ‹w ™yÖ°Ŗ ß;gÓŗŅlÆoJŁń¦ÉeuK écUacŖV„'%}"įO&öGWąPŗ– z8/ Ū©IŲģÜ’Hėś†¦‘0zōˆw32҃CA˜hų ćÅ’²Z×åŖyó®žæeĖŽŸH)›6mūĶ÷¾÷Ąī'žxx_ŅQ$ąģv©X;¹ō·W¬n!˜MµŖ“*22ŁįÜ|V‘[¬Ō cmłÅLSˆL¦BŒ5ėzFpH@³#ūÉ"’jž¦XgĮ½µŁ÷ÕåÜuó?gx<£|Ćį’ÆėÜ-ˆjś¢ŠĘŃį’¹-ÅI)¦@§čTī?ē\ęx4だ×nüŽŁʟ\;qō«›GĶžp÷ 3?Ż7`ęōĒ7ß;ożŹ!-1˜6:÷Ÿ¤ścĢö“qĘ !ĮĮ:Eę@r™ŽņŪ{§wj/xLGå[·§O˜8.!Ž6ŗ™%%1IÓl)?U•2ś£ŅįpČ+ŽyåŖ«¾R³dÉņæI)]Ææžę7žxāį{’ ©³…GÓ Żqz§L™ņ…bă±Ö„­R°Ŗ*ą®»€±c/} ųŹW€ģl» ą­·o¾iG¾O‚…ÆsDī„ž SĘƒWŸržŅņåĄ¹ēŚĀN§ķü>Ü.‘ļl‰ÕŪQv¶Ń°Ē|@=l¬Ō+1ĄTlnŲN€’!ŠŽżZön‚ŽTƒvæ Ļ„Ć/-ĮČYć1cŚh Q†ģŒ“īŠ‚D¬­rĒ!˜k¶ĆW¾ &ŠČLJUū]Ģ)Fõ°ah2 Ac`¦gŚ¬†6P¢*{'Źh0 7w`_^&Ęöt?BöÜĄŽCĄŠ2`ÅząĆĄė·—żcšŅ;Ąu—k7kʁ’ 44wüXp)›ģ>Ų;Ąž£5čp§Įėą(XœÅ>õ?TI† `9Ć0ŠR—3RO•š”-*Õø†Bį7 aBU˰$˜&\A°~h]ž¹Ž÷ׄEįū•)ņHV‰žŌĄÓš×0!)ōØSˆ„ɤķˆŚĪIĄ iGǰL Pøż0‰Ŗ Ą!„…H"³źf¦įŠdD Š¤0fĀ! K…NӀ³ĄˆY`2Ø -Ɉ$c*˜Y~ō0ĖöxųŲā]–ę{ŚTųVÆuG->šJ*žw³$•}ŹĒ£Ė…]€’īʑāø{ĒB‚Čg·õ|Ģ{Ŗ¶ą7/ߍœ“Żö&öŪŽ».~ śD ²¶ł(j›¦4īdą?AC,ßł*ź#e Óܙš8Ó!¤…š–Š$kŁvĮ¤ėįv¤a;Q×R…3Ē\‚K¦Ü —źAmĖQ¼¶öIģÆŁ^oāĄÓQŪZ‰ŗ–Ŗ„¦ś‚N%ŚŻ+šßƤt„tæVĻĄ‚{ąqčiyäv–Ś’m¼’\o‰€`$$‹ż ŖżĖ čēL'N‘Ō9gqҘŹ4ĘP8tUaāŠEjÜÅtE…®(ŅPTi‘“›ÜAi9f‘ŖHfXRp!'0I²Ć/8`æ1 °,FRdēL8R aIéŽT·W‰ &Lip@q1‘Sä82f®‡¼5™JKcVŪÜōń‘śU‹Kk,µŲ‘?¹Ģ]0.Ļ‘Ń/Ķ™]źąŽ FŖ‡ %Y†OZv©µVZę£fDZ­oŻöH£s“8hP¬Ę妣YŁt,ÆD­Ėɓ-ŁeĢ—•C¦B†)I†ž;Ų©¦ĶŽĒD’»|_ÅĶ`Ą?^ŗmŻā7·,ūxWIk‹ßńÕ;ęn’Ņ×ĻŖ`DRūŪZąĮ4‚˜2<ĶO‡ÄæĪldœ`|iNÓśöYåŪmū_Vž6öĶĆfÆ:T2cż’]6iŚĄŚņuÅø~--Éc6ŠO¦K`›€CķQō?Ž8ēį}żę75ū•W>üž¼óg’å™ū ŗ¢(ҐÅ„…×Ö†‘š éėÆ/\9xšä÷›/mkk?#z™Ėå’žščżˆ E,33#A:@]*Ćų“x@C_tzżõv¾’§ŸŚjųÆæKĻÉƌV„.ĮŠ•`_Š}į”į.čĶŠæś•­š?tØķ8v xåąå—#mÅ.‡xĶ5ĄUWŁéK—öĮØķŠ„ņ`WChGŠĒ$: ąHŲĀ€—ŽcŠj“ļ^ ćČ^xjQ§pdåVģ^Qށ’Šox T‚ā¢\degĄåTĮ=.pŸé× ›[ak„^q žĆĒŠ"  hC½ŹQ­(Øtŗp43Ēr Ń8j¼#'A/čףé‘f@ö% ĄC.ĢźzlźąŪ_ü®Ø.¹ÅfxÜĄ³Æü˜=øéJąĢkŖ ® üšN ;ż¬®lł&Dšq­Ŗ^Õ‹)¢ō,łė±G©qN€ču£õƒ$”ݧeź;›bčp+RwŚe*'˰$ÆŽœ;µķ˜ēÓ`#CėĒń“‚ĄĀ!Sš?‚BĮ\7Btt_!$G œāS $¤„ƒ Iā°`Œ…Ś„œL Ź¤SpKƒ U#!¹“¤„¢$‘Ė!H—D†”ÄŒ)&¤`$ˆƒ™K÷ķ†GuńĮy…ŃĒēåĮ=yå›’ßŁ'šĮŪ׊’NÕĶH'H¾nņ¾{žSph¤Ō÷ Šžuٰ«ćŃųļńv-ļ: KZ¼hń6vZ<Øh`{Pu?Ō“Ŗ80¤x ĖĄ««žŠYG3p(.8T'4Ćęhm8ˆ_ų:4#¢žķģ;°·zk8 ßżńˆģOO!BZxæü…˜KĶ“ģk—‡CqĮ“bECm ²J1{¤­[źV=øē²ß¢,4Ə·6,Äņ]oCDeßfø³pćœoƒ“‚_¹ Ö˜~»“ż ¹Hæ÷QĻ@zܬ“Ą :ÕĄæéŹ°ĖżÅ Hj&:ž¹Ž“šu’Ń?"[ńŸōčHźŒs1‡Ī™ źP€)ŠU4®(†ƒKƒsfr‡4™K5§“H(*,¦r) “¼“uˆŃ…ĶęŌō3Dv1 ¤KRÜB ‹IC#įkå¢é˜ŪŖŖĢ¦Ļv»x/=ƒėdؖ[e–źdV4RpHÅI2K…ĪxĢ“+PP¬¶4֛uMõZE{“–ļó­Ļkß·.Ē ˆ,ӔéBĀ%%Qå~‹tFø=hS8kVŌčNćõé™Ō•Ėņ x[A÷¹²M]Ķ€0-]r"É- ØxōW„“+čŁŃīĪńm;/?(ūĒ“‹ā³SqyÉU“ź.™?µv¢Kd gSlKōž8 eŪ#I2ŗ@l;LŪc^ęä¦ųīÜņmß8cĖöæ6iĢ3ėĒ\“śPéĢõGJ¦<|åź\<¶Ŗ )’s^9źū‘qH ĪēŻX±ĶcÄuD„öGå’sż_¼xå –e¹—|“ꮵk¶¬>gī¬f3`sHĢąßŚņ·~ĻĮ…"yt tŖ‡*õØOŠ¢¢¢ņĘĘęK…™€FN§C6(·Ŗŗg6'iW+­²P–P@B"‰d0&Ū$›h?lĄĘ~ĘĘ lœĄ6&<¢1р1Ł`„Č„„„@9ē“«Ķi¦SÕ÷GMĻō„™•Ćó÷īļ'ķtW蚼žī>·Ī=7¾ųEą«_N: xųį>wtBǽļ7ķ=f}ŗ?/ÖL‡Ń£Ÿ’<”… püńōŸvšfE¼ł&šńĒĄ’wŸ9t*Ē”¬›:Ÿ ŠN€ŃÓį½=‘«į¬ž]{w ©©Ū ė< ՛v£fć.ōW •(vZ˜¾ę Ó· ĪŃN-œŠĄ ģ  !\†¦ņj“Lī1a÷Y2FŸūŽęÄXŠK”ŪAżؔdAūŸ ÕÆī[k0ņH\p sWVŖ’:®v“w5ż5耲b`W0v„޾óaąŠ öß šģ[ˆ0†v#„ÖP1ŗB.ē鿙Մj’¹B`Ā|@Ąlf ķH° «[ֵﬓČģī0ĘXČ".™BE‚ć¢ac’1­[K¾åŚ|†ß7‘j/¬°«›Ńö¬YąŲŅ1pō A0R,pī¹AŅsK PD’\—„9b”¾@Ę^vü‡_\”€0Čsl%Lō˜dœ“tMéq0J)FPIz¤ É „H)b `ä*ę½²z9ūņ“C©_Q<"ˆAavuĮ^»6ż§¼÷”ö„čß!c§ąśKˆį‡¢¾eī|śĻxö헐1>ļĄoAKųéCšŸėø©e Jm{ž{sŽŅūĪ ž³•·wk”ģį5c±z{‚Ņ~üŌ3QRPŽłĖžĀ¾öä“8›÷®Į”s0kō1Xšq">žĒ :GN<‡ĪĄŖKįya’“]±»[ź×bxĶX|aźŁxvŃśN™/Mæ‚ lÜ» ćO#ŽgŻe[ßE{wKņ/‘€/L=!Q€wמ3#ųļHg’¹,×9ĢÜ$ĖAr8Ą²ōfĢłÕ’ü‚Ļ£sĄX€RŚžD×£yīīN ž’Ģą*b.1åcō_›Ł\( œŁŒĆ"Į¢‚ĆbLŚB0ĖąĢB9$øĆBpXŲpø©¤¤x”ņ”ŚmĻ=h_tÖ<‹ œŖXį€ų\„š2}°é@ŖœįĀjÜŹ›Ö/*±^|»¢x{}Y‰ˆ”rĒ(džd¤XŠ1R ¤ ‹H—0·°XŲżÉ®¶}¬„µŁÜŻÖīµ¶8%v§[hEQč8^ē©<ÉĄHA'›sD¹A‘pˆwaŁYTĪŚ+ŹĪ²bÕU\ɬŠ*r,r$/€ā‚“$]ĻR³gœ}¤icØ“yYš§D)8õg&³üv!¾’ŸĀ.ˆKźQŹ;V҈$ ‚żū«’™ĘĢš1 O^uō’å­3¼`ͰYgMßüŚńcwī$ć*øLļ‹7¦®žk`,ą) łšŲ¶SÅ„EŪgĶžŅž©š€P:e`ņw32čŲ)ئ½½c†±3©ž•r[eee¼q²Ąjć÷»ßĻ£łū· š'‘‰1·uu錇®A’Ygé²§ŸÖi9˜1ųšĆ9RÜtGgؖ‡ÕŪ/󩞆œpBō—•iVď¬C!)S€E‹“@“oÜUƒ E,‹”×_{ ѓ`oX¾łeČ}«įNœ oåbX›W”cļvģėŲ‹­ķ”ĄA‰ē”Ō‘(T P0ø:ˆ›ƒ”;$Ša££Ø50Öš‰pś×AŽ­Ņw–ŲųJ*”‚N€ø5ĀčPÖĒ*2ą=ł!–õlÆ,ķ] Ķ]{ūV®Ó€ ģkÖž+Æ Œ% eĄ-?~r³ ųćĻŚłŚžFØ×£U˜h‡Š\R†ī‚rø& =€RA~oB0³„ ‡>˜t”dõkoēa÷e7jœfµ‡/Ų»¾ß»F7ntčl(ÆmXUžM7bƒŽ‹†Jœ§Okz,Tjw1¦A?q(8zÕ?¦`LLzJĘŹ™„’±ż@āŃĘˆŅ’Z IDATÓs‘ ö3R–Tä‡@Ź!å @0€)!įy®ĒI2ep’¾ÄŠ"ŅŠˆ«˜sɋ0ƹdJ‚‘"¦˜+%#W‘żÜ'™gOŸI%”¤ū²9ś (ǁ³iSgū³ż;rźÜzÕM0 }åŌTōĒ_’fO8×Üõ HŁó-©7cĪYœ üē°Ļ­č_ŽŽ{S?ošŸk±Āł=…qƒ§ā‹‡œ‹ŚŠĮŲ°{F ‡C:ķŻ-xeéßҚΒų)<|6ŽŸśe¼·ę•XĮÄŃ1œ1ūRĄ‹‹Éüē²¼A)įoļ߅oŸtŽšp †WÅĒ[bgÓF¬ß­éüĆ«Ēįąa³ŃŽŻ‚{^½ē̽ÓGµ»–”½»%µ;Ō”×aöčću"˜’ɓń¢Q€+Nų^\ś6ī]‘a(9ĄŽĪŸü¾|Žą?Ūu—ÓA—ū¦”»ļĻ/ųWĀDgķx(–Īlī~a•tÖķ“ ®ā¢IŠ’ą>ų‡§ü3D±(œE™”,.˜e XÜ`¶0a3“ŁĀŠ)’„PžĮ māhˆœ}X›:ä ÉJ‡ķŸ"UņBÕ£Z‹gŸÓҹiYhė3ĻōK֕÷]Ea«Čą.³]å2@$#Uĕ˜WZ^dUvŹ®nK¶¶7ŁĀźtydžQ†g»Ā±‡©˜ōĀ9…Edń²K ™*an‰šl£Ņ‘ģ“m˜%:5”ėŁJy–Ŗ,*-p^Ņy@ņŹ`,ģ=a±ėE"żŅŃ«’*Ž,‚Y “ ŒńXæŚģĻ&©—0:ķ]'“ ³ś}~FŠ pņø"2[a!pūķō—–Ææ¼’¾ž!ž|rrŻM›4h6 Č“˜·VĪ±ydDČÅø‰0€\vT Ą·–ńPsĘC  µw&¼ęzX›V”sĻ64·ģƒ!˜Nx‡į92¦@ϐLĄ+ Ć …įV€[ŃnŻ0ø#ĒĆ«˜¢Ļq’:ØŠĪŲqė#} }Åī+(„,*ƒµtž;n*¾“ē4.ū10i,pĖĻpņEŚaT»a½ō­‘jGĶ^ų3š½€Ü<ō‡Žųóó°Š" 4£¹“QƄ“øP(@Š ^)‹€ĒŠ]ƒ&ožÓ®%MQ’ kZ×ļÖmåļ0”öI›ÕyŽ˜­T|˜ž(t^ź7”锊Aö>'“|/YBŲO2(W‚X,ƒą®2¹ņl­ ‰÷<éq*‡IĖU ˆA)b)ĖPBz(3I:žb,¦ $ó”+É0ˆ”džI’˜GdĮT D#bŹc†$‚ó1q:ē—/3Ϛ6ažō?p]8Ū¶é·ßŽé¬/ł¹@i`GQA!~ż­ka&–­_ß<ņ'ŒŖŽœ%Nœ},:"]øń›óWŠņ¢¹Ą¶sŲGģ-õėpĖ3?Ą©‡^€ C¦cH’‘ˆŲŻ`ÄšĻ„O&éųm·7lĄ²ĶļaŚČ¹˜3īx¼öń³Iå3GĻC]ÕplŪ·K6½“vܒ‚rŲ®•”ļ,«’¹¦>åķjފß<óœ8ķ\L1§Ī×–?õ»—ƒˆpŚĢ‹/ōl/g¹ ØŒś¶‰_cģĻ)Ó/#Ž×W<­Åc6oāiŅoŹ‹Ŗ0vŠTH%±­a=,7Ņ'ēØGŲ‚’ŽŽ)Ńw߂’¼Ęōo4É t)Ņc£on”öĀķ—R+žĖ€āæKŒ9ZüŁDd'›YŒ#Ź9Ydq‹ Xœs‹seq®ln*‡ ĆįB‹ž‘É<PõŽ cšŁ‰—zT2øĻę‡8§’чŲÅ×LßѾzéīõw>6 ƶŠžFgI™-,bž0487 &į8š R…\ī€"Ż’I ’–CpQ@ŗ.#e†Č+»žĒI¦ī‹Iéń]ß4TlīA)jŹäćĻaÄŹµš ćņ{śŚœ1å)čp…X†Ÿ —@œčO”½L1ķHˆYtųĀ~qR~ @æ?˜ąg €sRŹĶ _cqåŸM}ņč[ūYQ Ąö{aÅØĆĮPŌÉŲ>ö-r­śįŁ,54Ą7ž!µĄĶ·žų±³N¹ā°hŌź÷»ßÜ{cUUÅÕœF\ųD@¤O”š¬ćhiićßųĘ_ļy^c¬żG?śīż=VīNOŖHŲ ˜›£¶¶ö=Ķ?›„†ŲŽC86oÖńšO? 47§—·¶ćĘi°ÜŃ+Ó+ė‚>—m±ĻŠ«ÕÜTėīÖąķ‡?Ō+żMMĄäɚķ0|8°eK¢ī×¾¦S!Ć%Š ”@ū¾ö;R¼'@ŖåĆs…Ž5b¼>/›WCpönC“¤“Ķėluwā+ļ…Pč–@W@Æ‚ź_«Ū× ƒŚßNu)Ēż“YE%u½ńI<5k ¾VRˆō¼>l_3°u'pūĄ°:-īčÅå5Ś“»~ 0®‡ƒż*€kæœłM £(ÉÓUÕŽÜö$Z™@CØ»‹«ŠRPĒ0!¹€ā.ąńōłźU(@lĪP€”¶~(@ø¼«sŲģ-ķśøī7jéEÅnāŠ DČ{§jDó=U£;·I亊Ač¤2’%xēÓŗĀ:ÅQ|<¾ž@ŖČń”2x¼®vx ‚ƒ”'@Ü!åłLĮ$\™¤閆©¤"ƒ)!¤©<%fpx€€2]2¢ÄȐĢõ3¤d®ĮH1EŠ@nKw›=õ óK§€ųŒ„žåŗpwļŠļģ-ųļKŃæ¹“g”¬ØŽėą;ü Z:Z°jĖZlڵüäv|eŽ©xłżX²öćxŪŁĮ©sOÄ ļ½‚E+—j…ųĻüēņšöxØ>’¹ūž÷€’ü€“ŽŲŁøw¾t}|×7Nų1*Šūćż5ó{ģ÷½5Æ`ŚČ¹˜6bnĀ@€)BųҌÆžYų‚ļ–S†ĻĮ)3/@u™Öž\·ė<óĮŸ±«iKvšŸß×H³Öī&<žīxzŃżØ.­E{Dßø§Ÿ‹aÕc°»e>Ųų:€D¤1„ż0 Ļ@kW#ŽZõB|YQ%Žžp*ą¼Ć¾ŠżĢ-7‚,}ļ®KŅĪJj_væĄ~īß\÷™č_õ?SL sĄxxfaZ™óÉn}e§ˆKPŅŹæŽł§˜ā?Įę1šĻ˜²9'‹8Y\°(ˆ Į,ʙÅ9,Ć$[n [8†©\„˜ē‰R±]^u‘͇ĻƧ5EDÄĖ&¢Š~?qė®gžj­’ė‚šĮM5C ;ƒ>ųēPœ“r,R°°^yÉx:`0 W:`Ź4IŚŽD8ž•ćČXt"ž­üDŻŹ¶„ėYjÜØ¹uÅįā/čJēŗ#–zϧę#uŝ%3X±Žq‡@"E «Ÿ©Abå>°!ż’ ŽEšäXzæģĆmµ•zcśo­²ź±K^yNzP!īŖ«ŽZöĀŚśŹ~Ćūwtéļ‰CĮg œ1Ņ" ~æ$Ļ€Ń+ •‰ ąĘŗœqč¤öżģ²koŗį~XÕß’īÆī\µ|żu7żöše™büóµsĪłś ĶĶ-'ĄA¼ķĀ ĻĖ€6Ó­ØØP”3egkpcŸÖ¬ŁĻż/±T€ ąEWįSéŁ6pß}éū¾ń ąź«µ8^€@‹¶ÄžuC_wūĄ”嬕Ć.ŗ(y{łrąŁg5+āÖ[õ¾NŠéó =cTĢ~™ ½śo"Ļs¼e²г`ŖÕ 5¦ļš’Ī䶍éķźØfXbxA_‡„ v‚Ŗj ö—€NŚłV* ŪŻÄœ—A–UĮe!4½¹ Oœr¾ÕSŪ¤~Ё¼ö.pźńĄŻZ,® čLŸÜr/š›!śļØŁŚqŠŌŒlŲ ˜2³*É~’(ģ–4bWa1ö”W”£¼ z~-!½"’o`±śEm]Ćč¾£sOŁć{VŌŻ”< \ȕåC:n4­aE“Ģæ}qD nš$ Wļ‰C1O³ƒŠJP8 œHB©ųyõ€H1¦ %  ƒA91=š‡7ĮuAŒ+ ņ,WqRcŠ”) (%‰„p•é0Ų aC‹*(‚‚ε$%ƒ"‚Éķ- Īkė׈ćF§$9}BxŚTD„„»79¾:ėkŃæŖ2ķkėź@KG‚ž¼róZüéo÷ąā/žĪ9?x>ŽøÅEųŻå×”¢¤ŖŖ±xõG)/"½’¹ģRDńæ·ÆŽyƒ’\]ą\å×<¼Œm|°öul©_'FŻ?vŹX¾uŚvÅ«īlŅ^ń₲¤¶ó&Ÿ†ņ¢*,ßŗ›ö$Ņž0ķ+ųҌÆö“l‡ķFqŠĄIųĮiĄßŽæ ×¾škØy”eFʎÅ®f=^"Ā ėlĮ/,y~ĘmæeŠWŅŪ§Īøš…'M=¦coėüsŁcŲŻ²ÕNĘ©3.ʙ‡^€įŻu/§.× ¢Œg'ļ¶=īĢž³ī?\ōOGGķxx”¢“2wż>Õõä'®OO÷§Eļ⊒ĘCœl"ecQ0fq®,āŹę1Ń?ÓDT˜°LĪlƄmÜf!åPČp;٤źFvÉU+üļųŽ$ Āį”ē}­­~äųεæz Ņ-w QŲVUmD%  NŹš‚{…äJ‡Ģ#eV“mżŗĄ9”'å³!yŌVnģŃmŪPØ?[–&mÅ=Ø”u“æīé°}æ!„_zšĪŸś,ć"oÄH©Ųóˆ1¦|*'L„Ī'ÅŌǼ ¾x XRA’}²š8©ą³ŇʏŪޚ>W*°‹ē¬XäĮ˜:wƦ͐›6© ÆžŒ±`CŽĘyśü¤1btž!†ß·o]yŽf»Ūłńowļļ\×-¹ļ¾'oyä‘ēöī)))Ś]Q^¶§ŗŗj×A Ū=kÖ!»O?ż¤}žÜF:CęĻźåY³NØhki°xńūāÉÖGR€ćǒDZ216X†d¼v@VRœq†Ö8śhMuæź*-Ųfh‚N{׌gō*zŸŪ…ųpÓMZqńbąģ³µ#¤AÆžē¤’Ē9كöi°z*(dXń Ømy~e„ )$=±‚ę AÖ @÷Ć懌ʉūcX®q†Ląš+€?Ü Ü’8šŻK)恦fėŻwļŽ}¶f«;8āP`Õ:ąæ"Q ØųłUhēcw@Żņ(š8ĒīP¶UT”¾Ŗ݆™xpe¹ZičŪP€\©@?č HdYķYYw§ōŲ"ÕPŅæóÖŗ;ßą˜J:.1C(éHŗ „ÄA¾/(„J8bŪ€/ąG®ĒČäJÅ%‘bʃ”<ī`Z€‡čP ņ†”|ųu˜I2Ąu1=!åj= S1$cd$åĮä)Åøƒbr!É[»w§crn9rl²‚!<}¢K–Ą«oH>1Y~=½żĖüĄĪzMgŖ,-GA(Œˆ•x?łśsxī_/cTŻpÜżƒ[°§©]ŃnT”T ”„Wßńsxž—õm¾·Š’Ią'īČ ŚüN¼l`Å0Ģy4ŗ­NÜžĻ£ŪÖĖS{!ø‰3f~S†Ķ‰;>MšŸ½ļųĻukś¼‚Cgķ8x”tjž»µEu>¼ŌU%Ą"ݟG¤ĮæÆųĻ9,²'‹ f (å‹Ī,Àʲ Īż#S¹Œ‘lĮŒ!Ķę…WƒĀå’ę @ØfÖtĖø¹jóŗŸŽåŲ] 5—ÖŠØĒ™‚ˤ'“9ī4ųēœlķ"ą\‹śy¶¦Å€p&‘TŌģ™_žĖ c’c”@žŪ§ŅĻķųU2Pf©JųAį¾”N¤|->g,ž0Ń”>¦ ćń” )B~ĵ΀?TžaõŸ¼·yPæå»«ĒMŲøzŽŲ{!Süc+śŒšXĀ+ąģsĘ@Œ”Hc7ų•2hdōōs<!„Ōņuб«’»{iŪNe$‰D556c+tj׳óßĘw<ƮІBęī‚‚‚]%%…»ŹŹŹvUWWķqŠČ]'{ģŽć?¼–.}ćŲJY)‘IY¬¤$S Ą’?,ÕąASéA9n¾øā Młā ąšk€>ŹŻ®Ö ž÷@;"č„č]ŠŃ¶ļŃ,KĻÅW$/|A‹>ōPŸŠCŸ[Ž>z$Ž€¾g¤–å£<¹ĄAķ¾dXÅPįŽ²J!+Ć鷍æ}ųŻ7ńū‰œyLæņEżĻ·sOM|>xž~ ¹(-‰‡¬ćØŁĄā€Ö69 ß,Ž \r#ŗ{ƅŲ\\Ž­•ŃR^'Uż’ÓčMj@ßĮ ¤9 %ēk«'īücŁ€H;c WjcP¶ūėŸŁ®rMA™B\×%!Dō»®‹ąvŖĄpå©  5 “‚K/¦ĄL’€ėJ.ˆ!ī0•£‘­ąq’Ä$1Å…Ķ ņŗ3„$%%S L€‘1’`īņ]Ū3Ž9:iöCčC`-ZÆ1–¢­Ą¶j©¶tż'p=‚ 6łP¼öįŪń2×sįF]ģkm†›0~ŲX€ēyųžķ?CS[Kö·łĻ ųĻuÜŌ²ż’¹¬—w÷¼Į®®÷ó©²µ~ž±ä1|qśyøęĢ[ńĮŗ×a»Ž˜p¤’xcłóńŗ_<ä<„Œ¼½ņhˆ9 J ĖqöÜĖOüėāą¶ŌÆÅŻóoDqø“÷ą?Š=}å–Ī}x}å3Iūā!”ˆļ5ø‰“§ép†ē?|P‡¹ÄģŌC.ƂOÅĮ¬’ÄŁyOż~œ£¼Ą®īä#æŸ*2ž¢>ą_”«f,ÜpiZ™·§]u=ų”«ÄĮ?ž"ņH§ūs$ccŹ!b6ćŹ&F6ćĢā,ā°'K²ƒÅ¹“8g)¢Źįœyķ”ĆėZBž$>•Ŭ|,T9fżĶU[W|ļĒq7Œ ¢}ÅżĢˆ›`&+—Nā3w”/šĪ)Ū¶ćą_9NüÓi[ą±ÕŸś_S5¬ø““öŅŌqq{œ~ļÓ÷YĻČO§ę#­ī/%ˆ€œ!ŁQĄā/c±Ąƒ@iR4 *fž‹!'—MöžÖŗ!?:nįĀĮå݌q„bŒ„k‡Œ Rźæē-{'Ųž1®™ Ž #OBīŠ°Ī”×Ɣń@¼>ZS!śÉO’kŻŠ”uW~’»æųUWW÷0ĪYdč°ĮÆ“µ¶Õµ¶¶Ošż?h“˜ A~°¬ˆ ƒX2„d±¶Žœƒ’ĖōŗvJŹq$‹m=tÕm#ē­¹¾¤ŗ£Ķu½JĄ \WēĒ ®“Č•ćÅ¼Łž/ł>kĒ” ķ`)š  _iW?@)0žBAnņćĶ€ć‰ŏĻL’Bē*©ˆ qż—1×4Éćœy†©\ƒ+W0f›aesC9¦Į¢œĆ–!X‚,Ę(ź}²c›óĮ¶Ķ©óIŒ!4cxEyvšßsQĘ ½y·īŽFt|?€#ž±Īīƽųū/Ę·9ē8iöq0Œģ¾³Ž€ŅW>35= oŻż’9Va{?žFšŸ·ó'Ć,ēhūĻ%ć^¾ŻVŽœx2Ž›r&L³ ˆ«źØŒĆʏØÓ~ōD¼ķIÓĻEaØ«w,Åū©4"ģjŚ‚u»>É1ęæF{ė ±c) YąF}Ō„SP^Ō«v|ˆ ¾Ā?ćM؁SŠŌYw×&(žžI7H»ĶWķų0m̦#ddp'éü<yƒ’lóŃCA¢ļÜ7„Ü}>Į?ˆŠ]=Naś‚»Wß”:ļ]äŹnO ƒ$@S’¹Šą* žmḃMŒY$X”ZńŸūŠ’œ¢Ü`–a0Kf›!Ų\'$˜cpņŗŒÉżšĆē_­>Cšļ›Y1j 9ę†ĖvnŽŽÜø±»Ŗeo$uĒĄ?óH™Å·ąŹäz3ąßÖą_‡-Z\ĻR܃š<éų‹Q™ąGČõZŸCłÅb’ō*½J`uĪąŸ“ĪÜėo»OzįČv’ T$"E<ł=džŚcžµičĮ§ß÷åK~žņ¼™ĶŻ”ųƒńś“.žėÅ/Ü=sÄī&ż-Ņ»ÕLƒd°ļÅĖt #šī£žVęŒ½±Tą/T(©Ļ³ĻłŅŽē’ńĄ·ūõ«\āy²`Ēö]GĻ™3ć¹ķŪķµW’…/Ģūńų‰cī0 ’ü¢¢‚µŒ±4æēÉŅh4:®¬¬xWj,’Cļč’ńqÖg«xŻu’”LŚ 4¾Ą­8Ą[ė31Ēų AĄ=÷',[¼ņ ŠŅœx"šź«:ž“#ŻCkvl…v“įĄ2ų֐»Jļ-Ž;N§<õTM‘~ķ5ąŹ+µX`éŲ80 „ķōĢH 8źsĪčle`ō$“4AĄRČŹ”p· éWOąńezņ\ĢĖć«|źöēēįŽü(ź [̬)ļ-uĆŠÜæ V&šäHÕČdžŖ|>z63p å8’“ē=椘2«ūi”®'Ipę;üPāP® †ųl‚ų˜5 @g09” Šėx.1.”ĶšŠ Į•ņÓ €;¤˜”uø 8”‚t!gP&„“MŹ"2C éĀPDB1ņ F`œ8“ˆKEB€Łøc‡ŽĘ¹Ē‰qĆĘąūw\‹†–ĘōŃå J3Ÿ^“Ķuą^’Ą2{ć,;?EšŸ’\õüūÅ«w,Åuż:F ¢p vģŪ„¦ĪÄ+×i‡^FÆ.ū»^Ķ'­0ḵPJāoļŻ“Ņwß)žēj›»oĀ3‹īĒž¶mč¶“ĪtIA9Ž™t&¤ņšĀ҇ām1œ2ż"ĄK=×Oq;GżJjqšYˆŲ]ųpó[ńc ķ?'O»Ć«ĒCCŪ.¼³öų`Ć«źō=ųļŃüēźžóš³˜”»’A°‹ŅóņŹĘ.tŻ·Č•]®#©I śc‚ĢS1fƒÅ8³ˆ‘Ķ,Nd1AŃøāæĮ,.TTeń°²…ą¶aĄf†ņ\QĀ ¾q„Bų€u¬śŹ j¦ µŚ¾ł•]ļy”¤tČd^y%la2éS’Ķb’ŁØ’V æLŌ’ÉŸh…G+(QbA+š†Ć²^»É…ŠHå}É„>ā©)Īńaˆ„Œæ•§S¤$8qõął/¾ņ—Eo|dÉä9Ļ-9wžŚ”ÓN™øiį_ōQˆKļąŗ–V Šæå3&ŅB ō~RÄ:j=Ep•9  e”z±—³ƒ§ŒķZņńĖ?œwäŁßټiŪi/¾øą¦„KWĢśéū~sõ՗oTBH8JJ)uĻ= x’żEC7mŚ>¼©©yxWWēpŪv«īŗėę'39aaÕŻ}Z”Ó§e“ĄŠ„®#Ę|_蚀7ūāźń˜E IDAT 55:Ž}ą@`Ö,`śtą§?n¹ESßC!-ˆ×K³ A’–Ųæ8żß·}č#@8¬…ž~XÆō’ķo@EšķoėyńĖśP0=7½ÖAų?€¶Āāōŗ=±üĻ啚†F¤vö\v;n} –ä;ŽOĖž~ŽåæF7°5TˆUeż°®f(ö Œī‚Bx&õģ$āŠ÷ÄõJ­Ū Ą_É÷łžvœ ²Ų›ŚćPž— Jé*kėVóż~żæĀM¬üKåÆņ‡BŹŖ* €1(©HĮõ@¦īĻCŒUą¹Zp0^—TĢ‘D%“H‡“ž‹§’š$ ƒS¤$&c¤ø©9„ļT-Ć£z8öŅ,żg+ چ”ķŗĄ±ś×éĻU5PNę1—źżE±ņ  ĪHit„ŻÄēN茕żįŽƒ¶Aƒ±õü›pĖĆ’Ä;ųŒģ”Ą=’gØW[Ba,/­ÄŖšaŲ^9įBMżĻD’Z_„0å  ĄRėŜAźxč3åØALŗŹ“PŒi0ĜQ!€ ’n  †Ä@¶P%9GTą”Ÿęˆżø@$;(v,@;˜ļš¤48IĪIrSyĀ ×0¤g ę S¹Ü$׏ę‚lnĄ6 XÜd–0)*"ŒĆbŒ,÷µukݵõi÷i …P0{Xy";e_*ž——”Ø ?¹ą{(.LŽ£R£ćŗšŪ[’Ś2bųķå×aP’Zttwā{ś)¢–…U[×āģk/ŕø;vaä aųŽW¾ C½żKŚ™÷ }īĀ^9r!ć¬+ōŁ;ģ­č_ry– y³ zž{sŽŽžt ąÅŏčø÷Xł”aś%aéęŗČžS §? 'N;—Ÿx~~ö=8zā©`ԃTNŽ ŌßÕóJłė+ŸÅėą•eĒĖLʉSμšį_āž9Śo4¦ = ‘V¼±BS)÷…óū.xå“Ēqć3’…»_»æxęæšÉö…5`.?öFgŅ}ėƒs“_,‹’dÅ"tõ «¤:­HuZčz`±ėµŲ2žIƒbĢUü»Äą0Īl"-üĒ,ĘańXŗ?K÷Ē9‹rC+ž .lӄ-bŠ’*$Üf~ōp‡8ę3˜…œFŒSÕäoŪŚÄĘģŽnWwÖGĆ®-l€@õ–śKsøuȌ“Ļ!&źŅØ’•ųąXŅäRÆO?ˆ6Ó÷ äj~W™š$œ 1Øō5—ą–’Šäžüž¼ÅĖē_žŌ}§OŁšv{4TrūŪÓN;žö³.|ī“Qƒ3vo̳ø8`fąĪ2R’½”Oéžž±?7ÓNž¹ī³/>šĀyē~5ē¼3‰½ńĘ?üåüÆ\vTj=;CŪĢ;ŒØĮ€@†åޚšš’š6ĖäPŠļŠķŠÄ‡[eŠ{²+®ŠtwŲ“I§į¦ü›8Q§æŪŗUƒßś¬ićk„żk”±ąhŠŪ«’śū÷É ī-·ÕÕĄYgO> tvååĄwæ üė_@[›ÖIX°X½xļ=`Ą€{ō•݉żŠC艊—–‹ŁO@Š `Õ%>ūN€T@q)”ĻHµL,€T+És[Y Ævģq£Ń£‡ŒČ2Øōq%AÓ>’¹Ž›Z–u­žĄoĻQrß}žs7wß=Ÿ£^ū-{ū6,ŁųvRyM¹~߯ŁóĶ÷üĄcļ܊?¾ųC,ųä)<„Ó½—mrŗ¾ĒÜsæŁĄ?“v5ā‰÷ļD‡ÕÆ2oāi(+¬Äņm ±¹aMü;łvŹō AD˜æüIXn‚ œ;ē;ÜĄŪk^ī˒O;±»šųū‚ķFŃæt V ėiō™æJŽĮż’y wżĻųWDčŖ ;ųļ²Ńyļ®[ß-ć“J¬üĒĄæCŒl"²Į™Ķ¹²8§(1Š2Ī¢L ŹE¹AQ­ų;$˜måPˆ9¤Å“‰S.N¢a}ĪĢ,«+*õÕc›÷D‡īŻ-ļh–‚…IŁAźL õ_Ie[²ŗ’Š’¢‚ņ“$}õ äO‘¤5e¦AĘS OžK~_ŽÆž³öA@īyõ[SIį’¼7s¬ń .ā¤žņˆó‹/¾»č‰‹_¼|mÓś]-Ń~śüœ μ’‹g}ø­¶"}õ?ń­āeÜ_żĻ¼Ā 1Ć<ĘH}ŃͼśÆ+ŗ)ŪwŻuÓāŸüä;—…Ć”Żžē½ōŅkæ›>żøowwG“–‰ś»B”„Ī€•^ķ€lc÷÷y±ž¤Ä$“zB#€÷ õzb–.Õ+ž€^õōQļ~óĶĄĒĖ—kŃ»_žØ­n»-ļ®Ū Wž×XūÜ }ōxuŃGįMM@W—ž\XØ;wj!Äu뀋.҉••ĄŌ©ŚQrļ½ū}ø(“ćĘgH:Ä$».ŠĻ§ĶČ×RY™¬Ŗ&÷÷/r RCņaĶ÷%—B֌‚=fĄś;_Ą#§’÷ÆŲ€¦<†{@öńzØĆæŽö;žŽķ†5EXRŃKė†a}Ż4UÕĄ6Bś>ļGœä¢śēb ° @>­O8‚Ū™B‚¢€žē(&5‹ 5ŠŁuā”!ÄĆā,Ē“¤\ijĝ ö@ HrøČĻ ą·1¤§’T……öHʈף@1Or[ŝ Rš&y0Č3„r'—Lr„€mŁÜP6cŅę,* ²„€N–ūʚ5ŽÖęōėŒs„gĢļ—NQ[6Pڃuvwįņß’ūZ›0cÜT¼zėßńāļžŠ‡~v' ĆŲŗgī{ń‘xż#¦ĢĮe§]ø÷ł‡šÖ²÷2čūē^ƒźF¢„£_šsīæęOųž9W ¬(EY;ųĻaŸ[Ńæ÷¦~Žą?×8ąõž{8”ė9XøvA<–Š/÷~-g™¤‹r‚t[ŲRæ/.yæ~ęŪhlߋquÓ0~šō¤Šū¢ņh[ÄøAÓįJ’ų(ö œ£ÉCfaDĶxŌ·ķÄė}”FCū.¼¼ģŃ“NgtLĘś=Ÿ`żžOŅŹ{jN§Ž€’äņģN§¬]dąēü3ŽĪšqcžUÄAēŸ»īŽųד§ż“’Š`3"›8Yœ«(1#KpXB(‹ ²DˆE ”·M“lĮ•ĆBĢB9BĖs[ͳ¦J^:4ĆP?WV>ę”1ŻŃšØ}õvus£Uą“ŁĢółq’śłŸõömėX·źĶ+#‘ΐ&f¤žūĘ©ēXuIKłĮÕx¦˜ ś%2N½.“VLŌČ_ąœ’ųzū°i÷¾7ķŲ“ī9’œ§>ž0T¦ö `ü –ö‡.xå¹²»µŲt;Wķ­wŃ#Ē\qÉ#óNŚŅT–DƋæŪ:ńiū©,#ć¼ųĄ¾'ē÷rĢgĄŅ„ErŽ>ĄÕW_¾łńĒ’ēā²ņŅŠ¦M[.œ8ńˆ?¼õֻ鱌=Y/t’JJŠó’VŒ5*PÆoó¶––+'D,G)šb'#OUłĶ›uĪū!C€™3CęĪÕńļO<\z)pė­ŚQP[«ÅŪŚrĘĀ·ASóWųڰõeź>ėóLł_xY¬ØHg>ųŅ—4ų?÷\ąļV®Ōß9öīÕ¬€Ūoī¼3™1‘§5X`5ō<µ`?Ā"nøøžśōGlp=ęØĄžÕ)·½ )ķ¶fx\WeyŒ»Œ ååŚūSæ„Ścå^) ŚA‘.P¢*ģH¢½Z-P¹œbc'ŹJM@E‘ĀsÄvˆAY18@LŹ A†Ā°]Żw£ńžg°!EĮ˜!Ø))Ź(¾¹ßVß õ³»`]öK4ģiĘv#„5%XVŚ+ŽĄ–A£ŠR=VA^šČ~¤5c:qOż;d(@1c€R‰ŗ¢Š)óü¾‚å@ĢĻcū=€s€bõ˜ĄŹš@?JIpāȑ®ÄƒR ÉįIcPˆ< %)„ѹ @†’P+S &%Ą#åJ½-'‚ŅZBšH(„dąńÆb*Ö¤@kƇ$hU(ÄŅ K€\fj¢Ų\(€éU<ā:TP*0Nz)RŠ‘¾%I’’1@A‘łYż™&om}3ś±Ź¢dN>cBvv@uśīŖĢoąiB–—ķ֎6Ģ_ōFՍĄ°ŚĮØ()c ­[ŽĖ~÷}“wk“Į5ƒpĻ°Ę{+ćś?’*‰™©rōŌĆšƒó®” T€É#'`P’ZL9h"›|(^]ō&,ĒŹ žs¬”g¼YV>s’^®”ēī;qŽzŅ{žóx\,½žēģē(Ūō0Õe!øĄŖK÷E:¶a»6j+‡bpæ‘ŲTæŪ7¤ĆTIiś²÷ē2vŹ|,ŽųÖļž»[¶$#Ī8.9źG( •ąÉ…w ”m'ˆ1|uī÷P*ĮćļŻ†ś¶IżšÅøčČ‚3‡Ž¹ŃÖüę#šŸOµĢ}÷-ųo}Ą’€ńp Ņuöd·ƒīæ|čŗ;ŚeJĢæD\š1rĮęœYÄÉ"Rcd1ƒE…(3(Ā 18‹ .£B%Lf›lf–apŪ( ‡›ĢUŒŌ^~éeŠĀ•ŸĮtōʘ3«»+©_±Ć,d-įrÖ]PȼP“ĮøÓq¤’BoŪ ž»Ņ–ĮE‹½õ‘­»–-•®óVqiµ)˜1\³H_‚žj>1ÅT|A˜^é÷™DDJK’@±¬æD "ÅćײŽÖÕ|öÅ“ˆ+īDJÆžSģøŚū×`¤LA1pLø·ao{)­ŽÓoŲŪ›†{u͈A5ÅŻMĆūµuźį‘#ep%’µapuuq“éæę¬|mM}eõŚśŠ±[6ź ålʹʯÅŅH‡.*cDPēĮü3“ ’SĄIBDŹóõōŲ)^ʔdĔ¾8ēŹĄe8¾č’Ō>žŽ€TNJĄ`†€įƇDĻ:ē”łĻ=óϚŽŽĪёHtč3ϼ<Æ«+śįGĢięķιņ¼Äg€ šP²sĮ€P~ ©a 6`ƆiĘ –öčԁŻŲ× ÅśhPžčļ©ÕĄ„ ꆒ€T€Ł*öĻgŃ6č0 ™³$Yg'šĪ;šŽ|š¦½_{m‚ś\ ³Ģš\u•f ttdK ōj’*čä¶”ļb’}‹Ż``j_tzķµ:Āܹ:3‚ŻCPpĶ5Ącõ*,Š÷ĶŠ€UŠ!č%sĆ·L€£p¼„`’«‘ģ†ĢN€• Ģ2†L ŁЌt'@{ \“ƒ ‹H(ņ©NŪplQ®’ś† lP…ż #Ł  LĄsõ¶ ż¹ ŹØ€,®€%%ŗ<ķļ,ƶ{žĘ–Ö„k*QZ]‰lBś9mÕ&Č_?ˆčE×£aį ģ`C…XQT†+k±zšHģ< ­Õƒ`”0 Ał`ßBĀ ń<÷©ĘXv'€IPł:<„Į>GĻNÉNćɁC8€”\0@6@c (d2 Éc)!Ó÷$ēR|QœžœJnr%½˜š?Ű»ß6č2«€‡xÜ "@é1ĒŽ)ˆ˜‚ņˆø€R’¤ˆIŅ9ř$%™n*{͉Ķ4œ5ūZPóźāā¤I^[ tG ż›ģ€ŸrŁéĀ‹ļĶĒĖ ąĆ5Ėš——ǽĻ?„ˆ­]ń¦aāžknÅ ~µŲ½o¾ł»ļ#āŻōŗŸźŠžøė7£ T€O6®Äå·ü·<~ö4ÖcīäC±~ūFüóƒ×0ŖnۚRZ’ųĻÜļgž{z Ķ˜3ś ŲÕ¼/~ōPZß_œśUŒŖ™„7æ6,Č1ęž6Rvę Ņ3ģśż“L «v<Üpśŗģ°Šuß®»³#5ę?ž“Ņ?ĮfœŁÄÉ&R6će‚E„(5‹ ‹ 5Mf “Y¦€ĶƆ- rB!øÜd®‘צfŌuņ¹gÓ±_&ĀåEM+ŸŻĮšŠĖD{ea™¤?‹Iõ»2!io‡Ÿ•”’ÜDø…c°¹mO÷śĶK?äĀ|æ¤Ø¼Ą0Ķ!Ś‘Ų 8˜ŗ±'§VŃ` x×®AzĢH;bĻożZĆ@š]ˆaœKN (VŸ)ĪI)œXLJ€”8l»'ŒŻ“żČQŪ×niŖÆŽŪÄ?× ŸüĮ–A#śµ5 ¬ŒDĄSŒīzūąĆ„Īõ'.ZxŃģuKXćŚ=ƒ×7”<żą-‹+‹m;>VE "„ ‘²Ī£? eŹąėZŖ@Åf,‘ 1֎œŒŖ‚Œ‘Rnl>[`Ÿ TĄCwøT‹eeīßŗō­łóßźŲ»·~–ėz‹-=yŃ¢„[Ļ=÷Ģø>[O¤° ܀ƒ#» [ ŻŁ&(ųOpäņ” ĄKŠ€ūb9#Õß{Oƒ^ßś÷×Ū/ĒRŻ üńzÅłWæžz ųś×õvĄ|ēĆ6蘒|‚dź_¦¼SŠß;ąqēgm‘‡sŒ^Õ’$CŠb߈ō<““ė×÷śķŠŚ•{ ¾&Ā~9Fˆ RA\_[L  ĒcDU”|( ¶ögK hÕA…ņH ŲŲź—!- U īRÓ† ”¢ŻŗnZZĄ0”UĄĆ@ T€ÖĀŲū¶¢½©ūīzŪo{#&ĀųӏÄ裓ŠoŚX†³ĻwŌ>\ ļ`?’6ŗ–®E+chęõįģ b[a ¶W ĀžžĆŠZ; ŻįBx!£ēk š5Į\ĄKSČŃÖŪŌ€©å€ÖŠ©a"«÷#V€ą0 HĮ‘ƒ€ėø†Pƒt]— !ĄBPŽ hż遹øL(ĘŁ Źˆ1rĒu]"qt”oŠ.KŸćJp]!į9–N®«ˆ”ė¹$ønĖAŅCĢAą¹0øP¶’®.ŠLz®dŒAIA`J:Šˆ¤Ē 7•›` ø~z@€ĄcL;ŖČә“”Œ½ĀHRPÄ%ČyuŻZRR‰IkƒóJD0>` īŽIsŽšŸÉ¶īف­{v¤µżÖia̐Q°ß»ķZ“v]x±×1bųõe×¢¢øūZńķ?ž­zóé·_ÄÖ½;°|Ó*œuŌ—pĶWÆĀcÆž7?~{ś rćŽ,…YĄ.ėå\å Āru} wč\Ž…”ƒōüē,{¬ŽCßõ­;ń›§ÆĀ©3/Ĕįs0Ŗv"–l|ö¬ģ±ķŒQG欣ß@aHū¶7nĄ[«^IJĶļbڈĆQ]6ėw/ĒīżD ‰NœzŹ‹Ŗ“a–1õügµĄu'øć&RI¼°äĮxŪ©Ćę>ŽönB,0ÖwæāĢ}"l×Ā+Ÿ<ыćfŁł)ƒ’üŹ>_ą_qµą™…ie²%‚Īū¹Ž¾HvšOĢĮ! žõŹ?ēQnP” e1N–ŠJ’Q. Įæ`67•# Ć6„r„©\ qW„Čc ŁFGžLĒ~[øjT+=ŗ³sĆĘÖ}öīĪ:£“ x¦©CźR©’\č“īS’ƒ«–AŻ! ś)øjż;;×n~ē¶ £Ž}~šĄ±g†Ķš¬œŽæÜ ÄŪ~āąå¬ ś©‰õüƒńÅķ Ø°˜`*ˆRōĀüżćIC–lXūŪS,€ [ŚųŚ?ę’kÓŠ„|sĘÜe;kĘ}ķ”/Ž_Ū“aüĄ¦k÷T ŚŻ^T{ģ˜ķĖéUG²ņ뇮^żęĘ!5£jb?Ņ`Ū_Øčɲ'¹iāĮļķę0•‚ЁņĄL¹‰?"ž‰#,BŅÆē śę›Ļ<ž•Æ\Z’Śk’ŗQJYōę›’śż1ǜvķėÆ?ū€‚ż£¾] ¬")ÆĄčJŚnP^^®2 ‚m0¬‡/žæÜņ”"{Ši`48 ĄŒ<ūLš¤i’¾`ŹpO,„ļohAĄ˜)h<µ Ąhšæzy4ų¢o©’¾ł[¼ ąŒķ°©IĒ÷÷d#Gwß }4šÕÆź€^˜‚ž{ ē« zü}é µnˆŻMoŠŪ“ĄS»ģSz_܎Ō[īĀ€*ł”ė;Ō„ģ+©„źhN>n#€‚f °Ŗ»#QVX µ²±T@¶»éį1š *Lčl kėzt6ļľÖl_æ ėoųģw¼Uł’ß§ĢīŽ–›Ü$¤B$Bč½" TEi_@{ł~õkłŖˆ]±aA”¦ X!Ņ BH!¤Bzo7¹mw§œóūcf¶—{SżłšŗdwĪ™3gfgwĪēó<Ļ繕AĄPk4~$CĶ€~M4hĮ1µ£»³‹`ń*2ÆÆ„ĒXŅ@·”t¤RlS 6'S¬ohaƀl4ŒöĆéé??‘Ā(&Ę9~~žIÉŚü\ćH€z$„‚€ÕŚ„ĮŗQ ŲK…5A ½WHį€ˆˆˆĻópǚ*Q  ¾/‰Ą¼—öI6h›^4ޤ“Bß©s$¾/Š­…ń}+ń}Šŗ. >…$iŒ> „G @Ø ą€²B‰0Æ@b >ŅxV€0J+Ą'ŌĻ„!ƒą[!R֊ĄŃ ŹXA">Dj`¢+ā>ŗt‰ķń<ēč1£ ƕ‚ÄäCĄŃų+V„ŪJ/h½5|/Ā{µ¶ńw^ĄÆžv W¾Vq5’Įs.ćØIS1ÖšÅ__Ÿ’±ĶZ<—ƒ‡óé‹>‚) Ai=“Ϲ÷}ŗ¢"T©ŗoŸĄeńŲµ?£Ž »žĖ»ģųŪ;ŗ·rĒōø÷ł_3¢m,;{ l%ūŽ2‘ĖOž4óV½ČŽīmģ7dWœüΚz1 ‰¦hߑ›ó)G’¦¼ŗźE–m\P×GĮ] IDATcĪ}’Ձtq‹xüś±Æ3aŲÖl=·}xŪXVn)š Ds>{ꔄę±eg϶𬠤ß8š_ē¶/zóV’F'Cšļ”ū‚‚Ķ]tß2£’Śųé!š!ų§ü EV*‘ŃŽĮæ#³Ž&«”uUŹŗIGeW%¬/SŽē¤¬Æ„ņ<;ņŠŅ9øŽ®ž,ŽöhH¤ŁŁÓŹÜå‡ņ»'®`Ćö<'|́/rĶ;~C’ę$,Ū;ŪxzžIÜ9żr2nx®W~;- Üųą'‹Žqõ;~‹hnü*†·­ē#gßÄaćgӔźfSū¦Ļ;•_OūpŁ5kqܘīeK†vu˜–ŽŁķż8.ƒ’BÕ’l6‹4n‘^Q ųsÆK“Œ,{|Ղe’čŲ©ēķ7pĄŲK•ŒS{•Åõ,y.DžūŲTÜ`įb;,ĶEś—”Ė +¢ü·“먛ž=ā„éTóŚķżęŽÜÓ¦ NæfóIć×üłO³ó‡—>jĮ†Al4`T’ε’sꜹžkJłĮ9“WUĮŽĮB«ŠX@!jĮ’Ŗąß‘Ž!صgŽź… GĖ­Ŗö׿ŽńųW¾ņ­UæųÅ?u]wč”)“–$Ž­Dd(ˆl­dŻ%ļKÓĪ·Ö™šæ‘õ¼ĒńBĄ'ōŽwswņ#uæUóēĆŲ±”*žęĶpŁe0{vŽ|ž{Kųn&“«Kż-ˆž]Ūeļ€ČWBŲ Üœ”'|õĮžō§Pčš±ĒĀŌÅ’N9.ŗŽłĪ°"Ā;ß <Ņēįw’æVėŲC‘oD@=ŪQƒGbéE@W¢)Šhlɓ9AĄQ…VHb£œNlc AĒpz¶ndū¦õ¬ėngYO7mi«¶ÓåfśMRXĀļ•Eāé%éšķ°#‘¤½¹…ö~ƒŲŃ6Œ®–62ƒ‡į&R˜Ņ˜„±A ( †ÅQɈ(õņ7(lwĮżR- zę=‰<)P‹ˆvŅ`,0"`“!“X“EöihŠ&ķ!=Ļ'įhė‚Œ“"=u¤Ö¬ŠŃū˜Š%$€1VĬµŅ¾•R‹µĀÆF %r$@^CT ŒPČr Ą„£@ZXė ß ‘JXį"‘2®@:VD~aA‡q xĻ®\PJ 1q(…æ¬Dćv€ć'ŠtžöŌCWó‡Œ?ˆ_šAnżū]¼“pvÅc~żŸ§1ÕĄŚĶėłŁŸoŽkąæ¼½vŪ.ƒ’zÖĒ_Ž^ƒ’zCļĪ/~-š_ļP}8nO¶«¦ēą‡¾)$½|'¼rO®ć¤‘‡qéIŸ¦9ÕŹ ‹cõÖe %՟Ó¹Ą<šņļŹĘ;żwÓæq Ó꾑žL>…fņč£=h< Ö¼ĢŹ-‹kŸcQCå+µ¾}%ėŪWķ{żå :všL}™L_ų·jG*žG}ōŻ'šßkėŻW•ŠßØ7q8 t ›„ŃåOÉ`c§ķžķ ?čšl=š/dXęO)²›UyšŸŃZ¤µ"£”H;ŽČJMFk›Õ NVkėj-=•°¾jp\“2P cŅéŃżšKż¤œ c‡¬ä®'/eõ–Ń hnē¼cīēķSćcæų%KÖMBŠ>qō"~ō×ĻЉ£ńĮ3naųĄõ|㮯0nčrŚZŹ=£ć‡-Ć ĀūQɀŸģX+øł"ć¦1pJV^¢7 ™Ü¶cŌŁīõļģŠ‚Ąö$„41žs 1®B[ ž£uA)ų/.~~īżKėŽzžū Ü÷bG$ŒŪfµ‡@øšŁV ž ĆU-„"C¢ük,Jv SltBįæXßšĻćiO7“H¬żõ GüķsŸšQz­.=jɊKŽYņś3KGśēk£Ę$¤ń?zü‚yI˜Ņ/†”ĀŚH.U–l/Ā2ģ…JęCł]ĄéŠS6sc(‰Ømŗ¤ü ćh‹W¼’õ×iɘ1ćÆųÉO~yɏ~ōķ…ńų{Zķ?¶Įƒļ©”ņ·“õÖ{{žć°ņ,a~łV‰ƒ£ ­åńQ‘mŽ ÷ÜzśWÆĖžw^®9X»–žµkŁB>”}%a†eŃėĶ„üĻ^šn—Xł°øųÜī v×]pŅIšŌS”čŸµŠŚ ét؉šīw‡HŠwJĆ'trÆ&ŒXŲHˆA÷X€R{££&-ģ«õ% `Š&l÷āķĶ„µC+±F’ ėjD“Ä8C°-FŽĘŪ±žėŲŽ¹“µķ4vī Łwit³¤„Į±ęÖ M %®J’mHŠ“ģGOėŅZȶĄoFŒŹū©(ä?P?ż UB(čš}_SŖ‘½MˆI€8Ōæ7$@x(åT%²YŸdR‹8Ąńócćł 5ĘėJK"ŗ§”#Œļٜ¶xŽˆŽūŪš}¤Ö0o„ Uśr䐁/Pŗœ $”Q ­I+±Ņ/@ųX“ĄĒ:F€$Lʋ/LH d‘±Fx”Cea "@Dó I›õƒÄ‰ćö-]­$&€llÄ{u~Åń֗*SXµq ʤ\~ę{¹ńĻæ!(ų‘knhęūż*J)^}}!æüė-Ēŗšäwqō¤Ć±ÖņõŪ¾K&›”ō'”©”‘īt¹rź[Vń掶/ ½Oąæ”Qś¦××£ųÆ9ēć5KžUhPB1qd(ßóģkӊ:®o_EŹi ķvóą¬ßēv?ūšKI: <³š!6ļ\W4vKCĪ8ä"“Jšō‡Hg»PJ#…ā=Ē|˜ÖĘ6^[7§l^)ŻĄįćNāÅ„clĮý ųÆvN‹ÖĶbŸ~#xĒ”‹Yæc%év†ōĮÅĒ}2,ųŹÉzéŖ×£×ąæÖ}W„!?v}b°žŲo1šŸj”sČD¬*_*kwŚ®[_ņM—_ žƒœŚ%š/É‚„EF+™QŽM+Gd„$“Š2«ĀMjėjG¹2i=Rާ“6HJéĖėk!ģ6säxTõ ?}Ž©¼ŗr2yžBnżļ𕋿ɕ?ŗƒ8·ŪZĮ}Ͼ€æ¾p ‰4§My‚ėļžæ\Ÿz6jš†·­ēćæü³–^·ĆążS¾G[Omķī°IæŪŹ‘±`ø6~ Z×5ÖĶ=œ*•†ršo Ŗü½0ēo‹µĆ׏ŸtįäĒ]*T"$Å-JŹā(Ż‚S7ļc" °`.]€0>7D‰÷ß*ņžÆŲ6°éłvŠŠ-«#Äć‹Ēņ™Ī—ę“5÷dK÷Ą‰ū­ŽrҾė6k‹ ČW‡ŹM¢°ŲŖŽ‹¬ŌdUļi9DUPQ TĖæĪ(ĀØˆĀˆŠQ@=»ņŹ‹6_}õ„?¶br¹ü™Ś”@ccƒ-‹Øik’3ś¤F“ńæqɹM„žēĄ`įõDH8…Ēłą±Ÿų †żāń^y…4”Ēz”³u3”—u4īźh[;ł’7‚±„Ųc;ppŅ1cŽF‰U“Hh3``āŸLa“Fh{żcBj±D–”ØāŚĮŸmoSö”*\LŌ'āqˆĪG¬ŠXcņćĘå’LÖG&ĆÄAĻóI:ڦ)L@#¬‹OBź €—O!§@\"§”‘/|„ūDD±FِP a׏ˆ0ŅG¢u`ŒoĒheek„óž Br@b¢2‹‚8ĄGˆ˜šg®]m³&Hœ>~?Q‚āõČQˆTŽģYŲ zĄ^]š_”ł•e󳾝7ņ¹K?Įßu9gż6žēĘ’cŃŹ0”ł«ļ’,#§+ŻĶnŗæĀń‡ Ģg/ž÷>y?3Ķ”“$‡;æ|óW¼Ęī¾1W} 7Ą²ź)Ō;ŻZ„īqkl܋࿀/}³·ĄÆē}’‚P`ĻX‹téĪvåŚĻ>ģR:É_gÜIWf':`4ĒL8“ŪĆ?ęž©lģ³§FäĄ¢‡ŁŅ±ž©ćNą¼#®bõÖe“6¶1oՋ¼¾iaŃ$pŚ!ļęķ“ßĆ>­#ųŪĢ[sēSū|Ė7M›{ĆŒe’”‡šü†=[ikŒ’;Ö0cŁ5ÆGµ¶ŻżŒzžė ’&üZę6¢{šxåĮ­žŠķ¶ū֙¾Éšźą_äsžĖĮæĶ %2J‹Œ£dZi²J‰¬–d’)™UZø‰9šÆKĄB c¤ž2¢·ē³³»•ßüć¾~Ł×9`Äb^[{`Å~KÖMą“)O …!°½É‡¦TˆŖāˆ€zę4 *Ł: ėvōĖty B44‡×¹+ ż*ēżW ż/’I)̤Ցc久yU+¾tÜŌ+Žlė7ü=ĀŹR[ö‹Sõž4+u%%•Ö,ˆpqž­GN>Ś3Rō„—^^½½µé»Ÿ8öGO}č7ß5}†Āb J+kJŠN¼°×ZˁDb‡å ’˜ƒŽ™“”¶^˜@q¤Ačż/·j@S[UŌß/éė8z/`½j @{Å­cĒŽ-˜Ć“×@ū×¶])G/˜!ÄD›Įēp`”@ą B¬ŌL(¢—t6‹¼į†Ü8.į§±“ho%“ńßVBb ‡ Té|CĢDĒŽ|0`XĶ=źŲkƅ{Čv‚’ń kÉ+’ļÕėŌŪ(€R;eG”’„VI`€‡mw„Q{K0×¹ 8›—Ä6ijĘx.¢’hüķŻČĄ’2 ×W‚~ń-ź/B7ńłkõ ½žuR:Ęż”Ę’¤,Žj·õz# ‘yQ@Ļyž­ļ©i "Š@*¬ #¬LZLēÓąh“¶…©! `š‘ (¬Š@¬ H#…•z½" Ņ’:" ˜šŒ²Ž„BĄq^D8 mp}ßK’]‹8ŠĻą"#1@FXtŽ@ƒK0oż:×X›M£±P2jŸČ>6öz޵ĄCYkxié{Ą|ųŒÆšŠ¬»ŲڱCĘĆQū捍;Öšō¢‡rżĻ=āJ¤P<>ļ>ŗ2;‹&8“’(Ž™p:·‡G"r 1ŃLC¢‰CĘĄĀu³Š&!€Öʁœ<ńüĄćéEļÕ¼«¬ėgłõć×1yōŃ8ü0²~šć&œ‰’æĻł]]°[×¹ż‹ę\’ęčųÆšx“ȁLėpŅmc+ß}›ķŗm¦o= RX+„¦ üKéŚčßrš/ÓJ‹ŒR2£4YGĖ“ŌdœY­¤ė$p„#]‘°¾NJ?’ĀIh!¬p“µ]>®hݧ/ēõĀkĒ0aä’ŖĄ#³xݦ÷ qŁśńģģnåSēžŒOŻō3z²Us擌jõÓ š3;ż¤ė:Źųˆ@aUAčædĖóž«„ž—Z%š›˜'gżīEĒk˜qüa=pąˆ‹@ q}įŽ…ąZFeż,aˆ}čęņQ†¹  ”0Xxbńų”³Ö ņ~«ēæļš­'Ž[·å³¦lzdįøĆ>pģģłū īģTZF1yLXĪž# f6<¾¹>)%Ų8÷æŅ%ŖœĻ3ē©(1‰“å°æ²…kœŹŽ}­•õCPda,@5ė“²÷æ|5ZssSÅk°•¼V“'łwĀ’}PĆ(¶Ā(€„įśKµĻOE’,ł{x”P`ļaąQßéĄ „ŚĖ¢qwaŽXšłóÜĶēT£‰Žxė&ŒŽXLXńuBńæ,{8=¢0ԩоÖĖĻćŽ=0‡Yõ»a@=8¤xŽ-måē±Ā(€–ā¶ĘęśēÜO_’D*Ü'įGū‰døĶI`›$fč‚ęžįŸźOŠżÉV‚ęV‚†FLC#F—ž_ü>~­¬.`Ę3ä™rßCd3Č ‘éFeŗQ=ØītĒ&œžčž.tw':ӎŹō Ü,2&ŠŲ÷’¼…•¦`UBöttÆznņc/¾2åżcMī Č'ˆƳRĘēzućy^čµO’«’ŚąDŸ‹—÷2»FXßßK)lP0O)…5a$@®æ‘ĀJ‰õx»Ņ”zq, XčĆVZi„%š‘BX-óćēƒ¬g„5Qh Jc$Öq„µ20Ņ«„²Ž”> $"Ié%éé„õuBzZYO%e(•$+‘u“ĢhM-2R‰¬Ņd‚Ögļ_š^y²‘li!yÜńČÖ>ŹŌ„–­]ĪgžUĪśģÅd=—1CGńÅĖ’€žżæšXé^œsĀ™œxHøhżĘķ? ;ŻM)Z™8fļ?ėRnśŪ­¬Ų°:l®éѬžūč)ƵoŸĄ’nzŹkķŪ;Žwš_óœź]ž:ŸQ_‰…¶{_ų5Ļ.šĘ>­#¹śō/rķy?ā“É„ŗ³īÄD•Ę÷Żg":‚Ż[yjĮƒećž{ÄUH”x¬€xnń?˜»źł\Ÿ‹ū8לöeöiĶ;dßyŲe$t’g_{8_Ŗ°VčISŹiäĄ‡åŽ óVæĄ=/ž’®LZ:,Ż0Eėfķ‘ĻØ/ś¾€’޵½uĄ÷ q¤Ž­x|ļ•õ¶ū–—Bš/0…ą_„9’žŅĄæ«”Ģ*-2ÕĄæ£É8Z¦•"ė$qJŗN’¬t¤«“xNJzŚ‘~R Ÿ¤ %ŒJj£c| JŌ°Ż­¤Żõ+W:s”Ē%'ß͉=ĆĻųTŸ®YÖKņ­?}™ƒF/ą—’ĆŪ*“¹…&tSŹx¶!ķ“|+ӁvsĻGėŗ¦ąļJč%ó,išü“}vĪļ^xņ¹Ū¾ŠŃ½õ÷³³‰øä•»ń6)°…pŖLųOP“*’ӜɵŸłņĻĢ”„“½ęų9/ør®Ÿvņ Ecäļē¶iYejr’TĖū/ķZh•p€”ŅŹĀŠ’ “_€Å±J•Ļ«Ŗ÷mė*˜ć8ÅcW)„žL&óż* ’z€E¶¶äż)§ü[iģJ@”Yņ‘.äĀł7†’7:2“4ƒø Vˆ!¼h’LōŽž|ŽŠ_jńłm&Ĕߞš&Ī©›Pa!0XD„k4¼įöÆPŚ –n,ˆčš’X7Ŗ2ąųEZ3ō}‰$“Ā8Öóņż“ƒÕų©š}„T€ĄGtx‘Efw ĪžĄ~ćs@k’żRƒ… AI}/ »½›ėŚYõŌ^[²­N‚ Ł€ßo¾RŲ@a©- X+Š+ōAP@iP¦ÖCHˆ¬/ż¤:‰õ²¾pČG$ŒoŻČóļ‡r>R‘ĘG ÓȰņOž½°D"R k+”‰ +EDmF!B Œ"ČM6Ž²Ę =² ÖF)“T¾‹Ž#„‡ōr‘ ŅBąZH‚‹Ą‘łH€Š'` –oߜłć\/yĮĮŠędQą…H&Iu,ŁWfc6‡ „/¢ՁtųĀD>ŠO¾ūjS ¬Žø–o’žG‡ŌæĻ_*Oß’Ģ4žu„hE+Ķuü_”R,X¹˜;łS4ē|ūąžƒččéŒČv“T€*U÷ķ ųļ=XŖ4öž’õŽ[ģ=žė·ź¦č…xÜóüM<4ū.µ eKĒz>{īp;7ņźź¼ÖÖi“Ļą±WīĆ3Å«Ź Ć§pŠØ#hļŽĀS ó䥰ž£9jæSÉø=üę‰oqŚä 9hŌ‘<³ųa¶t¬cĀ}9|Ü)ōd;yģÕ{«žS­³¼ā¤k?t2w=÷ę®z.×wų€±œ1ł½Xkxpöõ/Q½ū®Ö—Øīģia@sŽ„dĄ‹?:&÷žŽg.bĮŖƒś|łžž_łŻ7łŹ%ßäöĻ\ŗīų6//=¢jå4:ž±IćY'Č ]ĻĖI,Y×5Vēżū„%’Ŗ„ž—‚’Rļæ§±Ŗd•¼3½Ń{üł_=:¼eĢ“S¦œ{rŖ±’»$ŖÅHØµĖ©IYŲV“‡”`Jäś~}ŃO¾²aDæ!-ŁøåüCÆ}ąÕ ƽ¼j؁wΘ²ųŠćꅼ¼&æ4 :¦Œrš‹¼’& į·U½’įv©d®Kģ×w¤“Įnŗ«įzæąß¼ęR\1!ŚZÉŻ_X0²ā_źŠūßē ‘µ¶¶ZhÆXšßŁv—ˆ-& y@ßIū”£%įGÉÄdSį¾ń_YóV1Ÿ|IĀēoŸa7ÓvĮ,!aµšüæLXqu“}ƅžWÓ(LØe½Õ˜T“©¦Pj„Z„¶9»mS~Ž…©ītśmŹ¦½%XŲ·›āß¶ž ģ·|l+1¢ ŽĒ©” ąc{xAÉæœÕ+ł›ÖXÆ`æRšÆ4ÖDŽ’ŅvĒƶw­Ź<łÜ xĄSūpÖiĶ-Ī‘²„Ń”ē!„1yĄ]ų-…’Joi„{ųصķEa°ćõg?łģ…·\4ęʧ§¾żŃ¶N¾µ!ĮR¤°ÓŽžĆ'¦¾ć;ē½š×ćĘn. åQ8d*”+_”*ŃūAŌå;*ņÕ¤”¶4~P‘ˆ¢"óH„”U…ģBA&@Øü_|œ]—BĖRĘD–J%mńź¢D$øs—śoa»šPĶbp{÷{ńĻNņ";¢÷Q{yϬī’V’ÜA(Lų! 0›7n®†0 a)!čŸ{ØģßīŚuÆ/Ŗs]N©Ņ>”Ī~é*ķcJ¶—¦Œ,h<2|=pv€W¼ßÖ8uē#<ĆžŽ¼ž„©1w¾³ä©Ęā±JSb«• a@’Dž}įO–—Ø~}*„"›FŽo¤ķk‡óéœŹ³‡ēm͜]üšˆ¶fFOĒמĻĶś8ææxÆ[ĀŠÕ‹č·a3 /‹¬čį7ŲB¶¶RŸ °R…įśqß²t€‚ßų°O¾f°õ=Sš Öó<¤Ö¤$Mt,ĻĻ• ^)d؅õ-„xĘ/ž·&N‘z±ŅĀX†üēʍĻ[ #½PU§0 ÷, ¤ƒ5%é*) ų!”E˜ąH_X髄DBų GzŚ‘n¢AŗZćŖ„p7ᐑ*Ÿ Āt€ŒV"-»ŻĪĢŻ³^ V¶—ŽŹ!p&„3qUWä½öX—wĢø®»õū,XQ^6 ūĖł'žĄĻŽž®¢v€żGīĒ5ļś/~ó÷ß³tķė `äąaÜõÕßpŁŪ/¢¹”9w>GO:œŪæō ®xĒūŹföÉPšh IDAT Æį'Ÿśļ=õ‚ź§“›žņŖ{픯šö?¢Uę\ŽŃ`øéŃošĢ¢i¹m#ŚöE ÉŚm+Š>ĄūĀȶq¬Łś:³W<Ū>aŲ&Ž8Œķ]›ó¹ż‚ųŸ8āp& ›Ā¶®M¬Ś²„ ƧŠŅŠæĘłV޼zŪR~ųŠ’°tć«L},WōyŽwģĒiL63Ķ šóūŻ’}S~ģ= ž{5§½d~¢‰Ī‘W’6ėÓyŪĢĄ}aMHGGž °Bƒe=”ČŹügCš/ŠŌž%ӅąæŌóƔõµ~ųOH?’c¤6”…±JŒW-Ź¢9Ś£9ÕŖƒóēˆąµµ2ēõ©üaśeüģOq䄙02’Ū,EłRFŹŹĖĶ›öå£?’ė·ē+³ź\ŒŪe±! . Ö?„”’})łēÕŠP!9Pü肵Նm‹3/¾ü“æĻZųšz¼®XYģpŽ;†óŹß“eŽxŅT¾NBēsöED"ŒŠ•žāĻOĖz*łé?~Į†ĶE®­„]ŁŽÜŗ±£q˜ė+…¬ üW˜ØŃ¬EvĶU‡ų÷ÅśŅ½VŌævŹŁ‡J‘ž9Õ’BŪ­š€;rÆ ½awü—°=MZģŏ=ż~Į_”Ē’­ęķÆf†šŪNXpšKĀ e č=lŻ„ €™„: 3£m±ź’^żļ«@) Š[-€Žęū÷Õ I€ĀŌžvżļ8|Ė™f»yĆĮXŽŅ39k+Šä•Ÿ_¶›ņ°õH€ŲŗČkä¬$ ”(쓺d»Sśs°ŚĒ’ sü›%Īēå£=Œ§‡·ņI-i«4æ¾Ś>ż{É)|ö¾Ļpū©cyēŹ Y»ę­›Ź‰€X JŹVĪdōšŽõ > PØ 9=Jōr$@“=& õ|Ą˜0æ?ż":žž"’H-±„$@ąƒgEųŸ6&“±ŠĀ:J“AŅŚ<  ­_p‘q2­2£“ȈØÖ“tM:ū—Wś 6m©ō™Ø1cq¦†(-ƒU”ÖčH̵]ó®+R±|ŻJ|öѲv„×}ą 8ŚańšeÜņ÷;AĄ€ęžÜtķO5dél†ļßõ3NųųٜößēqŪ“»Rņ™÷~Œ÷žz2šČč!#¹āĢ‹9yŹqø^åUD_Į} żĘ€’Žé>‚’zĶ»U°k¢½=ˆ Œ­£'Œł9p_†ö„ž’#ö;™wó!īŸy[.u„(*`öųWt…œ{DŲ>°yŸ>ū»|ōķ×ńµw’– ޼ķ­·{GĻVnzü«ÜōÄ×yjŃ<»xæęīxś¶ü‘ß—č>õ/ģ»’ßÜ€×<ˆ®įcTyą°iOÓłóē|ń¶!Cą/ ĀGˆ@H‘’Hė )])„Kü§•£ŅB‘ŃZ¤sj’ÕĄĀśŽ#=§Ay*!+­ŃŽJĮæp°(i¤VŅS3…¹Ō? !,«6©Ś'.8b`X Óõōk,?LKC'é–ŠcģčīĻm½ŸńƗ„šßÓī ±Āändėŗ&QĀæ«y’„?UįJöMDd@ū¦<ūż{ę-žö¹“Ū9M…Å„r€½ČJ¶„ņ|Õóš„)‡_J{Į”Åkžė˜…Ó·u7øų¶s.ńś°…“{üµ1%Tą1jó6Č{M„ Ē+-ū—öŃV„ģZ#Ö’„kšµwbūSV„NņJłūįy”D4”y’‹Ėʖ_1(„l¼R%Ź’»gµQįĒŻŲŲŲēćKģ-dņ꣞Jų’Åb=€ķÆ»ųϦ¦lļ)Kzż7’ü[Hčą^G±@ā[Ā®#ÆPĻN©¢0!_jµ¢„Į6ThS§,`”Åe—ŽĻ~[øĪĪ/:¦dšh  ¶ %eaļ§ –˜-¦œ¤«— ą9X·uĮ8&=†'5ŖĶowmš†]ū¾rŹd^ŗö·ürg«²£čÜgXų¼Ž › ® PM@ƒńAVŖ P) PX'̱ń¬ĀIØŌ™ĄązR:Ž+<ĻĒqĀ\³ĄĮ&$ĩƾDh)¬ļūBkmm€RXßX”KŅŒÄFʹ¹mJ ćyV©Ą„‹H!±Ņ 0ŽŹõ+ÄéĀQÖzVø@"J-PILõ„6:šµPŹxIŠY A„ė–čֈÓr+“ųuxĀüDėY›¶p©iOgĒUŗĄWC† ?oĪlLggmPZ§„·źłGN ÅĻ9=¾ ‡»ņļć }$¾vĖwń!ą[ś2##ėfłč>Ė܄Ɗ•üō¾_³tķr¾~ÕččīąękĀ‚•‹3tZi–Æ_ÉĻ?қӨi½’õ†ŽTTX(9HŸ€tB£f÷šäĻī‰žÕģXåz¬ŽŗŒ§>ČɓĪįóēż”µŪ^§µi żĆਅk^f٦ł¹žGģw #ŚöeõÖeĢ^ńLŁ Ēī’v†öEĘķaŚ+w󜦓5ķĆG}“&¾“–†V~’ō õϧhĪ‚„ę±tüš§XŗoՍ½öŠWŲōo$ś—nC¦å*zžš¶ēŽ—ż Ć ĖüĶ•ł2‚@„åż<¤õ¤”®ø(‘UŹf…”­dFj›•Jf“#3J‘VJfµ&ć$q5ĄæŅ6ŠŽ’)'(’RŹB‡LĀn^WX/“sŽz­ƒ˜·āŖ}†Ų„ `cūPŽ6埤2n萖Ā0fŸUĢX|tÕq<ßĮZė—×÷±GvēŚL² WI(…±žk¬uw)ļæZÉæŲr”’Ś/L_Œ­‡üŗ#Ņ\·ā…Ī-ė_øoÄųÓ§ļ7üč³TćqBI‘+`C’ ŲµŠļ)©lģż,¼ķ „°Ÿ;ķÅyķŻÉŌóĘ’‘?~łÉūƝ}š°m^X9|ģkūO8q܆™Ķ Aa•ē°t_ Ā!°¶ŻČķ3Ö÷’ėń¶tŪåKGrķŖĪķĒ¢­ž ž(%m…L€ŅH~¤R¶N„Ą"+Ŗ P5 vE ņ…w~ Š›IōŌļRĖjå'’‹ŚŽŒųwµų·¦¼<ÜAX&š9` »Ž_XuąĀ0’§£±ē†żoē ņüŚžŽ8„Ź~u¾Ń“z™ PjqĄņŸÓöŲwø¾c3­įā_RÉ,ŃĀŁƒßĒ{ūæ%ĶżĀžqĄ™ ”@üŗšē+ C¬hŻ؏Ź%'ģĒ_ö&ųM8ņ@ŽśÓ—øaæN]>Ÿ”k—ŅœŻ‰ņ²łß˜Ż­ •#2•ćŁ8Ą/šīēŌż‘«TX<ŒoĒ0&°…‘ų~.Ā/Ø,Pó/Œˆ£'\ØGH)lDX)ņż #¤ ¬p„Eƒė‡„B ą£cņ‘2е"’2ė$Č*‡¬J„©ZĖ“Ö2-刌”"ė½øbMöį×^·~yĢ¢hl"qĢqČįŲ'ekö«łŗąæ =öŅökj)k›8f9’Ü>ķn­Z‚pĪńgrüĮį‚ōg¾9ž üš‹ńīÆ^Įś­8ģ€CøņĢK8åŠøéŪrŹš…sŖׄ5é°"‘Ä>’^ƒ„Jc×Ų¹×Q»ž+|²U÷Ż›ąæņ­Ö{š·żeĘo¹łńo2õKk˜żśÓ¼üśSXkyhĪ]¹® äģ©—aT@¬žt8óŠK°Öņ›'®ēéEgŻö¼ŗf·N’.SĘ‹ŖOąæś‰WŁü&ƒ’:·}ћ7ü„é~PUšļ-Ųh»oz±ü!…•łó…Ą ×Hé i])eVH²(™UŠŒ’2£•ČHdžéVŽĢ(eÓŚ—ś+ü“^_ĄæĀ )lRK“`ͪޜsŅÉrõ;~Ėi‡>ĮÆś(^P9gz耍|ā]?gӎ!¹H€WVL”1ŁĆÕļų-R„°¼ē„ūhkŁžłė×ŲĮĮcņDYæĘ.:ń^–¬›@w¦<µ"½cµ±ÖĖ*AZ%„«¬o,Åą?[ņŗVŽ=šßŪŠČÆ¹āe™SŗxŁćŪ~ś[w®Ų<ć®Ÿ}ŃĘėüāŖŗ•… ¢*-Ž”(ļß>÷éŸ8qöCRZóŲkcŽłńōĆ.xqÅŠ©ƒ›Ó[®?÷„' lj½’iKĒ6ÖfŒé~ĘüŁ?n˜’±­å‡īڶ g¹źo¾Ÿ)ŗŸTÅ3)h·Ž’Bķ…ĀN~įvmCŃæbóŹ^ų8Ž®zl·Bb@Y,@¦¬Kī3­V°Tpäȑ’ Ńé»l’‰Ų5‹Ó‚čßNBOżĀr|c€QĄ8B”ĄVBqJM±bœ"ᓯ k%l!LBYCčż_C °#źūVؐPŃ®£÷Q»j»*ųŅ]4..Ÿ#ü\B¬)¾9č|ī.Œm+PK°OU¢(€ÜĘ:Uś' Œ«”¾vlŗ™M#æt,ŸŽŹµ½ø<{Ō†¶1š§ēæz ·<ŗ€Ē|MĆFŅE?p’į³Ŗ·•Ź""QĄjĒ6ƳR:ƒšž^ƒ’zCļŠŖžėj7Ū»£öüŲ‚53Y°ff“‹ą3ēü€Å^aŻöå¹>'xż›2õK¼¾iAŁŲ§t>- ż™»ņ9–o)šōƒšŽp}[Ļ7° ×ŖWąæŽš{ą3Ŗ?ě žƒT ]C&T łČ>·Ād\+ R䔾#šÄ·HOFa’H²BIWJ²J‰ Rd„"#µČh-3RٌND„žøZI7Y öƵõūžJXß±v0ӗo7—„‘NÅåŠ>š¹\ŁæĄ(nųĖgyhę;‹ś(šÄ·O£'ŪČąÖ-¬Ü4–/Üś=· `¤TH„õ±BĄA€T*G   "ĄJ‹1*“#”ńp<ėćHŠH@śĘŗHŹX7ƒĶ/S$cĮ Ö¬iߖžżģlņ¼I䐖ā”&z쾨ÖV¼¹s°n6·½–õ” ąēž-ŽvøāĢ÷ń”sÆäCē^YŌĒXĆu·}/Żļ=å|µÄXĆj‹€ĀCõļ×?ž—­_ĪųįćųŹ×rŽ gsåw>FqźDł@Wy)«7®)’u¼°}½ł7uĄM/{ł›Ž{č뀒šs®1.Ōöž×’uH§¾’!ńLī}į&“Ź’ !9yŅ9L›{wŁŲ­mœzŠyųĘē”9w–{ŠØŠSŗpķĢŚ«ä" Ż;ę£×ąæÖõØŅ»Ę•¬ž+LšĶ’Ł~CH‡­t.~@Ļż ;cM`…,*óWž=KżEąßUJfEś‘"«5鈌£eF)2J“QŠlBˬÖĀM$pĖJżE‚½’F‰%ĄīĘ„65Ŗ(¦}ūp¾xūwhnčBɀ­ƒ˜ūś”teŠ‹’󕷱eē`4·ÅŚ­#™æź`S _æßē¹ū©K?lZł,^{«·ŒĪµ?üņ٬ؓ/ūYAæĘ6“ć„%G‘ĪVvÓt®ž•‘‚nķŠ™L˜ž”Ė Ēķ{*ļæRÉæŲzśyšŸ“”mŹk4½2ēÆė_Kžõ·Ēqõ˜–Ōøsµ“˜`luĄN˜.(ņō¹)ŹYʄ<Ą ׿ĢŪfæŖ„2BJcL˜ŚW Č ŚčxŲ`‘r^~¶«õ»ŻÕ„³c+Ž^Śöī-žŠčŽļŒ ²zŖŅ2•rU:±XX\ ńąSœŠšÖåÕ Ķ‹žļ8ŹīN€Š–C’@s>¤·Š~ųįoI‡ėīŲ€Ż³Ųƒo×ōĀ»i3az@ПŠÓÜLčėMā;Y²_7įoLaTłĪčuWŌīņņś vo"{¢,`omĪ’š6?Ķ÷¬erĮę”łÕˆ©ü õL:†Ū6!xŲvQ“M¶»dŁŅNų”ī¤0¤ <  (“ ŠM. QõK¦{’{${3ĮlÉź[ך_›¾‡7oӁµc$² ?Ų„ĮĘzP»<  œ( VyĄŒńlJ:ĀT%! Öą#Uģ…U2,9h Öó|įDŽnσ”ć›ŒÕ"®„5Ķ“€PģqĄJ%4ĀÄ$€ØAZX Xé# ‡Ø@ĀŚD¤³Ŗ…“a€$‘2¬‡“k„a,ÖZƒ°V`mgĘöÜ9{AņŒ cÉĆņ’Ń‘‰m$Ž;wĪllĒŽĀ–²ū”/”ī1š1ÖpĆĮĆ/>ĘYǜNSCKW/cŲ ”\uÖ%üõ釙ūś| „ą½o»€é³ŸeŁŗå\ųNHĮ§.¼€gę½Ą§oü"§vŸøą¦Ļy†zą’° S˜Ķ僝I‡L¢ą²Ŗ!|fō¶2@Žpqe€Z$@ šAąyą8’Ra=Ļ1 ĶZ’ ’АHū¤tŽĄó‘$¾/ˆH §ņiŠĘ·PāõSJ …•¾/„Ö¶””’€ē + Hc<‹vTLhĻBRß>†dō­Ķ„źÅ £„Į3Xk­ŠŚL˜écżW6l0[ÓéŌy÷ĶÉāä;!ŠūˆhjĮ_“ H Ø/¢e«ģūų¬§R²³;upŠŲŠėd¬aī’yuĮæÖš_Ź<üĀ£,]—_3&(¬ŒŗĘߗ>€;žqWQ[Õó”o‘åķ5:Ō’%ˆ«O@ŗŸQÆĒ~’«wÆļ)wż ?’ĒWøčŲpōž§sŲø“ųņŻ—pīW!„ä±Wļ£Ēķ*ŚÆ)ŁĢŪ'_„±†ū_¾½ę9õü×o•žéÕ¾}’½k{sĄæŪ8€žĮūcKK˜XČL_f².‰óż­˜HéßDJ’~ś„²®Ņ“BøB a³RˬŌd”YBšŸU2żÓŅdBĻætUŹŗZĖ<ųO9žNŚ émƒ”–KżÕ’Ę+e˜ÖŚÜ¹cs×Āčwč){’Ŗī®Y¶Ģ’K·Tb»““[ŲŁŲŒė$1Yņrwóž3€źcÉæR«śOWŽū['Œˆƒēßø8é°dź„/Lźß<ģ,)ō°Ją?ž|c~”)¶i©Š€<ŽÖŹl‡1Ļ2ō»Æų,+šO½Š’jŽ’S* w°‡6fµõĻ+ZäŠÉ¦µtæŠųßTĀō)h[; ¶Ž€’]µ¶¶¶ÜŠ%“öށß$ū°÷,ń~·ćæų}!ø/ż÷_ĆŽÄ(”xŽśœ‰å„ė?Į•ūğW/gŠŪÅÕÖš> ļmÉĢdŠ’ņcž«Vą±ļņ)ėń Ź“•šłlēĖŃ4•÷lJvŠ[$ ݃|ŪT®Sж§–3ׅKĮZ3ȼxĢzGÉč*lŪ-°£#ÜwßQ0vdåńKķ”Ćł¾“9ćÆĻÓŁŌLŚI²Ķ‰¢ o$€QX° )ž 'RՏ5·„Į*G[šI&uŽ €š]@øRˆHåxVś¾.‰0&ņü;Āą…€^:Āśž„$@nŸ $€‘XUJX+B„Da…I „ė"ń‚R@8łp=OX›D`„“2ÖE ¤±n€u`5ĀZ+Dōūem€°fCūöžŪ^ΦĪ?x?5ŖµĢ¦†@€?¦½½Ļ „üŌŲ÷ęī(Ć%-Ķįt|? [OˆOĄ…'ĆØ}Fązš){® IDATæ¼’¶¢¶š¾śhӕg^‚‚×V/aĘ¢Y5ę\XÖ9Tōfρ’zĒ­?öž’õŽ[uÓ’}i_×¾‚Ÿ>üõʀ¦ĮxĖ#¦rĄšCŁŽµ™g?\6Üé“ßCc²…™ÆOg}ūŠŖĒķ+® ¤k`µz=ś_Õ²ß0š/$=ǐmVńX6ėÓsļ¼Ą·Į TÕ|‰ż‰PģĻųĀf„RY„mV ™‘ZdTXY%«‘q4Y„dV'dV%¬—J،RŅ—IėÉüĖü'wüĒēŅŲ ƒ–•mXńĒūÓĶŸˆŌ}ńþįÖ¾üł {ĖĀm‰$ėRlģ?€ŽÖžųYB(ęīkŽ’ī–üs¹±eÄYĀŹq{œ Äõ’Ą€)Xh©*‚b­u֒y±eŸūžoēĮ¾:ŃsĀ}µ—½{óE\ōĦWÖbą$Ļx{-źÄĖżÆŗÅ%+VČEü§ihHŁŹU£ü’zößZĆc‹½ū…i±ē’-ļéÆeoVYĄūpŃo¶ńųĶҹlĻv0Ż.#ž—É—Œł'Mł1ĻA(XhqYĄg?ŕÖć»ÄĻĮb”ł©ŠüšPŲk8¹k67@˜ Š“ [XĀT€”‡­W0¶.‡Gü>įcK«†”E©aøœ‹ųĄœŌ/E±¬o[¾Žł~ųļÆĆæ§¾ī4lŪŁ }¾ņCųĘOįük ;bŠÆ’Ł’cļĢĆ$)Źü’y#"³Ŗśžīé¹g`øN[¼ĄDq]D@WYÆŻÕÕõ§«"ėzļzļ®ØØˆ(( ² *" ÜĢĄ0Ģ0ÜĢ}ōQ•GDüžČŖīźźŖīź™é]ßēé§+3ŽŒĢŹŹŒļ7Ž÷ūĀ'æē’#|õ»pÖßĮ]jꈙ}čNš)m\Ćōė)ø©ł;›†SÖ¦“.ń ™( uÉP6J¼.O¬”Ę“$™8`N|„Ć@ ˜MJRČ<“xēŹi‡Ņ콫+©Ó“nz@Ņt8ż  ™'€ŖšĢU ¤)¢ÄdØÜ)¼°„šC.hĉ/)|J6t‰­¤Ō”X“s6TęTd”I|Ž$ØŲ* > ŒŠCķ£  „ŖdL–®J)é@Цœ&(ī/^ūš“ń}«ÖSĒQ -Gæ³ļž#Rć®Xo³9TPÆŪÕÖĶIńÕāÅB.Ļ;Īx ?¹ćÖm~¶NŻĘČhF÷tN?ę„\YūßpŠĆpēä^Ż]3ļ,ėīżFŸŅlČēXŁŃÉś)½ !.ĢõcÅżWoOfŹæjžkź„y|õź®0²¼•öĪşyų·O~öóŃĘė,vŌ„łW&*Sņ×ŗ¾‹¹Ć;ėŻƒ[Ó;’ēīĮ ßüOTųÆb§Ž3?Ļęļ?ńÓ;OęöÕ7Ż–8ū¤Ņfj«c’›ē)2qĄŻhƒ£“ŌfØÕœ9sęŸ%&›ˆż•ų«Mŗ]6 }žp)ė%ąƒŌy‰°Lüćńēpä9_įgĒī=v“Ē>ĻTńł”öŸ[š7}Ō[łČüKųēŁĒp4ƒx.(ŻÉ C·@5 Pyˆä¼H*Öa†ĒTKŌZ=``;ś€^Ž7ÖqŖķ?¾ ļ·_ ·^‡}eŠū‡7@k+üļ•pćpćmĆmz ~v9\’MxŁ š³›ė£žĶšJī’38uėözv-]›7Ž–ƒ-h|µgמ"’š>l”ś\łsBę50‚”ājI€ Ųo†pAEÉ9õÕ$€(ńÕ$€Rų¦I?’Š”8£“WJœÉ9«µ²¹¼OŒ2‰ŹłŒ0*6!Q`T¤ QRҁ*”*šP•”QåIƵ–’Āć;–=SüÅ¢§‰ÓŃśŹ"č}÷#8ę8¤„eTńøą‚+åæō^6mĻ2ų^zŃæ0µ³gtõņʛ_q=Ż ųöMWU»ńAŖv½łåēb“aõʵüś;xéQ'sń«Ī§§£{t£¦WčėlžUōÆĮ˜wĪ›aō®‰ƒ’ZūéæÉ×oż(?s÷ز×uFܹųF¶nn8¦†Ų.‚’†Ö løļŻ ž›Ó®š@©s}³džuž;@²h½ļ’ŚŻ‰ŻP“ØŹjæXDR/b½R©—LŻ_DÅ¢ˆ0Ŗ,š§"„¤¤µ””–’6‘b U10”B£Ɛ¢1”ĀPE¹€HT)4*Ń”Ou!ˆsyŸęµJTž4ŠātĪ8sšļvü{q®PP¶mŗlŁüß?qńö“x•wÉÖ?tMRÜņŌFcx¦ŠĘ3S¦³¹§“HZ‡QćX¢ʔ‰÷ŹöĮ’DSžUÆžŁČ`¤ė-ųĻ·ą+sĀxĒj{ēc—Žūą’Ļ~z0ŁņS”ėAŌĢx“ŒĪKH—o*>õķūÓ·Üüxņ_ęµ vŅõæÖF kÕŲć >‘~·ū¤'Ö·?ńåżŖŚņ”ѐ_kķw%žwXkk‹õ=Vė³ń’ŠąŸ= dē ÉV} Łōæ"“W‰·ÆüżÕ&Įž+/€×|o‡†óDøMąO?C^Ź’ćŠs¾Ī7ęœV߁ØÖ `ŪJ.:ŹērūŒ‹ł·9ūe/„) >w,ż­3¹Šg$¢ų~>Ņցߓ֜Q[¶o/ә)ŸėżęnxķĖ! įEGĀņÕĆå/; ŚĖžRG ė75sŌa»ųµDģ³u=Ó7Ƨ%‰G?{Z·³$ĄP›€$”B ß  õŪ’x„¾B$I:’HR:¶å ÆüÕŌ·óәWœqݬ«Oæ¾÷ß<ŅrŠd‘ŚŒöŠõH€ #|(Nq>MœÅ”qÕ$@¾@l“HĪ'&P±ÉIäˆĀP"£‰Ā„@gé¬L9—µ(*-%1RŅZ"÷䦍ƒ?xšI·q°®ÖŽtv{jFU"Ż]’Š£$ę’ż1śŠż¼×üņ³?ās—\Ź?œóŽ,Ķ_¹aW[ēxߕ·^ƶžģŚ,ųļlķąu'ĄUæŗ6Ó 8tžŽóŗ·óŁw\:²Ń$ƒ’ę€ōĮ’xÅ»äUšē#śWŻv¼šĖÖ/‘vR€yS÷ēȽN¤Æ“ß.üŁXŻ7`3»Ęźtē®õ$(žOöÄĖé}3”Ų³7^FOi}büÅ"×’żūSūlÕ_°¢†TžSQ’PūC“)śGZˆŹJ’Ee2"Ō•”h)źœ/šP% R!Q˜ĖÄžt^—rå•]āĢķ_„Ŗą‡Ą ¼uĪś ų&ž­· PP®­#Oļ-­OŸłĪ÷½wć„lßć6øéiæę¾omÖšÕłĖŗ¦°fź śLĻpśæ±D’ ¹øÄż×®ģWƒ’fSžA}×’±ĘŌRg~8čV§·,ż×ūŲü£/¤¶x›‡®<©qYę!£Ä+•…īŁ4]SŠ–ļ–^ż”śÄ€é{7>īĪ ’:1P=oÆ^Ō;œ· Nz܃9Ż’#ĆÓ^½›”’ƒ`o€ņ$0— ėŌŪMR€ üEzü9jT@ų·ó^²`!Ć^É\·KŒę«Üū‹üRŸvĆZõlgOū/~ü¼²żBąń:s޽Ą?Sµ’) ā,ģĪ©ģ×­ü×/ı驏 0żõ,üWxĖ{ńœ²ć&V§°xweص”¬ ōūQūusžxżTlż¦,īŽģå›į{×ĮOoɶ7lĢ@ÅŖ…Ń ˆ&˜’uv/įkŽēČ[dł¶ <»cłĀ(±¦ŅBF¤ †4Źz‘M ^ƒ$@ऊōTQāÉ€§¬‘ƒ^'ķqI’” 0>ŌŠ¶1l{ŁS¾nRŁÆŅ”Łū/j?!?^śą ŪīNÆźeØd 0N9ÄY/.Æ/Jįq‚S™n€(ńÖy!MŃĘP)pŹ£¢­…jM2Ą'g Φ Z…BhHā“s¤‘"ųD$š€Rˆöž¢QžŲy'ŹėÄz/މąńńb½³āˆ8æiĄ|ļOOäNž?;|ŃÜi£ĄC`;7méć ĮŽqÓģ(^ŗ7~ām¼ó¬‹9ż˜—qś±/%Iž§*Ę’/}=­…V6ļŲŹnūqSĒ­¶ó^ņ:Zņ¶ōmćĘ{nj;³g:ė6ÆŃįDtÓÖ(­>Ȅ€ōX+ĖMÆŠ×ėāĻKōoÜ2Ø –+{^uäß""ÜśČ5”’:ØDź~;MwŒMÆŠ×Łõg(ś·ö0Ų»^uĖŻĘ~?ųƇl²¦ß!Ś#8ÆÄ Œˆ÷G‘JļŸf’ˆ–ń±2‰"2ZJŹØH””–Č("­(•=§b£UbÕ¢c£TbŒO%ÆÓ ļÓœŅ©ä µ8 Œœ·©KŃ9qĪ‹”ø’.Ģ„bZZ”9#·cĒ–Ūļ]æęąCņs^ł’ɹā7õ³ģęļ_ZäyŖ³‹eSg³±s„ ģś?žč߮ʿצü«÷_)ož'čśßąź„–ßRžæņŁ»¢āö»nŪÆūõwwµžrBhZO%¦KR›ģHŻąoīyģ= ōŒģ{ÆŲe÷ ’ [ķ¢]ÅŖłŚŪ_²økķ–;ęä|מbG{zV›ÖŚy$4…FcF c7²cX{{½€’wģĻ‰Ø€žéĄ+Ó€£ČĄ#į ¬īn60œnÆ:’ƶ &’I†×īæt„¬Ų@aćžĆ÷ióp`y3žq·CĘUtī¦$ų­’›Ź„õ¼ *rvoŸźßQĖ$dh”p 5ĻŠÖŃĀéĶžgE95hšK±Žx{Äš¾ž¦d›·sNeߟ’žŁŪ6³bp [’n’| ¶V 6=ą.“I–0' ²wNąš(<$‰0D$ŹĮ(ą„?v_P ž‡Ģcf?~pÉaꁞö“4 ąŒńA ‘©(m¼BüpńŽy± ąēåÄ7Eˆ  Ī'‰h ņʧ„rbUNĶ«0ā})§Zš:ņĪ£¼ŲŌ['^gÅ{”ņ‚we§²KķpĪÅw,[iWmėϽś ¹Ŗ5õ~VÓgtt’.zæ-›žŒ?ćįŽq€eÅÖnz–_ń¾xķóĀŽ@kMR&”ҼįÅgpķoF1*ÕDZX.Ģń7/={Ø}” ĖĶģžT€‘Ćźhiē=Æ;7Ż{+.[ŌĢ”Ę>įńĄ āš(ųoi÷0ųÆ÷<ųoÜwcšĄ5÷||5÷>õėŗ}Oü ¤÷ųėšµ“ ž+B3ė—{ˆ’øŅńøu)™Ź?8Qā™āĻ¢HÉāżQe%±Ņ>‘H!DŹH¦śÆ%2ZE#Ņü‡!±•£’ š‰Ź©4Č«4eG†ĮæŃ;ž+ełP§¶EłYs [ū}żŚAŻŽŸyā<Ēęm²›’u0ŽńĢŚ ĒS­m<1u«§Ģ¦Æ„=[żOō/'ø]qżŸŒ”0¶ė#š_j®WHš`é“×näś_/č}ýūĪ;ł„¼i;"Ž£»·Ēßæg햻Ӂ²lą”™YŪńBZŁĪ ’ÕŚeć”Ļź~ńjšk7īx|>i<diJ3ł >Ųė%ČēóMū~FĘw4²„@Քļ²ń®ĄŸż9„(2ĀīµĄõĄ ąŪĄydߏXw“&#Ī>OF\¼˜A&Ö^ #•&‰£žtF†A5•p©ś›“ģŠķl(@­5bAkYÓ§€õs(ĆæƒÅū¾!Ó éƒ_ ōLĻŚLIš³Īe©Ą3XŽ+ ņŲŁP€z6Ä1ņ’}9Q õƒėŲ”²†-õ˧N£aĮĆÓ§6Ū{söāŅé³śéŁ“…[&:j]ż+¢€; ŖźU‡T4Ą“ ]ļ$I²ģJ¼ÕĆa¦E\š$('Cį$)­ƒęōĪO9é:`QĖaPåö_[§*@)¼+Oų\ ›–ĻiŲåæ21“UšåcyWž¬­%Ø LųDÄū‚8lāĉ7yc%ŽŠ¹±aN„*PI.š‰V*6ÄłŲ™™¢uN•‚@•t¹Įj#%HIRŅJJJS²+¶l¼ā¾Åé²ĶucP„P xį±čżD©Jdć>4š’Õ¶­;æyšN~u’ķCūfvO£§3c“Y¶°ęŠć±³NxSŚŗ,łńļnQVńX[,·U¢ų··~˜³O>“æ{õO£‰sc¤MŽcc’ńµ‹Ēm;qܦ«ŒžĖ¶}p 7?ōœ·cWlš’ćuæ¾£ń»Ų3ą?Éw°cĪ‘ Įæė‹č’ΟҁŸ>f}JŁå_†]žEYÉĄeµ?EŒ*ĒūUŅYÜQŖØ EJQŠA ŠA ŠaH1 UÉ™‚Šry)”Ž‚čćOA¦ōŒ*®S}B6(Ók30öÖWĻ~³ēׯXg—Vš ^ńF®’żMģę8Ā ’[»yŻPzń«Īē¤C`ĖŽmuūžųobÅŗz£łśqĄ’˜c£_{õæiƂ’c­žļ”'D„lšß“WAsĢGÓą‚ž#ūcŠM{L>ų÷J38u>³Įõ|Ó'7śžÆÜ•$Onrˆv^ἈĮ"¤Y¼?IšĒ(‹V‘ŅŖ¤u9Ž_IQ#Ec()-„ ČĄhŌ`dūMØ¢0$Ź—•žUĪ'A^%AA'A^„Ś(kŹą_kq(ė”õąA9„šÕą_)¼Į:R˜ų§œśŌj|Š”ģōy…¾óó+ķćłf’ŹŪķŽo”9³QK~ž¾ķ+īX„}ęĘKX±ōN¶o\=¬ź?–9Ͼ•ĻJ±†SĀČš”Ÿ›ĘūĀYŲū7¼Ø²æņ0ßu³4"YĆŌ€å·ViÕNģ7”\p6|ó‡šw‚7½—Ģó½lœ›·f)žŽūqxĶE°ØV-q7Ų±‡ŅGō n§=*bŠšŒC4ņ€ęI€ŠY…WuH€ WTł Äg©Ė$@ąĒ|lž/u±õÕ$@&ō4<žŹ„ngHŹ$@„<ėq$  õ°Š (ńhš ļD|¢«RåtØ]hŒUsF¼ ņ*Ń9Is”‰UĪĒy­"cLlBā0ĢĆ\–&P®d*Ų%Ø¢1ŖØ E1RB„¬Y?ųŻū–Ųu}u%™¤PĄu śŠĆ‘ A˜`Ą²aõ:m7nŪÄ„ßūqó¢Gó“˾Ēå’ü妎ūŠžŹģŽ™¤6åź_|BĶčž6”ņpķęg‡šæhĮŃ\ręE¬Ż“€-;¶Œź{öŌ™|÷_ž›æyÉ9Į8‘Ļšßō˜`RĮ’ŲĒ­·krĄÓćŚķąæÉćŽ×dD’&ƒ–)ģ˜ó¢Ž™Ō‰4Ģ„žn|Üõē©ķKJ¬WXD,Š!•„!ń¢b„ˆ”R‘(J¢%EQi5ØŠFKł¹&EČ  ¤„jP"R sŗ” ˆt^EÕižL^„¹¼¤&ō© œĶ嫵8r𯔲õĄærÖļ,ųO€Ō€ ÄuõѼ¹­³ö/,÷Oś»›śŚķ.±e’l`Ć’ųµoŪ>°ī•AĄć…6źžĘ¢éóX;mośZ:†]’hNōO÷ׯS+śW '3å_Ó®’0ŒžĖÖ—½Mkāż›qżßÓĀc­ž×Ūß#ūļčķ:ģž(²‹”ņc.Ķ7›0 C_×’<믛̔l›`#LŸ>ż/f•,{>jąUĄwń—‰ČĄĶK^K–ĄŖQÉ(ʵć€kÉB®'óžč'{¦>_“*Ą’Hą€×‘ 6kB 18‡ģyxš-ą1²p¦åÅQ&Yć2v `ųöŖiČ>Ē“>ž½l…VEš…:Ӕ½ŖūTöKČ(¶¼w~õjdNYš³xjk9¦æoĖpßmųžHk‚Ø9ęVF…£ĒŅ ā‰ŠØ\ĄüŃ=Žm½Ž: –Æ„#Ąæ|TŁēeę4øž[pǽą<¼’ķ0nVö®7C¾źN>öŪ{¢GĻlž Ś­„+*Ńõe<ro5Rļ_« ŠH†5ˆ!n  `uāµ  ¤šy •:$ **$€ ‚•Ē»’ ’DTųµ3ŠWķ½²õ(źÜWł»ė©ƒśW8‹[ŅP‹Ńxoå¬GiŖõ*šŖ¬ P1•¤‚®’_tĘxå2ńĄ¬OqąÖ¢µFkq±©%ą¼I„ŲÄ.ŸhŸ¢CŒIļ<(Dœwڐź”|,>å$vQ^ēD”ó(oÅ;o•¼ó"N…³ˆsāß¹Į«ī_’;eßYĮ±s{EÕ\.5cŅŻƒ{ņ ܆gk‹ŪXą ūå=·rßćāŒćOēØŽąž'·¾2ĖpĖĆś­F”Wā’³lؚĶčftOćSoż(„A~óŠ\šŠ7²„äƒVšĖ.ü0‡Ī?˜MŪ7qķ׳×ō¹æą£"‹W>ŒÕK‡ŃÜ9NüW¼Ų{øā_¦āĆĆ5=ę ‚’ńŽÜō }]»9ÓÄȾĒīŗYó:d°g/ā¶Ž†uģś>?ų£‡lŗv ±ŠX/X•ˆ"#2€DDÅŖ¼śÆD¢%RJ"eˆ“QY¼ær‘2> B‰C­bcˆUNĒ”‘T‡>Uł ©(ż{ć\Ī(«sĘ)g½Æ’Cd.ešļ¬WPü§€4 ž+mTœśöi&ŚĒ“mRJÜŖe7žbĆļ?ŪqŲ{No™zšnVö6gž}ąźdŻżWlŸ¬ r™ŪĻtĻŁ‹5Ó÷fGKĻhš_ĻvEō&÷?"å_e•ŗNÜ?Œ&*–oĮ׋[oiödØēśßŚ‰Æ€’j[ĶīqżßŻĀ¬™ŸüŒGlųń¼łŒ3ŽšUL™+ŲQ œš̬~:ˆ, gŠģŹÜ_ =ßü3š)špĒ?äøą8’|˜:.ŗ®½v§ŽŪ|’LSąėĄ²Ū"ā¹%„ģ:,ž,bw¼Z[€³Čtī #?';ē"»H~ģ)AĄöp‚ƒ#ž~9dAżJC$€ē Ź¾|U>Ļæŗ|ĢŽ9ųڬlW³4"Ā$يģßJ»ŃģŌ‹üšƒ²?kaķ³0­Ŗ—®8ė“ŃmŲgäö“©ŁßĪŲüŁäœ£=‰i-Ęk‘€ŻK$ ‚fI›ų¼2”?²L•'ĄHFĪk IDATäĮ£7Ž×2Ø>Ó»)’>A†ō&Ky÷‡?œ²õSJ‹wxŖI€Ō"¦†€2ąüˆs©xT“Ćā#I缘²'€sā”óā°‚Ö„c%±ØD[­• 1$6UĘ8°Šœx/xTź¼(§ÆćLœQ.ÖŽI‚·Ž9Ä;«”S©sŽ‹SgEœ·øųŽe«’å[ś Æ}õ9nA–„sKßČu”‹NGīw붬ē“?ųg’jžßßžZ æö®x‚+ž÷*ī^xļ˜ēTżaB@ŗnycDŁtß’Ē’›÷*Ų ¤ßÄw4Yąæ¹²I’QŪtŠ={įUƒiŖuļ|ŚE·=e½•LčOp"”?œ(e)»’gąß§¢TRŽūOD©8üD¢$҆H•SC¤D!ŅZEZūÄ!±ä2±?c|*¹Lé?”,¬*ŌŹéœqŚ:ēÄy„üØ4Pž>M3]—JY5ų×!#BÓĘ’©‚0PnŹtq˜Ö-a éźeK‹~’®5}3_ūā){XŲ9·‘ōęĢ;6?õ;»īŽĖū¢ĻlԚUaž§ZŚXÜ;„³ē±aŚŽōµō†9ÜxŠ’Ļēø’>†9ŚÕ’–_»śßŅ†Æøž7’ÕõwĘõ¬Õ’Éžk“śO¶ś/#öŌÖĪ;ļ<€µ—_~łęÓO?|/„Ā©¹\Ž,čŌ{Æ5ć²ŌŖcŹ7x āĖå|eXõÜvÖj$’¢ģłD2ū”±*uwùēĀ[Ž'ž<’ńpõÕ°i‚¹ÉkLČÜć{Čń ²°F§+Ū&d…>Čī½§«q*pY(Ä×É< vy<ē Œö8µ Pė š›¼åYO~‹öłw×óxä2fz?ō|ÜśĀ YQ]^MŌĖ ŠŽÆē° (Œ‘ –hÖĀ?Š 3Rŗv¢9÷<O-‡½ŁJæ÷pģd׌am“s\B>-b\^IBC$I¢"R”6ņūSÖßŲ½”pēžĖŚ ¬iŁÜS|ņń;žŹ^NF ŠpŁlDiO#Ą)ń*M„:c@³$€2&Ė,@ą”óŒKh!-Y¬µ.„^ĘG„,M`%C@+ZGŒBį(ēb£\Rr>¼^9QŽIźœ畲ŽzēD,Ī[ær떁Ėļȝ“×ōš„½zQµī Ó¦t÷ą–/Å­z†ŗsŒ]-u Jƶ•Ķó_ž=…ī^x/ĖÖ­Uc8@ęĮšžóŽĶ!{ÄĶ÷žŠŸŻu#ē¾ųµĄH`Į^ņö×\HjSžõ;’ŽĶūĪ}'Zi–Æ{†ek—sÄ~‡rčŽó„w~š«n»†ÆŻšĶ1ƼsĄ²!¤ŻEš?ŽqīŚĶąBåcUiBōo¬N'ЇĒŅć`cLdĢĶ՟šļ‚ƒ½ū‘äæ%ķŚ~š§ŚtUŸC$[õĻbżJ„’y¤"YÜ?™č_9ž_b«@EZ|Fh)ć#c$ķ¢P›’ˆµö±T¬CŸDQ‰>5ʧc*ż‹E)Ł%šļB|5šü&P®²oJ‰rł¶-ł‚ņm2ųģŚ›6ÆśßĪĶ~Åѝūž¾oی#:DķœōURÜī·,łu²ńŃėśKŪ—oŃZ6ä <“˳“£“§{§³zĘŽlé™Ė`µŪµķIšæ;āžw6å_=«€’ÉtżŸlįæĖ.Ė~ńŸųžĢSY~ HæŹ~.¹ä€Ÿžō‡7~ś©óŚŚZ[ÆrĘk“ÖĪķĮ+cŒKxŁ­‚ćŚ öŪoæŖć5ėŸüēaĻ@’ąæP€³Ī‚7æN?–/‡;ī€ĪNøęųŹWvėXĪ$¾_&»Q7“į=é  €yĄČB&ŪBąmĄńĄG€GÉĪ{ ŲŻ^cŁĄ ˟»:øzėV.r¶Č‡€×.’x¾ķzŽByæ(n)ŽįfU Hž$·j1³\?SU[:bµŸ5ģųU ŠŅ>’Čł_pB”ŠÕŃTī’Q&^·d.’ßłtŒ-i·Ū­­ĮXO.IūQ-mًݦČsIh kHW‡ƖiÅķ÷ō žŚ)$ X„Ā õ±Ŗ"lŠ3—"Ę4ö˜( ā-N1>C!egq–P‹óI¼—Ź$Ōć1y!-y¢$ĘHčņaąÓ4ՉxÆ#Arų”Ģ# VŽ…¢œK*Ą„ZœM¼ó^œ³Žz§DœĒ;,pJįl’ķsWŗkłŚxɦ¾ü«œmftŒ^2µ’AHļtÜā…ųĮQUŖ­iPJ]ØŅ°me³£µƒœ=Ynŗ÷Wuū­x<½n§óRĪ=å,Æ\§~ųE¦“g\]E°ęųäÅĮhĆ×nų&=½ˆ‹N-łÖmYĻ›?{ qĆėN| ļ}Ż%”āŚisS§ŃŲĘ’õ«Oč »J'ž®I$;&±0Εډ•ņ¦vžw‰ £Āx—¬Īwų÷"”ŗfSźšŅ@’(¶ žj‰M~æÜ9ÆF®śƒC°•UÉŅū„¢HQƒ¤JūX”ŠE‹R‘Ö)-Jbmˆ”©¬üė’bFĒFūD…aŸHčS“c¼Õ”Xm¼•`$ųwŹzˆ·@5ų•ę/_}¦µąæśŌ'ž+VhÕ)b݌½Zś(Øøµ=ݾ~õą¦-[n]żģļnžėTļŽm³OܧeĘįS =¶ä:gŃõ­ÓRæ/m]įś×>œl_õ@i`ĶżŪ!Ł”“lĪŌŗ\ « -~yW'k¦Īfć“Yō·O#Ī·b«Į’˜¢UKND’tüß’;z½‹ “„łAĄŠ¹ūó³³ß’é8A6y­øœ÷?ā:O0ī?߂ߺ®’0 ž«ķ¹vżÆµĖj·Ė Ń¢ģ’ʍCą^Użµū“i«u–·[ÉpT‘ģ+Ö~ä#ŸYń‘|fÕūß’ö®“N:ffKGgPņVkå¦LéJĄū\.“Z·Ū–/q« 0¼@0ņKĖ5'_ŻŽŽęė]¢@ƀ£æ,ü’¼ ™z}ķ}ĄŪŽ’łŸ™Ėņ5ץ)§Ą=÷deYĢ’-·ĄĀ…»uLg‘ŻW‘ąŠ'Ąž`žž½ź+ŁO¢-¾CFÜAę 0@%{ŚM4Ŗ&Ŗ­–hÖ  Ģr Ą‰ŸeŻĶĻ•Īó<Æüå»y+’Åw 5mnžWH-¬l‡m|²Ō€ūW՛ž_dŚĄ2ĪĒqŗsœ@å½2„õ HĄƒ^ž£óŬ¬“«„ L9ŽØ ŸėG¶“=+6 ŠvŽŒ:īØģo"ęlļƒĪöLk£Ö¢$#ĀZnµ–$`¼E'] ‚둵ķw7 @ȐY’$¾–H4^WŻwI’–ÓÖXI**0ŽY$­"öZ^˜qųCmļ #s‚r>LBžZ7;śŽƒĒmæ×8ė•1>M‡ēN‰7ĪRM8-Žiń¦”Ŗj@£\…Ąœ’į%žŌ+•Xļ-¢šļĖ„—x'lļ’c%.$0Ęjķ]$©·±×’W>ēMl|ŖSņZūX»’ób”óā¼µŹ!Ž9óāœļ“R֕CœĆ)'N¼r~cæ-~÷ĮAsĢģŽü)ūL“Pŗ«¤k śE'į×®Į>½$Svœ č߈ā±Źm»Ś:0:{EövVǼ £¤ šŌź§łą’­żŪųąå'Š#D ]­e o+üÓ¹ļbÆéóųĆ¢?rÕmY¼ŚAóą¾'ī'N²›1±)ׯłsžō䃬ڸvŒ1K£]õm<šß4 ­WžWѿڲ:ßNƶ’Ópß»ü75¦&,-t2Ų36Īl›.Łčö˜µ["‡(Āy2šļ‡dĄæ²źļ!SüÉž“Ä"$Łj?‘ˆÄŚųlå_«Čhā,µ©‹C¬µÄŚH Åūū”xz— $õŹ;ˆĶ嫜õŚyW­ōԈżAųÆZõ‡Ęą_)ń(7Qš„™ ­ ÄmŚĶĶ·&SZ£R[7żSžM7oŽÆéß¶żéāŗnX~ĆŌ$vS<¦Sft…Ž1­”Ob±É€O‹›“dpsI FQRŠž Ēö Ts6““ņl”Ķ=Ū=•ͽ3é›:(ׂõeµ’fĄEōļįßŅ“’qŅČōjŃæ›Æä°§Ÿą*ļ3°8‚ÅńŽ’xœŽ>…;õÕ¬ŸHܵė’Dāž!sżÆ„h’œ]’ ’q\²h²q#²q#j`µbķĄÉĄ)Ądė³i^XÜkæųÅo-’ņ—ÆXøĻ~{/zóߞ»vƌ„¶¶0iiiI;;Ū“|¾-ikkµł|ζ“¼÷^¼÷„cL@ė«Ō³±ü5Źö†7ģAļƒÉ·ēš2¼õ Ü,‡wŽ™¹żĒu½‡Ųķ€+ɀLv“Öįłv«)²Ņω÷¤u_>F&ø–L$pā$€ą©'Ł[e—11AĄS›čšÉ'·¬å\ Ū§|łßK|ą;¹ś°aź®’älóŹBŠJøįˆ/pOmŸæų0 ś·ńĻŽq.C0Z}ĀÅńZĪŚr#vŸÉļŖCv·ĄźķŒ—Õ„ėo…/]?żō–ćüÓŽšN8ū•™ź’šgį ļŁīšÆĮ¼ŁŁē‡ĮžÖoŹbž?’a8śš¬¬>ųļš‡³9åĖO‚Oż äĘQié/āĖwQŻū¢–@C-Ąß€ØG Ć@ˆ‡TõÅjFā\’ Q™R!œE¬Ćė`’UfŚį÷w]®\Y«A„ įĄy+ņŸc>wļ)Ūo5iŠ1ĘU“)PĻC Ķ+×  ” …`Ä ‘ ­}P¬xXēE+|P—ce =‚ŹĘF¤ˆs«PŹ;…(ļ¼(Æ.¼÷N;‰óxļµ8ńŹZåm%$@‰²Öz묷֋Ć{‹Ē%ZõlŗxćŽĀ«˜eö™:ZŠT™==m:~Å2ܚ•Cy)'üWļZ½i>½ˆĆ÷9„>ļŻ\üŖóyėēßĆŖ k†€ćĢī8ļ8łšćh/“ńīÆ~€u›×ƒ@{”ĄœwlėßĘI‡ĒŁ'ÉĘķ›ųĕŸÅ—Ļg°”żœ÷›½ĻŠ *ćxf}Ŗķ®€’ńŠw׿UōÆA݉ßwĶ `§®õ$(žļ"īĒ{ö&m™Ņ°Ž/& Žņ¤ļYéåPā|–k¼žŖæWV4‰@āJĄ'"+ķcėĄGJ$RFE¢}lŒDZZ•t@¬”JŒQ±Ī«8Ō>QykķSc$•œN+bx”ćżkÅž„łSĪzÜH±?h žsZgkā; ž"'>ńJ§Žui?Æ£5ķź±„Ž9vė¶ Ļöo2­};’®Į’ļˆŠ¶#×¶Łāꂵ„Īa1 “I¬µ*iƀÉї˹mł6³½µC¶·“GŪzŗ˜ŅNœļÄ9œĻ\ØhüoßDpßmü³Ģ\¹„æ?ó­ų)ųÕ ą;׳į¶«a°ž\wœ’ś±ĻaÓ6YœžU’7$@ *i‚°Y(€X² !Jć]’ŗj€ŒpIā•uų Jq&s’?`a÷Ū‡Ą’H“éėņļīÜ>pūöĪ4ž( @)U¦ ą¼Ÿ¦RM#.   ā P!(“i‹wŚYQŹĘŚŲzÉ{ŸF¢sZ‘Ä^‡Ö‘^yåH]`§E¹$õ·āÄzē•X±b+YDe¢\8±NĉUĪD®xĶcĖõ”Ó{ Æ8`ŗĢØūY‚Ł’ dö\üŅÅųĶz™ąS¤”:gyē—ŽĻ›_ńF^ś‚“ tČźņj¼Zk¦uMļ9ńŠćųāOž+Ė,PīØ«ģžæqŪ&Śņ­|ģ‚į½ćcßż[«²ÜłŲ=œyü+9tļƒ9ķ˜—rŪżæmz“€t!—ē5ĒžĪ‘ūŠÖ†§Ö,ć¶ĒźµkLeó^ż«­8š?~¹Ōū×TŪ¦Į’N|G!CjĶkCqŹ\¢Ž™c֋]ē‹?_˜ŗ~ėPŹ{šŌÄś3ėõØDōŠ_¢”ÄåÕ’H+‰QD¢Uŗ÷¼9æ}łĖ_rwOOē`OĻ“āŌĪžØ«·#ž2„+ķééömmm®ääš’Ė…õÆAmTįŽšķ]ӑū³³ē’Pd«ģ/«Ņ 7Ąg? ?ü!Ü~{&ųŠWdi’īŗ Ž?¶O^‡Łdį [v…/19”ÓČVžSįcX{;¼ģeŁõŚMÖü+ٹ§dÄG?{ Mąīxå×ųÅ­ļę­IŹ’-ęć™_ŻH ?˜sļŃ{³D \ZõŸ¼ÕÅ|†,3DÅÅpUK Wż…,SĄĘÕČ`õRōāėų—šI„Ötß³ENŠܐ@P€ŃhmĒ=ŗ…ø±¾%ϬF×0ĀEēĮåWĆŪ’ 9ųöąmo„ÖŖx’‚Ńķļ{8sż×` \r>|÷'šĒGąÄ£į7wƅēĀ“2’ę×Ć/;>°d%HEHr¶Ļ_ ŠxŻ€HJHPE$@¦.5FåKŅP»C<ķ{/)r’±żཚ @^9[Q¢„šP’%ņ«&œó’fX@jC’²Ø Wxc„4µųÄ:„"9ńaœzr•(/9ēS’ˆ‹%õ9£|œxĖ²ˆ²6©„(œõΉkSėšŽz+…­‚Ųtѳ–oé O;`fxГ޺@¦„9ü…ųMėqKŸ„bq\ŠRŖŠhW#ZŠ#¾żĖļóķ_^5\\.ŸÖ5­³9ŠĶ÷ŻĘs݈¶Że`ńʧx÷ėŽNw{ßüå•<°ä‘Ǿ󑻹ē‰?qüĮĒšÆoz?OÆYβuĖĒóŲąĪŌY|靟aŽ“9Cū^zä)\ņš‹¹{ѽ|öš/±qū&ĘB”“ žėĒŻžÖ“„-ģ(öÕmŪøļ= žĒī{ρ’±_»±Óą_„RĒL¢)spŌż·uŠžl‘MžÜä¤"ņ§pBęīļ‡+#bż}*ŠÄ+­śk‰Ÿ(­#­+BÄJ­J*žŃ°Ėæ‹cm|¢r*ŒJTąm%şÖbµQÖTĒū+oÓt±æąæ’ ÖśrŁą?…”Łzü;-ŽTKkńŹ%>)æQkĮµ’ŗ Ō.×ķ…@'I’ū§µh€8ņŗTŒ•‹Ėļ–(#tgsxŃiŚ–kZÅ)[C’Ā0øŸųÆM÷wę|ēgW0æ4Ąńä¶lą ’żŽ8ū﹓g± šQ‘3Z;łā?~‚/–›Žŗš¾ō«Ÿń±Ņ 2ŠĒūæńQŽxń¼ėäÓŲc€’=÷’\ŗžŸ:μ½zõ’'?A6>Žl\„Zūk Ū·s”sü &Ś£ę½7ż;śZøpńQ‹/½hÖ¬é7zźÉæœ5kęŽīī)ÅŽŽ„3ŗÕ“i½I”Š‘öō“zļ½äó¹Ā)½½½QnžcŁd28c™­ś_Ē«’­Džņ—šŖWĮ9ēĄüł™WĄ>ŸüdžO<1óX¶lRĘ:›,E޲ēĒNÅƏaBöhæ8v¢•ŹŅ^=üŻße”O<±ŪĘÖB¢ń(ٹW2Lčü/» >ń‰ŃS…S;ŹSˆ;ŹŪ«ķ{8¤j{Eƒ©G äŹeū½†…«~Ļ]‚!»Ļ4°J ?Ķwń®×}…oĪyĄĶcöĘ_q·¼‡aÆX¾:g>o:ćÓüģ ÓX·£Üwk˜H’ĄĢpļŗG08N¦Eϰ°å ž„,«Ł Š5tCŪ†`bd@#Պh&€4®—SųØ ōś#¤oś“ƒyy[¹õ®AÅÜ®ž9äs°nüī^ų܇”²Īŗ£®łEīkķ¶ßĆĄ œūšņ˜Lś{¦Ą‘‡ĄW曅Ģ+SQ æø-#Ʋ+~ĪąĀ<ÓŚĪāŽY¬™>‹“Ē×ÓP ¼ClöY”‚Zo’@u ¢+m„dŻ!ĪLU]åē<”,xļPJ‹D-”?ūԁV"lŠhēŠöĪ!œó=9åbÉ2Öµž)ī·kēE«l[D9‡2ŚĆš˜ ½Gķ«IƬCD‰Čp}!D¼³åń‰ą}6¦rä?J±Q:c<¢Ep’}F@‹ ń6²"œQ(ēQ /^””8/^”Ņ8å½B9­ńJįP V¼håDyÆQNĕ•ŗ%›¼‚%ˆĒ#Ž‹(H­MßŲ—>³µh¦µę„=WHKjö\$ĢįwlĖÜXźÕ ”Œž4©FI•āęģĒ™'¼’Å+—šĖ?޵vDۃēČiGæ„gÖÆā“c^ŹKį߯žĻ!×’Šy<÷=q?§ó2ŗŚ:yĮž‡ó‹?܌«>·:@¬6+äņ|óŸ¾Ģ¼is(FE~xūuÜxß-lٱ•¹Óf±ß¬}xh飬ܐM9gõĢä §¼Ž×’*Ž>ą(: m<»u=IŁåø™•ņ±@éé/|ļyķ;˜3u6-{¤žœ ųoŲdų;:ū„3ł÷·|œķ;xrĶSĶ÷½D’&B4žĖ'žGö=Ę ›&vü§…Nś§DÜŽ‹o ņēKtū27põĆÖn*f" ē•x…ŲņŖæ‘”rj?DQ>Ké'*VŠXi)%‘1RRZEHI“ŠL %Ø¢‰ŒÖ„0RHlB™¼Ä¹P"]бŃ$A ©*I÷6ÆUŖBoĮåņÕā½ńāÖ«P¼²8żj—­$‹÷Ēū4vü«ząæ¼=ų×.ń™'@Š*ŽŗŌk-¾­]Ł–VeM.µ]Ż:ćīVµōØø³GÅ-Ż:.LIćŽ.IĆVq”NRķc«Ō°>P#šŸ}ä8r‚«Īłn|k7öč—qŪ’X_ä@§)‡?q?§ø˜Ū‹EüSš!śßųw¼µ³{8müœ½‰O:_/y”‡śūxwŽ}žYĀ™+—sĻDzq(Š8]y¼ögó›×ȀT‘¦ęMŽĮ0ŠÆXuÜ?”½<å€ĶF®’šßŒė’ŹFekßįæCȀ’u×”¾ójé-äWŽÉ{ŠE®õžs¹(öœ˜s®eūö¾#.|āeĻ<³cĀõ„RæōõEõļR\œRŠ$IŠ^{ŹYZZ žā²čS†ž(»Oół¼‡" zhi)_«Õ¬ŲęŹįCę.»ģ²=zŽ“eĻ•€ŽŒķ’U¶%Kąõ5+‹ūī —^ \óęĮ’üÜzėī(™råk€Ud$@‘Ż» .déϜhƓN‚/>¾š…lQģ«_…›n‚ØŽpōNŚ!Ą9d!E²÷‘g‚Yš ضńBNmą#³¼ģs< üCuł I0üā}œT*ņ#ńLŖ¤ųßp xƧA+J 8æy=²Ļa|ééy7B»øųŒL ø;ō‚>߂}vNŸĀń®@!o9~|twĀ;ž6ó Ø6ė3°æļ<ŲgŽšž­Ū”§Ę}zoęŠÓk×—µµĀ`j+w<ĀR ؀b# røPpCŠ)GĄ±ž¼ IDATöD.[Å µxS'3ģŗ'ĄP:Ā$q„å ąÆU–1 ā  rFČC=O€$š ĆXźz^°«f÷? ™ī@āĄޫ|YŃüŠŖ Ōóp”xb‹-¦Ź „ģ X| „ā ą>ĖÓ#ųrĘo½WˆG‹O¼Ÿ9\PŃЄކ¼°ń:ō–ČļRŸ^|梫 Žé—*\ā•å\ Å‰8kÅ[ƔUÖZń’ā%t–,] bķźm¶ļ» „GĶģɟ¼OÆ“†£IjQČģyčŽéøåKńĻ®„:Y֞’k7Æć†»É7_EG£ŚV<N>ģ8¶õļąćßū4ĪՏ ĖÄ?Źų:ūĪœĻ›^z.ß’Õ5uĘŌü\|ŚłĢ6‡(ŽxēWßĻ«– Ą/ļ½…oŻü=^{ü«¹ka&wrĘq§ó”󾉠jvū†“ĻbKßVžķŸć¾'ļÆ;ÖįćŽ/ś÷šcNēč^ĄĆĖŪcąąÄ'0µ£‡īŽ)µ’ žk*M6ų·a Åī½HʈóĒCüŠjWŗy±³}©Eš^š”Wżœ/‹ü!XQ)┤ŒZõW•U’X‰•śSDZ\¤›@’ĄčŲ>1AkķS1> J%¤AާŹ©‚O(_‰÷×5ńž†Ęb©ę&üQ—Œ­Ŗ’ŗ€ć¬F˜Ē1…‚rŚąu1ńQ‹"’’Ł;ļ8¹Ŗņ’æĻ9÷Ž™ķŁĶ¦wZ(ŅK("EŠŠ€¢¢ Ę†¢ ‚(Ź×†~Aš€ ED@:HoAzBBŅ7ÉfÉīf³męŽS~œ™ŻŁŻŁ–,EßēõŚlęŽsĻ=swŹż|žĻóyš‰M–(Ču‘‰cėāl{ĄĄ’pŪżr·Üq9óW-ąJg™Ø5»žūI˜0o‰ŌMŁ’Ž€ĻżˆĒ¾‰ĆēĪįZkłµL_2Ÿū.ž g~õ—üż½Øū/Ip”ŠS÷Ļąu’ļ…ōæX|Üķ·#ęĻGÜ4µü öŌü_ß’ cĢč•+ėfÆ[wĻ!3gn}Ż;Ģ|³~ō˜c'Žiß°”ELœ8>®­­IRµ‘uŖśė,Tģ/ Ó§O/ø¦OŠ3MłŸCuiÉųŚ’Ó†{ ”pģ±^śæx1u”¼“&Į駏üB b`:Ž•æŒ‘SN¼éŽ/‡sŠŌ©¾#ĀSOyrdŪmį¼óąĀ ½ŃŪ±ĒŽŠźŗćSĄNųZ÷‘|ž=b0N­7ky`?xż ä£PBõ÷os|¶ƒ Ą‹Š8uÆ+8f—_³dq± r1f2®=W½'mB2Ą9v,W^Łs=„Ż›ń$@:Į VÉåéұ˜¹+xvį|öhhl†kąø÷š/‚]¶‡«n‚£æ—w«œiŁ„½µ••tĢ‚ėļ€ÅĖ””®¾Jū7p`į ÜŖul”Š–(E{E%±ŹŻ4tŻ,!®ŗ¤…y)”źū÷-Q8iqy†æŲ˜|9ņ*‰żMŒõ]’Äę}dŒIxŁ±I÷MœĀ©¬öņĪ4]7_a(¬TĀ­˜Ņq­ėĒ/¤­<¹cõ”øķ“Rāœ6ėphķoōd÷z4€Öų„>ąI錳Īōž‰qĀö¼YŌ@’3§Ö߀*_£ļB!œ¾}•ĢłÖ !\ Œ „ C§SNźTšD„¤ŽĀ ‘„.Ņ2"‡Ł P™(Ō™(„:UH& eg˜’QHGŹNʌR¢3EFI‘QČ(%³J‘ÕƬmŲxÅóK²Ļ­hrĘ’[F)äĢP³>Œ˜8ŁŅa€’”ķ/žź›ųåv™žõ>*O ēŻš›œģ¾’S,X¹ˆūęxūč}Ž(²¦ĮIŖ„ć>ņInzģö.šŸ¦Öf®ųfm·;ēœxa²`Õ".¼ćR.½ūjV6ŌQSQĶ_żSĒöżń“‹ųī1ß ¶Ŗ–cö9’/~2Ē}ų“LW0¶ą¤Uå>i“±½„Čž‘łsüojm ¦¢ŗpą°Ą’×5āąˆēģwĮōo8aƒ4µ[²qŅĪ‚½jƒk»āyŻ~ė\’Ö ŒB“Ėō#„’D !d,„ĢJAVJ™UBf•„DFJ‘ BŁ©Ń)•ģģ "Ń”BцtF”lŃE2.†2„ČØHedčā 咰$ŒU‰JĀ“Ó*F–8)aU*°”tĘa­•ĘŁ\½æ „ķmö`lŽéæ7ų×xšÆ"ś5üė2ūŪTšŸlųWJø.šŸ;ĪGfQĆ’=Ī[¬Ż_įć~Śż}2ÆīwG!Ļ8GķšåÜēÆ Ō”Q/Ē’#O`Å‰ßąØ(»mt”“4rł„gņ˦„݉Ļ÷Ŗīæ·ō?…Ņ’qÓqI’‹mĻĒ@e–żæŻgž}yĶ5T¾żWčNžā ž #›ĶnńĘó~~’ż|}Ž[ó'æńʛµÆæ>·r޼ł„+V¬ŠÆŖS6“ČĪΌčččģz½”——½žZ<1Ā‹’Äū”ĄlB—ŠnšeW^ ³gØŌ}°ØĀæ–kńrų|&|sBßgˆķžŹŹą¬³|łƒR¾%ā3Ļtļ7Ę·EÜzėžēŲÄ(ŽVč.qĄ’0°!ąPŪpv(ą<£lĢuäL…`nŗŠvōŖ~£P0f2Ž:Äčq8—']Qó·~[Õ ]‚‹5.]Šżćć¼vō^¬­(XEóN£æÜŲźI€­§wļW ×_ä’ļæąœ’…O|¦LōĒƒ]¹’g¾q2¬n€O*Ź`‡m`Ņ Æāb’ķ²?åér¬³ÜłĢ?ū]³’Š3Ž= )Æ.yƒļ\~I®ęčžēīē/g]ɄšńœüŃłå_/ BvŁrG&ԌcÕś5œö‰Ł¤£īĘ(Ī9®}č/\÷ŠM³ļQ¤£4cGł—~UyÓĒM„„c#;Z1½”RŒ®M¢šŪŠgc’a’ŽR„AȔŚI”§}c‰Ż¶Ü™sŽ’>£*ŖØ­Øįė—Nbt߉:ŻĄš&’ĮĪ<ä }‘MC 4†6ļš³’6H‘5™låĄ_nc†Ž™ųåÕF \”»æ ĖäĻßg4ćrµžNJ-¤H¤p1R$Ręž ³ž”ĢJI*+C+EV ā0•3ś‹Hd b©„V‘Ō‘tZ”„:H9 aˆ¤QŹŚT:4R§ŒµŚjR)a³Ąpźż”ÆÓæ-ŲŠœ‘_!ų/Ų?(ųO «Fü±Łą(Ž’Šüw­7×īo׿iœ¹3'Ż| ggŚų¹ÆAēuć„tŹ™<EÅēŲęCtžs1§]tÆ“6ós ĢvšÕ~ÉN»ĢWŽ:ŽśĀńC©ū/ÖlØu’ƒI’ū’šī¹žĻĮ|xóMäż÷³}{;7ѳŚö?!dKĖĘßxā¹¶Śj‹Ė[[;66nlnZ׬¶Ł!KkkkšĄ‘R}`āż ^R>¬ØØ€Ļ}; }“ļž)Sąųć½" wĒ€Š€ēe@#ž³ns:`0{ЁĀ?÷óĻ÷ģ»ß…_żŹ—AģM/½t3VÕģ ĢźńMé ŠĻļv)@ļxųfč 7ŅŻ¾ä¹ń»qō‡gūĻ„s.Ę!FļR€µ73ĒĪź+jp­MŻs V -Ē„Ś-ōlQ¬ ­[ZN¼øŽĒvŪ†"üŻqŁ ¾E_c3\y\ō“ā掶(üžZ˜·Č•°ruĻ1ķ~@y)üž§ä»Ļńć ü¶ā–‡h“’ę b}YméR“pŻ($Ą»a Ų›06qŠł²2Ž ӛH†”ķM¼“WĆsÆ'źŲ™ kfŖŲ•¬œ‘y»©¦³5Љˆ’R ×®Li-‚ pÖŗ.³æ®»¦höĒOaöĒOąĪēīᢿ_xÕĀģ‰#ö<Œņt­mÜ;ē®~šz°ó;ņ„CNBɀk¾7–ĶĖ=æźoæ7ēŸņ?d“,¼÷OœqL·øpź˜)LÓ­NخئaC/]ī’9ž÷³oxąß™Q“ˆ+Ęõ[ćŽC%ūĢ2›ł×ŪĘÅĪ"„³ąĄæ[īo…D{ąF¢…“‰”$BŠD„D)%ÉČXHŹÅ*Y)E¢™ b„\¬B›„*gōÉ8RR‹ČéP9#RR‡it$”ikįœJ…¹ÖZ)œ …‹„p!ŻYȁkœ„a9żw’ŚüAŽ,īü++\‡‚’¹~ŪļųWEĘTŽFćēüņĘ x­±ž‹œ£ `Ż~yĻ-|īÓ_ņ ›Ā–…Ž’_ū5׿õwĢ[ó6rŽńF3ėåGx“~!§~å^ža`š_šązS“½ėž{«=‡ŚņļżžĻĮ“üßy''Ć%x߯’ČŠZO^øpńOš›[nœ9sė§ŚZZ¢–ŽN9cĘ“¶L&›‰thĆŖŠ9ēDyĮĶjUU•ƒę{7ž—Ę{M<pąplmõ&ć HåŠ /w?łd8š@xóMøóNX¶l¤–Ū#&į3õ5ųĪnķl €Ļ3×’o~ÓĖū/¾~żkhkƒ}Ä1c¼⨣ąĖ_ö†‰wÜ?śüķo°tĄ\ö°"|ƂX‡žĆWAż˜“å£PP,6„+@ļHšøÆlĮ¼É{ņ‰}¾Üm; Ü`$@>ĘLƽµ’+’§†K Õ ¦3v4ńŸįÖK·äų@ļĮŗp <ś Üy•Æé?õ^²_Ø(ŒŖJČ}÷3Ŗ^x„ēž†Ę¾‚Ą—üėøģż\ ą‘9˜Ėh KXWšęŹjŚKj<Åæø>°$€B˜4NĢ1T ~c»†ła’5NŲÜk*H|N? p1‚’ķžjĶ!U-j'‡sĶ£ō+oģŪö‘čA@O_›ūy£±*p7$5€øŲzEeĖ“Ö:į"RžĘ16VŖœ éŒ%('„”©T`l§vqd]䔕”µZX'āŠĘva,­ ¬5‰³BcĄ&FkœÉā"+0Ī+œ3BJķŒŃBc ¤±Ö¤0hź„MŚÆy±-ŚmŅčŌž3jDiX¼©“±żĪˆ¶øeKpĶ=ßpĄ’ŠĮRßM¾ś$¾śdŸ1SĒMį‡'œŽ’’ŪŸ¼‹æ<|+ė76RYZĮɇžĄ³ó^ŚI b×­vąé¹Ļõ žpčnšVŻb–¬]Öēz,Yķæ@k+G‰ÖLØéīœzĒ3wsńģ23¼ļŇ¹óܛHG)öŁn/Ž^³”;Ÿ½‡)c&ń™ż½yĻ¢ÕoUe•4µśˆQń»Æžšfų„SkgJH*JŹłģŸ”²“’óo»ˆł+0vŌX¦ĀwŅß`ö¾-š|8ł“øū…ū˜·b>o,{„$;LŻŽöLø÷ 6“¶ŠŲŚDskÆ[ųĮźžŠ!,rČ`Æ»¦ß„óö>vČ*[3X•";jŁŹqøČńÜzŪyß|k7āCą\šwXF€qBjZ “Bū–~.J&B !’BxóæĄ’ī‘õ‡$ˆU(¹$ ˆE H„Ö„é0!r6 ķ¤“¢·ĖæµH)ŗźżCŁ]†5¬z’œž”8ų׀ü[ė³õ’iąæXt’œ—Po‚`ö¹ēĪXøč ®µ–-¬eś›/ńĄŗ5|ēKēšō’…ńŁsyń‰›8ōÕĒøĘhf9ĒøĘõtI³ ėž{G1šż×żkłWž{·üHś?R®’…Ł’<ųŸ3õŠCüŠZž‡)üyĆ9WŗnŻŗŁŁlflēÖ[޳±=«::ŚUGG‡°ķnģŌ)Œ7Öµµµ‹rW¼ `°BlŅqÄx?€ `ūM9ų䓽éŻē?ļAšGx ü׿™gz`ēß5 OTć E’ ķĮBąÆżńC|Ć p’ż=Ÿ×­·ś~ģæł Lœč=Ī<ӛ!^|±' ,Q¼ b2°œnÄ°Źąż/xų»ģęåv–Tq|!ųĻĒ`$@^šÜ÷9Ąj¾žß®Jø®:Į5‡ˆH€¼@žh&ē; .Į›DüÜS,[°‚'w܂CŠ=÷Ko€C÷‡-§łĒ»lWŽŪwlK+,_ÕMl»%\z½/جš‹–Ā3{ē\pl5öŲ©Ų*|üꌅd}±¦“ŠõÕtäėōó7x@%N™° P†XƒHšR’aM©I‡–yĘjR* kœg %"OLl*÷zzōÅa"»¾ĖĖŚ‚£ĘŽ•śŌÓm8»sŒķĢ“PPŠĖ4ŠFĀŁŲ‰Ąhdrj į Ö÷x–8“§¼T)€+$¬sBāčQ "!K›ŅĪű‘"pDN9¶Öi霰.8é¤E+œ¶Rb29irFY”µ“)”qB+0B:pVg…±#­ŠĪŚ0ūļŗ†ģėkZ¢=&Jļ=­ŗ_" ¼±ć®ˆÖ슄ŠōĪšīpÄšīˆz鞏\ÕPĒÜŹ©ū<'tĒš)Ö65P]1ŠŅT ±Nøęæō?w‘Ø­Ŗ„¶Ņ÷ä\¼ŗw;œžG牂/|„(¢m’{ ) ™Pć™÷uĶ \z÷•=:lhŪĄ’µKŁaŚv]køć™»[UŪEœuķ¹4¶>š ģ4cZ;ŪųŃõēńŚ’7PRqźa_ą‹‡œÄ{ʍßJŻśÕ\rĻåüī+ē³ķä­9|÷ņąK^øēĢŻŲnŹL2q–›’MmųÖg°Ė;qé×/ Tüūįāķ’L’ś›d M]įT@¦j™Ŗ 0@Ę Y¼Že|Ėčŗ6“›Æ«­¾œEJėA?F©]īsĄI©"Aŗ„\Ö_(KIV ‘ D¬¤ČŹ€X*JÄ”oó—(åb„D†"QŹé R±RRĖ”K|Ö_i™r&ŅøĄŚtąL>믬ó.’R0h‹?ėĮxįUŽŁ ü‡‘čśÖ —šŸ ž‹Õż‚’—ž`ĢĖq^˜fĮģŸqiI®]ą±_dįk/šńG’Į%qĢǜ£ņÕüł²³øäk?āòīy{·ü;ōDÖķ“ ĒŽüĪ3š™³ĻįךžÖżĆ{/żŸ’bĶ"Ä¢'PO=Å’ZĖ·9ĶZˆ ZŽ™;÷ĶQ[oÜšĶvķķ±ˆŪŪ™žÉvXk]IIŹ:ėeeĪW5ūØ­­Ķ]·µżĶż_žį½7xšßo{¬āłēį–[¼ū½1šéOĆäÉpĘšŚkŽļé§į²Ėą7<0įµOĮ„x橌™Ą+ f ep[[qRćƽbi)l³ \uüå/^ pģ±p×]›øŗžc40 ‹'D6ēŸõóūĢ o¼‡ń!Ŗ3œ˜’æ”\śŃßņöpÖX/žÅ‡’6n&G¦IÅ-}9 €²u}ל’¢Ģ°ŗ3ŗšö‹žĮ•ŁøÆīoĮSsz¶ų›}’wü_œ{--ƃušÖ8ė|Ųq[Ų>A÷Žʎ†ó/‡uėįƄi“`§m»ē{{œńsxęE8’¬ž×śš ˜'^f}°:]ĘźŖ±4×V“ zg)ø‘ČŻ@Ø2ł1y·į‘0”—ä›8epž”HzĢё$H…“ —äj”.•&ńķ‘s$«]*—12§ĶīĻUŸYžóÅb§YĻV|-›hēDwÖ)OäĶó¦ŅādäėL1~;čć;/­7 T¹›Cš$€•8cŸCJį„Ć ‡“9ƒĄ\I€ K„u.v`­„‹J”uk"kB)u:’qØdœŠĀX”ŗ$H§Je6J‘-I‘I§ČD‘Ģ!Š©BŁ*ŃF²#eGв3PtJtęL3*©]GņüʆÖĖž]–}ri“Ėźž‰ČŠ*ä‡vEģ¶bÜÄn4 ü‹"Įv8®ŗ÷Ļ|å¢ļšäĻbcRķJS%4lXĻ÷Æś «ŽYŻ5ėP@é¤ŃŻŅøåė ›Eõ–Õ壘8ŚŪ†¼¼ųÕ¢ĆjreŚhbķßyĄ’µĖHtÆz-{o¢Ŗ“Ū²”„£µĒIĀ ąÓ>€ė¾‘×–¼€±†kŗ5õ!˜5s^\ų2OĶó¾§_ūų©¤£48łąĻšē’IS[÷\S.Ó…%åō‰”éߦ+NzĪ=²ąææóŚ0EGķ Z¦īNfŌ¤Į²x½k»ģ9ŻvĶK±®kó ßÖĻ „FJ F‘)³B‹€¬2£$*Jł’Ł ;%:e(;‚Ž0”a żgG$:d`3aŠĪ ’Ł ÄeĆY•V©l˜vqU®’0-uJ*-KœNŅä]žóF"Ŕ°›Zļ?T§’Žąß*į‚PځĄæéĻš/IŽUšŸ-ņ’‘’Ļż“I/<Ľq–O¶·pƽź™0ÜeoZæ’[N-«ą7x®člć»—ĒMsžō”½Į?¹S·$žŃ%œsņ|¶ŗ3”ŗ’bąætˆąsZž½Ņ’<ųŸ{=ĮSOńē’Bšß™Lö łóēŸTW·zŠKĒĢ_¼¤jĮ‚·J.\ÖÕ­Qķķķ¢µµµßÄžDG’MŁx<¦oĪĮĖ–ĮV[Įŗ‚dS§śł/|ŅioŽ÷Ū߆ żĻ³‰1_¢]J·`SB0BLg§7¼żv˜5Ėū$<;$ųa‡Ä„¼†WräUĆ~Sō§(ŒB@±ŲŌR[ šRåÜ ^j5æČ±©žq{w¶s'äL’K«§óƒüŲBĄņkłDPĆkUP7T?€L£4n‹mɼš4‹’õ2w±'®ūį§ąÄOō”ūxO8x?_°õ øć>øłnßpæ=ą×?čpńĻąÜ į“`»­ąwēöģåūĖ?ĄÄqš·Ė½”`±čĢĀ·ž—JQ¤YVYĶźŃćhKĀ¤ŅX LąŸÓ{„€¾ćĄ~ .‰‘!G½”2Ģ­'”P ŠįM_ ąŸGZ˜lF«¼ĄX„'²Ę cq£š£ŠT&8 ųՃ²öąš°S^š”hMŲ0WŸ_č WŲĄyæ‚Č3+2Ö av²Gš\d VZg°² U EL\g*¶[É“ń­rr*¦"Œ]¹pNdC‘I™Ę ¹vi­]óęTź;2F °R)‘*ĪĘZ&Ī9‹sJ*'µµÄŹ:åÅ 'BX‰1RbÖ©ŒM¬6R­MäF i„Ś*‰„B“Ą®²“3™g–7d_\µ!µ×”QŃŽÓF‰”*ś¹*Ź+`ę‡Ó·‚µ+qkWwÉos#ŗ~½[ąæpī¹ĖŽäWKiŖ„©c'“hͲ†•¹VC’%Ż`»µ³˜©ėŲ©c»]–­]Qt®1£ü›¹¾©Įgś…č"Ö6­+zLYŹ×T¶t“t-³²ĢwČÄY²I¶ĒŲyʎT•Vb¬įŸsīļ1—sŽ9‹žĶ1ū|‚©cŗ×{é?ÆbÖĢ=Ø­͉Ė‹‹^a—-v"gųė“=ķ­ۺŹ5ÕÅÆIƤ;Lš?Äl’źä]püļ½Y§ŹČVM$.«ō|zy³? IDATĖ<¼Č$o7Y„pxg'„Ļś÷2ų3HŒpҁĘĖż!„łZéåžJįMž”‹…’9ŁæŒeąāH©¬RÄRŗD)’0¹¬®½_ät”r„Lr&%„v‘µBYŪ%ł·Īh¼ä߆ž$ķWņÆóЬaÖūĆ°Ģž 'ųĻę: H%ŗHē®H”ā]’Šżśn€’WŸfō«Ļq«³LtY9Wl·;=Ņ_yÓæož†Kžņ^oØćrēØÖ ?v7¼½ˆS>sóz€z:žOŻ’x(ąæ4ĮšĮØūßéüÆŗ 9gXŪūo cĢoæ½4ÓŲŲx[Ēh`ŒqétʤfD6Ŗ®v--FTUU Œa¼”Ųų‡÷‡Ų¬¼ü=÷ųß%%pā‰ōpĢ›×^ė·vÜ|óH,µOTä~Ņl>0`÷įÄčѾöæ¶öŽŪ—äC)˜0źzėŽ6=&µ@%įŸĖ°Ėąż+·»­Oį-šļļ’~Ž-F¼śmf'1B¾akŹ'pä‡~HS]bņ8\ć:„y†ŠUóøĄ>×s?p Ķ cSĄt ®Ŗ3~-g\Ļ53§²×–“Ų*?īūżXKžž§Ż’’ž×üOń”mąW÷æ?ßA` ųį%d—Æ„>L±¬¤’„•hØ­!„ük&q$š^’0xI@Ņ׏“Š $ l 0”!5F ŠVS8ҵͩŹÕe™F©µHz‘Ś"ŗH€|©€‰$€µNø\½?ąIpŹ)<ģ%·ćĢ5ģ?Ŗ]ģœNČ9§~ē‰‚ßŽ/˜ēEksŚĶ_Qc_¾oŪ䅶ŠTFEB'āNƒÖI)]˜vÖf­“©ŠøP[™%0°&qVit‚ŃRšD+•ÓR£vŚ "k…1BhiÖŅikD䬊Nm…uĘÅFgžYg’½ŗ%µ÷ŌźhÆÉ•"*NJĆōmS¶€ukpuĖ!Ū}›7š?¬č‡XčČvņÖŖÅ}čPĮ?@lŗ@uł(Ś;Ū)†(ĒU{WžDk76{ędOq®hX Ā[ķå €śę^€č>'Ąŗæ…Ŗ°±ccŸ“Ģœģo_W¾SG&īŪū³½³ĄgśsQߓޛŸøSżGļ}Õåžw½ó¹{h.Čž# =ÓN6ɒ SŌTŌ°¢aUĮž¾sČą_żė łŲ~79C_dÓ»hśē„ )EfŌdLŗxŽĀŠ+š]ęįÅ&YÜ聿ց= ž<čX™«ó"gšēėüµ.‘éˆXHb%DB b%E¬”Kd ²JŠX"QĀfeąā ‰”R«Ą%QDL¤“’$ačL µœQ‘0‘9£?éŗ²žÖY+K…¾®~0Éæfčõžļ'ų÷vüœ› žõƒ’   jž_|„’±–é€=žÓæv’(<¦w»æ“Ļę‰G®ēš7^ęZkŁŃY¦®x“ū®ž)ß’Öo¹-\äwĶ3ˆéŒLŻaŒTŻ?lšōĶ"ÄŖyȇāGÖņ­ANń_ιۚ6t¾ōŅ«w66®Ļ8‡QŖÄ˜6ćflæ½7n²’w-lß5yņäŽ×ų’€Ķ ‰—ŽoVģµ—'„€›n‚ļ}^Żļ«®†ķ¶óõńļB7€4'†lzö^䎯v°C‰)SąĮ”½öŻ<pųįp䑾÷æžå;$ŒPŒĀæO*š×asn‰‡›Ó OXą`@¬¾‹Ń[lļŪv‚+äł,żć××q9–#ŗ6 Ž*ÆįøŻĘrš¦€uuˆ%7ó‘lWᘠÆε¹~UŲéېm^ĻŚ3Æā·9›ßW–ęŒ ?qŪ£˜Ėļ`]±$€ E—ž2I0ačB…KāD’I¢„’($JĀĄ­«¶wĪ"Šėh Ó4:nÉ· ¬!‘Ź:ƒˆrY{)q½IąŗHčņ0$@M‹-łŌqäŌõņ”Z;Ņ׎RQŪ!fÕv0k×ÕĮWźĖō Ķ”w½2CÖ„Jcc-įĘ9J”“ŚŖ(–Ī„œ1£]w§„0Īik „°VH©­2Śj”.²N꣭ŚY!“”B[-“•„ĪŗĄeӳĒ8;gņhæ5©='U%‹æ§U§"ĘO¦Ø[m4 ó "Į±0|š€ėŗ³łŽaon}ā΢ǦBosÕwz#½^ū„ģ¾õ.¼±üĶ®Ży€µM³ņ UĘWūżõłż¢hķ³ä<1¶Ŗ–«æó:2šĒ&!›d™1nšœ+AČ;žßņųķ||÷C™P3ž£÷>‚Īl'·u*+vŚ—£n½Š ā ĒéļpŁļNc×ĻżŸN@Üū8Ųōo¤źž{K’óŃų‡Įėž7UśæjņįĖ9ŽZ~:ų’uńIcLćŪo/¼¾~}ēʍ-„Ī9›•ŅÖŌĘ9ė ²ūŗ®…ĀŪO“¶ŗƒžĖä’šŽŸéüŪd8é$onwŲa¾>¾0š›½łŻyēĮ[oĮśõšĄ›{Ę®Päp ł4Ų¦Ļ3eŠQƒÄ¶ŪĀCy’ƒ‹.‚ٳ=čßqGxģ1Ų}wxī9ož8‚QŠOJ—Ń­Ųä®  X µ 2äaūö‹­«ł"Š•ĖéfRĖ^ąŪ&ę‡xõƒŸKrļä½8u’S|ūĄ:Ėļ"½ņQ~ī¾Ežś8ŚĖ·ąŠžÖT¶×>®ēy›ń/¶t‚+FŒ€ŽzZ_}’WĻŗœ .:sJÓ]Ŗ„÷-^œ‡żŹ/xG…¬ˆŅ,Ø®eį„©¼3v2™(M\Ø»ŸļH“F!zü ¤ÅmŽ9`€z Ā$! CĀ[H„”°Ęj!\ ó$@¢5mćŁŲYj’UŅ©-¶†Ž2ż@¶Ģ»²å>Ö8© Āõ( ¤ÖĀz§)qĀ”$gˆÄE‰U'żK½e}p’“T޹-ŃÄ6ń‘/½ģö?ü-żĀ­;sćŅ Ŗ1 qql ¶H'K;ė²ÖIZ”1B‹Ą†.T±µ”Ö‚¬ÄŹ„Ą(i¬ZI£cCä„Ō¹²-Œ­q-¬ÓNČŠIgœqĖh“ydQœ}aeszæ©ÕŃĪĖūUHµć`ō8hi„Õ+`C栗dČąæ÷Ųaķ$r “aĆzę-ŸĻ‡¦oĻ—?~2Æ/Ē‚•‹ś ļČųt[EI9a’čž@bŪ)ŪPUź?Ž^|Ė·‰ĀˆšJ¢»J Ö\SQMśœµĶ ]Ū+Ėü'VK{/RE@e®d”,]ĘöSūēĀ{dö¬ĪrżænęGŸ9%Æ-›KK{O·”üҚZ›˜P3¾ĖÓą’’?‰SŁŖńd*ĒćŌą·‡zI£Ė>µŌÄo5v›ūugüūžĘQ`š'E"q² )b!b©rą?'÷Rå žˆeH*•(é“L‰XERK!uZ#R”V…Y’TϬæ*’õWE€?Ś0ä_§"ܶ4l3õõ–CWī\õČ¢£&,Ą2 Ł ŠęĻ dU®Žß&$½ y:×`“Ąq<²ą?%°…¦Dƒ’|¬Zľł’›Ų?ų/Öīo‹mÉ|ēb¾}Õ9¼ŅŚĢ/€0ŪĮ—oų%;īśa¾|Ōgéb.ßmÓæĮźžßé’›O"Ÿž3[Će¼ĒI»HHąD`][[›~ä‘'ā Žn?į„£ĆŚŚc›K³®¦¦¦čĮxąęt|ūĄĘūŃ aŁpć’š&wAÆÕK ģ:ČgĆÆ¾zD €|-¹bó€ÆĘlĪBöŚĖĖž×­ƒ™3½!ąż÷ĆÆ~Ė—ūvˆO?ķK$FX ą³’›k„ŲļF)Ąż­ąv;{_¼·plk5?yų»<~Ųļyś–¼veKēq²1œ‘Ļäē§’gļ&×M.ų@ń,vÉlą:ŪõxŽ!׌9īdžÓ°Š 7 PY4ƒøa-½ĪćU×3ę¼SųZ:õ¾”÷šņܑߣ±3feTĀ›5¼Y;™ŗ‰iM—bņ7 ’)$€5ˆ$FōG`GŹŽ$½H%…3VŪŽ$Ą«{oøpgj&G‰čńš‰#ūŹKiž£tĘY”ŗ²żÖ"¬5.€>j+qRē2žjauĘÉĄhöY ¦ņšśa:ī.É &¶‹}¾ó<»¾2F’ķϳԃQ¤¬Ę%‘*vĪFŹg•ˆ… ¬sDX)„E9hgœQiƒÄH£…0Z9ł²€Č Œ±B;Ač$Z "ē„¶#\ŽpĪ#מՙe3/ £Ż&W„gMŖéā%5Ś’d: ”ÖÕłņŃwh÷ƒAĄ’0%ŲCĪž÷R\pŪøź»—PQRεg^ʂ• Y汉ńÕc¹īĮ›xjlX™[“`ę䭙·|~)?ó‘OŽHpa'ĘWEę*k›ÖõYS¾<ĄZĆ;ŗö牄¹5ēõ.OĶ{–ó’v” I§R ¤ˆrJ…ʍ]Ł’üÆ=·Žš†³fīĮvSf²`ÕĀ>×£±Ķßʏ®Øüįo4œģ’Į’@ʐAU,zČŖߋϔTW'.-~­z„s$o½ć2-Ńze‹%ßĪO`…Nō”ś[!0Ī»üké4Rh!¤–tÕū'B’!„\®Ī_x t‰”"ņrEV ’0%b)…V‘LBå“ T*aDčtŽį_EĪTėo‡šõHņŸ«÷·¢½bÖĶ«Ī,ِ°UÖV-:jĀ/“üĪ=%’IāɁžœžÓ6qF ęÖ„Tāā˜žĮgŅUÓ>š(ÖaäĄ?ō’ł1Vw«ƒ0;ų‡nÓæÆ]Ÿo=¹«—q­sŒ7š½^yŠæz,¦Rø”Ōż÷¹Čų’ĢĀē•’łNŻ’{)żĻ׿’ū.JŪŚø‰‚äÕ’‡Q|ų#×ÕÕÅ]ōdž5kšĢIŸų„œ\Rbׯ_/jkMļkl’ŪĢ’ņń~€„Ģ͇O>éŪÜuxÕ ;ģą³Ü'äåļwß pÜqšĢ3›{¶‘ļ{/r?ļB:œČéĮö%%ü/Xąß?Ģė÷mæ=<ņˆ/ ˜=ŪwKČĒ–[Ā’Ž¢†æöŻĄęØ!6)+(J¶Ā؈ÓM–ū²ø“ĒļūFeÜ]^ĮŚŽŖ²vt1G8Ė'ńŗBJī Ęóƒ]~Ɗ\łKß xįOüĄÅœƒ/0B°Ü9¶2„ød(­7Ű¢ ;sG:;ŚXū×§ø«iöĀӘ]YŽÆĀķ]‹Gę`?}6ė;2¬ˆŅĢ-Æā±Y:qFM"N…X]šwŪl E[āwƒ ‡žH’DŪ› qC ź«[7>ö±xö®/VVŽģźŗµ"~łÅ“=‰0VZĄ‚b”D@kœUŠŲ IčVXė·iaæpÆüų6kä·„{÷U"#½Wƒüā„GĶŽŚŻ^Ń4.ځ‹1kČH'#gµ°ĪZe•4¶DH­… °Ö8oŚH§“Ö‰¶Źi‹ČJ”…µŚ"“±.ĀiēDhµŠ8§"–Ą øÄčųłåIüüņ ję؊ōžÓŖ‚ •ż_ƒt)Lݦ̀–fØÆóe½™Ź®æĄ³cįŹÅ,©_6ą±½§^X÷6§^ų-NūŌW™µķģ0­›OUī©Ć%k—³źÕL3‰ļżuĪøźŚ2žöłc{ĀỀżk×±ćsņ’Īl'Śū:ėNĢķohYīź9!ŗ€y `Įł©(ŻmŠ×NŸč ž§›ŹĮ;„–ö|ł_œš‘cłŽ§Nćė<ēz&.óŗżÅ{ ž‡xŽĮÓ?D$åcÉVŽĆ†Cø‰ Ł—VŁĢS+Œmī:š÷5žé“”B#¤ˆDČų—.BÅB¹D  )©\HKE"C+I(Ké“R6QA„]­żœ&“& „©P«ČY„„QB™8ė/¤p”7$zeżapÉæ†-_jœøėk§“ SrYūčpŽęŌū[+œU·ł3R8Už)’qŒüĮ’IšPVŒ¹—śµ¼Öų/œ··ć’~Āæ½‘C^yškŒfŚIüxØąæXŻoÓæ1%ŻžWļ00ųjŻ?lŗō’Ą!ŌżÆ|ƒŸ;÷7÷äÉŽ?lĮßU ąüó”ŖŹc-kįĀ aįBæOJųŹW|²µ±Ń·gĻ{m»-œ~:TVśń—^ź•Łūķē;”W-_v™'ø:Čūøƾź½Ülī Gœr ģ¹§W{æņ ÜqG7ö;üpoo­o—žųćƒ\DƼ>čÄæ¬ćæžõÆļ<śč£ķēwĒ|±ĶMņ8ūOˆ÷ƒX3“Ü{ÆA]x”w¾śi/ūæćhiń/ŗ#Žq æ9`W°™ŅłĪNßł ³³ēöŻw÷Ą’曽/‚s¾cĀ 'xĆÄ}ČæÉēĢŁŒÕūˆŲ<„>ń^—Œż×“;Ćo€g97ŪŹ¹Ł¾åŖ…kœ•pĪĪÓ£ĒĀm?f뤉ė°ģ™ŪŌ&Rœē²~¹BrĆ~_¢¾qbSI€LĘMFo»mÖ²ņW¹’ķŃöĒ3ųźv3čǟdĆ9øüv’ļ_Ā;ڲ"J3Æ|ƍŸĀĀ)ŪńĪÄédJ+rdY:> źMōõ2 Š»CĄ@$@ļ(œ$qĀ…ž}0 `L"ņdAžƒ'Et„YżāėļĻZ°Ęö0Ā) §DWŒ \œų÷co5@ž˜}·:qZ½ųŹpž®#S:ång>/~qłŽŁóė·LÕ§R9o€Rē„q.°ŹÅŅ*+…Å9+l:VĘNeµ‚@“d„02”QĪX)“Ö&”V„Z8-ŒLœq”µ.’9DbŒu!N„h !µs.0 tū[ėZ哚²ō‡§U…[ŒN÷‹–„€Q5ž'Ī@C=®~";!Ū@ŁŻŽs’V•Urīē¾”ŠśęžŸ’"Ͼ9‡—½Bēι“~9g\õcŹŅeŒÆKuÅ(ź›×±ś’µėœć¢æ’ æś+vœ±=’©oĮWSQ͇¦ūn[Oæł<¼üXלŖū1Ģ­y|W‡€śūņ]6¶·öŠŠāKŗźó‹é¾ætČē‘BņųܧłūswsÜ~G³Ż”m8jĻĆłē‹=„~M­ž¶½¶rtŃu÷wŽāc‡ ž™mčś"›†Ńi¢OHNW’­š@RÖ÷ŗ ۚ%ž³ŅfŸ]”]‡v΃~ēA¾°tKż-松1NH“žHa¤Zä3ž]Ą_t¹ü+)½įŸr‰”2–Ā%*r‰R*H„\,CtØT¢B§…"Q‘Ņ‘$³Aj"g‚”3‘ĘEÖŖĶĶśŪžYč)łØjģLļrWżJ»ńN7O/½ź™oLæ]‡ĀnųOü‡H‹õ’ā„’dšpŠGyžÆ¦Ł9Ŗ;Śųź½ć¶cæĄ č žóŁ’¢ķž€#OdŻ®ūpģ]72ė›?į™M’04Óæb1œŗ’w«å_óZēײ£µ|} ±3fĄ•WĀŖU^=|ā‰^i-„o½žÉOśß»{ńē_’:\~9ģ³<śØ÷^Ėdąį‡=ĄžyŲe?ĒŲ±¾\łÖ[aŃ"?Ö0j\q…Oźvtx [oŻ7³}öŁŻ,ŃF+žópsH€üws–ž=HŽą’Ćö×ć²Ė|ŁĆ™gząæė®žłÓŸ¼2bõjߥlzEKžyĖ‚Ÿ‰÷²`p»_ĪļüuZsŽÜ°XÄBrwPŹŸŗØųƱn9¢ī"¾fb~/‰@V—Öp\G’‹/•HŹĒó»: ß`($ĄpM&N#ĮæF—.YŒ9ų»4ž?›ĻŸt8;EĮČżzĒŅÕøļ\@ūϱN…,J˜_QÉÜńy{ź4LŽ‚ĪTŗ›EU9€Ÿ'öØ`āŹ664't½Ŗó$x" ’fÉR„(C! x›ĄžHčŁ! K [HH +IŅM…KLBŗ€Ht"Ā0“y њø¬ °Ę‰<‰`ĆŠõ 0.Ž< Ż]TX“8[įŅ€•NX‰ ¬ęōæEß®Ż >5Ģ?ķˆE•ćæõ†śŁļuę—름׈“rŽĄ•X:emā¤vÖ ¤UN[*-•MŒ å©„1Ņm„N¤ŠR9m“’NĒĘEĪ …‘ŚI“X+#Ś”‰"rN=ˆ€•Ķŗżę¦69ŗ<Ś{JU“Ė„²~ ¢4Lž“§į64#ÖÕAÓzpEī’½hža:Jqߜ‡Łg‡½_=–cö;Šcö;ŠX'¼ŗų ž?‡ēęĻ”īŽ·—=e{¦%k—ĮھBƒ9o½Ģ÷®śß=ęl9a >²ć~¹–|š‡»®ō¹č2,BīÆoŹ×’ū3FW½duÜēz,Zż6[Œ›FME5Mm=o½{€’Ü·7ƒvŚk ·=żÖ6ÕsēswsüžĒ2ūć§šÄܧ{“ūĖū¶>,˜nHśį€’Į÷æ7ąæXŲ0M\1–ør6šųĒŌ·ŗĢó+lņņķ ¹V~Sģ|·Q‹”°Ą_ū6^ź/…4yąZą”D"„ˆ„‰”ųE"%±d¢b%U¢„‰ƒĄ%*ļī¹$TtĖż#§匊”)LH椓2^Ö śż¼Ńß`’’¼Ńßīw¬9*ˆķ$€ŗ«Ļū÷'>U¬Ž­‘š!;żJøĮ?ƒ’|Ūæ2ųæļz¶=ņK¼U"°Ów¤³¬œ+ŚZ9Ē9*ę½Č •Uœ°Ļ'Yƒƒ’k~ĀĮŌ'?ĻS·$ž8$žaÓ’’SėžĮg’—¾LŠŃĮļń »cōh8ęęĶóą{ß}=öYŸ]O„¼Įśw¾ć3ļ÷Żē[Æ××ūäāܹޘüČ#»UÉą“µ„„pŚiž$ČGs³/aĪG6 żØ'8ĄĻ³Ė.Žä=¼‚ gŸķ ƒ’Ų?ŽrK_> >¬ĆæŒ:š„éśź«Æī¼śź«³Ī9‘§ķ?8ŽKĄå~ÖŅ·ćĀš's°bÜv[Oš_Z ūļćĘy°ūųćŻr’Ķ lÄæX²t— 7Dīg#›éĆó Łcł7Ķ÷¾ē¹Ė/‡žÓ!zØĆžž÷pĶ5›|:K·$Fņ•’…±9„­ą>öGn›ū{ī[¹˜ĻĒnÖ1h‘°ZF<7c[žŚå}Å© ’‡ -õü Ė!łmRpד)œ¶b-'8ĒGPüu·Ÿ±ņŗį­±?SĄAH $AÄF)Y¾rń™—³ńś{Ł÷§§ņ±wg¼A i#\z+Ł n¤1«}«æT ŹG±`ģ$VLšNÓäIdK+0AčĮkžŲ< °Sw/喝Ó4<ŚĘ)kZé¢ķņĒ(Ū\ƒKµ ģźS ˰€°&q’ö$¤Āe#€”Õ.›3ąJŒ$ azYærhƒˆbć( ˆ7ś+$¬u"ćm·\$ųźĮ)ļ'ųĻG„•5§-Īž]Šž‹Ę)% AJ¹.5€³i!‘ŲĄ†ĀI”%0–cbi|Ńi“…³Ę*i“tZ[t¤…¶ĘŚøČ&2N$N™Ph9Kh„0։@xB @»PåˆŪŌn:ļ[É<¹,•Śsrej—ńeżśąUnT ÄYX_Xßķ-]bĆ’…±nĆ;üņ– B°Ķä­Ųwū½Ųw‡Y|hŚ¶ĢŚnwfm·;g÷M–ׯäsæł ĘB”½Į>^Zō*Ÿ’ķl¦ŽĀō±S°8ŽZµØ»5`AL菚÷$ņÓå^Š}ēüWBmUMŸ„½“ų52q†t”ꋇœÄÅwż±ļā{­ł”Ć|ö’Ńן`U޹īћ8t׃©.ÅW’ßuY×ų„õĖSYĖį»}”/~…]fģH&Īšü[/?_‘ó5&ď6ļ¼½ĶOįT@RVK\Q‹NW mnm‰4ŲųÅ:›¼½Žąü}›“Xį³aĪ ¬CX¤š÷#%Ę9iœĄ&6q( IDATéŒóĄ_ ¢ų"‘Bų æt‰$2±hˆl „–‘ˆ„"QŽ8T¢B‘(%tąåž‰R²§Ü_9›7ł³q饕 -Ąp²žhƒ“¹zōA$’….’eÉöF‰õyšß_ÖßŖ~źżzšż©\kŁĀč§Ķōžugāņf(ą_+ŗĘæŪą’ŖŸrVGßl¾ˆ/õū< pņwøņźßrØÖģi-3Ÿ}„{Ö7ńŁO|‰„Pü磄‘OĒY>}ÓøåœK8ŗŪż½›Ž’“ŗčvżõ>¾ģ7Č)ŗāŁ\ŠkõźÜ<9‹˜µkżļźj˜>ŻĖū_}Õ?ÅfĢš¤®ĪƒóSOķī®ūÖ[ž’?ł œ{®ĒoÅ¢”Į—8챇?’ėÆ÷'„WüīwŻkX²ÄÆaˆ1 ŲĆZń"“.\'„0PL_śßļµ ēiŹĖ@Q×ėįÄé§{š Žąģ³}»;­=#5aÜ~;|ń‹›{&Ą3DķųK'›N;®ž Ž<žžwß°½ŻĖ’ómó±õÖ¾KĄĒ>ę߄’ś×f2Į?÷ĶyžżF*€Ā(T@_`8„­ąvü.ķ;ĀõųŸ¢Ė*|šÓ9Agø„no€™āŒ=žĄĶ«~OM8/·Ż”Ust·Ž  X)Ą:Ų(M†lL— W§čœæ† Ÿ:›Å»mĶžß<ŽY‡ļĆŲŖņž{Ļ –a’rŁ+’NS['R±&J±4]ĘāŖQ,8•5c§³qā4²A€ vśü<;büeÜ"`j(™zH9—^ŪÉ©½Ė6—čŻ&°`³Ģ‰M ‘( C¬A’Ķ:•'²Æš$€æ1Ķ‘A§& ‹ž$€ |»?gĒ=0¹Q~aS’Ö#5FŽżņ›įéē—µŸŒ.kUQ`‰R€µKž{o&IU„’ι72³–®Ž÷…½ŁAe“E…qpf—ŸĖŒ2®3ī⌈ø;īśwFÅ÷EPµ””š¦é½»ŗŗ¶ĢŒø÷üžø™]YÕUÕÕ]Ķ2>sž§žŖˆøq#2+22Ž÷¼ē=Ī$ó˜äNėEt‰fń]N(TƒS A%‘35WäŽ ©[¦N‹Ø–ĒhY‘k)žą„мAdŃ$C¤ĄÄKĄ‹ˆ73ūk”śūµĮß=°µtąŒŽŅ1 ;³ƒf¶1FóJeX°¶`ŸtsŻŗݲś¶~wœ`2ŁĢXžšż,ų~.¾āŪLķčā„Cå”ĆŸŹ ‡Ė–ķ[‡ƒ’]jŒa«7>ĢźƒŒ&øOń›[˚Ķk‡¶ŽK!°jćjŽ?ųžÜsȋœmå6žėGŸ„æŚĻ®ū/9ķ8ūä³PU~~ĆÆŲŠ½‘E³pś“N£ÆÖĻÅW^Ąó÷ćéGœL“Č7ū'1PķēĖæž:ļ<ē-œuĀóøģĘ˹ŻJaåśY½q Kę,ā=’öēõ—•·ó§åćƀōÄža’ć‘Ccl˜Pöæ¹I=õŽ䝳ČŪ§ķZ1Ј°¹Ļņ›‰Õ› ōÖ HĄؕb¢HõžA„ WgĮT !µē”)Dšw"¹8ĶU¬.b…dZWMķžT%oüÕU%Ϝ媱Č2Ÿ;g…+I.N ē“»æsYh•ūGM²ڜFɼi ęŠŻĖśbō °—2ų®4¼½]–i4/ŪÓ6}ß«7ļsĻé³jŻw"’’]™żžGšżA’­N’Ąˆus>]c’ęߏ6ų’Žg8u 7l^Ė®æŠ§žt:[¦Ķ¢8åŁ¼źŚĖłiŒ`‘%ĖoęēŪ6pŽyļęZŲügöČJJy§xϊÖóŲ•ōæ{/›ž=u’ćEÓųoõļČbä»»?@Ė„ )†KøJdˆ$hF“Æ:÷܄In»-į±;ļL>Æx|żėšō§§1ĶżĻ8#™•ļ»oŹāßsOZæpįĪĒhʬYI‰šÓŸ_’å/ļÖĖ|*°ŲF"śIr «>ŖIĶ'B<%uąöpĶ5éēå/Oķ«Æ†sĪIŁļĮAX°īø#ÉX®æ~²GŪĮõ.”=ĄĶLķ ąČÉžŌŗupę™éµ$Œ§NMlŪߘd=ŻŻpĮšąƒ“:dD†4?( 0V)Ąh±;$Ą-$*p¬k¹śćĢŲņŸ‹‘svlT®.Ļć_޾€‡ÖŻĒHŅTłŃ ?ČżkĒ‹čū# ;OaĒ­n²*mŲÜEY‰žŁSɗĻ``Ó#l¾k ¼śĆܞ98ėéńō£YxüL=h1Y)ū¹“»ū˽„kn„~łõ Ür[Õ±M• „ kŹm<ŌŁÅCÓę²vīBŗ—@’”i.Ć|†å9’U*C€žČ2³žŅĮ·$1± l¬ńEŻ`2$ģ\°7H€aę€%ØIŪ4“& €ƒ\ifņQ‡ ä¹d`N³!(—³Š$²¢ ģ½Õ‡Ļó\š$‚E5ѼRę uŒ""ģ)÷—ó!ŖZņ±d&õzĄ$š5+#R–ēQ‹®’ŗhfĪ×ctĪå!©iTŠ˜Ē¬P-$X!j…Eó#ˆ€’E²(āƒIfb™FńÉDÄ[4Įå+7ÅŹ-}”³,;jNgłŲEnvēųߗå2Ģ_LœæjU¤{²yō6œ­FAä鐜ōƼåw\yĖļPQ¦vt1XŽ»”« žønŁ\·ģĘÖUƶćŖļ°hÖB–=¼|Ų®æ¼é Ī<ž9“•Ūųū§żŒ?ńćĻaf|õŠo°tၷō^t♼čÄ3‡ķ’ą†‡vÆ<ćeØ(×Üunxh¾üę+yĮ Ė”‹ęĶ/|=oüŅŪ03¢Ežė§Ÿåg’ó¦ĻeC÷Fn}ą6~tŻĻwł^=ZąWĒ{ī±w6ļ)Śč/ڧażś=›bżĘ‡c¾rĖP¶_0“ÅŌ¢‰ ĄoFG iQ-@ MĘ~……ØåØ ų“«H]œ–~¹s’»¦³æ’«“ŗW+\sļ|įŌ _"§ä 'Rd™7†ÜæŌ”ū‹˜ 1īNÖĪżż]'|gõ[Wž0ė[ĖNŸ³£węhY’Ų²-“Tƒ’Č”]W,żĆęŠįŽŗ|ćG»6Õ>¾öč©+£bóļī]0u]}‰”œŹÓü#w<īŸ—”ū'jöW‰¹…¬ÅģoĮs9ģ M`æćRx Į?@÷FžŪ<ō¬ł¼ń¤ÓŁÉń’Ōē±¹Æ—ßz=—Ä‚Ć̘¹~5ß’ŠæsÉigņž#ŸÉöVššƒOó3ęaæ¹ vŻīÆY÷?2Ķ;YÓæÖüO¦ī’Ōq²’ŻW!÷ŽĖ?ūwŒ=‰z=aJetuõ’˜üƾöµdH~ÄI…|é„póĶšŻļ&%ņ±Ē&¹’Ošpɾ/}i" ‘nŒ4Uóņ>ńDøį†=~)3I¬»ń³”Ü­3D<±žörLFp¶'”¤ņꄥiŌMO&–,IŅ·æ=IŪGƟ’ ’ó?éāšDpppp+©~¤Ęī_ Žß üǤĪj¬øT+sŃEéƒ÷Žw$ӎīīäš9–üf‚ńé=øø‘dźø'ļĆø1ž  µ •­ąÅ#–Æ㚟²‹ĻĀoŽĢõ*_4VU}ĘE'æO6ź»V\L×ÖXNRXŪ4Ž’»r'Ąš–ł7­A÷’Žöoą|Æk›ĘiĻå®ÖcömOūĢśē"­$@¹/-WGÕĘśA¤^EÖ>DöĄ*Ś6Æ¢kėffU{™7XeaQg~ĢV˜yČ>̚7“)ķ”;ŹdŻŪ”§Ÿ°r Õu[©*ŌśUŁ®Ž-.cC¹Äŗ¶NÖN™É¦y‹Ų6s.żóS/·G>9’łDVaꓦøŌĮAƒ««¼ź—= ³§l%šsĄ9`SŅW&eų›ćĘ#šćŹ-ćFüĮĘrl£EĆ £Ń&  .Ū194;øĄsĄ- >#֐Ó“ģ©ÅĘ9…Ę˜ĘŖ&1 >KŲ“.&±1ö½ßŖ|¼kPŽļ¼ÆČÅĀē÷~|˓˷U:Kõœ8uL-š¤²$S-Tźf.ę¦y]1hŒę¬Ÿ‡čÉĶ…`>ā«H)Öb£ł"ˆĮ²,³Ā²Ā,³ ŽbČb!‰ˆŃ›‰·3‹’Y4£y3ą‰ŃcābÄłE]•ņ1‹:³#瓉w’ī¬ "Ż›aÓZ¤æ—Ż’0ž”łkŗqē8ą”}Ēžwō“˜Ł9ć>†rV¢w —Ūø+Õū7†«:^püsy֓Neńģ…”`ķ–õܰüĻ\vÓåōöŃÕ6…ŃØ š£?žŒ6®Śéh gĪgÉģ%ä!ē·–QĖk#OeĢÓ9pĄ’˜sĖhævoīQžł&Ž¢½‹¼k.EĒtL&^Ū6õY~ĖŚXżóš`}u#eū ń¦~FCęß$Ō¦ ŠÆ@‚؆QĖUµ ü QĶUHµžB.ŽQæŖ™KåšI‘9Ķń1dN‹Ģk]2 „²Īł@ĆŻæ$b¬ģ5ø²o‘ū œ7€æŖ˜cø‰WkÖæsSQ>ćæīżŗ«ĒyĮėśkĻŪ’µ›wōŖŠ©Ė‹$ˆ%¬Ō²„ڲo­S«kž6用bM—’ē~ųžėŚX?‡ „©ōn9 ķÓæż·EæŲ•Ł_e¤Ó’$ĮģėŻ©¦yoƒ’ę~ćžż÷{ųHu—V*|ļ-ę-0ŌīÆ)^½ćOtžöū|¾Øóģę~"l®tņ?s–pł>‡šš#+™óš½üs½Ź+J¾wžgxćŽrüŸLŻ’ńūŽķ?Įŗ’=’žÆ½¹åĖd·ÜŸĆĘ;N3žö4øöŚ„bLu÷łK2éėéIfā÷ߟŗ4Żś:V¬{ĪR)µ)?ļ¼ž›±xq*8ę˜ŌI`ɒ”Ä„¤ā>ńD8묄[Ī;öoPY–€’)§¤R…¾>xżė“1ą$b3š=ąn’`5°…TźŻTüÕĘćU° ų=©Ƥ‒Ü}4š’ś×§‹ģuƛģQ$1DHž$O€=U¤×æ× €SO…O} öŁ'i|źSšīwĆŅ„p䑓’^S.3ŁŽcĘDJFĘdżF#īü4ßĖG£ń/ =ŽŚ1…W>ļćC†–ōÜĢėh”ØņĖ&ųXÖŖøöm_ėć«XĮƒ=|±Ni=öD;ŒÕ°Ņ†UڰR…z×tĀÖ„TWßĒöm›Yæ}«ś¶3½dz½Īō˜ŗ|-S“YźņŠä^‹J…šżZ¢×gō”ŹtW:čīšĘ¶™sé6›Į™K(¦6€ÖČś·¾–†€Ć³žŌĘw[Į’š*Æŗj;ņ²Ėī@³CĄhŻ =¼LĘpw;ĄĪ%ƒ17ļ2\S ą2ш„’€| FHå!&Y‘£å̲šÄSšJ€ˆØ˃I³¤ ©(ņB=Pʼ‘aēüҟžD’™‰;w]ł%ļŸS]=oælc¹-õzP§.**±’™&"Ąrgāƒ™ *>ZĢE‹ÜE4Dē!—[”!ńÕ(eĶĶGGQĶ£³L‚eęĢAK¢’[ ™-Yƒ&’›š—ØŽĢ²Ķź%Ł5øø¶'ļ_³}Š]yęŸ<æ£rōü³ U¤§Ļy‹aŽbģ‡ī͉čėI7ä €Ņ1W>†ą·ŅŅ[ūŗ¹ā–«ĘÜ7ĘĄOoøŒŸŻšĖ1§Ū>ŲĖ…ßłšøēōȖu<²eŻØ`łŃ’»Ž¾wĮĢJ)Óß1ƒ¢}*ģč·jAżĪu±~Ӛ"¬īINž ō7[ųYk¶_vüM@‰bL- D%D$7± *…Š¢ä"š‹Z!NźNHė¼ęźČJ®*¹śōŪ{r'$gÕ‚ĢŠĢQxļrU R²"s„fæf›īžābOī_W1DaüZ’mÓ}mŪÜŹÆf><š*WÄy'~cÕłWüĒįļ®Z°ŠČśg½ŃŸž¹’iĘ#ƒ’(Ń:žüÓõ»—“_rķyūü“h“xł»üģs?²‚®õ³ĒūWH“)³īųĻg}ģ”Īß¼}’K<0–Łht ā\nõ:;’N’恒Z˜×'ž½Ē\.ßŻĢ’÷>ĶiŻ›9¹Tꁟ ”*,ƒĮ?Ą1ĒŅ{̱üŸ»Wönć½mfĢģåmŻĶŪaö&ŹźćŸÉ{Óń2u’£Lr»c‘† †+~óļŸr±5@:Pąųōa§qįį/fX•Ōm’MĒ}·sŸXj»W™Ā3Īž/vjøų—edĖ’›7‡:ŠtfVe¼fń˹¾Õ ;”3”ßWLś‘*R4c{7Ś=ˆė݆ė]‹ß¶…r_•ķŪh«ÕhĖk“ērĢń¤Œ¶y!JF^öTKķ fŌŚg0Ų>•ŚģŌgtŹķÄ,Ćr“JzF’ūwŅub—:į3ź›ƹl+W7Ē„|8 )k?²Ku‘#”e\™!E@“˜¬v_ ]"¼fāF(šóe W%Ā U P ˜‡d-J€“ -j‚ĀL+€Ŗ“÷|£ņĶr.ūŽužO”ų蔞KV>¹ō›é +½ĪiŒŃ¤^75u¢QS7…µ^jŃÄ ‰Q5ŃÅÜ4F՘źāBˆ>˜y sErĖ"āóz,ķ¤ˆęCnY4É,D#„XXf†·ˆ7‹™E|Lź‰Ć’:3p1ŠÓŁķåņQóڳC瓹Y»GØҳ鮂ōlb”Ū،v³z|Ą’č@zlš?ńyeÜķ#·=÷c žĒŸ{/€UŠr'”c:yē B©cēĮć„Õ ņ{6ÅüŽu!æos“"&‰’ĪŁžbĶl?M7%T, )ūÆB2öSrD Į Q-D¬—źüU%W'9Ž\”¢µĘ_Õ ļ5wb¹f’g* ௅÷’«j ‹!sœóĮW(ȈĶ:ŸIh¶õ’ū§¬ædX%ėæų“²žSlļ]©Ę†€F“3?tĻʽł‰Ż Ū/žĶ›ųF,aYnś·ŻūĮ¶ķÅI£½ĒõÓļĪ[ōŽ-ūvō©ŠyŁśżÜÕr©f…L{jķŗ±wNyMļ’Źśņ@įēÜŁwüŒ‡Ļ“H§AXvĘō—Żü¼™ĖGĪ»K§Ę’ ³æŠW«ÕȞąĶŻ“żšė\o6ä}U*óćó?Éėa8ųĻr¬iųšćo°hŁ­¼·Øs&£tžeÕOāœsßĢŖ=’“1żŪŗ’GKśæģj„kąź«ń×^Ė7bäļĒ;NkģŽą‘GRĘžūßO`½§'•zhR\w]2ż›3')O:)÷/})µÜoæŌYąĢ3įCRɀY:ī’üOņxźSÓķü׿†ÓNƒåĖӘ#RtP*}īčHpß}öۃ6ēæī"u©[MĀ5MÆ·æZĄćAP!I©æ ƽtųœ6Ł¾›Ä¶!ż}гݾ¶w§u;,OüĆųĄ„‰…Ż’cī²+”<¹Ē’»š{Ųį'FLü7žÜ÷9–*„öiķÓ(ڦan÷8%+"Ŋ-1æs}Ģļ\b=Œś-ü ¢*ŃL6~’jē C‚jģS€ā“!wž\LŠTĖ/9j…Øä>µśųkį‰Į—“įģ/!s18ēƒ+Y $±ä%˜jōY ^dØĪ_b,Šįr€]µö;ć÷7u}õœXŅõ7³ä-«žŗAUlĘź¾)ĻųŅ_tõøˆœ0ć7ž»š¦g}ē¬ģ@mŠ’SmŠæ/ė-ökė-N”D‹Š.’Ć?/ų÷-K§tē wł‡įf1Šsé†#—žqŪWķŸęśĆ öŗWcö0‘6“€’"ŌMk;=Ÿ=Öą ˰ļ~†ćÖ¬ä‹fĢk¬Ž³ņź×ŸĻƛĄHšßjś÷ėϳdå=¼8ä¤éR„§Tįź¼œÆuBź T§Żßī:žĆÄźžoš ł’w‘ŸżŒé6šĆz$Œ•JņL{ą“\*%°æjUęY–¤ū«W'“uH&}O}j*-¾é¦”…‡ŌÖļCŅņ’8Ō ąÉONąƆäÉÖT#Ϙ‘€żņå‰08ōŠ”‚Ž'BĄ¹¤<Ų°axŻ’”)IõÜzk2߃Ø?!a»»Iøf Ūäü>^€'õ]?ø”½ą0>vX’žÜuWŗh;;S_ȗ½,Ż“'Ü cGš0p3 ō^<@"+'zéĆy ©–~—=:÷$>šŌ#sĖ–ō^lŚ”>@kÖ$cŽH¬ß¹ēĀŚµ»œĪHģŲõ$%Äͤś’*2C¶»*Ų™IĄ8$Ą—éXw 7‘¼*L•Æ->˜·łoC$u+ š—oSYłī5c>@¹ƒ3Žž$Ų1vrŻ'xUQēć4Æua£kć_~+—/¶lHóķŠŲ]?E P ėZ)אzĆi.Æ#yŽ“~"³–Õ‘¦L/+a›āp€> °ĄÓuJßqĀ“ ’­9ēżj WŃ@õ$@«Ą7[’M OØZI€LŌ!5õƎķZ–Ļæ¤ķ3]5=v¼s{¢DĪėÜųµpģ”k§.hėq^bˆi%P˜:‹&y‹?€*ĮĢ™™Ōėź$/4b.T›xˆ–EĢņ¢e±°ĢBR„hY dfÖš/“: ’|'fnH¼TēwVŹGĢkĖŸ[Ńićµ#B@z·!½[Óļ¾ŽįŪ’ü·lūß ž£/ڧR“M%“O#f#ļp»+"ł½›b~ĒśPܳ1Ę|lŠ/M5õÜlÖö§~‘dč[²żA’‹a¢AÅ Q D §äā4±Bä*Rą,WI€ßK"T­Č2­+’ąļ2_xOŽ“ą}ŒĪIšå¬ š7®cę$6ėü1j Ą?µnmČż[€wųS’ģ$"÷®;®DąŃ3ÆķŅ+ßzš!ż~åʃæjĆÄ(E'Ūo|ÉāW{随dµxĄ–ż:>{Ķ›öż~³Åßїm\zčļ7æßÕm@½Mļųõ»|Ćą æ#•’•ēŠhóŻP½’9oæļK„Įpl½¬w~÷#ūæ&Vļæ+šßŚęļ‰ž}ưļOæcĘ~Ķē‹œS›­ŅĪ×ĪżwŽ?6õ±ĄÓš>(—‡Ļ?¬ŻßĄXąTÓæ=’šųŌż7cŁ…Č7⮸‚WĘ •’šā)O[nID̑n‹“?ī$įœ5¤īUö¼Üū µ ÕĄœšæ¼v²“®[—~œƒÓOO ’E/Jž½½éĀ™3'õ™Üč%™Ž­$ÉD61tAL&"‰uZ \ )%&ƒ¤×æ–Ł±G5ö¤+Ą®ZŽK_C’–ćåµA~˜UxĆs>ĆÆFŽ9 lYcžÆēÕMšpC+ųæżB××óU‹ßåC-š XYÅb‰RƛŠ#8uāŚ²˜ÓP/¬ęL$˜Y”"e³ØŖyԘQ„N«„(ꢗą\(\ĄČ “p*y* ĄkjyˆęcļbĢB-dVhR ˜zó¦ā%Foļ$•N$z ėśŠĮu+®¼OżĀ©åģˆym„CfWtzŪÄČē°i3±i3 ·§A tC’vd4C—ĒüÜŃV=:ąĀē5šæ«c eŠö©ķ]„J±Ō6чĻSä+¶ÄüŽõ!ægc“Z±藖Lk]?IāMˆ";Lż"Ś~C‚KYü€Hn‡³æ¢RwJ!Ī Ķ³Õ\åN%IśŸ«’Õų7?…÷¾ų\) ®lĮ{ f.āƒyć¹ ęˆ1Ŗ˜+§+æiņ—cņG„¢±U‘Xo÷·•ū‹cŖ]~M³½_,awžķœūf¬ųŌ‚{zß©ĮŗŽūžš‹\=.)JŗźŖ7ķū}|zpøós—o>°żµ§|eõ’óuŪ§4zÖ§xĒe-żŒŻāÆYļÆ!N0'=$’{bö×<Ÿ‘ąßźõØ#ŚüĮųożž|,Į?Ą‰Ļdė‰ĻäŸ>{ÆļŪĪ»WąŸæõQ?īT^ūģ³Łc€ö ü×īo"Ž’£ÅH :^Ż’®Ą?LüēųmŪP³GO<ńīw'ĢV«„¶ļśÓŲ­' IbŚé@ɬ¾éšW«˜Tżż$£ł¹–ŌŠaĮ8cw3gĀūߟźÜ_łŹTkņŸ’™Œ?żé$K9’üŻņؓ²żw!9Dndļ9Ž )óæxĀ’¢»;e’kµTGóćĆ?ż|ö³é÷ķ·Ox*#Żļ–“Ź!ī#Ż÷ŗū’Xqįū÷²žTąšĘµtMc¹ĖF<†-oYŽX5Ę£Śāē°n–šßO~3;Õē¬2?§¼ī>¾MŗiP)óŗćŸĖА[ŽČKómüćąĘn[}…מūy.Śēx·7ŽŻŃė·#ó:a°i‹PuH¹ źƒCēW*'`>Lėf4Ąe#B |ńśŻN@yX–½¬X«”—#±4ō óšńÓļŪ’¦īŁŁ`XŖ…ĶpµNwĖŻ§Ļŗŗµ Ö ė]¬ue˜æ¬ļYbt”ŖqéĢՃ«Öž4mE«ä?Ø ¹üĒČs>»ęļ¦l)^°eqłāk»7C£šąŚ0µœzˆ»åōß žóĮŽ EęVoPé#Įæó˜ŽØŖß[ąą—ßą ūībꁇ°M]2üsN:›ī¹“[z9 h‘ŏ<Č߯w·|Jj«¼ųĻ÷ ü·ēĆ_ Œž[źžK‡ØŃ²’Ū™˜ō’0°u£mh‰ń¤’ūŽX™³{1Ų²eČķ·£+VmÜȱņ’'r<ėYš·›ŌŪł üėæ•ģåš$Œ³”ło¶|L’œWL˜Š~BI^󁧟iü½GŃŁ ?üa2¦ųįaūöįŪ=4ÕĘĻ™“¤š»ˆ¬"’ėIķīī#µ‡Ø³w@ƒ’¦‹€÷ēī…9wŠÅ‹įƒ„—¼$¹e¾ķm©Žg7c; ų_OĀŁw2䃚˜1cukĄū@ŽmCK\ž^r> Ā-ē|‘“®ż ³7®į 9kĒ@åŹ©óxĶó/`ŲwA³3Ą¦5éwŪ†”sŁŪå#K`x9@©E P÷ `%Ąhå‹2ŚNéä…!’mośŁfvjĀ=Gčģ®Ó_t¦y'S{§MąŽż…’€¶ŹP @VG) RV"Ø łˆr€¼Ł0µ ܱŽ;­ÅTpž»>0s@OļųĮä.zß}IBtŃEéFrĖ-IjuąšÅÉ© ƒ/ĢłŽ“£ŗ~;ēĄ©³ ±Il4ü  !jņpØ!&&”nB”…!łČցQuGi@..ęęb4ss¹™§PWÄč‰ā‹B|ŒĮĒB|C­C0ßZŒÅ[ˆŽ¢5[ śˆ8I­“7€˜‹fŽhN’q  ØYTiϼ?pV„tĄĢ²ßFI»Ź·u%$Ļ‘Įķɤæ7ŻźÜÓ’™žķ4pwĄ’®ę6—Ė„JGćw'±Ō¾k…Ā8ay ¬ī‰Åż›cżŽM1¬ļMRždaBź2“¼“¼ß€(J¤Q×ßlßgMŅ )’“æQ ĢĀSæF6_„B;²ż&i½Oõż…ŠĪ[!b¹WĶUcš™/œZ”™ē¤hÖų{MRWņ©’FKK?ē$Žeš×Zē?¦ÜŸ”Z’ćæ·śä¹÷öõ›?äüĮ).‡”Śü` ·€,ÓØQ¬ck^zę‡īłbV‹KźķzĒ>zčėšsh½°č’śąIæŲ°téo¶|MŒĢT¶’éõóĻ~ų€ĪžVÉ?yάj'}{Ż›:·g’—åŽ_¼oń«ņ’+`ĶžŲu›?ļ†Ąļhą§ń{ üļӜ¶a Ř0¬*ĶœĒ…Æ—ƐéßÕ?`Ž­äĖ”ąøĘŖ¢½‹žĖ'ų\»_“’{³Ż'’T +HĆm$©žönĘ»už5Ą³hd‘÷Ftt¤ś’K/MÆ÷ž>łÉT °›Q”÷’Ž‹¦āQÆż^ļ{ßčgד<–Ś²žpvV“Ŗ`l%ĄL <Ī£äŗĖȹ—o“ü,ņRē,’Oééę2†Œžś]‰·-y;oßē…ōĪ1G°¤£ ZTÕMĆU°k%@W)-TŒTĄųJ÷L 0G©œ:…o:”™‰Ž=·üŖ‡ŸøYžŁmd3ƒ_.ī ū­,%d¢J€Ø õ@s]c?)Ū?š`<5€¶ŒkUŒ$Ÿ2…¦Ą1¾R—yLJ e®Cźļb +9k(bL7/'V ųDJ-j€hVG-˜{Žmmoō¶Ł’}žšxųįä*śŽwĄŻw'BąōÓįŲcįæ˜Ō!T„ŪėƒÕSģž®ŁmŪJe&” ?‰ģ0iøz;ŠÄ ę21ēÕŌ'CĢ2Ń(­Š’"@DM½Fu˜šEčœU‹ź5¢DuÄ¢ Ŗ 5€ŌiPgMŁÖVU€Š„L¬“€"žźŖĆ¢Ŗšålc½~φj톇źwmŖ[wÄķ*«ø‰ŹįVnĒ:§a3ęē.&Ī]ŒM›…utaå ØG,Bl©b›p¶{7Į’˜»ģ ŁO`īĒ©īßTˆåbĒ4ņ®ŁÓR›½/µ9ū’OKč˜N¬tb¾“ūąß lčµü¶u±zՊ0ų³{ņڟ׳ŖīźĮ„f–ߊtm!qHėBP”@)D“)ŁĻE­ĄI®Ŗjź$/uźź¤&NźŽIUŠÜu ķEĪ1€Ėk<ż–_st„ßļs0Ցąæq’ėĮ’-¤ēĢŃāŌ ‚€žżÕ2ܶų3NK—Ām·%’sŸKĘz½½»Śsü˜;¾ņ•äƶe ¼ō„šÜē&מ½Æ~uźtvõÕ{g¾Q%a›m¤v€}uCxõÆ*&•qŲ HDąŅgį# }'Ó§§Öw×]—.ņžžä¹‹‘ž e¹ļ`8ųßŪ€· ]d"]l{%N=5}X^żj8į„äŗ¹a$µūj’āARÉĀcž›!2ś‡š‚–ē…#¶½x7ұbĒ—›õa÷2Ļ¢Ę1f/ĀÖ3ēbw^Ā߬ś)Ÿ˜2cģsŲ tXū””1ݤ/9€J޵r>•öēźņĆ’—Mf Tąd’š}ņux³5Ķ1ƍģoŗų²Nil²žČ»~¶™6Ēf- Ļčą5NX:Ķ󙿙˾ńP1š”°,;_słČŗÅĘ~®Ŗulž8?”ńhÖ=Ž­FµĘXēvßę°6‡iĊˆķČ܌2¶ź0±ÖŸĒzć^–“ļxmuĄÕrsNL+XpXóĘ„«©Ų@£eœ6ž1¶ß6)•ĀP‹„½ÕjŅäMš ‚Ī­öŌ§…ĮŖŃDUŒ„䓹\Źś5V!ŠI¦!Ė,dZ·ƒ}EC©-+ŹŽ‡§…+[(gVTJš—ĖVdšg%­gõr…ŗĻ“žµ»Z¹SkšQs%ŖĪ3č=Õ¬¬ƒ„Š–Ź2XŖ0P*¹~W²žR¦żYʀs2yķw™ö;Ļ€÷:ą=żźu@ 8/Ž3 ^4ÓAq ŠJUT«$ UE­¦Nk uŪÜ?P½~õ¶žoßŗ¹ūĆWočūśĶŻÕß®čĻWl­[½Ų³‡ē±Ī©ÄŁ ‹—R,}õ£N¦ž¤S(~2žę.!NŸµu‚ó’žE°¬Bč˜F>}>õ9ū3øčPś<–¾„'3°ßS\põ™KȧĢ$–vßø3Āś^«]æ:ōū¶¼ēƒæ«m’ōuÕžĖī­×Wl®Ē*AT‚ AD „ĀTsT TsqRGČUØć؋hŻTkā¤&Ž*žŖ8©ŖsƒNeP ¢2ØN«źšNŌɀzéw^śœ—ž,“>_Ņž¬LæĖ“æT–¾RÅõł²õg%7PŖø¬,żå²ōgށ¬¬ƒY¦Õr™Ŗ+S+uøj¹ģ]EjYÅź•’ÖKm®^šāźZŃ¢ä\īKVH%†¶’åJ\)‹Ž-Äc°rY¢4²žŖb™jh¶öS'ÖZēÆõ”õ/H’ūŪĪ\ō‡¼¬«¦­üĒ#®ŚpP°`y£Öæ žŪ{Bvęū—æsß[»?pĢ·W擢Q³ļįž“§­[õ”®‹€ˆįųͦL[5Š>Ņåß9±¬$ńšó~7”d5@ē¦śŁ3Ö„dž—³ę Žķ•žx4‘.ŠŽ™Ł%—½mį«ÖҶ v®÷w^¬>šŁ_ü7%’Mš_„ŗÅ1Śüža|š?lŻ€’_ž‡l^ĻgHü{µRį»YĘU4ŚEWyéw>ÉwΦįß¼Eäoų̜ǫDŲPäœqŻĻųķ%ńä‘ēZŖ`{Śīļ‰žaru’ĶēŚü ”œ¬!‘ŌbyWqŅIpōŃéļ}÷M zÖ¬ń÷ń>¹ųóę„–‹„壎Ś#óõqŠAƗŸö4xžó÷|¾]ÄT ³ńÓN6[b’UĘćaŲFŗ)l'}¶žDĀo&%fw;N?=’ē??9Ž_rIĮ÷Ž»Ė]s†Ą’ķ$Bā^`= žģtƒŻ I÷ę-ĄMĄ7±.ø_ž2}xŖ“£¶‘²žMgĢķ¤÷źqcĆdŒƒ_0Ž)ąČi x*ŲÕc<:ö‚M±­÷jœ¼£q>wĒĄ"3ž³±¹Ąńé_Čūż łC#ö½Ÿįķ[cö"ģšwshm€ot=ōUnŻēŸ¹d,S@€Ķ[`ÖLŒ)CĘ€ŻĄōNl a H6“ļHS@€RŽÕcś€Ī Vo”” ¬Ž±s9@^ĘZĖļĄ[ā«Ž “õEĪ’y—ų¤J ką‹,Ǝ(1æŻóĘĘ{č+ŹĮƒpe[Vt"c†)ZpJŽ0ūkQ:¤ĖćQ0„]–HDĄ® c=u2mVää1#ShōĶ딲’…Ģ$€Å†9 : „Z,(«-c±†ģæ[¼+L6f<õ©©-ČöķIF5–Ķīi§%z济źšĆ“ą†šśīfĢ'ėģļœŽ×*ķ3Ā  ę¼3kt $/…ŲHŠ7Ū$:ÅP Y4‰1—TĮ™ÆˆY‘ŗ™b!&bfS]¶¹ƒfcnZr$ĶsœSõ±0-¢¹,£(ņč‚I2’óę¢3ÆQ}”āÕ¬.>šyÄLj&™óĮĢćÄaācĄ›˜ÄE'Q<†3‹N£ø( ó@5%š*ābՈę«{Šbu÷ ]󠊊ø…]™ŪgZŁ/žž¹…]ŽM¦dĄeÄĪiŠ9mēmy­W”Ł+“V…¼Šęµ$=*&pū Į’®Ž»Ó6牾Œł2V*}ĖJĬBĢJXÖ6)éžXaE$<²=†ÕŪ¬xpk(VuĒ8ļ0īkHų‡ųŃlŪ&IöUˆ†F-üD @4•(’HĂØ3 ŖD­P‘`X!ŖA““•Ā©ä¦+œjAĆŌOœ6~ÄĀ{)”XųĢų<—¹Ā9+œ“`ŽbęŖ>ŗ’-jt ©æøŪœīś‹‹AL4Z¹œ²Ļ£ü©+5ާVw’fóĆ08Åå+Ÿ>룇\¹ń ž€«7¼óžć¦W5äŠÆ*f”Ŗ>S*Ū‹§ņ’V½ą÷oŚ÷ēͽ^¹ųŗkæ9umż®n‹ŸõÕµļłłzwS;³Ćč/Ā@»݋ھ=끁w‹ŃöäÆ?łŖ×Ģ’-@½¤qó’ņWĖ}aуOķüńņS§= -’’śĪ’˜˜ŁßŽpś‡Į’hüDĄm]±ŒOc“‰°mɁ¼ō•’Ę-ßłń.xėĒų*Lü×ī[š?^ridŒV÷ßŗü‹µHŽ9p¢s6ćŖ« «k—Źh>÷¹Tjż²—=ęöŪ'6×Dāģ³įóŸOޚńŠW$„å£ķ¤'ÜŃalčńæ6oŅZ#a–ęüąŸ€½V''”žaŸóœŌān‚b3 抔ł’ p‰čćѼMÄ:ą§Ą ąeģ†I‚’Ņūq/p‰ŁL2Ęx|M1c ©õX$ĄČ®°{$Ą-@«Ąõ?āR›@ –`ŹaYŪT^łür[sģ>`#I€‘±l ȽŸbf­›K£$Ōyįōœo× Š6wųœ­$@-ĒŹć•6ŒAŲS` dĒg|ÅĮMÖųK·ófw_ĀZI€C¦šĶŁ¢±źś*_ņ6˜#ōaŁ$€k8’·’ķPnžn!`l_×WXŲ›]vY"œ–D·Ž p@fäÕVj”@ÕKVĘŗr7e¬cł<ć©™ļĀ…šį§ō@„ŁÉūß’ńpĶ5iłšĆ“/ĄŖUš–·$‡ŃÆ}m·OaŠhjqŹ`_QŹsēŠ€xgNe ±©xšĆ‰§bŖf„ŗ·R÷9ģa;rVuÖYPŹeŽ‹Ņ!˜‚EŖ5G_Ƴ Ż÷Ƚ]Üõ¬øbm»U5Wg…©ĖĢÅ܊<š“B\®ųˆz)Ģńћ³B}īƒ'ØsŃ|PńŽš!ˆ7‹^d!ˆ33ÆQ ^`t2M-·EC-Ŗ¢(†ōäį‘žj->¤€jWŹ%S3æxZÉ/ģņ~žGę&ż½AV"f„q‡H‘#E=¹xµä?s$„ E2²(rI$3°qščLˆĮ’ä"&’ź~Ōaź0ļ1M2æĶg˜Ļ’o†+„›‚< ƒøuĄĀźm±XÓó‡¶Å°®7Zˆi«6jųąĒ†ŌMÉśB„éóć«^rå;÷»d4—’»Ī˜žŪSæ4š.@¦l- µŽą÷o˜ū“1]žVšæ#ė?³æ‘J¶VÉ?<¶ą?˰o|†æ‹EŹBϚĻ[›ąą¬7p×m×ń·æ’>ß* Nˆ‘#nų—uoįŸ’V6Ÿ+^š/<ų¤§ń¼|–Ö«¼(õöšį½™#ß÷%Ž“7Ą?¤ē§Żi÷7Ń8 ģ–]Œ™lŻ’ČķÕn$ŌP›˜6-eŠ‹"łf“·'“ŪnśŹĘ3`Ÿ}ą”‡§æĻ>)»_.Ć1ǤŽkė×§Öė+VĄgĄ=÷¤ńG•Ŗ[ńĒ>ū$l¶|9ÜzkZW©¤Ē‡ŪoOēC­ÜĶR3ĖŅńśśŅ¾‹C©+WĶ}č”)±~}"3š*ļE‹R·3ēŅłuwĆÆ=.&¬JŠŪ?%žOš˜D3¾•tń$™łrąL`ŽD'z’ūwėø9©ę£™łæ›DÜOŹü7[Ż=š¬OS±”m’.ɛįyü<zHļĒ=¤ŗ’V2¤YóøĘX­NjɐKÓM]ŽX†ä9ļlŁ<0U¾¶ųŽ~ü+¹’H`TĄÕų÷ńķfYĖ÷?„WģŖ= Ąą¬}D{ĄV ‡¤qjĘŽ"Ø O/ń9'<§¹Ŗ/šĮK·s1 oŲ$ž=2xĮŽó¬sĮŗ¾”ųn‚ž¼Ė<ā% ­DĄī’ˆ€ŃHHH»"hī7VuEJ  >Zęa0G™”²F]§–A࢕! ¹ y4)å»_ūÜqÉf÷ģ³S]’”‡&ՉFµšF“EļK^’Z±ģ¦  ‚ś"1·RrĖ¢ Ez"ىPŒ8œ8f„-<é^NŸßĶ©Y“±J+P£ŅVPi+d֜‡ÜĆß¼ąaŚÜ²Ū¦„æ»„ŪśMrē(4š+rsåHQÄäĘM½©¹Ā‰ĻĄYŻ|uĮ›©—`.ńfxUńfĮ[Ģ23\"’2g6‚DœFs†s˜©(*˜ĘhNEEŐŲWU[V­åwmP@ADf·{æ`Šwóŗ²l^§w󻜓g“'FÄ`½‡!1 æFF.73¢$Įœc/pć{7ŠHŲŲga]o ė¶ĒbĶöÖõĘX+š™ūF隘$‹YüOĄĘĢš'Ąo˜†ųm؅ŸÅ$šHT•`$#æD4:ZŒśI„ĄčאŒž4ą­pN Į°læĘĀ« dZx‹OȼŖČbȜU¢j]›§–:nd‹1sUÅFž2 ų+ąZĄ’h0”õoż7“šü…®}ķ~_އ–ŸģźqÉu‹•Ö IDATŒµÕ—~Õ¦kW<{Ž}D QBµęŠĪm=„ėĆūž¹ēcbT޼lż{xRĒytłzī2‰7¾lĮ{Ožźšohas§?<ųÆĒ_ņČŻ7½lī-4€tÉčoķ!mݦōK¤SŠøbM¤Å#%’cŌū;Ÿ®żŲ×[Œ|8ĻģFoó°·Ąæ/°mݼŗ±żś×ægØ}r³‚šøćŁžą¼kÅ]üP‹,Y~—õ}š—üć{øµéųŠTĻ’ ożäłÜø}+ĒhoėäŚ½žg·G’£EüO4ū’hƒ’Öģ’…ßµ>¤5SIŽŠ;űĒĀWĄĄ@śŖ>č Ņ!yÜ|s"zząć‡×¾6õä’gļ¼ćķ(«õ’]ėŁū”$'=„@ETPø RD±Pō¢XÆ XÆbį^A@‚(Ų°a傊 "]Ŗ("ML(!$!”ōvźžyßõūć9{ŸsNN‰üXŸĻœ³÷ģwfĻn3ļó¬g=‹<&T_ūŚČ¹¾āqĢD/ąoŒ„Į™gĀO÷õ‚ŌU×{ķóK—Ā‹_½É¾üåXzp÷ŻŃ7 lĻ~ŁepŃE±}ūi§Ak+\}ĢMqœrJ$Ž9&Ž?ńÄ8žžūc§·ŒåϵZløĖ.°ēž‘°xŁĖą'?‰ ń!"%N[Š„Yšœ‹-…€˜ ļ%’%°ŠXw~°/C|¹×#jDlō š$u“»‡ˆYļ2ÓżlIŻKf—Ļ™'PĒNĻFńµĻ#vĶ»›čƒ0H lVés E W 0 0Ņ(źµäŃoó&¬^keĀüJ ļ;üÜ\Ś`ŪÆøå2Ī'šĖڧrlõXVL–.DFB“/Ä‚ V6uŲP ÜėŖ\˜Ą›Ź}ō i`NI€1ķøI)g—ļSn\óĒåÜŌų^õ“9–ö"“ŌוcօČ3ÄåŲĘ&` øo-’ŗ–$)!Ō2)Õ>$€“FĄU°Ģ2M3 Pd©æīßė—¾x ‚’õ‰Ē‹3 €?’>üį8“X>Ų4lčšfbž*™9‘hņW~ŌL\ąsSUģ€Y²żžśćĒuÉ~2Āņ`!ˆnÕƞGōø=ZŠ{ĘŪõ?™įo]©–Uœę™7'Aœ8ÆY0g¹ø(łW‡Xrs¾ŖŽ\ļĢ…œ$HAxs–ą51ó‰xqŽ$–Ä2‡ˆ“`.DŪB'Ģ\„Q Šb¦f¦‘EQ1Ä$(K»²lq—ÖīFz£VJ„57„=u“G%nŹ(ē&¶;ÜītTu³MjL›ą‹z*²Å\p‚įWōXXŌe~ag‹;CžĢjóĻtzĖC|·$śU ö…½śĮs†ßĄD-€T‚ Ńp 1Ė2Dńfx&”ućJ!§¹"ž:č÷"źÅI¦¢¹(^œä*ā]b9Hž$äkfū%füSēɵ_ęŸW1/©Xāb͐SGHWMc­¾ˆIī-ČĘž)¹ų«y+-žBė¬$µ‡˜ųåŻoZt!Fŗū ‹N»ļŲ“ņŃ.Ā’$īļŽwns焹=WŒ^\;:ķ /8ōĀyļ¹śwü^¹ß§ö½böćžw—›—}WŒt»æÆśā“;·¾sξ‹ѐ„Ėæ„x™«µé3di*Į”F™äŠz’āuŌ*@­æÉ’ś8żĆŗƒ’ĮĘ“ n½†Éeöüd¾ ­ƒŅ ūŪ-t̙ɉޯ‹Ģ˜lĘųšŪŸ|†O<›ė ’>q—żō›<šĢ<Žųą×łõ¦’ƒe’a暾ķ2ÄcÆ#ų/cńL$ļAņ|h|tī¹ńņü–·Ä ų’8ō1¾å-šß’y|-Ś_~yT“¶ÖKŚŚb6ž’€#Œ™öĮ|ŚŪc¦įĀč)ü‰OĄ×æ>ōóC$śśb ÷ʀ꿞w|ę3pžł°Ć‘8śhøōŅ8ęC`ļ½ć4åżļ¤Å‡>4øø‘8_­§‡U*ž'ž…(šr"Hļ"‚⧉™č=‹e+¢Tc]>”œź—Ė""¹÷8t?^ˆµž?õŸēõœ?~NϧÕŪ„—’zŃŁKvóžīö,”¤Ć>—=ó"X°¹/k»9M%ŒDņ^ļ_n³±ŚüAqÜŚĄĮ¢Eó9ģÉń¦ø„üÜr†Ą¢<¶ļį¼aÖß9|Õ¾‚Ńŗäi~rįĒłÜ)_åāĘēxß§™µf žĖģŠÓ6jąėœŌZ?Žf·ńĶiś7’h’g5Ž™ fƒw›<9fč_łŹŗü½¹SZc,Z €Ö^Fż‡¢±ó š;ļŒą"°’Ÿ’‰Łś<|üHcļ½# š£ÅūsęD5Āk_['n½µ^.pūķ±„aҤX.0D”ĄæJT”’³rŁbųč[õ¶€«‰ t5ń·:Ÿˆ—ī¶&’Ó‰5ó„aCÉŌ”ܜxN\EĢ`Æ ‚’…ÄĢ’Åņ4QyŠ]<ēęŗåńvĒē‹cYĦQxāūņ41Ó?‹˜õŸE|oV±ƒ’įJ†"6¤ ēO8>ƒE•*'öMµD߬¹ż`Ķ$Ąå§šjŸóåā®%-œōÖÆrːIŪ`% PöĒ\_ oV-L7 pč$NH'”Ūdšµ+k|3mxmĶ$Ą®-Ljw|²<‹vßŗ·+ŖģŹīDĄītLpL¼m E@4l&2 ĶėćšIŲ0_€žķ‡) €uWµ ¾¢¹‡Ä>Ō(Õµ`R˜ĘĮ ™e ĖZņUCķsČXþ!£­8=uv?nXiŽĢLČZdüMM$ö”ĮbOF ‘  R %ą7*āQ B‘å/”źČÅċ’‹ÆD" ”÷‹“\ęč÷"⵨ėWµ\UrÕąuŸØyIι\U|Y۟ØēœqęŚ¢Ģ?urՀ¤¾_1Ķ‚Ķ ėü› ž`-Ą?üĖ1e­’ķ'nwń”_}ä•IͶ÷dļ»w»nńm6iN’~j¹uO¬ōś]»^UÖś_żŃm}ōs^Ō¶2?"ķ />ōüĒ?śėÓ¶;oō¢¬zŲžśĄØÅŁ;ŗĘŗß<|PĒ‚ •üÆ­ŽÖĻģoS€’2Žöal’•*öÓxkžq(Š·Żī¼ļĄćYrąńüā§§3ń|~hFĒź•œsĪĒxŃq'ņ©÷¤·ģH4ųoiĆśiŲÜīÆüo&Ē’Y÷ßž'ż › ˜1ØPéČ?{öŚŽ0ĘgĄWÄlžI' –GSŒyóā’ɓᩧ6læ[ożŽ[›?öXō (£‘¼([¶ßh¾Bžåāx^š¬G †K2 T, ¶å›R,q ķŚX–tR’Kˆ™õEÅżåÅžūŠń››į)I€Å ·WAłĮÄ6ö£ĻwN$Wž)–yĈYÄ÷ųi6½āF‰gÓ õµųŹ­œ -ō¾śŒ”[V¦C’eÜūYvĪ:ł9ÅoQSĪ~ė\ ucĄ’˜PØ`ó“ć•ÖŠßõ€®ų}/ēšŻI€¶ņæVcīßr¾å±ÖæŸ¦Ų„@ė+'ņž6įC!žóĻK™ÕŚ «Cl\_G?R5ĄŚH€ÄU$÷B©pZ‰Mę›H€T$ōł\īŽŹ¼ķ *ė _¾<ɕ±!īē;ī‹ļ–.]ēMēåµ\*x *Ž4ĆŖĪ@Qń[ļ¾Ö^æŪSždLž5”ķ»uŸ/ŻĒŌówµo>1ž%ź*yī² ĪgźĢ”.˜ę±D Ėrq‚8ēĢåhRõ¦yĄIĄł¬Q\qVx`Ø7I$˜óœzI@ŌLœžŽpQ̜QL”'Į“,ØJ05AšT"ŠX%~Śb†Fuy‘‡Į±åŻ’-ė.3”äĮD0”źDG·ˆ“U”–$–“&"-‰HK*ښ ©Š$ŠTœąiIØj„ĶR¤%NIĢÖה"2Ćś‚‘yȃY_>`½¹YĶś2³žÜ¬'3ėĶĢzr¬7³°ŗfteĮ¬œ Jóõ,fī…H•€śŻųiłņż"£A®³ū˜ZA˜a!‚}‚`†J°ø’@šužJĄoXPµ€Ŗ3/±Ę?ØŖ±(ķwęU4bA„Ü9ńˆę¢Į‹Ó<ń–˜w"^ ^ĶTƒqAU|¢ā5Æź¼Óh H|¢¬‘ķwJHL,O-˜#“ Ußob®³ŻC’®žPžCüA“Ü-ĄŸ¢ĻźŖ Ißćū’ŅĪ·,½#Żćś%’ū؁Oź«zHNP{ąØ)O™Łż½ńOō|8ÉmźĮ?~ź”?~q‡3²†Z’›?øŻżśœÓšķŲ¾4{Ū[N|«jOŲ[½صŗ»n}ßŌs]+%’>¶‘4ė%’ĶõžeÖCėż”nö×Ų {Ø6½½õVŗC’KHn¹–écĘŅ}ų›é—‘ žŸY@ŗrYTN¶¶ńĆc?ĶL€4Ēžė nżĮ霸ųI.ØõņŸæ¼ˆż'LāŌO|•ėjk’m֜Š~®’Įźž!&¹Ž’ǹȠø äåGj ~õÕ°ļ¾šćĆßžkē9Ó]·(§šż‡˜Ķonėže”‚Čõ¤aqŌĻÉŲR €2ń|Xfņ;‰™ś'ˆ~fD0ŃNL–5%ųÆeõ=D ½ŗaé*Ö׊±[R†»žžŗ‚a1ńuļ¼Ų•H€¬Kā’YN$B–ž\"č¼xŽR ±Ež$6•ĄĮƒÆųóJSĄ”āŌ³öͱŲõ0.[Āoˆ$¢üźĄOrvćøF`Įd›AH€ę}?$ĄeLyÜ«s¾ßx ƒ‘/oeŸ ¼„ĻéOuR+[f Ņ”øĆ;8¶]9E£Ņ¦¶šF`V0\›ĄMź PhŲ/4”°vƒ@ˆ}ķGb˜ūš%®¾šĀs5\µ"NÅPĖjR’I…°¼-ėķҰt“¹IƒķoŠøė®Hóļ±Gt:ōЁēy¬é**…”„%ö[½é¦”µ€ĆÄć”V“TśHń9PuOWŽjś0żąUvĀōEœ°9®ÉćsŻęS³ģ¾·S8ļ”­ĆSĶÄ\[ų嚁Ė2\Y"ąsS—ąœNU—G2Ą% d€W—{qāĢyœyqŠ9 ź0œ$øąÅaę‚Ib!– ā, sfØ .Ø9Ą^µ,Ą”€ *! "¦ĘR@$ŖT¢ N „—GØ«ÄE¾€Ģ$,ė–EÉ?œBÅĖŽėa?Ą5>Ģ5V¬å*T"óa¶2¤æ!V’³÷żą¾aW%Č/U…˜(f†F¢ śXĢŌ›„čöÆ„¹_SvƒźJ™įbŃŌĻ” ‚4fżū³üā3o¢Ž‰zŃ(÷/ (ļ? ӟˆkżBp—‹IØgū£”Ÿ: Ś"Į©…$ˆłŠzQo&bm©zI“Ę©ļ‡üs6šßķŗ…»ĪiĒć«Ē§}T°Šōx?š/LžŹ:€»ŽŻź)­žĶ˜…µć’ް۫¾õųńśŌŒŸ–„B·~jĘ/Ž<õ‘ż*Żž„Õåłk_~į‚;nżą¶×z'–±“„ē_‡’Ō‹®^ś3 “·vśW—ß“īqīņßæõ¹Ż“’ZcÖ‚ēÄ\‚ &łßŠz’ų\Cƒ’žūk©÷wÌkĀE_ąķ«–ói3&üķ&ęŒīąāćOįg£ĒÅņŁü\ńc0cĄÖ»óKˆąbv’]’Ķ-ē~Šš*ó͘dé]¼¢–q- ž›„’Ķąæ5Ćhe“€’gĆń°ŗ’ĘX¼ø’“6č…wɒųҤ˜1/c8®’žūcĒ€€÷½/6Ś1}züæ`A½_9…€ukń·paœšT«õ’†I“6ø¢Qˆ×»ü7¶|ĪŖN”Š„™(ė5Ź„’Fü1dÅ6å’5,„Ā ’¾…E ÖKCĕD°ž8±;¶Ä2ˆ)D 4–H„¤ ,…(I„Nź„ˈ秉ē»D—’„ؒtł·Šņ7ĒŗĶ*€į¢4nĢP~+ļÄ­˜ÅO(=a”æģų>Š3cųļāõ_ēUōņ!ęķż_œ2.ƍ*Ųō$ĄœĄā]”ŁmgF§¼1ķāŽ¬Z?žF Qܤ ē”ļWĶøöņÕÜŲŲąČ1¼zœć³.’[ża°ņ¾N¾SNF6f›Ą‘śų¾Į?ėõ- ‰ ÷5¬TŌśj“*BZ!ØXÆĻh &.­XŚ!ŁB—ĻÆp÷Ż‘ę’ÕÆ"Ķߜ½Ÿ93¶V9źØčņßO=-~o»-źźęĢYƙBĘ̼§'MŅ®“EkP?ł$åœ&q|šwöŸüo¾dÜɏź§.HüWęNp “ąC¦jęņ”\¦>ą‚:Ķ|H\m$¬ 8ēÕ¹€b‘ °\\0\0Ɖ×$jjĪLœĪ ē osā,ˆZ$TCĶLƒ‰'J*Šš‰j‚pDR@bĪ]ł)ŃO Nt"‘ˆkc¹@$āv‘•A?Q@#¤. †ēė&B`ūk‰5ΙҰ릓tńõzżņŸĒTHóc-!>Yä‹Z±Bā/¦1«of“ČśĒL¾”ć¼˜°~Ł?JŻÜO *źküxŸ“W+֋ę*Ź5ļœĘÖb>‚žA">q…™ŸśėśxMBH” b¦šW“šKDM‘WB@°˜ķWk”łūšG\„Ģ?žÓźĄ?QLB]²æ¾’]’ǚ=n\ųµi³V^~Ķ'w¼$4<Ž üMžŹq·œ¼żwüā#ū»Ü¦u,čyߞ7.»eę”ę–Ļ•V$„,ē¾7O&Ā µwsēÖ[£_tQ4ėŪ}wxņÉį½« ī½7v†˜]ßzėį·Y[¼ćńyēĪ…1…cĮōé‘ŲkÆč ą ö©VƒŽŽH ęCpß}qż‘Gʒ…4…Wæ¾÷½ :Ä@ÄOĄ’9 žį߇(£“„2 ›ś‡U.e„†„až±Eƒžę(K •‹ˆūÉÅ2‰čƒŠA,…hTB”ū( WQĻž/%žĖ2ˆNź„Ć–¤†yĘ:ś ėj 8z=H€ė~ĪW±Ų6O„ĒĘoĻqć_K³’ €Å—S}ųvN}|Ä,^H žµrIĒä8Ēi.€MO¬„’ī€ß•ÄųĄQģõPļ™iu?ž’8ø•\T®€Ń;§/~ŻĄėĘš’)ŽĻ*ģWl֕7¦Ūvy¾õH7+Ź}hX°žmGā ėVP[ė§čóXžÕ“½-Rē½*¦YMŌ'6»ŚūĻņź~ƒķcŠ!*f̈°lģŲŲ+§6ō£°Ūn0~¼ä‘u×’«®‚›o޳‚,ƒĒńÓ6ƽµnėėi­čŹźØ“§ZÕžóO9ū5žŠé‹ä]ėõ9F™Œy’Ćś±3^ŲwNVI—„$±ŖYpjb•™Ō§ź%E2ĢujfZ3K|nJ‚ĖƒØqĪ›ZĄIźœäę| ąĢ›3/jf·ą,ؚįŌGB Č5»įg,+ę KŗX÷ŌI05C¢āDCŠ¢˜jq†‰õŖ%1AžĶ öø )ĢĖļ®h<G /eŽ=PģÆ$ »½÷ļGžż·ćć}’ą˜µ/هŲ—ū+3żŃN±x”Dõ€!A¾XqæØåoČźƒXœa”ėė`ß,Øj0Å« *čće†_• Ī¢«¬ßN$7gAś³üęH0ŸÄ.¹“’$Öō;mAæ)Į„Ꝙõ·ļk’ų[kūFė Ł~Ē9 -Ev)óļyš(õ/źüw¹eÉG$Ųč±OuæmŪūVżń‰Y¢*¶ļ/ģÓŅ™¾óæ¶½ÖžżūŹs:Ēk÷œ}Ēž½ó_–_(FŗŪµ‹Oōąq'Ņīāš¢Ö’‘}:N»·óKÓfvC`ō^W,žüģ½Ś>@„~^ŗįÄ©7ķł¢w-Ü9}źÉYu—?ŒŃŒLņß,ė,³Łßڲž°qŪü]še>S‚UjmćZļß×Ė‘fL9{ß}\µ˜·’~…8W¤Nļ»–×¾ņ5üŖŃķ’²oój •@ū‡Ó¹×įü¶ša ü—±.ąCŪżąŠķžXš_Ä @o/\rItąß~ū(öėė‹zĶ‘¦pĆ š×æĘĢśQGĮß›=N8Ī>;^|ńšŪūļßśŒ; ¼żķqڱbE$.ŗžō'8öŲŲ`ōčśóµ¶Ā…FQįG>2pæ‹Į/~ß’~48ÜgŸØ&ųĮFv\CD#öyĪ’26WŸł%˜÷ÅRfų3ż9uĀ ™ ųwŠFECuOƒ%DĆĄ§©›Ī„ŽŁąa¢£’抒åžó‹ķ–ūŪR<6(Ī: ĪDS…ęZż™Åś2fs‡8!Ō€źZN9PšćżęüÓr¾X<“¬}"Gģś¹žv³,&9›‰w\ĪĻ꒐óVŠ6˜+*yŻK^Ē’ž.¤5@ÆCŖ­Pėxµ"kŻ ŒmZ!«ÕĒų $5$ ŠåÖĒ@u’‚õÕĶńęžÜJø„*ü‡@G€æž­—ßų„Y×n£·µš‘XŃ_½v׿ĒhvĻ£ P śkµt|YóæbŚūa\ҹŌĻҾ'GOj¹ėķó[&¤}.‰¦/Ÿi3ö’—œ%õl³G›IūŽĖ˜~ūäšwצ5­Š0g.K‚ˆ˜Ø. ib^Į9‚Šó©ŸD1æO• *޹hīę/‰śD%Zr§ā]"¹õ.‘\¹Øęā$wŽ\Er„Ü©ZģˆŁ IDATf¢’%"9Ī<*¹ĘżäNÉÕļ«äŖÄ’NrQĖEāX‘ųø$ń¶(%WČEŋJźE$Ņ©ōƗ¢]œ ¾hU—‹ŪĶ©ųxœāÉĶÄ#ź Å:ˆ‘\ā’uYņ†}ŌoC<.Ń!ĒK.B&JtĖwńvł^Æ#• ŃLU3Q2ÉTČTÉā暉JMœdŖŌT„¦Nj¢’%‰ŌPÉŌŃēœÖ$‘šK(Æ©“šsڧŽZā“OTjIJŸ(5ē¤Ļ„Ņē’8ĘUčKķK­iB-I„ęŖRKÕŅ„š«H_ź¤/­h-IµVq’¹T²4‘,­j-qšIŖYR%KR|šJ®Iź«­š%­źÓÉ+*AS ¤ę%•¦ų4‘¶¤Į%ĪŌ‰iĢ,7qXµ*Į¹ü3P1Į9151§j¢B5sÅŁLƒ71C|žżYü&ƒ?AX:ü'bĪ‹e}Y’%£V_ėĆK“©äæ0³æZĆ# žoų5Óę>Ęw—¤ÜųžS9ö°£¹uļĆø¾­ƒŸ-x„ķ½g`ō²EŽŻÅ¦īA钧Y±č Ž h_/’óęļ÷jfüś»Ģ˜7‡cŅ*Wæōõüycƒ’ĘvC€Ö|nŒŗ’Ń̙Ńt°ģćüs8šÉ%č²eø®.ʄĄ ]īo¼1^ĀwŲ!üĻ}.fųz(^Ī—..łżĒ7’N; ®».®{šĮČnj‰¢ĮGūøķ¶¾æ«VÅ}õōDįāÅü/_§œ×__{ķµ1ŠŃŸżl$V®Œ¹„E‹ā2mZ¬N¼ēž8ŻxųįxÜĒwuĮ.»D±āūß_/ČóŲŻxÖ¬xß,īū¶Ū†ķ‚P&G½Ń–ńQY*žošć9ĻpņĒåQ ŲÜ&źE+Ѱq]c4›B”÷7gZŹmK5@µń=*¶éß~5Mćś·D ±$ ¼ŠN0“ qõmŽ#’¦ZIĢōÉüä/ücŚ7v•–]ŪvŠųŹW"ČW…掋}u¾’żµo·"3ć5K]ŻÕĘŻ“vuånūNxhŌ褏$AÕ¤Ś#É)æ²ļV³5ęL[D\>¾öėk÷J®jéHz$Ėc.X‚!’©ęb‚©ęH¦¹©hī%– ˜‹„¦!˜ę•Ü4ęrC q!7gfj¢rs>ZČ9_dõ-g˜śœŃ ØyS ā̂ƒ€čÓ.ĮŌKˆ· % SŖ ¦Ä,z ˆY³¢‹@ł˜ b;A0‹Ķė(Šķ1ė'ä …}ż]vhŒHfõĶ ÖP²“ś…«ČÆy-ėÆó/„-)4ŠV|Vlkf`1‹_¼Ō˜É§˜˜µśZŌų Š+düfXв¶_$ˆ˜W4”r~‘r½F‡‡w&ޜ'źE$˜„ąœųXæO‰4ų$qŽD‚$!$ˆG$8•ąRń‰IȋL¢D0Ó¤ĮĢOBŻ M+!˜ˆ„N‚*6T¶æģŅŠģ|)ó‡hŠ)AL]¼ß˜ń¬_\?ø³?yNƚGŸ>ė+ÕÕł+ h™hQåXkљ3Śźó’:h܂Ę}‘ē …ļ@C­’ųµÖWūŲ/\n[#ōŻ÷ŗI'<ųšqó‚‹ĒÆAŒ,c✾ö×|gĮÆ4·iŁĢƒĒ½ūž×™„*Öčš_fża˜¬’Z$’½µÕ”R[ó+¾¾õž#uś‡:ųlL ž.<‹“V­ąLĄ^~ū¼öxžl4üĖV ß=›Ļ÷vĒvƚpĻ'¾ÅkĖyĄE'óŁž.>ZŽWåUžŹ=ūb“µ^ČĮ'|Œ‡7ų‡H4‚ų÷2żk{Č!øŁ³I,`,ŃĢ{Ćlšž’@L’Īī/–Gˆ‰ŅÕDõļ©Ž"¶˜ŒŹó±NaŌĮ{kV[V4*·m\ž“1@öŁg¬ƒlÜr€æ|šéY'æ$‚“ĀĒKšpļ)ģŸwó! ¼‰‚ÄQåf·‡ŒS\Ā™Æ@{­ĘKŹCž0…/—ą?ͱ“ĪęœļœJG­—w„Ą.!ŌKäŪGsęóąķ¦Ķ1ivóĶżåĀ €ķ×eūē£?Źņgß°ü»ŖĘGĻ+ž[1Ųēłœżņ®-†k ø.J€ĮLoā·óƒwøļ|F/x˜[0öĒWŽż6Ÿ[pé]Wņ–ń13öźß@xеrV€Ōŗł)Øš»OåųmfÄĪåŠ-E Pé­ßO䚞ؚ2Ą<ÜīąāL|eŸēŪ÷vrń"č^ŠmFQ9<åVéK2Žr]'·ē5$mŹŽæ²Mkå‹jt<øšćž¾’%żĻ»JŲN£qŪf5@³¶5@ϲ¤śĢæņ¾=wŪonÆÕ‰CӖ8féc}ó’ģ‘qÓZƞ¾’ø»&oß¾\U,“ę‡q']›ü\‚ ß¹w3Ē-iß½?Ł›ļtlÕ²,iI=<¦¾ÆpĖsiTX®¢‚äÕ!3ĶĶIš¦ź½¦ĮLKu€’SĖMÅŠ¼¬éā,¶T/RęĢD… ż*/jR’Ŗ¾0żoźMĮÄ÷ Hš¢*fŠ©L$¶ņŒŻ0Q…@ˆėÅ,ö+ qŠo»_˜BYZO’łyĄżāĪśĶK¬0ü«gŸI€ō5Ź F<jQĀ3žQD€ÆVģ¶4õ3 ±¢˜¢ŽCŪż Jü`Vdś½“L%ØhģC'Å6Ī;±øN$ŌæxÓ0š#bY~qĮR gn藐(ż ß9 ¢Ä’M ļ āMUl}³żĄæŁEx]3žżŽäØO?ų“74Ŗ¢yjQ_ųó¶»¶yN*2XųC4ł+ėü³ ŽžüœĻ“-ĖX¶mõ¼k>±ķ/²ę€73ļäö•łüGĒ’žóˆqs†ŹśÄčoSŗüĆČėż×ü\p:§vuņQ ;ę½ģ¶ĆK£Ś/Ͱūļ¢żšĖøŌēģŌ&nĖ»ß}67–ftBµ0üęg9zł2>cDX4ŗƒ³?q.?ßšE»æēų_[ö(ϲ)Ńģ2ąUk;ĪēcŠč!fü&f’ ŖĖž}żŃ†ˆēĻ­ų’ģCµ„ 3.vknøh6ŗą.é’Ā·Ž†óÆų0ŸĢ3>DŁī.N>o¬T8źĒ¹éé 8ĀwóK A˜¹ÓK8q›ń3.Ū–ϱŲÜJ€Z V’‡TxkžÄĮ&t׌‹ķįŪÕXYn7I *ļ.Į7^×Éķ;”mwogĢKZųt ¼ĆĄ!°Ē~¾Ąxżā²‘˜:°F" RŌ hÜv°V]`䁰žjXs|aĮaéč,k§K.[°āšĻ„)›Õ1mqe÷ {Ģj-÷dūųō©Žq-]u!öŗæ§GK²“ę/Ļ+/ŗōéÕ;Õ:ōž¤]»CĄ0B%q!MÅÕLƒ …2@,˜8C\l惡ÄņhĖU¼7L%Q/šĒrg "fź‚©7$R¦f"!gbźĶIÅL½G}bμ©$N½7u&źMTźĢŌ›iœ3Eó¦;Ś‹ MŹn†ŗP¶ 4  jH@ 5€Ha±'u¢ ÷ BŠ Ÿ‚8€† æE•@؏öŗVW Čš—ö«ŻT°b“©˜•åJŃ PāCL4rj ķM‰: 3 åū!Ŗś%Az”ńGŠ3ūĮÄ¹ą °}ū"ų—ļ3—ē% !1B 8s©x1 &˜$ A•fZ ‰‹-ūā:1±ˆ‰S'Į –éWŒš§_āßÕ¢b%*- €¢·¤•Ł~ÜĄæĮŲżń}õ°‘ńw¹ A Ÿ[הź­cēõģŽ=6½”eu¾Æzė˜ņp׉£–åī+}©IČD ü§•Āj2ĖȲ˜&uNģö’Śö‚ל?wĶmźų}zń–žćļo˜šŠ‹Æ^¶ćnYł‘k?:õS““¾[?0õ»>Ų÷śĘ'ŁŚ²ž•a²ž’’¬gµw~Ķļõ³žGŅ毑½©ŸO[÷tÅZļō†+8ꤗņ³4ĆęÜGėµ—ń‹üg·į½C€žĶoßžī¶éģ¤å5G3g«mČ75ųoŽ÷ę’ƒÅś€’†0"8}Œē €õF¹õŅéēčoŒēĻĒs>ÖG °1ż®>™/†Ą§DłŽZĘŁĄøbHM”’«“sĮĪåŸW~Ž]{r±»ĆŠ–)pĢē™Żü<% °x²źNZ³“nsPtįߜJ€{ó¢vž"Ā3²Løt>|ķ¾^Bō (h·©Šń’ž*Ā8’x‡ŽŠĖCe›ĄJ‚ŽĘ±£§Iģ|@·-čįó·®ä”žuąO¤LėoL_Z 0œ6L ±vd°±‰GØTšé\d­O’=ģžÅ%ÓĪzy2jŪįŽgsÅŖąyĆŅĒśV$įńŽÉÕ¶Ł{ĢÓwµHŚÅ“$ŒYj­ŸŗŌ]īŒQ›ūXGæÆōÜ{ŞvńųķZŸiiw™÷¦8G–E`ļpą “P‹Ź€yÉb‹t¼7Es$—č`fbyT HPŻey˜°ĒJ™¶U7SG×l\¤ŖfIÆR« Ł¢ K«Ųā»ŚüĀ•‰ÕĢTCˆąß„¢K;ā}lh^õżęM½ÅRƒ˜½7 >Ä6f1ė/E€€¢X$2ˆ bÄÜy°~ʆJµ½&ˆ–õĮ ēéß¾²ę•ņv±qß!¾ņ82~ĬNŁ~C¢ä1‚ŖXtū—@ģ ä›9¼`¦¢…ćæ$X™Õ×h—¤?³I"^‚˜‹&‘ļ\0 X ų£@Bš‡PÖń«JPM‚h0 Š/!6¬–ą؋.ĪIX#Óß ś Ųś›³żŠ ó ō­Mę ĄŸĮ’7.Ś~ĘĖŽnéĢw ŖŻĖf“\uū{·»¾Ść“oY²ó?Ž8eę”Ģ=fņģ®,Ū¦åāk?½żšŸš€ü‡sb¾”Ī’Ÿ>óņ÷v^ˆ)½£’[Z:óƒ$0zŁ“ō×b›ŸĄŠµžĆfż‰F#ĶśClĆ#“üĆś×ū6®1ė’ßįÅO.ą­ĪWxMœOüė^ZżCī6c¼+_ņr^µė,½ģ~™ēģd¦qā{¾ÄŸ†’•¢sÄjźmŸ š?”ć’ŚĄ’:“ūt²¾9ūæ¾ąæhg*Ädnšvࢵīó1x,ę³€ū€‰†źK‰ź€œēX’õyąłŲŲ!M·ĖĢfżįl.SĄk?Ģ1YĘ/Ał½cĢb;°J?k›Ą×üż]YネŃsą6ƒ!iįŲ—\ĄÕ;ņ<ūÕĒÆį”ĻššÄīÆā°Öb)ćę"^å8`‚šk‹Ņ’ĖžģįÜ»„5:Ļ–$Ąk;8­Čæ¼d%Ÿ,ĒŁĪī[„|I…}Źu³Wd|žšUÜ“)Ģaä%É&* €u+ H\EśzĶ-~Š&Wt‡[f|d¼ø-Īč3+Ÿ ×ŌV-­¶»»§ģ<źŚé/ūš˜ IÆ“ÅćÆqÆyį\wŚę>Ī‘ĘӖ÷|xzē¹Sw5sŌ„“Ė%ų`N0sńqē0B¬ÆW‚q¦®(‚K,4‚}p¦‚˜„DÄJI#ą7M"Ąw!hK$’B¶_fłĖ²‡$QļŖIĘŖż¾KZE¢ƒ? śa`¶č‡u–łĆځæsb‡~łŃ÷ŒYŠż.±Ż©VOŖ\ń‡Ļķüõrlµ+ø7œ6ė§IĶf„ē®÷L;nŽŽż%`Ή©ĆšF,9(Į)÷?ęœyµ8{gćsśTæż=Sß¹ųÅÕUŌ2j°^µžbō#«÷ļ_7 š‡‘™żŻyćļøŽsj}±oūh¾ś©/s~Yļ’Ļrrē >Wģūļ½y΁@>~ ļļ×øj(š’ķ/pąĖāž§ó’šßōÆ é';¢gT+°pĆZ¦Œ<ƌ~^’śŲA „–,‰īśų\vY½ŠŲ±ŃOxÕ*ųō§1f$ŚŚąė_ś°},–¦Lž \'ĀØQ±=”Yģ(0güö·±qŲx¹y#vF›Gģšv_ń>±Mz/Ļwx>žј±ʈ°”&5š6’ĻĪŹX³(°ˆMEÜń1öĶ{¹‘ˆ%K³ĘTąqIłęÄ=ødߓélmŲ~Žläļēr¹GhŹē_v!ē4ī·$żÕ»’Č{CĘ§Ø— ēæä½ōƒ§g‹€DĄįŹį+sīķ­+jɚŪģmLŪ±…æ “ōĢķcæ[W±pZ ā“įŻåJ+ŗ<ēŻ¼ŠKV‡Ų)MżZxY»cFf<ó×UüuyFŽŚ×ę  aÓv €õW@l¬PŃ®%Öņō½a—½ē·æóœź“Cl9§śĖ»—ŪV?ŻTõю­Ŗ7Lß«ćo“wµ$mWŌDƒÉg~ž~©£WöŪÜĒŗ.qjŪŹ+ŸŚ£rÕÄķZŗ6ĶköŁĶ3s%ģ;AL,CĢL&t†Öcļ³ĆvZjG¦ rLöLÅf_;>ÜxÕ¤šP„&šG īƒi‘ ę¼z hP)źōĶ#Ž,v š"„rĄ¼iį†IoŠ‚·rÉ(küµ’µJ¢`ĄAKćōՆ8æśč4gł=x_ė ƒ~ØKü”Øķ×ŲĘÖĢö—cÖµ¾ Æ²ęu¾Qźȹ³›šx×GLe•OX™Ō¬_½“pēösośļķÆ( žöū铯˜q÷ŖózĘ%W’į »|~(ąąžeTjAßxö¼ÓŪVł£ėånųĖNžā²—“¬Līæ¶¬£Ń_|ėjfµ¾°¹$’#­÷’żĻŁqÖ½ü"„X†'ĀŅöŃ|÷ä/qa9vł<’ĒBĪŽ »šć§pņ{æĘó£ņćÆ1ӌ–é{šź÷~<¶|ü žaŲŗ’Ęõ圻JT•ŽkĆbēc˾ķ¶zĢ)§ĄyēÅŪ[o O)ž7¾1k‹}.,¾]cĘĄźÕńöN;Å6ƒĆÅwĄ»ß ³×ŠÅ®WdDš?ų'Ńą!āWf%ńēłœ3Ürf…ĻĒæSuÖq<°š"`'¢<{L1.å3OXwå5e;ĀņłĆڤ?®e k'ī9©«s'0­„pK¹p×·qéū œC•$Ąåät|ļ"\¹Ļ'9Ž>Wēͤž–·ä}œf_WIĀœwāü DZ¬uaż˜6 ” ŗ t~S• į?śŒ³nģ껵pL»ćs“‹Ķ²>ĻĻž•qīC=¬ČkȁćxĮvĪWxa¹ƒg–ēœ~Õ®†’€QõćŲ%°iŌµ!ü‘֋[śx2ī™…—µ|ģ{>Õ¶Õ[ĀÉžo}]œ¼r~_p<Õ:6½cė[oŁnß s+£\­Õ.IO’?w„ŚÖ¶æ-)~Nēcæß9\¼õ^£©“¹Zćc®é?Du@Ķ«¤™¹w’UŽŲå¼ æōaQężrŖ]ž× öx‘Źˆ@<˜ęAÕ¼µ:1,›˜©ĻQĆb–ß#A%’@AÄM¼ˆjhūÅółXŠ`V:ōE{}(+õmd_Y €#*ł­<€ĢDP]rŠ…ó~YĖņm[.¾ł3.ķķņƒ~šÄ!Ū>°ź ŒÄ„ž;޵õ[ŸxIĒāņ¹Žtź#ēU;󿁚ȫ'¼÷Į£'ĢŌłüĖH ׂī^=”gtµw鋪«•ū³īY’¼{µiAT7F#š‡M'ł)ų’Ū͌»éJn°ĄTĄZŚųįqo㜭ö¦§l†UŖŲļ~Äv÷ß͟Ģ"9© ÷æź½ĻDų6ˆģ’üĻrģŹ%|Øy4»ģ{$«›ĮK[¼æ%€Ų¢M’š×—@Jœ{ xgóvėwŽ Æx¬\ g·Ü³żS¦Äõ'œ•O?Ē7wß ūģ3ō¾’$* ¶/f°C’õ_1ėŸē‘Œ8ź(8öŲŲ“čÉ'a’żažü }µtsG‰Ą Žšyąłų’6JŠ?8x°ėf&¹øų=‘©ģ$Źkj< m7ž­Ī·ĢCą ˆš{×Ā7Žųwwl×|Œ×ē½üP„‡¦¾„8‰Uó@:o&}č7œ2ž‹,=€OkĀÓ÷åÓßIDO€MT›źż×‡€(’ß/˜78·ĻļćĆÓ«œļč/“ 7nš—s֟;yčG…bļ­+\Š1z·Ó:s¾šŪ%\ æ$ qūg[ #óč[LeŃ7uÉ#öŹ÷ōM8į¤ÖIŪnĪžżYļ_6/ėU[Råī™°]럧½Ø}ք­[;“DiBšČkī”=_õ/÷ķĶxØõ?>¶H¼õÖµ½ĒjgNéüŽ“½ĒÜ=jJeµ4€" u0Ū¬ xél¦æīvJ[Ÿķøq|š`“‡Ū¾±³’MŽ"=2ĖUBśĶ¬ńGE‚7óAŌ £Bo&%p7SqÅv$ä…Ē˜Õ ž‚Ęäæ ¬ó7B}ĢĄćü‡!E\Ų²FĄßæN°PN‚ÅĕźĆEE“–Ģ’b{ƒRИĶwÕČY“›J‡ –Ä@f_]P@…ģk±Ļ¤pÖ÷%ż%ą—Ä•ÕCfłÓT¬¬ÉY® IDATō”%*jbƒ~X·lÜ׊2’x|ŚOZģyÅS»ģvĆā„gõ¤–ßv,ģ}ūŹ©-æøźwüNć~_uĮco˜ņHĻgŗĒ%W^ł…]Ī.÷±ūõKg¼š Ž‘d­z’ļæ²ÓI½+’±ž[Bf¾x7‚Ö~°i³žqæĆKžĮ’`€>s”¦ŽÖüŸ÷YĪīķę=c'ņ‰’>‹_5·ł«4€śĒ^OĢę7V\{U™µĒ>¼ć˜÷2Æłyžx)Sī¾™͘’TųķißęÄĶ ž†#¶Xš’ öXI“ÆžoØcIģøc=³žę7Ćļ~·öm €×½®¾zčńo{üāõūC[m Üö°Ćb@{{,8ä64•Į’ƒDCÅEDrą9מ'6FČ ŌĄƒŚ7©ž»Ÿ%’ĮZ×®k< üųõV}lāŪ¦2„: °x&śŠE|“šrå¾ßą1h Ų7œŹ.½Ė¹ƒhś·²ż’±wŽįqTē÷’ܙ٢Ž,[ī66ną†é`Ŗƒé%tüČ7„j @Ø ½Cč ”÷ЌéĶtl° ®ø÷"YVŻŻ)÷žžø;ŚŃz%K²d;ó<ūHŚ2;»Ś¹ē¼ē=o'ö>ģ&ę,œŠ5ķ)Nõl®BѧįA‚…!‹»GŽć™ķM­%‚Į€Š1"@ŗ ­"Ąø\^0į@ź$·äĄe:HżZė?­ć“u²qE|ēІ‡ųÄDPćJŽFŠŻ‚ŃÉ»©*— ß,ēuhLųŪ»%Śß ąo«­né!ź*ˆ®™aö­Z¢ö9Ę-<źņœ.=¶F;Ą7vW.sė…Ŗ g›?”…?ļ54wz×~9dib`xJ²8ķMޓںt‹ļd&œq†^mœ¶é åŅõNÉ]’|·ayŸ• ČYM’dłžĢ{Ł˜Üžö…Üčbžh؍4¦ĆZK®|°‡ūŲ‚Īę2²¤””å" C*?„ó“ ”ĄHVņĀĆJyŚ  {‘zƁCūW ·+\ŖæjįśDΧ¦HR/p›(L™”Pfņ6™$įś~B˜ÉūIÕ@š•ž$ł^Ņ9“ēĖ)B£W‹~ŪÕ½:%dYŽ…–GÄBD]”bž”āõ!£¢2ʊ„,ś“1æ>"ķĄŲĀF„_Øda#Ÿźå‡éO'ü¹Ņm#ż¹ŚÆ·§‰æ §ęϧž7eó0l·A$8毳 ×Ė†Ń·ßœŚż„Å{­Ōū£­ž†§Ä±÷`Ø^ŽäG—h({Ÿy ƒŪ’•ü·©ļ£›H–ŸBŖHŌZr¼÷$ŗßĶt@Hƒ/¬XݻäI°GM|BĄ?čūåä@VVė€sĻ…‡Öæt|ōQė_g.°Żļ? m’Ÿ…n XĻ’h ü*“¾åĘ@ć"tkviņwT£«Ż‹€5hBė„żÜÖ-%žėģÜ œNęÖęb-šštĖ€/ldk/l  2‰Óī!ožT:ōOQN:ī>ŽX»ć«»9Ƴ¹A©TžŸ€™"ĀŻ}Īį„NĆp3n«"¤„€}²]hš*€R¬‚Ī€PŠŹÜńeœ§cvj-ŗĮF8I’}jg\ę?öē8ĒLŖfIČBŒ+ą„|‹»ŠŸŻŗY1šRÅ2Č,¤_·¤ ®ƒ[CöźŸč_µ’Ń{Ųy_ŸÓµw±am‘cæž][Ī?źÖ9RPĪ2f啄¾ź:8ū‡n օ ĻÆZJ‰žz5|a÷*ćų&7jYp≰ưl<ū,äåĮ”‡Ā‹/B]²vÕ«—. <ż“ž{Ü8ķ,/ׄUqŚišę›ŗ”°Kųä}6LÆ2¶ß^owölųśėf_ėQĘźswČ}«ėąüEŃ\ÓŃÆ+Łļol\ÕžæwŌ Ū­–æe+œ‹ė…Ŗø»óčō^ęL3b4”3•›¬üc¢"]HVśÉ$$Oj¾PÅ…?ę/iPž¾>pL6Z)’Ź€Dę/’}"oą%٘h„‰ņ)šš-÷B(é?ÖDD& ¾¾#JHķ0”%•@u‹«¬c–Ŗ]W‹Ż Õr7œŲÕQf.ģl~6aø1iC®ˆūÆ&äęj!`Sš€o¾>} kW­ųįĘ÷=ōPķxņI­±Fėӄ t[Ąæ’­[ڈZ“°]łŸĢ%Ւﻓ·e®Ö&“Ęŗż+R¤æ 88=ē¼Ķ/ąjŠŖŅ`:]2AjÖä¶h/ńÅ£ŃcEZ”@ŻFtž†~OÆCŪpÖõtŠOTs"@&œ*]x…Ģ"@S˜ Œ ü½pbł\žD“„Å ;’‰7_½€“d‚æs‚Éf„Ūŗ_Ģ»žÉ tÓRŗŠŌr„=Pė–#b]P¾Pä *Cˆ¼bTPČĶGł"@yt*A‘A ‘‹ņE€ØƒŖ ˆŃlTŗĶBƒ `GQ9.FĮ5×Öpœ3āܹH°Į¶Sc ĆØ 68"hؕÜ6%Īb+ Ž ÆTńŹ)ÅōŹ\ äōpå8R‹"×A8µ(æ%Ą ”ŅE3„Āiģ0-”ē"ā¤D€ą6MåY’|!¹ą³P¾Ą_ 6%ų‹9_HxØØLB@Vrńź †D¹€4!bāхśŅø®ŗLZUē\µhōU9]īĪķŠé+<‡æW­R_%jma‰ŠPʝß9ōuŁ€ģéeżsֆs¤k¹¬än é!BNCīCf\}5ģŗ«N3F[ō/»LĒÆZ•ņ{,  O=ggŸ /¼£FĮ£ĀqǁēéĒ{,|ł%(÷ßG­E…‚‡”gĻT³c@‰g”ÖÖŗŁžėø ,+@œ„’ź’ł¼ßv/W'¶ł ŽLd+‘}žņŠTńG~ŚĪšff…ć–D)įK¦‚ •2-éA|‘Ą4I^ÆļŪ €6Ņ'uå¾1#ČÕ­W½Ł%Ē9aOe™Bœø)bė²|n.«§åɵŽ!2ž}Ž$|B4īż×B@RhUģdO>žĀ0AKg`–$SöņVGį±óŌį½ŖŁßP"Ø÷µ†"\cäNK¼‘#–Éśå…¼óęH捅Ōåi²ošśmk˜*Ać…B#Ņoč|ƒF¤ß' ž§.Hś ½ĄĻ”¤ŻˆōÄŸųaTl㇠²hqmīn/» w½}÷RĮšų)]gÕ<óĮżž™õĶ)Żæė1½zFø^ŒS*‹—Ģ/OwĢ8¶lÖvßU©qGgUŗcū½»īń÷-\fšB­”[UŁ3śhń’Ųe†«ŗīūŲ’³ßø¢÷Ćžc÷x~ĶØš²šŚŁūå.5B-³ū§‡üAĒUżõó6Mž[cło+ł…łŹNp“” üēµ\|Ž­Üc }%{Īd²œIiM-…yEl8ō\–„\Ō g1žzóe®³ćœŽ¶”G¤dPąiłE\ś+łßķDž}(ō!Ā^~G v?’¬O…–„‰õC­hČėÓGŸš’{øöŚĢĄ_ž¢~ž¹ÖŻŪĻÓS.»L;Ś…¶ųהɞtń¶žTß’¶ĘĶŚ æ:ZæŅš{`,›'ž,@÷č<”£?ln}oZć¾ ø„-ū9Ł\ |¬F1:B}Ū “ꁚE€·’Č5ŹÕDXXÜ`„ų^Ęø5éŠ|œå¶Ćļå3’Ŗ…S±~ś;Č8ČfÅț˜Ū!N ®Kū;Ę›e𨒷„—z\?ÅIM €Ō˜Ą 6؈ÓKłÖ€ž«%G|REC`Æk#Dė”"Ž1aĄTĶČyõlngk“¤» ćŪ„Q³‚ܵsé]³’]5ģŗÆ‘·Ć9 ūY‘vż~×)ɳuėłgm¹—2f™bµ•mĢŹķś¶K’œŁŻśeÆĖ.4#¹8–J`… i^ōRčŽN sTʍ—–jÆß±Ējłæo_½ŚŲeøå½j¹ä}ß7ŽŠÕ’·ŽŅåŒėÆ×•żģlųā 8é$½Ņ™>n¼^I.×&LЁ^hU ĄyŽŗyĖ{™/ö™7=æSø>8'+uŹ8ē=÷Ų¾+Õ’µķn_Ō"ć·÷J<°b»Šįl+nB6ä4&ŅU ¤Ž5Rķ vž }ßm|‡IH!]Īą+Ų„,®g»”µd’\Ażŗ?’œ§¦æŃS}·*¢ź…L;¤-s…°nWÅ³Łš{š ` åoSB e$dæB厚938Ŗ%G E» hĖ:ńź3X/Õec§[ąš«ņūˆŠ4±ÄõŻæ9;Æ!…jŹā›Nó/\QŸµļ] %d?@'ś‡Äz+!{‘ĮkÆéß u`a+‘V¢ķ’³Ń€Aūæ_„ÜxY»ćW@󚫹¢+ԛȵl1śW”«’O£…€RBĄÖ‚@g„= ·žæøø -’¬@æ/6ķ-Mø®å‹7ŠXh‰`?P›€š bŻł®\ž (ĆąA)éÅžJbšV4›Ūø‹)žcßŗ‚ķU\Ø$'A2ü®¾;—ßE¹ņ”{i4|e³@§5(ŗlģ(źk™œŠXHw&½Q sk×L¬g"i$;Ń}„”DźśB½p©")XUO*Š £\·Ęć<ƒ3ŹīXäPIŚ’#XõwjQ”¤yÓ_TepÄÓZŅŻ‰€ī½l©€ä6"ÉRŗÉ ĆČHwj»„Yh†‰W/cż—55å_TÕ :Ą*čyR“0{§HŽŲœįĮ«<‡×cŌsuėU•ņlĆU”ˆ¹4œküXPfM+ī]X\© åJWšfC\¼a¢$¤‹“=aŹpÓł"C†@}½ö$öč”ĖBčUĀ»ļĀM7éaŝ:iqąću£aI‰®ą÷č”·³~½^±ų«ŒąĢ”eĖōżŪ€Ļ–QĒQ–`„¤¦ža}ģ· ļ³RÓ¦'čäbDĻ_łŻ•ŃÄ]Ŗ·µˆl3 @¹®ž~H%ŒĄjĮT)w€’z“žęāŅLŠ&”ŌŖģSēqŠ€ uPø c -Ev×8Ć»ĘÅš½ĖÅÉ+³Õ”÷zŖ ŸwĖUņ¢ńjačq€>©Cå{č SH/¹æśń2) üÓĪ UæĆēpq“…ĀE[`@¤w9§\ś†»×;;·~7Ä\AZ•2~h’ō7Uķo żž—Ņuõ?2÷öėķjāŸ³ĪŽÖ•†ć†ķŖŻ_vv’ü«õ½¢N<·Ļ‹Nžéx]æa¬»Ł“U÷NKcæōįŗ/ēP¼hŅ©]'w’±zzø^Ļ-·īżCÕ3KF”ūÄß·śO×yNÆoj¾ˆŌzūdU¹cZłÆY£ó—8€5¼»äžmūÆj «Ļµōš±`į©®^–1£b@neń÷Pž’¹)»?€sRbKZÕ?‘H „ŻźŖ?“.č6Ažćą“¤źXQ†ÓDœ:ąČ³XšŌ*ž°v”+ųŪK¹‘±°JŅ£¦ŠŪļś3;’į:.(ź„wźÅ,D/—nØ"Ŗ5cž`Ū'’ó¦"V-DT¬NKÖ£ęuE €Śo椒aéÖ’ ځüƒŽ†DĢāĄcĄA4Q,Ų.ŗ&OÖżł’łī†{ņÉM?N=¢ļėÆuĒŻ5×4üź’?ž”Oߛƒ•+Sæo·Īh%jHU’וÉė⤠ķ_|ÜFš«Š4L  šˆžHĒTĮ ‹ŠDūļ豎 ¶nźdŻ‹č¦ī؁—£?Ÿ/£Õ9æ§]æŒĶµt¤Póg¶wž %X*%g£9¬ƒą„Pwr³G³@Ģ|…šģO¹Jy\J†F„čGŒ—^<Ÿæžōwoė( (ŹEe`ć–_x ī9Ädś‚ĻŻŗT+k8¹˜±ˆ`Æ”AE„ŪDvČō¾LŽŻĄ[ŽĖųP’€‡B(ĒŁX€Öµ@Jh°_¦¹‚¶ųn×BŻŚ”‚Ąsgj ŠŪ“-m ˆXx”ėeiv>5–²&VĮŅOāU;|P]Õ§«•ĪĻŽ5œmīɹ›$0lj3Ł®ćóxœźŌK¶aˆŚpH¬¶¢Ę‚¬sfq׊Ü.rWå•Yõ„„ÄDyŅAČĀB‹®!”“™oh”–ź žć§®[±b±TR’ž{jŅ’Ķ7ŗ$°}r{a—P[KF8ŽnJlbH”aåŹ†š“0ō˜:€žĖTńž³Ō•¢‹²ŽBgiœ³Ą<ć.3žpY’ģåfÄr……R*$@ˆ½„ŚhŸ}ŽDų+ ¹ĀüæŌ”ƒ×q¼%Uŗ‘§M0”ubsꈯĒ-eŹóyfv‰X'’DN4źs—Ė?nOż*Ź_ YŹ?l!Żpöēī”;¬–’Æ5=ž›ƒ,›ŽGO–÷ö^­īńėćōJ’¦Ŗü¾½ŚFś,‘Ńā©4’oūłŒ¼5ńżć…įļ>ø¢ßƒF4³Ė‡Ō‡ßūš²~Ļŗh”`Ī”ē+S\¾Óų5O¢ ś“ā·óʔ\ °bxĮæś~Sł‘aćם¾r·Ā»|āļ8Ɋ¼ wĖlšĒ•£cąGėĻ™>:æ”…ģ›ć»üXŗĄ~“huā<ĄšÉæk~ųåye×:9žkŪ^›ķžŲ :«ŹÓ㇪ū—,(’öŌ®ßuŸ^5-\/Gd•ŪĒtżŗāé#ņ׳Äßé÷Ćį%³ūN®ž,Zėķ—UķŽŻń揿t`‘>W:ļž„ė?¹wõśĀ•‰S”A݆‘W&^ŚõMæĻß$³Ż?œf÷wac»’ų7g÷‡¶Wż”õ–3ķ¾ŸæĮĶ€8‚?É’ä‰ķ¶•Ķ‘æß’Œ‹™œ¶r=ę¬äCU(‚ %·IZöŸŗ—,žĆėJQ«ć‚^ēŸcŽaĆꐒąß[›üż.Ę¢9o¼DžŠąŚģ„$;(Åvh{½æ2QčeŠ*!X"L¦†L&å–2=’Mbź[8]ĀŲ3{ąķ°ņŗė-!’€vض~µŚCƓėŃėłŻ”mķJćĒĆ>ūh›}:`Č݁·zuó}ļ=˜2vŽ®ŗJ’]r‰ÖÖ’łOجÜ|`}Ą.’Żōż2@”9V-ś’·-TŃø’ßæļ’$~6†œ‰&ä’•3ł¼Ū£Gķ-@0ćl™J8ō,ŲmZXK*,±2N÷Ł,lI z.£č’)uåž=Æc£N§®`@|ļ£čž¼ŖÜ sÅØ y¶w’†ĻĔļć ³ųąĘxxĪTv4Ŗ±xŌVR¹±5ØŅŌŗXjuŻ&'l °£ØD‘x\& AÕ%µ’)Ńä˜0,ä¢ü õÉūŻŲśC³)7@KZ żŻŲڐ@hXpʦņ‚B€”ļF»PŪ„ˆxĮ**ŖVČÅõUtMT=½˜ģéŲt[ē9…k”“ƒG%tl»P …‡)† Ć¤Ę åV„‘|sYV‰±Ŗø,¼¶¤g¤&«ČL„BB—.©Ą ‘IY!l Ę’ŲéÆ ‰•+µ½æ¤¤±üļćŻwįĀ utńå—ėėV­Ņ¬hŠ ˜6­‰ 7„ZģĄå9e(a¤f²XBČþQ#ŠjÕ¾­Ū-‹Óź£ū_°“vV~¾¹!+/7Ķō ˆ×(Ė`cN’Č;p™ŃpŲG:\i¢ )”…¬* ’Sa ƒ>^?fĶn…Ļć8¬–÷XÆIU Ex脊3*øÓ'žFĀUz“x×üĒ}R¹/` ž|Ćļ~Ś'÷źPHH“Q….čśą? ž£L3@üŃv’ ń‡ęķž$ą®ųwDÕæ5AMYžŸ¹ƒqv‚£æ‰)ē_ĶćOŻĆŽ+—ńДϹēāł74AžØņ{āķŽSgę„\µ L8ó"fŻu9·ÖTq;õĆ7ģŗĻį¼¶łhņæpbÖ·ß$:é=Ę%ĪTūŅüČkÅJ±ƒr9,įBb9ė ƒB!žÆĢfʒ%ŌϚEü•™ŲCNĄŪįTs俕֒ ©6€ztąų«ĄImÜß}§Iü3Ļčq{{ģ”[öŚ –/ož±7ŽØ£x::wÖŁŗ¶ ÷ÜÓüćZŠÜÜŌļ-™T@żUŲ€®o­Kž¬Bżó€’Yņۘ q€ \€īi ’–'Ÿ ÷ݧm+Ɔuč>ģ‰Vķv@§ćg%÷«#Z|`8pK>G[‘‹¢'Dé˜Q„Ķtƒėōš–L½]é=`ū5ņ›ņ#°Ī0¹.·żöy„«2’’KÆäćłG ܜ\> ŗJ#ă śĪ|~Nß Z(큚{;æ›ŃUŖ IDATżžŁTš~QRŻĻ+ŽųõųBč  'é$*Ńż{ §$T0ÅĻ"š… B€"Q”Õļ—ĆNäpDp‘pµP0¤Bkō( £JÓ2õß­dõĆ X"C[Vå/¬œZTsįJfef°Yš–^Š„÷qśŪ0]”é¢4^0ŗi¢¦œĮēIÆ*%€0ČpÖµ¬@’¹FFr±szSŻu7–vߕie;ȉ%ż_ŲŪ|)ÆĢx)§Ųx-»Š˜Ķ3Žä…sŒ#łĘ‡ŃćŻģbó­¼Īę+Å=¬‹Æuß1ņAļ=²'mæwöœĆĀk­"3L×3L”‘üæJC()]‘®Š¤U\×Į“®ŖˆŹM½ffĢŠ„ž/ўæĀBmł÷ńÕWz„ńóĻP]­Æ[æ^%¾ųb}[v6ģŪB^S£'ų¹Ķ`rULJ[)Oŗž‡ėŗøI/öšł[¾ŠÜZtVÖžåʘņ„±ī‰Z7sŗ½ėf¼¶+~?>qź „ņ‚-Ažƒč;÷©ŗ£Ē<»§²eęóƒ ZCnāā¹ާdņrö{ņ˜­Lž0h½qś1ŗ‡Ē]iH‰’2Ł×ßDZ…!ż  ’?ŹS†ņ”a %ĆØDņ’Nž‡~ŗ®ĻŲ;~žķQWĻŗ%gU,šüß*Oźū:`)!^BŋĀÕžßłkā½BZ²p­=ąŽEGwéœgŗĶ¬m8}fU9ż|«’ē'u™’Č2~Č©pŽéž]U©‘p•—$’>&Q27–k~]ķ2ņÓŖ^ “żM)”™…2MGyšų+SŪöhāoŪ6ሐ !1G¹1G‡ĀśbŪ ŽLæI)󅩧¼ź ®}öAv¾ļZž“b)/(E§Ŗ \żį{”ÉČAe"’AĮ=ł÷‘Ļ<’wåj=;üG³Q’ ä’ėw1œ›Īå÷ßäĒxœg•ĒA4Ož›C©”œœH0¾²’—׭抳Ėé²ä >æ‘čÄż1nø!óš~3Č?4v$Š’ŅĒ`ćõek°fö»öZ­‰÷źƾŖGń5‡ńćõ)Ū4uo§Nšüó›ZŠą)Łl$ŗś_®śÆA×ÓŲžļæ—’³ųUHĮÆĄßIą}9ä˜3~Xϵō[K} OŻĘĢØ¦0øDJ訒•@ä¢ńxó¶oPčK;b;ą7@_tnB˜DZzšMZ‚ż’“!āĘāé?ś!nuVŁÓfæø™N‰:ŽDēP€ąKĖ…¢¬f=ćæ¾¢ ūŽp~w„¾=“Ąbųü|®õ<¤źy~ÖėģXŅ%i©sPEjsEHŽ ÜŽ`\.Ļē ŽĖ\Ÿķa„]T8d/uHąæ^Ev7‹|€R Ü7]°Ā(ĒEł×‡Bئ„’÷M%,ū"@Pšn™„€†ūųmŪ] •IČō¼Įē žķ M Y&*]eįä”R×yk{ŽdaĻŻ½é=G“{ 7&v,>((Ž.b½U:Šße°5”lpčŻĪCĶzļż²÷ŽŃ©=GdĶī>$“¬°—ŖŽ¶‘%¼H–š ŽqĄq0¢› CعYĪ‚&_¬”šü„Ä'j¢ŪÖmļ½×ųq’» >żT‹Ē—Z½TW7N#ŠÅōv@ßWU|Ķ54‡Ÿ=[abQ#Ź2m,!±4ó;4;®3+¶uée©^ko_µŚ.pāŹōŠ«”ą%Ο ĻėUĪ©[lGÓėˆ®æżŽ›;ĻŽõ¶ėl+Į‡d’»Jføų|zģwrčv+UŪ'K·?ÄĪkŒ?ģ4Ɂ»qƒaÕé·²„”aˆæō˜Y]²ē3Ė÷:ą…Ēģ’ŲāCŗĶ«-ȱ>,’sъųYŃjwÆŃ/ž“OüIʤTø.‹‡ē¬RB{w Ö:Ć}RŁkÜ ó/>ōęo•Ī]a%äöģxõĪü} Ļ~ėĘķž^Śi°bhŽ£BŽiBřm~ŽĆŅsAŸ/ž“jNN'žééžAāļ÷śūÄ?)āĤ­<ŸųĒj<#–šš#žqRĒ[¦‡ 䦂žZlł'-’®‘3Ż÷Øß1§øÉx5BKēój] W¦¬ī֏“öKƒe*ä ŅÅõ ł¹IŪä?EU®ćŲ䟪{?~ČDž”é1Ūł_8 ńŲ „®<‰żæz‡IN‚{Qōhźńm€vsžJTńH¼’‘Uóč4}:9Ƽ‚•.l&ł÷į ¾ `-ŗµx³śŁ„Ō§Ń‹.Ņļŗ+œ~ś&vDé\^Šc•‚;īhž1­Ai`8łāÅ-~Xmņ²MžW£ß£_Tõ~mš!€}Ѷ’†/ä5ץu×ĮĄßž–ź7¹żvøį=6Ś’mźÜC?·‘ZwłŹT{ĀĪvkķ““ĪŚzśių׿Śc‹ 8ų†Ō—Ō_ٵū—T4±Ńė­Šø %­l‚,҈›ZČKn£j)”|×} G­YE/§ŠO ^9›Węg\’#Skåj #Åüä_’34Äł.ŸHč³—y®YŲ‰Ń{9üŲ£ Ŗ"Š@ńĘ#åT@i 2½€\”?&0ӄ€ō1ĮpĄdK€ `@ĻŻó8ģ“z&€ōĆ{˜d”R}x¦IĀÆ††Q’}’Š~-YQ|A™Z<a¹ØōlĻEÄiy6“k[@Ė'čmx¢/¬p³ŠÜ„”ˆĪ„ é!@!=D(jč9öL„¢¦RF4¬¤—ł–pńBįPØaŒWÜSB:Ž”hH‹q„4„Bŗdƒņ K$L„&õˆĶ=eeN,ŖŒ¬LƕiÓōh¾¢"ŻH˜%|ė­÷ś/]Ŗgu꤃½–‘äĒƒntÜw_}€ÆK7Ļ6Ę7ī–ˆa£ŽČ6RµYː;.Vćš}š6„žĀ ­1w^\žX\P®Šä†béżń^ …ąü·äé]6lż×˜ėQōŪiĘu÷a_[Ż/²<ž0„jéIÓ0„ź½Fęļ5G^±­5 ėŠŸæĢčāž/{[åį°įəöHR’Ņū³Rį“A‚ŚēūŖĪ#ŽXyaVµ»'×Ųev½f`īSŽ)»n·WrĻ'—}÷õ9=?}`„:ɟ !d¢0”p²ŒŁįz9<«ŚŻä«"y>s-±Ŗ¶,üŚōĆJĘÆ’[鐬Śzü'\ś]Æk§Z1oTN„sLæo«ž\°kĮZßź?õØ¢¹=§×¾’Č1M>«Ė«šų³Q²¦±~°ūśü}»æėŁŹõŖ9»?¤ˆ:ZŚėßŅ æ–¤üX.ź÷WńźWp€ą’g*+Ä×»Ĺ{óiuŖßßGĘŖ?É~’4P8Š²ćˆ›’ÄyvœÓ¬0N»„ĮūmŠü7—ō[†üż.Ęų'ˆ~ś7y cæļć&ŲYÜ&%o-YĀŚ'Ÿ¤fęLœ—_F¶ł‡TåŚETkŠyK;ĒlīĘļæŽ8ƌŃĪčMMųĻ`ölųÖ[0kÖęīA ƒéŸ°n]ó÷M"Ž®üo@“žUh "y}°åś^Ų¦Np[ ]eš€ŻēĵŻå7æŃŠW0lāūļu/Ėå—kUkģXDŻŲĶ!{£ć,Ś·ņ-Šī‚+7wC:é‰oæÕ½8_½ł;—†ląH :„%BGµE“° -i€Ģ3c}Ō€z’"@i2/`QAoŽq15‡ÜĪĢPæJ1zś»ü{ķbż~ż|N–’Ć ƒwvøš•Įķž |ńłŸæČņæ>’Ļø½īā-Š'Tß Zh© ;/­ Ż'@ŲAmÜC’“ęnš ā GPŌĮ‹ćIæ̟“h¼+ §‚‹|4Õt¤ļW°ā‹7ļ¶“Å Šź¶€ ķ¦Ś|GĄĘŲŲ` ¤°šDω:QDZr„ĪŽˆŗŽ‘%<#Kx”0Ņ3QŽcc˜B5ō;Čx£Œø¶×š¦P”°ž‰ŖOŚ~ƒŽŅU!žsēē«:«x°āoZB‘¬ų{¦PA»æ›n÷jv’ø]#•›²ūg"’ķYõo‰åR)’ž¹ę”›8ÉN4pEųv#ņ@³ä?¹‰‘7ž‘’ŌVó7@ƒE#öā²ą}ž[Č’=—Röńx×óų#[Ž JÉͮˉ}×®„ų«ÆˆŃīĻÆŠß_Żė^ <‚žž“Łx%¹°0`Ó÷•n¾Y’~Ūmķńģ)Œ£~öY‹īī¢ ˆUhņæ2yYƒ~‚į’óä~šT’R}Ö Ó.Ÿ}V§_śČĶÕįĻ<’ž·V“ž{NßvĘŚ‘jßŲ@œ ģ„žFCūöæ›č„}ŪŗPHgn-X ‹rG©?ŚSå ` ?P†Īč0KGę@ó"€ē\’w#‹ ö¾Š†sę!÷2Ń ń;@IÉńŸŻĪ-Æ_Ąq®ƒļ·ØĪ)āŅō“įōčŗt)Ł–ätb’ćļą+Š™Šv ĒEµVH¢YØhź«S”‹„ KoƒWw‰6„&2¶˜ŃQ‘zė/…#('ĶŖčēlŖ% äź¶hyK€ÕŒÓ Te]ļ/ģҶŪÖ¶³¾éĻPSB€ŚD>@ŗ`H”!Qž‰J`KßļyŚn¼ÆćŲ…ĆDÅ%*^ć(£&MNƒą„ĻDeēĖųōhģ˦^Ū¶ˆŁnB-Ę­ Ybm8,jņ 酓A€ūĪ0FJ“æG¬±‹ˆä%jŻ^5åv±]Æ %…JæRØę«²a ŌE[{ÓŃĒ5·;e*gŌ–'ņ ! T怙±Ļ49 ¤JŻūŲV «7,›ßŃ©±C^¤yŅoB…B†ō/Ć__y±įŖRΚ~9w½sĶĄ±ÆŽ>dܲW!ˆFļiÕżš›nßUu> ¤ŹłŚŹėŒ*Ū”¦®ö[R ±‘’6LÉū$/nĘ7žę~~rf×/¦į™Éć‚g å ĆżŅ{üæ<„ĖT;˜ Sé½ż”šRČÜćßfāŸģóūüc5›ģóĻd÷hŽų7Õėæ¹–’`Ź’²DŸ~€Ż«×ó; *ÕBčÖĀX-Ć[MPč¦fĮ’Ēé7}€Wąq‘›ąY“’gqśŲ›Y ©“āō+bÆās`Xr»ßnĒ>GßÄ\h ķ/ëҶєą'ƒk•Ņā„żŗYL—Ķ«‡ēņr®ą’K„˜=M6ˆ8Tz­6Ż POc!`æ¶?¦'YČyć 9zx6½¶† %!ķŲV! F&°ēy޲ķĘ< ]°ĀBĘM-xq½ ąIGłB@([Ȑ!¼×Kėæ®U^Óć·1¼ķÖIaˆ3ĖX›“oÕø–įzŽ«LĻ“Ż×Ŗ[{’Z‹a=ć¢O¬Ņ.­«JDŅ«åXBŽżVžgHÕŗL[ūÄĀūõų1±[U„ć%] ~/ļHæģ5[ž":6pw³a"ŒƒVY'Æ]/T i6GśMS(ß%Šwāŗī‘wO€ŹŃO<æĻ뵄–ķEP_’æŸÆķŸs?€iĖ^;?³lĻ/īõx"Ūų \/‡v’ā³-Œ†j?É~*2$\¹ldöŗxõ1€•ƒöxlÅ>Aāļ%I:ń÷•ŽZ¾CöĆ(ĀĆ?n¾Ēæ9āŸ1ąūü7g“_Xd>†vdÕ?Hž_~”aĻ=Äå+8~Č(α,&܅±{šōńŻX·‚¼ū<=ƒŪimæ?@N>o ؋dqū—2öä?ҰźõĆž„x ȐųCĒõüßs)e+WņžR“ ~Ż”ćŗ\KŒž@'t—`{ÆgƒY€¹Ąl< ¢UŲi'żsAÓi=ąŗ©bi{@ČnY°l™šBü*4Ł_ ,CœÖ ß—`ļ’/æd@ ū¤n#Ć ’śė”¬Lg@Mš¤ūXž|†×vƀóĻ×­„čŪ?¾õīŅb(ŗśŻČOī÷ę.RšH·ZÓo¦i0ŚŠ‚H^·d­ĶiĖ«iDĆ͈A!ą»z·ØtTWz†P“N-™šČ3߯Š#|Ēē•=ŲVāŸšēŪż]Ļn°ūgP77䯣«žĮsÉĀłÜ%%ż]®‡ž–…ßĒŃGœÉ¢3®`bNw(Eįōļy|ÉĻDjŚ‘ŠU’tņŽ¢|ņ_sćó‹ųć>‡3ōśqėĄśmimŅV~rŠLŲ_G„żßs ¹‹ēšŖRmw½¶3ĘD]Ń~>Ųx"@ š’Ü MŪ%7ʍĖę½ūīš‡?čßß|³ö“(*Ņ“ĘÓ”‚]ŌģĄ¦Č’²äļh1ä“üÄ/Y0Š_¾‘™n\»V§\.MF›ģ““L$ō€ÆæÖ€ž³ž8µöõp“Uß…·¹’;8ŒVŲŽ²²ąŃGįĒõočPP^¾™{Ņ:tŗ¢€l:~DāJOĄAØ@P–> ˆŃæįbo Įܼ\ö>ā>Ž Žžś…œ˜ØczrĀąÕķžĄqŪAms#A ˁXš ŠŠ~Ź£T}QĒI øZ RƒcqžłYršd‡e~.@M‰…aT“šEÜSbń’©Åµt–ą9|ph>c7× ĶO €M·ųB€ķ36ŠßVk…Šb€/¦nŲØ-€M ^BśBĀ•…]­šēЫުCvŒ¤ŚŽx&Q%ćĀ«²¢ĘŅhUŽ˜¶Ķ‹Ų«o­ĘG@·n©æG†vŠ#hŽ?¾ń*­o_½2jtWVNĀ–ėėŻœø­„4uJ¾ ±żruڦ¶±µ1X…ŗŒ˜ļPµø®Ų©qLCy /9Ąk¬Xļ±ģ^Ļ+²Ŗ½±Ēümńcū?¹zĻĮŸoč6ś™•;’ęŗE×õš^{Šˆ5æ›uHŃüpDH3 eŪ­©ųcŪ¤h=ń‡ę‰[Ŗž™žo›[õ‡Qįdˆ­aia\)ŗś·ēČp•“‡Ü÷pΆNč·ćœöŲ%œņߌåRä?}Ä“mĢ_[Č]WTü÷F_Ņ÷ĒG¦Ź’ź%ˆŪĪćhĻ欦·ag”Ż­]I¶Ś~E[Ņø`5š1pŚŗvÕėżĮƒuµ’ĘįŠ+tϽšŃGzDzl 4érŠ>^pÖĀsr`śtżüwŽŁäĆüŹ%šüÆ@’Eh`5ś}’łūÅą—:ŠOžßSwō-. ėĪ4?>Hvfļ½·¤Ō_”™3;f‡Ń„½Š)ž+Šn—¶ōū’[„„śv›Ļ>Óėѹs›¾ļ˜1:0±wo} łŻļRļ_; Ś°ÅŠ"€R™ŸėŗĄˆĄąx@håˆ@ŁyÜZ_Å @ēŁIW2f÷[Xš—įuŽśæT;ūT f"Ęg/s^*HPę"˜„½QŒÄć {Ķø–Cųó¶Oß(ZX¢“jŻrD¬ *+0"°2„Č+FµvL h ¹1ĮQÉ jjŒÅvįµģ(*oüüĮQ ×EPu Ä`AŽ“ h`L.L˜ćÆ?Äõ²$ȖÜ;¶ˆK¢—(0óMīSČŹ6šMSćAõ‹é՟ å"‚cƒhÉČ@h<6ŠßNKĒB²- ¾u£!¹ų5QPž‡H|PšG‚”“• ė’·§‹÷¦jø/„Bz•ī‡zž#ōØA¢Ŗ„pKŹĢõOÆX?~·Ščˆķ͈’Łf €[cė=ĒdCv–¹  $“$TŖÓ£ =e*ŒÜہåĖuŚźźŃˆBhµŚ¼¼™Č3 ”$ŁnĢ˳ė„ÉÕiśżW²ÕGžµC‰u^_;¼~eb…“® l|ĪÜ}šźgy”dz|»£ø^xAÆl+* xšA­ŖgšjŃz+§S„Ųqż*gQļĪ‘ŚŒbŸ”÷p]œQė_æē³«Ī®²ūfU¹Ć­ø(Ņ ‡!źz-²‹ė‰j‡Ļ.ķńŌ!W/©õö×z{ķńȊķ,cyT«ÓŹļ¹Rē IDAT“®R®?nQ°r`“ś§ż‹.śIåƆ§JĀ19¢×ōŚōš^ŪčiģóóĻ/čz9aWڶn'2›ēpŪĘõ„˜ß¤‰æi „„£āvr¤™Ū¤ZŅēoZØL+åąh?³5Ä?ł„-ļ¼Ž'ž Y›f9õŚęæģg¢ƒ6/<ņ`6̟ĒYKfņ6­.ē֗oäĒSĻgFs俁ųm!’mIś‡Ģäß’Ż'’éūD&ņæpā‰[ČÅøƒm×į“œ~kjѕyIūT„ż÷ÄKn·-:˜Ą$48«hNóÆi’=h¶Ż».¬\©Ū~§NŻųI**t8l<…·),XzL}ą“»r„®ņčK8¬+VĄŒZhĮĄ?Ÿü/¢E€UĄzRļó/Īśļ旼0 5+uS1BŪa^yEŪŽ}ņß·Æž}śt½žzćvŸŽžčiÅl~€…&Ņ­ĀäÉšņĖp×]Mģ`}ūūļĆ?č|„‹/Ö bIū-ÆJжöŚ4b³ŲN€]ng‰įl“2Ł7±žI_žßM½fƶ¦>Fög/ńR€üׄ³8źųGvüÜtĀ#ģaE9ØWŠ®ń5<[;‘PS,›rlī˜ĄōpĄ–Œ ;śā_gGQ5i÷ĖŌŠ)Œ5<Ÿ§ Ń@žU\rėŪUœóSm*Åø(7ÆUqgB”GRUbroIˆ,hł¤g3ÜŠņ¶€Ž $¹]×D5å€Ģ®åŲR9¶t¤ķ¹&*#› ōtxŅQ”Ł…f}^©µč&sŻė5ŖĢh įŁx•šäÕ×[!±,抚]Ų=²&'ײæįYBH)QqÕ±é’ᆱÕi€!Ctóf;E-ga)UÄsT¶—!Ä搅²SvLelŪaÄĀ£j׌ŻćœØ“${Œä4ƒ+¶`P£eA)[\8¬’n†ĒĶau•vi}Ü K‰0 ”üž~ߎļ&+żń’#õN²*’ǁ销ĒÜĒŪ¦…/ß ›ż†žÜZ7!`Sį€-i HŗŠ‘&D€`KĄŁüĶ€=żæćš÷÷kø2ÖßÖs«Ōk č¾Oē:ūl*Ą_ģµtd`[ŪŅó c„ÕJ!Rb€ #82SP`ŗ`$³Džē °Ö®*uæ¹Ū)Ÿģm”^«–`ŠćųzŪ «s ¬Ÿ zFęēuׁQs†)”«TĒö¾ū.tļ®-YūļŸ|ŅņņĖ& •DHeJĒ‹xõ®¶=e¹žÜe¶ŚMü—­vR‘αj§om…]hŲŚÉĢi(¬•›{ü¶ŠķTØK¬Ź-«Ær²\ĒĮq]‚¤_š(+$¤r}ŸhƒgOšb}}‘õÖŚ¹Ÿ~|×ć^xČaļŻ¼Ż•’Üóåi抎…„ōūśżŽžUCó+īQp„ø†«ŗę­µ÷mjæ¢ŅQ¦tŌ¢=rV¾zSĻ?żtXįŃėśEÆ©č½zįž'¾vG÷Ć?ŗØÓx',dųŲ›IüX·)ā›¶ūgz]év’Žźõ·\TłjBw’•[V-ēi×e×ņ5=’[K£LæWśó„œÆ<Ļcźį57ŽLÜąd‚Ø„¾-=ø›D°˜RØŁW/|휚§&ŸSóō{‡UĢjWßOų; !{ü£’ž’Fz_ēßS“æīÖśCŪńæf8^ķH³lZŅg»ÕĖų×Ķēņäż7³ė^ß`6”‘[6ưb.’Q½’a§šKĆ`€ļņŻŪ.įŖ\NOe®>‡Ÿå2ülĮg<÷śsķ=KzcöWčōŸ€6Š1ųżŸū ’Gh„…mkµź“OŠZ½;€å»=‰-mŠ ŗ ś_į'2äI€„h‰ücĄß!NŪlō7ś[ƒĪņ/D’¹h`)_’vńe%*(u'¶ŚJ›QD1l44ä_?’¼Ītļ¾{ß/²“‰nŅł»Īž÷:žń­`|’}]ėūķŗVč†tķŠĶ7·Ż’Żwµqu'ķ:z&śśmōgY’u]µ>H€Ż.cå7’Ģß¼‹qĆ~Jk'ՈxńĢx>žēH_&Ŗ®Ęh Æ“Œ\N·`‰¢²²ķö^ŠmjFŽģ7ł?@C$^På燻²ŒŚ¶_N`ŪŚĄpÓp8B¶BĒŲbėz¦l8cŅMްęfæD(e2ZlŸa=>čwæ ż«Nķ.Y¢%n?ü”Ž6lÜwŸ.ÉųōSķ`uź©}ś Åb˜0m/§†zĶA™)d~‰ö3M”ü*ÓĻ•™ļ˜Y¹Ķø׌)ż2śŠŠ/›óU … Āć=sŽčū³åę«­Ēe†e;ALU9ś›¦§żB™?“7ö‹’čż¹n’īHż”cąĖżćĄz.÷ļiÖæõzB£æ“ĻćŻßŽĀ‘#·ą‡–ĶŃvßg·åóxņń™dZ|Ķ0¢#—’Dµõ×Čl³=' ”ĶssYN¹īL¾ädmiāwN’~ūpšā×ŲS³æ®œžaż€’3³§cĒnó‰Śö÷üV”AsœXƒÉ󁩥čĢ^Ńq(ōõÆ —•謒<ąóp™O>ó߈<ņŅ’/u| ŠYōßT=›m¦3ż‡ gœ”ŪRD±å–Ś ćę›Įøo¶-ļkż{Ÿ GÖó·o|~÷»¼#če—énÜv’ €NŠNžż&šš6€Ęz"¢ßĒļŅö=ĻžĶĮnš‰Ō’Žv¾æėÆhóœŽ?$W/>§GÆ6S‹=d»KśT nOt§C“'rżP°…ÉeB{f õ_œ¼*ŪŚæŗh»ĄŻ«“y’ŠJ,™īqĀ2 €å ""Ą‹ŻQ–ī ='Š Aō§O€/]d\„\Oś&*>ӈˆĆ*Ykøµ[Ł+²¦’Ēi|ś·©‹ŅJ®÷‡÷^šÓš–ūČ&ĖavŁkZķ%3«G%’„†o„Ÿ1j•—ń|–Vę2®ACēGī"V®Ō« õŖ&“ē'Ć®»źžLżÄ°,‘¾Ā B"!ĆjpĒ ŚÖ÷*6ŁD3ę·ß’łī1%„Nɝxb~æĶ7פʹĮ}>åheVfSĮpæÉ/1$Ā4PfX²aØĪżU:Œ·ŽŅž[nŃķq=TÆ?āX°@+ī¾[÷°:śč~Ÿ”b¾ÆŖżTP®\eėlhšBŁŽ¶š„zk¬ķ¼mßtjćw;żéš/³Æ9ŸŁWŸĒß’u;¤ŠõžĒĒ»ēi"ąPĖjUˆLšŸ>;äŅųĀ]Ś×©#—’#ĪdĮر‡NHÉNĻ7ĆĻūā1gÓź 'Ž{böW¾¼cš_é¢Öų˜ł.Ę[“ŁR)¶+¶ż”StÕŪnĖ wöŁG z.ŗHÆ»šB½žā‹įŃGµŸÕ‚zøŻs϶ĘÖ×_Ÿ÷Ūl3ݐe—Łl·Ę–Ą(t§«*s-$Ń®ehŠ<xų+šYøßĘ }[ÆE׳Ē Ÿ£ŅēŠüG™’Čń’KžįĖKŒģz—ö‘Ji‚’ōÓuķŠw賋ćhņĘ ķ–™HĄ›oĀšį]³Q‚V0ōEž.hė¹Ö«xäż9 k×j€bÕē{ģÓ¦Įß’®}œĻE7pädŗįœ];ń(Œ~iʛgrŗņx퇀0øqŪs8a³#ŠĪsZ–o^ĻJ±½¾t>ūŚ9¼ Ŷ]‘m}+ Ų¹”1–ąĒ­Ē†«>ʰ¬Š 0"RĄˆrœń&÷ ]‡‡‚ĘÅ9Ž’8ÅŚ4Ś`d9Ī÷*ųžQC¹ō˜”\wT-æ9 ‚=ķŠ™æ;j€L8Aģhr]ūĄś% ĻŽųŹ—®ņ„&ŒĄ BĘÉĻs ¤§ŹkŒģØķ­ÅƒĒ˜Ó^M¶<RóŅ9sżÜz1 ”ā¶ō:u^Ė 7cØz³D|VZcM­ē|šĻv1¶Ē³žu‹°oŗˆ?̟ĆónŽC”¢R)*]—ļ̛ͳw_ĀńŃūŹ äiæäķߎĘį#ĒqØeÉ}@ą³×§SyėÖÓøéŁ;Ó‘Ė’™Wņī°1-«ĀÕŹvxšųóųÉV;źÆ+ü‹™żu§Žæ·mž ļą`śbŒTßéhūüł:yµ’žpE89;é$ ź?łDąmµ•¾„ϟ aū®ä¦e©ņ\“Š0/GNŖž˜65åĖ3† ŃÆ£ØÆĻÆļĒp”p‚lPźyži„µśčo•ö‡.ż¹”vnŻ&É» IŁŽ­ŗeÓ’®ÄJ¶©~Ü”7,łÓčY©køgÅ~‘”_”Äśįƒg¾zĮØo¾zžŠ\×#.ó/–ķ?ćé׿ ü‹9ūwųC^īß)Iž…Y’būÖś’óvnĪf4Č‚•N‚ĒM‹÷£Kj\Ēžr9?.3Ś^ói“xū·qX͘¼¼]šŪĶr܌éL»ś\nyģn­(tł’éļ™śćÓŁeŲ(~0aWv¾ņ^Ī*ž»Sļ½sś‡öN’Š9ųßT·Ą?›:-Č]²D+U/ø@Kū·ŁF'ų¦O‡{īŃ%¾{ģ”EH‘ų!:ÉUS“÷4ĆIŹ…jBįŠ+ąź«µYøačnb>ŖēŹ[l”ŪA`«fNŗEröqɵåƒĶ6Ł H©¾×ś`5LK-L߬Į<®O“n^:ŠU«:ŽÖ‹XxŌÉĄ· 3ć”Ķ%†‹eHĒUÉ>ĻEkkµ!ŽÆ~•/Y;Vū|ü±fĻ÷ŪO’ķ·×ŗŪ~ˆ2„P¾,ͤż²LF™NŲ֐„(Cd…T}› ”G©T[ĒŪ(UŲ\ŲÆ¤o‘VRÉ@šŅS 7-mÓŹ+ķGķń<< ϟ9ā±#.]ü­D:ŲŻrÕ»=±öŃķ’[’–²D“‘ćģœÜ0d³•ĘšĄ*~WµŹõ]•#EŚ4QŃd$ŹōƒĪöƒ.Ep ČœėbBhüśM92į1”šTÖĶiĄOŪń( +6~Dć_±ŒætLXZė½Ųyŗžį‰ćužo<ΨݾÊDi~nRĢäļļ7ņ-7§Ÿ'N‚gŽżēŌn©?Ę?®ęĄ5˹S)ŹÖrķCw3żčӘmžü5Sī< °Ŗk8Æ©£|o“'Žœ}.o=›ž9‹ć-žvއōĪūŠĘ4¤§’’Āzžcū“üCļĄčŚÄōšŸĘµ˜J±CWū/X ēīååzX:ķ“¶­īĪ>[IQŌÖ¶'āæļŗ«V x ^?{¶VÆÖ\.ĄÜ¹PQ”—’Ø«k×:o8ZPNŽėj ęŗŃwÕÅG„€‹=¶ člś“ģž3`(Z)9]–Ü?ßś:<ō-fŠ"ĶęšZ֑7ż[ž^nk÷wi üæ’ńe%2}9ĄGč’¾#tMūæžÕvū¾ūźAäā‹c'Z^tĄp\ߦ‚ =DKo e2}.®¼ųbż]€žœG×]§ē?ēž ū[Ū®3f賊–[vŁÓ³£hA’ ć}<7x¬/€‹Ø{ķ Fq"Šß8‡Ż÷¹wĘėd`ĮLÄģ;ł•ōø’4&·]|7Īģ`&ßW`4PŻ"K HŠ%Õ@:F4vƒZJ€óÜ$*—EÄ-ŽŹM!Ā‘I8æõ¼Š[žhā”24ų’Z’{MŲÆõxŠ7›}īYį3·ÖdTµĆģ r˜Ćß,ēĄ·˜o[ˆhņWHōLH¢J„ų‘‹Įś Ģtxü" ¾šüŶū!‚.Ȁ6D€é@ąøą8ŽĀA–4RF’%v™L‰Eb]]}°ņśÜź w§ėĘ|7QQ}SiO芠^εš\®Y~ąg ‘5-±ĪtÄb§Üų¤røżÉą-Åƒ‡ZMF„ō©”iXm>GT  wRś<æ½÷Ń7: %²­õĘ/{)% ‘³,Qo%Ó2}ÓJšż0Ō:!ā{šĮ|fō¬X)­ųö·5;üᇰ¦ ©Rā(O–xRZ2PĀ0…’R‰œ%ˆ¾;īØuÅ Ć[䷍§%qk×ök@ %0 —SĀHŠ6 ?žgl54EšŚOFLśę?V\—H»£pJZ‚‰ńćś ńɜ}*ÆųųūÕóAƒxÓBįzø.˜& S?Pā ×mÕĒėś£m9Ą „2 €æėę,”|į)ßĶ)A;żü‹Ģt æŁƒæšÄYōXķ?ķæ ż`*ĢÅm?½ˆć*°B“æµk8@Öżą8ĪĄ?ĄO.āÅæ^ÉyėVq·R”Ķū„ėĆ ŪūU•Į*„•M³ł7rÜ=æēĄuk™$%Ū£‰€ćgLēØY§óš–ŪqÓ ē±Øšs’Āļ²;ą Ķžŗ ž›A^[€ŃX‡Må¾§Ÿ®÷Ēė9łņåŗ»ÕĢ™ŗź(Nd2yćædRĻkÓi ź—,Ńėć@U•®j2 ½~Ŋ¶ŪA’ĘFŻėŅKõöżökӉ`Pø d @<Š‘DGåõh½MN –„×Y…Ę‘j”MXäŗ£Grtü8ŁąĒĪ%ųrčy~:<yšėĀėj@ć‚4łŒ@žQ¼Q`„-¾¬@Æźß‡ײ ż÷צw{ķ„k„¢(+ÓɊK/…{ļÕ¾@ eļwŻ„š/¾Xƒä>““ŽžSG²÷ސ }ƒ|ōΦ$«Véåė_ןłė_×ÉUWµUEDńočĻ߇¤Õ:4˜AŽęę^_$Ą;ƒø$[Ļ”@„tłēĒW³ē×.¢.N¼ńĘ4Õs§Rł:8Ćä†ļŻÉEӁ]@uFĉ€ÉW1¼~%ū E…S|PZÉS;_ƬˆXSD$“%¢rM3” IDAT€ˆX[b²(TT—£:# ‰)Xj(&X’įū fÆ2ø‘š³śŠ'^øÖI ¼c‡$wÄĮVrķcÜźł(OšENŽ·Ž-ēFKp4ÜÄę—oĮ™­Ż%²!;™DE5‚‘Ö#tˆ®”p{”* Ų±ŚŖB8!PA€DĀq{°‘)5ÄJ£J¤šɕM«Ō¢–”Üę!Æaóšė‡U+³źėNir[3iŽ31ĘrD©”cą”H)ÅZé³8šXøź}/­ęų9)¾a1,QoŁā «DĢ-dĪŖŚ$±ØfSgMŁ`+˜ŚōĢ<éėæ/aöß²‰—v†Pv©•[šš¦ŽĻŲß/ömŒńB®E SµX«J*ŒF»TŹŚFŗĻĆm4^¶L³ĮķNž‚fɗ-ė7ł?@J)”Ą ¤²qŪ$µi1Պ’@ōܵgÜ8 čwŲA»Ūžāzż /čbā‰u š“Ó`Ź]$©&LФ@ōzūķuæįśbĀėā±(p•%R”!}eHCÅA± ŠńÉęĒ.yö~’\»’ eīA¦'G`Ņģ&­¹«6³_~ūų”ļ·fī]WB’Ī@WŁ~Ś’7‡ž¦…2ĆLh_€?h¹O€æGĒĄ 侄r’‚÷¼÷_ž*%c›źøpĪG<µŻ®“X>jłb/=ĶN'žĶ4'4õĶ©›Ó7Ū…V-¤ķ õóĖyņźóŲßĶr”ļóŪÆā€“®ę„ÖżB£?Ćdeą3Źõ˜H Īž“É·]ĀAõš˜Ų^–ćē|ÄŲ9qT$÷‡īIž³ėjK,Ļæh§’ī‚’ųėÕKN[}Ik|ü1<üčG°p!rˆ^Żuŗ“ź~ūi ’£éŪöŚkuõÕžūēoOß×jЉĄŗ:żūš5:Į'öŚ«-PS£÷Ÿ:~øčĒI•įρ0,Ń÷WĪ]ņųF4 P…žÕä €J“b” M$ŃßæĘš&y2@ĻŹGdƒOųGŁ’Ų7…ēn ųŃÄ@_ŗ¬ó™gō`ŗŻvśū)›l¢ēEO=„Ķ­{łĮ ÅFčź¹>H€I×ņÅļĻāäĄēߥ¦õKxėͳøZ˜|(F=ćs0’cČ˲r†Åłß»ƒ{¢ctE€~8?})[åÖ0IIŽ"3ZGVÉ!ĶėøōõŸńųŠńœ»õyŌ–TG}Ż) ¢']‘]•ø‚'“ŠļŲpĀn‚¾«XšHj“¹\±o’- žF8QPšī’ŸGĄżą2N³ µŸENqĆäfn)3ō;\š,„ė£ę{Ü“•ĆѶą–ƒņ]}=YŠÓ²’y³ B" °,†ˆŽÓay@ßTŠķ·•”3ÄńŖKEcł#]±B®n\*ē¦źÕf~ŚŲ¬9#Ǿ"[j_ö›+T@i tŪPCˆĀs\YÓ)Ė¦%VZ%Ęād„± bˆµ“vøµ¦d“•.)~©%%¶M`(‘ t @x†PH_k5C2Ą,ĮKcsOn9Ū:Hˆ~ŖQĄxĖ˰Ļ7M£ĮJš+¬j³ÅGJ|Åŗ$}ž¦Rŗ5Ž˜',KĻØA§ĮV­ŅŌ[oķŪ¹bŃØ½"„J" é+Ū4d€‹k]c§tß}5šĻdtv ņaxūmøńF­+~ļ=5ś{ūmm?~×]ŚlÖ,-%¼ī:=yčf,„T~VI™5Ć€½ĮóˆĢłT™éæ|ʰÉ@+Ėeś®@?y‰?ō,Ūß™ĢŸ {Ąæ³^ÕųCq¹·xņĪŚś%J˜ā7³“RŌNyŒs¶›Ą5wßČ!ėÖr±”Ō¾ü({t …³ĄÖŖĢ@F…j¼„y¹<ńܓހ—"?š„‡"Ā`€”ŗµuTė’Ėėy®.Ė󽈃›ź9/YŹ?»œŪjFh’¤øN_$’Ż5ū§’( ĮŻJ„—¢Ć†}Ó¦é„0fĻ֍G¶ŻV—ń®[§ż‘Gj’ąÓOõ¼“€é™g4IšŠCyūæż žüg=t”‡€B@įė"᠁tdö½>=®Š©ā%‘  ķ/åįRŠ.µīˆˆ¢üGdC”ło —ęحː¢Œ\¼Ń`‚5¾Œh K#t<@‹śzŻ#4Š÷ß×ĢŽOŖåDēŸ’ž·& öŽ[?Ū«Ŗō{žx¢ß®=EŽŃ²· —Bßlļ¢Ł¼>;ł¾nƒrź©:‰Q,öŪOωR)-Įźe“ ’vėŠƒĖFx£Æą·wšųļĪäLp‡Plųü„X³Ÿ™åœöŻyÆp[HR«’"˜Õ‹0޼ž ŸK€Ž=kĮP’ĆWĻaę‹9d׫˜¹>| ó’€é.’ŁÓęC±‚š1ĻƒK>öyyT-ćŠƒsQ­ŅģE rœøŅ#‹…Ų×fū$ü¶õ"ٌā£ųurP į<ų“«¶Š&ŗ†īε ō]ÄXEbE@¶'e§KU@>Ńu“ß#_"Š‘*ā%ś ÷„«,ĒQö`[–•›u#Œ¦¦Õņ‹ģJłiŖ‰Śl³„\chąŖZ˧JJJ8Ja@ĀW×0D‹aSoŁb]*V•—«’ƒĢŗźŃ‰†²”fĘ*5|C „€”¶ē*…mƒŁ@ ihB@ĻhČšf”ŠY˜;¾÷Ѿ³s±Ļæ1ŽŁ)„ČZ¶XU>ČZ^>ŲNY¶†!ŌGćäŠCŽSBōųӟō yģX=ĆŽe8üpͰƒnøóĪ]Ī’{KW)”R(©dėPi ęWŸmŃbŚćƒŽwŸ~Øł~»"^žųG ņMSgžćqŹ)z}ōž’øķėnĘ{~Fbą S¤­¤įŹeüe’ŅSŃŁ »}[?3,0„§ŗżJüŃŁ~ˆ€?Ż–łGæo ?ō ųŹż‹ÅžGrēÓ÷rŒ’ O·pźM³‡ļóõhū¬Ołž¾ M+%lųģXækō0żÕ>ņWĘĶł˜ė|‰BPWQĆå’w5kļg¬ō0&’ 'G&rŅ­< <æĪž’=©÷ _ü¬\ˆįÉŽµöō¼ö„©Æ¾Ŗ—½÷Ī··žč#=|E·wyhzóĶ:¶Ė.yIS¼žzžxŽÓ¹„ z>– _’­[_sŻbj€Ø6?‡ēMčiYIø”üLŅ–ˆŚvĒ €“dz’‘ō?N¤cÆsčyæ{æä+¹ćĖH(ō¶¹˜{~ēœ“=hüįŗmČßž¦ŻE‹Éąū‘ü="zŃwмōĶ• Œ;ļŌĄķ·ĆYgå:»ģæžµžß=ų žn{U„h¹›ŃƒĘFyĆÆą’;¹ēŹs™KŽ›£ö~ł `ŽipĒŽßćÆ#¦`Ś62$ĄėWQ»j) Ų7¶[ƒ0ų‡SĪåµ|Šø’]ƒ4ē(ÅžJ1*]Ēó^Ź~;]Éü>‘ä} mI@w|Riäg>ĒM°xČPģ.Ćp÷nq*#’?§~©Ļ±Ÿyŗ;F•Ą¬5¹‘8ń!Hüó{ƒøļ£._īkµž äļlēmÅü4“Ī@,õĶ*®7 jåųõ[ ,ź1D»”uÓ(:'@?ūčĀ' š:Šm/T;^ū7°GZåČ!å¶'†©ŒZžŖWs½fUę7©2é„n JT€Äe€I.‘®]j„“e"UQm¶$j͌“r¶-„„dd „—Eą…6 ž‡ $m¦­@“FŲDJ` e92÷ųˆŌ}ē-³æf©>‚ēŒ7Ü4Čl`šb]²Ō\X>Ģ^]Vn¹–­Į^¶7m±ŗ4`DŸN4eŠ6‹Łw_ śļ¹'žŽ}·O§(Œ…ŅSBącāŠ„č¾÷(_ õÖ¦źĆVØĄģĶß&× ,•²­N< Į~Į£’ĢńsĒșIŃRRjø†)T<ĖPhāķAæ^Ł5č/&ń/šķ¾E7G ą®2-ŃųĒĘ#śaĆ(.÷G4Žo·©×Ŗø½±žß‰ü3GŒäņc'ŃŚŖ#‘äßc?„üčķ|Ōé<żÆ[9³„™óŃC³r’<“ėøb߃ōs)Źś\ļJ„ؙ÷‰aČ%ŠÖž·'åńk)Œž‘®ņ-ø9ČUƒlætYSR/³JdĄ†ē*3aZBˆĄ@•&D؄)”UŠ4’¶2 T«‰ąJf6mPF™ÓŗMf•š„ēњåµA9¶ 6d£zęRß³…’铣){ū%ūū¼:r(nČ®“BˆŒ0–• ¶ęW uź„ŃŠL µĪ‘³J3fßв÷Y³Šo[ŗT/żY%™åē¤HĻtŒŒe¶Ņ ¹n”Ø_fÉY›xęvżvŅŽ—r-HšlC5™ĶNR¹¶šegY~<Ó=żŠ±Äŗ‘ķr Źķ~¶:ž¦­Ūķu°¹WĪžĶõXĻ’ƒ½ŽłÆÅgü5,Ćŗ’NĪN·pV|Ÿd)÷œtWTTӆįŁdOΜĘ$Ąh\Ē/_H©ŪČs‡oĘĒ^ŹŪŲžQ8I”•`…n €xs2£ϼDIū}{“õ‡õ[ļß]³?čügSĖ¢ūf݈Š xóMmø"·‚õ_P,āŠ€čg”¹wŃ×h†‹Uš3¾~–čs“UÄfł ėūæž½Œ‰Ų8xų÷žG¢’þ œÓÅ¾ŻŽ1c4ćwĒ:ė_Øų++ÓŁń±cu©@/#2ƈ/ū’ż–čēė,ąąĄ^_U,fĪŌõS‡®{Ŗ>õ”f>§wwTļ<Ö”[|~„ž„M6@tEDD@oI€‰ ø‰Yčæg»hUэ‡Č‹æatŖžQl®j0œzŲ­“R7‹ Ž“‡Śå®~&C‚€sPl;ż9Ī9ś nˆwčµ/ÅK†&°więVSp”„w’ŖxÆłÜÜV ĪNZŠØ·˜j‘œ÷’ä­DR •‰„Į/ņŠ’??]ǟ¶«ā?ć-n6ąŪB°łP›§æSÉMĻ“pėŽI¶r'–dxĄžąrœ!ׄē“k$oRĆD5¾båģ3fgi.ķ@ ž€Ž} |RwR½÷ €ž“ąJå8€Sę½Ļ'2ĄvņˆErń % ¶­·wB`$eÄĘąF]¤ Pś üēŠ™’%į².\·± ECˆĪ¬ĖbŚŪŽ(2Ų=Rä»»zh¾wÕMõ<§BšÆ«ƒŁ/žA?ȋ=Ģ·ŗˆIčūŠĄg ŠmGƒŖ­Š$@ü}ÕŖbpūćEj€(Öց(A֖ä’ę«m\!öŲ'ąÄ¤‡ŹyØx•I4ŚNށ<øį•;^ž\{—šm”“”’€ĘĻ\nuØĻ³¬~Śē„ŒäB„1øL:¬œ'jmn$œhøŠūfū,ķŌü-“3…h%TŲÄ`Ź “ū«Lž8Äāį½Źųą„j®gQ zriw0ńl3‘ĢźÖžJ d‡\‘–Š·£2­¶ż±³äÉĖ.>6}”ļkĘ6ė-”oéõ¶ä* Æ„£~ŻQų&Ź7Q dgĒ“…+mįJC¶Aą*-łĪ/Aą© š”ēŗeHT QJ˜Be„§<Ļ/‹āļ÷Ļuń\—ˆ0’BŁeBŚeBš&Ź4QŅDyž‡HH/9œe·VÖ’9ģmłÖ€ÄŻēš”!D³“4ę—×؟UŒJ¬qŖL/0„Šl!_ŁĢ}#—mlńj.„ä SÕ'Jh*ĢœÆ¢%iI’ńQé©ėŗ_°·xqæµ(ģi|źgłŠĻ¤ÉHЉr³9Qa¦)”)=å_ŅSōT` ż_tBš–P­ąßuq£ ś£%:WĪu[3Ź4…j÷¢³ż™L³jžlr›„nė}—śĒļSĖDEK“®1\ŠŽ@:ŁQÖß²Pqšo(/’Žc±±F@NIFƼ™ü<ŃÉxjw0–VUŒĒ„ŽĆs;ģξNB?7„Ļö’ŗ^·ü+3eFžł5fד0ĻagŻĮM£FāŅ‚’Āļ"‰Š×śWVė!h²Kh÷’·Pņ_ž³’åķĮ|Ÿ(ė_žS#Påō?Īē1AM ·[.½4ü. )µ%ÉzŹžC¾~c$ =(‘O@ÜĶ?*ˆ»śĒFŪ¢}s±cf’ć$ĄWŃĒŲP€@;kO>N@Ož›— <·æ#’›¤(0FéK44螞‹éz÷éÓu›‘—^ŅŅŠęĪÕęƽM¬¦č{ <…2³€‡śpœ…Īü/ę£uż± ˜ŲK`Å3Ų«ęń R­™ˆU„pČ5|Vlh’P/“KłµUĘ”Ēż‰3āŪF‡ūĘI€˜Ŗ°•($Ź+Qmˆ€H #R— ļ’’ė÷‘|Bo€Ų±&ĀŁ6ü>z-į‘©×%C¹dD$Śŗž?²ŌĖ· Yä³õüc™ĻžZžov55‘‰R¬š‘åZŠŽ+Ų$!ųyģ2 !€ÅJ鹘€ĒąäŻ«ųļelŚŚ:°" Ż„v=…Ēˆæ`R«+"` Č€bĒˆ€ˆ ˆo+$€VB@ !]!dVz*ķ¹x=$¢Å4Q‰T ³[Žń޽Ũū‡Ś(&vŸś9.O­‘¦AŹtÄ¢’jė£źM’‹ŹGŚ)#iŅ*Z° ¹j3±n™|²”Æ»»į”˜ģ¶H!h±lcµ™4ZĒ< 0Q8BZ„¦o ³ė_±3otyĄ ž’©Wüˆ4ÖńėŁÓ()<ęį—š±“ä?įK±r!æņ–"Ŗ#É’µērĀļĪąŠS(mĘoÉrÓbź„ŻŲēģßńA“o²ÕY‹æŅrT¶¼ż9jK…õž’Ā÷d½’t`|ą?ś}ųp¤e ˜ßcĘŽ{ĆĖ/kõź~‰„ĪžK©»~ÖŌh×’±c{sōnETꛄ­³żĘ…D@|‰¤ü…‹×ĮśB©’W c}p"š š4šĶpż*4ęœOØpĄˆźß¤=!Śė˜6M›^y„6ĮŪuWŲ}wŻCtƽ“Ļф šdļh‡zōX¼śCž•CŌ÷ŅŠˆ~Ž4ų’X€žüY6Nf“ÓčozG²ķ<ĆP­²Žf«ŒCö½‰Ł]=œ ī;ŻĢ+;ßÄ Åö-$Ŗ‡”āj€jÕ-5@]h’Æ•1Ū3™nuJī›črŁXIUŅCm®¶W†[ŲW*o}lr®Näā$€Į<@Śąłę‚kqسĢ{¹Žƒ³py3Noą“9.©č3'¹:ņPАöłÕ+õl÷—zö|(Å×NSŠUŒ—ąļCK°=µ>‰€hBŪŠ•*Ą/¢ ˆŽÕU@g@æ§d€o¢ün’¶pی!q2 ņ  K©„®ļÉ“ē’öÜÖ4xe)TDD„@D$†^ķxgķŌQ¹ēnUuÆxØ :±™ķē8»i…ĢŖ kX,sʌ+GXŸU4ź 3ŚÕ²NĀŽ©qŸŻ—Ū«˜ģ¦hŅ7LŃd—_”ÖŲMV©éŪŽ‘LŽ0Q5vź””©ē—)æš–ßØā/ù ŖÅ4ŌR»Ź\^Ri„õēé:ĖoĘ@ė=üEAæÓō7¹Ķm@GŁ~čųw$;ģšÆėšķIFßsWÜõl½ˆp¼LdõHn w5ĢąÜč}ńń·#ą:#ū˲’rīPŠa/=–?f Šjéwū!—”³ų¾Ē·ī¾:ÆPk=W˜õüļ onäāL†³žz„“*-ä>‡Ótį-üšøŸÓjšž¹"࿣¬m ²äæ›õž©XÖ Ģžŗ ž† Ay JqfųRš%’Ż›hm„ÓSō«]!"mKZß%“+¹×3ų- ˜¶ą[Ģ=Ąć“Q>±ĒGļ“šĮ\ƒc×mēŸÉTe0&ZW0?‘D¹ITį‘Mą>SĒuuŠ‹RŠK^Ķ2Ķ 37ūUšMŖ(…»Bqš#õÜæŌ'eūؔ‡’HĻ,Īr į½,›ļYŹ>Ń9 ‰€"_iæŠVP p÷¤< §Ŗr]—ďÓ`v@?\eȖ@y-² B2 žÕĀBZBHå{Ņõ=™ĶéVkŃŅ‘:Ą̦ɿ楌’(luĄųcī3)ĪxźļŒi)CwPcŸļP_3’sē4™“®;Ÿ‹VÆŠ%e‘Ü’ŽŁbśk<¦5B°vĒ}x :FeµžĪz›õļ®ä“ dw%’ż ž;Ū>±Čöå#PÉ <Ēįez&÷ß_—ņN™¢½sēźŒ]h\[ ĄAiÆ«’XÆ?’|­øī:­ųŁĻzrÖ6‘CĻĆŃ’µ¢R߯@ńWŃÆ1ŠĄ8ąZtĶö- ėj©Ą!ĄVĄÉĻ+×gųč›ėįõõKärŗĒż­·Āõ×ėvĘG gœ”Į3ō@qöٰłę]/ŒµčĢ’B4Po¤’XĮH°]æ}#żčŠĒš€ÅheĀgįĻ5üf’ūÕPŠ IDATć±>Hč\ 0Ō;w’žLč»an=čž/Ü·;$@GD@±č‹/@G%“«ø=-8Y‰VĖzĢi5’šÜ'&‡­JŠŸ,E*Zś$ÉĖ6EH'ššā½w[Ų÷ł÷Fė·(„¬ĀąŹčµ'øż½&ę rPQŪ@ŪGŁ>ź„,³„Čwl°c-eÅ&™žJÓµ?Ą@=õ €~P Š©LUHD¦‚QVæ#2@ļƒR¾'£%Čy*(-3ß.ąÉ’‘“ ŁĀœ7}pźń³¼å// Štć±l#g5­)dÖ0År§Ģų°j„żöš­Kꗎ“Ó¶ŻŽ. Ė6dYŻņ\EźßūŒō©\3óüœDŠ`:,¶«ŒÕ&ŹĶI数iżŪ$`Šp§žŻĮīkOĶ 7ōµ‹[ZÖ²0pĶFB,ŖbĶ4B4ŗĀ—eł;’öwśŻ.@?tƶæ+™ü»[ߌÕ?ü;ś¾āćĆø-u6`ÅĪ(|Ÿe£† åŃ[ēĪąÜĪ䞊>ėų—HĒGķ²©ŖĮ­°‰qI›}}TĀCu)S*Ŗø(ZŸIqޟÆäõėĪē‚k~ĪɗŸŹŸęĪąu)øµĆ9żĒ·M˜Åw]ž£¬’ś”üo j Į’#ĄČńØņ!ų‰*sŗs®(¶ŚŖ}s’šš¼ŻGM ¼ż¶ž½”¬pvqŹ)zn’ĮZ5°vmOĪŚ&"£ļuįļ._’Æbb €]Š™õ¹Ą$  øB·ŽŪ]°![[(ō³i5p3żč&’Č#ŗĪ’”Sō ±ÕVp×]šüž÷5CxŹ)ŗ„H7"żóĆe5Zԟī÷²ŻąN`½NH‹„‡&fꔉ‰™hD’›’Øv±1uŸr¬Rŗ½ĢßlŸ6MŚDŌ¶½T‹b¾…%c+Ż- %Čie<ŗŹf@šAk>C¹'æYŹń« ‹F”ō’5 ösó7¶æĻ¶QĒ’ŠÉ†„}oÜ ‡>ż ć {Ąąƒ—ØüÓÆłq|Ż©“ų·aiEŸć®dwŪGŁ üGūżņÜ[9ˆs ū‡Hɖ™67rėrąAżąįwŽ ¼½ÆXÖæŪFÅ\ž{ž{*łļ/§’‰˜#o;5j+|§„“aōĢėĖ4ŪÆ«©ÉśųļƒĮŗuą8°É&yā ¾OC”ē-kߑ×Õ’tĀė«Ų8£æ €ŲæĪ¼µw£e’Ē ½<@·Ž~ Ų³ŸÆ”»”ŠĄ· xƒāŲ©Oqžłpā‰ł`Āxą]3tß}Ż:„OŽųn6GŁ’ž ³1<ßsĄmhņaC„‹ž¬sŃĄ|t]Ō’ŒówBTg,XW$@_:|>!~½¶,®ŽśøĪż7¦£übŪLĒzöB¶ķ ½/  2•ØÅ5,}~æz±–ńsLĘͬeŌ3ÕL|Ķä±\8አ#" >‰rF‡L\°OI8 ŒMÖ"5@;E€Ś×`{Ūą§ŃŗFÉoÖś{-œ8rPfk‘' äĀ€wā7^” ?ˆÕ " ÆåWtU"°>Ččš0ƒ ®Ģ…Ź€HPb¢GČBĮbįz.‘+»)=•°ŒĄ)1¼1›;k‡n—ųŌnž÷F±ś±Ÿ¦—ĶyĒK÷»Ć~JIīÉŌsXĆłŗ—r “ÓŸ'+Ģ7*G:S†M(łlŲøDƒ‘4åŅr i‰ ĶbH_%ĀŁ¬a¬»³ŗžõ*Ų ¾.漖µŌ#}ĆėģćóŖ”ök°ÕFŻŠZ¶įyŅWV©ō‡lb­v‰«^™'Ż¢ŪĮ'~–ß6ÆTR)_™b­U">«fĪ2ŽYė”~G€?ŗŚžX–ßõZd“Ū,#ŠÆ÷ļ³\ōžīIü»›ķō ų·®ˆÕų{aKæa£¹#Ü*ĻÕeoń1Ō¶QC†pst9sgpNw€’ŅOHžé7œżŹ¼S_ĒmæQūČ“”Ž>ŽKŃĻ:±rWzuˆb&æž#÷oŗ-ū[ÆŃvžćŁ÷oæ'ū^p#/G+ćäõś’üÖūGė»ž;ŪEWN’Š9ųbĢvČĮ RIm²ŲŠsƒńūļߖˆśŚŚöæ[^ ÷ļa¤Ńą:Ł×BßĶ¾æŠÆ¢hōš“±ßä“WcÓ!/qEW@= ü]"°”"@ßp«€æ¢‰‹~‰E‹ąŽ{óÆkkįé§5põÕzŻŲ±pĮz)=,Bg$ē†×™a`p䋰 ¶_Dœ­€su-įłg”’ļ”?’Jō³·?•GōčÆ6k’Å`›šåš‘?ęī¶ā)ö0’šnN72õÉ_p`G$@W¾u (¦(ZšäÜJų|ēŹQ„±ÉPŅCv H–¢¦ ž%ļ 4^Ųßį; I€ø °, 4Ąb󲃞śÆĖ+ Ė"€ų$²Öąģčw^żØA׌F½q¢čO"€½)čJ— ŠB ]ɀėŹHąKWłR+JLT™#¤ƒ';+ĶnF„€JųžØMØ»Cbę MķWVøOūⵓš—®x!×ägūŲ(`iąq{ŖŽƒź©;Rkż“ R¦ĮNBL/l½4dóĔM·/™=vĖDC"ińŒxa±2#iÉ!V¦i“˜y»ŻšD 6¬™aa<’mäE·Y C„„ĆB§Ź˜Y:Ü\å”K/¾Šü ģhBJ‰B™Ø6³Õ›%g«Ä»ēēV|ø(p7č3g†ŸåĢĘ/Č*) “&ÓfNŁ`szĶ8{IYEó„« ?“żń,:–å/Ģō÷“®ŗĪö÷Fę}žYōļ‘ē05ŹĘ»9~ł±Ö²ŌÖ±ķ’ĪēyĆ`@6Ė’c;žõk°žü[~ņš]Lkiāb„ˆåĖ9²%Vēģ„L³ž’ļ¾V·Œ"ŽŚļŌI̼ņÆ¾ĖL6Š Å~x4›_y/ēs_@ū¬Ožś"łČz’®œž”{ąą€jdy9mSo­ŗŒgŸ…•+uĖæéÓa̘ŽŃļŁ¬^¶Ś „€]vé Šsüč’ß:ś_ķūU|­QDģŅćų=:Ć?4|=ų šSt›æĀģ@:Ć<1|ż6šŽįŠ»PĪvjśóŽ£•yóą¢‹“³čM7Įž„„šŁgŗƒ@,šż›‡Ī€ˆĘNkŲ ø ķ£’nĶį5TĆXĻż™ Õ Ÿ³ŃƒbŌõ`£šhö[\W\Žø¼ƒĶ×b%3Ƒæ@Ėkf”ŌĢ$ļ¶Å8`Qøßā§8\)‚g¾v6’| bd7.ŁģšXÉyR2 °$Ūś;,  ®k0¤Čń*&e•nB””ƒ_v*’ž ²ÜLŪc: psłué ųÕPk£Ņ~~}°Üü:KBŹD䊿G )/V*ö0(u ߏęū[$³©ÉfĆĢś@߇–ińŻ Nt? ݲŠēų•2ļ)`ZzɈo”±u•ɵ„ßQcĄÆędXfJ0%HįĀĄ<°Œ]·KņĆŹų֖e OŌ­rI™R—å DŅŌ™ )Ū—W¦^Z·…w¤”m_ü½*ÜnČü" „ahd{Ō×Ē*vīų±Ćė— #æ=:¦a€'QC`«šż*æ(£ó²²ų1UŸµŲž2\<… ¤+A ¤ļ*O¹ @Ŗ€„iā„ĄĖD*©²n ĢbŚR@ŚB•Uįšå4k ŗßüßl‹ūP¶QĢ÷=§II£L¢Ņ0;½čŠO½,O暸5U§nIÆUȌē¢Ņ¦)ÖXŽ17Ya¼W2Ԛ:lSēć”[Ų+ʆi,%•’XJbD‹e¶ł¾ ”ŹŸŽ4…’¶šgµdża_%£7dM_ļz~Ū²JIAΓĒD„9mČčäĆ6IŌ%ĖMßčā " AŅ2<©Tfu‹/žoi)’šHŌ 7ķõŽ6ł 7ÅĻ—“V2@ŠbŚĢ)­4Ž:Īü`ÄęZ{ŃĘ ×4…2 arB*ßĻØt¦YIåŖtą*Oh€Ż7qˆ­Ā2QŃß?ąļ ōŪ e ”QdĘbYŏk(Wa”¢q£čńĆ÷z`ĻG&Źśż…1÷#Ó-ü0×b~ć[¼]Ÿć lõÉūü?{ē&E•µńß­Ŗ“C%̊³¢kŲ]ĢėźŖū©ØØ+&TÅ Ę\sŲUWtל0L øŠ Š‚$f˜Ō”ŗź~ܮ韞īžīÉŗó>O=3]¹:TŻ÷=ē¼§Ŗ”žßzU%¹ūÉ;ī}x¼ČǧpÄGošt(Ąļ|M懒^\}ī]ĢŅ£7*O©×ĄÖ|Q¾ž³#ddÄāŁ!;šś‘óߤą‰iÜ’\¹Ϙ”ŒwŚ { Öfg“Z‡oƒ Ø®Ae(w Żh“öyķA £Täų"ąRßЁ·€}£ÆΧóæą”01Ų ø†Xd4käēCŸ>Šš{<Ŗž’裕šxČ!ŖuČK/Į+ÆÄŒE\°QDxŠų/BŻ ÷ūŽHI4Pęg=PļÉp”ÆĆXTFG[ŽólŌużŒR=W īéˈµüūu“’øى˜’šŽONX>;Åg3.پ.ą6$*’Dć–ѳų«{yA†ŸóŪs’iņ,J *×4^·%ƒ…Ęʼb¦s++W'Ł×°4ū\bó:ń/ß¾ŹƒØŻ’üüźjāē—õ€śDƒ'~~ ŠP?/čA8Åų½ üŪÕr.¹hR Ųśr€F Ļptæ;{)ŪAņ * DPrĆ;õŹx*BøŸœäē9°%s^­įβźØHqB1‡L‚8ŪP !SņōĒ[¹kM(&2˜"׳ßLżF—E‚9@Ä@4Yī‚•dYĈͳ"É·u5ÓķĄ0’/wļŪ—f{+=WN»ßŒ·±Ņœ‹×«šW$ŪĘėõ°ā©’FÕ+æj]¤Om¹5$T#w‡å`"ō¶%Å>[ä öx}%čZ¾Š…"$%uŲü Ė vDJ[JĀŗFŠµjĶ=~ń“æH’¾øńSqĻ¦āŽžzQ*¬lŸ(nnaJCŪ¼"T²vIĆgnĪ?÷£dūξ4ŒÆŻ ĀkšŲčĶÕ>.ŚĘūŽ6»ē}_ŚĻSÆi*ĆAOĢt0cŁaĄ K­vs$gݲąą-«ĆÉ:yŠyzÉvēę”z;BĄć [x n3Xź=ń£ÆPĢė5ČX0`Oļźü2=äĀnü@Ā!,CHĖ K€ˆ’‰äٹ7GüAEżē%«õß d[ėŁ„üļŌAõž‰pgDN™‚6c6žšµō5ė8ٶ¹™vō+-UĀĀ…ŹļkŊŒ7µPA¾/P™Ō Q¦ßµt>?źĘÆ­ż!ųP~#9Ą„ØŗńT(ŽöŒ¾ž \L× u5®)BŽ]Pe ūŅ‚÷覛ąŅK•č{ØĀ›o*Ņ’Ö[PŸ,—LĮi÷· U÷ž91%p+ē*PdĪO,ś?ÅŁvś£„“–ĀDŻÜ6¢u(ņ’CōļĻØļ–£ķ’O”#D€›ž)&)Ļbjā6͉ļ\Ī>įęąrĖO@Mn£½“„ÉDH-¬‹®ļUåM3R ‰"=Ō hs i‹Æ®éön!`D„…až Ć” ±%_æ+8 čŹD8.—™šT©¶ä›WĆ)Ģųļ®[8ĀĆ E:jø:Ģ!YįčqD×xˆõNÕkCœżAu\™U‡ŠuÄč|AāE÷9éŗWX:" ą¼®¬²½õė¬üŗr«¬¾Ā#90‘½e„b$¹į4‰ŌD4IBBB£jŻ#Ź}9ŚZ”X—_Ŗo(īmTzśźõÅšéń ŪŅ<Ķ^£L’>·ZŽM?†zżü}hæćkóN¾Ü[6Ģ/Ģ×qum¹ Ŗŗ’J#G,.ģm¼Ūw„IĮ¾jŸ_d56ĆR«Ūhęż¼,8“r­9ʬ³÷Ū¼”Wå–ål£·ęїĖ#!¦Ö–ó„@€%4juC¬ōˆ‹ū é]YÜGxDŲN$üŠ” ·7é‡h¹P H?Ø4HNü—}NįgoqB] £’| ēūr¢ŁY’ÄŅ(#‚œqgn­āN€¼īžx;w9ĖįŁ#S8©j3¼¹1wm»1Ąä$Iū ę„K¦Ę÷®O4©ĶŌį\QÓż”m]ž!ó”h?ņŖ\röÉk>¢0ø™!¦ÉąčLĻ-~øjń=b„ņų0@edˆØ±žĒŃi±Œß®Ą‘ŗń+D[<„Ÿž€"÷ǐüĖŚxŲ9śz:01Åŗx`GąX”O?ĶvMą÷Ćøq*5xÉųņ˘9H4 HšjTĖ»’¢"įk‰‘’Ž6æsŽ“\ %l F ;¢2ŠQ|!]I‰…zŲ5kqR‰ŗń­E]÷*ńÆ@‰až‡ÕĻön¾q¶Ķ³BcöĮ³8=Ł6©D€÷ÆbPĆV ~ß ńŒĻƓ¦É%¶õ¼³ÓaünÄ8•Ę˜M6@¢“ Š8Æ!łqöQÅŖ”IöÉŲ÷-‡‚ˆ‚$ė÷3)Ü«„…śM”L-ĝī2†qÜīŃ8»q#IEHš\Ųā]°_ćL-śŽKØ^aģ'µ¬Š„ćϱÅB4Žł"ӽÅEgę–čeZbAJ˱Ž2y¬a /·bI)D4­šGüąĻõŸŲŁX×/R' ŪīHx|ķf„Ś—ōCĖ¢ż”“×c’Mė8%ä(¤ŗ=ōĀ™§W.ž9ńå)†mXÉ~㯧Ńz¹|ŽĒīf‘”ō‚ŖßžĆŽCöŠ7=®­BčFęŚ6Ūį‘cŲ÷ŲSh“¦©K’Ńå‰ ©ƒd jż¾«¾ću)céčB°±w?Ī›p'»×oĖØ?d^ė-3śƒĪ©÷Oęƒ4%ś÷ŪŁˆO®Ą[YIĻp˜–ÅżĄv™œc6øć=Z•Lž óęe¼éVį_Œ"’_¢ĘĮõüæŗŃqh  /*M]G ¾ČnōG‘’¢Æonlƒć¶Ā[ˆŖżģœlOūŌĄ›(„o*åg)J \ēįĪr¾×PÄŽ‹2o,z¢>÷ŃæeŃł…(%‡˜Ŗķ’0j\įō8­@ÕöÆG]g9J؉®÷«hõ×Z¤ ^ČVxh %Ö³õy5•±Żī·$–ƒŲĖõś³i””’Č<¤ś]k:wÉ5؝‰Õ?">ŸĪ R" ūrqĶzŽšsöqwš%d'@Ӓ€ĪŹ€¦"@ xG*[†į¦äɗ-®t–‡¢T·06Ÿ©ü@ĀOŸYŒ^cĘĘÜĒåp±_ĘzF[’·–™°"ĢV§4`[…£Š™iĄa|»ĄäŲõuJhI@yH/@ś¬€ lž>ŲҬהšœuE†TĒč*‚@ćö Ā€įĀė"ŽvaYRõhaJŪ¬µż”ōJò•šŖkXXž|2·Ø jQt¾?ŗžF¬Żbu=[Q7·jTŠut^jüįō<ķØŸpMnH×Ō©hɅG˜r!S±q‚’ģx)§öÜ)õ÷­Äҧń®üˆ×QB’ģóNėµ]l»½€'ž Æ÷(‹ļå<Ėäo@/“Žæ[EqZ[­Ė äd‘ ź Ž8/*Œ‘\ī\€¤ā›ū­ŖķPŲµoG8ŚĻ.eļČhĘLu˜Sßµc}ń±wĮĖDE“¼öZ€ D8>PFx5ōq=ų‡£ƒ’Ū’Q͹ģ=„g-É €®-@ˁdĒiŃ>R ŗW„e!ō(A×m/–}­m·¢$OOķX/€§åŻ-DĀR«ŁdåT~ī_±:²W°ĘŚļ™·ėÅž%Ć _›ÖŌI›§U“xĮ¢Ć>§lDȼ$`ćÕōŻRĶbe:+5>/Æļs/q>¶^Č$ĖŽv ¬*ČØƒ'±)Õ9½=ƒĶ ļĮ‚ß?ČįÉÖkm6@6%Šŗlh*lߥ°ž‚3ēėL » Į„v…‡ū9'WD §µ?†8pi˜Īņ£s¹Ę«q’ą8|Qˆœån€D! ŚEšO/ćļĮń–=[„J“F€ŽÉ €Ģ¤ē“bżL³“uÉ@&Ēl 1ƒśT€ҒłÖäė;¶x¶īĮ Ū³aMø“üGsPm„µ{ØŽŽÕ2ٶ ½ĒaŽüœ}¼¹ŚžQ,Ņėē)Yj…Xn`AøžÆĢ€”Š0GŠhšŲlxÄŹÜBķ«¼^ś×‡zW— ńŌź9ĀJIž£i’aT«¹l®ŃŽ Āa©«moŊHiķF«Ż{ØŁ ‡™¦Ü‹R;bŚ’\ĄkKeŠ(ķØą¢:4H$6Šō7 Ų*t6^Öh~~Ģ+fya֗lC•æ„°Ē‹Hž³‰ņC×"żėČǧpjÕ&eʧ|;h®>ń–dāč__ƒžļæsTuēäęńöœ•”*Øv~Ī’Ó®åāŗev[\Ź•ēßĢ?es_¢ĻgsXx4e×ÜĶ!^©ÆĖƒ-0斏¤Ķ 8ņ(ö>ö·”§:ÆTQ’Lˆ?dŸī™Eż;3åß©÷_¾±a%¢r#bćOh›×”×V”‡ƒhv•ŗGiŅėÅ.(Ą õÄņå!s ł=#F«÷pņ˜ų÷²9ņßøŽÄ_ŸĄĖ*ŠÕ%²+ŠŸģOū¶¹v`£ĘłkPæ_ ²ž¤›üw£ƒŃĄ.ĄTjĶąUŁŚĮµNår’J ˜Œ@učJpH®•P€"ž½£{¢Rį ¢Ėśw-ŗ­#8éļŽłŻ&T@%Jč­Gżų;”T¶œ§H˜ >zī¼v’mO8"Ž888”¦­Ä3A-šš,ŹØ„õ¹šØĻøC>³ö6]Gqå•’gj<2z–ŠŽ,Ļév„'PūØņē1śš»ł.Żł¼v!Ļbó;ĆĻoOŗ×S­ŪZ:>’—$"@ģā”ē`O\›Ąė^¬W驥¾öņń±ˆrϐĶ-ƆUä)鄀Q~F÷šń/€äļ+‚<ŁßĒŽŅ&°“Žł«¤ F% åŠ.Yжb€³M[ ŠzQ ݱ[ #Nˆļd—©8 ,K ŻBTm°r7žé]³ŃŲj0ƒr;Ė”żm(Ā&Ƈ0ōmu^¦"Whx„ Ö¶D½“Yc™rmJ;&GĆA-šØņxXćĖßūK“e„ōÕ%ŪE„zHĻV¶Ä>[„ĆaD­z‹ķŪņSø°¦BölŲjõŽčoé‹IOŪ¦PJrRØLA!±Š04­šĮfĆĆz#uy…lĢķCEA_jŠ{’.āß„چōƒrņĻ”ō»_’šyÆ=ÉēR’'¼š‘%½R7¦t§łóło>ĶēRR i¬šp£ŠJš’§ys)śąž‹$GÓųžŅéāń"T’[/ēžpPąöīĒŽĄ»‰]Įé5ܐ“ĆĢ«ļmšh—-ń‡–§ūCė£žŠžF ¢žń’ųU< ^b3Ąh[²³“.%eØĒØ@ķ·Z6ĮZ4¾šśYXPĘ2Æ3§³§†9`ÖøqXćĘ!3%’D€@3üŽ•}|pj,ß^ 8Ń:ł’ ŃVKūļ&’Żč0“õ`cwł/K˜æAu¦ĻQõ/PtąaTė½®–ņīĄķvŅŽÓ»TÖeQƒgb73Ēü.€ŗęzŌs”–éw~ųæ4āߕ””™?W”nōm…oYØĪÕØĻÕéXŠžß_Iڼ֖Šć€©ć9Į¶øLJöČ+d×½ļb-Ąü $ƒ¼‰ś~‡uĒŽŗŸ¹ŗKĄ§×ÓÆb3?ßķt)»Ų©łĖkII“6“Ģ$ŠĮ‚YĀiK^p¤}ą‡‚ˆ“s¹Ć£qNtõ ‹,öŻ čn˜ˆD! Wžż<ĢBł®Ų’ļ5Į0‘NP[crćkµJ pЦ>ĒŹ[+@ęeīCg#$#ī¼ŅÆ#DęĪ”-ą¬B·'#ŲžO8,5”zõ*«`ĖĘHϚ {›p=$–ƒ,“ŽŅ¦HJ™'lrl‰W€!ĒéŲ€)!4QÆklѼāg_ŽųÉ_¬żTŌS[×cQYŅWoĄ+ģV’pøŃ?A½ ćõ õ\…ˆ$ģߊ D­”£~ ž†4ŌQ  “1ɳMü¶“ aöx ƒzĶK½/—Zo1u…eŌź¹„ŠJ‰H/¶7!ķ=Ā™Gł”õ¤?Ūhć‹„ā²™×3=P¶4=ūqŽ™WņVāö‰õż RżļžÄŌ`č՟³.ŗŽ9Īrw·åūžĀŻį §ōŹI¾2ę¶’ģßöż—Ģ4Żą“ĖćÄøcGåßįy|ŸJ›@`ä!Œ<öT•ŠųĆÆ/źŁ‘’×f#¾żżµGŲ#ŌĄŁ¶Å ØĄY¶Ų i¼ćńš|n.ßäęRߣAk{ĢĘa‡LGü„ˆ[ī6üī‹*ļŻ•ŗ'Ä:4“‚(‚æ•ń»ųå÷µ•üKČśķĘÆ m=ØŲX€Ŗełų•żóm’u/FEüžFEg ?'Ŗģ¤¼ūP7oōµ“žjp喇;éļīrwŻ{W>~iØĻf0ūķ¶·””\Gč0ÓĘÖ“ „ōꀋ£ķµ—ŗŽ;/gx Qźø^Ī=ųžvo—LxżB&K[„^j^žoģ<Ź qŻļ„ĒØĖØt^w…lh]Y€[ŲFøŚVG8z¾É üvŠ(”ń„P|™ dā;õŖ„¢ƒL„€ßę3ĮÆ+gėtØ·¹jNĻ4hńßÕ6/€¬K ķŀ”ē–f›–Šq¢@Ü>ŪY p`$”€źZ˜9ą ć†zi+µœ-åVq Ź. ×ɞ”ŁŪ2e™‘%Ņ"ߖų¤DtA@č¢VóPéńŠMŽ|±ÉW mĪ/Õ¶”ö×kŠzėKGz’ī šęo%ēp8ÜÄQ·Ā2‘Ųg +z¶…0•  ÉŗÕ€'Ä#mõ~ųtl=ÓČĆ« K3šŽå&ÉmEų”‹~hBü4’Łcßu+yĄćcĪÅ·5Š IżÜÆ_y†Įß|ʇ€0<̽ü^Eņńā F¬\ŖJѼ^^»ī>Īu/Ÿ:'"aŽ0œ±§^ĻbˆÆóŸ~5gÕV3ĄšņŹÄiœ÷É»}ų3vܙėN›Ą*čŚéž<źm›ņær)bö#čÆü1į7HÉžnŚ$š©ĒƃZ.yrØÉėEƎ„„ĘŒĮž<9ł5$Žįwź‰?å]6 Ų•µ\Fv>_,ŌxŠńśŚˆJū’1:ż„*®%f|Żnt(ŚcŠąŌ)\Qœ<=žóĄéüņR_œ4wĶõWsĶw§¾»Óß§n“4Ōų{*pSÓՀ²ž‰ŗ”׊mŪĆbBĄƒSčQ¾žqø·ĘĶ£gŜ”Żp· \ś4Ž•ņ#Ź@³|ą¾ ŪķO±!ą^ĄRŸĻ `Õ7Ü'mŽ÷ū8ć7÷ó¶{Ÿ-Éhi»@h}Y$‡w4uŁŲ‚ĒŽ•Ltūįć“-*ˆJ*^Æc·jY@S¤ö×ŲĻĆGD°įćjÉ] aÖģžÆqµ&nڼ‰†©ĮŠM&7~PĒ'‰ūjĻņ"ƒ¬h;1Ą} ™ŠīmwŽ­ }„&Ēč ” é±£Y„ŃĀA§a3žśj™j¹¦Iއ‰!5„x:Ƈ–G §@Ōē—ŠzĶOøØXDB"lk:2]§ƒTĘy­E\¾ŽüVD]/Ä]Gj–:gēܚ#ūĻ³‰ņC×"żA ŃŌ/b"f\Ė|Ūf09`,#Gļ+ć&žīś~€©—ńLÄä@næ7N¼o“ź?õ^‰DŲˆŒĆČcOa½ÓŅ﹩ģ½n¹*O3¼¼9qL4ų[³ļćÓųXŚl  iü(%=¤¤Äš0gā#œ–Mŗ?diņg"›ō¶ÖįŚ6źær)āEhÆNbŠ– Ü#%Gg²] ÷ Ó Įw~?ÕżūÓ0n‘D ło\Œ łPŁ=QždŪ󜊏(B=œ_nŸ«±NWUÄZ|ÆE kQbĄTVp„nŠNBg ĪžBż€^Fqd‚AŖ.g.źĒŌÕ!žļČZ÷nØļSOą9ˆ¶§ėX¼܂ŗÉWсõ\ķå 0øåbŽ˜ü šĮ?ūœĻ9Ć÷J’.ńö%œb†U–€¦sĆؙܑøŽ;—³·ąi)Ū„VōļĒLŽüµW6@*! ›lH]1€%½KÜ¢ĮAĖ`ßuj Ö ĘśyŲœ§_Š(#@§u`R! ŒžčćICØ—%łō­ĘmÓŃ ś{Čß-‡k>Ŗeź˜BęƒŖ#œżB-™q#•ąd4'@lj#虯–īķÜĒLD¦ēŠ-A[ŠŽ ;Qó:“`ō:ķh“\Ӑ¹`ė9H‡čĖ$†xķ ‡l§k»—Ł:ō;ȆšCŪFł““®?Y’ٌ“’CSø¤~+WäqĖES™ é‰?Ø4’'oćšMėԳƟĖc—Ü„²ĪÜķüī’+'l)WF9łÜ7~&·ŗ÷uϟxɊ°?`o· £Ī¼8f¾ź`ę͌ޓŽŁøŸI‚ŗŽ}9ż²»ų0ٵż’£žłŸżśK3ł£bMķiڵšĘ]†Įæ½^6••Q;r$ęóĻ«ļ[3äß 'ĄO¬Åu/ńļżæ„˜×—X«kA“\ Ŗ%Fž7”æćłUśŚ:A¢n~ŠNCG,NDµó4P^Ē’øüeĘqźGvŖ†»ŻH „ھŽ2”ģ,|\jéXI¶rlO`źxް,Ęļµ'§÷gBs3øoĢū?ęu½‡1t䕱`ĒŹ„ˆļfp…a ŽńøąƒÜžœģĶŹs`õˆm·‹ßŗB6d_1!``²ģX©ƒƒ#`®ˆ~wƒ’‰ļy<ģ:FsBĄQ9Q łGt–¹QpŲ‡¾Ofø£Ņį~¾%ś~® qą¼Vš."›(@ė³ sÄčXA ńŲndK¢»JęĄÆ!¢$6¦Łõ9HäĖŁ~čxŅ-‹ö'ĀIńŸ’ś|ś>‹]Óųńšé±Ö€nā’ÜĆģ°j9§z|ütĮTU"ØC›y-Ś6ƒ… īČ3Ųc’©I<ÖĘuxž~+ŸII_!ŲrŹuģ>`{õv{Ŗ‘ßĀįå<=ęģėą"€Ŗ ōļæ&ēącTi’m—r^] WJČ1<¼½ĆL9ćRõÜr£5Ä’›üAĒEż³MłŸ~%žĻŽįŪRž  !ų·ap§a°®¤„ŖįĆ ĻK$ŪŻ_Ž›ƒzt— Ēļ+uĖw‰"’A¹ÆCe‚Ö „žb¦Ńaŗ£žŻč"čȁĆXą?Ø’‹Ą¢’ C|k@Pn™oŠ]#ӍäØ,ķłÄwšč,|\2zٌŗé’ā3’anŠõL`7;ČēBć¾cg1ŃY6’zÕ®įa©~ļĶĆŌ½/cŗCų’s[’Q;Ź9#ĘÅz6CŪd“UY@}ł)ų©RK6—Ģ ń¬³¬9! Ož‘: „J[ĔĢx9_¦įNČē°<]µĀ’’ņ§*Ų=ń|1 ! Õ^ŠnbdŸą>l÷¶‰ĒO†–F×3œ;3żæ3iaō>ZJō”mČ>“į×-d$CĀmķ‡ä¦~w_ĮÓ“C¶ŁŽć’t9Ÿ,šOįGļpbm-§ŚöŠ4V^:QžØ80kē×U«{^A“žr»ź®ŅˆhŖ’Œń\ØUm¦ {rŁųxĘIõ…w\Ę<ŪfGĄ.ģĮ„YųżR¦jPõׇ-3ųƒ¦éžéÜżį—õxm)ā„ńä~5JÉŲL·k|l\1XI°UAL p²|(AĄ¼Ä̾č(:…]Sˆų¶ŃŻ„æŻč2hI;“–ąPąŌéąką5T{@÷9lFµZūxE¢ŗŃtČA J]üģŹX¹uĆßL¬½c»"Ś_:e‡€É Ż"ĄāE€qŃS¢0;¶<c@ĪMBČķ(‘œ‚F£O޼Œ£¬u‚…ž|žtä4•j޼”ßXwśŠEÜ?b\Ģ­Ōą%™šÉE€ĪĆv€z½y¢¤7r}‚Pb"K ÉLó ‘q"@%Tō ‘¹5ąŖņ‘‰B€ßD†ˆ Ī ŃlÉ-Ją½Ūł5¤ćą Ć„/ź8]ėvטą$ė?Æaz"3tz[‡C]Sƒh[ši±+ĀV%÷ž(ĮhH"®õŻb€'‚tj¹LŚ&•ąŽ2ʑk7”šĒ“ OIķv“¤Tb€“NlD晍§ćڦ¢@nA&б“K½Ÿtē—qŠ:¾– <»pą&Ž­ Ög}—DHąq”×År”įK˜|“·9 s]ė~>…Ņśõüä Į³?ČYĖĀ[ž·Ų’ ØuĆĀ`źŽg2mČž±4½w.cĻp€÷€<4Žõås aüž–3• ‰ĒĶ6:¶,’ū@ӌ€\nHn°éG›~ŅŌŲŃmńū †öӘ/„*„ؓœū~=ÆBj³Ą“ü<£+ź%×¼\Ɖ«9BĄČ\śą…ėhƒf“mP"MĀééĀDd’-ĖpŸ^K²ÜŪ7w^ÉŠUČł/n’ŸM$ߍdDZNö”m ?déOź±ŠBŅ©[ų9’;)ž›Öć™u+_J™¼»”ūó˜½Ķ<÷»’ćGw’ķ—sG0ČŁ=rźoįƒ&ēR¼ć2>°mFōĄļ/ŗyēāGŽx>OE±H¶l)īÅ%WŻĶ›ÉĪ+‘ųCŪŌłCvQ’ž}‘«¢’·wŌ10ä“S0žŗ™æŪgeŗm`p'jģUAŪ`„krĻ“4%łŻ„æ]ķ=x胟uéŒuP­ߏN‹I®ĪŻ€ P&žß½t=²×Ī‰Ŗūļ·’lnD}ĻBՁuˆ€ƒĪ( Xp!WŲ6wfN.»é:²¾Žg¤ŒFß¹œsōŻ|åŽvĮµ Üŗ…Q¦;‰°„Ęs½†rÅĮWĘ‚¶T€–· „¶) €˜00HŁ ›łBŻ3‘šõf“s¾ōšSćŗI„€“ ž×•Xм^Ē)‰Ēp q¼ĮR”jYaĢÜz¾sÖu ;ś(ŻĪĒKBc@ŲāoóĢZß@0]yt¼`EFuš!@ėE÷~šC·HŠmAīŻh чŌd:—šCǐ~hŽŌļö‰Ülą|÷!½^ę÷乓/å½ĀR5^ō&9‡gaųņÅĢ'Śš²Gc÷Bw;æ›.äcŪVĆąƒėgp²×Ūßw_āį!ĘGL†^–ķv OVSßh›:Č,ŻŚ'źŁ‘’Śčŗ’~żĮæp¾iƲüŗ$š*ó1SęnRŽnøŠŽj÷÷3Š}ŠŠ„¦ĆX©X ̶Cłœ„ź§Ż’]’ųŽÉē’ß7”Īóg:ŠĄAkEČ\X¼ķµ‡ųŒĘß…Ī‹Ru(,w9);ż!žšé +¾f.’£³ź¼­ ÖKÉh)æģ=Œ£EhælH-4zØlˆ/ €ę…€Cƒģ“'yIqt¶iĮ›–ä+K°n*£j÷q|®ĘcRŽ$8čŻŗ˜`h!ö*dŠ` $ly%ĀNf$Vą¬;DP°O/h‚Ż¢ūÆZę·ļ×Ä֚:šˆL„Č\ €öÉh<VŠŠvĀ€{Ł"`ą « ”o 2Ÿ ©¾ƒlŹZCö!{ĀąÓ°›»†øóȐō¤ŁŽ¤”CĄæg²ÓŠoy@h¬=ąXŽ}<œōõż÷žĖ숩  eģyW)Kę‘÷ļgųQj„ŗĻŠŽ9aĀT>rÆWKźȌųCöužŁ¦ūwdŌbäłbÄՇ³su5’Z  _?ØŖ‚@ ŻZmŽ *ų° •mÜ”˜nt£«£½=$Ä©¹™ąāčߟQõŌĪ}5L@q”—éž!·ī4&ēÆtżķźļ­\D×&’Ū£|.*Pc“nż"20¹_PŽÉD€ŁÄ‹o=ĘŃĄ` N¬³M^<Vh^Ī9č~Õo¾Õ*`Ćkx*æęŁFņ/x§¬Œ?ļ7•õµsŃü‹)¶ĶUĄī›V0•Ų=¢Ūfé Q€o€M…€m °“•äGq‰žhzf¦ž <>ÖYø³Å”}$ Ųščp¼.8Ž‚ü9Č!y¹‚©Īöū˜¬ōEŁ`(ˆpĢŖ!ĄėCö±ś’,tģŸ€2œ‘O»É’f“q_Yvx)Cūj̬±¹óå-¼ļl›W€3‚$ڦ©91 SĻӈŻĆ¬ĀdāĶ ‰> Čt6d9qžqūo0 éK 2‰ā]ķ9aķ}"²!ÅŠvDŚģCSĀßÜufJų!žō›i¼ŌS‘~Ȭ…_"~{K§O`‰aWi3 ²œBo„ĶMVŒ¦*Õ%Ģ.éĆĢĶk•°a5×WUšŪ’²˜čžĪėœ ^³;ä‚Ķ?sĖ–MVŚ Ė!ž…)®©½źüAEżę5gņ缇ķõwRž×ļžcėVī¦ņ0iŌÖĀ5×ÄĻæęxłeØÆ‡Żw‡Š ج„Ķ›aKŖ”‰ĢįĪEńˆzŌĻŗĆ0ŻčFWFWLŽ-ś÷Uāļ«7£~Č»£|ŗ‘9œzyå^źGŻøóQüĄ™œö&^”Wƒcx’X÷Ō™Øóü%”‚TFĖP”ń]±÷³ćNB Óp2ČÉ®‡ū”čäĘøƒ…Ł®’#–j›ųm‹›ūf/‡ü;؍š ż÷up̃„`qß=9Ł!’c°vø„¬6XōDņAĒź[(S•”ńų!:%Ɛ@ö»¾’ŽČõ ė•˜ČmRDaņ ‘ŽØ•(DŠlgč  å#s“D‡¾ŃłiN!ĒŌ N“‚×*ŪĮŖ«‚ƒ!ō°z‰ä^Ɖt }~d£a 1ējŸĮžĪ>,o°P(ńäį]°Ćõ¶ IDAT_tßÕåN~7Ą7õ@ok4ĮnE×»Ķ=¤'¢HCŖÖĖ Ć‹t¦dļaT °ŲéH(rāLq ‚ Šō˜R l)°#ŅHć Æ{ī)Ży4žOéŪ=µ“W}Ä£R·“M­1¾K|k2ŗŚźBĶL‰HüN¤ś~čd┸/Ć@&N™^æOƖ®)“ĻG7ĪŌ83śczbæ“téLM®/¢JŒŅėMĪņzהtß^d^jňÕß&”4åŃńO$’žjäųėyOÓųĄŠpĄC·0)ĶlśŪ U_ĆՅ=˜sī5LńśyŖø÷ŌĀĄNgšē&’¹&҉ś»©¹łČ`ņŸSˆĢ)DR™<Ż?UkæTµžn‡’–że›ņļ&’’~żå9QJĘd²}Y\x!ÅĻæęŲfŲsO˜>Ž|¾ūN‰‘lÜ3f€šŌSšŸ’ĄOĄ%—@~~F§¾Ŗš“|ŽŠTf[Āža˜% Ņ’=łčĒł˜„Ć Ŗ7‡7ĻbI8„8¬€Żzk¼ˆ°ä>ńĄh JĀ+6łĻĒu¬qæ5~]™dW*Ķg$ݦéūŁf d÷yeÜšW„– $™ =ėgՇ–Göd›ŅŁEł”õ5ż]ŠŅ}»¶ńF Ž”ų½’°š Į† SŁ«x V"įoÜŽUߚȭŒ\·š×ˆ>‹„` „d €n°š†ēõ#³Mõ‡¶«óļčth]ŌTź’‹÷įó4śś4ƒ÷ރ½÷†Ūo‡ŪnSó<…`äHXģj;pļ½°óĪpłåŠ£‡ŹųįUB0c†*#8žxČĶ…ƒ‚U«š=ü:ąV`!Ź‹©–īR€ntčø6€nģ‰J‹~UćŸOōo²č£("õVūœŚÆN“Ž œ2ĖK—Ŗ•z¢2,NŒĪ/G9Ŗ>‹"Æ ØįD˜Ī¹‰ Ōwö̶ޱmƒlŸ«،•%؇Q JPé”T“֖ä?€ńåro÷€ ŖÆŗŠžZī—v¬@h<Ł£„æŒæUEÆē& ęgœ“SŲ·źyŸŠüŲĘłxr|lŻ äŌKłSƼŁļ8*ź7óP&%čP×kDµgY4R•€*  …€P4 QšG£ł+Æ4YŪiϵ³…ƒ¶jļ—-©o²}†$ZOōAÆa!³I釄?ĶʆGŻĻKYŚ)½Ņ“~hJü’:’źošF8ÄIRŅ÷³8äģ[„äzČ×¢D9įK{Žu|6m"­«į&ŁxGWä’#9+äGś²Hõ‡ńwGāŸģķnŽų·Eŗ?“_­²śŹo>F›÷"‡dJžAeĢ™&(‚ØyBØ“’Äu×®…ÆæŽĶŪn;õwŚ4Eųo¼¾łFe\pĶaŠs¬C=‰ƒt—t£@ē/ƒPä2™ą Łōö8”_4TśžéĄµ(óÄÖ 7ŠlŸŹ˜‰źā°UO¦ckŚŠŲæ-vÖ³'<ś(<š€z@Ų~…%CPēŻõ½o B™ˆĖpD€i)«Æįy`·eš$’R©L9„¼ŸńpĮ‹o—4&ŗæ¹Ńż-ø”że„ĒPÆMŻĻ©£¦ó­ŪĄ·'²£”ģŠŚą§żofŻ-k…˜µ~›Ėa>’QhĢ5‘»œmĮQ¢ą”$8ßē±N%½‘ė£Zć酀TF~S„€ļ`O ö“€”¶Dø®Q2uÖM!ģ™ĆŽ":\ŽĄ¢Är³'ū˜l%¬ ŲZęä¶J„8ĀĆĮŗn‰®SdĮ×B²Įīšś~k^ĮŸ.bųb‹Ó—mĮtÖ÷øų b\!GiPXo±reĖWy«RŠž1 —ōŻKZ#@ū‰ZpjĆr½tä8pˆÖdB¤CkÉ{ĘĒé`’ßxÜ$d?beöŽgKų”i=ŗA_g‘ž8äAiožŻø†“Ŗ7s*D‡ų§ł5xżČė`ęŻYY½… ,›¾ŗĮ÷…E¼ųÓx¹„’ö"žŠu¢ž3śKÄņňļ?Ćųc6ū++ƒūcįœs`ęL5š ={Ā’%M·wÆĄŪo«Ņ q š_”°•X«ŻųŸFg QĄ1ØČ²ż‰ˆ’eGu#9Ŗ¶|`(²ŌĘūßŲõ ¾Å”ŖQB@„Ž4ąpZlƑGĀ“Oа|yl¾®ĆĉšųćPŽvߥ<”°E–·¢²:- M$‘īÜŁS­–³€ŃR2ĮµjƒÜWŠ—i&³ÕńHģ0äŻaØāE¢”K7?ź¾Xt§är{¹¶3k¹‡ĄėüĄ²č˜BŅĖ–ü>ŗźśŽ8ljž»±m“@H- €tŹJz«Ļk}B6@‰‰,)@&+ H)ōPĮU‹ćéŒ,Ž×ä°|˜7—±Ś’ˆ B@ždOg->v<Ž3ų‹G™j" ¦Ņ䔏Āü×ɐZ¾ŸIĪ~%lŖüß¼PŌCĄB›Ėɹ‚途è]uĪŪąe¦³Mµ‹ŌļbPXdp?’‚tSWÕ0ßYޜy (1ĄT'Ü¢ģČZPoE4JŸIŁ@kE7|Ķ”]E"+g’¶DGõ– rmKšĻ!śž“9هf æ;ŹßR?h{Ņ)ˆ‚©ßoÆfĮ¬KX'mDBżŃ?(=źwT4GüŻÆÆø‹·ˆf‹†s>3õµ¶'ń‡äŠ<ńƧćˆ²”76¬Düš_ņ„äØlö[V?ž=W^ =¤ę*Å?qŻd¢@0u®œœ¬ŗ Beō¢ `ŗŃ®‚Ī0ügō難¦c]’/됳łåCCEõnęÓöäß Źā8uS-BetÄwIhͼ^øė.xżuxųa3VƎ-ĻĶ…ķ·‡Ļ>ƒ!CZw² †j_@ǽ_é!B¤$Lv zļÉ}hĢ"6Æ ų[Žķw|Lf«{[·A Ą×QZ[Ē+ØLйcŌ O<ępNāńœäŲčł®ķ¹ ū7ńœ‘p=ėė©EĶmA¦<„2 %ģ1Ū1 ,é $1 ܦ;[£ĄœBd ŒšJ9‹Ó.ōšÕ"8ņKĮżĪžhRå†?éĻAz QW Ł|ä5‘ĒœēåĻ,Ø­”œüfˆ/j]ŪVȱŗ* BĄÖ5Ē7’ūĻ…%8³|š·ŁW±éL»ēsR5'°`ń[˜—‰y`*Ah̰35„x3ĮL !fŖ–h,čLé !µ”\sēŚģµM“MĶ™Ōu5$3ÖĖdr¶Ofŗ×#¾¤ē蜯F}Īw"Ó:~·a_JÓ¾$ę}†™hą—®®?‰4oäĶ›ł"žł÷FĪ·R SæÜl’rvõĶB~›ģ^?Ņ™—Õ¢ˆæ0°S‘’d÷Ķ\JØóOeīé ž Ņü„"’õ­ŒśgkņMž’”rāēåHÓ³)QXØĘ\Źčoą@8å”äD’ĻOœ——GŸ|B¦ČAæzFĻ½Ū °Ż s2^”¢Õ/ RˆŽžuRwæ¾Nŗu7ÜŠPÄgQ‘ńŽBŹXegą>TjU5ķ›Zåd9ģÖ܊©0l<ó ōī­L’ęĻoŗNm­JS{üqøūn8ńĦ듽PŸU—{eź °įĻXĄÅžĖ¹Y˜l7šUćĘłYéZ¾ö¾Ŗ-¼ˆj‚ēūžĖ éĪėKŁŁŽ4š}JŻĻÅū\ØĘ‰+?Į[qY Ł»n3‹^½œ³sź% -) €˜?€», H’- Čé”ö•iF@­G™qśM”r<œĮl²Œ]Ø6-nąæGäó;Æśƒ ¶Ā┹6‹}žXĮ|F¾ąZgaųŪWVB8Q»Ęs‚W{Ąjw  “·ĪRAžqEľ§m‘ÖßøĻ6ˆōCę)žŠŌÅß} | {ųŽüó«Ļ¹Šźk9”ų M£żnŌ¾d”‰Älŗ<•PŚŅˆ?•Ź,Ż?釶K÷_Üüjh.źļ` Č'k¶]ł„;}Ó&˜=®¾fĶŹN0 8żtexžłźõż÷gs&qjģܝŠ’itĘćU¢\Ü¢"R+P÷I§IHpŻ.ĶAś¢•Ż“­0|8Ć¢Eķr|ņč üÕ=ĄyV¶×Uåä›-Ī:K¹ČĪ™GÕ|ŸŁåĖįÜs[r¤”(Bµ¢ÉCżīŗŒŁł˜÷P”/MXĒi˜(L™‹_š”äĢóčÜöē½°ē¦xž{ƒģÆ¢Ō{4{޹7ę-°ģi&ćŌżĆ»šĪ›¶Åm@Æ`ÆżēN=é^NwĶmQéż µĢ [!Ąćąt(JśZ¢+O)x}Ļ"vΉpŌU[œņqˆEŽĘŖ?‡kœFŌKDJŹ—Öņ0š2$¢ŗ8ś° ĘuJĀļƅ<Ōą ƒĘ1Ć4®"j`hK¾š×Ą»ÅуV'śĘ4Z'ø½œ}µZ€lE¬$ģ0Y)V…‘ó8‹ œHQBRڸ̽žóOD ų6‚o 5¶Oģž¼lÉ{^„Ó^d–hTł®‚d"Œ;}æĶ‰>dLö!žš7‡lHæ×‹Ä›|lI?¤Oń‡ÄßmźżbŸt>kæż’"²mv|l:»]0)ęK’ˆ®Lü”}ÓżwŹ’ųCj£?7Ę8ž=sė×£[Vęę Č»mĒ:+Ży'|ńģµWS¢Ÿ›«¦Ķ››īCÓą/Ė‚Ļ?‡3ĪPm³@O”PˆŹĄģRćÆnt£3ŠYśś7ĄQĄ3(BW䚒H}“ļ n^„ĄŪض~qšx”Ź:i\|q» žŠs*Q¾ķŃ*0(iɆC†ØŚž3hxČ!ŖVķŃG[r¤”š¢>¹tA¢¾¤očd8ƃ@7ʁt‹ā_Ü(e|ŗ¾į4ąė1 _ĪĪfÆ =³žÄ&€£§³xńtö©¬¤t—ĖŌš2r/`i …€LŹ:S€¦ķ!&8Y>‰ć™,}’ó Pß§~¢±ŠŸŪö’Ł;ļ0)Ŗ¬’Ŗ:M†$ˆQ1‹ŗ²f]Å]]0}Š®®#Ę5猺0¬Š"AEPQ J”œ&§žNuæ?N×t˜ź™īžž¤ó>O=ÓÕ]}»¦CŻū¾ēœ÷˜¦żcŠč`Ąśļ<¼ķJCyjäqÓ'Ą,M·QŪGĆP,6#–Ój˜ÜŪĘōA^Ņa„yŒN;ČΈ}syc…—ē—»åæŽG €Ō” ŌŽå…įVč鱞ž:ɊŖ rļē<}’&,Śßh(:h„\ė|—ĖÓyŅs Æūņ­(RĆh*Ē’x‘ŒOB-¹Æ'-‘®чˆĻ[/Įž>‰£µBŽ×=ĮžŃ‡k„]t¶‹ńw²³„4~0zóyÅeü~|¼d¢?`Eść!ü'釸SürĮq¦”F]̧o=Į]sņ»ņ±ł˜ķwłP®ßčÖLüAR&”õFż£±½1„5ˆ.]$õ?? _]7Ņo V÷Æ_ŸČ«Z":ÓņLķhG £„+ģj€O[ųŚ4äĀua i€ģl˜8Qś¢¾ņŠōH-+–U«ą»ļąƒšōÜN6ļ#ksÓ U²ƒŃUljć–[ OɒčŠA&Ø=÷„nŻd’™:®»N޳CC&!³žĢ¼ÆU¦Ō&Ś*0x;BX5Ž£•Į Č1›“³=YT³Ž#€} ?“īĖEšĪeŠM)žBd„įÓÜżųū>A2æa6öŖBŽ"h"ØŁ¹oäcDÄŻ@„ĢēŽB• P¾Ž]Y<ü6¢–‘H¦,Bž ±:@°u`Z…3ņu’@ĢARcbeč!@ÓaŅØ®pž÷:u¬”ŅŅQ=!×EČcĮ«1ŃmąuŌ×p! ³ §]欌sҘęō£¼9&ƒWWō;»*ä÷œå‚«vqiŒųŃͦhBRŸ©Ķ0‘®E.Ž}>4æ-e¢@ Ų?£Gö÷<©łĒŠÉA‘©qkŚ}œ„ąšĄhV5ŌĮ ­Įń?Ü`1c½DÉ=ÄIšć8“tv~ĻŖ8E~‚§aĒĻ *¤/ćšÜ›Xeäņŗ~9ļW÷Øæ¤#ĀÉEł”aŅń§ų[!ŗ¶æԌ›ĄĮ=÷įŹģl’Lš?ĶUĆļoFā©©ó7‰"ä?VkæhŒˆqÜ»«Ńj*pyimn·*‡ć›o$+Õ, 0Ń©ųż²n G~¾¤ż76äÜÓe`¶ŚõW;ŚŃhi ‰Įtį0?ūĖ_¤·jE…¤Æ÷]č1Ŗ«”’&tą$“£Š!`2ė°XhōX›7Ƅ šōÓBņKK…ųÆ\ ›6„āė…Žüꦄh«@‰]Ķžƒ%ØŅt.ß÷ię¬ū7'ŗK™¦)ś)Å *Ą QĆVé:÷ķw uīZLm|Ÿ }4Æöæ*h`g/ĒsˆæŠū 3Ēܹ cŹX>ĶīČĶ'O¬ ĄŌACeŪĄ¼ŃQ`^'TØT ±Źz„“®ū9Ģ\ź(ź 8oqßĒj!ø·āZ4)·Q°ō‡ >1›o:ƒ‹i§ å ¾ž‘:§kŠ-ųtļŚ’ƒ`‰0@ēb4!B†bÕĻ~N9ŲÉh§āJ ŗ(ƒ„æltŗ‚¾a'+ńˆvÄ'8(GŌb±±¢@Ś££oę)ā¢ńš³Æs!Ÿų¶r{å |huNĶōģö÷ rnśź~vĒ ŪLP74ʱSŒƒud³Ź;€łīėń¬7±G¼öżAŲ(Ū/d¹>`<•\Œd{5~öՋx‡¹ŽÕ‘G+oåŻš,Ó­hį‡Ō“~‡+Ų~/Ņž{ąó6"ŚĮkcųż-DüŪJŗæ ³“OÉv4w%$˜¹ųžū²EćŹ+A‹©¼Ž{O<Ā«c@‚Аߣƒ“‘nG;žhµiČķØ Q0Å?|Pś¤>š€~;Ć[o‰įŹ!‡Ą–-Ķržæ"µzŪ‘¹2„„`l¤‘ßŪ7߄^½¤@ FzhĻž2AmŽÜ˜WŠ€˜|Ž“k܌x%“ų"<Ō— `¢Vø‰.”ń°€®1įŽøB%­j-’Āą@oä}XĪä¼\žæöA¶BČ`Ī5œ ¼LE„“ķ99ģūŲ °“AaēńÅU\nųyŒŲ šWgŸž8ßÅx<VB€‰XįFµ/l‘`%˜ˆLt ŻL>.€däyI߯Š÷t8@AUāÜļœŅĘĻģ`¢¦ķ@;]»ųYSķ©Ņ8÷{%]Ģņ€p8h'Ś™”#Qxē½J®3ļėÄu„“¦@Pågģ“2>&ŗ§‘6Pq‘[±ģkod6Bŗū]JoōDé@V‚@4¬hÄ#Ä?NQĄu?gź;łÖBF¼ŽžóÜÉ#*=öµ9ŠDŽ’éŪq:ßā8­35/CQ‰E•Õd1Õ?Żg‘Ü:ArŽX‰ėN“me"]“½a(;æqķ²ŲŻKć%üŠ„¤æ4DüĶh}c%Bü3b“ń3ń·B²hśt’xŽŃłxżZģ?~HגmlLš4øķ6)C=’|Ł5JÖ¤wŽßó»t‘L‚ŠŠ†­š%²žśYG¶™õW;ŚŃhŚģˆ!×ńvę™p’ż°ß~²’ĘŅ Z•NUČ4 ńŗhS$ \ÅAųłč®éLŗóy. ?&ŗKĄ®ēÄéæó•øĻ±ó”Ó£¦„H+ŀĶÅÉCŸbvōqŁ }q%×Å| /l^¶ŁŁå÷pœ!ęY@YF.‡śpü šXB@}"ŌJ,üjK”°w€Œ½+xGWR.¤4*Ŗ ĪłĮÉOŃĆŌv†ŗyTWņ™)Å÷35N·:S 81ƒ3Ņ/hŲąØ9е egepYš^{ŻZóEĆü*Ō)ÄÕRšól\cƒ# š*X\mšĮϊ7·VZ§A‡ ńˆŸ La ć>Χ€‡iįł×›Ćså×ņس{J³“bB[BfęGœ§3.E$Yįākߞ<ķ¾Œ_R0›ąƒ\°!²mž«‡ė)īŠŖ¹„ęśL5ŖüłÜbÜŹN'Ŗ±„6ņƒ¦'żŠ0ńEś!Tßq_’œNØ<Æõ¹“$ńOUŌ?Ļ]‚ć·ÆčXø™ßI° ąé§„ÜrōhŁōQńY`Ł»ŖÉąGL³æ¾E,ŖiCėÆv“#Õh‰Č@dķ;5…cځįĄP„$ģ>–¤š5Z¦ŽJBi¶–čŪWz¬wÜ!_› Ž=VŚ.[&ŽŖMŒß‡ˆŅZ¹Ų:u>8ø±'xŲa" (źrZšż3ĪįäÕW„%͇Ā#ˆ)`#Q‚_ó€-HŖĶM@ wƒĘõō¢š³×1ļ‹ć¢…į"ĄģŁhß¾ĒL‚$VÓ¹{ųó’M9×p–ņņ.2n@·sķ)Ļ 151m&yčŪQēGä÷¦ÜpŅÜzŹM÷0ČŪ[g.Ķ5ž;µ:T¢”ķÄ5ĀĘ|-ŲŃ”Rqõ'UL®}ēž‹żŪoÉ+(ą#°ž-rˆųLõķ+¾S·Ž O> ³f‰ńßż÷‡Ž+*j¼ēŅ?ž!ęĶq^+ąŃ—Ą÷„20Ū€vüiŃÜFdß#)ÜyĄk4N€8ų!Å&ł/EjŠMaįˆ ø>x.WAØVµ•BCČļč†\°@ŅÕO=U×w߅gž•C•š÷!Cą_’‚=šōœu$£'ņY»hüwM!Ž^?4rœZųƒĖ„Ė/‡#„OŒ$’ 6) ’ÅČŗŖł?ŚōÄ£i؆~¼¢w[sN= —‡"ĖŌ¦ŽWäd0fŠ ŒQĻŁ0{µ‡70Ź:/{†gb.Š4¶oå®ü/µåŚ ‰ńÕT¬EŻļ»81 <¤'Fēžņü¼®Ø¼®ØmĄ¶Øcó:”zecdĒXxfå ²rP]ŒĮ‚ü4¦®‡į‹³X™¶Č.Aŗdd…īlp žjīėpČ0<>TąÉ@„7§m؟‰aäŸ*Å­t ÓŅQiéØ\‡S]_k žš»ńeŪ0\i(WIųk&…“’|šs‡~QÉEŸWrĮŖ*’ŗ‰¦ČČU<™īÕĻ;](s‹õ¾W…m'ŖCŲė9ģ2µYgw¢¬6Ēö¼Mžr{õ"·wļŲÆŸ™Éß>ūŒ½Gެļ4“‚zī&)ŸMĻź ÉJ°;P©ŲržēpŪL¾lņ Črīä‰ĢŪyøzŽčĻ,|kˆü;Øz·8\ļņRK“G5Ļz”›jvÉļ!œü;żØš­öI™‘[%‘[-ŖäūŸåĘČŅ1ź#’Ī4”¹Õw¾Žt”7„Łe<«1ĶėŒÕó3|(3āo’’Œ,TMp³"’é9ØōEń߆ '’Ł¹Øźä?§Ŗw6†łļÜe¦ūo@ˆcÜż%’ i:ņ(s~ĪĖCŁķŠ­§6M“¬ÉŸ~‚¼R3ÖŲ”W©ćś–Ōvąč£e²Z±¢īc±L„jŪÓU÷m}ŅPšV’’0Tøp7u…€š…F8j6sū¢k¼{Żc”zż FŸ³ł}®SŠAšĘOżŽ „ W€Š^ if+äŅż.¬-ė­…;…XS įb€)ōŠa8µ,“ūż)łŽ)`~ \ų„“æ-ߍwŹƒŖ .žĶē™B€' •ą"ē½ƒĮ{Gł96͇J {čr“Ÿ×ķ’•@^ż^ „ö‘Éٚ’¶ŽJ±y›Z?h§åō”²m‡gŃ-Kć®°±>üø†«V”W ”›ÕæTsYš”Ń5ö¬[_Ćŀ¦¬He¬čŖŻ‰²?ĆXĶOæ†Ę†#3“‹gĪ$ąó±qīÜøžÓmĄ€ŗŪõĄfŠ©Ć|nß¹–¬ŅźŌ¬ Ņįµ–·š*åæ>ŲܜßńIžėŸG®U6Cƒä>Ž2ĒcLÄ'ƚ­®J®ÖŸć¼š]Ų© ’Ś¢?Ä&ü-Mś­ˆæIś=1ˆ}’āļi^āł7‰2&ńÖś°8n õ“’čūŖųu ŗÕĮa‡ĮAĮųńŅYiÅ ųõWy,Zß8žóøä8ą LŻx£÷œ<6s¦Üwžłšłēqł ”ņ Ą“£©@K8/A²@źÄg«xž}ĄmĮŪ5ĄżĮq¢”^ś7’FĢčŽ&X‹ ĢB¢ź;žš:p ˆ5¹¹pĶ5bž·d üž;,] W\_ óę‰ žĖ%]²² Ņ2ēÆQČAÜŻó‘%G!ā›,|@ā-pdcOŠÄ?Ȥ“‘!©kM€ d*Ź‘ļźfŅ4TC%b“ ‡¹č0Ė4ƒōŚ/‹"ĒjÜÕwÓĮ0ųwp×gOglēsźvˆ®µ“’ńģ§äŗ€¦Õ5Ć ‡)Äć`.ō¬Jźk"ōģ‰2KņŗS[w¢™"@xy€)lŖ]J3ń}ŸÉ}Ŗx`K L$ ė·ŻFÄ4š˜r†j”–‰5†ā]]ć]2ąĆć}ü¬æā„«Ē¢‘fŽ€–Ų¹5\–K·cwųoī{ąIO&^,ŗģ”q‹ ~¾ 6.©a¼'ŠLW« ŹĄ ;œŠAćP§ŸļkÓ’£Ū-Ä*7R3£Ø‰” TXˆŽc7_ydėV+ō;ūlöłĖ_(Ūø‘ļ~oe%¾źj~zśi–MžĢčéÓ{Zē}ō»–/ē“Ė.£jg¬„ęHdUsbÖlŽ®Ģ`†«/īĘ“Ģ|”“õm¼H śč>Žģš?^«ģĢEģ…;R/Ņīē Üü-Uć„Zī.īŁ>™åö3XźÜ·ī5źOķpéĮ÷)F»=ˆ?½?-U¼LŠ?4ģę«™CCõż Ń«é¾6ÕßĀj“”TH<Żæ¹Żż!1ā7Pr<†ć{üöt¾÷Vį!ŖĆĪ€RrŗĆb5Ż©SląŚk%hõÉ'²?i’DżĶćrs%µi“ˆO»0¼ų¢%sęˆWBŠ”„¢ą_SųCM>Zв “qt`*”ržóļĒ›÷ŽŒ¢ģą*Ģ®:yœßb½ž> <Õ܌ł=“Õ[śX 7Ø~-˜u3@„€čņ€ŅL|„™ųĢŅ€:/Œ„„3Ģ…tF ¤Ē4^ūŖ 濏kņ›CƒCuKtSĀČæ€'Ąå[ųĀKś8S¶D±m…w@H¹a§M…|Ż·mQTeŪ0¬J EˆŃ*ņ*‹ų›QĻ,ŃćĶ€ŗY޲Lųr%Šz;ī÷׿rČ„—R¼f ‡ŽDZfĮ¬Rüö8S‘ü55¼ŖŖ¤®jļ½Åõ~äȐXbtCŁHÉEcæoņy~Nć $kįóÉūpÕUņޤ5@!°YwT""T[ųž%Œ†Dˆßą–‰”ŲŅ9^iĮ‡Įߌ*–Üw}m ?ƒ ƒ7«;ęńčˆzHsžaJÕFī6ļ?"”’ŽL€–’ń 0…€:b@˜pb§hp€ŅØŲ”xŌćG}ف»KķœēäŚų¾3*5F~ķą® †Y"ąń” /z†ŠžūužŚØk̖Žźää‚°æĢņšeų1į„Ł6 ]ÄD MØ~EŲA‚.¤P€ŗ‚@}åötŒ'Z\ŗ~=ļœvsī½—}”ŽĆ‡7ō”˜Ø.,äŻQ£˜{’żœżŽ{œöā‹8āP6s½ōK_ÅŃ;֑åN¢Ą>“|m/1:łŌS1Ÿ{ōwrćŽÜV]ĶÕ+WŅõ ƒ}yKø<Ÿ÷*×UlĆ.„{4D“|s³*é0¦1U›<ŒĪÉģźnhs:ÉŽ-”»£é:y}ū¢Łlčv;{žx"ūž~:yõØļ‡]y%ϚEĪī»Ēõ’¦ū80w’Ų°‚Œ3CȂš·$éOem?ÄWß‹ų›¤æ5hśt’hņo%Ī÷æĆAµ®óAōJÓYwl³žß$ü:H€ŹÜļŁ-‚’čŚU|™>ū,ōÜšĢ““P†f“Š‚ߌŚL›5_nG;R‰–Ö"}ķī$TĻoR·Æ!ź Äų>œ,†ŚhÕGĄ!¤ŠD®™`C< Ā„—JjøCź’%Bü?üŽyGZ³³„ ^”Cpˤń2,A2GRĆ›&€Iž7#P5X» ’QÆA`<Ł·?ĮļŚł Cē4fhšå¾³z šŠæéA0³^Ә~ĶDŠĮ:ś±ł-\ŹĆ3æƒŗ{:ŸCM2=–[J€Ō†ßē܅Ķap§¹o(žš—E‘é07›…Óņø`“¾%Ž)¶3āw'{ĢrpŽ<;ó­^ēP#“ąē¢ ą×lŽ“Zų÷„,]…:zų›™±`ÓčoŽöŌń‘®ˆŚ,³¢…“9œŃPō`Ē’%(C4Į’µkÉȏÆtžŠ±c9źę›9źę›é>hPč„ųé©§xūä“9š‚ |õÕń §u.欲õtwļĀ× „Į1'5E«ĒŅ;v$³‹åCTlŪĘŪ#Gņųī»S¾u+§šÅ¾)@f9Wź“nģÄf÷ į·4ʋBUŌę™ÄŖ&všC.½”‹gάŻßwŌ(Ę-]ŠTį» Ą˜Ÿ~„øpŚ4F½öGŻt—ĻŸ#ĆŗĻÄāI“(ßŗ•qK—Ņ’üóćśóKø¼r)»{7ЀÕx”æ¹Ic£żŃõż&éoˆų×ēźowō7†ų'cšÖ6±0"A“?Ø?źoœ«GŒĄHOĒc·3 "Æ½Ė—‹@“)_~¾ˆEE”}wƐ'Ā 7Ąß’.ižę±±J:t‡#.Ą,5æå“{“£@Ėx„ć%`0!t‡b]Ö5Ų3xū.ź7īs!©’×"‹żÄ u+ŠęEŌuŽn••pņÉRē¢˜žóŸ",Y"5[«VIśuŻļS„4Ä Ō*ųiøOż‡·(ÜłßˆL˜Eˆśüǟ|‚"@2ŽĮūCnjĄ`“§D­eü”֟ ~ lDpa3;8öŗļy,ИŻõ2&”T«ADü *HGĄ¢-"ŚÖ–X“Ģė„Ź«… )T–£ą ö@£`KϘõ³į^›œ”­t°(|œX­3tF›ĖJæāB·-Ö8ŠČ@å"-ūĀZ°Ģ^AĮ|3𠹯&谏Žšˆø”*dŪBæ%ÆĶSy>D"Ū$óĮ|††üLX‰ń“4*8;ы^ĄėE·Å—Aßk芌ØsŃŖUl_(ßLM×vė­ »õV¾ŗķ6~4WÕ  c .-aƊĶģČŽ ozf|×*×ĪT>FÄõ"ųå•Wjo’ō䓜mŗŁĘ@Æ”CŁņ揾†ż`u°uŚŹŻė–ók—t ĀŪå%ēR®„žŅ†u³fqܐٵ+U;w²÷ȑčv;½Ž:ŠsęŠkčP6|ó é;Ņ÷ųćyfß})Z½ŻįĄšYŻ{+*ųxōh¾ųbžņņĖģsŚi|~ÕUxŹŹbŸ§A^\“3—Ē3s)ĢŹżĘ[Ļ‘5żšU'ĶĆ<®ŗ~ā_BdęDkū”žś~+ŌWß‘5ž]ū ŗZ/é!ž ©/āĘBdnŠõųź…hū B­^ˆ¶OEh®1"ōœĘˆĢ֛0õŁgx++)õūyĆŽgĢ€²2©Éć ŲsOøć)©Ō4čÜYD€ü|1V. *=Ė–ĮŠ”0ÅādóóşÉDēĪ!Ā-$ԃbäė°9ų·Š?x¦ķˆ--(Ä­’W$µ³ā荹ŠĮõŒ·7š‘ŻĪ–F·'’ŠŚ”aÖ7' :v„É“aŠ iųŹ+¢Ź‚“diBŲ‘„u*ښPČŗ”xx†4›ŖBž7k€­i¬b›‚¦”PhõżĆę"#“Ą)aĒ('%ęR^³hÆ"Üw%7”ø8xWIFWģ3(ņ30…€ģEŖDŒ”qBĄ!=e1K€` Vb@?—Óąs?üę§ŹŹ4Š]ކnXl#hŠ]u\ŗ¢¶_]•ĶŪiĮ”šd€ÓĶIę§PLqū­‰™)ōQŒ‰L+Åę…^քēō”œ¶Šē € • }E¼“†hX°}J¾ęēą†GJ]tQū2ņó9ćĶ7é|ĄL:ī8¶Ģ›÷xi®E -ŽĘŠE”9] /–m‹HģäŽxĘ?袋čwĪ9TlŻŹģ»ī¢Ŗ  īx.Õõ¬ģu»‘O?MĄė壋.¢ų÷śņh®½óę0v[uO§<=+1Ö>‡jB-2­°cŃ"jŠ‹ŁćŲcłķ½÷Ųó¤“Xõé§ģ{śéµĄśÆæ¦¦¬ _u5}?ž¢Õ«kÉæ3;›ĢĪ0Ź6Ö6=aɛo²qī\N~ā Ę-YĀ3ūļæžŌ½ŽUœ²aŗ7R‘‘Ūü®&JųAB¦ŅĮĪ#ę}‰~hāo’~h=Ä?:Ŗ±z”\W~ū}Ēzōš*if[fėt¢ž{£²FV§ąu¹;j·}ävæÖŻvĄ:źou\ß¾ė×Sķõņ?Ćą‚ÓUy9 ×]Ē/Į%»]:lŁ"žēŸ/)üEEł©ßå/€;ļ‘ ” hГهų|m"€©įĻ€iG;ā@K $é4$Ŗ_昚ˆĄ¢a!Q~“¼\Cd§†d<€“#|7Ł“n&č4›j÷Ü#ŠģĄbžb"7F†~żÄšé§CŹlŠ !äßAˆ¤k4Ž+d¹^Ž˜Ń¼­Ī‘d²Ł¬Ö!‚ÅŸ#śf„w ŒāwŽeŠWĮyÜŹż{M¤ōœ°ćļ½’Ė÷w ›ƒ‹{˜°_A$Ģt˶"ÄŪ9Ą*+ ĆO®Ėt)1Śø*›×źTźÜéBYõ‰=ŹŲ ńūĄP–FŪt­Ę®Į0sæĢĪä“ I©©¶~Zm;W”Ī’b¾9ęńQ‚@EĄZ„“Ģˆ ®+qø(`Ģg©ÉzŠšĶĘ%sēRøb/ @Mōnn,f·[Łfäćw4`x˜žé +΁½FŽÄęt²vĘ †Üx#Īģl>=ŗĪq]<]V=Yƒ0ü~^2„“Ÿx‚±‹1}üx¾ōRƒ’WĒ Ī_·’;÷f…ωĒꒊõæ:gr:”rBK(Ć`ŻW_Ń÷ųć)\±‚Ŗ‚V}ś)ĒMœČŒo¤×Š”|uŪm>3nø‘O?M׃āĖėÆĒļvÓļģ³õŚk€ų8<@ü7ŽŽĆ†1ķ’žÆ^ņć§»£€!;6±5½7žģÜų²ĀIæqļO5é‡ńEś!žh?Ä6õHÄŃæ„ˆ?ŌÖłG`õB“ķėŠξpł…ŪlųčoōUŠ<$AĖTkÅčlŌ4Ö¤g1?³#Ž4üiYųs»ą_öžå`L˜ZƒÄKüMpjĮ¼ÅŏĻäæ’.>JŃčÓG2ŹĖ„,u芊c“&‰aõ…Š€šŻwā%ąvĖsb ę×’¼ó`ófé…¤žoB‚}›IM'Ŗv“ćƒÖ @ŒŽ¢aXLE„‚G_]ó³(šßƒūĄ8ąæQcä ¢Ą™H P­) Œk×BEEØE‹¦‰R{ērQž;† ³Ī‚ƇšQqĻ: ʍkģ«£#ß3©Ė0Ķ €Wż K nØ@ŅžW·-„Ģ’ž“Hu6#P÷LįNåēm`7o1ß,æ’ńĻõēĒŅÕōõÕš/fˆTŁl\{ū3L›)k+B@¬‚ŠpVĄV/;V:9gp G»\x³ĀVū•åaē•ü_#ĀjZ¹‹‚NīP›ØŠēūøc¾ƒ_ĀĻ{Ÿ½5›śiP¾ĢÅÆ*¼LBbĄ E]ćšąŻj—āķX„±^.֐@–Ō+ 詹&učӇōNpå䐯£Ż ¢xĶĖ4pšŽØQżž{(Ķ+Aäśčę­¢wåNVv­¢gģ,g 6­œ±ńŒ[²v-“Ļ>e~?GŻt“åqūŸy&óŸ}¶Ž±ün7S’łOÖ͜ɩĻ?ĻŽ§žŹ§cĘP]O?0§Av÷õ\øc)vĀ®Œ¬®ĒœĻaėfĶbŲ­·R“z5«§NeĶō霳öŪģ5r$ŸÆ6[įē^`篿rʤI\šÉ'¼}ņÉ,~żuæžz1s{÷ęœ÷ßĒ‘‘Į«C†PøŅ*I2е’6nćū.;(öę°ŠžGGł›ƒōCĖEū!¾V~ń‡äZśµ³’·SŠ7,G’üv/ŁĮč@€S•ā`źÉvTŠŚÕbe T–°Q׳ŚįąE,ŽžNõņåŌüō¾Ć'Ą„ČėaCäą®»0]Ž˜pO.Øļ9€¬3AJS£v^]¶hōī¹’ā‹"€x<ū,\}µ”XåČģwDŲE{ōæķˆ@kāĮ8 ?ŅĆ{šiŠ́ÆēCdj(p R3n ¬[KŌsH‚ģiÕf°9»Ų/N<ł$ģæ?y¤ŌT½’>{,Ü|3¼ü²øą;0ožōe=ąøą)°Ūř5I˜½Võą–ŖhXxĄ$£ćB>- 7²¶Xü†| ‘ɧ]yNa6ĄĻņīŻcŁÅķ($ĄĢ]Kź ēÓm\{ūs¼ użźCØDż ~!`ŁrœeŪÉrœų_Õ'@r> e¬šņCC^XˆÅA!`½ŠŠūœ÷čŠ!¹šÕ‰> :Æ|e“Ö¬N;½Ģ_ƒĒù|ĄŹ?ę‹k®i0ņŽ\/{¹+éS² ÷Ęc ©ŽņCó‘~hŚś~HŽų'r¼ +āæz!ڼ©ŲŽū‡y*¹E)N$łĒކĮ%—x<üVVĘLݰ‹ŅėØīŗ OæsL>'>RÖįĒ Ąģ^AÖäMZźā]eĀ0„üĒ@ !ņæ"x»=śßŽvD”- [–·Ēo÷>¦€§Q—¬_¼˜6»e›i©ūw¤Vō¼2Q7ĄÉ4œ„Š0»ŌŠ@śa}0 øā ¹żüó0x0zØŌi™šz„딇ąēŸå˜śµ¼Kõ…7@Č `50i¹GŠ_'ø‘l•UˆļÄ Bµ’~Ś'ŸZ¤2`Ā Løw撁1 ¼ v®ŗå~ŽØŁqˆų/ Ā IDATÉBhqųėl:ķ*a˜2®ż4ŲG)ŗ¼&|§Jƒõh¬ÖtéNfw9ŒEł]C4³1>ń”D‹įb‰įYŸĀS§V³6Ķąf-ø0TļƒOŠ3ĄQ"•Z=¦Li>Ō/‡Ū4N3ļóč<œ–†ŠU*PūÜF »l¬E€lÓ`0@Æś^ĻÄōńć#ö×L›ĘšiÓj÷?7ŽĻSŠ/Ņ *@Ƈ\£ ›ĆY¾+T–‘ ŸĻ²æżš;ī`įK/ExäōģIn° ^šYü‹”;Œ˜0#oø7ŽČĻĻ?ßąėfūéęÜÉįėŲ\ŃO·NŌuß ĻźpļÓOÅš‰Fé† ”¬]K—`ŪĻrÉYõ駜ōųć|fNˆĻAĄć”jēN®\k«Ÿ²™vĶ5üśĪ;ń¼|rt0<ģUVĢb­‚o7łµVŅ‘Ä?^Ņ §łCė!žV«¢żöś;²GńvQŠSImłPƱъ ĘŲjxŲ_Ćwž JŖPyī|“'Ē,ZūZ`DŹs[>ä£^,C¦Ģdjjž·£ahKČł’‚·_.Jƒ?Ž:օ˜Ä™+§ąĄ§Įż³ĆĄŻ;€h=ńvĄģÅt1-#˜I]};˜ŻcĘĄ%—D’’>}D6 ʏ‡§ž’“­Ąƒ¬7̶+©&Ą~Äća;b$y?p„Z…5#*‘z³•Ą"DŲ€|3O>u‘@6„„«l€;žēƒ7īęÓ-Ūah€†×fgĮ>O±BŽČįžX6@¢BĄņ„8wžĪ†ĮE Ž',’懐© ?Šž*Ą™†¶Ķ”p›ĪūNoīwµ1Ęų@ģņ€¤Ä€Ø¬€Æs˜ L=¢ˆ½²}bSģ^£33ƇŖv Õ8ŲįšÖ¾{÷Õq­3ź8ŠĆIZ¦Æ¶,|żš…²Ģ®õ¼@ā‚Ō-€śE:}zŠ29-Łg7YŲšaŠ1ą&Ƥg¶—«H¹Ļ‹ęō&ļü}O?ž‡ĪĒ_q’ŒnØslV·nœõĪ;äōģÉkGŎ8Õj ČÆą˜m…|ße;EŽ®ųjó(bŸDB°ėfĶĀępŌf;¬śōSNyöŁŚ €īrї_²už|:ī½7;—.eė|ĖŽš”¬[GÉŗu ¼zi6‡‡}ŖŹČ//cSŸµ/į‡Ę‘~Ø[×Mķ‡Ōū™h,ń·ŖóŸõ_ģ’{†ś|܋”µ6ö ųx%ąć#ĆĶ#;ķl3‡ŅcŽĮóĶ7u…X ņo"<³ ø™’nYBų™./E€Ķ„Z’µtf("– ~F8ĘÜ=£vü©ŃÖĆŅæ8‰‡£²ęÜ’i·>ģ˜·€¾ˆ‘\4f"™ą“Tx‚0•Ö5¤@šūaåJČɑ}› žļ’Ä$pī\čß6lhģ«D Š`71š¦õŠ"T¶Yß=œ‹®ęų~H«™ĶČ÷p°„ČŌ’vņ_āÉ€†Ėž1/0˜1%”ŸB]’bł¬[ŽkĆ .7ćQQ ‰#ƒ«¼n®Z:…™6ų+µ¶ī‰ų@żY[ H¶DąĒN¬!˜®ļ6ó”–f²rˆ‡ĶšĘīdõņrي<ŽZŠ”°ķ[Å3HŠ)Jį.UüĖ;ŗ«€‰¦ĄZšÖ y”ēū:Ōøqł¼hV@śsģ¢£Å ƙĶȧžbÖ-·P¹=VE^šĘE_~É®+xwŌ(¼ur1źEž=7”Ń»¼€õ½x¬€Ź°ŪYnś&2žOO=±_±mS‚¶/ZÄ»£F‘æļ¾øKJX3mZĢ6€E¶Ÿ^åÕt޾–“ü}Øq„£!üŪ½dāƒH#Sü!±h?`éN™(ń7Ķż’A,āRė’ĪCä¬Yij†Į¹I¾D¢Š³}>’*+cń’%õļūœsšO˜€Ŗ‡ų‡Ć*s=)X«&”5Ųbd ¶–ÖÓzł `2”5ép`6šO¤Œ¢ķhv“Uą;$åčq$+ 'oŠŽæ‚t°š£Ę%dC­kõCĄ÷Č|ŌpŸ”¦)üœšŠÆ»Ž|N<öŪņņ¤<ąw$CąŌSÅ`Ū6ń häŗ¤YKUŹH5 $Ā^J(cƒ8ļ’ā«OMndņŪ‚L<¦ź¼łß«ᣄ•ē֏$³‚·­M‘nŃcÄŹ€Äż RųścŽSžRŖ^Nž,Nų8~éŽĶĪåß{œŗöÅć±Ė iK T&°½<:¦)žp*īYJē]^ž9‹­C«8؃Ÿ ˆ €ī\čĀ2jŠŠü‚H{5gŲļÜåC3Ąß3:NŻO¶QŽ#ė–‡ģL]ŻļČ'Ÿ¤rĒŠVƦļńĒ°å§Ÿ¬É½Rü÷”SØŲ¶­īcq ĖO®×ƞ……,éTB™ŹĪKaż‚įŻtHäs,“č`°ā£B;J±e޼„Ś3& G€\旮5d8k(KėßœlĖ>‰¦ųCrNžŠ“ižqõƏųƒDž_Ÿ@§M+łX©ZƒÓęDß@€—•ā6ĆąŪM›(øėm*ļŗ+nĻ+3S†o x)»NźLŸ:‡ŠąėÆC0‹õX”5XK¢3l“óā¤cŁKH¶rż®§ķhG ­ Bż«ƒŠ€›҆ĢQׂŀ9·Ł‘¦“€£‰ß„č|“…)|¼Żč𰯾‚3Ą… ÅōÆØĪ>|PZ­Ģ™#ǜ>üå/I›I{‘‰”YZ™išMA†MŅ_Š\ģkįa#āåpŅŖ„äoA²Ģ~ nkƒ÷›—Zś*ü7ÄYä]D1ę'ˆAłÓČł:ævüIŃV€htB¶‘ĮżµHŹ<…].`ö¤žuŪ£¶L…u3ra;(ƒVUI ĄÉ“„%ąSOI»æŖ*fĶ‚Ü\X½Ž9¢Ģ‹ćE%"“Ų„’,̉Čt{­FÖ2;‘Aˆ7@WÄŲ1Q‚c"ī·;a-¹Öšt|“¼źÜ¦Ń“Ąąc8T}eĮcź`DBĄāétö–ó?*9jz(:énū‘{K¶óŠ~G֍ģ%š°eŚ.{¤W@SŠnPÓÜx¼_]Š;Pt±8=OćĪŁł¼äńYµÆ[[*/ĀKĀW‚$& ("ŒF—€4;j4Š44„pĄę+G#'쀠Ižņ±{¼ĄÜ‰#ö·Ģ›ĒóÉt¶kŁ2žŚ³łøč@š—ž~* pQI«~€¶šČŠÜj7é>oä÷4V”?ƒSū”NSåF“ž¢żš4hzāoāµ;Hß“’÷[˜ü›Č2 īnęٶ8^Ą Ą˜·+‘ˆü Ą”¤Öץ|mw"’ĖÓåMČ·ŃĄł75öBĪćzBY°ė‘ģ¶o€L€mH c;ŚŃ,ų#¹ˆ”FŸąžgˆi_iĻ=ń0» LBR’[ Ģ €jÄä0%€Ē#äÄąŅKįøć gOxģ14HŽńū”‹Õ’<¾ó. D–ĶŽCM}16{ŌV_Æ2xfzŲ|ĤfÄ->鮹$r‘§ĀĘŖ!”ÉPüĢ“’Į±w ’!ž-]oöĒ@3–ļ7«ƒ1:ü:Žž*¦Q?Ēn*č6Ŗ7°[ ˆėśž†ßŖ ÄéŠՓŲ^ +Ø["D€DĀY&õ·óA×jN³Ć 6EO„†Ę/[m¼µ ø‰(6/q …‹¼ @” ¼N”ĻĘ&›æéŪc„•f'eÓ1|”'œ óšœF“š•5)rŖÜtŖ.!­ŗ‚ —«®`ėLCykŠP•l¶–†te”ĄAeÓ„öCćH?“\“BĘ~MMüW/DŪ>mĮtUŖ6čŌŠøĢFń2¬0ÅČ:p>²ÖŽ Ö%ósRČ׳48f²öZƒLok‘u™¹ÖlÉŅĖnHWŖaČŗÓ\ĒļŠ:nŅal²‚”NŌmd܎v4ž@BŽÆEÜü$¾žeHŻ ¹`Ż€¤ā€xōƒŗ­ĆZB,?®"Å)U7Ż$&€sęČžčŃpß}ŠÆTVĀ'ŸĄ!‡Ą¢E ž"obl^lM_…,U¶#ćīČŗ ĀrĻ; É °‡SƒLdȚ©Y˘Ū.B%MÕéąODL”žn¼0"*`ńt:×Tņ…Ö2äæv;—/-ĮæņQžuĄ_ń÷Ž Õ‰•$’$,üę§ź7'ļmČŚ ҃7‹Ć…ŹJLāžJAźˆžj“œ:ϲ†Ó…r;YćØÓ× õ£Ü†B@įSŠ€ŻQ÷šęó 9™MYėŅ”°+2ń“G®L„ģĒ:VŁźv|l+š‰¬m7|č•Č$–‘… 'śm‰ōƒu“š×Ń#ž óĒź…h'r†a0&ü±ģl ¶ųż°s'Ō4ō”4 zcG‘Æ…ŸÄLŒM @df²öŚ Ąģ…L¹ČśŪNdĘ\GłŹ\ƕYz¹ łjl'ä¹Ō\ėĢXŲ)6[Ą†—IŠˆ!įŲ‚™‡¬E?ŽDžæv“£IńG@TĖÉÄ×ŖĻ <‰\č@ę©s9aĒ܆ƒ‘‹LKB!Ó]H Ń5©\×ÅšĻÄøqšŪošćpŌQāšä“н»”ĉB䢼9xŽÕ4’EŁnęddN"›µ;/ų7 Ij Ļ0'ŸD|©DD3 @~” jÜYˆ gbąFäbōp^źN3i˜éXog*Yh4ž~n¼¦N…ŅRi8`¬YƒĆsĻĮŻw'DžMgüM„ź±Z² ‹)ų‘I¢"xNiHpŃÜ„&3{Ą|޹y‚›ł˜9vsĆ$ūzp³!æegšÆYnažßęÄhŽ×f…DL!~HĢ(p}!+éēŪjžĆ» łmŁ’ų’`&@ų¹±Yį%M-@&‚ čŚo.AĄ„) X‰^ŖüPuÜBµ®’3‘;åŁg)ݰy$öytčĄß¦NeŃ믳čÕW“y™( ĄŽ†;eé9ŌØlŒč¹ĆƒRz­Yn›ƒ_” Ņ“¶čŚų:Ēv`µ«ø¾#Z'<x4ü6šŪōŲ©ÜéQæ»hĀĶKś7ŠöĒBcˆS“ó³ĀˆØsüč#lė×s+zF~>|÷œ~:tķ W_ Ó¦Įȑ!`L0g \ŠuØØīM³gĖ}6œ{®tzņzańbéčT\ ™™’iPX(ϳ€œ¬D‚¦”r¢†Ęį3Šofä!—ē\DČDÖbę B˜źąė—*Ć, īW2[n k™ĪˆŁzÄxŗÉŲ}1? xé>YĄÄ°?Rš| ÄŻ‘”ķH  AČ÷ąžŪĄa5”!?P'rńz¢9O°(äB·i}ų)rŸ8Q&„I“`Ō(¹oĶčÖ >ś¦L‘īqĀ Dž× ŽųĶa”Ś63#Ą†Lxv"£čęÄNšĶ-œD77ōąłeG#ś#QčĪDķT#Ŗū&¤¦ģĒąf–c““ˆŃ($[¼m>x’󣔊Lį“‚ÓžÅ±?Ę·æŻŠŪSŲŠį a’ŻĻĆaĻbéśéÓ4ly=yīי «ŹaKļ½"mę¢9ž¬H_$.@ņŁPæ ąŖSą!šlü,U]©Ŗvņc–‡c“/«kW<åå1ĻģŚ•ŃÓ§ÓqÆøĶųÄųtü6ØpŲ)qdĒ6Č č¶ÅŚxøu`7ŗĆ‰²ņq0Q:œåĘzÜŗŖ­Fi(“£ųŌ8ĄŽŚ°¾“~° üi‘7%éOe“Wßo>Æ1Ä$ś?e Ż ƒ+¬ž“Ÿ;v@I‰lW_-Y—<ņóaåŹČēååAF”cÅŗ.däHųōS!ł—_.kŗ™3aÅ Ų}w9vófxā ŁŒČ@Oł7Ų‰mÉG×͵RBč+¬Šōą–F(ūŅ ĄµIx¦&øy‚ūęZ®5¬]z"¦ć?÷!Ōž¼8)į=É<Ž<`1Ī›HĘ=ˆAą+Ąßiłµs;ž ų³W õżNä¢r;ÖfCķbķqĜ£5ĄL«*fSæ¤d`%F€ö°o‚Ó)ÄÓ&ø"lŗJK“ ¦:vܧ¹ø­Bҽ iŁčæĢs1'؛>o éżvąąRd"ÉląyHżŁ^„¾ÓUĄ·Ÿż&ø^ĘŠš>§†‘`Y4Ž(šįļÉPŠ’Äsz.Gī{9ß-‹~•ĘcļgPQ]·LŠį¢Kܽģ®ļ½„ƒGŌżLćÉ €ÄKĄŚ/"ÅA \ ļ&Ė€ˆšˆ‚ē$/ ¤e \ńēņyVAr@}ČČĻēҹsY’õ×|©ĖÄßäDiąÖmŚ]”åwĮ«>>ą`Cƒä­nü†=źŗn%µøģŽ>Ōųl,sł9“™N1%(p 4šh:å†OfFzŹ*­źņCː~h<ńO© ž&&MĀ^PČU`-"åēCAAä}ļæ/[~¾DģĶæŃĻƒŠż—_.ŁC‡J M į…’-pŹ)’źpĄCuWĆĒ Ż ā$ŪÖ8<ަŁĢ\41ZŌ±ęķ”õIx ¦µą-D01Ė…wD=īE‚/‘ĄĶżˆō;cŻ‹ˆ—£ƒcŽžņ3nG;ųć .„ų_Ü߅¤ōcqlGąįąķĄ]M}r Ā4,@Ģ ÷öMÕąž°KūO@0dōī 'Ÿ,ŪŃGĆ[oĮ?’i9D%ņ¾­BŅĒĀ[É“VØØæ­ ’÷Wd8°‘će"ie§ üī%¤­idŲZźčB¼eŠxµƒ u©Åįūž‹{]ƒ¦él)œĖ׋Ēsś2æ:ņ}*ŻŪłäĒózĄ]”.åČżo”°|9óVLä„Cžįż9'’ēū’挣¤r N{'ņ }»Ÿ‚?PĶ+&3­ ½: `ŌŠ„Ć~\ł  By”¹»qŽ–Åūó'ómמT›~VHe‰DŠ[6 …ÆģM1š7;ā v–$. äu$°|oęä±##@·xž MÓ|Ķ5ō1‚¢U«˜s’żųŖŖp3}üxVOŹŲ%©1vė°Õ‰rŻĪgÅ9¹,»Ō Ŗ³XŁķńŹl(4hxQų½^”LJrÅ8ŽįEU„3ĒUŃvlw`(j›NQŗ“j—'Hžƒh(Ź©'żŠp]?$Oś[ßP|ķT€»g£Ķł—įgt¬cņóałņČū̟u§Nń ×]/½IžA=™™ž.ežŪ¶Į+ÆĄĮĆ?ža)ģ†ao@ÖĶf‡£Ę® Ā0±¼‹ˆzč€LkĆåH°Š4ž;1&G pā Šx ™g[Œ7)ó=¬~•ķhGjšGvCźhŽī’‚üc™ś=HȬ㠄¼¶&˜)ģeѾ9ēŻź{R¢3.ŗHŚĪ›'å?üß~ ÷ßó£=Lnd¢Xü†“d)D.z­łĀŻZ”!Ŗx?ą9ąØ&x½‘TµŃH˚ˆŃN”Ņ€6…¦öŲ1L ®Œ/7³#zˆ¾?ƒ²źtČģ‹Ē_ĪņMļŠ3Ė6¾MeĶv:ēÄ!{^ÉÜßī “j.G}ŗśŠčÓõxœöl†õæ—łCųß¼³1 ƇMwŅ§ė ø=E,Ūų%•k"OHĒÖcćæĒо}ŁŅūĘųĢŚRY"u=¢Wüɔ @ŁcX ź4^耑“GŁ®,>é]†µlŚ;–Ģę~`ųķ·šz™}×](Ć`õŌ©É +ÓĄÆŠ”ŠfcCNWJłÖµćĪ4ŌĪƘŸń)>D¤lRŲÓÓ±9xŹļ‹UhG”I‡—oFFZFģy*# cm/¦vXʵzY3ķ²C• æŲ(pu¢JuÄ0Ic?$OśėC²¤Ÿę!ā/F4p¼Y6¶ģ[ō­æ1œz4+ro¦å;”cœNł[T$¤>?_ü™ÜnčÕ öŪʏżł:æ’\`yø†˜`/FŒ“ĶĪ‘©\ϵvb/Ö iž_!c€ē©ŪöÆ ¾ĢCJ‘?FĢž–EēGŒÉOžŪdgŻŽ?=ŚÄd–$œ„ÖØo’$²Ž?ƒ‘”€IĄŒǵ4Ģ,€]ČEć>ąNH.ŗīŻE žńĒ’gļ¼ć㨯®’Ł]õj[¶lŁr“®›fz3=†„4ą I!įI! o $H$””$tÓ1ÕŲøaWÜäŖbĖź]ŚÕö™÷»£]­vW«f¹č|>ckfgfgvwf~ēÜ{Ļ…’6n#™pą'’ہŻųk’s–c Fŗ’O‘:±p©¾ĀIHķŁæ|S’ {“•nDžņųs7¢ gŒ9]×)Æ_K›³–š¦Æ8P±„ gż““ »¾Ä×ÅO3ääē”2mō|²łG”Õ®źšZK[­meģ9¼8ä¶Y£™gŽcÖŚ„4N™BsŽ%Ń_‡Ż-€ī‹” ”ėRąˆ½(ą pß0DGśČqX·óŽ+×&{»ßµtåJŽ»é&³³uĘŻŻET°ŖPƒ¦€UU9dIā`ZVgzH‚xt}VēĒģu3µ§ļ{Ł“Oā²ZYzēa׉2„oō;_{õė½-OµMŃqØ&š•±1]\)hޱT“ģgsš‹S»ū~CʍĆėrŃ|Hb1ÉÉ$fgÓXT€9.ެɓ©Ü²…˜¤$Ę_z)ŖŁLŦMŌļŪ׃3„b©÷wź*µ1&ŖGŒĄ6*oOSū”H? l“ßHóļĪ6ó£$žļĀävG.Ł %¤ūn$V«”_&'KŹžc‰8PW'"€±Ż¤Iņø„ P@A>z}$}8rK‹g`ŗ9mČNE>‹Õų…ė€o#>c#÷‘ŅĖ`Īq)į\…t”śń' ~ōµ2HžŃĻ8ž€Rą;ČMģéė™ā£"éõæ ³Ž($5g:Ņ9` Ŗu„T[‘ĘVDųßŪWVŠ­'ś¤}žš’­ˆPŠ(.Ż…‚¤é’ qā=RˆnCĀß#.¶ Čo<¬{ōQ>šš½ÖMćĘP;«oŁM]K!ß8c K6|—†Öȃv7œŁ ±YÄZŅØnÜÕśP͘rgsCįrv-YBŪĶ—Wļ¦yč@Šе ŠX’DLśB€nˆŠA0DÄt¼ńćpÅm£bO5Ɲ\ĻmtóóÆ Č n*)aģ…vgóر%¼ nE”ÖbawbåĆrqd§„æžu<¶x–õF°$$ yĆßb’rrųīgŸ‘’›ŪÓ·č« &¼Š‚Ķl¢>1 ;i‘ŸS)éhŁŁŲeņrZ§ŠĶļpÖ-·{ꩼ0>3oŗ‰ÓæēĖ#{̹ērĮŸ’ĢS3gņƒõėQT•–ņręßs kŻ{ŒZ„”Ć«@“ÉÄĮŲXjÓŅpäææ?ō?釾‰öŸjˆš IDATw·¾ŗOü W “ŌbŅōöLŌNPUIóÆ Š@K <Ć}©Q'$ėed”’įa¢ÆtčPp»;¶uDf¦Œķe~üxiól“ 4$ø”x 5sāu‘²ąŸćĻxŖGZ†üād,ž7$óų¤ö?ų·‰šæš“%ˆ7Ą1XP5ˆcdzbŗŃī@ˆńwšPš ągHł€ńyżńˆ”Q Š„Ø‰ R š]$U\ķĶĪ£$’2.ö!ib[}֋ "z(Č÷Mč{Ó°(q&šŅ³¹śŖöo@Š]-¤¾ĆDf†ŚNÓ=¼¾ź.™ó,7žæ…÷Ö_GQåG½>öø‰3»<=dē4÷»Œ­<@ÕŚqĻ»Ķ<Ļ B1 œot.Īč‰ }# @ga@ĖĘ3t$uūĖYVlćœ|S:ļ5:xŻnµW·÷8ė‹Š+XU…"s"»2ņ©‹ĶŽ|OHBŪ7‚%é-ܦōĆX"65•›WÆf’Ē“=µĒCŒEGĮ„*4*j³²h‹ŠÄŠ1+ gq6›ėźŲébrw޳ųóĻ9ķŽ;°$&ā¶ŁwńÅÄ„„‘=m5;v0ņōÓ)Y¾œ!ćʑ5e ¦„įlnFQÕn“€ń )øU…ÕĢ~s&õ¶įxƒ‰0į‡ī“žÜŃčūC­½!ż}ķ‡ī×÷Cψæ]+Qkv‘„ž7“ž.­ū‚3.½TjłTNµµņ?Ąå—‹R`ŠŠ–#+KĆõė%ƒ`Ö,X¾žŽŅVĘ ć’8z9¶<†‘Œp‰yAĖ3ńŅt$€¢G‚…æ@¼›EųC0>FŚž W,pt{f ā8ƉzA‰?Č÷šŖļļąv$}5ŅżĖŒD¶Ÿ@÷@" ‰°"Ąvąßˆ0bŲŚ§pųŽs7Bś×#õć{ń׿Fž»#ņ’.Gž LžŠŁ E”’c±ŪW( ŗ!t…E / ŗ¾.Ī·>€ĶQśk°qß#,8忨Jt|H×ußńužˆ. ÕÄĒ éōZ4HĻ!ƔĄĢŹ2<{:Žė7#‘“ž:eēnL‘ÖŪ0u…ÜŃč¹£Ńgę¢eyг<čéC;NėWM ‚@ąģBž‚ß;)=p {õ§ųōP@|zrŽølJvfšj%¤Łü€”ŃŪŠu—¢RnŠekz*E¹“„ftqOAÓņ)oˆ#“3L”PT•yæž5ß[¶Œ+ž}–Ūq67óī7ņńķ·c²ōŽfĄ«@q,`UL”Ē%Š;O\z‚»ódŠE3&ūܦ\jwį9·Ņ½Aś”5kŠ5¼3ĻÄĻš“O¦č³Ļ˜xÅŒ:㠊—-£µ¢Żė„Ą×·'äæŚe1"ę R¢ĘP”]@sĘ0“” ōĄ „šNūŹŹAœŒåöŃčĘŌÕuķ}"&ūīOö^’’ĶńļI’ü0Ū,˜Āa!čģ«•±Dx††JĶ?®¹^xAę³²„“74tŽÖŲ®”A~R!‘™)Ł’ü§ž}¶“ “GNHŠ”$#™‚'"gø!’-HöƘ|ą{żV¤uŸ_#.«ųY$ƒ„s„łę1ˆžĮńžŠžŽ\teH{µ)ˆ’÷]ü£†t xéåy“4>ҐlÓFü‚€1$9 ņ%÷įū9‚_…|^(ń^¤  ?ł?&£Å3āČÖ@ˆˆ0v·o¾©y;ę³:zŚ1@W8;špł–¢'˜7ł’HI՞źo6…oīp ÉOˆĶÄęØfؐ9¾ćTisÖbwÖ1zčŌµt“ˆÖu-ā~ʰę•ļdŞuTä^„7rˆv/² g™9; חJ);ŗW.’!" .ļq–„•\l¬øG”RcmdóļœŽĄ·R½Ä„ŽźČĮ¦Āš$ŠĄ£B½Ŗ²#.‘-ɓØĪßµqdJ:ZN6փ¼”^Ī\µæ”ųÆ_xķ/½Ä¹ųn»oæņÜW(އ‚GUØ7Y(ŠM§6=ws,ZsN+±‰čy'Ѳė_ļ³²fŠ•łŃ¾ÆĒnēŠš5Œ9ļ<*6m¢xŁ2fżą¬}ųarfĶāąŹ•8››łģ׿ꊒ›ÜÓNćÓ_ü#śį†[Ķ €‚ … “™ķ‰é5GN¾_ĢéĻŌ~č]¤ś&Åæø„ŚķÕ*~›9łčf‡?ĘłŽ?į7Šn»„¶ÕåbL¤õ `Ę !śšĄé%’:\-“™ |°_‹õ ēŸļ¾ś}ŹŹü¢B”HFČi"’śŽ£küF~°Ÿ dģ{ā/vR °ńÓ‘ƒdåž#‡śłÜŒ©Ÿ#¼GŁ Ń/8‘€‹‘“~¢Ņ݇\č†R[¼„¤č ÄF@Ą“&ÄĖ`#p2ā$ŸAĻ¢øšoŸõHjr#+F€Rü¦qF ¹At&DAķÅ;p˜ˆbĻ æ-ƀņøČīč®QąƒZ0f¦LabīµT5nfĢŠ ±9Ŗiµ—ąÕœL}#-m‡ŲQśB§m[ŪcwÖqʔū8X³Œ¹æ£Ŗ®…8tŻĖŽƒ/rʔūšj.œī&,ę$¶’ «£‚üa3aÄÕŲՔׯ ylÉYŒÖä–T°§ź ŽP€߀ūˆˆŠżRA ] €ØĖ ‘öŖlz) @»0zņi%5ZYµVcÄéMĢOńöīł;lęL22ˆIJ"kŅ$ņĻ?Ÿņ£rŹ·©°**š¢ŠŖŖģŽ‹gmęö:‰¶H®ųāŠņpZ‡³­ŖŽ­ĆĢźÉy”®XĮ‡?‘ęIC‡RpõÕ=ŁMDøŲ†‚•Ćj ÅC†ŃܔŽ–ÅöńIč–\\ÉĆ(/jäĶT7¹ĪčĶw‹—.eŹõ×£šĶģūąö-YĀ‚ž“ń—\Bma!ަ&Ö?ś(7rõ’Kņšį¼vÕUQķ_6%@›ŠWQhVöXŁž?ŚĢįxĀ‘žp„æ;©żŠ{ŅßŪ’āB”Ŗƒ( Õ(»¶£ŌĘd·¢:ķØn§D­UzLZr:ެ\«$¦¢žŒvv–<×ęĻńļ C|N'Š®“i;‡C:.=õ”˜ż54I’ӟüB™Ėׯ÷}ÅұéĮįĖ/;{ dfv^āš…ć)@A:…³Åy4%ųž~/č5 Iļæ)“x ©.ń ¼āJ`­oŁ€J¤ ` t$«xƒ8ā8Q€¤MH:ū+¾eN¤uąsĄR:“tą&äĀžŒ\čk€‡€Mż~Ō”aD’ nE"õåQĻCj’Ę"Šd*ā,oع žv,rN.Äš„j‘›×aD(óĶ7"AŃ=ØĄT¤¤ähĕH©Gņ›0~ĒG†‡Ļ(°+!ą±ĒˆQ†…ā(ŠBFŹdĘę\†Õ^Įā5—āÕÄ nÅößR0r!MÖbö~“•kSQYN\Žlė՜,Łš=N+ų-éIćųüė;Ø-‹ēߏ”qī·Ķ¬6żti£oĀįnd[ń3l-ś'Y©Ó˜5ī66x<ģ±'g0DÓȳ֒āŁC#—Dw bt²2ŠkĶž÷  wY…påĮĀĄŠ‘x½'Ńčia[SY+SIšŪœLOųg°µŗ{@ĪÆ³„…–ĖīSo杼³Ļ ąź«)øśj^æęŖĆŁ€ūŠd’Čæ]EÓl&…¦VĒg°ehuęQøM±Ń]ćIyø’†P³;ƒē‡T1%Nė~ג†"澎\VFBFD¾Ō#l§‚WzÅĢžÄ¦`Ołzˆų~‡ŽĘ«Ļ£ĮQɎ-nތ­ćę,O;9ˆˆāĻ?ēģ»ļĘm³±žŃG±VVR¾q#3nŗ‰’åĖ;¬{hĶ^»ź*~üõ×$Nk8W·ģЇĆŅĶĄ®@±bę«ŌŒM[Ž8’9FKų£!’}Iś{Jž āæd9ę-ƐŪ\Ļy^Ót`˜®“АŲ6Ą„(”+ ‡T•mqqlČŹb÷śX<§āĪĪĘóöŪxƹÆ!ō”ųŪ–ÉŸÆ‰Ķ›a^puy–-“č}0**¤c“›o†„KaĻų䈏‡ŅRi NDčäó³ ĮŠĄ1ć±ŽŪļ#QśĄT›\d¬ ǵÉtl>)ŪLCaß„c =p Ņ! Ū·īéHÖģ 1ą8Q€’FūžžˆŌŠ?‡DüC%t*H€ūńwy2š $“ąĒHMĻ@Ą0 ,ØGž?ūāŸd!FÕɈ¢kʍŻ술Ј’D%­öĶ7łŽĆˆśƒ€qŒœĖ=p0#ČbÄ”Öč p|ÕtŃ1 %‰ls„^ēµĶ;y}č¦ ›ö’Mū’†ę…ĶK³ĮŚ„%s'3rüėW}LqÕĒķóUpć÷ļ§ŗ¦œÕŪŽÅn’5– „ń&ko¬ŗØĖS‹M"ŗ‹ŌŠŠžEoR €¾ wYĘß=ÉHJAOĘé²Sīma]‹NŹŖT,6¦Nrźłč¶Ū:Ģ.^Lįb?%yļę›ClcÄńߣ ”ЦØĆjs&_fM„,iĪų$ōN]ĀĄžˆžX@kC9;··ńÉÉM\Ł›aĶćés£Ć ”ˆł_›¢RĻŽ¤įT§OĘßƒń §ęąŒĖ”ĢŁĘ—ė܌:«‰KҼįļ Ŗ¾ž·ŻŽ9.®½ąŽ÷ßgž=÷°įqšT‹ÕdĀćpŠęcj–„®õ…±°;]WpŖ å&3Ł2r:u“/Äμü׌‘ üŠ7¤„ųÆūÓK0¢±Šļy½\«G0ŚĆ7nÓuĘč:h7X­`µR­Ŗ|f6óVF_ļŻ‹mĒ÷¾ˆgĀ\¼ē’0¼@ŽųʱS¢Æ{蔇N\œdģŽ-S0®¹¦ćü޽0eŠ,Ÿ8QŹŒr€;"¶ü‹3ž1"ć½,$šõ݊”ż> \€ó•#—† ń?øxŅ·ż„/¤_!Žå!ާø)#Ī@Ģ’ę9ė`ƒ8"83š=„ľŠ’HŃū4¤Īgoރ\ų!7Ł‹ōŸ]ˆŚ7Pšā'ńä«‘,‡ō€)©éŠĆoģ¢ć'’6„šµ"B@³ļ+žh°ń^ƒčTą ˆ¾–t€0ł}×!æ'Ē©čĪ .†äŽ(5‡U62†»÷$éCłó³ó»Ü&66†‡x‚;~Äo~ y³v0zr÷K-q˜½YN7I»œ½7sģk1Žœ Dō0ŠW¢€CHJA=6µ»·ci«Ē“;­Į¤6’’śńnjWa[<”‰äՅ ™,¬HHcŁČ‰ģq¶®"āĮˆOBO›ˆ«f'U-|øßÉŌ vĘöĖIōV6$ż­RbؚĀžģ|Z‡Ä¢u×2wČ0“ń³iŁoeg“å«4ŅNµ2wØ;² k%Ė–Ń`l{ß{ł‹µūŒ9÷\®}łejvī$cāDö¼óN‡õCaOģ.ź›-q¬ŹÉ„hņ9“äæ'„Ž.ŅBüŠié}Lhiį.MćZzgR;TÓų®ĖÅw*«ŲRWĒÓU¬ˆ;HKå~Ś+qN9m²/# é?ńD\m{ǤnćĪ;įōÓį"ŸĪūļĄ™gĀ~y»ÖVxńÅĒ껆Ž?źoĢØEĘõ?D‚w‡o#&Čā£õ"2Žž!ųæGĘž?GZŖų žīÆ”°)ń|{dPÄQ€Qš ­żŖčŚt#1õ˜ä›ß†žÆÖyx éėł4ž–‚!h^$+Ął:Dķ4¦X„ü›ńG’ŻČĢ|—oŽå{ĶĆ ńļ (Č å·} Qā|¤ŪC žR“ć+ ĮB€ŪC¼ŅĖ6Ķ ›?ĻfDŹ„|üī“ÄĒdzyófŹK &>1ģv 5N•ńÖ“i'ńĮŪkyųŃūXµųN¾ō6ķ“UT]'YŪ‡yóf˜0=¹̜¢6m ¹®’‰šĘDŻKŽIŠ‚hCĮ¦Ø”ŖföN˜Ķžü<]‰Š·‚@4eZ }xˆÅĀt’³š2+mģŽćE··āŖVp,53iœƒō L±}8Äv+P+DŃ-æk¢ŠŖ(PͬŒIꋑcŁ5b-9ć{ęį2t4^ėLšÜõģŚåa±Eē–1ŽČuĻGNEJ< ^E„ •]±±lLNyöT\Ńī''®ćó.i&NÕJµŪŹś&)kUb§Y™9ĪŁŲqŽ÷ālń7Ø-,ä• šųlŲ‹>ż”’^x!écĒb­ŖŠh€čQ$“ć`LūwZŹÖX3Ė҇±ż¼…4]ų]<Aų”oI汏”~ō,©%»øWór }ŪFAg¶ŪĶ3ī:Ö:šł³ÓĘN[µ„“M®Å½paäˆ ļ˜Å±čŠŅ³ĪLĮ)ūyyŻ?Āšą/=^ČæŸ#>Y3ń»ń× BĄēė=\ƒdŃī@JjŻH Į“D‡÷ī°i—=ˆA 8ND ¤ėUČVA‡Śß äé&pb6–£Ē4PóM^„“µ!ĶĄI X70ƒĄøį’?ˆŽCA"’³{»£Ü\øņJ1÷y÷]pE=¬ķ2“µƒtģp\’ !ąē°w—-ה«|½t,‹~÷gįļģXPPĄ_ļż<Ā–‚¼¼¼öæM&æłÕ½\_zæüĶͤŁÄ„Ł­Q‡Ū :Äé:Iž&,•Å(fwl‰Õ×bĄ—ļr’ĆĖõŗĘ|`Au=šWćÆv­Įŗ ¾4©|––Ąó.‘ūl йl Qz& äOÄŸH«ł vŲ„£”…›¦½ńL=KöńyNŌō^XŖ¶˜$Żæ8\Rā¢!Qš:Åij…5–tÖäcĮ|Zćóńö“l<čĆĒćtļ§Ģigż×rMWrŃ ©*4rO;”‘#IČĢdčōéL^øƒ+Wb« ~ w„C…UIŠjBCĮŖ(ģ·Ä°6%›=O”uČ0!õI)”ŪBFBr*zī ­­ō¬gUk#±Ū’ 6†©3l$ʇ‘ĒėBäpŽń^P¹e •[¶D|’z3lL€V“ÆōO”AQŁĆ'±Y|5f>5 —śÉW8ZI?Hū>€u÷b~õ/œé“ń˜é?čĢs¹xĶSĒc/ļŖ”ś”“āZ“Č/E"žāāŠU•żĮīżĮˆ‹“”żŅR0<<ƒMūīæ_¦# 'BvĒrO!ć3}ónąL:ōµĄĄõłÆCÕöż-$³8š2|©÷‡<ˆAōNT +Ä"ŠAž¦#– ķŚĶ@ õŽĘžéY SŗS»Œ)p»£Įēc, >Ÿ£é\LHm}Æ0uŖ“ jk“ žųGøā 1źœ‚<Ko'G×gŚo°5ŅšÜ½[–„‘Ŗ^Ģ’7Ÿ#>¾£½Cbb"³g÷L÷=z4o½¾œGżļ=’0—ŽŌuf©[jH-xˆQĶ”ļMĘ {(=U¤*7cŁWŹ7=:?×õeA%y5.Ŗ·ņŠ’7łÄĖĆ]ޱ¤Ŗ?č, Pź’³»¢„ ŻxŠ›”Lkl:ū÷}…­±ŠZ‡ƒ*Mcƣǒģ%fØ5Ė’ę…-üÉ·©Šl‚Z3TYäoh'žnTZ…2“‰m¦XÖ'aėČS8?ńŹ+{Įø¬V†N›ĘŠiÓh*-(“š`uŲTé\¢Ø©V„&ņÕų™T›Œ+9Ī÷}wS05ņvÕ\“ģ3±y<ģ+Śö&Ü ®3“'·‘žļB5õńŻŃ®Ā®8(Ż/čŌ(*[̱|–8„5łēP>÷Ē8‡FhŪ×W„ś—ōxń^Ģ/ż‘Ÿz<<@/–>Fœ¦ńk›Y^/÷–”Pŗx18‡?Ż9S&˜ųHNF‰”Źķ¦©ļ„3Ī€wށäd°X`Ń"y–geu¬ū?ūlÉص˿,!’’  =¬~śS1~÷»ØVoA2BA>žžł’DH½qN$Ķ’{!Ö½ 1šĖEŹg#óSĒ‘t’ $wƒ8ź0(„Ęo9¾æńĶ'#ŠßL$å’Jümļ~ęūæ iw4#˜äk$üFƒČDü@J;ŒFVĆђѠ ‚Ń‚®Vģ ’»8/XŖ*ó+WĀĢ™āÜĒČEŌļ,„ß“q‚”‚|łµ=„SQ¢s85¹™mŸm§¤¤ˆÉ“§öé±|õÕ:>Yž2§_ŃÕś¶z©įŌtLnOdĄ  #•īˆ+ßę—ĘCŠN^×kG³®³Ąå`Į‡o²3æ¼ģ* ”ūž:ż¹»Y@HQŗ' €_0ē£J„͓Ȕż›hUQīhcæīd–&“*䓘HŽK, štŌxÅ¢ƒY—4p"¶ļ’»¤_ a…ųW) ūMf¶Ę'°5cEy§Ó0j®œ\“`ƞbōdAźˆŽ‡äŃƒō›Ÿ…‹ÓvŒytīO«#©Z„ĄVÄ©õ ä{4ü ŒR‡#ł©Ą<ĀDŗƒ3ąī»Įė•é¶Ū$"0n\æf` āƒQŒDŒśĄćµ„h^‡Ģ–Ø‚Édęčœõ­B~¹č®½ō7üটvx}ٲečzä-;;›“NņŅu]ēįGīćĖm’āœo—£F™gŌ\-‚ŸŖąµ˜£’G#|ł99ŽFžŃį¢>a! éœ‹› K󷜉Ü;ū$܁Æ÷D€> WĀ@Jzž9øF§vēF¬‡7SŁŅD”bc²×Ķ$EgŒ®‘­Cš’¬āŸ Ņł^ƒw7>’ćŠ}õń;l|ŁZƒ¹\ƒ†Tfΰ1dø»’zˆ;|&‡‡¤ _Cr‰jbu\"K³G³'ń|¬j.Z0ÉO ųĪRčrņŃĻĀźõ²æd+mÖźœnŖœ 3·™¹#ŽäabrÜ(ŁnˆĘčQĢPc†ņhģ˜ĶįTQ)RU¾JHdMŅvęŸNżt_俯 `”æ/Hś'„xŻGž’¤yø£޾;˜źõņW¬Ü©ėģ­ŲLMV-6 ŃYŌõĘV/Ņ.ŗ“pŹ)’śöŁņ Æ«ó׿{ óęĮo ē'īžK–ˆiąĻ~sꥃJVĄ† pĒpĮpŻu°jĢ+ŻĪ<næ¾ś*ģ”;‘ē|"ųėĻūkŅ?ųiŃ79ÆOńä\dl摎^_ ßA€Iˆš$“ą0ŅŅł/ČŲŌ†Ÿ; bG%€ĪøёFČž*Äłs*Rš&UĆ;nƒ¦=‡‚ xG7!©óa{²m—å›NFÜ^ŪÅöeä;“"ŁG²¾M%Ä@ 'p8$•Ļ€®Ć7ŹßƇKŖßĆK 0ég›ŠøčŸŪq8Š=mģ1§F'Xb`žu‡Yµī.Öżh9’ķåör€»īż'ĶÆŠø}Ćž3yėÕU455ń£Ÿ^OZžZę^nø]§ż”µ›„9•V<9Ż’‡V¼Ėł7/ 懞†E‡_Wģįģņ½|{śLŹņʅ>ž Š3QB ‡KQ²<žåYA]‚Ū’÷¤\lĆGćD¹ĖIęč0¾"†aK¬ŽšģEIŅP̾Lć<\Š”/“Ŗą•oĘČÖó"éžĶ(”+į$ņ# IDAT&v™-lˆOęėay”Ī=Ÿ–)Wįɋöß]ōG”ßŲW$Ņo`åbŌ—žČOŽņo`’×Ė=ŲøŪīĀ»³E2L- ’üSV“·fž !„D°“N’ŗ’@¢o ”`Ģßz+¼ś*>‘ƽ&^@Ęzf3\|1TWòešĀ ņŚ%—ĄĘRr°f G<ē&$“20›ņX„ ›ßä›7Ś«ų͌ŻH„ ’MŗÉnŚ×[Hż’«H)Ą]¾)NÄHpƒÄQŒA 3 réFæ`l¾ ¼‡Ÿüæ\šĘCSEś»ßŽ“z;—AtÄ’·ČĶ;®—ūL@ž‹€ŻĄcȃŁPøū›Š ³śbg6ˆŠ ‹^N>¾’}ųĘ7`]ß4§‚æŌ"Q¹{$ƒnkfm\j{¦OX$ÅĒćµćpIŠž”¹­x[wsķõēņēžaźŌiddĒ3nš±…°ōY¤%ęÓd+¦ŖQ†Ū_”R׍›6š»»ob΂ݤgÉķEU-¤Ä¤¹­]Rō8”” NĄfIĮ=aś|ß}jEĢ’&€¾üm¾£yy†#W+P8EŃłrĒW\ l '¢7‚ō­(` ¬8LĄ[[‰«v+¶µTÆå@s©ŽVR=:)øHÕ<$+ąÕÄu^Up£Š¦ši%†ę8hQ“iNM§9g:mĆóp%N쒁n' õMˆÖ†}“ ¼cs±i„»7įŅkiq9i¬‚Y•±ŒĢv“8ʉyøŪO€»‹Fō„Å»•ŃńzEaÆÉšųÖäN`Ϝ«iI›ł¾‰ą0Zź…yĶ›7müxjׯĒv° G=…n'yų ā¹jH§¬$żŻĪ±kh xÉŌ åšP†”|ˆ” üXHēsžń{Kbš?„ęƒÄQ…A 3ŒāZBrBE >DźžžÜ‡?S é/ś äĘńŅ÷3ŗŖ«A€Ģ¦ī’ŸPéŃ}! @tĀD!ä gåąÉŖÄ[0‡ēµµØĶ͘[«°ŌÖćiĆārcŅ,(ŖŠnJĄ™€3a ī„dīž’ž&üĘ>{Bś±óEԃ…܍^$üqųč#æ&Mć…b—‹Öŗ:\÷܃ēž{"žĪĐRʖ?$ „qŪ6ø÷^9²£1Ÿ!Ō×wœ7ˆ½Ē[·Ā+Æt~³ĢL8p ć|8!! t Ņ7Uąļśs, YH™ā“€e/F¹ķ=ˆOÓ¹ĄŸ߯õÆ[ēƒ É$ķÜßsƒ80(tF9BļD”ĄĄņ0ė’’\äoŲ~ޤ—nö-I  qƒ€ ©»z›’ä" ń{(@¾ūĆHķ—“¾Us²†„®V ĘSO‰‹ļ/~į_fˆnŸ-Ś„ šÜsŅBč“Oüė•—C;ĻƄDžć £±åe@KĄ^_Ź 3¢RĒŠd+””Õ›;§˜¼é’Ę?mōͬ-¼f[) ­{ŁøļQęMś|ļ·æ"6QĀ–ĶĮé“ļfŁ×’õ;mP¾ЌJ¹žBKģh¼‹}Æ/Œ°ķübĄ–÷™¦{ųĶ6ŖŹøT^Ūņ1g·Ś©=ļ’¾”Ā©õD€¾ŗ"„—†?NC Č:ĀÆ¬!g M»7Ó¶gÕÖZö:™ąö0Åėe<ƒB:)…8"b€o"0*ččķiž6š•Z]”ÄlbwL{“)=‹š9s°gĶÄN‰ö3„Čß[W(˜‹Ę\“¼R<wbēuÕeXš ‰i¬!Ža#Ī«‹—ƒ¦”zU“X3n‚+;¶Ģ±™øFĀ›9ļŠ\ōh‰’‘ üбe_OI’|ß>žyõæ’e²¦qKøuóņ`žü. lc˜×ĖƗZ—‹Vdœą üõdų4Ļ2^X¾”l¾W_•TžŪo£{ģŌ©PT$$ŽėõūłlŻ*€į€@cæ@ XHƒ$ņ_†;ć?€$ąa$°3‰ŌøŽčD/pR²‘ƒ†NĆßĄå·Ą…H–oøĘ!ƒÄQA 4žq ½ !ńĻ uD[Ƭ?!’#‘‡Ą’#ą&¬DŒēLˆcż )`g˜ˆ’;tߌ¹Æp=0Q€KŚ7#õ­ÆĖ*Bž»…—_†O?w’G‘T¾»ī’ĮĮ¾}’FųÖ[Ņš¾ūüŪ„§‹ūļóĻūē—,’؟5ŠMXčæ1H?ī3Ż[{ćy3{<·Ę&F÷ū¬oŁMFr£‡žOiõēķĖĶ’4XK E•vŲ¦øź#Īžö£r§RŻø€¢Ź˜5ö6¶=ÕALˆ„=ĖĮćĮƒB ‡ā“hvDC¬Ū•šĀ ’ŻN^GŅ#"!6 ·Ē†ŪŪÖÕŖŻ‚¢˜HŠĖ”Õ~ø}™)†üōq<¾śynló.ńŸßl °2ś*[ ѐ̨Ż'}čÉ F$ń §˜0-=ēˆ|jė i޵†C-ģ°µ‘£9„yå5‘£hd‰šN¬"QqĻÜ­(ŲhĀDµjāpL ćc)3§Q=j sę`Ÿ|)žhϽ7ä>敼Ń觌–ßęĮø¶=[iIlDiiéüY§¤ ĒL@; Øv}=ĮüūX·SK wĮ[䦛„4ŸrJo ×8qöÆEĢ„=„wÉ7ʬČxņJ„Pb·ĆgČóxųpŲ¾]ˆžÖ­’°aƒ<æŻnqī×|wø§Ÿ–ē½Ó)ėĶ™#]€\®Čꁩ¾ŽCv;įąE ‡߂Ŗ€ó;0ų‘ļļiĄßt ā֟lB²<ӑqŒißÉÆ¾…ņF"AĄ_§"üĄ‰x" ƒ8f1(„† qś|qņ湊C g"i’éHŚų-tV_A>ė׌ž‡‚ ĢŽ„źż»ƒłˆļĄ}ČĄ¾ækl_ĮC7 ŌVƖ“ž—^’®KmßÅĖ ą©§`Ō(ČĶ…o~S¢ yy°x± |TžóJJztÜ:"Ԙš“’M?RŲŽ©6Ŗ+¶óɘ¹\Ķ6„՟³Æü®9ż=>Śx{ŹŽh-1n-öŽÖ ĮOŒõ'xW7n¦vČɜ;żaŽ\Ó„!®6Ųū:6E”LQ9”2 ėš ”ī]‰ÕµÜC4֒ĀO/ÆäŁO'ÓŠŚ·ē3GQ>ŻüćĖŅø2k" w¾ĖkĆņ°ēO–sō öóķ/A"÷Yļ­8` ;dµ»bA0z#tµß™sŃ—āuŽ’Õ4īŁCiy;\-¤źm$Ū=¤čIø‰G#FWQŠń(fœŠŠ5V„•xZćiĪĢ eÜ\ģłłøGž‰7w4zø“üžD¤ļæÓŗ>BŸ7®wĻ“#Eų}÷6µB“~Ļ<ƒŗd yšĘ5įÖQUérs×]"ˆgeu¬e?ūl‰ J¼‹N«½E*RźY†Œ —üpļźEŹj€G€R*ˆ ą=÷tŽĄ0śqõ/(šĻæū.\qÜpƒœ÷ŗu!÷••žu³²ü@K‹ü’“ŸH÷Å7A5"!@=ĒVś’J„ĢCŒ¹‹tŽś!ģwGŲv+R¢±)`_·"ßÕDÄū ä;¾ƒĮŌ’AćĀĆü 1 ł&šlˆu®A"ūqˆJŗ1 …’ ‘ß+ś¤Ķtī3z¢b4°„'’ĪBnüO ¾:śī!Ø#)vŻŻpłr©÷æā I|’}y°ßz«D Ī<¦Læ’ž}V<öļ‡ /”ZĀ»ī’ōÉSOõ›õąŲ• łć=śo@KUiŚųĻgŽćĀä,ŅŗŽDgɆļrɜsåiÆ3,}6+wü]×HˆĶĀ«¹p{:6Ršxø=6āc3ö¢³üė_š­ł_0fč…4·•F|×mļƒÓ†‰NķIˆ„b8ĶG[Ü! .ųŪ»LCĢ“: ֒Ā؜Ė1©Ŗ›¶Rß²›QYē (&FdĢ#)~‡j¾ 3e VGCÓf¢(&Źė×2"c.k¾@ׅåeŸKUć–vCƔ„<Ę ½ę¤¬v1ęRóŠuŃCϧ¾eO‡L€aćøgŻRVoxžƒł m÷,@’ŠŽ„8Œ¾"Ą½ĀĮ(e˜9×įRÜūvb«JöĖ_Ā¢E1Ÿ2žō'‰¤’ą0s¦·Ž*ĻIJ2Š–ēfyyĒ“ł(1i+\†ŌÉGJ“×}Æ7#fq d4Ŗ2:Ēļ`ąĆżēˆ9s:Ī’å/ņ¹œūŻw˘`×®N@ łßd©–ū–¹9vžó:šųź×­ęü™’Ąėu²zׯø½m˜T Šbj'Š¢b6ÅįötThÕ®`ł»œ3żÆ¼æžś°ļWö®DŚT…ÅÄN“…ŗŒS%āøŠ÷E+øÜ,"č9”*f¾sī:4ĶM«½ŒS ~Ć+_œÅy3Ä,łŒ)÷įņ“šļO§rjĮ$Ēē’zåõėhm+ćś³–ņč;)ø<­|ćŒ%¼±śbŹjW1<ć4¾yö2j›¶ćņX–>M÷›yŗ®“‘2‰Õ;ļ¦šŠĖķĒ“Ą°üsłÉ¶U<ō nŒ.ŗ:P¢€hHe‰ŃąˆDŅG£w¤/ĆŖŗTœĘŹĪēžƒ>“²’ÜćH“}}QĖo`~”Ÿ§q)\R[ŠYórU¤õo¾Yž}lŁŅQøź*ø’~xč!‰–ĒƊšųć’Z_Q!Żržügɤ»ųbi‘k“Ś;õTy>Žæģ/?_ö5z“ź=ų ¤Śa8¼8€꣈œ !Ł„5H)ĄHdüׯ×xiiĒł?ü!äjvą r.…H@-GÆū¤ŅĆ€{‘nKg«hż…Hօ1öjCw9Ą9ĄCˆ‘÷+Ądd¼ŅÉk p2Ņ5j°£× Ž ݇‚Ø‹æóĶ@ځ…ŻB҇–#)H 7Õ8D”Lpb¶Q…vī@HØČĆy?ņ`wŅūZ8y˜ lü£Ō>ł¤Yk+¬ZåŸ1BĢ‚ž|^{­WoēFĪ߁ˆ"'Ōov3x§(Ō”¬cIV>§O<;zCĄ­E’D×½\8ėI¾.~»³PHŒĶĘźšēkĘZŅP6GēęŠ_læ“’¹h'F„Ī’u;`ĶæA×pUŗĀ6S FdÓŗhQĒAÜĀ€ĮS81 ų=&#K–”OfŹdžž^WCūņē—ĪąŽ«šx}ÕłJ,¦_2Ms“‘\¼»8}ņŻģ=ü&nų~‡å±–TtŻŪ©Ą@öxnŲōƕ®¤­ųڌR€īb E`DKNR(čKæ/ˆžŃDģƒ1™„*ķ8dßxŸ¾Øå70曤?ūPķdz»r' "$Ž<™ß¼¹£@uµd·=ü°†H`µJDüż÷%źŻŲ(¢ųłēCv6̚55Ņ%ēĘE0™Ä'§¬LD€)S¤ŪN؈¹óvÄ·Øy.Fś, /€ĆĄkČųļöśuįüoGČr9rœ‘Ā$£v’„<©@2q e£!š}S ŒŹ”Cˆ—×8D,ĢÆ(ńMƒÄqƒA {° õ@ĘčtłÆéb»‡ņoGŒę–ųž~(–'TäFūė>HC¾ėZD0ZöFאī—ōśč€o|Ćo  ‹¤LĆÆ~Õė·3܎ķų€£mpПŠhĮŖ&³oćk¼”:”ß + 5p…HIŪJžĶ³ž #e2µĶ;QŁó)<äOé‘1Ši²wھѺŸ-ž`ÜšĖŃõŽ_ŗ®Į—ĻAk5^ •Ż&ŲØÅQQ{nćę²(Äq…\ü!Ņ%[ķåhš›I#ÆckQWm•”²q#šęīr=EQ}>o¬īž„›Dś˜9,<¼™ŠuŸā̟Üw¦U”DXa ½%»G£€p4ųī` ¢śĮļ×Wiż=į‡Š¤?e;Qۚ9#Ņ:7Ü Ńś’üGRį“’`Ģ©{×uI’_±BŒrÆ»NÜņ=Xæ^²äŽ®¹FpMc¼Ļ?ņ°s'¤ų¬]/æ\ŚņĶ ĶĶ’Q£‘’ĪTÄ×NäńŽŒ#Bł<" |ƒéŖć@"Ś{‘ųm¾ćjāčtžĻ@Ņō‡!†|“‘Żą¹’F€…Ąķŗ4,Ÿ ĀĒä Q`1ˆA?ŗ‡L¤†äf±QI#!QAZĢ}ąūū5ßž~üƒĪ7±ć&¤“¢KgńĘ)Ą,Ä ĒŠ<¼{Z `d¬ELdzÖÖČÆ?ü°˜Ķž-Į½„Õ7µā7F<.éŃbøóĶTĘ{ųjÅS¼}ŽĻ¹!k ±ĘėsR{j{0ŅĒ *fZ퇱9Ŗ(Æ_Ēō1·°»ģõvBҘ›9\÷%6Ghsįµ»’Ą/އ¢täk›CŁ6tĄ®C±Ya…CFŅ2? śI€€BĢČĄŖÜK·ŽĪ3cųÓXŗõ§ø<=3•D|L&ŖjĮj/ļŃöĆ ødߗ¼W½‰ĘāBl=Ķˆ‘„8zāhp¼ķBøˆ~øeżÖ ļ³·„ś–ōĀŽŠ¢{‰ŲØöꛄūĶŹ•‘!·‹ĮøqR×¾k—Dśßy>ų@źś5M¢żóęIYĄå—KäD8xŠæ’ŲXp8äļSOS½ęą8qh¤#ćø¤œ1š6©^DLÆC²_E÷·‘6vG:ņ/GČ’&`  ?’¦"„’Ä£éMą$dlż’©¶'`ż‘ƀKƒé®0 –īįH+bǀؒi ŅuXK”a#,8…č ąfÄ|ä2¤žD€Š”E\=ŠLČĆ„ˆŽnæ=M÷"J{ żÜīšŗė¤5Še—u®ģ4$¢ær"’½øŪō öŗģ,ūāq†s+ēvęe1CÓg‘6Ūļ`öųŸ‘“>‡ŖĘ͘Ō¦ēßBIÕ§Ō·ˆyšŪ~Å·ęĮµ§æGQåGäeŸĖ؜ĖxuÅ9aßÜįjäĖĀū8ę?ä`4Ųų:ģ]Ž‚rEg¢°..•Źłóq-żŽ 2˜nJ 8“‡Ó–˜!ńuńÓT5nęņS_ęŖ¹oņĘź‹£üųŗ†¢ō,–‘ĒĶIAE!Å«—ŃÖ8="«č'¾ˆāĄ™Ć˜ekb.&œŖBc\eć¦pą…/hŽn£ä¾w_¦ó˜ßĶ}v‡ōƒ_l|t/Š®3:Üz3gĀŌ©R·_kł“ŸHĄ~ŸYÅĮƒb[VÓ§K+½Õ«įg?§üźjY⌿)Ą±)°UŽŲ±’1%‘LĮdü@4­q®Õ¾õ½a½ɌģOńŠŒe#fŪCjcŒcēč)ļ;iĖ|¦o¾ ńO˜ <‰dhŽÖ#ŸŻG¾õÜH™Ąˆ°Ņ•0 x HU2żÄ €hŌŹAtÄ.$„(ņrC5bÆ AÆéČ źNņ"<ŻA/RŽ.» ī=rEČC9QčĶōģmd“+śźąBaĀų׿¤½Š§ŸöÉ.ķłÆC"ŃžžGx‡×Sgö°ÉÕŹ§K’Į:­aŒgDʗ¶E‹d ŗtc >™{¦öō^…š”Ŗqoy%c†]DJB^TœG“.ØfS&5¦šŪ]õhŗ‡ōäpö‘/9K<ę”œÕZĒŠŖÕX&€Ž0 $I3°Ł7ŁAo©ē›N'8ŪxĀnć•ĘZVo\AÅT•Æf%š£ēī^«ŠAō“AŸ ŗ=Ģd|w ćZA’ł•ĵ‚Ž×µüĘŌÕŗ‹ƒ¦h°tcX¼ÅfCÕuF†Ūęę›įć;’Ź)R•%ĖZ[Įķ–Ņ7g’ädĆĶs š¼ŖF.« ‚ ņ‰>äü=Hia%½^ƒd„¾‰Dįū^ß~÷"¤=R掷¬†£‡ü+ĄŸ€ełw!ÄßųfŚ€!و©ĄūČxŚĄsČē¼Ą÷z0ā€Ó}ļs˜‡œ’·}ūÄ Žk fō?¼ˆ²: IY ĘēGöp ¢²†ķ÷ŪŅҤļż+ÆōŻAu ā&»1˜1pO^^äõ&! Öś \ яč³]Ö!µČłŸh]” ®)q”›Ż¬ņ8‰æļĘĒMē?>köBL¾»jyżZŹė×FÜQUćęN†wX»»sMsóĀāėXõ/h©jo/U­ĄWŖ™OccŲ:"¦7¾= ĀeÄ+œī˜TՂYÅå±āō“:fS6‡ŠIŠŽĮ0mĪt]#;m:„՟sņ„_bRcP ŗī„“z)³ĒŻNQÅ4ŻC¬% §» §“¤ü°Ÿ“Ģ<¦Õģ%×ZEń¾Ķ8'ĢīP÷¬gģe ²¼ŽvÓ3+ņ]g†ÓĪ?žz'7~ų ž»‰ŗąmÅ2ƒĀ=׿r%ym.†Ø&ģf Öoü˜’.ź(b4¹…PµūĘp‹ŪĆÆ1k‹čœßę÷s”:zŒ£°Š&Ą IDAT„­­D‡ÄŹ•PĀbyŁ21ö»č"ńŲ²rs„Ī–-²N[›~ó›bųg XČȀŚZł»Ŗ N 5R ÅwģńČ8”;×c  !÷+BŅ ×łŁˆĒ@o‚uFūĮ*„ä—įoõW„Ls4„ż’?ą·¾æŸEM”ŅņŸA.“ÅĄÄÉp "j¬A„kæ…@œä{ŻĄą{ų[bĒ5€¾E:”ėų·#@d ģ&ąä³źžxB”žEį ™ū‘¶?ō®=ŽAŲ6!łØä»ƒ'ž€ž³[‘ŒHp!ƒ‡JdatC8Q}W-m§”Čźa™bĀ“oZÕn¦Ķ¾Ž“Sū‡˜y]°óSŲõ)xŻhФżWéÅłėc؝²0:¼pb€¦S „9ƒ‘™grĶéļR×¼‹ō¤qģ=ü ­{4œś^ĶÉk+„ąÖćńėn=‡ßąŖ¹oŅl+ĮīŖgÉQ[i ¬-üםõ)·.8„ŻYK“­„·æ¼ŠŠ†õĢwß?#eµ«X¾ķ—!-!lĶM^sć’gļ¼ć£ØÓ?žžŁŻT„JSŽØ¶ ă³!Ų;žžĪzöÓģķōlgGģĖYQšXP)Ҥ÷ éɶłžžxf²›Ķ&¤l „ļūõš×¶i;;;ó}>O#Õū ł ¬Ś›µ?E„čąvóź‡ėĆ'čšįf6EĖŻZ‰¢‹aņkM·“±Ÿ žp&_nĒŲUŠBuT"©¬ßæ’-Ą’%bąĄōéRŠa}pĮ0ÄąŒp" ¾üRRē®»NŚ vė³fUłUāļæ łOU'ĄĮi«[ŒÜSH»HUś…ˆaŪ¤ŚŪ«J"÷ģb{]9ˆ€Ÿ‰’ķi+"6ŁŪn(ĘæÜd?ųū^ę_€\ŽŽB¼ż#ZŁŁöņ' ^żHąwäxlEZ¾‰ˆ ĶAĮ3hą žAŌŌhyķO#!ļ+!ą`&)xxmm>ūlųšC©Š»`÷3FK—ĘvG#/"!i‹‘›©—ŚĮqˆŖ>šT¬v°فØā³‘†k1«“Ž@0aŖ&į—ęĄ4R -s¹Č0Ć čÓ®'-{A\ėXTß>Xó¬ųŠóŹ„’l6ó-“ļ,‹_¹ģX+éµVgž{Žøā6QEŠNzjOҚFQi&Ūs~ÅŁZB\sŚ·L^ŃF¶ķ\Ī/Ÿu¦C÷\ŅEMĆĶ!­†b`°)ė{Ö/gåO½iÖa#GžIj“V“o1Æ?mŁæ“$ƒŖCśqøĢ¶gĻÅŒ”™¹’’ĻšJ|Žx:+/x¹Z՟«E,…±żh½v‰ō“ö$põÜŽr>[æcLo¾RŠSŅZÓgz&«b“郂Ń]h·a#ŽVDŽy 6§·å“o·Qż¬ļ:éÕ?³)ü% 0Üdü “Ü$4oNæO²©J3ĢĶėVKMÆĶ p]UŪŹØÅe ¾žrŪ:÷ę9¤lg)’‡s.„—_–É!) ¼^Śņą°aŸæŁ¾ß{ī‘ŚÉÉšóĻ0b„t؄‘œńH(yµ»üšČ57I)hŽ“ˆńßq@4µ?s :5¦œā‚%ˆQ_@(mo'r߁Œ]² yżZ1_§›‚“bžTĶå ¤=÷żČq܈Ōģśč ‚D;D.Ӑ¾»F³Ļб” vt¢ÖFūs*»ģ‚‹\˜ŁŪŒŃHOÆöĆÊ¢Ņ’żļRå~ģŲz\H€ÅČĶŁĆŽ{žVFń¢Ļ"¤^7T¼ˆB¾™ĒĄéŠŲųp5Ņ¢sN5—±ģ” {:«°(Q9†b÷¶ Ų¾‚i‡’ÜeīN!±YĶvFY°{¬Ÿ›~o '‚Ä ÅZ`®eš}Ą`‰•ĖīµĪ9i„]lFMNҜf4MŲK}ŽŻł+Ųæ¢Āū„¾Öķųš-«ćY’Ū‘üõō«™æį¦róX*ĄĘÓĖ^ū~n¾ńķŌ‰»ī½†.Ē,§øĒēÖ½u÷ŽO"mƒAR÷øc[ć&Z“ŌNŲ±1Ōó<1™eįŸué‰JHąµ’ s9“Pz aĻū.ģvóLĒŽ<=e=۟¹øÆŽ¦sŽnī“‚\Œāģ¼õĖTNrFl= į†ž½%±]W×?…?\¼ö(šēó3ēftB2ēqąŚ³‡ū‰Ö‰CŁć6£|¢ŒZ2µ1ų”zF’ŽŹō$¬G©| DPީЮ\{­<¾õVłĻŠ#ōƙ3Ėæ~ųį„ϑ˭S°¶F„E("ĄK(`bš·°›Ŗ;ŒE\öņ~Äx.DŽi."8Sžż™—†åõĒ‹ŌŚźÜ~—źyęš0 ÷>Ņ¢q¶żüäæépŃĘæę E ±įk$Ģæ/Jt2!©)҆¤šŹĮŒœsµ {’ļaõjQķ×®•¾æĖ—Ɔ °hÜ€“©}!@›n)¢Ģ?‰„¦%ÄbcŒB<[Qk2€hŒNīCq7S}ĄZµ›¢XŸRHaŠ Ó„MŹą˜œMtĶŁDĖß?"”i\­ĒHk‘ŚSĄ/“æ|ÅP˜ ł™³ 2WĖ{€2Bƒ»B`ŠåĄ\L~ ųXß®€ÜŁ•yr ”s¢*µ÷s6É"„¶£BæĶ8„~‡åŁOaśōéüŗ©zZQ’~ųź³y<õŸųńćÉsęfākŲ$Ō'Q¦Ÿ’ Ü̆Œ Ōģz_« ŗŗēõ– Įć†ógäē‰MYVR"Ļ•"=F»zŠšĄ;”L}—b “¬)ėÅówÓųnz‚UĄ•ƒÜXĮ —*Å1weŲyLÆz­YLģC›ÜĶ“i’@·;)k.w80<™ŽžBŃÉtóĀõOQ.weĆrF!Ü܌ó˜z÷[x‡¹™d¹F)Ī‘ŹŃßä—ĻIVŹöųZägģ#?ŌŽĖIxŚŃ—”·cŽłāœsąÖ[įÜsĮł/ÕAäŗ~‘«ĖµĘy-Ä@wźģFŠH'ŪIȘĮ1ž#—q"Ā'ÆżYŲŠPy x©ƒ0©āæ<H*ār¢×˜…“nž)ņē¤\ȁq©Ńģ“,¤čȏHŅ/‘īZn$üæ=ß÷ĖŽ5,ŚQE¾_eŒ£GK_ZšōöķŚ¾ųśō‘yLSŗL*9€ńńR ’•W$Œ/8ź{]§ųO°x 1:¹HŽÜZ$½e'”6ˆ‰Žˆ—Į6Q»ōkėVJĀö¢ q±Ż€•J1PAoÓ¤c^&-ņ2ĖĪpoQųy¤7,ņł€| 2 Åz`‘2Xä ²Š8v-Ϧtu5Ć ś*‚VH0Ø ›žL`ó¢¾üē‰wčÖM*ł7iŅ„¬5½ńeE6@ ‘—[B³S„$ˆŪķęŽŪ&rīŗKøåŽKiŻc ŻśU{,łNI¤ē·z5FFFōŖę³ė9"ĖńžF¬€†ĮŚŽ”‚y „:ĘF½Toüä HĀ*ėķ]ŽCå¾õė¹py‹8* €÷’ųń/PžžźĢ8€Ū°[ŲēĆP“µq Üń]±Ų¶ćå»ēobƒ‚®V€NOāēļŠłĢYOĄ+ÅpMŸŻż–x9;ĪųM2hVZČĆĄ©åĻß8Ó,Pµ5ų”~ŒžH  ˜+-<ź0¾Tž/,”V}Ÿ}?^Ž£ķµrĻžy™ź™"„‹±2¬q‚s(B¼ųī°É ›×"dŲ[aĖ:“óYC6üކ!•žūŁS4f#Q‘RېŌÜĒ ­"Qŗkb»«́‰bĒÆĄ•H!‘3ģ)œ€öõN5@*m÷SƇĆwȍ=/`Ś4ø’~‰5 |„š’%Ņž'#¾ż6fūžˆōūM$Tš§¶8}€³ž³}‘Č‘†B b ÆEn®›ĮGCŖ ~—+”=pÜqĒńÕq5|źŚµ_|ņ ļ¼÷*o¼ł0ĒŽÜHjT3®<1Óā’¤\Ußß2öƒ(ą ¬²€„Qö£8/Ō1&.”bųštö•’ę‰#’»ķ¬­Ē]=`1 GA„¢ ­cĒŃ&K”b€eѳԙĶčė÷Ņwų„|4ó#ŗ—äńŠR œż_ü}ާͳ?‰žsŻ ^²‚\iÆŹ©äŽE7_ ŸžČeߕšĮ97üņe.ŁøœyĄ”¾^9æ‹?ŚÅ†ėŃT)Nš$š³_W°ĖćįĮ@€'•"cx§––2-l×ć #Ŗ¶Ō ~ØŚčwHIA¹\M“UÕ)X›ž=$Āæ~pß}ŅńfčPšŁÕ>ž}¶o—b~C†Ą“OŹ#HėĄ‹/–ŁŁ0ožDV‘ē_„öTBČ»K"#ü”°łĀƗ|’@įJ`.p2>Š–Ņ•aĻ3ˆŠ†½ ż’x¹ēŽ*¶ÖŃhB“[ŽCB¦Ÿ&¤XīīEZ™ģ˜ČEøĘ\qEł×wŻ%BĄ¢E0w.4o.ƒ÷Ž“ē_ 'ƒ½‡mqĦxLqnABÓ҉Ž*r_ćGrž×ĖŠ»Ęźż’7&*ø0ė“ęn„šuč@^B.›āYŒEkĖ =Šƒ6(Z¢ %9÷ŹĄgB‘2Č5Y ¶+ÅV,vMv%씀ā!NŻ K@a\²”‚žÕ¼?L}«ć.žĄe—^¹÷™kČÅ^Ćŗu˜?ūEN:'wÆóūŠP–Ė2ńxżøfģĄWƒķeģQąÓēp)%Å`].–G›'ąbūižŃ§1ß ĪhB†·˜’(E/gŽ£ ²M7/]ś*¾œą?Ņ8®“˜!†Įž¾ƒ™ņņ÷äÕv_ļ:Ÿ¤G?:pzbGtȰ,šGYl6”¢-@i!×XAžöķ[XžRy°ć’ō$ĪrŒÓÅK‡äŽē“wF Ē•ņpˆÆ”ē/ķĮ¬·V²ėeģє1%łĢšķŽĶ\ʉėq&"næūvfg„ķćÅóĀäÉ\t÷łxų•W˜1n\Ł’½L؋±Õ7ų”n^žŹhŁåń0MęTWX“HZżżś«ķK—Āe—I“_j*ÄÅĮw–Ś·— …ƒ§O—Śß}={ĀŻwK„įwßÕōPˆˆ?EˆPß”õI|ß ió÷ŠżŚ…œū>$ō `Rø÷m`0яż ?pŅ6S  ZؾG.6cq-ĻhŖ-ā=ÆŻ»Ćķ·K€gŸĆ’ż÷„6@÷īšĶ7°ukč=›~³få[’ŌÉ»««÷ßĮB<źŁČyņ0Rˆ®^ZV?”>Į Ąf$÷æ¶E*ē7ŲĻßE¼±BĮ­"x’ėoĶfOĖ.R,ƒ—I¢e‘`˜x”aŻ ā·L|†A©‚"䛊ĀÜ|J;A`v}Wl6P Įßc8Ū\­Ī"¹*—/¾½—M[Vsß=`TÖ?°†”””p歗H™Q-ć gٱ1ģt€ØŃŃ5ŲŒJŽ÷ģZ^Ž›H䮀é)_ą“8®PŠ”¦‹wĘ$įēƓį-ęc$jÅBž—­€V€¾u5Ķ/»œż~ā>X:Ÿ=P”‘ڧĻįzīF6)¦›g^ō‡ģ»›ŅāĶć^„8 šeeøų5„÷ĻŚĶ¢šõd¤1ø“˜ćéĄ;ķŽ `ŽtžĻ ŅĒ4ŲŌ¾=/~²QrtOlŹ©Ž"FY‡.Ćd‡ĖƬ£Nā“Ėæ-ļÉžj"ž©p]ŠĒJŃ (1 6¹Ż¼žü\&>°ņó?¢é†“:Ń¢²łq~[ CĒ4ŲnžRžš˜.&¹<ü@°¬Ņ:žR®0 ~}q>7:ū3µ€9¶”?hŗm×2@ēń{\7śż¼¢GĪzŸŪ,‹ö¦É”ńćĖŽx’ūļs»×ĖJŃ’†“6Ž÷ķö+‰ØŠXüP;£?œ^½PS¦@ī7Ū „KV .N üš{ųš5šĆ0r¤ééRĶ’ˆ#ąÄįĒe¾ōōŠrJĮ”‡Ź8$­0Æv2Y6RlƀPqÜĘt¬+  ’āQ׎,NŌ$HźäR¤ĄHĄŃPikĢ÷ ?R@1æŽū¢Ńšh žŲ²æw b fxę óé%)žēł'ž(9Ó¦Įå—C—.Ņļ·Gxź)¹Éņ \rI­‹)DĻį®+NAĄ]ĄŸĄ£ˆQzt Ö]S¼HīÜ*Ä¾ÉżĻ¦ń…ž¼j?_ ŌÄQ\’`±Sś³½q,€ĖŇįbD†śæ™&ß*Å+Ą˜ BßŪēc’ĖÅ1–ÅՁ·!ķ؈…’;LŽ.å›1&ß)Åé>Ÿ>ŸOnłv€§@C3ųĀj‘8uNJēÉE•-“n—ĀŒńūMRy CźŻygt m[šū!++“Ž={Ø ^$-ĪŪ=². īD `ĒCPżXóšŅi«7• Ė¢³½/±K ÕhP“ Ł—8ķ~źÄĶ7K7€šĮ /„I“ÄŠ’ē?%—ļųć„s€RpŪm.ųź«ŅŽē–[jµi'¼/¼åO,"!„;’äsĄ¹Hˆ[\ĖÅ …x0¶!ž˜…H4ķ*D˜(”qE±$Ÿņœ‡¤7¤!ŗśBjvų q#N³ņČ\N BHó>!Tq ā’kV“¢KŸ"ņŚĶąœ ŽęĮū&1dČ ų|>¼ę  ‹V¬9ÄoSŻČx^yķ>śā12.؁§†g’εX(üJQb ¤µ­¾Į QĄ!£ C)ą/Ė’(Å *ĄP+1“Įŗ“fœõĘ2vlYÉÕ@K ’œ;yYON§č–”\æx6g©9Ū9õ֗™ōÕ«ĢRŠQ–Űhūą/åB/öW{$ atKŗųKy 0 ƒŁ‰©ÜŽ® ›6ÆbˆÆ˜W–„<”uZv»H柇€¦†Į2¤2w‡v±qĢ!pƽ­łn7“pįčŖ‚œįŠć›šżšū5ŪĘæĻķ꾔¾( ’\ZĄĆJ1Ō pė¹-xó“ģj“EtŠ'*Ņ¢}|~+:+%bŒįb€éa‡#Q7KåČe>y”ÖŲQl.k3¢üĪn7ŸłżŒŗµlI׬,Ö9Ÿy&7}õż•ā(¤­ģ–7‹ł­²PžäfÜVø‡“.ó’Ē5Ą „Š–jbģCõ ~Ø£?G’©Ōõ¾Z™ąóI„Ÿ3ßoæ-"@æ~šĒå€łóÅišąƒIXņ‘z1YHĮ\-ČųåY¤0Ÿó;ę‡R?@Ł’«TE&"4šŲöIÖhö‚ĀözŌ…•+Ė’÷Ü“'Ć 7Čs„ 9Ī:KžļŲ}+VH7kÆ åÖå{ēĘJPHdD>9² Yū/ę[Ÿųū ÄŽü¹Q’Ić4žAѽ‘ć~”Yūx‹Ŗ=†õEƒ©ĪÜTī6~¬Ķ²M[Ą©—­å߯åž‡ī*÷Y×¶#8ź°›Ź^wk7’Œ¾•½.))įźæĒÜÕ8õ’š’ÅyP°ƒ€ %¦E~J<„§¤aÕŌ0 gJ%S]PĮ² ;t “ŪĶ?± O?y<\ÜH|šĆJg™`P vÓÅĒŽńļšō÷†hEAÅan·=ĄUt>æĆēækI–ÅYö|ei/9{øHĄ`ݐ‘Œś:—ÅÆ.dĻwE|—(•“•āÄKŗÓ:luŽ”©ŪĶæfY ˜e1r–Å€=Yœ€ˆ®ż9ĶǤi%¼=ÓĻ„Yƒž’™÷œķDG+ČU·M÷óŲ§9üłMæ9Œ³Ō•›ĻŲźg3”Š|õ‚ņן§®%n÷nž—ٰš„ņF(·Į6g„03Īäó…RŲ”Š>~Š‹c¾óČxąž{Ä)šąƒ1P ,¤.ĪNdLć¤ČģĄ¢}"²Ÿ€tNŖåZ#+⼘Yż=ÕWŅŽOżGŠģ{v#^ÖØ^™š`Ņ`ĢÉt ų“i#€’“”W/éšłēpŹ)’ó7hT ®ň§Ā©¼KƒMį“{ =/Fnl' ak±ģīGșˆ°žDD‡=4Nć’Zą2ūł…G·EŠ,žÜ÷»Ö0˜jŠüÖž²< “¬éņ¦ Ž9c;k’xŽĖ®šƒŪ.ūŁŖŁ:¶<‘ß×<@›“ti3œŁKīdĆśmœ=ę8†ŒÜN|³źåūG²y!(ńĀåƹ)0[=Zž£Ń ¤)uš*Ŗ1 T™°tĖ2Ē\.ŚZ¬ēŸēµ°‚otźD«²¢&?d„}—Ł”ļąµ]im˜¶ĖNBĖĶeaEh}Ļ($d¶°Ē ł*O]Kœ”Ō·‹ü¼|kĀ£OåĖ9_ÜY[éeU靖;®{ŠĒ+|Ł N?‰‚WVŒ® ”ĻŁĪ_œį=ĆÆ(_ćÉé só‰äļ*Ȑ Ū‰‚į&‰¬š<1–f-Zą]¶ŒĪ>ƒ®WJ õš&’ɶ# Zµ"sĆY¾ø˜¶Č5±ŒøøŠqQЦ‘ŪœŒøUS&Ų)=#ĻŸOź; éU]ƒ>^»¢9+ŽČ)æ-‡6Żøūj.Z/ŸÉE(Ł—*Söµ‡쓱jc?įų‹TR‹%=rs„Åo8Ż»Ć2»’FĖ–bč+%ķß~[:¤§ĆŖ°˜‘gž‘NB<M›Ā7Öø@büoEī”öwh"ī~¢%”ŗBłō™Ń)°żą ¤–J)p Tl§Ę+HäŌO$‚FsĄ”;D!Ęó:ąØ:ÆLĮņåpĀ ¢öƒTōżśkŲøN;Mrū®ŗ ę́·Ž±`éŅZoŅ1нŌO±ŸpĄook2Šų)`ÓhCķR,{ŁHŲā.$ā`śæń² glLš~H‡€y@ø‹ślBQŸqp£r (ĪßĮŒ¹ ¶+éÖÆ˜ķę°ssōŪĢĻĖ'šóņ øSW3éõŸY“ń–m|³VŪ[? (T™Ź æÆjń*Ö¢€½|UŪćųćIŗBłßz½ü])NŗįFĒ’œĻvī¤'ö~Œs¹8Ųmšd†LH1@°(ʵs3 ƒ@Ļ`“3Bõ.š{Ė¢ ¦8•ķg~@/$%O¢„Ƈóąē” •œó“Ć×`l9ē†ŠĒŪp³Ķ©O;£ S ™]Łń „ī‰a°ģ֗Ė Ėå2YoA)ŚfTćŗdXe¬]Ė®µQš%š&Æ^z)’t^OšDöŠ”xxĖŖXī“ÓŲ5y²¤”YŌ“‘ń§L`pV¹h ,KžS®8žōń8pxѦÜ֗ĮO.!?ņ¼½Š—‹ń–ÅóĮ 7†“;KK+/ģƒŖ ķÆ 1äę"mŪ*ˆ<ééåóöAŒų!C`āĊóL™"‚o¾Y:E¦<öģÜ)©ƒæż&ćƒjb!÷É­H‰]4Ī9ÕįTąHŗā”„lŠśŗ‡^<öz"ü¾—åžEƜ’B¢5šƒ-hö%N/ŪłÄ@ųĻBĻO>YŠüM›&mJ„'8\}ūĀ/æŌŖĻÆC ó+@nö‘Y»±Āń†Xöc¼ Xäēw@ŠWuš#9² <ļ IDATpĀ5©Ų;øö ¹Šįž’Mˆ°ŻŽŽóŻ[(c’˜ˆ ŲFS¾*ń9öćBå줨ąn|ėęóAóCc˜ŃC»¶A‹Ōžoe}ęT¼~)£ŸN—6g`nö¤Æ”y«_¢žļR“%)>Ģ= øźęž4InNzjO:µ>…ķŁóš IˆkNēįv%²fūämˆŗĆ9› {#r ،‹¼¢–XįFŃųØK–§²Pźŗ ö:XøžŲB“r±Ō1 »ŸÄģ%Ó(’F@HéäC'ŗśæFc£;ÄńpĻž/–+>\Āü{ ʏCß0䳯wĆøqšfķ‹%ˆńŸ‡厑^8‘ŽPŒ :¶#^ś6H(\Kd€™Š„·% 7_vn+”T‚BĘ’.Bł‹YČ «ˆś‹lŲßČ`” ņż.BćĄIöóO+YĒÄ0ˆn62:@põL–w9†Eé]łłŃ‡ßʐ#īeŻŽÆ9¬Ż(žÜņ­› `ģI3É)X…ןĒ!­2ųiŁæ˜æŖbtųϧKŪ¼?{(ƒŗßNR|kzt8ŸC[ ć‹yąöērŁ) (*ŻA©?—“ś<Āėßõ&·h}…u-™*×e’…ÉF•@^VÆņ’ĻhĘRuDˆ0ą ”å”Ҽ-e±H÷~Gé“ļ•āLĖāŒ‰³1zŠ1JP‰ 8Ło‘n*Z*E+Ė¢®é@k·;“N;ŖąV Å-·ŠoÜ8mßĪhĄm,/.åŖ+Jõšūy±Ŗļ`„›aŽÕūłóĻ'$p•×˧@Š×ĖW.ļvéĀ­kÖH݃0šŲūrvVVY'„hx«ų¬ŒÄDrœn/7z<ü’ŠŒ]/m+«ō=bĆ`ŠNXŅ%”ĀĒĖ•¢£„8²ŠĶ;Žł`ų¹3Ö+õ ƒ·m#ųĮåāŸ–ÅcJqÖŲ±Ü9z4†Æh"Šė#Ÿyø5`ŠČķ5:ś9y€ü‘8÷¼"`%²}sų NæÖ­„ˆßȑRō÷B)}‘”žo¼!c€ž=+o<{6\Tiļ ” )rkƒ7“ƒ×ū_ˆTŻ?8Ißxøø |ƒ«bdģQ×.PæR»ōŃ Śų×hŹ”;ĹÉ/F”ójµ«óęĮÅKŲHĻąW_…Q£`ĘYUy˜ź‘CØåϾŹ÷sBšƒČ ·ŠŽžVä&Ų  ¦ @x$ȱö"ƒ–BBżŠsƞ#"AĘēõwøÉOψų|”kį'Q–æ˜„ĻžČ€¦Q3¬^Š=˧ńś WÓßt—ztj}* Ö>[ĀļpŹ€ēX½ķ3¦ž~cNœŽa”[4*Ÿžr6W¾œł«/K8®ēxņŠ6šžCQŹbō SéÓér~ZžÆrĖfm€m‹± ČSė [:Sō…Ż[}bFz]DØŗņz4q@ée?Żńüśr†4†›o•Ÿ3¶ŸÉ€ÉEe“xūŃ|«„9{Ū'ĒØ=r?Ļ"¹č„>NŅf-¼ųŸ]©ÓäMİo¢Ä čSSĘ@čS©TZŹ7‰‰œ\ZŹd ‹eqńڵ—œĢč¢"‡Ķźœ(ł†Qö+D®µ> Č0P¦ÉŠźbt„’ćH –ĮžÉå·U)lW€ķiÆų¹‹9*Ąp}’Æ3-_Ų@V…ó $Ś”‰'bZc #¤=|š’3†c•ālĖā~‡ßļõWøFqƟ™L¾@1 ¹†ĒÜŲ‡}fšGĆBīWŁČuø/„:‘”–Ā1Ē@¦]F83ī½WņłŅÓ%ŻĻ”øž{Nź9@ļŽ”š ©‚‹Uk’ČøeR+g2&8˜«’OG€ąv¤KHGą&{r āÉtąq$¢Q£Ńģ'“ Ł—8@!Rqżļ±ZqnnČųOI‘Ŗ’}śĄŠ”°øZþ* "^óŻöä J÷Å )<œ?ˆ=FI aSČIČ:‰é|VvžF5½ƒ+s7Ņ 8<ąŻG›qĢ]¹”tóų“ƃAbZ¼o’üŃ ēĮv¤HkK’Ģķ·Ė”ž.¹¹SśŽ}FžæšÜq‡ķŚÉēž K–@ēĪ’0,j³Ģr‘k’z¤§ü*ÄūJiŲtF ¹š5!ų'"|A¾o83€ HČųhņŪż•ņ6†‰Ā»‰Ā;›Šb¼F£ŁGh@³Æ "éw‘jģ)UĻ^3 fĢ—Knģ;vÄdµłˆĮ½ ™wBžöõ É"”×ļEnĘ®°É$dŲ8óŖ°ē‘ļ5”A_}Ńx¹ĪmĘRq°– œb?÷ž»€ē‘~ĘN׊™T3üø1°üGųŁžė‡LjщŽMŪ†ž«sVÜĻŲ“fpÕiĖųę·+Ų°sMŪa&%±ŃHRŪqBÆūrĽø] ¬ŽV>CcŁ7½‘ 2Č3 V™°<¾ 9ķFV=(Æ©(`^ŁŗŖMx€ ÅŽv²Į0Xō² Ē® #”®ņŽŻvŹ8VQM쨂‘Jqxžn)¬fš|öÜŚˆüx£,<6ńéó‰»å£ņEųŖ Ź€pżBąö ā™ōńV˜Ķ#ŲĶ Ųe+‘‡TsŪUrų¦>G.†Ŗŗµg¹0}ģEŪh"Na!K ƒŸć-‹›SSł(?欕(›73c} ĶłĀ9ovń? ~ø}głVŽ7o ’į&Œös˃Ť§\¤…ģ’’Bģ½ēy„ģGupŅÖrcūQ¤p[wg†ŹBł^z©ā{99Ņ h×.ŗwĒ@·nR<ų¢‹`Ó¦ŠĖ…$”óæĢž6"Q>ž}ōtą+äæśP½x!ø[| œIy`>2>j7]‡D(ž‡D'Šˆ8M‘ūq"ø7AZöARė4Ķ>F š}ę· É·¾¬źŁk†RRõwÉ(ŠŌŖk‡…(żŪĄnö{<'- H؎AyFE?ø©—`!‡hEĮĪ$bķÉČąä/H_źķĄH`j%ŪI¤źD*VA1¹¦›?~™Ģ”a7sy\¢¤—{³xsĘ1ßkē’ļ|Å^gd^ēzy²q䇄w³|ó;eļƒ!żeē*ųć+”’"—› ƒ.7ėū5„düųšŸė•yTk+ Ųė,£eKŚ`Wė7 ¢ö"1M¦Z½€£’ޚō;Éŗ.…łŁŁāÉ.ĪåÜŃšPär•Õ"HiĪ·y;č¬ā„3=LŠœĻ0BŽę„3éBÅH˜ŹpĘÕ.Šś¾—’õš`¢RœłŲ(āļüÆa°B)F”č6e"®Ńćėvµ÷ ‹ęU„k„ce5ŚN™‚1:J®}b"w””š#VPĄ/†‹×MȵCQˆ?Łäé;²Ų 0y(qXœX.“÷õ„Ÿsć YŠO«»ęT’÷ič4‚ˆ‘¹ µøŖ¬¹P%›7‡žoŲ S5 ×’µH4Ēb$÷ß©ü „ž’ˆ8.Ś"bJUõ5"ÉE¢Ž@źä|ƒÜ3Ø¤0I£;‘ņtó‹€±y ‰Bų©½s P›1ƒƒo<£ŃÄ-höAäņŅ>¦Uճ׌¹±ķņš‡e»”©žŃ }šWūńG*ożćT’_ ,Z#Ž’£ĮēÕHį!ˆ.ƒxFŽīE…µ|Ķ‚l޵‰isß䈮ęXÓ-6EŠņņĆŅ»iŁ“7=¹ˆŸ–‰§>5éPņ‹eÄmV#’æ2 K¶Ń$±}YŠA8ł;įĒ×@Yd™Š…~ “RÉŚ›÷æ¦ŌV°ē)#攦Č`¹Æϲ‰TŒ°€Ū3;›įĄŪ»w³Ć4™„Ć,‹;’“ł:"wž;:“²aCÅ"W£3Cķ-‹óuļ½Ķ¬Hcųś¶ĢݽÉņł+Õ70«Nœ›ļKā)_÷­€-†‡9v|MŚgrņGć™V“uVB6♬2 œ0 žĘi¾btEįšĪbę?ąęŹ`Wį¶0KPaņbÆs)+V‘»˜‡Ó›7gEff®¦YyČhšG⤠:©.ąD9}7n-Aīł‘6¼ ‘{ĀvdüąĄøļ– ­óžBī‰ż!j=ŒT¢Ź›ō@"2NDD€„D€éˆpšF5öēW$ō*BŃw5įD$:ļJöŽžO£ŃT‚4ū ńŚmG.䉕Ū0¶ųĻ’DŁ>rž4r~u@/=Ÿ'"Ą{ö|ߝļ‘PÅkĀŠ+€Č@ѱ j?6& XZDn¼ĮŅĶ‹ų|ī;¤¾˜ĆR›“„°T"7-+€iøš Ł‘ó½;]ŹÖŻ?Ń4¹m[ bĆĪé( 1®r;Ģ("5±#†a²zŪg źq'‹Ö½@~ńš$“ÅČgĻĪ"f>Ž|‚ ņ XjĮĻ ÖĢ_Kńü X&Ų+Uõ5BÆ©0pO«€aó–£Ó©ĢY;•| 5Ø1Ž$&rWq1s€&ÅÅüģrń!ā޵,N:ź(ŗżž;„‘ŪuŚ-L“§£y“³6²Ó4łA)2¬’ø¦ęę–ļxŃ£É+W–ĻP];Ą~ZŪOU7ł£Ażw03fĻfŠ*ąŃ=˜¹½-hŸĶ¶źnĒ0ČQ *«-zĆL Ó1m² hGōČ!ī“\żŸK ø ¹v˜X,‹ć3Æ·|„Ēų=äQc%>ž#|>.Žp¹¤d#0ö+Ćé”gævźßlD®ĖmźqŪAŹ·Ž]†x²W#įźūŖp,yń“·A¢Ī ūģ8$Õ¢ rOˌXvpš&š{ž©ˆP@(’DŖöļ©Į2-!ćRäŌ¤„©F£©9ZŠģœžæ¹ĄwČ čōżŗGQˆ¹ Ūˆä‚h7žƒ™æ!ƒ“6ˆw’,¤ų¤Ćp$Üæ˜†xg[#’ÆCœŽ@éż?é՞ŒDŒśÆ#ĀÄņ9ųł²|ŻāŲƘ³žZ{ 8÷­Ļ§’ßĖņįq'óžģ”üņēœ5ųc:µ;·Ø$”޹3w1'õy”ėĪÜĢ’ęž[a;[v’Čą#ī)«ō’dž×čŃń|ʝ±†ÜĀõ$'“įĶ/žŹOüDń, Ą€•Ģ6 ļ&‡HqĪ@U,Å_¢ģ½2{U‘ƒ’Ac'–OĮ˜8uG ps^0Č;@Ŗeq9ŅnĖ”pÉJŸK*‰*ø4kF„ĶPćć™PZŹL y^?»\<ĒļnĖbˆeqmr2 >PJ" #ŗ(š”Ä Ɨ+āćy½}{ž|ųaŠ.»Œ£‚Į²4†[¶HEūļæĒērń€eńŠoÕ*~r»y<>žÕ>)–ÅĖāZ·› ¾©äŲ–Cä` U„j„“Ųœm¾Bęb°Ė0Ź·-‹ümĒē²1ŹfcŽĻĒ%H…u€¹~? Q2-į"@xÜ͈v,”ÕDˆāßaOėįwāČ"Ōų@»¦#Ęóæ‘ū`?$ŖąhąxūłwH”IxŲÕ<ūq p ’ŗyFŗ/|\€D|NEQuⱨ¶×²āŠ„ę~Ē(ÅŁķz$~Ī?ś¶Oiį1vå.Ā(,›1)¾%ĶSz•·”³OaÓ®YĢ[ł-›öĮeʱ3w.3Óšą HĖtĆpŃ®ł ¼ž\…Tó˜‹x֝č"˜H1泐āŗdlt",\Ü ?ØdūķķynD~Ē]H:BUEū#ķµ_’ \ˆõ¦h@³?q!Õ`Ū#7ņ‡‘B5ū›ă»p-F¼Ō Ų•¦A‡™j†ü®.ÄPļpš!ŽÆ<IˆC<ü搁Š:äÜŻ¼„T?¾¹¶"˜ZžĀtZzĒbńWW'u»»2o䘧—jƒÆ~k¤ŠCPI?ų5(f(ų:N±tq.łÄŗ W*£:uLbˆĖMÖŻł¬ŁŪ¼%Óß_Ź8,ŽDrēwb²ŲĻ;÷—yøßÅķ–āTÓ`Ęæ‚<¹®ܜ“øÅD0ł~v'rϽÅD­Ųņ€›ŃA‹kPō@žkŪ0ł).‘×ī)¬ŲB±*’aI CųMŒ¢sõ\£ć1C dÜŠń(Ž“YlŠ\w=T,ŒėŌš#īÄøĻFīېhæMöó,BmCźßmH$€BŒėš"}O!Eł@ņśGźz38©Śæ )$ųņ{LG€ocżśˆmöCŗ„w|śéž±¼’żLA"kn@ğb¤ųé“Pķ%¦ “ ŁŸČMŚis,ā­mWÕBõL.Rńw)āż_L(üæ!’ÓŌį„Āś3‘žß"ęy éYüR<é"`22 yø9.³ß9‡ēŪĻ -ӻʙ<1zĒ՜VA„Å NļBēē‘ŠŖkÅūI]+ėē¢ϔ4æ¬óEā™›e)¦™Ė–ē—…ļ”|ĻżBP]ń L9÷ŗé“UžäVģŗq …{_JhČ|uiĹśū“ņB@:’āÕĪžZ!-[S‘ō¬{r:¼H$_r=ÉA¼Ń™ˆ€»ņķydÆ$ÉH@+$ŠmtŲgš*”Eß|ŒA®­÷ µ&۟BīoqĄ"{ˆŒČmę!æĮ D$x•Ź[źöGjė“·_SŌ‹FSļh@³æ1‘H¢ä@Tčnūx?róŚ€(Ü ¹õČ””ƒ×ūŅy G\‚x:6G™g#"L]€„Ÿ¾†\3ļ@<’nµ×qhÄ::")—Į޽ÆF/šŅI ŅßR Ćą8 k›ī4ķ1 OūŽ`ŚĮøGtC^ń&¶gĻ«r„įx aĆÆšē (”ņkNėŠŻˆĒh¶ešƒ;ČŖyäOiHž¹ j@S?”'śØ! 10>óiHTWSūż$ÄÉą¤“‘{y āŁĻGD’\侟oæļžńž;š8ņŻśA¹ˆŽļo ‚Ą_!ü(—ŅóDHˆGj&µEÄ…Ż”ē8¤N@“ūl$ɈP`7!Qx&Ęh@Ó0•> åė]'Rū¼¾šąG<›‘Ļ"$`!ćæįšXpbų_ƒx‚"99v"!Śļ_CČā0É”ō!ł•¹1ßŪ†…1ÜVšł<nĄĒ£č‰A«„;öĒŻöŒ6‡C|ŹŽW˜Ÿ ™«`ūrŲ¶¬€®«`PlĮ`±²ųQüę7Ų¼6ēėČŃH"f“'æAaP>5 j)Į~ĻeĻg!F½“ąEīķĪä%źoŃx’ŖÉČŲ¦%āĮ??āó8¤Ą­S÷i$=3édqlÄü#h'Åēl{łŗŠq¾T;RH£ŃŌ -h ŽšßńšvG*ĶŽ¢žZž($4m¢N’‰x„’“_ļA’+· 9‘3‘ ŒE¼ ‘ül?’Ņr©Ń3\KŅIŠS“*ś˜ƒ”I HW2 t'¤b6mƒ‘qI`˜`ĄWE»!o'$ŌÉѵ°stģ4 V[Šß]æ*«r“Ų½u+^£wN‹ū ķĮ? 1 ‰.Äćļ{?üŚā<2ö­ˆĻ;w"Ån-$ä~iÄē‰HŚŚIöėˁ+‘ZM©P¾;pbō'"÷ĶŌĒNk4šŲ”MCĀIHEŒžĪˆ'v(ŅŖ&-FŪ‘*āāŻŻIØÕßr¤˜[& čC’+ÓõĪE„ØŸŖ˜’'D°ŚŽ£*ŖbŽĘ„Ń­qI™4U.:MŽśŅ½R¬+Å0ˆ·[Ę9^;g°m!’µ אā[›”’ܦ‹Õ® ™Ķr)œ-ó ƒōŹQ”cxpˆŖ1ŹæŠ‡źąĄˆ˜¢÷‹ĮI$ ‰než¦ˆ>‰’›„„ä‰DIFr*Ņ g>2fÓh4 -hN˟$$§Æ=RDķ0$_­7"Ä×p½NOį|ÄøČFŒµHŃæµH @Rq¶±ę’iöNr~$ bŠpB=“+c0Ć~~#š\½ķ]ĆĆĢĮˆĖ÷Ņ?­qs(]Qt1Dh® ’Q$`ąAab P?Ź.ŹeŲ©8ė\ėń±U™ģ²:P“|¹žOĘUž¾ßP­ŸØƒmÄk4±ā.ą䚦Iy‹$ųqÄlCĘcć:Ń菄īēĒzg5MlŃ€¦!ŁņĒ:!EÖŚ!µ:"QIö¼‘į~A$ÆÆńāę!ażYˆńæŁž¶"5 ģłsžŸfļŒ@*ÆCB×Ws9§Uҟ@Ļģ‡!¢Õ(hˆ€Ł ÜMš‘X Ķ Es·›ęJŃEs©†A¢Rø1PXų›ŠÜ A6ƒAŽå"ĒmŸ…wA(LW£Ńh4±!¼ĄūĄ…•Ģ׉pėlæ~IuÓh40ZŠ4d $ ¼÷ok$ 5¢N7GzĘ&!ʒ‡PŃ?’Ć_„(Ņ{ź“Nč’.Bķ~Ji8^GÄŠģ’ŖžÆ!ÕåZ¤u ˆ@µ„–ŪOFŚ*]ŒœÓk‘A×3T̽lØ£Į\.Wk<ĮāŻ­ń†„0>‚øš¹<”zü”īn‚·õV Źēäj4&ö܃“ų‹Ö œ®H$@;¤CŅQūdļ4M½”́@x˟$¤F@S¤ŻO*"$ٟ;…bŠ—"!żE„śžęŚĻ‹µūŁ_¹ž”Čē1üéAįĀDxŽ¢6ö-­ū€›‘ó&œšb€€ÅµÜĘ'Ą9QŽ_†ōaž=āżd{[H›¦×k¹Żś¢,7Ć>· ģĒūü]ŽŲ×ē“F£ŃŌ?)H@ ŖŽIæœm/“ŠŒ4ĶŠ{ļ³h4ūĒ8pBś O~|ŲGČų‡P”0§åĻž¼öćžl÷ćDn$‚į($Ƴż:ŃžĻ‡D*lFĀŹ FžÓŹ(¼Š±6šź7šŅ”¤ Røp4Ä~“AUmČ düOž‹ w#°™H½pą  rĢ­åvė“2ĮjöžŻF£Ń„(@Śü=ˆ“|é„d ”’[Ćę]†ŌĆIC’F£Ł8B½› Ź“3%Š H“ēsŅOū¾Ę)pŲé’+bČ«jN¤]Ļ“HÅł¶HD"åÅMżq”ßcb”ƒ’yöūŸÕażÆŪėŲ€~°N IDATœÆ-éˆp5 łķß!5 še¶«Ńh4šƒT$R!ć‹S•H šF£Ńh4 Ē›nFL•µŚ8ŽžŽŗ51ś+›,$'ļ¤8¢9ąf’ßĘĪ-ˆ!īü…Ļ{ŌaŻ3ģõ|å³$¤(!HõęČsā¤(Ėh4FS’GÅūIY¦Ńh4¦8†ąźnōW6ĶA¼Āˆ€8“PßōG<ņįæĆFDä© “ ¾«˜ļhÄK¾ż„ĄeČļÆŃh4Mu0÷ŻKę›N6F£ŃTˆ!vRl°¾Œgņ"ąś …ź‘tMżŅ8LljŖœIč7½a/ó ›7<"a Ņ!C£Ńh4šźŅ 8bļ„F£Ńh4"&b€}Nżž‘ÓoH‘øC:%ąĄc6ņ[ę!…˜*Ɖ*Y‹“Ɯd߇Ķspx}ģ¤F£Ńh4F£Ń예Wųö½ńļL›Š¾Żv‰“p їG’ÅJęéMØūĆõaļ'!© …0s€=aŸėōF£Ńh4F£‰Žńæšżgü;S&pĪ—†4žE~ĒR U”Ļ'۟ļBŒžh\gϳx)Pč>@"4F£Ńh4FS ÄŠžżoü;ÓV` ŖZ8čOčwńYĐWĄųJ–7€?©üÜxȞÆEL÷ZSßTÖõČų¬”t@9‰<Ī.Bmd]T~ü5F£Ńh4ną#öæŃ9-žŠä§¢ 64FQ¹?ˆü†’ńžöūET^ģļ BēĄW@? +š8°éļÜ žZŪ/ ©W£Ņ…\c<@<ņū%V1Å#é{¹p#UĒąwŽu”朄¤Ō4±§d{J²§D{^ē˜;>ŽF£ipÄ¢jµFs°ć®Fļļ‰Bąbą5ÄŲ aå֞ܩFFššÜµkɶ’’Räx;Ē<€>ŽF£i`huZ£©;€åˆ‡½!āf"Ęd.”"sšŗsšūł ą^`~5–»x›PøžĄ,$?’sDČBĪ/Ē€æńāī”zĖģõž x9Ź<ńĄf¤¾Ą+ĄµQęń ē‰fßP¾{§NéO‹7ŒÓ݆1Ōemkŗ²€R™ÅĮą‚=~’üŸ²³æš‘››‰?>äw ¶kA™ĄrE›6Ķ4o>2N÷˜ęPZÖf…””ƒKsŁóóņ>’|×®Čńö¢·F£ŃhZŠhź† ń®_¾Ÿ÷co¬"}ā‹Š©XŃ ųp ”ØŖ/Oū{Yv,š*V ņ»8aÄ ‘%oŲĻć€õHkĄ©<āä%Ä Ļ:ÅQę¹x×~>Xež‡€Óqć½|Mķ1sp‡q¦¤œž`š—» c„:bA  ü}›×ūæ×·mū4ĖėĶG"N|„¼ŌŽqژ)Ėė’÷į‡Ÿ˜źv_é6ͳŒŹÓpj‹*–löł>|mŪ¶Ov{½yœĒ[£Ńh4 -h4µĒ@¼°K©a:M·npōŃ0}:ģ®,ˆ;¶(ąą Ä;œMČ«¬‰ ݁ H FąO±ß[YÅr‡ cĻFž¾C¢rģ÷ōĄ³~8x8Õ~ż#Pćc'’³’_*v _Ō ųø ’õ¼ˆŌŲMØ„`$?' QĒF|Öų‡ży$&!ĀR4ŽAč©ö¾Ģ€9įšĆmļń<ć1ŒæģļŹÖ|™•u’ōģģH}"BCƒūuēźŽ9²]»„æ4mzWœĖu‡аŁod’{÷Y].~üs¦fŅ“M²ŁžķģŅXXŠ€T‘,č½X°`A*^ėėUĖUы‚ (EŖ ˆK/R]ڲ˖l6½—Éō™óū晓9™ĢLŹfŅxŽÆ×0³s¾§ä2Ļ÷ū|Ÿo$ņā --ßxa``Ņńbæßs„ÓE)„Ō ę½‰R*2;®ą ¢^yE^żėšā‹ąœšÅł\H0·©jķF;óéątą$$8žļż<ž'ł|:2Ż Ż»‘’·0|ź€])R|$hĻü„÷ v›‘zŸD2 6 u īEjŲmHžļ 9Ė5½Y€ógk×¾k™ĒóĀLžJ]®ÕÕÖ^ū©%K>‰ü’«BjRxß³õw„ó›kÖŌ[Q±Åėt~m&’ó<žĆ?¾dÉ \øš½H=JdŹŽ]¦U)„ŌŠ?6JŸĻ_֍ÖŲå‚āb'C­³Ī‚h|"©`Nݼ™ŽŽŒ>…Ń €|Ū‹Ūū;ŃĆœ‚ —!u+ƒ\ŒŒŚ3Ė1> ¼ iü Š“”Ķ7€£:BF&A– ¼ TN†?%q Ņ)±łZB2žŅéŌ |œŁ?¢ßß’r8‘°¦ĢÖ9źĪŸpĄ)5n÷½ĆX3Ż“ĪiŽå>ß[VV<ŁŪ»Ō2³ń^+„”še4@©ń³:ŽKć_’®ø"õļé°¬] ?śÜwŸL 0ņ;ŽV…v›ųgńB5­¾œ üIÕ^t䀣VŖžÕ#wņ±äóߑééJ€÷'_’™£ ’Ā’'¤ÓøY¢šKH Œ‡"KŽ‚ülü3Łī’äž7ńę-:éøxžüĀ÷Żč5Œ/0ƒGŌūµ•+¾Ōē;ł=QŠŒœ;™Į×m3”eQārŻ5Ń%ż¦ˆqPqń’½rå÷ ĪUČōžf׿VJ)5 i€Rćg ©² ĒŅųWæ‚Ė.ƒ·æŽņ8ūlxģ1ŁvŁe°u+y$¼ō|į šƒäļĀ‘ŃŪ…Č(rŅ æfū‘}H°šdņżĻ$ŸŪ²ģ{$’Žp}–6ļG‚¾Ü[¾Š„ ’Ž“ż^CVų"’Ók»F€³‘e—e9ļ\åųčŠ%'VUŻī6ŒwM÷ŌE•Ū½ęóĖ–żtiAĮ”Ą¤ó§€™”€ć×­ūR·ū¦™’ņ?še>ßq_Z¾üŪN)9™~įF~/Ļäū­”Rj–ŅžJŸsZéóĻĆ%—Ąu×ĮCĮ5ץŸ’ ßśüš‡š±ĮI'Į—¾$—]uułŗt@:*H}ŠŌ™³“© n Ó9BČRŃ,ķߝ|īÉŅęćÉē #ś õ">f{’Į,ū¶#ÓCę6?nŪ¶Ya7R@šĶĄ8©®Ī³±°šF—aœ6zó™£ĢåZšŁe˾[ćvˆtŲ3f*ĒĻ8ąEN篙e™MĖ 6|eŊÆ;„Ąę|¤ć̃~FSJ)•śĒE©ń3jcvė­0>””Ąē>\_ž2œ¾t XöģĆ‡śśI½ŽtåČĢBfw‘/%L$@_Jī*ūĒ&Ÿ·"K@¦;88łŚ^üļƒHgČ4„±(Eź|éXxł›óŌ1›€ė}EEævĮYÓ}1Qév/¾¼®ī›>§s5P‹ü?©…?^³ęŲR—ėO̲ąß²¢°šØO.]zP‡L]°g(„”R“F’°(5~2‡~\b1$Ć®+Ƅߞžö·‘ķ¶o‡C…o„„K÷óJ3+DŅ’ ˜™ęÕÄt ė‹gS™|īΰ­”h`x†€µjĄVą”1^Ė…Čˆqé”ų5p°Š¹ß`Ī_®_’·a|pŗ/f,šzW\ŗxń'‘Ϥ`¦„ŽÆ¬\¹°Ā㹩k2km(-=õœźźw SeŖßÓ3ķ~+„”šåōŠR3į*ެ\ ?ž½Ķ¾}ŠÕO? ėF]g`܇ć›Ó}!“įŠ’’ćßQSs.’ab-8S‚Rcøė¼ŽßŅA1ŪoÆ®¾xMaį‘Č4š ¤Sc¦×_PJ)5‹Ģ„?ąJĶFžŁI$ą¶Ūą#ĀĀŌū©Õŗ»įSŸ‚æü~ń‹ż½Ō¬U ¬ł¼s= SāūHźæx)ä·)ąw\²MøĪ¶½£ C¾JFkI­H­Ųą\åųŠāÅe•Ļõ†üŒĶzpÖ¼yē/ņxexP:ŻŁCą¼|żśO¹ŽS§ń:&•×įš¾Į‚Kŗ³©£RJ©YB;”?)ŗ6ałōõĮOȲ\ŠÓ#S ’łƒƒR; ¬Ÿ} žß<žī@żÕČŖ÷—'ŪüYIĄb»4—Ēxž‹“ĻĄķūq½³87–”|Õ!ĮۜQąt¼oŃ¢÷#óÓķE꦳( ćK+V,,2ŒÆMć5äÅRŸoŁ;kjĪFV›±OŠ„”RūM;”#łČ4zĢśūįÜs„ś’Ą 7ĄÕWÚ5’!pļ½š‰OȲ€_łŠģćvĖōICŗ8²Ü›v¼yģŽ…Ō°Ų€w;ǶżÆiķĖ“Ļ&Ćń¤:n%s±Į¹ŹńµU«ÖxœĪOL÷…äĆŗ¢¢µĒWT¼XŒ|’XED§ćs„8W|Ć(†óēŻéóę^ģr­F²fJօRJ©9@;”3łŲ3ėėƒ  „ļ|GVøōR(+“%/ŗī¼S¦Üsü{„€²\\ķx3ź^D ‚Lxø?­]oņy¬K_ž„ĢųĆž]ā¬bĪ„ĻwfĖśóćeo›7ļ4ä’o-ӛšīųöЇxŽ÷Śß\qV/Kߚ«ęĢb8MN¼j ŽöŲVätœ[Ss&©,€™T{A)„Ō,¦H”š˜ķČčł~ūūßĮļ—•9D¦,Z$Ł·ß55šŠCpśéšž÷Ąg? ĪżK¼ķCFs#LŅ× f½‡€Č vŲ^~ DZŠ’Õ§ķ;×9¾µfĶ:·Ćńö龐|ZTPP}BEÅ&¤8¤= `*; ĄQķóż?Ņ>ƬŁÜʳ{3ļ5Ø;½’%‘ŒŪ+/ßPęr­dś;\”RJĶ!Ś Ōų™HjóĪÉ8XW}4„Bp÷Żp≰i<ū,¬X!«ƒ°~=|łĖpÉ%šƒLųtQĄŸ|„Ń)*·Ē€‡“Æ? ü ™:P ¬dųߐBąŻÉ×äĶó}eŽZ·ūs¼ ž¦žRYiuT“Ŗ0•«‰_]±¢Īcē„o0Sx“Ą“ŗ_³\³Ļįšœ2oޱČ4«ĆEk(„”Ś/sžĆŠRyžž¬ƒķŪ?ł ōöJĄž=pŲaR$šÕWįŒ3`Ū6xåøöZxļ{G?fA¤8›•ĻŻ\½É™ĄfąŃäæß<|ķdx„ū“‘Ž€?OÕĪĘ'źźę¹ ćĀ龐©°Ģē«©ół@F„Ė™ś¹éĪE—dZeĮ4eT}ÖHv‘9īÜQ„„ėŁį2Å•RJĶr³éO„R3EIŸ`2:8G --šÖ·Ā#Ą]wĮłēK@y9|ģcšĄÄĻ܅0ģE:¬‚€JeӉĢķ?©źßš|ņs`±–bkE–|³p¬õłŽ=Wēž§3€“+*Ž@VØdj§8§×06gÜjCWQ¼0Ź—·Q¶<<“ŁU˜ąˆĖŪš”¦ś=K—EŲōfÜE ¼q6}½™sž¼‹3æ‡ ŸnĆįŹżėŃį29āņ6νó νó Nśq%‹åĒāˆĖ[Y{įšz±'|Ƒ5›­÷ŒŌW•ÅÆ·l}qń: ép±¦čē7„”R¢@”æ’J’,°w2Ź²wŻ%—^ ńägÕŖ*ø’~é ųō§'tųŠŽt=Č4ĶPcawē!éČR ĪY+ø‘Qį7ąņ9ēO÷…L„ƒKJ–"󐬏©š`|wåŹ#†±2ÓFÓL¦‡zœ¬æø“ŗ3S+¶.8zƒ.é`ń[†Ž[t܋Ž :čąč+šYvj–ŠžļBJ—‡IÄrIk6÷pątR’@Ūo®$5ˆ…å£Õ‚MƒT4|ńŒšĆ”ÕI5 WĄ’P¬0u”RJĶ!®é¾„f©(0ˆE dzhkƒ#Ž€ķŪSļÕÕI±Ą®.xŪŪdĮ čC‚’6$ ˆÖP“ĒŖ‰1YUą.ą ąši»¢ü36WW—» ć„龐©Tévū–ś|Ė‚Į]HqŗNRŠłś}bĪR·ū¬¬-LĄÓĒ‚Ś_,dį&?[UĄ¢cõøXzr?»ļ‘žŖźĆ“>S4ōzׯüū—5c¾ØyéŽVĄæ’WöŁvü“ėI»Ä„µĮÖf”[¶¦°°ɰ:\zŠ.J)„&H3”?ł ;܄ӓŹüx <öģŲ§Ż;[hAҳ[ŗ €šL?~ƒdš¬FV ųé¼ <3Ē‘eeĒ£ĢÉ.؈qāUū˜·>˜«ŁŒ²üm}œwߎ¬)š‡•”,GR«@¾‹Ó€Óćt›µ…9|4½ł©bŖ ā.–_s óÓš`)‹Ž÷ćōŹ×Usx€–g„tEø×łcüø|c’µģpQ¶2L唑—“ĆH»i¦9zĄbÆ·ØÜåŖE¦\”"ÓMt5„”R¢JML!õŸņu’UīæĪ; Ŗłß4#ėĄGŠŃ#5yĀĄ„HrFņõ7§ó‚ņ̜>—kÓh ]>“ŗÓū(¬‰MĮeMWaBę²g 1Wų|VJz9PDj@¾uåå^7‘­i«Šüd1†Ó¤ö(?%K#-ˆ²ķĘyø| lōST„Ø6:”šĀÕó)_ęģwS}ČŲ~پz}ĮNo»~7ė/ī~æ2eŒųQļšaƚ¢¢ÅČż.eź /*„”šC“@©‰1‘i}Ą ĄŽ|œdĒųÄ'ą#ŲÄc‡Š„¬ń^tZ ¢U~ 2Ü?ĶגOąō:YRĖh˽ĶH£T؟ļń” é’e¤źäsTŚńīŹŹÕ†a”dk`¦ÜŻÆūõøXøiEĒłi{¾Ž^:_õ±ä­Ō``Ÿ‡ĮYP ł©bīūąr §É™×ļałY}™Odīuņ·‹VҰ„”£¾ŲŹ ßo“]ŠČū—ŽI!Y£ńK Ŗąæ„T€~†SJ)5nśĒC©‰‹#óč["# “*‘€›nJ~°łoDęh×#SBhśæRūĖᄺŃ„~~§§æĶ]œXn]jz {Ņ|Ēė1 + -$•Ļą(ĖRüoˆ9<åŽL@ĖÓET`žƒ4>*} [JYx¬ŸyėƒC£’–Ž­…Ü}ž*š/ęŲo6QP1zĻkøĻÉc_^ĢÓW.dÅY½,;]Š“˜¦1r EzVĄj,”—¤³Å>åb6u+)„”š“@©żEŅėŸ~;ĶגI?üļ¶#™ČčæRjāŒRp; cįØ-­Ńōä_ÜŽÓÅÉ?mŗ­8§—W“ ŪķvpŌä½Õļīaó?·ó­ÆržŪY{ŃčÅ@=Čłlē½O½ĘÅ/¼ŹI?i ¬.Ģy÷ķ źąTM‚Ŗƒƒœ’ĄvŹVH?ęhź†aĢ÷z+‘ō« _ėÓ€QčtÖål•aĽłÉbJGØX¢)ٰoK)Å "Tя¼pu-._‚Źõ#ēög³żęJķ.Ŗ’éį>'ž²ŌB+īā…5Q['…™ś¾Č„Ģķö!÷¹ˆT@¾ī·RJ©9L;”Ś?V-€ąfąoÓ{9Ć‘“’Ą«Ą. ‹Tõh„ŌÄ€±yɒ…†b9™¦D„©%ź\,}k?å+SĮåŖwö²öĀīakŌÆ8§—`—‹¢Ś(›¾ÖLÓćÅl¹l)Æü¾š@ŪØ§eÓ7šŲēᾬąįĻ-„é1 € —IÉāNoź×€Ó hAthÄŚ“z'rŒ/—8Vš_@* ĶŪ—Ʊ(WƒxŌ  jxßfóSÅxJćNč«÷Š»ĖKƒwX@€²åįÆC]¹K*_Ę]$÷±dIoY|č’æÉCÕĮA|Õ1œ“M_kĀį‡7Õ;([ĘUČZp Čét!÷هŌ „”R¢Ė*µLd4}]’52Osŗ— {‘ą’ߥ6¤ś’ 2uA)µŒ‡#ė|ōa†Ņéå©åébĢ,Üä§wg®‚Շ“»X|Ā»’VŽ·{Ļnŗ  RJ© Ń„&G ¼Ū‘Ÿ«kąČˆĶT0‘U ‘łž/$»‘Ā4õ_©Ićć϶9TQ?Õ÷Öüd1ė/īĀé1YxœŸ¶ē éŽīcĆgZqzLŖ Šö\!fĀĄßģį…ŸĪēˆĻ¶Q±*Äć_YLߞŃOżÄWsŚ5õ¼óö7xęū Ųuw¹\ĻŠo[_`ZĄ?tĶ9ś c2·ĮÅšŃė1鍎Qīw,ąąÕėŖF¼_’@و÷śv{éŪ=üp}{¼cŗÆĆĪtŠųXöDĮ7»[ʇž3¬3&v°ļįŃIb¦i"Aæ=ų×)J)„ĘMk(59¬©~$Õž5¤&Ą/©łš‘Ą’Eą)ą9d @'’‘ ©’JM (?W£²j [£ž©b\¾ՇXxœŸĘGKhŲR‚»0AķF?5‡/P÷ŹļŖyšuĢ‹söM»ØX=ś©;_ńqē»VŃö|!Ē·‘uļļJ^ż«H¾5TōĻĢŚ&]²`ŹRŃ£2…éM)–H@ę{­]J)„ĘE3”š<&2ŹŽŒ“GI-x p<²„ÓdŠ#«“Ŗö’ ’žß€LKŠą_©ÉeFK ŠCÉŹ e¤ŽźŲZH,ą`į&?Å #4?]L,ą óUµG R¹&Č3ß[0ģ0Mó·‹Vš¶?īfć—[ø’’壞:ŠīfĖg–qܕMqy+;ļØ — qŗmÕčӊž .Ģ1LN$ҵ³}µ“Īˆ™f_žŽ•Ókņžē^Ķøķµ?Ī棒YqŪd _@Š“=”RJ©qŃ„&—‰žHŠF::‘b|Ēģ߈YI÷oE¦4;‘ €]É÷ūIUü׊JM²ēzĪž?ō†R„oV IDAT¦$¢­Ļ±ää~Śž+"H»aK)+Īź%3čŁ1²]ØĒEżże¬~wĻŲ/Ō„Żw—³ź=ÕF “ɟ~Ÿ­b~ķ‘~Īį¹*ÓwF"ŃdĖ„ķ‘7‘x¼÷č«L¦DŌąŌeÜh’µ8=&&ńšų0{"«~‹õŠßėJ)„&D;”š|Öt€Įäs©ŠŌ+€•Ą:`>PBjI§lāHĒĀ`ņXŻČč~ °Ų“`O(‰™fĖ0*r5އåG»d™,½8Ą”:æÜĀŽ[*‡ŚīŪRʆO·±÷ĮŅ”“|_UŒŠµ!Śž+ĀU˜`Įу ģõŒz‘k6wÓņT1± ƒåg÷ 8š7¹‰Ś]¬<·—Ög‹˜·>Čŗ÷u :pHL”uŃ ōī, 3­@]Ā4iD¬ģ¢8©€4o#Ó½ŃhĆ¢‚ÜUł'›™`XAĮżµź]=”,ŽšÜUµćŚÆC:āČߔ8š ”Rj‚“@©ü°:¬©V'@3Øļ¶"•@yņ¹©,īL'ŽóA$ųļGRž;€¶äńš‘’n$ó Lź¢R*?L ŠĒw»\Gåj 9č~½€C?ÖĪ!ķą¶3×hs-M×ųhjAļ./ż{½Ćę’Ļß0Č[~øo(?Ųéb˧—å¼øĀš(>݆÷ėĶr Ož÷"bA9Čó?©åøo5qŽ};ˆ 8yģK‹Yunå’Šžb!ƒ-nŽ»²‰®m>ī¹`å°ć÷F£ń˜iF‘l$ėw]>ē˜Ū‚ĮmŽeŹÅL–iŅÄ“G"äoI”©¹ßJ)„ę(ķP*æ¬k:€¹oDž*d:@9P "ėj»‘bOö?Ņ`et'_÷%·…I}0TJåĻPv ‘ŲY 9;ųšrj7ŹzńĮIļ«÷²åSĖŲ7|4’±’ZŒæ1•^^’@m/Qŗ,Œ™õä­@>›@»››O>€’„\ śöx‡ķ³ūžrš+”°&Ź@£gD5ūȀ“æž½†Āźƒm#?*Ō‡BQäwNéČg§£ ˜÷“·7æ«ŗzĄićź0&Kß:€§4NŪó… 4zØ94@Ū ŅÉ2’ˆAzwīu²čųŹW…éŻY@ÓćÅŌląorSwzż ^‘S;\&+ߎKįü(»ļ)g ŃCڱ€ƒĒ RXeūĶ•;åŽ-8ŚOķĘAŹźĀ ¶Žž½‘nw08ˆŌs ‘’ū­”RjÓ„ņĻ$•&C>Ąõ#s÷ ¢ä£YęŹ ž±ķg}Ų¤=B¤:tDH©©cńĪHdkĒóžŃ‡ūœģżGéˆ÷3-׳ŅČõą„ć`|²1cÄRwé×īsfŻžˆų›3ĻsßXĮhTēc>SŅ@Ģæ\ęr;žžp' 7łiz²˜šĆ;ݜxÕ>n>ł¹“ƒ­æ¬Įį1ŁxE Ūn˜GŚ Msš‡:pzLöž£”W“ąņ%Ø’{Ē|½Š»ŪĖi×Ōsū;V³ą?ėßßÅKæ©ĘWåčÆ4óšåKYzJ?‡_ÖĪĖ×VQ¶" ĘųnQ4‘0w¤ī·v(„”š0ķPjjY#śVGĄņsč&µ¾³ƒį…ž¬ż¤:¬y y/¼„”ĮśłŒ?ŅŻżČŗ¢¢„aäŖ—Ÿ1ŠD3nėŪķ%Źß%ķ€ŌššdÆ9’ Ōś]ķ‡Ÿo@т»ļ-Ŗµąņ%F.¤gH­…žķ¼~Ó¼aŪ¶ß\ÉŽ”tPwFM—°ųųn9u-fĀ īō~ŠEĮ„†–²ćÖJ ‹ręu{8ą¢nž»Ŗ–¦Ē‹qzM*ViõČ!{B”XŌ4CȽ05.J)„ę(ķPjźŁƒū82šcŲövéÆĶ“×J©éańõ÷·]œH¼Qģt®ź Xzj?›’süÓŻ½yŻÆē§`^_,–Ų  SüHPjJēKˆ=ļ÷?“ŖØč ćŁqē¼õg Ņ `¦-o˜ģhz“˜C>ŅĪqW6ńĢ÷t`šé—,‰ž½^Šj¢ÕFq&8횽”. ć.LŃäj‘~gņ=(^”o·gŲ¹Ęćßżż$ų·īwī„”Rj‚“@©é„#8JĶNÖŌžH[8üPqaį”wģž[9õ÷—eÜõēoō’łžžPĀ4‘ ¦~¤`J2īėčŲyvUÕĪb§sÕXwīŲZȽÆą-?Ų‡§8Į¶+‡-Éhš&æ“{.ZɑŸoåäŸīå/O~5ŅÖį1‰˜ “¹yųóK†Žõ;˜ä F2ø7„? łŚźp°æ?Ö/ü_żżVė9ˆf(„”š )OYTJ)„ę« ü®®Ū¦9壱±€ƒHæ3ćĆLL Ōü=Ż×7€’½¤:"ä·‰µ²Jpo0x÷xwhššä7QwfńˆwQ§W¦ÖD‡> ÅĆžõ½…T® į.NFėÉ[YsX€Ž7 lq㫊a æßĆF÷„SĄßä¦r¤żÖÄp8Ę~‹vŃ®H¤ŸŌ 0V-ĶPJ)5!š ”RJßPĄÓ}} ›kkŸ›ēvoœī‹Ź·¦P(žĘą µśˆõlĻČė~‡īčģ¼c]QŃ'†1¦rśk/ģƌT w—LčŁQĄ†O·ć) 9pū,>q€yė‚8=&”^±€ŒöpQ7ó7Xun÷x9± ƒķ·TrŚ5õ4>ZBi]˜Gæ“dųč¾­3`ū_*ŁxE ó¤tY˜P×Ų?zméźņ#AOņяth@„”R’½üÆRJ)„r±źvø*ŻīšŖĀ³¦ū‚ņķĻ­­ž}”P3P¼ģ:‘N€©JŻ‘‡—–./w»Ó.“ņa<¼ō›jĢøAÓ%ĪŅö\1ÆßTIø×Å`›ŒģĒžæŖ–XPŠžõķö2ŲāįşĶĒß$}-’*¦Æ3a°óöJ"N‚nzv铌€ę'Jv¹čŪć„åéb‚n^ł]5ŻŪ|CuriD×77·MĄ®ä£ét £J)„& 9‚J)„ŌÜf ™t%ĄāÆYsc„Ēsą4_SŽtE"‰/¾ńFCÜ4w/ĻŪ€¤H5/=_€Ø<¤¤äČĻ,]z‹sŒYuŅOŲqk%ĶOēó4ż”¹y`Kw÷.ąeä^’Ų t£J)„&Hk(„”Rc§‹OōöžŽ9œ–}[{ū`Ü4ū’¶äóS·.żŠ4€—vļīĖółˆ :0ó¹¶A”Pāįžžn$ŲoŚ“Æ俣E)„Ō¦S”RJ©‰³2éœŪūŽ(-=ØĢåZ’sYč@ ~SKK+’‚¾#łhŗ9éS5=4ķāõ`pļńååos;…ł:YƖRüyM2ČčšĘĘžöH¤™j±Ų “".Q“@)„Ōi€RJ)5qÖØtčżcSÓĻƦ˜ękšTQÓä--}¦”kFꤷ#éņ]ż?]쇛īéłæ):ƒƒzi{ŽŽ’DooōUææ ¹ĒČ=ļBG’•RJMķPJ)„&Ī>  G0øóўžßOó5MŖŪŚŚ Į`'2½éč@Ö¤Ļwõ’tÖr€! ļęÖÖūvOLįł)(Q¾&œ—c·…Ć柚›;‘éMČżnA–Ōź’J)„ö›v(„”RūĒ J@÷ ĶĶwl|tšÆiR¼<0»æ³³nH>¬€4Ģō¤Cu€ŽŸģŻūÓ®h“y"rzS—ī*H`$?9Ü&®éך–Å)]ĮpJ[Ó40 yķ*Lą«Ž`8MŖ R¾jbQÓ䚦¦Ž`"щŒü×#H‘Å©īlQJ)5i „”Rjr/ ģŽX^~t‘ÓY6Ż3QM”Pā' Ólö sŃß@‚Ó^dŚĆ4”Čƌ˜¦Ł‰4m(-=Įeī±īčōš\ššė¼~Ó<QƒSµ—pƓž½^ü`kCTäČ/“²p“ŸuļķāŪ*(^eށAźļ/ć„ļ5āōšto+ą“ßŌSupµ›{čzÕ7ö/ųMSÓą+mHŠ’ræė‘Ī—éȶPJ)5i€RJ)µ’¬¹é +7üؾž{]Ńhž&‹ēQ_,f^½woĻ`<ށü{`“™™‘ŽG²Ž—^ų]SÓÕįDbĢĆļń°AĒæ}Ō5ˆ« Ań¢KNī ś°­ĻńśŸēqĻ…+¹’CĖĮ€Ņe0Įp@Õ!AJėĀģø„‚EĒł‰œ<ō™„<|łV¾£w\_ĢĶ­­”õö¶#ŁõĄ.$Ūbŗ¦Z(„”š£“@)„”šVjŗho‡_’yCĆUżńųų¢ĮiÖ‹™?ŖÆļķˆF­Ńč]Hś†§£O÷\ō2 ”h}¦Æļń~5ĶčXŠüT1 7ł©=j½–²šX?†Ć¤ti„ž˜ šVÄ©9,8\&¦ ī¢8>ŻŹ3ß]€™0(_ĀU˜ąšĖŚX³¹_UlĢ_Äķķķ”ū:;[‘ą2śæ‡éŸj””RjŅ)J)„ŌäJXŽX,ōšßßpPqńĮENgŃt_Ųhŗ£Qóöģéi ‡ķ©čÆ#M̌Ń‹IŖcHģ …śĆį΃Š‹ö8£Nˆ:8č’N źļ/§bUĆOYœ½÷—qŠ%ńŁ6n“Ŗƒƒģŗ³wQ‚•ēōįōBӓ%ų›<,Ü4ˆĆeŅšP)ż öÜWF -÷éMąęÖÖą=mH°æ¹×;€½ČčæĪżWJ)5©“@)„”š<¦ķā}±Xš¹¾¾ŻėŠŠÖ–»Ż3¶&Ąī`0~U}}W{jäß ž­y’=ȼ’™“]z'@¬5Ų>8ŲrPqńśB§³ ×Ī”ؓDĢąµė«p$Xżīö=TJ׫>Nŗj’Ļ4l)eé[hŲRŠ»8Aé²[Æ©į诓°ć–JŠE)Zåµė«š7zF žCńøyMSÓą£==mČ“Š]Ȝ’בђ6¤Č”µĢ¢RJ)5)“@)„”š\#‚ŅP"~“§gg”ÓY²Üē[l†1½—8Ü£==‘_44t ĘćmČčóĄ¶äó>RėŠĻÄŃhė^ŻļžXlšÉ¾¾]‹¼ŽEµ^ļ¼\;W¬  :hŲRJ ŻĶQ_låł«j ÷ŗXłŽ^Ģ8”,°źÜ^vŻUĖ— ęš/]SĆ¢ćżTÄØ œ_l%Ņ鸞"NŚ}{¼Ļ× %~X_ß³#hG²*F žgJg‹RJ©9@;”RJ©ü°Ņ85!ś²ßß҉ ®)*Ŗ+CŠz¾õD£ęµMMžæuv¶% •TšæIūo$üĻōŃh«c ˆF‰šÓ}}õxœå……‹=‡+ćNƒž 4zˆø‹ģ¹·€ö²ų-ÄĆvŽQIøĒI¤ĻI,ä ūu]ÆR±:Dó“Å“<]Ģāü”.ŠśL1Į®į§‹™&÷tv†ÆilģčĒŪ‘Ž•HŹæ•ößō£óž•RJåɌPJ)„ę)¶ėЁ*`°Üēp¬Ż<žé'TV®sʔwĘĒM“Gzz"·“¶v‰d©¹}Čō.R’»‘yč3=ų¹ßNä~—ÕĄb`y©Ó¹īĀ N;¦¬lµs²/^õūć7µ¶ö5†B=H!Å&$ąßÜóFdĪæüϤiJ)„ęĶPJ)„ņĖŹˆ"t(fš­~ć‹ENgŁ|§d*ÓøiņT__ō—ūöõ=ŁŪŪ3ĶV¤ŗ’NdԐZĮ’LMūĻĘ>õ"ŠÓ”°i¾Šßæo«ßßUčt–LÕżŽę÷ĒÆmjø«££½?³:Yv“ʲؕ|ÆIū£i’J)„ņH3”RJ©üsnĄ”!Ł %Ą’y.×Ŗ3Ŗ«?¢“tń<·Ū3Ł'ļFĶ'ūśĀ÷ō “‡ĆżČŅyHõłF¤ 1łļN$ 1»‚;ræ ‘ū], uæWœZUuča%%‹x½9 ŽW 7Ÿīė‹<ÜÓćoū‘{Ł…L±hBžF¤“„YY!ˆtiŚæRJ©¼Ņ„”R*’Œäƍ¤ØHšz-25`°`}QŃŹ£ĖŹ–­.**«õx Øn ‡ćÆ F^¾ä÷÷'L3€£=Č\ó$ mF‚ÓN$ 0ūÓŠ­é. ™‚aæß “Ś>_Ż‘eeKW–/+((,p8ć9‘ “„BńW#ÆųżĮm~’@Ō4?r?;‘ūŪLź^w ’üHGK łWJ)5“@)„”š:ŽäĆŹ°ÓyČ(u-0 T+ŠĪy늊ę/ōzKēy<…óÜno©Ėå ŸĆįH˜&ƒ‰„ˆĒżńx¢%Šī …B{C”@w4Dł©`“™ļßF*ķJn$ŒĪ…‘h«ÓŞ}Q ”#ÕȽžŸüw…Ó0Ź—ł|UµOi•Ū]Tåń8ĮQčtŗL0b¦iĘćę`<ļŠFc”PØ! „‰rļČ}ģGüN2ßk?2ź%uÆgūżVJ)5 h€RJ)5µ¬ĄŌxź"¤pÕP•|®@RŲ‹“m|Éöžäž®ä±ģšĆH0DR+åæ @;I¢¤’¹ŒŚ³Ü æßåČ}®$uæK‘ū]˜lėEī·“Tķ$ė~GHŻo«£„TgKgņ¹ł’ uÆuŌ_)„Ō”Ó„”Rjz8>Bķ%5J]ŠžeÉ×%HŠZ˜lćIīć$Õ`/|g’ƒHßg{ō'ß·ę[#žs95™ąexg€ż^[.ɇé@°žŸ%{exg‹¹ßżÉĒ@ņaŻk{'Ėl¬­ ”Rj–Ó„”RjzY#Ō$8µ²|ÉG‘ķµ5"ķJ¶µRHJUæG‚Ņ ©€ßš`¢ ęvąŸI¦ūmuųyÆ­l «³ÅŗWq†gŲ;^¬Nė^[£żo¶{­”Rj†Ń„”Rję°z—ķaö[ūHtśßq+Ąź°ÖHæ}~’\KõŸ{†uæķ÷ŁMŖ£Ąŗ×¦ķŁ~æķ÷Üś·=č³ßk„”R3€v(„”R3‹õ·Ł Nķ£ÕŁk?{`oį×@4;ĆölŻk«SĄ>u ė~fŗĒ:ŚÆ”RjĘŃ„”RjfĖ„ŚG£Ó’–›ž5»l÷:›L÷[)„”RJ)„”RJ)„”RJ)„”RJ)„”RJ)„”RJ)„”RJ)„”RJ)„”RJ)„”RJ)„”RJ)„”R3ÉAĄ‡€#K*„”RJ)„”Rjŗ…ŌŽ+§łZ”RJĶŚ£¬”RJ)5ólµ½>tŠĪ¹øŲt5St^„”RSÄ5Ż ”RJ)„FxÉöśPąÆy8Ē ĄÉĄ­@/š 0ß¶Ż›‡s*„”RJ)„Ō”ų*p°lŗ/DĶ ‡ #ęOņ±—‘špĒ$ŪrCņų~m;Ÿ ųŗ<W)„”RJ)„ņŖH ĮĶcÓ|-jn8žTĄ|Õ$Ūz’ĒŽ=Ę}\Ąūż Ą Ą¾ ķ?“<~ ś€ ÷ž\øRJ)„”RJM·3Ik?ŹŃī ¤śśA€s ®KĶ^ Čļ(ż#Éc'€²QŚ®@ź˜YOÅiū“Ö꿓uįJ)„”RJ)5¾A*Š9?G»[mķ˜‚ėR³— "ß+/Ņv"~Fź{ńųķ*€z[Ūvąfą. b{’7iūaŪöĀÉ»t„”RJ)„”š>÷’ t–äh·/٦ šģæDR²» ļ’€sŃ“é|8 øxÉŹ˜‰^!5g>żūe}˜Ō÷ģ's“ū±­Żu äC¾—­T’Uiū>›Ügd†€RJ)„”RJĶ:°›@SŽv‹IRϰ­™į)ÓöĒ^`ó¤^µ:ŽŌżżŸi¾–lī"uóGi›É!Ąw€Ū€“ҶEöŃ{‹›T€æšdhó¶ćü0mŪ/lŪNļÅ+„”š]Ó}J)„ŌXx:G»£mÆ’•¶ķȜo€6$`ūJ¾·©¤^“_WŖģzmÆĖ§ķ*rŪe{½2Ćö`mŽż×!EśĪ6¦m{™é(Čä(d H5’H†67 EžNOŪöŒķuśł•RJĶ1Ś ”RźĶąŪėōĄŽĪŽ`ļ((Ž|݁¬Ė~>LÕZļ!sĀ'B§ŒŌg{=Z¼ébÆŠæ"mŪæ€~`KŽż_³½^Ÿ¶-¼‘|}™?·-·½Ž•a;@x8łś`†w¦Ųģß’J)„ę ×t_€RJ)5rģŪY&ĆGF¼É×w"–¤Ą-¤²&āE$Č=xx'rŻ}Čt„÷ćŲ³ÕLĖ8xp$PŠ Ū¶§wX£ī ‘ėļe¤ČÜ|#;@*ū€d–¬J¶·³wŒdźDŖ6śĢg$óœķü½ÉėÓ „”RJ)„Ō¬÷ŌGɞ¢ļ"UŃ==Č:Ō<éŸåįśČhÆ \<Ąšśq2Ļ/?™ßżQ¤į¼<\Ūt2’g&¹§nŒ—Øjߌū€›Č^’Į^€Ļīē¶m›r’õd›~Fü/Ū12՘øÄ¶żJą,ąkĄķ@C–ėL?ŽżūmaŽėTJ)„”RJ©ĶGj)“\£č‡“ ‚ž¶m•m[#©9ד„ĪvüvFlé)äė€Ē2“‹#ĮܚQĪēNžs 3?°łŚ^Ÿ„cķ³:z¬N”ūȽäć¶ö1ąąFąZ`»mŪ£iū}ܶ-×*·ŪŚ-MŪv¶mŪ·3ģ{.#æ2=v!K^ĮČL…+mķĪĶqJ)„”RJ)5£O*øłuŽvö`-Ӓk’²mæÉ­£cĻ00‘€ó$$`ż"©ś ]äöŚ€EĪS ü‘T¶?|ƒ‰žŗB‹‡# cķTš!Ó+NEŅŌ3e0ģL^gkņßNąBdyĄŻH‡ÉÓĄg’Ū²¹”T6A¦G™‹õ]hkӒ¼N;²²D¦&N“ķ{UŽkūŽ­Ż™iŪģ+Sܕaßõi_G©šgä{ēFļ°z»m’ļŅV)„”RJ)„f¬Ļ‘ n.ÉŃī:[»#3l߄Ģ÷¶Śü…ĢK®YʒZn¹ĢvÜ{ČŽ¹PŒLO°_ĆaH€w"©5ŻMąwiū–¤ķ›éŃ3Īė.~‚¤®ŪŽOę ¼=ddšś$ƃ`kśF™ļž`Žė’æ,×y2roą_|éčŁfŪ?S±¾ĒmŪӃsĖ£¶ė·ßæŪ¾÷fŁą}¶v—gŲneAģĶ°Ķ‹Ōž°īQUŽód3ßvžN`„”RJ)„”š®'Ü䚇m‚²Wä?į£Čw9Ą-CĶH¶Ąw¹ż“¹Óą§¶cž˜ćæhk—>MdŻ {Ó¾Ž/Ūö­Gę–,yīē“ļߚćÜéĄCdÄķ é_o©ól÷ŚŚ’Óöž–äs©j+°/m_ūŠ–§“ŪāĄ;Ҷ•ÆŚö?'ŁŚ¼œ¶Ķ>½ā‚Œ_ Źģ°§źŪēĘ’0˾0<…’ÓiŪģ÷éØǰ¾ŗ3lūĻĒ8ȶ½1łõŒ—}ŖĢN`„”R³€¦x)„”z3)Ėš^2Ājyf ǹI©·|>mū ¤Rž‹’Ļ!UÜ’ ¼dkė–%_æ‘ćœöNƒæēhgļä°ÆQo&Ÿ‹‘yćūĖˆgZ¢/ĪȍŲ^_ŽLSHg¦żŪŽę·H!¾t" Ł öiŁ^7dŲdJ•āæĪö¾=NdŁ$kĮ²2mŪ6Ūėud÷Zņ¹‚‘[mÆɰļ+H‘JāWä8éĄJg’¾?:ĒžJ)„”RJ)5cŻĻšŃ}ūó&Riõ™Ņęsq“ŖĘļߏė[g;w¦yż–[mķv"Yæ¾\ŒŒöÆ~dkg8ļ¶½Ÿi9¹ńŗĮv¼chļ%µś@#Gś³ł†ķ Ą¾šĮĶd¾EHgĮ[ü—Í·œiŪ7× ö"zw§m;Õ®®¤·äIDAT¶ķū9Žń[»SҶŁ3žĶ²æż<1¤¾CŗĆ‘)AF®fPh;Ē 9®S)„”RJ)„f¬÷2<Ąß†ŚöĀiõÉēʗg- ˜ ÷й¼Óv_ĶŃĪ^Øn,(ĆGśĻJŪž_Œ=Ļä ¶c=‚Ō¹Ų;:ž6Žó|ʶßęķ®µµ³×2°w|ü ł’ļ'÷}³l°½Ÿi >»d»WÓŽ_ČŲ¾īKlķ>•aū+ÉmA²§ų’Ćæ–瑿D²4¬: ¤Ó#ŻĒ€3}Ł@„”RJ)„”š±®&ü¤{_E ×e]­&sĮ<µī[“ūµļǵŁēģg›£RQßź¤ųģż 8ӗÓ3‘€1ŻoÓŚÜĶČyśc5IĻ·Žõ$°$Gū³mmse:¤ū mæäh÷[»mļßČČ{“ž Y!Åš¬Ž‘J[{š&[mĒJļXéNnḛ̇Ķņß¶seZĪšO¶ķö• ģ U'r}­ķĄ»FłZ”RJ)„”RjV; ļ@֒æ*ł¤Š¬„ņž ®?‹¤HŪ}ŒTPõ׿ø.{ÕžĆ³“q‘źĄČ¶]%2ņżv¤²ž{2“qßexgČ6`éÆż<$ŻÜ:Všń,m/“µūÅ8ĪaÆŠ’…ķģK$Śä_ŚŽæų2eāTdɾŃF»­)" †Ūéģ÷¢“mڶeźP2Hu ˜Hš~ŗŲ¶· ÕžFź¤ė¤Ī„µ²@™"ń)²ÆD ”RJ)„”Ro ė€k^ŹüGF¦©_lŪžŻq’$Ū~¹j\jkg/6hŸŖš_ć8ÆåŪžgähw•­ŻIiŪ¾mŪö½ ūnNn³V–1²Pc™3=bdļ˜š¢éüJ)„”RJ)5&›½äN©žś~žĆ žGiguFd«d?^+‘Ńėėøs?ŽU,{hæ/2¼.‚=ąźōäpømæŸēhg?¾}ż;lļß2ŽóZ>kŪ’¦ķ®·µūhڶ¶mŻ /4y*©šļ!䟖į!­Ą’!rwJ(„”RJ)„”7’ź~°™ćŻŽt;s?]L*“ą”QŚÖ'ŪŽąŽX-Fę„[«÷óxē3¼Ąž}©D{EżæŒć˜Ėmūż1G»3lķ¾f{>©{¼—ń>\eŪ?ĀČō~‘ö}¶ó’(m»Ē0JŪ±ś”ķ˜ĒŪŽ’·ķż³Ēq¼¾ä>/åh³Ąvģō¹žå¤–l4‘UŅ‹ć­n^$sšnæO鏩U^š“ĒSJ)„”RJ)„†TG3¶9Ż'"óĒķĮg3²l\}ņßQd޻݀+²“÷{lǚ¬ õ&Ū1²½„ķżgČhgŅ@j6>Ū±’‘aūł _ž°øé,x!mŪ9YĪq2zoµ‹O'ŪŚ82ģ§”RJ)„”RJŪ ÆŽŸžhFj X–“J_!iō×w1¼`ßć¼Ž+Č\ž¤P¢UńŽä/&µŌ ÜČȂ†›‘”}»—’ķūF¹&kž3Y¶ČÖ&Ó£ųä(ē™&°]bO)„”RJ)„Tž9e⾁¼ųšvd$Üī`ك^x˜7Žó—“ŹDŲ‹¤Ō_‹æ³ęł›ĄW2ģūĶ“s÷ …õī$•ÅŠĀšŽƒGI„Śēš/o-‘·#G›UĄ’[‘ūņ’ša“²¾RJ)„”RJ©YΉ̹’R“nWņńp)Ć«ŚÅ)ČTƒ\ $s°n?eßēIUÅ©žomĖ5ź~²ą‡Ęłõ(„”Ro ć] W)„”R `2'žx¤v@1’ś’"RsąžQö?ų RæIæ øų;2Śo©E²z“ēPJ)„ŌüKŹl›}s‚‹IEND®B`‚libwebsockets-4.3.5/doc-assets/lws-relpol-1.svg000066400000000000000000000057071476025525100214270ustar00rootroot00000000000000 All new work is done only on master master libwebsockets-4.3.5/doc-assets/lws-relpol-2.svg000066400000000000000000000155441476025525100214300ustar00rootroot00000000000000 master v3.0.0 v3.0-stable When a release happens, masteris copied into a release-specific-stable branch and tagged libwebsockets-4.3.5/doc-assets/lws-relpol-3.svg000066400000000000000000000227741476025525100214340ustar00rootroot00000000000000 master v3.0.0 v3.0-stable Work continues on master, and if a fix is madethat is also relevant to the last release,it is also backported on to the -stable branch New featuresand APIchanges arenot allowed forbackport libwebsockets-4.3.5/doc-assets/lws-relpol-4.svg000066400000000000000000000250551476025525100214300ustar00rootroot00000000000000 master v3.0.0 v3.0-stable v3.0.1 Periodically new point releases onthe -stable branch are tagged out,with backports that didn'tgenerate any problems on-stable. libwebsockets-4.3.5/doc-assets/lws-relpol-5.svg000066400000000000000000000506171476025525100214330ustar00rootroot00000000000000 master backport backport v3.0.0 backport v3.1.0 v3.0.1 v3.1.1 v3.0-stable v3.1-stable critical Occasionally fixes are added on master that fix old, maybecritical bugs that affect more than one release. Thesemay be backported to serveral -stable trees. libwebsockets-4.3.5/doc-assets/lws-smp-example.png000066400000000000000000002661511476025525100222130ustar00rootroot00000000000000‰PNG  IHDRX p‹“l0IDATxģ• ¬eWyß’ūqžū̌Ē.ic"²i ¢¶¤® ‰KJpŖZĄU›€Ū4• ŽxÅ©hIZjš¤YŠy“q±kh›*‡RŖ*“Ø@Ī#ŅČv ¶ĒsļŻūģ÷^żߎūŽs±=cļ™9ßOKė~{µ¾õ­}ĻY?Ϲ{a†aۊ?v†a†1&&BĆ0 c«1†a[‰Š0 ĆŲjL„†aĘVc"4 Ć0¶”a†±Õ˜ Ć0Œ­ĘDh†al5&BĆ0 c«1†a[‰Š0 ĆŲjL„†aĘVc"4 Ć0¶”a†±Õ˜ Ć0Œ­ĘDh†al5&BĆ0 c«1†a[‰Š0 ĆŲjL„†aĘVc"4 Ć0¶”a†±Õ˜ Ć0Œ­ĘDh†al5&BĆ0 c«1†a[‰Š0 ĆŲjL„†aĘVc"4 Ć0¶”a†±Õ˜ Ć0Œ­ĘDh†al5&BĆ0 c«1†a[‰Š0 ĆŲjL„†aĘVc"4 Ć0¶”a†±Õ˜ Ć0Œ­ĘDh†al5&BĆ0 c«1†a[‰Š0 ĆŲjL„†aĘVc"4 Ć0¶”a†±Õ˜ Ć0Œ­&»Ć0ŒÖ’;v-Ź iŽK_vbģrŒ­ĄsīŽ±k0 c»¹'†4€Ó¾B“!+fXēxąa¤k\qIŃxŖ0†1Ę@,H–@-”>Gžc!/‘¬qr§öp߃øę¦Cćģc"4 c$öb„¼„Ō|-ŠØ +ķ T²iŽŻkJ1Ēżā”üŃ}x÷ƛ³‰?v†al'cd1¦Ć Ø[ķ;Z߇ļa:‘øŖ1Ÿa1Ƒo»&ūĘ…‰Š0Œ§—c,€PƟĪ|n°`Ō;@Q"/D2Å”ių˜M0Ÿāg_k.4Ī&BĆ0žFīS wžsź?§ tż ×4Øx>ŹŖŸ< QÖ}įb†+Æ0g‡pģ ĆŲ&¢Ćl“Ƈ Ņ@Xך=T<E)+Ž…sāȚ‚ōcŸÅøPšĒ.Ą0Œ­įŪ1¼ īĖÆ:dA¶¦FY‹‹ %]H ī‰[6aēĀłĮxģ#&BĆ0ž.|µą¦K Ö`­¶4ł±U„Ų./q*édł ē3Q曾ž¹Š8S± 0 c;ųćsuž§.lT‡ķąĀJś†1 VČ”(JdņėB®Õ…M#.œ„xhgģsē?&BĆ8łD,} ēPTbˆ¬ĀĪģį‡o81vq§Āk5n‡¦žėDŲP{5vłœ"ĢK‰©=\*gĢ„ē‘׌V\˜Śfœ1žs÷Ž]ƒa§Ēķ1f€Æžp@CcˆE؊$īe8¹ĘnŠW¼÷ÜŅį©Ļ_zѳ#„ŖĆPčōM/ĀŗFUIåō:É©½§v‘•āæNY†‡vfņ:’«žł \öŻøžßž[ē5Ī/± 0 ćōø3ĘŃA!õ‡S)ś}C;2‹|āmńĪ×Üx®č!:‰³YüLż×jż“`G6bĮ=µ`Įi*Ā.Ų“`ZĄ9ńGŚVŒxÉ1„ ʙ`"4Œsžß‰Å½Į…zżKzüˆfi1`R"šāW_ßunśōų:¬k)IäוŪō­nQęIŁ MQVČ+ų2ZęÓęō#qa½2Šž#PM>ē»1±kĢ83ģdē6Ÿ1|ķŻŠZ}lQ7pmŪ8 °˜ā””ē\ŒŸ¾"ž;Gv!%§'s=BS‹°›U-¶ć§l-čc«Kä“]Ł /Ͱ.’N„m$‘iĒ",—«ĄG“÷pĘy?v†a<6Ÿ‰1ĄS‘ą@~‚źŠµāZučyżpZ d|"šćo]{Ž4IÖė„Ī£ŽÖkŃwÓ>X«šØ=¶uŃ÷k5_7™q’‹Sķ§!<ĖiĶ’å,÷tĘłN8v†a<’õRčŌģk j+4-šU+¤*Š;)œÓq:RÕ8ū‡¾“zĖĘuŰŖVk¦¹óe%ŚĪ2ärŹ’",U™Ց”_ļÅLĪ-±œaµĶÆ#ŸĪ8ßū÷aĘcq$’~ß‚ĶŠÓ‚•аQ‹ŌāŚ‚=ESTżō}¾Œüč‹āßłŅ‰OS745Ž’MĒĀhĮŖF]ĖBE‚,‘u.,Ȁņ#‰Z.ŒfāæhµZEši†q&ųc`Ę£ńßbњSķ5ƒ’źĮ‚Żc‹Š.¤Hųž±īWSŠ­ėÅćk¦×_}Ŗ”¼ŅĖJ//¼¢ōŠJś‡÷¼S»Ž©ÄŪŁóvo7õöŗ~Ż÷lĪyŽ/E{/\}ćĀ!»Ć0‰ŗ«ŃŲėµ'­¼Ų Ė{ VŖ@Oż——ČhJ +łiަEķĔ„cź,±ZEc—`\Pųc`Ę#ųO±ōĶįV ¬Åˆ“`”¤ 鿢RzbA>®9Óa]Ø uaƒiˆ^}6Ć8ēĒ.Ą0ŒGą©ö|*æ})Ņ‚ōE(žÓĘXXŹRZ0+°®d)ć¶Eš‹'Ŗfģ£ƹ‡‰Š0žnŠÅd¤EYˆ·źŖĀĆk|+Į+nŗŹ(æJ>ZW"6Zp=ųļ@~łöū¢·`HĖ„Ÿ†’g5“vdŗpģtvˆcW`\(˜ ć¬rsŒ zæAå·iĮF:×öō=”:’×hBž¶ŠĒ›o^uVˊ^{™>öŚ+‚uC<谛CÅF³¾]ūāÕÕ~õ‚huāŸĒcæ¦'€7vĘO8v†qa1=lĮ®51-čD„“ uU5Ų+enVé‡N). pķĶ«÷½.ķ”I†«”5ŠJō™Wpœ s•"ƒµ*°Wc‰¤š>’–H~坏¹ÖXMqĻ/ŝVæą^ˆŻ Æq’)üäūN<„Ƈbīhš±’S†1`"4Œ³Ē-±ü¤œŗŠ śi† Ö ‡ŃFEƒ¢„q.GhY”Ž |ųźŒėn‹Žżš“ĖWEHq–ŖĆ.ØØÉFLŁÉ•}ŪJ¦ŗcS]”t…™ĪœpYxÉ_ų?Ų+šW^(•Üy}|’.®žµ§V‡ޟņōčĢg£k\˜ ć,ń”ĖĮ:­ŽģĖo?Pu‰ÉZT5<y#RģX«[••ĘO)¹'Į-׫ØTĆ,Óś&>ź@ŒĖķVSŁń³_ĄÄ«~H¬|ėĻÅ÷>Œ·ß|Ötȍļ;“ē– ćĢńĒ.Ą0.‚A*¼^?Œ+m:Ņ4Hr!-H’•t!DnžÅWžDŠ?‰»T‹ć@‰åÉ÷ݳ?¹ƒūĄ«~īÄÓōM0ĪCL„†q–h7‚`° ,ȋ¾Įn1ųOE˜iQœ Q GZuaþĀń&Įéī’Ž×ŖZö-ŲÉĻ &vż kÅ|>«kP5(T“ܔƒU+v\LpĖļāŠI|<Ā?üń‡~ūŃ,ņåøĻ¹üs_4–š=œø9N2|ė$^ńOeaü¼”ĪzxQ•ŒO§RMÜL°ZHž?7¢V?’õC:¤äö¹žśŌ5‰§—™¾Fų˜ĶäDMƒ£+9ę'oŒ’äAüĢõ¦CćQšĒ.Ą0.:ŁŌz§×CŠŌØiĮz° jÆØŌ‚ģ5X³/% ø.±˜"-x}™üŪ_Œw’w¾2ĀdƂķŠÜącõM«ź]«ƒėVŖ",C|ķd;nJ’Q$·żwy¤œĆU—LJ6»+–6ƒ4ī8ŃČŖ0s/g˜OpńQÜń¾ų#׬}޳¢ļ}~„e?_śP3x½§¹cØā“†ł«9žā3£g®¾ó |šżé{~9‡§zM“ļ3„²ÜiNŌ*ŪŃ%nzW<öÅ81ĘY iķuĮ C§ Ü˱SØÕ|Ņ×Ŗ@mS čö“`ė°¢f82Ć48 fŚ»A~x„µ6ŹÆiQ5R­LēźB:ƒ›ÖlˆiČLĘ>‚Į…_q÷ Ąīņ“y½„\ŪoNŸĶ('ąX„w]üŃODī²GoÕbp! Ōņ¦!¦É0ŸII‹)¾ėžyōĄ…żGłuģ¹CĻĀŹ=MĖ£U5&S,fųĄ;ā7’“éŠ8D8v†q”Põ]ČL‹P9-ŅR¬Ć–7Č©µ`¾iAšÆŌž%ZJq FtdÅ«<š1DųĀ#QćdyRąĖ§Ņżžå‘ˆ¤“Į~ßnX}#ňõ_ӗDÄ͵̒ݻ²uĪ’ŗ Ļ{Ž8ž¹N€1¢ŽX’ŠļÓö[h*ģ{²–É©¢@UD„ż³kÓĀĒ,d¶_¤·akĻ R€¾±¬@£ƒōā|‚g‹¾ž§’åćsƳƷ™§³`WEØ gńe%a(e0ÓF ü?~lj±æ1ƹ‚‰Š0Ī”»®»ō²cŽ×.qÓM+78œтŖЧ xTģ{ ҵō҆€Rlõ~÷Ź$šą_^ ?ō&U]«IVSDӈ“HeIƓĪ}ģüÄU(”V»°j†SDĢ,fšw6ģĖŹ©"NcĶ¹–Ÿüģµųõ›†-Ś-†§c’F„ˆA?Æ»*u3©*_§óeŌÆź2lxTŹćk)Õ^uŸŁ˜6„L¼‹DŒa_ōī…:¤ā=ꩉ»O[=H­^ĘqüõĖćĻžOs”!˜ ćŃxg,?ŽVÆWŽ”5RzKū‡3<˜ćĒ>zp‡Ö[WōĀ‹„ŅóŚå ÅP©QŹĪ:uoAĘėĪ…zõ³Oµ_ńń>ņą…š\g×A9TwiE·n"ÓžźsÓŗ€«1™«,;7ģĖf°`'¶’†Ó ua”5šq­:dOńˆÉŌü“Lśx §užė4Võ#Ü„ŅĘ-؟BsŠ\Ղlé ŪčŻZĆ÷1ń1cę‹ .īü©ųžWkņÖy»¦¾Üėó‰ˆMtČŖ^<"!ź§udŸQ?eļBń_Ł»żļ½ł^On½”ŌhyŖ[Śb¢Å4ź‘% ”¦“ļ,Šö•еF `EWĘ BĄl;3MWFZˆ~B•_Rˆ šÜ¹$¤Ūµj²ĄėeĘķ‡WžDŠN¢ķ”WŚŁYåjkŖK‹,U`y)öŖŒ™™§Ļ‹įU“VnZŻ™6õÕ啮ŅӝÜŃT:‡"|łKāOžÄŲßYc|L„ĘĮ›Ō^-Ké'¼‘õ:&ųŗųd¬ÅæłxWŽ —Źķ8Óxß:LĖ{œ&š„ńvžr5'¢)n}u|o‚—æĢ­[ć“ µQ;¹Ö[øz° ļå\Q`uH?÷-ųéŸG6ó¼NŠ»ŽŪč©×wś44ŠÕŪ¢ŲKg³Ø÷ŽųU§ĄAĘbAÕpēć)†»W’\NﰚāČLt»œ`/ĆÅ+q᯼ oyĒ 1ά|&śQ“Q<܈%^śƒ)ß ö›*p½›.瑬ķŌU«Åõń]Uƒ·hĮ¾6µr'0j’ ’Įk£Üšögō“ _óh“TźæŖģmŚ„ŹsÉ#نT†Ńį]€aœo‰ńÖXģå7£‡)½„=Æņ£S‰?łŹųć??fžć¢Hœēžó÷ nØ(”VīÖNELĪĮEˆO}9zŌ”yķ±Wj«ŗ¾õjm ›“¾uŅ-ę¼ßś`¾ń»ō[Dń})€®e%—LR™38@ įvRöNÕ"ņėZ՛OśĮĒ™j˜>fz1q! / 9īkLŠéwÕ@tO>88÷ģ›Œ“˲߮«ß ¶sU]’®ę ƒVŗŠA'0©¶b:{ńmS`Ӊ³ģ×öĮвl°`—jpa–kŗ’D';2ć7\ż 6Ę'»Ćx²P¾~…;Ctņh“÷t€×·'Wjśā'ŽńTiBm³ŌŖs EŲˆÕ µ`¾iĮJTĒž–JyEŒ[¬¢VS¬føś2Üö5ČćL_mƒl']Ģ¢}õŠTźC&ļ–xÉ ×zR?¼Ęī­aßßM½µŚK +ŗ  K1SĄĆz9üā/Dļü„T|ģĒW jĮR3ŗ–IöS‰ļ3‰Ł3•Ø}ģo±q.ą]€a<)Ž‹»ļļ¾6ö/[Į”v˜śŅBĆ$ą»fxŪ_ŠRżrŒ`H²™§=˜Ā‹Ų÷%[ēBN¦W茩—GOu{ĆoEgzØłPFŪ·ŻÆF'æ}óKQ_E[ŌX×ā_­œW®l\U»ŠsM)ĆŃ Õ†šźCę[k£’ś¾”³0O”H u²DāUŅSł(“ČK¢ ”9ĄiŌO„Ė„•jÆM“ńE‰łB,č“ģ~I!*ķ%ŖLÖ²DüWŖ½X”Ś‹}GJoņ{µš’(ļ)—bŗJŲg“)——‡S© Ł“,S²ž$병0ū›lœ˜óZŠWgģ+ßt"¤*źe‹\/жķ„5šĘ© oøōĄ‚›*m6zŽ×Ģ֊J„5ŲÓ;Śé.l܂ (Å·Žžä]xė?q’ÅaqĻjqO4æ7šżæčĻDxĘĻZၯįīÆą+_Į羨•4b‚z+ø­ŌÖŽƒ2®qŁņ‘ ÆCĢ·aA ($ÓŃ«©ō”ŗ0šĆ÷0öQ…·—Öy/æN„ßa2Ń-ضė,č }ŌU&)µ“·īŻyH]jAėN‡ėLb±WÕBŠdܧbĻÉ“é!× |¤łÄ‚ō_.Ė”ņ[ē¬å5Øö÷¼%ū mŒL8v†ńyk| . ņcßźK5•P9”ź3§® =±£xĖĆ•Ļ?ł£N?B»!æ.ąˆ*‡ØR^I)1Wä¼ß!‚iu<šEN¹ī“Ń»_‘>Ń3}ųõĪyX<ø’‡Épbü™ź¶ „?>Ē—¾†o„ø/ÅKæ“;9fA’źFœM13Øõ%tÅóą÷Y¾5V½ /‰°d ^óbļ ÷GŃ,‰f`;²Z”JĆ"¾ĆJ_Ōn޽ ;kyö!“n=įk×’”Ó7)j ąUšZG‹WuR „šŠNē…6–Ä<ķ*„ĘJ,ēx`§—"_5vdŽiėxĢVM,©4CW@Q yŠŽ‚”īŗ^ńŃ©Ģéō?¾ZJ›c„±1ēŻī†ĒM‡µ}ĖØš£•Öy«P꼉ŻJķŲāų/ū>ó&Ķą¶igAfØ4‰ęįÕ/FŌua?݉E(ę ~žób%;†Ć‰j ‚įhZŻ$Ą‚•š<՟]ā÷ž/^öäÓĪĮy*»‡ˆ¹;{ŻY0U4˦suaV‹ö:RõČ>šbudµ Aåy|ģ.|Ļq9²bü¦«R?LĆ6ĀQ)2d‘Tš‡‰łė“X§ø’f%½Ér[aŚō§`U|łSČÖüńŊ¤µž¼³ ƒ 2H‹D4Ęņr$‰ NBDóÕj? PŻVĢS©: –ČÕ ²œA.²<į‹„8%k‹ąū+j5“[p뱯€q^ńÖų7-Ų “ ·TššfPØK2µ…sā­ŠCąÉ§M§=Øj6ótBUłuĢÕ©"B^åź*¹Óy·rGZGļzīõkŸ‹ŽųCééŸéƒÆį•<˜økž†•|OOéŌs>‚Ó@2 𩯬¾¹‹·_‘ģgc=RL£"Ō²÷ õ5ŠFUQKæ®Õ7*Å~×ožHŽó†­Źō\k ŽM¤0ntt!9ÓŻÕC;Ą"iÕÄ­¾öV_gīfZUŻ[PŖ¢“ŹŽa¢®Į‚ģ©«¾/±œĖ.Ė)–A²œ`ÅT,*ŌT•¦Ŗ†TÅ T].}¦A&:”–I%žĻl‰k°œż­6ĘĘ»Ć8m®„ß0D«±ö)€Rƒ¢SW+öā§¼ė©CN§j‡JÆžWH—³}øłŻ8u7ī’C|żšÅÆIɦņ+R6|\« ™!„K’Jģ0}ÄOźó(^Du¦÷æ*£ģÆŚ¼;P£ˆVuč Ō”/:dd‚w}zõŌ¾y–?Sóyƒ;sk%,,šäŻRuŃ ó ŽĪQķ­~嶕XMÅ&*‘dƒįÕu®’9ō“ޤ:"żpœź¢Ģ˜ÓG)Ė÷ūaĒæł‘Ō0½(B„öÕ­Ķ¢¬ĀÉ\’|c\§\ņŽ+£Ž.ūēŚ·»dŌ1µ µ]ėq8™Ł Ż”ƒž®ųxĆĒW~uņT½yčŪ:1”×§•CT|ķ4"ė E‡«žÅæ_½ńo'“@Ŗm[„!źµžƒŹJRTČK‘YĪ—©¾<ä¾U‡ƒ›#ŠV^ČĮ¤ņ”„¦*†T*Z&éó .ģŌH›.ēXŅ©ŃjĮ Fž^£3ˆš’³Wēі$w}ąæ‘™wĻW]ÕÕ[µµX‘0m“€°Ę yÜĢŲ Ł RŪGXKˆE lĄ„F„$Iʶ„Š4r# ĆȃęŒełĶ€}Žį ĖŲ²‘Œū uwUæ®®W¹o1ßß/2ļ»o©ŖWÆŽ}÷-ł=QQ‘ł"##āŽŸ>}ŽvŠŸ1M]žŹXFņ`ŁĮ×AtXŸ Ŗ.Į„ē{ƒ³CüĮgńxŠĻ{† "ćT:`)L: Łųæ^ó€n‘šµQĖ9;°"nåcHĻg¬±1ūšæ·Ą`aQśČf­“‹4ipV„ÓJ‹•ž"*qa¶”mŸ ō?ÓˆnēŃ:Ķ9ųžźU PņŻÄ(49$’šżį~sÄ;5?‘X8ēWDŗ U¦s ]…Ņ•#J\fB— ff榬?­¬R_Lj…:ZUYŽ–eųŪ/7ļž…vœÖB…p:›ńcźżė3·ź ōé³§ ĻĢZöź?ÖÕv7ŖĪ?…0Õ†Ō¤«–3ÜöŽ—ÄxY ž†īąu?=ā­•+«žő@ļO}|ę[YĒe;`R⃯ˆžæ›”Ærš…a OnxŹ* ‘xÅsc¾ŗHćæfu»°@+ž¾…uT(ź*:§×(“B‹*õ†¶›e·mž½ÕݟORߎn»~"õ*eQ,ģʉq½/ėøs ßņSįĪ!EĮʰ”µ)+SÕ¦nL]›Šµ•vc„ģc²2”Žö³’rI_Ę>'-=„}ŽIš®vHT ZŌ<ūpµŗ¦‚BWWó¤~ė—ĘV­ŒšåNłīԵЖēNv‘Ņõläį÷’’ö3ˆ®FI$iŅč}/Ņ€Ļ؟śˆ{PŅFcŪŗR­łr 䯆—qœGq;»°@-q.ӎ*”\Q%ĆŹźŌrŅhݘµKßõÉp)›?‡ŠźĪ³.„¦ÄÜyĪ{Ulŗ«j!§ÄR*œćĮOg2ZŹ*ūœŚōö9©;óŚ‚Ö [#&W£4™¤Ž£4–:Ń;ÉÕ(ŽZ“ˆĒ÷}±(h{JZ#ō¤aӈĒ=M‚ZEĖFøŹkäDKk”¢–GŲH“Įnl’Ą_Œ¬Ä9å4r$*'“™ZMŃĪ3’IĻųųŻcŸś:UpLUÓĮfœFn4mø “+£^¶Š7²³ÕFŗO&³–C…ķj!3qžåj”¬N LŌB֍īĒēķ|9»_w˱‚ųē,9½JLV -„W\ iŠåŅæū‘6Yś“ś—,’+ڧĻAÄdQiį”ĢӘŚÕŲ(7ĮK]£\ͳ” ²ż/Į¦‚*P[ˆIe ļŖ@z%øVŠ Y¾…Ń›Ø’æŅ3^žĮF( Ŗ‹¦cÕ4®čŃ\·ŚQµRKTą¹ÓHz×ķ_­“ÆźīhI D¹`œ«čĪæTE㕾-)c‡:_xxųčo‡æū|#U«‚:Úū  :§ ~œXŁvēü9«Fē²cC?ń‹K˜ŲAd}ö”Ņ =9KkjÄćÕ ­ĀJ“ŠZj1Ck'„cņķIeń5:üęÖb”·Ņ¶r(ō.©šŌØĒ|{Ex,ƾL@ī­Ńi*Z^;`TŹ8%ēF3ŒÜ *}„ńµsWŠ’fÄžx–ėBĢŽM˜++9¢;“]Į3˜ ĤƒĶ8čV¤µ€ŲA˜+{,\WVįl“Ą4Ēdˆ'ÆJ»!œ\²/å_’»šæ­ś«Ō§Ļöōö96©¬ųE{„@+Īł°•SŠØ®¤ģ£ž99ėTQ „iYŌK9$®NVZ•iCFӚY+ĮļÉl³ē™¾ėWŸśśHDrĪ-¬Qsžu«`¦ Ī*ą{kéĀŸ­0`³‘n„ Ķ’Ä‘Źž4KSłRÕĪ’öqga¢²ēÕž$¤‚įkĆ[Śä0œķ¶õ트jΐž ÕNĮBgXčqJ¹“eb¹lu¬—\>]$„»Ų¾źLĘ«žAŸ#Ā>Ē8YcH…r(†Y)¼Y)l,£oy”µ™yń¶¢Åžˆ’ė8<®sg*¢ŚŗØT„O85-F¾ŽŹ™Ŗ„Öłäķ€|… e=ƒ‘ -“TwÅBåÜ÷¤’¼3uɜ…T°līd!Ь¹ŗY%1īš0[ |Ÿ‡Ü?ī­Ī°Ģ#°jżc›µ8]Ą²”ˆ"½ldœX”‹ ĒGś«žĘōé³[zū×!žĖ{ŠŃzĪŗK‡b£ŖÕRējO+6¤&6lhĶī‘œņŅ™²CÓQŗÉjÓ²ZTŲ(:ŅŖvؼ²üėl(—VAmQiO‘i4ŹaÕ)Č·³&~Ś€³PdƒsĄI€p?¢Ē0¾ė ·ŗ*dnt½¬dQ…›ē©fΉÖL’#Ī#¶‰bS`m‚©ĒŪaąo’XL÷įZ¦ćĆ}_ŸćĀ>§ Š“œøNŹU‡ lPY9åėNĮLÉt ¦ ²ŽkL<Ėeˆ[küģ'Ćæ’åń\ĮJUkę V‚£Ā•BÜ2Fl“š„2‡Fdg’ć¦Ń)Čv¢Ļ¶5§QŹ cUžM˜u5E4ć^»„Ž’[ ß[Õj”*˜kÉøŗEµAÉ!·‚uœĖ³CNi ĻĄ«#å°OŸ#—Ā>'?uĆSX!“L#‘@k­£+‹"²‘6BݲlWG9²A˜tZĄ7}Qjȑ9>‡Ņq}Ŗ­ (£)f©–$JĢ{:G£ņ±­OQGŽO9a¦īųģO“‘(¬cZQ™ž±¬ 'ōu 3:ų ¤p„BX*“Š( ²¦ĪBWēB`œ©…nŸa6Ātˆp„pø9¦Y|¹ńĀp¶x9Ąŗ¦ćƒß«>Ē1=„}N~(–UüĘą9 JB؈(”/oŌķ&b©…©“Čń‰4"‡l³?6µ£į, x;M­})=„}ŽGXpp$}b©ĀBKN·ćĢÕKūšFc„X6 õ®įƒ¤®Q–Ā* ,t“LEĢ:9ą.cœÄƒ?.0¬z}śģ-=„}Nl&¾ĄsąŹDWć飣 ו”‡śŗĮ :$’Óń.÷{²š·/Üq‚Ügoé?ņ>}NfŖz³WĖ|“YõRo-ćĮ–ĖEŃ»x:ŅĘ'!ĘÜ«’?°xÓŚ‡W=Æ>›™ –«žÄ&+öł 9Vpö.ž†ōź±Ļ® źż‡z ™_ž#óŗ?gyöŚe¾%šP4ū|öE“œK…²AZKŁ(5x*ĒļÅń vmkŹ-Ķ,ŌKĶlt0ćLĒū|pŃÅÅ“žƒ<¢Ł•·°mėĘĘ|7p©ūė ·üTĶŖ'±ßü¹q(æ?źį–ĄŚb `{•…©pŪ_4E~ūŹŹ8œŻ„卻™C`p9ł‚æž©ż=øˆ"zsśOīČeW»?mm§‚ZæĖ˜ļ.®zG="Zwö°ß~_Āė^MBÜLŲš0Źy-“dƒüüé,®šĖżphp$Œš V=ƒ%§wńų¦’Ø)»ņ¶ØŚÖ<°Ųǘwæ×óŠ®O-Ž“öĘ|ųäuśŸųŒdÕĶ?å#«—;±ēž įk‹<5ZÓBo³¶V’·”F>āZźŚā“ŁlšÉxzk™ŽnķńńŖpóé]Šń̊'šc_>C ų¹™Ģēcµ4m³Ö©ż+aöͰqρ™­x]²ņ궏«œm’­ņķtq±¬r*}v¤‡p’1f¼Pš—ݶ+čxėžŗ½’®¶YūNąeךÉā€]īŽ“źź³%?ō’üŃł‡®ÖFc„ż«-ЦķĀ6äsĮķ#XļØXøk’|Õ3Ųs&ćÕ¼·GńH%XõŽ_Œq_Ü׎ĢC­ms±Ų0ęļų»ß‘¹„ēBžŻM@ś/vŽk’‚1®z«ŽjĢ<‡•ļ}ŃL~mfįÖ|¶»šųå Jm˜®u <Ą3xyHnrYÅoĪaÆzyxĄ{»æįž×Ҿa#ʕ÷žåOĀZ¶YxįŽžX>ģō;¾=0ģF‘ÄŚ ³p· ųߟ¼™©ß6‘õŸ-{ÆVžćt°ū]Ćvõ?׊Bš*+ <Źr.1Œ]’ ¼r ¬~¾ńŖWuģóą7ăü~łtĪĀ·˜š—Į÷0`:Fü[÷?y—.ćÅÆ: ]z?żoÉ\Į=öæ–[s­Ńž ¼ųŽufĪ?¬Å…‡ąąŗļw‹zhoó쳬|ļĻŚ–ķ źzSÄŖAŃu¬AŽHiŸ³Ņ‹|O/ĻNfeuΆ7żHVՇœÉčyūĒfŁJŽVj£Ō? 0¬QQ×8¢¬ń’žĖū{/żįq8Oļā!¤ßÓĶܬ‚7•YūWŒłŻm÷®;Ęlėeq£wžŽwģ#kV=‰.ßžĢ®µ8%Ēa£ vmśWڼFQ·}Ó Y-}“ E\”¶83ūģ1I¶åņ§ßƇ«ŗßŠŻ¼ō|žBåžļa4@8Į™)~ķ}÷’·?ĘwžŲ 8œ§wqé7±Ķ2ģƼNĪt=R)ÆoŪXü ”Ąß¼n’įRvźˆ%šDŽ#µ™Æ.īØ5Z× aWhas fŚ ~™ÖLZ ‡Ž)x•uƒ”‡{×fOŚåN’EgC±„DĶi”ˆKldŅøœā7W½æ’¼MŻK>žˆMgqūć0 5ōƒØŪOĒ3š<ž0åv࣬0bRįģ¼ć»ļ’Žw­ŅĀÅ,ŗŲ£øļō'Y†‚šQ³­—åõƲ·ļ±³ęT@x ā¾M×vÖŚ˜+Hłj䮳ņŗUTŪnŒ¤’ŅŲÖĀŁ’¾ßö?ĆÆĪŚ©¾Į¤ū+‘ą:^|×,*š;—ĆéŽļ5d²ņĘ~üĆTP^÷q4Ż)Ųtųòhj…ŠCQJÆ }Žįv‚o’[÷’̇Š…ó,¢ˆŽÅ›IæS;üšU4vq£歗7_pŪģ©’%—/pR®l’³7ĄšvYĀf÷Ōśc²Zó²BU!+duu-Ž “Üp~RNGąĪsxš÷’‹_;r.¦wqļ9ķ[³MAk6ęnųx+];³m’ox„ų[;’,š÷÷V }DVĢ`j}a:£: ā%ļ«äKī½ Å,ĶPTˆs<}Uæžčö <ņŪBŽtK›·}ż1‰ķRŖu%ƒpņR åfd„īEÓH®”7æékļ’_?ś©CXé2²čbāi_?cķūöż¬1mj97»żµŚpž96źMi!,­Lx>ēa€¬=Āģc:Äål)ūłö7 ¾z æ˜zfį×}ūyµ ĢyžģĒWd›Ī<£«¬čwæŌ UŁ)XʊøĄ,S]k*gØuŲžž×Ż’£ļ’Ō!~”#§ŠÅ“æĀCĪV Ėu¶~׃Pm«ē—Ö~¾1’qÕ˽¹ģݼ›ŹŠN®Ść­ˆP"xrņŽis&„8/$Š×¹„•™éBŲN»9ćND·Ži }ī!Üś ž¶Ēž‡`ņ›b¬¼”‡;×.>ń©łœ=‘ą1ކ-">ņFīŃ„s$¬ į.É*ē\Ć÷ 6Ų=w.U™¦e2aģϰõ·ž÷’X,?7O·?¾ÖŽōd'u.õh b†øpļų'᛿/’žóƁ[—éÖČ_*÷µć‹y`…[“$ón˜±ßZrDr„4#ßzŽ+…ņUZŠFpbRõĻē_Fó”.Yą0v"V8?YB įZHÖŽž@,Ēŗ( æ;ā} F¾¼‘īNœĖįijĻ-T?÷M֚N7@£—N ÆŖ–AØ]Q£ØWŅ`Ƭä/¢]`e…I·Ž gfWŠ¾Ēbc° ™Ź':°õ>'ĄéquĆ¢ ¾ń‰Ł?ņ–š$šŠ®Ež ŚFČŠ āĒ¢ „„X“ļL3±+Ry-äżąō 'ŅEoÕ8!Q‡¾lĒķāFņ—żµ —šę›yķĄ7ī¼k̽['¶Üš‡±³,ū„7‘½Å¤bI/¬¬)­¹\HŁ([Ģ"Ż”øźāäר»ĖR’Ŗŗ§¦¾ā’æŠLB3ł§÷"įėŚ)hŗĀÚ2၇8ļŒ<Œ9Č÷…³³ĮL{tœøāØ“ŲNĮB-kU°‘)‡ą­ ¹K•¾‘R[é°Ģ~ž›FŃ*h:”ėn¶nĒ)œEY©…µ4ä6Ū 3Ÿ˜ ń­oŪ_äÖRQĮRtųeÄ/—KŹ—iķäųiŠ„æQ*˜ˆø„6šń”½’Ą¾:Ē0GōW“9 ˜™|%š"ą}ókkļ6ęÆūȖÓ׌/2ę·®Ū’­ż’¦1tmcręu >°ŒėļśQHÖĶ„¤jDµRŪ¤%o–FNmq„FŖ¦Śf±zą‹ećŁöq|čz`K[l OV,z(= } xˆÜ5å+8Z$¢ĢG€2c:i8x!ŗT•ąW(3œ!GĖČF‰“ltF¤„Į$Ą ĄónĆzsĖ»6уjqzM7IG āĶéQ_RmiĪ'P®ų§s!ü–šW’i$BņĮl.k)ʈ5å“ĀåPĮ\ź¶Ø‚$0ĪŠT°5¢4“:p*%«Ī­śkuT²ķ|øpDZńåŲLōš3§eĻyģøłō^F[ųÓ„]ūw¼mėĢüöℯ=ģM稙G?|sĶæŽ<9 Ē¾ˆrS! Å­ŸŌ+Ļ6[0 “"AŪĖ ®ĪEž›ö=æžÄ7E⊠^ĒL”7jÕŗV¶UĮÜYQPŲVŁ=)ŌĀ\,œśŅ 7‹y29O•+Քh•„ E~¤2”ąJžk- łÉuė-,́ķęF”«V릑Ń*-„"Ķه‹%`ņĘFn<šPųńńŽW؂•Ö9ŌW;9“LjQL‘v*%Š¢§³ókdœF0MWżéÕ#īĢŽaĪiŁ–ģZ½m[ČćĄĖ€OīÖ󁝽­}Æ1ÆŁõsÜ£‚G ¼}gäĖa}Ŗc»āhw»” ś¦• ¢7šxL«#Ūßš3į/æ!jl61 j:AÉUŻśē L; šA åQĀSČćēgr¹˜Q€æögóVYˆ.䊿ŸŽńTŒßųÓѶ=ņUA,,ŖŃgMė_[Ō?ŃŚČ —ŅČ UŸ6+„•v`·GŸ8ųā9«Öcr˜; ! E̵V3*Čv…Ė©€:`Š=„“ėĄ|v”ŪCĄ#Ą];É\ŒµæŌuʵ‡msJĢ»Tß>°rŽį?µź¹½ŲĒ”§—ޱF,,…Ŗ $cģ˜R"Q‰…ģ6ąĮ…’āoG|°ZxP„ؐÕņ`®fŠK«`Ѷ9fTąj |L‡0%fĆpHó†:„Ī`i»D²gDb~“žQ€| ńžüƒæ‚מ‘Ø <¾~žµ”å5Œ„‹O¹e֙–w’eŚfMÉ8$#]Gēxy9Ö©V‚.W}yCų¤ĮäjŹć…ŽS“‚ꣂ‚ź_Ü5īø}jÕśÉͶ3ķ\ģ!<Ąģn›µo1ęUĄØ»ńš­}ųZĆķüÓ)1ļś¹XߎšŒnPėńĶCü6 ædņ„Ķ9mY®–ųĻu|Hļ®;«Åu-§üÕB0#c…J–-XČŁ²Œ}Ń«Ņ-eHy(­<+ *„¹:*—ś¬SHTRKé–oWÉf#LHćh¶F±ŒøäéÜŠMÕ5­¼Īóäļ$3j„ĘA \MFxļ?ĻßšwGņ7×_u‡ĒÖo›©Ģ°P恌¦^yŽrx9RubI&ļāżó>>ö‰é_żĖ‰›Ÿ-+qQ–¬46Ü=æin—šnĀóLĒ«ūŖ²‚‹=„·cīÕ’[w…ĶŚ_ŅžķøM{óöžõęvrČsœ§Xn ņŠ×.Kzõ›??6ŒE0 å°.1i0ö0 0ńYϐGŚŃ,w šķ„VŲņĪæ\-ĢŌ³TæYœl¢¤ńˆ‰ŸŹĒöüŸį÷}UT* 䁍v%Š)Čvā,dM’JÄZ‹…%†@HūX‡,a·<;ŅÜf(É|#å“A Wzq3=Œ‡Ņk<Ą›Ž1}×÷&ķć¶[ §M±ŖD¦W¶ :9·¼ž:Ó¼Żž4“Wˆ…9fcLGbmŸcšeøŲncʬ­Ķīl‘oļ¹{½yK‰]īš?żāŲ O_Äāü}9¾D…‡ø/ŗ”ķdÜl–ĘaÕ!ĮŗF­tѕ¼YšOEL3!ź(™śĒĘHƒ‘'ŖÅJ)å …>.ĢŌ­‚¬ł8érŠ…Œ uó3!°Up-l? ·µīX„Se»VĆWc¤°gÅł¬gēāq…Ū¦xķMłįd>Ž­dz…Ö¢ gسŹUA±0Od’lpb9N5‘F&.N=w0?-ė#ķ³Ēˆ‹=„›qęm½óP×ŲĘŲ. ^˹Åōę‘wčī7XäkĒź2ZxĪZ˜F¾3é lcõKą°Ž„<Š¼ĘF” V‚ŖWŚ)˜Øg|(*t+|E(Aą”lPu §©lŚgÅæĀXŪ¬§C®ĶL3„éxüŹķF 3‚`*³åK p…8“©–62E‘Óęu#…s`ĘCéĻĖFw• ,õ‘R'ĘιS°Ņ:וj#њmŽšäiA2ń1 0O—łżź³²,ž±{G±‡PbųÅk÷ŲŁŚĻĻÄnöą©\ŖĻwśė2ŚG’†…gžĄƒĪS³Y7z‡uµµÖŚ·p¤Ärąø<ņ,¢[B}­„ŅB±r5Œü”…AČĒcå:Ąļę•é8Žœ¢6E£ö4rŸŽŠ$.­ÖĀeŖæņv{­ł¹Ŗ“1/µŒćyØ ńŒotu&:2=öT¾W’čōżß•°įū d„ó)i…0s› ²Nså0W¶s ‡˜ 0Už}›ģGŠēfŪ9|{oœĪ-Žä^÷ģ‹\¬Ļó¤–ó‡līgĶĶј{·’›W® söęgæk4ķ ^«•×äīĄ-¬ŠX²:֞›-o6Zw_ω/uŚY(&Q\£)EJć!œ†“ēŃ? Ÿu!:Ø©=UœÕQŪdŠĀŅįJŅ*y7IJ&õ3āTÉ^8ĀåļžČōŪæ!!uŽēŠO9+…PĢ‚Ž@­“NDś7`2Āl,mĒį>2Łļƒ}VžėøŲC(±60z.ķjŽ<=xG6vŅĶd½9O+EQŠE>/ƒ‡2kƒĢhķį_õŗõ³]iō²i/© odXsģŌĀRyP}Y…¬–’×bI¦_ŪT±$~čŌf;®¤f¹B 0­£iƒ”ŌÄ®TēĪšæŖŪ¾ר+Ԋ·“,K0UÓé‰j„XH„(ŠOĒHTĮZŸā#Tė „‡ŽĄ“«ÅBńģ&ĢfÓŁĢ|É-®Ī”8Ōnõ9¼Hö y6Ė”@>®Ų]f˜Œa‚©ų÷¢Ļ1Ł[¼|įŽyįŽ;ļōnÉc—ųcÅOÕwŸļw¦ĻfŽże€ß]8óšNĮ¦«µ”•Bč5ēą„gB$ 4¦Zę ²ķśˆ…®vVˆJLL˜I ėµŠŒńd1ŖŌ֍n¹asŸ¦„¶Aj‘Y¤”LDa®q 82f[e@e’a֙JF·Ų I`‰Fåk,|’īw¦/yAā†,TÓŖ’J£i{ŗĪór­Œ{OnnČŽĪōĒż–\øsąźßżtęīō"—Ų„Žīįńā¼{Ė…ŃŗÜ™CX/phå /x4Óžūfū0&7ēlyan}vq‰‘/¼źV®ų *uk!“–ŅĮY(Eoņż3*HĆ0ƒ2ėå¹’ƒÜ½ŖŻ(QŹGž&œ›XØ fäSöŹ:ļć!Öc¹CŁ|YZŸ>Ū²öv¦?åwĻ Ÿ7ž·{Klūļ€ó¶/љõx~^ž·0¤Žž±¶Ģź_h.’IqŽG6)Ś(ń\/:„…SŽ«„€Q’įšÅä:LEdĶ Ļ\“PÖ4š™ĮęPO×ēƒž‡·LNWEBüd’•ØfeĀŚ°%āXEĢ…Ą&GRLĮl„Łļö²Ļ‘΁°·3żÉ~ćĢQģE<½±]mŚµÖÖµZ.7ēČa®(īi`Ū»ŗ¤8ĒłGƒghĢń®UŃ"]VRØ`^i)ļÖĀ©6d>ā_ŪnŹdmŒ ,ųÓ}Ļg6.i÷Fża°“,‰½é?ƛČ\Dō(žŖ8ķ\¼–½öŽS&6ˆyÄ«y-g}¦J’åēÉź<&6••W»9HiŚĀ¤™„yą75Č rƒ`ČĖédiė#­Q“ĄZ‹(.*X¶ ’ĄŌYX"ŃöĄĒtƍōČa²ÄM4ūųKŸƒĢ”±·3ż!¾ĻĢQģE<ŁyóźAčš£ju×īŠŌ ńÕæ2mōæ°Q€,¤É3mc õ ŚN U°«ŁĶZm”8;ÅtˆÉP8œ V¼–4Ćd“żę—æś7V<­ć™²·3§žgzĖ™‹ˆÅeĘ¬šŻš‡’€”žŸŌšŒX˜Ē ń+:3Ö<čk\ ĪßcÖŃ=½k¬üeŸė»bĻ܍d…ŪsƐ““DY ®0a”»TjCūHÉ„N ÄĘ*ßl$ŁljøéK^é*æf':GнéĻėƒĢÅ^ıYÉV³±/ä(ŲBYe‘V¢ Ć„T’ņY˜‹õy£r ē;o1 αZœ]ŞÜl.'°„SŪ„ōÆ#s6E[B˜c~“Œ–C‹1=‡·š#ĪŽĪōĒōR2=ŠG# ŚÓĶs(ķ9E#Ļzā˜\²j¬W7š°WŖ‚…Ö¢`ŻÖ,i½}“Kõy!³IiååćyW8A~cRWdFk¹‡ĀCąńr:Yõ~Žlˆ_U‹‚„®‘«ęF·‚„Y(vÕ³msm'£UĻķ(åŲ±·3żŃ¼ōĢQģE<Ž”JŽDČķŽlR7š„ŗŅʱ>‡šś ī³źBŖ[Aūßģ”oÕ3ŗÕō'ņįe."zO®VąĒśH+!„°ØT$uG ŌŽ@6*¤<›ķĶĀ>‡–épėµ¹ÕĒćU/iłŁÉŽ…;޽|Ūҟ«ÉÅ^Ä£jw„|#Ņæ‡¬üŲ¦‹NĮBĢ:ŚŁēÄ$ĶW=ƒCÉi`ogśĆwř‹ˆÅ#‚×P¾Q‰ŹjŃKF TSE1­åfvĢ!”ÕÕ«žDŸeęt²·3ż{„Ņ£xLCKÖ„EݦG„\ćū›—×{*)1=Ą/¾Ł~c4\ķ®¬&={×JČŃĢQģEÜ5¾i±9Œš=“wŁüL«]0øVž>ßĀ7ĢfÓłåųČ|a'£Żf«kYi)nbŽKzööž#óUķsĢEDā±Č!’¹ŌTĒåĶ ŗ3Ó³IVĄ|ĘŒ–ł­Ļb’+LĻŽ­¤?OSę(ö"šUO Ļ3õčd<źęVm¹O Æõ½JóUOzkzö6§ō=ˆÅż¦§tå!<{ĢdxHSŹr˜}}3Ź’ōR~„ź y޼Bœāj‚ēæā7dV={ĖNtūĢQģEģ³”˜UO`9yĮ³¦ņ_MÄ`ы Ę’Wbüę%×|<’ś•_“ąs/…Į9¹Ō'(+łėxˆG’ķK/o MńŅoBнĆObžœĢEÄ EŃZ˜z(©LĻ&U½åN^ÆzN—ļ~M‚ Œ §Øų­b&ĒȈų~ĒųM{ń3§qŠ‹WšŸ>—$Ł.ć¼éŪĆœ/“R9J+żC€‘qšZĘY›!šń‰½ōāSxšM»pø=Ø|«Ž¤S—“sJöYĢœ'ā>(ä©äõ‚Ÿ¤ł²Fžž7&šTÆFk~+j->L ßĒĄGH# ca‰ū/LżJ²mœ·žH‚Ž@G9ą@-ōōoüYųž€ŹqŲą×o6ʝēšįw½ō÷?ė½ńż«Å”zöŽBNČįŲēZ™‹ˆcŽbÕ`č­z'+I…éŖæY©-?ļż‡‰™ŖXF‹ß5йHæ“®-…'N؇xĮ³¦Ÿ½ˆG/ ‡?’“0g98}}¶ŃA‡M7¦E£C±^æāŃõ$ĒÓ(J¼č9ė~ēKßłĮOÆxßūlĶŖ}1sµˆ}!U³ź\Ņ y'0Q½ī®C«QƬ6|ų><žQ-Š ÄÅ;ֈŁōŻ?•äkhtˆŗŻ 5žøä” Ōčßsī^Ÿ d(Į„¢Xć!^óņē=ņ±ŽĀ#”ž<™‹ˆÅć–Y8]õŽY~ńĒ;ĶĀ]G—Y€°AU Z•†t±ŅnƒĮēך-ožžĢĮO‡ŗxŃ矨§<^į…÷­_˜IƦ(*a£±ŪY.ćŌ5ŹJ½ėvüO_ń¼’zoįQIööĢQ<į"ŗ#ļąr ƒõYf¦ Śī“#]ō¬Ņ˲µPyŖ\ō*; ƒOīxÖĆÅuß(„/xŽ„ ēą5ü j>N7T©ņåE;5åh¾/ćÓĀ>G''ńČ볯ĢEĉGqł™ųHėUOā@S,m9i¹é”\V[ž:m¹|į]dM +›¬DR"J„ń§—ń™§“mƒ’“„ݦ`£.Z„ ŻMƒŠn)`E…Ė‘w5‘ßHśė·‘š–7įW?Ėu7ˆ>. v%Ė‘Č91Ž «ćōŲ7ĶŪ·°šęĖ^ņ¼Ož‡OÆāĆģ³=ż1×g—ĢQģE<10FV]ļÆÓĮ‘˜äµņśæ–š¬2üS!…޾÷5õ L‚ ·a2˜&~ėOZßż°åŹØUŠŚvÅÓĖBź'žņ*5°ūīXd3ńģé—ø|UƒŃPFzķ«f|$–ĒėnŲBEŌĀˆKYĄpBŠģ†ĘĀŚMqŁīsDҟn}®—¹ˆ8(öGÕ”$U3®•ļ0ĮÜézØm%|æĀd„¼Āx$Ųüł;§W3üŸKą/°7‡°ĮÅ+¾ių¬'€Õxį½ėwŒ„®+ ŠB&“;ŗŲ.åј†5hjŌD®ĀÕTĒq ŗa;ė •S°DĘFgaź~:qŠÉO>-‡xĶ+ž÷ČÆ}zÕŪß§‡°Ļž3Gń4ŠøϬz'7© 4Ļ{_Ÿ˜±šēužĶŪ6|x$ĶG]Šˆ#ĶĆÓ!žuŪA"ģ=åżž?cń‚g_ŗp†ż½Ł¦^•×źÅŗ½ų®,—)Y–£¶¢ /’ŃwĢŽöΘĖL8RĒį³6bšęRsł¾$¼Ģ”ÕTX„©|éš4ž€ŽbŽčē`Ģølmøź‰ōŁ%sqźQģsPI µg!?’€±2õĻ)čā ŌY¢+ƒ@ˆ*|\¼ģ‘®”&Õxū{Ā?\Ē’ž“ŸUƒPšc]ėČŖ ŻŹÕ?c¤‘9ƊVeŽOĆZ˜”n0‰øWS Š9øqŹVĮ¢Št-l¤j”Ōś+”¦©*č†b#š#o|޾ēÓ«ŽžÓž£uxso×|@/Ū k^õŌśģž9ŠĖ±jV½Ō#–±æźģČdx`C}äūUA£ĢŲī®k,|žøāћ²łX_IšyēÖ©T”#h 0u»TvWśø£µ(ŲAč½ČXŽÖ‰6˜$ £u`ˆ‡-0 «5lUź(‡ŚˆTĮ\GčJV†2ķ¤¦©Ü S„SįÖĪW×gu9BnSpėŸź-<♋ˆå£ŲēŠņ…³iQćw7¶sĒÉņóóßė¾8FõrTX\¼āūʓKāTKyĮ=ėœŽåDŚH‘O±‘a (xšŒˆõ?’ƒšCo8ĄČ³ņlŠ>[ę‘ÓK¤^ ”%„±V“ ’@ “jŸ.kl`Č[l%óO!wŽęČL3ŽQĮ8“¶­Ė\Bžó=)ƒž'rrØBGŻĒłĻŚ/ŗFÆ®ńloį±Éʈ8’(ŚUOąꕟ— ¦SxŖzRQć+†Ó„NTx:ĒåŸ)“åNb ™pń²o Œ9™Ž{)ĢZ+4¹L©,Q©Fģ™ėœ©WcQ7ØØļÆųĪšļŽųˆ<č‹FģĻuńټ+©JĘŚÅ)(zå"Y `q޵µwžy'~õ—Ćæž5;ČP…H,”:É*,TAõĻ)˜ĆQŹvdjLG˜±LĀUę}Ā.?ĮüÖ.ĀÖ¹EAv +ܝ>·˜¹ˆX@q">’Ćæż‡ÆżāU/čä$©¶ßyÓ—šW)¹Ļ‡ AŸ±iE—µ!j‹?ŪōÉŸ)˜Ć“ō Ū?ˆ‹°>^šĢ‹÷œ1¢ 'ŠH!r(F=SēźZ<©Q)ó¤Fģeu¶Ußƙ ž¼Š:‡ŖBtda’¢źs Ŗd©J&±Ŗ—re2`ąĆTŃt Æį+ĀXä8NSśĒ’wƒdŖ©ś' *ØmNž]#R¦£hÕ߅>«šĘY0ņƏ’™-¢øhgŸć•9Šs±_ūlŽł@b•Ļźu Ų°"dą JOPł(Lų¼pśXŒ?-ÆĒįųŚļFęÓ!ś‘ÕBHč_ņFąXĻ–Å6ŠÉ8üŒÖ•^­‚e®˜Ń!ŖVÉ$‰(Is”^“ÖыXržÆś_Ā|OD ł•r’O§TPŒźV.5_“1ķ@ĘĪ…˜ŽNŽ1 ¢$“W—:HĮqJxŽöeņq±0kL“¦Ē3Ž3Õ2YõĒßg…īFŚ»u|1:ūœŒĢEÄŠū‘§[Ÿ›JZķró½/Oä˜of£µŻģ`u«I Æ§<–Ty”³!īn¦m·LnĖåÄĪxŅH-X_ńžh¼¦öP©ßbósÆēŲ:‡Z§ä&cZüZ›Ł®Q-(˜©jb!+[ćBŒ2T čV$¼^„<•¹’ė_EQuÖZēŖW†ńP^AĄ\1A˜ęQ”ƒPAšŹż!rNÓ,Óq²V>W; 9ąłŪäubį,4žŖæ}B~Łæzē]cī]¼\4ŅŚūyr%[Óē2Gq."ö…bŸżåēæ‘²-(ˆmė*A„i0š—š<”‘ 3Ź£~qŲ¤ōjbéćKŸ•śćš…÷¬‹^6©s”‹šÄåŒz]NšdŒß|"Ž|ŅWķ|ÕĪ… ÆSP]”AȘ*ČG#i™6ÄĀRØ£F5q渚įīŪšCæóUQåTĄråPų$„ĪQe,uų)„ £^wœĮ”t±†F„Čh¤@؂ś¬XØ ¦ś„ŽĢ0™0œq؞Ą£“C>qņ}=uĒįN²Ļ 2 (y _vÕ3Üw>ņąŻzģöµ‘@Ć­Ø”"C’Č!o<†R…EņOAåŻ>\æs„·]L-če0ž”RĢjų#L*yœC±>3F^ćĖ.Ģ.FųÅoūzb é<Ÿ’C±Ņ™Ō0|PįqŠaZŲNgEūµNUAĀS7Ņ ŹĆė²źÅ7„śT®ŒmG`ŃZ„&J…@ĢLĄŗ}Åx žU5ŹŹ”ā¤5•ƒøZ TPłöF×kõ×åDēšh_O;ÜIöYqę(ĪEÄn(šUĻóXēCßk¶n¢;£›®Ż“5å W¹öŠOå^T¢¬ø’aĶ[æsˆŖDSņ±8 fļ06cŁč^Ē­و ¾Ļ›%ֆ"Qyń=³Ÿū¾ėė"yÄl™ÉŠSCJQ§Ø£Båu*%GK]M½xdž2•¼ƒśžt …óŖ‹HVKĶ”ųZŖY«[Ž.։Žć2­śc볜2„ŁĪ[ĘÜ«’?ą.­}x·æö9™‹Eq½>˳ų¼’ōæČ®z„‡œw’°žVŻ.ØvØ»Ė Ē^Q#V0ŲČ<{ŗNŸĪXŃČ3āŁz&Š|ųu1†ŠŸ]ßt5ļ×Ŗ Scą”š¤ćl ć¼ćWĀ7æ*›īń€9,¹Ŗ„įR +a/ß” ė8xDzI© ¬­…įw{ŽUn£ś’2„WV½Ž>Ē5Dqmų(ĻÜO÷5 ‹Źb†›FѬz!« Żbl Ņ8®\TĮ‹‘o,|E~Ų³Įż·­Óæ¬ĮF.Ļ’ŸŒ—•v'R¶ż ŹF6V>a,ò4ݰ¦kø;üߊ,|ŖØ„Cŗ8šųRē?’éߋÜ|Ü4čMY· Z8Œ*ŁvŪ6VWG’¦&šy˜ĆėoGės:sČ®ož1[Ęō96łĀį£Uįļ„÷Õ<*„7#"æōÅŖW±Ā¼ķ+a§‹W}£|±’Fƒœ»äY£H‚ćGbMŚDD-PPÓ “ė©|5ū؅ŅĻtžŁ®t²mõqµ\ Ҷ:ņĪ!|oų×Ed,ØQsü¬+Œ*˜; aSAm$¹r˜#ī,Œ2œ’@<ō¢čb8¾#Śū^%ŁŖ?­>‡’C†šækó ZøķϤqÕŅē8å¹ĆGĖF ä)üūå}Ұß Š7³źõŽJ’Ź']y‹l,?żēß~QWdL£:±X«‚ØrŖˆō]B%Š%.°Ø`āÉÓÆĻģgß·nŗšcVķųµŖIŪųĘBQ„ūKƒĄƒēÉ}ßĆ_}gų±7EE!÷K€%°PD½­FK ZkŪŻįȳ‘t =„wEÕ\åƒĶ±žrœś*„־ܘæłēčļ™ŽÅ+Ńē8éB“泘—¬ó¶k7[°ÕXŲÄR¼“¦²,®Mć¾jżfAÆ^ŸżĪĻš>‰­wĆFłŃü¾»Ŗ¦5u2PL*k’isZZwX×ĘŻéź;\ŗwøūU»nĒ`l$߁φ(y%i¬ īMa”ˆ:–ö6Ń`ćPēŌbÓZĄB”5O $yø•„öåīĄ ·|¼öo×µ<‘[…śź>²Øq÷ٚ…@8UPŚ—ĶĮ^ij›—¬ó‹6Ż1tKĮŖ9‚=EX‰€8iłs)ų8°čUā’śsf!z8p'ü2ē“Y„¢O”Oc– ņNk™ šą ęƒŸź> x¦|ė’‹’¹²·3QN›ĢīHĆāT2$.b!ÄqŒ*i܊„LÄ-„ż3Šˆx.¾K¾#¢vÉĆ1~œŒkš…YC` aĪżpŸØ3ī!–Ž4·ƒ(csY@ų§ ¾z=\ģ¢Ģ”ć ø™|sDŸ^ē–Eīį7>ÉQÓ§>“žÄ-ŗ~ƒ¾åU½ˆ‹ĶB Ü5FÄžĆ³k«‚ŌRPoZhĄĆžŹvl Ōr»3śĄ>{-_ģ`Ÿl=šhK1Ńuzڵ’Dwڳ 8)ķkYĶÜ1‹§K„x_4Ūż2ƒ›>‘2<x,k[˜ń°ĒäZ6eąŖl”sÕŌd,,jG‚_QŸ Ԑ( µ°Źź‹\°¤97v*5ķa>,Do¶Ųd„2Ī­«ŽY>ž…'ŸS"tž“«ÉQüęsĪQY҇{ż±kōŁæ¦7üb/āB²µž¼üæbškgz¤ń¬ä%ėüS×ĶGŻ”©‚ŅČ4ļæ©ų—ImNN„Cެu-6ˆ7|Äū³£%ŒżnzōéžĻīĆG°q»ŚSÄ[…½>“ŻĮČļ¶Æ>}¤ į•Ģ¢Zŗ|»ƒ$Į C‚|„؜Ė3Āąń­qkŖ qkRŌ¢ ą €@?‚1)—Ō īæ(øCōĆ›¬¦B`"ųq‡FĮ¬ns#ćEv,²,S&\;čzµźŒēG ņ–ŸČtˆ_‡y?Ąa)?Šū$¹.YŁ–Š«+ü„wÓ;ŽøŽ[øˆ,ĀiŒv;9¤^ij%õ6‚ęgŽDøL¶cˆ]РĢ öblŽ“J Ńå’ņ ’å_aĻēG‹†±õp·ē™Ž'Ē0ć?¤÷e2˜¢Ų(eŲjMOqÆ&qf0ģX+ČTŹt Qc”ŹBc”1lŖąŌBŻ<ĢĮɅQP ä® é*V‚™t•Ii°ń=»x\| ē2Ķ‘7· fæš¾ļ]‘:įIŁĶQlùü(H^@wČ.iąņ2āvy. ‡äé­’Ćś?|{oᜳXM¦Ōõ"ž¹¼h¬f³4ŹT[-¬XģĀ™X˜ˆ+YAl¬„ „3+ņ,.s$Fńü§{ŸÄŁ?›Ē“Ź˜G=l¢”ĆŪż čāĒt¼Ä?ͼ` SįŠhLÄŃŲŌš/g’צ}ž6ƒ@”A@s²pņšoiŗMAAÖN~J7æóė0o‘¦ /|E–āet]²3²ńę{dĒō?¼ž»·pžY„Óō"ž¹L l7Œ‚a)Ā’ ģ’‚J"%ÕL ‚zRɹš"pH¬¦«ųŖ>+VT””¬`ZPš“em9ą ŁæŒ"iąąČ=Z[ ”×õLŹß¼Óø”åŒÖFL!JB’ϧ¢]O~ų74#ņDAÕś¢’ ųØKŹsŖš[H±1ŹaMŽMŽECĪŸ£W½pż7’×ŽĀ¹e©NӋx]śR’6Ÿ¬–‚Jź²žµ³¶Ė—ˆ‚ų8)ÅM!0,y»ˆ ŖBOŃ}Ž’[÷FG’źzMĪH Z^QŃ(m‹Ķƒ|‰Ōq!§e5„¦zģ© šįߊų²oÜ Ø_éŒ<¼š ą÷ÖRś–?Iéś-ś×ßś~޾•@\…¶ĻB~EóӨȲ(/IY¬,Gó?™²$ ļæGß÷­ė’ĒōĪ'Ż@8M/ā)ŽļūęWĶAĆŖ ŌQˆŗØ6¼YP"ņŦ”\CA4øÖTįB'€‚ų`+!¶p¢»Ąžéj‘aÉ[yV*~Ź„xĀĻųg¼­W(²ŒŲåW|1Mxu¤†²qš½³’[\TTĮ°’‚Ļ}ͧÆ{šMčƏ0‡=ØÉ•GRIm~fĪņ»Ø|¤¤*įu+ /ϱ ņź!q*ŹĀ\ņ\zĮßY’½?ģ-œC:†pš^ÄÓüx=łĶėIX’Ÿ½®(±WŽÄF)ņ„»)™¶|ŌYøóÖą»d䌂ģDlœ'$x}öŒŖ’æóˆ<9üŠČå•v0›Š"Ūę„€b0`·žżd’ӏĮĖPĄ—ŽJéNKÒ˳ę#,©,(+˜Ć4§ %¹Š©¹[œ€[ąxœu½2§%«į4½ˆ§&ĢĶ[ā׬©Š‚š6 ö/©øĘ—»*ˆz"ĒŃš±Å(¶0phœ†>÷«ŗže3æīTŲsī[pŸmyųķZŻ‘+n™—ÅĆhó5t,~Eńɵ)ŅĢ”_ŅŠ„{ĪÓOŻüĀ;ĆĶ“«¦8¢ E]r((žå˚d\8šā¤¶ÅqØ(čG_¼žx¤ėå9ńY9§éE<éIĀŠuŲ-üt=‹ŹŠJQ°Ž2Ķž„%’Ō‘‰ŁP$€KÕ4ʚC4.hd³ˆk¹«‚ąIŠ}–-XóēŅĻļ’Ŗ¦5Ŗœ. n5Źŗ‰W]K—ŲšļæmŃŠ£(„»ĻÓė_üņƆõ%¦äŅa¹©`7 ꔠŃX“”/™ˆ…į„"ø¼ŗū÷ ‹ÕõØ3eׯŗ]Ÿ=½Ń+.ėŚ7Č!ÜnĮöźt«“رŠS¼i6ćŠ78t=Å>Dwį©#›„Ł/•V5ÅJ»(łż4óĘĖ “ŹJŽ(²żĄK‚ڼŒ(•†Q"Tę”ę5„Ą/M¹†ܛ¢IŹ ¢ĻILUEĆ!96Ż »^œS§ė!Sö”ŗÜõXśœ’Ō­’€~ŗlš )P-ӔU¼/L4%ā% LZ4’h>²…,Ūä;ä£åm0ĆéŲ“OPĢ‚ÆŽ…Cw–«ž5­ķf2ŗ)xEm1L‹a"bYrÉQŠĶYkbĮGēƒęüRjš©CnēO’€_FqŹĘE`ŚI½Å1EPPS”p·¶MĮ˜ŽńĘõ7üā#]ÆīÉĪI‚pš©ˆ}V<ųÅ Ō“‚ tHē!ź˜BAc”Qž‰‹BŌŲjĘłk T('ņķs"óŠ[4YFAµEAKŚEó±b‹’Į„™XŅ&[X ‡—{śž—ł’ņJXw…Nr*b&—¤‚‰QKČuBŌ1 z,¢$*ü@bŗp««®—éäĒźz»G©‹JŻ®T„Ōc]„ό)õö#‰VӒVź‰\Ż(źåf©nIŁ@]ؒøTR46•Uг¢æ›Ķj=¼#ÅmĄ«Z„lł–#eɘC¼­€-Å·xē3V-¬Ø,±/{m@QJNųœ üødģ_R+Hm#4ĖFFa؋p…€0š»^„“§ėģ((’æ§łXלJ×CėÓMōSū¬xԜō,`‹zŽ=³T2?JBaBō¹hŪiļł)Ķ/žē¬<’†n8Rp¬`††؄@s&n;V%ß§!ń„\‡ÆP3ĖøN„ĆģįŚ„ė¶‚ÜŽ„·˜EtmņĒ4öĀ$ ņĻRVĀFĮK»}u¹·šgdQRu=ˆ>GĻŲķz‡Ė æ1rFAYF^E£’†\ņś»_ī_‹č±[ō’ž—FDą§„:%ŚQC`!4DĮ²¤0fÉrĮŒI3ŚåR§P£”JM#/éքBĮĀŠK J3.ĢgŹ'Ō ŠSŁBĶČQ a×K{āÓ„ uæÆõ³öųźRĒ«Ņg‘qåzn½9=Ÿ{GĶtUZv0ŒżĻ(³MēĖ‘²‰P\‘ >ylzsmņlXByIē†dYōu–’śōāļ ™@#Ÿ‰–ę Õ(XPi$Ģ `*&¢šI$ŖU°0”²ā†cÓ; ~ģGB¶°ØĢ2¹Š(ˆöTĮ¤®‚h„ ]øĒ ż!­ĮœŸÖŁKJ˜:„Hė+ūŸ‡”ś¢‘łØŌå/éӧρѺė%ł¬0?ųc ›}N‰…„|Tā™b“‡¬œF.ÆI”Q0 »ĪŃū’eščUś¹7„|”+v–¤°hš\ü«Hē!+˜S‹ĀX,žM2ń¬ P3\Ā&L NF“6"ĻeҊ²A‚C\•±šl”\¦µ؍…cż(š¾Ļ±³l•ŗxŠW—¦GŒyZP©ß&śæŗXŸ>}Nņjž½½ą)‘ćŲż™ĶO DA7SŹ*śģ-śhĶÜ9“Pź°'æļ'#ņˆ©˜^bIłźś –? mEYA¶Åż» ]ś’óōßüŹCQS×=T2/ōY°Iø$mLDĮXdƲ†į£. &EMнą+ū6>łśM†°(ѻʅ™t’ʵĢa[A©ĆXĒCRŽß8Ē,ĀĆĒ(Ųä¹=„§;#‹’¹nĒķ ¶ī¶¢¼ė)Ļ1lƒīzD÷?/R–ŒÄ“Ļ›į–4Ņõ o$t1 ×ö“‚>~@F‹̇žgMÅņü“”ŖYØf¹“4Ą\Y’ēˆ…vĶ”cŃČ„’īĶĮ{~&¬ÆŃ́zIy. J‰ćZA2 Fš,å7ŠĀ0J)¢Nė…Ģr•”łi,+ ךŖŠĒ†k«x¾§8ÖŅļ˜ķū“½“Ēń§½céCķs¬Øłu5Y˜‘}ę’w~{ō–o‹hH䈂ęŁcwĮvo‘g3*86v¹½ęŅČ”/ č™·ū‡éB““ä_ņš›4Ę(ØZų)ĮŒ59–Čł X ĀA 5té[~< ”Ją—2T “Ė)ēø-ęįćd›‚ā_œp .čÖ‘ŖĀ±Īkń‡ƒÅ?ąÓgéwܐ Gė+Ó£J]lŸŌžJr7Q¼üÕé3ÆXÓĶHāaÓézH}ę•’^dĄć˜ˆCsX‘kQZ’­ø 6 ,śņĄ’Ō-šP4Ēńż!­ŗ~l}Z±–~ĒLŹQsŃł„µĻ’2:ĘkØŗüĻĆ?¢ÉłTS¦i>Vš”ęK(  ŽcӅŻ3¦sž?½hģ{Lf<&æi]6 J©`›@X¼Ā6PćZ ĘĢęįŃ÷½)cЦĀ58‘p.įo'†=SK#”ćQĢ =ņG¬`€3Ļ/ü%>į3‘åC˜MfēhéCķӇŠŖė¬p>ō÷õ&$ŗP«a¼mE…füų0ŒŃĢ”ŻpxǐFī6÷¤Ųó«÷¼·Ł¤Žż+„®„ĄŖ)‡seÉ*3E=$ēėāŒ‡§ۈw ųKļgŗ¦ųź ~ܘ”ęČō J˜2ž€Ö‚@9A׏®Ļ–8KæćM¢”i)uYė+Ņø(.™ć걎\źdś,(žE™3“)-|3UoŌ§/£…ż‚“ņ€E{ų‡µ¶MōÖŚ8$ģ”Ąø¢šóĮL)-9q`ļ~—įQ'ˆž­ś¾›Ć(„V-+ŹK. 0k,„ÆP¹TL™×Cŗv“§ĄEŌ„YNIFiĪ—Ä)_n˜œdĀaJa¬ųcJć)ĒWī¢žWŸćdł~†ČoަąĪ4'ō9…(Ju׃8ķQ čó”—@¶ęCŪæŖU7ڊ&€G؃:iÅähŃŲ°ŽDG;CԾ˨aćė/ZĪWQNQF }äz“mTæōƒŗ¦NĖŽV4ƒ©™/v±,Ų6£`n”ZœÓČ£kaĶ!“Ž–ņV²å^Y”pa.żTŌ8ӔQ)‹‹?’%ŅĄ[ą]ĪH– ”ÖĻUź÷¦•ŗÜõ ōYT°Ķ¹ūžąY”U Ęhē;®š]ūģEŽ—÷½@'PŠ@؛õœhB]r] ¹®Į`‰Źś:-ß*ž GĘŽß¾Ń˾&²²½€/ĖiPŃø¤! rČ÷čo»žµ˜Ņœžų µˆŽ@FUµžÆīkĆ.¬‚„¢`&ž”VR±‚ų8ÉdxÄ `6ōøvmś¾óĆŗēc/cŸÕɲ!”|”čożŃ®ßi}eĒ‘ĻO½ÜłmŸ>ĪR@=d†6%+3˜%õäŸn“švÕBØØ?€‚œŠ ĢDĮüüż5ŒŌü±tE³tołžˆé²„7š–¹Ü¬j—ĄBt*śŖ;ż(„?‡eMŻ&÷22<…åV’0Œ8ćĢĆEqŹ—¢OŒ-Jxü¶ÅNyķQl°³[¬ķ-Ję[iŲL [²ˆčٵ؃»|śé¼ķrČS3)c€Ä€Yd –Ļ(× ŅDź(­'&ų*4.޵¬ϰqsłh0Ÿga:üęW>2Ƈ{fÓ „Óōžõ™9fKŻ?#›U85ńķŗńĪēFŹ–ŸÆŁ°•“+BS„©ŌtĪ„_b qŲ’BLŸš‡EsS±hӛz<•«“BA4J–/ qQ, róém”ńłh8×uŸ8U“=šÉ%«ĘŲW Ž"( &ī Š/{wšą«BœK›rME!Š‚©”$ćĮl*( °Ē¦B  8phģ‘?¤`@kĆŻŸń’|Ÿ…ÅźzūE©įŽr¹ėAõé&aĶ|m^u=śłå}ß‘”Ājźid?† (•Ų6ÓČ<(Yōæ},8ĪŻ’ūēč U4$.#©ø_Ł@a^㟩M#QEØ3v©JĆĻu#4  <>łŹżš@j)Ų Ū@lü2sSł†Ķ«ØŠ,,üž6$ĘM…7.—ŗ©›ÖĄĻL)”v”\SÆÕ«§Žmߊ[ę[Óē€8]`3pnDZu=Ø>}V(fжmĀJh*‹¬Š,Å0ąØĄ¶1’eōĖüÄ׆3= *é ›GQć„ŗØ˜Ÿ¼ā;¢†|†ĆøŖŒ[ ¢å2$M”|¹ubš°Ē³‚š=SŠĶFU±‚øQ‘sƒIÅBōĄc Šē΃“3,B!6£d[Į%ĶEh #“Z¤dM£¦¾# 1 µ/]źø2öé2CØŌEł_^ēļģz5ś,6óŻ+¾-rm_[”jŠ-J* -ŚPō¹”¾HN:”óæoWyų»”`3ÕŲ@M]5mĶØC™>›„6…øŻ£7’Qš3Ļ«-,Ķå;‚3ĮÕNs`†®ŗ¾üą×ė*JŹZAŌšQ¤IŒ…FĮœ"łˆöD 3rmī3š9'©’[•-kрgøWÓ?0ĖÄĀD:Į)•̽,!ÓO’nš“/ÄłéĀ\•óUø$5ĀŒSQGL B{ģ‘r}åźŽ×ģl¦3‘K]/BŸ“”·<%R6osŠ7xR% eß·JŽ0±Ż£é\é_‡ˆeŌõ`ē–‡¾“Üŗ×nSP ²é'„Š¢Ś<ŻPŒ…Šāõ~éæ :Œ[ł.£5vY5šĆjŲüUM ą‡` šĻ”ŲČW9Ņ0 "Ø=éÅ÷(pųĀZƒ}3»\„ć[ČDjk{Sc^0¬ŖhäŅćm¤õ°1eœ įšŽ˜N é 5+.–DMŃK|²Y¾Ä›õŁ#Ż@xTµ¾ŅÉ8ū'¹¦į¼ū|ēŗŲ¦Pƒ‡Š\M…EžęĶ;)Ž%š¾„ü/bē„Ļį{¾IkKZķZou‘ŻĖĪ[<Ø 1 ߣ…ÆJ±'(EŽ¢Ÿü·ĮĻ?’ČŽHY,¾Ć I‹Z)Ō©X•ˆ…µ‚ĀĄ‹§uA‘@8Ą0ą7–ŻŖa@U“©;؀XŠ«`ĻŠy.ŻāŖ$ēK4wˆń„O#¼ņ‡ĮĖÄū\ĘĆźØŁÄŠó“Ķeś‡·pÓxėj4÷ßŲ™L76Ł]Įž½>;óš×iåD¼‹™M_7bæĒĪ.M[öw[h*Źm:Æż÷’gzķzŲɰ±/ŪĒŲyėU3qŚ” ¶TĶ»)f©b*pLšž[É9‹Ļ‰Š‡ƒkŸHø+×āŚ±jx2S oĮ’@h~±°g,4F҆ˆwŽĀ`-XBA¹G)Ć5#¹ŪRśSc!ŒĻke!"ę8ÉÄĀTf7.wĢįp%ü#Ǝ:ģņÖśgŁŃ„÷žĶ5@ØŌEłæEĮæS}“_÷žłŠ7hĘĄjõŪ¾Gs G‘„ȳ¤Aä*zó_’Ó³f²p.8FŽõ|]ó_5óU-M6ąS®™ ųĒf@ ¹Ź€„õ=ØK9 ėóĪ? ^óÕG[–¶ėøK qK*D_¬6\ŠUe}(h1„eKA&P”=vI |µmgĻńŌ4¦¦'aYl÷¦ŅXąō8ć$ļ@”ń‘µėø-٬ü/:iÖõĪp¬®Ąé<•Ł&ˆ3«(’üy¢ąōņ ¢–]—„(±!†Ō²wßįŅ>t½$LjnYX6mŌ…”Š·ž¢0J6 ”h\d–ed“gółs C%g•Ź+ę\•*5˜e]„•Öū½žÖfj…ō™¶äFάָFa†:悠]&a”ņC·-rķ®\“ š»BŸ=Ó „ķ¬W°Ļ~y’×j²w(hźj³ Fœ˜5:9Š,EĶosčr-“Z3­dŖÓvQ7Jń/Õ”ą<`!ź–4±“‚*-k„yqō–ßā*£-(+d.Øs)"_" ĘŅŽ3šČĒ"fõ‹#eśź4 ōńGwčŖė)īM’ķwŹ$éz§7N7½I40­^ĮSœ¼Łd±#ÓĢ®µcĒŅMiĮĪŽŪįFP§§Ą@óZŹW°P‰‹ž5·Ł¹åĀךž­™:՚»’Ņpčh ¦Q8õu\qųĮåFA®KŚt5e£‚ĘC^“óhš O w½ūŅØ»[>l* ŹE÷¼dˆ€0YČż«lŚh€ö0%×&ß#Ė¢1…®µBt²b uŅ|²2æįĮÆīV×ļ³š|Ķī˜=¼÷9š1ĻąWµŌā¤ŠTT¼o¢Ę Ģ·ęDca)+Ž%ßš‘z[t:y÷˜ÜLYI ĘŠTz@Ś«“[éBĢcų˦ȑXŲ@=ŁuĀp#ŒĀ°œ„PŠ–uĶåkWp“Õ°-ē¹¢nlž ģÕu«fü-+Ø(šČQlį^wépāCĻ `Ėš!N;ŅYŽÓÅMoy]O¼ĻŖēĮgéŌģmIH ¦! ąē4שЉĶ={ŲVJf2*BMC‹æż­O?t_Ųõü’vÓĘT-™µ ĪS.ųTšk'QOEȇ‹ø]H—“0pČŅdūgķws\;/,ŽŌOœń¼ņ‚r0_ņ4-¹ą1šˆĄ/ž*˜×"jpģqķHyŃÜ÷sļ Č<Ypø•ŹŻoNx؟½FžÅhŸĖ1žĶŁmEp}vōM'>N4čzā}V=[¤Ā6‡ŅŲ1³ŖöD¤DĶ Źī Kx‰o5³éFŁõÜeÜ/›°¤­ÅõfÖØ #ćf‚SYDXØ…Ć‚ŗųłEčē]Or·€4~^(­UFĮęå5‡‘ń/«0iä ­­ŹŪ½ōpxlŒ^ÆūīČĀ~éł|e.£ ‘"Ūf½P ā½·Óó\#”?Ķ<÷]ÅŪŒ\śĢ%@ų(¢i)uYė+]/BŸ•ĢŌ<-{Ć“]5+įM3o¹ųĒ –ÜHäd0©ųt‘‘ĮÉĄr`m Ŗ»5Z˜£e¦« ū>–šO\7 ŚJ„`Ń’ИvĀ«Q0ŠaA®(ČÆß¶ę=h5‡ƒj˜]m6/-˜ž—(ˆ³‹įŸ±°„ąŲSAąĆæ)Cgæķ3Ö±[7ŽņŠˆ<Ł,ń†ģ_VÖwĢå‡R–,ÓZŇæę¢’_nŠųĀīXœĪū”ōŁ7@Øõw(õąįĻWjøõĄ‹z;On¹G¾m]kŻXØŹHvŸĘEP l™1 j0ŠB`)WkŠ„Ftp¾£øžć/_{Ox˜‘äÓ[w‘›9Ż „“]»X ühē¢ ’šé—ua$dø–k#i˜‚5ń=ņŻŚĀĄīr‚{ŚĄlg*+)„<޳ś-Q*yŠz1#yš ¢ %„’w»f޼Ź8h“ĪYŪęǁǔŲt×ÓØ+’O?ĶvߌB¹KļyŚŠ[ąS8;éBÉLj¾’čh)u¹ ŪNö:[›>;ŽŻųgvM³×5 ¢dahš‹s–`bŚ{PIQF1Ų(i#£dĄŠĄ¦5)a9Ė ,E3]wäLZ·¹‘‘‡Ż–jQC`ž]‹ĻÄı$› ¢xX‡B,lü‹šzd 6.A č;<äĄ\I;žž$Āš4jĻ+š÷ż£FA%Å4“4JiHY–J^WlYģ¢cӅ€žuŃ’÷’9f¹{œŠ$iDģ³Čt”ÖļPź%ÄÆŹ’ß•ŗ—ļ樛^¦ÉŶ¢hHĶÖ#›ŽĘ¦ÆØØųHŠ|F‚ø„ P2\•šVˆk±CY9£ĄŪ±”Ærrø.:b«Åž A¦Õ°©L0*(5OæØ-4+‰‚>\ ‚)‡Ōpžnž³.(/łq5co³=öw†E¹Ėiqv@ē’¼&O±yÓ·E7uÕ:Æ"ōo©ŗ7×!·¤¬ b‡µé™÷śõ…h[ēwö•ę“Ä}št”ä’–ś3DÆlŽō7J]l𗦵¾ŅõøŽŲšŠe'®j M¶b’P`CŖY¾LšK[“Q02»Ó6;˜ļPąŽC§ZȰ‡6;“ø`˜ Ä]B8!ÓĒܳŠ÷`c!Ö$)źEØ-¬ø”ėUE“- †t=¢±ėOoŃvznłŲ:ļåXAIJyĪuÓĶ ŗŅ7½ā‘å­ąÉL76ūõ„#]u7ōefÆUUźrWK7ófözl+ģDš2ĶGrM®@ˆĘFĮ$ĀK[Ü. ø†%_ėŪ\ i`w²}ö{%F­‡’·žćņ󩿚ģf¬Ź ©Śrr*+*Kp.olVˆŽš-¬**pčŸ>ńEzź—ĪyœÆ{yd­=¶N·ĖhsęyčŃ ![ĘoćēCōļŽ·~õ śŽė9Ü3Ż@Hō¢WīFĻ^;JńūNō9­ær¶+ˆĶ·Y8[ —+æaģ&…(X „…āÆą"üKKĘ/™ĘB((ęq- dlÓՌ¢ŠŠŪM“ČļźÅļsPĄįŠžG?ŽĮēÄŁ0»-•ągŲ+‰šZŅĄĒŠ©ĖE;Ī Vޜš—č/-˜„F0Ņ÷+÷Ą’ŃPZC!PoZØņ0Ŗ‚‡4ÉLGōš»Öæų8½ęg{wÉŖģ'k›^f¶ §ä÷¹ĒrÕ瓾}*ѧ»žĮ,~OęRCˆŚ³Ä¹J”ĀŹ$’ŠžÖ‘ +Y¬ąXd ĄįZ x »žåÉH\ģ”Ų’.wļyÖJXэ.Ó¶nČ©ÄB!°,)+™:ü6³œG‹$9+ˆ··’āX4ti²At®¾ >ΜßQ@émłl Ļ™ É|“łŽ–ÅśŽ”f4Ā ÆÉŃÆżĢś?ų¹ŽĀķéB­qß^¾ƒ³MĮÖńĖm ›Ó8ķćZ’œRæCōū;/Yż@>l8Oäd)†ŠXŲ2MŌL ,ŒåĒĻĀæ²–r" щmņׂĄ!ew=±c'ÆŗĮéŽ+ĪéĘ«!Pä£Į¦‚yŹže…@X؊ œ&ŹØ’‡UTd+é¤Éڽaaś?b¾¢éœb-AŚ”Jj§›Üʶųīę.h+‹<—¼vż“Ÿ£ßł=‡›±ŗĄ čRjM)K©X©?Łėł_+ĘD²»šo/īVOīz®Ē “K¤\˹\G)ē¦i]q}«T¦l”Jc©ĘŹ|F£ŗ^ŽUŠīzsĻ;_®ŁK8)ZžåŅŲZŠ–‚ 9×HœÓ$£8Åo–¢”ŹŠĀ”6Js*¢c ļ÷WS TŪ­WQ5u£ †] Ąü#öρ6+čyä8ō%ww½Š+–“”ąq±įᤦ™xū>¢"śQ¢wCµ=`ŪT°iüŃS›®.o;szZ+xåߊõ¤ėŲóS:få(Z”Ä„DŃ\ŗžč©Ź1W3)8!üg“¶LÖnä+¤óĘÅ¢n”)ŀM„…IĪČ%M{ ‡•X8r¹įŲä9³õįŖiÖ¶nŪZY5cnŽĄIį®'|š3źļ…īz˜g+ĒŅā艳ĶvVŅŚ?Ŗ¦]š³Ī‰,žX”|N–SZPš³ŠIĘ t’H2‘a C‡UFĮ0|N0Ó z—ęķŠiĘcIĆh×ųM]¬JŹQ0Ś‚,Å£½µ!ćŃ\`$f‘ē4pčß»ž[?²Ōå^Ét aĖ”č»»^cĪb‹[J]¦­6§Ń¶ćZP©wż…¹j› ;AÕśk•śxė@vЇ]ÆŠ3“(©d;8t^uw„-Īń¼žŲM“’ī؂[ŻČé ¢’TF;ÆRG»IŸŁ38ęU÷żįoŌU%æ'K>k)°Pä°m¦%«øN „ƒgŒ·*üp5^°‰| (TC ĮÓŗ1Ė¢Č+h–EI]‘2odֈˆ’p£-A %`ēŲUų’8įĮ Ę‡]/ÉóčŚĶÖyÓ%„»ś±vŖ°ųAµNę7‹½N{†pkŸū$hµ±k{ūž|š!#āżbšJ¶J,„|šl¬øEMiEEC‹.øTh’fÕ[H“\”8 †«bł •ęŲüJJ ¹¦BŒ1 ¦R˜¶‚Ņ3ĢaJ‘X8‘Ęł1äŁĀ`@ßń]‘; ųøˆ*iˆßhNv*o£¼ØßöL’ś-śĀōļjź\‘oś ©qܖ6¦PPYP‘× ę26te1Ōøį$įé€CL¶¹üųĖ×åŸ=Ņõsė8V×Ų/Ć¢Ū‰n™ƒ e9w?4ÕŪ”öÆ}żn½ķ•sDOj}Ģå÷±O†­ÕĄÉ“}O¶—³bóM5›x»å}_ńX²‰˜}Dm)Žpˆ-O7"-r„“ßõJ¬@V@Į¤\l’q"Æ(]#—Z„Cbį…Ė„nĄC‰¦µ\hš3D _ ä|(8 ®rˆh@äČ;éIr+¶$§8§ė‘”IC]²I`Ż0G²ĘĪ”ż S…2ņ”ņjėŲR ~Jö`c”yń'/žg3‡~»ŠčhŃϼ)ą]%“’šļ^ĆæŒ Į/üXA””RĮ;‘:Nh4āqF1EQ؋0ÜUŚ6[ų…Ē‹iézÕ»IWFņ$wĶ^Oāˈž¦i)uyń#¼Ō4¾õp§ķĢķDoj}Ģźjøõäżm“ŚįŽ‹i2ZčJķµƒz)·~’ßŅ[ÖMŁ:-ęį—PT<Ś y+"G±Ž…œf+śń?ŗXæ>Ė‹kpBVجTy„ņRØ+U”Ŗ¬T©¹®ōfŁśęmMĆGĖ«VÖmóc)Ji(~3+M¶Åo_£”K/{¼„°0ęŗēÄ((ŃŽōÆQfĒø„Dń˜Ā˜;F4öĀ8 ’ģc:ŗ³)bWnŻ2-­Ælż*Žć’{‰..adJ]lńöŽ}ĻŻ??~ėcvŠ½f`¾²OœĶAč'‰…ūLĒ^ĀŗĶ7å¾KėÉ~1Ų÷å}ļ³·mŪŃŌĀJ>¢†‚D¹ę‚ķ&“扮÷ J “­ŁÜ¾’#g×Ā]÷õj’_Ą¼“ä]ÆĀÖØŁ.›¾„Ō¼‡¦-o]Y‘eQQŌćˆćcóKČśōÆŹ„2n’ˆy™ą—~LŒ|ÉA ¹K˜P$"Į˜|ŸŅŻ6§©ˆgE§£ūĘ{µ×Ė~^ŹbÓVB+µ’°æmĪÖå=šGģµŚŃ֏;3šRž'‹^™c$•sķŠ³j“öŒŃ掩ńOö6·)•˜WTT\£¤r¾Œ«ĀĀ0‰§²ļ†6%ód+ĖēōdŲÕ·O¦ļ­y Ė구Ø,)—ó2Ł{ œŃ%ĒE¶ÅŌįc%G\‡©Ėr>ž„‚"Dd§ ¢Žј0Š—ü£Œčł/’čžCn[xļ+ø¦ĒÕŃ}7öV¼„«åŠśóDk“ Ģž©mŪõd­o;"„퓳ƒ”u·~¼až)uy·“/-xŁ6ƒL»,ķ¾Ūņī’ŗ£ÆŽ}ŖÖGŁ€0ÄR“…}GSŖ)‘Ó@`" NJ®ł\Ķō"æüń «IķŸÅl2YĢĆ»‹ö ŃĶ»³ˆŒčäśY˜ÕPź³ūžloż8Łõ¤öŗŽö#稿GČ9R uo²š†gŽ…FÕ:( ę(eRR©į_ŅÜ āŠ‘E§TčŚĀ̀ڧD™WėH1 ęõKXCX±eIYAYN©Ōč<ĪåĶLVrŽ…w›Ų6Šč¹L Īä’ńUiJIĘĮ'j6 ““†Fpx×ķäĮŚłžģso’öļ½³+Ję«£ūB»]æŠśŁDO˜6Œ¤-»ł„꜅ģéGO~Š mTs“õc²×ymޚł&¢4ß^Žśå„9NÆž¶2ĒĪē•·~„Ž$ŠøUµD;ŽĄŽ2)ąZRRŖ).™Ć‰lRØ#į0,łdGa©é÷>t=Ån¢Žqķd)oŹŲ[ŅR+…yė:”¼ąĀ ‚:ÅŖ%9“†°g[„ņŅ–üžĀ? šķõ›(źĘ†ŗr™LŲ96ÆaĻČ·©0ę²!5i„ģ9æĆ«¼!&Ż0®õ3”ś’öžž³Ó֎m}„tB{yńRæčž½Onżxcŗ»Į擷ĻO[J=Jōl¢`zŚn=*'ńĶĘ~­ySėUąMĒ%ŻÄV”DaVQ*ÅąĒņ%‹‚8vĄ‰§ ¬®gx†“¬Žū؎zAIŖšĪ‡Q,K*Œ‚9åš/ĒO˜ä’Ö/ó$„J®ā“ĖĶ—ŗ¢T…|[V|×ŗ¾Ŗńp«ŃŽ1ī½³_fH‡½µ×ZæX©Ļżåß^Yī8ßKōŹ=¾ŹĶæ=¬BF[ē»ē ØŌÅĒ®xfū¦Zæ^©×5«ś¦™Wģ$Ź·=Ų™š’mKh²yļ2 0“i­æ‘Ķ¢ĮFa$"Kz,!{6¹ŠĻ?ŃŪ]ąŠQGF¦ŽļĶr•nń¢w„f.)ČF÷qYĮœR!0EÉ(„ޱs7³3Vć™$¬Z”ŠĄ%ēĄ‡Ø6žCgŗ™¬¾ˆVw·žk¢—š ŁöÖ÷ó;²#KWp’dū|§Ō“ˆ6æÖ_Itćš]kż]D/Ų¶>‚—öøäŻDĻ8ҊįMŻVŗYČmc>Žå@  éؔ+žŹČgš«,¹x‰ŌÓ1DĀ! `ŌOC+ķ8ōV`‹é*‹ÓagĢ2«“æŚcQyäÖŻBSJS³‚ņFĮÄ(ł&a…“(ŌE…į$ ń/aS©É¶łœ’óōV”Œč> ø Yµfg:ƒZė*õūžšm5rŤż!$²„““˜˜ŌnsŁÉŪG§-Y8wŽč{÷Y ­’Ńž#^Łqs óčd`±…œJzŌ„Ķ'× ”­(…|šŁĖD>VŠ”’ė‰Xˆ††DaYėč;4B·xØIŲõ"u“('Ūźz§ 钔EEĮ†Ām Ęh§£@ĔĘCzüM| §.(X ü!y+h‚«veOÕ+”ötļ“-]ŽCėUźŖÖ?½ļ9«†_;·ŽxžÕ]*uq׳jż³J½»zsąu3,ĖźĖ7÷@2GaU©ŅLW¦© QŠų—JI¤Ž„1UHŹD 8„…®"8Ģ”ow=Ć3–„ķä®<ٶõz®ż<®‹Œl›²Œ²’ņ\”7 Ę-QG _…68Ž1©*“59vŠī=̶P£į²ÖwG¦»Sē"v|ūż\łą ½Ÿčm{ŸpiėdæK©/ż!ŚJ]6˜5 ^Śc}>`NŽzpOO:{sŁw`˜+›ŁŠ¢’¬BxA#CXR¢™ĄZA°' öÆŖū1zŠĘ6ū‡X“ ōmÕõŖLŠķ;u”“ļÖķic({’Ś{SOņŅ’7g¾žm_‡ŒÅĶKŹrŹ ®1£Ä(ˆF[Aą‡:©‡qŠuȐ?¢±n_™ŒÄpÓø;łöJ{ćźŎ!<ŃŃśYJżé®_5¼™ÓŚn}ŗuĪåī.Ü)–oĖ4ēŌO”éfAŽĀŗq»”:BµÜ(ˆKQ xhLėH 7*YB Cźµ@ń–v½Z}–øUT\Ļ%p./jӂ „a‰Q0ŪTõ$Šb®= F ¹>NVC“éž¶L{™«ęTŪ‡«i“žY„^ŗė²ęr:iņ![“:ęóRp€÷Dε£xh 4eeR³‚Āal,„`ÆŖ4 +ņ-śg©Ÿś¼ÆlR{’\6wŪgA9Ģ+eä{  čŚ4°1«ašs‡‰)¢`bĢj'¢ j’߈?`Ą|)Ź š†nėūµ£Ćq8IøÄéÜf}²ņ׏=aĻ~ę]Dē÷9³3•2¢\:ü%Z_Yž8{łWQ”÷;įŖ¾šdŗÖõ0ūœ’Øłł7ß°…³ŽmąĪ~ßńØė™/&SłHš»÷Ī»yagJ>³Ļw°·-ńH‚śIŗ]„3—‘Åõcś¶ˆ;gā°Ņ«»÷-.qIgmŅ“œĖ¼b[‹§?8nćc÷pZ3ÅļHņmĖ mń« ß¶<{}h½ˆĒ…MZłŖ«śBE”i:?“ˆ³Ż“ĻaR­ŌĀŖ¾Ļ‹Ö9ź°½–Õ±5v·ī8’fGļÖ£9ęF|~žŻ->SłčxųµÓŁĪ®µ¹õšSźbÓ¼“d5ˆ=‡KČȦøl}n${\_Č5”`CCĮī‘Kš¢øÄŠŽć®u=‰>]f¼õŠ7"—7*Ė@ąagŲ”:›ęNSgČ­ōüł Mįš™ā7/ł¶ådķéJż®no8¤^Ä„¤½Ć؊JŻõ€Zy¼¼W<¤ŪTīfX…UzL;“ĶP»‡Ś2‚$Ÿe&]Ļrå²ę{/µĢµ£ńxŽRo· ænę¼#{mŁ’?{å$Iv•÷ļfVVeeeĻLOĻĪjfµ«Ż™ÕĢ"!!ń²@±–q el3Į±ąµaÄ˶ĮXaƒx9րņƒPĘ B„± ųĆĢĆXŚ3HBŅōōģģLU¾ļ½>÷ŽŹźŖīźīzdÕ­źĪ/Nß>yóŽ›ēœĢ:æåØ <;å–KV>B5«Ņœ=į¶Ü¢Ī”b>ĄföŹRki’sŸe¼ŻĖ „ĘÖø–pÄ×>īö+Ł&=a¶Ą:ŻOŲoĶēĄČwįÜŖĄoXėŌ©»h;„IeˆXćp*ł éPū‘sćp[nq “§±3[kKݳ D Cs†ųVCāa·b$cł“ż\&’6v’­B ēČ äiŽ“PŪi$?.pe±Pk‡7 1Ńłq^MāqztRDÓ^±ŁĢqƟ÷qAyBkżi@>¬0ü†µ=š±6½, ­Æ®Łg ¢&āj:Ŗ1U!ūŌaL#qöœ}åŽÜŹ%ˆ‹u@€zW¦e`†˜!”ŃAL-I"‘źVĘŖł…Üę[”—Ųb«BÄö"?F6åśĄ›å$¶Ą Ø;Ń֙֯½¹œĢĖÉYśV]jÖ"ˆ8ņß«,ž·žĶß®äœüւ|{“Š­™1tā«mG4Æj")ßA*,=[.ļQŪ|‹Ņ$ü ö…@ˆUAć±ŌŻló4"åM†M¤Å;ń٬@®-Ķ‘åHÉ!Üq$GR ęHČÄD1³…‡1Ä<Ę Ū鯓 QqqČlP”¾÷ш±2%zœ'RwO•”Hr¼ŚĒŻ<ųhJ‹«Äį6ßā™@.Ć ‰S˜”I‰s6u9HX@Y“gB*Ņ’ó^õ8| 6]¾CŚŽ‹ćÉ:ŠJ}Ę~ ~sҰ{©›¤H3$|g[Pq$ĀVg°¦ķŪĪg5“~½õj}‰˜Ė{īÆlćė.Tœi×O\‰X£æ N!ž uķIäz¾I¤‘šCĖĮcmÜN JīŃ]±•i4ŅsSmō•ÄŠ##ņ©±rŻĪ•‰Ē›ī¼DL°QI%š‹«ŌjŒžŖ„¬ž¾Wńœ#Ė‘#ؾ¹4IšŪō·Ż D Ä DzqõŁl©R6£ń†ķ"¬  ±D|ćū½}ÕēZ `~ü<…ļ–é~MäIä6ƒĮĀ!Q+0ļjk9ų·‚æżäYød9ū z‡ˆ(QH ÜG*ŠĘŻĮ²ņl"Gšœ2dŽ®Ņā¬9{5’‡5½ŚžH‚Tm£{]7ĻUDi §¶ż³H2$ ātļ QŒ@ U vAHŖ)8ƒ Qqõq8PƒzŸ“Ä4śĻ_PRpB”8dżKjGD‚L؉&CĮ-ĢrrĪøų©—‚w]Y a„E×=~–pH–”-{•äćfĒ}„«SXŅ+‘Üw…Ąc[ŪMd„”KšŚŽl=åŲ Öģ""’]8×ųĢNAf;œĆÄVŖ‹L¦’šy%äĻv”HMŽÕš+dõżS“”«.O¹ų lgSkFōé.ł‹Ī 7ɝ8sz©sŖłņkĪī\¹pūÉWm$™Å"­½j"®>瑳ÜĘóÓoŌ?Ž=•„#v/ÉåRQÖf% Ķd.ūa ‰ļžƒš…+Ŗ$/=i;”½¹iįsīn4¶7[;[ķ‡ĆƒÖ§©ķˆ×V ŪŌŖLÄBćüĮ‹ oÕ/wķ)ž5ģŽ ꆅB/Ńó ÖĒaŠ@—ć_~(ų®§"Ū‰­ŲøÉ¦k!’8›‚ŒUF7qÓ YŠŻ–-Dž€Ė+8hŪŽlõ“¢½1ś é§@oņuą¶”o“Ō±•!¢Į!Ž/'Q!Ń\MAō(…jŹÄæ\ƒ€÷€°ĒG(˜@K£I©·» Aņö²›õ"d’:®:$»{‘KoŸMØ>ߎn…ˆsÄā¢ōˆc}oŽĄ:­éÖGń2Źu “Z-±‹„›o½Õw¤¼a;Ģć)ƒC”D<±8$zµĶĒĘ4µ ‰dŌ£)aO³0ŃÜÆˆėQ/ˆ4Im„nŁNqÕU U•ĆlĒs·ēŅ 82K›ŪRJ–#É÷®\NØķVeGłÕµÖZ•f7„ĄkG­|5©NĘĆŃNĖMHp‰C·@Nü# ÕSm aŚŃĄ‹Kģ©s EĮXŖIŚøōé*‚vŪÖ')wżžK/]õź_{ööO±¹ą,#¶Õjy¶#8^Z‰WRšŚ4[ž©Yøh"ād‘hē7ū0£AuCm$CĮ>¹BZ¢}’¢ 1OōYHYŪÅNŽH É”ßqį;t6 ²čźŖåŲyīŻžė{p0ą©s·éÕs”(ß>W6­Ā°c'™ZSŹ~k;’‚xD>Ū‘žP¢$ā±ĒįަīÅ} ē<¹@!‘ B”A(śČL‡(ØFˆf8¤nėmm„@…Ć0°_õ*4*†•pśĮNwˆļīŽcN›)0’ØOµ›ŗi$dž³}eKM4čÕ31²l€Ą,nj” Đʦ:'h”ÖBe¹©DAæż3Œż5 ,÷>³Y­Åi]ˆH›3²\Ņ÷†DĀ„ž(į0Ջ ~¹a&ÉI4ö I™ XØqHéīių„sĮĘuy‹ņW,ž%č^ģĢ2Ž4ĒCžv³ƒ8CÜ@”Āsį©Õ,2€¦Ī$¢5É÷–W““ •ėeG±ķ/;Ąm‡y¢eˆhpˆ)‰HP™°ÓŁŃ® ģiŚS“4“R3%ęé\ŅQ ö õe»¬’fÖW=i;‚™t7r9½AĒĀķ°”˜H2$3”(+* L±pÖ/|ćB·ąÄŠjV–ĪZkµ@xiĮ;ū5WA‡(‰8g“ǐģJAјTĘ)źH\ūäĖN­–cć©lgǹÓĖą¹x%Į9ēŒ‡‚ŽgŁLäĖ«ąĶź( ;æķŪŽfed„Œ]Ō’Æ™Ė#)X곁 üS‹‘×ÖįDī"»Ž-łq+¦d%÷œļ$=*©Œ»¹@Z8Œį‘öι6¶\ܰö‘yevžŪi÷·æóEŪ5X Ł!żfgŚu­†]k¼  ±ˆ#¢¾('=ÖV²·×Zˆ„¹bü­ū©› Å”TąįÖvä bˆ€(YÖiŖń[¾ ēųh!$ ”ŚÄĀ®ƒfgüĪŻ;=üž^5õ\CŸÅsųG„ZĖš¤É.Šļeś]MmcĘ/å6ßc*Cď°»/ÉKŌ‹ĪāŽ²# #mW”V)6ż–{‰›süh|¬³ķwHˆ ÄŁ»žõŪ»YĄąčGŅ7XčĻ óŠŌAH !4©cĄaų\Öł4µ"t÷Å@ņ‘ō"ŽQ…`ĖÆčPxžœO?V² B)7ūčL[ƙD¾Ńłė¬’”ß°˜W­=z½{‹ZĻų%.qzł8¬µ2Śß¹;`ĻĢŻŲ%üŚ.mlgi”+öL¢ē殗y .‰®~j”/IM‰Ü…ĒØčĢv›4#šžß ?ń ŽõeŻåŽöś`ūŹ@PgAmh>h»ĻļɒMj}lŖÕŒ]øn;žZ“ź)灰ųCy‰ĘšˆµJŅÓĖį¹8ćī\9Ż%,9Gʧkóæų\^É<¦AˆŅ:Éaš¤ä8jmĆA«Ķ¶zčæłÕšŪ’Ź¢XX•ŽĆM®Ö,rlš‡Ą_5cĻģæĶ˜?lĄ5mµÖXWœ[O:·^–gČīįŒķpjYP*ÜLø¹pSī“ńņ–·ópsēbkgž3_ų‰†niĘŲ("ŹV'$øPchŗŠ‚D\ZÕpį:Ų šCļ 'y\œUSŠĆ%ÄŹ[_MĢĒO »—ņŪū¦Į„fį÷oZr}ś3oŲMŖÖ$"fd/įµ÷lG“rйķ&Ź$źnR įŹN³mĮN»JĀxį[%<Ø ü¤ž5ŽńĖ8 „¼øčćAźĀ”ĖŌ įŠsńΟźŗV)h©±u@»„ēĘ鐱 #ØuØ,ƒ$åĻ0öĆĄ‹åÄ?›é~«.‡šęøłĒq+Č>¢‰Ų<”ˆVZCƒ!—ćoµ˜Š|%@ŪFšµ—q¤6Żķ†‡Ś„²D«÷>'Ń*8  „ ģ¼DØÆ±ążĻɰˆN z9FŲÄC”ķŚÕZ®ģƒ±‹ĄOj÷Śä»jņ­»ö“åQÜJ$>Ź.%DÕ¢īŁŽ±ÖŌŗ—¹¹PšĖ9mmÓLĀA@Œ‹E>µ”>'ęh_·¼$"] p©bĖ%u§Z+ÕMšo8 “LćńŪn„?ņµŻĆg}”īW”!š¦Č€Ī‰ó½“½d¦j°I¶}Ō2² BĘč÷ń§Ą³G®¬ÉwBtA܊Čvä%Wb‹Õ8\]Q˽›ŗōęĒk‚Ūa@ta)Y²Pų•śŁÆ—²Q¢NńP›A ]ęå¼Ę”} Õ“0Õ,¤P ‡DÆBßj5ü×Āw}Yw™õŒ“)0vˆL *9ź„Č2QM¾®§œ›ž£:Ų‡äeź\§QqU““ø„ !’®„· ¹!½& bšsN <§OAV Ķ m…P1Ó\V -ˆŁjwœ+ Ŗ%ķv4,ÕŹå§3„®^ZńŁQŒĄWŽk Ė2„l0õĮRņ1v±ÜņgvćÆ5ƒ Ł4-†ˆHöü2u«h×D“”Øpļ¦H9ŽpęöyO1ƀfFÄŲBĆHņ‘Ė÷ü Ł'\3śR–ü#śqZŽą—é°‰… G¢Ū±Œ2źeŠDĮ¦‹ūÉŃńÄ£ń.ߛąĄQ†ų€G·k†-F–AĶBąĘäėūUą9ąš¾ŗa;üZKį:ń‹Ė…D§ĘaÕ¢Ŗ$P‚ģ~ę¦BͤĪøŪ ÆŪķ%6 BźŃT%öĢJ¦™'Ą4]ź.Ż®” /ś¹‰ŽqŒÄ ‰¬ÄBŠhĄB”Xč¹ų•’¾ż ŗÓF„e0£Ś8ß- ›ēP»Õw by®Œ-ņ-œŁįōjĻŪŽ”–5=Énę@&ń.g€_q>}~µü ŖūßNœL b‰ĻßÜłdŒ?Éz‰‹Ø°Ž]^hņQćšitdŠRĻCDAB †ŗ²‰&¢:9ķF1dŽ(Ņ$§Ūīt=÷ÓyćZÕ×Äo* ”Ö,œ[ėB)’"c4>cĻHyĆvDµģčqܤ6õ\¦‘ˆŲ,‰Č厕ŽéŒµFõģŃķŌ½+]‡;D”7mģ< )sD÷3<`ĆėÜIš”¢7Ū#’”~=•&éģßöV  4޾&Z»%¹f$Ó,@tĻ æTS0ŃN¬}ZB$‹3ō š¬Ūķ”H!陓m\‚’Š:gG”,J–䜏>ėæa)'W—mG]kUōnŃw“H|”]JuĀ{óœĘO/ī|÷gĒĢĮmį~ĪŁm‡ŠÖģ(lPīRµ~!9Ś®šhsœkįuč|:¦­Żj# ¼‰–ķéšQQĪ0ŻæŠrECūBÓ±@Į‘iėSP[JŲĖ5ņµc"¹ÓC”©K”æ'ļ:96Zį“IEśĄå+M§[ßnىs5e„Œś×õ¬ö‰…7&ŲrŃn̵¦”ŕ{{Ł$švĖq+¦öĒpW^Š%α{ōEĮ6ŲzQŌŽ–üИ\&ĀM2͹_{Ė'u@W•WÕGWL1Cö}—ŠH8ä.hWĆACŖ™­~ćVųĮ{ųG_T1gÓŌŁhiž™m(PørB @^ō)˜rÅ¹ŌšĻŒ™:œ^®YŲUŽaa§‰°VL”ll ~3ĖPŠoŚŽced„µj"źGlz„^qn†žH^6'œĮ=ŪyXP»Ŗļs³M¶žÄ _&Ń$ÖéltąP³PJp" 4iÆ£ŠB[Ļūųžßš­‹eį„/ ÕÉŖMą>ŬĆ&ó\$2®YHN„«™T#B Ń«OĮҧCȏ2µ½ÓR,ܘQŖCJ\Š^rčØžI³ĄCŲT֙†^Ń p(IĖ9¤^l;¬•×Jƒ1tāKmGTk„Õ¦īĻ÷N>åÜ$&ŠˆLjˆ/ēnNMŸą'ń˜·8*Ķ„)Ā{ædˆ‚£rƒh½Šš…}BaÕĢqĶB3y¦‰9žžo†?ņē«g”?eC¢Ü_ŽŠjØ …F …J—q¦nå…baŖqhh(H~dXH#0W¤‘ŌM±ÕQ $vZ`­ę–ń.kYÕjpł®¾^ʶC®µ(qŻŽ†»wĆQŻmWRŽéīćō$QąĆā2u¼ĪŚāšn¦ąG„z¼yūTK±*,%žńC·5!ś} ×­劌T夓ØP…Ō,ŌĒ*ĘŠŽšgśŅ°¶ģ=XĞEØ—ļśŠs=6EHŸ IØS•)śń§RāļSĘøč#P9™:Ę ©Ų Q°¹ļ©l!¹T«8 ³Ü ڶć[IYat‡.ÆO¾³¦`­t™ŻĢ$2ą%\¦±µņDÜÉ\ćP‹mėö©6„TźgæD•ölPPhGō:?7 ̅Š….ӷ¾ē·ĆśEŻJrģx³ļuŲnZ]ŖĢ½X§(Tœ„@Ā!%C·ČW$j'a7cQ BÖźģy[1žłĶ#DiŸ…qj;Ö5‘2ęN<;ÕöšĒ@õSŪ1¼7©]|—‡ƒ»JDģq7åˆ9QÆ n;R„(.ę>š ĮJņA;Å®OØĖ5ķ'„C¦×&\Ż‹> éVĖQw{…ķ2„ŒSœ,×E+”Æ‚7eä:—¾ŁŽóH…agŚ-Q¢ģpł-Ū‰­Œ,€ųu=>?ł†~µŽ”ļŖ–=­Å­D"ų(»”R×·„ĆWr7 ųѸŶ.bźeOµåœ'æē­RŃL–fdüe‡†™F`*”“hJ$Å:eMÓĮOž^ųMoźZ©˜‘ėL¼”ĶųVŻQµVV@(åӌżÖQkjņ­KÓx•ø œcņćņ2]n-žˆ/ē.'×öxs›(ž8 ,.“Ó9Šˆ±p)’TŃäŪ`“u§ŠM)ŖRƒė~Ē4öĶ?©}HMĮŒ#×ä3šK“k?6°¤¼ ōō„čv»•¢… /lŚ„”*[Ļg+DĘYŌömG°JZ?j½xų ŪaŌ:†Ūß<†'ŁĶų°¼\”wˆˆ]ī*xÄ[ŲŽœD Čv.D²3MĶ<”5 Š"”)”=Ź Óa j$žE¢ÜMy ®šqܤ›vĀ%'5€(5'W ĆĪš„ļŁhed„R6ūÆŚI&ŽtžŽ©ķĄkM$.±äŸŪ/}†=÷ˆ\Šį—p“(˜Įeš?ŗ¼ąlc¦ų/7كD #µ]…®ĄLÉ]#žĘ2¢ G®žj Ę%ćõ%ĮO!«Ż†…§ĆBeÄBMÄĄÕ Cb!;vĶ4höNs–ķG#–!/”e…ķTkjå@ČĘü¼®ŪŖÖ*ŖéرOĮ£Ō`Ŗć©¼\ĆŲ1$+A®čj R¦Ŗ&B0ÓüK ’¢ĀØa·`†…¬Ż™ķé½|Ţb•^YVØ,ĒĀĖQkb­K ND>)oŲŽ÷„ź•·\=„!DM3•č DČ8ī |Å^¬ę1u›X°~9QP²Ls‘Œ@µ)Ź„„Øś¹Qn;sKŸVΧŽ„ZsåĄŹ…o'뵐–Ąčś>ē0Õ“¦§ÆŅpŗIļ@Yą -Šdh1ų<‡ć…×_½ĆńŽW„C{r4 jUØØ°LĮ8·Į1J³yO Č­N:k-; ~x~Ŗ 5ü,‹čB™š”ź§č2…ĄŒøH#ƒt?~ęźÕķßó0Ai\Ŗck­ø|·šsmoĻܤÆ_¾IYuv¶ä¾­¾ÓnŽ[5ż/„ķ[MmÅdń=?w8 kņ­ŽvuĢ—"ū?惣YŲ…[<޳®Bć÷^ŗśgyēžčŁN Özh©ąaƒa)©yc&“|yŌ:DA8^5’VNį*ÜŅ—CóL_JzeźŠk fdM†Šˆg\ÄßōRēß]YNŽ•| · Ū¬•¢ Asü­œ+ĖņY°Łiķ›bCc­ÕJł“žÆFĘĢļõYŪ„Ø5NDAē€[%Ō§üi © Č“€žką_źüĢk§`aąŲN|ńz”t/Š®•ra»óɝé#‰'ęYŪS#!°Jķ{tœQæ6Jf9Ÿ{P#š•cĘZ{d„󋱞ū”2±ĖńÕŪ®öQĘv±§$ĖK=R;å…T«2©ę ±@.•ŃeĄŠb¶s™@ķÅÓ÷[=ę Ń MéØJ‰@Ē ©z÷ ¼Rą“)>žķJŌƬ˜k;āŌ`ęÅó<ØÖTZüO’(I9Œ‰|Ć\/­ÖbōōÕž×±‡‚¹”R­¢žĄ®Ų4tt6µ\H|ćKżiŽū·²$¦ż¾é3‹ź!ļ~Mļ<ŚCš€†6ŸĢĮFM¦²&æŗ…+~ēƳ 0*ōĖŹÄ¢Ÿ³® ¼*··=-Nmg{āÕ°€’fįżóxĆŖ±·D "‡Y^jG¼T"Č„"fŖkl@ØY˜k#ąQēż±?鼋`pØÉńźĪĻ_éŠĪ“™Ņ1=:źæ'P0x<‰¶ !Ń`Ŗ\·:.huwų(>xĒHs"gÅłģ{Ó¼|‰pZ/YfINŗV„Ćbģ¢žŸkū Ūį7żńW©™Ž“ųsņāaėž¾ŗ BŒĄo—…@!‘•FĢ4 cҰP㐚¹a$iĄUŚ|f±*ēSļzį %<6RIŗrvĖŃ0 ¦¦|†3 $ē=üŲ…ßłŗ®ķŌ×CbŽĻ+ŹmFĪfbs–+³ž»8Z!–$]›p‹”7lG½zķÕ¾#ńˆƒn=qõÄ+ŸųŚOŒƒ"ŪŽ^j?Šp†‚ŌĮi$&śn¢HÖ ‡ÄB¢oŖWžĘvēmēzĆĻiRH%`ŚŽ:d8„µÖūæXĀÕiģ/f™!]¹¬OĘC!śY“Ŗ3?ō’ĀxĆģ,”ė_ĘUS2%~‚–[GõŚ8Ł}U½tĢ‚¶v«ļåO& ˜(ŁwT ~s©E[q­ K Ą~“Šųgś«³Ū|}ś#J1Dmś1œexįŃ«;ē“£8”ūü’‚²Ūå™PlSxˆ%bŽXƒ|I3~i vŚ wŒųŌŌÖ`jņ šõ Łķ’õ—š¦I£īש¶ÄšOōG"Ń4.ŪkdøHŽfa—ĆB²×õ \·”ą`4ų‘Š‚¹ x™.•TFjžjØĆhę{žoh;±ć¦(_޳üJŃø_I¶¼\ŽŸģƒ±Ķ²×*ÕœKDA6Ž‚r×R½u²\CQĮŽ1TĻ=ćōūóW}<ģSPīZʑ5cCÅ?=ƚ‚d‘iyOū]e’ķŅ·YŌ™$Ž@īX“O#oījü»yĻS²_¹ĻÄØ#Tå *GF›˜*iŖo%ŗ†ź®6*…ļĄ©.žc£5*ÉĘłī¢‘¤G,ڶ«°Ŗ²Bą¾¶ZsėźÕ#—P{Ķч٠]Sļåŗēš<¦n½żŠ…\ £Ū†v%’¤āœćrŅP°W²PįP*6˜:3tŠŃ¶śš«½6Ę!pŲxß”jPĢ5’T©—•Õ#  iģqĖLæš_øĪ˜“]Ö5”ß8šVœŗÓ¢ćd䲜ZĖN„«©†ķH±nεęӕ«p†~~rœC`ƒZ•ė…ę‡LP4ĶYč¾ģ”k#‰oūTųĆē d x…nܙ6źŚ„‰f”aT²P™ģ;¤&CąĄ!ŗŠ…į:€p^1]AV’oąč‚øRŹ^—SŁM% H*cŃG |…ŗ˜+ßwq§­l““kXÖ0[yEé®Ų€ `Ś@œŚ®ÅśČ>„l2ö²ķ(Ö_ęŪ“]”—ƒQ÷į\ÓNQM/LĖū¦K ½¦ÅąH<Š„ė³Sö-”^hģ XŲba—c«@³PQp#d®Ś;U`Ć­¶¾ļqŁÆ¦ŌU“šYłdłØĪŚļ—” Ø'i¤ĀFŗäŽ^®Š)2?¤2 ‰C“ŁĪpĮj¹Snå—oCqnķч+J”Õš\ŽķŒīŲ`Ķuåź®?–‚ŗ5u™DF¤QŖ¢`&U&t ½Ų¬iBšß’pŃä”S>Ø7t«æ@;dÄæSüŪ vBŪešWGr(0}\ĄwąmSy1d\c˜—i3üKu1c®.#®©‘Jģ>čņ^WĘŻ Ćļ|ŚrƒiYµĪ Ļum‡°W~ÓvĒQ Ū}pņ„Œł{f¤LlĒæ$1vQ’æ6”ūņŽpEF=ęd²OAG£.Ń$‘cXhĢš’š~‹ '©G3źĪ“Ž…¤ AcB ‘²OA‰®`ät°Ng®”‡²Yœ| ÆąŖOǼQVŽ$PZ!č%*žå†„²Ąø¤ %z\QēN¦J:pān\ ó§į‘LM“µN’Z5P‡“ ”ņ+ūSą’ĻŲ3»Ķ½Ō>ų]½¼a;ƒeh?1\.Ó톹!!»]ćpMÆ}ŒÅ„%zT-ZÓ+ BĀA—śµ&å9gƉd „śÖĄØ}ēšEIP^RĄˆšxąŲ®]„j9’C•‹›{ßUXUOĄaxPhžy-±&1Ä?EÄŠę—!l(ė¤]Ū8P¬ŗ£2®ŒM|¢-”ĒŁČe”_Ö®©³ŚZ jż&Š15wąoŗ{Żvx–„)ø‹@‚Ÿ®’RžäUo@?9“SS0-–jų„ŗg„†…ōė•Š‚“©×ķ’Ļ…baR×U+m©öž}°ˆ‚ŁĮM—ŠÕtźZŠüst‡–*¢ ĪÕe' Ņ!9TĀ^\žŁvÕ2²H/či:Ņ1B ‹ŽÆBŚ,@•D—}'-Ŗ„ė“j{-‹óņ†źSóóŚiU@(åūó‡€÷nŪ-OŒ½ŠÜļ—ņoķ[pqącßE»ŌÆÕšo¤¦ ę_nśÆa‰@u²¦ ń‰…B÷mõėNŌ ll„æū óśNƒLéA›&#ą\Ń”xn»Õœ\”øT$›MÄ-"%A+įŖ’-}!@č2¼T[¢GĆæD3|āh¬É§$Ń-iņŒ¦ -xˆ©Ć'—»DŒ0¦?¹©(E”©q•µØoē‹¶#Z!Ł”&ß°®Oµ}€„õUIøk£“ļ—ڵq< ¼/;ł†õ…cšiącR~įø»#ĀŽ7ŖQ ³šąā¼‰±ĄĢ[ō®°G 3£–GüÓšS·¤`2JA?j»‡4Fz/…256“Ó` T³é/ōT%0Ō«¤ę’ƒ†P'3š mB_’Jv>] éTĆ„)Óš‹¹Źˆ€G/¢©k˜ jƚ…$rČ"ѧ 1aOąüé@ČȖüKR¬ŗ£&äō×¼i!ģ š‹8uµų¶#X=-õē%eƒ±āØ5ėJ¾ö@ޱ#ņ½õåĄÆģ[rķą§…÷%ó4d„¦ Š]‰—CwŽ!& šōšH;j,» õ@ÜaŹ”1ķ„„ČŁJńĀ g“IŹŻ®Łčn ]ŸžčØ ĻøųTŽŗÕ¾ĻAĪ÷Nśś‰ R¢ńFPģ żF43Ʉ±¾„Öh v9S,,A(ŌĀÅ&cąŁŽuœŚ+ŒC%+¶īZ*Ņ1€ŸŃŽŽzf_š×öē.åW3vų…į¹C«Ō¦?b” ÉKTØēęÄBB į½ż±gpØ­+Õq!aȜ٫ńžĻ’}ę±’£­®\hPJ4 ½„~ęäŸm(HüąGĆr©b®ˆˆ…ōvLŹōŹų‚”·.LõŻ1“ ·ÖjWĒ­@ćyćB·Ø¢ ŸŗS繕 €]-»R6[{ņ1ęė\’q7w)hŅ$–»ś,,yy]ŸŗŲ7’ °{„ČBӅĘLŖ4Ćød!Y„> §Ā޾ĢQ¢_¾"%.ŁP3–»’é]h\RœR*»LÆ•ŹŁpń÷ž8üŃ'' «³ĄÉє„6Ü"µ›³?3h-<­šˆX>QāaķdąWźŗžÉeo£9¾ų_Ó<źĢče~čā‘Y Fu¢˜K¤L5c=™”,TŌ£”ąÉ¢„LApW_Ć{Œ`Å;tH”yŁÕć'§wPL’éI Ē„Ä^9J=sIŲćza$śKĢ =(×[…æł„šĒk.X ·Ō¶;ÅbĻYp0^ßaÖėR…’č5'™ˆ'.į©ÄVBķ^ŸlǵżSR~3cļ;re©öčeļŠ'6¹—€‡-gŠ1DJŒL1nÜĘwäŠŗ 0‰õØTośœGtdē®ÄGéz”ˆ?÷ø”¦w (ŲÆƒ:J{ż‘˜'4’™¦µY#ō#č»léCB;ļłxųĶÆ®Yxr•ä¶#h­ø8ÅO OJžsˆśļ³ūg„¼1|ÉŲŃni½¦\öŒ¾›¼’ä^Ž*~ƒæčõF~<²’˧ǦØK ˆ^4#į1<źāŽč|\ 3¶3“wąČ]ž‹rŁ·L³0•źNB,$Fjčš[tŽQm–µęU»Ņļ®ķŚĪgĮņ=ŪŒŖķO“ģäńØōž?{ķ+IvŽ÷żOUW?ŖėĪÜĒĢĪī,w9œY­–ŒI½LÄN 9¶& )’G4,)#˜y(¶ä„1Y„ŲD`Ź‚LڲC“GŒ¤(Ž &bŠŽA$°cG&iRžįR\.¹sēĪܙ[]ļ:'ßłŖ«oõūUŻÕ}§’8}śŌy|ē;Æļ÷lK©šIįó.õNeŪĒ€’,’L&vn•øŽOv Ģ(˜³ŠPŚ3zŃD%‚^C A (ˆ |U¶mt>ś’9ö„ykʐ‹Tu¾źvō$’¼}ž„ųõ·œļŗź–øŲLMĮ޲;‘˜¹rüZ”.<ŖŲĶ@ĮŪ曦żŸŃD;§ž¦P³ʗ<ĖĻ©Éļ«ĘˆJŁ!ƒ“` ī pzDĖ9’ĆOrŹ$»•1Ć/aČÓŖ $jļHHuĪĀ:׊•ęD V*ˬڃŁ$6ą*’Łk['‰ˆ=(^$ķ@X–ŌÄÖ&šó…ĻÉlk0_zr§Y.AŸ>TŻW%F½+¦W†3#oƱ—Y™š. 8¾ļ+N—ÅŌ•¢dAÕ”ÖŁS7tŻčĢõ]7ą\u\Æ£ Ž™+;.aˆŪ44 ³°¬Ē^߀¶Ó85.½ķĮ¼į·¼ƒ.ļöĶ'/,Ł ]N“čāš"q²eJŻÕŚģ'–?ŃT­æsײwf÷f®‡ū+ŖE¦ŹD;‚S’wT\#óÅ\¤üū¾Üea«»lÕ ”åPLB…ˆr‰€sś 8'y¾ŅyŚq„ėŗgnā¹5JŌó §Īģ‹’jž-Ųéb)N§ĖiÖ&µŠ…¼Šbę•ŻčZuĢäSæsžæģVŒÓ…!b­j.Œ:[-Ą(|N~ -†KO§ćś q=+ȅže¦O\Rj†Į„bX¢ō2"fĢSÕeaŻ„%ĢŚ_“hŠœ½Į9iģYŹTŻÜ'"BópØūęD¤D0‹ ؾ„°öĪŽm¦Vuń£fž—ÕŠÅČnt4' §½B ÆL³PĢŃ®IÄ ×0V=¾pe+™bTķĄ…Ńd¶Ń«­>£ģOˆ;£:7?^ų|ü¹ń–oWYs9ž]ŽėQ£ )'Z$‘Iˆ. ‰^²×¤pItķż‡_vtCĘɬĄ %žf”ݼKA.xYžƒ°C‰¹ė“ 8[/ū‰7Ķ’ nŸ*‰š‹*ˆgźĖ |›ŗ‘q?•ĆØ'× "b–Ŗvd>ķ@8«„ø,D$ÄׄųķQķ“ß(±­VųtgŸW©? ņēśņ‹śčžź¾`•§ī¬…œX¦4ē¾.“Έɲ‡ÜšpĮÅų‰Æ2 و’ˆ$ĪRF¹Rw ­“ĻŪāŌÓLw¼`’ėł¼w²Źœ‚·÷gŽ5 FYqŲ(ŅŚR†Q0TŗęĖš‡MŃeaŹ<ŽąWś“ ŚaŅXJ4 )W RĪ=é“H¬ Ų†F ±pĻŠłN«“ŸĪӚ¦©tĘÄėškØ­šõõ-³ĒĀ®l.n6׳žņ Or’FšŻé‡PUŽŻ)øŃUŁS‹pPų<ž"š×'.ö\J½_ˆ/_Źģ“¦żŒs Åi 59kP„±šĢĶąG9˜^Ä0Ā•īÕv:üInP”!`qO:*+cF]”į“0 wčQŠĖ’źō†Jm­-ą:…ķ°įŌ`¦F=źļ“ؚĘZ§ó’Ķ„Ś5{OTrĄ“­nDĮŖ“ÉDÜ8‡TĆķžz̓uā°7×0ŠXŃÄŃ&šSļā·Ęw¾=jö ń')€{õ¹«o½uÓVōį¶RŠūåą[{Kāw„Ø1ņo»M6²¤č58õńÆ@ABWœ“Oē\öłÓĻ»‘4ŗ\ ݟšŚTĒ„ĪR#A2Ż{5ü#µ¬) ōū—Ó ĒvnŽr2 grĆn­je©Š^ø²n0U­9ĒĆķ"źøžN#(Čåæ ü›Å!kw’pTåń°?…eŽ Ü,5EŃE)¦¬r, Gc®O„(d)ėM`“]Ś…9óśųW  Ļ£:ŒCpM)ŲΓñĒk<–Öؖ¹*Ė+ŗ2b]WѶęāKĶD#*;žŲžĶƚ¶b1 „ø5hŻąĶTÄƘĒÜūŒāmĄ’T‰’t‘FU~±ß’_ž›¼LL#ųNLõf±N菬č]¤”o¦ŠŲ£—f8D? s vņ²Ēeɦˆćpņ=pWv;õi]A~ƒÜ3ĮŗĄŪ*?„ ¢ŻœÉ@nü%˜_½č÷•բŖę\^ļXæóž1¦Ō„ųQąi^ńżÅQSWŌ,šėéźē_Žyc…|~†”׀æ üš:½ā:’ßö|܊Ʃ,ų-ƈ!g ėTƕĀ€qčē,¤ä”ĖĀ,‘\…¶@{Ļ!.Ū<¦v^©ßN±ŅcØąŅ6¦E§ź-¼ ņåÜōȀT¢²+ōjƑtßD_ļąõø¼#žm…-KēqZņź6DzÕ,­,~–…ĆŖ@x{bėŁ@H²Wź„’H©— āņ4ϧh„šxą5”FR³ ×Ųcž)MĮHčœä 2 *<…šsR¢^ru«~rÆCĮQ 5ŗ°Ä]‰Žģ"óZ “żXį‘$lļˆ8›Ä൘…b^HĪ©ļæÕ©;N×·A‚Xj:ž ŪO"<šOuXńÅ[±Gƒ ćµO¹µšU{PžzuI"®„B\)†M„īŽźõœžĀš}„āĒ?~c<ŌJÉ7R#ß©QšI!é$b”™(”¾Ū€?¤»Ś‘Æ* {¼<Ė@“Æ„TĮąŹˆ“ö™6µĆįśŌ¾ģśK߉Ÿü·:¢Ag+ŸuS F‡šøfĄ4š­ķ’ģd‘#öćĮ×Ńūō"ŲõīRÓ*ÉNIN–åĻęhI"®„˜!*õœī ¦škqx‚Sø~ų©1ü› –XŸ{W'RxÓtēõ©ė.łFĮ»&` MI*Ō9?0›šÖoĘmĄ-ÅscĢģ;MV0ó ųŲķŽ~Ē&ŗgM:Ō”#NY"•Ø›H šŗšīĆö’ü/š}ļ]ā”'Ž{<'‚xŹ[ÓLŻ<Ģ8N»ųłŚ÷|¶jV„ňø~åMzx²R_•zø;KĻõĆo@±DuŒ"…™:”‚o .)ēŒLį©ĀéDgäXŪ€'ńÆ*¦P¾6–—/•ž-Ž• ”©@CĄ1phāo½į|ąårXøÓźō©ļķĄŹ)˜eŁY e5–©qHWČ2H4L\®#NńK’—óC`;Nyļ9—<Æ\ķVÕ¬Eo=xLł W®Ī>dż ōg›“1²Vˆfįėxߌż?Wåš›*ĀC4 -æPo Ȓ(ś!Sć-'šĖ”Næ B"5q*Ū‘$ģuü”ń™×T×DżØWJ‡Ź$g!-!ė[ćįšg¾äüŌĶķˆ’Ļ¦>ó§•><“±§ņóķ]³ūiHc¤|ōty >_“Oü ‰_ü??ó‡ŗ§œĢp‡żø0ÅNHüHßü®«s!0ÓśA˜pšŖóŪŚ?TæĶ'_…ś”Õ!ģ‡²½č’YŁ@ ŲÜ-ˆ §ķ{×E§gēW^QŹČĒö¤ś(H’?‰ßs4ćbʃ²@IśOæąüwß° ɬ؅Ė!ŁFi¦~ćOńµ0ó–ģ:,ĮOóO nĄU‚?é˜Č£æņæ9üNwėmŒ‰Ž~4ķz”wy§]ī¢ģf¹öŖŌ’š+ŖN“oąfWæžžłŹÆ­ĒJVS P£›WńB6?}ČįŖ§Œ‡ż³Ō"n²(®q~™¦3pųŖl·”Yų‰JM "I”BBÄ"ŖįČIgÓQ:\F)Ś&.Küčæv~į••DÉ T%ģNäÜC~ł? CEA•ē…ūC“Kłr‰¼‘jj9 :ö›ųŃO;æš½‹Ÿ²ÆdgģFÉ[eÜRłW–Ķu‡u„ZBŒø² 梎_(O” Rw׹ł7£öpėpHo'*|j –=ÅgŽŌ` y,Ė?)č{’ˆ[ ŗŅŠ„(꼔ڱŠ(Œ*ŅTõa5„DĆÉ YĖ1ŃQ²A¢£‘ŖU‡ķT¹[$ćŪś)(T’)gšvkč M”qŪ;k}Š M%āaŠż~ņ:?q{&śe`ĻFo—–ŗ‰¹Ś9ÖJģo¾Šš{įJiüė©’€~žDśł÷¾ŁM¬~ĆŚRfŅģĒÉņ ųō”Rā<Øqu^ęȕrŹzyTę{@!1dO]÷Ńt,śsIįOé±IĘB² *ŻīēQkĢ­‰}Łłó/¹ķT•>ž=JłGv¢pIJŠ$„tÜS>ėT·eõu’š‘_—ÓÕØµźU{°µŹų·"ųUI( å-€ß°2‚‰ø98cź‚€ŃOĮސŁŲ Fš’•}uŽĄīż’Œ=Īd·ągņUˆłÓ:żą—_ŗį:§ś &Œŗ(G`V$S+uNȤPˆÅŲmŁi¤üdÅ;FĻ„BŃ^÷3KI· %”B’jžEł8„“¤z…¦‰‡©¾ū'Īū’ ;Æ;^Ō÷iĻüšżx„ŪT¦ģęył,:0ƒŖšØ ~X ’zŖ$ˆ'3öŪņSFÄŹqųĄ<|>}”•ĶŁ÷—CŠR™c šaĻ`†Ńˆ3՝Zęõ{BW¶ŹsÕ`|4”¢37ƒ_H,”R@ ų–C}¦ ÅGĀaĘKb!õü•Æ;ļ»ę®żXvŌG¾ƒOTõß¼ U~W²LA:ė˜((!„fŽiØQMķ~Šf '4õLįĪL&?ŗŗeČ[%ķŗĪƾģŅJP DŠNŒz Ķę ż\X’Ö æ¢* ßt_ž[ąæٶłšV‡”WEDbį՜…ėŃ'ö5ÖF°Oõē§ųČc>Wŗ”ұ®t؉‚4±ˆāī÷œ¼ģŅØ¦PÖ)ŽÅ”GęŸ`S”üŽKDTōŌC Ž®å$ÜóJLUq$¹*|Ć$rČõ6E”^SŻśŹu»R}ÄaŠ0D”  BŹ ą‡LGŅż”«ÅlŌ`ŃX5‡#_ÄĪDt5§=e?»ĶkŌC÷(‘HSD1āq »6āÕw’Ć€6Žķ!æĮj¢Ņ4ešCuüė©’żI¾·~ĆŖ‡ÄBB„KÉD9³ę’]ŒījL™%3Ī) §Œ…śerGŸYŲ”&&bfŅ#˜ŹhŹO:ā2C®<¼'»}µĶĶÄ}£e Öp¬‹6DŁAŠ­”ič—ƒLqTąĢ(HǧݔQPGö>„Kāŗ•HŸīC8¬ŗõłēĪ{·;£/^\ęŹ:ał»e7¦÷yģĆH's@©Ōu•®Ķ_QÄk„nņ’E€ß°*Ē!é”yHoA'ʏ“>*×~ųąžOUȳC.eg"tIF`@É8ĢNĮ¤!šĮ7œŸzŃÕmāœ‚40fņię¹ODdkŚ&±P”#u!ć«)ą0;nd9•Ä3®€”Õӟ’żś¤ul7ųdS>\ƒ 2O$©;¤Ou¢ŽTĪ@Ņeb€éKAgĶ? \×Ē„=Ē©Ć2Ėōß¹ā&é”>~ /„U½×Æ"’Ŗöe„Ŗ‰ŌĖKˆę@RAÕNkĶ8”OĘéq‘„.µ¬2­=‰h »›)ōžĢr^~°nfüŪ|ųµéŃyü¶@ĮD¼8“~¤„²'Ų`v™–©@AĀ!0ŹĘ#.„¼<ēØ&iˆ‚ŁqMś%'’0Ä9#†_ĘŒ‚[8§ ģĀ>ɦ+a±‡ŽƒAčhÄnV”Ü^µĒŻb1=2ĢZYÆģę0‰¦7BLē›t)Ø;ó'‘ĻgžeźÄݜ*;)”‚céŪb”Šń²ÖŖ—`¤“Ōcģ7Gµ•ŗź…•ĮŪĘæž61._ųTFÄĶĮįĀ/ˆ¼ļ¾nÕߐC1ežÅĢĀ ~—3œk2 ` ]΁š@Ūs’×GĪķ7É(Č)”]kĮ½,©ó‚bų³Ū¦Ī-Ē!;gź(fBSD ”Ż‹ø “ŠÉō¦œT}2ĖKWböi„½:CK*“L¤ R©O„F $ F)¢AŖSČnPS±0…Ēšė:ILtNéśZ58u“K¢×ņ²ūł÷Š;ŚoĪwÆBR^“¶°g ō‹Ö÷w]hÜvųµ9“ .ĪA>„īVķų|źįņj‰ųućč%9ßć$؁ōKėå)„ė¦`Ō£ ŗōłÓχxĢB/ÆÉ(H嫆¾”ķŽė_ÖĢRX”‘Oב},ģä,tS“ “lйdö’Sį&—+‚ĒbRKOMŌiĻ?;1¬Ø'!|åéŖPJépSĶ?ĖŠ=5™tÖō™ķR˜G9a//،…1&Ś5Ų–Ī÷ö謯²w½ ‰ś„ł˜S#ŠR!Ņ« 2ާR}ŸõK ŃjōYh–łf}Y;EžU“—嫚@,Äuž ü²RßSh”Küž©Ć·~ĆŚ>0®„ƒ,¬ M² "ŽŌ)(÷¾™ˆµˆX&3žé=ēģ&œĆOĒ2…Ņ“ˆ^YŖ “„-dISPjūz8G X˜„ƒųGÉŁsŚDŽĶ“5|wŖX„½Ē&ŸT:ö”Ł%bČØ ō@ØŁ@š‹™…Yžhž‘Ü-F  ;CyÓ©zq+Q«^µżš{įŹÅį_O„ąœ‚·óĻ0l€|#µ 8$Ją 9™}ń¦ĮÜ¢-&_Jšƒę–É8Œ~]9ƒ~ vcTVl ū¶€#“’pœ“Ō«ĢĀ€ķk J¶V@`FAW *hžŁķqĪ«ł·HTr0KėOŻŠk5ZņŖEü#žI Chž5ˆYJ&ŗ•ą—!Dšós u"&°™‚mĒDĮFÕKƦUŁŌ~Ųļɜ»”ńļ¢ĀÆØJ‚/ÅĢéWć¢ĀoX„㐂˼ĮļÄ<"ze<»”ކ"1/`³)ą*Ag¤ē‰ótØ«Ā GA8ē‚Ē8ōŲ`ķ·E7YŽÓ›”ĘʙMŠ’d‚(Ųµ)µ'Ż$ Ē,ł©8  qV|ˆ[”t†[1õ›ę-cD%į-Q8‹‘¤ś IQ‚€p˜2’„Šæ“KA7µ·6åķ5F,>ō4:Ų×W~MÓ-© ~x6ų×S% ü ą[‡k•Źœ™›B\ēįoV±–ŅT:Ö#óČˆ(GZČo3dž7‰=§RßÉ ¤XF!Ėā!1wΆō(0ó|œē„”·˜‚ŽĄžćˆ’B€GžÕs°{«‹§«\Ą¢z6įWTW©[ˆ’ˆn]žywkŪ t•įLÄjq8 r+Ŗ$RòĘå=ufgÄģ rpf,¤ä”KĮ,‘\„Ų&ƒįņ”8"›—ÕL ĶĆČ@M fŲĀČo؜¢hū@][”…;]d‰9śzņĄMq&9ćxŗ?,ĮY/˜Ņ”Čæ’7jŪTMØUź”b§@Į‹¦Œˆ3āP.4EĀč)KhžM½e•— uōŗŸ*$\ĢĀ€ėƒœ…š‚œŸ)Ńc”*©qD~’3±Į|e‡ Zb*Mį N4…Xt#F‰XØ(v]ʖ±c-£jW¶\ƒ£Tj€]²õ*' ,Ą!]ĪHĄ¤k)ķV±­X/åX#N4Pgēr«Ł-øžDæ®<ėüė©–¢ LĮžz8¤|"ŠÕøŃ<³K‡ƒŒ^:‰Dhč¦Ģ•tŪV¦ŽÕ‘TšĮä’ÖAqałsNARĮ¤-«ļó$<ŌąI&BA¬IFŽ©N¾ä4ń$CūŽĒŲäWœL‘'3¾ł 2(w¬“£Ėøńˆ‚lėk[Aų,P°§yqXŠŒ±‘"$¬¹žB‹-ŸmxėYéģ:ĮQ’3>bŽė$tņķłÅ$„—,;|–ū2םźÄh[Õģ†XĶ埠fĶŗ.$r°)ŠFńb­æģ7Z”Ż\·Ū[¤­aNĮgK„ćš×CüĒ3¼&zÕWsl½,WńOguÖ·_Ó£”cā„ Ä]M…µ#f¢K 5‘Śm{»A<š©^8z\s ųĆ ;¾éĒB“ĢcՀ„`&k޶­Ōö°@ĮŪ½J„īVķך4‡rčq.SźB!Ŗ'ĖĢ#ŹÆ¤åā§ĘĮ~éFwJƦlŚ% 2¾¤¼• Ž f[“É£H!–阔Ī)ŃĶš)Čźö Ād'žµē†°š4>xތžˆE×FÄ*e½OM2DD|žņ1qō$“įś*6l»µe |Ę)ŲÓ8Ī+µ\Ü!J…ĖeąŠ3('>é?Ā•B»Œś1Ē“B†‚Éūä§h)x Å·Õ±ŸŚoJȔ¹ÅD¬P“£D"I‘(8Ę£ULį%ė¦ćÓä`ß*ĶZ#{ żk /1jU^4«ŁS׌Ä1žŪ;nĄįšvšWՀPˆx’{¦)ŲS†CŅ’mģ_“§Å&zÅÉ fT£*Ķ£T!†N /ĶĘÅ vH“‹j5Ó¶ĖvõĆGž0 ߌCZ@ƀ J(¾D pɀ-š•Ųv‰ĖįšX½„“²—ҧGźą`-Ģöęæ@’Ć8E˜"¢\źHų ‚ÆŪĒī̚97N¾: ā¦8Xq1¦ŅŸøĻ­ę`Ķć33Š‘¤xĒsĒaJA4‡ĆwBU Ģ$ÄĢC2!®ó’Ž‚ƒz-¾Oäū¼uóPž–S”|»j¶Ģ#z˜1A ŌéÄéŁėp£Ó¬ęŅGŸ÷ĪļŸČ īҽ§œė›źÄ?…=SĒ뇉½$ Ø£kbU,“ƒēQņ‘Ķ«ÖPL­‰²O}3 ¤xŽ9öCxü`’åf}Yßģfµ{³¹Ŗ„™Ęį°ĒBÖķž;Ķ®›ŒĆ/Öo† ä“›jnCé'/†w>øGKÆį “ø%PS°„.;‰Z”ÆģŒ…?’”ļ_į“ˆ(®I”‹®Ģéč¤zqńoŚ?ų|ٵ\=L©×®sI;9K¾8 „“ŪjF ń‚XHł•ډģt:“fŠM‹ó­!tvĢ8A”ąēøi įĒ īT­Ŗa&Ā›?¼Ń«ÉŃųwœŖd†>oī ”īÕoÖKĀa&“ų±čŲ_=`”%ś1Fä˾O¤@±E2Ū”€ū+ŌZ+ąJņ^AvæR6bPˆW„d9Tŗ Å" Hfd¬Šx td‰ū“‰z$b©w€¶"äŠĪ€s@¶±TĒzŽTāĄ<™}”—Ą‹ūj¾›¬G®)%^>8Ž«i †ĀøjŸv*Ȩځs)õ×FqnGĮ™$†j¬1=_Œīļ„:ęžĀsżzXŽĻo?÷[ŒZ@&¦Tļšź²čö­QA`_ąEś {“•'.S0JF]$»9)PŻ^ō•0#®qSüę‰]Ījw„‡ńŃĆäč$OSūūā0‡”8Œ ķ'Ŗ^a;2ÜŠ8 ŒĆĘćWŸ{šŹÕćŖ=Śi¬jU;0،vBÜY_”ĶžŠ÷=³¤|Ļń_ŗś¶‘Mj̐kŃ}_įÄøIćHž.6ļ2Ńę/(8ģqĮoESš…I^MŸiNOɘT½!b„)}Ė l/Éą§tN#ƒD#0¤rÓö¹3Y¦BChZuOӄަ\}·ć5L˜–0°£9l “ĄU:}VÆj7×£ä0NJ„YNg$õ‰Š1ł „PkT ‹e5žG©©ļ[Bš;¹ŚĀQ‡m4­­9N»še<{Ś8f"¤ ńææ÷™†įWµ§'cžĪļŒļQ’ĻZ·‹āpąńU”¾æ7Å4!tLyGŖ1™‹ai-Zż‰—üO»’9š­+'¢E¹b6¤F 6†Ąõš±Ķcįš'%‰$āxÄ]uC“ČÄŲ3Ž:¼ŻŽ(śī=ē&²ź½Ųi¢6„9ł¾+į~ĖhĘHžZ|/Pų¬u‹Ž²“®‡"÷LŒr1’”Œ7āÅś,E…vjM9QSCą©Ņ©ĻBNĮ€ĆPĢŒ˜‚“äPōd·›Ę ט”ėÕ.ŁÆŸŁ×Å”Rz‹é£Æ2ĀvIĪnĮ¢z[ź†^ZŲÆį$Ö8üĢö×büWßø¶ŹŠbę :ƒź&CN«>XÓą&9Ųā¼š4Šü»Ś8¶Śš#ų5xįł(/‚m•¶œe$DÕl•6„9łŠš~JŻ­Śżź•Éy/’p’Wć{ĕĻ×n%€-ĖĮį@ ūkĪP[‡†eœ3˜“Œ:·ˆ^D¾ĒR‹ )ćM1’ę›öł‚×E ŪńS’œ|܎dŹĻH¢²&¢ŅčŗlĄ6нøeÆźŲ&źWæØŃ_kä8Ģ÷˜gS½TJ#Ü1Yš>ōYū/’+aaÓØdW¦haZ‚ĶSߌyĆÆ·ķKbQKknb/¤ŖįüŽ7ūŲü&Ø jBGü JĒ܀Wā{ŒHą‹Ö­VZ')wŅ*P0īxä|Ģ sŒ¢ƒ’lŁüœ—/ö rHŠX©±GHüČTf‡É§­e,$ų1}¦)åÄB ņDAŚ@B‹xpV¾śä·@™|–¢—²\t Ł—äe։÷ģp6‚·gą’…Ÿśū§ß½n‹ÄüCž†yf¦oæ|¼·(EWęæ]×łŽ n²(×ķfeĪo…Ŗ”I^ÜĮÆ4‰s  J-jóFt€ń»Ö­F2+ TÅĄ3v꬛BC ue¶Åܙ‚T\˜gAŽĶļx>4hĘ“eó Ō3;Ü-ędęc¦¶@ džQ½Oä‚ĒeŖlPZŻRĶBĒ€-VxżśŪļ(8¼{ł?‘OęC‘’)ą˜šm¦māgž„żļz¦Y8£¼ŲHœnģ\;t‰8=?ƒ ž©ÜĆnT½’ęQ5 TŖĘ,œNĮüŹŅ,,¤čź÷rt/Pā^ż&Į¦63GźĒ[]vł'ΉŲõ’)HÅłBWąˆńF`ölD,F‘«ćzMņ’’­ĮÉ`K32P“’S0£i“”Q0ƒ¢ĻÜĶąg3 £¦ŻĘś(ņ7¾j˜‚Ås‘ē{•šzö9ā>”Õ ‰^>1’(č¦8×ęžź%ę림—ćGE)m7]lć°~rµVokW½Ę’Pźł°›UÆdT 'hG¾•k<'G˜£ū×­›ž:e†į©¾sõ¶~ ĘßIQÜISP3Œr.+ĘE²¶Óóˆå’čŌ~ļž§ AŲĢNÉ EĮ.’RmJ—‰¬ū¦ę_Ė€Mvm{ŻTćuŖĀyØB.ūöxŸQ0ĪXČ­ś©^r+Õ) ‡õsö_|­œ·Ģuļ‡XY?1ƒDļ՞qLŸNm&śłŃX¦zįˆJĀźvm˳©į~«S]œ³¤]‹ī-N7éɱ8Tc€Ū°ŠQ^åAŸĖ½b®£ØBŠŅć˜…An‡ ƒŠc’²ųģ :žļhŠX‹—BNa‚:ēO/Ļ›¶€ćŲTkõ•|gDasT? ćQ—H͹4c”<ß|UÖ $‰Ī£McŻkŁ4ѹ‘I—!ˆ5ü„„ƐG‡.ūŗŁVՎNY„&±8’h›4øÕ@se`ŽjUB„hźłų'Äuą :ąŒ €ßQźū«Z¶«5ńĶLÖ;ć{W?kŻ¢X¼?‡Ć" Ęۊ)q.˜sš‚93zÉą‡œ…䌦3¬-thKØ9»,ĢP*»y‘‚œ‚“'ķ¶-*d=‹lvUˆi,ĢSJšĖ÷-āž!ƔČwšhLRJy(tRž_¶’ż—½m˜kŚ•%®*ž†fėøZ?¶lų1|ŗ!ńy/‚½ķxÓ·ˆ(øÓ8U¹ÄĢō'†šž!åJŻ­ŚĒ-E|æ“Eõ®ųń†pH±ŲIgĀ!Ķbne‘‡Āq‘†knń§™SwS°›Š„ «B½WCIBłå ­EBŠSĘ<ÆHъbż©,›Vä„„)•hŸ…Ž«j%–ŲĒY†6Œóņi`Ɖޖ—ŪĒƒ0(ĄoŖĮĘųŠčG#ĘzżĘ7A^PµŪ£-aNĮŪūÜŁ±cŽvˆV9é;ć{1#źóÖ­©8t‰[Bū)cT)Sˆe2ĘŗÜbžuYˆ.¹ż,QÄg(*&_‹)hs9²måöéoć?Ł=HÖU!Éórš“^oSr½W²kŹs=ā"!PÅHkvŹŪ^_+Ļ+ŠćŠhųfšāķ΃½=%éPæ-܇V½j.“ŒŖ˜¢Y(˜÷¼Sµ³[£ęP e„†Wā{GéÉ©¹?¹Ū­Ć<£B³ Ō^ņó÷p‹÷gœ¼Äpcć,2^qN¾įņƒW.=f—9c¹ÖvŖ\µŖ˜¤qTźnŽį‡ņ8±Ó¹(œ&ż5 ‚ł>ƒ”!…×’fæŻ‹¾h݊h®ätd #µ‰¾R QŚ[š=R°(‡v5Ė3†sj‚ =.6™āNŪ.å‹¶¢» ÉG"ó²Č)Ø4  Į@H›Ć}žģQ0ąœŗkJ4MŌØ¦ć=oӐ”łjē9ĀXš¦D-5lqҶpŌĄak­Kš£ór',ŁøĀnčB–ļ“jm4‡ÕC`žł÷…ų8š[UūµŹ€A FĘ ²u#ŗGĮįw ‡ õō‡iįĪÅ 3Šģį?-”ƒ»ŽļĢÅ |0 ™‚œ‚-¶c‹ Ą@–Č6ČäÉäĖ”Sų33žõ D—Ż<«h£R“ “ ‡VąU¶¼2.^š“ö†:n$žk¶{M-΁›Ģ9‹/īŒĻc½htkĖ*a½ «ćŸ—ķÖy¹¹#ė(m.…øĪ’·{5Ģõ—€Oń;cśģT²(\3t{9ŗ(qÆ~“ØVKNĒu )ø .b"F\©ŠGAJ²F¾„%Ń̰–åŖ[PRļOD9QP麐?ĆTHAŚg'Kę"ķl¶Yõ"ēW'1ƒ”Ś8¦kēI,sĶ-1©ƒ=8ōĀI­­śBŽŠ…·j§µ¹ Šx½x1ᳬÉ4cĻˉHŸÄ ŹkBóO˜µ-Łō§‘IK‹R™Ē–_hųyÉśh.ķśj} #Dń—eŖ2 q=+(õęr–ˆ‚NU«ø¢ē¤Ö2ѵ辯pŅøIwīŠ<­zŻ›Ø³M"VJ‚8ˆT”ah¶’ˆy”S¢ózšhž‘2 ź<ķ²(čKNl„Dm™ŗ`ŒĆ–M½Ŗ^čX†&ńž’rė8Hx]3Ą/[ą3"B`¦ Ā8vüŖ½Ü6UBශҟōbļŽźšhf„1zŗ\Ż*¶^r½Ó½ß³€Ļ[·æ;)QšųHˆ‚2O>!Pź&ShąE)B†Ü9™ © qȉ ū5“ “M˜‚§G”™JPz»}¼×FƟ… ȏū>½hlOēŠ›¤%ĢŲ“ęāc›\ ù7ź%,źā©B>œÖĮē“Ó&J,7ü]ń=⁒ϺµŸīpŲ§Xį4ŃĢ˶ˆšFPŒ¤®Æ ‰(ćcņ0§ ‘/Č)Øs Ā„m¢E“ma®Üói?€7cē“@óļēĮ¾‰„0Æ(Ö°½~“ōõ­H#ĮD¾łaՎn”*į[Ą|œJBÜQźīP‡Æ—&›ā:’ßĪ>GŁiŗč©„XĮēõZ|/Qų¬u+övD,ˆČG ō˜m5‘qBÓQS¹pX A… Œ‚©)(Z+DąŁ÷M[)Š!’‡äÕó©ķ'č$8KąĘų×I ~YįŚkzHŗüĶ[Tx­ÓE1¢Dē“1<ÜŲj¢Õ˜bÜŗ=R72Õ“ÖŗźmQe Tź{„ųµ‰]ī/NhĪ)øS•2¹“‘Wć{šÆj‡m¹Ćį Bɤ”`šjŲh¦ŗ’b_¦ óŅWŗLĒApQc¢mŻ(ĮŸ»åéŠlŠ, K”–¢fĄ:Y†f6醲Ļ5Gš¤Õzp½©}&÷Ņå/ĶņȟõR0NĪĖa4©g']߬O[TØq8Uäż_XėŹ·De<‹ÅõzÆ$ĝ6„¾ųćZ ¼÷æ[éZ.¼ŌŖ'x%¾w+¾wjģ?1÷«^ģNcõ³ßä5ŪDT ĘÉŌ,ŌP45’š&Z&ź&ÜÄH%…ć=—NŽ{łä]¶·RÆZµR­Y„:'+‚õb˜Ōn­{ĘķR• Tź/W{ŸĆ“~x÷@!p˜‚;m„]3¾w#ŗG,|ŗĆįęé£ĄÓ49rdĮ#˹ę­Č8ŒG”qŻzüž½“ß·wņŖ}r¹ŽĆ.[ų„éTķ~5ŠÓ•~“¦Ł§]õljÕNÆŌĻ ńƒ=ē,ü÷€—”śĆJ}“WÉł·’püÉ!;w«]ȦɈÕōn#adŃÓ­Ś’·G÷B%~×ŗIį¢žœ®t.[ĄÆz½+RŪ¶Ė2õ«ßaųGW'»`o(ÖK|ó„*ų)Ü5T”A-Jßƽ‚:žÖ?u>ūūŗUŏŖö}ŚĶ2—kķ‚©b’”śTĪæž>C?!>Īåæ|ų).’æĄ²°£ą‚¢ e‰ģ”ac„^ŠīĄ—¬›Ót%8l$l¾ģ«÷$šęjVµ„jå¤ĆxąéŻ ßvéń 2R®ˆŽŖĖJRMššĮ8“šŽvަŖ^Ńģ*å~‹ó<+śįŖĪNóŖz"'Ł3}xźĄĄQhóe/ōī_ˆīū ”N7E²ī4YŸü£P&„&En¢Ś7]>&ųi ҵm}łrŖŃæAšHU÷“„D¢°g¢Ćõų?œŸūv·ź5ĶÆR©%ؚŸ×ųAÕ |†µ Ģ4‡£;ļōLéjxßSx\æR|Żq]śéo3$P)¾i’~ Tž«¼œź‚Tˆ‚“葳°&@gK85“kų³æé|äßéca$χĢ(ĒiÆy+Äü^5­±#³:?Ōɋּ”ś“A ĢT$Üwš›EG¤M–Xnųćš­śM ø;®D^jś)B‰–:~Ͼ¢8”LfŚĮ”ė±PjžÅŒ4 6 ä»X7ą%H%L£K;Ź?ņϜ?ó-]Ę܍:‹ź–l×uŽŖÆÄøXzeĶÕ8¶S¦aQ;ņĶ%¹cŒ„°(¢oµ|…T-MBÖ^xßTˆš7kF«„ž,f¤Å.ķŌÓYb‰ēĢcOĮ—ųČR=õą‡¼QH&!„A˜H}"ŖīBG4 ŻD9}>‰«^ķ4‰Quørźu®īj5«ö`SµŃ Ü©*Õ¢ń„ ¤„ ĪŹ_8įŠ©·ƒś hŹ'˘² ųiÕė©B§±1½ž3Ž/-l…`Ī9üDN>䅌‚\ŠüŚT$J͌GQ#¤b'aR2/G*LŖæT-kJ‡Y7Ī{5•©;mˆ¶„9IßÕßņkBüż)u·j7Nbm~ņµ‚óņZņś‘§õ–Ą!¼ÕN¶:KŒÓˆĢWšFW4ńPźµ.ü('€ńµPHóJ›t ©ŅÖ“A*Qių9\} ¹iˆ4ÅY„T8„aĖ ¦–¹ŗf©ĮL”¾ūk”Ųjļ«Šv€0§ąķ‰}ī<Ė,¤€cõ׊g\µWć$8Š®B/'Æ_3pE¹Ÿ·öŌiÕ ]TåķN Ź;ĄsęÉa 7źøŅrc5³)šõü3ƒŸāóKł“Q0LÉn/Bę“X#*}fa6['Ńe©ąŗ.Ńj9!crŠįtƒāøXˆEC¬ć“{åV «ź½øŠ2Ŗv`ŗf”`ŽóNÕĪn„f»æŒķ[ÕŅ*;B™+X~Ō^‘÷ŽŌÉc±*öW0ɦ+Rf¬ĢPāäČ8¹fž,`„€Ō@¼4‡a-é£`”óŒXH‰HÖ4u®)˜Ą“šMA»— DJ§øÖ„ŸŠÕn”`ÄnV½ŒW­j¦h$•ŗ[蹓ĄėU»¹SW5A!xR‡²I:E·ä=ņē‹āV4Õi±©i ėõfÅņ$‘BSK Cā²h;ęV†@0’²OĮe¦`B”ŗ"–Sˆ—›5 Œ‚^Ā,d;^ Ū„)`†nÕ{V²l«P.ƒa;­G›Ā˜×üŒ~«j×¶Ujf8µ€ š9;Ņ®_7Ņ{”ĀBF?g—Ŗt ćt–šaʉ«8ö ‡ ^IĘ£©ŅĒ×]– @„SBO=@AB`œļšĒ,$(ŗIwŪ ķ¾ņ{ør½źMRsóābӚ{ˆēĆnVķ÷–hó¼ !²'r;ū¦`®ļŽ üŖż½hjP(¬Ś‡ÕAÆĒėåō>…é{ęĶHĮ”§U»¼”ž’¤>·Ē‘OĮ:/WDƽŗ[ĆŠ€)t!! ŅģRēf„~NA?9Ļ;ɹ5±Šm{5ģķ9T70o¢B l¤ö^p“tigźUoǦŖbź”zsi3ļ {’¼3ž—YćB‡(É~K (;ĪV¢“ū“/7©\>ĖŚīQzœ˜žXįŗqÜ2¬žDNcŌ ½&šG*¤J1e© GŒ8:R'MĮAĪB›ˆ:„P u6GĒBŪ‚e,蛝¦]i6VvIōj5Ŗ^É«J13 'āķ*=« ²!ZEnEg„p|Ģeu Ž…Ļ‚Ęd“]-z+hµVĢ>ŸÜ§üĖĘM_Į(‡%)Ū‘G‰IJnÕD‰H­’·żz”atA˜±r›F²Ō Ł%ń/K„@”Ē8¤ž¤NŚÅ!±ó°”AčŌ`ŠÕj:=7ęįU{Ļ¹ÉŚ8ž^ģ(8YU‚ųmąƒōĒap$ēĶŁLµ²æ‰¼¼ČzĻń_ŗś¶5O*ņ`½¤Ty$°ķĻÜł¹ä¾'įK<®ŻÄ&įš$1Shź¼R{ąXš‚Lć•L5©Dß ‚%ŗ $Ō‘3Tišvŗ•łf!Į/ ęŃ®&ĢĀ䁔7M“k Ā=GT{śå8ķŖ]˜C";¶ŽŃ‰¼f§EUķe|8­ŦF„n·,¬(zź€8ĖĖk „„1nV½7ģ8u‡ąAk8?SxŖš{¢ÓėÓ24’z:ˆ5ĶŚĶh#*Ż„÷€ųWćöšõ a²öݧ0Õžø‰>öXjĒj„C„ėĆ„š‚ĢBJ„½Œ…”Üœ…Ļķ;ĀD†Ą–9i:¢é³,{tŲcüĶF¤»«Ż½ĖJ"–”MT‰K®øR¶±]Ų©ĘÄ.86±QįÄ?ƒ¬²YČ866JLdƒ­T `….“EZķjÆ»·wµ»÷vĻōL?Nžēœé¾=sgīGĻōÜ{ūæßž{ś<¾ó3ē|æŁčŃæ!ŗ5Ęīäü-@ŹŪ»`ģøüūŠ\7²ė5šqńŃh·UxŀIŁsŽ[xsˈ—RmIšiqŖ1ĮB|–8‘yč:Ń3äō°Ōy Ūm×_Ź4Ŗ‰ŁéVm„ŗID¹żķ74‘é¢hŽ7DÆ?=Ā@BG‡a'dķH°Š`\ 0 sÖLXį§6Ł]ŚEjvØnäD”‰”'9’—Œ=°ķ³D7nÓ]Pp “ŽO>ņD(aŲ(|¬0‘%§Ó~æīŠ”,Ž­œW“\ŒĄ¹Ūc“D¢¾ĢĶĖ‚4ƒqx08_רeœ†ĒĆSćp ®‡z'$š£”Ł5ź¦Äö®–Ļ.OȅZLU+yG°ØŅņąé¤ĘŲ}}œ’3¢3Ćzc ¦Ē?÷vv·¶b‡Š2–‚)ę\śAĆżØįŠ‹¬mŁ<.ɞ2£„A“Äų1øy‘›ĆÖŗ1<4:ﰃėt2ŅÕ@æč ąiŻ>„Ū+ŗ•ēB‹"yżź‹Ä›z-ļvƒr!ēļ"j$ŸƒXųź¾Ę*Œ-Ē|…45ræSPq‚Ķ~‰iōĒ^–~ę.®pā’õ—L^qC‚@±2ܲ4:„Ńódnć’ppž?¾ĄMį•@!ЁĄ鏭„µ[Jk§õµ O`qä…=ŸÓ’Ģ}sQ'¤Ž?łōZ9›0Ęõć¶fw${S„¼@JśmĘ~"ArĢĀJō"¢e"‹č¢·„ŗ>BōŚ-Nö;·ĻbīōĢVÜČ7™7<8Mv†\Üu=NŠ5źD¢²ÄčYfęī6 ŻBēhĪ߇·ĀÉ»6JlW|=’‹~»±pjFFyŸW ćø>™FönĶ^Žų1‰;AŽ.4cåBˆói“sJ’KŚ@żĢ–é»JˆĄā–£öŌɋOEAž g*/JuéģsĪR[ĀBA#ÉB;‰øĄ”Ŗ×dä1zž™i( Õ¾X; ˜łD’n­Ó6#żJ@F/©¬5Ź‚°`1ČÕōńĘŚ“+fš«£jvÉl««¶æĆ~šķĢV‡«zETT™”*åŒī-•Ą³^Ž:+ļĄ M%‘?&->v°—‚4ˆ‚² Džoq[‰Q‹oŅ‘K²#/½ä[·čg‘ō¾E·vĆ ”qžæŻą•©łQhՌ™/įłóFūdr[yG° µ@ ¤˜j£ą°ąßøā™zó‰ŖyģŠjņ˜lē­†’yŪ‘-m.čŲmēT–ĆQ§’Iw«³]v1·¤Y µĻØ£ŃńČĀø•čŅ:£ē4ŗB®Ē©%\‡•<ŽeÆŹ FVŸŽ‚õņ€F?Ģ{óƒŌń»Öī æ’CTĖåÅī-• ČĶS,ļF #MńąC»ū*’v~LA”mŁĆe{ER“,F.§T3æŽŚdį/t³D© d–"Ņx×·Ž0U§Jh¾ĄØEnŽG8’Ŗ ņ{/°jĆ±ŚźˆĖ0[ģæŻa{»)?ō3gfżnÕ"‚°ŠŒÄ5†»ī°8Yš¶IŌłœNiJžŪD»P‘,¬0jĘ?ŗģ B&nć5FU40 ™šYÖØĀé āė¦-ü;yŸN”Ōōē±Jö·xņŚ›ģl¶ņ>ˆ]«]– M 2Ūd@†ā›p~ŗ×ā|ąĀĄ’"! NÜqP";µ#ź ”§ŗ8EØŌ-`²Ft…éē—Žtšąq·K¾ō”©O&ž‡ŗ4°³$ -Kµuzčyė§Oī_zį`® œ×õowFYÆęā¾T)ļ ĶOxYķ^ŽĮL  N5(ŽK(­L‚=®d’L[RŠŪ)Ó¹’m ‡†D`‘%­G•˜ w,ź~–ČĆČR§fqyŖ‘djE#7 2#_’rÖB3Źé£ÅŽæų0š¤eN”ušĮTŪɋ|ß¹ēĘmĻ6ŒZAÖį*@øæ„|ķĶ>;+ ČaŅĒ:'$rĀŲZ  DTB&·‰öd³®üöšH©²‘ĖĘ j’…&–°¬*wŗsø\’K‹ÄœSˆUä(ĮBŃßt@#8r˚µ‰ae™ķ±­ļ?āä}Ą…¤rį E[qEg­zA¾‘U€°PWL4{FnæWģŁvšµH€üS,lKˆś`!ų$AØSŠ…$?I±PRŠUDäT•„YŒ–,‹i[V)ŹFĮZiˆŃė["¢f$0pĄ'?¢Še!7šł‘īv͚-æ—:#¬WĶ./śįØŚ=“¼mć)Ļš| QĀBó2ƒ6ę° ¼š*2ł<%&\{B”,ń٤MDy’RM‰@’,TTäGS#sɼɍic¼KA°Ķ—ō%Ū¼H@W,!Õ4ŗˆzŃ@Ńqn4ČØXyŸwf xŽd­¦æYÆĻ!²n”Ą B ž1jvņ>ˆ}Æ„ū]į/Ļt08Hęuä@©¶¬x²«³B :¶b¢t8CÅdÄ,sč1?®X ‹„Ū6h§ z” Ø,X ųa |ό,–42šĪ4'īöø™zn«9lœńÖ'3€ i`Ōjg¼Y6ÖV I ,”›4‰į>M–ł'¬"ڐ8ls†‰Fą0fa(mē%¢n($2‹ ø ĘeK‘R›’…N((+‡łe’B… z5ļvƒ“¼(”æśĄ`Lļļ¼Źöńš9ī·_@' z’vmT’¢n 쁲-I>”*ঠ(āÆÉÄÓ2µ®‡]ŖÉ Ž ó‰¶Ŗē³īv!©·ÄņŽ£ŠN*@XØPÆ" $öZ ~ŖÅü“eKR°%!ēŹŠ+qčDĀJL °4aęæ°Īn„4›pPĖļoiv²Ī²ĢAŃLKŠ1ö”f+ūŻķa-š3-4¦śŅšĪņ(%>¤}”kóŻų׌™G1š<ŁØŹ–ä"¬—®,›’…e&ąg¢ŌÅō„%k®ŃšZ5#Ko“]Ž4Pk•,6U”j9Ė}ķ1•ņ ŠBˆ gՈÓĮ]?å"ķē½»±¶a#ŹJŒ:œŚµ¹  'YØ@˜PrCjJF¢ėŒźY°1)8‡ƒ2āÄģĖČ;į<6gµü¼#Sf,4Š ZHĶyĒ äFpa@ °ŃNƒP"Š“ĢK³ęŹFĢ­– @V¼­XĶ`ęKŌt²;ųÕ¶W«CÄDÅż¶±T9š2X՘īp  ī¤ā±īAiDįģW åBŪˆĒ–•fŸN…®„āUų’…%&p((’¤ ąĒū)čH :YŻÜŠ@uæČāØŽŽłĘÖ”¦?ÉD6r£RĶČ,ę„›œ œ(¾B£©įžR4žs(žĻVµ$a~$Aˆ’˜Ēé–čÓ×øĆY+¦ (¹€}”wĢ{U u?ŁÜ£©—G ¬÷³éĶ;ĪŻ.-ļ 嬐ēĮ¶Ŗ„źģ ČC„įs«Y§­‡ÆS°X™9µžįlėF>ĮŒ®Jif1$q°=w#óPĀBóV¶ļ¶Č(˜=üÜ ļMīE±)°W­äż«įŽQ˜+c„1 ¢ęŒ‰XÓ³sUެ³éīw={źLP½–y{S÷ø2ÅĻ{7…¦•¹äĢm­Y#0CÕĖY812 f:ˆŗ­lĀŲW*@ø7•)’ę¤Ņ– k»q…RjFƒŪė%Ŗ-dī©e3„j¦Ž ĶN y e¤ł<Ćā- Ü0ļv³X·dSśYZvņŽŹ¦*å¼#X`IlæĖOÕ‹Ū°՜šyŽ ĘģoCUĻĘO­4óPsT­ŲģU¤¾½£ ļŒ‘GFy‡:P-.J6Ēkó\l:ń¼(4ŠÜÖąöZ•~čgĪäŻāŖa”Į*坣«lӛū Į›zŽ*“Ų*@øwōö3°ć!oŽÄ ‡w•ó¦o”BÕRŽHÕ+ƒŪŪ>yĮ]­vŽAļZ ÜūŚp©Ž3ŲČtiß³ņŽż^V}fŲn¼§›jv2ņ3fŸŚń*ķv?›­Į³ĢZŽG³T€°ńAć¦„¬ŅXe“aÅŝX~4ɬˆē÷.Q=¾ĮµņĢ×ņŚŌņ;›Ž€^Ė2ó>Œ]£"Ÿģqy0*YAµP”yj–÷6'Ÿ[ÆĪż(v›JyPh&ҲpRfŌŅUgft{¦Ļƒ<š‰·9•³Ų×ĀźŪt ×ĆēĀ:­ūtČ é9rómßk–(-“ ī)ń¹<%P°…•ˆ¢©—ĖŲ…FŃĻ/»ų±Œ²%nIDŻPüVI€p)0ŸmÓÓ~Ō]@DĖ2óa~ Ā‚³UĀ=Ø­†ēҜUaŌŽo{®ß<å ÜiņC—eHU޽ø-­|N:£›ŹTŃčBĖģˆ.'ļĄē¤é™ŚlgIÓėł¬U©V”j™ŖUÓ‰éÄäļ1Š@G¤oN„H˜yn>Ē·'T€pƉeн Q§·„ĘČė]€„–4ˆüYī.Œóy”Qōą?p™!ŒÅ7C“„.RĀäó"2.Ń >•5:Q„ŖN÷?iżūoŪ5,¬īūL¦¦’^" †ß—zø¦ŚFEVٳbĆ»*–Y1Ͳ4Ć4󎓊Lō™Ū9UˆJ{ź”k)(ŹJYVkšĄ!ųXbdj¤1ŃyH§ßž¦•÷&ņT'¤ŽO`N˱l½•Šw=† ī}Õ,³n™(«ąŸ,cŻ’żŖ¤kyļe˜Œl³Čī×#ßÅåōłŌ±ŌÆ,+Ąc¤3ŠT]öŌtZ*Ń”żź7ö5 •Ś~ŽŒ/³’w»J÷¬ó`ÓC¢ cT+`³KōŠwr2z˜üv¼g¤śŠø°2£Ūd!øX×’ć’Ż,ōƞOo8 ›aŅõņŽó>VĀ=زe‚‚“Ķ-3x2ÖSsŲlČZIj|&žP­Ø÷»Sp˜ųę_³ŽżKŒt‰Cõ‰Ź›’vļ³Š,w+ÕŅ“®jÕŹSyØWó>Ž}¦„{M„I8P|ß°dĻčžļä] ¦A˜ž£øä¢š# "1¶“°(äTŃ#-¬5ƙ„ZŃó>¬qŌźL6åx”U€pO)[ NĆš‡_ŸYN@ś.ē½ńE‘zÓiņńøä1ćvĄĻēÄ˜ØąĒiĖ^ĪaģķDdéō[oå½±łÉž­,tŪŪ:bŻĻt“t³\1ŖiTĢRŁŻOuŠ›]ÆĪå¼væJyPhß ¶<3"–eNß·śĄK%Š”ńøL$!"=§HŽõ# "AĻNŠ‘b§Š&Xx DN@aŽ{$ÓČ;‚^ÕSŠŖT­™AH®‡S-žOķ„%ąQ)"K3HĆ ·ŻöĘwžÉūlZ÷…¦ĮCj^¾B™gU¦ÕņŽ R™$ļrV‚Ą”Źź[‘»NB…ĄN@ķˆē/ŸØœ‘«§Ó]‹,œp Q@„ä¹Aä„“ĪČat‘»ćśdŒŃZWFD=Ę“TƒUE‘ œc'e®~Ź5£īš épŸ¬CVyĘ?y;Ų³—j«M=jvFźĖ_sę«tۈž?żł~c«į¢ė;¾ćö¤žų揍2åä¹3nī6e™…ĒŅnŻ2Ū*irФ…Ņ(p†ĶBĘģä}n¹ė­–€œĘؤĖoN­ØūŽŖŒŹ VH„мĘéip’ÜéW¬kāä)‹)H= ćF°°"ŹF °Q+•&āį䢊n ŹRĖńŹÖćkÖKŽ8Ł”Īģ7÷ŒŁm퟼¶ĄŪ U€p•†ßSOŁ„é:8ŃЧĪuŸĶߝ¾m‚jK–'ŹLVCŖń”ńū]ļæŃeš¬)±ų”P‰"Qo1: S@tܠ˔ي¦e!\•U kh1#€!ļRĢėÄņ”æ¦ÓUæKAąe]%pˆ®ё–S>dĶōč€^ĘfŗĀčZˆ8jŖL‡ē/łö¾–;īx,ļm-œ .œŚa(Øōüó6r„JGv”ø=”—?³µńć'ŗt|ēEŃūDć¤zō(«K&ćäĻ~›l‘Š••>sšSŁŻL”Š‚ 5ŖD1ź0 ÕňåhŌęŌÖĢ{/ŠŻ§‰W÷A»0õĶćuc   Ł–ęIĆź- <ŠNQ°ÅQ‰89€¢F–NV‰<Ē”ņ>å«‚¤˜+ė• œ$ü{Ė[ģ'čÖ[…;&R‡ź*p˜VĀÕŚš­ÉD‰Rń/1ÕĖł8ģÓŸ@GĆ2u™33Žr'®×y)čå™cf©Gnåā=i[:RĢ4dd0 ™ˆį%T0‰!uŗū)ė7n…ąVY§-ÄćR~ņˆ|N\'¶‰@Q†] z1Õ$EA °%Yh–M‰ĆiT×guųÕL3Y­fś8«€ÜéjĀJŒtĘuÜYķ‡ČŒqųCo;3ī܄‚żØŻnc;T©aˆ–ė×mß§#G &*@˜¶ §*ėė«ē;¶‚DÄČååĘöŽFTÉ2g“Ó*2/Ÿ‘ļYiT?| ē„xfz>[ųf,”D>M°u@4jźōóß²ī{ńŲ,lF‚^M ŽsŖ"k“šO¼KA|¶%ł 9Q*ó"įĒUŽ…"Xl›ŗp‹€­Ś&9Ņ!gźĖEÓņŚ-Ņ˦ĪÅÉh|VP|Óļœ™`Ö¹söɓ¢ņĘ7Ņ·¾E>ŲĶ$žē+š&®‡ļŪ†ŃČķąOē*E,„õu:}śöóēÓ „†·‹ŵV8TŌT8œX“QŠä¶PA–GĪŻÉN”UźĖøŠ‚;!i?Dź¤MžEW&#—SM£ŗF‡Jō‹OY÷Ü26o`¶?bŻŲÖĄśČŖNšė•ž–—’ō&Ņ>wĻmĆ&~ųį3™Ė+_¹śłĻ‹ĢŠjŁ%ęū›c*a†A€"Œ1d$ūōé]“F2TĀyH!MéÖ[Å=ŅĄ6…·­ŽP&„k4œ“¦ŃĄńÕjć…l\ā °' ļęsgž¹ł¶ &ŽĘ³Œ³e“łwSzļ‰$ŽŪ"2ł¼KA–"+i„t@£ēBŃҌ&‰%ż‹€sޤ] w%(Q[r‘ÉŽ–b!ųģE›tT1šṌ MóŌvŹ:^0¹s?d:Įvqęr~šmŅÆžUÆzl܉?š«[’ęoDVłńYčŽ;ėė:q¤“y¤qĒyœQ~*@8s­­­*¤Aū-oiąsn•ēuĖ„%śņ—oOwFć]ļ²o¼‘^ō"{ś…v— ĪC Ņš&×ÖlĒéŸŹŅu X^n„åć?¦ę=*P "*†į&!×ķG B©œŒ$Xˆņü˜8(ĘXĶ4u"M!A2Ź\OAÉŅ2ńBŌädNšĶKj"—,”›­2ł‡oā°[‘{Ē ųŅ@#ĢšPqœ(ķn ~V·bÕ4ŗŅm†¤į\ÄCĀ‚$Ō]® Ü<³v@É .<¬7•šśå_@:y’Śm»RɌ…P§cÆ­5Ö×é…„]½Š“CW®t{Kū ūoĒł)Į!ÅŲsœ~€©^°åįƍ¤żŅ„ÕQ–Hó·|–8„¾~zl"֖,Ü'ƒD¢ļģ•ÜŗƒXU¦EŻ_ąG˜  ¬x’…-N­H”‘øŽQP¶ŚrŲׯY/=čä½ÉYÉŠ†vyįŲŽj¦EŅpŖ@`@Q Xh”(ؤKóIׄiX×w›žlw÷Æī=3śą­ü3MaJ(²aį+_)2Ég?»v: "ł>© ¬Z„O}ju¶ē²*@8o)Óņ²€@čydŪöˆ>ņoōéõņó;?ć³“ŖRµLä–p4ųSDŦŁŅśAß­Ä yŲ¢$·68­sz¤bn’Nļ-UcLAœ šę+žp‘(•A5®ų‡pČÉV[ņµQ¶šŃŒ7<‘Ų¶Ÿ£«²$؟‹ōŠ©łÄiĘLüæé£gĘ’Üsāµ~ä#=üūŅ—ŗ¹āŸXɐ…Š«^µi· ęÆ4ʞ|Ņ>z“Ńl’¦įįāEńŠŽõŖ»,!™’ü¬į/'®Q“SÄbdɎiōBd¶Čõ%äō(ŽI9į1c ‚¾ÄžĒ»%:=ڤ`KfpĄO!Š ‰ai¶:œõ†'UMĻ;)6ر’Ql5c‰ż3Ó¬ūś×‹÷žś×P°p¦*@˜æ€1]§(ź²Šqz8fJ É.^SŽ[!‰Cų9zTąšģYn‘åį_­¢*(ĻÓćpWėAĆ™5a„0†Ÿ†Q‰‹GRfTę1Ę%F¾J™ær™īæÉ#%ɒY]'œP0 ģR0ź–Š|¢ @ۊ‰Øz,­kķÄį8āĶZ4yĮź£AĖó4ŗ”ć_ö‹ƒ‘öńŸ»MUŽłŠ™\$aa„"> fØ„łKal«>ń„ ˜•JĀÉē0 ±‡ āĮ Ņg*1`y¹‘÷ÖóŌ#‡9Ó$ė±˜‚ŖžqBE¾EŚ4˜›Éœ@Pź$Ń럳~’&§ŖÅx×ų  ,£ī±+µ`½8T梸%± >”Ä*£KgyŸéČŖéyG0¾Žų»£ņļnæóĪ™ J±šņeūȑ}żx3—–w…KQšĀūÜ9äėć0––p؈Ø2o³¹źŗ«ėė«×®­^¹²jŪ« wįä™gģœ÷™Sī~ųwŸķÅcJ Š(‰xP뾜:£}Īņ$Ņˆ:²^z\ M”©ŽvŌ­+žµ$łZ~$é ¹œœˆJŒL] P˜eås@R–eĪk©‘īAÓĻļ,F(ØŹ×¼ęöYų Q‚…(?ūŁ™,±UŹ;€Bƒõüó¶b(ø±±Ś×{ģ؊bįņrcąō„v}RąT³ž~ŚÖõ©‚:«%H²šŸXł­ß²«ÕĘ«^5ƅö ę#¤>=žųcI]d¢«Wó œ QQ8ÜQĖĖ+ĒŽ ų=ń„­<@ģō:9+ΐ‚xˆ÷»ßšˆcŚį"Ą/nC½ÄĢ|é-`į:r«„%(1Ѱ”łtüˆh„. [’³ŠMXČ’źŒ,–&„ •™k§_ĢZ2ūZj¦ą BŅ8i!±€xH< R!‰„¤—H÷IĆ”9īdѵFƒß83å14›āI¶Zō'²:õ™ī ϳg½Ä>Q¹*ခF†!JE)Õ«pø¶¶Ć+JX8l”4V”³gķH&_'¬ė×W·‰zĮ¼ĄB”ē§Ą”.į!cc5,™QHŅE†S ŁC‘ӝĆŃk}ģē,ö0P)·80_Rc;q'Ļ’F—B*µńIōs—¬_½Ń)1 €Éˆ:¼kŲ pčIŸ‚‚’…`^+A ŖČĘŗF&#sÉbŚÄg9ŖV•M~ņ“©ÄI2­j24c"Wžf9Pw?œ ”?ųƒĶĒõĄ·ēM¶Šްś±­|éK3gķ>QĀłI1ęé§ķ‰S)±µ5›s:z“‹Ć ¤“¼¼’P3±Ó§o?¾ė––5¹La®»ŗ50„sēģR‰é'cAńō¹nłśé±‰(ųg™Hn¾„ĒlŶ ©Č`|•œŌ–Ķ ~@ą9˜D»ÅčZD^µ^wŲq$ŲJrX’\T@Ž„`+!(čD S#fš3Ž’īXø ½”Ŗśh®:ƒŪ?ņ×g2 ucƒ––Ø^o~€\‚Ą{U:yϊ ŖÕØR”olØ“į° `†*@8'5‚C@ °Ģ( ]æ.®ņŃ£¢Kįpy¹1®g@.M¬'Ÿ“U„ĻÕĘĘąg£ę^ø`ū¾ˆJŹóĻŪ Ņ žiB/?? §|üD—Žļ¼(zŸjœTŸUˌHś5’¤>hńM r ±ŽuKņ›;IŌuĮ,‘CÕ«[ )•S…Q€Rāõõ”l'S6B@”©Ż‚Øx„Š…Ų{Äŗ—”Šüõ×ß̆iy [±PµÜ?>©\fT*‰IąŚ5ūŠ!ńø5ó>Œ}­„ó“ā “¾ŽĆ¤K—Äē±c+Hˆ£³0* üŌ*J¶mīDį9ŠŗA¦ !©L "ŽŽĆ>½ń٧,)8W±ŽONU&÷– ˆĒuŒ}É9ĢkK¼‘$…S·B9 œšģ»™[' ŽCM”‰`6˜°ēĄTrē|~‰:Qw׋£—æ'{Ŗ«·¾uõ}ļ[étØÓk6Å4MśŅ—VūFŽwß —jęų~WĀ9ɶW·pńā*Xˆ Ą3¢Ļ Q®ÆŪ¬7!¹n’ZĆvń¢ žA• ]½:8BD„ü'ž‡i–™ÉĮŽ'uPąŸ–jDĮD>§6IB„%šC‘4 ÜpÖ9ÕL ŸeF\·¾’€“I¤oµ\‹“/é2F­Ų1¬k‡Bs5¤k•źTB”ĶŅcžęŽŃ{ß+.ö/üĀTū-oYU»~ŻęœŹezŻė< <ßyē¦g`„įē>gßygŽ›ßß*@ø@JXŲ'źeOĀKE©­šKO„Ö×éōéŪϟļyäkkŻAøį°žÓNp81 KyPšu®WÕŗhIƇą ųudC›ü¼x@KVš\° q¶ĪAé • Ž£+~Sž&M®XÓd[DD$],}”SE£Ėmj³=½š¾Y÷#yķ8µĆīõĖ]ß÷Ą™‰ē*ž)}śÓ°Ū}t*Žuן>Š}ȞGĄ”ļS§C ‡‰~’÷)„’}ÓMy]!*@øPJs«ļóÉ'mąg+ɶņÆĻ ų7Š@øķńևC5xw w½¢£ÄSeŅ"?Ÿ“ƒüÅ»üCŁę^<ƕ] B$Ė%F­ §}Š¢^÷cé3§93\J‚T.Ruƒ –•Qį¢D}I#_yö7ž¶žÓig'Éh1č+ éŃÕĒ?%×µM3ƒ»żę7‹÷rß}ā½4›6@X*5.\  ,Aׯ‹ ŚĆ¦‡ZĶū÷» .¢Ģ椅1²m»ŃŲ|¢ŠL}Z^^9vls (ˆYÉēVj*? Žą %(ŻJÄōąC‡v »w}  b(†ņ/˜×‘„ąŸ¬@Š‚M‰Ć&QŃåHŌ! $:ĀČp:0ax¼˜ŗFƒ)#uN%¬ĀØĆDČŲŃAÖQ·4:eŠ;ž²ŽsĖlYX3- H‹HćÄäyE”°PZ’’P) ’†1īLCš@o}«øĘĒwļ0ų—t=śčcY­r×]Ż÷ž÷¬“Zv«E°fS@}ķkBN×®EėėŻgÉR9q ʶźāE[Ó6?—–6‘™.-Š.Į›¢¦Āį°ńĖĖ Pļ¹Ó±ó>Ŗm4&Ią±TI© Gz_N>ŃõH‚PRP PŽéR%~ŽõépE°°„rP(|„p¾…ó’\^KMKBMyQ &–Ó™ ‘j"lhI£7?aŻ÷āŁ²0-/ÜyŒV3Y0«īžĀ™‰ē^½*ī°aŠ«_M–Õų…_č"š½ļ½}ąųdĄøzūŪ ą-“ .ĪžĻRÓ“ķł—š ėėZ[ė" āœŽmP/ĻžzJ`V*‰ņŲ±†źŽą-Į!ę‡(•E‘°0„ ‰Ņ¬@§ĪyęęŪfvl`k[’¬žnJč"įpźHņ{œ¦`KĀOģ]Vš‡ŽlĒ‘˜’,­Į+ļ ’ś"( ī4Ė ž©‚ĻP~’ü™jŌi#¢_|Źŗē–ł±0GżĪ£RšŽ{Wé—ŗ/Å÷ÅéQ/’~÷wķčŠ!:r„&éäÉF2`b"ZLķ ¾ĄN læ?›wh„·~„ևƋÅ\ ~ÖÖŅĄ-3Hׅ•FQ^ŗ$Š›š2™K1aGŽ4ēhD ^æ¾:å6Ož)ģBĘ8«Z¦ØbĖŅB.ēsZœ N@ņ£Ŗ"‡o KX{I;EĮrć.°Š¬K ź0ŠSd›x°=ÖŻQ[žšˆÕń‰½T4r#ŃrP£U¤u±…qć5XvæÕś‹ož™ŽÉÆżšøĆ ‡8Ų«WŅ’ÜēČó؍{€#­aĆ«Įæ|ŁFyĆ ā9€ˆ ÷’ö,‡Įoą˜!āˆüƒ@8”ĖĖ]€Ń¶8$łĪń†ńĪÕēÕ««GŽtßæņ¦\„ē*5+€_ ŽĀ¶FØV¦¾Ø¶źŌ¹nFū»Ó“±¶d¾˜€Łp8ņjDM&(ųŠ ~0/¦ ']µ$›1ü܁h)“@ ڿ̲–}ńØ¢ŲC‡`z.¢¶ī éžSœkĆ÷ĘS„¤Bk€°?$…”·ķä© ™‚¬ŲĆ.b!E]älÅa¢Ó§ NOF./7Ο·įʶĒxŽÉō Ä\#ŠD]*»tI8Ęémō}†¦Ā3“ ˌäõ į_¶c‚vä– *öRŠ“ŲkŃf S,D?Pü{KÄōŹ4Ņ9ÕnCI),$ŗI£2®„K—*™f)¢r»…"Ž&łJ²Ę]GQ!upڈ3${Ø[-I$×Ā^*ł!U}čė§Ž;½[gćŸV7Q+čolš˜ś”+(˜”™ąp ”÷¾·{į-«ńgf><“ķŒ(¼¦ŸR”µ@˜¦ąG‰ž!‘n\Yvvš«Ć]Żī**Č;¶¢p¤%]ėėCg)&=ń„ &*PAW®¬Ž³“}ģX‹V«äŗ°ž¹**؏ÓS>`¤ÜŗeN–ĪĮ #ž)…K"‘ćĒ”'qŲ’,„Z²Ž¤M :1 ėŒżŽ”Ap‘-ųÄ$™`\µĘé (Ńqlx¬¦¦ˆµžUx/“:Øó„Am°PBŗķ8hÆDtŧØn¹”Ų&6‚^'ÖŽU†8Lė­o]9~\ÜŽ~ŠÖuZZ"Ӝ÷ÖŌ›ķk)X˜”v=ÓüŚ ż|m8Ūž–sļŹ{ K=š°ŁŲ  ÆT}ŖhÜ*0 č"IA˜mۚF×®­tžVśį­­­ujõ±%V %œVnē ƒ%JrŁčIž©‚‚œ6ˆ "Ź‘dÓgną¤õŅ…KÜ(†1ĮĀ@– >U˜Ą˜N“ÄØĶØÕ¢×9ę§N»_e¼ĒC”rØźpxˁRÄéE]²”‚Ą0ŹŁpŖ9ÕŖV$żźUė凜ŗeaŠŽ¹˜‚ų#ā!E‘0(É…ĻʄĀhCÜSŸÉ›ń}Ż#g¦÷öģ³örqN7ÜŠ˜?łIŪóØZ%¼åĆÆNģm¬'~†×Ƌ§”ÄP(Cķz^&:×’1Ń7āśĆĆł—čEjŒÄį}²%Įź #LĻWĒŽ ®¬Æ‹zµŚĄ+ŅPWTŌY^©ļÉį ©W„ÄįŗCł÷䓶aˆ‘ŗNĒ7Ņ][ßš°·Ęa:°‰„›ę¬8ō‰^ä Hü„½c>ȹ.‰5L‡,Ę"ž†k²"((»šyP£>gžåĶĪ&AyĢQź” ą4ļZ;&tBėVDM€MĘé`°ė”52Ź–($G“V7µp¶‡üž& nÕ /ˆ;¶‡ÓŠńŽ{Wæē{V@ f“¾ńÕiĀ[^^QĻ–FĆaņā€aßßlgŪ\¼Bi׃×Ć%J²ćOŽĢ°„y÷mŪK ō ĄOTü”Õź4 Ū*§­J^ŻÓOŪźÕń8>’¼·;z“‡ˆÉBźeŽˆĆ)YøJ(ØŹ!¤QĶZüÉŗšQgĀ–ˆ,Ö;šĒn£M(‚Ä~D¾¤ *LR=‰@Ø¦Ń•@ŌkŒ®Ščuœ¶aå}Rōī’“?žńÕ»ī÷źšį†¢ mĮ”Ҿ»ż+_™„…>ŗšUĄ/ŠŲĘĀ!“¾n;Eųéi©Ē˜öhGW…j׃š„üŁUvĀ‘D<,[¶aXŗ+я”s-Kū6źxļ¬ÅĮ”Ā[‚@ÅæD u0#A©±œT걁‚꽄 ½ŠŽ ¢āZT$;āć1•ÕU{ā½ßvžĢźĶ·Ķų€ŁöŻę=.U˜‚Ÿ€É–@¶ ·Ž»§Ń??gż›ī„^ ¶%…EmÉBCIĮJ.JLrń L3²4ZŅČhĀķō!qóßō¦ĆŠ –8ИĆQģ(<®K—ÄĄ#R-ƞ †%Ą³äĻØ]zVŸ’Ę‚ˆci!@8Oi!\[&š&^’ߏʷYāMD×ä`W2ÆOWeć†ō9,2‘śų×'ą,Ü~LŸ’WwźTcŲ+‚O5HSo2Į[‚CO}ą+­ÕW®Ųč]`ķ·ūš.­† ä›%Ȥ+¹×ŽŃøÄč§²lŒ$)āiėĮg«‡PņĻ až“¶ÄnoM TՊN((ˆuKĄ”žńéÜö©˜}ī‡oŪfš‡Ÿ-ł”Ö×éĄQ¹ūnqånøA\Ė?żS[꜎ļ]@ć+_IKKsg;­­‰WIź>¤‘R=žłp碈nŗ©;ųüy-0ųQ†7ĆxŌ_‡ĮµŠ@å Ā­üū·øĒD/Az%:Bō]½#‡įp…?{!v„ķ“Š=ź}Œ¦t®ūßģÄwĄć9hD¼…I} –”’§ĀR»ÅųOHłTYń/Y=ę‡xŸGŽ4ŌCÅėUeŠ2 ®œéõ™›o›ĮѲ‡h[Fń-•XĄ°Ąųę¤HZ(=łDe£ė¼ĒĶē¤1źD„ ķØ[* ¶dE- kŹĻ¦$+dj²ę`æ~šĻ灺Q“±a/-5¾š…Į½¾XŠ[ XbĢW¾’š‚šøŌc!łj\W0¬ZķdŪ]j&zöY(R?š%ļ÷Ņ%[¹*4ŗra’^KŌAr':@tØwäóDU™)Ģxā0ž’ķg¶µo¹Ķż«!>ϲ‡SŸįüOjj%źÉ'Ÿt½kxx°cĒ6°‡'š~xIūV·}8T Lø{ōčŠĀ! üK*xĄXt}}uXJWÜŖ“‡ē3Āa}Éo€ MŃ8‘FfÄžŹ4Wä›nĘįIŃ'¾įØ.ĢźČJĒ“P©NøRŒ¬HŸĆé®ē¬ūnr0ąōe0^$*m ?”­ølÅTšƒ¹‘ĉ„LŌŅŗ¶½ZsæÖ?ū³›?÷‡?œ Ą¹/~ØĆķ²“Ęo~³{ÓŽō&qQU×cåIˆäŖćÉąIA„ŪT.‹  •„aŒa 2ÓJ˜'.#ėiWŸźUz^Ž{Żeš+ÓLśM"üĀĪų†±ŗ-īśŸģÄŪ «¦źŸīGřPš>ÜN¢8Ļ“ŹBÉ«»pA¼%õHׂ҆¤¬^šFźķ)¼mĆ>*]ŗ“:VxgĻŚ„RĻĒ7Ņ‘ģÅÓ‡Š×OOBÄŚ’Å8<#‰ ųØō‘;ŻK¢Ņ3Œ9`†¼ÄĮ-‰ŲŖi]‰ŗĢ+K‚”Ø;čՙähD “‹)ˆzKVš1”¦üDeFuźŒLL˜iŃb(Ķæ/|Į~Å+2ŅĒ?¾šF]ĀæDśhIÉEé‹}ž¼£TŅś0õįP½,<„Fc%ķm}}u g’ļw°Ł“ń  (ʇó`ž?{åŁuŽ÷’©åĪpµKrH®FCi„•7•e'¤-G•mŲi‘mF ĒYĆĄ®ūźĘ»iSō‘Ʋj‘ŽĊŒÄQ6įR8Ž„lķõXķ®–Ėå!ļ’»$gųž¹żīłęž=s_sg8Ć!—ßgΜ{ι߽÷œļ×>¦’øā‰pY„€ pŒ沕§4±|ŹėłR‹_µņCĘßįfž3ł×@8Ü©Dų1WŽ«Ų*|<čTlnbgÕ*›‡g|¼`Bm2:r¬7"—Ė™cōgÖ__w5¶“Tl)0Øt@Ń-“łčRNH Ć(¾?ĆŚųW?r}łRīĪŪ€”rV:›!ƒ‡hۈ|Cūd³”źu„µŽƒ5uŹĒŅéĻQļäČMõ·t¼æjµ²Æéøõu7”iĮU{łhöZ͵f¾oJį#e ¦ßŖ”fm*®«öŗņض ‹b³w” ÷ļiׅw `äXöDøĆÕź¶ZdKŁŌujU9•VØŖg¬ÖUŗF**Ŗ&ŽöÕĖh#īǾw”„O`śļŁgėŗżvüųs#÷łĻ·łq¾#Cē±Vs·:ķłÕÕ¢>tŒ£v‘y vč›c.]²i"-ČĖR¹q£Ųėē>¤{r×~£żõX‘Ü«®¾PTKe«J“³]_tÓ½) [Š7ż1ą³{üī3?o³Ę ÷ØųNŃü|Q›rkĖ­Ł…ŌY*Տ„m»™ktŌķ§F®‚qžWVŌ»­ŌķÕ*tG /X DHWéŽ|ČłŽmčšs!Y»?›”ŗÖzĄżķ ЬŽ4,č4ŌŪØ›•e¶„üʓجĄ …kUl—Ė+Us–†UČø5×[ėjŗ;Qźzžŗ ²½*¬CU¦I!;”µŗp²[µ Q*ŁĻ?_o t>¤„>Äą ½™Eéæ|ōx$M”ĆŠƒ03c“PiK²;õ-±`röN„«Ą×&Ó ĒśOĆāžhģ1Iŗ%  ¼)pécź*eŸM•Ź|ößDܗų”ŃŸ0Œ=Ć<0f²ŗŠL&·µåž7rÕ¬CóX²阍Œø—čŌQ©VŻ«t‰-ø“ŌŚ‘ć{ŻuW.To:ųtŲ† }°ۜkį¶z²1üǘT•’¶UĶŪP2ŪPĆØZ3tXVu¦RĪō”’X¶¢ G÷bƒnŖ)›j®kAr”Ó`AӅŁlöh ŻPą|ńBŪsM’]¹Rß'ļyOįčQ,/Ūžšƒ1s?’łs˜.<\Į½jžG:e”VƒwōL–JöÄDżčŃqÓ÷Ņs©“EØuH¬¬ˆ[`ļD%!:óĒT;ĘAå8oN(#ŽoVķ1UėńQŗĖ™+6.ų<°Ø’Ń5 BŁ<"Ś’č™īrŖŒŖ»ß”ēd‚0ö:Q|œęēķŃѝ">'¬1ž»øčš,¾9˜e.Ā±±Āµk®–x.—JÅŲBuĖčskŽ"To¦†Y‡¬ēØÜ±7Xōš:—9J‡š+-HŽŚ¶< ²Ę6•ł6ñ }µBŚB?¹¶R¶īČZä9ZA•2ozM¹Š¹iĮõĮ,[¦XNWžś.]ŲĶō?ū³ā©SķæPžōOķĮA‡†ČånƒÜ™Ė¹_œ4¹Ÿ]³ŪƒŗŠÆC:”|dųjSøŠé ¢å<BBöT„ 釲Ć:px’ž[ł{ņš)šżĄŖrÕPć ¶§@ŚYƓęFIØąĢĶäųž)£ż†² fKÕĖź=fŒGŲ':Ōz³m›Ķ§Ę錭¬$:< M†é“ń¢Mfķės ­Oub"Nc1zÓé€ė°mś2™–ʱ\iŅ>ó…5ŖŹŪJ~Ėä-xžó,ø¦ė¬@`Š‚]CmcĖ=A¬£ī'ÉÕKĶ«Uq—hĘӮɞ’'gZzöēfwå?“P ~õ«Å_ś„Ā /`gĒ&ķõ÷ƒ÷ mŽ3‹‹öČČžu”©ĄK—l>JüTSüćć9s$mo} ŚĻdz‹wTćjś P'oxŽü››ī)¦Mԃł€»gļDx—3Wl“ŃßmSŸęėĶ\o%ś»=3}7̈æ虊^jsÆŽXGHxTųŌĶĪŚt’Ū€Or±hom¹鄛e~Žęa”ųF|¶ĶtÆCĪ 4~—.Ü dƁ˜Ėv”W•öh“ų,øīYpM‰sĶŠ!Y0 Y]<?łĶމ­³6vvpńbĆ.}ä÷s//»›äöŪ{öÅC1„uåŠ]£ļēmx‚-®÷¼O‡¦ ÉjZiڈ¾õ™ÕUׯś`ŅÄr¹A‡ĀīŁ;e£W­|Jż M¹_ėü¦§1¦>)ƒ¾#A ’0°Ō¬±ČT³éÓa‘,5Źõ/÷uįķu‰±±ĀĄ{Ø®^µĶŁ*d)šN‰Ąq°²RŌ‹Ć8ē4†®RvŠ.¤SMµO‡h4¢éNrmŪž™¹0{źLŪÓ]«ƒ'™ŒŸH)Śä?*Ūģ?ś-Q­uęA’*J‡åB:5ŒźLŲūßhœ~Ėš'RŒŗōĢ3ÅųAįłóvÆ#m Trć”#33c§T"£-Ķ:4įżL›ve§OßŌ”ŽÉ06?M§EtįæÕj½”™Ÿ/öśéoYöT„Ģ› —<=lųr„’Ščž’Nū8½‹ŹĄŁč«Ó 4Ģ|8±»HzķśŃ]\lē°ńŁĄŅRĆō……›'&źR¤Į”Øč‰œFGŻN.ڈĢņ2ŹeōõÕÆ¶Ķä• Æ·ėĀe%-ŗ?%½A Ŗ żŻ®a‹jr!\ĀSę¦jk ®)ķ¹ņS.$”.ŌÜĪ~µHÖrĖŠPū†Gy0źŅ3ϜėųķČ|ęßæų ūčQ "“éõ‹c~ŽęóB”Ė77¹Ž·“±Æ_Æ„Ó)n³ĻĘĒŻĪ;’üłs|"hókņ Ų¬|‰otżŗX°‹ō@„”TŽšļTe8Ģ=Ań|TĶ:=r8Z„MIīæ÷ĀMgļś›Šłt+ĖīO#šč¼@§š²’O„ Ļ“»Čår4^e&=žųńÜ+Ɯk#6x ‹³ÕwäĢaIŒČ|’ī3l²-%° CcŽg2ﯕÉs–R`•h¹Ćn³°­ä·ķYPOßš‰PYŠ®Żt!]M!3”„ĶLFNįD ėµŗY]¹ÖźėŌ׬©i£Tøv!­¦0šF&…‘4>qéBŸž§~Ŗ@œ>śś:*ĢĪ6¤é‡*ŠĒ­Õܝpā„ūĀ;čĀ(lmķ©’½£®\±«UW`¼Ūµy?“ĶYęĖå 'OŗWYuP’+—‹ęśś ’Ž ‹pf¦c/Ph›tÆØSpęf։į=¬Ø;h‡wRf”TKłNØKlµä¢x²‹ õß#”ÜéF”ęTcŖAY’H»‘ō>·ƒƒX]½y¤r˜>՚R©Čn³m÷’Ö”é-R)-BŁv{ŪN•^mf¦nh]J%wjpĀā‘Itų3‰„q1w'7Žd35„C‹”l—Ėģ­“Rć¦Ņ熔RmAV •õL–½e„ŗņķ~o¦j(ūÓ»}łå!}ė[nēĻž¬ū”Æ_·Ł…ā‡?Ük"°?I{¤yŽŗ¼ÆRßhe%|óDŠŽóÆL“iiµŪns’Ņ1!Ņ1ŁūG‚ģ“J ?ōtx”r‡×Øxcž<0k*vĶUÓōŒ×CJn 2p6ā’ORwYSõ±Ų³mE²ĒčSu¤y@°_ĻeŽŽŗ=Žćę֛/”ģę¢Rńg™äįi’itņ¢«Ž’1¹2Ķųz¬l–ŒH…lG"ÜPõŗr!±®Ś®Õöą‘p:NĻ•.ģ~‘æł›ę6śö·‹?ó3…®¤=æ³ćīyŚäTÓ‚ŌŠr%ęē{ą{!ž}$Bꁀ–<5j¦’-µå52Š§Ąß–[™nŗš}VžK{īBmƦzŠĒ˜\Žqū_Żę|1;ė ‰Ņ”i剉<Ņđ‘§V ÷³[Č ŚŠwŻ•‹ŠŸnĶI‡³›;„Ć ;Ī™æmŁ’yąLüų/¾ŽłµĶõėö#<ųĢ3 /–zøįėļzĆėæęN(•lŽ‡Äą Ģ C¬¬Šžw{hēó¦…Ś½¦ išĀB‘7<_„Żī‹:iOöõõś]ģ;vęf­|¶™’¦ĆŒā“见ū_NvßIußąāęš_ ›ų·]ö&~to_ ‰™|Į¤T*j“±½Hc·Żęęt¼uŃāįø1>^_‡µŹ:$*•bLl>B㌊ŸoĶń³8uvŪ ÓŻ·`w’°—ž‹įÆžŖųö·Ģķ?āŪßvwĀ›ßüą‹/ī 2««īŽÓŚchßjōī…R F+1·.oZŖi.o6v;oxŗŃŹJ±×ļ@爐 µąt„r|žūp8Pļv+7%N'ü\D0š{ՀŁĘŲĢP‡›­°KųŠśÜ€Ķh“™ÓyīŅRČy6ÅcfĄłłbĀĄˆ‹ķt}}n”„E¹cb".ΦńėØĢ't²‹V łżż½ il¬ĄŪĘdsÓõ9i|¼į’)Bņ–ž{옻mčé4¦’`lZbmĶŻ±ę‘-pCäw °œ.'ߎ@ņ8kü õŸO~0ÜyŌįp?š>5½m­|ĘųŪ†½ŽgåŸtNE?ZGŠÜ޾™§L=„źÄ„„ā›åcfĘ& ŠŠ-V,Ś[[ ü”#؇ó ©©‰jÕ]'­öĪŚš›\ØPĻā¢kAµlŅ H9kb"GaPl4—YY)źKPéĢ'%&Nmœ°“9žą#čń{õ®{ =,=2K±«:¤mšź«ŲŁ©ļMÆüd~Žżī¼=ˆ{īq÷Op‡ėćoSU«µ”ŚŹ|^‚\¼X_™F±yē ĖI,€żĘ¬•×6Š×ÉӁžĒ(Ŗ2Œo1.5Uڬ’Y ŲvŌ Ģ“ĄĒ“©:&ąé®}Ž‘‘‹pqńfžŅē_k±.äń¬½‘‘Ք é/ejsRŠ&Ӑ¢¢Ö$Ūé Bł(ž¾Ž”zœ¬7†tČ„²ŗZ—ō»ŹŃÅSg8©ÖTŁtź{`ŪĮÕ³”źujØŗ®ŚkT ŠƒŠSÆ3FS8j!C_ĒĀp æńʅ¶ccó]»fÓē0ßŗ¦Ć‡*™ŻĖ6‰nĒģĄą`<×Ü0ŒłB¢naĪbRĶ…÷<ÕŗŠiāĀ"\^Ž/śŚą`‹ź³Ń|ž3Żs øÓ!•£ĄķʀxŅ­µ)ńU(Õ?ˆŠ§Ą©fOŌ= Ęź™B'ŻCöņ%*•JH"Šs××qńbHźŃ"Ō·nŖa_ØZ‡œ°FGs:sQaO³w/BęõSg:.Āߛæ°ĖØH„dĮJƒƒż ×!‰š[ßźXö§@õÄDČŌż·¹é~Öž~’j”:Ģård¬ą0<Ė'B½£L/²ĖeQąēVįӁa”śŃ"Nz"ģ²Ę˜xĪXłśų›@Y %Ō¾†»ü™¢tČ\ŗdsēĢL ÉT§-ŹV”8BEhŽ:‰ ƒćõąńń‚™¶H\Ó­)W³U0«Ęß×ĒĢ©3į-ģVĢéÓJŹō°—/»OśĄį“ć:ģ,BÕųxˆõ÷Z[ĆĪŽūqÓi·ŠĒķė«O õ\{:ŌQE‰°R’Ż:`B¹EH.ń™c*v¢Ļ=/Zł“~¼-Į›yŁŹEhFņ$pY]%R¢¬E ń=…~é=łL>ǐ’ų/'Ź mˆš7l¶Ńņr±é}}I**C™q¶d/4śļŹ›r(•|¾Įż-­łż»Ļ“!Āē®uĘšūīsßÉŋ7_²éBģ{šŗrŌ«óé?Ü֖kĮżČfņēÓ"¤żƒ.čPøå9Ų"4™U 9= ”{§ücąįvßLŒæÖ¢’šßA“!.\˜O§S¾«•J±lJ[×®CodB#u;>IńtOiqi©ŲĘ3^¾l“›u&M„ÜģÉ7õåß6Žä—ļ<ćįo•:¬½ä4ÕįĆ?čėé>W‘źĢoõŃ··]R ”&j Åčpe33āĀCŹ­/ĀP…Åó^ Č£J„? ¼«Ż7S“ņ™Ęžįd1 ąæąSš¬į.|µ±±B™t†œå?6J¼'tŅ)•Šz óŚk¶Na'OŽLv¦GGŻž”ßČ.”³mŗDåśõ¤"Ō¼žŗ›O«Õp:J`»×į¾"F‡Ä¹s6÷¼śjןTß[Õżę€”CŻæ¾Žå嚏ć9ó¦¾aGŽŌ߆ˆšŠrėˆŹ…Z„ ż§ÅÓļ‰š8@ƒ~Ū™ó Nī!åŅm`8™`üT³Ӂ`>ÓéGŁauµŽŽ÷Ÿ&‰)ĆŅ0žxåŠMś”ŌĘś!±Ģ`ˆ‡óDé°VsTS”éTŪvŻ‚Q 12½Ö*»9*fF§`tĶ…¾÷™šÅ¶ éPæz±ä?ns'õt[„ććżJ£XYq…äs} VšVxĢ+jU‡¼ķi˜ˆšŠrK‰0Š’iȂO%^0^гźv,Āėt°é¤©z8k {”’{ģ]žīD0»Ē—¬/_v³ē½÷ęģ(0Z„üwnĪŽŁ©›ŒEČE§f=Xē8Ź›”Y„<‘ ĀT*3]jśī¹:*'3ŌK—ģtŗž؜<™‹Š—ÜabĀ]üłēēūūS¾«KKÅNŻ(ś ^ĆÆCņŸF ɧ4Ÿ£éū Õ!ßÅ cw”pxøõEHZŹŖĘTĀPß¼‡Ž9øø‡N pRµ&Ę@tÓ*°”E%Āwz—>ØI„&Āig.JŪ§(—U(°‘d‘ģ_¾ę„l"“qė$"„J^dMj¬Æcy¹3’8~<÷Ź+ēŚ ’$MR!PwÜ’1ĶĢžųų‘Ąm|õŖ½Mūčļæ)B‚ņ5Uёū’©~捶]˜½ńŸłģ¼|>cčóAĖ"”f’š#’šh.E(8$"<qɧĄ_>džį9Ąo ­¼į?> T< śDć?Ķ)É$pZ‰šˆÉ{Uż\¾ćؘ›DŹō ^v&(®®9æP:ćdŚFbņ„°Pżč¹”"ɔd²ÅŤŁYĻ™±wvÜ µ©ĶÅ4 ga_0H–IõĆīŽ™"ŁŲÅģ8nĢZ„3C—:«Ć(±ēžÓŒŽŗ›<N‘“ˆlÖ}FSĢD©ŪīuČ7%*•Ž<¾°o9"¤ŚēBŸxHQ ”ń•­Ć?  ØÜӆ}aEųµžÓhN*1“?d\ķ†c҇aü ”›Ģü5:š£ÄGIßĒņ²›żmʉmˆ Ź"¤Å¹h"`­C_2Ź¤ś¢rtKŒtźO’ōĶą;bāBĻNõņr\H””zµZ;yrÜŁō[0-é0“)ˆ…Pn}BI謒Ÿī1õó%ą2N`Ń! ĀžOZßŽŻ¢·€5ą+­ų™n¼ŃE+oŠš)ćŅćĄg:÷M)ļ„&kĪG7nŌ,+Åś”ä®kĀ—»y<åt*¤ĆZĶmPĶe~ަEh.•ååR‰­F" čĖ›ŚÜŚ…Pɔ‚Ńr efʕōH£ććĪŻLLā6ƒ×‘ć ėDHÆquµžW‹joĄŲ6ńOŖĆ••śß™™ƒś~„^q(D$T„_PÆb¶QQٰéwg€Ÿo÷ķń]Ī66½~P„>†»łe)Q:ćäÅ"¤:¾)B„%zr»P+P·×ÖBCž3’Ó¢NˆķIEėĀ`źšø®VŻzqŃfIwD„Į°[üąŠÉd •J1ųtH¬CŽśó1GŽŌg‰…V9¤"¼j凌æAguųn:iŖAoW"|‹'BrR«Ö‰aKž›N÷“Ąią¾Ę«]Ņ!‹ŠĶwU·K„–åįóŸ3-¶d”ØńŌÉłW‹pd$Ē",•lŖŁ‚++± "¬Œd:¤ń]„ń/: ²¾Ž‹Ļé¹¼!s¹œˆPh•Ć+ĀPŽ1:ü`Ūį—¬ßT?ANĒN õŸF‹Ź„Š3ÓJ0…5¶°`S½µ…„„b«s‰Ė—]õõ¹%vkĖjȌZA·!™Q&•\Ī•bµZ7"5ŹåŽł/*ŹŻōt&ĮųéĶš+%J„n…Ō[źpeÅŻ ©”[H„z.‰°R¹5ߌŠm»w”įʍK_>f¼6‰šŁĄ"Ē7Q>Ue s|ŅŠŌ@ļ°ņ»ńŸ&(Bz®ßō®>׿O¬ĘPJZ\“9[]æ^li‘bŃfQķ!ĆĀ3Uįs›¹fØõųćĒsƼr®Ū/'3rŅ!=5½±®\±iĄņņ­œīƒ:äĶ@e{µš«Ęk×Ü÷@[āÖ~ĀžqHEH­|U¹p ŲցąeuÉ”OEæÜ*Ŗ},L„$” ćnżõ凒iH„’ә{ŹŹ÷P„—/Ū”¤öV|ʦ)>Kåršµ³ć¦F„¦“•oØæO„ĆĄż’†¼‰­ŗpÖŹg½v¼’¦#VU)Ś' Łl“8ה¤Źåš$Ež3’š2ss‰pi)2Į™.ō‰Š¼Ź‘QØA"ŃFįB,.ŗR!aĒÜkļ/päŗ°¹ę»ŗŗī6ōACEX©¢— ģ‡]„Ģy+æ® ÷r„’70¬× ¾öźČ¬ż”Ė€Ox=OxįĄŹ”NšUWĻFGźæ(łż7%黁·.uŠˆĒŽŲ7”Ź'æĖ—mŖļ½7WłŸÅ£mW*Åł’(”Ɉ¬Ąły›Eø’2:ZŠ \^Ž×” ĀA'Żėöoõ”š®°«ÆķÆ6“ǽjĄUOK’ÉøtÕ;¬ütbµäæ÷œ€Ąˆ×C޿ȨZĻķ” WVšūļŅ%›}}n½°ąžĖu$ßµ#ĒĘ\kڶĶF!BU½¹vķ`Ä)·"Āęüš×ĄgZqĘ]48BQÄTģÜIgn֛£É ųUķÆŖś£Y5 ģAG]hBś™˜ØNūϲnX]-NLøMö:žÜnng—ngŹuaAt"BD„‘TĒsĘÆµč üDcÉļ½Õžöz¢ N7[ßüūIŹų^»¬j¾ĒšÅ^¼½RÉ.«PL’U*~--,4x«%|žć†y;A„$ˆ›°l£ŖĶśyųx„}~BĄveOQP:N°NSū>Öiźšżė˜‹?|Ø /-•rkķ¤ ’ˆR©81Qą6)ķüłsmÜ(Ō33ēŗšL‚ ܲˆ#)8s³ž3Č!ėŹ.ß ŁŌ&¬Ø³Ŗžš¢•?iüżs+’ Ķ\Č<«†ĶĮ˜: ł_;»óźHrÉ/,Ųcc¹–Ö_]E­V[Y±M’…źV”)"Ā8&¹™€?4-ło:`)ßRƞķŽģ̽då/(M¾ę)3žO¦œ ÓaÖüĖĄ 0LD?Ńp2õīņåÄDŪo}ėƒēϟK2‹,H¤R)ž+ža—ˆ›p·RĀ‹†W>®zL ž°¬„MŸn4 YJ+źéĘELö©šģµUp<½}ØqnšFP.ü`›ü y›Ę­Ķ¹ŃĻŹvO\Č,,Ųcc¹–¦ˆ’Ač–³‡łīVĀ”Ē'b£§£ßŖĻ:ÄT`Ö+’š]U¾¶TŃŹ“k@8øjJQėŠį p x"Ł“wy‡LLøA.<ž\Wļ%‚$Żė*%”cŖżøŖ¾Ö–’‚œqęĪ’f\T!ižeŲ É) §Ź™ää­¦#ļ¶Az…ˆpW,›Ąšš”Zń_r ĪÜl`åóĄ÷#Ęggń‘_”Ęé†K„āÄDau««vĒAhŠˆp·ō)š“*æiešœ#žIuérć”ū€‹±‘ ™‰·½FČtł ‚ ōˉNµBS.Yy²ą&š”śūńĘ«ńŹyŗ• 7ūL/Xł²ņÖ?ó“š<x2Öüµ•? C-†Ń6™L”R)viqA„D„dVéēlģRŽĻRÄ/·äžQ`L•0©TtĀ–ÜCI"AĄ&¾ ’3P>"»E„[ŽtÆ8,°rČ.Z0æT€UUEO¤«™īJPŅŽ*7‡ŽöžĖœ2,¾įą "ģ"¦oLU|˜okAZ¤mĒLĒN śoJÕ¤Ą#Įe 1‘gĮŹO‹ A8 ˆ;É¤ŹžÓ±c¾ÖłĶhm˜¦9¼#q$³jāt²•5Sƒw€xKeĆLķśķ ‚ ōaϾm)Dõpŗ•õÉ…Ó –e¢4¶ ō_Pq'Ҭ?ō¼ųtģ:‚ ūį^óNą%ąóŃ śęßǁ;£Ē ÕGŁSšykŚ™ćõ}!ME/Č:l)A„Ž""Ü#*€ć ć_†Ł.Č£Ą 0dŌßmąē<Į˜Ó>Ūb0¤®³ŃWśĻ· Œ5§»ž:A:†ˆpO¹lcŃŽÆĘl(’õ«žŖwéśü”×?ģi²=¦ÕtZ*¹’AnD„=ą*°\րk€­TÆc¶<~.0Ģōc@N•aą$šÕÆoÄIgnÖPŻ“7Ųēæ_Ź@-b‘éĘ[̆Zį@ "Ü# Źƅ #£Dx“Q„φME/> j)(„5uįtcĻ‚ŸŒ˜8±ģ$÷[łéŲū ‚ ģCD„{Ź=Ź’/L‡Ģ=”žŪŒhkšŗŠĒ<0nü}ųućoB½‰A8ˆXŽ$Æ}Ą¬•Ļ6öLŎ÷)ēūV~8Ń8¦%¾lå3@ 8¶‹EA"é^ Ō)ŁX’MG;i²ńļļ§€“ʰlO©æ’„ׯE”ۈ÷“Īܬ•/‡]Šńߒ•÷õ|†[ąļ©ōßTÆ_ˆ Āž!"ܧ“äæ)U÷G½žķˆĮĆŃĖNŖK—¼ń“ęÓ½~ ‚ {€åDgFa™µņ“­ūOĆ""ŪæŻģ^Ć;ū VžČŽį "Üļ4õŸ†Dųœśšę”÷iąmŖŒ(Gj†åÓ ‚ Ø$)ģkŹ@V5¦¢ĒLG(ķ’†­oAņ„øPADx { ėŸn¦±ŸžĄko…  ‚ ˆO'³ {ķē=7k婞 Ńó•^?‘ BoIõ:” “žÉ¦9*׍KKŹjńųĘŠj“jA8䈓JÜ®ćRØ ‡öóa žNƟHa’`9^†­ümōŁ”‡š žĄOļ’O,‚Mŗ×­qŸ37kå”\xXŹĄ›Ēü Œ§jÆAŲēˆ“Ī\Q¹Pó=ąšPf’Sg®×ń ‚ ģkR½@h‡‚37køMU’±  B3ҽ@hŸ{•ē¾kåĶÆxųŠųO!1–#ISA8Ĥz€ ‚ ō” ‚pØ ‚ ‡” ‚pØ ‚ ‡” ‚pØ ‚ ‡” ‚pØ ‚ ‡” ‚pØ ‚ ‡” ‚pØ ‚ ‡” ‚pØ ‚ ‡” ‚pØ ‚ ‡” ‚pØ ‚ ‡” ‚pØ ‚ ‡” ‚pØ ‚ ‡švEų’Ū«†AžÖ÷ųJ"ø BŅD@šH!i" M„¤‰€4&BŅD@šH!i" M„¤‰€4&BŅD@šH!i" M„¤‰€4&BŅD@šH!i" M„¤‰€4&BŅD@šH!i" M„¤‰€4&BŅD@šH!i" M„¤‰€4&BŅD@šH!i" M„¤‰€4&BŅD@šH!i" M„¤‰€4&BŅD@šH!i" M„¤‰€4&BŅD@šH!i" M„¤‰€4&BŅD@šH!i" M„¤‰€4&BŅD@šH!i" M„¤‰€4&BŅD@šH¼)ÜYrKIEND®B`‚libwebsockets-4.3.5/doc-assets/lws-smp-ov.png000066400000000000000000002160421476025525100211760ustar00rootroot00000000000000‰PNG  IHDR ؾ ōsBIT|dˆ pHYs’’£#tEXtSoftwarewww.inkscape.org›ī< IDATxœģŻwXלĄńļ.½ƒ4QE@TTDģ%ØŲ[Œ&ʛ˜nbŠ&ŃM»71jŠł%¹išÄō¢7ĶÄÄŲ[¬± QTE¤Ć.;æ?֝°ĖREŠäż<Ļ>ĄĢģ9ggŲ™yO¢( B!„BŃ“M]!„B!Ä?‡ B!„BˆF#ˆB!„¢ŃH"„B!„h4€!„B! B!„BˆF#ˆB!„¢ŃH"„B!„h4€!„B! B!„BˆF#ˆB!„¢ŃH"„B!„h4€!„B! B!„BˆF#ˆB!„¢ŃH"„B!„h4€!„B! B!„BˆF#ˆB!„¢ŃH"„B!„h4€!„B! B!„BˆF#ˆB!„¢ŃH"„Ą_|Į!CŖ|żüóĻM]Äzy’ż÷ ęĶ7ß¼jy”––ŖūIÆ×_µ|Ŗ²dɆ Ā’%K=o!„ug{µĪĖĖcŊäå呗—‡——]ŗt”{÷īhµµ{ōz=æžś+™™™„††‹F£©syŹŹŹŲ²e Z­–AƒÕłżUÉĢĢdٲe 8Ž;^QZ999ģŻ»777zöģŁ@%lXÉÉɬZµŠńćĒÓ²eĖ«’ĒÕ:VµuōčQΜ9Chh(­[·nōüEÓ8yņ$ėÖ­«rżøqć±4 ē÷ß'55•_~ł…ǼAŅ,**bõźÕtīܙ¶mŪb0Ō}g0$ŗ8qāėÖ­#&&¦ŃóBQŹUƕ^111JJJJ­Ó?~¼śŽ-ZŌ»<  ŲŪŪWZ§Ó鼝īŌ©S@i×®]½Ó0Łøq£(]»v½ā“®–(€2vģŲOŪtΟ?Ɗ££cƒēQ?ü°(óęĶk’üEÓ8qℲvķZeķŚµŹ!C@™8q¢ŗ,55µ©‹X/©©©ŹG}¤œ>}ŗĮŅģŻ»·(kÖ¬QEQŠŠŠŌótiiiƒåS[sęĢQeöģŁž·Bˆŗ»j- &†Ē{ŒK—.ńŻwß±gĻƌþ}ū°µ­>ū³gĻņÓO?”Õj™3gĮĮĮ Z¶/æü’7ŽxƒiÓ¦1mŚ“z„1dȶlŁĀ-·ÜŅ e»V3† .0vģŲKóÅ_ä³Ļ>céŅ„×lĖųū !$$€Æ¾ś €ąą`:uźÄĮƒ9}ś4AAAģŻ»—āābśõėĄžżū¹xń"}ūöÅÉɉիWóēŸāééÉøqćhÕŖ•Õ<³²²ųī»ļČĶĶ%$$„įƇćįį[ā~łå #FŒ K—.lllŲµkk×®ÅÉɉ &Ø­ŽƒķŪ·“œœL~~>=zōØ”Ļ?žHVV‰‰‰fe,,,déŅ„œ?žV­Z1lŲ0üüüjóo „¢1\­ČĘŌ¢ÕjÕe{öģQlll@łńĒͶ/++SŠ‹‹Ķ–ķŲ±C”   +.µÉ“'+€ņĮŌ:’’’:åk0j½mu- %%%µ®Y¬j»ŗ¤QW:ĪjKRiiiyFDD(€²sēNEQ*·€čõś:µR)z½¾„7'- āĪ;ļTeÖ¬YŹĮƒ@±µµU EQ”-Z(¶¶¶JNNŽ¢(ŠŅ¾}{ÅÅÅE)++Sī¹ē³V_eĒŽ•ņøté’h¶ķŒ3EQ”eĖ–)¶¶¶źråēŸVEQn½õVP†Ŗ¶¾š¶ÉĪĪVEQī½÷^PęĢ™S©u`ēĪŠ³³³YŚYYYʊ+{{{u¹V«U¾żöŪJå}:=zō`ēĪ„‡‡ckkĖ 7ÜĄ„K—Šét<ńÄųśś¢Ńhš÷÷'..Ž“'OZĶ÷üłóŒ5 \\\7n\•åœ9s&...8::ҦMµ7==‘#GŖiŒ?žÜÜ\}ōQ Ą·ß~‹§§'‘‘‘ÄÄÄ0|ųp5ŻW_}•˜˜^yåõ÷Ļ>ū €üü|n¾łfœœœppp sēĪäēē“™™É7ވ³³3...Œ5Ь¬¬Jež2e )))Üu×]Œ9R]§( ƾśŖśæ1wī\6nÜØ–”[·nźX”C‡ѧO5ĻiÓ¦©b—,YB÷īŻńööĘÅŅ!C†žž®ęóģ³Ļāå免 _~łe•’⟧cĒŽųśś¢×ėŁ»w/Ē'==½^φ (..ęŲ±cōźÕ‹;všÉ'ŸąääÄ;ļ¼Ć˜1c(,,ä‰'žØ”ī† Ō±Fæüņ ļ¼ówÜq„„„<ōŠCčõzęϟĻ[o½Eyy9sęĢ1{’–-[˜0a’ž÷æńóó£¼¼œM›6šĒpóĶ7WŹwΜ9Ń­[7Ž{ļ=ęĶ›‡§§'Ó¦M£¬¬Œ^xE‹a0xśé§+½’Ö[o% €I“&ńŲc™­`Į‚ŲŚŚ’’’B||¼ŗĪ4Nćž{īįĢ™3<’üóŲŪŪóńĒóÄOP\\Ģæ’żo&NœČ /¼Ą7ß|ĆŻwߍ¢(,^¼€wß}—Ó§OÓ¦M.\Ø^WĄŲB“’~¼¼¼X¾|9‹/ę‘G©ń8 !„hDW+²±Ö¢(Šņąƒ*€2iŅ$EQåöŪoW„eĖ–J—.]Ԛ½TŖŻZ¹r„2yņdÅĒĒG鎽»āāā¢ŹsĻ=§(Š¢)€ršąAEQåę›oV壏>ŖŌr’ż÷WJ?##£ŹĻcū¦ōčŃCiß¾½¢(ŠņöŪo+€rēw*Š¢(ƇWÅĮĮAiٲ„¢Ńh@yēwEQ”Ē{L­ŻW“Z­([¶l±ŚŅ·o_PBCC•ššpP¦M›V©|¦FeĄ€JĖ–-•ÆæžZQEéÕ«—Zö°°0P~ųaEQeäȑjyåP÷ĒńćĒEQ”˜˜P~ūķ7µu`žüłŠ¢(źö666JHHˆŗ_Lµ¤!!!j ‡iUdJŪō T[@Léśūū«ĒīāŋŹ?ü ~V@‰ˆˆP ŌŚäØØ(% @”·ŽzKQE™1c†āåå„ÄÄÄ(źgUEłā‹/ŌüŌc&- ’\[@åÆsÉ믿®|üńNJ———¢Õj•x@ٵk—(/¾ų¢2wī\PnæżvEQ%%%E=–••™å±bÅ µ…÷äɓźņ}ūö)€®.óööV“Z­¢×ėՐ^xA]oś^>ōŠCŹłóēF£„††*Šb>>Ā`0Øß›={öØļOJJRĻƦV[S C^^^„żÓ£G*Ē€dee)Š¢(ŃŃŃźyĆt~ V÷ĆŅ„K@5j”¢(ŠrńāEõ\géšįĆf­į;wVeéŅ„•>£éŚįźźŖ¶¦!„ø¶4ś4¼¦žĶ™™™°lŁ2lmmٱc»wļĘ×חµk×Ņŗuk6oŽ @—.]P…#Fšī»ļrįĀžüóOŽyēĄŲ»®/^ĢäɓųąƒP__ß*·ONNŒSuīŚµ‹T›ž“iÓ8sę <šIII”••ńŃG°zõj’’’čŌ©S•i$&&²mŪ6|||ˆgŪ¶mŲŲŲšć?VŚÖŌź3hŠ 6oŽLZZ“&MāŠ”Cģܹ???āććŁŗu+Z­¶Rqqqœ:uŠW^yEķ÷½~żzņó󉏏ĒĖĖ‹øø8³÷ ¾łę>’üsNœ8Įžżū9uźėׯĒĆƃ}ūö±sēNģķķłé§Ÿ*•{÷īŻDDD°sēNŅŅŅŌu†­[·rźŌ)¼¼¼(++ćŌ©Sźz;;;¶nŻŹśõėY³f gΜ”[·nģŻ»—ļæ’@żœ/¾ų"ģŽ½[m2żß˜jU_|ńEŅÓÓ¹ļ¾ūŖ<&āļAQ”j_·3 ÄĘĘĘ’ŃĶ›7Ó”C‚‚‚X³f ōļß_ż’mÓ¦ ƒĄĄ@lmm1 œ={ƒĮ ¾ś÷ļOŪ¶mIKK#22’W_}•ņņrRSScĖo\\qqqسšŹ ¦5iŅ$ĄųŻ²e Š¢0aĀ ƒŗ½¢(deeQZZ @»vķŌ÷›ņĢĻĻgȐ!ÄÅÅ©-–Z­Ö¬Üg¹2퟊Ė\\\0 ø»»Ę)zMešóóĆĘĘƒĮ ī«ųųxāāā˜8q"€ŗæ222xłå—:tØz®6­3µ^†‡‡WśŒōźÕ‹‚‚bbbxā‰'())©ōä%/yÉK^½j{]l(W}ŗ„‚‚ÜŻŻ9}ś4:vīÜ /^™™™äēē[}³fĶøpįńńń;v €’’’«^(ŅÓәśČģaWNNNW½Üļ½÷#GŽ$11‘1cĘšĢ3Ļ0o޼ßWńfūܹs€ńfø6222cŸęŠūĒ4OE={öd޼y<’üó|ųᇬ\¹’?žųCM#!!Į,źžoqė­·ņä“O²qćFŚ·oXļK~ńāEuü‡e¹“’’Ģņōńń©Ó3`*²±±©v½)ĻU«V±jÕ*u¹©UėŁgŸå7ŽPkŃétj°Ņ¬Y³z•M\ūjxXŪĘTóN@@iiičõzbccÉČČą«Æ¾bķŚµtļŽ{{{u<Ņ©S§0Œ5õ:š7o^éF¾yóęüųć¼üņĖĢ;—eĖ–ńŚkÆĘÖā÷Ž{ĻlūŠ7Ū–7ś“&Māµ×^cåŹ•„„„Š„K—J7ē^^^j‹FBB‚:«TóęĶćwĀZžU)..®2ਘoÅ}kŚÖßß€ŠŠŠJyīŁ³‡¤¤$<<}:3fĢąŌ©S<żōÓsāÄ ž}öYFŽÉ”C‡ˆˆˆ ’ž•öŸ³³3Ė–-ćāŋL˜0A]gT,gÅßccc±··ē×_eŃ¢EDFFņĒšÆż ;;;ĄŲ‚łńĒ«×SŚŃŃѤ¤¤šņĖ/sźŌ)µåIÆ×S^^ĪK/½D’žżÕ Ė}/„’4–ƒµ€ĆZPQ1©.h©««€XÖx•––’‘‘Įć?Naa!nnnŒ?{{{œœœHLLäܹsDDD Óé(((°Z«fź§ģīīN`` ZÓmŗø4k֌““4’’’Ģʐčõz³®¹¹¹ø»»«7ÄgΜAÆ×£Õjłī»ļHNNfęĢ™fAPff&¾¾¾¼ųā‹üüóĻ}śP^^Nll,ƇgÕŖUÜ{ļ½€ńf}޼yj:&æžś+ ,`Į‚€qߎwß}ŲŚŚņÜsĻ1cĘ ęĪ«ĪžvĻ=÷Š­[7³Šiv芁:päČn¼ńFuåg™9s&[·n%!!A-ć7ŽČ /¼ĄŌ©SYøp! .Œē>}śTŚÆ111l޼™eĖ–ńż÷ß3bÄu]yy9åååj¾–ß#S¹üüüx蔇xė­·xōŃGÕõööö<üšĆtķŚ•żū÷óČ#Š«W/Z¶lIff&åååLŸ>ß’ķŪ·³}ūvbbbČĖĖ#''‡ķŪ·óŹ+ÆšŹ+ÆØiN:µŅžBˆĖ€£ŖŸU#֖_IŅ ˆµšFƒĮ`ÖB”Õjyļ½÷Ōī.S¦LįĆ?¤gĻžtźŌ‰ääd&NœČ’ūßJ7š‘‘‘h4’’’ TĒ“˜ŗDDDĄŌ©S՚m0Ö4:;;«;/44”’żļ“hŃ€×^{÷ߟ={öpŪm·Q^^ŽŸŸwß}·ZīI“&‘’’‚‡ĀÉÉI½ŲWü¬ÆxĆĘZś°yófˆ:®¢(j Ijj*~~~:tˆĮƒ³nŻ::vģHxx8GŽįŁgŸåńĒ7ŪĻ›6mbÜøqDFFŖÓŚĘÄÄŠ®];Øv§ #11‘^x3fT*ÆÉųńć™>}:eeej_ņŠĒŲT›:yņd-ZÄć?ĪkƽFAAgĻžeŌØQ¬X±‚N:Abb"3gά4•([\>Ģ]wŻEóęĶÕV²Šū“Ŗn'¦ß‡ FėÖ­9pąįįį“lŁ’C‡±téR"##±µµ%++‹ĄĄ@ ŃjµźĄŌI“&1wī\¦OŸĪ³Ļ>«ö/7ż_żŌt¢Øź¤Sq}mҹT|Tl˜^÷ß?Ɔ #44T½™:t(/¾ų"QQQź²’ūß$&&ҽ{wµ[čW_}ÅņåĖIHHĄĆƃ‰'Ņŗuk³n£#GŽdɒ%=z¬¦3eŹ"""X³f Z­–ČČHFŒ^Æē`ōčŃDEEUJsžüł9r„ČČHuŻM7ŻDdd$įįįčõznøįÖÆ_Ļoæż†F£”oß¾„††JHH«V­Ā`0бcGFŽY)€§žzŠ€€233éŌ©vvvźŌÜ`¬ōyśé§¹ēž{ˆŠŠĀĘʆĻ>ū ///³ōžóŸ’Š·o_¶mŪ†««+ŃŃŃ 8EQX±b?żō†ńćdz{÷nRRR(--„k×®¬_æž+VąččČ]wŻÅęĶ›qss#**Šoæż–„„ŹĖĖéÓ§“ś9„⟠¦ąĆņUq¹éwÓżAC! €X»Š;88ŠŖU+rrr(,,ÄĻĻ=z0kÖ,z÷ī­ŽŲ-X°€¢¢"~śé'öļßOūöķéÓ§ƒ¢££ U/ˆÆ¼ņ ‹-ĀÓӓwß}—¹sēŖē̙ÁHJJ¢gĻž¼’žūjWī»ļ>>’üsuń}÷ŻĒŖU«8vģAAA”••Ń»wo¶nŻJnn®ŁĶo`` GŽa’žż„††2ž|üüüšńń!::šV­Za0 !::/// C„õļæ’>=ö‡"::š¤¤$’““Q…ČČHČÖ­[ńšš °°%K–ššĆ³fĶ>><ņČ#(Š¢Ž94hƒ žČ Ę.ćʍS’®øĪÄĘʆ±cĒ2vģX«ŪEEE©“K˜Ź«ÓéĢ–[¦Ū·o_śöķk¶<,,Œ°°0³ķ;vģHĒŽ+åIdd¤YšÖŹ®Õj¹óĪ;Ķ–5 ų«ÄŌĶr½ez±±±ź,cš×ątÓyĢņ³™*!ĀĀ˜9s¦ŗŽŌ £(Š:{XuŸA!ž Ŗ >jūŅjµfA†µū„ś!å JT5ˆ³ŗī –ŪZū»©,_¾œżė_¬_æ^ÉźjQEķ†uąĄBCCÆj~BTTUK‡e­‡å2Ė÷^kAHMĮ‡å«bšaśŻņ§µĄ„Ŗü„BˆkåµŚZ¢Õj+żnł³ŗV’Ŗņ«Éµ€Ōf§µ—åv–i5•ŅŅRf͚Åm·ŻfÖ„¢!ķŲ±ƒ+VŹž={HOOĒŻŻ-ZHŃØjsbŖøÜTĆaŁ{„Ń®¦źĪEƒ kó”[žnķVń§Bq-©®»•µ`Ćō2u³7ż4­·L»IʀT׌Q]ĶbUĮˆµt›F£į§Ÿ~¢mŪ¶fóå7¤ß’wß}WżŪŽŽž—_~ąŖå)DEµi޵¬õ0ż]ń}×bR]„HM‡i°“é§µ€¤¦ó—µæ…BˆĘPSĻkĮ‡åĖĘĘĘģwųkŅžš‚ŗÜ Ō« VUĮGU]¬]Ä+n[1ĶæūÅ»°°mŪ¶qöģYœÕˆ ŃXŖŖ©®6ÄZ3mÅ÷Z¦ŻT¬›Ŗ >,ÓŲÓĖZ0ņO>w !„ø>ŌŌņa-č0¦ß+.³|UÕS¢bž5–ńJŠ?-/Ī/ÜÖj+noJC.äB\]ÖĘtŌ„&ÄZ b™nSŖjܙe…ˆeŠaz~„åOkHuAˆåļB!Dc©®‡ƒµk½e°akkköÓ21ż“Ö;¢®÷uī‚UÕ޲µĆ²6ŃZķbuŻ„WGuM±–'ƒĮ ž=LŅŌ7Ō”žÉµŅ ¬w½ŖųŖlTõŖŒX«@‘Š!„ךړ'2d IDAT|X¶¶¶”——cggWå=¹eÅå•Ü\ń tkĒ?ü@NNNµ}Ŗ«R1}!ĕ³Ö/ŌZ 2zōhÜŻŻÕ“‘éeś~šFS©?čµxXž]ń\U±"Ähčt:³—iYÅ@¤āł¬¦éB!DSØnÜGU­vvvŲŁŁUjķÆLTL«āuƾcAė€T׿ŗb²`ĮŽ;V—¤…׀®]»Ŗ'";;»J]Ą¼9÷Zm©jüGÅóTÅą#55• 6Tź~eY‰R]ą!Į‡BˆkAu3[V×kĀ„ VÆłÖŅ1]ė­ŻŌF½Z@,ĖnWŠ¢ąč`ĆšžŽõI^ŃČāóI9[Lqq1EEEŲŪŪ£×ėĶjBL¬Ųź{ŗŚ¬!ƒ NGYYGe޼yM]\!„¢ÉŒ1¢ŅĢVƒĮ`5©+š†×Ś…ŻōŌ`[ m]꛼¢„œ-†³ĘYŚ Ńėõ888Tjfµ7bŁDŪŌ¬µ|X’a­ū•‰ĶµńY„Bˆ«MQĄ`0^ēKKK±µ5†ÖZL¬#U©É±vQB\Ÿ )((P»!U >,gŠhØZ«ÅŚLX–3_Uóaņąä \]lšŖŲB!D£9t¬€_7f ÖŗjU|H”å«>×’zĶ‚US·é -ÄõÉ€˜ŗ]Y¼V^^®ĪUqČµŲ «ŗ±j[@¤āD!Ä?]II ¶¶¶fćClmmŃėõźußō²ÖśQ 2 –µ.XuįŁ¬%>ž­IO=BQaĪ•IqŠŠŠ(,,TæĆĖ“PCŌ€\-ÕuòœK!„ĀŲboooõ™ +­MĀR×{mĶ›XW]­b]NŻFrļ£_Ņ28²¾ÅB4Ӑābć€ō’’ŹŹŹĢŗ*Y›¦ļZbm^k"¼ŅÖ”ŻiÕ¦kC[!„hR„„„VÆłÖ®ū–×’ŗŽ Ō+©©vQŌ_óPÆīĄ}­Ö†ĄąN –ž½Ķ[¶k°ōźŹÖ΁ę-#š,’æÓ,X¦ą£āÉØŖąĆډčZPÓ4¼–!¬«É÷½ĶMS\…’ !„Æ¬¬ĢģšozY>ÓÆŗ)čk{/P§ÄZ¢UMĆ+źfčø'xü?kp÷šæŖł<ųŌÜöĄū ’–½ƒ3Ļ/ÜĆ ‘Ó$½ŗŅjmx~į^†Żųd“ä’wdjł(..VƒÓÉČņŁ–Óóš\ ß’šĪU–AˆTœŌ#A®z>®ī>xū¶j°ō|üŪąāźÕ`éÕU3ŸVøŗū4YžBaMU=*> «!Z?ą ŗ`™2“6DŌƒƒsćäӀ-,Z­ vöN –^}Ų7Ņ~ū§(--µŚņQń‰ą55Ć6%k51µi ‘óVŻiµ6<·pĆĘ=qUó iכg^ŻIDēøIÆ’©Ģzq=Ž~m$½ŗźuĆķ<łņ¦&m9Bk¬]ó«{o}[? ž³`Yž“ģc}„7#^͉źq#ēĪ$rģšf³u}ßCꉽ¤„$ØĖlmķé;ųΜ>Ą‰£Ū±wp¦ĻĄ; lŻCy93S9°gēĪ$Öŗ Ž®ōx'Am¢0”ė¹˜™Ā¾?r!żø1O;zø°h“6¤§fǦ/(ĢĻVÓšoFhūžl[’ !Ὀī}.®Ždœ;ĘÖõŸ’)­Ö†žC¦Ņ2ø3ŻūŻJaA6¹Ļ’°g…šVxĒčŅ} .®ĶČĪJc÷Ö„źē kߏ­"9uüOROīSßćā֌˜>·•Jzźa"£Gąģā…-7 ›Ą©c»H=µæŹżŽ‹®½ĘćźęCž„ R’wspļJ[w&¤]o|›·UÓKŲż ¹Łétī6Š‚‚l²3OÓ?ī>llķŲ¼z1vvŽ“ļGŅ”œ?›d¶Æ": ęčĮ \H?fvśŗ‹ĄÖ]Ōć°wĒ8:¹ŽoßVjž‡ö­äbfj­³0WZZZ©å£.Ēµ4ŻņUŻ€tƒĮŠÄ„½>5F€ĶՕ™i¬ŹžŖŲ;Čó±„×&ĖĄ£āµæŖė}ļłÆčIčUͳ„JK :néiGĢ’6Œ¾ł9ļ_ĶW‹T—¶īĢšńOńŻgO Ńhøėį%“ ļIž„ ōŗR:v†g³–}ņx­ņwvńdŚ“ßįŪ¼-yY”•ѾKł¹~{g¦Īü–ĄąNä_¤\Æ£}ēĮtļ;‰÷_½‰K9ēhŌ‘Ń7?‡g³ōt—rĪįäģID§„wŒåy£ŃŚŲ2|üSjŽż‡ÜĄ‰¤j2xŌ āĘAlZµˆ€Ąö ’łYfH‹ Ž ’ł—2ŌÄŁÅ“iO}ÆˆŁqČĻĖĀĪ΁”—k^}›·Uóæž$Č05½VW bm ÓĻk!ų°Ö,\SŅē­ŽQĆšńoĆī­ĖĢfókŽ2‚šŽ7°uŻĒźwŒƒŲƒŪvcēę/)-)$ØuzōŸŒ›‡…łIK‰g’®Ÿ)-)Øu‚Ūv#¦ĻĶxxPŸEźÉżģŻž=:] ķéŃ’_xū¶¢° ‡# k8øw„Yѽ'yšō“#ōx'Įm»QZZČńưwĒ÷“ ‰V+šUQąčģN߁wŲŗ3z])i)Ų±ństŗlllé3čn4 Ū6|J¹žÆA¶‹Œ„yĖvÆ øm4aķūŃ[[{žXū‘پ¬ČŽĮŁXiÜ…ģĢTvÆąlź!śÅŻKpŪŗö¼‘6a=(ČĖbļŽļqqõ"¦ļ$vnž’öŽńΦfŪśOˆīuN.žl[’I„}åčäĘö ŸU>}oĮółå氏½Ū {’[ÕżÖ¹ŪhZ¶źDQa.»·.­õ1Bˆ«ÅZo‡źĘ|Z^oėrpEÓšV̼!»b”ē“v*V!Q8»xRT˜ [E!¬ClķŠėJhj¼ œHŚŽÆ[Ś„÷䥎ßXśń£(Šg/œ\k’ąŃāŪ¼-›V}ĄšŸß@Q ø{ųS^^Ą€”÷܉mė?į·ļē ƒFN'nĢc ’T„@§ē€ńŁ;÷pģČģģ¹ÖR[w¦UHWNŸŲĖėĻÅ2xŌt¢{O`ÉŪSČĪLSoš·Œ`šč¤„$šŁ;÷PT˜C‡.C˜ņąbŽx˜Æ?ȹ“#Ä’ł ]{ŽHTĻŁ·ć¼¼é1ą_œ<¶“Äė°³wāõēb¹ēŃ/°³³gńĀ[(*Ź­r?ōč+C9oĻAVF †A¹”sž­ė–ppļJf<÷I‡6ńĖŅ’)C}«h¬ć“wīĀĮĮ…Ü쳇Dל8čy _’6žžkyÓģ8”Ź9øw%³^ŚĄÉ¤üšåcžy™µN_Tf90»¦–k„ėUu¬£,ŸŒŽˆ‹0†ŒÉ„œsÄ’ł³ŗ¼Wģķōģ’/ROī#%y·ŗ¼_Ü=“nŪ-kŌ&ŠiO~‡b0p1ė4AmŗŻ{©§HO=T«ü£{O`⯢( Y§hŃ*’Ȯƣ·óGŚwŽćöi•qŠą¶Żˆź1–a_Øß_€>襤(7ošł‘Ÿ—I3Ÿ ŗÄŒAkcĖī­KiŪ®×_ž!*Žq13W7o¦=õ޾­Č攁#‘Ń#mߗO޾ƒņr=žatė3]Y1;6} €³‹·Žū6y—.šĒŚčŃ2!į½c…HD§Al]æ¬ †;ü¶}Č˽€NWJD§ĮxxšķĒ3:v¦Śm“× ·žv˜½;¾ĒÕŻ‡įćŸ" °=]ŗŒ“ll[’ ½b§ąėצRŅgąx6ki€tė=‘ w¼Ré8ģŻń#ƒFNWĒžtļ7Éx,.œ’DqMØ8棺 ®üś_臘ZĘ+•|t+Įm£ iכCū~ ]Ē8}b­C»Ó¶]o’m øm ™Nr)ē¼Ś-čü™£(Šń¦¢Ø0§ÖĻŃjmˆź1Ž¢ĀÖ­xSM#ļŅu›čžćŃėJYóĖ’©ė7¬|—^7ÜNǮð³sT€­ė>įŲ‘-čt%ģŁö?[w¦™o0)É{ČĪJ„¤8€KŁēČĪś«?¦ĻD4-+æŸÆ~†# kIO;L›Ė5ikł?:uIÜØ$ģž…ø1accĖŹļēó-+&;+C¹ƒYUqs÷CWVĢÅĢӀńųž½|3TT˜«Ö@–•U™Ž_Ī6ė–V[¦ćPXĆś_ß¶zŹJ ?ĖJjõyDĶŖjńØ®åĆņ÷kAUżR«j iˆņOÜŹ±3 čk€“»\qŅ”Kœ€h4‚ŪĘpāŲE”{ß[Šjmųąõ[ŌÉ­"9—vøVy;»x2vŅæ)*ČåĆ7n%ć|2æ€0ŹJ‹°³wā¦) Š••°äķ)¤ŠĒÕŻ‡ūg~KļŲ;Ų·ćΜ>ئ×6¢ĒüĮā7&QR”Gۈ>Ü÷ŲWōč?™Ż[—ņĒŗ%ü¹u)Ͻ¾‡ć‰[łö#ćDe„ĘļäšńOćķۊåß<Ļ®-_cckĒ}Dx‡“ķNJņnÖ®x“ĪŻG;ü!ölū®„ŲįāčäĘ’>‰ĮPĪļO„]ĒX&O}‡ÕĖ_gזoĢZL*jęDۈ>ŽæšÆ?|E1ąä쁓³óg÷&vŲ4n6Ož{'gRTjI‰ģ:œ„Kåō‰½hµu»Dŗøz1ęņqXüĘ$2ϟø|Bѕ³š…ōt7q£åĖEÓ8ulW•-9BŃŲŖp^]šQŸW<½āļ 959q+`lvćl+mĀ{rhß*Å@ū΃Šh““ ‰ęÄŃ€±6IQ tļ{ žĶZŌ9_oæÖ8»xrGWśÅŻWļ4ź|ųųµĮÉŁƒä*Žƒø:,§Ś«Ķ”»×ZšaR› ¤!ŸeröōAJŠņmßW]ę†g³–¤$ļ¦}…AŌ>~mpuóęÄŃķøyųp>żÆn‰é©‡j]®]†ąąčŹĪĶ_’q>Yżœ¦īŒįąźęĶŽķߑv*€‚¼,6žž]zŒ3KÆ\Æć»Ļž ¤(€G·“yį$Ķ.w§ŌėJ).¼€”\OqŃ%Š‹.Q^®ĒŽĮ™ĪŻGs&å»¶|­¦·i•±õÅŌéRĪ9vlüwOzÅNĮĆ«9½c§p2i‰ÖĘīø„—ƒ®Tͧ*÷£©Ņ¢øč’ZAQR”§¶œ—–R\t©R·{#a÷ r³Óė\±Ń!j(Ž.ģŲü%™ēO¦ćp\Ķ_Wf¬œ*+µžæB4•Š×üŚö|ØļõóŠGö]­›‘“Sń”–ھ!ķzagēHŅįMœ=}ˆö«5KĪ.žœ8ŗ €¼ÜólXł.^>A<<{9Q=ĘÖ)_OÆņ/YļŹćīé_åśÜģt<<«ŸJ·“ŌxĮ±µsع<ĶZ  p÷ōĻø÷Ń/ÕWėŠīĘ}_”ėČʕļQRœĻˆ s(/×±ęē…5¦_µæü…9Œœ0‡I÷¼‰‹[³+JÆ.<š™ŽCF [ІdtŌ4ķŽµ|˜X;QVˆ\)ƒ”œI;šš ĄĒß8ĆRxĒ”呜ø’6ųś‡lź6z9É8g¼A2ęńz£ j ¶ [jyłŁ?Ē’0[nj™mŌŃlyIIA„Ļāģā©ŽĆØJ@`vvŽœ:ž§Łņ‹R̦ŸŻ“jE…¹ōx½cļĄĘ֎•?Ō’Ł*YNa0”ÓēšłŌoŚŽĀü‹õĪ?Øu’m¬wBŃTŖŗöƕ=óÚ›Z¤”oDŹĖõœ:¾ oß`<›µ$¼Ć2/œ$ėĀ)¬Ćݳ9-[EŅ&¬;Šbąä±]ź{×’ś6æžo.N®Lŗē-nŗ}A­gQ1¦.Q•×/¾„%•×_®-lČ©iķģQ¬4ŃgœKęčĮ fĶ÷E…9œ8ŗ;;G2Ļ%«Q}åf§³čõ‰¤„$ÕcӟłµQęü°µ­ž8ˆ«£¦fW“k=𨨪ņ_q,ÉGM-·ĘVšŽ7rb'ķ }c+Hė¶1äf§«Ż7Æ^LNVżāīå·—ąŁ¬eņõø\q’WEĄīQEÅIa~6:] ī^ĶkĢĆŌaSCāée,{ū΃Ķ*M&Żū&€Y„IqŃ%6­zĻf-é;čī+nµ-ČæČŚ_žÆę<4ū'¢{OØwZõįį%'BˆėWU×k×É+½v6Ü܆4|čńĖŻ°BŚõ"“C?ŽŲĒ@“‹H«hĪ„1ć”( Ū6|ŹŪ/ '=ķ0ŻūMRg—Ŗ‰©yßŃÉĶźś¢ć mkA†ćåī¦&ö†PX˜KiiKŽžRéõÅūSͶõ £}—8.¤£E«Hµ›Ś•ČŗpŠEÆMdõņ×p÷ōgŹąąXūżõUÓqWGMAĒõŠźQ•ŖN  ł™Žł+±wp¦MX¬'õä~ ó³ÕnXĮ”1jėĒT-Z8‰ćGž ]d,ӟ]a6Ę«&¦Š“Ŗŗó˜‚kėKŠó±«Ek,µÜG¦²˜ŗ@™ŹĖINÜĘY‹q-‡ö­Rßwüˆy M}l^½ˆåß<7ßł:7ßµ°A§ń­Ž©uH*N„×£šZ<Ŗ[^WsV®§äDc·Ŗ€–ųś‡xŠŲ/ųüŁ$²³R lŻß攜HŚaõż3SYņÖ rč7ųžZåYp¹łŻĖŪz ¤©[‚©ÆqE®nŽ—·iøŚÆ‚¼,\\½°³s¬qŪ7ĶF1ųęĆGŠėJvćShµ6W\ƒ”œM«±yõ"¼|‚č5“Žié/Ļ$Vłó˜w;),0Žńņ¬w^¢~j[ūq=ŗŚŸēbęir.ž”MxZ‡vĒĘʎ£7b0”sōąZ…tÅĒæ >~­9‘“Żģ½y¹ēłō»ųń«988ŗrŪżļ[=ĻXc«QeÅÉå kĻ pttE§+«ĖǬ–iÖĀ};°Zq²oĒfŪĒPČbąČ‡Æųœ„( »¶|Ķ›/#-%č^7;üĮšß؊‹«?Bq-«©Å£!Ɲ×T¢±ø Ķ8wœ¼ÜóDtDIq>§“÷ØėÖŃ"ؾžmH>ŗŻ2)UQa.驇pu÷©Õ…-÷āYteńµļoõ¦_WVL^īyZ‡ĘTZŅ®z])ē’kĢĒ’©¶Pkc>ėŹłō£h4Z:tRķūŪFō!¢Ó@vżń ē“Ł¹åkü[„Żė&³ķ Cgv1I¾<ĪĘŻÓļrZĘī_66µOÆØĄx#d ÖLŚEĘØ5•9Ļ Ó•ھ_•ceL_†ŗä/Ŗ÷w 4jćj#ɉŪpvń"4¢éi‡ÉĖ=[nµZ¢ŗĒ„™&ΰ,Óī­ĖXłż<\\½čŚóĘZåYŸT°›ŗ^¹y˜O|aļąŒ½łf—»R—+i<¼jžÄæE1}oįąŽ•ģŻn|ęO÷¾“¤¹Łgłäķ;Čæ”AæøŚU@UÅP®ĒÖ¾ņõĄr¼Ī_XRq"„ø¾]ķJČk"Ń_ž²Ö4šø¢äÄmųų·!éŠf³ńGŒć@lmĢęÖwrö E«HõoWw‚:•V«éõś2Ž$¬ĆŽĮ™‘ŸQoˆ]¼š ąąŽ•ŲŁ97ęQõŻ{޾­8œ°Ęlv¬Ś2Õś_ĪĆÜģŪaœĆ?nģćj’b0vōö5²Ōh“Œœ0‡Ņ’B6®|€Mæ¤ūøY T\”‹«»:}u-+­B¢Ķևw0>,ėņ`ҲŅ"ōś2|š‡Øū©¦–šK9ʛ±ö]āŌī ]{Ž'²ėpąÆ. z])‰ ėpptaä‹ćŠÜ8˘¢()ĪĆĒæ\Ö¦„HKõ=¹j“•O”¦ü:D åčåŁœĄŲ„T§+”s÷1dœO6›RŚ’©uĽ–- —g\ŖŖŪåŌĀ.Oźab«r¶Ā¼µeŗ(YVšd^8I¹^G‡.q5VśŒøiŠ¢°iÕūģŲō%ÅE—Ą¬—6ņčóæsóÆ“—{žU?¾ZÆ}rb/īx•GŸ_ÉģW¶accKźÉ}lßų9>~­yrī&ž½œ§ęmį”Ł?Ńė†)€ń‰¾-‚:²uŻĒj \aA¬żwĻęō|W…ż¶­Ö†GŸ’™/®cņŌw¬–ĒĘʖ;üēīaś³+xņåM śéi‡I<°NŻ.õÄ^üš‡2ė„ Ģ^°­Ę±6ŁY©œ>±AyņåĶĢüĻZn¾k!+–½HnöY³™¶Öü¼¢ĀzĒN±zNŸŲ‹—w O¼“§ē’Į Q3¬e+DƒÓéŹhę„­YMų‰¤ķ(Šoß`u:Y0¶ž&'nÅ×?¤RėGPė.fŻvĀ;ʐu9pØÉįż«)/×ÓsĄm¶ī¬.oŚFƱ#[(-) G’É“ø<㕽ƒ3†>€¢(Äļž„®_­šõo£ŽĢŪŁ;QRœĻ‘„µø{6gČŲ™j偭­=ŗTßß6¢ķ"cٳmY)—¤/ĀĶƏ~q÷ŖŪ™ŗł·0VĪŲŲŚUŒ8:¹©3Qøø5£e«Hr³ÓŃėŻĢL­°¦ „ŚLrér+V§č‘j>“ī6>Ŗā¬`‡ćĒ”× ·xyę1€6a=Ō’Ó8BæĖÓµ7ä¤%Bq½ø&ś®œ:¶‹ß|…°öż),ČęüŁæęĀ?qt;gNäŲį-fļ1ŹŁ½u©Z£n’xp®+Ž" Ø=n~;²…›¾¬rœˆ5ŁY©¼·`ż‡L% °=„%;¼E}Zoa~6ļ.ø‘~q÷Ü6­Ö†-k>äuS—„¦s!ż8›W/R,“K9Ų¼z‘YĖĶ©c;łõsiKiI»·.S/Ü+–½HŚ©żtź6 7w_ŅÓ³yõbµ/µƒ£+›V-āu›å³uż'ŲŁ;Sq|ŦUļaoļˆĖväfŸåšžÕV÷¢(üōõ³“ļ2Æf-)-)d’Οزö#³ērüšå†Œ‰‹[3².œāŲįĶ€q.żō*¢öÕāi łĶ[FPRœĒŖŸ^ćHĀZŹŹŠĶo^ĢLåŻłVŽĆĘ/Ōm–ó<Ćn¼„«»/3N›GB\MĪÅŪ·³^\F£åÕgŒ­ …9¤§Qæ«IXGūĪqfŠn¾ū ¼¼¹˜‘‚>žmø˜™Ŗ>ż&—rαaå; ó8=ż#ēĻ&įģ≇W¼6‘Ō“ūųķūyŒæm>=ż#Ņ“šōn‰³‹ŪÖĀ™”õŚ)É{hßy0³^Ś€VkKüŸĖYõÓk¬üa>Įm£‰ž ŻzO ?/æ6ŲŁ;’v*žK9ē5įŹJ‹X’Ū_• ;6~NŸw2`Čżü¹å ņ/r!ż8%EyD÷š@`pg<<›óÕā­žÓ;vĘÄ;^#/÷<łyYųś‡`gļÄ_<­nsśreĻ蛟£wģ¼¼Y0»wµŸs’®åōŗįvnü×\śŗ Ɗ‹.ńĖŅ’pÓķó±wp¦¬“ˆÜģt6®|—ø1ńŠģŸĢĆ«H=µŸÓ'ö ( ĆĘ=I·ŽńņäõēcĶ®Bńw§QźŠĪRq~`Ó“u:„„„STTDAA“&M";+G¦]Ͳ !ČŖ-YÄ'ęÓÆ_?šņņĀĖĖ‹f͚įå內§'žžžø¹¹įźźŠ‹‹ ŽŽŽ888`gg‡666hµZ4Y·”ĘTń!Ц§¹ėt:õÜõČ',ykŠ:ӛF£!4¢/‘Ń#šņÄĪŽ‘”ä½l^³H\^[‘Ń#ˆź1Wor³ÓILXĖĮ}æ«cĢBĀ{ѽ߭xy·¤ /‹„=+8øw„Y}މ£³;~3oź1Žę-Ū±nÅ[jk‚‡Ws†Ž…«‡/Ł—&Ó jķˆ IDATƒ]Ż}čw/ĮŃéJÉ<‚„ŻæpęōA¼|‚čŁ2ēŅIŲ³Ā,Ÿ°żiŪ®7GnT+iBŚõ¦ĻĄ;ŠjmIO;lµņ Œwé{3-‚:āęįG~^&;7U)ą‹és3‘Ń#Š•sśÄ^žÜŗ{gś ¾‡”äŻ=Xł9ķ;&ŗ×Møøy“žv˜-«?¤LWLģ°ilYó‘ŁLŒŗ¤K÷1U‡ØćčŅ},åś2ROķgזo䁄Bˆ&qčXæn4ŽŻ›5k^^^ø»»ćīīŽ››nnnøøøąģģŒ““S„kæ­­­zżÆĖ=€ B @ź€!„×»¦ @®‰.XÅÖÖwĻŖø„ח©3Ö!„B!Ž?*ńoĪ#ĻT=Ųņlź!Ž?¶K$„Õsuó¶śü“‚ü¬zͼ'„B4•T’›}–Ÿ¾~¶Źõ¦‡ß !ĵbŌĶĻÕc\•ė—}ņ8ńžÜˆ%B!®Ģ?*),ČįĻ?¾mźb!D­ķŁö?N’³Źõ¦AßB!Äõā€!ÄõęDŅŽ:M#.„B\뮉 !„B!ž$B!„B4 @„B!„F!„B!D£‘D!„BŃh$B!„B4 @„B!„F!„B!D£‘D!„BŃh$B!„B4 @„B!„F!„B!D£±mźŌ×ę?s(ÓšŗB4™ž]^ŠŌÅ¢ÉxŗŪŃ-ҽĪļSŲ°ėāU(‘׏žŻ¼°·ū{Œžø®[[--\›ŗB4*WW»¦.‚ا¬»ę5u1„h2AŽõ @ …݇ä»#žŁzuöÄžor p] B\MEÅzœī+ŅŠé‰ė×-cCéÖŁÆ©‹!D£zfžŽ+N#¢­wOjß„āś±ōēćģ?œŁŌÅhPr7ŌČ>ūßQ¶żyŽ×žļƒ—‡CS§J‰ĒsųæÅńLՖį[5uqŻ‘cŁ,ü`?Æ<Ū?§+N/éD.ƽ·y³{ŃÜϹJ(®gĶ< j!­·āFsåI8:Ś$=Ä?Œ³óßļvżļёģ„(J„eeeå鬮»–”—(,Ņ”Ó7ĢLcMżyė’æĮ šé²£øÖ;ų°Ģ/$Ų'G¾ü!©^é !Dm””–7čłVQJĖdĀńĻP\¢æ¦Óū;‘ä*łąóC¼ņ.F“»YÄK’·›_צ4IžsJxł­=üšŪÉZægwBgĻpÓȶuĪoļ žxi'O›÷U¶³Õ2zHöĢäō™ü:§+DS**Ö3õ‰|ųÕį¦.Jž»äSŸŲˆĮpmWņ\-|~>?Ō`é½ūÉĮėāø_ĖŽü0ūŸÜŲŌÅØŃö=ē™śÄFžÜ”©‹Ņ$¶ļ9Ļć/lm° a×¾ ĢśĻ6ņ t ’Žß WÉī„ JJ„Ö(;·”£É9šč‘-¹y„9–]§›‘?v¦ćåį@—Ž>uĪļäé<ŅĻZ]7 W ll4ü±+½Īé ј¬Õ é(½Īi%„z ‹悯(ĘWSŖKžń‡³ŲŸA×HßzęU9³.}ر瀫VIB¬7»Tżbµ³‚3›Ü‚&{nūÓkNwWN;ßm)į®G·õyߌ›¶—q÷cŪG4qżņŪBƒt̜8āöžß»GyžõĆ}–Ļ™ŒæÆ–ƾ¾ł—ˆÉdåŧóļ’ kQAq žĒ^vģ«<-ķ—V“ńÄ ūŲ²³|ŲūlŽQFKk'Ė—ÅŒø½w—sϟ·ÓÜŅé“ÜĆMĶ’yalŁUNS‹q€½¹œUQ-f³•{ßĪĶ×&ńķę*«»5ŃS&pļļ&¢PtGĮmŻUĪ?9Ž©GEõ“?øm’c»×’w w c§•ƒŅGł¹Ēf@ŗs_%ļ||€¢ŅVī}|;·ß˜Ź¼!Žķ¶ļ­ä‹õ'œŚžķµÉ,™@K['÷>¾ÆJäĖõ““uęĪ3Ģ`÷Į*Žx?ÓÉ771Ī›‡ļš‚Ŗ+Gōw[JųņŪNB‡F­ąĪ›'0eB·†ĢŲiįÕwŽ:Īo$=^ĻKo¤; Xnj^{fo®Źāš1)kĆŗE¬ŪXĄ[/.ĘU«ä±ēö²dnūÓk(«lC„”óĪKKXūCkæ/äļĻ"*ÜŻqÜ5 Y·±ˆgEDØ“Ü`“šĀė‡ūhēīæ5ū+Ł{H2%’°­”¶•šźßąćÕ€#Yõ˜ĶV' bIy+~n/÷¬œČ;g9]Ļ‹ĻāŚĖāxąÉŽÉŹKo¤RģĒÓœéŲ>-Տ¬Üņ‹š‰ńīeʄ²Ź6 Š[ā1dę4ŠŠd8mķĻk ®A?ģķ«k;Č/lbÅeńČd#öޟ^CtDßōø ¹Œł3Cųb}õ|½]F|ģ_&³4G˜9%čtwå“SQŻĪ‰¢fX~ZŚÆŖé · ‰¹3‚‡½Ļö½ÄFzę>ōƽ8ž×Hm}’cuќ0Öo*f÷*.X9ācŸĶœUˆ’­Īa|’/wŽ<žĪN+o˜ÅĮŒ6ļ,ćÜłŅ€(*må­³ōÓrćUIø»«ųäė<Ņ3ėŲ¶§‚EsBĒŪ{Øo/®æ<½ĮLHnĄ¶“Ęy³rE2ļ­ĪĘŪSĆ%K£ķ<Łüā›\{Y<©‰>ĖnążĻrųü›,žźōńXõYSü˜ä‹ĪUJž\YÓĮėļĆĖCĆŻW'āćķĀėO°?½†ļ,įĀs¢I枚čKZŠ~>ZŠĖZłšĖ\ž·:ŪIy÷“lfHfū‹—Fa2Yټ³Ģ1yŒæĢÅfƒ?Ü>‰ąWŖkõT×u PČXŗ0œ ßl,bźÄŅŗ\šzŃY³”Čpw~sU"«ĶI@«>Ė!+·y3BøčÜ(,G×‘ļƒ‹FAæ+_o($-Տ©]iOuƒd“(*‘b7z >v^{÷(‹ē†qμ0jźō¼ń~&k(bŅxć¤ŌūT“~¬ŽKĻ‹ĘßW‹»›ŚéQįŅ¾Ø“U z3ĘN ŽžŖj:Č9шB!'5Ń/¾Ā²Ķy…M”W¶ćŖUėå”UĻl¶ŅŠdÄßׅęÖNņ š ō×:÷žØo48„ėę–NjźōČåąē㜈Įf“,%åUmxyhHēK—…¶vf‹/ Å-46퉇{÷XČ/j¦¬¢ FĮøh/ü|śNj[Ś:©©ÕÓŲlÄĒKCL¤Gæk“ÉJΉFŚõfü¼]Fd]Ģ=ŃDeM;jµ‚Š ”īX,6ź åNM½•RŽ‹‹75£…¶v~>.TÕtPZŃFd˜;~Zj»¶õź•į°¦NZÕwy[»‰£Łõ ¼<Õ$Äz£Ń(Øo08”:µ z:ōf\4 §k؛ݫ°Ł`ņųīw{Kk'2™ w7Å-—µāźŖdB’ÆĆĶDo0ÓŚ&Ył;M’µĄĆ]‹FĄä ž|žĶ vØāās£†}}ĒūżņóqĮŲiįHfzƒ…Øw¢ĆūÆ7R× ēxžäāÖGšŖo4ąŖU¢V)8š]R)'!Ö •²§‘¶võ’°j0š׊ĖSÓ§h\m½Ō¶R)'6҃@’&³•Ę&#ž¾ZšZŒä6ąź¤šlh2•ŪˆÕj#$HGl¤'½‡E§ÉJumu zr9ń1žNc“'Åe­TÕt Õ*éŠ?ö”¶^OnA‹ _ob½P*å44hi“,-­Ņ{D&_-6›“Ÿ·—³ŁJVnī:5ń±^““vb0ZšóqA.ļ>!ūr_§ńo±Ś8ž×HMm:W‘aīøŅŲl¤¹U²6“¶™÷b°„2•5•¶råEqŽeĘN ­mųłhij6r4»«ÕFbœ·ćžY­6źzŒÕŗ&+µOi¬†éōweē~!€ōę¬@\4 īžķ4jéåyĖ )<ž½ģÜWé@¾Ż\ŒÕjćĪ›'8^>·ż:•»ŁĘŒ'Äbµq’­iżNJ{ģFh°«¾ČÅÓCĆā¹ażnwĶÆĘ9ŅŪ†»±?½šćy4·t:}¤BƒŻxą¶4§·aK1f³•Ū~Br¼·ŽŹ‘Ģ­ĢØu óg†0f·Õ%iœ7™9õĢØEo0£uQŅŠd`Ūž ‚ݸ(»^°2Ć@*ŖŪ‰‹ņt|ō‚»…³‰É~ØU ¾ŁXDl¤gæ×B„VšČŻSGU£CoęĒ=åś»rė )Ž—–ż>„&ś¢Õ*łzC!QaŽ‹ž•µāā¢ÄĒ«ļ„(2ĢÆLD&“īŁÕ—ŽćĶ2ٵæŠÄ8oĶ „®AOś±:¦N 6ʳĻ1B»„×¢RQPKŠĶ?–²iGĖ—ÅšÖ‡YŽI“F-½Ė&õ˜T f^üO:™9ŻV?•JĪŻæąØ-RYÓĮŸŽÅ-×§šžg9č fĘ'łņš]SģĆß^>@UMļ~"Yq=ÜÕüū¹…ŻmwZxīՃdļ®Hķē£åļĻÄM')HÖ~_Č”£µĢžĢź.ßg»Ųd²ņoqXF ·ŻŹœé’¶²­ŻÄ«’Ķąčń'—ŲųX/¾kŠć½RŗģWŽÉčćś06¼ņN{V9-æņā8fNä'w:–=ųWéļ…³C¹åś©įU™üīŗdžó~&V«‹Ī‰bÅņxīb‰qŽ2™Œ^;wĄó9xDņžHß÷™‘UĒĖoepß-i¼öß ‡!—ĖøįŠĪ[A[»Éi¬>žü^¦„pß-iŽå“RżųnK M†~ēæTĪJd\“—ÓG*6Ņ/ =\²Žf׹§uŅ|xyhšÓR×Ė”&“õÆ?¦„9ūčF…{HH«³ęŽGėwōx=n:•Ó‹ĶU«$,ÄmH“½æÆ¤hŒ¬zl6óf†8„‘ąęŖ¢“¢¦fcķŽpņ׎ŗ8_N~#‹“4&'CUM;~Ś>%€Ō§åS&ųóęP^ÕÖwćšöŌ Q+=ĄN]ƒž’­Īęęk’HˆóęšŃZ>ś*—挗ŸšļŠFæūi6™9 œ·0‚³B)Ælćķ²xóƒ,&$ū9M’Žž0‹é“ć…Æ÷ąćóŹ‹ćH?VĒö½,™Ftø‡ĆÓĪᣵÄDzņŲ½SQ«|ųE.ŁłlŁUī41­Øngżęb.æ0„RNbœ7}•Ėįcµ,œʹ Ā©©ÓóÖY¼óńq&OšGė¢tL2.» †ØpwT*9ßn.&#«ž­»Ź9o”¤øih2šĀæ%WĒ›®I"2ĢŹźv>ł:Hė¬Üö¬bRŖ?W_‡Łl#氉q±^xzhX¹"™¶•R\ÖŹo®NB©9MģĶf+o}ÅŅįųłhŻWŁ0MĶF^y;¹\Ęļ3ž˜HŖėō““v¢sU±rE2›w–SPÜĢõW$ą¢Vą?pż ‹ÅFiy+“'ō >Ļ8^ωāfī»e"!:6l-ećöRŽX•ÉSĶ 9Į‡•+’y÷Ól|½]÷±ēdU&ƒČpwŽwiŽOÕūöTņŸ÷3™5%ˆ ω¤±ŁČ›«2Łø­”“?‡‚,żXGL¤+.‹G©”óާŁlŻUĪĢÉALHöuoĆÖ‚uüśŹD F³ć¹ģ)żńpWóæÕŁDGx°¤KŁÕ󙱣¤•×%éÉ®•|ż]!ŸÆ?į¤`xėƒ,fN "6Ź_išßČ{«„ōš×_ž€«VÉŖĻsŲs°Š“™1YšSØÕ ¦„šč‹·§†ģüF>’ę~‘Ėć÷Os“ńź;Ļkdńœ0ęĻ ”­ĆÄw›‹9–3t²÷WēąźŖä÷揷§†²ŖvGlģeĖb8’YĒÖ]å,˜ŹøhĻ>ž •Gā8o–-‰B­ł¼ć?¬• G²hN(£…£YõD…»sÉŅ(ŽdÕ³q[)s¦“ē=dż™ĀŅ !Īó<«ÕĘĖoįŅó¢™9%ˆ‚āfŽłč8«>Ė!-Åo/V®HęĒ=äHī®Z%~¾ĪÖ»ēCaI«@zpV ņ^ϳLžZņŗĢ…&“…¦f#!A:6ļ(sŚÖd¶CnÜ^Ś'µģ7Opzi¤v· ”ŅæŁl6Ŗėōųx¹ōé»Įh²n‡Ł,iN”]/{œLXšĄneƒ±lI$|‘Ė/īćŽĒ;vnEUµŅ$>hóHiė0÷q9±Óū£ėį®F뢤„udŚW«ņg‘E0öœ·0Āa© ŅQPŅĀžƒU=^Ē““@šZ¤¤Ić¼¹ńŖD@RŽ”V¶±fC!ł…Ķ$óv/!Ī{P­yOfM Bo0³}o©‰¾Ģ˜Ō7ŁM§āį»&;&c7\‘Ą£Ļ—EĻfƒė–dzpv·%Yo0³iGQįīüīŗd2ˆ÷ ŗ¦ƒæĪ#+·‘)¤äŗÓŁRčēŹżOģphV¾Ż\‚Į`vŠ‹ńbļįjŅ .€”weŖ[<7Ģį–Ł­ŒZ<7ŒĆĒź(.keŃģŠ>‚Ą’yaüśŹÄAŪˆ-;Ė1-ÜxU¢ĆņÓs²ŗxnY¹ 73FˆĆŗ4Õķ˜ĢÖ~݃Ķf+×_žąPzŻtM"Ēó9QŌLUMaĮn„»ńžg9x{lµ Ō‘~¬ŽŹźvBĻĄB€ž>.KxDØ;7\‘ČĖoaē¾J‡²ncJ„œūnIsIJ¬¼.™GŸŁĆĮŒ'ĢØq;'ŠšÉ8^Oj¢/+ÆKv,ok7 )€““uŅŅÖÉÜéĮ¤&J׫ēó0cR &“•­»ŹIŽ÷vŠ}µććķĀ?yTJĻŹźvŅ3ėHŒóę†+ĖķsÆ)°Zać¶Rb½†åłP\ÖJ ækæ.ą“RżøüB)%hŽźZ=_¬?ĮīƒUüźüĻ #· ‰¼‚&ęNīWkæ_Åe-NīļætĪJ¤?tZ•#‹‘ŻüYQÕĪ[fõŁ6&rh!B­Rōш(NB+4Ü A£ŃŅåwØļ·ļ=?bƒ™Æ6rųh-µ §ģ]ößѵ¬w¬ĀpY¶$Š–6ė~(āÉīć¢s£¹ś’ø1ѐ ’It؏óp±Zmf\\Co܅«VIkūȄ ­‹R'ō‹żƒngŹö¬¢¢J¶3s¤lw3&;ŗŚć‰jź:œ˜~‚ŠO†”x§÷žŻBŪ܏ŽŪÆ>;æ“ÉʌIAN“-»Ņb  Nč¶Üvtt›Œ¬:T*9³§<čמĪ8–]?ź AŪĆ%3·™LśNvėž@ʘńIŻĻ•L&cņxŹ+ŪØØn'(`x ūv•5g¤’’ąėōŻIKõC©”;®Éd%'æ±ĖŲ­…Ž÷@­’÷yž¼=5Ć>†‹L&¹ęō$*܃š:){bĻļXL„óÄf³‘™Ó@D؛“čļŠ‡»šŚŗ”=ŠJ[±ŁlČd22²$Ź3ū Cį¢Q¢TŹÉ/jĘ`0[2į!n£>@;Ą) ö·Ł¤ õŅī÷y'Oōē‹õ'L·ßöqY)<œųÅ ķzi’ØRɱó“T?ŗcņ؎×;¾b¬P©Čd2ĘÅxņÄÓÜĪjµń쫇Č-hbb²KDą¦S±iGĒŗ‚ź@¤l£L +“ĮµæĒ”ńžügU&kæ/D.—“;?5vÓķ©ŖÖī`—¢Co4Ø]  ½w{°£=ØŅīŗWQŻīdµŲ†3{n/mķŻCxˆÜ6iTż“Ėeøhč C×±÷½ŗ®Ć©ļöąŻĮśn¶HėģJ›Mŗ¾ŚQåģŸ<ޟ W6l-Įb±±ā²q£šH–Ŗš“.ŹAƒŹG‚]0ȝUŽKĮeŸ$vF§•¾œ# TKz{hŌ ¼<Ōįø¦®‹Õ†Åjėć= Pȇ5v>[w‚ūœė8=vļ“~“(ōßGēūŠÓóa0EZc³ŃƒŠ»ļ6[÷ų³Å†B.s(:ķBYŲŁ<C­’sμ0¾ŪRĀ__ŚĻķ7Ž0+čOż=2\Įy(ō3V« ×Ęļ±čg'ģøj•Čdχ^übfNMĶF\µJ“.҃ RÉin™ėĢ™€B.Ć]§ņƑ[ŠDnAÓҹŽåĒrź9–Żm­±Ū;Nī£ėÅLē‰ö²fCēĪ0ÕķPŲĒ»eˆ—Ŗ½ļ# @¹\†F£tX…†Ā`“ 7˜ ŁĖWoܟX °cNģV6}×äļū­%żoÆś¹Ņ¹*‚»G[tĖĪp­ö‰ėÖ]ålŻÕ7?Ļ @^Ak(¢°¤…ęÖNGzk»ā¤ÓdĮb±į>Ź ¼‹FĮƒ·Oā’Ž<ĀĘ턤gÖqß-OŹŖ1 ĘĮ'œ#Å®`Óh†w/]»&¾=Ń”Šv 7gŖŅ®Z•#FĻ.$ēu¹Ėō·ķPhŌņ>ļīŽ‚ĻHīŲ±ūā²Ö~="z-m|õmG×SßŲ”©g\ģÉz>¬ø,ž½™m{*x䙯\·<Į‘Tē§Ęįłpо”öēY£žēƒ4‡”Ń6‚Zi޹ÅĻhģŒæ¤¼Ŗš:=ć“|“[_-%­““uā1ŹA8£µ* …柖‚āfjėõׄŽŲĶÉ qĪ1öy‡]“čՕ*īDq3i©Ż&H{ Ź‘œƒ»›Š…³Cłč«<Ź*ŚšńŅ8®·mfū‹„÷`-ļŅŚŲĻĮnFĻĢ©šå'Ć®1^ū®.JڇéReĻäÓ_ÜĻ@ĶŁl’°7Š}zŅŃ„1³–Ū?’Ü=„kĄp,ÖO‰½ļ÷Ż’ÖĒ„'ŁłüķåhŌ Ļ #"Ģ›ĶĘėļC©®ƒJ)G&“T•ņą@O’q&_~[Ąšļ łŪĖxę‘Yc26Õj…#ļ”2Ģ bŸŠŽĘ ętW· z3Ŗ.+æżł[<7Œ•+’Ūm@.^ĶÅK£‡Žšcļū¬©AÜuóĄ1]ĘN O¾øŸŹźvfL dŁ’(\µJÖl(¤ŗ®ŪżGŻußG{/•J9·ż:•é“yūĆ,ž·:µJ>¬x‹“Åīł0”Õē§Ā`4c³Łś ’ŸĻŠĪŖJčvzĻ™×~_ĄÜéŻEi¦N Ąb±±~S±Ó¶…ŌD IDATmķ¦“śØŁquQŽČD7¦M Ąfƒµ½‚ą;ōfG|‹wW¦……ŻÕӛZŒ>*MšķiüģŁivģ«t*&øu—df¶q1z›­»*Ÿ»»KB„]»:+…ݲ‘WŲ­„ŹČŖ'żXŠżāķ…«VŹäÕ³’¼ĶfshLķZ»įŽ‹ ×«„÷¼f³•o7#“ĮÜ鯮xŽómķ?¶¾QŖž0ŗ Į/ ūx² Ūž]5AN•Õo,ńtX,’fc1‹ļ˜ĢŠåńĢĢō®€x»āD.—’d*•œ«.‰cåŠd:ōf>]“RĒ“ĖdN)RĀÓ]Mk{ēˆj– †ė­ö‹#)*hZF›µp¬±Zm4·»ĒĪ)¶˜%žīĆ÷ŽŌPYŻĪy #øēwY4'”“ńņŌ8„wĄa93·Į‘=éTb·žšŗ€.ßéĢÜĪ™?p…äŗ=r¹Ģ)µmoĖ-ąH­ŽŽarr‹1v)RF¢HZ8;”æĪėSW†VĀōDēŖź#UÕt`³ŁœśćėķBqY+¹M%Š@ §}»ėŻp]iÓ3ėÉčS«h°¶ģē5W„3ĢœL&«ĆBķī¦ĀÅEIΉFĢf먃 Āaķ’ <T*9ŽžN5c0Z)¹{SW/ –½Ÿ)6äNc§Ėó”ØŁ)~c4ž~ZfNäūK©®“²ŖŁ[É“»$včĶN™¤*ņ|ČmpžęŪFūZ)®vøŹŒōĢ®wr?©·ŗlz36ʙüR9+- ī:G2ėX½.ŸĢœęĻ į”ßOvņ·ōpWóē{§’šąCś±:VÆĶgĻĮj&÷'6ŖŪ8ČßuT~ĮĖ—Åąé”fė®rö¬vhäż|\ˆŽšpŅF€”q#:Ā—.^„BNt„Gæī®Z%Ż;•“T?Žå4°zm>ŅkHIšq¼xŌ*9Ž1™äx Š›É/lāņ c¹ū·šÓ:?nūu 3§QXŅĀgėNŠŲläĮ;&1kźąY&:ōfĘÅxrąH «×å³}o’üxą¶4GŒ‰«VÉņ c1™¬¬ż¾ˆ¢ŅV:;„kęNhPßų ?-7]“„Z„`ż¦bvģ«ä²e1Ütuć“|1™ŗ…¢‹—FqåÅRõŅo6ńķębt®*G„ŗKĆiµŚX÷CłEĶŽ—lŲóu÷-čī¦būž VÆĖ§Ŗ¦ƒKĻ‹ęękœMł’|™4ޟ²Źv¾ŁX„Ž`vštUZ+_sĮĻ‹ž.u zv¬ĀĖSCj‚Tó')ŽW­’=‡Ŗ~ķ“0[h»2Ą e„ qŃR=¦CGk)Æt®Ó³ļŽž¬V…%ŻcšĒŻRĢHOėBbœ7V«-;»ćI*k:ČķņļĢŗŠŪrk0˜1-NŠģšŃ‘¤ŁöōPSQŻīŠ,[­6Ž’<Ąń wÖo*vš¤õģ—vķ:²ģ ™ēxž”‚7iœ“W«UŖUvdŚ:EĮ槚ž×Ńf³ńͦ" ŪóA&“1e‚?mķ&¶ōŠA:cGӕ ę§ņ|˜21c§„OüWϾ{yv vŖj:ČĪoĀŚkģlŽYę°ö[­6¶ļēCS×scwg©ēt[6ņ{ōżĒŻå•JJ»ēCj¢/ ¹Œ]ū+bŽ ö÷g·'ĀŠķĖd2żµfØźé>n0˜ła[)*„œ™=2ŗj÷|°§żžΜ•āŲøOīæ5M*¶§U˜78PĒ#÷LÅd¶b4ZйŖś »éš¤Qõ!1Ī›×Ÿ]ˆ±Óāüµ|Y,Ė—ÅöŁ~įģP§œłn:ūÓĢļļ«å”;&c6[1›­żfp qć±{§öYžēōæĪUÅŻæ€ÉlÅŅćX‘a }ö퉯·‹#{ŽŽ`–­Ō}53—žĶEēFa³Śœ“Nƒł¢/žĘā9atčĶŽÄżķ#“Éøģ‚.» †öZeŸĄ¾ G²taDŸöū#-Å…BĘĮ£µ}4Ģóf„°|Y¬#ˆ¼æĢÉJ„œoŸD§ÉŚå§ī¼žŠŃZ¼<4č°p™ą—ĮŽĻdęä@ 9?ī.Ē`4óŪɎēV£Vpł…±¼’Y’c/óf† Q+Č+l¢®^ĻóĻ9©Ųv«ßŗÅ““™(Ælćęk“ūĶ?RrW]Ē«2yāÅżĢ›ŒĪUʼnāfJŹŚxéÆsQ)å̚DzfϽvˆ)Øo4P^ن—‹“›čŅ…įlŻ]Ī'kņØo4ąā¢ąĒŻ’¶°¤½A²ņöĒw[JŲ} ’”_\]”ģ?R±Óā4ęƒ„‰ö›«2ćEk»‰›‡ų¤$ųP\ÖŹß’uI©~=^OUMÓŅ©éįƒ?oFė~(āĄ‘žöņR|Ø­×s<Ƒ’"ŻĆ®{ńĪGĒIŠ÷¦±ÉčT­»'aĮ:”J9å•ż Ļüė i©~6ļ,C„”sŻņx§mBudå6šöGYØU ‚\9·‡„Ŗ“¢ •JŽo­‘3­»Ź1™­ųiÉČŖ';æ‘ii¤$tģ]~A 3jy÷“lrņ q§²¦½‡Ŗyüži'„’Ėeø’[ŠÄŖĻs0™¬$Ęy©Č.—,fĻĮ*>Y“GaI QįT×u°ļp5÷ߚFr¼i)R1Ļo6QUہF­ąąŃZBu”Ut×IēCtøł…Ķ<’Ś!ā¼9z¼½Ń‚J%Ōó”¦NĻć’ŲĖŌ‰ųłŗPZŃĘžōjĘ'ł:„ū{dƖb F3•Õ\yü Aļ© ¾|J>«>Ļ”²ŗ¦–NGQŌMŪĖŠ,xyH ŠEs%oˆĒ’±—y3B0[¬8RĆŹÉ$ĒūčŠL&cćöR¬65µz.æ0v@į92Ģ}‡«ūµ.}ŗ&ŸŠŖvÜujvؤŗ¶ƒĖ/ŒuJ²c?ß÷>É&5їŗ=·ż:Õ±¾“¢Õю ›³Rib:Ü,#*„Ü©z𩤿 ł©D©”Ÿ2SņÉ\‡”2é(ä2ÅÄh$žĘƒe–nūn:’żH?V‹Édķh¦P ļ¹R÷ ÖŲl¤Ø“…óEžTĶĮŁ‹LÖŪåē£åŽßŒgvÆ Ģ‹#Xū}QWq2éxžāHGšMµJ² z0]d˜; f…²}o_W@dø;mķ ­æ__‹ld˜»“&ŻŪK²ņŖūy÷-œŠÕjć‹õ|·„…\F€æ+Ė–t‰¹Óƒil2²iG{WķÉ#÷LeמJ‡& ,Ų{7‘÷>ĶfĆÖ”J)öWēGóÄ ūŠĢ¦¹õtWc4Zŗ,6\µJV,gŃģī Ś…³CŁ{ؚc9 ä6“ÖeµpÓ©ˆŽšĄ]×÷ŲĖ—ÅRRŽę("ęĪĆwO”±ŁČś®{R®GīžĀ›dq<Ɓ¬Üt®*Ģ Įd¶¢Q+˜7#„]ŖČĪo¤ ø™”Dß«+•rĀ‚u–¶ō)jRÖ£/æ-pÜÆÆJģ3Ł^¾,†ŅŠV6m/ĆÓCĶ…ēD9ÖY­6ŠJ[ q?cß]n:»öWŅi’®ßy #øö2g!+8PĒ#wOįŻO޳ė@P…ĪUÅÜĮNŽaĮntŽ"žįźKāų÷ū™¬ßTŒÆ·‹£øeP€+mżøųųyk%ˆI&·~>.^.,[Éw[Šłś»B‚ݭ½īĮŽCÕ•¶ōq_Óŗ(łžĒR¬Vnj®½,ž‹zŒ €9Ó‚Ł¹Æ’Ü‚& K[H‰÷Įb±97vŠžīŚ‚³XFĖü!>ZĖ®•,˜:ōĆdÓv)ūéØ#ųypė ©ÄDz`2Yt/XÉ‹#ik7”TČśX@ż]µ އn¾& ¹Bę4Łčx½­¬ē/Š4ŽmńÜ0Ļ £½Ć„F­č£@‘Éd\r^4—ōŖčlwµģÉäńžL/¹ÕøhŗÕŪŹŪ{'‹ÅęØåÓ{bļå”į™Gfõъ¦„ų9„‘Žøj•’ęÅĶ}b;žzhr¹ ™l`eQr¼’łĒ¢~ŪĖ-h¢½ĆÄ“‰'łS2--€ė/O@o°ąź:°ēC\”'O’q&ĘN ĘN ī:uķžßMģwß”˜>)ii!ČĪo®īßrvéłŃ\z~÷s¤tÜF†¹óÄÓé4Y1ĶøėT}Š'Ęyóōū£÷˜šõvįỦ`ģ”Š۟‹;ɲĪž­m&4Eæ ·›ÆIā†+ĖdNŌĮĪoł²X.» Ö×e?µ§šį“J)ē×W&rżå “w˜qÓ)ū\‡ė–Ēsõ%Ņ;c(%ķä ž|üu‡2jū —,fŽĢŒF nŗž=\µJžųĆō>/ ¹¦gÖę.²_ö⬌N†é“qćĖo †•Ńf8“µ›ųnK1S&3¬`P4jŰ­·n:ÕOR@O„’’äšn«ź”YoŻt£;–B!ĆŻM5ØŪŚp&’½Q*åĆ®Æ¢Vɵō·}{¬ĆŒš~×Ūė` EķĢØE&cTUēĒ„RŽ»›jXĻ®F­ĄĆ­Æšq²Čdż»"ŸJŌ*yWßO¾óµbŌµ€ÜŻTż vTJłˆŻ7e2œč÷F.—Ęļ@×aø"aĮnD†¹³’H’cG­’wµ3ųqś»ļÅĶ45’¤!?wĪ*D.—±xn’ū×N ĆA&“ń»ėRP)å4µńpS³xn˜Ćœ>ź xzhųõ•ƒĒÕĮhōw%.Ź“m»+N*joŒvģ« iœŠą ĪZęĶ”ŗ¶ƒc9 §ōø›v””TŹ²° $Ī*D”±rE²Sąœ@0ā¢=łĒŸgćėķ‚æÆ–•+’™2aōīQįī¼šųlü|Ä\ ü4,_Kc³?sŖŲø­”ę–N.æ°oņąlaɼ0<=Ō|¶īäjõ¤ŗ¶ƒķ{+X<'oĻ‘Åćż8«ąTr*ĢŪ?åńg‘įī,žę”’^ )i©~̚äHOššąĖā¹a£«ŚÜESK'óg†4nšz%§ ­‹’Åsƈ=3ū'ųy Q+øéź$:;-č fü}]Y<7ŒŠąŃg}«©Ó ė7~M ‚Ёą“3X`³@0ī¼i¼CٱhN(‹ęœ\"ė–Ē;Õ§9ÓšpW³rEņŠ C`O" “Ɉ w?éēj|’/’xl–P>€°€@p–šSLvÄJšKAx>ŒB@ c†@@ Į˜!@ @0fD @ ŒBĮ)ĆŲiaļįź1i«Ódeļ”±iK §!€ą¤čYy»­ŻÄ+ogŒI»mķ&žõö‘1iĖŽÉlå ĪJ+? „"‚QS[Æēī?o;ŻŻ F ·=“•N“åtwEp–³ī‡"¾XbLŚśfcŸ36m vD!B@  I~Q3~ZeŌā¦S1e‚?‹ćyčõfŽe×ćķ傋FH։ĆĒj‘Ėd̜„B.£”ÉŲØŖéĄl¶1!Ł³ŁŹįcu46˜4Ž_-z3Łł“w˜HŒóv,Ø®ķ ēDV«³)āDq3yĶxzØIKńCė¢ģ³>"Ō½‡Ŗéģ“0gz0uõzŽf7éA|ŒY¹ ÄFy¢Q+č4YÉ/l"9Ž‡Ģœō3Y¹ ųx¹ęŽĶf#=³Žš:=ć} ŅQ[Ƨ¹„“øhOź 4µ‰ōÄfƒ#™uT×ušąCh°›ćzķ=TL‰qŽ„¾³ąēGī‰&ZŚ:™:1€öĘαtŪ;ĢtĢcŅ@Qi+å•mĢ™·—GīžHŚ~› V^—LX°qў¬ū”.“Ž#žžć d2Łł”WµóĻ'碐Ėxét­eńÜ0žųĆtGŪO’ߎē50oF•ĒŠåń,žFC“‘»ż€Ā’ć¼¹įŠ„AĻ#%Į‡+/Šcz ƾ“ĮĖOĶĆĖSCIE+¹'šė²HōĒż·¦±ņĶ…ū+Łu  ¹LʱģzīŗyMFžzi?'ŠšIēĆż·„”RŹyõ āc½Y÷C!·\ŸBbœ7’[ĆīƒUč\•Ü|m2’|)ÆjēĆ/r)­hC£QpĶ„qL™ YX²rųšĖ\źź (2¦M $’ķ³hk—,¼s²Ó9”Wµ³yG&“•÷”įĮņ błļ'ĒimėäŖKʱtA8‡Ör$«Žß\ĄśĶÅČ_o~ŲVB§ÉŹ£Ļīᦫ“ˆņ࣯ņŲ¶»„RĪ W$0cr o¬Ź$"ŌóEŠi²ņ×qćU‰„ėųtM>[v•£ĖøīņfO ¢½ĆÄ?’“Ή¢f¼½\øėę ÄDzŒŻ ŒaĮ°t !Ö ‹Åę°ōF.—9&ņ~®“¶™ėü“Čd2@rėņ÷Õr<·cŁõ(rź }ާsUb6Ū0vZ()oej×$Ŗ'ć¢½ČŹm`÷ĮŖAĻ!*LšxyØqwSćå©ĄĻŪ…żČÜPN·ąėķB^AĒŗ4ŗöž_~aé™u¬^›ĻµæŠG”QPŅ‚—†ü¢fŽe×c³ŚØo4 Q+ˆ÷ążĻrĘĢķF0ö“¶™ųlm>W]dzĪ"氙w•39՟”&$ū²rE2>Ž.dę6pżå üóɹ•µp$S²0–Wµ“~¬–{VN$6Ź“o·”PQŻĪKOĪeł²XŽž0 w7‹ē†ņ×§sŽ‚pž·:Üż^xż0ē/Šä¹Ēf“ļćčćgėņ¹ģ‚Žx~×^6®Ļ9tvZųvs1”n¼ś·46y÷ÓćüåiÜtu_~+Œ“¶›ØŖépģ׊h ±ÉHā8o¦N `\Œ+W$¬cŪž Že×óģc³ųķŠ$Žü ‹ÅĘĢÉA|¶.Ÿöß’X‚R)#<č]ū«8t“–g™Å­7¤ņևY˜LVvī«D.—ńę ‹yč÷“ļ+Į™‰°€`DČå2Ōjz£µbČmm¤jmķ¤®AϦeŽe‘ak_ŽŌldźÄZZ;śµD†¹sŪ©¼żaG2ėøõ†‡ ÓoæĪė ł€żˆÖ¶NZŪ:śŸ–ā€—†äqŽdå5’–*-kiķ¤µŻä“żų$_ī»5×ž›ĮŸž¶›?Ż9™@1y:‰ń".JŠ Z0+„c9 ,]§»•JAtD·Ę~ęä Ē’‰±ŽŌŌéėĪ]Nl×qvķÆäŠ‹āpÓ©˜7#˜·>Ģ¢CoĘĆMķ°xL™Ą{«³؟^CDØ;s»b0ü}µŽµJAk» •JNDØ{æēą¦S±d^82ÄFy¤ĆĖCCā8oš[:1›­żīąį¦ĘŪÓƒŃā8·ŻŖXŗ / “RżQ«ŌÖ뙐ģKL„ė6±eg9Ž3U:ßUœ;?oO ŽžÜ\•ŌŌu V+hk7 ‚Äų9Óˆ@ F„±Ó‚ĮhĘŪSƒ~„VƒžøŗŖˆ‰ōäīßNpZž_Ų̚ļ yę‘Yųz»šāæ£TČAå£WmßĻ׌I$Äxń—ö±s•c‚5Rd2†%Œč\UčøgåÄ>ėŹ«Ś),i!.҃ŪJ¹`q$:W%~Ś~·÷óqįńū§ńߏ³yēćć<|הQõ]pf£Tv;žųūj9’5p,„RŁ-$»ø(²ÆÉåŻėź |üU®#k–Õj“Rck!· ‰ć¹44PtķS× 'h€ śåĘņāæÓŠhąŗĖP«ś:Ź(•rģ²½Z%G©¶ŃuÉĮžØo4šõ†B~ŲV Hų¦®c\{Y<?æ—9ӂ qsl’ͦb¶ģ*$Į¾Óleę” ~ŲVŹ_žßĖķ7Žwl/83ˆ@ FÄ”ŒZ‚ü]ńt×`4Z0™,X­6§IŃpˆ÷ąŪĶÅtš¬Nšz=Žž|½]°Ł ©„¹\†ĪU‰»›ŠÜM¤„śŃŠob³į˜yyj˜”źGiEŪØĻOēŖ¢¹µ“ą@”m«K±ŸŸ±Ó‚F­ *܃w?9N[»©UęĆ/s9Q±Qž¼üÖĢ %*ÜƒĀ’ZZ;ńpW÷iW&“±`v/ž;}Ō}ü|0™¬RģŠ0ĘĄÕ—Žs²Xxø«Ų“½ŒÆ7rÉŅ(t:7‡šcµŚBCoR|xę‘Y¼öīQžõÖžpū¤įĢI`.=/ŚÉĢ·Ė ­©Łˆ›NEUm·;—Ķfć¢s¢ÖCūö …Œ'ž0Ļæ9Į“/īć™Gf9eĻœYD ĆbÕē9čŲ¼£Œß\•ˆL&Mųrļ}šæŸ–YS‚†}¼ńI>ł»ņ×īcbŠy'šøéš$b½Ø®ķąµ’„CoĘb±b0š‘Éd,™ĪŪe1oFŁłx{jč4YŲ¾·‚¢ŅVtZ%»V9yGCbœ7«>Ļ%9Ž›‚ā<ÜŌX,6\4 <ÜÕ|ųE.ž¾Z.æ0–ńI¾<õŅ~¦N  Ø¬•K—Fc¶X).mįīßNā;"…ŚzÉ/~b²‹Ž3Ü6ÉQÓ£'W_2Īqü@?W~{m’cŻŅįƛÆMbĖ®r¬V÷žn"åUķX­6 ø}™Ł D†KŚę{VNdūŽJš œ3/Œ™cöT IDATq1^”4ó‡Ū';“Ū+W$;,2wŻ<ķ{+Øo4°hNIć|0›­ĢBeu;ēĪgĪ4Qįl„¹µ“½™ŠŖvvģ­ąO]®vZ%%å­čGQcĘä@Ö|_Čø/\µŅq’ć}pÕŖ8ž×HZŠ?ė7cķņŒŸäĖG_å‘s¢‰?-ūÓ«ևÜMD†»S]ہB.ŠR2ž>ZJ+Śhh2P]«ēŠŃZ‡rB«QPYӎĮhĮb±2sr _o($5Ń_o Š›IMōeĖĪ2t:S'ŠÖn⓯ó˜4ޟ“łlŻ &&ūāļ«åD‘“}yU;.j•‚ŽSæīc‚3!€`XĢžŌÆKCJ‚) Żī3ŗRz‚äĪ4i¼? eĄź­µŌØœ;?¼Ļ1C‚tżć“Ép²²Ų}Łż}µœ·0bŠž÷죛®»_€# ¤Éą²ÅŻšÓ„Ųna&.ŹÓD ’?ü¢9”NķÄFz:żļē£ÅĻG:o…BĘĀŁĪŪ«TrfO¾åHšó„ŗ¶ƒ;݆›«Š+.Šs\yq,’y?“æžs—]CTø;&“•°`7®¼(–—ŽHG£V°ā²xŽē7b³Łų|ż ņ špqQņ›«“śÄZ©Õ "B»•ž¾Z¼<% ‰L.#:Ā™\Fl”'Süø’/;ˆuēŽßM$£+Ž%-՟u‹¹ļ/ŪłĶUI,œJyU;y~/‚YS‚HŠ÷įŠŃZVü*€y3CŲwøšĢœęĻ ”¬²'^܏Z%gęä@R|ÉĢią«ļ Šėͤ„ś1–ó8œYD ` ˆńā”ßOī³<*ܝן]čų?µ‡° °|Y¬ćļŽī…J„œ[oHįÖRœ–‡»ńŌC3’/č1!æxi4/vü?c²¤4*łAhŽ?ŻŁ½Ķåv÷K£Vš·?ͰŸ‰qŽ€¤ˆų×ÓóœÖŻpEBŸ>ŻŃ}r™Óu»ny<×-wŚ~é‚p–.č«Ģœ™ū”@ †ä¦«“pEņ@p @  Io·!@02“.J<»ÜØ‚_:B@ ų‰™19Šįź$üŅ.X@ `Ģˆ@ @ 3„ °óšŲ¬Büt¤Žū/źÓŻ @ ‚ÓŽ@€Ę–@@ŽZm<Ż]œeX,JĢf%x(@BqÅćOžńtwCp–±vĶå|ōĮM§»‚³ŹŚ8N”õ­' œ*t.MLJśžtwć”c2kŲ{ōŅÓŻ ĮYĪ”¤oŃŗ“žīnœ±D ~†®46”Tš‘Ė­Cļ Œ€ĪN5óŁY÷ÅfUŠŲ„\nE©4ŸīīĪ2,‹³õģ?§ !€ĮϘ»ļ}–©ÓöœīnĪ2n»eœås󙳶sēŻĻŸīnĪ2Žżļm|’ŻE§»g<"ņZ @ ŒB@ c†@@ Į˜!@ @0fD @ Œ" ÖĀīŻp×]Æ_½¢£Ē®?'Ė3ĻĄēŸĆš5rŗ{#@ 8SČBs3<^^ąćÓw½Å2ö}:JJ¤ó1Šāņ@ ‚ä ćĪ;į©§Nw/śŅÜ =””šųć§»7ąLį÷懽{ū_7k¼ņŹŲöēdŠėaŽAA}Ż"žyFźŪśõŻż_°@ Ųß½{äżg_ 7žüāč‚ÓMn.¼ū.46žīžĪF„ņ3bž|iBžĆŠŅā¼nķZé÷UWIæ×¬‘ü1ćāąĆį½÷$ķä]wI.=yā XµJ.¾śJņĪɁ^ÖŸ¾$„Lž ü£ōćē7ņsX±6o†Ūnƒ ௅ņrøäēszūm©_ R6­>؇’Ī­'łłpŻup÷Żšķ·’›XU\s‚~®dgK‚ĆŃ£’kŌ@Ųlpų°¤ ©Øųiūd0ĄĪ°iÓŠm;&õ’ȑ”]RģēzāÄ©ė«ą—K]lŁ")į†rƒ,-•žēĢĢĮĒŁ©Ą>&22ÕÕҦąĢE g›7ßžäüóī»ŻėÆ¾ZśŻSˆŲæ_Ņų_y„ōM÷qŽy’Ū’sĪ‘~÷ iiŅiPWVž²Ó¤sÉ2Ń»Õƾ¾øX²j,^ģ\CdźTˆ‰‘4½-æśU’ĒĢČ85}£§æ÷@Cƒ¤å\²¤;>ķšk¤ģ?wżöĪ;<Ŗ2ūćßI™–„Ž;H³eQTŲEl+Ø«"‚}AeuqŶž±¬{Į¶ "XQT@Ez@ ÉĢļ³/sļ;%ÉĢܙšż<Ļ<“ܹåLyßū~Ļ9ļyGIśŌ7Šētōhż±GŽˆhÕJX'‡TéŪ½[ž;Ö×·Ż|³üÆśÉŖ°r„¼»]ę’Ģœ)é£ļ¼£O{­¬±µlpĻ=āŲ¹ćJ—\ā/,īæ_Īżžū2 lߘ:xöŁŖŪHj'_,ó?łÄ?B1{6šź»’½ņ šŲc2ÆņĆ%«† óO£ŗłfigo¾)νnŻäŽŖÄĢWųīÕ}ūś2ŽŖŁ_Q!ļaéRÉŹŠ¶‰K/Õ·‰Ē›ūö•÷ūŚkņž®æ^Ę4Z-’>įĮĻ>“ö¹apĶ5U³X'”Ē·ßŒ£ßęvūž>óL©ŠņÅrv¹üÓÆÖ®•Ø@jŖ>ąńˆCy8fĄėŌ‘ŌØH¢„OĒŽśķ=zˆ]7Ź’*EĢø žĪĶ›­[%=Kaœ0Æ"AūöÕŲlBH<’¼ōGZ†ėąĮņš 6›¼žÅ2Q¢`Į‰’Üpƒģȱæż&ƒŒĆ‡õżaÆ^"jTõ­mŪdĀłŅ„2č™0AŠS¬X!雭[Wļ½=ż“D:ŽzĖAé×OÄĻ /Č Čn—ĮÕŹ•2`zņIŁoą@I)łąy}š`ßy‹Š$Ҭś².]äńÖ["`ȉĮW_IĮ-=zˆ13S~C3gŹ ūģ³åõ’i+ē'÷kG²4ĢÕNŽžńikW_ķ;e„Æ*¾5o.ķińb‡ØčČHFĮ½÷Vゥ6qķµ>a=p 8M?üPģŗč"ąŲ1ÉnČĶ•Œen®dA<÷œDƒGŽćĘ÷Ż'’ óR—.•ž¢[·źŁKb# qFNŽÜ$µmĆf”QR" ¤kW߀]udÓ§KøS=.¼P„‰Y¹?#)Q¦ÅÅņl\h1%E`Tv«ÆŁ‚ŒjŽIQQšk©jgÚ5ņ¼g>z« Ę ©Ęč­:O$«ö””ˆ=gœįļ˜9åI™Ś°AņķEoO9Ež• S˜„³tī,žÜ}ūdN ©żÜwŸxłµäęśž4H$œ9S"|€æxWmĒćŃ·•`l;ĘßrR’Œ "]ńJµ •• 0¶ %Œū9"Ģ—,JKõ 33:w–ē¼¼šŪM¢Hrśé2”ņŪo}9m^³Š˜”—W?å (»Œ”ęŠ ń|“l©ßϬ#TU³³ƒ_kļ^ynŌØZ¦BŖHĮ×QƒØ3¤øĘüłŅīµ}—źŒóÄ”¢·jPÉ…Š‚EdÕ¼‘Uū×[R‘[cßg†:v’~ …ę́SO üzZš—æÓ¦I1—īŻ%%±_›S÷ĖW^ń/·X—łn›7ó!ŲŹšźXf>$ ʐ!Rķeī\ÉuŌ†ń›6•A4ÖĮØÉ]‰eĖěØųć9Æzjā¹Jkвj•xD”X „ņėŌ !±Ćķ–\ļ>Øķ§ŸŠS[@BEV®”“ #V¬P,"«śCcōÖŲO÷ †JUĘ`$.C‡Š™1Cę?ģßļKæ|mgüx_z“–`‹G“pŪD8ķ,Ģ|H,8$AQĢōéśNŽ¦gO™x9¾žµcĒŖw=5PˆPØNE;į½_?yž†Ż.…ź·˜·«RÆĆmöSūŚl”Ūj;Ģ|H čc‰3&Oö­æ”eüxI½Rtļ.ƒōµkĶĖJ>ü°LŽ’\j×ŹźźŖ"‡užĒ— ņC‡ŹóĄRõā²Ėd²ÜÆæJõœvķō7ĒŽ•ūƒɄ¼ņr©*“œ,•/ŒüóŸ2!Õn—ź9ūöÉyµ“Ł!Ö2`€ „–,‘y£Fé_WŽÅ‹eMŒHRŻč­Ķ&šßŽ6ļü?äŁ½]¾\"сö DI‰¼÷-Ŗ·Š+©½ø\"8>žXډQ¼«¶Ģ‡š mMšų¶k;ZŹĖÅńŲ“ičū93 F@ā„ŌTéL „fUŸ†•¼ėöķż_0@jŌ§¤=$%šžó)ć«MČĪaa$#CļmHI‘Až”C²Ņųć_µ÷oŃņžū"¶o—ķļæ/¢höl±é™g$뫯ō2Ææ^Jh8Üz«LØ//—²}f¢gŻ:±ė¦›¤RĪćūÆ@±§SQsęHP­šE,_~ŁUcć‚ᢢ·”÷UµŒ‘޾}%5źƒ|ۊ‹„ĖĶõMØķŪWžß|S/x¦N•ē / ~ż·ß–‰¶f)4„ *YŸ}ęŸłŠµ« ŅæüŅ7ń[‹¶ųĘee¾mŚ„Ź|Pm¢Gs|ö™¾×_Čø(TŪŁŗUś•Ö­}ÕšH|ĆHœpŽyį7rÅ]wI” ×]'“97lŃŗµźŅęĶęǚ­X|’żĄČ‘"BZ“¾ QŪ¶Ņ!lŁ"^%fźŌ‘ÅÅņó„fżś'ZŽ+"bćFtģh¾f ÕA5eŪ¶Į'ŖB"ĻšįžUiš4ń_TočPą½÷$ŗiL©8ūl)¬1w®xxÆ»NŚō_HTõµ×ŖnW«VņüČ#yŻøQ<3ĆåēĖņå2‘79YœwŻ%"ā¶Ū$Ķ£~}y½ @ޟJ 0@ęäĶ™#N”d±·É“Åł£J¢*V­’sŸvšx„Ÿ~ZŽēŻwWż}’Äå7ĢĖĢ>ż“~ŽÓˆ£²“Ō_¼'%‰³ńĘ%;į®»$ł—_D(’ž{šyf“h!ē:U"Ū·ĖZ""y*óįĮ%|Ō(q*tķ*6hŪĔ)R9N­¶žš* >ü°s×]Ҿ{LŚ„Y›øżvɩؐ ‰²2)pĪ\+b= LVVč¼N»]JŲEІ õė’Ćķ|ķzõĀK1p¹¤ó ER’ł>BHōIO—A‘q¾`=’|qDZ‘üƒDĢĢž |’½lkŌHW ‡Ć77CKJŠl×.ˆxÅi3GķŚ‰3Åøh¢bōhōÜv›DgoŗI¼³Ó¦I4öŸ’”ż\.,iK''ĖäśkÆ‘õŽ{²}ĄąŻwżFII’ŅŖ<ŌŻŗI”X[‚•Ō^Ōļxófsg šT­PEöķ3Ÿ1r¤Dļžļ’| Y:’‘P^.Äf“kš9é²²ōÕ²4 ß|SĪ•%B:¹įiæĻ>+×2DŚ›ŹxPmĀf“ˆ†±MÜæD;^~Łē\mŁR溚]sŃ"YĻćõ×%µ›$ „BŖvq“pHM•C Č§Š’ęå‰Ē5+K1ځŹÕWėWuVüéOž‘äÜ\™o²~½œ;ŌäīG•ĮVY™~“K.‘*^j‘ĄĢq-ZˆŪ±Cʁ7iųš;KŽśĘ2€Ņ^Ō~®»NUį‰'‚§T+‘‡õėå÷ŁŖ•¾xCZZąl ćb…€Dgʍ“HdĖ–ž¢_ĖYg;wJ»mÕŹ—Žn›HNńņļKę†Ū-ķ,)ĄdÅ‹%śįńH†DU#<ÄZ(@!„Ä³Čˆ‘ Ŗ^,#v;Š„Kųū*óœ~D¹Y³šÖńČÉŃ!$įDĒÜn‰ŚEŠPeļµdg®Vn›ČĢ o"¹Żī[|$œ„NšV­ü«B!„ų…’Š\yeąU“ !„BHüAB!„ƾ}„š!¤jtč ™\ē+±”!„BbĢGYm!‰ÉčŃ\ē«6Ą9 „B!„˜AB!„B‰LĮś6tÄM#¦Fä\^Æ’2œ6›7"ē® ńh—× F»¼–Æd©ĻŖ¼’6x¼É;_f2ėTź¶żøāźˆæŗ4jZiŲRs~e‰- Æ×ß®¼ĀS0ē‡S,²HČŖgCōv-üõšŸ÷ŒnŸ ^ĪŽŸ‡B!$Q”ąńŚąrF‹–[¬6…ŌRņós±_«Ķ „B± ’ѼłV<šŠ½V›Aj)Ÿ~r>˜:Ģj3H-bŪ®®Xµ©/ÆÕ¦DÆ-É/JŗvūyX·ć\‹,6ńųmūfńØßGFŚō9õ«ĶˆGĖ]ųfŃŌĘļJ‹×kók;åhŽĻęßn‘E‚×ėߦ7ķīƒĶ{z[dQ4±”ļ铑ī:hµ!q!„$ ^Æ Oš4فōŒb«Ķ!µ”ŚĆć©]ÓEm’k;™™EhŌx—ÕęZJ^^C¬ųū*(@!$”zÕ»8ķōÅV›Aj)·Ü8^ćōĮZB—®+š÷ŃOYm©„¼óÖ-ųś«AV›·Ō.·!„B!$®”!„B!„Ä B!„BHĢ !„B!„Ä B!„BHĢ !„B!„Ä B!„BHĢ !„B!„Ä B!„BHĢ !„B!„Ä B!„BHĢ !„B!„Ä B!„BHĢ !„B!„Ä B!„BHĢ !„B!„Ä B!„BHĢ !„B!„Ä B!„BHĢH±ŚR5¼^`ńb`Ķ - čŪhŲŠ|ß„K’ _æčŚōĆ€Ėōģ|æ;€uė€ī݁ÜÜčŚD!„BāF@Œ»īĪ: 1øņJą„—ļ{ēĄąĮŃ·éņˁŪn ½ß¬YĄłē‹Eß&B!„Ÿ0’@ƽtź¼÷P\ “lYóó;üü3š§?Õü\„bFAšć@~>ж­8R’“ż÷+*’čmėÖņˆ{öüté8ЬųńGĄf› ‰5••ĄO?ė×Kö@Ÿ>@v¶ł¾ J»:óĢčŁćńóę‰-Ż»ßwćF`ėV W/ ##z6‘ă$X½(+®ŗ 8ķ“ȝ·W/ąąAé$!$ŅģŻ+•}ūä’ädŁVƞ’¾kÖH¤ō”‡€‡ŽžM_ \=0y2põÕĮ÷½ī:±yżśčŁCH ®¼ųč#ߒƼÜr‹ł¾ū›¤gÆ^={Ž•6zÉ%ĄĢ™Į÷4 ˜0ųåąä“£gI<˜‚•@äēĖs¤ēO”•Eö|„¢åwD|üė_ĄŠ2h1Ue×.ń°R[Ł“ ųųcąģ³%2ųÅĄe—Õü¼GŽHę!VĮH‚šī»ā±€¹s%M!3øõVß>Ÿ|"ó,JJ€V­|ŽĘ@lÜ(ہ@y9šÄ²żœs$*Č|¹sełįĆy¹å™tnä÷߁§Ÿvī”ėßsŠ”CxļoĒą¹ē€•+%LŪ»70jšźŪgóf9’† ņŽ»tf«Vį]ƒb Ė–I Ó}÷éé”Ó6ĀįŪoÅ ūģ³ĄwŌü|„Ä#Ė—Kń™#"›łŠ¼9б#°`AäĪIHU I^|Qnā0c† Œ#ŪrsEōL™|ó šŁgśsmŻ*9§uėJŖĀ¼y"n–/Ē½nxw $7;‹Wč“O€Ę›oė#$„XD~>ąvļŖJY™ ̩ͨ̇śõ#{Ž#G"{>BŖ H‚šķ·2 æįąłēkÆ’ž—@7c†ˆSO¾üRR “»w>ēĄ2 ļÕKnę+WŹvŻøā ™čvé„ņ|čpī¹ĄēŸ‹ąŠN€?pų÷恐’ļ¹ųĻ€ńć7ß žŽnæ]&Ųö™ŲTZ œw0uŖä·o|ś©\ćÅe@"-‘ÆŠ8 IDATŠB"ĖŽā“Ų²E"*ŹzŽy>on~¾×Xµ °ŪO®Õ2eŠDféUé=÷HæXR"żāźÕŅOdeÉ<³Ļö?—Ē#×’ōS4HUæ”0ļŽ³fI_uš 8…FŽŌ—$÷zÅŽY³¤pH£FĄHõ@m„—#/¾(÷t@~Ļ«VMš×\#Ū<_[8vLx‡Ė@üņ‹ģ_^.mCµÉ‹.ēž× |’=0¾“ßcǤܒ°aęm⧟ÄĪżūåų±cÅ1ėÖɱėÖ99Ņ.nøA¢„Šß&N¶mg÷īĄšį@ƒį]ƒÄ/ Bf¦ÆSq»„±*^]žßxƗW]·®üL€¤¦Źy’“妭='4m* ]kĆWHdbŪ6½iŚ7Ī×q<š€tŸü}mŪ&ђĖ.ńČū¼óN™læp”¼.=]ÄĮ«Æ_}ōļÆ?׿÷ĖõŪ·—4Ļ/¾y*o½ŚŽūļ{Lśä¦M%:üĪ;’Ö¢ŅXŸyøūnA-ZHZėĢ™‘Éć'µ›Ē“b €ļ÷xöŁ"@**ä74{¶8 sr€?”ß°y¢‹łŚįÖ­¾æ›5q÷Żņ›dQXü÷撁ńŹ+śsżü³“ßęĶÅ šĶ7’™šėÆ@:ĮßŪ¢EŅĖŹ€6mDČL›&©į?.ū¬_/b¾¢BŖ®Y|šе+š—æ„ż1’8…“ŠÆWrĖ–±©0”¼“Gź·7h /©™•%öģŻ+ž–@,Y"ļĮXøm[yVĀ£Ky~ōQńnBāŸ³Ī’(ėi§‰£ @Ŗ‚ĻˆŅG<óŒ¤Y<¼żvčóĪž-@+꼩©Ņ=õ” hJKeū'Ÿˆ·Ų8€dōŪoāi]»V¼·ļ¼ŗŠŠŠrķ3ĪÉšėÖsęH7~¼oæ·Ž’į¶me>p@+v{X!9Y»Vīy€TĮ*( ČoyölÄēåÉoPE ‚1r¤œĒķ–ß®j;ż«¼>|øDU’čäĪ"0ŽzĖæ`ĶīŻ²٦Mrķ”CķŪ%Ŗ GھĶ&%®×Æńߦ8'ŠŠdæ)SäšÓ§KU‹$1”Ip „£hÖ,z×Ų¼YŅžū_¹©2×$‹øŲæ?š>;vČó[oɄRõ=Z¶«ļąĮ"žž{Ģ̟_ķ·C‰))ā™MI‘ĮFNŽ<YƒcĮń Žu—/zŖr"#Ɨ~©¼æŚīWȜ4•ātńÅ"¶o÷?ׯwūŠe4k&āČėõ ōńĪ;2zź)Ÿcfą@韓{÷0+KžONN:)ō{$$+Ė—ž.æqµ–ĘkÆÉoé½÷|ۚ5 ž~HŪĖɑö¦ŚgNŽOwé"Łźœ ƒI*–1£āōӁ›n’æSR|e³Ce>,Z$ь#D2Ēåę›EpØź\*śÓ©“ļŲöķƐų‡$ĮQɌéS‘`ćF ¶i#‡ė®“ĪĻ{§:ĪāāĄū(Jf¦Æ#Ģɑt†+®zō×m6 ĻŽ#iēž+žBHb¢œ±JEŹÉ1/9nĢWļ×OžĶĊ–Å‹„T(E»vÉQQā“NļķŌ©Õ³›#……"ąĻ:KęE5¾0¶Ÿ&Mō’wģ(ö„j;K–ČsļŽśķĘĢ%Ō|0x&IL8$ĮQCiidĻėõŹäóÕ«%õśėåFżÜsā­ G€ØźĮ&Š«pńM7‰Ą †Ó)Ū‡ ‘žńÉ=ļ¼°Ž!$ŽŲ¶Mž£½=zTi»w‹£ęĄż¼µ@Ø]°Č- ƒ,›Ķ7wM”R·TJźóĻūņö,*ƒ™™Uz+„čPüh΃\æ^2 |j‰<4j$‚ŪėÕO&×¢ģņI‰ä(gU`禛$óbŚ4™ÆņĘ@·nÕz;$”Ip\.ą«P„‘ź–©\æ^*n $µū„S!fĖ óŠ4l(Ļ*+zõ’ŠY§ž*¹¦ „$Ź›čķ‹/Źq•K®hß>ō±n·<:|æ²2_!-gŸ-5ÕGž|²ė®“¼żyó¤²Q8bˆ3¢™łšĖ/ņ[żć’×Āq<ŗŻ2i}¤lßÓOū"6ĘūźÕRiC1ož\/œ «„ųC97"½żč#y~łe‰ŽjBᐭ[å¹M›ąū5l(µp‡Tūŗśj™d»hQxĒb$Zm租¤$õšį²Ž–qńĆPķ§¼\Ŗqµn8ż š9JCĶŃņ—æˆ9rÄ·ōIl(@jwŻ%¹ “'‹—ÆU+I?ųē?„C•JŠ»·•“N’r{ū›ä(ßy§ädvč цžże ‚Ea·Ki¼zõäųfĶ$gōŽ{?’Ł·_÷īņüČ#bÆźD^yEj†ßs¤kuī,ßȑ>Qóųć2¹³ys±³±I»Ę!$qP)Hß}§ß®%ŚH©*z`ŒŽ>,ĻŚčme„l7FcĶPŽ>}ōŪƒŗnŻÄį3sfčsj9ēyfō–T—ģlyüų£T§R”–J¢ŗ™fmš!BµŸ/¾, cŪĢ3fĢm§–¾}åyĻžŖGā¦`%ŻŗÉFķ*»€t?’,Qß—Įūß’.„ėl¶Š7ņūī“Žhõj—^*۟|RR~ųAr9ƼRJLz<ś¼MUįeżz‰~4n,5ōk{œvšoÅį | uuī,5õ'N”y'’ćyķµ¾ ģćʉ°Yæ^"4żś‰`iŃ¢śŸ'!Ä:z÷–AŌ“iām=ć qxØuBU½Qi«VÉsY™ ŖTTō…$ rģ˜8cņóõƒ5…Ö™2s¦,ęÖ¹³TŚSø\"ŒŽ‡Kr²¬ żŅKR”笳Äė ȹ¹¾Ņ¾sēŹĄÉnGZŁ:œł(„˜a³ID`ņdłżM˜ ÷ånęĆʍņ›v¹D8ØßäH›lИ5ĖWżŅ˜łPX(Ū)×ĒŅ6næŻ·Ó)ĻėÖÉ ²RĘmŪŹŗ9S§Jj ¢|łrß"ƒæü"ć 1™3GžŁvj DĒŽSŽ5’&#&„>ÆŪ <ń„łkW^)-ŖÖ·¢^=}ŖU0nŗÉW7\K³fRO?;ź÷"„$6n·DCGiĒŽ’žtŹ)2@)(~|×®"`Ž{OŅ™öīqóĶāĢxżuIŁ(/—s"…Źgæė.©ō—š*žÕśõe¦-“Ń­›Ģ³k×N\ū÷Ėwß-żn‡āšÉĻ—sŒ#”½{„J–Ó)%/Oϐ!¬ęCjʃŹ€ü‰'$ķščQqĪ ¼ūnčć{÷–¶£Jß^tšź«ņۜ6MJģ:"lƌ‘ūļ¾}"JŌ"ß/ĪČ $åŪć‘4mķ¢Čźw~ė­Ņ^Ž|SʤI2Gōź«en”Ó)‚ØiSi3IIRérįBq4¦¤ˆˆiŠĄ·NIl(@!„D•Ūnó•ŲŌ2j”8Ž_Ņ<.¹D¢?ü ŽÕ`8M}įńŖ^szõ$¢śņĖ2(źŚUŅ9ׯo®āŖ«Ä»śÕWR…ƲRÖ1Ā5駞Į“wÆ ®*+}+®Ÿq†¬Ō¼oŸˆ /”4V@RKß_¢ ;vČ{½č"ąĘköy’‡Ž½Å‘hōś·o/™Ļ<#ó4[“{f¦D4‚•ĮD §§‹čoŻŚēhœ²bÉɝV„ńŖŹ† ’O©­ņRŪxųa©ZC!„B 8āķ·łó}’Ļ™#kd؅«Ź÷ßK„‰%K|Ū<žšj„Ē”ŹpŖŠƽ{!„BHĶ”‰cʍ“²‘jæŖ2|øTƒQ:W­’Ŗ/jÅóx„¢BŹZŖšßHJ’ŌÕŹĒ„ą¼’¾”µ EA,ņ¹s§oŪ+ÆHŚź2}ŗ”Ż6K–ˆ3'\ęĶ3ŸŒėõJ9ŅaƤ\čCÉZ#VSR"„†ūĶjKN,¶n \®ŽČ /Č¢|ŠeĖdmŒŅŅź]{óf)_ķÅ+KJdbyøNʲ2ł-š½ÆU«¤\ī€Ą 7Tߑiž}V³Äz(@ā§čŅÅüµņr}„Ąėõ_$(%Eċ*iwš`dÄĒ‘#įļ[V¼3ózżoź”Ģ ‡Ö­„Ō„‘£G/ĄxōhāD‰ū÷ĖBaii”÷-,”Į–vĄóŅKRŗ³ŗ¼ż6šųćśvĪ‚iU%#CÖöwµä×_× -ÅāŲžAV–”}ā ó5Œ"Ie„’ŠėFÖ®›µ%…Iō3Ę·"x(Ž}W2Ÿī+7[~ųxć YļFl†“4Y(3œuDy_ß~+%ŖµTV—]&}Ī©§ŠżśSųŸ_u §?™8xī¹čŚAƒ$FģŪ'µ“žŁ·ķĶ7żW ×2s¦Ō•W<śØĢ¹ķ6©ó•%Ķ_”Å€ŅŅ$Ś”:„%K䚳łĄĒūJAžy¦lWŒ¬] œ}¶x ›7—Φsēą]»€žże_—K!RĆ‡ŹJķ/¾( ‰„„\ Ž—M›|‹-Žz«ŲłÕW¾śū| uĪÕŹ©ƒė0Üæ_>uŻaĆ|'?8ēyĶé”ņ›”V‰'¤¶šä“²b·±NøĢš%‰źņĘŃMN–’_x8’üźŸ/;ēž·ŗø˜=Ūןh9óLé&N[Ē¦L1_M=,_.źPƒ“SOqōĻFĒāĻŅ„rŗė®źĻ=’pź©Õ;žškdUš‹/–’×®•5eĢ„sM°Ł€ūī“Eù7N™" ×IN–¶>uŖ,ņłŁg2śüóČŚ«åĢ3Ƌ|~’=šõ×ѳƒ„HŒØ¬”0ŖÖŪ_Xlßų˜āb`Ėß’HGf³‰é×OĀŗ“'KƒzńEią ČžGŽČ5++„滳fŁ~ß}RÓ;33<Ū~śI„Ļ›oś 3ÖŁ×rå•qYøP:…·ßŽyG^;tH* /!ūģŚ„_1łśė%TžŻw"V>žŲ—6ņüó2 XøP#FųC„Ōf< ˜ “Ć„MYHĢ cÓlŽ¤‰oÕe@ś¶š¦4y½ęsÅ®¼RŽo(čĢ™E “*¹Ćįū»GéKóóCŪź}UTųšņóĆ+b³½zém ēŗĘ9 ŸÉ“ÅIVÆ^õŽw¹§RWTų’Nķ'5UŚl†Ż»«g‹³ßÄąĮrOżī»ąĒаŌ§hŸ;Źg`¶©‘ņņŠāĒĢīÕ«CŸ5ņßnö=hmbÖDä”I05oÜ)§H:Ą”C2 ļŁSFV°f’q-[Š`d%Ž+®”*¼š‚tĀ}śH§óėÆęū­Z%ü_ėÕWŠŲPŲl’~śéņzÆ^"022|‹zu–Ų٤‰ļø'Ÿ”Ź^żūū_wūv`Ļ<#6^v™œK]wĒé|ί뮫Śū'$QY“H¢ˆČ’ļæļæ(ߐ!ĮēhÜz+pē¾’ūōoāgH_Ņŗµ ®¹F¢Œ2oDń’'פÆzė-éCŚ“‘¶.'Š<"+9§„‰ąŠZ.¼PiŚ43¦L _”ķŚ% „.\člåęJŌGqēāˆ¹é&y=-MœA€|ƇĖß=zČgRT$éÖ[e…k·[>Ļāby]9š™cŠ­›œ7'Gœ-ŠŸ–9uN§8ī½7¼÷K||ō‘o.eA|žŚtØwŽ‘ūJ >żTæ’ł„ 2įŽ;ä{ĶĢŽ{Osuźųg3,[ęĖZ˜5 ųė_e{ļŽ²}×®šŽĒ¦MŅ^ēĻ—1Ó)酦Į»Ėœ{®ÜŸƒ1c†dhh³4QP Ń6m‚ļsÉ%r}—K*ŻūėÆeœ0eŠ“+—KśŸü|iēmŚHÅøqņ÷Ō©"R:tĻ¾^=»’”mÅÅŅØė^q…/ YZ*ć%•5Ń«—\‡D £IŸ$7Wž•š·ŁäęSXXżóOœ(óŽ{§ŸÖæ¦õ~6m*éNf¬Y#6Śl’V°|¹4^m¤ĀåźÖ ļ|Z²³æ¦ņkSS}×MMõ]·_?¹i¼šBčłßé»næ]¢kֈCI‰³;ļ”ĻÄé”ĮѤI²ĻsĻI ©Ē#‘mUž½øX¾‡vķä¼wŻ%ēX±B^’Ē?ÄńņėÆ>ēœšŽ/vļ–¾Z‘[e3hēBł·'-%%rŒBy()‘ģ‚sĻF’ ƒĻ>“łVŸ.æO@"[›7‹‡ž¤“dpˆ8;Vįp오f)™ß/æ#•u 8żōąmؚx_ŗTĘ]»ŽgäHB_-ķyÖ,"¦O—60c†üŽ—-“÷ąrÉg`·‹ƒeģXń^ÆĢ%½óNq~üżļr®½{õQĢŃ£e\0gŽ\sŽ<_śę¤IāTųśky9Rœ$2¤Xm©>)&ß^rrĶB…K–ėÖÉßĶ›Ž/55šuöģ‘Ę’ē?ė·+’v{õ×;Ń^šy‡½{Ėó°aĄˆ×iölé@«R'$‘X¹Ņ7·*’\½o04p 0w®xv“’€o”*Rłł@ƒść.¼PrźKJŖ7±;3SŚÆÓ)¢ąŁgeĄ}鄾}:v”÷ˆiÓD,“lśzååĄ'Ÿ<xŸ©Såłµ×dPŌ£‡ `ęĶó„žuķźTuč ’ś«/Jüüóņ™j”ŲŖ>EEśėΘ!Ū&MĶi§É@ö›oĆķŪEąõčś}V®”ß³6‚ rrÄęv‹ųģ3Ógž)żKœjĘhŪ¶2ä‰'äwģ>ˆēžóŻŸÆ¹Fī‡Z:v1P^.÷z#»w‹ų·ŚÜōé’Ń Ķfвg“ÆY³DŒ"ĄęĪAˆųš:ÕE¹ą™ćtJrĻ=rÆæńFy]„#>ōÜūĶ(*’ōŗ·Ž’> ö7w®ˆ²ķŪ„ļRŁ#={†÷~IxP€“'×üN§tZųON‹&N§<ļŚ8½ģÉ'Å[8tؤg}’}lm$Ä öģ o ]Uš5󿝛 4l苩*q_Xč/@Ā”ØxõUß’½zł¼÷¹¹¾ö®ģ0FP7œ& ˆ€¹ęššlłšC_ŖF Ö®•Į”¶śVżśśØ’öór»e*ņ›’Üėŗv­|·¾hoƒ¾ėöķ+Ÿć€”"Uc÷nvUMY…*čųڊvnB:5Ėfxļ=ßo1;Ū7Š’›5óŸ{Ōø±DKņóĶēK|šü–“ē āŅ~ŒZÖ­§eƒ¾HQf¦>kĀhwÓ¦ĮŪ·"XÖĦM"²5ņ]7=ŻwŻsĪ‘Ź=&‚0‰9C…$FØ Yڰm<Ō”Ŗóھ]B’±Bu”7õöī-ž”sĪ‘ł*Įö%¤6PTżŌ£§Tݬ«›īØŅ.nwąō!»Ż?"›™é-PlŚ$)šŚ“­@TVJłąn.¤öģo¹qnY™p­Ż5­Ä·{·ōyĘė*Ļ'г„OIĒzüqߨ ……±o;@ͳ¾łĘ7·£I½1^Ū¬ķŅ~ĢȔ)įG.Ÿ{N"z¢€O(©9jŠ3Ī|ŒY›Æ*ڬ ­#²sgy4H ß<ōDd>ü0p!Ru(@bDNŽ4ōuė$ŌW\,įKm›-ŗu²•gļ^óN%Rōķ+P_zI"€’ääšn|©©āõ«źš%½z‰gō„—|žÓŠ ©NV ŠŌüV¶ '6[āżÖ7–<ļźāõŽnN™"©-j]0^]*v}õUšżH”ö‹4N§T9ŌNŠÖ’-)%/æ,óCÜnąį‡cjbB“””˜åŚß{ÆśĒŖ¾Ā¬ż¬]+%v©Īflß.Eažó}Ä҈zmĖ–šē³DuŻß~ Ķ7Nҽ†•ģ‰%KĻ#Uƒ„a³‰š~ųańDœvšŌĄ× ŽęĶerÕ5×D¾¾7 ¹“v»LŗŗźŖĄ7¬š’‘!‹6=õ”ˆ­›oBؕĶ6›ä Ŗr»į®ZźpČľ×^“<Ņ[n‘čĘČėC‡Ź$ŃQ£$W¼G™ŠGHm';[ŸĪįtś/(zäHķ*ĪPX8żB­_м<ąžūeīG(Ļg£FY‰5ÉĄ-˜ĄLJ’Iø÷Żg¾ź; LV–>’v"d3Øq‰Yū™2E"Į"{Š;ī{暗ˆ† åYlˆڬ‰`œ~ŗDKW¬~ü1śv(P€ÄI“d²ŁŃ£rS{õU`üx_Ķ履–qÓ¦­8å ’) ’ć͚I•œß¶{īńM˜jŻZ^Wįćœ™ĢŲ©“t įäoŅH'L|fÅYgŸłšĆ®lŅDDĻųńā=d"—Ń7dˆ>DūŽ{┬WO>‡¬,±Į˜Ņ5j”>l;fŒLdkŻZ¢-ćĘł£GĖÄĻābI§ųž{ó‰ü„Ō6š4ŃÆ9”›+)NŹŃ±p”äS«:ųŹóY\=›œNżJė‘fėVóIÆĖ—ĖgqÉ%”ĻqĖ-R]źī»Cļ;h/æōm«ŹĄT”® ƒ‰Pśč#óėj…I½z‰ ³š¦M„X‚šS“™)æ]U¬„“T&1[‘ĶPÕ,pŁŗUŽ£¶R% Šp«_M™"‘·I“Bg>œvšˆµf Q'³5~įrUżóčŌI³Æ¼ās¾x½¾1™¶­Øhi"FĆāæbHN޹»;īšżŻ®Ž;U·®,§8ļ<ż±ł*D(“yžĶ›ūæ~ńžÕTĆ%7×’<§œ"` ā+-©„{w’E™ Ņ’ņÉśĪš·ŠF–‡‘޽}±9‘čŽ]Ŗģ(śō‘Ō Aāų䉼ŖASƒāé}ąńž=ūlämźŌIJ—&ƒøiÓ";ÉsÕ*Y<ÕȔ)Ņ?„Źėłeł\Ī8CæĘƄ ęėõė'żĖ_’*}¬Ż.bä÷ßĆ«¶×® ŌnæŻ¼Ļ Äi§IE£aƤ"Vzŗ|×K–Č=¢kWłŽÓÓeī[øŖ‡­^ķ» $„]7ljPēœ# éŖ“æęĶå·sųpšµuŖK«VŅ>nj§Ü-·śSäĪæj•Œ=ŒŗŸ–A¾ŁżUĖęĶŅö6”¹"ʱѿæ“#©©2ÉūŽ;äŲNd›;ļō-:ŠNdŻ;äļ[n }ŒĶ&ĪąįĆe.U÷ī’rķµ’®xŪmr¾¶mÅaŁŖ•8_Id !„ZĪgȄĖM›Ä旕%“T'M’AÓēŸK„S„eŗŻ2X=[nŗ€Ü”µžĢ±cõNˆ$ĀØP‘Så9¼č"żDé”CE€lŪ&öUV†'@ś÷÷lŒ©ļŲ!Qć$VGR2µ $¢aCóĮR T,›MĒK/INyn®D%”ųøņJ’•–ļ»Ļ·¾D£FR…šėÆå3oŠĄ? ˆgzĀ}YŲ3ä=-_.i3“'Ė ø¼\X‹‹Č{ź)߂‡$<ź×—ļćĒ}ä7ä³Ü±C¢cÇˀżčQł~žxB222|%™Ē÷są@½s±IłNµBõ’šM†nŁR^W“ó²|YÜĒ™ IDATkß4k~)Žśõå<*å ¹“=¤ßoįBó…§L‘Č”ŖŽˆ²2F‚•=ZŽē¬YŅNnjń‰å“N»µżĻ AāØT¼ü²”±v»„M„¤Č1ź3TŒ!ߋāśėe¾ŁōéŅ^n¹Å—qà ҆÷ī•÷}Ūm”ß;  B©åœvšxŲgĶ’; 7i5ųUh2—^Ŗ_WCū7 O¤ųDß¾¾’^|c×n—ĮqU9ūl’r²Ęņø³gĖ ĀøßwßIī¾±ŚŽUY]įvK¬f^cc„fčP_õ*@D‰v  ˆēŪq8ō«Ō+RSeĒØGĶ:TŚŽZA;;Ū?›aŌ(ßßmŪźKHׯÆ«4iEƒžß©vŽDÓ¦‘ÉfØ[×’<=zč׈ٷO¢gƲ¹"zĀYū£sg’8Ź^hߎßnµ^ˆ¢S'żg˜GͲ2.øĄ·Rŗ–ž=¹öG4įB9øöZąwNŒ9ļ¾+^icīłŹ•"VXņT…kƕŠlüaµ%Ńē½÷dĄoŒ€¬_/³ōCBŖ!„œŒ#Õ|>žŲjK¢ĖgŸIjŒY$bĢV"U§sgIóū÷æ­¶$ŗØ4½’üĒæoēĪ2ńŽlĶBŖS°!ä -MR(¢±"z<Ń«—äs«|y#Ö!$=Vū# .šę›RŌĄ ¶I(@!ä!ŲŹĀµ…zõĀ«:EHUØS§öWQLJņ•Ė'$Ś0‹B!„3(@!„B!1ƒ„B!„3(@!„B!1ƒ„B!„3(@!„B!1ƒ„B!„3(@!„B!1ƒ„B!„3(@!„B!1ƒ„B!„3(@!„B!1ƒ„B!„3(@!„B!1#Åjā…ā’ ,_v†ÕfZŹ®]ͬ6B!$. ł»v6Ēžŗßj3!„B©ÕP€čŅn¼^[ÄĪ·låY8vĢ”ŪÖ£ĖĻp»J#vŖRt(¬ė”Ū––VŒī—Yd‘°uG[ģŽ«4m“ Ķ›n¶Č"a銳Q^n×m;¹ėøœ‡ktŽt÷ĮOˆ‘Ķ›Ū!)Écµ¤–RQ‘‚d[¹ÕfD…‚‚ŗųeyO«Ķ µ”żūXmB\C ećß"z¾Ÿ–ōBéa½ iœ»9Y"zŖ°;¹~.9Y·Ķe/C«&+-²HČŪ›…Ņ’ęŗmnĒ>ĖķśqŃ8\fü×";“‚ÄŸĢjµ ¤–“‘vÄj¢ĀŚ5]°vM«Ķ 䄄„B:9»Š„ķ|«Ķˆ:k6tÅĮ¢:ŗmķZ­EnŻ<‹,-ė Æa[Ļ ‘’Ri‰=ŃĞZ»Hrʱ¢ķģ;Š·tŌm«“}Ū®²Č"aż¦ĪČ?˜«ŪÖ¦Å4ČŻm‘EŃÅįØYęDm…„BĢ“ČL³.Ŗ+Ömh‰Ņ’zŗmu2·£UÓ5Y$|óĆ9~©»ĶƂĆ~Ō"‹Hø$'U UÓV›uŹuFiIgݶzŁÅ–æ÷Ķ[š “DŸž”•¾­šF6…Ä7,ĆK!„B‰ „B!„˜AB!„B‰ „B!„˜AB!„B‰ „B!„˜AB!„B‰ „B!„˜AB!„B‰ „B!„˜AB!„B‰ „B!„˜AB!„B‰ „B!„˜AB!„B‰ „B!„˜AB!„B‰ „B!„˜‘bµ5”ōp9¾Y°Ćj3üŲ¶óŽ•ė·-X²n×>k Pt(»óJuŪ²üóŪ²ż€Ÿ]ÉÉł(*¶Ö®m»ŠQ^įÕm[°d7\Ī|‹,ņ±uĒ!«M „B©6 -@ ā­©k¬6ƄŻ–õ›6Ųm‰5‚@”aŪ~üņ»ÕŸ_WķZæi'«ķ*P”Ū"ßį^K¬!„B©-$¬łsßzØØō†ŽŃV­w£¼Ā„ŪÖ©M=8Žˆ>Å„u±q›Ž&—3 [×·Č"aW^öŠŪÕ°^Õ·Ö®ß×»QaüŪփÓī pDģÉÉLµŚRMÖl8ˆŠŹųł-Å3¶¢ą >Jŗģ·}Ų¾{§E »óJÆM·ķ‡E»’Rf‘Eń7·ģe˜÷“µß}¢·æöģÓ·£å…Hµ[ūł­Ū|ūčķśeÕ~ģŁĻļ5yū[mBÄIXҶ…Ūj²;/Gé?Ś¶ĶŻHOK³Č"ą@” łz›2ÓķčŲŚ:›^Ž>«& œhߏZ»vå„śŁÕ®¹in‹?/R+ųaŃ.ü°h—Õf${čė6m°Śk|Š u›ÖØ}…xbĒž¼9Õźļ>Ašf^Cęƒm/żbńēēŻx›ź6­Ū¼°ń{=‘HXB!‰F³FN\Üߌč^¢±yG룑-šä 'ĖŚĻqÅ—_¤k‡\$'±Č¢ÄĄķJ®ÖqII6\|.ŪNU((ĢĮöŻś¶“™‘Öͬż·īĢ@į!½]Må ^æßP8µ§v!„Ĉ¬Œde°Ū­ „GģH²é?³–M\hÜĄŚhä֝)0F@:“NCjJķ Ä6ŠÉźˆ}‚±+ωCÅś¶Sæ®ŻņĻńh™šźķjŃŲ‰ęųżžH°§$„B!„Ä B!„BHĢ !„B!„Ä B!„BHĢ !„B!„Ä B!„BHĢ !„B!„Ä B!„BHĢ !„B!„Ä BČ ‹Ķf;ž „BNd“÷Ähß)@!'„BHh¢%F(@!':QŠB!Ä?čõH@B©õD»#%„B£ų&Dj !ä8fłŸ‰>HńØ-ļ‘B©)III¦÷’hdD\€šFNHā*M)ŃŚ·ŁūPĻź”:\B!äD&))éų=Ń(F€8MĮJÄĮ !DO8DiėZĶŽ“YēJ!„œØ(¢½?"ŠźŽ?#"@"a!Äz‚y?ŒõxnėfvŠ~Ø!„r"“””„ääd$''ū ³{©¢:息ui@B v@n&FóČB<lœ™ųP-!„r"“’’rüžØ!Įę†(Ŗ:Øö]7Tz!$ńPžPO¢“s³ÜU3‘EB!äD'%%åųC;ŠŽ;5Ōų®kvs'„$&ŚĪĒŲÅ`е’@Žc.«6ś”„BȉL8÷ž`ŁOU TK-˩ޗ!¤ź¤¦¦Ān·#555 $œ|P« Ō7™‰õ !„»Ż®»÷kS²BUĒŖ*)55ÖxcONN†ĶfƱrę/=XÓÓ'$;óŹPYįŠm[¼²öTė>#eEŲ»’Øn[AŃTz¬żŽņ–¢čŽ®£ĒJ°7ßZ»vķ-CeeŖnŪā…Hµš;Œ&ź·a·Ū %B“Q3!ƄJ½R«Q€*GŁ1Uf„‡+QvT’}WĄn/·Č"”ģ˜šź’ Ė‘’l­]„( ł·’Ć•Č?hķo“ĤMW ßɶc%‡+’m˜„e‡JĒw\Peb³ŁąõzzU Ö±r~ś„°Ŗ§Æ%pL·%ļĄ!V~Å0Ś”aĒ«æ£RųV„°ö³ä;Ō‹HėæĆčc·Ūįp8ąp8L…HØ(‰ź£Ōß”¢źż)¦|ŗĒ*Ӊ)…~ĀĒŗ-ūģ“Ä„ōæ÷u[v8l‰5„ųÓʶbŃÆV·ƒšoÓūa}›&ZbĢ‚0h©źżæĘuQmdüųń(((Ą‘#GPZZŖ{>r䏏ŹpōčQ;v åå娨Ø@ee%*++įńxąńų”±H$»vÕGee†n[£F]šŚĄ"‹€²²–Ų·Æ®n›Ż^ކ O¶Č"įąĮ–(.ÖŪ•™Ł ŁŁÖŚ%ßašn›|‡,²Øśh;…@p%<ź×Æ—Ė§Ó©!f9”ń 6a&ŒŒŃ@B!äDDŻ÷ĶDHØ2żU„J$gŃxcļŌ©JKKQZZŠāāb””” ¤¤äų¶Ć‡ū‰%@*++įõzuD抔 ”—ƍąt:}JJ¢“To“Ė•‰¦M›Zd‘”TŽ®zõź”aCkķ**JGE…[·­qćĘp8\YT}Œ„Ö›”N§n·n·ūø1!&¤kÆO˜„‰*ńQYY‰ŌŌTōčŃĻ?’üń>IŪ7s”x<x½^ÓHLĒI¼²qcwµŠmkÕŖźŌib‘EĀ/æ“‚ńkīŃć$'5?€są@lŻŚR·-;Ū†6m.·Ę ’±yóÉ8x°„n[óę}›[Ļƒj Ę{Æq1Au’ÖšQ÷w5p»Ż~”ҰŖKµ" FÆ¢öĶ©7„ސÓéŌ 5JMM…ĆįĄ±cĒF@U€8Ųlvݶ¬¬,ø\Öå•Ūl°Ūõ69Ndgg[d‘PT”†¢"½]n·Ūr»’’ōveffĀåJ¼ß£¶“0‹(o‡Óé„Ėå‚Ėå‚Ūķ†Ėåņ Zh2Z¼ĢI¢ v»999čÖ­ŹŹŹŽ;GŌC+B*++÷WFĄļ™Ōœ¢¢\x½™ŗmM›6EćĘÖĪÓŁø1ÓO€“nŻ©©Ģc'ńĖÕś¶SÆ^=“mŪÖ"‹„’’śØ¬ōoÓ͚ÓÄIU0+ 讧ą‹«‡YöC0ēcMīżÕNĮ äUŌzUµ¢ĀėõźDŠŻnGyy¹©gQ{OĹÓé„ͦvdee!--Ą1! ‡Ž&—Ė…œœ‹ģņóÓüģJOO·Ü.§Ó‰¤$½]ŁŁŁp»ÆĢ“Y*’YG¤:%BĢR±Āɵ­-ƹjfе Õß*ååå°ŪķĒū©ŠŠ ?ń”ķ«±ĻŠgœN§Ÿó$==YYYY$Ųķv?’••EB↢¢tæ¶ćr¹,o;.—ĖĻ®““4ĖķŖ Ŗi6N× TDū([ė|Ō^·Ŗćˆ ćM]ė!T7dś±ŪķĒ=ŠŚō«@ŽÄDĆétĀ89;;Öå™{<ę¤N:Y$¤§§› «ķ2‘ŁŁŁHOČ“©˜cęŃvDڬĆį8.>B͉×čxõóäääć‚A+ Ō¾źóQ³r’˜9J̐ø}W<āt:‘šŖÆHēv»‘™™ąˆŲššź'@222`·WXc!Ün·_Ūq:–·xmӉN A؋öžÆ"fÕ0Ć)É_UŖU €ī†mōz<ž’uĪz¢VmoźµÉ›čp8ąńų§`eeY7x=v,Ó4ĖźHCZZš©wÓj»¼^’ļ0335ĄńK x “Ic(V ³,³sĒźżjū–äää濔v?c_–ššź×O ŠDģ³ā³HZZšåƒ³Hff&‰ĢīÆń @E@¬¶«6H„˜„b+AjEG0ńaé³7¦õ*oČZ¢6õʘΠ½”+ńfīt:MHNŽ=Ąѧ¬Ģ,Rał@?--~S°¼^½ŲČĪĪFV–u…Ŗ‹±C2®Čb Ć+Ēoß3€ć"~E[z×8IßL|%Œ~Ä3oiZZ22¬ģm‘ˆn„ł„ijˆĆį@FFF€#bƒĆį0€XmWm œ(ˆ™Ń:"µĀ#”ų؉©‘K^ėY4!Fb–ĪPs©**ō+++ ŁŁVVĮņĻu:+-Ÿģmꔉ—I蕕śę‘™™iéwX‚EAĢ"!F1("ÄfóÆÖ§žVėĖīšE?“Ā#X_eÖ_%jߏ(¬Åår!==Ż"‹°śß=‰'\.—©±ŗķ˜ xhӉŽ™ć-”Ń:!µĻĮVCTŠæŖć€j•į5^DŻŌUjƒvåQŌN>%>żęķp8P^®’h322,õž¹Mˆ×ņI_n·æ]ń0MD¤~š™™‰¬¬Ä®ŅŖ3ŅFC“PØJźÜŚg«1öWZb¶ÆV€TVVƒ„ķ§ŒewkƒĆ$Žq8ŗh +ÖōĶ" iiip:­­ĪEˆĀķvūµx N§3@›f‡Hav_6–åՊćÜć£*яpĒ_ˆŠģ «7Ž7Hü¹xģōƒ×ōōtddX×øŅŅüÓģvÆå!O3Ėå²Ü.ńžĒ×w ‰„˜uDÄG¼bę,IJJ‚Ēćń!fŸ™š0s”Ō–>+žQ8-²fµż””?"kčP€ųĄL¼ŪķvøŻīGij6­Ö  ‘#PƊ­½·k‡YŌ#Šü˜¤`…Š‚h2¾”@ x%zŁ]#ā=ÖrÜn7ŅҬ›œčrł7x»]0»æŖ"#VbÖ¦ćĮ®ŚDØHˆz6»Æ‡s’7^£:c€­, b"@ąŌ…Śvć6¼Ź Óŗ÷i.@l–7ųĄ‘Eil0LŖƒ‹`BDūw°Ž'&>ŒB%˜ąØĶżV¼X€Xū¤!ńNJŠŁżqyߏ‡6]› tÆ7>‹tDŚé‘9 fžFķ>įܼkÓĶ\BVśm2©×ŗ÷˜”d–2ćæB,šVVbļŠČ[±æŚŽzk G*Ņ[ąh»n°yOFRJlWŽ?zčv-Z„ż«W#mĮ^Ų’RPéĢEyf{Ł}:’·ˆ©MŃ$X UøžŽx"fż“ś?1ėÆĀµ©‹'ĢŅż¤(‚Eż³ß~<ŲEˆ"ŠZ VÜ÷µ˜ŁÅ¶Y‚Ż›Ć#ĮžĆ½V0"V†×x“7{]ūZmŗY—ģك sę`ū‚Ųæz5²Öķ@Vy)<ÉnxŁ(Ļlß꜁¤æ^ˆĘ§Ÿ3»v/]ŠM_}…]‹cĻŖõh¶æI•‡įMICEZ3$7éŒßõF»AƒŽØQŌķ)XæK&NĚéÓq¤ ąųvcĮŻ­‹€ēŸŹBĒK/EÆ;ī@n—.Q³ÉėõbŻ'Ÿą×7ŽĄ–y󱭔IęĪ’=“L’P·Ct»öZœzė­pdfFĶ.+GŪ?^ 7Zkģ§Āµ©‹WĢ+āŠ±¾āš±Ėc1!99Š@?žH<“éŚJ {u8ŽÅhŽlŽßAO$ažš5ųīĮ±nÖ¬ć×PŌėŌ }x‡ ‰ŹĪėõbĶōéųį‘GæfMXĒŲ’“Ńaš`œóČ#ČķÜ9ā6Žæ‹žyKž{•ĒŖ¶Ÿ-) /» ē=ž8rZ·ŽØ];~ś óžõ/l_ø°ŹĒŗźÖÅYwߍž£G#Åā‰üŃ \ļI"®ˆØNt¶¶õmńċ/&į÷ßõæ¹nš WÆŲęebĒO?įĄŚµųäż<$U”Ā“ģ‚Ē™‹ņ¬øļ•^Čm}g!į°h‘ ļ¼£OuźÖĶ‹Ūoż|TOEv/]Š}撎ł³wbßÖšŚ’įqŌEEF+ōæöd vl‹%U'œ{u0Ēc°sDbqr"Pvš ꎋoæ OEõօhtź©ųó / é™gFĢ®‹į‹Ń£±{ٲjoKNĘÉƇćü'Ÿ„3''"6mśśk|4t(Ź ktžŌ“4\śī»čtłå5¶É[Y‰oĒĆO»ķ¶*GĢØÓ¶-®œ5«Ęѐ%Ļ?Æžń°£C!±ŁŠļß’FļūļÆv#(+,ÄGC‡bÓ×_GĘ&é bčŒ“„œh”īŪ‡ł>Š_ßz å„„a“Ńø1Īŗēœ~ė­HŽB ĻĶß|ƒ¹÷܃½+VTłŲ̦MŃēpʈQIäÄĘSQo捏?ŽĀ-[Ā:&ÅéD׫ÆĘ9?ŒĢfĶ"nSŃöķXšŲcųåĶ7įõT-ā’”šŠ“‡GæGAZƒ·Ä U`ū‚˜:xp½łFĪŗūnœ’ŌSÕ>ž›{ļˆ7_‹#+ W}ś)ZōéS­ć4 ŸŽQ›ē?żė_U>ĪS^Ž’^x!¶~÷]Äm²gd`ď?¢~×®?7!µOEN˜€Ÿ|2¤‡4Ł-[ā‚§ŸŽH„*Ŝ[oŊ·ß®ń¹š’éOņńĒH«_?–¢gÓW_į˻S4ÅéDÆŃ£qĪæ’±tā?>ü³nøå‡×č<®ŗu1dśt“ģ×/"v‘ų‚$L ·nÅ={āšžżQ9’Ą^ØV$äē_Ä£FEĮ"ĄU§F.Y‚:mŪVéøķ ą½žż#1Ɩ”„”3f ĆÅWéø9·Ü‚åƽ›ŻųóĻpēęFķ„Ō&ŹÄō!C°ł›o"r¾^£GćĀgž©QÄ”4/^vvüōSDl€œÖ­qÕ§Ÿ"÷¤“"vNB–<’<¾3¦Ź3ž|2®š5«Fѯ׋yćĘaį„ š«Q]M’ķvüł„—pJ”šÄ:(@ĀąXq1Ž<ć ģ_½:j×HJIĮ5_~‰Vēö1[¾żļPķy(įŪ¹3F.^ {†±V•9G‹Š0±]»Ø 5…#3£ÖÆ;<ūĒ“iųhčŠØŚ.æC>ś(ź×!$Ń)ھļõļ‚ "zŽöƒaČĒ#¹‹¬V9‚·ūöÅī„K#j łķ7-]•trbįõx0kųp¬|hž7£I\ūÕWÕŹóīæ {,¢6)Oš„“oø!*ē&ÖĄra0’±Ē¢*>ICųōĘQyōhXūW;†Ł7ßUńūWÆĘ‚ńćĆŽį„ Q€¬ŁńĆ#„µÆ§¼óʍ‹²Eš?ʎŒÉµIT*ŽĮ‡—]qńėēĢĮģ›nŖņq^ÆŸ ńHdeźąĮaĻo!$óʍ‹øų€ā]»0eŠ jŻĆWōQ•Ę UåóŪoĒĪŋ£v~{(@BP¼{7~~į…ˆž3Pz@į–-Xöź«acŁ+Æąą¦M‘4 IVG]üÜs(ھ=äńÅ»wcÉĉµ©÷}÷”ĖUW™¾¶ü7ĀĄ,{ķ5lÜ1›Ü¹¹øč7Ó¦éėsĒŽŲµ©mx½^|ü·æaĻņåQ»ĘŹwß­r_“ģå—ńLJFÉ"aļŠ˜ūĻFõ¤vóū”)Xį9ŸZ ·nÅ“+®Ø’s³hŪ6̼„]™QQV†éC† āȑØ]ƒÄ ĢōŃO¤ŅŅ [7Ü[XˆvłKĄė…j`ee˜į0ē¹>Š1;v˜V’©(+ ˳ńĖoDō³€×_“®øĀō5OyyX‚ķē_ŒØMuŚ“ĮÉ#F a÷ļųńGģżõ׈^“ŚĀš>ĀŚ™3£~oʎ ĖqHéßžļ’¢l‘°ģµ×"RE‘œx”ʜĻ(gĪoūį,żõ°÷Ÿ÷Ą1‡vģĄāēŸśuHl  Bő#ų}Ź”ˆžóp~>6Ļ‹C;w|}ŻģŁAϱīÓO#žę“wåJlüņKxŹĖM_Ó~łp IDAT_5ujČęéÓ#j¼Ś£¦ į\sļÆæāĄŗuµiēāؐ•…53f¶kŚ“ˆ^“Ś€§¢ß=ų`DĻh®GEY¾č”°ĪńÓSO”4//b6e·l‰‹ß~é ś½ę­¬Ä¼ūļŲµČ‰Ć‚ńćq¤  bē³%%!)%Åōµļ~G y޼ß~Ćļ“'GĢ&8’É'Ńę‚ L_[8aŽ8Ńėk  ¶łóq“Ø(¢ē,޽^vņV® øĻś9s‚žc}RVOŸŽO®æ>`5£‡aŪüł/ĶĖÓĶ“IJI3'G·ŖiŠĖ„‹°$„¤ųB²ŁŠų“ÓŠ¢OŻMŪ–œt2é”;p`żś€Æo1”ÜMu»ż&Ō;³³Ķŗ"©n7RŻnRŽøEŸ>hҳēń…ŖÓVig˼y_#äDeå»ļ"ķŚˆ/ÕķĘŻyyč`@æņæ’ é€šTT`Y„«ć5čÖ Ż‡ CŻöķM__ūÉ'8“cGDÆIj7„yyOæäŻwqS€TČĆū÷‡•=šó‹/F¤ —"ŁnĒ©7ߌö]dśśŃ¢"¬üļ#v=b AŲn˜Lܲ_?ōøžzݶ3ī¼ŽĢĢć’·8­Ļ?pҐ!{ģXøėÕ xŻ`}3»zŽ…ʧŸ~ü’:mŪ¢ėÕWūv°ŁpÖŻw#£qc8²²ŠēžūqńŪoćÜGEŻMzöDįƃ^wŪ‚_Ėūķ7]X8­~}Œ-(Š­#rÅ“iøąé§’ŅŠ”¾``³įźŁ³1|ž|\6y2īŚ¾żųüŠ«>ż}BL Ļūķ·ĄÆ„^ĻQ£p»F(¹źÖÅ?óóŃDół łųcō5 uŪ·Ē›6aČGįo_|kēĪ ‹Ÿ-(8ø€¼ßh§LHmą—I“"z¾Š£G±é«Æ°oÕ*Ó×½••Xńī»Aϱe޼ˆF?‰R?‘“°/÷zū,Śp|Ÿs~YĶ›£ż Aøōæ’•…µl6“½šB€##ż'L0 Ķ+жoX)„üšamŪ¦ŪÖną@ō=śų’݇ Ć W_=mØŪ®Ī}ģ1=t½ž:ŗ_wŠwļFNėÖų’öī;*Š«żųwéE”^T@ÄŠ HĮб”  FĶK,?c,)&y“˜¼¶h[Ō$6DJQD"–Ø*MA©KŁūū™—…Że!€š<Ÿs<ĒŻ™ūĢģĢ2wīsļÕ0`źź*² q¤å-efм.ÉÉAž_ĮĢÓ Ƭ cGGX6xŖaā䄌Ø(h››ĆbģXģ:›Œ±ÉŌ“Eģ—-ķ½ōšptīŽŗ}śzyy”¶ŗ–>>źZ\Œ‘ «3Püų1¾74Äw::ņõ•9¦šŠŠ6æ©!ämVžŸßę£Ų°ŚZ›>÷Ož”ų™ęZŒ߀)uźEuu‘e\Kķ+ŠźźÜßUmm˜ŗŗĀpŠ .…'/_×śŪ eµ±ŒČH©qŅP{d>$nߎ°eĖ$¾_˜–†ēRZ,ónŽI “WR‚Š––ČgÕÕEø‘WR‚r—.ź² ŗŁŪĆŲÉIäćÉÉIr[=i)ysPDŠĘ7é‘‘WV†‰“Ą|Ō(”dgs7Ɗźź0<‘‘č6t(²¶lĪ-Y‚Ó Č^0c(•póZöģY“'ėé01‚ūcg1z4*‹‹ŃóÕģ”&ĪĪȾv U„„č>t(ā~ųQkÖ ŲßæEO/Jóņ$¾'ócĮĶkbźā‚œė×”®ÆƒW·Mœ‘ÉU¶ź+e„¹¹2Ē@jš\ćøņ’“Q^PĄUŒĢGBZX÷XY …ȽqÕeePÕÖę*r-ŽK†üYBž-ĒƊ“’źõļa~(’¦9ĄĻOdāS£!C`=s&ĄxŲ0ŒŁ¾c¶oĒą¹s¹»E‹ø)ā<ūė/©yóyZIŻ>’s“\čōīU/^@³GnŁœĖ—1`śttµ³ĆҌ L=rs¢£1åÕ(Z†bUa!Tµµ%–+­å–†„55"•w98}ō—ĮŌM$Ų{Ü8īµ¢šœV­‚’†Ōõõį¾a|öģĮš5kй{w@Ļ#Šwņd©eKĖČhœa`8x0VŠŒłnL Tr–/ǔÇ!ƬŒwcc1+* ¾ĒŽaEv6—żŽõėRēüÖŌ“ūŌ¤żQDŠźF®Ėž>ų[·ø›jóQ£šWP,ƌœ‚ŗŠā'OP”™‰‚ū÷ŃÕÖŻģķ[W¶„ѤÄuOˆ@'##čõėuh™™!=<œ»©6vrāž¶ÜæPźŌ©Ķb rŃ0®®¶¶PīŅę£F!+>ى‰°ōńŠ–tūōAęåĖ(ÉÉĮ½ćĒᄁ³fµ8.Ič@®Q? &"#2=GŒONꎎHŲŗz@³gO˜8;#óŅ%°ŚZÜ9|Šźź˜}éR«&f’!’6MnĆČテµ5€ŗėeÜO?ašÜ¹ÜG†ĢŸīŠģٳ¢¢ Ŗ„…šŹJō›2¬¶ą²f Œ† ‘\0cŅ[o32D^§GDĄpŠ .MÖ|Ō(ŌTVræ§J08QQÅOž“ūT‘¢¾ÓqCé0óō„‚Ŗ*LœœūŻwWR‚ÉšįÜ}øsų0RĻĆ»11p]æ^ģ ŗ4õ e‰ééķŪ(Ķ˃™§'zyy!óŅ%¤GDŌuāāńø Ā–/‡fXxēŽH’ŒæØ6jv€ĢĖ—ĘŠĆĶ ę£FįĮéÓH „Œ‡ Cī\ėE°Ÿ®żų#|vķ˜›ŪøÉ·¹÷Ņ#"ŠĆĶ ]mmQQXˆĢ‹ń49¹.®Wia@]*Ü.{{T——cžµkčéįŃfqņoÓøE9’ī]”dgs­‘ŻQUV&š¦łź·ĖhČŌVW#xĘ \ųæ’Ć£G·Ø•“ÖŪŖŅR‘׏¢£!¬®FW-ȍ[I»;8 (3ŏ”ŗ¢jŗŗ“— [ÖJŹ„‘™ˆ;ėļE<zŽåĪ¹‡eõ׏ĒCw\\·ŒĆ#ĒRśs6)[J*qć V[‹ŒØ(‘ ƒ‡.ĄŲŃjzząÉÉĮxŲ°ŗĢ‡Š @NŽ«č—dgĖ@’T‘B\?‡įį02}&L@NRJssńšĀō7®īĀzuóŹjkqtŹœ^°N«VĮó›od/˜Ēƒŗ¾¾Ų·Ō šVf«{Ŗļīsoo<8}©gĻ¢“zyy”s·n\ómĮ½{Ųae…GW® <]mmeKZ敆iõŖJJ^^^PŃŌDNRRBCa4dzø¹‰ä@×VU!jķZ?v‹”ŪŠ”2Ē„caŃ¢ø†‡CESgĶāFK E77 "2‚UQFö{xą^p0ʵ`¤Umm©é„üŪ4nQDo¢,FĘŻcĒ ŪÆ“zõ‚Ŗ¶v]+é„K(øJ:qéX-.»­·Õeexrõ*ĢFŒØ{ŠäģŒÄ;`źāMM®ļP×IWĒŅ3ĪIђµ’Yˆ½v^Ż‹ØhiĮpą@T•” ļęM®_’0 …xžąHŚb‹Ź–Šhša¼J½öšØĖ05 )§N”ųńcō;zżśØK…ĪżóOd'$ 0"Bā¼h҈+›¼]Ø"…^ß¾M–=¾rĀźj šóć:…„„†¢ūŠ”Šėß_tŲWĘpcļ^œ_¾¶ļæ/s+H‰)RŠjjčbjŚdłĆšpčöé£!CšąĢTįQt4æū.ĒÄ ¶ŖŠūlå‹8ˆ¬ųx ™?_¦˜@WĢńØg8x°Ųįr†‡Ćrüx¤ž90†Ā“4Ü»‡žS§ŠŖöįłó(ÉΆ••lAńxRÓ/ŽnUÆųŃ#¦¦ĀŅLJ›så~HŗŁŁAAEłÓ5^}Śęęb[ Ä–ŪŹŌ;Bž©Ä];ĆĆa2|8䕕a>jī;†¼7øVҧÆ:¹ę’õ¢7lĄ;ū÷cĀÆæ6é$Ži­·;˜u7wfžžčįźŠÜ7²gĻ`>j”H‹ņ³;w°ŪĮŖŚŚx/)Iz*X#rŠŠ-Žņļ$īŚy amm݃ĒŃ£‘qń"Ņ#"`éć9…ŗĮT^§§ł|ōtw?)Ij)qZ|ķDD@UG]mmaęé‰Ō³g‘ KŸŗē‹Į„B««ń›—œ> æŠP8­ZÕ¢ø(ĆąķG)Lœ›,«./ĒćŲXō9’{zžąōi ˆŠĀB.Ķ ae£0- Šjjbg§¹Ō(qq„GD@³GT¼xĮÅp?$½Ē¹Ńēāb />›:%1®įĆ%¾§Ø¦ćaĆÄĘÕŁŲXdrÅū!!P70ą†Ö23Ćš5kŠĆݶļæuƒ&C%1<źß7óō;MzDUUń$.@Żamm]Óō«Ž²VžžSWWŲ-\ˆ‚{÷d±~(fBHq-Ø‘‘PPUEŸ ŠŁŲOāāźŅ4Ē‡±“Ņ“’^\ææ{{£——¦KaŖ1iæŚbZPÓ#" Õ«zW÷ ‰±ŗVRww,ņ›śģömģ:Yńń½u«Ģ1i÷źÕāŌ\ņļ$īŚ©*-EÖÕ«čéįĮe>¤„„ ŪŠ”č9bʟ?ēF“|ƒŸ¬­Q’›‹9W®“ص®„™…©©(ŹĢÄĄĄ@¼xų„¹¹ø"6Ć Ŗ¤§ł|œęó1āėÆŃŁŲXęø¤e>·żśIaźāĀ ×PzDŠ?ę&Ą+/(@Ž"Ć9ŽŻ±įįækŽŁæwkv&ńz G²ĒRĢ=%ŁŁx‘žŽŌ³g¹e)””PTS枈+ØØ`Ij*&:„)‡ĆzęLÜśżw™bRīܹي‘ÕŒM–å$&¢0-M$ŻźžÉ“HˆąŽ‡’†zø¹aŅoæĮvĮœ^°9‰‰€Ü¤$J’Wd¾1:‹;-, ÷Nœą:²‚1Ü BŚłóÜgT45įøb&<åĪ¹Łk*+‘!±iš'/Ó¦I‹q-Ź„yyČæsVžžH «­EJh(ŗŚŁĮĄŹŖI+izx8ŽLœˆ^ŽŽ0ńģĪt³³CžŻ»ČżóO™Źm®EŁhČčöķŪdØŽŌsēøŹŌ øņ$†‡’oŸ ą°lTut“˜ČU¢%%Hˆ€°ŗZl™ŠjjčóĪ;2ÅOP—łŠø’˜ˆŚŖ*‘I SBCįør%×UŻĄóył2”_eD­]+S™ZffR[@ĄzĘ \žā ‘eQQČæ{W¤B~ļųq‘ū(% ō÷õ…óĒ£$'Į~~ÜĆĖ'qqx™•%±L+??™ā'o6cG‘&"WÆFLKF±j%Ķž=±ųŽ=™žģ ««±½_?¦„µ{\Ī«WcÄ×_ĖōYV[‹ŻŽŽ\ U{Ńė×ü7Äv|'/9»ø§DķÅķ³Ļąśé§ķZ!o«¤;qšĻY¦Ø®Ž!sē"”A’ }++hššrOP;¢ļäÉŠ45ÅĖģl$ļŪĒ įm=s&²š<źžü.¼s§Ł›Ø›ąd+ę j-§>‚ē·ßvXyäķWš—‡-={6é‡8dž|Ü?qåźR€‡­\‰ŲWē—¼’,'L€µ5„55øā7 ¦ń°aPŅŠūPÜ7l€K3••ņü|l57ļ°aqµĢ̰čŽ=™’ö“7U@dPUR‚Żķ:󦜂f†…q“Ź"#* æ{{·ėdVzżśa^|<7C©,Jrr°Ė޾ÅćzĖJEK óÄv•¦½o2zy{cʙ3ąŃš€„ˆ%¬®ĘöžżÅVŚĆĄY³šĪ¾}Ķ~Ž …ŲikĖ„«¶'--|–FĆt“»°r%®žšC‡”„¦§‡ŅҠܹs³ŸŽ°ׯ€©AAč7eJ‡”EŚuB—’†üϜšž^»•įżß’¶Øņ==<ą½iS;ET7—ÅōU>@£kWų;Öl*YkČ+)aźŃ£-®|ĄĄĄ@ “ҧäļŠėßS„Ź!RČ)*ĀćĖ/;¤,ø7J ‘„''ƍ;dT* ØņAZÅe͚;wÜ>żT¦Ź8®XĮĶ®ŽžL]]Ńwņäv/‡t Ŗ€ČH³GL ;īõß5låJŲ/YŅŖuķ/†ÓGµqD€r—.˜vüøŲaödŃŻĮsćāŠÅĤĶbRÕŃĮ̰°’ĶžŚ #7nÄØĶ›ŪōFĆŌų/^”łĒš³~S§r³Š·'Æ¾jŃļOĻ#dN5m-ė€Ų-ZŌ®e.-­v}čXĻdųpŲ¼÷žĢŸWTW‡’éÓķś7°‹‰ ¦9^ †ß&o6JĮj”Ā“4ņńiŅa±5äą½iģ/žŪŪŗżĒ7Oęy*¤Ń67ĒōnÖŅæ£47ǦOĒ£ččæµ®vv˜zōh«fēĮéÓ™3‡Ė›m ž¼<–.…ē·ßŅŒĘ„“@Ui)ö †g·o·Ėö­0ńĄV­{rÖ,ÜlåŗŅtwtĬØ(™'3%D’š?DÜ÷߷˶»˜šbžµkP××ońŗ÷OžÄŃ)Sž7¼}QźŌ s®\į Amŗ]ņzÉö ŁÓŖŚŚ°ž1……xzė74dKuµµÅŌ  ō4©Mā2°¶†™§'žŽŗ…’œœVmƒ'/!óęaźŃ£mÖr”¤”AsęĄÄŁyÉÉ({ö¬Eėw66Ęȍ1vĒŽMšŲŽ½a·p!TŗtAVB‚ČLń²0óōÄ“ą` ¤ÉÄi!y%%XŒ…§N”ņŋ6Żv/ooL9x°Õ,_NÕxÄ”æĆbģXL?qJ4ó9if#Fąyj*žŻ¹Ó¦ŪķdhˆgĻBĖ̬Uėėöéƒīxpśt›< €ĪŻ»cfXŒ† i“ķ‘7µ€ü ÷ī!jķZÜ ‘¹ĘÆŪ§\?żż§Mk—¦DĘī=ŠKŸ.s+ O^–>>šųņĖ6iõDXSƒ§Nįö”CȈŠBÅóēb?§¢©‰īī0mś¼óŽĢćż·VŁÓ§øõĒøwü8²Æ]“8t¦¶…,F†u@€ŲÉĖ!-SQXˆ ©S›LšÖZ6g1?žŲ&sÜśķ7œ]¼ųoī#§Ø—5ką²~=„ސ6ÅCÜwß!ņ“OZż “!ĆAƒ0żäIt15żŪŪzž’‚£S¦üķ ’™§'&<Ų®żoÉėC6P𗇔ŠPd^ŗ„ü»wńņÉTCI]ŖŚŚŠ±“„ń°a°=ŗCgæĶILDź¹sx‡ē))Ø(,DUY”;wFčõė‡nn°?ŒŒ:,. nŌ™āGš"#ƒ«ˆØhiA«gOhöčńŚ:s×TT  %%ŁŁØ./‡œ‚Ōõõ”Ó»7żŅ„ÕՈžņKÄżš7ļGKu66ĘČļ¾Ć€éÓŪ4¶ŠēĻ»q#ā7onńŽ½Ēƒ÷¦M­īGGˆ,RϜĮł+šüĮƒV­/Ƭ ūE‹ą¾aÕŌŚ,.&ā^p0Ā?śE™™-ZW·OøńśMŚfń7U@!„¼v„¹¹øōłēøyąj**dZG]_Ž’÷śĮķŚ·¢ųńcÜÜæ)””ȽqCb‹·nß¾°3ƒfĶ‚¾•U»ÅCHCĀźj$ķŚ…˜’üGź~ É+)”æÆ/Ü7lh³¾•āT——ćī±cųėčQ<ŗ|U„„b?§¦« 3OO šóCļ±ciDÉŖ€BycŠ‹ńąōi¤GFāé­[(ŹĢDeQä Ŗ„m tµµE///˜yzvųU%%\+imUxņņčdh]KKØźčth,„4ĄBd^ŗ„‡. ;!Ļ<@Ea!jØji”‹‰ ō @wwō™0”ĆĻWaM ^<|ˆéé\EDU[ZffčbjJż)’eØB!„Bé0TŻ$„B!„tŖ€B!„B: U@!„B!†* „B!„CB!„BH‡” !„B!¤ĆP„B!„ŅaØB!„Bé0T!„B!„tŖ€B!„B: U@!„B!†* „ņ†©ØØĄ¶mŪPPPšŗCkļŽ½øwļŽėć­pžüy„‡‡æī0÷ļßĒŽ½{¹×ńńń~5/$$±±±Æ;Œ6U^^Žģõ-°sēN<~üXęķFFF",,¬-B|+eggcĒŽØŖŖzŻ”P„BŽ0—/_Ę|€Ż»wæīPšČĻĻĒܹs±~żś×Ź[aɒ%˜={öėpåŹ,^¼˜{½~żzL:ą5F%Ż·ß~‹C‡½ī0ŚŌŋńĮˆT+//ŸĻĒķŪ·eŽīīŻ»±}ūö¶ń­“oß>,Z“—.]zŻ”P„BŽ0ƇĒĪ;1gΜ×Jzzz8pą>’üó׏głņå8pą€Č²Ķ›7c’žżÆ)"é>żōSAYY¹]¶’ī»ļ"$$¤]¶]oįĀ…8räH»–qžüyųūū·Łö\]]±mŪ6®b*0cĘ \¼x±ĶŹxSTTTĄßßŃŃŃķ^V@@~śé'øøø“{Y-•••dff¾īPŽT!„7Œŗŗ:ęϟƒ×ŠXčׯßėćsšąĮ&i5cƌ§§ēkŠH:'''Lž<¹Ż¶ąĄµŪöą÷ßGaaa»–‡¤¤¤6Ū^§N°xńbčėė*++qšąA”––¶YoŠņņr:teeeķ^–‰‰ ,X•v/«„²³³qźŌ)TWWæīPŽT!„7ĢóēĻĮē󑖖HIIĮ×_ŒŒ ųłła芔˜;w.^¼xĮ­S[[‹7ĀÉÉ ĪĪĪX“h—ZsåŹųųųĄÖÖHMMå֋ŠŠĀoæż†Ė—/ĆĖĖ NNNFvv6ęĢ™ƒ”C‡bžüł"7G+V¬@TT€ŗ'œ .Dqq1/^ {{{L™2÷ļß٧„„&M„!?IDATĀÓÓÓ§OǦM›¤Ž”\¾|ćʍƒ½½=&MšÄŻ>žK–,½½=FމÇsė”——cŃ¢EMbIIIį>³qćFܾ}Ū·o‡³³3<==›ōƒø’>üżżakk‹éÓ§7éļ²gĻøŗŗbŲ°a˜3g?~ >Ÿ’’;v |>gĻžģŲ±;wīYļŽ½pssƒƒƒ>üšC¼|ł’{ļēŸĘÕ«WńūļæĆÕÕīīī"ū(°vķZ899ĮŻŻ«WƖ˜óĪĆžżū1nÜ8xyy5Ie:räžóŸ’pÆüńG$&&båŹ•3f ÷“öʍ˜2e ģķķˆŒŒ n”Pˆ­[·bųšįprrŸĻGFFų|>„B!öķŪ>ŸĖ—/ŹŹŹšÉ'ŸĄĮĮ#FŒ@PPHLϟ?ĒŹ•+įéé‰É“'KģQTT>ŸĻݼół|®ÆMYYVÆ^ ø¹¹į—_~cLģv€ŗ–«ŒŒ ¼ūī»°µµÅĢ™3‘•• .­éōéÓxśō)ų|>>žųć&ėGFFāż÷ßGMM ·ģųńćMR¬V­Z…øø8€ĻēćįƇČĢĢIJeĖŪ·oŸĻĒõė×¹uŹĖ˱téRŲŁŁaŹ”)Üo‚¬ŅÓÓ1kÖ,ŲŚŚbüųń\+KRRų|¾Hå-22›7oY’«Æ¾Ā¹sē©©©˜9s&lmm1mŚ4ܹs‡ūÜćĒ1kÖ,ŲŪŪcÜøq8pą>|ˆ+V¶mŪ>Ÿ?’üSdūµµµXøp”H?©śļ¶įļCXX¾üņK@tt4ʎ L›6 źĪS>Ÿ/µČŻ»w1mŚ4ŲŚŚbģرܾUVVāÓO?…££#\\\°eĖ…B@UUų|>nÜøĮm'99|>ŸūŻŗu+’’’°gĻøøø`Ĉ8~ü8€ŗ¾Vß|ó `ŻŗuąółÜłõoFByƔ””`ēĪČĖĖP÷ōlƆ šööFÆ^½ąåå…ß~ū _ż5·Īڵk±zõjŲŁŁaāĉج¬„²²2žüóOŒ9žžžHLL„««+Š‹‹wīÜĮŖU«šžūļĆĖĖ <³fĶ˜1c «« ///ģŪ·Oä&śĄ\nzUU~śé'ŲŲŲ ¦¦S§Nŕ+W°pįBīóŃŃŃ>|8=zWWW¬X±B¤"ŌPrr2¼½½QVV???īIqmm-ƌƒ“'ObҤIŠÕՅŸŸWØŖŖĀŽ;Db‰ŽŽ‰%44&L@pp0&OžŒņņrāłóē€gĻžĮÕՏ=‚ŸŸRSS1bÄTTT~łåĢ›7½zõ‚ÆÆ/*++”””!ń»<ž<"##¹×Ū·oǼyóЧOųųųą—_~ŸŸ÷~xx8f̘mŪ¶įwށ‚‚fΜ‰ōōtu)][¶lĮŲ±cįåå…ģģl())‰-ū»ļ¾Ćœ9s ­­ GGG<}śTäżøø8œ}:śöķ‹ŹŹJĄ¼yóšß’ž^^^2d–/_ĪUĪkjj°sēN‘Šwć²Ī;‡©S§ā×_ŤI“PSSƒéÓ§#;;[¦ćšÆÄ!„¼Q222våŹĘc‘‘‘ ;tč÷™Ł³g³2Ę+))aŖŖŖlķŚµM¶åēēĒz÷īĶŖ««cŒ„¦¦2Ē~üńGĘc[¶la<Ż¾}›1ĘŲ;w¶|łrn^^^lņäÉÜk¶yófĘcEEE [¹r%÷ž¶mۘœœ«ŖŖbŒ1ęääĆŹÅpūöm€ŻøqCģžĻ˜1ƒ™››3@ ²<,,Läø…BęģģĢģķķcŒ½xń‚`~ų!·Ī–-[DbqvvfÖÖÖÜė‡2,$$„1ĘŲśõ뙁+//gŒ1–™™ÉäääŲŁ³g™P(d&&&lęĢ™bćÖ××g?üšƒČ2ęėėĖÅŪ­[7öī»ļrļļŽ½›`wīÜaŒ16iŅ$fbbĀJKKcŒ2¶k×.ĘcS§Necƌ[~C„„„L]]­X±‚[¶sēN¦ŖŖŹ½žąƒøcĒcćʍcƒfµµµÜ²E‹1sssī»»qćĄ˜@ `šššléŅ„bc——gūöķć^ß¼y“`.\ą–ŁŁŁ±yóę1ĘŪ»w/ćńxģÖ­[ÜūŽŽŽlŃ¢E÷SCCƒķŲ±ƒ{}ėÖ-€>|˜[ęėėĖŗwļĪ„B”Ųmhjj2īõžżū¹}d¬īœčŻ»·ÄŖ««™¦¦&ūüóĻcuߙ¾¾>SWWēĪńąą`fhhȄB!wĪÅĘĘ2Ęžw …††rŪ,,,dŲ²eĖøe›6mb<ÆÉuQośōélÜøqÜė-[¶0–Ķc¬¼¼\äüķŻ»7ćółÜ>ččč°nŻŗ±³gĻ2Ę‹‹‹cŹŹŹ¬¼¼œ}łå—LWW—•””0ĘĖĪĪfņņņģäɓŒ±ŗļaėÖ­Mb*((`ømгfͦ««ĖwsęĢa&&&"×I÷īŻŁįƇY||<ĄžśėÆ&Ū fXYY™Ųr6lŲĄŌŌŌXAAČņŒŒ ĘćńøkŒ1ĘęĪĖ“µµYuu5+++cXpp0÷žńćĒī:5j³°°`Œ1ĘrssĒcüńcŒqq?xš@āqų·”ByK4ģ\Ł·o_ī)ć_ż…ŠŠ ±łüÉÉÉ3f ęęę°¶¶Frr2÷--- 0Š£G€÷~÷īŻ¹YbėÓ§„B!ž>}ŠŚŚZÄĒĒ# €‹”9ׯ_‡O“'ūÉÉÉŠŃс““€Ēćaāĉøyó¦HŠøXž={Ę-6lfffPVVFnn.ąŚµkššš€ŖŖ*ĄŌŌŚŚŚxņä ž={†Ē·ŗßijgϐ n٤I“@$½ĆÖÖźźźź¾CCCī»611Alll³Ć ß¼yeee lQŒ–––“ūß­Įµk×0jŌ(¶¶†¼¼<ž""}śōAß¾}qźŌ)@ll,ÜŻŻĮćńZ“? ūõė׌1äēēĖ“nrr2lmmѵkW€ŖŖ*FĶ]ūžžž\ėS||<“µµaccĆÅGGGØŖŖāڵkpqqA§N]»v…—"gbbŅź~,žžž(((ą®ćóēĻcźŌ©8}ś4„B!233‘ wwwtļŽņņņŲµkW‹Ė¹~ż:ÜÜÜ ££#²¼¾Ü†×åĉQXXŲ¢a‡Źõ?144„–––Ģ-A’FT!„·šš—*Qó\£ŃPnn. E–™˜˜pė4&®§’’’Ä“qźožņņņP[[ SSS™×ĻĶĶ…‘‘‘Ųå"7qĘĘĘSuĘ"-Žś÷srrpöģYōźÕ‹ūWTT©ĒYõ7# æ---hhhH½QQWWēņŚ×¬Yƒ®]»ĀŽŽ^jZQ}ꇉ‰I«b­—““ƒ?žųƒ; …­:999Ø®®†……·½#GŽp•›ģģģæonn.ŗté"’VæMYoµµµ”ŖŖ*SŠT=OOO$$$ ““ēĪƒ››<<<  ®VÊWkԟ˲Īs!īŚ766ę¾·‘#G"-- ™™™ ƒ««+<<āćć+++čėė£[·nųę›o°eĖx{{·(Å)''GāļŠ‚‚ōōōøe-=gÄių»Bš’ķq!„7Vż9yył&ļUUUq7 õ:dT ®- ¾b#‰@ ŪZRUUÕ¤U¤~ßŖ««ÅīK xxxˆō+++®SvkĖ©’žÄ}²ŽŽ£„„…ÄÄD|ņÉ'Xŗt)²²²šķ·ß6ł\}Ÿ•æ;Ä®@ €fΜ)²|Ȑ!ˆ ūńŠŅŅĀ/æü"²¼~“·ŠŠ tīÜłoÅ+ī|Æ-ė;c 555-:v#GŽDUU._¾Œ°°0„„„ ŖŖ 7năpćĘ xxxȾ#m ŖŖŖI’$EEEī\sssƒ‚‚7įŗuė`mmeĖ–!)) ±±±ųč£Ō}w...Xŗt©Čöś÷ļpvvʍ70ž|xxxąĢ™3šņņ’)Neeeøøø ""555=z4LMM¹Ö˜¢¢"‘ŹŪŹ•+aee>Ÿ{{{$%%5©h‰#ķwEAAAäĮFKĻŅrT!„·\ż“»ÜÜÜ&éMRO `ffÖ!±éźźreŹJOO999M–KŚčėė‹Œ&ÕZPQQ;tn}„MRėQsźo’īCMM Š‹‹Å>™•D]][¶l©©)V®\‰÷ߟK«WNJķŽhhhˆ= Ļ»ĘåKŚVII <<>>8ž<„B!>łä‘Ļ{{{#>>666ųņĖ/ńć?6[†¾¾¾Äß•ŹŹJ”––r)f Ļ™ś 6 ”Ū¶(‹BŽrżū÷‡‚‚Μ9Óä= ‘ ĪŹĖĖ‘””KKˉMSS:::Ü0¬šMm±¶¶Ę¹s皌Bdaa¬¬,ū ÕÕ՘={6āćć±zõj\¹r…›}¹qJM{įńx˜6möīŻ‹={ö 22’÷’'uŁ³gćĪ;x’ż÷‘˜˜ˆ}ūöqó‚ččč`öģŁˆŠŠĀöķŪqšąA̟?æĶā?>×±:22ēϟĒŅ„K! ”¤¤„3f`×®]Ų¾};āććńŸ’ü‡ėlhhˆČČH\½zUl¼¢¢"üżż¹ŁŃĆĆƱxńbX[[s7»ĶłłēŸqāÄ $&&āŪo慚ššŲI!-,,`kk‹O>łēĪCPPöīŻ‹źźźUB,X€ŒŒ ̘1—.]Ā™3gšį‡:wīŒI“&įūļæĒ¾}ūpõźU|žłē\Ś””!‡„„899aąĄx÷Żw„ŲŲX¬Y³żõĄĻĻ%%%˜?>āāā°lŁ2JĶ£744Dxx8āāā'''˜››cįĀ… Ćoæż†­[·bīܹRSÅ.\ø€ŲŲXüžūļX½z5ø ‹””!rssqöģY;vLāńóōōDvv6׉Ø»™üų±Ō H§N ””S§N!&&Fd@‚–ŠŠŠĄĶ›7qéŅ%zõź….]ŗØ«0čźźĀÜܜKĶKKKĆwß}‡øø8œ:u ‘‘‘\YĶ DYY|}}ćĒ#((ƒ†µµ5–.]гgĻāȑ#ųöŪoĄ Famm={ö &&?üšĀĀĀĄćńš­Õ«ożæaƦ©©É0 Ī­wčŠ!ęīīν®­­e666,,,Œ[öõ×_³¹sērÆ=<<ø!KJJ˜ ‹ŽŽęŽæuė³±±aOžą†×|łņ%óõõeņņņLQQ‘9::²””ĘcūöķcŖŖŖL]]–xłņåģć?ę¶]RRĀüżż™’’ćńxĢŻŻ„§§sļÆ\¹RdHcĘź†ężé§ŸcŒńł|Ö„K€™™™±'NH<†·nŻbVVV 311aŃŃŃĢĘʆ2ĘŪøq# ä>ælŁ2¶zõź&ŪŁ³g344d˜‘‘[½z5«©©aŒÕ}·cĒŽerrrLII‰¹¹¹qßū¦M›˜’’ėܹ3ūꫯcŒ„„„1Ęćń˜ŗŗ:óņņb÷īŻćŹŚ¼y3ėŅ„ ćńxĢĒLJ8q‚ĶŸ?_ā>žüóĻLEE…uźŌ‰†śĪ;ĢĮĮ`***ģ½÷Žc•••·”©©ÉŒŒŒĒcJJJ,00^•1ĘņņņXŸ>}˜¼¼<0`ĖĶĶ»üü|¦¦¦&²nyy9SWWgyyyܲ¬¬,fccĆn޼É-ūōÓO™¢¢"ÓŅŅbŪ¶mcÅÅÅĢĘʆrš±’ĖõĆź6vłņe¦©©ÉTUU¹ó"88˜™˜˜pērżšŪõÓŠŠą¾3Ęž7\trr²ČgOž<ÉLMM¹m-\ø•••±üü|ęääÄTTT˜‚‚srrā® Ęź†ŁUTTdŚŚŚÜy,Ό3Ų¦M›D–-]ŗ”­Y³Fd---™¼¼pxÆ_æyyy™†ę•t£Óū"ķXŅ Š¬7rrrėF¦%ė¶E壹ķ4yŖž¤ćŃ\ü-‰YR-ŻoIūŠ\9 ‰«hČRłuū­Ż†“ėE\|õ±Å‘v\%}Æ²ģ›ø%•%ėœB’HŚnsēåß¹f¶łŽ’)ØB!¤]ÅÅÅ᧟~‚ ņóó±uėV̜9³ECóBłē  !„vU’d3((JJJX¹r%7æ!ÆŪģŁ³¹ł,!ƒś€B!„B: %£B!„B: U@!„B!†* „B!„CB!„BH‡” !„B!¤ĆP„B!„ŅaØB!„Bé0T!„B!„tŖ€B!„B: U@!„B!†* „B!„CB!„BH‡” !„B!¤ĆP„B!„ŅaØB!„Bé0T!„B!„tŖ€B!„B:Ģ’[oHŖ™ēKIEND®B`‚libwebsockets-4.3.5/doc-assets/lws_cache-1.png000066400000000000000000002212221476025525100212340ustar00rootroot00000000000000‰PNG  IHDRRlc­Ų pHYsPÆPÆdŁŅ¾tEXtSoftwarewww.inkscape.org›ī< IDATxœģŻw|ežšĻl6eÓ)H”ׄŽCDD‚t"ÅSQ¬Xńäī<õwœ(8,HQEŠ;„Z é!½oɖē÷Gnf³%“Ę&š}æ^¼ŲģĪ<󝯣y¾óĶ„1&č `€®’ū× €'×’żO!„B!„ÜkŹ(”ø ą:€kŽø,kŽ MYcĢ Ąƒ0€_S–O!„B!„Üå ÄųĄļ‚ T7UĮM’`Œu° Ą|¾MQ&!„B!„r+°ĄjA2£Œ±Žž`ĒĘC!„B!„3ÕØIüS„Œ†Ņ cĢĄSŽąŽŠB!„B!D2€wüKM}W®w€1Ö ĄtÆļŗ„B!„Bi“D³AH¬ĻJ²ś,Ģ{ ĄIPåŸB!„B±—N1Ę×g%I ʘĄ{ĄŠG!„B!„¦ć ą ĘŲGŒ1Iuū:»üÆæ’—ØčB!„B!-Ė ‚ µµĶcL@MåaÓÅE!„B!„&ö €ł‚ ¬-PW3÷@•B!„B!¤„›ą#[ XmĄ{Ąś¦ŽˆB!„B!Ķę/‚ |aé‹ ĘXOԌöļŚœQB!„B!¤I© į|ķĢŒ1gēt»B!„B!¤i]ŠO„jń“–ĘxTł'„B!„BZ«ī^¬ż¤I ĘX'‰w((B!„B!„4=%€ī‚ ¤ŸØŻąļ Ź?!„B!„ŅŚ¹X!~‚·`Œ…Hąt‡ƒ"„B!„BHÓÓˆ0¶·xTł'„B!„BīŽ^0ž!cĢ @€6v ŠB!„B!MÆ@  c €8PåŸB!„B¹ŪųxøŻ`–żb!„B!„BH3š cLĄĻ¾ńB!„B!¤äh'ŠTł'„B!„BīVmō”jļH!„B!„Ҭ†Étµw„B!„BiV]dŗŲ; B!„B!„4«.2ķ!„B!„BšU'/{GA!„B!„få)ąnļ(šŚ7’’”––Bø»»ĆŻŻ:uBxx8är¹½ĆlõŹŹŹPTTÉdčŲ±£}ŗGi4dgg<<<ąļļoēˆ®ŖŖ yyy///“iÓĘĪŁG^^ŖŖŖAAApvv¶sD„“~J„ąććcēh!„»š”pµwMa×®]˜1cŠ„KÄÄÄ`Ś“ixōŃG±xńb̜9&L@·nŻąķķŁ³g#>>ŽŽa·j_|ń†¾}ūŚ;œ{ÖåĖ—łēšŚkÆŁ;œFłć?ų¾¼óĪ;öĒnž}öYž>œ?ŽŽįŅźdffb͚5˜1cBBBąźź ųśśĀ×ׂ @”P ** O>ł$āćća0ģv«öŲcńß­§žzŹŽįܳ>ūģ3ž9ģŲ±ĆŽį4‰qćĘ!,, ]»6nÜņ!C†š÷fķŚµM!­Ž›€`ļ(£ØØsēĪÅü!yŖŖ*lŪ¶ Ū¶mĆĢ™3±aĆxyQOB!¤5«ŖŖĀ+Ƽ‚ 6@§ÓŁ\V­V#!! ųōÓO1`Ą¬[·QQQw(ڻ˭[·šš ¼%¹óJKKłēPQQaēhšFVVRSSįääŌØr222““())iŠŠi„VŻ^©T"66ÖäYŪ¶m1nÜ8ōéÓ~~~pss”——£¢¢/^ÄĪ;QPPųī»ļ••…żū÷7ś‡…B!öQUU…˜˜œ:uŹäłöķŪ£k×®šó󃳳3ļ ŸŸÄÄDŽ-ąōéÓ6l~üńGL˜0Į»@i’““xšĮ±sēN;GDHÓjÕ €÷ߟWže2Žyē<’üópqq±¹žV«ÅŖU«°bÅ  ;v ļæ’>–/_~'¾kĢ;£F888Ų9B!÷²W_}Õ¤ņ’č£āå—_F—.Ög;V©TŲ¾};^{ķ5dggC£Ń`Μ9øvķڵkw'¾k,X°Ć‡DFFŚ9B̽žśėج¬Œ1ĀĪŃb?­6PZZŠ÷Ž{’½råJ¼üņĖ’ÖuttÄ믿½^æżķo€?žƼņ Udė! öƒBČ=.%%6ląÆZµ /½ōRė) Ģ›7cĒŽÅĄ‘••…²²2¬^½ļ¾ūns†|י>}ŗ½C Ħ„K—Ś;BZ™½hØ={ö ¼¼Š©S'<’üóõ.cٲešššPÓw-!!AņŗJ„999<†¦PRR‚ĢĢĢ&é—TQQœœžél,FƒĀĀB¤„„5ŗ¬ŖŖ*###%%%Ø®®n|€čõz””” ;;MņŁ©Õj>ć„J„jTYZ­–EEE|ųĘ*--Evvv“”WYY‰œœœׯ1†āābÜŗu ĘŽįp*• 999(--µw(„ÜÕ6mŚ­V 8p ^|ńÅz­ß¾}{“Gæ’žū&Bi)Zm €½{÷ņĒ“'O†££c½ĖpssĆĄ±oß>ĄÕ«W1`Ą‹ĖfeeaŻŗuŲ·oΟ?oRÉppp@pp0FÉ“'攇‚ ˜­xźŌ)<üšĆjš*>žųć8|ų0VÆ^Ć‡ó)õĄÓÓC† Įc=†iÓ¦Õ¹/WÆ^ņ «WÆņ ! ¦ÅCĒŽƒY³fa̘1ĖXµj>żōSĄĪ;įåå…5kÖąūļæĒĶ›7a0ąėėĖć¼rå āāā÷Żw_·6N‡ķŪ·cėÖ­HHHą°ˆcĈxģ±Ē¬Ę×7nÜĄ† °oß>\¹rÅ,Ł P(Š»woL›6 ?žxƒA¦¦¦bķŚµŲ³gŅŅŅĢ,mŪ¶EŸ>}0eŹ<ņČ#| kĪž=‹Ļ>ū ‡BRR’Ł UžžžčׯfĻžE‹IžīŌ©SXµj:„üü|ž¼‡‡FE‹aŹ”)u–“””„õė×#>>‰‰‰&ļŸ\.Ghh(ƌƒéÓ§ćžūļ—[Sٹs'¾ūī;¤¤¤ ¤¤•••šńń"##1vģX :ŌźõÉŽ½{yÜĻ<ó ‚‚‚ŸŸĶ›7ćŌ©SČŹŹ‚V«…"""ƒI“&IŗŽ©ØØĄ¾}ūĢĢLC£Ńšųzöģ‰ŲŲXDGGC&³|/hķŚµČŹŹ‚››V¬XµZmŪ¶įųńćø~ż:***‹•+W:„ß~ū 0iŅ$ :Ōj|)))ųłēŸqńāEžTÖétšńńB”@=šĄ`Ĉ ś,­Ńh4Ų¹s'Nœ8+W® ŖŖ •••P(pqqAhh( €éÓ§Kš†V£Ńą×_ő#G——‡üü|”••ĮĆĆ®®®čڵ+¢¢¢0iŅ$ø»×=ėvee%~śé'œ>}IIIج¬„J„‚››\\\Š©S' >“'O–TžQQQ¶lŁ‚“'Oņ®.~~~ Į<€ &H:®”J%öķŪ‡}ūö!##ÅÅÅP©TšńńÆÆ/ŗu놱cĒbŠ A’Īo)))ųå—_pņäI~cĘĒĒAAA9r$¦OŸĪoŌ5…’ž÷æ¼ėš’%KųōÕ)))ųģ³Ļųrāq×®]3›a©k×®Xøp”ÅmdddąĻ?’đ#GPXXˆāāb888ĄĒĒ~~~2dbccŃ©S'«qžć’€Z­FHH–.] N‡;vą·ß~CZZT*üżż1`ĄĢ;פ,½^]»vaĒŽHJJBUUŚ“iƒĪ;攇Āż÷ßoõ;Oī!¬•:t(Ą°Ÿž¹Į弞śė,**ŠEEE±oæżÖā2k×®e …‚oÆ®#GŽdfåųąÖ¦M³u}}}łņ üłÉ“'[Œ-//1BrlŲ¢E‹līÆTėׯgĪĪĪ’·ĢNžżōS›ń}śé§ĢĆĆCRyŽŽŽlÓ¦MĖy÷Żwłr[¶laļæ’>sww·Y^·nŻXBB‚Ķų6nÜČŚµk')¾Ž½{³#GŽX-K«Õ²gžy¦Īk×   včŠ!Ö­[7€999ٌ±.sēĪ5łĪÅĒĒK>w`>ų YŁeeelɒ%’®ĒA` .“XW`Œ1///€õķŪ—]¼x‘õģŁÓjYĪĪĪlķŚµŒ1ĘRSSŁąĮƒmn{äȑ,??æQļ#iżZm ńæ°°°—óĪ;ļ؜oü믿Ę3Ļ<Ę ((cƌA§NąęęN‡ÜÜ\œ>}š>tčŠ!L›6 ū÷﷚eŪ°anŻŗ™L†ĮƒcšąĮš÷÷‡Z­FFFvļŽÜÜ\5˾}ūāÕW_µ’æžõ/žwxx8Fމ( TWW#;;‡ʕ+W?üš 6oŽluæ_zé%čõz@—.]Š«W/ųśśÖyG[Œ1†yóęįšįĆjī€0QQQš÷÷‡««+JJJPTT„cĒŽńų6n܈vķŚį’žļ’$o«¶={öąÉ'Ÿäó:·iÓ±±±čŠ”|}}”V«QVV†””ģŁ³jµYYYx蔇pīÜ9³ĮŸ.^¼ˆG}”ß2dʎ øøø@£Ń ¬¬ ŁŁŁŲµk233‘œœŒyóęįĉfń}öŁgxūķ·łßĘ$ĮĮĮšööFee%ŹĖĖqõźUģßæ:‰‰‰˜žųc<÷Üs&ϵkׁ*•Š_c5]ū,XĘ,X`uæ×Æ_ĻĻ—...‡‡‡***’’Ā««WÆbÜøq8ž¼ÅćžĆ?Ä /¼`ņ\HHڶm ØT*¤¤¤šĻķāŋøļ¾ūpšąA‹-k/^Œ-[¶šæ æĪŌétČÉÉĮÕ«W‘øøøßZN„R!..ĪģŲŽˆˆ€§§'cØØØĄ7 ÓéĄĆW_}…+W®ąĄVÆé2220jŌ(”””@.—ó±·ŹŹŹxĖ\Fƒ§Ÿ~ …«WÆFbb"š–ģ-šŒŻ@:„‡~Ų¤Õ¹Ł-õŠz½ž988šlViii³l§ŖŖŠgwA`’ž÷æYuuµÕåĘźnšūļæ›dæ÷ļßoµ,ĘŪ“i“Éd<ū^\\lsy[śōéĆ·=ž|‹-Œrrrų ¦uFm=ö}Ŋ6·­V«Yll,_žŅ„K&Æk4“ćdłņå6ļÄ_½zÕäĪĖW_}eņŗø€ńX9vģ˜Å²T*[ŗt)_ÖĒĒĒģ˜.((`žžž sttd6l0;öÄ~żõWęęęĘĖ”r7ݚŗZlٲ…掹sgvžüy«e©ÕjöüóĻóåĆĀĀLöC|üFDD،K£Ńš»ūŽŽŽ&Y{½^ĻzõźÅĖzé„—˜R©“ZÖłóēYhh(_~żśõfĖP B¤;rä’¾tļŽ½Ł¶“ŸŸor‡öÉ'Ÿ“ڊēܹslüųń|Łąą`¦ÕjM–·ĄŚ“iþüņKVUUe²œJ„b[·n59o¼ōŅKfŪ¼té?‡:88°+V°ÜÜ\³åōz=;|ų°Éyo芔fˉ_7^³|ņÉ'Ėd¬īŸ|ņ ŻŻŻ}śé§¬²²Ņb|‡2¹ė9kÖ,‹Ū”B­V³€€“»·ÖZw°åĖ—ó÷Q&“Yly7jŌ(^޲eĖĢ>3#NǾśź+ŽB„wļŽfĖdggók3 ¦%ßĶ›7-–—žžĪ/^lrmU»åø€ń<’å—_š—T*Ū¼y3óńńįĖ>żōÓfŪLNNęńĖd2öꫯ²¬¬,³å ;~ü86l/ÆOŸ>fĖķŻ»—æīääÄÖ®]ĖŌjµŁrlņäÉ&ūŅ\-“Z-+..ę’Īž=Ė—7nœÉkÅÅÅfļłæžõ/¾|`` ūöŪo-^(•J¶qćF“÷üß’ž·ŁrĘĘļņŪoæmvMœĶ¦L™bv‡ҤIfǬF£aėׯ7i)E×÷¶V™P*•&»­Jocˆ+# .”“Ī—_~Éי7ožÉkµńńń6Ė2 &'ĄŚÉ÷Ž{æöĻžSR|o¼ń†ÕŠ®8ąļļoõ$oTW@üCūńĒKŠO|bŪøq£¤uj»té’I%Ń҉„¶ėׯó&‰‘‘‘fÆwéŅ…'&¬čžžśkĆ×_mņšø)łšįĆ%æ»wļęėŒ?ŽäµŚ €ß~ūĶfYz½žuļŽ/öģY“××­[Ē_{õÕWėŒ1ӓߋ/¾(iKźJˆ›žŸ9s¦Īņ ‹ŽŽęėŌNh›`.\°ZĪoæżĘ—›0a‚Ék'Nœ0¹Pā?žąėŒ3ĘģuJ"Ż®]»ų÷eäȑͶ·ŽzˤŅWNgR‰žõ×_M^'lvAcŒ±żū÷óå»téböś¢E‹ųėkÖ¬©3¾ņņr“®Pµ+Åā؃‚‚,VśÄźJDEEń×­u¹ĖĶĶå!gggVRRRē:–üšĆ|»ŃŃŃ6oä‰oĄŌNś—””šA—.]$Ć§M›Ę€š›/eee&Ɖ+ģS¦L‘“OqqqVƕÄåÉd2“Š®%{öģįĖwčŠĮģõgžy†æ¾råŹ:cS*•,<<œÆS»‹ÉŒ3$§Z­– 4ØŁµ%%%ńå,5÷Óėõ¼k‰B”`ׯ_Æ3Žšņ-Ż€',%ŒŌjµI7”¾}ūš%ÅÄĒõ{ļ½WgœäīÕ*GĄēääds€•J…’’I’ÄvąĶń€šęJR̘1ƒĒsīÜ9«ĖuėÖ­ĪĮīA0YĘŲōĖR|‹-’ßĢ™3łc[ń-Z“ØŃs ›¾ĖårĢ;WŅ:=ōœššŚØķĄ¬Y³$ œ‰nŻŗŅŅŅLš 5Mžg̘Å‹Kj®-~ļjĻź Žļ‘G‘4ĄQll,ojiė} Įųńćm–%“ÉLš¢»š5ēqՍGōīŻQQQu®#‚ÉŌTĘĮŒÄMłmu]°Õüæ!ļWll,|}}yLµ7BˆtāĮI„”Śžł'€šk f‰ƒƒžzź)ž·„ī`F“&MĀĄm–7zōh„††Øé ī† ŽĻĻĻK–,©3>“ĢlÅ÷Ö[oYl.Uqq1Īž=  ¦Ė›ųœaM»vķ0iŅ$5æ’×®]kж÷ģŁĆ?ūģ³’»{üńĒłcc77£ĢĢLžŽ4HŅ9¼K—.Ęņņņ¬Ę'uöŠ'žx‚?¾pį‚Õåbcc1|ųp›e‰¤ĖŹŹ2ŒŲx\yxx˜uS°D”Pą/ł ’[|\1Ęxyžžž&ļ³%r¹\ņßörīÜ9>ŲņŒ3Yē:£Fā]n’’’L“Ėå&ŸumĪĪĪ&õ„… B.·Ž»{äȑüqAAAq’»W«@<½“““Ķeßxć ¬^½ZR¹Ļ>ū,>śč#žwRRܵkWIeø»»ó‘ņ333­.׳gOIå+ ̦q3ĘēīīŽąą`Iå‰ūŠŁŠĻZ_@©”J%n޼  ¦’øx?l‰ŒŒDll,H^§6c’'’*‰F&L@`` €š‘xÅ#ĻnÜø±^1ˆńń €uPŸų0eŹÜŗuĖęČæ‘‘‘’.Fųcc_U#cģŽŽŽ—_HHAcĢęqÕ<łgLÖHa똟3gžž÷æƒ1†ķŪ·ćĶ7ß4[ß8ś.PÓļuņäÉ&Æ7äwB&“!88ÅÅÅ|ōš¦阐{‰ų¦@] €9sęąĘ’Ź]µj•Éŵ±¢Õ©S'³@¬é޽;lk»#FŒT^`` ŅÓÓa0PQQĮg®),,ä7 ś÷ļo³Аų† &©›µ¤i*YYYüqŪ¶m%óāµc ĆĄqņäI$&&āŚµkf•ųƒ¢°°g–€'<==%Ē%>i«T*JŅ@āß³ŗ*–WÆ^5k d8é^ZZŹė3ų7¹ö“±bR ā‡ųśG<0r}ā·V³_cą€ōōtžXjbع‰ci Ś†l[”PH¾YāääŌØėĖŖŖ*TWW£¤¤ÉÉÉųī»ļ,.g¼f€Ī;Kģ.""BRBjKNń`ŽāĘA¦9īÓŅŅųc©Ē¼··7Ś“icõ.¹½‰ÆśŻ«}ƒĻHJ‹&q„® M’GŒZe@|A_»©Rm1116›{Œ÷ßæ’ž»I“ÓśjĪ÷FjvŽćq‘™™Ł¢Ž+q¹kÖ¬Įš5kź]†„¤×œ9spņäI5Mż’ś×暼n«łķø:#Is~ ¹Ū‰Æ j·øŖ­[·n6+YIII¼¢/>wļZ5w³ļ»ļ>I±‰ÆQl%Ż{.Ē·wļ^ÉńglĒ×؊ƒų¼gń’N1nŪĖĖKR 9©rrršÕW_įĄøyó&ŠŠŠP]]mµ2g+6 yŽOOĻF­/>®Ž9"łøŸÓÄĒ•xėŗ³-f¼±Ö•––ņĒo½õ–äkqwNŗ wZ«L888šévŖ««”Ńh¬VØ|šA<ųąƒVĖś×æžÅµ›Ģ5¦’g¤R©$õ7«ÆźźźF÷nĪqÓ¢¦Ø”6tŪMÕō›o¾Į‚ źL8y{{#88Ƈ·Ś ĄŸ ’šæŻi=īm]D6FS|-ó³fͲeĖ ×ėńĆ?˜$ ~śé'5-xąf‰«¹Ž3BīāŹ³11nĶ7ß|cóõqćĘńVhās·ų¼’——g֏[Š;uĪMKK3¹Ó*UsĘ'.ŪŚ”gĶÅXélŹķīŲ±³gĻ®óxj®Y;vģˆ””«±wžZI ńq•••eŅO*ńg/~æźÓź­%¾7Fā÷čĢ™3 *ƒ®ȝÖ*@M³wći^^^ƒ›§‰æøµ+źĘŹ™§§gƒē6o®-GGGŽ?-22’łĻź]†Ō>‚ !>ŃÖUinjā÷¼)¶]XXˆ'Ÿ|:‚ ą/ł fĻžĶē.vpp€———É’żū÷[MćcŒAÆ×·øłmœœ Ó銔C|ńÅö‡?ēϟGy¤ŽeXź"€±cĒāĻ?’Äłóē‘’’Āļä=z·nŻL›6ĶbĀFüÜ®]»”Ō‘Ś,•bNÜeMÜÅŖ!Ä-Äæ9ā;Ē;węcÕŌGs~ĻÅńõķŪ·Ī-éŪ·oS†d¢9n„ŌgŪMqÓÄ(%%3gĪäÉßččhŒ7ptt„§§'æ.prrB=°fͼõÖ[ckÉÄĒU=4„x<ńug]­uÄīōud}ˆÆżzč!É]1ÅŪņśjµ €nŻŗńĄõė×üå1^ÜęŁać]­VŪ “}s’ÉdP(P*•Ėå-.>ń™ś4‡cŒ!!!—!uP5kŪ®Ļ¬¬,~W'22’g§·oßĪ›„>óĢ3&E6Dķ÷Fj½””ŽŌ¬WÆ^ĶÖzĄĶĶ J„‚ “ØćJü¾4il?ü0™xūöķxå•Wųcń2–ˆ›<øĮƒWB&<<r¹:ŽŠŽŠ&ėāfĘāŹ™ų÷§gĻžXæ~}ĆnāųF>ųĄŽŃ˜’NJ¹kŽ”ÜÜÜPUUÕdƒž}ōŃG¼ņ’śėÆćwŽiTlFwś}‘Bߐ!C}Ü‹Æ³ÅŻOźRŸėČ;M|l?÷ÜsuĪšEHKŠjGƒčŃ£|äȑ—sżśužøsēĪ&Ƴx*•Ŗ^ŁĒ«WÆāģŁ³8{öl³f-ńÕēGؙvģģŁ³’Bjžé­ĻØš%%%ˆŽŽFtt“¤éf,1Žä_ßmæõÖ[|Ūā‘ŻÅÓŚIĪŠÖÉJ_}šÓ-Y²„ĒלM5Ē•­”,¹xń"Īž=Ė8MMź`ZµUVVņļ£qfŠŚ¦NŹ[f+żŒ1üųćj>3k£GKD«¶ääd5’#¤įœł€ŖåååøzõjƒŹaŒ™ ¦'žöNܼ¾æw‚ø’xKŒOœßx©Ėž={†°°0¬]»¶QŪ.((€^Ɨ¼Žøqćfr½ ԌŌwƾśŖ¤²¬usuuåēžś¼/@Ķ°°°0‹]ӚJSWāó„ŌkWN׹ ī„–žŻ#ĒV›0Ī Ÿžyƒ2»|^qA̦ļ7[ŖĻń įƇ7ėˆ›Ęųrrr$Ö®Õjy%ŅŚͦąģģĢGś½vķšäųÄżŪ·oß m‹OÖ§N’¼žør(޶8v???Ie‰K¶ā3>'…ń½Q(Ķ:ˆ’ńø***’ÜĻU£Ńšćꔇj–ø"""x«‡ś|wīÜÉc³véé鉉'NŸ>ŒŒ œ:uŠ'f͚eõ»,žOńX—iÓ¦ńøč¢Ę‰‰‰įæżöŪ•qśōi>虏I“}777ž·qŗ=)222x¶9Ϲįįį¼;Y}ĖgΜįń[>5ńŌ­ā)ėróęM¤¦¦"55µĮ­ŽŒŪÖétøvķšäõššj– 5žŪµk'¹ŸµcF&“”K—.jŽ©•ā²²2\»v ©©©õjJ__:tąwøės\]¹r…WO?ż4¾cĒŽü\*õ³HLLl’±vŖ®®#ā–ŖõyV®\Éß#c DBī”V›2dæcŸ““ƒ'Ÿ|²^ż»ōz=ž~śižĆ9xš`³n£Fā„6{JMMåSĪōźÕ«YĘ;’z½Ÿ}ö™¤u:Ä3ą}śōi®Š#GŽPsҕڗüūļæēؙ҇OŁx§fÓ¦M’šÕåęęņ–$!!!&Yjq„_J‹N‡7Z}Żų¾Ą† $· HNNPæyf¢!ĒżéÓ§łw©¹Ž+GGG>Oī‘#G$_D;vŒ?¶›ńāÜxē_Jó aļWii)ObJž‰b™ų;ŗvķŚµxūķ·łćI“&™  f^s©É>c%255µY§śtqqAĻž=Ōü>J1żōéÓ<>©Ó7DXXõ}’žż’ć‹ēŅ%ś÷ļĻ’šĆ’Ö¹pį±övb©ĶŅ•J„Ķ鍣¢¢Ō\;üüóĻ’Źæ/ĘBsÉdčׯ€šcEźų3gĪšćJ|ĆB”PšĻ#11ŃęĶ£†&ōCÜż§®zQQQü·bĒŽ’·qšąAžŃ8@äNkµ Ašžūļóæ7n܈aƆa×®]6囹T*ģŲ±£F2™—õ’ų‡Ł²'N䕿O>ło¼ń†Ķģlnn.-ZÄ+t3fĢØļnÕĖĆ?Ģ3āĖ—/ǚ5kl¶„øqć†I&¶¹ć[°`üśėÆcćʍV›ß lÜø«WÆPóć× ķvīܙW²ÓÓÓ1eŹ“fµ„§§cƌüG~źŌ©&~½zõāß|óM›Ē@^^fΜiR9­}ņ=z4BCC'NœĄ¢E‹ų<ó–\ŗt sęĢįO:Õź²MaÖ¬Yü矒ü'Ž{ļ=›'Ą›7oޱćjįĀ…j’^&LĄ¾}ūl.’ÓO?įóĻ?Psl똚0aæPłį‡x ""ĀfŅešąĮüńēŸʓO>ióó,..Ę¢E‹x¤¹æ‡„Ü FŒĮ„eeeˆÅ÷ß/)Įš››‹¹sēā×_PSé±ŌMœ$|ä‘GźpP­VósPóӜŒńUVVbĮ‚u¶,*..ʇ~Č’¶5cRcÉårž[WYY‰Ē{¬Ī–›üńư{{{cȐ! ŚöģŁ³ł9żż÷ßē-?­Q*•&ŸķĻĶŲŻ¤°°»wļ¶Y–N§ĆŅ„KMZÓÕī*N^-_¾¼ĪJqAA^żu«ń55c|óēĻ7™Š’ņņr¼÷Ž{üļŚĒՔ)SŌ|žxā ›]=Śčq—¢]»vü˜¹|ł²ĶļRhh(?6’ųć|šĮužī:tˆ'…:wīlŅB†;”Õ“'OĘ /¼Ą»9~ü8&Nœ¹\ް°0ųųųĄŻŻ@Ķ·‚‚>@ŲņåĖ1nÜ8³ņ]\\šÉ'Ÿ`ęĢ™`ŒįwŽĮźÕ«…Ž;ĀÓÓZ­%%%ČŹŹBBBo¦Ō¹sg<õŌSĶŗ’AAAxūķ·ńŹ+Æ@«ÕāŁgŸÅo¼ ((īīīŠh4(..Fzz:.\øĄ+ąĆ† ć?ĀĶe芔Xøp!¾śź+ØÕj,^¼ƽöś÷ļ¶mŪĀÅÅ„„„(--Ņ LNĻ=÷BBB¼ķ?ž„F£ĮīŻ»†>}ś ,, ŽŽŽP«Õ(//GFF†Éūāėėkrb€™3gbłņå(**ĀžżūŒ˜˜DFFĀÓÓ*• ¹¹¹HOOĒ‘#G ŃhČ3åÅÅÅ&åÉd2¬[·>ų cŲ“i¶mŪ†~żś!44žžžP*•(++Cjj*®\¹ĀO&X²dIƒß)Ś“iƒwß}O?ż4ōz=^~łe¼łę›ˆŽŽF‡ųqURR‚ŒŒ œ?ž_Šōļß_ņ8 1ž|lŚ“ ū÷ļGFFbccď)gggTVV¢¤¤—/_6éÖń׿žÕę.L:_~ł„Éb]ĶvAĄ† 0fĢčõz|śé§ųā‹/ŠÆ_?„‡‡ĆĖĖ ƒ%%%ČÉÉ1éóߦM,_¾¼‘ļ !D&“᫯¾BTT***““ƒ™3g"((Ɔ CDD¼¼¼ąåå…ŅŅRhµZ¤„„įŹ•+8qā„ÉuĮ‹/¾ČļzŠM™2Ä©S§pöģY„……aśōé2dų`s%%%HIIĮ7ß|ĆēśīŃ£G³WŌ–,Y‚uėÖ!==»vķB§N0cĘ 0~~~P(ØØØ@II ®\¹‚­[·ņóīųńćŃ»wļfļ•W^Į·ß~‹ŖŖ*üōÓOǬY³Š§O>ĘBYY pšąAüśėÆüsyłå—._¾Œ-[¶ ))‰R ˜_ÄÄÄ`ŌØQ8xš ²³³Ń§O̘1C‡…ææ?ÜŻŻQ^^Žāāb\¾|ß~ū-/£_æ~?~|ƒŽ©.\ˆ5kÖąśõėˆēĒÕ AƒąēēWWW~޽vķ¾žśkŽåaĈüšCž9wļŽ‹-BTT|}}”T*‘““ƒ½{÷bŪ¶mØ®®ę³^Ż)ĪĪĪ芔ŅÓÓQPP€ččhL›6 ķŪ·‡ææ?ŹŹŹ0ž|>Øį;#±cĒĀ`0`ٲeųꫯ‡ž={ņŁ¢JJJPXXˆ#GŽ`ūöķüŗó„—^2kmDH³cw/¾ų‚0õśĄ¾üņĖ:Ėßŗu+󚚐\n=XJJŠY9äĖ<óĢ3’öķĶ7ßäėüšĆfÆ ¶jÕ*ęää$9¾‘#G²‚‚³²^{ķ5¾Ģļæ’^gl |łÉ“'[\F©T²G}Trl‚ °Ē{Œét:Iļ-{÷ī­×qĢĪž=k±¬}ūö1Iå“oߞ>|˜ ‚Ą°GyÄb™_ż5swwÆ×q•––fVĪ™3gų2‹/–ō޼÷Ž{|M›6Y\f͚5ĢÅÅEr|ƒ b¹¹¹’¶oĶöķŪyy/¼š‚ÅeŹŹŹŲōéÓ%Ē%“ÉŲK/½Äōz}Ūß³gŁśWÆ^•ūļæ’Īüżż%ĒÕ”C–`±¬™3gņåNœ8!iū„Ę._¾ĢŗtéRļėĢĮĮ­X±‚ «åß¼y“õźÕ«^å²Ė—/›•õ÷撝/óć?JڿѣGóuŠ‹‹Ķ^OHH`!!!õŠÆ{÷ī,;;Ū¬¬še4M±­ZµŠ/’ŃGY\fūöķĢĶĶ­^ńMž’üóu–Mī^­ŗ€Ńāŋ1oŽ<üņĖ/8pą.]ŗ„““4TTT ¢¢2™ īīīšööF»vķŠ»woÄÄÄ ..ĪdĪxkęĪ‹‰'ā›o¾ĮpłņeÜŗu •••ŠétšööF`` z÷īI“&aŚ“i&słųųš©Ė¤öŁĻ7ܶm[³×AĄK/½Ä³ŪĒŽCbb" QQQAąå児ōļßS§NÅ<`1ŪĪ·%žWپ¼µ; …Ÿž9ž{ī9l޼ ørå T*ŹŹŹąä䄆†bŲ°a˜3gļgŁXcĒŽEJJ ¾ūī;ģŽ½—/_Fnn.ŖŖŖP]] /// {÷īxąL²¹µÅÄÄ 116lĄŽ½{‘––†ņņrTTTĄŪŪ>>>ü³Z¼x1üżż1{ölX½k1gĪŒ?[¶lĮĮƒqéŅ%”¢¢:>>>hß¾=śō郸ø8̘1ĆāqåééÉ?ń€t¶„††ņu¬ ¶ųōÓOcöģŁŲ¼y3Ž=ŠÄÄDäē磲²Œ1xyy!88żśõƔ)S×č,vŪ¶my\‘‘‘—ńōōÄ÷ߏóēĻć›o¾ABB®_æŽŹŹJ”––ĀÕÕ^^^ ĆšįĆ1oŽ<³Qœ­3f &MšÄ›$Kīw:~üx¤„„į»ļ¾Ć޽{qéŅ%dggóé§¼½½€ž={bĀ„ ˜3gœ-–Õ«W/~‡ĒŲo–R·=ząĀ… ųńDZqćFœ>}šOŸj‰ čŅ„ ʏ§žz 6ĖļŲ±#Nœ8Ļ?’7nÄ„K—¬vm ĮĢ™3ńꫯޱq>śõė‡sēĪaŻŗuŲŗu+nÜøaõĪidd$ęϟēŸž·–lnS§NEĻž=ńį‡āūļæ·Ś]ŹŲ÷|éŅ„xä‘Gų‡ åéé‰}ūöį‹/¾Ą_|³gĻZżÜüüü0yņdüõÆEĒŽĶ^—Ėåųż÷ß±råJlŲ°Įźnnn;v,Ž}÷]ØÕj¼łę›jĘ˜5k–ɲĮĮĮ8qāžóŸ’`óęĶHLL“ś¹aÖ¬Yxķµ×īŲqÕ£Gœ={ėׯĒęĶ›qķŚ5³Ö“Faaa˜;w.–-[fõü5xš`\¹r+V¬Ą/æü‚’’³e:uź„%K–`ٲeX¼xq“īK—.…««+V®\‰7nŌ¹ü’%K0lŲ0|ōŃGŲ±c‡ÕcŪĮĮC‡ųĻ>‹iӦѯb³ö C!„ŅŹedd ??„„„P©TP(pww‡››:uźŌØŹÆJ„BRRŠŠŠPUU'''øŗŗ¢S§N&ÓZ[×8H­»»»¤&īĘ1PÓ/¾®ŹCEE’““Q\\ „R …B777„……Y¼©`m[RT«Õ¼{“«««Õ§XNNŅŅŅ T*QUU777ųśś¢sēĪĶ:ŪZ­FRRņóó”V«įąą…B: 44“^8ß¼yłłł(//‡V«…··7¼½½ĘßĘOD999ĮĶĶĶf™•••HNNFaa!’Ü BCCėģ)žÜÜÜ$ĶžPYYÉĒ„ńņņŖs’ń£ŖŖ …®®® 3™²W ½^k×®ń}õööFūöķM’/J„’јĮ*7€€š›X–nŖXrėÖ-$%%”ŖŖ Œ1( >ÜęśŁŁŁČŹŹBEE’ŻiŪ¶-ĀĀĀźüüKKKĮƒL&«ó&@}~Gt:ĒŹŁŁ™÷Dī=” „B!„Bī­vB!„B!„HG B!„B!ä@ B!„B!ä@ B!„B!ä@ B!„B!ä@ B!„B!ä@ B!„B!ä@ B!„B!ä@ B!„B!ä@ B!„B!ä@ B!„B!ä ·wMŽUésĮ y`¬ `*0¦ ·wd„Bī 2‚ ø@ÜY[ČŚ‚»½»'hõ %JJ•(« ØÖÕ׎B¹ ²ņHČūA&Šś/ZŠ„ÉłZd—čPX©§Ź>!„;N?wyĖŽV_7{‡Ō c¬užF™śź£0T3Ł;B!„d>9 ‡ƒÓH@PŲ;œV‰1 µP‹‹YÕ(Ø V|„BZ?wōvBgGČZQĪæ& Šk@ÆŁ 0„½ƒ!„B¬ppē­óN=dėpźG:{‡B!„4€\&żÆ5@˾8°‡¼r=ö]U”RCwż !„“N®NĘvsE{Æ–ŪźÆ$ō꟔×ģ³w „BH£ÉœA®˜ š‰÷¶ō"ö]UBGuB!­œLĘtU ĢßŃŽ”XŌĀ :ÕVŖOŚ;B!¤ÉČūBīŗ”R “ŲME#ūB¹kFuQ 2 å%Zō•‡^żUž !„Üu ŚóŠ)·ø·k½Y%:ŖüB¹ė0‡nؐ^ŌņŗÆ·Ų€”ś0ōšx{‡A!„4 ƒöŌ=}ž«Ō°ļ*Už !„ܝ ŲwM…ReĖźßÖ"5£ż’hļ0!„f„W’¦æiļ0ī8ö\QA££Ś?!„»—Nϰ÷Ŗ ś”h tŖ­h B!w;=tŹ-ø×fø¹”U‚ ½½Ć „Bš]q•ē35öƒkq }õa0}–½Ć „BīfČæ§ŗTi 8›Ńr.„!„ęv>SƒruĖhв¬õn{GA!„ÜQz͟SŁ;Œ;ā|f5tzjśO!䎔7ē[Hņ»E%ōÕĒĄX…½Ć „Bī,¦†¾ś½£hv*-Ćõ[ÕöƒB¹ćnäiQ©±+¹½3T¶w„Bˆ]ŖĮĮł>“°Ü|“JŹÓB×Ä×>šŹbT+K”UU€1jY@!¤įäN 8*<įā陃c“–m`5I€žœ›“Üśj1 ¦æ fȳw„Bˆ]0C ŗ$Čä]ģJ³¹‘×4üjUåČI<€āō ŠT5I™„Bˆ‘Līļąnh×u<Ū…7Y¹I”øĶ ½Š|e€Ōt (-eP·Œī„4˜\xø hć# <Ģ {Gd›J —PQa~wĪĖS@ūv–ļxŽŹc(-3½]č Š©ƒ r æ^JCf–µo¶ ĮŪK0[ž1 =ÓµŚt”!2ę« “ŒįVžiL‚t±ü9čtĄĶ ōµ¦;óöŠ.Ąņ~ēÜ2 ¼Üty9ž·ßęAU)kö»¶Ąvšō4/Ÿ1ąfŗÕµZb+5ūmIq C~ł~‡vp€‹…ó˜V[³ C­°|¼“µ¼ģ\ócDīXóy;8˜/_YՕm¾ßAķešš°üy§¦ ÕšnĆÕU@‡`Ė13šnC&ŚAg'‹«4ŠA{ž®MTj (®jÜČ’Œ1ä\ڇœ‹BÆ£®„Bš‡AWā“ (N»ļąī6Ž UõT¦2 Ti€·«żZūµœ€īF“—Y^ĪšŪ^-Ī$čPYÕäÅŅ"88]"0aœ#Ā;µ¬¦Ćē/é±ļ€)i³Š ‘ Ó&9!v“éĻŃžCZ|÷³Ö¬2!A2¼ņœ E-³ŠKžõŚb’ĮŃXśgt4­Enś¶'N[ž~mČ9Ģ1­į]½®Ē>×@gaOOĖ_p÷ķŠgµ–aÕGdZؤ 0{ŖF 7Żļ=ūuŲž‹åŠMĒ2¼ü¬‹Ieø įßŖ,žĘ99 xöIg³ćāóĶÕ8{Žņ~*ǜ¦ū})QO7j ·Pwóöšś2…I¢AS ¬ü@Ü[–÷{Ž,' dŗßæż©Ć/æ[ŽļˆĪxa©3d¢ŻČ½eĄ{k4ØRšŽĪN^XźŒŽL÷ū“/4ø”h¹3RŽ™SL÷ūÜE=>Ū¤±xģ¶ń°|™īn‹k0Ö ēĀ–"§“‘•ƒɇ¶¢(ķ|ED!„Ō­4ė .ķ\.c‡›o`£ĖĖ)ÕĮŪµī"HŌ2LÓäS’:¦ĆöZhŖ©? ¹»éõĄ•kz\¹¦Ē€žrĢ›åŌ,w&ė+)Հõ5+šbŒ{āÕ]iņüŽī`ĢrB#3Ū€ė— Ń#āv%öÄ1'TTw ³ IDATXn ”ÕT¢KąķQÖ+*œ8ķa5®ć§u˜[7×Ū;pą +t:Ė?›åå '—ąž·+±×o8"3[aqyʀ½ūÕŁ×tæ÷Ä{°Šō@Z†ÉW Łéö~?źŒŹ*ĖMÉŖµ ‡T Ģ’ö~—”Épö¼»Ååąšq¦Ž-³ÓķżŽ?ą ½Žņ~—–1œ>YŒ˜!·÷ūr¢#roYßļ}ńj ķQėóŽo}æ“RõH»^€N!·+ĒŽŗ Jił@×T3:TŠÉ·÷;ÆP†K‰Ö÷ūĄ-¦ÄC.J®ģ‹w…Į`y拊Ī]ŠbÄŠ¦ķČ y`¬‚`żŲl­ņĖ—H9ŗĶzåߣ ptƒ “¬$(!„VFÆS—Ó%ÕU„ø¾w=zN\'WÆFm"ÆBī*”qZD ¦ļӍ ōŻOՈ?dłī!w³Ó :ääźńÜxzZ®LŻ)™ęMń­i£(…>Õtt_ēa(‚æÅåš*?}źķYC|µĮ¢­nĆW–}ź%ž·£^WēńPj,W"ݜ«!Ļ9½ģv„ÅWč Ģź6|Ŗ/AŸšĶ’ö®ō„ ÄX}|]Š O=jņ\×Q(Æō±ø¼ 0x–ƒ>õvåŁGŪ@ė1 7”O½Ā’vÖ9ĄÅ騫-’ü{øh ˌ‡^ø“ÆC_­oCsśŌ\ž·w•7€Ń֗wʇ>õ„És¾nc T[>”Ź)“Cœ½!„RCŠWE‰`i{ÕķqfŖ•eH>“ŻĒ?ŻØņĖ”ö  …$ņ›¬¬?ćµ+’2!“]ü¼4pr“’ō „4†Į  ¬Źi·Ü T›~³s>ŻØĮ²„.ūÉß)=Ūgą¹4’»cī$×ĆK”‚ĀŁōūé„Paź D³õē8‡OõBI•édĮ€į]ÓŠŽĒtŹŠØNYČ/wGbf;Ō®oł”įĮ~WMžst0ąń±'±+”+4:Ó»øĪr-&öæ¹ĢōŽåƒż®B­sDv±i0@ϐ[čß1ŪäłöŽå˜7üŽ\ …¾Vk7%¦ ¼l¶ßŒ<‹OõD™Ņ“5ƒ\fĄČn©š÷0½s>8"…•īøšķŚwŠ;“)Åż½Æ×Ś7=9‰ßĻwįŸ‘ĀI‹øžW LßĮ‡¢”ÕĖp«Ō|æū„ę w‡\“ēCżJńšŠó8‘ ½Į4&_7%¦¾„Ś:OõB…Ś“5ƒ£ƒcz$ĆĒMeņüš.i(ŖP 閟Ł~wņ/ĘŲž¦MéNZ<s\ˆDu­Ö ®NZ<h6ęĆ“‰0䗛VĘ0DuĪF×ö9`„€¾4‚_œČčėÉ ½ŗĖ0 Ćæ|̐ ^æ„*o`Ą Ó"óÜļ¦O:ŗB赚i‚Č!„' m?mŗƒ]ł(¾}-U~+%™—įҳĮŗ5"!ŽÖęĢŃk@Æž”Ńå¤g°ņµÉŻ6™ÄDŻĀø·ą¦ Väīb`Ī^÷ĮχBPZiZ‰戩qMŪsLž..1ąŒ•™źÄī¾éķ f]s¤Ŗ,Č0}¢mæFĒC!„H%ųv]o?Į Ø*nÜö;¶Įo €&pį²iEĒß[‘}›nlBZŗ6žÕU똿péĪ$ŃaŪOZœ>gĄē{z#5æ D#¤(Bą[&Ļ]øD­^1T«ŹMžÜŪŪ)B!÷$Aø˜”„ŲŅ® ‚hwʀņŠęO”–š^ {»Ń÷Ü{:·-2›I€B!­_ķ«éÖ|ŗækŹZó)*œčĪ ¹÷8ČœkMs©¼ ŹŖZć ø»4ĶĄž„“&ž †F¦ØØž¾1-b¦]B!„Ž®N!ĘjåE…÷EHėöšŠsŃ%Šīć`Ÿi8 !„B¬”!¤Ńä2Ńߔ ÷®ą6eū·ęʁ„“L…ir'¼#ķ ©­ŗe·Rųß>ĮŻą w²cD„Ü»(@i“^Że8x“&ąė®B{oš~“BHÓaĢ€_žq Mh/<ōę>;GDź£0ķ~_9…’=ćŻSšhŪŃ~r£iQöÆÄO–įzŖJµšj•Ś€_‡ĮßWŽŠ*–æ—Ė—_:ĻŻĀœķ1€™Sœ(Cyśu źxNršžŒBiMJ²®"?ł4 r0µ² ä.E Ņb,}3(¶ųšq*;Mµ_Š–™|Ÿ%Z`äP9ō~i`źÖ;- !„Ō8!>1 †4=ʎv€—'u „“Ł—ąŌ’³wŽįqTWć~g«¶hµź]–dI–-÷‚;Ę`Ą`%!Bp i$!!”äIų’/¤SB %“0lcƒ+¶1ī¶\dŁź½n/3æ?ļj“»²Œ‹dł¾Ļćǚ;÷Ī=gvgöžsĻ=÷Åū˜³ō·Ā ŒP„@0,X¾®Weü§Ųµ”'`6iƒ FÈٰB Œ`ž\5ƒƒMé@Żū¼üō®±5 @ 8ēÉ(žĘuæŻ>¶¤ä ”4Į¹p†ÆÆˆ¬æõ‹©nh’éķ›m…‚a€Ö@bśØ”C  ‚aĀŃzųļ;¾–Óų°Yµ,{²čL‰%8źe:k“)KėE#¬]½ Õ !®č:ūœO0Ÿé޾r{ż×uøŠß6‹„Fݜ0Š"”(źĻ?(+ĄšłN‚Ųż^¼Ī.^':ƒ ƒÅŽĪ`j±×ىĻՃ  Õ1˜1˜“†DæĒ§·9 1-ĶIfū—ƒ~œČA?Z½sRĘI]Óļqāuvō{ŠhõL6ŒÖdU–C[8“įemuŒ»ųņ&\xR:Ć į :{‚įæÓS‡vVßķ•il P£G§÷Į°zŸ—^÷£(“)ĶŹå¶ÅėEŲóYĘ ÷:YõQČKPłrł™Ā ĪB…õæ“#[Ž Į–Ī„?zkZ~TÕĪśżģ[ł {×ŅÓ|8ź¼Ń’LöøyN[BńĢkč’ƶź÷_”±r=S®¹›q‹¾v\ń–?r­U[˜uÓ’2zöēNXÅc4Un`ßŖæŃ°g ^ggŌł„ÄŅGO§dĪuNæI£_m}õ©\õLų8ą÷„’ŽüĀĻŲśŹÆTõĻ»į”ĪūG?~›uż~H/żš¼ ²wÅS\÷"޶Śp›Ļ?“5|ļŸūĪ@ĮœœĶ5÷ ŗvć¾µ¬śCčžMūܽ”_p35ŪŽe÷ņæŠZµ• ß®«ŃH/žĀ˜ n¦döē¢>—žøŗšŁ÷Ž_©Ż¾œīĘC¾Ø::£™Œ’é”ĪæŁļcķÓ?%äš=ūŚÆ/œmĄ0§®ÉĻG»\T׳čč ɒI6-¹™zĪ›h¦8š^ЦÖ¶9©mōÓÓÄēWŠė%’µ”™Za"=%ž×¢ņ°—½‡B? gZIN ż˜|“ĖÅG»ŻŌ7… ³YĆč|ó§[ČĪŠG]§£+Čū›įć®>€×WōD½Ė/[ˆÉ2HVnpŠćÕæzQŅ€3•—̦.źšütvéģ Ė Ń@FŖŽā|#³§˜±Ū“ģ«ņņ£_7šĮfŠG?;ą½DXµ6pģw’ƒMé4t&‘›rīløx¶žt{čK›j>ž ¦é0čB3XVóš‘K N>’öæ’,&[:}ļé˜Ę’ĒÆ=Ȏe¢ČĮØsĒš:;9²åMŽly“½+ŸbŃ÷’IBbJų|ŃĢ«9²õ-®}įøwO+õ»ßG‘ƒhõFņ']üiTEįĆēĀŽOXĶÓŪAķöåŌn_NöŲł,ŗķō¦ČR°€Ļƒ×ٳmĄē&ąS'õķk„Ė_ømū‘|üźÆém­PÆ« }Bō299_ĻÓŪĪŖ?~#-‹y9ą£łĄ&šl¢ęć·Yxė“QĪc4ų•-é éKĄė¢aĻö¬ “}‚…”‚ ˜ķY¶Ī6„u3LŁ{ČƝ4ņž'Ęč@Ģjį‘{r˜0&!n5[œüģŃ&6ļt x-VbÉĀD¼3‡‚œhĆżõŻüāͬų{1Üóp#ŪöĘĪü®ÓJ\wY’æģ¶ČĖłĄ/7ż(öŗīˆ.ÆzÆSFČŅ’ńoĆNˆīmćŃÄX.Šė”łé£M<ūļ<ށo V#ńåĻ&óīŚ^źšŽ'-ˆ‰×§¾Ē’¹•›aĮT ¦æ×é¬ń:f~rT$IA’Õ2€xĖ™Į©gė«’6Šli,¾ū5ģ9c¢źķYž8Ūßx8|lĻCĪøyXRó1˜¬|ÜŻ-“T}DÓž (“śˆÕü—ŻżZxĘyŌŌĖH°„įéi£żčN:ė÷“œŻß1ŽnżoŲįP0eń§Ńß’Į?Āzjtņ'^DjįD ę$ōF rŠ»§–C[hŲór0@ć¾µ|ōŹżĢžŅƒįė$e&§āüš±³½žī¦ŖOīIędµį/qßīw’ž-OŹMśči­)qżć±głćxhtr+^<…„Ä4>7޶Zjw,;Ž|“ŒŻļü™ —7ź:Aæ—ÕžfŲųOHL%Ņ"R '£O° 3šń¹ŗń9»i­ŽFż®Uų=NP,)¹\ż‹UQK‚‘€C6nsń™oVćtnõśœć!Žz²ˆ9S-Qē_|«‹[ī©EÄåA…’¬ģażV+Ÿ-¦¬0ž{’^ŽĶ/vĘ7°A…–u±·ŹĖ{ĻcN8żaÅž€Ā’ÆWóŃ®hg‡ÉØA£Auoƒ²Ā__ķ@`1iųī—ŅWbÄf=·ŒX@prh$…’¬v6†fgiHy‚3ĀĪ·~ĒŽ7B†Žew½Ó÷:;Łöļß Ńź™÷Õ’£dĪuqĆČ[}ĊGæˆ×ŃIcåzö® Ķ²ł7°ó­ßPµįe¦_÷“ø2łčĶšß%s®ūtŠ»Žž#“%?yk@§CóĮͼżąµČ‡ÖæÄĢļG£ Mš”/\JłĀ„įŗ»ßłsxĄq]un@³=“ł·üžÜń|:„śąutbĖ,bŃ÷’s+Āónų[_łUų>ģYž8.ūNŌgXæ{5®ĪFŅGOeńÆ¢Oˆ'ĆŻÓŹ²ū—ŠŪrŸ« V˜I‚‘‰ųf3¼>…Æžø6l –¹ż«é̜d&#E‡^/įó)“uŲ¶Ēͣϓ±}ŸÆOįKwÖ²ļ1ō‘`c‹Ÿ[ļ« ’³§˜łśõ©L­0‘‘¢C«•ŽÖūXū‘“ĒžŽF}³Ÿ¶ĪßžYļ=;:®¬z®I‚›®Jꦫ’Wb$-YGgwŹĆ^^|«‹æ½rģŲēęńڹż+锳ēĆįkżä‘&ŽŌ‡Ödżć”‚Øßa{Ņąń–u…’ä$-w}=ƒKē'RZhĻĘ‚ mAVoršēēŪĆõæüŁīū^ę ūvWyüß”ŠČó§čøī"õ²œ—VśX»=”aļ§_M #EƦ=^}ĻĒĪŖ ]½ ‰f‰¢ W/0°x¶^µ“åćŹ /­ō±µ2@k§‚ÅY©.˜¦ćśE2Rb;ÖŖźe}!-3}¬–„K"½ūŸvÓÜqŽU„ĮžģqwŌ’_|ĆDrŒ=ķŪdžż¾ŸĶ{Ō4Éų ^_(‘ Ķ*1a“–¹“t\|žžœH,xĖĀͬŚ39y,]`¹0‚3ĄŽ•OńŃĖ÷Ÿ’wæFr^yĢŗ5æƒĻŻ@Å%_§dīē¼vFÉt¦}ö6üżNŖ7’G5k>fĮ—Ųłß?€¢PµńU¦}ī$)śeēutŅT¹!$£-Ü O\QĄēꦧ¹€’y×hüd–žGöŲ¹ŌļZßćÄÕՌ55ļSõI£åā۟'uŌ„StA‰…·>ÓųŠhuL’üO©Ż±‚®†øŗšéi©Ę–Y¬Ŗw,š`ü%ߊų‡Š’‘²ł7²õÕ’ÅļqŅÕpōŃSO^`˜!Ì’¾ßĆц!\VhdĶ %XĶź‹)dŲ–Ž2rÕ¢$-­bėn7-~ŽZŻĆ5—DBŹžųW$žŖE6ž{xTĢAøŻfbŅXŸæÜάėŅŌ`ć6»x_iĮļ–ĖW?—¢*KNŅ2{Š™ŁSĢL.Oą;?Æą_’ķ ;RģZ®ķ#ēoŸj…P5®¹xąużĒcłŚŽšßO’:ŸKēGOĮé“Yé:nøĀĪg.²QqŁ~ZŚ,_ŪĖoļĪžō €ćęćqŌ4É<żFČ`ŠåųpW |žęĖ Üõ{7/杄hĆNxīN×óģ’XH“HÜń˜‹§žć±(Č;żüśOŽkaÉÜč%;Mķ¹œnƒŹšź*?jbÆ}}ie“lw})!ŹšĄß=üö<¾ųQ@Ė?ōóšsP’§įÆ?µ0}ģČžŁ±}\9uŗń@„’ §ƒk_ąĆēīBIļßõ*ÉycćÖoÜ·.üwÉÜėÕGį“%a@{ĶnչČBrĘͧaĻœõ4U®'{ģüØkżųæČĮ#øxę5įYųÅÕÕž;^H~Ę-ŗ…ģņyhõń#;?-9ēŸ:ćH/šrÜėI’†Ģ²Yt5ĄÕŁåöIj˜`KTß}—es #s`>ęģāĶU‘—Ķæ•eü÷Ēhøćkįću[ŖóōI“w’ķŁĒ5¬3RuÜvszųųķ5½qėNŸ`Ž2žū³ōŚ2ÓBž=¼Ÿl‰uzij żĄj5‹ęķ™Å¤į¼‰fŽ6ųµTB &3-””‘R­ēš8—łŅ}ΰńŸ¦aZ¹Žiå:’¬cqÕG~¾ü '?ż‹›'_’IV‰±EZf×Q”y» K’ĒÉĮ8Ęüéⁿ{ųå_Żać?Å&1eŒ–…Óõ\1OĻ‚©:Šs#rŖ“YņGÅ&N ՛^gŻß~Š‚ŃšĢā»^%%܀mzZB³ēHR”Į[ZŲpīk€£ü‚HØü”õ/ǼF߄v'žo“DÖ¤·Ł9Ø6ł“.fā’ļ1qÉ÷0ŁŅßąIĄįņi°ē”ŖžŃ1Ö¾Ė>ūčz,jāxt7źÓ>mPm‚³‘=s²ū`Ä[¹8ĘĢu,&ĢŠ7¶Ō×;ŗ^N†žŃƒŪ-`įĢHˆŌžĆžøõŸ|ł4(Ź3ŠÜ (+ōōŹįN †!„ 7ā1¼žPE†s"LłTsĆuzžń¢Bw‡‹Ė&ī%É’{s®SŪ,³d®žægVņ ¼š®ļ=äÄ€•›ż¬Üģ§0[ßlažd*²b_u„?w²ēp·WįÆxyō‡ęA˱ķŸ6Õń•?t zĄŽ…Gž }ĘéÉOü? ĻŌnjü8T'sėNÖļ ąp+üį%}šr A,j¶æĖO|Eb“&sŁ]ƒ’_qÜv®Īo4Ūcóń0Z’qu5ōE'=.˜ŗ“-wO+G¶¾Åģ›Dg0…Ļū\Ż4ģ] „¦Mtæż1%e`ĻCWĆ~oś7>w/y/"9· sr6֔<“†ų‘›§ƒO›Ģ0žõ샪/ó’1²Źē„3śļXöYåsIŹŠæ“µi’F®}ž’ā.AĪv„`˜Qu443˜‘ŖSeĶˆÜL=Ėž, „qķpÉ8\rųzƒ„0/ā(ØiˆŸ?;mpד˜ś9§?ą˜ü² «6:ødŽĄŽŠG-Ÿģސ—5ų-r²4Üżƒ‚ŽCńœ;Ū’}¦ÕńĀÆ¬hūŁ×:-|ér{«ƒüī_!ćZ£—°2®(ś]0¶HĖ“÷Z˜óµPŌŠĘ]Ø:§‹5Ūü8=”głžo™¹dVüP֒< »ĻBŁgCߋ+Ļl¤ĀPŠÖkAjUČéD‚Ó‚£­–Õ¼9čG£Õqé/‘R0~PmĶ{¼|ēŒī;ąžiÖhõ”ž#;—=†ßŻKĶĒoS<+²w|Ķöåȟģ=?zĪēNøĻžœwĆĻYłčMČĮu;WR·s„ź|Bb ęä¬)¹$f’V4‰¼‰©¢†3ݧ[џ¤¬ņ'.¢vĒ mµ¼ö’ę’Z8‰Ä“|ōf’¤Axń¹{én¬¢«aøķŲ‹¾ŠF'ʄ‚‘‰p #A·7d°ŸČžózÄ…³¢CŻ»{#m³išÓŚ6«ö˜ĆtĄl‰Ć3Kžē/·óō+”¬ž·ÜSĒ’Ü–ÉĀYVŅStį%.LOÆĢÖŻ.x¢…®žŠ½ŗ|HŁ-8½|ł C”ńߗ‹fčųŻæBO£‹iücR©s‚„Ė£ŠŃsśkĒØiмĪ«8ž{ 7]Ć܉:\^…4ūČ^’īŽ2–m‡¢ųYx¾Āõ׈¤@pŖ1'gaMͧvĒ ä`€ż«Ÿ%ķĖ *M0prŪż>95ūGĖ”-ģ’ąčŒ&fŽx’qŪjuü„Bé/¾ż¹O'@ŒPbś(r*Χ~÷ū4ģywO+&[:~ƒśŻ«Č*Ÿ‹%%÷ÓõŁŒŃÓXtŪ³(rgg#Īözķµ8;qvŌćlƧ·õŻĶÕČ~“æ•ä¼rģ9ļ0Ųóīćać’Ņ;^Ā’’Ė‘–ŃQ»gGAŸŸ»}‚ƒŁŽŃj'%o,£¦-0‰¤@0€aEäåT$ž“É삲vHgYėg^ėäÖūźøśā$öōpąˆwĄ6:­ÄÕŪxąĪlRģĆ3ŖA0rŠē­«×Ež9ć &‡"gÅÄёēäŽĒ\Ü’-3*tXĻqCWV4x‘{£(ąõ‚Ł4@#@š©ŠL\|ūsü÷ן”³®’=˟@k01żs÷·€"H+œtJe³p)õ»ßG8üįkT\ņMjw¬ĻŠ—ĢżōÉ’ā!i“XSó°¦ę‘ÉĢØó^gž½‹źMÆ#żģ’ŸĢ¼ń—§\ŽįFSåzÓČŚaā’ļ „HĮ°A8†}g‰|ž“ŸĶ3#×(”æ?.w$yžAv č|¼%(|ž‘Ŗė|ģ?섹=€Ē#ćtĖ$Ū“$Ł“d¦é˜Tn:īn ‚©o”yö=sX¢³nĪß IDAToØæ©—7«æŃbgĘu?„zÓėŖe#½)uęźjbÓó?”pś$$¦b“$c°$}źm‚‘€p #tZ s‚—G¦£ūÄzżų·8\2)IZ~ńƒ,@½ī’X2ĄĮŠw)‚=ńģ±Ė2Ō6…’ģx½!'†$…v!(ŹėpO'/¼āēh­ ł×ĘÉTä5c·ˆF* ¼ük+·>čbł&?ŠzžŪdŪbækl‰o\cäŽÆ˜0ˆq—@ 8E˜ķY,¾óe–żź <=m|üŚč &Ę/žvĢśöÜrZŖ¶ō{éi®Ę–YtÜ>ä`€w~ū9‚> ‰)Üųūʘõ4Z=„óo`Ē›Ņ~t'mÕŪØŪJŠ7jźåčŽæ5ńńØŻ±œo> €5­€Üń·M_'AĄ½‹A,”³|Oä¼ R½ł?ģYž{–?”:ÆO°„B’-Ia§€Ń’Œ%%‡“ĀI䌿­H(”Ą0cō(»ö{hhąņȘ‘ @–į//“ćó+Lkā?•'%j±Yµō8‚““Ž”ŠŠI“™vöŒŌ5ČĻ2p“ĮĒźMę\ˆ)cHKķØlÓb·i±'iIłä’d[č NŽ–¶HĀIY‘hw˜…`„“•ŖįµßX©Ŗ—Łŗ/Ąįz™śV™ŗ™ŚęŠ?‡+ÉŌćTxčŸŪdžøĒ2Ą•ąÄ°esÉ_ąķÆÅļīeóæžŃLłĀ„Qu³ĒĪåĄšŠŚ’½+ŸbÖuÜė·ŁžżO-˜0`ݲóobē²ß”(2k’ś}Ÿl8ś…’[ÓņĆwŌģ” ļŽö–äœøõō¦ˆƒĀēīłtJē}£ƒ^ś%ŠķĢš{œų=Nœ±óD™ķY,ųęŸĀĖ‚‘„p 3ʗ&°kæ‡@PaõFKŚŽŪf×~wxÉĄØ\µĮ^^ldóNĶmńRVh<īõÖl‰„ō/;³{ɞ,w3ƒļž¼Y†ūÜģŲw|O·A/Qc`Ž43ß¾1 cĪ.‚”dt®†Ń¹±gIŗ Uu2+7ūyąļn¼~xž]wŽ”@iĮČs¼i526“‡wčbЃEų:‚3BZį$Żö ˾`ĄĒĘgļF«O tŽõŖz£¦-ĮhIĘėģdļŹ§ŠźL\rFKģ½ē»²īo·‡‹f^= ‰é”Yłŗ]«č¬ E ˜ķ™äV,8I Cd—Ļ ļmæżG°¤äP8ćŹø!ķŽö:6<{Wų8³lVÜk[’³ĆWmx…Ņy_Ąl?;÷3õō¶s`Ķó(ŠLJ~“ÆśÉycń9»ńŗŗš9»š:»ń¹ŗš:»pw·āh«”µz;rĄ‡««‰•æ[Źun"Į–6Ōź§įf\µ(‰–uš‹?63†›5~€,ĆO“„/š­Ī“½ųüD6²ĒżĻmā¹G Аد©5Ą’Ł>^0ćģ½.½&™u9xžĶŠ=,+4’b×ŅÕ¤³'HWO0*[ŗĻÆp託CG½<÷FO?Ļg/M ń‚³‚§‚,‡¢nl–ųļ“$«ÄŌr-S˵8Ü ?ēAQ`ĶöĄˆt|qŽ6ž_?… dāó×Īŗ<*ĮŁLöŲł,ųö欞ć-(ruO’!AµõĪ`bĪŅß°śO_Ea×’Ąžw’‚=·<“?¼)‘ ß‹ĻŁ…££!4{žIb¤ŌQ)™ūłćŹ1ꂛ©Ūµ*|\<ė³QŪ~Zl™E”̹ŽCė_Āļqšž_¾…įŁ»IÉ‡Łž…Ž”ˆōćéiĆŁŃ@gݾš ø%%—²óoŒ{ķŌĀIh“z䠟®†ż¼ō£)$fa²„”Ńé±g—2ė¦_Ÿ=N7Ūßx˜īʃ$ŲŅXrĻįœĒĆēīaŻSßēČÖ·š»{©Ż±‚Ņł7œfi‚3‹p 3ŸŸHé(#zٵßü/ā»7„2k²…œL:­„Ū#Ó攣sŠĆS/ušž&)vm”įzÓUÉ<ņt+—Ģļõ°čęĆ|żśT¦ŒM #U‡V+įń*Ō7ūY·ÕÉļŸm /˜5ŁĢŒ‰ę3~N†_ž±™ēßģ"Ń¢įł’ÅE³£×Ū¹<2]Ÿ8źšüTÕųx}E7k?rā(Üž«®¼Š&ī‚så89HĻ’f/k‚$Z$šŽŽ=k֟ %‘Įo[×™Ū²šLS‘×ĢÆ®ŻųĻĆ)š ‚ĮS8m sn~õæEņĮć·¢Õ)˜²8\ē˜C`ż3wąsu#tŌģ0A^֘Ł\ųæ*y\žäK0Z“ń::SŸżĪŅß"I®{Ÿ«›¦żl“œ;† æūō€yL¶tĪ»įēlzī'(ŠŒ ŠŻxīʃN0qāPŅųÉ.£§Śų0˜lŒ»äŁś½­"©±`ä!Ć ƒ^āoęsł-Õō8‚:źåæj8n;Vāw?Ķ%9I=ąĢĖŅóčOrłęOźŹ ›vøŲ“ĆuÜėe¦éxāž¼O­ĒPąó+<öL(zį×§Ę4žĢ Ģ r2ōŒ+ …ź~ūĘT®»ķ(o­ī”­3ĄįZåÅĒ_.!‘`ŌŠCd]‚>8@mĮp¤ļö„ߥzf²ÄĮpøŗ IÖć;Ė:z"×L± ēš@ 81$$Šf|kzĮ€uĒ\p3Į€ŸęOŒāź-o1zŗ*”»č¼«ČŸt1Õ[Ž y’‡tŌķÅėčÄēźō¦D,)9¤Œ§`ŹeäTœ?hYmµųœŻ¤äW’_q‚ŚŒĪ`bž-æcā·Q½éuŚkvÓŻxˆ€×…ßć@ŅhŃ'X1Z“IĪKžÄEL]<(ēÅøE·Yz×¾@kõ6Ü]-”kju˜ķYįz–”Üšē‘”S6(¹‹f|cbJŌ9“=#|½”¼qƒŗ^rnyø)I½TĮݼ'듿W‚‘‡p C¦V˜ŲšR ÷<ÜČŪōā <ŸXžĄÆļČfįĢŲļWŚÉĶŌsßcMįåńŠė$¾°ÄĪOæ›I^ÖŁ“ąH½·7d„åŸxęÖŁ“ͼµ:”ō¦±Õ/'Ą…ēėų×k>Ęä“’“Ü=Ō" N¬ŌČR£õ;” ¢?µ\Ēŗī{ĀĶCß7£`²ŪįVųū2oųxl‘˜'ˆ$±š;O ŗśøE_cÜ¢Æ XGg4S:ļ ”ĪūĀÉJFųųš¹{Āa÷ć/»õ”]»?IY%L¾źŽS~ŻŌQI5qĄ:%ÓÉ(üē°šÖ'ćžKÉÆ8”Ļ xֵϺ6ę9[ś(<=m4Vnąąŗ)™sŻ –aō¶eė+‘ĐɹcNH&ąl@8†)Åł^|tķ¶ķóPYå”Ū!ćń„~PĢf …¹¦O0Q:źų†ź‚ó,¼’ÜhŽŌūŲ¶ĒMu‡KĘļW°Z4ŲµŒ)6rŽ$ó€;\}qeE”žfNÜņ€»æ™ĮW>ņöĘĖø’ķYt÷†fcl­«ā;³éq„źöĶgŠ·ŻöA$’ėĻõÉ6a œĢÓQ^Ŗ”§r…öŚć~†‚įGYAä¹’į£.ÖnPšÆ%=YB#…BųgŒ żd|ł ~Ճ?O¾īeÕ?Kę(/Ԑš¤Į’wh[Ą#2/æē£”5ōīW¤eīDńÓ#FÕ[Ž rÕ3˜’2h9øG{ZÆ_<óš”ü¢ÆŅRµE²ö©ŪŲōüOI)ØĄ”˜†>ĮŠF§Ē`¶į÷8 xųŻŚkv«Bž­iłäO¾dµNb6ĢIMÖ±hŽ•EsN~ļX€Ā\…q2v†ņbć ĻŒĻ›vüD‚ńĀõcļ^ęČLÓŃÜąéW:įŚ‹mŒ-I Ń¢J¦čöŹōōŹģ:ąį_ouńā[”ā©É:*JÅN'JV¦†ōīnĻČ]ß=’¹é2#æÉKS»ŒĻ’ZįSæ÷+¦°`Ģ(-ææĆĀm;ńł”Ŗ^ęw’:ž¶Éžū„eD;ˆjŚģ¼ŗyĮ•~®żŒ†²’ćoå*Ī^<=m4ī[U®7%²ąF£Cķ” dĪux{ŪŁśŚ¼®Pž„Ź ƒnŸ’_Įß~ńģŹ…% ńVŒō:‰_ߑĶמ_-² ϼŚĮ3ÆvØź˜ŒŒF‰G9z[X$ ¼3½n[(A Ņģ«’œČ}Oøys­·w`GĪ—.70m¬–Ē_óņö?õ­1ØO•„įš…īųbÉ#|ż’ߎŸNkÆPxüo^üy:ń>F,–”ģ9cš¹{@QH°„‘1zćߊ-³hØÅ;§©øō[”Ģ»žŚķ+h©śˆŽÖ£x{;ųÜį| szS"S"“”‚ ²ĒĶ'{Ģœć‡¤ g)Ā Q|a‰œ =<ŽĀŚ-N‚²Śˆq{eÜŽčv’s§Zųń·2øpÖ©‰¶ŒīłJ÷|%~TČåsõ8×$Ē=’Čķf¹}p³“Jµ^«?_æeå܉ŗŗVA–†æżĢB ÕõAŚ{Ü‹I¢ +z&{\‘–Ē~dę±AWÆBm³ŒÓjc6I˜ y™šs&韬h>1žC8] 'ŲÅ®¢Įˆ„`ŹbÕ‚į…Ń’LÉÜĻjūFą\A8#ŽógX8F=Ž »x8ŚąĒķ‘éģ āvĖ‚hՐlӒhѐš¬cź8v±ī’S(¬ū0HĻŃBf Åzā9ƝJ “”ž@{¢„=ńÜ~†bmŸx¼-@ Ī$Ā ±Ų¬ZęLµ0gźPK2ņyéß~ÖlElŲ›ÅĻ>»ƒ.~Hø@ @ 8óˆģDą¤Łµ7ž»Ėe¢±KÄ< @ Ć į'M’\ ą¹±ę[ č‹FRŠiՑ/z½xN­Ī€$õŖc$rątP/oÕĪŽƄ@ ‚S€$)Ģ.ģ!=y‚ėńwA „¤A—Š/1««ehdĮ9Šī6U‰ŽtöF»Ž˜’$‘YH‘wIp®"’Ž CĒēgķ`ņØ(XĄŲrĆP‹3"°¤äŅUß>VZv „ŒB‰@pNŃu|½‘cIĀ’’3tņœ$#&ĄbQ‡Y:=#Ę·! _@ĀėWgb·YO’cnJP÷žŪŁąē.’crŪ©§G3b~a‡–”‚ ź‚–mąha@pn”Qæ­*²¦Bo² ‘@'ψžŲ“Ō€šęĮķ¹-Œ$j›ÕńĘ X­q*ŸBŹK#ƃ.Hvrϵ‚ŽŽ ˆµ’§Š”¢)čŒ}~Óe÷ßĮŻ>tB `ä£Qöæ½µŖā¬ņyC$Š©aÄ8Š ÕŖl;Œ×?bŌŦ}iŖćхŚ32 łŁ« ,¹TĻĢ .¾{ézl&‘¤Kpfµ# ĮDīÄKŌ…Ž.ŲöØ_Aߊ&‚‘‰¢@×a”m†ęU§Ģ)¹¤O"ĮN #&N~ņ-’z-²ž¹×„ē­ 9\» nhĪG-lܕŖ*›4įĢ8Į zør±%`E®ģA‘ßF I“öXxqćdŗœ&.ŗĄĄłyC-ŃČ"{ÜŗŠU·7\¦ų]pč 8ü_°fƒ!I1Ɓ@  ~'Š«E½ę’tF3„ –†ÖūÅŒ˜_J{’ÄŒ©Z6oģG¾źć,’¬~.šÖ<„’ §Ÿŗ3æ1Y‰¼,f‰93Ļģ#.é2Ę”4ķ<£ż CI—ĖğW̦„'“Žę…7`ģx…ō“³{€0¬$JĻæ™Ź÷ž¤·¹J}N@O(Ŗ[’Ł]­wV’ƒóF×D9-]^=ė÷āņ«õ6ź‚Ģ.=B’ŁÕĒö£9mKV* crŚ(ωŽS½µ×ŹęCyäžz{˜7ę†~Μ@PƆ£čt©“Æj%™©EõäÄH YÕœŹžŗL”~Éņrģ=L/®Š®sz ¬ß_ˆŪÆļ§w€¹eGHŒ‘wbku.uö(½Ēę¶R–ŻUæ¹ŪŹ–Ŗ<‚ŠZļ$“‡¹cŖŃkÕē‹'³~aŌuŹJ“ˆ4§VGįĢkÉ(›MżĪtÕļ%č‹žĪ @pRHÖ“QdOZŃŌ³>ģæ/#Ź0e¢–Æ3šā«>‚ż&].±= `„3i¼–„7‡ō=ÕŲ¢6Z}-ūźC!SŒāĒW½O¶=b6w[łæ’ĪĒŒm4µõZørź^UŁ“«g²æ!¶'vćĮQüōŚ*ƒmku.{FĢś+(åėnbŅØĘp™7 ćįeóéq'Äls 1o-śPUöŸ*xo÷č˜õWļ)įž«W‘–č —Õw$ńčŪó Ź±õītšX<©RUöų{³©jŽvbl:”ϽW懮Ž›šµScÖ_¹»Œ[/ŽĄŲ܈ĄķÓóŠ›óqz1ŪT·¤ņµ…›UeÆnžĄŚŹ¢˜õWļĶO®}dKÄ!s“ĶĪcoĻEVbėŻć6rŃųCįcE?.ŸMM'Ę'l©ŹćŽkV©œDėöńā†I1ėÆÜ]Źm—®§4»-\ęšyų­ø¼ś˜mjŚķÜ<kųXV$6(ˆŖ——£įėK #iœ0,1'gSŗąf9€£­Ÿ³ æ»98~c@ b!>!½É†%5}BāPKtZ‘ÖšüŁ:2Ó%žł’Ÿ–V"(870č᲋õ,^¤rćcę4ė6šū£Ļe ՞IäfG’«T5Yć’•­…\•™ń–e8Š? «Ća¢Õ0¼ŒHvšż§Ę­p {,S²#ŁŪ›Œq€Ź†L4Ł“Õe-9qėūZŖ½“É(‹8ÕŪā’•­E\ž‘Įē—ā’JD×ašFVjäĘWnN‹[_Q`Ļx*¦w„Ėź&Ä5ž*³¢õnĪ[ߊqŌ?…ŌlWøģŠŃ¤øĘ?@eŪh.ĪŽģ_éņhā’ĶŻ‰ōX¦‘’1ž*7Ä_£§(z'0fjgø¬¶Ź×ųØlŹA“ń*kt d¤ASŸ@‚SµÜt½cģĄĮi@ŅčḦķ|@͈t@(ó¾»µ¬ß`óG•‘…/@0IM‘˜2QĒÅ u$نǓca†ŸÜaāĶwüģŲ­vō0vjš>ė£ĒLVŠÆtĒtŒ«° I>ÖcJ½TˆW %YCvY š>ö\Åä vÄߞpÜät4éYįćÜ$…$›‡īžŲyCʕėT2Œ磾%ö ¤A„“ ФöŃ{’Œn•—@ Nć­Ŗ>€’"‡ŖcæĢŅÓ$2KKŃō‰`ƘdĖžŲzKTLĪPé]`UH“zčuđi¬!JļŠ ﯋­w‚J&B“Ń»|²Œę}OÜwrÅÄ$4重EĀGjb7ČĪҐR\¦ŚņrÜÄŪ÷ĒŽN’`ģ”L4éŁį²"3XŽtćtÅū¼£õžö-2ĖŽ Ė ęé)-Āž@  o$EQ†<+^гŒ ÷ÓڇӄŠŅŖŠÓ«Äl g6›» Ņӆ·Ńįõ)ģ?(ÓÖ®ąr)L¬%'+Zęš:™m;ƒQFaf†Ä¬é:•qąö(¬ŪĄįT—ō0w–{R“3dמ`Lć¹l“†Š±ŃÉAŚ;6nąļgŪŚ%ęĶÖb4ØūeXæ)@[»ś£Ń„ņ2äåDė}¤FfĒīh½³³4̜¦Šęp¹Cz;]źr£ęĶŅc³EuĮö]Ŗöļ)Œ-ÓR^­wk›Ģ¦­Į(‡L’ ęĶÖaŠ«… Cz·wØūŠjaś9YџEUµĢ®½Aś’åfK̘Ŗ‹ĪąRX·1ˆĖ­n`„y³t$&F÷±u{€š:u}I‚qc4”•DėŻÜ"³łć ~Ÿwr’ÄÜY:ōńN)ZĆ“¦ėĪLggY§ÖF炁ą\déœDŒŗ”™ø;g@ œ €@ #›”t ļ©C@ @ §į@ ą@8@ @ 8@ @ Ī„@ @ ‚sį@ ą@8@ @ 8@ @ ĪtC-€@ Į‰¢(2Ž–#xzZšŗŗ‘>Õy}B"e³Šź¢ŚvŌģÄŃzTU&i“¤LǚUßÓÓJŪį­ČAæŖÜ””Iśčé ©ēS9@ĖĮĶxķŖr­>ōŃ30XģQ}ō¶¦«nŠ"«ŹmY„ŲsĖ£źū=Zm"ąu©õ6ŁČ,›FgPˤ(t݁³½6JļŌQ“1§äDõįīn¦½z[”Žf{6iÅÓ@’TårĄGĖ”ĶųœŃz—œ‡ĮœÕGOÓ!ŗ*Q%"“$aĖ.#)»,Zow­‡¶š©õ6˜’Č(›F§W7PŚŖ·įź¬Wk4:R‹&c²gGėŻÕH{õvd9 Ö;9—“¢)1ōöÓr`#>w·Ŗ\g0“^2½ÉÕGwćzōÓ[CRĪlY%Qõ‡#AŸÆ£Ÿ«‹`æē/Įš‚%­ f;OO+®Ž"ŗkulY%Qß[€ ßKos•Ŗ sj. ‰i1ūp¶ÕąqtØŹtF IY££žW}Æz[ Č‘ēO’4$f”7%FÕWä =ĶUQϟњŠ5-?¶ŽŻ-8;Te!½K£æ·„īoOs•źł“$ –”\Œ‰©1ūp“ĮėģR•é¬Ų2GG}o|®.­G£¾‡¶¬ŃčŒ–Øśr0@osŸ[Už`KĒ’’S&wW®®&U™VoĖ9:ęēš¹ém®BFž?IŅ`IĶĆhM‰ŖÆ( Ž–j|īU¹Į”HbFql½]8ŚŌzk4Z3G£3šcź1’”¾šAĻ2‚Žw†Z @ †­aZÓuC-Ę)EVੵ=ĒÆ8Hš+×Q»ķm^ē€õ¬é…Œ_ņUYÓ¾5ŁōZĢś­ŽńKnĒÜg ėsu³óõ¢¼ĒČ·€Qē]£*;“꓎³¾Ždcņ5÷ 5DŻŁ·üOgHVŗąfR‹¦F ™Æ?ˆ»»9fż¤ģRĘ^śUYĆ®÷ØŁśfĢś­žńWüsrÄö:;ŁłśżŽ˜mr&\DĮ“+UeV?MĒѝ1ė­ÉLŗś•”ÓU·—żļ=I¼”hŁ…_%„`bųX‘ģų÷xzŪbÖ·ē£|Ń7TeuŪß”n{ģ1¦F§gāUw«ŒHOO+;ßų rĄ³MŽäÅäM^¬*«\ł]u{cÖOHLcŅ5?FŅDęÜ:jvr`ÕÓ1ėK’ĘEߥž;6ęłį@wĆ~źw® §ł0ōsXõ%»b!£f\„*k;¼•ŖµĻE9ŗŒÖ&\ł#•įš:ŁõĘCxū9• d–œ“śŁŽlž7M{?ˆ)SRĪŹ/žR£ŠŃVþwžåÄŠØøģ6ĢÉ™¢Čģ{ēō4WÅģ#wāÅäO]¢*k=ų!UžóO°„3įŹ©œ•~w»Ž|Ÿ«;Ŗ>’†²…_V=‡7¾DĖž 1eJĪϘ‹nQ•õ¶fßņæD9OtF3—SRføL‘ƒģžļc8Ūjbö‘?årr']¢*kŖ\ĒŃMÆĘ|ĘĶÉŁT,¹m'€ĻŁÅ®eąwG’^H-c.üö¼qŖņŖuĻÓzhsL™R 'SzĮ—UeŻ©\ń8J?„œD®ųa\Ė©déœDŒŗhēę@D@ 8kpw5Rżį+ƒŖėh=B}k/CdF§¹zwÜśr0@ķį}Ų“Yį2g}ōlW_ZīĮ0ę3Ŗ²ŽŚŲĘ „ö55GIHĢņvŽ×ųh8¼_ʤČ5z[ć’ąÖwxŠh#ĘvĖŃ=qėĖA?uÕūIŌd„Ė5ā’mG÷¢/¹\UÖĒš::©©«Ć˜™ī8¼'®ńŠPµoREųŲׯ×ųčŖŪGC—©Ļ oė@züŌTķ'±(9\ę8r ®ńģz4YŽ IDATŚ¢‹ĆNJ"ÓU·/n}Oo5u’"d{Uüļ ¢(“ŁCRīX†Ę4WgcČxĄš?FÓ¾µ$_¢ś<ź÷®‰ŪÖėč įš.’ŠĪ —uUķˆiüCčŽ×ķYƒ.{rŸB™ęŹuqeźnŲOkK#ʤČ3Ž“ocLćB³šuū>$sźÕį2wGM\ć aļŲĘ]¦*«Ū³&ī3īéi„įšl£¦„Ė:mmü(2õ{×”Ķ.’~ZöoŒ+SgķnŚŚZŃ[#†mĆŽ 1€€×E]å&2&].sµVĒ5žC×ūė˜Eź²=kā>ć®ĪFģ#1oBø¬ćąÖ˜Ę?„u{Ö"„E"¢‚>mU[āŹŌ~d;)]čśDįŌļ[Óų‡Ć©„j łżœ|#ļšłö©©“éu(ō:†Z"ądQHL”HJ”(„”t“­vØeŠOg—B]½LCĮįP’$&JL™ØÅ”=Ģ©kŁP&ˆ“Ńė%ʔjČĶŽßs¹¶ķ Fõ‘‘®aŅx-šOöķR×  Ė‘6FcH¦$[“L ;wńśś„-j% ņ5”Žī „m;“wØe²Ł$¦NŅb4D÷q“VęŠįh½Ē–iČΊīĆé éķtŖūČŹŌ0±B+ņ=ū‚44©õ6™$&×b‹”w[»Ā®=|}ĘÄZ­Dį( %EŃ2°mgŽNõ /É&1u²ƒ>ŗ#52‡ #e½Äør-™ŃõĪŠ½u¹ś†-†ōž0.ZoE=ūdš‚Ŗ1˜Éś¼­Ń}““ŹģŁ'ćó÷ż¼”øPCqį0~čF8~ĻĄ³ž*,YŌõźAŠ öK1p N‰.ż(ŗ:ś 5¹ ŃƒŪ( ؊©éP&•¤"h‹m Kz3-Jōmc,P —©H݇œF;x»b7Ḩ®[śčm.Ē®/ičŌŠŁ·mhtg ģOŒ„w1tĹ·z ́T•ŽJB!°>v}Ąa*Ā©Ņ; 6šÅ‰&I*¤¶S"ļÅRµ±ėkttčņū青”`Ģ&^KQ”Ž$Bwuģ> 6šüÉj½ME@ģK€}!õ‘iӐ¤C;Œ2v¹:eü(F;ū›‚@Ÿ{©IŽĘkB£'‰ĘĘ>Ϛ/zŁH_ÜŚd*ÕϦb“ƒ»=v­žźøś“Q¢—äō„C¶Ó©’É:ą³”S¢eŅ% 1ė4x’h8½]R?½Œ6šĘqhTu”·Æ\ɱė~B{ŠNGß><ÖŠņ‰8ŸŠCo}2Š»I¢Ž“}Ūųž,œš~}(ü± ģÅŃ}ōŌBĖ¶ØŁ2ɒٳbč큺u(^õg-éŒ(Yē!™Ó£ūhŪŅĻiŅ»2&E×w·Cć‡(ut‚d“AīŠõ[æ«Q>§:bBŅhQŅ'!%F÷Ń}Zw ČżŽc–L¤œY!A_.ØßSo²g)F8qĖč>=;šR†”™Ł5ź ©y%Ż5Ū±¤ęQ4ūóč ¦čė!šŪ»9ņīC(¾ŽPVd“ƒVż«č­Hŗ%K}æ„źM$W«ŗ\Ņ dLEŹÕ§RæZ>FźÆĢ0śJŠ«?sÅŃÕo#łÕĪBEk@Ź_)żrKČ8ņ.J×aUŌ…”÷Aį„Ńy>Ś÷Bķ¤~ŽAՈT|yH¶¾ųzQŖ–!¹Õ,Ф¬éHŁ3£õ®]m;£ōV,YP¼©ŸŽ8źQŖßAņ«ó(Z#ŅØ‹Ą>Z]?臼·”GķQRŹ šbč‡Ņ¶„n-Ræw‚b“!_ż]÷vCÕ2šØó1(’²g"eMė§“u “īF¢ßēmĶ…āĖA×o°ŪS GŽ…@æH-]ŒZIEżōö”~ ©·.ZļŌr(ø(œ7 ÕŖ!©gŻõ»±e–^6[µ|ädŹ%#Ұmgæ?ļÅ?rM q$Z%¾¾ŌHYÉŠOøÜ ?¾Ļ­š1ˆ{nu—h=’ė>ŠN sŒ fłųü’Č‹žH–ß”Hgw|½æõE'Ė#š’®6²lU|½'UĄ·o9=‰‚„ >5A»”A¢»ōÖhCW ItT¢ģś[ų0­x%ēiHDiź r“=šmmÆD1Ś‘ģEс`¤ŠyeēSįĆĀó®!k܂Sri‘ą²jŸ—_÷“”N ‘ō:ū‹‡„78oŚŠ>ڇ2hćߜ$E:ˆŅqäŪӁQqŪäŪP:#^ōt­“qnoģAHA¦„ó ŗ,­śęŲŁƒ5䚣tFœ ‰V$©< µ„O˜©ČNOc[l#2ŃĄ®@éŒ\° 9“ĶÄĪ o«C錬…ĢŌė0ź'āõĒ6lGe8¢ōĪO+¦¹-:‹.€V£c®BéŒŪy¶D`L\™ RZQśd×NP$Ņķ“vÅÖŪnõ“č§wJ6ۈ=  ©„32“šm4 ×Ēˆ­w~z7Jē!õ5ŅKčģŽö§ÓŹä˜ŖP:#Ÿ‚¤$ 4®Lłö‚ h¬ŁH‰¹1³J N-.9düChv&Ö,ŗ@0Ņš©C›Ū«?&»baĢŻ*N'½…šöOž?½54k}F%ĪrɵQ”žĮˆ&čCŁü Źš’Ł;ĻĄ¶Ŗ³?W[–-Ėņž±ļģŁ‹•Į†“¬–ŻRV |@Ėj)-PZ:––RöŽ{’Č"ĖYŽ÷¶e[²eķūżP¢aI¶“8ž÷ł„{uī¹ļ‘ī8ļ{Ž‘T0‡Ü¹?”Ó7īūsż>:µćq$Ī”sJH ¬Mˆ›ž”÷ kę¤M<阻–BĄ`ķ¹ūw6ŗ¬ĮĆY4µ‰•sźB&ƒ£ŽN%o®Éą»=Į1WńF{„A1±«i/¢(PŃ C„š–` ›ŒNBb4ŠŲ¦į¾§&ų Kd\õŃ'ä ~šĖ¾£lķóž٧zcY%$Ę5kĖŽóm*51L’įo,9­å[Ł’ÕÓ¾m”äHœŌĖ£½Æ!6ų+ „+/{4 „`Ōų,~ü¹+Dłæšä*~°“JRž%F-±ŃN.[QĪŹ9ĮIZM"kÖžu/ŗ¬x¹œ ‚HNj'鉒ņ/1ŗ1u؂¼vīö°wų$ˆGFWspr*!B¦g ‰QMŅŌ M§Ķ±TŚ@RÖ±+r{ ‰ŃŠ˜23h»«„*bĮ‘ĀØ0ˆ"¬’6ų˜;±™ł“#”e,Ÿ]ā²¾ī›Į{8­żĘÅC³ńģsŗm’¶/1¶ČĻ“ÆĪ:ūłW#{r0\pōTrŌ½—o’•Øb@ć/Ł&Čäȕź^œÖU,T½'¶•śĢŠ'Cļ?lŒ ĄĮ ‹’Ÿ pś\ÉJ)1v8s^pI«ŗ‘–Öć’„*Æōšü+VxX’} ļ­œĢMBb4¢‹¬ģńĪŁ³ĻÓļD˜‘q;ƒK܉=Ė?IHŒ„üsAƒL”fÜ ē W’{ĮiĪĻ#Uܐ“rČ\ģŪL°™|dēŃŁŅ¢®!83Uvj'±ŃŅĢKbl‘‘d%^o§Õģ_Økš|Ėóģ/ vunétIŒ=¦ę·ńŅgŁ8\^‡S¤¶ĪCĪøQag—jŒsī¢$ME“zp<ķzžE)óæÄ˜DČ>’§Sœ¢@oLjqŽ™Q13iļ^åLгGh)!1ŗI2_ūmķĒß ½G²|£^2¾IŒ=ŌJi‰Į«eźAš¤fd=2ž ņćļö,!!įE/ Āń]PÖhćQĒ$µĀØ0ŲķĮJŽJ)%_’›hTĮ×~Ļ{ćxŠŻ쁣SK‰±É™ójˆŅøX0GAZŠd8V’‹ęł•m<Ä ­@cˆøĢ‰ž eĎ:a$$$ŒQ !!1|2žKŒU ³,<šÓļqD“ß÷}bH/fź¹wr ¢†NMČ„# ‰Į"}ņ)hō T×6`ŸŠØ”IBBb Ē„R¬ń+#<5Ŗ„Ä1 {Pé¤{` QGQ%Å@—§ļĘƒ÷ļ?“öŚ=.ž13WŻ5č@ģˆŽęą®.Ņ',">gŚń?§ Ÿ3&»Mz®IŒaÜvØYKM£ō’hō#;`T„HHH 'ĢT ?䔫Q¹™šoZ$$$$$†Īn ö®vģ]ķ!•$ś‡xą-hŁ…µ„‚kžÅŽŁ6Ō"IHŒö¾†Xń)Ķ{Ö°ū£GšøGvø«ä !!qLäåČøē6-v5P˜\I\ŒcØE’]t5ł>Š¢›¹ utÜ $ńå?‚½Ó»č±šźGˆ2¤ XżE„Õ£Ń'œwćf®D”҆m'Š>žÓ|Ū§Žü"2¹ņˆe¬/]Ė÷ļż €äü™vö­GÜĒHDl?ąūģ°v`ėh&ʘ6„’`P×ädĆ6ové“ęDš…Õīyµ€³OŽE&łvp ŅĪö½6`å=*„œ~¼HNHTZ;%å_bģāp ¼æ>z³š¹sÜ̘*eĢ>VDQÄTł=֚0LݱM°%††©gŻāSlā2ЇXš‘ŹŠøą[Ūźq57n<Ȏ\aĶ4īŻ€µ½—½{@ū;Rö|ńźā˜ł_7cEhQ¤nך€Ķ£»ž¬ķ¾~”šč£źc$"|z<#;į¼dęŲģ"«nØdėīn–-ŒįœSbƶ³;D.¹„ A˶Iƒ,åš$ŃØąŽ‡ė©Ŗsrżxč¶Ō”IBBbóžśt>ŪäUPwļ·“”Ø!3]²Ę {ÖQ±ńuļ†| ĀĢ›A#­zŽ4²gž>Ō"H-7s`ķs Š KF˜~#Č$Õaøbļlć‹G®ą”›_ cŅŅ”Gb#ŻÅܛØcėīn2R”ü÷žL_†uQ„ŖzćҼ‘µļj•“ś_Qė ;}lfMŽ‘óß2Yvy9>×Ā¢Y:V.ѵX€„ĖĆ«¶‘¢äŌł1C,ѱSݤó}EØ®õH€c¤½f·Ćķ€Žƒ ™1tIHŒ!÷¬ó>Ģŗ”ż  †VØ1ĀŖ‡¾%&)»×6n§ns3{7°łõūél­A=lxīĪš©,“DD$Ą0ę£5žzŻė2÷·»Ņ‰‹õ»“>żf?æÆ–«häžėSŠGĖPČ“ļd³Ćāę¾GyüEĻ=œÅY'MÅwŽt×\ϣϵpżok™7C‡A/¹å4•ÕöķŠQ’®!Å(%x’č›Öv×ß[ Ą)ócF… §KåQzXJ ŠĮn–¢ĒÅhŅŚ,­TmżˆśŻė°“TbļźĄćr ŌD£ÖˆMĶ#mĀ"2&-E”-ĒV»ćKö­yšŗęĪ½ģ‘c|E‘ /ÜEw{#ą]”Ļ9ńlßw_>v5 9S™“āzŗ;š8øńMźKæĘfn¦ŪҊ\”Bm$!{ ć¦/'„hnıķ_÷5ߥÄåג˜;=H–Ćē‹ĻžĢä•7bmo`ļźgi*ŪDgs·‹É§ßˆĒå¢aĻ×dL9…üł?ģów ƒč¹ē“8~:oܹĖ¹ń M·4^2–b+_&Łŗ„d¦Ųģ"7ż¾€3–źY¾(xr¼§Ģ† ĄcĻ·ņę§f~wS µ€Z%šæ×LÜó÷FZŪ\ØU;övYĄŻ×%óŹķ4¶øøćĻ <ö›ō”iT±gŸ›æżĖŽ(źyGQĀķ—’ģ±pc…=ĘÖ·ĘŁm‰Ų¦~Ļ×ģłņi¢āR™sÉ!q¾)…sX’ĢmXš+0fM ä”«ĆöUžŻ;ģžō?hbā™{éC¾pŚ:‰ŽĻ`퓿Ąe·†ķ«qßv}ņ8Yӗ±šźGPiC禪¾>sgŸV€ns3}럾-DłtXĶÄ„ņͳ޶­U;ȟ÷ƒ>W9w|š(ķu{Č_paÆm‡3BŹ,IJ÷ŠRˆN7ÄI 'ōɹ¤Ļ£vĒ—“×ī‘ ˆ—Ų“ UT,šX©  ÄqąŸ/“PYē@&ƒ_ߐņżƒ·¦²óƒB®»$³ÅĶ•æŖ¦Óź””ŁÅu÷ÖāpxøéņDJ?*ā®ėBKč£eüߕŽõŁ7Ū(= ­P$›·¹}+N—Œļ†V ‰ÄÖ·žČ·/żĘ§üĖ*r¦‘1łdrfIś„EĦŒG¼S6k[=_į‚{#f“7Uļā«_‡ĖnEÉI?ģ+É9ńlŅ'-Acōµ­Śņ_>zÕ1¹¾“Vķäė’ŻāSž•šhbSĘ—Q„*JOśÄ%DĒg`n,§©lsÆżµ×ķó)’ŚŲ$Ņ&,:jنœŒSÆ!sī%L\y²AšYÄ&ēś>m2A‰œ‡sIŋ)Y~ĆQUPNHOaˆĶ.ņ·§[X¾HOIž&l»Œ%ݖʤB 7Ü[‹Óå}éŖUü:UĖū§ˆ‰"T×;imwŃnń*s±Ńrāć俏Šqč¹\ Fē·)™ŚŻ4¶8ins£ƒŃ  7SuÄŁų푲*;mf7v‡ˆB.-##EI|\’.į+`äĒ›h7»łķ£¼ųÉr>Pø\Į“=·{ō8Ś"-m.:,nāōrŒjÕэĻŅ唵݅Łā!&Z†^'ė÷õ‰ŗ&'­mn”J¢\uÄvN—H[‡›6³×:N/Ē —seŒŗ&'mn CŒœä„±żJ‘÷š”K&ö Ē5*Œ®µ£~?ŪŽł32¹’ēßAńŅĖĆŗų[š«ųö„{ØÜü¢ĒĶ7ĻŽĪł}ė3 dLZJĪ gQžķŪŲ»ŚŁņęƒĢłŃ‚śŁńŃ£t¶ÖZ¼€¼¹«"Źg="sĀY̾ä~“śąU/QōpąėWY’ō’įvکݹšŖm“5mŁQż‡ ©Åó™~Īķ$åĶDčįj[°čb¶¼įӁõƐ”73b›Žó}?缑Æ4ĒꛦB>DU)@b¬"WAÖRŅ3TØGAU±ž$¼ō^M­.®Ze ŪĘćw>ļąĮ7±} VvH ÷zĆ]z[5’x¶•_ž$‘å‹ōa=ä6ļģęĻ’kfĶw]“¶¹Āž'6Fβ1ÜxiÓJĀ×-^¶—v³›ŁS£ųü™ńüļu’yÅÄ÷„”ną1:§Ģ‹įīė“)̉¬°|õmž_3_mģÄį æ¢›©ā¬“c¹įG ¤$F¾œ£42.9+ŽGžmį½/,c:9¢D0/¾×Ī-xĆmž| “ŁS£ųū3-¼ņA;«ƒ]P• y3tüčģ8.XičÕóŌķy僞}«Ū¬tŪ=!mŒ9³&EqŃĪ_¾æėī­åĶO:Ųża!•µ~²™沊Õķķsr‘† ÆęgµyųĻĖ&Ž’ŅĢ·Ū­!÷L“ µ,͵Ē“žޚ½ąĀ”Uyļ—õÆäq°ŚĮŸŸlęķĻĶ!ĻŌ$%g¤ē–+CśŪ°Ķʹ×Uų¶=?Ēź ¤ĶŪŌ~Éģhž8+¬Lƕiy&J+¼īĻŗ(āĀ‘#8ˆIŹ”ćŠ .‚ !fd]}Qśł“ˆ‡ŹIpįo)9łŹˆmc³XzŻyēŽÓh­ÜŽ„¹Š†=_“Z¼ ØŻ‰żŽŚ_āč6³wõ³-¹œøŒ"ŗLul’Č*ę^śPŸ.ō)…sX|ĶæBqA‘?’‡ø6Ö?ķ­¾oķ GmȚz'ŻųTŲó,¼˜mo?ŒĒķ¢üŪ·™}Ńļ)ĀæĻ+¾{×÷¹7C‡Dx4śDŗLµžŚ„”F¢O:ž«čųĢ!”Dbø3ŗL飄ŽõfʎSpņ¼š56/ųE%Ż\Åö=6V,Ö³ł­Ō*øX9ß¾žĻ’£Ł“ĆŹł7Tņ“»jBŽ’żc,¼čo~ŅQłļźžĖ“³č¢2ž|ĶŌ«Ü6»ČÕwVsż½µa•𮂾ńI³ĻßĻū_š#öõūĒY~åA>]g‰Øü¬vš—’5sāłūŁįœ‡¹`„×#ĀķyźõP·H‰±‰Ż!ŅnvÓnv³ė€9«šąćM!Ź?xWŅWoģäŹ_U³źĘJŸ×MO¬6ēü¬‚+UĶźa•šzÉ|¼ÖĀ„·UsŽõaū³Z=>łž|ĶÄĀ‹Źxķ£ŸņŽķ{lL9}æśS=ė6w…½‡<ų¾“›æüƙ©gģó=wzbéōžæ”ÅÉ»_˜™yĪ>ž|Ķö¹Qßää_/¶rĀyūټ3ų~t¹żæs»Ł¹ÓŸÜĶé ž®Żģ¦Óy|ƕy“[øžÜ}œ·ĀĮÆnÖ«ł«CMśäSȜ¾UŚT„‰—‚nt…“Õīü šŗŗ.žQŸķ™œ‚…ł¶›n ieHfśyæĄćv±ńÅ»|ßmzķw¾XžÉ§’œŲ”ń}žsņŹ#*ć‡)XxJ­7WQćŽ ĒpāE÷õz¾(C ™SN¼eĻŖ{„BĘÜXŽ©zqų&µLc•q³Īʐ^„L—ygŽŗūo4į“uŃPŗŽ·Ż[RN É`˜ŃŠģbżÖ.N\~yĶEńl+ķęOæLćĢ“¼+NŻv …@Ž85ļż'‡ßk箿ŌsķÅńAǾžqæ’g“o»8Oʅ1äŖŃiÅv{(-³óę'TŌ:p¹E~ń»:¦•h#zlßŪķSĀO™ƙKõ¤'+Q©Ģ7ŪJm<÷vuMNģ‘ĖnÆfė;d¤Æ~žM§O>ZąüefO"Ž  &Ś+_[‡›m»»yń½vꚜ4›\\ł«j6½Yq1cZ‰–”D Ķ.Žś“ƒßÜ(½Č”Ē>’«ĪÜ÷H#§H”FĘŹ%zNœ…Ń Ēī©krņŁ×¾Łź<°ŚĢŻiąĮ[SCśłĶßłl}'śh9ža`b¾ĘWÉ£«ŪƒŁā¦“ĢĪėwŠaqóŃ {ŗÅĢ—b IDAT—Æ"w’µQ•R`Ī“( s5ÄDɂ¼_[\œńÓršM®Cē—±|”ž‰…āUĄč²z(-³ńžj Ķ&]Ż~vO 9*ęL u=ļ=włķÕŲģ"%yV,Š!=Y‰R)Šlr±a›•ϾīÄķń†\|K%Ūß+ō…$Ä)8÷ŌX_]Ż>^ėu÷MNP0oŗ.č|“‹Ā‡> wгĶLHp!hGš0ŒdrŅ'Ÿ‚5ʼn©kä…zĆ}([7€!½y„Uģžč”vsSyŲ6ÅK/ćĄ×ÆŠR¾•ŗ]kØŚņšŲDʾy€Ų”<&Ÿžó>Ļ%Čä¤Ī鳝L®$!{*õ„k±wµÓmnF›ŌÆń¢‰1öYś  pń©Üņ!e_æĀøéĖCŚŗ’ēĶūĮĖ2ģEh-„µÓ‚::JMų¢D„3PtŹ5”Ö;0Ū¤²&ƏĖĮś§žG·wa-cņɾ\ˆĶ„µÕ‰*93dī;Ґ ÌÕßvś\cžłį¾tv4;Ž/ōÅ#Ū"tŪ¼ \t†óN‹ ‰Y¾’Ÿ¾Ļw\“Ä?KFĮ䮟'sĶŻ5¼šn;.·ČŸžŪŃ-×ćńŗ?ł@&?XšąģSb¹õźDĪ»®‚5ßuŃÕķįĻ“š‡Ū‚ØĒž÷ę?P*>~2—Y“Ć+$ēęķoĮe쯓SZfēū=ŻL-o X4+š—?hg_…Ź:ćҤ0€c%3=ųśJO Ÿ)z$ąpŠäSóÖ?³ÉĶ ½6~õÓ$^x·ŸŽUƒŪ#ņļ—[¹łŠD’āżŅn»‡§ßšzĖÄčd¬{i7sž2ÆŅ_”«ę¹€gGE­ƒ’e^×īÉEŚ ļ$$ĘÖ¶zDŃūĪŽ6ö² XGŹĢ/ČäĢ»ģ¼sļiˆ7ß¾ükŌŗ8ļCD˜{éCż28h¢aó„mŠŚŽpT€(CØA5铖IgK5Õßн«Ķ;¾™œńsĪ;bY†UŸ#V|J=`Ś»š)g’2bčƒÄČgĻ—O£Ž|‡µ›ÅDĶŽ/°¶Õ›2žWžu0D[ŌoDÜ÷&{‰ĻžJžāˆZ¢cB2 3¶ģņ»ĶNĢļ},P±·r1v8EÜŃē9ŠSłÆ¬sPZf $OƝ×&÷ŗb« üõ®t>ųŹB»ŁĶG_Y°ŁE4źš]rf\Xå’0:­ŒĒīĶ`Źéūp{DŽ_m1ģÜēĶŅ?†.¢ņ}“œUĖc¹’_^ŠGDĄÄB /ążüķ÷VÉ0,šÆÄŅ%R~ ‹ YMLÉ ļJ>RxņŒ°Ź’a.:ĆĄź<÷v6»Č‡k,\zŽā¹{æĖ”•Ź3–ź{Už2S•Ģ›”ćƒÕfö•{½mņš÷ׄ| Æüm\ÄūĻķyłQoŹ?x=l½7/7vŅŌźāóõĢīˆĒ\vž‘k.ŒūĄ”b-w_—Ģ÷yćæŽŅå3HHHXņÆfē—¼zė¬~w8g€Ū9ō-~ÜdJN¾’]Ÿüsc9ąõț»ŠŌāłż:—RŪ’UfµĪ’īwvwöūø ś¹Ŗ&2 ]ĀęץķrPžķ;-¹Ō÷}gk -Žšˆ“’DRŽNža„Ų“Ż÷ŁŽi¢³„ }JŽJ$q<Łńį£GŌ^›DђK™øģZ”]ßHbå€× ¦µb™ęf4ś‘[ P2 3¶ļńæĢ‹Ę÷®8¢‹’ńõĖŽAoYZćrW,Šé×»6:JĘŅŁŃ¼ńIŻveUv&D0Nü蜹„„ÉĶT1m‚–M;¬¬vŠlr‘hō_Ї ĘĒõ/Öy§Å’v(įXq„Š ‡)ļ’~_¹½_żKōŽLg.Wįi«Fģlģū€aĢä" 3'õ½Śõƕž{Ū›Gbć¶® €F-pÅł^«ż²…1ż:oā”kŻķéģņ`Їæöƹ0>¢ņ°cƍ¶Ær°rQLÆŹ’a¢42NžĶ ļ¶ćńĄŽ}¶wüĆ\~nß÷÷¼éžßÆ”ŁŁgūŃF]‹–ęF9…%"ŗØ‘ķ"8\šøxŗŪAŌģ£øž<#ĪnKA æøz1Ņ BöÅ„õ»„¦Ļ0o[æ±Ąķ<žļ×ü±õ­?āq»([’j ā»w}yņęŽ÷18ļJ !HBĀfi„„|ķu{IĢ>ŌāŒ:ƒĄ —cd—— Ìî»Q™/æ?(äBÄŲü@źżņœŒžÆ~fģ/«rD4ōG†ĆżmŚįu]¬Ŗs’āT×;Ł“£›®nOŸæCqž¦OÅ’0 F…źś±§œHōά~(’ģSQ|MČ×šČÆÓč¼»Ėü“e—;rœe¤’ ‡)«ņ+yŁż7 fģÆoŠœ“ §ļū,6Ąxac1£ŪöĒńÄ{¹ˆ¢@œĮĘ]·j$#Ą1ŅŁRĶžO’…ĖŽ†\„ÉW0:Ŗ+±wĘĢ dL^zÄ}Ä$F.ikļlcÓkæ@¦P!WŖqv[ŲöĪĆäĪ>ńȞS}įqūŸ…}% ¢ ÉdN=•ŹĶŠxą;,M¾ü‡Ż’•ćf¬8Vl–¬y–®ŽVHŸ Y' µHc†“o|†(cļ!1N['Ö¶zöÆ{‰ŗ]kØžžSźvÆaåļ‘=e$•‰H€a†éŠź>ęųhhm÷[ŒµG``HPгw¢UˈŅōÆĻĄĪĘ'ą7œ¶ †'^1QQė`Źéū8}©ž‰ł2R”d¦*IOVF\!ķ‹@åÄ<ŹJI;†ØŽ½~Ć#ŠŽ°›Š–.§H‡ÅŻ!bµyčģņ°cŸļ¶÷/o‚”ēB}“_µR ¼&“’A8ä!V[ųūB!ˆŃõ}ĖFŃ ķ‘²~g¢č[»Č®R7'̐^³ĒBżĪϽŹ?@ūAÄÖR„„Ń‘Ķ=0¶Ž˜YĀĢUwh’ß½ņ[ģ^O„ §\…FŸÄw/’§­‹ ĻßÉI7<Õg‘r „m°"&Wößy,-¾”ŹĶ€(RöĶkL=ė’°¶ÕÓ\¶€q3Vö;‡D(U›Ž”³¹Ņ»Qž ‚±¢Ó†VØ1B\FQæbŒŸ}«’7¼ŪigĖrźĶ/_%F4ŅĢd˜Ń}hÅģpęģ&°X•uĪ%ŠAA8œ”æ?*P6Gš*į]×&óéŗN*ėŌ59ł÷K­!Ēė“22S•d¦©˜1AĖ)ób"f/$p®%Ü$ŽŽn»Œ‘™·ŻO\š^GQV›kwčudwˆüé‰&ž÷ŗ·źÅ`ؼߞĒzn’cż÷a‹dPŒ*ļėć‚Ó%ōŲ"AF.GŌŁ54‚‚bęķ;®¦ß±oķ hō L9ófJ {¾| KS•›? zŪ'dN=µ×~:M5ˆwæVōÖßgmģąÄʦM\DLb–ę*¬©gŽBÅę÷}ÉGū?@ĻšĪAx Ū-Įó/ŃfB ĆA`ŚŁ·rpĆŌļ^‹(z„^ę4GYŖS<†ŸƇć³Ģ,qŌDGy’’ĖńYTz•Šžæ<‹tļIČB`sĻŚēIń Öæ’Ē=×'3!_ÖŅÕķaĻA;Ÿ®³šąćMœōć2®żuÆ‚B$¬µÅū«ģIōŽŁ ÷=ŌĶ-H毯bwŽ\÷Ü]’e?ģAćčqż:œ"ē\[Įļ’ŁVł×Ø z9©IJņĒ©YµÜĄÉs¦œ“Óyģ/ę±ę¶/!1Thc“|F€Ī–š~×V»—'/KāÉĖ’ųüļ—†|ļq»X’ō­¾—õŒs‰J«G¦PqĀćk·įł;śĢ!ąvŲ0Uļī—\‡Ū 29ŗA*A&2 ^€¹ń Me›}ī’:c©%żKv8"P¼erŚX©”±„ŸŲ”ńØ£½yzÜ.v‹)č{A&G®ņ/ӄWū‰Ćjö}KŽ5¢Śo°źčČ ĻG’Ą0#>NN]“K—ŪWVo T¦»ŗūodT "ģŽž+ŻēV…é/.VĪ/šÄ/š„(zk›W×;ØmtRÓą¤ŖŽIUƒ{m>7ē§Žhcś„(®śAä²)mfųBݽ%zēó5Njė½’żžš6ī2²pjóKut8Ž@>¼RŽóśżßk&VoōfĄĪLUrĻõÉ̟©#ŃØˆčusķojRā`Ōj’æ»)…%³Ü°–¾¼ „„ÄĄ“˜;š_`ŖŽEGC±)ćū<¦„|›ļ³!LBæŻŸžĒ§Œ3'P°šbßwćf¬ µx>õ„ė°4W±ķ?3óü;{=ß¾5Ļ1ēGč]¦ŠļéØßhLÓśUbp (Xx8 “>Jć¾ŒŸs^ļ+ # !’D¹šhY Š’*¬H£‰Iš…żt[ZŃ肿6ŅeŖĄŅ\R:³?˜o¬ 䟃øē%žn2¦­8¢©ĆIfd«Ł±×†ĒuMΈµ¾–Ąø’#1¶Š ’Bķ°ø—ī“@WåčżF %QAJ¢‚pE’ž~³ŸŻć]=yę­¶^  Ū r'Fq“c6_GėČU ;"ä·č‰(B÷”Ņ›QŚą ž„÷żeß|,»ĻÄ}¾€@Cr‚¢ßI9%$$††Ü9ēQ³ć D›/½Š“ń,ѽ¬žw››ŁžžæĘwÖŌӂ¾ļ2Õ±õ­?ś¶O¼č¾÷ż/ü-o’śdDŃĆĪžIŽÜó1¤F<ēž/ž&„h9³Ī ū}gk kž}½o;{ęéū:hc“Čšv›Ž£bóū¾żćG•ū? ŒB(<Ÿģ4ѽTƒ‘»Čä~µ.\•ˆųģÉ>@ķŽ/Ž8Q (zØŁń…o;!{ņQJ:Ńg!œp“2T؏S˜ö`"†“ 5¼ž±7ŽīūŅī7$Ēū’ņK’KČ˜ŚżĮ¬}ŅÕ픺ŽIVZß2×dć¶Ņn^’Č;ž•KōĢžŚ·{Ń„ēÄńėæ5ŠŌźbOYļe9öō?¹p¤G¬K 4ūūY²„Ķå 7 Ģ ŽR|E¹źž)’@§u`B~Rż÷f×ōYŪčdļ”±ēe©ūuK„’og_µ;5yō¬>J­>h[Pé#“™äžx„Ÿż—ęƒ[0UļāµŪg“1q 9SŠĘ&”ŌĘą°š±wµcn8@åęqt{]pÓ'.&q|p¹Æ/ŽÓęõ@:¼ŚßcÖDņ\Ⱦ5Ļćq9X’Ģķ¬øżĶ°Ö{A&÷'»š½ÅO“>q‰Ļ@aė4Ń\¶™Ź-śĪ—JђĖņ'ź…‹ģsżˆ7™øōČF ‰ž!Wöx‡É„…“‘Lʤ“ØŚņ»>yœüeHé÷ń{¾xsc9ąMō™>ańńSb ̅³¢o-õm„ݬ\2°“ĄUļ­»zż dóNŪ¼q‘_ŸÆ·płł‘Wą<ųf«7į‘J)éw¬Ŗsņš“^÷ń˜hYæ †9M­®|=łf«7ęI-gŖ“:*у5ßuįöˆČe½[w7~ļ ¼<æg€>ŗ’łv˜šŁÅ濓µūū_£ö™·Śøļļsēæd’•6ø±mž^JŽ$Θ[‹Õ¦ ÖĖü¹r³%Ą±’1łT:›+±YZ§€qt)u2¹‚„×?Éē’øœ–ņ­x\Ŗ¶}LÕ¶{=Θ5‘…W?“ÆfĒT|÷.ņńž=™qŽÆ(’ömœ¶Nö¬g’ׯ?’‡!ķ’ ND›DłĘ·ØŪ½–ŗŻk#ö©‰1rźĶ/ I\pŚ„…Ä$ŽĆr(c}޼Uƒ.Ćh$„d!–ę ļjrL&BlĪP‹$Ń !/įņ{äĻæ€mo?Œµ½›ÅÄūæ?ƒWż”Ā9½öėq9ŲõéŲüŚż¾} / 19H€aĘĢIZ šM.>^×ɝ×l’—é“č“2ŗŗ=¼ó¹™š†¾Ć 6ķ°ņŻÆĀ“™Ŗģµżßžnį‚3 hՑ'¾Æ|ŲNu½×Ī“Ø ¶ć³üʀõ[ś— ÄÜ馲ĪqH¾Čq‡–.o§Ģ‹F!ł.<K]““—Žkēā3#ĒÅy<ščs-¾ķĄ8{™ Œ­m.*ėżŹć±vS»ō_YļĀ5iIJꚜ¼śaw_—ÜÆ\ŸÆļō}žZ48ž11”?ķGą4œ‰Ņøø|E²„ķĄ$vėhb“˜rĪh°b²Ī)‹Ī˜Ęéw¾ĖĮoßęĄŗ—h©Ų”Q’02¹‚„ģ)äĪ9ŸĀÅ? г÷ølyćA_RĮ¢„—÷ZBL›ÄŌ³naū{`ū{%{ęJ”šąėVd,¹ęq2&.a’ŗ—hÜ·Ń—a’0ŃńŒ›±’)g܄&&ü€\©ńÉ&S„Ī!§Ņ}\ķa÷g™\AīģsŗŸačĮćr€zpVāć¦0õ¼»Ų_ŁL—&„‘›ä÷x³åQįõŸ5‘¢„— ˜ r•’ŗp$ėó}ÆT³ųšńńŸ~€ŪåĄŅ\Éœ…1³„䂣Ņ Qėbä Õq†2…м¹«Č›ė]¹ī2ÕįrXqڼ÷¦&&ž(C22yųł€L®äĢ_rD眓ü:&-æ®ļ†‚@ž‚ É_p!· ›„›„™\Ž&:¾_«€3WŻÅĢUwEģ’āG÷‘ģ=9šõ«t4”=ėL“śĮ)C8Øt”#ī~ŽŻŽ.RŠē“}āyƒrZµ.yœ¤ 1½rpć›G|Ģø+Ō˜ņpØPORŠęrź-/²ö‰ŸÓŁźĶŸeŖŽŻļjć¦/gž•S°6Įž·Ų³½›Ģ©§awdł†’`rÕ*#’z±Q„gßnć¶«““’ūnJᣵšM.ŹŖœC%j•@vŗ ]” Q<“Ŗ^ėÄąš;!_ƵG~Ń'Ä)°Ł=¬ŻŌÅō³ö‘®ņ)īmf7{Źģ>÷h€“ęDsī©ĮYlå2{žĀæōŅž÷U’}ÕDR¼‚œ •ÆŌ`K»‹¦V Ķž\Fƒœ_\Y¾gŽōfFĶJSrźIŃ(–.T²u»›V“HF’•Š[ś>h˜’Æ ©ÕÅ„·UsĒĆ L-ђ`cµ‰T×;Ų¼³Ūf"šū›SB¼]~vQŸZQąń&¹•ł3t$Ä)ŠGĖhisÓŌźbĒ>õ‡ŹędØ|Õ,Ś:܌;†2Ė’wU"o}ŚĮžƒvJŲXvÅAŒ9ó5 dX¬Lķ.vļ÷ߓ2I 8H+YĄ…߅ƦĒåDćĶC˜]b`ØŽś!µŪ½×5ßĮ ·‚jų]G†ō“ĘÜK E¹j[\Üõ—†¾Įī¹žŽDN_¢ēœ9$$$$Š6K°Wˆ©}dÆ ¬¦€$™¢]Ņ»p0HȞBBöbSʵ(aŃź‰MÉ#.£ml’¤ü'Śk÷ų7Ü6DKÕŠ #!!1`HOĢaŒN+ć釲Шžx„•VGŽ#–Ļ=m “ĢNFŠ’ĒīMjqF%¢Ÿåā‰× lŲut+Õaéį°Õ³„ĘAģ­©č#Ę{@čyæI÷ŸÄE‚ęåŹČeĒG’`˜3©PĆĆæLcj±–ĒžoÅÜ9ü¾SŠ4L+ŃR<~pʇõ—m„Ż|½„‹i%Zž8‹)›ųqaŻƾå`Ėn-Ļ~œĆīņc ŁlŌ*ƒ^ŽA/G­’ĀC$$$$$†ĀøSAīĶĒ”0~&ŗŽ?—ˆŒ>Ū÷YŸ’‡F?°ŚI#\~¾‘ˇqāŗ’›;Ō"„ej±–u/å µ£žŠŹ`£TyC4%9#Ē[åĀÓ \xś±å«$Fxā% ‰£ĘX€0ē.Š’<Äź„pF ‰A%ė$C¹'ń…#<ĆÆd8&<žri~.1FŃŖƒaZĶȞ zŗ9 ŅFb,#W”ź_U¦92Ų³SšHµY%Ę0śq3ÕaK˜4FĮ$$$$$$†ž„3Q+½F€q™2&–HŽ•Äń³üõ§åjˆ+Z$$†™  ÄĒJlZaĄÉ#åR’»ČĶyTxōōĀš æ0y ‰A”ēµ/“ ž ¤Ų3k—„Ä!/ŻĀ}Wm§]QDF¶qT¬ 5†Œ&~3ķMÕԐ š#Æq-!1ā=ą°Ē`¾ÖÓ'ŸŒL”¢­©³a:hG~¹V ‰£Å =FżQaŠĒϲ:»•ZJHŒnz^ūу$8**x6āvK‰±‹Nė"&IŽT•ląŠÅg¢‹ĻÄ\ļÄlĆī¤ IDAT“,üc ±«aē’mmŲ’ņšœśdŠAŹ@.ČH°˜ä‘ļkœ8\RŽÄĆŽū^Gģj@(˜ ɧ µDĀØ˜¢bƒŽŠśh)OÄ˜ĆįØi .dŒ;žŹųŌÉ ßJ§ ˆgœ€ĒA1x1ŗc‰,£bÄ'^’8Ä®FŲń$¢­ kÓLU;]™ a=«ŸżĀŁ…øó)DÓ^°wвćC:›+†ZŖaTxäÉrąöN%»Ź LĢmZĮ$$‘ļvĒcwśmz*%d;ž6¾ü\7_§fw©“ĀųRņŅ-ĒżœĆAņįUu“ S dŹ7¼ŽŲ¼A— ™ ĮēO–-ˆnØśŖæ·#č+™|h¼\cätŚEšJWƒi/¢~Bś{āĮŗ[zŒ[ i³’¦·EØ]‹Ų¼”§Ū„> r–ƒ¼‡«ŗ„*>gš$ZTFyėÜė3ƒŪ»Pž˜+ƒŪ BĀ$ČX:ī¦ļė¾ ·6Į;nuzöv({l¦ŠqgĢGH˜2n±źKhŻT•BŠg#ä,ó^“˜++>Epu÷·!ē4ˆN®'īź7Ņ“ŲŌ|ŒY“Bö±]»i,{ϻѶßū;賓 8ŒE”u5@ćfDWšż'č’ uvØńĪćD¬żz\‡‚B )³ *LżuÓ>ÄÖŻ!÷Ÿ`ȅž×-xÆõŗ !×!Ŗ˜F 6ƒ„1ąZd Hœ±9”ēč¬ClÜbĄA—‚zBčøŻÄŚõ!×! ·½6!Ģø÷€ib`(AĆx„ÄÉ!ĶE[›÷ŗrZƒö šXÄŌ9=Ē-z¾Kmš~™Āū<Šg…Źd©FlÜ=ī?!: RgŠĆ“ÄmC¬Yļ½Ū+µz¢÷yÕs-» m_pYXA€ø„„ ”2ŁLPæŃ|’”6 dĢ 5ŚW|ŒXłEH7QĘtā2ŠCūŒ ĄŠST<ņ›o»¹]Ć£ošÓ3ĖŠė½)!1²inךƷĘc±śogA€e'ž*,6·Ķņ–­Xm ;µŃģ)Sņõ7'/5Æ×a…»‡įŻék#X5qésżßŁ;w=ė]Q퉄ģķÓoŚ-īZv‡-8(š+tÉĮ [k)āwĆ l©AdłgtāAÜł”W¶Ē0ēN<Ć«¾š­“*ZŖA‹2ĆæÓfBÜżœ÷\įśw˜¦ž,øŸ}Æy©p2uT@t*D%ūŪ·ģš*ĪadĀRćUŽrWś÷y\Žq;:{¶>4ŽZ„9w+•Ÿ"Ö~¾½¹AŠŽµ ±ōE@ /“³ &_ÜOéKŠQö˜+aÖ’‰Ä¦­Pń±÷s˜sˆr•W©?ŒŪ ;Ÿ§5ü5ÕY0ūWĮ†«Žƒ!ķō)yä/¹"Ōą1ˆtw4ļŻŠQŽŲQ›`ņÕ†ńžļķˆ[ 5¾qč·ė¬G(\¼ļ«^cZ˜öBĆ&˜uk°‚޶qē“„‹żė7‚ˆ6;HfńūĒ”»5ģEӞgU_"–~ uß L»balmŽq÷4B¦» ņĪŚ%–¾­»ĆĖŌ° įÄŪ‚U±u7ģ|:|’u ĮĻŃ Ūž¢hūĘaŚSÆ Ž_ń©÷ŁN¦ŗ 3n]JĄøš·ż Ā”‹ĮÖüLÄ]ĻAŪžš25lF8į¶`CbóvŲż|X™ØŪ%?Üļሰ8Õq0ō™P’mH3>‘¢“®50PFĶ eb‰Œ Årv•ś_ņõ:ī{zK§70£ŠDR\˜‰ƒ„ÄDź[5lŚcdõÖä ×€¹'(—9)„™±€Ļ?mcŻöDācķœ<³üŒNAJĢ!1ŗŲ“ĒČŪė20™)!—Ęģ©4ķūKSx…-^a&)ÕÆ8[›-T†Sž!³µP˜l,=øµ•ˆ³Q$MŻŽ>5Ū·Ėdi§1R{@ē1‘pĖĪ>‡9¼¢ ąźf|œe”_É©«0ŃŃĖ9m$œ£«ŃLU/†X¹½•‚ć>°¹•ź ’”5źWrZŪŚiźE&§•Ģ€søķvöEPžpv‘ot"×ų•œš²6zó)K·‘pŽĪz3ՑYŽVņzŒ{’Ę"V·=dźĢ蒿JNsK-‘ŚzŚH8‡ÓŚÅ+®N ł‰"r„A„š'Šø{52¹‚”’EdN[ Ś8üųœiŌļś—=ĢxDƒ³šX£æt µ®Žę0Ź’aę2ŅĮŖHuū"]¹¢ÓJ²¬1ß·Æ­ž ę^EY’hœļŪvuuPAłĄRC†Ž…,Ąk§q÷Al‘Ś‹ ŽJōĘlß®®šZ")’xĒÖsÜ‘Ē³‹dY3j£ßÓĄTSŽė½”ė>H‚ńD–VźĀ(’>:ŹÉ4ņj8DƎ²^ž…nāœ•ÄżĻ„ĪŹjZĆ(’‡QZŹH ·(ŠTµ—E–Éa!Yъ:ĪļdŖ:Ųėø£»b4ś½“ģmõ4DRžńz’eÅÉ}łe2h0¤ŠÕtĄ×&.s"ćē_„B=zĀ]FąŠKT<ųĶ-žÕ&ē½õé¼·>…\D„”V&%F>v‡ ·'ü*ĄøL?ܘF“)8”[”ĘÅāiMŒOČ®ż>‘ A•d2‘Ā, Kg4„”oŖiŠā³MÉX¬Įć6źķ,›Ż@¼>xÜ—Œ7¦RŁØ ·JéaV±‰é=\e¾Ł•€Żį7 ‚Hzb7Ėg×£Q»½SŇRhiv‰‹Žr³dZŁ©=\wEX½5‰ŅŹŲq3³dzSˆń§²AĒ[’铿‚ācķ,;±£>ŲkĖī”óцTŖ›“ˆ¢’j•‡KZ™’£°u_ߖĘćp;+ŁŹi'Ö£īń.0™Õ|ōm*­ķĮŹ|L”‹„3ČJžš~µ-‰W¾uLˆ˜7{T½Z‡r…Š Ėo¤„| Ķ6bn(CōxÆa…:ŠŒāŁh5ž’<6#‡Ö„,:[ŖĀö—Z¼€XM°±4µd•_rõ=ŒFŸHZv r•’mŽ4L»?Ēi 3Éd¤—Ģėq- ćgŃ| t• ¼“Ķc°„¢¹Xjvąq‡N®*-³ŠœCŸ9žVc:]¦ŚöiaʝV¼€ŹļŽ Ū^kH!5«™ĀŒ¦`¦½«qŁCcb™œŒāćÖč‰Ļ™FkłÖ°ēˆĻžŠŃģž/ĻeoŻn߈B­#£`ź€sÄdŠbH”»½!ģ9ŅJĀżß ©Žņ~ŲöQĘ4R3ójzŖ fŅ~`]X%X&W^4§Ēø“fM¢-Bņ¾ųܙc‚‹œYgmLÅa5“;utØōP ‰I`ņY·Q³ķcZ+¶āvųÕb™\Aęų čbżļX§*—¶­Z\ŽīpŻŸYLjl°QÚYBsŁwaŪ+5Ńdff”PūŃ喰{’—a=RsJH <‡>SlrØ7Ć!b’rHļQBi\1•Ķ”«ŌąwFnaŠøŠ<ڶ©q;Ć«ĻįĘmÉ(ĘTźł ŌźÉĢĢD®ō£Ķ-fļĮµaŸSi9%ÄœĆ„)&›%¼ł*6­€“øąłŽ{\ 5¦Ź°ķer%™9hĪaĖɧm»+¼ń#!³(ģøŪŖw…mƎŽ#+# ™ĀŒ:»Kł7aŪ¤fc ·.¶č8ģ”óCzi†ąwvģāKØŽņn§¤‚¹ŅƄ¶Œp1Ņ•3ˆømļį¶4 }µšD{ĀFmżKBbŠÉĻ•ó“ĖTÄÄ ‹ąī=nžžxd‹’ʹu¬˜]ēŪv¹eܿĤå’0‰;æ¾|głÖŚ >ż.%l{€ĪßKQ–2^ßŖåžgJšˆį—™Em\¾"Ų ż×W Ł_¶½Jįį·Wķ &Ź’’ū¶4ž§? xˆóU³t†ĀawŹøū‰Étu‡WS㻹ėŅą—ā«_f±zk˜ųG¼ĘŒ›~°'Č0QÓŃĻ)́Ģ.iįGĖ*‚öżńÅb*źĆ×ŌØÜÜwÕö Ü*_oOą…ϲöøą¤JLńĒRŪrīü÷dlŽš+Y™IV~yI°ä Ÿeóõö0ńx•śŪ.ŚCV²_ )Æ×ńšKÅ«Į,˜ŅĢ'Oj~’L u-į­ūQļø%’x­€=Uś vńFŖ!9éŲī?¹jrķŖ¾Ž <"<±vą+„øvlęf\v+ŗųŒ°+4¢ĒEGżžÉøZGtāø°żv™ź°™ƒ×·er±©aK°¹ģVĢ‚cq1>“vŗ(ŠXĖpŚ‚ ‰ uś”<„0n¦ö®6:›ƒÆ[AˆIŹE© }VyÜNĢõūq»‚ jźh#Ń abw«©–nspī™\yhÜ”Ļh—½ scYČø£ć3QĒć“Géh8b4PØuĦä…uo·[Zél­Ś'ś”<źŠg•Ē夣~w°¢‰I@ŸŅ «µ›%Ųp,WØŠ§ę‡Mŗē“ubi, Q¾¢²Ā*ė¢čĮ\—#Ųh ŌD“<~DV·šø]XšŹ±u4āvŁ1¤eLigėh¢„|KŲ’#1Ńć¢qß]Į ›L®$qü¬°×•¹įu{Bž˜¤ā2'†“wv[hŚæw˜p…ZGRĮ*m°L¢HkłV¬mĮ5A—5)ģżŌŻŽ@kłV<=VĵśDóNq%÷ø4ķŪ€£;Ų×G¦P‘˜wj]œ@Gż~Ģõ{CĘ­O!£$̸͇ĘģĻ ŌD“T0¹²GQ¤åąf¬ķõ!ćŽĻžö’ī2ÕaŖÜb“ÓĘ&“0~fȳĶķrмļŻĮļ¹BMbž‰Ø¢zäģ:źöŅQæ/dlj±i…!ūÖš÷o !Siõ$ĢA>Xe5{péÜԊ”¹÷GŻ2E¼Qą¶_hyć]ė¾qį–rJŒTJ“+XyŖÅ=LS˜/'?WĪžƒįo¾K²x’½³]QłhnWc.&JćĮÕ“õže½®+‡’x’d£”NQłØn‰EœŲ„¦%¼ Ž•ųfw±ńžIo­„÷H9Y¼bhn‘ETžLZ<†’ o‰jSäq‹"ŌYsÉw}•"¢ņPc2"‹žčō,%ˆĶ!§•"¢ĒŻŁ{É»s²xæņŽZ/‹ØüŌ¶hŒÅAz@M«6b{QØėĪ%;Ž?ÉŖ+SōZ ¶¦-Y¼œ@}käq[mrŚeE¤·LA^”š=‹Ź“'Čłń…j¢#_6ǹRQ©;Œ S`H?²ÄM:c:cZæŪ+ŌQ³B“nE”é{$Øuqa•€HČ䏰J@oDÓĆNź#”PėŽhܱ©ł}· @ޘ™BI\f˜D`½ ‹ĻDŸŁwĆC(5ŃĒMéw{A›VpD2 w¼±ü>’OMlS—õ»_A¦ „hž’³wßŃqTēߥæ3³½Ŗ÷fKī–®ą‚ nt0Ę`Z„BB^ $!!搄€IčÕc06ø€»±q·q‘eK²z]i{y’XywG;+ķJ²$KĻēgdz3÷ījgę>÷Žēv¼cCZALæ'¹ZĢ1—F_&†AŅą $€F ŽKCÖų…QļĻŹH93źżDõł‡’« Č37ś0 ’ņ'ĘT¦XƝœL“‘³b:‡1c˜dC?…ĘˆĢ±ób:G×ļ T7-Rą’™2lūއƒG¼Ø­£¤’ÉLg0¶ĆĢ åˆ3öŽ¹_‰?x±u‡eå| 1ƲĄ…Ó“`4ĮžÓ50d°'OKOĻ3Šƒ6AÜū;eŠNJ„GØU ĘM0‚Ń?į£ ˜#t@N¬£Ń‰¶MžčĘęmŅsŁRSä I·˜8‰Ē¦ļ]šzĆÆ5, L™,®wj60(׉’2ézOĖA®×{ź/N•I'5ÕØŒ/®÷Ø1ōß8a±H_’¦NQ…Õ{ŹD7¶ļ’®wf:‹ģĮ‰¢]'ł°ķ—d°•eÉ“u`4Į7d ²3(Ɣ®÷ä 2°ZqéŌÉ^”­”®·N Œ'Ŗwį8ŚõNŲģŅõž2I\oĄ¤ nģŽ+]ļÜl鹉¢›Ė:½µ ƲZ@kdB!¤ļėwS"q{“‰‡“ņ’~@£āŒ,ä½7Õ?jf³€Źjv‡æ™–Øšx€‡½aæOW('Ѷ:]ź ›źĆ²Ąˆ”,āƇĻZ,ŽēĆčɉ † ? GŽśŠlļ/—c ePKtĘ×Ö (:Ž”Ė"+#¼Lnpš°NW›a¤ZcGs`%ņ8Ÿö”ŗ6¼Ž£†s’A ³YĄ‘ć¾°zj2‹”į'ąŠ>˜Ū r½UžÕ5<ŠKĀōłƒXd¤I evūėķr·®©ƌ’IÖ»čŚ:ń9X(!ƒĮ¾‹YĄ‘c>“™Œ“TC‡ß<ﯷÅ*.“RŒ-ä Tō\€¦B!ż[oN0B!ä|@B!¤ėĶ@’X̐B!„B!ķ¢!„B!„2P€B!„B(@!„B!„  „B!„B B!„B!!„B!„€„B!„BČ@B!„B!dõv!„B:ĆŽT SÅQø­Mp;Ģą½žŽ.!„ó§PA”1BeHF|öh(u ½]¤nGB!„œ7A@SŁA”ļ_gK]o‡BH?Uŗė3Ņ }ĮŠ'ēõvqŗ !„r^š¹8¹å]4Wķķ¢BĢ5Å8ŗęŸH5¹\ 0Lo©Ėś}ĄåŽ÷įČQźy˜-¼ŽŽ.!]#“1Šk¤D#†±5‚ƒVÓ7/Huõ<ŽąQßČĆbEŲļ/'‹Åœ™2Čåāķ‹€o¾õĄŌ,ޮճgȐž&Na"Ąö]^œ8ɃēƒŪYVĄØ2LČ…•­¢ŠĒęm^Ųāķ‰ ęĶ‘C§ow{lÜäEE• Ś®Ó&sZ~Ž#G}ŲsĄhd²€¼³gČ “‰æ·³€o6zŠbG§ęĢ”!5%¼Ž[wzqņTx½ĒŒ’aŅ„š2©ą±e»§x{rƒ¹³eaK.7°ž[ŖkŪÖ[ĄEÓä(žN꩏>ģ=ąkó} œĒaö Ų6oi2ńXæÉ sŪz뀹Ė‘”(.“ ›·yQ\ĀC)Ēć 9L^ļŅ3<¶īšĀéoOMa0w¶j•x»Ć)`żwŌ¶édV)éÓd”Kitz’×eĒk_‚£¹ŗ·‹B!dÕG¾…Ėڈ”³n?ļƒż6ąöųn‹ßlōĀī:~!ē5Nžę±óō’‹å˜7GµŖo\”lv’}Ū'}ķī·÷Šlę±äZ…hū+oøPRĘK¾g’ažū JE°®ŪwyńžĒnÉżŲēĖ(0ł‚ą%ĻīšāĖ.ŲģŅׇŅ3<½_)ŚöéJ¶ī”Ž īŽēÅS«‘–,SI—_w‰Øgķ=ąƒÕ\{…8ņńŅ\ØØ’®÷Ć><÷;µ(X²y›}¹Žr¹㠃a‹UĄß’ķ kŸU^Éć{ÄõžšS7vķ‘®÷ū}ųOؐœl ā±ģČõv8\1?X Ažõ7jj„ė}äØĻžV .¤Mæa“’ūBŗŽ»÷zńĄ=JŒ|Cs‹æŽīSÄ«Ŗyüüq½ßūȍ}„’~ŲēųOŖgģæ·~OąqrÓŪ’‡26M>ܜ`śķc !„Ą Č=MŠŪO@į1‰ž­©ō Ź _!{½TŗīŃ/ļ”M&ƼīŽųMHćök×{°gæ÷Ž©@FZļ÷LnŽęķ°ńVI±‚©,ššēŅ3™÷·XŌ.EVj°Qzŗ(€&ā{NŸ0aŅąąp‚š löäČe*õB0m;Uœ@.¹æĻ”ØBŖĀ<ĘqĮń§NZ!˜ÆŻU÷o1 h,+AjbH½O&PG>DZŒĶ v«W•*ątE®w©D½OŸJE¤Ū…× œ)ŖBFqśXõ.²@˜Üxms°Ø©Møc“€–ŠÓˆ7’žNuTļzŒL³^W«ąö$FÜ’t‰;¼Ž§Ó„$üæ¹ņR āĘč¦÷oż]ŻÉ]h©.msĖāQ™r-lźA½T*B!żU .CœyŅր‚•‡7"!o<“ ‘ŸSūŗ~hlš—ŗ`6SÆ?xźx¼šOż…Ł™½Ū(įłčpcókĮ[kDŪĘäkp°8^r’“RÕą­Įßłø<v(ģufcr+Ą[ƒ Ā ‹ä8ꛕįo0®ĄŽ*īm_Ą Ŗ^ŗ®Qł0$ł xk°‹yxŗJł(ø<ŅßÅųü:šÖŚĄk€‘ƒt8ZbÜ?3ŁŽDE9xkpŪŲ<'vĪ—ÜŸeęT‚·ߐmd‘`0¢É¬|ĻŲü†°z+ą°ž‡4Éżµj/ņĻ€·ƒ£³ŌųJ¦‡Ē©Žµą­õ×jC³u(*×KīŸ—nƒ©Õ{Ü`7—nųq¬€Ńٕ୶ą1ā9“z˜mŅõWŠ(Qo6ķO•Üß õ Os|FŸFŸE€sDཨ8šµh›[ž€S™wĆĒéz©T„Bś3 L† ąT¦aPå`…Öē;A@łŽÕ>÷g½[Ą.`Aźq¹głœ«įs}ŻńŽp¹æ¼č@UøJ+`lA3†ēš§sƒćz½Ź„t ļZģ œ,×cQÜ^ń0ä„xæyD ½¾—†'ūœ0—Ēæ?ÉęZ-’Œ. ͱ Nē†\& ¤'8P˜ßvƏŞ 0ŪÄqJ•܇‰Ć› Q….(©Ö”øB‡Š_8`h¶¹i¶°żmöœHk µLŽŽ_+8t*µ&ńdq+`ģ įCŅkMJ9_›xHV²#óĀėķń²ųįx¬q½Õ &h‚J^ļS•:œŖ7„XžcFVŠ=l‹]޽'āįnÓ@×»qĮ0X¦m½8‡śq°DĪ 7Ąx}x½«Õų±Ä¾Ķå6;Ŏ¹ę°żŻ^{Ž%Ąź×[£ōßRõ.*×£“FœØe€¹-ČLv„ķßb•c’I‰ß‹Ž… ĆL`Ūü\Į¾¢x4¶ –Č9†š`Ōƒ=&g^ū2U¦N”įęay¢Å)fS/īܛū(^^ßž½G£¹ā(ŽoųopĆąTęĻįPF-C!„t—Dó.¤×ƼfnxrµtĒE4n»P„¬wžÓūUą‹µn¬Y'ž§š—nĆķ KēŒš.BĪoĶV9Ž_7ĒJŽĘÓ§ŹpĖéŽĪsIą=ąk^Ģįā VF7€óÕėņ°ćHRąõ’k˜=³sƒģ( Vśż ŌßxmŃ AYś­ŻU4B!¤]ŒĄcXŁ ł‚C f܌¤üI>fośĶxE« ŲøIÜČœaÅC‹SćŸōkq:ī»¶…łātł;v{Q[×óy0Sq ń€’d@šńā›ųWėÜ-’Ų8Ģõ¢×ĶŠ^* !„H`XX5āé–mļMē“~8pŲ —;8˜A!pĒå§”õśBĪ9–n[P­:8†ē½z&PS+ąéēøļ1>Z­‘œ‡OH6gB-˜©Vpš0­9Ū<‹čµW9Į$!„r.xdqā×öĪjė śMąČQqCgāˆFÉy©„ōWj„3NJ£‘‡öLä³/żKøń<ƒ-’qŖŖós¢9e„Ų1¶@< ēŠgĶ R IDAT4ś„;¼ų:ĘÓR„Bz˜ŠęŽĆū"¬+|č7€śq`”Dr-Bś»¶Iåźz¦+¾¼Rüūóxhmt2šŒ"^/øŗ††ĀB!¤oé7€³øB½’d J0ˆ'Ūģ<ē8@)€Å*ާ?£¢„tÖą ›h@\Ā!„Ņ·ō›@ŪFŽŒėłäg„ō69¾l÷Böłx½āóRā?2%\X:÷ ŅœZĄį¦E=æ !„BH{h"!„ŅM.]‹Ę˜Ąf^ŲŪE!„B CBH—p•%ĻXPŹi!„čä&ʐjąb~ŸŻ- ¦Å‡ėłwĻa`bžąō8TŃ’§®¤Č‘ õ>>Xī†ĖŪ¹<)“ł?7»[Ą‘Ź®n9 2¤ż'ė<0ŁĪķ(ā 9JČ8Ąķp ¼’ļ¤ļ”!¤Køź29V¬ņ@€łSŖi !„Ø-š Å“u~e³_°ćĆ]ÖN7*{šŒešļ„I€ņ&/-«ķå{÷ĢŌćāajĄ5/× Ŗ¹sĻ /-Mąd­7æ^×år]7A‹„SüOüÆ ßwtł˜ķyaqō*5f®z©ęœž‹) ’¾ŪežżĄän½&¾—KŌæ<ꡆžĢy3'j1iŒ¦—KŌ5sfŹ1qœīŹÆ;·7NB!$Tfœ ÷^lĄÜ‘jÜ÷Ašķ”ŠB"”‘“f“/æß(¦¢@7ŪuŠŽ§^ōG}’šHŚyƒš™ŻĄłŃłBČ9ńĆń|±-r•·,QbČą~“k—±ó”{Ė:­’3ˆ×°“„ĄT9’óß_G?i<×Å$„ó!„nątsų`]<^0 xw¹ xRŻŪÅ"ä¼²ļŒļī“Äōž&jńĖłq€éCT–&ljZŽ–B¤P€HJˆć0(Ėæ„Ufkd¾ŖŗĪƒ?.óĻLŠ—įéS»ķx±0ź9d§Ė1{ŖĆZ“I9VģÄĖų{؆ä)ńŠmI*ē{«LŲuĄXryfLŌvź8šĒeuØ®ó?0’ßo2 Tˆ×°źÅ˜Ģžłš—_lĄĀYśNŸ«æ2ŪdžĘ«Ę&CHOųd 3†Ŗ1„õŗ;½@EB‰€DŅo~–‚ßü,„·‹AĪf3°v£ž–lĢX$£«GĻßlöįĶM€AYŠ.L!Ēė †Ī2ąå’—‰Ō¤šĖlE'püµlūĮ†÷V™c‡«ŗųl] Ž;Ļ?žųč«fTÖśØÓSä „ō)[ЁĄš4E»ū² `Ō°ˆS³0ŖYø}žŒģ5->X]}7€‚c¬ē W1Š*YŲÜ<nUĶ>x|±2q’g W²°{xŲ\Ŗ›}šņ±/AĖ"AĖA§d`w 0ŁyŌ[z.)p¼†E¢.xžf:ó¹9’Ī’=čUž ÆÓ# Žāƒ© ł'ŒjÉzłĶv5ēØüd`£!¤Ė^}ˉӄ<€$Ńć÷·Ć ÜŽOAÖl2c~© [?*€^KóĄ;ėD‰ wüŗ0÷"}—ƒ;„ž©Ņl(5Ņ×ÜĀLn™ŖĆ”Į*hŚ9ĻŖnńaó –ļ¶¢ŗEÜųŗg¦wĶš?7są7Ÿu(~|~·g?ŚmÅß×·DUŸ³äƒ«Ēi0o”#3äPpįåöņŠj¬:`Ćß[£«pŒXøzœ7LŅ"?9|Äj­Ł‡o;šövK—ē€?ĒÄ-Su˜”§D²^zŁŹF«Ū‹]X¾ŪŠSõBa,,Ō`醤ŹŃöėh°ś°ł„on·ōh0…ōoč5-v¢©Å»ƒ‡ZÅ"ŽĄ!+MŽQCT`¤ļ1h±ųp:dżĻĀa*Č$.ģgÕ6xQÕ:DW.c0zØ*šo'Ė\°Śxp,ƒ1ĆżŪųń¤5Ō›¼ąy )ŽC~®ĆGžÜ¶lÉ 2d„‰/ŖRēs¹)r¢ØŌ‡“Gvšc†«eÖkYä¶^°Śyœ,õ÷ Ė8…ĆT¼£c5õ^)r ®Égkt?ĪĄ!)^†q#Ō0čŚo -vĀåößĒģxNÆ×'ąš oŖNĖbHõ>_ńlÄKļ6 ¬JśB1(K_’<·\/ Ųņƒ K*ÜK^x"]ōļgϧ3hÜ3 /¾Õ€æ×€ŗFo`Ÿ3õxü®\rė)ž¹Ł§¾¹¬ż«ē»+MųåóUc|ör^»ū·gćN+ž{¹»Ł!Døļ°,0e¬æŗ;ógHk¾ńį3(.seėĮĀĻk±ņøhI1`Öd-Ö¾Ńqņ|ÅóBŲgŪ‰‘ƒ}–\Ęņatdd s§ė‘›©Ą’ū§•‡¾0įŁ‡ŅĄžēƒžõTfo”ĻS)ÄÜ*eOŠ„n£SoV§ų&42Chü 6u`×i'm<<>2–NÅ YĒaęPĘē(”U2xęź\÷J |­?ķ³;Š˜>D…ŒĮ%#Ōų|æ-b™Ęd)¤óG#N×{p<†¼ €®O4žyŲ^ģÄ” 7šķ<¬.Zƒ-‡±Ł LĖWe€Q üö²x<žiųJ÷Ģ2’fĻŲPTėA‹ƒ‡ j9ŠEN‚ —jbą02C»gšĻ ā‘ ,üõś„@ćßī°ę°‡+Üh²ū žĘėøl.+Ō`B޲Ū ŹO‘£ E^6s`÷i'ź,^€AÅbXš—j¬ē U2ųū ‰X“¬¶Ż !Ń @'Ų<®žy)vģ‹|Ń?«¾É‹×?iŠÆ[°ī­Į¢^{½–Å O¤cé£gx„7\‡8Cx蜯•MĘ^¦æ¹Wz~¾Ė-ą”ē*ńś'ķK+©pćgæ«ĄŽ#üćɌė‰Ū#ą¶ĒĖńŁ:é!mÓĘk0²@…£ÅN4˜¼XæĶ‚Ė.6Hī{Öē!Ćć–^Łłå—}ŲˆĒž\Õį~<ģÜoĒu÷—ā¦ćįŪ;7›³ī»9Ͻ\ W@mƒ5 d¤P2ĶžĪ õ`ŹČFģ:źäĪ›C·XBzŹŠŌ` ¶¶Ķ¼éėĘk=·’X߂å»#G’`—æ»<WÓ ŻČaL–ūĻ;zVī·aś’³Üe…šv³‡G ®9숩>Ø0:Ó_§&ū?hhwHłčLžuS"tJ³†Ŗ0$UŽ“µĮżåƒkĘł{Ź?}«å&o¤Ćįżļ­X~w R ęR‡.¦ĘˆtłjĢ>ÜóN½ä|õ5‡ķųp·’łI2ā#LĶč,žÜ ܈=„įqėŽ:šę6 ^^š„įér¤8\7AŪī÷/垙ĮĪ”÷vZńņw-;:žµĮ3WĒć’jČ9·_¤ĒļVJ?“3|<šÄ’±„ČöļŽ9šÖv ^\’ˆń9JÄiXÜ8Y‡×¶˜c*?!mŃÓI'<ō‡Ź@ć_§aqĖÕń˜=U‡¬49Œz6;ŚF/¾ßoƛ’kBM½Ķfnx° ¾ …<„¾f® fźńõ M^üqY]Xo»ŁŹćé—jÆ_|2•ōEŌć’EóXryņ³P©X8<~,vałjÖnö/±óߏqńd-®™kģōēq¶ń?v„W_b@~Ž‹x£?qēā„@CüĆ/›Ū Ō6x±£õfjŠqø|vē.wćW©ąļ…»sq"ęLÕ!-Y°8œ<~<éÄ'k[šÕwfšūŌąŖK œ]/!R“j9rœ:ćSU{žö¶ćLµ’arę$-’ā#ß>.[vŪüS£š}pøx(, :©IrL£Ę°Į*ÉQÕuģ<2YZÅT^ķ 6f§É1iLäįŸ=ķ'óK0ū‚F(3Ę =ķ<öAČyB%gpåŲąuą`…ø182Ćżõų|EēĶw'øŖµ±<(I& l/v¢ÖģCŖĮßóžĒ”Ŗ9¼įĖ ąąėcž?½ Ųaōņw-Ī'?RéĘ;;¬ø¶’ė’įjQ +ž $¬ŪQģl·ń'=e.\VØiMx'žī:µįŸZŚMVWŚąÅ²Mfüö²øvĻŁŸīµI6žĻ²8yüq ļŻéļ8›3BS ŻČ” õž]Śąm·ńnŸ€?~Ռ)ƒ•Š)YĢ¢‚œc"ęQųź°]²ń–Ż-ą¹ÕĶųōŽT° pÉpH—Q FĒO»šŃWĶ€Ō$Öæ=Xr^{!€K/ŌįŽ„‰˜{ūi?ķBi„«6“`ńBńšÅ'3°e÷IŲ<žūQ#īŗ!A“„Ų_ž[ZŻüŅķ[÷ö`Læ üöįt ųĖėšņū °vliH®Oż"×/_{öžčĄ-‘|ĻĪżvģÜ/ž·%—Åį­>` 'Õ–’„ōˆ‚9›gDZkpßźā±é„øAµžØ;N9aw Q ’nqÆ_Ś6SyxĮŸ ąī™0ŒÖąĶm–°cŒŹTŹ“·Ģs6ś³A Ąęvˆ”¾=YĀŁķŽŻé/ēĮņčꑛC?KH1ĘdłŸSŻ>[Ov\¾ GxbAøn¾4~s¤ćĄŹ‰Ź›¼ČNat†2–‰z•ƒ‘Į”-'QMq“ŗxüPāĀģįjØå ²d8!€MłĖM^Ævcd†ƒ“åęž ¤#ˆŃ—ßš Ō§īOķ0©]b¼ O?˜†öϧ_·ĶČĶšéźÅx¼žųk5>_–8uʍ—ßoąļo;:@ʜ©:ÉĘØ_ŻŒ÷?7”“Ņ=‡ķh4y‘ŲN^{n_”±ńų×F_“Ąˆ÷W™ąt X¹®·/JÜ÷óõĮØęM]ž_Ō NŠ—aį¬ö§ž‘g—e+Ʀ+±`Y`äp?ó?Üd§Ų”Sģõ—Øiö®œļ½’ŃšśÜōH¾Łž ¬R2ąy’””³N–¹pėćgPטA7BHĄ µødxĒÉv5J Zŗ6Æn2‡5ŽŽŚ~]jĻšÄĒ2‰¬o«Śqē BøĖ „āį’±õž@JkG‰ÅĮ‹āķ©4yįåż9 ²ŪäŖlöāßßĘÖs<<=ŲųåB>Ē µ5øQÕģkwՁ³¬.åM^äuŠ0^ŽæZA4N7ųėļÕļhÄY)!V¦čƒ8„!9±²ć¹ˆ€hóB”4xĮˆ¬xŽŃ³*é ÄhgČ\ƅ3£ž>sR0»ē‘QŅoMĀņ/›q“Ų‰uŪ,ųf«ógčńėæUšŸy0éQ4$G1ÄJĘ1˜?S’,o„ ų{ŻęMļÜpū/ļų|w.NĄū­ė•ųe³d ŃäÅÖ=žĻ77CéķdE툩ué­šø CØić5Ųžq ±l¶DŚ]·*°m§ī¦2Ģ(¬‹ź3ļĻö¶£„u¹žÜ r2śąÓµ-Ę’Š<%~{o ¦OŌ"Į( $ó;y:īě+š׃§^¬ĮĶWÅFM§Įź×Ž{ŖĢ…‡žóO!š5Y‹Ēļē?IėʇIBHļKÖs—XkĒ'ąÕĶf|²§ż!žéFƒ“åŠ)Yh Trrށ^å’¢ŽÅĢ”ķ źĢ>l;éÄĢ”*ä$Č0:S–}Nėy‡GĄwĒc›’q’gKę|^šķ<’t“–9üAĮÉ2dĘĖ Uųė­k­æFĮ@%c08YŽq¦C5l §‚5†žčZ³Æ[ V>ź¤Ć”åLв(7E÷¾ø¼‰•" ]rPa4«Ż-DŻ“oiS~Bŗ‚žœbTVåŌ©” Ņ$Ö•gą R2pŗ45KGå2/ż>—Žv ‚üś’üõƾóGk'jp÷’čzÉĘD¹l^hfóŠ2Ó¶ĶwSĘj0jˆ ?žtbū>ŹŖÜČĶßX¾üĪoė©›®ŒėR#2³uč[E;÷Ū1m|ūC„µj6Ŗåżˆ4µŠĮÜŁrų*j”Œwļ‹Ēć­ł'ą–«»Īc_ōįž§)­šÅ7o FŖÄCžFÅbź8 ¦ŽÓĄęą±r] .;öٱp–?™/Ü©ŗĄ{ŒĮ†@j’\ōo}Q‹UŽĶÓ Jō`öL9T“r!!1qy…Øz”}<`qńØhņā`…kŁŪ‡>w¤·]ØĒŠŌī Č®ÜoĆĢÖÄĪ FkD€aiņ@vüM'’K赇e*ļŒ1c½»õ1S%ˆRČül–WŽŃˆ¶±R†¬ęd‹”nO÷[wĘpn«+xn©Ļ&yČt>§7śņ‡ž G:ŸĆżń¬®ŽGH“(£³sń5jożÆżLū”” N—vgä‹Õ“ńÜv]Žž_N”ø°ō’\WĒąßæĻŒz±HóėŪ ]m ¾)ŗ”PRŌŖč.Dw.NĄ£Ŗ‚ ­nĘ÷ˆ{ņV†d’æńŠ®5š®™kÄĒkšįć̽ż¦Ó¢p˜ ¹™ d¦Ź‘™*GN†©I2Ń\mBŚ2ŪųĄōöx<J*ÜXńu ŖZ—ü¹h‚Ż)½bGsŗuNéä1ÉĘ[3'j±²5”_U'×eīkxų׊aØiR𠤌Ē}wQ€X¼¾Õ‚wvÄ6dæ#7LŅį±yF“½ŪŸķU5;ż=É6§€z«‡*܁¹ō‘ģ<åDŁ‡4‡y#ÕųĒś–Ą¼ņ9]ž:ķ RņøHĪŲ6½( üė¦DLČ_“|<`wóšųü t·×’śDZ%‹ł£Ā;GBēńG¬9+†ösT|‘Öw–šū“˜ÖIh]cÉēzŠH§‹eÉdqł£!R(#Wk±©Ł‡_¤źd²Ļ¾ĘdQ¶6žżŽžŲ£aé u~1۟°ĻĖ xc«kŲQÓā‹Ų•ŃńJ@¼¬ŚoĆĻf§a1-_H†w6PońᇒČź#ńųšÆ$ –Ēv}T·ŽsŚ&¹»j¬6ŠųÆjöį_[°§ĢÕn~‡/•NŚčWĒp 9Š1tąhĮĻ1šDg…6ścéyż\<nņ˜ŹÜ7–ņ"„;Ŗć8<“źŽ/Šö„"Ź.ą]qĒā¼ū¹®šņÕ͘ŲzĆü|ƒ?ׁBĪ„­’ŠY ć_!tΰÅĘ£¢Śņ*k<8SķĮ‰ÖmµĄīäQRįĘc®ĀĒ’Ģķ–2 +W»ńĶF/€”øptnžWŚŪEź6)‰2üż·īg±ń8qډw?7įŌ7žžW-Öl²ą›·÷Ųļ«7Ż|U<¾?`‡Ó%ąņ»J•&ĒØ!*äd(™*CVšYiņĄœžŅč'„ōmłÉĮGŻM'¢KĘ×véæHź->l+vbÖPf QAÆb1gD׆’ŸÕdć‘näÄh j9EkēN£U‘ĢoĶ[UcöįD”mWX8Ėģąaw Š(Äk£Oؘ“Š½ĶŽxk śŠÄyķåŠh«)$™_, cČōŲ&›tłä­«)T·t\ž]šs®bBŚC€é4,šĶ¾×øīŒ_>_FūČÉxō§ÉX»Ł‚²*7>^ӌ[ƍĒÅS:N€ÕŠģ‹jI?{HäWƋ=ćngL£Aį0ŸpāÓµ-xžńt8]6¶Ī÷›?C„øsW½–ňFˆ§TTŌx0åś“0µųšõ ,6ś.dYµu2Ŗ~>ąŪ-Į*;Lµ3Ė”Qõ”VĶāŗyŅĆ „Üws¦ßXŒŗF/v²ćƒ/Løćzée/ū“Ÿ.JĄŽ#v¼ż™?ĄWQć‰8š†cŒ(PbīEzˆ—U¹ń÷V IDATÜ+µ½\źī‘`p#Ń|č.Ü7¾B²£!ż{/6“(H‘ć„„IČŁGŻĮ.^Vš'Īj}É žł’]ńĶö@CoŃZ<|©1bz²žĆÆĘęłŪŻ6Ÿ’hkĒ„FĮąńłĘˆóŁ9˜7Ræ-N5¬Ū~_–ļ–©zÜv”^2° S²xš#®ŪžrĢ5>G‰g®Ž—l˜s,påX ŸœZśŁ¾Ų3v·€ļŽū?KµœĮĖ7'abžRrepń05ž¾$ųŁ}ŃAļžŠT9ž_”hą‡bī†ß…äĘZ¹?<”5!±¢)1ŗüb=^ūŲ߈ę„Z|śRn‡ĖČ}±±%ąnźøš(é_’[ŅÖõc§ŽÓˆęĄ3 š×_„cęŅbš<šĀkõøį²ø@Ā-)Ÿ®mĘ?IBį°Čś;­Ų¶×ÉɐcŲ ž[ŖŹ ó'|g„ _m2–ŖY4ßŲ-s„S“d0ź9“X|ųž€¦āķGl½>!”a€ģtńē;rˆ »ł’żÕåxį‰ōˆĒ*­tcŁņčFž)%d<©ž”kŪ—W»Ćž=Z%Į÷&ĘõŻĖ¹JÉ  W‰‚ÜąuęēKqĮ5Epŗ¬žĪŒ—~ŸŁ‹%ģ,#ąĮÅEŲø7Źų4Ģæ¤ēFVB¤m/v”¬Ń‹ÜDreXqo*N×{PÖč…Ķ-@Ī1HұH5p|IƒƒZÆć†(‚«_“ćī†@Oī®Ó·Äw¤ŖŁ‡7·YpĻL’r„K§č°tŠ•Ķ^˜lž9ųZ%ƒ-‡ō6Ļ8Ė6™Ć†¹¼ŪŠKGØĮ2ĄÕć“XXØĮ‘J7L6'x-‡x ‹AI²@oyčē`l“[Ŗ²Ł‹wvXqēt=Xø¶wN×ćx-v, $jY¤Č”1T5{‘Ł÷Ŗ:³qZ Fk0w¤§ė=سųąö 0jX M•‹ņ|}Ďżgb_•į„oĶø0_ƒŚ’ł¼rsģnåM^X]{Š.lž’µ—×~łżüā™Jm3ÕĀlõį½U&̾åšcH0CśeȲMR+äē(£|j¼8v*ö’ź:ŽßĖR”ŻmŪ^.ZRŒ‹–rtdP–"ØmšöČR¤=!ÉčĀ—V`ŃU č“4€ŽęåüņÓF”†c'Ė1{øWŒŃ`ž(5.ČU’„ ^üjE#Ü­×īh†|×[|ŲS¼Æ9ܵޒ³ŽŲjĮĖߙE˾eĘÉ0:SÉƒ”•”5žĶłŗ’Žč<\éĘs«Mc)8r”ød„׌×bÖPĘd)’Շģx}«9š~©Ļįæ›Ķx}«žÖĻJ%g0.[YĆüIGf( 1p{üem36ķžĻ嬫Üxre,N I•ć¢fWcBŽ2ŠųēĻłV7wź<õīz§'kƒ#ś4 ĆŅäø W‰ń9J I•‹’Ū‹ø’ĆXœ‘ē Ÿ®÷ą‰0ŁżA„üdłē ÷’Mžmü š/~»² żćNIz[ßķ2ź£dƒ·ž’…wž†ŁŹ‹Ö—7ź9õ,ģĶf_؃’×'Ꙟ¹æü±*0:ą¦+āqĮh5¤<ż`*V®kĶĮcŻ6 V®kĮµ‰É;\ĒųŁļ*pļļ+™*‡Œc`±ńhlöŠęOÆĮ=K»ś±Älb”c†«pčøæŸ£Ą”nö»ūR±v‹&/Ž;qėćgč)5Ūų° €VĶāŁ‡ÓĀŽ7wŗ gé±¶uzś+ššęŠ&ؕ,ā8ø=LĮĻöŚyF¬\×ŅmõéĖd2ńq LĶ­K)}Š©ūǜīsE©`0}’ė·ł’žž“¬ļż-'¦c<·¬.°dčˆ2S{··yėƒ]ŪĄX{Ī.Ÿ%—1Eø±!Q—{ą$×$d 9\醲uhsQm÷ēŠ)kōā–ןpń0¦ V!#ŽƒVÉB§d`u 0;yT5{±»Ä…mÅN8=ŽŁnA’žƒÕŁq“K-g0<Ż ¶ŗxl.źø”ė„ĄpnS„,ń€wvXšł~.©ĘˆtrdPĖhCŹ^aņā@¹ŪN:ŪĶˆæś»J\X0JĀ,“žU8†ÅÅĆģąq²Īƒm'8TįF²ž ”Qj޹ąæ[Ģųźs†«0.G‰x ƒš…ŁįO¶w Ü ĒģØjöaŹ`% ­Z{‚¾+÷ŁĄ0Ą” 76ŸpbqE-ęŽŌ`bž ZF5 ›ĖžĆ•nl:įl7!ćįJw žUĶŅĻ/„^Üņz&ä*1u°łÉr$é8Ø |¼‹S@‹ƒĒį 7v—8q¼é¢«Ł”’38QćĮ®nxµsGŖ1y ZF5 §G€ÉīĆŃ*6p“{Žžt¢ÉģCKėš|µŠ…VĆbp¶MŠbĀ(u»A†Å²g³šėŸ§ą›-=åBckƼ‘Ć˜a*\v±!Šū§ĒŅįń ’+,L« |¾3'FŸmøÆZĄįé_«į«Ų½;ż”ŁāĆ’½Łq²Ģ¶.¦ĆŲŅĮŸX…ę²°Ś}ąłš ńOŃį®šś'ž†ü›+š°āėf\}‰“Ęh—„€AĒB.cŠbń”¢Ęƒ}?:šŁŗQ^«/5ąę«ŗgśLg%ÄqøäB=6l÷/[:mńIüü¦D\8A‹ÜL9 :Ō7śP×čŎż6üķõzxZ‡¢ŽxyäßJ’ J—[ĄįNÜżdĶ7"3U–…Ó%`Ų eŲēۛꛕPźÄi !żĶš49ž½:&»N€üd9RZøŁŻ–·3ē›Bś tŃąlE» łŚó“«c{hW+Y”}8FēoÉ !}‚×+ É¼(:\¬Š-Bŗ‡\%#óŃRY„BzVŪ{LÕ}#O{!„n`Šz!ソӓ `÷kÄÓ>4β^* !„Ŗķ½G”ķž%Ģ{ !„n Rų°xv9T ōzKÆ?wĖ›$qCEÆ Ö#ńö^* !„Fė,ƒŹ]+ŚÖöŽt>é7ćte2.w°ēÅĒSĻ x¤žī¹šåē»#‘y’§ß ¦©Ćōń&pÓz»(żF\Ö(°œ ¼ĻæÄĒ»^’%ŹSn@ŸĢ|K!¤ß`y2źæmSS ŽKļ„u]æ ×‹_·X)»<xš­āGµ PœćŸĒ:mŪ‡pJŅE.†„ž’ī$Wė‘2ōBŃ6£õ²ź?Ć{z©T„Bś;™×Œ¼Ŗ·”t׉¶gŽßK%źżf@b‹šZ_ąõ‰r# ó[z±D„ō¼gđ°¤Äž‰ń]z± Ÿå/ĢoF‚ĮŻ#ē%¤O’õü2Žż]ęŲyh,=ĆŲg9ć4 S`ÕäĆ+3‡s<ä‰BHæĘĮ…»ū ěĖ‹Ÿi ©łH4”—J×=śM`ōp? vIÄĀ)UŠŖ½½X*BzŽĒĖbĖĮѶŃ#{ęaxĮ„rŒÉĮajĄ ż©9'!}MI ·‡CĪˆÄŽ.Jæ#Wé0ģ’»qōė÷{że^3R›Ö#µi}/–ŽBČ@ ŌÅcČģŪĻūégżf Ąø1œh®³ÓĶįżuy„óū "$Z+6e£ÉzĢ0Ą„±=×–•ĮbČČD02š~CžÆw„įŁ· ńē÷GāŻĻĻßĢĄē Ėų’ė ]R6F̽r•¾ć !„n¤‰OĒČtŪ=HÖ՛bō›@|ƒéÓĝŠĆk_†ŻICI’åņ°ų`}¶JmWČ!;³‡ā 6n0€ü8Bś3A¾ŁŽÕ;² “¦¾Ųłƒfsūļˆd\×vō©ƒ1śŠG‘8h¼dRB!¤;±22 /ĮØĖR—Š=Ēd®[įżf \1_ŽCG|05,ŽĒÉ =.*lĄš\3ātnŃ:Ķ„œ|<ŠbUąd¹Ū'Įl'Ój\uļ$"c4)Ø®pįå÷õ0YšmĘÅćė14Ū µŅ×ń9OTÖk°|C.JŖµ¢ķj T :Ū@ķŸ [œŪŪõūÆR!³nƒ­p.šJ÷£¹ņ\V¼.[7”’BČ@Ę0 d*=ŌĘÄgBā ńPhŗwdŸZŃ»}š}#Ątϐa½ŽĮ½w*ń/¹DKŚ2¬’! ėHė–óŅ—±,p×­ $&ō^#ā›]©0Yüł7ŠŹ (*7ō/ę\P‹y“ŖEū{},>ޘC§āĮ‡LŪa™Ü2Æ•8x°æ(_lĻ‚Õ!¾Œµn,šUŽyā.ث﯄Ņ65Ēć‚aMX4« #nœ¬Ż•m“įöŠ/Ō‰,WŠŌx§h{iµmĢE£Y)Ś®Vų0or5¦©mw{|“!GJŒ¢éJ #`X¶Kē–†M~8ž€ÆvdĀę Æ÷ sŹ14[\ļ&³¬Ėƙŗ¶õöaņˆ&\3£B4•M€ÆvfbĒ‘$xŚŌ;+ŁŽ›ē•"Éčm?U©ĆĒßęĄdi[o/N«Ę“Q ¢ķ.‹×ēįX™!¬Ž#rĶX:·J9/zĻĪ“°vg:nq½ćõ.,™sł™VŃö†%>X—‡Šzh»\ĘćĀŃ ø|ZeX½WmĖĀ®£ šśÄ#WrRløy^©(¹„ĒĖā„’ Å~’Z²H „¢ æ?¦®"`Ō°hvšļ%mB“ Ȟp9€÷yDł!„XÉ*€9· ō85FÕm‡ŹÉbńč/”Xö† Ķ-ŌÓO–ĮŻ·)0lHļ½—E8½Å.ĆŖ­™=ØIŽĄö퇓°ćH²ä{Ē#ŃąĘ¢‹Ėۜnļ|=(¬ v§o®ÉĒó??Ž ^VmĖĀŃƒÄ8|·/ƒŅmø`XS`kq„«·gH–©øR‡O6깁ė‹DŪßżzjMį×3»“ĆGs1<×,j—®\HÓ~X9`ggRĮ„ßąi<ŽČ?l§›ƒ< \HGŖo’E>øō‚ąėFˆ|›×.}²x›;ņž‚8“cĄ„[ēv®£zg€KĻ ¼v7 šIµ‚Ļ–Ł%“:Y”Õęk’hW 5”É/Ŗ· 6gäsšąŅҶ¶³œƒĶ—žxķŖx”ļĀ©›6Yų°wToåPŃwa+oæL¶Šz3@r¦C{pņ“„Ff:ƒ›®W `p׃oŻ}Oģ+Ņ”w¼!„ҟ„ĒõnG÷ōÓO?Ż«%šąŻŪŗõˆJ%ƒĀQ¦N’!>ށ 0ĄćČyć€8#ƒģ 3¦Épć"f\(‡ZŻ7ękŌ f\(CJ2žLĶζĒĘr˜{‰ 'X’))2ģ?äƒĆ~,–ĮM‹U0ĘÉū«42X¬ŹŹĆĢ ,œ+ĒØ‘ŹĄž`eˆ‹ē°’ ^‰4éi,®æV…2xŽÄDNžāŃd oŹdĄ’ė”HOWˆĪ”T08zĀHj\” —ĢnSļdöōĮé ß_ÆcpÓ Jč Į2iur4™”WJ×ūŹr ڦŽFńšIŌ;+ƒÅ¢k”+‚ēHJ–įx/9‚J!gpĆu ¤¦ėĶp2ČåĄ±"é ė¤ 2̚!.SR"‡}‡¼pIŌŪ`nŗ^>X&½A†ŚzUÕŅõ¾ę ņóÅ߅AĻāąaRq€’ߎŻÅČUÖq’žĻ™™Ż–īöe·„€P ŠÕ „%Ę@#bŌPˆā1ĘÄ/¼ńB£$F½ÖT ŒW&_‚ FI¼"`©- ŅWZś²ķvgg/vw·»}ŁĪĪ9»ż~nē9ēüĪīfĻyžóœ’yßµŸy°N„ś’c¬][a÷ž6'Nž{Ž=µą‘Ļ÷°vŻ“óŽąŽķ6 ÷ÜYįsÕX=Ų™ā[^’‘ td_eŅØ/æ5vž2‹$IĖ[Ü}coGć.8CJsŻŖv[“±ćßl&-Gķ6œ<•Hi¢p1—ńqŲ°}Nnx(ę}žśš‘6§g Vōƒs?3 ‡Ļ<@žĆ†įŒl޹[J°’`¢Łœłorõ`Fß¹ćŽŸHēLž{j0<4÷ä°Ł„‡fžwÄÄųŚ<«™nsffūVō3ļź‘Ó‰#ļĢĢt¾ón·'~ć³VkÆ śūꞣ¾{pn±dĶź ÆŃ­ uP[łDćĀC— ?ærš’,āc’$•ŁĘ ;n+ö_’4G~JżĀ%IZ¦"ßHµ’»EĒX4oiņ—Żs,õ‘$é šńͽÜ4Tlæšāž”å›‹Ž IR”²Źņ¾^·ŗŹŠzin=$IźšF-ø~mńĶjKsĪjŪ‹Ž IR”²źņ¾fŪ®YžÆ9”$é|>°±‡J fß%ˆ0!²a"æ¶č’$"²uD~]Ń1Ż–įZįÆ@’$©›VöfÜŗ”šR]óڽEG$©yĻNJŽŠYĄŻ7֋Ž!IR×|tS¼$3ļ’ʐÕn'²ÕEǐ$©«"V’Uļ*:F×lXUį¶«ĖńMˆ$I‹é–õ5®¬ć=„*@N^°č’$uU^¢ųĘ@Żō‘ź¬[‘C’¤E³¦?ē®MåZõV²dÕŪ—}dI’¦D~=YķĪ¢ct]p’Ö«ģ IZ†VŌ3īߌ(ĶŅ’)%‹3!ļ}¢Æč’$-®č”Ņxˆ¢“¢^ vlm°²·”·#’$-HOʎŪ4j廾—ņŠŁ•Ž/q„ŽI’® •ŽGˆlØč…źÆg<“­5ż> IZśū2ś`W•“ø)„Ttˆł“ĘžFėĢo‹Ž!IRĒåõO‘÷Ü_tŒŅhµįŸoŒ²kßXŃQ$IZ›†ŖÜscj^Ž/²K]hžÖŁg‹Ž!IRĒä=÷‘×?[tŒRzćH“^?ĖČŁvŃQ$Iŗ(Zpצ:›Ö–æ”oé ­±ēiłPśØ’$G÷<@^ßQtRk¶/½9Ę®·Ē÷Ś/I*§ZÜzum×ŌØ•ų[’é–D =¾—Ö靤t²č(’$]ŗØSéż"Yu{ŃI–Œ±VbĻž&Ælrt¤UtI’hdÜBd«‹Ž²d;Żfß±qö½;Īё6§FŪ® ”$uE=c°‘±aU…9ƒ}K¶qmŠ”Ņ)`I½sÆŻ|™ÖčļIķEG‘$i^‘­%Æš¬ś”¢£,;­6ŒŒµOŒ· Õ¶ IźŒ, Ŗ9Ō*A£–Q)gC’…8)„żĄpŃI.]¢Ż|‰öŲó“Ē_Ćž’¤r"枼ēŽÉ‰’ņ¹k$IKŚŪ‘RŚ Ü\t’Ė‘ŚĒh7_$æJ»õ¤Ń¢#I’®$ŃC–o"*›ÉŖŪˆlMщ$I’fŪ)„?Ÿ,:I'„ö1Rū¤SFIé ®$uFŃ Ń±‚ČÖŁ*–H;I’tåz¶ģe™" ²¢cH’$I’T{3ąßE§$I’$I‹jO¼Pt I’$I’“Øž)„v,’$I’$ił9 g‘€æF’$I’$-Šē""M½œų™B£H’$I’¤Åņ4L¾³(„Töįc’$I’$-'Gõ1–DÄš›b3I’$I’¤{rrĪ?± „t šP+*•$I’$Iź˜&pSDü`Ŗń&šTQ©$I’$IRG휚üĆ“)„ė€Ż@£Ū©$I’$IRnjļŸü²˜¶`²2š£n§’$I’$Iõƒé“˜µŽ{#ĄŽC ³IDAT‹Ą-ŻJ%I’$I’:fšį©ęS²Ł£&|8Ż„`’$I’$©3FGgOžaŽ@D¼|s±SI’$I’¤ŽśzD¼4×s"ā—Ą-’$I’$Iź¤'"bē|žÓ`ŗ”Ræļp(I’$I’Ō9OEDšoĄ¼+&7üšd‡ƒI’$I’¤Īų5š•óMžį€ˆh_žčP0I’$I’Ō?ˆń <ļ#³„”¾ üh,0˜$I’$Iŗ|#Ą7"āW»Į%RJ·O[/u[I’$I’tŁž<»/e£ >0Ūä+·ßN^źö’$I’$iANßīøŌÉ?,`Ąt)„k€ļ1Ń# v9ū’$I’$Is: ģ~o-t'—U˜’RŚ|x XӉ}J’$I’t…;ĢÄ[ł~ū.wg)LI)U€‡ū€”Nī_’$I’¤eīšš šĒÉ7óuDG Ó„”øøŲ lnVżĄŹÅ:¶$I’$I%v8ÅD_½×=Ą^ąļ y¶’bżź4“²†jåĮIEND®B`‚libwebsockets-4.3.5/doc-assets/lws_cache-2.png000066400000000000000000003532401476025525100212430ustar00rootroot00000000000000‰PNG  IHDRš8·= pHYs; ; į ÄutEXtSoftwarewww.inkscape.org›ī< IDATxœģŻw\ĒūšĻŻqĒŃDD©""bĮ(vÄ;hlKlQ£F,ńkģ‰ˆĘÄŽbPŃŲ»¢±ÅØ D±c#ŲPĻļ~·ń¼;8BŒĻūõā„·3;;»WvöŁŁ cŒ1ĘžzØ ¶¼+ĀcŒ1ĘcŒ±²Ń€å\Ęcģ?A\Ž`Œ1Ę{‹11ECL„ øĶĀcŒ½#QyW€1ĘcL 3mHģU¾ÕaŒ1ĘcŒ1ĘXY1CĮŻĘcŒ1ĘcŒ1ĘcŒ1ĘcŒ1ĘcŒ1ĘcŒ1ĘcŒ1ĘcŒ1ĘcŒ1ĘcŒ1ĘcŒ1ĘcŒ1Ęcģ_DT…‘ 5Ų0`@\å3ĘcŒ1Ęcˆ|ƤˆpĄŸ"‘(ż] .q€ˆœōŠ€7é»V†1ĘcŒ1Ęc^øą€p‘Htæ$…;@D~&š+ÉśŒ1ĘcŒ1Ę+1 `®H$ś„8+ź}OD–hQ¬Ŗ1ĘcŒ1Ęc¬,œ0J$]×'s‘Ļč‘˜ˆ¦ˆ_ü3ĘcŒ1Ęc’­üND_Q‘×÷…ö "%€mZ—RåcŒ1ĘcŒ1VśŽųD$½Ņ•Ag€ˆ*8  nTŒ1ĘcŒ1Ęc„뀶"‘č/m‰ZDTĄiīeX1ĘcŒ1ĘcŒ•®ŪšˆD¢go'h<#@DF€/žcŒ1ĘcŒ±÷+€ŻD${;AŪ ?š)ó*1ĘcŒ1Ęc¬,4°ąķ…jQg{ž©1ĘcŒ1Ęc¬Ģt‰DT/„ÉQ0`€syԊ1ĘcŒ1Ęc„ź€š"‘(P`ųāŸ1ĘcŒ1ĘūÆp0JõBDd ą€ŠåT)ĘcŒ1ĘcŒ•¾§œE"Q¦Ŗ@ošÅ?cŒ1ĘcŒ1ö_c š÷#żĖÆ.Œ1ĘcŒ1Ę+Cż@DD<Į[30ĘcŒ1Ęcģ?!€@ šÅ?cŒ1ĘcŒ1ö_%Š\ Ą·¼kĀcŒ1ĘcŒ±2ÕD Ą½¼kĮcŒ1ĘcŒ±2UC Ą„¼kĮcŒ1ĘcŒ±2UM Ą²¼kĮcŒ1ĘcŒ±2„Qiyׄ1ĘcŒ1Ęce굈ˆØ¼kĮcŒ1ĘcŒ±²%.ļ 0ĘcŒ1Ęc¬ģq€1ĘcŒ1Ęūp€1ĘcŒ1Ęūp€1ĘcŒ1Ęū”wcŒ1ĘŲ[\\’’’`cc;;»—“››‹;wīąīŻ»ČČȘ™™ĮŹŹ uźŌ””a©Ō÷ńćĒHHH€³³3,-’›3fēēē#&&ąéé ‘Hø’>^¼x###xxx¼óv^¾|‰{÷īĮÜÜÕŖU+2bb"}ś }ūö8xš`‘ł“’’P·n]XXX ** 2™ģėĄū÷`ŒiČČČĄ’%KƆ ƒ……E‰Ź¹|ł2Ž;¦±< @Æ»śŹĪĪĘŅ„Kaii‰¾’ž{äääąóĻ?’Ļ6ŽNž<‰ . GØZµjyW‡1ĘŹDjj*š5k†ß’P”BøŗŗĀŚŚFFFxņä īßæ‡b͚58~ü8¢¢¢J|ē~芔ˆĒ… ž³ē3„R‰°°0“jÕ S§N-QĄˆ1¦cŅŅŅ0yņdwmJ8wīœPĪ›jÖ¬YŖ€/¾ųk×®U»³0}śt¤¦¦¢OŸ>’Łœ»»;zõź…Ż»wćĢ™300ąŸtĘŲĻĀ… ńūļæC&“aŻŗučÕ«—p·śMGEÆ^½‡éÓ§ ģā8xš vķŚ…ĮƒĆĖĖ«4Ŗ’Ž™0aśõėccćr«C‹-€… ¢sēĪhŚ“i¹Õ…±’1Vf¼¼¼0iŅ$įÆ,ŗń9r«WÆĘ!CжmŪR/’ßĢĘĘK–,Įłóē1wīÜņ®cŒ•‰-[¶&OžŒ¾}ūj½ų€6mŚ`öģŁ€ˆˆˆboēõė×3f  …PNyxöģāāāŹmūhŻŗ57n\nu€`Ź”)åZĘžkųvc¬Ģ4jŌ5^ÆX±ŁŁŁ„V~vv6F 333̚5«ŌŹ}ŸĀ×׳gĻF@@jÖ¬YŽUbŒ±R“‘‘[·n:vģXdž>śšüłs¤¤¤ĄĢĢLļmmŪ¶ wīÜĮ°aĆ`kk«5ϳgϰcĒüöŪoxńā^æ~ „R ųūū£eĖ–:Ėæ{÷."""pūöm¼|ł055…„„%<==ˆ!C†`ß¾}šóóÓś]q%$$ <<—.]ösrrB=ąéé©uČČHlß¾ 4Ą!C4ŅĻž=‹={öąęĶ›ČĢĢ„D"„„%źÖ­‹ĄĄ@øøø«ŽK—.ÅüĢž=[čyąāā‚nŻŗ!""§OŸF³f͊cšˆ1ĘŽņōéS@čĪ;„V®™™ ½{÷–Jy .$4sęL4SSS@>T[žžž^¢medd”h½ģģlzżśu‰Ö%"ŹŹŹ*2ĻŁ³g õķŪ·ÄŪaŒ±²@(88øXė={öŒ¼¼¼ČĖĖ‹žQ+/77—ś÷ļ_č>H$śžūļÕÖŪ¼y3 öķŪkŌ1$$„B” Ó§Ok¤ +++ųųųh¤_»v żśõCjj*z÷īąśõėˆÅŃ£G „R‰cĒŽaüųńjė¾xń£FBnn.Œ“'O"..‰‰‰ø{÷.Ž=Š€€dgg£B… ørå ¦NŖwݵyüų1śöķ‹ōōttéŅ'NœĄ£G€_ż}śōĮāŋ‹Uę† ,[¶ 111ˆ‹‹Cll,Nœ8 //ĮĮĮøsēN‘å-[¶ “'O†B”Ą“>ēß²eK( DFF"''§XõeŒéPŽĘŲæĻūŠąÄ‰€Ś¶m«5]u—¦GĀŻ…źÕ«“³³³Ś]˜É“'k¬«źY€’æ›įääDÕ«WW»“"•J饁jėeffRżśõ…<ÕŖU#///ŖWÆ9:: ĖėŌ©C™™™Āz/^$äääD•*U"T”BŖS§¹¹¹©ÕwŊZ÷744”Š”)SŽįØ2ĘXŁ(i€āČŹŹ¢Ö­[jÜøq±ÖŻ·o_”ē”!C†:tØĪ2NžÓYFóęĶaccƒĢĢLµ^bŖ±oģģģt®+‹… ©©©ÅŖ{aõķßæ?ÄbķĶ}mĻ÷ęéÓ§€źÕ«ėĢ3gάZµ õźÕәēēŸĘąĮƒadd„}ūö”E‹…nW5¶ĶÕ«W‹U_ʘv`Œ½—.^¼Ø_æ~”ł¾üņK :†††Ā2 ,Z“U«VEnn.Ī;'¤…‡‡#77 ĄÄ‰abb¢Vž6lŲ[[[$$$ą·ß~Ņ~żõWĄšįƵ‚äģģ,4ønß¾­µ¾ .DūöķÕlfffX¼x1źŌ©ƒ““4:tHc=wwwįņåĖHJJ*ō˜0ĘŲū(++ ‡Œ3777˜˜˜ĄĒĒĮĮĮø{÷.œqčŠ!ųłł«ģgĻž¬¬¬“¦«.~‹ą®J•* )P©Zµ* &&Æ^½ŅŗŽ“'OpżśuˆÅb888«īŚÜ»wąää¤3««k±ŹT•µhŃ"<~üXkžęĶ›c芔Ø]»¶Öōƒ¢oß¾044ÄŽ½{ŃŖU«"·kmm  ``GĘŲ»ćYcļ„ėׯ(ŗóńĒk].‹Ń°aCÄÅÅ ;ø|ł2 }ūö:Ė”ÉdšööĘŽ½{+ŒLžųctźŌ R©“Ųå«ĘfQ(iyyyĀ…»··w”å$$$(˜½@„N:šņņĀ„K—P«V-“k×öööÉdČČČĄ£G°oß>¤§§£cĒŽĀļ»Põ"(l]Į]ʎ‹½{÷béŅ„Xŗt)ĢĢĢ`ooŲŁŁĮŃŃžžžš÷÷‡ę%ʵk×(ōtÓ7H£zO8øĶXéąc콓ŸŸäädwó S©R%ir¹Ōŗń«—"‘ØŠõTė¾9 ŸźĪPzz:¢¢¢šźÕ+¤¤¤ąõė×Ā’—,YZ“““„©©©ĪmŖ¦„Ņöį¢_[p1ĘŽW›6mĀšįĆnnnčŅ„ ¼¼¼P«V-TÆ^]ėÅfq©~ÓÓŅŅ4ŅŅŅҐŸŸÆW9•+WPŠUéׯ.]ŗ„f͚įĀ… X»v­Ęz‰={öĊ+JR} "‘@AĄZÕ>ė«qćʈŠŠĀŹ•+ńūļæćžżūø~ż:®]»¦–ÆnŻŗ8tčĘTŠU«V…££#Μ9ƒššp“mŪVēć oRóTÓ2ĘŽ cļģģl”1VŌžĀ?ŚØzåĻĢĢžŸ••…±cĒbćʍȬŹŅšæ°WQóU«.šuŻQ58ß¼óÄcļ3"Ā×_  ąłū+V”Ź’ŪT]÷_¼x”‘fdd$ü’ʍÅźa‹Ķ›7ĆßßGEzz:®_æŽääd$''ĆĢĢ J„nnnEžŠĆŹŹ =BzzŗĪ<%éR_»vm,[¶Lxżśõk$$$ąĮƒˆÅĀ… qåŹ̘1«V­R[W.—cóęĶh޼9ĀĆĆ!—˱zõj!X”‹Ŗ—^ac(0ĘōĒĘŲ{G.—C*• w֋3ÕSQT°““,2:u„’9ėׯG… šŁgŸĮĮĮęęę‹Å077‡¹¹9nß¾- č÷6}•ŗīD©īü›››ėUcŒżŪݼy<€X,Ę·ß~[&’ĄßæåoßĶ ÉfffHIIAJJJ”]磣£‘œœŒŚµkĆĘĘF˜ŗ.&&ėׯG͚5”T*įąą„RY¢Ēō”Ŗ£®c@ńz‹eee!,, R©–K„R8::ĀŃŃ͚5ƒ³³3ڵk' Bų6 >|Mš4ĮڵkallŒE‹ŗķP?ß2ĘJŽŒ±÷’³³3nŻŗ…'Ož”j@õ¬įĉ‹|ÖóMiii ƒX,ĘŁ³gįęę¦5ŸŖ!£®Į”TTwrФJ5ącŒ½ļT³“ŲŪۗʳńŗųłł ©ęēēktMÆ]»6~żõWDEE ³®hÓ­[7ÄĒĒćŌ©S°±±A­ZµŠ°aC\øpƒÖČojj „R kkkxxx U«VųōÓOõź_˜jÕŖįųńć8{ö,:uź¤5Ļɓ'õ.O*•bŌØQČĖĖńÓFõX^nn®Ī²lmmqäČ4iŅ‹/†±±1ęĪ«5ozz:.^¼ ųśśź]_ʘn< cģ½äććąļ©›J‹½½=€ĀļšĄĘ1lŲ0ģßæpēĪäęęĀÅÅEēÅ?Pų FOž<)4]ÕÖÖ~ņä ’““akk[*#H3ĘŲæŖK~Y÷lR(šóóCbb"Ο?Ƒ® uüųńø{÷®Ö2ĀĆĆsssįe``€   ˆÅbųśśbΜ9˜8q"† ‚ĄĄ@ųųųĄÜÜqqq ƀšå—_Ŗ•;fĢ 6 [·nÕ{ŗuėX¹r%¢¢¢4ŅÆ\¹‚łóēė]žD"««+ņóó1ž|­=Ńrrr°råJŗ§ST©V­:333„„„`Μ9ZótļŽĖ–-CHHˆPʏ?žˆŌŌTČd2ōźÕKÆ}iŪ¶-:t考¢Q£FhÜø1\\\™™‰ū÷ļ#::¶¶¶‹Åzp8aĀ 8S§NŲeĖP½zuTŖT ĘĘĘxöģ.]ŗ„'Ož@*•büųńE–Wæ~}ģŁ³ķŪ·Ē×_ …BqćĘ©åQ=  WcEćc¬Pæžś«0ŸpaZ¶l©6źqYk×®d2öīŻ‹åĖ—æswI•O?ż”””X¾|9ĢĶĶ1xš`8;; éżõV­Z…‹/B”P C‡ I033ĆĖ—/Š‘#GĀÄÄDXļįƇ˜={6N:@}šĄ7M™2ęęęGø{÷.¾śź+ÄĘĘĀŹŹJė…GŽPaŒ±«¬¬,ƒ¤¾€š }^^^±§Ó6ŪJaP·n]„……aÖ¬Yj[įōéӘ>}:6mŚ„ØØ(;ė®®®˜ŌĘĢĢLē±y›””a”ēbUyoŠŒŒÄ† 0lŲ0¾ųg¬”qĘŲ{mĀ„ X°`ĀĆĆѧOŸņ®N‰ØzxzzāŅ„KÅZ÷Ææž‚»»;ŖU«†čččR{‚1Ę>T)))šōō„L&ƅ ŠģŻV”ēϟc޼yŲ»w/īŽ½«õ™{©TŠŗuėāÓO?Åȑ#ՂÄgΜAƒ —Ėߩ/_¢N:077GTTŒĖ»JŒż§p€1ö^ĖŹŹĀG}„ÄÄDüłēŸ„Ö»ąŸTŅ”mŪ¶ųõ×_ ww÷2¬%cŒ}8?~Œ„„T­ZUk·ö’ŹĢĢDzz:RRR™™ …Bssó=®š_•˜˜ˆĄŽŽ¾T§łeŒą¾¢Œ±÷š‘‘¶lŁ‚®]»bęĢ™ųžūļĖ»JÅ&“ÉPµjUT©R„XėmŪ¶ wļŽÅ’%KųāŸ1ĘJ‘­­-lmmK½\¹\¹\^¬Ł >4*TąćĆXāŒ1ĘcŒ1ĘŲ€eŒ1ĘcŒ1Ę>`Œ1ĘcŒ1Ę>`Œ1ĘcŒ1Ę>`Œ1ĘcŒ1Ę>`Œ1ĘcŒ1Ę>`Œ1ĘcŒ1Ę>`Œ1Ęc„īŃ£GˆŒŒDZZZyWEoēĪĆüQŽÕĄ«WƉēϟšļęĶ›8}śō?T«ƙ3gpķŚµņ®ĘFvv6NŸ> 6ąĀ… :óÅĒĒ#22?žk÷aācL !22Rė߉'pćĘ deeż£uzņä "##ńčŃ£bƛ€ČČHddd”AĶŲŝ;w°cĒlŻŗUgž¼¼łä“ØV†>}ś`žüł%^’üłóøzõj)ÖØl%&&"22)))„^vzz:ź×ƏęĶ›cąĄŲ¹s§Ī¼{÷ī…ææ?Ž=Ŗ¶üņåˈŽŽ.õŗ}Č8ĄSCDš÷÷לēēēwwwXYYaΜ9„¾mUō7''GmłńćĒįļļ]»v»Ģ#GŽĄßß „UĶ’ÕŻ„ÄÄÄņ®Š^NŸ>7n”IŁ3gĪ„««+1fĢł²³³įļļ &Ø-üų1™ū—śī»ļЧOŸņ®ū€ 2³fĶ*ļjčķĀ… š÷÷ĒĶ›7K½ģČČH\æ~«WÆFnn.ęĶ›§3o£F///µå'NÄøqćJ½n20Ę“źŽ½;¢££Õž.^¼ˆŻ»w£~żśųśėÆqąĄRŻęž={ąļļäädµå˜4i4hPŖŪū©ī.]¼x±¼«¢—ĄĄ@,]ŗ“LŹ^“hZµj…ääd<}śTg>©TŠI“&”wļŽjĖ###9ČÄX)ŹŹŹBnnn‘ł^æ~¤¤$Ń?P«‚^@„y—4''§Ō‡iiizõŅĖĪĪĘėׯ‹Ģ—››‹¤¤$äēē—øNéééz×éÕ«Wz•™••„µž©©©zķWvv¶ĘĶ}äåå!55µŲė½-77÷ÉĢĢŌūX„ Ī} IDAT§§ėuLJBõłŠõ|öģ sēΐH$…–Uæ~}Lš4 µjÕ*v=ŠóŻĢÉÉAvv¶Ęņōōt­ĖߤŚß¼¼¼b×ń߄Œ1­¬­­įåå„öēķķ.]ŗ`ĒŽ‰D8|ų°Öuõ}D 77WÆģzõź!$$7֚ž““óNmō=‘dggė$žžž®w^mĒ1//Oļcff¦ŽŪ* )))z5ĢóóóĖ“®ééé:OÖ999HJJ‚ææ?ĢĶĶ -G*•"$$C† )q=ō„ķ½ĻĻĻ×ė³–™™Y¢†-cåééÓ§4h,--!—Ėahh[[[tķŚUć‚ 6 ^½z022‚„„% P§NlÜøQČćļļKKK„‡‡ćÆæž‚„„%,--1{öģbՋˆšĆ?ĄŻŻ077‡T*…ÆÆ/<ČČČ@•*U0bčõ’ųćXZZbÕŖUBŽąą`T©R2™ … …ü1®\¹RÜĆ&Ų»w/ÜŻŻajj ¹\ggg¬]»V-ORRFŒkkkĮŠŠ•*UB‡pżśuµ¼Ū¶mƒ···Ś1vwwĒņåĖõŖĻаaC˜™™ĮÄÄr¹...˜2eŠŚļSRR†ĮĀĀr¹~~~ˆŠŠņ­]»–––Ųæ?źŌ©¹\###“iÓ>ÄO?żGGG˜™™ĮČČ­ZµĀŻ»w…õƒ‚‚бcG|ūķ·°³³ƒ‘‘d2\]]ńć?ŗ/D„łóēĆĶĶ 033ƒT*EÓ¦MÕŗ«[YYĮŅŅׯ_Ǿ}ū„Ļœźs’››‹™3g¢jÕŖJ„055…L&C«V­ōzL%//Ó¦Mƒ««+ŒaaaCCC4kÖ §NRĖ{ėÖ-tļŽ¦¦¦011¾O£Fn²,Z“–––čÕ«ĄĻĻ–––šńń)“999˜2e œœœ •Jaii ™LģßæKKKŒ;P£F XZZbƌ:Ė=~ü8,--…Ē^ÜÜÜ`ii‰S§NįüłóĀńܰaƒš¾,\ø5jŌPūn6iŅ‡Źżå—_`ii‰-[¶ iÓ¦022‚‘‘¼½½ƒćĒ£V­Z011‘‘<==5Ę*Ųµk||| —Ė…ļC5°xńā,YŖˆ1ĘŽ——GhŲ°a…ę³µµ„?žXx½cĒjŌØR(äįįAß’½ēĪ;¤T*iłņåŌŖU+’J„T£F &„RIĘĘĘ€,,,H©TR@@]¼x‘”J%>|X(+!!HVVV€ ØJ•*H>ņ­_枊ķŪ· ݟÜÜ\š5k¹ŗŗ@R©”¼½½i×®]B¾ƒ’R©¤ššpņņņ"‰DBŻŗu+“ģS§NQĖ–-I&“‰DT£F š;w.åęęŖÓéÓ§ÓgŸ}F …‚P•*UhŻŗu”@]»v%©TJØråŹ“|łra]Õ1Śøq#µhŃBŲ–‰‰ õė׏ž?NDD›6m"„RI¦¦¦BŗR©$ŹÉÉ!WWWźŽ½»Ę>œ>}Z(æ0'Nœ ęĶ›“‘‘‘p«U«Fß~ū-ååå łrrrhśōéäāā"ä366¦¶mŪŅ… ˆˆčٳg¤T*I©T’H$"™L&¼¾xńb”õ8|ų05iŅD8^ČŃёž÷æ’Qvv65nܘ”J% ¹\NJ„’\]] -×ĶĶFMDD3fĢ „R)¼Węęę¤T*©M›6jļKŪ¶mI.— õpuu„iÓ¦ õ "rww§ąą`=z4™™™²±±”~ų^¼xA½zõŽÓŠ+ҼyóŌźõčŃ#źÕ«—š}@*T    zöģY”ūÄXYY¼x1 «WÆ™×ßߟ,,,hɒ%tģŲ1:tč­X±‚œœœØaƆB¾#GŽźŪ·/mٲ…>L7n$???@gΜ!"¢°°0 ” ¹¹9…„„PHH:uŖŠzT«V>łäįõ¼yóõļߟVÆ^M;vģ %K–P­ZµČĄĄ@ų-źŁ³'YZZRNNŽZyÓ¦M#±XLńńńDDĀwłĖ/植7ŅöķŪ)44”œœœČŹŹŠ^¼xADDēϟ'“gĻžBė;jŌ(244$š3gmŪ¶/^LµjÕ"tīÜ9!oĻž=ÉŲؘ,X@ĒŽ£Ć‡Ӛ5kČĶĶÜÜ܄|ēϟ'±XLŻ»w§Ķ›7ÓįƇiÓ¦MŌ±cG@{÷ī-“N—/_&jŠ -[¶Œ¶mŪF[¶l”Aƒ?~¼·]»vdddDćĒ§uėÖŃęĶ›ižüłTµjU²°°~æ–,Y"œūBBBhėÖ­4}śt222"ggg²³³£ ŠÖ­[iƌdllL~~~ĀvH*•’½½=-Y²„8@kÖ¬”–-[’H$¢#GŽyķģģ(((Hx=kÖ,‰D4pą@Z³f ķŲ±ƒ/^Lžžž$•Jé÷ß'">c666T«V-įõ­[·ˆˆčĖ/æ$‰DBƇ§õė×ÓĻ?’Lß’=yxx\.§;wīz\ēĪK‰„&MšD;wī¤żū÷ÓŹ•+©f͚¤P(„óü«WÆČÖ֖œœœhīܹAaaa4zōh’J„Ō¹sgį} ”5j…„„ŠźÕ« ­Ē_|A"‘ˆ† B+W®¤ˆˆZ“hyyy‘ÅÄÄPBB…„„P·nŻ}żõ×Bæüņ‹Īr:DčōéÓĀ{BÕŖU#'''įxĘÄÄĒ©½/d``@ŃŃŃDō÷o†¹¹9M:•"""(44”¬¬¬ČĘʆlmmiƌA , kkkrttŚ,111$‘HØsēĪ.|ŗvķJčēŸ.ōxżq€1¦FŸ@~~>) źŅ„ œģÅb1µmŪ–¶mŪFĒŽ£ķŪ·ÓŠ”C ķܹ“ˆˆn޼IH"‘PÓ¦M)$$„"""čȑ#B]ŗt!4uźT!ˆčܹs€öķŪ'Ō”eĖ–¤T*iŃ¢EtäČŚ·o-]ŗ”ģģģØyóęB>}S§N%ŌÆ_?Z²d mŻŗ•~ųįjŲ°!‰Åbśķ·ßˆˆh÷īŻĀ>tķŚ•¾ūī;µ†ĆŪ®\¹B2™Œ4h@ .¤­[·Ņš5k„“āģŁ³…¼r¹œ ØgĻžF+W®$ooo‰DäāāBżśõ–ōŃG€._¾¬vŒ iąĄ“}ūvŚŗu+Mž<™ŒŒŒ„‹Ņ+W®PHH9’ŠĄ)$$„-ZDD züų±Ś~Œ=šd2½|łRē¾ŽæŸŒŒŒØE‹“qćFŚ·omŚ“‰śöķKhŊjåI$1b­Y³†¶lŁB”””dooO¦¦¦ōšįCJKKNų …‚5j$¼žėÆætÖ#::š ČÓӓBCC)<<œVÆ^Mƒ "‘HD&L "¢µk×Ҝ9sµoߞBBBhńāÅ:Ė%"ŖT© <˜ˆˆ~łå ”O>ł„Š„ ($$„ĀĀˆˆ(..ŽLLLČĆƃ,X@[¶l”uėÖQļŽ½I$ї_~)”[¹re200 Ž;҆ hõźÕŌ¼ys!`н{wŚøq£Š`@ĒÖoŠ 988Š¢E‹h÷īŻ“mŪ6śśėÆI”PP§N Ż'ĘŹŠ¾€¬¬,‹Å4uźT“U«V‘T*‚„cƌ”źÕ«käKMM%KKKį·LeŠ AdooÆwß äēēSåŹ•…`ō›^¼xA …‚FEDD»vķ"ējٲ%®E"}óĶ7å©~Ćׯ_ODÅ Šl$&& ”¾oŠˆˆ ōźÕ+""š>}:ŁŲŲP~~¾Z¾œœŖ\¹2͜9³Š:9’Œµž/ŗvķJÖÖÖDDOhŚ“ił¢¢¢€p1Ŗ :tH-ßĉ u|śō©¼xS­Zµ4>3™™™dllL#GŽŌ(ēīŻ»$‘HhΜ9iojҤ õźÕKcłŁ³gI©TŅɓ'‰ˆhõźÕ$‰čŹ•+yæśź+‰Djįżū÷€"ėD7KĢĢĢ“ÖćŁ³gĒcåŹ•@Æ@ōŪ???jҤ‰Ś²üü|²µµ„=zh”“˜˜HĘĘĘōÅ_Ń߀·Ö¬Y£ułņåĖ Ż¼y“ˆ  J„Rķ&QĮ±PŻXxßp€1¦FŸ€ź"xƌDDōĶ7ߐH$¢¤¤$¼...4yņd"ś;йsg†ŃŅ„K =}śTmłŪ€““4‰D4kÖ,2/^Lr¹\(_ß@„J•ØC‡Ė“““ÉÄĄ†®¶ļ'N,“<•aƆ‘R©¤””“Ö­[““““šZ.—S«V­ŌņI„Rį{]œ€±±±Ö4źßæ”ėēęęŅ·ß~KčžżūDTpĒ[©T ½Š«iÓ¦äćć£5ķŲ±c4iŅ$ŹĖĖ£3gĪįĀõmJ„RøøRTw¹U–-[F4‚Ö , ”‘‘AD€Š+jm{R½zõ„×ož>}J„ĄīŪźŌ©#Ü QŃøqć†ĘŒ7ŁŪŪӀ“¦©4oޜZ¶l)ģ“.ćʍ£Ź•+kM;xš F ¤8ÕńXµj•Öō† R`` šŗ¬/_¾$“vķZ­e5hŠ@hÓ©æžś«Zž£Gj žķٳ‡=;BCCÉŌŌT­ õ¾3ŠņTcŒįŲ±cčŁ³§ĘņēϟćĢ™3°±±Į°aĆS¦LĮ”)S4ņ&&&"%%IIIjĖ»uė‘HTāŗ) ­ĻüēęęāįƇČĢĢDVVär¹^åeddąÉ“'šóóÓH377GƆ q’ž}µåŻ»w׫ģėׯ£I“&055ÕHkÖ¬"##ńśõkH„RŠčPõ\dżśõՖW©R"‘Hc<€®]»jl§C‡˜={6n޼ ‡Bė[£F 4kÖ ›6mžŻ;ž<žśė/|śé§…®+ +777µ“˜˜į’wļŽEvv6ڵk§Q†»»;*V¬ˆŪ·oŗ­ĀÜ»w^^^°°°ŠHkÓ¦ vķŚ…ōōt(ŠoC±±±šņņBŊ5Қ5k†ķŪ·ćłóēBŗ———p ĄÄÄ*T@½zõŌ¾/fff033ĘMxóøæmžüłļ4c’”ß~ū !!!ˆÅĖ—/‘ōōtØ7U‡Š7¢R„Jppp€½½=ąč舶mŪ¢Y³f„V§—/_BBB„gųßtūömŌ­[ “ɀݻwcłņåH$Ų±c  V^PPd2™FyDT¢AĶĢĢ“.—H$jĻ'ĒÄÄ`Μ9ųć?„cœ––¦qŒƒ‚‚°råJŲŪŪ ppp@ėÖ­ŃŗuėBė“œœ GGG­io®ÆLOŪł”J„ĘĄ¬o×UõŪØ:‡¦bŊZŪ*TŠ9 ®ź=›5k-Z¤‘›"·­*'88Xėsš‰‰‰E¾÷&L@×®]annŽŖU«ĀĪĪvvvpuuE÷īŻįīī `\…¤¤$­'«Ę‘)鱓%yĻŹ‚źxĪ;+V¬ŠHæuė–Ę9¾¤Ÿ¾}ūbéŅ„ptt¾ Ŗ[¶l©µ-óoĒʘV©©©ˆ‹‹ÓXnccƒqćĘa̘1ØT©€‚ ļŠŠPģŽ½ϟ?Ē«WƄ‹pm£¾ź{a^˜sēĪ!44±±±xõźrrrœœ\ä(³ŚčsB{s0!@’}xłņ%®]»¦õD¬7##C€NŪ‰H,ĆŠŠPÆķi»Ų¬P”hbt:t(śöķ‹ŲŲXŌ¬Y;v쀕•Ś·o_čz]»vżyóP£F “d“&MбcGˆD"įÄ=vģX­įÉÉÉÅ0ļm))):ßKKKKĄ“'OąāāRāmč#)) žł§Ö÷žÅ‹ŌaÅyļßlÄV¬XÄŲ±c1kÖ,8;;ĆĪĪØU«śōé“ŅŲ%ĘŹÄ_ż…Ö­[ĆĆĆćʍƒµµ5ĢĢĢ “Épżśu|žłēB^777ܹs‘‘‘xųš!|ˆ#GŽ`ęĢ™8ž<<==‘ŸŸ„R‰”C‡ź,ĖÕÕµČ:kóOægŗ¼łŻ|ū‰Š¶öPIT®\±±±ˆŒŒÄ½{÷šąĮÄĒĒc’žż EHH&MšT*Ūś§p€1¦U÷īŻ±råJ½ņNŸ>óęĶƈ#šŃGĮŠŠØP”B©5ÄŽōšįC“nݵk×Ę_|Čår( \¹r„ŲóÅ5Ė»œŠņóóįččˆ=zčĢ£OCé]Øź®ļ“53f 6mŚ„oæż;wīDÆ^½Š B(•Jüžūļ8zō(āāā„Ź”C‡Šąą`̟?_8q·nŻvvvåōčŃ5jŌ(ę^ž-??_gCOu ž‰J~~>lmm }ļu*Škżśõųģ³ĻpåŹÄĒĒćŃ£Gø|ł2V­Z…åĖ—#**JÆ;dŒ•‡³gĻ"##?’ü³F/„·ē&ŒŒ„‰‰ Ֆ6lˆšššR;ļØ‚Ü7F’žż5Ņ/_¾¬ö»Ś¢E T®\;vģ€ƒƒ._¾Œąą`!]u”Ų„Kxxxh”wņäIwuńāE$''ćäɓBÆ•mŪ¶©½>uźÄb±ÖemŚ“Axxx”„R©3ą¼gĻ,]ŗ?’ü³pē\Ū¬;D„WÆ^éģŻPŗ¦jMLLŌyÜUŸ¦M›jķ„׳DUNėÖ­įļ﯑žŪoæŁ+mūöķØS§śō飶<-- UŖTĮ¶mŪąéé [[[j $''#::ŗÄ=ąTÕŗfJJIIµµu‰Ź.ÕńōõõEæ~ż4Ņ/]ŗTj³C={¹¹¹čŅ„‹FZ§NĪĘŲ‡ēȑ#Ą’%K4ŅJ{Žc  q’™™‰Ż»wkDŽ’üóĻb—gmm ±X\č ­¤[[[(•J­'‡§OŸ">>^kWŠ’ŅÖĄQŻmÖ·a)“Ʉ͛7£[·nø’~‘Ż’‚†ŠĖ—/ѹsg“⧟~Āüłó…w`` š7o®‘÷Ļ?’|§īł666xüų±Ö4ռɄ٨ŌÅÖÖ2™Lė{’āÅ ÜææTīĢ?zōēϟG‡4¦ŹÜ¾};zö쉫WÆĀĖĖė·ÅXYPMK¦-zņäIµ× ,@ZZšĘ“i"‘¦¦¦½‡ ōžšömĘĘĘØ\¹2Ž;¦ČĖĖC÷īŻįćć#\@‹ÅbōźÕ °··‡B”Pū=¬Zµ*D"Ž;¦xņä Zµj…¹sē¾ST—āć+VąŚµkøzõŖF—y333­½©~żśXæ~=’’’ T*ÕŅ<ˆ‹/ĀŌŌ‰DˆŒŒD‹-Ōņ]ŗt III„ŚS+)) /^T›ę.++ §NŅz. ‚VVVZ‹|żś5:wī „…… Ė 4¦¶­R„ är9Ž;¦ČĢĢD›6m0hŠ ­Ø|žłēčÓ§FՔުϾ‹‹ ūģ3üńǰ²²ź«:E177‡R©Ddd¤šØJrr2žųćO•«‹šłU111A„J•pģŲ1@nn.ŗuė†ĘcėÖ­ļ¼ż5kÖąüłóøqć†ÖļĆ»ōX,/`Œ½³¤¤$­w>|Ø1saō= ©NŚīHæ=®>¤R)*W®ŒćĒcüųńjiˆ‰‰A·n݊].Pp"޳grrr4ź;sęLlÜøQgą”$Ž=ŠĮƒk,€źÕ« ˊ:ÖC† ĮĀ… 1nÜ8TÆ^ 6,rŪ C||¼Ę¾*•JįŁC{{{"22R£Ń•žžoooŒ9 ,P«ļŪ *]qąĄ­OÕ<Ćo/ŗŽ„‹‹ :„ŌŌT;ż .ļy󐔔ōĪ Ū·o£gĻž8{ö,|}}ÕŅTć ØŽ=cåį‡~ŠyW°_æ~hŌØÄb1>żōS <ÖÖÖxžü9öļߏ={öųūQ)£GhÕŖ¬­­‘‘‘_żæüņ fΜ©V~µjÕšüłs 2>>>ØR„ :tč wŻGމ©S§"//}ōlmm‘œœŒŻ»wćĮƒX¾|¹ZžŽ½{cįĀ…˜?>ŗté¢Ģ“µµE@@¾śź+ܽ{°²²ĀćĒ±aĆi½Ė\||| •J1dČŒ1¶¶¶xžü9"##…‹$UĄŽßßčŌ©:t耊+"++ QQQŲ½{7ƌSč¶>ūģ3¬X±͚5ƧŸ~ ;;;dggć·ß~Ćśõė1|ųpˆÅbT¬X:uĀüłóńźÕ+xxxĄŲŲ÷īŻĆ?ž„R©ŃÓć]H„RtėÖ cĒŽ…““RRR°~żz<{öLćböM#GŽÄģŁ³‘••oooŲŚŚ")) ?’ü3ž>}Ŗruuž}ū0uźT899”nŻŗšööĪ«/_¾D½zõ`ccƒÄÄDlٲ™™™ZļdæÉßß«V­BNN¼½½aff†””ģŲ±‰‰‰Ācz˜6müżżąĪ;X²d ¼½½Q«V-”\ˆÅbLœ8}śō\.GPPĪ^cƒĘwß}‡žżūĆŪŪ–––xōč¶n݊œœœRļłY­Z5DFF"885jŌ€››š6mŠ‘#GbŚ“iČĶĶEƆ …ļę®]»ščŃ#•ŹöUžöķŪ£S§NØX±"²³³qłņelŪ¶ Ƈ/•ķü£ŹgģAĘŲæ•>³¼­_æ~$“Éč›o¾”C‡сhŃ¢ET­Z5’ĖåŌÆ_?"ś{€­[·j-'22’ŠĒL«WÆņ½= @TT‰D"j×®mß¾Ž;F[·n„޽{ ó­'&&‘ž³L›6M˜[zɒ%“yófZ°`5lؐ$‰0z¬jmÓėh£š’®aƆJ›7o¦ššp &©TŖ6b“\.×:ŒB”fRx“H$¦cR#©TJ¤M›6Ń®]»hҤI$“É„‘ŖUž?NR©”źÖ­KK–,”M›6iĢTŠ¢E  u¶mT#ų6k֌–.]J;w[·Ņ’ž÷?266VxȐ!$•Jiųšį“bŠڶm­ZµŠš6mJ‰D˜ŽP„iÓ¦daaAß|ó mŚ“‰žüóOõˆ‰‰!Ŗ_æ¾0 ą²eĖhąĄ$‰(88XČ[³\¼x‘ŸŸ­\¹’6mŚDDŸw¹\NuėÖ„ §Ķ›7Ӕ)SH.—«M_T¹reśüóĻ5¶gooÆõ»heeEćʍ#¢‚‘Ź•J%9::Ņܹs)<<œvļŽMß’=U«V¬­­µĪĢĄXY[½z5)•ŹB’Tsʇ……Q½zõH$R(Ō¦Mڹs')•JaäüÜÜ\š7oÕ«W¬¬¬‰D"ŖY³&MŸ>]˜.P%55•ś÷ļO+V$Ā”ØŗxzzŅ Aƒ„׳łł“xńbŖ[·.uūč/f3 IDAT£„©jßVæ~}R*•³¬„§§Ó¤I“ČÅÅEŲWsssźŠ”={VČMJ„Rcz»·M˜0ÜÜÜ“¦5hŠ@ķ÷ćēŸ¦ X,&$—Ė©E‹“’~R*•ĀŌ¢Ŗ}öņņ"kkk@ČĶĶ&MšDYYY…Ö‰ˆčäɓäēēG&&&Ā¹ÉŽŽž‚ƒƒÕÖõź5Šģķķ…ķ(•JźÜ¹³Śyv͚5¤T*…Ł TÖ­[GJ„’^¼x”¶|éŅ„¤T*)33“ˆ fhŌØ-X°€ŖV­J‰„$ Õ®][ć}ōšš #FÆóņņhįĀ…T»vmµĻ@ćʍiĒŽū~ūömjŪ¶-™™™ SĢjńĶ7ߐ»»;I$@&&&Ō²eĖ"ßgÕ±;v,¹»» ĒUÕ¾PM©róęMźŁ³'UØPX,&[[[>|øĘŒ ŖćåģģLR©”PjjŖĪzää䩌3ČÕÕUų «öćĶéi‰ˆ~üńGR*•³7hIJ„RcŖĘ„„źŚµ+)•J “›ņóóiŃ¢ET§NBæ›'NœPū Q9yņ$)•JŁ}:}öŁgĀ<äwīÜ!„RI;wīŌY֔)SČÖ֖D"YYYQĮ–R©¤Ć‡ łÖ¬YCĀöŒŒŒČßߟ"""Ō~øĆĆĆI©TR\\\”ūšśõkš3gU«VM8”’ÆÆ/ķßæ_ȧ:1vś¶ćĒSĖ–-I”P’H$ĀܱŖĘ ‘­­-Ķž=[cż*UŖhwŁŅŅ’BCC‰čļĄŹ•+©U«VB ÄÜܜ‚‚‚4GDD6l įÄyļŽ=µō™3g’H$*ņŲ½ićʍäćć£Öh“³³£aƆ©MĖ—••EÓ¦MSk@SóęĶÕŽg•Ė—/“ÆÆÆ°_K–,)“‡"___’ż{ēGy<ģg÷śNĶź’-[¶Ü{·1ĘŻ€)”·PĀ’P¾ !…$Ņ€„H€ ŌP „bܰĮĘøa[ī¶lY–%Y]ŗÓÕŻżžXėNgI–lK>ō>’Hw7»;w[Ž™yē±XBz _‡ŅĖUU%`±X(//g’žżŌÕÕqĆ 70}śōP īÉāół0™LŗNęžģ¹éŖsف@h½¢’Éü§ƒ¢(ƒĮN­-!±Ģå—_Ī‘#GX³fM“U¢ŽØ :«ÕŚ)ūéhŪ;蜶‚ĒÓUcgż>”£ ,Ė!ŁĻ?’œ«®ŗ €#F“ZŲ±³'wOöܜ)ēNÜOųL9äƒį”Śa AOåÉ'Ÿģp' §#2 ąõz9räYYY§dšūż=zŠ«wv¦‚@  zˆ€@ @ ½€®]ˆ(@  [ @ @ ōD@ @ ‚^€č @ 8ćhZšR jšęD•v@Š1!IV$9ɐ Ņ™ė2Ō™ˆ€@ ąŒ )GPėPhjy“Õ‚SDB2d#›F#›¦ É}¢­P‡]A;тEØŹ~ŻXSkĶŌA7F2!I$9 ÉŠɘ$ÅG[«^‹¦Dńž5ø3ŚŖA'#!›Ęa°.B’Ó£­L»ˆ€@ hM9‚ā’5° „Ć/b É8ƒy:²i¢ ŅBóō¾ƒź’&§@ čÉ1X`°žKwcD@ D ©Õ(ŽwP[ƚ@ č‰Hr ÖKMc£­JFS+ŗ’‰¦–E[@ 8cHʁ˜ģ·‚mUZEAÕæ– ÷MŠüŃVE ŗŁ4£ķŪ1[Č©;£)%ŻGÓ¢­Š@ œq$9£ćn$91ŚŖ“@ ōüÕ’E“‚3Š$§`t܉$§F[•ƒ¦Vt=†¦ÕG[@ ˆ’œ)īGŻ.ČÜ}'‚3„F°ń%įü ‚^IČYé;‰ ĮĘē„ó/z=šZF°ńŗŪ’Zz9śz’ ŃVC ¢†¦5t?)ŅÕ;Åūšr8ŚjA·@ īčv“l" ōbŌĄfߊh«!QGS«Q_¢»ĶŌÄšR*ʁ@ 8Ž ÷Š\ŃV#„½­‘ ēhk!Ż5øÕæ6ŚjÄ,Šļc@¶@нŠ»UpT‚^ŠāūØ[E# ;ō¾š/ŚjÄšZ‹ų&ŚjA·DńÆ‚ŃV W¢i (ž5ŃVC ŗš „›­×ŒōZ2bö_ ZEkD D[ ŒŃV@ œyT’:ŠüŃVC ŗ%Ŗ’ –9€mUb5øż“¶ßµGįė …E* ¢ƒ@Ēd‚Ģ ™ŃĆe¦O5b1Ÿ™{²¬\eŻF…ā…†fµA% ΚjäģiaŖ`‡ĀĒK›MīNodެ°Ģžż*ļ’ĻO ™ĢØį.8×z]T¬ņöū|¾šõŸ?P沋ĢHǾvi™ŹļšxĀ2¹}e®ŗŌŒĮ æ®ŖÖxõ-?.WX&+Cęš+̘®¾^ćå’ś©«ˤ¦Č\w„›UķnŌxõĶ•UįĄ^R¢ĢuW˜p:u…|~×Ž PZ–q:%®½ÜLr’.£(šśŪ~ĖŲķW]b"#]Ÿ‹Ö4xó=?ū„e,øüb3żrĀóÕļģgūΰŒŁ$qŃ"#ły†Š{Ÿ­²asų‡6™$Ī›gdİ°ĢŖ5AÖ¬ ¢ūśĢ›ebü˜°Ģŗ AV~D=v8I‚sf˜˜6),s²ØĮķȦ±§¼}g!A/D l<ķ}x¼eå .@@k½³I">^"3Cg—¼ŽšµØė)£iP]£…}£¤ŹČ²FrRĖ„¹ź-Ā0HN’BFZ5µŠrb™ŗz@ ü:9IB>īpõõžf2I‰RČŲk¢”AĆ×,®—/a:ī\øÜ^oųu|¼Ōā|¹5<žšėø8 «%RĘć·;ü[;RČhlĀē'Ā‘³ŁĄaüņž€žŻš°Z%ā‘ū ”¶.,c12>›Pż·nĀlŅæŪ©¢©hŹ!$Cī)ļ£w” žŅ– Ļæāgēn„sUōjėvīVųxY€®²2rx×&0W×hüīQž6l›C‡}L^‰ńŲ3ųĶwć(Ɣ“ń3eXq}ļ¼ēąąįȇvQ±Ź¤a5¤õŃ’÷?°³gŸ±…Ģ„!uōĻŃļ>¶±k©…ĢčAõŒČ×Ž„ŸYپÓÜBfh’&Ö’ĻWZŲŗŻŅBf`–‹YSõä«µ6~ÓR&'ÕĶ¢Łś2©Ķߘųj½­Åo“ō³Z®8_—پŪČźµö2āå¦ĖōĮf‘å«-d>üŸ‹ļ]×@Y…–“”yļ}?÷Žā Ž%ńĪĪŠųŻÄ›ļśŽW— įõ·ćCćwƽåaÜĄšŅŲWßtāóGŽ#%’õ1u‚I>µ €ÜwJŪu6" ō6“ĘÓjŃt HåKģŚ£ Ē_‰Ł$1røĢēšČŹčśUf>?¼½ŲϦ-A\ī–Ÿ_tž™óčCŖĀŸžšr (rԟ3Óȕ—„„'žékįŒL›däĘkĆ2Ļ½ä˜a=ĀĄ·„„׎ņ󳗑2ły~t—%XüQ€? DČädÉüō‡ŒF]héŹ o-ŽĢŲIK•yą^+–c*}¹.ČĖoų#ŒžÄ‰īµāŒÓ÷³y«Ā³/ś"Œž8Ü’#}’u™]{žž¬/b&Ėf•ųń÷­deč2ŠTҐ0›ąwXČėÆE„e*ü«O³`ƒŃ(qē-† ŃÆ‹ź•GóŃŠl–J–į’®73a¬~Ī\n‡’ģpī% ®½Āšółuc½ühäy½ģ"3ógŸŗ™£wc€”©•@ ]¹ć©«×ųć_½TU‹±DŠ>õõšäs^nøĘrZ³°ķŃPƶéüōO©A*ZEÓ(‘—<žņŹ~2 õXŹV¢Hśs)/a$АéēĘYµ„NßSžsŪ!oó‘Üš9J”>ä9°ž12vK€4Ļj”Bݙεd#I“"Ę‹Q!;ø„POgČ5¦#KSQµ°ƒk”śJėP kč+%c4Ģ Ø„ĒrYRéoŚ€RX@¶Łxž`ų|Hō·lA)<@ŗĻŽĶ<?2p‘gߎRx€Æ§m žČ€ĆĒn”½śo4’7‡jWd0!/”„PĻ@²Ŗ2é ³)«uFČ L>ŒRøY’@æ>ēp°")R¦OJį×į×iÓŁq8-RŸŌ Ō_#%BJIƒĖH\\Ė }[„Ÿ•Qš)9†½ U)āTŚ\i|ųi€–ZDV‚&üM[¾Ł¦pÅÅ&fĻģŚAnõš «Ö“]TgėęŁ @C£‰E£ZČlusŁx}ŠevķĆń©ß[·yQŠĀ†Į¶‚1@¤Z°#Hąązäc›nŪ6Šćł½… ®=k±[uƒoŪ7ƀȣ“ĆGTŖvl %AŸ=Łŗq0!s“BåČ7›č—®ĻŒlې‡¦%FČŌÖimŚŹ°\ŻąŪ¶¾Ŗš!ćrĆž;H¬|Ū×g ¦GČx¼{Öļ!}“nšķڐ?!ćĄĪõȕŹōļ¹-7Ņ 5 ¾.b°µ€Ā½I4øDČØ*¬/elR‡ŠŌŌęGČhlŪXĮō¬ż”UŲ)?:”ćٲ¹ŽyST${j‹Ļ:‚¦<„ķz#šZsņŪhšĻūBĪæ,Į“Q•L^Ij¢ƒ,4xLģ<Ļ’õ™Ō¹Lh¼ņ_?Ł™–ˆŌšĪBSäWpå“xJkœä„U“ēĘdŠyY֝ūę\;}3³‡ļ 9Ź’‰õČR8(yɤ¦åPĀćFzbfc8Ų¼pĢnĘö/Į»gi n¬¦ppķģ”š]Ē–Iq6b·„ƒÄóJV‹Ū’œ¶pqÓį9åüśŠ%w¢ĆK¼-µĶK«ęח/”®1œŽå“łHr„SÄ2ėłõåKØq‡Ē1‡ÕOŸøĘŠė>q‚žˆDU½‰ŠZŻPPUx毒$1ėģ®jRm•HR<š¦N«IŅ“QåüQhuś5,cfӁœšŗ?YeŃø]huŗSj.obĶž\4š}ł£ö¢Õ ÷[ ¬Ü1å˜ń Kg;ˆT(^»p¬Ę'[† Øś~$ &åcó™_4&Ąā Ć#fXĘä–ч½huśė…#<øÜ£"fX†dU’cŁv,5~ŽŠ*«Ēą „ ¾ž©5 rīD«Ó•œ_KIŁxܾ°Lvr=#ś ›:«…ÅØk …©ńnĘglC«Ó Ģ)9GŁ‘a¢Ę6ę’ājēÕ„¹•éQ|Y†_Žg śéLŌźżØ‡×QR@P•čŪ§YCš Mƒ_¼yµn ÉI2ŽoķX Ɏ9ž]®_O@ l$Ųųļ“ŚęÆ’š²s·X0©”‹Ļ.é Õ=ˆ²jæ8UÓk©<ü [‡zķńßwż¬ßdįˆm̾æSö)čŁ¬Ū—ĖVĄ'ń‡_Ū:“Ąw’a@ū‚]ˆh(ō:N¾æõ‡Óž‡õÆēĪĖö ē_Š*9iüąŹŻ”ŌtU…>ėܾ·5µö¹PK6\GnJ­pžm … 1Vר|žE³–““V :†¦ĮŽżįōč™c+¢Ø VČHö0¤Ÿ>Ó®izeżĪ ¶NcłŖ .XZßž0ią!ā¬ś8ŃąŅ(.‰6Ø" ō6N2é§Į„±Æ°)M®™W$-Į 1U®šSz½e[0¢ØÜéP]£ńą#žš¤Ģg[ņ:g§‚$i,³;ōśė­6;Ę\¬įrk”g‚Õ¬ämi#;5œ²^SÓ9÷huMŲ¦irč‚ö%Į™Uį×1äUǐŖAĻ AuS,‹¶ęH©*’Ņ7ŻMŸx18 ڧ¦›äxŻØ÷łįheēj;÷(”Vw‡«O,,cņĄāPmˆĆGŌPF€ :4ok6‰@‹ ć˜įė%ŠIeææY+R£Øk$č8ߚøéƎpõefśfĒŽ[;š =„ ‹Wr(F‚õĶjֈYĮÉŠüziŽžth¾Ÿö  MŲ-„ėE½2Ó% ]×AL ÄĶgneŃ}Bp$Ēyøöœ]̚[uõcK[ ‡ŌŽo\ÉEöYō3fD[¢ŖĶzt‹ŌĮIм—ŖvN”¦ę3·YLć :ĪwēÅ~×(ņ'¶*]‚ІLēÜg‚Ų£Ŗ&Čį²Ŗɉr³ĢŃV)fčŸk o¶Li™Ā“üCķo Ä8"@ ˆMA€XÉŗv[³’Ķ"USŠq,F…‘ź±YŪ—E6ų¶S¦Tµ/(čQū™wc!}gīdŚ•ū8ėŖ}<üŌQ>\Q}Ō6죶±ÆH,ßk ³ ~v•?ŻŗŽI‹£­Ž Ę(:OeUlM‰  ŠÄR&€ sŲXąaõ7U5śāŋęĘ3i“õ[ٶNjÅ,qŻEIQÖ²ū2}Ŗ‰Ņr@å~Īv0ŚźŻŸą]÷2.qĢ%ĆŠ'ŚźĪ·’ü0k6¹q:d&²“o`Ā[ū "$½¾@wnžQ{l \¼C -[PThpėļ;l¦.öģühōźĒs:$ ½|*yÕ®<ž»v4Ę÷=üü^鱑…%A”i \lŸE_čŃÜ’ēRžśbeÄ{żsĢLmgń²z{¾‚”$£œ‹®½ĀLpŪŠDń0AĒ9RĻ›²>AaģØžY@zõ.…5›ŻČ2¬zmCX">=ÄĘß• @ZaņĒ:ż.¬EQaכ ōM×=ļ]&ߤ·F|ó‘8Ī?ĖŌ„:|“ĘĻuæp°łåx÷ė™ĻŅŽRXž @0)d¤ĒĘ}Z =œ ¦°øńs.¶Ÿ#‚=”ƒ%~žxIwžoŗ,™X-憋™šžFEĘ«ż8lWĶÆĆŻ]¤šå=óćŗó,XŗÖNćėķA ö+XĶמ+ÖæüÅ8U&ńe?žĘ†Ć35'‹ō*Ŗ4 R’Œ-œ€~Y&n¾<¹SŽåh˜M=óžQUxįUÅĒq复ägV¶æ‘ U>^ąÕOżœ5ĘČw/myMö<šŻRģÜ" t‚ZPz0ßģš i0i“§Ģnńłw¤qļ’„ĘŅų5jė4ü.Éw“Ui•Gīžs#Ł©rD`õ7A¾’h#—Ģ2cébcśŻ•žxĆKr¼ø¼śāEĘFpŲ£¬P"‚§Ž¦Įŗ-¬Żģ¦¬"ˆŪ£b·É$%˜4Ņʬ©q ­ß»µõ +×¹Ų¶ŪKKĮē×HN00 Æ…yÓćČɈŒś©*¼šN5ƒÄ—$ŃąVy÷³: öxiōؤ$3ŌŹł³ā±˜ĆĒ\±ĪŁb?e•z@Ńē×xž­źŠēƒr-̜ä Į­ņęǵ”żĻƱ|­‹ū½T×*Ō5($ĘHJ00b•9Óāxā„Jž|¹’¤x›øŪQxPįė `cɶĮ1ČJ‘łŪ½śĆl䥮Ÿ;Ų:^zrĖü’½Å ļ¬šcµō†@l"A7Bz.u.=]=+­õĒ®Ķ"c;ͱŅÕØņÅ7ńq2ÓĒ;NogŻ”}TŅ‹¦ĪåĪk’Um•b–kībńŖ½ĒĪ- C­§!‚'OIy€ktˆõ[Ū”šgį•Ēr60ņžyž­j~öh)õ®Ö—&d‰»®ļĆĆ?Źl¶~[ć®_—`4H¤&øåĆŌÖ·ģnŅ/ĖÄ;Oögų =ˆõļ·Ŗy듺Šēõ.…»~]zżķ‹“˜9ÉAu]»~]‚Ż*·lŲÖČ5?•D§”d#“FŁ8ļœx¾ó“b*k‚ÜtiR ģŁ«k(³»45¦ןoįņ9śL|B\×§züņ+?¹Į*²Jz1"Šq4 ¾}īü§&¹åŠdrsĢÄ;d}Żõ~/Æ~PĖ®B—ßuĶļ„Ä/]ćāīߔ i0ļ,'‹Īq’ŚĒˆŖBYE€Žü¤–æ¾Xɀ3·]y.‚ŠĘõ÷3$ĻĀ w%‘›eĘŠŲŗĖó’­ęБגø˜õoē#˰hv<¹YfŖź^x»š8»ĢķĶö9¶„eŖ 7üø˜’ņć†ŪųöÅIä÷·`6Iųż*Å„ŽųؖUėŻ˜Œ;?BJ’pŗ+’žĄ‡¦Į•óĶÄŁōk²°DeåĘyŁfM0²y·Ā§_(«Rq:$¦Ž4²pŖ 汤>XąšQ‹õ5pÉ9&ŅŽ›åopk¼¹ĢĮ7.ŅmmūÖļŠ£(_o×ķ©}Å*Ļæ®Ø8Š)T·ōūķ‹-A¾Ś¤¼ZÅ€8›DfŠÄōŃF&‹ėķܱ{š*’ūe3rXģŌCˆ_W čeˆ @ūüīGyčÉņˆ÷,f‰Śz…’ņ›wxxž­j>|f›Ķ\. 0’ĘBŠŽų#¶ół5Ŗköō±xi=ļ,©ć•GsCA€šz…å_¹Ø®SŲ“ŻĆŹu.āć 4øjźvīóņĘ’jłų_įc®ŁäępYx†„¢:ČņÆ\”ח,H ¼J’xgMÓąŗāżez‘“QĀa—±[e*k‚8ģgżÖFžz„ “QāęĖ“¹xnüižŗŻMkż’XĄb¢ĖÓž›c³H§UŅ“ČNŖ„ŚeĆ'‘mmĪ"Š1ÖmidŻ–FģV™å’ČĄ~Ē/›IąīR˜š­½8ģē“U \tģYū·’T¢ipŪÕ}ųĖY­īā(?žC)O¾\Õ"pÖ;ļ>Żƒ~F\ģ>ąÓ™ßž°ć¶Āī>–ųqŲd–¼‡ĆÖrÖūśK’˜rł>vī󲒐æGäfæ¹$ÅŲĄüæG6Š5 IDATQUX0Õ lÜäī?7ržY&^żTā•Oü-¶›2ĀČ»ŠćÆÆ{łÓĖ^Ōć’W|Fāåß8˜;)<‘RQ«q÷Ÿ±š„P`é×~žOĶ_oņõöpjÅŪˆ Ź«U®¼ß͆AŚā¬ŃF^łm©IŻ;‚h÷pÓ¼ŒCśG[•“¢ēŽĶAŒ#‚móĶNæ{Zwžļ»5’»"™ō#f“„ŖĀ×[yų©r–­uqŪϳń½Į!ĒśŽß”舟Įż-üį¾LfLtą°Éųå•A>ž¼žū’\Ęā„õ¼žæZ®½0±Å±ū$yį}¹pn<6‹LPŃX»¹‘żīŪ÷złÉŸJYöŅ@–½4 ¢ńĪ’:~ńxóg8# Ä>‰'~ ÆŁģężeõŲ­2Oż:›E³ć#Œµ’ņz®‚g^ÆbHž%TńYŠżŲuPįŽ'<¤&Jüū—į ¾ėćƒÕnū–…!¹2½źeĶÖ 5 ©‰2ó'łÉ6ś$H>Ŗņ§’xY¶>@U†Ó.1~؁»®“2cL䵓|C€Ē^õ1zßŻ”Ļ>ō¼‡Æ ōš‚żŗńõä›>Žū<¤zżaGȈų|S>ōńĶ…£5ŗ…˜ąČĶ”™7ŁÄĶZHŠļŽFĄM³6RP5†ü‰ƒ{l1³¶A€öłük=0{Ž9ĪVœų8ĶēéW«Ų¶Ē ¬ūF_2š½kŪžmo¾"™Ÿ?^ĘŽ"ÕAR“#ļ×ߚįü71(×Āä1vÖlr³’Ÿ±ĆN?ĻøĮ­?śē˜[užŒ‰ĮżĶģÜē„¢ŗmG­'Š7G"5E¦²Jeü€#ŃV§SłxM‡Mā®+,ŒjÄf‘Ų¶?Čß’ėcŻö ³¾ŪĄŽb…‹gšY8ÕH¢S¦¼Zå¹Å> ö+ÜņP#»ŽJ8aŃŚcüövżŗürkOÖ;ŲĄe³Ć÷Qón·>ÜȆAĘ6pݹśgźK «ź5v)<ó®/·¹ļoc„ ó #‚­óŹūµØŖ>;ņą’KųL–aźX;Æ<–Kž¼ģ*ō±}Ɨ‘ƒ­4øUž·¢I‚7žČØšl6IōĶ4qŪÕ}Øw«üņ/e­ž’]óg8Cƍ‰³':ų×ļś2õн¬Ū҈ۣā°ÉōĶŌGĶ&Gßa“Óń‚l[wy8w¦“+Ļo©Kvŗ‰GļĻäÕ÷k(ŲćÅÕØg­5Œ'ƒÕ6­¦–ke»3unä¤EžŸ}Å +6["²%€/Fؚžy²ēĀ‡_ų×/\öu.}†Źb‚z·FI…Ź’¾ šźoćøšģ°•VV©OUĆ3ZūĆĒjbĻ!żM(Ķ~Ö?¼äå7Ļ…gvœ Y‚¢2•¢2•U›ƒ<·ŲĒņ§œd¦tļėĪb 2ih r7ŸQź*DąÄģ+ŅgHĒ“ć`_’­$Fä[Cėńżz—~ӜčŁn³Č¤§9t$ĄĆž€ĮżŪN×INŠ'·sZŸf§ėωĀC~Ü*NGĖ{WQ5 öčćOFJĻvlV‰_żÄ‚kē*ā“’ö7ˆ!$ >ł«“qCĀųE3M É5pćƒnöRųŁw¬<šČėžŠ¹f]ZĒѕͻƒLŁö50iø‘IĆõĻF/Ÿ¬ 0<ĻĄ®³¶=Z­²l}€ōd™åOĒ·X˜=ĮÄü»ųō«¶ėSt'ŽÖŁp6h8±3¶tļŃZ „‚ÅĮ²h«ŅmŲ“]ŸmłÖü¶óxććäP‹½¢ݰŪ]čEQ5ņśš[m™ŌÄłēčĪżÖ]žŸ%Ę˜w–³Åū£‡Zq:dT•N›1iŹ\°·1Kzq©¦FE‰½ōœaź$Ę“[ŹYCF[NeņW-°šĶ+ńŌ.O¢ny’ÕIVŖLQ™Ź‚»Čļk`ŁSNŖ—%Q½,‰ķo$°pŖ U…Ÿmy½Ļ÷Ų)x=‚ט7Y·¼~y‹-ō^Įė 8µĒ;XŖņ»{ˆ³KüėēŽ.I¤ģćDŽ|”HͲ$>yĀI~?‡ŹTÕŪ„æ sh ”)UŃV„ŪQ×T ¦T÷±ĆlÜ|y2SĒźĖ¼\nŻ)7„v3K’ō}7ø[:ņq­8įMtvģt³§Äįń©Ģ¹~?æ’ēQŽś¤Žw–ŌńߏjłĖ •̽¾ż‡üäf™7"†Ŗ›"F£„ÓēÉ0z!Āłobžä°ē}ńĢ–«D§ÄØAśvUugW”Tčūžgh3«`ā0#?ŗĪŹ’]lA霘W—±n_.æymæxŲCEe7W¶=;¤'ōD&@$‡Žčƒtób{­ńÖßū j!繩{^ÓĢĢŃŖ ŠŖE¤ef¤OhŒYĢ2 n•`°sĢaõśņµ.Ź+ƒ¤·2óįŠzź] ©Fœ±S„ęTpŲ%n½ŃLpŪzŠbg°ķSGyś'įz’3ĒłĮ5Vī{¢Mƒ×r•vśgŹ<ś;Ÿ^]Ē®ƒ ^ »µķ “yA'DZə> ²Z:k· *på<3W/ˆ4Ķ&8{¬‘ŸßlåĘŻlŻßż³1*ź¬Ū‘Į° Cņ{ö}r"D&@ėųś3Ūt’–qC£~ķwdYI“L“ė—<óz ÉL3±}Ɨķ{[ąåõ5óņ£żZ]š ˆ R[,ÅŁĆē“yq¾ę4Ր vāć½iM’öż ūKTf·<¶ŁDhIAwggI*^TIķę™pMˆ€@#ˆ @·GwüN4c“H…oš©±[O¼]b|Ų9hōh8įŅl>³†ŠŲaÖP+¦! v1v˜ģ ŠčU9Pģg÷½ŅīŻ×§œQŻĖŁćZ’Gęé×cz²įü71 KĘhŠ4·ģ-³.O‰:·ī„¤ ežÜ©&¾x6¾ÓŽŁ•ügõ &³l“?üچŻÖ{h‰Ķ¢_®VfēO„Ń oēõµļÕ7»ZK¹?S4øUīūc)9&6-*š[Y¤”QÅj–HŒ70°Ÿ…I£m½Āł×4ųļ{Š÷ä’ ›ÉM©‰¶JF[Ķß>“§8'MfĮTK¾ 0śš:śeČäfČä¤Ėä¤Éd§Ź Ź‘™8Ģa{u_Ā:jĂ¾:" Ä" sŖ³'Ÿn|µ—Nټn4‹…Õ»&]ŗW£Ź]×§šÉŖ64ņõÖ°Œ$Įˆ|+ß»¶7_ž5]Ļ$/ż&l&_ūĀ1„µąRӌdŸ„¶ÆE£A"Øhhšd„Œ žßOßt™ Cōː#ZĘŁ„VÓK»#µśŒR nwlõlī D ’äcuZjźO<Żłī’:~žx ĻvņŲϲp:ōė_Q5½ź ĢMĮ…ų(\n@£ŗNaõ7憣ųÖ¼„ˆ¶·½E +V€xž'åŽłk£­Rę?ævšŲ+^Ž_ą@‰Ź”²–K&‰?Žeć†E¢•MW AŒ!‚śzųŗ…ŗv µāŅ•5A²ŅL¤§CVSA[4Z²˜%,gxĘæ9Ė×ŗ8\ą»×ōį÷eņĒū2ńśō‚SnJ¼C&!Žšź «<ś7/𺐻~ĮĄōźh«Ōc™1ÖČ%³Ģ¼»ŅĻl ½ļ°JōĶŠgk†ęŹ\|ޙ飅9‹ˆ @˜ayŗ£ńĶĪ×Ņ(ŲćåĄaČaŽÓ‹ū•Wٱ×Ńv¶9µõ Åe~$ 2ÓNPR½‹ÉH51nøĶ;<\xہŠūńq’ā $&čS’ ɳrÖx;³¦ÄEMß3æY‡< 6š±LœMā—·Ųųå-z¶¢FćšQ•ĆGU–*¬ŁäżUīśS#Óǘ”Ó}£Sfc8xa”XE÷żEA›ōöĀ€MŒŪ+“÷›æ—sÖUūX¼“€Ō>ŗ“RŪNą ²FßoÓĢN“hjĻōڇµÜ’ēRžõf5’[YOĮ^/µõ õnõ¤ÓUc»ü(2;JzgģL!IśL͇ÅqĻuV®˜kfŚ(#‰N‰}Å Kæš÷7},ø»?¾$ŠĘ*¢0 Ī¹ĒŠæ~“²Ļæv·*S^äÅwõōš™“ĀNńÜiś’=uŸæeŠš¦ĮoŸ,GUõ"‚Ķ—™i$ žQf“Dj²‘«%rń¼xĘ ·’/SSäė-¼õI?UĪł·ą§*š¾‚žÅĮR•ģ;¶]R“ōL² Ļ6q÷•V^{(ŽŁM(*-ŗÖt7ęŽĖŠœjΚbdä°Ųq«EČ^Š#( „T©Œ¶Ā£uŽ”Ī˜E_czūō Ę µ²a[#K¾tqž¬ųVe4 6lÓg-óśéaŁį­Č²Žī©¤< $O“ń74/ŗįÜYSć8w¦“OV5š×Ū¾¾­‰a­œŽ“{oI‹jÖBWÓ|y†Ś»bQA’`öD³'FŽ+AŠĖUŽ\źē×Ļyųż‹¾{™…ųn¼f3-ŽEµĖ†Ķ ń­?6z-z`9—8ęōŚL€ü\ ß¾8‰—×°čÖBfO‰cä`+›ŒĒ§qø,Ą§«Øw)ŒlåüYįn0÷ܜŹŪŸÖ±ä‹Fžæ›¹ÓāHO1b0HTÕ*¬^ļbW”Y†Ÿ}7-ŠßRÆsć}Ť$Y’N>I ­#jź/­ćūįɗ«ųįwR[-BŪh¾,PŠ®[£“1ĻņéW~ōx#·~ĖĀ_~Ōz¶ „ 6z»wg£T§‹».ų㐠¢­ŹIŃ3ļdAÆ£R­å ļęh«qĘу+{Żr€«/Hä_oVóļ·Ŗ>ŠĀ —$cµ„Gšz—Āļž>Źī>’ ̘ą )ĮĄģ)q,[ėā†āļæĢfŲ põ2EÕXś„‹_=”gVœØĶą™@–õµŻf“Äæ“ŹŌ±vjjėjźjė*k‚ģ+ņ³±ĄĆęjTžō“ĢØź-čüćŪ n¹Ų˜ćŖę zńĮūn°ņ‡>ŠŹTvT˜<¢ūšߙµž „c6y`’*>Ķßėƒūe6É žõf5ĖÖŗX¶ÖÕBfž '’üMNÄŅ«aƒ¬|ųģ¾’Ū#ģŲēå„÷Z‘ė—eā‘{2Y4;ŗŃ§‚=^*Ŗƒ\y~b›Ī?čćåM—%óüŪ5lŲÖȁƞČɖ‰‡śz‘]mubšäxŻqßuPAUiQ["ļXĒ™ĻÖØ®×HŽoł,npk|¾QŸł%–dt=óNō:’äÖū²÷zcM€³Ę;øķź><óz?xų?žC)Łé&dYŸŻØØRPT Y†Gļϊüń'YĢ»q?k772į’½$'HtŠ4½ķ_S}€éć|ēņ¤h}E@OEżpE=’ļ†~u÷‰³<¾Üäfž…¼öaM˜›u£3E Ąé`8ęĄųŚČ°,ŲÆšļ|ŒÉ7“4G=6AÓŻj‡ÅĻģqUČłŃV„ŪŅۃ³ÄļœÉĻļLgė.‡ĖøUv™>‰FF ²“¹~’¬ń6¼›ĻŽ"»öūخӧ@“ā ä÷·04ĻŅ¢­Ń ń僰YŚžz~äŽL~z{¹Y‘ķ8s³Ģ|łĘ LĘÖļ½ĢT_¾1ØÕ*ļ[vzŚ-ZXY¤°X/¶Ś“[Ģ:ģæ¾ßFĶö5¤™Š¢­NL3üXńŲ-{¦Ž\Ļų”ReĘ6pł3ēŒ710[f‰ŹČ«ė˜=ĮDVŖDJ¢L ØQR”ńæ/üTÕiäfČ,œ½zÅå1aókŻ~ lŽz‰rļĪēģA€æ<ÅYćķ¼ųN ›vx8X¢Wń1Č}’ LmēīėS˜9ɱݰÖž7ŸĒ_Ø`Ł…Å>ŖkuCĶa“™6ĪĪ%óøåŹ>›Eb@Ž™¬vŠ7õĖ2įtȘŽė'3 ĒLZŸÖ»q6żóŒŌšžwź†W[Kš3q¤YÖė“uļ)Lh¤`§ŠR”ił£­NL“ž¬_£o/óså\sØ?s£é†ÜcÆx6ĄĄōQĘĘćÓxā Åå*ń‰A}{ŽE÷ž{“l««q©ķ u€¦ Ąe޹¤zGg‘㉳ĖLļh_°ņs-äēvlł˜$Įøįķ·£Čėknõ}«E:įöfSĖĻĒ ·1°Ÿ™Ż|äĻŪÅŌ±v䘱Ydœq2Ɔ«Qe’!_ntÓąV?Āʰ1Tįģ°Y%̉“ÖĖ?:Čų”~|½•Ē_õ²½Pa{”n_Żq¹…Ėē˜1›ąƒĒüą±F–~ą½Ļż­īēģ±Fžü‰K7÷’7ČāߟOĀa÷šĄ½6’c# ‚S¶c” µwėÉōĘ Ąē%rÅy‰‚īFµCŕśe™xügY”×õ.µŻŠ’GŁŁžńv÷żÅėƒZ}’Ņ \ŗ ķ%‹fĒ·H ĶLÕŃ/½WƤŃvʏ°µŚ–°ōh€§^©BUuć³§:’N§Äļ°Üö%h"ątX8ÕÄÓoūX·=H’‹kItJXĶ’ŠĪE3M\w®™ēß÷Q°_aĮ] XL’(“’(QēŅ(ÆÖšė}ž‹’³į°voƧŽceca ƒQÉķ`°ĀO€£Jļė4įÓü¼ķ^Ök3z2&£ÄGĻåń‹æ”ńįņz>ž¼”MY‡MęŚ y䮞›UK¬z&MƒōäČē×Ŗź¶CZRųży“L|ńl<Ī6ź²Č2|ń¬¾ŻÖŗĢ_ļ±ćj„¼ģš~³Ód¾x6ž„vʃ·Śøór+›v9Z­”Ø懄]ĪÜ ™w’Ge­Ę¶}A*j5\6‹DBœÄØA†P €īĪÖCYhš„Ė {÷«Lž™2" čHHŲ$+ ½>ü"ĄŽB…’ •’ }ūD§ÄĢq&n»Ä¹1¦łļ•Ų[–Še­—?üĘŽ”–MIrĪ@|œL‚ÓĄĄ~ę^ÓföĆOŚ;” G{ČLj;(MĘnŻĘ7¤åūIńIķŲD­mלü¾-?·˜ŚßōŹž §žx\HI”Z˜=Ā÷‡Ś½ėF A£·ģ‰8l2Ÿæ2ˆ—×°ä‹öšŃŠØRU«Šč ąŒ“ItČϵ0a¤/IfōPkū;Žq‚A *c”ŗgĄč|Æ·ĢöÓĘū÷ßdåž›Ś>o懶¾]s6ż§å2؋fšøhꉷ»j¾™«ęėéÅ®F £Q84į°JÜūm+÷~[×/·Gk3Xѝ©ré­Ś|~hhŠ"–ų“Eb/®/"ŠÓ1%† 裩ż”ØXåĆO@2Zp·Ļż*Ś* ]Š=Žø §bµHÜre2·\Ł;×āĻ‘2ĒžīE ,䒝ū%}ūŌF[„Cœ½}‡Ųd$&’S%©—×—Q@ŠóńxĀS·ŸpĒh†ž7ĒP2C÷Ģ{§MS 8XmU‚Nc˶ .·†Ēoā›"±.Uе˜$į @ø&@™RmU Ū0gÄ~ś„Ö3v”‘Ćccż?D9šę›o²råŹ6?/,,ä™gž”””{®ÅéL8Ą3Ļ|˜„K—R^^ŽŃhdšąĮ̟?«UÆd¼eĖvķŚÅĀ… y÷Żw9zō(wŽy'qmäÖÕÕ±téRJJJšx<¤¦¦²`Įrr"OśöķŪYµjõõõ$$$——ĒģŁ³1™Ā†°ßļē£>b÷īŻČ²Ģ”)SZ=fee%K–,”øøY–ÉĖĖcžüłÄĒ‹¢D‚“'ØłøńKn4j'5Ÿš–>XźĄ0`1)Æ  GQė2QV„W—–åČėčt˜8ĪĄŗ2Ž7Sź”} z’UŒŸASąRĒŅO±;ĄYSŒģŠĒ’•›ÓČĶp3iؘ}“N­ĖĢæ>Ģ µZ>Ō@bBēeņ8ć$œ#3PöĘ£yė:m悞I½ĒŹć’›AEC™{$~õÓhktrÄT ““”éÓ§SWWĒȑ#‘$‰żū÷ó½ļ}Å‹sī¹ēšŚkÆńļ|‡ųųxņóóq¹\ģŁ³‡ģģlV­ZEVVK–,į‘G!!!ŖŖ*ņņņøłę›[ ģܹ“Y³fįńxČĻĻĒjµ†ŽūŅK/qÕUWšĄšČ#žžNæ~żp¹\ģŻ»—aƆ±zõjāćć©««cęĢ™ģŪ·įƇcµZłŻļ~GnnnÄ1W¬XĮÅ_ŒŃh$??Ÿ`0Ȟ={°Ūķ,[¶Œ‘#Gvż.čQ˜$#ēŪg` ¬ādÜ÷“T™ō4‰ņ£¾€ĢGk3¹dęį.ÓSŠ3X¼:MӍ³A䈙ūÓĮé”ųé­ØUÅØ%=æ>Œ sX¾}ūĖSøšŅ,rD!ūN”y õ¶;ŹĄąAöģSŠ4‰?Ī£ 0‰©Ć+HIō‰>¼>āY¾)·Gw[Ģ&‰Ė.ź‚ג„Üļl>yw?[¤2>Ƅ Jˆ·y;’X‚˜eCaļ|=’z>©ÜąŅ3cé™S€ēŸ£ŃHqq1‡¾ŽBQ-ZÄc=Ę¹ēž‹ĻēćĪ;ļäĘoäÉ'ŸÄhŌæāĮƒ™8q">ś(>ś(555|ļ{ßć7æł CŪiDæśÕÆHJJb÷īŻ$&&†Ž{ÕUWqļ½÷rÕUWqčŠ!~’ūßóūß’žūī»/“ķž={=z4Ļ>ū,÷Üs’ųĒ?Ų·o 0€††&OžqĢ;Y³fńśėÆc·ė9Ų̘1ƒ|·Žz«“~UAoĄ$¹Ų>‹c:Ź)”™X0ĒÄ^÷°lc6‹Ā‚ÉeȒČĮDŹ,ž"‡Æw†gĢé|CMNĪC«Ś‹ĻՀ?h$ĪźėōcbU“ų`Óp>ۚ€’#‰ļ7ŹJõ š‚W[Ņ8ŁU°’·ŽhęĻóQ~TEÓ`Ć®$6ģJź]=Y†®1‘•Ń5Ky\A'﯂¦ĮŠdŽ^7 ‡ÅĻõgobd_}„¦I¼šłDvI mg2(\1u+cs„Ž{mĶ86Ģ ½6Ź*ŽßĪ“Įįģµw׏䫽żhŹĶ”%•…cö2{ų¾Ģ'[†°b{ڱ•Ū*ē ;Ąłćv…dVīČćÓ­CPŌ¦ßEcź b.¼-$³n_?oAP ’vcrK¹vś¦óŗ„(‹7׍Ę ūEC2+ųάõ!›o÷‘T^łr<Ž@ŲģŸZĆ­s¾ĀdŠ+õ8šÄ‹«&Ņč×÷ČNŖćö¹_a5ėĻKkćyvłd\^KH&Õéā»ó¾ĀiÓĒōŹĻ,›Bm£-$“ähä¶¹ėč×@½ĒĀ?—N£¢!ürZ½Ü:ēk2õ‰‚FŸ‰.›Jim8 ĢańsÓ9ėÉMŃŪ ūƒ2Ļ,›Ź”Ŗš3Čj pżŁ›ÉĻØ Ø2‘>Ÿś\–įšĖM1åüCŒ***ČĶĶ 9’ƒēž{.Ō)`Ū¶mŌŌŌpß}÷…œ€žżūsĮ°aƆŠ{v»½]ēą›o¾įšk® 9’Mǽķ¶Ū8xš lŚ“ UU¹ķ¶Ū"¶aįDąxš;’§Ź“IF6l²s·n¤}še6k R™WKBœ(\)Š©®·°m"µ®°Ć?e¢±kZćH’ĪįႸ¼FĘō+eDßrśö©#'¹6Bōh}5®°ńgõ“™āYå²SY[lę żRj"djŻVŹėœ”×fcž©5ƒĒĀ‘š°a4(ä„Õ 5 –5śĢW%„^ *Rk0Čį^æ‘¢Ź°"KŅk0Źįü_Š@QErØ‚$A’ŌjĢʰLP5p < U +Ł?µ/Œū– IDAT‹)ÜqFQeT$£(a™¾}j±[Ā÷¶ŖI8šLP ŽŁÉõMƒƒ•Éųįó‘Ų@‚=rö¬Ø2Æ?|¤Ę»I>fČ5qø*·/l8&Ē5’ļŽ)­q†f`Ņ\”×Õ.’X:-ā|d¦‹õ’OóS­Ōtō“ėū¾oįå7ülŽ*–– NLŸd‰Ʊ0xPׯĒ»DN–LqIųyģö™ł¢p£ĒėéC%6Č>nKĖvbüDŻWØm0ńåī\ŽgéĪ‘œu–žmģ H,+ŌBęÓmƘ{Nųł÷éÖ|ĮHóÓ­CX4_?K ņhšDŗuĖ·䂳V³ž]–¾ßŸzOdĮ͵{ś±hŽBr¼ž¼_žY_jŻÖ™Ķ³8q䤟ĻņĻWgQŻlLŲq8¾q Ķõšåś *"Ÿ {ĖRŲķšĄø!ŗĻ¶v[*Gė"3Ƌ|Il«ό~ś½qorÄ3 Ń—Ąę£ćY0@_2“esE•‰ĒɘųŖd—ęė…äwķt²æ¼O ™5Eć0¬€Āv5 ź4É|¾ CF遣‡$éć3NāĘkĢ1՞Ɖ˜ \zé„<õŌS :”I“&‘““CNN£Gfƌ”Ž?üpÄŗ{Š+ķĖrų”‘˜˜Ų®ópäČ222Z¼æ`Į,Xč5L&SD ‰ŒŒ Š‹‹ݹ5jT ™~żś…žośO?ż4Ææžz„\AAõõõķź,@ē8’ G8o½ŃĀÓĻłŲ[Ø$•uVn…›m3z„ė®ģŗ¾8EåV<ŗśMQße!IpŪÜuŒź[ ĄĮŠ$’čģf³":7³‘‰yśs¹¬ÖÉޟM@‰”¹rŚVf- Ęmć”wēā D›ŒßŹcōY˜FŸ™‡ŽƒŪg‰™=|—M)ō†GϦĘiœEłq†ŃØ~eÜ>÷«Šėæ}2ƒƒ‘³„Ó«łįł«BƟY6™‡#ļÓ̤~vńņPPā?«Ē±”0²ŽNr\#æøtih6ēķu£ų|g^„ŒÓę旗.ÅfÖ Ē¾ŹĒß ±šƒüā’„” ĄŠy{]äh6Ŗüō¢å¤sŽæŽ×—V1Č*÷,Z Źl+Īä™eS" AŹ’Ę Ö0$KŸ©Y³§„į8t°o]SfOL0Ķ:š²Ÿą)ʂv‰Ūæc”š Āכ ØŌÖ«(Į›Rt N'd¤=Rfņx#Ę.¾…e~ü}+_¬ ²asC‡UdIbźŒ$äL}±Kf*äõ÷RxPŲnź“äLŻÉLŹ€aC|ģÜlILź@Ī € ?ĘǦ-ĒÉL¶„d¦Nņ³zmd›š©“L²Ā2Ó¦X²<ńL;Ź€=wtčõ”©)3$ß@ržšÜ£)ӂxŪŃr·?™ĢįC‘ 瓦)ģ8č' ļ(3CfĄŲ!ČĒb§©lŚķĆˤō‘ČŸ‡ÆßŪć¦)¬ŁęĆŪ,/!^bų¤žČ}t™ŃSUVlöįr‡÷ē€QSr3ußi¤Iććuš»G6+Œ›š…œ©×jāŠčó„—Ŗźš~Ģ&˜0- 93€ «|”•‡æ¼Ń“¦%#gꁁÜLøū6…Š*ÉŒŲ"c%1CTGBI’NŲöĪļ×SŽ›œō™3g²yóf>żōS:ÄīŻ»Y²d [·nåŗė®ć…^ķ/999"ą¼óĪ#--2²Óš¦ CÅŪ"Dš#Iź±;IQ”zļ5}‡„„’’"»³Ļ>›9sęœŌwōN:ĖłoĀn“ųž÷,|¶"ȒåA<^‘ž/hgœÄ MĢ<ĖŲ„iqƇ3ŅĄ–‚°ń¤iPaš€!_7–* -œ€RĘbČ@å¹…óp$8Cž`jŹ-œ€#ž| łżh(—Z8’„ž< łŗ⯗ØmlEʝƒ!_Ÿ‚~‰Š†–mю4¤cČ?7ō=KėZŽKGź’C2GŽny¬£õNŌ C=‹K?ny¬·öB¬Nż>?²²„LƒĒ‚;}q)ŗLéŗ–2^æ‘ŗ¤9$÷ÓĒĄŅm-Bž L•ó2óõóXŗÆåﬨ2¶é h’9lhŃBÕ$ŹMS~ģÜ·ŚY¶C7ŽēĻ1rž|m ӂSdšu4S,£PO{_yż äõ½™4AĻĆl‚93Ģ™©?‹Ž_ßm4Ā}ß·ān ?„L&)¢¼$Į÷æk”Ń£…žUF£„åøĒäm7YšxA=VŻŠ`°÷Ų¾īJ3—^d 9å²L‹V¦—\`ā¼ł&E;&#µpNĻgböL#Į`XĒćėó̜ndź$#fŽ»Ż&E|’I㠌e„¹ w¼ĢČį2>l‹Ų¬RÄ38?ĻĄŸ²ćó·-Ó7ū’³wŽŃQ”{~fkzļ$!$”÷"UPiTĄŠxA°^õ³ ¼Wƽc+ŠØ(Ué  $¤Ž{²Ł:ūż±Én–MHIóœĆ9dö73ļ̾;óžŗŒ×^rB§·msR 4ößśū ¼ö¢‹ŻŗT­ģŒEž’yĪŁNF„hģ+vuxńi'4uæW[ĖŅztk’Ļ©V5ųłł‘™™Łģē§NB„RbɟٱcŽŽŽ<žųćvr_ż5sēĪå“O>±zźŸ}öY|}ķC=Nžų >>>¬Zµź¼ĘŁ„K~żõWüq„FO 6°wļ^¼½½‰ŠŠ`ćʍL:Õ*S[[Ė®]»˜;w.={öäŪoæE£ŃXóūĶf3kÖ¬±īćē燯Æ/6lp0¼üņĖ=z”øø8$$šāR)’Q)śō”Ó§gū·‚J“Ā:ČėŠ“kW©„S[^„Čdpė”–WD‚“n:{:ĆŲŃJʎnYfŌp£†·üś2HĮA-Ėōė­ _ļ–eŗw•Ó½kĖæÓčH9ё-Ė„u±`nĖZtP ŒłsZ–ńńøvĖ÷ŚŻ]`Ī]-Ėø8 ̚y–U,ē¶ų–8$å_BBB¢żŅŖ€G}”?’ü“I“&Ńæ¢¢¢puu%''‡Ż»wÄ'Ÿ|b•Ÿ1c3gĪäŚkÆeĄ€ø»»“ŸŸĻĻ?’LLLŒÕĖžŠC1oŽ<~śé'¢££‘Éd$$$°{÷n6lŲpŽć|ź©§øłę›2dÄĶĶŌŌT6lŲĄ£>ŠZ­¦gĻžÜ|óĶ̚5‹ &FYY{÷īÅd2Y‹.\øeĖ–1hŠ nøįœœœ8pą'Ož“žO&“±xńbžxā bccéÖ­jµšćĒ³iÓ&>’üó ¼óW*—Cł—øz‘” ‰ö`6Ÿ™EwyE‘õė×óēŸ’““ƒŃhÄßߟįƇ3sęLÜÜģ‹ ÅĘĘņŪo摗—GYYŒ1‚ٳg[óōĶf3æžś+»wļ&;;“ÉDdd$wß}7żū÷ą?ž`Ū¶m¼žśėē4Ī„„V­ZENN0eʦL™bĶż×ét|żõ×9r„ģģlœœœčŃ£sēε+ņ—––Ę'Ÿ|Āɓ'Q*• <˜ &šŃGńŃGY‹nŪ¶M›6‘““C]]”””̘1ƒQ£F]š}æł¢śWŖÅڳ ^”œ«ņoŖ[ƒIæė2JBBB¢½"ļŗˆ_j··ö@Ś Ķ)’¢įoŒšÆZaDķ „ŪņNg¼„“ŗ@Bābq5ĪĒó/$$$$ĪÉŠ˜–<’’@BBBāÜh ©®„D;G ū—ø”Ha’W’@B¢#)’—Ił—ø² ķIł—ø”HŹæ„„„Ä•G«vø˜ųɼpŚG³ē2±£Łō÷W b\FÓApG%!!!!!aįr+’5µœb¤¤tz©<•Čåf<=dt–xy[zšL™-RR*¢ÓŪ¶ūłČčŽÕŽš–!’W Z’öōčŻCN£Īįdf‹dåŲdÜ\śö’#ktؼ3i¶µ”‹³@æŽräŗ“‹œHµG­‚~}䨔¶“••›I>a¢”Ź›Rżś(pj“D®¬2sōø ±žP ōé)ĒÕÅvœšZH“EĮ_¹VĻŽżöÆRĀ;ćįa‘łe½?wģdärxńi'ü-óbĖ6æn°—xęßNt ³ČģžĖČkō2> ¶*ų6±ģ›3n40ļ^5ś¶#@›7TVVņĒpć7āććӦƑhUm ģæ¼ĀĢžx#ĒOŠTV™1%Oؔ>>=»Ź‚=J O[ī…YĄĻ³—ŻB Ų«±0Õv Ž=Č.²÷ę{W#ž°žāŻ…Ŗj;™ļ:„’c4Ų‚=#É/“ģóq×”¬8†X-֏/œ“3<5ī.\j"Ö/®ƒŻ:x†§ĘIeĀS¹ÜĮ#£Y‰L&ŲåŪž 27©{œßN­D¾©ų‚ Üś\6å`õ/z«ņļādāŽ›ÓéŁéŸ„ĘI\Ł”V©Yž{$Y…®˜ĶšćOzŗwµ…_4Ģ&Ä¢DFöŌ0¬[ łŁsRd%½‹’~†÷*fųY~‚ƒŗ•3Ø[y‹2½£*éÕņo©[xŻĀ«Z”‰źPCT‡šeB4̼1³E™ Ÿ:¦ßÕ¢ŒÆ‡ŽŪGg·(ćįŖēÖė[–qq22uTN‹2j„‰É#Z–Q*D& Ėköó“·š#å"O>ģdWó”­#˜Ķgś./ååålŻŗ•ŅŅRÜÜÜčŲ±#Ɔ CQļ"HJJ¢OŸ>ģßæŸČČHvģŲĮøqćšōō ??Ÿ={öˆ#¬Ēݱc... 2€ŅŅR¶mŪFYYīīīDDD0tčPär9ÕÕÕl޼™AƒŃ©“żĀoÓ¦Mx{{3tčPŠŠŠŲ½{7ÅÅÅČårŗvķŹČ‘#‘ĆŖ"11‘ųųxōz=tė֍=l ‹½{÷āääDDD„u¬^^^Œ3???»c²sēNŹĖĖQ©TōģŁ“Įƒ#ŌϾ#GŽP^^Ī€Ų“iÅÅÅ<ōŠCŌÕÕ±mŪ6rrrpvv¶Ž;Ė‚nƆ h4xąnŗé&¦NŠ‹‹ 'N“ž?>>žÄÄDōz=^^^Œ9’:8|·»vķ"??¹\Ndd$×]wJ„–y>5.¶ņoŖ[ƒIæė¼öYæÅĄśĶ6—_Ē Z®ėWDx „BJŚ”­NNzž+ŪQ\aS ēĪRqĶ€Kck+Os(¾šƒ)¾„hń­ĆIm3Rłhńr³ĻóĖ*tEÓČ3ąļ„Ć×Ć>Ļ/§Č…šFŹ“»Žo{™ü'*5*ėߞ®‚}ėģd ĖՔWŪī…»³‘ž;™Ņ*µŻżrQ “—)ÆVQXn˹tRščTk·ŲØŖU’Wjó.)å"‘!µÖ0M€Ś:ŁÅ6Å]Q/#k$£ÕĖ9]ąBCl£L0Rk·ÖäœĪwĮl•ˆąjT Ūq FłnˆÖMf"‚48©lߏŃ$‘QÄAx@-.N6Ń ynIBż5ø5ņ›Ķ‘‘ē(Ų§O7Ė3ėt‘K×F£T ü{”š ĄsµØūŽW-­‚WWō ¼Śņܽ=Fō×]œw‹ŃhI‘r¦˜ĮNµ+EN¢u(­RóņW½¬Q > ¦{×s‹JQŗ= wL ¹œ“ŖąēŸę®»īĀßߟĄĄ@L&)))DEE±wļ^<<<ģ QQQ°råJnæżvŽyēž~śi:wīLr²%Šl6Ąć?γĻ>ĖŖU«˜={6AAA`4III”{÷īÄĘĘāģģLTT×_=_}e{Ā|ĄĀ… ­ćõōō$44”ŚŚZRSSéÓ§Uyo Q™9s&kÖ¬ĮĒLJ€€JJJ())ažüł|śé§ÜrĖ-dgg“––†‹‹ ~~~ddd —ĖYæ~=#GŽąĖ/ædįĀ…ØÕjĀĆĆ©ØØ //kƽ–7āźźŹO<ĮĻ?’ŒĮ` øø˜ŅÓÓIHH`Üøq‚@DDf³™ŌŌTœ‰%::š¾}ū’Mee%jµ'''BCCILLD«Õ2uźT¶lŁBpp0¾¾¾dggS[[Ė[o½Å#<ĄĪ;™2e J„’N:QWWGZZįįįÄÅÅ]õõĪÕp)<’ēk(ư,ŌĀžGö-fś ™Č¤¤Dč 2–Ə&9Ćāżõņxł9'» ÅsmbŁÉ‹zL‰+“ßöt`ĖK„@Ļīržw®Żb®ĄÅČł?_ĄöŻFV’b1ĪõˆØäĮi–ŗ qu{ğ•Ū:Š%ZĘć6½ī>_6žaä·M–łø &•^‘åøW6?üŁ‘½IžŒ®ąĪŪUgŁĆB[0\śRš-šĀ /0eʲ²²8xš ‡"33“ģģlÖÆ_ļ ļėėKļŽ½‰µn‹‹‹#&&†'NP^n ‰9~ü8%%%Œ=€Å‹3sęL2339x𠤧§sņäI¶lŁ‚L&ćžūļgķŚµh46ĻĖÆæžŠ\.gƌ<÷Üs̟?Ÿüü|āćć9~ü8 $&&²nŻŗfÆsżśõ¬Y³†ß’ŅŅRŽ?Nqq1Ė–-ć³Ļ>c’žżVŁ„„V¬XA~~>IIIŅ«W/ž|ņIĄÉšŠC±`ĮJKKIJJ";;›ŲŲXöķŪĒņåĖ­Ē:}ś4óēϧ¦¦†ŒŒ Aąõ×_§cĒŽäęęršąAāćć),,Ä××—Ææž°D”••Ģāŋ)++#1ŃRdٲeģŚµ‹æžś‹ÜÜ\)..f޼y<õŌS”••šŅK/1iŅ$ŠŠŠˆēŲ±cœ‰N§#!!ĮzÆŒ¼QóŅššp¶lŁĀĶ7ß|Öó\ķ“å°ė7{}’"Ił—8+Īj#z—X’>qźāՎXū›ž‚"3;žö£“ź\=¹W3ü5ōˆ°)É)’ZOłØm”å"ü“8W§ž“T„’|i|¬浄ģˆ­&4@ƒ\ƒ¶ÆÖ€­ZpņäÉ|õÕW¼ūī»TWW£ŃhČĻĻ'##“©éćčŃ£łšĆ©¬¬¤ŗŗšœœ†ŹŠ”C‰‹‹cüųńÄĘĘrķµ×Zä)S¦šÕW_ńę›oRSSƒF£!77—üü|ėyBBB˜|8‚ 0mŚ4ŗvķŠJ„"$$„§Ÿ~ŚīŲóęĶcņäɲqćFÜŻŻķ ß-_¾œqćĘqųša233ٳg'OžD§Ó±iÓ&kŽž™čõz;Oxcär¹Uyģ¼ś 4(õZ­­V‹ Öt‡ĘŒ9’®]»6wė˜9s&ūöķcęĢ™ 8¹\ŽŸŸnnn-ī׀N§C§Ó5yžyóę ĄėÆæĪąĮƒ‰';;›pźŌ)***Xµj111ēt¾«¶¦üčt¶7£TšOā\Q)lF\ŻEŠÖ7™ĢÖ¾ņ`‰48Fō.”°Üœü1ōź.DŪŚŹæ„D[#Ą_Fśi™`v( +!Ń‚*eū³h¶š ))‰ćĒsāÄ ŗtéb÷Łāŋ›ŻĻĖĖ‹žżū‹V«µ†¢6Œ×_ŒŒ ²²²¬ł’‡"55•ĢĢLĀĆķŪ?=žųćv7ŽŠŠP~üńG¶nŻŹōéÓ­Źw]]{÷ī%&&†Y³fY÷1™L\wŻu|öŁgĶüżż­”ńgRUU…‡‡­URAc+‘eŪĒLJĄĄ@AąÓO?ušīgdd`46ļÓh4¬_枵k×:(ąk×®mvæĘұcG>śč#»ķ¢(’@dd$&“‰;vpć72}śt«ŒŁlfŚ“i,]ŗT24A[Tž%$Ś2™€ X¼5R*ŠÄłą¤2qē˜ÓČC‚ }Ej^T$å_BĀ‘Ӕt ŅŅĮ%©¾ŒÄ•O«ŗ4„Š7ĪEHOO'3³å~’ uāā⬀k®¹†ŚŚZ>’üs«‘ „󤤤ŸŸo·­”ą²eĖŲŗu«¢ÆÓé;v,Ū·o·ŪG.—ćååEmmm³ćˆˆ ))‰¢"ū 'Nœ ++‹ØØ(붃’mßćróęĶćééIēĪŃjµv…Į¢\ßvŪm¼’žūĶŽ£ŗŗQŚšUUUĻ™ ! uuöm­:wīĢöķŪ ‡fŠ Adff"“ɘ>ž€€ X½z5F£Ńį^ōīŻ›„K—RQQ‡‡‹/ę`łņå <˜Q£FLQQkÖ¬”’žōéÓAˆ‰‰įńĒg’žżDDD —ĖIIIįĒäĶ7ßlvŒW#’ņ/!qī̟£¦,'OsFkE¢QU«ÄT ~­=’Ė¤üŸŪöÕšŠK¹ĢŠń"<Äā41šĢ(䖩£ķūjŠŌ‰<9×ßį³öÄ5½]xś|6ķ®ęąŚĪųx]Åį1m–ņJÕ&<ŻämjŽ–TŖŁqČņBYæYO’>Ī­<¢s§Õ ģŽ½›„K—²yófL&AAA,]ŗ”ŒŒ œœ,½====¹żöŪķśĘ9’É“'#żśõ³næ’žūٹs'3gĪ“nóńńa×®]|ņÉ'lŚ“ Q āóĻ?'99ŁZįæńø¼¼¼˜={¶CˆżoæżĘĒLRR[·nE"""X·n“'OnöZ}}}Łæ?Ÿ|ņ 'OžäšįĆø»»óÆż‹|ggŪ„‰‰‰a̘1üņĖ/”””ąććÊ+øóĪ;­2k×®å‹/¾`’žżģܹ…BAtt4ƽö oß¾ž~€7ņžūļ³gĻ4 ~~~<öŲcx{{säČ;ŁĻ?’œ7ŽxƒćĒS[[‹Éd¢K—.:tˆåĖ—“ššJBBžžž<ųąƒĢ›7Y}õ”ÆæžšĻ?’œƒ²sēNL&”””¬X±ĀŚVQBRž/ÅeFĘĢNĒßWĮĘåśĶGŽpœ{§łšĀCķūæõE1ļ|YĢWƅqÓH÷ÖN«āåaĀ\ŁŚ£hOä—:óĘ÷Ż1˜ŒÜ?[ĘĄ~­Zł²")’ēGmČĀsš÷•óĘӖ¢Å­Čµ3R™|ƒOĶ ĄŁIĄŒ VäķåÅü“¹’=«¢qwm_äTJĻžŹŠŪRyä?¹|÷vųŁwŗ©Óš‰ūKN7)   ņĮ·%¼žyŽķĒ›O·öp¬ ¶õ¦ĮŲ¾ €­śģٳ'üq‹2įįį¬^½Śn›»»»Ć6€… ²pįB‡ķ}ūöåÓO?uŲŽø-߆ Ųµkū÷ļĒ`04y777žzź©ĒŪaaaMVī?A˜5k–]śĮ™ØÕźfƵŁ³g7¹=$$„×_½ÉĻēė[#,Ó`lh µZĶĆ?Ü¢ĢՎ¤ü_8f3Ģy:›ģ=+ß ·*’±ńµŒä €¶QÊ*9zuqj•ń^ŽćĒoŪŖxą…ā÷Õ£ĄH“¾ś©Œōl=3&zµ©ßYZ®;z£E9K9)2°ßYvøB”’óēõϊČĪ7šńKps±Ģ½ŽĢųQī|śc)?ü^»« £ Ür’Ņr÷ŽźƒN/¶;@ĻĪN̚źĶ×kĖX棊I£=ξÓĘŖŸ ÄT ŗ²dn’T@⊧ż=©.¢(’––FēĪŁ±c~~~—} }ūö„G—ż¼—’ņ1X¹”‚ķq5Œ_3FY­ĪLa‰‘Œ=yE†ó~’h“"Yy KŒMē¶ÆĮh&§Ą@FŽžü"ƒ!¼)^x0•RąµĻŠZ”»R)*¶t8Ķ„Uź³H·­Hīü;1UÕ˜ØŖ9’żDŃā4iéœÕµ"5šÖŖŗV¤¢Ź„ŲŽ›K “čöÖ>Rr!Õ3yņäĆų//æür«ž_āņq³Ė¼dWw÷…RU#²čķ|ü}ģȉ ĖV•q:×ęvw•1į:–<d­MИūkxżó"ž:¤±34(ä}»;ńÆ¾ĢŽńvŲ/Č_Į”=ųis%[÷V3f„“>i->ž¾”„ߕšČl?¢:Ŗyļ«böŃP[gє½<äŒįĪ¢tķäh¬((6ņƲ"6ķŖ¶38©”Ż¢ŌČńäŃ{żpVŪ4Ö×Wšß„…Ü1ɋ뇺ńŹĒ…Ä֠ӛYō@‹“8«“:3ŸüPĀĻT’˜¢µ;v÷h'&^ēĪ£÷śŪEĀdęé™07ƒČ0?¼Ū‘·æ(ę‡ßĖÉ)°×T*õvęßsüķ¢OŽżŖ˜å«-Å~Ė*-öVüZĪʝUV™Ž §o÷ÖĖ»÷÷Ņ !§Č…}ŪNm‚sA2HH“’ņį,_]Ja‰‘— ÄĆĶö²˜4Śg' ^Č!§Ą€Ž`fęD/ž@æćcOįŲ)-‡’ė(Æ4aĶØ•Qįj†ōui²č̆Uč f&ß`yaķ>XKF¶žŹnĪ2ŗG;1|€K‹…”RŅuÄÖPZaéŖį¬–¤dXü}š~ ާéH:QGFdܵī„ŁöE8zRĖ©L•Õ&Ō*O{9ąė8æ Š$§i PŅ-RMmHÜa ™õ Hh’Į}\šņ°æ÷‡ŽÕQQmY 5,ŌŽŅāķi“»ahėĪUµŹęf:£)Ї¤ü’3ĢfX½±A€©g(ę…%ę?ŸĆĄ^.ų9œ—>(¤V#ņĪ¢ūo.¾”ː~.t ±L®Ē^ɵ*/nr¢ĀUø:Ė(,1’S` ī°†øĆYüļÉ`½Ē1ātń»¤¤ėšp“qķ@WTJ²JI'“¬ŚXĮ®ƒ5ģYMH£gÄśUÜńX&ŃŒæ‚čŽ*œÕ2j4"9zž>ZĒßGsČŹÕ[ŗĘLēÉO›+łę—rÉŠŠ”W™ČČŃóķÆå>néĮʯUF­F$5KǚMlŚUş_GŚ)ĄÅeFFŽ‘Jn”…Ü¢š{ŗÉŃźEJĖM$¦hILѲ#®†Ķ_FŅPꬺĘrε[*yūĖbtz3*„€—‡u½” F#2įž ā“,¼|¼ätT¢Ó™ÉĪ7päxGŽ×±zS%;拲®› 39z4Z‘i O³÷P-ž> śts¢V#r:ĒĄ¾ ū2łxI(÷N³Ø*źļCc,Ń ¶jūZ}ė†sÉefž¾+™Zu¼/äų… $$$Śf3|¾Ŗ¹Ląž©>vŸ%$×ńļWņ8ØįŽI^ü¹·†”ż\ŲDC›S˜s«Æż_°5 `_‚†_Ź!%½ée'µĄĆ³üxįį@;EnĮ‹¹””Ył^G{%—‚b£Ć¾BU|łZCśŗŲm/*52ēélvģoŗŲR!pßķ>¼žĮE »DØ1Ą•ķq5:VĒ€žķ§źģ•Ęóļ°õÆ–½ʊ_Ė›l„Õ!PÉŅ—:0īZūµ(Ā’>-佯K¬žĘŒ»ÖO–„Ś­ŽZ^ĢŹ ¼żl›c«łsOµõ³uŸDX «6V°ųr [˜ \?Ųw‡Š%ĀęAŚśW5óēp÷-Ž\ÓŪ™%RVaߌČY-ćÉłóģ|[ŌĶ3oę³ēoūkķ³"ųĢv¾ŚÄÖUHūw)ēD–5¢c®ær—>’ņ’ĻIIÓr:WO·H5ķoĮJö¬Š&:\ @VD«‰ SńŪg8yZgUž’ėX¾ŗ …\ąƒ:0;ĘŪ.,`vŒ·± ,ĘįwśņźĮØU¶w@z¶žŪ>Ķń4o,+ę½ēB¬Ÿ½ų~&ŃĢĒKB™će÷¾2‰f>ZQʳoåóž7%<5/ĄįŻrĆ0wd2Ųy Ql!Ķ‚·ŒōÓ"‚`ĘĖ­mä’'$×1¬æ _¾f[Łłę>›ĶžækyśĶ|6iżģ£%ä>Ą•5tt˜W'Oė˜x±ńµÄÖ0¬æżŚäD†Žn‘jŽ^ĀČA®vŒ·–Ÿ¤!*\ÅņW×5ńIīy*›ŌLÆ}^ÄOŁė+,1b6Ćśe=ÄĶj|()7ņļWņX»„’ß/°ĪŻ%±äŃ –|XŲ&‹ČštoyeWī[PBBāŠ%>ICVžĮ}\ō³Œły+ŠĢlXnyÉt¼ī8}»;óĶ›aüļ“" KŒVå?3OOĢ‚ ŖkE":ؘ|ƒaĮJd2ü"GOiłso5o./ĘŻMnmłŌ˜{ŸĪĀŁIĘC³üč©F&X^Š?®Æ #GĻ“O“°®‹Ēõī'²Ųów-ŃÕȱœS©”QZaäČń:~ż³ŠĻ~,ÅßGĮ¢{–MŗĮƒ=ײnkåUeA°€”ķ¼p5Ś:‘I£=ŠÓµJ øĢČśÕ¤fź˜ńh&;拲óŌ|ō] Æ|R„“Z`ęD/zvqĀŪCNE•‰¼"æoÆbKl5÷=›ĶĘåĪłÜ;łhufŗEŖÜĒ…B°Sžļ{&³Ł’62b€+ž¾ Ź+-E0·žUĶŽż5L¼?ƒż?9¶žśso5ß­+§O7'ī™źƒ—œ’2#ŪćjH:”å? äžśéQ×øZēwl|-ÅeF÷q±ŽGh7*…ČģńČCA~ej6r_‚åŽĻ(‰s#ž˜ÅŪŚ§[ÓĻŌĪmĘ2o¹bŽŲÖ¢|ėMžVofcŌ*ē°qg Éuü±·š¼ģdŗG©yóé%<2LÅ[φ0ńž ~ŪVi5ŌéDRŅuųū(š<§\&šč=~üļÓ"ŖjLäģ”J7KŌRZ–ž£'µōéÖvŠx^jfLSä£%Ģż4ž^m£~‰Z%šżŪ¢Ƃ•|łZŻo:Al|-%åFkż‰żG,ŽłļņuPžĮ2OoļÉūߔ–„s08©Ö|ATøc˜Ō÷æ•°ģGå`PoŽ}.„˜§Y·µŅĮšĮó¢Įü¼|ōb6øĢČ©Ó#œÄ„„M²³³9qāƒĘĆćĀŖ’>|“Édm“׃]»vY’ OŸ>tž+…ŌŌTŠŠŠ>|ųe;ēéÓ§ÉĪĪfäȑ—ķœm›,ŽĘ]> V²ou“õo­ND§qVĖxł± ;Łæ+„ŗVdųW6,ėd· k૟ŹxpI.|SĀc÷ś9„ō{øÉٳ2Ś.ōąß÷łsƬ4ŽžŌņÅOeViJŗŽ=צāąĻ›<ē7攳ą…~ż³²IĄµõ×½=®†%6y‹®HärčÖEĪń&zD“>€µu"?/pšņ/y4ˆéd²%¶šw¾*į›7¬Ÿ-[e©_°üÕ0‡<`€Å é3é$;÷×P^irXĢiuf–¾Ų9·ŁGĄ˜D3Ͻ]€Ł o=ĀĀ»‹%–U˜sO)é:¾ž¹ŒĒļ³W KŒą¬¤Ü䚣¾.M*’„åFr ø¹ČšTž,NŚ:WgūōĢ3ߑ xŗĖ‰Ur^r¼Ū27›J[šń’óüCž{AĄšÆ|<Ķń·ŠÖŃäŌŌ^]æ‰s§”~…‡Ū…-ā«ė«¢{ø·|œ†Č›ārĒō±3S£ Vƒ`yUƘeōźāD~‘ÉóNóž7%lŲQÅįću—9æ9¼Ü-jĮłģ#qi nŁXuUQeSä»EŖéßĆƒĮĢžækY棊Ÿ’Øä˟ŹųōĒRž»“æZ<ł;£Xé×ō¼+­’mųxÉ9|¼Ž„䦒„eé­–5µö©mnrœŌ͇ƒ)ėSRLŽv‰6KY•šõ{CHĻ’ńóļŽļé¶L›Žøłę›Y½z5QQQ—õ¼¾¾¾”•YŠ·Üx捗õÜķ“ÓĘ<"!g”ø(äÕ+DĶYĒóŅ#Ķ·Z,*µ,rŗ4QI·A€čp5…%Fҳõg,ŽMѧ«E¶±ēYæ(LNÓ:XČņWšŻŪįĶ×Y-ĆÓCFY…‰’r£]!Ø+™ BƒL˜+ŪŽ"wm‘( ōķf)XVa¢F#āę"C.HŚŠµÅcMf²ņ,ó¦ŗÖ±FĄˆMŸ³”bxÆ.N-†Ž7xˆ²óó]{F;9ä7Š0ד:3£¹ŻtŌ(*WóĘ=ŠL,œ+Ņ«G›öH“ĘśŠęšū^SkŃ`šz¶7Ę«ž] k¢Ķš»ŪŁ÷-*5Ś)Ÿ¾jI7Ś_ĆĪ3źĖ8©:…©1Ą…§ē“h`K‚« ƒĖ qr&Ų·®µ‡`WIæ)б–7še&x!‡M»Ŗ­†ę3qsižøĶ=ĶĖė YyFĢHmq\ h“öóŗ½¼+Ī^hō’VČ? Õ D”PŠæ»ķłłł;vŒ#Fąå具·7nnöł"IIIœ8q“ÉD‡读7žž/ŌP¼½-” Ņß"£ŃH||<ééé‚@‡:t(Ŗ3JGMM ŽŽŽDGGÓ¹sē™™Inn.C† !..ŽĢĢLœ:t(ĮĮöł7&“‰½{÷’““ƒ««+ĮĮĮōļß„Ņņ"Ų±c!!!tķjæ0=zō(•••Œ1¢É1ŌÕÕG~~>...„††ŅÆ_?‡{WRR¾}ūØ®®Ę××—Ī;i'c4Ł·oYYYøøø0tčŠÆæ-°W{˜R±R2\F*ė+Ž»·š";ŖĻq”Öąm©l¢—®góψ3½4×ōq&2LEbŠ–ØŽÓÆ»3į!*ƒ•„*éؤk¤šˆ-[’=Żä”U˜(-7]U€¶ˆo3żæĮ¢LxøĖ(Æ4QQe²[|„fźX·­ŠŒl=U&t3uu"Õ‘¼BC“ž’𛳠µÓ¹zž· Łż<|š:ĒEbKžĖöZģd¶u:Ėu9j¤W+¼€ÄyÓąłÆŖ¾0dCT–Ńزݠd;;9žØZh@ƒn×ŲČ7 §3ɛ»²ēļZROėČ)0S` +Ļ@vžéZާjY·µŠų_:7Łi¦į¹ąÕDžų•Ģź_ōÄīS TtgÉ}Ixŗµ¾7·„B17Rōļz"“]j‰č bś/Bƒ”(n2rwU[Š“ž s:ĄWĮ¬[kL4EK†‰Ö§Õ ?üš?üšyyyČå¶ĶkƽĘO?żDvv6[·neŹ”)€F£aüųńüõ×_¬ IDATtģŲ•JEaa!z½žÕ«W3a„ֺœf9}ś4cƌ!++‹ŠŠP ………³cĒ«üĘo°xńbDQ$00ŠŠ 4 111¬Y³¦YCĚ5kxēw !11‘ąą` E‘?ž˜ū￀äädʏOii)aaaFņņņ dēĪtģŲ‘·ß~›üü|žžūo»sL›6!C†4ių믿˜:u*EEEųłła6›)--%**Š-[¶X£7Žyēžyę|||šńń”¶¶–¬¬,ę̙×_~ X cĒŽ%11‘ŠŠPė±|Ѿ‹Ķ^ķaźŽ© mķ”\UČź_Œŗ 7›-mm€fCńhX 52ēւ•¾Į‚_Um3(äæ}։ÅļšGlu}¶cv·H5/ m6Ā a슫kĘ”#&öīõdDw/śF·|ͳ¢<\å”WšØ¬6YÓEŽūŗ„ēŽÉĒÜÄvu–ÕQ…J)8“A: ʦ†vOgćL/ œ]łhˆ.³©{.!ѐūŸWtaʟKżūB£my¢5üöšJ9جvü]Śķ[ß9Ä×Ė~mØTŒāĘč&ZÄ–¹eA‰)Z~\_aMQkLCT\dčÕe ĖĶ·ÜOƒQFQ…S›04nw× Żc Ч2uģ:P‹»«Œ½«¢›,°iWu“Ū[¢aNūxŹłĻæƒĪ"}õ 4zY¶„ĀÄēB«™gīøćŠŠŠˆµn3›ĶüņĖ/̘1Yn†ļ撞żū÷“œœLZZĒ§øø˜iÓ¦ńŚkÆ]ĪįŸ3o¾ł&žžž‘žžNvv6YYYČår>ųą222X“hĻ<ó uuuäęęR[[ĖʍY·n+W®lńłłł 2„źźj233©®®ęž{īį±Ē£ŖŹRöÕW_ÅÓӓĀĀBRRRHMM„  µZĶ_|Ą¼yó8tčÉÉÉÖc'&&rźŌ)f͚Õä¹,X@÷īŻ)..¦øø˜’’²²²0›Ķ,Z“€šš-ZÄsĻ=GAAÉÉÉdff²yóf¾śź+ŅÓÓųļ’Kaa!iiidgg“““Ćžżū‰æ°/įŃ üK\~ü½ė=ņU’ÜS# Ō¼iuē¶PkŹ¢mhĮĖÓp\W{*2LÅļ„S| 'éŪ»³ėū(~x'œ7ž fĮ¾tv"%]ĒmŸn2üŪ$šė å€żÜÆTĢfųę=ĒN©łv³ceüÖĀh:‹§Ļ`łźū)§¤ėxžŻr×ž/˜£»’··å÷B“Ō›ā=‰[Ół¬Q MѰ™:Ī“½«¢Ļśļ÷ĻŚĪ}”°ē“1,c~kćŖ”ĮŲzä g-Ń^_XҲ™_ohšh"Ü’čÉęĆŠ5Z‘ĀĖóß·ž]ø=®†3Ryö­ęēK Ÿ‚[ĘX¢eÓ² ‹­Hz¶7½»^=ŻeŚ*Éi-w#Čη̟†9zŚņźåҬņPöÖMį!–9]ZŃņ¾¢ž7‡–ä:“½˜Ū˜õÖĻSG ·å{źŁ­}­ÅZĶ0xš`¢££Y»v­uہČĪĪęŽ;īhrŸ~żśńĶ7ߊ„Kė6¹\Ī€ČÉɹäcž'dee1tčP¼¼l-^‚‚‚ųī»ļ˜1cqqq‚Ą“O>i ĒK „ĮƒsąĄĻ!‹/F­¶ät*•Jžyęjkk­ŹóōéÓYŗt©]:…‡‡]»vµŽ» &Š”CV¬Xa•łé§Ÿ i²Buu5III,X°??›%9,,Œūī»Ļ:nQłąƒ˜?¾Żž×\s €õü»vķbƌvi}śō!&&¦Åėo $åæuéi)ž—–}aIW®õ }S}Ų£Ń4ļ©iXˆ5EU}Ё_£ńŅr#9zŖjL‚%ß’š>.Čõä”Y~¼żlqk¢‰ SQVaāÆCŽŃE%FDŃbł÷k!üüJĆd2[Ćfµś¶śP\vOMżüń«_Øm‰µägŽz“'Ģö#2L…×mÅąģ†…¦h˜£®Ī2ś÷p>ėæ«„Ņ·Je»—ʳDü“NóX_»£¹åg“ÄÅ£O7gĀ‚•=©µ¦™żś×·fż}{U³Ń&Z™-±OlæīŽŹöŗmUĶ*P«7VbĶtv²zf]e$$×±õƚ#\<üŽŽĻĻ؃µčōfnīÖb±6‰ĖĆßG5¤¤7mHI×qģ”…\ wĖ3\]’–6æ&1Ķü¹ēü#ü}„‡().3Z[ 6ʼnt-ĖV•ņćļg­cq>(źėhβV»Ü(ä"ĻĢ:ĘóŌq{LūJÅlՍ;3_~ł±>6oķŚµDGG[Ć3¹ęškęłēŸgžüłĢ™3‡iÓ¦ńŹ+Æ`j£e#ĒŽĖ—_~ILL /¾ų"Ė–-cóęĶDFF2lŲ0ŹĖĖqwwo²Õahh(Ķēqxzz:äūGDD ÅÅŀؐ——Ē’żß’1ž|ī¾ūn&NœČęĶ›­÷N”P0wī\~ųį»ļäĪ;ļ“KÓh ¢¢³ŁL‡šwaa!`14Lœ8‘ļ¾ūއ~˜łóē3}śt«QĮh“<¬ŠŠŠw,|v¹‹@ž Iło}nf1dN¾°b= ķnŚ?5…Ł )–Ļšš¶ļKpTŠ8rÜ2¾`ۋὯKčyó >[YÖģ~J…@ēś¾ŅåMXė÷¶¼€īƒDėr ±łŃé\=Õµ".N2«r^RŸgŪé,a¶ EĻ‡čŽ–cfę¶lŪ{ؖÉ ›~nĪ—6樔_t9=;UŅ)\ąśmĒxŌV埶¹®¹R˜x½£™M»Ļ_Ij`źXOÜ\dÄÖp×Yģł»ÖZ°Æ°ÄČÖ½ÕÜņ@9:*¹¾‰pżņJSČ`ēžŠJ˜D3¹…–~WĀSÆēpļT[.vĻĪNxøÉ8vJĖż‹²‰Æ%;ß@ND£ÉČŃóž7%|½Öņ޹nˆcŃ?÷Z®yŅč k»Żńp·(˜‚®­žośōG,Eėź EMf¶ī­fś#™˜Ķ0éė{„Wg'r”z%¼!M,ĻćÄ-ÓÉ$½ŽqRw–ČĒ3¹wš„ėĢ’Īä‡ß+(iŌ½B£Ł}°–…/åpĖ‹Zō/¤¾ąóśÕlŪWCI¹£Él½/­‰J!(¶Xt·-ŅŖ®£;—_~™øø8†Īڵk¹ė®»š•_¶lóēĻgņäÉtėÖ …BA÷īŻ fżśõ—qäēĪ#Ģ|[ĀŲkŻ›¬|¾rCłE<Üäōīź8?[YʽÓ,­£Ńм÷u ×µ-š"ꕾķūŖyü>æ&ū5WՈ$ž°ü¾Ā‚­Ź[’²Txžx}Ó-ä®T”q¾]+ä ~ŪVIrŖ?=¢ēĒ;_ZŒ°×rµŽ¹!<3©‰¶’ üśg%™y–…Śł„=^ÓĒ7{ÕwXÓl ‰-»«©Ø21fųÅĶõusµ\[K ['•é’Ł;ļš(źōfū&»é½ZMzA)Šś±`ED‘SļģŽē½ž½œŠNNTDAi‚TéE $@H!½m/óūcČn–M’Ą|žĒGvóĪwæ»;;óö—Ł×B7”ķ·9•lü·-³§…óįĀ2>ś_×O iś€zˆŽPńöS Üõx.ß®ØäŪ•õŹ•|śbR½=hžļ²`¾[Uń;sź=vÜ#³źŒł4(xóo Ģx"—ßW°ąū†ū£LŸę×# ŖĘĶü%ÄG«™|ł™½ļŽĢŌkŌ„ŁI :Fthūq:r` æķ“x΁ ƒ’j“Ėć\MŒUóĀCŽą_TøŠ{oēµOJ˜ūĻ|žü\ĮF%*—ŗp¹E ˜tiß­Ŗ¢¬āōF=>0=’Ķ;Ģ,__ĶåRO#•Ź·Œ25AĆ?hŁ>—0dPRRī䏎ßÄćwGńųģ†'=É4L›:ŗuėFß¾}Y“hz½žģģģÓ’>żōSfΜÉ;ļ¼ćóüėÆæŽŚ[=cvķŚÅ%—\ĀŌ©S=ω¢Č}÷ŻĒ³Ļ>ˌ3ˆˆˆ ¦¦Q}\Ņģk'4Dii)N§ÓĒ·X,ŲķvBCC±Łl,\ø/¾ųĀSvPĖŚµk}×ęŸ}öiiiōīŻ›ž={Öūŗµi’555~«®®Ęh4"K—.Åår±uėVc¾¼¼ÜĒęéYP—Ś,†¶F6žŪzćFńķŠJÖm51r`ĆcŲcę įüēe¬Ūj¢’5‡˜tiI±R×Üņ*æī0³t­tNŽwkD½ķ² ƒÆ=Ä“I”¤%jŠjŽä9X°¤œģ\;!AJīšź×>ń’ {¹€µæ™89‹ń#ŒÄD؈Sa¶øÉ-pšßļ%§C§d­ŸēpJ©£Ę@—_|a9”JHKQ}ÄM§ų3Šµ4Œ¹5›™×‡Ó-]KX’üb'‹~Ŗdå†jęŽę-“ŗlø‘'_+ä‡5UÜż×ćŒDXˆ‡SäD‰“µæÖ0Iµ€Ż!ÖŪ¢!õ ī¹)‚ēß/bĀŁ\7!„!} VātŠ”VøXµ©†ļVU"Ņo %I?ŁHķŁw‹(.s’žØA©øtˆ”ÉŃc:²ńßötJÖ2mRó¾)gĆ6Sƒć6›bŹø`śõŠół·ålŁc”¤ĢIŁMH’ø(C. äę«B ©?eŹø`žrg$Ÿ-.gĻA+ÅeN“éI®ĵćCüœ SĘÓæ§žłK*Ų¶×BA‘ƒj“V PÆ ³³Žk. ®7sģŻ%TT¹ųĒܘ 2ż?,TĮŌ+œøŠKŪz+÷ ä•Ēāyļæ„ü¶ÓLQ©C€‚„5c‡ø÷ęĻXįZžy0–‹ŗėYš}‡ŽŲØŖq£TtMÓŅ»›Žé׆aŠ+Ø9™•VKBŒšŃƒ tļÜpĄM£ųś­–¬®āŪ•ģ>h„¢Ź…Ó%’šØ".RÅ„CLŸęÓ×"@Æ`ō`C£Óeō "DUoyJ\”šŸ?OēõOŠŁŗĒāVQģ¹ę—QģĖ×1žri)mæŸęŅęÅ£7Üpo½õ:Ž>}ś‘‘Ń lYYY½ćžÖÆ_ߚ[l“Éä1²bŚ“iLœ8ѧI” ¤¦¦RY)y…“““±X,lٲŧć½ĶfcćʍÜ{ļ½īĆår±lŁ2®¼ņJĻs+W® sēĪTTTąr¹|ś˜Ķf¶mŪĘØQ£|žŸ1c7ß|3 >ś©„„„ÄŚµk3fŒĻßÖ¬YCjŖŌ\Ŗ““­VėÉß°aƒĻć.]ŗ°zõjüqĻsn·›eĖ–5śžĻ²ńßžxdF‹WVņī‚’3v¤ÄkXōV 3Ÿ8NÖQ›'Z[V`ĪĶ<2#ŖŽ5Ž~*‡_,Ø÷Ųä8 Ÿ¼čS:©ā«7S˜õäqögIc™ź£W7Ÿ¾˜ä—!0‰äxxFT½= Īwž4[GĪž<’ŒŁm½OÜÅ_–ńüūž£•ōZĻž9Ę'āÖ£‹Ž=Ė“Æ2ļ›rę}SīwܘaFbŌ|²Ø¬ŃšĪśx|v«›w”6ø¾!@Įó‰=c§!fO‹ąėå•/tųü&¾{/µĶnQĄķu;üŁČĘūįŃYŃ|³¢’ŸĶgƗźĶŅj© ž¼÷Ģ£“½3ōō®§?@c¤ÄkxlVż÷Ŗ†(.sņļOKČH×rĖ5Ķń&snČH×ņŚć§7bśŚń!\;¾ń,Žļ?šmž:į’ &\Ņté‡B!„÷_5¦łe"qQjæ×«7žź_N\—Œt-ļ>ݾ&nUŌhXųs¢ÕfÜßo. Šę€ėÆæž‡~˜·ŽzĖÓ5¾!FŒĮ;ļ¼C`` iiiTTT°zõjV­ZÕ` }]<č׈®–¹sēҽ{÷ÓŚūĢ™3łā‹/p8 ¾žųńćyżõ×)--%33NĒ‘#Gx’ż÷™4iƆ #33“É“'sĆ 7OYYĖ–-Ćn·7؁æNĒm·ŻĘŒ3HMM%77—wŽy‡Ń£GÓ½{wDQ$##ƒ?żéO̜9“ČČHNœ8Įüłó©ŖŖĀdņ­až0aAAA8p ŃŒ Aøė®»xį…((( [·n8vīÜÉĀ… y÷Żwé{{ōŃG¹į†;v, …‚}ūö1ž|Ÿ‡9sę0qāD&OžĢšįĆųńĒÉĖĖós^œKdćæ}Ņ«›Ž«Ē³xe%[v™Š«žT禸ø {–våםfv°PQķĀį R’š ahߥF½Ģ£8“¢k~­!ēø²JĮt\Ü?°Ž²‚‹ū²ū‡®lŪkf×+åU.ŖkÜ ‚ JśfJ ŚNšøÜ"/}XD°QÉÜ[żG8]hŌŠ9ŁXŁ~ŠĢūdčŁ³“++7V³÷­ Ō+HMŌ2īb#1‘ž÷‡?ŻĮ5—±b} ĒņķT™Ü„‡ŖŌ;€A½Ų{ČJ’z2Ņ“žćn¹&”įżŅ@j?ą™.p’푬ż­†?²mԘŻHéÉIqĘ 5ų×ƒśšęßāIŠkø,@£xóo’¢VŸa”§fūw]ųńé³(Ær”U ¤Ä·­ń_V„åå’vĆbwrĻ]Jŗtj?Ššlü·/’āŌ¼žd<·?œĖ۟—2§žqyē ¢³žz³Åͼ’ź½_]øŻ°’ ‚(„–° Ę»ļĖČŌb±*<%ę³kIuĪis@BB³fĶāąĮƒ\żõ>‹ŒŒd̘1žŗš—^z‰ØØ(~śé'ŖŖŖ dĄ€|żõ×<’üóX­ÖėÅūōéƒĶfóŒœ;•†źģčÓį¾.™™™hµZæ“żŗ<óĢ3$%%±zõj¾üņKĢf3QQQ<ōŠCĢ;źåWÆ^ĶĖ/æĢž={X¾|9Z­–^½zńŸ’ü‡Ī;7ø>HSŽ~ūmŽ{ļ=–-[†^Æē®»īā‘G$Cż‡~ą…^ą‹/¾Ąf³ĘŌ©S‰ŠŠbŪ¶m>ė©T*ŗtéB=üš vźŌ‰”C‡z?’ü󤄄±råJ.\ˆÓé$99™/æü’kƽ€!C†°hŃ">śč#^żuT*)))|žłēž„ 9K–,YĀ»ļ¾Ė¼yóŠėõŒ=šY³f±pįĀF?ƒÖB6žŪ7Ļ>ĖźM5<ų\k>O?ć^  ¹(€!™A§7āōŅń čß3€ž=›’šÆ}RĀįcvŽü[|»H}“ń¢Ó \1*č“h%Ēiø³NyČ©ōģŖóė;qÉ — jŽśŃ*¦Nh¾ó“s²–ĪÉŚFeTJéSŽ3He“/fņåž{mÅž£ATŌHNˆ­Ū]ķĘ ’ķ“ė&„°m…Æ—WrõŲąz{±“i‰.ź®?g×÷՛k(,vņŅ#qōčŅ~ś-k¾Zlgõ/jōŚīüķöŻN/ėŖ% =|ļń2­‰ ¶·”Šˆ7Žxƒoæż–U«VµŁ^zé%Žzė-rrźos:üńĒ,\øćĒóᇲjÕ*æņ€ ‰Ó1žÓŌ L ŁŹ;j\–’ᲯmZš$üŻBÅÉhėSwģ&"ø}yĒæ^^ÉMć_Äp’ķ‘ēģu“F짤ÜIöźŒz#¼-ĶŽż.™v˜ —1’’iķ}9A¼õ4²µkg%÷Ļnܰl.ūøŲø±’!]ŽŅ5©mūLš™ĆŹ5|óvŹ׏”£ńĖŽH¾\ ĄšĮ*nŗ®9Ķ4Įo“ŚžšcüO ø„4u橱ķ·ćwœę›-’į§v¶n—Œ¬[Ęå0Ø{ū©½–iæXķJ|ó"T*xóÅ3sŚŸŹ Æ[É>"õZ¹’ŗķŖĒŒLū„ TĻ?ēe„ą©G›ēDSDP6]њ“y@GęśėÆo²>æµINNfŲ°a-²–ŁlfćʍØT*,X ’räæCš—óž?(­pa³‹õvTn …ŁźĘxn:ŠĶsšä½ŃLŸÜxōõ|FįƒyvĢū„óüŻ;Śt?’wy½»éIMlŁNś2ē?rä_F¦}"‡EešKx°•ƒŠ RŪļt™śgAd之66ĵ×^ėIµ?[śöķĖ?žŲ"kuddćæćqÓUē¾qŃŻ7¶l÷ō¦8¦;ē+.—ˆŁ"ig5–¶æ}ŻörƬŽBŻ6=ĶhŌŖČĘ?‚׏’ .™ęR÷\9ĆŽŒõR·’W/Ģ>2§F%ņŲĶū8įģJz·s«ž-Ė]!#ÓŹČĘæŒŒŒĢłGļōrRcMDE ŅvŁų—0ÖVQ#gŠČ4ņjļ¹b4¶œ”ā=µź ū·)szźtNWžqŖ¶¢ķC(22ķŁųÆuŽGg»ĀÉ“—÷\Q·P’,…B@¼Q ·( äš”LÓźüł†ż(⇠“‘¦&’^ā½ĘŪŽC”\>°Ąoź‰ŒĢ©l?čĶŗJŒo¹&y×\”F­‰Öē’cjś™ZQm £]¾dm^FŁųoŒŠ`ļe­ ōĀķ,szä—xēW×=‡Ī…ŅS%„/&Ģ*’2§‡ DP“Ķ8BŁų÷„gw„§#·(€u;Oov½Ģ…GA©žUæG{÷ķŻr€š0[oŌrŁ%-¶¤ĢyNa™ž§?Éäéy½()ėxęt›īxŻŗu~#čĪ„üü|VÆ^Ż;’¹‘’Ęé\g\Öŗmß÷B¦żćp*Ų“Ē{®tNo¹[Ķ=wi˜u›Ą×h±5eĪoDQąpž {Ū\ædćߣAą’į^gĢŸł~C6GĒS¤eZQ”²D^]Ų›ć¤8Z ’E-?&ONATźŲq(”¬}:™™™|šĮŌŌŌŠæfĻžĶ¼yóP*•ŌŌŌ Š"wß}7o½õV“ėĶž=›wß}—€€L&|ņÉ'\{ķµ?~œ«®ŗŠmŪ¶”Õj«ÕJff&ß}÷iiiĢ›79sęąt:‰ŒŒ¤¢¢‚źźjfΜÉ;ļ¼ĄsĻ=ĒęĶ›±Łlģßæ£ŃHUU,Z“ˆ#F4øO™¶åBOūN·wšJ%pßL-_~mgżf§<·Y¦QT*˜0VĶų±­Ūp-)QI~”W «¬Q³dC<£†yoņßnHÄlń5ś¾]—ĄØa.T'mšļ7ÅS\ī{;\¶9–QC]$eą‡_c)(ńW¶f{4#»ˆ—øŸ¶Fł4?)Z2| “Ōxɘ^¹=’Ü¢?™A9éŃÉĄŚµa)ō“Ł›ČĄžR‡ź æ…ųEJK*µlĶNfŌɘ޲ĖČuŅ4ke6Hfā)UuĒ!ƒŸ3ƤRĖŗ=É\{¹dp’q0Ą§ū6•°jg2·]%Ü9Ē“üŗĻņņߓ™Ż¹€‚b5æģšoö¶ō·dŗw—2•ÕJ–o‰õ“ł~s}ūHߑŻ!šŻśxæėŠāõI P›7«Å閾`A€1—عęŠsÓP6žO…F U1b؊ā7%„`¶œž“ZęüD­ HˆSœ³1kzÜrƒ†)W«9˜å¦¬\$=UAHf¶“ÆR«Ąfó^„’ÄÅxe&^¦&,TĄlöŹÄĒ*锼}#—ŽT(P]핉ŠTŠ«NJłŠ*Ō*ņ ļo"4DĮ€¾^™>=UĢøM øÄ+c4 īッuNSpĻZņ ½2Cx×IˆS0w––£¹^­V`č ļ:a”Ü«ćp¶÷ś¦Q č•1 <8G˽2jµą³gZąĻ÷éسϫS*•Š’"ļ:‚Ü£eē7ī“) ōķķ{æ¾w†–ßwøź” ōģī{ĪÜu«–-Ū]8ŽĻ:3Cé“”xĖ ~ŻźÄQĒ'Ó„“Ņ'kģ¢^J.źÕńRžO„Żü駟زe X,Ž|óMzč!¦M›ĘŠ”C<Īn·S\\Lqq1įįį0mŚ4xą&OžŒB”`Μ9˜ĶfvīÜIÆ^½Ųµk×\s ÷ß?‹/Ęn·3gĪnæżv^yå”JéKžžūļ¹ņŹ+łÓŸžD×®]Ų¾};O<ń?ü0ƒ¢¢"¦NŹ]wŻÅrƒŖöȅnü„ ‚Ÿē¶9ØT0mŖ†ĆT¬ßģäĄ!ee"v¹TSIiŠWн›‚CĻWü–ė5¤„(Ų¼ÅIĪQ7¢õV£ĻšČōĢ“óėVßHM÷nJ4Q^™=ķž—ZŅRā»xˆž=Ķ÷=Łćb"R;QŪX¾Wo'äŲ} ӈpø.i(Nf'ö¼ČŶż6™  HÉHFqRÉčq‘‹õŪme$…*½GŠpiCŻ{»Xõ«ĶGQŃi”kÆXįR¦ko7Ś_¬Ųź†ŌjčÖ; Eøddwźį&p• S%U©„Ģ>‘(Ā„ōÕŌī"F£ÕGIčŃ;Eø”Æ µRV~ŖL0ŠpÉ1$c£ Š×øėŁĖąłĪ‚C!%ÉŹ‘c¾2=zč=2: kg›r Š3Sć‘Ń÷Ķr³{Ÿ‹¾½Ļ]ä?Ē™Ļ÷¦µøN3ĖŖ!¶Śö²ß‘Ż"kµ&1īcōlu"#DF€<¤J¦­ Š ōéYæ”§Õ\2¼qJ„‚‹‡4.£PH~c ģ§7:„©ĖōĢT6YÆŽ­‹’n]—锪šqdŌGr¢‚äÄĘeābābwĢFE*;ŖńuĀB›– øtdćŸu`€Ąčm3)ę\#ˆbŪÅņ†źÉج¬$$$„×_ūī»Ļ#ćv» įÅ_dęĢ™õ®óńĒ3}śtrssIHš6fXŗt)'N¤°°ČČHyė­·˜>}ŗĻń/¾ų"Ļ<ó åååTWWóöŪo3uźTRSS=2V«½^ĻņåĖ;v,³gĻę‹/¾ ØØ­Vė÷š§īE¦ķ‘‰žJ%]ėŪz22-ŠÓ «ˆŃąļx(+wćv×6’"§ĪÆØqžō4$SY%śÜa”‚_TŖŗZō1øC‚„ ™‘ŗ=kƒ‚¤hH]jL"Ö:ٚF£¤tÖÅl1{{a0~ż,VS±Ö’b[›ć^Ɨ”ŗŲ"UŽ,}t:Į/×é”>ĒZ“) U·'F-D£2*>Ń7RCĖŹE#E” mi£Q@üF³„/äČgJĖ”¶Ž†ŒŒŒL»GmxA™Ś“`+Ņī2’““}+ ōz=ęŗZN=ØT*āć}iRź£Ķf£²²«ÕʦM›(..ö‘Ū¾};•••øŻnŒF#3gĪdŃ¢Edggc·Ū©ŖŖāąĮƒ8źh;wö1ž:u’šgÉ€vDK6üėčœjÕČȜØTŌküĶ2 O50ė#øĶćŒFcS2c}Ī žö©čšh9£× čuĖh5  oü½iŌžž>ØTRĘCc(-##œ’eҶ׵ Łų—‘‘‘‘éX“;€ā ‹| …_#æŗŌ:>Lee„ßß§L™‚ĆįĄl6Ó§OFŒA@@”””Lž<™5kÖųsŖń Õvšź†\dŚ”–nų×ń‘ ųedddZ Łų—‘‘‘‘éH“;@k <žųć\zé„>³Ūķ˜L&4 ‹-¢¤¤„¼¼<Ÿ 6›9sęųwj&@ÕÉIy¼aū@Nū—‘‘‘‘i-Zŗę_FFFFF¦µ¹`ŗ¬hµZāāāŲøq£ßß^{ķ5ŗw—Fi£ÓéüĘžöŪo~ĒeggsčoĶŪŚµkQ©T$%łĻģ”9·ČĘæŒŒŒŒLkqęϦ_dć_FFFF¦CqĮd̚5‹żė_‘™™‰Į` ++‹×_iÓ¦!ƒ ¢¼¼œéÓ§3~üxŌj5ū÷ļē½÷ŽC£Ń`±X<ė©T*&L˜Ą½÷ŽKll,ūöķć•W^į†n čŌ®F2ēŁų—‘‘‘‘i-ä“™ŽJ›:ŗvķźiś§T*éׯŸ_ä wļŽDGG7øNDD}ūöõ{Ž`0ŠÆ_?4ivóć?Ntt4‹/f͚5˜Ķfbbbxģ±Ē˜;w.ƒę³Ļ>ćƒ>ąį‡FRRRxķµ×ųģ³Ļ|š>œ«®ŗŠ PXXˆŃhäŽ{ļå‰'ž8«ĻEęģ™Ö⨳@6žedddd:,m:°#3{öl:Ċ+Śz+2u’¦”RŅĆ)”‘‘‘i’1€G,1­•’SĒŹČČČ4y `F®ńoģ±gÉĘæŒŒŒŒL« ’­Oq‰Č‘cnŖkD9>u”£TJćPćb$Ę+8×SŒ-V‘Ā"6›÷\T(R’4jļfģČ9ā¢6¤*’¬D«ń®åtBöī:-C’č½ėø\}ŌĖé}½„x„ĻHXQ„Ć9.œNļsq1JźV‹"äua·{Ÿ‹ŽRāūĶuc±x_+"\į7‚57ĻÉä• Qå+“_親Ź+$ćŪfīD‘›ņ ÆL` @b¼ÆLI©HI©÷ŅéR’|eŹ+DNye4Ōdßs£ŖJ$æŠ+£R ¤%+Ø;h®Ę$r<Ļ+£TI2J„WĘb…£Ē¼×{…ŅR”ØĪėłūݱŪŶ^ÅOƃŃ#U>żÜlŽźō(+Z Œ®"9Ń+s(ŪņMNNéµŌ*‘aCTtNó†ŽęŗY»ŽéQhT*Ü_EFWļ:ł…nVÆub±J•JčŪ[AŸžŽ[xq‰›?;1™„Ē …HĻī*rPQ)²l„ƒššZčŅIĮÅC¼ėԘ`ér;•ŅD[ŅRF]¬ö(ݫȲNJĖj•'‘¤cG©=ЬŻ!ņćJ'мßSl“Ąø1jOōÄå‚å«Ļ÷*a‘ćĒŖ=‘3Q„UkäuŅBCʏUąż^׬w’•ķö(”AAć/Utö–‚lü·¢_/q°āgGÓĀ24„e"Ÿ.°³k›ŪoR{ āÖ`÷^Ūw5ü{Ļ;nĆ}Ā›qš—ßPśČ:qló\óóҵLI‰ kŽt馕—›č|d*«DLĒö 6Jæ‘üc‰@ ŒÉ,Rž³—€HÉXĻ?}dlv‘⬄$I7‰¼ģhĄwd¹Ó '"Fny‡#€· !-°Rz­¬0D1ŹGF!?+—īįef…ąvĒp*y‡óq'H#ÕOdp:üe²Oąīr€’\=6{²æĢ‘RÜ'ņØ(ÖPcJó“É?VūD.¦•Uü×9nņ|ÆV»‚āāĪŌŽw¼2VÄźŒFPt\3ŗćī\F¦d'@ėRTģęó/ķ<,GidźĆĶŽŻ°x) ¬bŹÕ4ź¦:vģvņž'væČB-ęwL“nąÅ„šńnNķ|SRźā¾;%™ź‘÷?żÖ;žēä‘ū$MĪī€wžćĘ~ŠĶr谓§‘dDŽūČMÉWfĻ~/žĶ›®ųį<7Å„¾2Ūw:yé)…ē³ūt¾Č‘\ßMoŻĻ’Õ‰ń¤øą+‘}N•q‘š  2\z¼č[‘-;|e¶lƒ¤X'É'õ®%KEÖnō­Ų]¤Ē+V‰,_ķ+óūįĮNś÷‘ŽŲŗu"K—ū§pŒ"Éü¶UdńR­ŹÉųK%™ŻūD¾Z\O*øčdŹ’LVüw‘’ `³ŠÜrƒĘļłÓe‹mlü·K~“³āgoČO­rÓ)”†0£­‘£d.$j,*ęa±IöŽŻN>ž\dęķŚVĖHŠ(#@§ĒlUj%Äč@@ŗ)•"£ś!Śk<ņ·ĻaĶöHcY”„į=‹œ5Ō^½¦ĶaåÖ(\.é!"»—”„ ń¤ųśŃ9,ū5‡£Vśt® X[ī‘™<āK”qŲģ^‡CFJqĮ„™+ĮķLĄlõʤĒא]䑹|€ ‹E¤Śģ5£ĶōH>h—v=ŗ·•ŠJŠjļ<&ÜJæNł™”Ż- ”Vz£āį!v†vĻC“K×;éfŽ]$PXŖ÷Ȅ\Ś'Ń.żž{$™;@Eī‰Œ!ĄÉø¹ˆ'o¶iQ5L¢&;Ļą‘ й˜44Ń.yČcƒį’FŖŁ—ģ‘Ńj\\14Ń.Mr ŅĄ c޲ż`ØGP«EĘ ĢG“K7m-pĖų#üŗ7 Q”¾W„Ņ͘žEø+ŖŖŽqÜŽ• Ū ōČPz²: ²@ę¼Cv“G޹yć=&³\—)Ó8n7ü²Ńɑcnꎭõ‰Ō¶4³\ ’FE!®ÉėÆ6«ŠØzbsųŽØƒ”Åø Ž t(Ńk{b²ųŽƒ4ø ²D@]Oģ_ć2XWƒ«ąļkė{PcņęõV܅{źӍb >2:;Bńn\‚ō[3j:¾rōZ'ŹŅ]øŖÜ'ßC §Fj4*źŠøN*XFE"ą;QG„ŃÕģÄU \Fbx…–=ø ¤Č‘ŃųöĮ“’«@J 2øĀ’(ŒŃ™…« \ś·#čā'cpĮU E…­B7ęYGĢÅUP(}fJE&.÷)2ĀqÜ%V„ Do4ģt˜p ߘVSą*9ć5düÉĶs³l…×ųļ™^ɍcŽhoä(™ ›CÉwėćY³]Š4ļŲķā·ß źßņfŒh* œC<}§‡S1 éģ”ĢŌ 2S+•é’XE—ÄŖFe’cLĢŗ*«Q™Ųp 3&nT&2ÄĘW4.bppŪ„ģFeõNn¾<§QĘōc6*£V¹¹vTn£2 A伋7*#0qH~£2—ö;Į„żN4*3¬g1Ćz7*3 [)ŗ•Öū7Ńķ`ŽEŽ9łe£“æ>¤'&ś7©8 ä)2ē-.\² Īd @U•Č?_¶zš¼("3JÉL­$ÄhG©/#:v§‚¢r=[ö‡r0×ŪØ{7%sf“R¤Ęi£čš,‹B”é”PM Ī©ÕkōīTįs~ž(ג•k¤vCZµ“Ž*Q«¼^„Ņ* Ž!R›ŗļ¦w§r“jÆLeš½GB<Ń•ŅMÆō ōZļė×XTģĪńF…"=Ó*0č½FÅ¦d×įœ.oÄ'3„‚`ƒWé“9”ģĢ Įį<)ƒH×ä*ƒ¼†’Ć©`gV06ĒI…Xé”XMtØ7’źr ģĢ Įbó*Ķiq5Ć[<EQ`×į`j,ވOb”‰¤hsŲw$„ŠÆLlø…“8oD ącA>Q”Č›Ÿœ•gąD™7*j°Ń=ÕWęha Ē‹½Q” =Ņ*|Ī©¼āŽzÓbuNzu*G!|±¦»h¹ār5#‡7×hšN°‹Ł Šg2ąƒyv~ß!żŗ$V1gŹ!‚|/‘i˜/W'óĖŽH¢£žzTßÄĶ'æŠĶŃ£zEnC§–KRdšęĶEŁTŹ4ŠWÅ77/ć¬=L2ē5²ĄŸ3qĢ’Ÿ_6JŠZ ŽÉ=×"9ĘŌÄQ2*æģˆbįĻIćxÖt-}z¶pzœčĘub8ĢMĖŹ\ŠT›Õ<ņnoT*æ?¢óėt]?¾ce'@Ü®Ąéyšq‹§÷Å£7ķ#!Jž-Ė4ŽÕ®ä±÷zy²øžžHĖD]kL"O”Jcąłž~Spš˜ƒ‹z)IOķļMvČ\°(Q21ąb¾3Æå˜³ éA/hŃg_Wz.Њ–¶ŽB‡ąŪ•U,]SŠޤ ØŌÉĖŖjW€ˆp·U6žeNĻ~Laó¾zfŚøēNm‹®-;dšĆŌ Įōė”ä¦öFnž›Š£2,>[‚©ęŗ¹G‰ WqdMĘi{×ć¹,^YÕ¤œ @FŗŽY7„sǵa>ē×īV†NĶ ü÷h5MŸ|k­aҬ#nŹlö~ŸƘ>(bĘõį¼öxœēł›’|ŒŸÖU3“o +ē„5{½öŽĶī5ųėöĢjļČ™ • äŖĄ‘g 0\w™šōÜYėį²ü—œįÖ$†!AŹóŹS-Ó4[v™Ł}ŠJRœ†1C §uģ‚ļ+°X›ĪėUŃæ§žø(§įž,+›v˜‰U1éŅ f½īö}¶ļ³£ę²įĘfļwéš* KœŒh =É[üŁār‘ž]t čŠģõŚ;Ū†°{Æ »4-쳕2M‘§!9ī¬żoĻäøyö+nwWS0nPa[oɝV@§­_±ŪEĢV7ū²¬Ü÷trl¼ųpģ9ŽaŪ°ū€•G_* )NĶŪO%“õv: ²@ę‚G.©OžOlė-ČŌC ¾ZģBļJāŖįĒQ«Z¶öŪ•U¼śq1“. :mĄc/p¢ÄŁ“  TÜ|M(Æ<‡NėĘ¬łĶăĻęÓ7SßlĄŅ5Uüė"Ę7ž–ąßŸ–šĖ=—čćxčł*«]<0=²EV›ˆÕęöK =WøėgZ«žZv“-¹¾[UÉö}Ź«\ˆ"„)隦eüˆ zvÕłČĻ_RĮž,kƒ„^rl|žm9sn‰"øyvž³°Œōd-7_ĀOæT³rc łElv‘Č0Cś0e|ˆŸłąŸ}SNt„Š{oööųĻ’Ź8rÜĪ×…įvĆēߖ³7ĖJÉĶÓ÷ĒšõO•ĢžNl=ŽC€o–W²mƅŒN:n¼2¤ŁŸYŽ ’[VÉ®?,”VŗŻ"A%S“\:ŌĄš~~Ē<ū^f³›ūn 2¬~Sbéš*6m7ĻM­— IDAT3z؁QƒNļZz®ÉĖw{® yÅžļ·=p÷ü끘’ž_äąoœąÓoĖyū‹ī¹)œ”ųöćlśĖ‘Ü|u(į!-kz–W¹X½¹†ŒNŗ¦…[”NŖEGŹź‘22ČN€¶¦ŖĘ…F­š1„Z‹MŗÓėš¦Ÿ.5f7.—xZurgCm=ßłVK×V­u°y‹ˆ"1ŹÄ ī„m½%?Ę 5Ō@”Ļbu³}Ÿ…?²m|²Ø ½VąåG漕=ßx}^1O½q‚Ū§„ńÖßĪß&¬AĶՁ£łö,=:HfY¤[ĪCmŗ‡7?+įÉ× ±ŁėOĆ}źÜ69Œ7žŒGqņ²Ł9YÌ'rEč”gPo_‡×ƒĻä³zs G.©Ģ¹^žØ˜A½ųś§ Vn¬ń{­Ļ—óĢ»E|÷^*éŽr“#Ēķ¼üQ1=ŗč| —V°n« ‹ĶĶG_•a­“Jü‚F`Ł/Õģ˲¤äĻwDÖūžžxµœćvŽųkó[_.­`ö_ó<÷ÄSyžż"&\ÄüW’ŠØ½÷ē·æ(„“Üɍ“Btüü«‰·>/A§S“{t Ė­ā¢Ō¼ł÷x~X[Mi¹“Ukøćڰ¶Ž–‡”}Ū§cålé–\ŁcFŒ„ųŽ£É™“ČN€sGY…‹W?.féŚ*ęŲq ĶčōĶŌ3łņ`ī˜†J)Ż”E¦Ī=ʾCV&\TojŪÆņĶņJ:§hłś­ ųpaÆ~\ĢŻ7†Ó£‹ŽW>.aóv5fo3œK‡xģīh% ¤čč{ J¹nb½7Śó|ļ+āt‰lų²ϼ[ÄW?VPXģ$Ƞ俯%qĻßóŠØÖż·†’›(ĀØ›S\ę䩹1L×¼‘d•Õ.^żø„o–Wr8×ę‰V(™]“\=&˜{oŽšyĶ#yv&Ž™CQɦ…\ūŗ¹GŁsŠŹ‡Ļ$2ä¢öņm±xc³µ}ŽĀīœŽhō^%cä…ŠųdQ9›C”ż(»·õZµJÄé…T­ģ«Ó¶@&€\ŖŌ²k%ÜNēŗ6{żåė«yč… øsj“F­Ęé„ć…v6l3óÖē%|üUiZń= Ww\Ī_–ņ—ē XūEŗ'Š÷żĻU¬Ž\ƒ!@Į+õ8é~ŻiF”€»® ēŚńĮÄE©±ŁE¶ļ³šāEȱq󟏱åėĪĶŽ ¾żE)±QjīšFŸ =@Rœ†;® ćĮgóYš}E½€ū-ä·£ÕL¾¼y÷”Āb'³ž<ŽĖ÷ŻĮ£ƒˆU”P@q™“õ[M¼ņQ1K×TńįĀ2fO»šzįt4TJ®©Z6–;É?Ѿśä¬Ūjā·]fśdč¹tˆæCh–•eæTs$ĻNÉN+¬¢w7ćGł;Žå;ųߏääJÓ$JĖ„¾Eµ ½(šœč3— ( WW!©tGRūŌžddŚŁ ŠśĶ·3ę–lņNޜb"UD…«Ø¬r“_ä`żļ&Ö’nāūŸ«ųęTJA€ūo‹`ģmټ3æ„i“Bč“”÷¬¹/ĖŹæē•ąr‹¼żT‚'ŗS^å"ēøłK*ŲuĄ‚(BZ¢†Ī%f‹›CGm,ś©’ek«YžI}3½kVœ<¶¤Ü7„ūHž‡SdÜŁģśĆ H]}C‚ ėˆŁź&ēø“ļVU՛†¹mƅßv™ŃØF jžG¼ŚäfĢ­Łģ=dE 1VMxˆ ›]¤ØŌÉ®?¬ģśĆŹkŖXżYŗg¶²Ć)’sÜŽd×ßü"9Ēķ FdZARy_ų ‹ĶĶĮ+ż{¶oĒĖłĄ¤aĒłyGCėPķG.8w¼ś±¤ų’cn L÷5{uÓ1į’ R4Ü÷t’ł_™Oōżs£łnU%[w›™æ¤œi“B±;D}IjüųģhcėO»’óQüż¾hŸē2ҵŒf ēăģ˲²q»‰a͌~F†©Ų“°“'Ū –Æ į‰W ٟeeĒ~‹Ļż¤Ņ%€q#ŒĶīņžÓśjlv‘Ū&‡ńÜ_|ź]R“ ėˆZ%šÄ«…¬ŪZs^;ŒuģQC@ū2œO—ŚA*uū2FWnØęÅ‹™yCøĄķ†¹’Ģ㣯Ź£lTņńs‰Œ!•øεń䫾}ŠJ>Ļ=qOō9 hÄFŲQt ćd€ŒŒ² uyšŁņN8øø ož=žĪÉŽČ»Ū ?¬©ā®Ē³jS ó—TpĖÕ”€”>vė5”|ņu9y®€åŸ¤y¢*=_€Ó%2mR(#ś+Z;ö[Š+€ŸK$-ћšwĀĮå²ö7~.ŸÕŸ5?ŻvļA½7š;§†ź½”ŽzM/|PÄæ/Æ×šķ ©–ó²įFĀC›w ždQ{Y90÷žN$)ĪW]·ÕĵsŽņū K×Ts՘ęՎw|:NĒŻS‰ W”Ó Xm"„ķ«+ē=Oå±cŸ…æĻ‰fģ)=²ŽŚ¤Žæ™8QꤲŚE°QItøŠA½øėŗ0gĘ'‹Źų`a…'ū#|·ŖŠū¼ÓHžżd¼§3zk2¢O1#/Ö”Imõ×ŖEv“>N—Čęf€FSž§Nę¾§ó8xÄFµÉķ‰(•<÷—Xn8—æ¾~‚«ĘóĮ—„>f§W7÷ÜTæį+4ų·Č0WŽā‹ļŹłu‡¹Ł€{n ÷3žk÷8y\0Ÿ/.gĮ’ ?Ą7Ė„ūŹ“I”Ķz€%’”Ū5µį‰“Ǥ$6²cL9:SŗuQ2y’†¢ÜL”ßÖŪ9clv‘Ż„ĄDæĢÖæ¦¶.,å?’+#&RÅ]ׅ3 ‡ž`£’‹›ć…>żŗœ ŪLÜöš1®čFAIz¢–§ļ—ś!ä䌳č«2¢ĀU̹ÅėŲzŃłYrŠR“ŸœC™vD­ UužÖ©¶e.~ü„ V`ž+I>Ę?H©¹WŽā/wIœÅ++}žžĻūc‰U±a›‰ÆO* eU¾Ž‰ŪL ž’Ň Ė8|ĢŽB© \.Qjn¶øœQ7e³ąū Ļ1%NĻ”‚ŚßCi¹÷¹ķū,T™Ś—¤„©uÄ*#š–9m*«\Ųģ"ᔪFū°¤©.¢e•¾™]×Maō`Ey±€ēß/B”€7žŒ÷”¢Jt„ŖĮśw€Ō“÷›ā²ę5)ņŽÓ§HĪ…Ė*pŗ¼ĪĻ}YV±¢<­& ‰±Ņž¾^^ɞƶz£ÆÉq¦O cüČęÆŪ;JÅõ—` hž÷՞(Ætq’æņجv‘ž¤aäĄöŽwAbį2I'š÷BĪŒbĢ0#z0j›Æ eéRIMŠPUćę·]’ć8)N̓Ó#ypz$S'HŗOxØŹó܃Ó#ĻYō’D¹–÷æ‰eيŽ•9Ҿ“™v„œ Šņģ:`Įķ†>śF£ßƒūHīŁ6ŸēĆB”<ó` 3ž8ĪćÆ0v˜G_–R¾jõŃÆ‡¾ĮΘH½ŗéų}…½‡¬ vX>•i“ź7ąSā5Œbdå†j.«dī­^„÷+‡I)łćG6?Jo¶J𙾑ĪéĻż%†§ī‹F{Ž)¶ū)‰ŽT”*ßALXĒuv|æŗ Q”"{½ŗµM÷āÓåĻĻ`¶ŗyč®(ī½9Üē÷V\ęäoÆņÉ×å<žJ×O Aąī¹ž¤sźż’–ņś¼¦Œ 橹^g]Lä¹SE쁶ų“åL€Ö£ÖQe2»v]V£²µĶõĢk÷µ'āčĶ!>śJŹX¹sjX£S0‚Oµ=™Š_QÕ|—JÕšõ{pŸ2;ėŲ{ČŹĻ›j<Ł9߬Ņ’§Œ ńiŌ×WŽ"=IƖ]fś]}‚ÄX5ńŃ҉±j2:éøtˆ”Łe2­Ēߕ³ęW’†“nŖŖ]/tąpŠōĶŌóńó‰h5CØķUŠ«kżWfµJąéūcČ9n'>ŗże¢|·>‡Œģ8ą £«’”¤Ž[—22 ;Z–ņJI Š)Ų^'ųTŠK%|µÉæ&}ڤP>_\Ī/[LŒ¾9›¬£6†,hˆŚHGCŌ¦\–Ÿ†¢]Ošf-wL cå†ję/)÷qŌ¦’O¾<ų“nĪż{čYŗ¦Š9’ČcĘuatKב#)hzéf£×*Š7<:ÆHJp ķ×ųĻε7x~;"k·˜xéC©fł©ū¢==Ś3&‹›XˆUłÕ<ƒ”ņüŚńĢ_"5Å,­pŖ"$Hé1j’o4(IM8÷ć©­IäēķQ źgć¶iēžĒ";Z‡š“÷ —«ic;!F2 Ün@~‘‡ÓūüŃüĘ#zśĘ}żIglmÓŁ–`ś©ąü%@ķ}åt²Ź  Ö|žĪ;óKY·ÕÄŃ|;ٹväų;Ž?y.‘1ĆĪļ,€’R‘Ź|=)‘ę¶ŽJ½•:)*m<;!4XÉuBü²Ū3±QŅhĶßWpgęĻułæĖš×Ų²-0[½Ī1³¹ć”%Ź™&-G­½zs «›ˆŌ€42ķT™Å/[rŲ—%ĢŠj“ĖrS£ņĪ$RÓ.1©b÷+{YÉģ,y¶æń(jĶÆÓøē¦~ZWĶÆ;Ķ<ōBĻßB‚”$ĘŖéŻMόSźÆeچĒ^.hR¦KŠ–w’ĻÕcŪÆbS—“Q„°ą†#µĄ®ļ»ārŸ»‘˜§Ć†Ż‘ˆ"lŽźāĘ©āiEK[ Ł ŠņŌ:Sć£Õģ]ÖõŒÖ°;DžōĻ3ón€ļ9–v4į”"Ć :fį‰×²58€øX-"MxŸ¶ģ¤¶…ć“ļ·ÓŁp³.$P·Ŗ–¢”\ĄHū/Ū˰Ś×%śz†’žÉ)¤ZhēŌƉ70mV&OĻ=Į°žµ‘ÓOŲp:Ļ~ŸŹ/“{ŌÆ.č{s ¾-ąæ«ŠÜ»éÜ}‘£’ąŹŸ““ggų ¢+—¾éta$*ĀHļn¾ÜqS±ö“uŅFjŗ…„ʼ=UߞŚfRTI˲^tŹńt¶Ź ©Y2pī™S]ŚyÓ"ŹÄæ?Ę'K ˜żX$!ēŲ6w &ĄWĒæē³÷™C©’Ōœįwū° žó—X|¼׿R;mōI»Šż> q$płŖ¦LvJØĪąz±~ų¹„e«‹ гęÓx†Ü›Ā÷k‹Y¶ŗ˜[nؽć[\rī‘ż² WĆńB³ņ_ˆūdžšśū'Yō]!/ż”¹;łß„ŃĮ¼'ōé4 ś÷ō«5›tQ‰ƒ’žĆ’[˜Ē_’}ņ¢eu8Eµ¾­ZkgÕ:'MDˆ™ė:ä7t•jxķÉØs¾ÉǦ~œ/($"ĢĄė3£ĪZ¶±ŠéąoĻDs’Ģtę‘Ēü/ņ܏5 1i¤M ƒ®õćž±”WĢśÓ†"A€ŗf ,Ä@^ćYVā¢kļ$•U81é(§"uuGw§>-ĖƜ÷\¾æĢˆÄdԘ8&„÷ę±ē€™—ßÉįÆO×üŽ–U8ług®©=Ūų†®$„­źx¹Ė¤q”,ØÜ æČ¦¹ī+ėÓ’šķŹb¾x+ŽŪ†Öø34ü|u””9±6ū<Š_Ē©×r§Ŗn§³Ł»’ļ2­š®ŽėՍżüŃė4¬6EJšÅ=#ŠĖTŻi.,vŠ¼ŁłŪ:UKWN’Żś2ņś@F^ļŗgŚŠ']ƒéŁ6ö2óŸ%ł|³¢ˆī½yzJD½×ēb“Ž*å`ZŽ^Õø‚ēråŌTˆF@vøŲUŸnź•ĶŖQōėmĀŲHbG^•A€od&ĄeynjĖ׳ņ×RŚ ;Ąu]}ˆŽ0b4h;Ų•\Aś :Ģz¬śńżŚb¾[SŒAÆ1÷ŒQžĮ½üøå†@–­.ę±—3Y½ ŽcŗXˆż‡-tq>=üˆ7`³+v&›ŻS˜»ÆŁļ,s1Ź_sĆ/6ł_•IćBł÷āŽWö¶¤ŗŹ(ņéwõŠ`=ć½HN±šÉ7ēÜŻ\m†Oæ-8ė —ŗPav2zŹQĀB ¤ÆėxÖrцŹņ5Ū*UAs‡½aŚ1š¦ˆ­@|eĶ"i1p!®<2ąŅ„ė¹õĘ@Ź*œŒšr”ŸÖ—xdH.)s²lu1/¾ĄŲįÕɗµšÖ‡®Ģéy2ŅĄĖ ×ųĖ WĆķŸ N¹žN)øūĒY½©Ō=2ép*Öl.åĪéĒp87 ØÓ%ąJaä׏© ›üÆJÕ4¾)Ļ„³vs)¹łv÷žĶ«bĖžrÅÕģß³śĘą§£Ow×Ķ{ņ³é¬ŽTźĪr›oēóe…<üBĘ%Õ©qør~•}§Ó³QS ŹĶsŌ:²X›;]ŸÆŖõ¹õaż¶2ī}2w>­½“źē£cp/?÷Tä½Ļ>ż·¶żĘ 7÷:ĮėOå2öÖʕ!ŪKf\¶Ø#æ,L஑Į(?o)ć‹å…|ņMĖV“~ĀFb{oĶ‹s/sĶ(sĶ2›4.”N 5ĄÆ=…ÉرeO9}ķ¹ÜØ]+‹ŽŽ#:ĀȊ_JųxiŸ/+$łˆ™°/?élØKƒÆs]×½½4īøłŅ‰¶Ž5±ź“xn€Ł¢Ų°£Œ„’+āƒ%ł,ł±ˆŻÉ4of`öć‘Ūv‚kkŻÆžG‡6^”–;łi} Ÿ|SĄOėKšóŃńń_[2öėÕ:uŠsó®ķT̈ŽY ]ĖR¤ŖŹ¹Teś½®ėĖKņyž­ģ³&=NI³2žŃ椦[ń2i^:w ¤WW_,QŹ=ŅÓŲÅD»Z7š1įWFĻÆśsM_š…8U`ēÅæēšĻbĪ™3bįw…ģ=äźl\ŪtŁģŠÆ’WDn¾ßß{öŽŖ¹²ŃYŪiU³,py@C“™—/6Ņȇs[`w(Ž·’_hĒf‡šP=a†3ĪLF_&Õ¹3Å·4‘¶®N§Ŗ5™ģˆĮŒ@F¶'mTXį!zڵńBÆ«Y~H²6tBwĘcKžŁ ‡CµgśĒ×gdüˆąĖŚq£s[o–¾Ū ‹Uqäø…‚bV›ĀßWG³­bLgMr8“;¾ -ĖFŚ +V›¢e”‘6-¼ŠéĄl dśÄfxŸ‘“-eu”r݇ ƌ6įČĪ[ż-‰Ė+pŠyÄĮó–k׌‹„ļ¶ŗ¤ēØJ’WtFī£ūdž²eO9/-ąĶrłĒ‚StiēŚRŲˤĆburųø•)f”r}?Ž™KŪz ,<|w(ÆæŸĖ]ēŚD_ZšhbĄĒ[Gv®;Ė9|܂AÆńŠŻ5ƒ­bMų¹ņTō¼ż0}{øī”mZ˜ų椌wMØK%&Vķ 'ŗ}Ɯnõ•SS!!=zFł¤ČYŅŠU¹b4of`Żń,\^ČOėK8˜j”°ÄNēŠ·Œ61zH ÷Üģåߕ\¦Į }ükLÓ¬2wF$OU®›ŽšTī±%ҵ‰¾üż…Žū"M»ŹÉͳćē«#:ĀĄŠ~^ZĄšM„¤¦[)*q`w(Zǚˆindpo¦N#4Ųó9zvöaӒ¶ücĮ)6l/#;×!ļŽÉ›q#‚¹’ŽP^ūWaAz-ŽüżōÜŠĒŸĄF¶ŪĄ¾‚x•ģ#>¦žÖ•8Ų¹’ü†f!wn‹‹qzg¢¬Üén {™4^˜ŽœĒ^ĪäĆ%łϰņš„0®éāCófō:’2'ū›łby!|镼}XŠy§u^Ž.m½1č5~Ł^Ę[ęņcB=>kN'üø®˜ßøźs]bĶå&U‰§VžZŹö½ōčäsQۊ]ķ$P7 z­r˰sw\ z킮Ɂžē’ĘFŗ¶,;£”öē<ßVµĒ2­L~6ƒšP=©é®_¼½4fL®›Ž—I«5™ß…hm¬u÷o/ oƚkcÜ"ō·āp*Žfœ?Ąp” ŚDE8žeuļQEÓą_/Årcæž±ąŪ’ŹŁ±Æ‚ū<ļsŽ^#ņŌäpŗu¬yÆkĻOoŽ··Žw?Ėcėžr¶ī)ÆQ&¾„‰×gF×ŗÕ„Æ·Ž’÷J ¦ĶŹ 7ßĪW¹fōķįū›–®‹eūĮŲf„UK-b®Œ›š„øLMO˜žŅÖą5U¾Ž:&Żʤ;C/Ø|÷Ž>,’wės–é˜ą}Ī2ķ[{ńÖEŒņO¼-¤Ö5Ģßž«Õ9Æ¤Ģ‰Łā$8PϦ]å¼õ”«!’Ų}—7½78Š•čÆ*ŁßÅhÓĀtĪæż„?Ԝ¦ßŅtŽ×¼”téØĆ™YæÉ€~ŽRF’»Žœ·Üäń”—“ßrĄi ¼¢R'Q§%6ž<>”‚bƼ“ĆźM„¬>Oā£171’åŲ‹®Ćň3š§G"x坞ū[6Ļż-_oĶBõ8®%%USN‡ `ų šŁ†ōńĒßWGn¾Ž`ŠkųūéxdB/Lo^£|]ūas4’ŪҜż¬Œ»½q-“KGs IDATØrz Ē‘wž_M‚Ł¢ÜKÉĄÕéžĒó1õŗģ§©))U”˜ˆšÆŁ½\ƒ®ócĆ¢„ .ś¬‰W’ÅÓS"ˆ»°.ŪūƵ ØÄAXpķåļĝƃ(*q°÷°™üB6»ĀĻGGx؁ÄöŽīŁZ—ā”»C¹mh`7OćöaA5ŽōĻ<ĮS“Ć9|ŌĀń,åf×,1?­[˜h׼ܟóŪ†2|PGöØ =Ūųżmŗø%åÕĻSRrå,K”€BŌ”Æ~,dŚ,ĻäFÓ§{żĪŠŗtī½–Ļtzc¦e“ _o]­ÓßĻl c¼f‹"3ĒV9bYķ©Éጽ9ˆO–°a{ŽZ(*vąp*‚ōÄŘø.ч߯Bļn—öي 7Ņ:ÖäN|ł÷øKžżĖawTfĒV®­i’Ø ųičjˆZųé.¹3w©ō:ęĶ “»øx©Ēœīd¬ÉĒź< šķ\ {¹’!®Z“LJ2yü…-3Ø+Cū»Šś±j­oæwqųūŲéŃ® ”«$D½0i9D!ÄÕĆsg’+§'^lx‡Ņ1”yÄłĖ7BqÅ(*®n©–6ĪuÜ¢qŅėv‡kö…N§†~Ć9} Ģyå,›€RÕžŗpUµüOˆó»}PmZ:‰nߚА+g]Ī•SS!„BˆK4°[.šżzÜ;Œˆ†įŚŅćā2‹®Ø¼:šP7ßćÓĻ£—ž‘øz¢gg ёWÖG®ŗBˆs2œ¶|Žīø².p¢ažy1ŌQķ“ż³J:qāĀ”Į£5tAsw‹¦$$XĆŪ Ģ(.3‘–ćKĖęuŸ}]\]ŹĶzR2ŖsD5ƛ{@ū¶z† 2p"£œį½³źäœ¢éЌuŸL±¾Ik^qNAA՗‰“²åø0›ŽcŠ~PPŻ4Ōb£«Ļh©“sЦCÓĖ5¬104;WA-YŪ‡Szāܖ®oÅęj“DEźhQ7ŻMƒ»Ę˜xüa=QaurNqõū~c4/Ō…Mɗ–8ø!I@qNń­uīuvG2ȑ €ø[ö‡ŗ³®ĒDéšń®›Ę}æ^&ßgā”±9to+ Ņ)7Č)šBó j誈JƇÜ[Ł„dśóÆ„ äK^QS…EĻē+[ńkR3÷±‘Ćź~³f @ēIq™‘#™ž2ĖLŌŹf×±dm ¾ŪMv¾7ßžxå}Nd €āœ‚5Ś%č9x؁Si|üC{Æßn’nqeÉĢõį›õ±īŸ{_[wŪ0j\ŪƖ'Óėģ¼āź•uʇ··§Üląī;L\?°”kt5ŗųń¤˜(· 7ņķ÷6’1ūĆDācJ 4×a‚7q%+,5r$#‹­ś>r]Oƒė>Pʽāyå“(Ź*ō4 ²Š„M!±ōź˜‡^W"šŲ ?Ždø“XśŁ¹¶}>½Ó]&ć¤/ÓqTņ÷¶sM‡¼ŒÕķ§ģ|ö tĻ€ńõrrMū<6Ö©"/’R‚±UÕ½Nz¶ĻĒßĒī.SXjb×į¬vW“Aѽm>Įž6w™’r;…ŗgQõŠ® …³éŹĶ¶ ”Āźz½õ:E—6E41»Ė˜­z¶”ĢbØ,Z^={Āf×±ķ`(%å®2: ŚĘ–Yę.ćT[“C)*3ŗĖ“Ž*%>¦Ō]F)‡BČ« j@‹ęåthY|ZŲ“LN·ūXL33[rŗżĒ‚ČČ­ŽĀ3"ŲB·„kĶ”ō@Žgūŗ“A†XéŁ>ŸŖÕ‡E„FŽZ܁ÜĀźĮ°Nķ/¶óŪmM}6Bœ×˜ŃFžś¶§ŽgūńśēŻ?ƒ.mŠ0œē?hJŹlŽĘ›¢0W6BC4®XŪ™yćōå§Õ,6=ŗęŅ,H–ˆjJĮęäf,Yӂ ‹ėó˜zÜ)€ś ]ŚĢ°įCXmšćJJŻ”q0-­TEķ®ķa`āŻĘz •–i”Uø®§Š¼X»³9yE^Œī— @N7o.ģXc‹ō_Ę I\Å׿čP#wŅ”ōīypu¤ßų¢ƒūśTeOJÓĘ\߉7¾ččīHWŁ’ƌ ÉīŸē-nļŃ)X·+œŲėžłŻ„mIĖń\Æžæ­‘¼śŠtšėłą»6$ō(óƦh^}h;pńłŠ8¶ōÜbŁdˆį„É{šu¾ś¹ėw{N×iŠŲGx°+˜šŻÆŃüø9Ź£Œ¦ĮĢßķ§E„+'ČźĶłśēXĪōč銲€Mū›ńéO­j”ypt =+· Ž“Ģüoj”™0ō8ŗęp$3€æ/iwʶ_āÅMם`’ń`×¹K'=wßy‘3—4ļó—©g¢©Ń.žkßŖ„Žń·›Xųµ€œ/ž³</‡ŒŌøW!M»“„š·4ұžo淒rTŹ¢vĶ#4FßlāŚśzms4Š1~Œ‰e?ŲØ0W÷m^1čbā°:8•½ĘļVč#ŃÅø:«öS ‡ÓV£ŒEŽ.ĘÕéu–‚Õn­QĘL0ŗ˜~•O¬°ŚkžĒģōw—Q *j9O…ݧś<€ÅićĢ­v#DöEWyi¬P5ĖŲzœ½ŃłV>·V[ G³kхøŽ³Žx~ŸJĆŅ]e.³ŃxĪ&U ,]ŃÅøī5椚ē°ųuv—±¤8šļ‡Å·}u™µ—1{·AÓÖU¦Č‰Ŗå}5[ ‹i ht ҽŪBI™bÄP#C.śóØiē/TĻ$ DSs‰‘Ēėšö†/–X±œvŸ93r-@DøŽ‡ī7]©fBC\ł)Ŗ¢õ§Š¼8UäE»x}»ŗFÖo®1R‘–ćK‹'7ö.`[r›ö…Õ(£ē°{æ?æģ9#ŃO„Ēq×ͮуƒG}X³£yzśś“āŪs\ē=įUcÄ@Ū؊éw»:ŹyEF¾]_sÄò®O?ą*7ėY¼¦…ĒžŲEk[3«£kŹ©4>_ŃŹ‹”ʉ<zt­žłó•­Ü#^§’ż×vsbŠ»^ÜÅk[r2ß³C|<Ū—k»9šóq5ξ^Ʊ,ļ3ŹųŃ3ŃNxˆ«QõķĘ(¤łžń\~tķh'.ŚHłaKūœQʗĪķtlć ’¬ų¹I)A5Ź“kćäŚĪ„hšŽBKõūØńš÷yŌš9!€¦‹Ąµ ąŅ:šķt<õ˜7łNŅ2%„²»pńõшŽŌˆś ·Y»až}ō$t’‘éÄhŌø~ ­² ­ā`ҽ:§TŽ}}aŲ“»LD<ü€ĘžN÷=ŹŪ[ćĘĮ÷n6šūÉ»’ī2& ht—ńņ‚éėŲ¶Ć5 Ą`„A} h•I44ąŃ‡tüŗÅ޳²?­7@ßėŖĖ<£LūPōį„ū*Ģ €Ö čĆ] ®‚ƒ!,“‚¼ü3Ėų£OĄĻ ‘ĶĶ€Öm|Üeō@ĖfRQ¦µÉ]Ęõ³™½ū=Ė“l”Ē+²‹ūēV­-œĢ÷©‰l®Ē?¶³;‘[ėDz<_ ŠVŠ›\Ÿ…6mmģOń, ‘Š}åäŠ6ķģlŻē9šåć ŃķŚ Æ]jÓŽĪśVėÉ-:Ĺßū‘£Įa° 1dįāQ^ʵ²Éьhś”ćņņr„†č ©£: q¼LŻõtO¬}£×5z]sīstO4Š=ńÜe:uŠÓ©Ć¹RڶŃӶ͹ĖĵŠ×āÜSŃ£#5īsī2įĶ4Ɵ§LH°ĘŲ[Ļ=C* @cĢčs—ńõŃøuĹĖx™4FŻ|ī2ƒĘĶ7ž»K«Ó¹;ē¢i0Ø_żv5}›z=’…Ņ”’ę»M‰rd`+S'ēr:ń˜"'š.MsŻĢŠŁłŠ?WĆćtyłŠÜSÕ܈p”!že 9'«Ė„…źoęY¦øX‘uZ‡;8HGäūP—”*2³ŖĖhÄDyŽ\••+2³Īʤ~~±Ń:i„f ¤„Wųx{kĵš,cµĮ±4'N‡ė<&“j©ē“ģv8šęĄQ9«Ń`€Öqzō§µ%8z܁½²ŒŽ­Zč1žÖęr:įXškeæ\§×hÕRē±¼C)8žīt étŠ"¶ęé™NŹŹŖGŽbctųłz–É<įō’ÄDėš÷,“ćōŠŽŌXwŸA©?Ÿ uv¾«Ćü-ˊ†®†B4ZŸ{Š™śæ`=“€MŽkńLP²×­BœĮ÷~tĘkŗW å8­ōՆ®†B4RzLÆęwž¢õģ·[P#„h$tč ŗBшéŃ:6t%®(š> ĶP3˶BŠ™z5ŠĪ?H@ˆ&IgźŻŠUBˆFKgģÜhjW½×ˆ†®‚B4Bzō^75t%Ü$ D¤3t@Ó×Ģ2.„ō¦ŗ W$”=:c÷†®†B4*zÆ!hŗšóüH@ˆ&ICļ5Ŗ”+!„ŽĪŠĶßŠÕøbé}īBӂĪ_P!šM…ŽkdCWƃ„h¢tĘDtĘóģO#„M‰fBļ3®”kqEÓ“ ¾÷#;M !š<ĶƒļdŠĪ½µāoMB4aŸß”邺BŃ(¼Ē£éš5t5®xš”meąÜ{— !ÄUKóĘč÷š®yCפ єiž|§‚ęÓŠ5Bˆ„7 BgźÓŠÕøj茯1ų=šwCWE!~Sš.£ßŠōmŗ*µŅ”RŖ”+!„hXŹ~[ł’UŃŠUBˆßœĪ4ƒĻx@kčŖ\u”3{łG(Ēń†®ŠBŌ;”3zß{Ń“€†®ŹYI@€rdb/’7ŹyŖ”«"„æzļ[Ń{ mčŠ\åœ8­p˜D©¢†®ŒBŌ9MŽŽūVtĘ ]•ó’€¢š2c7ÓŗKƒāź„é£0ųLh“S4ÆN6œÖm8l[PöĄŁŠBˆĖ GgčˆĪŌ±WŹźz !jPŽć8Ģ?ą“ļCBˆ«‰¦ Eļ5 ©’¤®© œŽ”# åĢUŽÜo„›Mó]š>¾u£Ėš!$ „8+å<…Ó¶§-¹rż¦£”«$„MӅ”Ś”3ö@g衕2J#„BŌ5 !.åĢE9‹*Gj„¢ӌhšš.4憮BŃ(H@!„B!„hdœB!„BŃH@!„B!„h$ „B!„B4B!„B!š !„B!„M€„B!„Bˆ&@B!„B!D !„B!„¢ €B!„BŃH@!„B!„h$ „B!„B4B!„B!š !„B!„M€„B!„Bˆ&@B!„B!D !„B!„¢ €B!„BŃH@!„B!„h$ „B!„B4B!„B!š !„B!„M€„B!„Bˆ&@B!„B!D !„B!„¢ €B!„BŃH@!„B!„h$ „B!„B4B!„B!š !„B!„M€„B!„Bˆ&@B!„B!D !„B!„¢ €ā¼ģv;_}õ³fĶbƌ|ōŃGTTTŌĖsšĮŌ˹k£”ā“O>¹äß’č£j=–——wµBˆ«Ūāŋ4h¤’žÜqĒdeeÕĖs}śé§¼śź«õrīŚ¬[·Ž7Žxć’~w÷īŻ¼šĀ Ē čßææū篾śź²źwµ())ᔇbšąĮ\{ķµōļßæÖ{r]éŪ·/………õvž3Żu×]—Ü֚2e ŁŁŁĒ^yå>’üs’““IOOæģ:Š+“„ēõä“O²|łrČøqć8|ų0cĒŽmčjÕ §ÓÉ?’łĻKžżüćē|üę›o&''ē’Ļ/„W›ĀĀBž{ī9/^ĢśõėŁ°a£Fā™gžq—)..&==‡ĆøŃqüųq÷ńŖĒŅŅŅ(--u+))Įb±žžĪm·ŻĘŌ©SWŠ7++‹ŌŌTģv{­õ³Z­;vŒĢĢLćEEE¤¦¦RTTäq<''‡””Ģf3åååPPP@FF†GY»ŻĪńćĒ)++ó8žŸŸOff&f³™S§Ny<ĢĀ… q80{öl Üõ7›Ķ=z«ÕźžKKK©ØØp’ v»cĒŽy¼nWŗæżķo„……±vķZ¶mŪĘ÷ßĻ믿Α#GÜeNž<é~_JKKQJqāÄ ŹĖĖ=Īg6›9yņ¤ūg«ÕŠÅb”øø˜ŅŅR/^LPPū±ōōōsŹŹŹ8zō(‹ÅćxNNNvŻn'++‹ÜÜ\÷±¬¬,w]«ŽŪ*e«dggc³ŁČÉÉ©ńłž6m·Ür eee|žłē¬\¹’’’÷慅…{<‡Żn'??›Ķø¾W§ĻĕɩŠB4nN§“oæż–C‡a2™čŻ»7#GŽÄf³‘ŸŸĻ¬Y³HII!&&†ĒœīŻ»óŌSO°k×.:uźÄœ9sšńńažüł|÷Żwčõznøį}ōQęϟOnn.6lą_’śiiilß¾¹sē’——G\\łĖ_h޼¹Gż,XĄ¢E‹0›Ķ 8?’łĻ(„xžłēٽ{7^^^Üwß}Œ3†ŌŌTfĻžMFFįįį̚5‹¶mŪb6›yā‰'Ų·o={ödöģŁ˜L&Žyē~śé'L&Ɔ ć‘G!77—ēŸžŒŒ zõź…Óé¬ńš„§§c0x蔇ؽ{7S¦Lįž{īį¶Ūnćå—_fēĪsß}÷1bÄž}öYĀĀĀX¹r%¤U«V,X°€ŲŲXęĪKhhh=æĖBńŪłõ×_:t(‘‘‘īcćĒ§Y³f<õŌSģßæŸččh¶nŻŹ?’łOÓ¦M£K—.čõzRSSY·n{öģį÷æ’=]»v%++‹ŲŲXęϟOŸ>}gĄ€$&&rųšaž}öYFŽIXX>>>ģŚµ‹%K–ŠŖU+w=RSS7n={ö¤¬¬ŒĀĀB–/_Ī·ß~Ė[o½E=HIIaĈüž÷ægņäÉäååζmŪxļ½÷ųę›o8vģ6›ģģlÖ®]˦M›xā‰'茵+ééét芁yóę1kÖ,6nÜH||<{÷ī„K—.5^³Ń£G³lŁ2f̘Azz:?ü0/¾ų"[¶lįƒ> S§NģŽ½›‡zˆ;ÄÄD† BYYf³///‚‚‚Ų±cæüņ õū&’V¬XĮ_|¦ińī»ļāååÅŃ£GłŻļ~GBBłłłųūū³pįBīøćüüüšóó#))‰ēž{ŽńćĒóč£räČ"""HJJā“O>a×®]¼öŚkÄÅÅńÜsĻ1mŚ4öģŁĆŖU«ųӟžDbb"ĒŽcŠ A̚5Ė£nƼņ +V¬ mŪ¶ģܹ“¹sērć72zōhüżż ąšįĆ,_¾œōōtī»ļ>:wīLAA!!!|üńĒLœ8___÷9FŔ)S8qā”””ģŻ»—… Ą­·ŽJēĪÉĻĻ'))©ĘėõĪ;ļŠ¾}{²²²ųę›oš÷÷ēčѣ̜9“1cĘø?žų#³fĶ"))‰ššpvķŚÅĄ),,$%%…ūļæßTW %„ēPPP ŗwļ®”RŹétŖüü|÷?‡Ć”ʏÆV®\©”Rj÷īŻjąĄJ)„üżżÕöķŪ•ĶfS3fĢPļæ’¾Z³fśŻļ~§***Tyy¹5j”ڶm›š2eŠzśé§UYY™ŹĖĖSƒVJ)Õ£Guųša„”RK—.U'NōØ[JJŠ0`€*))Qv»]MŸ>]}ņÉ'jåŹ•jöģŁŹn·«ŠŠ uķµ×*„”5j”Z·nRJ©={öØ~żś)»Ż®üüüŌžżū•ÕjUS§NUŸ}ö™śžūļÕ¤I“”ŁlV„„„j芔j’žżź‘GQ .TJ)µ|łr•Pć5:tØŹĪĪV………jȐ!źąĮƒŖ¼¼\½ņŹ+źķ·ßVv»]8qBuéŅEY­VuŻuשU«V)«ÕŖ†®^xįåt:ÕĖ/æ¬^żõ:~G…¢a}öŁgź¹ēžSJ)µoß>5gĪ5gĪõžūļ«‚‚5dČwŁ7ŖÉ“'«µk×Ŗ»ļ¾Ū}üŽ{ļU»wļV÷ŻwŸJJJrļŻ»·*++SķŚµSÅÅÅJ)„.\Ø^~łeµaĆõĄøĖ.Y²D}žłēu{ńÅŻ×x„”zņÉ'UjjŖZ¼x±:qā„RJ©ģģluÓM7©œœ5hŠ wŁĶ›7«¹sēŖ~ųĮćyƌ£8 Ę§Ž9ā>Ž£Ge±XTbb¢Ēk3uźT:9NÕµkW÷ĻU÷d„”źÕ«—²ŁlJ)„JJJTŸ>}TAAŗęškÜeڶm« •RJ=ųąƒź—_~QWƒĪ;«ņņr„”R‹-RóēĻWóēĻWGŽQĻ>ū¬śį‡ÜeGŽ©ŅŅŅŌ°aĆŌĪ;•RJ„¦¦Ŗ[n¹E„§§«[n¹Å]vłņåjęĢ™jĮ‚ź‰'žpÆzŸF­:¤”r½7cĒŽõؗĆįP:uRN§S)„Ō”C‡ŌÓO?­Š‹‹Õ‡~č.÷Ųc©uėÖ©Ē\}’ż÷īć“'OVyyyjĄ€īēIJJRćʍS‡VćĒw—żņĖ/ÕģŁ³Õ›o¾©žóŸ’øwģŲQ„§§{Ōė„—^R‹-RJ)õŹ+Æø’æpįB5gĪw¹?żéOjٲejƌꫯ¾r—™6mšRJ©ĢĢLļØøņČ !Ä99N¼½½×ōĒńćǰuėV}8pą%%%ŲķvŽ~ūm÷¹“““7n¾¾¾ī©z‹“ÉDBBą}‰8 IDATżčŌ©“GŻöļßĻõ×_ææ?³gĻĘjµBFFĻ=÷6›C‡įp8ČĢĢdąĄ$&&ņžūļо}{:vģ@æ~żČÉÉįųńćX­VęĶ›ē~¾ääd’’’ųŪßžĄØQ£˜9sęY_»   ŒF#AAAųųų°sēNÜkC«ź0xš`ōz=Żŗu£’žhšF÷īŻŁŗuėæWBq%pOE÷÷÷§M›6”••1oŽ< DJJŠū^c·ŪiÓ¦ €ĒŒĢf3ŁŁŁ<’üóFL&eeeīQÖӝ>>x{{3tčPwł>}śø8§ÓéttķŚÕ]¾jŗūŗuėÜ7Ź*š¦”×ė=~ĪĢ̤]»vĒNžŠŠ Š‹‹łč£(//gҤIųųų°eĖ ĻK^ÕłNp­ŸŌétōčуĮƒ0`Ąāććyė­·PJ¹Ė]ĢMP§Ó1hŠ w­oß¾DDDŌų»…ājĒ;ļ¼@Ė–-iٲ%»vķ"22’ąą`Y¼x1ąźømÜøØżśĢ_’śWwĒž‹/¾pwvk+[u?X»v-¹¹¹Œ7Ī},$$„üü|÷Ļo¾ł&cƌįķ·ßfƆ ˜L&ņņņ?~¼ĒżąšįĆ|÷ŻwtčŠį¬u}÷ŻwŻ×ż ī±ūĢÄmµ9}\\œūµRJ¹§Ž7qqqģŁ³‡¾}ūróĶ7šõ×_APP<ņ½{÷`õźÕµvęĮÕ¹ķׯŸ;!pvv6)))=z“ÖņAAAĄōéÓłūß’īnx¬„/((ąĶ7ߤwļŽÄÄÄšŚkÆ®üJąś\œžKą„—^ā‘G9k]Ææžz÷R“ŒŒ 233Y¹r„Ē9jĖp:MÓ<‚'“&M┇\‰(żżżŻm'qõ‘€āœ4M£}ūö¼žśėÜyēFÖ¬Yƒææ?“mŪ–ĢĢLnøįŽ?ĪōéÓŻµ3õģŁ“üć<ųąƒxyy1uźT¦M›VkY“É„ŻngĖ–-“k׎•+WņĆ?0dČw™ÄÄD^}õU&MšD@@sęĢaĄ€”””@ėÖ­INNfļŽ½8Z“hĮ’ū_ ÄĮƒ™3gŽĒłĪ¬ė‚ ˜8q"z½žI“&ńüóĻÓ³gO>ūģ3&L˜Ą7ß|ćNŒs6^^^ģŪ·zöģÉŽ½{éßæ?%%%Üzė­5Ņ#„Wƒ®]»āėėĖčŃ£éÕ«ååå,_¾œ7ß|“ššp|||xüńĒiÕŖ«V­bĀ„ gķŌOœ8‘|#FPPPĄ¦M›˜0aB­eūöķĖĢ™3łóŸ’L`` _~ł„{&X•qćĘ1eŹ’’’(//ē‡~`śōé“k׎gžy†ųųx~žłgĢf3±±±(„ųć’Htt4Ė—/gƌgż»’ļ’ž‰'rÓM7‘——Ē®]»˜8q"=zō`Ś“i$$$°téR‘ÜŚŲl6^zé%ʎ˰aĆø÷Ž{¹ęškŲæ?”””Ü~ūķēy®>ś(÷Żwćʍ#88˜••Eß¾}Ńėõ<żōӌ;»ŻĪĀ… Yæ~}­ē©jǼšĀ ÄĘƲtéR~ųį³>ļ„ ø’žū>|8YYYdeey FFųĆž@§Nų駟øį†hÓ¦ ƽöļ½÷„„„|óĶ7\żõŒ7Ž3f0~üxJKKłžūļłóŸ’\ės'&&’œœĢģŁ³‰ŒŒdɒ%̘1ƒŪoæI“&‘““CZZ)))ē|ķbbbųšĆq8Œ1‚[n¹…’’¼½½łųćY“hѼāJ„©Ŗ”,!„8‹ĀĀBŽ~ūmłäž÷æ’Q^^ĪšįĆy蔇˜?>Ɔ £M›6”––ņĘo0kÖ,8Ą¼yóČĪĪv'į9sÄ|ٲe,^¼˜’’śöķĖSO=Å©S§xńÅÉĪΦ}ūöx{{3}śt¬V+Ææž:G%""‚§žzŠųųxž{ī9žņ—æ°~żzŠŠŠ=z4’łĻXµj‹…Ń£GóĄP\\Ģ«Æ¾Jjj* //—^zÉ£N/æü2=öAAAl޼™yóęŃ«W/yäęĶ›ĒöķŪńņņā`芔<óĢ3¼śź«čt:>’üsŗtéB×®]ٱcGŽqOõBˆ«Irr2GÅĖĖ‹nŻŗ¹“*„Ų¶m¹¹¹ÄĒĒÓ¾}{ ČĶĶuĻ;pąŃŃŃ’‘‘Į޽{ńõõ„oß¾F6oŽģżĶÉÉ”¼¼œÖ­[c6›Łŗu+%%%ōčŃƒØØØõ:yņ$»vķBÆ×ÓÆ_?|||°Z­lÜø›ĶF·nŻ8zō(½zõĀįp°eĖ hß¾=ńńńäååQPPą^¶oß>āāāš÷÷'--ĶīŪ·/ƒ§ÓÉöķŪ)++£K—.œ:uŠ:xŌiÓ¦Mīv§NbóęĶōčуččhöķŪĒńćĒi޼9×\s v»={öø§qoٲ…^½zpšąAš7oīžŚ}„ĖĶĶeĻž=äēēEŸ>}ܳż222Ų¹s§{ö]@@;vģ 11£ŃˆĶf#))‰ž={b³Łųå—_ČĖĖ£K—.t芁ģģl,‹{vÉéļĮ¾}ū8t聁 4Ƚ„ŠÓédƆ dgg“@=×ėægĻbbbˆŽŽĘd2Mjj*IIIFŒŸŸŪ¶m£GčõzĢf3¤[·nX,6lŲ@AA‰‰‰īļDFF;vģ ..ƒĮ@BB^^^ī:=z___š7oŽRŠ_~ł…’’FŽéžY,z÷īMTT‡&,,ŒŠŠPņņņ(,,$>>‡ĆĮ®]»øęškźżżõCB!„B!DPs‘®B!„B!®:B!„B!šI(„Ø•Ż©Č,pPPīĄjo茈ŗ¤ÓĄ×¤l ŲWāĄBˆśg±+’OXIĖ·SbVŲ²õjbŠkzk“ 5Ņ1ʈÉP?;ڜ,qp(ĒĘÉbV»|†®6&ƒFx€ž¶ĶDźĻ’ ā’H!D I™Vv·`‘›ėU/:ŲĄ€o !źMZ¾5*äžŅDx5†“÷”EhŻ3:œ°žp‡rνóŽøzćÜĪƒ^¶G®kBxX} ‚#'åŪ”˜ōĆ}%Ś.„Øsiłv~ŚWŽ“6›Mƒ]|‰ ¹ü €RšÓ¾rŅņe:bSl`d¢/:‰Ō)ņBøķJ·Hēæ ²:+ö•c¶I ]Qw¬ÅŚƒŅło‚”‚5+°ÕĮR}YVéü7QY…vödXŗWÉ „\ė3w¦YkWʉµ¼œĪؕØsš†—_0hžńß ›bwŗ…Žm¼ØbBˆ«ĶĮl[Ą¢­¢„¼c»°–6P­D]Óé ųG“&8¦ƒĒń «āPŽĪѦĖ:’m“’œTŠsRqŲ*.ėÜ¢ńšhFH‹.}<ŽļN·Ņ5ÖKfŌ! !HϷ׈Ōēü•ć[æÅi—čėÕDÓiŁc$Q]†xOɵӻMUJqÕI?cŌÖ\t’¤ļ’Žņ ’hŅ¢æh3j’:ĀŪō¤Mßq„ēŪ/+Wę Ģā9‘¾ć{²ö­A ‰ŻåDć”Kęų¶åt1ߐ(÷q‹]q²ŲAd,S¬+B®›ģéJrR9¶åkč0-“čärqUpŚ”ši;?Ć'$’ą˜Žī‡J-N¬vUoŁ›…MKé·ć;¾ĒÜŚßåZ$.® P幜Ü>Čöżń v?vęgąb•š=&,„łd&­Dėń{T@ģe[4.J)8ü5Ƕ-£Ó°‡<+±8‰DuEr!jlõW˜¹­YhÖE:’WB;@óžäOŖń°Y²t !źˆćŒ¾_Y~*¬“tžÆBšo8:æŹņ3<ŽŪ/sõ ŻéyO*ĖĖ@ē Ņłæśh4K¤,/½ĘC²mhŻ’€¢VvK9N½OCWCŌ£6KyĶćrBŌ„ 5®QSļĻ“w< §½fŅ!KY!’ūŪ=õžüB!~{VqdƗõž<[ĶŖõx~Ś^Žmżo½?æØ_?ϟZļĻ‘¶ćGrm®õ±]ßž­AYāŹŅųBhBqŹį ('µöĒ”§ĶŠŽtqYģmę2ō#:Cu"”m_¾Ģ ‡ŽĮ'0Ü}Ģa³`ōņ„ß’żµĘļ¼|ŠNĖŖļtŲ°™Ė0zūc)ĶGoōĀätQõBńŪŹO߇­¢”ęķzS”}„ÉŠ4ęķzŻž”_—ßw,hełY”œ(§ƒō=+)=•—oFo4ŽŻojØWJ4 ™ „ø"ķ^ö›æx€ß¼ĪsDzö½‡Yžņ 2²uŃlR6}@Y~&Ė_åńū»••æÕ’|€ÕļNfż{q:ģ¬yw §ŽķfĶ;“9“žs¶.šĶņ—G°ā­{(+8ĮŹ·ļ`ŁKĆYóī~ž?•„Ļ āā ģłīļ|’—ŪŁšĮ|’Ś-¬}o*֊’ßš•Bq±ņÓö²éÓg ŠjKÉÉc¬’1|‚"š cķæ¦,?“ō=+9™² €ƒ?Ji~¦Ē9R7/%å×/ ‰ķšĘźNBÓé1ł£i:L~ĮčōFv.ż+‡×OP™9¶mvKkŽBńÉcFƳuŃlNŪĆjfõ;āEpT[’Wž‡ Ø¶ ń‰ °ł‹ē)/ĢĮäÄÖÅ³ÉŚ’3ŽAįdÜČĘĻ Ó›Ų²p6N»•­‹^Ātʶw«ž1 »„æŠ(v}ū&I«ké;’‡X 6s)Ū–¼JDŪ^õ’‚ˆFIf!®8ūWüsI½'¼Œ¹$ŸœC›ń§„d$­ęšś/č0ä>6}öń}ĘrlŪw$ōóÜšØ #æhśNœ@ŹÆK°–3dŚæłéńī[Ķ¦Żą{i7čw’Ÿ½ūÆ£8?žŻŻÓū‘ŽtŌ‹‹Ü»{ĆÓ!&ŌKK —@’›„ü.©$¤Ią&! BH#@€˜z7ą^q‘å^ŌūŃŃéu÷÷DZe IĖ’ f>ĻćēA»«ŁõāŻ™yē“cę6jjš©W|{N)­6³kłßČ9›C_ä’ļæ’D łŪ^|[¶HV$‚šqÕŁø—ŗmoqö—’ŒÉžÅ” ĻS0zÖĆŁģ½3hŽ»žóÆcßŖ§É6śķo3īüeŻĪ ś0;s±yJČ«˜Aį˜łĢʧ]ĀÖēIł“K2J³nü9²¢ļÖøĖ*Řs3 ¶P[-µUŲsJћl䟆¢7Ұs%F[Ö©¹1Ā Łüģ}˜^ʝ’%ŖVrö— »d,ožśŽrdE!Ō^‡æ~ÅĪA’»ēÅHʂd•ŒÅį-Ē;|:ššĘ䚊zą}¬Ł”N>Ÿŗķo3dĘRFŸsszŒ9÷æ)™t’łĮ"bĮv¼Ó)戈æ™}«Ÿīu |ŗˆA>QB­µģ~÷\öćå ID;› ¶V³üw·JĘpä–ćšASÓD;[ØŻś: o{¤ŪyÜ#ˆŚx큫PtF<å0X½–ió”ōŗŻ~x»Įā$ˆ”¦“,^łŁRĢĪ\‚­ÕLøųkxõ‚ Ā@‹ŚŠ›­]#±©D_mj: €Ždő[ާl›–ŻƒÆvμ”čMÖnē±ązöÆł{W„ĶSŒ'aā%ß źĶGI%¢ I”M½ˆUż“—öLH[õƟČ5›Š¹™d±/üč<Ņ©ŠĪŠļ ķŠĪHóŽõd—GVōÄC>üūpŽč’ N’$ęń!Žśõ (z#ފéX\^&\üuō&j:Éŗ'2īŅIēńźżW"Ė ī¢QŻĪ“NÄØzóQęŽükw­¢vĖ;I–ūżÅC>R±0:“ƒÕ‰æq/Ž3ŗå/>=D€ Ÿ8#ŽČ–ē`ĆÓ?bŚ•ß'ŚŁĀ¶—2”ö՛_”xĀbJ§\ĄŚ'¾ĒĢ~Öćj:ĮŹGæĘČEŸCVōųėwćøą+˜¹T¾ś‡®ŗJg²b:š™Œ©Łü*«’v'—ü൓¼bAa0Č:ŠŽHŁŌ‹ˆ‡|¬ņ.Īŗś‡To|‰W~9‰ņ1ļæ2c)•Æ=LĮØ9=ĪU8v>k’.Š¢'•Œ“?j6Źį³Łećyń'0éŅ’E̜oYѣ̀„Žx4¢@ŃQtFŚk*9ėšR2q j:EŪ”­lxźnνćÉA¼+‰қķč fÜžo’öff\w.ž:ÆŻz£…d<Āȅ7™g.«h46Oqó(‹“—ļ» ĮL"ŅÉĢė3ß0ފ¬|ōk4T¾KÅüėŗEčLV@g0#+G›wz³ 5fń×E’¢-lxśĒø *ŗM Ÿ.’¦õc˜K„3Ί½1v6]śīąš§ijHĆ/;µź.JŠv`3ފ@&{®·b:ŠĪHƎw‰ŪqT;t ńPõ»X÷Ä÷øč®Wŗ>ĀŽj«„eßRÉŽįÓqę 2÷Śmof@YŻXœ¹˜Š4ź«Ž£pĢ|v¼GĮ˜y™ćc!:źw£7ZŲšō»ä6Œ63›žu—žč­_/ū”×qŃΈ…7uŪ|õ4óǬ®‚ |"=¹>D0vtMļM’ś1ÉŅ ‘JŹlܹ‚’ś)NļPd½‘`óAJ&ŸĒ˜s{†ŽŸnņ–ßQ2f&ފ£J‡Yęźi¶~Ÿsk’·vF»~n?“…^Fś“Ŗė©¤ij×7@:cżS? yļĪ’ę2ŒVwßæ§¦{ä8Žöćyė77!ė X\y$Ā~ü {8ē«ĒģĢ=±‹lžżČ»gŚ5?ķ¶yīp£ņ{~Ē ż#"AųÄPt†®Ę?Š5ŅōXŹ&l£¾r9sožuƍ›§ø×x½ŁĪéŸéł ’Dį˜ł] “ ičʝ;M»×’NĘ0ZŻ,øķį_ć_A8aÅ“?z.—÷”•™?j.~ēE"ž&4UÅāņö9÷[ųx:ö@Ö½ų L½āū=rHōų½>ł'ŚųXō•æń7ūŃĢŲ² ūuįĢ :Ačƒ¤?ō؏+gžp¦\žS^nžØ¹äš{ŹĖ=Qš¦"+¢cB„SGV Héćų1e°81Xœ§¼\YŃ}"V“ŃŅqŻąvN(:Ś'ų’$gްÓR¶Åå=„Wż’N ÷1h# ńõ'BÆLĪ\ä`-hź‡,|²hrąŠĒ/ōO„3š«`8Rć“dätWE`Zė6“h;ļA-Ēź)FK†ŃZ¶ j9Āi &”a5ŽÓŌAņi""AčUīšé4īx—Ō¶‡Q] ‰P±3„ŠäߏkĒ;bö鮎 Ÿ"%“/ ģū”5?A2;Ad”:#héR:ΐYWaäµåõ&;Cg_ĶžU’D:ų²ų69ƒh‰&GeSÆ;ŻU9ć‰Az„čMŒæä4V½Kؽ5•<ŻU€$+؊ĖČuC·LŌ‚ ƒMћ{Ž—ˆų‰ŚŠD„ŁAћ°yJŠ-~šš ™‚3æ‚p{-éŌ'w:€ŠĮāÄę)¹ NŃ BŸtF+œ.8ŻÕAĪ’„Å]€Å]pŗk"|‚éĶv\E£Ow5įIäAAA„OŃ ‚ ‚ ‚ Ÿb € }ÓTš÷¬%jGg°P0nm6éØĒ]4³;ŸĘŹ·‘d…‚qēhÜC y?޼a8ó‡Sæõ 4M„`ģ"ĀõųėŖ°f“U:†ķo’NĘČ5d,DūĮ͘9ä ŸASÕ{$¢äŸ’DĖž5ĢņFϧußz¢Ķd•NÄhsŃTõ.²b `üb:j¶j«ĘU8 ›§„śmo€$Q8ī‚-él܃=·wńŲ| :j+‰ś›‘dļČ9„ŚŖ µĀ–SŠŻ;„¦+@M“;b6±@+ »1»ņp”y÷j҉(9ĆĻ"ŅQ³ƒÕgČdŚöo$é$»l"’¢Š¶:£…ÜŠ™ųŖ· “ā,…Ńę¦uĻ$YGŽØ¹t6ķ%ÜV‹Ż;kvĶ»Vą9‡ˆÆž@Ó~¬ŁE8ó+hڹUM’;|&‰ˆŻNL޲JĒÖ#‚p\ž†=ģ_õOŌd kį8¼S®ąąĖ?EK'(š{+ńĪZ·>)»”Ā9_ śĶ’#ö‘7ż:Š4šÖ?ŽŽšMÉ9_§~å#ÄŚ«É™p)gõ+žˆ¬3RvžwhŽų4į†J²Fž½xÕožI’(]ņM:væM灵8ŹĪĀ3ę<¼ņSPUŠż‘ʝ“W½Ž5o$yÓÆćŠ+÷’N„)˜s Ép­ļ/Ćč.¢hŽ©]žf ĪŗŠĀa>ŅõG;›Ł»ā ’±&W!Esn¢ę‡I„ŚČ›r9’¢£qżSčĶNJ}™ś5’ Ś^MĪŲ%˜ÜEŌ®ų3²NOł¹wвõE‚õ•d Ÿ£t 5o’Mƒ²s¾Œ’::¬ÅQ<œ±K8ųś/QÓ)ŠēŻB“ķ mUobÉBĮōk8ōĘÆIÅCNæ–T"BóūĻa“ēR<’ Ō®x”xgމ— 39hXū8²ĮBł¹_£qĆӄ›÷’;zE£g! ņ³s¬½+Ÿ¤³® MÓ(š1_ mŪ^Ąœ;œ‚™7Róę/I†}äϼ-¤iƓ^Š|łčs3ér ¶lźW<‚b“Rŗä›4o|ŠpC%Ł£—`-MĶ[") eēŽ‰oכtX‹sČL²FžĶ”×~ަŖ”,ś*”†J|UÆc+Gī”+©~õ>ŅÉ(…sn!j§åże˜²Ė(œsKę¹ ¶7ķZ$Y”qŻcč­ŁŒ½čėčävė¶¾AėMØég]…¦¦hÜø £ŻCńü’¦~ĶcDŪkšN¼½5›śÕGћ)]üUZŽŽ`CžQgcĶIķ»ƒ¬P¶č+ųö®Ä`®ņid˜Ļ”75Mń‚[ 7ī¢mēŪŲņGįü½ńkŌd”ĀYד wвåLī" gß@ķ»¶ĘōŪÆ IDAT’?õr$EOĆŗ¢·ø(=ūvÖ=I¤õ9ćĪĒģ.¢n埑=c/¼NĢ’?$MÓDVAX±7ĘĪĘīÉtü ūŽż;iƒIoArjć:“`rī8$[éÆ!É:ä” ¶V¢ł ¹‡!{F”ī4©| kQ[w Ł‹ó§eö„H„ @mŚ„dń ĻC=ųZ"ˆ\8$µn’ކ<ä\“ŗ•Øįdļ$$³õŠrPōČC/@kڌØAöŒFr–¢x ečh¾=ؾ=(īr<łeøåĪ‚ŠćŽ“x2Ķö—DÕYŃ#ʈ„h­•hķ;‘²* w"ŚžgŃŌ4Źš‹ŃµhĶ¹dźīgŃRQäņŐ£ÕÆ³yČŅū^BŠū‘Šę‚b@«~ ōVäŠĖP«—CØņ¦"YsQ÷撹Ē#/Gk܈ֱÉ3){źž’ æĶ·Śv€k(rĮ4Ō]ĖŠŌņŠó!ҊָŁ^@īČY8’Møz¹ž«§Łp˜Ep˜ 'ļÉõ!‚±£‰žŅ©;ėB„[€É FiÉ,fĶ5‰iE2ŲĄč‚h;Z*ŠdĶ@ 7!éĢ`Άø-B²ä‚¬ƒp#Čz°äB"€€)+s|ø ɖÉ0Z¬Éčƒ ĀĶ „3å§chŃv$ƒŒNˆ¶¢„āH¶PSh‘$½5S’˜-A²x1ÕæAAa!9ĆĪźó~hšĘžĘ퇶‚)+sķVoęßūdģE ÉØAәģEi†xl™wEē!$EŽRˆ¶C¬,9`tdŽæHą,‡D"­`ĪSVę÷“Tf_2 į¦Ģż·äB°R1p–fīC  V°ę£…‘’a°‚¤ƒ@5čŒ`/†h+Ä:Į–‡Ł_IŽM"ō¼n×ģ0Ė\=ĶÖļghk’·vF»mė'Ł·» UÕ@1€³-C 5 H–5džn„€†ØÉč-ą?²’¹ßńĪĢ=µä€ŃyųžŖą*Ļüż…»ī7Į:HĒĄQZ*sOÜļpSę¹u”Z É`E1X1x†Ńē܂¬3ōyO¢I•Ū·‘ND@1‚{ššYįƒœe¬Ķ<ćĪ! 3¢łv#)&pĖ”i{1’Ń™ł¦‘p€X;ZجłHftģFSÓHŁ#!D Ō€9ɖÖ±Ņ1¤¬N ł÷#Żą(ĪܛDĶ5I’Įætp A ÖȦä,½åpłw9–OQ1÷jtFk·kž;ÜÄØü¾ļ‰pbD€ @Ļ€ęŻ«©‹9I9ĪĄõXŪ«vż“©×üYé=Ŗ³a7‡Z¢Äœ£NqåN`lł=“Æųz³£Ū.Ń Ā@9¶@ÓT6<ł=“ ·eAg­~ęŽ-LøųŽ>ŁśĀ’+<ÜĆOaĶN ­uŗƒ/0õŖuŪ>Š-{ÖP½w;źčū}Ī-- ėĘšY—“UŅ{¤^gćömx•Ōø[OqåNMCŚü+JĘĪ!oäœn»DĄĄSAčUóŽõ$]‘ĪÄw†œįĒ]‚Ŗyļ:¢IŅ™Ų`/BŸ35:Ż5įSBM%Q$étWePHŽ)xŠKŽ{L"Ų–±>IŁ£qŪæYłPe栗sZH †Ń×`Ļ-źóXg ź)lq I æW~öé®ÉO ó‚Š+Włp 9måkjšd488'—u8§Üˆrœ;»wx&Ģ’ e™tF[Ö鮆 ŸŠŽHĮ9ßĢ„½Ÿ&mß§iןĮ9¹$£&cĒ=$ī­™Šł3‘¬ ̃^Lž˜™im§Q՛’N%>üĄžPōpœĮ‰ģņÉč+.œ²?$£Y†vš|ŒˆAzå*œ™GwšZńī#_“ó·¾ńCāĮö>÷g ®”V^*eßźgzlļØßͶ—~Óõ§źG¶VŠ“{ ž†ŻŻė½3¾šŹ“®OpŻļ ¶<éó‚ |$šF“©*ę|& ÖŠ¼ń©ć’ 4er šĶÆRłźzlßšŌŻkūj*AėžĶl}įWŻŽļØŪŦe÷œt]Ōź·hŖz÷¤Ļ#Ÿ˜ Bƽū'šL‡ÜIż>GGŻN-‡°ŗóÉ.O*”³qžņ‰4īZEވ™“ڊĪhÅß°WĮp\#°yŠ™té’™QŃJ4Њ$É䍘 d^Āa_ī¢ÓWŅ©xŸū«×<’ŠęõỷHÅĀģ|ėQ†Ķŗ¢Ūv_õvھOłōĖ€Ģ5½ś‹+øģGoS_ł®Ā \#ŗŽoڽ½ŁNVÉG_É 7Z¼“T<|RēAųØR‰(•/ Ķ›Iī×mß§ź?ūqdüE_Å_æ_m#ŽH˾ųj*É=—ƒė’CgĆ^± EćĪfԢϓŠGIĂ[±wåS„Śjp& 2yé·Ų³ā ܅#É2łÄ*§·£·?·Aė–ĆW&IŪHĘC™ĘčĂķĢøīž®we°µ†×øšĖļ[M¤£ Mķ>ĀélF;Ł)a:#:³YÜ,īķ‡ŽGkń³Ó5Meē›Ņ¼o“Ņ©R4īlÖ’ónĘ_šeL›–ŻĆˆ7ppŻsčĶv*ßĮäš0žĀ’Įę)&  čT¾ś{$YGóžµx+f7b&Ł„ćH'ćl|ęĒLæö''\?ÉäDo¶÷¹æ£z;©ƒ[aüĄMĻō×ļįƒ)įŌTEgä¼’ż¹o+’üu®“3‡°Æ¾Ūń©x„`kĶI×EŅ™OI$ɧˆ”WR‰ŲńśŁśĀƈv¶°ūĒXóŲ·Š-¬{ā{t6ķ£zó+ģ[õ4’$óĘÆ®gūĖæ%ŚŁŹšĒ¾MĶūÆłŲųÆĢĖó_]Ļ–’<@“³…Ź×ž@{õ6ö¼÷»Võ«~Y³nĒāŹļsæšN čHĶńø FP>ķʧ]ˆł×ćōéńrh–±WįČ;óQ ‚šń$ė ˜óFe2÷ƒšN²śow2yé·Xō?ÅģČaĒkć)ŸÄ¾UOl­fĆSwS8vńP{W<ĮŌ+ļbįķPæ}9-ū6l«„³q?ńpÖż› —|1‹æ@żŽwˆŚŲłę£½®ņ”¬^Š?jĶ”]žÉŠ™$y?łõ6ŠĪ’~fƒAdq€½ ßææwœ„} ̾é~Ę_ōU6>ż#’±0ފélZv/ U+¶TcĖ.¢yßz¾ęŽņ C¦†•žõ•ĖhŁ·‘X°™×߇3»ß}ģčž~ŽĆØ+š ™Ņē~£= Éźķ×¹O†$ÉŲ²‹PÕĮĶ$ ½ˆĀń‹µ AD‚Ї’¹7±«­’’DX÷,‹æö8’¬P~Ö„¼rßeH’ĢŒėīaŻß'ö±ųkO č ̹łWH’Œ·ā,*_ł}W”€ĮlgĮIĀ`¶³oÕ3d—ާfĖkœż„GūUæTøU-EVō½ī/šzžęS“h'ŅŁLŪ”­„} ÄĆ~ģ¹åƒ[ؚÄ"0‚ œ²¢#gę-Ōśś×€ūI§X÷å·×!+:ĪŗęǼrßgؘw-öÜ2¢6ņGĻڕi(O:_mŠžh¼‘³pęeFQ+ę^ĖžµĻR0z®ü ō¦~d­“Pæņe²–ō½`ĪŲßzj:–+_ł=ū×,MĆW·£+Āa°hÉĶ«ŸĀ»äæ3˾ ϐ)Rā¤ūž&\m·`“¹9xų9Ņ-š÷S:ł|ö®x’õOŽÅ’’÷t×ńĆē\Žl'oä,’üAó Ÿs fg.…c°yŁ½Ø©‡6¾Č˜sū—„?¹ļ:†»xLÆūŻÅc1HD“ƒ’ž4`Õ_’‰ˆų›»ä‹“gŠĀÉŅÖŅ®ŁČ.?Įį„ˆAzØ«­øßĖ5%"A6-»·ėē¼³pŽ$ŌV‹5»“=“„Ī`qv}0˜lY$>üOg“d²Ć…ćĪężēī'Ō^‡ĮāĄdļ_¶ŲĄ–§‰•”bÉź}$!ęo€Ø9³öņ ó×ļꩆēĢGnVń˜ć&(‘Ŗg 8—ā.>¹©‚ …šJP÷ņ`ź7ś I&{6ž² @&$Yg̜Ē_·“¬ā1tŌķ:¦Ą£-D ©Gwē±Ō!3–ņ毮'édčģ+č—D€˜Æöø‡Ō½õKvå)YqČĢ„]Ój·¾Iõę—)›zQļĄ|v)!Ś“ -BÄ÷Wcջ؍ķ0äĀ~ŸĆ–]„=§ €ÉŸłöÜ2ŌtŠX ƒÅIÄߌŁyäļč˜{#õ8Y!I2„S. zó+[«É.ׯŗiĮzbŠ{€Æz‰=;`ŲŅ~’D˜¹ŒXp=YÅcķćß%Üѐ©ē å@ŠՄōŃ0ČÄAzÕ±-ŖūżūfgÓÆł³oŗŸŁ7žåpV×ķ/=Ȉ×cuåSóž«@f<ĖĢGµ×óāķI’dŠ'.fõßīdčĢĻö»~ś¬2t&kŸū[÷®…öŖ~Ÿ’DŒžĒŌ+ībźw1’ÖßÓz`ńP:ƒ‰t²{ž‚d<‚nęĒɖō¦¾ē ‚ $MSQć!čg’8‹ĖK*Įš]HŽČ™D;[ØŽō± Ŗ7’ĂŪY¦nūŪ4T½GؽŽD¤“źĶƐÕLj*€Ždƙ?ŒźĶÆP0ŗŸy_lEäNśĢqI„Zђ‘ž’Y\yŲsJ±ē”R1÷š®ä±fG”¶£š¦l«Å乜\&7Yć/EäĪėT,xRIšÜE£‰ŪÉ1ļš³x’?÷“ŠGØzćM8‡Y7žœµ’ųv×2Į7¼@Ū”­]N}>÷Z6<õCJ&.éwżt%sqõż¬&Ā~“H[æĻ"ō&ž² xŹ&;l*cęį«­Āģšö5t;6ŲVŻļ™cÉŽId•ōÆóDųčD€ ½²Œ&ŖĻė÷ļ]ņE^łłR\ł„;Č5—`Ė!Ŗ7æĀÅß•XŠĒkæų,£ē”3˜yū·ŸĆģĢÅWSÉÜ[~sÜsŸs ;^{˜E_łKæė—5ėv –ŽĆ’l9eųcĪ]mWK§‰‡ż]?÷5Źo“ŗIĘĆäšĆŗ'ļ"wč¬YEš÷shĆ ,žś?Nŗ.¶©·`ĖéūśA’¢7į{-R’ęĄĖ:3Ææ—m/žšh gŽP&]öæŌo_Īä„™3Ó®ø‹]Ė’Fɤóš”Oäż’œxŲOɤ%䛊šJ`“¹0ZŻxŹĘw;ī°ičMVd„ŸŸĘ²½éų  ¼é7Š(õ½Ę{4ļŻĄ¶—޾3‹ĘŸŻćÅ`źźd³äVV<śUJ§\ˆĮl§”ź=ʦ\ŲæiĒ’̹ƒætnīˆŁ4™‚ōsó’‹m/žš7¼€‘g߈ɖE ł ÓÆł1ŠĮDé” hÆŽd"W^ąj V³oü…cfź2lj·N‹Ė‹ĮādčĢĖūfĻq“f•ާ)Kß)ŒūēHBCČD]–N>ÆĒ1z£…d,Ō•xyå£_#»l<ń°ŸƒėŸcįķœ|ElE˜ŻbĄĮ&iƒĆ!Ā'ʊ½1v6]&OSŁprÉ^ŌtŠhg F« Ń’Y7WUQ ™y˜ÉXEo℟^ąß}X°³3I’Ń4•T<ŠŽd% v½ė·/ēĄśē0;s™śŁļö»nŹę_1ž¼[1X{ĻFLkl®øu~Ń«ž|G·m¹Ć¦ā)ŸH¤£©k€ķ/’–²icĻ)„nŪ[ģ_³ŒX° ‹;Ÿ‘ n$gčɇĘéw?Įˆi‹±fw’½zš ‡Y‡ ‚pņž\"Ė4Õ4Mc_åz|Öńƒž(®½z;µ[ß`ā%w|ųĮĄŹ?P[ óożĆq#ŠŽGóļGŁõ$Ó®łqŸĒŌģ«¢Q*y`Ęߢ-ݧ=®‚įÄ#¬ī< g×ö#™źbAm‡¶ &8 †uåB8)±X’3Īŗž] I‡Yęźiżļ\Ųßšä­Ń£ÅZ©¬ ‘¶ žō¼wŗ³®żfLJ/‰Ü²oŸł cęäē®7råŸ):š¼Ńó{ݟŒ…Ųq°ø©ļ$Ę'Ŗ~ūr±£QŠŽHĮčy“ŲLžČŁ]ŪĶŠŌ4Īüį i4ļ]O°µ“=‹Üįga0@‚Ė=ĖČ϶S2õān›ē71*p£K>MD€ ½:øüa“¬iH9ć?üą>Ȋ®+ ōń>2ā0ćŗ{=×шI’ŃŃ?¶7Üį-gÄüėČŚw–܏"j&ōŁP½ö  fžT9GĢ~éOéŲq|¹ėæ‹Ę/¢hü¢©Ć±Rµ$"ž‚ ƒ!ŒŃ¾éI¤å`t~ų/œ„ģŅq'4{ĪēyŅeJ:Ӈ._Ö“īļhc>‡4@˚¹½vXXÜ=‡G’&{EćzF œI>ܱ1øÉs[ö®%Żāƒ‘Wj9óæų‡|lī°i\šķ’œt™š¬?ī4Šöƒļ“سƒ÷I—uDįø…½n?¶ńąš9śƒ$᭘Ž·bś€Õ#s^ešW¬D€ ½SS ¤ōĄ€ω¬·lĻ-ƞ[vŅeŗ¦Ü€é8#=j"Rų¤Ėłø2¼pšWA8LŃé1ŗ‹‰ĖśAn"ž&¶B†^šķćb°ēן”kœ”_ü$YÜbģ” JzPK9}¬Æ#·ŠŌē~½ŁŽl°œ±×ÆÆø˜Āb1Ņ?ŲD‹ ½6÷Ztygh"–@ 6›ķøs=K&_€”pŚ)¬Ō)ėĄjµ”3öQa I²Ž±݁.ŃÉŠé®Ī€ŅbHŪ†Ąć7ī¢;ŠėōpŠž2é8ģ~ ¹sļ 存‰w칬Õ >Vš7£V=qÜC²Ė&R0óFˆ4Ÿ¢JB‡w=Ž’<ĀG¦Ü}÷ŻwŸīJ‚pśÕųR“…Žö)ėMVāÕ«ˆģz#˜³ŃŖß‚޽`+@ ÕCćšĢ‡œ5­śm¤Ž]`ɁxŌÆ„˜ģEhõ«Św€ŃéŌ¾įFp”¢5mBj݊¦‘d]¦ŒĪCHĪr“öHĶ›ŠÉ`G«~üū‘%hšÖ£„ćHfOfŸo’­-܄԰-@²@Ż{™Œžęl¤` Śö?“_Š-»øĻū”3YQ;ö¬ü7’-­~“ļD²ä@2„V÷Ä;l…м ­uHšŠV󄛐%ŠV Ķ›@oŀV³5HŽRšļƒ¦õ )`°Cķr“ŽĢ5¬‡†Õ ¦ĄģśąŪ Ö|ˆłŠźV@2„d͇Ęuо#s\* uļ”EڐģEŠņ>Zó08’a¤­æĒf1ā*ŁćŗĒ0źĻČń9AN±Źś‰ŌŃFš"Ktn’7±ĻąŹ)Ĭvßš”¶-äTĢ"¹ķÆØ{’ƒŻfÅjTˆ­y©a5¹#ē īł7éOcÕ«8Üb«~†T’ž!Ó öR•’Ą¤vā.Ntå½HµļU2]ūv’[Å­'»l"±5÷Cõø¼e¢u$6żžag‘ŲüŚž—pø²0Ė1āėÜ¼œsIķxuϳŲĢģ6 ±Õ÷#ÕÆ §bx‹Q¢`ŌÜ掀Ė„wæBdŪŲl,#ń5 5®Å=lŚž—P«žÄ¬›+—ųš_ ÕÆĄU6©q émĆØqä'¾ęēP³gį(tž]$ßC“gÉD;šöœ ń®s7®ņi$·žmß XY˜•‰uæBnވ{ŲlŌŻĖPw>ƒÅlĀjµ_{?RĆjÜC¦Cõ›¤+Ē$'±{ŠH¬¹­ö\%PW”«)³ Ē*5F½ÄŲĀžčvDT¶uĻG¤Dšh]ń;”ömø‡Ķ&µżÆh{žƒÕīĬƒųŚ_"5®%kųŅ»ŸEŻł4£‚Åī"¾śPæWł4ØYNŗņµ0Nļb«īCŖ]޳x,rėŅ[’Œ!ތ³x<ńµ÷Cõ›8¼åčĀ5¤6=„.°WłT’›BŻ’6·£"¹į7Č­ļć6‹ŌŽĒŃv?‹ÕjÅb2_órć\Ćf”ķ{µźŸ˜u*—‡Ų–æR2žl,īćē7Чü4/æ©i#Ī!s2ĻĶžcŅ˘­.’ƒÜø{ń$Ø_‰ŗó)Œj«§”äĘ‘źWbĖ…āŪAŗņ1 ńlłcHmśŌ.Ēę)Em µõQtĮƒŲ‹&‘ŽžW“ƒÆauębPƤŽ„};ŽŅ³Pwż mß ˜MfLF#ÉMæCjŚ€£ģ,“ƒÆ”ī^†IV±ørIlx¹a ¶Ā ČĶėIW=‰!ՉŻ;”ųŗ_ā:GŽŠ×\š­#Ē>øŃ%Ÿ&¢‹E„>˜†QŃ09Œø‹Ō“'QÓ)ŠK „Ū%Ś#q¬n o¹‘_Št"AA‘žT—¹¦\ÉģłD†ĄģĢÅ`±ZōyŌt‡7ŸT‹pq!&[6F»žČŁ7’JD±å””©iB9 V'f§žč¼+IDŲrː$‰ūsč ,Yzb³.&ņaĶ.FŃ Z>‡¢3`õ˜IŲ LĄāĪĻ,Ėū_÷~¤ė7ٲ˜üŁū±yŒD-³ˆų‡`Ļ)Coqą×]Š$É8 $²¦*ōbq`vZńK— „SøŠrHXx¬˜¹X³ōf\L*ĘYXŒ–Np\ŠŃęĘźŃŅ-!éđ7YŃį·\‚ŽdĆīÕ1. Ć;ŃJ‡ždW”™˜m&įŽRlž V'~éR@Ć]ä&ī™L(/‹;³Ó‚vķ=ŻH ƒG¬ ŠsįÓI¬ Ā@9vįÓi W>Ä*K|å ‚ ‚ ‚ §€čAAA„O1ŃB„抜 ·×”¦S~°šń'IX\yX=„§l¾¦ Ā”Öjź«Ž#ŚŁzęeq’”’=®¼r ǟÓ# ą ŠTšv­¤£~©¤˜ŗx¦0Zx‡OĆY0ātWåŒ':AčӁµĻҲg5)ƒym_įŌŠ4]¼{n9cĪż‚Hø#Ā)j=Då+æĮg›LĢ8g-EöJ|µUL¼ōƒž^ŁóŽć“Ö Ż:UŅjYĀ©£÷ń½õ'†Ļ¹†ģņɧ»:g4ńå'BÆ:vÓ²o={‹n'®Ļ9ŻÕN0¬ńO4ķ\Až˜…§»:‚ |JŌU¾ƒĻ1†ģ OwU„ÖaŸĀØŗ_āÆŪ‰»dÜ •łšŚĢž’Æ“Š¹­įōH²1¼’ŗčd"€ ½ ¶$l*’g ”lĮg‹æéĄé®Š Ÿ"ŃĪ6¢†ćÆq.|2i²ž„!—X°mPˉZŃtVŃų?CEŒÅ$Cƒū "@„>Ø©$iIüq¦ŅdéTņtWC„O Ć¬ °«¾KA IDAT™ŽŽi„ā'¾\”A'”iL÷’Ŗd Œ:‰hRė¶Ķ¤—ˆ$ŗŸW'K(2ÄS½—§W$$ }ģlƒ½ŗø¦ihbźČMÓÄŅ”ƒMD‚š±÷•ENī]šÕõēĪó\”eŸXēD¾SįŹ©Ö“ÆĖŁĪ“ ą«ēō¾Ąf”łÜlūI×GA81.‹Ģó_Īėz§Üwy’üļ\ʝŲ:ćWM³²xōÉ%½’£ēĻsuŪ–kWųį%Y=Ž\ją¶Ž>ϵh”y@ŽsĀGsĒb'ß’ĖoÆõšŪk=ĀĒ›Žįcoz¹‘¾ŠA$žY(ÉÖń“ĻdqݟZ>ņ9ģ&łš‹0|Ru™Vnģ±ķ¬^¶A¦Ž}Ńė`R‰æ¬:©ź‚ żpØ=ɗŸ8j<©ÄČ5gŁŲVēĆcSS '–ŅŲ^— –ŌWh`k]&ć¼Ū*ć0uo@¹­2¹zdY¢²>A0–Å,ÉŅ14W?¢²­.NZ͌š+4`1ŹD}vĖՓēTŲŻ”¤5˜ī¶Ļb‘gĄf”Ųݜ¤%Ł/I™k1č ²>A8žqˆ¹8s=ü^€÷öÄŗ~žży–«g_K’‘yzf™ĘĪ4µ¾9v…dZĆÉü—{tŌųŗÆ°T–­#×”ŠLs°-³O'KŒ-Ō£S$ŖŪS]Ļ‚Ė"34GO[Øū³q,£Nbb±XJcwc²GNžC”Š­#šŌŲ՘@=|€Ū"3$GOK Mm‡XźL#:AųDhō§»B4ėż)ī<ω\;ŻĘ¼ ‘„F,©ń“—:øužƒ×«¢TÖ'(vėøy®'օŗĪuŻ ³‡™P5ˆ%5ī{ÅO{(Ķē¹(ĶÖKjŌw¤xąõN \:¾y¾UƒŽ°Š”—ž{”‹»‚"I<šŗŸCķG_˜óG˜øzš­kÅ«ß.ŠŲ™łųŁåY˜ Į˜ĘO_źčņ)‚ ¾`LEÆHä:~~yÆķˆ¢·ĪspĖßZłź9N¾¹ĢGk0ĶuÓķģl<ŗü\žCį××xxi[€Æœķą¶“QįÕsć,;ļķ‰R–­ćŹ©V¾ż¬o_ą"ž‚šö$ GŚhģģŁ€›TbąüqZi¾0×Ī÷’ÓѵO–ą7ä°ro Tåósģ<šz'K'[0Š$qŪ|·ü­”*Ž+§JGDÅØ“ømƒl›Ā¾–$—M²²ö@Œ¶ Źü&ī}ŁÅ qĻŅ,®żćсŒ/-tPœ„£Ŗ!Éå“õģjJņ—UA~öŁ,“&i«Ü<Ē΃o茦¹ļņlިАc31„¤÷‡Ū8xoO”ā,ŚDøļ׾ţĶ\1Õƚż1rģ ×ϰńķg}čdøć\;Ü0ÓĘ«•Q^©Œ ś½NŃ Ā'‚Ż$!I2²#ņō„b™šā,_|¬ ø~†CL¬Žē‚q*ė,ifsMü˜óČ,eę ‡?ŠĪeęŖiV–m ÓHw½ļYšEKĒM³mümuˆMÕqJ²tüžæ<=ź¦W$žµ)Ģī¦$c Ü<×Į]Ļłŗöß<ŪĮ—Ÿl#U)ĪŅqēߎ‡Ū¢šłæ“Mj\;ŻĘłć,,Ūtr ‚ ‡óŲn˜™™†„W`ö0Oo “Vį'/łi¤qšeĪmĘe‘ynK˜óʘylmˆiåFžų^€+§eĀķ§1±ls˜§7d:š¦•Ł×šäž—3»N³Ģ’1™éc \ūH¦įWķK±dŒ„Gżj|)~óV¦QßI3æĀĢ®¦L§C…WĻžę$½Ȝ£=Åü ū[S¼³;Ęck2õš:FčŁV—čq~a`,a¦,;³”Ķ$1$GǾ–$Ł6™µāuõ)ęUdž·/t`P$f 5ńö®X·ł™CMÜšh Ŗ–y†žrS.YäÅmVķ‹aŌIX £ņõ˜ōžŁā…­™†łØ^Bż_äŻĆ ’ø%·[ö„E£ĢüųÅjG!üéĘĢz E–ø’5?Q•—¶Eøgi–č8ƈA>īXģźÅĘT¾’°«)ɏ?“…A|§Ž'ׇX¾+Źm ģč‰ŁĆŒ|ći®ĢнĒ&SėKukOs’#Ķ“‡Ud ī]š…,ĮČ|F½D‘[Ēī¦L²¼_Š@¬gøfZÕŲsų˜ ŠÜŻĆ$ ŃĢļÕśR8Ͻ;Ų–ģJü“«1ɼ Óß5A”7‰“F½?ÓšI¤4^­ŒRļO12OĻēŗØnOŠkč Y’xcG”Æõ°ī`œŻM‰n‰ų,‰ĪčŃwC ¦b5ŹTxõ\2ĮJ½?EGX%­f:ŒcĒ$üėŒō>ąŲóuFU†ēmŗ™ 2”cŽEĮ˜ŠĶ(÷8Ÿ?Ŗb7‰t_ƒÉV»ž£hBć/+ƒÄSÓŹŒ\<ފ/’F$IBÕąķ]Qę 7±p¤™‡Ž t;—¦Ń‚ŸV)žŃx ‹F™ ĒUÜ™õć،rWĆĄ×Ē4€Žcž‡p\Ť?śYr×TČ|§ŲL2iUėzž:£*6£Hŗx¦‚ |"üš…ŽYšĖ<:ęW˜øó_>’i­+ł‘ŖĮ;»c,l„5¤ž½L£<‘Ź|€aŠI¤Ņ‹Fš1ź%¾ūoŖßæ8“Č'žŅ0č€ųįlĶśž/BY–Š+‰“†A'‘üĄ{ųؤȲGŗüŗīõč+³³ ‚0°Q•·vF{l?«ÜÄÓB¼yxßĆ×g¢¾¢I}ĶInļąkCŻ~ĒQɱķų͵+ģhHpžX ÷½ā§®#…N–X8ŅL2­aŅKČRę]UčīżS¼Ąut{žCGk蘆}$ē˜ņrģ ¾Ć ½#Ż™ßSX¾«ļłįĀÉŪZļ–ąˆ‰ÅF®4å1”ČĄÅ3ß'/lš \čd©ĒÜzMĖ4ųSŖ†AɬØPčVˆ&5¾÷ļLTįUÓlųĀénĻ\¾«÷ē(Ļ©°­.óßV£Ümµ D%ĖŖtå$pY2Šœ™ ÓHć±)Ż:„3ƒčį+žŌ°™dFēė‘$X2ÖĀó[2ajĻošĢs¹ė¹ŽnæÓHSœ„cŃ(3mĮ4Ÿ™leKm‚hR#×®0ŗĄ€Ż$sV™‘§6„Ųx(ĪM³ģ¼^eĘc·Īƒ.Ü2ĻĪ{{b,abĆĮīķį4K'[Łß’dj™‘ŖĆsG+ņōœ?ÖB]GŠ«¦Yyr}Øē¹A„SfsMœ;Ļs1­ÜˆÓ,“mS°›$ŚB™÷Ź}—g±å˜ieļķņ›k< ÷ź‘„L#üÆ«‚ø,2ßæŲ́Ö$^‡‚^É,AųҶ]ŸC­/…×”ŠģŁH×)šWfÓU)÷čųĘ3>†ęd>Ū¶„%xąŹl‚1• ƞo-ó1ŗĄĄČ|÷,ĶB"Ó±¼·Y,÷z:4ųSüšR7a•”9z"‡“=¶Ó¤UX±·gēÓs[Āüž:Z“Txõ¼ø-B£?M±[į[ē»Š4™Æē½=1ž³%Ģ/ÆŹ¦Ā«Ēe‘±›z„_:ŁŹ„"#%Y:ŽŁŻ½ĢēŽs÷ÅnŖx™|±¤F<„qēM4c ō<²"8š7H8­$m°ģįaÅŽX·¤F5_`WM59Ÿ=µŹøx‚…×*£$zYkyz¹‘©eF|a•½-I)]IvDŅt”˜Ö-į£Ė"Žkxl2‘ÄŃēŅcSš…ÓØZę9ó:2£üGž_õŲ2QyN…öPŗŪ³9ŲĢń†Ö?̌’ÆŪö¹ĆMŒŹ?±e:…¾‰A>öŽ$¹éĶŗƒ=ĪSˌ|f’•ū_ėĢĢ£#“ĮåŽĢČ|s Ż#„ąåķ½—óĮ’½z89ĪśŌćłĆõĒ5žÕKræå»zŽ‚ ƒKƒć®øMjDgęO~‡Ōu¤yr}ˆõG;Ź˜¶ÕŽĖ<ģ@T%pųŸścˌ&µ®†ÕXŖvt۱˒„T­«>GĪ}¬#‰ōńÆOŃ¾;X4 ī˜’Ö`“^¢®#Å’{¦½Ū”Ę#Čäs~ ×PZ…CmGĻuä¹S5ŗņōö÷}¤胫L»l`<„õXŠšČž:±üßKt‚Š+IQµOę?žÅŁxčŌ¦"i)$¹—5 A‰ŽdC—ųdNuŚß*Bé?Œ>Do¶j:£9EŅŅhŅ'ėKj¬ŲŪ3_€p”.F6XOw5Īx¢@„^Ł<%Xw¬D— Ņ9Nwu„$kI²¢UøŹ&ŸīŖ‚š)ā2‘Šś‰s‰ėsOwu„¢„q‡¶bHpżöī;<Ŗ*}ąųwJz/¤@HŖō.0 M$ŗŠŠ»Šˆ+ »kß](Š D@&]Š4E‘H Ō!! !}RgęžžČftœPÓHņ~žĒē!ēž{Ī™3sŽ{Ī{¶ØŅ®ģŻ|±²wĆ/}©n¢WŁTi¢śXė3šĶŲŽg“¶5=”:OBžœ>ĘÕ/ ÷F-hqõ Šl–SCŌV6ÅiŲ9¹āŚĒāšJžš…•Dó§t" šu„ø MģKä\ńŗÄŚŁ‡fż_ĄŹĪü¶‚)e“jó%µFKhų8Īü²—ĖW¬qqQiš|€&†Z\Ņ–—€YÜ3 !°µ6’åŖR©hŃw,Ł×Ī‘ŸqÅ(ĒĄŌ *°uźƒ›X¹[ģ¬% ¢r8ŪŖĶŃ©T*üŚĄÆķōEØ+T-mł ڜl+ö™āXNv{;WŚ }}Q>†bÉ„SWX;ø R—?5u²‘ļ&•IB ō¼ąņøų6ĆÅ·Y5FŌOGM…ŸÖ!Dw­E‚±2ZūjØ ī›jx8hp°Q”+²Lr§µ±—Gõ€V…×M¾£Š{#_õ„4tÕā\ĮH½ØŻB|¬jzBˆ:¤…·öÖ²t·¾r°QÓĢ»āG·µõ“}žõY?kŌņk¤RÉ·}!Pzīp`[Łé_Oy9i‘3v…•H«QŃ/ÄN¾¼×Cj<bW)«ŹĀZć_Į•¢vņuŃŠÖ_@•M„(Š*„0‰O)į×så7C½įéØ!¢•½<©BT‰ä,=»ć älśzĀĮFÅC!öųøT޲m½~=WĄŁT9ޱ¾j`EŸę¶XIĄJ'!„…ō<‡/q5S/€:ĢĮFMXC+Z5²‘½’Bˆ*„7(œM-įJ†žÜB#É+[§hŌ„ ’<“4÷¶²ČŽ_YRs œM-!-×@~±ÉO\wØU„‰ˆ½œJ·ŽųVbI˜“€⦊ 9FŠJä×D]¢V«°·Vįb'³~!„BˆśDB!„B!D= „B!„Bˆz@B!„B!D= !„B!„¢€B!„BQH@!„B!„Ø$ „B!„BŌB!„B!ź !„B!„õ€„B!„Bˆz@B!„B!D= !„B!„¢€B!„BQH@!„B!„Ø$ „B!„BŌµ2 ( ćʍcōčќ8qā®īÜ¬^QQsęĢaēĪdggÓ°aCʏoŃŽŁ³głōÓOM«xąŗuėfVgńāÅÄĘĘ2sęL¦L™BŸ>}øqć[·n%==€€ĘOĻž=M÷éõz–,YĀÖ­[IKKC£ŃąééI’žżłä“Ošōōdß¾}7}­ėׯg͚5\½z+++üüü4h£FąĀ… LŸ>×_ pāÄ Ž|óMxoo®B!„Bˆ:«Ö­Ųøq#ŁŁŁDFFҦMĀĀĀX²d‰E½ēŸž·Žz‹€€†N@@cĒŽåźÕ«¦:IIItķŚ•Š£GHRRĻ?’¼Y[111ģŲ±Ćōó¶mŪxé„—˜7omŚ“”[·nÄĘĘņąƒrčŠ!S½·Žz‹æžõÆxyy1|ųpyäÜŻŻyńÅiҤI¹ć.3{ölFŒAnn.Żŗu£[·näääšųćóÉ'Ÿ™™ÉźÕ«éׯgΜ”k×®ųśśŽó{+ī?gK*å‰B!„¢~Ŗu+–,YBXXmŪ¶ 22’÷Ž{7nąįįĄµk×X¶lóēĻ7›Ģ?ņČ#ōė×ĻōóĀ… 1 üśėÆ8::šŹŸxā V¬XqĖqøŗŗrąĄ“ŚŅ·š½÷Ž£E‹¬ZµŠN:°{÷n&NœČgŸ}fq’ŋ ¼iū³fĶā™gžaįĀ…få/¼š³gĻęÕW_5•Mš4‰’üē?·ÆØž$ӘC›Ö5=!„B!D-W«V¤¤¤°cĒ"##Mecƌ”¤¤„ļæ’ŽTvžüyE!""Āģž|gggÓĻgĻž„gĻžf“€”C‡Žv,?ü°iņ`eeEĖ–-IJJ2+»~żz¹ÆĆÖÖö¦m+ŠBBBįįįåö{łņe ƒ©¬lK€Ø›¢ O]t²¦‡!„B!„ØåjÕ €åĖ—£×ė‰ˆˆ 33wwwڶmĖŅ„KyńÅHOOJŸŅ’‘J„¢Aƒ¦ŸÓÓÓqww·čēunĘĮĮĮ¢L­V£( P:‰oŚ“)ß~ū-.\ qćĘ@é¾ż˜˜~ųᇛ¶——‡Ńh“L”½&ƒĮ`:¢øe0AŌ Q…„Ē]ŹJ!„B!ĽŖU€²=ó;v,÷z||>ž+W®ššJJJ ………QRR‚­­-¶¶¶ø»»ćķķMƆ i޼9ØTŖš¾Bˆū”¢(ddd˜>[ (((Ą`0`ee…­­-®®®ųųųąćヽ½}MYQĻԚ@LL 111¼žśėōļßßģZAA>ś(K—.å?’łé ~bb"...¦z:ĪlI¾§§§)ū’%$$Tx¼:ŽĢĢLęĢ™CćʍqwwĒĶĶ 777ŒF#F£µŗüvvv8;;“’’bq-)) Fƒ““S…Ē(j Ü»ōōt¢¢¢ųķ·ß̶ꔧøø˜œœŅŅ҈7•;88ЦMŗwļNĖ–-oś’°BˆśC§ÓqäČN:E||<999wtŸJ„¢aƆ“lŁ’6mŚ*Ÿ+Bˆ*WkK—.E«ÕņŚkƕ»D’”‡ā»ļ¾ćż÷ß§uėÖøŗŗņÅ_šÕW_™~™~üńĒ›ī鯻7‹-āąĮƒtķŚ€¬¬,¾śź« w芔4nܘ3gĪPXXHFF™™™ÜøqƒóēĻÓ®];öīŻ[īV€öķŪ³hŃ"žxā ÓV†œœ.\HēĪå¢“ ĄŻ9wī›7o&66Ö“EGm£Į”©M\°ńvĄ¦{+TVjŌV”b†=Å„åSp5Ż…,té:¢¢¢ˆŠŠĀŻŻˆˆz÷ī-+r„¢Šg×®]ÄÄĘ­ŚŌ:Ycć퀭—=+Ō6T5ŠŽˆ”@OIV!Eił„źHJJ"))‰;wāāāB·nŻčßæ?nnn5ųŹ„uY­čõz–-[F’žżoŗ??22’gŸ}–½{÷ŅÆ_?¾ųā ʍĒ÷ßO`` )))8::dŗg̘1,_¾œnŻŗŃøqc¹xń"={ö$..®Bc^²d ģŁ³ĒbÉš•+WhŚ“)Ū¶mcäČ‘åŽ’ńǁ——5B„RqõźU\\\Ų“iS…Ę&j? Ü^Łi e«|ŌÖ\Ū4Ą­“/ŽĮn ¾ÅR~+5+¬=ķplž{žāŒB2_#ėH i,_¾œĶ›73räHzöģ)Ū„¢8uźėׯēüłóØŌ*œB=qnå‰c°6 īlYæbPČæ’MŽ™ ²Ž§‘šĶ¶mŪŲ¹s'Ż»wgŲ°aBT:•RöHģ>–““ĆöķŪiÕŖ-[¶,·N^^[·n%44”°°0 t ĄŽ½{ŃétųśśĪįƇńōō4ÕQ…żū÷‡V«„mŪ¶„„„°uėVŒĒ'--°mŪ6üżżMm”łõ×_ŃjµtķŚ•’ž÷æĢ›7ŠØQ#³z‡¦K—.ģŲ±ƒ‡z覯;//ččh®^½Jaa!žžžōźÕĖ“ü?33“;w![źØ%¹›É0fßōz7Ū6ųƒĮĄ† Ųŗu+ƒ½ž½üšģķĘŽŖRśP…ÜS7Hū)üĖ„K=ƒƒƒyī¹ēšńń©”>„BÜ_233łžūļ9tčZGk<{ū掄!Z犯+ø’Ćõ_É>–ŠbT°±±aųšįōļß_V~ !*M­ŌFIIIDDD‹ŸŸÖÖÖh4rrrHMM%""‚õėכ QžŪ@‚”‘‘ĮܹsKŸŹØĄ­£/ ‡5CćP9’ņäÄ]'yķYŠ3 ±±±aģŲ±¦-EB!ź†cĒŽ±pįBt:jk ŽāŃ˵UåOĢ‹Ó ø¶ł<Ł1i4mŚ”‰'āįįQé} !ź T± .pīÜ9rssŅcüBCC-VQž; €.^¼Č§Ÿ~J^^Öīv<†}—ŪßX ŒE’Öž!óŠ5"""5j”l BˆZNQVÆ^ĶöķŪQē0O ĮŹ„źąäĘßąźŖxJ2 qpp`āĉ«O…ānI@ˆūŲ ~bcc™={6EEE8…zą’dŚJZī72¢“I^s£ŽH÷īŻyī¹ēd٦BŌRz½žo¾ł†ččhP«šDƒ~«5øk,Ō“ųżi²cŅŠjµŒ7Ž.]ŗT[’BˆŗGóĪ;ļ¼SӃB”/¦ų,JŃÕ½ŖOE„Rį§õ®āQŻ_.\øĄgŸ}FQQn}hütkŌ֚‹Ÿö®äœ¼Ī•„ˤ§§Ó¾}{Y „µŒŃhdöģŁ9r­–Ąńķpėč[ķæĻUZ5.m½PŠ ä]ĢäčŃ£4hŠ’j‡¢īGSBŌ!Q…'ˆ.:YÓĆØ6III̚5‹¢¢"śˆøø8/^\m}ŠŹu79ž¬®ēX°`ĄÖבą)Q[Uß²’C+ö±éļÉM5’»ń ōfś”QkKĒ’žó’ןĆĮĮwß}ww÷j£Bˆ»wīÜ9f̘Q1Ņäł¶8‡zV[ßEŗB~łj;Qßī!31ŻģŚ?ϤA°Š¢puł)2§ŠØQ#Ž|óM¬­+~”¢ž-„Jo IDATÕäȑ#üśėÆÕŚgLL {÷ī5+ūöŪo;vlµŽCԌŗ¼ 66– ¶ÖŠų™ÖÕ:łßõé&–’užÅä_c­å/ó’jšüxōöĒ9¬:ŽåĖ—WŪ…Bܽāāb¾žśkŒF#^5©ÖÉöµL> ‡’½Śbņßõ©i\ŗŠL„RŃhT¶>$%%ńĆ?TŪ…uƒŖÉ¦M›ˆ‰‰©Ö>æūī;.]ŗdVvńāEöļß_­ć5§.JJJX¶lŽƒ°ń²Æ¶¾On9Ā–÷V•{mȧiÜ)Ų¬L„Rį7:­–£GŹžM!„øm޼™ōōtģżńTmżé ™’ŲG\;}ÕāZĆV<:ć)³2µµ’愁ZÅĪ;ILL¬®” !źmMąN-Z“ˆāābüżżY¾|9………¬Y³(Ż«µnŻ:’““±¶¶&((ˆ§Ÿ~š6mŚpģŲ1ęĶ›Ē?žń>żōSĪž=‹'N¤mŪ¶Ģ™3‡]»vŠ«W/&Mš„­­-ƒÕ«W³cĒRSSquuÅßߟ'žx‚6mŚPPPĄ”)S9r$żū÷7ó'Ÿ|‚J„bŹ”),^¼˜ōōt^{ķ5¦NŹŠ”C¹|ł2;wī$33“   &NœH‹-LmčõzV­ZÅO?żDzz:Z­///zč!>ųąŲ°aC¹ļŁŹ•+9sę o½õ[¶laćʍ>|˜ėׯ3aĀ&OžLhh(ƒ•+W²cĒŅŅŅppp 44”qćĘĄ?žHtt4#FŒą«Æ¾āźÕ«2eŹ<==łä“O8tčvvv 4ˆgŸ}Ö“'»ØØˆ%K–šėÆæ’œœŒ««+­[·ęłēŸ§aƆ•ņoD”/Ŗ°tŅYW¶ģŪ·ŌŌTl}iŠ»ś² §Ä'±|ā\£å®©īĻ=D÷gū•{ŸÖŁļA$Æ;˚5khŻŗµœ „÷™ōōt¶mŪ*hōX‹jK(«( ßæō5ÉqW,®9ø;ņÜwÆ`mocqĶ®‘ž=żH’%‘+VšśėÆWĒp…u@­ ģŁ³‡Ķ›7S\\Lxx8ĮĮ„OŚžļ’žéÓ§AĖ–-)))aūöķ|žłēģܹ“޽{“Ą¼yóŲ¾};½{÷¦iÓ¦ģܹ“eĖ–Ń«W/ņóóéܹ3ÉÉÉLŸ> .0wī\&MšÄ‚ ˆˆˆ Y³f±}ūvfĶšÅŽ½{éÖ­±±±$&&št:’ś×æx÷ŻwŲ»w/ ¦ĄŅ„KY·nŽŽŽ„‡‡cccƆ ˜?>±±±„‚9sęI§N())!..Ž1cĘ0lŲ0>ųąƒ›¾gQQQģŁ³‡·Žz‹ĀĀB233),,Äh4’™™ ”ʍĒņåĖ6l”””äåå±xńb>’üsŽ9BPPĒŽć“O>ańāÅ 8ÖÆ_Ϛ5kĄÓӓ-ZpęĢʍGnn.“'Oą©§žbĻž=Œ5Š.]ŗ““ĆĀ… Y°`gĻž5\ŖšĪXĄé’„jé«2ŽeĄ›‰*< mZUJ{5Å`0”~A|UŪ4]FßD~BanÅµĄ.ĶxōƒæÜņ~~\ß{…«WÆrüųqŚ·o_UCBq¶n݊^ÆĒ­“/v՗ōoūŒu_mQ®ÖjxęŪ—ńhāuÓ{½‘y8…ųųxĪ;G³fĶŖrØBˆ:¢Ö 9tčaaa¦Ÿ’żļóžūļóÆżĖTĻ`0йsg>ūģ3z÷īm*’ā‹/śˆ)S¦˜µß¶m[¾üņKŗuėFdd$ƾś*YYYøŗŗ„OĖ‹ŠŠ3fĢM_««+ŃŃŃh4„{†srrhҤ «V­ā7Ž`Ū¶m¼öŚküē?’1»wĈŲŲŲrGļŻČ‘#9r$oæż6Ė–-cÕŖß—1Ÿ;wŽoæż–5kÖ0räHSynn.AAA|óĶ7¦žu:ĒŽ3`&OžLĖ–-2dóēĻ7Żūč£²nŻ:&OžL^^kÖ¬įĒ$""ĀTēå—_¦Y³fģßæŸ‡zčŽ^GE1ņkį±jéė~s 0„VÆ8|ų0éééŲś8ąV={3 %żœō„T‹kĪ>®Œżöe“6V·lC„QŃ oc’8ĆöķŪ% „÷‘œœœŅļ'Q…'8WœŒ3®5=”»R”[@l\,*­×öŽÕŅēéŸbųyöÖrƍüh,šŽq[jk .m½Č|8'NäĒdóęĶōļßOϊķQĪČČ 33“;vŠØQ#:t耛›nnn¦±U___ŠŠŠčٳ§E2¾uė֑““C‡ī¹ż .šõ×_óÖ[oŃø±łŽŗvķŚU{Ą^eWm}ŻĻü­A¤āŚP_ŌąŌÜ2ŲWٌ#Ė'ĪEwĆņ½ 詔”ļEŽS»ŽĮnØ4*4I…PlėZµ K!źMB>PśŁ¢ŅVżļä#«öżŻĻåeI’\ŽżgœcsTZ5 `g'ßs„7W«æ}śūūćååÅģŁ³1 ¦ņ’’¦OŸĪĪ;+Ō~“&MprrbĮ‚f«RSSٰa:u2•9991dČV¬XĮ¦M›ˆŒ¼· Ā=łä“899±k×.¶mŪƜ9sxķµ×6lžžž 6Ģģuß ;;;nÜøN§3•µmŪĄtņA™ĢĢL&OžLLLL…^‡^ÆgƌlÜøŃ¢żŌŌŌr·XT%9€ķwž6Ī4²qŗ}Åū€ęjéRIū Ŗßŗ°õæk8÷‹å¾{WĘ.z õ½ÅNÕ6ģüœĄ  I¶\ś)„¢zi.•šVżgKśÅTÖü}q¹×żó1‚ŗYnżj+5öžĪFΟ?_ !źƒZŠjµĢ™3‡… Ņ A:uźD÷īŻńõõ%>>¾Āg¢ŚŚŚ2sęLęĶ›‡···) aćʍ±²²2eź/Ɇ (..¶HØw/,X@`` dćʍģŪ·ŲŲXRRRˆŠŠbćʍ„YkļĀ€ŠétųūūÓ”C–.]ŠÆÆ/’żļyõÕWńńń”GtéŅ4 ćĒÆŠėhŃ¢?ž8‘‘‘4k֌޽{Ó½{wÓū8nÜø µ/*Ęߌæū=`TąF1ØĄÖ§j4’õ4»fm²(W©T<1w"ī *Ō¾­OiīUzq…ŚBQqŖŌ’—»Ü¦fÅč‹JX<öór“m9 ż&®PūeG&%%UØ!DŻWk¶<ūģ³Z>19r$=zōąĄ$&&¢×ėńóóć‘G1%Łkß¾=óęͳHT÷Ī;ļŠ¤I³²^½zńÅ_˜~?~<įįįDGGsķŚ5E!88˜X,±8p sēĪÅĒĒĒ"į3Ļ *(°Üb „$€ūœV«„sēĪtīܹ¦‡"ź‰ū2PRśÅ©Ŗ24ėnä²jņ7å*•ŠČ9ćqóÆŲ‰¤ž_AU‰„¢&•b56U÷uxżōļø~!Å¢<ōįvōyq`„õS /o»¬BüQ­N(„Ø~ÖĪ8kljzæūßÄ_1TĶŽ„•“æ!7-Ū¢üĮ—Ńją•Ś—ņæ‰æb%æ~…¢F©Ŗö\ S;ŽspÉ^‹r7?žœ÷WT•ŁæģčBÜ!ł*„°p­8CQMćw6„æŖŒ…śJośčš(Nn>lQŽØucżė±JļĻPXRśłõ+„5I)ūl)ŗ»#•ļD~–Ž•//ąĻ©¶TźŅeģ]+÷DĆ’^CY¾(!„øł*„0s­8ĖE–OĆk’Ń®ti£>÷Ī3ē+F…óūNńŪņ_Ź=v J—žÆ›¾Ō¢ÜŹÖšæ|żW“6•Ÿ`SŸWPģe–BŌØ’ %•ŽōĘ-''%Ė¢¼ß˃ īŁ²Ņū3”Čou:”B@- ģŲ±ƒ &ŌŖóM÷ļßĻ‹/¾ČčŃ£9tčPMēžäęę2aĀNŸ>]ÓCÕą~œü(īV(j(ŗQ€¢æżŽłømĒų ÓTfł/+ž6Ÿož˜Un½ ’\FŽõ‹ņ!ļŽĮ'ÄÆĀć.OaŖ£§u•“/„āĪ(ö°Ń ×• Ļæ}ĄØ7p`Ńn>źń¦z?Ʀ·V”[ļÜ/§ųm™eRYæ¶Mų‘wyŠÆēąéYy9k„uS­ ÄÄÄ0ž|222jz(w$%%…ššp"$$¤¦‡$ÄMŻ×“’’16*Ż×Ø»`¹¤ņ~ü÷j‹/^—ī5ż¹8æˆÕSYŌqōt&ņĖń•›˜é”#ł‰9 Val(ū4…¢¦½KŽę_±\ öG«_]ȕ£-Ź.łŁģēķ¬%=!Õ¢ŽŠ÷ŸĄ»EĆ ŒōÖŹĘļēW5«×„uG­Ł„zņäI–-[ƻヒMé/ėsēαråJNŸ>¢(4jԈĮƒÓ§OŸ[¶õÖ[o1|ųpbccŁæ?yyy4iŅ„±cĒҼłļē±°lŁ2>Lff&tķŚ•1cĘ`m]ŗ|÷³Ļ>#,,Œ¬¬,¶oߎŸŸF£‘øø8>łälllxę™g įŚµk,]ŗ”ųųxJJJhŌØ<š=öjui<ę½÷Ž#""‚ŲŲXöķŪG§N2d³gĻę„—^błņåÄÄÄąįįĮÓO?MĒŽY»v-›7o¦¤¤„:0qāDģģģLÆåųńć¬^½š+W® V« ąńǧU«V¦:łłł,^¼˜C‡Q\\L‹-1bÄżż$$$šŻwßqįĀŒF#žžžtķŚ•!C†˜ź¼żöŪ >œ„„~žłg233 ęłēŸ§aĆŖūP·V&’† 4'rŠĻĀ£ĒĶæąŲ»;’Ÿ„³(?ŗ&Ša’yk;k~|5W®[Ōyģćgpņv©Ōq’‘īR6J‰±tņoWuēN !„ø3Ę&öp,›¼ó™xööæi½ŒÄå–YµŸ!ļ<ŽĘZKāńöĪŁfQ'ōįvt÷P„łĻŒE sŠjµWY?Bˆŗ”Ö¬ˆgƌ•f&‰‰”]»vlŚ“ gggÜŻŻłķ·ßxšĮY¶lŁ-ۚ5kC‡åŻwß„°°kkkV­ZEūöķ‰JĻQķŃ£ƾś*iiiøŗŗ’””Ä /¼@xx8Fcé>äŋóōÓO3nÜ8®\¹Ą±cĒ8žr䣣Ł\øpV­Zńå—_’ Ēē/ł Ļ=÷œi|Ÿ}öƇē7Ž -- €äädf̘A=Ų³g666üōÓOtļŽČČH¦M›@^^o¼ńcĒŽ5µ·jÕ*:tčĄÖ­[ŃhJ'k×®„}ūöüųć ĀĆĆłē?’I~~>žžžģßæŸ‡~ų¶7GŽ”U«V,Y²„üü|“Z-dųšį¦q•½ļO=õ’ųĒ?ČĻĻ§ØØˆŁ³gÓ¦MÓėÕ«¶Lž Aö R‘s:cńĶ36ūµiRnyaN>‡WģćxöĶßaq½ŪŲ¾“Ö¹²†[®ģ„’Ī Į•›żY!Ľ1•&ĶĖ;—i:¦µ<Z”[ž—žCģÖ£õVNZ€QožłäŲĄ™1_¼Pe+ĖrĻd ‚‚‚LɄāfjĶ €?[ŗt)mŚ“įĄfæTGŽÉ·ß~Ė“O>yĖū9~üøéø”‚‚Z¶lɧŸ~Ź‚ X±b§N"66Ö,šśÓO?1`ĄöķŪgZi ( §N¢Q£F¦z7ndŲ°alŲ°ggg¦L™‚µµ5§NĀŃŃŃTwžüłLœ8‘’ūߦ„[ģŪ·WWW¢££ųūß’ĪĖ/æ ”)‚ƒƒ‰ŽŽęŌ©S¦×ņńĒ3mŚ4Š‹‹±¶¶fŚ“i<óĢ3,X°Ąō^•Mųg̘Į AƒŲ¶mQQQDEEѵkWÓŲ¦NŹĢ™3oł^~üńĒ4iŅ„ćĒceõū¾ę÷Ž{>ų€7ß|‡Ņ ½½=@«-ż§—œœLpp0«V­ā„—^ŗe?¢rÕ¦É?€āj…Įß®sņ:®ŹßēŲ¢_kŽÆ.÷ŚÓJ3ž ę_ņÜü<śļ'*wĄ¢²Ž•. 5“v®Ņ¾„BÜÅÅŖt‹YR!9§ŅqiėUn½Ą®Ķłm¹eb?€Mo­ąŠŠ_I:yŁāŚčYĻįäUu+˲_ C‡UŚ¢nص€¢¢"“Z-fGž,]ŗƒįöē¹>öŲcfg„ŚŁŁ1dČÓDūčŃ£tķŚÕb)U’žż±··'..Ī>|øŁä’fNŸ>MxxøŁäJƒ&LąÜ¹s¦Ą“O>išü’Qxxøé϶¶¶„„„ąååeöZBBBŠėõčt:ņņņHHH0›üh4Ģ|@ll,52›üŒ3ę¶€S§N1hŠ ³ÉŁėzūķ·¹rå -[¶4••Mž6lH³fĶL«'DõČ7(h;‚¬ķn_ł>RŠQ!ūŹnHŗi ÕĄX­Q[Lņ Åśrļżé8lŖö½Č>žŠAW‚UCG|üWi_B!ī\~9IēČųķŚM·śl¹qł:7.[n+k?²­w¬ōńž‘>ƘœÓ7P«ÕtéŅ„JūBŌ µ6šüóĻÓ§O<==iŃ¢žžžЦMžzź©ŪŽ_Žžs///233ČČČ &&†Ž-q—””——gśłĻś›ÉÉÉ)wo–››jµšŌŌߓʔ=1’³²ÜeŌjµÅrÆ?NōĖNMxé„—,ΆMOOG§Ó™ž\ŽŃ1w’M677Ė趇‡©©©¦@yõ4iK…ØzŲ“¤·ķ5=Œ{RŌæˆ×zÜ‹Yč.fįd$sląL“NĶøxšĢµŁõé oSŁC5£( i;/šōĄĒéįÕ£JūBqēņĀó˜ŗ}*y§oPœ‹]CĖ“›8ÓøS0 ĻŽQ›NŒųæŪ­Øė{Æ č“ąӊS!„ø•ZhŪ¶-—.]"::šĖ—/sõźUųĒ?žĮŗuėŲŗuė-ļ/o•ĄŸ÷g5oޜ×^{­ÜūĆĀĀīzĢ*•ŖÜģ䊢`4Mūó+SŁkzöŁgiҤÉMėi4šrĒv'«)€[Ž[ÆKܛŚ<ł°±±!<<œuė֑²åA/=Pī¾Ź6C;ŽQĄµ”;ĆŖxé?@öŃT StxzzZ¬²BQ³éÓ§;vģ ķ§K4[ž‰S­épĒ€Ē>~ĒU;!×ėJČ؟Ą#»ådśf¼¼¼HOO·(/K€W‘[___:vģHß¾}Ķ®=z”½{÷ąééIjj*Š¢˜MØ®^5?ß¶<ŽŽŽå¾®ė×K—ĆIDśžPŪ'’eĀĆĆŁµk9³Č:œ‚['_‹:ļÉęwW¢/*É™‘3ĒbėlĖ:e(Ō“¼ńƆ “€˜B܇~ųaöīŻKNĢõ›®0k?²›ßYYī6€?j5Øķ†WżrüŌ/`(ŌÓŗuk«¼?!DŻPkNų³]»vńŃGQ\\lVž””„V«5Ūg^žļ¾ūĪ4A…Ņ%š7n¤S§N“k׎żū÷ov_ll,Ƽņ 99·>/¶ŃŃŃØ­44~¦5N”53£BŅŚ3dHB­Vó׿žÕl›ØBÜ q»Ū@}œü—9räóēϧ¤¤ūĘĪ<Ż k÷źI@©Ņ~ŗDŚŽ£BĒŽ?~¼<łBˆZĢh4ņŻwß±wļ^T* ś5Ę{PEŅŁŖ¤Ļ-ęŹ²8ņĪd Õj™0a‚Lž…"!īcwØĻ“’2 |õÕW¤§§£¶Öą30ĻŽžP…_Ö ®ä“ę ł‰9ØÕj†ʐ!C$ćæBŌ›6mbƆ F‚Żš‚—}•÷›}<¤Ī Ļ-ĘÕՕæżķoWyæBˆŗMBÜĒī4 “’ßét:–.]Źoæż€·=Žżqmļ]©€Ā”<Ņv^&ėh (ąééÉsĻ='{2…¢:}ś4óēĻ';;•VMƒ¾x>€ÖŽŖŅū*HŹ%eÓyrĻdĘ /¼€³³s„÷%„Øź\ą›o¾ĮŽŽžČČHfĻžÆÆ/#FŒøé=sēĪÅĆƃQ£FU×0MnÜøĮG}Äųńć ŖöžÅżķN2ł/_\\Ė–-#%%k;Ü:łāÖÉkwŪ{jÓXb ēäu2§ŠjµDDD0xš`¬­«6ū³Bˆš“——Ēڵkłå—_PµĻžžøuõÅƳ‚+Č=—Į_É=uEQpttdŌØQōģŁSV• !*M 0V¬X@×®]iŪ¶-óęĶ»é=½{÷¦iÓ¦,Z“Øŗ†irįĀ‚ƒƒŁ³g>ų`µõ;mŚ4Z“hĮ³Ļ>[m}Š»w»Ą6!ō¶•½€7c49xš ›7o6T*6Žö86wĒ!Š/{¬Ų”¶Ņ˜Ż«( ś¬" Óņ)LŹ%ļ\&ŗ‹Y‹ X[[Ó»woˆ›››EßB!ꦄ„ÖÆ_Ļɓ'ŅĻū@œ[yāŲĢ»FNpóuc±¼ó™čĪe’u,•’ģ"lllčŪ·/<ņUłR„õdØŖ§vīÜIAAAMCT€LžoO­VÓ½{wŗuėĘéÓ§9pąG„0EGaŠŽō_Æk­Am£A­Uc,2`(ŠóēųØJ„¢iÓ¦tėÖĪ;ćččXŻ/I!D dŹ”)\ŗt‰]»vqäČt³Š]Ģ@m£ĮÖĖk/{“VhlµØ­5 ōŠō”dQ”¦£čF’œńņņ¢GōķŪW>_„U¦V222X¹r%gĻžÅ`0ąėėK×®]éŪ·o„÷Ŏ;øvķööö„„„0jŌ(ÜÜÜø~ż: .dųšį“hŃĀģ¾ ąķķ͐!C8vģ[¶l!99kkkš5kĘØQ£šņņŗiß¹¹¹¬]»–ƇSRRBƒ čÓ§įįį·]våŹV®\Ibb"ĀĆĆiÓ¦ K—.%99™””>̌3P«ÕL:õ¦m²fĶŽ?N~~>>>>„……1tčP¬¬J÷¾­]»š4iĀŚµkIIIĮŪŪ›Q£F™½GŠ¢°uėVŽ9Bjj*<šĆ‡ĒŻŻŻTO§Ó±råJbccÉĻĻĒŪŪ›¾}ūVė*‰ū™LžļŽJ„"44”ŠŠP /^$>>ž+W®’’Bjj*śb½éé~777|||šõõ„E‹„„„ąääTCÆB!Äż¤I“&Œ7ާžzŠ˜˜N:ÅéÓ§IKK#?1‡üĜ[ŽÆV« nJĖ–-iÓ¦ M›6­¦‘ !ź³Z³ 55•vķŚaggGß¾}Q«Õ$&&²{÷nŽ’}Žxć  r¶¼÷Ž{¼żöŪt芁   ņóóŁæ?vvvüöŪoųśśāēēĒć?ן~j6ĘF1wī\žžy¾ųā &OžLėÖ­i޼9………DGGc0Ųæ?!!![rss銔:Ž=z`ooĻ„K—ųå—_ų׿žÅ{ļ½wÓ×̓>HHH:u¢¤¤„óēĻÅśõėū,'OžäōéÓ8::āļļV«åąĮƒå¶™ŸŸO·nŻøpį:tĄŪŪ›ŌŌT¢££éÕ«Ū·o7e>æxń"iiitķŚ­VĖįƇIIIa÷īŻōģŁ€^xE‹ѽ{w|||())į—_~ĮĪĪŽC‡įėėĖõė×éÖ­7nÜ K—.øŗŗrńāE:Ä+Æ¼Ā¬Y³īīO-VŽ™üWāāb )))ĮÖÖV–] !„ø'łłł¤¤¤’’‚N§£ØØˆĀĀBģķķ±³³ĆÅż¼¼äøX!DõSj‰/¾ųB±··W²³³ĶŹßyē„M›6¦Ÿū÷﯌3Ęōs—.]”ńćĒß²ķ^½z)Ļ<óŒ¢(Š’ššŖXYY)3gĪ4«“’’¢ø¹¹)Ó§OWEQ&Ož¬ųūū+F£ŃTgīܹеµµ’‘‘”čt:ÅĮĮĮTæLVV– ¼šĀ Š¢(Źłóē@ٳg¢(вbÅ ÅŁŁYÉĢĢ4»ļĶ7ßT¼¼¼nł:žžy„uė֊^Æ7+1b„ņä“Oš•učŠAyłå—oŁž¢(ŹĀ… µZ­ÄĒĒ›•oŪ¶ĶlÜC† Qlmm• .˜źäēē+ķŚµSF­(Š¢\øpAQ©TŹ×_mÖVrr²āźźŖ¼÷Ž{Š¢(Ź?’łOÅŪŪ[III1«÷Į(FIMM½ķøėŠżĒ•YYߙžū¹ąpMI!„BQK©k:q§FŒAtt“Å(VVV\æ~½Ņś9vģ%%%¼šĀ f厎Žōė׏'NIbb¢éØ1(]››§NB§ÓY“ćāāĀĄMķü™N§ĆĪĪĪ""„/3mŚ4Ö­[‡FcžĢĢŚŚšōōō[æš›8yņ$mŪ¶µŲźššĆćééÉéÓ§Me½zõ2;ÉĄĪĪŽŽ½{séŅ%N:…¢(§-ųśśņņĖ/ćįįĄoæżĘŠ”Cńöö6«‰Į` ..īž^Km'Ož…B!„QkÖyyy±téR^~łe²³³ÉŹŹ¢°°”””[ī§æ[ØÕjFŽiqķŌ©S4kÖ €Ī;Ó“iSÖ®]K—.]øqć{÷īeɒ%@éń~Ļ=÷œÅdžüłó7]^Š­­å™ć^ÉPĘŪŪ›øø8vļŽĶ„K—ørå —/_fłņå̜9“˜˜lllʽ÷©§ž"66–æ’żļųśśāāā‚­­-Ė–-ćāŋwż^@éū”Ü$M„Ńh4KJx'gŌŽÉ^7EQhٲ%Ƈ·øIXXŲmŪØKdņ/„B!„Ø µ&°{÷n^xį¦OŸnV~ģŲ±JķĒ××½^ĻÓO?m1qß»wÆŁÓēČČHŽ’}Ž;ĘŚµk6lööö¦vFŽI£FĢŚ9xš WÆ^-·’;v‘‘Į˜1cĢŹćāāhÕŖ'Nœ S§N÷)ŠĀž={˜3gO?ż“ٵo¾łę_½%ooļrßcEQČČČøi £<¾¾¾äå呟ŸozŸŹüķoCÆ×3ž|||| düųńfu Y²dI½J˜bŻwµåŠ !„B!„ø[µ&€^Æ7-«’cŁŗuėnś„ś^“lŁFc:E LII “&MbĒŽfuŪ·oĻ¢E‹Ų¹s'‘‘‘¦kM›6ÅĪĪŽåĖ—›µ£( S§Nå‡~(·’ØØ(^żuņóóĶŹ³²JĻ–żóžž?2 {ż322Ų¹s§Å{dcccń~–§E‹œ8q‚3gΘ•ļ޽›ōōtÓń‚w",, •JeŚ&Q&++‹ 6˜ŽlÕŖ[¶l!'Ēüųœ]»v1aĀ„Jżū¾ßÉä_!„BQYjĶ£Ō'Ÿ|’W_}•k׮Ѹqcņóółå—_°···˜(V„ÆÆ/S§NeÜøqĢ™3‡   ’oļ~B£:8Žē‘K HdšĘ†ų§Ų ŻňAÅKÄJ’„)ō"ń$ˆ‡jO‚E…ž†††H$Œ“N§Y²dÉ“oŌŚŚŹ”C‡Čd2ŌÖÖrųšaźźź¦õŪŃŃĮ‘#GH&“$“IjjjćŅ„KlŲ°¶¶¶YŪ††vīÜIww7Ē§®®ŽB”ĄĄĄQŃŻŻ ĄīŻ»9}ś4455±xńbr¹.\`ūöķ,]ŗtÖļ”$I’$=āyō;õܹs¤ÓiīŻ»GUUÉd’uėÖŃÓÓĆ®]»Ø¬¬¤··—ŹŹŹā^ü“'ORSSĆęĶ›ŸŪoOO .dĖ–-؁.^¼Ččč(!éģģœvą`6›åĉ,_¾œmŪ¶Mė{xx˜ĮĮA2™ …Bśśz:;;‹ƒķńńqŽ;F*•¢¾¾¾ŲēŁ³g¹sēwļŽeĮ‚“““ŠŽŽžÜż’šĻŠˆ””!ņł<‰D‚õė×S[[Ėąą`q€=Y···—‘‘&&&ŲæqŪ³ņł<}}}Üŗu‹l6Kuu5---lŻŗµø"įĢ™3TTTŠŽŽžTŪžž~FGGٱcG±,N3<<ĢŲŲ¬X±‚®®®§œ˜˜ ÆÆŪ·o“ĶfY“hk×®eÓ¦MDѼYø"I’$Ioy5 I’$I’^O8 I’$IŅ[ł—V“$I’$IóŁż(Ż z’$I’$ém4£åN!I’$I’ęT&n¼“š$I’$IšĻnDĄ•r§$I’$Isź×ų¹Ü)$I’$IҜźqG@x§Üi$I’$IRÉe€÷¢B8Uī4’$I’$iNō„āĒńJą:•7“$I’$I*”GĄŖĀĶ „pč+o&I’$I’Tb?„n„É’8ŽWóųF€Šr„’$I’$I%óh !\‡)KžCæߔ+•$I’$I*©£“ƒ˜² Žć*ą`å›N%I’$I’Jęw %„šēdĮS‡ž…īĄ_o8˜$I’$I*<Š1uš3œśBø tßP0I’$I’T€ĻBמ}0ćµ!„/ž4”$I’$Ioæ‡Ąē!„oł 3NŠćøų؜ƒ`’$I’$©4ņ@gį§ēUxį@Ē«€^ąĆ“$I’$I„qƒĒ{žÆ¾ØŅŒ[¦zreĄĒĄa<@’$I’¤·Åąkࣗ ža+¦ŠćųąKąf1y I’$I’J®||õä§ż¬¼ŅĄ¤8ŽWŸŸuÆÓ‡$I’$Iz%£@šmįę«6~­ €Iq`5Š4ļļUĄ‚Ó·$I’$I’SĄ}ų’®ēk!„ųu;ży/T2`żIEND®B`‚libwebsockets-4.3.5/doc-assets/lws_dll.svg000066400000000000000000000654251476025525100206340ustar00rootroot00000000000000 NULL NULL NULL prev next lws_dll prev next lws_dll2 head lws_dll2_owner count prev next lws_dll2 NULL owner owner tail prev next lws_dll next lws_dll prev (head) (tail) libwebsockets-4.3.5/doc-assets/lws_metrics-decimation.png000066400000000000000000002202751476025525100236220ustar00rootroot00000000000000‰PNG  IHDRąęšeG pHYsÓÓÆ"ŃGtEXtSoftwarewww.inkscape.org›ī< IDATxœģwxTÅ׀߻é $„Ž«4AŠ¢‚" "¢"ˆ°žTł¬ų Š]E„wDŖŅCé{æ?&›½Ł½wwÓv7ÉyŸgŸlfęĪ=»;wĪĢ™3g xItą‹@ "¢Śƒ °,BššĪv`Y¼ńNY?°,d5Īļ”o€e (”@(“ō"D`E€eĢ©\™ū~#°'€²„Ÿź@÷Ü÷«C”„Ō` “B™dš9šp ,iˆś>® ¬(B ĪöŌ%Ą²”d,”ŗZA("/å¾Ź;-@° 3`AA„m\h–ū~=pڤŒ\nų’š—E}M¹ļWi&u]“Ŗa@ ģ@­ečųF' pؚ›ÖčTC9Øm–9.×6z5³ØuŲ_€“>Ž»)Šؒ+ĆY Ų†śu“kZēŽĻADīßjĄ.e7äÖŠˆ#’oŌõ}WĖ•ł½ÜōóPfS€?°žŽmĄ…(“X5 kUŌē< ģVR°g/õ\5FÉŠ’ū8ŖMõ±žŠØē£ ź»×rå8 ģÖāžL:ˆCµorĖ&ņ*ąœnɕ+õ›5G9˜CõS’ŗŌō@µ×øÜϵXdūš™*¹Ÿ)õÜ;śŸ]×ŪĢ…†÷mČßßd œ(4Cõå䏘eQæ õ_˜+cLnYĒw½õŒ˜Qõ}{ļ ”_JąT[Ź@õ +’,ź)·˜yA_Ó{ī.‹ėšŹčØɊ¹eĪąģ˜Ü ģu©Ėõ•LEż°ÅÉÖÜśæD5¢÷ߏR¶ ō"‹rYĄ+Øˊ[€,®w¼Ž¢Öu]ė™ėå:櫇įŗU¹i?”Œ-.ewʾhHÆańF¼Ü? xõ@[q-jĄį©žsĄ›Ø¹°|Ÿ[×:T'³ĘåĒ\ŹWȽgŗŁžn5¹ß)/×?›+ēQO×n¤x֔;ß[Ö¬-Ā»teąU”B±ŖĖž{/OˁwPOŸ?ƒRĢ®t2”ķ’w!o0õū›ŻcŹé ”Ćc‚E¹#Ąõ>S<š!Ŗšō™¶7ø\«y¹Ęų:ģrķK†¼x¹BQJŃS½ÉĄ Ģūß[ åc=Ō—ĢĮsŸPī0SĄP£MųČāŗį¹łŁ†æf¤ 5Js(#wćŽ!% ĀaÜģbĢøĀāPĄ»Q³#Ē}N :žlCZ:ŖĆū×DŽ49ß°øß³.å²Qļ”7£ėēż†üĖEUĄ‡Pƒ ײQĄĻ›\ŸŽś½Žš|[P#jWn"’÷›–[ĒŌwšéRĻZÜo¾āPĄĒQæ­«üFвxó¢ŽŌoåśŗR «€+ąü­ŒßˁÜūš)Š…ų>t&æĀĢA †×£”Aŗ!Ż8hsUĄ•qZmŒŸm®Ü®ßyę[Ü"M&Ÿ1õœŹ½Ö˜7ͤ_šZĆū,TūK!żPJŃxß㨶žćrżeŸÉųŻŁsæ— Ø6µüƒ ;p£įś’RĄš‰Ėõ9ØļxoīgĢvÉ_в1*௠ļĻ”~³CødWPś¬Ā%†Õ>`ĒlŠÕ 汝Üü8æą^&åŚąüāŽŗq*½-ØY·k«”LIĘÅÕŌZ ŲńP ¢ łÕP3ZćĆažjŹ…żqv¼Y@-—{u1Ō³5ów°D}P¦(GYć «:Ź“ēxĶ-³Ä%½1ł;I×NżgŌ쳊ÉwāI_‚³Ó9„Ź”±ķ€_ õLq)†RjŽöu=ę£ė \źbRĘ ŲŲ\svcäVC¹y@=“2jęø3·\łJ qž} õ=IžßؑK½S eB)׎ŖjÖā褔ĢĘ%§Ņ“ĻąŽIG¢ēČ’ż¹*ąŁ†¼ÆQ¦c׎ŗ&š΁Uī³É†zV—ānŠF Ž e/v)ć«v(•öä’ż.A BŒĻż”b4~öŖĄtC¹_pg¬!ł—ŲPV‡Uéo—|c›1*¼±.y \®ó¤€ūņö¢ś#×g9Õ/÷ø”1Źćżjņ·ŪHT’h“šöY.sX)`ćl­¶ėE8”‡pš°ž0)7ĘPO{Cśµ†ōÖ&×ij(kvĀbTĄf£WĘą³<”›`(×ß%ļ‹Üō38×X­ØƒsfbµFĪNč;/õš‡x¶"xRĄoņ¼™?£P³„l“3ŌÓĻTĘ©ō_õRÖ £žĻ£ļOsĖ%ć=ąÄ`C½®ŹŌĮE†2®—‘œæł2ܘ+# õŽóR֌n†ė_ńRvø”¬«ŽĒi¹Y€w Õ†zn3¤ŪpšxpW®t6ŌćŚ.|UĄ»±^ÖjHž®§žaCn³%ĒrU"ŽÓ{ ÷33ƒz^ey©Ļ“ž.7=ƒü~ fTĮiÅ\ć’gTĄ‰x ¶ĀłĪórĻb„4zA’nxļŗfSõe‚R¾«rߛ¹½;®MF™\8œ2qń¹²µļķ ÜĶ,ÅĮ”Ć‘K ļ=5c9cCŌpZ¾AĶ€=q§¹¾ÅgvĻ&¢€ĀŠ#÷ļ.Ō,ŚiصuP³Hćlæ¾į½±M˜q 5hų5R/*šģ0sÕ”.Ą»ó×~Ć{³ŁtAč„sF8k#ópvų q?£%éM/e?AY<ĢčŽs@ć°yāԌņĖŻ5šų?Tį‰U(_ pöEå3”õΌżØØ§žaYīß(ÜgõÉØöō ŽÓż†÷Õ¼”-*Ž=Ä?ć=8ĢIœ“¶XZfaŻN@ł{lĖ}ßŲ‹Ņhļ^‰E]ł†¼ØŃ\&Ŗ­››Ž ēš…‡žƒü ŠŃy„£:d×Y’;ŽG{EĮ[4cg`YJuŽŒęōؙ8½­½įx(*¢”łqÆóÄ~ßFF™Š+öna•/(–£sŁļć5ßan_ƒšyD¢fšļ£œoö£:»āl˜QŠ6U „Ø* Ö+ :ĘJ(éšb”ĶŲFĀš­¤äžöXʇB’ĒRN¬ŚŽćłĪbs_ŽHB)`£ÜF Ā|c¢å¬šöÜ;ņ½m1ņÕ¢T5଀z¦cQķ)eę½ŻĒzŠŠqv}Ö²T~NŽW¶(ćK[ņe»V±S0(„ٵn‡sDŲ9÷ļźÜæQö’Ś(åģPĄFÓµ«Žr:y µ~ęźØs.·Ž”³ĖJ”ƒGFa?L1v4ÆRšµĢĀt°ÅŃ“–ZÄŗ’€Ē—QmęI—üt”U"eī^…ņ°,ź}}e0Ŗ]^ą§ūAžA–ŁģĀ×k zMŠĒRN¬°£mFPš8×Ęvml_¾*…ŅĀØ„$£ Ł×gŹØ€Ķv5€õ>ć€S׀Į©4m8× 4œ3ąÕ†²ŽYpgCšCŸÄ–·še;źI¦hJ¢}šš8­;ŪQ^ߞü®)q‰ĘA—ÕlÖć Æ$¢–(„Ug : +p®;ģQņ;?8fĄmPu Jy‚»łŁ ;Ź”ķfĻ–[ĒeĄu8ƛ•Œ&5_;¼`ĆhŖōµ£mŚvj “7'’r_ė\ŅæFmėźZæ*©5ā®8;’Gš~ÄcqZ¶mDC=;g<”-ėu¾¶G«Øh9}ķČ­0¶/«-8® Aµ‰ląŽ"Žæ$ø§¹w<Ž że)5Z3|żŻŒå|]¶J« œ3”ö(Åē01»z*:ā5‡ä–ķ†ÓTa¦€ē£L{_šä¹bG™ż@5h«Ī Xq„Śß·ōĒyģX/eża:ƒ3Žk]O “FE;»›ü#č·Pæ½§=ĪFü[˜ŠcŻk}(_Ō­GFŒžČ¾¶‘ēQķ£0ū£÷åž­okČV[}ė¾”ų®8g¢ä~ΐöį½Æķ«Ŗm¹†o Œ^ĶžnOžųēĘ5`ĘßäHńŠSņ”fģPž‘(Åźź€å g<čĪ8ĶĻĒ0w*‰Dyz^ā£FǁŅę¤q§cšÆf¦€(³ž)‹2޵²‹üāĘńūöÄ·m—ęžµ“ßZāšņ5‹˜d†ń·/ə”щėøćWūPĘøĘęéwŚdxo¶ŻĒjÖ7§„© 8ŠaxŖŅµŻĒ ćÖ_äŽD­³$š’m8æ’~>ŌcĆŁyŪF(Łž<‘ƒ3ül/|{mä8%‹”D)Ķ xN…w-ĪØU® ؘfTĄK1wÓ_Ÿū·ł#ā˜Q * ŌčĶJ!3Ž}ŌW¢Ģ²žŚDKœ‘“–bĀ1#m‡LŪŽĻP ŠŌÓ^Åv8÷Ō®'æŁŲńŪĒā4Q[Z‹e:ó“_¼Ø ·x)Ū‡ü{†­–™Œ§’xŠśµ§£ā3x__ƒsĖĻ"O-XŒsŻu:Ö3” صw++ĖjœŪ†¦£– <1§ć–16|2ĪĻq#*,¬'ŹųGåIAŚÓœ}½=yćŪÜæQ;P<õG÷ąģĻ¢š|Fi]5Š[Žš¹B–ó]Y… ‹×ē Éjżwj-&÷ż½Øˆ2ūq®QŌF™qść4Ļx‹Ś¬¼ ܁2弌2ż‚3{Ź„×5ūD5ō<Ō¹„č*£öd’‚2„£¶ny QYP>CÅ!nƒźPz? :š$”BˆCĶ–®ĮŁī'»Ōć0?VAuŚĆPŽ {Q߅§CÖ 8Ķ_ļc¹Ø8ųµõ©.šŹāó3jğśžk£:¾+reu(«½‘'PV ź(’…?P³]Gļ8-DQJØ J±żŽz¦Ž žĆ ؽö]qvˆ ĄĒ…ų¬'PmņqŌ z;źwŁ‚ś-ćP'ž B)ēLĢ\z®ÜŸ£¾›MØßr ĪM*¢Ģź=PĒń²¹.?MBĶĆQŃ·Ę£¾ƒ’Pæ{,Ŗ]tĒ’łžĆĆ’EØļ2²ź»9ŠjOUPmķJŌļ™Šs­ÕŖ=DMˆ* ö ×EµŸ£ØAҧ8—<ńjWµåī&T’qē³\ ÕÖßu:jėØPŒXł6ņ0łcĮZ=ŲŠ„œŽzˆ­čƒļ'ĒčØu¾˜K|Å z‰—rdhą”œńˆĘ1&ł­ÉŠ‚§W&ŽKZ’’'ćėC9G,h3«…+ŽNCjŒł‰5fÆl¬ƒ%t%@}oÆļ)üq”ŽXо˜*/CEĢņ&OJ9Łs’å”Ī; å\_®ė—Ćq?üĄź•€µiŲBPĻ”·ū¬CĶ8’›­߇R*¾Č½ė~aŽbt¼Žbn)š5ō28pČš§—r“ uŗ:(öĮūъ:jieØį’›±ę!õcV{;ް#jpéĖw}čmR‡1tG“|W~Ī-[нīE"˜gĄKQ”'՟P£4Vq€÷£¶Ų8fæg°>d`!j«É-ØQķłØ‘Ÿcmć j„»5ūZfRGQX]oņRīN%ķi–j(gŽņo”¾՘/$D s(%ń*žń>/rķ@u(÷”¾æ8æ;£™Ž±Œ°ÓK}äŽßń̶ģE=hżP' µFĶJŹ1=·ĢŠÜĻ`uĻå(/遨¶u>jFąčÜĻ¢śMؙ’ėQ–as®|¾b’j†? 5śÆÓ3: Õé/GÓ¹5«­ŽēĮĮūØļa$Źē”6Źä—ƒūžŚ9(“źmØ5ōóÉ…ģxn]?”f¾V„ūBŹśšŹŚ 5S CķŻ’5xyµ¬ähf[¤Ž@Kž[¶E®Ü޾ļ(źūZˆ:VÓjĆ×(…7 Õ¦›£Ś…cąķk1*zž™O@²AV×0’g yŽÖ2×¢~soį÷źtŻW»õŒŽB)ĒšØŁ„ž[÷T›ū50„z<łX¼„jÓw śZØŁo6łū§ r™ÉXƒś~‡¢,:­Pßuź÷IBõ1ĖPķŅ,>÷†{x‹ß źyÖš=Ś™ ‚ „•R9¤‰ł1‰¾ą8š]A„Ņß×]_@^A!ópie'ž–C”ŠŲ“5Anl@AŹ#¢€A!ˆA„ XA€(`AA¢€A!ˆA„ XA€(`AA¢€A!ˆA„ XA€(`AA¢€A!ˆA„ XA€(`AA¢€A!ˆA„ XA€(`AA¢€A!ˆA„ XA€(`AA¢€A!ˆA„ XA€(`AA¢€A!ˆA„ XA@h „āäģ™3$%āܹsdff’’‚]·EDx±±qDEE_¹2aaįY„rŠ(`”Ԑ‘‘Īī];Łæ/‡$įŠA:HbbIII$%";+«ĄõVØX‘ųųŹTÆVƒ:uėQÆ^}źÖ«O½zõiÖ¼%µjÕ.O#ByG°”¤„„±yÓ6lXĖöm³cĒ6öļŪCvvv±ßėģ™3œ=s†C°aĆZ·üJ•āiy~+Z¶lM› .¢}ūŽ4hŲØŲå”|! X Ī;ĒŹ°üĻ„¬_æ–m’U"ʶ0œ>ÄŖ•ĖYµry^Zµź5h×®;]Jž—Ó¤IÓJ(BiD “f$&&Fēh9„’åĄž}ü¼ųG~’} kVÆĢ[³-Ō«ß€=Æ WÆ+¹¬{OĀsך…ņ‹®iOÕÆ7%ŠrĮ‹(`ĮÆ$&ę§ægį÷ß²~żt]“HÅNÅŲX®ŗŖ7}śŻ@½ÄÉ«œ" Xš†(`”ÄIOOē‡ļæeŽÜXæ®ä”®Ķ¦Q„RŖÄW &*‚Čˆ0¢"•ņÓ4pÜ6)9»]ēä鳜L:KjZÉͼ+UŠēʛqĖŠŪiÖ¼E‰ŻG>D Ž,”’ģŽÉĒs>ąėÆę“’’\äśl6&õ«sa‹ś4®_†uŖŅ°nUŌ©JĶŖqT®SØzÓ3²8yś,O²?įūŸ`Ā ¶’›ČÖ]‡H>“VdŁڶķĄ-·ē†ž7‰‰ŗ Xš†(`”ŲY¾|³ßyƒ„æ/)Ņl÷¼5črÉyt¹ä<.>æ­šÕ!&Ź’ŠkĀ ¶īN`Ż_{Y¾žÖnŁ[¤YsÕjÕ1b$ƆßI||åb”T&D Ž, v»…?|Ē›ÆæĢ¶m[ UGń\sY®¾¬ ŻŚ5£fµøb–²xČĪÉaÓ¶ƒüŗr;‹žŲʊ ’“Sąz¢¢¢øyš­Ü{ß²×ø " Xš†(`”HčŗĪ/?’ČiϱcǶ_aĖzÜÜ»}z\ą-ė•€„%Oņ™4–¬ŲĘ×?Æēū_7s&5½@×GDD2ōÖŪ¹oģT«^£„¤ü(`Į¢€…B³jåržņ$mŁT ėš5ŖÉŠė:3ØOGš7®YB҆“ōL~Z¶•Ļ~XĶ‚_7‘‘éū^樨(FÜ1бć¢BŊ%(„ąD Ž,˜ÄÄĆL{q _5ßē5ވšP®»übī܃˻œ¦eÓ+VN§œćó×ņę'æņ×ĪC>__™ń<Ģķ#FR‚ %‰(`ĮAŁ ŠNŅÓÓyķÕéĢžõ&¾™YkWÆÄŲŪ®äīĮ= ķ„\X¶v'/ææ˜~ߌŻīŪ „M› yöł\Ҷ} K'”¢€oˆ|bÕŹå<2q<ūöķń©|›ęuyčĪkŅÆįańŌĮī}’ńņ‹™óõrŅ3¼a³Łø}ÄŻ<üč“ÄĔßLiD°ą QĄ‚GΤ¤šģ”'łtŽĒ>™›Ļ?Æ6“Ę÷ē¦kŚ• 3saIųļĻæżļž™YŽ×‰ėŌ©Ė S_”gÆ+ż Pˆ¼”=¤(ąą`Ķź•Œ{7‡'x-ŪØn5&?П[śuĘf Źf”ģO8Įä7¾cĪ×Ė}2M»ķž|ś9¢¢¢ü PD ŽŹžRp`ÉĪĪęµ™3xķÕéäxŁßĮ„‘×ņčØ>DF„łI²ǦķøŹ<žX·ĖkŁóĪkĘko¾K›6śA2”°ˆ¼a “BpqųpżÆæšW^zŃ£ņÕ4Ūś_Ź?æNeŅøDł‘‹ĻoĄ²Oćó×ļ„nMĻѱžżw7×÷½’÷ß{ĒOŅ ‚PˆņX½j}{÷bó¦ Ė5Ŗ[ÅN`Īō‘ŌŖ^ÉOŅ•^Ūž]æ¼Č#£śx4ågee2é©G¹oĢ]œ;wĪ ‚P\ˆŠu·ßšÉą›ÆćÄńc–åBBl9”E>äŃÜśtC‡ ą›Æ?÷£t‚ QĄå”„C¹įŗ«Yµr¹e™Čˆ0Ž}~_¼qo¹Žb \Õµ5¾D×vĶ,Ėdff0~ģ(Žxże?J&Ba\ٳēnģ-’žc½å„nĶŹ,÷(wŻÜŻ’ žØU½æĻ}„GFõ±,£ė:S_˜Ģ“O<\¤³˜A(yD—3vīŲĪMś˜xŲ²LŽ-Ųøą:^Ųď’ ¾Ā‹ņÉK£1G B" ø°gĻ? |ƒ„ņµŁ4Ž™2œ™O•JMźWēĻĻžąāóX–łbž<žyś1?J%‚/ˆ.ć$:Ȑ›Æ·4;‡†„0gśHF éégɄā¢ZåŠüöÉ#t¾ų<Ė2ļæ÷Ó§=ēG©Aš†(ą2Lrņi†Ż:#GMóĆĆBłlę=Üz}?K&7•b£łyĪzt“Ž«żŚ«Ółä’>ō£T‚ xBp%;+‹{ī¾Żr«QHˆgŒäĘkŚłY2”¤ØÉĀ÷ä²öĶ-Ėüļń üņĖ"?J%‚¢€Ė ŗ®3qĀXžüs©i¾Ķ¦ńįŌ»Ō§£JœčØp̾Ÿvm™ęēää0īŽ»Ų¶m«Ÿ%ĮQĄeŁļ¼Į—_X‡—|sŅm »AĢĪe•øŠQ,śš!Z5­cšöģYīq §Nō³d‚ \ĘX¹āO^|įĖü’Ż{£o‡«²N•JXüŃ˳…qļč;<Ą!BÉ" ø ‘˜x˜{﹃ģģlÓüA}:2łžž~–JujÄóݬńTˆŽ4Ķ_¾|3ÄŗN%k IDAT3Z†(ą2Bvv6cFąÄ‰ć¦łŻŚ7cĪō‘²Ļ·œqI«|6óBBĢõ7ßx…_—,ö³T‚ €(ą2ĆĢW§³aĆZÓ¼ZÕ+1ę"Ā%ĀUy¤OĻ --ŗ®óŠ÷rüŲQ?K%‚(ą2Ąśõkx}ę Ó¼°Š¾xż^gÉ eŸĒF÷µÜrvņä øŒ„«?# ø”söģYʏeéLóŚS·riŪ¦~–J64Mćżī¤Y#óøŃĖ–žŹœŽõ³T‚P¾\ŹyįłI<°ß4oĄÕmÅćYČ#®bŸ¾zåaĻ?ū“e[”ų\ŠŁøaŸ|üi^ńĢ~n„Ÿ%‚KZ5`ŹLóŅŅŅxxā81E ‚Ÿ\JÉĢĢ`ĀCcMĻzµŁ4>žq·Ē³b…ņĖ„»®åņ.ē›ę­Xžß|ż¹Ÿ%„ņ‰(ąRŹ[o¼Ź?»wšęŻ7ģ zunég‰„Ņ‚#iÅóżĮĻ<ż8Éɧż,• ”?D—BŽIäķ·fšęÕÆ]…g¼ŃĻ „zµ*óÜC7™ę:u’—g¼čg‰”ü! øņܔ§8wīœiŽ“†YĪlĮȽ·^né!’ńœ÷Ųµs‡Ÿ%„ņ…(ąRĘśõkXšŻW¦yCśu¢_Ƌü,‘PZ±Ł4f={;”!!nyŁŁŁL™üæH%åQĄ„Œē§ó‰[Ž–Ķłż·_čułUEŗ‡ īˆ ŗ”°ä—ElټŃ4ļéq7īg‰„²ÄØ!=i\ƚiތéĻKpA(D—ŽxżeÓōóŌ`ų€Kż,PÖ į÷^gš·õÆĶü±ģ7?K$eQĄ„€uėV³qĆ:Ó¼§Ē]oźÅ*å¶ž—Ҽ±ła ³ŽyĆĻŅBŁGp)ąŻYoš¦7kT“!};•Č=ÓŅ3IJN%łLZ‰Ō²srHJN%)9•œ÷ž%Eņ™4’’SÉĢŹöŪ= CHˆ'Ę˜Ļ‚—’¹”;¶łY"A(ۈVs`’>~^ü£iރw\MHHŃĘPūNšŻ’lÜv€Ķ;rčČ)N§œs[ó ”Rl4ukĘÓŗY]®ģڊÆiGLT„[k·ģeĢÓ›Žļ™ńżéÓóBŸå{ņ•ÆłiŁ_néQ‘į,łųa"ĀŻ›pŹŁ4üŗ‰5›÷²iūvķż”³i¦ °Rl4Õ«ÄҼQMŗwlĮͽ;xō&ℯXüēÖ|i‘a,Ÿ’›¶ąÓļW³vĖ>¶ģ<Čé”üS¢"ĆiÖØķŪ4f`ļö\ÕµµŪ=¶īJ`Ä#ļåK;u:ÕTžÆ­gŻ_ūLón¼¦īkłYĢÜ·#O¼ō%‡ŽœŹ—®ė:³ßyWf¾S śA°&(÷$&&FēmŽć”3žöiÓ°“Õ*WäĄ/Y8ē«S§S7å>ż~5v{įl*WŠaĘ£ƒqS·|éŁ994¼l‡&¹]Ó’Ŗ¶|żÖXŸźĻĢŹ¦f§ń$%»7…a7tįćwēK³Ūu¦æū#Ͻõ=gRÓ šIœ„…†0jHO¦?:ˆČˆ0·ü[x‡OæĻæLÓ4Īž5‹±“’æ\^ ‡„+.mÅü™cØ\)&/mõę=t¾iJ”ä7RXéļżÄÄ组‡‡G°nćv*W®RdŁŹŗ¦=UæV\ŃH”Ģ"3ą &;+‹/æüĢ4oĢ­—ZłžH:C×AϱkļES§S¹ćŃ÷9v2…GFõÉK aÄMŻxöĶn×üøt IÉ©ÄĒÅøå¹ņÓ²æL•/ĄČA=ÜŅnų]žļŪ•¾²²sxć’–°kß~|’AŸÖ×u]§’=Æńóņæ |æ%+¶qĆ=3Y6ļ± Łk;jHOž}sŪņCffß|żwŽ5:@’•S^}7v½±Oesōi¼Ņå”÷‚ÅČŲÕ±DčēOŌžfF'÷}m®L\u)š~5hMѵH MOAg”¶Ļy”ćIó{žAdü  w[m Č=åœūžŁķ²ņ]3aÕĶĄ%čö·yéŅ嚰ņ~Šj’ö¤[=ň¬1‹’ČńcGŻŅĆBC5øG”ė?en‘•Æ‘Ē_ś’Ūņ·ē;vĆfsW(™Ł|µx½Oõ~śżÓō–MjÓ­}³|iŸ|·²ČŹ×Č/Ė·1ćŻE>—/ŒņušēŗŻ,ųuS”Æ/n*ĘD2|@WÓ¼OēĶń³4ŗ>G|zE„Uņ»|”öŠī²č7x¼fŅļ‘LXõ°]{Į _śMčÜ ¼E–}?Võs»öĮ5͈Œß|ŚxŠ‚~µśĖč|E\ÖfZŃĄåŹŽh<‚ĶV×ėgŅ“;Šx„˜Ģ¤ŠbęĶ5ļģśöŗˆZÕ ÷œL<Ég?˜+¶Āb·ėLšłM¾“Fu«qE—V¦åē-0ęeäLj:ß’f®”īt™[Ś“ŁęėäEaźģ…¤¦e{½f|·$x0Ą]7w7Mßµs6¬õ³46żRBB›x|Ņł]®øŒ£y÷×5ϊ×Į¹ˆĒѬÅnļNzR$Ó;G1½³0­&h÷£†Ę\^^;ļŗIŗū§@Šg£å“`z'Ó;G³’P(ēƒö1p>6ŪG%ńq‹1A)ĒeÅņe¦y#™w޾°dÅvĖ5ß[pe×VŌØG|l ±"ɱŪI9›Nź¹ vķ;ĀÜļV¹9čü“l+Ég҈«å”spwәᲵ;9|4‰:5ā-åüö—œKĖtKå¶žł÷=';ĶÖ]īaš6¬Į€«ŪѰNUā㢩WMSžÉéY:rŠænbզݮ=rŽE˶rć5ķ,åt„E“Z\Ń„ĶפRl4a”!;y†#ĒNóĆļ›-åÜš÷ž¼÷q£øāŅüƒ—Ā„¢lŃøš!*Ū4ÆKĒ ›°fĖ·¼o¾ž‚¶m;ŗn”č¶ƒLmoŽ€ ĖckŖ©×ą„NŪ ]ǤžŁĄ^^So>?A×Fg°‡õį„v'ņå?ßé(0“ «cŃōÉ2 ˜ @ښ.Ą%čŚbft•ļŗ/nĪv€~;W·zšČŚVLķ“īū¢€ƒ”. ''Ē-½~ķ*¦ž³¾ņēś]¦é“ĘŻĄÓć¼^Ł›Ö×>Aā±ü¶gēä°yĒŗwh‘—vŻåS½J,ĒN¦ä+k·ė|öĆŗóĖūø::9čU[ŖĘWĢ—öē:óĻtYūęüņńDĀĆ<7óGFõęĘ{ßą›Ÿ7øåmų{æO 84$„§ŻÉ­×w±,óģƒ72ö™OxkīÆny'“Īę½o٤6æĢ™˜/īw«LCQöķua‘CQZ1rpwSüćĀ<3łEBd’yp3I·‘ŗźF4ķ&t­čńh¤¢sų4;Łö)ŲŲ”Ģ~F3ÖiTCēk7åkDć3`2ŗŽ ‡¶Ū{6żSėh:śŖłhtĄžÓ (ŗžøśF`YægZ§’+hµb‚R,ųŚ4}ču‹“õh‚y{ægh/Ÿ®‹”wómDē÷— µŒŅ5oĮ*Ė{?u†_–›?3f¦Q×ū:øóę˼*_P^ĢCÆėlš·’°u’`dō-==*_PĒ’=yŸł>[™ŗ ĀĄkŪ›z‚?v”Õ«V@"”@œ[żhŸc§7虡tż$:ēρžššö¤ÓŌ!Ōīf'#1÷z^yćµŗ—km¹łē^Ī|4ż “×õ D·_P˜JE!GžĒśuęė“{·/RŻGŽŸvK‹Œ£z•XŸė°Ś'kę±|×Ķę'élÜv€{Ž˜ÖółkÉ6™żŸ× ½:·tK7ūL ¬¾R·–¹9ÜuÆ®NaVŌ¬GŘH·ō`Œµ[!ŹŅŚņĆ÷ߘ¦ AĀŲÕ±čŒ}!au™Ž¹Ó;`z—«™Ń¹)šž0š¶i~ń«lšM×IńXn’fR€ź†ŌŖŲtĻ×ęŲBuå|ez§Lļ\9ßĖnæHEē,vŽ/Lµb‚B–ü²»Ż=RS“śÕ¹ų|WǾ‚aŠ!+;‡&='š”6Ē*:VŹY÷½·ĶÕ¤{‡ę,]³Ó-oŽ÷«˜|’·t+óó/3UęVA*n}p–i 3²²Ż>Ø ¾P£Ŗļ˜°°ŅcŗŌ§£©‡öāÅ?ņü‹/ĶÖ©r®’ĶÄUÖ!Ü4¾dZgµ9>&¤*9Ł”čŚļLm—ģV6Ƕ›>ĶēķMʼn]D4/ X‘ Ō]M”“I¶¬…œt¢Mr—3ŃŚēwÆƖõ¦gF÷ĪD!K_bš>ØOĒ"×m *'ĒĪŽCĒ‹\·wŻÜŻ\/XĶ3ćūēėÄ>ÉŹīքАKs¶UˆG³@ ÅיiDø»©¶,Šļņ‹ˆŒ#=#’VČćĒŽ²}ūß“jÕ&@’•Gōæ@ó°V”;C¢e‡EĖĪB£“¶…3©U~FĶŽ-7SbÉČźM³)˲f>źĶO`c“ŠA·!!žÆµéY耦›vĶĖŚ’~g™—õ,Š 9ĢčböĻDŁYY¬Xń‡i^æĖ/*zżŁž‹ģą¦kŪs’³óÜ|ßsšk’ŚKĒ ›ä„Ķ]°ŅTé]w…õÖ«@|¦ņBŘH.kßÜܛ}鯢€ż‰f»…i|ó‚NÉŹ$Ž@R“w0qõ°ŸA×"ŠhtŽ–õm Jl=M)»µ‚s¤ēš£”IJ³ÅÖ߅Ż^ ĶŗĶl éI¦wņģÄ0qÕ_€yćžøņ`°¢ļõ"æGd 8ČX·n gRÜ­+•+ÅŠ¾M£Hä;VÖȈšP†^oīääŗ'Ųj²Õ¾T”ä¹¶»¹‰•„Fb³fv0“mĄ% ]ƒ¦wC™qgƒ½3/\Vr¦/+t’r’ś²nœ<“\³V¶gå­ŪrGėö¢›ĮŒ<¼¼6hs€ lś f\X¤É22–[ģż½Ŗkė"¼įęq[!:’—\äŗŪ_`=@9Ø;3?śŁ-}žĀ5¼ōų`BCBų{w‚é>ŁuŖpu7ė™Vt”yHĪĒļéGƒ:E‹[\³š/ƒō²ĶµŻ/ąē湄Æ_·–ōōt"#ŻŹ„£q9𾇓¤Ł¼Žūõ@‹“’¢hõ=–»}-Č œ{į“ÜkķZ=×jz}5ĖÖÜ÷Ń–Ÿ‡ ‡|TGÓF1µóVÆ×xAp±a½ł ššĖŠĒŌg¦¬4 ī.BhK_hÕ“/>Ļ-ąÅŃ)ü¶jWumm!ė΁ŻMĆZ:ˆ‰v?‘  w ø“mSÓ<Įwš7®IĆŗUݶ°eee²yÓ:u6_›ˆ®Æķ&"擘°ź0I 'åĪ “€Ćč¶MT蹓Į¼ėŅNo!2ž p“ÖG3©łVƒšģžč€Īņ¼4]_ž«XÆÜO q åFä²éĖ-Ė”†uŸzó™ÖivqT) 8ˆČĪĪfó&÷`—uh^,÷0FŖrp.=]×}öhżų›¦q—Ē撾½¬×©ļÜĆ4āŌ¼«¹ņŅV¦ęē#n2KģĄģ3AĮöÖn’7‘ńSęŗ„w¹ä<žßßēzüæĪīÖ®™éņuėV‹Ftżu4­°[°f‹½&č­Ak„f&uõ/*޲¦óąšfŲģw q”é_)1Ł^ļĮÄUŸ÷šõ1÷ÆĖ«ķ {u‰«ś ėĻŁŲpĘ䍉ūŌ”} bĀŖõd$½Éė½ś¤õќĖzk@ßFTgļqo}aāŹī =ģ!]»ŪkyDlß¶•ŌT÷%…UciT·Z±Ü£e“ŚlŁ‘?\lNŽõ[÷{4!łuåv–¬p”qß°Ė=^wsļÜ’ģ\·mL_/^ϰŗ°/Į}9źŚīP·¦õł¼`rqõ¦=>G Ū²ć égjRæx¶–VUŠ›KŪ65tYķWJ]?äuūŒNOft^ŠĶöš'Ó;_iZnŅF}śZs /±œĘ =ś6 ä0@HöŲC; s#aY˜øź0p ōX]“XĄÜĻ“Ī;œr·ŹdāŖa ż€¦æDdü L\utbIĶjˆ:é8vŪšb›ŻėŚ84B€ŹDŚ71ŃåYŠm1£Sž'¬ bÓFóS‚ŠÓŒzA ó„“”¾Ć·ælōøļõ`āI^łp±„£TĆ:ž ŃQįÜbqźLj:£ž÷‘é5¾Ä½¾°„łRŅ‹³ņڜ_HųĻśt¶Ó)ēųęē <žŅ—¦ł ėTõz`µwx隝<:ż ÖnŁĖŽCĒIJN%)9•½‡Ž{üÜÅŖ nܰ®Ųī!X²XāÓ+ˤöĢŅ Ć–5Nź™ŽnW§jhŗŠBc×O‚¶9wæmįČ&EÉ¢’å±Ü‹Ż’ˆNļ śh|śyNYš¶ō™`oĖōĪīė×Ó;Æ@ĖnśÓĄočœC×ćŃ8‹¦’Œ¦?NhV+^ź”ߜرX‚-Ä{.c'S؟p‚¤äTÆŹ·y㚓mŻŠ'YKšVM«ąl6 š›[OvX“[!€h żą^t¾Bćl¶µ`’?SŠ9‰n»)ļ@„l[4°€˜Š»)zyBp““Ćī];Ló|™Y„X,[šŌØĖÓcÆ÷¹¼/fe›MćĪ›ŻĻżµbģmWZĘØ. 6›ĘO šP‹ukV¦ÓEŽN%‰U;ܹ³š'Ł %Ä“Ī;˜Žår²õJ`æMėZt®D³µ''¤>3:7eFG§éä„.;™ŽłmKÆd”ŲtpąĄ>ŅŅÜgš5«ÅQ­rE“+ OŽ-˜÷ŹhīzģΤŗĒo. źTį§">.Ęēk†ōėÄCĻĘŁsÖ÷¾¢K«9žU®Ć/sęśŃƲkļ>_gFDx(N½ĖķLŽ@óö”į\1l'OŸõ^ø°TĄ;D-ÆtI6Z Į™ ū÷ķ5M/īŁÆƒ›{w`ē//ņĘ~\ŅŖOęc!!6ڵiÄ+OÜĀöE/вIķŻ»bL$ƒśx>Š}䱂G¾jŽø&›æŸĀŪ“‡sU×ÖDEšč°¢QŻjŒæż*žłuCśłļxT_¹Øe}6|÷ £oéI•Jü~’6&čżūĶŪ® ž ū𠉉‰Ń9D)ÄWic·ļņæ'ÜO$ŗgh/Žzę¶æRr*O’päGO¦“c'=#‹“ōL*Vˆ$4$„Ŗń©[3žfjR)Öģß9“šĪńSg,óė×®ģÓśÆ'22³Ł{臒K"ńŲiŅ3²Čɱ“r6Čˆ0¢"•CVƒŚUiTÆŖ×ķNĒN¦pöœūžā:5ā}>yiĀ ģ.ń®mšFĆŗ¾{\ėŗĪ?ūņļc;™ĀÉÓgÉĪ=ŃIÓ4*ÅFS§F<}zšŸŻ\ŽžH”f§qnéUŖTeóVĻdz–GtM{Ŗ~­øoMŹb‚2M÷×6˜ųøāćbøČbKOqS1&Ņō\Üā$"<”–Mjx†ī‰źUb©^“č–R“VhšF³F5iÖØf‘ėņ•Uc‰‰rezņä RSS‰‰ń}B1A ‡š¦Gg-ŅUlķĆ ęHA¬$I4?–3XA@£zęŽq‰‰¾’'‚QĄAĀɓę!å4!˜ØYÕ¼=ž:UØ@@‚P®$$%™‡ ¬ļoWA°ĀŖ=&%ﱫ‚PäääpęLŠ[zdD1QęGķ B °Śžd5€ĮQĄA@rņiģv÷C;* ø… ųƒŖńęAaNŸ–° QĄA€Y,€X‹ü‚(*Ę[dŅĪIōBA((¢€ƒ€¬¬LÓōš0٦-VĮF23ĶŪ° ֈ²,:/QĄB°aÕ&33Ż£ƒ ‚ąQĄA@†…ö5“” ų‹ˆš0Ót™ BĮ‘>ŠM°¶’{˜ØV#IĻČņ³D‚Ÿ°ŠźÖ¬LæĖ/2ĶĻÉÉń³D‚Pś„…™ŸŚ“”,Ž-Bp•Ć¾„ć¼6ēÓüšš‚<%‚˜ ƒ‚0 ³ž ”D BĮ„[Ģ€”“.c” ˆĀ#¤óJ72„‚# 8ˆ5p"[‘„  "<”†u«2ąź¶¦ł±qrhˆ 鯃€ØØ("##IOOĻ—ž“cē܎÷ d‚Ÿ§g~Ć׋7ø„ĒĒW€4‚Pŗ‘p`ցéŗNRrj¤sNœ:kš^¹r?K"„QĄA‚Uv"ɼĆ„@pņ“y{¬T)ŽĻ’BéGpP„j5ÓōCGä s!x°jU«™·_A¬$Ō«Wß4}Ā ?K"Öģ³hõė7ōÆ ‚P$Ō©[Ļ4żĄa™ ĮAzF’OvKˆˆ¤ZµźHJ7¢€ƒ„śõ˜¦ļ=tÜĻ’‚9ūN ėŗ[z:u±Ł¤+„‚"OMPƞ¹ޱ'ŃĻ’‚9Vm±~ƒ†žDŹ¢€ƒ„fĶZ iš[śŽÉĢŹ€D‚Ÿ-;™¦7kŽĀĻ’BŁ@pP”bEźš8beeē°sĻ‘H$łŁŗĖ\·hŃŹĻ’BŁ@pŃ¢Åł¦é[w%ųYApēļŻ‡MÓ[“4o·‚ xFpq~«6¦ék’ŚėgI!?IÉ©ü{ąØ[zhh(͚5€D‚PśD\pĮE¦é+6üćgI!?+7ž‹ŻīīŻ“is""" ‘ ”~DķŚw4uÄŚ²ćgĻ„›\!žał†Ż¦é:uń³$‚PvDT®\…Fšø„gēä°v˾H$Š•ž5MoŪ¶½Ÿ%„²ƒ(ą £mū¦éæ­ŚīgIA‘š–Įš-{Ló:t”° QĄAF§N—𦒓ģ/?K"ŠßVķ #Ó}/zŻŗõØS§n$„²(ą £GĖMׁ7m?ȑc§ ‘Pޱüõčy…Ÿ%„²Eh ņS½FMZ¶lÅöķēK×uÅžĶķ7v dž9pų$9v;5ŖĘ`‰|ćDŅvļ;Źį£I¤gd‘™•Ml…(*DGŠ“a ׫ŽĶę> * GŽ&-#+ļ’Ŗńˆ­U¬÷(N-ŪjšŽ½Ēå~–DŹ¢€ƒ=ÆpSĄ_/^“ ø}’I?u€Ļ_旁ׯsŽ®ė|ōÕrf¶”Õ›Ķ×6ŌŖ^‰!};ńų˜¾T©T”Č÷^ŗf'Wß>#_xŃ·'gō-=‹\wI°qŪö%øĘ„—^‰”ģ &č ¤×åW™¦’¼üoN§œó³4ĮĖÖ] Ģžl)³?[ŹĮDߎmLMĖąŗQ3¹ćŃ÷½*_P³Õ—?XDó+eŻ_EóDß±'‘c^/U±½?’q­iz‡Øėgi”l!3ą ¤}‡NŌØQ“£G’Ė—ž‘™ĶwK62|@pĪ‚żĶÆ+·óĄsóų~öżŌÆ]Åė5w<ņ>?ü¶9ļ’N5”’UmiŽø&±¢ !-#“ż 'X¹ń_¾^¼ž3©éœ<}–Žw¾Ģ–…SØ]½Re=v2…>w¾BRr*¶¬Ē–걕ƒ‰/ZgšŽ·ļ ~–DŹ¢€ƒ›ĶFļ>×óį³Üņę/\” x÷’©ygÅĘDēśļŖM’ęĶčb¢"ųöq\q©õAwīĮ‹rŻØWY÷×>N$į„÷ńŅムtß“ōL®»{fž)÷±Ń}‰‰Žz¼fĖö<ę–µ½ū@"A([ˆ :Héw]ÓōŸ—’ķ³¹ÕŸTŠ&>.†ųøĀƂs\÷īüeyææGåė fµ8Žįμ’ų}³‡ŅīŲķ:·>4+oķ >yī” TG2%[5 IDAT ųą‹?MÓ»téFÕjÕż, ”=‚³§hŪ®µk×!11’ 499v>śj9O½>@’™“š–Afī^ŃøŠŃł<‡³sr8sV…ŅŒ‰ŽČSŠié™lŻ•@ĀIÄĒEÓŖiŖW1_[ĢČĢę\ZFŽ’i™yļĻžĖČ3ļ:0Ź‘“Ć?*sj…čHFźīógkݬQ‘ᤄg²ēą1t]7Ż*fĘÄēóõā t¹ä<>šv—Ļ×’³ēŅłģ‡5¦y}-‡‚  QĄAŠĶf榛oįµW§»å½÷ł2žӏą1` Ÿų._-ZĄ«_£FU§żcķn.6€yƌ¦[ūf<ūę÷|ō՟¦Ś_Ј) ąźnłO‡śæoW0ņńMļ?äž·ŻŅW¾J­ÜõŚŻūŽęÅÓīrÉyŚö£iŸæ6&oėŻ®ā]‰¾5÷W^ž`MźWēŪwĘęó}Éü…kI9›ę–Iß~²ž+ÅAšōą‚C† Ćfs’‰9Å¢?Ģ÷f;[w%Šī†IĢśōwSå °īÆ}\{Ē˼’ÅÅvßæv:×[;^ŌøĄ×÷ķuÆmĻĄkŪū4šYųūĘMž @åJ1,|ļAŖU®XąūŠYŸžnšŽļśÄĘĘłYA(›Č 8ˆ©[Æ>]»õąeæ¹å½üĮ"śō¼0R©³b·ėōźÜ’ŪoģF«¦uØĶɤ³lŽqŁŸ-eżÖ}čŗĪøÉŸpŻåē)®®m›1ėŁŪóźśuåö<§Ŗū†]A›ęłĆ"ĘUŒĪ{æk÷ė¹Æ_žw<™ĆG“ČŹĪ!,4„ųøź×®LhHH?ć¦ķ<žmrr섇…ņ՛ciŽøfė ¬Ūe¹åź–”Ćż, ”]D9Co½ŻT’¶j›¶ąāó@ŖĀc·ė<2Ŗ/N˜/½q½j“æ wÜŌc^gĮƛ8—–ÉW‹Öē©hѤ-šŌŹ»ę\Zfž¾ŗ[kśö2?O å¬ó8ĒŚ5”Yś·U;x{īoü¶z;§N§ŗ]Jē‹ĻcpߎŒø©įŽ—CGNŃ÷®W8{.MÓx÷łōčŲĀėuĮÄKļ-2MoڬķŚuō³4‚Pvtsõ5}Øß ”iŽĖļ/öÆ0Å@żŚU˜ņĄĖüOs®1nܶæXīk[,÷5*ąž›ĒÖ] “mݐ[p^ƒTŠFÓ łLGO¤°zóæüüē6²srų÷ĄQzÜņ[|.Ÿƒ™ƒģœnūVŽZóŠė;3i\ésVzžķ°Ūu·ōŖU«1ąĘAHŹ.¢€Kƒ‡ 敗^$%%9_zVv“_’Ž9ÓGH²‚S»F¼×2ёįyļ³³ķÅr߬¬œ¼÷[w%P·feę¾2ŠĖŚ7÷xŻ?ū2`Ģėü½;ć§ĪššŌł¦ß÷˜§>fńŸŹ1®[ūf¼’Ā„b»‘‘öeīw«Lón1’ČČH?K$e1A—*TØĄ­ĆF˜ęĶ]°Š{Ž˜ę#±ӉG”zxX(‹>|Č«ņ5’öqy³öÆ­ē\Zf¾2Sg-Ģ ņŃ“a ¾y{œOėÅĮƤ׾!;'Ē-=::šaĆļ4¹B„¢ ø”p÷čūˆ‰‰qKĻɱóōĢo QéĀØ€{÷ø€VMėų|m“śÕó¢f„¦eä[—žüǵ<6ćKŖTŖĄĀ÷,–S“üĶß»,oÜ>ān*Wög[„‚Qś†éå”*UŖrĒ£yżµ—Üņ>’q-÷ »‚nķ›@²ŅA\Egą‚(_ēŸW;ļ`ś#ĒKļĪ_–»oƋų}õ~_½Ćk}Ęm>Ė7ģĪ9ģĀ–õčxa“ĖX&¼0ßtķ7&&†»GßēWY”¼ ø1zĢ8>žó>ÉɧŻņĘO™Ėśo'ūįńe££ZåJī–oTŒqšĪSĻe˜–™óõrę|½¼ĄuĻżnU¾µ×‡ļīķWüŻ’yė×®Ü=z,UŖTõ›,‚Pžt)"66ŽQ³‘MŪšń7+ü,Qéį¼NĻj«mGž0zc׬Vv"Aefe3ńÅł¦y•+W‘­G‚P‚Č ø”1rŌ}Ģ›;‡„÷£ģž9×]~q”fx„wći~:\؈Ȉ0Ņ3²Xµéß×o4Ļ~ė™ŪLc&{ćƒ/žä­¹æźxĀÆi——ēO?möü³’ØiŽ„‰KŲIA(AD—2"##yü“3ŚŻ+śč‰zįS>œzW$ó?įįĪżÄié™JŖ®ø“?ü¶™ßWļä·U;čÕ¹„O÷łsŻnVoVĒ 6®W–†h\Ę=ĖĮĖ»~ķ*“mݰPõ…Żūžć¹·¾7ĶkڬC$ģ¤ ”(b‚.…ō»®?;u1Ķūč«åü¼üo?KjU«”÷Žj ÓČ#w÷FÓ4t]gĄ˜×x’‹?ČĢ2?”‡łē?®eĄ˜×óŅīŌ½Ōķļ5C×uīyjé¹'<¹2é™ē •ń¹ ”$ņ„•R&?;>×ö$;˽żæ9lY8%ŸćPY¤u³ŗy õƒ/žäƝ “n¦ĪÖ4k»·”{gę®ķšqß°Ėyżć%$ŸIć®Ē>`ā‹óéxacźÖ¬L\Å(l6¤äs:rŠ ļēDŅ™¼ė;_|G^ˆZģ¼=ļ7~[eī­Żļŗž\Ö½—Ÿ%„ņ‡(ąRŹłē·fōč±¼ńśĖnyūŽ3nņ'eŽŻ“a FźĪģĻ–°~ė>Öou®ÕĘĒFēSĄ3ŸJ•JxįČČĢ&)9Õ§£÷ķČ»Ļ(ŌéHĮʎ=‰–ŽWccyś™ü,‘ ”OD—bxč-ZČæ’ģrĖūč«å\Ż­ ƒūśēōšĘõŖå­cŗĘz®™—W£Šw§MÓņŹ{‹sżĪ”įtkߌæYĮĘæäóV63kšĘÓćn`Ԑž¼’ŬÜų›·ääé³łĪ'®^%–&õ«Óµ]Sn½¾ “ØēUī‚P«Z„¼ĻčĻs‚32³¹åžwÜ¢y9xzŅóŌØQzŽN„ŅLP.f%&&Fē]š½"åÕ«V0h`?ģv÷˜Éńq1lZ0™uŹW£ä3iłoųJVvéYeŚt’ąsŸņʇę§h]Śõ2>’]™XćtM{Ŗ~­ø)–C^Ä «”Ó©ó„Üu÷Ó¼¤äTn=Ó«‡pY£0ŹŌ̽,+ßoŁČ«żlšnj—ßå+~Dpą‘GŸ¤U«6¦y›wdŌ’>ņÆ@Bбkļ Ÿųn^ŲLW^˜ś2uėƙ]ψ.„‡Gšś›ļZ÷ß®dÖ§æūY*!XH9›Ę ÷Ģ“ 2šę!\wż~–JQĄe„¦ĶZ0łŁi–łcŸł„%+¶łQ"!ČŹĪaą}oZYy^ÓęL~vŗŸ„D—)†ÜrCn¹Ķ4/+;‡ļ}ƒævŗ‡°Ź.ć§Ģµ ĢĆģwēP”Bé;>QŹ¢€ĖSž›Ę…]bš—r6ėF½Jā1÷Ӕ„²ĒóoĻŪs3ĶÓ4—_}›¦ĶZ˜ę ‚Pņˆ.cDDD2ėŻ©ZĶ|’ģĆ'¹jųō|ž„²Ē;ó~ē/m™?ęŽūéŻē:?J$‚+¢€Ė uźŌeĪĒ󉎎6ĶßöĻa®ømIɲպ,ņÉw+¹wŅĒ–Ļ}ś^ĻƏ>ég©ApEpå‚ /fęė³±ŁĢā-;ŃļīW9“šīgɄ’ä«EėńšūŲķꏷmŪ¼śŚ,Ėv!‚’§° s͵}yņéē,óWlų‡+o›.3į2Ā'ß­dšų·ÉĪÉ1ĶoŲ°1ļ4Ļr»š žEp箑÷0īž‰–łk¶ģ”ė ē8"ŽY„šŁŸ-eųÄw-•o͚µ˜÷Ł7T©RÕĻ’ ‚`…(ąrĄÄ‡Ÿą®‘÷Xęo’7‘^Ʀ²/įø„Š‹ßYČč'ēXš«V­Ęg_, ^ż~–LOˆ.'<5éy†Žz»ežĪ=Gč|ÓÖżµĻ²Œ\dēä0źń،/,®*UŠgīgߊ¤IS?K'‚7D—4Mć…©Æ0|ÄHĖ2GO¤Šcč |·d£% ƙŌtś|5ļ,d3ŖV­Ęü/æēüó[ūO0A|Fp9BÓ4ž}n:÷?ųˆe™si™ōæēuž…„IS,»÷żG—Ļ²č­–eŖ×ØÉü/Dł B0# øņŠ„Ēxų‘’YęėŗĪŌY łöī;<ŠŖ ąšo7½÷„HHŠ{ R„‰ >須ØbAPDDPPT° U¤Hļz BM •ōžģ¦ģ~l²dI “°”ó>0swęģ¬Éٹ÷Ī==Žž‰”“¬G™(ĶŖ-Į4~i"g/E޶M„J~¬Y»•ŖÕd•+!g’€ŸQļĆ3~ÅŌĢģ¶mÖļžżæćzT⣠ī§Õj™½t {Nąų¹ė·m§P(žĪHfĻY„••Õ#ŒPń $ ŖV«Ī–­{y¾ó‹wltų5;åŪŁänøŒ…FÄÓiątŽž|!YŁ9·mgccĆ/æżÉgć'Źņ’B¢…eAaģJmµÜV™V«eńĀyLžś ²²JŲÆ¢_¼×ƒ¾=Z`b"ßķJs5<ŽÆf®įƵļjL½i³üųÓļņˆŃB«P|įķé0ÉŲqˆĒ—$`QŖČˆpĘ~:š ]ŪļŖ}5ær|>¢Æwm‚©‰IG÷ä ˆgŹoėYøjß]õŲŁŪóŁø‰¼Ńw Åcł#+J X”ę±üi–üxZµr_}9ŽÄĄ»jļSŽ…‘;1ōµ¶ŲŁH ŚĆ§®2}ĪfVo ¾ėY䝻tåėo¦ćįQ®Œ£›$`QIĄāž¤¦¦šĆō©,Z4¼ÜÜ»z£½5ƒ^nĶŠ×ŪRÓß«Œ#|¼ØŌ¹¬Ų|”ŁKƒŲwģŅ]æĪæJ5&|9™ĄvŹ0:Q–$‹ŅH÷åņå‹Lœš»ƒvÜÓėZ4šgčkmy„Kć§ś®ųÄłėĢ_±—%k’œz÷’+;882źĆO0`Č— ?IĄ¢4’€ÅŁ»gÓ§}Ćńą£÷ō:K 3^¬Ćk/4”ėsõ°±²(£s—£X¶į0Ė7)u6ó­lll4xĆ†æ‡££SE(%IĄ¢4’€ÅC±cū¾Ÿö gΜŗē×Z[™Ó®Y ŗ“­Cē6Töv/ƒ¾lU»\dóž3lŚ}šKa÷–t,--é7`ļŒųWW·2ˆR‹$`QIĄā”ŃjµģŚĮģßf²oßīū>Žæ­W„UĆŖ“hąOõŹž1Źū—ž©āЉ«ģ?~™żĮŗ’J[0ćvœœœé7`ƒ½‰«Ū“ń…CÜIĄ¢4’€E™8wī ü>‹õėV““sIŖ‹£-õjzP­U+R§z*{»ćä`ó¢5”—ŸODL!Wb8}!‚Ó#8s1’«Ń¼¶Æoe† }›×z÷•Ā O9IĄ¢4¦Ę@<jÕ  EĖÖü·śß>VbJ;œgǁóŪģ¬š­ą†OyW¼<qq“Õżēd‹„…ŽvÖ(`an†•„)iŗÅD²Õ¹ØŌ¹$&g˜’”’3<:‘kQ DĘ$“—’pWõŖS§ć>ŸDó­äY^! X””ŒŒ 4š²«š”šžĶɐpN†„—Ł9–—_ķM‹–­†ā1"ė !„F X!„0IĄB!„HB!Œ@°Ba’€…B#,„B$`!„Ā$ !„F X!„0IĄB!„HB!Œ@°Ba’€…B#,„B$`!„Ā$ !„F X!„0IĄB!„HB!Œ@°Ba’€…B#,„B$`!„Ā$ !„F X!„0IĄB!„HB!Œ@°Ba’€…B#,„B$`!„Ā$ !„F X!„0IĄB!„HB!Œ@°Ba’€…B#,„B$`!„Ā$ !„F X!„0IĄB!„HB!ŒĄŌŲń,Ų¼i=..®“lÕWW7c‡#„x Hā8x`ģĄŪ§­[ŅŖu ķ±µ³3rtBc,Ä#~ż]_Ą_K`jjJšµu ¹M Ķ›µÄŌĢĢŲ! !IĄāž$ÄDZwo/„ ÕjļŲöō©(Ŗ'W^^gNŸäĢé“üśĖ8::ѲUZµ¤M›vxūT2vˆBˆ2" XÜW7w^źõ ń:øŸ}{ƒڵØØHc‡öTP«U¤„¦’––Jjj Z­…Baģ°„eą±üɎŽŽ¶ĪĒ:ÓŲqˆ»~ż{÷±oo{vļ"--ÕŲ!=LLLØY+@߯“isĢĶ-Œ–x“ ÅŽž“Œ‡x|I]~~>ēĻŃ%ä=A:t€ÜÜc‡õŲ(: «u›@’(’€Ei$‹2—••Epšöķ bļŽ Īž9UźųńÓÄŁŁ…-[ÓŖu mŪ>G…ŠŽĘI<’€Ei$‹G.>.–Ƈ²oo;¶oįʍc‡ōPYZZŅøq3Zµ ¤uė@jÕ®ƒR)kŽŌ¶ķsŲŁŪ?ÄhųF°($`ńŌP©T=zH’øÓ¹³§Ńh4·mļźęN³f-hÕ:vĻuÄĖ«ü#ŒV<ķ$‹ŅHO­ÄÄŲǾ½AģŚARR" 6яćÖØ+Ė<Š2# X”ę±üķ# X”…¼¼4ÜŲ”<5>›µöĆĘ; !DüÉĶĖćäÅPSӌJ‰²TjN^ %3[eģPž8K6ī¢IæŠmĻĢV‘š‘e„ˆ„eĶŌŲqæŌ¹¹˜(•˜š˜”Ś6[„ĘŅĀ…BQęqe©ŌX[ZÜÓkR32¹WlūO {Xa !3’€ŸR1 Iü¹f'.\E•“ƒ‹ƒ¾^åн¾^śvŃń‰Ģżo+W#¢IHIĆŅܜŗÕüčūB;üŹ—Ó·‹MLfĮŗķæp•¬l5.Žvųzy0ØG'¼Ė¹ŻSlyłł,ßŗ—­‡Ž“˜’Žµ%^®ĪtlF`ƃ¶ŪŸ`MŠ!¢āQēęāhgKĆžÄ'§2gÕf6ĶśŠĘµŖ¢ŃhY¹c['>9­V‹³ƒ­ė×b×±ÓlŲ{”ė°å@0§.…ѽmSꬎBdl?<Œ*Žå¹ƂµŪ ‹(8— ĶŖ3Ø{Gl¬,õ1Å%§²hŻv‚C®–™…„¹9^nĪ“Ø[“É󞔦Ÿ7ĖæÕu8Āņ­{ø‡R”ĄĆʼn&µŖŅÆės˜š˜°z×AÖāJd4yłł š0€—;“¤kė&,Łø‹Ó—Ćųnä`żł÷?ˊķūˆøO¾FCywWźWóc@÷X˜™0užæ”suĀ×˃Evr#! w'G:4«GŸēQ*Ėž‹ˆāΤ ś)—œJą›Ÿ²hż\ķhP½2¶ÖV¬Ü¹ŸĄ”Ÿ@bj:Ļ ūŒæ6īĀŽĘš&µŖāW”Ė·ī”Ż›ŸźļȲTj:Ļߛ‚ØęSžöMźā]Ī ūŽŃńķĻČČŹ¾§ų>žéOF?[Ś5®CķŹ>D'$ńŅčIl;tBßnŁÖ=¼śń"chX³ ķÕĮÓՙŁ+62ļæ-,™üµ+ū0iīR†Mž…F£”y“¬W;k+&üžGĻ]fżO_bkeÅłŠpęÆŻF÷Q_—”BUŸņXYXpęŹ5Śż˜m‡OPŃƕ†5ü±07ēė9’šāūČĖĻt_ŗŒųœ?Vm¦‚‡+ķ›Ō£^5?"cxgŹ/4©U•oŽĄ¦żĒč:ņK"ći^§:MŖafjĀų_1vę‚»ŗV§/‡±ż–kŅcŌW„„EPÉ˃€*•ČĢVńło‹üåśvūNžcĘ’Õ¼żĶ,œķm©[Տų”TŽśSę/æ§ĻKQ6äų)“tsI©éœZ6 /7żö„”4^{‡Eėw2nČėķŅžūg*zܼ‹żxĄ+ŌļóK6ībܐףwā±ńģūsµ Ą»Æw£ŚKoqņR(­źÕŗ«Ų“Z-’lŁĆČ’õ`ģą× öuy÷ ¶:NĒfõŲ°÷(kUeõŸ“ė،īLŌ%Ļ‚®ŽūŽņF—@f~2Ü m*¾|žŪbš×©”æėĖR©Y0q4=›éŪ}ńŪbŹ»»°wŽ4ĢĶnžXl?|‚W?žĀīą³“oR—°B£n°ś‡Ļ‹Ż­w~÷s,-ĢńÆčYš9ģ¦^U?VLūĢ ]%/­ßĄKķšóR»ęü²|=_żń7ó'Žŗćõūńļ5<×ø.+§3Ų>ļæ-Œ™1ŠØśž‹ų”4N.‰»³£¾Żˆ©æ²xƒīóB—Ü?….]¢N•JÉĄÕўuju€«1Ōšõ6H¾nN¼łŅóø;9в^MN,I _oƒv9¹y$¦¤ßS|ęOē½ŽŻ ¶åk4äåē“”zóXEaQ…w£EĒso×6_£)h{s›«£½Aņ8}ł/¶j\ģ8Ļ5®‡™© ®EčĪczūļ¬łłƒOū`0’|ūi±vźœ\’Ņī횁īĖĖåėQtnѰؾnmš£ßÖ¢N ƒä Š“v5ā’RČĶĖæēó !.¹~ „gfć`kSā>'{[bSˆILĘĶɾÄv†½”’»•%k‚1śū9Ä&„„RĢĪĶ@‹ö®cS(¤fd1yŽ2®DD“’žINnIiéääęŒ'7 ØĪŹūyõć)ԯ™qI©¬Ł}ˆ’JTņt7hū皭Ørr©\Į„RAt\"+w kė&Éŗčxn”ä“ Öķ9Āɋ”%ʝ•­ĄĒ˃r®N¼=y=Ś6ĆĆÅQ?ūūŲłĖŒīū’ž5ff¦L_“Š£ē.‘’žAn^>Iiédf«°¶,Ci²Õ9äk4%~¶NövÄ%„ź·9ŲZkgb¢D«Õ¢Ńj€Ņ'Æ !ŹŽ$৐F«A«-9)jµZƒ 8&w1ƒxŁÖ=¼ūķo īщ’u ÄÜĢ {[kŹ»9Ӥߝ»LoŸœJב_R§J%v­5vÖVŲY[ńÓҵśvaѱŒūe!ÓG įjä ®„G“œ–ƒ ļ¼ś"}_l§OŖ;ŽœāŸ-{˜łńpN\¼Ź¹«×ÉĢVįä`ĒWĆūҧs`©qi“jūūŲØN±}=Ś5§N_F’Õ|*Š?Ń IDAT„e#N_挣X*zø²fĘ“iP[’ŗŸ’@hŌ †æś<\±47ĒĘŹ’S—BłvĮŠ{ŗnęöū“…wśEnõĮŒo!Äż“ürwräT|Éwr)é™ŲŁXPĪŁ‘s·Y4ć£ēajbĀ”÷²ėčiZÕ«ÉōQC ڤeŽūó©ĒĪ_&#+›%_„“½­Į¾l•KsŻ,ŽŠČróņQ(¼ŲŖ1Nö¶8ŚŁąhg[ģŸ ×"P*˜›™ņrū–8ŚŚądo‹ƒ­žx„ńpq¢†oEvėPl߆½G±)8ē…°Hl­-ń+_ŽF5«ąh§;—£­­ĮUN.O‡šėŲ¼Ö©µĮńĪ\¾vW1ŻŹÖŚ K s}ĻCQ)iśĻVńų“üŖäåĮā ;‰IHĀÓÕYæ=5#“Cg.šÖĖ]š÷öāÆMA„߈7čśMĻĢfķīĆōz®Łj5ź‚ńŽ¢¶<~ϱe©t]¹źœ\ƒķqÉ©œøx•vw -ėÕ¢IķŖ|üćŸ8;Ų‘š‘©s¶µ¶¢qĶ*|÷Įü+zņj‡VĢYµ™w§ž†Éiś±_g{;0mŌœ ŗiKRÕ»<[gL’—1QޜOßńÓX0q4Õ*UąĆ~½č÷łtĪ\¹F¾FCz¦nøB” ’§;»wäż>ŻQēčŗ‹Õ¹†ļS«Õ²ķPńėfnjJn^>*u–ę·Ó×˃-ófÆĪŪ·|Õ|Źßöµ%‰+Ršńt$ĻH !n’üś}Å&Öķ>\ā¾cŽ¢÷óm˜łĻZŚūŒĄFx8;’’ĘŽē035e@×öōéČ/Ė×Óqų8:6­›“=Ŗœ\¶:AzV¶¾]§ę xwźoō?†5«——Ē„šhv=…„…ł=­|ÕŖ^Ml¬,é5ękz6ĆĀܜø¤žŪusSS2 ŽuńZ$§/_cߟӨī[Š%ļä“ .GDóń2į÷%ü5ł#öž8GNngWü†«£nL;=3›ÄŌ4Ī] ē½ļ~ć—eėłüĶ>·ėż>Żéśž—“ś kVĮĶŁŌō,6ģ;Bywžk\€%wҧs[f~<„RA¾FCJz&qI)¬Śy€ æ/”}“ŗŌŖģC³€źLų} —®GįāhOf¶ŠGN›@–J…Fss8 N_“Z-=FO¢a źWóćՎ­‹ÅłīėŻ1õWžń9u«śbnjJDl<[§s‹†Tń¾·üĮō?Ų“’1ŪžŗėŽ!ÄĆ! ų biaNĻĄęwlcb¢ÄŻŁ‘]LeŽ[øĆåšhģ¬­čŚŗ C^zžJ qø8Ų±köTęž·…K×£ø…­•%mÖfHNśÄ÷F—v˜›š²~ļ6ģ=‚…¹ŽåÜXžŻXžŻ¶;kŻd'{[z6×O*‰‡‹gNdžšmģ9~–ܼ|\ķ?“7–朼x€S—B±47£J‘;:kK ¬--(ļīB³€jœ½r€ć®PĮĆUŸ|A×kgcE%/~Zŗ†˜„$jśyė“|QjVaל©,\·K×£8så.Žöō}į9÷čØļŚ=~į*£ū¾¤Oœ&J%.vø8ŲŃæėsL_“’˜„$jUöaÉäų}ÅF‚Ļ_&5#G;[Ś7­Ē -óÓßkHĶČŌwĆ7 ØĘ¼/Fņ_Š!ŽæŒ­µn’VįŲs”’u ÄĆő5A‡¼AZfnNLz§ż ¾0“ŖW«ÄIX>žīō lŽR”ԟwē‘S2\,„<–?vŃŃŃÖłXč*mZ6$,ģj±ķēWžnŠ}+­ĀĀ5ż¼i]æĪŗäŖĪÉįāµHÖī>ĢoōdüŠŽ¬ß{„~ć§Ų0€ś5ü±·Ń%žĢl'.\aĒ‘SĢżb$/·ołĄq žrŪŸ¤[›&TņņĄ¼`å©ŲÄd¶:ARZ:ĒžśéŽŻŻ“ļÆbĻń³¬™ń…±C)Sžś¢RēlS(„G%—Ł9µ ÅŽž“Źģā‰' XšcėĢ•k¬ :ÄéĖad©ŌØsr±³¶¢‚‡+ķׄGŪfś;ѽ'αi’1.]$3[F«ÅĪŚ ßņ¼ŲŗI±E3ī—*'—å[÷pąT±‰Édd«°47ĒĪƊÕ+ójĒÖųy<źq—œŠ›£żS?ž+ X<ޤ Z<¶ü+ą_鮌¶®_‹Öõļn5®ainF’®ķé_¤»÷IVøŲŠāѓ•°„B#,„B$`!„Ā$ !„F X<6Z üś}Ž3vLµžoņķ‚ŚńÜŪ÷į•›JmWūÕį¾ł‰žßƒæœĮó#n–|üßgßįhX®0K„ęZt¬¾•āĮÉ,hńŲx®q]rņŠ/y)®NĶ`o]|‘ŽBMŖ[kēŃSō?]Ļā!’,Œźrx4Z­–Ŗ>åłzD’29ǹ«×±±²ŌÆö¬ūaō›wÜ?²OG‰Ļ6IĄO˜³W®óŻĀ:sŌŒLœģšńtē­^]čõ\ Ņ2³h?l,Cz>ĻŪÆ¼`šŚož\ʖĒŁ1ūLMLŲr ˜Ÿ’Y˹«įŗņ}ö¶4­]O½J­Ź>€®*’Jƒ§›3m ":>‘ė`gmÅÜÕ[X¼a'”Q7Šhµ”ws¦nU?&¾Ż—ņī.śón>ĢÆĖ×sīj8)ŲŪXć]Ī:U*±dć.†æś"ß¼;€‘Óf£ŹÉaö8]7tÆæ¦MĆŅ2³Xŗ9ˆ„ä4¼ÜœéÖ¦)Ÿ yŻ *Ҳ­{ųsĶ6.‡G‘š‘‰ƒ­ •+xāķéĪŖū™ųv_ŽļÓż®®ńØé T*qv°cłÖ=ÜHLĘÖŹŠVõk2非śĀ}ĒO£JE/ҳT¬ :Hn^>×6Ģ'3[ÅŌł’²qßQ¢’051”¼» -ėÖd°’éWźHĶČbŲä™ģō*¦„'‡Lü'{»bÕ­ }·p»ƒĻ°į牬Ż}˜ æ/!«`łĪNļŒĒŌĄ—žkA«z5łš‡¹Ģ÷.MjWÓæ^›Ką›ŸŅ3°Ÿ |õ®®¹Ļ"IĄOUN./łoOw¾ū`0Žv¶df©Ųr0˜7'żDUļņŌö÷ĮĒӝ„›w$`­VĖ_ƒl€©‰ {ŽŸåć¾£[›¦|5¼/ĪvÄÄ'1gõfŗ}0‘£K~ĀÅĮŽ„ä4Öķ9Œ§›3ŗµĒŻŁKss–oŪĖ'?ĻgdŸīLØ’J„‚ØøD~^ŗ–·'ĻbŻOŗ”[&²Q~ųšMģlČĢR|𹫷šĶ»žź‹€®2Ov‘ÕŠ¢ā™¶p­ź×bŅš~(•JŽœ½Čļ+6¢EĖä8rö"oOžEÆö-yæwwl¬-IĖČbżŽ#ü»m/ó'Ž*u ķ¢ā’SŁvč85|½łd૸:Śs%"†_–ÆēµO¦°žtL”Jbā“Ų¼?˜*>åyēÕńpq`䓣lŚŒ·_yŖ>å1Q* ŗĮ/ĖÖs#1™æ&¤?×+7Ń#°ß¾?K sĪ\¹ĘOKג™„āĒ†0iīRęÆŻĪų!½©YŁ›¼¼ŪņƇobjb‰ Włyéņóó™0ģ b’ļ8–›”šNT\"ž=Š­Ā"X¶uÆul5ž>“¬W“Œ¬l–nŽm€w;ƅ°?|뮯¹Ļ"IĄO°prņņ˜ņŽ@Õ¬¢ßžbėʬ :ĩ˔Ōö÷įåö­xgŹ/\‹ŽÕw»‡\!:>QæņÜÕ[ØSŗGœ£c³ś4|ć}68Ę]Ś`eiĮŽŁS VM:x*„ukč©235aō÷sō’>y1”¼ü|~ūl„A±„[7&čŲi’ źŲŽNywW–~ó‰~ÉÉ^ϵ [Ć¶C'ō 88ä –ęü1ž=ƒR‚ŻŚ4ać¾£$„¦—re‹Óh“üūŻXܝčŌ*W(Gļ±ßr<ä kUĄĖĶ…æƒUĮŻx–J͚ C|2šĘōŁą˜Ö–Lų} i™Yś»`Owę~1Ræä ­“ÆŃ0óŸu|ūĮ`,ĢĢ8rö}_hĒ;ƽxó`Mįś8އ.£Z·Ŗ/3?®’w×ÖMHĖĢbń†Å>«»QÓĻ›š~ެß{„e[÷0ō„ē ʀūtnĖā ;™:rėbÆŻ}_/šŌ®zĻēāY"³ Ÿ õ«U&lż|Õ¬Bf¶Šä“ ®EDzļä9²ÕjŅ2²Ż/]K sÖ)Yøv÷!ܝhÓ 6 »3mUÆųŅ•¼]Øš®7!%Ā['»āē)üR’’†w97‚‚Ļ0nÖBBĀ"Šjµ€®€‹ƒ¾Ū»PayƏ—š¦/«ų°ųWō¤użZ,Ūŗ‡īm›²÷ÄYRŅ3y­SńZĘBC’€Ÿ «wąē„kųöżĮ“m€½ęęŲZ[Rėå· Ś¾Ü”%ż?’žØøDRŅøĖĖķ[č÷[˜™ņzĒÖ ģŽ±ÄsݚHo5bźÆd«Õ¬ś~<Ü]q“³ÅD©dĒѓ š0CßnŠ—3Ż÷%ZŌ­ĮÅk‘Ä'§anfŹ€®ķéŲ¬Į'„|†¾ć¦ńżč7©čįJhä āSR±¶°`Ų+]芤^ÉI¼Ł·TĪ)z¾Ā/1%13ÕķĖĖ+>ƚ[šˆ•E‘G|Ō9¹%“Ó½ÖŹĀUN.æų–õj2ó“įø9Łcgm¹™)ß/^ŖƒĒ ^[Ņń Ē{­Ģļż:܍Ż:0ü›Y$„„³n÷a×ŖŠ_łrer.!ž&’€Ÿ Ē/\„–ŸC_zŽ`{^~>©ŻĻ…:6«½5ėö&>9Owżø%€‡‹¦¦¦Ō«ęWģ<Ó­¤^5?ƒ™ĢEi4ZN_ ć»ėƾu¼5#KÅĘ}GQ*8ŚŁā_ŃG;œģķŠ¢½§÷_’¼ü|Ō¹¹ü»m/Ļ5®‹£ Õ}*ą`g‹«£=ķż#āFZ­Ö µ°{Ł„ČXö­ æøÄ%§Ū“ +}W“Ū=2.”X»Ā P.Žö„EŻ 5#“¼BŻŖ¾ķJŪ¾µ^wŽD ĪeS£økė&|bc͊mūŲ°ļ(c½V&ēāi#cĄO3Sb’ČøeÜońśØss)šk,ĢĢčÖ¦ kwfŻžĆōjßŅ ™Ō«ęĒś½GˆIH28ÖéĖa|óērļ0qI”„‰’+ŃŪ³Tj–nŽ č’4Ą˜ž½øp-’ą+lŲ{„_–ÆēĆęŅuä—TzqćYt_×¢čū|æOwĪ\¹FpČÖī>ĢOK×ņĮōŁ<’Īx|^ČOK×čŪ’½)ˆūŽ–z܈Ųx–mŻc°mīź-˜(•4ŖéŪ×¹8ŲSĪՉæ6tĶēk4ü½iŽv6ų¹;Ü| ˜°č›cʹył,ްæņåpwrĄŌD÷#z9<ŹąÕ+Uä…VļxÜJ^Œś~æż»7'ĀoÄs9<Š÷ūtĒĖ­äž„RĮ¤įżžĶ/Ōčõ¾åĖ”T* Œ!9-C’xP”*Ž^“ų!uŖųbeaNHXÉié,üźĆ‚żåiUÆ#¦žŹĀu;pu“'>%•cē.S«²7±I†wŚŽåÜhųĘHü+afjĀłŠp2²U¬˜öٽ^Zõ«UĘÉŽ–£'QĖĻ›¾łłć›Ćż»¶gę?ėx±UćbćŠ?,^Ķõ˜8z?ßöbāi# ų RÓϛË~`Żī#DĒ'bb¢¤MƒŚōhیCg/`ma8ń§użZ|9ģ ,ĢĶØéēm°ĻŻŁ‘żó§³ł`0箆“„Raoc͘ž/Ó±Y}żć<Ævle0!«ŠäżéŠ“O_ K„ĀßŅ‹Į=:Ń¢n ®ßA~~>*u )i%./©T*ōˆ ÷÷éH^‘¶#^ėŠ§{±×¶ŖW‹‚»¹ÄŌtŌ9¹śńÕ¢ĢLMpsv _£!??3Stķ@pȕ;^g€Ś•}Xõżx6ī;Ź„dÖš§uƒZ]īoöźlšhU”W:“¢nU?ö8GT|"źœ\ŗ·mJ§fõ©ā]^ßnL’—iV§:*u;Žœ"#+›Ą†tmÓ’Šžśv’NūŒĶŽqźR9¹¹T÷­Ąø!ÆćźhĻĘżĒČ×h0Q*?“]Z6$6)…ŻĮgÉV©éŲ¬=›éŌ½֖–ńNčܲÕ|*¼''{[Ģ’ž’‚O9ĆĻ„°;üŚ»ż»µgʼe„^s!ž5åsŃŃŃÖłXg–ŽņĮµiِ°°«Å¶Ėš·Ē[_ĻdՎżT÷­ˆ§«3¶V–dēä›˜ĢŁ+×i×øĖæ{ßĒ×jµō=‰ƒ§CØ]¹®NöŲXZ’„V—HHX8oti§æ[ėüīē¼żŹ w\˜ćqÓP*,žzĢ}Ēõ¬ųų§? Œ!8ä U}*°yÖWÅ?śÕOŌ«ęĒ»Æw3R”ąŁ©o±/’ …‚šØäŪ¼āĮiŠ/¼=&•Ł ÄO°$ą2„Õj ¹BpČn$&“››‡™™).v4®Y•FµŖ,žq?ņ5Žœ½Čń WIHN%7/ s3\ķi^§u«śŽÓ3©óžŪ‚B”`pN׳ąŸ-»9ާ«3o¼ŠĪ`™Ķlj$`ń8’.hQ¦ jV1X¹ėa3Q*i^§ĶėŌx(ĒŅółŅ ×āČ,h!„Ā$ !„F X!„0IĄO”ŲÄd‚‚Ļč "<*i™YŸ!-3«ōĘāŽ²Uj‚‚Ļp52¦ōĘBˆ'’$ą§Š®c§yiō¤×.K—®GńŅčI\¼y_Æ’/č ”Q7rTæ­sīźuƒmŃ I¼4z ×m7RTBˆ²& X<6M˜ĮŽĆ'Ę#7ś‡9ü»mŸĮ67'fŒy‹īm›)*!DY“ǐž@–ė7āHMĻÄŻŁ7'G}ž[ede‹‰R‰_łr%VŹ×høM¶:[k+*y¹—Xń'/?Ÿ°Ød©ršpvÄŻŁ±X­Ž¢rróČR©q°µ.önJz&V–ę˜›š’ČV琒ž‰BAߢļŁĪĘ Ļ’c¼øäTā“RČĖ׹_Ń+ĖŪEÄʓ˜’Ž“½-å\ōEę ßF– ;«bĻ.§gfcj¢ÄŹŅBßĪŽĘš|†ĖįQ( |<Ż j§fd¢ÕźŽ›*G÷¾AW¬ĮŽĘšžĶ±²Ō}^ł 陣śźQŃń‰dd©ØčክuÉ„ā“SIHI#7/'{[*ø»r=&Ž5»ńF—v%®ā%„xt$?aVķ<Ąēæ.&:>QæĶĀ܌!=;ńõ;ż Ż“…+ųełś›åķ,-ųø’Ė|šFO}›Ł+71åĻåėHŪŪX3~hoŽģÕŠ-¦ńķ‚ĢZ¶ŽĢģ›KŚŁX1¦ßĖśšĆ·Z±}#¦žJĦ…Å’D•C™<¢?½;·Å·ė żö æ/aĀļKpq°ćŹŚy€n±‡ æ-!.9ÕąÜ#ūōąĆ~½īx½‚‚ĻšŽ·æ035”s‹Fü:ö}\ė÷į“Ÿę\W„’W;¶fʘ·°47ćą«tzg<»ž˜Z¬ŠT§ćiSæ6ߎđ³—xńż L}ß/^E|AÜęf¦|šæžŒ¬«TēµśńņŁ+71{å&¢·,ĘĢĢß®ƒųnä`ŽģՙŠČšōÅÄ·ū2{å&}œ&J%ƒ{vāŪ÷é?ūČŲŽžfN…čė”ww!'7G{^ißźŽ×MQö$?A’Ó2xgŹ/¼Ō®ㆼŽ­µ9yylŚŒQÓ’ s‹F“®s­āM‚Y÷ć—T®čIrZobāSæzeŚ6 ą|h8Ÿž<ŸqC^ēµNm°·±&>9•YĖÖń٬…¼ŠŖ1åŻ]X»ū0ß.ų—ūõ¢[›¦ø9Ł“”šĮ¢ ;˜šūÕ¬B‹ŗ÷·†•%»ž˜ @»·>edŸōl×\w{ņb(ļLł•AŻ;Ņæk{<]HLMgŃś|=÷jų޾°BFV6æųŚž>Ģ’r^nĪäk4ģ=~ŽŃ?Ģaņ¼eLyo 1 I ųķ›ÖcŽ„‘x—s#=3›ƒg.šŃŒyT®PŽ1ż_¾ē÷öėņõü:öźTõ#61™łk·ńŻĀ“Ŗ_‹Öõk±žē/ÉĻךś'Sx®I=†½Ü ss4Ś’'ŠĶZ¶ŽļG„iķj$¤¤ńļ¶½üų÷šT§×sŗzĻßü¹ŒĖ×£XõżxźUÕ}QˆONaņ¼el?|’ssæ»m‰āё1ą'HBJ]Z4ā£/SĮĆG;ܝе=Žv6ÅŹ~6ųušTĆÕў*Ž^|ńfŹ»»°nĻ@WzŠŚŅ‚ūõĀ»œŽv6TńöbüŠŽō}”žnwĖĮ`*WšdüŠŽŌ­ź‹—› µż}˜Ē„Ē éM‡¦õqwr ĄæߍŒƒ­ ĒĪ] ĄæõŖłaffЇ³£ž:Ü©[ä’zŠ­MSܝ©éēĶ„aoPÉ˃cē/ėŪ\‹Ž£m£:6 ĄŃΦąs-Ļ īÉĢV‘˜’v_ļGńp=¬;`w Dź‡t\QDo/ęOÅÕČ‚‚Ļ Rē ŹÉįZT,©™ÅÖŗ­_ݰ›T”PP§ŠÆ¾ū²‚‡+Łź&Ķż‡vźPĮĆ/7gż BqI©Ōš­X,3S*Wō2Ø?ū°EÅ%āåęĢŁ+׋ķsur(VŽÆØč„$ ~<‹ķ›šÖ’HLÕ%¢ųä4ķlJ\ū»ŗoN] ½ÆŲo­@ejb‚“½­Į˜÷ƒĄÕŃŽ`Į·¼N…OE]$•:‡õ{`mi“ƒm±c!½»IĄž@OĄųøPd_3`&Шȶ,`!š1ńpĀ ėRķ3ö;ö<‡½5Īv˜(•x—sĆź–R„@‰ ćŪZ[éĒC[Õӕ+œ÷ß~ž{ž¹įņī.tkӔIļōĆŌĄŒģlķlŠ t]ȅ“‡ŹBjFĒĪ_¦Ż[Ÿ–ø’ÖĄE%„¤agmUbwk9W'} ⌬l,Ģ͊µ{eŃĶ[Ś1U9¹¤gf“š‘I×Fą`kƒB”›$fnnĘäwśL,BOi xŗ¤[8uv%7pU`;pėofk`8Ph/Ō*īĖŅĶ»9r¹ÄI@U{¾Y¬}zf¶ĮLbŠŻ ŁŪŽLĢļ÷éĪū}ŗ“—ŸĻ„d"ć¹Ā—æ’EM?oś½ų¶VVää–ü1ŖŌ98Ś9ŻÓūČĖĻæķē­ģm¬čÜ¢!K§|rOēp“³E•S¼–1čfGĒ'Q·Ŗ/¶V–ääÜžżŻnĘtQ¹·¹>ŚÖƒĒŁvų×7, *>‘øÄ2²³±µ²¢N•J³°…Ęu§1ą:ĄļÜL¾·ĶĶ付ü |n IDAT ö6†>„EKįQTó)_,łf«Ōś‚čE]¼Uā1Ź9;ŗ™·ƒæœčŗG+xøŅ, :#^ėŠ_…rœ ĄŻŁ°čā dhµZB£nąā`Wb¼…‰«h±w€ŠČh4Ś’^b0kĄĆʼnšń%¶’Ė"¦-\Yā>ŻkÉÉĶćzL\±}æ­ŲČ+MĄŻŁ‘ŌŒL’ŅŠ_Ć+1ø8ھŸģlƒ6*uŽĮ,ėūq·_HJćęd:'—vo}ʄߖš×¦]ģ>ƁSēY½ė W"de-!wJĄ#¹y‡<Ø ģ/²æš9†½čīt?+xMC š·u懩ĄĶɁĖįŃśÄŗgIĒĪ\@¾FSléÉoü«ŸUåä²hż.^‹¤}ÓzXZ˜³v÷až :ØT `Ļń³\ŽĆĒÓ€ukröŹužŽDFV¶ž¼…ĆÜ®øVe”J“ēż£On1 I|śóüŪ;ŲŚpųģE²T7§“kT‡ó”įĢūo‹¾+X«Õ²;ų ®Ż†µÕķļčšTĒĀ܌‰³’2§>y1”æ7Ѳ^Ķ‚vÕŠ¢å›yĖõ ©rr >ĆęĮś÷ēė偵„3–ü§GOĶČďyØsļÕ1[Ž_øśPŗņü+ą_‰*Ž^ԯ懣 )é™ ¹ĀOK׊¬’(Vl×-śq9<ŠQÓ’`Ē‘S|^!Ľ»Sōsn¾*įuÕ žžPō¶%XŒA—ŒM‘nč‡b`·,ßŗ—–ƒĘąźhR©$!%•Õż©UهÄ"wĮf¦&ųxŗS½×0l¬,Q©sČ×hе=/¶jĄė[³aļMŠŻ;ŲŚ Rē ĪĶ„e½šō}”½ŸoĆ®c§1õWFLż s3Ō9¹(• †ō|žĪ-šÆčÉĒ^aś¢U,Łø +K TźŽ|©3‡Ī^,ÖžĶ^ł~ń*Vķ<ĄŁ£c³śŒģӃ±30fĘž=™ųv_*WšdŅšž|õĒßĢūo‹žż4ÆSƒ1żt YYZ0}ŌP>œ1—ZÆ ĒŹŅ‚l•šĪ-R­R…{ś,‹ҳ’ų§žyč-æL¢A ’ū:ÖæŪ÷‘š‘Éü/G[üą•¾aŁÖ½¼Ņ”ŃńI,X·Jå=hߤī}Ē/„ø?·{ŽĮ(¼eüxĖ~onv5wÖŻ²(0§ąļåhīAtt“u>Öe7³§ˆ6-vµŲöó+/qV¬±åk4œøp•Čø” %<\©[՗ó”į˜(•Ōōó&61™ĖŃ“ŖW‹°®DD£T(©įWæņåŠ3"6žˆ Ä%§`¢TR«²O‰ķ¢ā¹K|J*6––ųWŅOd]1†ć®Ņ zeƒ `‘± „„EÆŃP­R|½<Ųņ<•¼<(ļībpŽ«‘1ŗU¹rrx¾Yż˜eBJ§.…‘ž•…µ…žŽ^%ĘX’Ģl!aÄ̘vwv¤~õŹÅV³JIĻäŅõHb“t×Įæ¢U}Ź;^|r*gÆ^'+[oyjśysüĀU쬭ØāķEjF&'.†Ņ¤VU¬os=|ę"®NöT¾efvT\"ēCĆÉT©hÓ 6Nv¶ģ>~–*½(ļīB–JĶ‘s—ØWÕÆŲ„øć®bmaNuߊĢYµ™Æę,eõ÷ćiPŻßą‘¦ˆŲx^żx 5*UdžÄQÄ'§2ģ뙼غ1Cz>W×ņIåŁ©o±§ įQe7ƒ_«P|įķé0©ĢN žx·KĄ¾@į³½e·ģo‰nÜ .pś–żŻ€µÆ\¹— $ qRŅ3é3ö[¹€•„6–X˜›‘‘„"5#Ow=†’Jœ¾Ęߛ‚7¤·~‰Ė§•$`ń8ŗ]tŃY5%Ķ€)ŚßQĀž¢FQ&ķlŲ4ė+b“¹p-’”ōL“h±³¶ĘĖĶŁąyī:U|©SÅ×ˆŃ ńl»].:£¤¤Y.…«dp³«ŗØ¢IWŠĆ ńˆyø8įįro‡ !­ŪĶ‚.zėXĀžĀ;ą’ī~¼Y­„żU ž /a@@ĮŸY@ń‡0…BˆgÜķp>7Ÿł€į˜° ŗ%(ŠĻ^Ņu?æRš÷3ĄĆYa@!„xŠÜi!Ž? ž¬D÷\ļp`57»„·i_ č¬įfõæ+Pń`®ĒÄńćßk8u)ĢŲ”<Tź~ü{ Āt£0YŁüų÷}…%!„(ĶšæÜL µ€ičօ.\łą475Ųl:ü;˜ūŠ"äjd g’őĄw6åĻåģ=qĪ`[–ZĶÄŁqź²ī MzV6g’ÅĘ}nj¢ā t§•°“Ą’€#Ąū@įó 9čīrßC×U]’S@ õį„)TćšUŁõĒŌb _ˆŅż¶bęf¦“®_ė¶m\ŲõĒT\ķadBˆ'YiՐņ€é’ŁĪčÖyV•ŠvŗIWĮĄa —§ALB‡Ļ^¤kė&œ¼ŹŁ«×±±“ }Óz8ŪŪ‘š‘ÉöĆ'IJMĒĒӝĄFu07Ó}ÄJ„‚k1±x¬\—”Ó!¼ŲŖ W#¢9så¹yłTńö¢q­Ŗ÷tĪm‡Nœ–Qģœ…®FĘ|ž Yj5ĪövųxŗS·źĶēO·>R©ä¹Ę7—CĢÉĶcćž£x—s§AõŹ÷tŠžĻĮÖļrnŌÆVYæ*Tį{źÜ¼!–†µF6ī;Ŗ_ėæ ƒäęås>,‚’‚¢T(鎶i±sš™š~#¾Xå¤ÄŌtœ:Obj:¦&&ų•/GćZUõeSÓŁ{ā,Ļ7kĄ¹ŠpBĀ"šÆT¬ą†āés7õ€ „üw;Ó0QŠą+ š0ƒē[4dwšœģl‰IHĀÉŽ–i aģĢh44Z-Éi4Ø^™³¾ĀĀ̌‰É š0ƒeS?„Ss'N_cŠ„¼Ń„Ė·ķĮĖĶ…‰ÉØsry”Uc–|=…BĮ±ó—K<§³½ߎÄg³œ³a 6ĪüJŸ„GN›Ķ¢õ;(ēź„³½陣DÄĘÓ”i}ž™ś &J%ÆGńłÆ‹Łśė×4ŖY€9«7óÅo‹ŁņĖ×÷tFM’ƒ…ėw`¢TāīģHJzY*5 kų³śūϱ³±Ņ_Ēó+ĒÓĀpµ³÷¾żw^{‘ūõŅÆ‘ °jĒ~VķŲ™© q;––xī”_żČø”½éŻ€¶ģfōsÉÉÉÅĆÅ •:‡¤“t*Wšdåōqųxŗs9<ŠAfŲ0€ ą3X˜›1všk’€…xÜK W{B×ĪĆŹŅ‚šńt>Ž7'żĢü/GŃ#P7A}ÕĪ ™ų#»Žž¦s‹†·=Vd\WĻĮÉŽFĖœÕ›łōēłl?|’ŽĶźėŪ¹;9¶īO,-̹G§įć6y& &ަ[ŻįŹūśÕO;M§ę 8så‹Öļą§†Ńæk{ż±œ įÅ÷'|ž2MjWcŲĖ]ųgĖnĘĪ\ĄÖ_æ&15i W2°[G}B¾»ƒĻ°`Żv¦¼77{uÖÆõ|štŻ?ųŠßWlä£/ßõń’w/Ąū…ŒģӃūõŗė×&¤¤1źū9¼Ö±5ߎŒ„¹gÆ\§×˜ÆłjĪRę}1RßžFR {ę}GķŹ>%QB<}ī4 ėV¦č +”“¼N3tėC߯źų⁼׻›¾Hw97Zׯ…_łrśä šR»ę˜(•„—P ·ØūõĀÉŽŠuSæÕ«3¶ÖV„„®±ņ^ļnśīZOwZÕÆEå žśä«;g ”J…¾~ƕ…†½ĮKķZ«IķŖ(• "ćt%żLML˜ńį[æp…Ū÷ń͟˰“0ē‹·śÜÓu9p*'{[†¾ō¼A”…ęujŠ®qŽ…\¾§ć=ˆż'Ļ£Rē0nho}ņØķļĆ«[qšTˆAū/ßśž•$ł ń ¹›;ąöĄhąyĄ,¼„ĶxąEtć¾Ē)Ąķ+„‹R˜0 Y𛫐£P(051A£½óP¼w9·bƳ¶0'[­6ŲīhgxN s3l Ļ©T*0Q*ŃŌ%öÆčIßڱvĻ!ā“RIĶČD›Ē„ė‘h4ZņŠŌ nT³ ŗu`Ü/‹HJMēĻß/vüҤ¤gRĪÅ S“bū*zøqüĀ=Õy )©˜›™²qßŃbū"cHN7\ ®ā-ŸƒāéWZ…nÖŻŽ)+ŠÕ^nLųćūM< EĖÕ=lÆEŅłŻĻ±07§~5?,Ķͱµ¶¤iķź;S¬}wW’Ó2Č×hØp³µ³ÕźbĄ Y˜›‘™­.q_YČČV”ŃhYøn{‰ūkTŖˆ¶”/GBˆ§ŪpctI“0łžAW‚°ųoN˜ ­Š•"T[€)Vń„Y²q¶6Xš½A]\FĖ· ×h æĻōÅ«ų°_/žaōs š3µÄ»ŁŪq²·%K•S⾬lö„”ÜÓjµd©N’vq°ĒÜĢ”]L}(ĒB<}ītg; ]—3Ą»@ąt]Ģ·Ś‚īN¹'ŗ®č¾Å÷N˜āI—€§{±¢ō—Ć£Č×®PśéĻóq²³edŸīL1€ aĢ^¹éžĪēįģDxLi™Å p¼J¹‚G°\t+«ŽH4,äQ¬f,€ͽݭz¹9“„Ru£Ų¾i WŅ|ą‡÷tŖ¢kĄĻÜM/$„BhR„wSčR¤|ź«ā‹š€č«±RA)‚RDPDŠ¢Ņ[‚*AZ ”„Ņw¾?īf“ewS $”y~æeļΜ;sīŻ°ēĪĢ™sv³÷č 6ķŚK䌅ģ9rĀģ0V·Ze¼<Ü=“5ŪwqąŲ)~޶“ߟjsJ¾¼oYVlŽeĆĪ=üuų˜M#}#aźčėĆKLcŦģ=z‚}GO²ō·-Ģųī'ZĮ»[”Pܛ؛‚ ×ŪyĶM“»č¼Ć•é¾äµ¾=8pģƌ’œŒLŻŲŗ¹8óņSŻIĻĢälĀ%RÓŅ3u.ĶėÖ¤O§VęsĒ¾Šļ×oēióų꽑œM¼Ä_‡Y9‡å„F„@fæ=Œ÷g-¢ßĢk¬¾Žexė…~<Õ©5^īĢygįĻęé7&z"ū·_ģOōüeVķ¾ū߁ 8ƒ^#õ=É1ó&į_ĪV–Ī\\œł.j,įSęšü»SČŹÖ'…œy¢}ļ TŲŪØP(īQģNk9{6‹ŠŲī³Ą\Óńƒ@‘ĒĒĒ»eć–RÄ>oŠ6-›qüøuR§ßĻ Š×ĒĘŠ¢’–‘IĀå+898ąćUĘŖ(8vŠoFńó“÷ĢSÉł‘‘™Å…KWpvrÄÆ¬—]¹«É)¤„g*yż„¤k$%_§Ry?‹mN‘ž™IĀ„«8:(ē]¦HėŚŠā!°ó@«™ !§Ī\¶sĘ­#…x»r ×ū·­Å]½°[žć›1„y#f9Ū•RÜø89R)ąÖ¶Ł$\¾ŹŒ±ÆŹų89:P1Ą·@9/÷Bowņ)ć‰OĻ‚oĄŁŃ±Pŗ(Šū {8+ĻqQ‚u乘ēŲŚ#F”("m›5(m …¢X±g\Æå9¾™”KŽĒżkv„ …B”øO±g€ćÉĶxd?°}2½_E9`) …Ba…=œžÓ š€9[Tś˜Žw¢Ņ* …BaE~ė»_›ŽĖہ±œZ¾ąi`=rčkūā …B”PÜæäg€ē9‘äĖ3ą<śČ6Ż04•]Bß®TÅtĪfо}Iq“¼<ī3Vo±ü7š÷?znāM»lE9U(Š{“ü p:zXÉ7”ū£Æ ‡”čū|ż±ō|^Š–2 E‰°zĖ9uę¦Īķ5ņƒ1Žé™™<1ā}Öżž—Eł¹ÄK,ßƉR'* ŽDAِ€žčq ūŃƒtų’;͜f’;Š'z1°’v(«ø=lڽ—.a7ćkW4ŒŁF6īŚKļŽ­,Ź»„5ćņ¦%·½…B”ø“(L>`€=¦—¢”IKĻ`ńƛłūš1Ņ22©čĻ3u°’ĖĢŹfå¦Xbö")å:®®ŌÆQ…ŽZRĘŻōĢLĘ©=)aͶœK¼„«‹3ĻqšÄ+Wń÷ńfpńJSżH›f Ø^1Ō“t:y“ćĪŅųĮjųxs6ńóWÆgŅ‚elųb<å}Ėrųäi¦,ś‘Ķ»÷‘•m¤zÅņ?sžł«ÖóõŖu¬ūbÜM…½T(Š’@່›bŁ}č_~šö.” ė˜Ė'/ų÷g}cž¼lż6vģ;ĢoÓ?¤Yęņ£qgiõÜ(ę®ųŃĻö1ēŖ-×¾/ÆõėĮK½1Ė~·v+»a݌q4®]Ķ\~äŌZż'œÆV®eŌ’õfŃĻł7ī,gM ~*yäāiõŸQ,X½žagĆĢń¤¦„S”Ė "ž}’¶·{ß­Ūʁc§X÷Å8š>XŻ\~ęĀEš x9?žŹ›Ļ÷5—‡5ŖĖū/ē&7X³}Oæ1M»öŠ1øI”ļÆB”P”$äīŁ=õąÓ±7·žJPęiOq‹üuų•ĖūY_€Ż¶0Ąæļū‡5ŖZ_гµØW‹=GNŲ×ū’”QĶjĘ få šÕ©inćąń8źT«da|u¹ ōė҇›ī=z‚•-Œ/@9Ś4­Ļį§-ʟķŃŃās—Ц4“Ź©K”PÜĮ8y½_ššŽćŠ÷öŽ ×Š÷+ЁÄ+IųūX§Įó/ė…³c®śå¤k\¼šÄšč™V²q稢łŲׄ¤k$\¹j³3qqŅū;wń26tų$ü„ū±Åµ”T|¼l’Łų—õęH\¼EY¹d…8 ę5g…B”øQSŠwYŁŁvSŁ ¹;Ź2²²prpĄŪÓ:ĖĻķC©T¾ąšŽ™Y8;:Śl£×ĆaTō7˹ŗ8ö EFV–ŻtB€Ńh“*S(ī[Āc¢AꓦK\@Šx¤žBdū4ūr·‰š˜·@VB'3±UĮ©iGīōEĖų!631tįmŃiŌöaķA¢Bž{[Ś/$@Ž„˜y‡ ČŻjt³¤ŽāłŠ<ų”ńd’æ'­ŹÆ§„s=-7Q½æ7×RRyē„V²'āĻjdčļćMzF¦Ķ6ŽĒŸ';[7‚å¼9u.ĮfŃ_ƒƒĆś÷,°æ¼ųy—įČIŪ{šuoģ[ż³T(ī)ČZKHHqł—Ń۟`BX G¼½Ęæ„0¹įE¶'ˆĮHŒĄķ1ĄBtł0PŖX|ņ¼ņn5źtŗÅW’øˆū…•9|ņ4ē-“ˆÆŁ¾ĖāsÕĄvś—äė–Ļ?RJż/š©ßühQī`0–a™¬¼j ?»µ0ģ9m |3ŠOėńYŖV`×Į£\NJ¶KĻĢdŽŹµœ>Ÿh.ÓL£ōōśŗ‘Jåż8x<Ž„ĖW-Ź3³²‰ŻsˆŖņ=_”øIƐåcż’5A¶CŹł@uŒbĆ·—ōģńZę”ī÷ŽGMAßEōīŲ’ ó–ŅkŌōé؊€re9qö<óV¬ÅÉ1÷«ģŪ¹5S-§Ė+’£{뇨ą_ŽĢĢ,6īŚĆžOłŅ@‹vkTŖĄ¬ekČŹŹ¦œwz?ܒ~]ŪņÉ7+čüņ[tkՂ ’rddf±aēćĆWŸ _—¶Lżf݇Fҳ]ž>Ž\OMgåęœK¼ĢÓ]ۚūqvt¤J ?ÓÆ$)ł:Žeö>œó-‹~ŽHrj]B›čėĆoÓ?`Ź¢łqS,—Æ^3·±dĀŚ5k@åņ~¬łō}>łęG~Śśē/]ĮĆՅ*,kå‰=ū플Ÿ»”ł«×s==ƒ^‡įāģDćŚÕĢSĖüŹńÓŌ÷ų䛳%fg/ćīāLj•X>łms›Žž4®]ĶęzqĆZą_Ö«Ųæ…ā®E2A +y p䒝ŸAˆ^Hj!šDpÉ?¾Ć-d>‘"ć…DÄöGŅ؉>{š 2!~A8F1”yīōÕØŲŠdgŒĘG‰n™»5!b{¤x=Ņ¢ČDæb” mīæ¾=†h‹žŸ@ ¹ˆ;Š Ÿ3!ųo ł±±dÉ$Šóڧū@‹£uū„€=÷•†ä¦#|˜V2źčÄĒĒ»eć–R}µiٌćĒ’µ*?šż }}JB…Bq› ģ<“tĖ„!§ĪŲ4Rˆ·+z½Ū:Č!<ę<ąITØ[¾rƒw:ā•™œ&*“ZŽ–„Ē~<\Drä9åŌŹ‹ˆ Ķu‰ˆ™„d’d4±É%„Ń)AĄÜӂ‰lŸl’’I?²dE>ӝ;FÅöCČE@:RlyAō<É@e`Q”C±£ć6ĄĮ?ĄæH2TBŅ0‚čFTČÆ ßīƒƒŲ‰žJw/śņŖ P؎‘"€ØŠRŌcoœ×ų)…B”øŪ™Ł<“š˜³čÉstFĘvE7¾?vłi¦=šėō¹Įƒd—Ÿō'µŸÆĘxī ķ'’œĘ,}t/dyą¤ÕC`Ś }Ün[%H~^Š€Ž@Eą=`L‰h¤P(ŠŪ…7ÅĢę93œ>€#U+ec--M³“BčėĖRx €l£ķĶ’ś(xmž*_=J1×lVK.Z|veuw%1˜š˜Įł6-s–L…p ÉÄ|źJŒü š`"0ŚōŖ| ¢š6ŒĄ‰[ŠO”P(łė œĖ-N Ó¼“ļ©Bž€† hŚĶĒyĘlŗœ-ŒFZž*£ĮM‚d+«ņm;Ó!ēĮ ‹|sHĆ­§:øuņ3Ąg±Œ݃¢ÖP±  …āN`dLmŽ ’É-4^!˜:”PmH’ƲveFÅLC擯6„į"ĀŅžmžĘŃ@ģ-‚žłŁĶß4 /Uģ­+ …ā^Bśō­æęŠĆ€cbŖŚƒw¾f^ó¾Ż•ģĢO8slCŹĻv; IDATæ]bZ( …āVp!Ūį’UiŽ_x!Ļ"ÄSŒ Īurš¶Žˆ˜YHń"YŽg =АÉHÜL£DWą{&ėŽU“š'¾}$ˆim/į1 ĄYĪHYpE° ·ōüC]JķU„ń'9\@V~Gč‘K¶6Cv(‚™¤ÄF{ !³‘ųU€L’§gÜæ %ói/į•Õ—š˜C€’Ŗ¦÷”å(UŌ“B”PÜŻ¬±ŌĪėKtgŚ~Żk2!Ä:¬šÄŠĮ ŗ3Įx‰)N!Y‚Os"®ÆŁ°D…}†ŃlŚ#¼ HąGąe2ek‹“‡F¹C×%óntšzDv#“ŃćNģE2÷“ö– Łm–ŸüPi¢B¾ü ņ*Rd Glœ„&›11t…Y>²łuÜÓŚ€|Œ›L„ēŃÄl„hŠ”Ÿ"ųīīy±ŸŲčĻOG€æŠŲngąÓńĖŃå[…¢T(ÅÉ=ŠRqגßųk` šÜM“ō1½ŹŻÄł …B”PÜÓÜ®t„ŽyŽļŹ(ZIÉ×quv.m5 E1 eéo9Q(nävą yŽ“ķJŻĮ„<3¢“UP( Å=ĢķpĀ@N–õl,¢®( …B”€ÜpE`Ą u9SĒĶŃCQ„#zä¬@;SŁ ¶R”P(Šū†ü0ŽŽL˜éu3ŲĪ©P( Å}ĪķZN¢/oSū …B”PÜÕäą½@§źV GAYNįG²iĄi Č(@öŽĄĆÓ//ļŅVć¾ %%™¬¬¬ŅV掠L™2”āą”&ö’ńÜUŒŽé…Ģź‹”ū‰ ŻVŚź}–x ņóÅ¢ƒW0fKYŒŽ}0rč„¬a±c€Æ`Ć1'ŻŌ)u÷ ?­ŁXŚ*Ü7ōźŁ•?žˆ-m5ī6lś’€ņ„­†ān'3;ƒüɧĄ½c€Ė{8 幊 °t®€ĢžĮ9ąž2Ą …B”PܹȌˠĶSJÄ{e€ …Bqē3±U<šRi«Qœäg€Ū ļ¾PBŗ( …āf±£Ę’CŠZ €Ó±’‰!æ™eĀc^C„£e‘)‡ˆ˜ŃHéMŚ•H¦=j?lxĢ HˆGj×]ŸFŹ0$> SāO²äW|f™)Rj$ļx !Ū"B ') öa‹z"ßė‹”ɱ”‰cL ™iQ7*&DO„¬Ņ“ §AūØą-ŗ„ļˆ©įņŽEJC€ČżN¤\}AĆĘå«K1‘Ÿȟč™.āJB…B”PÜ$‚` Ęæ‘ŒŁh ¼‚”æ3Ż,'ńA0š¬ģ~VmŒŚń’ń Zēk|uś‚Œ ŁeR~ tGšB &ć [Ó,¹Óė;6 är`8’ ƀž Ē‘ĶAFÅ<–oū— £‘ņiK½cŽA‹oh²30Œ› ‰6Ż$‰µ€·Hž½Uū)W1)ŖpķÅFaŻ0 č_č `8z`ށ×ņČüĒTƈ怑DģhnRZ9 £ėO`4īś‹ĀąW€ćč£įƁÉčA;ĘĻę‘{ĪT˜ x§¢ …B”°K<īiyx'†œF‡ D/s™īܵ,›½t²—”ßw‰j™›®6²}C'€Ü ¢ ÆżdŹh£uŅY/1ł”ÜYՙĶ3‰]‰&f#E ÉN-ŠŠ7 õČ7™¶×¢jĀCū‘ā-żŅdG&oqčMäN·\½78 é œ`RŲ–¢épód€§Ÿ•ŠŠ¦Ż0ÆĀ2+’B”P(n»‰lo½ÉŽ3l`DŠŹę2©é£@‡ģę²ˆŲŠ@0°Šń­‹$ŁįWŪåb'ą‚“—>#*e‚“Lluͦø4źĘS3Ō(|߀ FöڬwL’Į;L'H³OR2zšå®;·|,Qb©³ņ3Ą­WMĒŁĄ7Ą` 0͆üHōéé¦Ļ­€gŠGM…B”PŲEbķPčŽF" )żĶe'O®N!RFb”½E›~uOI“­ŠøƒCN”#O Ån;ŻaKĖ©’œ™V£gįqm˜:‰!ĢeŁ_é r@¤čmŖ,±égČßFĻldD7ŗżYĄJą„ łß)čq£ćMeÖóģ …B”(^™ö+e&"Ļläҧ²AĪQŃ;Z ‰Ž@"ž?”×lhg“Y£I=b¶ŃÅTāŠ”Ł6eŒš>ź¾Œ-ÓQį“žLjžbŠ™±±DJ xų‰­©’[Ğ@Óńją§"“yXd:ó R( ÅmAųęSYåH5‹9@F266)[‚ü–ČzE !l y»ķ~B__u9#ó4īö›2źuR^-B’`”śØŚĮĮ¶ĻŃšķ®DÄfŌŽ‡-Ź„œ 8I?®mo”GŅł¬±g€Ė¦ću7Ńī?¦w' ĀMœÆP(ŠB#«Ū,Ö×v1ސ—żć°3 Wƒ|ŠLś†"O? µl– ِ¤hśŌ°ą4ˆ@Óhӆ¼fZ£ÖlO„ŪCˆcČģ*¶ėy)æćåŃ!›@FČA“Ž@&ŁN‹‹Ōw1`Ļ—Ķs|ņ&ŚĶ»ˆļyē+ …¢š4`ŌŽnÖÅ2\ė­ė“™@Yļ"ų‡čŠEīÕ(ß`šNKgŪš˜¦@k»™¢‡”r3HoRb’cÕʘ-eņ9 ƒ,ćĪ¢) rˆōYb=ŪŖi¦=Ćā†k39cIš!yųYŸšĪĆ›żōŃsģ@nöö\å5š…Ÿ[Ļ%ļb»Jł¢P(·—x„q9įŪ×#ÅQĄˆ ISįįi½µčÄ©_ØZé$PIōMō™" ļĢ}„Ēʂ¼āŽµwĢ’Fł1šų?`į1CEŠd$AdĖ€ČńVѳ Ā=x-)±kō¢j„£„o’8Ä!Z€|8€GźwVēf;|…–ł!ą…°1śĻ0TE“·5łƒ=ć˜×€ŗŁ‘ɏ¼ܶ۹B”P(n LĒ€€ * xĮK€‚©d;Ų\Ū]śT6z*Z‰į¦ L:šh‡dæ)ņŌė ;ŪŃä£ę4‚“ZžŒä+ ,’ĒA>‡Ķ=ĄsD…Ž5Ė—«"ACʳ–]Źc rĖ"…÷“Ē€’—¢ˆĮń8 ˜†4¶·ŲmÖ©ŁE$qĄeÜRWYÕ C:pę&īK”±7ĪūR”=Ą9T4½K,§£ …BQ\Dņ®’ŚŚ"jÉčČ& M¶CŹG€åĘa¶Ē„࿁^…’ 9‚eš&ūč –ėŚśƒõZ·n\?0½ hwƒ ÉN5¤"b!©ćlčtNą*–"eh”t¾ ģą+č–?x= GQhmz?Å=”:J”P(īj"„FJģ_ōᑐg‘9ėÄ÷×\«”I=h‡$“•:Ѧ¬£(ŃčŚÓ6닁üān®žčŽTck!Ūl äÕŽ|óŖ) …¢X‰D2J 郐 §Ÿ˜Ų¼h[tfS“ķ©wœĘ•g1ā2Žō+?ŁM<19ų,ó;łą)Ą@ō}¼kŠc@’³!k@-? ¼GīŽßŦ©B”P(n!‰.‡¢ØŠo‹A™’G÷ŹžŖ“ÕČ!?ü'zĘ£’ī¦÷’™źrbŽ6Ņgēl/5 …B”ø·(h‹ŠŪĄ‹Ą žhfĆmĄŚų^A =ā–µS( …ā„0¹góŃׁ[ÕŠsžjč8ŻÓł(°}ŗŚŚ£L”P( …™Ā&?NGwŹŗ™°” …B”P(n °X”P(Š‚‰Üéʵ¬:ēō˜Ów8‘\øęZ²õ€!%‡ ©P(Šāćzv]4¹ńri«R(’Ü*£É“’,\¼füŠ؂ž%©(¤¢ēV( …B‘‡‚ šd`ų-“Æā@+ …Baƒü š nĶų* …¢$č³Ä@µŠĮE#e" 8ƒŲČø`Ū9vßŲģG¦C'„ꇐ.H™ŒgѲ6mčˆÆ#XFTčĒ7­W¤ŌHé„QkR‡ƒįW›: ŽéH٬`Œ²Ā<ŪzšlćV«µŁšŲĪéĀÄŠ6ū ߎ ēˆ ŽĄčŲVdżˆūŃ;aĢn…ø9N#)ŪņÜæW‚Q;ʤ]VmT_ņ3ĄÆē9ž=ōł[éL”P(ÅLDL$ßa¤. Ē8Ö’,™ĘØķo6Åāœš˜ d1H“øŠß³ƀtGš/‚ 7­—Ą”»@46ėƒ€,ć5"bZĻQŪź#2—a¤fī5˜Š4#į1Ÿš'¶„ŒFRš·Ół¤üč €QŽFˆG‰ˆł£ńuóµ&§Ļµ2ƒF- ƒXˆ&’źX5ķ= )F Œ€[2Ąöœ°¼f¦ćÕĄ›(ć«P(w‘ā š&šl‰•Š õ~ ćb2£c[™Ļ¹­üƒ1:śaČņ!KVDФ¾thČ cbčĀ›ÖMņO"D(Ōńą‚d‘;õT·‘RChKŠ3}²Yil€O€Ų ×Gµ·„†dČh4Ł£hŽG†užį)ĶĻ"Y ×Ū‚¬S˜ņQžšÓĄ~Āwăq3ٲ/9 u„ÖŲ$óĆņĘvø œ!b{m¤˜H–C-`Ē-hw÷ō'‰lŸŗųpˆ˜Hž'5«)°•”ŲĘ@_r£'ņ>Ęü±‡ģ¬£ õ–Ž‚>C‰ ›nQ2ĀĘ%äLŒ¢š6ųĆ\ń{3$U€yD6æ~‹ŗŲ»ę9V#_…B”ø‘Z}żĄh{ ”vńw@"d-s™†ÉpHwŪ /żĢ[ŅM°&ńĶ[±€l£Ÿ®5Lņ¶3īoq 8²Ž-é`t,œw ż 8ōcšNGs¹Ģī €_ß².Ųē5ŗe‹£#…B”P3B–ÕóŚjżÓɎTRxä~ĢŽ†ćŽä BKGĖvCŅÉ0ąW÷Ž’nRŚvžŹIę#4}˜ėpe׌ä"‚ [ŅGļ”p©#…‘ˆķ³ā#¼2ŗ`ž ½8܂7ݲ.Ų7ĄgŠÓV(ŽŽ …BQÜ/SfłNioć¹ĘŠhx!2A&SõÅF#M«Ž’£ÄsĢl~k#`„±rī¦kȰ/B:%8J:Ģ…ģwA VéŽÓƚH1ŽČĀ^[žäē==a_ąōxŠ …B”øS0Źt Ew¢C÷(?r[Æ"y›čŠ÷½µ2R+Q”A“IhāćCOÜv½ó"ČŌķÆÅŅē HwI…j/ræ)…Ķ—Ø‡Ī³čĮč^ȌŽ&ļé[ϧl"æ'ŠhōųšĄ@żāźT”P(ÅB<Āhg©P Āc>'"f“.G*`D3aTĢ4² ƒ@kĀAYŒŅŸ‘;}KH÷ō­NB”³/"üA\Éż,Ó±‡®_.ĘY[1pŘŃ)zƒÜɤÅÕz~8h¾Ļ© °HBŸšž·Æ‚ŸČ …BqshŚvÓQ›õ£b† y€č–")gŒ@ŹOņŒb Rģ@ĖL <ę£b‚ĶķDÄVddl3Fü^©ųÆAī$R>I¤“¶I±ķ?åЁ2DĆXÉKmH±éę¼ä1cŗH1æŲڦąP”ćČŻ ąizŠR”P(nƒw³Ä`Ā·WEŠ_Š8Qŗ D5„|)ŒHćLFżķŽøž_ą²å>K`ŲoŹ”‰Œ"ų!ē3ó)CŃÄ(„q Å!q|č Ā·ÆŃ“äŲ-„Ē®Ep)݁šH9ČÄhüÜ|Ž”+¢/R®"<ę ‡MŽŪÖX†ņøy"…‘šŲY Ē™`\\,ķšČĻ†ęłœ œE7Ŗ6\ĖmrĖū¤ …B‘i¢7.L"čŒ„É”Ź(Ž¢Ń‡Ø–1ˆ”ę *€üĘl|¦“æ\AŸ¹ÜNxl ‘R+.‡£üÆAū?\ų!ūƒ ³0Ÿ’ær “ZęīĒ[Dxlec€±¹a+ä~„Ö£ü­Ųt“Ł«Ś8ą¢[Ž|d0äg€sžr$0 ų}ZZ”P(w ÓB’€’ŅgÉ+T ŖŠŃąČN.X aš•ƒˆˆabČi‹źH©‘¼=d(pĪl|µh2e}Œņ qüäŸTō!ݐf³>õŅWø{.ÅÅ'å†kxžĮ;’‹gFuŠÜq0f āķƲŽ O¤œHŅA£?B\"ś” $Ć6TĀ;Ļ@Ń=ķiŅ™jķŁwņ_ŖśąājķhÜg‰Mf Õ9ŻŖžvʽѣ¢|‹īhå€>%”PX!„䊔lݲ‰Ä„‚g„āāN(sæséŅEV­\ĪŖ•z¢•źÕkšGĒaa­ń,S¦€ ÅŻ‚=œlAßü`É©£ø›BP§N=źŌ©Ē©“'Ų²e#[·ldćĘu$_S;Њƒ¤kI\LL 11”ė)Ź+÷ö¦ :æ¢'fxŻE½DPSŠw7YYY<°O7ț7»¬Ģ[ +{ŸąęęF³f™G½õ4Bˆüž›*īTŌ“¢ śŸ= k°øķ{Ā”¾·HIIa÷ī?Ųŗy#[¶ldļžæ >é>Į`0P·^Z·nG«6ķ ĆŃŃ©“ÕRŹ+ "?¼pĒ2RE‹n• Ł‹Dą{› ēĻńūﱬżm ė׿ŹåĖ—J[„„r•ŖŗĮmŻŽ6mŪS¦ŒWi«¤ø (¬(ˆü š5Ą#ŸśĀp (ņ¢•2Ą÷F£‘żūö˜§«’=–ōtŪū÷ļV|}ż mI«Öķh×¾#AAK[%E   °¢ ņ3Ą›Ń7dß ×6E=Iąū—““4žų#Ö<]½ßŒĘŪ Æ8quu„yó`µŽ{Ÿ£ °¢ īČ_e€9\ŗt‘ķŪ¶°uĖF6mZĻéøS„­’7®ć‡āäd;SšāžA`EA”¤®`z/HP`…=ņnwڲy#WƖ˜s¾y×q[µn‹··t¬Šūe€Q’x¹9†óE`EaČĪĪ꥞½ęõć;bČȰާ^äPÕ¦M{*U®r[śQÜ;(¬(e€÷ ©©©ģܹü~¼oļßHysį[hҤ9;wU1š7…2ĄŠ‚Č/”BqWįźźJėÖŗćÓ@bb±1ŪŲŗe#Ö’F|ü™|ĻĻ;­Ü®}G< %%…¬¬LÜÜÜptt*muøzõ Žø»»—¶*¤§§‘––†»»Ēč$##ŌŌTÜŻÜqpt,mu÷)%9ī ō(ĮžŠ)%sæü‚Šą†4m\›ĪZņh×v“kJ½+Ó„c+¾YōõMgßQÜł¼öŹ ŌÆS•å˾+mUhTæ:/žg@i«afĘēS©_§*īŽYŚŖČ·‹RæNUÖ®ż„“UQÜĒ×cŖ?PHā[IYÆS_„ĀĒ“'šń¤ń”-ėCŸ¾ż©Q£ ŠĪƟęēŸV1źuāN$bĢ’JT·ķCpqqeõĻJ“ß»•ķCpvvį§5K[…BqS\xØ |ŹSLšē)»|DÉÅ£f钒’ĀÓ§āćSŽ_×m³™5gŲšŃtīŲ’™_|Ę«ÆÄĶĶ­Äō»–”DVfV‰õw·s-)‰L—Ģ"Ÿ÷å¼onƒ6 …ā~„ ü<ŗŃĶYšśž\\ X Üøå m€»Ž2?ž/ׯ_§ŪcŪMYW¹JUš5fó¦õœHzZžž4lŌ›²×’’8p`—/_"++‹rå|©S·ŽŽemʧ„„qšĄ>Ī˜īŸ‹‹ µj=Hå*U „›”’żū÷"Fx :žžęŗģģlöļŪĆłóēČČČĄŪ»,uėÕ·ŗ9ß_µź5qssc’ž½œ›ÆÜō/ęɗ_&·n’SĘÅ_‘‹¾].łX'lŹ?Ńė) ČEß.—qńW䉸‹ņ?Ļ’W:8:ę½ē...ņõaįņŌ™Ė2.žŠühüd+™œ—ÆÆŸ¹ĆGćeļ'ūIƒĮ`%ēåå-??ŁB§†šČĄĄ rģ[ļJ''g łÖ­ŪÉ}OČ>}ū[µÕŖU[yčșļåŽĒM÷¤—ģžŲćmhš&_{}¤ü}×ٰQ›uyŪ:uę²1rŒtuuµŅĒÉÉY¾8ųey"īb”ļ×īæK@ö|üIŁŗM{s}§ĪČøų+rČĖC% —Æüլñ“äĄAĻŁüĪä ’ū<~*ŃBļwß/=<<¬ä ƒģóŌÓņȱs…ś»4 28$L>žD«¶<Ė”‘Ń“?µ:ēµ”£¬¾×]ūö(ŸL°’š£hY¦Œ—ĶūÖ²U¹ėĻCfŁQįc% —-_cŃĘą’¾*Ł­{O‹{1eź éėėgÕ®¦i²[÷žrßĮfŁĘM’€Œžü©¬WƁÕ9›4“æļ:`ŃļÆė¶É𵓒­^½¦|ń„W$ gĶYpŪ~7N½Z²kQŠ»ŽüFĄCóŌG Šk­Lļ[Š sŽ÷Ń»Ą> <0ŻPßÕTÆ^WWWÖÆū•ÄÄ|}żlŹåMžŠŖU[ŖT}€_ł™kIIx–)c®ĖČHgķŚ5”/HXXkęĶÅ—sfŠ©SWś>=_??²2³8yņ83¦Ocź”(ź×oČ#>FHhKĘOœĄø#qtrbTųX‹‘Ļ˜ˆaü°l »G''>?™*UŖ’˜˜ĄWóf³uė&ęĢśœ×‡…źž®Zł›4cŹŌų”ēĀłsLž4žiS'±tÉ"ŖUÆĮē3¾¤L/N?ʔ)QL›:‰N”IS}Åcö¬éLž4ž†ššt’’£R„ŹhšĘéÓq,\0Y3?ĒĖĖ›”Ć#¬ļ—£#£"Ž“ŗ_?.’Ļ2eņņPj?X'ߑŽĒ“'²`ž\š6kĮĄA’ĮßßĶ`ąü¹s,ųśKęż%~~ž 9€m[7óĪ’ĘŠøI3^xq*TēĪĘ3’ė/Yŗä*UŖb–!ŠŃ\ IDAT/ˆßwÄPž?ЦöƒuqqqįĄ}L™<š‘ÆQ­z Z“1ŻóåLū$š&M›óŚė#)_>)%ē/œgÉā|»x 4ā™ē^`ó¦õ¼õf8å ż&+VĘŁÅ…”ädV­\ĪĖæćõ׳xÉ »śMž4ž™3>åŃn=ųō³Łę—­[71|č‚*Vāķw>¤jµźxzxręL«W.gõŖ‘RņŬÆ-Ś;f$mŪ=̰£)WĪ—ÄÄ–|»µæ­aLÄ0¾šæŠGķ’y¦ēĪåµ×GŅžįN888pśt‹ĢcöĢĻ uŠŪI~ųaÓūĻčFõĘórę—“k|.¢ėQ@3“ģ]= ķįéÉĄAĻ1kęē“nŁ”‡ „jÕjV  |y‚‚*Q¹JUŹ—“8OA’Ļ0īĆHVÆž‘~O2×mټ‘kII ųƒ€ukĮ×׏Y_.4—‡„Q»vŗ?ś0üĆ#>F͚µ©Y³6Ÿ|<WW7 |Ö¢’„ ēYžĆR‚C˜3w‘ÕuµiӞķCXüĶ| ¬’š}EóęĮę²–­ŚŅØ~5Ī;Ė/k·ZLq·kߑ¦j±yó†B`?’¾łöG‹iõrå|4ąI _/Xг³nŪ¶ė€O9_^žļslݲ1×ĻüŒrå|Yśżj«)įž?IXpC3Ÿ”Ć#¬ī—‹‹«ÕżŹĮŁŁ…•«×Q½zĶ|ÆAJÉĀłsńõógŃāåVہŗuļIčC X²d‘Ł ®[»€9_.“XvxøCź×©ĀģČ·ßuųbÖ×4mÖĀ\ÖØqSź7hÄ£]ڲpž<³^ū›Ž÷ǟL·ŗ¶vķ¦vŠüż÷nsŁ‚łs‘Rņå¼ohа±…|×Gŗ“”t• ėćĢ™ÓU“ŅmęŒOłxŅxŗ>ŅĻ>Ÿc±Żgάé!X°č{+]zõīĖ=ŗ°ęēU\¾|Éb:ŗYóĢ™»!„¹¬K×nthŹöm›1hšĘśuærśtƽ>ŅĀ)²IÓęt}¤ķŪsņÄń‚o°Bq±· ÉØj:žÕF} ĒB±QŲōīŒī!}×óÖŪšĪ»ćØ\© ›7oąĖ93ųšƒ·yżÕĮō~āZ4­Cū6ńò%ē=ÕwŽŽN|’Żb‹ņŸV룆ŽOö3—]OIĮĶŻM³žZźÕoȶ˜æxåµ…ÖyļŽæ‘Rҳgo›õµj?ˆŸ’>dQīźźJÓ¦-,ŹÜÜÜØX±2žžVėĖ>>åšņņ&%¹š>w6¶2X5kéĻt75ßŖ>P €dS‰‰ Äǟ”c§®6ŽÜÜÜhŅ“9§OĒ™Ļ),-[µ)Šų‚¾~éŅEBC[ŁÜ‹ėźźJ÷Oąėė‡Ńhąśõėhš†›»õ¾qwww¶lŪĶä)…ł”·0¾94hЈĄĄ :øß\6lD?­ŁČT·’ ‹/šĖžžk7ž孌oŻŗ÷¤AĆĘ\¹rŁŖnĮü¹|šž’čÜåQ¦Ļ˜kµ×vĻžæØWæ”Ķū,„ ¬UŒF#GücQ÷X^Ę@Ó4š4iJZZ‰ 8|č;uµjßŃщ޻ؼ&…¢$±7ĪėqÖF}„<Ē'mԟĻs\rīĄ·MÓxįÅ!¼šā¤”$&\ąÜłsœ;w–sńgŲ»÷o~X¶„×_Œ““3Żŗ÷Ą×׏®tcõŖ9}:ŽŠ+‘•™ÉoæžLżś ©ż`sa­Ś0ķ“hzõģJpHAA ¬DPÅJTŖX¹ŠN/9äü0åŹŁ”øa¶J”( ģ`Ļ<Ē 6źóĪ7¶QŸwČqOą¼!šóĄĻ?€ ™ĖėŁ‹ž}gĪģéf Š೬\ń?,[ĀkƏ$&f+—/_āµ”£,Ś:lY™™¬\ł3¦O%;;Ū\§iaa­™üÉt+JϤ¤«Ģ’jN¾reŹxŖ½;‰¤«śµmX’Ö’–ÆljźõŪ¢Czŗ¾ŻŻĖŪ»Šētģ Ο?Ļ¢…_1oīl233,źėÖ­OōäOķŽ:o$ÆGńø¹»›’@_āxéÅgHOOĆÕՕ²e}pptÄŻĶ5k™GF£‘ĢĢ ¼ĖŚöŒĪ#Gc4iŠ ‘Ķˆaiiidd¤sčąĘD Ė·­ŌŌT‹Ļ…}ŠK¾¦n7WŪ??öļ›BQRŲ3Ąy7I:ŪØĻyLO.ŁØĻūW{~żJµæ­įĖŁ3xŖß¢]¹V­ŚāęęĘæG-gå[¶lCÕŖÕXö½n€Z½ÜrjŲŁŁ…±o½ĖŲ·Ž%+3“sēĻq6ž qq'‰ŁĘ7‹¾ęķ·"˜5gA”ō6ōÆ÷ĖÆÓÉĘTÜŻLĪhyčš³óYIć쬒×(ЁB˜gRŒF# 8}śńgΰßfĶüœW†<Ļęm» Õ^΃ˆ-RSSĶWRJŽ|Cߟ¾xé4mŚĀʘ5Øū€łXÓ4ø~½č’}Ć#Žā›E_1yŅx<<˜(„…½Ēɼ#X[÷9#ą8;ēēŻ°y×ćHOOgĖ–üż×ī|åŒF#ŁŁF«)7!ż>ĆŃ#‡łėĻ]¬Y³šÖmŚ[ģk5Œū0’eß €ƒ£#+V¢ÅC!ōźŻ—‰ŃS©_æ!;‹ą “3]w-Ÿ›•+–ńŻŅÅvėļTŹ™®-łZ’]™m[7³pĮ¼"ÆÓ÷wńb¢]™!/=K„ Ž$&źI³¾ųŒ/¦Ot#PžfĶā±O0fģ;<Öć Ž’×¼–Yņ‘»˜˜€>{įĀyΜ9M—®ŻhŽ<ŲŹųfd¤“œbyŸüżżó½¶ysgR©‚·ŁŸ!!Q“>„c§®¼’Ž[Ģ’śK‹zGG¼¼¼­¦—órąĄ>.˜ĒéÓö~bņ§¬iįŅ„‹6ė/œ?o³\”(Iģąx ĶtlkØ–éż”ó˜ŽÆ…ū%¹ƒiÖü! ?­^Įå˶ü:Ö’Fzzš•“@Ÿ§śćččÄ[o†“˜pŽOöµØ×4ÅßĢgęŒOm¶-„$--Ķfƒ£#ׯ§X•7lŌ!ÖÆµy^rr2Ƈ¾Ģ¼¹3ķ^ӝJ… Aųśł³yóF²2­£ZI)y’Ż7yēcpr²| ²wæŠJPÅJ”+ēĖÖĶm~7ŁŁŁģŻū7eĖś˜ įŚµk˜2e"))¶ūOO7µsƒ£‘=.°{×Våū÷ļåĢ™ÓŌ«Æ’WŌLķŁėwĒŽ«ūŲ°QāN“rŅĖįÆ?õR[ŽT|>c.Ķ›óÖŲQVy 5aĻßšLndÖŸ2&b˜y*¹Øäü“ė933ƒµ&oō¼\KJāźÕ+deŻÕ›6wö¦ ³m@ą šÜ‘¬;³?å_ēŗOšŽ÷ĘbŃ“)_>~Obį‚y<Ü.„ĒļM„ŹUšóóGJÉåK—ˆŻĘÆæüŒ¦i yyØU9ĪX+Wü€‡§'»t³’ kٚU+—óʐēéŅõQüżĖćāāBBb+–ĻŃ£’XxMēT‘Ų˜m¼ūĪ„†µĘÕĶę̓ ŖH§Ī°ü‡„dggÓ­{OŹ—';+›sēāłjīlŅÓÓx²u›w:Bž}ö¢£>ā©>ŃĄ³T®\” ._ŗÄņ¾c’ž½ōyźiœœ,WQrīWäŪckŁĘ|ænF‡AĻ<Ļ”ÉčŪē1ś==ˆ  Š $$œgÉā…œĄĻ?ÆäóϦÖOOóßīģ™Ÿćąą`ń`2č™ēYóó*öļŋƒ_1ļÕMJŗŹŗµæ°ģūoiŠ ‘…#a^\]]™ūõbžģõ(£F¼‚‹‹‹yŸüsϿĖĶčżų#üēł—ØU»ĪĪĪ\½z…-›7°ģū%ŌÆßŠ"śZQxøC'‚‚*ņłgSF#mŪuĄĮсų3gX0’KāNYūŽ>Ü.˜sēβbÕZóV7…āv’ß>ą™čø*ĢC7½Éõ’Ī;“Ŗ‡¾6<‚Ü)ź„ŧjéņž‡)ēėĒüÆę0{Öt›25jÖę­’½GXĖÖ6ė{>ž$+WüĄ£ö°“˜ŪGׯ_gåŠe¬ųń{‹:!mŪu ņ½qVē½>,œżū÷2{Öt³n›·ķ3yŹē¼1z8«W-gåŠeē98:ņāą—ōĻźÜi¼ņŚ’S’™÷åL†’nt­s—Gy÷½ Vå9÷kĪģĢ™­Ē‰Ł¼m6<³ bčŠQ\¾|‰E ¾²‰ !čłų“DŒyŪ\6ä•”œ>Ēwß-&fūV«öźÕkĄg3¾“*·Ē#>ĄŲ7FZ”{xx01zŖy°‚?™ĪĖ/=Ēø#­ō|ī?/±’‹©ŁÖ­ŪńŃųÉL÷ļ½ū¦Uß 5aĘóņÕĻĖĖ›‹–ńxĪ¼öź‹8»øŠ©SW:uźŹGć&õo½i½w¼a£&|>ż’Ł»ļ訪µĆæ=齊Cļ½·$ ‚6APģ^E/*»Ų‘ xķØWżŠkTz‘*% ¤÷:!½gfö÷Ē™L2Ģd’Š‚š>keMrö9ūģ™$óĪīeĪåķķĆwS~åÉĒ䓏?ą“?°§Õ«×€˜±Æ0aü[ēæƒ»v.ü ”4źh+Š£¶ FSsńķG0–³,÷h‡ćĒū[šæš6ĀKĄl6³oļ“——‡Éd"$$”ŗuė•:…äßO?ĪļæżŹŒŁұc—Ļ;}ź$»vķ =Żčßōóó£]ūŽ%®+ ĘüŅ;¶’tę f³™ž½ś8­½cĒ6ŅRSńšš R„Ź4m֜Ē.ž½{wSPPą²}ļž]˜-š7o锶cĒ6¼¼¼ģ‹]”¤p-芊0jשė˜f[‹9,,ÜéµĢÉÉaߎŻT©ZĶiĮ“ĢĢLvīÜĘ©“'cAś :Wœ«×ĖĒŪ»ÄūnׂNOOcėß[ģ]įį•hŌØ±ÓbÅĻß±}›½ ÖĖĖ‹V­Ūŗ\Š¢$…ĶŪµjÕęš”ƒģٳ‹¼¼<*UŖL»ö]~ȳZ­lŪŗ…ÄÄ#h­ ²Ķė®RµG"--Õiv^^.;wl·÷Ēŗ\łō©“œ:u’ ;Ķ‹NJ:ƉćĒšööqØ1äŪó¶Z­Q·^}źÕkąp}įZŠuėÕw9j’čŃDR’ĻҬy ‡‘×V«•;¶‘xä0Zk""jŅŗM;rrr8x`ŸC~7¬ćŽ{ī`ęģÅē]ó.N+õZ!åE‰Jėhņžž”ØV[ĢžN;·xŽÜ ģ<ŸB]Éø¼Ž~ėUÖÆ]CJJ2ģ榛ū»\•JQ±z^߅ö:ņĮ¤Ļū8€EiJŪ É ÄŚ¾B0šžO®ĘöĒb ŗŚ¬ĮqyŹkVµŖÕ1™LT®R…[nĄÓĻ<_śEBˆĖnŃŅ8§ŻĮ„ø”.ücŽ%p5Հ…×&©‹Ņø[V¦M)éB!„8OīŚ[VŪ0F;/6qL+B!*Zi@oŪ@F@^…7"}½B!D¹¹ Ą?aĢ.¾wYeąVŪ;%-–پö]ü" !„WwųqŪcu 3Š £&ܞ¢¾įÓīµż|X‰Q;^Ȏ×B!„ edu˜ ¼tĀØ߆1ķ(Ē“Ŗc,Ü18l»˜…ż'Xōē|ŗEµć¹gŸ¼$łńłčՎ­[·\’ü…B\ē3Ź9˜Œ¢1vKŗ#@ĻĮqå«ņķ.~ČŹŹäČįCœ9}iö HMIįČįCE‹ö‹2Ū²y#÷Ż3€Ł³žØč¢!D©ƒ°Ź"cPÖ`=ĘĄ¬G€²ķ•éѳ7ó,w»QŗØ))ɬ\¹œėnčYŃEBˆ ĄżĀ݁Ž@ĄĖķ×€ŠŠ0BCĆJL·Z­¤¤$“•™IhX˜Ėum+Rzz©))ųūūę“·ńłJN>KfF„††įaŪ”żbHJ:CvV„……;ķu[^V«•ŌŌ²23 -ÓļČl6“”tĀĀĀŅrss9}ź$AĮĮNieUPOZZŁYY„„†:­įķŠÖš³Ig°X­„……9ķ u®““TŅRSß}Xø¬ %Ä%VÖwŖ`ŒXÆs³Ą1`*Ę:ŃŻ( ¾'ĄX ßÅ,lE8|č uj†qēķ7»Lß¾}+µ#Byh„1mėߛ©ŹÆæčpŽĮƒūq’=4Ŗ_v­Ń-Ŗ-›Õ„]ėF¼öŹŲ÷i-ͽƒļ n­pŅÓ÷¼xqģ³ŌŽ„NĶ0ŅŅRŅ^{e,µ#Bķ»÷˜Ķf&ƾK÷čö“lV—nQķhß¶ Ķ›ÖęįƒŁ½ė¼–ō&;;›×_}ĪšÓ¶UCŗEµ£]ėF“j^—'ŸxcĒŽŚĻ½gŠmŌŽeūö­NłäÓ¢YZ·ØOAA>™¼üŅh:¶oFū6ķy·l^—§Ÿz”S§Š–)ļß·µ#B>ŌŲ%óŻ·_§vD(µ#B™šžŪöóN:ÉsĻ>I›– hŪŖ!ёmi٬.Ś5åõW_px·mū›Ś”|0ń=Ęæūm[5¤s‡ę“iŁ€{F²&!Ž””dF>ł-šÖ”[T;Ś“l@ļ^Q¬Iˆ+ókøõļĶ »o -šÖ±?ĻVĶėѾMcŽ|će‡}ˆ—-]DķˆP¾ūv21Ļ?MÓF“oŪ„Nķ›Ń²™ńš] _Ū÷ß{“čȶ“j^Ļž»oŃ“6=0„}ūö”¹¬Bˆņq÷w8Fķ6 høŖ²`,Ī‘`ūŠ]Ü"V¬ŗõźÓ¾C'6n\Ēɓ'œvŲ™7wī¼ŪÕ倱“ϐA·sźŌIß3”-[įééEjj ń«łīŪÉdeeņĮ¤ĻŹ]¾čn×±jÕ_¬[›Ą½‹>$lܰŽŹ•«”t†M×Ó£go{ŚŚ5qҦm{Ęæ÷“æų„Nŗ2hн“‘žĪīŻ;™?o6›7m`UÜ&‚‚ƒĖU¶ēŸ}’9³gŠ£goīń¤„¦²yóFęĢžĮŽķŪX²<†AÜź•ü6żZ¶lķĻŹĖÉHOgųŪwŗyzä£,^“€Ž}śŅ”cgHMMeĆśµĢųc»wķ`įāU(„č×ļVŚ“iĒńćĒX¶tķ;t²ļöŌ®]ūļhšĄ[9xp?×]ߓfĶ[P©ReΜ>ņ ėųöæ_²}ūßL’}žCپśņBCĆøēŽaT®\…}{wóĒÓy`ų š4mNrņY~ō üŲ±c ęĻaÄ÷°nĆNŻoxšą~ ¼…¼¼Ė /½ī6ņéēøė޾,[¶ø„«Ż‹²ķ=\<gff²{÷Nž|j_|ń1‹ąŒōtvķŚĮõ7ō²71žņÓtźŌ•ßfĢwj¾0ž->łųÖ­K ×7•¹\ééiĢ3“Ūnæ‹Ļ]ģoūĢČĒųć÷©ģŪ»‡¦ĶšÓ·ß­TŖT™™3~ćåWŽth¢.ü3šī{8sś‹-`Š=÷ńį¤Ļņ~ģ‘į̟7›#‡Q·^}žž÷h–/[̲„‹č×’6žõäæ®™>õ'ŲĒó£_dŌscŅ“Ö<öČp̟ĆĘ ė花³=-44Œ?—¬vh®[·>cß%9ł,‹–Ä9Æ·Ž|…ƾü”-„’-·»} ’ļ»ÆÉŹŹāÓĻæįŽŽšĢ tóęĪ"ńČa‡­- ‹–,wŚRń¹Q’bŚŌŸY¶t½ūōÅjµņėĻ?нū üōė §€Ž÷_õ9›6®/qk!Äł+Kōn`$PcŽļmĄ8Œ¹¾W}šøżö»ššš°‚B{÷ģbߎŻō¹©æÓž°Åի߀ń>bČ}Ć]¦×ˆØÉ٤3X­å_å³]Ū°vM¼żŲ–ͱX,Du»Ž-Z±ażZ{Śŗu X,¢£7T£o1•¦Ķš»ģ;½oŲ¾˜ü=Mš6wJsēģŁ$“Ö4oį¼w0ĄÓ’~ž/&Oå*Ę–ŽŽ>Ü=ų^NŸ:ÉŖ•Ėķē™Ķfž\8śõŅ”ƒų’Ī&м¹óžÅĻ~‰/&OHh鿤…ā捕W|ųq§4„ī4¶Å޲e£CŚ =ntźķŁ 0ä[s,Üś¬ķ9øó÷–ĶųūūsŪķw9„yzyqץ{ŠZ³iÓz§2¹ŚĻų¾a#ģ]Y™™äęęҬy —Ūļxš1¾˜ü=õ4tJB\ø²Œ²h | ¼LQ­w°Č»tE»rT®R•nŻo`õŖæHJ:CåŹFŠ( Čw čöśFšŠØQN:IÜź•¤¤$SPOVV))É,[¶«ÕŠÕj-÷"O//:w‰"nõJņņrńńńe憵˜L&Ś·ėHĒŽ]ųmś/ö¼ uaĘĖĖ›† 3{ÖŌŖ]‡V­ŚQ‹ˆˆšQ«VmjÕŖ]Ž—Œˆˆš‡0åūoš÷ IÓfTÆ^ƒZµźąēēGćĘMiÜø©Ć5÷ }€Æ¾ü”ß›Ź =n >~))É<ōšćö Q§N=üżżłö›/šōō q“fŌØA͚µńõõ„i³ę›¾—ErrAA9|ČezFF:i©Žżéįį•œĪõöö.1­°ÕA—įĆVjZŖŪAeÕlŻ!§N:öėžŪ„_("ĀŲŅ;%%ĄžūżmśÆT­V-ZQ“ˆšµ  NŻzŌ©[ÆŌr !Ī»<čŌ³ż\c‘A¶Ÿ³0qüč žī)Ž}Ū±k$(8˜¦Mš3tųƒÜ=hČy?!DÉÜąm…KQvÄķ ųĄõ¶ÆB'pģ^\+Fōė/¾šóęĪbč°:t€;¶1lųƒ„NÕłāó’0wĪL ¾—{ļ{€jÕŖŒÉd"$$”g’żÓ§żrŽe+lN^»6ž.]£Ųøa7÷½(jņÜøquźÖcĖ–MÜŠ£—Ck§N]łkÕzŽMäčŃDŽ;ŹńcĘ÷-_˜ŃĻÄm·ßY®rŻtszŻx‰‰‡9z4‘Ēqģh"‰‰‡Y²ųOō~~›1ŸNŗŚÆ:l«W­`ž¼ŁÜy× ęϟC§Ī]jb·Ž6€¾żnåšįƒ?v”ćĒqģŲQŽ>ĒŠyä””Ģž»„ÖmŚ•©¬ZkBCĆų|ņwnĻ«Y³V¹^ƒ ”µ&ß6źŪ•ĀÅXüü»?rr²]žo6‹ÖŸŽŻUq›Håų0#„(›²4A.E9Ūö³Šˆ“}EćXK.¾YC2ąÜ÷Dļ>7³pįPØvŗT®R• ė×RÆ^ņóóˆīVō™)éĢiāhŁŖ5õė7tĢpüų1ŗvjÉāE Ź€fĖ–MtīIżś ©_ß±qŻŗīŗ£/K-tĄ…ƒ±~’ķWĢJūŽ IDATjÕŖMŅ™ÓŒŽyÉįŚC‡°mėßDFFÓ°ac6l쐾rårī»gK—üYęŹį#‡øīŗ.Ó³³³ŁæoS°»”ƒ‚II>[bzįßMš95Žs§J¶ån?oŻŚŚ“iGŻzõ©[Æ¾Ćłģć†īX“pž`!.óY± £’÷`(P#šŽ¼18«š#ųUµ0ĒīĘ\PĄ¢…ó™7w5jDŠ„kT©×ååęāįįį2ųZ­V—s_ĖĆĆƃȮŃlŲ°–ukģ–:vģĢʍėX»Ę˜Z|Dėé3§ł×ć#J¬‡‡WB)EĘ9óŒK³kמõų–.łÓez„J•ČČĢp8īååĶ {ī#nõ ¾ūv2>>¾Nėߛł×ć#XYl°VYņ.¬õ›Ķf§kš5kIfFū÷ļu™ē’Å čß·sfĻp™~)4n܄¤¤3=šč2½pšÕ¹®āW¹Š·zå_Ō«×€cGł×ć#˜9ó7—ł¾Ž™ē¼ŽBˆ‹ćĀ– *’ĒX':…«tttÆūĢwßNęļ-›øķŽ»Ź4hŖq“f¤¤$óĶ×_Ųū­V+{÷īę¹QO’xä0łł%77–&ŖŪõd¤§óææ'(8˜F›ŲÓ:tģ̾½{X“hįį•hÖ¬…=­^½šć”oY0§NÄ\P€Łl&ńČa^}9­5ķŚw,Wyš·h…Édā³O'±rÅ2Μ>…Åb”  Ÿ½{wóö›ÆŠ®s¾÷ }«Õʼ¹³čŻēf§•ØZ“lRŠ?šČźU+ģyēēē±g÷.Ž{gœĖ¼+ž›3“;¶‘ššbÆEŽy× L&O>ž +W.'3Ć:™™™¬IˆćƒŲ÷šššąĘŽeŸŠu”n½Ķųą1ņ_“æšÓ§N’››Ėūųł§)üßw_S­Zu:vźģpŻī];yłÅēIt×_5śī]żŽ„ī|ך Äh†.Ü¢°pÕĻŌ÷ńń„_æŪ˜śė’c`VY<3j4«V.ē×_ä×_$(8˜ģ¬,, aaį øs3ž˜FJJ²ŪéLīÖj7nXĒu×÷tų`бc¬V+›7m ’-·;¤łūūó~ģżÜH}x˜Ė¼;wŽä”‡Ÿ(WyjÕŖĶĖÆ¼É»ļ¼Ī}C\7]ßÜ÷øA^æ~C"£ŗ·Šw;jŲ°11c^fbģ» ģz.ķm·ßEæž·9kŚ“9ķŚwdó¦ ÜÜ»;`ōN>‡vķ;ņŚøwyū­W¹ļžNłyzzņŹkoÓ A£RŸūÅrėmX¹b?’4…AoqJÆÄ'Ÿ}ć“Ädß~·ņŪō_ųńĒžl//oĘO˜DµjÕcPÖ»ć?ąÅ±ĻńŠ®ZEw»Ža÷?t‘ž‘¢8ēÉ®UĆXė¹pķgwė>ŸĄ„µų“óXėųńćžüĻomĘKģĄ}ÄĒ­ĀĖĖ‹Į÷ uJON>Ėüy³iÖ¼…} `,[¶ˆŪ·‘““C@` uėÖćĘŽ7“ššĀš„8z÷éks,ɦėٱc7ßܟŹUŖŚ[­V~łł“Ö4iŚŒĪ#ķi¹¹¹ü6ŻhbnÓ¦Ė~Ńää³,[ŗˆö“™‘·7””atéEĒŽ]Ī{}å'Žó×ņ%9|ˆŒŒ üżż©\¹ ]#£ķ+q+//—ž7t%//5k·–8ČķčŃDV®XʑƇČĢĢÄßߟ*U«ՍVÅFyŸ›÷¢?pšĄ>ĪžM¢q“föQķ§Odłņ%:x€ģģ,‚‚CØV­:=Ī™[[ų{nٲµSė@RŅ.˜ėņµ.ŲÖ„K$›4+ĖKČĪŪ‰[½Ņ^ „iÓęÜpC/‡M?–-]ÄżĆ1~ĀGōīӗ?ĢåĉćäęåR«Vmnŗ©æĖłĮIgN³|łRŲGVf&Ž>Ž„‡W¢K×(:tčģrް(Vźµ:5BŽŖčrˆ+—»’¬į@OŒ€ŪŲĶyĒ€„Ąr`pšB u%ąkYAA>'Ž/õ¼²nPœ¹ €±cFƚ„8¶lŽČø7Ēóš#å«y_ˊąā*DŐ,JSŽ„(NaL3Z…±ż vqžøŹ=šČ°ūÜ/:Ę J>öd¹ņÖh.˜KZZ*•+Wį™Q1<äbU*!„øZø«g`ą ` F“ņb.CĄ•°āŸNjĄ¢4ījĄc€8`+PžEŠ…BQ"wų‹ĖV !„ās±ę !„¢<±„žužņI—0!„āÉ óĻ@°BįDš …Bˆ ą ¾„ł;Æz/„B<i]!„āZ#MŠB!D8߯.©””ę °ō)]!„8oVė–Š.‚B!„B!„B!„B!„B!„Bqń؊.€גß’½ t×Z’:pąĄÅ]&!DÅø"ē ńO6nÜ8Sūöķ«[,–J©Zė@  -PµŲ©Ė*¦„Bˆ+`qŘ:uŖ‡Édj`2™J©ŚZėšA+BmeYÅ-Č-žØ”ʵZ­9J©ÜĀļ|„T–Öŗ@)• X”RéÅņ ÕZ»j- ŅZ‡(„ ĖVØT³X,žZė §”’(!®a€E…ųī»ļ|CBB:Ż€v@s ąSxŽ»ąUFaēŠZS÷Š8|_Ö{K Bœ/ Ąā²śż÷ß{o(lÆERāŚ&X\n­0j½BqM“ݐ„Bˆ X!„Ø€…Ø V«Uś€…ø†IB!*€`!*ˆŒ‚āŚ&X!„Ø€…Ø8Rā&X!„Ø€…Ø Ņ,ĵM°BQ$ !„@°¤„-…× ĄB!D,Dő°×0 ĄB!D,D‘iHB\Ū$ !„@°BQ$ QAd?`!®m€…Bˆ Xˆ "ƒ°„ø¶IB!*€gE $'Oź€3­+ŗāāŚ³żÆzYYÉ]Œ+B`p•†źČŠ.‡øtĢp“q-u“¢Ė!®LWlĪ. „6_ŃåWhåZH6„UŖ5ÖŖ[Ńå—އāmąÕŠ.‡ø2I“Dk]ŃEBT O -ŠõŽc°éę/„Büćx}ń—šÆ"X!„p MŠBT™„$Ä5Ķ˜ ø„÷Ųv óB!ž‘<]¶/!„B\&Ņ-„BT ĄBT™†$ĵķR.Ä Ō4°õŽG!„ųĒ)Kn<D5˘o0ąaūžU$ !„J Ą‘Ą" š2”E!„øf”€æ¦(ų®öU€1jø›mĒ ójŽQcŲL\Äņ !„Wwø#ŠŹö} 0±XZ 0°ƒĻ¹īF`:Ę—Uƒ„¤B!ÄUÄŻ(čĀõ”ó€ĻĪIūŪöŲž¢¾ŽBK€‘¶ļ_ź]@ł„Bˆ«’»ÜŲö˜䜓–Uģz?×NŅ1‚sß ) W-™†$Ä5Ķ]¶=¦øHĖ.ö½Æ‹ōŠś†[¹HB!®iīpa`Ķr‘Vü˜«0ĄiŪcXy %„B\ķÜąTŪ£«nYp†ķ1¤¼…B!®vīp’ķ±š‹“āMŠ%\d{Ģ/o”„Bˆ«»œh{¬4<'-c @ķ®Æg{L;ƒ !„W1wx `µ}’P«XZ°ßöż¹ó€š`,ŹpųB (ÄÕ*7'sA^ECQAÜ-Äqų ō¤;)Õ<xø£FüF³ucąŻbł,¾øEāźpöō!Īž>„·oĮU ©JpH5L—r!ĕ¢“’ō'€«b™€ÅŅ>ĘŲõč Ū×¹V«/¼˜B\½ņs³HĪĶ"łō!P ?’‚BŖ\…ĄąŹ(%»† q5*-'ŃĄ0ąv ¼XŚ ?0häāŚ•Ą=ŪŠ«˜¹ Üœō2ķo›—›yJō¦59Y©äd„rśų<=½ ®LPpU‚B«āķSҘG!Ä?MYŚŗņom_ēŠZ=0Ö~NalܰęāQ\é<½|š%˜Œ“Ód¤&3ż łē.ž&Ī‡ŁœOZņq2ŅN˜Z™JUėV£ō …W¼‹ŃŁT€±eᢋ—ų‡ņōņ!¬rmĀ*ƒāós³ČL?cŹKA—šŸE)…Æ4E qU“Ńā’šö Ü7€šŖõŠZ“›fÆg¦'”µµōL®1Åc…TÅĆĆ«¢‹$„ø„$‹KN)…_@(~”Th‚Õj!+㬽†œ“•Zz&W!Oo‚l70¤*Ž>ž]$!ÄeT–ģ‰1×÷Œł½a€*Ē=>Äy;Cq 3™<ģµ¼µ[b.Č#3#Éh®N=uÕö›LU²×r}żCPŖ<’JBˆ«Iiø 0čr÷Ķ„[ž^>„†×$4¼&ąŲœžv «Å\Į%<޾‡V'8“:A•0™ĪŻ>[q­*-‡cšĶĘå\ž©E®¶3¢DÅūŃšœP’±——/A•Œ~Xu¼¼\ķe"„īpkŒfg€t`0‹¢5 …øōĪķ?¶˜ÉŹL¾bśMž†Ū›•żB+“=HśqÅ?Ś{ןaō–įØģż ‡2jŁó|ŌÓy°Ä³q51™Ŗ£­V‰Lw{Ļ§ēłąZLxšrĮt”÷;•¼Ēüøõždš”ńĀKŸe|Ō!·łW0wøpßp7ēńįįéķ0Ż)/7sAžaŅ+®.Ūf7Ōcxūu¦ųRĮ£ćEń2PטТ@kˆ‰Oż>±ŃŽė6ÄÄßś]“nః|–o.1 ’‡ö{ž‰m³Č\[åy•3xĄ~. ¾D“7˜ĄW›’“ÓŹ/®©DõƒŠ`µ 1ń+Šj#’¶Ÿ?n½?Ł“U0 … cøpLü¬ÖŹµrÅeä.n#± į‰K_!.ß@||+ŗB\*F€²Z[R€cā¾}Ō»h”Š(ź”źSbā󈍶€1 =Ńś'PiĄ”:ŒÖŁ(U ­~²}1fÉø³¶:Śņ'ąƒRae XM cŅ£UeĒ “¢ aŠh`6Ø8ĒŠ„ƒn Cé%¼ø¢ļ]€Ģü/Qj8°­ÄdJCėĄķØ+w!(wx1°h < ¼zYJ$„āĀiu˜T±>õ ØTĢŗ3“¢gZ’^{g#kėæA™PŖ?"Ī4õ#ź×^ÜĒØe£\6shĖĆ(BŠ&fmu° 8”Ų›iƒ‹F^ŽÓŸ‘•°čYāėTÜµ»Y'€ą` «Ć !Ä?ƒ±¦«¶ ص¾PųŻåČč:½hĮøķŽĘA v ¾Ó[°2ČÄǧv‰„Pt4&Ė/Ni¢vėĻ·Få¶|ć2?Ļ™¶|mĶŁęv±lŖC𧬠,±lĢ] øŠXō&/a¼XIžrK7˜weBQ^ cw­Œµžy•ĄŚźÅčų’ęčšņ2ƒ·,,ŖĪĮ·ŠÄØ7€7ܖCSČ"¶»ė½ZÅaMt]ŁŲnĄ£.£ćœĪ7›żl}ŗ!(S“ōI—ł+S"e˜żPÜą(ąåsŽUś•ó‰HBˆĖKėP”eĶ@y†[_ép·×ę),^…#™“.ØJ‡Ź,1ݤR76…„v›ÆVĘ «Cŗ¤{ؔņ­ž|łČŠBq5RŖŠńh2V—2i±Œśxx~īöŚ4uŸt¾aĄ….`”20ó–äœE;l‹½[­]šņ>[āU¹Źh…U:(ķŗœV‚’‰£ ę_„{\¾UX„Bź€Å6ČÉlM¤@«|Ęw>ąņŠŃń]QŗŽ'×?›˜ųtÜME‰xŌb#’tyŽŅgŃ*ˆĒÖ{ńU§§tm›[\Äŗ&’]–sÜ2O²|īÄĖć$p„’ŒŁT&×;ļ)Kµņķ {łø Ąé¶/!„’$1q77‡ł ėF2¼÷RśŗÆSśSPmĄĻؕ*µ­#½ŗ*»vqE „K^ĆY³ø…Šüė%iĻʅsīv·ZmFiĄtʒ›Žrü[‚u*XæV¢ÕNŠ u/ą+ēū«›ÆŠųė6?tʘĪüäå)ŽBˆR)Ւ˜øAēõĀĮŌō@”ƒĶą«NÄÄMA©§ˆ‰’Vėd<õ!“§­«ƀN ¦1®„­’W \Rs÷.č½xzgS` ĆÄķ¶ūümĶģš‰)Xy­žĖčøg1Y×`ööĄÓÜĶė€ć@«@ėn(]” ĶY“遁«Šj˾§!k0JvøļÄčɼ”0ƒ|ė˜Ø‰6å£Õ>²—ķUmšMĻūłļGĒ1nYC²|ŗ”Ts +9ĄI,z5“¢9ä?¾ó[߆ą‚€ĘĪGś$ĻedšN’æ«.¹–^AܵŒbmß7ö]śā9Ø»hk.ē=…ābRŠ·D\™µ/QńÜ­„µ¢¶‰sū„BqÜą­Ą,Ū÷cÖ—¾8B!ĵĮ]°š&Š؋±;ҧ@čtaŪ–łž«š¢=>E©Ÿ˜łŻe¹giĘÄæ¦+¹ż×Ó\ŃÅq+&a4č›ń4 į½®»;]Č»k0Ś~ö²}‰‹ģõ—žāž!}ČŹ.yKĶBÜ{Ļ’ūž ŗßų·Ēp’>X,WĪßõ«cŸąé'Ü,tŽÜÜ ==õ– Ž{+†‡–w‹ģKg׎æ¹HfĶų©¢‹RŖćĒŽp’>üoŹ]”M  7Ö|ŸĖvO‹ zƒnxŁīY*ŻčĶń +t›…b“6~g–§ßYYpš_Œ¹Į¹ t¤al5x‹ķœ.ėFobøą=$…8Ö­¦GtC~üŽż¶§BQQJk‚ö&O—#æv¶Æū^Ą·W!„× ŅšHƒo ĘžŒ§€q¬å&ė€V€ŸķńæĄķ«°¢üNŸ>ĮŅ?gÓ©ėuT®\•E grüŲ ņ©^£=zõ§VķzeŹ+''›øUKŲ½s+™™ĘVŃ5"jÓ%ņzš6s^(Mk͚ųålŪŗ‘Ō”³X­VĀĀ+Ó¦m':w½Že’ņ¦ ¬’‹““|||iŁŖ==o¼Å鼒,Z0ƒ³I§Ł·ĻXwżļ-ėųåGc‹Šf-ŪŅ®}Wū¹ĒŽfõŹÅ?v„üü<¼¼¼iа)=nģOHˆė½½ŻIˆ[ʆõqdefH›v]čv]o—Ļ󥞯¬^¹˜³I§ÉĻĻĆĻϟĘMZr}›ńt:’Ō©ć¬X¶€Ć‡öaµZ1™LŌŖ]Ÿž½o”Zµˆ2•oޜi¤§¦Š±s77mi?ž’œÄŠå 9|h¹¹9RÆAŗ_ßĒįuHKKažģi“nŪ‰&ĶZ±hįLvm߂2™ˆØY‡ČčŌ­×Čé¾¹¹9,[2—=»¶‘——KXX%ŗßp^^Že*·pĮSÕ#&žŒ÷įŹ›ēl5‰ŲČ߈YŻŌohµ’‰Q#œņˆ‰æō»(¾dBt¬Sś¹¬ŹÄ˜ø“éaŠ 0öHDńŹėMŽļ”ępž˜„»±ź£hTĀŲŠēŠ8¬Öw˜Ųm›Ćł£ć{`ңѪ PÅv4؈IĒņ~ōĀRĖ8:nЧŃj%¹Ųū‡Ÿ_Ż“G ŹŚ­ŖV”>‹•Õ &21ŖhßŃ Pց(ėuX=^ʤļ“mZqŲćšµ¾^łć@õ"€ć\>vÜlŹQi+a³}Ÿ<üŒ±/ĄIšnŒfčP`Šø hģrsq Üæ‡—Ē>Ī­w aŲN}¢žž^Œ{ūīžøŪ|6mLąÉ‡ļāōi׋š ņļMü„Œ.™œœlޟ5ń¹<æ]ū®LłeĘ¾ßfsĻĘÜŁSĪmß1Šģģ,§ć®Lžģ}6mL°’¼hĮ -˜ĄcOޱąO&½É'½…ÅģÜĻķȤO’Gļ›ŹöŁQ£ł÷“÷2gę/.Ėžķóµ›ūŸüV«ócᕪšß)siÓ®³żŲĻ?LfÜ+Oc68ļććĖ[ćæ`ąąnĖųŸĘńń‡oŠ«÷­ ¼§čÜ?¦’Ąk/=Iv–óų‚ąąP&LśŽ>}pęŌ ^ū8ƒ†<ÄĘõqģßēųoķįéÉoźš·t`’nFÜw3ĒŽ:nŽ£ŽĖw¹ßÅNø5Č5­O T ąvŠÓ‰‰ŲØļ‰ŽBLBŠūxqE ļ]nkäPP ŠÖEeŗ£Ņ¢Uč?Qj>ŚŖĄtZ?‡6G1hźuLlć1 ĆŃz ŠćʇŠIł`Õu€;P}‰YۜŲ.'ˆ‰ė ĢA+3Š„hu¬fP@o¬Ŗ£ć21śĖ7:žQ¢YM`īH{š½¦Ź:4hVš€¦.Š;€ŒIø‰ ‘ĖlϳŠńŗx,FˆV Ag”؇V7žĘ˜ųLˆ2–j½%²W€j„&SŃŚmj†Ņ_¢H)©Čīś€£0‚)ĄKĄ_wR1jĪ…ś–įq‰Ķ™ł =nģĻā•»ŁsÄLÜĘc|łß? ēõWF’xä`‰×ZĢfž}ź>’““xeÜ$V¬9Ė]iÄm<ĘOÓ—Ó”S4Ó~ł–Y üłž›’°&ž/īö8k6Ÿd’1;£Vā6åń§Ę²yÓ~łékūł?Mł’¹³§r}Ͼ,\¶żĒ4ļNgźŒUädgq蹎2=Ļ÷'}ĒĢłėyó=£ļwųˆ§˜9=3ēÆgÄĆĘ6§kā’⣉ÆSæ~c¾żaėž>Ķ–]i,Yµ‡Ų¾Ēd21ś™ūÉĢH/Ó=-f3 qĖųļsٰż,ūiV­;”²iC<¾’ŠżÜŪ7óŁަyĖvĢ_²•żĒ4ūi6ļJåÓÆ¦‘•Iģ{E ĪŲæ›×_Ixxe&7“ø Gٲ+õ[ĻšéWÓ 愘Ē8q<±Äņ}3ł>žš zŽx Ÿ}=Ż^ó<°7cŸˆJ•Ŗ0ł»™¬Xsˆmū²ų+į ~ņ#J)ž9”ŌŌd‡ü¦żņ-͚·aį²ķģ<˜Ėś­gųąćšóóē­×G9œ?ö¹‡8~ģc_~Ÿ Ū’ŲL“°éļMü†łs¦—éõ.ķ#7„9±‘01źb#b±źIDATĄbjƒ1.ēĘi“m[ĮÆ/Ģ^C®~:!čl%¶Ūę2Ž3ø‘ŲØŪ™ł,±Ń£ˆķŚųtõkŻf?Sė‘@>^ˆ|‚‰Q/0!ņY&F żčP”å梬ÕŸeo`BTb#&6śqb£nĆŖ:y(Ók%–ltÜ}(¾ā0YśŪ¶]4˜¬Œ2Y;}£‘wäĆÄFõF©ė…Ö®ņ>F@nb£$6z$¢oE›śēóhQѳBŃx—‰Qݘõ<±Ń£˜Ł­a“Pøä.G¾”Ą’¹9Ļ•Ż5d€ęå¼V\ÕŖE0ń?SØß  T«AŸ¾xį•X,f3 ē’^āµ’½žÄ#¹wŲc<ųč(jÖŖK`P0ÕŖEŠ5źžółĻ(„˜W¬öŗaŻj”RŒ~ń]*W©€RŠjÕkņܘ·ššōä@±Ō¬?~Ā×׏’|ž3š“ 0ˆŽ»1aRŁg>4lԌVm:RÆ~cŖV‹ U›Ž“jӑjÕk0Ī4Ęų-7ōźGx„*SÆ~cīō’ł"i¬ų«ōÆBc_~Ÿ½śMóo’’ś š0{ĘĻöŚī†u«ŃZóČćĻÓ¤Y+ūõAA!ō»ånŗF÷pØYĪ›=‹ŁĢKÆ@ļ›n§Zõš^™~·ÜĶscßĘl.`ł’y.Ėõó“’V 7ōźĒēßü†·wŃ@ĢæżˆÅlfÜ;ŸŅū¦Ū©Y«.~~žŌŖ];īŹČg_%''›æ–ĪwȳFDm&}öš“ĄŪŪ‡°šŹ 8Œį#ž"//—Ż;·xä ×ĒqSæ;yģÉ1„†U JÕź ņ÷?8qŽ>ā“žyG>ģ’ˆę ‚ģÕĘ?€§i ĘĄŁaēśZo|Qś‡2ßQ©UÄF­>ē F[?0¾7Ż`?¬™…R/ńQ'ē&3„¶ŁĪ1ž!Ē- :«š‚ }¹Xŗ5ƒ¦z8„‰€R’j ŹŅ Ż3ģi/®©„¦ŠNMŽ"€õ@¤sŽ*–q=sMģŗ8„¢hޜ¦ ń4}č”’Äč?Pģq:nć® ŗ° ž(”\…vć PØz׊‹ģ†^żššpžŪķeüϼŸ&ĶZ94ÕjŁŗƒĖćē+ńČAL&mŚvv™Ž¾c$ū÷–}’īČčžNĒL&ŗtgŚ/ߒ–šLXxe†xŠį#žr™‡Öš³I§IO+z]vķųŪV¦(×÷źĮaQ­FM§“æżČk/=Éu=nę‹o~w¾ū÷ķÄd2ŃķŗŽ.ónѲ‡9nŽķŗŽ.’–6jĄÉG8rx?»\ē2’Øn½ųśĖ‰.ÓD)”iæėćź h°ØjĄnŽėz–˜ųéĄ0ʬjŹ„ī»m',`ż_™ļiÕ®ļčs€¬@W·›õ/®Ø‚Õ'³Łe üжqA £)&ǧ>Fņ”ļķįł8ēĮ–›Šź`=¹ōå“bĮ _WƄBsˆVŗŲaį4ąKƒ³{lĻײ»„Ҥƒ®RģēŖ@ƹs|‹č½ \Ntw€ ßńĪw"eį»Č囯&JTµ„:…5¶Œ“’ĶY™Ęßt€‹ĮAö|Ā*qęĢI‡c-ĻŸ gpüčaņóóÉĢL'7'›“'”uŃČ‹ÅBjŹYZ¶j_bžį•ŖŲ~]ج¬ |}ż\€Ūk’īę59WXøėV¦ĀZߣ¤ÓösöķŻÉļÓž½»·“——KFFłyyœ={š3§Oāēēoæ¾°9·Reןck×mĄ;ļOv:¾rłB6nˆ'ŗū|łß?šńqž˜–šbŒxÅõ$‡Ōćż$''ŪįxPpˆĖó•2Ō kūÉg.Ēą×žĀ+Uqy\”É”ģ:A“&b/®é+°C{ ^µõYö–2”{Łw¶SŚu€×)›˜ų|4E÷ßÅW˜iVpˆčX”Ó¦£V•hēܚPq9ŁYyęęšÅ'ļŃØI ¦ĻŠ#(Čło³xöóóĒĒĒ—,#q‹ŹńVŻóöņvū\ _“Ą ą2å§µ¶71Ÿ++Ėųó/¬ žń»˜Ķü1w--[wp:’‰‡ļtųŁĻĻ‹ÅBvvžžNēēåå²~ķ*ŖU‹°÷4mޚūÉ÷ŽÄ÷ŽÄÓ–Ś[; łųųāļĄĢłėĖō<Ė«š~%ż^/ęļōšcŌp]Ķ.1žŁ”ÉńÅÕś+”šÄŲ5ŻŠz šL“_É?\Qøn²³:ķįŹø§ŹéTA©‰ļtžŲøÖµ&TŠ TÉoncāŸ@«^hĖH&v;m?žā½ŽPó]h=‚Œ]£Ćt(«NĆCb¢§¹Ģ{ō–<Ó½”ćłU•>‹V"Ź9Ōj]µ¤z¬»AX…M”æ7(œčŗé@”Yį:¹Ū·mr{ŽÖ-Ęiƒ†MŅŽ&ryMį€ẃU«ÖŠšĻ„µ&éĢ){?šxˆÜÜzōģē2ųžM:MAcėNx„*$qż§’››Ć٤Ó.ÓĪGåŖÕ)(Č'##ĶezaSzyśK…|āx"J)ūė»ßNź7lź2ųŗŹ'¢fNŸrŻRø{ēVī҇©?’×)­S—ī|üåÆģٳ‡†ösÕ]½F-²³3ÉĖsż¾s`’nž~|03~ūŃezi ?öŸėÜ©I¢<¬\Öt4ŚtČįøc0–•GŃÜś&¶-Ūܾ"Œ s.S”6‹(lŸ\µėOXZµqų9 ē ĘTW×’šĮ ļ‚@ē2Oˆ\܏¦=–‚y¶A]¶¢ģĢhZ9]WHeĻĘā™ĪsõFÓ!ĄŸēćœ'OĻóÕ®Ä+Żäŗ¢Ų÷•³Dƒ(Ŗ]»¢T·ŽaĢ ˜šĪX§¹—…`üŪFĒw:ĻÆ\i[hį\æO3ø—4Č mū.(„˜=ćg—óf—,šMzz*­Ū…}ŇKxć;ėWĄ˜sPØC§hŽ=ģrŽš“_¾u9Ö__?ĄuĶæ}cÕÓ]·Ąż1m ­Ūŗ~så—’}ķtģ䉣¬X¾fĶŪŲkÆžžœ:qĢeŠŪ·w'»wnučFčŌ„;æžōĖū®“Ōn޲­ĖōūÜĘ{±_ó÷–u<ņĄ­5’N]ŗc±X˜ž«ėQęóēNgޜiX­e™}č¬E«öųśś1oö4{st!‹ÅĀ“_œ?4ˆ2{‘±qŃöŸMõ`LĀpą Ī>æ¶Š¤čd`:čį@Ø)å¾£¦ £×¼ĆøeEź…øFhÓD@cUFŚl-üĒŹŲõŽŸĄcā»”yƖŸŃ×3®§Ō 4ķ?Īįšgćüˆ‰{øXQ⇆ب_A?ƒ"š,ßY<g¼ēĻ0&n$ćÖ5šźĮč„!Ąu(µŠqJnsūŗŲž·IgŌśöćO'ćöē¶"æø¦1 S‰I˜ź® zp؏± ĒŒ…8ÜwD‹q®Ŗ’üYÖē!\‹ī~#÷?8’)ß}Jæ^­čÜõzš6oÆÆ©)gI Ŗ ZgŃźIףcĮ1'.;».FéŃdłŽ!&ŽšjĶǼCl¤1d’ĆčMÄÄĻnĒZpš˜ųĆ óAUĒXkF\) Lfk žŖš×ŃÆ“j\CĘ@Žd“å¶t±ŃŸ1&¾ š×ńRæ1nūʵĢǃg0ÓŌ'dL"&ž4F ķ$£Ō3ēńz&v™G̚)Ążx%&žJ{¢u ¬d¢ų (š¢eŃ~ ū>`30cU+ąĄ»5ŚĆĶĢ`ŌvŪc¼˜-0ę6S¼ Āŗ(^ūŗFõ`ŹwŸ²yc qE’?ĘöƒŃ }ąIn¹ĶõŽAOŒ|#‡’æ½;²ŗ÷8ž9ĻL"!a  ˆ,÷rÕāB%„^‹—ŠÕZ«ŲŗŻz[°½ī— ą-jTB(`qßEÅkÅ""–—²_L¢b„.mE-Øģ ĢsśĒ™ģÉ,Y„ļūõŹk&Ļ<ē™3¾$æ9ēłßŁČsĻen̲€¹³§G^üqĮ<ę=>·ņx0˜ÄSG=iju­÷=²€œÉ׳tɋ,~é¹ŹćG÷éGޜ'™÷Ľ5¦ O-‡“Xµ ‰<·æa"&]€÷€ŗū“‰ˆˆĮ¢eYŒĮķ±ŽĘmØšK\®?-WDDäÖ|iŽuULo7²ŗˆˆˆHŪՒø"å1Ńrg"""m^ó,"¬kU…:¶D;QDDŚ€œ•Aö5 k†cmOŒéŒµ{€]XŽ"­ÓrÅ·Å@(’G3€ y’»3·V¾–żf< aæ…žCLõüCŖ’®Ŗ×Ờų÷Ī®®ö{Ėlµ"""‡†Io Ø|Tlz`"%˜LåÆ}³‘‰ł’›õAĢė/8XˆÄØ’5 *›š±X3捦D¾ųQēå6ņś;€…l+""‡ ÉYy\ŌõČß<ß7{św`äĮł_KMAl®Ąé‘CUĪŹ EÉ}IĶśŒćĒnPĶ„·†`9($-ó’Zķ÷ćéŪLČļ…5ēQœršz½×ŗ9æ7¾æÄżāŸ^ØŸę°Q=ēÕ·Ø:·”ą×Ą®8ÆY„Ū9é_;,""ь[—Dē²Ė°ę ½Ż¶~v7†w)÷ę1kŲ_ė“É~ćŒw%ĘĀz鱗ƒŁ¬S@±’(˜žģ{?DgżšÉøśé+¢oė­{0śš„µ°Ž+`æęņF¼GØ öū‡ N~fXĢ?°ęYf[’ŠēhÕšŚZÆU_ūū šeĖwGDD”½>S¼ K&ŲR,’ĄRŒa–ŃüŁ…c˜™¹Ø²Ķ„ü ±fĄšĮnĮš p<†óĮ‚5Jڮ҄ūš>!ls ŲčĻųalÅsV)<v0ŲėČžjż'Ö¾¦=Ģt` Ęn:`ķŒż9”‚ß’7üīÄ>ĢĮՒSŠ""ҬŠo2ĮŽCjé$rĪØŚī5”’0K0ö^.łĆ+•[Z“ ųXF0sxĶņ¾Ł#1¬ĄĻŒ¬ūÕ„Ü̵ŌĄÕå{£0¬æ±ĪkEķęē³ÉK¤ęLŒ¹”™ *ćT<ļu`2Łėļ‰Ō^>$µä:`iN†‹€”sKą —µĆ|ąhō;®Ś+½Oė_€™ĆW[±ößZ¦Ć֐]xŁ»ŃŖŻHɞ•5N™~ v©™Ł ¾Į+5‚/Y–ō‚Ł7°)½oiŃFĄ‹p÷qĮe3‹ˆHėź l`vÖž^’ßļ üĖWN&ūī̱­ĘŁ“ ś&Ē6&kŸ?”€†õN{žø½EYƒ¼š¹£«¦¹'^ŒµÓĮ®Ć¦^žp˜åĻ ßģV@™ęŪדD Ą›#?MՃźė·DD¤¬ĀĪĄPBłŸÖ 0~ūŖƒf)Ų,<ó”‚åøæĒЃ0熧šŌµń…Cš Ÿļx·ž×lūš†…ĢČ|Œ­l“żĘp¬l¦,łę4jŖxo½G ¶Žć‡˜hųl܇‹# ­^ū€5Ą”F^CDD®’S2t ہeõŸ‰;aė’fCł—€½kņĄ ? L—ČÉ{°fŲū˜™õJ£ū5am¬]d`x k`ķŸėŒ¶ėÜ6XCrŁULØ'ŌXó]°4æ`BĮŁX»¼¬ĒŻ×CL“<˜ <Ü ģŒóšÉ‘ósp1¬iB’DD`īčRBåĄĒäe]_#3ö§3;+Ž„¤‰±Ÿāf:ē2cų q·3¶"éŠ†Ē«¶ā!r]ópD`pĮč†'OCŌ”żĄżĄqQĪ‘F1Ÿ‚=¦Į—C׃½ ų/ņ²VcķzŒłAó%”‚æƒŻ ģ³Ų±ŪńĶĀvY”ūŹ1ŗÄ‰XĄ44*o°įµų‘)ó†xv šC¬½ė}‚+ģŃfD ĄąF½]qßnžĀU¶śo\y°źz³€K«+Ądi2)˜ÉĪ’%3³«ńRĪŹ4Š ę‚e ?E8x#`0¼‰õŚcIĒŲļ]±¦†‚ldüŗaünčr¬Gq”«@å·æ7ę2Ÿ® ÜnJč£äež-ę9”‚]‘÷ųˆY™ļ&tżĆ@“¼7 =7„œ œ… ̹Ą4\ż5¾É,‹“ŁŠü]9BY{7Ę\ˆ1*øųL ŲtŠ8čv:ÓN߀ŸtŲt‚ަ «{qÜŗ$:•Ż &Sv0‹ÆŽ Љé$ļ’X•± īžrĄ¬"TŽłŒ™ÄŒĢ‡ųŌmV¬uĄ»IĄ``iäX;ąvą]ÜNGQ|7ąJXž…‚ƈHóš9bAo–`3ŲA’ūøYŹ5X{9yĆ’·ņ|kOöŌ|Z†p¬ŒĶ ×^ ,ą@8žlā øA×[Ą;±üÉYÕė®\+ŪŁ·;eóEż ķgĄ2¬·;ī÷j ŌkŠ™ĄÜ~æÕķīÄe=7¼ĖE6n²§Yŗ ĒEDĘ0e@/sk«u ”/˜k±öiŒ·ćoĀJ —‡ńiĄ@¬½8 c.aFęr¬GQįĄ8¾I:š‡‡Ŗ¦ I“å2ą{Ą‹Ął‘c§–“ˆˆ š­”{b̰WbMdælåą¶K.yĆ^ą//śĄś?PšmY‰Ž€Å%[®uüc`<_ķ8h,"‡»VWČYŁŽā”ĮXæ3ŠkvcŲE¹żØŃŠŅ$ńŽ€»w×Tk³—„Õ·ģh ®|eˆŻ&""‡«]ŲŚŻšb%aqĄGĄµT߀ćq#āß™o?ĘÕ½čÜܝi+¢ąĮĄūø,ēŒČ±æā±Ęąź‰īn² ²(vpCäÜk€@³÷ZDDä0-ĄrJqSŠ'S‘ž^Ó[ĄiøĄūMäXš īŽ°ˆˆˆTĻ~Ą«q™Ļ9@I”óĀøŚŃĒQ³derś'""Ņ&E ĄŪp„'GāīĒk pnŖś“犈ˆ‘¢eAæŠÄkÆN4ń:"""mNŠˆˆ“9±¦ ūoćÖżÖ|ŅXˆ Ś"""RK¬<čyžnĒ£+q[īŖuīĄåøµæå‘kĻÅm_("""ÕD›‚ī\yž&0Šš3׎%ć[ÜżąłøeK÷যGįźD‹ˆˆHD“š™ÕžgS3ųĘņ(®zø2•"""RM“|lä±(HšŗÅĄęČó~ ¶ió¢ąōČćf·¤hwä±C#ڊˆˆ“iŃpEą,näµ+¦¬µ’ˆˆH-Ńš¾ČcūF^;-ņø·‘ķEDDڬhøb ¹ÅöŽ<Ö^®$""rċ€?Œ<¦§&x݁Ąw"Ļ7$Ś)‘¶.Z^N՞¾SH¬nōäjĻ’?ŃN‰ˆˆ“uŃšWĄó‘磀ոĶśR0> 7R~·0øM>h–žŠˆˆ“!±Fµ! ·–7‹Ŗ¢„&ž„ī}ā½ĄŲf鄈ˆH«ōfąß©šŽø+ڦR7ųęć·ö©G<÷u7ćvF:„›†nł)ö[p‰[ĖPā•ˆˆHT‰$V}<ŌR9’Äš‚‘ ,""Ņ €EDDZ°ˆˆH+Pi Ą"""­@XDD¤(‹ˆˆ“`‘V ,""Ņ €EDDZ°ˆˆH+Pi Ą"""­@XDD¤ü‹ēņępÉIEND®B`‚libwebsockets-4.3.5/doc-assets/lws_metrics-policy.png000066400000000000000000003530671476025525100230130ustar00rootroot00000000000000‰PNG  IHDR–b¼]Å pHYsÓÓÆ"ŃGtEXtSoftwarewww.inkscape.org›ī< IDATxœģwœUÅõĄæsß6véŅD¬ˆ`GŲ„Ų°—h¬Ø‰ę—Ųb,QwMŒn£ĀbIlŃä5‰å‡±·$šv»b#€AzYŲņŽßē^Ž}oļ+Ū\óż|޾»3sēž;·¼9sΜa `ēPx¹,plĖņmfŅĘ’ É{Œų5ųé7)TSAü¼»µ°Ž~:¢m#–¢ddgā÷]¬ƒeQEQ”oœœŽ@i5§¹Ąb ¦ƒeQEł¶q°··ż Ŗ4*Š¢(J(ŖXn’< tžDKEQ”¶ęąZo»Ų܁²(Š¢(Ź6‹*–Jw“ ē{„ł|˜ŽBŁįXŽwŠ¢(ŹŒÓŃ(Š¢(Šņ’×Ń(Š¢(ß>ŅY,w†xŪsµ!e pńQŚÆ÷SŌ·°«·=ŲRׁĄ~ĄNȼĮz`=0 (ӐFŽ–R‚ø7->ōŅöz€€€›“ļą$hĆF`š )† ÖĮ^ž ›¼}?ō>6dŸż>’żkŲ8:©ģ[žüÅ@gĚóŅŽ£€įŽń—äŚÅŪžFź9E9Čü£aÄÆ™Ö €Yćgā@ļÜ’Æż'ȵÆĻ²žTģ‡\§ H» ś#m³Ś“{F–Ē3ĄPƎī^QäYł xØm”¼}¼ķąu “a_āēWą„ÆCīĒYČs™ĢpäžißL÷ģ0$(¤~dĆnĄhä:xr~T‘¾ĶóqŽö‡ČżZč„ :yuL÷ʌńŅÖs¼“¾Čyü×ū¤£ėmÆŽ )ć ×_ gąœV#ķ“ Mżž5؈\'k8y_ä0ئé;³9D€#½ķO‘9Ł~›AīŻ·‘÷W2Ż<™ ē؈\’„H›§ŗĒĆ®Y¹6»"ļWiŪYĄēYžKgäŻ5Ų“-דįką=ļüR1Ī“ėKä¾sŹü"EżAüū„čšEłdF”Rɹqż­¤£Ā¤_„Ģy[•TĒÆåżēė@ŚnÄÆłĖYČ|f īŸ%åå=¹Óµ’§ĄŁ)ź÷#’~čėCˆŅVĻjä}ŠRWĖĀ@]åˆb±<é÷&ķ3łMˆ¦9æzą)ä™J&÷Bäŗ}•¦®9¤¾×ńŽń8rO§kó€SRŌį?³ze¾HŚ÷U/=ŪwģIõūļ²7CŽż—÷øw.Ļ‘ś“y7¦ć@ļ8™d\éÉL» C݊¢(ŠŅbĀĖN@—ž—ū}ĻĖ÷;1Ā;†x'šļIy“ųƒ·ž‡t’;§mē±ųŠå§Č(ošĒx…wN~ŚÄ*ųßy·$ÉyWŠćMN*E,Kó½z’Ļ÷IĻ·µŠåBOęä²ĶQ,²’OžÆ‰ß7ž§éˆ'ó?$v¬2]ūŃr÷m_±\‚X+ü:W!÷Ą|š^ƇRŌõū¤r.ņ -@ī›d¹gīzÖÅņĒ4½õHĒż+DLīØ-Ż‹°ļ§ch žĒ3” c¢¬ūuжšƒ“½ßī.bōĖ„R,ēŃōÜ-™Kˆ+·õd^Ī䉀\»ŅsiŚö‹½ć~ES…įʐś}År xĖ/»Ī«gyH=?Ļ s*‚ŠeŖö *–“ų>“Čż2ßū$ß_«€=’ŽT,ƒv Č3ų±wīĮzj‘ū%™Ż‘÷dņ;grooHŹse6_±üœpõ›P,k’Īūk¤MW‡œĆ©!õ€X7&•_äcŽW_r›XÄJy6bWEQ”v!Õ:–oWFĀøĻˉxē0ŁÄĪ’a›Hļ8öūĄń4µō¤cżV Žń™O)k|ÅŅ’?鄳ō!QŃr½ĻÆI“å!æ3Vøz9Ļņ§"Šo$äxåĶÖÓō^Kö2ų?ä½”©Ä÷č’ŹKŹK~ī²Q,żöŸLÜÖg7Ūā ĀRƒ2݊“a2ā~;ų=VNQEQŚ”TŠeńÆä@¹ł1÷•ˆ0·ŗĖõ­hĒ҇‡ģdļ@Łd·“ÖT,G§)Tn’]ʂÜ(wRRžļ¼™C—ŽĮĕ‡WŅ”[ė•y"C}AÅņ>Ņ[}Ó)–ņJ2³+q%ķƤ¼ «u¦(“ƒe+2”MEP±¬!µ«2ˆÅÄWžMŹó•(™ļŁ®Ä]’’ĻZ®XN äż0ƒ qkŲF݉ ŌsOš:|+āršIzdą÷g({n l:ÅŅ%µ«£O*ŲqKÕ³iöZ­®JŹ[ą„Ļ#³{ö1z&%å˧I’L–ŹNČpĢ0’Ėt®'Ź… ˆ$ć+}.0(ž¬X¦Sä!QI ¾v&ž<¾Jf•Kõ\””T,™”Ÿ;ū„ bÉV±¬ČPĻ_e“ ž»5=$/™½uez_(Š¢(J‹ÉäV8-°=.)Æ ¶Ņq­ö¶‹Cźń÷Ż€ˆšń;! „w¼ƒ|ŒT?…(+m@$Įj:wĄ’¶ƒ£ŁÄŚrK2ȳ™éē5—zāŹoK8ĀūžKüš§bńĮŠ!$Züko Šd!¢>EęvĖ†Éˆr‘Š9Äļ…Ć’ņüĮ‡7É|Ļn ~Æ £©e³„į}Æžš”¬‹(0 Öń]yļ·Cø²½'  ä\¢Ķ”5čĮp_†²O"Šx&ž…Xč[Ā×ğ«ćhź1ąs†÷C¬Z>{·Ž=@ę€:Æ!8Ø–Ģ­¤&ŸJ’”5¼MśĄ-ž5«£©«g¾%Ü÷. c!™ŻØƒƒĮߛāŹ¤ļ†žŽG‰Æ59&E™ÕĄo2ŌÓ^Ō#sĘÓ15°v½ż)'™ÜŲA~;ż÷]K¬ŻŠ¢(Š’™Ėā§d—Ąˆõ"ŠtÄk¼ōbšŽ(ū„é$vLż’<GŗĆp‘ĪļŁˆÕ¬­Yœ!}`;r³)°ģØ Žų K™ę{ß;‘>NsųŒģ#µ&Ӆųuš•®`€éHGž?$žƒķ ‰ó×Rq.r풘åqÓfMHʏčø+q—āqĖżGMöēćĄö^Yī“ ß‚ńŁEJž‹\ƒ×iź²éĻ#ķx$sF`;Õ\ėtģķ}בŲaXā{Ó1·rń­ūė\2¹Ąw¼ķ#óų|‚ī¬Ķ}ާČ÷ē–¦ce`;•2œ-™ŚĻ?G.e&ę¶§(U;™·eö¤ėĢ4˜rÆ-©'Čū“O”ńlųœÄ߉0V¶Ć®÷jļ;“ē ˆÅ×’-ji4gEQEÉH&·¶zÄr3ž¦Kß ņ}DIšĖžˆuŹĮ>˜Ä„+‚LG:¢xüÉ«o!ⲓšoŽL”݃¢tV›T£éĮ@#Ł)SĮć"®Œ­eUę")éM|Š`a–ūšļŪlŪż›čšoD賋e']Z}eŗŽ¦ó0ƒĻqŲÜŲt¤z†;Źr– ’Ē‘hlξÉ4g ¦GR=Į dĶ}īŚā™kkŚāz?†Ä.ČAęē®D,čž K'ä÷śPā֏א¹öŠ¢(ŠŅ.d³tƒÆ ś Iū$+–Įķ`P_±\Kø»×Ļ‘ 7Ļ!Ėxt ‘EāF¢9>øKõeū#]°˜lČ4ā› 8Ń” Äżņ¤¼öĖ÷x$ĶćČżÓŚØ†Ł*cĮĮ ’Śēˆf;׊¤Ųn)m} ī[€¬)ės:"spžfsńŪ,ŪĮ ¶P–³Į·DvŽ ¤Gˆ/ńš*bi ŅÜąEA¶…g8Zó®JuŽĶ}ī‚ķÜnīß¶\šj[įTāæĖ¾kpoÄŅ~–÷9™ž‹<æO#SIEQ„ŻČ¦“4q?źŒĢ³ō—µš×Į *–ÕȏZ0€ÆX¾Aź96Ə|ź Šć ÄķldnŚxd¾Ģ¾ĄŻ“,2bG“ˆœDśHÆŪ*AkA¦5³åޤč_ū]ėļ_ū!Žē2/žŽ‚ĢE€Dė’o% *GŁZB‚ķ¶°TŌw!n«kš.2·q$¹ÓŸĒź[ī¦Ńt^ń;4rÄ·Pśm—ķ¼ĄoŹ2ļ+Ż‘ó|ŽK?Œøėe˜ wŠb¾+bU’¶įæ«^ õ:ŠĶ%lŪ0üē%ų¬Õ'åg ˜ńēs[³·w! ć-Hö”ˆgĮ d»?mb-čn&ńRŠ¢(ŠŅnd£X6"óįŽ'®$śÉUHÄ9_ɆüĄłV'hź› ł1LŽüźxu†tvņŲ¾: Į¹A­ ¾ŃQŻ»g¹Ļˆ›%H$ÄĻӔµHTŠÆHœ ä n\G!Jy!Ł»Ä%Ó锄‹ ‰Š£޵)ņ³­g}ŹRŁć/ŅģÆĮĪĄÆ¼ķĒ^ō¢XŽC¦FāĻyXŠž•Rį»g{ĻS ·×#Vœ!.ĄžūÄ“؈¬Ļ›Lš9ŽŻ,Ū’Ūņü²Fź+–Įg%ųÜu&»9¶aõ|Č%ĢČo—yŽGQEQ:”l\a!¾„Ę!ˆ²č[$g‘0ąm¤ĆA:©c‰»"…)–@¢o>’… .šwo»€o®ŚVē*eŪÉ: ,2•Äa|._ˉϕŹ&!Čzt—xŸ ‹ŻżČµĻ“\ȵÕŪĪ#1°GsÉE¬Ž™ŲÓūŽ‚,QŅIõ]#³uǶS6L²ĮWγ½»æÉ ŗū<‰(Šp>š]o»QĄZŠ³ŁE6[³Æ½š-’Ż«øC\±|–pĖXKžćRäN·ÄǶ„Ž™Ž9>=ˆæ§ĪKQęĄ,źéF¼Mƒ¶ąv¶Ļ0®­ž¹m…FāŽ· Q‹Fō܈L8…xł“•gƒ¢(Š¢¤%[ÅŅW ó+ߒ‘l±Ø'9²„ø…s%įaā{#ŹjņZ©ŗ1fp[a-ń(žaĖ:„qāZ|*©# śóģ²u5k –xš‡cČέԟ—Ū@bq'䌑å±ŪņŚgr£ĪNš¶ē8xāßĒGŠtéŽ0üł{i~ ”Tųs•";å287ś‹eü > ī°¾ģs“®½}˳C¼MS1ˆ¶]³5’!īq2`Ößū’Éū¼O|ž_¶Ļńēų€L·üwų¾d^ dšČŸŪ—ŹŹ9–Ģ÷źwˆĶ¤;RE7²qÅņt³$8—ł›xĻf¢ ń؈G?®E‚߯‹<ĒÆ"æĻŸ"ƒaˁ‰ßߊ¢(ŠŅęd«XĪ%īRt,ęĀ]į‚|‚ó+ĆB”ūė©ķ\˜A†īă|Åö¹—æŠśIĄå¤·2ī‡`‰>™ŹuÓ‘/&ūłƒ­Į_š”/š;Ņ»SE”÷Ė K›ķg8fWāŹą*āĖr pxмd§oIŽ śœ÷Ż˜Lb@Ÿd.Žó¶’Ió¤Āæd™–tn¦{ 3KGŗµż >C‰+ü-Y»2ČėÄ­Ü·“Z¹(D<²}'µ1āĻä©Äß/+×ė0Ö"׹j2+—ßEˆ[Ż·u¦"ļėš(é—ÉÉ®ó¶-ńłŅÉä –µT÷źäy¹_‚wēŸĖzńHÅatüßsكė˜Łõµ–ā^ sĖåČ»ąYdĄä=$ņ¶’ĪŁńXØ&¾”Ž¢(Š¢“)ŁF8Œ!kNžLÜ„Ń%|1ójৈ•ĽN5æņQ`¢Wīd.Žˆek#ń@>ƒ5ß5ė¾,åŽÖ˜‚(Š}‘søéx/DF ó‘żįČč}>ŅĪ·„©sā>ŲéLü éÕ!JD[ zø q½± ¼ŠDōŻ€tģŗ!ÖČc‘Ī©E:?Až‚Dī‚(4— ÷ÉBäŚū|#s_Ń»ŸģÖCLE#Ņ®Æ#ĮIf ķU„(a§W–"ŹN?"÷÷@D±8éL/D,=Y n}knm…ĢÉü¹Īć‘ö_čĖēČü³"ä:ģ‹ÜGž€Ć-¤o»`ƒ ą¼ŽJY×!÷ż/‘¤eī]OÖŽ9Č CŁY‚ŪŠ'†€K½“§H?šs$Ru!rļW!'ĖƍBDå•y6¶—÷Öåģrä>^¼Œ¼Oüå`z ĻĄIČuqkOĢØi‹Okš'Č;o'¤N#>/ņNēFZdŽš‘ūe¢ųæ…ÜCõž©>!½•ع|Lś‘vŸ‰ҹ ”»($’@Ä1›s­'³5ļ¤Ó¶’rļyi’ĪPˆÅĪÆ#̵m(¢Šfs H5ŒcėP¶×žIZ¾Ā“^Ÿ T7Ʊ·Ģ's ŅŁĪF굈bĘ"ÆLŲzˆ? ŌꌱLd#ƒ‹Ü ŁĢý(°ß”,Źgƒüor¾‹XWż’ƒsĆŅ˲8ę|ÆģY”ż,IޱYģs2ń÷f¦Ļd ™Ē¼ü!yÉt Ō—n )…ż³ä(@,`Ł>›’ éŚ~ü_צū}œōJ×M^™’ńźŚł1Ču[åÕóry¦#ļ˜lī Ÿņ®¾ˆøGƒÜäA*äž «æ™ŗĶ¼ĻõÄŪā«@z0xQ6Į°|ü&ųf=EQEQ¾u-–J8ū!JN¶VEIGŠbyYĖņm”'āVl‘¶tŽ@>½‹±-®j7éEQ”šlēXn«Šņ(wKŲ¾ÖĮT”¶ęd`b1ŹG¬R¹Hēó—(—¢(į¬A܅/F¼<>F¦’|Šx»l">¼3¢Ü!ī^¼ŒxōgEQEQŒ#ū9@ɟį ÆŅqØÅ²)ēŠō¹ˆņ©(­A-–ķCˆĖŸ3™Ķ'†ø’ļRŸ¢(Š¢“ Ū»Årpv ÷]ܖ‚(Ū<’Bę-e(eGa.ā"×±r,ž†>JŪ°™ų6§+Ø4‹ąF$˜Ń”ČļȼĻBdžõ:ä}·ńĪy‹Ä¹šŠ¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(D¤£PEQ¶köv¾lĖņmå` ?°p;X–Ö² °°hōŅü{ØŲŅAr)Š¢(Š¢(ŠŅ¼ˆ(”Ż:ZmœŠ(lĮ¾H÷iS‰:†»s9$ęßCtˆDé)@®[NG ¢(в­ćt“Š¢(в0XÜւ}’bm*ѶĆräü6v“ !”#×mlG ¢(в­£#pŠ¢(вm³wG ŠĪ\ÜŃ(Š¢(­GKEQ„-9™?÷ZRśdžąŗ¼` š P넇"ī£ĖŻ›2Ķa Øöd8ģmæ,ņŹõNz#s_¾ ©Ļx² ō6K=łÖŹxĒ™_x–·½˜ķÉq(0™gx0ų'šp,Š x>I†`°ŠÕŪw9šą«ōĶJąp`.° Ģ}ĢńĪķu`mČ~9ĄH`ā6Śą•Ÿīɓ‰ż!ĄæHl;€įĄānĄ+=łŽ”9i×9Č=’ŖžTłÉä>9'€#{`&Ņ>Š¢(Š¢(Š¢“És,ßC”ĄäĖ½rh8īDõ÷‹tÜmČg5pr ä<Ūےސŗ«Łyˆ‚–dšV łź€‰²Ļ¦(gG¼2’ćżŅv~ž½ühŖpˆ(Iaõ6?˲]‚åķ’ įķæ8=iŸ€ĻRČŃܜT>lŽe„—6*ÖųGŠz-šńłŖ'yi¦8Æ7½ül-æNšćZąŌ,ėQEQEQ%K’Ė»½’GŹō@¢™Īöņäõņņ^ņžĻE,„«€ó=€}o#¢\ę5SN_±tß ŠŁĄƾÆī‰ˆ…k8p©—¶±‚X³j€(2_ņpƞż¼c|āēxÆüĄŃĄE^ś³Ž’G·†łŠ„E¬v%Ė·%+–ą dĪå͈µpDq:›øt3ŪČW,-š2bIīēĆňb¹¹ _xmń+DYÜ88'ŠĒŽ‘­bł€—ö4ŅĘūxu'®¬O “Ē"äZ%S_¤Ŗ³o ńkōˆw¬ėi½Sī©(Š¢(Š¢(J‹HV,Oõžæ&Pęx/ķ|ļū²@ŽwˆwÜA‚ÜXą†ĒóŽęĪ;ōĖ0«ÖƉ[ “¹ĒĖ+ńž?ˆDkc2¤8Īp/ż·!ūųŠåæ„&™dÅņpÆüSČp°—’‡ł©šĖå@~Hžå^žåŽ’cHŻno‹?ҲQ,sˆ»>ē†Ō›‹øŚ.¤ż‚ų=äĒ^śORȘ‰›¼żhįžŠ¢(; VQEiKŽD,DĮ(šÅˆ{泈BPČē}Oó¾}wŲ0…DQ0ˆūeK˜’ö_ļū퐼%Ž·ļv¹æ÷żB<õØM IDATŠśßCÜa‡“@¶’#»µ@ō¾§„Č™Ēśu d±Vև¤ūsc‡zß{yßÓSŌóbå–"?{½zCņæWÄ’„XNæŸTö Äżd3ePEQš‰ļQEQŚ’µˆb3éōūÖ¾7ŹāÖ?ÅŅßčósÄÅs<0Qī¾ō¾ßGÜd[J˜Āäzß[Bņ’½Ž÷éˆ jQšŗdfĆś,Ėķä}§R]ŻO›Ėāé~»ūmŠÅūސ¦®ÕHp£ę໚®LSꜤ’—" ńɈūėr¤÷ŅW7SEQ„™Øb©(Š¢“5ӀRÄ]õsD{ÜĖ«F”²^ˆeļ`¤ćļ+w1ąÄ¶™«×=P·"īāųMć»üAø’ ¢šµFłĶ„了®źßœ"ŻĘė+”½ļ†4uÕŹe‹?¶¹ē÷āŠ}.ār{*ŅĻłK3ėQEQZ€*–Š¢(J[ć+–ćß™īˆ„ļŪ ī°uˆĖė’ö_Dā<Ģ.H$ÖŻ‘¹›—ÆŅtło_‰šĢč€ćC\ńė’¦Ģ DY_’¦L*vJ‘ī0ņ-«Iéa‘Ž¢†o9Nw~½½ü/ 1HŁ/wŲ»7ŲµÄC)Š¢(ķˆĪ±TEQښéHg,ńł”¾b9QΊi:æd Ē©H”UŸČ|ŗ‰/å žņMāÆ_Ų#M™›kSä…ēi.K½ļSäG€O‘vl ƒR¤ļį}ū.Ŗ¾+nÆå//[__Nu~’ Ģ'Ńå8†4: ,4iƒT–eEQ„ QÅRQEik6"‹ŃCÜYW!ĖR€X)ßõŅĒyyö-ĪBÜaĆčا#š—­˜"/ ‚øŅģćĖŪÖ”!LQ ¶°žć‘yŠÉœć}Ļń¾ēzß§§ćxÄ ö½f‰÷9žšö*D–³YLS„Õāó0āRŪZ7Ų¶¼nŠ¢(ßjŌVQEi¦!ó$ ‘H¬Įł5ČāŅĢ{QnA,dó Y¢“]†(į öyą< š bAĢG,}yåLŚo)¢¤œ…œĻˆ›fK¢•~üYŖåŸČ2%‹erąBÄ ¶¹Ėų3‘9‹‹¶?YŹćKą9ÆÜGČŗ›§xr¼įåwGę×^€X§“Ū"øÓūĢžšäˆż=9ś7†ģėń9±hV5óŲÉųƒļ@¢į®Få°čŠ¢(Š¢(Š¢“äu,}ŽńŅ-M€ ¼ĖiJ1¢|ڐĻ'Ąi-Ó_ĒņG!yzyē…ä•{yći‘µ7…Č·QšĆøQšż²¾×_Ē2•4yKWÜGe5Y†Ą™)źJ‡æŽåÆ…9–To¢øé…(~!r¼GSĖs6ėX‚ :LDÜm“ėŻÜŠøü†ńCÆ\E¦Ī‚\$šT°-&µA½Š¢(ß:Śb®‡¢(вćŅé|Æ#ŃņčW6kIŒšC<0Ė&Ā×*±|톸Ēn¾">DZ¹äyõl¦éœ;?/YN+`'Ľ7š”—ģéÉŁ¬@,fé¢Õę‹ŪÄś˜īų]‘ö ‹’š‡¬™Łi£U¤^.$G!Č«€{ >ż ę"¤żSŃ ±(wAŚx įĖ…"ÖŻ ˆ²ęļ[@x;Č=ŠĖŪ^åɒźž)DÖŪįÉóe™›CW` r­ŸēŖ(Š¢xØb©(Š¢lÆ EÜA3ńĢfGd²üF&^G‚Šåöijˆ2Łģø ųYR™~ˆ{n&Ž lJQEɝc©(Š¢lÆä‘>:k°ÜŽJٵQ>āvś²öčöĘkˆÅ¶Q’’R&BvmQІr)Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(J; ėX*Š¢(ĶĮźh!EéÖó;ZEQ¶MT±TEQšCg`cG ”(J‡š pFG ”(ʶ‰ÓŃ(Š¢(Š¢(Š¢(Ū79-€¢(Š¢(Š¢p}õ`MƬŹF¢Ÿ1ylūzPLœÓhtOg)•#—P:³6² ¹v5·—,lQ½Ó:³±Órœ:&üØ %n?ükÓ„ĖT kąŗŖ}Ą)"'ē &XߢzÆ}kŒŪ‡XĪ2īńU[ŠÜ*®|%Ÿ‚^#!Ö"Ė©5½£EŚÖQ‹„¢(Š¢(вmå&;'«›{h»Ė‹Å±sĄżĮÖ49ĒĪ!jÕāzk sˆż­I^é{E\?½vŪź§GķÆpģź6ōߚę8±sˆÅʶøŽH¬ ĒĪ!§ń’¶³Mø®ę z,÷M0S1±‰-Ņö€Z,EQEQ”mßcX˜¶„ķ˜@B–8ĢĶ(_:g֝‹ ©Ćl~ˆXĪyŌĪī,oń1¾ģ§ņplˬ•Ę.3˲6¬u8Üōšۈø/aųŗ£EŚPÅRQEi5ē{)4ŗ£ÅP„x菕|öه(ó8“·Q×Ć)ÅOO¶ŖŽI£ŽF“‰<IeÉ’“ŗŽÉ£+ŹÖ Ó–Ų½•L)žYGK²=”Š„¢(ŠŅjśōéĒ{ģÓŃb(ŠŅFv*źh²ć’9¹tk8 —¢QĻRaÜ­yÖasĶiX”ØŪóT k ¼j<1“Ē%ÆrŻĢCqĢH0=ĄlÄqg3©¤ŒM{̲·śBtĘ|Čä’y y×ĻŽ7v8–1¶k6ū uė^ćžėć²}”GķśSqXʤŃU\Yӕ÷8,ƒ0€BYÕ:Œū÷“óIĖkbŻ¢T‘ی›s"–@Öü—˜ūOÉ~s ŁŲx8ū`éŠC°bӘ<6³QŚp0EõÆRqä¦x½ÖaˬŃÄģĮŪLc7`M•%o'¶Y՞Ä8ˆXN wŽ\œW:k7Ll†øĘĮa513›;F½zŹgōĒuŽĄ1»ąRv=˜wY“x:OĖx>„UßŐō\ŹŖĪĄq¾bRńŒ­å&Vķ‡uJĄķ…5Œ]‡įķ&÷Oł¬ŲŲnÕ?Ė–¢!Ųč‘`śb#÷n³ū-BKEQEQeū䔍”UŸöįśŁ'qū”’M{>Ę< t $Č5±īĖĄÉ”¾W„Ł<—‰DĪĶe55ä¼łn;l„·ß„`.¢6’>ˆ]Ę»7Ü©lónĪĶgۚ¬(Š¢(Š¢(Ķ"r˜u`~Cł Q *¦us°žĘÜk’vŲį{䚾é‡cĒ/GSŪxs³E(­™ęj0ļįŲć‰Ų½°īĪ8‘įXs0cŸˆkWI˜N‹°ƒå°’ĄrĪ֓‚Ŕū5­č,ĻbŻżˆD{āŚ”X{‹qcāœn”Ļč‚5’tÅr5–b¢v ®ęL`Ų[)YŅģ¶°ĪżĄĮ`Ä5#ˆEµĮ9 x Ģ©tO gSõUĄĮ¾Ž1ĒÉŁ€1%ž€a4&rļÖņå5Å`~ LDZcČiģC޳®†5•Ą>D'en>sŖ\–˶¶æµ7Jžę_'ĻbģŃ`öĘuć˜qXŠi̹#¤āĖ0܃1Ēs†s?Ϧ)·7Ōb©(Š¢(Š¢lcø„”U}/u¾™OeÉd*G.§¬śgĄżø‘Ÿ׳¹ąz ?Ęü$| ;‘É£ $,§bŚ9Ō,ĪšŌŲļ#6«³™4:Ø4| |DiÕ^ó}®›5”;ųøÉžSØ^ ¬Zę-šČ›-p—œGēā\‚ןPVŻ ų nƉĄ9 NsSŠŲ)š1×Ķ\‰ć¼ćLŖ³>śõÓ{3'ƒCeń“ÜU—rMÕrĢr0g©£ź.ÖbÜ3™<:č¼ Ø”¼ś`¬=•+_Éēžė±ö0œČ•IĖ·¬Ź)«>ĆąŒņO.ž@iõf †)%Æ'Źe'`ĶŠźĪ¦āČh gŲ™”ÕŒĄ˜3¹dĪxhDc<ŪžŠÉ£[Ex;A-–Š¢(Š¢(ʶĘwĄ\’ņc95”tQńƒĄ, ?„¼j<–ė€YŽś}hķ9‘盤UYT»P1§°™ņ|Eeqø%Ź1ó&Ö¾}oĖ óL}Œł·÷=Ä+ø‡ČåV…ÖÓ„” °X†5ėų±¼į@cŽ y×č-HÄߣ)ė8kjĢP°o¦œWjĶ N]K‚‘vÅ:‡–Æ,ŁŹŃ­[ž¦bN!ÖōĆņV’Réa,˜* c»%d99O·źŲŪ j±TEQEQ¶1ĢIDS[Ź\“Ų±Æ0.e3/g6Ö¼8ą^ŖdĮnµ:ü°¬ĀėzięY6”6ĶČÉ%/ ®¶ķ‹aihŗć®"fzx)ā2³BĖW„¬f½ŽiĪńc½d¾”Y™²LeIzkšĄŻĢŹŖLQj$6"Q¦\^Ąį—¦QV=Ƭ]‚1‹Ą|ÉęrOqų¹fKCԟ{™:ˆVī+Ē푐ÜHėŽ½ Š„¢(Š¢(вa6rūøµĶŪÅ©Ēā¹@#®©KQrKŹ:¬Ż rŻpĖWjņpLĖ×rl+¬ W†]w3DĄ,(d”儲šėŻčš<‰gӊu-óMW$~kąčų/&"ņŻQü1„3Ą8WƱ¦ĒÖJl¦¼ę &?Üb¹cĮ‡†”e, Ą1įsiæåØb©(Š¢(Š¢lēXƒ­¹Č{˜‡pĢż`LJødv§bZNø;#ČÉY×L¶`‘X“¹¦Ŗ'޳yfaJki[`œŽ”éÖČy+ēåŅčEY픲.K!4ÓŅf<Åܤi‹²™{ąFŗÓeŌ;”e7Ö€©T޾8ėcOSMp>hé{EŲ-»bģp “±ö~&Īy†I#Z¦ōĘrˆÄüvI) ±ĆB™ŒĪ±TEQEQ¶oŹkĪŽó•£’< Ié¬óCJ;l*Ü%¼"³ą’·„¹Źßb°}Sęę8ßDZsˆ¹‡7³Žfbw O7{I¶ē¢jX!éĪN”Å+¦uĘP¶y ¶‘čµÖöKSčÆ8¶Š Ā× ]W°hz„¬¢“ślŹŖäŗ™r¾åU7PVżXB™)ŌrGńĒL)™Šį €XcĖ\¶ŃU€‹5įm&…ś‰6w`ā[A°ņš)J2yEQEQ”m“‰sŗį6N6‚ósIŒübē`ģ~:ķ%ī>2©£o/~–t}õ`bŒĘšN kfLŲRVs,•Å’lšo’/óAuՁ‡^4­ĆÓ¹a֍M¬¢–ó0€q%hŽcfćZ0L^lR˦üs0¬y§YGļŌyµւ9ņæh|§tf,Ćqų 4øČڤ„Õoa8Šņż™CYõū8ė±ōÄp‚·Ęk)£Ę1īXnģqŹŖž³kŽ`JńūYHŅØ;‹ŅšGqXˆu»bĢIXNĄš…%²œĘ¤Q3)«y 8²Ŗ¾^4Óež¼ūgp#jV;T k “ś·*°‘¹”V?ćŠƒ @g¬½?}ŲI`^ĄFަ¬śÆó֍‚Ó“Śš“QXŻ:`ą:ĻbÜįŲ×(«~Ģb,«1¶˜°ē€żˆN%„=n& w“cŽ¢¬śi`–»bķiĄĪ`nH©4ĖŃ9–ʶ@.2Ą±Cŗ (Š¢(ŠŅ„ļ@†ų'ĘTSV]üX@a}¢BX“ånj .Åp×Ķ|„;ĘųK\¬~Üœ‡ŻŖ¬{EŅś–Ł1„ų}Jgˆqo.ĀŹF,uĄćD¢WdU—É»Ū88Ģž’ęžČB±47bģQ`oĘ–š6%×XģĢS0ĪļĄœˆEUš<†13Į\Ē#gŁq-¾…Į»4Waš¬ŗĢO©,IưVŽ~‰ņź3±T×É5ņŚŌ² øŸ˜-ŻZ~ŹØ—)Æł!ÖŽ\6pūŲ-Ą+DĢ•)¢gOeÉ#”Uwn®„øX`–al9“‹§“źŪ1ŖX*ĶŃĄŻ@ 8YČWQEQ”’Ā+‰lø.«¢=kYæ>B~¬7ź©(IŒ[qds†Q·%Ÿh$1Ʋä*ģŸY_ŻC"vE£4Q<6DžIφžDć‘d×ēż‹ž[Ó¦Œś70’‰sŗ«ßćäįÄV±yĆ ī9±>”ģm#×pżŒžD›Fe•ą2'Q1§ ±Ū…“ŁŅ `ŻeTŽ>‘+kŗŅÉĄu#äøKC#ģNó50KęäŅ-:—®D¢›€eįėGż˜Č†«)~c Æ gƵ iOnn嚪䘝±n&w•‡®hbĶ«[÷GŠŗĢ ³zŃķ‡ä‰nbˆ…MŚ?‘Ü)ó*K ģ­¾ŠŲq‰¹«›øĘå^MŻ–rŠŠ;>bš7€Š FPR”8æ*Ś©ī!ĄĄI“ą`S;SQ”Öә5¼~zu‡vBˆ£(J{šĖ_]Å»ļĶJN~8£Äi;ŹŖßśQY’"xĻvJYÕY`¦bķłLżxG‹£ģ˜hTX囦'š[ąC•JAŽg‘ł Š¢(Š¢(mŒżšRGKŃęg1˜§ˆ8_v“(ŹŽKZWŲSĘ §w÷ꮫlo<ö÷9Ō763ųYóÉ.nz¤)w4š šƒöHQEQ”ŒŹŃ7t“ķĀäā$ąŽ¢ti˲óbÄŠo—§€Ņ”gßxæ½Ė£‘kó,!0ø§Ż$Re›dÕŖŌÕmaąĄĮ¬X±”%KRTŌ™w§sē.MŹ×Öndїó©Ū²™®]»Ó§O?ŗv]mŚ“+–±ūīCX³f%‹}AA§BöŽk99¹Xė2ž'¬Y³Š^½ś°ūīC0&1`H,ež?ećĘõäęęŅÆß.ōŽ)õruŠ¢(в#¢Į{”ö$le¶Ü |ü§-R%3ėŌ3Ē­Ū ‰l$ęDŻÓŲµ›|ųÆE+&·Ū±_xńqŽy·†½÷Ī“’¼Œõ¢5ęēš?^ĶqĒ¾µģ_»Ÿ^|‚ĘĘņņņihØĒ‡£ĒŸĀ/»c oæ]Å]潙“N<›W^żÖJ\ŽŽ;õåŚkĶ’÷ęĻ’dkū ٟ›ośØ©™Ężææć.ģ7üŹJo£K—nķÖŠ¢(в=”Š„ŅōB‚ž\FĖļ±ąI`°¤mÄR% ūõGėė‹q9ćmmĆA8ŽˆbēÄ0.ä;šĆ §ŅžŠ%Ą’% ŁuŠž<ųĄsōģŁ›åĖóš#æåŗ“Q£§{÷^|žłG<żĢ£|ļüĖłĪ)ē’››‡ėŗLŸńīžmGqC‡°µĪe_-ę¾{Ÿ¢WĻŽ|śŁ‡L®¼žŸßx)§ś}nŗńnrrņØ®™Ę½÷żšéÓ’Į1ĒœĘź5+¹óī›5źp&œs1}z÷£¾¾Ž÷Ž‹{ļ½…æüõ>.’ńĻҜ‰¢(Š¢ģ8hš„-É.ęWŠś‹GČø•¢(ĶĮ.ÆØnéŪG×-~ūö-_¾3£®¾auĶk3ŃZ{üŪ‰äpŁ„鯻/‘H„sĮW6²hŃ|źź=z<'žp¹¹y8ŽĆį‡@NN.ĖW$F}’ĮWŅÆļ@ņņņŁoų!Œ8d :ń½óL×®=(,,büQ'Ó«go–,]ĄÜ¹3qŻ—^\Ī€ž»’››GēĪ]3śhĘvļ¾Ū$b¦¢(Т차ÅRi+š;2[Ę#Aīkćze‡Į.ÆØ>+±®‹eL]£{ŃʶĮa›=zѹsׄ“.Ž’µ›e5¢įĆfß”2ž<Ö¬]E4ŚHmķ&–-ū’h“‘Ęʆ¤:wJųæSaŻ»÷j2Ÿ2/怘+ī²kÖ¬¤K—n¬X±Œ+–%”ĖĶÉeŻś5­?YEQEł– Š„ŅZ†S€“Ūń“×€ĻŚńŠņ­Į.›SXoŃŪ‹"™L$’ł§iåŹåÜüĖ+ųź«Åģ“ÓĪäääRTŌ™zķœÕžŁP[»‘uėÖPZ~aŹ2®ėś^Ê¢ģȔU_܉åQ¦”ü £ÅŁ”(ŸŃY ŌQYŅ©£ÅŁ‘QÅRi-ѾJ%@!ā;pŪłXвŻa—Ķ)¬kĢ9Ų:Œ1Ö]cžz°Ū"Łžį1źė·šŠƒĻ7‰Šzö„qmrŒĀĀĪģ¼ó~’3mRŸ¢(ŪeU•Ąé4ęåī_u“8ŠGyĶ@¬ūÖ<Ŕ’ė;Z%U,•ÖrPŒiēć”#k\*ŹµÓr6ŁõćDŽŽŖH:6ߥ·V‘LféŅE Ł{æ&Jåśõk›øĮ¶”ž=vbżŗ544Ō“——Ÿ7ķ?Æ0³źunüŁmr,EQ¶¬éaw·y}䢺ØĖy„h×¶y)‰ø&cvĒa§&y…c–S7£'uQŪ’)T±TZK˜¼!{Ūr+š4°Ŗ£(ŪMÉ%f¬ćŲ°;Œ"™L·n=łčć·Y³f={Ź«gÓ¦<üČopŻX«1|æChh¬ē±Ēϧ_H×®ŻXńõ2žyöŃ&ó6Ei®©@žaŅŲ/¹¦Ŗy„uņ‰:_pēČÅ[ĖŻšfos%ō³c>arqźņ×W¦Ń„qņ°īzŗ4Ģ£āČM[ó/™“KO+ ·G£²`n$6ˆėgēPPø„Ša ”× `rń~:­;ł†cÉerń4čā€ķAtMÓÉ×gM°Ū.{ć2ė6›Ēm‡­L)słŒžą Å5†ˆŻLŸp×čģ'v§•5Ų6³w§±a “YK—œyTŒŲœP꬚®Ev¢`Ó2*ެćŚY{‰õĄq0iģ—)å(Ł‡ˆŁ“˜)Ē0eŌ‚&ķ³Ēn»bÜõÜ6jµ'ū^³†Xō+rņ:{2‚5]¹~öīrģX-·Æ Āø\_Ż¼Ü(°€ŠiŌuīOml÷o ģ­¾w(ÖDq1iĢb0įŠh…uŲ2{(ŃĘ^'Ēnw “Ē.£¬z p>Ę<Ėäāײ¼; ŖX*mĮąą%Ś7šdOąWH0EłÖŅT‘dŒćŠ)®Hź ģ©ß9·ß©āāKO”WĻ>ønŒuėײ×^ĆčŪw 6¬kõ1ōߕżšZyōw¼šāćäwĀ8†-[6Ó§O?.śįµmp&Š¢$cžÅō£“źŒ™ŒKW°‰YJ«ž†¢`jCŌ\!ČŗHeÕĻPT÷=*ެŪZWyÕx¬ł1öş mØ-h¤¼śi"ĪÜ6j5Ż¢ƒ‰Y‰ć¬›A,*[›Öķ|ˆµ’ĄCYõ£Ą/pm–M@66ŽĆ+äüJk¾‡±“°ōßZ·q źø”Õ¼@޹ˆŪF­Ž—Æ…į!,ūo•Ē5ƒ„¼śļ4äž(+]k_ņ)Æzknµ@-Š€²šĮŽM,ŗW¼m,Ō6ÖSZż$‘Ü«™4BšķÄbŃ©ķōSŹŖ/wųֆr#PV5ˆ¹€ŪKĘŪ¾z(Ö>f®ß®Žl¦²źy8ę&Ļ`ÆA;ѝęĻ”ÕtĀŚ3ƒµ/`œÄ¢ēo•{±čYDķߣŽń>08€-łćFgŅÉžŒ²źa;‹֓¹ęCģĢs™2ęƄv+­¾ŠŚšr`ĄÖcZD “z0°øīŒŒ×`DK„­x ²ÓŽ~ļ—³Ūł8ŠņT$ĮŽ­[ĀaŽću¦v0‹äńĒĮč’£š¤wīܕŠ›ļaš®{°Ūn{ó‡_ąćyļ²fĶ*rssé½S_† Ł >#/_\W÷ß’P*n¾‡ĀĀ¢„śN:į,w|“ć\uåMtéŅmė’'žp‡;ŽĻ?’ˆµėV“““KŸŽrc4h¢“ż1ę7īó!Ö-s Ɯ‰Ż| ˜B'æi’ IDAT07bų胵—g°9P Ąu5ūbķKĄ¬¹ ć~‚5k1 ÄŲ“°f¶p<‘ĘUø9ұœ Œ5·įXQ¬Üüå[%³ģÜ<‡±Õ'µU٬qą> ¬~a®ŻŒ1Ż0öL,§³łĄ‰”Ļč‚åeoļŸcųkź0ģ öd,g“ŪųGą¤,ŪqO¬¹xc«±¬öŚę°Ļ!Ö½[0ę3\»c9ƅÄŠš•¶ųÉOĮņŽł!–„ą3ĢyÄ̳`c¹¦Ŗ–€€åa3 ׯ„”°?˜ĖpķKütĪŠD%Ł~ØóŲpģgÄL`é ”³1< €įӌ-`ĶĻĮ.Ä8W³ ˆŠ8ĖŒó gMŹSg‹‹Ė̱øö·Ą,Wć˜yøÖāŲĪX3ĆÕĄzŠź'X¼•­Øb©“%7"#9M{…m‡܆,o¢(Ū%ÖNlžrŠä8Ē”›Z"”’Aōļ?ØIznnģ?2!-?怃,nRv=öٺݽ{/ŗwļդ̀ƒCæĻż›¤uīܕƒ*É$ŗ¢(m‡ƒuΦrŌæ·¦LœóLóu sõkāžėi¢¬°ē1±ŗ„IT‘ĆÉĄ.`ogŹčšHUVż)p?9ēĮ‰źąŽ¦rĢ»I{¼H鬯0n9†÷™\2©mPK3š{Š7Ņ£¬ŗ8…Įƒv> ʑb!ęī(y5©žē(«ī\Ħ¼B@ĖtøUiKbĄ÷i’9ć”Y/VEéP¬©]4÷ŗÅļ\]·ų©[–ģµŹqœ9{»‘ØŹŻ2V¢(вćPĒ¢Eo$¤ˆ[ę`c‚R P9r9°L÷@ź(`)“G'+•ęļDcū5S¶-,\ņū¬JZ;X¢Tś< v9Qo¾"]½ļįõ¹gįšqžof6Ō±`ÉMėašIS„ĄXŒżą@NņŚäO%)•ž.OąznØiSć<*•‰=ļ•;8Q.3-D©l†ē“”J/Żų÷×nń4+£»9fch]q³Ž™Ü6•ń[„Z,•¶f2ßņeŚ×‰ļŚ?­¢“k§F¾Ü{a Ö]愣‡¾=rónUEi.›·ŗ'&š* BRyŪ ĖŹŖĪ -mŁC\™ĖžU)d ĮōC꿅SYņWü¬[N×üŅš'qųĖg›ŻÅT§®+œÕ”²zĖR¶1ƒ°€뚓_Šõĝå`Į:=å<ü6® -¾®`%Ż-ŲŽIõ‡+Ō­ĮššłØÖzŃ{ݼųńĶL¬×VPV]N$ŗ€‚NõlŖļ f †ó„t+ŃehR Š„Ҽ <„̇l/F'xĒR”ÅZė4|łŽP_‘¬[ĀxŪS=[EQ:Œīŗ€™šėš¹na;ŹP€1ŁGr­3Ÿ²ŖóĄÜ„±„XOJ7@Yͧ[Īä’Z.’5PÓ虲müß.—ä¶ ·äÅŲ€ėyß8]¼[BĖ?4¢‘²ź0y”łm‰µŁÆnķ”@²nś\b9PŪ(Į–„XēR*Œ®©žU,•öāZąp`ŸL[Į/QÅRé ź½æ;÷hQ$ß= ‡^ŖH*Š¢l+˜Ų·ˆD›Fé R»qsŚüÖQµĶŚ£rōSĄS\łJ>Ż‚ģ fŲ‹±Ģj†d3±Iū‰MzŸŃ‰Õ2†«Ķc©QŻÄc­ĻŌ«šģß“€*Ō2ŅŠ8g<’RŅdo‰„®ę‘Ō،?žü‘&Æ£Q£²ēʬģt⧽ķ?`wüæHrŹj¾łöS"æX]ķ}-üģ=5jĘȦ­ĪėŗO¼K£†Ķy¾Ł¹ŸÅ5®1„˜ƒ”÷ü“qɓAģÄLŠ€"z åóĄ1ŒYöQOR Šś6ćēbV2p'I‘ēŸXF•sQ„¢žDLād„n/˜óAų!•Ū@> ģfz”5Ŗ`=ņcĘ%½‡P•t>HŁäk JP,ė/jmT1Įm˜]W2.y*RīBX ąjo$Ɓ„b«<]1$Éøä9˜Å1\,žØŹ Oš,¶®„ĪeŖ)˜Hl¢(›±Ø'pQ‚QÕÖ ^LøØ‹ŖX« @lŅWĄżĆŌČi—d,’a4a©QŻØĄ“Ą¬[Ļ/5 0xŗlk\ŏüÕXźĢ=¢;p‹ÄR_’ēĖ܏āyąž'줿_ #ž~‘õ›\Į‘ih\ćL\ELāP&ƒœt„ē¬U%Ž ¹ß”|†j™¢ CpŖø E‚™@ÕJŒ”gZŌ/Ä&Ē"äDó¬D„?!­YV…ī>ė`jäļÄ$æ†ą%$Ÿ[«Š”žĒ$Hņ@>ŹŌĒ/`EŹHˆZFLāh„x)­õ2„®“/’żč”{œd” CŹūŃIk !yEw7q½­^Å)¹ŒŻpŠņˆ‰ÖµÖu ĮLŽŽ_å1ǵ.a\ād$Æ"Ä').6¢×{ŽjQY¹j9 6£MėNNÆ+?īć'Žb6•ąććGxx}„pŒ`3‘™qŠü‚<<<<©W·:Ī‰E(,, -ķ0Š¢P·n#<<×SUUŅŽ¦ØŠ€»»µk׳ݻņ˜Ķ&RSQ\b½W!ĮµĪgfž& 77w»s99™H) 8wDzNNéé'@@@C5!GVī(Ä“Č jŖź=Å^$&DĻ!nóg˜ŗ"hˆnH™‹Gš,ŚlBå™Öżq«šcpļ†Tź”ą rR}¢Ā_7e#&µ/.Ų‹„ųČF%ĻEO7¤l€ *yHĖŽŪź Ž"ßdüę™XL]PD=Ą©šA·cęF§u$Ļw­¬kó1;>c7ŁpE•9(ņ0‡Ó¶8-S¢ņ'Ŗ|„'Čp„Øņyn˜a²k;­ūZāV5¢Č½+R4į!Åa¼ 7×ŪX¶v>Ł”äõE§œ»ŒĒŌč׈ݰ©“j!•²¬³B D•å1¹ķBšśāārŠ©-‹ī{Ė?H7«ĒS⊤ģ8÷[ޤ6ČÓ¶cŠ| )š"U£Ók®14a©q¹ˆÕ«ä X᢯ęņƏ_PRRöœęźźĘ­żļečQ!Xæįw>œ3…³lł", C‡ŒbĮĀY¶k¾’įs¾’įsk’K“±XĢ<żĢ]<6l4wÜž99™<żĢ]<ųĄSüńĒ¤gœ“]Ū%¢'cƼi½Ęā"fΜČĘMk±XŹžė\\\ ­ŃXȰ”/Tø~%%Å̜õIÉ+QÕ²<Į<;ā%:w¶–’µX,Ģ™;…•«–Ūõćééͽ÷ cŠĄ‡ķģ~óķ¾^<“©Ä¶N?4‚w ¶µY¹j9Ÿ.˜I~~®Żzöķ3Ēc{°rÕr>ž?ƒĀĀ»u(1•݇““Ìū0ćŽ£]Ū.vc™żĮ$,f3ƽś®Ó5ČŹŹą™Æ³sēf»ćõė7įłQÆÓøq‹ ×O£05śģšĖrē"“+<7­ūZ§Ēć" Õē5«čqL ˜Š=©ĀkŽī– üįōܬČ<ą÷*÷?%"·B[Uå\ku†„ö`åyŁ]üV„¶VįžXśsŽv­KØź|ć»Ū'4:ĆŌČUvŸ+[Ćé]STŪgĖ/ئ#H&›4 Ųä€PAz”H:bMH9Ńv£øcrū¶JćæŹŃ„„ĘåĀ<üYMöG–×4†Ć›k ]Rd_ ‘MHj‚ņ?ÅĮƒ’Ҧu'^m&a”ᄆÖfŁņE¬X±”LJ”mŪ|}żČČ<Ķ’%󙿾[4kŚ’ś„”§'N¤ąÄō„…×"+;åĖæbĮĀ™“¼®-Z“%1éO–,ĻŻw %:ś&üƒČ/ČcżśßY²t>M›“¤G¾€µ Zbҟ<’\6Ēß?ˆ¶m"˜šŅōė;ˆ{[…­{ĮųńKž>ž¶m"(*2°ióz~6‹~ų‚ūļ{€ß’”kłģ+tī›»Ę¢BVÆYĮ‚…3‰{mķŪw­°å?}ŶķɌB‹mQ…ŒŒS|üÉ Ž’póę.C…_V,å?dčQtķz=>޾deg°lŁ",œE‹ęmiٲ=`õ'§¬fāėļQ»v]22Oóå¢9|ŗ`ŻŗŻ@Xh8ūüĆ{³’G澃č×ļN‚ƒBÉĻĻeCāŸ,śj.uė4¤’{8q"•÷?˜DtŌMÜs÷£‡Yķ}ł!ii‡iѼĶEŽĒÉi¼üā4ź×o‚‹‹+GS0oŽ4¦ĘOążŁßŲy¹544*A%!¢P„Y®,S"r™°®#Ż`„聤! ŅARꂘT–Š­œ·Œ%¾GĶ)›r…Ń„„Ęåd%š=0Ølw:ŪŖĮ¶F ¤ąŠĘZŠ«kĻR!Łh„ Č«//^zqz}Ymīõė'²[oś÷æĒvĢ×7€Q#_eó°[Ųŗ-É&,†?5ĪöŁŪŪ‡'ˆ °qÓZZ“hĖ–- ēį‡ž±]̃‚ƒĀX·ž7VÆł…śõŠÆo͚µ¦Y¹¬©'O„Ń„‹c²nNGü”Ošōō¶sqq%<¼]»Ą@k•£ŃźĄČČ·Žz}ū ¬{1}¼×.?[”»øøT:ƒ”€={všō3w9=^æ“]>z'IĄź©¾X ėżōvL…mŠ‹µՁ&,5®oī•5Ž~¶DÆ&Ū÷V“]KLŽńĶĮĘc;ī0¦nlLŪ¾ŁÅ,NIUżQ"ĘK);Z- žžAäēēāķķćš³š³Y$&•å+,2••aw½”’cĒąWZŽ#Ą?ˆōō“8ćō©ćxūųVßd*ĄĶĶNĒĢYY²äcRRV“vģ0'Ocļ¾]Muž5æ<ļĶ~“ß~’°†Ł6nŌ‚n]Æē‰ĒĒ"„äą”šāäÉ4§6Ž|k ß}·š¼ĘLnN–Óū³zĶĻ,Y:?æ@23O;ˆŚ¢¢B²²ŅmŸĖ——9›ŒūĢ8Ąśrįģq ół`ĪŪ¤„>ƹihhhhT MXj\)fP=¹:ļš Z£†!Ó÷ųmķsFHŗZtšŌØ2­[wdķŗß8xš_»ć›6Æć÷?~@§Ų—–[°p¦M”H)łõ·oÉŹŹ ]i6×ęĶŚpčŠ^R6ŚWŲŗ5‘}ū’”u«ŽU—^ļÅ”CūģJ{\(ĮtļnMäė@qI1GŽģ'%e5‹Ķįłä£y ē“‘“Åņå_9ˆfkŅ “īclŻŖ#[¶&²kwY¾3)%ėÖ’ĘéÓĒiŃ¢Ży½uėN>²ŸµkWŲ­Åɓi|óķ ¬ł-:“øˆ—-²•‚QU•%KēŪ‰ĶŠŠŚxøėłéēŶše)U¾’įó 1@`@0µkÕå»ļ?#77ŪvÜl6ńÓO_“’²’ ó𛆆††FÕŠBa5®»°ÖAŗłŪ Ą»āŪÕ8Oäé]ŽÅ¦āHTś ”>FcQG(­Š®Å¶jœ'Ü÷$’ž»“±±Cšp×ćēHQ‘¼¼""zŲX½›‡ķåŃa·J~AyyŁtīC—.ÖL”}ś )e“§ŒĆÕÕ ’@rr²0™JhÓŗżśŻY„q]ßėf–-’ŠM›×įććĒĖ/M§n•_č„ö°vķ ęĻūÉęy+Ļ·ß-ą‹/?dŲ£Ļćāā¼īłż÷>Ī›ofųˆ;ńó ĄĖÓŪ6’®]zҶ­UXß9č¶ļŲČ+Æ>m[Ļ‚‚< †|:“ļFƞżĪkģ‘Żn ÷ ·1ćŻ×™5ū”Z,degP«V][9•¦M[qĒķšłļ³xÉĒ…’Ÿoõź–…®źt. ös?Šēį!} ”ŠP€@-Z“­pBFŽ|•ÉSĘńčc·ąė€^ļINN&f³™G~’RƵ†FcÜzŠ­BŹß‰~ńœmĒ$vÄE|„”ļ=’2šŹ1*ٽ\ ¬ajŌŲ*_“ō: w ŠwHˆ¼°h¹±ŗ S>@•‘=ē‚l\#hĀRćJ2›K/,¢ ĖĖNy!)„ča,.é Āśō« I*rŪ­÷Rdt,•ęėėOĀŌOٳg'ii‡0ŲB=ĻζŖ×{2-a!ķÜĢɓi(B”qćv‚ÄÕՍ7āf³’Ą?œ8‘JVV:žžŽ4hŠ”fM[Ł’Õ“o×…Ų±“pqqžßåcĆFycé˜ £Óéˆ;‰FšÖr±c'ŁeeµĶ÷¶ū)6Z“ģ ­^½ćĒ:K)UņóóPŻ9é4oކęüČ?{vANN~~¶u:s­§§7S'ĢŽ½»8y*ÜÜl¼¼|ØS§-š·µµ‹ģvuė6tčGAģŲI4nÜĀöł¹QÆqםCŲ·¹¹9čõžŌ®]—6­;Ū%dzlŲhnģ};’īż›āb#ĮĮatźÅįĆ{ķs澃hß® ’ģł‹‚‚ÆÅ&-"ˆrź;&„9:5¹ō“µx±«éb“JPt#>r±Éσ|E>Ȕč_Km’4åi°¼¢ŖÉ†õ$±IŪām¦F.­lé»”ŠÜ„ š 6IE°)ąU4›øŽ×Gŗ ф„ʕf+pø°ls Ö̳UD¦&źŖgg;!©HwšŌŠŠŠŠøL? !Bܱä!īŽÅ IDATĄ*&¹‰7’?ģŠ€:@_¤œOlJńX‹¹ <€$γ]!½€Ü Ėž—sg1’›A®DŠo|„ Aˆ^Hłī¢%å·ÜŒKšˆƂH¾B’†Ąh‰ä>Šõcģ†NLė~€ŲÄĒ@| ¤ƒ|!R‘²¶Õ¾ŗģ¼—K2Ś*ÅHö£Ø®Hq#ČḈÄÉhā„Š”KL—iv6<ŌŪ@„‚œNQiÅDSPEȕH1šīł1I½ @ņ#B~¢6pBĢ`\rZ9Į¦pqŃUŠą_ń¼-Pž(żŠ جaMnV­›õ…ō@€Zž; }@4uBüƒŹ &MQ¹äbbļ&!ś» ūŻX ,‰@-«‘bBꁎ”½A¾ƒĮ½Õć<©±hĀR£&š30āŪ쉵ģHå”(×(R®r)<źŪ^(ŗ>BŹ>FDé” I +Œ0/ć8;N¾ Ņ©ÜNB·Ÿģ®»9Å“ĻS›§U9tµ<±š€¼ųųhĒē’˜¤uŁ ė˜Ü3›±›ƒ‘¦q w!½ŗ9„|ŽK~ )ē ”Ą’ć@ä`V;2#ś˜­mœT0$’Ü~ž£vGJC>Ļš1Ió £`cą'\•˜Õ·På#œ-,„øØŹgUģSU–eulāL±Į]õ£ķ\̆(„’ˆ”•{«‚uķī 6ésą!L®Ćy'āD-x_25ņa;1³” ([¼T,,„åįHł ŃŪ‹[åĮ#Ä^Ly“·»ež×ÜžĆhu,5jē’†®rō@ēj°ūŸEŹU.†#[:¦n_ttŪļĘ“€|EQ6 äd}@z\é1jhhhhh )ĄĖw‚c”¼Ųķ *¦Ed ł¤?¾Å-.¬c—šŅ¤8=­/"ÄÓ\­ūšt%=w³ī#ōōł0#°fÓæ”Pä÷v¢ NØ(ņ½ ōļg‰J+«-a±ÖX²Š›o“g|bYĘ®˜^nA°Å©ēń.śŹīˆ5œ5 IS#ķŸėŗ'F$aUŌeAŖļ9xhŗ’ ¬щøĶž^+øHēHڧēāz€üpƤV­(ņU‚ę±ŌØ ¬ĮźYt»Äv{I—Ųę†ņI=Œi\Æ(ų€,õHj%@44žŚ¹‰Zau µnćŁ¹s3žžŽ4irŻe‹Łlb×īm4Øßō?[kq’žŻiżŽē ֚¢Š¢ŲJĘ<ō/y“kŪå ģAZAņ›Pą_&ljģō:ÕlDB\X]“n?®ŖMLb BģAŖi$t? Ą”ČõĄś² ”Pė’„ŅątLÖŅIŁ€õZŗ†Z÷PŠ£Nū8ļ1K;=ī¢Į¬¢\ę}9Ä`,Ź#Ą8ėŠś#ńDŠŖz+²*Ų;hDČÓ„ÓšØi-o’-ĪOˆ# ņŌ Ą±ž••0ąM5`Ā&dzŖÉdż.rMÕ8ŖY7XćZ„ŲV v{TƒĶ‹”‹ug<’…©Ū–Óü3Ļx$…5“ĘēJQCćJ‘²q GS:›ųė7ünūüę[£Y°pęåš ƒ”€ø‰£ų{WĻ:•°qćZ§s¬ŲƶķÉĒ?š—Ąä©ć/ĖŖ“O¼Ė‹>“}žģ³ŁÄM|ī ŽčZC:f°‰[åõōMXĢœžHĘ ŠŠ=Mēāˆ„6š ÄĄ„rŠŲ¤"b“ö›¼˜±ŹŽ.ČRĮˆXPᘠėD–3ióö_LÖyYē×øžÉNZ–J:>j-°!'K5€¼0#-‹Ī»ļ’6Ę 3÷J™€«¹ā=ž“«ų»(& .š»ųEóXjŌÖŽÅČ.ŽX_ž\| ļˆ”‹u…G›tŠ)J »1~Š‚Ÿę‰ŌŠpdę̉ÜqǃԿ߹£ć  ~šĄĄĖ4ŖKˬŁopk’ūØ’ĄSÕŽ×ÆæĒžvŠń]ūhøžżļ„  z*?\Iśō@»vš·ņŠ’©W𐫑¼uζn¦U“ź˜Q !j&q«ęSØoƒ*룈z ė#i rŠr+1)mIčvJř”£Aü]a/ŗŅ„2ÖDC TēɄ\UdE¹l*¢‚m,¹ī®ø¢¼ĒMHHš L§0©7q«6`ą6„ü•ųRÆlMA¬Öēī]¬sZ^DHā\]ą/$cĻŁ‹Yżēā†łßB–5…õ@Ģ%¶4ž­¬į³…dQ}MFj\X,23Oc2‚§§—Ży“©„’’b¼¼ńłø»»ćźźFAÕ1 ‘˜L%¶Ļ^^ŽįųLŁ·Ļ t:Ē;cqŁYH)ń÷rOaa®®nøŗŗ‘••A~~n„%CL¦22NRėœm33OSTTˆ‡‡ž  „( 8²ĶQBI‰±Ā9ęåe“——‹››;AA!čtĪJJŠÉĢ“>cćį®/[cf³³©UUm}yxxąāāJdä ØĒwy&S YYéX,‚ƒĆpss·;o,. zŒÅEd¤ŸĀŪŪ·J!Į‹…¢¢BŪ=ÉŹJ§øÄH`@z½sgA^^łł9xč½šBQĪĄѹ‹ć3¦”*99Yņńņō±«3j2•P\\Œ^ļ隝2a1›~5*ąäQ 뙀|¢žpŚę…UžxxāījŻļ(¤D  Ālæē/&„ØMČ™™ Ų»åĒ%=„äs„z šBä %e7ń‘ĪĒ4~}}Ūæ„ĢDĀ¹'LŠŠ ĘY1ēo¤›?˜@%Ćīø‹²³: U(ī!(ÅWߛ¶s  KšBu„Ātą?*,„”JÉŃ-„ŽīH٧8>ŠBĄ!©%nÕøQU•…Ÿ½ĒoæGQQŁ‹öĄĄ`?8‚›n“&LüqŁ"¾^<Å_­s°1äѾ<6l47÷»“G†ö±’ö»…|ūŻB¾^“ÖA܌ń1Z4oĖČg_¬bģƒ'³ióz›°B”U«<óō‹„‡[ŸŸu;EsšŠæ:“—  PęĶuž—LJÉē_|ĄO?Mq±Õ‘įį”ēĪA8“]µśg¾ųā}2³ŅmĒ|}øsŠ# ų‹ŁnŽß’šß’š‹¾\‡»ž=’žÅœ¹S9|xŸ­»»½zŽĢ“OÄąźjŻŽ¾wß.fĻžŸ]8­««;Fņģˆ—šõ `Ę»Æ±qćZŪł3}?7ź5zßp³ß‹'RI˜ŗ° ī>œLrŹjĢę²$uź4dųSćhŪƚcķƧ™yŠ&MZņÓĻ‹mmĆĀźšģ3/ŪŚ9ćĄĮ=ŒŸšƒĪĻæ,%'ǚ€Q§ÓŃ£{?ž}ę%Ū÷ģŁĮœāķÖB§ÓѹĻ>ó2>>~NūųäÓwŲń×&>˜ż `s?ŠgĶŚ˜LeŃtµjÕeč##‰ŒģͱćG=ę!ž|"†[ūßkg/&öQƒy#nv…óŅ8‹%÷YˆMŚ“«ŠÓäźńó( e7`#k½FAC‡¶£’}AŚ'VQŌ›‘|€§z š«Ć55E) •ź. dGą7‡öq»Ü0äķvŻ(ÖÅCšŽĪ')ŗW8’ŠDZ³ĶžµÆŃĶ…a’v·Lb“¾ApHo ³ü‘ĖŽ8,¢!°ÓīԘõĄŅp¼ĒĪ±ĪŻĶ|~ī^7sw²ŌJI7€ČŽ繲¹īэøĶžÄE8ه©ŒÄbž„Ō  z’TÖH4a©QS8 äp®šEFąėKl³Ś0ł«1:µRö1¦mæ …@-²UćZbłO_óć²EÜwļc“k×?rr²X±b)³ß‹ĘšŪŖT†‹‹ qÆĻąķɱDEöę†nĄÕµ‚²vgńĪ̉>¼ēF¾J½zŃ¹øpäČ~~öSā'šĪō/l^Į?W.£WĻ›üĄpBBœ×ōX¹ź'¾żn÷ß÷]»ōĀÓӋ£GņŃĒ vķv’³Yļ½AŸ>¹¾ēĶ“——ĶžČ‚…3©]».]»ō²Ķqņ”qtķz=7ö¾ 7Wwņósłß[chÜØ9ƽņ!!µ1ń×_łrŃ\¼½}ņČHL¦ŽžƒæÆæ6Ó¼oß.ę}<¹%3ö-¼’)nķ/Ė–-āhźAž}ęeź×sb<ļćél޲žĒM£†ĶŃ{z‘‘~’ÆĻcŹŌńĢżš{<=½Ųµ{;īī¼9q6>>~;v”…ŸĻfśŒW™ūį÷6qXß}’?6–V­:`,*dēß[XųŁ,BBjńŠą§)**dŅäXĀBƙ0~*µĀźb2—pųš>>łäę͟Īčē'Vö•`é7Ÿ²rÕr†<2’6­;ćååMzĘ)¾łęS¦Ķx•÷ß[JĆMiŃ¢-kÖüb',¦äŲ±ĆÜu§ć‹Jł x‹†õę1aӛLībM÷.ÖѰžĶ ‡"ä <‹· tŪ‘r±);ń꺁8”›Ü ät8+±Š!ØŹėÄl8†·’^Ū>¼ I Q™PšČś2Ü«xT$/“|ļ¢å֌ Ą‹kC0äMÜAZ³ŲΊĢ#6éąvb“Ęįåśq…Äķr£ Æšś¬IKb“ć1'NbF“uæeLR7¤ŒaBß:\”ŖsQ”‡€»|ĢŒč¢ č÷āPŌmØ’cLbÓ£·' RŚ ,ļ®T]XZß¼© cüę™L‰Č­¤½)§3>ń8ÓRXrŸ…S‚°¤¼‚‘|BœØx+•‹²/óŒKz‰©Q„!ÆR06±'0 IÅbMēpU  KšÄN¬õ'/%5:Ķsy!)įF‰%H’×2))«iÕŖÜ’¤ķX½ŗhŅų:¶nKbÓęuU–B(“oם¢#,¬ŽķsUČĶĶfūödžń½z•ÕCÆ_Æ1RU™ńīėœ8‘jóZ¶nՑŃ/¼Q©Ż ‰ФÉuvs¬U«.¹yټ’Į$Ū±Õk~”VXF o } ÆO‹mł{×6RRVÓ­ėõ¶9¹øøPė¬9nܓޢ"Ļ??‘ r{G›6iÉ”ĆūHŁø†!Œäļæ·““Å„qSiŃ¢¬AżzIK;̊VO]ƆĶJēš'§OŸ8ēzJ)IŁø†›nĄ-7ßmgÓ? ˆ±1Cų{×6ŗv±žŁwssc옷lį«uź4ÄÕՕ7ž÷Ē§VZ|k’{mm€FšóĻž$%­ä”ĮO³k×Vņósyå„é4oŽĘn-Ž?Ź/+Ŗ^^oż†ß‰Žŗ‰²«U«.uĀšų“·±}G }ū ¤_ßAĢzļMŽ?jūž$'ÆĀŻŻƒØČ«ÜŸF)Ęģičż£‘āQ,ęG‰M*Œ`Ė/Pˆä1[ĘŅ)]w1.i&’ē@]‹!¹„Ų$ H=°kķ[mö§D'›<äp„²CÄ&åīX°īe,Ę³Ū āz›‰Mzų!aš€Ų¤<Ą si{Dҳ¬n¤TžGØķ€)Lo›”!ρ±äē¹*?#qc‰I*°ŚĮ „Éė^г˜½ŽŲä=ĄuHyeĀ`õQæcHžøŲJl’C²@ąŽ$A2Vē@åHu B‰o šŽ 6 §õ%ķÉEˆCØl a=3±Ił˜Õ€Ņs{ŗ—Ī٧g·$_C‘ "6ÉĀÉž €Ä„Ā0fEj”°Wˆź–Uū£t™8KHö–X‚5!©”QFvv]ŗ8žšōō¢V­ŗdeŸkĖĖ„%=ć$RJź„7°ķ%AƒM1ĖćÕ®U—¬¬Ź×"=żžAø»y8Ģ”VX]6o²VN8vÜZż ^½F6næķ~:t膔ŖŻŽĪŹ())¦°°€ĘN^4jŲ !²Ė…ų†‡×wŲP*†ó *w@“nåų±y³ÖlŪf­:•]"ėģÅDćF-0‹(,48ģŸ=)UNœHćśr/ĪĢÄø÷Ø]«Ż£ū0’“wX³v–&UJJZI·®×Wø’óšGˆ·Qe±Ós³n-n'6„'Ø×ƒ¬Ā Aˆ”ø|Ē;ö{ę¦F=ĻŲ ß (½@4µÉ6,|‰«ŅäZÜ=Ė~Éā#ŸflņGčd¤hčA5"•4„\ÉŌØ vöć£60*¹1ź @ųjFp UlāČџķĀvŗ"fGk”¢ū²#oYÖ2µŪ2bSž«°„Hy¤ė!„eB·a‹E¹E6$Qt?0„ė.§×ĘmŃcĄäA¼¢÷œ»ćw¬kā!PeE;u^Qö 'T÷›Ņ!»"iä#E"y.ßąoŗĆzæJń+.¤Šcˆ}–ŗ'1.©=ČAØ"7Bģ@e5 ņģ$:&r\śągjdé¾JČ͘YŒ®e^\i>€¢L@ˆ²{oõf>ŹŲäYeßéŽ9Øź\Ä÷LŽ:|Ž…¼*ф„FMb5Ų ĆZ÷źŠd;;#$„¤ČŽK]MHjhTL‘±ŠéŽGO½łłU‹pŗJ…ŲKÆTœeµŲXöģį,é3 rŠ ooūD.†|¶ļH!9eµS;×µhWy_†|2³Ņķöa–G)%ÅÅF\\\ma©å %(čüsŠœŁ#ėģ~ ” ÷ŠŪ FW—Ŗ…'W„³D8^^>1›M"„ā4¤V_*&ó r+–%%%H©Vø³|­Kww®ļu kÖ®ąūŸääÉ4ŁĻGFžĻŌ®-¦F¾_i›ųnė°f“ÆÓŗÆÖ:9ó{éĻYķ#·UÆūcõJ-,ż©œ„öą“Ņ{āy·J6¦wM¦”;2łœķ_X叫Ē+H‘‹Įt+P )ž:gø§3ā£ēWxnjä܊ƋšįxPHāł«ēųlģCxćz±ŸļY}Gż8f`MˆJRœ^37Ā|SśS1Óŗ©°ļóż®\åhĀR£&qøšģ6ć2 K㑿K¹RtŁ_b©§ I Ŗćęęn—ä„<%¦ÜŻœgÖ?ƒŖ^ŗźBīīVA41ī=ĀBƝ¶ń«BÖҳńššt:Ē"£ż6'w"#{óčQNķøT²ēšŒŠŠŚ•&‰ńöņĮb±8õJ‹‹ČĶÉ"8øV•Å3XC[L¦Šļ§[%÷ó|(2:ęϰ˜Ķčt:t:ÜÜܐRÅb±8ĢĆTbu¹WšR£īpüäÉ4»ĻžA‹ ś «Ć¦ĶėŁ°ĮŃŃröÜüƒ0 ®å`ćhźA~Xö%B‚‘R%ŻÉ|Ö®ż•§Ÿ¹ ćYĀMVņÖĢÓÓ»“üJŗĆ¹œœLĢf“ƒ—öb8y"ĶńŲ©cųųų#„Ąßߚ§ÅŁxŅ3N!„R„ņÖõ "=ݱJ”’ēž{€ŸYb;Ö AZ“hĖź5搔¼’^=o®“¼‰†Ę%ēˆxEŗ¢3’éK|ŌĖ™dÆ„z&cµ=^ĖhŁ4jÕ%,›žė¤<°Ł/’ÄÖ㑿§žÕÖpdKgć±­}ŒiŪn+LŪvoŃŃķnQ˜ŗ}|Qź¶8cźÖÉE©Ū¾(JŻ–j/$©®~444*§qćėŲŗ%‘cĒŪ_·ž7rr2mįŸuĀ룪Ŗ]Ā•’’b-šćŌ®‡^ĻńćGĻKt†„Ō&00˜—/²ÖY,EJ•_ū–?žüń‚„Q›ÖŲ±c#G°3™Jų”“LČ®kюoaĻūZļ§OŸąėÅól50Ļąįįé0Ē-Śb0ä³bÅR»ćĘā"–.ż„ū­‘cMš¶DQ¾ż~!KŁv0£±ˆU«¦Nx;Ń„÷Š“““IaaĮ9ēŚ¤IKVÆł™¼¼lŪ1)U–-’!„]¢ ‹eŁņÆČ.·7=ć$6üN›Öė>J!Ė–/²{!QPĻŹUĖiÜøy„™gĻŠ¼yÖ®ūÕįĮŹU?a,.¢YÓVvĒūõ̵+8xš_nø¾’…NQCćāˆ*“{f_³‚ņ S{äóNļœ+=Œ«-V£&‘ ä—“bō Ż»<öĖ¢¹Ż½P„‡”Ršąk‹¤b±–|Rdé3‡‰@”¾—ZI jćž{†±m[£žĄ€ ||żÉŹŹ //›Ī¢éÖķ:vŒ¤]Ū.Ģūx‹—Ģ'8(”S§sŻuķŠé’kėÖõ~Y±”oĘĻ/€ēF¾NćĘ-Ī9EQ1üE¦æĢ”ż ©…^ļIFĘ)ņņrxąž'm^°óaą€Į¤¤¬fōŲ‡ «ƒ—§7'N¦Ń ¾}ÖÓ~}‘œ¼Š_~ ?æ‚C1›M;~„ąąZ h_®¢[×ėłéēÅģŚ½?æF>ó M›¶bĄ2ožt¾üj.!!a”X½{^}å‚Cxų”gųģó٬[ū+Į!µNž<†ŖŖŒµß¾ѓå?}ĶćOŽNhHmzö¼™{ī~Ōa®Ć†>ĒÄ7Ÿēń'ļ ((ww22NQTd`ą€ĮŌ opŽėWž^Ž<óģ=„ש‚#GąķķcKšZ›{īʒ„ółćĻ ®E‰©„ŒŒSøŗŗņņ‹Ó*锌‡ą•×FšģČ{ ÅĒĒģģ ²²2čѓŽ£ģŚwīĆĒógPæ~ć*g5ÖŠŠŠųÆ” K‹F¦&źsUoWaÖ»H%ĄŒÅCA§."@•Ŗ‡@źŠRź%¤‡Š¢Hz‰ @ß<źV÷ŌcŽįECn^AmµĮ>LģŚ~]§”Q3 aę»_±ćƍœ>uœœÜl¼½}hÖ¬µ]&U!ā^ŸÉÖ­I9z4Øß”N¢Xµśgš6iig÷É'bčÜ)šŌ“CäŁöFŽ>žfĶZŪŚ=p’“ųū•ķ›ŒˆčĮœ¾gė¶$ŅÓO`±Xš÷ ¤CĒHj×Ŗkk÷čŠQUIŽŽ¾LKXHŹĘ5;v!õź5¦k—^¬\µÜ6vWW7ޘų>»woćĄĮÉĖĖĘŪŪ—šštīå  l ;F‘šzˆ‚‚\[(ļ°G_ąĘŽw°ūŸmäädįāāBhhmŗDō“KÖsē Gčѓ}ūw‘™yUU ¦c‡H‚ƒĆģśjŪ¦3ļĪXĎæ6’““E“&׊·Ļ@ e^ĢęĶŪ0ēƒļŲń×F23Oc0ąėėO›ÖķʇÜtÓN½ŸĮA”ŒxśEĀkW2bųņņs8th/EE…ōæå^ŗu½ŽĪ«<ųĮįtīĆĮC{HO? @hh8:Fįė[VFyĄ€Įø”[ß^½n”MėζĻaau˜5ókvģŲHzśIņņršöö„aƦ“ma«mz†ģģ L¦nŗq@„óŠŠŠŠųÆ"€H ɣɵ>GDKm›ŲÕN;^';Ļ1éĮcƒļŽżŽŌWö O>Ü%ųśRoŸ?\Z÷Żõ‡°qėĪKi’Z”ĮŚāøICCćü)0r]w‡ć/<Ēõ½“?ĖĻŽ}»?į1fLūÜVg³¦šÅ—šĻžæ8zō^^>̘ž9īĪ+5Ō4&¾ńŪw8$ÓüøŪIs Ķc©Q1µĆ‚[ I«3ұ¼‡Æŗ¼}!AēŸa±2Ņ3³°XTt:mK±†††ĘÕF`@0wŻ9?æ€Ź_fš7oƒŖŖt‰čĮ ×ßśŸ•‚&,5jĮ—žĮĄbQÉČŹ&,äü÷BihhhhŌl‚ƒĆxäįgÆō0œŅ%¢']"z^éah\Ę'÷Ą"o¶’µųJGCćJ ¹p4j~¾—4oS§3*o¤””””””qm“rć’Ę3nżł=Ø² ‚ńĄ­Õ30 š&,5jŽ^Õ&t:3«Zģjhhhhhh\MØ÷"™ŒŁĶæņ¶å/S×#˜Ź’Źkh\h”°5 /Ļź–ŽÉ‰44444444. Óŗo6]éahh\I4a©Q£šņņ¬»łCµŲÕŠŠø“ddœ¢°°€śgÕt<›‚‚Ŗ-c7tAQ&œO|ō"Ū^X叫Ē3Ążtļ§ IDAT @m$²½Hę9Œł©Ķ®ų– A(7#esž@ˆ@]D|ōŠKŗŽ—-V£Fᄯ&„AóXjhüųqŁ—Lš[i»mŪ“‰7”Ķ[Ö_P?ūöķāčŃtķådēߛ‰7”Üܜ+=”+Źį#ūŁæ÷•†ĘeAtī@(›@ ER ¢b%ć’Ę£Z6!č@Rø#øĮŸÄ&^o3·Źƒ‚¼UH9Ä „GO‚ žDė—ü ī®ī@g 3RX3ż ŚŚŽ©XN$QHq7s"ČįHB@f[M+Į@lc°ŠŹĄ[@ Įa«Pf0‚•Ä&°›¾_É„˜²Bf@ €ų…ؤїh”54.9ŚėO…§Ž£Zģj”°Wõź6ā®;‡Š ~Ó ŗž£§Q+¬cFæy‰G¦Q,Yņ1YY¼=é£+=Ėƒ’xūŽ%®u ć’ū"åoH&#x ĻČ׈*±‰‚ų”įĄ śįä=;;cÆC«ņmbv,`rūƒ€µŽYLҧ†bѵez×TĒ”I„X‹ÅŅiŻœs®śŃ ›3šŠŒ±`LJstźąmā6/ .¢±ŗ€r.^Q#ģŚŻŠEŁÄ3ĪwA54.šĒR£Fį⢫»EFcµŲÕŠŠØ>¤”äädb0ä;œkŲ°<ü,·p8W\l$3+ĀĀ‚ īŪd*!''‹āāŹ’vČξ4™§Ķf99™V¾o0䓓“‰ÉTrĪvf³‰ģģ ŠŠĪż‚­øŲHnn6‹å¼Ę|>äēē’—gļ}µXĢäęfSRR|ĮvUU%//›¼¼TU­üšŽDēśŠœł;X(Ź~ÓNtÅG}…¤d¹zu` X¼lg`Zō`>ą …]Ī{l&up„¢ŅŚ“?`Dz¾j7^€éŻö"Åg€…–Vč”ę;“ŸÖż’7@,³z054jšĒR£F”čŖGX ”ż ÖŠų/ńˊ„,śj.łł¹„‡×ē©'biß¾+{÷žĶųēo~HėVŲ±c# ?{C‡÷!„õ™,(0„;īx`ųˆAœ>}°†Ć®[’Ó>£Q£ę>²ŸłŸĢ`÷īķX,f¼½}éѓ'ƒ§§7……<ōČMÜwļćlÜ“–Ƈ÷Ń®m¼½}Ųµ{“Ün?ä¶mI¼ńæxłÅiDDōp:ßāb#Ķ‹gż†?lb¶Aƒ&t‰če×NJÉ·ß-äē_“•e³B(4kŚ’”CŸ£U˶vß|»€æ~CfęiŪõ 4į¾{':ś&Ū±µė~eÉŅł¤„¶Ł ©ÅŻw „oßAE<öÄ­ōģяOæh7ž÷f’ä”Õ|ņńĻøŗŗ9ĢėĄ=ČŹŠ!ϱā×o8uź’gļ¾£¢:Ś’–Ž{±öŽ[ģ½—X’XM,‰)ĘDó™D£±Ę’Ų5ĘŽ5±‹ˆRUģ½Ņ{G`÷ūY]wATVœēĻ 3sēĪ] ņŽ™y§s§¾Œ;•Ēļó÷?‹¹rå¼üūebbF‹=r2ŗŗzL’ßē\æ~QŽ_ßžMųaź7jEjj2ėÖ/Ā?ą4™™čėŠ ~sFśk+[•Ÿ· ń™Ū0I¹X–„m–u{é-„D†Ä/…ßk%ĪĄ}–5MVy™ģ Hdå^slQüŃüIњJŖ‚4œuTæ)’JÖ¢- BG–73*% ÓČdß[J÷YŠlékŽUŽ)X EG–‚šŽ‹āȑ=|6ę;llķ‰ŠzĀŽė˜æšGÖ®9ˆ¾ņ^ģääDęĢżŽśõšńŃG016##33>GŁšĻRŖW«‰›[>ūt Y™l޲s kzv €]9ž>ĶbÖ¬Æ042ęóqSqpp"''›Gī²mūj$ 'ü$æē®ŻėiŪ¦żū}Œc9RR’šõ;Ep°æBéēļ…™™%õź5-š™’ŁøŒ3>Ē1|<ÕŖÖ@†Œk×.²}Ēj…v‡G銾={ ‘—»UÆĶćĒ÷8{īø¼ģų‰i޼=Ɔ>Ļ÷Q­ZM*Wrćóńż9įķ?č÷™ĆT«ZƒĻĘ(&BŖ]«ĆF“'0Š× Uxr[ŪrŒł5&&ĻσÆ\ŁĻĆ» ¹““+:öåč±}œæpŽfMŪpķśRR’hŪ¦«ŹēzŃ £4p“üėää¤R)ƒ”^ŻēwåŹnųł{ńųq^b„š5ņ’~žó=–DKįūĆŋ¾L’ķ?č!/÷pƋ––«×Ģ'>>++›WŽO(ƒņ²ÆF"cĖ+Ŗ3+” dEDn—Ćϲ¤ūµ­ŗ sA&qA‚3Hś‚l$:Œā³óĶYŻš5\Ax7D`)h‘N_Ž{Vņ 2Ÿƒ½@{ó‚¢s¾'iŲ VV6H$ZH$Züośā"Ż7>!€ŖU=”źŖVõąĄĮ­¤„„Č_TÕxōä“H$tģŠ›;גžž†‘‘17n“œœXhš•‘‘FZZ nÕk)ÕÕ¬Ł@!°ŒŠzB§½•Ś988ahhD\\aaäAō‹ōõ ųįūyX=["Ś¢yZ4ļ@vöSāā¢ÉÉÉ&55…°'‘ɤd<[^Z©RuŖTvē“·§<°ōó÷ĀŽĪw·:>[>gĖ•ó™™Y²rł^d2é³½¬ddf’’Ä“'04xu†ščØpÜܔ?·JóöŽĘĘE‰Ąņ}%!d‘,h>µG‘Ėk§4D*€Dŗł-.<Ū[yņٟēīŌĘÕy%HĘ`–Ż8­¶Q ¿Šļ}½Ā—i ‚ 9ōōō•ŹņČdŖWČU­āAƞ²fķV®śmm¬¬l°³s¤nĘōī5ģ•Ė5ó“Ūčė)g§662 9% s3 ““”—īŠ®Ū¶ÆĘĻ’ķ?艟æNN®T©¢¬ęĖßGjhd¬TgśĀģkvöS²²2Y»~k×/RŁWžžĢ¬¬ Ģžóe “’wzz*ž5‹Ą 3 I{lmHWtźŲ‡Õk’’„±±)§éŌ±o‘V„ØŚę°s×:ܦœI_߃"•)©y[ē&LT`›¢$_Ź(÷HŖ1p§6»)g¤śÖļS$ĢE"łŒyMw+ÕK²‹c Õ]dxšóu=„B²ÜnH$߃ö)¾ó[LF*uUJ“kP.SüN#c ™K1ŒMŠ,’“£–~ĶĢLŌŅÆ šA"‘0ņ“Æśį8¢¢Ć‰‰$6.šŠģŲ¹ŽÜÜ\Sh::ŗ@^–Ņü’Ī—·źLUŠū" +7n·÷a>h×’€Ótė:°ŠkōõóŁ\?’²ž>ŒtttŠÖÖ¦_ߏiŅøRŪüū™˜Ż5##‰–}CöģŻČå+ALłöwŖWƅŽŽŽ|öwĄ ÅĻV­:ó÷?K8{ī8..•ILŒ§Mė.…>[AnܼĶķ«śįXŚ“īŠ‘‘ ††Fhkk3gī«Ļ1Šö½˜žć",,¬U¶)WĪłĘ'”Zü‡Œßquž™Ÿ½~įēvĻ’›čo†DśH,ČĶ RøN"K hi7Аłµ0²CH$IKžĶĻ^SĘšżYr%#I&žĻJļęAės~–żØv¢§>RYŸ¼·lĶ?„Wx/‰ĄRŠ(9j ,ĶME`)eYp°—.2ņ“/qq®„‹s%y]\l×o+]#{)?ˆ…y^P–‡­ƒB]\|^fUc#¤ŅĀćčŌ±æüś%>gē_m ¾LL̐H“ˆ}!{k¾ØgĖ=!/[«¹¹%zzśT®ģ¦ŌvŪöÕø»×ĮŚŚKK…l°/śnŹ'xxŌå‹Ļ䞃›Ō«Ū”ʍ³Ļ¦¦&+¦†“nÕļ3GØRŃjUkąčųf'ÜĘĄĄżG*Ķx&%%ØĢęŖōżzLZXX+}ŃŃ=¶—Īśa¤b&Xxé.#={ 2¦“fšßł^I` ²Ś 1*Ķ J$gń%Čvņßm„ÖļĢoŗēµĒ©µŁąŅ G3Åļ!2YHlR ZH˜*Ļ\«³\oš=iž£łĪļābŠ„ź€-p’łM}ßöćuēX E]ē§™‰ĄRŹ“¤äDž;“{÷ópdg?%< —O_OŸŲŲh…„µ*TF"‘pģŲ>…¶OŸfį}ęĪN‹“L³v­F8Ų;²fķjxŌU R_¦££KÕŖx>¤°t355…S^’)“­RŁļ3‡IMUļ{ĘO(æļ“šĒd?}Š™™„ĀžGČKāS¹’ߣE‹Ez6Uš4iƶ«łśŪø¹ÕFWWųų<ø³sEŅÓRŚ×­ÓÆÓž|:¶7åœhŪ¦+;öaōØÉüµü7‚Īūąč肁¾!Ń1DD„2 ’HĢĢ Ī›"hØłĶ'\×ģÓBź(•å˱üٟ×Ć6`›Rł¼fƧ_Ų"čØ|MĖ`į³?ƶø]"0ļŁA(UD`)h”ō õ$Z°±²RKæ‚ Ɔ [R¾¼«R¹””1#†§B…ŹŲŲ80bųxyöX##cĪßHŠy""ĀHLŒC[[›fMŪѰAKlmg ūöłgēJÜ»w“¤¤x,-ó2‡Ž9™¦MŪq’ž-bb"H$“iŻ…&ŪČūŠÕÕcÄšńT®T½ĄēHKKĮŠŠˆfM?(ŅsךØĒŅ%Ūńõ=ILl$†Fōé3œŹ•ņ2±ę/ētvŖČŸKwxšššŅÓÓ03³`ŠĄQ4Øß-­¼…HVV6,łcAAgˆŒzBbR}ˆččž„‡0wĪ:ø•qæü:‰K—^.Ž ō/į‚P ˆKA£¤„+øoKWG s³W7Ax ŗŗŗ8–s&''‡ ć*ōģŹŅĘĀÜ kk{œ?~ŗ*A%"°4JZzF±÷ikcU¤sÖAކ‘‘ £G}]ŅĆP w÷:ø»×)éa‚ Ld…4JrJZ±÷ic-’7‚ ‚ ‚:‰ĄRŠ(1qńÅŽ§½źƒ³AAA("°4Jl\B±÷ik#f,AAAD`)h”˜x5–ÖāØAAAP'X E-3–b„ Ā{O&“•ōAŹ4X %N3–6bĘRį}ē}ęR©“¤‡!‚Pf‰ćF‘š–NFfV±÷[V—ĀžōńēŅ՛ Ų oß BŸD0é³čź<’ßśü„kŸB|BbIEĪÖśł÷ŹĘŚū2śāC4…T*eĻž "°AP#±VŠQ1jéצŒ&ļ±³±Ā@_3cģl¬•ffĆ£b°07£g§¶ åÕ*»ņēļÓßįH…ŁŚXń4;;[kģlĖę‹AŠgĻćIųcÕ³2FA„ A""‹?°431ĘŠ@æŲūÕ¶Ö–ņÄDy³–yʳž %5°pž>}Ź„©³ä×,žõ©ééLŸ½„Fõjņńą>…Ž#;'‡]’åō¹@"¢bŹ¤XYXPæ¶;öėŽƒBūÜ\)ū=OpźlBŸ`lhH ·Ŗ ķߝŖ•*ĒĢ…+ØąäČwF)Ż÷īƒĒ,Y½‰ŗ5Ż3|99¹ģłļ^g ČėŪȈŚÕ6 ]œˆŽć×+øp€és–bldĄ“Éc)go @fÖS¶ķ=ĹĄ‹DFÅ"C†•% ėŌ`Ų€žXYšĖĒ“ļŠ Nśųóówćń:ȁ#^Ä'&bgc͐¾ŻčÜ®™Y¬Žø“ÓēIIMĒÅ)o’d—ZŹū±±¶$ūi^`iocUf’K=w‚%= AP “É8qņ€ük/Æ’d …‹ˆ-é!‚PŹH€¦€ŸŖŹ3+'ŃŠŻłŻŽHxēŹ÷œABrŗRł“Éc™žõøw6ŽfżĮāU‹µĻŹ®Ī\ó9šź†„Prj·ī< qżZDÅÄŸ@źUp­ßØ˜8•×$=$.>‘J ;ńaæī¬_’t®Ū²‡ Sg±nń,†öļž×6%•.ƒ?ćŅ՛hkkįč`‡‘””O"IĻČÄĢĘ›—Ó¤Am o¹Yߏ'rģ“/¦&Ę8;: ££MTLQ1qčéź²sŻtn×€ķpūžCī“Åł~]°œ9KÖ°rĮ >܇ģœŗ8’ ˜›šąä耖–„ؘx¢cć04ŠēßMŃŖiī>xLķ6ĢNīĘ£Zebbćé8p4·ļ=BGG›ņöčééIFfV–ęݹ†šnU˜:sKVo¢Y£ŗ^¼‚£ƒŗ::< G*•ņĖ” 8źÅ•ė·qt°#=3“˜Ų¼Ł‘E3æēóO†š0$ ©T–÷wóÖ]l­­”ž_“„¦„cėÖ¢¤‡!BÉŲ ō/éA‚ ™ÄKAcØc)lY™ RÅĢĘĘõk`okMźUxtń”ĮŌö؆½­5”Įņ?zŗŗEī’÷%køtõ&ߎIģm?īųę’×>boū²ył\Ņ33łź§ßåķöåŲi_¾9„ŠĖ§øpr7Gwščā žŪŗ©LŹÜekåķGķGn®”ū+Ż{æēI ōéŪ½#ŸĀĒ’ߎIČåSœ?±‹Ąc;y|‚]ė“õ4›ł® j„ ņē6 ÷ČĖņ³Žžoī2nß{ÄĢ©“ˆæėĻ-æC\ńŽOģm_V̟ABb2S~Y 4¶””4®žł—;ž‡¹~ö AĒwbnjŒy¢­­ÅmOnł"$ų$Ž’nÄ@_„«7ĖÆÆčāDe×¼v5ŻŖ–Ŗ RA” "°4†ZĖ2zŌČ»°ļŠ \œŹ1ćŪńčėÉĖ% ż{v¢K»–\ŗz“Ųø¼³GoܾĄg F_OO”Æö­š2|@OœŹŁĖˆ联>[öRh{ėīCnŽ}@Nm131ąś³¾Ē}Ņ‡ęźįćĢ¬§ מōĶ8ł²[j•éŲ6ooŚäq ćh\æ-×ēQč„~AAŹX CYaĖźQ#ź&•J ¤^-tt“U¶©äźĄ“ˆ(ĢĶL¼ó5³sr”ŚÆ˜?ƒ=Ÿį“07£_Ž\¾v‹wīĖĖ÷Ī;~ch’/“ĶėūÄ?rrr•śŽ°l6«ž\äēKNI%1)™†uk(dŅ}QeWgrrr‰ŠQĢ"Y±‚ņöėg{1]•źLMó‚ćģg {AAŹ"‘¼GŠ‘Ńş^ĢX¾™¤ä¤R)g.мŪP•mņæ_é™ōėŽy®ć›’Ķ凙‹pq*Głrö89ŚSĮɑ¦ ėŠ±Ms…>FķĻ–Ż’±mļ!fNĄ>Ļ“ŲŁXÓ”u3y»Į}ŗńĒŹŒūö¾üqŽBß]œhÖ°.ķZ6.ņó%$%ąy§Ąē {0ē?_>--å@4?8ÕÖVĀ \K+---…[AŠDiéDĒ*ļ5—H$ø:—/Ÿ„¤äųĤä’:C)Ŗ„ī+B) KA#$„¤’š¦œ@čm•Õ£FŌ-#3 + ź×ö(“­•„–ęßÅŽ’ŽsżÖ]BĆ£ äųi?ł/x#öbõ¢_ä×6kTj•پļ0æL™Ą£Šp®\æĶ„1ĆfJķm­ >µ‡=’ēęū„<‰$,<’k·īŹ—ā~žÉĶü¾HĻ—,:ŲYų|łå&FFEźó}adhĄsKz‚P ™LFÓ.CT–2™ æ#Ū075)‘Ģ5r®7ƤĒ!‚š2X AG€X ū¦Œ Ø_»ĘkyifbĢ'C”3²ĘĘ%0ģó)lŚu€i_„‚Óó%££†õēŪóšńæĄ…Ė×ÖÆ»RęfŒ¦œŒ0*&ށ£'³ņŸL›<k+‹"?_Ė&õYųkтQAJ‡ƒG½ørćNõ‘Q±„:°D†“¤‡ ‚ ŠŲc)huģÆX¾) s3,ĢĶäū'U™³d -zrõę]F5ņµŪ"•*’Īccm)?fäQČ…ŗaż»ch Ļ¶½žģó<‰{ÕJŌ­å®ŠęƱßR„q•ć°·µ¦Cė¦Čd2łŁ™/“Éd _;9: «£CXDĮļ¦Ī\„G‹ž„„EŲFĶóėĀ…Öæ¼oŗōyéš ‚†„ Ō‘Źöq#źÖ”u3Ī\äØ×9„ŗ¤”T6ļ:@L\¼üč ;kā’Ų{čøRūÜ\)güĪPž…̰š<‰ĻīƒG¹płŗBŅž|¶Ö–<‰ˆāšI„ŗģœĪ\D"‘ąč`§Pgf’7+qē¾āčŗ::“iވ£§Īā¬ŌgLl<;ö&5=]i¼‚ h®„k·pżÖ½BŪØc?’»„%KA4’X„.u× IDAT +hu–v"yĻ›ńŻœōń§ĻGØSӍŖ+ ÆÆK|B¾Į$„¤ņĖ” ņe„īÚM»ųhü,X¾ēröŲŚX—DšÕ„>‰¤[‡ÖT©č¢tÆü$>ZZZ éŪU©~̰lŚy€£¾¢nM7Ź;ŲacmIl|"._'<2Zå‘# źŌ ’ČI4ŖW [+>܇Nm›3ė‡It0šżGSæ¶•*8”««C\|"g.’–žĮ’Ł?¢­-Žæ Bi“Ć’~_śŹv·ļ=x£Q#-D`)‚F„ "¢Š)¬¶¶–ęÅŽoiQ½JEģl¬•ŹuutØWĖ]aŸ£­µ%õj¹cełüóŖRŃ’ĆŪX¶v3gƒ9ķHNN.¶Ö–4®_›į{2Ø÷óå©nU+rīŠVžZ慀 Wš»p™Ü\)śzŗøW«ĢēŸ aÜ'CT޵JE“““hÓ¼!NŽJõµkTēģ”-üµn+ē/]Ć÷ü%yß5ŻŖ2yģG|öń „ė†öļN\B{ąž£P®Ž¼K·ö­ØSÓ _Ļ­ü¹v ž.sźlR© [kKZ5mĄØażéŁ©­¼/§röŌ«åŽ”Ņ}œóźōõt•ź*ŗ8QƖ»ŹŒ±‚ ŸŁ¬&«ēŞņ ä§o¾x#R-™Lģ±A#I€¦€ŸŖŹ3+'ŃŠ]łĢ6”l)ßs ÉŹY§MĖōÆĒ½“1|8ö[ö{ž,Ö>ķl¬y|¢XūŠOdt,”O"ŠŃŃį·?Vqčø7{7,„kūV%=4AJ!לˆŠQĪū2G;ī}#R ²/ œėæzjVį3–‚FPĒRX‘øG³<ćϘÉ?Éæ1°]>hY‚#”“:źu®HA%@fV–šG£vb)¬ I–‚FPGVX[q†„&kßŗ)›—Ļ%3ė)nU+Ź÷C ‚ ¼®yĖÖ¹ķĖY¢K™D,…A#‰ĄR(q2™ŒØč¢½i~¶"qFs°³”ĻN%= AJ¹güTfw.HVV¶GóN”ņČX„²J¤;J\l\O³‹’z±V”ģū}ÉŚ×jŸž‘Af’üh®Ņ>å*BY%K”Ä©ķ K1c)‚P¦y ä\ąÅ×¾.ŗˆū15’8nD %K”ą«+°3–‚ eŚģÅ«ŽčŗČčŲbÉ»¤%öX ‚ ‘D`)”8u$īX ‚ ”e޾Aœ xżŁJ€Čhõ¼Š|d„>ū e•,…§®„°vb)ģ{+ėéSNłńFׇ>‰ä”O7īܗ—ݾ÷ˆS>ddķØ‚§ŁŁœņ ąźĶ»ņ²¤”TNłpįŹK„ēf/^żĘ×F”źK±VĶ$K”Ä©m„8n¤LHMKēaHÉ©iE¾fćŽōžÅŸW·Ļó8݇ŽcńŹņ²o£ūŠqEžéHJJ”ūŠq Kõn޾O÷”ćūķŒ7— yü‚.qĘļü_UšKq܈ J–B‰É{„Ā9åƒG‹žģÜøHķsrrY“b}»w Ze×7ŗ§5õj¹ćāTī®/ˆ±±õj¹ć^­r±ö+ļ›™‹V¼Õõ„{„˜±A3‰s,…§Žä=F†˜{æ‚ę۾ϓĒaįl[5’ūŅ·Cśv+ĘQå©å^_Ļ­ÅŽÆ ¼Oü‚.įu6š­ś(݁„Ųc)‚f„PāĀ#Š?yĻū2[¹nĖ*Up¦E“z?ķĖĶ;HJIĮĪŚŠÖĶR§¦›Źė|ƒ‚¹xłq Iääę`ocMŻZī4oT-­ē Nœń#,<ŠO†ōĮ/čg.’”’Ź÷Gcjb @Ll<ǽżxNZzf¦øU«DŪę‚ūؘ8ž;všęėQ©‚zqķę=tuupu.O»–qt°“·ß}š(IÉ©\¼r€sĮH$Õ«EmjJĻ%•JY°|=Ż:“¦n-w…:™LʅĖ×ń?™Č˜8t“µ±µ±¢IżZ4¬[S”mXx$G½ĪŃØnMjר®tŸ+7īą}.ØŲxŒ ©é^•ĪķZ §«[č÷+3ė)[v¤‚³#Z7ąž£PNŸ ¤c›ęXZ˜ńļįSÜyš#C*ŗ8ѱMs¬,ĶUö|õ&ēƒIHL"'7 3S*UpāƒVM™³d z±tö4ڵl\čø”4łķ7Ėū¢R½ĒR7"‚†„P¢rrr‰O(ö~ߗŒ°ų–MźŸÄõŪ÷”źG~Ų—æęž$Ȳž>eąØÉ÷öUŁ_ƒ:58“m%ę¦&¬Žø‹’ŽĘ’üežŁ±_ŽnĀ蔘š³fÓn¦Ī\HzF¦R_v6Ölükmš7ąŽĆĒL˜:‹ń£>äŠń3< }¢ŠŽ@_u‹gŃÆGG~™æœ{CäõŪ÷y²}Ÿ'³§}„2°Üļy’Ū÷±fŃÆ å©ié õ޾A*Ÿ»c›ęģ\÷śz\»u Sg1sź$„ĄröāÕlŁż/'f¬Z©·,§‚“£Ź{¤§g0aź,zvn',Ļ_ŗĘ„©³˜2q4ė¶ģ!.>QįsSv­_L«¦ ž§ēš/š?Yå}LMŒIMK§CėfŲŪY8A(m/^夏’[÷SŖ÷X"{,AŠHb„P¢"£cJ‹’ßH»÷$°šń怶Ž6'÷®'īŽa—½8±g źŌąļmūŲuąØ¼ķš»8īķĖš=¹p˜ŒŠ`Ržē~ŠQ¦LĶ…Ė×Y³q—B’2™Œ’fś×暌·ēbkmEšÕ›|9m6NŽģ^昛¾’uó,—Oļcٜi¤¦„1ü‹ļ•²Øžµ~­š6 ųŌ^¢ožåĮłc,™ż#2ŒŸ:‹¬§OŲ¾f!¾ž[™9uS&ŽĘ×s+¾ž[6 ‡Ņē “É˜ūē:ڵlL£zµźÆŚˆ·oß|1’Ū~ž$Ü ęÖ9Žī {Ē6÷öećĪ‹ōyļ>p”ó’ǽĄ#d„óšĀq¦=Ž{C˜šż¬"õ”ʼeėųhPo®Ÿ=HōͳÜń?ĢĻSʓ’–Ī„©Šż®Ż¼’ó—ܧ+W¼÷“śč”Į„^:ÅßK#77—ZÕ8°ł/<Ä~N” yÓs+_Ɩ{Ž ™–˜±A#‰K”D‰Ä=ÅćÉ#CZ4®Ļęsńhѓ]’aPļ.œ `ęŌI8ŲŁ £££ƒ3¾ż‚%«6qėŽ„žü2…QCū)”mŚy™LĘŹł3hÖØ®¼ÜĢĘj•] d޲uųų_ SŪęņśÕ«°jįĻņYTSc>1KWoņ÷¶}ÜŠGµŹŌØ^€ūņf-Ø÷ŅņÖ9u–+×osd‡ņ¾AĮ8:Ų1ė‡IĻ õõØķQy3¾å\`0…Ų÷‹ĘĘǃūČæv°³aŚä±œæt£^ēˆŽĆĪęõg ;µmĪģi_Éæ651ęū‰c8Ģqo_’SÓ0{¶ü8vzö“Æ–ŪX[2¤o7öyžäš‰3Čd2łē,„]ž’cÅ!''—˜øģmK㌾Ųc)‚f3–B‰RŪ–¶ļO`Y©‚“ŹY)Wēņø”/§°œtŪŖd„˃Ź%%§“›CbRŠR]ĻNm•ŹnŻ{€©‰±BPł¢z5ó‚ĄļŠ”M3•ĮŽ[Պ<‰ˆRŁß«Ģ]¶–¦ ėȗ޾H"‘š4;›G–TŖąDÄ5o~’éė"ݧm åžZ6©L&ćĮ£°×ų3Ū¶PY^]Åēbjœ`&$%«¼&6.}}=T eŹŪœ[©Ji]+“‰„°‚ h&1c)”Ø'‘ÅŸøĄÖźż9òœ½]uV–愿ōŸ>Čæ‡Oņ$‚̬,’’SÉĪĪęqX¹¹Ŗ_1y6Sö¢ųļ ęåešłņ‘”PnnfŖ²½–$ļ=—Tśś/ćOŸ $ąĀöż³Leż€ž9å@µ¦ŻhPŪ§r”/g‹S9*ŗ8Ń N ō‹tƂžnYYZyKģŽ„¹™‰Źrm­üĻåł÷¦gēv¬Ų°Ÿϧ ¤¼ƒzzz$%§pģō9|ƒ‚å{U”,¾z“#§ĪkŸѱ*“s•bĘR$K”D©+åūū’¼(4 240PH¬³lĶf¦üŗc#jŗWÅŹĀ g3Œ ܧėkͤ¤ä¤łY[U©WĖ])TĒ$ŚÜeėØ[ĖĪķTĻśü°/ę¦&오”T¦Ķ^LµŹ®<ĶĪęėŸę*ŌėčhÓ£cϜśFćMōŪ«”f½­Čhõ¬˜Q?±ĒRĶ$K”D½<›V\ާĄ2¦¬ŗ™™ņĄ.''—Y‹VRŁÕ™36©<Āā÷„k‹|_}==ģmmJü\ʀ W8}.m«ŗō³_Ž ³xé™< ē\ĄE¾łß<¾ūe§öžżŹū½¾(%5 Ą£AŠ‹ēqo‚ÆŽÄsŪ*ڵlLtlѱńdgē`fj‚ƒ ĘF†jƒ ¼KW®ßĘóÄ„ņ–MpÖ’Ā÷÷6Ć*9āøA4”,…)’÷¼­Š'H„R…ó'!/|š8ŒŠœ‹ˆ$95azŖ ~“SHMK/ņ}øp¹Ą1WnÜaõʝōźņBņžā6ļĻuøW­DÆ.ķTÖĖd2ś|4śµk0ć»/äåF†øW­„{ÕJlŻ{ˆ«7īé~a‘@„ņü=ź^†mi‘÷½›0u&“jе„–fX˜›binFxd4Õ*»–Ҥ$‚ ģ·Å«f+-ĢĶXņŪ„„E¼U`©®3źWZÓŁ ‚P։ä=B‰R[ņž÷hĘ2>!‰=’W*÷<įMRr Mž½al˜7‹õ0Dur™}‡N “ÉŠ¼Ü¬Y£ŗ$§¦±ļŠ •õŪöbŻ–=<ĶĪ.RÉ_z—ØTwåśmŸōį» £”ė|‰„[÷²eĻAłQ&/zšMxD4¦*ö‘ŖņĻö•Ž)HĻČd÷Į£˜šćįV„Hż¼©Nm›Ó½c<ćŠqo6ķ:ĄÆ –3īŪ_üé7t8לhŻė#BŸDŖu,‚ nWnÜįąQ/ł×ķ[5å‰] źŻ… W®©Wēņ ŲS©<¢“.…•‰KA4“˜±JTøK‰D‚µ•E±÷«© ōóÕOœņń§†[Utt“¹zć[v’‡¾ć>ä-®_ۃ#§Īņń„hÕ“f¦&ÄÄ%ąć#'}016R™9U•ŃĆś±üļm|2ńGözž ž³ż”IÉ)œæ|GNQµR:¶iöVĻWµb.ß@Dd åĖŁS­rzwmĻÜ?×įź\ž½ŗŚGæīY¼j#Ķ»„KūV8ŲZchh@tl<Žzń8,œ/?Q¤ńųÓqĄŚ·nн­5±ń ģŲw˜ūBłń«ĻŠÓÕ}«ē}•‹Wnpä”óg|Ė„1ĆäåYOŸ’˜”BDd4Žz1gÉ~ūc+ĢPėxAę,ɛ­424ą·i_1ö£AņĮWn©ŗµÜXšĖĪų'$,B^SJ—ĀŠ=–‚ hØ÷*°Ģ•JIIS<¬][[ S#Åä'2™Œ¤Tå¦bßRqŹČĢ"±€ćކ„…ŗ:ļĻ_ķ­›Qƶ­ßʆķūååµÜ«2’ēļäĒxl^1—ƦĶaæēIvž{D^īč`ǟæOgÓ® æxĘĪƚS{’fŚo‹9tģ4{“×éėéѽc[üüśzzoõ|Õ«øņŪ_2oŁ:VmÜ äāVµ2ū=O²töččhŚĒ/ßOĄŠ@Ÿ Ū÷³hÅ…ŗņåģłśóO–ÉęßMńķĻó™¹p…¼ĢŚŹ‚é_ć‡/?}½‡{§|Č͕ҿg'…ņ¼=ÆÖŲŪZS·–;«7ķā΃Gj ØĖ;÷9pċuj°~É,ŖUv•×EĒĘń8,¼Hż4¬SsSÖ/™E§ŸŹWDF•Ö„°bĘRĶ$š~Ŗ*ϬœDCwēw;"5ŗCįóŹŗ;sfå$…²ŲÄ4\z’¬t}Š×\yź’²¤|Ļ$$+ļ­›6y,Óæ§¶ūŽJĶV½Š½_·* öŚ[ģżj"#—śōčŌ–k‘›+%6>ä”T¬,Ģ µMKĻ :6Žģģ,ĢM±³y»żx99¹„GF“™•…™© 6V–Æ öŽDl\ń‰I˜›™¾ńĀŲø’RR‘J„āčPšq-…‰OH".!#CŹŁŪø·ø­Ž“‹/œĶÄO‡3iĢ0œź“SŲ}ą(“~œĶĄ^łēĻ9ļd\‚PÜFNšFÕJ˜2a“ŅĻ“GN1ųÓoŠŌĻ”­+ł U¾ūe®Żä­öˆæė_¼ƒ~“dōŃw©÷oICįeļϓޠqŌ¶æņ=MZ¢­­%Ÿ±zc#C*ŗ8Ū½ut“qq*WlżÄĘŚė·KŽS}@^öWug€UeHßnlŁ}ek6³lĶfōõō044@GG›ĢĢ,y¦rö¶L}3؂ ©ié|łépźÖrWYļwžr‘śŃŅŅ¢AŻēĒżśżDNzūqóī22³HJIÅÜTõ²šJF1Ÿ»"‚PLD`)”u–ļÓQ#£‡õ§–Gµ’†š™™ćµo—ÆßĘ7čQ1¤¤¤’+•bfj‚¹™ Õ*Ó”MóBĻ8MfblT`P pńJ‘śńØVY!p44ŠēѺ×G<ĶĪ&2*¶Ō–hk‹ĄR$K”ÄØė K»÷訑es¦•ō„ „„E½ZīŌ+äoA(«²srøtµh‰{š4Ø­TV§¦ßOĆĢ…+ˆŒŽ”z×b”šÉÄq#‚ h&XŖ`j¬Ļę_”3DjrųŗšśŌ5cYĖAĶtéźM22³^ŻՁ%Ą” £9rźléĢ +ŽAC‰ĄR}]śµUż‘P|Ō5ciūĶX ‚ ¼o.m,@ÓuT–ėčh³aŁl¼Ī×°Ž!±ĒRĶōʁåµūü¾Qń`ō”Š­¹§/Žćæ³×¹x;ŒÄ”tR2ŠÕŃĘŅĢ{KŚ7¬JŸ6µp°6+ō¹R)^ēļr,š6wCcxĻӜ\R3²ČĪÉE_W#=l-L(ogNóZ®ōlUū·Ÿ±śč—ĶH„Ļvźė²ęĒ!¶IHeשK\ŗó„Ū!ŃÄ%¦‘ń4›Œ¬lĢ ŠŅŅĀÖĀ×rVø¹ŚŃ¹‰u«•—ŸĒ•oõ~_ĪßW(ÓŃÖfÅ÷1Ō/ü|×T^ČÕ{į:wŸ×aöēŻÕ³©Ź¶—ī^åĘĆHVī=÷V}DÄ&³l—BŁō‘”޲Ž|ʼn ;ö³ę__„²†īĪ“¬Sé­Ę§.99¹$%§Ø„ļ÷éø‘Ac¾Ęйń Iņ²†bč\³ßø_·fݩӶoq Q„7“š×ļłó÷éX˜¾mä}ņ:?× Ś_YźéˆĄRͤ–ä=µ«8ҤFĢM ŠŃÖ&%=‹ØųdŽŽ!)5C”mXt"§/Ü„Cćźdēäā髜F\[K‹F.ŲXcej„ŽŽ6©éY¤e>%šĘcbRŚ'§e²ßū*#ŗ6TĒ#°×ėŠĀrŁ|ålĢhąęŒ¾®ę&†ĻʓĮƒ'qßy¢ō²ńĄ™kü6®»üėŗÕŹÓ£e ¾4ū»l—Ÿ}N/ŠONW9óū•ĻVĘ'&Ŗå„«¾ž^é\Ś$„ÜģÅ«1Š×ćėĻ?Q(ß¼ė ·ī=ÄŹĀL©nŪŽC\æ}ŸoĒ”/½¼qē>‡ŽysõęŅ32140 ’«ŻŚ·.0ĆganܹĻÖ=‡Ų³--6ļ>ČćŠpĢLéŲ¦9{uF"‘päŌYö:Atl6֖tlӜ=;”„„ųž56.ŽréźM“’Ń××ĒŃĮŽv-Ó¹] łKĮūsõę]“ņV¤_eśœ„ŌöØĘ Ž]ørż6;eŲ€ÄĘ%°ēą1žDD1bP/zuł€åo'6.ž’}ū…Āī? e÷Į£Ü¼ó€”Ō4 ō±47惖MčÓ­½Ņ˜ “›+eƼ?š `ͦŻxžČ{į9b`/:ŽćlĄ…W7“µµhP§†šGS2db)¬ ŖŲĖ9_ōąĖĮmTÖEŧŠfÜ2B¢—@Ü‘–7E)Ÿ¦Fśœ^>÷Šö*ūĶČŹfš“ J3zo‡Ŗ5°ō¹|_©lXē,Ÿ2]m•ׯ”ĆÄådē<_:ū <ŽŌŒ,L Ÿf>ż“ŽüwöŗBšu2č7F)}›‘‘•­PVŃњޭk¾Ńs½ ±ń‰jé×ÖĘź•{jŹŗó'v•ō„÷o`0^ē=|€ĀĖŁ‹Wó8,‰>1ScyݬE+INMcęŌ‰lŲ¾Ÿ Sg’›+ÅĮĪC’SSŁ}š(ó–­cź¤O™ńŻJ÷.Ģż‡!,\ž7._ĒĒ’<śzzX˜›Ėę]9źu;[­Ų€‰±zzŗÄ'$±y×ANžńgÕŸŸ?cP0ż>žDRJ*ZZZ8ŲŁ––NRJ*K×l¢c›ęģž{1zŗŗüwĢ›ŻŹÆ½rż6W®ß``ÆĪ źŻ…›w°płß^¼‚^ĄddhĄ­órlŚu€»÷)–ū=OņÉÄÉzś}==¬,ĶÉÉĶ%.>‘u[öоUSöž³=ŻĀ“½åĖ•ę²płß eŪ÷yŹ’»EćzXśų-°¬åQ]įļZŁ"f,AŠLÅŗÖŁŽ‚‰[XooeŹ„­”Źļ†<Ļś8"^©¾’u *!/cė×CŪ)•ßxX“}oź‘Š±NŁ©Ą  ‘‡ 5*9(”Éd2„×ZU•C™LƲ݊Ėf„Rk’õWŗĻ¤A­Ń~·ÖļZœŗK‘ø‡‡!a_½IĪ //._»ÅƒĒy{p“’9åĄĮc§¹rż6é™Eī;1)™ą«7¹rCyYvrj>žŲwčĒNūrõę]rsŋõ÷Eėf ‘J„ų]’—EĒĘń0$ŒīZ“›+åĀåėņŗˆØ<£u³†H$22³˜śėBŖUråƹƒ<¼pœēvŁ‹K^ūØTĮ‰Ė×Ėg_WąÅ+ģ\ū±·}¹t”»GØéV•­{±nónŽļ^GĢ­s<¹ršĖ§÷QŃʼnͻʳWēää2śĖŸČ•Jٽ~1 ÷ü¹t”Č><>Aļ®ķ9īķĖßŪö°rĮ "®yćė™··rÄĄ^D\ó&āš7+ęĻPŪŁ€‹|?q wüwĒĻ?Q<#3‹Ļ§üŠ®®6’EĀ=œ?FHšIī„o÷œōńg掋ü¹č韏Ē5yÜĒģßų§¼¬C›fÆżY«Kl\·ļ?*RŪVMØw0%Iģ±ACkäQƚZZ…Ļ5twV*‹I|TEÄ)’ŅPÕÉę•÷®č؜°%.)ż•×½ˆXűźźhćZīÕūū¾čߒo†¶Sų£ź(‘é#;)}žŪ] 61Mžõ©ów”’Y™1¢k£×y”wN]„Ż{“æ² ?ž¶˜ę݆’ų|ße‡£™<}ó’\O„†č>tƒFO¦I—!T¬ß;_ż‹h\|"ķū¢uÆÜ}į—»äŌ4ś Ž5[Óią†ŽūŽŽ#ĘÓøÓ Ŗ4īĢŽ’Ž«ć1 Ó¦yŽĻœü唪Nµ IDATÆšłČŃÖÖ"ą…c"Īęķ•kŻ,oUÉćŠp’RR>°']œś®^ŕo¾Iėf IxĆĄņ“!}čÖ”µ|EC9{[>ł0oń˜i٤¾¼mµŹ® Š©TŹĶ; ¾Ź£Š'Œ>€īŪ(ĢŚŁXóēœiH$Žyåķ»762ÄĀÜL>k¦ÆŸ7Sjan†±‘”ĀŲõīĀĻSĘć\^ń„ćĖ|ü/˜”Ģg ¢c›ę «3ģlųcęTN½ęٌłć24Č[5cjb$/ÓÕќć®}ü/9¦*Ӂ„˜±ACėæę&Æ>ÖBÕŁ•ÉiĻgL^^Ņ ¼ņüFKSC„²“ õ%ļÉɕ*%25Ņ/ µ¢į]ж<×£¢żŚÖVŲ?™ł4‡5’śÉSYµßOéŗ±}›cdP“eP%%6^=aß§Ä=ÆĖĒ’®Ü`Śä±ŌņČ[zxń KVoā‹)æŅ°nM<ŖUVymRJ*=†Įķūł{élś÷ģ$Æūöó8p䣆ö£k‡Ö˜›šš–ĪĶ;÷Yøb#'M£aݚø8•{'Ļ)”Œśu<051Ę7šłŒeĄ…+čėŃ¢I=jTÆ¢pLŀ¼“M³¼€ŌÄ8ļgų„k·äĖ<_4jh?F ķ÷Ęć«ZŁU©,…CeWåžęĻö|>ĶĪū7éaČš5TĘĘŚ+KsBĀ"^{l/µ…¹}7/Č­å^Ue½½­5s¦OĘŃĮNe}i—æ\ųU$ -ÕSóhJŲc)‚†*ÖĄŅŲšÕ•Ŗ ńÅMUfYƒ"–¦FśH$…·™YƗ„öuØ:^¤ØåėųįćŽģ=}©ōłs­ŽļĖ×CŪŸŹ?ÅDGz:ŒėŪ¢ŲĒQÜāŌµV–ÉČĢāšöÕ P:µmŽƒ ų oß •eZz}?žČÕ·Y·x{uVØ?xģ4ķ[5对?)”wmß ¾łß\ƒÆˆĄ²ŒÓÕŃ”y£ŗxūÉĆĄ‹WØ[Ė=]]ׯĶ>ĻČd2$ ē/ā`g#ßæēäč@ĻNmŁuą(’>EeWgŹ—³§|9{œĖ;PÓ­ ]Ś·R 8‹JUB›ü?mķW/ŽÉŸ)>g)æ/]«²Mjj:é¦*ė c _“;’RņV÷vVļWc?zķū—E ,kŗUĮŹŅ\Ķ£)Ab)¬ ŖXK½Ww§* “¾š3ņÅ*_Q~†fēH•ŚéźØo”¶¶ņ’_uüØwwµgąuŁqāłņ²ØųvžøÄż°„¬“C;7ÄÖRó³¢Ę½pū=Oāt‰'„†Grńź łq:Õ*ć}`ć;;×ńEééyc9{Ū»Šœ°*ą’…ā }öóŽČšÕ«ƒŹš„Ä$nÜQN˜§JŁ^ 2q܈ ŖXKUĖX_–žõT©Ģč…Icå·ŃiŹ×(ß[¹¾®śö†čėź ­„„Ų„e¾zœo‡)%žiU§Rįwd÷©Ė ÷ZŗóŒRĀ-- _.8y’&‰S×RX1cY ;[՟MžŖÜ\ÅžģģF|>…Óē‚X½š>ģ×]éZ‰DB«¦ ŲēyœĒęPƦ;NŽ8—w |9{\Ź—SŚ/'”]łū,Ļcd`@ZzMžRŸX}ąÅ«XYš#•Jåķóéźč0°Wg„Yń¤”T~_²†Å«6²uļ!>1š<¢üż‡S&ަ}«¦ļüž€|ofbRĮgļŲmm-ōģ\`›Ņčl`°<°~•VM՗ ^CˆĄRT¬‘WhŌ«—7&$+'Ōyń˜ UĖISŅ_½W2)M9³„Yö|¾ cC=…ż”©éYH„²W&0Z¶óŒĀ $€×ņ –Õ\lÜ”[=_tżņ>žī-jPÕŁöu”ÄØ-+¬ŲcY m킳«’ž‘Į;÷135)ō<øÕ‹~aŹÆ 9yƟżž'źŒ ų°_wĶü¾ČĒ„Wn˜›™āŒ©i^Қü€²j„ XYšpń2f¦yū_ ,÷:Į“ŁKX>ļ'ڶh¬ŠÆ¹©  īĶāU¹÷0ä=¢ .刌Š-°M—ĮŸaiaʶU ”źŠcõbžKšĒaŹ« ļLŹĻ¾žAŻZnoXjāJĖÓELH$‘HhŃø ﯐1ĀAxNJu­č¹+IĻ,|ÖŅ;Xy)‹‹ĆóeEöVŹÉ}Īßzõ/~W)••·µxåuo£ĀK`³²s¼ńøŠkd2—ļ>Q*73.<žśqt^±č«ĪÕDb)¬ę373åą–čėéŅķƱņćJ^ęč`Ēęås‰øęMŌͳ\8¹›}’,cÉģiڰė¶ģįϵ[Žń腒 ­­EĖ&õń;’ó—)go‹“c^¦S‰DBćzµøx•sqrtPHšciaĘƐ0v8Ŗ²o’óyIĢŹŁ½:Kø:“l\}==žZæ•äŌ4„ś3~ēńö RŚ/™ŸöQˆņĻż×ÕŖitutX³q‰Éʳ–ū<ó4;›Ęõj½Q’łKŒ‡¾~"u;qFłX-UÜŖT,ū/e:šł ‚ PĢ3–I©|:g;K&÷ĆĘBń`b™LĘĮ³×łcŪi„ėÜ*<Ļ`W§š£Rżæ[,ÜźÅŠN (g£x¦¤gpķ?­ņTŗ®š‹zgļŖ»Ųrõžā›ćqsw²šĖ>4tsĘÜD1SmlbKvxsėq“ByQŽ)©ādƇź³éšy•õMjT Y-×׈Ʀä=6b/_±ŖTĮ‰›ž¢ÓĄ1t2–’gļ¾ĆŖ,ߎŁ{/EDQ†ø7ī½·i9ŹUf6“Ģ2³lŚĻ2+µl˜e¹µœ¹g¢‚‚Š÷^LŁū÷ĒQĻ9p€3ļĻuqUļūžē½ œū}žē¾×ü’Ÿ(€¢įŅ5iݼ1McokC`-ßü"@#÷ĮĶæ%Ā"™üņ zBŸŚ¶h̦ķ{Yæe];“*p®Y£ŗ|2ēLŒMŌ§Ks!ĶXĖ—EK×r0üAž~ø»:‘™•ĶłKWŁwšNŽJū|õÅÉс©Æå£/ąß¢'ķBšąīāLVv6×nÜfßĮ#XYZä÷‚|ÄĶÅ ĻJīģ܈=ž#ĄÆŽövĢłxj±cpsuęÕqƙóżbCzÓ¬a0•Ü]ÉÉÉåģ…Ė9v{;&ŽV¢÷X/Č€ oÄŖõ[psq¦SŪ<Ó·[‰ĘӖk7n-ż+S§”…-'–ķ9Įś}'©źįˆ£Vf¤¦gqłVle£ė˜’ļž®ųxŗpłVlž±¼¼<Ž_ø9?y“µ²ĄŌԘäŌ „–ėŠXuIvméÖ" @+€čk÷éżęO€bĻć£™Čœœ\µKzėÖōŌØ„Ź;#;±|{$YŁŹŽZ~f+A‡3–żIµŌ ŖĶŖEsé3|݇¾ÄŽ5‹špSōĶČĢdśēß2fŲĄü%ĖĪĪ&/÷F‰ņĆĆÕo/„ŠŖķ[7Ė_²Ł”UĮ½ˆ­š5Ā»Šāįa·­ œ335eǚ_ųrĮbvģ eŪīyœ‚„…9ž•Ü1øoNx”Ų­4¬­­šńöĀŽÖFéœĶĆsv6Źēģmńńö*P(ēŻ×Ēį_ӇEK×rąp$±ńń˜›™įęźLÆ®ķ˜2aukĒŲŲ˜Õ‹ęņį’ęqņģNž‰Ę»Je`*66֊ūŪŖ.FT„’;™OŌųäŻ×Ø]³:KV®'üŲIbć°¶²ÄÕʼnĮ}ŗņīė/RĶKł­&:“nƜ§²xłß„EFŸHµŖ%K›¶ļ ÕųŚŽm ³’UŸņd)¬¢ŒŅIu›œÜ\Eq VÓtnZß*—6MĀ”ļÖ«}M²ż)k{»Ó¦¾źž|ŚŅ·M0ļ.ŲØTDē‘ÜÜ<’Š.=’bæ–ŻĻĒӅa]±xSXć5½\éŻŖŽFc”¹¹¹$©XJVZ¶6Öł6„vµnވßę}Īsć§ŠóŁńl]ł.ĪŽTõ¬L5/O–¬\«³MćīźŒ™©)×nŻaĮ¢eäęęŅ”U3Cæ”es?}Wåń:ž~œ>°Aå¹VĶŖ=ŠYĮO§½Ī§Ó^×JŒ[7W{ĻŚŠ£“ź‚g#÷aÄą>JĒū÷ģD’žŠCƒąÖ-™Æt¼Wē¶ōź¬ž”ąźEs•Ž1ņ™¾Œ|¦o±bŠŌĖ/ åå†źdģ’Ś¹_³e°¦¦&“}bn…T7Į !ZN,ķ¬4J¤ńtuą›ÉŹ ÆĒōiĮ†ż§ŲwL³ŅāO²³¶`Ž”A˜™ÆXIqŁXš³ųżēč?õ•mT4Ń­EĻvѬ96Øī·öŚ3mŠ,T–Ż:šŻēÓyeźĒō>-+~ÄĮĪ–e?~Éč׎ć‹ļ”{ū™˜óü~¼<źYD,*ŖšČ(ęžø¤Čė^ż,-›TšB.jœæt•g+'³Ozn@Oz’ÜZNN.{„ktmÓuq°+ūķ¶JĶLöX !Ź&­&–Ū×#Ų·2ü“…Ädõ ¦©‰1żŚ3ė•Žxŗ*÷ü²47eõ¬Q|¶x;?žZdA GŒčŚÜŸĘu'؆~š±·oäGčOošĪ‚ģ9z¾Š„¹s°µāÕgZ3łŁöEåyäXōMžxb„«£ Ćŗ•ÆŅźk›‹³n‹5•EÓ'güóCņ+pL{ć%Ę Œƒƒ]ž±Õ‹ęęy’—g%6-ż/Oüc‹¾żc#åæ—£žķO’š$%§’ų;[±k gĪ_āĀ„«$•X?{, Ii„¾Ź•ŪqÜŗŸHfvRĖv­-Ͱ³¶ĄĖŻ‘ŚÕÜiXMķ˜YŁ9“}ł;ܝģp°µÄŌĘ[÷ ŗ¢“æņå­4ڟY–$҃­4t٘¼¬zr?@p€ņŽā'ū>ĪŚŹ’­ .U-l–§‰ŠŠ“FFFŠö”Kn®ĪJgEAv¶āĻhǾƒ_Ūé)Ų_ `&{,…e”NöXŚXšÓ·M0}Ū”¬äłć¬,ĢhUÆ­źÕ(õXvÖ hWW£kūkxŻćķ¬čŅĢæŲÆ{R^žbv²(¶VLRźūé[\‚nf,mlT?$āiwē^ ‡Ž§uóFOå̾(æ4Ż_éäč@ĆŗźūķV$y2c)„(£t’X ż˜1ŗ«RK“ņ QE’5m°±.BčĀķ»÷9~Œ]’&4,’KWošÓ×IR)Ź•øųDĀ#£4ŗ¶}«¦*kTLf’X !Ź$I,Ė!s3¦ ėĄųšU“-k’SSu2īćm„xZääärīāe†#4<’ż‡Žrżęüó6ÖV¬üåkŗ“+Ÿ?/ÄÓkóŽ}d«hÆ„J§6OÉžJžMBˆ2«Ä‰e%g;„e„ jU)u@LLŒ˜ül;’ÓILN#//;k \lØUĶ®Ķü‹Ü£Z–„¤j^9ø8LŒu[Xˆ² +;›“gγk’!BƏ~Œ5±œųkń·4kTü„żBڦ{5¾ö©J,ɕK!D™TāIJŽoe„B8B;LŒłd|OC‡”3ééE÷!- #£ņÓrEMÅ'$~Œa‘„†Gqü4YŁŁE¾ĪŪ«2ė—, vĶźZ‰#//+׋Žū-„6dfe±}OØF×Ö®éCvN6—ÆŻŠqTeĆŹÕ’xéz¾m*p§Č«„O5Y +ō.5M7æ%ÆĮõ›w8Ahx$Gręü„bw¬åĖś?ęS„²GŃk(;'‡ĄŽZOm9wįņÓöws«ī¹ØøO¼…Z!‰„Š»“tŻ$–šĢāQÖ\¾vƒŠ°cy½37ÓMb™œœ¢“q…ŠŌż˜8Ā"£8xä8”į‘=vŠĢ¬,½Ü;4ü]ĄŲŲ7ŖV©Dm_üż|š÷«A@­TóņÄŲųié÷'„B}‘ÄRč®fRī܋ŃÉøBØsńŹuBĆ#ł÷Pćü„«† P“¹»}÷>·ļŽ',¢`ƒy+K jūÕĄæ¦µ|©]³:µ|ńńöĀŌTZö!„¢d$±zgmm„“qoܒJčB?¶ķ 坏¾*u”CHKĻąXŌŽE)pÜĘŚŠ†uiÖØ.ĶÕ£yĆŗøŗ8(J!„B”7’X ½sqrŠÉø‰IÉ$%§`gk£“ń…x¤K»–“oՔ]ū³fĆ6ÖoŻMāƒ$C‡U*)©iģ?t”ż‡Žęó­^•fźŅ“a]ׯSäÕ=µ×ŽD<’’IHŅl[ƒ«£=¶:zPł“IMKē^|¢”ĆB”s’X ½Óå,ȕė·šÓŁųBw‘³ē/q:ś"g¢’ĢČ(z\]ČĶĶ楱Ó8vš·æYD’ö-xi`wü}t³L^”]{#¢øy/V£k;6«}ŁBˆņNKaõƒ073#3+Kėcßøu‡vķ§Wē¶Z[}±³µah’ ķ߃ԓtv’{˜„k7±iŪŽB“Ģ•ė¶ąä`ĻÜOßĶ?ffjŠ·>Ž^ō|ģū"+;›č‹W‹ˆāŠ‘ćüĮå«×ÉĖÓé[S’˜œĀā ;ųmćNŚ5 fTßĪtiŒ©‰‰~±bė>Æķß¾…#BQ’X ƒ°“0§eÓģ9¦“ńųu¹$–¢Ā°¶²ĢŸÉLxÄĘ­{X³q»öVłpfįļ+©\ɍ©ÆŽ-t\3SS‚j×$ØvMF=Ū€¤ä¢ĪDs0ü;ö$<ņd±—ä–T^^»œ`÷‘ø;;ņ\·¶ŒīׅŖnz¹æŠæŌō 6ī×ģ÷€µ„ŻCė8"!„%%k…ĮōģŌFgcļś÷0gĻ_ÖŁųBŠ£½Ć÷ęÆß¾ćjä~õ!]ڵÄĢ“ąsĀ™³°héŚbogkCĖ& xsĀ(žYž#÷ĪüKųö•|1ćMm½Ü‹K`īŅu4ś*/|0‡ˆ³õz”ėö"EĆJŽ}Ś6ĒĘŹRĒ !„()I,…ĮōīÖ^gcēåå1cÖ·:_]KNIå@XYŁŁjÆqt°gä3}Y·d>W"v°ą3čŌ¦¦¦&äååńŚ“OYæeW©ā066¦Žæ/ZŖqJ*'7—u{Ńń„wé6ń}¶„%Oßku…άئł2Ų!]u÷0R!DéIb) ¦š—'Mėlü ŪöšĻĪż:_mŗǦķ{™žł·t0ŠZĶ{–ž”4©Ž³“£žķφ?p-r'?ż1]Ū·bōėÓŁ¹’Ž£W°4×me×ĆQēxöŻ/h=ęmVnŪOVvŽNļ'tėvL’FžŅ茏®Ī“n¤ćˆ„B”†ģ±5vų Ā"¢t6ž[üö­šaia®³{Q—ÆŻ 4ģĀ" ä܅+łēÜ]]Ų¼ō{ź”hl'G† źÅ°A½øĒīa¤gdźüūąŅ†El=Įņ­ūŲ~œĢ,õ³­„qźāU^śō;füš/ōīĄgzJ„Šrhł–½ääjÖgH×6˜˳p!„(Ė$±5ØwWŽžł ‰t2ž„«7x÷ć9|żÉ;:_MäęęrņģEł0™¼}÷¾Źk«W­ĀĘ„ßć[];m7Ü\y¦o7­ŒUK sśµkAæv-ˆMLbŻžƒ¬Ły€CQgÉĶÕžņÕ»±ń|±x?®ż‡—vgāŽ²ÆYµć_Æҹµ#B” ’X ƒ²²“ąÕ±Ćųų«ļuv~[Aćśu6ؗĪī!Äć2239züGÉĮšc$&%łŗą?Ö’±€Jī®zˆR·\ģŻ· £ūvįę½XžŚŹź’rįmf¾=‘É/怑‘‘Īī%*–Ø3Ń|µ`1‡Ž'&6ž”TķĶ“ Ō‹fˆ©©‰ÖĘ,l¬,y¾WGžļՑ£g.šėŗķ¬ŻJZzF©Ē=~ZĖ2ĪŻÉ&Aµ;YųĻü­šąźhƧ؄„dH¹ī§˜$–¢L055į‡ŁЦϲuŲB ''—éŸˁ°Hę͚Žg%wŻK”O99¹œ»x9iėŽ½‡ø«“{ é׍YÓ'?uIå“Ō¤Q@M>8’e[öņÓŚ-\ŗy§Äć„h!9ŗ÷é+#鳌j«ŪŪXóžøgõ•ā!w śc_Ž€+ąø<ü²Ģ[ÆO²d ˆyģė*p屯¼”w’XŠ2£ApÓŽx‰¾\ ó{ż³s? Ś`ڤ—xqä3OÅD”ZjZ:ĒNžy˜Hć@X$‰’ōrļoaÅß[°“0Ē˳U*{PĶĖ?üżjP«ŽU*cü”“Yp°µaü ¼8 ;öęŪeėˆ8{±ŲćŌņ®¢ƒč„¶5ōćO¦0žÓyÄ=ń=WÅŻ…Å3'ćėUŁ@Ń ńŌ0ź ž3Ø”¶ Ś£‚N@QÕ·bćĄ‰‡_‘@2ūYīHb)Ź”©ÆŽ!<2Švī׳½$§šĪĒsųö§?xmÜpF>Ó'GßWVl\ēßCG9xä‘'Ī”j¤6¤gdrįņ5.\¾¦tĪŚŹ’Z5}š«A€_ üż|Øå‹·&&3į466¢o»ęōmלż‘§ųfé:v³ŻĶK IDAT…/r?(’Ó­ė!J” ›7 rłwüµū '/\ĮŲȘ†¾ōmŪ\ś ”Ö@k h4E1óhH.@‡‡_$‡€Ąæ’™®’ŠDqHb)Źccc}ó mū>OōÅ+z¹ē­;÷xēć9̜=Ÿ^]ŚŃÆ{Gŗ“ĮV®WYŁŁü“d5?/YÅŁ —5JPʊԓtŽEįXŌ™Ē-ĢĶ©ąGóFuiڰ.ĶÕĆ»Īī“nDėAœ¼p•o—ÆēÆ]”dēØ~ˆmddÄW“Ēā`kčĻH¢8ģm¬y¾—UB‡jŻ~µŹCĆ_; óĆ/€T`°ųød øD!Œ€ęĄAU'÷żš¤wTEW„÷Ä?HU:žŽ¤—˜>y¼"‚ė7ļŠaĄ(nÜ*ł>«Ņ055”~Z4©Op€~5ØQ­*ĪN2£Yž9‰5¶±vćvΜÆxæ“*¹»Ņ¬Q=Z4®GÓĮ4ØصYŸ¬ģlģ}šzMܞ:/Šużī}ęÆŲȒM»H}l/ew¾xm4=[£B٦żį Ÿ>»°K6=õŽŠ 0ÅģdEsX,¢ ‹xHKQ&K€s®ŠyšīĒÄ,†'Y˜›ć꼌›‹b끃½’,_hąØDIœ:wA‘dnŚĪ¹ W ŽN˜›™QƎ?!MŠ„]!Ķ`nfV¢±ŹJbłHjzOœ!.1 /WšÕĀŌäé.‚$DIIbYaø#~ÕÓ×MMLŒ±·µŹ’ļĤTrsõŗ2(ų ųHŠēEA²V”YµkVgļŗßčõÜĖ\ŗzĆŠįŠ–%7nŻÉŸI•–%åWPķšծɌ·&p:ś"k7ngõ†­*ÉĢĢŹ"<2ŠšČ(ę.ü[kڇ4„s»ŗ¶)×Kg­--čŲ“¾”ĆBC3Ść€€VŖ:Ś[ćW݃źU\©ī„ųŖāį„‹£-.N¶Š:Śŗ×?;'‡Ųųb’‰O&6!™wāør#†+7cør#†óWīņ ¹Ō-¼š<üšbó'ū2…žIb)Ź4o/¶Æž…ŽĆž…Š…ĄZ¾NöeśäńłIęŖõ[õ¶ĻW_’SRٰm¶ķ ĄÆF~’ҬęR,E!Ź ą9`2P§4yøŚÓ²”ƒ«\»*ukW„Z—Rhjb‚‡«=®ź{ŃęååqłF 'Ī^'źÜ ŽD]&4ā1ń%ŖĪnÅ3¶ĄW(ͬ’ &ŠOKQęyVrgĻŗß;iė·ģ2t8¢‚{2É\ōēZ~žs5™†MėΜæÄ™ó—ųö§%ŲX[ѵC+†ōķF—ö­¤"§B”MĄ+ĄD DĖN*»;Ņ­M0m›Ö&¤‘5«yh5Ąā022¢FU7jTu£_ē†łĒĻ^¼MhÄv:ĆÖżQ܏+v¢ŁÅŅŲρo€…@жāŖIb)Ź;[–-œĶgsä³¹?–«Ŗž¢ü ¬åĖ—3§šæŽdѲµ,[»™ØÓŃ$%W¼ßM)©i¬Żøµ·ć`gKŸnx¦_7ڇ4«°mM„¢±^Žœ‹óB###šÕ«AßN éÖ6˜zžUĖüVߏųūVfōąÖäęęqź [öEń÷öŽž¼Rœ”¼QĢ\NE‘d.J½öVØ&‰„(7Œ™>y<­š5dģ¤ܼ}׊!‰§„±±1c‡ bģ°AłĖe—­ŻTfö’jSbR2KV­gÉŖõø¹:3ØWś÷ģd谄āidb†ņĄ­8/lģĆ3=šņL¦ZYŚj(ĘĘF4ö”q°Ó_éƅ«wY¹9Œ›Ā8qöŗ¦Ćø_S€OPģĆ4lė HŖĀŠ2[¶0qń‰L˜ś1ėžŁiŠ8ŒŒŒH½aŠ„a=J2—®ŁÄåkÅK2ŒŒ7b0~5Ŗqżę._½Īéč‹\¹~“œœ\E¬;ś¬ +„Š© [fu¾4}ƒCz6c°ŽŌ{ >ß¾p‹ß’:ĄO+ö—P¬ÕDē€7Mŗ‰ģé$3–¢\rvr`ł_²iū^^›ö·īÜ3tHā)õhOę“7^äŠŃćŠå¤›vpūīż"_›——Ē¢„kXžćWLó\žń¬ģlnÜŗĆés9{ž§£/r&ś§Ļ]$#³āķõBQ@Š}5}A£:Õyż…. īŽK‹’µ•*kz2kŹ`ŽŸŲ‡Ƙ»x+Qē4zČ[Ųl@Qé‚.ć|ZHb)ʵžŪŅ“ļ~ņ5æ­X'{/…ĮÓ²IZ6iĄ’>x+?É\³q;wīÅØ}]vv#&Leß iŖ(\`fjŠ·>Ž^ōģÜ6’ڬģl.\¾Ę‰Sē‹8ĮžCœ:wÜÜņ7»)„B‰Š$g&“ 122¢cĖ@^{¾3½;<Żķ—l¬,=ø5£·ęß#Ń|ńćf6ķ>®ÉēĀŽ@gą ą3@žŽ–‚,…år)¬*‘Qg˜śŃWģ?tTo÷”„°¢(99¹‹`͆müżĻ.īÅÄŖ¼ĪŃĮžķ«¦Žæ_±ĘĻŹĪęä™ó‹dρ0Ž įA‰Ź“—ZŪFĮ¼Š§½Ū4ĆÄX žQ^ČRŲ2!žæ"—½ŃÆsC>z£?ujyé>²rźHŌefĢż‹öžŠō%Ē€±€ž>HV0’XŠ “X>²iū^¦~ōÆh¼”»Ä$±ő““ĖžCGX³q;’³“˜Ųųē+{ø±ūļÅTóņ,Õ}.]½Įį£Ēټc;öŌ{¢Y£J%ĘźĮšķ±²ŌJÆn!„IbiPꥧ(f*‹|"×£]]>ž4†AÕtXEq÷æ^Ć®ƒg4¹<Å’Oā>Å&‰„Øp‰%(fq~_±ŽgĻWśš®M’XŠ’ŹÉÉeOhk&™qń‰ųÕØĘ®µæāźā¤µ{Ž¾Č?;ö±u÷BƏ‘““£µ± ćā`Ljž?ØZ|?Bķ’ÄŅ`üQōZlX䅾•™3ķYŗ·­«ūØ*ØNńĘ'K9už¦&—‡Ɛ½—Å"k•D…dfjʘa9±ē/śõŠxļ»zcbbLĒÖĶ™’Åū\‹ÜÅε‹xeō³$ÜĖÖƚžŪ2oÖt.†o%tóR^ż,nŗėq–‘•ÅŠmūh6ņ †¾ūGĻČ`!ÄSĖÅ^Ź…@”ŁĶąīM8³ķs^ֳȮ ęf¦¼9¦g·ĶbP·&E]nbFy!Š%Ė¢RVT8)©iü°x9³ē-"1)ŁŠįQ,f¦¦tm¢·ū5 Ap³Ž“ݳrŻ6lŁ­“ļÜÜ<¶†ekčQŚ7®ĖŪ/ ¢y°æÖļ#„eTU`5ŠŁ0µ<Ż™?s$ż:¹BV”P%7VĶ{… »Ž1aĘļÜøWŲå/¢hó pK/–SņųCT(›¶ļ„A‡L’ü[I*…(SS:·mÉOs>āJäN–’ų%ż{vŅYńŻGNŠ}ā Ž_°D'ć !D‚bék”IåČž!œŁö¹$•zŅ»C}ŽoüX“ŁĖ  öĆ>Ķ$±BōÅ+ō6A£ßąśĶ;†GˆrĶŅœ¾Ż;²ō‡Ł\‰ÜÉ·Ÿ½Gp@ńŚ hjފ ü“v‹NĘBˆ2b °pUwƒ|õæĶ‡½m‘ū’„9;ڰjŽ+ü6{¶Ö–…]ź ģCŃūRØ ‰„(×223yÖ·4ī4˜ūT7B”‚½­ ćF āĄę„:»Ē‹W‘•­ŸJµB”gSU²Ÿ²Y=_Nlś„a}[č/*”dd’"7̤^į1l€æ€—õUł"‰„(·Ā#£hŃķY¾œ’+YŁŅjHˆņ*61‰ē/: !„Š&#ą+`ÖĆWiDæ–ģžs*Žžŗ+ &4W³š‡VĻ`Ō Ö…]f,@ń’V_A¶śŽĻSQüæž äé-Ą2Lf,E¹rėĪ=ŗ>3ŽŁóIR)D3®·ū©VŁCĖŃ!„A˜‹)$©tv“aŪoS$©,ć^” ~z;›B÷]NAńAķ¬ōÓDKQnģ܈f݆ičP„*|ńś(¢V.`ź ƒqq°Óųuuż|ØYµ²#B½0~FØ» FU7¬˜N›&µõ•(±nm‚9°rzQK•_ęé)¤2MKQ.,^ž7żG¾JLl¼”CBĀÅĮŽwF ęÄŹ|ńŚ(¼+¹z½…™_N£§č„BgŒPĢ\UwA£:Õ9“fž¾ņ ­< ®ķŁ•ļXÓ³°Ė& {.%±e[nn.Ó>ĖĖSfJ!ŹkK ^Ų£Kæå§÷_#øfu„k¼<\Y5{M‚jé?@!„Š®ŁR)“eÚģ\27gĶWsˆ²Ć«’3{–¾KƒĄj…]6˜®§Ź$)Ž#ʬ¼¼<&MŸÅKV:!D ™š˜0ØS+ujőÓē ;Mzf&5¼iߤ.ff†Q!Jė-ąMu'Ū4©ĶƟ'µWO”qnĪvģśc*=ĒĪ!4₺Ė>bļõYŁ!‰„(“ņņņ˜ųĪ',ZŗÖ q˜›™PŪ—š>ŽŌ¬ī‡» ī.Ī89:`ffŠ­µAć¢5Ŗy±ūļÅ|0eÖV²DE!„ ¼¤ź„¹™)ė¾NZ^zIRĆ j,;¾°™’©@=†d0’XŠ2aÓö½¬Ž°Uē÷ iڐżž Q½ ßK!„J `žŗ“ß}0œvĶüõŽ(+zwØĻ'“Ŗ;m,Ŗź- ‘ÄR\Vv6ļ~ņµĪļÓ¤A0’žĪN:æ—B!*SąEY”Œčג‡¶Ók@¢l™śRuk¢ī“š <÷ŖŠoN”?ž¾Šó—T–k֚ą?Ö/™'}'…BQ3€ŖNŌšfį'/č7Qęńė’ĘXÓSŻ%7ō’ŽIb) *;;‡¹ ×é=<Ü\X’Ēd#½B!Š­!š®Ŗv6–¬YšŖōŖŲZ[²ü› XZ˜©»äS ¶CŅ+I,…A­Łø·īčōß~6Jī®:½‡B!*$SąGŌ“čūīƒįŌØź¦ßˆD™\Ū‹Ļ߬ī“%ŠæO²ƒ¬$–Ā ž¾R§ćܛ>Ż:čōB!„ذŽ©:1 k#žŠJĻįˆņąõ:Ó£]]u§ŪcõŽŽHb) ꦍŪ:r\gć;:Ų3ūĆ):_!„š/н•J*¹9šÓ§£õŽ(/ŒŒŒųł³Ń89ŲØ»ä@%=†¤’X ƒYµ~‹N›©OóŽö*‹· !„BåKĄJՉyŒĄŁQmŅ •ŻłāķgŌvD±ß²B‘ÄRĢęūu6¶½­ ƌ~Vgć !”™ĖÆ!D…Ńč§źDÆõŲ­±žĆåŃŲgŚŠ±e ŗÓ/jū“”G*7" ”k©ié9vRgć6PŖĄ ”gÖ’Ģõ»1äää:!D1Ž:Ē;ßżjč0Ź`®Ŗö¶VŅZDhĢČȈļ?zžŗ=§“ž‘õäic`Š=—ŗ[§G’X ƒ8xä™YJß`Z3|po-„PĶĮÖG;[C‡!„(¦›÷bµ9œ3§Ķ ą@eå•÷'öĮÓŻQæŃˆrĶÆŗ“Fuåó6Ŗ:Ż ¬ŃoTŗ!ė–„A„GFéll’š>Õ®©³ń…B”VGCPJfĄ{ŖNųz»óźČĪzGčKNN.ń‰)J_I)é„{Ś„^…=˜IÉÉdĘRÄ©³u6öžŻu6¶B!ŌŖ« H)Œ|T˜ó޳X˜ĖGēŠ*śŹ»NS:Ž“^ ÆQYXc¶Ö–|śę FMżYÕé `°¬T7)*Dv,ʟ“g¢u6v—v!:[!„j•÷éB!DyŌĮŠ”‚10IՉN!A“mźÆēpDEŌÆsCšÖ«”īō›śŒE$±zwėĪ=Ż“Ź"nB!„Š­@ĄĖŠA”B@eåæBf™„(¶ūŖ;ÕE’ŌrKv ½»}÷¾ĪĘ®]³ŗĪĘBhOrjļ/XBŻZ>ŒźSŽ·e•MGNŸēĻĶ» ¬įĶøŻ N©œæv‹+7Ņ«MS:6­očp„jåżYålQė&µhٰō•ęĻ_¹KŲńKDž¾ŹŁK·IKĻ$1)äŌtĢLM±07ÅÖŚ sS¼*;QŪ§2ķšłÓ8Ųcc#„ńRÓ2łhŽ:•÷ iäGļšŸ‰ŗĢź-GTž7¤-¾Žī*ĻŻK"4ā<ĒN_#*ś‰Ii$&„’–žEvN6VXZ˜aeiŽ›³5«¹Ņȏ6Mjcei®6žżįŃlŚs\éųäŃ]qw±'77}įē8pō<§®p7ę©i™$„¤ć`g…„…µ|*Q·vUśvn€—›ŅX99¹¼7§`‡Ųųd•ń\æĒ;³U×£ŖZŁ™W†ÆrĻöõØP•ćg®«:ż&°»X–!’X ½KHLŅŁŲ~5Ŗéll!„ö¤ed²xĆś“m&‰eöEœ$āģE†uo‡›“ƒĘÆ»pż‹7ģ kĖFå>±¼Ļā ;ØVŁ]'‰åęƉ¾v‹ń»ci”žÆ(TyŽ_YE?A%oŽ)Ż÷ĪŽ§˜öÕjĀO\.Ńėż}+󣛃čß„QćÖVęü{$šGĻ+½&°¦g±Ė9‹¶²lĆ!„ć®Nv*gk/\½Ė;³W±n{$Ł99ßēG[&éŹŪ/öĄŌDyūRxŌ%¾XøIéųąīM8už&ćß’čĖw ½Ē£?—ÉŸ-cxß|óž0œlņĻēę婼‡*·ļ%ؽ¶Y=ßb'–o¼ŠU]…Ų(fĪ/{Š2@–Ā ½KLRżDH|}¼u6¶B¶ƒĢ\ų'wbć‹õŗzµjšĮKĆx¶k[EVq¬Ły€™ ’$%=ĆŠ””W¦@CQ /Ŗ:čW݃ŽJ^ ö˟’”Ė _–8©8{ń6&|ĒĒóÖ+7Dõ÷öé ·ˆ<}U£ń“SÓYæ#Rå¹żZ*µWŁ~ކ}>`Ķ–#%J*b’yļ«5ōó5Yٚ±tż!ŗ<’e‘IåćņņņXņw(½Ę}MfVvIĀՉa}[ąUÉYÕ)#`”žĆŃI,…Ž%%ė&±t°³ÅŃŽN'c !DyąS•7žėKßvĶ ŠØųšö†¢„¬aŖN¼:²³ŹeؚŲzš·æXI^^^ibĖ÷Į7±yωĒwoŠ£½µŹėUĶ@Ŗ²~Ē1RŅT?P7“`āz?.‰ꑔ’®ŃŲEŁöļI¦}¹Zćėē,ŚRād64ā殎_¢×ź‚™© ćŸS»råtUi¹ Z”o™:×ÕÅI'ć !tļpŌ9fżŗ’į=;0°ć½hļÅ'ņŅĒß(‹{Ä˜ēҤN-¦@lbæü½•ż§øq/g{[źŌ¬ĪØ>©_[m5>µfžø”³—Æ3’Ż |³t»ĆO’–NuOĘōėBVM8ķ_.YC䣋deēąėU‰śt¦Wė¦ĘŹŹĪaé–=lž7œkwī“ž‘‰½5ž>^ īԊNͳ#É©iŒ˜ž%nÜ`ņW?ake Ą'ƌ$Č·ļĶ’Ū÷昳ņpę,ł‹°SѤ¦g¶d.WnŻįķ¹‹čŪ¾/ōžo•bRJ?żµ…½G£ø~ē>y€¹™)~Žž ķŚV)fMĢżóoöāēŽ`žŹüyŠŲ„X˜›Xƛt£i’ZA­ŪsˆÅė·óŽŲ”4ōSļ›eėŲ~‚ENĀÉŽ¶Ą¹•Ūö³bŪ>®Ž¾‡‘Tõp£O»ę ļŃ^å²:u®ÜŗĖ¤/ąō„küęoUÉre ' zm&‰„Š»’>m*г“Ņļ!D9QŻÓ=G£°µ¶*<†ŸŒfĻŃ(,ĢĶp“³-pīŠ‰³ģ9EŪFĮ$$„Šiü4®ÜŗK` ojU«‚±‘wbćY²i˶ģaå’¦ŃīįõšŠ:™½GOŅé„i¤¤„S«š6V–ü{ģ»ĀóÖȁ,\³{kjT©D|R2{ždgŲqϜœ?c˜“Ć )Ÿ²/ā$Žv6ųzUĘĖŻ•;±q¬Ūsˆ•Ūöóöóƒxwō3ääęrå¶¢‚öƒäTnŻĆÜLńk;=SѲ)ņģ%"Ī\ąšÉhnĒÄQÕĆgÅŹÄäTö"ŲÆzž{IMĻ ė+Ó9sł:.NT÷tĒŹÜœŌŒL¶Œ`ÓžšüŠćĢ•ėģ9E÷‰ļsć^,MżØ]Ż‹+·īņ×īPžŚŹŸL”{Hc®ß½Ļž£Q¼<ø§ŹńĪ]¹Įž£Qde\ŗöŪʝ\½}ĄŽųūx‘““Kų©hv9Į”głį½‰ǜ•’güh ģµŪ÷11Q,ęŅÕļŖ źńŅƒ~•kƒ»7)°'Æ8īĒ%q0ņ¢Źsꦓlč‡W%'œlpv°!'7—ōŒ,“Ņøy7ž½‡Ļ‘œŖ<+x2śa'.Ѭžož±±CŚŖL,ÆßŽc_ų9Ś5Sß&%6!™­ū¢TžSµĢvĆ®c*Æ522¢~€7µkTĀŁĮ'k,ĢĶHIĖąArq )ģ?Ē­{ JÆĶČĢęĻõyw|/µqŖāļ[™ æ*ø8ŚbanJƒTīÄ$~ā2 RU¾ęHŌe²srņ@=ł’7''—ÉiJÆ351ĮĪÖRå˜źŽk¢’›ŻŪ«ūs‰$–B-»ėé‹Ćٱ¼®ĀBxø8įē]…Ć'Ļ‘———’D>üT4–ęōlՄƒ'ĪxĶ£’nÕ €å[÷råÖ]¾Ÿö CŸŲWzü ½^’Ÿ’ŚRģÄIF«A|9il~ruį ķǽ׿ÆįåĮ=łxĀLŒIɾˆ“ōō‹×oĻO,Wm’—}'Ö½=sŽ—?Ąķ˜8zæ>“Æ’ü‹1ż»āīä@ä²ļ˜>’węÆÜČņYS VQł:#+ O7g67“j•UWo|ä×õŪ9sł:/ōīė“ĒęĒ p76žžÆ}ČÜ„3n@7\Kō3ՈcĖ¾ĆŻłæ}į§¢éżĘLf|æ$?±,©«·ļ±bÖ;tnžß¾·Ōō †LÅŠmūxq`wśū2Āü¼«ä’™9—µ»BŁżÓ,\dKE1ŁM „¶©ŪæØ‰}aēTĪVśūVfŪā)T­¬ro]¾˜ų$Ś=7‹Sēo* øP ±¬ąM“ŗ>*÷q.ŪpØŠÄrÕęp•{ķ­Ō­ą’ŅŲ„dNFßPŗÖŹŅœĶæL.ō> X­1öŻEüž×„s#4ÆSÓ)$ˆyŒ vJ*ϧ„g2éÓe,\¦\X5#3›„©ø:ŁafjBÜŃłΟ¹x‹Ą®Ó”^×°N5ƙ”qŒ„dß IDATÅ1vH[u‰eĖĖčäĘ:"{,…ŽisiČ欬JžŌHax­q?>‘ ×oå ;MżZ5©Č­ū±Üŗ›īą‰3ŲŁXå/o½tSQŠ”o[å=…-ė0~Pł—¼mĄ”ēHƒkV'°†¢`Ųäįż $imÖĮĖƕ«·’ėŪ»%ō&ĘĘ|šŅsĘØģźĢč¾]ČŹĪįŠ “&¾{{|‘I%Ą®°ćńŽŲ”āEr?¼g2³²9]²b#/źQ ©hT‹Žmšqįśm®—²ŻTėA’JkK ¦bfjB€oe•ērssU7SvS»’£x{ŹY +ōĪRƒ %an.‰„åY«śAqšÄYFöźČɋWHKĻ q`-kxcceɑSēé×®į§Ļ+–§ÖŹżČ^łsónŽ›’ļĶ’ s3ŖzøRŁÕ™j•ŻiÓ°;¶*q•GUˆŒŒŒÅį5”ĢŻŲx|z©®$’hIZj1[^›«ŒM•”“ōB—øVru*UĮ[Õ*ķ³‰É)%ĄÉĪVåq[Åų1 Ŗ?Š *Ļż+UŌ½tK¶ļÅŖ.póŻļŪłc]ØFc܏S=Fb’rfgcÉŠ^Ķųyå^„sĖ6¦o§†JĒ—o<¬r²i½Ō ØŖq<ŪœR¹wRSc„å·źöD>ÉÓ]óŸMŖķ²ź™Mła©ņŅ] +`”ī§Ib)ōĪŹR73–&ƚWB”=®ŽöųW÷āP”bĘņČ)Eƒė&A~˜ÓŠß7Ęņąń3€bÉé#nNśżkv‡ēüõ[Üøƍ{1ܼĖß{ńĒęŻģ‹8ÉwS_Öó;SČČĢĘŁĮŽ Ļ¾ŗ©ypķBĻ—†‘‘&ÅØœŖĶū‚¢8FiäQųVŠ'—÷ «½²ń«īAƒĄj„#ćaq­'­ś'¼Tć䨙q7¤­ŹÄrŻŽ$§aokUąųŅõՎ£JF¦ź%µŽžēĄŃó……\$uļéI6ÖŗłühhmšŌ¦²»£ŖYaK °IļA•$–Bļ,t“6;§ģ4¾B”Lėuųqķ?܎‰#ģT4žn.TvUģIjT‹ł+6’‘•ÅĮgp“³”NĶ’>&„¤‘G][6¢+ Œ›ž‘Iļ7fņē?{ųāõŃXėčWal¬-166āēśźżŽŲY[‘¤žį÷¹+7X¾u/ŻCh¢©Ū1ńxØhż”œŖØ“č¢aA u1Ę$Ø®cń E1ćįģ EÜō¬‹”Š6U³{ŕ]Ź(%Ń“^ źxsģ̵ĒÓ3²X·#’żZę;{ń¶Ņu ˜åS· ųÉ ĶB{LLŒéŁ®žŹ@7ŹQb)ö„ŽéjĘ2SĶB!Dłńų>Ė#§ĻÓ$过M‚j‘‘•ÅŃÓ8rę-ė˜”8åSšŽ˜¤r\K sųū’——Ē­ūqŗ}jŌōŖĢŲxŅŌ,uż{ĻA|zbɦ]*Ļ«Z¶V\¾U+ŸHüƒd•ē÷bīŅuÜøS¢ńõƒ|RųiŌ†§›ā!ĖĆ𾊄«9¹¹œŗxUå8g/+W„8õš¾U܊.ŒR˜²¶’ŖØpĖ`»µ)~Õč'éņļ‘Q!kļĒŖ™m|rvréÕ³•Ļön†ź%¤Śųł£NaļéiQČß;Õ=™Ź(™±zgk­zNi©[z"„(?Bźbllý‡¹rė.cśż7!Ņ8Š###~Z»…“ō Z7*šZ?oOĀOE³vē<Öļą^|"»Ćcia^źä£¤ŗ¶lÄĘża¼7’w>}ed‡lI)iü“v I)4 (X¹öўİ“ēØW˧T1tkوķ‡"yožoĢ™<K‹’ö¼ßŗĖowbblLĖzŖ‹šeöļkhŻ0ˆŖ’Ł~œ‡XĆO7EōGEx~Z»…®-åļūĢĢŹę³_VpķŽźź±‡¢Ī²zĒæ źŌ*’Xüƒdfżŗ ###ŗ“(Łl“CžŸq4=[WøĪŗbt0tŚdkmYŖj°Ø+0óL¦8Ś—ī3P`MOµē†õiĮŪ_¬ 5-³ĄńNs7ę®öäåå±t½źj°źŖĖJUb iäG_•¢/ģޱO³N!A˜š˜ØźŸėŌ.é?Ŗā“ÄRč£Ž–*„¤h¶ł[Qv9ŁŪRĒ·:ö Iąņ\ķńńōČ?÷db9apO6ģ;̘¾įŻyæįé挣­ ±‰ID_½IFVS_¬³UEڵ ķ å×õŪY±m~Žž8ŚŁ’ ™čk7IĻČdTŸĪł-LiÕ@QŌčķońķņõø:Ś3¶W†uo_ģ†÷襏ķūY¶e/ķ>ˆw%7lmHNMćÜÕäęęńęˆ%.ącanFćaÆćē]7G{®ßįāŪ˜›™ņŁÄēóÆkčļKǦõŁvŒ:ƒ^& FUĢĶĢøpķ9¹¹4ōćČiå}[Į5«3īćołčĒexyø’›—ˉóŠ"O£ūv!Č·d{ćZ7ØĆÆė¶3rʗxWrĒŃΆw^LזŠ~ńÓ+Pß÷”jßÜ óŅ4¶V“XN{¹·ŹĀ8Śņؒ䓽"³srXõOGtāšńK\¼vOéµuż«Ņ¤®śWź¶ ģ֘I£ŗ–.pƒ-ś²?\e„ŽVHb)„jN%jŗ]“X©(D¹aanFæv-hØÜWrtæ.ģ W”Čr†nTßĪ=}ssS„,Č·”æ~Å›wsōĢb‰{Œ…¹ĻõhG÷–•z j¢EŻģŌ¬“hU?(č“:5«_ ‡œ©‰ +¾x‡æv…²ķP$WnŻ%!)[kKz·iFVUöąlģĻŖ’½Ėņ­ūøq7†“Œ’–ҶnDÕJŹmP@‘¤÷k×¢@²enfŹŗÆg°|ė>ö„Ÿąźķ{ddfįdoĖąN­éŪ®9ŻCJ^sż×3ųsón?CLB".Žö“iX‡1ż”“¾„Ÿ½ĶÆė·sąŲinŽ‹!77—[2~PEÅĖŻ‹‡Õ¾Żķé×®/ģF\b2«wü˵;÷Č˃.ĶЧmsś·oQāøū·oA^^öęvlé™EæHTø6#ķšk§‘•Źć)išW|¾tż>?.ߣt¼žUžķ­üsā‘qCŚ*%–®;ČĝX¾ń°Ź×½8“]”ńØ["›’Ŗł{ŹĖĖcŚW«y²¹­µÓ_é£ń8śVŚ¢cšj×Ģ_]bü®— JIK”wŽ*Į–Z|¼$–B”ö6Öü:Sõ~Čē{uäł^Ŗ›ƒO¢ŗĮö#^®¼3jp©ć{ܛ#Ø=WŲ½Ÿ”{ÄŌĄĮ[3øsėbÅŠ±i}:6­ÆtüŻŃźŪœłzUVłglafVčŸqiŲZ[1ixś…š›™ņŅĄī¼4°»Ņ9_ÆŹfdż}Ŗx/ŗX®: CKthYō…ā‘ ·æ2¤‘_ŃiĄ·šź”®Ž„eCå‡iŖ„ŸøÄ •k¶¼:²S”‰e«ĘµšõäĢÅ[Ž>~‰čĖwX±I9±“¶2gXŸĀĢųŖéWyįŖņģ§:÷撘õƒņ{ ņ«R¦Ė»1Ŗ‹†i[!’BŌ(k$±zē䨺9xiÅɌ„BCć?Ēį“ē ½ĘĘŹ’ĶÖSDeĻū –°qX‘×\ü•¢ŃÜŗ=‡ųpįŸE^÷Ķ”— “«ÅbļéHgiaVź6#Ō­­z¹ėĢo’¦~€7uż _{ćN_/ڦņœW„¢÷ˆŚ–ÉŸ.+p,//—güʝūʟ•w/zļg€Æ'f¦&J=(—m8DļõеQ”żtSŅ2ųą›æTžÓä=郺vE7īÄńķoŪ=øµNūc6Æ_cc#U…’' ^g7×I,…ŽŁŪŚ`bb¬õ„IÉ)dfeanf¦Õq…ĻĢńĆH+b¹£ńSŽńµgū(ž¤Ž…¹o<׏g»µĖ_ŗjH›ÖÓØČ‘‡³£¢©°Z¢hÜ^a4©ėƒ¹™v>7ŖS sS„Ž—®ß§^Æ÷©VŅ*NX[Yąō0”KMĻ$)9{qˆ¾|GmÖÖMŠ..4¢_KŽ½Jéž»žQy½ŗŽ•³07„Qź:v±Ąń̬lMœ‡³£ 5«y`ok…­µE~ś 9Ų„dĪ]ŗCz†ź"‹š¼'}P·Üąõ’dʬ8;ŚŲC›–‘ÅÕ}_afZśžĄvVŌ©åʼn³×Ÿń :W!„ł*\įžąZŚ}02e\w­T˜}ÜSŸŃø5Ga­C§®÷„*CžĻŽ}G5}µ’†½÷TQQÜ{ļQ÷^µu“uµŽ×Y«­¶uT[ŪŖuT­Z»uļ{OÜ¢2ĀIŽ?R£‚€÷sNĻ!æ{sOižÜ{ŸŪ©>”A¾/Ü’E éÕ䄏+1+KKZ7*ÜQK†Rµb Ž&SĘQX"±ĢĀÓHKāDb)‚ F䔸sX } Hx…@Ö|5;[Ć,Ÿ:¢S¾vžÕ²A%Ź—Ķ; “µ±āĶ/^ĘĪ֚KĒlOd«†a|3c AĘ2”Yzę¹$ÖŲōķĻE3cYä‰ÄR0 oOćlŌŽ+ųŅAA^X+ąå7”!––T._ŹąćöķX3›>a@—…NVÖ,Ļ–˜=¹OžÅqž'‘Hx»o³<ūōl_O7§ÅRŠ [>cņ;ÆQʧp“A^|7sŪVNÄÅ©h-[ÆČ”uÓĶ6sYUbY46¢ęCģ±ĢĀÓŻ83–±ń FWA .ƒ-ķļż3Y ),¤æ}=’l„’ˆ³·øvū1QщÄH“‘gd‘žĢŁ–öv6ø8ŁąėNpošÕ­ˆŸwį+éæÕ·ī®śk,µØ_øs;Ż]™;µs§öćräCN_ŗĖƘDÅ$!ĻP"“kūZYYāźlŸ—+e¼hP#„J!žyŽß¶q8Kg ѹ^ć`Ę iGÆŗgņśxęæ«zXivÆ™ĀƒĒ 9ÉõŪ‰–&Ÿ(C©R‘"ĖĄŃŽGœģ°(@Ÿ_/\ķIN•?ßäŽfµ@‘^š'KĮ,¼ŒT8C_ä+1 ‚ BqVā ÷xżV––4©S&uL7ńäåīĢšž-Œz*”ß#Yµb`^{ _HĒ/ær““æż;×éq *(Š‹óWs-ąœ3m4#–Ā fįm¤Ä2NĢX ‚ ‚±”Ź›;C 4~b)/Ŗ\ ·¾¦ †Q("±ĢĀXÅ{b„bĘRAŒ$’ƒM‹!SĢX Ā‹Ź#±,kŹ8 C$–‚YxyiĘR*f,AĮHJÜ2X€?q®­PtäńūXä?‰„`b)¬ ‚ +@Ksa ­Œ*ʔĒ)ć( ‘X fa¬ā=±bĘRAŒ” w^qęé.K”čČć÷QĢX BnŒuÜHrJ*™ £Œ-‚ ưwĢČyÉ!¦&f,”€œ±³5Ī™QR±VA ­DīÆpsq0w‚ •Ēļc‘ŸZ‰„`6žĘ*ą#βAC²›;c±µ±6w‚ ekc„·É”q†H,³ńńņ0ŹøbŸ„ ‚ ”`oī ŒÅĘZļyA0¹<~³ŌĻ€Db)˜M€ŸQĘGŽ‚ ‚Ał½]/ĆĘŚŅÜ!‚Vqž±ŃfćļgœārāČAA0Ø"_ņetž ‰ÄÜaYŁJ}ME~ͶH,³ńó1Vb)öX ‚ ‚¹˜;cŚsōйC„‘eīņ#–Ā fSŹXKaŌ„ ‚ ’˜ĪóĖ4wł‰„`6ž¾Fš±{,AA„’„Č'–b)¬`6ĘJ,cDb)%Vlb2±ńIH“S°±²¢JH\^ģpsyF&1 IXZZP:Ÿæ?Ośųxam„氇J„ę~t,Žövx»»čµ‚ B(Ģ@~Db)˜Ø +‹Ж&2śĖEģ?}µZ­½niaAóŚUYōžhü¼ōŸ›”Č¢ē¤Ļ‰øx /7"7®Čó~Ļ\¢’“9œ]ūA„|õöKMO§ę€1ōjݘÓ^Gŗ<“ŠAx•‚ ‚ WйȏH,³ńpwÅĪֆŒLĆ~'M@­V‹ o‚P‚ łx—oŻgŽųaŌƄ³£= )©=•Ł«žąķĻņļĀs}®Z­ęŻŁ‹¹zē «…y’”Įā²µ¶füĄn„—Źq}ŽOqņJ$ĒVĻ7Ų½A0Ž„³†P;<ČÜaN\cāėrkŠ7u,%KĮl$ ¾Ž^܋zdŠqYY$§Źpsq6čø‚ ˜Ē©+‘æxo§ŒäN­“×ĖśūP³b)²tęžō'ńÉ©xŗźž»’lÅ:6ˆ`żÜŲ°÷h”ĖŌ49jŌø8:äøngkĆĢÆüEé”V«I–„ćģh„ÅÓ2ņŒLä īĪNz?4ĖŹV’&ĻĄĮĪ6ĻßU*5)iéø8:`a‘÷pņŒLŌ€ƒ]‘?>M ĶÓĶI$–B‘qžź}MRSĘQ"±ĢŹßĻŪą‰%hf-Eb)%ƑóW°°Šµyż\Ū‡vmKĆźa8ŲŚč“ż¼e/ßüŗ…“GŠ¢vU6ģ=Z {ļ8v†%lįŽćX|Ü]ŻÆ3ćtÓö©Žļ]ulÅäĮ½xē³oŁ}ü,ņ ŁJ%å:`ž„wčŁŖQ®÷ųtłZŸ½LĒĘuųvŻ&SdŲŪŁ2¬k[ĘčŹŲyKŁq„J…—› 3ŽĄąĪ­µĻßsā<ŸÆXĒłČŪØTšeĀ”e; +ƒ:¶Ōö‹øxĻ–ÆåŲ…kØÕj,-,š÷ö`pēÖL|£'‰„³×oŃsā,¾ž4œEæ’Ėé«7Q«Õx»»2ŗogĘ즿 wńI2s‡ Zyü>ł½^"±ĢŹh•ać .k”±A0­›÷įīģ„«“#cć9vį*1 Iø;;čėEƒŖ•hQ»ŖĪóöž<ĻÄĖ’z÷3ńåŹõ|ųNŖ–"5=ƒŻĒĻņńæāļéAßvMH–„“”Š,éļß¾9kTfŻŽÜ{ĖŌ!}Ø^”œŽ{dd*8u%[kk¾2{[¶>É¢õ’ņĒ®CtnVŸßēL##SĮж3až2ZÕ­Fi_o.ßŗĒ€i³i]ÆĖūĆßĖ„dėv`̜%ųyŗŃ¦~MŅ320mį!Aü=nNŽd*²8xę_¬\O•²¼ÖøJ„ФŌ4&Ģ_Ī’^ļĮ§£!MJaþc|²ōWBK—¢SÓŗ…ś^ ÅZÅąpöĀz#ĪæŠŽ<~Ō„ äEš!?²ō \łhÉĻ,^æ;[l¬­ČTd‘ž‘I€'«?™@Ź”Śē\¹}Ÿ!3йi=>|»”ļ=¦ŽźŽ^ūøu½źœŗÉŗ“‰å³Z׫Ą™«7I–„3¤K›ŗ•„ėfOÅŃŽīæqj°+ā,Žn®ĢŸš¶¶_XpijĖÉĖ‘”öõę·ķūńpuį§O'ęXžŚ”qmj ß»Š¦~MnÜ{ˆ›³ŸŒD­J!Ś~õ«Vdż®ƒ\ŗy××yśŗūuaL’.ŚĒ›ÖćŌ•Höŗ ĖWS<ągī ŒånT‘æ.¼Bī<ˆÓ×tׄaŠH,³ņóń2Źø±Rńé£ ” wÅpāņ ö/ŸCxyĶj•J͉Ė×yoöŽųš+ĪÆ[„µŃŅDś½?›°reXüĮ{/UČ«iĶ*:×V«Ä–C' =fnJy{j“Ź'|Ü] ōĻqķÉҬģlī<Œ”V„=•–T "*Vó†¹FÅ`Ī®ż•JMRjɲ4YŁ<Œ‹':>‰4yFŽēׯZ)Ēc‰DB ÆҤä—±Bq$E$–‚`w¢Db)…RŹX3–ńbĘRJ ;Ōj5‹§½KpĄÓ÷¶T­ÄĢyóĆłœ¼|ƒŚ•Cé?m6֖–üśłdģlņ^½§V« ī2,ǵmß}ŖżŚŻÅIē9®NŽH“ [õŻ"—äW"‘ä(ą“›ÄÆį޼o®ķOf'•*-ł™5’īE–.×¶;;Śēś<Ū\¾o¢Ņö+­ČW£|y¼‘“Ė惎»& £PDb)˜•±öXJćŌ„ ”^ī.8ŚŪåH*ŸõäœÉŲÄdbā9ćī.N“5]§Æ4)yF&5Œ`ēāY:ĖU=\µÅz乇¤ČŹĘ¾ˆTIµµ±¦UŻź|ųĪ€\Ūķ’+hōēīĆüšēVę‹ęµ«ā鼂•„Nö4:ɔ! ÅSpŠæYø{“ˆ,='»ü; ‚=ŠM"5-#·¦Ä9–‚7_ćĢXĘHKō‡«‚šJ©\yf¦öˆŒē=ŒÕü{÷tuĘÅŃ!ĻŹ„»OœćVT4Ż[44‰W^Ē…DÅH©šó½ōĆŲx¼Ż]ņ[­VēŪēełzŗŸDŠĮ:mėv MžAÅ @Ī^»EX¹2 ėÖN§Ÿ”g_…kšv¾½Š!•JĶ„iP#$’Ī‚`D®é=jäŖ)ć(,‘X fUŹĻHUaEńA(1:6®Ćß’ÄŌ…«˜7~NO—oFÅHłę· ø9;RÆJ…|Ļ•LL‘-M|į³'ܰ“öjk—¤ĘÄ'²żč)ŗµh˜ēóģmm‰OJA‘•ē™’/«F…`>^ś+Wļ< ¬\iķõ”“t>]¶–6õk`meE“4Yŗ<Ē÷oėį“Ä&$”R«Œ£Pb즄&– yC/KĮÜ.^Ņ×tĮ”q–H,³rvrģɑTYšAlj„ ”¾žī,˜šcēžĄ?{R1(';āSøó0++KVĪ].ēX¾¬GŅjōŹĮeH“gpžĘlm—ĻyŽĶj…³ģļmŌ0†@?z“lÄŠnm ßą.mų}ēAšæ=…Š2”ńóFž©ąģµ[XZZ0¦Wś“mĀņæ·S’Ķ Ō©\+KKī<Œįś½(BżI‘„<6”ÄŁ ؀¼7žSy¼”“¹x]ļŒåESĘQX"±ĢĪß×Ūą‰e¬(Ž#%Ź€ĶiR³2[ŸāvT4Ь,jU*OYŗ6Ə‡Ū Ó„y}*—É·_… @fŽx·ŗµćĻŻ‡¹rē>*•šNMźŅ·]3muV€©CzS½BĪ„ØšÖeóĀ™8} ib2E€žhß°”eJé\»G{ܝs>ļɌlõ’–ē:ŲŁ²cń,¶>ÅŁk7IM“cogK·ę čŃŖnĪŽT -ĒįU_±ł@÷£ć°°° SÓ2,ūp,·<"żæ½¤>^Ģń:>ž:ń éŅ{Ū¢±·T0‹xą|‰ 7š*ĮLŠl³ŽßßĒĖ(ćʉ}–‚ ‚`HĄQ µ¹1†żĒÆ1uD's‡!¼¢æ®ÆéØ)ćxy&–ó~ŁkŖ8„W˜±f,EeXAA0øŻ”ŠÄņĄ‰ėČ3Ų۾“ ä%!)nėk.63–b)¬`vĘŲc "±A#ŲeīŒEž”ąĄ ½³F‚`4;_B©Ģõ<įkĄ}‡Sh¢d¦`vž~ĘI,ő#‚PņČ32‘&§Ÿ”ŠµåK—ĀĘśÅžW–•­$MžD®NŽ/Ō×ÅŃ ż•nÕj5ɲtl¬­p°GqƄ³€0Ī>3Ū~š"šU5w%Rl| ²ōL¬,-pv“ĆŻ5ļæÅƊķõS¹Ķ”q¼,‘X fēļėD"A­ĪµV”ÅI :ž ꓐ’ʤ+Ų|šŁJ„öŗ½-Æ5ŖĶÜńoå8[ņyŁJ%¦Ķfωóx¹¹¹qEž÷Ū{āż§ĶįģŚļ*å«·_JZ:å:„Wėʬųhœöŗ4)EV„¼uσr'K—#MJ”ŒŸOžÉ¼`v*`ŠĒ܁Ćß;NńõōEņč¤7'-ćß}ēŽæ³'ķAŒ4…Uāļ§øłˆ4y¦NWg{j‡Ńēµz éÕÄ Ē½Č3t:Ÿ‹7¢“׎ģјof |鱍![©dėžóśšw˜2–—%KĮģlmlpws!!1Ł ćŠā=‚Pr¼żÉBŽ^øŹŌ!½©_µ.Ž$¤¤rōüU¾’}3ɲtžœ÷ŽēOžśGŽ^øFķ°ņÜ{k°øl¬¬Ņ„ 5+…äøžé²ß8y%’c«ēģ^%ŻĘ¼7{ wž]…›³˜Å(āvQBĖ8qį6õ«‡äߣÄŅä™$&§šäÉ2Ł<ŒŃ|Pļę쀇ۋżŪÜ“ē,ƦžH|’,Ļ~É©rö»ŹŽcWłjÅ6~’v4µĆƒ ÆJ„fŠÄ„<™sIsz.ImQ±÷ŲUāRskJš8œ—"K”Hšó1xb)Ž„’įü;ģ;u¹ć†ńNĻ9ŚZÖ©F¶RÉ7æn )5-ׄä›ß6²fĖÖ|:‰]g šXŚŪŁņõ¤įOЉęĄ˜žŲz²H&–ępīź=ōś €é£»0kBÆ|Ÿ³ćŠEzŽžN»gŠŅŅ‚fu+R%4€@?w@“$ĒʧrźāĪ\¾‡Z­ęÖżX: Ļ±?gP¾¬ž•"y™<ūwžŽqO7§|Ū¢`ŻæĒõ5m„˜ļcDEo¾_0‹Ä;gŻģ¬0łR_o.^5ģłQ¢x ” ‡Ī^B"‘Š«Mć\Ū‡tiCõ å°²Ō­G÷Ͼc|ŗģ7f~“NMė²+āLī}äü†~ü5—njŽųśónæĪ īü“(f³·¦Š§mSĘōļĀųyK9pę’v)lĶcųlōtnZOļ}¶9ŵ¹yyF&®NŽŌ¬Ģ”!½iX-ŒŪ£é5és>֗>m›ęxīĢ~įą™Kģžį ,-rÆÉwćŽC>^ś+ēoÜ!.1‰¬l%ƒéÕŖ1’Ō+KKī>Šį³åk9|ī ± I8ŚŪčėEĒ&u™:¤7¶ÖÖ(U*ź¼>Ž)ƒ{3 Có÷Yøv#[dēāY“=ƒī-+eżĪƒ$¤Čšõt£cćŗĢ1GVmŚÅ·k7!K×¼jžö,,,čÕŗ13Žī_ Ÿ—`2÷€[@‰Ģ¾žŲv’yļ÷+rĖagŽéĪØ­(ķ_4—Łg+• Ÿ¾Z›TöķXłō'ŠĻCļs.G>䍉Ė8{åŅÄT¦Ķū“?¾·Ą÷^üė¬Ü@h/3ĒtgŠÄ„…{!&¢ČŹfĆ.½’_ZoŹX AĢX 9ø©”ź ,M~__Ć9+7ų˜‚ ˜^äżGø;;įįāLbŠŒÓW#‰IHĀĶɉŅ~^„‡QÖ_÷oȉK×õÅ÷ ė֎Ń} w6Żūß®füĄnLŚYŗœ]ĒĻ1~ŽRܝčڼ>÷£ćHJÕ|*ŽŖ^ ‚üŲ| ‚Ø)ƒ»“ $Š_ļ=œ¾Č óčŲø.sĘÅĖĶ…˜„$VnŲIĻIŸsdÕWųakcĶś]‡s$–J•Šß¶ķ§S“ŗz“ŹōŒLŗOų ;kĘ čŠŸ—J•Š#ē®šåŖõØQ3epoYŁō˜8‹l„’Q}:QĘ׋,„’‹‘włnķ&2 >w0 I@SŅŅuī•”"#*FŖ}#åó×ѼvUęŽ §.G²ōÆmd+•,œ<‚ŖåƒÜ„ ē®ßbćžth­ UĖģ‡%˜Ś.Jhby’Q<ū"®ŃŖa˜¹CÉ”Z„Ņę!_[öēž#ĶūÆśÕCųķė‘Xęņ”ß³Ŗ„°yłxBZN&S‘ͦ=g |ģĖ–}ēū鯀f¦rˊ ÜŗoøÕ)ƲiĻYķņę礔™±,VDb) „ŒPVž‘‰,-'Gƒ-‚é¤ČŅqsvdĮ/’0÷§?ÉTdå(ųU1(?G•²ŚēÜ~ĶĄęҬV8sĘ -ō½GõéČÄ7zj÷lݘ+·ļóó–½ŚÄņYO®ŻŽzLz¦‚ń»å{’ģ rpÖ|61Ē Iē¦õļ3Š ūŽ1aPz·n̼5‘,KÓVµ=zž*Ҥz¶Ī}6`WÄYKŲ·l65*kÆ÷hِøÄ$žŲuˆ)ƒ{säüī>Šįļł3hY§š¶_ævĶHM—óūŽƒŚÄ² ‚JłņĖ¬ÉŚ‚<Ż[4$+[ɦƒŌ©JŹ”üŗm÷G0²wG±Ē²xŲ Œ4wƲlŻž"—X¾ŒÄä4²•*ķmq°7Ž9?ż}Dūõ”įóM*Ÿšu§FXYŽŸæ…"+›wbØöb‰ōŁ+÷č?n J„ [+žY2–Š ßb‘Xžø^ļŹĶh’ĖbE$–B‘ąg¬³,ćDb)Å\†BĮŻĒ1lÜĮŸó> ~x%¬­,ÉPd±’Ō&}½‚×§ĻćŌÆ ±²“$!%•~S椔·'+gŽ×;“÷"Z×­”s­iĶ*ģ8vśe^R7£Ó²N5ew^n.” šÓī ķÕ¦ _¬\Ļö£§é×®›DąēåN“UōŽõά,-©^”œNŪČŽ9w]s(÷“™Ę†U+éōkT=Œ5’īAž‘‰MĮŖ66©QE§Źk¹_bā“ 4ŽPäģ”`†eN&šĻĪÓÄ%¤ā픿ړ©­śó³mąūßąµęO?ŹŹVR©ķū€¦źĢ±Ż9pāóWlēšéȳb„|ÜhÕ°2’֞ZUŹęøĒĶ{1“ņ•öq¦"[ūõ¢_ö°vsDŽž‹?}“öMŸĻqī¶6VtjY½@Æļ“ɤ£Ć‹%æ'ŠłķÆ‘„g ‘HųńĖ·hZ·Bīk.'°ėČe}Ķ?™2C‰„“*[mŽ’Gų+±”&R®L QĘĮ4lm¬Q©Ō,ž•Ź=żŪĪƚj“ž‘É[Ÿ|Ć©+‘ŌŖTžAÓæ"MžÉĘÆ?ĀÉĮ>ϱÕj5µŽĶqmżœ÷µ_»»8é<ĒĶŁ‘øÄ”—|UO%„ŹX¹q'k·ļ×i“„gP%ø åJłR;¬<›§_»fØTjž=t‚ž­åyÆ=ż‘&$§±ēčĀBJ^! ǽžTyMž'*”ó3ęK$[©¤ļ˜Å\øöŠĢŅ~ų^W£ŽÓ22³XŗvŸ¾ę•hĪ‹-vDb) ƚ±Œ|”ø +WšLEiņ ķķtŚ£„šBÖī.N89Ų3äæ‚9¹I“g"“gP£‚fÆ”µ•%3G¼®·’ćø"2ŃҼžIö^–Ƨ®N“Ø]U§ķ—­ūČČTh÷öhՈéß’ÄΈ³œ¹z“ą?jUŹ»~ŠÆ‡I²42³²°µĪ™/żk_­ł‹ė’,ĒŪĆ µZMBJŖĪė‹KŌĢø8: A‚„…ŁJ„νʼnó^1»żČs÷Ęó×öSō뤻Ÿŗ(KJI§\ 7ŪWMĢ5Į›;µƒ'/gżÖd+•üšŪ^¾żh~¬’īiEÖćēoiĖžķkēyÜHBŅÓå¶OŖĄf*²łcŪ ¶īæĄåȇܾ‡,=+KK<Ü)ąIżź!to[‹Ö*æšk|węĻģ8t€õ+±ü‹”Åj%ĚŽ#Ķuå‹Xeāp ¦šO„’ÉĶĶ,7ūxy¾šļ‚ˆ3–‚Pģ½Öø––|²ģ7²²s&3‰)2–ü±G{;źVÅÓՙÆ' ×ū_£j•pv°×>vÉgöO’īŃ HJMcŪŃÓŌ+Ÿēólm¬IHNE„Ź’OjxHY¶>ERjĪ: 1ń‰L]ø’‹‘wµ×|Ü]i^»*›D°łąq½G°<«JHYŁü¾#g‘„JŦųzŗca!”bYĶLÄ»éōŪ°/‚ņ„ż±·³ÅĀBB?ovEœĶńóø÷R{Oķm4Kf„I†[f,ŻŠa‘‚ųjÅvs‡P(«ē½­wÖŠĪ֚%ŸĘĘZ3ætģģ-ƒÜS–ž”żŚÅɞ}W©Šf*oL\ĘŚĶ\øö@Ū'[©$6>…“īšżĻ»ióę\õ™ÅØÜ—į>kĪŅ-,[·€ŠĮ~üµhŒöµjµšoVé]éŗĶRŲb©ųü„ĶŅŅ/OĒä’„ ¤ń&?’S šńä³Qošžw«łc×!jTĘĮŽiR oŽ%;;›ÅÓŽĶu6óe]¾u&Ć&^¾,iņ N\ŗ"+›1żó^rÕ°j%Vü³ƒ†C&P±l Æ5®£sęćć_ļĪ–Ć'©5p ÕBĖįļå,]Ī‘óWpvt`p—œūŽzµnĢŲ¹? T©čĻ2X€ŗU*Š©i]ž7?oŁK?oT*5g®Ż$*VŹŹ™’ rpz“lČōEkXæėeż}ČPdqåÖ}ĘIYžį8ķ˜ļõļĀÄ+Ø÷ĘxjT&C”ąČł+”õ÷!>)5ߘrS+¬<6ÖVt÷1µ*…P©\i>zg@”ĘLFōmD< ģ5]8/%čżüÅSļ°÷ŲÕbU!¶“æĶźV̳‡›#åĖśpåę#¢ć’ rßŌ“§‰å‘Ó‘ĢXšЬl$ •Ė—¢Jhī®ŽŲŚX‘"““˜œĪŁ+÷“Ē“;{“ś=?åŌ†)S*÷½Üė·žąƒłąåīĢ–šp+^U¤’Ły†«·ék^`ŹX M$–B‘QŹĻĒą‰e¬TĢX BI0¼×k4©Y…Ķsūa4 E6Ź”¢mżōhÕ(Ļs"ŸÕŗ~ |¼ņķčĒųŻx·_~žwWī<ĄÖʆ”]ŪņF§Vś>cdļŽŌ­’³ aV°±±ęĄé‹Hó)ōSÖ߇£«ē³~ē!.޼KF¦7gGŽ҇>m›źźÜ¬‘÷āāč@…²zF}J"‘šÓ§Łø?‚³×n“„„%tkрn-ę˜}]žŃ8ŗ4oĄłė·y$MĄŚŹŠ¾ķšŅ­EƒK‚‡ukGH ?ŪŽœ"6!‰r~LŌy¦‚SW"µżŽīўj”A<ÆfÅ`Ę=wKP)_v,šÅ»-*Ę'{ПX.~5a,/C\tJ,ōĶß“j8ŻōRpé«[įģØ)n–‘©»—¼0žgćī3¼Õ§é¦7QŲq•3Vy7†ø„T†O_ĶöUuś=s“Į“—£R©±³µfćŅq„”1NcQ©Ō|śż}ĶG€£& Ēą¬€ŁęB(:œŹŌ“9“?”ĮeÜÆ»Iļ]Ź×Ćš×Ka”äØ\†Ź’UH-¬.ĶźÓ„Yžū„BĖh÷^žoP<ū¾?“Ī5‰DBē¦õčÜ“Ž ÅååęĀč¾^ØÆ‹£CžūBsciaAĻVčŁŖQ¾żz“lH–łWVl^»*ĶsŁڬVøöė z¾wõĀ+R/\wF„FÅągm ÅĀ.=×ÕŸŁJŠÄū5°āł†#§#ŁqčbŽc5Š27—;fĶŠ[ŸÆ;exGęLé›ļóZ6cĻĻS©ÖiI)éģ<|‰;Qq” |ZćÖżXŗXHF¦ęćÕsߦQ­¼·$Eė·žąüÕśš‹õl%hĖ©ęB(:Ņärę/^E»LžX£€OœT,…A#ŗDĻoč»<6}8/åg`ō|Ƈ_’M»&įÅ¢@Œ„„ybt°³Õ~ķģhĒĒc_ü}diŽčވļÖģF­V³żĄEF½Ž €ų$ßZ€4Q³Ģ~քžÅ® €R©ā“ļōĪV^D³æ²XKa…"ĆßĻš‰„X +‚ F„öĻoˆÕ7“Y”)€Ļ€Ÿo8yįėž=Ī€. tŸ%ąčšōĢŚš•ĖbŸĖ¶y©Wżéj…Øč§ Wļäʝh:4«J’Ī ōžµł¬g÷ަČ2r<ĒŽÖ·Å÷²–®Ūǵ[z?k™I1=bäY"±Š cĢXĘ'&¢TŖŒRqVA@sģČó‰ånsb?SµŚS꬧k›š8ŚŪź>K (šéŽsoOē?ßĆõé~ņ„d™öėģģ§łÖöƒ i9¹Ąc’¾å8æo9®}ÜŗQevƙRąq +19™ß蝐=‚£”ļÓeŖķ›…ćZˆüäĘŻhVž”ł|£^õ`z¶«­m+`ŗŸßÅėQ,že¾ę]ĄV“cdb)¬Pdųyē¹8ĖRJ–Ō49ńÉ)ŲX[įļåaöÅA4K_+>óuq¦F“XEs ‰Vŗ\Į[Ó~d÷š)ÆÄßK‹§[‰2łKҽm-¾^µƒ»QR6ģ:Cg’¹¼de+łeĆӓ6Z6xznhóz•h^ÆR¢ÖŲ~š¢6±¬^©4SG¼XåmCR©ŌŒüp5YŁŹÜš•€ī¹*ŘŲx&ī®XYY|\QĄGŠ?Yŗœ ó—ŲįMŹtLĶcØŅ{{ gĀ‚å¤¦å½Œ_„R3ų£łø7ļKh··ó½ßŽ£§qoŽ—»bņģ—,Kýy_ŽžtaŽėņŒĢ|c*мZö§ēÄYę£XĖPd‘”šfī0Ģa·žÆ‹«43—:ö»ŹĻŠõqƒ/ĢĒÓEūõÕ[ņč©ńVßfX’÷^nŲū?²ķĄ…|Ÿ“œ*gŠ„„Üŗ @ķš ĀBJ2ā¢åūŸwsōĢM}ĶKŠTƒ-1Č„PdXXXąīęJœA‘X Bń7ņ‹ļŁqō #z½FżŖqqt !EĘŃóWųión¤‰)¬łL’æ/ż…ķGOSµ| ų7ĮŚŹŠī-R§rhŽėSæ]ÅÉ+‘[=ß`÷2…n-V®“¹Ć(֖¬’—9«’$z·Ī½’n/¤§Ģ‹”Lŗ:•h&|¾–öM«āėå¢ū¬ÄßĒ {;ä ¶īæ@’qKhŁ „|ݱ·µĘĮŽ6Ēy’UBųß°öĢ]¶•¤”t:¾µ€:UĖѾi8A^ø:;`meI¦"‹8wõ>[ö')%k+K–Īb¦WkX÷Ę3cĮ_śšć€MiˆÄR(R|<= žXŠ„°‚P¼]½ó€-‡NņÉČAŒŠ5G[– ±µ¶fń[HIKĒÅQ÷`šUwńżļ’²äƒw9vž*[īoŒƒ-«>łŸĮĘ3·gŽ7wBń•‚&”|Œf‰_IL¾}¾!>IĘąÉĖŁ¶rB‰^kmeÉØ­X°r; []µG»Śü½xLŽē|9©Ьl¾Y„©étźāN]¼“ļ½Ü\ųuĮHj‡ī˜‰J„fȔ夦ečėņ? Ž„!™„H,…"ÅEvāāŌ„ gūOi–RõļŠ<×öĮ]ZS¾Lī˦vEœeŹĀ•Lܛ~ķšqģüÕŻū܍Ūüļ«e\ŗu•JMHiF÷ķD÷ µ}ŗŒū„n-švöL_ōGĻ_åAti™“ž>ӆö„]ĆZzļsäܾ]·‰‹‘w‘gfāźäH͊!Lx£UĖqūa4o}ņ õ K³œƒĻūé/½Ä? >̱źYQ1Ręžō'‡Ī^&)U†•Įž ķŚ–¾ķšjū š1šC˜ųFO:ÉZy’ļ=JŠ,?/wŗ6ÆĻų×»ckm @¶RÉ÷ė6³õČ)Ęʓž‘‡‹3-ėVgŹą^ųx<-Äńēīì޼›ČūPdeįķīF£j•˜<ø7>žyž<®ßbīOråĪā’P©Õ„‡”e@‡ xę÷ćĪ£¾ZóĒ/^'>9W'G|<éŻŗ Cŗ¶A"‘—˜Lß©_ņŃš“¬S-Ē}fÆśƒ;¢Y:]ó†¹õˆi¼ŪÆ gÆŻbóĮ椦Éń÷ö W«F¼×æ+ÖV–,Z’/ī>LL|ŠģlķĻžĶĪ­ڵmžÆ«Ł&±,Iż€ĘĻ7ģ8t‘Eæģį½7ژ>*š3µnŽ,śec“ņķoa!įėéŲ„!߬ŽĮ¾ˆkzŸ'‘HØ@Æu5°U‰™žbÉföæ¦Æy;¹T. Db))ŽžS,…„āķƽ‡ø»8įćīJF¦‚K·īŸˆ»³„ż¼ -@h™ē]¼y—aŸ|CĻ֍˜:¤pGi½7{ C»¶e@‡Čärv?ǰæĮiŽmź×ŌŽ§^xĀC‚°±²b×ńsDKhQ»*¾y|hvāŅuzLüŒU+1²wG¼Ü\ˆMHbĶæ{č8f&GWEp€)²tÖn?#±T©Ō¬Ü““µ«éM*•*='}ŽDļō耟—;)iéģ>~–Ÿ‡§›6Ī«·ąķęšć{ųž·«©Vž±ŗ¢V«9zž*³Wż"+›ßŃ]ųŁņµ|’ūfŽģԚ~ķšbmeET¬”’ģąÄ„ėX1‰DĀ/[÷1fĪz¶jDē¦õpqtąĪ£VnŲɁ3—ˆX³@›¬>/!%•Īć>ĘÅсA[āéęB¶RÉΈ³ŒžrśµkFš<ƒNcfbiiAævĶšö$C”ąäåLX°œ¬ģl†÷zl„’s×oēŗņ~t,7ī=Ō>>ć,§^xEž7ØŁŁŁ:{™O—ÆE Lԃņž“Ø]•“W"‰MHŅ~OƒJłźŒ_‚ķ¢ä%–*`š³mžoœ2g=-„Q%T÷o”z½ƒ{jņ[G‡œgiŚX[‘pzÖÖ/VÆbēO“ÉĪVę;ćjeiÉōŃ]˜>ŗ w£¤DE'‘©)äS®“žŠžu«•ć×#x›Ä£Ų$Rdr”J͹”~Ž®”ö÷,TÅ×ŃŗQeķ÷ÄÖ&÷æ+Ępüü->żn£¾ę4`”É‚11‘X EŠ—˜±!§dYnNŽüøa³V¬ÓIźV©ĄÓß#8ĄO{ķQ\<ż¦Ī¦ZhßNYč„jowoĻĒ#_×>ڵ-†NāĒ ;µ‰å³žĢšÅ'§rņŠŠ™#^×éó¼%l„\€|„…ÅÓ8ū·oNõžļņ÷Ž£ŒŠŽmš°pķFdérœ4oÄN^¾A“4‘Žmt&S“n=xL俇ģ]ö%5+†hÆæŁ©5 OąŲł«Ś$(7å|łcīŚŲ†uk‡ų÷Š >|gJ•ŠÕ›v3øKLx'Ēs+•ę­O¾įü;ŌØĢwė6Ń­E%·Ķj…Óuü'<}‰¶ tæÆ÷GŸ“7ę IDATœŹŽÅ³rü¬‡vmK›‘šėÖ}ōk׌ķGOóXš ózGõéDRj?oŻĖš^Æé}½śT *Ķŗ/§j—ŽźŽžĢå߃'˜0ØķÕ¦}£Ś|żĖ?œŗłB?ūč(%gģ³.³Ÿog(č9ś;Nü=Óh Ҷ6VŲŚčėīīźX ńœķ CP W”ŽZń÷qĆßĒ-’ŽdmeYąļÉĖJHJcĄøōU˜Ü5]D¦%ŖĀ EŠ›«į—@Äʕø%ģ‚šJ‘g*ˆŠ•²ōÆm|7u76,ēī–U\ū{)K>x—»bč’ž”*ͧą²t9żŽŸ£½-æĢš¬wģE<æ|U"‘вN5nEnRęĘż‡“¬S-GR ąēåNP)_īDEŠ»Mc2YģĒŻÅ)ϱÕj5­FLĖqmÅGć“_{ŗźƒÄŻŁ‰øÄä—yI9$¦Čų}ēAv<“0>ń8.j”š×Z&€źʱéąqz¶nŒZ­fótoŁ+KżKߏ—ög@‡ę¼óŁ·Œ™ūeü¼ šö$Š×‹Ę5*Ó»M½Ėhķlu®I$ Fó&:%MSĶŃÓM÷ƒA/7ķĢ]bŠ •JĶ+ÖńĶÆr½—<#So)iéx»ēžįc×ęO—§¦Ėq“Ļ}&ĘĶŁ‰dY™YłŸĒ÷<;Ż1-$’|J š&pŠŁ·³q÷¾Z±Éļ|6\(f,ų‹ķõžƒfIu‰&K”Hq4Bb™*KCž‘‰}.oŽA(ś<\œ±·³Ķ‘T>«JHY¢bćńńpcωs”õ÷aāüå:}Æß{HJZ:=&|Ą§F…ą}žł[‘­Ō€Q©UX[īŸšÕ §G«F¹¶x?-hÓ«ufÆZ<#“«w£xGļÖMņ½Ēāiļņæ×»y’b¤DÅH¹łąļĶ^BäżGĢx»”ć··Õ|æ,ņYnüd¶ÆwŪ&Ō­R!×>aAś:q“³EBžKš% Ŗ’öp=/;;‰D’g"ˆdQŠē!šš'čž2NūźĀBüéÜŖ†ÉĢė·MĢ^ŗE_³xMrY¢‰ÄR(Rœ ŸXÄI(čo”±A0® eP(²ČČT`g«S;ƒŲĶ씋£v¶9*¶>ĻÖĘ ܜ53™ ¾ž4\§ß…šŅųŃń‰ŚÄõ‰˜„¤\gē ĖĻÓ/\ćŽtą8ņL…öqÆÖųxé/ģ>qŽ3WoRŚ×[[8HŸĖ·ī±ėų9ĘöļŖSäh̜%l;rź„Kæ’ I“RtڤI)“5/ŽĢkė`kcM؁:ÆU­V³fĖ^ŁŁzļćėéN\Rī3Å ~ł‡mGN±kÉēųø»’’.'[©ŌI ć“Sq“·ĆŅĀĖ’ŚT*Ż$4F¬tōūų ˜ü|ƒR©¢ßøÅģūå}źUÖ}¦P":yƒaļÆČk)ō ` C2±ĒR(Rō,_zYŅń&AŠ«j#‘H˜·ę/’qĖ32Yµi'v¶6Ō­Š·»+«>łŸŽ’š× ĒŁŃ^ūŲĶ9ļĀk·Čń8=#“ĒĪP=4÷ŁÓ'l¬­INM{”=W•‚J³żčiҟ[š˜"毣‹9|ī²öZ)oOU«Ģ¦ĒŁ|š½Z7Ź·0Ń£ø>Yś+—oßÓiKIKף?YPĪŽöųxņū΃:Æw÷ń³Ü}C©’f]ĆŹ•f枈{=.DŽeü¼„yī]­¤Ł×yšĢ„׳²•l:ż:”/ķOF¦‚ŻĒĻå藭T²õšIĀŹifE½Ż\°·³ÕgóÄ­ØĒ»Ø÷˜€|ŁŚŲ ČĪ&M®÷ü:”ų›ģĢ­!]® ūØo¹÷PŌwxÜŗKÆwæ#S”÷C±MĄ†dV%bĘņśżXŽœæM•`źW)›’„"ĖŅŅ8Ÿu$§ČŒ2® ĘTŹ—÷‡öa֊u¬ßuˆŚaåq“·Cš”©ˑ$Éd|5žm\Œ°”žš¹+t3“ŖåƒÉå9w…„cśwÉóyµĆŹó憓=ƒ°r„iUÆŗŽ™Ō±ŗ²łąqźOŻ*”ų{y K—³÷䬭,y³Sėż{µiĢŌ…+QdeÓė–Į6®Q™²ž>tx÷CŚŌƁæ—j5\¾}#ē®0gģŠ’†čńžŠ¾ŒūĶŽžBxHŽöv<Œ•²÷äyZÖ©FµŠ Mæ!}4ć+ ž@õ åšrs!>9•]gØH‡†µõŽ£SÓŗT -G’ishV+œoO²•JŽ]øŹķØhÖ~9€ęµ«Q«RC>Z@ÓZįśx"“gpīś-ī<Œį—Ļ5M‰„a]Ū²hżæ\»EÕŠ RÓäģŠ8K)ÆĀ}U+,µZM»Ń3ØQ1˜Z•Bx«{ūB'IJ`p (ó|ććŲ$: ūŠæMĆdzdœĖ(čzš86oĪ%.!U_—ėĄĄ+³øŽųųɃš`ŗ7×_YΜ”*\Dž™…’s‡§n>t‰÷¾ś g[ŚÖ«h¦‹æk÷kĻ% *Ķ€žLĆ­»Xæq»ĮĒķÖ±5C‚ >® ¼*T*_.ŌŻ³ų¬©CśśXü4ŖFóŚįØÕ—˜LRŠ {[[šŌ¬Āœ±Ćx­q'9-7ZåR™ōYЬlT*?|šŃń‰Üø’YŗœŗU*²pŅpĀ‚Ÿ¾—ŒML¦~xE*”}ŗĢ“JpYJūy“,K#Zš@Y?jVŅ­R š¢7½Ū4FšĒŅD¢„ ØŌjŚ5¬Å7“†ą“³“o“e4«NævĶņ}ĶÖVVōiŪgG{RŅŅy#Eš˜LH ?ļķCæöOǐ&„P½B°vłoL| «…ņÜV‚4y&NöOĻņ¬ZŽ&5Ŗ”ČBš”BL|".ĪŽ źŲŠĻF½”Ż“Z¾t)^k\yf&cˆMHĀÖŚŠ~ķš1gÜPķ1*¹±²“¤O›&ø»8‘š.ēal<ņLUBŹņå˜!4«€„…½Ū4ĮÓĶ…ōŒ Ę% ČŹ¢NåPfJӚU“c6ÆS•²ž>$„¦Ÿˆ‡‹3ŸŒDŠĮųxøŃØŗ¦ŅmtB"MjVŃ9“R–ž»‹#-ėTÓ^ ōõ¢ZhI©iÄ&$įāä@ÓšįłžœĢ)ņž#žŽ{4Ļ.Ąo& §øHGsnē@@g¹•4QĘĪƗč×±>övŗKų…ā-.!•ÖoĢåę=½Ū&ć6Ą#ÓEe~žÉ¢ūµ©ÉŖš1żä™Yx¶ū€!ė³xr΃®O]}ĄĘƒiX5ˆŽ*›)Āā/ ĖLS4ÕżŚµhÄƟ™<†ūŅķw >īŹ…³Ģ’( BI‘•K¹ŗyöIŲ’»ŃKAŒgĖ”“ š1/Æ.[ń?ŃܵžEĻ*ĄśÕCŲµfr”ΌЦ„¤4ZšĶ…kōuÉ@“T1]TEC‰ŲcY'¬4Ÿč(’Ź æJ}…%K“e\AA^i;€‘śŸæEĖ×gŸ$¶ä”±ń)“z#ϤR ¼Ķ+˜TB÷Xžø)‚ö_ąūɽłź×}æ|[kK/ĒĒĖ·qõ^,æĻ¬ó¼£ļšÅŖ]|ųV{źW)Ėż˜DFĻłƒ÷ś4%3+›7ēv”Wg{B<޽Mž«¦µõč’yÕvF\£óĶŁ¢Ś×ęõöµ¹xóÓ’ĖčŽM“É儅P©Ō ļŽyæģå|äC,,,hČ”mqsvąėµūŁtč)iųz8Ó·u †wo”£AJZ‹’:̾ӑÄ$¤"A‚§«#MŖ—ctļ&ųøėžq&ŽĖ‘ŠG––f”qAAxåż”>Ķ­ńō„»4ė’»×LĮßĒĶ“‘ ó86‰¶ƒēq9ņa^Ż&æš(¤"§@‰åĶ(){OGŅś½E¤¦eVĪ—²~š2ćēo>āųe݊sq‰2öžŽdTÆĘ¤„+Ų{:’ų”t®ß‹”YĶņ4©Ģ#i2›]āŸżŁöĶšT&S‘M¢L®­ —™„y ©ŠģL”ÉŁ{:’®Ķžīa8}ķ7£¤ü¶ć4UĖūSµ|)nFIY¹9‚ż§#©PևÓ׊ < qén@&W0éõ–$Ėä4ł7£¤T+_Š*ĮžXZHøū8yæīcͶSY6NgϧPx¹g¹•“AA0ĻG`jnWn>¢õsٱz„ż _J0Č»1“ņw¢āņź6˜o¢Š¤BU… šā·OßÄĖ-ļ2ķł¹ó(žć+'ZŚ[{ķĕ{“½ˆ•›Ó¤z0=ZT£G‹jŚ=–]š†ėģ±Ō'1%µŸ½I·fO M[ü/ ?€µ%—×¾“½­¶o­Į_ńĖö“ŚÄrŃ_‡‰|ĒŖŅÆMĶcÆŻy†·>_ĖŅŽšń;ƽŌ÷AxJ©ēPė—eaQ"V} ‚ ‚Pt½Xrk¼zėõ{}Źęeć©dŅĄ„Ā‹8w‹®ĆæÉ«ś+Ą7Ą& ©Č*Ō»ķ/Gw~餠g‹j9’J€z•ĖR”“7‘ņüDą…xŗ:ęH*ŗ4­ņß½«k“Jwź„•į±ōéĻūNER®”'}[׊»_›šxŗ:ź„ Gi¤KQPDA˜č­~ų86‰g³eßy†$Öś­'hłśģü’Ź9Ą’LR‘VØĖ Mį—+å™ėuG{Ņ3/=¾w.ÉÆ5 I:Ÿgcm™ćŠęŲDž®œ»‘ūZjwg{ā’«¢*†ŅHKVµwSAįją= ˜’[YzŻF.dĪ”¾LÖ^|ų]©Tj>ū~#Ÿ|·µ:Ļc(gŸ›(¬"ÆP‰„”žXYķ剉©éD>ˆ£ńš…zū„xém Ne¤K IŃž]A”D™ $³skT*ULśr‡NŽą§yļąź¬’ WĮ“Rdr†LYĮ?;OēÕM L¾6MTÅC”Ė‚zv°8‘H$4ÆĀā)}ōö1ÖńÆ*yF¦Qʵ·ēG ‚ ‚`Rs€D4Kcs}Ͻq÷÷ÅßæKXH)“'č:{å}Ž[Ä­ū±yuˆæ™&ŖāĆ`‰„„……ŽĀ+ć’ u“ņru$[©Ņ»dwƁ‹d+U”ö„£ %]ža”q]]œŒ2® ‚ B–w€?\øłŚŻ>ęĖI½;ø­XkjµšoŚÅŌ¹ėÉTdēÕ5č0MdŋĮ˲~īlMĻ䟯Ā‚|µ×Õj5ļæšŅć[YZ ‘HH“gF+7µ*²įĄEbSuĪ«LĖP0rĪzźU.CļVÕMSq¤†$ Ķ’'Sg’Õ¦K$’L€˜øx “”cøūąńR‰DrFƒZ„TK$)Ļö±ØŸ}¬RY¤ØŸY›k„&‰D¢’HźaA3Ō4B « ‚ %Ź. 9°Ģ­ƒ ļßĀT±½’Ōj5?o8Ź„Ļן$ĖÆū6`š}³‚K,;4 cö»]ųņ§ŻLžn Ł£Ų®~E¾›Ō‹a³Ö¾ō=ęķĘšŁæóÅO»M2kĢIJv„ŅüłåP>Z¶—nĶŃęėįĢWc»•ŲŁŹč8i¼]@­Żføµ±vÆe=¶cPĒĄś’žC{Ł)3+³Z%i‚šĘHh Ųę9ˆ ‚ Æ)Š˜…¦bl®k^’Ņ1c5wŸaɧƒ)£gK–Px·Ä1bĘjvÉw–R Ģ>ŒstA "į™%ŠżŚŌdՇõv–gf‘©ČĘÕÉNļśoµZMt|*1 ©”õsĒŻÅl„ Yz&Žö6X[Y¢T©HMĖÄĪÖ;ŻÜ6%M3!ęāØ[pE­V›(#6!WG¼]µćŪŪYck­/5=µZ­3ʓ{?Ū÷‰“ ŁŁJ\ts›d™œĒń©ØT*¼žĻŽ}GGU“’Īnz#$t”wŅčŅ)@l(v}mŲ¼(6ØX^ģ ¢"Ø ½÷ ]zļ$¤·Żłżq“Ą’MH ›x>ēģ {wīĢģŻœ°Ļ™g|=©PĪė¦ŪĀ¢zßwˆ»“}Ź|ą®RčĘgĄ+Ø·pż›£‘>呖é¦M“ŻAAG \I÷Cˆė•™•…OķV–¹°|š¬ ā4gÕ&½=¶ "s1¦Šās?ĘśĖuxyø1ā…>¼öĝø¹:—LĻnbɩ錞z㾟GZzęՊŸžę8¾g7‡"Xŗ»:ć~•_j„U+ųPµĀ„õÉNf¾—„Q6›lŸ_É^@yyż•ż¼©ģwiīł•õx{Ų$*ØmO7—|Ū-ēån7ąÅĪū·¤aÜ%,qŖZĖ`uöcŒÖæ›SŽŌ 1›L€öŗā˜÷,„Bˆ²k:°˜Œ±žŅ®¤”4FŒūƒÆ~]ŹūÆ÷ēŃ{o“x×@kĶó£:z*‡Ÿ/Ģ)‹ĮĄõÆē»…”Čv#B#ę{粑łŅ¤Ō@ °9ūń@ŚįŲ:ڜխڣ聦ViöQ!„%ā(ĘzĖįĄ;@¾£7GO^`šŠļųfŹ2޽?]Ū6.©>Žšę.eŌų™lŽ~Ø0ÅÓ0ņ}|Fłīx#‘ĄR”5Ž,9 Ībćt#ÓŲĻÉG¶TS&Õ­:˜ķµÖaä³C!„74 šFĘŲļ×¬Ż²Ū”kŪƼ÷Z?Ś·äōłY¼f£Ę’Éŗ­ū {Ź*ą`ćzus“ĄR”5ޱ¼axÖ ;1Ef:@ҁm•\­­±ZŚk­: hMw5…BqƉŚOnĄ½lż.:<š-šÕā•ĮwšČŻķ0›%)½ÕŖ™³<†'Ģf}ōžĀžvcÄų $AĻu‘ĄR”% Øź€z8 ĪćU§łiŒ;™³Į^ęYÕtž “…Bq#°b$ōYŒ\ķ„ĶŪ1xčw¼’æY y¼ƒī¹rä1¹Y]ˆOfҟ«łbŅb+t®F±ĘõæČZŹb!„(K*ސnŖlU„¦I‹ŹčØ(ē”Š*H™ĢŻAw:Ø«d™B!D™u#klŒµ~m®vĀŽC§y)b2o~4•¾·‡šģƒ]čv[“›>ŃĻęķ‡ųvźr~ł{-)©E95 ¬uLĻnMX⤆ƒźŻå zĖÕ²e&—Ńśwsʑ“™öhŻ]2Ļ !„7¤ @{Œģ¤£€Ą«–žÉōy›˜>oõ+ó@ļÖ ģ՚ FŽśŠUņ6o?Ä“9˜>o‡Ž9é’^ŒiÆS‘ä<Ů̖ń‰©ü0{=­›Ņ1¤+¶ī'j×ŗ·j@pżź„ÜCQõWļ–Z„yvGöć[ø"ó,ÜŌ.Å. !„¢p,ĄĄ/ĄSĄ[@”¾ļ;|š&Ģęƒ ³i\·ww„g§ę“oQg'³»\¼Ņ3²XµióWnćļÅ[ŁwųōµTsxcźkV±vPä*3åł„dF~3—”ƒnĻ ,¬ßÅų©+šńt“ĄņÖP×uĒX”}K“̳B!Ä -ų ų xx ØWŲ“wķ?Į®ż'óĶ|¼Üév[ŗ“iDūõ n\'sŁ 43³,lŁqˆµ[ö±tŻ.–­ŪErjśµV·ų# ,Ņ\YQte&°“ēζń/ēIė&5K»+¢d4r@;Pē ļŹĢ³‰§b*9[h#™g…Bˆ2- ˜| ܼ“+J I©ü¹p3.Ü €—‡mBźŠ¢Y-‚Ö yĆÕ­Š‹³ćƄōŒ,vī;ζ=ĒŲ¶ēQŪ²1ö@Q×Kڳ#Ņ\dŹk‰)ӁeēŠŗtuÄ –(£š8 ĪĶØó¦ć]%ų ’yV!„øQXŁ–Ū”<ųµ¢¤”4–¬ŻÉ’µ—īÅ;;™©PŚsV«ģ‹æÆžå½ŒŸ¾^(>^ī6[dY,$&„a՚óqIœOā|\.&sģŌ;ĒĮcē8”żČ²X®÷ZäˆĆ˜2ü=Ęö-¢„)°üöƵ|6m%?æóŸ’¾’Õ1øp1oOWZ7 dä“=l¦¬Z¬V~˜µži‹·²ūš’Ņštw”v5īėҜW肋sžCļæ/ŁŹ»ß/ą‡·¤m³Zh­™4g#ēlbß±³\HHĮŪƕjŹŃÆko<|;nĪģ>|†žĆ¤wū&D¾twžŗ¾5‘}GϲśŪWńp“™2¢±źŒr@7½<™gõ2§”#>Į’yV!„(s¢²o`$ūé\óʖ™Yö:ĶŽCדž±$Y€„K}žĄŃ„¤He\b*Oœēī”ßSÕ߇‡īĆÅŁ‰}ĒĪ2gĶNVEļgķ÷ÆR·ŗ‘€ņķÆēņŁ“Ō ØĄ]mSŁß›øÄT¶ī9FÄwóŁyą4G=œo{‰Éé™É?k¶3°[hn¹æWl7śŠ£Åµ¼}įmPēYąˆź½åIęYQ’Ęż<ƒ_ē-ēĻß¦VµŹ„݇}če^}ä^÷évŻu}>e?ĶZÄ“ŃĆiXöß½÷Ż6ķų—Yćß)ķ®\ÕĒ“g²,*–>‹(ķ®QTē0žžćĘo /Šš+½n]³sĄ2Œ™T’'J·;Āžk"¢O›@ [«Ō¬\ž;°ćĄ)22-1™Ś}ž`ę’5×UĻ…Ē÷Uˆpctļ1 ĘĶü7æ€3„ŲÆ‚œÄ˜Śś*ĘŅŹĄ@Œ@Y‚Ź2źšF,›ŌĪ{ĒX)E`Õņ?cģģp1)?»uTņóąĢ…¤B·{ü¬Qwµ åģ¾~gŪFœųē’rŸūxŗ1ąö`~™Åé ‰TöóęL\"kcń̽ķ \ß)Jœ#F,W; NQH…Č<Ū p)ÕNŠĀKōå„ś^ółń‰É¤eÜ:YęŸéדgśõ,ķn”*­5ń‰É¤gŹvuB\ĮlČ~|œ}¬>ͳÖ¢d¦ĻZ1ö˜Œ¶e?¶d7˜k ,=Ż]ķ÷ņpåb²±f6);M°›‹ż5Œ^īĘ÷Ɍ¬Ā’ŃOĖ0ÖZśłøśœ§īnĖÄ9™¾$š—īļČģU;°X­kcvq!!7VēŃŽ·Ó²I}vģ?ĢøŸgņź#÷2qÖ"¶ļ?L’nķŁ¼k[4gPÆ®6}]±yg-ęż£z%ĪĘ]äĒæ²6f É)ų—ó& R]ÖFQ,ŁĶ‹×°ēŠ14š ¾åč_žĮ IDATŚ„gļ뉻›ńóņĶۘ4k1_x7Wž^¾ž[¶ńŸ½ł|Źßģž<“µ1;1™L“h\”ƒą_ĪøįžŁ”æ1)µ«WfŹüœ:wWŚ4kĄĖŻŸw‘ÆÆW±7ū1ż²c®ĮeķģŸ50F ż/{øad”5cÜ(ö’€LŒ6HĪ_ö8Ň‘ż%o×XęŒF^)#Ƃ§›0šLĘMŽœ`šJ)iĘqoūAŖ=9Ajjŗż`Ōbµ’˜œŽ›«sīTŁj\æ:Smį„ū;ņ׊mŌÆQ‘V²7fYrÅæõM"²ÕH™¦Ŗ'S@ęY“׎Ič$n0ūäÆåėųęķ—Į ;å·łĖ™µr=ŻZ…Š­M‡OžįĒæ±h}4«~Œ¼jé™™ōzłNœ=O¶a“hR„¤–nŠį׹˘łńŪt kĘé ńüµ|K7ÅXµ-×£VµŹ,‹Šåó)ē ,'ĪZĢÖ=ū©Vя,‹…ŽÆD˜’Āƒ=:QĪŪ‹“ō VnŁNƗG±āūH×®QčėšĻŖ<6ņcīhJ÷¶!˜M&?ĶG?žĪö}‡sƒšƒĒOń×ņu|ž½Oßsé~NŸ5±Y±u#棊mŠįˆ9[«0ī˜‰DA™gµ¦č®@@éöR”I)©|ūöĖÜÕ¾eī±~]oćĮ’ŽaĖ®}“ jĢOニժń_žõģĢīļ[vÖņõģš…Bæ+•÷öbł·£qs5nø?tggz¼š6[ńĆØ!¹åÖ ąŻo~#!9OcłP\BKæżČęśöźŠ’GŽĖņØmtk|ĶżBG¹¦[^æĢߌֶÓC¢’=ĪŽ£g i`|ļ Ŗ[g'3ÆÜž§,Ąß+·м^ÕB·Ū“NU<Ż\˜±,‹ÕšēõUŃhR§ŠĶńœ$>Ļ}4 ‹Uódƒ-Kœ02”·åØS” „Z\Cvø„|ė^#ä1÷”5”Õ\„c,Žßyµ:ÄĶĖŻĶ•;ŪŁž-oݬ!ĒNŸ»źł±{Q7 ŠMP ąāģD—–Aģ>xŌęųą¾ŻsƒJ€^Zįįꏬės-ŽMrjŗµ išlņBšŚŌ•™™…Uk.$$ā^’ž‘‰I©<Ó3‡<|’žõ=Ŗ€ÕPNf3};µ¶9Ö&{ŹjĪõŠŁs€Õm‚J/wž½Æ'5«; Åī=D­Ŗ•l‚0®]×VĮy®ŻÕ¼>č>V|?Ę&ØHO7fĒ]øh\§ŒŒLĢfSžĶŌ{wlÅĮ~¢võk˼ūŠ1“ÖōīŠŹęxyÆ"ČWjÕ¬AnP äŽDø-Č6q`źUŠZ“”’jsģŹėŪ£]®.Īģ< ÉĪ…eÓ5X.ś—>o|G×õńõrcß±sLš» 7'žÓļ6ŹūxšČ-˜8g#Ż_ž@ŪfµØģēĶł‹Élż÷8‹7ī”G›F4¬Yé*­]āéęĀs÷ŻĘ'S–Ółł/čVŖ|HĖČ"j×QžY½ƒÕiÓ4Šę<O7t aā?č\§ŠŪ›ˆŃ #CYq›ļ€:E)s :ĄŲ™äCQU•“¹Zu0)Śk­Ćø¹öźłšöpĻ3:—“ÕŽĒ+Å%$qęĀEī{ż½<Æ8~*Ļ2Ow·<Ļ{¶oɬöųżĢZ±ĘµkФŽ±ŌĀŻĶ•Ž0āĖIœ·Ė×½ęp2›ńóń&>±šI…¢$]S`łó;šåōU¼÷ć2³,˜LŠjšŽs½hZēŅäųלQµ‚SnįÓ)Ės×ØģĖ+;ńÖ=r™M&|½Żq½lg'|½ŻqvŗōŸį»ĻŽ…9O&ĶŻČųi+rļܖ÷ńąĮ;Błą?½ķ®=čR‡‰’ląį’“§ŒyČuĘČ*&nržµZžä²Ģ³zļzŸt—ÖXé.™gEA²,ŹyyŅŁĪˆTē–Ał&ž»Ü€nķyxD$ūŽž¤F• ,X»™!ߓūśŅM1 z{÷tnĖc}ŗQŽĒ ³ÉDõJxīżĻ‹Üē»Ś·dĆäOY½“ćgĪsōōY¢vīć»?0ž×æXł}dnŸkįāģ„ FyX,V|<=ģ_;ĄÅ©h_-†~ś=3—®åł½Ø_³n®.ø»ø`՚‡G\Z/Ū“n QæŒgłęm>y†ćgγūą1¦-XɻߞʚŸĘQ½’‘ھœ© ­[Ģļ&“ŁŒÅrõ'BQ®)° ®_yćŸŒD>n.6Į_g3#Ÿ¼“‘OŽIZFié™xø¹ŲŻę£VU?›­B½«%ŽÕŅ꘣dⵇŗšŚC]ČČ“’–»›3®Īyߏ™øD2³¬$$„ńɔåTšõäžī”×ņ–…cx÷: ŽŁØSÜTż¶ \žčTŒgZŗÕ&Ś+­»£h~a·øiUö÷„œ·Æ^ęŲģ$§ĪÅ]µŽn­C(ļćÅģėiZ7Ä”TśŻ~[īėK6FSÆF5~z÷µ<禤= āœU›hXĒśt³9¾e÷~ŗ=÷_6īų—Ī-š¹ŽUü˳+Ÿi¬ŸMł›CĒOóé›ĻRÉßOū×īĄńSœ8[“}oŒęåļfų÷Ūß°Ķ6gČŹ-ŪńņpēlŽĒ'&ÓąŽ§™·&ЧﻳHmĆ„‘ŹųĤÜ̬9ĪĘÅŪ<7)“ŻńóŠÜnAģżžY­šøÄ$Ź—ó*Ö¶„¢ø\÷ķ¹r^īvƒŹ+¹¹£Å¹w¤‹³Łå“Tü0kõ¼O‹ĒDZėąiĘæÖ/7k­(ģĻ»ŗ>³P§ø©*ĮÉī!«=j„ŒqÆz‡[@¼Õjm©ąUÓ\=z74„ŒQžŌtŪ@®n@Uv8Źń3yƒ ‘&3āĖIW­ŪÅŁ‰{:·eöŹĢ^¹!7clޤ”4.Mä¼äßĆĒ9yīB”F/÷Ī׿šĶŒ¼³üݳ×ń„ē“…½°źTÆBōžyĆ,‹…© Vr.{Źh½€Ŗģ9|Œ#§ĪęķćWæ0üó‰Ej71Ł~¦łeQ±6Ļæžc.ļ|õKžr®ĪN˜L&›Ļ8ē{IjśÕ§å6 @)Å¢õ[óōėŹ>T«äGģ^Ūķõ²,^qīõ:pü1’ڶ³6v'I)©4 ”fBˆ²©H#–=Ū6¢¢Æ'¾Ž7Ę ’ī„v5?”RÜÖ¼65*ū–v—„­’8 Ī$`„ź7+2Ļ~–7ó¬µ ØĀ§éežRІµųś¹$$„ąėćÅ£½oēŽ®ķūó z¼š6}:¶&°j%²,¶ģŽĒ¼5Q|ņĘ3…Ŗæ÷öLśg {žąķ§“y­sX3~žg O½;ž!Mqr2sąų)¦Ģ_§É©iEz/wµoÉ×ĢåĀÅšÖ ÄĻĒ›Ó♾h|}hŌøHõ]锞ł|ź,īzi};µ”²y2³²X°n {ćżąīĪm3q:=_IŸN­©Uµ2Y Ń{öóĻŖŒ{ķ©"µŪ„esž÷ū?h­©Q„"©iél޵ÅŒ`-ē:õźŠŠ—Ē|E’7? Mó†Tšõ!.!‰¹«7†ž·]ZźāåįN@å Œūy&ĒΜĒĒӃgī»3ĻZY€ź•ü¹·K[Žżö7ö:F£Ś5ˆOLb֊ y‚’žŻ:šī7æŅ’ĶhŅ«ÕŹģ•¹_¼#–ī®.ō{ć}߯€Jž9y–Ÿē,”~ĶźÜŽJ2Ā !ʦ"–Įõ«\æŗ£śRģźTó§Nµk_o!źąŚēlåoĘŽKB\•R-ĄŽģĒ·i‡cėhsV“jtš”bP¹]Z4ĻMÖS»zeŚē ¢œĢfŗ“hNeŪÄ'ߍ|…ȉ°pżRÓ3ø»sźTÆĀ¢ šłŌYlŲ¶›…ė·ąźāLĶ*łéŻ×ø·‹±-‡Ÿ7]Z4ĒÓŻžŚÅŪ‚šŠ«CK’SŅøļ²i°żŗµ'!%•™KÖšłŌY˜M&ŖUōć’žÄĮ§lņtiŃ<7ėj~Žyīa*W`馞Z¾Ž¤”4<Ü\é֌č‹wöö]Õ+śÓ„Esœ²“óŌŖZ™”yMŹD—Ķ©VĮ0Õ,œš’›6›Ķ»öq6ī".ĪNŌØR‘© £[ėĄŚNxŸ/¦Īf]ģ.­ßš{ķ~ŒxĶfK{V·IŽōEųųxņLꮣDRJn®.4 ąÆOF1ź«É¹Y`õꊻ« .[Ėü5›‰KLĀŁÉ‰ŠFuųš„Ē©_ÓöūÉä÷ŽdģĻ3˜»zé™\ŠŻ„©zßwˆKČŻwt>p—›[tŗj©¢ė Ģu@½āe'ól(یąF“™•…OķV–¹°|Z™I…W÷Č[c±X­yö+u¤9«61čķ±™‹c¶BÜD䶗( ŻpLPyXä€zÅ-L2Ļ !J’‡›+Ö¢.ĄBˆ2@KQ"TļļĄõeÆā*$ó¬Ā‘¾łJiwA!®‰–¢¤Ż±nĶ~uP½BäKU NVg?Ęh½Ģ)åˆO°Łdź“×ƽ_•!„BÜąnčĄrǁ“|5s-O߯–Õ±X­ łäO<ܜ‰|én›²Ū÷Ÿä×›ŁqšV‹• Ìż²"'/„a͊¼<Š33‹fŚā­¬Š>Ąc½ZŅŗI`iwĒ\€T÷`ƒź¢Š®žyVwj–n/…B!Š× €āČ©x~œ½žƒ'Œ=·¬VĶ³×3y^”M¹sńÉty_N_E|bŠĶńgÆgžśŻ%×ēÓqŒüf.vĪóŚŚŲƒü8{={ž+±ž”°7zŖūģm'D)Sj Å50d‡[@Č·ī5BsÆØL¦F ŸFó3pšŖ•!„B”q7ōˆå•Ģ&æ¼ū(ĪfŪxyeō~’Ó÷Ź=¼Š’Ņ,L7~y÷Q*śz•XŸ¹ČĒæ-# ’/mšŚŽJ>ѧ ĆźŃ²ńM¹^-`„ƒźN®¾›¹e„[õą=£ģ?$ÜXÅäģÜńVĻ<+„Bˆ×u–©é™¤„gāėķn“b>3ĖĀł‹Éxyøā•ĻŽ_9’Ó°X¬øø8įéVpbŔ“LŅ32qwsĮĶ%o×M&Eæ.AyŽēŒR†6°9īėķn·|ޤŌt23-(„šńtĖŻC-?‰)Ęö‰Žæēü„4ØNHƒü÷ Ķy’f³ Oū{q].#ÓBrj:å¼ÜÆŚ÷š-ąé ŗ.8Øn!Ī«vėS\žyöģnļōŒ”6—ežm \Ū!„BˆP¤ĄrŒռ’ÓB&z„O§,geō~¬VŸÆ=Ō…!t&ā»y|?k= Éi„6 ąó×ūѢфQøcgāyē»yĢ_æūņ}©[½ĻÜŪŽ—ļļhØN_ĶčŸ³ėŠi£Óf][Ō§wū¼>·}źSü|<˜ūésL[¼•×Ę’IFf÷†9{4sŁ„—ØV” ~Ąą^­łč…>X¬V>²‚f­ćš©øÜz=Ż\čŪ±ž§7Uü}r1•‡FN¢o‡fŒy±/Rųci #æ™Ėß+·qęB/č€9Ov8Åäy›ųÖDöüžNf™zæž-OœēŽĪĶiXĪÄ%1gķN†’o6™YŽxø+óÖīāń÷~£nuž;ø;Uż8—ļµ»öåģ<}LHNĆŁÉ @żyŖo[bö`ńĘ=ō驔jŹPŽŪ­5ń‰©¤¤e䞒įÄE|4i1a Ü»5~>ddZŲøó0æ/ŁŹŽƒ§X÷Ż«˜LŠ,‹•»ßüžē.ņā€4ØY “I—ĀŌE[yęĆ©Tņ„sh]:×ĘĶʼnē.2eįŚ5«;:Y£ry朦gŸ˜JVvš šüčߙ±,†®-źóp0Ŗųūp>!…;3aĘjŽ‰gźūƒ³?ćü’ż‰Š†|š|oÜ\œŲqŠųü÷G¶žNŹ¾EłŲÆWmą3Öæ>ū!ÄMKUk™‚džB!DvMSa_}  o?Ł#÷łÓw·£Įż°ćĄ)¶ż6,7xØčėIä/KŁŗē­šŌdžś]ģ=z–^čƐ:ŪŌ;ü±ī“yņ¾š±&7°ülŚ ¼=\Y6į%üĖ]šI9äĪt}įK6ļ>šo?ĆÖ0€f­gńĘ=Tń÷¦a`%›  Q­Ź\LJ`Ūž“ÜݱYžz]œĶōlטē.rśB"1ūNŠ)“®MP ĘtŲž]ƒÆ„ūłŚ{ō,ń‰©ōķŠōŠ ŅpW»&Ō®ęĻŁų$Ą˜ŗūĻ'Ļņ„@ĶĶųÉęģ²×bǁSh­éŪ±©Ż×ūvh†ÖščŪ¤g‹v„k;šŸŒ #ɏÆwįrbœ‰K¤Ū‹Ųü•ż¼©V±.Nf<Ż\kĄ¶}'®«?9×ŹÅŁžĒ”“×rEšZ2ĄzSū\ń8Lq`żBÜT²3ĻĪĪ~äfžÕVÕM{‘̳B!„øF%X:egeMKĻ“»½Hrv0ååįŠ—±ÅGJz¦Żŗ.\–Q¶8øe°9}øRF¦…NRÅ߇Ŗ|ųjĘö?ĒŌ÷ŪŚūėüĶ×՟œk•šfæ?9I‡¼Š9Ą._uÜĘ;€ż_ !ÄUåÉ<{*Ę3-ĖŅ­:€JJ©4­‰nͲ¤żK±ĖB!„(ĆJ<°Ģ™fz6>9ĻŗI€3qĘ“N_/wĢ&¾^ī:qŽn]—oæQŖW4ևž:Ÿ`÷õ˜½ĒéüŸ/żb_^Ų‰Oįēća7ؼ˜”Jr>aaUĪ™źz1Łīė9×Ŗ|!GXKȓĄ`·± ųĶĮmqKQU‚“%Ł{œėū£&„Bˆ›V‰ÆÆiŻŌHTų˼My^»˜”ʬUŪØ]Ķ?c]a»ęµY{W—I©éLYø„XūV§ŗ?U+ų0mńÖ<cęÆß@P½j€17>)•³qyōLœ³­5Vm;MÕĆĶ=—xÕž„5Ŗ³“™ßlĘbµ]Jhµj~]°³É”»mIŠc“ŅŃF k+…B!„(3J|IJKX=Ś4 ä“)ĖY±u?kU¦¼ĒĪij6ö §/$ņõš¹åĆŻĪā{čšģgÜ×9ˆŠ¾žœ‰OfYŌæłN‘½Vf“‰ƒļąågņčX:†Ō”Ŗæé™YÄģ=Į†‡iÕ¤&Cźp_ē ¦,ÜB×¾¤oĒfTšõäbR*w!j÷|½Żs“åØS½å}<ųų·eģ:tšŠ¾^tkÕĄīØ§ŸO߯–Æf®!dŠXZ6®A%?oĪĘ%±eĻQž=r–§ļiG%;ÉzJš`?ÓPńY üćą6„B!„EP¤Ą²²Ÿ7” psĶ{Z“:UØā—7KkyBąćéĮŪ¬qĻ0īׄ,Xæ›ÖģĄb±āķįFhƞ¾»-½nk’{~«&5™7ž9"YŹÜµ;IMĻÄĻǃžķóp¼:žO›d;MjWĮ×Ėvjh_OBäÉfk6›m@Źås=uw[*•÷āūYėY}€”“ \]œØčėŐ:>Ø[n¦Ū>šņż[ņóœMLž·‰,‹OwšŌŖĀ=Éō%ŃdY,6mz{ø29bc'/aÓĪ#$¦¤SŁß›»;6£Röõõræ“ötģĖ÷Š f%¦-ŽŹāM’’‘™…»« õkTą…žx²oŪKŸĪē“7gŽSö{­VĢ™t/óŠĄQ•g³/;ø !„B!D).ŪŪģī”ü4ņįRģŽ(MÕū¾CÜ„„Hó» yźkĄ'锭ńŁm !JŽU×X^X> „J=+µ¢ˆę¬ŚÄ ·ĒTd.Š»„ŗSņFl«L¦µ/čś(|Q*ĶqLj)£ƒ®/ca y (ĻŲąĻŽ–€šm-AwC[w06DfĮ£Ÿ +n:m0ö“t“S@D “#„Bˆ[‚V I–õmĪĘx —†\¬Āc–`¶<ÄGag×õJ×$°, ŚŚÅh”šŒ,Æ*V²9¶ø^=ū›’ÆW‹%ŠŽB!nCc_A©w“hõ&%e#< IDATkmLŹ+uĄŌcöV7,¦æˆŠņł¦a=­ē”vOn62b)®×»ĄļĄĒ~źlQͦ9Øn!„BÜj"ŗ‘’š6†IuetЁĖ^r’ļK©Żp5ØŪHŽm¬*ĪŠ<†Ē–'9ÅĀmķļX±”k€5Åß)!„(»€^@wŒiM .^$'€g‹±>!„BÜźR.¶U˜zEPyÉōĀcfmQ„ry`łfL%ĢźqŠ-±ā€"„6`Ń|ʦ®ˆ(R\žDq;Zū £É,`›¶š˜n ļUpC“„b7˜~'²yT”Žē°č÷°šŅqĪų,ēPĄDd°1p’ļfź4¼Ō@Z;qhµ­e\šAŪ÷”M$oėŅw¢Dć:m:€Ł2•Ń”Ėó¾č® īꔕ&…ÖP¦¹Œi> ”ķŽ|ỽ!mZuGįø‰Ą1“ś“~«ī‡‡ĒĖĄ’ŠÖHó…{ź`Šw¢•JŸF«ķ8e}c3•yXtS4Æ M36hnöµž •Nõ|…/ź§FPkįqmAWDaĮŖN”¬k°ŖÉŒ ¶Ż€>|·7*}šNh*”P(. Õ&¬ś§<æ+łol#,śIŠõŃ&_L: +'€UxśüBDķKŪQ ‹~­Ņ°2Ļ éŖŹzT *ó[Ę“,ÖŁ€’¼GäŗŽä=—s^ĄÉ,w]ŅÉę]g=BˆėwÕä=¾Žž%Ō!DqŹĢ²œšw’īĖÜ|É{Āc_żJæĮ˜ümÕś,Vę3.äOćXt(Vµš2ćßYŖnĄi“µ#cC÷šņzÜŻWcģ÷ü xu š$2Ų’R’¢æ•scżpØ TĢnk‘Įf\Ź®g/( Ø ¤¢ŌAĘ55‚]ēł@GŒĢū'€”ŖÖ>Łeū3&(ū{˜V„Ēžō²€“Łż÷ήУˆ yļRū1Ÿb,gcIÓ©ģėV9ūŲ$"ƒæT~·7¤of_«ż’÷x0Å,Ą'(=‰1!;Y Žźv`_ö9uODZ:µdlÓS é‰bš6‘Įd÷3“‚Ü<œ¼‰hšÄ[š`6/*e_ÓĆŁē®ĄA°t 2ģ’ŻR‹i-ØzĄYąXvłj€?p“ÓmŒnŗ/ß¶s¼Ū“ž#ŠŽ}}\Z€° ‰čš•żžžœŃź,J‡d_+ĘļšŻ(×ÖD6J¼jŪ…$#–¢øebŒZNŽžäŚ×`ŽG‚J!nń‰ÉW/$„eÖ>(ĄjŗP`9#+ģs6Ǭj<ĘžŻspĻ/Lhģ-±Ģ‰dæQŒĒdś€»ūė@sŸ—9”o[±æ扙Ihś—ś14ŗGvP¹'Ó#|ŲütīkF`3ųš-æę0«DaŅ÷āC„²ā<čˆÖ’Ć3+œˆ–¹£ īR”õ"t]"”•7cīÕX†Łå~>j|>·|xLC`6Øwx}ŪD>i~””[C€! c0™śŁŒ ‡o©ę?€Į ‹ż‘1A+Ši÷£TC4_įyį•Ü ²ƒ4ób”Ŗ…»÷(›Ń9c0ƓLȧ!ĒĻć ɉćA?‡Źzž‚’@FēŻ«ohō(”zÅt"š&`6O* xˆ1AÓrG[ŸrĘ×y„цér~g,ę0FjŸ`lóI¹å‘ß!(ż Ö¬)Ģ®fż>0©V6ŁŠļ’ŻLķF‘ _'ÅÆ3°ä²³j”ōNĢ.Us?/#x’ÅTś ą««¶]H²Y8ŹŒ)¬Ķ1F?‹j)^¬=B!„@y?tR‘N‹Ųį“G±”ČąI¹A%@D׬ģ-C¢Ńō³’R”JĄŻgxnP 0.8my…Ėf}¢v߆Ų•‡ķĘN(Óķ…쵋e£C¶ę•†žĄłÅtĒ) Mšy¶Ą™>Š‚R3²ŸÕŹs–•—l>ÆČF‰X,ļ`ÕM Õv!I`)mƔڻ1¦3ĘaąAŒiB!„ÅKi7“.ppi–J€­wPj7ąÉˆĶU²Ÿ õæWŒ°ŒĒ“Wt.HfLČ»µk3m2 ½>ĮĒa‡ķ¶ē */õĆ˜Ź›™ŪNCÜŹķ²_ŽyØēĄcœ®«żµŚ/ļd1®”Ru.5i2¦«¢Cņž J‡VtĘł+^“ā“1Ļ)Ÿ6½¤”©hæĻv¼U“ž°`²>˜»ŃdŖ (“Žd’D„1¦›^ž¹Äī„GwĶ“Yų‹śéŒ Șąq…źWdp'Ę?bsģžßĶ -ÕŚ×gĪ³NĄ¢Œ‘ne*üu)™ +JŹl`!0x c ‰=ÉĄ}óŠ…B!ŠŸÖ(J¹é<‹ÅećūJ~Œi­ŚÉ›}š”X4öƒDĆ9.FŒÄ3Ī„ĒŲOŠ£É^Šnr/dÆÓķT¢ ¶<œo;dc&ķa(•`7@Óōšķ„Ź4d)ū«ėÅ8Rü4ļÜc&ĖB¬¦LPćŪmż7».wō¶v@+ŠŁI:“vÅh¬Ķ›Ķēø½¢ sģ$4ÕŃźuF‡^ "µÅ„ž'<¦>ŌœˆŲįBDÓ Lś+¬ź!PKI‰M%<ęčcĄ1Pū1YŚ“Q×¢«ćd‰²våń]ڌUƒŹ÷=ęsķ-ŗ \E×JKQ’ҁHą`š"¶ė/30Ö#l-ł® !„ā–a" h< ,¾­1X^E³±!?¢LŁ#¦üƒB™*×ģ֔¶ä[ŽHFs‰Ņ@&čĶvKlW¢uL}/HÄ!WR0ńł¶“Ćd2¦j*e*ŅÆÖFąėž•_ĄFHdLŽŲįEJÖJ`3č(4=@uĮ āQśč1x8æ_č>UxĢė z”™ĶŲęćm^3™ÜŃąčłŌ}-=ŒØmtČVĀ·4D›ļǤź¢u Ø@ąÕōC£‡06$’ģĄ/ļuÅ9ečz f[A„¢­)(•‚R©hżėu¼ób!„( ē1F.æ>īÄų£:ˆk[)„BQƚ?“®_`)m A©gQŚČŠ­Ģ©h ˜Č? ¶ŹV]ˆPVĀcā@]9Eńņņ•®oJRˆ yĪž Å ¢V:į±YĄ®Ā·£1FäģU•,—ĒP¬cLŠŹģ`¬īöÆUjv*q„½(S-a@ P‘DY„wS<Ā£[ƒś8Š“Ėy¶AŃ*4hž`lČg…®×˜īœ·üšŲ:Xõ ” l;ą–Ś ؏Ņļ3&ddž×ߌmW8–.ˆ[ŲN 'Ę(å `zévG!„·sÖ*@£Õ@žŹ›4‡¢µńÓ6ć¹õV]³€ŚėøžŹ™®yhBÄ—<%_Żź‹ĪŻz#Ē É]n`¶:ē©G©QoUŖƒ†6æČk·dŠ;“K«/¢”%§ŚYŪ-„†œ»Ū¢ä\9Šq+KD~’Dq3[^Ąbn Ėzį1;ќ5‚™ŲšŲg y’[žĖ=O©h= Ō:Āc¶£9œ½Ŗ²ŠHĒd½4]Q[ǁӃhż%į1adĢ÷†Ųf@ Šćh.%⹘ń+¾ĪOoP»į„GG”MI ½I‰ UX‚Wsū#a…„?Ą”uZ’°Ų waU©Ęū×·偱|f$TōtšJjÖ hõµŽÉИݘ8Ę“”¬¶€0‹ČąõŒi¾Š”±³QōÅŁóį1;Sūj6Äų·ŠĆ’ĪąĶ˜fh^Eń"c‚ģļ­¾­%X¢ōHŠk`Ā=Gé—§Ljźķ|”Š±Æ¢ō_`! ;KĎV¤ZcÕ½Q4F„1Cć(0 „'yÅHӘ y„ĒtDó2†¢=‰‘ŻõG¬Œg\ČöÜņ‘a'x}[œō4]Pō’ŠÄ€õI“ŗ„Zå–’¶e&»“zń¬Ŗ7J…”“7AéÆČHł¬€,Ø—ŪŽFŁ}elÓSŒŲւ,ė“ī “ĖŽ†å¬‘<Ēōc›OŹ-Ń4ƒˆØŪIqōBŃ(; ¾ģ@1‹ĖÖ *ĶÅØžų:æˆV÷ t=ŒĄ;Ų z,™)rG>Ķ*­U[¹D6bhģ>”ŗ|:ź \ާ·‚ś÷ŅSu„7£µ±Ķ‹³kÖ¬‚å^³ ¹ i‹Ņ/j Üh”> ĢÄŖ>c\šŗÜņćBždXt'¬¦ēŒ­R”‘5RKŃĢ`lóß®ŚīøądŽŒé„‰7QŖ šžæsēA’„“ł}²¬³®xß;ņĮtw·’µ]¼7ģEJĮ+n!ó1öŸBQ:ŚkK»eÄĄÓ„Ż !„ ߌ «i#čPŸb²īÄź”„I§£ńD[+€©čWD÷*ķ. [²ĘR!„BQŗF‡nbXĢP“LÄj¬;.›;¶“z©”z) `h\!„„MF,/‘K!nŚDRlĢÖ@PžĘh„J@rŚĖ˜¦GJ»‹Ā>±B!„B” ĘŚŃķŁq‘},…B!„B\ ,…B!„B\ ,…B!„B\ ,…B!„B\IŽ#„B!DiŪ ‹Ng\š†B• ĄŖ”ĢŪŪō”cś“=‹µ"^Ķ—f'Õ¹ł ŻV­kcŅG‰ ŽSŚŻ¹‘Ɉ„B!„„Mėé˜ųŖŠå}1éEÕÕq}²ü&½ˆóūœÖFqŗ£ Ćc딋ߘōc˜ō"’qPĻnX !„B!npY_cÕūIŁćY¤Ó“õ$°8ęnŻBd*¬B!„āÖņ5šuiwćf „B!„ø5…o©¦;A‚vuÅv,,e\prn¹×·ÕĄIß…ŁŗœLu“īŖ1ęĪ™‹ų°åÉ<õGDyģ|&]/JY@A›WŁ|—Ż>E,s"ÅÆ ŚŌyŠ+ˆ ŁXų÷µ­1JßÖ*he}eŚÄŻk˜>Š’§ü›1ĶPtCéŖ(S:VėN<ĖżMJB”›dX̃XÉdlŠLŽÜÖ “n8£ōn,źOĘ'qŠä„ūP:TJķÄ=ć/"Z¦ä©oxl¬tĄźb\S4©n+ł¢~:’ŻR‹Ó}Ę ÖZ €ō'M3é_œĢ°čA .ā~a)ž}P„¢u‘Į1|G=¬–Ū±d­ę氝6}tDéŖĘ•ŠUĒbI™Ļ§·„žāÜ$°B!„·žaŃÆ£Õ‡€«q@?4`R'ŗõ~ʆ®Ąlm |ƒ•’gļ¼ć㨮=ž½³’-˽a0Ķ6ÕK²1ÄtS Šéy„„ ÖJN Ń{lÉ&¦„0IH =¼”'¦…ꢕ0¦cĄøć"ķĪyœķjwVÅ|¾ŸĻ~Ö3·Ģ¹wĘöžęœ{ī4Ļ£›Ł„ƒxā.Š—żUG$óŽ©jFk{߆ųē"øfķE`š^µÄgOĶČO›ŚÄӀKµRPĻ9hXłŽjs¹ē<āuēǦĻ;šx›ŠŗSiXyŽ”é¹h(|‡ ‰C˜ZŗØ©A¼n ¾Œ§iŁ^8ŗ¬y—xż‰Ō Ÿ‡øA ·6ÆĆ „F{< ¬A\5°Š†>A Š?&!©@n„ v šFzūü alVßą9šŗ~H¼žŪy_l£ŲKĆ0 Ć0 cŪ¢¢ī0Ä]ņ&NŽ%éķ‚O7Äßų H<ļ.œŁ$½]w+°'"³€üŽ:.īöĄÉÅi›źĻ®žGÜHķˆO7šöAÜUą†€Iļ <7 ĻžÕ{ÄaMēŠ eŲ¶øAąbeø‚CņŽ¢”ĻOĘ"üĻ?Ÿlš{泃+]Į’S;ēęky, Ć0 Ć0Œm ’½ ÄR§2iäāąx9U3/§”š€Ć5žEĶØ/‚²\1ób…cq.CĄŹyĄ:¤ąŒ¬mT濦"Q†p •s1¹ōC4ń”'Vą×¹–É{Ɗ°ĶĒyĒQÓģ~ē…; '(čt“†.Ķ(Y\Cybß%>{`3ļļ6Žy, Ć0 Ć0Œm 7ų3§öä’å@=°{NYH•xˆģņB³õ”Ķ™ÄXå Žw>gJ“ØL£kFŪź¹ CTvj–‚̧ŗIT*׍Z$ŠŅ'Ż>@]޽9}W @2–.¢ł(ļżn†Ø—ŽŹ•UäĻ ÓIĘŚiĆ×óX†a†aŪBo ńŚ[óŌŲUæ¼ę[Wˆū"¢.ąü ~Śi3žÅ.tźvāŽs:£a¢ŻĮZݹf݈,iĮź„ĄHŖÄ£*¼^ėź{1ÄķŻĀøö Š…漏°¼…k.j”,Š yĪūąÖē)ĖZÅ)½Ęüc ŽŃ¾mE`u›jMØ+ŗ ,Ī[gjكĄƒķ¼ž×–†a†aʶF Ü~-Ō™~!Ł UāŃP÷"‡ćÜ'ų¼…ĒBX¬Ź#ZęĻ4źÜ:D ąĆNĄŗœņĘdb1pōma\>0 \˜Ø Nņ K”—·tóS5· É" G«÷Ę÷·LVÖ¤_H'œ“#%®&, Ć0 Ć0Œmu8·Œź’Q[¤÷†×ǹ?R=ü|pͽr•sĘą{Q²ožN„;°†ŖĮ¹¢ sį:’>8÷0Õ%?j£„Ė ϟ£_ūŁśķīĪ•¾Ū9OĖ~Œ±Kd‰ĻN“šśĪ¼%Ą:üĘU^{:ńŚ[¹bvźĖbpó^Ó±K޾¶N€ˆĖ?†ŠŚcˆ×ŽJÅė„[ÄM°“˜·Ž“‹šä)’ūl¾¢˜°4 Ć0 Ć0¶-Ľ  ¼ö„č īåµ§āÜՄIz4"Ö^ÅwßʓqŽ®Y-ŸÅńĀÆł¾ž€Z|WĪŌ’Ł­Œė_”ׇsUą~d$ßYŠ0•uÅW6¹näGÄkæ L÷CD¼`–!2 Üö8~¼Qs°±Tļ› žü8脈šåÜJD¦³v]īśŌõ©iz„ ǃ«¤|“_X֔½J½;ÖĆ0 Ćh&, Ć0 ć˧p*"æEøYŗa†a|E±}, Ć0 cĖÓ8’ßJ±’ƒŪĆkĄmØ· ˜¼»eĶ1 c£©˜Ł“†¤pÓč•mбy1„a†aly%ĮgOLT¶—żƒO6끁§§€Ł@ĒoźnF~¤š-ŗ~ŒčhSŒĶ‹ KĆ0 ĆŲņĢ >SŃ’{KIƧ<(ģ8Ó¾r¼ ɧ'ózŪ&ńŗ A&#<ŚŃęm žø ų%Č)Ō”Ķčhs67&, Ć0 ćĖ% Ģ >Õ@7`4*2æģÓq¦m•|<‡ ÉGkŽal-HŠG§Ž¶Äh#NŠ×łz¾L4ai†aĖjŅøJšgˆ= čÓq¦uk€—HĻÉl@:Ō"ćėMEķ0švĮ—bb,ĒóęrķšĻÓå3{ā:ķNcr ׍ü(§ż…3 éÓ©ß5P3|^ŗ@õūā³3Ī/–ó_gŅČÅĶŚWÖõ†°.õ׏XA¼~(¤†"®ĒŌ”¼ .żw |N±XŒ”ģ¬AõžnTÖķ€+üIC—¶mÜswĮm‚ļõCd1>aYņu¦jlVoB} …©uL*{›Ėęō¢Š€Š•YĄšõoå]+Y1³'R0ńśįÜ RėēpŻØ%m² `ü‹]čÜm¼ ŸrķØĻØØNŹß/ö15Ćg¦ķKt%ęöCčƒųI‹X‘œ“3މµ{Ņ+bźš:āovG֗į¤?ÄVk¬Ķ¹/!U3 hčW†KĄćd¤ęQ3ņÓęó”ŲŽ·3Iy“n¬Nķ‡c'üä«x±¾ÄœĆ÷wĄóö ².¼Oļ3¹dyS?cļ±Ūž%$„s1)ė;Õ1mŲ²6Ļ]ak< Ć0 cėÅC×!…Bó ØC-Śü¤€ZŅBņ9`C‡ZdlLØ;Ļ’øŻ³Jäi’±ń›įóó™;,üا¦4w]`EŻqˆ<Šø[™Rr±ž›s<āŻ ģšUŪ÷ŹvĪ IDAT;Ÿ)ĆOœ ܇s?Ed,ŸIāŸŹ”ļõWŻ#Ē$œĖ”Ņ;Z÷ÄŁżIÅīމ(]‚s—R]ņ·¦3ńŗOAŽĒÉßw5PœQ "™RvS†ŽxŻÕ@94ó¦&¹ē.>‹œĖL*j‡!īuÄŻŠ“}ƒpīT—üˆ gŅ«p*pqÖuĄ¹• WS]:5=ŽÄÓ@ā®ĮÉ5hRµų#+/i&H+j/BÜµä¾ąąI ¼s›^BÄ?nW‰“q*"|q·“Ļ”'ī4¦”Ü@yā|5än9å#īoˆ\ĢŌŅ5-M[GbKĆ0 ĆŲzńi6Ūżq ĶØųüŖ‘¹Nņ)`Eǚcls”ĻŁ'ƒkŖ÷Ār<pß÷} üæūsķØĻˆ'žŽ¢¼~7¦ ÆY_"'ŗ PŸųV ī*y8o%āļ€sǃœ©»Š-‡2ū™Šø—Aα_zą¹³€SqŽ_€o/ÆäHąt„ßį\­–„^juģ©ŲØØ¼ øĻ­@čŠų»ū"b|ķ³L+ū$£Õ~ˆŠ“«‘Ų,\j?ÄUąÜ Äk_”¦ģU*"ī œWƒųļ"®øQ8&¢’Ž}ÖŖ!N.–“@ę!žz…{N~†øgšü»Į›ļĒpnā7…xŻgŌ”ü5£·Ž8©wā?AL6ą{»”āō|z~TPž8įŸåų¼Žē>pņądRr9]&#Ō7ćų€¤’^ģĒ8ēį8‘“p܀ø7ˆ”ó9!ń ÓAźĄ™ø$;"œ“sš˜ü¢Ķs÷%cĀŅ0 Ć0¾:¬%-ČścP‘y ¹Ž‘­…ÅĄ3¤īä†ʗ‰ó.ŠwJDā›;‰':§S>§Œ)#jQŃxžœŌ4Õ¬šQ@ߊuųóxž8 Ī„¦ä¹¬¾ļ ž(ĘÉ TĪŻÉĆ2·Ęy—®KæIÕɌsO¼HüĶīŌ콊š²Ūˆ'Š€ÓqīIjJžÆ£’0—šŅ ³Ī?G<± øF™Ā²ß}‡©„Ogœ{ŠxŻĒ Įq$ ĀRÜ%ĄjRÉ£³B_'^·äÖvŲ šPFMiz}õų»—óųšĶ£¹ļ“꣠/Ɛ’}„óLa铨)¹2ćÜ3Tͽ‡†ä{ą.$–Ž Pļõ1T—ĶͲéOTŌ=Č7¹bö®ĶC¤åEV$Ēd…āž€ŠŚ>ąNĀ—G™Rśd³crā"c™RöN³²ń/žƒĀ®Kki¢:šÆā[NĆ0 Ć0”ÅĄ}ĄEč–&»¾Žõ†ø N¦c¢ŅŲ:,gŹšĒ"K%xyć¹}Ųą?¬Gä”fõÖõ9 čÜC•ó3ś^@uŽØlŽ·ŸŚ·ły¹/KT†¼€Ū0Øå!µqxīp¼‚ļE;§bČŃ?«dS‡’+§¾—śvĖ`ŖÄ†’‰\OŁ»æż&óf¢ °ū0ŌóyoŽØųĶš·p2<§ĢÉ]9ēŖ†­Öū";0!±]pvšQ„ØT|yp”e]`zĪśĪ¶ ®’ūo÷“ƒÖ’J Īlwæ_"ę±4 Ć0ŒÆļ£ām:ŹH‡ĶFö:¤Ķ‡Ģ!ķM}X·…®e›Žs}ÖÆæź"*H°žĻéZĘėG¬ ¢īQD¾GÅÜ]Ø6šžĖ+}€¤numJüęė$=>¬®9öe3duĀdf1”¾„xŻOķĄļ„x½šüΈŌĖv>-n–@(d½k¤pžjŠU³ś+ŒD'é™6lńDūžmp.·/IõĮ9@vĻ;ĻH!QkQ»ō|/·.ąÉēˆŽĄ"p=@ņŻ“Ą.‘~ĶĻūmOPԜĄe$cĻOü‘pī#„$ >äŗa[żK9–†a†ńõ$Eóõ™]I Ķ‘lZæĢu’’¶śŒ…†Ń„Šd å°L‘t¢Ÿ»pœ„$O®§J<źOy‹É%³2Zõŗē ł å™k–šüœŗ[‚Šŗu "A’· d=āր«Ł%¢U®W0 ÆsO}ĻDK f¾hÆÉ¹×”—Ī£;äģėVĶ(Čš'©œGŲz«ōęHO=–ī“aŒqs~ ¦ō!ŹkīąRœSę€Ā$Äkxr“G¼¶Y®·0ai†aŪkh¾>sźÅ<ų6°S+ķWƏ£ĀŅ0¾¢HēŽĄqH‹ÕŠz¬mśsrõ#tź¶2‡½žµ‰ƒĄķ€Fd’DÜkÄ"³®¦YSܰq¶ońśQˆ?qϐr’„Œ¦©L‰ĻńŻææž b…€ėŅB­^“'yO‚ E‘ŸóžŅbŻŖ1™¢ø€Ŗ¹ŻØ¶:·Oæ38HłaYŠ–²p;ŠUÜz«Śe{KhvŻ›{oŒĮ{ķ€ų»āy;ć»R—ā»ū@Gz·LX†aʶÉēčZĢū‚ćĢż3A·H£ĻQėæ ć«Č"DśS]ŗ<²“²n>G³vÕK@= ėÜ≁ļóó™;B³ĮĘäoY­įŃµŁŽ„™L¬Ż“”7†nkŸŽÜ,£i+’:PCH™’#*!ė܄@†łļ/gš^>Ž"ĖĒĻķÉ΁Ǣ@ŌäēxāDœ@˜8'¤!¹#šVD }¹ęba(ė2TG#Į$āoŗ ¼vĪu£¦tR°ntAšø›x¢/pWĢŁ…ė¶Īµź–¼Ē0 Ć0 HÆĻ< Ųč‰&!©D…„‰Jć냸™ĄĪTŌ‹,Ołē”¬Cš×Ä/ÉĀ“w20‹Ieogu>‘=©¬k޶©ow>Č­4¶%Š2Ž0ŃNq+5ÓxMį¶]#Ė}7f“lRAō:Ā”TÖeļōŃIƒŚM²؀DZ‘ÅUs;ÓłyŽwO8%·žĢbŻf†…L-YTL»2±vĻČkˆ|K’›×f³%¼g^ī=sŽ1Ą•AĘŪ(t|”Ū”% [óX†a†‘ĶśŽ6Ą0¶(1’V|÷#pOP^w0›«Azās P,$%O7k×ełæhčó90Ų ä¦œ¾E~‡sgāĖæˆ'¦į\-Ž5$é'?>¢[,:kl›ńēƒ"•TŌAŠExīj†ē:Ž—ĄÉ5ÄkS¤|õ˜ŗ‚xr:šƒ` m«¹Ü ÜLŠ'ˆ×NĘó>鉸Qˆ\Ez•éĘS=ź *źž‚Č‰×>īÆų|¬I‡üķiH^ wuVKĮń+ā‰Nx<ī |L—”/Ō®i¢N~øļ‘rSžøä=“n ČYĄ[•ĶßäłŪB˜°4 Ć0 Ć0¶-&—Ķ!ž8įœürĪ4ń>p6SK›'”©:"IEݽˆŒÓīžœ¾§Œųµē"n*p"*„Ņq‚oįəT Ū°IcčŅé)’’ŽBäÆŚæ?Żr(šÉ%³(ÆżĪ] īb± @V#üĒmxnū¶«¦äwÄėwĆÉ„ąĄu¤0ņxŪK—Ų„¬IąÜYĄ÷tüBŹėćäO4_Ó¬s«šżėpīJ|~•„q露ąšŽŖGü“x"üĒõąšWžMać9ķ²9¹ś »¾‚pž@Ź]ŒgEćõō*Ü'?Ęą{¤/(óš½32¶µŁźŲj]©†a†a†±E©šQĄš>%8†€tĮ¹ųžĒt-«Ėū~ā¼¾Hć „ T—Ōēļ{n'üDćü"„åHl>S÷­ož©!£ChÜšQ䎏ćkw¤³·=EęQ5*7įOEķ0|ƒėCĢĶĶŹPĶø—{PÜłPp½ńiıß½ŹŌŅ5TÖķ,gr‰&čšP_‚4&¹nä9ż\8³>JhL.įŗ‘Ķ׿MœŻŸ¤÷ ĶąźVBj&5#?%žŲ <ÆEĻ*Ąų»Š¹Ū>ųņyĪ>–™\1³^ĮH<ל‡“…¤ Ž`ʰ…ĶźÅOćÜžT—ōdā¼¾$7ģs}q¬†Ųœ¦-d²©šŪ5©żšü–“Š%rÖØNHlGŪŁš.Õ£ZXw)ŽŠś}ńż]ĮõæŽ)#j›Š+ėzćĖHœōE\„ÕAwZœ/Ć0 Ć0 Ć0 c O(bmĆvtaUĆVo|?3‹Yٹ/ā­”ē>+Ør~ėmęvć‹Ęžō,ż¬MõCnŚc=m{łÜķI²iĆr=ėm”źƒ"Ö®ś>"‹(īq!5„ėrźL-y‰xķŸĄżŃĄC‘}Å뇂’°—:ńr<ś¶ĘŅ0 Ć0 ĆŲ¶˜Ųē€ßSS'^{ø‚ŅīØó%‚YÜøU£ZģS×Ķżų6PœQņ9"÷³nŻĻ›‰Ģxbš5„„Mē~^?€¤5š] ķ=rn%"åŌ”. jn'’ AīC¼§qr5°WŠbšĪ]JuI}3;+j‡!ī*ą;Yv6ąx a74L÷6jJ/Œ«ŠĻ÷’PSśŻfeńÄŪ@?ąłˆ²7ŸšŅ}U{ļ#<Ɣҳ)Ÿ³Ī{%ØŁč„®TĮ“ŃL*{›ņŗ89ŸQxÜĂyzƒ”%SĖŒ“;› gŅ«ÓU Ū7› xß«dźšŗfcŽD܍xRŒJ6µ8¹‚ź²Śtķxb š5„ĒP9g ¾÷wÄ]ž.87G‚yxˆX§ńLŗ4h_ģĢSW`M`8WAuÉmTĪŁß{ų35„?ČkĖÄŗ½I2‘™L-ż §\ŸĖ—€ķń9‚©„ÆOL®E8—)„w€y, Ć0 Ć0ŒmX,†¤zƒhØ„[JĢa ŠĒÓMõ—öLµŲ_Ռü§€=»qĢ·‘^ĄĮ8÷ŗtéœÕJO%8^Aų;"Ÿį\_|JpœģOÕĢ’ ‘ŪÜ 89įw‡į8‘§÷ņM‚¶jf1 ŽS Ūćød6Ā šz"RŒ qœH—Ęåµõ¦Ń+‰'>Ž¢jFUG$ج‚/{‹qn cļqßi©Œ²” (ęš„7Žn$]ļĮĄ®Ąó8Ö°Ž5ąń4š"’.‰c_DNÅs÷SžƔŅē[¼g½:M¹xäÕnÆ"{gāłOS5wH†'“ŽŃ89ēG|°āöĒqā§bī>T›ßźµu}mz}©_P~o}AąŠīùzįq""ßĒo“xG_|7'ū#ī <łPū’õŪķ Øą©ś ˆu«ā'×±Ā_ĢōQL*yx3ŅŹŖ™Å¬õ’ŽÓ™ZśJd=LX†a†aŪ:ź•: €xāYą ŖKOksū5}ĘÉ^Ą’Ff™×>‰óŽo±†¾'€”æ§ŗō‚Ü>ꮹœ†‚S€;3J"Ē”ŅĒ›×Oüø˜ĪEG*€ Ł'ÓØ.»<ē剹8®Adu«Z˜Œ¤”÷HąU„ŃZänAä*†ģ½ S_Ķh—Ė“²OļAyŻ8ŁRQÖt|³³u ņWœœ“.,‘ó€).8”ŖašÅs€›Y—<Č̘Ś8Ÿź’?4«_^w%N®FR'æmżŚy)¦QJ‚łP.œłKz¾ŠČ·˜8Æ/“†.„¦ōǁēĀÉĶT—ž¹YOŽŽhõr*g—ѰrƒōŠAEŻų2ßśmÓK€*ńhØ»ųFཿ%Ć-ya†a†al Ī-W‰‹MĻSį#Dz0!Ń5²?>æ,O%!ćFg•¼•#*ü “×s»7“ĄC+īŻhÜG ½ņŚŁT×Wč8$Żæ š¾Ü®Ē˜Ń"–^“°l/©Ōõ9ēŗ,½HŌjūŖઁņQ ą| qŪg•,gEć¹õƒłv²{NY»ū›‰J€é£Į= @憶÷ļŽ`‘‹īB$…“*j ²3Žė¼ēŸsŚ7ŌONn£ŗ¤¦µĖ™ĒŅ0 Ć0 Ć06…šįó€yLœŻ?Ųž”¾+鉓žčšIˆ5ę’ķ-MbnQdyŹ}Ŗ+ e`VIīš8€˜k@2×QŠ›‹Ć¾Ļ„ÄżL-M_kāģž¤ä< ½yyķ iX’<]ŗ$‚m*ÜhÆ1µōā‰OĮ „būP`>S†æ×jß­“¢ūˆsĪV‘$žhéÜj¾[Ķų»Æ=q}ĄuĒI1ŠA“Óˆfµ\ B/Ū¢Ęb±“xßX\žūéüā'őå‘m\čDÜ‘c˜RödN+fö#Vų ø³©Ø½„ihCĒBā‰ĻŠD?ŤčÄpīĮš»–¹iōJ*³w0ˆcüKE@)HuPćeÄ©ĒR“æģäzś6Žd»²°ę£¼ö‡8wŗvh–x7Ÿnū|o.¹ūZ ĀŻ‘¢ąŗQKˆ'¦B×o¾@Eķ17sqɱ‘B:–†aĘę¤3°P„ž½}›žfd|š€žĮŸ—·TńK¢3ź„YĶ’Ųfz”Ł-7nė‰/—š^~Ń”V|•X“ś Īü›Į}Čz=½ŠbkhHN.i¹QļRŅĻö)_¼Ō™Ā®ąš%±i;cļįx‘:|w,19q»‚tFÜ:<·‘ēØžļÖ; šŻ œ|ƒųė{#]ū… /ąx 8‰ŹŗŽ$żCŃŻ(6Oģę |Ī87äp“:]#nE±FÖ4„sOt“™›„ų‹qpļ“XĻÉ{ˆK‡żśīh1 +Rų/ā‰ˆ6lÆ/Pųoā‰Ÿ KĆ0 có0˜‚n*ž“xØ^śR­2¾,ś Qשƒmųp p š÷Ž5„‰·ż:ڐ6šše·Ž6ä+ƒĒ±ėh\sÓZ›S^žčֆMž!ļu,uÕó"÷rb׽ЀąŠńčFcģÆōš–oŅŽž’ ā*qrśņDšŠTX"/ƒsAB]_é ¶aéyG#Äš‰3µ4w{’ µ]æś3Ź[ąĀ{óć»ĮXõt,ŽJ{GwŻō}1Į–0&, Ć0ŒM„š4°/0xčH#Š}ŻŽĘ/~‰¶<T£eŽīžø”ķ|ŌS¹µx cćēć$F•xm·Ń×=\Yīن^ŽŅŗ©ż€Ü5ŽNP§_`§½L-]CyŻ_prš>4ųO4¢—ƒĢ÷Ö®ÖlĻĶ|¤Ü xl@äPœė†Č»Mū,nh˜Ea×Fh–ļµq@tŽ]ē-§UDŠUt¹Üžū*¼BēŹA”®ū"õ*½¼'1ī’ę¦=¢ŸO8JæÜjJ'“Z¼lzĖrŪĒŅ0 ĆŲ\œŒŠŹ{3ČZ¤pźAšŌ’²Åķ¦%SŲv(D竨µŠY,śl~s £p, u?„|ī½øŲV¬^×ņ:3yÜ!¬­Ÿ@ÕĢß6mÕQ9g)/Žž ©ĀüIebž?š½ÄUSQ· ‘Y/[HCĻķX ŽėĮ÷r½kķŪRœ›ˆļ†£7øŽ@oDśćÜH Š.]Žoµæ©„kˆ'^A(‚Œ½?§“–ņŗZœ”··ĆR]“*—Ÿ}#ÆbmlC ĀØżˆ7'ąų?Ÿ™ąŚQŸ³;nĆˆ\€s[CF~„Ļoć™L¬}žTŃgųė}¦–®aśØFā‰ėqTŃ„įiŹėnċ½‚K­‚TOÄķŽiˆ\ |„/’·)¦˜°4 Ć06•’ąūv¢E%ĄŻØ°šqn*`ź‰^ƒ9 ±yČü11õ‚vÖ¢į: 3įĮ^AłžĮń¤C?dŌu-»]UhŲbvņŠ¢ ŽgĄ§@ip܀īįīµV†n&½xõą¶…ĄNØēbpp`ū2ą¹ąZ !g‡}ƒė>ĢEƒ€į@ żGč|eīW¶w0ö=‚ćIĻ×Bą“ĄŽĄh˜äAĮńŒ Ļ²ĄęōF܊CŸ‘ŻŃ{Ņ€ŽƒWh~_3ģ®õ[‹ŽÆ9h’‘öRōوĪmŃĻŖCēj׹Śėƒ±Õ’š`t|=‚:+б­h£}į=_KīÜmŽ‡^čŲ?f‘ė†zēż€o /}ęKӝ›pžg”毶’Nœ;ø—¼’гą :ł €Äjpž‰ˆTÓPx-ńÄJ  >E8VüÜŁHŖłīĒäÆr3üĄoŽ×ØphÄöÜl?š@g<ø‰T—Ü–·^<ńp2—ĶéÅõ#ZŽĢ@ܕĮ_©—›•y¼Œ0Nė¹¶‡ĮĘÜŻųņp«€õPĐg+–”ėŅ'ičópÉĀO‰'¾Ä{Gōł:p.Ž *Šfl“Q7\‰†ŻžĶצ%ƒ²¶„āž…¦ķ’p1é±,Ę¢"äTf– <›qnšńPrłų1šPp|*äBĘ€k{~\Œå Ņėn¾‹Š‘£B¦$£Ÿ‘ĄßP”ŸĶbōžd¾!ļ¾„82¢žR`<Ķ7†oo7”¢2“ŗž23ėćnhpYD?K€ ²lü8:¢ž:ą×Ą5­Ų7})ŠųiaŁ}.æŃf2…ĮØŲücpĶL}#0ųeĘ9üPz©Cø¾ś+ĖZ%•ś ĻU‚7;§lJŁ#TŌ–"ī›ąv)Ņ/-0eų{\6g(…Žq e8z!¬Ąs"< ±ī õx.ó„@UĪzɚ’é\^’©ćĮ 驿š>Nž`ņˆ›źĪ›bšŽ• Ń{RnH}D”W‰¤tūˆ$}‡óäˆ8Øk_Ăøæ€Óuš.öH³2ēߎxŗ'crCsa^Ō}- «*‘ū'—ĢbBbž;ńwƹÄü ƒŒLĒńĻģłž,nÕīŖ#’Œ½÷xvŪėpÄČ ‹‰łOQ“b }?DØO÷-Wƒ·*²æ –Ó„ø!"ÓMĪM’Ó¦c/ł~¬ńŸĖ3®gtÆŌ‚ęŁj§–®aÜĖ£(*>Įų Ąó_h*WOū©¬›‚ĻŃąA¼^ «pn øŁ|0ļßÜwZŠö1\%"M‡¾ž’p†a[šÓQ1p*ÄŚŗĪn$ź!yˆÜŠ'£?–ÆCĆgA½@„čāŠC× õøüw;kŠé; ø Øą{8č§M"ŌõLSQ¹Ųõ^ŽŠ™ŻP/ŪŽ¤×==ŽŠ×ĻQOܵØxYŲv*¦KŠõнƒza2„|ŒG…„®q|<øöąWØŠī„ŠćēŠWĪß Ś½MŚ#C½lCßĻ£¢Æ/źŻšˆŠ÷’ ŻIĮ|ģ\Š&¼ EśTä_‰ K€’ ÷ü½ |!źUĶ–ÅAß‚1=Ō)@ÅQW4D0üay?zļ§”Žćbō¾_Ģć“īU CÆA_FÜ |ˆzžNDŸ‰zŌó®”{}–~ <Š øīĮ|]†ś$Õ”0…õIDATõQą8ąžą³ż]µ7śģģ¾ø?ØæˆęÉ{vędĒĄ¦t!ü]—|gpłĮ\ķĢŪN蚨Šō&0$˜ÆkŠæ+~Ƽ l}<Ø’Tø&‚±½…z-G ĻkōYµä=_'ĘŽcš^õč³ł³šŻZ+p~7šz"r(Pņ5eßź`‹ Ć0 ĆŲĘčŒzZ×£?®OGC&ūęiū>˜jō× æŅąø_p|cž~¦åd?,8_Ń抠ģGyś¼:(?%8Ž;8~ÜˆŸs‚²™¤ć‹B~”Ÿē:™ŒźF%Ī ēä×ee;Ēßj”PĮ5/Ēē+"Ś\”=Dō‹éehˆiö5¦ä±įĢ üēĮ±C_ ä[ćó3šß–ø(ØūJ[o ŹŽ{Ēł¶ųqPzuwA…Ūóyś”?”qnś"ōy~}9’żć}ŅóÅØ üĻēŽ Ī}'¢ž±AŁäŒs/׎>¢žÉAżĶ±‰½±µQ>w{ā‰*/O,#žą“ ŽēP‘ø†q/÷čhSÆ k†al*ėQ÷+T˜œHī’/‚zdŹ”Y˜Šōąs:‚*TO@=JaŻ0UzōĘįź•¹Ż·°­„!µ÷ę)Sū b9äErĆ~Ćõ˜/‘ö€…„^Źnķ°ķوsį5¢²ź†×·)|·46бµ—?’-m&”gī±l˜•qģ”÷>ß=¾õąå+āa¢m}ŸĆPļk*Ų–äé'żƒļ‘Į¹Góō’>šŃĻcOŌsøš=r×ķ…Ļå=yl™ō;,ėüźĄžl^ ¾wĶ87 õŠG­ż}„–ĆŚÆ2S†-D½ŽiŖęv¢j˜ķ5ll2&, Ć0ŒĶĮŅkņ<Ō²#ī·ŗfīT\īƒ† ‚†Ļ^‡züBałM4JęZŗQa5MČózpī4,ņ4QN{胆ķęŪ“<\——½§\TrƒpmJ”…f{–ŸD‰§šQ×ϳa†Öļ‡DŌ½ŖŃūåµĢŅ6ÖŪ.ųž‹=:ŌsYķņ%Å}ɒM1*ÜöEƏ£<¤į½; y"Iī‹Še4OȆ¦‡æłĀ1åŃhū=6¾˜Ø46&, Ć0ŒĶ&‡ł4ćÜ4ąѐĀ3I‡“®F“»\„†¾ƒ†:¦ŠŠĻ0Ģļ4ĶIY×\ō†·¶…^hā’É­Ōū*nUŅ+ų.o„Ž–[˜¤=bšæPĻóŃØ0Ė +N¢ė:Ļ'6Łl¢“l¤ÅyĻąŪž¾üšŃī$ŗNv-źÕćņu°†2¦å±Ł‚6„ŪŸtm”Noš{Ž?D×0”YSE“B=>#—¶Ć†^y·”ÕįV '¢Āń®Ą¦]QOūHtę]YķĆmOZ[÷ˆė/Gsż;³{D»šŽIĖ÷n—®Ż_ß-½TčŻB™aF$&, Ć0ŒMegŌĆ“k+õB/OvŲÕl4‰Ļ9čé>än)Q†z‡ĒėŃä"Ļ kžBļ΁ķ°ūsTę)ßMbsT;śÜZĆOó «:¶3¶  aj’<å}ŠšĶ0 Ķ ō‡Ū£4¢^½Š,»§”ŽčöÜćØä4e CbƤ<5¤³¾f’=†ĻņœĻd07āü{h†Ö®hhx¶@ ļ]Oņót;ša:Ęó”‘Ē5 Ćh3&, Ć0ŒM%Ü/ėbņ’æāHgóœQ>ͤ9 S|0«¼/*„¢²^BŚė•ø!«<“×Pu\ž>æ IpÓф [NČS>[ö~‘-ĶW{y-ųŽŚ‹tIH'%*DļńYyźwCŸ£¶†|‚&ljz&ĆPźŚą;\›˜OˆgļU9+°ćD¢×Īn‡z‹ßŒ( Æū]t+–§Ń—!į½Ė÷¬@CÉŪ’7sŠg Źėy2¹sÖ õbn̚\Ć0¶l„a†±©Ü†”žƒ&%y õč,Bˆī„ž/A÷Ė»?¢»Ń$>#Poevœ™h_ø’bõģ į„ćƒzŁHē£^®sŃusļ}Ļ®S‰nr’[tŻŅū&NźFŁ»µó4ŗLź™z Ć쌮e½ŒÜ-+ ½īļ|Ō›÷>ŗ–/*Kmk<†Ī÷t]ߋسõ@’ ū ×Ҿ|~„†š¾Š>G>*Ņ~’Ńo[)AC°’Œ&ꁊĮóPįŠßšåČMčv.ļ¢BwGtŻg˜ˆ' }żŻėóT4ó샤C·wG× jĮ¶gŃõĘ÷£a±cŠ„:o”aæ?DŸÅ’CŸõB4*ąTųeß»öšæĄįĮu&£k›{£÷„’\ń~ ŗśy4“a†a†alvB·GX‡ –ģĻt닁ł:@×± š6ŠĆHļחżY‰&õH…u_É(ū*R£śü0Ė–pĖi×”MŠ( ÷Q–Møå±e?Ź(»>(Ū;ćÜ®Ø`ńÉŪRņļ«y#Ķēė™ą|øå”ŃĶrö±]OūRÄõK§eÕŽŠ½ØśkŃ=1Ū’]7ÜĒņRō>f÷õ4„;“j¢ŸßOQ±öŅ }ę“mŠķw2mĶÜĒ2“”÷h6ii_ōļKTßkŠķu2ū~ų Ļ\tŚŻ—u¾"°3³ļ:ĒĻÓ|ĖpĻŃēņ\Ć0 £]©Ļ Ć0 £5ŗCŃPĄ®Ø—q)śĆ7j›ŒØ(Y‰Š£ØmBvCĆf{”k-?EC [Ś{oźIŚ4/d•Ź{” ]>ęŃÜsS„ī’·õ~eRŒŽ{!ŗJ&=P/įņo½‘iēNØ){­_ø…ĖŪäfŻó¹¤Ėd¶Ū臮ƒ…A½–¶Ųč\¼„†kD=jQŪŖ”}¾Q¶ ŗMLļĄöĻŃ}Jóݳ]‚ė÷E×Z~Ž ƶfƒķō1/h32°=‰Īß;yŚuC·@é‡ ŁĻѰQõ~.F½ą™ōEŸ‹ķй_Œ-ūy/Eēg^Äu‡”ĻWö3ŅēaŗÕNvF×aõ}ĒŠ{³œō~§!]ƒńöG’®ÖcÜ=°ēõ ;ŖŠē8_čøa†a†atsI‡¹śĄŲŽ5Ē0ŒĘ¢L ƒ5 #/ę±4 Ć0:’ūQoÉ2t=Ś?:ŌĆ0¢šh_Ņ$Ć0 Ć0 Ć0 Ć0 Ć0 Ć0 Ć0 Ć0 Ć0 Ć0 Ć0 Ć0 Ć0 Ć0 Ć0 Ć0 Ć0 Ć0 Ć0 Ć0 Ć0 Ć0 Ć0 Ć0¾6܊ī‡wźź’ąŁ-Ō·a†ayš:ŚĆ0 c›b0č¾…śß%ųķē—ĄSl¹{c†a†a†±YŲ Ųč»…śŸ|°…śžŗs @ŸŽ6Ä0 ĆųźQŠŃ†aŪļµRŽX|¶ ƒ?Æ¢BlSéģüy5°h3ōR lüy%°d3ōŁŲ.ųóbŌęÖčōBĒ–]ē Ļmģ+ŠŽĮ`)šEŚōDŸµ¶ÜĖ"``šē5Ąēg¦a†a†aQL@_ž§|rP~fÖńYõ¾¼”e~Ž.h‡=™Ėž€ü3«Ž‡ ÉS¶4ønȞĄCØčÉ“m)p*Š6†€Ąś¬~?ŖHæüŻHuyś9+hw}ƹCē Y} L$½¦ŒÜ9Ļü ĪčóD`&ŹŖSü ˦›ƒ²£ēŠū @#p*æ ¼›ŃO#p/iŲP |˜eĪÕ)YõBEįQAyf›Ļ€rō…F&#§uYõæF_6†a˜ĒŅ0 ĆŲ4īŖŃńæ‰(?ż1’P } Ü|„®ó ½A3€éØ7ė±vڶx8!~p~Ō3ŗŠ‰Š[5 õ®ŻwA…E?ą/ĄØČŲ8ų)Š 8Ɲ¶ śmnA=¹)t źiĄÆ›žĖO B¬ ØĶź+PwßC‚ś«ß¢BŪG½¢g×¢‚ó:TOŚ}’FÅ.ĄŖąūDąĮ žmؘK»¢‰˜nGēńö,ŪBÅóUAżļć ž€ĪįńĄXŌ³z~žyĖä€_曊ŽĻ®Ø? ķ=x2£Mš0š *$×c ŌĒ7uū’ ž|śā#‰Ž£S‚kĒP”n†a†aĘ&ņ *f/EÅŃß2ĪEy,’œŃ÷Ą lZmÉ^cyCо4ćÜĮ¹«‚ļ½2Ź. ĪŸ_q­Tl,m£m™Œ śżVDYT\ĶŹ8÷Ż žŌ¬ŗ]Qį>7ćÜÄ īA}÷C…qTęܖÖXĪACF£#ķ„ ŠLBå”¬ŗ¤½”Wf•”žĆ¶„ėvB…óč|eSŠ>“gœ{(øī]õ·–”ĻOČłAżļFŌļŲ97¢Ģ0 c›Ä²Ā†a›Ź]č’''g?9£¼%ž\ˆz³łŪG”µ…Į÷”ēF£Ž­»ƒćL‘{(*&ž ŽūßoDō~\¼vµŌļJŌ«wUƹŸ !űŒóĒ”ė(ļĢ8×RßKPoŽ5ķ°µ*Ō¦¹š YüJnXš½YĒIŌ[š¬²uhXm_Z’}²wp­ŃłŹ&†»Qv[Ņčļ ģœki× ÷¢²; Ć0¶,Ö0 ĆŲTīGĆOAC/CNA½@O“ŅžŸØXŚ ‘섆F#‚²X¾Ę­®ļ;$ƶ—QĻŁThž)(;x^×8 ų}Šę4l·]Ēø1$‚ļŪQū*Š ėń¬śIąØŲ<Štxē)ĮųžŃ÷_Ń{ó^`ó4Ōó‘vŚŚ s]‹Ž£(ƒ:=QѲ,¢nfåém ¾³×:fÓ3ų^ÜB…hčp:§!łÖŖ.¾ū¢óĪćmhtx>ś{Ŗ Ć0 Ć0 Ćh'”ā'Ģŗ7źł»5«^T(ģ(r°„Ÿ¹AæŁžÆ|Dm72  ‰a| "8~˜“€\óę¬öqŅÉ~2?KPQ<²¶eāP±ŗ6¢ßOŠ7»eµŁ‹;‚ć"Ō[÷Ƭz1tŻfvR 0yĻ_ˆiĶ »_D?ł>»mĀPŲģ1€ d!7tt>…Ö_$Ō»“…:÷uzĒa(lē<õ+ƒņƂc‡®n wœŸ”¢}ÆÜn Ć0¶MĢci†alīB³|õš„ eīĪŪBqØg­ŗŽńyŅŽĀp«‘õķŚĆ 4kķ4Ć«C=–/”į¤ŻI‡ĖĪČj_ƒŠĄ!hØäĪØ0ŪļćØĄhĻÖ(ŒG×Cīō·Sš=æ’ąĻÉ ĶGØ÷÷$4 ōØĄīĢ0XŠŠį‹ƒ1Fihw)¹ķÄ~×J­”o.Bf§źßk²ĪżL…æ‰Ā2A_@ü½G™÷~šŠh:—›śŒ†a†a† U¤C8g£"#{­\¶Ēr׹x:ŃtA…Ҧx,Ć<ē¢YVIÆ<2(; uõQ‘²?š14Ÿ€©ŚŪFūBĘßk”ür A:‰Ļ9Øēr *.39s>žō±cÖł|ĖŠ“•õ7dŸąŗÅĮń–öX†ka’§…:3h.*Cå°<õĆDO”͇’»eI&ӂśe­Ųj†±M`É{ Ć0ŒĶĮ4Ė‘hhė4Ńo©iÆRcžņ‘lś’UĻ”^æCŠõ”õ¤ĒkØp ‰zšg%‹ŠŚ!yś×f‹»Öų *äņ큙Æß0‰ĻQń?Ho rź)Īņ™Æļš^eļĶų!rū<żīēłæ¶½¼‰Šŗ|6uA½³Ł/@_"dćPa¼–tŲō…høkƈś’ßŽŁ³F„QųѰÅŒd‰HĄŲ"h‚ + ±³Q (vÖžAHe%Š…ˆ…… j»DTģÅX‰š°kqfø7—¹ūW ŅŁš»Ūč]®”/9Ń»ž}AQ&<1ĘcŒ1« ‚²t6‘ˆK‘JŽs‰³(–¾ē~¾‡Ź=<ļp eĀ2ĪŪNŚ®äŚŠ5 ūŠƲd5KČ!ģ–õĄ£ć~#«„Y$†$+a3š“ÅŲ_‘h/2ęĶ÷=Ś6!G²lĢw¬‘CXīDļYٚfȄ1HX.”āT’9$#żĄżć/¢šjcŒ1“OēmŒ1ĘtĆ>ÆQj‘(Dq¹f‘įÜß®Ea†u`Ż_ÜJ– µS蟾bķ̦ p9‚‘=dB÷麈»QØģv$ —‘Ø™å÷֌”Z‹Chß?P=Ļ'”—Ņ8‚Ų4YvŪ"kŠY!—5Ž=ĘN•ķo"|®CįĢõ\ū~6<ęųŒĪį!š3×oYź<”»£7PĘÕ<“(AĪ5ōŪQA!¬{‘søŒŽ«gčžož»aüJŲĆAä>.†=> ’½lĻ}aŸÆŠ³ŸOō7ʘ’ KcŒ1¦7 ŠYXä{Źļ”–q8ŽB?!³‹,ƒ®iO^XcŒé1.7bŒ1Ęō†)ątżŽ"qŁ ƒdŁi_¢R"•Ęcž~ĆĄ»sD%IEND®B`‚libwebsockets-4.3.5/doc-assets/lws_sequencer.svg000066400000000000000000005720271476025525100220540ustar00rootroot00000000000000 image/svg+xml libwebsockets-4.3.5/doc-assets/lws_struct-overview.svg000066400000000000000000000430531476025525100232420ustar00rootroot00000000000000 sqlite C structs JSON transit storage processing lws_struct libwebsockets-4.3.5/doc-assets/lwsac.svg000066400000000000000000000677301476025525100203060ustar00rootroot00000000000000 struct lwsac allocated area struct lwsac *head nextheadcurr ofsalloc_size ptr aligned struct lwsac allocated area struct lwsac *head nextheadcurr ofsalloc_size lwsac_use area ptr aligned alignment padding lwsac_use area ptr aligned alignment padding ptr aligned struct lwsac allocated area struct lwsac *head nextheadcurr ofsalloc_size lwsac_use area alignment padding lwsac_use area ptr aligned alignment padding struct lwsac allocated area nextheadcurr ofsalloc_size lwsac_use area ptr aligned alignment padding NULL NULL NULL empty, generic lwsac lwsac with 2 "uses" lwsac with 2 "uses", 3rd requires a new one libwebsockets-4.3.5/doc-assets/lwsgt-overview.png000066400000000000000000002260721476025525100221620ustar00rootroot00000000000000‰PNG  IHDRX.ĶC:sBIT|dˆ pHYs 5 5ė=ptEXtSoftwarewww.inkscape.org›ī< IDATxœģŻwtÕż6šgf‹¶H«Ž›-K–\e˽`plCL‡%įMRH “BŹ/!!ōŽ‹ĮbÜmÜp—,[r“¬Ž»vWŪwēżCŽõJZɶXU?ŸsČĶܙłīędyrļ;‚$IY """"æŗ"""¢į†‹ˆˆˆČϰˆˆˆˆüŒ‹ˆˆˆČϰˆˆˆˆüŒ‹ˆˆˆČϰˆˆˆˆüŒ‹ˆˆˆČϰˆˆˆˆüŒ‹ˆˆˆČϰˆˆˆˆüŒ‹ˆˆˆČĻä}yqsÓē).—Uї÷ """ź QPYÕįß+é‹k÷iĄ\Bū?DDDDƒŒ õŁH‡‰ˆˆˆüŒ‹ˆˆˆČϰˆˆˆˆüŒ‹ˆˆˆČϰˆˆˆˆüŒ‹ˆˆˆČϰˆˆˆˆüŒ‹ˆˆˆČϰˆˆˆˆüŒ‹ˆˆˆČϰˆˆˆˆüŒ‹ˆˆˆČĻśųeĻžSqlo|Séńd›É$ 2§ØTŲ‚#“Ŗ£ĒN+ׄDZŗ>""""·A°ņ7|0„"w×MvK[BēcŽołŲ”ŽČ5wł§ÉS”ō…DDDD ź€µļżæ¬l(Źæ¾§6’$ÉM-õ™¦–†żUQOmĄ*ڵ6Ż;\i#āöE¦Œß=¢V&’ÉŠŲZY4²„ņĢ ‡Ķ1zފ¼¬—ˆˆˆČmЬ²£»¹·CbGnžū£?¾ć£Ł _·Õ•Ź*gæGDDDԃAū”Yߜ Mŗžē«zj«J4öOUDDDDē7h–Ėa Q”j 2t=DDDDjŠ,Q&3€Ói rŚmƒ¶N"""¢Īķ,¹Z[ē“ŪBįr)ó7¾?sā²{¾ķķµNķü|\ÕŃ} ¬Ęę’Ė”•+TJ­®2>sīÖŌ9ĖOuno·šåŁ«_X*S(lSozh£¾¶B{ģ«·V“5צĖdr‹.:łØRŌj1“„@Ņ”łc3¦Ötw’ĀŻk2KO„@Āäy‡āĒĪØö>^{&7²pĒ—WŖ&8ķ¶`Q¦hSŖµua‰i',æw‡L”tu¾ęѵoĶ2ė#FĶY¶'")£9ē/_ŽT|r¶$9ŠĄŹi7?ō×#""ƒ6`…ʍ:P£?”¹»™6éLlś”Ś‹ŗˆKv½łŌ­UEWzļvŚķAV“aÄ©-«f·TžyźMuXāĮe5Źė so€šćūę®{ėA»¹-Ń}\¦Tµ:lę†Ę’×€ĆjŒĶ˜śqwe”Ųr½ÅŠ4‚ąJæāśŽĒņÖæ7­ōŠÖū%—S广îsXM±¦–śĢ¦ņ‚i—’ä/’ģ<‰æ¾ąČ|³”iœL”²œŚŗ*ŗ¹¢p©ū˜ĶlLŠč"޼ØļŠˆˆˆüfнe,øe§ØT6ķćČ_|¼,ww—ÅF{²ļĆæ_ēW¢(Zƒ¢v…%e¬Ń„Dä€5'ß^‘³+±»kä®}ó—īp%ˆ2 hC£K'ĪŪēnc¬-ŸÖŻłśŚ ­ÅМj]艐ų½ūXÉžM£Jmł©;\©tayaIk‚¢wˆ¢hSK}ęįO’sMw×o(:vUsEį’öśD 8•]DAŗļˆˆˆˆüoŠö`FʘRf,}­pך_’Ģi·…żßėO·Vž~}ĀÕwļ;ßłµgr#ŠóÆ™BŁ”użĻžžUē>~ą£^SWs ÉĪģūziĀäĖ^óu»Å§ =™¹üīW"Ó&×·TéD…Ā„‹J4ęmś Ņai‹·ŪĢŃåG¾IJœtEYēóKnĢ$„$¤ļ÷pIBįī’Ż!¹\ ’¦-xĮūs޶éÄ×ļ<ér¹KN,qŚmė| :¬¦XQ®Š§Ģ¾ś„ŒĖoȳ˜ōжŗ² ó}?DDDŌwmd,øńhü„9oBūš˜äT•ÜöóŻÆ?u‡Żj‘õtī™k@r) )kĮ;Žį ¦ÜņĖÆåź07׏ļī:¢Lfž~ūoŸL›\!ń)zŻŁe!BbGxQű½>{±šŹNeµo ĪQ³–tļ/Ž·>ÕblM€ĄØÄCćČ) J‚ćR¶€Óa®8ŗ;©»“§,|3cžĒ ’*0Ųž2”±»¶DDDŌ÷uĄ€É+ļߑvł÷ž&Č䞵®ZŖĪ\µć„ß<ŚVWŲŻy†ŗņ© ŹśŒ+oĻī|\& R`XĢ1pŲ-įŻ]K‘Æ‹NhóulÄŌ{ŻŪśŖ’éŪ­Y[c]&Ø: V<4Õ½8~öŽĪē@xŹø\÷vSééd_mApŒžCŽÆcDDD40}Ą€ō+VęOæłĮĒ4A%ī}}ӘŻožį5Ē÷ĒvnoÕ׫ģS,؃ŹeŻĢG’«[ŻŪĘĘ:­Æ6¢(³uWWĢŲÕ MP)Ų-m •j)Śūu†ärh <Ékx€Eß0ņģ¦Ÿ9³Ō×õÕĮўśv“Ļś$Ap)øŠ=Ń`2$D¦M®æā§ū}HÜØ$°ŪĢŃG¾|ż·M„…!Žm+O‰ €BTÆÆ­ŠśśG”Ėģīs쓲7u…Ę„œ&ĢŁ9ÕūX}a®gxpäĢ«z³™Œq “+[­f«ĢW}2į\0tŁķ½Ŗˆˆˆśß äī‹B£³Ļ½ļé÷Ž­{ėtiö7÷Cr)vKä‘/_ŗgĮƒĻžÓŻĪÖÖāéķŃז^±ó•G®8ļµuŗ^­•Ģ)ČŌ5cŽōĀłī9jÜÅ-²JDDDfČ,³č毿}÷OW€ÅŲ2½_`uoK]IÓ÷eÉÓļÆ=™}”µŖh €­ueßƃ2Q Švø\JÉéTõu}DDDŌæ†ä”[؈ŒfQ.o—ĶģŽÓāŽvXMĮ¾Īõ§Ø” Į`5¶¦8ķ6ŃŽ¦O€°ätŸ‹¢Ź-ąt؃œ.Ičė‰ˆˆØ’ 递«żiAQ”yz­"Ņ&Ö gŸ4“µāū£ŽŠÄ“}ąr:Õ»ž7ŽåtjApŽž³üÆöJµöģ Ÿ%Y­„&ˆˆˆhčŅ«śä”÷:SrµĘ³R»*0Ų¦ŠźŠöWÉTŪÓē!+eöŅżīI÷ÕĒ^*]x¾öģŖļiĆcO»·+r;.ļ@DDDCŪ  XśŚ Ÿ kzø$įäÖOot’©‹N>ź}8$v¤gŻ©“Ūž{ śx.,!½EzLMÕS bDF·ļLL̜{g{ŁJN,mŖ:ÓēC™DDDŌ?mĄŚūĪžŚśļ9¾łĆ,c}Ę½ßbŌ+Šv­Mßöü/nkؚ 2…Ā0ęŹļo÷>ĀŅŪ·¢Ü“/ć°ėĒļ17Uy®—$ģśbģ–=šØU_ŃĖ:ųšŌ>ßJ’$¹ Ī‘³Æ9Ü]Ūø s*5!Q9ąrŲu?ųæG:÷“ÕäD~óņ£÷ŸŲśI¦?ź#""¢ž1(Ÿ",Ü»>Õn1ÅŪ-¦ų¢o×O(śv=QnEŃętŲ‚qv•v ż]|#g]żb`x”Łūź°8Sā¤yo•eoū)”µŗtž¶™«Pi+EQnµ[ŃN»=ެ}gńŒŪ^‹ļhŌ¬„«ó÷Ż H2upDž®›įA· ×Üõī”U’åt؃ķfcRöē/’żčWļVĖT-«%ÄamŻĆ¤³š–Üž®EDDDƒĒąģĮr9dņMµ÷.ÉåŠ8¶x…+…Z[1ęŖŪž˜1’Ęc¾.3qłŻ{']ž ™„ż.…Ķda16§»Ć•20ø qāģ./ƒīų½:8<B;..źKdźÄ†qĖīyF”ÖVø÷9¬¦X‹¾iŒ;\É䬖ØŃS6ł£>"""ź‚$IY}uqsÓźQ.—õ¢V,÷Vr`sJCqžhKkcŒĆnÖ¹\’L”É-ڐŗš‘cŽž{ķItó"go-•ÅAEß®›ahŖį²YE¹Ü¢Ö…UE¤MĪK™¾øØs{§Ż&žŁ³n,hĀ£Z&Ģ­čzUߎołxrݩ×eŻšŠ›ŗč„¶ 9Ēn5Ė v~>±©äōx»„-TE‡BŲš8źTڼ•GjGēsJoa5“ 2Į•vŁ÷Ž_h}DDDŌNÕ6uŲŹ.9ĄuĄ""""ź+}°ē!ŃʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~&čˆü­ęąK7ŗꊁ®ƒhØ…%vęļ tDĆ ;vCÕ4§Ż?Šu 5‚(7`Ą"ņł‘Ÿ1`ł‘Ÿ1`ł‘Ÿ1`ł‘Ÿ1`ł‘Ÿ1`ł‘Ÿ1`ł‘Ÿ1`ł‘Ÿ1`ł‘Ÿ1`ł‘Ÿ1`ł‘Ÿ1`ł‘Ÿ1`ł‘Ÿ1`ł‘Ÿ1`ł™|  ""ß/{2„ÖÖBTzl Ė!¢‹Ą€ED4Hi¢fB®Š€(čRˆč"qˆˆˆˆČϰˆhH“„"dŌ-ˆ›łģ@—BDäĮ!B"ŅF,XUŲ8Ģ5] ‘{°ˆˆˆˆüŒ‹ˆˆˆČĻ8DHŌĒŌYž§ĄLu{!¹ģŻ“›Q®…„éœ6½Ļ6Į£!WĒ.;Śźözö ¢ŗ¤eŠFφL©ŲŚ*`n<cÕvøģ†‹ØX€6ę²÷P…ŽCpņµPh INX[N „ųón‡åT!c!SEĄŅtN[ ”Iń=ˆŠ X[OC_ž5\vc‡sdŹ蒖A> 2„N›–¦£Š—}‡µ±c…¢šØYQ”=»/ژyēIN“ÕīéśéD%‚āA=ru$\3¬ś30”«žĢ~?særuA‡„¦śC0Tl€Ėaźr†(×B—øšČ鐄Ąeoƒ„å8ōe_ĮnŖŗ€{ŃPƀEŌĒĀÓļAšˆ•€āĶ߃©n_—6¢L…‹VC”©Psč 4žzĆēµāfüšČi0ÕķGńęė M’|Œ€ąŃ>ĻqŁ (\7vӅĶQF,\H.œų,į÷"jāƄķ"Ē’•ū}éš.׈œš 蒖”śŠc°Ė‘xŁdʳG%*6vhœ|b§’2ep§+ŻŽčÉO śŠćh)ZåŁ+ mÆŃKē}.»'>MėŠF6 s^F€nT—š£3‹ĘSo 6ū$§ĻļF®ŽBœ— žÓåXŲčĀimĀ©Ļ'uс±—#nęæ”ŠÄt½ē¤ĒQwōļh8ž¢ĻūŃŠÅ!B¢>f¬ŽįŁōīań¢‰žQ¦%\鳍 €:,ŠV»Ū³?~Ösžpår˜an<Ks¾§‡Čik…ŻT{ń… "b²žDŌÄßl†"˜Ćå“DE fæuųän/”KZ†ųŁ’ń W€ĶX§­õ\›Ä«‘0ēEOø²›j`Ŗ?č鵁ˆŸõ/蒖]ügš¢Ō„`ĂUžpå“ėaŖ?›±ĢóyĆ3~„謧|ž/ŹÕH¾āOø’$',Ķy07ęxj57é®4‘Ӑtł»žpÕŽÓuŠv™ѓGxĘ}ßé³ŃąĆ,¢>ÖV³Ó³­™ ż{—6±ó=ŪšØ™ž!2oźšIž b¬iX m|ū5X[O”dóõ†Ó4‘Ó WGzU{hź÷į°4 |ē=0ÕŠŽ‹“4ļ-Ø#¦@ˆžüJ¶Üąó|mŌ,@r”ńäėh-żD™ ¢"Čs\T!vś_A ”śąch*x\D¢&žć vźŸ`¬Ś —Ć §µEėÆÄĻyŗT8¬(Ūv›ēŚ{”b§>Y@( åĢ'Ø>ō˜g8/8ł:ÄĻś7YĀÓļAKŃ*Xšó;œžń#ØĀ&,Ķł(ßy/lĘĻqMŌL^½|‚ G܌@źóžśc϶0ADxś=ˆÉś= ˆˆŹ|­„ką0÷"Ń Ä,¢>f7ÕĄŚZPGLī0܂ā’ NkQĄŲ]Śh"g\Ģ ‡ŗsC`-EŸv™«dŖ?}ŁWß©žŖżæö„+p˜ėP¾ė^O8ŃFĻö9üåÖpā%Ō~ę†Ćh«ŻCÅϱ‘7@®Š4¼‡¦Óo’ ¹ģØ=ņ*·äźhč’Æõ37…¹é($‡¹żb^ūĢMG;$UČXĘ^ =UķøĆ\©ÖŅ/QwģŸķ"ĀÓļķšAŽšŒ·ßĘiAŁŽ»:„+0Õķė0/.0~”§gŃP¹u¹;×»u6t6~ ½w,4õönæC"z°ˆś±¦}˜Päķ½:^”ÉPźR`k+‡¹ńßƄšČiSżs’¢ĪżOø»yC߅½­†ŠM]÷›j¼‚›mōÜnÆŃtź­né—x¶O¼ę³Mć‰W<ŪAń¾‡OĻ'Čū>§Ž€$9ŗ“i:ż\gĆZ`ü¢ß­&z¦§÷«µä ŲŪ*Ī{O]‚×=OöōŁŚ{{ūوhpbĄ"źmÕ»<ŪŚŲĖ: Œkļ­²¶ž†„õŌŁ} !ˆŠsŃ°ŚjĪ]ĖŽVīŁy£g8Ź_,MyčnxŃū =„.µŪk8,ŻSSf7UĆf(ņŁĘT·ß3ļKžy¾’}R‡Mōl·ÕģöŁĘe7xzåŖ(4ńžcšˆ)ēĪ÷šS×Uxū=%§ ¦ŗ>ŪŲ Åž9`ŖŠ±’;'¢!‹Ø“Õ}ėéu Œé°Śē_Y[NĀŚr Sź ‰šéi£ N÷L÷ÖÖĻP˜*t’ēäY¦Į¤ęnŁŻ“Ć(/śŚrU义ķ^A±K ’þšXˆrĶEßĖ3”*¹z\ĮŖ/š:ēܓ†JÆ”X›×ēī– " Øż|‡„’ĖÖż=Ļ ¢ŹĄ¤ó_›ˆ†,¢~ą²anĢą^Ė*@ūšLī§ŅŒ5;۟8<;)(~±ē|Mät€ÓÖss^‡kWų-$§@ū|ØŌe; KZŽ·€ĆŚäŁåŚ‹>ß=äNksmĻ ėõ½œv½ēūķł>€\īµįÕ¦ ē#Ź5žŽÄ ’l€, ¼‡–D4”0`õcµūiBgŸüÓFĻ‚(ץiÓĆT·s'ˆ%\å9WÕ°ŚjæķĢ ‡Q¶ćN8,õ¹:‰—½†ųYĻy–~č N[‹g[čÅ}¼CŁłCČw sīs.&ģ^=eīÅL/äŽ÷§ķ<÷ō:Ž›Ž9"œ°ˆśIĒåŚ×Ćr/Ļ`¬ŽīBԟ]„S˜UČēz°ŗ›?d¬Ž3ėęwxb0$å&ŒXü%d ’ z¼'Ų÷0Öżł²sēū˜tīMr;ī}ß &ŠgÆć{żs÷9wÜ»¾‹©µ½½÷ws¾ĻęU“×}ˆhhcĄ"ź'ę†Ļ+kÜƂŸŌó^Ę 0~1šX(“ :.0Ś™ĆŚˆņ]÷¢lĒ]žåŌį™ˆńžż gy/7qqÆā9{Ž×2 ¾–®šę=œčr“õś^ē›Ÿ& ńy÷$ūεœļ~Ą|6„ļ{ѩʀEŌO$ÉŃ>Ä@”ƒ, Źą4H’ĘźķžvÖÖϤnMD‚Óó¹õ“zbØŲˆāĖį°4‚“W $Ćß§Ć„ģ Y¶ 3§żÜBŖ]_‘Ó‘Lé5_Ėkų å²µ@QqžūxĶļņ^čÕemõ٦Ūū9Lže3Īūټ®ēźę”D4ō0`õ#c͹yXAń‹ 2˜ėu™×ć&T…ŽGĄŁ%Œ5]_\Ü›”õGĻõ\Ę^ńźöEåµō„åäEŸļ0U{&ē+“=?…Ų¾}{/]o–{QPQ®†¼‡‰äīEOĄęõāg[Ū¹'zX’ĀMrŁ=”S”‰ė0ÄŲåžźH÷I°‹Ļ{m"°ˆśQ[õ¹yXīIģ†Ź® yŗ_†¬ŠĘCپSOƃ>ļU·ß³­PwæŅzoy&įK.“Õīķ¹±’äō,‹ K¼›šX(4±kóń®×q/%ŃCˆ±z@MōģnŪi"§h§£ĶXźŁļ½*¼÷kzā¾§Øō¼b§3Auhū1›”ijŠ) } XDżČŖ/ō¬Ćäžµ”rs—vęśCžyTAńķAĘ{Ń į=ßHrY{Uowc/÷,ŽŁV·sMÆ®c¬ŚvvK@hźm>Ū„¤ÜäŁöõ]¹‡ÕdŠ`Ąė]€Ž žūaiß÷ŁF5Ėӓf¬ŚÖaņyū »Ūƒœ.y¹gN\OŒUē†}CS}ß38y…g9_AŪM÷ŻÓ DŌ7°ˆś™»K”«a3ūœW%INϾƒĻŻĪŽVŁ„(×"xÄJ+€ KæĒó—¹1·Wµ*4q]žB Š„"~Öæ=7ä?ß«k@KŃgž¹Jć~īY­ŽM>łģĖžŪ×k-ł²Ė5ÜAT)”Ž˜ģŁ/2ĻėnŚjvy¾?m̼ß Š>4;żožæ›Ļ¾#Šss­ēˆ¢L…ÄĖ^ė09hŸk„KŗĘó·¾lgŅzčØ[äõźP„ zņŚ’ūn>óq—ĻꏬĄä>]rƒˆüO>Š]jŒ5»2źšüKŪ}Å„¤Ü  ūå‚®BœaŸüŚjwĆŽVQ®E`ģåž ی„>{~.„:<©ĖwA_±NK#IŠ%]泗}kÉēg{wzĒŖ/Dsį‡K»¢L…‹ž }łzŲ ÅP„.a ™Pwģžµ¾:\Ć+ &^ö&ōåė S† 0f.ŹvŽsCöŁG?ƒ„9/b§ž ŗ„%07fC]ā՞§ å`¬ž¦Ė}źr’ŽĄ˜yķĆzį“‘vķ^č˾‚ĆR…&A WBä0Vm‡Ėa‚Ćڈ†üē•ł ˆHš÷& U[ai>…&ŗ¤«=ėe5z ÖÖÓ]īi7U@©K(×"yį§07&b Š·¬ōĢ_#¢Į‰‹ØŸµõI„‡…ŚŖwĀå“@”©`ģfž•ū„Š M BFŽŠåøĆ\‹ņ÷œwż§žČÕQK»£Ė~}ŁZTīżEÆÆėVsčqČU‘Š%.… *œ¼¢S ł/ ńÄ«>Ļo-ž/"Ēż‚, M ĀÓļõÓFĶ‚¹!»½]ÉēP&"rāĆ“1s”éų’jcõ7Øųö'>ļciĪCÅŽ< øŹ”!M½½c„N+t©07ŌēżrM,ĀŅīAń‹;¬Š-EŸ¢6ūiߟ­lgĶ4Mä4OŸB›Ž÷»‰hp`Ą"źgK=Lõ‡ ŠĘĆä5½3—ĆCÅ&Ę΃©›'«öżmÕ;7!c ‡$9ao«„±j O½yA+wĒÜxę¦\h£fC® ‡ĖŃKóq“­‚¾|}·ēéĖ×{žÜėéÕ4ķ‡ķ(ßy7t‰K<ņØBĘ@‡„ę†l4~SżĮnĻ·KP²ķDMü5”A)pZ›`3–ĮXµµĆĀ«PŸ÷ŒUŪšv4‘Ó WE“¦–h-ž­„’Cw/·}éX[N ,ķ.h£gC¦Ž\،eh«ŻƒęĀ;-Y!”śĄ#Š—­CčØ[” Ė„\§µ –ę<4~ä³·Ģ­¹ą@’šzäŖ(ŲM•h«Łg/Š&¢ĮA$)«Æ.nnZ=Źå²ņõšŌÆŹ·=žw§Ż?Šu U‚ ĒŲŪŚ_¾¬/_ņwpEŌ_QnH^ü×ūŗ¢ž"Šj›:leŸtsŲ8ŗ IDAT’;‘Ÿ1`ł‘Ÿ1`ł‘Ÿ1`ł×Į"¢$Ɂücŗ "¢!=XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDäg XDDDD~ʀEDDDägņ.€ČßdJ]D…y ė jQÖ6Š5  X4ģÄĶżĶ ]]Ś8DHDDDäg XDDDD~ʀEDŹf—„®ˆČß°ˆhĄč ŁÆy{ę@×ADäo XD4`žłėŒ»ņ°ˆhŲaĄ"¢³eūŃÉeå ćõ‹l k!"ņ',"0§NUMr8œŖ×ŽŽœ:еł ˆµ_ŽÖL±šŽ‡ß,čzˆˆü‰‹ˆćŸīšģŽ®«Ó'd-DDžĘ€EDāHn‘'`ęČģœ"Ż@ÖCDäO XDŌļJĖėUUÕ-é^»„·Žß>~Ą ""ņ3,"źw/¾²q¼ĖåRxļ;pØ`ā@ÕCDäo XDŌļvīÉĻź¼Æø¤v‚ÓÅU݉hx`Ą"¢~åtIBQQm—Ž*³ŁņĮ'»¢&""cĄ"¢~õÖ;[F˜Ģ¶P_ĒÖ¬;ĄaB"°ˆØ_­łźŠäīŽĖ+cĄ"¢a‹ˆśUމņIŻ«©mN/-ÆWõg=DD}‹ˆśMvN‘®”AŸŅŻq—K’æžÖ–1żYQ_`Ą"¢~󼛛&Iz|Rpמ“ś«"¢¾Ā€EDżf’ĮĀnē_¹Vs y XDŌ/ō‹¬“¼į¼«µė ¦Ųõ³£ś£&"¢¾Ā€EDżāÅWæĪ°Ūš iūÉź½&$¢!‹ˆśÅę­Ēŗ}z°³œÜ"ѐʀEDżāäéŹóĪær+Æh§7Xd}YQ_bĄ"¢>·~cv”^oнŠöv»SżŚŪ›Sū²&"¢¾Ä€ED}ī½vvy¹ółlŁz”Ć„D4d1`QŸĖÉ-¾ąłWn§NW2`ѐŀED}Ŗ¢²1 Ŗŗ9ćbĻkhŌĢĪ)ŅõEMDD}‹ˆśŌ^Z?Įår).ö³fķĮEĮq¾k¬]wˆĆ„D4ä0`QŸÉ;^Öķšą‚Ė'¬EŃ)#£w{ü2,"r°ˆØOdēéźZGł:¶hž„ĻÖ¬žķ‚ ¦OM;|Łģ1_śj[UӜ^Z^ÆźĖZ‰ˆü‹ˆśÄ«omɔ$t™ ~Ķ’¬æüō·ī0%µ’§KX’æĒ>›53}mēö.—$ż­-cś¶Z""’bĄ"¢>qąŠéĪóƤåWO}ÕūæüڽC \®ö ¶yķŸĢž™¾¦óµvķ99”O‹%"ņ3,"ņ;½Į"+)mšEҊeSß’ų݇6tj*€Ó%y~‹6­}bÕ¬é£×y7*(¬ę<,"R°ˆČļ^~}Ćh»Ż”9ū§tżu3Žžčķ‡6vnēīĮ\öoXūÄ'Y“R6¹’ÖL±6åDö]ÅDDžÅ€ED~·yėŃI nZ9ūĶw_’łÖnš¶÷`9;žÉDAھńé÷&M¹Å½ļćĻv³‹ˆ† ,"ņ»“§*& ¤›o˜ūś[Æžd{wķD÷$wd¢ ķŲü‡w&NHŽ9¹% XD4d0`‘_mؔ٪7ĒŽvóeƾńŅż;zl,žä.9}žÉDAڵåOoeN¹µ¼¢aœŽ`‘õAÉDD~Ē€ED~õĮ'»'żąÖyƾśüwÆ­{,ÉÕu97™(H;7’įķ1 {ßx{sŖ?k%"ź+ XDäWwßuEöKĻŻ·ū›Kž’čL¤m_?õvxD°ł»UGDŌ?°ˆČÆĢ›Šx”mA<ۃå:ļo‘J„tŻyŪ¼²ļRQaĄ"¢Ō>k « "ņ3,"0īu°$ēł{°ˆˆ†žØŃ@ŗ 9XDDC  ˜sOJü-"¢a…?jD4`.p¹\Ż.Ó@D41`ŃĄ<“ܰˆhXaĄ"¢#Šg{°8ɝˆ†žØ Q/æ¶iԟžöłų»O„u>–w¼<š‡?~qĮ‡ŸīNˆŚ.”(ąģ!{°ˆhx‘tDŌ;’חwÕ7čSNĢx{ŽÜ1[¼ŻrĒæ~\RZ—õŚ–ÉF<0vLBŪ@ÕŁ£³ ŗ.`”Q"¢”„?jDƐ±Ķ ‡Su¦¤6p ėéŽgˆ‹ˆ†žØ C?¾gŃĒɉ‘¹W.Ģ\µ|锦®§;ĀŁ!B.Ó@DĆ ‡‰†”G½2’Ń_ÆĢč:ĪG€pvˆ‹ˆ†žØр97ɝC„D4¼°‹h*(¬Ņž© ŃŚfĪHo€m;…[ĶvYXd°uFÖØV_ēÉ-Ŗ®iV{Ÿē¶{ĻÉŠ·ŽŪ6©©Õ؟;kLń]wĢ/ż.u ¢Ų°ø 3 XDĆŠ#O~“`ćę#·ĘņåŸ>śŸgąįGßæåŌéŖŁ:¦ŗźĢkæöuŽßö”źšęŒéSӾ޶ž©Żū—_’—•ßģ:~$I2÷¾OV‹—ŽŲ“k÷Ög^U*„^½NŠż²gö`ŃpĆ5¢KÄĀ+&ī½Žėk}¬¼ćå5µ-i°ņŗéūŻūožĮ³Woߙ½$IbbBų±YÓGÆKˆ Ė€ć'Ź/»ėŽē®ģmM^ė`ń·ˆˆ†žØ]"žÅŠ\…Bf€UŸī™ÖłųKÆn˜$I’L«U5üæū–œ€ģœ"ŻĘ-¹×Ą5K²>:‘óÜ_7õäĒ's’óĢÄ ÉŪ`ūĪü«z[“pv™Iśīļ"¬oP)2&]÷hʤė½ī¦×}×ė} XD—ˆČ=-5ö0ä+™ŚłųŽ“`üøÄż2±}čīŁēæšįp8UZ­Ŗįõ—~²Ń»ż£Æ\@2ĶŃ»÷œ ķ]U‚ßz°¬VQ¬ØŌŽÆØŌŽ/ÆŠźģ‰hųcĄ"ŗ„\µhŅ>hl2ŒŲ°)'ҽæ„Õ,/)­Ķ€®åĢĖ/ £R¢ź‚TNļk-_:„V©”›ąH^qxoźįB£D4\ńGčņš/®;¦TŹšęūŪ=ÄϿ¼nŒŻīTjUõ?ŗwq‘{C“!¢"tĒOTh;’£PČĶ`0˜zS{’; ń)Ā^ųüĖäŲ•·Ģ_qó.æz k!¢Žų!Ń%D¤rfŒŽ?x4Æt~Nö™i¾€-ŪņĪ&y†Ąj¶Ą–ķĒnܲż‘»»nˆ.ŠŅ›zĪõ`q”ыµ?;2ųŽūęžʏkłf€Ė!¢N°ˆ.1Kƚ“’h^éüŚśÖ“ŻūN†Ī™Ń|źteܰņÜš 8\.%„†h+“Ś€_×€qc›{S‹(|U K XD—˜_>°üųæ_ųZoµŚuƽ±yJiYĆIc›%20P]ß{·EŃ8Õ ®æéŻ×¾Õßµx•øŠ( / XD—­F哞pąČŃāEłĒĖ3” ™&ŒMģ0< £Õj×56ƒū¢Q€ROr_æ1>źš‘ˆ(øāņźŹ¹3ė|öø­]Ÿ{4ö’ŒO’z}üŌ¦¦€A”$µŚŃ–šb(½ķÖāÜ% +뻫ĻbÅē_›¾÷@dZs³"X—Vc7­/撞‚|ļ{ģŽśĶŽŲų†Ę­{_k«"ōOĖļž{D’±õū·ž)æ˜ļˆˆü‹‹čtķ5Óö9Z¼ØŖ¦ydPŗ®ļ4<a”5z½)®ŗŗ9®/źpÆƒå’śvˆpćÖų‘o¼ölū&ęėmė7~諯£OLł~Ii`VB\[žŠe„Ļųjóē’›4oćęø[A’®[^q?ŲģraīĀ«~|üDČeŪ=†/Ö$I·Ż\üź«ĻļŻÕłųÓĻLššŹėé?4åѝmß‹×ßJ·HÖēž÷£Æ¦„¶šŽy/uā'Ÿü‘w»ņ mę_’1>ÓżwZŖaß÷o=óüł¾"ź;œ÷@4Ĺ\?¼öąĻ—ŸŌؕĶƒ9ŗØ¤nL` ŗīž{Ī==č6~\R>•ŌN*(¬Ńų£^oż5ÉżŽ»Īä ‚$@į™ ń¾Ś46)•ڱPU£É(( öłyOÖ„@XØ­tüŲF#Üy¼Ā•b«Œ‰2ŸV«- I‚0kZ}Yēkżź‘©Ó’ńļq»Ć•(ĀčØW(\ž+— Š¢bŻŌŅ2­ßæ"ź;ģĮ"¢dr™źõ½Č§R!HcĒ$ī?”}fIS“!yÖĢōµ¾Śżģ’-Łæ~cö-v»S}ĖĻžpēę?¼¢Õœ[kżĘģ(_/†¾pķC’’Ō·Ė4ŒŪhŒ·×7¤45$fēDč²&7č½Ū¼ņĘŲч —K=÷RʤžŻ’­w§KŖŖ5£ 5EܽĻŽČĖ@%ēļ;ņē_>pü”ūŲ¶obĆßx;mź]wvx1ö¾ż‘!o½—ö#I‚ €4gvݚ×^Ų·&9Ń`€ [ć#śå“ū*Ŗ“ć¼Ļ{čg§ϘZ’xM:šo’œš¤Œ4žłżĒæp·Iˆ7µ}§/Œˆ¾3,¢!*X§n¬©iʁƒ‹^󓼦¦%nĶg¾8*%Ź|!ē_»bĘžCŁg–ĄMߛŁexęĪĢhž;kĢŚ»óWž:]5;=óĮ¤± ŁŖ„­¬¼>©Ø¤6kņ¤”­;6>ż^o>ƒčžäŽO¦„¶ęÕ7D„Žž`Ōø¬É {½oŪ źg«Ł* Ž»?j2€ė“Õ#ām61ęĢ®Ėsļoi ˆ€Ø(k”wø€WT7.ø¢ŗĆ*ųšČ“YĖķvQ S³6nüßęO½/YXY5±²sĄ?¶Ń8~l£qvdšßž9 Ń8 ÷Ż]Šį"X"$¢n½iīVAœv»C³’@Į5„eõ“÷:}Į+Ŗ?š’–hµŖĘ @uķ}w/īö_ĪkžūČ糦^@jiiKųvß©Ūv»”°ØfŗB!7§Š-ķīÜóÅö—=}°ę_^ć DGt& VģĮ"¢~żąŠ“±±aæ[³öĄ…Bęœ;glįķ7Ķ­€‡¼n÷’E™łįŗn•‰‚tėM—}(“ =†™(H›æzņć [s·|ōńĪĢśz}ØF`›‘PńĄO®ĪŒŠŁ{ūA<ūa߬{ļ*8ż×Œ·9¢²¤$°CÆŠ¶Ńį--ŹA€sÉāźƒ9GĀŪķ¢ęł—Ēd<ö›Ü|w»ć'‚G@T„åLr¢É2Q’“Z{ƒĮ Œ©­UžšÓ‘ ·ßT\ŃS-’[›k6ĖB )Ń˜ēż”   XDCŲķ7Ķ­p‡*o3g¤¶Ģœ‘zŽyQ’žū>‡}Y²0³~ÉĀĢ-[cOÜ=X.©ļ{Ó##,öøXó©ņ ķc›L›ĮĮ¶šk—•–žõć$I„M[c§x¬ņŹĄt=ڐē}ķə-ßīܵŅådürĘcƒā’īæēt—‡ÜöˆJtoaāŠŃ0Ä!B"0ī9X}=ÉŻmüŲÖcīķÕ_&y† å„N€Ōż±ńc[Œ‘Ö3pźtp–»Ķī=1”F£<ę_V}^^{aĻŗ`[%X­2Żo~7õ©«–/¾¹¦N«ōUGuŚó`BB¬±Į?ŸŽˆ,"0"śg”Q·k®*÷ō<å zƒRV^Ń>døhAMLœŲtŒFyäJ€Õ_&„€Lę²Ż}שBļė&ě¬Ÿ¼»ė/11–Sąr ņ=ū¢VL›³ōŸÆIŒķ\‡Ł,W¹·½z# n XD4`ÄsÆŹé—ߢ|’LY@€Seڱ6»\xłõŃ£ķvQ­PøĢ?»’äIøõśāĆīsV‘<rrĆG@\¬łTx˜½Ė¼³¹sjšó~ń§+V­’É$;4·$Üs’Ü?>’Ҙ4ļ¶§ ė|> / XD4`Ü JčŸ!B™(I#’ŪņĄf“¾÷ŃČämŪc'Ąˆdćѐ`«n¾±¤2(Č^ GóB'@I©&ʤ·ęū¾: R¹\Ÿ²}Ķūoģy$&ŹrģvQż‡g2į½p©2Ąiso·ź•j’R"h XD4`ÜÆŹ‘ś© &g6y †Å–UhGĄ¬é ŁŽķʦ·€†Ę€õ *EKk@\¹ø²Ū€å¶bYiĶž]kžILh;f«,ųįße-vרV÷v«žÜ;‰hų`Ą"¢ӟ ŗŻvK”'`UVj"U‰‚׏ī>™ėŻné’ŖĆķµ ņ’ū×øL§SP*•®¶»n/,¹ū„‡Łķ/>·÷uA€ņO„NtKŒ7y&¶×Ö(#æćG"¢Aˆ‹ˆŒ;`ArõĖ!,˜WŪØÓŁŖ °(p”Ł, ‰Ž4NŹl6x·ūŁŸp`ėöø™o<”R]Ųb¢ī{ŚĄŲ&÷<9˜•ŁXćŽ.)Ӎīī|‹UģvųPqö݊ąrsŗˆ,"0¢Ųž”æ'¹Ū¢ĻåÜRSŒĒ “,p"LœŠœŻ¹JårJр¢Ą)0q|Ėy‡;³ŁdĖ\ž‰ń7\_Zåžl_ߐņĪ{©ÉĻ«©Ó* Ļč²:ļwKNnõ¼Éd’s˜‘haĄ"¢#Źü7De³‰"Ś_€Ż Œo…o³f“æGŠélbׯ,ÉńÕīŠĖźy·[¾“ÜgĄśłÆfĢŹĪ ÕuŽ’“‡f̱ZÅ ˆ5{•‰’”>ŗõūļ§’’yoE„&Ąż·Ž ”­øįŠ»m6±Ūąf·+.3ŌÖ©SZZäŽēwwõ®äNDƽ$|ē!B„Ā!i5Ž&ƒQm0(c&N½öį°0k]}C@ģÉ#_žÅ»ķ½wžxéµ §$AčØėīÕ6ü$’Ų«o¦ŁœNA©V;[nø¾“Ŗs›¼ćįļ~0źž÷>åJL0åÅD›«dr—³¬L;¢¼B;®»ļ,Ųä}Ž#æ<žÕīs™Ó)(źT)Y³—’#-UŸ#IJJtcōy—õ³: ±WÖÕ¤šĶ²É³–=™œh,hjˆØ­ÕŒ,/\ż RįĪw "źģĮ"¢ćµ’»_~‹&Œoņ¼ś§“\›™“¶ø²J3®±I”šn—–ŚjŠŽ“œ€ōŃ­>{ƀöDŚņ 9©-_&J]Ė+oŒžčr r§SP–”j³öˆX¶ēŪØkĖ+“™A€s嵄ļt~uΊe„5?øķĢk¢(9Ąd’‡å [xōXŲ½A«ÓŁŖŅR ūzś¼ .ÆŚīŽ®ÆW:”±¤Ø8hj›Ižéźä„æ,"źSģĮ"¢#“ł7`­žhĒź;ī›cĪÉ ›aµÉ5ŗ [Cꄖ#¾ŚŽ×t¤©%&~ÉāŹĆ¾Ž»Ķ™Yw ŖZ3zś”†£¾ŽæšģŽo££Ś 6ĒO«¬Ņ¦“µÉCNA”R9ōI‰¦S’ļG§6Žy[a™ļs÷;mjcūƧ_Y^”N³ŁäjĘŃ:&£%÷å’ģ_wŪ]soė©¶7^žö‹U¦Üµ'śr‹EhoŒˆ4W/š_}pŲņ.½mDŌI’ŗDł]™›Vr¹¬Šó·$¢KŃĶ?xöźÆ6d߮ժkKŽx` ėl&ĻZž@A”n|żÅ¶ŸĻ›[Ż4Š5 '¢Ø¶©ĆVvūböļtķ¾ø(х87DŲ?ļ"jŒmrĻÄłääVÓ@ÖBD‡?jD4`d2÷JīżóŖœ”Äf— MMŖp’M|)4ŃĀ€EDHl_ĖÅߢĪ~ó»É3wõæM7ĶQAAš&„BŽä=ńōŖßźõ¦8™L“ED芃‚Ō5„āŅŗI ęŽŌ(—]ŗ“܉hxcŃ0uĒmóņŽūh‡ätŗ”Ææ½5ķ‘_}ļøūŲŪļoO6›ķ!¢l €Ļ¼ĻĶ9Z:ʎMĢ€7ŽŻ6Įnwh”J¹qĶydī̌f((¬Ń¬śļ·) ńįÖŽŌ(“É.Ł9XD4¼ńGh˜š9#½%4D[ ßģ<>ĪūŲŗÆf@Hˆ¶¢¹¹-qƦœHļć%%uépĶāÉłPVÖ ±Ń”gÜį ŅRcL’ve^Ƌɽi³s˜ˆ†,¢a,5%&NT÷ޟ¢"S©”·¹æūįĻ0ᙢ:uS³1) @aøķÖ+Ź @­°@c³1Öb±łķwCīY¦°Ū­ü="¢aƒ?hDĆŲÜ9cŽ@}ƒ>„ °J…UššŚ–Ō°° Š”ѐs¤Č³ŹåūŸģH“$ILŒ?”T“÷0-[:5€d4š£fĶü§-­fæL/p€?ƒŃ@ćŃ0vļžEĮ!I’ųĘ;ŪĘĄ+ol/I’,=5.’¦›ęä@UMs†;€8xz4dNLö żŻyŪ¼²)Y£6@AaÕĢ Sśóæ^üzōw­O.<Ėl¶ó÷ˆˆ† ž  cɉ‘–čؐBŲ»’ōxŲ³ļä$X¾ljĪ’…™õa”e.—${ī„õ“ šLm:\»|śqļkm^÷ū÷͟š™( Īę–¶„'Ÿžų‰•·üß §«÷s§D™Ģ3Ėérq  XDĆܘ1 Ē ØøfœÓ% Eŵ5jeó}?\T ćĒ%€½ūNeé Ym]KŖV£j\¹bFµ÷u” AśņÓß~łģßųdD„®X’$qÓÖܛW\’ו½­Mī5Dh³:ł{DDĆЈ†¹+NĢ€–VSü'«÷ěL¶ŠŌQ±GdbūüŖļ-Ÿ~Ź*źĒ¬Yw0Īét)““#ww½{ļ\PrōĄ³O„¦Ä€{Ž_»vżįčŽŌę=Dhµqˆˆ†®ƒE4ĢŻ{ēĀ¢'ž^e²ŪšĻVļ™—Ļ›ķ>~÷]‹J{ść&“ɶasö˜œ9²Ē×¶č‚TĪo6żńÅŃšj2ŁĀ>śd×äåK§løŲŚärļ¬žX6»\ųbmBÜéÓŗ0“Y¦Šj\¶‰ćZ®\T^§R¹\ēæB»š:µrė7qQ…AaZ•Ćž>ŚŠ|”×Ų½/*ō›±ńW\^]9wf]ółŚŃŠĄ€E4Ģ©TJWbBųń¢āŚ©Góʲd2ŃöąO—y&°ĖDAJO‹?œ“[¼x’ĮĀ™šƒ[ęwm«`µ#&:“ØØø6¬©ÉܛŚdrł¹€esł%`%¤Żų7‡CTź‚l §~ńg_m ƒ5÷?8㺜#a—Ūl²ĄĪĒår—5!ޜ’½„[’ųdĪ‘īīµmgtųļžœŗņŌiŻ »]T{ÓhĶS³š¶æüŸ}_%'ŗ}ió;ļ¦f~²zä}ļ}˜rāōŃ/žt!Ÿqöükī-* 5Å«~q!ēQ’b—<Ń%`āųyPWߚšžló>¾pĮÄlØ®iN×é4ÕsēdtčIń5‘Żé’„ęfc ÄĄ6ō¦.…×”ĆįšĖ$w£Qi4Ź£ FEøÆćė7ĘGĶ]“ä/ūD^ć+\µ×"””j³Ö|•xEw÷yźĻ“ĪŽ IDAT“2oøuĮ3ył!WtW`2ÉCwīŽZ9ėŠ%\żÅˆ8_ךVU­ó›Ē¦M=_;Šä!F£<Źh”G]H{"źģĮ"ŗÜ“rÖ±/×īLĶJÉé|ü”Ÿ.;žÜ ėĢv»S=jdt—Ž«[īü×ŅcĒJ'Ī=foFz\­Ćį?ū|ļüę–¶A\×^3µŪ9[=‘{÷`Łū~ˆŠf— ÷?0óĮ¶6yøōY“w¤Œ0TFEZ Ķ-JMQ±.öä)ŻÄŗzUźU‹*wūŗĪ‡ŸŽLxī…±8‚ ŌjgĖō)õŪ22ZĖĢ&EĄ‘£”yĒCę¹\‚LÆWĘżģ—3~“9”łwi©­¦žź{’£”Ū~ū«#¹įav»’?=õ',¢KĄŠeSk“ZUC[›%üž;u X!ĮjLjäč܂ª™Ó§¦v K‡³ĻLÆ«kMūä³Ż:’–,žōÉŹė:>qx”:ĢĮ²9ś<`żó¹1c›T#@©t?ūhūć ęÕ6śhśßUŸˆæźŹźŚĪœ.Axģ©)÷»ĆU\¬éė«¶żkģ˜Ö6Æf»_+mėoŸś;»]ŌņČŪļž{ǁ_½ŅS}£<śĒ?›}Õźv¬ū“ˆ]"¦L¹+5%ęą¼¹cš|_reꞈ]ńļXŠ%`­łģ‘,æzźū£RbFEĘDŸ?.qĒŪ>ūšW_õ¶&…ĀūU9ž™ƒÕ“]{b2ÜŪW.Ŗł¢›pøłĘ’ʐ`«£óž'žĪšŌŠ0hļ¹śü“’ī®÷Ż]Pü£»O{Չ“!³7lģÜ®³­ßÄ]—”»ĻCDƒ{°ˆ._ńŲźžŽ’åéŪ³’ņōķŁ¾Ž›hüų݇6øč'{ā=Dh·÷}V«^ī™Œ?uJCqo®±ę«„īķ…ók֎Ūhģ®ķßžtųšk’NTUkĘHdĻž{ģ‚% +Włj+“Iv’Ż.ŖöĖé7}»żė7zS ģĮ"¢#—Ÿ[ɽ?–BīņĢmjiVh.öüĘ&…¢¢R;DQrüń‰œē;ēŹE5ŪÜŪ§NOģ®Ė%ˆ©£ZĄ±üŠĖßż(5ébė#¢Įƒ‹ˆŒBī5Dččū!Āč(‹gHpÓÖø{žŪ¤§øē^EEX‹Ī7ižE^¶ ĄMÉGrCƒ|µ“$Č.›]wųģ¶ųēæNųžÅÖGDƒ …ģÜ”£z°¾Kńaœ82ēѧ&g]ĢłĒóC<Ė-$% /äœäDƒ%$ÄZyöOaŪŽŲn—l?^_£ rT@Uµę’³wßįMgĄļ£é½÷ĄŲŲŲ€Ł#ģ=V™H3JHųš=š¶iš@Ӑ4›4»YĶ" Óģf˜a¼÷޲,é|Ė–lĖF¶$s’®«×%Kē½¢DÜ~ßē<ļ G’6Ҧ¶ Dä|°ˆČaZ¹ėŗ?`-˜—][#ͽłNŅ=żĒČį¶žŸ•ėnz^_bėy!Į 9¦ĒgĪł¶Ł»*+ĖĆoüŲĀßL?ņyæ›+«Ō¬•%rA XDä0*Uó –^„]väĶ—|ØVė«@Ɨ©^{+éĮE7M[Ø7¾e„Śßō8:ŗŽęęŖAZéŲ‚"« P ±Q”xåłƒ[<ÜõPS£ ]±jü[߇ˆœ9ŒJ©4ļäŽ#ßG'Vüó‰£/(•†zĄ8“õėֈ‡ŽYųЩӾžķŪŲ(s3=öõѶ¹żMkŚ*ÓcMƒLŻŽ±Q‘õ×,ĢśŸéē_·‡±m‘ bĄ""‡Q(ĶwźÄū>ŗūĪ“ōÖķż»ŸŸÖT…Ģ,Æį3ę^¹ęĖoūF¶už®IĀ‘—W“¶­ćZswkj4=nlT“°ąµ—ī j¼MM2{}­ļED΁‹ˆF„j®ĮŅ÷Š –ÉĀłY…Ū7n~²oL­Ōپ¦VzןĘ=łŌ憵īXŠ‹‚4F…Ā`°vŒ5J•(5,Õé;ī?ØRźÄU+Ņ>3ż|<5`Ū6¹,"r•Ś|‰PßćßG ńUõĒüšā‚¹¹ŸČdĘŌŌ$óxéßzłAż[Æ06Ō×)”¶¾F#W™»©ōķkņȃ'N÷‹«9Hm–Ūś~Däx XDä0j•yĄź¹%Bsr™(~žŃŽM’Z}h»»¾ōzAłĢ³ƒļ=wŽ·E3R„R/- VV©ÜZ_«-Śę0¦vm®ŻśēG?7æü~|äH[Ļ%"ĒbĄ""‡Q©›7{Öé{~ĖܟVž=’ž[{W«Õ†jØoūÆŗļŠ«Ķńš0H{ęē{ų·¾F[ŹĖ•Ņ=>>Mū¶eĮ¼ģ¢Ń#J7›~žų³ø›«kTr[Ļ'"ĒaĄ""‡Q«Uf5XŽ X€1ŠÜ³źō[¦Ÿ¦L¬«—K&8°Aj·›ļŁįĘĶ&eenұ±}«Š;3¦·_Ū’ZmØ€šUŲ?×īᔫéĢ5ˆØē9ü ˆ._nfĖŃ3X&Ožõčń  Ę hhūmŻ%…£čØ)efyõ³õš%„jéĪÄŃĆĖ :3ž„ųŖś«fē}cśłēMŃSüµå¹õ<§ųB#¢Ė“›Ł”ŽA5XÖD„×e˜ŸM÷ö3=ž9-?Żōø°Č=”°Ų]ÕśÜÖNœņóŖØTE€Je؛3;·S3XšĪė{¶łł[JdēxŃ3MY‰Øėœę ˆ.?J•Rꃄ·Ó –Į (@D›Ū(“¦Cj«ąę¦“/^”Uąé©+Np{śŁ!æņś ‘¢hģS{ÜÓCÆļģx<=ōśŪn9’`¼£šä)?»99,"tķĶ/ĢOvļ_–ŻžŚ¬ÖƽžĪĘųčž+×½āįūKJ«mn%Š–e·æ6+iŲ½Y|Óó /õZ­Ée‚(ĘĶ—ķ°ŹŹ•JƒA€‡‡±X½+ ŠÜ¢M‡ -/3-y@Å~ÓćļŒ^ØŃČŚ·F#“mŽ.mu3ibŃĮ®ŽiĶæŽŖK€ŹJUTWÆCD=ƒ‹Čåä–Fåę•'ē䖆·~ķƒ·Ļ©ØØ‹NæP8ś…W~r©ļ•›Wvń½Śģp~ič —¾ģõÓ¦éĻĆĖ£y{“öÉĖo ź_Pą‘~¾Ś¼‰c‹+Ģ_’ĒßR7šZ'”WØūܰlŚÕÖ®×-¶Ø¼\>Žŗ‚µ«u9`ĄćIżÆ  Ė3sDŌs°ˆz™ČšĄ|Éżˆ”±…ŽOGįbĄźā Öī}!ž mRÆæ9`žéłˆˆ†¼ÖĒžaŤ9 ƒ?ńųSƇ—•+[Ģī••+•\5~ʚ ykœfĻ(ŲŲś“'”[ņ“éēm;Ā®›9oĪ’¬o©/ÖŃcžŽÓęĢ^žŪΰk/>%.[rį 77Ū»æ[³ō†ōÜ!ƒĖ·_Ź5ˆØgtøe¹–ļž÷趗_ūńtb|dły#‹=žŽ4/v¾Č½°Ų]5oŃĢ—ŻÜōUƒ hh› ŅśoČŲßśų”żĮ“Ė+Ō}^y}`āæßŲäėÓX¤Vźė5rļŚZUĮ)tõ©żżķ×÷żfķ}×¹õ›įćöĖÉõ ūĶ2zĮl?_m¾A„¼ŖJf~­ńc‹|ī郇:ūł¬yķ…ƒ_Ϙ7k|S“ĢŻ×#¢īĮ,¢^F.ćļ[˜ę į 0ŸĮ2tśū胏ćōzAYW§2 W9¢ló²%é9ęĒž;ļė!ŠĶßy”•źØĀb÷žÕÕŖpS †-ß²}Ó/ÆŖ”:Vø¹ )æm|aäšņ_A¼UY¹ŗoE…:Śt-¹\Ō.¾:ėƒĶ?nł²³Ÿ­-#†—VOŸZøŽ^×#¢īĮ,"r(SĄ2t!`M›T˜·’PŠ—Žq2wo/}å䉇_\{č@ėcā«ź3Ļ|óŲ›o'ÅoÜ5$7ϽOm­ŅÆI'Ør±ÉÓS_W~ĒmgS\•Ūa8õómŌķŲ¼ńćM›#7¾žNҤĢ,ÆŲŚ:„æL&ź|¼š*’Uœ~ų¾)ƆV“Ūt3zƒģ=˜>=?˖ϽīõŻæL˜>o°¦QįiĖńDŌó°ˆz™>ŪŁē’ü2ĖŻ]Õ°õē|fz¾®^#Ÿ5Ķ­“¢Ļ’ēĶ»vüóŁo“?żbēÜҲźƒA”ygżßW~}ĻŖ¹ēlym“(\µpõĶ Z·aƒūžyóÕ»»2^SŃ¶ŽŠł%±W”T®’bū¶/—‰ā=«NŸ»gÕi›>£-®œWråģ¼o»zžāEY‹euŖłh`@SSŚŃõĻtõ=‰Øū1`õ2igr‚ާfMwwWV–F£•O͚žSšxŻĶ/xoŚrō&˜5¬ĢĶ+O~|õżcś„üeįüQĒßóą»÷:7W&ō÷żiž¦®Ž÷R–‰ˆœ抈.3••u‘›¶]zäW’ų—­æ<µź¶[¦æ.—ĖšōzƒźłW¾æ²£kW©Ö’pąz9¢ßę³øcĻV2ŁÅ%BŃ9¶Ź!"²Ī`]†"ĀNŲłĢ+nnƽÆŃ/åš‘ōAĒOdMĖĢ*ŠŃł«ī]we]½&P­VVÆ{ķ®./ĶK„;ōĮ""rü‘č2tŪ-S×›Ā•É˜QżN@MmC°õ³ŒŽü~ĮgūĪ ąš£æLˆ«æ”±‚ģb —‰Ø÷ąŃe(""ČāĪ¶Čš *Šé *m“ŲęlŅžhQS“Ž#8ČēĀ›’¾{Ē„ŽåRī"$"rVüB#"@p·i&JŠh­~7|»~ųļĒ.Ģ”ĖeŚGXō”J)XķÕĶw2`QļĮ,"ŠöĆRffńąŪīzcŒĮ Źo¹yņŗ»ļœn—÷ŒļkčB›""gÅ/4"²‰^厎ī%šõw)7}»~æÅFÓ]aŗ‹Pä!õ"üB#"›ō‹ =z>õµĒüżŃåŹĒo] p~~eU}Tæä»?EQqć7®śā‹/Rs ?z÷€Ī›ĪŃUgJ³]9ž9ęÆ@NŃiIt›“ЪæT@u¾Ęüœ?’µéŁ[n¹el“Nļ±|Åŗ«²³³’Ł•ĻŅØ½³Ź* 5­ĒDDäŖ8%O䂾łę›ĶQQQßĖd2-xzzž ­€ššš ’żGĢĻqss3ųūūļ÷÷÷ßb±½Mhhhéu„R)õÄ Īņ÷÷ßŌ¢ļÕŅ„KKGżo’żuuuaėׯ÷ļāĒѬĮ"¢ŽEEq„£AD]SUU%___CGĒ:+’·+++GĒÄÄ|™™łŒ£ĒCDdģäNäĀ\9X™ČdlÓ@D½抈ČŃ.Óó.B"ź=ų…FDešĮEQī豣 9š)`±„ õ XDäP‚ p‹ˆz,"r(Atk°ˆØwį9” W°ˆØ7į9š©Õk°ˆØ×`Ą""‡2«ĮbĄ"¢^ƒ‹ˆŗÅڵkcl9®³K„õõõ²·Žz+ü†FDŌķ°ˆØ[|üńĒWĶ™3gŽ ‡Ś¼DX__/ėßæ’eeeźKQ÷bĄ"¢n1aĀ„”-[¶ü³£eėįÅpõŅŅŅ?žx¦‡JDdw XDŌ-^xį…T¹\^»eĖ–ÕóēϟÖÖq¦%B“ó}d WyyyóĆĆĆ÷Ų{¬DDöʀEDŻĀ×××ø_Eņ Ö.X°`j‡¶»DXUU%KHHųG^^Ž|6lŲŽn.‘]1`Q·ILLÜ ¢(*~žłēµW_}õŌÖǘ– ƒEĄŖŖŖ’ 8šÉüüüł “É“kÖ¬9ŲĶĆ&"ŗd XDŌmīŗė®=DEQłć?>Ūz&KńāĆßGĆÕ?ņóóē™žóóó;”œœ¬éęa]2,"ź6K–,)óōō¼ČŃć "¢ĪWx{{£±±mēåå‚€źźjTVVŚcč]¦P(777hµZTTT ®®Ī¦sįååFƒŠŠ hµŚN½·»»; jjjŗ2t"ŗ 0`¹°ääd̜9¾¾¾ŅsµµµŲ¾};Ž9bq¼»»;–/_Fƒ?žńńń˜?¾tžńćĒńŻwßµ8§OŸ>˜5k"##!‚ō|YYvķŚ…cĒŽµ8~łņåpww‡N§Ć|`5ģyxx`ٲe€/æüUUUV?ßĶ7ß ///¤§§cėÖ­ŒĮjƌ5jŠ–_aååå8vģvķŚeõ}GŒI“&ĮĻĻOzNEddd`Ɔ (++³8gīܹˆŠŠĀʍQVV†E‹!!!ŠŲ؈W^yĘźų‰čņŀEä¢F˜˜‹ē½¼¼°`ĮØÕj¤¤¤“xM.—#<<0pą@,^¼r¹\z½ućŅ”C‡āꫯn¬L±hŃ"„„„`Ė–-Ņ󍍍ˆ‹‹DDD //ĻāÜ~żśIćčßæ?}śH322”””RøŖ­­Å¶mŪPTTµZ€€$%%Y}æ#FHįŖ¦¦;vģ@~~><<<0eŹDGGĆĆĆ3gĪÄ7ß|cõĻküųńĖ娩©AFFŌjµĶK’DtłaĄ"rQz½Ÿ|ņI‹P”™™‰eĖ–!..r¹£F’–ÖZ“ĖåŲ¼y³Å,—É“iÓ “ļƒŁ¼y3öķŪ'½–››‹ŠŠ Ģ›7O:Ö°ŅÓÓ„ćāāā°{÷ī׿śõƒ(Š}ūö…Z­¶Ø’2uŖÆ­­EII €–”kėÖ­-f¶222pųša‹Ļ”P(0}śt€F£Į{ļ½×"tfggcåŹ• ÄĄńÓO?Y­E“ĖåČĪĪʧŸ~Śéš-"ŗüš.B"uüųńį 0ÖmŪ¶MśŁ“ÄfMQQQ›įJ­V£’ž€ŹŹJģßæßā˜C‡IĮ'<<žžž€ŠŠ ©>::Ś¢N*<<žžžČÉÉASSär9śõėgq}S˜2Ķ^Ę2kõRÖÄĒĒĆÓÓ°gĻ‹½¦¦&8p “ÉŚŻ‚hƆ WDd,"e>Sd.//µµµ€‹€c~\[¢££„ڬ3gĪ“yWāɓ'„DZ±±Ņć .0Ī™Ļ:Ķ˃EEE(--`\&4§R© eĄjhh›jø:b2Ļž=kõ˜üü|é±)(¶¦×ėQTTdÓ{1`õB¦ B‹;ęl,=.,,ló8ó`$=n½LhΰJJJ¤°„„i9¢¢¢¤ŸMa ²²²¤ĒÓ¦M³iĆ됐€Į`hsÖĖ<ø™Ļ’uk°ˆz!Ó xzzJ3E¶2oūP__oÓū˜¹ŒŒ ©ĘŹ|fĖĶĶ QQQŒu\ƒC† »»;śōéƒĢĢLĶ˃-–ōŠ‹‹‘––†¤¤$ø¹¹ałņåŲ¼y3>Üę,[@@母Ɔ ³zŒZ­nó3uQ/dŠ”Je§ĻW©TŅcóŁöާõ9ˆˆˆ@xx8ÜŻŻŃŠŠ€~żśAŌŌŌ   µµµRKLL”–ifŹ|yŠäūᅦ""" T*1oŽ< 6 _żµÕꧦq¹»»cžüł~v¶] "{ą!Q/ŌŌŌ$=6_z³•y(k/p˜ßm×:ș–öLw Ķ˃¦Zؚši™ŃTT/“ɤY.óåAóń¼’žūŲ»wÆ4k‰;ļ¼Ób9R©MÆ×£¢¢¢Ć’µÕւˆØ38ƒEŌ ™‡®Üõ¦Óé¤Ēę3S­™æf~` G'N`¬Ć:}ś“EĄŒEō‘‘‘@pp0”J%T*DQ”f“ZÓėõŲ²e NŸ>  $$īīīX²d >ųą)“‰¢½^¹\ŽŖŖ*¼öŚkūƒ "ź"Ī`õB¦¶@ז¼ĢC™››[›Ē™„·ī•““#…®ˆˆĄĖĖ MMM-f¦Īœ9#=Ž•ī,))鰑gnn.Ö­[‡ŌŌTĘ»[/š>‹łŸ QwcĄ"ź…g‚Ś IDATplķeĪ|Ė63­õ6;:NŗėĻĻĻ”””ŒuUę³]ÅÅÅØØØ„……Ic·¶}ŗK×ČĪĪ– Č `u³g ¹0€Õz)óYؤ¤$ˆ¢h5`„„„0£ŠŠP †=Æla¾j>SeŽ“«­6 DDöʀEŌ‹ųūūcŹ”),gu:£¾¾ŁŁŁŒĖ{£G¶8¦OŸ>Ņ]{………V—" „:*¢¦¦Ę⸜œ444@”PĄĒĒłłłmīŲóŽń¦%GĄ8;fŗÖąĮƒ­nĖp ‘ˆģ‹w¹ØńćĒC­V£““z½‘‘‘˜2eŠTxž’’‚ņņņ._ēĪX¾|9`Μ9pssCjj* āćć1kÖ,ifkūöķm^'##ÉÉÉZ“›3 8{ö,†*cͰaĆ0vģX8pŁŁŁØ©©——’““1räHĘÖęŪi4ģŪ·S¦L X²d vķŚ…““4éüųųx\qÅ8pąöģŁÓÉ?)""K XD.ļ[yDD"""¬—ššŠ­[·^Ņ{]øp)))7nd2¦M›†iÓ¦Y—’’Ņę¦ė˜V{Ē9s¦Ć€•œœŒ   Ģ;ןė¢(bƆ Šėõ-žß¹s'"##¹\Ž©S§bźŌ©ē:”‹ˆģ‚‹Č…œXDDäҰȱ¹4,r:Üģ™ˆˆ\9nöLDD®Ž‹œk°ˆˆČ„1`‘Ó1ŪģŁŃC!""ź,rF¬Į"""—Ę€EĪȰ ķEDD䤰Čéš.B""ru XätL‹›=‘«āæ`äŒ8ƒEDD.‹œ¹4,r:l4JDD®Ž‹œg°ˆˆČ„1`‘Óį]„DDäź°Čq«""ri Xät̶ŹaĄ"""—Ä€EΈK„DDäҰČé°‹ˆˆ\ ŠāGĀź ŽŌX½÷VGƒ.ŻߝJ;_įŁæŸ_żĶ‹J=žĖĀ=ńGŸ>ītō8œMÅłūļõ5ż="WųöŸåe»§¬ĀѰƒ®4XŌUOwō8čŅŻø @@ŌU;v0— ƒ®ō˜£Ēą”t•#D}ŻHGƒČ%55J„£Gį0\"$"""²3,"""";cĄ""""²3,"""";cĄ""""²3,"""";cĄ""""²3,"""";cĄ""""²3,"""";ė5[åm 9łõO‚ŌV+)Ó ¾Ačé A°<ę÷Ų¾·E(B‚Ü0t ?&Œ ‚Z-os Å„lŲ– Yµ€č\1<CśY=¾¶N‡²ŠFųx+įļ«‚N/bóoø]ƒ?5¦OEXˆ{gžˆˆˆŗÖe¦Ŗ¦ #ÆÜøqa Žų×h«Ē=“ś6lĶ» ysĀŅ6°ź±X’K®Õsż|TųjŻ$ Oöoń¼Į ā…·OćåuihŅYī’¹`V$ŽZ;n­ĀŁwsšĄ“‡1oF$^zr®_¹ ĒOUJÆæµv ®ŸßdžOODDŌ3øDHöĢk'[„«Š`7D„ŗC&3†°Śŗ&ÄDyZœ÷ÄóĒńܛ§¤pe:ĻäĒ-yxģé£m¾ļ¾#„ø’‡[„+œd}ꋈˆČQ8ƒE¢7ˆųäė €—§ß¼;#‡“Zö)ÅѓšSµ8oĻĮ¼żÉ9Ę%Ē·Ÿƒ1ĆƒÓ-÷īEy„Ÿ­ĻĽw$".ĘĖā½Ė*±q[>šĆ]Ėąć„Ä©sUˆõīĪLDDŌi XŌ)ł… جÖĪŽ’ĀØT2L‚ÉcC,Ī{īĶS„B†’¾>|„×ʎĀæ†»;ƒAÄĻ[ópĻķ‰Vß?±Ÿ6|2 īnĘeÄ«¦GŲķ³Ł —©StfµS¦Ó‘āR R—fM k®L̊”jÆ+oóZw,égóū9 uJH›Tš¾yGźtž“røƒ;<Čź1jµį뱊K5m^+œw ‘ `Ą¢NńōP`ź„P@N~=’q'Ź+µķžs&½ZzÜ?ΧĶćü}u[ÕµMv)‘ć°‹:mõĆCrØuõ::VŽ)‹·ąédžbįģ(«Ē7HŸūŽśä¬ÕćL}±Ōję~""rm XŌiżć|šÅ›ńĒGö”ØDƒ‚āÜžą>,žWž ÷–­źź›—o»¾ŹÄ×[Õį1DDDΌ‹ŗdÜØ ģüvYó;~Ųlģ‰õ톤«ĘwļOF s‡xN”/æ.VZ lKR|ŪˈDDD®€‹ŗ,Š_÷_‹MŪóńŠź#(*ŃąŌ¹*ÜńŠ>|÷Ži{÷껞–^‹QCŚø"QļĄb—Ė˜N/v| ®œĶŸOGTø`÷lŪS(½n¾äWRÖö‚DDD½ÖeF©hžæ¼¶®ķ»õÄNfÆČ0<ū·įŅĻ›wHcū4o›“[Pß¹ ¹ ¬ĖŒ»Łr]Uµõ€Õ Ńc’‘RégS«ŽL"- ę6ß9˜l¶WąŽ}ŝ.‘KbĄŗĢČe‚T€~ņl•ÕeĀ·?9×¢·US“Įāk4śļc2zX ōž[vą|fM—ĘNDDä*°.C¦»ōjj›°Ż¬V 0.ķ=÷Ę©Ļ5j[¬­» ”·2«õłś,iiqPbóv8r™€?\ĄøYōī³Ś­=æØ·åwž9ŽExš?3{–V<²·ŻŲŃ8’ZŽ/0†¤ŸGžł; UÕZų ÕO«ĀwķFL”'ęL Gß>^Šé Ųw¤›¶ė®Ōj9–,źŪā=Wݚ€Æ~ŹBN~=Nž­Ā¤k¶ąź9Qˆõ†®É€Ć©åŲø=ŽžJLbŃK‹ˆģėŻOĻ£A£GXˆnXćčįø„žw{—bįģHĢ›éčᐓćæb—”[®‹Å‡’»€3éÕØ­Óįµ÷Ļ“xżĮ;ą7ÄįĆÆ. õt%r źŪĒ šĆ/ʞWY¹uX÷éy‹k+2ü{õHDGx“xŽĻG…ĻޘˆļŚ…ü¢”U4āż/Ņ-Ī÷ V øTƒ¾Ń^öśøDdÅ oŸFYE#F `Ą²Į¾#„xhõĄś9Ųżżl$Äz;xTä̰.Cjµß0k^NÅ¦ß PVŃw’}ń§Ū1wF`Õś#åp)<=š’šÜs{"żÕŲ¼£ĒNUHµZžjL‚ūž˜„d³åAs|°ćŪYxćóųqKrņź m2ĄĻG…”ƒü0f$n\c1{•ē[..1FGzZ»4Q·ŹĪ«“ė "2sj°Ø] X—© 5^]3  m2@„“,Ē»~~\?æO‹ē<=X±4+–Ę0¶shj2@„²­œĻßW…ĒļKĘć÷%·ūŽęʎĀŲA6]ŸˆØ-é™5HKÆīŅņŽä+B膒2 būxį ~'Q°ØĆ€ÓA€ĶįŹŽļMDd«é7üŠć§*1ylH—VXˆ;nøٵHˆó†›ZŽńItYcĄ""¢^ļ܅Koćå©Ąą~H¶i """²;Ī`QkŅpųX9ҳk”׹ļ§Fb?oōóéš\½AÄŁō•6@µ”‰ż|ąė­ģ‘·O«5ąą±2däŌĀ  Ę€x_ÄÅšĪčĖ I¶ī.čwķ,æ./?9Ņźq/¼}k_?‰QC°éÓéVł-„×­ŲųęŻÉ˜2.Dzž¾æF^”厤QįųĒCƒq͕ѯÕ7čšĀŪ§ń鷙(«h“x}Ų ,že×ĘĀĒK‰=Kpõm;Z³s_1‚’æ–~žģ-_̰:~‹ėĻŚ€Ü‚z JōŎofY¼¾q[>Z}Äj#å¾Ń^xśĻC1gjøMļE®‹ˆˆ$ćFA„’A«5`gJŪ{‡nŪmÜāHjŠK5 r³8ęĄļeŒ7Ā\1"pś\5–ži/ͶÖ2—[Pj+ū¤–U4bį­;p&½ŗĶ1=Y£'+0t ?&ŒnūCvƒĆĒĖqūƒūФ³¾µXfN-źt=:&r,,""’xø+0zh ö,AV^²rėÕ²’\E•‡—0n’ĖŽ,æ6ÖāZū.n?zh tׯŗOĻIįjłµ±øE‚ŌČÉÆGjZ%¾Żƒ«¦GX\ėŽ‡öIį*!֏žß@$'ś”¶N‡³Ŗ±īæēqģTE‹sb¢<ńăϼvM:būxµkh°e0ģŠ7?:+…«•Ėp×- š÷U!;æĒNV`ż¦\̜f—÷"ץ€EDųźūS‘o|4ģVÓϵ‚ Ų¶Ėw+^^^u‚ XŸžč€··wƒJ„źŅÆłŽŽŽwwwmĒGZņńńŃśłłi<<<ō+W®,ģųŒŽmźųPi;­)ER£_“ßRŠ 7ˆP«åhlŌć—ß,–N/āŠ1c›<6DzžČÅ`ęē£ĀóOŒ€BnÜ>)ŽIń>½÷`ĆÖ|ģ>`OB¬7~ł|:|¼šė­†'ū£“¼Ń"`E…{ąŽ;Ļæu M: :¢ł9{2ĪČ0¬ytd7¼˜ą‹ ¾Ū‡QļĒ€EDųeū…˜cĒNßąčq8šR©,Z¹rå\GĆѦŒ ĮÓÆļÜWl°¶ķ.Ģž†·äaGJ4zø»5÷†J=])-‰Mŗ¢9`ÕÖŸ PKįŖ#Ÿ­Ļ”ÆżėšįŹYŌ]ü\Įj)\Ńåmˆ¾ŽźF77·<ó’)Šr¹\^Ż•’ ‚`YDC.cč ųł7xßu ƒ(½&ŠĄ¶=ĘI¾…s¢ =v¤µø†iyŠĖSįÉžŅó!Ę%¹ģÜŗŪĻ“E§±}ÆńŚ‘aR”¼³ ¾ų¹Ī¤W£“ܲŸ.?œĮ""¼øfÖį÷>żżGŅŅŅŌ¹¹¹ź®œ[RR¢,,,ģRQM}}½¢¾¾Žł¦F@.0éŠ`üø%e8y¦Jj°y"­E%ČefO— ā7m/Ą•Óšk§ö_ XćFC©hž]~Ś„P!g/T£A£Ē’U»ńÅ[čß„æĘŌK0`‘SIJJjLJJā€ƒMŠ·ävī/–Ö֋wŽO®„]ū‹±yg 2™QlžĮštEĖ»łī\æĪ@aqNŸ«Ę웶ᙿĆü™Ö·ÆÉĢižåŠvŽ^R÷ܞˆ/ČBE•æŸØĄģ›¶įŁĒ‡³°ż2Ę%B""²0Õl)Ī|łoėÅåĮŁSŒżœLwü—jp$ÕXd~!«FZ&›<6“Åuż|TųāĶ »8kUP܀[ļOĮ­÷§ ¦Öre¹¶®ł9_ē` vƧoLf­²ņźpÓŻ»±ź/Ń éŅ=äā°ˆˆČBßh/ÄDŪ3¤.…Vk@um5Ž-7ūbĆĢ+Ķgnś-°ļb’«@5&XvfONņĆ®ļfįź‹5\šÓÆy˜yÓ6dęŌ¶8¶Į¬_–ŅÉ7‡3,»¾›…™“›g­ž÷c®¼yņ‹82rēžŪJDD3e¼qö©A£Ē”ćeŲ¹ÆM:śDzb`‚/ O¤'%oŚn X..NÜęuž¾*¼÷āX|üźx©+=³×ÆÜŻ¢!§ZÕ|g¢µ.gä†/ޜˆwžƒ ćlÖɳUXr÷nh›ŗŌł„\Y5ŬUjZ%5ĪL™–MęN7ÖO„ÆFy„'ĪT&_ŃńsgD`ū×3‘œd¬ńŹČ®Å›“^7ożPUćüĖäŚy}°ķ«™ˆļė Ą²>üߏŠzY5éŠi*'Æ§ĪƒSėżō®œÖüó‰“JœĻ¬‘Ī·EP€½:NŗŪšū_r¤×Ģ;­[ŪćĻ™E„ŗćż—ĒBø8‰÷Ć/¹Žõ(,""²*ĄO…!ļĢίÉ3UšņT`ĀØ–wąČ0ĄÆ» QWÆCTøāblæė/&ŅSź—•‘mżĪĮ£'*,Ī31ļÕÕѶĆģf`‚/ūėŠ2Z՗QļʀE— QŠJ48‘V‰c§*[P½_Źƒˆģ¼:;UŌӕ:×ō޹õ8vŖĒOU"'æ:}ÓYŃÖęÄ&SĘė°/GI™SĒ…B„jłO‡ 4Ļj}·Ń8ūdėģ•9S»^/JA((@-۟Ϭ‘–[ŪŃĪĘŌ€qEĄ1u\¦Ļ„ÓńæłĖ ū`Ł(=³w>z€ń‹äŃU;<ē‰ēKūy}öĘiŖ{ĪĶŪŗüŚšd¼šÄĄ®żÅxņÅTĄkO’ŠNm%ŠĄņ{÷¢ ØūūāµŽjńśwsšśgÜ= EAWRP܀W’s?’š‡‚ā–wņø©å˜<6·\kõó„ÆĘ«’IĆ¦ß ,¾˜U*F ĄÜéX~m,¼­lߑžYƒWß3¾wėś•R†”ż1wF–] _•>-‘mLµMEˆ"¤e¬Ö¦Ž Į«’ICQ‰qy®õņ ÉUÓ#šžéŅc­ū_™7 ,ŲŻāżŠJ48~ŗėÕāõ™“ĆšŽēé€'_8Ž/ߙ¹Yńü¶=EŲ¹æż€čÆFYE#.dÕB§­nÓ³ļp)VžłźtxīļĆqĶ•Ńķ^Ó\~Q"B-¦fåÖI›TĒ÷uŽ>^d X6jŠč„DX¹ķؚŒœZéó»GŽŸŖģš·Ę¶˜÷©¬n’®’ŅŪ§ńŸĒvźZæī*īśQY¹ż¹ÄlóŌ²Ź.ķ”ėp_ż”GÖAmõżƒ5zlŽQ€äD?‹€õłśL<“ś“Zė’_iµģ;\Š}‡K1ØæŸÅė7åāO;M£õ8Ś&+ĆĮceˆ‹ń¼Ö-u‡ˆPwäŌ£¤Lƒg^;‰ŃĆšū‰ ps“ćDZ%Žüš¬ōrķ<Ė¬©÷bĄr€!ż¬Ī`7HEœ±}¼¬nh×Ēśo@?lÉƙōji­ß’~’ŒĶĒŗ¢Æ~ŹĘ’żõ ōÅėē£ĀÕWF!©Ÿ(-oÄésÕųuw”E8:’ZŽūž8,;0Į3&…!:Ār™€Ā ŽŖĄo)EōScb«ßÖÓĪWćīĒHA:!Ö³§„£O¤'” ćł'ĪTbėī"xøÉ1k’õ“ˆŗĖča8pń®Ą—֝–ž_ŗøÆTOjµcGaūŽ"Œ µhM„”aęÄ0|·) ±ŽV·æ9u® §ĻgsžxžøÕė\1<«žŠæÅsń}½ńųżÉxź%挿ö½EŅž„€qkŸń£‚±÷PI›ŸwīŒHlŪc<ēÓļ2ńéw™Ņkw.‹ĒŲAhllžeŖ­_Œ¬Ł¤¹õČ-ØĒѓÖėĦµŲ4›z7,ųå³éVŸ’ē«'šŹ»i€gž2¬S[, "^Z—†wžcÓń•!åP©Ķ×w5Y¹uxąĶiįģ(¼ōäi[sÕµM-n€æwF:wќ(¼óü-~«7)«hÄłĢZ‹×^’ąŒ®fO Ē‡ÆŒ³:KXUӄSgŖ,jZˆŗŪCw @fN~ŽjÜGŒŪßX+Ÿ:>Ū÷IĶEŪrå“p|·)§ĶŁ«Č0<ŗj ÖoŹÅŁ Õ-^ ōWć×ĒᔕIV’{øēöDD„ŗć…·Oć\Fō|B¬7Ö<2g.T·°–]‹#©åųņū,©~2ĄO…+§E ųbh¼n~ģ9hÜÜzé5±ķ~Vs qŽøE¾’%Ł- ŁC‚ÜšĒ›ūįžŪ­.KRļŀՋ¬ß˜ƒGļ€~ū®“ēßļõīŁ«?’ėwé7Š™“Āšī Ö«3…».Ösø©åxį#Ś<7Š_muC×]ū_ōr™€Wži5\€Æ·ćFuüˆģĢĒK‰^‡Źj-ŠK5ˆ 󀧇õ–_‹‰c‚ŪĘ ŗÉ¼™‘Ųśæ-fĄĢłz+ń誁xtÕ@T×6!· Z­Žž Äöńj³)©ÉµóśąŚy}P\ŖAY…ž*„k[M³q€õz2…\Ąæ×ŒĀSAQ‰”ĮnuKÆé‹)cCŠŲØ·ś=ŚŲF¹@ æß—ŒĒļKFE•łE hj2Ą×[‰¾Ń^mÖ·QļĘ€Õ ųūŖ PČPR¦ĮKėŅšĘæF·{ü™ōjlŚž¹L@|¬·T€Ł[œĻ¬ĮÖ]ĘżŅÜŌr¼ōäČ6’5 ½TŽæŸ·ÕYÆöļV4śĘD{J’9#?U‡Ē}¼”:ŠæĆk¹©å6gŗfgoĢ1 r³ųļŖ¤¼¹G–·gŪ{śūŖŚ½”$*Üz8š— [ĻxwęśtłąŗD/PUӄ錷Rós¶Å^^­½žĮYˆ"0vdŌjĒ’ØoŠįū_r­NÆwŧßfJĖĖ®µzgO{ä2AśÓ¼&£S×øŲ0±«ēQēdē5÷Ī “^'v)“MŌ×o–ńņpŽM§É*³< IDATy8ž_Wŗdƒ(m3”ӋxåŻ¶—’ņ ėńõOŁ€³"QZÖŲ#clOIY#īxhīxhŸT„z)¶ģ,/2ŪLÖV*•LZö;ŸQƒō̚ĪhI ųęÕ#õā­ēDŌ=ŠK5H9l¬) v³Z`©~?Q!ÕnÅD{ŚżśŌū0`õ}£<įåi\ńżņ‡¬æĶ™{ūćshŅ Ę»jJ+°ģ©A£Ē¹ Ę@ä锥˜į]ŗŽéVt½AÄC«tŗ­Ę¬ÉĘDxxĶ‘NŻ‘DD–R•āū_r-6L.)Óą®Ē4·B˜k’VšF=Ö¾~RśyÄą»æõ> X½DeµKõ`ģĢüŖ•"öŠ*->ž:€1@ų©ŚģńäŖNœ©”~ĖLŠ÷é°h¶-¼¹ŸT·µū@ V<¼I·Ż'¶>^Ž[ļOA}ƒõ^\DŌ±·?9‡;ڇ„ ?ąŹ„ŪpķŠ˜½d†ĢŲ€ūŒ7„ŗįŽ;ķś¾ßnČĮ ©?I7¾xz(p•‹6]¦žÅ€ÕKˆ"š§ŪśK’Øž]¦Ō0Ļä½ĻÓQw±†ąŽŪ{|O®ž_ŲÜ©=!¶ć»)Ū2t ?ī6ėÅóÓÆyøśö¦méēƒW~žuW!ęŻņ[‡õqDdIoqźœq‹œŗz+ĒŽ”bI-—f—ūõõĘ7’™ŌfŸ®®*.ÓH7½°ę‘!šc;uŒwvAy„VźpŽžŖźžŻó*2Ģ7-ź‹æŗm“’~ļ žżŪpĘ„³w?==4cG”AÓū–­jꚒĢ;{÷_k ٵRŸ CĒŹ1żś­xkķ馂ö<“rŅ3kšÕŚ·Ōӕ˜qĆV¼žōh\5æŁJ.°’§9Ų} {–ąBv-Ŗkš TŹźŽ‰c‚1wFd·ō™ŠńĘĢIa rĆõ b0qŒõ-€ˆZcĄź‚Ķ; °yGAĒ:Ą}LÄgßf@§ńßo3ńĄŠ$„…øćÓo3Pv±ŽŹŽS蝑v¾’ū1«Åsę{ōmܖo1K4rH€ĶŪČŌŌ6/ƙ6wķ*¹LĄ{/Åź—RńęGĘ=Ė*qÓŻ»ńĄŠ$<śŪm’ Ą’čO¼üīiˆ¢ń³Žrß^Ü}Küżd(œD&²…L&`ņŲLŪłM¤/ÅĢÉa˜9Łö¦ĻD& X½LL¤'®›ß_|Ÿ…ĘF=>ł&Ü=Ÿ\¬½źēÓęf­=įBVm»MNK)Āo)-ļ$¼õ†8›–y”=ŗ£+äV?2ƒ}ńŠSĘbuƒAċļœĘŁ ÕxēŁ+Ś}™LĄ_ļ„A‰¾ø÷ļ‡PWƃ(o~tg3ŖńĮKćŚķ©CDD®‰« F ĒE1÷Žé8y¦ŖFŌŅż+’šÕŁŠDlŚ^€„‹c„ś…?ŻÖæĖ…ß®ĄĆ¬µ=—@o\ƒ!üńLJ÷IYܒ¹ģŽ}al‡šÆž…A‰¾ųćĆūq"ĶŲ¶įם…øżĮ}ųļėć;Õ•ˆˆœVōėėeÓ¦[v:$`Å÷õĘĀ9QųncŽŸ®Ą'_g@½™®›ļŲŻÜēΈ@é‰ėZ<—•[‡‘Wn<ū·įøcIæ._ßĖ,`™ śķe@‚~żrxņ°ŌKlż/¹1ä¬Åę“ÖÄ÷õĘ/ŸNĆcĻ•f·ģ,Ą‹oŸĘ£«Śu¬DDäX,鄼sĮxwį«ļ7¾ė–„6÷Äė-¼Ķö,(jhēČ®qw“ć­gĘąÖšö³oœBI™¦³š©Õr¼üäHüé¶ę:øWž“†œ|ŪīN$""׊»’µ½Œ Hš‘ź–“Z㦣°aÖĶՙoF{öB÷ģ±(ĄŚæ Ēč”Ę&¦uõ:|³!§S×xādLg,ÖÕj ųņ‡¬Ī ""WĀ€Õ‹™f±ą¶›śIŽ{³ž±ŽŅyŁµØ¬ÖvĖū(ä¾»¹Ļ՞ƒ%:_&ščŖA]>ŸˆˆœV/6d fN ‡Z-ĒKć=œ”RɐļĄø/斝…Żö^£†6oĆSXÜłåČįÉžRq{WĪ'""ēŀÕĖ=żē”ųšå± rsōPڤPˆ‰ņDL”'|¼/}—ś¹fM?;ÆNźŪՕó‰ˆČyq‹z„Xļ[ŃÜó·C8}Īžļļž÷¼ōxĀčĪoŸaŚŗØ«ē‘óbĄ"›”•7"+·®Ć’iµGšŌCC¤ėÕµMøjŁ6|üՅŽć|’łģ<>_Ÿ)='ŠĄÕ·ķĄ›žEM­å~’•ÕZüż¹cųäc/+?®_вńģMwļĘ+例ŲȤ¦¶ Oæzor€qKŸ„‹ū^ŹĒ%""'Ć%B²Éź—S±śåŌūå³é9$ FŌ¾ø/|šŅ8Üz štŌÖéšąSG°śå”č‹ 5ŠĖ4H=]‰Ś:ʏ ʒE}Ž–aĻA㦲«_NÅĄD_„»C.“_s5RPąłæ‡ÆYķŲɳUųuW!~ŻUˆg^;‰¤D„z@©[PsjZt™ś±”tŽ9""ź<,źµęL ĒWė&įĮ§ćBV-ć쓵–ŚęĄsźl%d2ƒ^ÄńS•8ŽJ‹s¼½”xń‰øęŖčϟH«„B.@§”7ˆ8y¦ŹjGw79žłė0,[{©•ˆˆœ –ĀBÜńă›xŚāʅ1R3J?ŸŽļŽ›>!>;‘'Äzwxü€iLƒżm“9…BĪ ±œA¹bx ōŗ­"Ü«X{ā˜`ģśv~ޚŪņ‘–^…’²FØUrØ1(ŃWNĄl³ °o»±¦O ĆæäāŠ±rœ½Pŗz4zųśØŠÆÆ& ĮĶ‹ūĀĻGeńž7.ŒĮÄ1Įųžāłiēē×7čąē«B\/LŒ„‹ū"Š_Ż“DDŌCQG8zöP“óģTmõ”="W$w}Ł/ī¹’:zΦ"ķÖu}ŻHGƒČö’h4”ĪQ˜ė,r'"""²3,"""";cĄ""""²3,"""";cĄ""""²3,"""";ė5}°dJ’2Aīāčq¹"¹Ü?ßŃcpF‚Üū„™ÖŃć rIŹŽū?öf½¦‘³ą!9nøa|Ÿ>}ž–””t·£ĒBDDt)zĶ!¹¾“““¤œœœÅnnnYŽrōxˆˆˆŗŠ3Xä4DQ@G…ˆˆč’0`‘Ó0,—ķŽUDDŌ;0`‘Ó0 X¢CBDDt‰°Č™0`QÆĄ€EĪ„5XDDŌ+0`‘Óą!õ XäLL3X XDDäҰČi Ņ̓ XDDäҰșp‹ˆˆz,r&¦æ XDDäҰČi°Čˆˆz ,r¢(å*,""ri XäL8ƒEDD½9 nöLDD½Ö’³wēaQ•oĄæ,ƒģŒ"0ˆb* "ø”¤äB å®‘[ż\ŅĢ2·W-+·2·²ŒČ}Ķ½ĢŻ\pĻwńąEepÅ꿃ę0s`Fü~®ĖĖ3Ļy–{Īįö9gĪCʄ3XDDT%0Į"c¢N°ņŠ­EDDdä˜`‘ŃČĖĖć U L°Č˜˜€©)?–DDōbćo22&œĮ""¢* &XDDT%0Į"£ĮމˆØŖ`‚Eʄ3XDDT%0Į"cb &&&L°ˆˆč…Ę‹Œ{&"¢Ŗ‚  .öLDDU,2&źµ™`Ń   .öLDDU,2&¼‹ˆˆŖ&XdLøŲ3U L°Čhš[„DDTU0Į"£”N°øŲ3½čų›ŒŒ g°ˆ ģŃ£GfQQQ֕Ńˆ &XD„ąāā2ߏŹj—££ćOŗöϚ5«ž««ėž–-[žšńńVŃńUEnnn3­¬¬vI„Ņ• 7&Xd4ų Q¢ŅÉĢĢtŹŹŹrĖĢĢtÖµćʍo*•ŹL¢££G¤„„ńg~eeeÕĢŹŹrĖŹŹ’Uv,dÜųŒ g°ˆ ČÖÖ6U½-‘HRų ]#—‘‘ĮßĖU„ye@¤¦ń Q&XD°~żśm½zõrP(²ŠŠŠĶ•‰ėܹó›W®\ ’H$÷ļß’¢²ć”²c‚EĘDż?7&XDąé陳ø²ć ’?~|Rnn®½³³óįŹŽ… ƒS‘d4Ō÷`q‹ˆˆ^tL°Č˜š,¢Ō­[·,bbbŖUvŗ<==GĖd²ynnn³ ߀iŻØQ£1–––{4hpĘĖĖė“……Å!—ł3gĪō(m¼3gĪōPĒ5|ųp?]uĀĀĀÜŌuś÷ļßFs߄ >¾ŗ:Žųųųć.®g§Qē<€³ķk&%%eddČŗuėöxß¾}óT*•ęååY&&&v;vlĄ£G†M›6-®p’wļŽ•ųłłĶ}ųšaĶņģģl뤤¤b³Zµj-MKKk^ø<77×>%%E¶f͚wīÜłņšįĆĄ½{÷¬ÕļEM©Tŗ$%%¹Ø_[YY„jī_¾|¹Ė˜1c–ggg»jē˜””4}śō€ŒŒŒ”³gϾU\¬Tž8ƒEʄ3XD <<<ŅÜÜü ¤¤¤“·ŠU﫯¾j«R©$ąććsH]ž‘‘aśŃG-P'WNNNGCBB>ķŁ³ē—C——gµtéŅ/Ė’Ż•žžŽp’žżÓLLLž5jŌhUĻž='|cii™ä'< ,˜„T*‹üo. ąSur%‘H7jŌhu@@Ą7^^^+lmm’.n\GGĒė`eeļźźŗÆI“&‹›6męäätōæ*&'Nœ˜¤¾¤ēęę–įāāįāāabb¢üoĢ$u™‹‹K„››[Œŗ’““4Ó &|§N®œ‡„„LéŃ£ĒDggē#’½7ė°°0~ Ńp‹Œ†ĘMī|VQ9’Éd9®®®GzåęęZ?Žūöķ' ×»zõj ˜šš>›={ö uy=‚ ESšššŲšĻ?’,Ōhv¼V­Z9<蚞žī5nÜ8ļ~ų”ŲÄÄŠT*•E^^žŁŠ”C?X¹r„0 ¶{÷īĆoæżöĘģģl—ōōtļįƇ7_·n]”z’Ų±c'$$ōKKĖ;k×®śX½_©T.qrrZž––¦óņ姟~ŗ!66vļüłó‹ĢŚÕ­[÷Ė„„„^999óęĶk²zõźØ<0`Ą077?š››+©^½śµÄÄÄ)ŗśļٳē›ééé^Š Aƒµ7oŽüQc÷1™L6/)))H”P4żōÓOĪ;÷f)g°Č˜š1 D¤}ūöÕŪżõW§ĀūÓŅŅL“““Ū€££ć)’ õ¾‹/össó'{÷ī /Üöƒ>X„Ž>~üx‘KfĮÅÅ%B3¹€īŻ»Ė[“h±\żśĢ™3ķ5÷oß¾½7ž›IļŪ·ļĶä $‰ŹĢĢ,[lĢ#F$éJ® C‡ūŌŪwīÜqŃU§$—.]R÷Ē\Rx’{ļ½'÷£GVŹq§L°Čhh”«|ҤIĒšßā>|詹/11±=T«VķŽśõėĻ2__ß$õvZZš““ķ###­Ÿ•H$*°““nÖĻĪζk+&,,ĢmõźÕayyyÖTNNNĒüüü5mŚ4ŽĶĶ-żäɓõ¶oß¾$I©,‰D"÷Ö­[’zšąĮż„ķƒ*,2&|LQūńĒÆ®^½śAvv¶kbbbĖ““4Ó'Ož4Š^;;;įŅSjjjņŠKó 솖••% į^+[[[!ÉĢĢ,õ ā .ō_r…×^{ķė?’üs‡ęžŒŒ óķŪ·ĢĶĶsutQ,[[[įø?~üøÜŽ;æEHF#//’žLĪ`U‰D¢ŖS§Ī!xśōé«óēĻ÷ČĖĖ«fjjš5o޼"õńń¹«Ž–ĖåĻõ<'1ęęę9źķ§OŸ–zI{÷īuČĪĪv{{{a9™ęĶ› QHOOwÖ£+­ēɤ¤¤ų€D"ytōčѝÅ5”H$9Åķ×ÅŪŪ[8ī©©©=īT>˜`‘1į=XD• [·nüožżśėÆ]ü˃¾¾¾™…ėŽ1āŽ©©i&$%%µ6dĀ,RFF†ĪY¤£G ‹Sk,Æ·… ¾†’~÷½ņŹ+ƒHœhjjś ’““EĄV*•6——§õūóٳgR ’į«źĖŽb,,,D,±™»aÆūć3ōq§ņĮ‹Œ 4JōT*•εõõż÷ß_WÆÓßüüüŠ\ww÷gŽŽŽ‘™™éP–±5łłł —ģ’““= ļßææ}ttō õ뜜œR½ļ““4ÓsēĪ ņ—äśä“O„÷čąągooČ_pyüųń^…Ū‡‡‡×R(’{©õ`VssóLČĪĪvUÆ5Øi÷īŻBR¤T*Ķ ļ777śß>[]±7iŅ$«FĄÓ§O<˜I–‘c‚Eʄ3XD„ ‘HžĄ³gĻ\¢¢¢ŹtIķ•W^9J„ŅŃŌŌ4sīܹŠÕ}ć7¶Ŗ·wģŲ1}śōéõ ×?~¼Wi“ÆŠŠŠGęęęiščŃ£Öæ’ž»pÆŃ©S§l 4G©T:©×+U*•¢÷ß½{·Žęk„RiҼyó éééžP«V­=ƒ Ņś&^Ɔ Ø·WÆ^=I3QЉ‰©öå—_~’~oŖ¶ŖęąąpČōC÷īŻGk.$Ż«WÆ×’śėÆńź×ŁŁŁE0õ£# E#ĶÅ·ÓŅŅ„ßӁ[ŌŪ[·n1kÖ¬z…ū;vlćžżūūė<(T”x“;&XD„`cc“ųųńcäååYtīÜł'GGĒčĒ7LMMż “}õīŻūąÜ¹s‡€““Ó)]—Õ6lŲq$99¹“R©¬łõ×_Æ_¼xńéš5kŽR*•)))>iiiͬ¬¬žMKK;ėąą ×C/%‰ŹĶĶķŠæ’žŪ/77×vąĄæŌ­[÷€J„2MHH蜝]ĖĮĮįbõźÕcćććC333ÄśŗtéŅøźÕ«·wqq¹÷īŻ HOOoōß8ÉóęĶ+²†āŹ•+w¶lŁņŁŁŁ.iiiĶüüü¶Ō©SēHnnnµ{÷īµĻĪĪv«Y³ęɇ¶ĻĶ͵ĻČČ0µ¶¶Ī€.]ŗü¾f͚&·nŻģąąššMĀÓ§OkgffzX[[’“››k“-S(Ef©ģģģžMOO÷ĪĶ͵÷ńńYįäät1==½VFFF-…B1¶mŪvŹÉÉéÄƇ•J„ĖĢ™37†‡‡’éččųR©“LJJņQ(>ÖÖÖ·322ś«c£ŹĮ,2ź'¹«’wJDÅ 8¤ŽNKKkvūöķr¹¼åīŻ»K½Öݜ9sb­¬¬āĄ××÷PIõ80­f͚@^^žEJJJ‡ėׯæėÖ­÷ŅŅŅ|˜ŲŲŲܽuė–e ]Žc™D"I€ģģlYllģ’nŻŗõnvvv-kkė/^<„I“&‘ P(dÅõ%—Ė[Üøqcč7†Ŗ“+KKĖ»“&MSxö Čæ 7jŌØ’377O€¬¬¬:±±±’»}ūv’ģģl7‡ ‡ś¬Zµj÷U*•éĮƒ…oõźÕQMš4Y‚’žƒ˜™™YļįƇ™™™VVVqsēĪļźźz KHHŲµcĒŽ¬:uźÜ*<īźÕ«£ärłÄ'N„>{ö¬†„„erõźÕoīÓ§Ļcu=’ŒÄÄÄ1={öģ|įĀ…7ŅÓÓėäå婏{t—.]…‡‡_+ķq'Ć3Q©TĶK®FTžŖWƾT.—·tww’5..nneĒCD/–>}ś“S?̳[·nwļŽ}¬’C¢—/’1į=XDDT%0Į"£”¾ L°ˆˆčĒ‹Œ g°ˆˆØJ`‚EĘÄLMł±$"¢æE(ī =©—ŹWÓ¦MńēŸ¢GżōÆģxˆčÅ2|ųpØT>|ųw•Ī‹(@æŹ¢Ŗ`‚EF£aƆČĢĢD:uJ®LDTˆ««+Ž~ūm€››[%GC/;>¦Ag°ˆˆčeĀ,āĶ.DDDDĘ‹ˆˆˆČĄ˜`or Å=äååTvDDDz³¶v‚Db]Ła¼4˜`•Bfęc<{¦Øģ0ˆˆˆJ-##ąąšJ%Gņrą%ĀR`rEDD/:„2³²Cx)0ĮŅ“Rł“²C ""*³ŒŒd(••F•ĒKOĢų‰ˆØŖ`‚Už˜`é)'‡F""Ŗrr8iPޘ`éI„RUvDDD”RåUvU,""""c‚EDDDd`L°ˆˆˆˆ Œ ‘1Į""""20&XDDDDĘ‹ˆˆˆČĄ˜`,""""c‚EDDDd`L°ˆˆˆˆ Œ ‘1Į""""20&}E IDATXDDDDĘ‹ˆˆˆČĄ˜`,""""c‚EDDDd`L°ˆˆˆˆ Œ ‘1Į""""20&XōŅ“Jݵžø»7CĖ–±~żVdeeél3{öw˜3ē{ƒŒ[˜›[ć2÷­6{öwpskl¾ŹBóų½ Ģ+;¢Ź&—Ē æųåņx”<++’÷_ĀÖÖsēN×j“››‹œœƒ«I„RįŁ³g„źKWü@~œ*•ź9#4±÷JDTU™ØTŖę•„‘:ĄLż"-ķßJ …Ź›X‚¢Ž7žLŒłærWטĻÓ ;~cń"ÄHō2qpx„pQ€~•J•ÄK„D%;v&Ož^rE""¢’0Į"*Į믿¦õZģ~"Ͳ÷ß’žžž„¾ļH¬ļ+W¢Ń¼yČdÜ7nÜŅjSøżÅ‹WŠÄTøŽJ„ĀźÕįźź…Zµ¼±{÷ž"ńōź5uź4A«V0kÖüRŻK„nŠ?ż“\“ެYóѶmd2OŒ?±±·EG§N=įźź….]śaŪ¶ŻP©TxżõnØUĖ]ŗōƁGŠō?}ś\“i WW/“iŒää‡%ĘNDTV¼D(Ž—_"Å]¾ŹŹŹ†LÖØČ>]—÷¤RwČdĪųķ·µØWÆ.¶mŪO>łTō²˜Xš±“jÕ ±±·µźnWŅ%N]c„†ö²e?h•µmŪü±ąäō*’“cabb¢×8j117Ѿż›%¶MIy„¶mߥ•+ĀŚŚ——‡ąą>X±āGø»×ÕjŪ·ow¬\ˆˆ8Ž~żž§UvąĄ¼óĪ0”’¤¤“mŒæ’>KKK”ÆV­:aļŽ­pv®)śˆ^¼DX¾8ƒET•*ÆTõūöķ&M¼`ccƒ÷Žė_ę{Žī)3Ä}LƆ .RvķŚß¶R™£• ékɒ5zµ _‡ ɘššbŹ”qX²du‘ś#F¼'l·jåW¤¬ukķ’+†‡ÆĄćĒ©ZÉŒ÷!ĀĆWč’†ˆˆž,¢œd2gdeek•ļŁs””CK=®®žkŌØŽĢĢL­ņE‹–`ōčņMų-BqüįK¢š#ģQ³¦#&L¾}{ĄŅ²Z±õÕ7œ‹•ė;®®§Ėåńøzõolß¾k×nFZŚø»×ĮęĶ«šź«õ„zII)˜2eöī=™ĢēĪEĄŹŹJ«æā⋽WÆĮ8ž"źŌ©ūāĖ/恩©)?¾’ØŪŹdĪčŃ£+.ü¹H’šŻwįŲ³ē¢£Æ£U«ęčŽ½ F*kįņ’Ž’“ispšąÄĒ'ĄŻ½vīܧć'Ŗźų-ĀņÅK,z©‰=Ž”sē@lŪ¶®r‚""ƒa‚U¾x‰ˆJE×ćˆˆH{&"މvķŗ">žŖU«†ęĶ}øŽ ‘ž˜`‘N-Z4ßžQŁa½x‰ˆˆˆČĄ˜`,""""c‚EDDDd`L°ˆˆˆˆ Œ ‘1Į2R¾¾:Ė„R{H„ö:÷Ņ“isŹ} C ŃoaįŹ`̱Qłb‚e„®_æųų;•:ž›o¾Qić—ʁŪ*;QĘ•/&XFčć'cŠ ·‹­#•ŚcĢ+įõøqVšņ²ƒ——’“M“źI„öˆ‰1EķŚvØUĖ7nŚ?žx2Ś“i©s_LĢM¼żöŌ®Ż}ś¼ ©Ō]k‘Ż””Gšņj'§W1vģgHJJш%æī€#Š A Œ9N«ļ’Śž? o ć’“ } >Fō=~öŁ,4k֍µĀ‡NŌ+±6šåQQ—EcKJJś?~*’“jÕ½wļĪcó䉟}6 .. µĘ ""ćÅĖ]øp„Ä$¹ü ĀĀ2II&ŲæßK—fbɒLtīl#$YrłĄŲ±VøqCM›2bƒ;wtŸś¤¤\øpEtܐ~øzõ:nÜ8‡É“Ēž7F<€üä¦S§_€ųųĖ8r䂃ūécƌ)čŃ£+¶nŻ!”éÓvŊuųõ×5Ē ^krņCtīÜ‹‹;w®āžż$Ń÷±xń*|ųįP;¶Ož(„ņābk£Y޹sO±%%„ S§Xŗt!āā.cß¾CEźĪœ9Oē±5j/^…øøKZc‘ń2Q©TĶ+;#u€™śEZŚæ6p’žĆ±yóJūŌ÷_©'šō“ƱcéÉTBWW®_WÆļÜQĄŽ¾`æL¦BLŒ…½óĪ0˜˜˜3¾;bb"!“¹ÆÕ ‚§§?“„׏§ĀĆĆOx­žŃ‘Ėćńģ™ĪĪ JÕ6)é&ŖU³(X…ė©ÉåńĀ믿žöCՋō'æ®6źņ?![k$&& ÆęĢ)žÉż†ņ2Ÿ·ķŪwaūö]čŃ£We‡BDˆ UЧOŸ"::}śōDzz::vģTŁ!U9£FĘ‚ó{©©©3ę#­żŸ}6Ÿ}6¹’¢{¹üöŪV : • U~‹*ŻįĆčÓ§/Ž=hÖ¬&MśųńĒšēŸ'Ģ‚Ø’īŻ»ĄĮĮ DPP0ŅŅŅ0qāxČå\łĪ1eŹgXµj%bb®ćŃ£‡Ā1ŠdzLJ„””}įąą€ļ¾ūR©GŽD`ćʍ9¾£FFĖ–­`jjŠččkų“:¾żv!¤R)""aóꍐĖåZ1ž;w>>>8wī,¾’~a™c)o7n@ƒ 1qā$LŸž%T*•ĪzS§~__?$$$`āÄqB¹ś}ņÉGX°`!n޼uėÖāĆ?ĀÓ§é˜6ķ ”ny/"*Ī`Q„ūūļh4mź#¼ž1ć+ <””}1qā$Ģž=@A"Š»w­Da͚_‹~żzcųš!X½z- z·"߂Qš4i"āćć0uźŲ¾}6mڊwŽ Z_}\“’””}1jŌh¬Yó Ž(śõė .`õźµeŽķĆ?BLĢu¼’žP ö?l޼0zōGX½z­0Ž1X½z]‘ösę|ḆؔT•J…3¦ĮĖĖŪ¶ķ­·bÅ2„†öÅĀ…ß Ÿ{ ą³offŽ#†”iSäää`āÄqZ’vŹė|Qé1Į¢JgccƒōōtįµfņuźŌ-± ¢“^·jÕŚ0Į½ą~ž9’ūß`¬]»–––čß_<ĮRsq‘!%%@Ńć}Ķ qµlŁ W®\^ß»wļærķń4ėT+V,‡‰‰ œœœuīONN;;[8FŁŁŁEö—׳"¢Ņc‚E•ŖcĒNxķµv8~üĄÓÓ ž®ŠY?;;fffØV­šVy“&M…moļʘ7oAłü)œÄŌŖåVlżO>[[;lŪö€üū~Ī;[¤ž·wć2Ēu͚ł ÆŻŻėžśėœV=ŸfeĖŲ<{ö OŸ>EHHW­rOO/ģܙłP"‘ž—!ū/ļX‰^vL°ŒPdd† ł®®^ [„2GŲŠ.. q\«Ķśõ[įčX_«,5UŽI“¦Įٹ:tč®s,©Ō]ųSVC†|?“iŒ°°eBłŖUąļ’ ģܹOg[]ń§¤<‚·w[øø4ÄŲ±Ÿ•æę{ˆŒŒŅ‹>mõ9n%;OŗŹ>€€.hŪ6DÆņŠVų<<|ųXŲ———‡nŻśWZl%™2Å©©O —?ѹ_½vŸŲ~]Äź–¦ē%6Ęó$K/Ńˌ – é‹iÓ&įĮƒėčŃ£+źÕĖ_ĀdŌØ 8}z?’’nāīŻ{5Ŗ`Ł“  ×‘››«ÕĻ®]`Į‚YHNŽÅśõKuŽ%—Ēkż­™h޾|ł\]½ŌKg_Ó¦MĀķŪqöģAōčQ°ĪZ«V~ˆŒŒ@ddj×Ö½ž®ų}}ń÷ßg”t3g~Ŗ³:võµ¾:cѧ­>ĒMMWb*vžÄŹļ޽‡Ó§÷ćĢ™ø{·`y ±ņŠVų<ųś¶öyyłcŊE•[q¤R{¤¦šÉĒÖ­4on‹žż­…:Ēė^-¬uk[89Łałr ”ĢĻĻ..vøtÉLg›ĀZ¶“EĖ–¶Ų²„`]A??[8;ŪįĢ3!.ĶäH*µG`  \]ķqżŗīĻ—/›!0ŠAA6Zu¤R{Œc%l_»f™Ģo¼aƒK—ĢŠ”ƒ BBlpėģUžK3Bry<<<ÜÕ«Kak›ćŌ©H”NēĪÆćōé‚×2™K‘~lllųüżƒšĒχ¦ššˆ=€õÕ1«ćVkŠĄCŲöönس­®ų»wĮŻ»÷”TęąėÆæ³Q£VxåģŪwHg욱čÓ¶¬ĒMģ<‰•wźØU®&V^Ń Ÿ‡nŻBry~üqžĪsg Ō34źæGŽ“¬YŁ Ź)®Nž4ĒŖU™HHP`ļ^ öģ‘ąČs,]š‰ųxfĶŖVl{8rÄ?’œ‰ššL̟_M([ŗ4’ž«Ąœ9}žIZ»6±± Lžl©³ļšp ¬]›‰€€\­:rł„…e ÆĆĀ,pė–ķŪē ,Ģ«Wg" “&Y•?•{6rŻŗõǹs‡‰‰IB¹Lꂤ¤äbŪz{7ĉ{—.]-s,įįßB"1/v6 nßŽĒ! cæłę;X“hLLLšŁg³°{÷&½Ę«[·6Ņӟ¢fĶ\ܾ/”‡„ōŁŪh'R.\FóępįĀ1ŃXōi[Ņq+*:žę,Ղ31fĢ:t ?ż4_«?õ¶Ų Ų‘#'qäČI|÷]øÖž»wļĆŪŪC‡† āßč+’¼yÓѶm’’’1|ų»B]õ7æ`ĒŽõx据P©Tųį‡9čŪ7’[źcX8}Śź{ÜĈ'±ņŸ~Z€/¾˜  ›/ō#V^Ń Ÿ‡Ļ?Ÿ ģ3ę,Ķ›Čåņ'8wĪ žžv˜3'S(Ó¬§ƒ€[Äƚ o߬Y“‰5TšõµÅżū&Ų±#'NżŃ©ŁO§N9hŁŅš’—-”©ūŲ·/ĒŽ™kµÓ5V86Ķŗšū&Mz†  |õU–V]Ķz…Ū7.•{Wå{ [†”CaęĢyX°`Ve‡CdP|Ī“~˜`½¼øŲsłb‚%®Ź'XžžžP*•ø|ł¤šME"*?6ˆ‰1ÅøqĻ0iŅ3ŽE•Š Vłā%Ā—XLLdɕˆČ`NœxZŁ!QįMīDDDDĘ‹ˆˆˆČĄ˜`,""""c‚EDDDd`L°ˆˆˆˆ Œ –ŠŒŒĀ!ĮÕÕ aaĖ TęūŗĄÅ„!""ŽkµYæ~+ėk•„¦Ź1iŅ48;7@‡ŻuŽ%•ŗ ŹjȐąįį‡6m‚VšÄöU«6Ąß?žžAŲ¹sŸĪ¶ŗāOIyoļ¶pqiˆ±c?+1~Ķ÷„3}ŚźsÜJ"vžt•>|]жmˆ^å†Ņ­[­÷­R©°jÕČdąļ¤×ūŃuތIĻžś/ISVb6}žžņ!©D/>&XF($¤/’’Rw Į”)ÓŃŃ1˜1c bc£0zōDDGĒm,Cnn®V?ŽDĖ–~ˆŽ> 77Wc©—61Ä'II)Ų½{Ö¬ ǁG„ņõė·błņEX²d”°tMaŗā>| öļ’ Ń05_ŁV×Zx!!}uĘ¢O[}Ž›š®ÄTģ<‰•ųį̘13g~ŠŃ£' żˆ•——U«6`żś­ˆ‹»„%KāōésÅĘ č>oĘdēΌŹˆ^RL°Œ\?žŲ KĖjŲøq9öķ;čß8‚ƒ;ĀŽŽ‡ļĀļ m._>Y¤ŸįĆ#<|ŗu{:“Ókl±™,©Ō#GŽCzśSL›6Gg?žŲŠĘ=įéŁ@k!ź}ū¶ĄĒ§1üü|pąĄo:ŪźŠæV-LMMabb333­ņ5jŌ Æ¼ā#' ’źŠEŸ¶ĻsÜ4‰'±ņƇw"8ø#‚ƒ;āšįB?båe%—§”iÓ×°gĻf­ņĻ?’ūöm••üü|0dČčbćtŸ7c¢94r¤āāL1mZĮbĻ­ZŁāÜ93\ø`Š>} f»‚ƒmpķšnÜ0EÆ^6ČČ6l°,Ybžżuόi…ōt­1tÅgŠōt“mk‹įĆóŪ̜Y­¬o—ˆŒ,#·wļA„†ö$&& å2™‹Ök]݄֮ššXŗō{üņĖ–2Ē2nÜ(ŲŚŚ`̘‘%ÖŻ»÷ °}óę?Āv\œžK…‡/@“&prziiė„u颽’ĆŃ£»pćĘ9|õÕ·X·nsįn“bѧmY›Ųy+—É\“ŹKŚ.«O>łŻ»w)R^·®›Ö¹züX^lÜ/šqć²QÆ^ƌy&”ĶŸŸ‰Ö­sѼy&OĪŹĆĆ3ѤI.5ŹĆO?eĀŚXøŠgϚį·ß$X½Z÷ĢŲøqٰµUi”K½zy°µUįśuSLœ˜ßę“OŠoCD/.•cÄ¢¢.ĆŪ» č @ū—lbbR‰ætżu5,-ó’'­9s¤ž„»,ØR©`bb„2IĮGÄŪŪąääXl_-ZtÄŖUaĀėÓ§Ļįż÷?••>žx„ŠOI6l%ō«łK}’ž‚÷¢9ī‘#;P·nS¼÷^ŃXōi+vÜō%vžÄŹ“P§Ž›ŽŪeµk×€Ÿ^ ’Źåń8{ö–-[‹ąą>hŌØš6õ.6ī·wĄÉ)O(kŃB÷¶«kĮµkē—ļŻū}ūZcćĘLXYé?†¾qUÆĪu ‰ŖĪ`)•J…Ļ?’͚5Ź^{Ķ_Ų>räZŪĒõė7…mĶ™‰Ā÷i²³³Å£G©’µ¹Ubœš}©T*,Z“Ū¶­ÕŠū­·‚qīÜa?¾ Ez‰}Ŗ©T%’ĀѼ¤yóę?ps«%¼Ö‹>mŎ›¾ÄĪ“Xł‘#'“ŹKŚ.«Ā÷©’®QĆo½ŒÄÄ8~|zöģZlÜUATTĮĄčhSņ¢—¤G²Ę÷ßgaäH+deUHxDōc‚e„ź×oŽźÕėįģŁæ“¾į¶dÉB“i gēpu•aɒ…BuͤįĪ»Ā·÷¢¢.‹Ž§9Kušą6ōļ? o!77W«?Ķ1tŻ«U½z=LŸ>¾¾ZūžNNÆbņäéčÓ§›ĪtÅõźŸšńi—†ųńĒ‚o†„ō¶wģXŗu›¢N&øu+—.å'"õė7׋>mõ=nbÄĪ“Xy­Z®hÓ&mŚĆÕU&ō#Vn(…ł/æ,ĮąĮĄĖ« &OžŽqć>,6n]}ĶūƤR{įµęöƒfšõµE»v6ČČ0ʟ<1A@€-4°ÅØQVJķqģ˜d2ĢĶUÉģ‹Œ”łZsŒyó²ąįa‡_~‘čüv`į6ü!QÕ`¢R©šŽ§ó IDATWvFźįæ±iiśß;ō¢ [†”CaęĢyX°`Ve‡CdP/z¢"—?)¹Q88¼Rø(@?Ué90ĮWå,OO(•J\¾|¶¶6•U &Xå‹7¹æÄbb"+;""¢*‰÷`,""""c‚EDDDd`L°ˆˆˆˆ Œ ‘1Į""""20&XDT%UōSŃłv"ŅÄĖI„īčŚ5YYŁčÖ­?&LųƒƒāÉ6l‰čč”M³fķ‹,Wҵk(¶lŁŽ””G4hd±ćB×®”ˆŽŽALL,ŗu+Xp¹S§žør%/^A`ą[:ŪźŠæGøsē.ž=Sbüų©„Š]*u׋>mõ=nb}ˆ'±ņ† [āąĮ£8xš(6l)ō#V^V+W®G§N=‘™™‰‹Æąōés:ßˈc…ņčč˜"ŸĒ•+×欕hdff"0š-”cQŃOBē“׉H,#>––Õ¾[·īæ“MppGŲŪŪaźŌ  [.Ō?pą·"}ōļßļ¼ÓNNŽ˜7o†^ćźZ{P½}łņ5øŗz!(ؗhĢ{ĀÓ³ĀĆå‹́OcųłłąūļæŃŁVWüQQ—Q·nmXXH0}ś½āפ+}<ĻqÓ$vžÄŹ?’|"‚ƒ;"8ø#¦N ō#V^VĖ–­Į¢Es`ee??üōS~{ölźäååaŌØaĀėʍ=‹|—-[ŸĘ°²²Ā÷ß#ōclŌ3KII&Čɲ²“g›āāLQƞ\]ķqśtž³—7m²€ŸŸ-Ś··Į™3fJķgЬįźjŠPėĒmŁŅ-[ŚbˉPęēg gg;”OĶŗNNvZu5ć?sĘ ĪĪvšó³Õ*æ|Ł ®®öø~½ąGł¦Mpv¶Cūö6œU#ŖDL°Œ\wĄéÓē0lŲ`Ą¶m»„:ƒ…ā÷ß ^Ėd.Eśłķ·]øzõo\ŗtŽx®84I$ęxšą:6mZ©³¾:fuÜj*•JŲ¶²Ŗ¦³­®ųļܹ",,=iŅ4”¼Kķ•ī߀¬¬,“m‚uė6‰]3}Ś–õø‰'±ņßÖ*W+/+•J„uN< h×®PÖ«×`“hŃ @Ńc©ž<>Æź~Œ\žŻŗ)įā¢Ā¬Y–˜1Ć?’œ…īŻ•€öķm§ĄƒOÉrqńb:Nž| +«ü>Ś··Į¤IYxšą ¶nĶ(vĢ7ߓʳóé8>ŽŽłĒé­·¬qńb:’“°²*Z7%E!Ō-ĢŹ HNVąāÅttėVÜI$*hŌØš6õÖŚ’É'Ÿ¢cĒöEŚž<ž={­[wʝ;w6æH?Ęä石påŠöķ3‡…°~½ žž;p÷®ēĻ›aĻ ź×ĻÅ»ļ*Ń¢EžŠÖÓ3WØ3fXbĆsÄʦkĶi&2ׯ ˘¢uėüö’]P¦īS¬našõ5ūńöĪS”0öiĘND•‡3XFJ„RįóĻæF³fM„²×^ó¶9€€ÖÅöqżśMaūęĶ„m¹<^4¹²³³Å£G©’µ¹Ubœš}©T*,Z“Ū¶­ÕŠū­·‚qīÜa?¾ Ez‰}ŖiΐˆŃ¼Œyóę?ps«%¼Ö‹>mŎ›¾ÄĪ“Xł‘#'“ŹKŚ.«5<šÖ[ĮHL¼ćĒ÷ gĻ®ZūwļŽ’żOū¾µE‹–ł<ÖØįsē#1ńŠō"ż{{&O¶DĒŽ9čŲ1žž¹°·/ų|µl™‹3²0}z~bUš£ńņe3­¾fĢČĀīŻł3Xrłį&/Ƃ„诿ņŪ{{”iö©«naW®h&Uŗ“0õ>ĶŲ‰Øņš_¢Ŗ_æ9ŖWƇ³g’.‘Ą’% ѦM0œĄÕU†%K mŌu4“†;wīĀß?žžAˆŠŗ,:žę,ÕĮƒŪŠæ’0¾…ÜÜ\÷diʤ©zõz˜>}.|}µöüœœ^ÅäÉÓѧO71芒źÕ?įćÓ.. ńćĖ„ņ¾ĀöŽėQ·nSŌ©Ó·nÅįŅ„üD¤~żę:cѧ­¾ĒMŒŲy+ÆUĖmŚ£M›`øŗŹ„~ÄŹĖź—_–`šąąåÕ“'OĒøq ūrrr°oßŌØQ](SĖŸĒ_~Y'§WįåÕ}śtÓźĒ¾÷čĀSL›–/¾ČĀāřBłžżęÉģQƞŽĶæ¬öą|}mѱ£ ĢĢ źuķjƒzõģ0kVŃKݚćķŪ—!܃•’’?»“wo|}óļĮ23Ģ͵ė:9Ł u Ē.‘ĪĪvšõµÅž=—'5ėI„öŲ»7ä߯ձ£0U<•JÕ¼²ƒ0Rē’mLKū·C) E:ģģlįćÓW®üYŁį„ü›ą {Ł-.Ī}ūZćĀ…’gt„Rūē¾Ŗys[½Ę —“ƒĆ+…‹āōÓQ•žg°^b­ZuFżśĶqśōŹ…ČØlßnŽĄ@ųųŲbÓ¦¢ßģ{^6pv¶Ć¦MDF>Õ»]i¾ ø}»9œķąćc[Ŗ1ˆČ°8ƒ%®ŹĻ`ŃĖ‹3Xå‹3XDDDDĘ‹ˆˆˆČĄ˜`,""""c‚EDDDd`L°ˆˆˆˆ Œ UIR©}©žUV½zŁTŲXDdü˜`!©Ō]»†"++ŻŗõĒ„ Ÿ¢£cpšąQųžūot¶ÕTŌeŌ­[LŸ>EÆų5éŠEĻsÜ4‰'±ņĻ?ŸˆąąŽS'żˆ•—†ę9QŽŌ喖Õt”/@µjÉ\š÷ß7ŠūE”žÉJJ2AN•„=»•æŽ\]ķqśtžā}›6YĄĻĻķŪŪąĢ3H„öˆ‹3ŀÖpuµGhصĪqŌż©ė©ū#¢—,#$—ĒĆĆĆpśō9 6°mŪ.”Ī A”ųż÷‚×2™K‘~~ūm®^ż—.]ÅĄ#ž+M‰9<øŽM›V꬯ŽY·šJ„¶­¬Š.’ čŽ’Ī+ĀāĀ“&MŹ»tŃ~Ššżū••…¶mC°nŻę"±kĘ¢OŪ²7±ó$V>pąŪZåjbå„”yNԟ#ĶĻWįņśõė Ē“bŪĪ›7M›zĆ×·)~üqn™ciŠąU@͚5Š­wūv</^%¼7n*®^ż×®]Ē”)3õo޼E8{öoąŃ£ĒB¹fĀ&—Ē£V-WXZZ"<|>~ųaI±±čÓ¶¤ć¦N@Ō3|šŪŗˆ§’ĪŸ!ݾÆós¤«<99§Nķǜ9ßėģKwIĒŽ˜tļžŸč:dŽĆ‡Ķ±k—¹PöÓO™hÓĘsē$’-Z,īÜøqžPoÄkĢ[ wčŌ¬GD//&XFJ„R”K—·qāÄ^ŲŪŪśöķ!ģßøńWōīŻ­Ų>²³Ÿ Ūśž2·³³ÅƇłÉŒę=^@ž Vq}©T*,Z“¦¦¦8qbÆP¾vķĻhŚŌMšx•³¦+~§gXZVĆĻ?+”8°MŲÖLlĢĢ̐—Wš‹QW,ś“-éøÉåńĀĶ×jbēI¬|ćĘ_µŹKŚ. Ķs¢ž©Ė»ty[«\*uĒæ’&ĄĀB‚ʍ=±|łŗbć.īŲ›wŽQ¢K“k—ƒąą(•@hhž VÆ^98{6Ÿ~š ücUš£ńĀS”^TT~½ ń ,­zźžˆčåĆĖ%&&£oß÷°gĻ&æČ>śč}DD‡B‘Žo¾Yˆ?.žņÕĉ_āņåkør%cĒ~¦×Ų͚5ĮāÅ+?žø“Tq÷ķūžĻqÓ$vžÄŹæłf!""Ž#"ā8¾łf”ŠXyihžõēHóó„YcĘLAvö3ÄĘŽF]‹Š}üŒÕٳfčŲ1;ꗁü{§22ņļĶņšČO?żŌ ēĻ›įāE3,XPMØ·e‹YYĄÕ«fBYašõŌżŃĖĒD„R5Æģ ŒŌ9fźii’Vb(åC”H‡-||ŚįŹ•?+;"£”|ɉR͚öxų°bæ¹HTÆ.ŠŠOGUzüŠĖKl͚:tBB:Uv(DW‘ĻĄ*n̊~\Ī`‰«ņ3XDDōņā Vłā=XDDDDĘ‹ˆˆˆČĄ˜`,""""c‚EDDDd`L°ˆˆˆˆ Œ ‘Jó\­Ņ>ƒ«W/›Ņ†CDFŽ –ŠŒŒĀ!ĮÕÕ aaĖ TęūŗĄÅ„!""ŽkµYæ~+ėk•„¦Ź1iŅ48;7@‡ŻuŽUxįā²2ä#xxų”M›`„…-ŹW­Ś’ ųūaēĪ}EŚEFFĮĆĆÆČū½pį2<=[ĆŁ¹ÖR9…ézļšļK콉Õ{„!vžt•>|]жmˆ^å†Ņ­[’"Ēęšįpqiˆ¶mC„2•J’ ČdŠœæI“¦ĮŪ»-:tčŽ={č5ī_ĢFLLl™ć7f„}øØę"äDT50Į2B!!}1mŚ$@ĆĀB0ujLMM1wīt^½Ŗķ•cll„øøę<9yo U¦OŸCCEų|]\œpóf©’MµrŲm‹»¶čG¾qā³——W sēēµ>~\.]ʁc‹6ŲŁŁ*Õ#×7cĘįé9 %%„ˆ]ŚŚ{€ēžSĢīõčńJJŌ?Ę433Ć{ļĶŕ+ׁß~K‡—× „ūéI “\#åą`ŅŅˆDš×B͚eŠaĆī#)©Ž·ŒP(ĄĖČH}ņėOø[‚Š14ƒ„‡”—ߘ1’»{Oø»÷b’˜ÄÄĶHM=…ššZųų„ 1q³Ś8o!+ė2²³sĘŲU×±2ÄŸ|ņ9Š‹K0wn¤F­ģXcĘüƒĢĢ_ąīŽ‹)sśōY9’„ٳ§bŪ¶DĪö~üqL‹öŠÅ]‘Ÿ X°ąC¦¼ææv{‘®YóŽ}w–’ķ+wÅÕ«…H†O?żŸŚvh ß8ńŁ}|Bšz ©©§”Ö·ńŁÕugņ7ĆĒ'55µHM=Åč{ī99’„Üܳض-?ż$›ܶķ+de]†D"A@@>ūl©Ęŗ­¬žC’žīųūļ;(+«Ąœ9šļ1]“PŒ !$ąÓOŪaōh3$$ŌcäHsH$@y¹£GĖÖVeŽóē…ČĪfö}‡T 46wļ °d‰b‹]64Ōō‰·‹ ż‚f°ō—_öĒķŪw`eõ’’ŻĶĶÓ§ūāśõ"$$lBÆ^.Ģ5vR"’Ąœ7ļm̘1šöŪ“yėcĻRÅÄD!"b~žł$6lX­O~Ģ7vāÄiœ8q_|§t½“ō/øŗz`ņäńųžū–ߏ“·Wī'ē‡vĄ×7M˜?&cWżĘWŪ`Ė–X°`¶RY¶ļžż 5źuH„R|łå*„†¾Ŗ¶ŚĀ7N|ö bšŃGŸbcW3qųģŗBµßÜÜ\±aC ŗwļ ‡n8w.°cG<\]=`ee…³g“ab"K*^~Ł>(..ĮŖUĖšß’ŽÕŗn+«ē ™£¤¤TsįG„ėU b±%ŖŖŖįå%BA””÷±m[=ž{NŠ>j@ēĪ‹„HO—ĶŅĶ›×ˆiÓL™™-±Ųæ’^‹wß5——‹I˜˜ģ²«W7š¾ŖA^^~]>›Ę.ϾNÄæT*ķ×Ö"ō” Ģ[’łēFJibc7aņäńˆŠŠFL̊¶–C:åiIPö•”-ķŪ·ų†u픋Ÿ§>Įrvö@SS²²N3ßÜ#‚ ž (Įj]čį3L~~ŗęBAA<4“ȝ ‚ BĒP‚EA”c(Į"‚ ‚Š1”`AAčJ°‚ ‚ t %XAA:†,=$==“&́½½ bc7”©é>sĶĖ˶¶NHM=„䓐„Ž»+ŁīŽ­BdäRŲŲ8bŲ°W9ėRŻøųq˜4iśĀÓÓ±±Š7¶oŻś=<<|ąįįƒ޶šKOĻ„ƒCßķ½p! Ī΃`c戈ˆE¼õrµŻ.¾¶ń•įkĒĆĄ7N\öćĒÓąååĮƒż“²ėŠąąš}süxlm0x°c“J„ššš]ć¹®®ƒ1lŲ«8|8Y«z?śčSäē<¶ž'Ķ£¾øTÕļiy*Aź”Kńó EEE%ŠŠ.!9ł-ZČĶĶĒņå‹PP‰Ł³"77Ÿń‰‰‰Ess³Rœqćf`Ą€¾ČĶ=‡ēŸ·ē¬Ku?ŗĒ”¢¢‡ķĶmqHN>ĮŲ’°yó:ÄĒÆi± kļ”C;[“wĈװwļvܼ™‹öķł?”øŚ.oSUU1V­āß#Ou_>uķą‚+yć'>ū¬Y °|ł"DE-ĘģŁ ™8|öÖ"77³f-@AA&¢¢3ś¶nż›7ÆCQŃ%|ńEΜÉŌ××cĄ€¾HK;‚ēŸ·Ē„ oóĘfoQµæžz+V¬n•Ä‘ B 7¹ó£orÆ®®Į A#‘ŸŸ7·—‘“óąęĶ?ō²³eŹŖīÅ·wļA¬_’50mŚDLŸ>‘³®ż¹Ź„……`͚O±zõz¬XńFŻ––‰DĀģ_W__SSžpŁķ•#‘H0oŽųśėµ¼~|ŗśég¬]»))?pśŲŚZC"iĄĘ_ 0p”Śvh[/ß8ńŁoŽü;?ĻŲ5?.UU’`čŠ@ääü¦¤ßĶķe=šÄŌÓ»÷dg’ ;;g”—Ė’­śśzø»ŵkē1lŲ«xšą®]+ÄĒˆiÓž@Ą[ļ¹sæ#9ł–-柍Ō5b±%.^¬…µµcĒšāŠ”:œ>mˆ¤xé„f„‡›cŚ“F“o/ÅĒ·ĆĮƒ÷pㆠ„nĀĄ"ÄÅÕĆŠPŠ#DJū–—W#!ĮÓ¦526®mmTķ\š¢- 7¹·.4ƒ„ē9’‚°°×ååŒŻĪĪV霋ķŪw".._½;vģ~l-óēĻ„HdŽˆˆĖ9’Ā_»ös\T¤>Qe·Ö®Ż;;g˜™)’2ķ’7nü3gNįõżå—ƒøz5ü9¾ūn—Śvh ß8ńŁķģl•ģšŽ—wŽYŒW_õēŌĶ®G®ÆKEbWTtwīT ®#..ÅÅYŲ±c7¶lŁ”¶Ž£GS1K—®BEE„.š¢Żŗ=€H$Å„K²’/EG£WÆf˜˜6ŌcĆcDG#.®&&@°aƒ1`õźz Ԍ~ż(ŬŖŖ†‰ 0iR£N4ńōA –“™™W×Ģl‘ź‡Ÿ¦Ż={¾…››+śōqCrņ^Ę®iĶ•üq{ķøŗ:¬­;ŖÕæ’pøŗö`ĪĻœÉĄ A#ńŹ+ĮČͽŹ[Æj{ąŻwg”ŖŖ ĪelĒŽķårēdųš”3&˜Ó·ŖŖ:ŁĆÄÄ'NģĒĀ…©m‡¶šŸxisüø<ų¾śźfÜä’Ŗ&ķr}ēĪżŒAƒFĀĪ®rsÆĀĶĶ`ff77W˜˜˜ 9y/–.]„¶Ž+>ĄƒR¼öZ lm­ńŪoéJ[›šŁģŚ•+Фę…ąŲ±{ørE{{…–cĒīś÷WN¬Ąßߟ}Ö`Ø²Ł˜¼9MMü3y\š‚xś KO‘J„ųšĆOąīŽ‹±½ü²s|āD¼¼©‘—w9fĻ"©®9bca!ĀķŪw’ß§P£Nv,©TŠuėā±oßv%ŻAA¾ČČ8ŽS§£¦¦–3Īŗuń-ŚĖN܌5jQåĪ»ųļĆyƳć_»öž¾“Śvh ß8ńŁOœHS²k:~\Tםɒ}łe„z䶞{ĪĒQ^~55µxķµĄ€ŠÕ×®ż_쬱n+«ēšĒEX½z=RR~AYY¹ŽZ„=½zµ\Æ×«W323[Ī&ef¶ü™-Äܹ²™«†E‚da!ÅķŪ²ņ׮џV‚xÖ”æzH÷īżŠ”C7œ;÷»Ņ Q|üxzśĀĘĘöövˆ_ĆųØĪF@II)óķ½ĢĢ,ŽśŒŒ’tūäU IDAT OIهšš)šöBss³R~ :u²‡#<=}};vÄĆŚś%øøxb̘`̟? °sēfxxųĄÖÖ ™™Y8wN»Ē©aa!x’żw0xš@̘ń®ĪŪ%‡ėŪzb±%¬ƒ——ÖÖ˜9Ówīpš`Ŗ«°¶¶€££wīȧ²2!śōaČsĘ’Ō©Z„‡›ĀÅÅ;w2õ¤¤ÜCxø)¼½ĶŃܬØ?:Z ģŲaÄ«‰ ˆ§ZäĪ^,roMbc7aņäńˆŠŠFL̊¶–C:åߔøp-Ž'ˆÖ†¹·.”`ńóŌ'XĪĪhjjBVÖiˆDęm-‡ ‚x‚P‚Õŗj.B<­äē§·µ‚ ‚x*”5XAA:†,‚ ‚ C AA„Ž”‹ ‚ BĒP‚EA”c(Į"‚ ‚Š1”`A<={ŠŠ”CŪ¼Ģ4)É:Xņ¾L5$DńęłÖ|{<_|‚ (ĮŅKÄā®ƒDŅ€ąąp,Xš! 77))æ ŗŗNN››Ļųø»m±­K@@vļž••·1~ü µõ邀€0äęę#?æĮĮŠ=GŒx ŁŁ¹øx1ŽŽAœ¾\śG‡’’R466įŻw—<”v±ø+§m|µķ7¾|ćÄgwr€””_’ņ œœ0qųģOÕq ™@¹ķ7nÅōéóŚHaې›[‹»wŪę ģ3f˜āīŻjŽ7Ąļß/Ū¬śaß’°É½ž ų”KO‰‹[ “vˆ‹‹ARŅ~²­m|}‡ĆŅŅK–,@lģf¦|rņŽ1ĀĆ_Ē[o½kėŽˆŽ^®U½\{Ź³².ĆŽŽ>>!¼š{öt†³³#āābūŗu«Š»wOōķŪk×®äōåҟ™™….]^€±±–-[¤•~6\Z“įQś ß8ńŁ?üp!|}‡Ć×w8–,YĄÄį³?iTĒįüł‹€Ć‡w1e6mŚŽ™3§“•DNä³+C‡šĆĘĘ»v1× ķEø{·ĢVTd€±cĶ`oo‰°03%¾ öµ]»Œ`mmDJe¼½Ķae„šļŪW œ=+TŠ«ŖGSŻģ“’ŒšĀ 7kQFYYBŲŪ["/Ļ E܈S¦žaĆĢagg‰ü|\ŗ$ó),¤‚Šż–č!UUÅppč 8s&S¦Čf öķ;Ȕ?> ?ü 8·³³mgļŽƒČɹ‚K—r0nÜōGŅĮĘČČeeyŲ¹óĪņrĶrŻr¤R)sljŚŽÓ—KII6³łsdäRĘīﯼ“Ć_•A"‘`š`?|÷Ż®ŚŁZ“ń}Ü~ć'>ūøqo*ŁåšŁŸ4ŖćpćF6`ČO¦Ģ’ž‰žżŻŪJ"'ņٕӧļįÖ­XYIl†Ą@3œ?_‹ŹŹtģ(EP†5Gd¤eeÕHJŖcüå?\±å?f°µ}€ŹŹœ?_‹  E¢“–v’-ó 2Ćŋµøu«¦¦ŠXŖz“©›żoXXJKkP÷Pżcd$EYY5|}Ķ[荭gĪOž¼‡ņņjxzŠ`l,ó1‚¶Ö"MŠV9zLff\]{`ģŲPŹIHyygRĀfĻžoabb@y†H>3„š@ɑJ„hjŗ##Å-āźź °¶īØ6V’žĆ±uk,s~ęL¦M{¦¦¦˜;w:GNN™øååŒżŲ1E[Ųõž8±]ŗøaāDÅ#AU-Śųņõ›¶šŸ½¼¼;?Æõń“FuzōˆĀĀ ĢõwŽYŒõė?kmĆ AĶørEV¾Aƒš‘—'Dii `łr|’½! j[ųĖgxT“ž¼k‡Å‹`ųĶ]]eškjķS]­½A<«Š –ž"•Jńį‡ŸĄŻ½c{łeęųĉ4xy R#/ļs|ķŚĢqUU1orea!ĀķŪw’ß§P£Nv,©TŠuėā±oßv%ŻAA¾ČČ8ŽS§£¦¦åģ™/>Ų1Æ]ūĻ?߉9ēŅ¢/_æi ß8ńŁOœHS²k:~ŅØŽĆƒŠó;wīāŠ”cOZŅ#ńūļBøŗ6ĆÅ„YÉĘ>_¾\‚C‡øg‚ųf”\\š‘™i tĪ…««Āž•„HŖTõØ«›«ž¹s ”ō„>A –ҽ{?tčŠ ēĪżĪ<š€ųų5šōō…#ģķķæ†ń‘—a' %%„ššš‡‡23³xėcĻR„¤ģCxųx{”¹¹™sM[›ŗaŁ²ĻŠ§·Ņõ ކµõKx’że3&˜S—žœœ_Ń»÷ŲŚ:ażśMŒŻĻ/”9Žæ?]ŗø”sē^(,,Ā„K²D¤{÷~œZ“ńÕ¶ßųą'>{§Nöšōō…§§/ģķķ˜8|ö'ź8ääüŹ\2$Gīn3mŚ0|øl Ve„‡×įčŃ:fĶSe„GŽŌįŲ1C˜£[7 ¬X”xŒŻµ«,ZÄdƑ:z“̬#Gø“#GźŠ§l –PfĘIU6u³’ 7…‹‹vī4TšéR]Ć„ŗ.‹ėZt“Ų±ĆHć·é„”T*ķ×Ö"ō” Ģ'’łēFJijjjaa!BļŽCż«f‚ų—![źå7݊Š j† “ŸŃ%]Ó¾ż‹Ŗ¦"op%Zƒõ 3pąH455!+ėt[K!£³+ŽŽęČĻ7ĄüłHOæ×Ör‚hE(Įz†ÉĻOok ŃjčćĢUZ%Uń¬@k°‚ ‚ t %XAA:†,‚ ‚ C AA„Ž”‹ ‚ BĒP‚EA”c(Į"‚xzö”Cżxז¦·Ŗėņ­ėśų~1‚ŠG(ĮŅCÄā®ƒDŅ€ąąp,Xš! 77))æ ŗŗNN››Ļųø»m±}M@@vļž••·1~ü µõ邀€0äęę#?æĮĮŠ —GŒx ŁŁ¹øx1ŽŽAœ¾\śG‡’’R466įŻw—<”v±ø+§m|µķ7¾|ćÄgwr€””_’ņ œœ0qųģ­Éśõ_·h“ŗ>~–ÉĶ­ÅŻ»śń®-MļüŅå;Įōńżb”P‚„§ÄÅ­†‰I;ÄÅÅ )i? 6v|}‡ĆŅŅK–,@lģf¦|rņŽ1ĀĆ_Ē[o½kėŽˆŽ^®U½\{Ź³².ĆŽŽ>>!¼š{öt†³³#āābūŗu«Š»wOōķŪk×®äōåҟ™™….]^€±±–-[¤•~6\Z“įQś ß8ńŁ?üp!|}‡Ć×w8–,YĄÄį³·&‰‰ūžH=Oł¬ĶŠ”²½wķ2b®É÷žŪ½[f+*2ĄŲ±f°··DX˜™’?ߞ|ģk»v1{²Ėx{›ĆŹJįß·Æl/³g…JqUõØ«›Æ>Umyy-’¼{{›ĆŽ^qMµ±Ų—/ 1l˜9F’½u~Ų0™Oa!}\ÄĆ@æ1zHUU1ŗĪœÉĄ”)ūödʌ†~PœŪŁŁ¶ˆ³wļAää\Į„K97nś#é`cddˆ²²<ģÜł gy¹f¹n9R©”965m.øō—”d3KGF.eģžžŹ[eżõW$ öĆwßķj”­EßĒķ7¾qā³÷¦’]Ÿ½59w.…ÓĪÕOźģś€|¦åōé{øu«VVR›!0Š ēĻ×¢²²;Jd†”CĶ)AYY5’’źłWlłO` lm ²²ēĻ×"(Ȍ)—–v’-ó 2Ćŋµøu«¦¦ŠXŖz4Õ­®¾4„§g3ŖŖŖįāņ …oZŚ=”•UĆ×ל³žŖŖjHqņä=ģŁSOONž”łŒažPżOĻ:”`é97nÅ{ļĶå¼&ŌśFG/ƒ››+śōqĆśõŸ=¶GĒ—VVĻ©-wżz16nÜŹœĻŸæ99Wpłr-ŠŅŗ¾čču8wīg”—_ÅķŪw;;a«Ŗ*F§Nö011A\Üj|łe¼Z-Śųjź7yŅ'ŸįcsĮ7NšĘO_ąė'M}Æo ،Ü\!ņņ„J¶+W„Ų°”Ó§›į³ĻŚ”¤äįž,ęå Ńææ"™¹rEČYŽmļŁSQ^UĻćŌ÷ᇦس§NcŒšž{ĻŃQö;"K•ģÕÕ’Žū• ōJ°ō©T ’7‘–v––€ŠŠŃĢõÄÄ=xżõ`µ1™cm?Ģ-,DųūoY2Ć^ćČf°ŌŒJ„X·.HK;ĀŲ·o’ nn®čÕĖE£f6[¶ģ€³³#LLŚį«Æ>gģÉɊĒXģÄF(āĮÅ—m|5õ[UU1óĆ>—Ć7N|öÄÄ=JvMĒO¾~R×÷śČłóBōģŁ —f%›«k3BBī#3³‹7 Ns~¢„‹K323J]]¹“$¶żĀEyU=S_zz-||o¦ÉČHŖ¹A”K)/æ…ŠŠ‰8|x'Åٜ9Ӑšz 55µX¹r ęĪU’ųjįĀ’!+ė2²³s1oŽZÕķīŽ 7~ƒāā¬_’õCé ˆźźtķŚEɾxq*+oc÷ī•“i"0p®]ū ˆˆP¬ĮR}Ģwõj!$’Ģ›÷fĻž @և\Z“ń}”~cĆ7N|ö•+× 5õRSOaåŹ5L>{[ĄÕOźģśÄŋBŌ׋› 2²ļ½×ˆóē…Ø«“Ł.l„Xl‰Ż» ‘99Š$§°ŠŁŁź“ž÷ŽkÄāŦث~’]ˆ… 9Ė-\(«·¾ˆ‰i§äĻÖ£©nuõYXH±}{ņók¬4”M ‚xxR©“_[‹ŠS20užłēFJijjjaa!BļŽCżk[Ė!#[źå·ŽŠŠ j† jŪZ ń Ó¾ż‹Ŗ¦"op%ƶ@“Ū¶%bņäńšóŃÖRBē°æ§Æč³6MčcāJśĶ`ńóŌĻ`AĻ.4ƒÕŗŠ,‚ ‚ C AA„Ž”‹ ‚ BĒP‚EA”c(Į"‚ ‚Š1”`AAčJ°‚ ž0!!­»qrR’zö©}Ļ–\W]¾Ÿėßü®/‚x(ĮŅCŅÓ31iŅŲŪ» 6vššī3×¼¼üakė„ŌŌSJ> IčŲ±»’ķīŻ*DF.…#† {•³.Ս‹‡I“ęĄĮ”/<=}»‰±oŻś=<<|ąįįƒŽrśr鯬¼ W×Į°µuāŻ²†­ŸŻ†ōōLN-ŚųjÓošą'.ūńćišņņĒąĮ~Zٟ4ņ¾T½UūĻŚś„6Óųoƒ½éø*ŗHH-2Įžżuj_ŖNƒ._"J/$%žU(ĮŅCüüB±ti$ŹŹņ0ztŗus̜¹gĪCEÅ5”–ž‰™32>>>Æ ¹Yy“ŁƒBLĢ ÜŗU€„ī}ŁŹųŖge]†½½ ||B8c-]‰ė×/āܹŒĄŲģ‹ōōT¤§§ā…žēōåŅß§7®\9‹ŠŠkˆŠZĢé'×®ŗį²Ÿ_(§m|µé79\‰)ß8ńŁKK’ę3Ēpöl2JK’dāšŁŸ4ņ¾T½ŽÅō]·n/āŲ±}"=YÄbKˆÅ–:Ō66صˈ¹6`€ÖÖŲ½[f+*2ĄŲ±f°··DX˜™’?ß ĻłóBx{›3×ųĮƒ‰Š§›7vī4Fß¾" j޳g…LŁS§ yė•Ēˆ0åĖU?›»w8PĜ÷ė'Ā /X ¼\ĄųĖ5š‘•%‹ļćc޼<ÅŽ†lmb±%._ĀĪĪ£F™ćŅ%!† 3‡ŸŸ9 éć…x¶”ß=¤ŖŖ]:ˆ!ɦņū-)3rä+8sFqnggŪ"޹¹9¼½ƒąįჟ~J}$lāā¶  ą<¼¼<8ĖĖ5ĖuĖqtt`Ž]]8}¹ōæśŖJK’BSÓ}|ņÉē¼:{ōˆ_ģ£GęŌĪÖ¢ļćöß8ńŁGŒšV²Ėį³?iTūR~?āÉŲ­­;¢÷'-M-ņ™“ $øq£11ķpź”!Nœ0ÄW_Õćʍ¬^Ż'NbŹS„‡7¢  AAMŒæü‡+vB‚1öķ«glńńĘŲŗµ»w×įČYā¶f1¾žŗ6H°jU»±øź•Ē­ēĖU?_ū`ŊÖąż÷M[\ć#.ĪŪ·×ĆĖ«ļæo¢Ō'rmkŒĀĀ z±±ĘųöŪzxyŻGd¤©Ę:āi†ö"Ōs‚ƒĆ‘‘qP^^ĮŲķģlQQqK­Æ««ŅŅŽ.]Źyl-qqŸĆČČPķl\æ^ŒI“ę0u¾…uėVA ąƒVąŠ”ZÕ×„Ė Ø­½+«f\æ^ĢŲżüB‘œ,›-aų_ø…~ż†įĀ…“¼Z“ńÕŌoŖ³Vņsy<¾qā³³“KmŽŪöż('/ļ*ŽMj#Ešqw—ĶŒž8q}śČfuŠŠj”lk×ÖcÅ äå5aÜø&ŽXl¾ų¢B”"YÉČbČåµUĒßƒ„„ģQW24o^ƒĘz¹ārÕĻGQ‘fĻ6AuõĆ%Gqq ęĪŌØ•k̘’ąćc™ł ÜŻ{1eNŸ>‹#G’0{öTlŪ–Ø1¦œ€\»ö±ˆ±ūū+ö"‹»āźÕBH$ ƧŸž€¬¹“hćĖ×oŚĀ7N|vŸ¤¦žBjź)„õm|ö'¼/UļGX³ę+„„[¹xQˆśz`äHs|ūm=¾ł¦ēĻ QW'³mŁR±Ų»wańb V®l`| -Ėdų'9#Gš##Cˆņr>żT6{3j”9ΟāāE!&Lh™@qÕkeõ……pr²ą«ŠŗÄN* dė²ŌĮ— ©ĀÖF?ś’ßĪg—_öĒķŪw`e„<{āęęŠéÓ}qżz6”W/ęšüCO,īŹ$<óę½3ęŽ~{2o}ņ™)ˆ‰‰BDÄ"üüóIlŲ°Z)žüXõ‘˜œ'NćĉÓųā‹8„ė„„ĮÕÕ“'Ē÷ßó£OUtō2 ģ‡ŠŠ[˜:õ?LYö·ŸöļOĄØQÆC*•āĖ/W!4Tö­?yŖjŃĘWŪ~ćƒoœųģ6Äą£>ÄĘ®fāšŁŸ4Ŗ}ÉfĖ–Ų·oŪ“õ,X`‚Ü\¬_/Į+ÆČfe įĘ bc%1ā>vķŖĆŗuķ°x± ¾7ߔ=®óń1‡pżzRLy"ĀNh>śØó盢²9RöXr޼FL›fФˆ‰‘“ˆĮUodd#||ĢńńĒŽø\õ«"[¢ŖŖ6ŌĆŁŁb±Tɗ«=\ķS½ĘÖĘ®‡ĻG­ń4"J„żŚZ„ž’€™„’ēŸm(„uˆŻ„É“Ē#**11+ŚZAčz’’~A –žŃ¾ż‹Ŗ¦"op%J°ųyź,gg455!+ė4óĶ0‚xZЇ™“4ÄŚµķPU%@xx–,iŠģDOJ°ZJ°ųyź,‚ āŁ…¬Ö…¹AAčJ°‚ ‚ t %XAA:†,‚ ‚ C AA„Ž”‹ ‚ BĒP‚„‡¤§gbҤ9°·wAlģ&„=½¼üakė„ŌŌSJ> IčŲ±»’ķīŻ*DF.…#† {•³.ł^‚źö&Ō–I“ęĄĮ”/<=}«xcūÖ­ßĆĆĆ>8pą(§/—žŹŹŪpu [['Ģ›÷Fżģ6¤§grjŃĘW›~Óß8qŁOƒ——?öÓŹŽšÜ½[W×Į°±qÄįĆÉųūIu|žžūĪŃų4šŚkÜūm÷‚T¾zE½ä• (ĮŅKüüBQQQ‰¢¢KHN>E‹–rsó±|ł"dböģ…ČĶĶg|bbbŃÜܬgÜø0 /rsĻįłēķ9ėboXüøTTTāŠ”Ų¶-ÉÉ'{BB6o^‡ųų5œŪ­šéŸ:5ĒŽķĮĶ›¹00ąßGMuóe@և\Z“ńÕ¦ßäp%¦|ćÄgŸ5k–/_„ØØÅ˜={!‡ĻŽZŌ××cÜøHK;‚ÜÜs˜0įmęW?©ŽĻ“iƧ…źŚZA­ %XzHUU1~ś) &&퐘øGž Ÿ _ßį°““Ąńć0vģ4Ę'+ėt‹8S§N@\Üæ…aƆhU7ßL–XÜ3fĢGmķ=,]ŗŠ³ĢO?%”gOg8;;*mD}ōčnōīŻ}ūöFrņ^N_.ż:ŁĮĄĄB”ĆKFń⋽™~d}Č„EßGé76|ćÄg?~ü|}‡Ć×w8Ž?ĄÄį³·a˜:uzõŒąą·p÷ns«ŸTĒĒĪΦÕ5>,b±%²²d›=÷ļ/Ā©S†8qĀ²Ķžū÷įÄ C nŽ Q[+ĄöķFZŖķhĄĢÖųśšćņe!®^5@Hˆlg„EČČ"+KˆŃ£³VrmźåŠĖU?y½ééBōļ/jqŻĻĻ’üÓņ?-3f˜¢¶V€„KMxŪ-[¢ØČµµ ,ĀŌ©2ŸØ(īØ āY…,=ēȑ„…½(/Æ`ģvv¶Jē\lß¾qq1ųśėµŲ±c÷ck™?&D"sDDĢŠXöȑęųڵ?˜ć¢"ķ߈ƒ^½¼`mżžłG±Ż‰ææņ‹†łå ®^ĶĄĒŽļ¾Ū„V‹6¾Ūo|ćÄg·³³U²k:n- ®cūö(.ĪĀ×_ÆÅ–-;˜k\ż¤:>qq1­®ńQpwo†©)-ALŒ1>’܃5ĆĢLfūā c s牤ųŠŃkėĢVmr}ģzŁĒ~~ęxī9)vīlłˆRµ^>;ū\[B?”­rZšĮŅS¤R)>üš„Äąå—=˜ć'Ņąå5HmŒ¼¼kĢ1{Iu-  nß¾ū’>…œeŲ°cI„R¬[}ū¶+é ņEFĘqœ:u55-?øųJÕØŹ4Æ]ūĻ?߉9ēŅ¢/_æi ß8ńŁOœHS²k:n- č§Ōö_ģ €æŸTĒēĮĶćՖüž»®®ĶpqiV²±Ļ—/—ąŠ!īõQUUÕj“†ĢĢ–±33b³²ųs««—+.Ÿ6¹>v½æ’®šß»·›6Õ#5ÕPcL‚ J°ōīŻū”C‡n8wīw„onÅĒÆ§§/llaoo‡ųų5Œ¼ ūư¤¤”łö^ffo}ņY*HIهšš)šöBss³RCŸ>ŽJ×'LxÖÖ/įż÷—a̘`N \śsr~EļŽC`kė„õėßōó eŽ÷ļO@—.nčܹ ‹pé’,óN IDAT鎽§m|µķ7>ųĘ‰ĻŽ©“=<=}įéé {{;&Ÿ½µŲ¹s3JJJakėœ;'{“Ź×OŖć““ó«ŗšmĘšįę°±±@e„‡×įčŃ:  ‚µµĢväHŽ3D@€9ŗu³ĄŠеD]»ZĄĮĮ¢EL±Ų²Åڧźj¼¼DptaęL٬gY™}śˆ0|ø9T—ŠÅ–œõFGKе«vģ0āĖU?›Š   Ā€"TVŹÖZuébĪ-`a!Åo˜qʐŸ³Æ©źįź .MōMBāY‡ņÓę[›ššZXXˆŠ»÷„Gń“ OŖŠŠ Эۃ¶–A ōˆ°u”¬g˜G¢{÷~8s&¹­„„Īч”4„··9z÷aēNķ¾HÄÓĶ`ńóŌĻ`AĻ.4ƒÕŗŠ AA„Ž”‹ ‚ BĒP‚EA”c(Į"‚ ‚Š1”`AAčJ°‚ ‚ t %XAmDR’zöiżĪ®¤$#t襒÷süoz×Õ»Į4½Iž J°ō±ø+Ā ‘4 88 |ČĶĶGJŹ/Ø®®“Óäęę3>īīC[l_†Ż»DeåmŒ?Cm}ŗ ¹¹łČĻ/@pp8c1ā5dgēāāÅlx{qśré=zJJJŃŲŲ„wß]ņPŚÅ⮜Z“ńÕ¶ßųbšŸŻÉiRR~AJŹ/prĄÄį³·ģū.?怹ļŲmÜøq+¦OŸĒœĒÄÄņö/”™3L‘›[«õŪęgĢ0ÅŻ»ü{"īß’†Ō|±Ų©©†ø}[ Tę‡Œ`mm>}DJe½½Ķae„Ų³+žXl‰¼< b®vöIžoR’śõ!<ܬEude aoo Ål—ü߈SF˰aę°³³D~¾.]’łųł™kŒO„ J°ōŖŖb88tœ9“)S&öķ;Ȕ?> ?ü 8·³³mgļŽƒČɹ‚K—r0nÜōGŅĮĘČČeeyŲ¹óĪņrĶrŻr¤R)sljŚ\pé/)Éf6–ŽŒ\ŹŲżż•_4ü×_eH$<Ųß}·«…v¶m|·ßųʉĻ>nܛJv9|öւ}ß`ī»!C<Ū’ž‰žżŻ'ĪĀÕ«æsŽ> Ÿe9}śnŻŖ••ĮĮf 4ĆłóµØ¬¬AĒŽR™ačPsDFJPVV¤¤:Ę_ž£÷7šąćs;J1aBŖŖŖl7·fTVÖąŅ„Zųū›3¾ii÷š÷ßÕJŗŲńŖŖŖńå—õpqy€O?m@’žĶ¼ķ‘’ք j‘P÷Pżbd$EYY5vī¬o76¶ž9?yņŹĖ«įé)‚±±Ģg×®‡«‹ že(ĮŅs6n܊÷Ž›ĖyM ØõŽ^77Wōéć†õė?{l-ŽŽ/¬¬žS[īśõblÜø•9Ÿ? rr®ąņå<,Z„u}ŃŃėpīÜĻ(/æŠŪ·ļ0vvĀVUUŒNģabb‚øøÕųņĖxµZ“ńÕŌoņ¤O>ĆĒ>ę‚oœ4_[rżzq‹ū./ļ*FölŻś=JJJŪBŚ#3p`3rs…ČĖ*Ł®\bƆzLŸn†Ļ>k‡’ĶĒŽmbŽĒ“ēę 1p ˆ™ŗzõįž¼Žw7n`’~C¼öZ“ĘņaafčŅł™ÓGGŁļ€••öOĖ}:tj(I„J°ō©T ’7‘–v––€ŠŠŃĢõÄÄ=xżõ`µ1™cm?Ģ-,DųūoY2Ć^ćČf°ŌŒJ„X·.HK;ĀŲ·o’ nn®čÕĖE£f6[¶ģ€³³#LLŚį«Æ>gģÉÉū˜cvb# ńąāCƒK‹6¾šś­ŖŖ˜łaŸĖį'>{bā%»¦ćÖD~ß0÷ܹsoĮŠPvL™2'Oz"štÅłóBōģŁ —f%›«k3BBī#3³‹7 N‹Iš‘#ļ#>Žk×¶ƒ—×}€›[3Øcf¤ŠŠjJŸ±±ęøpAˆwŽiŌX~ėÖz””Ō ¢āįź12’%I“ßĖ}‚ŠJ°ōīŻū”C‡n8wīw„Ł‘ųų5šōō…#ģķķæ†ńaϦČ)))…‡‡<<|™™Å[Ÿ\‡£Gė˜5X••9R‡cĒ `ŽnŻ,°b…ā1v×®pp°ąŒ»{·RRæ;Ö”ŗZkk 8:ŠpēŽ€w-ŪĪ>žķ·ZlŻZĻYŸź¬špSŲŪ[bēNĆńųā«Ę‘GGKąą`;Œ4®’¢o„v¤Riæ¶”§d`ž%üóĻ6”Ņ:ŌŌŌĀĀB„޽‡ ;ū×¶–C:G,¶üW}ćķāE!śöm¹žŠ Zƒöķ_T5xƒ£(ńj.B<­ 8MMMČŹ:ŻÖRBēüŪfYÄbKxx4#9ł^[K!BP‚õ “ŸŸŽÖ¢Õų7Ķ\’>½A؇Ö`AAčJ°‚ ‚ t %XAA:†,‚ ‚ C AA„Ž”‹ ‚ BĒP‚EŃF$%”gOŃc½³KÆ.ßŗNop'ˆ‡ƒ,=$==“&́½½ bc7”©é>sĶĖ˶¶NHM=„䓐„Ž»+ŁīŽ­BdäRŲŲ8bŲ°W9ėŅå6'“&́ƒC_xzś"6V±µĶÖ­ß3[Ļ8p”Ó—Keåmøŗ†­­ęĶū@£~vŅÓ39µhć«Mæi‚oœøģĒ§ĮĖĖƒūieom‚ƒĆ•śCuä{U^øgēA°±qDDÄ"TTT>1O ‹™`’žŗV{–ŗø›,Ń{ŗāį Kńó ÅŅ„‘(+ĖĆčŃčÖĶ0sęœ9s ×PZś'fĪ\Čųųų¼‚ęfå-6ü 11+pėV¾ę¬‹½a1 ¼ źqVÖeŲŪ»ĄĒ'„3ÖŅ„‘ø~ż"ĪKĮčŃŒ}ąĄ¾HOOEzz*^xįyN_.ż}śx欕³ØØø†ØØÅœ~rķŖ.ūł…rjŃĘW›~“Ć•˜ņŸ½“ōOœ9s gĻ&£“ōO&Ÿ½59wī<¶lY§dS‡>}†FŒx łłøu«¼ "µE>ć2tØl/Ā]»Œ˜kņ½wļ–ŁŠŠ 0v¬ģķ-f¦äϵ—ŸXl‰ŌTCܾ-P*óĆF°¶¶@Ÿ>"„²ŽŽę°²RŽKīŽ`ą@S./ĻC†˜ó&?»vÉā āmo^^Ė?ėŽŽę°·W\SŻ×P,¶ÄåĖB fŽQ£Ģ‘Ÿo€aĆd>……ō1Ażęč!UUÅppč 8s&S¦LģŪw)3~|~ųAqnggŪ"ĪŽ½‘“s—.å`Üøé¤ƒ‘‘!ŹŹņ°sē7œååšåŗåH„RęŲŌ“øąŅ_R’ĶĢ.EF.eģžžŹ[eżõW$ öĆwßķj”­EßĒķ7¾qā³÷¦’]Ÿ½µ˜8qü©ÅXØŽĆŁd}¼vķFˆÅ]›7/·ŗĘ‡A>ćrśō=ÜŗU++)‚ƒĶh†óēkQYYƒŽ„ 2ĆŠ”戌” ¬¬IIuŒæüG5īo4ĮĒē>:v”bĀ„&TUU#8Ų nnĶØ¬¬Į„Kµš÷7g|ÓŅīįļæ«•t±ćUUUćĖ/ėįāņŸ~Ś€žż[īGh[Ūج¬Įłóµ 2c®żų£!<=›QUU —-|ÓŅ¬¾¾ęJŲ’Hqņä=ģŁSOONž”łŒažšO%XśĪʍ[ńŽ{s9Æ µ¾ŃŃĖąęęŠ>}ܰ~żg­ÅŃń%€•ÕsjĖ]æ^Œ·2ēóē/ANĪ\¾œ‡E‹¢“®/:zĪūååWqūöĘĪNŲŖŖŠŃ©“=LLL·_~ÆV‹6¾šśMõ±¢¦G¬|ć¤iüž4%%„X¾¼åL”ź8ÄÄÄ2׎}wnŻ*Ąõė7°jÕŚ')÷”8°¹¹Bäå •lW®±aC=¦O7ĆgŸµCI‰ę?‹cĒ61ĒćĘɎss…J³QWÆ>ܟ×qćīćĘ ģßoˆ×^kjq=/OˆžżÉӕ+Šv|ų”)öģ©ÓXGM ’=ēč(ūŻ‹„JöźjżŗO āß%XzŠT*…æ’›HK;KK @hčhęzbā¼žz°Ś Ģ±¶ę"fMnn¾Ņ5##Cµ±¤R)Ö­‹‡ŅŅŽ0öķŪæ‚››+zõrŃØ™Ķ–-;ąģģ“vųź«Ļ{rņ>ꘝŲ…BēĻ Ń³g3\\š•l®®Ķ ¹ĢĢZ,^܀:Ķy F޼ųxc¬]Ū^^²5’nnĶ8p Ž™‘**Ŗy(}ĘĘR˜ćĀ!Žy§±Åu—fdf*žd»ŗ*Ś‘ž^ ŸĒ›i22’j.D„ÖP‚„‡”—ßBhčD>¼€āƒlΜiHM=…ššZ¬\¹sēŖ|µpᒐ•uŁŁ¹¼‹ÄUqwļ…æAqq ÖÆWæžH•ŠŠ‰Ø®®A×®]”ģ‹G”²ņ6vļžQé1™&GįŚµ?ŠŠŠˆˆˆEŒ]õ1ßÕ«…H0oŽ˜={*YriŃĘ÷Qś ß8ńŁW®\ƒŌŌSHM=…•+×0qųģOÕq Å\ĖĻæ†††FĢ©v­[[rń¢õõĄāÅ&ˆŒlÄ{ļ5āüy!źźd¶… ![b÷n#H$@NŽbfØ°ŠŁŁBĪø{÷aß>Cę|ńāF¼’¾ $ ¼\€Ń£Ķ8żŌ1qb#^{ķ>ēµ÷ŽkÄāŦث~’]ˆ… I˜……Ū·×!?_y•:¬¬š¶ ˆĒG •Jūµµ=%ó×ēŸn“””Ö”¦¦"ōī=ŁŁæ¶µ‚Š9b±åæźŪo/ Ń·oĖõWŃ“o’¢Ŗ©ĄE‰GĄPsāieŪ¶DLž<~~#ŚZ AčÕoŹŗįߔ°D[B3Xü<õ3XAij Ķ`µ.“‹ ‚ BĒP‚EA”c(Į"‚ ‚Š1”`AAčJ°‚ ‚ t %XAA:†,‚ ˆĒ$$„6D&BJ°ōōōLLš4öö.ˆŻ„¦&ÅÖ^^ž°µuBjź)%Ÿ„„$tģŲ]Év÷n"#—ĀĘĘƆ½ŹY—źĘÅĆ¤IsąąŠžž¾ˆŻÄŲ·nż>šššĮG9}¹ōWVކ«ė`ŲŚ:ńnYĆÖĻnCzz&§m|µé7Mš—żųń4xyłcš`?­ģ|$$$µ°±ĒD~±ļ/¶]µ?¬­_⓳yšą‚ƒĆµė”ó‚Ņū÷i?‚ ””Kńó ÅŅ„‘(+ĖĆčŃčÖĶ0sęœ9s ×PZś'fĪ\Čųųų¼‚ęfå-6ü 11+pėVø÷doX (o€¬zœ•uöö.šń ጵti$®_æˆsēR”ö„8°/ŅÓS‘žžŠ^xžÓ—KŸ>Žørå,**®!*j1§Ÿ\»ź†Ė~~”œZ“ńÕ¦ßäp%¦|ćÄg/-żgĪĆŁ³É(-ż“‰ĆgēĀÓÓ>>Æ“°³ĒD~±ļ/¶żšį]L_ܹsĒŽ)6Ęęź'pqńĄ–-ėŌjk+ŠŠ 0v¬ģķ-¦ŲpŠ śōaófcĘÖÆŸ/¼`ņrŁęŽģ·ĄGD˜¢ØČŻŗYĄŽŽgĪ(o€![ā×_ ™ć³g…:Ō}ūŠ˜2;w£o_†5ĒŁ³Bz»dˆ'cKN>ŽžżŻ™sī>žė×GsÖ«L™bŠššFŌ (Ø pś“!¶n­ĒīŻu8rĈ)»bE kšžū¦ŪĮTUU#6¶S¦˜"/Æ5 TŽÄ™½uLUU5V­j‡ $ˆÆĒ©S²ÄkĶc|żu=6l`ÕŖv“Ż A<Š^„zNpp822ŽŹĖ+»-**n©õuuuBZŚĄ„K9­%.īsŖM€ė׋1iŅ¦īĄĄ·°nŻ*|šĮ :“S«śŗtyµµ÷`eՌė׋»Ÿ_(’“e³+ģDźĀ…,ōė7 .œäÕ¢Æ¦~Sµ’ŸĖćńŸ hsĢ…XÜ^ķõė׋™ūH“=/ļ*.\Š€€QJķż4wīt|÷Ż.œ23k!‘0r¤lÖI Ķ2É`Ö,SdeÕŖMœBBīcƆzH$ģŲaÄ[š›ė±õ× ‚xz”K)/æ…1cžw÷žpwļÅ|p%&nFjź)ŌŌŌĀĒ'‰‰›ÕĘ | YY—‘‹€€0Ęε–Fΐ!žųä“ĻQ\\‚¹s#5jeĒ3ę?ųųćdfžw÷^L™Ó§Ļāȑ$Ģž=Ū¶%jŒ)' Ą×®ż††FDD,bģžžŠ½HÅ⮸zµIĀšé§’ ėC.-Śųņõ›¶šŸŻĒ'©©§šzJi}Ÿża`‰ü>bß_l»@€wߝŜsõSyy¾R¢©īžj+ÄbKģŽm„Å‹%X¹²PŒ !ŹĖųōÓv©00@‹™-+«ČĪĀÉÉb±%\]›±x±Ū·3ń¹˜0Į / ńūļB|ū­l¶jŌ(sœ?/ÄŋBL˜`ĘéGÄӅ@*•ökkzJ”üäŸn<±Š»wļ‡Ū·ļ(Łä^žž¾ø~½ ›ąė;œ¹Īž”—=pą(V®\xūķɘ2e¾xQˆ Lp÷®—.Ս±zµ1:t"&F‚š9ē„}ūUMEŽą(J<”`ńÓf ֓"6v&OØØhÄĬhk9”Sōż›z“Šhk(Įj](Įāē©O°œ=ŠŌŌ„¬¬ÓĢ7ɂбŲĪĪWžż›™¤N5yśńGC¬]ŪUU„‡7aɒ†¶KJP‚ÕŗP‚ÅĻSŸ`AĻ.”`µ.“ȝ ‚ BĒP‚EA”c(Į"‚ ‚Š1”`AAčJ°‚ ‚ t %XAA:†,=$==“&́½½ bc7)ķ čåå[['¤¦žRņIHHBĒŽŻ•lwļV!2r)ll1lŲ«ąB—ūČMš4}įéé‹ŲŲMŒ}ėÖļįįį8p”Ó—Keåmøŗ†­­ęĶū@£~vŅÓ39µhć«Mæi‚oœøģĒ§ĮĖĖƒūieŅØŽĆßĖŽÆŚÖÖ-÷m|š)(h»?ŸŻŗYؽžŚkŠķxø^øŹ÷ÖGy9«¾æŠ• Ś J°ō?æPTTT¢Øč’“O`Ń¢e€ÜÜ|,_¾™˜={!rs󟘘X47+oæ1nÜ Š¹¹ēšüóöœu±7,~\***qčŠNlŪ‡ääŒ=!! ›7ÆC|ü|ńE§/—ž©S#pģŲܼ™ Ž]sYmPŻ ĻĻ/”S‹6¾Śō›®Ä”oœųģ³f-Ąņ勵³g/dāšŁŸ4Ŗć0mŚ;Ģ5yß­Zµ!!Am¦±-pt|Šfu«ī›ØŹuOH A|P‚„‡TU㧟’`b҉‰›qōčĻ€šš©šõKK ?~cĒNc|²²N·ˆ3uźÄÅmApš[6lˆVuóĶd‰Å]1cĘ|ŌÖŽĆŅ„«8ĖüōSzöt†³³£ŅFŌGīFļŽ=Ń·ooü_{wÕyļü»»,,Ė.Ā+,F4  ¢‚Ä»ŠPÆÄÖRćL;vbż#éŠŲ¼ŒŽ ^sē^‰y©s{ĒŲŃc}Ia”Ž˜'"Ź‹[ c«–˜ ¬ŲūĒɞ}įœŻŲ|?3ŽgŸ=Ļ9æsqæ<{vϱcJö•Ŗ?..Z­:N¢—`ƌ Üw_šxžįJÕ¢¤ļpĪ›;¹q’k?~ü0l¶…°ŁāųńĆāväŚĒš÷8ÄĘNąŹüvīÜ  „-\Ć‡C`·k°k—šÉ'!8wN‡ “X¾Üu÷‚µkĆŃŚŖÅ‹/š£ ķfĢ••!ČČ0”»خ֔²2€0³ÓŽ®ÅgŸéÄõjjtø}X¶Ģ(Īü8Ū»»9sLC>ĪØØHōōļ¾źŃęĻŚµį°Ū5>7**­­ZŲķ<ō æü„Š'?Ÿw~ ņ‡+ȕ•U`åŹ|Ąµk×ÅöŲŲĒRvķŚ‹’’­xūķ×±{÷¾×RXø&Sž~z­ßuĖŹ*Äå‹’&.·¶*’Fü’’­HI™‹å~ܼéŗõȒ%ž_4|āÄ\øPƒ—^zļ½÷¾ĻZ”ōéy“'¹öŲŲvĖcĶ{JJ¶ZgŻŗ5ØĢ·Ļ?×bņä˜Lüüē}€āāP¤¤ōcƌ¼ńĘmqŻĀĀ^ÄĒąé§ļ ®N>ĢKyå•P¼üņmĄ¼yżxõUWбX‘!Ģ̾śj(23ūlŽÜėŃ?3³F#P\Ü3äćģčč„Įüāw†Ōư°&“ĆļńĘĒ ē°¹Y‹õė…>µµ|é ņ‡?%A¬¶¶ÉÉ3°y³pż‘ū‹ģµk׿¾čīß’HMMFzzŖĒĢ‘æk®x\ūÉÉ3Ė=>·5gĪB$'Ļśi 23Ć~‡¦¦ >kv—˜˜!¾õŅKÄö£G]ĒŅŃqqqV TVĀśõ’į³%}åĪ›Rrć$×ī¼”,5ļq˜1#Ććł_’ś<žx^€Ŗ“wåJfĻĄ¦M$$3CēĻ»ĀĽ÷ŗŽāKN–-–tuIæż)93ŌܬÜ9„øļ{ęL×Ūįīėgfz¾Mī½o©żoŁ ‘ģ*ĖyĢrĒė«Og§ņ>DćVr8ŲøńæšĄ)bŪ÷æ?O\®¬¬Āüł™>·ŃÜ|Q\vŸEņ¾ęȝŁlĀ_Ūē’ß:Ż·åp8°m[)ŲåQwn® 55Ēń—æü ]]væŪtr=_ÜĆŻÅ‹Ć÷¾'>–ŖEI_¹ó¦”Ü8ɵWVVy“ū[kŽć0†“¼‘ KIDAT0ązüÕW_ć£ŽŽuIC²iS>śHø&)%E:Ą(ŃŃŃ9č&ΐ”Ōļ1£“”$½ädW{}½+T¹Æļ|;QnßRūź)aęŖ·—”‡(˜0`”éÓg#::§N}ę1CTZś²²l˜4)Vk,JK_ū8×q mmWÄOļÕÖÖĖīOÆwżź[Qqk‹žž~ķ¹ļCj,::EE[žžķńüźÕæ‚År?ž{®Hv¦CŖžĘʓHK[€˜˜Dlßīś$ąāÅ+ÄåC‡ž€)SR1yr .]jE]D¦OŸ-Y‹’¾JĻ›¹q’k‹³"+ˆ¬,¬ÖXq;rķcĶ{OŠĻ-X°åå#ūy4=‚œœÄĒ›±y³0ĖsäH7ęĻ7!!Į„uėĀxĪLyĻMjĘ“iƒ?±ē>£T^Žė×µ°X̘;ׄ²2é ĢĖŹŗ‘žn¤Ifčt®§ņņnĢk‚ÅbF{»+$łŚ·ūßįHJ2cļŽś½g¼¼Mź¹āāL›fĘīŻzæŸ>”›Q#"ĘįpĢtAŖ€ųėä͛ʯś®čź²Ćl6!-mNśļ@DŖhmÕbÅ #ΜQ>£K¤¶ īónjšc‰Ui†ų®=ŻM22C__Ÿä'ųˆH}ŁŁhiŃ¢°šŖ«oŗ"E XćXKKu K WŖŖŖˆĘ ^ƒEDDD¤2,""""•1`©Œ‹ˆˆˆHe XDDDD*cĄ""""RŃ0̚eBttp|“¹æoUWó[׳ķķDŹ0`”ØØ©ČÉY‰žž^äåą™g6ššZPQq]HLœ‹¦¦±Ļ<<čö599+±oßA“·ßĄO¬õ¹?5ää¬DSS ZZ>G^^Ųžč£’ކ†&œ=Ū€ģģ\ɾRõ/[¶ mmWpēN~ó› ’żäjŠš*Y‹’¾JĻ›Ü6äĘI®=1q.**N ¢āēŠŪ‘kMŪ·æ=č˜äźöŸåĖWIĮ¢©ÉŽÆæ|oĄ@ŗGįPžWs_D$`Ą R%%/Ć`CIÉV|šĮ!ĄŽļĄf[ˆČH36lx;vģ×?vģĆAŪ((ČĒOš‹åoR“_©{:—ėėĻĮjMĀ¢EĖekž5k&fĪL@IÉV±}Ū¶’AZŚ,<ų`^żæ%ūJÕ_[[)SīEhØEEĻ+ŖßT-J ē¼¹“'¹ö×Ćf[›m!6lxF܎\ūhڳē€āćńŸÓ§ĻŽIJµ¶jń³ŸaµFbåJ£Ųž™iBzŗ ;w†fdźėuČĪŽĄ¢Ehn֊ķr3?ŽĻ½’¾^¼”ū:ŁŁ˜8ŃÕ’Į…{žõÆ:ķ:ļEøoŸŽļ¾åöē]›ó8ÜegGĄj”=ĘØØHœ;§Ć#Dą‡?¾už‘G„>—.ńå‚h(ų„::.cŚ“©€O?­Įš5ĀĢĄGÄužxb%žųG×ćŲؘAŪłšĆ#hl<ŗŗF¬Zõä°źp§×‡ąźÕfģŻūæ’ė;kvÖķäp8Äåšš0ɾRõ·µ5ˆ7–~öŁÅö%Kۃ«W;ńĮĀ ˜óņŒØ©±£®ĪŽœœo32z½UU·°wļmŲlb»ó7÷ē–.5"&fķķ]8}ŚŽÜ\W˜«Ŗŗ…/æśēęqö¬’śWĀĆ]ŪZŗŌˆÓ§ķhoļĀ=÷8üīŪמ AVV?:::‘”40ØoUÕ-\½Ś){ŒŠjųųć[ŲææYY&|ü±ŠēŃG#”Ÿ|"bĄ vo½õ{üö·OI>§Ńh|ö-..Bjj2ŅÓS±}ū–גp?`āÄó¹Žß’~o½õ{ńqaį46žĒ¹sĶxžł’T¼æāām8uźĻøvķnÜųJlwl—g…Į`@IÉĖųŻļJ}Ö¢¤Ææóę Ī>÷e)rćäoü‚•³nļńŁŗuG€+óōĘ·ńä“Flن¶6įæŗ¦&8c“’āšżIHž]Lœ8€®®”Ks³sęøĀĢłó:ÉõÜŪgĶr­ßÜģjĻČčŃž6n ĒžżŻ~·įėē"*ŹįŃŽŁłŻü÷J( XAŹįp`ɒŸ ŖŖ ‘‘fĄŠĖÄē÷ģŁüü<ŸŪčķ½#.+}17›MųņK!Ģø_ć3X¾¶åp8°m[)“Z-ŖŖŹÄö]»ŽDjj2RR’üÖģīŻwwcęĢ axóĶWÄöcĒ\oc¹N‡× T-Jśś;o—Å?īäĘI®}Ļžżķž–Ēš\ŻŽćóĪ;»U¢¤åĖæAm­/¼Š‹īo3Gjjæäģ^/„‰įdޤ¤~ŌÖŗž+MN–IīķgĪøÖOJrµŸ>-Ī”īÆŗŚŽE‹F6Óä<D42 XAhśōوŽŽĒ©SŸyĢŽ”–¾†¬,&MJ€Õ‹ŅŅ×Ä>ī³)NmmW0oŽ"Ģ›·µµõ²ūs'ØØ8€‚‚5ČĪĪEæä5Yr36ŃŃń(*Ś‚ōōlēWÆž,–ūńÜsExüqé€%UcćI¤„-@LL"¶oGl_¼x…ø|čŠ0eJ*&ONĮ„K­Ø«« œC©Z”ōUzŽäȍ“\{\œYY6deŁ`µĘŠŪ‘kMRć W·÷ų46ž“•:z499ˆ7cófį­é#Gŗ1¾ &¬['¼Oē} ’»©S͘6Ķ1ŠEQā ‘Ź4‡cv ‹ """ŗ›p‹ˆˆˆHe XDDDD*cĄ""""R‘ʰˆˆˆˆTʀEDDD¤2,""""•1`©Œ‹ˆˆˆHe XDDDD*cĄ""""R‘ʰˆˆˆˆTʀEDDD¤2,""""•1`©Œ‹ˆˆˆHe XDDDD*cĄ""""R‘ʰˆˆˆˆTʀEDDD¤2,""""•ż?Zj`ąµIEND®B`‚libwebsockets-4.3.5/doc-assets/smd-message.png000066400000000000000000002374441476025525100213700ustar00rootroot00000000000000‰PNG  IHDR öˆˆčs pHYsŽŽ ‚ŸAtEXtSoftwarewww.inkscape.org›ī< IDATxœģŻw|užĒń×&Łō HBI Ä ”i DźŻyx”žRSi§ž D@ńDEŠ€(JQz"@@J ¤÷lv~,;ī&»ÉR(Ÿēć±lvf¾óŻˆóŽoÓPs4åünķyyÆ !„B!Ģ)¼fķyyÆU©ź¾±//dhJ½nķ§µņ„B!„å…‰Źž,ÆĢŪV7ō–Z:4„ž—÷š„"ĮC!„BˆŠYjįP,<,½N©ē–ʼmUyco)0X ĄĪŹska¤Ŗė*„B!Ľ¦tų°öŠ[yn-X*’–UÅM½-ĮƎ?‚†]9Ņ$ˆ!„BQKĮĆō¹Žä§„GémÕDn÷fŽŅøŽŅ-v€½…Ÿö^·B¬uĖB!„BXėVU:`”˜ü,)õ»µpR:ŒĄm„[½”//xX ö€ƒ…Ÿ@CĄpœ1!¦åWĒu!„Bq7±vćŸä7€ ,·x‡®‚Ÿ„C‰i˜)]‡J‡Ź€õšaŚ•Ź4t˜>B€.@G 9Špŗ…:!„B!,ˁsĄ1 C(1† ć£Ųägq©m: ÷õ¦-#P¶K–†J†Ź¶Xš*·¼ą”šƒ€ž@P%Ļ'„B!„ø= p ŲģĮPŒ”£čę£ōsÓ@bŚ*bŚ5 ?+T™RŽsÓą”½łčŒz˜žĒĮĮČČHzč!BCC ÅßßWWW<==+Q!„B!„^Æ'33“œœ8sę §OŸfļŽ½œ={¶ōī…‚Č·@ŹĶßME&?K‡Ó®Y T·ŹÖb)|˜¶z[<ÖĄ0\]]0`Ɔ £gĻžø»»ŪxZ!„B!Ä­JLLäĒdŊģŁ³EQ3‚Ų ¬Ę0n¤ĄĀĆ4””n±4Hl!¶kį£t«GąeąŁ›ÆÓøqc^zé%†އ‡‡ §B!„BT‡‹/2ž|>žųcņņņŒ/ēß`hÉēĮģʇ1Œ˜¶ˆ”ī–U©bėģRÖ‡±»U;ąC  €ŸŸoæż6ƇG«ÕVp !„B!DM¹~ż:³fĶāƒ>@§Ó_>|¤b!¹7‰i1v˲BŹ öŌĻt ÜŅ]®“ŗ\>|5 cĒŽeŻŗutéŅ{ūŠŠB!„BŌ$777śöķĖ€8~ü8—/_šĆ0Sm†Šalp°“Pųm)/!XšéŹ“åĆų'šąąėė˚5k˜8q"ĪĪĪUQ7!„B!D5ńóócĈøøø°cĒEq:é¦ķ5®ėg)xXkķ0ž×"k¤t׫Ņ-NĄl`,@ūöķŁµkķŪ·/÷"…B!„wFC·nŻčŅ„ 7n¤°°ŠƤRŁ@ę­ƌ`iUtKaÄb±–L,ĶveŚķźUn†Gy„ 6ČŗB!„BÜÅ~ūķ7śöķKbb"Ęv¬Ā°a&†µC²0 ZĻĮ0FÄ86ÄtpŗµŁ±TvĪ]z„óŅ­’ąfųčŪ·/?žų£„!„B!īrįįįģܹ0Ü’BĄš<7ĄpĘŠ8”Ő,uŁ*Óąa©Ä“õĆtŖ]G 3°pˆŒŒdūöķ²¦‡B!„÷'NŠ£GŅÓÓĮŠźń)pĆø žh±Ōb:EÆÅVŅc@,M·klłšÖ^ģŽ½Ÿ*¾\!„B!Dmņóó#""‚•+W¢(ŠPˆć aģb„Ǽ˕i×+«LˆµYƌ­ļ‘lÜø‘°°°*øŒ!Ńš×æžµŗ®E!„Bq0Éõ0LĮk>L[@ŒÓńZœŠ×@JB·Ē0×/͚5£E‹Õz1B!„Bˆ;[ß¾}Oķž¦įĆҳVŅ©Ä“ Vg€ž={V’Õ!„B!īhįįįųłł­!t˜Ó.XÖ$4' @×®]«ó:„B!„wFC—.]ŒæzńGčp¤l÷«Ņ­*k]°ß<x /C!„Bq·0Y”ÜCŲp4y˜¶~X !f]°Ą<„47–,ć?„B!„”””ʧ¦-6‡Lŗ`•ā ąźźJ:uŖū:„B!„wĄĄ@ćS †°,<ŒįĆŅ«ÓšzxxxTó%!„B!ī„ņÖˆÅššDn>ÜÜŻŻ«³žB!„Bˆ»H©b\p°tš°>Ź] ] ąččX}µB!„BÜUJåƒŅc=LŸ›>Ź]ˆŠ4!„B!DyŒĮ£tų°ŌĖŖĢLvB!„Bˆņ”īfe>Ź“|”>ČØĢ !„B!„°ĄRš°öP±Ō"„B!„¶(/pXlŌ(=D!„B!leiœ‡„lau ˆ!„B!De”—Źä k]°$„!„B!ŹS©ąa$c@„B!„·Ŗ¢AēeHB!„BŌ B!„Bˆ#D!„BQc$€!„B!jŒ!„B!D‘"„B!„Ø1@„B!„5FˆB!„¢ĘHB!„BŌ B!„Bˆ#D!„BQc$€!„B!jŒ!„B!D‘"„B!„Ø1µ]qwÉČČąāŋ’»»;xyyPŪÕB!„w8iJNNfŹ”)„„„ąććCŪ¶méŌ©QQQtīܙV­ZˆÆÆ/ŃŃŃ,[¶ŒüüürĖLOOG£Ń˜=Ś·oĖu\“hQ™ņŽzė­2ū}ųį‡eö«čįććC»vķxöŁgٰaEEE·\O!„BˆūQ®Õ«WŹ»ļ¾Ė… ŹŻ÷ʍlٲ…Ń£GĀžżū+u®#GŽpīܹ[®guÉČČąčŃ£|žłē 0€¶mŪņĖ/æTŪł„B!īeŅKXõóĻ?óĢ3ĻP\\ €‹‹ }śō!""WWW¼¼¼ČĢĢ$==7npģŲ1~żõWE!))‰Ž½{säČZ¶lYīy\\\Ō“Õ«W3cƌJÕ311‘½{÷–)«"žžž“jÕŖÜ}ŠŠŠHNN&>>NĄ©S§čٳ'[¶l”{÷«B!ÄżNˆ°jĀ„ jųčŃ£_ż5žžžåĆĄIHH ??Ÿ—_~™7–{L»vķ8wī×®]cÕŖU• k×®EÆ×Š·o_6lŲ`Óq½zõā‹/¾°ißģģlV®\É“iÓHKK£  €gžy†sēĪįääT©ś !„BÜϤ –°čäɓœ:u wwwÖ­[Waų芔ƒŁMżęĶ›ÉĪĪ®šøpāÄ NŸ>]©ŗ®Zµ OOO¢¢¢*u¬­<<<3f ÄÓӀ˗/³råŹj9ŸB!ĽJˆ°čųńćźóĒ{Œ:uźŲ|ģĆ?L£F(..ęĢ™3åīÆÓé6l˜ś{eĘs$$$pšąAžzź)Ŗ·QÆyóę¼ńĘźļ‹-ŖÖó‰{Ļŋy’ż÷łē?’I|||mWG!„Øq@„E™™™źóʍWśųõyrrr¹ūźt:ŗuė¦NćklѰŚ5kP€”C‡Ŗć4ŖÓ3Ļ<ƒV« ēmiį±fįĀ…DEEEbb":ŽeĖ–EƆ qttÄßßŸĪ;óžūļ›o)))ałņåDEEQÆ^=4 īīī“lŁ’‰'ŚÜ’ōć?2nÜ8"""hŲ°!...ø¹¹@›6mųĒ?žĮŗuė())©°¬ĢĢLęϟOtt4ųųųØõjŌØ:ubāÄ‰ź˜Š$%%ńöŪoÓ³gO4h€——///‚‚‚čŃ£S§Nåäɓ6•—Ą«Æ¾JĻž=iٲ%¾¾¾h4¼½½ń÷÷§gĻžüė_’ā×_µ©¼‚‚>żōS† BŪ¶miÜø1h4œ  {÷īL:•óēĻóÅ_Āäɓłļ’ĖÕ«W-–»yófʍG›6m,~&Ļ=÷ß|óMŸ‰Bq'Ņ.€'Ph,”°°0EܟV®\©  Œ3¦ŅĒ’šĆŹ’%K”%K–(ēϟ/³=--M-æM›6Š¢(Ź?’łOõµćĒŪtžČČHPźŌ©£)óēĻWĖxóĶ7Ėģæxńbuū_’ś×J_—Q—.]ŌrvīÜyĖåŒ7N-ēĒT"""Ōß-=Zµj„$$$(©©©JēĪĖŻ×ÉÉIY±b…Õs_ŗtI錵k¹e˜>ڶm«œ8qĀjyŪ¶mSźÕ«gsyżū÷W²³³­–÷ŁgŸ)nnn6•„Ńh”^xA)..¶ZŽ¢E‹GGG›ė7zōhE§ÓY-/66ViҤ‰Ķå9::*®®®źļ~~~ŹŃ£GĶŹLHHPŗuėfs™mŚ“±łæ!„¢*ÄÅřžæč š° ųų70tZßĢõof @+ƒŠ…E¦­‡ŖōńśÓŸlŽ×Ųj1lŲ0Ž’}ĄŠ ņąƒ–{\\\111€a ‰V«­±o„CCCÕi†;F=n»ĢĮƒ“““ƒ‘‘‘4hн^Ļ™3gˆ‰‰AQNž<ɐ!Cšööꥁ899Ń”C‚‚‚puuåŹ•+ģŻ»—ÜÜ\ 5j;v¤E‹fēJOO§wļŽź“Ē†V­Z”ŽqÉÉÉ!66–ćĒ£( G„_æ~>|???³ņ~’żwś÷ļO^^DFFRÆ^=¼½½Ńėõ\½z•£GŖ­ß~ū-ćĒgłņåeŽ‹Ÿ~ś‰‘#GŖ“ “hтˆˆźŌ©ƒ··7ÅÅÅ$%%qčŠ!āāāP…ŋӨQ#¦OŸ^¦£FR·Ļ›7O)))±Z޶mŪŌ–%55µĢ>Ż»wW·ÆY³ĘjYŠ¢(Ÿ~ś©bgg§¶*čõś2ū˜¶*|ōŃGå–wāÄ „N:  ZÜg͚5f­‰‰‰å–¹uėVÅŁŁY”Ö­[[ÜgŚ“ij™ķڵ+·µéäɓJ«V­ŹżŒ…BˆźP- 2DX¤ÕjyõÕWÕß?ųą5jDß¾}™4ióęĶć믿fļŽ½\ŗtI®÷vh4† Ą¹sē8räH¹ū«ūłłŃ³gĻŪ>eæ‘ČŹŹŖ’2Ÿ|ņIfΜiqZßīŻ»3qāDõwVÆ^MżśõĖģ[Æ^=µ% (ó>–””°téR|||ųᇷZÆV­Z±~żzģķķ,N]¼gĻ"##™!„āN%- ¢B]ŗt”K—.€”;Ė•+WHNN&!!ääd®\¹Bbb"—/_ęĉźT±ńńńōźÕ‹ƒš}#_‘”C‡ņŚkÆĻįƇéŲ±c™}ŒSõŖu«I¦7„ĪĪĪURfE­8¦ŪÓ—G£ŃX|ŻōF8((ČĘŚa6ȹtčźŌ©ß’=ūöķć/ł C‡„U«VTz„xBCCłż÷ßY±bīīī<žų愅…ѰaĆ*YėåŚµkää䐓“CQQ’››Ėļæ’Ī—_~Yīń=ōśüŻwß„{÷īø¹¹YŻ’čŃ£¬_æ0LšPŗõŖ:>!„āN%DTŠ‹‹ Ķ›7§yóę·³sēNʎ˹sē(((`ģŲ±6Æū†®Hƽö`hé(@N:„Τ4xšąrĒTÓn>...5~žŪ‘››«>öŁg5j”MĒØĻKßģ¾ņŹ+lٲ…āābV®\i¶B¼ææ?4jԈ   š4iBūöķéŲ±£ÕšöĘo0lŲ0JJJXøp! . !Ģßߟ    $$„:о}ūrCÜöķŪY¼x1Ū·o'==ݦk¶¦WÆ^DFFrųšavīÜIHHˆŗö‰››öööäēē“••ʼn'ųłēŸÕŁŽĘŒS&š~&#FŒą’žļ’lŖGyŸ‰Bq§’"Ŗ”V«%**ŠĶ›7Ó²eKŠ‹‹Łæ?.\ 88Ų¦2Z“hAŪ¶m9zō(kÖ¬aΜ9f7l¦ V4n¢ŗ˜ŽĄzxxŌJn•ixŗÕEMDčŲ±#?’ü33fĢP¤„¤¤’’ĀįƇĶ^Æ_æ>K–,į©§ž*Sž!Cpppąõ×_ēųńćźė%%%$&&’˜˜X꘹ą`¾ųā ³±2FóęĶć„—^²Ś„ĻThh(AAAlŪ¶ĶāvNLj#Ō1HĘküģ³Ļ*,{Ȑ!¼ōŅKe^ƊĻDˆBˆ»…aŃłóēÕÕŠ›6mZī€gKš5kF§NŲ³gŗ^­ ĮāčŃ£$$$pąĄ³nVĘńĮĮĮt芔RõŖ*¦7Ą·²R|m2ķ¾5iŅ$ĀĀĀ*]FŪ¶m˼öšĆ³{÷nRRR8{ö,—.]āņåĖ\¹r…Ė—/séŅ%.]ŗ¤>ævķC† a’žż?ǧŸ~š§Ÿ~šK—.qžüyµ cy—/_&>>^ C.\ ::šS§N™ ų>~ü8/æü2Š¢ąąąĄčŃ£‰ŽŽVWwuuÅŁŁ\\\pvvęõ×_·@ęĶ›Ē_|ƒƒėÖ­ĆĮĮµk×rņäI)(( 33///¼½½ńõõ„mŪ¶ 6Ģź xÓĻdāĉź8ØŹhß¾}„B!jƒaь3Ōż+VšĢ3ĻTŗŒf͚©ß†'''WźŲ”C‡2uźTEaÕŖUj‰Uģ2Äź8‡źvźŌ)õyyƒóļD¦3x=ņČ#<łä“UZ¾ææ¹‹ā]øp3f°jÕ*Š‹‹y’ż÷ĖsŃøqc«!OÆ×sņäI&L˜Ą®]»ČĢĢäć?ę?’łŗĻŅ„KÕ ,XĄóĻ?kvÓ÷ߥ< N×ūÄOÜV™¦ŸIĻž=-¶ !„÷ ™KXd:K„ulaś­neĒI4nÜXķJ³vķZõŅtö«Śź~•ŸŸĻĮƒĆ@oK­w2ÓiwM§“­Hzz:qqqÄÅř—””ÄO?żÄO?żd±kTiĮĮĮ,_¾\LžĖ/æ˜mæpį‚Z^Ec5ģģģhŻŗ5‹/V_+]^LL `ų{>|x…õƒ²]ĢL’®OŸ>ͧŸ~JJJ %%%6•kMU|&·ŚuK!„Øi@„E>ų śÜøˆ[e™¶ÜŹśʀ‘””¤b7°°0Z·n}Kõŗ]Ÿ~ś©:ų·M›6.Bw§1ķŽsöģY›ūĻžCpp0ĮĮĮf{öģ!**ŠØØ(³€Xu­ cW?£•+WŖåŁ:yéZ„Ė3®ƒāįįQīLU¦ĪŸ?ouŪĆ? &\5j 4ĄĮĮ///š4iBŪ¶myōŃG8p £Gęå—_ęŻwß嫯¾²:­°égrīÜ9›ź†ĮśĘϤ2=!„µIŗ` ‹zöģ‰F£AQ6nÜȁčܹ³ĶĒļŽ½[]ĶŚŁŁŁāĄąŠ <˜É“'SRRĀŖU«pssSo kcķ0t3]!žVŗ¦Õ¶6mŚąęęFnn._~ł%3f̰iZ_ć ®F£1[«ĀtM’ß’ݦ:pķŚ5€2Īt[’éŗ„Ė3Ž_ŹŹŹ"77·Ā’’’Ā–-[¬nŸ2e )))źŹåFYYYdeeqéŅ„rĖļÓ§Ė–-3{ß"""ššš ;;[żLlYÄÓ4tTfż!„¢6I ˆ°(,,Œ¾}ū†oz£¢¢˜={6)))å—––Ę‚ xā‰'Ō‡ˆ··w„ėŠ AŗwļĄ7ß|ĆW_}„n«ÉīW………Œ=Śź~///~ųįvģŲĮ×_Ķ‘#G8{öl™™žüżż §_æ~Œ5Jmm)mźŌ©ōčу>śˆ={ö””¤.žēąą€­Zµ"::šqćʑ––¦¾×WÆ^5+ĖŲ]M±aQĆŅL­4}Ÿ"""ųķ·ßŌĻäčŃ£V?“޽{3fĢ‚‚‚*]!„¢6i0“€8Üüé øӀ1aaaf3 aJ§Ó‘£££Ķ³ ‰;_qq1999xzzbooŪåeeeaoo_e#8;;ßv÷·ĀĀBŠ‹‹+ ~„‡§§'Ū¶m£cĒŽ6wżśuž|ņIu ē]»v©cœ*R՟‰Bq«āććMæ<žøÜ®Wož¼~óµ Č €b@'- ā–æ9÷­V[„Ÿ«§§g••ÜŅ„–899įääTéćž}öY^{ķ5²²²čŌ©­[·&""‚ ØaÜÅŅüü|233ÉÉÉįĢ™3ģŁ³GOŌ²eKŗvķjó9«ś3B!j“!„Ø„3fpåŹ>łäE!66–ŲŲX›ąX·n“d!„øoIBˆJ°··ēć?fāĉ¬]»–ƇsīÜ9rrrČĶĶUBtrrĀÓÓOOOź×ÆOėÖ­‰ŽŽę±Ē³iŻ!„ā^%D!nAxxøÕ EQ×2B!„9YˆP!Ŗ˜„!„Ā: B!„Bˆ#D!„BQc$€!„B!jŒ!„B!D‘"„B!„Ø1@„B!„5FˆB!„¢ĘHB!„BŌ B!„Bˆ#D!„BQcj»¢rJ=%:ĆCÆCÆč)QJ=zEAA©ķ* !īģ5ģ5vŲŻüédg³½g{4ņ•BˆŖ'ä—_RLvq!ŁŗBrtEėKj»JBˆū„ƒĘw­Nxjp±×Öv•„BÜ$€ÜņtÅÜ(Ź%­(_‡¢Öč=Ełdå†@RĒѕŗN®ø98Örķ„BÜ­$€Ü!J…ŌĀR óČ/)®ķź!D:EϵĀ®ęąlļ@]G7ź;»a/]µ„BT‚ZV¢č¹^˜KJ~6:E_ŪÕB›”čHĢĻ$¹ _'78{ µ³Æķj !„ø H©%zE!„ ›”‚lōŠ BܝōŠĀµ‚R s©ļäNCOģ4šŚ®–Bˆ;˜Z]\Č„¼t Jtµ]!„ØĘ/UnåąāE]'׌®’Bˆ;”T¢č¹”›AZQ^mWE!ŖE±¾„ųÜ4ҊņhźV;"„œüŸ”†äéŠ8•yM‡⾐Y\ĄÉ¬²Š j»*B!ī0@jĄÕ‚Ng]§P/]®„÷^ϹģT’ó³j»*B!ī @ŖŁ•¼L.ēeČ åBˆū’$ęgŸ›&’ !„d HµQPˆĻI—.WBÜ(Ģ£XÆ'Ų½.ö2K–BÜפ¤((œĻ¾!įC!Ldp.ūŗL=.„÷9 Õ >'Lx)„eäčŠ8Ÿ“*ݱ„ā>&¤Š]Ī“iv…¢cįĀ…¼żöŪeö‰ŽŽfÓ¦M¤¦¦āėėkń<»wļ&99™žżūóķ·ßZܧG|öŁg·éõz>üšCʏĻß’žwāććŃjµ¶_Øā¾%ä\+Č”DZ?„¢Ź)(\-Č&ŠÕ»¶«RkŽ9‚F£aÜøq·k4FÅgŸ}fµūÓĄٰaėÖ­c̘1÷Y½z5†§Ÿ~Śj)cĒŽeūöķ¬[·Žļ¾ūާŸ~ŗĀćāććqqqĮßߟĢĢLŽ?Ž^Æ'44Ōl|ĖÕ«W9~ü8vvv“lŁ’FY-311‘ųųx ššš yóęŌ©SĒźž999=z”ĀĀB“Z-4kÖĢźžz½ž'Npżśu|}}yąptt“zĢŋIJJ"//­VKóęĶiŲ°”Õżu:ēĪ#55•ĀĀB<==iŲ°!;vŒåĖ—Ó„K†jvÜłóēILL¤øøZ¶l‰›››Õ󤦦rāÄ JJJprr"88øÜz•Ē–k,**āŹ•+ųųųąććCBB.\ĄĒLJ6mŚØūéõzΜ9CJJ Š¢Øļ±„Ś{“[p£0ƶ« „÷¬…yøz”ASŪU©ŲŪŪćääduŸ–-[2fĢ«7ͽ{÷ĘŪŪ›Õ«W[ :Žo¾ł†N:p[õ2dėÖ­c’žż6-ZšČ#Š±cGęĪKaa!öööŒ5Šłóē3nÜ8–/_Ž^o˜M£Ń0xš`ž÷æ’™ €’å—_;v,æžś«Ł9ģķķéÕ«‹/&88X}żśõėŒ9’Ķ›7£Ó™7 fĮ‚ōė×Ļģõ™3g2gĪ222Ģ^wsscüųń¼õÖ[fƒżcbb9r¤ÅpŲ”C–/_N«V­Ģ^Ÿ?>Ææž:éééeŽéŌ©æżöłłłfŸÕśõėyńʼn‹‹3ŪßÉɉĮƒ³`Į||žčĪxźŌ)FĶĮƒQJ}‰Ś”C>łä"""Źœß’_ż•‘#Grüųq‹×ų駟ņąƒ†€ĪóĻ?ORR7nDQžxā 6nÜĄ‚ xė­·Ō€gäīīĪ?žńfΜ)Aä#¤’²u…2ó•BT#¢'³ØoG—Ś®J­hÕŖ§NbćʍVoč}}}Y²d‰Õ2ģķķ0`Ÿž9WÆ^ÅĻĻĻlūĪ;¹vķÓ§O§¤äöV¢7ŽL’öŪo6³}ūvΜ9ĆkƽF³fĶHKKcįĀ…|üńĒģŽ½›œœŽzė-š6mJRRK—.eõźÕDFFņā‹/péŅ%¢¢¢())aüųń„‡‡ćėėKJJ ūöķcåŹ•DGGsźŌ)õęuųšįlٲ…‘#GŅ»wo¼¼¼HKKćĉ,Z“ˆAƒqžüyõ[ü+V0cĘ :vģČØQ£š÷÷GÆ×sńāE>žųcŽyēyį…ČĻĻēńĒ'==W^y…Ī;£ÕjÉŹŹ"&&†÷Ž{ĮƒsźŌ)4CĄŽµk“&M¢aĆ†Ģ˜1ƒ–-[āääDFFæüņ óēĻĒĪĪŽ+W®ØŸćĪ;Õ ¦NJ‹-pwwWošæųā ŅÓÓłžūļƬfO<ńIII¼ųā‹DFFāīīĪõėף·oĖ–-ćÉ'ŸäĀ… 88”kXPPĄOłä“2uņņņbśōéģßæŸAƒ°fĶÜÜÜŲ¾}{™nM  I“&üōÓOźū»gĻ®^½Źäɓyć7Ģöśé§ÉĪĪfįĀ…¤¦¦ŖļŪO?żĄ²eˈŽŽ6;fŠ AčõzŽ{ļ=®_殐9sę ŃhŲ½{7-[¶4;fĀ„ ōčуM›6qńāEš4iĀ‘#Gˆ‹‹ćķ·ßfśōéfū>œÜÜ\¾üņKĪ;gö¾[²oß>’““™4io¾ł¦Åk\°`×®]3 ¾Z­–ƒŅŗuk³cŽyēź×ÆĻ”C‡ĢZlžžyBCCY²d ³fĶŖpZiq÷ix+AŅeÕs!„ØvE÷ķX»nŻŗńķ·ßĮęĶ›yēw?~<żū÷§}ūöŌ«W 0uźT²²²¬–óč£Ræ~}V­Zeözqq1ėׯ§{÷ī·Ü÷ߔqķģģl›iٲe™īcĶ›7ĒÓӓ€€€27ĮxzzšuQ:xš nnn<ńÄĻńųć ü¬u9{ī¹ēˆ‰‰”gĻžźkŌ©SĒā˜ŠĘĆ;ļ¼cv]«WÆ.ųŒ<==Ćų#c73ooĖćž<<<Ō®j`øö6mŚ” `č®öŲc¶_ūģŁ³‰‰‰!((ČāvS-Z“`õźÕVĒ(YŗF€~żś• )))\¼x‘ččč2į ŻÜ}ōQ²²²ˆÆ°nāī!- •§+¢DVźBˆj§ £+ÄK{.x÷ųćóų揓——Ē„K—HNNꬕ+$&&rį¶lŁĀģŁ³Ł·o»vķĀĪ®ģ÷‰ 8%K–””¤†Ÿž™7n”Ģ|«Œ V¦¾———Å×µZ­ÕńŅß~§„„įķķĶöķŪ-īńāE233hŲ°!|ųį‡ÓŗukÕV%ć:'¦zč!öģŁĆ€xōŃGiҤ‰zŒÆÆ/ķŪ·7Ū?((ˆ   Nž<Ɋ+ČĻĻ'==ĀĀB222X±b€Y··‡z0Œ5yļ½÷  ƒ·>ĢņåĖqqq!44T=6==GGGµõ¤4ćX ćµ·iÓ'''¦M›ĘłóēiŃ¢7& €F©[ČoæżVę333-^#`qŗčŌŌTĄŠ­]K~~¾Łµˆ{ƒJČ*.¬x'!„U"»ųž F®®®„……•iČĖĖ£sēĪģŻ»—]»vńČ#X<~Ų°a|ųᇬY³†‰'†īWĘpRŒ­åͼTŅÓÓINN&**ŖÜżŒÉŽŽžÕ«WóüóĻóžūļ—ŁÆI“&Œ5ŠéÓ§«ī•W^!11‘o¾ł† 6˜ķļååEŸ>}xļ½÷Ō–…œœČÖ­[ĶöÕjµŌ­[— Ø7ŻF 888šż÷ßóŻw߆šh$oooĻĀ… qww ­Š¢°’~›ÆŻĻĻ/¾ų‚—_~¹L·)ć,cS¦Laųšį喐››Ė AƒŲ¼y³Åkō÷÷/3˜0bdüŪY¹r%+W®“éZĽAH%dė,/Ō$„¢źeėīæ/}Š‹‹7nuėÖeęĢ™V÷suuåĻž3Ē'66ÖjéÖ­¬^½š‰'RXXȆ čÕ«—:įvŻøq0|3^“4 Ķ›7/s#\š±Kf”:zō(™™™\¾|™K—.qłņe.^¼Čʍyå•WØ_æ¾:s˜§§'_}õEEE\¾|™Ė—/“@BB‡f͚5\æ~;všß’ž—­[·2jŌ(&MšDćʍÕ.To½õ–ŁģX111Œ?žŁ³gÓævģŲAJJ ø»»ćēēGTTMš4Q1†£~żśńĮ”{ķuėÖUŸ4ˆAƒ‘ššJBB‚zżqqq¬Y³†æ’żļ4k֌nŻŗ•[ę‚ Ų¼y3#FŒ`ņäÉe®qęĢ™V§‡.Ķx-&LP²5–ZPÄŻKH%äčŠj» BqßČÓ”Wģ,|szÆŅjµ|žłē8::–@ŒūBŁ®.¦ŒĶ’ūß’’@ll,UÖż `’žżeś÷W·ŗuė’™™iu*⬬,:D`` ¾¾¾œ;wŽ;všč£‚———Łtø“'OĘĻĻ-[¶0fĢEaéŅ„Mpp°Ł”¾`8æcĒņóóqqqaĒŽ8::²pįB³é‚MėdŹŽ>LūöķéŅ„‹ŗ^†±Å£4“Z-Š¢X½ö¤¤$N:…££#^^^:tˆcĒŽ1pą@|}}ńõõ„]»vźžO>ł$½zõbėÖ­ķŪ·£ÕjY“h‘:ž§¼k,±Ė›V«µz-ēĪćŅ„KųųųX<Ÿø;É tźučļÓ‘BQ ą>œö¼C‡dee©ßŖ[³k×.ul€5Ɔ CQÖ¬YĆźÕ«qrrbĄ€UR×k×®ńĮ ŃhxņÉ'«¤L[EDDpåŹ,n’ńĒ‰ŠŠbżśõ€aÄēž{ŽüŃāžīīīŲŁŁ‘›› ZX¦OŸĪ믿nµžžžčõzµ{PQ‘į‹JKcrĄ°n‰©‡~˜.]ŗ°vķZz÷īMDDAAAxxxąä䄿æ?]ŗtaƌź½ƒƒįįį9r„‚Ė=3>śč#¢¢¢8rä{÷īå¹ēžS„[ŗ@½öņTöĖ‚›››b-™:u*QQQ¤„„Ł\®øóI ˆ Kīæ’ ŠūĒU}‡ mŸĮFÜŚ8ŗho}1¼šPPRŒ«żżµŁ„ Ų»w/żū÷gҤItģŲ|||øqćńńń¬X±‚M›6BŸ>}Ź-/22’f͚±bÅ āććéÓ§ÕŽ„%%%•¬ÓéČĢĢääɓ|śé§$%%1|ųpĀĆĆołšoųĻ>Ė_|Į“O>ÉŪoæMdd$®®®äęęņ믿2cĘ ģķķÕ)z#""ŠjµĢž=ڵk§®¼ĒģŁ³ŃėõtīÜY=G‡Ųŗu+’łĻ4h~~~xyyqķŚ56mŚÄ÷ßOhhØŚÕ©uėÖģŻ»—W_}•żė_Ō«W¢¢"āāāXøp!»wļ0 yyy“oߞ™3gāääDzz:éé餄„©kšĢœ9“Ó§O³nŻ:žž÷æ3iŅ$ś÷ļό3ĒÉɉ¬¬,vīÜÉüłóńńńįŃGUÆą_’śļ¼óaaaŌ«W‚‚Īž=Ė”)S̮ݚ֭[³{÷n^yå^zé%õćććYøp!;wī,sÖhµZžņ—æ°téRFŽÉŲ±ciÖ¬Z­–ŌŌTÖÆ_ÆĪWŗõIÜŻ$€ŲØą §ĖG‡“ʈ?ųhØoļXéćK ł]'ü„¹:vw@¹³žķ­ ĘU¬§OŸ^fĄ°©öķŪóÕW_įčXžó†”C‡2kÖ,ĄŠ"b«mŪ¶±mŪ6«ŪµZ-ćĒgīܹ6—YUz÷īĶĢ™3yõÕWÕ)wK×m޼yź~???/^Ģøqć2dˆÅ2»wļĪäɓÕßēϟOæ~żxżõ×-¶„Ō­[×lM‘©S§²iÓ&fĻžĶģŁ³Ńh4źŖćnnn¼šĀ ,^¼XˆžŻwßqģŲ1öķŪG—.],ÖIQŗvķŹęĶ›QFĆøq戍å³Ļ>+3ą Ż“>’üsµW÷īŻyńÅ™7o^™µFŒ†nSĖŲ”)Sųžūļ™3gŽŗ‰ń]]];v,‹-*3ŲŽš9sęĻņåĖY¾|y™ķ5ā’ūŸMe‰»‡Żiݲō%¬Ļ·ķ?nq’š³säon~ļ(Ä]ā~m}?~<£FRW 7ŽĢ¹»»ćėėKddd™)`ĮŠz2`Ą³AĮ`XŠĶ8¹tW©x€%K–˜į0¾f³³3~~~tīÜŁl·->üšCź×ÆoqŪ{g«««Õm„gښ6mĻ>ū,Ū¶mćüłóćęęF@@½{÷.30~ōčŃōļߟ­[·röģYumzõźŃ­[7"##Ķŗ…††ręĢvģŲĮ±cĒŌn@NNNt芁=z˜]`` §NbŪ¶m9r„ĀĀBœœœ _æ~ŲŁŁ©Ż¬ąõ9’““­¾_EEEdggcgg§Ī$eooϧŸ~ŹŌ©Sٹs'/^DÆ×ćééIÓ¦MéŪ·o™)…ē̙à /¼ĄöķŪ‰WgŁ ¢gĻž<šĄVė`* @½Ę_ż•ĀĀB äOśZ­–Ö­[«o 4`ɒ%V[ȼ¼¼Ų¶m1118p€ÄÄD|}} &::ZĘ~܃4€CŃĪ€+0 Ę©S§j±zwŽųÜ“;jō ½ŽOr­’ƒ%īOõķīZłr¤8›ķ¶Æb,ī=éźdy½†šā„u¦¹GÅ«~ q7ŗxń">ų ÅÅÅtķŚ•°°0ÜŻŻqtt¤°°””öģŁC||<£F²ø‚»5->>ŽtҀ߁+Ą ąpõęĻė7_˲€< (tŅb£ūuEޚTRPČŁåkŠzøņĢÓµ]Q ņ’Ʊ%śoŌiF’­ķźT©Œ3ēŁ1t,¢ŗÓqīŒŚ®Ī]C&’÷²&Mš°’~/^ĢŽ½{9r䈌*āä䄧§'!!!¼šĀ L˜0”–k+DՑb#½¬€^ķtyłŸ½·Fž@īWŠBQf6Å9ĻÄr'ś}éJ’w$bŚX|Ā[˜mSJōef£»¹ŖÆ°M‰üŪ+īq>ų ~ų”ŁkʱBÜ«d^I ˆ¢"™ēā¹ŗ÷0E¶Ļƒ/ŹW"mˆū„qƓ"„•¤/*&eĻ!nū­¶«rļ“ü!„÷é‚%Ŗ•./ŸĢ3ČK¾€ĘĪ׆~x‡7ĒĪ”r~Š®„ŒÓēČæžFI~{;ÜłćŒ£õuņS®“~ź%ł†9É}¼šnŒSėóą+%zŅ;Kī•dPģµøś×Ć+,¤ŅõU#óĢ~’t©1Ē)øž†¢/ĮŃÓļ°`‚žˆ¢ńS}Ąä[ĆŻ#ž…R¢§Ė¢79żį$nŁEnŅU=Üp jD£>Ż 9ƒ½Ły] ēæ\ĻåM?“{%…¢Ģl4 ZOw܃Ńų©>üžÉ×dæHČߞF—›Oģ;‹ČKLą×ĻÅĮŻ0“OćžQ„Žž³Ł9²Ī_ä·˹~čEYhŻŻšiJččaųu‹¬Ī·Q!„Øur'%Ŗ…¢+įäūŸpö³ÕčrĖöyw®ėCÄōq4ų'›Ź‹_³‰ŲY‹(L+;S“£—acŸ„嘿˜½^šĘ”—Ž&yēA(Ż…N£”ANDĪž†‹ŸłH…T IDAT ; ߒı7ę“ķFŁsy{>a-Fµ©Ž¢j$ļ8ĄŽ’›‚^§Ćµu EÆ+!?åÉ;’“}?W÷Ř īĪ<GQV»†’““gš ooū)ø~ƒŌ_OsœĢ3ēyč½WĶĪuxź;ÄÆŻ„ƒ>†āŽåęŲ”Ō#'øvšvZ-m^™€·Žä$$’›`˜6Rw3äę_KÅ.ĶlŠŅĶ»ceĒ%šóĄē@£Į+4MS Ł.‘¼ó)»”ėG3iŌ§{u¾B!D­’"ŖÅo,ēŌ¢’įąęB³aOāŲ'/Š2søqō$IŪ÷ńĖ‹oįTכ=Ė_yõś/G9ōņL\]h1rŽaĶqpu”(3›œ‹—‰_ū±3āŃ4FQ«ĒķūĒtRcŽćŪžA<Śēŗ>(%%ä_»AĀ·ŪHŽy€żc’MƵ©ĒÜ8r’ƒžƒ½‹Ķžü$Ž”ĮŲ»8Sœ“KĘ©ó$|·£oĢǵ”Ń=«ėķ&ō:1Óß ėG3˼ļYē/²ėo’$~ķ&B†¤Nė–ź6]n>śbļł×¬;~ā ;ž2‹ė·>i4īA (JĻäāśqö­Cļ Kq h`v®Ā“ ~zz yIWi:°ŽŽžx…6c@ģ½<“ųÕßÓķćwšėŚĮāõdœ>Oóæ¦ĶŒqŲi -wŠ^Ļéşsbīǜxo©!„÷4 ¢Ź•röÓÕhģķxä«…Ō‰+³OÜŖļ8˜Ō˜ć¦eØŻ±āמ€¢×óŠ{ÆŠ·G™sÕėŠšĆÓŽ!qėn 5$ķčoä%_„ÉÓŃßsϐ&„žßŸ9śĘIŁ}Š,€DL}Į,|ų<Ų’ 'zsį« ¤Ÿü] łWSQJōŌėQ&|8ÕńĘæ[GĪ±Žœ„$źxWn60tŒ˜ś‚>ĄŠ51ģćÜņ5dGѕ”é&īß~ū-`ÜøqŌvuŖÅÖ­[پ};Ļ?’<7®ķźŲ,--7Krr2z½FC`` Ż»w§_æ~8Xé¦Ė?üĄ… ČŹ2“ŒzxxФIžō§?Ń”ƒå/-¬Yŗt).\ +°{{[ļVljŃ¢E¤¤¤šę›oVź|BT„’gļ¼Ć›¬ŚžKҽ÷¤ʆR6ČF†²D"Ø {¼Š,õS”W¦€,Y "2eļ=K•Ż2:(ménéžéČ÷GČCCŅR„ļł]——é™÷“’sŸs”€ž;iĮ!fećŲŌOÆņąŻėm.}=—ŒŪįOϦvU|>č‰skż¶ń–UŌeóe†×ųœ84Ŗ«£|˜™R’›ńäĘ%iEɍOT÷k\O§€[Ē–ŌK-mX/žģč8ljW+³„z ä<ōĮ(cÓśzū˜¹©•’¢ÜG FlÕI÷rbŹNņ™u/ZŻÖڲĢ6åa[» cr™³J.ä?H£0;£gPn’Ž=ŹĻ?’LŸ>}žŃ ȕ+Wøté]»vÕy޳gĻ2gĪzōčńQ@¶lŁĀ°aĆČŹŹŅ[?ž|üüü8pąnn~#ŠŠŠ6lk×®•Źär9r¹\ŹFžķ·ßҧOÖÆ_±±ī÷Ćć¬\¹’‘#GJ5ŖĀ ČüAPPŠ U@vķŚEJJ Ÿ~śé ›CšĻF( ‚ēNvT ęīe¶‘Ņ~ĆbJŠŠŸ8ž>‹ĀĢlŠ )ŹĪ%zĻQ@™Hƒ©‹#ń'/ąŃ½#65|tN”½zvÖWÓļī;Ø:ø·Ž£ŗ‰£=µF}ųD™Ļe†ś¤0zļq\ÕuJ™–@q^V¹Üаģų”{©³ŽMżH¼ĪŁįSqm÷†¤h(3²HšæHbĄ%¬«WĘĀ«ģõ]å).’²,Ā~ žģŪ·iÓ¦qųšį“"Ī AƒÉd’²ąć惙™\»v9sępšąA†ξ}ū¤¾‹/fķŚµųłł1gĪź×Ə££#r¹œŌŌTΟ?ό3Ų¶m5kÖ|¢bpšąAʎK:u011įņåĖ/śńŸšY³fqķŚ5”€ŹD( ‚ēNa¶śDŁÄ¾üÓĒf *4žŖ¤„Šßž$jēa2B#“²°ņń¢R—vÄ<őn#70ĄŌŁS7gĢŻœ1swĮ¾AÜ:“Ōŗ!©žńūÜß{œą…« ^øCK Ģܜ0ssĘĢÕ K/ÜŽleeĻ É.ųūf©“ęĘÄ£LÓ B ĮĀÓ C sķ§ „śŪVRÆßƾAāOœ#öȝ6v~µi¶ą›§XK&ß_ ų§±aĆ ™={6S¦LŃŖ³¶¶¦mŪ¶4oŽOOO8@nn.ffźHx[·n`ĒŽT©RE«ÆŻŗu£iÓ¦8;;³uėÖrėׯӯ_?Ų·oC‡}ĪO*¼„"xīØJŌ§· S“ē2ŽÕé‹[»C+ \Z5ĮŌÅCK drFÖV˜{ŗsnō×:żZ,ł/1Gΐtī29±ńäĘ&~+Œ”æ®KmģÖ„żĘ%’IŒu*¼}t‘;’zœøDrcHšDõš¶ęʬe4ž9™Źļw.Ļ'(¹‘õ¾Må>Ż^ÜD*ĮóWa]³*wžBaV6Y÷)ĢŹĄĄÜ SGąe‘Ķڵk9}ś4IIIØT*ģģģhÖ¬}ō‘–Ł@qq1Ū·oēȑ#„‡‡“——‡ 5kÖ¤_æ~“hŃBgŽ«WƲuėV®^½JJJ –––ø¹¹Ń©S' €ŃƏe”T*7n 6ĮX“hŪ·oąć?ę7“żž:Ć ˆˆˆĄŠŠ5jšÉ'ŸŠ¼ysń/]ŗÄŗu눈ˆ %%333\\\h×®ƒĘÄäŃļĪ?ü@^^ß|ó «WÆęčŃ£ÄĒĒćīīNķŚµ9rd…ofnŻŗ@›6eˆ066¦N:œMrr2*• {{{i-»ŗjūą³mŪ6Ž9ĀŻ»w„µ\«V-ś÷ļÆw­^o„"xī˜Ŗ7󅙶ķd5d†Ż£8æ ÜÜ…YŁ„Æß‘o\§wó§ńŪx™®ķńčŚ^{ĢĢl2B#øņżB\ &j÷Ŗōė!՛¹:Q{ĢGZ}TÅ%äĘ'źB„RQ«V-¬¬¬HOOēŚµklŚ“‰5kÖąļļįĆŪ·o'&&†sēĪįļļOÕŖU144äȑ#ģܹ“+VX®b aõźÕ¬X±+«ņ}³bbbP(8::Je>>>ܽ{—ššpŖV­Ŗ·_BB< Q£Fzė³²²čÖ­qqqlŪ¶&Mž^¾ ¢¢"Z¶lIHH^^^888ĢįƇłłēŸ9yņ$ 4ĄĒLJmŪ¶±eĖ>žųcLMMµĘY»v-«V­¢e˖ܽ{Wē³/ż÷Ģ™3177'**Š6mŚ-­e###._¾Ģ®]»˜5kGŽ”Y³f€z-÷ģŁ“żū÷ė]Ė‹/fٲeZ>1‚×±{2…óJ®Tż°ÖÕ« LĻ$/1¹Üē<l}Ձ Ī–Ł&īx7ę,ćĮ• æ5Wƒ’Ŗø„ŪĖ’ pņLF|ɉ~c8üö`ö¾ńŪėt`Oóž\üāæä'ėꉑ?ō3*Ī/Š©ž_|ń‘‘‘üōÓOäęęr÷ī]nŻŗEvv67n$''‡1cĘHķOŸ>Ķž={ųųćINN&88˜Ė—/s’ž}®\¹‚µµ5ß’½Ö'NÄĆƃššpĀĆùtéwīÜ!!!®]»ręĢNœ8Q®œfffØT*T*•4žįƇ„²>Ņ>Ü9sę gĻž%&&†Ė—/“œœĢ–-[ÉdL™2ÕC(•Jŗ_~‰„„%7oŽ$88˜sēĪqåŹ’’’?~</^äŌ©SZ槤¤PXXHTTwīÜ!((ˆšŸ’ü‡šÓO?Učż·°°ĄÖÖ…Btŗ¼¼<ęĢ™CXXżū÷×RTʏL&£_æ~œ={–ĀĀGfÄ%%%Š»woŠ‹‹łĻž£3vQQżśõćśõėĢ;—÷Ž{ÆB2—‡R©ÄĄĄ€ččhĀĆùpį111¬_æžĢĢL>’üsLLLūLėB&“1`ĄŽzė-®^½Jr²z½©•ń‘#GźœZׯ_Ÿ±cĒRæ~}ņņŌ‰bSRRˆ§gĻž:7666|ńÅtģŲQŠŚō¼?~<-[¶Ō*{’ż÷iŪ¶-QQQ¤„„““ƒ““~ų!5kj‡Ś600 OõŅ½{÷tęX“hīī‚F3cĘ ŒŒŒ~&¹ĆĀĀšńńĮĒLJʕ+cccƗ_~ɧŸ~ʲeĖ“Śvė֍ 6FėÖ­±““ÄŻŻwwwĢĶĶiÕŖW®\aÕŖU|šĮ:s;–ƒ2jŌ(¾ųā‹g’W³gĻÖ1u8p ;vÄßß_zļ‡ĄśõėµŚ^¾|™ČČHŽ{ļ=,,,*4g^^ ]»vŒ?^g-4ˆ:š×_‘šŖ>ÄŌ¬åQ£Fé¬å 0fĢźÖ­‹R©|Ч¼j„ –ą¹clgƒĒŪķ‰ŽwŒ“Œ£ęˆXxŗadkCQn.i7īpgåP©š~ļ­rDzØģ‘µ%®skÉZ<{vĘŲΚā%yńIDķ>BŲojæ¢ÜG×›Ō™ŒŪ+ž@f Ą±‰Ęö6ZZPš ”K×¹µōw\Z=ŗŹvhźGVä}Ī|2‘źCśaé] c;JŠ‹ÉM$|żrb°­[ć™Ć° žžę §į?t‘;¹ćN½Ģ@A½©£±­[ć™ē(ŹĶ#lķV<{v*׿§īēŸrØÓ@’.\”¤ØHĖ|Š«ggBVo&łāUN¼Æ¶—¶­SĪū×>³\ABBłłłųłł•٦Zµj†VŌ›2Sg­rs7Ž:ų‰ńąźMņ“))*ĘČŚsw\Ū·Š ‹[kō ŠņņĖœĖłFȦŒĘĪW}šZ˜•ƒŖ¤eZf¹2ŖŠ‹))Ō‰ĶĀ»]oāžĮSäĘÄSž‰…‡Ś1ŲŌŁzSFcUµģœUõƽsŪēĄAšļ@s½}ūvi£ż8qqź|9¹óŚōģŁooo&OžĢ“iÓØ\¹2ø»»ćååEćʍyūķ·‘?ŒhffʰaĆX¶lxxxąįၧ§§ä“Ż£GɌęyQ–O…\Ož¦ČČHęĢ™C@@)))äēē“‘‘AIII™ćkœžõ!ūé¼¼¼8zōØVŁīŻ»éŪ·/żśõćŅ„KŅFyȐ!\øpłóē3räH):–†üü|Ö®]˘1cčßæ?/^Ōѳ¦NŠŸŸ[¶l)×÷ęi‘Éd:J¦M>‘ŅŹŁšįĆ9sę [¶l‘Ģ£¶oߎ››:TüęYs«±uėVĪž=«·Mll,šh-æ÷Ž{|’ż÷L˜0ÆæžZZĖ•*U’Öņ[o½„wĶ^_„"x!ŪŁŠaŪ ’.\%łÆėä%$Q”›‘µ%Ęö¶85«Æ†×ĄĢ”zSFch©żåģõŽ[ŲÕÆMģįÓdGĒQ”›§ŽHädsĖĘ84®‡…g%”YŁźü Tj|:Ļī‰;qŽĢ° ³sQ£05ÅĀÓ ·7[`U­²Ö\Ęv6tÜõ+I®ņąj0¹± fēb`nŠ”¹9võjāÖ”ęŚ×Ą‚ēƒ”…y™yVd 9.mšįŅF’‰éćTŌ«Üzū†u±oXWśŪŌÉėź•‰?užļĘ±‰&Nös‰P”“G^B2q'Ļ‘‡kū7ōO0q“§ŚąŽŗåvOĢ!ćŻėķ =›ą ĶFĢÖÖ¶L‡iM¹fCommĶÕ«Wٰa7nÜąžżūDGGsīÜ9)‘^ēĪ9xš “q[ŗt)oæż6§N"22’˜˜)¢ØCĘč˜@½ 222hٲ% t芁N:ahhˆ­­-XYYI¦BĻ›āābNž<‰™™™ŽČazöģI—.]Ų³g—/_¦iÓ¦$''säČš4iĀ„ ōö311aäȑ8p€½{÷JĪźcƌA„RńĪ;ļ°iÓ&½}5›õ7boo““ļ¾ūīŸI”P”¹a×8ń—6·ėŻ»7’łĻųć?7n7nÜ ,,ŒI“&•飏§YĖ–––RŪk×®±aĆ‚‚‚ø’>QQQH7^]ŗtaß¾}B ł!Į‹C&Ć鍆8½Ń°BĶ&ĘenŠ,+{PsdŁ›·*ŽŃ[nźāˆĻ=+4æ™\Žs‹F8·ŠDš/E&£õoó¹>ėg.é `jEŁ»wWź=Vo½@š¼Ńœ˜÷čуٳgWøŸ–cŗ†ųųxƌĆĪ;9qā;vŌ§ā=zō GZķóņņŲ°aƆ cīܹ¬Y³ęo<ͳ±uėVāāā˜3g“'OÖ©x”ówīÜooo"""Źm§1ŸŅÜH…††¢R©*¤“U«V €ŖV­Jaa!*•ŖBĖæśź+@mŅV¤ØØˆ““4ģģģtź4 ŖƒĆ£›h3śO?żÄ;wžÉü ­åž={2cƌ ÷³µµÕŠŲ¦!..ŽŃ£G³{÷nNŸ>Mūöķõō¼ŽD bīīB‹„’•ŠœŲ”i’o‘…9F֖˜¹:‹šĖ‚—ŠĘBs”ü‘-[¶šŪoæįėėĖgŸ}ĘŽ½{¹~żŗŽƒ°««+|š;wī$44”Ž;rāÄ † Ę?üĄ€“Ś›šš2tčPƌCXXŲSĖÆ‰dõwˆŒŒ mŪ¶z럤ü ÄĒĒ“““S®Y—FNŸ„Ęœ)&&ę‰óhśjśüöŪoZ³ō1}śt‚ƒƒłłēŸqttŌ«P”ÅŻ»wõ¶×¼—...ZåƇgįĀ…¬_枝;wRæ~}|}}Ė_ßē^‘µķŽˆˆ`Ļž=ōļß_Ē?āʍ(•Jic]4&4ŃŃŃŲ2Šųž\¾|YĒq½  @ŗ•yŹŽ>ŗuėĘņåĖ1b?’ü³ä]š={öpąĄģķķiŠ@mb\³fMÜŻŻ9sę Ū¶m£WÆ^:fB*•Š}ūö±’~lmmiŲPm5P‘›Œ+VHņi>ūŠ2oŽ<6mڤ%Oxx8»vķ¢zõźZ‘Ć4ĻҦM–-[FZZóēĻ/sl ‰×Š“åč舯Æ/;vģ`źŌ©TÆ^]«_NNæżö111xzzźŪĶZīŽ]7@Čćk`Ū¶mØT*ŗtéRį]‚—‹P@@ xĶ™9s&Ż»wĒĻĻĪ;SµjU HII‘"Mœ8QņłšĆYøp!}śō”]»vT®\;;;rss¹vķžžžxyyŃ„K|}}iÖ¬›7o&((ˆ† āččˆL&#&&†½{÷"—˵2[? M¤£ńćĒsšąAiÕŖÕS›ķ€Śd端¾bĀ„ HJX\\»wļ–6Ńå óĢ|ūķ·>|˜ 6°sēN7nŒ««+FFFdggsåŹ¢¢¢Ėå,Z“H:©W(¬\¹’>}śŠ·o_*UŖD½zõ°··G&“‘’’ĀķŪ·¹wļ,[¶Lē”’E`jjʁhŲ°!͚5ĆÖ֖„„vīÜINNÓ§O×Ūoųšį 8…B”sSV???Nœ8AÓ¦Mi×®fffŒ=???fΜɻļ¾+­ei-9r„ŲŲX¦L™")ƒ bńāÅōźÕ‹vķŚįķķ-­å«WÆröģY*W®Ģ[o=ŠŖŁÆ_?JJJ •LŪÆBą5ĀŌŌTr®ÖšöŪosņäIęĪK@@{÷ī•Śśųų0aĀ­$vuźŌĮßߟY³fįļļϱcǤ:OOO† Ā“iÓ$›|™LĘ”C‡˜1c{öģaćʍ«“ÄZXXŠŗukʍGēĪ+üo¾ł&óęĶcåŹ•ģßæ„R‰J„bŠ A˜˜˜čÜĪL"§čõIr“^RÄÆ9eŪP ž7qR1ŲĢłÉ #³¤˜;E9/@"Į?3ģåÆöœŹXn€ÆĖ“ž”T*Q*•6/)**"++ ++« G-ŹČČĄČČč¹Č§„„accó·ĀßjČĪĪĘČČ##£ē ٳ”T*ÉÉÉy¦g*(( ¤¤ä„ÜvT„ŒŒ ½fe žÜ ),,düųńģŲ±ƒH·gO¢°°üü|É$ļq”J%………åśÖ”¦"kłĻ?’dŠ A$&&–«„ ž{÷ī•ŽbÄ€$ ńį’“–„™@.EāäŠŅ]Wņ IDAT©L»Ā˜bUŁńĻ’{øÉĖĪ*_VrM*v(^=O»ł600(3ļCY”µ!}Vžvžņxģś’ŽdlülßÕ/Šņ>ė%K–0mŚ4éļ¾}ūVXłuX_Mh_}¼ˆµ¼aƶmŪ&”×”€üC1–É`Vqg@@ ‚§„k×®Čd2Š‹‹ńóóćwō‡½Ų½{÷«Aš„"@ ŠKćʍiÜøń«Cš/C³@ / ”€@ ‚—†P@@ ĮKC( @ ą„!@ @šŅ ˆ@ Æ•+W.äKš©Q£2™ ™LFhhč«ē…Ѽysé9/^¼ųŖÅy! >>ZĻ]Q233¹wļ™™™ —˱±±”råŹŲŚŚźķ“ŸŸOXXééé`jjŠ8::–9WTT‰‰‰dff"—Ė„Ó~WWW ŸZö§”°°°°0’’’(**ĄŃё5j`bb¢Õ6>>ž¼¼<¼¼¼Ė儅…B”ĄŃŃooo,,,ōĪ„T* %33“ÜÜ\ NNNT­Z•ėׯ3oŽ<"""øpįŃŃрś³Š’’BDDr¹ooo½sEGGK^^...x{{cfföģo”ą…!Eyd«Š_µą_„½Üw…ń«ćšĶ›73~üx’““„2sss¾ūī;&NœØÕöųńćŒ1‚»wļj•Ėd2Ś·oϚ5kšņņ¢°°___¬¬¬ˆE.×¶ÄNIIĮĒLJźÕ«sóęM@­,Œ=šƒR\¬ż[Sæ~}–,YB«V­*ōLׯ_ē“O>įźÕ«:u 6dõźÕŌÆ_æBc­ZµŠļ撞øø8½õõźÕcΜ9¼żöŪO+!!įƇ³’~JJJtźår9Żŗuć×_ÅÉÉ Po¬'NœČźÕ«„õćŌØQƒ еkW©ģšįÌ?¾LsssĢĀ… 122z¢ģOCNN_|ńėÖ­“”ŠŅņžūļ³`Įé9Čɓ'Ų°aß~ū­Ī:311aĀ„ üšĆZJė÷ßĻüłóÉŹŹŅ+„„%*•ŠģģlI>v’÷’Ē’żß’`kkKjjŖV}`` Ó¦M“Öli¹>’üsf̘”%—ąÕ#ņSÉWé~a Į³āŖ0b ™ó«ć–ųųx† ʧŸ~JóęĶQ(\»v„K—2iŅ$ŖWÆĪ;ļ¼@bb"ļ¾ū.3gΤ~żś’ššJ@@K—.å“O>įĉXXXšĪ;ļ°yófhŻŗµÖ¼»vķ¢ØØˆžżūźMvēĪ ”’ž4oŽWWWŅÓÓ bÕŖUtéŅ…   2O„5(•JŗwļNBBS§N„U«V“‘‘ĮÕ«WY°`½zõ"<<\G1zœ;v0bĈrŪÜøqƒž={rćĘ jŌØQnŪO?ż”żū÷—Y_RRĀŽ½{3f [·n`ƌ,Y²¤ÜqCBBčÓ§÷ļßĒŽŽž˜˜Ž{ļ=½› 999,_¾OOO¦NZīųOĖŠ”CٲeK™õ………lŲ°ČČHüżżu6ķƒÖQBA} 4sęLZ“hA·nŻ8tčß}÷]¹ņh{{{ŗvķśĢJĀܹsõ–ēēē3kÖ,üüüčׯß3-x1ä_€ Õ«A Ļ‘üü|Ö¬YĆ'Ÿ|"•õéӇf͚ńĪ;ļšēŸJ Č”C‡ČĪĪfīܹLš4Ikœ÷ߟ˜˜öķŪ‡J„B&“1`Ą6oŽĢöķŪuM4”°sēNīܹĆ×_Ķ?ü #§ÆÆ/ƇgŻŗu|ūķ·å>Ӆ ˆ‰‰aōčŃ̚5K«®wļŽ0oޚ4iĀäɓ±±± 55•]»v±iÓ&._¾\ī{𓤤¤HŹ“L&£’ž4hŠkkkrrrøsēkÖ¬”ØØˆ€€‚‚‚ØWƞÖ*•Šž={RÆ^=ĢĶ͉ŒŒdżśõŅ Ęŋ%$ @ź÷ż÷ß3tčPÉJ©TrōčQ @ėÖ­Y·n >nß¾-Õ×ŖU @ÆI•\.§wļŽ4jŌ ¢¢¢X½zµtSrņäI”€¼fD ‚× ccc>üšCņ.]ŗ —ˉ•ŹŽxć žüóOZ¶l©w,kkk”J%iiiŲŁŁńöŪocggĒŽ;ų駟¤SēōōtNœ8AÓ¦M©Zµ* Vą‘Bņ8=zōąŚµkO|&žüóĻ2M¬¬¬¬HJJz¢"½Ž½{7uėÖÕŖÆV­£G 22²Ü± łā‹/pwwgäȑZõMš4aéŅ„œ={–‚‚ŅŅҰ··'##Pū3|łå—:>ĪĪΜ?PŸšRP+]}śōŃźóę›oāéé  ×éļpūömɼ쭷Žbćʍ:m233ټy3 žLW@fĻž­£ĢÕØQƒĻ?’@ņßµ²¢”aƆ:>>„׫FQ066fåŹ•Œ9RR@Xī×šįĆY¾|¹VYŻŗułč£€'ÆĮĖG( Į3ź &¼¼Ķš5ć½÷Ž+·¾[…Š%)ćĒ§G„‡‡K&hXZZR„JZ·n]”õ#ųw!ą°ó«…_­W-†@ pņäI\]]™3gŽŽSßŅ~är9żū÷g޼y\½z•ņóóu|=4¾ RXÖŅØT*Ž?޵µõóxœ………4hŠ€›7o’››KLL •+?Ÿƒ  ØĶÖōŻ®ģŽ½[ņ[)ķĆń“DGGKž&{öģ!??_21Óä;±³³ĆŽŽ¾B71Ėü³ ˆ@ A„āöŠ €ś ē~<·—Æ—šTų.†Vä%¦¹ćę•\šģńčš?ä×MȍŒØ6ø7i7C‰=źO~R †–8µh„k›f “Qœ—Ļż'H½q‡¢¼|ĢŻœqėŌŪ:ÕõŠ–—ō€„SēÉ ¤0;…±F¶686õƱi}dzBVŖŠŠ‰?}”ĖA(Óž:™›aåć…k»70uy” +ćĪ]āNŖtRƒīāy‰)˜¹:āõī[Zć§\"9šłÉ©ēē#72ĀÜŻ§7b[WŪ&;ón±GüqhXūF¾Ä:MŹ•`Š ”˜»;ćŃ­^źĶKvd ÷ž$ėŽ} LM°Ŗęg·ŁZ?z¶’ī¬Üˆ‰½ •ūv#år‰—(x ¶ 7uuĀ­} ¬k>_'NąuD©T"“ÉōnäJJJøt钮~ `޼ylŪ¶ŠŠPŒŒŒčŻ»·VņłóēéŁ³§ĪtźŌ‰^½zI“žENPērØ(µjՒ¢, 6Œ#Fąąą€L ‘ Hm5NŻe”P(¤×ELsŪ“““Ćž={8vģ˜Næ­[·’˜˜ˆ‰‰ ļ¾ū.Mš4‘n+rrr ’ŚjĀ ß¾}[ŠąellŒ···ä¢R© ‘ĢŽJ÷{”ö‰8xš ›6m¢nŻŗ˜››SPPĄ½{÷˜0a‚dšUŃÜ.śšõõ•Lź"##µ¢–=Ž””!C† aٲeZĻ[śęgÓ¦Mx{{ćääDVVmŚ“yfŁÆB¢*QqcĪ2­²¬ČūZeŻŽÄŠŹ‚Ü8µ‰–s‹FZ HŠü_P˜“yŸŠß¶B©¤;+7ąŃµ=~_ŽįŌ ĻȎŒŃš+xŃźMA­ŃƒµŹC×üɍ¹Ė)Ī/Š+·mŻ“śef®N'óS8óŃŅļ„ėķ#74ÄļĖ1T¢¶õN ŗ£óģŃū޽Oż£ėŠÄOR@J”…ŒžšøcgõŽ ąŁ½#Ķ}‡L”ž1Éøs—s–įѽ—§- ćŽv«›‹ÖŠlž7åēs髹”(µĶ*nž“š¶aSó”£āĆĻŹ²²' g’"zĻQnĢ]AĶįą÷„īi¦@šoĀ×ח]»v1ž|† †••„††2{ölÉüźqG܆ R³fM¶lŁBBB]ŗtŃÉöŻ·o_¾žśkFŽIff&o¾ł&¶¶¶äååŹ×_  £ø”%ē±cĒųę›o˜:u*ŽŽŽɲeˤPøśæėJÓ§OIٵk»vķ*³m÷īŻŸ(—†%K–°téRlll(**Ņ›@O术¬Y3ét_ŃÉŠŠ’’ū¦M›J}JĻ„É#bbb¢ółø»»K™ę.\Ȓ%KčÕ«?žųc¹ĻS>>>4hŠ€«WƒœœĢ|Pf[++«æµÉ·¶¶¦E‹ģܹWWWśõėGff&iiiŅ)))ÄÅÅQXXČŹ•+錵«ZŌį•5œ={V ļ Ow[ö8 009sęčD!¼<„"XwwwÖÆ_ĻĒĢąĮƒuź† Rf˜ŽŅLš4‰Ż»w³`Į,X %§©©)cĒŽeéŅ„Z™ßĖbģŲ±J93ō!—Ė™0ao¾łf¹cuźŌ‰·ß~[2R©TZQ¶ŒŒŒhŚ“)gĻŖ]ŅŅŅšņņbęĢ™\ŗtI+B–>Ÿ”–-[2~üx@fwšąĮ¬[·N«Ķ欇……+W®”ngŅŅ҈ˆˆØŠ{SėÖ­£G冄µ°°`ķŚµZ&[OĖŋٹs'Ÿžy™¾=ėÖ­“Båk) }śōa޼yefŗVāā∈ˆ(3;»ąå @ƒL†G7õUźõ[˜8ŚIeOCӿƽӣ_Ö5ŖP\ äņ7ó()*¢ķļ 0q“—źķźÕ$żV±Gżyp%XR@Bū€ę §i‡§v~µqėŠ’żķŽ'éĀrīĒaīį*ń§ĪcįéĘ‹æ×2ϲšrǾa]rā¹÷ē>RÆßĀĀĖóJ®ŅœÉ×ą4ŲłÕÖūģq'ĪP’ėq’‚j%ÅĀ»ęfœś`iĮ!: ˆ™«3ķžX„¹©Tfß°.®Ż$õśm*uiGć™ģ’­ŖUʦv5v7ķAņ„zßė:ć‡Pgü'ZeÖ5Ŗ`lkĶÅ/~ąŽ–½Bü£˜9sf¹õ?’ü3ŽŽL(}}} 抔C”T*155ÅŪŪ›īŻ»“••EÓ¦M±¶¶ÖkŲ°aøøøhmžJóŽ{ļŃ”C>,ł&˜˜˜ąģģL›6m“nŹĆÕՕąą`Ž;Ę„K—ČĖĖĆŲؘJ•*Ń„KLMMńõõ­Pž 6nÜČ·ß~‹ææ?÷ļßG©TR\\Œ$Ūćį]§OŸ.łÄhĀó* öķŪĒ‘#Gøté999a``€‹‹ Ż»w'''GņŃÜÕ©S‡»wļrāÄ ĀĀĀČŹŹ"++ •J…B”ĄŁŁ™† ŅŖU+É“H&“ńūļæ3yņd.\ø@JJ ¢P(033£ZµjtīÜYņæuŪĄĄ@-s±ņ˜:u*IIIZ>$uėÖåĪ;œ9s†ŠŠPŅÓÓÉČČĄĄĄ;;;<==éŲ±£d0aĀI9՗ķ¾AƒRīM˜įŅ ÜźÕ«ÉĶĶÅÕÕ™L† ™™™äääh%s40ŠŽ’zxxĀĮƒ¹{÷®$«µµ5FFF|ņÉ'’™X鐿¼½½%¹\]]„ņ‰'£3Ÿąå"Ž}ą9#SČqi„ūehS[żÅlUµ²–ņ”ĮŖŖ7±Gż)Ģ~ĪņĮ՛(LMpė ?Į˜ĀŌ§7µė0é·Ć1÷p£8æ€ā%&ĪŽz}CjżÆw:aéć„·¾üüütŹLLL茵k…ē×P§NźŌ©SįöĮĮĮźM؏ņĀ&Ó©S':uźTf›Ņ<ɄĶŪŪ[ēskŚ“)666¤§§Āwß}WīFFFzē±°°(s͵oߞöķŪ—9fYėžĄ(•Ź'ތ ^,Bž3 cc¦ŗį*åźŒmuO!Õõ’9>ōQ— Ģȼ’+91 eĻg¢_ØĢT_'+LM°š®ÄƒĖAܘ»§7bę挹›³$—…§žneŽY.­Õ¶Ģ©é¤ß §(;—¢¼|J”…ffs’Ą IžĒ1²Ń„ÆyoŹŖ—)ŌļĶćQY&ʘ:;č낁™)†V–(ӟŻVX ^ڶmĖķŪ·õF"{±··ēüłó,]ŗ”ĄĄ@ĀĆĆÉŹŹ¢ØØx†×ŽŽžf͚1nÜ8j×®żRd;v,óęĶÓ‰Mšņ ˆ@šš¢ĢČ•ŠœūqģoódG¹ā¼GŽ›˜DĄčƹ½l·—=²56²±ĀĢĶ›ZU©6ø7v~O’…ŸŸHąÄ$ž»¬ådÆĮŠāå}©?i.#kK”iåäé½y‚Ļ+ļˤf͚,]ŗT«L„RQ\\üJ͟žęęIšā ˆ@ššRRōŠ9ÓɞjŸč7(Mi“(ēVMxēün’Ī_&;:ŽÜŲrćɍO"+2†ō[aDķ|śžę¦øuŌĒ]„"dõf®ż°„šu۟Jɉ żVvõjŅvż"½>&é·ĀžZÖg„ -ƒ’ĀBɄėqŠróQ‰Ū@ ^#ž_†@š\1“0ĒŲΆüäŌrOśo/’ƒ#=†{Ō€¤óWŲé÷מ»X™ŒJ]ŌŽ{¹q‰e  ēö@ÓŽ¶n2Ü5É _ *Y÷bōV)3²ČOIÅÄĮNo½@ ‚WƒP@=˜©OĢó’^āfZN-Q˜•Mä¶zėUEÅDķ>BZŠLÕa9MPfd‘tńŖ^Gp€ŒŪź…ś¢qin^ņ’čŌY[Ŗū‡D藧¤„šõ갊;Œæ(B~Ń&ģ·?A„Ā”©nä@ Æa‚%čĮĢ͹‘!!œ6‡Ęõ0““Ą”‘/Ö5Ŗ>>z#³fĶ⯿ž AƒB^ B@šTĢž=›)S¦ąįįńŠ„’4„"žqČrŗŁ†ÜPńŖEž;S¦LĮĄĄ€3fč­3f ^^^Lž%K–HFF^^^Œ=š7ŽxƒćĒ³fĶBCC133£yóęL˜0ggm³æS§N±oß>nŻŗENNXZZāääDÓ¦Młä“O°²²ŅźČęĶ› ”  €ģģlģģģ°³³ĆÅŅ=zжm[BCC™?>‘‘‘ҳfĶ’n@jÕŖÅgŸ}@ZZėÖ­#00ŌŌT233Q(ćźźJ»vķųšĆ122ąŹ•+¬\¹€N:įįįĮÆæžJXX&&&4jŌˆÉ“'£P(X¹r%‡"--J•*Ń«W/,É4eŹŅÓÓQ(̘1ƒ+VpįĀRSS144ÄĆƃwŽy‡^½z!Óų>‚‚Ö­[Ē©S§HHH //j֬ɀhŅäŃ­}HH , ’žøøø°|łrnÜøL&£råŹtģŲ‘čĢ}ļŽ=V®\ÉÕ«WÉŹŹĀÖ֖¶mŪ2jŌØ É(ųw"|@*ˆš’KWG„J•022""Bøk7n,)EEEtģŲ‘Ó§Ocii‰§§'†††$%%‡B”`Żŗu|šĮåĪ;fĢ–-[Vn›U«V1lŲ0† ĘÆæž Ą/æü"9;::’’’‚\.§zõźÜ¹sG«æ±±1C‡Õ;OŻŗu¹vķ …ś`aŌØQ¬X±¢\y\]]9qā5kÖ`éŅ„Œ?ž‰aĄ§OŸĪ7ß|ĆéÓ§i×®]¹m;vģČŃ£GIJJ¢I“&DGG—Ū¾]»v=z¶mŪFß¾}ØQ£įįįkµoŻŗ5yyy\ŗtIg¬… ņŸ’üwwwāāāµiÜŻ»wõĪ’į‡ņĒ”+#ؕÖöķŪ€­­-UŖTA”P™™Ihh(æ’ž;~ØN„{āÄ :tč@=8vģ&&&xxx™™))oŸ~ś)æüņ‹4ǹsēčŌ©¹¹¹xxxąāāBJJ ŃŃŃŌÆ_ŸĖ—/  ĻĆD䁹ĢīŻ»9}ś4Ÿ}öÉÉÉsõźUbcc9sę †††ü÷æ’}©2•””č( >q/KÉ ęĢ™3€zćśøņamm–––RY||<“&M@©TņĶ7ßHʇ››5¢eĖ–4jŌHė¦dįĀ…OżLĖ—/—”SSSš7oNĒŽéŲ±#-[¶ÄÄDCéŌ©S?~\§HHˆŽņąļļÆWłŹ|Æ4ʇ­­-¶¶¶ČK%†]æ~=O|ž;wĄĄINNęŅ„K\¼x‘Ū·os÷ī]™;w®Næ}ūö1wī\’““¹~ż:÷īŻćÖ­[xzz²zõjīŻ»'µ3f lß¾ččh‰ˆˆ ""‚œœŖ]šś"L°žT70#³D÷KM žwćW-‚ ‚hĀįŽ;ccķĻ­uėÖ 6¬ĢÓņŅ|’ż÷|ńÅDGGÓ¾}{<==9yņä’³wßįQTėĒæ›dÓ˦H…”#UjhŠ @éQ±‚€ņ³\øv°\D@ŠPŠ ‚éMŖ”·R!…ōŗŁdÄŻ›ewCQŽĻóų`Μ™93»yēœó}šLĢ~ńÅ™1c–––L›6„K—=8?žų#Żŗu#>>ž>}śčŪ§{Ą’å—_ōĒ2d‹/ĘÅÅØHßŗ}ūvśöķKyy9;w“”ääd²³³hÖ¬ĒŽĆŹź9ÅÅÅ“œœLff&………<ōŠCśs?žųćœ:u Øx8ˆˆ*‚ ųß}ųī»ļčׯŸĮõ._¾œ±cĒpöģYz÷īm°ŻŁŁ™õė×Ó”C._¾Læ~żō=Ż»wgłņåx{{³bÅ }’¹Ž–Ń£G³`Į}ŪŅÓÓéŪ·/Ē×ßæŽ;š’p€ĢĢLZµjŤI“ō½N:õė×ו»UēĪ™]?7dŌØQś¤uėÖōźÕ €ąą`ŗwļ®4 iiiśćōčу›7oróęM}Ypp0žžž¤¦¦RXXH^^žža %%…E‹įėė‹»»»žæųųx£‡mŻõUŽ|}}®{łņå,^¼˜’’ŠŠŠ8}ś4999ää䐛›ĖO?ż¤Æ›——gt?zōčAĻž=Š©K—.|ūķ·Œ7N?™̘1L˜0­V«æ·zå•W ®×Óӓ±cĒźääd“ūUöģ³Ļņģ³ĻšÜ–‘‘ĮłóēÉĻĻ7ŚÖ¾}{“ūųśVdqŌ}v‰‰‰fēUž_"<€!„cO>ł$ļæ’>O?ż4/¼šõė×' ___x蔇čŃ£Ē=o—nH`0DČĮĮĮ ^å^ Źšę’+S«ÕųųųŠŗukŽ;Fzz:“&M2Ŗ§T*iҤ o½õ=öXµ®C'++‹qćʱk×.“C©n§ņż !{{{“åęųłł•Õ­[W’’¦ SÖ­[Ē’%Kˆ%++ µZm°Æ©Éģ·~~·ÖÕ°ŗ5UnM ćīī^­6Š& @„Bˆæ±ŗuėrśōiV­Zř3gHLL$66–;wRTTT)ŗ·ķ………5ŖÆVW$‰Ł°aćĒgß¾}śkƬ““”“'O2dČΟ?_£Žgžy¦ŹÉŅÄĒĒרݵ„˲e®Lw?Ŗ²hŃ"žyęźŌ©CĻž=©[·.ÖÖÖ888ąééÉ÷ßĻęĶ›kŻF]¦Tš^ÖTą)ņé !„jµšŅŅR£r///^zé%£ņk×®ńōÓO³zõj^{ķµj„ć½Tī-Ų¼y³Ń| €œœŹĖˁŠ źÅÅŔ––²`Į±¶¶&55•ōōtŅÓÓIIIańāÅÄÄÄ V«ŁµkWµµZ­>œœœ˜7o”””8;;ćāā‚»»;'NœømF­»åęĶ›F=•Ó'W§wį“O>A„RqźŌ)<<<Œ¶oŁ²åŽŚØkƒ¹Ž]‰x0I"„BÜGœœœČČČ0¹ķņåĖś‡n1cĘč³ŻŖ~żśDEE±sēN.]ŗTć$++‹’’£Éķ¶:uźč’ßŌś¢¢"ČÉÉ*r/]ŗD«V­€Š‰ėk×®E„R¦ßư°˜˜ źą7nüœŸŸÆüš4iĀÓO?m“Ļļæ’^ŻĖ»c;wīd̘1e•†[×S1%>>ž–-[š >³i «K׆Źė«TVÄāŸK!„ā>Ā… Ų²e‹Į›’ŅŅRŽ|óM£śÖÖÖ\øpƒŅ”C£ķŗÆÕy(ĆLW™™™4lؐąą`†nōąūg芔ƒ~Ą—^z‰ 6ąå兣£#¹¹¹=zT|įččh°"ūʍ1bĮĮĮŲŁŁQRRĀõė׳ī»ļōu*Ļ™Ćė~ź©§hÓ¦ –––ųłłńÕW_ammZ­ęȑ#Œ;VæöˆF£!&&†õė×ė÷ÆĶ‘šxśé§łę›ohŠ EEE\ŗt‰ß~ūMæ½uėÖ·=†››/^$??GGGƒmŠgÓjµÕ^Ų°²°°0|||ųī»ļ˜5k–Į¼•²²2żē+L€!„÷‘qćʱiÓ& @æ~ż %''‡={öP\\l4¦~̘1,]ŗ”īݻӽ{wź×ƏJ„"//#GŽpäČš4iB§NŖu~gggBBBø|ł2Pń[÷Ū\¤»­’ž4k֌˜˜ŹŹŹŲ½{·Łŗŗu@<==éÓ§Ū¶m£¤¤„U«V™ŻĒĖĖ‹G}Ō ¬U«Vś^„üü|}śįŠŠP,--0`ėÖ­£¬¬ŒåĖ—S čö’³mß¾Żdy‹-Œ®Ķ””C‡ņńĒÓŗukyä¼¼¼ČĪĪęŌ©SüüóĻx{{“’’BNN*•ŖĘķ³°°ąwŽ!::šf͚ńųććååEFF‡"))ÉģüńĻ'ˆBq8p ß~ū-}ōŪ·ogćʍ888ЧO>üšCzõźe°_‡ųõ×_łšĆ9xš [·nÕo äŁgŸå­·ŽŖVv%ļ撞éÓ§sąĄ²²²Œ¶ŪŪŪćźź ¦ÆU©Tś·’•ßš[YYéėßś¶ŻŌ±”J%æžś+ļ½÷[¶l!%%EæĘ‡īˆƒPRˆ([Ą˜D7jԈsēĪż…Ķ»œĻM£@sū¬B!ī +šŖ|žźfü„²³³qvv6He[•’’ qvv®QŠaŽV«Õ?ü«TŖZ ǹ[²²²pqq©ö½€Šūgiii“U‡nއ½½½ŃF£nīÖ}¾___żĀ…YYYØT*JKKÉĻĻĒÉÉ鎲Jé®GżŹĖĖÉĻĻ7›–Wü}ÄÅÅUNąpHni@ꦒQ– ä…@1P h¤ä"µ¤M„Å£„¢ŗ€Ⴤ0ƦĆ_lllīź¤q…Bń§>˜ÖDmŚQ›įC`ÜSSYåæ’®WāN݋뱰°ąCčIņ7w.?›]‰įJaīķ+ !„nJk^mŠ”Hŗ·Æ,„øē&Mš¤Oµ{Ƴ’ q·Iņ7–®.fņ¹ĆäiŒsĀ !DMd–Ŗ™yé8–Vtpõś«›#„øÅĢ™3’ź&q×T„øļ,M¾,Į‡ā®ZpńÆn‚Bˆ8 @žĘā ’ü4Bˆ˵"Ó« !„w‹ ceȤs!ÄŻUFłķ+ !„w@!„B!Ä=#ˆB!„āž‘D!„ų‡Ś²e …‚>śØŚū“oß…BĮ÷ß’'¶ģžŌ¶mŪ­U‡B”0X½¦4 …‚^½zÕś÷«C‡”P(xé„—žź¦hÜø1>>ö§5 @„Bq[)))Żw“BˆæYD!„z‡2Y®Ńhøzõ*iii÷øEBˆ @„BˆūPqq1—/_ęęĶ›h4¼¼¼ 3Z;==¼¼<ź×ƏF£įĢ™3dffŅŗuk£cĘĒLJV«Åßߟ   £:ŗćÕ«W„RIjj*¤¤¤ŸŸĻÕ«W°³³£N:“’’‚»»;...\»v«WÆāķķMćʍĶ^“··7”””Fה––F~~> 4 ““TMMš4”°°PŽ[•——sķŚ5¬¬¬š÷÷ÆłMƤøø˜Ó§O“““ƒ““M›6ÅŽŽ¾FĒHIIįŚµkbmmMpp0uėÖ­rŸ¬¬,Ī;GQQžžž4nÜ+«ź=®•––’˜˜ˆJ„ĀĶĶŒŒ ®\¹BAAŽŽŽ„‡‡caazš‹F£įāŋܼyµZ»»;”””888čėäå呞žŽ³³3FĒ())!99[[ŪŪ^'@BB‰‰‰akkKhh(^^ęBĶÉÉįźÕ«Ü¼yKKK|}} ĀŅŅŅd}µZ­’ī888Š“iSoŪ.ńē“!XB!Ä}D«Õņę›oāééIDDŻŗu#22’f͚įīīĪ“iÓ(/’_ŗä×^{   ¾łęź×ÆO«V­ˆŒŒäōéÓś:iiitéŅ…śõėÓ­[7ŗwļNpp0?~ÜąüÓ¦M#((ˆ+W®0eŹ‚‚‚čܹ37n$((ˆ   †Ą±cĒ āŻwß„WÆ^4hŠ€=zčēž”——3kÖ,<<< ®)""¦OŸnpMS§NÕ_S@@€žšŽ?N“&MhŃ¢ĘčŽķŻ»—   ^xį…;ś /^Œ——mŪ¶%22’vķŚįęęĘkƽfŠNs’üs¼½½iҤ ]ŗt!22’–-[āīīĪ„ (.. 11‘   śöķkņü«V­"((ˆ¹sēVŁĪmŪ¶ŃØQ#ō׌¹sg¼½½éŅ„ —.]2؟——Ēȑ#qww§eĖ–DFFҽ{wĀĀĀšóócéŅ„Fēx’ż÷ńššŠw:t耇‡sęֽ̩.éB!ī#K—.åwŽ”eĖ–Lœ8Ōj5iii,[¶Œ?ü&L˜`°ßčŃ£‰ˆˆ`̘1ųūū‰'˜;w.aaaĢ;—JKKٳg_|ń}śōįŅ„KøŗŗšlĻ€hŠ ¹¹¹,X°€ššpś÷ļ`ԃņį‡āąąĄ³Ļ>KƆ iÖ¬K–,aöģŁ“jՊēž{Ž€€JJJHKKcéŅ„¼’žū„††2nÜ8ƒć5Šf͚1vģX} Å×_Ķ/æüBæ~ż źė®GUĖ»Lœ8‘ččhڵk‡··7qqq,X°€>ų'''Žxć ³ū'''Ó»woŌj5ŃŃŃ“oß{{{RSS‰‰‰ałņåōéӇ .ÜóŻ»wsüųq^żuš4i‚ƒƒgΜa޼yŒ7___"##«u K–,ĮÅŅ·ß~›&M𐛛˙3gX°`O>ł$GŽ”E‹üüóĻL™2…fĻžMPPeeeddd°f;śź+|}}yė­·§sēĪģŪ· .аaCƒóźī’ȑ#ͶķĢ™3 0„Rɔ)ShŻŗ5J„’““4:ÄźÕ«éׯgĻžÕ÷Œ½śź«¬\¹’Ē{ŒaƆįįįAAA |žłēL˜0–-[Ҽys āwhśōé1{ölBCCÉŹŹāäɓ̙3µZm²GÜ;€!„÷‘uėÖ= ¾¾¾Ū¢¢¢P©Tģßæß(8p kÖ¬19\ĒÅҽ{÷āīī®/{üńĒ©WƞžįīłēŸ7Łž§žzЧžzŠ„„,X@óęĶyļ½÷LÖuttäĉF‰īš~śé'£ģCƒĘÕՕżū÷ ?ž8«WÆ6ø¦ččh¾žśkV¬Xa€”——³aĆÜÜ܌“šŠõÖ¼õÖ[åO=õ”””|žłē̜9ÓģP¦eĖ–‘ŸŸĻüłó™8q¢Ńö€€žļ’žuėÖ­//++cõźÕōīŻ[_ÖÆ_?z÷īM‹-ųģ³ĻŖ€”••±}ūvż¹N‡8p _~ł% .`ķŚµ¬X±‚‡zČčš}}}Łææ¾,::š}ūö±bÅ ƒŽ„ģģlvģŲADD„>š4eįĀ…ØÕj¾żö[žx⠃mS¦LĮŻŻłóē³mŪ6 T|üżżłžūļī{³fĶčŅ„ Š_ļ'Ÿ|‚»wļĘĻĻO_wŲ°a„‡‡3vģŲŖo ųÓÉ,!„ā>ņꫯ²~żz£ą*ę\X[[“ššj“mźŌ©fē ōķŪ× ųŠyņÉ'ō=%w***Źä¼’©S§²aĆ“©OP*•ÜøqĆhŪ“iӌ®©C‡4mŚ”7’››«/?tč))) :ŌhNIM™zƒļääÄ#aļŽ½téŅØø’–––·]%''ggg³A€īžč‚…BĮ!CČČČą‡~ --¢¢"Š‹‹ÉÉÉa÷īŻśļOzz:Z­ooo“Ē·³³ĆĆĆ£ZsyğG!„ā>ņĖ/æšä“O’••ePnggGxx8¶¶¶5>¦J„2Ynii‰ƒƒ7oެU[oeīįxŪ¶m 6Œģģlƒr;;;7n\ć‹#FšŚkƱråJʎ‹V«eƆ Ó®]»Z·*°ĶŻc'''ƒų[ååå”T*ĶöFéŽQRRbPnī3pvvF£Ń››«ć_•Ŗ2=¹øø«’łŲ±c 0@ŸåLĒĘʆĄĄ@“Ttt4Ÿ|ņ +W®¤K—.äååńóĻ?Ó£GŪfæŹĖĖĆĪĪĪģvŻżQ«Õś²¹sē2cĘ ƒ2ŻuVβčotĒ1E„RUłŠ?Ÿ ĮB!ījµZ?z͚5$''SXXˆV«„°°cĒŽUłšfN~~¾Łm%%%5Zż»¦JJJ5j …Āä5=z“ĘˆJ„"**ŠŻ»w“˜˜ČŃ£G‰gäČ‘Õź!ø]{o}Š­¼ Ŗ~ø…Š”¶ęްĘAB^^žŁćcaaa·*U}ŽjµŚ Ą7n™™™,^¼˜ųųxņóóŃjµsīÜ9“½P5āį‡fŻŗu³eĖŠ‹‹«=ł’Öą«²[ļĻŋõYŃ~żõWŅŅŅ())A«Õ’——Ē’ū_ƒżĶx•UuÆÅ½!ˆBqŸ8wī©©©Œ3†ØØ(źÖ­kph4 k|\sC¬rss)--żS39s†ōōtʍgņšJKKõ5Myy9ß|ó ėׯG”P0bĈ;nÆV«%==Żä6Ż[óŖī—J„Ņ?›¢¢ukŠWÕ0øĢĢLT*Uµ×¹µ7£²ōōt}ū3228}ś4żū÷güųńųūū9•ēŁTMNN›6mā»ļ¾ĆŃё޶m*•м¼<ƒł#¦Ī§»?»w寮¼œ’ūæ’£{÷īxzzbmmm¶}ŗ›[{uŖś|Ž#ˆBqŸŠ½y7·°ZLLL•ovĶŁ³geeeFåŗńóaaa·=†®Męz̹Ż5|Ųäöƒµ5))Éhż ØxŽ‰‰©Ög¤süųq“CŒN:ō7 n’Ł\æ~Żģ„ūAƒįīīĪ¢E‹Ųŗu+ƒ ŖVMxx8EEEœ:uŹäö[ļĻķŚxäČƒŸšóóćšįĆ&æ«{÷ī­Õ»$B!īŗUĮæłęöķŪ§ņóóŁ“i“~‚µnaøźŗ|ł2ćĒ×Æ°ŸŸĻ–-[˜Ä4¼B!„Bˆ{F!„B!Ä=#ˆB!„āž‘D!„BqĻH"„B!„øg$B!„BÜ3€!„B!ī @„B!„÷Œ B!„Bˆ{F!„B!Ä=#ˆB!„āž‘D!„BqĻH"ī*o;¾ŠčJ}{§æŗ)B!„ā>$ˆøküķ9Ņi0Oū7āxē!ōóņ’«›$„B!ī3€ˆ»ĀÉJɖ¶ąo瀛҆MmśńNX[,ŠæøuB!„ā~!ˆø+ę†w¤±“›A™…BĮ¬Vlmū–ŹæØeB!„ā~bõW7@üżur«ĆÓžĢn?™›AAYé=l‘ų³yZŪįoēHAY)ņ³õåv–V„;ŗp"'ķ_Õ@!„BÜ·¤DܱŁam17Čźók§™~žš=mųó ®ȱ΃YÖ¬»Ay ½3Ē:ęXēĮX[XžE­B!ÄżLqGZøxŠÅ½®Émæe§ņņك÷øEB!„ā~&ˆø#cüš,×OļC£-æ· B!„÷5 @ÄyÄ;ĄdłĻé œČIæĒ­B!„÷;™„.jĶ×ց {g“Ū–'^¼Ē­łė“wõ¦©“; ²Łs3Ål½AuqWڲ=#‰øĀ\ƒm  £[:ŗśąec‡£•’ÜR5źbg§²/ó:åZĆ)ŻnJ× B ,N8gö¼MÜiļźMbq>[ÓŒ¶×±±§—g=ģpWŚb”PSZĀå‚vŽL&±(æF÷ćVMœÜčąźC9Z–&^0ŗgwŚ©¼QkĖYžxįŽĪ)„Bˆū— ¢Öż‘ķčVZ`gFņ½mĢ_hH ^ lʒ„óU ³BZÓĢŁ!Ē1@ülYßŗ7mU^f÷½\Ć“'¶ō*łŚ:²0¢ åZm•H_ę5īȖ“£äõVĢ i…™ ćåZ-_ğ关ūĶ·£./ēˈ.(€+9ģ6sŽ mĆć> ųńFœ B!Ä?˜ ¢Öźż±čą­ŠņHWŻćÖü}mhŻ›6*/ā sY“Kla9„j¼lģš³uä)ßB\ų±M‚w~CIyŁ]9ļ :ĢkK¹VĖ7É—Łž‘D¦"]²«Ņ†‡\½y²n0“ė7įtīMUäTåRA6»o&ÓĶŻ—‘~a&G+%}<ė°"łRķ/J!„÷= @D­Y)LO!JøĆ!;’.“Qy‘R\@ÄŽµäkŒ×KłüŚi.u†Ÿ­#©¼Ł›i¾—„&ĘÕ«X»eīÕ¦ž?d“}QĀ9g„²(¢ ż¼ük€,Š?G7w_Õ dņ™}•i ¶÷óņĒĪҊ¬Ņ~JÆõy„Bq’“Ič¢ÖJĶdøŹ.-¹Ē-łū ²wąhvšÉą „ø€I—Ų‘‘„…¹Wj”ø\Ćńœt~L½f¶NLn~fz»Ŗėūq¤«‹p±²ę1ļśFŪł°6%ö®õš!„āž$= ¢Ö2ÕÅ&Ė•×VWį+Ä×·wĘJaa6mńs§÷Žõs:öómė;THNVŹ;:WIy_'^äÕ ęŒš eMŹż6;K+śył°"łĮI^ „B<Ø$µv³Ōtbk!_«źŚ›yĢŅš9»s„ūSȼAla.IEł$ē_”O|QžŁŽ‘;eoiEļś4qrĆĖĘk…VJœ¬”8X*iķāy×ε8į<Æ5§·W=¼lģH+©˜'ŌŪ³ŽVJb s9˜yć®O!„÷'yRµ–a¦ÄUis[ņ÷•Æ)eĄŃ­,ŠčB#GW|Œź”kµœĶĻ䭋ĒŲpćź];w'·:üŠŗīÖ¶&·k©‚ÕÜŁć®œÆņdō'ėóYÜi b2<ĄŹ¤KŌ.Ļ–¢²””ņņņ(//ĒÉÉ ¬¬Ŗ’Ļ}RREEE”––āęꆧ§'––¦3å !DmČXQk7Ķ Ž6v÷ø%oū3ÆÓx÷jBw}Cæ#›yęŌžuł8’MŗČī›)d•–ŠŌɝļZ÷ÖUŗSv–V¬i‰»µ-;2’xāŲ6ŚģūŽĘ{V“su¶ćÖŌŁ}WΧ³0¾b"ūßPl,,éļ]-°R²_ q[’żļQ(̚5Ė ¼  €3fąćワÆ/ 6$<<œzõźįāāBdd$æüņ‹ŁćžöŪo<ńÄØT*źÕ«Ghh(7¦N:xxxŹsʉ(>śč#  …‚G}“ʶæóĪ;( ¾žśėŪ^§Z­Ö÷ęĶ›·­/L[·nE”PšĮüiē˜ÄŠŗĮ|rõŸ_;mr_uy9?܈cH źŪżoˆ–Z[‘-ŹB”ĄĪŅŹ(µ­Žn"yeē÷Ü ³ĮÜżŽ,uy9Ė/2õÉču’ø'+’¤÷CˆŚŚ½{7Ū·o§M›6ģŁ³;;ćßŪ­[·ŅÆ_?f͚e€”””Mii)K—.eģŲ±&ϱlŁ2ʏĻøqćøtéJ„abЧŸ~šeĖ–ńŅK/‰­­é”Õemmö{‰%ăDqG2ŌÅ&ēxŁŲ=0Hrq]Ż}±¶°0ł@?Ź/ŌdoBqyöĪ“©bt@’ ^yā’õāBʵZ, z{Öć‡qFūyŁŲ™¶•’Gö-’Ū¤×Ŗ\åöŚXœp®"–_(NV֔”—±¶RV,!D͜8q€ččh“Į@ß¾}©WÆqqqäēēćčXń»’믿’ššJTT”Łą`ģŲ±lÜø‘~ų]»vŃ«W/ƒķ7fņäÉĢ›7?üŠhˆXm$&&R^^N@@€Ń¶¢¢"bbbČĻĻĒĘĘ___«}ģĀĀBnÜø——ŽŽŽ\½z•k×®įēēGhhؾžF£įüłóddd`ee…‡‡ 64Ūć]^^Nll¬¾ķööö„„„ąéi>”GFF±±±äååammMżśõń÷7ž{;>>+++|}})**ā÷ßG­VBŻŗuõõ²²²8uźåååSÆ^=ƒćäå呞žŽöööśkwvv¦yóęśłBZ­–3gΐššŖßfmmmņŹŹŹøpįéééXXXąīīNƆ ęeff’ææ?VVVÄĘʇJ„¢Aƒø»»›½O)))\½zµZÆÆ/aaafėBÅg”k€››įįįfē3iµZ.^¼Čõė×±²²"$$Ÿ*Ļ!jOꀈ;b.–—õƒ3dkZåZ-Ž6vllӏv®ŽŲZX¢TXdļĢŌ ęĢ ļhr_]Ö§į¾!ĢkKS'w<žč, |lģWÆ!3ƒ[°3#Yæo®F;Ģė|Ł“ #|Cńüć¾ė_Ū=†ŹÄ¬cŁéhFŽ®L j”?'Tō`…9Ŗ˜ß¤3#ż*ž!v°¼³4¼•].ČaWF2vNø)m؜O¦¬#D­Ud”ÓęLš4‰ččhŠ‹’÷÷öŃ£GčׯßmĻÓ»wo b¾ˆ)o¾ł&>>>¼ūī»\»v­:MÆR×®]iÓ¦AYvv6QQQØT*Ś·oOdd$?ü0AAA±qćĘj{ĒŽ1wī\:wīLPP=zōąĖ/æ*Øg͚…»»;tļŽ‡~˜ššp|||ųä“OŒŽłĶ7ß@hh(=zō 22’Ž;āććC’žż¹~żŗAż3gĪššĆćååE»v툌Œ¤K—.ŠøqcvļŽmPæC‡<öŲcĢ›7///:tč@×®]©WÆƇ§ØØˆ×^{ oooŗvķJ÷īŻń÷÷ēŃG%77WœÕ«WÄāŋ ®½M›6Ō«W_~ł…S§NŃ“iS"""ˆŒŒä”‡ĀĒLJuėÖ“I«ÕņŽ{ļįååE“&MčÖ­]ŗt”I“&xyy1{ölƒž¬>ų€   ¶oßN»vķ&22’6mŚąééI’žżÉĢĢ48GBB=zōĄ××—Ī;Ó£G6lHćʍ9{ö¬ÉĻ÷ÓO?ÅĒĒ‡ĘÓµkWŗvķJDDīīī¼ńĘ”•®7µmŪ6iŌØ‘ž³®[·.C† ”°°ŠĢ·HÜ éwÄ\/‡×4żrA’¾r‚7BZŃŪ³½=ėÕŁu37„-͜ ßīģČHbIĀyžöoÄė!­x=¤P1¬Ė…Įüš£Łiüē–aZ/ž=Ąžš¶±cE‹FēĶÕØYšxqõ”_*Čę«„sLšēżFķxæQ;r4jŹ“Z\•6čĪŗ&å CėW9„6%œ£»‡/ ĆÆ„øSMš4ąĒd芔fßĪæöŚkFeqq=§¦ŽøßJ÷–=##ĆävŽ’}FĶĖ/æĢ† ŖÕžšˆŽŽfŻŗu >œŽ½{ćāāBnn.gĻžå‹/¾`Ȑ!\¼x‘śõėWėxoæż6...Lš4‰°°0Z·n ĄĢ™3łąƒhŃ¢ƒ " €ņņr®]»Ę’%Kxé„—pttdüųńģŁ³‡‘#GāģģĢĢ™3 ĀÉɉōōt6mŚÄO?żÄ Aƒ8xš PŃ IZZ#FŒ sēĪØT*RSS9ž<_}õ>ś(ēĪ3ųlbbbHHHą„—^",,Œ¼¼</^Ģ7ß|Ćļæ’Njj*Ó§O',,ŒŌŌTV¬XĮęĶ›™3gļæ’¾ĮµæņŹ+ōģŁ“… āääÄńćĒłģ³Ļūģ3"""8tč66†/`ʍGHHóēĻ× Ÿ}öååålŲ°Įh’žÄ‰0`7n$&&†f͚±nŻ:nÜøĮ¬Y³ōĀ•5oޜččh–/_Ī’żß’éĖĖŹŹŲŗu«>P4huėÖåܹsģŻ»—Ī;“µN:l޼Ł(éÓ§›6mŅ/† FYYŸ|ņ ­[·Ög˜5jüūß’fĒŽ :FƇ~H`` GŽĮĮĮpžć³Ļ>Kpp0óēĻ7 @:wīĢO?żdš?~<lٲE_¶sēNN:ÅčŃ£Y¾|¹Į1&L˜@Ū¶młż÷ßõeZ­–wß}—:uźpōčQT*•ŃgŹ_|ĮŪoæB”ą‹/¾ ¤¤„•+W2xš`ƒśƒ ¢qćĘF=&āĪI"īH¶™”3wsČĪßÅĘŌklL½fv{U«™oN‹gs-Äć s™|fŸŁķ× óLfĪŅĖ/°,ńB•ĒļzčG£²ļ®ĒņŻõX£ņ«…¹“Ž÷Q¹µ…­–r­–zv޼ߨóÆ©r¼āö¬­­Ł¹s'/¾ų"[·n%&&ĘØŽ>ś(Ææž:͚5ӗ—”Tü^Ićŗ!^99ę3Ö) žóŸ’ЦM¦L™ĀéÓ§ĶĪØ©¼¼<4É9!£G¦S§NFsŖ2zōhƒąąäɓ3hŠ £ąĄĻĻ-ZpōčQ4 VVVüöŪoxyy™Ģ0`ĄöķŪG||<͚5ÓFƒ 2YšąĮDGGsģŲ1ƒrƒąĄÓӓśõė“’’B§N ¶©T*üüüČŹ2|YšČ#„ŗcGFFmÓõ“éŽuį²²²3fŒQšąīīN‡Ų²e YYYøŗŗź·;Öčų¶¶¶tźŌ‰uė֑žžŽ§§§~~ÓŠ”CŽÆT*6l˜A’˜˜Hrr2O?ż“QšąģģL×®]Y³f ‰‰‰ųūūsāÄ lmm8p QżڵkǾ}ę’µ#ˆø#ęŽqŪÉ¢U¢’į¾”|ѕZŸųZaŸĘś‹[&Ä?ƒææ?6l@£ŃčĀ’’’ø~ż:ńńń:tˆuėÖ±eĖŽ;FƆĆ2u=•ē…˜£ŃTdڻݢ†-Z“ ::š 0wī\“ĆdjĆÕՕąą`–-[†R©¤Y³fųūūćēēG½zõP©T“jÕŖFǬS§ŽQ™nŻ‘ÜÜ\vģŲar?…BF£”  '''RRRˆˆˆ0{žqćĘ1nÜ8żĻŗ ĪܤkWWW”J%©©©å¦Ŗ”āaÜÅÅÅd/—•••ÉŒb..ĘuŁĶLG7y[w,Ż}***2{ŸtߙœœƒÄ×××d}] ¬ ŒuČĶM÷óó3ųY7š3÷p«V«)..ĘŁŁ¹Ö×ńgÓŻ'777³÷éܹs¤¤¤˜ œ«C׫d.ńĮ­CŌtmrqq1Ū¦‹/’˜˜ØŸXīīīĪå˗ͶįÖsˆ»CÖµÖĄŽ™v®¦‡¤–HŽl!„Ø)ŻX÷S§LĻ:yņ$`˜6W÷ u»50öī­H„Qy·Ž½{£T*Y²dI•ZIII,_¾+++śöķ[+©xżŸ’ü žžyƒĄ§6āā∊ŠbķŚµ&·;::biiY­įdUŃ5‡2[g̘1“ø#""øt钣”­GŽįźÕ«śį<ŗ īšįĆ&ė:t­V[£ÅļµĘciiYå}š4i½zõ2PߎnQHŻw÷V·Īó ÅÖÖ¶Ź6M:•ČČH}Æ_hhØ~ńĘ[ååå™]÷FÜ @D­8Z)YŪ²J…éÆŠ‘ģ“{Ü"!„ųū{ā‰'°°°`Ö¬Y¼ūĮÕÕUŸ%ė‰'žĄŚŚšiÓ¦ńĶ7ßpžüy²³³IKK㧟~bĀ„ Fiaļ'®®®<öŲclÜø‘—_~™³gĻ’ŸŸOaa!ńńńüūß’fĻž=tķŚµŹ9UéŪ·/nnn¼ū\¹’ģģlŌj5qqq¼żöŪlړɠ¾QQQģŽ½›ēž{ŽS§N‘——GQQ‰‰‰Ģ;—Ķ›7ÓŖU+}¶“#FŸį(..&??Ÿ“'O2lŲ°*³¾‰Ś“!X¢ĘŚŖ¼ų²iZø˜žpwµ0—ĆŁŅe)„5Õ¼ys/^Ģäɓ™9s&3gĪ4ŲīééÉźÕ« †ęøŗŗ²uėVFŽÉڵkĶöøøø°dÉŗtébPžŃG”T*łōÓOyå•WLīkmmĶ‹/¾Č|Pćkz÷ŻwٰaÉÉÉ5Ž·2WWW¾üņKž}öY³sZ·n͌3īč<€~HŪģŁ³™={¶ŃöFń駟ź7n‡fɒ%ōča¼(¬ƒƒ«V­Ņn|ńÅLœ8‘įƇÕ·²²āķ·ß¦k×®w|-¦/¾ų‚äädęĶ›g61€.įAm8;;³bÅ † Ęȑ# ¶)•Jž}öY,X`P>wī\āāāĢNŽ÷óócٲeśŸ{÷īĶ“iÓųšĆŅūųų0dČ£ąÅSJ*%` Ų3€čFqīܹæ°y÷ó¹ihjׅųgyęģANäܼgē;Ńy>¶öŌ±©:JŌń_X'Ž…ų[RZ(8ŲīŃæŗz6V4U™NĮłO–••ÅęĶ›¹xń"łłłØT*š6mJÆ^½ĢNLÖjµüöŪo?~œÄÄDJJJ°··ĒÕՕ°°0ŗwļnr½ōōtvģŲAll,7oŽÄĘĘ{{{5jD—.]šņņ2ŚēŌ©S>|˜:č׉0eļŽ½\øP±ęP×®]õCkŖ²zõjŌj5£F2jēĻ?’¬æ7ÖÖÖØT*:wīLūöķ«•a)>>žŸž™öķŪÓ“iS“uŹĖĖŁ½{7GŽ!++ FC:u'22RŸ²¶²³gϲk×.’’’())ĮÕÕśõėgņžŻøqƒmŪ¶qłņe qpp ~żśōģŁÓhāöŹ•+±¶¶&**Źč8k×®E­VėßęWµķĀ… ģŻ»—īŻ»lP÷źÕ«ģŲ±ƒN:^­mZ­–żū÷sųšan޼‰Z­ĘĒLJ°°0śōéc°–ŹoæżFLL 4y?vķŚÅåĖ—>|øĮw5--M›6qåŹJKK©WÆ}ūöÅŪŪ›5kÖšŠC¬oĆŲž3ū2Mg’U{²n_7ļNž¦ēm_močØā°¶<ź€‰ÕååĻIgqĀ9¾NŗH¹‰ouüķ™Ņ ‚Įu °s2Y'¾(ŸRć™sł8×Md3kęģĮńĪ’›¹*ł2#Nš^q¶²u­zŃĒӟϯfŹ™ż·­/„Bˆ&ɂ%…;Ś=Ę[”m°ü#%”ø;:ŗłp¢ó†Ō ĀĪҊšßs38ž“ĪÅülŅJŠPZXŠŽÕ›„Ķŗń}ė>f?ƒNnu8ŃyÆ6#ĄĪ‰2­–”āĪäer1?›¤āŠŌ•vNLŖß„‹Żž¢‹{ŻŪ¶ń)ß:»Õ¹«×-„Bˆ.éw…µ…o†¶¦±“+COlÆņ-¼Ø …‚„ĶŗagiÅłü,¢OķįPÖ Źn¹·>6öĢ iÉóõ›ņ˜w}ĘÕkÄāù[.VÖ¬n‰»µ-źb^æšėo\妺ؠžJiCļž֖;'~h݇†»æ%µ¤Čde§ÓZåÉšt¦Õ¾ļŠhk·Ų”B!Ņ"ŖķĒqlN‹'³Šy ƒė15°ł=lÕ?W/B*2n ŹJMnpræĒ-śē¹V˜€Æ­Į.·­æ?ó:ϜŚĆĖē”»)mpūcż–øĀÜjŸ?łt¼  žé…ĻŠĖĖxéģĘŌkH{WļjŸCQso¼ń†ŃźĻāĮžžĪōéÓłį‡j}ŒćĒ3}śtNœ8Qķ}>ųą¦OŸN|ü’^p­]»–éÓ§“žž®/[¶lÓ§OēčQYLTMQk7J ٟyĆä6kŪ{ܚžĆY©$åc”P°å’Ł;óšϵ’f’I2Ł7Łd“X‚ˆ½RŠR”:EUK?mU«Ø“Ż[ÕŖR-Ŗ-=hŃSqzģEÕ^µŌJK=‘}™d&ÉĢ÷ǘ‘13“–z~×å³½÷ū¾“És?÷öĄ@F6nFGWd’ū±õ¬ó.n¤ž†¢ŽrŁČ®~×ŖĶyiüšŸų&²»Č†&üĢ;—U«VŻi1L8tčK—.„°°šN‹rĖlŻŗ•„K—R[[{§E1£ØØˆ9sę°sēĪ›^#!!9sꐐŠą9K–,aΜ9deeŪ¶nŻŹœ9s(..6¶­[·Ž9sęo2æŗŗš„K—²mŪ¶›–[šĻBdĮÜÖNŌķD Č-S­ÓņĀéßŲÜy͜܈mߊ[ŸrÕ*2«äT©Č¬T¬,ådYGKóĶ2É„WĢ+µ W@*j4Ę;Ų\’}NJ:Č#ŽĆéčֈ—ƒ[±8=©Į×÷6«WÆę믿¦S§Nx{{ßiqn‰ °{÷nF…M¾ūīʍGqq1õŽ6lmŚ“!*Ź4y‰Z­fÜøqōļߟü¢ ī„"ø%*j,»`ŻČFW`ß ³i·-›“”»§?͜Üp²‘ąąD€ƒ“ŁųÓåEüߟ»8SQbl³“^µ˜Tß@ÅōŹ:§¶ °ŗ\T–1/å4ļ5ķĄĢ°öņ%‹™¶@pońÖ[o5hÜčŃ£’fI’„"ø%¤V\mnÄÕGP?•e&•ĆŻlķh,w¢±ƒöN„:ŗŠŃ­|‚iėźÅīčADžž?cŗäŗµ9-TR·†}Å„²ļsօ“<×ø9ArgfEta\ü¾_O \%33“„K—rāÄ  ...ōčу˜˜³±ėׯgēĪ¼żöŪ„…™§įžį‡8|ų0³fĶĀĖėj|ŽŁ³gYµj§OŸ¦¬¬ ¹\N`` żśõcŲ°a×=ż/..ęŻwßō.XŸ~ś©ŃņꫯҦM*++‰e’žżäęęRYY‰««+‘‘‘Œ9’¶mŪ6ųŁh4bccłż÷ßÉĪΦ¦¦OOO:vģȳĻ>KhhØqģĢ™3ÉĢĢdҤI“jÕŹdO?ż”ŒŒ &NœˆN§ć›o¾1>€˜˜ć3ØūģŖŖŖX¹r%ūöķ#''­V‹——:uā¹ēž3±ģßæŸU«V1iŅ$ŹĖĖY¶lÉÉÉ8::ŹŠ”CéŪ·ÆŁ=ĘĒdz|łrĪž=Kee%^^^ 8čhˉ>”J%+V¬ąŠ”CäååQ]]››mŚ“į¹ēž£eĖ–ēżśėÆü÷æ’%++ ©TJhh(O?ż4żū÷7·pįB˜?>NNę‡_Ö®]ĖīŻ»yė­·gÕŖUģßæŸźjżaeRRćʍ 00>ų€©S§RYYɂ °··7[sņäÉØÕj¾śź+d2™Õk ī-„"ø%¬Å#4tĆśO&ĀŁ@gJŖÕœ(+øž„RV£”¬BcbåxŠĆ—}]‡ąoļȋĮ-™{é 7ąlŪš/oG›«cjŃRÖV3õĢ!Ötģǘ –|—~†øæšŽ‚ū'NŠ»woŹĖĖ ĄßߟĢĢL¶oßĪ’ž÷?“×X2=ŹŅ„Kyį…,* ūöķć‡~ą½÷Ž3n¢’óŸ’0fĢjjjprr"88˜²²2vļŽĶņåĖéŃ£;vģĄĮĮz<ŸB”`éŅ„&m6l0ž{Š A“iӆĀĀBŗwļιsēÉdbccߞɶmۘ?>Ė—/ēłēŸæī³)**¢wļŽÄĒĒ#•J ĄŁŁ™øø8~žłgfĶšÅ† ŒčČČH¦M›FJJ »vķ2®³gĻ>ųą|šAZ¶lɎ;ĢīeٲeĘæūī»xyy‘——GĻž=9ž<666 —Ė9vģ6ląÓO?eėÖ­ōģŁ€3gΰtéRJJJXæ~=^^^ųłł‘œœĢöķŪY¼x1sēĪeźŌ©Ęk­Y³†’ūæ’£¶¶–ššpÜŻŻ¹xń"?’ü3:u²ų¢££IJJĀŪŪ›²³³łå—_˜7o[¶l”_æ~&ó.\H\\„„„P]]ĶžżūY±boæż6Ÿ}ö™qģöķŪŁŗu+³fĶŖW9räK—.åłēŸ'<<œƒšŻųN«ŖŖˆ‰‰ĮÉɉ?žųƒ‹/GNN'Nœ --Ķlķ+V””ÄäɓÉĖĖ#..Žøø8.]ŗÄ©S§ÉdĢ›7ĻlŽÉ“'łé§Ÿ(..ęĻ?’$11‘K—.ŃŖU+¾ųā Μ9sŻ÷q=žżļ£Ó騨Šguģßææń™ž:„?$;v,±±±fó×­[Š åTpo!Į-a-;ŅlX’©(ÆÄĒH©ītÅ-Ŗź+Ćaķˆė>ŒŚõnš5/)ĖÓ÷RZ­¦ōŠ;VØ£y‘BkŖ°×č“ʔĄ ebŅAŖuZŗøūņB`‹š+ÜĻäēēsäČśöķĖȑ#MśMN„o–mŪ¶”T*łč£čܹ³IŸ»»»ŃiĒŽ·|-ĆõÜŻŻ™;w.ĪΦ)½{ōčĮ„ (++楁×]kķŚµ“hтO?ż¹Üō÷Ļć?ĪšįĆIOO7ŗQ|żõ×899ńĘo V«łī»ļHHH`ņäÉfĮŅõQ[[ˆ hß¾=|š‰»D"į©§žbŠ Aœ={Ö$]-ĄČ‘#:t(’:2={ödŲ°a(•JRSSųć?(,,dÜøqtķjzxÕ”C¦L™b&Wyy9;vä•W^A*5ŻÖµmŪ–ČČHćśu8p #FŒ0i aƌhµZ¶lŁŅĄ'sktéŅ…¶mŪ²uėV“ŒZ w/tqqaȐ!·EĮķC( ‚[ĀKfŁ<ŸÆ Hå×'×zŠų4ŗR=qqq4kÖ̬ļņåˤ„„”P(Ģś®U> tģŲ€ŒŒ ‹żcĒŽE£Ń°fĶc[BBÉÉÉ<łä“8::Ž6Y·"ø%¬ÕūČR®¤(nįģŽÆ½Üź3yäJÕų„iJćƒÅ—‘»0Š'„­*œ×ÅĶ֎łč•†Se¦¹ųWē\ä1Ÿ`ū†ŅŪ»1æ]§"zw_ž»b¹Xg„āżõ˜‘Ē’5n†æ½#3ZÜś¦éŸB#;9’ķŠ‡"M/žŽ+6L0usuuµŲļįįavŹ}£N™Gm1čō®@ q‰ŗ:…BQļŅÓÓĄč¦c’}ÜŪļæ’n1ō$ĄLö×_+V0{öl¾ūī»ŽŌ®æmŪ6«×ĻĶ͵x}kq×¾KC77Ė®·u“ŌeŊü÷æ’%55•²²2Ŗ««)++3öūūū›Ķ1<÷kqw×[æ Ļņv0räHŽzė-V®\Éųńć½õą¹ēž»mrnBÜ^Vį‚; 2)«ŃąfkĒžčAL;Œ½E9”V«q²‘ŃÄх ”‘ōš ąæ9Lę,¾L\iÜ±®Ó£|•φĖ)œQ” øāŽåb+ĆĒN΃~¼Ó“=NTÖÖ°"óœÉZ?e_`jX[¢\½ų„óc,NOb}n g*J(¹āžåd#£¹³CżĀ˜Ö© ™• žžxS÷_^£į­3‡YŁž^ iMf„ł ÜżF7O?ÖtčgL”ģc/gĄŃ­Øµw_Į3ĮĮPüĪZĄ­T*½åŚJ„Žŗlucfu³{#h4jkkė•Ł`Ͱµ­KbŪÕÕÕb°=č厎ŽĘĒĒǤ½  €ģģlär9•••œ:uź†Żz ×wwwÆ÷ś`}s=jjōÖŽæ„ö™3g2mŚ4BBBčŁ³'žžžŲŲŲąźźJ@@‹-²hĶøŽ5n5ÖčFpsscĈ,_¾œK—.Īśõė āᇾmrnBÜ4vR).²*UikE:P¤©"&a?’i÷­]<ŁŠIŸ•„F§5««±*ūks.™“逧Nī`G—ŃÜɝ·ĆŪóvųU· VkRćōŁĒFśK׈¬ÖiyģŲV¶uH/&‡µerXŪz׏ØT0$n›ÕZ/ aUv2ćBZń§’ şüy½IŸ·zŠ$s\/ÆĘ,ŠģΘųßļœ`‚» Ć¦ß’Ė čOįotchŲ80œüĻ›7ˆˆˆ›²įŲŁŁ!•JĶd°$Ÿ‹Kżß¹{ōčĮņåĖoHŽ)S¦P^^Ά ˜>}:sęĢaäȑŻ–®wż¾}ūćdžj ļߚ5Č`!3 ÓéX°`”””ÄĒĒ[|†‹/nŠZ ×¾Ż%ĒŽ˲eˈeųšį$&&ņĪ;ļܲÅOpw"ŽŖą¦ńč×eUö:XĒwgŒ1売¶†½Eٌüs7Ļż¹…łiŖ Śķ_Ė+ ūŁUEaĀ~…”²¶†ÄŠb槜&j’Ö^¾da%}LI‡żė’;æä„-u×*®Vó{Q“’Ņfßjž¼Ę• ō TIµš’j5Z‹R_E¼šx€"M•qĪż˜¢ł­šö|Łŗ›Å“Õ/·d°_“; •ąnÄ×ץbŠ0Ą„Kę?߆ĄnkJĖłóēMžoČčdp²Ä Aƒxé„—®+ļµčt¦ß ‰„ʍ“““cuNVV`ݽȀŸŸöööõŹKß¾}9|ų°±m×®]¬^½š>}śšÄO0ž|c¶©¹—   ¤Ri½×’ī»ļčŪ·Æ1ĆӍbx’–²]yœLyy9EEEtźŌÉŖ—’bŁözķ~~~ ł†øö™Ö偠]»vÄĘƳ_ ÷«.Ā"øi¬  ĄS兌½RĻÉF†‡ĢžŠ e “UÖÖ°8=‰ÅéI€¾˜ £-2‰”’jµIėQ£Ó²,ć,Ė2ōbģ¤R¼dhtZ*kk_^„ēŽ†Ÿ>ž./Ā{ēŠ’'²0-GŃūJ¼Ļµ|ÕŗŪó3„+–€ŠŠPBBBųłēŸIKK3)Ŗ§Õj-¦S5>Æ\¹’>}ś˜hÆ^½šųųx“ń½zõ`žüł<ōŠCf®O{÷īeĖ–-<óĢ3 –Ū eeeƒ˜ <ōŠCüōÓOlŚ“‰Įƒ›ō)•J–/_ŽT*„K—.õ^ĆÖ֖=z°gĻNžĢ„K—Ģ6] ĄĻĻ•+W’˜˜H=J„$%%±gĻBCCMNŌŪ·oĻšįĆY½z5͚5£wļŽ4jŌFCZZŪ¶mĆĪĪĪbŹWkŅŁ>÷Üs 8WWWś÷ļĻO<Į[o½Å† :t(={ö¤I“&x{{“““ĆoæżFNNcƌ!(čśYśf̘ĮĆ?Ltt4żśõ#""[[[JJJŲ»w/.\ąŁgŸ%88€Ļ?’œäädʏo¬ŹšÅ_°}ūv¦L™Ā€L‚¾£¢¢ųłēŸyųį‡yä‘GĖåŒ=šččhfΜIæ~żčŠ”>ś(Ķ›7ĒÖ֖āābvļŽMjj*ćʍ£Q£F ~vuńööfāĉ̛7V­Z1xš`ÜÜÜČĶĶeĻž=f®l666<łä“üōÓODGGóč£āęęFii)qqqģŁ³c}]d2ķŪ·gąĄ„„„ V«Ł½{7§OŸ¦gĻž<ņČ#7u–°±±”uėÖÄĒĒóĄ…­­-_}õ•Éēyäȑ¼łę›óį‡š­SUUÅÓO? č-xB¹w ˆą¦±€~£)[‚ūŠšjFž¹›ć ĆĘĀéßųÖBś¢k2™Œ/¾ų‚åĖ—£Óé°±±”[·nģŚµ‹˜˜w777~’żwŽxć >ĢW_}…T*%**еk×+„×õ„„S§N¬\¹’üŃüģźźJ=ųšĆ­fz²ÄSO=Ebb"?žų#k×®„¶¶///žxā ŚµkĒžżūłä“O8pą{÷īōõmŚ“aŹ”)ĘB†×#::šƒ2kÖ,öķŪĒÖ­[}¬Ipp0Ó§Oē½÷Žō֘ŋČ3LÖiŃ¢“&Mbٲe|ńÅ̜9ÓŲ÷Ö[o‘““Ć/æüĀŹ•+½'::š^½z±oß>>ūģ3>>>F™–/_ĪÆæžŹš5kŒ™Ń|||xķµ×ųä“OL¬ĪĪĪxxx˜“9::āįįa’`@.—›ŻU«V1qāDNœ8A\\sēĪ5Q"\]]iŻŗ5'Ož“h“H$ø»»SZZjńy ī$€ ½""Gą]`lĖ–-’’J˜’Ζ磼Ė«Ē%ādYŃ»ž‹A,kŪˬż@ńezśłH$Üż|õ0/·“Ų×n’N—ß¹Ÿi™TĀ”čŻQźb/µ„ū_ļ‹~ÆP[[Kyy9ę–3k(•J¤R©Y”¾ś(--ÅĮĮį/9Q6Čģāābq#ŖR©Šh4ĘtÆ·Bee%ĘjŚŚ[E£Ń T*qww·č6t;®ÆV«Æ o ŖŖŠŹŹŹś¼€žH$’śĢÜ J„­V‹‹‹ ÕÕÕąāāĀŗuėxńÅyöŁgŹ_]“Z-±±±L˜0ĀĀBa¹C¤¦¦ÖĶwČŠ€| ļŹßWŚJr@TÕ@°€nk>œ¢čœ@`ÆR¬* }ŻqDpwaccsƛIk©uėćÆP \OfGGĒæ¬°œ\.’[7ĶvvvV­wĆõÆåf•ČŪ]čÆīg4--ĶĒĄ'Ÿ|bq^UUėÖ­cżśõBłøĒ ˆą¦©²‡*wA×ɏ$ܟ$TqVQb1¤›‡sļ€L@p§šńńį³Ļ>£¤¤„   žzź)³:.ټyóm–Pšw ĮM“Ŗ²œ§ÜŁVF€ƒ“1ķ¬@ 0å·Āl‹ HS§æĒC īVÜÜÜxūķ·ļ“‚ŪŒØ"øiĪ*Jص’Ó»—×Ķ„ īĪ*Ģ3ŅųŪß^7@ īBÜ4%Õj‹…źžÆqĆ«Ė ÷•– Ę @p? Į-±)ĻrµŽ>Įōń¼ĶŅ÷ÖźøÜHQI@ īU„"ø%~Č!³/„WV0ėĀI–fœ1ė“ŪŲņYD4c‚[āh!™€Ŗ¶†UŁÉ¼uöˆE*ŚĆ—õČ]„­%6+™g›ć µAQcś™ utaNă ö µGtAYʬ‹'łOę9ī%'?k.XĀ"ż&īܹ̙3‡¢"ÓC OOO^żuŽ’}“Ķ÷޽{?~<ÉÉÉ&ć% }śōaٲeŪ/_¾ĢĖ/æĢŽ;Ø©1M Żŗuk-ZDĻž=MŚ.\ČĢ™3ÉĖ3żŽrss#&&†?žŲDy°†R©äõ×_'66–Ŗ*Óϼ——ļ¼óS§NE"‘0~üx6mŚdģ0`€ńßeeeøŗš~×E§Ó1}śtęĶ›‡JuÕ½ŃÉɉĻ?’Üāœ'NšŚkÆqųša“vśöķĖ¢E‹ 3髪Ŗbäȑüļ’C«ÕŪCBBX“h4¶ 6ŒćĒS]mł÷cļŽ½Q«Õdd\ż.ÆØØą•W^aõźÕfļŹĪĪŽ=z°{÷n˜2eŠÕē!ÜMDš—¢ŃjY˜–x§Åø%–DõÄߎ‘ÄŠb.)ːH$D»ūāc/gITOB]˜Ö­NĒžāņŌ•xÉčęéG„³;Ūŗ $ā÷ŸLRŖ>īʆNb+‘RV£įhIš*¤€Ÿƒ#Ńī¾ōš `_×Įō>¼™C%¹Ę¹Q®^ģŽ„£-ÅÕj_¦¤Z ~öŽtp󦽛7æ<šŁĢ¾¢ć\™=ūŗ&ŠĮ™ŹŚö_¦@SIV‹½#‘.ž„Č]XÕ{© ߤ%˜<‹’¶ļĆæ&Tė“ģ+Źįü‹–\jKc'zxłórp+Bä.åź…^# –;³,ć,“’ž0³yŪ9°±Sņōgq=]=ń‹m߇‘›±4ć Æ& Z§5™+·±å×+®okr.1üäNcßįķų¢åƒģ/ĪįńcŪ(æę3,FvgBh$ÉŹRZģżÉŲįģĪŁ‡Ÿ”V§£ė8Všoö̚8ŗrŗĒÓøŲŹŻKze…±ļ“šA³Žœ./¢ē”Ÿ)³šóåźÅĮ®Oąb+#rßj’*Š}?“ėĶØĄœ*/dČńķ&kČ$Rf·ŒfjX[*kkÜż#Å pc»Hģ9œÖ.ęn1Ķöž—‹Ź²; ŃUdR ‡¢’uGe؋½Ō–6ī~wZŒŪFmm-¾¾¾øøø€³³³Iqq1M›6ÅÉɉĢĢL~üńGFÅēŸĪ›o¾i¶ęŠ”Cłõ×_©¬¬D"‘››‹ææ?cƌį»ļ¾3’Ž{ļ1{öl¶mŪF’žżżi¾ĮeŹ ”ØØØ E‹TUUŻÅ¬‘ŸŸææ?ķŚµćčŃ£f“ōōtZ“hAdd¤1ī`āĉ|óĶ7$$$y§ˆŃI©TrįĀEōJŽ›o¾I«V­HJJąż÷ßgÖ¬Y¬^½š§Ÿ~ŚlĶW^y…Å‹³iÓ& Djj*aaaH„RN:E›6mLĘ’ņĖ/<žųćL˜0E‹еk×z- ͚53³€“hтüü|ņóó‘Éd&ćkkk ĆŁŁŁxĮߍį³…ó@PäyWž.øŅV ”*  ØjD^ą„%š( wśźŠBšŽ¹#fq”elÉK ÜéŖÆšƒ~ĖÉU«˜øß¢kZ”¦Š˜Ät÷ ĄÕöźéZ”«~£ś]ś3å ²¶Ęč>īdźŽ墒„»2+ŁLł}–2ƒÕ£‰£+Ņ:§gÜz÷.KŹ@ŖŖœ“ez_šPG“¾°+īi?e_°Ø|ėqųе§M ¹L"e؟žĖmlü>3å Z§åķ³‡É®R"·±„··uæõ» O+QDœœLQQƒ 2S>@ļ‚õŠC‘••Eaa!ŃŃѬY³†’ūæ’³ø¦»»;jµš’’ćß!!!ĒOž<™øø8ŗtéč- 0ĄLłpqq”WÆ^”””žž^ļżÅĒĒ£Õj2dˆEw­:wīL||¼ÕMzCČĻĻ'++‹¾}ūš)Ļ=÷œYŪįƇqppąÉ'Ÿ“øęąĮƒ8}ś“I{Ū¶mĶ”€Ē{ 777Nœ8q3·`D«Õāāāb¦|€Ž5ĢŁŁŁĢ•M øŪ.XĮ5$Ō9…ÆKŻMš™Š‹c.Wé]häuā:^ŁČ.ÉC£5W Œ×-/B£Õb'•ŅÜɍø+{™Dæ–õ™śMžOŁę!eWN"ėKƒ|NQŠä—›µ’’—Nųo«Ø¬­±0ė*†Ųk݊TWę5²—×;ßM¦W¶ź>›ĪīøŲŹPÕÖp܊ņśŲ™Så…4vp¢…³{½×¹›pµ5ßHTÜeVVĮķĒóQYYÉīŻ»-Ž1lĢĖŹŹšöö¦yóę4oޜӧO³wļ^T*h4ņóóY·n€±p_XX^^^|łå—ØT*ZµjEHH4nܘFŃØQ#3™Ŗ««­ŹdŲ—•ÕoĮ+/×'½°¤šõõ„ŗŗš¢¢"üünĪśe’·6ß×××č ō÷éęęĘŽ½{-ĪIMMĢļ±qćĘĒK„RüüüČĻ·žÖ:wīĢO?żÄ7ß|Ć /¼€‹‹ž°G„R˹sē2dČ-]C øŻD ø†j+JBMM|…•ūZ ż@'ćŗeÄe5jŁÉq®³A=R’K„³;’ėŠ—egIR“Q© «Rq]—£#%yŒhʜ–źčŹ©²B2*+ČŖR’{xƒņ å5l%RŚŗz$wF.µÅUf‡DŠ«­įN®tv÷@rMhżŃŅ<Ę·äi’p~Ģ:O|¹©» ­DŹæ&Ęgņgy”±Æń•gV¤©ŗī33(WĪ6–7õw6 ŽVd½—éėÄwß}gŃ=Ŗ.†ĄźĀĀBĢ”C‡ĢĘųłłįļļOEÅÕ{{{Ö¬YCLL ³gĻ6/‘Hh޼9ćĒēõ×_ōn_«V­bÕŖU ’É9ärėĖZ}ó.•™ ›uKø»›Z”””——wŻ4æ×@¼vŗøŗŗržüłė‰k•²²24 R©”‰'2qāDģķķ‘H$F„Ļ×ח3fÜō5‚;P@‚æĆfóé€pžoЧ:ŌiēÓÕӏęNī|Ö2ŚdœŖ¶†ōŹ ’*ŠYs‰u—/™ō/IObo(½½3­YG“>µ¶–ģ*%ē„lĖOg‰Æ1Į-™Ńāüķ­ŹZY[ƒÜB†¬¤Šb4Z-ArgN÷xšāŠ”CL™2…—^z ÜÜ܌kÅÄĘeĒźŻ»·1Åozz:YYY¤§§“––ʦM›˜}ŚØ\¹ŗŗĘĄėU“‚»‘{ć7¶@pc«8]^d1Å®%.×±NdU)ˆü}5|‚iēęMˆÜ… gåN„Č]héģAKg†ł‡óMZēVikyäČfzzš ‡/ĮWę†:ŗčąD˜£+aŽ®<ęĢSįō:¼ŁhQģׄļ¢`WA‡KrQÕÖPR­F‡>-ńEU³#¢y“QP]ńyČӟßĢ%U+³’āׄÖ.žųÖqĒRŌTWZ@lv2 ÆÉ¾e°¦iŖXߥB–Ēųlļ4–”5žvöB¹Ļ1Ōģššš cĒŽǜ={–ģģlćfuļŽ½ųłł1wī\‹Y nO.]ŗÄɓ'éÖ­x{{›\kĀ„ 4k֌ķŪ·3bÄ£L®®®VeJNN&##Ćčęe C-ke²$ļlÜÆÅąāe°(]KEE••¦q|^^^äēē[½ĒŠŠ Ž=Š££éL}.VÅÅÅ&īlR©­V‹N§3{W:ŽÜÜ\÷“üü|“Z-»vķ"::š'žxOOO<<<TE ø[ ˆ@š7cˆ…Ų_œc¢ÜÕ:-›óŅŲ|%Ƚ.žöŽFKELH$³.œ4sÆŚW”c’āր§Ģžž>Į¬hŪ›žōńdg>³Īk”śL3óRNóĘs׎śx: ‰„ÆSX”–ČĢ ś L{© Ž6¶(jŖ-Ō0<³BMćā÷ŻŠµļvź‹óhåģAšŹ<ą^p’ŠŖU+lmmĶźPŌeāÄ‰ģŁ³‡üü|œQ«ÕH„R‹Ź‡N§ćųńć&m§Nā駟fłņåŒ=ŚlŽĮ„Čp²ß¬Y3äry½2½óĪ;lÜø‘”””z]’ZµjĄŃ£G-ök4āāā ²tŻPüżżqqqįąĮƒ7ū–bY¢¢¢ųńĒIOO· æk×.ž|ņIf̘Į“iӌķ§N¢““Ōģ¾/^¼Hvv6=ō±-((ˆ?žųƒäädZ“ha2~’žżØT*äÅ_dóęĶLš4ÉL777|||ˆˆˆ`äȑ >ü:OE ø{ź³@š7“]„÷v³µ»ĪHx54’·ĆŪ ś^©=ņMdw«s.«U|rįyźJ¤ m\Æf“ś:ņ!–Dõ4±<Ō„øZͳ/š[Q O‹k ņJ­kŻŗ®ÅŅ}•Wė7Łļ6ķĄ¬ˆ.¼܊ažį<äéOGWĖź}†gfpŃŖ>!¼Žž>÷H,EM5EV²]½Ž¤­I&2Įż‡››ƒfėÖ­Lž<™¤¤$”J%•••dff2gĪöģŁC÷īŻ®@‘‘‘äää°`Į£ŅP]]MRR£F2Ę ܑڷoT*åÓO?å—_~!33“ŖŖ**++IJJbĀ„ €>»čcF†΁?~<ńńń( ŖŖŖČŹŹā«Æ¾bóęĶ“k×Īj…oĶ›7§}ūöüüóĻ|ōŃGœ:uŠ¢¢"JJJˆ‹‹cĈ0lXĆ\/­!“É>|8ēϟgģŲ±¤¤¤ ÓéČĻĻgŪ¶mLœ8ŃlĪsĻ=‡N§cšąĮlß¾‚‚jkk)**b×®]¼÷Ž{H„Rc6,*•ŠįƇóēŸ¢T*Ńh4=z”#F˜d'ėŌ©/½ōGŽA©TRPPĄĘ5j”™L666h4ʎ˾}ūųõ×_Yµj .dŹ”)ōģŁÓųÜÖ¬Ycœ×«W/ĀĆĆ9xšę½‚æažfN•郫{x`+‘RcåäßÕ֎ÆZ?„T"į×|}ųŹŚZĘ·B¼söHƒŖĖ«kÆ®’˜OįŽ®ü˜uŽ,mp] .OķU÷ 핐h§z‚»=dö“u5Ļfó}ęYF4nFø£+ļ6ķ`u¾F«åŒ¢˜ƒÅ¹Ģ¼g”1YYŠŖ¶_{9­]ūŒØØ(“ö!C†pģŲ1:t0ż®“H$Lš4ÉäæņŹ+l޼™żū÷óąƒšŒį…8zōØILɼyópuueńāÅV‹ ¦§§ŹÖ­[õK233III¹nRąN!ąoę÷¢rŖ”„:ŗ°¬ķĆL9sČģÜÕ֎ĻZF#•HHƬ ±BŸ1Ŗ¼FCF„‚`¹3_¶īŹŌ3‡ØØ1UBl%R&‡Eįk/7nč $–ī謌ęšÜ©=äT™fo}•öŽŽś4’–]ĶD•¬(Åߎ‘Q-ų½(Ū,Ɨ½œŚö6Ę4ŲÕńG.­Ö[„¢±ƒ SˆÆ(ĀŻÖ;{>Ģ”C‡ČĻĻG­VćććC‹-0`€Yl„5"##ņž>}šŅŅRd2¾¾¾tķŚÕlc0|ųp"## hšsōōōäȑ#ģŲ±ƒ£GR^^Ž››ŃŃŃōė׏-[¶ Ń˜ŗD¾÷Ž{Œ5Š;vpńāET*nnnŠÆ_? ··7K–,”S§N„‡‡³qćF’““©¬¬$ €¾}ūŅ®];“õłķ·ßŲµk dggćååEļŽ½éÖ­7n4‰M)))A”P R©prr²xŸ†“ĄucBfΜILLŒÅZ+ĮŻ€Ø„Ž@D%ō>†JčOŲiŃķØ©“zéMé6[[¬­1;"šwš¶gYĘYĘÄ’nl’—o:õGvÅr^Qj 4÷”ŁÓŅŁ¹-ZŽ§NģdCĄėŃA,oŪ Š•§©*(ŠTRZ­ĘĖ΁fNn4²ÓŸäͽtŠ7Ļ^õÓ~ĄŻ‡ż]‡`/µ”V§#UUN¾¦’"Mī2{‚åĪ„ČõŁSvdŃļčćÜ'żĆX×ńQ@‹q“4EM5r[üķiēę Ī)JiåāĮ«‰X”–\­‚>õĢ!꧘ķŗ–HOžčö®¶v<ųĒŽ”čƒÉœ8žŠ“\IɛŖ*'½RAN‹‹­Œ&rW|®ø–}›–h,äxưŗCæeEæļ2nß÷°Ø„.Ü=|óĶ7Lœ8‘€€zōčAHHöööŲŚŚRQQĮ„K—Ų³gååålŻŗÕh¹yņÉ'‰ēäɓ"C–ą/篨„.Tcą6šK^:=żĢ“fčćHkOZשü­Õé8R’ĒGÉĒŁq%ÜĄŠĢsiŖx+¼=]<|ˆpv'Ó`ĒU9_§&«š8VšO·?6ņQóĪōmHS'7šÖ©ŅP ©dEę9f$›Vė]9…ѧ÷2½Y'B]čc”yQYĘ“óLjpö`ŗK'cÜ \-¾xmķK$Vs¦¢„h_ģÆžšåT)éx`5ļĢÓį4qt„‰£iVœ4Uߤ%° N•ś{…N’†ƒÄH„ IDAT ƒ|Cļ“(ą.åµ×^ĆŻŻõė׳’~ Œ…(pww甇bĀ„ &ncļæ’>­Zµ2±” wĀŅ@„䟏«­6 ŹŚj‹Ė„‰1pŗÄJ@¹-RŌŚZc&§k‘I¤„;¹ābk‡L"%_SI®Z…¢n6Rš:¹įhc‹Ō†ŹŚ²PTō®ZaŽ®øŲŹp¶•郔««HWU\7Ž ±ƒ~öŽČml©ØŃP ©2ŗs2[Uė“Ę{0œī—q†˜„õf¼Šrõā®Oąl+£ĖĮõ³RłjtZ’•7wŻģ*„13յصµØµ¦¹’æĻ<Ɠža¼܊‘›s¢¬€\µŠŹŚŖ“µ8ŚŲāl#£„³-œõÖœć„łÄ•X•!½²‚ōŹVŠZC@śye©UD źr+鉂»”€‚æœ]Y 8ö ļ6ķĄCžžt÷ō·:6_]ÉźĖ™~žøÅøš2Æ7‰bvĖh¤6wZ@ nB » ²ŲU…TJ°Ü7[;\leŲJ¤Øjk(ÆŃP\­¶˜™ė~ążf™Łā;-†@ ·”€‚æVĖEeŁ㮢½›73šw¶ŚŸQ©`Eę9rŖ”(6Æ`/Į½ŒP@ą631“ÕŠēŪ 2~b×uc’@ øW‘^ˆ@ žJś4 “Ų~AYʓq;„ņ!ųĖ8ž<ļ¼óū÷ļæÓ¢ī>żōSęϟ§ÅÜD n#N62œ-ö͹ō§ÕōĶĮĶpéŅ%ę̙ñcĒī“(fœüšC³5jkk™0a­ZµbҤIĘvFĆźÕ«łķ·ßČŹŹB­VćźźJŪ¶myöŁgiٲ%jµš‰'z,€Æ¾śŠuėÖ0zōh¢££Ł“iæžś+}ō‰‰‰¬ZµŠŌŌT\]] gĈDGG›Éwžüybcc9}ś4ååå888Hß¾}6l66¦5w ‰åąĮƒ!‘Hšōō$::šQ£FŃØQ#“ńZ­– 6°{÷n.]ŗDUU...“jՊ#FŠ©S§ś_īuØ­­eķŚµlß¾¼¼Ģ;ļ¼CAAgΜ!>>ž¼¼<¶mŪ†N§cƌ899”ÓéŠét|üńĒģܹÓŲöüóĻ›¬½sēNöģŁĆåĖ—ILL¤  €õė×#•JłąƒŒć yå•Wšńńįȑ#ØT*Īž=KNNEEE 6Œ°dÉ朣³gSTTÄśõėÉĶĶ%>>ž3gĪP\\̌3ČĖĖcįĀ…Ęń{÷īeóęͼšĀ äēēsīÜ9N:ENNĒŽĆŁŁŁ¢ÕØ”:tˆõė×Ó§O 9qāqqqœ;wެ¬,š5kĘģŁ³Ķęķܹ“ńćĒSPP@RR©©©¤¤¤ɖ-[8|ų°qģo¼AAA .$77—øø8RRRČÉÉĮĖĖ‹ŅŅŅ›–_ ø„"·™+®VģīNeTpūqttdćʍ“mŪÖÄmhŪ¶mųųųšŁgŸįääd2§OŸ>¼üņĖqäČ“¾ččhbbbL\­üüüųüóĻŲ“iÓMĖj°”Lš4 {{{“¾žżū3zōhBBBnjķ‰'Ņ»woć’% C‡„WÆ^¤¦¦¢Pč榶oߎB”ąĆ?¤K—.&kø»»³hŃ"£ÕĘ wÓ¦M:tØÉs±µµåõ×_§OŸ>øŗŗšŻē«Æ¾jöģ;wīLLL ‘‘‘fŹ_CÉĖĖ£cĒŽ¼öŚkČå¦ß¾¾¾ōķŪ—ĀĀBŹĖĖMśš6mŹĢ™3–€ŠŠPŽ|óMØŖŖbēĪFYėŽ³Hæ+ø­ˆ@ øĶjŖha”½‘œU¹…ĮżFDD„Yü@NN<š€™_æV­ZpįĀzōčalļܹ³Åń:t ##ć¦e5lŅ8ĄSO=eÖætéŅ›^»k×®ŪŃétäēēćģģLjj*mŪ¶µ8ŽĒĒwww233MäNNNęüłó“haśéāāĀ®]»LŚ ÷yšąAŚ·oTjz†kÉ:q# :””C‡ZģS(FEB”P˜(F>ų ‰2aĄąž—ŸŸčŻō4 ķŪ··xĪ;[\G ų; ˆ@p豌‡Ģ®–Ü*e Œ;r—Łćm瀛­e5ņՕ .f×ČNN#{$H(ŌT’§®¼•[4€¢ź*‹ķģ,¶ ī?źžfŠh4ØÕj³Ó÷ŗxzzPQQa±żZœœœ°³³3nRo†gŸ}–/æü’§Ÿ~wwwš4iB`` ĮĮĮÓ­[7ŗuėvSk[»×k7’%%%Œ3ĘĢ c@„R”R©Œ’Ÿ0aO=õųūūJ`` 7¦Y³fōéӇęĶ›Ē2„éÓ§óśėÆ3mŚ4BCC &((ˆ   :wīLŸ>}niæk×.žżļ“””DEEUUU”——S[[ku޵gdCw%ó^AA€‰ņR[[[ÜŻŻoZvąF ˆ@pÉ[įķ ®o”Õéˆ++ą£äćlĖ7?t²‘15¼-#7£¹“é/ pNQĀ’ō3|“–€öšŌÆ`Lp+¦„µż’öī<>ŹņŽ’’kf2Ł÷„‚aG‚²/"lEPE{Žčq£ŚVh}ŌÅå'ŠJõˆmUĄŠØĖŽ ‚Ča „@Ⱦoß?†{˜5$’ļēć1ĢÜ÷Ģ=×Ģ@ræēŗ>×EĒP×ĒīČ?Ć“Ż=žÆCh$»Ē¤nų’oOóśZž«U'žž2˜‚Šrš/›CaeyķŽ„+Čé2ļ$NC°¤ÅÅö/ÜgrrfœtŗßĒjõ½žŒÕj„¼üĀ’Ÿ¶iӆŸž™÷ߟ;wräČvīÜÉ7ß|Ci©}øįäɓyė­·.ų9Χ°°€¤¤$ŸEīmŚ“!**Źq{̘1l޼™?ž˜““4Ž=ŹŗuėČČČ ²²???žłĻ:źR¢££Łŗu+óęĶsŌŠģßæŸ+V8>›‘#GņÅ_\PY“h£G&""‚”C‡’œœŒÅb!""‚ˆˆ6nÜČܹs=WŪēŖØ°/rz¾ " AD¤‘żĻUWÓ!4’¢Ź ֞ɠøŖ‚P‹•nį1ōŽŒcQÆ_sĻÖåü+}Ÿć1f KūŒd@“}v ‚ŠrҊņ(Æ®Āßl¦]H$B£xµĖ®ˆeŅÖ.Ļł\ǾLmkļ†Ļ­(ć§¼,J«*‰šóēŚˆX>ėy#܆ķ)Čį?YĒ“Ą„–ķ}±-ģ3c,Ģ8ØšįĆé2ļ½LŖ‘š½"Ęɶ7Ę>÷o¹oæŻUVVRTTDlll­Śąė¹yź©§\¶UWW³oß>&MšÄģŁ³łŻļ~GŪ¶mkõ¦³˜˜G݌»ŖŖ*²²²÷¹”T„.ŅČ:„Fņįńż$,›Ćuė’ŗįKś­ż”ęĖęš~ś^Ģ&Æv¹Ž˹o¦~ÓŖ¢›S\YĮų-ˈ\śOŗ­śˆž«?!å?µäŸ<µkÕĄ½-;Š?źÜ4¦C#ł½ķžŗw3Ķ–¾Ėõė>#uƗō^óo’—æĻśģ““ ‰šhėŪGģS3ŽiŽĘ„=†(kCcķćŽēŪSŸoÓe%«ĢGzMš†€€š5kĘńćĒ}ŽēŲ1ūīC®Œ w¤ŗŗšęĶĻżŽ õĀeŲ»wÆĒ¶qćĘ9jIœ™L&Ś·oĻŲ±cū°ŽT×°8gm%''ö:_FĶ}÷ŻŲCFŪ¶my蔇<īgµZéßæ? ąųńćŽöGy›ĶFI‰gęUW]ń ļļQm:tˆ¤¤$Æį|†µÉdāŠ”C>_ÓP/‘ś¤"ŅČN•ó_Ū¾óØ÷Č«(ćæ¶}ljŅ"bżImÖұoLsū¼ō/§mćĆćū©tū^RUÉ’ąG<Ąø›cßķ m±˜L¬=“ĮÓ{7Qī¶īDzI!¶~ėqL€OO¤qŖ¬˜0?+£›'{ģæ9>«ÉLzI!+³Ņėō>\I|րų«Dj6`ĄöīŻė2›“!??Ÿ9sęąēēGļŽ½]ö-]ŗŌQÄģlęĢ™ <Ų±­}ūö:tˆ5kÖøÜ·¬¬Ģ1u®3???¶nŻźuŻ8·ą`\\œĖö°°0ą\hŗ7Üp`=ĘP#g«V­ā‹/¾pŌ€X­VŠ‹‹Y¼x±×°UZZŹŽ; qŌX’––Ęwß}ēµ ?üš€ĖäŸ|ņ ü±Ļ^gQQQ;vĢko՞={Ļ{”-""‚nŻŗńĶ7ßx]ēcƌt\‘ ”!X"ģŪSĒ|U*­ŖdłécLHlOˆf|–a’¬s˜żŪĶå>†A–:ĘĶńɤ„ėRļa’ćøä”ļYoå³-ļ4Ż#\gį)­ŖdĪŃ=üĪv [¶ē§aa·~õÆō½^ŒŲł¬QˆœĒŌ©Słź«Æ9r$ƒ ¢uėÖÄÄОžĪ·ß~KFF?ü0ńńń. £’žŒ9’Ö­[SYYÉŖU«Ų°a]»vå¶ŪnsÜwҤI¬X±‚aƆ1räHڶmKvv6+V¬ ŖŹs”Ģūī» ŠÆ_?RSSIJJ"**ŠÜÜ\6lŲĄ÷ßO=ś(K—.%&&†~żś1qāÄ:æ/)))Œ?žłóēÓ¶m[RSS‰‰‰”¼¼œĆ‡óõ×_cµZ‹ųüę7æį™gž”}ūö 2„ųųxBCC9uź‹/ęšįĆL™2ÅQc1aĀf͚ÅčŃ£2d6›ččhņņņų駟X¹r%ÉÉɌ1ĀńwÜqUUUģŻ»×gφįöŪogÓ¦MōīŻ›1cĘGQQ»wļęóĻ?'::š‚‚rssILL¬ó{š×æž•[n¹…>}śpŪm·‘””Dvv6ß’=Ū¶ms„B‘KMD¤‘„—ųĻ püģ~ēõp?ūš'_Cy §ĪÖ“ vl3Ž“QZäõ1†c%…ąļGvń¤ķ†Å¶¤y@°ć8a~VR›%0ļŲ… AøRųśS5 öoĀ}öéӇ•+W2}śtÖ®]ĖņåĖ{Ńy×®]yź©§xōŃG÷·Z­DEEńꫯ²eĖęĶ›ēų†=**Šū￟ēŸŽ„ųxāĉ”——óꫯ²hŃ"JKK fäČ‘Ģ˜1ƒ>}śøz>œÆæžš—_~™•+Wŗ¬SѦMžēž‡§Ÿ~Ś£XzŲ°a¼šĀ ¼õÖ[|śé§TTTPQQĮĉ $**ŹētĆĮĮĮDEE¹Ģ†5wī\ŗwļμyóxļ½÷=!aaa\wŻuüłĻvY#ä駟&>>žwß}—O>łÄ±~‡Åb!%%…É“';ÖŅøęškX¹r%/¼škÖ¬aɒ%Ž}‰‰‰Lš4‰§Ÿ~Śe ØØ(²²²¼¾wæżķo)++cīܹ.kr$$$šųćÓ­[7yäŅÓÓéܹ3‹…ØØ(Gż‹;ć³wnĻØQ£ųģ³Ļ˜>}:sēĪ„ŖŖ ³ŁLĻž=łśėÆyžłē}æ©O&ĄŠ=ˆX@ ˜<Š©S'ÆŻtW¢]y™ÖrZӆ2yĒ:¶äÖī›4=‹ūÜčĶZńĒŻy~’Ÿ÷ūS»<Ū”7Ÿf¤1vóR,&å7=ˆ h»ā_ÅāĪF4KbIŸ‘*ʧõŠ÷ŲsĆxڇDrūßšń‰>ūN·ø/©#/§mćw;×¹ģ[Ńo7Ä$ņÄĪuĢLŪĄųÄv|pķ0~Ģ=M÷Õ×įøņÜÖĀĘĒ=†{l?Z\@«åó”EēXĶ&ÖõŁØmp`ö£kdóóßń UPP@EEE¦O-**¢ŖŖŹēlQĪŖ««ÉÉÉ!<<¼ĘŁ·œRVVFpp°Ļ)qŻUVV’——W§ĒŌÄhwPP×)½ÉĶĶ„ŖŖŖÖÆµØØˆŅŅR=4|śé§Œ?žŒŒ —øĪ§¬¬ŒĀĀBĀĀĀ|†°‹UUUEnn.Ó‹ŌäąĮƒ“iÓĘø¹8d™ĄÉ³?OŻ–äE@ PTØD¤‘oØRÅŁ!&ģßYü0¾Gō įŹröDzjĻĀĀó=oMūß>¼“b™˜ŲŽ@Ę6·’2š—®Žóń÷ńĒ>ÄOS`JŻŌ&Døóõ¹7&“©N'Ī€KŻDmßęח iwD„ēÄ5 >ļ{łĪ;ļ°`Į‚:·Åßß’:=¦®Ģfs½¾ē"u”"ŅČĪWxnµ’*Ŗ“'(uš„$ÄRóįą³3Uå9Ķń_|öńaē9Ł­©aaĘAN•smD,]Ā¢9X”ĒÆāZQQ]Å|·ŗńäkؕ¾ƒ¹¼,Z“ر› Ņ$éļH#‹Øł“Ų³%½Ä>‹Jyu•c•óHkĶC¢Īīw^ŻØ)‰9Oši^C»J«*yļØ}J͉-Ūó«øV[üXvźŲykK® ņž­uNyÓę)""r)(€ˆ4²Ń-C„ܙ€AŃ lĖ;Wļ³3?€¾QńŽꊒģž4§:ć8×G·šłøhkׄ׼0Łßģ¤ø+”··°/.¦įWµÓ5ÜūB_i5Ō󈈈\.@DYrpO·ļ…{1SŪvw¬’¾ōŌQǾE™‡x²M7ŗ†y?™Ń,‰;ķÓ>:O¹kLå;2>™1ĶŪx<ĪßlęĶ®×ū¬S0ģ+Ģeåét’‚B¹­Eņ*Źų<ćāŹŗų›Ķ. C:ۜ›ŁĄ­ixŖid„Eüķzp{‚Ÿņ²H/)$Ģϟ~Qńt µ>æ YNkGüķąvhՙVA”l½~ßēd²æ(—¢Ź Ā,Vŗ„E“rö[öµg2Xč 6ęœdĮńżÜ‘Š–÷Į†ģ“lĖĖ¢Ø²œęĮ ŠI !0„ŒŅ¢‡a}eō!±‰˜M&ž}"ĶQ§"¾ŻŪ²#Į>jw¾=Ļŗ."""—‘F6eĒZF4Kāž–hā:•f^EĻīū¶ŗlĻ­(ćŗu y柁Üw}£ā=†c•TUņīŃŻLŪµ*·­&m]ĮÉŅb&_ÕŁć±%U•üeļ&J++y”SßŪ¾$óÕŲ{k“öĒłEųłó×½¼ī;YZĢw§7p‹DDDžˆH#yģē5„ūł³Æ0—Ē÷óū]ėéG¬ åÕU-.`sn&e^Vūš£6-&ŚĄµ͈¶źg%§¼”„Eü˜{šŅ*ĻéwĮ2ß±†?ķŁHļČ8šSU]MFi›rNQXYN3’ ¾=}Œ“„Å>_Ć}I1{ sųĻ<×Ä̹f-|ō*½{t7åÕē›XY¤a¤§§SZZJ@@ĄÆŗ-"ā‹ˆH#ŁW˜ėr;«¬Ä„V£¶Ī”—²ü‡īT”³ātŗ×}§ŹŠ+©Ś…D0µmwN•“Źķ 6žŻ÷ƒG/‹œc^»ś:F7oķu^EƜ]OE¤!$''SZZʉ'\¶oŲ° &pą€}‘Ņ'Ÿ|’3f\šó 8ļ撞ŅŅŅ‹jÆ4®]»vѹsg"##ÉĪĪnģęČe@Eč"Rk1žÜŸŌ‘§l×rWb;,&3Æü‰÷5üŖFOŚ®įŃä®>÷Oß·Å#ģ‰4†’žļ’ꥁLœ8‘7Žxƒ±cĒ6v“ċŋc³Łxļ½÷źķ˜«WÆĘf³ń·æż­ŽŽ)ā‹z@D¤Övågsėę%4ó¢ø²‚9'=zrÄÓ[‡wŠ3¢w$“õŲ·öL/§mõņ(‘†U\\ĢĻ?’Ģ€˜;wnc7GjPPP@ZZ¹¹õ÷ū·ØØˆ““4Æ=ķŪ·ēĢ™3˜|L/RW "Rk¹eŽi|„ö *ʹsĖ2VœNgÖÕS(ŹcÜK©Ōš5ń¢²²’Ż»wsāÄ üżż‰‹‹£}ūö˜k˜"ūųńć9r„¢¢"¢¢¢h×®””޾4”––’žžī8ń '-- €ˆˆbb¼OõķŽÖ;w’™™IHH]ŗt!,,¬ĘĒdffrčŠ!ņņņ¦uėÖ“hį{}¢āāböģŁĆéÓ§1›Ķ4k֌:ąļļļq܂‚Zµj…ŸŸēiNFFEEE“nŻ“ÉDqq1'Nœ 66–ššpŽ?Īžżū $%%…ĄĄs‹¶¦„„qšąA‚ƒƒéÖ­ĮĮ¾g Ü»w/™™™TUUIēĪ=Ś“——ĒéÓ§iŃ¢AAA?~œ={öBrr2qqq.÷?rädfڧģĪŹŹr|V‘‘‘DGG{¼GŽ!''‡ŠŠP’““iŽÜušcĒŽQVVFFFŁŁŁŽc†‡‡‹Åb!;;›€€"#]'K1sąĄrrr ¢U«V$%%yÜļčŃ£˜Ķf)//gūöķää䐘˜Hrr25/®+— Įi oŁÉŠ _p¼¤ŸóĻ0lĆœŠŹń⦪ŖŠ©S§ĶÕW_Mjj*ƒ ¢S§NÄĒĒ3sęLĒ¬[·Žž={’˜˜Hæ~ż:t(Ż»w'::š±cĒ’žī½Ö `ĒŽŲl6zöģ œŽc³ŁxžłēĻŪŽ·ß~›ųųxRRR6lżśõ#&&†iÓ¦Qķ%\o޼™~żśOŸ>}HMMeĄ€$$$Š£G6oŽģr’āābzč!¢££¹öŚkIMMe芔¤¤¤ļŃĘß’ž÷Ųl6Ž=Š7÷ß?6›ĶQ—²vķZl6/æü2·Žz+-[¶dŠ AōéӇęĶ›óžūļsōčQ®æžzl6Ɔ £’žÄÅÅy®4gĪ’’’芔dŠ Atė֍ččhžxā —z˜>ų›ĶĘĀ… ¹é¦›HLLdȐ!ōéӇųųxČįƇ÷7ŚšČ#šĢ3Ļ8>«—^zÉqæŻß ~EIDAT»w3`ĄāććéÕ«©©©ōė׏-Zн{w~ųįĒ}żė_c³Ł˜4i3gĪtó/ł ÕÕÕŲl6n»ķ6—×ŗ{÷n†Jll¬ćy®»ī:ZµjEēĪY±b…ĖżĢÆ~õ+>žųcZµjE=:t(;v$66–^xĮėg&—õ€ˆˆ4 5gNŠ}õĒUV_QŽŲĶ‘&č•W^įÅ_äśėÆēĪ;ļ$>>ž’’:Ä[o½ÅO<ĶfcŌØQ€ż›öįƇššĆÓ©S'bbbČČČ`Ŋ|śé§bąĄōļ߀¾}}OÅ^TTÄšįĆ9vģ·ß~;ƒ "&&†“'O²gĻžń0räH¶oߎĶfs<īĄLš4‰{ļ½—žżūćēēĒĻ?’Ģ›o¾É“iÓ芔·ŽzėE}–Ņō)€ˆˆ4°š¦6Y°`-[¶äŪoæÅjµŗģļūµpįBŽ=Źļ~÷;—ŽCļŽ½¹÷Ž{yēw˜>}ŗc{QQļ¼ó÷ŻwŸĖż ÄšįĆY“h‘Č@C°DDDšģģl=Ā@=X¶l“'Ovl[æ~=±±±įĆ`ōflŻZ’“lٲ…””—ša5j”G½Ą¶mö馯‡ņŒķĘ0¬ü‘²²2n¹åšŠ¢E ®æžzNŸ>}QÆ`ųšįõ$½zŁbŚ“i^÷GEEpņäÉZӛŗ~–†   ʏļq’”C‡b±Xõ'rySˆˆˆHŅ«W/,XĄż÷ßO’žż½­Zµ"$$„aƆ¹Ü’ōéÓDDDšķ·ßz=žQ ‘““sAķŁ¾}»ĒÉj»vķˆ'//Ļ£ØŁ`6›IHH`’žżŽmʬM¾ Ūćććs'ĒĒŽŁ×8Ŗ©8}éŅ„µ|%5‹ˆˆšŲf„@椯™Åbq¹••Euu5ÕÕÕ>?‹üü|Ąó³šµŲ£ŗź²ŽJ||<ćʍ桁|ņÉ'œ9s†āābJJJČÉÉį_’ś`Ÿ8ąbœļ³ &,,ĢćßNLLŒ×0i6›±Z­Z3ę ”"""Ņ„¼ņŹ+ää䚎{ļńī»ļŗģk޼9£Fā…^pœgggSPP@jjjĒ-*ŗ° ž}öY>śč#—m3fĢą®»īØq¶+÷wć<((ČėżCCC1™LŽ“P£ĶF=HSfō„|žłē|žłē5Ž×ż³š6[ׅ*++cҤI|ųᇓDDD””ä³@æ.Ī÷Y‚żß†{ ØĻ×*æ\śW ""Ņ„“hтŋSXXČ”C‡8räĒŽćšįƬY³†·ß~›¢¢"ęĶ›€Éd¢K—.Ģ™3§Ęć½ u5zōhZ·nķ²­wļŽŽąQÓ7ÖĘIŖ»ŅŅRÆ'®%%%TWW;¦6†%•••]PŪ½©ŖŖŖ·c93ÖČøūī»łķo[ć}‹²ėŪ»ļ¾Ėüłó¹õÖ[™6mmŪ¶%88Ų1„ģĶ7ßäᇮ·ē«é³)..&!!”ŽžK. """MDqq1‹-¢uėÖōģŁ“.]ŗŠ„KĒžźźjŗtéĀāŋی!0=zōšzĢģģl~ųįÆCŒjć®»īrōvø Øqh—±^…ĮØ ÉĻĻ÷@ņņņūśp®ē#++Ėēs<šĄ,_¾œ-[¶į˜uĖ×£ćĒū<ÖÅ0>‡ŸŸÅĮƒ9pą—¤ Ė—/`öģŁ4kÖĢcæń_,ć³ōu¼ŹŹJ Ÿ„ˆ3”‹ˆˆ4&“‰;īøĆēś&“‰ČČH ĆkRRRŲ·oŸĻBģĻ>ūŒŌŌT—ŠR_Ś·oĻ–-[(((šŲ÷óĻ?;·3tźŌ €7z=Žśõė=.F”÷ŖU«¼Žæŗŗš•+W’••å8Ńmٲ%€G”7Ą”C‡Ų»wļy_ׅHHH &&†7z]’ģĆŁRSS9räČE=—QR^ī9•·Ń#įkØÓ¦M›ź|LoĪ÷Yn޼™²²2Ž3Pi2éŅ„ ‹-bÖ¬YģßæŸ‚‚***HOOē•W^aƆ ōéÓĒ1äēž{¬ŒQ£F±bŠΜ9CUUYYY,^¼˜§Ÿ~«ÕŹČ‘#ė½½wß}7łłłÜyēģܹ“ŹŹJrrrX»v-&Lšø’øqć0›Ķ<śč£,\øŠńś233Yøp!=ö&“É1ƒRrr2dńāÅL:Õ±rvvv6Ū·oēį‡f’žżÜrĖ-Ž÷Ƙ¹źÉ'ŸäŪoæ%??ŸÜÜ\V®\ɘ1c.Y‘³Édāž{īaŪ¶mÜ{ļ½üųć8V’Ē?žĮūļæOėÖ­¹ęšk.까’łóē³yófN:åč‰0¦žĖ_žā„ÕÕÕ:tˆ?żéO|öŁg€ēŠ9昒ž÷æŁøq#™™™ŽBson¹åųӟžÄ|ĄīŻ»)((ąŌ©S,Y²Ä1Ķīøqć.ųuΟ?›ĶĘ=÷ÜsĮǐ¦IC°DDDš·ß~›Ń£GóŲcyŻß¢E ^żuĒķ±cĒņ‡?ü3f8¦muęļļĻkƽvI¾‰ž2e kÖ¬aŃ¢E|õÕW.ūRRR8p Ė7ä×\s /½ōųĆ3fŒ×¶Ī˜1ĆåżwŽį¦›nāÅ_äÅ_ōxLJJŠĖö‘#G2~üxęϟļQ˜?dȆĪ7ß|sĮƹ&’ūæ’Ė®]»˜7ož£FĒYLL óęĶóŗ d]ōźÕ‹kƽ–-[¶8×u×]ĒźÕ«yģ±Ēųč£˜5k³fĶ" €ŠŠ *++ń÷÷甇ā7Žšč1ėܹ3 `ķŚµŽSRRÓķŗKJJāķ·ßꁹī»ļöŲo±X˜6mšĻé”k#//““4Ś“isĮǐ¦IDDD¤ éׯ‡bɒ%lß¾ÜÜ\ŖŖŖˆˆˆ WÆ^ÜpĆ „„„ø<ęÅ_äĮdٲe}ŗĻįiūŪß\f<»žśė™={¶ĻiŠå—ĖX±+Ӏ:uźÄĪ;±yMĒ®¼L +źoŽś0yĒ:¶äś.Ģ©+«ŁÄŗ¾õ?TēB˜żčé} ixtž¢bp Č2“gž:»-ČŠ€ ØP ˆˆˆˆˆˆ4i0 """""Ņ`@DDDDD¤Į(€ˆˆˆˆˆHƒQ‘£"""""" FDDDDDDŒˆˆˆˆˆˆ4i0 """""Ņ`@DDDDD¤Į(€Ō’Sc7ADäŠc6éwƈČåF¤–šāĮ“>>©_&Kc7ĮESüŻ+""Gg°µdi‚'ūׄĒ4vDä2sMDÓś½Ņ÷ŠˆČÅŃoöZjŠßĀŻŠ†ÖĮ”Ż ¹L„Xüx"¹Kc7ƅ„ žī‘‹ć×Ų ų„š77­a f ļvČŪG÷²ęĢIr*J»I"ņ lń#%,ŠGZu¦E`Pc7ĒESüŻ+""G¤–-Mó­ ±ųńŪäĪü6¹sc7ED¤Ž5Õß½""rį4«–-ÖĘn‚ˆČ'Ь߽""—Z 4ė[8‘† ‘ĖŽH-™M& i@V³E5 ""—!:ó lģ&ˆˆ\1Āü» ""r (€ŌAøU EDJ˜~犈\–@ź@ EDNøz@DD.K uąg2źēßŲ͹ģY¬*@¹L)€ŌQL@Hc7ADä²ÜŲM‘KD¤Ž¢żƒ0ajģfˆˆ\Ö¢ż@DD.W ud1™‰ō×lX""—J˜5@Ó\Ę@.@óĄ°Ęn‚ˆČe+^æcED.k  ÄĻ_óӋˆ\Į+‘Võ2‹ˆ\Ī@.P‹ }C'"Rߚ…7vDDäS¹@įÖ@MÉ+"R‚,V¢üƒ»""r‰)€\„VĮQšKD¤ž“ ŽŌļT‘+€ČEö³Ņ,0“±›!"ņ‹ćL˜Uµu""W‹”ŽUÓEŠˆ\0‹ÉLĖąˆĘn†ˆˆ4‹d1™I‰jģfˆˆübµ ‰Ō9""Wza ŌŚ "" Y@1Zõ\D䊢ROƒ#ÕŚ ""µd±’ŁŲĶ‘¦ROL€-4š³_c7ED¤É³š-“ ‹ĮlҼW""Wzd5[h«±Ģ""5°˜Ģ“ ‹Õ6""W(z`ö£}X,“ŽZw&LŲB£ ¶X»)""ŅHt–| Y¬“‹ÅO!DDÄĮl2Ń6,†pk`c7EDD‘ΐ/‘?:†7Ć_ƱDDš3™i֌…‘+žČ%h±Ņ1<Ž 5‘+X€ÅŽįq„śł7vSDD¤ P¹ÄüĶ:…ĒŚŲMip‘žAt#Š¢‚s±Ó_„`6™hIˆÅŸĆEŁTUW7v“DD.)&ZGÆ/_DDčHŠ &ŌźĻ‘ĀrĖK»9""—D˜_­B"5üTDD¼Ri`f?Ś…Å’S^ĀŃĀJ«*»I""õĀj¶Š2(‚˜€ąĘnŠˆˆ4a $ŅHxD<™„œ,) ¼Ŗ²±›$"rAüLfāC‰ ÕH""r^ Čl2Ń<0Œø€PN—r²ø@=""ņ‹a5[hJ³€PĢ&Sc7GDD~!@š³ÉD\@(q”T”’UZę²"*U¬."MŒŁd"Ģ/€Ų€"ż1”ą!""u£ŅĄśź@Rp$¹å%䕗_QJI„zFD¤q˜ż³n ĀØaV""rQ@š(³ÉD”QžA”UURp6ˆ”TVPRUAie•ÕUÜR¹\XLfĢ-V-~Züõ Ąßli즉ˆČeDäĀßl!ŚßūĢ2•ÕUTUWS…†l‰Hݘ0a1™Ō«!"" Fä2`1™±h¶ˆˆˆˆüč+/i0 """""Ņ`@DDDDD¤Į(€ˆˆˆˆˆHƒQ‘£"""""" FDDDDDDŒˆˆˆˆˆˆ4i0 """""Ņ`@DDDDD¤Į(€ˆˆˆˆˆHƒQ‘£"""""" FDDDDDDŒˆˆˆˆˆˆ4¹PÕ>.>ł 5>HDDDDD®x5eŸAÄ=€w¬ØØØØ—–‰ˆˆˆˆČ/Ÿ[>Øvśé+Œxģ3ūŲQPPPpэ‘ĖC~~¾óĶJ\3DMưŪ| Į*9ĒGńUās–·ŌrģÄķIDDDDDä uüųqē›Ų³CÕŁ‹Æ0ā’7¼õ€T‡Ŗ««Ł»wo½7\DDDDD~yöģŁc\-ē\1.ĪAÄ9øpÆ1īpųģƒŲµk×%i¼ˆˆˆˆˆü²82ĪŹ³—*ĪßāRāœ\Ё#6lø“ÆBDDDDD~Ö­[g\-Ę3xø‡÷ œ«qŸB«ų`åŹ•—öUˆˆˆˆˆH“·’~Ž9bÜĢē\čØ8{©Ä5”x+JÆöÖbō‚|ö!XĒŽ»”ÆEDDDDDšøeĖ–W«± —šBˆ×£»d=P^]]Ķüłó/ķ«‘&Ķ)cÆ©)€8ÉņØq~eÜ9X0gΜKürDDDDD¤©:|ų0kÖ¬1nę`åg/eNׯCˆūlXÕī= Ī#•ĄW;vģ`õźÕ—ōE‰ˆˆˆˆHÓōĘoP]] ēÖ tĘ„V!Ä}ē ą; `śōé—ī‰ˆˆˆˆH“tęĢŽzė-ćf.PŠ=p”ŗ]7Bˆ·šįą< –ū¬Š³ś`éŅ„š’WDDDDä óņĖ/“ŸŸö¬É¹ąQ ”œ½·{A¼Õ€ų‚eT®WŸ§yä*++/õk‘&`’žż¼ņŹ+ĘĶ| sĮ£×ā<Ė}Ē, `r»˜.Ęž<`š‰'ˆ‹‹£wļŽ—ų„ŠˆˆˆˆHc»ūī»Ł½{7ŲCÄaģ!¤ąģĻ<·Kö€b£'Äe(–Æ•ŠÄbt”,6<õŌSģܹóҽJit³fĶbɒ%ĘĶÓŲ†ŃóQäöÓ9t8÷€Ōj%t#”ÕėFQÉ«@aaa!·ß~;EEE—脊ˆˆˆˆHcśį‡ųżļoÜ,NbEN—B§ėĪưŒį^„īs%t÷#€^ŖwģŲĮwÜAEEÅ%x¹"""""ŅXŅÓÓ3f „„„`ĻGq œnåŽbo«”ö°×y?½ÕƒXĪ^NQ@‡½{÷rüųqn¾łfL&ćį"""""ņK•••Ő!CŲæ?ŲCC:öu? 9Wė‘{öb\7ˆDœ Ń}šB܃Č øźĒäąĮƒŒ9‹ÅłP"""""ņKrāÄ FŒĮöķŪM'Ļ^܋Īs8BŒ¢t÷āsoė€8fĮ2a/ŪÜgĒś č4ß¶m[·nåę›oĘßßæ>^»ˆˆˆˆˆ4 ;v0dČöģŁclŹŽcFųČu»8Ļ|åÜūį\ā²!x_ ŻŪ‚„圛ļ·čģ>¬ųņĖ/éŁ³'Ū¶m»č/""""" gīܹōķۗÇ›2€cųžn×9x8 ×“”ƒūø)ē^S ·ąņ Ų²²²LsęĢ!00^½ziH–ˆˆˆˆHvņäI&OžĢ3Ϝ‡^y+>‡:ē}Ž$t!A@®A${é \ “;ū8Æüżż ©”9"""""āMNNÕÕ^G<Ź€,ģėz䟽mĢrk„ēb„ēŪF͇·ŗŸė~ø;_aFmCˆó,£G$Äégö^‘¶@2ŠˆÄŽ£""""""õ«{`ČĮŽÓ‘ùå5Œ%6ÜH”ÓÅ9tįÄrå+|Ky€šē՜ !Īt揑vŒuC*Ī6ŖĢķEå;±–@ ū­ģAĘ{°1ć9°3U“‹ˆˆˆˆŲĻōįOŲϽ ±Ÿ‡ēēĘÅνƹz1ē†sčpĪõŽĀG=†Śö@8Ä=„8˜0Ņ•s1BH Ó%ū<ĆÖ³?Īõ°=.ŽÖ#;ēēEŝˆsļ‡{qī0(v»8÷zō„6ÄčńB¼­œī@œ»vŒąąt1z=j@¼M,""""r%r_诮Äy–·‹±ß9x8›{ ē !uéńB¼½Hē”XĘų²\C‡<ÜƇq1»]Ō"""""ā{ˆqžn#4”ćB܃ˆsąpīń8_ÆG­ĆŌ­Ü=„8ׇøæ`÷^c(–?žĮĆ=|8÷~ØDDDDDÄ»Śō€ø×i;÷„8Ÿ«»_wļńØt;¦{čØUų€ŗĻBU—ž÷īc «Óu÷ąįmų•łģóøg #""""r%šu¢ļÜį<#•{!ŗ{q$n_ĮýޣÖį.üÄŻ[O„so…1]Æó“½~ēłéü˜ŗ +€ˆˆˆˆČ• ¦büōÖ āŽAPÓĻJ§ūW¹Ͻ u pń'īīAÄłā܃į0¼õvXÜćm蕂†ˆˆˆˆˆ'oĹÄ9Pø÷ŠTyłéüŲ‹īõpV'ōŽzC¼…³Ūuo÷šŪõśj³ˆˆˆˆČåĀ[-ˆóu÷!YŽ.Õxfå­Ęć‚ĆŌļÉ|m‚ˆ{Ž‹ˆˆˆˆŌMMEéŽzE|õr\’ąaø'õŽV-÷H¼mó6ÜJįCDDDDäü¼†šĀ…Æm¾ŽyŃ.õ‰½Æį-hųśéėx"""""bē-$ųš*÷|?k:ęEkČzo=#ē»^Ó6qUS©éŗÆĒÖ»’9§ļļYAIEND®B`‚libwebsockets-4.3.5/doc-assets/smd-proxy.png000066400000000000000000005635711476025525100211300ustar00rootroot00000000000000‰PNG  IHDR”hś×F pHYsōōŌ^AtEXtSoftwarewww.inkscape.org›ī< IDATxœģw\ל’?°Kļˆ4„ŪQQŒ Ųk®Šš¢Ę4ć5ŃÄū^oīż%Ž“›ž˜Ø‰‰šb¬±kl؈b×XŃXD©*mĻļu&3³3»3 Ø Ļūõš×īĢžóĢ™³3gĪóœē<Ē6u8fī8AAAAŌ¦įøŚc÷­4«Q敾›Ėoé7‚ ‚ ‚ ‚PœĀ.ż©ų®Vvƒņ ”dK#ūrßÕ”ŽAAA„Z,äĖ}×b øļ†€ū­(«Uüµ~*É&‚ ‚ ‚ ˆŗbNŁWū)żnīXƒp?•fsīūB…^ĶwsŸjĪMAAABŌøż›ūTó]é\÷Åp?cs£žę”}é&żMNŽŅłŌ”‰ ‚ ‚ ‚h<ØQŗ-üĖ)ūŅ 2ߕĪß †}C ‡ņØæZÅßVįø\^éłHÉ'‚ ‚ ‚ ¬Aā/ü.Ü 2Ē£ŽjIéWJS/4¤ĄœņƤōK~[3橙@AAAÖ`ÉŻ_Ié·1ó›Ü9¤JƒJQ¶¤ü›ķ~ʳ4E@īü–ŹGAAA4.,)Łj”‚/÷)=fiš€–ņi¦!<,EõWŻnrĒŌŌN AAADćFMŠ?ī»å_øIŁČ¤·tīz÷Øo€„ČžrJæš»b…_ŗoĪ#@z.šø·¹pątos«‡k%‚ ‚ ‚ ŖÜPzļó€r…j4Ź’Sž…ß•Fś¹­Vfß 2ņ„ē*žõjØO€9å_:ņĻ)īB_'ó)÷»œ!Ą@-„ÜŪZš¬Ēė#‚ ‚ ‚ ž\ŌȐ-Ų.ȄQ1—¢üOĶØ­Ģg-Œz«Š(üa0Üū]zŽ1Ō—+¼å_i“_'ł®—9&5øˆ»·uV×BAAAüµ¹ą€ć÷¶ 0‰ē>å rŹæTńWڤ^ęV3HXM}(Ķj•9×~N±×Ė|ÓĮ謟 `Œ£ż¶õPv‚ ‚ ‚ ‚(°ĄNgaź¦/7śoIįÆQų”3 fØ«@«ņ/7Ņ/ü”nŗĮØō'ÜŪ·HPP"""ø»»ĆÅÅ®®®šōō„««+ģģģźpŁAAAÄĆByy9ŹĖĖQQQāāb”——£¤¤ēĻŸĒłóēqīÜ9TTTØw@€t§(¹žK BE_ŗÕŹ|W24˜ .k”į(æÜfwļÓĄ£ąo®žžžčÕ«zöģ‰N:!""®®®uø,‚ ‚ ‚ āÆFNN233‘žžŽŌŌTł$¬,6AAAAˆaŒ!-- ?üšV®\‰’’„¤—üćj–”’*ü”ųĖ}¦— XļFk ę\’å‚żÉųŪć忀é0Fņ”×ėńųćcŚ“i芔ƒE%‚ ‚ ‚ õܹs+W®ÄūļæÓ§OĖ%18` ŒĮ9#€t“æJš)Żä<øĶÜ*@Œu1X£üsJæ=atł•ĆŽŽcƌĮo¼ššp+ŠHAAAÖĆƆ šöŪo楁rIīŲ `ŒJ½täŸSö+¾KŅiJ+@ęSZ ę\’•‚żI{—ó{wN‡I“&aęĢ™äęOAAA<lٲÆæž:~ūķ7¹Ÿ/X  āŃ”Ā_)³qĒå¦ؙĄ”Ś S›šj£ż+ś;˜ą0Īū牋‹ĆźÕ«ńÜsĻĮĶĶMc±‚ ‚ ‚ ¢ahÕŖ&NœˆĄĄ@ģŁ³•••ĀŸ½“ƒŃPń øŌSžÓ”Õ`õrJh1ȹžŪ >Ķü;š€šņņĀ{g  ((Čś+!‚ ‚ ‚ ˆĀĘĘqqq˜0a®_掓'O ¶£ī[óŹæŠ 4ȹųC²/<.'Ćü5X‘ĪÜČæ0ŅæŠå?ĄGDCūÄāŋįėė«¶¼AAAńĄŁøq#žzź)ܼySśS6€ *`tńæ+³Ż‘9&  @ÓTµ–\’Ķ)’`Tž9az½o¼ńęϟWWW•E ‚ ‚ ‚ ˆ‡ƒˆˆ<ńÄ8tč²³³…?y £²®ä ‡œBoĪ+@S\?5K£’B·ĪõŸSžGųļ½c€   ¬_æćĒ‡5‹AAAÄƒĒŻŻćĒ‡­­-öģŁĘxŻ@+ł0Žā[2H¹ 2ŸB,*ŲZ r£’ę¢ż’Ą’ŻKčŌ©vļŽččh§%‚ ‚ ‚ ˆ‡[[[ōģŁ111X·njkk¹Ÿ“pF÷~¹JʾŅw«°dżWŠų/żŸ`ŠPPÆ^½°yófx{{[[V‚ ‚ ‚ ‚x(‰Å#<‚5kÖW °£'@Ģī*łJĖž)ä0ė`kīG‰5K’ŁąeaęįƇcÓ¦MpwwWy:‚ ‚ ‚ ‚ųsѳgOģŁ³ĀĆśhćŌ—{ŸĪœīmŽ‚óŖē¼ģõ0]U@NG·ˆ9€œsSōśĮ8ēŸĻūÜsĻaåŹ•pttTS‚ ‚ ‚ ‚ųÓҦM¤„„!00PxŲF}Ł(’ęŒųĆĄéۜžm)˜ ¢1Ąœ•@nė?gč`ѽ‚FŒåĖ—C§S»ŲAAAAüł9uźqėÖ-įįB[”ĆøL ŅvūŽĘ-(\"°ęŽ&\ŠŅTŹęF’„®’:M|ņß³gOüōÓO¤üAAAŽÖ­[cóęĶpqqö㈿9/˜z=¤ST”¤›ż—Īłw0@—¹M›6Ų²e \]]Ֆƒ ‚ ‚ ‚ žR”mŪ¶X±b wŲĘQżČGś7H6ł‘~a^)²Fµ鈿0ź’«RøŒ~~~HOO‡ÆÆÆ‚h‚ ‚ ‚ ‚hDDDĄŻŻ[¶löĒ+•y©ā/uó7ēīoqy@9€–Ń’Ž»w¶¶¶X¹r%:tč`é¼AAAŃ(ˆĒ‰'™™É²ą ¦Ź½Ō@iÓģ f@„Č’>†Ąˆ0cĘ ōļß_…H‚ ‚ ‚ ‚hŲŲŲąŪoæE‹-„‡=“Ćs’„ŸĀ8Ö® Ā’@č õ˜  —011o¾ł¦„óAAAD£ĆĖĖ Ė—/‡½½½šp8Œ„Źæ4 ,,¤S,-ż§»wŅXŻ;lß¾ŽŽŽŖ/ž ‚ ‚ ‚ 0 ŲµkwČFļś\ˆŻ’k6¹ą€ę‚Š j<8#€ ž0̆Ńņų׿ž…ęĶ›«»b‚ ‚ ‚ ‚h¤Ģ˜1ĀC>Baéw„¼€Ņ4NWWµ$ ’€Pˆ4ś’hĻs¢¢¢šż÷ßC§SZP€ ‚ ‚ ‚ ŠėõhÕŖ~śé'įaoÖ@٠潄£’²…Z»„„’t0Z ęšā2-[¶ ­ZµŅxÉAAAŃ8 —®  ‡Q©æ‰?”{sŹæ0„xÆ„)r±t†Įčš9r$’““µ])AAAA4r>łä888µ„é B÷n €4 *WPć`{Oø€Æ`œŸųńĒѬY3AAA”OOOdggćčŃ£Ü!=€jEżÆlR¹©&ŽR™3 Å%2d:vģX—ė%‚ ‚ ‚ ˆFˌ3 ×ė…‡ZĀ4ųŸœ€¹å„ē`nł?.ĀąēøŒ‹-BpppŻÆ˜ ‚ ‚ ‚ !^^^8ž}śą•W^Abb"ÜŻŻeó == ,ąŻī`ķŚµ˜7o&Mš¤źü1118{ö,cČŹŹĀĮƒoÕµ0ʰbÅ ~?66§OŸÖ$C§ÓįĄÓUWW£¼¼ååå8wīöķŪ‡M›6”¦¦†/Ė’żß’!<<ūŪß“]A4rjjjDžHr1=SīŽ½+Ŗ·ŹŹŹX‚xxaŒ‰žµnü:^^^üž_¹Hń ‘i_„Ėż)Ķū—‰¾/Ą,5 T€æ ’ūß’D£īÆæž:Ž{ļ=‹łš6mŠ‘#GbäȑųōÓO1mŚ4ž·>ś/¾ų"ll¤Ó.L †»»;öļߥč`­ąĄČŹŹ` Ä6bÄĶÄÅÅYužÜÜ\<łä“¢¹‡“'OF’žże½&‚ ‚ų󆢢¢] ‚ ˆæ<ĪĪĪŠétĀéårŹæ–å’øļL:€ŪDæ««k=^ĪĆCMM 6oŽĢļGFFāwŽŃ,gźŌ©čŃ£æńāEÕ®§5553f ææbŊ:M!ąˆGPPUr¬%((Ū·o0ņņņ°pįĀūZ‚ ‚ ‚ ˆ?+666Rœ›`i“[P@Ct¶æŖĄļæ’.ŠVžŲcĮÖV©JĢ3jŌ(Ńž™3gTå«©©ĮčŃ£łóęää`ß¾}šĻo0Dī’cƌįŻńļ'vvvX°`Ø)2/AAA„z$:øF%Ž’ā/ē Bŗ€:—PäÆżWußęÖ-ē ³ZVll¬h?77WU¾šš 11»vķ` ä×½{wMēß·oN[[[Œ=+W®Ō$£¾hŻŗ5žž8|ų0nÜøŃ ė‹—””`Ė–-HMMÅÕ«WqėÖ-ŌÖÖĀŪŪ>>>čŃ£śõ뇐³rΜ9ƒõė×\\\š÷æ’€Ń“aõźÕ8yņ$Ο?ŅŅRĄöķŪįééi"§¶¶ĒĒž={pģŲ1£¤¤åååpuu…‹‹ Ѿ}{ōčŃmŚ“Ń|ͧNĀ¶mŪpņäI\½zEEE`ŒĮÕÕNNN DLL ŗu놮]»Ŗš’ĀĮĆįƇ±}ūvüöŪo(**BQQÜÜÜąåå…ØØ(ōķŪIIIVĶ.]ŗ„mŪ¶įĉøtéīŽ½‹²²2ŲŁŁĮÕÕīīīG·nŻ0`Ą888h’ŸŸŸ-[¶ąŠ”Cørå n޼‰źźj8::ĀÉÉ ~~~ˆŠŠB‡Š·o_Ķņ °~żz9r—/_Fee%ŹŹŹąččxxx ]»včÖ­ ×K›[#åååųņĖ/EĒnŻŗ%Ś_½z5Ο?o’w芔ˆ‰‰ŃTnµ>|[·nÅńćĒQTT„āābø»»ĆŪŪQQQčÓ§ŗwļ®yÉĻņņr¤„„a÷īŻČĪĪFQQnŻŗ'''x{{ĆĖĖ ”””HHH@RR’b½åēēćūļæ»|ł²hńāÅŲ¾}»IŽ'žxĮĮĮŲøq#ļ­åä䄗_~ŁlŁ ńŻw߉ŽįÉ'Ÿ4›ļāŋ¢öųńĒWl‹jjjpąĄ¤¦¦āüłó|żŲŚŚĀĖĖ ^^^@||<śöķ«ŁCƶ¶ĒŽƎ;pśōiÜŗu‹o;¼¼¼ąķķ tźŌ żśõĶ÷¶tmz½ƽö£QzēĪHKKĆńćĒQXXˆŖŖ*xyyńņ}ōŃYC~’žżŲ½{7Ą××Ļ<ó ć{bćĘŲ¶mņóóQTT???aȐ!čßææÉżl0°oß>üņĖ/ČĢĢD^^œįėė‹ˆˆ >Żŗu3Ū¾=zŪ¶mć÷§OŸN§˜^ŹG}Äō{÷īN:©ĪĖ!ī(]±hŪ¶m(//7É׳gO“i‰ ,ąūO±±±2dˆI¾;wāąĮƒ€–-["%%€qcķŚµ8vģrrrpėÖ-ŲŪŪĆĒĒM›6ERR Š`KOWUUa’žżHMMŅ ųēK§ÓńķO`` ’|9;;×{–.]Š+W®ŗuė†ÄÄDĘwśĘqāÄ \»v %%%pvv†‚ƒƒŃ§OōīŻŪb™/^Œk×®ųć’cŒa÷īŻHMMŹs琕•…ŚŚZ 2’ļ’ż?Y9EEEHOOGzz:®\¹‚’’ƒ1wwwxxx 22:t@æ~żcf)qūöml޼ĒŽĆŁ³gQZZŠŅŅRŌÖÖĀÓÓŽŽŽ|?iŲ°a Ō$Ÿ1†“'ObĒŽ|?ęÖ­[Ø©©įŪR???tģŲ ]&ŪUUUHMMÅīŻ»‘™™‰ņņr”––‚1xyy!88ŻŗuCRR’fłµµµHKKCjj*Īž=‹’’”••ńå÷šš@`` ŗv튤¤$h’ŸĒŌŌTddd °°EEE(++ćßMš4All,’““­YžŃ£Gń믿āŌ©S(,,ÄķŪ·QYYÉß?¾¾¾čڵ+yä‘F±āœ5HžwK£ž–<DčŲĆØō»š €qŪ'Ÿ|ĀžŠżōSž˜£££Yłēϟg}ūöe¶¶¶ŖĖļååÅ>łäUĻÅ­[·ŲÓO?Ķģģģ4Éė­·XuuµEłģŁgŸe:NµüęĶ›³łóēĖŹĖĖĖÓō_ ·üŃby-Ѷm[^Žäɓٕ+WŲ AƒT?""‚­_æ^ÕyJJJŲĢ™3™“““źėó÷÷gŸ}ö™ģ’~ąĄ«ėm÷īŻŒ1ÓvźźÕ«fÆałņå&²|||˜Į`0›ļwŽįÓŪŚŚ²7n˜¤©©©aóēĻgžžžŖÆĆŁŁ™M:••––Z¬ƒĮĄ–,YĀZ“h”Z¾½½={ī¹ēLŚ9!6l]›Į``{÷īe111åėt:6nÜ8V\\l±üZÖwdd$3 līܹĢŪŪŪlyĀĀĀŲžżūy9™™™,!!Įāu$$$°óēĻ+–gΜ9¢ō•••š®GųžQź[ 0€OÓ£G“ßµ“·Āķż÷ß7‘Ķ’>vģXŁņLŸ>OÓ§OVUUŦM›Ęōz½ÅsŚŁŁ±Y³f±Ū·o›­—ČČH>Ļųńćͦ­ŖŖbŸž¹Ŗ¾·¹ŗŗ²×_UTT˜•­•޽{óēųĒ?žĮn޼Ɇ®ŖLžžžl޼yfۜøø8>żo¼Į.^¼Čŗvķ*+ļ©§ž2ɟ——Ēʎ«éźęęĘ^yå‹’cĘ’bƌĢĆĆCµ|[[[–’’ĀņóóUÕńśõėE÷©š¶č±ĒcŁŁŁe öõ×_³¦M›Ŗ–ļąą`±-²téRÖ¼ysÕņõz={üńĒYNNŽ*ł§OŸfƒÖŌtķŚ•„„„©’Ÿ––Ę:vģØI~ß¾}ŁŃ£GUÉoLŪ92l°Ą×Žš:€‰Fč +€ÖĀ4ƒQ·wƒQ׷ǽ8R@½…Ź_Ր““#ŗłĢ)ķõ‰ŠŠ©S'Ęc………¢ćĪ;UĖ«©©a͚5ćó~õÕWŒ1Ęž÷æ’‰®ļ~vķŚ%:÷;ļ¼S/r„€3fhj`°ččhvķŚ5YłBöā‹/š•%lĢ {ę™g4—‡ŪģķķŁ’%KĢ^ZZsuuµśŸ}ö™Ył›6mböööšdz{{³‰'ņūę iiiš^śŅmšąĮf;Ļ………,""Ājł>śØŁŽU~~> ·ZžK/½d"óa2¤¤¤°V­Zi*ƒ ›7ožŁs\»vMśÓüæTUU‰dևąųńć¢ćĖ–-3{Ó¦M“•gNłcŒ±ņiŪ·ooņ{UU6l˜Õ×e¶c\×¶)88˜]øpAV¶Š éšä·mŪ–•••™­C- !!!lҤIŖĖbooĻöīŻĖ<Ø©­ `¹¹¹²åiģ€īŻ»k`M š IDATV6°ž={š­+µ€;wī°>}śX}’·oß^Öhg-BĄųńćYTT”ę2Mž>>ģųńćfė÷õ×_·Z~“&M,*”/æü²Õņ[¶liŃŠüöŪo[-æY³fģܹsfåoÜøQs?Ūt:ūę›oĢŹ_µj•*CŸÜęģģ̶mŪfV~cCĘpĄ6+,š?3¼` €žŗh %€u{‘@n @£Įßßüņ7?’ü3¦L™bµK³5pn}>>>čÓ§æ¤ąņåĖѳgOU2öģŁƒüü|FLĪÕīAÄąˆŒŒķ —ŖOøģģ쐒’‚ääd“hŃ®®®(++ĆÕ«W±wļ^,]ŗ”wo<{ö,ʏ-[¶X”?oŽ<ž{@@’’’„&Mš ““T4=ę»ļ¾3qŽˆˆ@rr2Z·n øøø ¢¢EEE8yņ$6lŲ€7n0ŗ“=’ü󈏏—ŽrūömŒ;V䦣Æ_? 6 -Z“€ƒƒ<<į믿¶X—EEExā‰'DĖMyyya芔ˆE³fĶąč航Ŗ*”••!//wēŲøq#fĻžm²t'Ē”)SD®ņŃŃŃ;v,bbbąźź 777TTTš®Œ'OžÄŅ„KłēgķŚµų駟0vģXYł=ö~’żw~?66Ɔ Chh(<==ywé7nąņåĖHMMŎ;x×ŪÆ¾ś C† ĮĄyŽŽŽ&1D***°iÓ&~?!!AÖż±yóę²å“”›ztt4ƌƒŽ;ĀÓÓŒ1ć·ß~ĆŚµkqäČc /½ōāāād]“kkk1xš`œ;wŽ?ęää„Aƒ!>>pssCee%***™™‰ķŪ·óņć’ņöŪo‹\U½½½Mź­°°ŸJ—t•saē\1Ū“iƒ&MššīĢ{öģĮčŃ£ė'##ƒ’Įßk—ĶS[[+ŠėŅ«W/“4S§NÅŗuėų}[[[ōźÕ <ņBCCįęęTTTąņåĖŲ·o¶nŻ ƒĮČĢĢÄųńć±uėVŁ2Ģž=Ū¤mźŽ½;’’’777čõzTTTąŹ•+Ųæ?6oތźźjF7ŃQ£FįšįĆߏćʍCee%t:’““ŃÆ_?ųūūĆÕÕ%%%ø|ł26oŽĢ»‡Ą‰'šĻžŸž¹YŁÖ¹sē0¾— „ęĶ›ĆĻĻ„„„8sę V¬XĮ·UUU3f Q^^N‡žżū#11Šét(**BFF~łå>ŽP^^f̘~ų”ŽÆ”>HIIM0 Xµjæß”C“jÕŹ$_TTTĻ‘‘Įß«...:t(’““Ń“iS8;;ó÷ŶmŪ°mŪ6¾œ»vķĀĢ™3ńŃGÕéü'NM²µµEß¾}‘€-ZĄĶĶ Œ1TTTąāŋHOOGjj*_ŽćĒcāĉ¢śŖ/~üńG¾nüüüų)%>>>°··Ē­[·pęĢlŲ°AŌ&~łå—čڵ«ā»ŠcķŚµüwN‡Ī;#..Mš4ČķŚ`0`̘1ü³ūV½{÷ęŪjwwwŲŲŲ ¤¤„o+vķŚÅ_ĆŃ£GńŹ+Æ(>’ųĒ?°wļ^Q™zōč=z 88˜ŸRÉõcNž<‰5kÖ ¬¬ €ńݚ’’‚'NČNOž?>Ž’}ѱøø8ōźÕ ŃŃŃpssƒƒƒ***››‹C‡ażśõ|éęĶ›1bΜ9#+ńāÅ¢vŹŻŻ#GŽD\\ß°··GEEņņņpųša¬^½šŸÖwńāEL:U“[ČęĶ›1kÖ,~ߣŁƇG—.]ąķķĶOøsēņóóqģŲ1üņĖ/ø~ż:ćŌø‰'ŠŽƒBN:…””Q?/88DŪ¶mįēēTVV¢  'NœĄŗuėPPPĄų>›4iāāāŠ”Cł/^ÄO<Įė:ƒ BRR|||ąéé TUUįśõė8}ś4VÆ^‹/0ös'L˜€ß’ż/;ż¼ŽČ¹õ«uł7ŃńõųĆĄ€€>XdžŖŒ16vģX‘õéŁgŸUåNY„ĀŃ … ņĒżüüT¹#3ĘD£ŌżśõćK­ˆ÷Ó€1Ɯy¹£FŖ™R,00>}Śl¾¼¼<Ö„KQ>9+£Ō0Žp/Y²Ä¬ūyUU åóŲŪ۳ŋ[tYæsēŽ‰5łé§Ÿ–M»dÉQ:µĻåŁ³gE£īļ¾ū®lŗēŸ^$śōé&£®R-Zdā ÆäšŸ’üG”nųšįŖ\wķŚ%rŻuqqaEEE&éņņņDe>|øŖ‘¶²²2є‡Ž½{˦“Nš={¶E×oĘŪ¶m›hoĈó\¾|Yt®ŗLO²„Š€Ūf͚Åjjjó öÕW_1>Orr²lŚÅ‹‹d2„X,׆ D÷­———EWÜŻ»w‹Īuųša‹ē1b„l{,åīŻ»üȶƒƒƒhŠÕ‹/¾Ø˜ļčŃ£¢2­[·NōūٳgE÷mdd$;yņ¤ÅrŸ9sĘÄ«Bīzóó󙋋 Ÿ&((Häę®DVV–h$Ū“i“I:©nqmõźÕ¢w„““S½½{…€Ń}ŲÜ¢’’Łb???včŠ!Åóüžūļ,00OoggĒŹĖĖMŅ= R*++Eeš3gŽźņhõą¶.]ŗ°Ė—/›•½gĻęåå%ŗ/”Ś 5‡µSmŪ¶µ8BʘŃ;HųN·±±a™™™ó©Ač ģ#Yz.Z“H4²!{OKŸ[®Ż½xń¢YłĖ–-å錵«Å’‹±?¦Ą óž:uŹ$Ż„K—D’E³fĶXFF†Eł7oŽõS°¹s皤+++c~~~|š&Mš°­[·Z”_PPĄ’““Eņæūī;Ł“­[·ŻĻj\ś ES0ōz½¢G‰šŽˆŽŽV5%”““”õļß_T~%Æ“”C‡ŠŚÅ?üŠb?Ʋ²’żć’ÉņÉ'eÓN:•Oćķķ­ź\]]Ķ&Ož,’æjÕ*‹ł ’÷üm‡ģ°Ąw>š//xĄ@ݓР@ Œŗ½;žšŠœŃ §OŸ6q…qssc `’ś×æŲ‚ Ųę͛٩S§źmž¢’ øøXä:©Ę ¦ŗŗšłśśņy¾żö[ž·m6Äżū÷Æ™r€ōōtUy D.&L0I#5øøø°'NX”šš*Ź÷ŃGiŗ®¾}ūņy===ŁŻ»wMŅ<õŌS|š–-[j’/Œ‘’’bņ{UUswwēÓōķŪW•rĖc3gĪ]»œĄ`0ˆ:įįįšęUžōÓO¢süšĆ&i¾’ž{QgĶRgGȚ5kDõ/Ē{ļ½Ē§iÓ¦źśaŒ‰ÜÆ#"",¦€”C‡ŖĪūŹ+ƈź\ε±sēĪ¢z³ŌŁ"5Xš"cą‹/¾uˆ”Śł}ūö‰:ĘBÅŽœįą³Ļ>ćÓét:łĀ:tuueW®\±XfŽ3gΈęéžżļ7I#T†ķģģTµg¹¹¹ĢĶĶĻ?zōh“4R€³³³āt)ĀŗĄ~żõWÕe3‡Ō0eŹ‹y®\¹bbĢ\³fÅ|ß|ó(ĻŽ½{MҐĄčŗ­vžöźÕ«Ey?’üsŁtj ¶×ŪŪ[qśŸ‡M˜9s¦ź¼ę:vģØśžų÷æ’-Ź»gĻ“4RĄˆ#TÅĻ*‡^^^f]ł„;vLōü̚5Ė$Ķ›o¾)*ז-[TĖæuė–hνœĮłŪo潏RSSUĖ/..M}HLL4IsķŚ5Qł<ØZ~ZZš(Æ\æµ²²R¤lŲ°AµüĢĢL‘|¹˜OYYY¢4r’‘9„÷‡ƒƒƒģ“­6mŚšiŽ{ļ=Õ²ļܹ#ꃾõÖ[šŹöWFĘp@*€5ųĄ&xĄ Ąh‡ŲąŒ{%_¾F3 &&sēι5–••į×_Å’ū_<÷Üs8p Z·n OOOø¹¹!66żśõĆÓO?wŽy«V­BvvvĖāįį!r ^¶l™Å<;wīDaa!ĄŽŽƇÆs9ź aäJ.j~}Ó£GÕ+&ųłłaÜøqü¾ŠÅZ‰©S§ŖŠŠĻ­xŻ›_xįUeāxå•WųļÅÅÅ8vģ˜Išœœž{—.]4Éŗvrс…¤§§‹ž£W_}UõŖƽöšb¤vŽ‹/ЦLœ8QStåQ£F‰V[ŗBrWŽšńńŃ“Ŗ‡°~Š‹‹QYYi’FX’ńńńšVUFĻŗW>ŒĢ˜1CuŚW_}•’ĪĆęĶ›EæįčŃ£üžōéÓ5­šÄOˆ¢:tHu^µ]ņ¹ˆļrģßæŸ’޵kW“iÓ...€“'OŹFPŒÓ 8:vģŃļB×ä'Ÿ|ŅāJ%B¢££‘œœĢļĖՏPžŠ”C5­8(z§Ø©’ & eĖ–Ŗä;VōīN©O&Mšd1MHHˆč9mҤ † f1Į£ØØH{/¼šüżżU„}ōŃGESjŅŅҬ>Æšžę™gŠ“iSÕyćāāŠ­[7~æ!Ś˜9s&ģķķU„6mšč}k©n0gĪ‹Swc"×ü§žz ŽŽŽŖŹķŪ·M[ݹs§IįJ111čׯŸjłžžž¢)_Ā÷ŠœünŻŗÉN·RĀĆĆCŌ?}ųżćĒ[uĪüü|ŃąL]ŸÆ†hōz½¦÷”§§§Hń”,Ņ­[74kÖ̢ܼ¼<‘ńJxŻjÖÆœ1OŲOŅŚ 2^›@QQ‘ģóPł:ׯ_ēåsKŸ ÖO»vķd—°6‡Ō !÷¾^ƒ–ņĘw/Wž?üPSŽF†’ŅoÉ z”é% -żśõƙ3g°k×.ģŻ»ĒGnn.rrrPPP`²f®ū÷ļĒ Aƒšź«Æāƒ>°*˜ąŠ”Cł@q7oŽÄŽ;0`ĄŁ“ÕÕÕųå—_ų}”ńąa@Ė©µÄĘĘjJ/ Nxį³#jרŽŖk]«0Fņóóć rA­Yƒ•CHONy¾č‚‚‚40Z·n-R¤œ={–’®ÓédƒMYāÕW_åėE.`` UuˆėÆ£   žūöķŪQRRb2š«„ƒƒ¬*Ūż$22RÓśä€1HŲ… €’ä;ōz½Uė rŽźōģŁ“÷øzó‘c‡ˆ ¶”‘‘a¢ą’žūļ"#£ō÷ģģlѽ¦eōŸCX?ØØØąŸß›7oŠ<ź*Ÿ1†ĀĀBø¹¹)¦>'jpssCqq1X4x[@Q Ā Sj×4—ŽÜj56ڵk§)½š]›› ʘę>…Ō3³®÷’7¬*‡9Zµj„ł}É{$]½zÕlZkś0€uż”×ŻĶ›7Q\\Ģ+™×®]ų¤}15$&&Š?¤Ź¦Š К¹Ņ<………"OaŪV]]uėÖiņŗµ4@דiSŲŁŁńķąŖU«4y“ZRč…Ļƒ5õćęę& š+÷> ā I«V­Ņä…aī½BČ"§ģ+*ü’|PņŪm”ōźÕĖ䆭­­EAArrrŸŸĻ^¹rGŽĮłóēE/ż?žAAA˜6mšę2pr—.] Ą8 @ɰ}ūvžAsrrRå®x?ŗ25T4O¹höęZĀ-)jŻ•…r“ø¶ ,²Ę§`TUU”““wļŽÅ;wPZZŠŖŖ*Üŗu GŽ‘uĒĀM# ÉE’ĆRNJėąsņ­Q†„ß-ĮCVV®^½Š»w¤„_aąöķŪØ¬¬Dqq1²²²D†4%Ģ»Ē_¹rQQQxņÉ'ѱcG„……!$$žžž÷u‘śĘš²Š­Wś< =5üżżUŻ×R„ VCyõźÕ‹7|øŽF̄Ӭy¹Xś„×cķĖK-;vģĄ_|ŌŌT«N%Z·nqćĘńĖ]»vĶdy*;;; 88ĮĮĮ BĖ–-Ö­[[Œ•š Ńś<āū]:½Dų|åęęZÕŁŅPīÕB£oee%<(š#7ś/ż¾’~“ŃA” sēĪ&õ+mZ·n]‡«0"¬#é’”e4F|9Ō*DćĮ…Yī]­Uq>_jGĆĶQQQQÆkd ß”rSś¬A÷ƚ÷“TńÖæ“ݰ¶Ÿ¤„“źĆ#V®ųī»ļ¢_æ~0 Ø©©ĮŠ+°bÅ Q___ńąą`tčŠ]ŗt±xæõÖ[Ų¶m*++a0°~żz¬_æ^”ĘŪŪ›—„ąą`“k×ńńńfua}õÕWųꫯŌTƒ"rõ3mŚ4,\ø÷(Ł·oŸI\WWW¾^‚ŲŲXÄĒĒkŌkä˜óŪ”—$$¬ iÓ¦˜3g æŽšŻ»w±råJ¼ųā‹šå 8üZå[·n5™/TYY)Zßõas’Ä£u „ōiI–vN¹µ_ėŠP·ÖŲ!q’ BW^^Ž!C†˜ø««‘)rƗ"¬-AŚ8,]³šEѐk»¾žśėųß’ž§9_ll¬h~¢ß|ó œńĶ7ßČĪo«®®Ę•+Wdēł7mŚ’ž÷æ1iҤ‡jŌSˆ5žĀgJŚ ŽČŌÜŚĀõMDDł’ōōt‘@ĆĻĻ-[¶ÄŋqćĘ \øpAä2jnž? ’œ×a5“|‚Pƒ5J®ō]mͽügø’ėZ7õuŅĮkślŅéc²I•Åśī4Ä-7ĄŅ»wo¬X±“&MRō -,,Daa”I|N‡Ē{ Ÿ~ś©¢¢Ž”ClŚ“ O?ż“bpqnž<7ŅĪakk‹”C‡bΜ9²S±ź»Žäž___ģܹ?žøbģ.ö0ž G·nŻšå—_¢C‡õZÖæ–<äöMŽ?ÜĆQ2fΜÉ`×®]V0|ųp,Z“€1П԰eĖŽżĘĶĶ ƒ¶¾ą @ii©(Ŗ¼Öy”jQ›AˆTį·Fٵ„µ£ņBåI®\Ó§O)’z½Ż»wGhh(üüü`cc///ŲŲŲĄÓÓ¶¶¶šõõE\\–/_Ž×^{MńÜĀóYó’°tĶ QĻRV®\i¢ü·nŻķŪ·‡ŸŸģģģąźź ;;;ø¹¹AÆ×ĆĆƃ­ fŽŖƒƒęĶ›‡3f`Ė–-8sę ._¾ŒœœäęęāʍŠy 0yņdäēēcöģŁu»Ųšέš~17śėāā¢)Ŗ± i<źÕ«~üńGFÅ}ęĢ™üoJ€±ĆĀÅŠŲæ?oøzõŖ(–‡œ@jźŁ³g½D„u$•ŸPgc¬ŚøĮaĶ=]ĘCéżß»wļ:_ėū]ö źFŠŌżŻš~ŒTÉ֕ō:ė;V†ōķŌ©S]Ķżüüd1 Ą–-[päČ\¾|ŁŁŁČĪĪF^^žā{“¶¶?żōŽ=ŠŒŒ Ŷ499ēϟĒöķŪqčŠ!\ŗt W®\ANN®^½Ŗų’ ¬]»GÅĮƒĶ®ŗ¦i„$9”ā8DEEįȑ#HOOǾ}ūpžüyäää ''ŁŁŁf½V222Š£G¤„„”cĒŽu*_#@ź _ėׯčśJÖŌMCxŌIŪ kś1Ņ<Ā~ŒōæØļ~€“üļ¾ū®h%‰śĘŁŁƇ7 X[[ĖĒĖÉÉAVVNŸ>uėÖńļŹ³gĻāĆ?4;ąąą€Įƒ› ī \»v ŁŁŁ¼ü³gĻbŻŗuüÜüœœüē?’ĮüłóEy…’ĮØQ£4Æ&„[[[$&&š,“ =$8ƒ@VVĪ;‡_ż—/_`¼¦L™"Z–’°ˆ’1@ś;O£˜ŸŸ/Z³“““NĄø$g07h‰>}śĄĒĒ7nÜ@ii)6oŽĢ74wīÜĮŗuėų“£ū’Dū eą<µ• žF³„/k Ā—ŗŌ-pėÖ­¼UŁŽŽĖ—/·*¢ŗĀóYc°tÆ _<Ö!;uź?ĮŁŁYōb¼té’hŠĆ_|”ZłÆOœœœm²bCjj*śöķ ƒĮ€ŚŚZ¬ZµŠ(ų0”õyÄ÷‹ōyŖēā~!”/))Į‰'о}{;vŒ÷rhŪ¶­IGSčÕ ōŗvķ*ŪQ—Ź*//ÆW€“Óm²A,mN§ćē’ )))AĻž=y·ųåĖ—[å hkkĖĒ$z£Ż¾}ƒęW„Y¹r%ęĪ+šZ*¬£ł>öõõ…ÆÆÆh„æ¶¶/½ō¾žśkF#|NNÅØ( éœœœ“lٲN2…U“&M¬–£×ė‘’’‚yóę0Ž q€Ķ›7ón///ōļßæ%n¤ė°[³¦¬.\ø i½W©¢jĶR(r;ķR#ƒc¢˜ ŅHüĀõ‡Ūµk§Ył·T&ap$k:$Ņåߤ#žšx“ØaĮ‚ųģ³Ļė@hŽą+­œ”„„ś©¬¬Äāŋłżžżūkŗwø(¾Ü’ŲėI×–žG9„Ļ”4Ȗ°dm‡ģźÕ«|@!N‡öķŪ[%Ē”””hŃ¢²²²ć“oߎ¬ū?`@«Õ IDAT4 pK·ž:u åååpuuEZZŸF)ųž““hM‹–ńŒ‰‰į•œĄĄ@ŲŲŲšŽ'֎Äfffņū]ĄŁ‡©ā[UU„:XbAAĮŸ~iĮ²²2äęęjźĢ —„óöö¶Jѕ{¾“ņń#“€q-śś ti.6ĀČ’ÖDӗC.‚æV„J½N§õ±”×ėł ©—Ø.^¼ˆŃ£GóūGåū^žžžpuuåŪ8kŚŗŖŖ*Ń»944TøvėÖ­üū!44}ūöU-ŪĆĆćĒē ēϟ7YmfĻž=üżąļļÆie/ggg<÷Üs¼ ØØyyy¢g 00GŽ`żūųŌ©S¼AŅĒĒGŌ:}ś4?jooo &ؖ«Óé0yņdŽĄ‹ VcÉ#ziG²®ī&„„„¢ Ö®IĪ!Łß°ao]F’>|ųCułźÕ«XµjæжskĻĖĮ5~€ŃČR_åĪ…RLNŹ… DÖsi£'4h]f‹“oŽV­Zńßo޼)ÄN ƒĮ ’&Gll,’1†Ć‡«–Ļ!ģ0H—s*š:Ns`%5Šļ /¼ĄoŅØ¶jvŌźŗ}ZŌÖIƒų-^¼˜ļ|šĮšåKūuŅvą—_~įå §4֗|įūؚśŒ^\ż•uĄčłĖ•’¹ēžÓܦ˜ė÷<{ æń4j@—.]DŹóüłó­rKāX“h‘(ųGŪ¶mėT¾ÄÄD~¤·¢¢6l@EE6nÜȧyŲÜ’kjj0eŹQ°=驜dķŚµš\™øå£ė®µėµJž×999¢“Ö¬Y#Ś—*B×j­÷hyy9¶lŁb6Mbb¢h”Jhd²DjjŖÅµˆŪ“i#²tk‘-óĀUį‹ OaąÖjւŠ`%‡ƒƒƒ( 5ЬpDĖŅŖt ņśZ®ŅƒAōŒXbÓ¦M"ćKĻž=EæĒÄĈ\KW®\©¹LB£ŅŠŅzÓÓ@ØØ§§§0C8 `’žżHOOēNNNˆW,ÆŠ ŅŅ}(‡°­ńńń1ńlĘ,Ø«|½^/2źNėŠb@Ę~©OīwóŻwß©N[RR"źēW䩂“““ČųlMū#¼’›7oŽ S.\Ø:ķ”C‡šūļæóūrs¬­ĮĮĮü¾0>–Ŗ««E’™\Ą×øø8ž;ןՂ0†Œ‰§¤°­[½zµf°“ß&Ź'<_]ū€éō ”ü¼¼<Ķå—Ź—ģܹ3’ ^Ø…Ė—/‹śØ(ŹķŌ©SU+/^­'ab ŗq=zTõ=ŹĆ“iÓDnŚr/•f͚‰‘>ų@Į\‰’’L›6Ķb:éJ_żµ¦”wß}Wt ƒ ż.uõ”ṮtéRlŲ°AtLĪr-ōZ°`&ŗĢĢLŃ舰S*‡t>£5^%ÖņÖ[o©ņ)))Å1šńń1QœœDĄ’ž÷æšF–vīÜ)2XšŚ!ķPi­7” //iiiüؓ¢ņ+¼īŒŒ Ńü’„„³Ė+ ßA+W®Ō¤¤\»v ?üšæ?pą@³ņwļŽ-Z©Ę„„„¢Qžääd«–ŠlģtéŅE¤pæłę›ŖF·-Z$RŖź½^/ś/ŗŁ¶m›h•Œ1Lš4I¤JŪ{-ļ’ļæ’›6mR÷Ź•+¢5ŽåžÆśąÓO?Å”C‡,¦»}ū¶(ų¬&7tKŒ9’’¾k×.üüóĻŖó¾ūz¹¾éć?Īæ~ż:žļ’žOõ(qff&,XĄļ0ĄÄˆ%üÆĻœ9ƒ·ŽzKuł+++ńÅ_šūmŪ¶5™j)ģœ={[·nU-ß`0ˆ °-Z“0yĻ —¾+,,Ē%KTĖ ŗW=<=.<ųč€qŪ'Ÿ|ĀžŖdff2&¼^'''6f̶xńbvčŠ!VXXČīܹĆ穬¬dWÆ^eéééģć?fŻ»wåĄ&Ož¬xĪ!C†šéŚ·oo¶|¢rõķŪ—ßŸ4i’ټoæż¶ØLׯ_—Mׯ_?>N§cĖ—/Wµ-Y²„ĶŸ?ŸĶœ9“%''3;;;“zųā‹/Ģ–Q+7n496zōhvüųqٟ»»»Åė/--e¶¶¶|öóĻ?³āābÕõĪēį’=lŲ0UyŠ‹‹E×’óĻ?˦4hIū±lŁ2ŁöõŌ©Slāĉ¢ö’Ū>żōSYł ąÓōčŃCUŁ[·nĶēŃėõģż÷ßgłłłó Ūż±cĒŹ¦™>}ŗIŁmmmŁkƽ&{ŌŌŌ°Ż»w³^½z‰ņÄÅÅ1ƒĮ {ŽČČH>ŻųńćeÓäēē3///>{žłēYFF«¬¬”ĶSTTľ’ž{Ö¼ysQŁ>l±nŌŠ»wo“ŗquueü±læäöķŪl͚5¢ėĄž}öYYłqqq|š‰'Ŗ.×ļæ’ĪD÷ĤI“ŲįƇM޹\¹öģŁĆƌ#*WÓ¦MeßUUU&mÖĄŁöķŪŪ¢œœöŁgŸ1Q¶{÷n““ƒuīÜY$Ą€lóęͬ¤¤DVž;wŲ–-[XBB‚(ßēŸn’¶ØØˆ9;;‹ś:3gĪd'Ož”ķĆpeŚ·oŸÉó’ę›o𤭬¬d~~~¢śłå—Ł‘#GĢöeŽ=Ź{ģ1‘ü—^zI6ķŒ3D颣£ŁĀ… eū<Œ1V[[ĖŽ;ʞ~śiQ¾G}T6}=DéƌĆvīÜÉīŽ½«Xž‹/²×^{MōīVŪ†5$ĻżĒģ°ĄOę˜ `€ Š@€(!0źöž0źśø°QclķŚµ"å°®[÷īŻĶŽģZ ƒ…††ŹžG®³'Ä@}nÆæžŗåŹ×ˆŌ U@===YĒŽYRRėܹ3 2)— ūī»ļdå×՟Ÿ/RŚ„› cmŚ“aaaaĢÕÕU6]ēĪ;%Ā·łūū³„„Öæ6jŌ(6pą@Ö¹sgęįį!JשS'ž{@@€¬|ƒĮĄ† fr;;;ÅXBBkŻŗµ‰±'&&FōRTbņäɲ×ķģģ,ŖŸ&MšČ”t:Ū¾}»¬ģ>ųĄ$½››‹‹‹c}śōa)))l芔¬G¬Y³fŠõ€={ÖDžķŪ·YūöķeĖߤIÖ¾}{Ö„KÖ§OĒBCCE/4n3gņģ³ĻŹžĖŻŻłłł1///– J–9„Jžšäź;22’ÅĒdz=z°˜˜QˆŪ:tč ŲcŒ±żė_²×āääÄĀĀĀX‡X»vķXHHsss“MūĶ7ߨŗ”‘TŚ6põ6zōhÅü'NµÜ÷ٳg›=oXX˜l¾½{÷Z,ó† dļ;;;ĀŚ“iĆāāāXXXóōō”½¾§Ÿ~ZQ~FF³··7É£×ėYpp0kŻŗ5‹‹‹c-[¶dŽŽŽ²Šē AƒĖ.LGyĄŃ£G™“““ģĀ:t襌“iü½½Eæ'$$ˆž¹ś4¼ńƲ÷’››’¬„……™äÓj0i7‚ƒƒYēĪYbb"‹‰‰ū„ķƒ9C·cŒ-]ŗTöž¶··gĶ›7gmŪ¶e;vd”””ŠĻ×Ė/æ¬ŖNÕ 4“lŁRT6[[[ĪŗvķŹŗwļĪ"##™£££Iy‚‚‚ŲÕ«Weå[k`Œ±÷ß_öśXpp0‹ŽŽf‘‘‘,00P±ßüż÷ß+ŹĻČȐͧÓéXPP‹ŒŒdQQQ¬Y³f&ƒsÜöŌSO)ŹĻĢĢ”ķ_ŁŚŚ²ĄĄ@ĆāāāXxx8óńń‘mwćććī÷Ž{O±~¢££Y\\ėÕ«ėÖ­kÓ¦ģū2$$Dqą`įĀ…²ņķķķYDD‹‹‹cIII¬{÷ī¬mŪ¶²ļKvłņeYłwļŽUģĒųśśņēˆŽŽfžžž"ƒ·yxx°¬¬,Yłūöķ“}×čt:Ö¢E Ēyä–˜˜Č:tč Ūg¶···Øß4&ČŠĄ:tHv$LĖfggǦM›¦ØĄqh10fj±Ć½Ŗ’Å‘ćABCCŁŹ•+-^—5 ®®®ģŹ•+¬eĖ–ŖĖęąąĄ>ūģ3Ełu10ĘŲ™3gXDD„UõÖÆ_?vóęMEŁ………’Ÿ½ū‹āzß~Si"‚ˆņ»ĘKTŒB5‰ŻKD#¶°ƒXb4* 1*–`b7?Å®Ńol ‚(Ņ{–÷¼¬» "‹ģż¹®¹œŁ™9óĢ²ĀžgNQś‹»ø„[·nĀåĖ—Åmmmm!++Kį5²²²ggēR•?fĢįĢ™3āvq €¼¼Ń&TMBĮĆE]eˇ~(ÄĘĘŹ“n*Ļ@zzŗŠ¶mŪbc°°°;Æ“ €nŻŗ 'Nœ(Õ½×ŖUK ,6~U‚ „ŗ~ᢄ„%L›6MåßŪŖ(špuuÖ¬Y£°%š²„iӦƒ”–’6 ©T*¬ZµŖTń.†††ĀŽ;J¼Ę¹sēäZ>ŖŗŒ;¶Äßu’žūÆL«§Ņ,½{÷.ö{˜T*¼¼¼ŹüаyóęBppp±ń’ųć “>Ŗ, 4n޼YlłIII2õŅ,õźÕīܹSlłĒ—i±QšÅŌŌT8tčP±åk&*@~~¾š÷ß “'OZ·n­š ¤¢_x½{÷–/_.¼|łR„ė”6p÷ī]¹ėŗ¹¹•xŽ»Nčččęęꂭ­­ŠÆ_?ĮÓÓS8wī\¹ž”|SŃ@Ɔ A„ĢĢLĮÓÓS®IrŃÅŚŚZ˜4i’Zlło›„‚&e~~~BļŽ½•>é/śĖz̘1J+œoŹÉÉÖÆ_/“iÓ¦ŲJš–––šĮ«WƲ³³…¬¬,™ĻóéÓ§‹½Ī‰'„!C†(Ģ^•²~żś‰æØļßæ/ī+.PčŽ½{ĀōéÓK¬ąMžēϟ/¼zõJ„÷ččŃ£B’žżf”‹.uėÖf̘!>EéÓ§øo޼yJĖĻĻĻŽ?. >\°²²*1~sssaÜøqĀ„K—TŠæØ¤¤$aīܹ2€¢Ky'öļß/‚ üż÷ßĀąĮƒ‹żł÷éÓGŲ¹sg‰‰Č¢"##ĮŽŽ¾Ä߯666ĀĢ™3…§OŸ–śžž?.L:Ui…ŗø@LLŒÜ’-mmm„MH mŚ“Iī:ƒ *UÜ)))¦M›„īŻ»+}śUōs5zōh!((Håņ333…;w }śō)±2dbb"Œ1B8uźT±e2 z@ žø¹¹)­iii mŪ¶¶nŻ*VtŠžm+Ļ€ |&/^¬“„ay%AĀĀĀ„I“& J?wM›6fĻž­ōūJQ„I‚ $&& ėׯŗvķŖ°5ʛ÷=~üų+Seńf@ žœŗøø(żĪ „„%“oß^X¹r„Ņ~”·I ÜÜÜ[[Ūbækčéé Ż»w~ųį„ĶČIJJ|}}….]ŗ(|Ź\t133>ūģ³R=ĪÉÉ8 888ČtQ“ŌØQCprrŽ9¢“»É›‚ƒƒ…yóę ­Zµ*1 ÆÆ/ōźÕKŲ¼ys‰ EDD^^^*ż­ŌÕÕŗté"¬Y³¦Ų–xośæ’ū?aģŲ±2æƒ-:::B·nŻ„õė×+Mæ)!!Ašõõŗuė¦ō{DŃ϶°hŃ"•ŗ išw•ŠBA@ēæõčhąž³aĆø¹¹AÓäåå!<<HNNFVVtuu”ÆÆŌÆ_uźŌ‘™ź„ŌėÕ«Wxłņ%’’’šśõkq¤Ų7ē'Æ(R©OŸ>Ebb"222••SSSŌ¬Y–––rÓŁ•Fjj*ž={†““4¤„„AWW5kÖD͚5Q§N™QėĖ*''HLLDjj*LLLP«V-4lŲ°ÜęOKKCxx8’““‘üü|ĄÜÜ666e¾ÜÜ\„††"==iiiČĖĖߟZµj½Õ{_TBB"##‘žžŽĢĢLhkk£zõź011••Õ[OZ(&&ČĢĢDVV Q·nŻ|999GRRRRR`ll sss4jŌč­ž¹¹¹ ß·Ā{255…­­m™¦»T$** QQQČĢĢDnn.jŌØFUśŃģ„R)œœŒōōt¤§§ĆŲŲXœNėm?æ‚ ˆ?ŪŌŌT±|}}}ŲŲŲ ~żśró×Sł*ül¦¦¦BGG5kÖDėÖ­Ėķwki%&&"44ČČȀ‘‘jÕŖ%3@¬ŖÜŻŻÅAĆŗuė&3Æ xžü9""" ©T Ō­[Wn@×w%??aaaHII‘ł’e``[[Ūw:y’žżqžüy€««+~śé'q_^^ž={†ēϟ#;;zzzØS§¬­­aaańĪb*Nzz:––†ŒŒ ™ļ 4™é„,$ ž>}Š„„dgg#55¦¦¦Ø^½:7n kkk¹’J+22ńńńHIIAFF ”ÆÆF”Aƒoõ=žõė×xņä ŅÓӑ••%žß166†‰‰ lmm”§§Węņóņņ*¾’…å.Ķ›7ė顓’’!ž=ÖŅŅ‚¾¾>źÕ«‡&Mš¼ÕąÆR©TüŽ—šš*Ęo``###4mŚTn_ś’Z¶l‰ĀĶ!ҤHüߒTd=õæc2dżw^.€<łLQ¹). éŠKõ®= ‘¦`€ˆˆˆˆˆˆH0@DDDDDD¤tÕU ,€««+ zõźjަrŁ»w/²³³&&&jކˆ4DDDDTnĢĶĶann®ī0*„ņš†ˆØ¬Ų€ˆˆˆˆˆˆH0@DDDDDD¤˜ """"""ŅLi&ˆˆˆˆˆˆˆ4DDDDDDD€ """"""" Ą‘`€ˆˆˆˆˆˆH0@DDDDDD¤˜ """"""ŅLi&ˆˆˆˆˆˆˆ4DDDDDDD€ """"""" Ą‘`€ˆˆˆˆˆˆH0@DDDDDD¤˜ """"""ŅLi&ˆˆˆˆˆˆˆ4DDDDDDD€ """"""" Ą‘`€ˆˆˆˆˆˆH0@DDDDDD¤˜ """"""ŅLi&ˆˆˆˆˆˆˆ4DDDDDDD€ """"""" Ą‘`€ˆˆˆˆˆˆH0@DDDDDD¤˜ """"""ŅLi]u@D¤”””8~ü8®^½ŠWÆ^!..‚ Ø;,"z˜ššĀŚŚ­[·Ę§Ÿ~ŠnŻŗA[›ĻTˆˆØņc€ˆ4ŹĆ‡±dÉ:tHŻ”Ń{ģīŻ»8yņ$VÆ^FaéŅ„7n“““Ō‘RLW‘FĖ–-ƒ½½=+’DT®"##1aĀ899!--MŻį)ÅUy‚ ąĖ/愧§'¤R©ŗĆ!¢*źäÉ“čŽ½;Ō ‘BLQ•·dÉüśėÆźƒˆ4ĄĆ‡įāā‚ÜÜ\u‡BDD$‡ "ŖŅ®_掄K—Ŗ; "Ņ AAAXµj•ŗĆ ""’ĆA‰ØJ›7ožŅŃżutt0hŠ ōīŻuźŌžž^GGDļ£ųųxÜ»w‡FzzŗĀcÖ¬Yƒ)S¦ĄŅҲ‚£#""RŽ "Ŗ²žłē\¾|Yį>KKKģܹķŚµ«ąØˆØ*6lf͚…©S§āśõėrūÓÓÓ±sēN,\øP Ń)Ę.DTe8qBįėŗŗŗŲ½{7+’DōVĢĶĶįēē…ū?^Į "Ŗ²‚‚‚¾īģģŒ6mŚTp4DTaöģŁ ÷Żŗu‹ƒQ„ĀUY/_¾TųśĒ\Į‘QU¦ģwŠT*ELLLGCDD¤DTeÅĒĒ+|½N: Ue&&&ØQ£†Ā}qqq ‘rLQ••ŸŸÆšu--­ Ž„ˆŖ:mmÅ_©”ż"""R&ˆˆˆˆˆˆˆ4DDDDDDD€ """"""" Ą‘`€ˆˆˆˆˆˆH0@DDDDDD¤˜ """"""ŅLi&ˆˆˆˆˆˆˆ4DDDDDDD€ """"""" Ą‘`€ˆˆˆˆˆˆH0@DDDDDD¤˜ """"""ŅLi&ˆˆˆˆˆˆˆ4DDDDDDD€ """"""" Ą‘`€ˆˆˆˆˆˆH0@DDDDDD¤˜ """"""ŅLi&ˆˆˆˆˆˆˆ4DDDDDDD€ """"""" Ą‘`€ˆˆˆˆˆˆH0@DDDDDD¤˜ """"""ŅLi&ˆˆˆˆˆˆˆ4DDDDDDD€ """"""" Ą‘`€ˆˆˆˆˆˆH0@DDDDDD¤˜ """"""ŅLi&ˆˆˆˆˆˆˆ4€®ŗ ""õyžü9žžūoÆ$‡ĘٳgßŖ ]]]888`īܹ°µµ-§Čˆˆˆˆ*»i˜S§NĮŃѱT•HŪńā IDATNNʖ-[0xš`„„„”xü¶mŪ0jŌØRUž ::ŽŽŽ6lāāāJuī»&‘HpņäI8::āŅ„Kź‡ˆˆˆØTŲ€ˆHƒ<|ų3fĢ€D"PšDū“O>Aæ~żŠøqcT«V ĘĘĘČŹŹĀėׯ‹ąäɓ PPAŸKbooiÓ¦•ź©TŠ;wbٲe©©©šóóĆüłóĖ56"""¢w…]ˆˆ4Dnn..^¼(nϟ?æÄŹ!Ģ›7ķŚµ_;}ś“ĀcĆĆĆńäÉqŪĒĒ§ÄŹ”jÕŖaõźÕ2OՕ]§¢ikkć›o¾£££ųڟž©ĘˆˆˆˆˆJ‡ "" ÜÜ\qŪÉÉ©Ōe 2D\W6@Ń×ĶĢĢŠ«WÆR]£zõźųųćK¼Žŗ 6L\ˆˆ@jjŖ£!"""R»iˆ““4q½F077/u666āz||<AėŸ_ō:ÖÖÖŠÖ.}®¹ču*Ū@€­Zµ×A@\\LMMĒŽ[,Œ;=zōĄķŪ·qųša<|ųϟ?‡D"ƒƒÖ­['Wö£GpžüyܼyŃŃŃā ZZZ011••ģģģ0`ĄōźÕKį{oooqūóĻ?Gß¾}‹½'q|ƒŗuėĀÓÓłłłpwwGvv6`芔pppPé=š7oŅÓÓĪĪĪ4hJēѻő†(:}nn.$ tuK÷g yóę2}ēóóóåŹ(zĀŹciuéŅE¼Ž‰‰I™ŹxW +ū…222Äõąą`:tč€3gĪ`×®]reŽĆP(99 .ğž)Žš¦ŌŌT<ž·nŻĀž={мyslŪ¶Mn:† "//OLDÜ»w’ż·Ņ)/]ŗ„-[¶ˆŪ;vģPŠķ€x?Æ^½R)ššįCųūū‹Ūnnn%žCDDDƒ "" Q§Nq]"‘ąéÓ§hŃ¢E©Ź°±±ĮĀ… U¾NTT233ahhXŖėtģŲ;v,Õ9%''Gf[ŁLŪ·oĒ«WÆä^×ÓӓŁĪŹŹĀøqćšæ’żOęõźÕ«£vķŚØ^½:rss‘žžŽäädq’“'O0tčPœ={uė֕9wéŅ„ Bff&¢££±}ūv̜9S.‰D‚%K–ˆŪ ©ä3‡ܹs‘‘‘hŌØ‘Āū-Tt\„>ų ŌŸ1"""zw8‘†033C³fĶÄmooļ2?”/N›6mÄ æD"ĮŹ•+‘ŸŸ_ī×Q—Āi Õ¬YSįq…•’V­ZaƆ øq㢢¢ŽĶ›7‹ĒķŽ½[¦ņ?jŌ(œ>}ĮĮĮøvķ.^¼ˆ+W®ąß’ō70oŽ<čėė(h°xńb¹k[[[ć»ļ¾··lŁ‚ŲŲX¹ćöķŪ'ŲhhhˆeĖ–ÉģļŲ±£ŲåA(}_ M/ˆˆˆŌ "" ņÕW_‰ėēϟGß¾}įė닿’žOŸ>•{ŗ]śśś=z“øżėÆæā“O>ĮĻ?’Œ«WÆ"**Jf0Ā÷MPPønff&ÓāįMƒ B`` FŒkkk¹ńČt˜5kVÆ^ ;;;± ~QÖÖ֘9s&~śé'ńµ3gĪ ))IīŲ‰'¢uėրĢĢLųųųČģOIIĮśõėÅķļ¾ūõźÕ“+g̘1āz@@€Ņ. а°0€®®.†ŖōX"""Ŗxģ@D¤AFóēĻćܹs€/^Č FWX©­WÆźÖ­ +++4jŌM›6E³fĶP½zõÆ3wī\\½z><~ü+V¬9ĘĀĀVVV°²²B½zõä®SŚń *Bll,~łåqūĆ?TX© Ę.Ų°aƒų“^‘ˆˆńɼ‘‘‘Ģų Åqpp@›6mp’ž}H$\¾|ĪĪĪ2ĒčźźĀŪŪC‡…T*ő#G0aĀq*Ēõė׋] Z·n‰'*¼Ö°aưbÅ dggćŁ³gųēŸ”vĻ8yņ¤øŽ«W/XXXØt?DDDT1*ß·+""zg“µµńĖ/æ`ķŚµšóóCVV–Ü1ÉÉÉHNNFpp°Ü>|ņÉ'pss“©’M5jŌĄįƇįå兀€H$¹cāććū÷ļĖķ«Y³&\\\0sęLµV"óóóÅ÷ćśõėŲ¼y3āććÅż_żµŅsū÷ļ##£bĖüų±ønoo5jØ[Æ^½Ä÷.44Tį1ķ۷ǘ1c°wļ^‚€Å‹ćčŃ£ ĆŽ½{|&|||”&\Œįää„ß’päČ„ €¢Ķ’‡®ņ½QÅ`€ˆHĆčźźbĮ‚puuÅ„K—p’ž}DEE!66/_¾D\\œĀ ;P0Ŗ@@N:…Ķ›7cĄ€JÆcdd„uėÖĮŻŻAAAxōč"##‡˜˜$$$( %%~~~ ÄīŻ»aoo_.÷^h×®] Gē/±cĒ¢K—.J÷ׯ_æÄ2Š&¬¬¬Już† Šėϟ?Wz܂ pźŌ)ÄĒĒćĪ;8~ü8>,žŒĒ'¶ PfģŲ±b 00K–,‘Ģ0""BLhaąĄ„ŗ"""z÷˜ "ŅP¦¦¦prr‚“““Ģė‚ >>±±±xõźbbbŒ›7o"$$@ĮČõ3fĢĄéÓ§ŃøqćbÆcee…#FȽ.‘H &^¼x‡Šƒåäo¾łgĻž­4Óźčč`Ź”)pww/ńø’ķ»Æl6eĢĢĢÄõĢĢL„Ē™˜˜ĄÓÓSœ`įĀ…āŌ…–––˜?~‰×jß¾=ģģģščŃ#$''ćĀ… rS}ś?xšąRß½{L‘ ---XZZĀŅŅmŚ“‘ŁwźŌ)LŸ>¹¹¹ČŹŹĀ¦M›äĘP•®®®8@QR©~~~X²d AĄĖ—/±wļ^LŸ>½Ģ÷ō&}}}•+Øśśś066F“&MŠ”CøøøØōt_yyyāziš’ĘUHQWŽ¢†Š_ż·nŻ+’@A2ĄŲŲX„ė3ß’=€‚Į‹K(Jų‘ś1@DD*4h¦M›___ U«V•ė€}ŚŚŚ˜4iīŽ½‹ćĒ(\®<cĒŽÅ’%KŹ­¼²*ŚÕāĶ&õ%‘J„*›˜˜Øpœ€ėׯ«\YwqqĮŠ+••…sēĪ!55¦¦¦€ččhq<‚zõź”k×®*ĒFDDD‡ÓiˆG!00øvķZ™Ė2dˆøž––†„„™ż·nŻÆ£h€?U ¾i̘1āś‘#GÄõ¢Ķ’]\\T»"""ŖpLiˆš5kŠėEŸ+­7+‹oö„/zÄÄÄr¹Ž¶¶6ŖU«Vę²*«Ā&ō@éE"µk×VxŒD"Į¢E‹Ä§ó£FB«V­šķ·ßŠē„„„`ĒŽ*]³]»vhŻŗ5ąöķۈŠŠBLL žłē@Ū¶mѬY³RŻU&ˆˆ4D‹-ÄõČČČ2WΟ>}*³]§N„׳ߒž§tŖæ’„‡‡‹ėµjÕ*uł÷A“&MÄõ7ßגķÓ_·n]…ĒģŲ±Cœ¹ĮŲŲß}÷Ü:lŲ°/^¼Péŗ…­AĄŃ£Gń×_‰ †įƇ—źˆˆˆØb1@D¤!ڵk'öż–H$Ų¶m[™Ź9pą€øŽ¤I¹éłŠC‡•ś‚ Ąßß_Ü.ižś÷UĖ–-ÅžņOž<Į³gĻT:///.\·½?/_¾k777™–£FBĖ–-“>šōōTéŚ...āŒbó]]]qŒ"""Ŗœ˜ "҆††6l˜øżóĻ?ĆĒĒGå¾õYYYšńń‘©Š+zāŪ¼ystéŅEÜöššĄ®]»››«Ņu’’’ąęę&38]Ńø«sss|ųᇀüü|Ģ›7ÆÄ®‚ `Ŋˆ˜˜˜ cĒŽrĒyyy!33`ccƒ‰'Źģ×Ńё©ōŸ9sgĻž-1f###8;;(h„qćĘ @ß¾}ann^āłDDD¤>œˆHƒø¹¹įܹsHHH€ Ų²e vķŚ…^½z”E‹°¶¶†©©)“““999ˆŽŽĘćĒqåŹ¤¦¦ŠeŁŚŚbҤI ÆóĆ?ą³Ļ>CNN^æ~ ///¬_æ}ōš7oKKK™–āTr×®]“ą®WÆ^23T5®®®øzõ*ąŚµkčÕ«¾ųā ŲŪŪĆŅŅśśśJ„HLLDpp0Ž;†G‰ēOœ8Q|"_čüłó8uꔸķįį”° EÆ^½0`Ą±āļé鉞={Źėš¦1cĘȓЪn’†ˆˆØ*a€ˆHƒŌ«W{öģĮ”)S  `4ł3gĪąĢ™3*—Ó¼ysģŲ±††† ÷·k×[·nÅģŁ³ÅéēRSSńĒ”*ŽnŻŗaóęĶUzZ¹>}śĄÕÕ[·nP0«Ā¦M›T:·_æ~˜5k–Ģk9992Oö{ö쉁*-ĆĆĆ/^„D"Att4|}}±pįĀbÆŪ¶m[|šĮxšą€‚V P)f"""RŸŖūŠˆˆ²··Ē¹sē0gĪ4nÜøTē6lŲ‹-B`` lllŠ=¶’žøpį¾łęXZZ–ź:­[·ĘŖU«ąļļZµj•źÜ÷Ń¢E‹°iÓ&ŲŚŚŖt¼¹¹9¼¼¼°cǹ'ū7nDTT€‚fž^^^ŖդI|łå—āööķŪńäɓc(ŚķĄŃѱJĪŅ@DDTÕ°‘244ÄģŁ³1{öl„‡‡#$$įįįHKKCzz:¤R)@__uźŌA½zõо}{4jŌØT×±°°€§§'¾’ž{„††"44įįįČŹŹ’éN```€ŗuė¢~żśčŲ±£ÜĢåĮÕÕUl¦^Rņ¢¬†Š>ų@A+‰ŅžėģģŒĒćĮƒˆˆˆ@FFņņņ ÆÆXXX cĒŽhÕŖttt–Ó¾}{±5A͚5ŁžŠ3gĪ™ ż›S=¾)##'Nœ·?ūģ3Un‘ˆˆˆŌŒ "" פI™é莓lŁR„Źč»Ņ¹sēw~·½G---ŲŁŁĮĪĪ®Ģe”„)¾±±1ī“J„2]0RRR0wī\$''Ś“iƒN:•-X"""ŖPL‘R¾¾¾Ų¶mj×® }}}DEE‰3:hiiaŃ¢EjސˆˆˆTÅ+++KW ––,X€ž={Ŗ)*"""*-&ˆˆˆH)“nŻiiiČĶĶEķŚµŃ¬Y3Œ3~ų”ŗĆ#""¢R`€ˆˆˆ”rqq‹‹‹ŗĆ ""¢rĄi‰ˆˆˆˆˆˆ4DDDDDDD€ """"""" Ą‘`€ˆˆˆˆˆˆH0@DDDDDD¤˜ """"""ŅLi&ˆˆˆˆˆˆˆ4DDDDDDD€ """"""" Ą‘`€ˆˆˆˆˆˆH0@DDDDDD¤˜ """"""ŅLi&ˆˆˆˆˆˆˆ4DDDDDDD€ """"""" Ą‘`€ˆˆˆˆˆˆHčŖ;"""*_Ļž=CBB²³³•“ÜÜ\„ūÓŅŅ ‚Ā}R©ééé*ĒS\YŠH$dffʽ^§NĢž=[årˆˆˆHDDļ™ģģl,\øÆ_æVzLq.AššŖōÜŅTīrrrŠćMłłłČČČPŗæ{÷ī8xš Źå‘¼„„|ņÉ'žĻļ³>ų PwDDDļ%&ˆˆŽ3Ū¶mƑ#GŌĘ;qõźUĀŃŃQŻ”¼·V®\Ye+’°dÉ|ōŃGØV­šŗC!""zļp "¢÷Č«WưuėVu‡ńN-_¾¼Ų¦ė¤Üżū÷•&‡“µµ”««+.:::āRtŸ¶¶¶øTF‘‘‘Ų¾}»ŗĆ ""z/UĪæīDD¤²²²ŌĘ;õāÅ l޼YŻa¼—/^ ©TŖpŸT*…D"—üü|q)ŗĻŌŌ|š ZZZ°²²’)«zõź033C5ФI™E[[Mš4ŽŽŽx|Żŗuahh(wlķŚµĖtŸ›6mBttt™Ī%""Ņdģ@Dōžø’>Ž=śVeŌÆ_S¦L©©)nŻŗ…}ūö”aƆh޼9Īž=+׳gO$$$ ^½z2ż­£¢¢pęĢL˜0Ė–-Cnn.“µµ1~üx¼zõ }śō‘¹^@@n޼Yź8žłgŒ1666e¾WMóĒ”é½.jōčŃ=z4®^½ŠŽ;" æ’ž;vī܉!C†ˆĒuźŌ żū÷Ē70wī\Üŗu @A’aÕŖUø{÷.<<<°iÓ&€ŸŸęĪ‹±cĒ¢^½z°±±APPn޼‰€€€RĒ™•+W⧟~z«ū%""Ņ4L½A€———ҧ»ŖŚ½{7¾’ž{„……aźŌ©˜6mīŽ½‹=zČ$:wīŒŠŠPtģŲ’üónß¾ xżś5Zµj…"==«WƆ¶¶6FŒńćĒćɓ'˜8q""##qįĀÄĒĒ—)ĪÜÜ\,_¾;wī|«ūÕÆ_æĘŹ•+ßŗœ‰'ā“O>D"ŽŽvļŽß’½ŲsNž<‰õė׋ۦ¦¦8{ö,pšąAÄÅÅ”ņä öķŪ÷ĪŹ'""Ŗj˜ "Ŗä¶mŪV.OwSSSajj*n×®]Ó¦M+ń¼5kÖ`Ź”)˜2e 8 ¾žųńcÄĘƾÓ'ōĻž=ƒŸŸß;+æ*šöö.·i’ņņņ`mm 033òeĖJ<')) įįįĒ‹/döyzzĀĖĖKf@Ąņ¶vķZ$&&¾³ņ‰ˆˆŖ¶™#"ŖÄbccĖmŚæäädā‹/¾@HHʏ‡¬­­Å§½oV&[“h!NĖ÷ęō|K—.űcĒŽé“}¾¾¾:t(źŌ©óĪ®ń¾zšą>\nå-X°6l€D"AõźÕńĆ?@Ō­[W 77¾¾¾HNNFVVœńį‡ŠeøŗŗŠŻB’““ńŪoæĮÕÕUܟ““ƒääär‹955«WÆĘŖU«Ź­L""¢ŖJ I’žÕ  =€S…mŲ°nnnj ˆØ¬jÕŖ„°¢€Ī;«!¢Ņ›={v¹VšjÖ¬ '''XYYįžżū8uźźÕ«‡±cNJĒ<ž”””HJJ‚••zöģ)īKHHĄłóēQ§Nq,>ś–––bœ:uBJJ ĀĀĀŹ-īįƇĆ××·ÜŹ«*FŒ!ž4™¶¶6Ž?ŽvķŚ©-†V­Z)l‰qķŚ5™ ‘*Z¶l‰ĀĶ!ҤHüߒTd=õæc2dżw^.€<łl@DTIŻææLS¤'%%{÷ī•yķŋJŸž>}śW®\‘{żŁ³gāś„K—döĪPž0jŌ(tķŚµÜĖ~_²ņ’©TŠÅ‹ćčŃ£ŠŅŅRw8DDD•DD•ŌāŋßzŚæŖB,^¼ļ“?łū"//O&icdd„N:i\å7&&ĮĮĮ€;wīąČ‘#1b„š£"""Ŗ¼˜ "Ŗ„Nœ8›7oŠŪ“&MĀG}¤ĘˆŌćśõėā<€æææLwMµmŪ6™Vū÷ļ×Čé„R)ś÷ļ/¶:Y±b`ll¬ęȈˆˆ*'&ˆˆ*™×Æ_ĖLÆgoouėÖA[[ó&nqqqĮżū÷Xµj† 3335G¦> Ų²e‹øķä䤑•  ļ’śõėѧOH„R$$$Ą××?üšƒŗC#""Ŗ”4ļŪ$Q%÷ę“>>>Ył/“vķZčźä«SRR°nŻ:5G¤^«V­›Ó××ĒŅ„KÕ‘zµk×£G·wķŚUtŠ$"""*BsæQUB 2Óž :Tf~Mdgg‡‰'ŠŪūöķĆ£GŌ‘ś<|ų‡·]]]Ń“iS5FT9,Y²¦¦¦‰D‚%K–Ø9"""¢Ź‰ "¢JdåŹ•2Ow/^¬Ž€*‰~ųęęę€üü|xxx@5GUńV¬Xüü|@ķŚµįīī®ęˆ* ,\øPܾ|ł2NŸ>­Ęˆˆˆˆ*'&ˆˆ*‰ąČ‘#āöŒ3ФI5FTyŌ¬Yāö­[·pāÄ 5FTńžüóO\¾|YÜöšš€‰‰‰#Ŗ\&OžŒÖ­[‹Ū^^^ČĪĪVcDDDD•DD•DŃi’,,,0gĪ5GT¹Lœ8:t·—/_ŽĢĢL5FTqņņņąćć#n·lŁćĒWé\Mi)”««+ó½xńŪ¶mScDDDD•DD•Ąü7nˆŪžžžÅ>ŻĶŹŹĀ… ąēē‡ķŪ·cß¾}øqćrss+"\µŠÖÖĘŖU«Ä¹ī_½z…Ķ›7«9ŖŠńĖ/æ ""BÜöńńF|Svv6V®\‰=z f͚055…™™ڶm‹Y³f!**Ŗ¢Ā®p½{÷†³³³ø½eĖ™5‰ˆˆ4§$"R³ÜÜ\¬ZµJÜnÓ¦M±sŻļŪ·sēĪEVV–ܾ:uź`óęĶpppx'±Ŗ[×®]ńłēŸćąĮƒ fLųģ³ĻŖtW‰„„™Dǐ!CŠÆ_?„ĒõÕWų믿ąģģŒńćĒC__YYYxōč<ˆĄĄ@\æ~~…óööĘŁ³g‘••…œœ,_¾?’ü³ŗĆ"""ŖŲ€ˆHͶmŪ†ČČHq{łņåŠŃŃQxģÓ§O1sęLtģŲW®\Ajj*ŅŅŅƒ€€įĖ/æDRRRE…_įV¬X!¶ŽČĖĖ«ņs¾Æ]»ééé †\¶l™ŅcŸ={†“'OāŪoæÅž={0eŹLœ8Ó§OĒ–-[ąēē‡ųųx™±&ŖšśõėĆĶĶMÜ>yņ$‚‚‚ŌQåĮ‘ÅĒĒ㧟~·Ń·o_„Ē_øpłłłX»v-Ś“i#6‡744D’žż1ž|dffāÖ­[rēęēē#..ŃŃŃ%öĻĖĖƋ/šņåKqŌł·•ŸŸččh¤„„ɼžččhÄÅÅ!//ÆÄr,--eFæætéĪ;W.1V6?Ęoæż&nóĶ7°µµUzü³gϽzõRøæ{÷ī ӝ(čN±fĶ|łå—pqqĮĉįėė‹ųųx™ć$ 8€¹sēbŌØQųüóĻ1gĪœ:uJęø-[¶`ćʍrחH$˜5k.\øøwļf͚…ēϟcõźÕ9r$ÖÆ_/ńāEĢ™3#GŽÄȑ#ńķ·ßā?ž(q\ƒY³f”Q£Fā¶——$I±ēi&ˆˆŌhõźÕ2Óž-_¾¼Ųć ­]»¶c$ź IDATĀż;wĘĉQ³fMńµģģlĢ;7†­­-ģģģ`mmž={бBĒGĒŽQ»vm“jÕ -[¶„ f̘!^¬­­eFå/tżśu˜˜˜ˆ£Õ{zz¢Y³fŲøq#4h;;;ģßæpēĪ 8ÖÖÖ°³³ƒ­­-6lˆ)S¦ 99¹Ų÷ĮÕÕ͚5·—.]ŖRņą}³téR1cnnŽ {|įT‰įįį ÷›šš"--M¦ĖIpp0:wīŒ7"11fffHHH€ŗvķ*Ó:eĀ„ ˜:u*nß¾ ]]] ((Ÿž¹Ģ4|§OŸĘ_ż%w}©T ???Üæ@A"ĀĻĻŲ“i“ĢĻ}ɒ%pvvĘ„K— ­­ ===ܾ}cƌĮōéӋ} °råJqūɓ'Ų³gO±ēiŽ@D¤&=Ā”C‡Äķ©S§–Ų—ŻŽŽšėÆæbΜ9b €BM›6ŏ?ž(óŚüłóįļļ777tčŠ&&&xžü9~žłg|ńÅøyó&lllp’ž}Lœ8;wĘ¢E‹`ii‰¼¼<ażśõ[¶l)õ}ĘÅÅa͚5˜9s&>ųąŲŁŁ!..ĪĪĪhÜø16n܈ʍ#;;÷ļß“"…‰EōõõįććƒįƇ(ØHžņĖ/˜6mZ©ć«¬Īž=+Ótżūᅦ©©i±ē“iÓmŚ“——ž>}ŠvķŚĮŚŚÖÖÖhŠ  äĪY±b pķŚ51aaa茵+¶lقիWćÖ­[ųć?°xńb¹*\]]±mŪ6Ģ;W¦ U5oŽ{÷ī…±±1 ::¾¾¾˜6mšĢČž…ļƦM›šŻwß”iÓ¦JĖtrrBß¾}qńāEĄśõė1tčŠ2ÅGDDTU0@D¤&Ė—/ŸīÖ®]óęĶ+ńœ¾}ū¢OŸ>X²d ¶nŻ [[[ŌÆ_ÖÖÖØ_æ>ģģģŠ½{whk4šŹĪΆææ?\]]ńż÷ß˔ս{wŲŪŪćŲ±c˜={6<]]]üöŪo033ėׯ^¾|‰€€€2%AĄoæż†=zˆÆmŻŗ™™™ŲææLSķ"%%›6mBFFŒŒŒ”–;`Ą 4Hl~¾qćF >uźŌ)uŒ•D"‘i Ņ¢E |łå—*{šąAxxxĄßß_nš»śõėcųšįX°` WÆ^ÅēŸ.W1¶µµE÷īŻqļŽ=Ąµk×ćʍ“»ęØQ£påŹDGG—©‚½`Į±ņ7oŽD~~>¦N*wģŲ±c±iÓ&ܽ{·ŲPŠĀ¦{÷īČĖĖCZZÖ¬Y#—P ""Ņ$L©Į™3gÄfņąįįQģ“…“µµ€ĄĄ@ܼy/^¼@dd$®^½Šøø8äęę¢eĖ–8|ų06lˆēϟćõė× ū„7lŲā“p?†LåæŠ×_-Z@"‘(~N±ļy”§OŸ¢aƆ2•’B:u‚T*ETTģģģŠ-{ÕŖUøxń"^æ~ĢĢLx{{Ć××·TńUF»wļ–iĘ_Ü“oŖ_æ>vļŽ HOOĒ‹/ƒččh\¾|›6mBxx8öļßAœœŒŠŠPlŲ°A®¬ÄÄDH„R@ll,ōōōv?łč£šļæ’–įN ¼Yfbb"ąŠ”Cr÷]8~EįĄˆÅiŃ¢¾žśklŻŗąļļQ£F”mŪ¶eŽ•ˆˆč}ĘQ“H$X±b…øŻ²eKŒ?^åóuuu1tčP :TęõÜÜ\œąą`̚5KnŸ¾¾>\\\ąļļ/Vœ »|õÕW2ƒęUæ~}ńŲ·­•4:{!mmmXYYaɒ%JiÜø±Je¹»»Ćßß111‹/F`` xļļ›uė։ƒįéźź;ķߛ8777\øpAiĀĘŽŽū÷ļGll,ģģģ`hhˆńćĒ+üLehhˆŒŒ ‚ ÷9ILLÄÆæž GGGńs¦č³PX±/IaåžąĮƒØ^½ŗJē(cllŒļæ’ß~ū-€‚Į';—·*WA@pp0}н{÷ŠŪ_}õZµj„ņł…}ā‹kŽ---XZZ(˜ŃįŃ£G 3f † "–-‘HÄü‹ŗ{÷.¼¼¼Äχ™™™Ü‚ÄńJR·n]PWxx86lˆĆ‡«TŒ?:t·—-[&3«Åū ''~~~Ų·oīŻ»‡ččhDDDąļæ’†ÆÆ/n޼©ī©ččč@KKKnŃÓӃ F/^”ė5³³³‘šš*÷ŗƒƒtttJ]Žśõ딄„…Ó§O—Gxo-++KnzZ¢ŖŒ "¢ “vķZ™§»K—.-Õł]»vPЊ@‘/^ąņåĖhÓ¦ €‚ж±±1åŽMLLÄčŃ£ÅAōŚ·oG!$$DīŲ‹/"99µjÕ4hŠ·oßū‡ Pé>š7oŽššp<|ųPnß¾}ūšå—_"77W„²ą‹/¾g`õźÕļåŗeĖ–‰ÉSSS™©õTѽ{w4mŚšõõÅÕ«WЧOŸāʍX¼x1vļŽžżū‹OŁœœpōčQųłł!,, ŁŁŁHHH€ææ?N:%v§ppp€ęϟŪ·o#..)))ø~ż:¼½½ann.V²ķķķ ooo¼zõ  ĀܹsUŗnŻŗ”vķŚpwwGPPbcc‘••…ŠŠPxyy!33SL©B[[«WÆ[.ÄĒĒ—i@Ku‘J„Ų·ož>}ŖpæD"ĮńćĒßjz 0Ū¶m“Y~üńG|śé§8vģUn„Šļæ’^ü›RTÆ^½0bĈR—×¼ys|öŁgb÷"uūöŪoåĘ©!ŖŹŲ€ˆØ‚„……aß¾}āö¤I“JõtœŃµkW,Z“‡B‹-`ii‰ÜÜ\ÄÄÄąģŁ³ČĻĻGü×ÓÓĆĢ™3±råJDFFĀŽŽęęęHIIĮ±cĒ §§‡Ń£G(č¾eĖ 2ĪĪΰ²²‚T*ÅķŪ·qęĢĢž=[|Śćääooo 8½{÷FµjÕš’÷xņä‰J÷1lŲ0¬]»C† ££#7n „„„ ĪĪĪ„Ķ_KK «V­BŸ>}ŸŸ„„ųśśĀÓÓ³TļÆ:]¹rēϟ·,XPźõõōōpäČø¹¹ĮĖĖK® ­­ GGG™©"ēϟØØ(Ģž=[&”£­­!C†ˆ•v ģܹß~ū-śõė'SnķŚµ±cDZ¹ž”)SpćĘ x{{ĆŪŪ@A•~ų^^^%އöļߏo¾łƒ–»ÖʍÅ®+ŖźŅ„ >’üs±uȶmŪšŁgŸ•8õfešļæ’"""¢ÄćŽ?ŽF•8]$½ßڶm‹É“'+ÜW·n],\ø=BėÖ­ßie:ĻŃŃŽŽŽå ©J I’žÕ  =€S…mŲ°nnnj ˆØ¬jÕŖ%>m/* ;w®šx&L˜€ .jÖ¬‰»wļ–iʓׯ_cĻž=8}ś4ĀĆƑžžŽ5jĄÜÜķŚµĆ×_-÷Åļ·ß~ĆĮƒŽģģlŌŖU :tĄōéÓeŽ dž Œ/^@WWÖÖÖųōÓO1uźT±Y~~~>üüüšūļæ#22ĘĘĘčׯFŽ 777lÜøķŚµĆĻ?’Œ'NąĻ?’”»ŲŲXüųćø|ł2 ­­ kkk899į›o¾Q8g}IfΜ‰={ö(hań×_‰ąUfłłł4h‚ƒƒ nxóęMT«V­Ģe&$$ $$)))ŠÓӃ©©)š7o®“Æx||<‚ƒƒ‘””sss4iŅÖÖÖrǽ~żˆ‰‰Ann.,--Ńŗuk…ƒL†‡‡#<<R©ķŪ·‡……ž÷æ’”nŻŗ°““DJJ ž={†–-[*ģė/•Jńųńc¼xńłłł°°°@›6mŹü¾ÄĘĘ¢C‡ā  Ą®]»ŹT֛Zµj„°[Įµk×JÕZA‘={ö؜\kÖ¬&L˜ĄA«(Ģ™3kÖ¬Qø’Ņ„K读7Nœ8'''dggcķŚµ8vģ^½z…5jĄŹŹ pww’/uźŌ ß~ū-‚‚‚pžüy4hŠ={öÄ©S§ääd±€»»;¾ųā ¬\¹7oŽÄ±cĒÄė8p{öģĮóēĻ ōčŃīīīhŃ¢€‚eīīī»ólŲ°+V¬€?~ ©TŠ–-[b޼y0`€Xžóēϱzõjœ?^l•VÆ^=Œ7Nœ¢4** Ɔ Ú5kšūļæćōéÓČÉɁ­­-&OžŒ±cĒfĻžĖ—/#22™™™ā¬3‹/†££#$ 6lŲ€ćĒćéÓ§ŠŅŅBŻŗu1dČ,\ø°ÄæQ·nŻĀš5k‚WÆ^ĮĄĄ:tĄäɓ1hŠ ńøgĻžaõźÕųūļæÅ{jŠ &L˜€Q£FBCC1jŌ(¬_æūöķĆŁ³g‘›› [[[L›6 _|ń…ź"zo“lٲh«Ģ!ҤHüߒTd=õæc2dżw^.€<łl@DT®\¹"Vž²=Ż-T­Z5Lžśč#äēē‹×6m4h€ŌŌT\ŗt £GFķŚµ1`ĄdggćĪ;1b0ž|$''ćĉ9r$LLLšÉ'Ÿ”Ū爪6&ˆˆŽ±üü|±Ā<Ż4i’śŖĀ,,,°pįB,X°@Į4r§OŸ†ƒƒƒš#S.##CœĘ(čW[8š•æ3f`ß¾} Pš%’üłó [0T„hķÆæž‚­­-gŠ@‡†–––˜h;zō(¦M›&ó7RRR䦣l×®._¾ ===ńµ‘#GbΜ9xõź|||нö–-[Š£GŹ“@6lģķķqāÄ ü?öĪ<.§ō’’ĻVm²¤“‰Ź>Č(ŪDŒbģŚŁ·Lū:ö,Ł—² Y²SJö-ĘnJĘ®AJŹ”ŠŅ~ßæ?śŽēēø‹Jʘ¹ŸGīs®sėœ»Ī¹®÷ņz8°Šc„R)sęĢU#3f ¦¦¦ųłłŃ“iSƒ‚‚„vńńń\æ~]ŲöžOėÖ­qrrbŹ”)‚§BÅGWW·ŠķgłÆōōtŃdĮĪĪNNŌLAŁ¢ŖŖ*„µBA˜źĘæāˆŠ&66V”ƒŽÆ_揆Ä+(:uź$ņŖ­ZµŖDaö’——'„^HŊKŻÆ Y%†’šäÉ®_æžŁēVšĻ#++‹””ŃĻŪ·oiŚ“)žžžlٲEh{õźU:w±1•+WFEEmmmNœ8!×oitWddgg“™™)”}%%%¼½½iŪ¶ķGū(LųµJ•*¢Eš®]»hٲ%T¬X%%%ōõõIHH;VGGGn›²²r±+$̘1ƒ;vP¾|yźÖ­‹ƒƒƒ båŹ•…ź ½Ojjj‘)UC‡EśūūÓ¼ysŃ5jōūÜkR E†FFF8::RµjU²³³‰‹‹c×®]lŻŗ•ß’ ÖĒššp“““ büųń…ö»eĖī߿ϻwļČĪĪąĶ›7„‡‡Ó©S'!Æ ņøXæ~=ėÖ­#44TQ¦D‚`ll,ē%/Åߕóėėė+ņī.X°ąo9ļ¶mŪŅ­[7Ž9Ąš5kpvv.±rü—ĘŪŪ[xhkk—ZU[AÉY¶lĶ›7';;›ōōt–,YŠ+JÕ×üA~~~”ūŒŒŒ>g˜@Aڐ••QQQ%:īŌ©SŌŖU«Ōz# ž™ōģŁ³HĄ÷yżś5;vÄĘʆU«V”§§GŊŃŠŠ`ĒŽ…г–555ŌŌŌ”ŲŅPŌߐŒsēĪŃæ† Ę“iÓ(_¾<ŗŗŗTŖT©ČŌ‚Ļ”_æ~“k׎›7oC\\Ļž=ĆŪŪ›ķŪ·QdzŽ––V±īÅɓ'2d#GŽdęĢ™ččč ««KåŹ•Ā~ ¾ @ųśśR¾|y"""ä¬÷3fĢ V­ZüśėÆru„;uźD@@@”€äädĪž=K·nŻ ­•=jŌØB=ƒ/^¼ eĖ–üļ’#22ņ3ÆģߏD"ł¬‚õźÕć÷ß—Ū¾{÷n<<<>ĖŪQ>ōīöļß_įŻżYøp!”””dee‘••ÅāŋY»vķ×–@xxøh>aĀ„L]ģ’xxx°zõjöļßOæ~żųžūļKÜצM› ŻnjjZf%łŗwļγgĻHKK+ö19991|ųpÅ{ń?HDDoß¾eĖ–-˜››‹öedd”é¹”••©ZµŖ`šžf͚įāāĀŌ©S‹ģ#..NN\411Q3½pį&&&…ž½½yóę3F/Off&«WÆĘÉÉ‰īŻ»‹ö>|˜=zšäÉjÕŖUčńFFFE–ī;v,ϟ?'$$„ .`nnĪÆæž*×®¬ÆIŠ·AüłēŸX[[ŗW½zuĢĶĶyņä‰Ü>WWWnÜøĮ³gĻäö8puuõ‹t˜˜˜0qāDnŻŗõÉ2@\ŗt‰Ż»wÓ§OzōčĮüłóIOO'99™™3gŅ„K\]]ńóó“³¶Žŗu‹É“'ćģģL÷īŻ:t(¢ŚŠPP“xƌ8::Ņ„K „ææ?¹¹¹¢vOž4eddZģ°quuu޾}ūI}½zõŽ{2žųćĀĀĀ>Y•䃜IIIœ;wN4ĢĪĪ꯻wrļīšąĮƒR‡Į«««ĖŻ£råŹ1{ölöļß/×¾ØtŸ÷©WÆ×®]“[+dddpųša!”_vMyyy¢vwīÜ!::ZŚÆą‹ ˆ(īßæO^^ŖŖņ·é½šŒ"ģģģŠ××'00)S¦ˆöеk×R QÉ<Ō®]»Čv~~~?~mmmZ“hAjj*óęĶćŌ©S$%%QµjUĢĶĶyōčÄÄÄ‚S!!!ōģŁ“ZµjaeeE… xųš![·nåąĮƒB)­+W®Š®];źÕ«GÓ¦MQUUåéÓ§ >œsēαcĒ  ‘ U«V„uėÖšņåK&NœČžżū9ž*Œ›7oŠr,'MšTfŽŻK—.qįĀž={F~~>+V¤f͚tīÜYĪĖó_gāÄ‰ģŻ»WŠfńņņāŲ±c%VU/k‚ƒƒEįÜóēĻ/“ˆ”G1vģX®]»&7YoÜø1 .¤U«V¢ķ™™™$&&bhhˆ††Ęgį[BGG‡Ł³gćéé ,T‚ƒƒéٳē'½sē7nÕ@’ww÷2+Ō„nҤ %:īōéÓŌŖU«Šül’^Zµj…žžNNNøøø §§GBBGŽ!;;»ŲĻAkkkRSSiŻŗ5Mš4”Y³f 0@®Ż/æüĀO?żDćʍiŃ¢śśśÄĒĒsüųqĢĢĢ>św„¤¤Ä–-[ųć?hŌØ™™™„„„ ‘Hćh·nŻXŗt)­Zµ¢C‡Ø««ƁØR„ oß¾-Õ}²±±į×_„mŪ¶4hŠ;;;zõź…››³gĻęņåĖŌ®]---^¼xAHH¶¶¶Ez’”@ÅķŚµ4oޜ:`llĢŪ·o9{ö,ńńńĀ5uļŽģģģppp@UUUø&ƒR_“Ca(‚”C‡Ņ£GlmméŌ©ęęꘘ˜`bb‚……E‘‹x\\\ä Æ^½āüłóģßææTĢ2a”¤¤¤O¶µ°°ą·ß~ģ+W®dāĉL:UTāÄÕÕ•Ż»w €)S¦Š”CŽ=* \øp!3fĢ`īܹԮ]???š4iĀ•+WäŚĶš5 ???444Ų¹s'+VäöķŪ¢IåīŻ»éׯ?¦V­Zœ>}š'Ož! ½”,.^¼ˆ““ūöķcĄ€lß¾]tĶ~~~xzzҵkW“““Ų¹s'aaaüž*'… IDATūļ4oŽ\h÷śõkźÕ«ĒņåĖ…2P'OžäĉtģŲQh—žžNµjÕŲ½{·"gūFKK‹Y³f1zōčB÷ß¾}›¢¢¢RذĪēžž.XīMMM…Ęē ‘H:t(ĮĮĮT¬X‘Zµj”ŖŖŹżū÷پ};3gĪdɒ%rję§OŸęŲ±c¬Zµź?¬©©Éܹs2dwļŽ„^½z_µä›T* QŚŲŲąāāņŁżęęęāģģĢ»wļXŗt)Mš4AGG‡““4¢¢¢šńńĮÅŅššp‘Āļæ’Ž££#gΜ)•ŲÜ·Ž»»;[·nåęĶ›@ŃČĖĖė£źłYYY‚wµ(ŗv튭­m™Ž TĄŸäķŪ·čėėćååõÉŖ!ܼy“ 6ššįC®]»†¶¶6ööö >kkk @Æęäɓģܹ“óēĻ£¤¤„‘‘;vģąÅ‹BJE… čŁ³g”F<[[[¹ >†ĀPŻ»wg’žżlÜø‘M›6‘˜˜(xSTTTppp`łņå‚ąūø¹¹ń믿-<“‚ƒƒŃÖÖ¦S§N–x<²2"ļŽ½ūdŪĪ;‹¬ŗ-Z“«ƒŻøqcNŸ> „ąGGG³pįB¹É»»;3fĢ **ŠŚµk“––†\»1cĘąęę&¼ ŅŅŅØT©’œ±ÄÅŅ–-[bbb䅅†† !^2d*ļē“I„ŅBÅŒŹ—/O~~¾š¼~ż:õė×-ž”ą>vźŌIšžČņ«>|Ičččpūöķ/ž#®ąĖćįįĮ®]»>Ŗ†ŸŸ_¢¼Ś’RVŽŻŠŠP‚ƒƒ™0a³fĶż'$$ąīīĪ“iÓpvv…ZFEEįļļϊ+ž““WWW¶nŻ*Ō¼ĪĢĢ,Vē߁L»,JµŻøqƒēϟ³aĆśöķ+Ś×¬Y3jÖ¬I=8yņ$Ɔ ūģóż[PRRbåŹ•“mŪ‰D‚T*żģÜۊ+«TXiŠŠŠĄŁŁ’…ĒĘĘrłņeģģģ¾Čøü=”Ø}Żŗuńńń)tßūŖü››*))1dČĮ*£°E°µµµ°ø-Šf͚z¾:uź|R§ÅŽŽ{{ū¶122*ņz&Nœ(·MEE…Ÿž™ŸžY“]UUUN±æ$3o޼O¶ėŠ”:tųh›źÕ«yMæüņK©Ę§ąæ‹Āš\]]quu  ÄÅÅĮ¼yóčܹ3ŃŃŃrž¤V­ZajjJ`` Ó§O ŲŽŽŽ„Ɣå̧œŠ‡ Ł"AKKK“żż §¬ŌČĪ;9s挨,×Jf1uww§wļŽ4hŠ€śõėcjjŠ™™µk×ĘŽŽ^8_Æ^½Ų°aµjÕ¢Q£FT«V 333,--±·· ¦¦¦Ü½{—įƇGNNoß¾%66–¼¼fūöķŁ°aXZZ¢ŖŖJ||<ėׯ§E‹‚ŲRrr2)))xxxČŻ™(@Ɔ ±²²¢M›64oŽ333ŖU«FõźÕ±µµUePšm¢¦¦FHHM›6ż*ur›6mг³s™ōõ¾‡ņĆŠMCCCŒ§§'÷īŻĆĪĪŽ˜˜RRR„ņHQQQØØØP©R%ŖWÆNLL 999Ō¬Y“ˆˆž?N³fĶ㜬BIjj*åŹ•ĆÜܼȔ˜ØØ(āāāJ„P§N‘ųYbb" XYYńäÉīܹC¹råhٲ%ŗŗŗH„RnŻŗEtt4ŗŗŗĀö²błņå“jÕźē%‘DĖ™±Tfxž ˆD(ƒ‚‚X½zµš<ōōōDKK 333vķŚEPPkÖ¬ańāÅx{{sļŽ=†Ī“iÓHIIaŊB8«ŖŖ*ĘĘĘtīܙqćʉŽCGeÓ¦MģŽ½ū³ūRQQaß¾}E~e„„%666„……•čø³gĻR§NBĖ­)PšµŠ××§I“&_{ ügPŠąÖ­[Ā$ ^č²€ęĶ›£­­ĶĄ¹~ż:­[·«¬¬LĻž= `śōéÄĒĒséŅ%9M€’ «7ś)•Ņ" e”•Sł©S§Ræ~}  üŒ©©)gĻž%&&†{÷īqāÄ ¢££©_æ>×®]CSS[[[ĀĆĆ9zō(111üłēŸüöŪo>dٲeÜ»w;w ξ}ūbooĻ„ PWW'##ƒąääDxx8fff¼}ū–[·nŃÆ_?;v,±±±ųūūÓ½{w233éŌ©ķŪ·ēłóēlŪ¶˜˜!Ŗ£,šņņāšįߕs[”BöīŻ+q÷%čܹ3žłg‰óņņ bäȑ_]Cļ;Ü(PšåQŠ K—.ŲŚŚn#ó •ƒēęęĘŖU«xšą§OŸ¦R„J“oß¾Ōć¹sēŽč¼e,~ąĄrć”H$<{öL˜^¼xSSS¹zÕׯ_§E‹üöŪotéŅ…°°0“µµåB“āāā077'((OOO‚‚‚hŻŗ5ĒŽµĖĻĻ)½^¼x]]]=z4•+W.rSµjULLLDš2’““…üŪøø8}ŗ0±777'22²Š<ĪaƆ !ŁWÆ^„}ūö$&&ŠŚ(++cjjśEóĀüżčččąėėĖżū÷łå—_¾x…‡²ž{;;;†ĪĪ;iŲ°!śśś4jԈŽ;2|ųpÖ®]+ŅĢŠ××§FBźPõźÕ©Q£śśśBMMMöķŪĒ?ü€¾¾>źźź<`õźÕ”+WNė’•ńŗvķ5jŌ %%…””’’’øwļŽŽŽäää°|łrśöķ‹··7mŪ¶„wļŽ˜™™‘ŸŸĻõė×9tč+W®Ī­©©I§N4hFFFH„Rnß¾ĶŽ;>|ų¹ß ¾.,Z“ˆE‹‘ššŹ‹/xõź•°ØMKKćܹs8::–Øß/^0|ųpĮpµqćFüüüŹlÜJJJ¬X±‚1cĘĪĖ—/‰‹‹#!!ĒĢāŋ9v옜ØfQT«VMN[äŋTÆ^½ŠB„J•ČĢĢ$--Ź•+³dÉrrrøwļééédddžžĪŃ£GäRdś2dyžĘĘĘ¢ķŚŚŚežÆ’Ė/æš"•+WĘßß_NåK³~żzBBBŲ¾};,SĆ®¦¦&ćʍyĖß½{dzgĻ8wī^^^xzzrųšįb÷ła… YJš¬:ĖūČä2ĮŚ *°nŻ:Ī;GZZ©©©äęę „9?ō\Ø©#KŸłPL¶¬Ņjdäää0{ölįsõźÕŁøqc‘ļ\===ŒŒŒØZµj™„¤tģŲ‘Ē—Č $‘H įēŸV¤(P @Į … Z·nĶ•+WšńńįŲ±c$&&’““C„J•ØQ£‹-M°tuu±°°½HūōéC@@ß’½Hiµ|łņXXXšššXXXNxxøh²Ōb EYXXˆ„· @1Xęqū°ļ÷”-Z„{öģaēĪdgg£ÆÆOŪ¶m™9s¦6¼dÉtuu9v쁁¼zõŠ*UŖ`ccĆ©S§„Üą±cĒ"•J äŌ©S$&&R±bE¬¬¬ ¢iÓ¦‚ē~ėÖ­,X°€råŹQ½zu!Sf8tčÖÖւ·ć}£nŻŗqķŚ5!UĀÄĄ‹/2oŽ}JĖ–-EĻ{---ź×ÆOżśõyšą;vģ ==½Ō„/sssQUUE}¼O«V­„ßĻqćʱ’~ @½zõPUUEWWssóTś† ųóĻ?…Ļ~~~ŸTåž§ ¦¦†««+›6m‰ę~Š—/_rīܹR=ē(( ™pó×,³Ŗ@‚O£0|„¦M›[øgĻžōģŁS“­aƆ¢ … '''‘ē¤U«V…¶+ …õceeUčvOOOQˆ²ŠŠ “&MbҤI=‡††óēĻgžüłm§¢¢Āĉ Mx---|}}ńõõ•Ū÷~ÉKKKvķŚÅĢ™3iŚ“©`ČŹŹ"<<œS§N‰ź½7jԈ   ž ī’‡ś ž{äåå±`Į,X€¾¾>]»v-U?3fĢ`ĒŽÄĒĒ#•J™:u*.\(“ņ{>>>ZŽ©jÕŖddd0zōhŚ·oĻĀ… E‹žČČHŚ“ióYć(+rrršņņ>[YY1hŠ Æ2]]]ęĶ›'”Ļŗqćū÷ļ§WÆ^ŸŻ÷‘#G˜1cׯ_/2½EåōöķŪRŖV­ŠŖŖj”‘m999ÄĒĒ µŖ;ĘØQ£D÷ „gK’·ž%‘U4Ń­[·ofń/ĆĢ̌–-[ŠŒ\ÅįĀ… Ō­[W0Ü+PPR=z„——gĻž"{Ź•+GćʍŪūRµjU޾}K5ä~š÷÷'''‡ččh233łłēŸå<žļk|m~żõW‘tٲe_5ģy芔Āä ŒFe!LŲ°aC  bJaH$.]ŗ„®®®HB6Y.®0fõźÕyóęM”5BCCiŌØ·oß&//“““B %-_÷%™?¾Ö ¦¦VØĘĶ·@‡ĆKq‘H$żćŹc*ų6HIIĮĪĪŽ .ąééI`` ūöķcłņåčźź2räH‘ńO"‘’’‚T*żØƒ-00©TJJJŠ(,%%…ŗuė2uźTįg̘1888žžĪˆ#5jŌ—¼d ž("|3Ø««3{ölQž¦ŸKpp0Ɔ BŲ•••åŖB””~żś±iÓ&.]ŗĄ¼yóptt”KĻ))ööölŪ¶Y³f1ž|Q­u‰DĀ”C‡øqćnnn¢ćdŃ2ńńńÅ ĶoҤ ūöķćʍ"ń5©TŹŹ•+ gΜ9‚‘äįƇ"ń¶¼¼<üżż…c¾&III¢]=>«"KY ¬¬ŒÆÆ/¶¶¶H„RY¹råg0ķģģ°±±aöģŁDDDФI „s9r„°°0¦L™‚Ŗź’żWÆ^%%%–,YB||ÅĒLJ5j`ccƒŖŖ*5bÓ¦MT«Vš5k’••ŝ;wšõõEUUUN#āļęįƇlŪ¶MųģééI:u¾Ž€>UUUœńóó+Q*Ą_żÅٳg’–Ņ… ž]8p€ÄÄD°±±ķ5j?žų#›7o–‹źŽ½;;wī$&&¦Št¶ĄĄ@ŗuėVØńÜŚŚš©S§Źm—J„xzz²aĆFżÅE~æedóõüwP(PšŸ$33“ &°aĆŃöŸ~śI¤Q”””šõõÅĘʉDĀ_żÅāŋY“hŃgõŪ­[7śō郟Ÿ;vģĄĢĢ }}}233yžü9IIIŌ¬Y“Y³f‰Ž³µµEYY;;;¾ūī;jŌØĮŗuėŠ<Ļ€Ųµk?żōõźÕĆĢĢ ‰D½{÷ˆÅĒĒeeeźÕ«‡µµ5S¦Lįȑ#˜šš’’’ĀĶ›7…‰Ea•8žN¼½½…1Ø©©±téŅÆ:-[¶ÄŻŻ]»v°fĶÜŻŻ©Y³f©ūTVVęąĮƒ,]ŗ”C‡qąĄѾśõė³|łr9qSsss¼¼¼Xµj•P &>>¾ČóhkksäȦOŸĪ‚ „ˆuuu~śé'¼¼¼ƒŸŸ&L`äȑ‚Ȧ“'OĘßß’«+ŃO›6Mš~WŖTIīoē[£Zµj“jÕJ$(\.]ŗDŻŗu ]Œ)ųg‘””ÄŖU«øt鉉‰čččP»vmFŒ!ŅÕČĪĪę×_åčŃ£$&&¢¦¦F5čÕ«½{÷Āņóóóپ};ĮĮĮÄÅÅ”¤¤„‰‰ Ż»wg芔"cᇼxń%%%¾’žūB÷;88K^^žØŸ¶mŪrüųqöļß/—vśšįCnŻŗ…——W‰¢ē”””„2懞Ø`ƌØ©©Ń A6nÜHBBfffL:•&Mš%hsss±²²ĀĖĖKTõėžżūųųųpėÖ-ŅÓÓŃÕÕ„iÓ¦Œ7 ”Ż£GX½z57oŽ$%%EŠĮ7nõė׌ÅĒdzjÕ*~’żwžśė/tuu©WÆžžž¢RĀééé¬]»–S§N‘””„®®.ĘĘĘøøøČž9Ā®]»xśō)TØPśõ룯ÆĻ²eĖX¶lćĒ'77—Ķ›7sčŠ!āććQQQ”ZµjøøøŠæ!BL"‘°yóf>̳gĻPVVĘŲŲ˜īŻ»ćįį”żĘP¢Ą ņ’ŖźĄ÷ĄIY£U«V‰ļ(P ą[ęĮƒø¹¹%·ļąĮƒōčŃ£LĪ3|ųp6oŽ xē.]ŗ$ˆ ~7nÜąĢ™3¤eĖ–ĀoüųńB Ō©SG0Ptīܙ}ūö•Y’™™™¼{÷•b{z޾}K^^+V,–0a~~>oß¾E"‘P¹råOŽ„\¹r„Ö(kΟ?/‚ōõõe̘1_qDeC^^ėׯ—+oū)ŖT©ĀØQ£Jž¤ąĖ#‘H°¶¶&99777ōōōx÷ī'Ožäęܸ͛qkkkœ9yņ$...Ō¬Y“¼¼<®\¹Ā¹sēX¼x±ąE7nėÖ­ĆŃёzõꔬ¬Ldd$GŽaäȑEjĪ@A%“AƒqõźÕb Uæ|łcccüżż¹vķįįįré@óēĻgćʍDFFb``ĄŚµk…w”ŗŗ:¬Y³¦ČsT¬X‘Ī;³gĻž"ŪtéŅ…Ė—/chhˆ‹‹ łłł„„„šüłs¬­­ŃŠŠ uėÖ¤¤¤°sēN*V¬Htt4ŹŹŹÜ»węĶ›cffFūöķ©Zµ*/_¾$ €üü|¢¢¢011!))‰ŗuėbbb‚££#ZZZ¤¦¦²’~’““yņä •*U"''‡ļ¾ū©TJÆ^½ØP”>|˜{÷īq÷ī]Įų ÷ˆ#033#33“ØØ(öģŁĆīŻ»éŪ·/!!!8;;ćąąĄ?žˆŽŽ)))8p€Ū·oćēēGļŽ½ŃÕÕeȐ!ģŽ½gggźŌ©ƒT*åśõėœ:uŠ_~łEp\̚5‹eĖ–įīīNķŚµÉĶĶåīŻ»ģßæŸY³f)RpæuėÖŹźYĄCą-šHRžļēõ{’Oūæ6Ą»’;.Čņ€|…@’)vģ؁§§g”õąŒŒˆ‰‰)³ š«WÆØS§Žn×¶mŪ•_Sšy899qöģY Ą»ūųńcōōō¾ņØÄ,Z“ˆéÓ§ ŸƒƒƒæzŠĀüü|lmm¹wļuźŌį?žų×,~ćć棰aƒuQ\lmméܹó•‚ĻåöķŪXYYqćĘ ‘ŽHNNFFFŒ9ooo”Ż®]»pwwõŃ«W/._¾L||<ÉÉÉāååŌ3Dķ&OžĢźÕ«INN.Ņh÷öķ[¾ūī;’““éŲ±#–––˜ššbff†™™õėפe€­[· •@¢££±““Ś4lŲf̘¾¾~‰ µk×ĘĀĀ‚“'O٦K—.ÜøqƒĒ«)>€ IDAT ĘŃųųxŖU«FėÖ­9ž¼Š688WWW"##iÜø1C‡åŌ©S<~üX”†C­Zµ˜;w.Ó¦McēĪ >œ¤¤$Ńż{üų1µk×&00ž={rįĀڶmĖćĒE`éééčééįķķ-TŚ©\¹2>>>r†J{{{ŖWÆĪÖ­[1bæżö?rSRRŠÓÓcĻž=ø¹¹ƒ¹¹9kÖ¬‘sŒ1‚½{÷’’’‚ŖŖ*ęęęø»»³`ĮQ»¾}ūrēĪnß¾]äżVPz¾”@!Ø@‚’iiiōīŻ›ŗų6lX™. DVńóēĻsōčŃ2ė_Aќ>}ZXüCĆ?mń⦵k×>Ož<™ģģģÆ8¢’[·n’Ė—/’×,žŒ±³³+ńqWÆ^åéÓ§_`D ŹY4ӇĻuuu’““ńöö Äg•””D§dtģŲ‘—/_’ššŹŻ»wÉĖĖĆÅÅE®ŻO?żDNNĪG«T•/_žėׯ3nÜ8޾}ĖŃ£G™9s&NNNX[[cll\¤Ø¦ĘĘĘ¢’µwļŽåĪ;ōīŻūÓ7£*V¬X¬gh£FD‘QĘĘĘTØPA.’ĮÜÜ@jŠŠ¢sēĪ¢Å?h©Ō«WåRUTTx÷īØ]­ZµJ„Bå°¢¾S²³³… ¢££å4Šņņņx÷īÉÉÉĀ6MMM”$ćūdff"•J…tŒŪ·o#•Jqvv–»?;v$==øø8įz ŠŻ³gbń’ ¢ŠųHJJ¢OŸ>Ģž=›Ö­[“ķ AƒJ„lß¾ż£ķ.^¼Čüłó  råŹ¬[·Žƒāļļ’)”’’BÆ^½hß¾=S¦LłŖc ażśõ;v uuu"""˜:u*æžśėgåģ*ų{ £OŸ>Č(++ „†Ź’Q£F±uėVA1}śōé888¦Æ lČĖĖår×­[Æ8¢¢QWWgłņåB(ś“'Ošóó•4UP¶¤„„±pįBįs»vķJ]öóŸL»vķxōčQ‰t¤R)ĮĮĮŒ3FQĖżˆ••mŪ¶„M›6XZZbff†©©)5jŌ M›6‚ĄėׯQVV.4MVŖ/##ƒ×Æ_ąįį!÷}ĖR“ŅÓÓ?:&###Įš #==‡²hŃ"¦L™B“&M°··µQVV¦gĻž ©^ŌØQƒęĶ›‹“%įĶ›7T«Vķ“ķ ūżVVV¦\¹r¢m¦B½~żšŠŠŠB#µbcc…9a÷īŻńöö¦ZµjŌŖU‹źÕ«cbb‚¹¹9]ŗtRélmmiŚ“)VVVŌ¬YSŌĪŽŽž~ų(H#Œ‹‹cҤIϟ?ēĢ™3½MNNęĢ™3eRŗKĮ—#//OOO¶nŻśÉPŲN:},UUUV­Z…ƒƒĻž=cõźÕ_ŻØõofėÖ­Üæ_ų¼bŊ“w·[·ntźŌ‰'Ni={öÄŠŠš+ģßÉŅ„K…Å…ŠŠ «V­śŹ#ś2(++ćääÄÆæžZ¢T€””N:E·nݾąč”Μ9ùsēxšą±±±ÄÅÅqųšaęĪ+¤ģJ$”••…÷·ōķŪmmmaNÓ¦M”ZĢū8;;Ō)tżśu^½z%÷»¢££ƒµµ5Ū¶m#$$„'NČÜÜÜšõõåįÇԩS‡€€‘@aiHII”J•*„>žSH$ĢĶĶ ½·B:C•*Uø}ū6gΜįéÓ§ÄÄÄ˹sē˜9s&”””“k× ._¾ĢoæżĘ£Gˆ%66–ĄĄ@fĻžĶ¶mŪ8p ?¦}ūö“iӆqćĘQ”B*T؀ŽŽ+V¬" ^½zŐ!CX“hIIIÄĘʒ””„¶¶6={öd芔B4œģū···/TÄÆWÆ^BŪ‰'Ņ”CĀĀĀxžü9ϟ?'22’uėÖįļļĻoæżöEī·‚/ƒĀš/ćŃ£G„:Ī××__ß2Mń‰ŠŠ•ƒ‚Zä_»„˜‚o—°°0Ś·oOZZZ±ŚI±½½=NNN„„„ Ņ>}śĖK” d¤„„‰Ŗ-“k×ī›Či^½z5 4 ;;›ōōtęĶ›÷Qń-„ćŁ³gųłł Ÿ‡*µü·addDŪ¶mEé0ÅįśõėŌ­[W¤|®ąėMTT...r Šž={²gĻʍ‡””!łłłLœ8QNÅ?!!;wī ””!,„ŗĖHKK#,, ]]Ż"ĒćļļĻŽ;ČČČ(tŃ®„„…ŗŗŗP)äCš7oN5 ¤{÷ī<|ųš³Ā’Ÿ?Ī«WÆä®„,122¢aƆ…–" " n޼IZZš\†D"”^½zģŪ·vķŚq’ž}?~L÷īŻåŹÆ:88°gĻČłóēQRRāŠ”CréóēĻĪūäÉ222PVVĘŁŁ™J•* ?zéeß’Č‘#åD\“““‰ŒŒDGG‡wļŽqģŲ1ZµjŐ!CDķvķŚE’žż‰’G8ģ…ą#Ü»wĆ‡Ļ›7oŠÓÓĆĮĮŽ;Št‰‰‰ģŪ·‡’‰‰ uėÖ„gĻž‚×éȑ#}ś|“̊ ‰DĀž={ø|ł2™™™˜˜˜Š§O‘Ŗų–-[J„¢”;wī°oß>^¼x¦¦&­[·– õ¹téĒŽĆŪŪ8@BB:tĄßߟ§OŸ²`Į,,,xūö-{÷ī%**ŠwļŽ”««KóęĶquu…T½yó†}ūöĶ«WÆŠŌŌÄŚŚggg*W®ŒT*¾2228wīæüņ sęĢASS“Y³fagg' µśķ·ß8}ś4Æ^½B[[:tč@“&M„6óēϧM›6hii@RR&&&tė֍ęĶ›‹®=&&†€€ž>>œ:uŠwļŽ‘™™Éœ9sĮeĒāŋEŽ]ŸÆ<¢āQ³fMFĶņåĖŲ½{7C† ‘«­­ąó˜1c†ł¦¦¦&WŸüßHŪ¶myųš”Ė[¤R)d̘1ŠŠŽįįįø¹¹+ē™WUUr“k×®D"įųńć¢JėÖ­cłņ夤¤`ii‰ŠŠ G•K; bŲ°a<}ś”J•*:žęĶ›³qćF䏊>|˜¬¬,6lXčńJJJōīŻ›ĄĄ@233©S§N‘%?ENNS¦LAEE„P탲¢N:œ:uŠÜÜ\QdYVVŻŗu£wļŽųśśĢöķŪyöģ™hn¬¤¤„ŠŠŠš]]¼x‘1cĘ/§S£ŖŖ*<ÆŅÓӑH$rޱäädn޼)hŲŲŲŠ±cG¦NŠ®®®ØołņåiÜø1‹-ĀÖÖVП9zō( õ»}ūv¦L™"Ģß{÷ī]ØX lżR˜>€‚. @=zgggōõõiŠ ŚŚŚDEE±råJśöķĖīŻ»kl³fĶŠŅŅ¢E‹hiiĪņåĖŁµkĒ ­ųśś¢ÆÆ‰‰ įįįųśś²gĻ!ōócüņĖ/dff žņ³gϲdÉŽ9"X ‘H$‚ąŲ±c8::bllĢ÷ßĻėׯ™0aZZZ¢¾ĆĀĀX²d óēĻGEE…“'OršąA¦OŸŽ®®.–––äēēóāÅ ~ųį’““iÜø1<žKKK\]]ńššąÄ‰Ō©S ¢££Ł»w/½{÷":vģȤI“øqć–––hkkóüłsvķŚ%Dr(ųvPŠ`Ś“i4iŅ„óēϋĺ–.]ŹŌ©S™6m 4r‹ļܹ#R•Õą”Õ܆‚ņ'›7o -_¾œÉ“'…••ÕGǤ¢¢ĀćĒ…<­ÜÜ\Z·nĶōéÓå†dL:•¦M›rńāEĮJ—‘‘Q, ė_żÅŠ+?~¼ń0zōhŅÓÓyüų1FFFBŪ“'OŅ©S'Ÿ˜˜ÜŻŻ¹råJ‰ŽSQQašąĮ_hTb¦OŸĪĪ;‰‰‰`ҤI\¾|¹X@Eńǰ}ūv"##łėÆæŠÕÕå»ļ¾ĆĶĶMū‘ѳgOåJC}Č«WÆ>|8­ZµbņäÉ„ßßÉōéÓoIłņåæ¹ŗÄåĖ—gįĀ…Āļć­[·Ų»wļ'æ«¢ČĪĪfüųńģŁ³‰D‚ŠŠ åŹ•“^ōōōX¹r„Č[¶hŃ"ŌÕՋe=z4:::DEE•j|ÅåęĶ›}ŗDĒŻ¼y“śõė‹*U(ųzšūļæ³zõjīŽ½Khh(ŹŹŹŌØQƒ7ŠĀ³>̚5k %""eeeLLLX½zµØŻĘ±±±įšįƄ„„ ‘H044dΜ9ŸLÓŠŠąŅ„KlŻŗ•3gĪpūömRSS©T©FFF,]ŗ”#FåŹ•ĆĮĮA*ŽøqcÜÜÜHJJźŲCA„Žƒƒƒ(UĪŽŽž¼¼£F¢råŹBéĀššp²³³iŪ¶-P`ŌÓÓCOOŚµkóųńc<==ÉĖĖCUU•={ö°~żzŽ?NPPPę°xńbFŒ!܇ĄĄ@|||ø~ż:wīÜ!==CCC~žłgʏ’É{®ąŸ…ĀPiiiܽ{9„ī¾}ūHbb" 4ĄÉɉ¶mۊ’š’ój„‰Ełņå8p Ø››“'OęĻ?’ü¤ ’ž"‘555 ĄØQ£ČÉɑS4ĶČČąīŻ»¬[·N“ĄŠÖÖ¦’žĢž=ū£ē344dĀ„ ¢m—.]ĀÅÅE“ų‡Ė`õźÕ gšąĮ\¹r…&MšČåVÖ®]WW×R… EFF"‘H/æ † ‚›››š †‚ąļ‡Čijjҽ{wŃ¢`Ų°aŒ1Bī{644$;;›””¹¼ØĀpuueÜøqģܹSųCBBPRR½Š|8Ą°aĆä&Å”]»v˜™™}QÉ£©©ÉāŋéÓ§Pf“}ūöRW8tčC† ”\¹rüųćŲŲŲ ¢¢BBB.\`ļŽ½L˜0///į˜‹/~ņY‹ĒsēĪż-„óƌƒ²²ņg…ėĖҘd̚5ė›Ń8p 6ląśõė@A:T·nŻ>š‡[‹-b×®] 2„1cĘŪ¬¬,ĀĀ˜9s&C‡ÅÜܜʍ—øooļĻ2^—C‡±yóęĻ2ģŁ³‡ČČH¹ķżõcĒŽeļŽ½Ÿ3Äo;;;>|( ‹ƒT*%$$„1cĘČE‹(ų:Ō©S‡uėÖ}²¦¦&S¦Lł¤ą¬ŠŠ #GŽ,–Štahhhąé鉧§ē'ŪV®\™ŠŠP¹ķ…żżUØPA®mq¢e‹Ć‡U dĖm«Y³¦Ü8d‹żOŃŖU«b$5jÄʍ?Ł®cĒŽE:üd닆 ¢¢¢Ā?žH×®]ŃÓÓCEE…ÜÜ\žüóO¶oߎ­­­šģVSScģŲ±Œ;ö£ēÖŃŃaęĢ™Ÿ£‚o… ‘J„r‹\(Č–y­š6mŹ”C‡;v,Æ^½"''‡7oŽ%æŽWä×Óӓ›,ÉķÅY&fjjŠT*åÕ«Wrł`III˜˜˜ČWœOa*ŖÉÉÉÜ»wOČÕŸģģl!×(11±HåŲO•(, Y߅yjdżÄÄDaÜU«V•k§¦¦&¤@A©”}ūö±oß>žśė/įū»uė@±**@Į pĄ€ģŻ»—%K– ¢¢Bpp0ßä"ä[!++‹©S§²zõźR÷QZļjiqsscƆ \øp(ØOļääT,CÓūdgg3nÜ8ĢĢĢ8qā„ÜļYnn.¬Zµ ''§b-śß§Zµj¢ÜĮ/Ittōg…¹čŻ577g̘1e1“æ%%%Ö­[G³f͐H$¼zõŠ„K— ©#Å%//Ś“i#gXŃŠŠ uėÖҰaC6lŲĄ† äśxóę ‰‰‰”+WSSS¹ļØk×®…FHeggóņåKrss©R„J‘łĆļŸCMM SSSŃ;2##ƒÜÜ\²²²J„¤¦¦^Ē,F322>š“oß>\\\puu-vŸß"JJJ8;;³vķZŃ{šS¼yó†ćĒ’ėS%(ų7P»vm.\øĄĪ;9tč©©©äę梭­žž£Gžģy÷Q÷ÜĻł|ŽēÜćÜóyŽļ×»CĪšÆŚĄĪ ƒ(ćéé‰_~łS§N…!%%…iÓ¦aƆ ”¶ŸšĒÉ«f)g'ģµ%œm¼öėŖØO}}=***™™Éõ™„„%¹ŠÄĒĒ×ķ¢w Ą3W›—IGĪ·››N:…3f9r’’’°²²¢¬švWWWųśśāöķŪ011Į?’üÓegMū¤„„a޼y¤³­+0 r5¾79|ų0FŒA†2īŁ³‡ė(’žū/ŹŹŹ°wļ^žN&AAAģŚµ ēϟĒåĖ—¹OŸ>Åõė×QVVXYYĮŅŅ’ŅĘ××£F"Ņ€ę󉢢"0 ØØØ`āĉ\!Ā•••ø~ż:޾}‹ŅŅRHIIaĈ°µµ%'oØ««Cnn. YŽĶĪΆ††>gΜ!vąķķżE —™˜˜`Ń¢E ųūūcńāŝRdżś5Žæßf)7eee#11‘²½±±...øxń")¤©ØØˆ]»vQ"šģķķ!##C®š½’īīˆ ļ×0dČģŻ»ÖÖÖä¶cĒŽĮĖĖ‹L[šW˜fĻž oooˆŠŠbɒ%ˆŒŒ$?ē8®—/_Ž©æ“ŁfåŹ•°²²śźS0aĀRŸØ£<~üś»¤””éĢĢĢ`ffÖ×fŠ|ĘŠpVžy•c±XX½z5ęĶ›œ:u kÖ¬įZ|ōčQ·ŪÅYŃo ĒF^«õœŠ]^µź[>tueeeŲŪŪó ŸŖ®®&'ŻżśõkµüZ@@***x–Pi EEEĶ«9‡Ćrޱ3a², §OŸĘīŻ»¹rœ/]ŗŌ)ŪĄĄĄ–––8}ś4ņņņ **J‹'õĮĮĮX¹r%™ĖÜU¾łęž²žfȐ!ųī»ļČUWŽ€å!C:ÜĒĖ—/4O[CMM JJJ\åAÆ_æččč@NNo޼Į¾}ūø&V;wīÄ?ü@:|||°sēNˆ‰‰AKK l6999Ų¶möīŻK†¾yó“&MBii)“µµÉ2Bū÷ļĒ€pėÖ-(((ĄßßeeeØ©©!ūš£::ŃØ­­„¬Ž›››cöģŁŚ÷sĘĖĖ /^Dee%įįįĖ—/wx’ÜÜ\ąÉÖeee¤„„Q¶=xš––– ƒŖŖ* ˆ•+WB__ŸRq„%®®®HHH€§§' QQQäęęā÷ßǼy󐜜Œ~żśįīŻ»pwwĒŌ©S±téR((( ©© ‘‘‘8pą$%%±wļ^lÜøóēĻǹsēpēĪ2DöćݶČĻĻĒ”C‡ŚmWZZеk×āܹsīūKÅÜÜ©©©ČĪĪīŌ~W®\¶¶6 @CCCó…óiKŅ_)““#Ct[’ššŠ€€2×øØØˆēź[O8īܹõ-&& <'¾œŗŸ111\ŸqŌ÷;‹¦¦&āćć¹¶³Łlčėė““zMMMÄÅÅqE&#GŽPŅ(€ę•ŲöB9)¼Ę’÷ß! ŠīĆnK*++ńįƇnżž–/_Ž‹/"88sęĢįŖ¶@óiTUUĮŁŁ‹/žäÉ?Šb|oÓR‰Sƙ—(Qkpœx’’’m¶“’’ārĘ„¦¦āęĶ›HLLDdd$^½z…ļæ’xžü9Ļ~rrr°k×.,Y²o߾ſ’ž‹ųųxdffĀÖÖ;vģ ĒŁµk€ĒćžżūHJJµkא““CęÆ>yņ999033ƒ¹¹9rrr““Ó©Pģ °°HŽw~ī(++Sņ-ļŽ½‹›7ovxŽ"t{“5 TUUQ®=;v ¶¶¶044ÄųńćńēŸBDD’ż7Ļ~ …M›6ĮĶĶ –––055ŬY³ąļļŗŗ:2÷ļæ’†¼¼>>®²½”ŗŗšRE††††ęĖ„Žh…Å‹ćšįƐ——‡‰‰ ¤¤¤““___ČĖĖcüųńš•DȲtµµµxųš!öķŪ”0ČOåśõėŲ¼y3,--! €øø8;v k×®åłĄĖ`0°xńbüńĒPTT„™™˜L&īŻ»×e!8::bٲe7nśõė‡ŚŚZ„††¢  €,ͲpįB=z³fĶ‚³³3Ł.<<Ļž=ƶmŪ(żjjj"44†††dÉĀC1GŒ}}}¬_æž,_Ād2ńāÅ ųųų`ęĢ™špĖŹŹBKK ŽŽŽ’’B’žżQSSƒ»wļ’+‘żžęĢ™ƒõė×ćŽ½{ķŠ,ŅtއĀŁŁ™gśIW°““ÄąĮƒ»„ÆĪņņåKJ% ˆ‹‹Ć„K—:\æ˜smvd‚Ēɝę`mm‘#G’ļłųų°fĶųłł!&&†g$½{÷Ąd2±iÓ&Jķc¬^½‘‘‘H89€T IDATNN†µµ5īŻ»‡iÓ¦q„XZZĀŠŠ®’)äååQİ,X@9®/uėÖįųńćd“ĒęĶ›accÓ”ōĪ„¾½T(!!!°X,0™Lņ{8p ÅA4§Ä·* ĒYMę”]m‰””!„„„Č؄—/_’Ū>fćʍ\ ]%11±ÓśU«VĮŹŹŠ§†Ģׄ¬¬,&NœˆˆˆˆNķ—’’CCĆNE+ŃŠŠŠŠ|^Š€VŲ»w/ooo455AXXß|ó Ž?iiiĶ”»kÖ¬ĮĀ… ÉģAƒ! Ė—/'WéDEEÉ}ZĀ`0 ++Ū¦'žÓ†SĆ~ß¾} ²²²pss£”Ī“ ×yyyÅbĮĒĒ`0033Ƒ#GšÓO?‘‡"""”&111žQ8qā|||pźŌ)°X,`Ȑ!8sę ¬¬¬4‡V‡……aļŽ½XµjjjjĄĒĒmmmųśśĀŃёүV®\‰åĖ—ƒÉdāöķŪ7ndddH…~ƒk×®įūᅦ——¹ź§ØØˆoæż–tŗ ģג–ĒÉĒLJsēĪįūļæĒœ9sĄb±ĄĒLJaƆįųńćXµj)fČŁćh„¬¬,—ˆˆ¬­­‘˜˜H–`”ł4‚ĄĮƒńĆ?tJøŖ=6oŽÜm}u6›ļ¾ūŽēŖäÖ­[1iҤ…Ųr®ļöĪ §ü[Ktuu¹Ś)**BRRÅÅÅ<ū)))   āāāø>{÷ī€ęšśśz”••ń-Ą3"©«lß¾<āāām–ż‚ÆÆ/&Ož  9µāȑ#\ÕYxĮ¹s"Z£¾¾§Nk‚”ŅŅŅ­¦q¢ā¦OŸĪÓéŠŌŌDFķTWWCSS“g?¦¦¦055mÓęŽ@6mŚŌ©Ø 9`Ŋ]JūŅ033ĆĖ—/ńźÕ«Nķwłņehiiu»Ī Mļ@;ZAXXūöķ#'Ū555>¾vólłųųx®÷ķŚĆ IIÉnµ™Š$$$:4!ęē秬“·…°°0ĻÉWčĢø¼øzõ*,,,°pįBŲŪŪ·[O•¦}¢££1lŲ°nŸüĶZ ½ń·ś1/_¾luĶĮ××·Cuŗ9"Ÿ­­ŲĶ«’\e??N ąP[[ŪźÄ]FFĀĀĀxśōi«ÆéÓ§““aæIJJź² ‡Wwū÷ļßn­ė/ņ¼ÖÖÖr„PńBWW Ožõõõ®āņ1«WÆFQQŃ'õń% ++Ūj]ń¶HKKū¤ ,4]ēß’ŶmŪ`bb‚#GŽĄĘʦÆMśdŅÓÓ!''Ē„uUQQ¬¬¬>²Š†ęė…vŠŠt«V­Bee%jjjöE— ėk˜L&~łåŲŁŁ‘i݉€€–.]Śķż¶G[”’-©ÆÆ§Ō“oo¾łŚ,ēuūömŌÖ֒m9šz ŹĖĖCUUOQL ¹²GCCĻļ$-- VVVø’>„……”¢¢ŅźŠĶ/æüBI×įŠ2u©=žśė/ŠP§——×W-ø9`ĄJŲXXX«Q$dee1vģX„„„ąńćĒ\Ÿ}ūö”  €«ZÉŪ·o‘’’BŁ–••…gĻžĮČȈēxŚŚŚę:Ÿ‘‘Õ«W“ĪÄĒĒ#//«-Ēį×2%AHHÖdńõõåŁwg(++ĆņåĖ?©/…‘#Gréut„+W®“aBÓżpī­‡‚³³3“µµūŲ¢O‡Åbįżū÷ݚęGCCÓ:t M7љ„4¼yóę œœœøŖDt'Ó§Oo7|ŗ'šöönwŅĘįŹ•+ˆŽŽ†­­m«m „ &ĄĻĻāāā˜;w.¹Ņ_QQØØ(l޼ŠŠŠ\Ā‚111ǜ9s4Æ*ļŽ½ ƒ8ż˜1cĘ@@@Ū¶mĆīŻ»É°ńźźjųłłįłó礶€žžūoܽ{VVVąēē›ĶĘ­[·€µk×Rś–––Ę£GPXXŲŖ‚C}}=„ģߨQ£(µéæV¶lŁ‚2:ÄĆĆ< Cļy±’~Lš4 ćʍƒ™™ōōō &&†ŹŹJ$$$ąĶ›7°±±į 喕•ÅŒ30{ölØŖŖ"??ׯ_‡œœ/^Ģs,)))ø¹¹įąĮƒHIIäååQ\\Œ+W®@II‰¼Ž–/_Ž   ŲŲŲ`āĉPSSC}}=āāāššįCJ)J:t(ššš0cĘ ˜ššB[[›’Ā֒wļŽĮĻĻÆĆēµ-®\¹‚æžś ĪĪĪŻŅßē f͚…ƒvøbš’© .ģAėh8aķŚµ¤®««+ųłłįęę~~~9r»wÆ/RSS±bÅ 899”°°xųš!jkk!//mmmJ飌Œ lŻŗŪ·oGhh(bcc! €I“&aķŚµHIIÆÆ/233”  €łóēw(E&&&gĻžÅėׯĮd2”®®###¬X±’’’xžü9<==QUUŲ½{7Nœ8MMMx{{“żäååį÷ßGrr2©Õōż÷ßS“fjjj€ū÷²¢¢¢Š××DzeĖČćLNNʞ={°cĒ?~OŸ>Ŝ9s()°-Y¶lģķķQTT„ėׯ£¢¢ŅŅҘ6m–.]JF®]»Ø­­Å•+WPWW‡[·nh¾\¼x¹¹¹ąćペšF Š£óĮƒ8{ö,ņņņPYY iiiX[[ĆÕՕņ|™™™ <{ö õõõ’’ĀØQ£°råJŠ~Kvv6Ž;†Ē“i̦¦¦X¹r%%-°¤¤ˆGee%ÄÄÄ0tčPø¹¹Qō‚>|ų€'NąöķŪ(++ƒ°°0ōōō°hŃ"Ź"Ccc#Nž<‰Ū·o£°°ĀĀĀŠŌŌÄĀ… ammŻī5CÓ;Š444ŸgĻž…±±qNžP“z‹ōōōN‡$o޼¹ŻÕćĒcüųńšōōĐ!C %%YYYhhhą»ļ¾ƒ““4ĀĀĀøĀśmll°jÕ*(++C__ŖŖŖųūļæ±cĒŽVW“ŌŌŌąććƒK—.AWWŖŖŖŠÕՅ––Ο?]»v‘Ž•mŪ¶aąĄ°··‡¢¢"“““ ŖŖ GGGčėėcŻŗu”¾QZZЁBMM­Ķ4‰ß’\ŻåććĆžżū抲ķ!&&F‰œHMMEPPP›ūčźź"11[·n…°°0>|ˆ7nąÅ‹6lŽ;†ššpŠaųšįŲ°a¼½½ńśõkœ={ ˜0a¢££)zL&“’Jćé鉀€ˆŠŠāīŻ»8{ö,’““įąą€;wīZøwļf̘ģģl\øpŃŃѐ‘‘ĮńćǹVŽķķķ±oß>šóóćęĶ›m:ŅvģŲŃ-%B9¬]»¶G"‘>7¤¤¤H±ÉΐžžŽfš Mļ°°0Œ=÷ļßG’žż”¤¤„ŅŅR˜ššāąĮƒưaĆ !!‹/bäȑd$UYYĀĀĀ`kk‹¤¤$ <A`ćʍ˜9s&&Nœ6› cccäęęĀÉÉ ēϟoÓ¦ŠŠPX[[#66ŖŖŖ022BMM ¶oߎńćǃÉdvčŲŲl6¬¬¬žž###ČĖĖć?ž€¹¹9é°jhhĄ˜1cąéé aaa˜˜˜@EE.\€‰‰ )^[PP€°°0X[[ćśõėčׯ_›Ś1—/_†««+vķŚuuuŒ1 X¾|96lŲ@¶»~ż:Ö¬Yƒ 6 ©©‰t8xyyĮŽŽéééŠŅŅ‚¾¾>Š‹‹±fĶ|ūķ·”q¬­­ńąĮØØØ`ŌØQŎ;`eeEjė¼xń#FŒĄłó甤¤SSSHHH`Ļž=055%Kńaäȑ8ž–¶¶6^æ~Ż«L&xųša§÷ݳgÖ¬YÓn»·oßāįƇ(--‹Å‚¬¬, 0|ųp®c½rå † üóĻ?(..†œœƌC™ü—••A[[;wīÄ÷ßOŁƒ‚‚ĶÕʎĖ%DČf³‘˜˜ˆģģlCJJ ŚŚŚ°°°ą©æ™™‰‡¢ØØ¦¦¦°°°ąj“ŸŸcccņ”ļŪoæÅ™3gŚ=?_666ųēŸ4ė2|Ƈ“ÉDEE~żõWųųųōŖ ųóĻ?aiiłŁ,Ÿ~ś©Ū'’@³ČkHHeÅīkeƌČŹŹźT*@CC.\ø€%K–ü'¢q>gÖÆ_OłRSS1tčPŹäh®ų2eʤ„„Q¶\gĈ ””5€žž^«b²^¼xĮ³"’½½=„„„‘‘A:ŚććŌ£ńćǃŸŸŸŒ{ōčé”ųų8ķģģø¢†Ö¬YÓa!ą)S¦p•Furr‚ž?Ž1cĘfΜIq¢s„O?NĮ€¹sē’Ž <~ü?’ü3—M¶¶¶ptt$·'%%aöģŁ\š7#GŽ„ŗŗ:)ĢY[[ ®žF…ņņr²Pmm- WŖŖŖ(//'K?zōņņņ\‚”BBB˜>}:>  9E ®JC IIIōżį3‚v“‚‡‡ōōōŗ.|äČÜ»wĒŽkÓ+^^^777lÜøfff]5÷?ǽ{÷päČ}Õā__3ĮĮĮX¹r%Ļp]ØŖŖBGGāā∈ˆ‹Åś¤ńZĶ_ī)ŅŅŅ(«)„¦¦;wīÄüэVµœœÖ¬Y›n©ÉŽ$&&RŹžżųćvz|M <nnnä×ɓ'±hŃ"®ߞD\\¼Óµć{šóēĻ“a¾=Įš5k`mmžżū÷ŲŸ’’’˜6mĀĀĀ:µßėׯńčŃ£Ļę~ń_åc-¢ŖŖŖV«5)**’ŃD>®¬Ä`0ĄĒĒĒ%lܞ#½””MMM\g ¹ź’œœ\‡SkøŽ‹Į`€ŸŸŸ|.(++Cqq1ęĪĖµ’Ó§OQ[[KŁÖĶ&^ó§üū÷ļ[ķ“#Éėp"把ŠP]]ĘĘF²’JK„……J¾///Ē­[·x'Gˆh.ýwļ^ōļßFFFPWW‡ŗŗ:“µµ1yņdņš?~<“““ ££ƒaƆASSjjjŠŅŅ‚­­-é8*++Ccc#Ļq322Čq•””`ooyóęĮČČšššPWW‡††ĢĢĢ`nnε?Mß@;Z!**Š%é ‰‰‰ Ć”C‡ŚtŌ××#,,ŒēMóĶn޼yŲ¼y3ʍGnēä»;v¬­£é åå夨 “““ø^-?yņ4{ē{SüÉdbńāÅV.o³gĻĀÅÅ#GŽģ&ĖŚG[[?üšCƍ×A`Ė–-dŁ?55µĻʾŽĘÓÓēĪCII Ųl6~üńGDEEżgWWŗ£ģ_{TTT`åŹ•”\ׯ•įƇ#55/^¼čŌ~ׯ_‡®®n«„Diz&“Łź} ņžŚŻpōkŚŗ'utģŽÜטL&DEEyF‘qŗ ÆHŽnJ[:=ƒöĪG°#Õ£ššš //Ļó8ŻÜÜ0lŲ0ĶæįĻž=CDD²²²››‹˜˜ųūūcżśõˆ‹‹ƒ‘‘deeńčŃ#\¾|™™™ČĪĪFbb"‚ƒƒ±~żz\½zvvv`2™jõüNš4 l6 aaaøqćž>}ŠÜÜ\¼zõ ×®]ƒ»»;¶oߎ;w¶{œ4=ķč!Ž9:'īillDtt4–,YŅצŠtāāā i·“ÉÄܹsńīŻ»n··Kzyyy!11ń“ūį1Ż»wÆ×Ó>Ī;‡ųųxņżŽ½{?éīKGVV»wļ&Æé„„„’“#ŁĻϹ¹¹=>NDD‚ƒƒ±hŃ¢«Æ±··Gvv6׏i[|ųšįįįpqqłĻ:£>7”””Z-‰YYYŁcՋ$%%!**ʳL$›ĶFUUU·ŽŻÆ_?ØØØĄĖˋ볼¼<”••u¹oŽŽMKŹĖĖ€Kū¦%-+å| G¬OJJ ””¤D“ÄŽŽsęĢĮ¢E‹ŠÆ_?XYYĮÓӓ«]jj*²’ģŁ3455qUK©««ƒŽŽBBB`dd„WÆ^”øø˜+:’ÅbĮÄÄ'Ož„”••!!!Įóü!// „„„HNN†%ŻhŽ¢ ¤Ÿ “ ŅŅŅpįĀTVVBBBvvv”œÖČÉÉaĄ€Gyy9vļŽ'Ož !!īīīdŪŖŖ*œ?/_¾† Bę}Ģ“'O’’0 (**bĀ„ 8ž<ĀĆƑ””QQQ°ŁlDFF"!!uuu¤ŹėŌ©S!$$Ōīń„¦¦"** šš¬¬¬ ÆÆ 9÷133ėׯēŚ×ĻĻ Ą“iÓ4 tq¼A@UU'N„¹Ļü###ˆŠŠāڵk`2™}ŗ×S>źėė);ĘĘĘ’‰\ģöX¶lŽ?NźKlٲ“'O†¤¤d[Ö»¼{÷¾¾¾½6Žŗuė0nÜøÆ>@\\3gĪ쐳¶%™™™HLL¤”£é;455„’’(**’ŪŁl6īŽ½KŖÕ÷ŌŲ·oßęŅ ‰G]] @n㬨w5bnĄ€ Dii)פ|õźÕČĖĖ#+t–7n ¾¾žœ\@dd$ųųųø“Z¢¤¤111ܾ}Ó§O§|vūömŅnĪæ×®]Ćʍ)ķ^½z…+W®: @tt4vīÜIq²544ĄĀĀ+V¬€——Ž=Š{÷īįŋ”v¢¢¢#Cö/\ø///rĄŸŸ222d» ''8p ÅĘķŪ·#""łłł¤®CBB×=@^^¾SEšž…v“ALL NŸ> HKK#33;vģĄ®]»°uėV€ææ?Š‹‹‘““111hjjb×®]ˆŽŽĘoæżF:ņóóannŽ’’BBB§N¢Ü9l޼^^^ŠÓÓ#s\³²²šĆ?@FF?’ü3ŃŠŠ€I“&!&&:::PUUEii)vķŚCCCÜææĶ ®<<< -- mmmšńń!++ •••8qā/^Œ¢¢"lŲ°ćĒ§üP¼xń6lĄ‰'4+•:::BHHŗŗŗFFF6n܈ß’t xyyAJJ ©©©PPPĄŠ”CyŚVVV†ĄĄ@2ōūĪ;xųš!”••)GGG¤¤¤@__………Ųæ?¼½½‘””DŽĢVÆ^£G¢’žŠŅŅBUU^½zܹs§UhśŽK—.uėCżņåĖ{mõ¼»B’?fĒŽ˜>}:Ļ|ĀÆ___JŁ???æ’l$DK |}}aaa‚ PTTooož+C_3;wīģÖ²ķQYY 777DDDōژ}…””!†J ‹u”7n`Ą€½^‚†›łóēcļŽ½;v,ęĢ™”••įĪ;xóę :Ōcc»ŗŗĀŻŻŽŽŽd¹ŗ¼¼<CCCƒRv²’žĄÖ­[‘––)))¬\¹²Ćc͟?»w… ©© ‹…„„\¹rGŽéņq¼’cƌĮ¢E‹ ++‹””=z³gφŠŠJ«ū `éŅ„8|ų0ŖŖŖ0xš` !33'Ož„™™²æzõjøŗŗĀŽŽ‘‘Aaa!N:r5}ķŚµ˜>>āŌ©S”żwģŲAˆŠŠ’ļ׬YCHJJYYYä¶ĘĘFbņäÉ",,ŒCLLŒX±b—Mnnn„ŗŗ:łžšįĆƒĮ }š5jĻžĶĢ̈ӧO“ļ_½zEøøø†††„œœ”®®NŒ;– "ŪÄĘĘ&&&DNNN›¶s——'~žłgbƆ „!//Očėėīīī”s=cĘ b’žż\ū766{öģ!,-- ---BQQ‘022"ÜŻŻ‰²²2JŪÓ§O¶¶¶„¾¾>!//O 8˜;w.ńüłsJ»ØØ(bŚ“i„––!++KčééDll,„]hh(1yņdĀŠŠ——'TUU‰I“&ēĪ£“»uė1kÖ,b芔„¢¢"ŃÆ_?bģŲ±ÄüAi—ŸŸO¬ZµŠ:t(”  @Ø©©ęęęÄįƇ &“I¶{łņ%±dÉbäȑ„ŠŠ ”  @˜˜˜?’ü3Ļ듦m Ōņ·§@2€ׄ8 `€ļ,``,ś4ž7·—łß\_€ß’ü’ūW€€nr<>>>ŸM©ŸŽĀČČ"""\å»^½z…āźÕ«˜6m,--ĮĒĒĒŖüĖ/æą·ß~#W&Œ1pą@üż÷ߔv7oŽÄäɓ0™L ĆĻĻ«ž÷”C‡šÓO?‘}:88 ¬¬ wļŽå²ßŅҲ²²­Ö.~šą,--Ė„ŹÉ©;Ź©O:kÖ,¼yóOŸ>„œ]]]\øp4h"##¹JČ|<ަ¦&,--;\»»°°***8sę %ģ—Sóöٳg\!l²²²X»v-<==±wļ^x{{£¤¤„KČåūļæGhh(ņóó;d MĻSSS33³N‹OµÅܹsŪ¬Uܝ<}ś#GŽDcccōĻĻĻ˜˜˜ Ūüœųī»ļHdQQQ¤„„ż'•’Ū¢ØØƒ "sJmllpłņå>¶Ŗw˜4ižż÷ß>[ZZĻž=ƒŗŗzŸŒß›¤„„uų7»%Ó¦MĆčŃ£{Ą"šŽAAAīīīä 7 Mo£ÆÆ—/_rŽ6x  @€ ļ’÷*oń’Ź’µ©P÷æż4``Ń)mвž'ĪĆgQQ¹­­ %%%°µµåŚŽ2 h²°°€ŸŸ ©© ‚  ___J©Ą’’TWWcß¾}\ż¾’¾MĪĆ"/ŪÕŌŌ4O¾uttąģģŒyó摹?xöģ¶mŪ(--ŠģĢxņä „/ĪgœńZ³«plm‰˜˜©ĢZRRAAAģßæŸ«]ZZZ»uliz—U«Vuiņ?xšąV÷ė-ń?&“ —›ü͚īīīøyóęW/²•””D)EęįįAOžy ¬¬ŒmŪ¶ĮĆĆp÷ī]Üøqƒ^ū5ržüł>›üĶæiĖ–-#sæf 0|ųp$''wjæČČHčééµ)”FCó9###CÉż§”łZ mĄė^PP £Ó9‡õõõ\õUyqćĘ ¼zõ cƌĮ?ü€’’|ųš²²²°µµÅoæżF¶­­­EQQ¢££¹śUQQįźųŲĪń| g'‡yśō鐔”Dxx86oތššp²V0Ē Y‰ścń=°µµķ1aŖörkkkQ__Ļó€……EO˜EÓ|}}qśōéN溺¬Œ'NPœc @)Ł“üśėÆ]ź qqqøté) ō5B~žłg²L”²²ņŗģ_{¬_æAAAxžü9য়~‚ ĻߜƁ†††/ū×nŻŗ…“'OĀÅÅ„ÆMéq¦OŸNju”¦¦&„‡‡ĆÕՕÖķ ł"yżśu_›@CÓ#Š€6ą¬^·¤¶¶l6»Óā6rrr¤šfKJJJ(ļϟ?“Ī‚ x®0(**B__æK”y!1^Ž Ī„žS¢ETT³fĶ¢8f͚EŚĒ2 ųģB“•”” ¦¦†[·nõµ)4m‡Ÿ~ś©Óū  44&&& ėīrpssė•Õ¹””ģŻ»·ĒĒįšóĻ?ĆĪĪŽ§Ćķk ,,ŒRöoß¾}’9uūĪ ___2Ź,;;‡śj&DNNN_› 9•ĢÖÖ}mJ"""‚ٳg#((ØSµćsrr KKĖ“ކ†††¦3Š.Ł6HJJ‡(ŪāāāZZZźKKK‹ņ@Ė!&&†ņŽÖÖIII””„¢¢"ˆŃ£GcņäÉX¾|9ĀĆĆÉ¶źźźxüų1Ļńʎ ;;»VķQUUŠ|ŒĆŃ=h^ļģģŒĒćīŻ»xüų1œ)všńńń“%..|||ųēŸZµ„-8«œjE]]YYY<뫺»»Ó”‰ŸEEEpttģRčü¾}ū`ee®²\BBB½RÆ»7B’?&??æ’ž{ƍכŌ××SJƒŽ1‚T6¦ińćĒcęĢ™äūżū÷#77·-źŠ‹‹įēē××fTUUĮÅÅ„S“ā/]]]wzæččh÷€E44444]Žhƒāāb,[¶ Ė—/‡¬¬,ŅÓÓ±}ūvčźźvŗĘķüłó±téRlŚ“ S§N…””ž>}ŹU+\\\JJJ8xš äääšžż{¼’„„„HJJ‚ƒƒ‚‚‚°xńb̟?Ē‡‹‹ fĻž uuuŌ××ćÖ­[ø’>Ž=ŚŖ=ƒ !C°eĖ466BOOA ==,„Ņ2WßÖÖŠŠŠpuu…‚‚EĻ@^^vvvŲ¼y3źėėahh)))äååĮÓÓżśõ枯äää ""‚?’ü***““ƒ‘‘Q‡÷Ÿ>}:<<<ąąą€U«VAKK A 99ĒĒܹs»dM÷Ąb±°pįĀ. 1ŚŪŪćūļæ'ßkii!;;›|?{öl())u‡™māééŁŖ#®'ńó󃳳3—ŽČ—ŽÆÆ/eāJ—żė8~~~ˆŠŠB]]źėė±}ūvœæ'x÷īeuw޼ytčp'ŠŠŠ€‡‡<==įįįXŗt)¬¬¬śŲ²ī!%%å³½ŽŻŻŻ1qāÄÆ>@XX³gĻĘɓ';õšīŻ;3č2€}ˆ„„$$$ŗ„/^¹Ź-Ł»w/Ö®]‹„K—r=@ÉÉÉĮŁŁ™§3FZZś“œżśõėņ¾-ąYšÆ;ųTEEEy–v¤é}^½z…Å‹w)oöčŃ£\“”qĖ—/ļń‡pOOĻ>ŸüĄ¢E‹ø“,ښdó¢¶¶–,ł¹°qćĘ.Ožsss†²²2Źö›7oĀÜÜvvv_mZØØ(8@FFé£éYīܹƒĄĄĄ^‰>źk&OžŒ×Æ_£¼¼œ²=99&&&HNN†±±1īܹƒ… ¢  IIIšóóĆŖU« ØØˆß~ū {öģ¼xń™™™Š××Gjj*¦L™‚ŒŒ ¼~ż¶¶¶(..ĘćĒaee6›ŲŲXŒ1JJJøsēś÷ļįƇćīŻ»hhh€ŒŒ ää䐞žŽqćʑ¢Ę’E‚@ff& Dپk×.DEEqiQ½xńŹŹŹ=n×£GPXXŲćć|Nøøø€ÅbįŌ©S”ķ=ś¬›4_“ą3£’žøxń"X,JJJPWW‚ -- YYYzÕšę‹§¶¶³fĶźT9)6lhUŽćÜīqŃø'OžPJrö%555<+Œ|ÉØØØtyõ鯻w8qāO‡›ĶʃPWW‡9sę|Ŗ™Ÿ-sęĢĮųńćqūöķ¾6å?‡»»;lmmæ:mŽ‚ƒƒŽ;Fq6JJJ"==RRR xūö-JKK”¢¢‚ŠŠ äēēĆÜܜRŁ#((ėׯĒ/æü‚eĖ–įŅ„Kxōč-Z„ƒ¢ŖŖ K–,Į‹/ƒŁ³gćõė×((( KĮ®X±‘‘„„Nœ8eĖ–įąĮƒŲŗuk_œ¦Ļaaa.G ”••}6Õ4ž+p¢mihśŚš™ĀĻĻßm«ņ44Ÿ«V­Ā‹/:½Ÿ™™©ŸĮ Īj±ƒƒC—Ņ`:ʇ°xńāĻnÅükb÷īŻ]*ū×ŌŌ„sēεūŻ<~üC‡ÅĄ»jāgĻĮƒÉ*M{‡P‡Ū ¶%Ē`0ȵG!::ŗSö|IŌÖÖbłņå’‰TMMM˜™™‘Õ‘€ękG__ϟ?Ēū÷ļ”  €ŅŅRʹˆ…¹¹9%DEEżū÷‡””!444ššŠŚŚZ¼{÷ƒ ‚ØØ(RRR kkkddd )) ŹŹŹ0`„……‘••…øø8Ø©©aśōé A^^ōõõ{õ¼ōX·nfĻžMj"ĶeaĖŹŹ°aĆhN£Yæ~=akk‹Ÿ~ś &&&˜;w.Ž?ŽÄÄDüūļæ(//'#Vœ1vģX²ßųųx£““˜2e ęĢ™Óīu]YY‰S§N!##ÅÅÅ`0>|8œœœŚŒź"‘‘‘ˆˆˆ@qq1DEE”ŖŖŠ)S¦piĮܾ}WÆ^Å»wļ4W­²··§Ų øxń"2334kdŁŁŁaśōé”ćČĪĪFpp0ŅÓÓĮd2!++ KKK899Q4ÆŽ¾}‹³gĻāéÓ§`±X‡¹¹9,XŠfŹėīŻ»‘““ƒēϟƒĶf“ē¼åw×®]ĆŋQUUyyy8::bÜøq”¾RRRpīÜ9dff‚Ķf£_æ~˜0a¦M›>>>DEE!<<;wīäšGüšĆŠŃŃĮŹ•+[µ•ęæķ ””é5:„ąąąN溺¬ŒóēĻ·9)QSSƒ   ET³'ųå—_>‹Š’ždüųńŲ“i„„„ ..Žf[QQŃ6E>Ū›LJJJvZTµ5"##QZZŚ”¶‰‰‰_µĄŠŠg™×¾†ĶfcÜøqøwļ^_›Ņcܹsžžž’‰‡l;;;dddé6l6 `0ŠÕÕƒĮ@]]äääPYY !!!¤§§cƆ ”{5§ŗ‘‘ÄÅÅ1lŲ0 "33¦¦¦xłņ%ŹĖĖallŒ††äååaĈPVVFzz:QUU… ążū÷ µµ52331|ųš>97ŻbccQ]]M:***°oß>ˆŠŠbŠ Aäd211d~ż™3gŠŲ؈¹s碸ø™™™Ø¬¬“É$'ĒUUUäX’üóžśė/˜™™AFF±±±¤čt[Ń555=z4޾} kkk(**¢¦¦ĄīŻ»‡!C†šÜwĖ–-šņņĀäɓÉT٘˜ģŪ·gΜĮüłóĄ?žKKKčźź¢©© wļŽ…ÆÆ/‚ƒƒÉĄóēĻcīܹ9r$LV€:zō(å8āćć1~üxČŹŹĀŲؘ¬śuģŲ1!** Æ_憩©)äååaaa äēēcõźÕ CTTT«ē%??™™™dT/眷Ō:9qā 1fĢšóó#""žžžųūļæ1oŽ<@hh(Yżg芔Cll,:777üńĒŠÖÖʱcĒ ÆÆO©”ōüłsģßæĒŽkÕNš’“ MÆkkė‰ˆµ„ŸŸ7nÜĄ„ Śm;uźTDDDōŲŹŪćĒafföUÆž«ØØąłó琓“ėkS:EVVNœ8ŃaķüšĆ=l /²²²0lŲ°Ļ®œ_w"..Ž”””Æ>h÷;vģX§%`ģŲ±ŗÆw”ĘĘF$%%ĘĘƟ$hü¹²nŻ:\¾|™łŒŒŒÄ¬Y³ąģģŒźźj„††h^q޳gŽæ!!!Ø©©aīܹšńń!ūڰa.^¼HöÅĮĄĄyyyHNN&Æ_&“‰™3gāįƇ(..nÕ>¬Zµ 9r$¹½¤¤C‡Ŕ)SšēŸ‚ĶfƒŸŸŽŽŽšššŠ|O^°`>Lésśōé`0ø|ł2€ęj'NNN\ixćʍ“ÉÄżū÷VVVPQQĮ¹sē(ķ\\\pūömņøĒ‡ņņr$$$P®™“'OĀÅÅwļŽÅŲ±c±uėV„„„ --āō ĀŅ„K‘™™Ł®ĪŌ”)SĄd2¹œ ŚŚŚHHH 5}jkk1zōhHIIįĮƒdJ‰‰ .^¼HyĪŁ“i¼½½ńöķ[ōļß¶¶¶(//§”(޹s'¼¼¼PPP@‹o~Aō”ą×©‚DCCóYQ\\ GGĒNOžĄĖ˫É{öģé±É’%ō’ȑ#_Üäæ±±.\蔹ag'+4݇¶¶6öīŻŪ×fō(µµµpuuķ’Šé—†††FŻéżīßæ¼¼¼n³CHHęęę=zōW9łää䐓×ųųxĆŹŹŠ’Š ‹N„ņ“dҤIē•€€ģķķQRRŅføø8čźźR&’@sčżüłó[_e³Ł8ž;CCC.\ø€ū÷ļ“ā2JJJ055Ŝ9søņw ‚ĄĶ›7qėÖ-ņ_ZZC‡…££#TTTŚóäɓ-½`¤„„1xš`L™2„Ū‰iŗ‹… téAoƌpwwļpūaƆuzŒŽ²}ūv<ž¼Ēś’Xøp!f͚Õ×ftš›7oņ¹j‹žŌ‰ iŸU«VįņåĖøuėV_›Ņcܽ{GÅźÕ«ūŚ”n§†łåõųĄb¢‰`CÓĀb5:ķ }ŻPŹJĮ^ŃKą Čą‡æ ä…Ä Ģ’å=+X[[ƒĮ`ąĮƒŠŌŌD\\ĢĢĢ`ffFNUTT÷Ieü>®,€t&“%bWRRŅźDų÷ßou?ƒ"==åååhjjBii)ŅŅŅ(gggxxxąāŋŠÖֆ††ŌÕÕ1lŲ0˜ššRŚmŻŗńńńŠÕՅ††©31fĢĶ„MėėėĮółR@@€Lppp@@@ 1lŲ0ōļßźźźŠÓӃ••ÄÄÄZ=¾ŽĄėœ ƒÅb™fóēŸ"""‚Ņ®®®Ą’§q̜9JJJ8}ś4¼¼¼‘‘gĻž‘U7hh¾¼»ßHDDΜ9ww÷N;8B. .$oX@s>'ļ«·°²²Ā‹/`ddmmm|ųš’žū/Ž=Š­[·āŸž®®.€ęÉ’œ9spńāEčééĮĄĄA ??§NĀęĶ›qńāEŠØ /ĀĀĀpūömžŻźźj”””ĄŚŚQQQ]özÓt?[¶léŅC¾žž‚ƒƒ? !­„„„ÕOž’QQQÆÆo_›Ńi޼yóy{|-yĮ_*||| „‘‘ŃW šć?ĀĪĪŽü=üŅaldՔ£²©ė3 ¹®­,Ö³z7ŖŖõ(ØÆ†²ˆŌĤŃ÷æ0GNNƆ CLL œ‘€ļ¾ū„¼¼<āāā ££ƒŖŖ*ŲŲŲtyœ®–Ie0]šWWWĆĢĢ ˜9s&Œ! 999DEE‘«ą@s”Śøq搔”„ÜÜ\DGG#33XµjŽ9 9,~芔ˆE^^īŻ»‡·oß"77S§Nŕ+WšįƇ6wɒ%¤>ÅŲ±c‘€k×®!++ )))øzõ*233”¦¦†¤¤$ČĖĖwśŲ9“÷¬Ó–­bbbX¾|9YYHHK–,Įٳg±gĻ„‡‡CII vvv]¶ęė‚vōĄĪ;»VŪŲ؈ĄĄ@Œ9’ā1b޼yÓiuēī 00ϟ?Gtt4—:é“'O`nnOOORģ-::/^ā°qćFJū‚‚Œ37nģŠźźĄy °±ŁlxyyaĖ–-øpįœœœ>įiŗ‹«WÆv©\žøø8.\ø@*‡÷%>|Ą²eĖH/ü×ŹŃ£GæøŠ’>t:ōY3œ¦oŃŅҾ}ū°jÕŖ¾6„ĒØ««Ć’%Kp’žż.OŖ>XéUÅh`}łeĢ(lØF›m‰/ė¾gccƒČČH¤§§£¢¢£GĢĢĢüü|HJJRVĆ{ •VErCBBžžŽ]»vq}ʙ¤æzõŠĖYKžæ””/^¼Ą”)SHa<æžś+¶oߎß~ū ¢¢¢xņä FiÓ¦QŚ9s .Dzz:ōõõ!,,ŒoæżK—.å²+;;RRR€““4ČĖĖcŪ¶m”6YYYŠÓÓCxxxŠs"+6nÜ Źg, oß¾„D¶¹ŗŗĀŪŪ’üóĀĆĆįääAAĮ³ęĖāĖž5źaźźźpłņe8pūöķĆɓ'IåN 9Ē/00111”żŽ½{‡ĄĄ@¤¤¤h׿wļųłłÉ6ˆŽŽĘžżū±oß>9rOžÄŪ·ońĒPVpĖ’½ūkņz8žM!ģ! €ČUėŖuo먫ڪuÖU-­V먶žµn«Õŗµj­uÕjÕjÕ¶ŽjŻ{”ˆ‚ E;@HņžAÉk (AcĻēŗ¼”ä9ɝ į9ē¹Ļ}'$°mŪ6ęĪĖ‚ ų駟øsēŽžžŌŌTV®\ÉńćĒ ž'**Š•+WrłņeĪž=ĖŹ•+óŻ÷ć?ņŪoæłõ”wīÜ”oß¾EŚūŻwßX)ųe›3ŻÜa„yóę\æ~½{÷R¾|y¼¼¼ō-;FćʍŸ¹R&“©.ĻÓųśśrńāÅ|»±¬X±Ā`2’¤Üć’»čÆŃh8sęŒžė¤¤$źŌ©Ćžż`M»A IDATūłÆŠ+¢ÓéHJJB"‘ŠøqcÖ­[—ļq“Ķ*‘HšóóĖs9ē‰+VäĒ`ōčŃ|ōŃGyŽóööF.—£T*ó}mOzž÷ÜĆĆ…B‘o¬ēĪ£bŊœ8qB[@@-Z“`ƌœ;wNßA@d茵k“mŪ–˜˜<==±··'""‚ŒŒ f̘Į„ °µµåĄLœ8‘ŠŠP}źĻ˜1c8pą7nÜ`÷īŻ,\øPæŗ˜@Ó¦M¹qćX[[Ķ£G9r$K–,!>>ž &č'O;vģ`Ļž=8;;Óæ’““6lėׯ'00ččh† ĘįƇłå—_ !!ŲŲX|||8uź”~õšöķŪ4nܘųųxŖU«¦ßćtūöm,--Ÿ™®ØP(HIIA«Õę{½~żzƒE‡Ü‚)IIIł¦†}žłē 0 ß„¼qŁŲŲä“k³±±įڵkh4üüü3f żõ;w&%%lmm‰ŠŠB„R1gĪʎ‹æżöŸž9”””ś+££GęšįĆܼy“ŠŠP† †­­-}śōŃĒĮūļæĻģŁ³yė­·žūu•D*•Šž={’””dōؐ}’rsūēŸ Ŗ&—FžžžOŻ›Y\ݹsĒ ĀqaµjÕź¹‹5 /ŽD"aŊ—ź­&L ]»vš;”"ÉŅjJÜD¹°b2’)cõ|ū·_¦Ę#•JY“ho¾ł¦žö 0cĘ ģķķ?~ü3ĒßߟŲŲXʎK­ZµØ\¹ņsg ōīŻ›™3gņÖ[oŃ·o_<<®_æNjjŖžžŠ+\½ķŠ”¼ūī»lß¾Ė—/ė‹™@ĪŖfķŚµ 2$Šā޽{¤¦¦āé驿ķĀ… ,]ŗ”ōōt}—xōčQQQ„††¢T*0`'NäįƇ,^¼˜ĢĢL¦N ädalŪ¶9sęąęęFƆ ©^½:7n4ˆćēŸF*•, ¼j>üšCƒŒ–ĀŖ_æ>óęĶ3ADĘ{UR’W­Ze–­DĻ#·©±Ł%*Tȓ:)˜ŸsēĪ5w&•» ¤~žä·ēßŌ²tZbµźśē”6ļÕ× M6™Ś’“ŁąččHūöķ±²²¢U«VśŪėÖ­Kłņåqpp0ør>ūž»?}ąĄ 4ˆü‘~żśé+č{{{ē[ĪŽŽ’§fOłłłqšąA\]]™;w.}śōŃW¤’ę›o4hžX}Eś   6lŲ@dd$ļ¼ómŚ“aōčŃøŗŗ2oŽ<}]'‰DĀž={hҤ ėÖ­cąĄtģŲ‘™3gņĘošėÆæź÷ŅoŲ°=z°mŪ6† F‡˜8q"¾¾¾}š?ž˜.]ŗ0~üxœ9t萾īŌŲ±c™>}:§NbģŲ±t芁”C‡¢T*ŁŗukžĪłÉ]\¼x1½zõŅ·6ō÷÷ĻwĖ£³³³~_?䜗~öŁgģŻ»—”C‡Ņ­[7¦M›F­Zµ8xš`ž͚5W’…<$ädČžżŪµ}~ĶĀ… 5j”Y4‡ŒŒ ģģģųöŪołšĆ ī # €mŪ¶ńĪ;ļ9ļĻøqćøpį @”Pģ÷ūņĖ/Yøp”žźFHH.\ȓ^ĖīŻ»éÖ­›žĆ799GGGV­ZÅąĮƒ Žõšš`żśõōė׏«WÆĢźÕ«łąƒ ·U«VŲŚŚź?h†Ź?’ü£O•Ļ•••…µµ5ėÖ­{ęŲ™3g2ž|ƒŹŪųūūÓŗukƌc°²uėVʏϽ{÷ō·Y[[ćććCƆ łōÓO©ZµźSŸ³}ūö„††ęééŖŃhˆŽŽfÖ¬Yœ9s†sēĪQ³fMŖV­ŠæææAµŌÄÄDœY¶lYž- ·nŻ"((ˆ}ūöéÆÜϟ?Ÿ‰'rįĀśöķ‹GŽŃ’‚łöŪo=z4‘‘‘śN5ĀĘĘ&OŸ×WÅŅ„KóM“{wwwĪ;—o‘Gs3fL‰¼2nŒAƒxE¦8Ū¾}»Ń L–––|ōŃGłžŲ ę§Óéhß¾}¾©½„II=ŸŠR%£JĪsūUįŁ/$ß¹‡CE0¢˜k=¹=M¬œøÆÉd[zŽžó‰7ļą”–bzĢC,llČNKĒĘ3’‹0cģ½óž«dļ†ƒeél(¼z>ŒF£ałņå>Fƍ7X¹r„Į}¹{wžœų†„„°qćFZ·nM||<ēϟź iƒ ųī»ļčŪ·/5kÖ¤|łņ”/_žĄĄĄē. ņäJa.ƒ”üśõė³nŻ:-ZDĖ–-±±±!>>ž7¢Óé UėóĻ?gāĉDGGILL ‘‘‘\½z•„K—ņĖ/æpłņeżjdĻž=éŁ³'qqqśV5QQQܾ}›ü‘­[·réŅ%üüüžś¼aaa¦1•-[–µk×ÄļķķmpLī~į’Ž9+ä€>ą“O>aćʍ“jՊ„„Ο?oP©õż÷ßgüųńl޼™O?ż”ččhNž<©ÆÕšŖ9}ś“QmūrI„R6nÜXl&’'OždŃ¢EęƤ<==‹M¶…1r³¦ŒÕ¦M1ł/Ę$ «WƦzõźF×u(I&MšDūöķ©T©’¹C1ж€l›‚rpbž<‰:5ģtŗl Éwī!³±F—gYoŽĮ%ø Ž•ż ż˜¹Ņ"¢yšŪ_ŲUšBõ(;o²U¤=ˆĮŹÅ ‡@?’nŽĮ®‚ž­=ćŃž}}Ļ|VA(9&MšÄ©S§šņņbćʍbņ/ä!ņ‘{„žĄ5rÕ®]۠Ͻ……^^^\¾|;;»gž õīŻ›¬¬,vīÜÉśõė‰ŒŒŌŸš¼õÖ[ģܹ+«¢­D?«°Uff&[¶l”N:Ģ™3ĒąJ„ÆÆ/‹/Ö·~üńGFÅŲ±cõķ s :”† rõźUvģŲA·nݰµµ-rŒ%‘V«„wļŽ[< «S§NŒ7īÅUD¹…K³Įƒ—Č•»wļ6ŗPœ\.§{÷īĻģ±,C† aēĪ„ŗ‹Jn†ŃŪā–&^m›’ż o·F"“‘—€•‹#™ń‰Ų”/‡*ę ×¢µßóīŲļŽ- n“;Ś£Óhp­[C[ÉZŽ„KLž…§ ł(S¦ …‚«WÆę9I~ųš!UŖTaɒ%ōīŻ›ōōt>łäZ·n­’zȐ! 4ØĄŠ -[¶ÄĶĶŸ~śI›ƒƒ;wÖwȕ{ŅŖÕj_Čkó÷÷ĒĆƃZµjQ¾|yœqvvĘÅÅwww‚ƒƒéׯ_¾ÕśsņĒ R©°¶¶Īsn÷ƒÜ=ń¤„„šoŚćƒHNNÖoJīīīČd2._¾LēĪ īĖM+.W®“-0jŌ(ڶmKÆ^½HIIaųšį 4H_XąĶ7ß$88˜ pōčŃRæ‡5?“'OꥁF `ćʍÅfrvāÄ –,Ybī0LŹĖĖ«D\»~żzż„Ÿ¦]»vyŠ_ ÅŪŖU«.T[­’źóĻ?§]»vϬ}Sܽ!w Ų2ŸokĄé‰ßéežŻŽåžļ6Eū‚;qøHs2ōŹĖä ±-äyAÓĀž?Hņģ’AxՈ€|H$ŗwļĪܹs)W®5kÖ¤L™2}:QQQśBsdéŅ„Œ1‚K—.å›Ź_«V-–-[ĘźÕ«iŲ°”¾åČęĶ›INNÖ·&°³³ĆÖ֖mŪ¶Q»vmœõ{ՋĀĪĪ???ڵkG—.]HJJB©T¢T*¹wļ'NdŪ¶m>|øĄĒ2d[·n„U«V 6 ___HNNęüłóĢ™3OOO}JwÆ^½˜1cķŪ·g̘1āźźJzz:”””,X°+++zõźUä×UX“k׎oæż–Š+R£F ,--¹wļ_|ńeŹ”ŃW Ÿ6mŃŃŃś+Q|šž{{ńāE}UZČÉ ĮĖĖ‹ęĶ››üu'{öģaÖ¬YFS(lŻŗ5ߏ·ęš*¤žēī³Ī­¼\R5õßßߟzõź™ "Į”¼¼¼˜7o^ž‚¶„In—‘ćĒ—č­åe¦+œ'C‚£Tœ¦ ‚ ¼h⓵‹/fųšį 8Š`BąēēĒʍńööęśõė,X°€”C‡źŪŽÉd2,X@‹-˜;w.“'OĪóŲ“'O&<<œįƇ<¶ćʍ£cĒŽśŪ$ 3gĪdüųńśŌśššš<­> ėšįÜ:uŠ#GŽ`a‘÷Ū_æ~}FŽIvvv¾÷CNĆO?żÄ’ž÷?ś÷ļopŸL&£iÓ¦,Y²DŸļķķĶĮƒ3f #GŽĢÓŗ«fĶšģŽ½ū„] Y±bżśõĖÓ¦/((ˆ;wbkk˵k×Xøp!Ƈ×Ē•ū½mÕŖóęĶćóĻ?×ķŁ³'!!!ōéÓ§DŸĢėŽ½{ōļßßčvlĖ–-3Øan&LąöķŪęƤ† B»vķ̆ŃvķŚeP›£0¬¬¬Dź 6hŠ ¶oß^Ŗ·üóĻ?,\ø±cǚ;”" ĖVq23©Hc3”I(œ_ī°Ō‚nÖ¢Ø Æ6ŃšŅŅŅ C­VćęęFłņåõūj222P©TŲŁŁå)*—˜˜ˆT*ÅĮĮ•JEfffž«n™™™ÄÄď\.§J•*NŗSSS‰ˆˆ@„RŒ……IIIŲŚŚ"—ĖŃh4$''cooŸē1r÷ŽŪŁŁń×_ѼysęϟO÷īŻqrrĀŃŃ„RIDDćʍćŅ„KÄĘĘźż‰'22Fƒ½½={čó{÷īŻ#33ÜÜÜ ]™;55­V‹ƒƒC”ŽONNĘĀĀ¢Ąķ *•ŠˆˆRSSńōō4Ų‚PŲļmll,r¹œ¹sē2oŽ`ėÖ­\½z•:Š”Ct:ąČ‘#$$$ P(Ø\¹2ļ¼óīīīśĒŠjµģܹ“ćĒ£R©(W®=zōąŽ½{¤¤¤šŽ{ļ‘™™©o…żß,ŲC‡q÷ī]†ŖæķöķŪģܹ“{÷ī”Óéšōō¤]»vŌ­[×`lXX»vķҧ4»»»ÓŖU+š6m ät{łõ×_õ‹ņėÖ­£\¹rųłłŃ³gO gūę¶mŪ8ž<*• j×®M·nŻ Š3§§§³iÓ&.]ŗ„Z­& Ą ż¶ ¼ŹÄ€ …– ?90ÖōéӋÕUč““4† R¤†%Enź’ÓźrGÉÉÉģŪ·ĻčqAAAÅŖ°¤šbxxx°pįĀżĄöķŪ鯻7®®®!—Ėłķ·ß˜2e 3fĢŠLžėÆæh×®TÆ^‰D±cǘ1c3gĪdāĉܾ}›•+Wź3æ¶oߎ\.§I“&ōģŁ“øø85jDDDĮĮĮø»»sįĀ,X@58zō(vvv¤¦¦ņĘopēĪźŌ©ƒ»»;'OžäŪoæ%++ė%~Ē”x ‚ ŠV«„OŸ>„‡‡=¶cĒŽL˜0ĮQŻgŸ}FXX˜¹Ć0©#FčŪq–:Ž;wśoccC—.]L•`nżśõć—_~aēĪęÅdΟ?ϼyó˜8q¢¹C)“Ց”쉋4w…öž‡?ļyų™;Œēș3gō‹»ū÷ļgĒŽlŻŗ•=z菋ŽŽęõ×_gƌlٲ…sēαeĖfĻžm°ådļŽ½tģŲ£āŠh4„„„о}{vģŲ”Æc‘Ķ|ĄōéÓ9r$ŽŽŽĢŸ?ŸFńūļæė‹iCNĒo¾ł†‰'ҹsg:wīĢ”C‡hŻŗ5{÷ī5X€˜7o111ÜøqĆ ›šąĮƒ“iӆM›61lŲ0V­ZÅõė×9{ö,Ææžŗžø &”ČŒ8AxŃÄ€ …2eŹöļß’ģ’Ć××—ļæ’Žą¾¹żńĒ,_¾ÜÜa˜”ÆÆ/_żµ¹Ć0ŚŁ³g 5z\§NJ\¦ƒ`œ„K—źÓ›K«©S§Ņ±cGżÕŚā.,=…ØŒts‡QhįŖ¼ J¢©S§|Ž;v ///ƒÉ?äŅģŅ„ r¶šI$ƒō}€:i;ćķŪ·‰%$$Ä ˆ„……Ɔ cƆ \½z•† ņčŃ#źÕ«—ē\`źŌ©ōīŻ»PĻwģŲ1Ž~ūķ<[ [·nM„J•8{ö,Ɔ ćŌ©S¼žśė“€‘#GŠA@,hĒŽܹs‡±cĒ©2ļoæż¦/`2{öģ<-”$Ł»w/3gĪ4zœB”`ĒŽFuŠ0µ““4†ZŖS’„R)ėÖ­+qāÄÄÄ"õ}ÆR„JŻZ„ŅĆĆƃE‹Ń·o_s‡b2¹[N:U¢¶/—›››Į׏?F£Ńä›iwåŹ’““œÖͶ¶¶łž“V¬XFcTńńńl޼YæČ+w”.)) ČY¤6mįįįāć惗—UŖT”U«V…z¾§½Ī““4żs=~ü8ßĀĢåĖ—/°Ż¶ ¼JÄOA6lŲĄīŻ»=z“Ń ?üš}ūö„jÕŖT­ZÕ,ķÅ&MšDėÖ­iÖ¬ŁKī\›7o&>>ž>śČl1ĻļžżūōļßæH’æūī»<+šęö駟–śŌ’‘#Gšõgæ(t:æüņ‹Ńõ%Dź’«åż÷ßgēĪüüóĻęÅd.\øĄœ9s˜4i’¹CJ•J…Z­ęīŻ»yīóņņŅ_ŻĻČČ(°Å±••ééĘesä­_dxR=ō&Mš„ŸŸĒŽ#44”ƒAJJ ļ¼ó[·n}f÷•J…L&Ė÷u¾łę›śöƙ™™øøøä9F"‘ „W•X(Ą‚ ųņĖ/‹“æ’~*UŖÄåĖ—ĶÖ×w޼yŲŪŪ›u[ÉU,”\tļŽ]æŹoŒįƇ»žŻüń«V­2w&åēēW¤l s;uź·oß6z\ēĪ±³³3ADBqµ|łrŽ?Ī£GĢŠÉL›6·ß~»ÄlĢĖŻŻ *°uėÖ<÷edd‘‘€³³3iiihµŚ<©ų±±±88vtČ/S.÷*{īóĢž=;Ļ’U­VKRR¶¶¶„‡‡Ó©S'śōécpÜ÷ßĻĄ¹té5kÖ|ęėlÖ¬óēĻĻs_JJŠ~ĮÅŅ””¼Ū=ŅŅҌ^ä„ŅH, ;;›ōōtż‡ÉÕ«WQ«ÕŌØQƒ?’ü“°°0œ©S§~~9e"##¹uėįįįŲŲŲšēŸŠøqcBCCÉĪΦJ•*üžūļÄĘĘņī»ļźŪU;wŽ7n™™Iٲe Ź·MßÕ«W9sę jµ;;;źÖ­K`` jµš#GŽ9¼wīÜįŠ”C“lŁ’GqåŹš7oĪ™3gøvķµk×ĘÓÓ“Ė—/ÓØQ£<+Ć'OžÄŁŁ™  ’ļµĶŋ‰%;;›   4h _,9ž< ÄĘʒœœ¬!88˜²eĖņēŸāćヿææĮsŻæŸ°°0Z“häģõ*_¾<¶¶¶üńĒØÕj}źgVV'Nœ <<FC¹råhŲ°!ĪĪĪEś~ ł9r$ēĪ3z\͚5Y°` "*ŗäädųJ¤ž—“ ±R©äĄF«Q£F‰k›&ÄŅŅ’¹sēņÉ'Ÿ°k×.BBBōŃŗuk <˜&Mš°lŁ2ęϟĻųńćŃjµ8;;£ÕjILL¤B… ģßæŸ*UŖšŁgŸńĒäyr«Óvīܙ1cĘ0eŹƒēŚŗu+_|ń…~„ŗwļŽpśōiŅÓÓńņņ¢oß¾\æ~Ž;Ž­­-666ÄÅÅaccÊ+x’ż÷Ÿ’?€ĄŖU«X»v­Ńć\\\ųłēŸ±¶¶6ATE7f̘<'3„MHHˆ¾ŸrI”ÓéŲ±c‡Ń­™ģķķéŲ±£‰¢Š»^½z±cĒvģŲaīPLęāÅ‹Ģš5‹/¾ųĀÜ”ÅB"e˜OUVŽæŽZ÷ņ·@¾ŠŗwļΤI“čŲ±#ƒ ĀĻĻFĆŁ³gŁøq#ü1mŪ¶„lٲōė׏/æü???¢¢¢˜3gŽžÜ r&ą-[¶džüłX[[S·n]ŅŅŅX½z5÷īŻÓŸ+ŗøøŠ©S'&L˜@BBU«VÅŃёšõ×_ćķķĶo¼ä¤č/\ø…BAµjÕpvv&&&†o¾łƒķ‚ŽŽŽĢœ9“~żśįääD“&M0`]ŗtašąĮ“nŻ///ŅŅŅŲ¾};aaa,Y²€¾}ū²dÉŽ}÷]Ž’}Ź–-Ė;w˜:uŖAęĆŋiŃ¢}ōÓ¦M3ķ7IŠ‘āS–»8žłÄčqR©”M›6é³bŠ‹C‡éĆJ+f̘aī0Œ–›Éc¬·ß~D$”Ė–-Ó§ —VÓ¦M+R–9½ėY‘īžh(½ŁVę"—ĖqvvĪ“¾ļééɁJ„ 6Œf͚ѲeK,XĄĒ¬ŸÜŚŁŁ±oß>鯻7o¼ń}ūöåµ×^˳ ŗbÅ Ś“iĆŌ©SiÕŖ}śō”|łņŒ;Ö Ė`żśõtķŚ•Ł³gÓ±cG7nL’žż©P”ūöķÓļ¹_³f ­ZµbΜ9“k׎śõėóĪ;ļ R©Ų½{·A±ąĄĄ@¦OŸĪįƇéܹ3={ör¶|­]»–“'OŅ»wo7nL»vķ8qā«V­¢]»vŌ®]›ü‘+W®Š½{w5jÄgŸ}Ę'Ÿ|B5ŠŻ AxŁD€\]]łā‹/ōD?~<»vķāÖ­[ŌÆ_+++är9–––yŅŃ===Y¶l™A]¦OŸNżśõõ·I$Ś“iƒN§#22OOOīܹƒŸŸ 6Ō'“É1br¹¹\ŽD"1xNkkė|Sā—,YR¤ĀlD«Õ2cĘ ƒļźÕ«Ó«W/ż+·ņø\.ĒĀĀā¹Ņņ»téĀȑ#õ_'$$pņäIÖ­[g°EĀÕՕ©S§Ræ~}Μ9CĖ–-‹üœ¦“lŁ24 =bņäÉtźŌ‰ R©čŃ££Gę÷ßĒŻŻ;;;† öŅcT*•tėÖĶč>ģÓĪ'÷pq‘œœĢ| R’‹”Ēē©]Ææž:U«V5ADBIāęęĘāŋyļ½÷ĢŠÉäöS?}śt‰)^hėāG‘hKńg®¹t芔Ą6˜ 4௿žB£ŃœœŒB”Čw¢ūśėÆsņäI233ÉČČŠoE}ļ½÷HKKÓēéé©/¶™””¤?૯¾Ņ’ŪŃё•+W²råJ’““ŃétĒę*W®›7or¶ø¤„„amm]`QĀɓ'3yņdRSS ŗ 8’‘‘J„ĀĪĪ.ßm2={ö¤gĻž¤„„”Ńhō‹O^ÜØY³f©n+* FšńńÉÓ>$w²ūä‡fA|}}óģŲ±#uźŌ᧟~B©T’œœLFF’ż7€>-¶f͚L›6?ü:uźąķķ··7¾¾¾Œ?ŽØ×Q”^Æ( Ź–-›ē¾éÓ§ēŁ×õ"ü7և¢Ó鈈ˆ`Ū¶m÷)•J€"¬{YīŻ»§Æc V«±±±įĀ… „‡‡ćēēGZZ}śōįµ×^ć믿F§Ó!‘H˜5kĪĪĪܾ}www6lČ©S§°µµ„L™2¤„„‘––†<|ų•JÅo¼Į… ˆŽŽfģŲ±,\ø;;; Z­…B½½=½zõrjGōéÓ§HWd;tč`’’ĻkōčŃ„>õŌØQ4iŅÄÜaE§ÓńóĻ?£V«ēąą@ūöķM•PҼūī»ģŲ±#ĻļƒŅäŅ„K|żõ×y¶ĶWIŁY8[Z5ę]Ϥ j­©¬¤2T ö–”‘+8©ŒÅKaĖÖčŅŻĮåEÉd…ŗšbee…•Uį¾OłMčóóßśɽpU-l+Šž”[„P„’'Œš¼½Cóko²oß>ŗu놭­-ŲŪŪ#—Ėńõõ58®sēĪ,[¶ŒM›6±gĻbbbŠh4Čd2:vģČęĶ› Ņō¬6+Q«ÕłöŽ…Āėæ±ę¦÷ÆX±"ß_\žžžfė¼P &&†0pą@5jĉ'Šh4”/_ŽąX™L†F£ĮĀĀKKK† Ęüłółč£X½z5/^¤S§N]żI7ndęĢ™yś«jµy+;::ę»ēźņåĖόÕĆƉDĀ­[·ņ,„‡‡ÓŖU+¾ūī;ڶmūĢĒ2‡Æ¾śŠŲŲX:wīŒB”`ĈH„R¤R)ŁŁŁČd27nŒL&3čf0bÄżßVVV <©TJRR®®®dggóųńcŗwļŽD"įįƇtėÖ KKKāāāxė­·'::­V‹……S§N%11WWW"""čÕ«W‘V’—.]Z,ÆJ5Źą’oiō駟Ҹqcs‡a­VĖöķŪó“wzGGĒbW_B(>r …å×½“ø|ł2_}õS§N5w(ŹÖiI×d#—.ģNZ1é¤kŌč; KR³s¶ŁYX²?.¹TJ–VĖū™0rA„WGńŹ×}UØP]»vqļŽ= 'Ķžōéӌ;V’5äŌŲ·o›6m"66FCbb"7n䎽{T©RÅąq]]]9xš aaa(•ʧNģ‚ƒƒQ(|öŁg\¹r…ōōtnŻŗEæ~ż NŅ[“hB”ąć?ęŅ„K¤¦¦¢T*9tčK—.„uėÖ)ą®®®„††rāÄ āććõWøėÕ«Ē?ü ļĒŅ„Kõ‹OcggGóęĶłź«Æ8xš ±±±deeĪ_|ATT5kÖ,ܛoR©OOOżv …B”/–ØP(ōÅ#’»īÉć!gļž„„%®®®@Ī‚P¹råJ„H$Ź•+§_TrssĆŚŚšŖU«2lŲ0>ųąš5k†……®®®dddн{w?~lōė2dƒ *ņūa*{÷īåūļæ7w&U¹råٶčȑ#śŽ…%‘H茵«I¶ „ĒŅ„Kó­QSšĢœ9“³gϚ;ŒEŖRYqF.…“öļäŠOžŸüwÖæŅ5Ę- ‚ łf6{ölzō聟Ÿ–––ØÕj$ cĒŽåʍÄÅÅ9W3O:Eß¾} ®ģK„RŗwļĪ€ wĀ„ Œ3F_)’Ģ™3ĘP¶lY–.]Ź'Ÿ|Ākƽäœp4H’uīq7ndųšįy&ŁĮĮĮ,^¼Ųą¶!C†°mŪ6}ē‚Ļ?’œÆ¾śŠ¹sēŅ„KŗvķŖ?¶R„JŒ1"϶‡ü¬]»–÷Ž{6mŚäyk×®-6'€j­† m6ŁłdA'ĖW.ĒÉ«-<Ś£|ü˜»·n“” |渚5k²hŃ¢—”q’’’>|ø¹Ć0©’šśßžiōøśõėh‚ˆ„ŅäUŁ ŠæĪ;WlÄle(ՙŽdēD°}’²³x”©ĀīßB’(cičģĮ©Ä‡T·w!M“Mlf:6ŽWĘŠŌÅk™7S•T·wa\$‰ł<§Ā–aŖ2%“ąóA„W™„œEŁæ[r °?÷ … 2jŌ(³h.‘‘‘(•Jż8<<œĢĢL‚‚‚ ŽS©T\æ~J•*é;„……”Ńh öŖŽ½{µZMåŹ•ó‹°·ņ=ĘŁŁ™sēĪåŁ Rōė׏7š; “7n³gĻ6wFŃjµ,_¾œØØ(£Ę9;;RčjÕ‚Š«W/~śé's‡aR“&Mz©Å?#ӓx˜‘’ēö‰·Īq(>Śą¶’UŖ›ówš¾å+±ļQ Ėa#³ ČĪ™‡™é<ČHC<ŹRQĖĮ•Äģ,’ÕYŲZX “H© °ćQ– { Kn¦&š{\Žm^VRW›¾Kļ ‡8“ųČą¾nå|˜č’Zž1ö®8YĻA^]AAAÜŗ„?Ļn)@2(’ż“šÄ擞=& H’w\ ²X„(.3ˆ4e©ØVœ™‘Įä!ń×¾·K„RöģŁĆ[o½e¦Č ¶gĻ:uźdī0L*((ˆóēĻ—ø«’‡2śźæD"įƒ>(– MBńOõźÕ :œ”6œ8q‚ŗuė¾”ē3f s9?&¼N£;õéūOźąīĆфhj9øaoa‰‹Ü ™DšÓ@nMrvž6hŃń8++© w¹µ~ @dF* ©Œ°ōd.'ēßöwĖėmų)ś6;c [ڊAJS-ˆ-‚š‚$«3øŸöģŌł’ĀJ”`ĘŖ% lŪ™ŪWÆėo’ņĖ/‹åä?11‘?üŠÜa˜”L&cżśõ%nņĶŃ£G× A1łŒV¦LV®\ÉŪoæmīPL&w+Ąłóē‹ŻV€]’NŗÕlŪū(§żēфč|ļĻ\*„y/’³³8©|v»G[ ā³Jfž ‚©‰"€‚š‚D¦'™;„ĪJ”ą“©“õ_·jՊɓ'?e„ł|ōŃGF—+i>ūģ3źÕ«gī0Œ’ĶöķŪī0įāāBėÖ­M•PŚuźŌ‰>}ś˜; “ŗqćF±-ŗ+6ÜØLøŠ6O½=K«å@\d”&’r“„"OįÅ ‚š¤eg”ŅØŸ}` TÆi#ÜŹ•„B… l޼™Lfīņųõ×_Ł“i“¹Ć0©*UŖ0eŹs‡a“ƇóšaįNŚsI$ŗwļ^¬ū Åߒ%K ¬!SZĢ;—Ó§O›;ŒēāLOϊ¼é\ŽŽ^T³waw½½iVʓĘ.H%’B?ŽęØŪ¬­Ńk™HtAų/ńÉ(/@z“’›źti ^ŠfkČrZ÷V9™%•,lHŌfs0#ļ–µ*K매„źtdgfa”ČæØZgkWäOÄ#‘HØ^»sž7]ßv°8‰g芔ęƤ,,,Xæ~}±Kõ}–ČČHŽ?nōøĘćėėūā^)NNN,_¾¼T×ÉŻ pįĀ…÷łš¤k)J“:ØhėĄB™[õMVŽæN“2”µ²@«+üż®.p‚ Ā«L,Ā PP«æ0Šźō<·«Å£¼|™Ā …»+™ńJ+ūń:.Į•I¼†·'v¾åóŒ­niK% ²tZīk2ņÜ}ō8R+9r;2ā±rr@f­ -2šģtÖeŻx|ö2ž­įT% Ļx :r„üæ>ž˜:uźņŻx¹BBBJu±/€ńćĒæ“b_/Jvv6?’ü3Z#OĄŻÜÜhŃ¢…‰¢^5;v¤oß¾„ŗ3ČĶ›7łß’žĒ¬Y³ĢJ‘YI„htZĀŅŅč饚ˆŌur#M“M’:‹L­q[ˆ‚ģœwć$Ł:± ‚š_b@Ģąńé‹xµmBäŽ?ČVe ³’ó`’n.¤Ž{@fB"2¹e¾ …‘płö¾ŽHå–d*“H9¹ƒ=NU»8”ÉČ$=ęQ¾ łiŅ“I‘ā0µŻ»w³yófs‡aRUŖT)¶užę÷ßēŃ£GĻ>š R©”wŽy§X“óJoæż–?’ü³T×™;w.;v¤Q£Fę„H–Ü»ś’_ü›Ųv#5ē®r³ņ.v?M‚:GK±…H!?¢€ ˜}€ŃœĄĘù£=Śl v<‘ZX •["SX!±(ŚśœC€/.ĮAŲūWĄ±’?¾ČȈWbćUŽĢĒJ|pØčó‚_ÕĖ%R’‹ÆˆˆNžĮ²0¢99Ņčār%ĶĉK\źæZ­fūöķF§ž»»»Ó¬Y3Ó%¼ņ:tč@’žżYæ~½¹C1™[·n1eŹęĢ™cīPĢŹĒŚžZŽ®œIŒ3w(‚ ŒXjdåD£ükķ=7;‰Œ6 gÓ>ŽØ1¹©’EĢz„ĀX“hüń‘‘‘ęÅdęϟĻŪoæ]b·¼2Riwj2RĶŠ B±$ζĮ„Ņth2ĶF”ɐ`amī0žźńćĒ 6ĢÜa˜”……kÖ¬)qmšī޽˩S§Œ×¼yóRß®M0?GGGÖ¬YCŪ¶mŃQQ¾$ÉŻ pᬭ‹÷g¹©ht:.'·)‚š* ‚`B±Z5æŖŒ;Ńiµ(ÆÜÄŅŽ[o“YjtZ-–övd)“;;’•”‚…­5‰×nć\½2šŒL¤V–h22‘H$Ȭ¬ČĪČĄB”@b!+ōs["įūā½{Ĉ„>õҤIŶėBA²²²Ų¹s§Ń+š6mj¢ØĮPėÖ­0`ėÖ­3w(&sėÖ-&OžĢüłóĶŠ ‚P ‰A(ftŁāĪ\Āŗœqg.‘•˜Œu972’ČLPbėYŽō˜‡ø7؍ņz(™ ‰<üū,6že±rqD"“”z‡ÜÉ kk¼;”ž–j[·neŪ¶męƤjŌØĮēŸnī0Œ¶oß>ŒcaaA=É æH%ĻkįĀ…>|˜ˆˆs‡b2ß|ó ]ŗt”qćĘęEA(fÄ€ 3R¹%Öī® ė²®X—uÅ”¢±ĒĪP¦FUäŽöȝP§¦”pq&3A‰ceŌ)iøÖF«Ī&ć±’ģ4V.„§FĄćĒ 1w&URS’ĆĀĀ8{ö¬ŃćZ“hAٲeM‘ ,w+@›6mJõV€péŅ%ģģņ)k$iÅa=68X”œjūr›|o—Q2Šß ‚ ¼b@LH¦…Äųn›•:·Ķs[™>…OĶwtw¹ƒ½QĻkQŒO‚>üšC£ūŹ—4_|ńµk×6wFÉČČąēŸ6z"åééłJ*Ģ«U«V|šĮ¬^½ŚÜ”˜ĢŻ»włā‹/Xøpįs?–•4’,Ÿ*„ų­£Mq"YH‚ ¼BÄ€ ˜Æ…‚ģĢPÜģł/ų+›7ofūöķęƤjÖ¬Éĉ͆ŃöķŪGbb¢QcDźæP̟?Ÿß’½ToX¼x1]ŗtyī:Ž– $@iĢ—HS&!±s‡’•x%‚Pdb@L(<=•£ŹXs‡QhõœÜØbėhī0 ÄÅÅ1jŌ(s‡aRr¹œõė×ciYrRi!§ŲŲ¹sēŒ×ŗukÜŻŻM‘ žƒƒk×®„uėÖ„z+ĄĄ¹|łņsm°”Źpµ²%.3ķFW<\=ö)®įtģŲŃÜ”‚ ¼b@LhėĆp¶ĒÜ3w…Ö25‰Y•‹W ś«’ś’Śkƙ; £ddd°k×.£ĒUØP7ß|Ó ‚ńZ¶lɐ!CX¹r„¹C1™ššp&MšÄ¢E‹žėq¼mœHĖĪ"]£~A‘™_ų„kDß¾KĢpŖU«†ŸŸŸ¹CA09ć7' ‚Px%ģŖ’®˜%xnŚ“‰;v˜; “ŖU«ćĒ7wFŪ½{7IIIF±““äwŽA*æz„ācĮ‚ųūū›; “Z²d GŽy®ĒJ$TvpĆ„€Bz%‰&;›kĒNqéš1t:;vģ 33ÓĢ‘ ‚ ˜žČ”XŠåć?6w&eeeU"S’oÜøĮ„K—Œ×¶m[Ź”)c‚ˆ”člmmYµj­Zµ[žA&‘āoēB9=Ź,™5Ł:ķ ŒōÅČŹŹāĮƒßO­VGfz:‰uėiéc”J%ū÷ļ§sēĪ/;\A„—J,‚P,9Ņč¾ņ%Ķ”)S6wFIOOē—_~1zœo¼ń† "„ē×¢E † ĘņåĖĶŠÉ„‡‡3qāD¾żöŪē~,™%6ÖÅ{įņń•Ū3w/…‹‹ ­[·6z\Q?AŠ3± /‘\*„®“*¦PĒ»ŹT²Ķ¹‚z%%žŖ4»x Öęō]¶ü÷ ÕIe,o:—3MŠ/ĮڵkŁ·oŸ¹Ć0©7ŽxƒO?żŌÜa­(i° …B¤ž %ެY³ 4w&µråJöļßoī0^Š ąēēgōø¢lA(ĪÄ€ ¼D~6|ź_ƒ  W\(AÉėŽ®DØRPi²iZʃrBKŠÜHUr%%«) œPƚ8zӈŽŽ.‘{āQRS’‹Z«S§N8::š "Axylll^‰­ƒ&11ŃÜ”˜\īV+++£ĘµŖ BqUz« B1t+5‘Ńמf wP”Ž×źtü}‡æā£¹™šČ¦ØŪüĖķ“$¶Å„ńwB,ē“ā ½ØPÜ <øŌ§žõÕWT­ZÕÜa„Ø­°‚‚‚ØY³¦ "„—ļĶ7ß$$$ÄÜa˜TTTćʍ3w/…³³3mŪ¶5z\Q[  ‚ Gb@^²ø¬ d&L.Ģc{)lMöüĘX½zu©ļ·Ü AFeī0Œ¢Ó銔śoccC—.]L• ˜ĒĢ™3KżV€Wį³8W½zõØT©’ŃćvļŽMjjŖ "Ax¹,Ģ€ ¼j\,­HTgxw¬¤2*Ś8—•VR‘ŖTģ-ä\OI ¹«÷U)DØRń·q *#7Ėagaɵ”tĄć,ćäy|W¹‚ó{P’ļÜK7_訨ØR_€J”P°zõź—śęĢBCC÷öŪocooo‚ˆĮ|lllXæ~=7FSČś-%N§cȐ!\¹rgggs‡cR‰„®]»²hŃ"222 =.==_~ł…÷ßß„Ń ‚ ˜žČ„—,]“MĮ“$ ‰”£ns;-‰Du&V¶$©³ČŅjI×dSÉΉŲĢt*Ū:QŁÖ‰Du&Õķ]ØjļLJvN–V$«³’&Ąć¬ öĒEŠŅµ¼©^ā3½*ūNæžśė’śž}ūG­VsįĀż}§OŸ&&&†C‡q芔ēnė„T*‹T¬jÕŖ?×s BqÕ A>žųcs‡aRÆĀ¢l.Žzė-£ĒŻøqć’Ų»ļ°(®.Ąæ­ō"EšH±aģ%v±÷‚(‰½¢±aĮ|jģ{bļ±c‹bļ+¶ öNi»°ģ~FWAÜŁa—ó>O™Ł¹3gMĀīÜ9÷ÜæŸƒˆ!D{h€-;ųž¬$†°”ä\ˆčB\ą|\ĪĒE`kų¼“}Āłø¤ffą\l%ĒćTL8Ndž#]©ÄłøœŽ Glŗ {"Ÿ#S„śnQĄ“ĢLČy|’µ~żz½Æ<]·n]­^¹r%Ź”)ƒĶ›7#!!ƒ†B”ĄŻ»w1{ölœ9s°··Ēœ9s˜qÆ^½Ā©S§šśõkœ8q …ϟ?ĒńćĒ‘––†ˆˆ;v ±±±ˆĒŃ£G±qćF¤¤¤ąåĖ—ˆ„‡‡ćÕ«WˆŒŒDBB^¼xŒŒ ę:&&&”śOō^@@€ĪÕņ`kćʍEf)@͚5Q®\9ÖćŽ9‚ÄÄD""„ķ  B“,I‘Ž&×ēŗ ZžĘü-OĆ«Ō$œ‹@j¦ĮŽā½<·cp#!‘²œ‰ GXr<¶…?Į†·÷ßždEFŽē+©>fä?õQ“ŠBļéģ”aM„ž;::āŌ©SL «ĘćģŁ³øzõ*źÖ­ (Y²$*V¬ØV}õźÕpwwĒĢ™3abb‚ƒ"00öööX¶lQŗti„††bõźÕHJJBHH¢¢¢`bb‚ÄÅÅįżū÷ĖåĖåø}ū6ĢĢĢpóęMę:^^^01)u%ኮ.éa«(fĶÖ©S'±#“ÉpųšaŽ""„īŃ!: Ÿ³J™B*¢²¹5DJ›£—SYŲH a.–BŹ¢UUB†m‹»°£ *• ƒFRR’VÆ«msēĪÕhѰR„Jaųšį022Ā“'OP®\9<}ś*•ź›e …‚łŁĮĮ„K—FŊQ®\9$&&"..ϟ?GéŅ„Q§NÜøq<@„J•pąĄ¼{÷111HLL„P(Dbb"ĀĆĆ ggg¤¦¦"..ŽY'\„JTØPAcĀL‹z²‰1cĘš†V˜››£]»v¬Ē=yņ!!!DD!Ü£ Bt€›‘ŚwAļå P)1Ä„X9ĄĶŲ ­mK¢ *U¾Ļõ=ŹĄFŹīÉĒZ»v-Nž<©Õkj[żśõįēē§Ńs&''cŊG… ąęęGGGxzzĀĆĆ...Ų¶m/^ŒŸž™—]éŗlٲ000@¹råŠØQ#ÄĒĒ£D‰HHH@rr2J—.sēĪ!)) 666°¶¶Fjj* !“ÉP©R%888ąžżūpww‡L&ƒ™™ĢĢĢŠ”C¾WB »9sę迤ז-[pčŠ!¾ĆЊjÕŖčßgpp°Ž×±!„č'ź@ˆ0‰! ‘–”€£ R30‰a(ćAr곇’ÅĄēņņļ%DŹR8ŒZŻėׯõ¾×“±±1¶lŁņĶSłÕ­[7µķ¦M›2?W©RąééłĶøöķŪ«żŁ°aC4lؐy={łĄ•+W`bb¢6yąāā +£ """‘•+W†D"aŽéŲ±#ėōYBt6n܈śõėėmW6l<==aeeÅw(œóņņĀėׯ‘’’’ĻD™L† ’žpŲŚ—B42ŃӟŽĘ¦w±-ü ī&Åbó»ĒŲń³Ÿ…ĄL,Įį÷ÆX/]• ¹R{_\³S’“B}a7ž|”.]šļ0X‰Å™3gr}],ĆÅÅ®®®j7’5jŌŠū‚h„ä¦vķŚųż÷ßłƒSQQQš÷÷ē; ­011a&JŁxńānß¾ĶAD„ĀŹ D¤d~.č—žU¼/»ČßՏ¹WūĻõ| l¤†š .VÆ^S§Niķz|Ø_æ>† öCēHQ¤#!# i™ (UJ Eö}±ØŻ©5«1"‘%K–ÄÓäY­+ÅRXI!źw4B²Ķœ9ĒŽĆƇł…3Ū¶mC§NąķķĶw(œ«\¹2>|ˆŠŠPV悃ƒQŖT©"‘)AŃ4@HTŽĢ'cŽjåZÆ_æĘ„ “r-¾˜˜˜üPź¦J‰×)ńˆOOÓpdy3+n³Œū”™|‘Dņ1= ©I°72ƒ£‘9(!–č;lŪ¶ uźŌQk‹©o†ŽF‰Ü섟>}Ź÷˜ōōtõĮ‚NżWŖTx’ĆĖĶæ¦© BTZ^§|ä;B“¢zõźEb)ĄØQ£ųC+ŒŃ©S'Öć^¾|‰7np!„hMRÄĤ§aĄżóČŠBŠłŖU«pįĀίç&Mš`芔’.5©™śõō0NžŠ8y*ßa¢Ó§OGŊłƒS;vģĄųC+Ź—/ĻWećĉˆ‹‹ć "BŃ,š „pāÕ«W˜8q"ßapŹÄÄėׯ/pŚg†2±rķubЦ(Yß!¢ŁK¾,’©† ‚˜˜¾ĆЊŽ;ĀĀĀ‚Õ˜ŒŒ ģßæJ„vź·BHAŃ!Dć²S’٬£ŌE‹/F©R„ <>)CŽü7oԌLؐØThüŸÆÉ2e~»Ÿ}T­Z5Œ;–ļ08ƒŃ£Gó†V¢cĒŽ¬Ē½}ū×®]ć "BŃ*HˆäśXĒ  r)Ż–ŪžÜ¬\¹/^ŌDH…VÓ¦MńŪoæżŠ9ä9Ü8Ąßiqx“)Ėuܧw‘0q“‡@”’9Ü*S44°@df:ö¤~ųęõ„ĒĻaé‘sƒ“čXˆ ‘ž˜gĒń7u†č«’LŅ• Ščc† Ó¦MĆß’’ż—ļP8³sēNtīÜ]ŗtį;Īyxx zõźøsē«q§NB™2eP¼xqŽ"#„CßĢѱ ē±nön(kl®åh ®¢i±÷KXT·łņ%&Ož¬© „MżĻ¦Tåüü?*ČrØŃ}åŅ“‘)“Į¢¬;Ņ¢c!”J)O‡‘-’žæ†EY7«XЦ®%ń†Å­ tnĒ ąŲ¬>„R ”Ь„ RsSdŹÓaS£”é…Pi½j!ŗeźŌ©f:®KöģŁųųųš ēJ•*…š5kāÖ­[¬Ę={åŹ•ƒG‘BHĮŠ!RҤ'}Č5­[‰B”0Ī_%ä§OŸbҤIGÄ/ssslŚ“é‡S’óRKjŽ ćo_0`åōyŪ¶d֟ö®YZ:äzN+AÖÆ{G‘ƒLr?NMcēĻ?›|’ЯגRTI$lŚ“ ?’üs‘X PnpŪ¶m‹/^ąćĒł£P(°’~ 2"‘ˆĆč!„š DCŒE”2µĘĖO‘™Ćśm]#ŠPŚŌRaŽ_\”J%ˆ““4-DƟ%K– dɒœ_§„H Ė.ŲA !żź'„KUŖTĮĉ1cĘ ¾CįLll,ŒC‡ń ē¤R)¼½½±iÓ&VK"##qéŅ%4iŅ„Ćč!„śHˆYH QĮĀ‘iIˆOOÓɉ‰P+©ŒĢóśædÉ\¾|™ćČųÕ¼ys 0@+×z­įм`kķeń‰0,Ę®õ2ŠŠÅČV«×$¤°›˜B“€&Ń0©PW“bX5c.¶żµÖ¶6¬Ę—,YŪ·o‡‰I9ך&@"B’'ž_zņä ¦NŹQP…ƒ………VR’³„"ļ•ģR‡Ó“ń(p;ģź×„P,FzBĄ²|i¦Å_Ņ‹70“±Ā»ćēįұd±!µ“@jT4„" m­ś>eÜ`ęž’Lœč"„kb±7nD­Zµž®õa² >5*KZ·ngĻž!...ßc”J%<ˆ”C‡ŅRBH”@„pąšįĆX¼hT*>DFå{œ©©)öżµ ¶9·ć+lŠJź’Ņ„Kįģģœ÷<’Z˜Į¦F%d¦É)@ ĀŲŃį§.Į²|i|ü÷1$¦&ˆ„°©Q ²øx|zAų{«X†¶Åšbēaøvnä—ļXMBr–½`śōé|‡Ā™¢“@"‘ĄĒĒėׯ‡R™’‰ĻØØ(œ?Ķ›7ē0:BÉjPJˆ†={ö }ūöeµN0ŪźÕ«Q”B¢āĘ¢E‹påŹ¾ĆąT‹-ŠÆ_?¾ĆČKsه™›3ĢÜKĀŠĘ ö ~F¦LžÕP(€ÄŌ3ˆ`hmKR0*n ‰™)Ģ\w7 fī…{²ƒ]2iŅ$Ō¬Y“ļ08uųšį"ŃČŹŅ«[·.ėq/^Dxx8B;”@ˆ„¤¤ĄŪŪ‰‰‰¬ĒŽ=½{÷ę *n<~üXƟjY©’7nŌZź6µ¤ęģÖoųķ¾’Ŗž÷s¹’&—Źž”óųī]Ł_€–’~Ń%b±[·nE5 “Éų‡3~~~hÜø1ģķķł…s-[¶Ä³gĻšįƇ|Q*•Ųæ?üüü Ó×oBč7!4lŲ0<|ųõøŗuėbžüłDčĢĢLōė×OļS’W¬XĮKźq‘ÅEÜt „hßO?ż„I“&aŹ”)|‡Ā™øø8 <‡ę;ΉÅbtīÜėÖ­cµ &&gĻžE«V­8ŒŽB¾&ѐ+V`Ū¶m¬ĒŁŁŁaß¾}Juē†oįĀ…øqćßapŖ]»včÓ§/׎ń¢ßšrķ‚č걆nī|‡AH”öĒąČ‘#øuėß”pęȑ#Ų¹s'zōčĮw(œsvvFƒ péŅ%Vć._¾ øøøäylJJŠö BōM¢ׯ_ĒŲ±cY‹ÅŲ³gNµzōč‘^÷¶KKK¬Y³†·ė?KMB„,•·ė³õ,%‰ļ)ō²—TÆ^]ƗdwЄϵ‚jÖ¬žP©T¬Ē®^½*Tą *īĢ;WļS’;vģXØ+W ų–,±€~m¢ʍ‡śõėó§Ž;†­[·ņ†V888 qćĘ¬ĒŻøqĻž=ūfTTósAŚ BHnč›$!,„„„”k×®HLLd=vĈ¼µ–+ذ°0Ģ™3‡ļ08emmµk×ņĘwyŪ»a sy¾Ć „hˆP(Ć `ddÄw(œ5j޽{ĒwZŃøqcÖdU*:¹\®¶’ĖŚB/^¼@ZZšFb$„š „„”C‡āīŻ»¬ĒÕ©S‹-ā "īd§žżÅDßüłēŸ°··ē;Œļņ0-†ąo P)ł…¢!˜>}:ßap*11¾¾¾ʘÓ5B”>>>‹ŁuŁNHHĄńćĒÕöEFF2?gffāńćlj‘Bh€V­ZU tĘāŋcß¾}J„Dŝ9sęąöķŪ|‡Į)///tė֍ļ0ņ”˜!‡‘ˆŻ—ʮބŃÅĮæ:–‚C)ts,®Ž„Ń·D9ŒqƂśVöųÕ±GBņć’ū4hĄwœ:}ś4¶lŁĀwZakk‹¦M›²wūöm<}ś‘‘øø8µ×i!DSh€|ŗqćFŚö‰D"ģŲ±CēśŹßæ|‡Į)›BŸśŸ-M™‰bƒ|+!` įƒ< *—.ƒ‘HŒ=‘ϱé2”3±„‰HĀeŲ„<•„žžžEf)€§§'\\\XQ©T8xš ŅŅŅ„R=ŪėŁ³gzŸGŃš $āāāŠ­[·}ų E‹DÅ…B__ß\Ūé‹Õ«WĆĪĪŽļ0ņTŅČžn•q1.2;Ž×¹<,ÄR”42E‚BŽ*ęÖhlķ IV&JPŌKt“så.pBH¾”+WNļŪ¬&&&bĄ€Eb)€@ @ēĪ!‘°›`MJJBpp°Zś6…B'Ožh*DBHĘ.Ÿ”"H©T¢Gxżś5ė±:tĄŲ±c5Ēf͚…¾Ćą”——~łå¾ĆČ7…J…Ģ|~q~™š„=‘Ļ‘š©€B„„µŌ§c²śqŪH qłcDŅ•Jō¼{†Ė° !łäļļĆ‡ćņåĖ|‡Ā™3gĪ`Ó¦Mšõõå;ĪŁŲŲ E‹f5īĪ;HJJb¶år9 ²²æ>|ˆŹ•+k4NBHŃC„äaņäÉ8uźėq„K—ĘöķŪ!8ˆŠ;÷īŻĆܹsłƒSŗ”śoÓ>aåėŃÄĘ)ßcéČP)”BVŗ¶Ųt2U*¤’—^šš©Štø„ …Ų²e LLLų…ScƌĮŪ·ołC+źÕ«WWWÖć^¾|Éü|żśuęē'Ožč}f!„{4@Čw=zóęĶc=ĪČČ{÷ī………Qq'##¾¾¾ČČČą;NźDź’—LDbÄg侄¬‰%ŗ8ø£™M T6·F-Ėāč`ē k©!:Ū»ĆĮĄ­ŃŠŹ.Ffheė ‘-mįm&–čźX✠U70ĀÄŅÕ¹z{„īīīzæ ))©H-šńńa]ųĖõ’÷īŻCBB€¬ĻčgĻži4FBHŃC„äāłóē读w¾¤¢ZµjDÅ­™3gāĪ;|‡Į©nŻŗĮĒLJļ0X3Kæūßb-Ėā8büdZ >„PŃĢ ­”„ ĪF¦Ødf Ccx˜ZĀ@(B;Ō²,k©!:Ųe¬Ź-Ė )#żœ=PŪR·&NŃ5£F‚§§'ßapźģٳذaßahE±bÅŠ²eĖMKKCJJŠŚŚź@łQ4@Hd2ŗvķŹĢŗ³1|ųpōķŪ—ƒØøu÷ī]̟?Ÿļ08ekk‹åĖ—óFü›‡–¶ĪržµŸ!‡L™‰2$+2šųS<"d)ų OƒX „µŌiJ¬%†0K!Š`g`Œr!ĄćO )3ń.ķSŽē—)3q+į\ŒM¹|›„yŁKLMõū’5µTw]”™™‰7oŽ@&“}÷ø:uź L™2¬Ļ/•Jabb‚Ē3ū?~ …‚–nB ŽŠ’ƒ”C‡čIx­Zµ°xńb"āVzz:śöķ[$R’‹/Īwr$ś5 E"d­ź’Ö±oēb#ņ}N”Ķlœ¬ČĄåQyo"#.ŚPĀ5777Ģž=£Gę;Τ¤¤`Š A8sęŒĪÕŹÉ&‰ P(°hŃ"ˆÅb899ĮŃŃNNNprr‚™™€¬„^^^X¹r%«nB"‘mŚ“Įžżū‘””sssČår<ž\½-Bˆž£ B¾ˆ-[¶°gee…={ö0ÕzuɌ3šļæ’ņ§zōč.]ŗšĘŁł‚ÕńĪF¦9>ŃĻŽ/Wf"ųCž‹q™‰„PؔyHła#FŒĄĮƒqńāE¾Cį̹sē°vķZ 2„ļP ¬T©R2d¶mŪ†Ē«=­·°°€££#įąą€F±.*\¶lYüōÓOxśō)jÖ¬ kMB Š–ņ…›7oĀßߟõ8”Pˆ;wØŚ/ßīŽ½‹… ņ§lmm±lŁ2¾ĆŠ:·Źšq(…Ÿ-‹£«cix˜Z¢o‰rąģzÅģQŪŅBOŽöG½ĄŚJ`*f×ۚĀžP(ÄęĶ›õ~)Ą’ž÷?¼xĮnr³°±±±Į!Cąęꦶ?11=ĀŁ³g±cĒœ:u b1ūgo­ZµRkEüčŃ#dffžhŲ„"Š& sĶ IDATłĻĒŃ­[7VéyŁfĻžV­Zq·är9śōé£÷©’kÖ¬­­-ßah]Ų§x@yÓbŲł}Kxąvb "d)p62…›±”,Š\–5µÄݤXd() €mpssC@@ßap*{)€®w066F’žż™§ō¹)Čś}###T©R)))²ŠźzżBh€dµÜéŁ³'^½zÅzlūöķńĒp÷¦M›†ŠŠP¾ĆąTÆ^½Š¹sg¾Ćą…Ł-ż^¦&”»SģŠ|†š¶PØTˆ”„ QĮ®Ÿt%3+¬z ¹’ž<¢-~~~hŃ¢ßapźüłó ä;Œ&‰ąķķÖ­[S× 33ó‡Š÷•)S111Ģ6u „Õ ĄŌ©SqāÄ Öć\]]±uėV,`tēĪ,Y²„ļ08åąą ³U’5aéĖūßģ{(n`„ņ4Vēū˜!‡9„’¢UėÖ­CåŹ•‘œœĢw8œ7nZ¶l‰Ņ„KóŹkŲ°!lll°wļ^¤§gM“ŠD"\ŗt OŸ>…½½=4hKKKVēurśÜ¦5,, ;v„PHĻņ!ģŠo Rä;v sēĪe=ĪŠŠAAA°²²ā *n•Ō’U«Véäæm`{óÉ* „h««+ęĶ›ĒwœJIIAæ~ż Ō“%Få˗ǐ!CŌnņ===QÆ^=„……aŪ¶mHKc÷{X"‘0k’SRRšęĶĘL)h€io޼Aß¾} ō…cõźÕØ^½:QqoŹ”)zŸ>Ų§Ox{{ó†Žp44A-Ėāø™šļP)’†Š–-[ņ§®^½ŠÕ«Wó†ĘŲŁŁaȐ!pvvföżōÓOčŃ£”J%NŸ>Ķśœ"‘ˆłYߗšBøA¤Č’ÉdčŅ„ āāāX2dś÷ļĻATÜ»~żz‘Hż_ŗt)ßač•hy*:Ż>W©I|‡BH‘”½ »·¼¾?~<ž={Ęwcff†¢jժ̾%JĄ××111jmŁzųš”ĪO$„hM"kųšį a=®V­Z:ŪRN.—Ć××WļŪ­^½šR’5,S„Ā-zśOÆ\\\°`Į¾ĆąTjjŖ^-±X “jՊ©dff†Ž½{ćéÓ§Lu¶’““ńīŻ;M†J)h€Iė֭ƦM›X³²²ĀīŻ»a``ĄATܛ4iĀĀĀųƒSżū÷G§NųƒB81xš`l;ĖĘ?’üƒ?’ü“ļ04J ĄÓÓŻŗuƒD’ULU*•¢C‡?ŌŅ–BŲ¢ RäÜ»w£Gf=N(⯿ž‚››QqļŚµk:›¹_ŽŽŽX¼x1ßaBg6nÜČŗ‚¼®™0a‚^-ČV±bEųśś2K9*UŖ„„„„ļĮƒ“ €Ā M"%>>;wf]yf̘Ö­[s÷d2Ø÷©’6l@±bÅų#߄¹““•j9’S<—xs{„ćä䄳óēó§RSSŃ·o_½üÜrvvʰaĆŌŚśYZZč½&''#<<\“įBōœ˜ļŃ„R‰ž={āÕ«W¬Ē¶k×'Nä *ķ˜8q¢Ž§žūśś¢M›6|‡ĮŠüS* śv’H—Ÿ0Ņå'ķ¤aBśˆ!„+ƒ ĀĮƒqāÄ ¾Cį̵k×°bÅ ųūūóŠĘ™››cąĄŲ»w/=z@½Ā?gĪœŃŁĀĄķ£ Rd̘1Ēg=ĪÅÅ[·n…P؛’»dŅgNNNXøp!ßa°¢T*qęļcPéQ”«/ŠÄ0Ń!\Ų°aƒŽ/Šē l©TŠž={¢iÓ¦?tž—/_źe¦!„ŗyGCK§OŸĘœ9sX344DPP¬­­9ˆŠ{śœB™M `żśõ:•śēϟĒė/ńśßG|‡Ā Cs¾C Dļéāä'[ś¾„M  Y³fčܹs3”J%īßæÆįČ!śŠ&ˆŽ{óę zōčQ /«V­B58ˆJ;ōµˆŅ—Øs©’QQQøxń" ōŅu$ĘÄń‘fYKam`Ģw„ ŗų;­¢PĶFšõõ…‰‰IĘ?~üXĆBōM½&“ÉŠ„KÄĘƲ;hŠ 0€ƒØ“CŪ(}ĶÉÉIēzbgffb’žżĢ„”"=—÷B䳂·*,ĄĮČ ®¦V|‡BH‘¢kP ¢(“±uqqĮ!C`kkĖzlDDBō-Š$zĶĻĻ!!!¬ĒU­ZĖ—/ē "ķHMMEæ~ż ŌÓõå€ī¶Ā:wīŽæƶ/CžŽGN¢˜}q8–q‡™u1ˆ%źæžadd¤ĶPóM$ĀX$…•ž#„Ł-PuyŅ:/r¹¾¾¾øråJSåu••†Š]»v±ŹąKHH@LLL&!E }S#zkūöķŲøq#ėqŊƁ ķĶV~Œ?^ļS’ūķ7“jՊļ0X‰ŒŒÄåĖ—s}=žżÄæ’šĶž  JÕ:\†FŃqżū÷Ē‘#GpčŠ!¾CįĢõė×±dÉŒ;–ļP8e``€>}ś`ēĪL‡€ü E“&M8ŒŒ¢h ŃK÷ļßĒąĮƒY …ų믿ąęęĘATŚqõźU¬^½šļ08åāā¢s…Æ öķŪĒŗ…­­-š7oĪQT„}²jÕ*½_ 0eŹ<|ųļ08' Ń«W/”/_ž»ĒÅĒĒ3?…æBȏ£ ¢wāććѹsg¤„„±;mŚ4.¦”’’R$R’×­[333¾CaåōéÓųšįŪ§ūß# Ń„KH$Ž¢"„čGGG,]ŗ”ļ08%—ĖѧOdddšŠVōźÕ 7†@ PŪÆT*qóęMüõ×_Ģg~TTāāō«Ø,!Dóh€č„R‰^½zįåKö՚7oŽI“&q•öŒ7ϟ?ē; N :-[¶ä; V޾}‹žł‡õø† ĀŁŁ™ƒˆ!śŖoß¾šööę; NݹsK–,į; ­iŃ¢üüü`nž¹½ŖP(„™™RSSńęĶf?eBņBDÆĢš5 ĮĮĮ¬Ē•,Y»vķŅéĀBēϟG`` ßapŹÕÕóęĶć; V222Ä:+ĆÖÖM›6å(*Bˆ>[µj¬¬ō»Ē“iÓŹwZcoo#FĄÕՕŁW¾|yōģŁįįįĢ>š „ä…Š½qöģY̚5‹õ8CCCĮĘʆƒØņ'%%ééé¹¾žœœ …B‘ėėļßæGŸ>} R©øÆPŠÕŌ’“'O²nC) įćć±˜~EBŲsppĄ²eĖŠ§O¾CįŒ\.‡··7V®\łŻß•J„‰‰‰¬Ī-“ɾ»ŒŠÄÄ={öduNM066F’žżqšąAÜ»w@V;Ü/+’GDD !!Aē:äB“‡¾]½šöķ[tė֍u5ųóĻ?Q³fMĘsżśu“mŪ–ŁNKKƒL&Óč5ŠšįƇ£E‹|‡ĮŹ›7opżśuÖć7nŒ%Jp!¤ØčŻ»7:„š gž?Ī[Ż “oß^ė׋Åųå—_ąä䄱ą`ØT*H„Ręu•J…°°0Ō«WOė±Bt- :O.—ĆĒLJõSV ė ’ÆÆÆFćQ©Tš÷÷G||<óŻü’777Ģ;—ļ0XIOOGPPė¬ 4nܘ› !EJQX Ą—Ń£GC.—óvżzõź”{÷ī9‰-JK#!ģŃŃy#FŒĄ­[·X«R„ Ö®]«ńxvīÜY §¾$gB”›7o†©©)ß”°rāÄ Ö՘E"|||tŗ!¤š°··ĒŠ+ųC/½xń‹/ę5† *`Š Aj٬¬Čäädž¢"„v“€č“æžś ėׯg=®X±b8pąŒŒŒ4Ojj*&L˜Ąl „BTżµ„_­O@C‹Ü×ē D"˜šēśŗH*…ŌČä»±ˆ 12Īgä€P$†)»õõ†ę–Ų7“+ā߰ﺐ_~~~hŌØgēēĀĖ—/qóęMÖćš6m {{{""„U={öÄĮƒÄłµĢŠ; Ź/9×Iæ’™$51…Hœ{ĖSC Ką«Vx_301ūęóö{„b1¤&ł’ܓJĀĪ>ķ‘‘– @ļŽ½yķÖāää„”C‡būö툌Œšy@ķŚµy‹‹RxŃŃY<ĄoæżĘzœP(Ď;ąīī®ń˜,X€wļŽ1ŪÕŗ @Ē…ģ'(tI«©‹±Ū—›–Snnn˜3g'ēęŠ\./P꿣£#6lČQT„¢,00—/_ʇ8½NóIóPÅG @æ?p~įTY|Ē‡]»vń“¹¹9 „}ūö!,, @Ö2š „ä„–”€Ī;#55•õŲɓ'«čӔˆˆ,Z“ˆŁ605C“±35~ĀĘ£u'”iŖł"LB”[¶lѹԒąą`$$$°#‹)õŸĀ[[[,_¾œÓk8TŖŽŹ{qzĀ ž°q°v+ĆlļŽ½.\ą/ ’H„Rōčуiūśõk¤¤¤š!¤0¢ ¢sT* €/^°Ū¬Y3L:•ƒØ€?žųCķĆ¶įˆ‰0+īĄÉµ J‘.gRóK–’Ķ>c+˜}^¢Šzęr¼ŗrŠtĶD9r$<==5v>mxžü9BBBXk޼9ģģģ8ˆˆB²tėÖ AAAŲæ?'ēo=cBīŸ+©T*Ȓņ?É*ON‚ŠE‡ œ>'mJ{@jœµģN,5@‹É Ō2ßüüüpļŽ=Ž[· 4kÖ ¶¶¶ BXX~žłg^c"„>4@tΜ9spšąAÖćJ–,‰Ż»wsņ”5$$;wīd¶‹•tCA£™ķūū·įĘƜ 1)33!’””빕 Ņ?å^Ģ'3#驌åw­Ūżö_`¶­ŻŹ Ö€ųgܱ͢ąīīŽY³fiä\Ś"“ÉpąĄÖ©’ĪĪĪØ_æ>GQBČgøté’Ę—Tōź—ŚŸ—0›0 Ļ/žĢõxEZņÜ»ćČ?%AY€¶¾\©ÕßmgÆd¶³3ߞ;xųš!Ö¬Y???¾BTS¹reXZZāęĶ›4@łMréŅ%LŸ>õ8ģßæ666I„RaōčŃP*•̾“@l`%'āŌĢ’!%.Fć×ęĖėkzd*vģŹģkä?’܉äčČ:·®¦ž=z‰‰‰¬ĘH$ųųų@؅§f„bccƒ•+W¢k×®yœObC4Ÿš¹M뻐køµ} Ąr2“0»½} jōś v•˜}_g¾M:]»v…­­-_aŖ)Y²$,,, R© Č£x"!¤h”oDgØT*ųłł!³O–/_ĪŁ,ų®]»påŹfŪ¹f=”oۅپ°hš^Żüg;=k¬Zꁁ©šOœūłćļļÆsÅš?~Œ»wļ²ײeKN&„!$7æžś+~łåÆŽ’ĮŅŁ@ÖēōŃqƒõęę?ūĘY©PąųäjÆeg¾e‹Ēäɓµ_^,,,čęŸņ ²²D’ż) P Ą‰ģƒ–.]ŠŃ£GēxB“厽{ØV­ėq}ūöŖ-[4€““4”/_o޼ÕöoŠŃp¬Ršńõs¬lč•’ż¤EķŚµŃ«W/H„Rœ;w{öģĮ€päČÄĘĘČ*7jŌ(ģŻ»W­ńĒ±pįB̘1ƒFJJ œœœŠØQ#”)S*T`ŽMIIA’žżó—H$b&a{•JĢ;Wćkń óóÕĄ…ˆ{ł”ŁĪĪ|~ŃahÜøq¬‹ĀBˆ¶ŠŃnnnhÖ¬Y¾Ž0a¼½½ó>°€īܹƒ;v0ŪŽĪjm’BžZÆ_ųüQQQ(Q¢³Żæ“mŪö»c®]»†łóēcžüłŲ·oŸŚ¹nÜøńĆ©ž_ū2#ćų”QL%d0²“Bćß§ēė<ŗšśųša|śō‰Õ©T oooJ %„ ÖÖÖX»v-ėq:ü —:žĢvšäČĢųž ū÷¼}ūVmĀ~Ė–-°³³ūī˜S§NaŻŗuX·nBBB˜ż×®]C±bÅP®\¹Ē“6™oŃŃј={6!¤0¢łtģŲ1ģŚµ ÷ļßGjj*ßįzØWÆ €źÕ«k켁ØU«r=¦M›6˜9s¦Ę®™“ÆŪžµœŗ#cYEĪŒ’”óĒÄÄ 66›6mB||<Ź–-‹nŻŗ”M›6ųć?””Xæ~=3¦I“&˜7o€¬žōGe^[¹r%®\¹‚sēĪżP\_R(LAĄÆŸćʆåØ?lózĶ>Cqgē¼»’ŻóŒ;VēR’ļßæŠŠPÖ挵k+++""„‚éŲ±#ŗwļŽ]»våėx±!ZLšĻl‡ß¹ŽĒ'ŲgC}éüłóčÕ«6mŚ‘H„˜˜DGGĆĀĀBm‚āˉ÷”C‡2ćaaaj™iS§NŽ{÷pėÖ­ŠėK9e¾•iśyb¾ł„¹xt,©ńq²ŗłśśĀĆĆCc1h[FF>|ų¹\ž÷ĮE˜Š/ĪLRŲQ€<|ųšŻŗuĆłóēłE'  4+V¬€FĪłļæ’¢Gß܀  8+W®ŌŲµr²{÷ntļŽŁv®Q.ųsbŚh\ßP° Ć_“J„077gŖž«½·ääd@&“ĮÜܜٯR©œœ ‰D™LĢöģ„Ł‘5Ejb æKanļÄģ{{ó 6uö̵%”‡‡ī޽ CCCÅĮµääd,_¾\m‰F~”*U żū÷§§’„B'..+VÄū÷ļó<¶įȉh6~€¬Ļš5-Ŗ"śūZ(9‰Dj)÷…‰X,fb³r-aēC!–~žL¾¹łOŃ.°yóę8}ś“ÖćüQ/^ÄĀ… qöģYę;ł>###“lŁćĒGŻŗuł‡č ®ŗŠ€ļHHH€§§'Żü’•J…uėÖį×_U{bž#*UŖ„{÷ī!88ćĒĒąĮƒ±`Į>žłG”P %%™™™jū™™©öĮ––¦vÓŖ©›©TškŹ'œ ųCķµ’µصLś’X,ĘÖ­[uźęČźžĄöęßŠŠŖžB -kkk¬[·.ĻćLmķŠ`Ųē ·ƒvhģęČź2SXožĻ™o˜Ģ·/Õģ3ö?Ua¶Ļœ9£Ö© °S*•3f 7nŒcĒŽŃĶ? iii8|ų0ź×Ə‰'B•ĖƒB ZšcƌłrÖąXĪÖĪß_—VŌ©”*D<~ųČfߑ#G°fĶ 6L#׉DhÓ¦ Ś“i£‘óå×¢E‹šśõkf»ŠO8Uż\œšųŌ‘Lū;CCC”+WNļoś˜æ“žBƒŌֆ¶œ²OĻEzŠś„ĆŲ±cu®Ž;w ŌŽ²}ūö°°°ą "Bь: WÆ^jiö_köG€ZŪæS³?/ūrppŠét÷üzõźó™wqŁ,TźÜ“É|ŠDh;ēOµĢ·‘#G¢E‹066ę+ä|›4i–.]Źw:M„Raīܹ022Ā”)Sų‡Ń€\„‡‡ĆÕՕiCchj ’½óP­M=ž#Ó *„ĮĖwcŪļK™YŠ%JąķŪ·:{C²eĖ2ėļ%FĘš»ōŽĪ€××.`‹Oęųżū÷£eĖ–¼ÄŖmķŪ·Ē„K—dC|K­"ņå8;³mnnŽčččBńō?###_ėö’’’°bÅ ÖO’=<<Š»wG!Z“€J•*!<<ü›×ģ+TÅą!Lå’ ‹§ćĀ’¬ī-&&&ø{÷n; č’““4Ō¬YļŽ½TīܝWŖOšģÖ”‡w3Ū3gĪ,ō7ƒ<@µjÕŌ²5Żk”G•–u`l”¹¶Šś(%!w’ƒ7÷?w‡‹Å Õx1JR“pµ€2r¬Öƒ¶ē}Š7oŽäyÜ­[·šōéÓ<ūš———ZqFB)ģŚ·oŸžYmßOķ|ŌnpĻüōŌ€‹‹ †®ÕłÖ¹sgxzž·ŌM„‰i£™å@Öw„†~Ÿė„„„aÜøq_Ÿ¦P9{ö,ó³­«#ŗųŃĶ? ”}—ųĆŅŽšŁ÷åß)!… Mä"%%EmŪȬšÆŻ*ŒŒĢMŌ¶5Yu^›¾iū7e”ZŪæ ‹¦1Æłśśā§Ÿ~ŅzŒ|›4illli qž‹æ(Ū¼½Zˤ°°0¬^½Z«1~-44‘‘‘ß=&!!Ēg}īņåĖ£råŹ Bx/^0Ū"‰Ķ'~žŌŽ|‚īd¶gΜY(–siŪ¢E‹˜åcļŽĆėÕ^Æ7ō°v/ĖlļŪ·§NŅjŒl|łYXŗVEt‹Ą–X*A©Ÿ+0Ū9-„!¤0 ’» ÉĆŽ½{™õķ@VŪæ _T¶æ¼b’?DČJŸüć?¾9GQ`ii‰©S§2Ū!;ÖāżĆ{jĒ“™µ\­eŅŌ©SóÕvŠ …ß‚ņŻ IDATOž|ČüœÓ2€ųųxœOˆ÷čŃCg‹śjŠ™™™Ś$öķky’¶Ś1­g.SĖ|›>}:>|ų µ !äk4@H.Žæ€€f[jl‚f|Ž~{ė*Ā‚0Ū¹¶““Ėå8yņ$0nÜ8L›6 «WÆĘżū÷¹{<©V­ŗuėĘlŸœł;äɟ»'HMLŃbņf[©Tbäȑj™\ĖĢĢÄ£G˜ķÆ'T*‚‚‚X§ļ™˜˜ }ūö‰‘B“éųńć8q‚é ū UQµkfūŸĄ…HĻ*šjbbņݶvQQQŲ“iüżżįēē‡1cĘ`Ŋ ćī š¤wļŽLę›J©Äń©£Ō>Ļ¬ŻŹ ĪožĢvBB&MšōĶy!D[h€\Lž<ÉÉÉĢvżać`īP@ևü‰i£’>ä7nŒV­Zåxž÷ļߣ^½zųå—_°wļ^ÜøqgΜĮܹsѰaC 0@­Ą >˜9s&SżžÓ‡÷øü§zW„Šŗ£d­Ģö7Ōŗ,pķŋj-ż¢¢¢Ō^’ēŸ¾é’^^^011Éū@B)D ~’żwµ}­g,…P$ÕöļźźĻ·cƌƒƒCŽēŗxń"ŖV­Š & ,, ļŽ½Chh(-Z„:uźØM¬ėƒÆ3ßŽŻžG­H"xŽœ3;Gf{Ó¦Mø}[=S€B“…&ÉĮ½{÷°eĖfŪÜ”ź łßē×÷naŅüÄb1ęĶ›—ė¹.\ˆˆˆ\ŗt ÷īŻĆŋqõźU¼xńcƌĮžżūĢŁ{įCńāÅՊ!^[»qÆ>Æ„h3kóåČŖŸ””mų2ż¢££”P(±±±8}ś4ėsVÆ^*TČū@B)dÖ®]«–U¾7\ė6f¶Ļ͛ēżsvv†ŸŸ_®ēš0aÜŻŻńōéSœqžZŪæ³ó?§ļõė×ļ»m’BBBФIT­ZUmæT*Å’ž—5©šąĮµ×d2.\ø€-[¶`óęĶ8qāæ9wrr2Μ9ƒ;wbóęĶ8zōč77ŃĒŽĆćĒæŹÜčfffāąĮƒˆŒŒÄóēĻń×_©õÆżųń#Ž9‚Ķ›7cūöķøråJžéńƒF¹rå²ĪŸ‘Ž“ÓüÕ^wØX Õ»®™…ٳg÷œš T*Õ¾čfļ{’ž=T*8ĄŗJ³¹¹9ڶm›÷„RČ$$$`śōé̶H"Eó/nV#ļßĘż ķĢöĢ™3add”ć¹222†_żjÆĀ××*•ꛄQQQŲ½{7–.]Š?’ü’ż·Z^¶ēϟcĻž=X¹r%–.]Š#GŽØ—””„Ķ›7ēŲ~ķųńćøpာ̼͛7ćÓ§O8{ö,V¬X”V‹ęįÇذa–.]Š5kÖąŅ„Kjß r2cĘ &ó-9:—WĢQ{½Rēžp©ŻŁ¾vķvģŲńŻsBÄ|@HasčŠ!œ9s†ŁvØT•:}žŁæ²j>}ČŖoaa‘ēZ>±X ™L–ćk¦¦¦ųūļæįčų95šŃ£GčŅ„ ĀĆĆacc‰D‚ččhcŻŗuĢók×®”k×®ųō鬬¬```€÷ļßC"‘`ćʍh×®`Ų°a:tč7ķ ÷ģŁƒ#GŽąžżūHOOGß¾}Ńøqc\¼xb±:uB³fͰwļ^Œ1ééé°³³ƒ\.G\\ÜŻŻqčŠ!øŗŗęųŽ$ ęϟϓˆzzöžž=†²ĶŚ1Ē4›€°cū‘X¾|9|}}™‰.¼~ż)))ßģŒŒÄĖ—/ńęĶÖēōööĪõ 1!„f3gĪDlģēöuµŒ€µ[’µż›īĻ“ż«S§:wīœė¹D"$IŽ7ļšóĻ?ćŅ„KpqqaöķŁ³#FŒ€@ €‹‹ ŅÓÓńīŻ;XZZ"((ˆ™<_µj&NœKKK¦ņž‹/`nnŽC‡”J•*ˆ‰‰ĮØQ£pąĄ”(QBķŚ+W®„½½=7nŒēϟcŌØQŲ±cnŻŗ;;;”V­Z=z46mŚ+++899!..QQQØV­Ž9ĀÜä-;ó-»sŠõõĖP­»/ów)Šzęr¬oū3”’M&Œ;^^^¹ž“Bø@D«6lŲPØÓŻ•J%N:„¶ĻŠĢū‡fµĖHKųóŸ‹$?>϶­[·ĘģŁ³€¦M›¢dɒ(^¼8Ä⬒ż5j¤vüčŃ£aii‰sēĪĮŽŽ‡~żśaŌØQhÕŖ$ F WWWĮÖ֐˜˜ˆŽ½{cōčŃhŻŗ5D_¤ŲēĒżū÷qąĄxzzB"‘ąćĒ9r$ŗté‚Å‹37¹”””šööĘ“iÓ°uėÖ\ĻדiS“oßGœœęRž- ’HF–Vhä?ǧސÕ3wĈßü;Ф/Ó’•J%³nóÕ«W*PU³fM”-[VcńBˆ¶¼xńB­-‘„Žü\é?ģŲ~¦ķŸ@ Ą¼yó¾ŪöO(¢}ūöX³f LLLP£F 8::ĀŁŁFFF022RˆKNN†ææ?|||°lŁ2H„YŸ įįį芔&OžŒ£G"&&S§NE’žż±xńbę³-::­[·Ę“iÓpčŠ!Öļ_©T",,Œ™,8ž<6mŚ„ĄĄ@ōģŁ“9īņåĖšņņĀŗuė˜Ģ½œ <[¶lĮÓ§O”H—c[×ę0²(yŹē ‰‘1³< ::...°²²b»¦é[-"BHīh€hÕÕ«WłµW’œĻq曛 ”ēų#FąŻ»wX¾|9S+@$ĮĪĪ„K—†··7śöķ ±XŒääd\æ~kÖ¬anžĄŚŚžžžčŌ©ž={†%JąŃ£GX³f sóde$ųśś¢wļŽˆŒŒ„³³3«÷:tčP4kÖŒŁžēŸššŠ)S¦Ø=į®X±"ŗvķŠ={öäyĪ€€œ9s2™ qÆžįśśeØ?lóśĻż†ćĪ®ˆ~”µ āōéÓ8zō('ÕōæN=½wļÓĘźńćĒL€ü277G›6m4#!„hĖļæ’¹\Īl77 F–Y7£™é80y­k×®łjū·xńb,\ø©©©ĢžbŊ”|łņčׯÓ)ęöķŪųōéʎĖÜü@‰%гgO,X°*• <@FFFŒ”6±mgg‡_żūöķ+ŠūŸ6mšZ¦Ą… ąāā¢vó 6D½zõņlY+‘H°pįBxyy#Ž"1āūõP ų !¤ h€hUķr%PÅĶŽļ0 $:!‡Æ^KƒļŒČb``€åĖ—cŃ¢EGTT"""‰ėׯc̘1xųš!–,Y‚ŲŲXØT*<|ų›7oV;Ov„ś„„ę ““Ó7×óņņ*p1½Æ' bbb ‹ÕZCe{÷īāććó<§««+FŒ… .-ŸŹ’gļ¬Ć¢ŹŽ8ž™éN °°±ŃÅĄ5°»ŪµqķĄ»cW]uķŽµ»l,LTn˜~Œ^AE@Żõw?ĻĆ#ēŽsß{ęŖsĻyĻū~ßęEd©LF}ß¹üŻ*Ćń0xš`<==³õ|æ†gĻž Ļ&99™‹/ ŚÆ-ł'‘HhÖ¬:::y:F‘ļĮ‰'Ų½{·Š¶p.NŁöNķóĪ!ņé#tuu?~|¶ģššš²råJ”J%aaa¼zõŠWÆ^ńģŁ3:DÆ^½ˆ„WÆ^DDØŅæ¶oߞ)b-((ˆäädRRRxżZ•v÷aŗÜ{FÅØQ£2ĻW2xŸ 1wīÜL}£¢¢²„ćįįAƆ Ł·ofzLjģß-»ÕgÉ^Q”PDä’Ń ņ]éÓ <]ź”łrĒéééT±RhWÆ^]ȱĻ.ššš,X‚ Ē D’žżY»v-~~~BnśĮƒŃÓÓĖd£L™2jł•ß:o0!!ōōōLΈ÷øøøØ…Ń 6mŚÄóēĻI‰ćØß(¼ēg¤¬Z—†Ķ¹³o;  K7o#FŒČ»ƒ*uį=>$**Ф¤¤åļW¬Xggē¼žˆˆˆČwA©Tf eÆ7a2 MކqfQFu›ĮƒgŹ©Ļ …BA\\zzzhiiammµµ5nnn€*D¾f͚¬Y³†^½z ļ¼Ó§OgiĻĆĆ…BABB2™ģ›k­$&&+ˆ~ˆ¹¹9NNNٲćļļϱcĒT‘oq‰$¤¤2¼YÕ<mŽŅwÉ^Ä忈Ȓ¢@D$¬?q“swŸŖĒ©S§~አœiŲ°!óęĶĖņ|™2eX»v-‚žĄ‚ ØR„Ź'm¾ŖĖJh),,Œõė×Óŗuė,wKŽ“•ŽĒ˜šš¢””Į©S§¾Ų÷sčźźāėėK·nŻھ–²ķzØ)"כ8—ǐ–¤ 2e ;vüģgų>’æwļR©ō«u@ŹZÆ^½/öKMME*• z""""’V­ZÅÕ«W…v”jupņØ/“ĻKrœŖņŒ­­-ƒ Ź–ŻWÆ^įāāĀ¢E‹čŌ©S¦ó‰„āŋ lsss¶lŁņو/  ‰‰‰™œćW®\aĻž=L˜0į³c‹‹‹SK­Ė 333Š/®‘ (ĄoæżĘ¬Y³˜¼éķk•ĀÖŌ WvEDDDņ‚w<’ˆČ怤Ō4ʬĶ(‰×”C‡L%ż>GįĀ…¹vķŚ'vnß¾¶¶6fffXXX „„„¶Sżž³gĻbhhȝ;w°²²BCCCm÷ž‹/2aĀ!ÆÓŌŌ”7oŽØõIOOĻņŚ±³³#%%…ū÷ļg:ēē燳³s¶C[“hAµjÕŽ€ƒ ŹŅF¶Tķ;\hĒĒĒgŖ\^¾|)äY¦¦¦ņųńcŖU«¦–wš$ Ķ›7Ļ4YMIIįéÓ§œ;wŽmŪ¶±`ĮĪž=›#ƒˆˆˆČ·">>žqćĘ mUV†ƒ:üž®oΈśš0aB–iYakk‹žžēϟĻņ¼\.ēʍB4Įū?3õ3g( !=ķĀ… ™śķܹ“µk×"•JMœēϟ«õ‰ˆˆąĮƒ_惃wīÜQÓExOćʍ3i|ŽįƇ Ÿ/.)…ŃkŽ}į ‘ļƒø-%"ņfī8dzpÕNˆ¾¾>cĒŽżŖė;wīLļŽ½ńööĘŪŪkkktttˆŒŒ$ €5kÖŠ©S'!—ÜŪŪ›éÓ§#“ÉpqqĮČČˆŠŠP¦NŠƒƒŋG"‘аaCęϟ±±1ŋGGG‡Ēćėė‹‹‹‹jPµjU6lŲ€““īī¦²~żznÜø££ćgĒ^¹reģķķéÕ«ƒ ¢`Į‚H„RīŽ½Ė²eĖšņņś¬"ōĒL›6š5k¢P(xuó×7Æ¢lŪīĀłŖżGøõo¢Ÿ?`ŻŗuōģŁ“źÕ«ĀböłPż’Ń£G˜™™}6ŹāSø»»cnnĪżū÷ ~>ŌCŠŌŌ¤eĖ–øŗŗęzÜ""""y‰æææ )P®Co,‹•Ś'AłNµT©R“nŻ:Ū¶„R)=zō`Į‚ÄĘĘR½zu¬¬¬J„¼zõŠ;vpūöm–/_.Ų/Y²$}śōį·ß~£P”Bhjjr’ž}.\HŻŗu‘Édø¹¹Q¤H† "TĄø~ż:Ė—/§C‡€*-®lٲLš4‰““4Š+Fdd$ ,Č–Č«··7~~~“iӆ֭[“?~’““9}ś4'OždńāÅŁ~ļ#ßŗwW½ćÖ¤GݲTsłü{WDDDä[#:DD>Chd3¶gT.6lŲC?¦mŪ¶¤§§³dÉFŒARR’pĪĪĪ~’=CΜ9Œ5 ___aĒZ"‘P£F ęϟ/,øēϟ£GĀł„R)īīī,X°@°÷ŽĪøqćĖåČd2š4iBß¾}‘¢O”­­ĶöķŪłż÷ßéÓ§0v]]]a¢ō5”*UŠ.]ŗš×_plŚh\6GĒŠM]<ĒLgkՄ3==AƒqåŹ•/ź |‰÷ļß§Q£F_mó}tƹsē>ŁĒŠŠ:d)Š("""ņ#yńā…Z:šŽ”1>¾B;ųȝĢ(Ć:}śōÆžžōõõÅĪĪŽ 60mŚ4"##Õ{£téҬ^½šf͚ŖwŪÖ­[;v,'N$&Fål755„iÓ¦ųśŖĘ&“ÉŲ¶m#GŽdŹ”)„‡‡Ŗt¬¶mŪ2eŹįž+W®ÄĒLJ±cĒ’œœŒ„„%żū÷ĒŽŽ}}}444066Ī”åččČĪ;™>>j¢­uĒĶBCKµˆNЉāԼɹ~żśQØP”ļ>Ο• &`jj @XL“7üĮ#łFt|c¢^½etå.$Å&`ļRŌ¤df5ó!čJ!7`å?üõŪ Œ,M1w“ęŁĶ‡Œ,ߑ”DŃ;ü#Łqī.'o=T9ŠS§NżźE£Č§‘ÉdĢž=[x¦ĻćŽĮ]j}<~ŸŒž©¹Š^“h7oŖG d‡°°0ĀĀĀUķėÆŻ”W*•¬[·ŽP«V-a”Æ””AóęĶ©[·®ųļCDDä_Ėʍ9{6CϦ€{MŠ7šŚ'fO$1*P•ęóńńłīcü™111Q«j³`ĻEn= ū*³wžĆmŠøō[L„aĖ“ģ‰)*gōŪŲD:ĻŻ‰KæÅøō[ŒĒčÕ¬ ø‘§Ÿ!»$Ē'²eŸL­?’†ƒXŽĒ‡—2œšOo<`i÷ILöģĒģęæ³yÜRā#cČXEDž_Eæ1Įgƒ(įQž¦#»Ēņ™xč<„ė¹smߌNķGنՄó/ī„šäz0E«–V³•š”¹͇‰xF>SC*5«”… g6¤FG/.n?މ­9EÜK‘Ē“רФ&/ļ†pmßä©i8”p¢ÜÆŖūßz#KSī_ø‰÷Ø®¼yō‚›Ē.Ua{*7ƍLóūž3¹ū<œĖš,<M™Œ|ŗZ iR™ÖÕU;Ę«2g×y”Źt$ČoiĢ‚^ (dm’'÷O•+ł÷Q”ݼys*W®œ'¶E2pww§iÓ¦ģܹ€C“†įäQ mUų§®‘ Ć'±oT?@µ ?dČŽ=śI›YńįīNRΟ?Ļ«WÆšōōTKŠ××§}ūöäϟ’«mŠˆˆˆ|/’’’ŌŅ®$R)uĒĶŚosåļ„B{ģŲ±b*Ó7 gĻž¬Y³†[·n!W(²ā G&wŹÖµēī>gå‘ėųwĮŅHŸųäTŗĪŪÅ®0“©;¾O`nØGŠ‚>hjČø’2‚Z£WS³d~Ģ¾ń'SgżČE¤%§Šmįp4µµxtå3š ežżhéhįļ5ˆĪs†PĽ©I)Xø‰Ug2`Żä/ÉÄ€oĢū]żw“–’ @ĶĪæŅyĪPįüĶc—ˆ BóFü3'ÓāąÆß¦óņn…ŹCCK“)uū#•IŁéæŠŲš(r›Ę-eūä€J€ļśž³DæŽ`¦·¦öV8”pā¶£ģ_° „2…ĒsäĻ˜Ł[Ŕzæ!O•cUŲž«{N±zȜLćųÖų¬ĻŌ©S…śŅQOsīYjē˵KĘ’…cĒŽ ƒģņ”ąkyūö-—/_¦E‹j‹ssszõź%.žEDDžõĢž=›§OŸ ķ2-;c[ŗ¼Š><É…\µ“\¬X1:uŹŽ¢TäėÉdųūū ķ£łēbšg®ČąYx īŰ4RU1ȧ£ÅˆęÕ(`i,œ÷*†ŖŖA;3&wš 5M‘ĒŸāĖ<æõĻ>ͱqvÄÜњJĶjS«K#āŽF…–®6ī­<1s°Ā¦ˆ#Ž£»a`nœ„­Óė0½Ńü½²zšlāŽFsćČEĪlPé”?æż˜¹­Fńü G—ķąžł$DŲjąL&{öc¦·§×«"ų®8ĒžŁėXŲal"1&žc–ØīŃp‡oł>IDä#F|cœ*ŗņėŠö¬6š§ÆP¤É1s°¢Ćō®ąB«I}Ų滌9-G…T&„h•Ņt[8m}uńšŖmźQ¼†šÄEİkŚj’ć)įQž{g±,hG±Ŗ„yzćéééÜ=uWņHeRś’ķ‹s„¤&„’Ä£Š5ŠcІ)H¤RNž½—jmėQ’·V”o\ƒa%Zæü±¾)Æ£ā©īš±°*jgŽ_§:¤ÉDÄ&aof(x“% ė”^й%<&©›O ķąąą'¶E2cooĻ Aƒ„IŃé~”jŽc{ÕßæT&ĆĖo1+½«Ć;ٰaĆhŠ A¶„¢"##Õź] J„’cĒŽŃ¶m[¬¬¬„ćĪĪĪ“iÓ&Ū¢V""""?Š7oŽ0sęL”­„ŸŚ#2Jꅜ=Īż£{…¶ææ®EļD>M͚5iҤ »wļ`ȊƒŌu+ŒŽÖēŸłūŸ•‡)lm‚ƒ….”w¶ EU†¬8D«j®8Zį`nH‹*.é’÷TńeŁ6i5:zafo‰¹£5ķüUb“éJ%2M ¶MZN”rÅ1s°Ā"æ ]ę ĖdēĶ£ü3s-£öĶC[O‡ļ埙kØŅ¦{f­„Z»śÜf̚c4ÆźĀų65éčQš²…møü’'aќŗõ”.óv±sLʶłNŸLE«‰½ø“ó/ß꼞S¼yü’äøDFX€‰­OüÉł-G :|Ča<æżWņō\:Ч7 H“£k؏eA;Ę\Č«ūO‘§Ź‰yIdč[ ”v&4ų) ¹‚ūēoŅpp;AłĘ5IŒ‰Ē"æ m¦ō%āEÆŽ#59yŖœč×ŖČĪź¼(ā^ €Ū'®ŅuĮp¢^½ h•R<ŗ|Gtˆüōˆ€oĢŁM‡xpń=—ŽŽÆįFŲÕ®äœV#i6ŗ+Åk”@¦©AŃ*„¹sņ*}VŒ£Ń°¤„¤rjķ~‡ü#,Ų‡ø“Ą„fYž™¹†ųˆ’ŽyjA‡/ OMĆŲŚŒ=³×Q¦~šŒP•” :|³e«žq>jtlH³1Ż•jšū0«ļÉĄF•hXŽ™k^ń2"ŽĆ×ńŪū92¹EģĢ85­+ƒ_ņšU$/ŽĘņĻÅ`&m:ÉŃ)¹ [¼ū<œå‡® ķ &```+›WÆ^„Aƒ˜ššāé鉩©)‰‰‰„„„0zōhV­ZE@@€°iÓ&žśė/Ž9’«{’WŠÕÕeŹ”)BŲéĶ])×”7Ük }źŽ›Éż#{HMTÕÓõóó£cĒŽ_ ĮæuėVŽĘƒ«««°&•JńņņĀŻŻ=GöDDDD¾7üż÷ßBŪŠĘ÷^C…öõńę®J(NCCƒI“r_÷}éŅ„Œ1‚J•*ѬY3ōõõ‰%00<ȶmŪŌ®ńńń!22’•+Węśž’ģķķ„R)“=ĒLGSWålN‰#`öį\÷īŻ)^<÷ Ÿ¹sēāååŦM›2›Ÿ.5ü""–凮RŻ5?Ņwg"⒐½ŪŚ{é>ééŠéƒhČĻOvM[¶žŽ°± ©­EJB©I),éźĖĀG»……øD*ACKƒä„doņ®Ł;g=Ż aļ£ \=ŹsnóŒmĢ…łqŠ”óøzØ“-]`~švĮixš|–c5¶6£Į€Ö˜;Z«ī±÷4ņŌ“,ūŠˆüLˆ€oŒ‰9~—ÖpnóaŠLCƒ MkQŃ»ŻcSđŪWxvó!śĘō[9ēŹ%ÕģH$†ļšĶŁM‡ypį&łK9ÓóQ(*—¦#»…D*ű¤UZׄR3•÷µJ›ŗ¤&„pe÷It õi>¶;ƾ@*•P·o įfV ß5› [ņšŅmĢó[Ó÷ÆńßēA}ĄĮk)YĄŠ_+Ž= ‹¦b;dR ¾OмJq!·-&!™˜„d“5eŸ2łE\}ĄĮ«…ö”)SÉrnļ=>¤J•*YFxyy!‘HxōčĒēäɓ\½z•““4&LPMĪ<==©V­3fĢ jÕŖ„……qģŲ1Œ™2E•ĖyéŅ%öīŻĖ‹/ŠŠŠĄĮĮĘSŗ“zjÄŁ³gٳgįįįčźźbkkK½zõ(W®ÉÉÉųūūÓŖU+nŻŗE@@J„’5jŠ®];BCCY±b!!!˜™™Ń¢E ŖT©’ėē0mŚ4ŖV­JZZa÷nqmć Źwģ#œÆŚļwnl[KDČ@)ѧOjÖ¬™„½“'OŖÕ¼Ī.†÷›ššŅ©S',,,¾ŚŽˆˆˆČbēĪjSģŻ*Q¢i[”}zĮTāĆ^`ll¬V¢.§$%%ńśõėO~'ׯ_ŸåĖ—óņåK\\\Xŗt)÷īŻćśõ뤤¤0hŠ @„½cjjŠÆÆ/Żŗućȑ#\ŗt‰š5kŅæär9[¶lįĉ„……”ÆÆ““ķŚµSsŌ&'' ż"##177ĒŽŽžV­Z ˆąą`–,YĀŠ”CY·nčźźāķķ··7'Ožd͚5¼}ū–üłóÓ½{÷Lļ՜ ««Ė¤I“čŅ„ OݤwżņŌ(‘uT[£ŠEŲtźÅś,¢˜½9©r÷^¼eZē_ß¶&-§måW°6ÉGhdÉ©rvm“ė±~-MFtaQ§ øŌ*‡‘„)Ļ_s’üMĘ^Œ‰­eVcT…Ž«V™†ÆŽÅ<æ ö.Õģ8W*Į²ŽSIŒŽ‰„‡/`ę Ņć)įQžqÕŗÓäwUä`įņ.[±‹9CŪŖPžÅ'ąXJ•.šāniÉ)™ĘŚ``fzū!’—v0|ē¬LżDD~6$؜²wjZ€ Ä~Ļ;7Or”’K 8…  ķÕŃ'Š3ś’ĪÕĪ ·Ž_fR¾B{Õą¦t©Sę³×\yJ—y»J%˜čņām,ÅģĶŁ0¼9ŗŚĢŻ}žŁ;Ļć`nˆT*!4"Ž~ +0¼YՍQ®PRzĄRī< aƆŸŻYž5jD||<_ģ»~żz¶lŁĀ³gĻ &Q;w¦Y³f899”„„EDD„J•¢R„JL™2…%K–0räHJ–,I‘"EP(Üøqƒ'Ož°téRڶUMś.\Ș1cØ]»6łóēG”PpļŽ=._¾Ģ¦M›hŠ ±±±ŲŪŪćąą€žž%K–äٳg\ŗt‰f͚qźŌ)J–,‰‰‰ ×®]ćéÓ§ģŁ³‡5jäÉó>|8žł'z¦ę 8Œ®qF$ČŻ;ŁÜ£™Š.S¦ W®\ÉŅYćėėKjjjŽĒ’?~Ś·oƦ """ņo'55WWW>|ēŌ–Hč¾ė åUĪŚčēOXT³8ņ•Žææ?żū÷Ļõ}ÓÓÓqtt¤Y³f̟?’‹ż'L˜@`` ·nŻ"-- 77Uųö”)S066ĘÕÕ 455©P” 4 ]»v“nݚćĒS«V- (@ll,gΜįĶ›7ģßæŸŠ+вeKĪ;‡··7fff¤¤¤pžüyīŽ½ĖŁ³gqvv& €&Mš`kkK‰%°³³ćʍ\½z•-Z@Żŗu‘ÉdÉÕ«W±··ĻõóÕ|ćōéÓø²įņܞŸŻµNHęeD,2)…¬LÕez:Æ£ā IĄÜP;³Æ‹ˆ”5öEłĪi^½ƒÖę<%$!*–g7…±µ…+ø ©”żšęŃ BƒŸ"O“cķ䀃k”,ķ¼~ųœ§AŠÖ×Į©b Ž<~Aįņ.¤§§sėŲeK:adeJċ0^?|Žk-Õf†<5{g‰ŒÅŚÉ|ŗčč#OMC©PØé[E¼ćŁ;ńlēJ%>Y‘ »Ģi9‚ ŪT•©ōōōHHHȕ=‘’oŠ+Fp°P-$ā€X ˆz÷łĮļ1ļś$‰ļ®KŅ9 #Džu”w¶åÖā~$$§ņ66 #}ō“5…óCšø3¤‰;a1 (J,Œōѐå<ĢmŁ”«Āā_KKKŲUĻ :tč@Ļž=iŌØµjÕĀŽŽ{{{lmm±··GS3ćsµoߞöķŪ3ž|üüü•ąIMMåāŋ(P€ÄÄD&MšD’žżÕŹ „„„Ńŗuk¦N*8žüóOŚ·oĻŅ„KÕl6iŅ„;vŠ AFŖG©R„Ų°a’w”†ƒ bÕŖU,[¶Œ6mT; III”+WŽ-[¶ä™ cĒŽ‚ 1ņ-Žķ§TóĀyē:^č‘@PP>Ģž’«Å¹råhҤIžDˆˆˆˆ|O-Z”±ųJ4j%,žŽL!,ž .LĻž=ó侉„®]»2ž|ž?N… °µµŽw… B[[[č’¾Än§Nxūö­Ś;ļłóēøŗŗ²yóftuUU‘.\øĄŲ¼y³Ś;+))‰Ź•+³pįBÖ®]Ė«WÆ8tč‹/¦cĒŽBæ““4\]]9vģĪĪĪĀńN„RI½zõŲµk×®]Ž·/_¾ÄÕՕƒŅ£G=Ū!ę-Z“&# ŖqŸ˜˜˜©n³¦¦&Ķ›7§oß¾ÄĘĘbhhČśõė±¶¶ĪdÓĄĄ€ššpµc 4’•*UbÕŖUxzz Ētuu)R¤‘‘‘Ł{v˜;w®š»i'\·R;qÅ|ańd ł|OPPŠWß;==©TЇ‡Gž(a‹ˆˆˆüBCCÕŚFQ¤%% æĖd2µļśÜ2aĀŲ·o[¶l!44”¤¤$ttth×®žžžĀ‚žKtéŅE­ļµk×000 ~żśjżtuuńōōtdŒ9uź”Ś"T G‰DBDD„Śńæó„R)%K–$,,Lķ}kgg‡111äÉÉÉĢ›7OhwØUś³‹‘¼Btˆüß3ŗUuÖń,<†ųųx&NœČü‘gö[·n-8 aaa¼|ł’óēĻćēēGtt4;vģȖ­Åéańķėė«¶³xqqqbnnĪ’%KøuėÉÉÉÄÅÅĖćĒńššP»öćÉŁū¼ųOĻ .]ŗ¤öźŽŸ…L3Ć”š6ŒÓ 2‚tuu™:uj–¶ž={öÕ÷×ŅŅRĖ ł/2aĀ6lŲ ¼®®_F¹Ž½±vQå®×Ÿ4Ē§Ž OMįžżūüńĒ 0 Oī-“ÉčŁ³§ZTAtt4ϟ?g’žżųłłahh˜ķŠėēDEE!—ĖiŚ“i¦¾?"ætuuIHH`Ą€Āńųųx"""ˆĻ¤óńūS*•¢£“y§]"‘äH[&+/^ĢÓ§OUćÕŅdJĒŚ_øBDDD$o߈ ĆXŃןßÖN¦h•R9¶óęńK6ŒZÄĶž¬±k'źōōĪ‘­°PdšBØÓŌśh=©N]æpåĻž¶&~źŠa¶jń¹qćFŗwļN… Ł ū'OžÄŽŽžĀ… ŖÉ‘ 666”/_žššp,X@BBBŽ"ŅŅTjµŽŽŽ™ē ĄŻŻ]]]’““©WÆZZZ4kÖ ¤R)fffģܹ3OwńsBzz:#FŒ&VÜkQ¬^µ>ĒgŽSŪż÷ńńɲ `bbb¦ˆ†/‘/_>:uź„]F/"""ņļĮĄĄ€É“' aźJ…‚ż£ūÓuēi$ ¦ł S¹×Ī,šØ4Z¶l™e„Ų×ĆńćĒ©P”‚Z޼±±1ĘĘʔ,Y’sēĪqąĄ—T(čźźR«V­LējÕŖ%,ŚļܹCćʍ©U«ķڵĆÜ܉D‚½½}ž9;rCxxøZÄŪļĶ«fY0<&±øŹ(å§P* |üZ­ŸŽ–EķĢѐI ‹I 5M‘«ŖH9!%1™t„|z_īü;2 2M £ćŠ36ȓ(…\Ajb2ŗ†¢®ˆˆčųF¬üĒ’NœX½'WEšœØPÕb¦nßhéfū•N­Ż‡™õś«ĀŖ;Ļ‚™Cī^ųyə;ϰ1ÉGįŹ’=zIțhµ~ł-p¶U…ɝ¾ż”JEķŃŅČ]®v»š%Yvč*§n=%==aƆqāĉ\ļp÷ķŪ—_~ł… dyŽĘĘ„RI|||Ž––*gĪ Aƒ2-^cbb !_¾|ńģŁ3.^¼˜©ŌSVZߛ-[¶põźU@Uć·īxuŽšūwø¾)£F“••ƇĻŅÖķŪ·ÕJ_} ###z÷ī)ŗBDDDäæJ×®]Y¶l—.]ąŁå³Ü޳…UŃh5Ž!hėāŽ„ϤI“X²dI®ī™’’BēĪ™?>]»vͲ™™™š>Į×bee…¦¦&C† ÉtīńćǼ~­ZŸ8q‚|łņ±eĖ–LZ.’Q¶É“' €™!ƛe]MgŲ_‡Ł~īēgõ T•~bJU_IćJéo1 ɼŠŠēÜĢīl:u‹ēį1ĢģV÷ې˜X³Ńo"X²i.t™6Ž^ŒSEW*z{ŠÕ“6kćO£­Ÿ½”‘9øh õSĶyƒĻńW’i̾µ%ĒcłYųžB’HˆŽćö‰+ōZ6†«{N‘š¤*=¢T(ńo8ˆ…ĒćSŖ c*w”B7ŒZÄZŸyŒ(ŪŸRmX5p&J…ś"ęŹ?§xxé'×ģcT…N +ъ1ī]¹ņĻ)@„¬:„nĘVéʘŹ]Ų<^ʾ°ćxŽü¹ƒŻ3Ö0²|GŅ•JöĻßDlxŠ49«ĶbD¹ +Ń ’†ƒxżP%Ą3ķ×Įü=tĆ˓çTa¼yĶ“°h~“ž‹öØ_},qėŽ³õģmį§™ßfü¶ØDsŚĶŚNtBr®ļ/‘H˜×³¾ ¾Čśõėsm·X±b;v,˜A„RÉĮƒ133SÓŠŌŌ$--MŠ ų @*•fYe`ÕŖUB.tt“`ūC’’’„ ā"))IƒpkŻŪRåŌśœ8åĻcŚ“iY–V•ą=))™Ėž|ˆ””!ƒ’"""?R©”łóē«ķœžäCj¢jń«„Ÿ_FOĪmŲ°+W®äźž–––XZZ²mŪ6’“3æ—ĆĀĀ8sę ®®źQ‡ÄĒĒgėNNN¼y󆡡ĄLēF…ŸŸ*M,...KGšżū÷yžüyž…ńē„{÷ī±nŻ:”ķשN–zGńÉ© |Äų65Ys\]×ĘHO›-#Z ?‡&u¤˜½9{/ŻĻd'(ä5GsėiŲ7ūÜĻo?FžšF2E¹yō¢p<-%•“”T¢ćˆxž†ōw'ééé$Å%¢H“óęńKažü!ZŗŚ¬Š ’ ¹‚Č—a„? ģ¼'&,’š'”¤$& }¢bŁ>y Q±¤$&S¬Z¦œ_-\£T(‰xFLXF¤<5Ō¤R“ %-%ēbĀ""’fÄ€oĄ…­G)ėU #KSŠU+ƕNR„u]ŅÓÓ¹¾’,c/¦”ē$ĀBB™X«šŌäĶć—čč1ķŹZ” %3š %šą95õÓȗačźż:‚m¾Ėš»ų7ęƼyü’ńÕ{P®Qu.Ś‚gļęTj^›t„’ÉžżyõąÖNbŪ¤åjÆī?%5)…kūĪŠß…ÕČ458³į F-bčÖéŸ ³Os:ĻJXH(jō r‹¼H[pƒA*±įäMž†E“ß2£ KóŖ.ųxgxĒ_FÄRiŲ F·Ŗ®fćUd‚_ •J(]К–_WŹÅ­ Żėŗ±ģ j'zāĉ4iŅCÜ‡Ń >œĘS®\9<<<°±±AWW—ˆˆxšą3gĪT‹4(Z“(r¹œ:P”BŠ/Ž——W–ö---iٲ%Ɔ ćĀ… 899”««Ė£GX»v-ŽŽŽhjjR¶lYōõõéŃ£mŚ“ĮŲؘ7oްmŪ6¢¢¢HLLĢŅž÷`žüł¼xńPMJ=~Ÿ¬vžžŃ½<:yXh—)S&“čį{’““yüų±ŠŽ¶mÕŖUĖ2UĄĪĪŽ^½z””!~ Šˆˆü|T®\™Ž;²fĶb_½ąģāéx W…ß—jށk–óōāi”J%C‡Ķu䛯Æ/żū÷§L™2”/_^H+xżś5Ē'==‘#GŖ]S¢D ¶oßN—.]ȟ??õė×’d™½š5kR®\97nŒ———šŻȁ„*2uźŌĮßߟ¦M›ņĖ/æ ­­MHHŪ¶mĆÄÄ$Ū‡oĮȑ#æ[!:xd%ŗćÜ]<˦s2TŗŒiłlÅ#+c}>Z°ö]²—ˆø$ Y›üā-ś:Z¬ÖģrĪ©µūØŚ¶łm8¹f„ė¹päķœZ»M-ņ™ńģĘ†ļš©#ʶĒŌĪcs^Ü~ŒG·Ę4ŁEĶī "ĶXv„7^0½ńP,ņ[#ÓŌąÅ†ļœ…C‰Ā,ī2‘·Ļ^chnLXH(uū¶ ˆ{IVœIBtsZ¤ÜÆÕ)åY‰æśOgBĄŸœßr„uæ/Ą±¤ńQ±He2Ę^ąmĒŲ?o#ZŗŚččńüÖ#†ļšMA·ĢbĆ""’eęļ7ąäš}“ÆĄ©Ś¶Ē’ŚM•ÖŖP,C JyVĄ² -ęŽÖD¾ SõmS‰TŠL*„\£< ŗÆęxĻĖ{Opś V©U!;†n™éé“õėĻ#9ŗlq1„…¼$!*.“y~ū1n Ŗ ÓTżsØŠ¤&Ū'Æ@SG‹ræVĘ+•ÉP¤É…¾yAzz:k‚ųg\[äJ%ėNÜ`L«O—•3Ņ×!%M}wüīópŚĶŚN3÷āH$ʬ9Ī¢>^Ō*Yą«Ęāßé¶Ÿ½KDœ*|śō韚Ėīīīœ>}šæžś‹‡róęM’’’066ĘĶĶY³feą«S§Ó¦Mc×®]¬]»–zõźįååEÕŖUՉ߳dÉÜÜÜ8xš gΜA*•beeÅøqćčŽ½;  »Ü½{7‹/fłņ处„annŽ——ĪĪĪ8~,(„ą?~ŽS·œŹńŲ?…R”ä̆ƒL:½CscV šERl‚kojgĮļ»ēpvÓa/ŻF›)}‰}͌Ą˜‘ŸČ—–4žµś­x@ IDATs’ĄĀĶ4ÜVŠĄ:ž×nŽ.ßI‡Ń3ŹĒ„ćŖh×č×Ģi9nwd ½lź1īˆ*µåŝŒēņĻ̵Œ=²gGžč1™«{T‘„ęƌ> JŪ Xł§×ķ"?¢ yóčĮgƒX÷ū|¤2ņŌ4^Ž !śuęĘČ>ŹU×ŌÖBžŖZĢ~˜3„”„)’yjZŗźŠµlHO‡ymFa[“…+ø`bcŽcI§/ŽY!—#ł`A%Ր!O{?¦rėó°\Š{.æĄ@W›¢vę“­Q’ž[Ō7BްõLFX÷¾+š,SXĶʕ‡”4©TŒqmjąUŽ9““ ;˜č2¾mM-;ĄŅ„K… MN)V¬3gĪüŖkśõėGæ~żŌŽżż÷ßYöÕŌŌ̲’ĒT¬X‘Š+fy®E‹čéée© ąįį‘ÉQ*µéÜąėė+DŚŲS¹ē`µó—’^BXpĘß}³fĶØY³ę'ķ}ž’ž}<==ÕÄõōōhß¾}–Ž‘Ÿ +++F͈#§$sx²­—oĄ¦„eZwåŚ•ÓĀ„ 4jŌ(W‘onnnø¹¹e»æ®®®0¾łŌ;O__?K €ńōōT+]›%J”Čņ>;v̲’Ņ„KæxßO‘––ĘŲ±c…v‹Ŗ.Ō(‘9: ąłŪ.݉i>]®> „laÖ)i ¶žĶxßéhj°nX3Š;XØ9ŚŌ(k’%²6ĮĮÜPM7 Æøuü2ęŽÖXäW9ļKžR‘ ŪŽįŃ­1NK} ”v&`„jŽaUČ3UśN>= ̌ˆĢŗÄbųÓWTm[Oh×īž!\¤rIw™Hjb2±įQ¤%9l?źÕ[ańąąZ˜·Ļ^cdeŠC‰Œł„‘•)÷/Üü¢=‘’¢ 9µv?uūµ¤Ķä>±ՃgsfĆA lCLX$‘/Ć0µ³DžšFXČKŒm̹Œ«GyžŻ|H2E²¼‡E~^Ü !==‰D‚"MĪøj=XpĻo=bčÖéhhi’žžĪŽ©Āi©…\‘Éž™½•šgōåŻ'˜;Xeź÷­Xs<ˆŠEģøśPU»81% Į/Ø\Tų""–«^ ż+µ§ćG!sže ³ņČ6Źś+}œlLŁ¢ZŽĘÓæaV¾ĘĶ'oĖåŒ5ź_!”÷³ĦM›„vŻq3ŃŌĶPNЉāäÜ „h---¦M›Ę§HIIQ—*Y²¤Znæµµ5;vÄŲųėRCDDDDžĖ <˜•+W ĄŻż;xxāNµT Ŗ:#¦rgļ6’c£ cęĢ™Lž<łs&ErĄŠ+xšąZ2ü;’ņɾėnPŠŹ˜Ł»Ī ĒŽ\DLB2R©]-žģßč³÷S(•“©Q‚Iķ=xσŠ:ĻŻÅÕy½0ɗ3Q½¬8¹f±aQŒ,Ærš¤%§.8>Ģ£W*Ӆ„óėÓÓ³Ųtz‡ĘGQ§qo£yżš9R™Œż 61`ķ$ ̌HMNeFć”_³D*ꊠŖ”ń>²5/*ˆˆüŪyHzz:§ÖķgšF?ōM2¼ē5:6dķšy4Ų=£|Ģm5sGkž= ZūčØ=g7āŽ™@R’ˆ‹ˆ”õ¤>D½z›é>¶Eó“æ”3£*tĀŖÆ>§zūśČ45ØÜ¢c«tĆĮµa!”$'$‘ÆŚa-R¹$Kŗłr÷Ōuz,Ķ«vo副Go&{öCG_—§7Šu¾Ļ7~Z*RŅäl;{o÷ā,;¤Ź½w²5eĶń ĮąUŽYM +’SŁąÓSĀcX},ߍ'YöŪē_Y!“J™×³>uĘØvŲæ’'óšErĘȑ#…0Lū²•q}§Nżž“s'‘!“ˆ³³ó'ķŻ»wOM8ńĆÅ‘"EhŻŗu–uEDDD~f“““X°`õźeģ š8„‚Gƒih¢onI­”88Qµ«¾téR:uźōŁļ[‘Æ#::šéÓ§ ķĮM*ćōAÅ£YpƒS„xFh ’-l={‡ÖÕ³WŗY"‘ą5q=»Ę“”ؽ™PP™‡B€Iq‰\Ū{šv i©Š49½ķžDµ©xšMGvA[O‡+’œ"S߄r=˜‚nEyu’Éń‰č›d-īėX҉+»Oā\IMp|å?$ĘÄS¢vy,ņŪé²A›« Ź45ˆŒ%Ÿ©zD‹mŃü<[ƒ*ČSÓøqä"‡w"śM""’ˆ€<$]™ĪŲƋ±*¤^Ž­Dķņ Ū>ŅÓÉgjĄ€? ÅŲŚ =£|Bæī‹F`bcŽR”Ą¢€- RA²Ł€&#ŗŹ^Ž&."†Ųš( ̌0“0 żōÄ¼‰$öm4fö–¤+•Ā5%©Č¬›ˆ|N>S#®Ÿ‚¹1Zšų_ś›čפ&„`žßFHU˜r.#‚Ą÷ä2¤¹,¹÷!{/ß§T+µ…ś³šŹś“¹=ź}ęJuNÜz±Ą|Ū×"ŸŽI©ņ\•¬]Ŗ Ķ«ø°żÜ@µX­]»¶ø€Ģ#vļŽĶٳgU ‰„ŗćg©yŻ#Ÿ>āŹß”–Œ3ę³6? ’’www¼¼¼r]ŅQDDDäæJŻŗuiŲ°!ūöķ üĮ].Æ^BåƒØŲõ7®oZɛ{7IMMÅĒĒGŒ|ĖCüüüˆŒT©Ķ[é3ŗeõOö}ƒ«£īÅŌ…{7(lj›OАI?™:ąha„ަR‰„Õƒ›2eó)^FÄbfØĒ¬nu13Šūäµ_Ėķ€+”o\CXüƒjŃķŃ­1‡.`jgÉĻ~$ĘÄc[“=’€Ua{¶O^AXČKdšōśc4‰3#tņ©Ęų>­ ĮĄ6¬0ƒa%[£T(±qv ßŖ‰hėé°ņm†žQ>œ*øŖ-önĒ÷.«ZļŃ]…ˆŪ.s‡±jŠ,ÖśĢCS[Wņøz”ēźŽÓj×kėé`h.F Šü|HP9dļžŌ“7ąąūNsēĪešąĮYųY8p .Ś«£OØ-ÖsBŗRɱ»ų„WfÖĖ»OāTŃ“w_N? ·Ž_fR¾B{Õą¦t©SFh/Ś{‰VĘüZA=ŻaųŹĆtŖ]šŪĻĀŃ×ѤQŬóÖś.ŁĖ“Īæ §­É‚=¹x’%qI)”*`ŘV50ŌÓĪņŗģšüm Åś,"1% €ńćĒććó}"#~fRSS©T©= ¤w;š/R/¹ø±k‚’#“—,YBß¾}łiiiųłł‘ššR(•JiŲ°!•+WĪćO """ņßćŃ£Gøŗŗ åQµ p*˜|–*„žĒgޱ¦uFXś–-[Ø_æžėĻăØ\¹2iiŖ¹Äż„wżņ?xT™‘5ö¢ŖwšbĄŚI_øāĖ쟿„BÉÆCՅ%cĆ£š÷„’å5¹¾Ēæ9-G%³õōōHHHųĮ#ł/S¬X1!} H‚8 ˆ¢ŽżD~š{Ģ»> @ā»ėR4@(Ä€ļˆD*Ķrń*åż’G~ū5kQŗ™ŻTUJų¼ĮŅ~æ æūBšĄ×ā`n„w&m:©ÓĢ™“iÓę“å‰D²ĒŅ„K…Å榎.uFś©9 ¶ų/^¼8={öü¬Ķąą`µÅæ®®.ķŚµ£P”By8r‘’.… fŠ A̘1€”øXf§ŃŒeŖV‡ā ¼¹{`'#FŒĄĆĆmķœ;ŅE`̘1ĀāßÅĮ‚īžešˆ¾UŪփ,2ōM łmļ÷ˆˆbL¬ˆČgٲ,Uį_IIILœ81Ļl+ ¢££ÕņÕ~v޾}«VĮ½÷0Œķ3BӕJŽL®v͜9sŠŠų¼ÆņĆšsssśöķ+.žEDDD>bģŲ±ŲŚŚ ķk’āeąe”]ßwž ĘĀ’%Kņä¾iii¼}ū–/^ü_ķˆžŚ“iĆŹ•+Yæ~=žł'5kÖdɒ%4iŅDLOO'::Zm‚ō)œœœ(UŖŌū冎;ņ믿~¹ć'fõźÕB»Ī(“ 2ÄvR⠘9^hĖd2!Tõsœˆˆüüü(_¾<ęęęlÜø‘„„źŌ©dtŅ_DZZ£GVŹ„·Ä­–v*䎾!%!^)=š^lIL—j'„"Ė„ X½z5QQQZ8 ķŗ’ß-cYŽ&ćę±°aEŅSS9wīĖ—/§K—.ĻŚ„"44”ŌŌŌgž~vttD­Vs’ž}­śĮƒÓ·o_ @TT›6m¢cĒŽlٲ…jÕŖpēĪe>))‰ęĶ›™cNNNÄĒdzmŪ6zö쉁mŚ“įŃ£G4oŽkkkzöģ‰©©©lÜø‘ƾś SSSZµjEĒŽIJJbśōé”+WoļŒy€ōōō^č܃ƒƒY°`Rć[›–ņjšāŻ!"Wߏ"č^¤®ĆxeżšWaĢ»ųłēŸéŅ„ eŹ”y”ĻĘĘĘbbbņĢ6DGGkÕU©RE+ݱ[·nDEEńóĻ?ēų½{÷š÷÷göģŁtķŚU©ļٳ'fff,^¼˜1cĘĀĪ;łńĒéŌ©“Öž5 Ė–-ĆĻĻĪ;Ddd$cǾÜŅ=æžś+/^@ĻĄś~“µ¶‡ž:Āł +•²››}śōy©c!„x9¶¶¶Œ=šĮƒ–’Ģöļ‡šł’Œ‰gmŻĖāŁ¾Ē—etfæ’ž{>żōS¬¬¬ž»ļŲŲX€g^óŌj5¦¦¦DFjßōéӇįƇ+åĻ?’–/_® ÷|Ÿōķ·ß’˜˜d¼ūŸ–žĪ¢­'Ÿó)ŻūpÖ#BȀČUß­ŲĆw+öč8Š7#s†ß™„ ==ż¹OŒŒŒxšąV]Ɔ ³µ«WƞÖSõ']½zFC½zõ²m«V­æżöŃŃŃŹLĖ9ŻPõčу%J<3Ö­5ćōĒŻ¾&‘āJY£Ń°żū!šÄRˆÓ§O—u§…"ōė׏ŋ+“ÕīŲĄÕ][(^·1u†žĄłõž$DEĪĉ_hb¼ĢUT*Õ3ŪeK­Æ[·®VY­VS«V-‚‚‚rÜǵk×°µµÕźügŖT©;vģ2žĢ[[[kuž3cōóóS2!^Ē‘#GX»v­RNMKgČoŪ_{æBń&ɀÆaĻž=¬[·Ÿē¶µ°° >>ž™m³u~sZŅĪĘʆ„„āāā033ÓŚ–ł4„qćĘØÕŚÓ|d.iƼŸ˜SŖ}Ŋ©X±āsĪčł&OžĢƇ0ĶWÆ£“¶’»v!dz–Uüä“OŽśŅNB!2čėė3kÖ,ź×Ļz-kĖč~©y}C#LmņSē›ļŁģ—1[’Ļ?’L×®]sģl?ÉŅ2c…—ē]óāćć166ÖŖĖ—/ūŗńVVVʵäæ"##yšąAŽÆ$&&bcc@XXŲS_-{Žr³/"==įƇ+ƒĪUŦ°”§Ž•q]NNˆ'-9kĄĆŲŲų¹™¹åæ™Bˆ÷— ˆ\5{öģ×ZJ.·Ģœ9“yóę)åŅMZį=jŖRŽ2¦?W2&%ņóó£AƒϽˆ[YYeKļ’ÆØØ(µźrZ0s‚>ƒlŪōõ3žYOš4)Ūą@& ŸĖėŗvķ‹-RŹu†ŒÅÄŹF)§$&°k²ŸRV«ÕL›6ķ­Ę$„B[½zõšńńaŻŗuDܼƱßęR½×*uģÉÉßvé))) 6Liū4™Æ <ėš—@bb"öööZõ™éóOJMM}jf˜‘‘¬X±"Ēķ™™w&&&Æ“„ļ‹ņ÷÷ēŌ©SØõōh6y!ö„Ė+ŪĆÆ\dwVŁÉɉĄĄĄ§^§s›žžŽKMō(„Č»d@ä*KKKÜÜÜtĘsMž<™uėÖqėÖ-.nYKõŽßąüQUšMZĄ¼Ś{HŽ‹%$$„Y³f1bĈgī³dɒœ:u F“cZdTT4hŠ@«žæ“fÖYZZęŲ‰·³³ lٲøŗŗjm dóęĶT­ZU¹éŗwļ^¶ żV®\ɐ!CøtéŅ+ߜųłł)ƒ‹—³Ò“¶ži:Q”ĮJ¹k×®xzz¾Ņ±„B¼ŗéÓ§³mŪ6„ó½wÖx“ī„yA;Ōśś4š#æµņ†Ż»w³~żśgNj›/_>ģķķ9zō(_żuŽm>ŒF£”\¹rZõ”””xxxd«+X°`Žū±µµ%>>lYo[¶l!00råŹaooOxx8)))ŁĻū÷ļĻįƇ9vģ˜V½FóboĘ'$$šĆ?(å>ļ®Õł‡Œ鏗Ā?~ü;ÓłB|Xd@!r`jjŹŌ©YOüŃhŲ2ŗšĒ£ć–ĪŌü:k’¢Y³fü߯hńõõ%((ˆńćĒg{ŖCß¾}III”uėÖZŪžüóO­4ʤ¤$VÆ^M„J•ČI‰%066fłņåŁ¶-Z“ˆ… bbbBɒ%144déŅ„Zm4 k×®ÅĀĀBėęÄŲؘšššŗ!Ś»w/[¶lQŹ æ›‰Z?k¼1&ģ~̚ ŠÜܜqćĘ=wæB!޼¢E‹*“$Å))‰ńćĒsņdĘ|*T &&&[¦@DDŁ"LLL }ę9fš>}ŗŅÖČ܂O§µ=pĒ‚ög-…ėéé©5ł®Bä&Éā)ڵkĒüłó•5ŠoŸ9Īi’Å|ōł—Ōčż g’^ĘĆ +$$$ąēē§µ–šµlŁ’£G2uźT.\ˆ»»;fffžńÄߣ·‰ā.HR4É?ā9ʍ§µtбÅó»üÆRnüĆlō 3žDjĶ|Ÿ\\\?~<߯ū‹õ¤I“”Īæ‰u>jõ÷ÓŚ~~Ż_Z’jժѶmŪ\Q!ÄÓĶ›7OYM `āE(™o™23ßr‹J„¢E‹üż÷ß:ļük4† ¦tž]«}¢ÕłŲ5e“Ņł4hŠ;ŁłB|Xd@ˆē°±±Ńš .=5•­c²2bņ¹£j¬ņųńć¹wļ^®Å÷Ķ7§Ł$) IDATߊ»woÆ%|ćĘ ķe’¾łS›üJ95)‘€'&•R«ÕĢž=;Ē„BčF™2e“Ž·{pŸ=3Ę*å’ŽĶ)^·‰R1b)))¹›‘‘~~~4lŲšłß²æžśK™`P„Vg{Ż-üź%Nž‘uM“³³cŲ°a¹£BäD„x=zō råŹJłĘĮ]\ܔ5ć°W’QXŚ;ĖŲ±c³ķć}7räH’’’€ĒĖžuŌž°éŠĀiDŻŗ©”;wī¬õ !„x7¼lęŪO?ż”ė1źRöe’¾ÄŃC{Ūmß ŌZöoĀ„ O;G!r“ ńŌj5³fĶŅzZ½ķ»A$Ēg¼ŪehfN}æ¬eķV¬XĮńćĒs=N]Ł·o›6mRŹ æž~Ö<±įa\5?©©é;ńŹ‚Bˆģ^6ómĀ„ ¹šł¦k3gĪŌ^öoˆö ’•€\Ū³M)WØP!ĻĶ$„xɀ/ØzõźtčŠA)Gß¹ÅĮłS”r¹–ķq­–±ž±F£aŠ AŹ„:ļ³lĖžÕkJ±:“ŚLNRĢ#„ńѱŌėž)E+—ÖqTŅÓҹu!ˆ=K6h]@ŗtéņ^Œ†2wī\4h Ōmӟ"5ė¢oh„‰• u¾łžM#¾ąēŸ¦sēĪ”-[VW!æ7oŽdįĀ…Jł“!cµ—żKNbēđJY„Re›HQ!Ä»-3óm詌l·ĢĢ7ß_×Y™oĒ—-22ߚ7oN¾|łtóŪ°råJŽ9d,ū×h¬öõ,üź%N.ĻZ ĮÖÖVk~œw]“&Møx1#k3ęAs;įėec16Ļū÷m¹!>:–9F)÷åń ń.R‘1 ÷ųæ€!PؚŁhęĢ™ 0 ǼĻNž`–––)R„¦M›Ņ·o_ģķķu’xO¼­ ™š%ąīī®ė0prrB­V+Ėķ”)SOOOGõį111aŹ”)Y3Ūk4lӟ›£ÖÓĆÜÖÆ~~ģxüt`Μ9ēųd 11QėŻ»ēIKK{”WSRRRž9h•@RRŅS·ĒÄКšŖ”Æ_æ®ü½RĒžZȾģßäɓ„ó/„ļĢĢ·qć2–ŗĖĢ|k9;c~—ĢĢ·skž`äȑœ={ö©ū‹ŠŠz©ćĒÅő’’ņÜvĻŚÆF£yęöōōt=ŹŹ`Sųś~“³/ū7ė„lhhų^¬üćģģĢäɓ™w_śFĘæų<*µ# «ē¶3¶“~jg\­Æ”¹ÅKÅTøZm­ņįŸfqóšRīŠ”5jŌxn\B!ņ–vķŚ±pįB%óķīłÓœžóW<;ž€j’Hr\,é©ĻOׇŒė/1Xl`l¢•ŠŸcSōŒŒžŗŻŠŌ½'ī³m7·@­—q›¬odŒmÉ2ZŪ·DŚē÷Ć?`eõük±x;<Čżū÷ˆeĒŽ/^\ĒQ ńn’!ސqćĘń÷ßsļŽ=N,[ĄGķ»c_ŗ<µŒÖexoU܃ū˜—õŽ£‰‰ ćĒ×aDB!ަyóęQ”Båü€‰#(Õ“5¦6łŃ30¤īŠž³‡¼+hWwmQŹåĖ—ēĖ/æŌaDāæsC¼Č\B|Øä€<,%%…}ūöqūöm]‡"Șö‡²nxŅÓŅŲģ÷õ{± ŅóģœģGbL“R:tØ,ū'„ļ±Ņ„KÓ»wo„œ™łö¾KOMeėwµź¦Nš'—żB|˜$ JOO§^½zģßæöīŻKåŹ•uÖļ‹/¾`Ń¢E?~€cø°ŽŸ²>¾Ļłä»%-%™äų§Æ’OŚć•"oŻąŒ’be›³³3ß|óĶ[Q!„n;–æžśKI½>±lžz`WŹCĒ‘e—GZJņS·'ŊB£Ńpu×fī_>ÆŌūųųąķķżFc®¤¤$.\ȦM›ø~ż:III˜™™įīīN«V­čŌ©juÖóŪʍN³fĶųī»ļrܧF£”AƒDFFŅ¢E ƌ@·nŻų÷ߵڪÕj (@Į‚iŲ°!¾¾¾ZĒ{š‡2{ölø{÷.iiiXXXP”BŗvķšķßHęyn޼™k×®‘””„©©)„J•Źń<ś%yŌµk×Ųæ?1#ļ_ż%ļµZ͜9sØ^½ŗņä³ßלśóW­vš“4’bå“‹§zŽĶĖ=ėfF£Ńųčå–_zQ&Le’„ā`mmĶ„ čŽ½;‘łö{ūFXŲ;fkū*םēuʟ”’˜@jŅ‹/„ū&2uźŌ\=¦Č™„„å3ĖyÅēŸĪŗuėh޼9_|ńśśśDDD°’~ŗvķŹųłēŸ•öēĪ#**АF…¾~ö®ŻįƇ ĄŌŌ”ņåĖ+õÜŗu‹O?żT©Óh4ÜæŸćĒ³lŁ2žłēüżżŸ9”sBB5kÖ$$$„Ö­[ćććCZZ<`Ó¦M¬X±‚ü‘ƾś*Ūy6kÖģ…ĪS¼yś€`X¶@C@“łgęĢ™ńn9wīœęɟQŸ>}t’xB×®]µ~>ʟ?žX“žž®ėÆ_!D.IKKÓT®\Yē×]üśč#MTT”®Czi—/_֚ &äø½[·nµZ­ Wź5-[¶ŌØT*ĶöķŪsü\æ~ż4„K—Öø»»k¾ųā „¾ZµjšŖU«>5žŃ£Gk͆ ž÷Ÿž©4[¶lɶ-%%ES©R%««k¶ó?~|Žūūā‹/²ē‡ŖdɒOžĪIĪūMĄĄ<ą` Šš><wĄ…Œ¾½5}}#@_r+„x &Mš”gGŸ_•J„bęĢ™²ģŸB|@Ōj5óēĻ’ąŅu ,ČØQ£t†xĢĄĄ€ķŪ·Ή'ņäŠ AAAŌÆ_?ĒķuźŌ!==7nhÕ»øøP¹reV®\™ķ3ééé¬ZµŠĻ>ūŒŌŌŌ—ŠgōčŃäĖ—’g¶»~ż:*•*Ēøõõõ©U«!!!ŹÄŒÆzžāĶ‘W„x ģģģ˜0a3fĢĄĘĘę„>khh˜c ż£G8vģŲ› QįāāB£F077ĒąK"Y[?}A===\]]©^½śO!Ä»­R„J 4HYŠĀĀ"ĒTä§122ĀŌŌT«īśõėœ:uźĘ P³fMjŌØ¾¾>O_žöi×āLeŹ”ĮŚŚśĒ'^OtĀ++X° W®\ÉńµŽN:Ń©S§lõiiiųśś2~üxęϟÆu/wąĄīܹĆgŸ}ʒ%K^*Ź–-ĖéÓ§Ÿ·F£įŹ•+”.]:Ūö3f0cĘ ­öqžüq¶ö;v¤cĒŽ/«x92G™˜˜<³,tÆOŸ>ōéÓēķļäɓTŖTéķ/Sٲełé§ŸŽų~…B|8Žō»š ,ŠzgųMńööV&Aā]āééIłņåéÕ« téŅøøøąä䄋‹ ¶¶¶9~N£ŃŠ®];† B@@7V¶łūūS±bEJ–,łJ«RŁŁŁųĢ6­ZµbŲ°a4hŠ€Ļ?’œbŊįģģL”B…pqqÉ6P–yž½{÷ęąĮƒ/|žāĶł°ņµŽ#Ŋ£Y³f@ʓŁ.]ŗč8"!„B!tC£ŃpļŽ=Ņ^pāČwJ„bėÖ­tģŲ‘}ūö1|ųp>żōS*W®ŒĪĪĪL:5ĒŽ¼““5kÖŌJ×OKKcõźÕ|öŁgÆSžüł‰‹{śŖP‘u±oß>j֬ɚ5kčßæ?͚5£|łņŲŲŲP¶lYžžūļ7ržā͐€ČĆT*eŹ”łą&›B!„"ÓīŻ»•9(Īž=˚5ktŃĖ ćäɓ$'g-łleeEéŅ„iÖ¬üń®®®ZOӟԦMbccپ};+W®¤J•*øŗŗ¾rLQQQĻWįʍœ={V«ĪÖÖڶmĖ?’üƒF£aõźÕ/|žEŠyźyŠ×'B!„Bˆ<+&&ę™å¼`ķŚµTŖTI™%’æŌj5ĪĪĪDFFęø½`Į‚Ō«WRRRX³fĶk=żøpį… zf›‰'>sč `jjŖÄżŗē)^Ÿ !„B!„UØP€Ķ›7ēø=,,ŒóēĻS¼xń§īĆ×חõė׳iÓ&"""hŪ¶ķ+ĒóǤĢ9ö¬øćććŁ³gOŽŪ>L\\œ÷‹œēæ’žūĢóÆGVČĆFÅŌ©S)[¶,7nÄĮĮA×! !„B!^RÕŖUńööę›o¾a’žż”/_[[[RRRøuėžžž$$$0`Ą€§īćÓO?„WÆ^ōļߟZµjįääōĢc†„„0|ųp­ŗØØ(Ł»w/•+W~īDć:t`Ś“i4mŚ”vķŚįęꆝ±±±\¾|™•+Wāąą@ēĪßŲyŠ×#yThh(&L@£ŃpźŌ),XĄ÷߯밄B!„ČUĻ,ēėׯgöģŁ¬]»–ššįCĢĶĶ)P 5kÖdȐ!xzz*ķ]\\ȟ?æR¶¶¶¦}ūöģŻ»—®]»jķŪÅŅ‚ *eGGG²½kohhˆ££#“'O櫯¾ĀČČč™1[YYqäȦL™ĀŽ;X»v-ŃŃŃX[[ćąą@ūöķ>|øÖņ~O;ĻüłóēxžāĶ’€<*22RkyŒˆˆF#„B!„nŌ¬Y{{{īŻ»‡…… 4ŠuHÆÄŲؘaƆ1lŲ°jųšįluæżö[Žm÷īŻ«U^µjÕĖų¶¶¶L›6ķ…ŪæģyŠ7K„B!„yV¾|ł8sę »wļ¦Zµj.\X×! ńĪ’!„B!Džfgg‡ÆÆÆ®Ćā'«äQzzzĻ, !„B!„O’€<ŖX±b)R•JEżśõu‘B!„Bˆw™ äQ†††<ąęĶ›Lœ8‘råŹ Ą7˜˜‹Ąģٳٿ?* j! ˜Ź’Ҳ˜¤4„ÄpłņeƌóBkį !D^1pą@ĀĆĆ13ŌĆŪĶ S™ŹéCv;&™}7±k×./^L÷īŻu’Τ§§ƒ•••®Cym†††9Ö%&&¾Ō~’’’P©T<óiii 4ˆ-Z̈#xųš!†††”,Y’+V(Oņ3c åįƇŁöŪ¶m[¬­­;v,īīī:tˆ   vļŽMHHŃŃŃ“oߞ?žųć„ĪG¼9Ņ[zØT*µź4 ‡&_¾|ø»»ė(²·g÷īŻ4(f͈ZŁG8ŇgÉéū,9ĪĪ;uŠB¼1FyųUe;𖐠'~;C8ĆŽ½{?Ų€«WÆŅ²eK.\ø@§NX¶l™®Cz-<ĄÕÕU«.::ś¹Oü’+žüh4bcc³½*šdQpp0§NbȐ!“nŻ:ĒˆL™+̚5‹¢E‹jmKKKćŃ£G˜››£Ńhøyó&-Z“ C‡Zķ.\HļŽ½3f %K–|©so† æēz÷īM5(S¦Ģ{¹:@ę/0{ó죛āĆdgžqįŹLEBˆ÷Azz:QQQä7‘ē7"CӌūŸœžĘ~®^½J:uøpįĖ—/×JmĻ‹ž;C?Ąžżū³uøŸĒĶĶMłģ“āāā8räˆR.TØ^^^“oß###ĢĶĶ)TØŌ­[—~żśqżśu ćÕ•J•m>€;v/_>Ī;@ٲełłēŸ³µóōō²^'¹O® ļ¹Ģōšōōt† FZZ#FŒŠqTB!„B¼ŗĢĪ’ķŪ·•:333ģķķuÕė›2e &&&”+WŽččh6nÜČ©S§9räKķēć?¦téŅ|żõ×ܹs‡’%KĮÆæžJtt4… 2žÜGGG3pą@zōčALL DDDŹŅ„KY·nAAA888аaCHhh(„J•ĀĀĀ‚ąą`&MšD‰%ØX±"*•ŠźÕ«3yņdT*īīīXYYqūömf̘•••Ö*"wÉĄ{®N:lŲ°A)gžņA!„B‘%%%Ń A­Ī摑żõłņåÓadÆĪŠŠwķ ’ IDAT~üńGFŒ”Ģ”ļģģĢܹs• ¾ °±±Éq¾/ŒŠÓÓcƆ ōéӇƾśŠŌŌTŒiŻŗ5ƒ R²Nž<ÉŁ³gپ}»’ā’$www|||ĒŽŽž+V0lŲ0¦NŖ<Å755„I“&L˜0AY`ٲe 4ˆ©S§Fzz:†††T­Z•M›6aaańęæDńBdą=·|łr5j¤•ź3räH¼¼¼ØQ£†#B!„āåsóęM„lddÄŖU«hÖ¬™ī‚zM>>>DDDšŁgŸ‘@zz:fffZķźÖ­«“{’Z­ĪVļęęʖ-[”÷ósZÉĮĮ•JÅąĮƒéŲ±# ĄĢ̌øø8n߾͓iÓȟ??łóē2-ZÄ¢E‹ˆ‹‹C£Ń`nnžm掎Žüõ×_¤¤¤(s|(•æĖd€÷œ••[·n„jÕŖZõļÓ8B!„āĆQ“hQåŽÖĢ̌իWēéĪNLLL²už_•žžŽS—Fvssć÷ßēśõė4oޜJ•*QŖT)*UŖÄgŸ}†±±1k×®Ķq533³;’’õ¬¬‘ū$ą`eeŶmŪųģ³Ļ”Į€–-[ź:,!„B!^šžž{÷ī劔C”,Y]‡”§µoߞöķŪ„¤ėæHē^ä=2š°““dĖ–-DGGæk¤ !„BˆCjj*÷ļß×ZīŚŠŠO>łDwA½§¬­­u‚xĖä€Ģ;’iiilß¾]Y²C!„BˆwE`` eĖ–ÅÉɉ-Zžž®ė„ČÓdą×±cG6lHŊ™8q¢®ĆB!„Ččü×­[—ĄĄ@6lŲĄ™3gt•y› |Ą4 «WÆ ==‘#G2~üxG%„B!>tŌ©S‡;wī(u¦¦¦ŹśõBˆW#0•JEƒ “źFń t‘B!„ųŠ%''ÓØQ#īŽ½«Ōń÷ßS°`AF&žkóęĶōļß_×aˆ— ø+VP­Z5­:???Ž=Ŗ£ˆtÆD—o)Ōų ]‡!„B¼U*}>³’‚•ź:!“ܽ{—›7o*e###Ö¬YC“&Mt”ČŃéÓ§Y¼x±®Ć/A>p–––lŻŗ5Ū @hh؎"Ņ= 7̜Šé: ³«įC•É[A„z«ĒqØŻ–Źć7¼Õc!„ČN„RcįZ‹|ŗEēJtł!æ¼õćøwŸ@Łóßśqņ:¼½½Œ{Õµk×Jē_ˆ7D–Ź @‡Ųøq#ŽŽŽ4mŚT×a Ó71Ēø óŪ?Ž©ĘŽśq„Bˆ§Ń32AßÄģ­Gmd‚¾±é[?N^§R©Ų²e Ē§hŃ¢LŚzz:;vģąŅ„K„……ąįįAćʍ³-ĻwöģY¶mŪFDDffføøøŠ°aCģķķHHH`Μ9“nݚččh6oŽLBBNNN“nŻZi÷,=bÓ¦M…‘‘5kÖ¤N:čėkw#“““YµjēϟG­VćįįAĖ–-100Pڤ„„±mŪ6Nž/Œ 8¢IK%92Œš“D]z¹×+ņ—ƍMéjŚŲ¢60")2Œˆ³{yxvÆV»|^äÆš †VФ„’FŌ„c<<³[iS¤U]?CzJ<½1“.HŹ£‡<8½›ˆsū2ŽWįņ—ƍ™SqJt@Ĺż<8½ SĒ¢ŲWo‰]aTzś¤ÄFyńįǶ IOGĻŲ ·¶ƒˆ ś—{’QŽo]²¶U›r;ąLģ]ÉW¶f…J¢RėS¢Ė·<<½›‡cB‘{JvūØĄć„ZÆŌõŠ‘·¶.!ęĘæØ q’r<÷¬%āߨ qšjµūĒZę'-9„ū·ø·­ņ™”64Ā©ī瘻øc”ĻMz: aĮÜ?ŗ…ØĖĒžhgŒCķ6X»Œ™%© q$G†q’ų6å«gbNÉ®c¹µu1–EĖcU²fV$=¼ĖŻ}«ˆ¾z—f=0/䎄›zʦ”ī=€[[~#ęęP©(P±.<½1Źgšt’"īńąŌNåĄĢ©8…[ōāŽˆųwæ§SżXŗypeŁ÷87ģ‚™cQ,ŻöļßO‰%€Œ×u'NœH¹rå°µµ%--óēĻÓ·o_öķŪG… ˆgųšįģŽ½[©‹‹‹ćņåĖ >œP¾|ł§ĘJõźÕ¹wļīīīXXXššįC¾’ž{j׮ͶmŪ”>Cjj*uźŌįŚµk-Z”ŠŠPnŻŗÅ'Ÿ|Ā®]»P©T$&&Ræ~}:„³³3ŽŽŽDGGsķŚ5œœœ8t莎Žh4Ś“iÚ5k°··ĒÅŅŲŲX‚‚‚033c÷īŻ”+W€ńćĒ3jŌ(Š+FįĀ…‰g޼y <˜ƒR¶lYüżżéܹ3¦¦¦-ZµZ͵k×0`æüņ ;w~Ė?Żw‹ -’ķü?|ųŸ~ś‰GiÕW­Z•O?żT«.--_ż•   ­zGGGzöģ™mßhՙ˜˜Š½{wœœ“Ÿ_½z•åĖ—“œœ¬Ō©Õjāāā^ī_’… Nõ;ŗ})šĒėĪ:Õk©C ­m•‹æž‘).Ķ{rŻ*…u£H›D^8Hbx(*=},Üzō( 6$żq§śIžžž\¼xQ)'&&āååŽ{÷²µU½å÷Ó£.£pó^˜9— 6ä2jC#Ģ]ܹ³ŪŪ*M2Ž×h°,Z•ZØKO(ėśŗu1A«fjķÆĀš„Ų×lłBjC# 5ł‚»{WqeéwZŪJtC”†]ŁøTPØńÜŁķĻÕå?h·ėņ-Ī »²łŅ““0“ĢĻqæ¤ÄF R«)7p!Žu?ēĪnĀ­'ģŠzœźw Xūœ›ž?Šh”}i‘EpvŹŹ €sƒĪõŠ©ƒńwƒø±v.+yćÖvĮ©^{Œ :saž@Фswßjīī[M”Ę_ąŚņkĪMėńā?!„o\Ōåcø~Ś•¾šŌ,\Ėpļą?X« “³*įIjB,±Į1“*H>/ĪĻśJ+{K­oHÕ;)X¹Ń Xŗy`ķ^9«£’˜J­¦ü°%87ģĀż£›±*V«•²¦«TT¾ ē†]µ>Ÿųą6ē¦÷P®cjCc*[‡C­–D_9AČƟ(õæI˜Ųęā‚ĮŹgõLĢ)ŌäK‚7.RÜ3•ģöĪ »¼į'4éi\]žžßÆĮłńµ¹Øļ7$EŻ'xżB‚×e¼÷_ŗĻL -l“Žó!»|ł2uźŌQīńöķŪĒŃ£G©Q£†Ž#Ė}{÷ī%_¾|tģŲQ«¾pįĀ4oޜ+W®™sēĪͶ’—‘‘®®®Z+'|łå—JēĄÕՕ šļæĻĪĪŁ·oMš4Ńźü“lŁ’"EŠpõźU­ś±cĒ*€>}ś0lŲ0._¾LķŚµ9zō(%J”Šźü”,Y’¦M›rśtFVĪ‘#G077§[·nZķųüóĻY³f ń211‘*UŖhµĖ—/+V¬P:śgĻž%""‚!C†(uęęęōéÓ®]»F©R„žł}¼Od@<ә3gžŗķģŁ³ZĻjūßm’žūoŽČø$&&bll Ą½{÷rģühžč˜¾ ®Ÿ%=% «žÄ†\ĘĀ5#•čöĪ8Õ­ aĮX•ųˆ”ŲHāngü2Ō36%%6*Ūž.ü8µž‹0ēs@ĻȔšŪ²m ;¼cŪBč›Z``aƒŚĄˆšćŁŪŻ?² ‡Śm1Źē@½›<<·WéühŅӉ¼x„Ā-z?7&•:cĀØ+Ė¾×źüÜ?¶•¢¾C1+T‚ų»A¤%ÄrķĻɔī5ǶPøy/B·/#.ōźSö.„B—¢.Cmh„…k];ƒeŃņĆ\&źŅ1ģk| *5hұ*ńс'Ф§£6Čø”žļõ8=5™£Ć£IK}”c›Ų»ššĢ­zMz:wvūcS*ć&ßŌĮ @y%-«”†§vāŚ¢—VuųńmZƒŲéɉÄܼ€Q~ĒēĘdęXµ¾!įDzŚ?8½ ūZ-1Źļ@bx(ń÷nrkóÆø4ķNRdł+Ōįߙ½ION|īq>T—.]¢nŻŗZ÷x™)Ś¢»wļāąąćĆ­_~ɚ ŅĀĀ‚¶mŪ²jÕ*®_æNdd$)))„……±sēN|||“>ū߬Zccc’’’žĻ;whÜøqŽŪž›ķkjjšmŽSӌ¹.2³w£¢¢ptĢłß““ēϟ ::š hu֟l—97‚½½=eĖ–„[·n4mŚWWWœ)\ø0}ō––„įįį¬[·ŽŻ»wkķ/$$D9ę‡DÄ3 4ˆŃ£Gg»°;88(i?™z÷īĶʍ‰×Ŗ744¤oß¾Zu>>>Lš4‰ėׯg;fŸ>}”Ī?dŒT¶iӆU«VekkjjšķxoRzJ®ŸĆŖxEnü„›±·®LRÄ=,‹z<š$źņqå&掁pk7»-ˆæ{ƒ¤Č0’Ü!6äQĻO90“Θš&9śa¶mŃW’ĻŽĒE]ē ÷}(·Čå}‘wjęUjŠWY– “µµķö«ķܬvŻĶŽķŲŚ-APĖ““………źk–––ōģŁSŁS7n¹¹¹ZA}`` ×<==IKKćāŋČdæØŗ»»¢ÕŽ„„.^¼Huuµśš­­- .ä—_~iÕĻx'åé'š÷.ŻR•u€ŹĢ3øtHį‰]ø„„’¹ńcõ÷d%|JYZ2ĪĮż°ķ䋽w śĘĮ'ˆ¼ƒ d¬~’ŽõJ,šž< ·æĻ²é>„R÷Œ Š<ÉÆ5“&TuÕW!-Ņ>*2{ē jr/«æ¶°±ĆŽ;YU ÖĪīŲŗ{SWpķŽ ‚ “„BAł„\{!ū§8\ŗŻGfJ"²ŹRź ³q ÅĀĘK[{MłRæx÷¾#±÷ Ę®³¶|pķ>ˆąŁ/qyķæČŻ»ęĪ•[H“‚l]TÉfečyYąou•_üEgb¢(e7²ŖßgŌŁ{bćꉓ8§Ą¾XŚ9Šõ’Ķ())įŹ•+źÆķģģųį‡xä‘G Ų*Ćņńń!--MgŁĮƒ9wī/¾ų"Ū¶m#77—¬¬,ŗvķŖqŸ>ūÄŽŽŽZ{€©ÄĒĒćååuW§†uīÜYkę€Juuµ:ŁŠ¹sēf÷Ŗ««qrrĀĀĀ™L†’ūß5’eee,X°€7ß|“9sęØOX³fĪŁ‘HwŌµkW­7˜ęø¹¹1dȐŻkkkKhhh‹ŪŃ«W/­km½ØÖDž{Æ®øt %kcÓν•™ēš5ē ~XŲŲ©×’[ŲŲāŚ}0UWÓ(K;Ŗń¬€°(‚fż‘ĖkžyĒi‘ ÅX;øPwK™ƒ_7ŗĻ{ĖkžICe)Š4*r++ū¦#UėōÓ‘U•¢T((:¹›¢»4 %8öFZņūڳĄéĻbćāAŹ;³šē’Ńć™·›Öb ‚ F©<żA3žĒĪÓW*3UIļ³øvˆ•ƒ ²źrŖ³›Ö#ŪvņĮ„Ū}’²—ŅŌ#ĻźóģGxšŁ¢@Cy1VöŽH,­“>=‡NĀwģćœū÷³4T–`am‹…•V‚ÜŹŃe£ EC½ĘČü½jØhš:\päGź ³o©ĖēĄ¾æ'$z„’ŚÜL~żģ9†-ŻJŠĢē՛ š¼½½Õ³;ŻÜÜXæ~½ÖŚšŽ¦k×®dddPTT¤uģį’ž÷?Ο?Ļ‹/¾H^^vvvųūkÕ,—ĖIKKcšąĮzkOrr²ÖõĘĘF^yå"##ļ*ąēēĒ–-[tž8vņäIõņ???ņóóÉĖĖÓZ2pó}GŽaüųń¤§§kÄīīīŒ5Š}ūö©€Ó§Ok%vīÜ©Ž`ąĄt÷6'D:Ź¬s(¤xœŽ«§FgČŃæ'Œ¦”¢˜ŚM™l KkB_‰”ó}cµž%«.Gbi……•öŗ¦[IKóQŹétß­2÷¾#pļ3YMõe(rÜūh•ćŽw$(H‹µGėļDÕ³°žżMZ©P -Ī„SæQZ÷;uķÉąw6Ŗtš ”ėä…dļŽ§®0›ĢćŽo$^÷k®'SŹ‘XX©g‚ †S~įVŽ.ųŽ™¬²T=Ū«2ólÓqzæ­’ē·Yg>Įō}īõŚü›)å2,Zø³v]ĮUXą1p¼V™ēšGšNŠQ*Õķé4`“Ö}N:ÅĮƒyę™g(--Õ: ¬%?_UUįįįlß¾S§N±gĻ^}õUN:Åć?ĄŌ©S±±±!<<œü‘“'O²’~–.]ʶmۘ={6 ĄĪĪŽgŸ}–mŪ¶qīÜ9ŅŅŅųžūļłśėÆ>|8Ż»wgųšį¼ōŅK¬\¹’ääd~żõW¶mŪĘo¼A·nŻīj@Ņˆ· ܁²QFEĘiüš‹¬ŖŒŗß:Õ×. TČń÷$eē“՝€Ęŗj*/Ÿ”ū¼7p 샓(y}ö^]ńū8eēéœJx+y]5G·0u1¶n^Ōäe¢l”aļ„ĻčG)>³Ło£’…Ēv0=ŪξŌę7%"|ƒń5Āć;i¬­ŗėŸ[õœ¾Ļ’›ņ 'Ø/É£(%‘ܽßŃ}īėXŚ;Q}ż²ŖrlÜ<ń9iI^S‚ä·‘†Ŗ2²w®š6v*;ŸL·§žJé¹C4ÖU«ė‘XXŠ÷łSqé¤E9źćA„öU“›¬Ŗ æńOi“W™y–O恍»7W7”q½”¢ˆŠWc):±‹śņ¦%ƒNž=ń>E½ūżT\>Kåå3ōŠüBDZœ Ī!č:†ĢuĖ~«ļ UWÓč½ųŸ„ģAZ’‡„­=N}qļ;‚K+—ÜŪĻ“Ļ³čū‡©ÉˤņņŹĪ's#iŻę¼‚kĮŌŽø‚¢^ŠWW¼īŸJń©½Čėk±vr#䉿P|śgŹĪ 'q5¾cŸ Ēüw8żĻpu¤&÷^Ć”Oō2jo\„āRJÓBzR[[ĖÖ­[5¦n[YY1vģX­Ķõ”J%{öģįźÕ«×ūõė§sž_ż•ćĒklāģééÉ“iÓ“ÖV²sēNć›ķģģ £sēĪ@Ó,Ī~żśŻóĻjnŗuėFBBÆæžŗĘF~ööö,Z“H}Ņ֌3xé„—ųä“Oxļ½÷€¦å¹'N$**Š'Nč|žŻŠŒŒ$77—ƾśŠ?ž}™«··7’żļ5J{0čvīæ’~V¬XĮūļæOBB‚śŗ‡‡ļ¾ū.‘‘‘@ÓŅį„„žś×æ2{ölõ‹ ųĆxēw€¦„ß’=ƽö³fĶRßgmmĶŲ±cY¾|¹ŗŽM›6ńüóĻ­^z,‘H˜0aß}÷Ż=ļ“`ŖD@nQ›—…“8WćZQJ"VŽ®TfžQśŠĘŠN&āą¢°¦~ń]§.Ę%dļ‹…µ-²Źnž‘ė;bZܖK«ß§öĘU: K÷AXŚŚÓPYBī¾5\ßöūŪ„•KØ+øŠ[Ÿūqė5 +›ßŽś9»W«ļ«ÉÉ ”¬@«Ye1Õæo¬Rž~‚Ģõāu’ü'ͧ,õČo €5ČŖJń5ŸŃbamGcu9„ē’ČٽJ}j‚„#™ė—!Æ’}Cęśé±Æaäķß@iźa²žēŠIųOZ@əż" ‚Š”Jeē“©/½qóEņ&ą2€¢”=źĖ5Ł)MKFbaAéMĖŪäõµœśĒ<ü'†ćą„[ļį(• źKņÉųö}ņ“6·°1 ĪżūYü'ĶĒ9ø?NMGrÕ—Ž =öM Žnżķ6ē>^Œ’ä8ōĮ9ØJ„œŗ¢Ҿ|Iżł”l”Qv>Y„öFŗÕ9—°./Ōø–÷óz,mpės?^]{Ŗ—į]śöT];Oēćé|ß8$–4TqeÓgälڜøó  T_O'kĆļA’¢”žĖkžE—‡ēįŚż>õfˆ9‰ßbaeƒ[ļa8ö”¾$Š_`źŌ©†† °²²ĀĆĆC#Į"‘Hųģ³Ļųč£ČĖĖC©Tāå儵7WēĪ›=-ė믿¾c[$ K–,aɒ%ŌŌŌPPP€‹‹‹Ö¾^o½õo½õ–ĪļæµžE‹±hŃ"¤R)7nÜĄĪĪooo#Œ%¦ IDAT­%½Ó¦McŚ“i444pćĘ ¬¬¬šööÖŚl0,,Œ°°0)(( ¾¾___­ß/¶nŻJCCłłłH$õꉑ„¦$€åo’o ؃õßO?ż”?’łĻi  ÜΰaĆHIIaĮ@O ņ2ts#šSF9ĖēҹsgŠ‹‹ ŻA½ĖåXY5Ū|šp#ŗ:øE-'±°ÄŅ^{Ÿ„\.6Ė»GŸ&ē³%½”)S¦°qćFœ›’½ˆU²Œ5Jēo€'Ÿ|’õė׫æ^²d ￯{ć[?o:Ę1ŚĖ&TN:Å Aƒš-”IļŽ½¹xń¢źK)pØ*r ģ·’•ŽōßæŻSŌžö} € häb€ ‚Ä‚Į[ßl±B&åĢæę7[.‚ ¦ĀŽ'ˆīó^o¶¼&ū"™7ž ÷ĘÉɉɓ'³{÷n­2777&L˜ qķ±ĒәH$<śč£×ĀĀĀX¶l™Ī³ćUk²U DPPÖŅh hśöķŪ’G„6"‚`J§ŽŸcčV‚ B›«ĶĖäÜĒā˜ö°uėVöīŻ«>ūšĪ9r¤ÖŽźÆ¼ņ <š99š÷ģŁ“ūī»O挚įĆ9ž¼Ö1sīīīZ‰'''NŸ>Ķžżū5– X[[óŠCiķ/Bū AAA0666L:µÅ÷9²Å÷†„„¢}ڃ.nnnZ³A0kĖCAAAAč D@AAA:‘AA3$“É(++SŸ‘.t\uuuüē?’į駟&*Źüö䨫«ćõ×_ēŌ©S†nŠŃ AAA03YYY,[¶Œ?ž˜Ļ>ūŒĀĀBC7IhæžõÆlŚ“IļĻ}å•Wxé„—ØØØĄÕÕUļĻ7“śśz–-[FjjŖ”›bōD@AAĢ̶mŪØ«« ¤¤„˜˜rss Ü*įN¾ūī;Ž?®÷ēīßæŸ¹sē²}ūv>žX»Ł‘‰SAAĮĢTWWk|][[K\\óēĻ'00Š@­šóż÷ߣT*‘J„\¼x‘„„f̘”>:1==#GŽP\\Œ««+Œ;GGĒfŸ›’’Ā•+W(..¦²²’„„lmm™1c•••ģŪ·+W®ąēēĒąĮƒéٳ§śIIIŲŚŚ¶mŪ(**bĀ„ \æ~Ł³g«ļĖÉÉ!99™N:ńŠC©ÆŸ?žóēĻ3{öl$ …‚––F}}=^^^ōźÕ‹įƇ#‘H8sę EEEŒ5ŠmŪ¶qķŚ5ęĶ›G×®]‘Éd$&&’žžŽB” _æ~Œ1BOƄł AĢžR©$))‰3gĪąāāĀŌ©Sńöö6t³A”Ķ 6Œƒj\“J„ÄĒĒóōÓOÓ£GµLŠåÉ'ŸTļÕ°uėV¶nŻ @aa!žžž¼üņĖ|öŁgŲŲŲąēē‡T*„  ///öīŻKæ~żt>÷›o¾!66€ķŪ·³}ūv¼¼¼˜1c'Nœ`źŌ©”””ąć惃ƒłłłH„RŽ}÷]Žyē–.]Jnn.łłłTTTąé鉓“/¼šYYYM³Ž~ūm\]])..Vó’ūßIMMåńǧŖŖŠ±cĒrīÜ9śöķ‹ eeedee1gĪ6lŲĄŖU«Xæ~=NNN\¾||šA\\\?~¬¾ēŲ±cĢž=›®]»rģŲ1 i3ŹÜÜ\u OŸ>|žłēZ#öƇš–Ø888šæ’żOcÓĀ0aĀõżööö¼śź«wżoŠQ‰%‚ ˜½ĄĄ@õ‘JCC«WÆę©§ž¢OŸ>j™ ‚ “‰DĀ”)Spttd÷īŻe …‚Ķ›7#•J5j”Z(“DYY®®®:wļ ¤¤™L†µµu‹ŸYYY‰\.' @«ĢĻĻkkkõL@ē¾ćĒēēŸ 33“ĀĀBFŒĮȑ#INNfįĀ…:t ʎ ĄøqćąėÆæ¦““”ŹŹJźźźHIIšfØØųųųØ÷?P),,dÜøqZm¹yĻįöÄ AĢ^hhØĪĪMcc#ėÖ­ćܹsh• ‚ “1cĘ0}śtõšl„RɎ;ŌAœ`œjkk±±±ŃYfgg‡B”PŸųŠR555:Ÿ+‘H°µµUßӜńćĒsńāEŠŠŠHNNĘŪŪ›ąą`FŒ”x9tč÷Żw:u`Ė–-ōźÕ‹>ų€#Gސ••EYY>ų`‹Ś]]]½½½ÖõŪm„(h3³ 4t£†³³³Öˆ\.gćʍŌŌŌč\+)‚ Ęźnś?#FŒĄŅŅ’-[¶ Tj~ē¾}ūÉdLž­ßĮ›7 ¼~łå­ė'NœhŃ÷ b€`āf̘Į?žČŃģ*ęo¾Œ—£ų•īČ*¤r.—JŌēŪŽj̘1ŲŁŁiur”J%»vķ¢¶¶VŒ€‚`”fĻžĶēŸΚsÅøZ‰£µv'tE52ʤH$³Ųļ$44Ö­[Gcc£FŁńćĒ©ÆÆgöģŁwP śįååEbb"GÅĒĒ___~ųalmmyī¹ēxķµ× ¦¦†ćĒ³nŻ:ęĪ{Ou………C’žżĀŹŹJcz·nŻųį‡xņÉ'éŁ³'R©”3gĪšŅK/M{4ŻĪć?NDD’üē?™5knnn¤„„©,īLDK‚I[øp!III¬\¹’ģŠz²+ź Ż$ĮLž<™7ß|³ŁņįƇcggĒ÷ßƕeOJJ¢””iÓ¦iĶA0¤„K—ržüyöģŁCnåķ;ÉBĒ`eeŒ%Kx蔇īźūz÷īĶĀ… łöŪo©Æ×ģ;9s¹\ĪO<”s¦€Š¶Žyē"""xąŲ½{7“&Mb͚5¼ųā‹ąYZZ2sęL>śč£{Ŗė‹/¾`Į‚,X°@cP$$$„ļæ’ww÷;>cüųń|žłēXYY1lŲ0õõ‘#Gņļ’›įƇkl^ųńĒ3gΆŖ¾fccĆŪoæĶ²eĖøqćĘmė[°`æžś+ļ¾ū.o½õ–śū—,YĀ»ļ¾ŪҽC“Š”°üķ’­`°KuÓ§Ÿ~ʟ’ügƒ4PZāŠ”C>|˜ŠŠŠŪŽ—‘‘A^^^;µJ“»»;żū÷æēŒzUUU›×Ó¹sgś÷ļĒū ©©©”••é½ -įėė{Ē^>|8“&MjQšžžž®sš¦IΜ9S$A0*J„’¤¤$NŸ>­øŻ¬±±‘“'ORYYŁŽ­ū]ppp«våĪĪĪęüłózlQ“īݻӭ[·;Ž×ŠŠĄÉ“'©®®Ö{Z¢G„„„ÜöžN:1vģŲVż;ēää°råJėĖ{õźÅܹsļjgyA?¤R)WÆ^„¦¦†=ząāā¢.+,,$??‰DBppš×é«TTT`cc£s½ŗŗ:²³³©ŖŖĀĖĖKk„źļ@×>r¹œŹŹJ$ nnnźėõõõźĶ umŠ—™™Iyy9¶¶¶įää¤ŃĘŚŚZd2™Ī“ ©_œ••4Ķ*prr¢¼¼‡f7L45½{÷¾yi„øT•@9PöŪ’JośļŠßī©jū¾@4r‘:„RÉÖ­[ļéœT}čŽ½;įįį­śĶĶĶ嫯¾Ņc«šōźÕ‹ “č^™LĘźÕ«ÉĢĢŌ{;ZbŲ°a̚5KÆAyVVß~ū­Ī)g”””<žųćbD“"•J‰‹‹Ó8O»=3†Gy¤UĻ8~ü8[¶lŃS‹~÷šĆ·hZ34=+V¬Š8 ­=Mš4Iēqgś–——ĒŹ•+uīųLxxøÖQl‚ “½¶JˆÅ=‚Ł3‡ąßXX[[3žüž“…“'Oņć?źuƒ¢.\ˆVٹsēX³fĘ™“‚ ĘĢ‚cįääDdd$ŽŽŽ©?11‘“y=~~~DEEéi½rå +V¬Š¹ėŗ ¦I$³&‚ż3Ē$@`` ‘‘‘:§Ø]¼x‘U«VŻvŖ­ ‚1Įæžu”$€§§'ŃŃŃtīÜY«,77—˜˜ƒ-'AæD@0[†žƒƒƒyę™gĢ*ųW1Ē$€jäęuv*W®\!..®Ł3xA ĶŠĮ’ƒ>hvĮæJGIø¹¹„óē,,,dŊwÜkIć'‚Y2†ąĮ‚f³ ‰.ę˜P€tźŌI«,''‡øø8k$A É‚’)S¦¤īöb I€ƒ¶y=ĪĪĪDEEįļļÆUV\\ĢņåĖ)))ióv‚ŠvD@0;J„’mŪ¶‰ąæؒwŚ©ø­“EĄŻŻččh¼¼¼üšCC7€Ļ>ūŒ¤¤$C7£C Įl:ų źpĮæŠ1$¶lŁ¢×$€££#‹/& @«¬¼¼œ˜˜ƒ %‚ ‚Ćé(IkkkĀĆĆéׯŸVY]]qqqźsŲżYŗt);wīŌė38Ąo¼”×gŽ«wß}—ÄÄDC7£C Į,CšæpįĀü«: pāÄ ½'T# Ż»w×*«ŖŖ"&&Ę`oA:.ü^GIXZZņŌSO1xš`­²††VÆ^Ķ„K—ڼÉW_}Õ.›> —•” ­%‚ć”J¬ZµŹ £'Nœ`ęĢ™H$½<ÓĘʆššp6lŲĄłóē5Źźźźˆgžüł:×J ‚ č›T*%>>^’F@•ˆ„°°°ŻėOLLÄŚŚšQ£Fµi=<öŲcŲŚŚ’œœ¬Q&“Éųī»ļ˜3gżū÷oÓv˜»}ūö”T*©ÆÆēźÕ«ģŻ»h:^SÕĒĢĻĻēĉąīīN×®]:t(VVwŅ)•JΜ9Ćłóē‘J„ųųųŠ»wo›;§§§“‘‘AAA––– 6Lēė]PPĄįƇ)))ĮĆÆЅ…s6&" ˜4üsLXYY1wī\6oŽĢéÓ§5ŹTń§Ÿ~ZēZIA}Q½ßjķõčŃ£Eš C&”J%;vģhó$€D"!,, KKK>¬Q&—Ėٰaõõõ 2¤MŪaĪ&Mš„B” !!„„ éFOOOžńšŽ{ļŃŲ؈³³3 Ō××Ó½{wvļŽ}W30ĖĖĖ ćčŃ£XXXąźźJyy9J„’… ‡D"A.—3oŽ<6n܈••ĪĪĪČd2Ŗ««;v,;vģĄŃŃ@Ż>gggÜŻŻ©­­„  €°’~', †!Ņ1‚ÉĮæń2ōém±@52tčP­2™LĘ·ß~KZZšŽźAø™1’S§N5HŻĘΐĖTI€£G¶y]‰„)S¦0yņd­2…BĮ?üŠ.ķ0WÅÅŔ––āķķĶ‹/¾Hii)„„„xxxššŹ;ļ¼ĆóĻ?Oyy9•••H„RN:EEEżė_ļŖ®>ų€S§N±{÷n¤R)„„„H„R>śč#V®\ÉÖ­[X·n7nä믿VßWQQĮ¦M›8zō(_|ńŠ43aɒ%¼üņĖ‘™™I~~>ēϟēźÕ«¬]»Vļ’^½ Į$‰ąßųŁŲŲ< °cǽ'f͚Å< U&—ĖYæ~=§NŅ[}‚  ‚S`Č#Ū3 MSҧOŸ®5ĖNՎŸž¹]ŚanÜŻŻqwwĒĀĀ;;;õ׉„`aaĮ;#«««ś{ ÄĀ… µfeÜÉžżū™8q"“&MĀŚŚhź·½üņĖųłł©Ÿ·{÷nzōčĮ³Ļ>‹„„%šū€ČąĮƒÕżš††^}õUžžyõ}½{÷&88˜k×®µźßFŠ/±@09J„’ķŪ·‹ąßؒ«WÆ6Čr€£G"‘H˜:uŖŽ–؞ēääÄīŻ»5Ź ›7o¦¾¾ž‘#Gź„>A:6ü›Õ²+V¬0Ųr‰DŅ.Ÿ?#FŒĄÖÖ–Ķ›7«§­«ģŪ·™L¦s¦€poJKKqss£sēĪZe!!!#—Ė5‚ļ;=O×…źSŽ®_æŽģG{÷īU²ņžūļsąĄvļŽMuu5 \æ~““4ʍןThb€`RTĮ’­›Š“üß=U 88Ų õ9rDļĒé@ÓČ“iӚ9t萎ė”c©ÆÆĮæÕÖ֒™™Immm‹īW% 5 =ūHƒ ā‰'žŠt&%%±uėV½ĪĀėČjjjšķ{:88 —Ė©©©¹«ēŁŚŚ6ū¼ŹŹJ i‰£»»»Īūœœœpvvš–/„††2}śt¾śź+¶oßξ}ūØ®®¦K—.-n—Š>Ä ĮdCšæ`ĮüßõʀW®\i÷ś9@XX˜^Ÿ;räH,--µ:9J„’]»vQ[[+F@Aø'õõõÄÅʼnąß€®\¹ĀźÕ«ihhPŸӒemĪĪĪ,Z“ˆŲŲXJJJŚ”„æSõ•€v™ Š­­-k×®„±±Q£ģųńćŌ××3{öl± |+¹ŗŗ"•Ju–ÕŌŌ ‘Hprrŗ«ēÕÕÕé,«­­ÅĻĻOOĻf 'Ož¤¼¼œ‰'²zõjrrrøté’ÖŒ]GH †%ž“`čą?00 4›-ķ(rssłļ’Ė|ĄO?żtW™}UĄ3T»%ėÓšįƙ3gN³# Ū¶m# ‚ ÜC’<š@‡ž”iŠsCCŠ“ĘYu,[Køŗŗ²xńbS¶ŪZ{÷™zõźÅĀ… uö‘Īœ9£39 ÜŽ­Ė*|}}©ØØ //OėŽ““4<<<ī*ÉāććCzzŗÖõĘĘFŅÓÓńōōĄĻĻŌŌT­ö¼łę›|šĮ@S²,((H+ųW(ųnO$£g ĮslwC”Ppżśuƒœ¬ …‚5k֐››KUU‡&%%实a®I€ŠŠPęĶ›§óŽcĒŽ±iÓ&ž‚ ·jhh`õźÕ žõ=[ŹTUTTh|­šŻR) LDDZe.\`ķŚµČd²vi‹©óššąąĮƒ\ŗt‰²²2d2ćʍĆĀĀ‚æüå/üśėÆTUU‘——Ē?žČڵkyä‘GīŖŽ‰'²’~bcc¹vķÕÕÕ\ŗt‰7Žxƒ²²2õóĀĀĀø~ż:oæż6™™™ŌÕÕQTTDLL ū÷ļgҤItķŚ•ŒŒ öģŁ£īļäęęŖO-ƽq ĮؙKš_]]Ķ7ß|Ć7ß|ĆēŸŽ&Ah[«ŖŖŅź åääÜõsĢ5 Š»wļf—ˆœ>}š„„är¹ŽėĮ|444l©“MšßŠŠĄīŻ»łśėÆILL4©‘ą[·÷2]•0ÄčķŻ‡ņ÷÷gŃ¢EźsįovńāEV®\I}}}»“Ŕ½ņŹ+¤¦¦Ņ«W/:uźÄžżū ę믿f×®]„††āāāB—.]xōŃG0`üń]Õń—æü…Y³fMPPĪĪĪōźÕ‹/¾ų‚%K–0qāD¦M›Ę›o¾Éæ’żoŗwļŽƒƒ^^^DGG3cĘ žō§?Å}÷ݧ>UĄĪĪNž<ɤI“LvšĖ\‰=£„ŚLĶԃ’ŠŠ āāā(..V_;zō(#GŽ4H‡ą^é3x5×=BBBˆŒŒdåŹ•ZkėĪ;G}}=sēĪU¹#‚ bŽĮæT*eõźÕź#Ą²³³‘Éd&3ĆąÖå[÷zšŒ««+QQQÄÄÄPZZŖ¦µ˜* ‘H1bD›×ēēēGTTńńńZƒWÆ^eŊ,\øPēL”Éüłó #==šš† @dd$Ļ<ó ™™™äēē#‘HčŃ£]»v½ć3.\ØźģķķIHH øø˜«WÆRZZŠ““”””Z{ ,]ŗ”×^{k×®‘ŸŸ½½=AAAõŗ»»sāÄ ŅÓÓ¹~ż:‰„.]ŗŠ§O²³³5ö8pą€A6É~'‚Qjļ3mo —࿤¤„ųųxŹŹŹ“ŹLm:”®uģ­ŁŌGu:€”Ö¹¶UĄßߟˆˆV®\©µqĪŋYµjįįį~? A~gŽĮMM +W®ŌZ³œ™™©×zŚ’¾`ų$Ą¶mŪŚ% ąééItt4qqqZ› ęęęĆ¢E‹pqqió¶˜ŖĪ;óĄh]·µµ„oß¾ōķŪ÷®žēć惏Öu<<<īųż... 0€Üö¾Ž½{Ó»wok_8°-Ś’X cž-ZŌź­  €˜˜Į=šöönÕóŪ›®@k:CŠōAŃ¢ģu[h«#U# ŗ:7W®\!..®ÅGJ ‚`ŽĢ1ųƬ¬$&&Fē†eŖŻÅM>–ÜL•0Ōr€mŪ¶qģŲ±v©ĻĶĶØØ(}ĀĀBV¬X”5C@„ö!‚ŃILL4łą?77—ŲŲXŖŖŖ“Ź‚ƒƒ™;wn«žoŗ6±km Ÿ8|ųp›$T# ŗ:z999ÄÄÄčüż”ć0Ēąæ¬¬Œ˜˜ŠŠŠ“Ź|}}Mźt}ĪPéHIggg¢¢¢š÷÷×*+..fłņåķ~L¢ " ™Ż»wsšąAƒŌ­Æą_µĘM×oļŽ½õ²“ĄŚb€Š­­-‹-2»$€»»;ŃŃŃĶŽ€ÄĘƊAč T»ż*ų5j”ŽƒqÕīąŗ¦øwéŅ„Ł]ā•¾gØt¤$€½½=‹-Ņ: ¼¼œåĖ—sćʍvi‹ MD@0ęügee±jÕ*»ÜŽīØ8S k€¾:Cvvvf™pvv&22___­21"“*ųĻŹŹ2HżĆ‡',,LoI\€¼¼ß{ōč”UV]]Mll¬Į޽„ŽH$£`Įzz:«V­¢””A«lŲ°aĢ™3KKĖVÕaHm9@Å\“ŽŽŽ,^¼Xk#h‰‰‰”  @ļõ ‚`|Œ!ųŸ9s¦^ßæsrrˆ×Śų WÆ^f3óMߟy†>"°=“ÖÖք‡‡ÓÆ_?­²ŗŗ:āāā ö7!HgĮ’ٳgY³fĪóGŒ”÷Ī–!čū€ę˜k@õsuļŽ]«¬ŖŖŠ˜˜1"fĪƒ’ŪmlڧOęĶ›g²GŸ¶Õ€›¹¹¹< püųńv©ĻŅŅ’§žzŠĮƒk•©žäČ IDAT6.]ŗŌ.mš·vķZ Ż ” ‰€`PęüŸ8q‚„„SänjĆōéÓM>ų‡¶ŪPcHüōÓOz® įįį:ļ©««cåŹ•źó²A0/2™Ģģ‚’‹/²råJĖŽhŅĖŽ ķgØ: °uėÖvKXXXšŲc1räH­2™LĘwß}Gjjj»“„£KHH`Ɔ Z×ßxć Ž}÷ŻöoP+}žłē:tČŠĶ0 " Lbb¢É’IIIlŻŗUg'aŹ”)Lž<¹UĻ7&ķ5@E•е{p{8tčP›$¬¬¬˜;w.ƒ Ņ*“J„ÄĒĒ“‘‘”÷zA0™LĘŖU«Ģ*ų?wī\³3ßīæ’~üń6żŒh핀ޕH$„……1zōh­2¹\Ά ųå—_Ś„-Y||<+V¬Šŗ¾fĶbcc Š¢Öy’ż÷ILL4t3L‚é¦e“–˜˜Č Rw—.]X°`^‚’Ż»wk]—H$̜9“aƆµźłĘ¦=öø•ÄÅő““Ó¦ué¢Ź$O™2EÆĻU€XZZ’’’¢Q&“ÉųöŪoyņÉ'u®•Į“:ų6l˜Žƒ’Ó§O³yóęfg¾™KņūÖϽ¶Nhؒ111”••µi]·R% )ÓÖT%ŽŽŽZ})…BĮ?ü@}}=£Fjó¶‹²²2²²²4hŁŁŁ¤„„!“ÉčŽ½»Īž@}}='Nœ ØØ777ŗtéBĻž=ÕėR©”““4z÷īMUU)))xzzāāāBmm-Čåru²„Gøøøąåå„õ»®P(HOO'''‡ŠŠ |||>|øF_:##+++HII!??†Ŗ3±•››Kjj*uuuxyyѳgO<<<Ōå7nÜ °°ŠŠP®\¹Ā™3gptt¤oß¾źĮ!„RÉ©S§hll$??_żó 8P½÷Vmm­śßŹĮĮ=zгgĻ{~­LHķĪŠĮDDööö÷ü „RÉO?żÄ‘#G“Ź,,,xōŃGu®o3uķ¹ąfęœ˜5kvvv>|X£L.—³~żz³ż]„ŽĀ‚’Y³féõ½śŲ±clß¾]gRų”‡bĀ„ z«Ė”Je»ĪPqss#**ŖC$ )adcc£õ;„T*ٱcR©Ōl~§īdļŽ½Ģ™3‡Å‹³bÅ lllŌĖk&MšÄ?ü >I#!!gŸ}–ŠŠ \]]©­­„¾¾žŠŠPvķŚ…ÆÆ/×®]cčŠ”Ģ›7„„d2óęĶ#==]4 :hźŸOœ8‘ččhœœœŲ¾};—/_fśō餧§k“×ŁŁ™o¾ł†¹sēšĀ /PWWGQQéééŲŚŚR__­­-_|ńŃŃŃ@S Īʍ±±±ĮŽŽž²²2,--łæ’ū?–-[ĄŹ•+łč£ē?’łŠŌµ““äµ×^céŅ„466ŖŪ°bÅ õ¬†ŠŠ \\\ˆ‹‹ćÅ_¤¶¶{{{źźź7nŪ¶mĆÉÉIÆ¢i0ķ¹Y‚É1õą_”Pšć?ź žUS»Ķ5`3Ä UĄÜ–Ün©ˆB”`óęĶ$''ė½^AŚž9’IIIlŪ¶Mg`fVZ{/{»™* ąīīŽ.õݬ½—@ÓfɳgĻÖłļ»oß>³-ĶŁŃ£G9wīR©”źźjÖ®]˾}ūųōÓO¦ Ÿ}öYʍGii)„„„H„RRSS),,䫯¾ŅxŽO?żD||<999,_¾œ­[·’™™ÉŲ±c=z4™™™dffź\’šÜsĻQUUErr2µµµ(•J®^½ŹčŃ£‰ˆˆ ““T}ļ”C‡˜2e H„R²³³™1c/¼š‚z'!!õė׳nŻ:jjj(--„””eĖ–ńį‡rõźUõóJKKÉČČąźÕ«Čår²³³Yøp!’ś×æ8}ś4VVVźö»¹¹ńĒ?žQżµ““åååüńT'KT‰’-[¶pųšaāććõüź™‘Ś!ƒ??æV’r¹œ7jMنŪoīf. ŁóM@ó›EŖF@Ħ6‚`Z ½įŸ¾ƒÕĢ7]˜j曹MÕ6Ō¬7cHœ8q¢Żź4hO<ń„Ī撛ŪoÉ\½łę›ōļßh:FxīܹL˜0AŻ©®®ę‰'žąĶ7ßÄÕÕUż}żśõcȐ!\¹rEćyoæż6O?ż4]ŗtĮŃё.]ŗ‚ƒƒööö„„„¢³\[[ĖĻ?’Ģ‹/¾Čˆ#Ō÷ņžūļ#•J9yņ¤ś~WWW>ųą\\\š÷÷ēĆ?D&“±wļ^õĻōā‹/2gĪu?ŅŚŚZ=“ąÖ÷Ķ/¾ųB½)“ææ?Ÿ|ņ J„’Ó§O#‘HŌķ·°°ĄŻŻ]ć묬,¤R)Ļ=÷œŗM666̘1ƒžóŸŽĖKdņÄ”]:ųŒŒlUšßŲŲȆ 8ž¼V™ ,ŠyĘ»91tgĢw94€XZZ²eĖ­i»vķ¢¶¶ÖlÖÕ ‚9S’™™™©æ-‚’;v蜍diiɜ9sŌĮŠ91ä¬7C/Ų²e Š“‰d{ ÅÖ֖uėÖ!“É4ŹŽ?N}}}³3̉®=¤ś÷ļÆ~=:uźÄ7ß|Cjj*›6mB*•ŖGŅ=Ŗ5§5ƒS×®]C”P¢U6hŠ 233ńööV_8p 666÷įģģĢ7˜1c'Ndß¾}”––R]]MCCƒz9äͧŠŲŲŲŠ­[7ē¹ŗŗbaaAeeåŪ€Ææž:O<ńāććĆ«Æ¾Śņ3#B›Ū³gI’ |÷Żw:;sŽŽŽ,Z“__ßÖ4Ó$CgŒ# ‘Hxä‘GōžģaƆakkĖ÷ߏ\.×(KJJ¢””iÓ¦™Å±’‚`ŽĢ-ųWmĘvózakkkęĶ›g¶iz֛JGKōźÕ‹ šķ·ßj/yęĢźėėyź©§LśxÉ;qvvÖŗęāā¢xe23fĢ`×®]x{{Ó©S'puuÕĘUZó~ŠŠŠ s?KKK­Ä@sėé]\\ØØØšŽĻ £¼¼\]]±²²Ņ™dhķėģįįĮ?üĄūļæĻóĻ?Æž²¶¶ę &&†īŻ»·ŖSdŽ)4ĮąöģŁĆžżū R·>‚Õ±lŗ:sĪĪĪDFFvˆątĻ0TŽŠĖ’’’ŲµkW›<;44“ٳ³;ʦM›t¾‚ –¹’ŖĶHu’666̟?ßlƒ0ž¤7~9Ą–-[tž“•ąą`"""ŌŽŻģĀ… ¬]»Vk†€9ѕ詯ÆW×Ū·og×®]ģŪ·7npžüyRRRŲ·o½zõŅk[T»ņ×ÖÖj•) öīŻ«1Ó\’J*•Ŗļ¾ū.«w÷OIIįĖ/æŌkŪUyäŽ=Jii)UUU¤„„±aĆ®_æĪĖ/æÜ&u;‘ڌ©’555ÄĘĘrżśu­2www¢££ufZĶ•1u†Ą¼“½{÷fįĀ…:Ŗ<}ś47nԚ! ‚į˜[šÆ:Ž4--M«ĢŽŽžˆˆ£uęÄ–½ŻĢŠI€M›6µkĄßßŸØØ(£į/^dåŹ•Z3ĢÅÆæžŖu-55U=ą”‘‘«««ĪM7oŽ@Æ%ī4 ąķķ………Ö ŁŁŁLœ8Qć$£ŒŒ ­×%//ŅŅRöO˜0Ac’hZnŠZ·ž<›7o¦[·nź„‘““}ūöåŃGeśōé:ßć:‘Ś„©’UUUÄĘʒŸŸÆUęééITT”ĪéPęĢX¦CŽL•čŅ„‹AźOJJj³Ż‰U# ŗ~żõWÖ¬YcÖ# ‚`* ü:TÆĮæję[FF†V™““‹/VoČeΌń3Æ£%¼¼¼X¼x±V MīŠ+tŽL›ŗ÷Ž{ .柔˜˜Ø^zčķķMEE…F’£¾¾žĻ?’œ³gĻŅŲŲŲ¢zÜÜÜHOOæķf„VVVŒ?ž/æü’_~łEŻļ())įoūÖÖÖ§ń׿žU}Ō^yy9ƽöVVV<ōŠCźöļŻ»—’’õ÷]æ~×_ Åķæ•»»;ĒŽÓ8•ĄĻĻ¬¬,–.]JUU•śś•+WŲ³gÖž…HzgźĮYYĖ—/§°°Pēó£¢¢t~™;c Q±³³#22Ņ`I€ƒ¶YĄßߟˆˆµŹ.^¼ČŖU«ĢvDL1’>śØŽŽ‹ėźźˆ×9ēęęFtt4>>>z©ĖŲŪ¬7cHœ>}ŗŻźōšš ::šĪ;k•åęęÓ¢ĶąLɀčŪ·/ĪĪĪ8991{ölF„ž®žųć3|ųpyäÜŻŻń÷÷ĒÅŅ>ų€°°0Š‹‹[TODDeeetėÖ ‰D‡~Øó¾’ž÷æŲŁŁ1tčPģģģprrĀĆƃ 6šÉ'ŸhĢÄ6l[·nÅŃёN:©ļūōÓO՛e/Y²„ŒŒ |||čŅ„ źł5wć¹ēžćĄtī܉DĀĮƒ¹’žūyį…ųūß’Ž‹‹‹śß4$$„ņņr>ųąƒ{ŖĖŌ™ļ‚A˜zš_TTD\\œĪ.\ŲŖē›2cķ ĮļI€+V››Ūīõ.\ ¶¶–^½z1xš`õ£#ĒŽćŌ©S\¾|¹\Ž··7#Gޤ  @½&æk×®ģŁ³§Ł×éį‡ęźÕ«¤¤¤PRR¢>}ą“O>Ń8ޱgĻž\øpsēĪ‘““Cee%:ubȐ!xzzj<300#GސœœLNNŒ1B#q8qāDnÜøARR„„„ŲŪŪÓ³gOś÷ļĻŃ£GÕKžzź)īæ’~mOLL¤G×žļ’ž™3grįĀ***čŪ·/‰„’üē?¼łę›\¾|™ģģl¬¬¬čڵ+Ɔ 3ėĶ$o§cžŌB›Ų»wÆI’¹¹¹¬\¹Rēt²ąą`ĀĆĆu®Éī(Œq:äĶ Ų·o@›$TĖNāāā4¦¶äääØ;?ŗÖJ ‚ Ŗ5ņ† ž‡ ¢×ąæ¼¼œøø8#o^^^,Z“H}†vGaLßźāīīn°$€B”h÷$€³³3QQQ¬ZµŠģģl²ŅŅRbcc‰ˆˆŠš)ŠŠŠ u,)čÕ«×m7ō“H$ 2„!C†h\&88~ųįŪÖćéé©u“ń­Ļ„¦ßż2pąĄ;¶ŻŚŚš1cĘÜö'''¦NŖużP’wPPAAA:ææ¹¾V÷īŻuīźļėėŪa6ķn ćy'LŚŽ½{łłēŸ R·ŸŸ_³k„[źvkÉn·![GbĢ£!*†^°oß>u"@ßn·ńdaa!±±±Z3AŠ?UšłņeƒŌ?dČ{ģ1½½’±|łrĮ—.]ˆŠŠźpĮ?÷¬7www""" ņśØ’ķ¹ĄŽŽž… ØUV^^ĪņåĖÕgĶ«$''#•JŪ«‰­2dȾłę“Ń÷ŅK/mčf- B«2ų÷õõmöؘ–ŹŹŹjv-õķŽdėhL”3†ßpß¾}mö÷ ŃuņAqqq³xAōĆ܂’¼¼ŻØ?č ĮŌ`ŽI›;Ž€Ü|¶Æ……;vģh“¶‚9klld͚5\¼xŃ õė;ųæxń"+W®Ō¹ģmąĄbęŪoLi€Š”“ß’}»&,,,xģ±Ē9r¤V™L&ć»ļ¾£øø˜††®_æNZZZ»µMŒ™q÷Ž£Ō–kœļDĮRR[¶lŃśp—H$L™2…É“'·¶™fÉŌFCTT›źģź¶LÜidõźÕdddMÓ 333EH’ēĪkvęŪż÷ßĻć?nō‰ŻöbŠIočxI‰DBXX£GÖ*“Ėåœ9s„Rɉ'ųį‡t.ł„ŽĘųßɣҖ»œß‰¾‚’Ż»wk]·°°`Ö¬Y:?@„&¦8¢āččHdd¤Y&T# Ŗó{o¦Z³œ––¦Ń Ahs žOŸ>MBBr¹\«l̘1̘1ĆdŽÓۃ©&½”c&šĄQ*•ŲŚŚRSSCEE‡j·v ‚± ”ÅL9ųW*•ģܹ³Łą’±Ēc芔­m¦Y3åG ­v"–H$̜9³Łõė×sįĀjkkEHī@.—³vķZƒ’ƒÖkšģŲ16mڤ3Ø}蔇ÄĢ7Lż3ÆsēĪ,^¼øĆ$ąöK8ĒĻÕ«WŁæ?eeeķŚ.A06" “ČĮƒ ü·ęØ?…BĮ?žČ‘#G“ʬ¬¬˜;w.ƒ jm3Ķž®Ž£)L‡¼™”“{öģiÓ$@s# …‚;wpņäIŃ„ېĖå¬Y³†ōōtƒŌ?xš`fĻž­·`3))‰mŪ¶é\öʄ ōR¹1‡Ļ<³Oäåå±nŻ:bbbųņĖ/INNĘŽŽ^ē½={ö¤¦¦†-[¶“i›ĮŲ™Ö;™`Ō9rŽTĮ棣ć=}æ\.gƆ ¤¤¤h•©6QėŪ·ok›Ł!˜śhˆŠ9' łÕėgiiI~~¾č ‚†žCCCõ6ņÆT*łé§Ÿšłöč£2jŌØV×c®Lu€[™{ĄĻĻéÓ§ćėėKAAÅÅÅ\ŗt‰sēĪé| ČČČ0ŲģA0¦÷N&“«ęÖĢ·‡Ö’¬_æžŌŌT­2Õ1jŻ»wom3; S^y+sOÜīĖ!C†PXXHFF—.]j³6‚©1†ąΜ9z 2•J%;vģąšįĆZe–––<łä“ 2¤Õõ˜3sIzƒł'œœœ˜6mƼņ C† Įßß???Ž=ŖsĆK€uėÖ!“ÉڬM‚`ĢD@hVRR»vķ2HŻ>>>­ žU; Ÿ?^«ĢŃёŋŠŚfv(ę2¢bnI€ššRRR8~ü8IIIŌÕÕѧOÆQhh(ÅÅÅl޼Yē†`‚ŠŃ˜SšÆ:ó<99Y«ĢŚŚšššpś÷ļßźzĢ9%½Į8’gĻžmÓz\]]yģ±Ēxå•W˜HXXŌ××ė¼?66Vou ‚©0§ą_5ó-##C«ĢŁŁ™Å‹Óµk×V×ӑ˜kŅ~O8;;·{Żķš÷÷ē¹ēžćÉ'ŸÄÖÖhZ6·’~ŅŅŅøråJ»µEŒHj†ž###ļłĆج¬Œ+VP\\¬UęēēGTT”A²ŻęĜ`~I€€€žš‡?Į!C°µµÕ¹!Ryy¹ĪQCA0Wr¹œµkךEš_WWG||<×®]Ó*sss#**Ź`{˜2s’Ģóšš **ŖĆ$ éļīwŽažüł2yņdŁ“i“Ī„ ˜+‘Ć’žžž­ ž‹ŠŠX¾|9„„„Zežžž­ŚLPų¹N‡¼™9&ŗuėĘK/½DÄ’³wēĻqœēĒæŻ=÷=Ü ī‹$@R$Ń2Eń’x@ÜĢ}ݽ? 0šˆ8Ļē'¦§ūįģ÷}Ÿ~ßē}é%7¼oš&Ææžŗt€D]Xü_ŗt©&×?t芶 žS©Ƽņ 333Žklläė_’:”PhĖשGņ €Uõ˜ęæž×’Ź—æüeB”±XŒ÷Ž{oĒć¢V­Ž»x µüoeŚģģ,ßüę77-āŅ××ĒĖ/æŒÓéÜj˜‚śč Į£›€J"ąßųĻ?’üŗĮĒ™3gˆF£Ņ¼Ż0ų’Ņ—¾“-ƒ’Õeo‹‹‹Ž[Uē÷ū·|zUIoŲI€óēĻļųµEatt”o|ćüń’1ļæ’>™LfĒ㢽;™ø/{yš?99É·æżm²Łģ†÷öļßĻ‹/¾ˆĶfŪj˜bÅ£>r­G9  ( O<ń’óžOžyęģv;GŽ!‹ńĘoHH<²„Į’źĢ·H$²į½ŽŽYö¶ ź%µÆ š’ų5I@åßōŲ±cüõ_’õ¦Ū ń(z4ļdāžüś×掳ƒ’ėׯóŻļ~wÓ¢f‡ęĖ_ž2‹e«aŠ56›šØv†`w$~ń‹_<“óŪķv>ūŁĻņ?žĒ’ąłēŸ§­­r¹\³@„x˜t]ēūß’ž#1ųŸ››ć•W^!‘HlxÆ··——_~—˵åėŌ»z™õ¶j«ż²­X PĖZ4š¦jv}!vR]ސŹå2 äółZ‡R3/^¬Łtß­62—.]ā?ųĮ¦ÅĢNž<ÉóĻ?’H7ҵRO3V­&¾żķoo:ĶöaūéO Ą'?łÉ‡v ‹ÅĀÓO?Ķć?ĪŪoæĶŪoæĶģģ,ķšbg„Óięēēė¶Ķ3 ƒ·ß~{Óuņ;a;’333|ē;ß!—Ėmxoxx˜?żÓ?Åjµnł:¢>Ū¼ÕžŁ·¾õ-R©ŌŽ^[×u~šƒšĀ /022²£×¢ŽŌU ŸĻóÖ[oqśōéŪn‡%®­žĻ;Ē?żÓ?mš™ņÉ'ł½ßū½G¾®•zš¹Öją[ßśįpxĒÆæI›Ķʧ>õ)>ö±111! €G@8ę7ŽąźÕ«›ž’ßvž'&&ųŽ÷¾·i’劔Cüɟü š¦mł:¢¢^ۼݐųÓ?żS<ø£×¢žŌM ‘HÜv›8±3¶ŗĘģ½÷Žć_’õ_7m”?ń‰Oš™Ļ|f«!Š;Ø·éky<žj‡ØVI€Ó§O w욧NŚ±kŻJUUÜn7:tHvńxććć|ļ{ߣX,Ö:”ŗµƒ’Ė—/óżļәo=öüĒ\ƒÓTĻm^­“ƾś*­­­uuļ÷x<ōõõqųša©_%ŗŗH†Į«Æ¾*ƒ’Śj•Ł_žņ—Õ'”k)ŠĀg?ūYž~śé­†(C®Uė$@$Ł“ą×£ģƒ>ąß’żßłÜē>lj'jĪž‘L&yõÕWeš_C£££Ū6ų?ž<’ōO’„®ėŽ{ā‰'ųżß’żŗŗļ”zoój™0M“łłł½ęnpöģYŽ|óM¾š…/088XėpÄ#¬..\X·öĻšŅ>Ō‰Ć-ŪĆ­2M“L<Ķģ•)йķ]ń°’ŖŖņš20Ų!õ:r­Z'źQ>Ÿē‡?ü!…BA}÷č?’ó?×­÷ķk¦„§›Óõ3~¹#®i¼ IDAT½¬“ǘ½<…¾ÉSõ­å…^Ų–ūćoū[~üćĖĢ·Øē«šššŖupv: PÆR©ßżīwyńÅ% šŗH¬ŻZÄę“Ó|?ŖV_—{įoāš8¹üĪĢM¾±•Įæiš¼žśė¼óĪ;ŽSU•?ś£?āčŃ£Ū¦øŅŖxI«ŻŠ+ą•±ŁÅ|‘l"]}żĘo088Hsss £ŚżLÓäĀ… Õׁ–:öÖ0¢ŻI³h4“7b±j\’ąź¶w;’§Nā'?łÉ¦ƒ’ēž{ŽOśÓ[¾†ø=IzW477o{Ąésćōŗź²±Ó4É&2äӕm­WwEųĘ7¾!ĖÄCQ €„„„źŸ­!ü߁ŻåĄō’ŠlÜ^č~meĶæaüčG?āż÷ßßšžÅbįK_ś’ˆŁaõ>r­ķLZCtö£Ŗõł]ŽIb1Źäł1LÓ¬Vr’Ć?üĆZ‡µ«åóy2™Lõu°­±†Ńģ~¾Ę šÕ‚^Śś,€ķüßiŁŪē>÷9žzź©-_Cܙ$njnnę+_ł ßžö·×Ż_DĒžšŗj³½ī®fĀāäóצŹī-|šO<ńD¢ŗø“­­˜k±H…ܻѬ[Ļ ­ž}>ß}V×užļ’żæ›žm6ń!ƒ’ĪŠz«I€­<‘Ö,]#}2ųæ KĮö¦źė±±±F³7ÜZ!~;īē4„ņ’p«¶kĶæiš¼ńĘ·]ööGōG2ųß!2ėm½ÖÖV^~łå-ęs¼2ųæZzŪqśn~æ×Æ_Æa@āQVæ½wńŠleš_.—łž÷æĻŋ7¼ēp8ųŹW¾ĀĄĄĄv„)ī“t†6ZŻ"šA“Kf$Ż…;ą©ž9™LÖ0!6·:ųßź|¦iņŚkÆńė_’zĆ{š¦ńĀ /pģŲ±-]CÜ;™õ¶ŃV“.æēīÕ9ך@"±õŁøBlFzžb[meš_,ł‡ų.]ŗ“į=·ŪĶWæśUŗŗŗ¶#LńdĄę¼^ļ'ź½3y/Ö~G›UA¢–¶kšo?üįy÷Żw7¼gµZł‹æų FFF¶t q$°¹ÖÖV^zé„JČ×wwkĒ6{š"ÄvŽ»Ų6÷:ųĻf³~–Ļēłūæ’{ĘĒĒ7¼·:ĄjkkŪ¶XÅż“··•$€boŚ®Įæ®ėüą?ąĢ™3޳Łlüå_ž„TÆĶŚųØLūå•WX\\Üp\ss3/æü2~æĖńŠ­“÷§­­—_~Y’Bģr'÷ķ~’?žńYXX`qq‘………MwŲæ?/¾ų"6›m;ĆŪDž†ÜæÕ™’bļęĻžģϰX,÷żYÓ4ł—ł®]»†aüĒü‘HdĆq²ģm—‘6ļžI@ˆ½Aā¾<Čą’ņåˌsöģY†††6ĶŖ>|˜/łĖŌĮ;Cj<I±wmeššžūļ³°°Ą™3gPUuÓäwooÆ šv!I<I±ūI@ܳüėŗĪücĘĒĒyī¹ē6mNž<Éc=&ƒĖ]ęÖΐüūܟÕ$Ą’ś_’‹B”Pėp„w°ÕĮ?Ą›o¾I2™ddddÓ„m sįĀ…źūķķķ’(Ü%dÖŪÖ¬īšw÷w›~—BˆŚ‘€ø«`0ČK/½t߃’D"ĮĻ~ö3TUݓѼzõ*™L†#GŽ Ŗ*ū÷ļēæü—’"v)Ilßļgxx˜óēĻ×:!Äm myšæ°°Ąo~ó¬V릳ŪJ„ׯ_gvvØlż÷ÜsĻųšb{É€­koo' nZ÷BQ;’xˆ,š›ÅJ¶«ÉõŻ7™|fKē°Z­|õ«_% Ž÷gæóļ`šę¦ ę{ļ½GGGCCC8p€ßżŻß„±±qK±Š‡ėÖΐL…|0RäR<Ŗ\v'¦i’+ęwüښŖį“;Hē¶Öę…B!žüĻ’|Ėõh^}õÕJ\› žĻœ9C8ęӟž46›O}źS<õŌSRg—‘%ŪĆjµÖ:!Ä-¤µyˆ|.M¾WfĒo{ŒĒį&ąö1™ßöė?Ö{·/żvKēčģģ| Į’ŪoæM8ŽšsÓ4 ‡Ćœ’łĻÓŽŽ¾„ÅĪŲ¬€B¬jšŠ żŽ €¶`3År™H*ŗ­×vŲō·ōpnņĆ-ēšįĆ[ˆæöŚkD£›’żĘĘĘįäɓ<÷Üs<łä“2@Ś„d €āQ% €;Š4 ŻĶbE7u¢©8··ĆE±\$šN ėe¼Üv†a-äp;\„Ė”u½r.U£ŁBU5²ł,±L·ĆMk°æŪKŁŠYŒ-¢Šč b³ŲČrDÓ TEĮļņ¢j °œŒāsyń:Üõ2±tœ²^BŽ «x6¹-ßĮƒtLV·:ڌ¢(=z”ßū½ß£§§g‹Ń‰$Kö6EQ8°o¦ÆŽń8MÓŠWī[Ūi_؍„d„B©øķēŪĆewa³XqŪ¤ņR¹ Ķžv«\1Ļr2Ši؊Js §ÕA”\Ą0M Ć ‘Ma¬Ü'œ6MžFLÓ ‘I‘Ģ„yh 6SŅĖX-bal¾4U%•ĖĻ$pŚ8¬vœv'ŁB–D&E£?„Óę æ‡ahš…#šŖ’+nO]­>į-•J¼ūī»›¾W,ā™gžį“Ÿü$‡cK×—,ŲŪÜmĮĘę'n{Œ¢ØX-Š”]Śß1Ąåٱm?ÆŪAę2ŻĆźąńĮ#=•5éŻĶt7u`š>§—ż‡hoh”»©ŻŠŃT#½‰e’ø.:+O·öbµŲ0 ī–Nö…ŚP‹Ŗ”**VĶŠĀc½#ų]^LÓ`_؍Į¶¬ 'Šä­źhh„浏ĆĶÉĮĒ…Įö^ZƒM¦AosšZ›Ŗśļ¾ū.™ĢĘi˜@€—_~™æżŪæ•Į’$Kö6ӄH*v×ćž:žP®ņ6`ÕäIēntū8Ņ{M³PÖĖé9€Ēį¢P*Šč r`ßū÷ ąszȲX5+ƒm½DÓqBŽ A·‹fį±ŽJå"…r‰ƒƒų]Ž ×Ó4‡Q…’^f°½—–@^§‡ĒśF±Z¬”ō2#]ĆÜ> „·CŻ8¶rL”T¤»¹cGæ«Ūyė­·6M )ŠĀ'>ń žū’ļ|ę3Ÿ‘Į’°Ł i÷ö …R¹D4}ē6Ļćpq cš”DņI1O±{É €»ˆ¦ć\»ĄP{?gĘ/`š•F”ÉĀj±ā°9'–™‹. ­ ĶKlk¦Ś,V–“QrÅĖ©VĶJ¶%œŒ Ø ÓĖsX-V¬ Sį™ŹµSqŽöāĘņ,ÉlŗšI<1p„¦ÆQ*W2–!o—ŻA³/Ä;—OcbNDxśąć;ųMUd2~śÓŸrźŌ)öķŪGww7‹…gŸ}–O}źS;Ų>² öFŗ†1 ·ĆÅūćēéoķ!ąöabO'_˜`°½‡OeéN¦ÅewńŪkgiņ7²_Āis0ÜяU³ ›“įir…#]C8lN įśāé\–įŽ~Vŗi0Y _ā`ēŗ”tū9uõśZ»hšTŠ—%³)®ĶO (*Ćķ}xœnŠ„"v«Ō>Ų f–ē¹±4ƒ¢Ø8ķN>¼qØ“…O Ąnµ1™'™MaÕ,“7“¬ĢB«°hō•¹bD&aš”Ź)ün/łb…X˜&_ˆh*Īb| Ż0hņ5°œŒ2]d*< €ßķ彫TāHÅųŲšq¬+Š¢T)é%ŗ÷ķŲ÷“™H$ĀÆżkΜ9ĆńćĒ«÷ČŽŽ^¾ųÅ/Žw!]Q[2 ¶¬+#ChŖF:Ÿebńū÷ `·Ś0M“…X˜™Č|õ8»ÕŽ¢(ä‹yJz™ė SÕ{LČ×@_K¦i¢Wē®ć¶;jļĆnµńäžœæ€Óf§æµUU)ė:‹S$²)ŽöbšP,¹:;Īš¾œ6¦i²”Œ2žĘisr sUQÉóØņ»"v1I܅®ßōXTūnf s…< `·Ųš:Ü“›PPXŒ/SZÓø2w¾Ö.V;ĶĀÄā ²…ģŗc,Ŗ†Ėīä`ēpõg±t¼‡qó‰‚U³0ŌŽĖjŪT*—+ •¢`bV7ōßvåõ×_G×užzź)ŸūÜē‘Fó €Ś ł‚\š¾Ę„™k“7“ ©§ĒĪ£(šXļA²®ćqøyļź˜Ą@[7‘•©ŪAweŅßÖĆdx†x&Żjć`ē0\æĄé±s6tŒ…ų­&♓įJż£}£L†§QWśŌƒm½üvģ,ŗ®ōųi 4r}aŠ\1O_Kwµvȱ¾Cœ¹~žB©ˆŪįf¤kˆß^=[‰ćņūd YŪūˆ„ā\Œ. **'‡Ž² 3ŌŽĒŌŅ,‘dÆÓC[°¹fߝw# €ūP,—ø8}¹Śéčmėø.rÅŁlŠR¹L¾˜_78R•Ÿ‹S—ŹŚČƒC+O=LT„Ņ õŁB¾z#R•žęĪ qŹE.ό‘/UÖūŁĻV·÷YP{†n°”Øl§äuz°jz[*÷EQš8Ü,%£øķ.ŚZŠMƒ€ŪO$¹~d¶£·„“hŚG¾˜ēĆé+›^ĻėōĪgń:ŻÕk8Vžä/¬Üæ¼N7ŖŖVć°Ø» —ĆÉ\dØÜ;ć™ķ©K"vFI×)”Š|“ņ»” 0Ōч¢(ølNā™$ł\åIŪ­É@Ć¦Ø|x£Ņęµ›iö‡HfS˜&Õ'c…Rx&É„™k•Ļ9Żų·.0ɕ +µ+L@aø£Ÿb¹„mͬ·ŻõP¾‡{uéŅ%&&&°Ūķ<ūģ³²³Ķ#@ŠÖ^*Ÿ!æRTŌćōP,q;*’×MLœ6År‰®¦fŹz%Įč°9(”ŠŲ­öźyr…ö ’ÉeɕņL-Ķnø–ŖjŲ¬VŚZ«?s¬œ#[ČUŚyn ·„«zœŪįÄķp]Yf—Ź„„ŽŲÕ$p¦–fx|ą1ā™V͊EӘ¦ĮTx°iŚC­Ų,VŅ+[š¦ĒįįHĻAr„~—…Ų"ŁBž/ČĮĪ!Ę&If’ė?D6ŸĆėt³˜ŲøwźTx–£}£Ä2 ,š‡ÕĪ„Yn,Ķr¢’ńL·Ć¹ićõ°˜¦É/~ń ~’÷Ÿ'Nlŗõ‘ŲŪ¤`ķŻś<*Ļ’ʧHęŅdņY:Ū™^žĆÄÄŖYø6wD6µīsSK³Ų-6Ü.»“Ē[{xūņĘCLL’¹›Ÿżhę…[žāšT:GÉÜĶ8²ł,½-Żā{‰ÉBl‰“CGÉä³øl–’Q4M#SČquž:š¢ā°ŚéoėY÷t?WŹ3Ś“ŸÆŻŠń»¼Õā“©\Šżx].MŃŪŅÅѾQ „~——K3W±YÖ/™Yžć‰”£¤ó6;ÉL ĆŠ‰¦bœ8B¾XĄiwP,­’ŻÜ)år™×_ĮĮA>ó™ĻŠÖÖV“8Äö’%»‹išD’±ź,„x&A¶˜cG?“‹ÓÕ~ēć(ėåu €+³ćhš†ÓęĄēņrØ{?gÆ_¼õ”Źåu óx&Qyė–XbéDu€O'H²•cÖ(æ+b7“Ąd ¹ź“ €Åų‘T §ĶnÕl ¦Zh 4’+ŠV¦MĖ%™™|嘮_Ąis`Õ¬L.NS\YæŸ/ęy÷Ņiœv'„r™Ė³cŲ­6ģ;łRb¹ˆ‚Ā…©KÕ8"©(ļ%qŚģ˜&+×0™.°”Œ`³ŚČęsXwpOįR©Ä—¾ō%ŁĪč&3v—T.×éej)¦ÉĮ®a‰%2ł }-ŻdVīO­&¦#ó,ÄnnĖy¤ēćóS,%–Ń4®Ęv*Kˆ4MCU5 C'Ė )*įDMÓųŲąQN];sKZüDSqLÓdG?I‹•T.E³?D<“ÄnµpĖśēŻn!±ĢŚ.ėÄāÓ˳حvJå"Åri„m§«±B©øR»ĘJ±\d&2 čŗĪo®œĮnµaŃ,d ¹ź”žåd”ßd?Ąf±&gĘ/¬g%_ĢW‹éĘV:ŽÓĖsĢÅĀ8¬vJz©Z±ūŹģ8V‹MÕ( X-µi¦§§łāæHgēĘ{bļ’%»K*›Āķp1]Ä¢Ŗœ|Œ÷ĒĪ‘Īgéi®Ģ„č µqun¢śąųĄΌŸg9„P*ŅøRTŪ0M6{µĶ3V>“Ź„q;\h¬ÖY•\‰#’Š”Ø*Ēūqqź2©lš¶†fę£aB¾† ‰L!vI܁iՁśŖ²^&µņ¤kՙėhpū±[mč†ĪŲÜdõ©Y±|ó)|®˜'ĒĘż‘Kz™Ņš't…RqŻŌ!sĆT"]/“Īm\óX,—(®<‰ŁÉéG6›ÜčuR öÖN£Ÿ…qڜļ?„¢(ÄŅq–QF»‡ł`āb5łh³Ų8Ņ;ĀB,LlåóWfÆ3ŠŚm„˜ŅÕ¹ėÕś!“‹Óœ8ĢĢņ²YmÕJʍ¾†uŪŽĖE"Éhõu,ą‰”£L,®_c+ÄN’{S³æ‘¶LÓD7MŹz‰‹SW(–‹<Ö;‚Żjē7WoVö×T<Įldžks|bäc”VŠÆ)T:Å×ę'X^sõĖćp³_®¾Ķä³øķ.Ō•Īw,'ä ²ņۃÕbEUŌjū/«ŸOd+÷šŽ†Vł5%E÷¦Į¶^šü!ŠåRe’|– 7®`šŸ>ü įD¤Z ąöóÄŠQĪM~D2›ę©żĒÉr@å®e˜&o\&ĖÜęŠBģ=’Ųfé|—ŻÅpG?©\†|)ĻB|‰R¹„²²ĮŅbl‰#ÓĖsxnrk¶HŚL±\Ä¢YXķ@ Q R`oīčē·×ĪV*²=Ķ]t7ļćŚÜõź·ĆUŻ5 É"WČ£*•_UUy÷ĆÓÕó¹.|Œ_^¾t÷óJG[Ԙ$ö&Ó41ÖüŪĶE癋.V_/ėh 6W_·›YøĆ=)“ϒ̦š¹<'`±§dņYN]=C<“BUB¾ O_7€_ˆ‡i Vڼ–`‹wŁAĄŲdą%ÄƉDXZŗyļ»ÓÓ4¹qCfeī:¦‰‰YpevŒx¦2ĄW…åd”¦ź#… Ū_}3K‰.›E‘>xtČoó6sŁ]4zXJ,3µ4ƕŁq®ĢÓŗ¦ƒ]*—Š »ÕFȼė4ĒJ¦ŅDžž‹Æ/Āu·%Łlö”Ē$īßÕ¹ė8Ģ“ĆĒ9ÖˆŽ–®uū½/'£„¼•ΐ¦Y°iVrÅüĻY(•°Z¬5n±74łBx.–ĖL/Ļquvœ…x˜Fo°zL4• čöc³ŲĄdŻō’ĶŲ-6Šå;#Äv ƒüŸ’óŖI€ŪĶ0M“’÷’žétz§CwQ,—˜^žēäĄc<¹’ĒÓÕ“}ĶC“łX˜Ö•‡pAX:q׎u±\Ę*5Ä#DŪĢ4 Śz°[m((Ü~JziŻq‹ń%ŚśHē³ÕiH›Ń4 ½-RYģøłły~ń‹_T_ß©ąĻ~ö32Y·…˼{ł4ļ^9ĆÅ©+¤riõؾoš™BÆÓC‹?t×§³Ŗ¢T§x‹:§(ō¶ta[IY4 ~·Āŗ¼I<›dG’¦³K4UÅŖY°j6}­]„ćw’=b;©ŖJSSßüę7‰F£›Ö0M“üĒäōéÓ Ō Jq77–fx÷Źi޽|š “—*żņ֞źū™|‡ŻŖØ“[Xˆ‡ļzNUQ(K›'!’Ųf¹bžń…)÷Œšäš >¶’8Uc|~ H*OIĖxnę¢óä‹yŹzŻŠqŚ<¹’D%{Ł»Åʕ¹ńž­D=źėėć­·ŽāwŽnŸxżõ×9{ö,MMM;£ø…OŽ>Éjżb¹Č\4ŒŪįZwŌ|4Lk°™–@3‹±»w†’łĻ3<<\£ŝ˜˜¼wķBŽœ6;†”saź2™|e‰ā„™1rÅ—gĘHd+mŁ|l‘²®SŅĖ\»^=ŸaĢEĆd RćH‚rŪćvU·āŚ.¾ķ=ŸØ?Š¢0<<ĢŠŠŠ†÷r¹ƒƒƒŒŒŒŌ 2!Äntū«»ßxTUÅįp¬ū¹a„B!Yņ&„Ųó$pŖ¢¢*æ&«fŁt@Æ© Šą м¦3rzģÜŗ2#Ͳī¼có“Ä37Ÿ²*ŠŠŖnÜsŌ¢YP6‰GŁ$Īż²EŲŗįįaz{{7üÜn·c±Xd-ääuzŖŪ¶mĘnµoؚ,mšŖ” `³ŚVڱ›EÅaµÆkc“•6Šf±¢iķ”6|.š¦‘Īe8?łaõXUQqŚėŚ“Óćē)”J؊Š¢(X-V4Ͳłu×|nõ›ÅVż¹‚‚Ćj§æµ»Z±[ˆe·ŪikkېP‹ÅBggg"ŖŁßøi_~•ĻéÅisī`DBŌ–ĢŪ½®¦}“7“PÖĖč†Įى‹8mŽō¤P.¢ +ųhś ĒśaQ-˜@,£%ЌŖ(=>Ό_ąx’a~}é=‚n?;‡Č•ņX5+ńL‚+³ć ¶÷2]ĄnµÓŪÜIY/c`¢¢pęśE4Ućhß(„•"]ŗnpnņ#öwōćvŗĄ¬tŚ#©(c SķĮaspbą3‘yYÓ$Ųąą VėĘĮ¢Ė墹¹ĒSƒØÄż°hś[{ø2[)€Ōčm ’ŽQ,—6=Žķpį¶;Éä·ÆšQgc;‰LŠdīĪ[.‰Ś8Ų9„Ćf§T.a³ŚHd’\™§ŁßHk7©|§ÕN8e*<ĶSĆĒ)–K¤W¶ókōń9=DŅ~¦—féęōŲ9ŗ;čµ’-äqŁL/Ļ1™ēXß!N]yŸĮö^n?…r«f!_,paźAŸżƒ¤ólV+Élšks×9Ń˜B¹¦‰Ēįf2C“æ—́Ŗ(L,N“Č$)ė: ŠlĀėpc˜ó±%²…,™|–|©X]¾ė¶;±Z,DÓq¢©8 Ž!OĆ4‰¤¢Ä3In? ąwūŃT•…x˜L>Kos!ƟŽęĪuēb·4ę¤×M¶åXß!²Å†a’+äo;ÓNˆZ’w°v=¢¦©čE¾–nf¢óÕlŽCĒīėœeCGUVgu4“²xĖÓ0˚ŖŖč†Nwó>–“ŃźTž£}‡äÆ$ÄéééįŌ©Sė~¦Ŗ*­­­5ŠØž$r©źtƲ^¦=ŌĘR2Ź¹ÉŖėØKå.{eć„YfWž“f YŚZ7,jō50µ4S}"_ÖĖՄęŖ|1ĻųĀäŹyrģß×ĻĢņDAAUTŠåReÉ@!G8©nčsyń8܄Ė4ūCDS y²‹Y×Ō…ŠTĆŠjėåŌµŠõ2 Oī?~Ļē3ĶŹ2¶µś[{ŖæO«,kŪZUC7 öw pnā# „ŹL•§÷?~×ėŻ©Š®÷CQ¼^ļŗ™o6›mC]ńš,ÄĀÕ¶i6ā¢Į`1¾ÄÕŁėhŖV©„„ŖŲVЉŽĻOVgēŚ¬VEŁŠę5xƒ\™æłĄĪ4Ńnió–ęW>wĆ2Cƒ7ȍ„.M_ESU,+÷I‡ĶĄōņĖÉŹŒ¼ŽP6«•Åų½Ķ,&–«K‰…ŲM$p -$³)ZĶÜX:Kƒ7€ßåG×uÜwåIü&ėĮJz™–`‰l€XśfqæX*ĪP[ ±0V«ž–N梋ė>Ūl"’ŽaūB휟ŗ„ĶbĆēō+äqŲģ=ž»>łŠ ¶` ‰l’laūÖ5‰ś30°± dcc£Ģ6ŁAk;%½ŒE­V;Üs€h*F±\”꿉aš·9ÓMšŖ­;o4]œ7Æ™Ā½öż²^BSTlV+‡»KĒ)ź„ŹSį•ėźĘĶ5–¦iŹļČŅ»ņ”Ģis`Ó¬äWž¢µųÉs4łB·-¤UŅĖ“š0 £:h“l1OoKÉ\Ć×鎚Łīę}”õ2V‹ŸĖC*›¦T.Óģ‘ĪgzŲW:Ū·SÖuœ6;ĶžFā™$Årq‹ß†ØwO=õo¼ńŠ¢`š&?~÷$”Ų>ŗqsķ|Y/c±X yƒģ µIĒŃu’^®¦żī­ĶS×µi›-G+ƽ®”£©*>—¶–’tĆ ¤—Ö\wM›‡)‰H±'Č€;˜‹-āw{ń»|œŸ¼D±\äŚÜ¦iŅhBĪO]*k'×NóYJDXJDhō6Ju}ćŲĀ$‰lŠFÆĆĶ×/bb²_"·²&w.Ęmwōø4sL>ĆÄā „"́Fl+¦.WÖ?%#ė–ÜXšÅ\ŁoąĀĖ•b^Ž.!ī‡ÓéÄėõ®ūŁÉ“'kM}rŪ]°Ņ±pŚäK./óŃE®ĢŽ3±8E”\øķē7KTŠ…uėµ{[ŗčhX?«ĆiwV}.»“|©ˆ×é%’ŽqyvŒė S÷V8ɬt¾Äī5½<‡×éEAįżė8?łV‹•€ŪĻr*ŹÄā ¦Ā3ė>;±xƒt.ƒĻ儨—ŖėüĻM~D±T$ąņa:n\®|~i¦ŚVM/Ķāvø°Z¬¼?~“o\FQT‚ž©lšĖ3×PP˜^žÅ0*Ÿ3WĪ`šē&>ŗėBÜ«#GŽ (J5 mŽĪrŪoö]ŻN7łbž 'ĄŲĀ$צ˜ZšŁšō~•inŽęåKEÜö›ÕžöĀe_æćĶŚ>³Ūī"WĢōų˜ OW®^_ņvLøćĪBŌ’Ģø|1aÕi=«Źz™Éš Ē/Ę—Ö½61W óU¬v†LÓ¬YZkõ:E›ƒT6U~“Ź0jGēÖ8ך]sīt.ĆXnbÓæŸ÷ė駟ęG?śW®\įčŃ£œ8q¢Ö!ÕEQ81p˜b¹„×įęģäG˜¦Q­ ¢©*ĪŪTī/•+Sūö2±x³ó2s¼’0AoL§ĶĮéńó=ź1†”s¼’…RÆĖĖÅ©KäJ†Ś{qōTÖū;lŽ ÷Ź[%²IŪz yƒ\š¹¶mߋŲ‰lŠD6µ”-Ė— ›vxo-äWÖĖÜXž­¾^zkśŗviÕźņ”T.C2›ZW X.qc“6ożŒ9³z€X&Q,ÄV­Ą}ę™gšx<466ŽżCbŪøNŽT «(ŒĶO¢:;‡Hē²X,Ŗ¢bÕ6&üҹ4ö p¬’§®T>žf“{?…R”ŗ|ķÖ²6͉#¦U«AuٜŒvÓlFUUģV;V‹ķŽńGÓ1Ž÷f.ŗ°i’]ˆZ’ĄmŌŖJõź\!v›ĮĮA@€žžžM·O2—ęÜÄGŲ­¶• ž•§ ļ\~‡ÕN~eڵR}ē&“wƼŻj§¤—ųhę¦i`š&§®¼ĶbCQ „"`²_f9AQ²Å§Ē/`·Ś( Õ§¶ļ^~‡ĶN”\Ā4 EÅ4 bkīaצ0W¦eĪĒĀ,%£ėÖ{‹Żc³ĮöNŲ,!.Än1::J2™äȑ#µ„ī,ÄĀL…gPT}eŚžr2J$Ē¢i느^\™Y“*_*šėŽĆj±P,—yūŅ{¤ri޽|‹Vٶ{õ¼«;Œ„¼A–SQ®ĪM¬ŌėŖ,H”K¼sé4‹…R¹RL·OdŻuß;_żóµ¹ ®«7b7’ž˜āž“““`·ŪéīīęŠ!)B¹“Šå"“‹Ó˜¦±a֏iė¦ąßn¤iš>»öüėŽÅ¬¬ß7ĘęÆo~]Ģj…åŹłõźuV­] •§ÄRI±W ņĪ;ļ0<<\ėPźJ$Æ"5 Š×·#¦iP*·łäšć0o[’vķP2—&W,`šFµX÷ŚóŻmē“[­­c Än"‹S„÷DQ”ź¶CCC5ަ¾č†N¼S›MӔŖżBˆŗÕŪŪ‹Ēć”§§§Ö”Ō•b¹ø.Į¼SJåŅ=mé-Ä^'3„÷lxx˜ÅÅEĄŻB!ö0«ÕŹsĻ=‡¦Ży×%!„ŲK$ „øg,--Żż@!„ā o…Y „øgn·›'Ÿ|²Öa!„;b³ķä„b/“»šā¾øŻī»$„B!„Ųu$ „B!„BŌI!„B!„u@B!„B!D€B!„BQ$ „B<"E©u{š|B!uu‘p:Õ? „F²7”ņÅźŸ×~wB!v·[ļŁÅ\”F‘ģ †aR.Žģø\®F#„B<|–Z°ŚŚŚ‡ĆÄē—iémĆj·Õ8ŖŻ)O‘M¤«ÆŪŪŪkĶŽ‹Å˜žž&ŸĻoŪ9ćńų¶ėÖó¾÷Ž{åÜkiš†Ļ磧§«ÕśŠÆ·[­ŻSŚ4ĶF²7¬żŽ4M«a${ƒĶf£±±‘ååe–¦“4 ju‘ļæoKSóŗQ}ŻŃŃQĆhö&Ó4™žžfqq‘l6»mēžžŽ¶s­599É/~ń‹‡rīµģv;MMMōōōŌõ½k]›gH›w7ŅꉝP €cĒŽqīÜ9Ź„2×~ó!-}8<.U¦ū˜†A:š"<9W½łX,>\ćČö–p8ĢO~ņĘĘĘjŹ=[\\äG?śŃŽ]Ļf³ńńœgŸ}¶.7ŸĻWżs>ÅŠ œŻA&~3!¹ö»·wüųq~śÓŸKeøöއ4vµbsHā{•”$–bDē–Ŗ?knnfß¾}5Œjļłč£xķµ×ˆÅbµ垍ķhķv»łßłNž<¹c×ÜM|>sssdÖ<`™fåAÜ*æß_ĆhÄ£¬.ƒƒƒŒŒŒšį‡PĢ™žh¢ĘQķ~ŸśŌ§¤Ć}&''łīwæK” Snļ¤X,ņÖ[o155Å_žå_b±ŌÅmØj``€ŸżģgčeéÆÓ9Ś*ÉČ ‹Qbkh5Œfļxź©§8{ö,‹‹‹äRY¦?¼^ćØv7UUyžłē„Ą}xūķ·yżõ×e&Ó]d2~ō£±°°ĄóĻ?_ėpvÜąą —/_ ›H³0>CKß>äæŚz¦i2mš|:WżŁąą` #²ŗéyį _ X,rķŚµZ‡²'<õŌS<ūģ³µcĻČf³¼śź«’šECZ¹ S70Œ›SmĒĘĘų·ū7>’łĻ×0Ŗ×ÕÕEww7SSSÄ"¤c)ÜO#Ū]Jłāŗ§EŖŖņōÓO×0¢½Ćjµņā‹/ņ’š,,,Ō:œ]Ļb±š…/|¾¾¾Z‡²gLLLlü«šŠ¢Źl¦U¦abčzõõ©S§Ų·oĒŽ«aT;ļųńćüüē?'®ÜĻĘg‰Ī-ćōŗ$į¶Ā4M²ÉĢŗ\@€#GŽŌ0*ń(«›€ŻnēÅ_äĢ™3œ:uŖ:IܤŖ*½½½|āŸ¬ć}zūķ·Éd2Õ×”}Ķ“ ģĆb«ßµī˜Ž§øqq¼Z˜ģ7æł ’ųĒėnšŪ¾šž÷’žßÕõ²„B‘ųb“ĘQķnŸżģginn®u{F ąožęo8uźgΜ‘DĄ&\.ąŁgŸ% Õ:œ=å­·ŽŖžU”c”ö&YV¹†iBr)ʍ‹×ŃĖeŽ|óMŽ=ZW_›Ķʗ¾ō%¾óļ Æ$Dй‚(½‹ÅĀ /¼Pw3$ÅĪ©«ß,UU9qā'Nœ T*‘N§eźŚ MÓšx÷¹Ļńųć×:”=Ēb±šĢ3ĻšĢ3Ļ ė:ÅbńīŖŖŖb·Ūkʞ”Ė嘘ø¹Œ²„·ƒĘ}’œ»•¢€æ9Ⱦ=L]ØŌH$ĢĶĶÕ]±Éžž~^zé%žłŸ’™hT’ŻwŅŲŲȟüÉŸŠŁŁYėPÄ#¬®kY­V‚Į`­ĆÓ4‰D"Õׁ–†F³ū9Ą#{Ņ—H³œY”X-ńčÄan¬Ü¤?™ft`0xzņ8¹b¾‘DŽĶŽį1Ŗõ•z•Z½N¹ZĘĄą¹G?Eͬ³š[gt`Gv$ó©ĆOPØ™Ś7I²ÕÜ:–móģäS|źŠ1BFØłć;uŁDDä>4˜䑽‡Y+d)WĖ<÷ČS”k֗HœmV•=učqŹÕ27WØŌ«ģźa1³ĢHßéxŠt"Ķ£{³°¾ÄRf…Ē&&I'Rd‹9ʵ ŁRžL!G*žäŲĮ£¬ÖYάrhl£# ¤śxlļ²Å<„j‰§'Ÿ¢ZÆ2æ¶H,å‰}b!ž™|Šl)Ēbf™ŻCc;|õDD¶‡";l~}™«ó+%†ŅƒĢ­.RŖVXĪ®‘ˆ%ƒp(L®\ S̱–_§V71-«õĀ nÕ)VKœ™=ĻRv•\óŸ |¹ĄĀś}É4åj™õB–RµĀÜŹM†ūXʬ0»s`tc¾žĀś†Ńhö×åÓ4¹0w°7Ž›Æg|h”D4N²éł+,®/µ}V8"K“}Ęāś2–m·ēī°œ]mžėĘ1u³~{_\DD:vó·+  GŲ5°ŃLvvyŽX4†i[ģć`$Nµ^åģģtŪ{äJy®,β«˜D,Į`ŖŸÓW>!_*“2B¤b‰¶ĻXÉ­‘ާZæg!#D$n;ęźŅuĀFӕxp¦Ū‰ˆÜ‡TjU¦ēÆ6’Ń0xņą¶ ŃH”“aP«×©™5’±8†±QĄ“ˆĘŁ3<Īł’†Ņģh&lB!€rµB„Vm&}üš•kUfg©Õs-8ŚØ80’,Y¶E_"}g/†ˆˆ<°*µ ¦e2³0 ŲÄ¢1`q}©õūsI IDATbš&†a0”ī§X)¶^»«„D4ĪōĶ+?Ąpz°‘°Il€RµL¬efįc»ˆEbmēQ«×؛&Wg±m›p(ĢŃ}“,¬/·’ļ`ė7ODJˆÜCf®ńāŃg(WĖDĀQVsk=l›.ŸĮÄ#1Žģ>ȳު(×Ŗ$cq^xģiŖµ©D’ 7.-åytļśi>¼zŽ|¹ĄKSĻQŖ”IÅ\˜›Łt—ēÆņü£ŸnœG(L®TĄ¶-®,ĢņŅŌ³«e WE€ˆˆHÆźf…õ%~aźYŖõ±H”éł+Ä£qVr뜹vĆ‘ˆĘ8~čqÖ ŁÖk³Å,“{޳gx˶ˆ„£|8s€Õü:Sūa÷Š_=ĒÄČn>óŲ3˜¶I$įōĢĘwµŽĖĘ꜏/M=GµV%‰2³8Kµ^e-Ÿį„£ĻP5k+„»~DD¶›";h5·Ęjn­õxa}‰…õ%b‘(uÓÄjN0 ƒ©żP­5ŗ’$ū˜]ž#[Ģ1ß|ķ3g„Œ‘µZ­UfY(y÷ģ ¢‘(¦iržĘ% ¢‘µz½uÜGW϶Īc%·ŹĻĪ­6^cY­ŅĒ«óĢ­- …15@DD¶`f”½wĢ•ÅY®,Ī…1›æ3±HŒTĒLQ3«DĆ1"į•z•óĶÄ6ĄÉ‹`ƦߣÅĢ2‹™"į066̜ B”Pė·lÖ3ŸvyŽŁå¹¶óø8w™i 0ڧĄ‰ˆÜĻ”¹U›„÷Ž“> ?ÕG4Å2Mf®µŹóŻ,Ū¢Z«nŚoŪvŪ~{Ógųńū Ū¶ü‹ˆČ¶qŻÕz•’:’}‰T+ ?{½ą€’Łž>5vOsųMŸcllwĖ‘ūž"÷›l1·Ó§!""rĒŁ¶E®”ßéÓy i@‘‡€*DīC£#ģŁC8¦\­pcežL1K4åŲž£\_™cÅÕ[`(=Č”±żœŸ»D<Ņč“ģØ[uÖ Yn¬Ģ£:G¹—Ž}€‘ž!J•2WÆS¬L pxüę.QŖ–[ÆŁ7²‡]żĆ|xõ,{‡w3>8ŚzĪ“MחYĢ,ßõļ""r/P@ä>“N¤™Ś÷(̜”Z«N¤ųōä1~vī!#Ä`ŗƘhKģŻĖ`ŗŸH(L"Ƕ-.޼@<㑽‡ˆ„#\]œŻ™/%""ācß®= $ūųčź9LĖd8=Č3“Ēł³'HÄā ¤śŲ;²›Ėó Œķ#ПL“)ęXX_ ńā£Ō­:«¹õłN"";ISDī3©x‚µü:…ršŁ½æ4w…p( 4×=ŽĘ‡ł=ĆїH“/ZļQ·LJÕ„j‰õB†³³Óģߑļ#""$K°’[£Z«bš&ĖŁUn®-@c1Z–³«Œ l,ėןģkü޹ Śjõjė7o­afį*»‡Ęīņ7¹7( rŸYĖgNrüŠćLī9ÄÄČnVóŹ­ņGƒÅõev7×9a9»J§ŒJ•ńhģΟ¼ˆˆČĢÆ-rd÷AŽ|œGöfbd7VnāDų¦mQ®–I'Ņģg~m±ć{–ŖŃų>u‘{’"÷™ŗYē?Ļ’œŁ„ŹEb‘Ļ>rœ”ō`ė˜łõ%v5Fō÷ q³Ė?C6ZćXDDī=łrwĻžäŚņ ²„<ŃH”Ļ<ö ±ČFŅznm‘=Cc€ĮH’pŪ8?¶mė7ODZź rŸN’ˆÅ¹¹¶H¦¹4`µ^clpזnP®– ‡BÄ"1ńWłæŸD,N­^»ćē.""²G÷‘-åY/d€Ęo^:žd(=Š:f9»Ź‘ŻXĪ®-ęŗ÷Éx‚J­z'O[D䞄 ‘ūLͬsd÷Aś“}DĀŃ8惻(–‹mĒ-®/óäĮ)–³«›Ž# “Œ%Iʒō'ū˜š˜d~mén}‘žŌĢ:“{Ņ—H‹DHõ3œ¤X)µŽ±m‹b„Ä£G˜_ß\ńÄHʒ¤āIFś‡™Ü}°ė4‘•*Dī3łr s3Lī>H,Ć“L–2+ÜX] ‰°–o”>ĪÆ/1Ü7ÄĶÕÖ ź–I¹ZĮ0B˜Ą²-Ö Yf—oģŲwńssm‘a0¹ū Ńh”J­Ź¹ÓäĖĀ”0įP€ėĖsŻĒj.ĄRv€\©Ąųą(ƒ©~*õ ēfX+dvę ‰ˆģ0%DīCĖŁ–›’ÜøÕź5¦o^ ZÆrśŹ™Ös3 ׀Ęō÷~‘{—ĶÕyn¬Īoz&SĢ’)fX/dY/d[Ļ½ĄĶµ…ęŖ""š """"""ņPP@DDDDDDä! €ˆˆˆˆˆˆČC@ ‘ūŌ`j€¾d€X$Źēžz¹ćń/}–”ōą¶žĆž]{·õżDDDüŒDŲÕ?§ėxüēžzcŪ>?‰2>8ŗmļ'"²SŌPd‡D#QLÓ$K`Ū„jh¬]‡IÅ’Ōź5ʵ ńhœZ½F2ŽŲæ{xŒj­FŻ4)WĖüēłSmļˆĘ©™uŹÕ2ļ_ž˜Z½F$ĮĘ&ŽbÅJyćsCaRń$u³Ž:ŸX4F­^'Ł:Ļ2†"sd÷AVrėTĶ*¦iŽĶĖ'""÷‘Tņł—8vą(#żCŲ–Å™Łód‹9žĒćĻ·Ź'gfYÉ­’ó‰8cšÓWĪš?ŸųŒ–‘žLĻͰVȰń[bP®–ł`a˶HĘ;x”«‹×1m“ŸOŸĘ¶£õ©x’éł+ŹES@£Zn(5Ąœ; 4Ŗß¦ö=Āõ•›mŸ{yq–Åõ%^šzŽh8Bµ^ćō•OØÕk„Ć>óŲÓ0wĆ0ųšŹYźfT<Õ|æØ™uŪ{˜OfĻß½ &"r( ²ƒJĶRG€R„L<DzmžŲ’(–ma‘šF«ŽJ­ūˆCŲµ‚€÷.}“é'‰Š8‡ ńH”b„Ä£{cŪv£ Ć0 €J½Ņ<ŚnNŠˆˆlM±õ›gS5kDĀab‘Ļ>ņ¦ebC+ń\«×ZĮX8J©¶ń;Z«×ųųź¹MĒ•+ĒTj¢‘±H”O>†i™XÖF9æe[­ßPÓ2 ‡Ō.KD,Jˆģ X³”@4”nÖ9ŗo’®œmĶżwWōĀI8’8˜äāĶ™Ÿ&_694¶Ÿé›WZæ0õÜ­|%_ńh¬5G?Š`Z&ūwķåŻ³'›x4ĘS‡ž|½·©_ͬ GŪžüĄ£œ½Ųv\,…fŽ;ŽP·ź?Ąž=‰a„ų…©g»žæ“¹Ÿ) ²ƒŒīĆ“,¢įƒ©~Īs”ŖeŒN)åJõ“ˆĘń–šTkUvQ·L֗[ū—³«;0Åjn•D4Į@ŖÓ(ŹÄČʵ*!Ć`|p”Ė ×īdbd7‰X‚¾DŠt"E8īxž†ap`t‚Õü:…r±ć±""ņp{lāó«‹ō%ūȗ‹Ų¶MŻ294¾ŸZ½ŹŲĄ.Ā!’ߝJ­Ā”ńż,eVZÕpu³ŽHœOLR¬”ź¢āŖpLī9L<'ObŪ6ÕZ•r­Ģ‘=)UŹģ&dtéÆÕ« ¤ś80:Įbf„•ȹß( ²ƒ®,ĪbŠÅ8yé466gg/2>8J<e1³ĀZ!CČ0ø<µ­ėšÜŚ5Ė$‰6ÓóWø07Ć®žaRń•z…÷gsōg—o“š]]ŗmŪX¶ĶĻ/}Hݬsqn†ŻCĻ]/dxļņĒ`Ū\_¹Ł6õąRósN]ś]żĆ„Ī‰‘‹7fčK¦YĶ­±œ[ą½K2:0‚eŪ\˜»L*žlĪ]æŌöŚó7.360@±ZāŚŅęė?bץńhŒ¹ÕyVs뜽¾Q0}ó2‰hœõB–KóW8=óIėżf®‘ˆ&Ś>·VƵ~óŖõļ]ś˜dß6_‘»K ‘’)d)VKäK…¶ż¦ersmaÓń‹™å¶Ē¶m·šĢÆ-:ϰ’[e%מśåģ*¹r˲X/“wķ·mĖõVš’¤mžœF/w??KŁU ÕŁRūSµ^cnuć7ĻéÓh<»Į²L\æy™z ht¦YĪ®lś<ē7Ļ©PsŽŗYē¦ė÷Ģ©bs®e[m+ÜäJyr„|ßVD䎄€ČńōwĖŖ' ¹Ó®6W¼¹Ū¼+ˆˆ<ģŌŚTDDDDDDä! €ˆˆˆˆˆˆČC@ ‘‡€"""""""%DDDDDDDJˆˆˆˆˆˆˆ<”y( """"""ņP@DDDDDDä! €ˆˆˆˆˆˆČC@ ‘ŪdFū{gĪć~µéś‰ˆČ=Ėū7Ū֏^gžĖ£ß<ŁiJˆÜ¦P(D"‘h=®–Ź;x6÷>ŪnæF©TjĻFDD¶Āū7»RŌo^'ÕRŪŽČ¤Óé<%D¶ÅZ÷—gØUŖ;x6÷¶Ęõ©µ»ÆˆˆÜŪFFFčėėk=^øtĖ“všŒī]¶ sƵ‡B!öļßæƒg$"‘>‘Į /¼ĄÅ‹ØUj\ųƏ=°›x* ŖöĄ2-r+ė¬ĶÆ“ö ńč£īąY‰ˆČV„B!žžyŽyē ™<ē’ė#vMŒŽźßJ‡eZ¬ĶÆPĢä[ūŽ;¦ ŁqśK-² ž|ņI¦¦¦8ž<ŠHܜ¾¾Ćguo3 ƒ/|į D"ś3$"r?ł„_ś%>łäØŹĢ]œŻį³ŗ·„Ói^{ķµ> MنašėæžėLMMķō©Ü"‘_śŅ—t½DDīCńxœ/łĖLLLģō©Ü†††ųķßžm†††vśTDDT ²]āń8æõ[æÅ™3g8yņ$³³³”ĖjŽä…B 255Åg?ūY†‡‡wś”DDä ņūæ’ū¼÷Ž{œ>}šÅÅEņł|÷>$’É$£££?~œ_|‘X,¶Ó§$"( ²­ Ćąųńć?~|§OEDDäŽ ‡Ć¼šĀ ¼šĀ ;}*""Ņ#M¹’ŲŻi§€ˆˆˆˆˆˆČ½ĶvŻŚ>{”h{ŪŽrbADDDDDDDneYēÖOOA{P Ųö X 8LDDDDDDD¶S”Pp?ģuDŽ[°IP ­k.—ėńóDDDDDDDävd³Y÷C+čø|“Ž€“-hK7( """"""rēY–å­Ā÷KŲtńßō\P@0Z×UDDDDDDäĪ+ ŽīA’–{x_ŠŖš”ˆˆˆˆˆˆˆČąSoįųw{¼i§eל;ׯ_ļ|†"""""""rŪfgg½»L׿nĖŽR@øā<8ž¼–¹ĆΟ?ļŻU%ø h‰ĄŽMżžœqīär9ęēē{9W¹E> €Šė¾_óæ j7‚WøÜå$DDDDDDDdyboر9š÷ż=%:M˜qļP@DDDDDDäĪņÄŽuŗżAĮ’&Vøä~pźŌ©-ž¶ˆˆˆˆˆˆˆōŖP(pįĀ÷.gōŸę­{E€nI¼COŚĄ"0ēģ|ūķ·oćkˆˆˆˆˆˆˆH'?żéO©V«ī]‚ƒżnɀM±¾_·’vīLOOsķŚµŪł."""""""Ągą½Hēąß/ ąÖµ€ū…'ÜO¼óĪ;[’"""""""ŅՏüc÷C‹%݁~§ąæS2 m@æLĮ»wh€ˆˆˆˆˆˆČöĖd2¼’žūī]U6žīĶöÜļTŠq@g[®:Ožūæ’;õzżö晈ˆˆˆˆˆˆ“|ļ{ßĆ4M÷.÷üošßK`KĖ:Ū»ĪĪ……~šƒÜę×·ś§ņī*±¹ä?( ą7%`ļ2€~Ū÷Ü/ųÖ·¾uėßHDDDDDDDŚ,,,šÖ[o¹w՚[PŠo&ž‰€Ą*w<÷Ļ—'ß|óMÖ××·į+ŠˆˆˆˆˆˆČ·æżmļtūķ#’f—[æŃ’Mq~Čo'ķ%š}ē€r¹ĢwæūŻŪż~"""""""‚o„}™Ķe’~A§)ą‰÷½S`s©€ü y Ą_żÕ_aY"""""""rė~ņ“Ÿųu’Æ\öļŽ:UlJt[ĄyƒEą„sŠ'Ÿ|ĀæżŪæŻöy˜żŁŸż™w—SžļšūmA«­č.9ų¶ū€?’ó?æµo'"""""""œ8q‚žš‡ī]&å’¼#ūN°_on~I€ĄĄßyÜioį š‘ūD=] EDDDDDD¤G]F’ĄæĪęĄß}æSßU܂&š÷ś§Šmū./("""""""N:åZo±1śļWžļMų%—7o ×­A#1nn‘ęրēQ€ŁŁY&''łō§?½ __DDDDDDäĮgY_śŅ—˜uļ.±Ń°ŚÜ*4V(EĻVjnåęqU F{bĄŌ×*Žī€~Sœ Ä’rĒW¾ņÖÖÖn÷ū‹ˆˆˆˆˆˆ<žžļ’žŸżģgī]īŃ’ Qæ­Ó¼·a6FżŻ[ˆö*€0 €(°ö ņł<ƽöŚö\ ‘Ōźź*_üā)‹īŻE6FļklT”é^PinĪėŻ‰¶©šz«Üهo5?€Æ}ķkœī"Ą5ą„ę}Μ9ĆŽ½{yžłēoõšˆˆˆˆˆˆˆAóę€7Żoš‡ų‡¼’žū·rMDDDDDDD8üĒĢ©S§Ü»l‚»ž»Gł«“':Mč8’ €Mó\'ŌŠż”'€VÄ_.—ł•_ł.^¼ø„ """""""ņ łĖæüKžöo’Ö»ŪÆō?hŽÆĮæļØæ‹Ż­  ; ą—•pNä’KĪ,..ņłĻž………Ž®ˆˆˆˆˆˆˆČ柒łŸłźWæźŻķļAżöŖ]6o¹PÉ`@|ō’ī*oó"šæ›·@£ĮĮ«Æ¾Ŗ•DDDDDDä”ó£żˆ/łĖX–åŽmŅā{)żwzt žŻ‰„ $@ĻĖzūxKÜ'µ|·ł€?ü/~ń‹äół-\&‘ū×;ļ¼Ć¾šŖÕŖ{·ÅęąßÆģß;āļ—ŲņüŲ¼  [Š€ ĢDøüßęq¼żöŪ¼ņŹ+,..öp™DDDDDDDī_o¾ł&ƽö…BĮ½{+M’܁æ;ų÷[°Óļē÷¼ @§$€÷äf€wÜśóŸ’œĻ~ö³Ž%DDDDDDD÷wĒÆżŚÆQ*•Ü»m‚ĖžżężWhž»Uų5 \ HP#@w‰‚ß V€óĄ’k¾€ .šņĖ/óĮt¹d"""""""÷Ū¶ł“?łžąžÓ4Ūž¢sĒ’ uæ­Słæ_šæIŲußš¹u¶Pó6ܼjŽw¶ˆĻ–2Ąęńäóy¾łĶoŅßßĻK/½ŌķŠˆˆˆˆˆˆÜÓVVVxć7ųś×æī}ŹoĪæ_E}(„ęVtm×¾Róøró5,Ų–’$€sė$‚aŸ}`˜h>¦^ÆóżļŸ?ž˜W_}•D"įw^"""""""÷“'Nšź«ÆrņäIļS‚'ąŻ/ў(47'ą<ē$œŠo5€_@ĒUœ‚z8oģmTą-OpNlx·yņ-ßżīwyńÅyļ½÷NADDDDDDäŽcš&ńĮĖ/æĢ•+W6=MpĆæNsžĖžĶcū5’ ZĄW§ æŃļmPE€w³€›@p>lee…ÆżėĢĶĶń‹æų‹Ŗ‘{Ś©S§xżõ׳ĒüG,Ėņ>ķéŻVÓsżŽŃ§Ą=Ążw7t Īē8‰€@Žlžīū›{ø’N ē9XkžŲˆó޶msźŌ)žįžńńq>õ©OaīSŁY«««|õ«_åw÷w¹~żŗ÷i§ŁŸw>¾3Zļ×ģĻ žĖ“ūŽĶIų5ō6tĪeSł?tNUųU„}n½ūœ×i4¢Ī‡ęóyŽ|óMŽ~ūmŽ9ĀįƇ}NMDDDDDDäīÉēóüĶßü o¼ńļ¼ó¶½i½ĪFÉæ{ źöļ7śßiäß/ųÆŃ>  kł?tOUųUx“Žūī$€I£9 @æėsøzõ*ßüę7łįČųų8GUE€ˆˆˆˆˆˆÜUŁl–æžėæę7Žą_’õ_)•JŽC,6ęę»ūęyƒ’:žóżżŗž»“ŽĘAKvģüļYu’wFö£Ķ-$š[H) Ļµõ7oÓ®-Õ<>Ń|ī00čw"O?ż4ōGÄ믿N___·ļ#""""""rĖĪ;Ē7¾ń ¾öµÆ‘ĖåüqŹżĄß/ų÷kśē žŻŻž @Č5oĶ pÆą­š[pSB ×€7 a#ą$’Ķ-E#Čļól~ ' §Ń`¢łx“t:Ķ믿Īožęoņ¹Ļ}ŽpŲÆxADDDDDDdk–––ųĪw¾Ć·¾õ-Nœ8ŃéP§Ÿ;Ųö žŻ’¼óžŻsžŻĮæsėü; ē½Ü=¼Į’–ī炪ÜI€8I€I'ą¾M»Žq^on1`kī÷µoß>~õW•W^y…_žå_f÷īŻ¾†ˆˆˆˆˆˆČ˲8}ś4?žńyė­·ųя~D­V :Üf#š7·`sĄ;ņļ7śļmśē—pö­Ō°cš[KųUDŲØč”šnĪóŽ*ē½"4¦Œ6 >IĆąŲ±c¼ņŹ+<÷Üs<žųć=z”‘‘‘N/‘‡€iš\½z• .šÉ'Ÿšī»ļņ“Ÿü„ÕÕÕn/µŁŚmŸĶrŻzGžƒF’ŻKž:l½,’·„Ńč-ąÜ÷6ż‹°9 ąīĀ?"x€“pz DšĻøV čftt”©©)Ÿ§P(°¼¼Ģōō4ÓÓÓT*•­¼]•r{ļŅzŽ@§y’½vż÷ üżęż»ƒļrƒŽ&€[NøŸŖš› g#Ø÷&Ü·Ž€· ĄI8[øłŚęm¤Ė¹‹ˆˆˆˆˆˆō¢ŹFpīś½·Ž‘’n„’޹’AĖž’Žå’:•žwż‡Žƒho&Įł²†ė ×ń_нüŸ{iAæĢ‰·lĀ7æp®ł~qŚ ź (""""""½pFłĶ/xöīė4ļæ—Ńw÷æ[ļhæó>ŽræĄæė€Š=`³¹JĄł²4Ÿ3ŁØ š& ×-“æW· kŽz«ĀĶ÷¬ŅȒ8IwB̵…}¾ƒˆˆˆˆˆˆ<Ų,ڃq÷fuxßx·Ņ“`čLĘUņIDATŻ;śļ7’ß]ąND8Ē{ƒ’N ’‚Ī}“­”Ń{ßČ]ą$¼[/£’ަ ī² w/w Ģę$C•FĒDædƒ{ŚB%DDDDDD4ŽĄ|«:žw*żżwŖ ü¦øGžżż¹Kž;5üėyōzKx«œĒŽ©&ķ¹;š’ »Ūœ‰ ^Ž`>č³苈ˆˆˆˆČVō2÷ßtŻĶż÷Ī’wŽD€ßčæ;šļu©æ®‰€­6Ņs’Īc'`4OŠhž°wŌæ—ņļ…«±‘ˆ²ŃtŠšVø?Óū¹"""""""Az-’w‚r'H÷ż÷«š&‚J’k®÷ š÷ļ=ß®¶ŅŠĄÓ<›“„wjžē—9‰±9ąžƒ¦Ø @DDDDDD¶"hōß;÷ß=śļž’ļ”ī»ē’{śžA„’Žą?hž’¶4ō¾”2ĄŻ:Č÷’pŹ’c4.@·>~UŠ=ųWr@DDDDDäįŅ-Xö ž;5’ š’”pßŗƒæŅ§Ņ SŠæ­=üx?Ąü5\š›C4o¹pŽF€Ž>ŽžĪ9h€ˆˆˆˆˆˆōŹÆüß¹ßėüo ‚"Ą½ß9~Ū—żóŗÕīĒīū›oæćƒŗ’»ēN8å’Žą_EDDDDDäNø€īXÖ/ ą½ļłļeÉæ[.żwÜj€óAī~Ż^×iž„»łŸ·üߣ¼MÕPDDDDDDnGP€wł?æ&€Nļ­šN Øzö×i/ż÷[ņÆ[÷’žŻJĄ]ąW4 Ūü‰:ēDŁ\ž“ @Æ=”·Nsė;ŰŽU¼ æd€ū¾;ų÷Žś»AēŗåDĄķōp'¼¼UŽRļE j ąüū5Üj@%DDDDDDnAt/ € 8ÖŌū%üFüŻ£žJ’o+ų‡Ū›ąÕ©1`§µżVp‚’ĮĮŠü%DDDDDD¤›[Iųõšö“óKxž n’½’·l;zøļwJø_ü›lŒų×iśŻ„’ī æØ€ˆˆˆˆˆˆōĪo„=(Šk ī³ß}¬wŌæ—n’wµ€÷ƒ·šš.„`5ĻĆ{įÜĮæ{ó–ž÷2śÆ€ˆˆˆˆˆˆtŅ-ą7 Ą; ķMxīŃž^—ś»ķŅĒvLŲJĄżEĀžĒfsŸS`Ņ>ā4ļ_å’""""""r+¶:  [ (!ą-õļŌ钎’°}=zMxW p’Vó¾ūāyƒ~æ®’ż‘ķŅk@PS@æd€7ą7=Æšļæ­Į?lpģx»swĄī 係ün£ž!6ž žEDDDDDäVł5±wß÷ŽŚ%üūžŽŠyæsŲŪ¹ tÆpŖüŽq6wpļLč6źļ­€ĪĮæ""""""·Nu§•ģz©šŪļ—<š śļHš۟€ĶI€ īd€ūāy«‚Fü;•žw š•yøu ®żónIæ¤@Š’N%’½œß–ŻÉ@ŲūŽ~eśŽ Žą{§ ōų+Ą‘Ū42ß) ąģwjšwׂøór§$€s” č%čļų+ """"""·"Ø sŪk2 — ’®’pw‚dæĻŲj"Ąļ9æ÷ ś¼^ĪIDDDDDD½ڽ$ŗMĄē~Šēß±ąīn T ą¾ßi„æ[¹æšž‰ˆˆˆˆˆČ­ź„)`·iŻī}Ö üw;0īT ྿ÕŪ ÷¹]Ż*z¹õŽļ“ļŽŲ© ¹×D€ū~·ē»½æˆˆˆˆˆˆHÆŗė’īwŚwGķt ōł½ū*ū‘ķÖĖtæĒŻ‚žnļ}GŻKArÆ#ł½$ DDDDDDD¶ĖV‚ł{b“ßĻ’÷ƒLƒĢńļ<IEND®B`‚libwebsockets-4.3.5/doc-assets/smd-single-process.png000066400000000000000000003411761476025525100226770ustar00rootroot00000000000000‰PNG  IHDRĢzēĄv pHYsŹŹ«ė<¹tEXtSoftwarewww.inkscape.org›ī< IDATxœģŻwxÕŽšļn i›d@b0tBo”H½ äõ b»‚rE±]  ˆ…+ˆ *E•Ņ‘nhŅIhōŗ)ēż#īÜ™ŻŁŻŁĶ‚ł~žgŸģLf̝™ó;gĪŃ”rŠiœÆ¶œ­u‰ˆˆˆˆˆˆÜIh˜§¶Œ½ł·Ģķ,‘-9ņäČpe…ugjžåžӖóՂjżČū(wĄG…µµ¾§Ź__Ķ“ ņƗæņMDDDDDD$W ą €”æ^8 օ{żbKPV&6æ7—›Ķ9eĮæÜA€ņ֒Ū+ü;*ųĖ śņW=½Äh Ą§œy$""""""r•p @€ßQ(†uįæŹ1€"Ł{Ė’[¶ °ÕO ,ų»(OĄ²šoŁÉŸ½O^ų_”怞śh¢5ŽŽŽš÷÷‡Ńh,ĒĒ """""¢Ŗ(77yyyČĪĪvfµ »üą<¬ żę‚‘÷ņæjXėĒ\ øP+ü«=ėoYč7漞zŇ²Āæ—چ<==Ѷm[“jÕ 5Bll,bcc//ÕUˆˆˆˆˆˆˆœróęMœ>}'OžÄ‰'””„ß~ū éééöV; ą'”^č7Yüµ|Y¶ ° Ų)p!ąJ@Kį_Ž™ŸZĮ’n”¬©æŽrõė×ĒŠ”Cѽ{wtīÜ.d“ˆˆˆˆˆˆČu„„„8tč6oތµk×bĖ–-(-Uķø?ĄÆö”¬°//ųŪ{Y¶0ä} ø-ąlĄ^į_­ÉæeĮ?ĄD£žśæ$88ÄØQ£Š³gOčtģğˆˆˆˆˆˆ*””|÷Żwųā‹/pšąAµE’,peüBŁßB‹iĖ@€e@ķ‘€r\ 8*ü[Öś{£¬¶€šņkÖ¬‰gžyO>ł$üüüœĢŃ­·}ūv¼õÖ[X³fåæJģFŁ£™Pž ,¦åAy‹ĖÖö‚Š©ü5wų§Öäß\šÆą- ņÄźÖ­‹—_~£F‚···Ł """"""Ŗvī܉3f`żśõ–’Źš5ʆ4žÕ^ņ@€¼æµGä#@åÆ]Ž`æšo«Éæ7ʆņū@3sB^^^˜8q"¾’ž{tčŠZ³@DDDDDDT¹Ō­[?ü0Z·n;w"33Óü/­ųH²ā\^ž–Ŗ§„’^mM•ūZJß¶žū·õ¼æ÷_Æqę6ÆÜ©S'üōÓO5jŖU«¦%DDDDDDD•^Ɔ 1nÜ8˜L&ģŁ³B ¬ģ|€(ēžZŌ\––—ÆėB¼Īuņē0ąLĄŃ3’ꎾŖxt:&Mš„Æ¾ś µjÕr"’DDDDDDDwoooōīŻ]»vÅŗu됓“cžW€X”J °,Ą[vōēō°–E,#öšż{£¬iƛī3'†%K– wļŽåĶ+ŃįŹ•+xšĮ±eĖłģ ßø @ī_åÆłų_’ęÕF0÷ hčĄ^ µ¦’ņN’Ō ’ó 2ÆŌ AlŻŗńńńv6CDDDDDDō÷b0šŠCįŅ„K8tčy¶€Ę. ¬po.cŹ2ø½ŽžōmVōk Ųzī_Žģߥ Čjž[·n7¢N:v6ADDDDDDō÷¤×ė1xš`ĄÖ­[ͳ½4pe½ż[6’—šœ¢5`ŁōßŹŚ’ēŒ7ÆŲ„K¬[·!!!®ä‰ˆˆˆˆˆˆčoA§Ó!!!~~~Ų°aƒyv5”ux’kĀofYą7æJmüO¾ž]¶–µ’jM’Ķ5’˜j^±yóęX·nm›ˆˆˆˆˆˆØJčŌ© ±}ūvó,?µœUYܲĄoėØüUP ØuügŁō߈šń_ӈ‰‰Į¦M›P½zuµmUY={öDrr2¼’zy”¬Ln~DßüȾåˊeĄr![…’ސõų?aĀ 6̹OMDDDDDDTÕ¬Y_ż5<<¤Fł~(+gū©¼,ƒę€9`.Æ«üӖČWśåĶ’ż| āāāšż÷ßĆÓÓÓµONDDDDDDTÅÜu×](,,Äoæżfž @.”MžKl¼·|­ZČ[č,Ž«5’÷š8€ ģł…¹sē¢Zµj®~f""""""¢*é„—^BLLŒyR Ź*Ż}-^ę–­ŌZX¶Žké@Ž ĄDóB=ōŗwļīźg%""""""Ŗ²|}}ńĮČg4†²łæ9`ļ1µ¾¬ČP«õ—7’÷š4ŹžK@`` ~üńG”ó#UM±±±8tčNž/Q•T«V-ģßæ§N2Ļ ‚²€łeŁ Ą²5€e EKĖNÕ:žó@Y`¤yĮńćĒ#,,Ģ=Ÿ”ˆˆˆˆˆˆØŠ{é„—ä“u`]ū/ļĄü²ģĄf‡€z8nžÆŠ @m ¬ē’§žzŹm’ˆˆˆˆˆˆØŖkŪ¶-:vģ(Ÿ²漚Æ6€½Ńätj-ėdž™źŚµ+¢££Ė’鈈ˆˆˆˆˆHņšĆĖ'k£l$Ė‚æePoØ“€Ź?å-üō±‘!"""""""rƒÄÄDT«VĶ<é  .Ź ūjAĖGä…yK˜’Ź[@öĖę’ž@Ł…Ɔ SY…ˆˆˆˆˆˆˆŹĆh4¢’žņYµ”¬õW+üŪė@AK'€Ģ téŅAAAīłdDDDDDDD¤`ż€Z »֏ț t0/ܽ{ww~."""""""’éÕ«—|²€`Xžķõ Vų—PĢ€2`ŠČ¼eˆˆˆˆˆˆˆ*Ndd$bbbä³j@Yć/oś/Łė°Ąüy ł_ ­[·vēē"""""""" ņÉ`”š-ƒ–-l= ‘? öj`^°qćĘšōōtė‡""""""""„¦M›Ź'ż”^ć/éaū)`ksŌ@jwаaC7~"""""""RcQžöƒż&’j-äHģ DDDDDDD·Tll¬|Ņ€ģÖžÖćZöPǼ`ƒŅÓDDDDDDDTAīŗė.x{{Ėgłć}­µ’Ve}˰XŠ`žghhØ[?Yóšš@PP|–7¬ żĪžX÷`š3’Ć`0€ˆˆˆˆˆˆˆ*žEÜ ŹŽžllžõ€łe~Ī@mćDDDDDDDTA,Źąęf’ņĀæÖ½’;5  ü½æ|AÅ$UĄĄ@ł¤'”|ĖZµ‚æeßę#ę üoĀÓDDDDDDDTń,Źąj{M’ͬZØ- ¶"ŻzņŃś½· P6&""""""¢ŪC­¹æ­¦’–å{)Xüƒ""""""¢ŹC­€o«Šoõģæ™ŽbĖĉˆˆˆˆˆˆØrpTš·UŽ×żQ嗒’‚ƇćōéÓČĻĻGff&JKKƒĮƒĮ€F”yóęšńńqœ Ģ©S§pńāE«łŻŗuƒ——W¹ņ]RR‚Ķ›7[ĶĒŻwßm5’śõė8räˆÓŪ1€ˆˆŌŖUĖłŒŗ`ß¾}ČĢĢDFF"66ö–l—¬ !°qćFiŗY³f »9"G._¾ŒcĒŽIÓµk×F\\ÜmĢ‘ū={gĻž•¦£££QÆ^=·ncÓ¦M(--ÄÅÅ”vķŚnMŸˆˆˆ*›Mū”^©oÅÓĪlPI”––bŃ¢EXøp!öīŻ«i///“jÕ ćʍĆȑ#įėėėp?žsę̱š’óĻ?£oß¾Nē[nŪ¶møēž{¬ę;Ÿ}ö™Õü;v`čŠ”åŚ¦ææ?Z¶l‰”C‡"11įįįåJĻ–§Ÿ~;wī<óĢ3Ŗūn’’Åq¶bÅ 2ä6ęˆłõ×_1vģXizōčŃųļ’{ū2T–,Y‚3fHÓÓ¦MĆĢ™3Żŗžżū£  °xńb<üšĆnMŸˆˆˆ*G-l–ķ-ūPü“næóēĻ£}ūö7nœęĀ?aĻž=?~<4h€Ż»w»œ‡åĖ—»¼®;ÓpVnn.¶oߎgŸ}õė×Ē›o¾ !Ä-ĻŃØ  éééHOOGFFĘķĪQUgÆwhgł€e§t„„„”G8wīœb¾Į`@\\ŖWÆ___čt:!ŸŸ .ąĻ?’”j‚€²Ē°mŪ6“mŪVÓ¶õz½ŌœtÕŖUX°`¼½½]śÅÅÅųžūļUÓ¾Uņóóńā‹/āĢ™3Xøp!t:āDö|ōŃGxöŁg”””øqćĘmĪÉ8 ȗ“°€Jģ„—^Rž£££ńöŪocąĄv ćłłłXæ~=¦M›&=G_XXˆ1cĘą?ž€^ÆÖšC©I“&øpį233‘žžŽuėÖaĄ€.}ŽĶ›7#55@Y³üŲŲXN:…Ż»wcŃ¢E8~üøō’O?ż­[·Ęć?ī܇ ¢ ūļæ_šnÓ¦ĶmĢMň‹‹S|Ęæ[DDDTéŲ Ų °Šō6ŹĪĪĘ_|!MשS;wīŌŌ±ÆÆ/ „=z !!ū÷ļ?~Ū¶mCBB‚Ć4<<<šüCŹĆ²eĖ\,[¶Lz?`Ą\øpĮ„t“ D`` jÖ¬‰.]ŗąŁgŸÅ“iÓšĘoHĖüūߒʈ#Tał "m4“īdƆ ưaĆnw6ˆˆˆčļMKkÕ>ØŲ¹s'ņņņ¤é)S¦8Ż«}@@€¢ą ėׯדnqq1†.M’šĆŠĒ “***ĀŹ•+„éįƇ£øøŲét\åįį×_£F’ę„„„)‚+DDDDDDw[Cj®¼g ’:yņ¤bŗ’ž.„Ó­[7Åp€–éŚRRR‚ž={¢zõźŹšÖ’ņĖ/NożśõHKK”oß¾())q:ņš3gŽb?|õÕW·tū¹¹¹HKKƒÉdr{ŚŁŁŁNwŌVRR‚““4¤§§»=OęĪćŅŅŅ*¤óøģģl¤„„UŲq”••Uaū&''GŚ7999nMųß¾IOOÆr^ !¤}+žŗƒü˜ø]ĢßmEP‹‹‹‘––†ģģģ IßYEEEŅ>ÆØĻœ‘‘QaæÅŪ}¼XŹĻĻ—~ī>7”””H†ęēēk^///ÆĀ®………Ņ筈cŚ||Vı#Ļ{aa”Ūӗ_'ˆØjb ’’_°t:"""\JĒŪŪ[1üŻõė×5­W\\ ///Üwß}Ņ>>·“€Yhh(śōé#M’žūļČĢ̬°ķ„¤¤ą…^@«V­P­Z5 44ÕŖUC`` 0kÖ,‡ßdž ųųx 8@Y{޼yčŃ£ĀĀĀˆÄĒĒ«¦a2™šŻwßį‰'ž@“&MOOO„††"$$ÕŖUƒāćć1~üxlړɩĬ¬,¼’žūčׯĀĆĆįė닐„††Āh4B§Ó”f͚čÕ«¦OŸŽ?’üSūŽDŁ0qćʍC½zõąķķĄĄ@„††ĀÓÓÕ«Wǐ!Cšå—_ŗŌ±d^^¾ųā :õėׇ‡‡‚‚‚ūĘĖĖ M›6Å£>ŠmŪ¶9•žÅ‹1}śttīÜ”””0 Ҿ1 Šėõˆ‰‰Į AƒšĮH}ehQRR‚ļæ’#FŒ@½zõąįį!훐čõzFtéŅ“'OĘįƇm¦µeĖé83æäĆYfffZż?>>Ž-ĶŚ322inÜøQu¹„„i™}ūö(;ŸĶœ9;wVģ[ $$$ąŻwßu:8öķ·ß"11QŚÆņcB§ÓĮh4¢k×®˜2e Ž=ź0Ķ'N(>cRR’Ću6mŚ„Ē{ ±±±ŠćŽĖĖ !!!8p -Zär lƆ xę™gмysĀĖĖ ””” „··7jÖ¬‰:ąłēŸ—#«(¹¹¹X²d ʎ‹ŲŲXĄŪŪ[Śē^^^@‡0qāDéū·ēĮ”ö÷źÕ«”]Wß}÷]ōģŁF£F£Qś-śśś¢cĒŽxå•WpåŹ§ņŸ””„W^yŻŗuChh(ōz½āx EóęĶń’÷X³fŪ;Į•_ę>4„Xµj???é÷įé鉚5kā¾ūīĆ’ū_‡ĪG}TJɒ%Ņ6'L˜€f͚Įßß!!! Į‚ TÓøpįfĻžĮƒ#<<ŽŽŽš÷÷W\'jÕŖ…>}ś`Ö¬Yø|ł²Sū`÷īŻ˜0aڶm ųųųHŸ700Pŗźßæ?>ūģ3§‚B¬]»O>ł$āāā`0¤ćÓ`0 ZµjØU«:wīŒ_|QÓ9AīŲ±cxį…€€EŽ}||ąć惆 bōčŃųꫯPTT¤9ķ’’|÷Żw>|øźuĀ•óż=xØĄ@0€0‘ŚęWrr² [g޼yB¾’ ]NėŻwßS¦LS¦L|šĶåž}öYi{111B!6oŽ,Ķ ¹¹¹š·[PP ‚‚‚¤õśé'!„7–ę;VuŻ+V(>’Š+œųÄź>łäEš7n,wšBѱcG)ĶgžyF,Y²D(¶eė(,X`3ķåĖ—KĖFqśōiŃØQ#Õ“źÕ«gµžęĶ›ETT”¦¼Č_mŚ“ēϟwųŁW¬X!ŒF£Siėt:ńŌSO9<¦Æ]»&zõź„9Ż:ˆ+W®h>n~żõWQ£F §÷Ķ AƒÄÕ«Wķ潓“T̜9Sx{{;•¶ŸŸŸųųćī÷£GŠ-Z8½ß‡ &²²²¬Ņ[¹r„Óū€hŌØ‘ü:’ššŖHóŪoæU]N~.Y³fųöŪoóģ½jÖ¬)6lŲą0/‡M›6uzæ&&&Šœœ›éīßæ_±Īž={l.›––&ś÷ļÆyū­Zµ—/_>>>ҼŋŪL?))ItėÖĶéļzȐ!"55Õį>tÖwß}ēŅļ°OŸ>āʍ6ӕ’>ęĪ+¶mŪ&j×®­)mƒĮ –.]ź0ļééébģŲ±BÆ×;•÷¦M›ŠƒŗmZ_ׯ_ƒ֜Ÿøø8±’~›éĖ—iÓ¦‰łóē OOOÕ“ęĢ™£X·ØØH<÷Üs6—·õņņņÓ§O„„„v?{jjŖčÓ§ÓĒODD„X»v­Ć}{ąĄŃ®];§Ļ >ų ČČȰ›¶ÉdO<ń„šššp*żČČH±}ūv‡y?räˆhÖ¬™ÓyOLLŁŁŁÓ'¢[£{÷īņßi2€ßü`)€y^š €1HŠ@#”•éĆPVĘ÷GY™ß` Rśžūļ'å½{÷Vų6å€ČČH!„%%%"<<\šæ|łrĶé­^½ZZ/44T˜L&!„ 4ęߏĄŽ;iĪ;·Üi ” “hŃĀźF'((HDGG‹ššpįēē§zĮżšĆUӖ<<KHH°ŗNŃķĮ@réŅ%ÅEvšąĮ#įå%Ō©SGš’ŌSOIó‡ ¦9½|PZoüųńŅüzõźIóoeĄ² 1uźŌr§)„2`~UÆ^]Ģ™3G\ŗtI±lII‰8|ų°xī¹ē7¾¾¾āāŋViĖņWŻŗuÅōéÓÅę͛űcĒę3gė[ :vģ(/^,N:„Ø­ĢĖĖG ,qqqŠul}ßÅÅÅ¢nŻŗŠ›•¹sēŠėׯ«.Ÿ™™)Ö®]«ŲW6[üė_’Rä#..N|óĶ7āęĶ›ŠåL&“Ų¾}»6l˜ź~R;nŅÓÓ­ Ѓ «WÆ—.]RÜōdddˆ?’üS,X°@ø žłĻŖężōéӊ PżśõŊ+lÖØ\¾|Y,^¼XŃR#**J«.߯_?ÅMą /¼ öļ߯šžÅ‹Å’ū_«cį›o¾Q,—œœ,–/_®x=ZZŽ`0XżłņåāēŸVĶ£3\ ˜_āż÷ßgΜ‘Œ%%%āܹsā“O>±śÜ÷ÜsĶ|ÜsĻ=Ņr>>>bźŌ©āąĮƒŖ5ū.\Ÿž¹ā\fļ<„50cĘ År±±±bɒ%Væ«¢¢"±{÷n1räHÕć^-PRRbTėŁ³§X¾|¹ÕļŠd2‰Ć‡‹wŽyGń; žõÆŁÜ‡ĪČŹŹ!!!Š“ļ½÷^±lŁ2qīÜ9‘——'-›““#8 fĻžmÕ¢éŁgŸUM_­…ŒŃh³fĶĒŽҲÉÉÉ⫯¾mŚ“±Ś’¶ A&LP,Ū°aCńį‡Ф¤$QTT¤XöĢ™3bńāÅVĮ6mŚøaOZ_ęW“&MÄŅ„K­ZJ¤¦¦ŠoæżV“nŻZ±|ļŽ½UÓW (čt:qļ½÷ŠĻ>ūLģŻ»Wœ9sFœ9sFQė½vķZÅ:¾¾¾bҤIbŻŗuāŚµkŠżtķŚ5±eĖ1iŅ$įėė«ŲĪęĶ›UóełDEE‰>ų@üńĒŠć'??_\»vMüüóĻV×ŠŠŠP‘™™i•¶Éd²ś}÷ļß_¬X±Āźŗ^XX(öļß/^żuQ«V-Å:ƾśŖjŽ-ƒ®Ż»w?üšƒøvķšÕ1—••%6oެø§ zõꄚ¶BōīŻ[qxńÅŁTÆęóYżśõé÷Żw6Ó'¢[‡€*ƲY[ļŽ½Åśõė+¬i–­ĄĪ;p-ŪĻĖĖƒAZOŽüöv„Šq{5ŠĪ° „††ŠćĒ;\ļ—_~QżŁŃy IDATŸzź)«eŌcƌQܼŖY¶l™¦›dKyyyŠćNÆ×«žö7lŲ H’ĒŌ”~~~¾ˆŽŽ–Ö›?¾Õ2iiiŠąH‡4=zņŅK/Yķ+µćę£>R,3}śtMyĻŹŹR“0šńńQ½q|õÕW„eüüüą 4„śōiE-®ZķĪÕ«W5ßß’½¦“ÓŅŅDDD„“ŽČ‘#®3gĪÅ1]Q\ “mŪVu’Ėååå‰Ī;+ÖKII±Z.99YpÕz<ßøqCqĆ’Č#Ø.§%››«Ø1nٲ„¦Śö7ŽxĆźøW Xž^{ķ5MŸ155UńX„ŃhtźQ0[ŽyēE~Ž{ļ=MėŻ¼yS“jÕJZ/00Pµ–Õ2ķš>¦¤¤D<šĄŠõԚZ_¼xQq-8p Ķš^¹¢¢"« ĶīŻ»5}n{Ō÷Ž{ÆĆǬL&“0`€b=µV –ƒĮ )ų×µkWi   qąĄMŸg÷īŻŠ Ą}÷ŻgµLff¦¢ö:..Īn«,¹·ß~[ńyęĶ›gµĢĀ… .£&%%EqaBˆüćŅ2 Š\Ū>iŅ$i=Õū±””ÅłlõźÕšŅ¾yó¦ā1™Ń£GkZˆ*VEŲ `%ööŪoĆßß_š^·nī¹ē£AƒHHHĄØQ£0uźTĢ›7?üš8€«WÆŗ5ķŪ·Ē]wŻ ¬'įüŃį:k×®•:Ł©U«V„ēŪĻĻOzŸ••U!Ūxé„—ŠØQ#‡ĖõéÓ#GŽ”¦ĶUŁÓ„K|śé§ØV­šŻå~żõWé}dd$Ž|óM‡i€ÆÆ/.\OOO@ii)V¬XaµÜĮƒ„÷µk×Ö}:4hąp9ł7Ę“iÓ“dƒļ¾ū®4]PP€­[·Z-wčŠ!é}Ÿ>}©)żzõź”Y³fғھ9xš ŌXdd$†Ŗ)m£ŃˆAƒIÓ/^Ō“^eåé鉯极v—óõõÅ{ļ½§˜·k×.«å8 u|Yæ~} 0@S>BCCĖ–gænŚ“IŃ£ųܹsa0®7yņd4oŽÜįrß~ū­ō¾S§NxńÅ5å«zõźx’ż÷„éōōt§;ĆT#?Gµk×O=õ”¦õBBB0ž|i:++K‘–-‹-rŲ™®^ÆĒܹs„ó ~¼¬^½Zź8/((‹-RŒ2c‹§§'ęϟÆų^µœ÷åēē‡Å‹ĆŪŪŪīr^^^ųųćy_³fĆō?žųcōķŪ×ī2ŁŁŁŲ±c‡4żüóĻ£eĖ–ÓŹŽ‡§Ÿ~Zšžé§Ÿ¬FöX½zµbއ~ˆąą`Mé?÷ÜsøūéuėÖY-#’½ōė×&LŠ”vxx8Žyēi:%%EµÓJyǚO>ł$ōzm·ć£G–Ž—”” %%ÅjłłĢÜɬęĪEĶīōėŁęéxŗ]š6mŠ+V`ĈŅPz@ŁI’ōéÓ8}ś“Ķu}}}ѰaCÄÅÅ”’ž:tØĆB£-:‰‰‰xė­·”0bÄ»ėČ{’6l<<<\ڶ»łłłI=‚WD@Æ×攇Ҽüȑ#ńÅ_Ο?óēĻKĮ5“'OÖ“/wīÜ)½2d¼¼¼4ē)22ķŪ·ĒöķŪ( “f^^^hŻŗ5 I“&Šé4=Ŗ(“©Ä /Tß}÷ŻhŃ¢…¦t===1räH̘1Ćę2„„„8pą€4=bħŽĶŽ;Āh4JĆ'8qBqĆ”Ģū¦sēΚÓļł°MZ fżśõ“zŒÆU«–SėV6½zõBLLŒ¦e[µj…ĄĄ@é÷®ÖĆ{yö뀤›÷:uź8µ®œüøŠŠB§N4­§×ėńšĆŪåAM›6IÓ?ü°SæŁnŻŗ”zõźøqćąšįĆ €ö!°{÷niśpjżöķŪ#22R* 55UDŽ‹‹s*}½^ĘK…C{Įg-,Ēfwõež½œ“ˆŽŽ¶ūĖ&Z°tōčQ! „ĄėÆæīōśjrrr0oŽ<ÕE¹øø8éFīüłóxśé§„ZŁŖÄ™WЦŠę¦±rņżzźŌ)<’üóŠó­ ?īmIąģqļl­ PV3n¦ųr†åcjå=G9zģ­<Ē‹łžte_ÖØQCzoYųt‡ØØ(§–—†””Õ߈™Öföņė†Į`pŗ€īįįŚµk«¦(æWĪćO=õ”tæ~żŗĶ“Šł½4iŅDz’ÜsĻaĻž=NoĆłłģōéÓxī¹ēpóęM·„ODw>¶øĆŌŖUĖnóŻŅŅR\»v IIIŲ»w/¾śź+)R^RR‚Ē:uré‚6|ųp¼ņŹ+ʚųŪj·lŁ2éż< łŁ¶[Įül9Pö˜„»É/śZ…††J7ņZ15Zn¢,k¬äżHh ½·×RB]»vaėÖ­8zō(RSS‘›› “É„ōōt˜L&äęęJó“?āT¾kÖ¬©9mWŅwFaa!6l؀ݻw#)) ŁŁŁČĢĢ„ÉdBvv6ņóóQPP€ĢĢLé¹~GźÖ­‹¾}ūāēŸ|šĮ˜;w.¢££‹:uź N:ˆŠŠBDD„ō^K w-ĻĘ;#&&={öĆ ³gĻƜ9sƒŲŲXDDD nŻŗˆŒŒ”öqdd¤[÷kyŽūźÕ«ĆĆĆCŃäZβ2wī\§Ė’·*ļćSī>GÉ[õØq%Ą`Kaa”b{?žų#žųć§Ņ?®”öØOyŁjg‹<@RPP€‚‚›×G­yłēråū”æsĖļø<æGäĮ?OOO—½ņ€žŚļeüųńŅyüȑ#hß¾=‚ƒƒ'g,Ļ9Ž®ofŃŃŃčÕ«ÖÆ_x÷ŻwńŽ{ļ!&& 4PMŪŻē3"ŖÜų›ŃėõØ]»6j×®^½zaņäÉxģ±ĒšłēŸ(»}ņÉ'xõÕWN;11Q ¬_æéé銦fęōĶ5ó:•‰¼Y_E“teI^ŪäŽĒ,›Õ»rQ—·Ž°us}ōčQŒ5ŹķϰŹ÷3}eū_§Ó٬Į²ü,q ĄŖU«0aĀ\¾|ŁķiüńĒčŃ£‡ŌTW³gĻāģŁ³6ש]»6Ś“iƒ>}śą‘G©°Ļ}«8[›ØÅ§Ÿ~ŠīŻ»K­p„8sꌯVįįįhÓ¦ śöķ‹1cĘøōū7“÷Žj ÕųųųŲü­ŹŸ”¹Bk0ĻwŸ£7Ży¼XīKy7®P{ Ŗ¼œ xX·………å>GČ?—«K{×Fł±īīó™ü;...–t•ŚļeȐ!˜8q"ęĶ›'ĶĖČČĄŽ;'Źłśś¢E‹čŲ±#}ōQÄĘĘŚÜę'Ÿ|‚=zH×-ē³Śµk£mŪ¶čŪ·/F}Ē_'ˆČ¶ŹS5KĀÜė°åżķŪĖÆ» ™–æ£ņ®_稊āī})„(÷ž“$oį w|FłgŅņ[r6ņō]9~\Ż®+l}æsēĪÅŖU«Š»woMVäēēc×®]˜={6š5k&u ¬&** æ’ž»Sē³+W®Hē³6mŚTH›ˆ*¶Ø¤Ö­['5”3čÕ«—Ėiłųų oß¾ŅÅāĢ™3Nu #7|ųp©łāņåĖ1vģXÅ’åµ!‰‰‰·ōĘĢĖįr=7ė y ­äĶŻq·,Ō:j«ĘQ-üŌ©S„f’z½cĒŽÅ#<‚ŲŲX‡ :~L^“éč‘K………6›AÖMQM&“[ū‚(**ĀÓO?-ęüżżńüóĻcȐ!ˆ‰‰qxc®e. ¬‰ļōéÓ1}śt˜L&¤¤¤ 99ēϟDŽK—œœŒK—.įĀ… 8sęŒāū<~ü8FŒį°·ļŖČh4ā•W^Į+Ƽ“É„ääd$''ćĀ… øté’ō2ļWłļ=)) =ō¢·}gČka-UŃĀ^-øå1¾{÷n— e€ėMŗĶnÅ9Ŗ¢XÖ–ĻŸ?ķŚµ+Wšī%Dz•‚#–ĒŽ;ΉīhŁ&?.,???é÷ēī»üóūųų(Fp…½ņNDÆ_æ.æ-Ļ9gΜQōƒPXXˆqćĘ”U«V6;Ń“<Ÿ„¤¤Hē/-糑#GbóęĶåśģDT91PIMŸ>]&©E‹Šq×]!ļYŽd2įʍŠŽˆ“JLLÄŌ©S!„ĄĘqćĘ ©Ą—‘‘”O·²5’7łcVWnÜå…\w<ƒg™†+7×ņu,oxÓÓÓc$Ϙ1Ó¦Msz¶ųłłI9»?-oYpÉĻĻwk`ćʍŠ&–+W®Ä=÷Üć¶ōÕx{{#::ŃŃŃŖ½ !pųša¼üņĖųńĒŪ·oĒŽ½{īm¾*ńööFLLŒĶŽ=KKKqčŠ!L›6MźA}óęĶ8xš ęńĪåäæ[g_v A–Ē}Ɔ 5węV*śU‘üüüÕ©SGö³²pö¼iY@wG Zž»ņżŹ|Y~ĒžžžŅuĀ•Ą»=ņߋÉdB«V­nIeFXXĀĀĀlOiiiX“h¦N “É„āāb|šĮųä“O¦-æNØBH糟~ś °eĖ8pĄéQ4ˆØņć#•”¼yzy{\¬›HŗZć-Š‹‹=ŗÆZµJŖyhÜø1š5kębn+ʖ-[Óņ^xŻEŽń„„„Š›}wŒ» ų¾Ė{smٱįž={¤n§‡tT;%ßĪ„¢`Łø+MŸxā „„„ $$?ü°ā»vķ’Ž7oŽÜéĀæ³5wZčt:“hŃĖ–-SÜŲnŪ¶ĶķŪŖJōz=Zµj…åĖ—+ '®ī×ņ÷ŽĪ;–}µøZ sĖNĖŪĄ•ĪW]„ÓéĮW‚¾Ķ^ jä­ŠBCCŻŅ¢B^ėķźń&_ϲĀBŽŅ̲uŸ»wļ–Īć!!!Š^ņåæ—ŅŅŅ 2Ų!!!xī¹ē0fĢiž»Zrét:“lŁĖ–-S€x ś{b ’’×:]ŗt©ÜCɟłõõõ-×óļƇ—ŽĖ{ü—æÆlµ’………Š`Ećʍ­"Üåųńćv› [:uź”āŁ_wäÉ××WQ˜øté’ÓiČk±-G¹āt‡SW®\±ūł>p4¾·„£GŚż£F}Č{6ןāŋHOOGzzŗU“~yMW¾KGƙµk×::ĪéV¾¾¾Šį²m«*1ךét:§;Hõ÷÷WœÆ]ŻÆyÜ7hŠ@ōu%S¦LA||<āććńä“O:½¾\TT”¢éŹ9J>^½½‘q*‚|ĢvWöå²eˤ}ٹsg»Ćī¹ĀŁŽYå­ćÜu]¬Wƞō>++ĖéŃ®]»¦®X~Ē7–Ž;ū{ʾ7óy<''GQč—æ€ćk–š &HßńŌ©S’ūä“O¤ó|ØC­ä•+jykŻŗµ”¾¹ćf­üżżßÆDO TR:tŽ—––béŅ„.§e2™šėÆæJÓåmś~’ż÷K…Ø­[·āڵkøyó&6nÜ(-#T}ō‘ā&³_æ~²ŒŒ §"ņņG&üżżq÷Żw»%ņ›£­[·:µnqq1vīÜ)M›;~4“ ķø¬““ŌįžiÓ¦ō~×®]NÕ­^½Śī’żżż7øņ߅BģŪ·Oš¶NSŽņĀ™@PÖzĮ™š\WĘuv¦gnłg©ˆ– •‰|æŽøqĆéõå|¹śüøßææS-æ÷¾¾¾Ø_æ¾4ķJ?ė×ÆĒžżū±’~§×µäķķ­(d8{ŽŹČČĄ‘#G¤é[ŻŚLžĢµ+ūr÷īŻŅ¾ĢŹŹr{órł#ZŽ!¤GXøōųŠł5Ø““ŌéšdĖcĀņ:$oĮ÷Ūoæ9]Kæwļ^é}Żŗu×µ°°0EĒÉ®<’Ė/æHß±e‹Kłł&--Ķ鐣óxyÆī8ŸQåĘ@%Õ§OEsŻ_|QQšŠJ)S¦( æżū÷/WŽ"""¤gKJJšŻwßaŊŅE©E‹hŲ°a¹¶įNK–,ĮóĻ?/Mūųų”»Ėž3fhŗ geeįż÷ߗ¦Üö}¤÷ėÖ­sźŲY¼x±¢i|ēĪ’—ާ„„9õŲƂ Ķ5ÕöSļŽ½„÷™™™˜;w®¦“÷ķŪ'=ćn¹Ć% ģ³ŹkY¾|9®_æ.M[vĪ)ß7‡r*@ņņĖ/;\F^3µqćF§†cKKKS“ģpTÓ'o֞——W)›:»‹|ænŲ°Į©NÅ®_æ®xōÄÕTłć"łłł˜={¶¦õ’’’4 E÷üCz’Ž{ļ!55UsŽNœ8”»¾}ūöš×µE~ŽZŗt).\ø yŻ÷Ž{Om€jßI~Y»v­ĶaŪŌbÕŖUŅ“;ö„„ćĒŪķ!^néŅ„8uź”4-’^Ź#66VQŁšŸ’üGóhEEEŠć?&&ĘźńøAƒIļsrršŸ’üGsŽrrrūG­“ełļå?’łS-öķŪ§x Ćņ;–GL&6lŲ 9m@¼P;ߔē|vćĘ EŽ+¢„$Ż~ TR”””ŠįҲ³³Ń©S'Lœ8»wļvxBĻĶĶŚ5kŠ«W/¼÷Ž{Ņ|ƒĮ€‰'–;ņžåĖ—[õž»äååįźÕ«Ųæ?>üšCtźŌ £FRÜx<łä“ˆŠŠŖ°}ŗŪ‡+«,äūõŲ±c>|ø¦féÉÉÉHLL”ŽcOOO$$$ø”‡ččhEˤ7Žxoæż¶Ż}¾}ūvōķŪWÓ žčŃ£„šČĖ—/£[·nš III6l˜t( Ą®z蔇¤÷yyyčŁ³§ĆŚōœœ̜93gĪ”ęµoߎf/č„wļŽØ[·.€’_?ūģ3‡ßCjj*zč!EŠtäȑ’ĒžóŸX“h‘ĶóOii).\ˆĒ{LšŽøeū:NńٶoߎaƆ9ģ§åģŁ³2dˆ¢;nÜ8«åī¾ūnÅč 3gĪÄōéÓ^‹NŸ>~żś)‚Ü÷ßæÕrcĒŽ•®§OŸF÷īŻ5pąĄŒ1Bš®Q£†āü”Šå­ĒF5kÖ8¼V”””ąż÷ßW#¢Ź£TbƽövīÜ)]‹ŠŠ0ž|̟?^^^ØWÆjÖ¬ "##………Ņ02j7# .“j¶ģŠūī»O>ł$Š‹‹±}ūvéB©Óé*$0tčP·¤Ó½{w§Ÿńu†ææ?rss±téR¬\¹Ż»wG£FP£F ćęĶ›8pąvīÜ©ų~ŗwļī¶/ ¬gź©S§JĻ’„¦¦b芔ØU«āć掠  ©³gĻā÷ß·źkā•W^±źŖzõź:t(¾łęe- ¢¢¢Šæ4jŌƒ>>>BąŹ•+8~ü86nÜ(5E •ŽŪjŽ’ę›o¢[·n(**Bqq1&Mš„7Žx={öDTT ņó󑒒‚]»v!)) @YÓb!„Żńf͚aҤIRė‹K—.”wļŽˆŠŠB||<ĀĀĀˆüü|deeįęĶ›ųż÷ß­žµœ={¶¢Ł(Pv3#vŽyē|÷ŻwčŪ·/¢¢¢OOO!99‡ʖ-[¤^¬åūF­Ikß¾}ŃŖU+8pšĆ?ąĒD‹-p÷Żw£N:0 šōō„ÉdĀõė×ńĒ`ūöķŠ‚ä<ąšQ Ž;¢ZµjRó’9sęą«Æ¾BėÖ­Q£F x{{#33“'O¾ć{‰0`š5k&5+_±bV®\‰–-[¢qćĘVūõڵkųć?°cĒÅ~}šĮ„‚”+^{ķ5lŚ“ (--Åäɓ1{ölōčŃŃŃŃŅqyåŹģٳGŖ•÷ōō„‡‡‡ŻG57nŒ^xƽö€²‚Į=÷܃ššp“oßµk×FPPHĻFŸ8qGŽQLfΜYīqę >>cĒŽÅēŸ ¬ß‘ž={"22ńńńØ^½:ŒF#L&²³³qźŌ)8p@ŃEÆ×cÖ¬YåĪ‹³<==ń駟¢oß¾B 33ćĘĆ³Ļ>‹vķŚ!&&ĮĮĮŅo$==/^Ğ={-ŒnŻŗ¹=¾¾¾ČĻĻĒŲ±c1sęLtėÖ wŻu|}}‘™™‰‹/bƆ Š>KąÕW_uėˆ “'Oʗ_~)ł¤(((p˜?guģŲQŚĪ[o½%ڵkēTŽZ“h!ŅŅŅTÓ^¾|¹bYg˜L&1fĢ—ö—N§/æü²Ķ“SSSELLŒÓéÖ­[W,\øPšnŚ“©Ķm,]ŗTxzz:õ/^¼XDGGKóV¬X”šv~~¾>|øĖĒÓ¬Y³lę{Ļž=Āßßßé4{÷ī-…ŽXę IDATžyęiśŃGUM’ܹs¢aƆ.ē½C‡";;Ūfžå^xį‡é­Y³FSZ¶¤¦¦*ҳuž ’–łä“OœŚFll¬ĆļīōéÓ¢Aƒ.ļ×Ī;‹ÜÜ\Õ“÷ļ߯XvĻž=6óŗråJįķķķŌoõ£>M›6•ę-^¼X5m“É$&Nœčņg|üńĒEII‰SūŽž¬¬,Ńæ—ņāåå%,X`3ķ-ZHĖžūß’v*_ņkŪøqćl.÷łēŸ —‡7oŽt*_¶X_K–,q:_/¼š‚Ķō»uė&-7qāD§ņvčŠ!åŅ> ‡¶›ž7ß|ćŅł€ˆ7nܰ™v~~¾Ė×PbņäÉ¢““T5ķŅŅR1aĀ—Óöóó7n“™÷3gĪ(Ī{ξ:uź$rrr“}ÉDT”ŗwļ.’}&ų ĄO–˜ąUĻ`0€­4BY™> ee|”•ł=ī›7ocƌQÜky5lŲP̚5K\½zÕį6œ ,Z“Čj{sęĢqøŽ­ T«VMtéŅE¼ōŅKāŌ©Sóå*y`éŅ„"//OL™2E »ł«Q£†˜5k–Ż Dyfß~ū­čܹ³¦}ęėė+śõė'~ūķ7‡é¦„„‰G}Tųłł9L×ĆĆC 2D\øpA;vLšļåå%222lnćčŃ£¢oß¾-[¶Ū¶mBѾ}{i¾­€Ł×_­yßčõzŃ„K±aƇūęĉ¢’žĀĆĆĆaŗbҤI"77W|öŁgŅüęĶ›ŪL?77W¼öŚkNXcbbÄģŁ³…Édr˜³’’ńöŪo‹°°0›éž]B‘““#^}õUÅ9ŹŃ«~żśā½÷ŽEEE6Óu& DŁń3pą@įååewŪMš4ėׯBŃ«W/i¾­€ŁŗuėĀ„^Æwųłt:h×®Xµj•Ż4]URR">żōSѼysMūŪ`0ˆ‡zHœ>}Śnŗ·" „ĒŽ>śØŠ”’ččhńī»ļŗ5my|„§§‹ƒŠ®]»:ĢOóęĶÅĻ?’l7żņ„(ūæųā‹vĻ#ņW:uĔ)SlĘ-8qBüß’żŸęļ <<\¼łę›6v–VÆ^-z÷ī-t:ęėÄ/æü¢)ķŸžYōė×OÓµ€š÷÷#GŽēĪs˜vNNŽ˜5k–Sē³zõź9<ŸŃ­UŹżõą Ą@8iPėääd·ŒQNåSZZŠóēĻ#)) ÉÉÉČŹŹBNNŠŠŠ ×ė„°°0„‡‡£eĖ–N|źŌ)é9±jÕŖ9ģX)77W1ī9P֓µ¹©-;v쐚<‡‡‡«ö|żśuE/ĻZłśśĀh4"88Õ«W—žUÆHūöķ“:j޼¹4^±ÉdĀĪ;qņäIܼyYYY0ØQ£š5k†V­ZY5!·tķŚ5Å_jMµJMMÅ”C‡pņäIäęę"==ŽŽŽFpp06lˆ6mŚ8½Ļrrr°wļ^œ>}éééČŹŹ‚^ÆGpp0ŒF#ĀĆĆѶm[ičÉŅŅRų¾ZŽ™ōōtlŻŗÉÉÉøqćJJJŠźÕ«£sēΊŽŠ<(5£oÖ¬™¦ß€y?Ÿ8q¹¹¹ČČȀ¾¾¾ Ett4ڶmk5µ–t÷ģŁ#żV322ąėė+ķ›»īŗ mŚ“‘Ę]NOO—zY×étčŁ³§Ćm\øpüńĪ;'}Æ „‡‡£iÓ¦ŠŽ§œUTT„}ūöįčŃ£HKKCff&<<<ˆaƆ)ztw%myß¶¾³-[¶HĶS7nģŌõhēĪŅ#õźÕÓ4Źłóē„żš——gµ_#""Š“iS«!ĆŌdggcĻž=ŅtŪ¶m5 Ÿ™••…-[¶ąāŋøyó&ŠŠŠ¤ć¾cĒŽŠż~äČ©yp\\œ¦įÅrrrpōčQ?~©©©ČĶĶ…Éd’ŽŃzõź!>>ž– ³—’’‚C‡įĢ™3ČĶĶEff&|||¤sTÓ¦MŃ¢E «^ÕÕģŁ³Gz<::Ś©cT~‰ˆˆŠōŪ)**ĀńćĒqōčQ\½z¹¹¹ČĖ˃——‚ƒƒ‰&Mš”ėwhˁż‘¤§§#88@Ł>ݽ{7.\ø€““4”––¢F C§N4uņ&•¢nŻŗ.wņ[RR‚“'Oāȑ#HIIANNņóóa0¤kvŪ¶m]©Ø  III8vģ._¾Œ¼¼<ĀĆĆF£hҤ š4iāŅČ YYY8räNž<‰7nH÷^~~~0ØWÆŚ“ićōuœöü“'OāśõėRŽ}}}įć惰°04hŠ­Zµr©g~wžĻˆčÖźŃ£‡|4’ēdȐž×+Mö>@6€\y ˜(PĀŃŹ^€ˆˆīlą(DDDDDDDUDDDDDDDUDDDDDDDU€ēķι¦AƒXæ~½4psCDD•DDDDw(ƒĮP®bˆˆØjį#DDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDUDDDDDDDU€ēķĪQUpöģY|żõ×Ų±c’““‘››{»³DDwOOO„……”Q£FüšĆŪ "ś»~ż:^żõŪ ""ŗƒ°"¢ šå—_¢øøX1ÆŗŸ'¦tŽ@«ŚžšŠėnSΈčNt-· 憍g3ó—,Y‚·ß~žž¼„#""ĒŲ€ˆØüöŪoVó¦v­ƒ6,ü‘Ójś{įß]#PĻ裘óęM;vģ6劈ˆī4 U€+W®(¦½ō:“¬ķ›rCDzńÖē‘Ė—/߆Üѝˆ"¢ `2™ÓzXļODååķa}ėVXXxrBDDw"ˆˆˆˆˆˆˆŖöCDDDDTąźÕ«šņņBHH|}}ow–ˆØ‚±Q²yóftźŌ ƒŃŃŃØS§ЬY3,Z“H±ģĀ… ”Óé ×ėqžüy›iŽ’żŠétųöĪ;<Ŗ¢‹Ćo6›^6½RPZ@@ézƊō"E@@©J±PD"ˆ ŅDPŖŠH/†€  $$$¤÷¶a³ŁżžXsɲ EńCaŽēįqwīĢÜsoāĶ3ēüŽæææŌ6nÜ8ŒŒŒ žŁŲŲąļļĻŲ±cIOOؽįįįōčŃć/_ļ’‹F1räȧm†ģģlJJJž¶)‚!"@ @ xNˆ%<<œzõźńÅ_ąēēGII ©©©lÜø‘aƆaaaA’žżõƹøø°sēN¦M›f0gAAū÷ļĒÕÕÕą˜•••žS”““”““4nÜøĮʍ9qā"śą ’––†»»;»vķ¢gĻžOŪĮæ į@ žvķŚ…Z­ęūļæĒŁŁYļX÷īŻńööfūöķ€īŻ»³}ūö {÷īE«ÕŅ”CNž<©wĢÄĄ>}śThKēĪéŠ”_~łåæbē\ x)@ ĮsBff&ÖÖÖ‹ccc†NķŚµ ŽõīŻ›ČČHbbb Žmß¾ššp,--Ė–öķŪćēēĒ?üšŠ¾jµš)S¦ąé鉑‘... <˜””©OĖ–-Y°`ƒĘŽŽžĄĄ@@·#>bÄŖV­Š‰‰ vvvŌ©S‡·ß~[ƊFFFćʍĆÓÓSSS©[·.sēĪ„““TźwóęMŗwļŽ½½=ĘĘĘT«V÷Ž{­V«góļæ’N—.]šņņĀŌŌsss7nĢŗuėōś]¼x‘=ząģģŒ\.§J•*4iŅ„;včõūłēŸiŻŗ5666įččHŪ¶m9uźńńńųłłčR0üüüčŅ„‹4Ē·ß~K³fͰ°°īc×®]¹|łņC‚g @ <'Ō®]›œœ~üńGڵkgp|īܹŽkŌØÕŖUcūöķ¼żöŪR{nn.‡bóęĶüüóĻmŸŸüńĒCūm/^Læ~żž¶@  NŸ>ĶĪ;éŪ·/nnnܾ}›;w2jŌ(|||X“hQ…cū÷ļĻ„K—ˆŠŠ’ŚvģŲA×®];üæ KKK½šśŹ Ń[ü¼ųā‹€ī}³Œ—^zIoÓ)!!€¦M›ĢŁ“iSŅÓÓ)..t!ūćĒ'//;wīĖéÓ§‰ŽŽ&??€øø8Œyį…ōę  jÕŖŅ÷ųųxlmmõ’e¼’žū’“!88˜˜˜BBBČĪĪ&>>ž7n°’~Š‹‹ÉĖĖt›x*•Šoæż–œœi®Zµjqžüł Ó6īĒĘʆ¬¬,:DAAŌŽ¢E Ο?/’Ļ "ąfƌz9?edeeQ»vm–-[FĖ–-ŸČ¹222ˆŒŒD£Ńčµß_JęQټyó“0뉐šH”i@ ’LMMéÕ«½zõŅk/**bäČ‘Ģš5‹ąķķ­w<44”źÕ«³}ūvfĻžMvv6?żō“A®ść““#…Ø?ƒ6;;;@÷Z†©©©^Ÿ²…{E …B!÷ōōdÓ¦M̚5‹;wīH}ĢĶͱ±±‘¾gdd`cc£· _FyEJJJ…: ­Zµ’>«Õj¦M›ĘgŸ}¦·(wuuE.æ·TėŌ©½zõ¢oß¾hµZlmmńņņĀĻĻ~żś1pąĄ ĻUžW^y…={öбcGģķķńōō¤zõź :”N:=tĮįxqpp yóę\ŗtIjKIIaÓ¦M\¾|™ĀĀBÜÜÜØQ£Ƈ—ŽėÖ­C­VS«V-6oŽLBBS§Ne÷īŻ’'xüųńČår:vģH÷īŻŁµk,^¼X:ׅ Ų¾};wīÜ!;;Zµjŀ¤ŻĪ;¹xń" .`łņåŲŪŪS„JvģŲAjj*¶¶¶“k׎Įƒė=„###Łŗu+±±±Čd2<<@ ‚æĢśõėIHH`žüłĒ,--™£mŪ¶XZZbccƒ\.×sz˜˜˜°uėV>żōSāāāHHH >>žÓ§O3hŠ \\\hÓ¦M„÷t%ųį233õę8|ų0Żŗućāŋԭ[÷sžūˆ€ē¹\Naa! ‹ eżśõ8;;ˆZ­ęƒ> U«VRųžįƇ™;w.ķŪ·'&&{{{ņņņˆ%==Š…EÅĘʒ••Ą¹sēųꫯ¤ó:tˆĘ³’~är9žžž¤§§3|ųp½0ū³gĻņõ×_Kß8Ą[o½EŸ>}ø{÷.>>>¤„„1tčPʍg0DDx{{“””Đ!C˜3gŽŌļ믿fņäɌ=µZ½½=GŽ”E‹ģٳ€ōōtbccÉĖĖC„RKll¬tßęĢ™Cæ~żHMM% ~žłgĀĀĀ Ją@ üˆŽŽę“O>1ˆŚ,£,óžō2ś÷ļĻÕ«W¹zõ*Ū·o§G˜™™ż%[rss‰ˆˆx¤Eg\\œAJi||<...•Ž+ kONN68–˜˜ˆL&ĆÖ֖K—.QZZʜ9sĄŽŽsss@ē¤(ĆŁŁ™¢¢"½ØŠ9ŹGø»»ė„”güųń¼ōŅK€nc¬nŻŗ¼śź«xxx`oo\.× ’ųā‹/˜>}:vvvŌ«W.]ŗ0~üx¾žśk<<<8qāD„÷ ŒåĖ—³hŃ"©_æ>Ż»wgҤIģŁ³™LĘéÓ§:‡ąæˆxQ*•œ={V*Ł·oÉÉÉ$$$艾œ9s†¦M›/y€³³³9r䈞čIß¾}łüóĻ6lūöķĆĀĀ¢Ņs/^¼˜NŸ>­Ö“jÕ*ʏĻĶ›7ń÷÷ÆplJJ —/_¦N:RŪ¼yóX°`óēĻĒÅŅ 6ÄŃ£GõÄgΜÉīŻ»õ¼Żłłł\½z[[[@÷ąnÖ¬kÖ¬”{÷īLŸ>éÓ§óŚkÆqüųq~śé'={Ö¬YĆüłó™1c†Ō¦ŃhØY³&_}õ͚5«ō>@ < Z“hĮ‡~ČōéÓyēw¤HOŠ-²gĻž¹¹9Mš4©p|­Zµ bÕŖU9r„½{÷>¶ ………DEE1sęLŠŠŠ6lŲCĒÜŗuKŅ-Ż;׏•+±¶¶&44“ŅqX[[³zõj4h€‰‰  üā‹/Ø_æ>¦¦¦Ņūėoæż¦¢ģŲ1Ī;G×®]ŲŸL&cåŹ•Ģ›7Oź·jÕ*½{£FP*•¬\¹’iÓ¦I퉉‰łDZšV„„„%K—.eģŲ±|÷ŻwT«V’’āćć155•Ķ›7'44”Ž;еµ5ÉÉÉÄÄÄJvv6ÕŖUcęĢ™,X°€uėÖįķķMJJ EEEzUBCC™8q"Ó§Oēƒ>ĄĆƵZĶõė×qqq‘*) 2„Õ«Wćēē'„˜ĘĘĘbllŒ···$ų7xš`Ö¬YCPPžžž8;;“——Ēõė×ńõõešąĮҹmllhÕŖo½õėÖ­C”PpįĀƌĆ×_ææ?~~~8::’““Ƶk×hŌØ;w~čĻAšßG8žaN:ÅŋõŚ 5jŌ`ńāŒēŃÅÅ…ļæ’ž·ß~›ōōt P©T$&&č…[•Ay\JJJ*-/āįįńP™ŠJŅø¹¹He–,YĀ©S§(**";;›»wļ’””dfooo0Ÿ\.$%Z€Ń£G3qāD–/_N`` žžžT­Z•°°0=ϱ@ Įæ‰?üI“&qžüyÉĶĶÅŚŚOOOZ·n­÷ŽŌ¼ysÖ®]+…Ć 6 '''ŖU«&ķØƒn‘Z^`ząĄ.ī---quu„I“&X[[?ŌŽ &`ccƒ··7{÷ī%33SŅ‚ŖY³¦ŌļŻwßÅĒĒĒ`üȑ#iÓ¦ §OŸ&11FCÕŖU銔ƒ$ÜgjjŹ©S§ųńǹvķ*• '''Ś·oOnn®^åƒyóęѽ{wŽ=Jaa!īīītė֍ .诧+V0tčP.]ŗÄ;w055ÅĖĖ‹ššpéŗzõźDGG³’~166ĘĖĖ‹Ī;sźŌ)©Ÿ³³3—/_ęŲ±cÜŗu‹““4ĢĶĶ©S§-[¶Ō;/čŅbæ’ž{bbbP«ÕųśśĶ/æüB||<™™™XZZBóęĶõ~–‚gįx†Y·n]…UīgåŹ•L:•qćĘ1`Ą,,,$ѓ¶mŪ>1{“Z-Z­¶Ņœ²‡Q‘÷ø¬ĢKك­oß¾\½z•ńćĒćķķ\.G”PšėÆæņÉ'Ÿ¢gĻž\¼x‘„„Ų½{7³fĶ’<Ɓ@ ’F¼¼¼šņņzhæĄĄ@õŚÜÜÜ5j”Aßū£D›5köDR"ĖTėA'Ę\żū÷Æō˜O…΁ņ˜››ÓµkW)Üæ’üs½0(Šå6=I²²²ųę›očŃ£‡AŲɓ'³eĖį@ ’*D¢²€‚‚‚ Ė”m3‚ē ą‘ <£?£En|łŚRõS¶čÉąÖ»ŗJ4ig÷“už)[$ü³Ü¾}› .PRR‚««+!!!ŲŲŲō»uė×®]£øøgggź×Ə„„„tüʍ˜ššāååÅoæżFBBNNN„„„Hż’““IJJ"11­VKdd$ø¹¹UjŸR©$ € .”””dddpśōi“Z-õė×ĒÓÓÓ`ŽėׯsóęMéėׯ™™¾“[£ŃpåŹ¢££‘Ėåxxx"‰`—QZZŹoæżFll,¦¦¦T­Z•   Iųŗ|戈RRR°““ÄĆƃĄĄ@Ičŗ<—.]āĪ;cooOPP lÜø‘ &@^^‘‘‘ddd`kkKŻŗu+ūNOOē×_„ØØ{{{‚ƒƒqvv®šž ž_„@ Į#ćÖ¬'2SŻ ōĶ­‹Ÿ€¢z(ī/ö ąöuį<³Ó»woöļߏ¹¹9¦¦¦äååaeeŧŸ~ŹĖ/æ @AAżū÷g’žżXXX T*±¶¶fõźÕRæqćĘabbBJJ —/_F.—s÷ī]ÜŻŻŁ½{77fćĘĢš5K²”Aƒ,Z“ˆ7ß|³B;-ZÄŃ£GqppąĢ™3£V«éܹ3 `ĈØÕjJJJĖå|üńnj;Š9zōčĮɓ'‘Éd˜ššR\\Œƒƒ_|ń;wąęĶ›tģŲ‘›7obccƒZ­F©TāååŁØS§.\ [·n$&&bkk‹J„¢øø˜5jpčŠ!¼½½8wī½zõ"%%[[[“Z-999ųūūóć?āććčœįįį\½z…BL&£  ™L†…… 6”Ė—/ēķ·ßF©TJ?€AƒńłēŸcbbĄÄ‰łä“OĖåX[[“\.ēķ·ßf޼yOą7Gš¬ R‹¼¼Ó§O§  €ķŪ·ćććƅ ˜2e o¼ń™™™QTTÄŚµkłź«ÆŲøq#§OŸfåŹ•lŻŗ„RIVVÅÅÅL›6÷Ž{ÄÄÄæó+#xĘĮߢyóęŌÆ_’/ĶĢĢ$!!į [ōd(**ĀĮĮ1cĘčµ§¤¤œœ¬×–žžŽƒƒųš(@šŲDGGDÓ¦M„6…BĮüłóyć7¤ ½{÷2dČZ·n¹¹9īīī|šĮØT*NŸ>- bҤI˜™™!“É b̘1\ŗt ­V‹¹¹9öööXXX`oo½½½4oexzz2uźTĢĢĢ033c̘1XZZ2hŠ éżÓĮĮW_}•ĢĢL²²²$Ū_{ķ5ĀĀĀ055ĄĒLJ Ķŋ„{Ń„K½ō___V¬XA§NōīYĻž=qqq‘Śj׮ͪU«xńÅ„¶Ž;ņī»ļźU®ņšš aƆÄÅÅIm©©©Ō­[—ŗuėJmfffōčѵZMRR’t®®®Ģ™3GšÓĀĀ‚Q£FѰaC©<\tt4 …‚~żśI) fffL™2…÷Ž{ļ÷Xšü!R‹^½z”R©žŅŲ… ņż÷ßsćʍ'lÕßG.—3jŌ(7n¬×>fĢŠ‹‹9tčŠS²L xN1’afēŒĢĹ„ %…y”* ()Ģ­ęé™e,ĒĢŽ™Ü™™%ź¢<4Ŗ»”äg¢Õü5»ŒŒåČ-m[Ų`ln‰ZY »Ö‚œæmÆÜĀ…Ę&fؕÜĶIC«ž’G/ÉdČ-Č­ɌQęéī]ÉŻ’»-ĮóFpp0+W®d̘1„……įé鉧§'¾¾¾Ģ˜1Cź—œœLAA;wīŌÆVėŅ~233„6???ƒóŲŲŲPTT„V«ÅČČč/ŁzžzYˆ¼£££^{Ł"_£ŃP\\Lvv6¶—Ł\ößąą`Ö­[GII µkצjÕŖxyyŃ®];½œżąą`>śč#222ØY³&^^^T­Z•ž={źĶ’Ī;ļpöģY6lŲ@nn.*•ŠŌŌT<Ø÷NYÆ^=¾’ž{öģŁCćʍ133#99™åĖ—cii)„¤¤¤ P(ųöŪo īL&“®£nŻŗäēēÓ·o_Ś“i#Łēķķ­÷3@8ž rss±¶¶Ö)Ńh4(•J¬¬¬:>??_O&""###4hĄģٳ+WXXˆ±±ńC½»¢øøccc)æéAż4ž(ĶßĮĢ̌µkמ„±%%%”””<1[‚§IÕĪ#ńj?€äß»ćĆJū֙“ …ˆō==ņ'¢7Ķ©“õWēį\æ-·¾]AŅ/ŪõŽÉdø6ķ†k“ĪŲśÕ“ņĪĖSŖ, ļÖ蘭’‰ŌSßż_¦ gÜ_ģSż6X¹ūb$7|>iTwɏūŌÓ{I9¹­¦ōsšŲŲćŃf0öµĀ°ń®-‰ģ•§¤ ›üŲßI9õ‘‡+³Ń¢ż˜XŪ£Vęsnz{äV¶xµŠSƒ¶XŗVƒr/āµŠü[WH>ö ©gö‚V«7—CŻfŽz_ÆMfb*}n²ōØĮ˜kėfõū »ŒĶ­ØŅ²A-°õ B&75čSœq‡ģ«gH?’#ŁWO—ÉM ™õęŽd\8LŌē•’2’2ó+,\Ŗył8××ėņ/9„ÜŅöŽÜf÷žVłõ›†OĻIzse^:ĘõĻŽŖō\Į…—_~™ģģlöģŁĆO?żDbb"*• SSSƌ#…ŖēēēsäČ._¾l0Gżśõ±¶¶–¾ß/˜÷4ÉĻĻ`ß¾}œ8aų,Ŗ_澉°råJę̙Ñ#GŲ“i)))h4X¹r%`Ó¦MĢ;—żū÷³fĶRRRpsscƆ „‡‡0`ĄvīÜIŻŗuqrrĀŹŹ IĢąīŻ»üņĖ/0hŠ ŠŠŠ¤c¾¾¾lŚ“Iz?ĻĻĻ'))‰%K–Tx­U«V•®iēĪ¬_æžeĖ–R©ÄŲؘN:±}ūöæõ>.x¶)Ļ , qćƼ÷Ž{8::bggĒÕ«WX»v-cmm……:tą÷ßכc×®]4jŌlmm122ĀĒLJ޽{Ę7ß|čHŗwļ.+((`ōčŃø»»Kó;;;3räH過O ų—‘{¹•-r+[ģk7©“Ÿ‘̻𠄾r+[ģWŚĄ”vS©o^¬ž3ČÄŚžYŪØ1lv+\ü[Xc_« Õ_™Mƒy»¤…Ž?…CŻę4|wŽŻ_ĆŚ«F…‹™©Šź ØžźS°«Ń ĀÅ?€¹“ī/ö&hź:j_aŠO£V÷ķJé\nĶz`ėTį\ī/õÅʧr+[Œä&Äķ^Y©ķåĻ%357ø.c3‹JĻ#üט8q"GŽ!&&†āābīܹĆ|ĄĒĢ™3g]hż“iÓ8ž|…’śõė÷”Æ¢bģķķ‘Éd,Z“ØRŪŪ“i袖.]Ź™3gøsēJ„’7nΘ1c$MVÆ^ĶÆæžJrr2ÅÅÅ\»v šŚkÆŗjŪ¶mcėÖ­\¼x‘Ÿ~ś‰={ö°eĖŖWÆ.ŁĮĮƒłžūļ),,$;;›˜˜222ˆ‰‰”OŸ>R_‚ƒƒ+½Ž 6H}{öģÉĮƒ¹vķEEE¤„„±k×.:Ė-[ž·^šįßć®<1Š‹‹‰ˆˆ 99™·ß~ŖU«Ę–-[;v,“&MbńāÅŲŁŁqėÖ-/^L»vķˆ‰‰ĮŅŅ’„„ś÷ļOēĪYøp!ööö(•JŽ9ĀüłóY¶l'Nt žņBy3fĢą»ļ¾cŃ¢ETÆ^]*™ņöŪoćččČāÅ‹éŁ³'ģܹ“Ė—/³`Į@:ĻōÆæžŹģٳ©Y³&†ˆˆ-ZDQQ6l„÷Žxć †ĪōéÓ ¬š~ŌÆ_ŸłóēSRR‚‰‰ jµš£GāįįĮńćĒ„<’Ó§O“™™IXX9990räHĀĆĆY½z5%%%Lš¤ŪņōōDūēī×[o½Å믿ĪŌ©S),,dŪ¶m̜9“   ImV ųƑ{ó"µ ™ÜkĻäÖØ•ż¬<06ÓE½”dcbm¹³'¦¶ŽØņ2 ś›;VĮĢŃua·ÆėÆ=~96޵Šj4äŻ¼@Qrje>ź¢<ŒĶ­0±¶ĒÖ§.V^ŗ+ 7oj涜Čy}ŗćžW°t÷„ökː™ŽŪE)Hˆ¢čĪ J rєܿsQ©ĄĘ»6ęNŗ]jļZŌ’1æ-zZ?eŹ®f#jŽ\Œ‘ģĻ-­–¤ ®£VRzW‰ÜĀ 37l|ź`b­[ō+Ŗ7 pōū\žh”Į|FrźLZ…™½ ZM)¹7.R”KiQ>ĘęVXøUCŠĢDē\qØŪŸŽÆ³ķŽŽé]%ÅéśāQęN’ 8ćŽĮłKļ*õ¾ŪųԔ΄•÷ī›VCĮķė$DQR šRŒĶ-1wöĀÖær Ż®¢Shk^~‡ØĻßћ/óņqŅ#ŅEį7šM.¾7ČĄ¹•-ŽŻ_“¾Ē·ZgļŸgÜA^”/}7±¶ĆųĻs—dSŖŌ­č÷X ų/ҹsg,--ٱcFFFT©R…”C‡2iŅ$āāāhҤ žžžŅRy233 `ÕŖU 0ą±Īmdd$‰ žSČår\]]¹zõ*½{÷Ö;vżśuš6mŹžżū ĆŹŹŠåĖ—3jŌ(@—JąļļOÆ^½ųņĖ/ÉĢĢÄÜÜ…BĮīŻ»„M/333jÖ¬I—.]8pą†ųųx6lh`STT””¶ąėė‹““Õ«WĒĖĖKŅC°··ĒŻŻĘÓ»wod2lß¾µZmeŃ£GLLLŲ±co¾ł&{÷īÕūy9;;Ó­[7ÜŻŻõōįxF122āȑ#ųūūKmėׯ§K—.,[¶Lj{ńÅ©[·. 4ąčŃ£„‡‡óĒ V«Yŗt©T® Y³fģŚµ‹;wīPĒŽcģŲ± :TjkŃ¢łłł’0KóęĶi޼9QQQÄÅÅI]Šå:ķŪ·/¾ųB*/о}{ łä“OXæ~½Ō>eŹ”JĆ¢Źhٲ%3fĢąĀ… 4nܘ+W®PTTĄ ųč£¤~'NœĄŻŻš5kĢQ&sąĄŠ‹‹õlNMMtN‚wß}WjļÖ­gĻže’žżĀ ųĻ¢Q“{Eõ`$Ć6 ”¬ĖĒ śŁśKŸ“ī¤jēQR{ĘÅ#żÕC„Ļ9Qzyüv5¢Ø®wR¦ÄńūĒćQ¦ÄUj£]`cźLüc3 ¬¼ŖcW³Łœyģk}¾}§J‹ŲāŒ;ü±z2łqTÜŁČ×°NTu23l|źąŌ -ig÷ėĻŁg²“ų/Hˆāśś·(LŒ®pJ™Ü”*­āŪg F2öµšąŌ‚ĢKĒ*µŁÜ± ŁWϵqw³S Ž›Ś:R}č|ƒu"VU^źGü÷Ÿ¢žsaœsķēftŠÓ|M¤‘1«+ՃÓ.üśĻī[^Ģ%¢6Ī¢(łV…}Ķ,©Öm,^tCܚ÷ ńĒ/(¼sSÆ_Ģ׋qØŻcs+l}ƒp ėDź™}z}¼»½†‰µ… Ń$ž¤æ9ÆÆŽ÷€WfSå%][ÜīO RR‚g…zõź±téRÖ­[GÓ¦M±··'++KJ} ŅEÕōīŻ›÷Ž{ZµjŃøqcÉŹŹbéŅ„ѼyóĒ>·««+„„„¬\¹’V­Zakk‹——×½¾2ŪW¬X§§'!!!ŲŁŁ‘ššŹ»ļ¾‹V«%$$###‚ƒƒYŗt)īīī`ccC\\Ė–-ĆÓÓ'''d2¾¾¾,X° |||°²²āʍ¬Y³†   ©‘‘}ōS§NE”P’’Āʍ‰ˆˆ U«V€.ź jÕŖ4k֌¶mŪJU²²²ˆŽŽęå—_ęāŋ,Z“ˆnŻŗńĪ;ļ0bĆ ‚§§'„„„9r„}ūö±téR@÷3]²d óēϧ[·n899‘——Ēžżū¹}ū6ĮĮĮŗ]‚ē įxF©R„ŠŽā 66–įƇ“­×^µjUŒŒŒ$E~wwŻ®ÜłóēõIIIܾ}Ū@„<=z”6mŚP§N  +³ņ(Üŗu ­VK­Zµ ģō÷÷§  €œœ{BXņĒ'44…BĮɓ'iÜø1gΜ”V­Z“oߞńćĒ“’’‚››'Nœą„—^z$;+ā~Į@™L†Ļ3Y&Qš|‘sķWP„TāŠEšhJī’ōĖöGp4ø7’õ_õŽŁÕø·{»sé’:ūĪ‘rr7­u¹šVžOÜ`jėˆCŻfŗ/Z-|:µņÅ’Ÿ}RĻģĆ̱ >=uS®M»ź9,Ż}°ńŃ)@kTwł}éT¹é•N©Q«Hüafö.x¶{—°Nt%ßāŹŹ hTÅWåeņĒź)4Z|@'fhj†" ōs>ÖUk¢ŠéBØrÓł}éč #HŹ(½[DģŽ°p­†SˆīeٵiWbw.Õėw7;•øŻŸą7@'nåÓ{ ~–¢,Ż}©ŅņĻšd­†čĶóŠ–ŖŸČ5 ’uŽ|óMāćć™4i’éŗ|öÕ«WS»vm¦M›FFF3gĪ$//OźW½zu¾žśk=åüG„[·n“oß^Š$ķßæ?[·nż›WdHYŌčĉõr샃ƒŁµk—”’łēŸ3bÄŗwļ®™P·n]¶mŪ& nß¾1cĘŠ±cG)ņS&“*…įūśśņžūļóŽ{ļńÉ'ŸHs5lؐqćĘIŠż?üš7nÜąüłóŠ#Ž3†#Gt7kÖ¬ÉÖ­[yė­·ųā‹/¤>¶¶¶Lœ8‘±cĒŠ·o_.^¼ČŅ„K™3ēžöŽB”ą7Ž0ˆ„<ߥ3JEb,ŁŁŁĢŸ?_Æ®iyʐ%%%ŲŁŁŃÆ_?f͚… *•ŠØØ(<==õvęļgłņå 0€fĶt/ŹÖÖÖT­Z•fĻž­—Ue‹ž TڧüƒüQDgŒiŃ¢'OždźŌ©œ9s†°°0üüüpvvęģŁ³t芁ˆˆˆ^ŪĆ(”)Ļ_U½žMä\’•jŻĘH;ó÷cė§Ū1Źūƒ»Ł©§'bīģ‰_Å»åē¹ßP:¤TF^Ģ%É ńO„’Ūś×“vźóć®’ėŹ#K;³OrXŗūč³õÆ'}Īøx䁋’ņ$Ż!9Ź‹.VDāO[*]ü—”)¹Kę„cŅī·¹óćæŌW†}­0ésʉŻ\ü—'åÄ·’ĄĘ»v…}īüü®M»`]­fö.x…rüżśO—“’Ž}C^Ģ„æsĮ3…µµ5[¶laĖ–-¤¦¦’““ƒ„„„ĮN¼‰‰ K—.eéŅ„dee‘™™‰B”ĄŁŁYļżf÷īŻ¾ļ¼üņĖōźÕKOMßÜܜC‡Iāvöök™|ōŃGRŁņܼyÓ@Š.<<œ¬¬,ićÉŹŹŠĻ>ūŒĻ>ūŒōōtrrr°··ĒÉÉIo\͚59yņ$jµš”” qtt4č× AΟ?J„"%%…āābœ ģć7xżõ×¹}ū6%%%888ąģģĢŻ»wQ*uJ;;;ņóółšĆéŲ±#vvvXZZ’““Ćõė×9|ų°ŽŽ}Æ^½čÕ«—¤Õ`ff†³³3ff÷“qd2K–,aɒ%dgg“––†™™^^^z"ąĄs…••S§NåÕW_­šxY}ŃįƇ3iŅ$ś÷ļOTTéééČd2¼½½iŃ¢ÅŻ”””DEE‘••EBB ÄĘƲvķZzöģɕ+~i.SĪ?}ś4®®®öqss“ź£>*-[¶dįĀ…hµZĪž=ˌ3022",,Œ3gĪąččHqq1-[¶|¬y‚灼˜ĖhTw‘™źBŁerS½\v{I|/?öҟc~Ó9¼kc$3Ö[”›Ų:č递ülƒšnM¹²t&6vg>ü’÷“³ū ĀėŸ$V÷œs£#y\qV2ŚRµ®\ ĀY—;’ēīQyĮĀ‚Ū×yĪ¢”8ŌEłČ-m0spCfj^é"?’¾ŖÜ é³ÜĀę=ņ÷­ žń®± 7Ÿ ūh5¢7Ļ'dę×Édxµ•”ć»°ōš—¢5T¹ÜśfY…ć.$æ²÷­ņ”‰WDłjå133Ó[¤–ĒĘʆ5j<šœ•US²³³3h311©Ō™ąģģüĄčUŠm(=JDƒ©©©¤¼’ ¹|}}õŚŹß‹Ö­[3gĪVÆ^ĶōéÓõśYXXŠŖU+½Õ2ĢĶĶ+,·x?ezAeĄs„››*•Źą”TRRĀ„ 0`/¾ų"r¹œ7’””„“““ō ÉĶĶ%**J »µZMxx8o½õ-[¶””KA÷š8p AIAķ}¢Mnnn€īA~æēĪcćʍ|ųaåeČ*£eĖ–L™2…'NpóęMIčÆI“&:t…B———AŚDEÜo³@š¬£Q«Č½yūZaČä¦ŲųÖÕ[ŪśK¢py1—„’ŗ„už3/æń÷Āå”R’œė户޹!}öų67·.¦ ž“’°pԃ0wŖ"}V¦Ę?ś@­–ć#ėUxČŌöŽÓ£īŒ—q7;¹„ ajėØ'nWž’‚ģ Ū Ģ,ētAöä • =‚ĪņؔwH˜XŁVŚ/’Ö’n§J«ČLĶšė?K{Ļń˜mļKz@šoĄČȈ¹sē2wī\ņņņČŹŹB£Ń`mm¦¦WIžĀšѬY3¾üņK† ¦Šæyóféæ« IDATfÖ®]ː!C]™¾ńćĒ£ÕjIIIįŚµkdgg“””ÄĶ›7éŃ£‡T²ÆĄÖÖVŖƻヒ‰‰É#ķž[[[sõźU %Ū‚ēœėæJį܊€P}€ļ½PŲP뼘ßī÷ Öw< ü ķÜŖu‹‰µ¶žõ}gU1ŹōDīf&q7;M—f™„*;•āŒ$”é •Ŗį? d¦÷R|ŌŹ'³ 46æ÷<ŌÜ-z@OCJ‹ļõ/«¾PźāĒ›÷I#·¼ēšõī6Ī BĄŃjĮČ™©¹AIynķZSż6˜*œqŖßFjĻŗrŠ“sž²ķ@šOckk‹­måNNąŸ@8ž#ęĪĖéÓ§©Q£ŽŽŽ8;;KyB£G¦I]ļ3f°lٲ SvķŚEļŽ½¹yóf…»å .dĈ8;;ćīīŽ••‰‰‰äēēóńĒėå!uė֍÷ߟŖU«āźźŹkƽĘōéÓŁøq#żśõĆÖÖ,--ILŌ•”śśėÆ’R^½L&£E‹ģٳ‡6mŚHłh 6D„RqäČ6nÜųŠyśōéƶmŪpvvĘÕՕE‹‰“ĮsAł…ŗ¢z(”‹¶·õ×9īf§JJó ŃhTÅČLͱõ &éČ=‘'EĄƒ%łŁ\żdµĘ-ÅŌVW6IfjŽ•‡?VGéØ óČŗrŠøŻ+Q¦ŻžėZ åkĄ—Ž}pNż£R–£Pś<żū)æ.Sä’7"“ßŪÉrjń—ē1’ĖŃŖ*vؕdžv ÷õE®žÉ”@ ž«Ą3Ȁxį… Ś]\\øpįæžś+±±±ddd`ooOćʍõ"rss¹qć„„„Ā!ŗ°L¦OŸ®'ŠņņĖ/Ó¾}{"""HJJ¢°°WWWš7on[JLL G%%%E²¹cĒŽ$$$pīÜ9),,¤J•*“mŪVņ’:99±cĒźÕ«8“¶",XĄ€ōņ§¬­­Ł³gEEE“iÓFÆ’gŸ}f†Š­[7®]»ĘٳgIKK#88…BĮŽ;*¬ū:gΜ Å‚’ł·®Pz·c3KlżCĄHZ F26>uō„Ö“„jņć® ØŽ@ÆD ±…5ÖUu„6U¹é•–ƒĖŽä×qŖß›jµ1wöÄĢŃs7äV ƒžr+[\wÄ”n3..LQRĢ“¼|“ŚņéO(Ņ œ3ÓČčńĀīe&÷żŚŅ'/zųÄ(w…‰7ōōs¢JXVńĆ­™®6wYŌ€w÷×H?’ćCE@ xž€g:uźP§N Éd2¤ųŠ˜5k3gĪdåŹ•xxx`ee…J„"99™ŒŒ †NµjÕ*u4tźŌé‘l­R„ 4hW(“k×®Ņq–––ōéÓē‘ĪQFķŚµ+Ō/ØĢÖ®]»VŲ@@@€^[e¶ü²‚Įæ m©šÜč 8Ōm†ÜĀkÆźܾŽ•gu)½,’挼˜Ė(Ŗ7ĄĀÅ [Jņ²PųcōgNĪ5ĆŻ’ņ”Ž-"õō^ROļÕk—™šcīX37Ģ=±®Z—ĘįČ-¬‘[Śą×oæ/óÆ4åB×eĘ&OfNÕŻ{sš=ž£°|DĀæ¹¼]łh‰««^<ż„GĮȈ€—ß‘¢)īž kļZ(B1wņ Z—ŃÜŚµāɞS ‚’0Ā 0`ƌŒ1‚sēĪ‘œœŒJ„B.—ćččHćʍńššxų$ą™#ēśÆ’ŗŗ" ”‚Ū×õv÷Ė*”Q>"ĄÖ7˜Ģß~yhž’£ QS”KQr¬Ō–td+õē~ƒ‘ĢūŚM06·¢“øš/Ķ_åē’Ū<žŗrÕN#%Įøļ>E•“€FuĻ©`ü˜™é½Xꢼō|ŗ”Ž-ÆUšä£”\›tĮ®†®llIAq߯ĘĀ„*”³¾#]e€ŌÓ{õ~WąßŹoæżĘĀ… 5j”Adꃸpį‹/f̘1“jÕź“Pš,šä¤~ĻŽŽŽ„‡‡3|ųpʎĖȑ#éŁ³§Xü Ļ1: 9“źņĖ żĮ}€?uꐙšōĘz‚ŽXOąč÷ٶĀÄ(Su¹’F2cĢÜyģ£P”zOWĄĀłį„¢ŹćśB7Ü_ģƒū‹} \*AqVŠōŁÄ¦āņZa$3ĘŌF§€V‹*/ó±ģłRœ– }®(u£RŒdųöžŒoļÉųō~]—rrr+[üś¾!}Ū³ uał·®zfŸn¹ /棗Š xtJKK¹rå ū÷ļgĻž=üņĖ/¤§§?m³O€›7oŅ A.^¼ų“MyniŲ°!;wīŌkĖČČąšįĆܹSqe—ŹHOOēšįƏ]&ūŸąŚµk4hŠ€«WÆ>mS• "@šHÄ’ZY€ÜĀZWŹ{€‚„(½vŠ•r+Īøƒ¹“¶¾Įŗ‚źÜĶLFYnqX†¦D…}`c0’éķ? z„ģ*QŒ’«%Ż”>ŪVžBu?ĘęV’Ć@£VQ’ŸuoĪr»Ņå#)†uµ@IųO™vū©¦›w+=^Xī¾)üė‘sķÜ#ĶkīčŽWųp@'.yė›å}|zNĀÄVē8)¼s“ä£;¤c·v-Ē©~[ŒĶ,°«Ł×& RIDyĘ畤¤$¶oß.i’”ńóĻ?ÓØQ#:uźd $ųļ T*‰ŒŒ$?_”É|ZDFF’––¦×Ö¦M²²²*Q9ķŪ·’Kćž ‰ŒŒ¤°šÉEį ž,ā/œ@  ­FCnŌy뽄© ¶¾AXøTōwūĖ“s s'l|ź`ė,‰×UžÆÕP”zK7oŒĶ,Q„{ćį;Tr+[,\«ż9‡ö±jĪ? 9Qē)U`law-ė½DęoG:νE/i1™u­ę^@Īõ_ŃjJ1’ćP» 6ŽµČū£²©tįÕaØōµ|9Ę’µJr@˜Ś8 TTŚ7óŅ1üśM J«$ūę‘"œÜӀ©čwĖʧU^ŗ§½³m‰^e„»Łi$śļnćšė;ĢKĒPVž.”-QIŸĖŖO<Ædff²aĆŠ‹ µZ-ēĪ#++‹Ššå’1nß¾ĶźÕ«„H޵k×rąĄ>\ēt‹‹‹cĖ–-’ “››ĮĮĮōļß’”?"¶lŁBDDyyyŲŁŁŹąĮƒ±¶¶&&&†õė×óź«ÆR³fM½±6l ØØˆ &ŗ(…ƾśŠ›7o¢V«qss£]»vtģŲQ³`ĮZµjÅķŪ·łé§Ÿpww' €““4¦OŸ®7’üĮęĶ›9r¤ž t*•ŠŁ³g3xš`"""8uźłłłT­Z•Aƒé OkµZ8ĄĮƒÉČČ@”PąééIÆ^½ØU«ŃŃŃlÜø‘×^{Ķ›7sõźUś÷ļĻéÓ§„9¾ūī;°±±aęĢ™¤„„±téR†.éM°eĖ®_æNjj*ĘĘĘ4lؐžżūćꦋvKMMeٲeŒ1.]ŗÄÖ­[™S¤¶ŌūŹŅ•äeŻ»V#u'ÆÅ­YITń~,Ż} µē†ķ„¶¤r»Ž’/ī–K]šķ;S…s„}•)qŅ®æ©Ā‰zooĮ¹aūJžĘfTy©/Ž=ĘKm÷ļÜÉd¼<[J ȼtŒģ«g ęJ8øQ*Kibė€oÆ×|]Ł÷®Ė½EoI[ąydß¾}.žĖsćĘ 6mŚōŠ~‚DFFņĒ:gctt4‘‘‘ÜøqŠå’×®]›O?ż”ģģld2æżö#FŒ K—.hµ•WAÉĖĖ£aƆLŸ>¤¤$¬¬¬øs篿ž: 6$//*UŖ°zõj6lŲ 7¶øø˜É“'KeŸ=J:uųņĖ/Q*•˜˜˜pņäIĀĆƙyéI(³ŅŃTč:(ŹĢŌŖ?¼W€ōōti3X‘‘‘lŲ°wß}=½Ņ W‚—‹¦M›rģŲ1žśė/Z¶lÉW_}…···t}éŅ„XYYqżśuµ÷tŪ¶m 6ŒóēĻÓ¾}ūReÆ_æžpėÖ-ź×Æ/µ‡††āīīĪŽ;?~< €/æüß’»G%==?æ"CńŒ3šņņ"((H-Ōdƌ|õÕW̚5K:Å.,,äöķŪŲŪŪEŸį)S¦°uėVęϟ/õٳgƒ.·<³!!!Ræ¼¼<<<a ¤U«VR{×®]Y·nTBūĶ7‹Ź–jhhšį‡2aĀ„2uٳg×®]#88OOO©=**ЦM›²vķZ.\XęųžżūóĶ7ßHÆļŻ»G“&MŲ“i}ō'Ožäʍ\øp©ß;wpqqįŚµk“m[d MJJbõźÕjÕ»¾üņK¦M›Ftt4®®®;vŒÜŻŻY½zµšLĮ˃šT+wļŽeéŅ„dd”ķZģŻ»—ķŪ·Wø’„K—X¾|y j$ü;Čxt—üŒ©œ_^Z"9 „',z:7@q’ģøGä&–ķ¢Ÿ›ǵåcȌśß&D¦)G×ŗ>&M<1kŃ󖮘4n«¶łĻOOęĘw“zļņß»É2Pfgpuńõ™ ]K{ ė7ÅŲ¹śvĪč˜ŪØmž“ž:Ķõ•’QKXLNĀc®,”^O¦”&Ó ž‹Śęæ@™Ē£#¹·eAÜgy<<°®„įAS[½ŗ еr@ĖøŽŚµģøG\YčGĘ£;R›LC}[gŒ[aŚŌ ĆśĶŠµ“’ßęæ°ø ‡øłż'j²ĘuØ?p¢ōśńńķdĒD”©klšAŅĆ’*žēsi”·žż€š=«į©N™\ mS+ōmŠ±°“>Ƶ™øøøēžņ>ĖćĒY·nii/o5 AÅłėÆæčŻ»w ƒĪ!CŠŅŅāöķŪe޽xń";wVŪü“iӆʍK§Ü~~~„‡‡słņ’¾«hŚ“)nnnĀšįĆK䙹óóC©TŖ%˜{ēw¤Ķ?€””!~~~lŻŗUś,_ŗt‰‡2|ųšrŸĮ[o½„f$P( :TMß3gĪ0iŅ$µqhkk—H”9eŹió_YnÜøƒƒƒŚęĄĪĪŽQ£F•kĢ5j”Śkggg<==„{qww'$$„6mŚØõ+~’Ÿ¾}}}†ŖÖÆgĻž@Q؈ąÕAxŖ•ėׯ3cĘ FŒAé®±ÕĮĻ?’LBB‚d).3gĪšŁgŸ1eŹ”ņ; D©T²eĖÜÜÜŌ¬żÆ"É·/ ń’›Æē&•+, śän 6—šŅ#ŹĪō[ØRsfŗÖõ„¶”›å'‚ĖŒŗGČ羘6ńÄÜķµ¢ X[äz†hhėR›C2ef™Oī“|ć<ń—Ž ĢŖŁ„V¹I1\]<cēÖX“ķ^“į·°C®kˆ¦ŽŖœ, ”¹ä$ENBÉ7‹ÜčsāK&g|UnWĒҳuZ½Ž¾#Z†fhhėP›ƒ2£ä yVt8”saŅŲóV]0°oŒŽ¹ r=#4µuQåf£ŹĖ&;īé÷Æwé72"KęCØÓ¦›“”/T)‰Ü÷żóo¬°°mKŌB L\ÜI¾\j÷‡ב|3ėN0¬ß ³ŗhźčQØRRŸ§–Ć”¶"«Bńøø8Ö­[ĒčŃ£„˜aĮ«Ijj*ęę%s`ČårLMM„ųīŅHLL䎽{ 2¤Äµųųx)į`·nݰ““$ €Ö­[“——Ǿ}ūųųć%T*6ląČ‘#jr²²Š’Ć>}ŠdddTb¾÷Ž{µk×ręĢ:uźD@@õė×§S§Nå>ƒzõź•h³¶¶&-- „R‰\.GWW—Ļ>ūŒ{÷ī‘œœL~~>111ÄÅÅįåå„6¶4ż*Jtt4VVV„^[µjU¹ćŸ6ŒS·n])ĄĢ̌ӧO³lŁ2bccÉČČ 33S Å(xź;ĻČČØ„AF./ŚJ*•/.­ ņ@-ęÖ­[„……‹‘‘žžž888Øõ),,䬕+ܹs‡ÜÜ\lmmiҤ vv’+suóęMrssquu%88˜°°0LMMqww—’DGGsćĘ Éŗ{śōiĢĢ̰³³“’¼Ē=ݽ{—üü|,--iß¾=&&&¤¤¤B£FŌ¾|#"" ĆĆƃū÷ļ“˜˜Hll,©©©жm[IĪӄ‡‡s’ž})łIqgggéYdeeqžüy?~Œ––öööø¹¹ÕØCšjSXXČ/æüĀģŁ³±··/aa¹¾ņƒ ÷ ßSž¢ćiīm]TYuŠ(, łęyicś2‘zļrµzpå8 WŽ’mY7æūøüNĻwį0qWø”2ŸŲ³{‰=»·ā“’rūāsĆ?ŹćÉń<9¾£RcŅī_ćĻåć*Ü?=üÆ’y ü ©[·.j ’А””$žN0&xµP*•Ļ5=Ļ;D©TR§N§ÉPäФI hÓ8dČX“hĒ'55Ur-/Ž;wvv.‘( S§NR‚¼²hŻŗ5mŪ¶eėÖ­’ąwŽ©«“>r¹œĀĀB”J%III“oß „‘‘&&&±xńāråW„R‰¶¶v•Ēk”āµ$—Ė„gĄ Aƒ6l˜ahhˆµµµZhTĶ8(x9€ZˆR©dšąĮJ’#gdd••Åȑ#ٰa¤¤¤Š»woĪ;‡––ĘĘʒEpÖ¬YRÜŌW_}ÅÕ«WŃŅŅāĻ?’ÄŲؘ˜˜ōōōŲøq#C† !((ˆ#FH:»M˜05kÖCŸ>} EOO###bbbŠ××ēĒdŲ°ačėėóŃG”££Ć… ŠŠŠ@„RŃÆ_? .\`Ö¬Y>üæEŖPdpčŲ±c‰g±uėVęĢ™S¢’Ņ„K™6mgĻžeąĄÄÅÅ”ÆÆ\.'55öģŁC—.]ŖłŻ¼ź1}śt._¾ŒB” 00šE«$Ն®®.Ķ›7— ś•!55•µk×2jŌ(źÖ­[Ś j++«RĆ9T*éééĻ=Ͷ¶¶ĘĀĀ‚éÓ§—øvńāEµ°???Ö¬YĆõė× ĄŻŻ]ŹĢ_§När9½zõbšąĮjrrrr8sęL…>>RģܤI“J=¼<øNõ§õœ]Užk4rą§WÆ^Uv[ĪĢĢÄßߟGžJ"x±Ǥ?[«½Aƒ;v¬„Č©S§ČĪΦQ£FeŹtvvę?žÜō‹ÉÉÉ”OŸ>j›L///4hĄĪ; T éŌŠŠĄŃŃQķĄ§˜'NąććCJJJ¹÷čēē‡J„ā½÷ŽĆÓӓʍ—;`÷īŻ%Ö”<ŅŅŅJ]{ĆVtķØ„„Uāł?‹³³3·nŻ*‘˜3''‡Ķ›7—ūvīÜ©ö:))‰ąą`©TaY¹;Ž;VžśeRÖgKšņ <j!gΜ”uėÖj1XšššL˜09sępéŅ%śöķĖ©S§čٳ§š‹B”`Ö¬Y¬X±‚óēĻÓ²eK Č"<}śt)öĒĀĀ‚’ž÷æųśś‡„„% …}}}ŒÕ¬³‡fāĉ4ožæøaęĪĖ¾}ūø|ł2ƽö:t`̘1̜9“®]»2{öl&L˜ ¹“»å+ “““ʵėčč ££#%IyŗBB7oŽdÓ¦Mj1R|ņÉ'ҽ•{%ųwpńāE,XĄŌŚ­­­łģ³Ļ^V‚Š"×3D®WõųKMżjŌF x5044düųńlŲ°Aņ ¬ ŁŁŁlŲ°aƆįääT ž.ööö3yņdžųćźŌ©Ć”)SųąƒčÕ«:uĀĖĖ =zD@@-Z“ k×®eŹ7nß~ū-­[·¦{÷īŲŲؐ••Å”C‡ČČČąŻwߕśŹd2üüüųśėÆÉÉÉ)‘\nŚ“iŒ;–ččhÜÜÜ011įɓ'lß¾//ÆrC hĶ8lŲ0~ųįÖ¬YSįgs÷ī]:tč@Æ^½P(ĶmŪčܹ3 …‚ž={2hŠ ōōōˆŠŠāēŸFGG§ĀßęĶ›³|łr¢££155U+oXĢąĮƒY°`]ŗtaĄ€Ō­[—¬¬,>ĢćĒ;vģsēųę›oxšąnnn¤§§³mŪ6“““¤ŠEŽ’}Fމ‡‡*•Š7n°oß>“““Ŗ”Ō»~żś0aĀś÷ļ„„e©÷&xq@-äɓ'„&ż€"¦b’’’J-Ļ”ÆÆ……±±±R[½zõJ$ž(Žģ?ké}„RIbb"¬]»VķZ±åńéĘŅ„KŁ»w/ķŚµCGGē¹åMžÉÉÉ%ņ"<Ż# ’RžüóOfĻžĶ¾}ūJ½¾|łņæ•ŲGšĻ:Æd2*@P>¦¦¦Œ3†7’Péńyyylٲ…”C‡J§‚—}}}<ČŹ•+9qāĘĘĘL™2…=zpüųq~śé'BCCIKKĆŲؘ>†K IDAT &0iŅ$)é[iŲŪŪš5kø{÷.ēĪCWWwww6nÜXĀcīwŽįāŋøøø”=z4666ģܹ“ .ššŠ™™ü1’łĻ¤~;w¦Aƒeźää䄶¶v ĆóX¹r%wīÜįčŃ£dffbkkĖž={0` 6äŲ±c|’ż÷lß¾ĀĀB,--™={6999„‡‡`nnN·nŻŠŃŃ)užķŪ·³dÉ.^¼HNN&L@__ŸnŻŗI‰MLLę믿ęÖ­[œ?mmm\\\X³f īīī@‘±£[·n%Üż;ĘźÕ« @©TұcG¦N*åś?~<2™Œ€€6lŲ€¦¦&ŽŽŽüśėÆ|ūķ·ŅŚæaƆ„&P,Ö÷é<\ĘĘĘ8p€Õ«Wóūļæcaa! /ĀP IKK«Pģ]VV …¢ŌkĻZ0ŸŻüW†ĢĢL 9yņ$×®]+q½M›6jeL 077',,Œ-ZŌXmįbĆEi„YŠæ¬…ūŅæˆˆ/^Œææ?*•ŖŌ>:tP«ƒ+µʍĒO?żTj\ty(•J¶oßĪĄ_łJ)µ‘:Š”C‡ķ;w¦sēĪU’Ł A¾śź« õmҤÉs]Ķ{öģ)•™+‹_~ł„D[FFĖ—/§  €o¾ł†1cĘT*1„‰‰Ésćź”(ayÜŻŻŸ{5bƆ jmęęę%ĘŲŲŲšå—_>w.‡Rēruu•ĀjKC&“1~üxʏ_āŚÓįµ#FŒPĖõUL½zõJ÷ļ|†50ŌB,--„R+ϲyófźŌ©CÆ^½033+óō>33CCĆjŃĒČČ…BĮ‚ *“iZ±bįįį2`Ą¾żö[)fæ:)ČĪĪ.q­xć/Nx’=<|ųłóē³iӦ疳ŃŌŌd͚5"®@ ųW```Ą˜1cŲ“iS•āś Ų³g*•жmŪր†:J„’ćĒ“ŸŸĻčŃ£łā‹/*4NCCƒ6mŚŌŠR–fff“iÓF¬U„"’ÖBģģģ )qzYPPĄ“iÓ8uźPdQ,-³hTT111ŲŲŲTzīār#OĻ-“ɰµµ-õō’īŻ»˜™™IÖĆČČH,XĄäɓ鯻7ļæ’>³gĻęÉõš×2™¬ĢÓŁ²ōz¶æ••ššš„>ƒŠŠPd2™TęPP{9ž<4hŠ’rkپ’žūø¹¹żCŚ Į‹GWW—Ń£GKYŚ+KAAœ={¶š5JbbbĀ©S§8ž<+V¬(Ó’Yōōō © zōčAHHH©^®šØ… :”ļ撞qćĘ1dČ,,,ČČČĄßߟøø8ś÷ļĄ€7n3gΤK—.óäÉÖ¬YƒŽŽ½zõŖōÜŔ˗/gŠ AŌ©SŽ~ūmV®\‰••­ZµĀĢ̌ŲŲXÉÅŹÓÓ€‰'bhhČĢ™3¢'?’ü3}ō‘Z&S:ĶmŪprr¢~żśXZZ>W/„RÉāŋéܹ3ÖÖÖ4lؐ^½zńå—_bddDÓ¦M‘Édܹs‡E‹ѹsgQĖø“žžĪŠ”CKĶ2\fffĢ›7Ƶ‚—…BĮˆ#Ų±c·nŻŖōųĀĀB)\=j@C@ Ta؅x{{ćļļĻ¢E‹Ų“i“TŹÅĪĪŽµk×āååĄØQ£xüų1k×®eńāÅ@ŃI¹››ØŅé·§§'&Lą‡~`ÕŖU“oߞ³gĻ2gĪņņņųꫯŌNó;vģČžżū122bß¾}ģŪ·uėÖI®÷ęęęĢ™3‡É“'3zōhiŃ0iŅ$‚ƒƒ6l«WÆęĆ?,SÆ7ß|“Įƒ3gĪ”J%oæż6?’ü3ėׯgĀ„ L:UJHØ««KĻž=+•1Všź™™ÉźÕ«™;w.¹¹¹•»xńb)1@ üېĖåųłł±k×.®_æ^%Å^ˆŻ»wīɁ@šQdŠü’µ Ųē‹;FEEakkū"tü ”J% JYūK#77—ääärūU”ĀĀBbccŃÕÕÅŲŲXķZ^^ÉÉɘšš–™„°¢äę꒘˜ˆ¹¹9ŚŚŚåöW©TÄĘĘbll\ā>ÓŅŅČÉÉĮÄÄäoė%xłČĖĖ㧟~āóĻ?'&&¦Ņć[·nĶŋ+œ³aƆR&`¹G†7©ō¼@š4ž—ćŲr-^­-00Pņīū'(vé ­² śõė'Œ@š^żuNœ8Qüņ1¤)@ņ’’%=õß©@: d9@(•šØåČåņ äkkkWk¼ūóāē Eµ•ÖÓÖÖ®T®MMĶ2ū‰¤µüü|¶oßĪܹsÕ6ä•A&“±råŹæU C j  0mmmĪ;W%/^$77___ńŻ*’ "  @ ؕ°{÷nš5kĘȑ#«¼ł9rd¹å~ąß„L&£wļŽ¼žśėU–qķŚ5¶mŪVnņUĮ‹ĒĒLJ”C‡¾h5*…™™Y¹åüž.͚5«Pūøøø ­‚…0‚ZGPPmŚ“aȐ!Ü»wļoÉŅŅŅŖp !@ ų·Ńµk׿•ŌļöķŪlŚ“‰¼¼¼jŌJ x¹ųä“O4hŠ‹VC „@ Ō"‚‚‚šššĄĒLJ«WÆV‹ĢJÕ-@PooļæĻ’ąĮ~śé'rrrŖY3@ <‹0‚Wžąą`ŗvķŠ—.]Ŗ6¹r¹œü±Śä AmÅÓӓĮƒ£”Qµ„edd$žžždeeU³f‚§9qāŽŽŽ„……Im‡ĀŃёnŻŗ©õ:uŖZIčĀĀB,X€ 2™ † Fbb¢Ō'33“É“'Sæ~}455ŃÕÕÅŁŁ™±cĒ’””T®~ß}÷-[¶DWW…B½½=o¾ł¦š7ŸJ„āóĻ?§I“&Čd2d2vvvŒ3ę¹sÄÄÄąåå…ÆÆÆdlЉ‰aōčŃŲŚŚ"“ÉŠŃŃ”Y³f,[¶LŖ¢pćĘ zö쉾¾>2™ {{ū …üē?’ĮŃёĄĄ@®\¹‚££#ŽŽŽRīŒČČHüüü°²²B&“addDóęĶ™7ožŌ"  @ xe¹~ż:óēĻg÷īŻ5"’‹/¾(QÅB „ćźźŠB”`ĒŽUڼüšC¦M›F×®]ŃŃёę{ūķ·%’ņåĖY¾|9sēĪÅÕՕ‚‚īŽ½Ė¼yóš÷÷/!;11‘īŻ»£©©ÉڵkŃŃŃ”  €>}ś””ÄōéÓqtt$;;›ćĒó駟¢””Į”)SČĢ̤{÷īŌ©S‡oæż¢¢¢X¾|9·oߦ{÷īeŽÓ€hÕŖ6l >>žéÓ§ąąą€J„ā7Ž ;;›éÓ§ćääDNN”””,\ø fĻž]™·W ØĀ Øq‚‚‚Xŗt)ØP©¾šäȑ#|õÕW>|¹\|ü_Unß¾Ķ_|ĮĻ?’¬f”ÆN¼½½™:ujČ‚ŚJ“&M6lŪ¶m#??æŅćććć%#€™™Y hųļĘŌŌ777NŸ>ĶčŃ£"/ŗQ£F±lŁ2.\ø@Ļž=‰‰‰į޽{,Z“HkllĢŃ£G„µ\ß¾}ÉĶĶeŻŗu@Q¹Ż]»v1cĘ >’üsµyuuu™gĻž-!7--7Žx Ž;†¹¹9PT‰"44”?žųooo©’ Aƒˆ‰‰aėÖ­L™2…cĒŽńäÉ:„«««ŌĻÕÕUķuiNŸ>††ćĒ—®]¼x‘[·nqčŠ!Žxć ©}Ȑ!<~ü˜mŪ¶ € F!‚'::š   T*ՋV…'OžDaaį‹VEP>|Č{ļ½G‹-Ų²eKmžµµµŁ“iSČ‚ŚN£Fx÷Żw«lōONNfķŚµÄÅÅU³f€.]ŗpęĢ ØTnhh(ķŪ·ĒĆƃąą` hĆ*“Éxķµ×¤qmŪ¶-ńž:;;“ššJAAńńńäęęŅ®]»szyyQPPĄćĒĖŌėóĻ?ēäɓdggŃ įŲ±cäēē“ •m¾rå .\Ś (ŃŽž={ŌdfeeѧOrrr ¢N:ҵ°°0455iß¾} ]Ś“iĆƇĒČČØÄfæeĖ–XXX”y?åPęó*¾.T7Ā ^zāćć™1c5bķŚµ5÷ŁgŸQæ~żC j3õė×g̘1čééUi|zz:ėׯ'::ŗš5téŅ…°°0¢££¹zõ*yyyø»»Ó®];Ο?š7o®¶Į-ķ½|:ńcZZZ™żŠC:ŹŌėīŻ»xyy”ÆÆ½½=ŽŽŽxzzräȵ~ .$55•vķŚ”§§‡„„%­ZµbĈ\æ~]­ļ–-[8}ś4kÖ¬QŪüC‘”I„R”„„%å(žūģ³Ļ¤|‰‰‰e†¤{T…ōōt ōēellLFF†HŒ)Ø„t-åńćĒlŲ°K—.‘¹¹9īīīŒ;V-¦łÉ“'¬_枫Wƒ‘‘A:ušņņRūŃŽ¼y3IIItķŚ•õė×s’ž}LLLčܹ3£FRs„?wī›7o&""]]]:uźTį8¾ČČH6nÜȟžInn.VVV4oޜ±cĒJ26nÜHFFŽŽŽųūūóąĮLMMéŅ„ #GŽDSSS’wśōi¶nŻJdd$zzzx{{£££SW𑐐ĄŅ„KłöŪoÕ¬ü5IƆ ™2eŹ?2—@ Ōflmm7n7n”6‡•!33“õė×3räHźÕ«Wž;éŌ©r¹œ3gĪMóęĶ100ĄĖĖ‹5kÖPPPĄéÓ§éŅ„K„ä{”śQ\ęńyė°?üĢĢL‚ƒƒqvvF__…BĮčŪ·ÆŌÆqćĘܹs‡˜˜"##‰ŠŠ"""‚­[·Ņ³gO"""¤µéųńćłóĻ?ńóóćŌ©S8::JrtuuŃŃŃįʍϽ/==½2ĆY233Ÿ;öy(  čy=ėY‘““ƒ†††ŌG ØN„@-$!!¶mŪ²eĖģķķiŻŗ5 …‚łóē«Å…‡‡ćźźŠææ?śśś4mŚ”üü|¦NJĒŽ„/ė?žųƒåĖ—ćććCbb"NNNDGG3~üx>üšCIŽįƇńöö&44gggģķķŁ²e 3gĪ,WēĒÓŖU+vīÜIƒ hŃ¢ …‚eĖ–©é|āÄ –-[F=HIIĮŃŃ‘ØØ(ƌĆäɓ„~ūöķćµ×^ćźÕ«8;;ckkĖʍ™3gNuŽŽŽ|õÕWhiiqćĘ µ~AAAųųųšŪoæI×'OžpéŅ%Ś“i#õ›1c_ż5kÖ¬A.—³pįBÜŻŻ9{ö¬ō…„T*iŻŗ5ńńńĻÕł×_%--ū÷ļ«ż8 4$×­ĒsåŹµX¬O>ł„ļ撞U«V”””ĮĀ… iß¾=§N’ÜÓņóóquu-WĮ‹C©T²qćF–-[FDDÄ?^ē7Ž _æ~’čœ@PŪ155e̘1lŲ°A­d\EÉĖĖcóęĶ :”¦M›Ö€†’>ŗtéĀ‘#GHNN–ö™››ÓØQ#–/_@ēĪ+%SOOÖ­[Ē›o¾‰””!PdÄłį‡°““T;/m|hhØZ[rr²TŽ·8ļĻÕ«Wyōč;w–ę€"/TMMĶF…BA@@]»v„k×®œ:u kkkŚ“iƒ\.gٲe,X°@Z»fee±hŃ"éµ··7J„’5kֹ駟Jr—/_Nnnn…ž¾¾>QQQdff¢ÆÆ@‹-ŠŅŅā›o¾aÕŖU’kll,Ū·oĒĖĖ«B²‚Ź"ĢJµģģl“µµKlžśõėGRR’ŪJß¾}Õ6’ŻŗuĆŠŠæžśKjkÜø±Śęоóņņ¤ų¼ėׯ3pą@5k„\.gšąĮåźłä¶oßNżśõyżõ×ńššĄÖÖV MNN`Μ9œ>}šŗuėҬY3<<<°··gÖ¬Y|üńĒ%bż”h~šąA“““čÖ­ X[[³bÅ –.]Š‘‘Ķ›7ĒÕÕ+++n޼ɲeĖ€¢5š“iӘ9s&–––ø»»cccƒææ’s OÓæžüšCśõėĒŋ‰ŠŠ¢  [[[z÷ī­v@¶dɆŹéÓ§ÉĪĪĘĪĪŽ>}śpöģŁ JŽxć ®_æĪ™3gHJJ¢eĖ–@‘Ń£’ž\ŗt‰ččh ptt”悚@j!666ܼy“£G!%Gٽ{73gĪäĻ?’ÄĮĮ‚‚4h@·nŻJČčÖ­īīīŅė§OҟGEū=Ė¢E‹X“h}ō®®®ČårLLLČĻϧWÆ^U𣪺^~Ö¬YĆĉ«­œ£­­-³fĶŖY@ (]]]FĶÖ­[«×_PP@`` ¹¹¹t芔4üw §§§V“¾777µMs1½{÷.UŽ‹‹ ...jm 0 Jz5kÖLm_̳ŗZYY•;Ēȑ#K“ŁŁŁ•UÆ^½ %™lÕŖ­ZµRk{vś<š4iB“&MJ“;99įääTa9ĮßEj!'Ož$##£„ė}FF–––8p€ &`mmMĖ–-™>}z ū÷ļÆTmSmmm Jķ‹‰‰)wüŃ£G>|x w§ār4•ĮĄĄ*ė"x¹Yŗt)3fĢØV™_~łe‰P@ Ō …‚įƇ³mŪ6īŽ½[éń………:tˆŒŒ zōčQ AķE䨅:tˆ’ž÷æ%rŸ–·»øøpųšį Lbbb0`×®]«Ō¼-Z“`ß¾}j§²Åīz呕•Uj"•ƒVJ‡bš7oξ}ūŌŚ”J%»wļ®’<Į‹§°°)S¦TūęæcĒŽ¼õÖ[Õ*S ĻGKK‹wŽy‡ęĶ›WYĘ©S§ųķ·ßŖĶL ž €ZˆÆÆ/+W®¤E‹tķŚsssŅŅŅ8rär¹œžżūšŃG±sēNZ¶lI‡°²²"==`eeU)·&€O?ż”7ß|“Ž;Ҿ}{©ŽlENŻūōéĆĀ… ‘Éd4mŚ”ģģlBCC¹rå @‰Ņ+å1sęL|}}éŌ©^^^(•JN:%*¼¢šžūļ³nŻŗj•«©©Éš5kDøˆ@ ¼455:t(ŚŚŚ%²æW”S§N‘““Cæ~żÄw¹@ TįP ńōōäĀ… ōźÕ‹˜˜Nž<É­[·¤$'ÅUš6mŹ•+W4hYYYóčŃ#Ž}÷]BBB¤š½mŪ¶åõ×_/1µµ5ƒ–Ź™ōķŪ—ß’GGG.]ŗÄĶ›7éßæ?ūöķcšąĮĻĶü:{öl¾ūī;RSS9tčēϟĒŃё3gĪ0tčPÉŗļįįQj]ZŒ®®. ((ˆśõėsńāEnß¾ÆÆ/{÷īešąĮ¢®ź+„J„bōčŃÕ¾łųąƒJT”Į?‡††  }ūöU–qńāEvļŽ]mIa 6#£Č @ó’’Õ€`HŲQQQŲŚŚ¾Įæ”ÜÜ\Ž~ūmöģŁSķ²ĶĶ͹sēęęęÕ. aƆ„‡‡KÆuä^2ł@ T’Ėql¹¦īĶ(y÷½Źüžūļ?~¼Źć]\\šóó«¶ņ°@š¢yżõ×9qāDńĖĒ@8¤É’’—ōŌ§é@&äy@> TāT ¼”dffŅ·oß*ože2C‡-óś’%Kjló/‚ŹÓµk׿•ŌļöķŪlŚ“‰¼¼¼jŌJPU‚‚‚ŖœĖéE R©Ų½{7‘‘‘/Z•r9zōh•Ćfa/)))tļŽcĒŽUi¼L&cåŹ•„–ø„¢°–Ń£G’@Px{{’­xž°iÓ¦R žYf̘Į|š¢Õ(•ƒ²e˵¶üü|† ĀüQ­smŲ°ß~ū­Ze~ņÉ'üųćÕ*SšļAĮKERR=zōąÜ¹sUÆ©©É† ˜8qb© @™LĘźÕ«k<ij9/ D–j@P Ø J~—Ō6—wOOO Tåļ鈈üżżÉŹŹŖfĶ•į»ļ¾ćēŸ~Ńj”Ź®]»ųī»ļž‘¹V­ZÅÆæžśĢ%T„Śõ‹!^ibbbšńńįśõėUÆP(Ų¶m¾¾¾„FE»vķž–žĮŅŅ’°°0éužŖšä\˜j×ų܁ ör+!»D›••Õ ФfqssC[[›;v”(k\?~ĢŚµk=z4FFF5 į«Ėõė×Q*•4k֌³gĻO’žżQ(rćĘ īŻ»‡R©ÄŚŚš¶mŪJI–‹Q*•\»v'Ož““ƒ„„%^^^( ©ŽŽN #NAA×®]ćĮƒbkkK›6m¤q—/_&//ÆÄļt^^§NĀŁŁ222øxń"‰‰‰hkkÓØQ#\\\ž{ļžł'qqqDGG“ššJPP­[·FOOOź—’’¹sēČĢĢÄĪĪ†żœœΟ?OBBŌ«W¦M›JŽ+gĻž%;;›ŒŒ ¢¢¢¤¹¼½½ÕžÓ³dggsķŚ5bccÉĖĖĆĮĮ6mŚ<7™6½'.\ ::]]]lllhŃ¢E aqāļÄÄD455qvv¦E‹%ä„§§sžüyRSSŃŅŅ¢I“&4nÜų¹:^ „@ ¼DDDąć㣶i® zzzģŁ³G-~ōY€‘‘ .ü[zV”¶mŪ–šbX|ś1_t³§ŽžÖ?¢ƒ@ Ø=ĀŽæø©Ö®§§G³fĶ^V5K“&Mxūķ·Ł¾};łłł•/Š+ `éŅ„\½z„RÉķŪ·"ļ»””ś÷ļOpp0r¹mmm233111᧟~’M޼y“޽{B”@GG‡““4ĢĢĢŲ¾};Ż»w`žüłÄĒĒK.õ< _æ~Üøq…B¦¦&ŁŁŁX[[³sēN¼½½ äĖ/‡+ IDATæ$66VĶpDļŽ½9sę üüóĻ|šĮ¤„„a``@vv6*•Š×^{ĄĄ@ŒK½÷yóę©åņńńŠbź;uźĄńćĒ™8q"999ØT*”J%­Zµ"((Hśņī»ļ’““ƒ……YYY$''ćźźJPPęęęŒ9’ū÷ļK÷^œ!.. ‹Rõ;~ü8ƒ&)) är9888pąĄš7o^źøóēĻćėėK||<äēē“œœŒ½½=ĒŽĆÉÉ €={öHz’Mvv6ķŚµćčŃ£°~żzžūß’RXXˆ¾¾>™™™äęęŅ£Göļߏ––XǼʈ*‚'==•J…‰‰É‹VEš’rūöm|||ˆŠŠŖŅxöīŻ[¢\åܹs™7ožōzåŹ•Lš4éoéZQ‚ƒƒńņņ*Ń.אį`¬¦†ØW-*N|f>É9%OĀżüüŲ¶mŪ ŠčŸ#""‚Ķ›7W9®ßÄĄQ£FQ§NjÖģÕdųšįlŻŗ•ńćĒ3sęLźÕ«‡L&cųšį?~œ}ūöįęꆦ¦&QQQŒ5А?~Œžž]ŗtįńćĒģßæ_:~üų1~~~ 444 ĆĻĻ„„͊+ŌÜĮmmmłč£8p >¤AƒjóeffrāÄ Ö­[GÓ¦M„v'''>żōS|}}‰ˆˆ I“&“jՊ€€É T*Ł»w/cĒŽE&“qģŲ1ņóóY¶l™“Ł•ĖåōźÕ‹žżūsņäÉ2ļŪĄĄmmmär9¦¦¦Ņ5•JĄ{ļ½GēĪ$Cƚ5k¤¬ūyyy >œAƒI›cGGG\\\ˆˆˆtÓŌŌD[[[m®Ņ #**Šõė×K›(*o9fĢęĪKaaa©Ęƒ7Žx5Ļ+++ÜŻŻ%}RSS‰‹‹ć­·Ž’6’:ubõźÕ8::EƜ¬¬,† ¦v}ūöeŊR†ąÕE5N’žż‰‹‹{Ńj^B.]ŗDĻž=IJJŖŅxkkkŽ=Zjģ؇|óĶ7’x¢,n޼ɽ{÷žŃyAķG&“±nŻ:5jō¢UłG°µµeÜøqlÜø‘“““JĻČČ`żśõŒ9’zõźÕ€†Æj›’œœRRRˆg÷īŻj}„ćāāP©T„nūöķKRRR©9āććQ©TŪ?ž˜÷Ž{ÆĢ±³fĶāܹs¬]»–äädrssILL䥁xxxE GGG&OžĢŠ”CqrrĀĪĪʍ'ɲ··ĒĀĀ‚1cĘąėėKƆ ±µµ„~żśLž<¹J÷&x¹€ÉÉÉ©}Ńēę꒝]®[¾R©$==ƒēĘūdee”R©¤Ų”§™6mZՕ§Čb©­­­f…¼śœ}ŗÜłÜÜ\ōōōX¶lY•ę©,--łż÷ߣ»w/¾¾¾jn}@PQōōōpwwgĮ‚„……żė6’ÅŌ©S‡ńćĒcnn^„ńyyyl޼Ym=EÉ× :uā—_~įšįĆR²øÕ«WsķŚ5._¾L·nŻør劔<ļŽ½{rīÜ96oŽĢƇ cƆ „‡‡‰ææ?·oß&66–7råŹRSSŁŗu+§NB©T²{÷n¶mŪFpp0'OždĖ–-’hCSSS444X²d !!!„žłųųHÉėJūżNNNfķŚµŅIöÓæ_ėׯ/S~«V­€¢čN:€J„ā×_UĖ`ff†¹¹y™rŽ9RHāäɓœ;wŽ3gĪpžüy>Ģ®]»X·n]™Éż*Bń،ŒŒ×ĀĆĆY»v-ŁŁ%«€„……±sēN¶oßNHHæżö»vķbÓ¦M%<„œœœŲøq#/^$::šœœžüóOŒ™5k–ŌĻÕՕŸž™ŠŠPāāāČŹŹ"$$„œœœ,™² ęµœœ.^¼Hll,óęĶ£Q£F4lؐM›61yņd>łä¼½½133#<<œ/¾ų‚īŻ»óąĮōõõY¼x1+W®döģŁ“k×"""˜;w.½zõ",, ¹\ĪĢ™3łžūļ™3gnnnčźźrżśuęϟϠAƒŠā¾Š(śõėĒŌ©SŁ»w/ļ¾ū®¤s`` )))ōķŪ—‚‚ś÷ļOjj*«V­¢Q£Fdggsśōi–.]Š\.gŃ¢E/āŃ Ŗ;v0bĈ*et†"ėóŃ£G±±±)·onn.³fĶz)āÕśõėGæ~ż€¢hfff9#žOBBo¾łf‰Eģæ OOOvļŽ-Åu¾(’ö©Ó‹ uėÖRiŖź$//Q£Fqųšįj—ż*aooĻžżū’¶Ė¹\./ÕĆīߊ‰‰ ćĒgćĘŅ feP*•R"³bwmWWWüżż¹sē͚5#11„Rɓ'O¤¼ÅqÜ]»våśõėøøøpįĀÜÜÜš÷÷gŃ¢E|’ż÷DEE1lŲ0Ö¬Yƒ„„%Ż»w'66–#GŽŠ±cG’’’P*•888°cĒōõõÉČČ ##'''»²ĖåXYYqżśu ¤vķÖ­[t芁ƒŅ®];tuu „OŸ>jżĪŸ?Ļ{ļ½G§NJäZ°““DKK‹ėׯӔCµk'OždąĄ„††J¹Žzė-¦M›Ęļæ’N\\œšĄĪĪŽøø8āāā°““T“5yņd®]»ötŅ“R‘ÉdRĢeyųš!ššš’GB1*•Š{÷ī©å8ØĢ\vvv„††–ų=Ł»w/Ó¦MS[;óčŃ# čūüYnŻŗ%yk\øpvķŚqėÖ-©\¢¶¶6-Z“ S§N;v (ņéׯ‰‰‰RÕ]]]Ś“iƒ‡‡‘‘‘压ąåFj)?~\-ŽiżśõōķŪWķ4“}ūö4mڔ֭[sņäIz÷īĶŽ;6lsęĢQėgii‰—/_ĘŻŻ 6šŃG©¹ųwźŌ FŒAddd‰W£Fpww' @ķK, ooolmm %44”ćĒ«¹mwļŽØØ(vīÜ) Æ(ėÖ­ćż÷ß§   JćŪ¶mĖ‘#G*|ņcooĻĒ\„¹j’ņ\łŹ#>>__ßżęæC‡>|ų„ŲUu!ł¢yžĖīß%00Įƒ³oß¾‘’*ščŃ#))Yżśõ_“:µ ʎ˦M›¤ PeP©Tģܹ“ÜÜ\Ś“iĆķŪ·QQQ¬X±‚˜˜˜Õ*¬¬¬ųż÷ß9zō(8::–š'ĮĮĮwwwf͚…\.§qćĘhhhpćĘ –,YB=J];8::¢””Į²e˘]ŖīvóęMvķŚ%URjٲ%šššŒ?ž‰'bmmMAAWÆ^劔CŒ=€ČČH|}}ńóóć“O>©Š³¼@-ÅĘʦD“ššp^żõī÷vvvhhhHnū=bģŲ±%dzyy±k×.źÕ«GJJ III4kÖ¬„¼āENTTT©'Æ~~~|śé§¤„„addDbb"'OžäŪo搲•6nÜø„l'''vģŲQń!xiųöŪo„š²U”sēĪģßææR›½©S§ÖŗÜÉÉɼńĘüõ×_/Z•ŹĖ“ł”ŽB”`÷īŻ 4ˆżū÷æhu^‘‘‘téŅ…'N#@5óģŻwXT×öšńļ0Lač{/Q±‹ ,X£Ø±$łÅ˜b^sļMŒi^S4‰1żIQ1–QTŒ5vŃŲk•.½ 0Ly’˜0qŹž<zfŸ3kF…Yėģ½¶ ³fĶā‡~ 66¶Źēėõz6oŽLqq1¬ZµŠüü|&MšDff&żśõ#11???ņóó9uź~ų!¾¾¾Œ90ĪJ³±±”gĻž€±P-“É8yņ$=ōƒcĒŽˆ««+{öģ”’ž4oޜƒāķķMaa!“&M"%%…3gĪŠ¹sgĪ;Wę{m{÷Żw)**bžüłfž={²yófÓĻÓĻ>ū ­V˜9sLńųöŪoĖķRšÕW_ńüóĻóÜsϙ͂ ,ÓŠÕՕ#FÉ'Ÿ|bö˜““‘‘‘¼šĀ Œ?­Öø=¦J„bśōé¼ńĘ÷|­Ļ=÷ŃŃѦķģ>ųąƒJ϶ ä•W^aٲe¦]8¬¬¬5jÓ§O/³āĶ7ßdƌŒ1€;v0|ųšrÆĪÓO?Ķ“iÓLÆĖŹŹŠ   ¾žśėrĻńõõełņå,^¼ŲlLæ~żxžłēٱc`ģ-šĖ/æ0ž|‚‚‚LŸĒ AAA,[¶ 0"Ö¬YĆĀ… MÅ0¾æ£G6½ę¢¢"bbb8p`„Ž7”ī`,H’žUČ%Š8\:0!!ĮT)ź¶×_Ÿ~ś‰øø8³ć¶¶¶w]OöńĒóōÓOcggĒźÕ«yģ±Ē*{ĻF';wī$88˜™3grķŚ5Ӓ€¤¤$|}}Y³f Ó§Oē»ļ¾cΜ9$''ćāāĀ7ß|c֍“<:++ŃĀ¢¾Xŗt) ,Øöł!!!lŲ°›ŒŖžÉŹŹ"88Ų“QcÕÆ_?¶oß^§’’ōōōūZūi)½zõāčŃ£µś¦ŃĄXE€ŚQRRĀO?żÄ•+WŖ}ĄĄ@S‚f ÉÉÉX[[יļ#999dddąīī~×ļµiiiąęęV„ļÉäååįīī^nSĄŹŅét¤¤¤ ‘HpwwækĆźņäę꒞žŽ‹‹Ė=cß©¤¤„ÄÄDōz=žžž÷|éééäęęāķķ}ĻĻ3z½žŌŌTJJJpssC„RŻ3NGRR%%%¦F€w‹=%%…’’š4iRįĶ’āābRSSŃjµ4kÖĢģżU«ÕĢ;—6mŚÜ×g<įī†zū’–D Ȳ¬ææ2oū}j Š%€Љˆ­­-o¾łf…ŪˆŲŲŲ —Ė‘Édå6Ś3 ÄÅř}³žõ×_ ,÷z­ÉmҤ ƒfćʍLŸ>72bÄÓ:#•J…D"!==½Ā*²HžėƒĮĄĖ/ælŖ*WĒ”)SųńĒ«üC½”ÉæQ]Lž…»“ĖålŲ°”Ńāćć fļŽ½ā†J “Éd̜9“õė×sīܹj]c’žż+ܹfŽŅ+5%žĪ5ų•åźźZķFŽ·“J„÷õ’ÉĮĮ”Üéų•!“ÉŖTŠsssĆĶĶ­Rc­¬¬ŖüoB*•ҬY³J•Éd•«P(*ģaRPP@ß¾}ĖķK Ōm¢Šˆx{{“••Uf½gII 3gĪdÖ¬YŒ1OOĻ2³Ąø4 eĖ–lŚ“‰ńćĒcmmMnnn™ėÅĘƲ`Į-ZT¦J©iÓ¦ńĀ /””Ä®]»Xµj•Yœƒ¢¢¢2Ž"""gķŚµ„ŗĮ`00oŽ<>’üój_cęĢ™|’ż÷÷ܒ§”Éæ‘HžėÆŅ"Ą¤I“ˆŒŒ“t8sķŚ5ÓrQØYR©”©S§¢P(īś½ŅĘĪ–uĀĆÆ6vH$ę7Ž„]Æsg `me…½µw„*i݊OhœÜŻŻļ9cW؛ÄmŌFdąĄüšĆ¦-Į˜¤}’ż÷¬_æŽTé0`«V­āźÕ«¦qÅÅÅ|ņÉ'H„Rz÷ī••żū÷ē³Ļ>#))É4®¤¤„Ļ?’œˆˆˆ»nw6iŅ$t:Ļ=÷2™ĢŌŒ{ĮŚŚŚņöŪo›-YČĪĪféŅ„ÄĘĘŠäæŽÓét<ńÄ÷•ü?÷Üs¬^½Z$’"łDņßČår6nÜųĄ×5×5WÆ^eȐ!$&&Z:”ĒŹŹŠ‡~˜~żś•ūøO»V?96½ŗćäéŽĀƹRaöee-EgŠ×©/­AO‘NĖ­ā.䤒 ĪyĄļ¬  IćždŻČ,Z“ˆ#GŽŠ©S'ģķķqww';;›ģģlęĪKŸ>}X²d ĮĮĮ“iÓĘ“&*)) FĆ»ļ¾kŗ+’å—_BÓ¦MMkŅŅŅ())aٲe¦)żåqrr"$$„Ķ›73}śt³uS„……ńä“O†··72™ŒÄÄDœœœuGéś@£Ń0mŚ4ÓžÉÕńŹ+ưdɒŒŖ~ŹĪĪfųšį"łļ×O4ük J‹}&@i@ĢØy‰„Ń£G£T*ٽ{·éøw«ęō j7RŠŒ[+ūØ*×µ^įv¢ `tīÜ9nÜøAHHH™ĒJ·I‰'##{{{śöķk¶õ ÷Č=räׯ_'//'''zõźUfgFĆńćĒMć\]]4hY›£G’ŸŸĻ°aĆĢνrå §OŸ¦{÷īå6ĢĢĢääɓ$&&¢ŃhhŚ“)Ɔ C”PÜĻŪ#Ō"µZĶĆ?ĢĪ;«}·ŽzĖl ŹĘ*;;›ąą`Nœ8aéP,Ŗoß¾lß¾½Śk4Ѱj4M£/€q;1QØ=ū÷ļgĒŽXĖd Ÿ=…Ŗa5’ķąąŹŗś[Ź ‚P÷ÕF@Q”Fäää0zōh»wļ&22²ĪĢ ż÷撍‡‡G£Śļć?&66–/¾ųĀŅ”U$ ‚ ܗ””†Īٳg«u¾\.gķŚµ„††ÖpdõOéš‘ü‹äæ±P(¦ž¢`ģ Š5ĻĮɉœód_o€_Ō·ŹÆNNÅZ„"ēņ_Ųłł ³³E«V#‘J‘XY”+*ĘĘ«ģŒ©œĒTžhѳæøl£¾”ĒPŗ» ³·C“‹ĀٽVGaJź¤TäNčK“xōķŽĢĪ<Ł÷–ŹĖJōŗŖ¾¤¦¦C~~~µĪ旛7o²k×. †;Ė.ՓššŹ®]»())Œ[jĘÄÄ ×ėkäśUśo¾É¾}ūĢśWÅÄÄTø]^CuńāENŸ>mé0„j»‚Pmׯ_gąĄÕNžU*"łēŸä’ųńć–Å¢zōčĮÖ­[Eņ߈”FméP,źŹ•+ 2Älg”fT5 MŽs„¼ŲhrņHśżā~‰$aĒ>Rž q×RTo¶›¾DKŅļ¹uōOņbo}į*i‡c(LKGę`Ŗ‰¶M½øuäTµ®_Y’ļ’ż?233MĶŸė›ÆæžšĢĢLll|O‡ŒŒ bbbŠéŖW|„ŗ@Ģ”Z.]ŗDpp0 Õ:ßĪĪŽˆˆ†ZƑÕ?"ł7źŃ£ŃŃŃ8;‹5­˜ `TZ3,Kb%”83¹ƒš¬¤J% G“łjl›z£NJ­Öum<\1čtŲxø"±¶F"‘yī2 ųNaj:Žm[ŌŲóŠœbŃ¢Ex{{pęĢV­ZEBBR©”žżū—ŁU*""‚šŃG°bÅ $ żū÷gõźÕ$$$ąččHPP“&M2Ūł!%%…ü‘sēĪ”V«Q*•4oޜN:ńŚkÆŹūļæ_ę5ģßæŸµkך¶Čž7or¹œįƇ3iŅ$ÓøćĒ³jÕ*nŻŗ…ćĒgüųńf×:uźįįįÄÅÅa0hŚ“)cƌ)Ó,»<ēĪcżśõ\ŗt †ĪĆ?lö:/\øĄO?żÄµk׊ėõxyy1bijBėo¼Aæ~żP*•üśėƤ¤¤ąååŔ)S0`€iœĮ``Ė–-üöŪoäęębgggöšo·sēN"##IIIA*•Ņ¢E ¦NJ—.]ć£÷Ž{’ūßlŚ“‰3gĪššĆ3eŹ”{¾v”ęˆ‚ TŁ©S§ ¬vņļģģLtt“HžÉ)‘ü …‚_~ł…   K‡bQb&Ąƒ!”«ræ:L›@‹ 4ėӃöSĒŃnR͇ō§õŲ`|ūõ¤]ččrĻSü€YI$ųI•e¾ŗuķJæ‘Į<Ō½;Żŗt”kēΌš÷ #_xšN­Ū0 mܽčÖ„K™s½­j®Ū\\+W®¤  0¾üņKś÷ļĻńćĒQ*•Üøqƒ¹sēš%z.\ k×®„……QXXˆ³³3YYYĢ;—aƆ”ÕjĖ}¾°qćĘ2Ē“““Y¹r%ŁŁŁüńĒ…vvv¬X±‚—^zÉģ¼ćĒóĆ?˜žĶ|Ą°aĆøqćJ„’'N0yņd-Zd—M÷ī—NJƒ IDATŻY¶lƒ ėÖ­cŹ”)3kÖ¬r_Cnn.±±±Üŗe\6Oll,¦1GeŌØQ$''£R©8zō(&Lą³Ļ>3Yæ~=={ö$** ¹\ŽJ„b’žżńĪ;ļ”ūÜ„:D=ˆŠŠĀŁŁ777®^½JhhØŁėܾ};]»veÓ¦MXYYakkĖńćĒ3f ’łĻLćÖ­[Ēüłó™1c999Čår¶oßĪĄͶr^¼x1&LąŚµkø¹¹Q\\ĢO+ ̵«¬‘0YUævÉĪĪę‹/¾`ƌ¦cŸž9/¼šׯ_ĒĻĻeĖ–įąąĄłóēĶ–iEFF2vģXöīŻ{_¼wŽy‡¶mŪƒL&ŒŪRœœ|×sććć9}ś“YSĆY³fńå—_ņÖ[o°oß>’““¹xń"ķŚµ3+,,Ä×חV­ZŃŗuėrÆ?fĢƌƏ?žČ£>JDDD™„j œ={Ö“µµN§c̘1|ńżšĀ ̟?ŸÉ“'³nŻ:³sŸ~śi–.]ŹüłóĶf\Üī›o¾”WÆ^ģßæßģn’ܹsłžūļMÆóÕW_eŲ°al۶ͬ ć+ƼĀņåĖyć7L?o3228ž¼i–…F£!00/æü’‰'¢V«Y²d óęĶcłņåfļwėÖ­ńńń -->ų€÷Ž{Ϭ¢F£aȐ!¼ū7Īt¼wļŽ¬[·®Ī4qllÄ į[±bĻ<óŒŁ··ß~›1cʰeĖbbbŠjµüöŪo<óĢ3¤¦VoŖPóöķŪǰaĆŖüūśśrąĄ‘ücÜ6qĈ"łÉæp‡Ņ"€˜ p…”C‡Š™µ([Æ%E_R/¾rōåß]Æ)J„’©S§š ŒÓ¶Į8 88øLā;|ųš™Ā}śōi&NœhJž¬­­™6mŚ=ĻķŃ£G™ ‚ƒƒÉČČ //Ą” ŪŁŁ™“ĖåXYYU8ƒ”² dJžĮøĆш#øqć`L’Æ_æĪ£>ZęÜ)S¦ŸŸOlll…×ĻĻĻĒÉɩ̑wß}—żū÷ʄūōéÓ̘1£Ģ S¦L”¤¤Ä“|`ģŲ±fK,är9ƒ ">>0~*,,,ó÷ėļļO`` éϧNB«ÕņŲc™“ĖåL˜0”LÆØyóę‰äß‚Ä įūąƒxķµ×ĢŖ—‘‘‘L˜0Ķ›7›ŽĶ™3‡ &ąēēg‰0…;lŻŗ•É“'SXXX­óŪ¶mKtt4͚5«įČźŸœœ†^ķmŠŅä’Īõ‚ f]¾|™”C‡²{÷n1 ģ+ĪęŖ¶j?ÓņćPŗ»¢×h;;ŽuœæĻż†hŅÖZÅX×»Žģķķ±¶6O ¤R)€)1NNN6KśJÉårĀĆĆļėł éééxxx”y¬iÓ{ĻŌ(ƈ\iþ޽{cccĆčŃ£™8q"NNNØÕjvķŚeŚĪų~øŗ–żū‘Éd¦ē/½y²|łrVÆ^m6.++ ą®SāŸxā ʎK“&Mx蔇šńńĮĒLJŽ;2vģXĄø-³Į` ,,Œ-[¶˜_ŗäćöē(ļ}³¶¶6Å\ŗä”¼æ—&MšpłņeÓó‚1±æżó=—œš5N“··Æšu µO° .pģŲ14 NNNмysÓćWÆ^%++‹‡zˆ½{÷’€L&£wļŽe¦@ N:Åłóē),,ÄĆƃ>}śąååe6®¤¤„cĒŽqóęMrssquuešąĮfßu:)‰¼zõ*ׯ_'55•ęĶ››>čb0ČŹŹ2› UTTdŗ~AA^^^ Ž ‘ w¬S Ū“iĆÖ­[Y¾|¹Łē­ .Į#Įxg|ėÖ­¼śź«¦»Čƒ_~ł„Fā_°`/æü2›6m¢ØØČtcĆĪĪŽ:šĘo˜¦ŅW¤“?A~~~•?Ūø¹¹įźźJddd™Ą¦M›xņÉ'¹yó&ŽŽå/-Y“hķŪ·/³| “€Q\\ŒL&£yóꦄµ·Ū¹s'?ü0gĻžÅĶĶ­R1·nŻ™LĘÖ­[éŃ£‡éxjj*ūöķ3͚hŻŗ5‰„­[·–)-]ŗ”ššpŃÓ«€(..oooSņĘŹźóĻ?ÆÆÆŁ”kkkžūß’š¾‘K„R^żu>łäöīŻK»vķŲ¾};Ó§O7%’`l³xńbĀĀĀ8xš ~~~:tˆ™3gšuVU©Tüė_’bõźÕœ9s†!C†Tė5 >Ģ’%KĢ֐;::2wī\¶nŻJll¬Łs×%:Ž9sę ‘HX±b&L`äȑDDD`ccCQQ‘ŁųŅJ¹Į` ’žųųųмys¶oßĪéÓ§iŃ¢:Ī“M޵µ5vvvøøøPRRbZK¦P(ørå ŁŁŁ“iÓ†ŠŠP~śé'ś÷ļϤ~éŅ„f\«*$$„ 6Tø/pcRŚšO$’±k×.‘ü UVZ;v,»wļ¶t8#Š5k‚M咠U’ņ~“yóęńĖ/披W/Œ››)))lŚ“ ƌSīy”””¼óĪ;ōģŁ“qćĘįāā¾}ūøzõŖŁø—_~™qćĘ1tčPś÷ļT*e’žżfMėīĒĻ?’Ģ믿Īāŋ‘H$äå呕•Ebb"Ÿž9Ó¦MćÖ­[wżÜҹsg¬¬¬˜8q"¤]»v<łä“•z~‰DĀ‚ xå•Wøpį:tĄŃёėׯĪ„ īŚļ`āĉ¼öŚk¤„„Ń£GģķķIII!<<œöķŪ›,/X°€§Ÿ~š7nŠ„K\\\HHH <<œĮƒ—i–x7Ģ™3‡wŽy‡Ė—/Ó¾}{rssŁ“i*•Ź4ĪßߟiÓ¦ńä“Oa*\ŗt‰_~ł…… Vś9…Ś' PļŽ½IJJ"$$„AƒįćミŸ-[¶4ŪzŒSvī¬:::āīīNZZ`¬ņ„¦¦²råŹ2ĻeeeEVVƒ”””r¼uķŚµŚwK„§§£ŃhʽžČ‘#ļūśµĶŚŚšŸžOOOlmm±±±ĮŽŽž+V°hŃ"6oŽLnn.K—.E"‘˜Š7‰…BL&C*•¢T*éŲ±#—/_&##ƒ””rrrČĖĖ#..Ž[·n!‘HLK9Ąø½T*ÅŚŚš3gĪŠ”C²³³MßÉ`00žü»ĪĘø—ńćĒ.:¼ņOņ_ŗĢ£±ÉæpæT*[¶lE€ŪŠ"Ąż‰NO"©Xmé0īIŠ„Ń>8ĖjęgŖ“'O6%ŗ:t0Ū¢­”“'O65€ ąČ‘#„……qõźUžųćœ™6m’ž÷æMŻõ[µjÅäɓMwńŪ“iĆĮƒłōÓO9qā*•Ёņ駟²xńbӝōŃ£G³cǾłę¢££Q(ōķŪ—%K–˜fŖtźŌÉ,޾}ūR\\\&žf͚1yņdd2EEEœÆ¹¹¹eŽk4–/_Θ1cčŲ±cµ^Siõ¹¼ėgffĘŌ©SĖ4(ŒŪóTfzšN§cöģŁ¬ZµŖŚĻ5gξųā‹JuģmčDņo$Öü 5MĢ0ŗté’éƒįŻ:‡ «ŪsĶÕõ™ŽõĮĪ;Y½z5üń/^$''{{{œłĻžĆc=&’”Q€č•W^įčŃ£?~ÜtL.—„½½=‰‰‰¦ćŁŁŁœ={Öl Šõė×INNĘ××0N”śóĻ?Ė>žļ撞>śĪø¾­eĖ–|śé§ 4Č4¶cĒŽŒ9’Ē{Ģ4½¾K—.lٲœąŁgŸ%77—•+W²dÉÓ¶)½zõbóęͦf)„Ūžļ’cįĀ… $ üöŪofŻB«ćĆ?`ɒ%¦…R©”ņÕW_Y|ŚV|Aéōį~¹{{±ųėĻiāیļ>žüžć% ü±Ø¦’-77—#Fˆä_$’Ā¢R©ˆŒŒEQA*I4ląt:999Čd2ģķĶ÷žyłå—ٹs'§OŸŒSśe2¶¶¶^OÆ×“ƒƒĆ]›¼i4ņóóqtt4u%­IÅÅÅąääT'֛ß*.ązA–„ĆØ1ƒ¹“fpl߁ ĒH„RV®\yĻ®µ…Hžkņ/šZ–Z­nōE€öķŪ³{÷nQøCEMŁFńMķ­eX!!G[žN9–ņFĖ®Œ÷ō5;&š BĆWM-Ÿ9 µJ*•āāāR&ł/““Ó]“0nūēāārĻļr¹—ZIžĮøæ½‹‹KHž @RaŁę„õ™D"įŁ×*nś(—ĖY·nHž’VPPĄŲ±cEņßH“ĮņJg 2ÄŅ”XŌŋ:t()))–„Žś²S ĻųY~I” Bm±|ö$XĢŪoæĶßį*§@«”äo#¤AO‘”fæīģ/Ü©ĒCøyz”yn•JEDD„پ¶YAA!!!ģßæßŅ”X”HžK+- <ŲŅ”XŌŋ1bééé–„^ r÷įŪ›-† B­=1lll,F½W¬Ó–{|GQ&7tÅž—Ÿ˜Œ]ÓŖķß^X«lphݜœĖ±ŲłłTłŗ^ƒz#A‚^«Eb-E‚…«3šģ¤ 9¾ć‡#‘V½ęēėėĖ®]»hŻŗu•Ļmˆ 3fŒHžEņ/Ōqb&€ŃéÓ§ ’_+”—“qź€•qžh“•Y£ųPå *IŁā€——?|ż -Zˆ»šOņߘ“ €.]ŗˆdBØJ‹}ʎ(TĪ’k§˜Ł“ ž6öÄŖļ½»OÜmcd&—ū{€Ėłbśæ u‡(4@Z­–!C†påŹ&MšDHH:Ž[·nńŪoæ±jÕ*6mŚÄøqćČČČ`×®]ØT*Ö­[Ē›o¾Yīu?ūģ3._¾ŒVūO;..Ž]»vń’÷ČårÓń¬¬,Ο?Ϛ5kX³f ;wīD”PŌī Æc|¤r@~ĻqÕa+‘VŲ  &}ųᇓš{ ƒHžKuéŅE¬)ź[[[¶nŻ*Š~’żwѳć.¬%VčJŹ}Lōqö$»DƒµŒ‹łY8zp8+…nŽn$©šVŖų3'žNœŹIĒ_e³LA¬:—¶¶NÉN-·! »Ü†.ŽlJ‰­Ķ—(B#' ŠĪ;9uź[¶la̘1f½’žūtźŌ‰?žŲT(5räHÖÆ__nąŹ•+œ:uЉ'YęńO?ż‡2Ē×®]ĖĢ™3łī»ļ˜3gĪ}¾²ś%V[Ȕ✪d0 ×é)ŹŹFå^ń4½V‹•uĶż÷µ’X1]UvĖ?ń!ŃH$’F"łź+Q0ŗ}&€ųž^>G™¾ü澉„Īö®Ų[ĖH×ŃÅĮ•B–Gš¶ĘKaĆÅül<å6H%Ę ½Ÿž6ö“³sB­ÓŅŹÖ‘b½Žqžž„']+s}k‰„]Ł•žPée‚ U% P||<ƒ *ó˜R©dšąĮ;v¬Ģc”””LŸ>óēĻÓ±cG³ĒĀĆĆńóó#  Ü@Ef̘ĮG}Ć ]@mŠ“¢/’.BEr’ŗĪ­£āܱ5yA"µBéę‚A§Ē ×c­²”$7Ÿ‚„d<śv'/ī&öĶ›‘uī2k)6ī®ed#³·Åk`ÆJ?ÆÕ˜MP_©Õj‘üķŪ·gĒŽ"łź­Ņ"@HHH£ŽŗóĻ?’E€»ų« —Į®M؜WīćÉÅjŅ4“=VH0š<¤ rŅ5EųŚŲŃĪĪ™ MŽ :-× ó(ŌiŃ $åWxķsy™“±uäDĪ­Z|•‚ 4f¢Šy{÷–?{ö,żśõ+óų7ß|Sīy]»v„M›6¬_枷ŽzĖģ±õė×3eŹt:]•ćéŅ„ [·n­ņy‘ŹŪ; Ó2ŒŪ h ɋ½ĀÅ„»+Ś5Ŗ&ž(\œČżė:™§/ wrƒ’|5­}‰h6TDņoŌ¾}{vļŽ———„C„ūbkk˶mŪD@*ōĢŁ}x*Źß-Go0°%5¾ÜĒe„”{ÜJ"a¤{3¶ßŗiÜĪ÷.TRkrµU»y ‚P¢Š5 BBB?~<-[¶ÄĻĻ¦M›āļļOóęĶ‘J„eĪ3 L:•ššp³Ąłóē9wī«V­25’« OOO233ŃėõXY‰'ļĘZeƒTf]‡ÖH$’ܖ—;9`%“!U*°’Épj×urši»?¹£½ilņŽĆŲł‰uū÷«4łß³g„C±ØvķŚ‰ä_hPDĄHŹw>/“óy•+÷Ž~3;nę£7Ų–v£Ņ×s°–£1Tżf‹ Be‰@¤T*9tčŸ|ņ G劔C$$$PTdÜ×¶Źøįś IDATY³f,]ŗ”iÓ¦•9wźŌ©,^¼˜Ó§OÓµkWĄx÷æuėÖōčŃ£Zggg ÅÅÅŲŲT}śśŹGŖ`øŅ¹ź'\öX‹veyū—~ycļAņ : Ö#"ł7j×®{öģÉæŠąŲŚŚ²eĖFŒĮ‘#G,ŽÅˆ"Ąż õnAFI3SčķģÉ_94UŚŅף‹M)±d•“V\HVIq„®‘OX—ĮŁRĖ‘ ‚ŠX‰@åķķĶŅ„KĶŽeddpłņe.\Čc=FĻž=Ėlł×±cG:wīLxxøY`źŌ©ÕŽ%//„RŁØ’'+kœ¬ģ,†PE"ł7ÉæŠŠ988°cĒQE€ū’«Õ°=ķ&ƶzˆW.a¢w “=—ņ³p°–ÓŁŽ•°*}½ę*{ĪęfŌbĂ 4v¢Š>|˜K—.ńÄO˜wuu„_æ~¬X±‚Ö­[]¦šČ#šŻwßńŽ{ļqśōi.]ŗt_€ĢĢLÜŻŻ«}~}µ,īė’Ėo"T׌õhĘĀVŻ,†Å‰äßH$’Bc!ŠF¢P}%ŹūšŻĶKLnŅ’æ ri¢T!·’rµ ‡ę*ū{_ä6ķ]™ńp-E+‚bAvtąĄž|ņI4šņ·qtt øøüéhS§N寿žāĉ„‡‡Ó©S':uźTķxŽ?N‹-Ŗ}~}•U¶š©O±ÖµZĶŲ±cEņ/Öü ŒƒƒŪ·o§wļŽ–Å¢žüóO‚ƒƒÉĢĢ“t(õJDJ?'^å\^&?%^åhv*›SāXqż<Ł%ńݸX„ėe”į`-Æ„hAD AźÖ­ƒ+V”ūųš5kLSüļŌ²eKæÆé’„1œ:t`ҤI¦?·oߞɓ'ćīīŽ³³³é«C‡̚5‹ØØ("##‘ĖÅt6”īÉæQŪ¶mٳgHž…FOĢ03,ćB~CŽD Öi+5Ž`0Fnnn-G&BC"f4P‰„ &0aĀ„{ŽķÖ­ėׯ7;ęććSęĄÄ‰™8q¢éĻ•}AØkŌj5ćʍÉæHžĮŒ˜ `tźŌ)‚ƒƒ‰ŽŽ3½Į@¼:ÆJ礄„ńķ·ß2kÖ,S'A„»3įņWٳŖŪPK‡Ńč•&’æ’ž»„C±(‘ü BłJ‹½zõ²t(uņäIѰHOOgåŹ•ddˆķAø7Q„čißÄŖÅT=K*,,É?bĶæ ܋££#;wīEQز³³Y¹r%)))–E„:N,„ČŃZĪł¬ŖżpöRØp—Ū`o-ćPV ŻÜPI­9‘“†Ÿ=W ršRØH)V×RŌ ‡HžJ“’&MšX:AØÓJ‹Ć‡ēŲ±c–ĒbJ‹õu9€ōļžGwźļģArQŻ’Ł)‘Hh”²/s¼äŽķžóóółę›oxüńĒi֬ك O„zFįŹ()ĘE¦¬Ņ9Įī>8ZĖ9’•JwGwš«ģ9——ÉļV skŹ’;w€anMY›xµ–¢nJ“’]»vY:‹jÓ¦Hž” DĄØ“°k×.œ-N•(„åÜ]ڶēޤfågd—9VXXČwß}Ē£>J‹-,• u(Āä*S©)ŖŌŲNö.œĖĖÄ ±ź\:Ų»`%‘p1/‹„†»)ؘKØwKt}-G^æ‰äߨM›6ģŁ³§Q&’z½ž'NCrr2‰„&MšŠ³gOŗwļnŚEŹs{c@Q0ĪØOEg™ŠäĀŖ5׫._+÷øF£a͚5LŸ>6mŚ<ąØAØėD€F¬¤¤„¬¬,ōz‘<>£=ü˜įӆõÉUj¼­Tƌ¦­9˜•BS„zƒŻé “µsāaÆęlM»ĪĀ|®äp£0æ–£ÆæDņoԘ“’Ņ;b$$$ ÓéŠjµÜøqƒM›6±fĶJJJ,¦PĒ999±cĒ,ŠEÅÄÄLVV–„C©4•µ ¹ŹŅaŌØ‚ģāĻ^¬šń’’~üńGĪ;÷£”>€FlĒŽøøøgéP…]é ģ¼u“ßJ?šŹŚÄ«\+Č!ģĘ~L¼ĀĀ|Ö$\ęĒÄ+ÄŖs9“›Į”¬d&×rōõSqq1“'OÉ#NžóóółöŪoļś}īŹ•+DFF>ĄØ„śŹÉɉ;wŠ"@=,ųŁ:ak-·t5¢Ø@Ķį_£Šėtw§Óé'&&ęE&B} ‚š€ėu\ČĖĀN*³X 6¬ƒlˆŠ‹‹™4i[·nµt(՘“’œœĀĀĀHN¾w,&&Fl”%TŠ(Õ·"€TbE[{w¼”öXÕÓ%?ƒÄ+±wķFņ2*÷¾ėõz6oŽĢ”C‡j9:Aź‹Ę“ 4Rz½žœœd2vvv•>ÆøøµZ}Ļ5~¹¹¹čt:lmm‘Ė+®¬ēää ×ė±³³C&«8ĪĖĖC«ÕāääTįš\ƒĮ@v¶±ń££#VVõ§Žå"WÜuĄgż:āh-'±Ø€[šBüUödjб¶²B&±"^‡«\Į•‚rp#_W‚K¬°¶²ĀŃZNVI1įIe×J%Ž˜ÄĢSæógnz-¾JĖÉæQėÖ­mņŸ‘‘Į÷ß_éäÄ`0płņeśõėWĖ‘ Ai`ųšį?~ÜŅįXLLL £Gfūöķ888X:œ{²’HšQ9ŅÄʁ©?™“P%ß}÷­ZµB”Pąāā‚ƒƒ]»veżśõw=ļēŸ¦S§N(•J\\\P(tģŲ‘Ķ›7›[¾|9-Z“ĄŃŃlmméßææŁ!ƒĮĄ¢E‹hÖ¬NNN¦qAAA\øpĮ4NÆ×³hŃ"š4i‚ƒƒ...ŲŲŲ0jŌ(._¾l§V«yź©§pwwĒÅÅÅōŗ¦L™Ā­[·jč«]Z½O…M…ghŠˆUēņSŅU»6E£×#•H(Š–ą`-C‡­Į@{;gģ­et“w”«ƒ+}œ=ÉŠ”5č+¼³”3OŗĘØJ.AØÆDņoԘ“’““4ĀĀĀŖ|g2/Æį5 jOi gĻśŻIž~>|˜‘#G’›[qq»®±’Hp”)ńPŚį„“Æó_žJ;Ülģ˜6e*;v¬öėžż÷ߣ±cG ¾“‚ ŌG¢ŠķŪ·Ł³gÓÆ_?"##9qāQQQųłł1}śtĪž=[īy—/_ęŃG„OŸ>>|˜K—.±wļ^zõźÅōéÓMwŻ·mŪĘK/½Ä¬Y³8zō(111lÜø‘¢¢"f̘Į`¬¦Æ^½š÷ߟ—^z‰cĒŽĆĻ?’ĢĶ›7™={¶éy—,YĀ’%Kxžłēٵk‡",,Œ+W®0zōhtÆq[øp!,_¾œ'NpģŲ1¾ųā vļŽĶo¼QĖļjĶųöę%Fø7£¢É‡‡³R9œ•ŠĮ`ą×Ļ‘Z¬ęL^ÉÅjbÕ¹\-ČAneÅĮĢdnę³7#‘KłYģĖH¢XÆ#©Ø€3¹OcĪӖ ÆG3&ŖŖøø˜ŠŠP‘ü’ü7mŚŌŅ”|˜Q£F‰å4µL"‘0zōh PķküłēŸ¬_æŽ4ĖR„ĘC ““4\]]Ė}lŌØQtķŚµÜĒŅÓÓ:t(īīītīܙAƒ1eŹ"""ĢĘ=óĢ3óÄOŠ¢E ”J%ŽŽŽņóĻ?›Ę͟?ŸĪ;3mŚ4üüüP*•4mŚ”aƆ±mŪ6ąŸ¦sēĪ5­ė/żźŠ”`\ūšńĒBÓ¦MQ*•ųūū3~üxNž“¶uŖÅØ,‘ü5ęä’Ā… üųć¦"cU¹»»3qāÄŽJhlDĄčŠ”CŒ9Rj™D"aŌØQŒ1¢Ś×8{ö,k×®­ö÷NAź'Qh€Lwåļ”””DZZZ¹}ųį‡œ?ž#GŽ ÕjÉĻĻ'33“ØØ(³q666„‡‡SPPĄĶ›79pąü1¾¾¾Ģœ9“óējœœŲ¶mjµšųųxöķŪĒŅ„K±³³cҤI$''cccƒ••ß|ó ™™™å~…††Ęé¹ĒG­VsåŹ¶oßĪĀ… IMMeüųń r=›Įnr%Z½™­^Ö ĒU®äb~#=|Ł“žTéėMmҊžś““9õ£i⽈äߨU«V6ł?}ś4?’ü3Z­¶Zē7iŅ„§žzJ¬’jDicĄ=zX:‹E€'00±cĒVøsҽ\¾|™Õ«WW{ö” õ(4@ŽŽŽÄĘʖūŲ Aƒxūķ·Ė}ģģŁ³ :”޽{#•JMĒ“’ĢĢ7ß|“wŽykkk|||čßæ?Ó¦M#,, ½^oŗ’üóĻóÅ_ “ÉšóócĄ€̜9“Ļ>ūŒ¢¢"Īž=‹L&ĆĶĶģģlœĶ¾“Z-Ļ<ó ēĪ`ģŲ±DFF¢T*iŻŗ5C‡eÖ¬Y¼łę›$$$TjÆļśfKj<ŪŅnšKņ_|ōןüļśy~N¼Źŗ¤k\ČĻbcņ_h śJ_O£×”Ń7Œé~bĶæ‘ææ?ŃŃэ2ł?vģæüņ‹i9PUłųų0kÖ,lmmk82”1svv&::ZDąéÓ§ćĒÆv ..ŽoæżÖ4ćR„†M rüųq6nÜh:¦×ė '66–žżū—{ž³³3'Ož$''Ēt,''‡Å‹˜Ö‰åęęņå—_šmå°eĖÓ¶cééé|žłēfŃĮ`JŲJĒ 4ˆÆæžš+W®˜ĘiµZ¾śź+6nÜhJlāććłōÓOIO’gū’’vģ؁ ĪĪĪUy›ź…ƒžBńĪf±^‡Ö`ܱøP§%­øĆY©Uŗ^”^‡›¼āmė‹Ņäæōß\cåļļĻž={š÷÷·t(Üżv²n޼9³fĶĀʦž’źQ0E€' €)S¦˜ŻĄ©ŠŅTÄN‚Šš‰@ōųćóšĆjZ'ļččČ#<˜1c˜2eJ¹ē½ų⋤¤¤ąķķMĒŽi×®žžž”T*ÉĢĢą_’ś¶¶¶tģŲWWWZ¶l‰››S§NeҤI 2€×^{‚‚Z¶l‰‡‡-[¶ÄÅҹsēņģ³ĻŅ©S'>śč#d2mŪ¶ÅŽŽž-ZąččČ»ļ¾Ėāŋńō4®q’ż÷9zō(^^^x{{Ó²eKœœœųß’žĒūļæ/>ČWB7WR‹ėw…_$’F~~~:łß±cGµ“’vķŚńųć£P(j82Aų‡(:tH4|@ŗtéĀōéÓ±¶®Ž&_iii|ūķ·f7‚AhxÄ6€ µµ5›6māāŋ\½z•ŌŌTlmmiŪ¶­Ł‘>}śmŗĄ7Ų»w/©©©ČårZµjEæ~ż8tč͚5Œw/]ŗDLL 7oŽ$33„RI@@ķŪ·7]æsēĪüõ×_¦q999ŲŚŚŅ§OZ¶liēėėĖŁ³gMćŅÓÓqww§oß¾xyy™Ę3†„„N:ÅĶ›7Q«Õøøø0`Ą³qBł¤ )Åj¾¾qįŽƒė(FĆäɓEņļēĒŽ½{]ņo0ˆŠŠāąĮƒÕ¾F—.] ­ö]2AØ ggg¢¢¢ āĢ™3–Ēb<ČØQ£ˆŠŠ2ķ$ŌŽvķŚń’÷üšĆÕZןžžĪŹ•+™5kV… „AØß$‹Ņæ•r@ 4LŒ&$$4Ź5¦‚p/iÅłÜ(Č.sü«'Łq+ŃUŻO–·ėUęxk{7eJ DTViņ’ŪoæY:‹j¬Éæ^Æ’’ģŻwXTwŚ?ž÷tf†Ž{A(Š%(6¬E%ʒh¶e³f÷›²ūģu={żöł>ė³ūŪ'›l6Y%{ļŠ VģDŖō2ĆŌóżc"ĀPg˜¹_×å„Ģ9ŸĻ܃0sīū| Ž9Ņ­}Öćāāŗ5O¶=¦Āe_3jŌ(\½z•ė0l^EE&OžŒœœ®CįŌøqćØŠKŠ‹‹±uėVØT*Vķœœ°jÕŖęQ˜„nLš4 ēĪ3}Y @=€Z5/’Tæņļ: 4ŠŠŠŠÓBˆÕ£äßȞ“’ƒv+łļī"Y„t‡——Īž=‹!C†p §L#h:@Ļėī"§ …7nDQQ‘…##„p „«FÉæ‘½Īł×étŲµknŻŗÅŗīn“Eˆ%PĄčŅ„K˜9s&zi›SVķU*6oŽlvg)BHßDBŗ‰‡¶“ QśõóŚŽÕÜkė-”ü™’’°°0®CéUŪ·ooµćHgńxIIIŽŒvØ`tńāE̜9J„’ėPlž——Ö¬YĆz>æF£Į¶mې››kįČ!\”E 馛׳į1(¼ÕćėĀ¢±Čæo$l~f¶ó¹+bh4,Z“Čī“’ąą`»Lž›šššŻwß”°°U{‡Y³fa̘1ŽŒī1ģ}M€‹/6/ čččČu86ĶĶĶ kÖ¬Į–-[PVÖµķƒć–ĖŪ·oĒ[o½…čččˆŅ›Ø@H7|’ż÷ųąĆ_ć俉E-Ž9 Ep²vg D|¢ŽOģ¦ä’ȑ#œ<æµĘłóēķ.łohhĄ–-[šüłsVķł|>ęĶ›‡ŲŲX GFˆePĄˆŠ½ĒÉÉ kÖ¬ĮÖ­[Q\\Üåöz½»wļ¦÷VBl@ߣLˆ•łśėƱbÅ ŌV׹ŲĪ=\‡cq>Ü\ŒQņodÆÉæB”Ą¦M›X'’‹/¦ TbõLE€Įƒs §LEšŠó¤R)V­Z…VķM ²^¾|¹ć“ !V‹ „°°~żzü⿀Į`|õ’ż…Omg‘G”„“€V«Å[o½EÉæ&’555Ų°a«!Ŗ ‰°|łr¢Jś *њ½ĒĮĮ«V­BDD«ö ƱĉČŹŹ²pd„ŽBBŗč?’ó?ń駟¶x¬¾¶ļĻYˆŪW®s•åø‰„ˆpņģõµZ--Z„Ƈ÷źóZ{Mž+**°aĆTWW³j߯‹ZBøāķķMEYYYTč%Ż-–2 ƒÓ§O#55ÕĀ‘Bz­@H'1 ƒ>śŸžy›Ē+ĖŹ±vv ¦OŔ¹³ŁĪÆm½ćčč///«ŪŽLČēC*ĮC"ƒ“PŅėĻOÉæ‘½.ųWZZŠ­[·¢””U{©TŠ•+W"00ŠĀ‘Ņ;LE€É“'ćŽ½{\‡ĆSąäɓ“&@3M—:tčn޼ɪĢĢLh4Ģž=Ūź®k!ęQ€NŠėõX»v-6oŽÜīy ĆąĀ©4\8•ÖźŲĻ~ö3|õÕWąsø²¾5¢äßȔü÷ė׏ėPzUAA¶mŪ†¦¦&Vķœœ°jÕ*ųųųX82BzŒØŠ{ų|>ęϟ@€ėף`¼rå ššš’’B×7„ōō›JH4 /^Üaņߞ?ž’ś×æčĆń5¦9’”üŪgņŸ——‡­[·²Nž]]]±fĶJž‰Ķ0ģ} šŠ{x<ęĪ‹ńćdzīćöķŪŲ»w/ōz}§ŪäååA£Ń°~NB{”ŅŽĘĘFĢ;ū÷ļgŻĒ'Ÿ|‚õė×Óšø×˜’’C‡q §‚‚‚ģ2łōč¾ūī;Ö€^^^X»v-<<<,!ÜņööFFF²²0kÖ,ÖSƒHēńx<̘1III¬ūČÉÉĮŽ; Õj;u¾R©Dff&ėē#„°GBĢP*•xóĶ7qśōiVķy<žž÷æć/ł‹…#ėūōz=ŽyēJžķ4łæ{÷.vīÜ NĒŖ½ææ?Ö¬Y—×ÖŲ ÄVPĄ(333gΤ"@/IHHĄœ9sXß°xüų1¾ūī;ØÕźĻ …ČŹŹBee%«ē"„°GBŚPSSƒ©S§āģŁ³¬Ś lÜøėÖ­³pd}Ÿ^ÆĒŪoæŻ»ws §LÉxx8×”ōŖk×®uyØč«±jÕ*Čår GFˆu”"€zW||<ęĪĖŗŸŸĶ›7£±±±Żót:N:Åźy!ģQ€×”••aāĉørå «öB”[¶lĮ»ļ¾kįČś>Jžģ5łæ|ł2Ž= †aXµ ĆźÕ«!“É,!ÖÉ“&Ą Aƒø…S™™™˜7oT*×”Ų…øø8,Z“€UūāāblÜø …Āģ9B”qņGįńćǬž‡ĀyEaa!Žxć ܽ{—U{‰D‚}ūöałņåެļÓėõX¾|9%’všügffāųń欓’`ŊHz›JBøäćヌŒ »/¤§§cīܹTč%C‡ÅŅ„K›õ®*//Ē·ß~‹ŗŗŗ6æŚļ‰'XO #„ty)??‰‰‰ČĶĶeÕ^.—ćųńćHNN¶pd}Ÿ)łßµk×”pŹ“†apņäI¤¦¦²īc芔X¶lD"‘##¤ļ "€zץ±råJօ׬ŹJlŲ°UUU­Ž½:ŗ ŖŖ —.]b'!¤kØ@€`üųńČĖĖcÕŽÕÕééé˜2eŠ…#ėū(ł7 “»äß`0ąšįĆŻŗ°‹‰‰ĮĀ… YE%ÄVPĄˆŠ½Ė4õJ*•²j_[[‹7¢¬¬¬Å㯿§Ÿ;wµµµ¬ć$„tˆŻ»qć&L˜€ŅŅRVķ½½½qīÜ9Œ3ĘĀ‘õ}¦Õž)ł·Ļä’ąĮƒČĪĪfŻG||SņæsēN®Cį”)łļßæ?×”ōN‡]»vįÖ­[¬ūčīvT„Ų**„„„Q uwūU•J…­[·¢  @ė€q‹ŲüüünÅIéˆŻ:uź¦OŸŽśśzVķCCC‘••e÷[4µ…’#{Lž5 ¶oߎ°jĻćń0}śt$%%Y82BlŒLE€¦¦&®C± ^^^X³f ÜŻŻYµojjĀ–-[››kvqĮ£G²Ž&–Ņ9T véčŃ£ŻŚR(** /^“«!Ż„×ė±bÅ Jžķ0ł7]ÜżųėP · IDATć¬Śóx<̚5 o¼ń†…##Äö˜ŠQQQ\‡Ā©““4Ģ;—нÄĶĶ k×®…«öZ­Ū·ooń9”Ńh V«wøvķšEb%„“ ÄīģŲ±)))Ķ6]‹ . ĄĀ‘õ}¦äĒŽ\‡Ā)___¤„„ŁUņßŠŠ€oæż………¬Śół|̟?ŸÖŅ ¤ Ø`DE€Žåää„wß}~~~¬Śėõz:tØÅ×YYYĶ_§§§C”Pt;NBHŪØ@ģŹ7ß|ƒwŽy‡õ~³ćĒGFF¼¼¼,YßGÉæ‘ÆÆÆŻ]+ lŚ“ ϟ?gÕ^ `ńāňµpd„Ų>{|Ļi Mč]r¹ļ½÷‚ƒƒYµ7 Ķ’ČĪĪFyy9@­VćĢ™3‰“ŅˆŻXæ~=~žóŸ·ųŠéŠÄÄDœ:uŠõ8¶LÆ×cåŹ•”üŪį…xMM 6lŲŠj‹§Ī‰DX¾|9­„AH7Ųć{O[RSS©Š‹°jÕŖnv …0 -vøqćF‹]!–CbÖÆ_O?ż”uū9sęąäɓptt“`T¶Į”ü’ż÷\‡Ā){Š[QQ7¢ŗŗšU{ÓÅcDD„…##ÄžŲćŌ£¶P w‰Åb,_¾¼[ Rņł|$&&¢ØØ>0 ƒcĒŽaK…Jy‰ Ħ1 ƒuėÖu+ł_²d 8 Ff(ł7²Ēäæ““7nD]]«öR©+W®DHHˆ…##Ä~Łćā£mIMMżyóØŠK„B!–,Y‚˜˜Ö}Œ3III8sę “Z- ¤¤7oŽ“T˜„—Ø@l–^ÆĒ{gĻ?’œuļæ’>¾’ž{ˆD" Ff(ł7²ĒķøŠ‹‹±yóf444°jļää„5kÖ ((ČĀ‘BØ`tśōi*ō"ÓB®#GŽdŻĒˆ#˜˜ˆĖ—/7?–ššJ’‡„XˆMŅh4X²d 6oŽĢŗ>ų_ż5ų|ś5y%’Fö˜üēēēcóęͬ·ŠtuuŚ5kXo!E阩`ļ[ÕR wńł|$''cÜøq¬ū)((jµééé(..īńē“J„Ķ’ĪĻĻGNN† ŅćĻKˆ­£)Ä&”••aāĉ¬“”PˆĶ›7Sņo†^ÆĒźÕ«)ł÷ńĮٳg-2ēßĮĮ~ų!¦M›†;wB,C£Ń “““U®V«!ėµˆĒšįĆ1räH”øø=‚‹‹ †Š   ±±±ø}ū6ŠŠŠščŃ# 6n܈‰'¢¢¢Ož<Ć0Ķ+/æźŹ•+ŻJžĆ°zõjJž ᐩ`ļÓN:…yóęYĶ“Ŗ¾Ø’žųŁĻ~†eĖ–õśZ.§Nj}@aF>ư°S§Nœ'OXµ—H$ŲµkęĶ›gįČlƒ)łß¶m×”pŹŪŪgĻžEtt“EśswwĒ’žļ’¢©© Ė–-ĆŻ»wįé鉚šhµZxzzāšįĆxšąś÷ļß¼EDD 22ŽŽŽ5j†Ć0ˆˆˆĄŁ³g! ˆœœčõzBÆ×£®®())Įāŋńż÷ßćć?Ęɓ'įčč__ß1fff"55•õk0`–,YB»hbh$€‘©@#Ųćńx4h¢¢¢p÷ī]œ={UUU-ĪŃétøyó&īŽ½ Fƒ$%%5³ŁØ««Ćłóē1mŚ“ī¾BģĘ"€ąåß"bü4ßN-..F@@1bV~~>¦L™‚¼¼}/^dżC† ĮĀ… !ŗjŸQYY ///®Ćč²Q£FįźÕ«\‡AzQQQ‘Ż`ƌT°½^ß\Ø©©iq¬²²YYYxųš!BBB°pįBˆÅbÖĻÅēóńį‡ĀÓÓ³»aŅ'Lš4 ēĪ3}Y @=€Z5/’Tæņļ: 4ŠŠŠŠÓŅg=|ųćĒgü»ŗŗ"--’3 Żł‡ķ%’€qNžœ9sĢ&’GŽéVņ?|ųp,Z“Čn’BśÓH€~żśq §N:…łóēÓt ˆ‰‰Įŗu된œÜb±WOOOĢ›7+W®„X,ʞ={ŗõ=7 8xš %Ā&ÄnŃŅ'ŻøqÓ§OGee%«öŽŽŽHMMÅšįĆ-™m0%’ß}÷×”pŹÉæÖ Gµ¦JZƒ Ę×jjj óC¬{"^äąłÓg` :>>³gϦ-4 ±bÆN`[D·'OžÄüłóqšąA `qqq6l®\¹‚ĢĢLØT*€ææ?.\ˆāābddd`Ā„ ¬×†)((ĄåĖ—1fĢK†OˆŻ és²²²0{ölŌ×׳jļē燓“4 <ŲĀ‘ŁJž,1ēæB­DQc ,Šć‚ÄI/'9„ EU ®OC}eu‡mŗµ÷3!¤÷STč b± =z4®^½ŠóēĻ7ßõ D`` JJJ€uąäɓ’BśSĄŽ§˜Š4Ą²$ š»ßż -„ €L&ƒN§cÕ·Į`Ąž={,*!v… ¤Ļ8zō(f͚„RÉŖżĄqńāE»ßɆaš‹_ü‚’ $’*½%uŒŠ["‰#fLjsX?ĒƬY³šĘop!¤»LE€°°0®CįŌɓ'‘’’BE€ “ɐ””„uėÖa̘1-ևéĪ®Ļž=Cmm­%B$Ä®P€ō ;wīDJJ šššXµEff&ķdaĆ0ųłĻŽ’ūß\‡Ā)K$’PÖ¤Dß¾ļߚ›Æ7<ƒZžžšł|̟?ŸęaŅĒćüłóv_8qāz‹‹ fĻžuėÖ!..|~÷Ņӎ5„®”5ˆÕūę›ošĖ_ž†.,DöŖQ£FįŌ©Spww·pd¶Įtēߎ“///‹$’PÆm]ØŅAƒAßķ¾_%įńįĄćCÉčQ¢·ģ«_w¾ØÅcŽ!Ø(,`\ģ魷޲©Ż±g¦"ĄÄ‰‘ŸŸĻu8œ9qā–.]ŠŻ»w·²N,ĒĶĶ ÉÉÉ;v,Īž=‹ū÷ļƒa9].''£F²ūi,„tˆU[æ~=>żōSÖķ'Nœˆ£GŅ"1f˜’’o¾ł†ėP8eÉ䟠i#ŃĻ×5įˆŹü®ŗ_”Ć9<¤ÓĻ5FģŒqéŌ8ŃTõZ Ŗļ>‚cHDŽrčT*ˆœ”U6ŠgÅ`t:8÷…ČٱUßć$.#nyń+u2ž'‰°lŁ2DDDt:VBˆõ£"€ŃĮƒ±xńb*ō0ooo,Y²ÅÅÅ8wī=zÄŖŸcĒŽįWæśm=KH'Q€X­ī&’³gĻƾ}ūąąą`ĮØl%’F¦äȐ!ź±kw1jrAYP‘³#t *”¤eĮ1Ų5÷Ÿ pśDŸ:ß £įŪµ(/2ÆB s£ÕĮ1$|‘åWoĮ)4zµ"'9ŠŸĆ{L,¼<:ģ“/ąC,cłņåt·…õźīT "@o ÄņåĖQPP€““4<{ö¬Ć6 Ć@£Ń@"‘ ¼¼WÆ^ÅŲ±c{>XBl­@¬Ć0ųč£ŗ•ü/Y²¤äß †ašĖ_ž’’‹'’,šxą½¼k”xV ©'t p €²°Ž”h(~ĪŖkǐ8Ą%Ŗ?D<xÆż¼ ųˆœŪr[>—ä$TŽyĒ_H½=ŪķSˆÖ+ž‡……!ȓŅ$ĘŠ4ą –,Y‚]»vŃH€^ß’ž÷8~ü8²³³”×·œV×ŲŲN‡»wļbŲ°ašöö†Z­Fzz:ęϟĻQŌ„ō<‹‚—‹ˆ8špŁtbqq1­ Nz”F£Įņå˱wļ^Ö}üźWæĀ_|Ńęve„’“žLž0øQ]Ņźńž\°·ø‰„wģxŖ€=Ŗ¬¬„——×atŁØQ£põźU®Ć V¬  'NģŌ°l[–’’BEčt:\ŗt ?üšC«m +++QPP€#F0nKūžūļ#((ˆ‹P é“&M¹sēL_–ČP @ĶĖ?ÕÆü»€@€FM4“tōt‹”XµZ·Žz«[É’'Ÿ|‚/æü’’3†ĮÆ~õ+Jž9ŗó/ߢ ‰1ōČƒ­ķcHa%$$ēϟGhh(×”pźĄX²d MčeB”&LĄĒŒääd8;;7óōōlNžćuαcĒXļ(@ˆ½ )„s HNNʙ3gXµēńxųė_’Šßžö·ŽĢv˜’’żė_\‡Ā)777œ:uгa’’R–ĀŠÅEÕյЩš šķš<‰»kwĀkaŗƒ;‹äėŅw™Šö>ąĄXŗt)vīÜI#z™@ @\\†ŽėׯćĀ… ­F@II nÜø‘#Gr%!}§jkk1sęL\¾|¹ć“ŪĄēóńĶ7ß`͚5ŽĢvPņoäęę†ōōōw ¬A«ÅÓ‡į6xŖļ·_æ~ČŹŹĀĄ{0¢¾Ķ”ü’óŸ’ä:NYkņO!¶ŒŠFūöķòeĖØ@±jT œ=z4f͚ÕįyQQQČŹŹBXXX/DÕ7Qņodmsž !ĞPĄhļŽ½T „X5*ĪlŻŗµŻ!żńńńøpįüżż{1Ŗ¾…a|ųᇔüæLžćāāø…Bģ–©`ļŸŪT „X3*ĪxzzāŅ„KųóŸ’ÜāDDÖÆ_ .ĄĖˋí›)ł’ņĖ/¹…S}=łńčm˜b;Ø`DEBˆµ¢+OĀ)©TŠ?üįČĖ˃B”€B”Ą“'OšńĒC,sžÕ¢äߨÆ'’׎HĮ0g®C!„‹‰ŒŒ¤"ŒE€·ß~›Š„«Bb5įččČuVaüę7æ”äæ'’ķä†īŌWq !„XŒöģŁCEBˆU”ĶJ éCLÉ’_|Įu(œrqqAjjjŸNžMzM—Īqń„a)wÅe ų„ŹœŪP‡(G7|ž‡h'wÜ®Æģ”ˆ !¤sLE€ÄÄD”––rgöģŁųžūļ!Ņ„7!„[4€>‚’#¤„„aŌØQ\‡ŅmÕ5€a¬[·Ž’Jž`²g”zm§Īõ•ČåhLģ*kšPYƒńī¾Š3 @Ģ@©ÓB”ÓĀĻAŽc1BHWEFF"##ƒŠ{ö`łņåŠėõ\‡B±c4‰>ą³Ļ>Ć?žń®Ćą”­%’š§qų<ļn§Ī-ר0ĪŻjQÆÓ`²g2ŖJĄ0@Š_?\Ø*…„/Ą}E5<^GN!]3`Ąddd`ҤIv=`÷īŻŒÓĒŃBģ±rŸ~ś)ÖÆ_Ļuœ2Ķł·„äf];‰1Sšy~ĒEĆąĄó¼ęÆ+k›’żPYÓāÜ£eĻ,#!„XŠ©˜˜ˆēϟsgvļŽćĒĆŪŪ›ėPˆøøøĄßߘ={6&L˜@k=«F?„X±Ļ>ūŒ’’—É’čŃ£¹Åāõ:Ą˜=.āń!Š 1čĮĄX „ØÕŖį)–¢R£‚‹H•^c€T „R§…«H>„^ ¹@„­ŗĶžäŠ3 ^Ø{ęBČk м0 =”J%”J%×a ¹uėąóĻ?‡»»;Ö­[‡uėÖA.§)yÄśP€+õŁgŸį/ł ×apŹ–“pI Š™_`†w0 `ėā…rµ ĪB1œ„"ä6ŌAĢēćjM9V @fU)„<>ā\½‘ZQˆQ®>šłPōpˆšĻg÷P”Qµź¾o?LššĒ‚©=ł2 !¤*[V]]?žńųꫯ°aĆĢ™3‡ėi «¬¬ÄńćĒ‘ššŠĀĀBC”Ppį˜J„BSS×apŹÖ“ØŌ4!\ę ©@•¾ķ•”Ó+Š!Į0€›H‚źF7)į+‘a˜³*k0ÜÅ :-ž©źēź µA{Š* qņ@™FĘĢ(ƒmŏńi’˜ž|‰„Ņ&*[÷āÅ $''ćæžėæšÉ'Ÿ€Gėó+AŽäååį?žć?°wļ^Z –×ŲCņ*¾zv!RGūģ3 üž÷æē:BP ×1 ƒ?żéOųļ’žoh4®Ć!Äź8;;ćōéÓ6Ÿü›üßoš=ÖųrT@Ćk[*ćH”2µqhæ\ B¹Z…rµ wQÕ|īėm_åÖĮBéi¤"±yüć¹sēr !ąs€=ihh@JJ žō§?QņOHœ‘ššŠųųx®C±ZŸöA¢G"ä.Hńė7‘ żĀ±*h"守”»vŗÆr .B1ł‡÷`ĄŅ>SĄ×חėPéƒļ½÷źźźø…Š[ /^ŒćĒs !V‰’’Ī)P)ą&’ĄSģ€ceĻš_GćoOoc–Ob]<ĮxŅŠz:A[šōzŌé4pJz6hB饥›×xńāEÆ>·wØ?†GĄÅŪ” WŸ›ō}Zµ•EexzćUęüŹŹJüõÆş’üē^ŒŽÖØŠK>žųcJž 1C.—ćŲ±c”üw‚ÆDµA:­ɾa8ņā¦x:-ŹŪXķߜ`©#ų<`cįƒž —B:­·‹B±ńó2„FA‘īń逨ńƑ“q÷.܄¹~’ńąų¤RiļHČ+ØŠ ®]»†æ’żļ\‡AˆU’Ėå8yņ$ø„OųsīÖV’éā…ģŗŠN÷U«UC&Y(2B龎*šų<¼±dü#ƒ{ģ9ˆ}į ų6u4x<rεńY @©TāĢ™3“5 įzĮ'Ÿ|†1S |É/"aĆ"įęē”˜.ČI×hTjT—ćĒ쇨.ķ|Č5Jž-«+Éæ‰‹PÜ‘B{Æ. ŲSE€šŲ”ü“1dŅHŽĖC]EM›Ē;FĀ)*ō°k×®įüłóf Å"Œ]8AƒĀz/(b“ܼ1*.ßÅĶS?€1“_tāš\.lj'(łēŠ›¾aø]_Éu„ŅJTTT"ć[¼OB€Ē磒ØAøqāR›Ē?~ÜĖŅķŠĆ>löĻCĀŅ$Jž‰åš€c‡bÄĢq\GŅ.Sņ?aĀ®C±k7ė*šŽó\‡A!mŠŠŠBjj*<==-ŚÆP$„›Ÿeū$äU^!~f•––öb$„“F#zX{ ’õ‹戠^Œ†Ų‹ńCšģN.*‹Źø„Jž­ĒŻś*®C 6ز²jµŗŻs¼½½!q;Ż­””µµķļ˜įčč—^Šˆ“e芔8{ö,&OžŒŹJˌX’Či6ҳŚł+//ļÅHi =ˆaäęęš=1*ŗ£!v…DŒdu¹\ŽćĒSņOˆ +++ĆĪ;Ū='..ÉÉɽQkƒŪ¶mCqq±Łs„B!~ń‹_PĄ XŗĄćń,!ęµ÷#f0z/BŚ@SzPmm-šššŚ<ĘćóįąÕĖ{āģĖu-˜’’‰'rJ*))į:B8aƆµ{Nvv6žéN IDAT!¤›h @joˆ]G“žf-&{Iž?~Œ]»vA«Õ¢±^ ¹«s‹ćżeĪø?‹£č,C§ Ņ9˜?>¶lŁbvÜśśzœ>}ŗW§˜ :Īģ9Xøp”Õ¼‡’–LE€)S¦XlMB±'}ćv!¤O’Édv‘üēää`ĒŽŠjµ€yĻø ؇øŠ¬gT ±~įįį3fL»ēōöT€¬¬,“{NG£÷LE®C!„>‡ „a/É’­[·°wļ^čõśęĒr³ļ@÷²`+\D Å\‡Aś˜¤¤¤vēŃ÷ęT€ŹŹŹ‡ž4ØĆõ ˆu "!„°CBˆÅ™’’ÄÄD®CéQW®\ĮZM÷Q)”øq*£Ķµś" _ˆ0Gw®Ć }P(Ă Ģžcš Š“†ĮĮƒ›Gé“ÅŁŁóęĶėŃ8ˆe >œŠ„ŅET „X”\.Ēɓ'm>łĻĢĢıcĒĢĪo.ĶĶĆ„żĒ”¬­ėåČ,ĖM,E”‹7„<śø ģųūūcҤIķžÓÓS.]ŗŌīŠ‡äädČd²‹ōŒįƇ#-- īīT¤$„Ī !#“ÉpģŲ1L˜0ėPz Ć0HMMEVVV‡ēV•ąģÖŻš „»æ/dR€««+ĀĆĆĮ·Ņ]x<Ä|\D D\‡ClĄ„ ››‹gĻžµyÜ4ąĆ?„ƒƒeךج¬Ä™3gŚ=gōčŃ0`€EŸ—ōžŲŲXœ={S¦LAUU×įBˆU£!Ä"LÉæ-ßłg'NœĄåĖ—;ŻĘ 7 ,æeł…ŒóV'%L±ŚäŸžĄćń°`Į|łå—P«ÕmžÓ»˜ ķ ż÷šš@RR’Åž“pĆ4€Š„Ņ>ŗ%„t›)łļh˜o_f0pšąĮ.%’Æ=z4.\HÉ?±Knnn˜1cF»ēdgg#77×bĻyłņe³£€ĻēcįĀ…‹iK[@kBHĒč*”Ņ-öüėõzģŽ½7oŽdŻGBBŽ|óMŚ[œŲµøø8DGG›=Ī0 >lv”@WŌŌŌ ==½ŻsŌķē"ÖĆTpqqį:B±JT „°fÉæV«ÅöķŪq’ž}Ö}Lž<™†ņŅܹsįččhöxmmm·w`€F£1{N@@€MÆWbφŽÆæžšė0!Ä*Q€Š=$’Ū¶mc=$™ĒćaÖ¬Y6ż="¤«äry‡óüÆ_掭©W®\A~~¾Łć"‘‹-jw{BŅ· 8ė!Ä*Q€Ņe2™ GµéÄV„RaóęĶČĖĖc՞Ļēc޼y;v¬…##¤ļ‹ŠŠĀȑ#ĶļĪT€šš¤„„µ{ĪĢ™3įééŁå¾ !„¾Ž „.1%’“'Oę:”£P(°qćF±j/šÖ[oaĈŽŒŪ1kÖ¬vkc3ĄT8hočDDāāāŗŌ/!„b+Ø@é4©TjóÉmm-6n܈²²2Vķ…B!–,Y‚Įƒ[82Bl‹X,ʂ ŚŻ£«S®]»†üŃģq™L†””ZŒ“BˆŻ¢!¤Sģ!łÆ¬¬Ä† Xļ!-‹ńĪ;ļ **ŹĀ‘b›‚ƒƒńĘo˜=Ž•©µµµHMMm÷œ¹sēĀÉÉ©ĖqB!¶‚ „™’’)S¦pJ)//Ē·ß~‹ŗŗ:Vķ„R)VÆ^ššp GFˆm›6mŚ„ĘĘFVķ]]]±fĶųłłY82B쇗—¦Njöx{wųėėėŪśĻćń°`ĮH„R‹ÄJ!„ōeT „“I"‘`ß¾}6ü?~üß}÷«­ĘĄĶĶ ļ¾ū.m'FˆŒ;‘‘‘f·5€a:tMMMfŪ?żśõ³Xœ„BH_FBH+‰Ą¬Y³ø„Ēäää`ĒŽŠjµ¬Ś{{{cķŚµpww·pd„Ų'‡yóęµ{§žõ”žŁŁŁxņä‰Łó½½½mŗˆI!„t!-ŲCņūömģŻ»z½žUū€€¬Y³ĪĪĪŽŒūęģģŒ9sę˜=žźT€śśśv …X“h„BaO„J!„ōIō©HifÉ’Õ«WqģŲ10 ĆŖ}hh(ŽyēH$ GF€aƆįįƇČÉÉióøi*@mmm»C’'OžLksB!Æ”!€qūżū÷ŪtņŸ™™Łį>įķ‰ŒŒÄŅ„KŪ]­œŅ}ÉÉÉ(,,4»-ēµk׌m‚ńćĒ÷Dh„BHŸFS!‹Å8pąfĻžĶu(=ęģŁ³ŻJž£¢¢°lŁ2Jž éHIIĒėr[‰D‚… ‚ϧKB!äuōéHˆ³õäŸaœ8q¬ū6l–.]Js‰ éEįįįˆļr»Ł³gĆĶĶ­""„Bś>*bĒLĆžm5ł7 8tč~ųįÖ}Œ5Šī&Ā‘éÓ§ĆĒǧÓē4±±±=!„Ņ·Ń-!vŹ”ü··āv_¦×ė±{÷nÜøqƒu ˜;w.«aȄī …š÷÷ļōłaaa= !„Ņ÷Q€;՗’FÓ„óµZ-¶oߎū÷ļ³~Ī„„$%%±nOé¾ąÖ­[>?55eee=!}Ē›£¦a^ü 8Jå\‡Ā‘óāg ®’0®C!ÄjP€;ÄćńśLņÆÓépåŹ•NŸÆŃh°mŪ6äęę²z>‡Y³fQņOĒźėėq芔.µŃétŲæ?ōz}EEHß1"|(FGĘĄAŌżmkĒÕ'“h‘P„Ń‘1čēĀu(„X ZъbÕ²²² P(:u®J„Āwß}‡¢¢"VĻÅē󑜜Œ#F°jO± †a°’~466v¹mii)Μ9CE®^švõŌ7*›ū¹ycmŅېŠŠØV”FYš?7Dų…a|T6¤ī@Iõ‹ę6cŽÄ›£¦ĮĄš¼¦JUĄUīŒž~aQ(«­Ä©›ē Ńi ~ī-·Ń‰·'Ī”ÕVB©j€X$F°WöG\ÄpüóäVصjø9ŗ"Āßø³ĒƒX(jžŗQ­jī3Ō;ļNY ‘P„Ŗµõąńxö ĄĄ€ž5 ßœŽ†Źśj@ˆw¢#ąćź W/ص4Ø*Ģ‹ŸŽŃ‘±00Ō6ŌCŃØ„L"E`Øbś ĘŻą‡Ų•yø¹044 KŽH”Ö”A©j€³ĢS‡'`xŲąīžwbsØ@,J"’Ą×Ķ Å•Ļ”7čq3/‡ėH¤×ėqģŲ±ęÆĶŹĖ˱eĖŌ׳+0988`Ŋf՞bY'Ožlw’ąą`Œ3¦łėéÓ§#77×ģčŸ ;;#GŽ“x¬„tÄĒÕ™÷ÆąģŻ‹PkŚĶfīč$ˆ…b|į ī”ÕH±PŒoNodzņŸ¦īõó ĘčČXä½(ĄĪĢCP¾2r@&‘āÄ…k¹·ńćó|ų|¼9j4: 6¤ķDIÕóęó]å.X›D@B^GåīčŠyń3p+’Tź&Œ8NnČ-ĶĒį«§.2'ŒŠCˆWœ¤ŽŠbųYy]e«~E`xX4ÜÜ “Ha0ФUćyM9ņ_bīč$HDbüßż_¢¾QY#§Ą×Õ [Ī14÷āˆŲ~ƒā±H†aPߨijņB\z˜ e“±²=8d FGÄ0¾ń3 ƒw§,č zlĶŲŪܧ‡“Ę `Æ8Jå0 hhjDAE .?ĪnńA7iČ8„łcĻÅ£˜8x Ā|ƒ!;໌}(«­xśŪpIPߨ@µ²ƒ.rgŒ‹ŠCü€Xl9»?>Öܧių™Ī GIås”T½€€/€“TŽįC×^ŌTą\Ī„ę¹^~ó ĒƒiŗÖ  ,Ÿø V” ZY ‰Pw'7$‡įCńć›ŠŠŌ‘ĪĘ4>šxĶ_›> Ģ'«§,H DMCj”uąóxp‘9#!z4āÄāß©ŪQReNēėę…’0ülśrx:»C©j@JќŌ'ĒOĒčČčō:T)jP­ØT"E˜O0öĒŠ(l>»zƒń|Óš3Ć øŖu øČ0:2ŃĮ‘=ö’l‹”J%22Z^0½^xöģ¶mŪµZĶź9\]]±jÕ*J± 8pą€Ł$’’’ąįįŃźńÄĒĒćņåĖm¶Óh4Ų»w/Ž’żv§bi…„­s‘9ƒŹj+̶«RŌof8ČQŪ`LŌŖxŗx@"’@­młŁēīč ™ƒ åķƁJŻ„_x8¹5Ļ·7yQSŃź.}G\å./Ū–›=§ZY‹æ°ę›)&E•­æ?®rg0 ƒ²ŚÖ7” JQ p~yćŹYęd|~3ßĻŅŖm>Nˆ=£€óprùœK8sē"ō†ŸöEž7b”ŪĪķƃ¢–ū„Gś÷ÊI‹0sÄd|q|Sóćć¢ā ÖjšÅńM­>4üÜ|š«Y«P©ØĘgŚiņ°7Š nÄ?OlAmĆOC·y<fÄ&"!:CC¢płń d’xŁ/·œłżĀ_C§×įž«UŸóāg6¤~¼²Ādž… Āā7ębzl"6„ļjqŒĻēćĖ[ZTC¼1:2ye…Ų~n‹Õs+ś'#*0ƒ‚"‘Sš|³ć¦B£ÓbCź÷-ęģÉ$R¬öv»ßŅRjj*ššZ®XüźEūćĒ±k×.hµŚ×›vŠ››VÆ^ ww÷nÅI± †apąĄ(•J³ē˜’|s’’’šäɳSJJJ‘‘©S§v;^B:ėÕė.©Ų€ń¦Jlų6ŪÉ%ʅ+EÆæå"~@,>œó.rKó”Ņ4ĒćĮYźˆH’~ą‡OļvӅ{—1sädüŸy?G“VŗjjQ× @E}>Aµ²¶ÓÆQ&‘¦ { ƒŪžutÄÆŚūžü6łż6ūāńxĶ}ū6~ƚ4mßhŌØŚ|œ{FWPQŒŌ[Z<ę – Ģ'J~l•üĄ“Ņ<ä• Ā/ R±Csģč Cy]e«äž×”A”Rtj»?og<.Ķk‘üʋĄ+oB"’ ®ÕoĶńprƒ·‹'®’x§Uņwņ`Bō„zAĄē7ßµ€ć×Ó[ ‹ ģ8}ó\«­s“:-ĪܹˆØĄ„ū†"§ą|ݼą,uĵÜŪ-’Ą8\-#ē–&$wśõŲ³’’Üŗu«Õć¦>ÄīŻ»Ū] ¬=^^^X½z5œ»'!Är._¾ŒĒ›=.‹‘’’Ņ|įßÓō€7Ā`0“yĪ… Ž~żśu;fBŲæü<«Ø«2{צĔ,‹ŠĆč18ļy :(€aФU£¬¶?<¾Ńę5Żė2\E~y"üĀąęä W¹3Üå®÷ …H ÄōŲDlNßÕęõT[„ćėyQ[Ńęõį«Ģżn¾J$Ój:ĮėšGP0¦æŚ=ŌŽØ"Bģl\[CŸ\dNąńŚ~V­ØüĀą$ulN‚ėštv‡£ƒ¬Õ¼,7G8I:ü0eS#Ü}ąį‡5e-ņje-]9ÕŁ—g|=rc2WnføŌ(kįļī±C‹­hŠ+Ÿ·:×EfģĻÜ÷§ęeeÜIj¬h;KĆĻŚZ3hXł Ć08räH›Ö·oßʁ:uі€€¬\¹’¶#Ċ”——#--­Żsf̘Ńꊒי¼téR›Ē_ŻP*•²Š—īҾœ¾ų č .Üo{‹×EE¢AՈ“[™­Öb£Ø²“Õš{x÷ Åź)oaĀą1.˜¦–ŽŹĖĮ§Ż_ųŁ“ƒAgÆ_^£Š¢6›FSB~B§k#Y2 ÆÓ¼æėėdbćőHųÓjīó|Œ‹ŠĆoŽ\ƒ§Ļ ^?ärō÷ …€ĻĒõÜ;ĘtęNŒ…f­‚Ž`Ü'¶¶”u TÖWć^Įc<Æ1æ tėXÆgĀą13pD›ēČ_Q{ż¢­RÓp¶ē¼×f_<¼~&ūī`ųŁ«[Ūó²³³QRRŠjµ(//G@@ć–€ŁŁŁ¬+ł”””xēw ‘H,/!¤{t:öīŻŪītžššpÄÅÅuŗĻiÓ¦!77·Å"¢ÆŖ««ĆįƇ±dɒ.ĒKˆ%TÕ殷%)f""śa[Ę>Ō5*P^_…~¾!ųĆĀ_£¢¾ *M“ńŚųwƒZ…²šr<+/n·@ąī‹÷¦-Ź»—łru ~|ž…Ŗ”Å[Ā©6ĶÉoēõĢ‹ŸŽ@Oüūōöęߜje-Ā}Cą(•7ouų*™Ž™“OJņzė<*ćˆQOē¶cöt”é~„¼Ž vHų2 ~Q[ĀŠ’vĻm|y·|ĢĄ‘‡ōŪ™šw÷A€‡oóŖüMZ5žUįŚ“[~vćé]V– ŅæÜä.p•;ĆEīŒpŸ „Ä!cńżłźĖųzŒ?Ę%UĻń¼ƒ»ķZ}Ēóʅ!0øūģa»ē™VŠ5 ;c,P•·W*• éééĶ__¼x±9ł€ėׯ³ī»_æ~X¾|9Äbq·b$„XVjj*ž?o= ĖD"‘`žüłķżP(Äüłó±aó£…īŻ»‡[·n!&&¦Ė1Ņ]5Ź:T)jÓo0®<¹ŁjUG©qĆššwD:Ÿó††DAoŠC”j€D$†·‹'¤bČ%28ˆÅķ5ų&u›Łu*ÄDEāŅ£ģVsš½\<ą$•#æ¬ØUŪ&mœeŽ­ņ+­.C£Z…Q1øł4§ÕN7G ‹†BÕŠaņ¹„yˆė? S†¾£×ŅZ4bƇ ĄŻwņī0ŽäTk5Ń~xt ÕOk‰HDb$ ŻįsboØ`‡LoÜy/ pęNV§Ś šļµVƒ‹ƵŲĖ–­ŠŗŖ6·² p÷ÅĻg®@Bō˜NLń<*ž—ßčvl<š~;³Ķj^ר6.0#µ}w™†ŸuģĢ™3hh0^čŌŌŌąŚµkX°`A·ū8p –,YŅę6‚„īäęęš]µßdęĢ™puuķrßAAA;v,.^¼höœ£G"88øSS ±$ NdŸÅŪēć7sŽC~Yj”µ``\,/Ü7‘Ē®§7O‘œ1bō=ž’#’nóĢA$ĮÄ!c0qšXÄõ†¬mo§©T5ą^Įc ˆOS~‰¢ŹēhT7B§×ĆYę„H’0šx<üšØõöÅ„Õe‰ßĪ]‹Ņźrčō:Ļ>ƒśFNŻČĄü±3ń»y?G~YaóNLŽRćQ”PˆōNéæ_ųĻŹ‹? ĀQXQ‚&­"”>.žššCķ’cテć¾ĪCļ·bXōŽ+A$@‘`ļ¤H‰¢ØBKr“l_7ÅqāĎ}“Ģ›;ļ{{ā™Ä7“;¶å¢ÄE¶"[–dS…U$HнA¢…č½ībūīūĒ+.± €$Ąó™ńˆÜsöģó[ĄÜ=Ļļ9ē˜†¹8¶A“ŻéąĆņ“<¹rß~ę/Øi«gŌfĘ  !#.—ģ Äņ­xź3zŹĻ&Ū°owńv–¦ēń«£ g؏ށ.ņRrų_/ü-}#ƒ—ŸŁ,ŒZ͌ZGéčįFg“Ofųvń1|ėé—9~ķ KOhoėļdŠ806w‚śĒ®'b’ėy~ż“d%¤ó“żæöŁĄŸńr¶ˆ0æŚt!|}÷øŃŃÄ;g÷{³Ķ±ažĖĢāĀå ędŗŗŗ|Īž>|ų0N§“ŲŲŲ{wٲeĪ B̽ŃŃŃ)üĖÉÉ”øŲ’’®éŲ¹s'µµµ—Œ ųņĖ/ĖрbĘ9œśƒŽ·«l©å‡^gCž*Rc<Ē%ƒ‚Qė(mżœ«¹ģS…˜HßČ`Ą0»•Ņśkl]ŗžPżĒ„ųC£Ę 7'~’Ń>š{Ś(LĻ##.Å[Ķi“˜ØmoäBmÕm7&¼Ę;g`µŪHK!7)•RÅį+žM¦/Ž(gŠ4Ģśü•$G%ø1YF¹ŁÓŹ©Ŗ‹T·~<¦Ńl¢ß8č÷ß§ĖÅyƒkX’–ĖāältŚ ¬v#f#ējJ9VqŚg“ę*/`“Œ²vń ņRrШՌZĶŌµ7rØģ_Žńé {W ±I`2šM“õu²4-s5„6‚1čBXžµµJķ Ÿ©¾ĢŖE`w:hķk'HD°VGxH(!AĮ„P*” ‡ųéß0löœÓ i§ĖÅ¢¤,J*ĪLų0‹ &ĀN›ŸĶł,V ‘†p‚ƒō>ŖŻC} š†(Ī.āņ«6ć‹dizf«eŹÉ?@M[=ņWńųņ­¼yś=NßēWę,#Źį]ŠŃߍŃb⑬„œ®¾Dļpæ·o&ˆm…ė§|Ķ…ģ½÷Žó–źÖÕÕŃŠŠĄž={īi§žÕ«WóōÓOßQé°bv¼óĪ;ŒŒ>éE§ÓŻqé’ķ¦³ µµ•'N°}ūö»~!üiėėō{dń­šŗ[hźžXjļO’Č Y il.XC}ēMLV3V»§Ģ_§ "&,Šł«ß Œ_+łć„±œ.'Užē£Ūö˜ŠŃbā§Ž Ų^×ŃH]Ēä;÷{ūģžIŪķN%§)©šæ”§?e ×(køę·ķ’ģūł“Ēb!ĄõĮ„]ģ# IDATłŅŽOóõ'¾@{'}#žLlˆNOz\*•z¬üĢS’Dń6püūŖß “J©bCŽJvÆ|”Õ¹Ė.-°Śm\¼q…µ¹+ųž’Śś;1š8\NĀõ”d&¤”P(ü~0µōuĆwžżż]Xvö_>Jļp?ļ]üĻnŽĖß>õZūŚ2ąĘMØ.„ōø”Jå“w”­ko¤ŖµŽ¢Œ|²Ņiém÷”Ÿ©ŌĆEĆ iˆóµ„€g#Įż—ńÉ Ońͧ¾BCW3#f]0©1IXķ¶€ĒÓ,tååå46z¾08NŽ?ĪŽ½{ÉĖĖ»ė17oŽĢć?>S! !fŠłó穪š|•={ö>õ‘²SIMMeÓ¦Mœ8q"`Ÿ’’rrrHKK»ē×ā~y’҇¼“åģ^łhĄ>nܔ7Vœ !Ä8IĢSv§¶žN†F‡ż¶7t5ó£~ÅĘüU¤Ę$““˜xÖ³×w6q±®œėĶŸĖœ™Ąy$`ł™Ó夢¹šŻ+Å0v<@ļpZļĪūūĪ¢„§e™ĆE“xvŃ/o¬är}7üd‘ß»p‹ĶBf|ń‘±Ø”*ļ®ž×›kųŁĮ×X·ø˜”˜DāĀc¼%m5m œ©¾ä3fæq¶žNŸ#ǹqó»ćo³jŃ#,I]LRT¼gÓ§ƒ³‘*/pņś9Ÿ*„Ņś F-fÖå“OjŒ§üģzK-G®œäÓŸžņ|܅Ęf³qšąAļß/^¼Č£>zOgtĖä_ˆWOOLžˆĶĖĖ›ŃĶł¶oßNuu5]]žO–q¹\¼łę›|ćߐSBÄ«k°‡’³ļēĄE‘H&½6§Ė…ÕnÅhńTv޾ŸBų# €yŖwøŸ½’ĖIūt öLY†5®o¤Ÿ‚Ō\_¾•M Žąt:q»Żh5Z¢ ¬Ļ[ xJāĒłßķvs¹ž*—ėÆŽĮyÖø½wńHĄvēŚr°ōøß=Ę9].ĪՔr®¦tŚńU·Żš»ną‡_Ÿö8 EII ĆƞÕČȉ‰‰¤§§ßÕX …‚'žx‚ 6ĢdˆBˆāt:yė­·&=ņ/88˜gŸ}vF_W­VóüóĻó³Ÿż §Ó’¦®¼÷Ž{3²ńØ÷SļpæĻ2C!„ø’Óņž„ ÕŲVø>ąšv—ŪÅåś .Ö]™åčÄƦ··—Ó§?^Ūg·ŪļzņÆT*ٱc˜ĶžŖ F#;’ ń9|ų0­­­“öyź©§ |–ųŻJJJbÓ¦M?~<`Ÿ²²2rss)**šń×B!$ņ YLĖ€qˆWüƒ.„Ō˜$tŚ “jOł½ÅfÅl³ŠŽß)»¬Šiłąƒ¼wćl6QQžOP˜—ĖÅįƇ9|ųš„6…BN§Ļ<ó ƒį¾Ē’˜˜Č–-[8vģXĄ>7oŽääɓlŻŗõ¾Ē#„BĢI!fĶɓ'éļæ· Œ, ųĆhkk#44”µk×ėÓG”P°dÉ{ģ1¢££ļéõ„wēŅ„KTTTLŚ§ØØˆ„K—ĪRD°mŪ6jjjhkk ŲēčŃ£dgg“šš:kq 1SBõĀō4j5v‡£Å4éé:m <Éx³Ķ2åųµµR€Ķa÷­V©ŃØO+œ.'6GąM@…³GBˆY144Äɓ'ļi “ÉÄo¼ĮČČŪ¶mcÕŖU6ūĖĪĪę‰'ž 11ńž^Kq÷śūū}Ŗ}ü aĻž=³‘‡R©dļŽ½“.?šÆ’śÆåh@ńŠXš¶˜Ē–o!."–āģ"–¤.ę'~MĻPß½_¼āŽI@ĢøčŠH" į( œ.&‹‰Žį~œcėµoāé 0`št³(€ą =:gņg²ŽbµŪŅh ų<‡ĖÉČØ7“/fŽ™3ghll¼ėērķŚ5^xį… †““4vīÜIVVÖ½†)„˜G„„„eŅ>Ė—/gɒ%³ŃD[·n„ŗŗzŅ„—.]"''‡ĀĀĀYŒLˆ;÷hŃFžóČ4uOü’Ž—Žņņć/’—JAź"®6Uł“Ž}÷*LĻćĄåcæ'fä£@Au[=…éy~ū\½YÅéŖ‹~Ū” %»Vleó’µ<»fÆ~żN.S1C$ f̲Œ_±•(ĆÄ#”Nךk8płŲ„µh±ė%"CĀųĻ#’ĶŽ¦I_ēóŪž'#γ6óOēp¾¶ €āģ"ž^żŲ¤Ļµ;ģŌu4qųŹq:z&ķ+f†ÅbįĄwżü‘‘4 7nōy<>>žķŪ·Ļźśa!ÄäĘ7ћLXXO>łä,EäŸR©äłēŸē'?ł ‡#`æ}ūö‘šš*GŠ–J©$>"†īĮ>æ“—ŪEySq©ÄGÄU·”āŅr_¾•“Ųdnö“śgYfĆf#7{Z&&ćr»8PZB^rŁ éĄEŃ;|oū !īœ$ČXš¶˜Oo~‡ĆĮåś«“ō¶ćv»Q*U„éÉOÉį‘Ģ%¤Ē¦šļ½ź½k?Īj·”Õh(Ź(˜4Jzl V»• ’µ™]->¼‚4ZĀōāĀc(H]DnR&??ō;ZzŪļõŅÅŽyēļnżwŹétźóXll,;vģ`ɒ%w}Š€bę£7Ւߟ}öYōzż,EX\\Ū¶mćȑ#ūŒcųå/Yž½$…B‰B”˜PÖ»†Ī›æv–¶¾Ī mJ„’«MU<¾|+…éy~Ń”‘$G%pŗź¢wÓĄ»įv»¹ŽRK\D i±É’bH@̈m…ėQ ąæ>|ƒ¦ī‰Gƞās[Ÿ§ uE\¬»āÓn¶™éčbiŚbž|ī .·’/Eł(žņ³e~ūŌ¶7PRq:`¬›—¬ewńvž]»‹½’Ė;øJq§ŒF#ÕÕÕwż|•JåżsDD[·n„øøXĪčāT^^Nttō¤'o¤¦¦²xńāYŒjr›7o¦»»£Ń8i憆²³³g)*!¦ĻįtŠ3ŲGBd,IQń“÷włķ×5ŲĆĮŅæm ō ŠÖ×AQF>\>:a9fŃŲw®«MUdÄ„ÜSĢŻC½Ä…Ė)=BĢIˆ{¦@A|D,}#~'’0–ńm®” uń~vØU)U\mŖāéՏ‘“˜Am{ƒßq Óó0šM4v6LLåäõs¦ē‘“DrTmż³įbfłÉOĪuBܓ*ĻóÜś'łśī’ACēMz†ś0 1<:ĀšØ‘~ć Ɠ8īJc%O®|”ōŲ” Ė Š2ņ0 ŃÜÓFfü½‘i²Œ Óźīi!ÄŻ‘oÓbF(•Ź)7ļkčŗÉĮŅ’ »Ć‚§„ķjS{Vķ`Yfß@¤!œ“Ųd{q½¹–Ō˜$Rc“$pŸ477såŹ•©;̦M›X·n’݆…Bˆ…īārœ. V‘“˜AnŅÄMqGĢFĪՔrüŚYœ.’‰łŠ›Uģ.ŽĪ²ĢŸ@\x ‰‘qœø~nF6R_®  p’€āž’€øgnÜ“õu’HvbõM~ū ‡8~ķ¬ß6„BŃb¢”³™‚Ō\TJՄØĀ“<((o¼NBdü=ÅÜ=äIBų;/WÜ;·ŪĶ|0eRČ­VĖŚµkٲe :ÜB!¦RŚPAiC*„ŠP½ˆ0Ā‚ „ź ąG³$-l&ŅĪ[g>š;Ę i˜›=m¦ēńŽ…#Žå˜Eł\mŖœ‘Xµj-Ą]ļ$„ø7’3āųµ³¼“õ|eĒghīi£gøAÓ0C£#ŒŒ•Ÿõ Ģ:»ŚTéĶ^WµÖł“-Ė,`xt„¦īVļ10j5žĶÅĢ»xń"­­žå 6›¶¶6233'}ŽR©d͚5lŪ¶mNĪB!vN—“AÓƒ¦!ŸĒ”Äß=ż2+² 9Xv£Łä÷łå×yfĶćd&¤yočeäÓ;ÜļwĮ»”Óz6q¾}Ch!Ä쐀˜כkųͱ?²¹` Éщ¤ūŁ Ęj·qéF9‡ŹŽcsŲżŽs­¹†g×ī¢0#Ļ'Irt"§*/ÜÕ]åŪŁĒÖ„©%0ÓĢf³Ļ®Ś§N¢¬¬ŒO~ņ“¤¦ś_7˜œœĢ‹/¾Hxxųl…)„B<ōbĀ¢xģ‘-“ö¶s²ņ|Ą~F³‰Meä0Pq³š§Vļ¤(=śŽ&ā#b‰ įŲÕS3sˆ.šT!fŸ$Č©n½Auė ōZaĮƒĆ<åg1eä³!‘†p^+yĖļ£V3µm ,I]ŒZuĄ»Nl¼ü¬|†ŹĻĘļü;„ülĘ9r„ŃQĻ?ŌŌŌ°}ūv’““'ōŒŒdĻž=äåŻłyĀB!ÄB§T()ŹČ'To˜4|¼~’)žå˜7Y’–Ē»³,Ó³įņL}’ȌóÜ čģž±1…Ó' q_˜mĢ6 ]ƒ½ŽĒŽ]=Å·ž~™‚Ō\" į ‡ü>·¼©’¼”r“²Øl© 0=Ÿć­½3ŸN3V~ęņ³™ŌŃŃĮŋ½·Ūķ¼üņĖ>Ēł) –.]ŹŽ;ˆ‰‘=„Bˆ»Õ;܏Łf!%&‘ȐpLžæ[iŌŅcSp»ŻtõM:fyc%9‰™dŧS”žOē@Ļ÷¹{‘›B~j.&Ė( Ķ32¦āĪH@ܳHC8O¬ŲNĒ@%gö³ŚmÜčhdeĪ2ā#b&*[ź°;,Ė, ²„–Ųšh’¢ā9~ķ̌ģ> Ŗ÷¬10ĪČx³ńßūļæļ³©O\\œOŸģģlvķŚERRŅl‡'„BĢ;.·‹S•ŲłČfžj÷’ą\m)ŻC½ Žąp: ŅĖŖEˈ £¼±£Åł’øń嘏ÆŲJLX‡ŹŽO;ž¤ØoÕę8„B‰^«#5&‰¢ĢTJ%‡ŹŽO¹/”āž€øg.—‹¢Œ|¢C#'M€ēøæńēbµ[©i½A^rµ†ĀōńŻg«f,ęĢų4:ś„ül¦”——ÓŌŌä·-==;wN¹ B!ī̱ŠÓØT*6åÆfDzM~ūøÜ..×_åŻ ‡§Ļl³PÓÖ@Aź"ąĪ¾gRœ]°}Älä`éq.×_ö˜Bˆ™% qφFG!!2ŽÄČ8:üOŖ5j YńiøqÓ=4y)YyS%KÓóČOÉaYF=C}“÷wĶH¼éq)eä3j5Sߣ4#c.tV«•C‡Mx<%%…mŪ¶É!„ā>q»Ż.;Į‰kgI‹I&."JƒBį™ĢĶ&šŗ[żŽłūģ~æÕ•KKøŅx ‡ÓAßȀO[eKżĘAš{Śoy¬–~ćĄķĆxŁv†LĆtöĢČfĪBˆ»' 1#ŽWœį™5óµ]ŸćŅ«t tc“˜°;ģčƒōćǰ"»HC8W›Ŗ¦ÜłµŗõV»•m…ė‰ˆįĆņ¦KjL"kr—Ox<8HObdKÓóP*”,-Į>¶É ø7%%% ü3MHH`ĒŽäēēOņ,!„BĢ«ŻF]G#uÓ~ĪķG.ėź x³Ę_Ūdż…Iˆq¶ę2*•Šķ…ؐæŹo§ĖɅŗ+¼ńˆßö[Ł*[źXžµø³Żg Rs)HĶ Ų>`āš•”5\›ö˜"°žžΜń,żˆ‰‰įŃG„°°…B1Ē‘ !„B!n% 1cNU^ąLÕ%’£ˆ A«Ń¢T(0[--&ZzŪ1Ū,ž·ļÜ!”ʉ“ÅĖ?¢Ŗµ‡ÓAĻm;ÖÖ“Õóß'’äs*Ąųcž8œN,6 ƒ¦aśećæµ’~ Ū¶m£øø„R9×! !„B!ü€˜Q.·‹–ŽvZzŪ§ī<¦ŗķ†ßĒūF&¬;›¬m²žāžhnn&77—_|µZž9B!„āA&ßŲ…w---“““¹C!„B1 R«+„B!„B,’B!„B!I!„B!„ €ģ „B!Ä<§V©yjÕN޽p§ĖyWćg’›BeK-5mõ3¢bH€B!„ó@ˆ.˜­Kב›”5”M„T±&w9kr—£V©īś5²2X“»œ¤Ø„{ uÖ¬[\̚Üs† ©B!„b0肣µbējJ©mošis8,-ūóŻŻżØhŖ¢gØ—Ę®–{Šu¶l/Ś€Ķaē|mé\‡"ÄAbV) >³éYŽ9»‹ŻzW欏YĘ¢¤,®7×PŽT9“! !„BĢ;N—“ć×ĪŽó8Õm7Øn»1 !ę‚$Č ҳyÉZŚū;¹ŚTåÓ¦@AQF>ļ^< w™HŠN (#ŸŽ‘~hŗ×ˆļæĶKÖ¢R*)©83×”!„ā>xfĶćŲvĪV_fCž*RcŃkõXģŚś:9]u‘¾‘Ÿēؔ*V-ZĘāäl ŗ‚4Z¬v½Ćż\k®įzs·o\x ;–m¢“”„BĮʜGˆ ‹¤²„«ŻFbd:m‹’2łģ潓õupāś9ö®Ż…Ū >Š'Žģ„tVdƒN„ŻéĄl³ŠŠy“3՗0Ū,޾©‹x$s)Už§„·€­KדǟĪ`cĮj2ćÓ0čB°9ltõr®¦ŌŪwœ…y¦ēl@ÆÕaw:¤¶½ĖõWqŗ\ŽžŸŁü,ż]”ÖW°±` éqÉč5:G‡=ļoõEŒf“OŒz­­Zė}?œ.'8õī]ž”…xųI@Ģø –­K×QŚP1!ąv»łÓ¹Xmw7ł(o¬¤s ›¶¾Ī{Šu¶¬É]ŽV­‘€B1Oå%ē V©(Ī."H­”­æ ³ĶBLX$é±)gńóCæ„½æ šTE~ńŃO’“˜‰Ńb¢£æ³Ķ‚V­” 5—åYK9VqšĆe'OyQF> ‘±Ä†Gćv»2ONbJ…g{Æš0‚ƒōøÜO¢óSįr»įüĒqo,XĶ“+7ō1YFQ*•$EœĪʜeüd’Æ1Z<“ėøšŠ2ņ}*0Óć’ÉKÉ!>"–øˆhŚś:1YG‰4„““ČŠ¬B^?ń×nIhģYµƒ ł«°Ų­“õu2hF£ŅŸĘŅō<'góŪćo{ū¦ē‘ĒŚÅÅč4AtzŽÆōŲr“²x$k ’÷½’Äb³Ī¢¤LĄ“dQ)UŽæŪŽ™ł ń’€˜UnܜÆ-»ēqšŗ[hź~8֞ !„baÕØļhā·'ŽĘrĖŽU‹į¹u»Łµbæüš÷dĘ„’“˜IeKæ;ž¶ĻD]«Öš—O| y«¼ €qqį1«8MÉÕÓ&³ń1|ė闹TW>į.æ?z­Ž]Ė·b²˜łÅ”ßŃ=ŌėmS*”ģ|dŪ 7°yÉö_>6éX ØU*žķO?eĄ8ä}<+!/=ś)ž\¹ƒė-µøŻn ŗÖåÓ9ŠĆO¾†õ–ŠP•RÉg7ļeIŚb"BĀ4 ū\ßłŚ2ŸS 4*5ĻoŲòŒ–gr¶ś’÷’ōĀß`sŲł·?żtŹ÷Cˆ…@óĢsėŸD©Pp“ü›—¬%56‰`­›ĆN[§+/ŅÖļ{×\­R³vń ņSŖ A£Öąt9é¹–KõWq»ŻÄ†GóōŖĒ(mØĄįt°zŃr¢B#ØmoĄd%=6Śókµ(1“/ļų ķ]ūąxaĆtš Ÿ¬.@nR+s–‘‹F£Įķvc¶Zhčję£Źó Žxū¤ę²nq1'®ŸåFGŪ 7ŸĘļOķcSĮj²20čB°;ķō õq¾¶l†8 ¬Č.¤(#Ÿˆ0“j-.·‹ž‘Ant4r¦ę2v‡ŻŪ’óŪ^ wøŸ3ÕٲtYńihÕZ†GGččęĵ³ ˜†Ęb\ÄŗÅ+ E”Px߀’śš»ś !„āĮõŽ„#>“€‹uWX»x٠騔*œ.'Z–ŗöFĪÕ\ö™üŲvšŗšIŒŒCÆÕł”ąßčhšø[9‰ØUjĪ];ė3łOåĄ‡å§ŲT°†ōø”iwäŹIŸÉ?@CēM®Ž¬bEV!qįŃt ö¢ ¦¾ć&ךk|&’N—‹ŗŽFæ »ĆĪžĖĒ|Ž0“;”TœfYFń1wś±ąH`žI‹I&TB^r*„ŠęŽ6FFD…F°"«G2—šźį×½;·*Pš…m/°()“ćm}øÜn‚4ZR£“ČOYDrL">ēÉ"©µ,JŹ$*4‚čŠHģNż#XlV ś¢Ć"Q*hÕZ¢Ć"±½1¦Ē¦xĖŅĘm*XĶ“+wąt¹čģahČ3ŁˆaSĮj–g-å'üŹ;¹Ž cQR&„ Ž1"cY””É×’†pZzŚčč&ŅN^Ź"–¤-ęķ³ū¹XwÅūœńņ3£ŁDso;§ZM|„g¬¼”EüüŠo½ż³҈ˆaYf*…’öO_bdéq),M[Ģ’}’æ1 ŅyÆ_„ō”䍒]!„óĶa§k ×o[ē@ÉQ „źC4 SŻzƒźVßĶō :M:m)1IhŌŸ@KoیÅ0aņ?ĪérņöŁż>īÉ4÷ų­³æ² <8Œ®Į^ŗ{üŽŃiƒŠØ4dĘ„žļ’·źꛐ0¼k’ƒµś mB_’˜‡‚ƒōŌw4ńŚń·}ž‘,H]Äē¶=Ļ®Ūųé×H‹MfQR&U­u¼Vņ–÷N?x&­/?ö«r–ńŽ…Ć>±D‡FräŹIŽ_;ćó8@¤!œųÄ_q½„†7O½7e¼A--ߊÉ2ŹO¾Fļpæ·M‚«xrå¶®ćOē¦.gS*•ü۟~źS1Ļ×v}Ž]Ė·RZ_ÓåDÆÕ±.Ƙī”^~²’×Xķ6Ÿqž_’$+s–MĻPŸĻµŸ«)åŻ ‡½{„BÉÓkcmī VęQRq†²†k”5\ąīżK“j ’śĪ+SĘ/„Bˆ‡“ÅnōŪo›Łj &‹ŻŠF­”®½‘‹uW|&’ął€iģn!=.ƒ.„”[&Ō]-½zjFbĶNHG£RsŖņ‚Ļä<§Ŗ.²½h#i±Ó+?;zõ”Ļä c ‹ĖõWYŸ·’äčš{ڼåg•­u&’ ]ͬĢYFdHøOĄįtp°¬Ä§\Ļåvq¢ā,ksW}'—/„BˆyĀ5ÉäÜyĖMšLž?»łY†ĶF*nV3hĀérasŲ0Ū,d'¤³&wÅ}W§jÓ1Cć¹ĢÄ]c *•g’Ÿ•ĄWv~‡Óɵęjz‡ūq¹\XģVģaĮ”ģZ±uFbBų’Ą<ät¹¼„é·ėź%;!Š`–!+7:¹ŃŃčmW)UhÕ‚4Z‚4Z2ćSOłŁ­Zū:f,ŽØPOY|ļpŸßv·ŪĶ'’Œź–ĢšdZ{żĒ6^ަ7Œ½^æOł™R”$H£E£R£ÕhYœ” L¼öž‘Į kūLÖQ@ŹĻ„Bˆ…*T‚…ß;ŲAcåģ£cwŪ×ä.Ēérņć~5įĘx–LŽo6‡ēˆ^£ Ų§8»}ŽS•¦/Tā·D|Øńk_™S„J©ā—žžśĪ›śßļߊ IDATć ™$ę!›Ć6įnž8%X˳–²1 ‘q&Ł·oJ3ÕćwC§ńœYk².?»}ó¾ÉXlžĖĻFo)½—˜Į£…HIš0ŃtR~&„BTJQ”ō LhKŽNĄķvc»aŹšØŃļäīmß ÅŲ~LS324"`Ÿ'W>ŠÕn›V 6,zB5'@Jt"#£ž=”ĀCĀ€Ą7”¢'‰ēnŒW]!$0/šüĆĒ„ić’¦ēń©O3`ālõeśŒƒø\N¬v»•ģ„t6¬™•øÓÜ`f*®~ü}QŽ%9#ćųņŽOc³Ū¹\_AĻp§»ĆÅn%,ŲĄ³kvĶHLB!„Xv,ŪÄOæļs#!;1ƒäčnö“zO2ZL¤Å&Ī ÉwēüäčDr2¼›+OĒų’ĘčŠČ€•·ŖļhĀåv±~q1W›*1YF}ŚóS¤Ÿö˜­…ėØļlĀvĖ J1aQ,I[ŒÉ2Jē`7#c›ö„ǦL;"$Œe™K€é'2&c±Y  #H£õ»äSˆ…Fó>Hē=bęvAOłŁx¹śŹœe8].~vš5Ÿ5žć2āRļo°€mģćą Ąåg+² 1č‚9Yy~ŹńĀ‚ Œ˜׎Żį»öåY…(J~wāŸe·¾¦B!ÄtYlV ÓóHI¢„·›ĆFLhńiøŻp¤ü#oß²†ėdÄ„ņ×O~‘ŗö†FGŅh‰ !+>ÓQ†tŚ 0Mļõ‡G ›ä$fšĶ§æBļp?»•?ž~ß³‘S•ټd æ÷ė“öu0dF„RIJt"v‡ć×ĪLėõ£C#łĪŽæ¤©«³ĶLXp(9‰™hTjž|ī wĆ+×X½č^Śś5mõ ‡P)•D"ČMĪņV č“AÓ»šI“õwĶ·Ÿż­½8œ”›p\” …$ę! ā#bh@jLnÜŽćRĀ‚ ˜mæ“€Ų±ćaī6Žéčń”ŠE‡.u{|ÅV” Å“qį1“õuNx<56ų8ėģŁ  s Ūļ81įwķžĢD[!„®aóoŸŻĻÖ„ėČIĢ 8(«ŻJ}g%§½Ē0\Ø-Ü,ĻZJ~ź"ļĶĘA––Š=ŌĒS«wŖ7Š9Šć9zŁ8čs$ąķ\næ9ö&;ŁLBDł©‹0ŽrWĄ44”RōĄåct öPœ]H|x Y iŲL–Q®6UqüŚ:z¼żĶ6+żĘAļ œ[żģąoy“h#™ńi„źCp8“õur¶śåM•Ž~]-üöų[¬]\LvB:ś 6»³‰³Õ—øŅx·|Āgo‚ž‘A†G‡ż_·ĖEæqŠ{ƒėVļ^8ŒĆé #.•EI™Ø”JJ*N|…˜ļ$0O=¶| æ-yŪ§ '1“Ō˜dŚś:½#f‰‘ń$DĘśüćž#s“=įŻÉŚ©ń ņāĀ£Q)•SWÓŠÕŒĆé`ķāb®4^Ÿ‘-H]DX°Š¦źi½žÖ„ė©i«÷®ł÷ÄCQz>f›…–Žvąć3c³Ó)o¬ō#Ņ©ņ³HC8”z’Õ B!„˜nv·ņ›cœ²Ÿ7ēkĖ8_[°OUk÷Ļ-½ķÓ:Nø­Æ“_}ÓoŪų1Š·Ēq¹ž*—ėÆN96ĄłŚRĪזśmėą§ŽÖ8•-uT¶ŌlæżZųēŸģk¶Y¾7£V3oł`Z1 ±H`²Ų­dĘ„ńĻż­}XlV¢ ¤Å&ćĘĶĮŅoßK7ŹÉMŹā/w}žśĪfFĢF4j5Ń”‘¤Ē¦Š=ŌK\xĢ•`™mz‡ūIŽNäīżKŗ‡śp¹\üś˜’#‹ĶŹį+'Ł]¼o?ū5ŗŗ5¢P@”!’ųˆlū“³µA-’‰ÆÓÜӆÉ2ŠABfBj„j¬üĢ“)mØ`]^1ŸÜš«r–Ń72ˆZ„&Lo +!¾±Ź½ęŽĖĻZzŪIŽNąļžy™Ī¬+.—Š5Ų3õ“…B!„bH`2Ū,üśčŲŗt=ÉŃ t!Ų6®·ŌņŃõóÜģiõö½ŚT…ĖķfevÉŃ hÕl;C¦aŽ»x„ށnž\łØw§~›ĆN[gĄkĒżśŲ›ģX¶‰ÄČx’£¼g߂ē8¾ Ū&Õ'Ɵ£g؏U‹!!2–ØŠHœ.'&‹™ĖõW9yż¼ĻdŁh1ŃÖßés—Ü«‡_gcĮj²āÓIŠJĄåvŃŌÕĢŁšR®7×xūµ÷wńźį×Y—·’“Ųd’£q8Œ˜Mœø~–Ņś >³łYćĻ2ł/?s»Ż“õwśŻł÷@é1l;ىéĄE¢V©½{!„āįwāśYœĪ™ŁŠųaSZ_ĮĶīÖ)7BĢ=IĢS]ƒ½Ó.Įŗv³šk7—×’čż_z’Ü=Ōėó÷@z‡ūłżGūü¶½Vņ–ßĒ«Zė|JŻ&sµ©Š«MU~ŪFĢFö?4­qšŗ[iźn Ų~ūµžāŠļöu8ß«ŻĘžĖG§“B!>ējü—Å/“|BüšĆ¹ćž( V¬XĮ·¾õ->ó™Ļ TŹöFB!D ņ))„ā¾:vģK—.å/žā/dņ/fœŪķęņå˼ōŅKsįĀ…¹I!„x`I@!Ä}óć’˜Ēœššš¹E,W®\aĖ–-üö·æėP„Bˆ’$„BÜßūŽ÷ųĘ7¾Ćį˜ėPÄb±Xųüē?Ļ+Ƽ2×”!„I!„˜qśÓŸųß’ūĻubūŪæż[Ž=:×a!„I!„˜Q]]]|į _ĄårĶu(bs8¼ųā‹ŒŒŒĢu(B!ÄCNB1£žłŸ’yŹIWP°ŽŌ%YD&D£3čg)21øŻ`1ŽŅߎKKev‹-`ß®®.~ųĆņŻļ~w#B!\’B1cŚŪŪyõÕW'ķ³xķR–=¶Mf–¢óUńīõ\žą4 e7™ü÷’w¾óļ:‹‘ !„&Y „bƼūī»Ųķö€ķ…ŪW²ņ©M2ł3B«bŻóŪY¼®0`£ŃČĮƒg1*!„āĮ% !„3ęŻwß Ų“OŃöU³X(ŠwÆ',&"`ūdæ—B!ÄB" !„3¦¼¼<`[žĘe ˜Å`Ă”P*ÉŪP°}²ßK!„b!‘€Bˆįt:éźź Ųž2‹Ńˆ…f²ßƶ¶¶YŒD!„xpI@!ČčķķÅétśmSŖUhõA³‘XHōa!Ū°ŁŸ „B,’B1#GĄ6„R>nÄż5Łļ˜Ūķžō÷S!„X(ä™B!„B±H@!„B!„X$ „B!„B,’B!„B!I!„B!„ €$„B!ļ¢P(¶¹qĻb$BųšģwSˆŁ !„B1ÆDFFl³™­³‰Xˆ¬£–€mQQQ³‰I@!„BĢ+‰‰‰ļ“Ś-6ŒżĆ³‘XH:z¶%%%Ķb$BL$ €ūhŅ©>sHŹĻ„BĢgZ­–äää€ķ „Õ³Xhź/×lĖĢ̜ÅH„˜H÷QtttĄ6›ÅŠŪ-Yq’XLę€m111³‰B1ūvķŚ°­źōU†ŗf1±P4–ÕŅŻŌ°ż‰'ž˜Åh„˜H÷QTT:Īo›Ėéb°³o–# I[OĄ6)?B1ß=óĢ3Ū6;%æyŸĮ.ł.&fNóµzĪļ;°]­V³{÷īYŒHˆ‰$p) 222¶×_Ŗš½`Ă3ŁļWVVÖ,F"„B̾]»v±xńā€ķ¦A#^y›KļŸ¢Æµ§Ż1‹Ń‰łĀn±Ń^Ū̉ßä£7Oś{ō¹Ļ}N6sN=×Ģw»w了ڒ:³ŗ‹•d<’KLjü,G%ę»Ę²Z:ڶKöY!Ä|§V«ł—łž{ī¹€}\'5g+Ø9[1‹‘‰…H§ÓńŻļ~w®ĆB*ī·ÉŹĻ\NĒ{€ž›³‘˜ļšŹė8’ēćŪ•J%{ö왽€„Bˆ9²wļ^ž~śé¹C¾’żļ“šš:×a! €ūmÓ¦M¬\¹2`»ÕdęČ«ū8óÖQ:n“b•Äq»\Œ›h¾Ž@Éo>ąō›āt8öńʼn—Ŗ!„óŸB”ąõ×_§°°p®C ŲK/½Ä·æżķ¹C@–Üw …‚žš‡lŻŗ5`·ŪMcY-eµ³˜Xt:ßūŽ÷ę: !„bÖ >ųąžzź)ŹĖĖē:±Ą|źSŸāÕW_ė0„š’ €Y°e˾ųÅ/ĪuBšżļŸōōō¹C!„˜U©©©œ>}š^xa®C „Z­ęūß’>o¼ńFĄSĮ„˜ ’˜%?’łĻټyó\‡!°Ļ}īsR~&„bĮ įĶ7ßäȑ#Ļu8bŪ±ceeeüÓ?ż …b®Ć‡,˜%†·ß~›ēž{Ž“'OĪu8byńÅ„üL!„Ą39»pį.\`ß¾}:tˆ––z{{ē:4ńR©TÄĒĒ“››Ė“O>ɳĻ>KNNĪ\‡%D@’˜E1119r„o~ó›üģg?Ćķ–ŻžÄż„ÕjłŽ÷¾Ēß’żßĻu(B!ÄC©T²vķZÖ®]Ė~š, f³yŽ#›°°0T*Õ\‡!Ä“I`–iµZ^yå¾ō„/ń’ų=zt®CóB”ąłēŸē?ųŁŁŁsŽBńĄÓét²V[1ļI`ެ\¹’?üźźjöķŪĒĮƒ¹yó&ķķķX­Ö¹Oƒ.`¶Zhém§²„›Ć>aÜP½¢Œ|¢ éq»Ż˜mŗ‡z¹ŃŃÄ'Öķ&#.•’xļUz†ś(Ī."6<š£WOaæe¼ –‚Ō\R¢ Շąp:1YGičl¦¦­—Ū@jLKŅ{ÆI£R³kÅ6ļ8‡ŹŽćv»P*”¤."=.•Ü`²šiīi„²„§Ėé}^azÉщ½zŠœ„ r“³ ęHłIz†śeizqįŃčµ:,vĘAjŪhėļœšŽč“A<’¹„ÄČxōŚ LV3]-\o®¹ĒŸ¦B!īI!„xčéµ:¶.]GS\* ±č“AŌ¶7PRq6ˆ/=śiŅb“p¹]ø\.Ō*ĻĒąŠč’yäæ½“a€ŒøT¾ųč§Ņhq8XģVpƒ.H‡Z©Āåva±Y¹PW†Éā)ł/ĢČ#/9‡“×Ļyqį1¼üų‹t!øŻn,v+j•Jͦ‚5“ō¶ó‹ĆÆcwŲIŠJ`ėŅu>×vėß—Ą›0½/ļü,ń18]N܀Z©VÓ;ÜĻłoMĆ,NĪfeĪ2ā#bČOYäļlĶ%z†śXžµ”O¬Ūfģż°Ś­i<ļįcĖ·p¶ś2ļ^8ģ}^|D _Żł"}N—³ĶBpžu‹‹©i«æ·¦B!īI!„˜72āRhčjępŁqŗ{±Śm<±b;i±Éœ©¾ÄG×Ļ34:‚ĖķĀ aeö2v­ŲŹsėžäg_óŽõųņ­hÕŽ<ż单Ž;ź*„Še™<æžInt4NYöækÅ6ōZæ’h7«½ć„é <µś1 Óó(Ī.ä\M)WÆQ׎ĄW{‘ –š+ļXć•Ļ®ŻE|D GƞāBmĆf#n·'1°”`5[–¬eĻŖüīųŪ>±ä$f²’ŅQ*[ė0ž;’Ļ­ŪĶØÕĢk§ß§„·‹ŻŠJ©"!2–ēÖ=Éś¼•Ō“Õ{'÷{×ī&DĢ{p¾¶ ‡ÓJ©$5&™ĻnŁ{×??!„BÜ_²  BˆycŠ4ĢÆŽž¦īVĢ6 .· •RɲĢ:ŗxļĀLCމ“Ńlāųµ3ŌwŽ$#.…ą ½w¬˜°Hz†ū(­Æš)§wŗœ”ÖWŠ;ÜOBdܔ1„Ä$r³»•+×}Ę69rå$żĘA‚µž×µŚmōé7āt9q¹\Žæ÷MŲuš 'ēP׮ȑ+'ń. 69pł]ƒ½ä%g£Rś~Ģ*;ĪÉŹóō÷ćt¹pŗ\fä£V©y’ŅQź:=•cףÖ×ɾ žĒxå@˜Ž@F\ uķœ®ŗˆĆéė»…C„%wšB!Äl’€Bˆy£©»Ågķ=@ˆ.&ˆ–ŽÜøż>Æk°€HCø÷1³Ķ‚A‚J©šŠ_­RcŠ…ųŻ7ąvN—ƒ.Z3”­{ؗ}ēŽUœžrœqŃ”‘Ø”JZū:öéģF­RŖ7ų<>^]p«˜Š(ZzŚü5ąyo¢B#ˆūos€žŪ±…B!ÄB"K„BĢž&äz­š,ųģf’åé ‘±hTOүݬf{ŃF¾śŲg¹Ž\ƒqlˆ.˜Āō<‚ƒōœŖ¼0eL—o\eDzMüÆž†ĪĮMĆ Ž0h¦wøŸ¦īV¬cwݧC乞¼”l¢C#żöIŽN@«ÖśŖ¼Ą‰ėē¦|ż£å§čī'?u!adʧŖ A”P`“Œņ›coŅŅŪ>­ė ›ˆėµś€×c±[iėļ Xńą;ž'IqKõĆķŚū»0x7Nt8~ū:œNæ !„bīI@!ļ6¾F½¬įū/›ÖsV/zµJů޾é)įׇ UiP*•XģVF-fo²`*nÜ\i¼Ī•ĘėŽĒ” %į!”ä$fņģš]Su‘“•ē§õœÉĒó¼?Æz=ą]ż[™m“­ßö[öQB!ăEB!ęµĮQĻQx!ŗą€}г‹XœœĶ‘ņ“ō õa²Œ¢RŖųśī/ŠŚŪŁfĮl5{žk³`“˜čźó. $Loą… Oq½„†s5„ŽĒ]nĘ!.Ö]a}^1 ±ž«š¹ž±£ż‚'¹žõy+ɈKåżK2<:2iŒ¦ß •Rŧ6>Eļp?‡ÆœÄhö\sxpØßń" “¾žB!ęŽ$„BĢk&Ė(݃½ä%ē`Š…`“˜|Ś• %ėóŠIŒŠēݱļK*N³4=ÄČ8‚ŌZ“j ś =•ļĒfm{ƟxĒ{ÜąķĢ6 9IØT*ĪהM(É×Ŗ5„źCż>ßī“” C£Rcw~\nß7ŅŃb¢(#Ÿćg&LŚÕ*5ņWŖ7šęé÷¦|nv·°©`5«=ĀA?;ųg'¤S”QąM`t ö`±[)LĻćȕ“^uī#S¾¦B!ę†$„BĢ{Ē*NóéMĻšĶ§æJÅĶ*śFp:éÉKÉ!9:‘²†kŽ;ś«-'DĢO>ų5mżŽqŌ*5ĮZ‘†Vē>BqvėóVRRqĘļėŚŖZnPŗˆÆļž7:š0YGq8„ź ¦åaŠsģź© Ļķź'12žÆ>ö"7:±9ģ\i¼Ī i˜’Š3<µj'÷ĢĖ\mŖbĄ4„Ūķ&8HĻŅ“<¢C#9UyĮ[Ž?™ŖÖ“õw²ué:Rc’hģjĘh1”QiˆdyÖR\nēk= —ŪÅÉkēxlł¾±ēK”5\cÄl$DBf|*™q©Ó^!„BˆŁ% !„óŽ•ĘėøÜ.¶n`ķā(ųø“Žb³rŗź¢ĻŻļÜä,śG|&’ąY/?l62l6Ņ;ŅOqv±aѓ¾ö›§ŽeWń6–e“äÓ6>™?ź'p ōį!”¤Ē¦› xŽŽ4 sŗź"6‡M«ŁX°Śēy&Ė(%§ł°ü£i½7N—“’:ņOo§(=Ÿģ„tŸö¶žN––Š1Šķ}¬äš'į±>;–mņ>Ž;ÜĻoŽż‘On|jZÆ-„BˆŁ„Ą“PżWhœļŲŚŚJrrņ\Ä(„ā!ŠÖÖFJJŠß6µVƧžæÆĢrDži“t!ØU*LV3&Ė(n·oižē·½Ąāä,Ž8łgź:š&Ó¢ fCž*¶n ¤ā ‡ŹŽOėµĆ‚CŃi‚pćĘj³2l6NłµJMxp(J„’橄»śz­Ž]0J…’Qėč”ūLF‚šP‚4AŲ6Œ–Qģ~ŽVōöW(%H£Åd1OX^1›\Noüæ?Ųn2™¼o‚Bń Ł¾};%%Žm@#0 c’ėæåĻCĄ`F `ģ€pJ€BˆÅj·\³?®¤ā4q)¼“õ9\nV» »ÓĖå"H£EÆÕž;ŽgŖ/Mūµ‡GGfņMłnēp:čŲ>¾1įLpćön28­žī;ė/„Bˆ¹% !„ā6-½ķüė;Ɛ•Frt"]0µÜ`uŲ0[Ķ“ōvPŪŽ€Ó%ēŽ !„āį !„Ā‹ŻJeK•-usŠB!ČPĪuB!„Bń’·w§ĮQœ÷¾Ē’f“o$ƒ@€YlŒńnvŒq¼$Nl®sŖˆ“ćJUNN•ļ‹TŽåŽJU*)ūVŻ:IŻŖÄ'©œŪ‰cēÄIģ°Ųxa±Œ³IbIIhI³Ļ}1źQO«{4Z@ˆł~Ŗŗ¦§»ÕótŪUŌ’’üŸēpõ‘   `‚2Ņӕ“™­ō4žY×/V`fĢŠĘU÷ئb‘ņ³óbĒżĮ€Z®\ұ¦:ķÆ;¤`(÷w߯¼U³‹J%IæŻż†Ī_¾˜šw¾v×£ZQ¹T’ōī”÷µæž$éօ+ōÄŗ‡m’&Ėš©§æW ­ŚWW+Æß7ŽG7ŒŃœāR}wó7•ķĪRg_—Ī“ž—7ąS–;SyٹZPZ”ŖŁóµbAžóŻ×Ž„c›ķĪV¦+SééZU¹,aĄ•įŅŖŖåreø”‘ž.·kųŸķŒō ådf«oŠ£ŽAOÜß„§„)/;O•³ēkaY„ī¬Y£_īųŗ<=“’2Ą“A€1śŅ-(Ū„w>Ū­½Ē÷8Ÿ™„}čYUĶžÆ[®ŠggŽĘ÷|źźļŃŹŖeś{ķNE"Ūß©©X¤,w¦N·žSułM¶×Ōž>Ŗw?ßö\nV޾¼ö!ݶh„¾~÷cśÕ{ƍķAĄ …ĮŠŒŃ‚Yņś}śčÄAŪó^æOūN}&Iš7³lÄłōōt9wB…9łŗiö|ĒßY]µ\įHXĒ/4Œ«¾AżyßvµuwhQY„ęĻ×}Ąc”åŹŌ`ĄWŚoÕ|„UGOŖÓÓ=ā\zZŗŽ6žTD­ŗi¹ķß»]n-W­śę³ņĘ?~?ėš¹c’¤›ę8'ĄcŌŃwE…9*-,q¼¦­»Cæßū–m•@zZšŗū{tžņE­˜_c»zĄ²yÕŹt¹u“ń¤Ņ”6”ö^źj—$•Ļ˜=”ū€écōiĆae¤§ė»lÕckŅķÕ«US±HsŠK•™5ś Ņ¢ż‘Ę“ŹĻÉÓ¢ņŹ—¬Ŗ\¦`(Øćź”–6±@ļ@Ÿ$)'3{B÷Ó“0Fź>WnV®øłNŻ»|݈óŽ€O-WŚōiĆa>{\ö  IDATŁOņ÷EćI=~ūCZY¹L -ēbdzܙŖ™W­ŗę3ņüno`h)Āl¤4ŒQDķ>ś‘>8ö‰J K4#æX9ł*Ź-PQnJ gjĮ¬ -œ³@óf–ėķO’i{·_g/5iłże’ŽŲœĖę-–;Ć„#''„½īŒč?÷‰ę,7>ŒS(V[w‡Śŗ;Fœ+-,Ń÷}Nw/]«OPwÆķ=Ž4žPuy•ŖĖ«TßrV’“Ŗj¹üĮ€N^ßģ’Vʰ 0)÷Ós0¹Y9Zæā.ŻrÓĶ Æėč½Ą/-M3ĖÆ;ŽT§P8¤ÕC÷ĖvgiIÅB¼Ų @pröœ¬IĆs€ŌD€1ČHĻŠ#k6čwz­1~ߕ‘įxĶ€oP -ētóü%ŹHĻŠņKäJĻŠ‘s'&­Ķóf–I’.÷Œ¬T©ƒcąģ—ĒŪÆYE3U˜“ŸšŚł„s%IWśŗ^w¤ń„²3³TS±P«Ŗ–Éš©®łĢ¤“7?;Wk«W+ dž€ŌÄŒADl8¬+ļŃóC»Ž~¤Ö+—åńöĖš+7+G³ Ktūā[tӜłŗÜÓ”‹­ ļyāBƒ” Ö-¹U‹ĖoŅįsĒ ‡’jOANž*JŹFw»Üš[2G÷._§üģ<l8ģ8H $£‡?Tqn”Ö,Z©gļūŠću—{:ōŹū’ķø  Įš©īāi­Ø\*I::†Ł’×VÆÖŚźÕŽē#‘ˆjOŃ_¼›ō=Ą‰cŽ„õĘĒokϱO“dīB•–(/+WRDƒ~Æśūu”£E -ēF,½W{ś°r³rGÜsļ‰źčėR$QC˹øs­]—õž±}ŗŠŃ2ā˜_ĄÆž^»Ō¤®žž‰=0ø!`œŚ{:ÕŽÓ9¦æłšÄAŪćMķĶjjo¶=×ÜŁŖęĪÖQ$Ā$€¤¤¤¤¤¤¤×T7€ŁķÕ«•žž®ĆēNČšėóKējnÉ]źj׳ö‹“ÜB*Ø`2Ņ3“xīM*Ÿ1Ūöü“wlŅWļܬܬģq’Ɗʄśź›µ¢réøļq--˜U”…e•SŻ `A€ ČÉŹÖæ>ō¬\}ŸķłcMu:ŚxRPpÜæq©ė²Ž6žŌ„®Ėć¾ĒµōÕ;Ń77<=ÕĶ ą*zżĆæNųŸŸ=¦ĻĻ›„Ö€TF0mŻUs›²3³“÷ų­¬\Ŗ³*”—+0 –ĪK:ŅxB¾ĮW1³\ĖęU«(ÆPY®LBuövéäÅÓjķj‹]—Ÿ“§{—­ÓŁKēÕŽÓ©ŪŖW©“°D—ŗ.늧GsKę(Óå–$•ĻŅ#k6H’ŗū{“æī$éže·+?;Oļ~ž~\ņ³ó“²j™ŹŠg)'3:<Ąćķ׳Ėu¬©N”p(®½++—źxS.t“H’VV.UÅĢrķ:ņ”•UiQy•ņ³sŽDŌŽÓ©ĆēŽ«»ægijĻ,˜”••Ė4#æP9™9 †‚źčÓéÖs:sé|ܵVŽ#Æß«õŸkEåRU—W)Ū„ށ>µvµÅU6TĢ,ÓŹŹe’¤‚ģ|eddÄŽ‡$żóšŽøg× Ą“µfŃJĶ,˜”šŠjUĶž'_Ą§p$ Ø«WėĮÕ÷źåw_U{Ogģo\uƾtĖż’$Ļ`æį ²ŻYŹÉĢ֗n½_ļŌīև'H’r2³µ~Å]Ŗš=Oå3f+Ė%I:įŹŌģ¢R­Y“2vßŅĀ­_q—$é|ūÅXą¶E«4»ø4.P5{¾ž{šeŻ/ H’Ü.·ī^ŗV-WŚōŸļ½*Æ?:i`łŒŁZæā.uyzb €šŠEZ[½Z³‹Jµ|žb‚łƒåeē=ē=śŻž?©”õ\ģwWU-Ó’øļI„§„Ėė÷iĄ?{ö +ļÖggŽźĶ’»ž®š5ņś}ŗyĮU—ß$0 H$¢,w¦$éŽåėōĖÆČškNń¬ŲóĢßwżˆSŒ`ZĖĶŹQq^”~¹ćw:¹YE”™„»—Ž®‡o¹_O®{Xæžē$IÅy…zhõ}ŗÜÓ”’ŚõGuy†{ČgĢŠ77>­‡o¹_ŸœŖ V«fĻ×éÖszļš^µuwČš)?'O;|ØÜ¬żū—æ„ś–³śĖž’¤`‚ńžiiiŚrļŹt¹õ§O¶ėhć ł‡E¹zhõ}ŗ}ń-zpÕ}Ś^»sŌēÆ.ÆŅ«üY'šźŽ„åv¹µ²r©¾v×£śŚŻź’¼õ …Āa„§„ėÉu›äõūō_»žK$HŃj„§ļyL·-Z„÷ķ‹K˜Ģ..•/č×¼ż+]źj—$ĶČ/ŅWīxD5‹tĒā[µ÷ÄoŖÓKm$IĻm|FEy…śŁŪæŽŻ'’`r0 `ŚŪ^»S—/*¢ˆ$Éė÷i÷яt¾ż¢–UĘzŚĖŠgĖšé`Ćįøą_’:ūŗt“ń¤Ü.·Šr āĪuyzōŪŻoŖ©½9¶”Ÿg°_W<Żźč•$łƒ]ńt늧[½ƒǶV””iF~‘Žœ;”ŚÓGbĮæ$õ ōé­ż;äõūT3waRĻžĮ±}:vž”Ā‘°¤h5Į”3_芣c*Ī+RÅĢrIŃäGzzzÜ0ƒĒŪÆŚÓG$I³ KFüĘæ ž÷ń×ļJ’ęĪ,“$łžŲó‡"Ńä‰ńżŠ§;ößL*ÓŽéÖFŪćŚ[T9kžf䫵«M§šOėGÆ’_Ēū”KRlL¾įl[SĀ^ż±˜S\*Ij¾rÉö|8Ö?ģ%-FsęR£ķńó—/źöźÕ*É/VS{³®xŗ?{~ōٳ,æėńöĒUŗ<=Š(¢Āœü¤Ś ¦ Ą“Ž„ccå­ś}’¤œĢį ¶“°Dw,Y£¹%s”™%w†K® —ņ²rccŪ­üA’¤µ77+GR“‚ĄÉĒ'?Mś~ż6“JŠM~hNfägēéΚ5±É]é.¹].e¹2csX9½Ūˆ"¢S€é…`Z …BŽååĘ õ™®h`?§x–žmóV¹2Üj¹rI½]ņż ‡Ćš Ø0·P·™&ö»ŅÓ¢£ļ|ÉI*8U&cĻ]„ '3[’žåēT”WØK]ķźč½"0 `(84ybXėWÜ=)m×'€iĶķr+ĖiPgfDƒß“7ü¾åė”åĪŅow½”SͧG\æaå=W·±’üCyv¦s‰EI™r³st¦õ|ll擂œüóHŃ÷"I~Æ$imõ*ē靦]Ś;“ʁٲy‹“~0=1 `Ś›‘_d{|Nń,IRæ7: “°D`Ą6ų—¤ā¼ŪćÉHKņŗžžh°nhŠģkwYßÜųŒ"‘Ńkģž}vŃLIRæ7:Ō thræ/šNé>ćĒų®7$ÓŽ]5kGĖĻĪӒŠ…ņx£³õKљśķfł—¢=ņ5‹¢_’ęu_’ćz«¦öf…#aŻŗpE¬—ŽlF~‘f—ŖõJ[R3ēß±d2Ņć’9weøtĖM7+ «©=:ćæ/mē¬Ā™#ī‘‘ž®••Ė$Iicyxž`@® ÷ˆ ĄŌb`Z GĀZ[½Z3ņ‹t®­Iƒ>ÆJ ŠuėĀŹÉĢÖßkwĘzŅO\Ø×’¹ õü—¾”ĻĪ|”ŽĮ>¹3ܚ9t½{hČ@–Ė~2@;¾€_½}Ŗœ=O[7|]-WŚ ‡ōž±}¶=ųļ€6֝KÖč>ž¼źšĻاæWiiiš‘_¤ –Ź•ž”NLź÷ēĻ,׿=śœN^hPß`æ sóµ²r©f•ź³3GåŖ8u±A÷ݼNĻÜūøŌ®+}ŻJKKSq^”VW-WĮŠlž™ī‘I‰±źčķRå¬yśĪ¦Q}óYł>}qž”:ūŗ&|o0~$ÓŚ€Ļ«?ļ{G›×lŠ’[×ĒŽ{ūõĻvėćĆ3ꨒ\E¹ŗ½ś=²fųŚP8¤SOėhćI={’WTœ_$µ%߆7>~[OŻõؖĻ_¢åó—H’>8¶ß±’oŽ“g°_w֬ѯK㫺<=ŚńÉv9w"©ßžżŽæhćŖ{ōŠźūbĒ|æ>>ł©žqhOģŲŁ¶&żõĄ»ŗ’ę;õąŖ{cĒ#‘ˆĪ·7ė­;ō‡’E3†–œˆ÷>_3ņ‹“pĪU””I’Z®“‘`Š„)šČśtKŹ””-i®¤}ʅ/^TEEÅT“0 477k޼y¶ē\™nmłßĻOśo~ļŃē4#æX?~ć?$E—ŲĖĖĪ•?ąWļ Ēq ½ŃóķŹp) Ŗo°ßq6ż±Čt¹U”WØP(v0šüģ<åde+‰ØoŠ“ōź_æūĖZ[½Z?~ćgņxū•åĪRan¾‚” zśūNX˜[ ,w¦B”<Ž~ł‡†1L¶Œō ęäĖår©»æ76\āj‡ĀśĆ’zŁń|ærs“¦Ąõ`ćĘŚ³'–Ģo–tNRƤnI]CŪÓ~¤>Iż’$y%ł%$%…ØÜ0|ƒš Žz]$±9¢üĮ€Ś{:Ēō7o¬L"|ŸŚ{|I]Ū;Š7įßKF(RW’äæg0>$ÓÖéÖsŹ»žj.v“*ӕ9)• 5L[ļ~žĮT7aŹģÆ?¤żõ‡¦ŗ`a@R R R R R R R R R R R R R R R R R R R R R R R R Ą¤(,,t< …Æakj^Ÿć¹ĢĢLåää\ĆÖp}"˜ŹĻĻ·=‰DŌף}[„TŅÓŽåx®¬¬Liii×°5\ŸH&ĶüłóĻ5=} [‚T“č’Æ \Ɩpż"˜4>ų ć¹ŗOŽŹÓÕ{ [ƒTŃŻÖ©3µ'Ļ?ōŠC×°5\æH&Ķ“O>éx.ą čżß½£Ļ5lnt½Żśą• ē˜xā‰'®a‹ø~‘Lšõė×kńāŎē{.w青÷¦źö}!’ ó¤mĄh¼žA’ąsķųÅ'¬,Y»v­n¹å–kŲ2®_®©nąĘįr¹ōć’X[¶lq¼Ę7ąUķß?Ņgļ|¬¼¢eęf]ĆāFąė÷j Ē£H$2źµ/¾ų"0„`R=żōÓzłå—µ{÷ī„×EĀ‘hĻ­óäķĄ„<żōÓŚøqćT7€ėC“*--Mo¾ł¦Ŗ««§ŗ)HaĖ—/ׯżė©n×€IWRR¢æżķo,æ†)QSS£ķŪ·«°°pŖ›Ąu…ąŖX¶l™>ūģ3­_æ~Ŗ›‚²iÓ&ķßæ_UUUSŻ®;$WMii©vķŚ„mŪ¶iīܹSŻÜĄęĻŸÆ—_~YŪ·oWqqńT7€ė ĄU•žž®­[·Ŗ¾¾^Ū¶mÓSO=„¼¼¼©nnEEEڲe‹žš‡?Ø””AßłĪw”‘‘1ÕĶąŗÅ*€k"//O[·nÕÖ­[‰DŌÖÖ¦ÖÖVuvvNuÓ0Ķ̚5Keeeš3gĪT7€i…ąšKKKSYY™ŹŹŹ¦ŗ))ƒ!¤¤¤¤¤¤L?‘±ž ®Ė&ĖžØ%ƜMל51`‹ nމkĄ\Fą7Ÿšł|“ß,0Āąą łkŲrŚn8€øsvĘƒęńx<ɶL@__ŸłkH‰ž¤Ž„'8V4 `÷ćą*±Äąę kļæuB@klū>Ś?®K ŌČąŽißį€ŻÅIŻĘ–––14ŒĒĄĄ€zzżBCŸv½’£Uēl'4_ÜdģŌ×׏³é Y ‡ćężó*>Ą[>J’'“–D$5HpõÕÕՙæ­p ś­ß‡ ¤Ė9K—°4\–xŸģƒ}§}NJ»!ęż3ęōööNō9@µµµęÆ>EüDŪØ½’Rü$€vœŌŠR€Į`P{÷ī¬ē”PH|šłPæāĖ’Ē’ yßi@cóK:bœÜ³gĻä=ˆsčŠ!uww›y ģC¦Oc?Q@ĀI%ū*€XķĮīŻ»'ćy€ KĒ»Oюy#Č·&¬‰»Ž’»U¬³ 4.8räˆ&į‘€ÕŸžō'ó×~Åūv[2C$ Æąü‡%“Ō"I‘HDƽöŚ$?ØÆÆ×§Ÿ~j>Ō£‘=žA/ ±VŲm!IļmŪ¶M‘ˆu50Ū¶m3 (:žßųƒ6›]Ąqė’żĢ‚ļ'­3€ ƒzõÕW͇zßėoü›“Ö•FōÜ[—“nF©ĮyI'Œ?zńÅ'ē €~’ūß«©©É|ØKĪĮæ5 `ž Šq5€D˚+B’^7.ڱc‡jkk&&ė„—^2ź—äU|°°Ł¬vI€˜tÓėD€ę‰‚’vKj4žš§?żé$<&©ķĶ7ßŌńćĒ͇:eōūü[«¬Źü™!)mčKšeĖP4AąŚw Żš^I:uź”ÖÆ_ÆŖŖŖÉ{jRˆĻēӖ-[ŌŁŁi”Ō.ɧhĄ ¤E«̟Ęęڌä€5`;Ąnüæµ ą=IĶRtIĄ^xAĮ`p²Ÿ€”šŅK/©®®Ī|ØSń=žÖĶ:Ą)ą1 ĄØ°né¦Ļō”댭]҃’ŌÖÖ¦ŅŅRŻqĒ“ūøĮ?^Ļ>ū¬€qČ£įŽ’A ÷ž=’ĘfómFrĄHŒčż—āWā{’­UĘųƒ’ö7ųįسgĻNŅćpć ‡Ćzžłē500;¤hšoķż÷Y6k%€]€5ųw Ł0'^V4Ė ŽŽ^mٲE>ŸorŽ7øŸüä'ڹs§łP—¢qöhĮæu¼æu%ė€qC¤ä†˜‡“Ü.I---źééŃęĶ›'ć=pĆŚ»wƾõ­o)‰Åę^Im.鷖ž{”øüߜ °-’׊*ŅšJƾ]2ĄœpIj’“`hÓĮƒU]]­U«VMųep#ŗpį‚6oŽ¬ŽŽ^ćPHR‹āƒ’Aŏł·Ž’ŗÖ\ P|%ĄˆIĶC £­`”#ų$żRR«ń‡ßžö·õücÆ€Sgg§6mڤ––óįv ÷䄞^‡ĶiÉ?§UāX'”é»9 `’ę€_R¤Ÿ)š}P Š3Ļ<£O?żt<ļ€ŅĄĄ€üqš“ٌćÖŽ»'”ģ‡˜/4WŲU<,éWC×Ŗ³³S7nd8 „µµµiƆ ڵk—łš€¤Ėü['“«šÉyĒņixƒ1éŸy?ѪƤ€éŠŽ[“BRZ Šo¼”ŖŖ*­^½z,ļ€iÆ””A7nŌńćĒ͇%]R|¹æō6ńŸ]%€Ó†ĖŅ|޶T`†¢3vHZ))#ė­·ŽŅٳgµiÓ&¹Żī$_Ó×[o½„Ē{L­­­ęĆżŠ’Öqžę%’ŒĶ£įå’F[śĻZ %˜PŲ­ą4 ĄhōAIæś.Izå•W“nŻ:kÖ€ŠĻēÓ /¼ §žzJŻŻŻęS}Š®¢g.õ·’Ö}» ķ»žYæ[+¤į^ó÷ц›q¬WŅIK$åJR{{»¶mŪ&—Ė„uėÖ)#Ćī§˜žvļŽ­'žxBŪ·o7Ž(:Ł_‡FŽłwźł7—ž‰»%ƒ²_ž/©9$ēņó¾u“⇤ 5öؤbIåRt™Ą;wźü£jjj“hŃ"Ū—ĄtŃŚŚŖļ}ļ{śž÷æÆŽŽó© ¢½ž=J®ģߜ0’Ö ė ƒS7|¢¹ŒĻDÉc?¬č2ƒ’Ŗ$¹¤č*ƽöš<ØŖŖ*-X° Qøī“¶¶źG?ś‘ž{ī9ÕÖÖZO{$5+ě'ü°lęėfž“éż—ĶgŒµÜßīœŻd®”Ķ-)SRöŠ–£hÉ®¤n üͽžNcžĒ4īßl<‰’’ż„v/-Øho¼$s¹¢ąßųL4€]€ą`Ē©“~“9Ģ“±­¹Ąš0ö­×÷0ž“üKą“2€ub@óĖ3gJ\®p›>]6ŸvĮæÓ)> Ó1¬ģŖ¬±¬µ²=™$€uņ{óqóßYóļYŪc׎¤Ldł<§$@ŲrÜ)[b< KĆ/ĮeڬĖü™ĖžG+’O4žŸD@²¤*ģ†8%ĢóX7óõęž­æ5 ‘ØĶI™HĄųį4˾ue€D/,CĆoķ巎÷·KX'’c@Ąx%ZĄZ `NX7k o ųķ»’s[¬ūc6Ń€¹ęąßŹīAŒeö! ÷N2Į?Ę"ى’N‰»ćvÕń£Ķō?”Ąß0ŁA±Ż¤8ŗ-PcIDAT{ÖąÜ¼›7» ßn²?§„’Fėł'°“(`|:- h7ŌŻ.9`ō_õ^³«'JūÖŽ.°KąĻĢ’€ÉĢŠÉ$ģĪYƒ~»Iž®Jš/]½Ł©÷Ż.h·« HęÓō“LT¢€yߚHę3Q©æS¤¹Ś²S0ž(`—H“ɲoż-ĘŹšHT `—Hfsś­«āZʉĘāŪńÉś£õüŪ} £M hŽO69`½O¢ß¹*®eō=V‘CвßTB†ŌzcĪæ(_;‚ ‚ ‚ ‚ ‚ āĆĮ”Aj[]ūĶ/į¤@(jF|cES-7¶,AAAAAAä'Ɗ¦Znh¹|§ØõåŌCƒæLN}ėCAAAAAE}==ųĖ䔑s,}Źä+…mč7TųŠ%pč;Æ«.…}‚ ‚ ‚ ‚ ‚ ‚©}ēuÕAŸ2łBaöõĶŻ!5/6­Ļ:CźDAAAAA‰¾y;¤ęå®3DŃg}¾P}c„}¦õŻNŖn$|AAAAAE ¹į©äˆjŹź:–œŗå+iŲ7µš!µLN©i”y>$ŠAAAAA1^rE±o]Ėt_ˆB ʈÆO~ ¹Ā‡Ō·)©eś¬'‚ ‚ ‚ ‚ ‚ C0DH+\H}"ŽÕGß<%&„ Œ÷rĆJÉ>䊜ˆ"r§„źNAAAAAł‰¾!Æt‰¦X¦ėxśÖݤä§!߯9‡Üi}Ä”zQH,‚ ‚ ‚ ‚ ‚ ¢00uČ+1ACjZßmĎ)Vg¹ė &æŒörÅ]!®t bĖ C„ź!ēœä¬'‚ ‚ ‚ ‚ ‚ 9˜B1T芵\×>Åź#To©s2•©wżC^é k%%rˆ}¤ŹCĒ“P} É BAAAAA¦@n®ö“įC×r±g#—#Ō°Ė)XĖłČŁŸ^˜Śˆ/Gü0$Ģ•œ™Ģrüż SW½„–AAAAA„©0•ų”ÆŠ‘+³œŌ1äŌUźÜŒĀ” śˆrĀ]é#v‰r”cK}Ė9_‚ ‚ ‚ ‚ ‚ ‚0%R"_Tėõ”KģPČ,'W°ņÉWOSń ?ōõō0˜Z&G:®X=„Ī“„‚ ‚ ‚ ‚ ‚ "?ėż!–÷CLį ¹:¦„ŹĖõŖ§Ų9J-—)<@Œ?¤]†“E±o9^!˜;9ēOAAAAAĘ`ˆ"ĒėCJä`›ń¾5Ėūs. Ž7xÓlŒö1VŃWü0$Ģ•Š7_üŠGC„ź(ō-uŽr×AAAAA]Ę~©\r)/!ńCóшlń‚/‚O*ģc±©†ń¶xƒ·×µ”!”ÆĢ¾År}š½>˜O«V­·oß>ÉÅÅÅCŹSƔ!±‚ ‚ ‚ ‚ ‚ ‚0cĀ]ÉŁONNNvPPŠżū÷?•“““…’<=Ħ…>bŽ ü°Xś$Fōš1T1$ē‡T’sŽų1eŹ”Z~~~s¬¬¬ńcDcĖAAAAADQF_‘DØ|ttōU//Æ-Æ_æNWųȂ>>žiēĪW]æ~= ’‰BBˆ˜"$„č㠁i6z ¦ }%'߇9Õʍ›õė×oę’/Ó¢ BaIA AAAAAQ0U]ūbÆ{ńāEBóęĶļßæŸ ŚBˆ˜0"7/ˆÉCa™É8­s˜×%‚ˆå’PPĶ;·īwß}÷+ō?ŌjµBJ1$ˆŌGŸ}AAAAAD~aJ{¶\[»“““KHHČggē,Xs‘? ”VĄÖŲ;•½ķōBˆ.ļĶ“¾”°4'Ć>YÕŲ±c?=zō<„Ri%TA1ńC¬¬>y@Hą ‚ ‚ ‚ ‚ ‚ >4 Et !P±bÅŹ'Nœčknnn‰’ľ"&|ØĄÕ äˆBbˆf!4„Ą¹čŹż”™gWF*ē‡XŽswww»mŪ¶żfmmķ$Wč0&ś’—RŽ‚ ‚ ‚ ‚ ‚ āCF@”Pč4‹•Q( 8;;;»»»›ķŪ·ļ!kæ|ÄĀSńĆYImĆ_§·]_—¢+÷‡TŽѐWų%(""bBٲe?7Fü`‰‚čAAAAAA ŒĶ\B [ÆP(ØU«Võ7oŽ<¹téR’Äq„DµĄz©äębĖļ@ éšJz.äżĮßÅwuaďąą`Ÿ:Œ5ų!ˆ©ĆZQ˜,‚ ‚ ‚ ‚ ‚ ¢(`Ź$čŗö'“N”PØß¾}ū¶iÓ¦Kcbb^#/):’“%šĶOŠĪOŽ.–]ģˆ{›H&Aׄ ČDų∠€ŖC‡NmŪ¶R”ÄJ‚NAAAAALmĻ–“’ƒæĢĪĪĪnżśõ!ž “œ7/¦#ˆéBčōį‡Ą ŞĖżĮĻū!žJuāĉq®üŠ™(ˆģ$čŠ} ‚ ‚ ‚ ‚ ‚ ¢øĮ±ĖČūĮl'•’ƒæ¬bŊe_¾|łļ?’üóŚį­„<5¤<9ĄŪ^jZÖ ±=@tm ”i]—ˆ–²dɒĻ+W®ÜJ¤å:—I-*GAAAAAÄĒ‚>vq}=Aüüü¼mmm­Ąõü`{€h¼>„>r¼?„t )˜õJ”…¬i” R‰Ļł^ģis•Je¾cĒŽŁ–––BJj^Ē2ɦDčAAAAA!Ū+D2 :[[[[‡÷G}ś’‹äx}äBŪ³ƒŸÓCNBtÉ0XR9@Ų;ą b^B £ä¬[·®±½½}5­'~HBŽAAAAAĮŔQš¾łę›ę%J”°ĀR fŠöŅäh’Čń o%–čœšœńž Z·nŻkkkgzš+j "°žÄ‚ ‚ ‚ ‚ ‚ ‚F–7ˆ.O+++K ‹”ˆ{{äŠ,—ŹÖ2@Ų+DˆTų+šÖ‰å „`¶téŅĻŻł;Ōåża„ųAAAAAA„ ±¹ó—}÷ŻwMĶĢĢųžl¶'ˆˆ˜ęŁi @w,]‰F¤ÄŽāķķŻ© „ ?‚ ‚ ‚ ‚ ‚ B?Œµ­;999öļßæ„”Dčbz‚ÜDč:£@ÉÉĀF*÷‡X˜,eķŚµKTŖT©1g¦öž ńƒ ‚ ‚ ‚ ‚ ‚ C_ū;YŸ>}žiŃCJҤ„ØD–K…æĖ"šdīܹ-•J„µTEŠ“ųAB AAAAAQ( ½ņ_ŠZ­VˆKh{YƆ k•.]Śźõėףų/ģ•fZŽ÷‡ę“ iļ~ż„–iy€ČÉūĮ^¦+Iŗ€Ł_|ђæSSЦޗ®©ŽEAAAAAr(HŪµ”ū²²²²üžūļ]!žūƒ’ƒż­+ü•˜‡³L*–®øZŗĀa™0+[¶¬•““Sm‰ćh”÷‡)~T7‚ ‚ ‚ }P«Õøzõ*®^½ µŗ@c,bccĢĢĢĀ® AIöģŁƒōōōĀ®F±ćīŻ»øpį222 »*…NVVvķŚEļøbˆ)mŻśŲäŁĖ¾üņĖŖśŠ-~H„Ü0D ‹{šŸ”łŒ;ÖĶĢ̌žJNø+9ėłIģęĶ›7ˆˆˆ@LL ’’’666([¶,>żōSŌ«W¶¶¶¢ŪgffāŚµkpttD5 ŖŚÄȋ/pēĪŌ©Sööö…]½INNĘĶ›7įźź ''§Ā®ĪGĶ»w¤$(•JŲŚŚ¢F(_¾|aW(†ĮĒĒ–––…]•!33<ĄĖ—/‘ššŠ””€ƒƒÜÜÜP”B…B®aŁŁŁøxń"īßæ§OŸ"-- ¶¶¶ØU«Z“hƒ÷żīŻ;\ŗt 7nÜĄ«WÆ V«aee'''øŗŗ¢~żś(Y²¤čö=Ā“'OŠ“iSƒė@…Å”)S°téRĄĻ?’Œ€€£ö×µkW?~0vģXųūū]G]”,YŁŁŁ€?’ümŪ¶5پŒŻ»wŗwļŽ­[·šlßbl޼C‡T®\±±±ł~Ģ‚"((żśõ÷žyņä‰hŁ€€L›6 jµŸž9Nž< ›‚Ŗ*AyöīŻ‹¢zõźŲæ?>żōÓĀ®R¾1yņd,[¶ P³fMDFF¼ÆU«VaÜøqP«ÕØ]»6N:%ŁĪūyōčŗté‚ŲŲX¤§§cąĄ…]%Ā@Ų6pCĆg‰…Ć’ “U§N*0<ō_aNĮś«6Ū‘® ‚y@š5kVOŸ å·0A‡0ńńń˜>}:‚‚‚$GXYY”E‹1bZ·nĶY—‘‘Ö­[ćźÕ«P(˜={6FßU797f^˜sęĢ)–ēP܉ˆˆĄ×_ŌŌT8::⯿ž‚»»{aW NNNx÷ī`ß¾}čŌ©“`¹Ū·o£M›6xõźJ”(   “hŃ"ßėēęę†GV®\‰äū1ME‰%›› 8t茓icō>’ż÷_LŸ>½ćģģ ///tėÖ :t€™™”S$Aäu$ €š5kbß¾}puu-ģ*åk×®E`` =z„œœŃrÕŖUCļŽ½1räHŲŁŁqÖEEEĮÓÓÓ$õłģ³ĻpńāE­å™™™X¾|9–/_ŽÄÄDĮmU*ŗvķŠ™3g¢J•*²™œœ lß¾oß¾-§R©Šøqc 2]ŗtį¬Ū¼y3ʎ ;;;\½zÕ(!† ›M›6aüųńpqq1hū›7o⯿ž2q­ Ē3āg¼=z4>’üóB¬ÕǁZ­ĘoæżĘŒH¾vķ8€ļ¾ū®kFEƒÄÄDŒ3@ž¦R„J…\£āĆĀ… ™gĖĶ›7±{÷nüų揅\«Ā”\¹rŒ‡ŻäɓѶm[T¬X±kE‹Ę.žŸyD4¢H¹råźŌ©cł Š…Dv@[Š•DaĘ[)„>ł?ųn*f•+Wvæ$ėżAā‡0aaaØ_æ>¶oß®Ó=2=='NœĄ¶mŪ“ÖÄœ9sŠØQ#ܼy³€j—GBBZµj…©S§ŠŠ@žwČŽ½{įįįĆ‡ĖŚ÷­[·Š A¬ZµJRüŠģ?44+W®ŌZW¶lY¤„„!11ćʍ“ul‚(Ŗ¤§§cɒ%oæxńā*„†fP Mū•Č_rssµś­tķ ā?ęĪĖDō˜1cyGéAZZg^W;šCĘĀĀÓ§O¤¤¤`Μ9…\#Ā”˜Ņ®.µÆ:T„xø+”œśä’Š ó\Ć»*¾uyŠ ööö A~Ę3õ6qqqčÖ­޼yĆ,+Q¢Ś·oAƒaŠ AčŃ£>’üsNøŽ½{kķ‹ßčĢĢĢ$„0ž½¤ ¹R\(īõ/īäää`Ą€HHH`–•/_¾¾¾čÕ«š7oŽO?żJ„@žēĢ_|QXÕ%Š {GŅŽŽīīīųā‹/ąé鉲eĖrÖĒÅÅ”sēĪxśōiŌ'##ß|ó ®]»ĘYīęꆞ={¢oß¾hÜø1,,,˜u©©©čÓ§Nœ8!¹ļ7oŽĄŪŪńńńĢ2+++“jՊiõźÕ 5ā„żöŪoµöÕ”C4oŽ@^ī+W®t¾QTŲ°a^¼x”÷v?FPPP>ŌČōdddąųńć:Ūo®®®oZµjĮĆĆ#æ«GP*•č޽;3_ŖT)x{{b '''gĻžÅ³gĻ »*ÄB\\6oŽ ųä“OŪ'„8={öd¦K”(”åŻū±Ń½{wĘė}ĒŽø’~!׈0%a_’ōÓO!œóC—¢Ļߜi© r…\£‹S§N!**Š™’ńDZhŃ"ØTÜW^rr2<ųŃär ēcļHŗŗŗāśõėœejµgΜĮ°aƘŠ{ńńń˜9s&Ö®] Ļ(å²’~L›6™ŠŠb„I>l!&L˜€Ė—/3óåŹ•ĆŚµkµĀs>yņ?üšĪ; Ļ[cšąĮøzõŖh~¦„K—rŌ6mŚ`żśõpvvÖ*›™™‰óēĻcćʍčÖ­›ąž&Mš„ŠŠPØÕj̚5 žł§`9‚(¼’Ė–-ĆģŁ³õŚ.00YYYłT+ӐœœŒQ£F᯿žBJJ nß¾-Ł—Q*•8qā<µZ ___XYY`?nÖ¬Y¼|ł:t(v¹Ż²³³1|ųp#)) !!!Åīˆ¢ÉoæżĘ„-2d…łÕ“„K—¢]»vHHH@ūöķ?śša …C† Į˜1cE‹aÕŖU…]-Ā„Håš0Å~«T©R\CNž1!Dƒ”f!x.r’  @Jų`–uķŚUćę"ˆ”įÆōÄq²³³9” š6mŠuė։lllйsgtīÜYp½““.]ŗ„#GŽĄŃŃQ“Q8ܹs~~~8uź”J„A£÷ eĖ–-X±b¢££1lŲ0Čwß}‡jÕŖ!225Bƒ ئ¦”M›6 ƅ P§NÉ’AüGpp03]±bE,\øPKüņF R"7BģŽäO?żDIäu†¼¼¼pģŲ1xzz2#„wķŚ”-[ØV­šč>Ź”įŽ‘©V­šh„ĶŻ»w±qćFfŽÅÅēĪ KV±bEģßæ;wʅ ä…V\¼x1ęĶ›'ø’?žųƒ™vuuŞ={`mm-XÖĀĀmŚ“‘Ģ[ōå—_ĀĶĶ 1118yņ$®\¹RģŽkĮfķŚµ3fŒģœ6Æ^½bDä¢ĢĖ—/±oß>½¶±µµ„¼…„R©Ä×_]ŲÕ0˜ģģllŻŗµ°«A|`¤¤¤`ļŽ½ņģ7}ūö-ä?ĢĢ̊­GY~ѧOL›6 ©©©Ų»w/ęĶ›‡R„Jvµb Dl+Vt€üäē’:øB_Ɛ¬?æÆ+:{Z§'HķŚµµ‡Ź ¦ć޽{×ī‘#GŹ2|ŃŃŃzmÓ“iS :“Ų‰źÕ«‡”C‡’ųQ°½?|||“FŽ„>š;’żśõ+ä-ŖV­ŹäFņBy?~<_¹hŃ"Nn’+VHęd±±±ĮęĶ›9"Ęʍ‘œœ¬U655·oßfęśé'QńC. …?żō3Æń!ˆā†¦M“ššŠåĖ—ĖŽnõźÕx’ž=HŠ…A„qģŪ·ÉOōÕW_QDĀ$ŲŁŁ”cĒŽņr¤ģŲ±£kD6śŲꝜœģ ßŪC®ē_£‚³\×FžN„ęE=AģģģJ° K] ü6H,‘F“¤YƧŸ~ZH5!‚0ģŠ5ō\#Œ…:’ŗéÕ«gž.Ė”¤„„qņxxx C‡:·«X±"† ĘĢæ}ū»wļÖ*—_m#öĄ   Ań… Š:’ūß’˜éU«VÉŗß½{DŽʨX±"ŖWƞoõ#‚ųŲa·mŲyrĀXzōčĮL“ņa’_vyKKK č?Ħuy~°‘¬æP,];Ņ„Ä0[[[ƒ‡Ģ ]x}~ ?tĆżņåK&¹ADq…×čcKTM˜ž]»v1ÓŌ‘¦råŹ(UŖc 勦$,, iiiĢü?ü {Ūžżū# južwōɓ'1dČN~ŪČTēāččˆV­ZįĉHKKĆĮƒ)QģØR„ J–,‰””¤¤¤`Ŋšóó“ÜfÓ¦ML~ĄĪ;s)|ģ$''ćäɓxśō)”J%*V¬ˆÖ­[ē«Šžśõkœ={OŸ>EZZQæ~}Ō«W/_Ž—žžŽ³gĻāįƇHMM…¹¹9ŖT©‚  råŹłrL]$$$ąüłóHHH@ff&œŃ°aCŌŖUĖ ż©ÕjDDDąĪ;xńālmmńæ’żžžžFGW0%ϟ?ĒéÓ§KKKT­Z^^^y9fggćļæ’FBBŠ AŲŁŁ‰–‰‰Į?’üƒÄÄDXZZĀÅÅ-Z“Ģ­„‹““4œ;wNėžņššōÕp÷ī]¦ī@^¦qćƲ¶ņ<]/]ŗ„Čxć(† IDATČH¤¦¦ĀĢĢ eĖ–EķŚµńŁgŸéüĶļŻ»‡ˆˆ$$$ĄĢĢ %J”€««+4h`ō?)) /^×žiŪ¶­¬ķ4łĢīßæ””ŲŲŲ vķŚhҤ‰Žžō¹¹¹ˆÅ“'Ošš „R GGGø»»Ė›XÜyųš!.^¼ˆųųx(•JTÆ^-[¶,öƒØZ·n +++¤§§#22Ož<‘żæ!Šś„Ā*+“ĢĀĀBenn®ĢŹŹŅ%|ČÖÖėD,ˆPČ+”2R•0³–x›’@Qų”+WŽ3†&MšRmņ^–.\Ą½{÷šźÕ+ŲŪŪ£AƒØWÆ żn—¬¬,DGG#11ļŽ½ƒ œœœąęę–ÆŃččhDFF"11‘yŁ5iŅÄä/ūēϟ#44Ožłõė×Ļ·†EFFīŻ»‡/^ ==%K–DµjÕ“ī£ĀäĶ›78wīžĢ1Ā&-- gΜĮ£G““ƒ*UŖ ]»v‚×022‘‘‘xńāJ•*…śõėćóĻ?7ły˜‚¬¬,Ü»w‰‰‰HKKC‰%ŒśM_¼xČČH¤§§£zõźpss}žēęę"<<÷ļßĒ«WÆ`mmZµj”I“&&KBūźÕ+\ŗt €~ɬ¬,„††āįƇHNNF‰%ąīīOOO½ĆCŖÕjÄĘĘāéÓ§HII„„%J—. ww÷"õ\c lŅԜ}ŠÆ¾śŠ øbÅ Œ1BŌØ“••…ĄĄ@fŽ×מžž’ĒˆŒŒäxuÅĘĘJ<==ńųńcyłšśōé#ū|4|öŁgxłņ%rss9Ė=<<“r>=~ü˜óĪ9r$ć•Ö½{wĪłj8|ų0/::ööö˜3g–.]ŖšÖŹŹ #FŒ€ŸŸŸICx&''cāĉسg“ÓŠ››V­Z…† šäxŁŁŁX°`–/_Ī ¹Ģ¦^½zX¶l<<< :ĘŖU«˜ū©nŻŗų믿$Ė?{ö £GĘŃ£G9mE 5ĀŖU«D… 6`źŌ©033CLL ģģģŒ)S¦ąŽ½{ZåŻÜܰeĖŌ©S‡³¼C‡ˆŒŒdÄx ]ŗtŃ2žGDD J•*’ēÅgķŚµ˜1clllpēĪdffbĀ„ Ų²e ²²²8eķģģ0eŹŒ1B4æYļŽ½qöģY“nŻŪ¶mĆåĖ—1pą@Į/æü¼§`ļŽ½hÖ¬™čž&Nœˆm۶Ȱ%Jh•³²²BƆ qžüyØÕj=z?žų£č~ BƒB”€£££eBBB:“#Hń§u‰!b‘Ŗ49@Ųė9Doõ–ųÖśXZZšĘ”'$®Č£|łņ(_¾<ž={ Ä Aƒ“’’źCėÖ­˜5k¾’ž{­2š‡»½½=n޼ 333ģŚµ ³fĶĀ£G“Ź{xx`Ū¶m²FOž<ææ?:„7oŽh­W*•hҤ zöģ‰.]ŗ˜L,8ž<ʎ‹›7oj­³““Dß¾}1ž|£Å—ŌŌTL˜0Ū·oGvv¶ÖzĶłM:͚5ĆėׯQ»vmą”’ž=Ź—/ĻŁ¶Zµjē,{šąvģ؁#GŽąÖ­[ZĒ433C³fͰ`ĮNX ÆS'NĢ›7Ė—/‡³³3®_æµZĄĄ@,X°@+Tˆ‹‹ vķŚ…FČ 4räHüóĻ?ZõšōōÄīŻ»9#åŽ=Źyʞ9sF2\Ļśõė1mŚ4ĄžżūŃøqcѲ'Nœ`č 6ä$…~śō)¶oߎ#GŽ 22R«3 ä=·ēĶ›'*Ŗ³; 7nÄW_}…yóęaŃ¢EœŃż{öģÖö›7o†ææ?āććµÖ•*U 'NÄȑ#õĻłŅ‘\¾|9-ZĹG48;;cÖ¬Y²ņˆ¼}ūæżövķŚ…§OŸ –©S§ӑŌ×@bjRSS™i©Q ĘĀĪńS³fM”-[VÆķ›4iĀ oß¾ÅķŪ·9Ļk„R‰zõź1e¶n݊įƇ£f͚Fםźģٳx÷īĪ{Š ŠqqqčŁ³'cXINNĘŖU«˜w Ÿ={öąÉ“'ņś7ĘĖ—/%‘­Wˆø””¦¼a_o޼<¦˜įžMZZ³-ūżÅ&33“)sõźU‰&æNOOĒoæż†ŲŲXģŚµKŌ(­OžóŁĒ»xń"žžūo¦Æ#DLL :uź„«WÆĀŃёYžöķ[ĮūMhš_”“ƒ¦žÉÉÉø}ū6&NœˆĮ²oß¾ÅäɓńšįC,]ŗT°Ljj*’““‚{÷īĮŪŪ[«®ü~ lٲƆ =‡œœ=zaaa8yņ$źÖ­+zN™™™šõõÅŁ³gEĖäęęāģŁ³‚Ē Ęwß}'śŒČĶĶÅ”C‡ƒŠŠPAŃõŌ©S茵«`\CRRvī܉¹sēr–æ~żķڵćˆF|²²²püųq :Ō`äüłóĢtĖ–-%Ėfee”gĻž’ĀįĖ—/1|ųp¼~żcĒŽ-wćĘ ųśś ¶ĖŁÄÄÄ`Ö¬YŲ¶m› Ż¤ØĄ~f‹ źÉĶĶeʜ={åŹ•C×®]EŸE)))6lŹ”)#˜`ż|aŪN„ąæ'łżč_~ł…±-ĄĢ™3µixųš!Ö¬YƔõóó?44oޜ¹ĻĪž=KČŠ)¢ó)]ŗ“EBB‚˜ˆ˜ą!&~}KÕW@-=dU|CĶ·X…jµŚų‘o˜™™”WÆ^X¼x1€¼vĻž=l°”žŻ K¶Ķn”ݼy›7ofb qłņex{{ćŅ„K’£¹:„ļ撞c„į“““ƒŠŠP„††āܹs¢}X·nF-ŚøĖČČĄśõėqūöm9rDēHq1²³³Ń­[7„††Š–Ńœ_TTš5kµZ-ŲĄZιļßæ”läåęęāüłóhŻŗ5žśė/NĀröKœMFF2228Ėų÷JNNŽäKĶĖ—/Ńŗukܽ{W“Lzz:>Œ+Vˆ–1%üė+4Ź ųÆ‚””|żõׂ£’4ūܱcrss±aĆƒėęļļόʱ““ĤI““Źäę梒žŲææč~^½z…Ń£Gćŋųõ×_EĖ„§§£gĻž¢/ Oš2MēLh¹4ÉYł¼yóoß¾ÅéÓ§Q£F |’ż÷Z÷ćgŸ}ĘLgdd0Ļ·»wļbĮ‚Ų¹s§ą¾šõ×_ćʍø~ż:zõź%j<¹xń"śõėĒI.ķé鉔”ęŁ£K9räs‚ƒƒ%°°0¦,{ŻéÓ§Ń­[7­’0ŸĖ—/£C‡8pąZ·n­µžŻi8w£Gó;ĆjµC† aF) ‘œœŒÉ“'#!!óęĶ“¬§.ōéHfgg£gĻž’ Ą1dȼ~ż£F-.]ŗˆ ģrŃŃŃŲŗu+nÜø!Y6?IIIį>|Ż”°ET!aYģ÷Üæ_ktnŸ>}$##=zōĄ©S§8,Cpuu…‹‹ ––†‹/ ž?¢Ø’šš oooøŗŗāĪ;ņF¾:TKųT«ÕX²d 3?tčP(•JŃžĮĒĀ“iӘū駟˜k"Ęäɓ™ökåŹ•įåå…ŖU«āłóēŲ·o#ō½xń ,ĄĀ… óćŌt2xš`ę~kŌØš6m kkkœ9s.\`Ź­]»­ZµĀ×_-ŗÆ7oŽ [·nLŸQ”PĄÜÜ™™™ZČłóē1|ųp¦ŖR©ąķķŗuėāŻ»w8|ų0ÓwKIIA·nŻpåŹŃ£GęˆśÜS7oŽÄ€ƹ¹9|||P§N¤§§ćĄLŪāīŻ»šóóĆņåĖ9ūP«Õ;v,Ó/633C‡PÆ^=XZZāńćĒGLL :vģØåķ»téRŽųQ§N“mŪHNNĘÕ«W [[[ķM)4įÆ4ǐbĀ„ ń£jÕŖšńń““bcc±’~¦½?cĘ tģŲnnnZūyųš!¼½½ńāÅ fY¹r劢E XZZ"11×®]ĆóēĻ >Æ¢ĪŃ£GqąĄ&|XūöķįęęµZąą`¦®V«1aĀtģŲŃ$ā¶U«VÅ?üĄŲ>ĀĆĆĀ`ŖĮßߟło|ņÉ':C˲’_bv ‚B”P…ŗā‹ üõ€n1D6ŗZ6üx[BÓģe¢a³ōI€nlžB>#GŽÄ¦M›˜įŋįķķżū÷£téŅł~üĮƒ#::@ž{a‹-P¹re<~üū÷ļgX÷īŻĆźÕ«1zōhĮżœ>}żśõ挼puuÅ_|ÜÜ\$$$ąņåĖ:Õt} Į˜1c˜Ę­­-:w5kāÕ«W b^ö”””X¾|¹č9čbļŽ½ń£B… čܹ3\\\’’‚ččhœ;w‚#¦õ„aƆCƽ½=ž÷æ’”L™2ČŹŹĀß’͜Ūū÷ļ1lŲ0DDD=āZrssńĶ7ßpďråŹ”sēĪ([¶,āććqūöm„……éø›IIIhÓ¦ ó_hŲ°!4h€2eŹąśõė8räsķڵ C‡5ØĆxėÖ-ŽįxŌØQ‚īĒ3fĢąˆåĖ—‡Ź•+‡»wļb’žżŒcžüłčŌ©“hˆ¦pÄ “hŃ+VÄŪ·oqķŚ5ÉŃPE…ˆˆܼy“łOØT*¦$4ź Č3¢j~Ӗ-[¢yóęHKKƁ׳””̘1ĮĮĮHKKC™2eŠ®];ŌØQOŸ>EPPćĶvžüy„……1.ĢØWÆ®^½ Oįē3А––Ęy~9rDrŌ"»SĢīˆ5hŠ*•ŠéŁŁŁ”nŻŗpqqANN®^½ŹY²²²0|ųpDFFJ†ń8xš §Ó¤¹¶„J•ŅņjX°`ē.[¶,:wīŒ *ąĮƒ bĬĄĄ@x{{£iÓ¦¢Ēօ>ÉńćĒsÄŹ•+ĆŪŪĪĪΈ‰‰Įo™©S§ā«Æ¾¬āāāŠ©S'Ī5qqqA³fĶ`ee…ÄÄD\½zUē(ź‚$44”3@ģ?a,©©©œŃ…†Äē_s”ēOæ~ż°|łręzēĪ“mŪžł§Ń!ūź×Ə£GČė8’B7”J%ʍnjśLJJĀŚµkµF=z”ń /Y²¤ WxQAć~ļŽ=Ī †Ū·o›±Ō ØČČH¬[·Ž™ļŪ·/9Q~üńGtģŲļßæg<œW®\©µÆ±cĒrڬ“'OĘäɓ9"jNNfĻž tnEMŪ“V­Zųć?8ķÓɓ'£_æ~Œ7}\\žłē“…cҤIŲ¶mć‘2sęL“nݚó’øqć'TÖ¬Y³t†^dē‹ŠĒæ’žkņ÷$Q¼“D­V+žß¦/'ē‡œ”lųZ…čči9²£PŅö“®eDĘŁŁœe/^DÓ¦MqķŚµ|?¾¦A>jŌ(DFFbåŹ•˜4iV®\‰sēĪqFģŪ·Opiii>|8#~X[[cżśõø~ż:ÖÆ_7āčŃ£ˆ‹‹ćÄ6–¬¬,Nć®f͚ųēŸ°aĆLš4 æżö®\¹ĀéHżžūļ‚įbäĄn8¹¹¹!** ?~<üżżqšąAÄÅÅaēĪĢKČĮĮļßæĒū÷ļ9/7[[[f¹ęĆ+•*UBÆ^½0zōh„……įٳg8~ü8¶oߎ={öąöķۜ–QQQœ‘ücĒŽeöĶīd 6LėŲcƌ1čšģŻ»Ģ|÷īŻ%K–`ҤIX¶lŽ?ŽØØ(LŸ>Ż cŃŃŃ077ĒŽ;pöģY`ņäÉŲ³g§ ˆ’tįēēĒÜÆåĖ—Ēøqć“ŹÜ½{Ė–-cę»té‚ČČH,Y²&LĄŗuėpśōiFLŹĶĶå”gsšąA:tˆ™oÜø1nŻŗ…C‡aåŹ•Ų¶m¢££dtųąĮƒĢżÄŗvļŽ­uæi>={ö”½’ŌŌT<{ö uėÖÅɓ'ńņåK$''ćŌ©S¢£Ż5Ļ·ĄĄ@;v S¦Lææ?.]ŗÄ¹¾iÓ&¼xń 4@TTÖÆ_ĻtÄO:Åiˆ;vŒs ///fśüłó¢ŽFįįį/—;wīp:rl222˜ŃļÖÖ֜«½½=ˆ!C†ąōéÓxöģBBB°}ūvģŚµ ·nŻāüŸ=zÄS„xüų1ŅŅŅŠ¦M\¾|Æ_æĘ‹/pųšaĪ}ńųńcĪŹ: ** Ė–-Ƅ °zõjœ?žļÕjµh89$%%q¼ ¤’£FEEqž§}śōĮõė×±hŃ"L˜0›6m±cĒ/Ęģģl­Ń…ųɉ'āöķŪŲŗu+Ö®]‹?žų< EPØÕjĪ3ĄĀĀķŪ·Ļ—c=žœ#ĢŅįā‹&B^6666X¹r%§ó‹¦M›ź¬ vĒńļæ’6j_QXōźÕ ÕŖUcęµi<Ģą‡~(²ƒP ƒvķŚĮĻĻOĖPڽ{wŽĒ‡&矔dggsĀ{žüóĻ‚¹‡FŽÉ ѧi aɒ%Œ ^ŖT)ģŚµK0¼réŅ„9ĒĢ/’’’8ļgĶHv6 …sēĪ儽’s ¼¼¼°bÅ -ƒa¹rå8mģųųxĮ0ĻÅĄČaƆ”k×®Ģü­[·tze«T*”k×®LG777Nž3gĪ0m`Š“T*–.]Źy'®^½Z°Ėæ§vļŽ-ūžŗtéĒsdƆ ZŽÅVVVX³f s>éééLX] ģ6³………h®”ŗuėj…ÆŹĶĶÅżū÷™łžżū Žžwrr”/—˜˜¦¤T*ńÉ'Ÿˆ–]øp!sMėÖ­‹+Vh…XnŲ°!G ć÷A€¼bģĮ??’ü3¦NŖåA¦T*?x#yéŅ„qąĄ­v¦J„¼yó8æ9{€U~įččČx{åŹsŹLŸ>¹<==įėė«sæ...įV3Ё dĄ× „D”²BŪ yč4(Éõ»’Ś‘X ®BńŚ OżéÕ«—Öh‹øø8xyyjG.=zōĄÜ¹sµ:µjÕāøąEEE †©Ł“iāāā˜łeĖ–”wļŽZålmmįāāb²z8p€i ™››c÷īŻZ£•°nŻ:ʈόÄŃvĆ«WÆ^‚įĄJ–,©säŽ>¬[·sęĢAżśõµ Ō˜?>gTZA‡`a‹wīīīX·nąu©^½ŗ`2¼¢F@@ŗt颵üŪoæå$ˆ4¤ŃtęĢŽ›óģŁ³ć{0"]5°aĆ­õõźÕć<3ŲyŲ̚5‹™®V­8 (tģŲ±@=‡ „|łņ8zō(š6m XXXH†‘ņF’ó;%J”Šż¬­­±yóf­¤ÖšÄŁųB%[yóę ć ĀGóŪ³Cų9rD°ģ•+W”d÷ .Äāŋįéé©õÜV*•Z£ęŲ`1<<<„ڵkC©TĀÖÖVĖˉ,¶R„JŲŗu«VØwwwN(­S§Né ×%»#©R©$“5.X°€Ó‘\µj•ÖˆŻ&Mšp~w!ćJDD§ƒ9dČLŸ>]k4 J„*ōœ@žųįēēĒIŁ«W/“å×āĆo’k¤téҜßF,ü]Ė–-Čy6½|ł_ż5ęĪkP\vĆu‰āŠJ„āx_¼xĮé3„‡‡3T,--1lŲ°ÆcQfĈ¢ķžQ£FqŽ­ģ°XśŹx *•JIįœŻwŅ5pAŒ¬¬,Ī;lšąĮ&ķ{Bpp03HĪŽŽ^4^½R©Ä7ß|Ć̳X ”P(°pįBŃPa_}õgžöķŪśTŪ¤HåĀćßŗī·/æüR§:{Š^„J•8ו ’ž|õź•V'33“sO}’ż÷zåž:pą3]æ~}QĮÉɉ“Tš’ū³C÷ŁŚŚ zyˆ‘™™Éé'ŁŪŪĖŽVŲŽÕŖUĶłīŻ;NŸp̘1¢÷1ū¹šüłsސ€3Ą²téŅE~Ąa~2räHT­ZUp]•*U8įĆ źy0|ųpĪ3xÖ¬YLū5<<œÆ ęĶ›'»?Ī Ø#Š?ł`[—“ēC*ß‡Šž„¦Ea śœæ¬^ $R=üüü“q1b $;޾¾XZZJ>lٹ¹¹‚yöģŁĆL{xxą»ļ¾3}E`7Ø|||cbyĘ0¶ˆ” vn€‚O&‡’%KrŒ9ģQĖłĶżū÷9ÉÓʏoTršĀ¦vķŚ<Ąž={ŠŖU+Ž—³³s¾Ö™?Ā\*/˜ģ™w„DÉšX$t/†Ž?žųCĖø¾{÷n“hŃBĖšf <==%“„²]‘mCZbb"žłēf¾’ž¦­ 999×XcTra7¼ ĀmR.ģFQA6īŁaHT*•–;{q£K—.’£.Ų’…””N¾]ģŚµ ‘‘‘ņŗ‚Ēŗ|ł2'‘ø···č>9£\ų÷5ŪønmmnŻŗÉ®oQEN§‡‡‡čó+€¤Ė;{lƐשbēø@āāā˜Ń95B… ä=G„ąģQo­Zµ­—ģŃyr]×öʍL,m@śŽ“³³ćÄ=6ō™ĖĪ !·#©T*%;’UŖT“““h݊jGņžżū(_¾<ó©S§Č įTŖT)ģŻ»7_ |±ĄŠøųlD—ѳgOœ:uŠcčņbµ{zzŹņpbĆ@Ōj5Ē`AÅ ŽW[BB.\ø€““4&÷—™™~łå—ĀŖb‘ÄĀĀBēčqv^5cŒKlńD—'4»]’ĶäaŌ¶W›………h~ø‚ÄŠkĄN˜.„®Ę …‚ćÕ[Xb·œ¦ŗß€œÓIöģŗtéR`.{@ž"Ķ6¤ńl#ø••UÅDēĒmŌÕxjPÉešąĮL£/''żū÷NJ+ rQ7%ģšhR!lL »ńĘnøĖ”cĒŽhŚ“©äĒPĆZ~Į©/·į“bÅ ĘØjooĻińa»sĖi³;ŠR’M¾'‘' °G”KĮĪÕĀīČi`eÓÓÓµ\ė5ˆ……jÕŖÅ5ųy@bccĆ‹-ōŠq̆=²É”éō1ā¦yę²Å ©Ž$»nŗ:×÷z°ėĘsR”:’•*UĀ–-[šĖ/æ eĖ–œ„+V¬Ą±cĒ äĪ’ĻšÅ>¹°·“śmŁ899įŠ”C˜>}:ĒóęĶtļŽ]¶ÄĢ̌Ӯa,¢øammQ£F1óGŽŃ Hč{ōvVV–ĮĘ2¶ļēēŃ?©“Pž8]°…°goß¾e²y‚Ō5`2äüłdæČŲ÷›±#Ółļ49ł:Ų}ž@Acī)žƒ HžžģÄęBėę͛DZ5Üŗu ˜?¾Ī’hĒŽ9aPßæ>}śą›o¾1ŲS™ūŚIŻæl[NHHˆä5±±±įDž`_~ä‡=ɹ±ę`@f0mVV6oŽ oPŁäɓõŽū>Šå-GČIpnŒ“…č¶bCŽu@,Ļ Xøp!öģŁĆ1>žY_ }v£VßqTT®]»&ł)jbD¾qć-Z ÆŃµnŻ:­.ö5ˆˆŠŁ f‡ćŁ’M9FįS5„ėÖ­Ėé¼²Ć`eddąÜ¹s€ęĶ›ĆÖ֖.ŽŸ$<<<œ™–ŠQĪ&++ ÷ļßǵk×pžüy\øpÓ™3…Ā~ęŽøqCē½ÉĪecč3אŽäɓ'u֍ķ-ĄŽoQīHZ[[£G˜;w.Ž;†©S§2ėüüü8”(ó»l )ĀOf*333Lœ8Ēē| 4`ž›Ę wąŽ©® ?LžÜ]DĮ£P(0{öl­å&L0čYĒöv/ŹŽmD‘CWž±ņbūs,ŗ|刢•2$å )Zx{{ćčŃ£šńńaFtćŲ±c’qĪ v#© _ŗ¦nPÉeāĉČĪĪĘüłóCKxx87nŒ)S¦`üųń&CõšįC¬]»'OžÄ;wG k(Č$äģ:5ø“ń÷÷ēˆS›7o–Ģ›˜¶£Čž˜b!ŽB”@«V­˜Śl$<<œł-4Ļl8;;#11©©©8wīڵk€›’CJyöģÖ®]‹æžś ·nŻāŒ°äc aԘg®”F ¹”Œ1׎ä?ü€€€¼zõ ÉÉÉčŃ£n޼™ļuę?KŲĻ8¹¼{÷ŽcL4$|b“&M‚:0uørå 6n܈~ųAēö%K–d‰’QܱµµÅˆ#0cĘ ’µ%ʎ[ˆµ*ŽšÅTCxeffr¼ÄŻÜÜ“ņ‰ač{“-.Ō 4)ų Ÿž¹ģsū˜B·±ļ7C=5š=!䄬bæŪłĘTcī)žļß¼ys˜››ĖŚÖÓÓSpyõźÕqžüy̜9LĀ›7oĀĖĖ AAAhÖ¬™ą¶ęęęX¹r%¾śź+ 6Œ@óöķ[üōÓOxųš!¦M›&÷ō“Ūne_cø»»Ė>†& Ą½¾ …¢ŠCŽŅ8;;C„Rql9†Fva’g õ“'>|ŌjµB”Pč®F—("WŸ=¦œ§”\ƃ¬®rE lŲ°={ödŅ«WÆ.ۈQŽģ½J„B‹-do+–A.~~~šņņĀąĮƒ™ä©™™™˜1cbcc±nŻ:£Æ~ūķ7Ģž=[Ҹɦ vćMßó]½zµNWå‚Ģg’š ƒsēĪE“&M$=@Ų×ŌÉÉIƤßüŃź…õßüXa ‘‘‘HJJ‚ƒƒNž<ɔŃ<³ĶĢĢŠ±cGĘż988˜@4į³Ź–- 777Įc­_æ'N”="Õæ?ūŽtppŠė9Ŗoˆ< r;’ģ÷A¹råDƛbI33³"Ż‘“µµÅȑ#1}śtĄóēϱqćF ><_[”B(•JĘXcHŲˆĒsę éźźŠŻ»w£]»vĢż¹zõjY»ćHń!0dČ,]ŗ”ńhŖS§ڶm[ȵ*¾°E„RiŠ@KKK˜™™1Ś‘#G¢’ž&«£ģśE!, ßc`ęĢ™hÓ¦M!Õ¦č¾ßtå1ÓßćCĪ;ŽŻ'ć··Ųæ”¾“üßĖ–-& Ķfii‰¹sēĀ××ƇgrĮ„¤¤ {÷ī8{ö,“oOˆĪ;£I“&˜4ivīÜÉ,Ÿ?>Ź”)ƒ”C‡T/¶@$ÕFg_—-Z0ż}a·ļÕj5޾}kōżCäS§NeÄĶ»aåŹ•2d§?"væ¬(÷Wˆ‚C¦Ų!$pČńčŠĒćC²¦¾[‹·Å„S§NčŲ±#/žĢ™3HNN6Ź›Į°_¼üѳł »į`nnŽąąą;64nÜ—/_ĘģŁ³±bÅ ęe¶{÷n”*U ‹/6ś‹/fŒ[@ŽĖ­}ūöhŌØŹ–- ;;;dggc޼yL®‚4t³Ųś&‘Õå ń!Š®];Ō­[Ū·oĒóēĻ…öķŪ#,,LŌ…œ½ÜĆĆAAAßŅŅ’1čäóc…$77ēĪC—.]˜ünnn!ĄŪŪ›éš;v jµOŸ>eŒĆ-[¶·mŪ†‘#G2ófffšņņB“&MP¾|y”,Y¹¹¹X¶l._¾ ²GŪIĮ¾7?ūģ³yęŠåźąĆļHnړɠ㱟ŸšŠ%EŁ{JcšŌ¹/^Œļæ’>_c[XX \¹rŒšĮN@/¾R£F ƒėćįį`͚5ņrÅÄÄčĮŲĒ‚ōœ$ˆü¢dɒ6lęĢ™=zt±HR˜$&&2Ó%K–4čZjriģö„Ō¹²Æ‹1}4žõ}óę E”ššp&<š§Ÿ~ WWW>|iii˜={6V­Z„מŲĀfaę6!Š=łęh!†>~„r,7&—É!O‘üeŠ AĢtvv6=zTˆµÉƒżā-Č8Śģ榧§K†…Ź/lmm1oŽ<„„„pF³¬Y³†ĘĘāććįļļĻĢ×®]W®\Į¾}ū0nÜ8ōķŪ¾¾¾č޽;gÄ@AŽ(j¬¢†ÆÆ/üżż9"VLL E·awZŒķ$²Cü„†„é©T©'\Ć„K—šņåKFœdēżņ‰”V«9‰Īūöķ‹>}ś0óŪ·o×;Ÿ,»«O.=¢ųQ€6v}rƒm+ }ƒsR’󏾑ĄŲŪ¦†=Ź  _ŗģ•Z­ÖQZ4lŲGŽa☫Õjf4Ŗ”üłēŸĢU•J…}ūöÉ2¤ĀNśLˆ8}ūö儲 @BB‚`YSv”ŁŽaEݐū”ŠŖU+f:..7nÜ`ęłˆµµ5Ēk䌵køsē3/$€üõ×_œ?Ū·oĒgŸ}¦³^¦x.°Ÿ¹eĄū~ł˜;’Ɔ ćŌ; ߍ•M›6e¦³²²Ŗ×öaaaĢt… ŒN6_£F ŽĮVģłŹ†żŪŅhIāC”téŅųć?°{÷n£„o¾7±®g!?_ʇĄß’ĶLשSĒąż°#Č5ČCÕŖU™é””üūļæł~L)ĢĢĢšÉ'Ÿ0óq Š999œ0µk×6j•*Uā ‚ŗ’¾Īm¤ö=õęͽB_V©R…ó,ŹĻßßßߟó>gēćÓE›6m8Ń NŸ>mPŲ}c©Šcģ>żƒ 6¶óCˆŹł­ qŲ<ŗBĒéóŽŪ·o3ųĒŅŅ}śōĮW_}ÅÜ/999˜:uŖ^ueæ—„Āk}“ Ėݟl ĶN¦ą}üIQŪĄ~ńfddÜų!3ž½óŽŠāzūųwWŖ„©ˆŅ ˆ%T°£‚†ØXbŲK,±bģ±kģ±"ÄD#** ±KQiŅĮ ,½ģīūĒžö¾3ģ.,°Ķżœ3‡)wļÜŻfžūŌśØ---1oŽ<²]]ĮI óūX[[³„ĻŠP„§·¼0ÓłDDD° =RžŸFį—_~!Ūyyy¤Piy˜qbbbrÓ3ÆO}’K0  Ä¢­­ž={J“gN¶^æ~÷ļßM6„żĻ3Ÿ †††čÖ­›\ćRÄsłĢĶĢĢd„kØ-äažß|ųš”Ś€ņéä‰$ØoÄioĤ¤¤ą÷߯Õs2ļsøråŠÜŸMOOgEH>¼ĘćQVVf@äIɼŸØ„ņ5Ń»wļ×ŗ+Ÿ¦³"YäÕ«W,%»¢eAqżŒŗ$66QQQd[VAey`^‹ąąąZOU¾˜rMē#Š€łųłłÕĖ5•—ś[pp0ĖQÉĪĪ®Fż5jԈ%‰kĖÉ¢  Æ^½"ŪåÜSŹŹŹ¬ĻūśśŹżŁŖ¢””Įr ŖŖ£(ów—Ē‘BLHE5x˜ć,**b9†TVĪ'OžTŲ¾²ś›’u˜†ĆŹęą·oßfmĖzv³²AĢ™3­Zµ‚ŠŠ V­ZÅźÆ*÷ó™Ń²eK¹?G”(€Ł Ŗkaž˜F…üG(oÕWD±šĀL…ˆŅ¾T„¼Å¼+ĆĄĄ€åį^›•¼0§’ż·ĀļZ™€ĶŒØØJzyŠī™mVV^¾|©~æFXо‹/āŋķ˜1ŸĻƒ÷Ry˜’›”””zŖäå屔_£7g]0`Ąm‘@ź# 6Œ5A3bIJ’Õ«W$DZōĄN=P•pgE@ŹGš0‹»×LÅtEu†ŹO$ƒ‚‚Ŗu>CCCVĖŗzŸÕ”… ²~«½{÷²j\(šž={²RdÜøqCn#ėŁ³gYš#FŌxj˜‰k "cŠČ‘#+l_Ń÷a>㊊ŠŖ]ģX^ŗwļĪzœ>}ŗFF)E¤fž)))øyófūTŖŖŖ,©>ī·#Gސõ6mŚ OŸ>5īsŠ AdżīŻ»F‚ß¾}›õ^:t(ėx=jtO1’üżżYŃΊ†łüØź|—™µŗsefDkEÉ}śōaÉĒÆÖłTUUYĪPžłg…søņJ{ ę»/99Y¦ėóēĻ8yņ$kŸ,ćұcĒȽ ””Į2zĢž=›åL¼~żz¹’·āććÉzM#©)9‘V8½ŹŌÄRjłŹaDnŃ¢Es„*‚®]»²<ż¼¼d¶-++«²ŅL–ąŻØQ#–BłźÕ«5ņ–WL”K(J Ģ慅…*ĻäĶ—[RRB¼Ęيkę¹%Ü3…k‚@mSu_jĀöķŪ‰r\ `õźÕmlll$źÉT—޽{“õ¬¬,”h# ±pįB‰z8ŅŽ}YYY¬’ÆÅ‹³ž7ŖŖŖ¬ŌW”””øqć†\ce:Fד–…R µ3(Ņ"† N PƒH' @.KƏK”įää$Õ£ø®QSScå÷ööf LĪž=‹ōōōJūd ~ Č&L ė<Ė—/Æ°ßŚ¦™‚SėÖ­Ya”;,TĀ0a*ćāād†DnÜø‘e ‘5Iaz4(Jø755eåE>ž|‹æWóŽhÅ«‚……«Xļ?’üƒėׯ³Śp¹\Œ7ŽląŅ„Kö+ė¾4hė÷śå—_¤>k ±oß>Ö>j©>åÓ`©ØØ`šąĮ2Ū‹=ć>ž ‡ƒHmĖ|.äęꏒżõWV:EEŒ?ž¬‡……Ujō¬é3—)ŠWō¼TVVĘŲ±cɶ··7K”P•±1'’ 2ÓI…††Ź5‘ܵk&OžŒcĒŽÕjš@777–’nĻž=µšź`žüł¬óżõ×_pww—ŁžÓ§O˜2e ĖQaåŹ•2嘞łG®ēŠÓ§Oń믿’ķTŃĮœ46iŅśśś•ž‡BłÆĮLūō×_±"­…B!Ī;G ”ä˜,9T\'y)‹k<õeee–AūĢ™3¬gAhhhS0ņxąĄ,Ē-@L:•Ü:::ųńĒkt.1½{÷fĶĻOœ8wwwÖ=™™‰‰'²fÖ®]+µ?i÷ŌŃ£GeŽSĢØ] |ūķ·d;00ĪĪĪ™-ŹŹŹpēĪ 8/^”Ćū÷ļagg/// Iff&ęĶ›GŒ«\.WBö5j¶oß.a€---ÅéÓ§qłņe²Æ|Œ¼0åÖüüü kš¬\¹’¤ģ …˜={6Ž=*ń ĶČȀ»»;lmm„ʮӦMcÕś[½zµÄüŅĻĻS¦L©T®Śøq#¶nŻŠæ’ž«WÆf„p®*9998sęŒÜ‹OµĻ„(lllXN£[·ne„Cćńx˜3gł}+{÷żņĖ/¤VGĖ–-įęę&ŃĘÕՕ„OŁøqc„ĄĢĢL–¤!8ES¾*82ÖBm@€rVš:¬O©ļ޽ƒ££#zõź…ćĒ#22’eixõź/^ŒqćĘĮIUU+W®¬ÆaK0kÖ,².ąźźŹR¾ \øpAŖĒ»4˜“ "ˆ³”'C‡e…}^ŗt ³gĻ–ĪKJJąåå…^½zÉōb“‡ `ķŚµR…ģŚµ‹lKój-o9uźYxšąyį•®˜9s&üżżQVV>ŸØØ(̘1`µ“„šb@BBBXé ²³³+Ķ* ¦ Īēóńķ·ßāöķŪŃׯ_ĒØQ£j¬dNŹ®_æNž_ņņņŖ]@®.Yæ~=ėž^·n„rzéŅ„,O’ ąąĮƒßļóēĻŲ³g¬­­„F?µjÕ NNNd;00K—.eõ“žžŽiÓ¦IŌŠaNž(U£|}„~żśUXc€éUˆ"-Zµj%µķ AƒXŠü7oŽDii)„B!bbbšć?J(UŪĶĶõ]–-[†]»vILČx<<ˆ.]ŗŌČPɜHęååUXcjåŹ•$…P(ÄōéÓqņäI‰’ÆOŸ>aūöķčŽ½»ŌgĘōéÓYJł+VĄŪŪ›Õ& @ī‰ä¦M›š×_ałņåŲ±cG…ķk‚¶¶6~ųį²żńćĒJ§5AKKKāżćīīŽ9sę°d™‚‚œ?vvv,爁rQÉ IDATbāĉRūĪĪΆ³³3¬­­±oß>¼zõJ"ā/::6lĄŠ”C‰W$‡Ć‘©¬dIÖĖP§P("¦NJÖKKKįä䄮½{ĆÉÉ ęęęX°`Š‹‹Ń®];x{{œ,G'faē{÷ī”[·n读7 $RØvļŽ¬ß½{ęęęppp€‘‘Xć4.|>»vķ‚””!† '''XYYaģŲ±DqĖįp°’~™RKKKÖö“iÓ0pą@XXXH¤Ģruue½ėSRRąää„:`Ų°a=z4,,,Š£GxzzāÖ­[¦«Œ.]ŗ°¢ōų|>V®\ SSS :ŽŽŽ055ň#̊¢D)n™ĻÅłóēcĄ€čŲ±£ĢÕŹpsscÕB‹ŽŽĘĄaee…‘#GbĈ055…½½=īßæsēĪU¹†CuaŽoϟ?‡„„%Š”CtļŽ„Æā(ICCC >œ\ļ™3gy[II gΜaĶsjŹīŻ»YiÜŻŻŃ¾}{8::ĀŽŽķŪ·ĒŻ»wÉqgggÖ¼Ił{Ŗ¬¬ +V¬ūžŚ¹s'ė) ]ŗt­­-œœœ0dČ“k×...xłņ%vļŽ-”öōōDxx8¦M›†Ö­[ĆĪĪNNN°³³ƒ¹¹9®^½JŚNš4 ¦¦¦d;""žžžŲ¶mŒŃµkWŒ=Ƈ‡™™ÜÜ܈œ”§§ĒŅmT333–œ,-ݱ–ćHqq1V¬X###888ĄÉÉ =zō€‰‰ ÜŻŻ‘˜˜(5šĖŠŠe4-**¤I“`aaAƒĮĢĢ £GFrrr„ć/_ßåȑ#՞»gdd`Ń¢Er/ĢTpõEćʍńŻwߑķČČHXYYaųšįä%–­§OŸĪJgU¾nLLL ĖQ짟~’MČår±e˲żžżūJkł1åiUUUÖū•B©ˆ’ŁŹGtHKkUkŁ„jĖBł{7¼yóĖ–-ƒ­­-“µµall čźźā›o¾Įɓ'YŠ–°^źõĶčŃ£IŚ@”~£wļŽč޽; CCCĢ;Wn%sRńīŻ;ŲŲŲĄĮĮ¬šP‡ƒcĒŽ±„ÅĖ—/ĆĢĢ żśõƒ‹‹ † ‚¶mŪbŚ“iˆ­¶*77WÆ^ÅžżūannŽĪ;ĆÉÉ cƌAĒŽńķ·ß æŗŗ:–-[&ŃG«V­Š¶m[²}čŠ!tėÖ ööö022Āȑ#É ķ›o¾aÕIJJĀØQ£Š²eKhkk£[·nøzõ*7nŒõėדv²<³˜)AŹŹŹ0pą@ 4¶¶¶011aŃ­ ®®®čßæ?ŁĪÉÉĮwß}+++Œ3ŽŽŽ000Ą¤I“ąļļ_iNżŹ`Öńó󃭭-ģģģ```€§OŸÖØļŗ@GG‡e¼Œ‹‹cåšDŃCLcZii)Ö¬Yccc 4...čŪ·/ šóĻ?#99Y¢1ėׯgSNœ8sss899”’ž°²²‚··78K’Ņ¢k={öd ø•Õ8033cyU¤\033Ƙ1cČö§OŸ0aĀčźźBKK ;wĘ©S§ŠØQ#–0]Qŗ‘Ŗ ©©‰żū÷ÅŸĻǦM›X÷¦ڶm‹5kÖ 55UBI^:t襜-+Ŗ3dllĢśĪEEEX¼x1Œ1xš`øøø wļŽ066ʶmې 5M€±±1¦M›F¶ 1~üxXYYaȐ!077‡££c…Ę1~~~¬ķšL$åaɒ%,e‡4‚"™8q"ęĪĖŚwńāEŲŚŚBWW¦¦¦ŠŃŃĮ¼yóX‘ŠFFFøpįĖc‘‰§§'ŠŠŠƒõė×ć›o¾¶¶6 ѱcGčźźĀĘĘ{÷īeÉėÖ­c„ž“Exx8Yg:QP(”’gŲ°a¬Č:@ō öõõ%Ļ?===ÜøqmŚ“!óYé §L™ĀŚ~÷ī^¾|‰’’‰ĻĢ™3‡µ’’‚'Ož·ŗužŹ“——‡   ųśś²¢£UTT°{÷n|’ż÷2?Ū”CōźÕ‹l#44?~”p”ār¹8{ö¬„Wyrr2žłēųłł±~33³§AڱcĖėEÕ" €„¬c:­¢:LgŽŅŅR„……!>>ÉÉÉՊVWW‡———DŠĀøø8dÉŹŹŖĪRŻĪš5‹åų™™‰'Ožū¼ŗŖĖółógVWWgÕJ`ұcGœ8q‚„X"„¹ÆÆ/ž>}Š‚‚p8lÜø‹/&‚Æ¢ę’E”••YB¬¬śL˜Ž¢•yW:tH¢ yII ™(Ŗ©©įäɓXŗt)É3+ė¹P\]]±k×.–ņ://Ü›įįį¬hE¦Ń·Ŗ”ŸHVöüX¼x1VÆ^Ķņ\ĶĪĪĘćĒqēμ|ł’üß4kÖ -[¶”ŚĻīŻ»Y©#‘’&((ˆ¼ƒŚ“iSi$&ó½ˆrĖ*ØØtuuY^‹ńńń5ö\­Œ}ūöa͚5©¬ „zļöģŁ÷ļßgå@.4ŁØ““™™™ˆ—ˆ8RQQĮ®]»äŖC° L&…ŅP133ƒƒƒXuŠŖKļŽ½I9T={Ė–-“P*++cÜøqxųš!1ąOž<2#&&OžŒõė׳ŒŚ5BĻž=%ņķ5 {öģ‘8o›6m°`Į̟?Ÿµ_ģ±ļąą ™!ĘcÜøqJ#8;;ćĮƒX°`A„ż\øpööö¬}ŚŚŚ˜0a‚Ō:€żõ> ‰¾TUUѧO=z!!!5öčUVVĘŋqģŲ1©÷ŒŖŖ*ģķķqžüy>|Xāų©S§0tčPÖū“E‹˜2e ˰nhhH~ūŹź/éźźĀ××īīī,Ē17†ƒƒΟ?H-ģŪ®];r>yžß={ö$ķe īÖ­Μ9#!hkkcśōé2ÓBÉK«V­ąčč(aōoÜø1&Nœˆ   Vś[iX[[Ėõ?[ž#F ,, Ó¦M“I8ŗwļŽS§NĮĖĖ«R%Ŗ²²2.]ŗTé=uįĀ:tHāø••BBB°téR©Šü-Z`̘1øuė<<<$¼å’üóO¬X±R „ęęęųõ×_įķķĶJcĖ—/ĒĮƒ1`Ą©ßSSSsēĪEHHĖ©³:01¤Õ(ĻŗuėpėÖ- >œD2‹įp8°““ÄŚµkńźÕ+VtUUUx{{cūöķ÷G“&M0yņdU*“/_¾œå8T­v(ó]UÕ„k×®¬¾Ś¶mKމė%–GMMÕÓ Hāč©Ļa@ō’źėė‹įƇKȶ:::Ų°a<<< ¦¦===øŗŗĀĮĮčb‘ćjnn.9׎;$®myÜŻŻI{++« ³–0õEņ8žP( N% —±4b,JŒEł‹Ź’Uńr’žż‰ööö.åS`1·+:VŃ>iŠT[UƒĻēćöķŪšōōÄćĒe†śš››ĆŁŁóēĻ—™EĢĀ… ‰§å?üggg‰6ēĪ#”©ÖÖÖŲ¶m[…}Nš4‰¤ŲYµjĖćŸINN6oތ«WƲ”^^^ørå ?~,”€QWW‡££#Ö®][įä‹ĻēcõźÕ8uźĖóĘÄÄ...˜2e Ėx’““ƒ}ūöįŚµkˆ…ŖŖ*ōõõ1bÄ,X°ĘĘĘD×żÅ‹čŲ±£Ģ¼üļŽ½Ć¬Y³Xʱ²vÜøq?~<āāāXy*/_¾\”7Lqq1öīŻ‹óēĻK"ÄšłóēKL«Ć/æü‚}ūö‘kĄårŃ·o_lٲ…L†x<&MšD>sšąAVż1Ė—/Gtt4‘wbEŗ„„V¤Ģŋ%rĶϜ9“x(žųć2sČz{{ćųńćd{Üøq,Æs1AAAŲ·o|}}%<¹ĶĢĢąģ쌹sēV*о|ł?’ü3üżżY“ņN:aŻŗuä9±zõjĀÉÉIī”uŅ7n1V䕽k×.Rœ}芔Rs÷ŻwijKļß’^^^DdŪ·o—ŁvņäÉÄćlŊ2!!!Ųŗu+‘‚„™[GŽĮŹ•+aiiÉś“EHHģķķŃØQ#$%%±ņŸK£  ‡‚‡‡Žæ%%%čééaŠ AXøp!y­_æ<€žžžD:‚ĢĢL̘1ƒl’öŪoUŖ…†={öąŽ½{^zĘĘĘ=z4ęĶ›WķB’b¶mŪF®aß¾}q’žżJ?ćļļąĮƒ¤ęęę;v,ęĢ™Sańė²²2üśėÆ8sę +zA]]ĪĪĪųå—_póęMrϚššJ¤,ńńńĮ¤I“Xž‰r’&§N"śśśųķ·ß*żLZZ~ųįibll,U!ęŽ½{8xš Łžūļæ«åyüśõk8p·nŻbyq"%gļŽ½1cĘ L˜0”Ņž…B!üżżįéé‰G±~&FFFpttÄ¢E‹äžMßæϚdæ|ł’¤P*Ļē毻wųüł3tuuahhČr¬Øj_qqqąr¹hŪ¶m…ż”––"&&„„„hÕŖ•L£µ<\»vDthjj"99HLLDVVZ“h Å©<äęęāćĒŠÕՕ{Œ’žū/RSSĮćń „„##£ZõāżōéRSS‘›› MMM˜™™UŖDu āćć”­­]į;³:¤§§#55EEEŠÖֆ‘‘‘\cŖ-ų|>bccQPP]]]™ŽöņpšąAāmß©S'„††‚Ēć!99ŁŁŁŠŅŅ‚””azn—••!)) iii¤žUy’ŖPŻ{ Ea¤„„!)) -[¶D»vķä–?rss‘eee“k×Nīū³¬¬ qqqČÉÉAII ttt`jjŖ°ŚŖĻŸ?'N4JJJHJJ’;¢D\7$++ Ķ›7‡¾¾~„uͤ‘žžŽĢĢLØ««£mŪ¶D9/žŸ"ł°| d@ä8“cĒ™{łųųČŌĶQ¾8Ž\)¤µcīėŅ„ĖŃŃŃYŠKa¹æEŠĖ-%’[J’·”1>c0”“…@(± ‘ŸŸāābhkk£M›65NźƒŅŅR¤¦¦āß’…¦¦&ڶmK¼^f͚…+W®ØŲˆ„£„„”mŪ¶råE---Ebb"RSS”¬¬ŒV­Z±¼ķ@ @ll,>žŒüü|čččĄĢ̬JBlnn.āćć! ”ÆÆ_”7¬>ŸÆį,)) ™™™PSSƒ‰‰ Ėc”¦…B¤¤¤ )) |>ŚŚŚ033S˜P)¦¬¬ ±±± …000šVłŚČĖĖCbb"222Š¢E čėė³źŗČKNN——×`¹Æ‡˜˜hjjŹ„˜xłņ%TTTŖģõ)Ąįpź­ŽAAA>~üˆŒŒ hhh@___¢ŽQMxśō)ģ•••‘””$wŽģÜÜ\$%%!##ƒ¼‹Ŗś> …HKKCFFŌŌŌX ‹Ć‡“üæŅ €č½¾{÷n:tč?1‘æ·ÓÓÓ!ЦMčééÕč=“äädäē磠 ZZZhŻŗuµ””'Ož$ÅxŪ·o_aZ5 …ņõ ĶB”ŌŅ ”’B”:t Ϙ‹/J¤£«/¶oßN_­¬¬&µŻĢ™3įįį:TšĘ‹R·ųųųūIKK ńńń2SŹR¾¾&½[)j)5ŹŹŹ000`„ÄÌΨĢˊĖå’‡ŖœŪÄÄDŖ·æ¢ąr¹©©ŖJ³fĶŠ¹sē*}FQF„¶mŪÖ(-MEp8čėėWɓ¼:())”C‡µzކDÓ¦Maii)Wj‡Šh޼¹Dś$ŠāŃŠŠZ- .—[„öå?[Ÿ4nÜRÓY([[[“nŻiii(--…ŸŸ«JE4k֬ʒ7zzzRÓĢ1#d…Żėč萔r:tųŖĄ’æ·«śī®ˆ-ZTĖR÷īŻ#ėŅ¢I) …B”PŖ ‡ĆĮ˜1cHQļ?žų£Į@˜µŽdÉU<7o޹åmJŻĮ¬‡;fĢjü |qŠ ”’Ģz•„y”P(ŹńDRLłT^õ‰<ɜœ2‘”–’’Rwšx<ųśś’m—z …B”P(”ÆfŠY’J¼¾yüų1Y777—ŚfńāÅČĻĻGÓ¦M1wīÜŗEŠŠŠČœ¬-K”| På?Ćæ’žKź-Ø5a …B”|=”ŸHV„ cmœHʊH[ŗt)H6n޼Ir&ŪŲŲT;źŠB”P( E;v$u)‹ŠŠpńāÅząėėĖrÜ)_XœĻēcöģŁøzõ*QFiŃĻ”śĆĖĖ‹Ólmmamm]Ļ#¢PŖ5€Pž3œ>}€l‹ …B”PdѹsgtļŽ€ØęˆøŽT}āėėˊh,’>ćół˜3g<<<;wī¤ÉzęōéÓdż‡~ØĒ‘P( …Błš€£G²t Ц¤¤K–,AHHˆŌć?fE hhhH¤·jŌØTTT ®®Ž½{÷bśōéµ6^Jõ8|ų0YgŽ_Ź—5€P¾ ޽{‡Ķ›7³< ˜xxx`ūöķdŪÖÖ¶Ęõ ( …ņß`ŊdżČ‘#µ:‘,..ĘņåĖ.õxpp0K.k" źźźŲ³g+Š…R÷„……įɓ'}}}øŗŗÖóˆ( …B”|­8::¢gĻž€ŲŲXxyyÕŚ¹üüüpāÄ ŲŪŪĆŌŌcĒŽÅĢ™3įźźŠnŻŗašąĮČČČ ķ×­[‡¦M›Jō³gĻ„‡‡cžüłµ6VJõø}ū6^æ~ čÖ­­cGłb”Uk(_^^^Ų¹s'vķŚsss˜››CCCŁŁŁxžü9’’’H[.—‹mŪ¶Õćh) …ņ%1zōhŲŚŚ"<<ļßæĒ_żUk5üüüpģŲ1;v mŪ¶E×®]”©©‰‚‚DFF"22’Õ~ķŚµR'’ūöķÚ5k`bbR+ć¤ČĻĪ;ÉśO?ż55µz …B”P(”ƝķŪ·c芔Ų°aFĘ+ü<Ģśx©©©HMM•ŁvΜ9X“h‘Ōc7†‘‘‘¢‡G©!%%%ų駟ˆj#ŗ»»ƒĆįŌóØ(”źA ”Æń‹W("** QQQRŪ)))aļŽ½0`@]B”P(_0bĈ …X·n”®®®šs]»v¬'%%± ųå™={6ÜÜܤkŚ“©TĆ„nń÷÷ĒķŪ·–––ųžūļėyD „®iŃ¢©ū£””QĻ£”|ķ“lŁ’Üofffõ<J}ѧOø¹¹įĄPVVFbb¢Ģāć5aŃ¢EPSSƒTć—Ė…­­-V­Z…‘#G*üü”Ś%-- \®(qŠģٳ©ņEC ”Æ‚­[·āŅ„Kš÷÷—Z VYYX·nÉåN”P(мōļß ,Ą‘#GĄįpšńćĒZ™HΟ?***øsē+e€‡ƒnŻŗaåŹ•prrRųł)Š%66***8yņ$”••ė{H „Ž4h TßĆ üGpuu„©)€M›6A[[ ,ؕč°±±Į‘#Gˆ”å111ČĻĻGii)“““`aaMMĶZ97„ö100Ą“'OpōčQZƎņÅĆ©dį2–FŒE‰±(’oQłß¢*^īßæ?ŃŽŽŽE(²b¤˜Ū«hŸ4ämGłzˆÅĒ‘——%%%hkk£S§NhҤI}B”P(_0………8xš -ZT'ļ”ääd|ųšłłł(++ƒ¶¶6,,, ­­]ėē¦(ŽČČH„††bŚ“iõ= …B”P( …B‘ ‡#¬n;ę¾.]ŗü ˆ±–ū[ øÜRņæ„ōKcį3cJ[h嫂ĖåĀĢ̌†ūR( Eᨫ«cõźÕuv>}}}čėėףł(µƒ„„%,--ė{ …B”P( …ņŸ„[ß P( …B”P( …B”P( …BQ4ŌB”P( …B”P( …B”P( 嫃@( …B”P( …B”P( …B”|uP…B”P( …B”P( …B”P(”Æj”P( …B”P( …B”P( …ņÕA  …B”P( …B”P( …B”P¾:Ø„B”P( …B”P( …B”P(ŹW5€P( …B”P( …B”P( …Błź  …B”P( …B”P( …B”P(_ŌB”P( …B”P( …B”P( 嫃@( …B”P( …B”P( …B”|u(Õ÷( …B”P( …B”P( „Ŗäää ++ \.­[·†ŖŖj}‰B”40h…B”P(в³³‡““4šłüś…B”|ń¼xń·oßFiiiµūHKKC\\8²’'!!qqqHMM­°]aa!āāā‡ŒŒŒJūMLLDzzz…mé333Sj›7oŽąčŃ£X·n–-[†Ÿž'OžDpp0ŹŹŹ*‡"_ƒ¤¤$™m"""ąķķĀĀĀ:…BQ [·n…©©)f͚UķgŹ£G0jŌ(Œ5 /_¾Tš’???ōė×mŚ“••,--”«« ;;;>|łłłµvn1AAA仆‡‡Kmsųša“oßćĒÆ“1Q(Ihå« 88%%%čßæ?8NµśHLLDYYŌÕÕŃŗuk…ŽĻēććĒ€f͚AGGGf[‡’żŠ¢E hjjŹl+ ęĶ›CKKKf»āāb¤¤¤455Ń¢E ‰6aaa !Š>uuu”[·n°²²ŖöļZä¹įįįųüł3ĄåR.…ņ% °pįBųłłaņäÉŲøqcµśńššĄÅ‹gĻž…®®®"‡IšņņĀŽ;Iö©««£wļŽ˜0a&Mš„FÕʹ™cųż÷ß'Ož„žžžD›Ÿ~ś üń±’ž:yNS(Ju¹{÷.¾żö[…BŒ=WÆ^­V?³fĶƒ`dd„ˆˆčٳ'rssѧOųśśŹl—‘‘+++€ ‚‚‚d¶ĶĻĻG§N`hhˆWÆ^Él‰=zV­Z…M›6‘cX“hžŸ~żśį޽{µ: …¢’““±cĒ…B\¹r£FĀŲ±c«ÜOzz:üżżYYYŠ&Ą××cĒŽ•pR*++Cxx8޼ySėĻB@ō.×ŋK/,,ÄŚµkQVV†ääd\ŗt sęĢ©õqQ(6ŌBłā9qā–,YX¾|9¶nŻZ­~ŒÄÄD <’ż7̇P IDAT·"‡ˆOŸ>‘ ŅŌ©Sqüųq™mĆĀĀ0zōhĄųńćqīÜ9™m£¢¢`kk‹įƇćĻ?’”ŁīīŻ»puu?~S§N%Ē‚‚‚°xńā 'ķڵĆįƇ1dČ™mAeץÓӓ13gĪÄįƇku< E1ežĪ;įāā‚N:U¹Ÿøø82Į(**RčŜ9s‹-’Ų_XX¼’ß’}­œ›IBBł®Ņ¼g£¢¢pąĄ"‰³³3j}\ …R] --M¦£Ļ‹/ČzĻž=Yū‡Gö)))”iÓ¦ČĶĶ% ĄĻŸ?×ŗ^>|Hʏ z…BłšX³f ų|>ø\.–,YBŒ® ø’>Š‹‹Ń“iÓś&|Ńļ: åk@(_lŲ0lŻŗęęęPVV†@ @LL |||ąéé‰1cĘ(ā«Õęµ¶““D³fĶźq4ŅIMM…ŗŗŗŌČx 忊¾¾>¶mŪōźÕ‹8f2yłņ%®_æŽĀĀBģŲ±£F dffĪqćĘaŪ¶m¬ć3fĢh0²±ŗŗ:8€ćĒ£S§N˜2eJ}‰EXXnÜøüüóĻõ= „Ö Źµµ5¼½½@ę¤RRR ””Ń`¼d”””KKK¼}ū±±±ųüł³Ģ4XāÉTNN޼yƒ®]»Jm'žLµhŃęęęDŽÓ‹-"ʏ)S¦`Ŋ011’’JJJ›7o"00½{÷VōW­2ÖÖÖøpį€ŠÆu}===ZxBa`gg‡yóęįįƇ3f ŗtéĀ:. ‚7n@OO?žųc½ŒóŋČÉÉ,Y²«WÆfwssk0“)KKK¬Y³7nÜĄĄTō‡@ @`` žžūotģŲ3gάļ!Q(”Ąøqć ££ƒ””©JµØØ(,Y²AAA$õJCGlDiZeɧ¬uYq®|’27&&OŸ>˜››ćŹ•+PSS#Ÿįr¹hß¾=Ś·o77·š)0xš`ųśś"&&£FjPŽĻOŸ>ÅŹ•+___|óĶ7õ=$ „A±téR,]ŗTęń±cĒ"-- #FŒØĆQ±)(( ėķŪ·—ڦ!„Ėž>}z¤ćŖƆ CQQ&NœXßC”Pjj”|ń¬Y³VVV(,,”šŸ200ėÖ­ĆÓ§OńōéSXZZÖĆ(«FÆ^½šöķ[…B„‡‡cšąĮRŪ1'SAAA2 āÉÓŪīŸž!uAšŪoæ±&'***°¶¶†µµµB¾“"˜7o ‘••…oæż¶¾‡ĆĀĒĒ›7oĘĖ—/‘šEx-R(u—Ėž}ūdĻĻĻ' üśTŽ0'S²"=ŅdźēŸnžZ©©©>|8ˆ …B{{{™ĒāāāščŃ£:MĶéÕ«Yöģ™Ō6ÅÅÅ %Ū²j……BR„Ł/3MķäɓYʏ†LŸ>}ЧOŸś† ©ļaP(”вeK(++£““·oßĘŹ•+”¬¬\ßĆ¢P( ˜†3‹§PŖ —Ė…³³3\]]„zŻ?žaaaéB2ĢI¬4X±±±HNN&Ū²&SHMM•č÷Ķ›7d}Ö¬Y Ź3KŽŽŽ˜2e 7n\ßĆańäÉbh¢P(_&śśśd]YH”P(Š,¬­­”¢¢@¶ĢŽ¢¢"MĻŸ?K“‹%i®˜‘$Lć|Ė–-6v …BłRQWW'‘Ļž=ĆŠ”C‘PĻ£¢P( B”4@ä1€ˆ ={öDhh(„“d*噹„™“©V­Z)dÜ …ņ%caa<ž×®]CYYŽ;FóƒS(J‡ĒćįÕ«WČČČ@Ė–-accS'õėŌŌŌ`mmŠŠPDGG#77W¢Ž…8b»OŸ>xöģŠ‹‹ńųńcŒ9’ÕN–ĢΌ*®mg>Ÿ/^ 55śśś°²²Ŗõؓøø8¼{÷B”†††hß¾=””äWUäęęāõė×HOO‡®®.ŗuė¦0g©ŒŒ ¼|ł¹¹¹ŠŠŠ€™™ŒŒŒŅ7…R^¾|Iź >VVVRŪ={YYY˜8q"Ś“i#µĶĮƒQZZŠ>}ś#ķµk× üšĆD’c'Nœ ŠÜDFŪ½{÷’¾:wC‡J=OQQNŸ>ėׯ#>>ŹŹŹ°²²Ā¢E‹0`Ą€jü Ą¾}ūšśõkÕemmÉ“'cŊ ł½sēĪ;‡wļŽ!//mŪ¶…ƌGGĒ*„¼¾sē""" ¤¤„Å‹Ėl‰ß~ū AAAČĪĪFėÖ­aaa™3gJMIžńćGxyy”}ūöprrBqq1Ο?O®!‡ĆA§N°pįB 8|īÓ§Oųż÷ßeeeDĘyęõ“µµe}&;;ÄŻ»w‘šš UUU“jÕ ¶¶¶pqqi j”P*ąß’%^Zzzz°±±©’0^]Ś·o---deeUjqpp@hh(233 V»ēϟEO0½É˜dÆ^½ŖÕVII ^¼xŒŒ hjjBOO†††2‹¶+ŠččhÄĒĒCEEFFF022ŖR¤Ėēϟ¬¬,čééĮŚŚZa×?99oß¾Eaa!“““`nnN½ś(õJ@@yŽČš( …B8p|> ,€ŗŗŗD›¼¼<üöŪoGGG’všōéÓČĪΆʍHLL„§§'JJJČēĆĆĆYĀ·KĄĒćįŲ±cšńńAZZŌŌŌŠ½{w,]ŗ;v¬ÖļpīÜ9 6 iiiøqć0wī\ø¹¹A[[»Z}Š …øzõ*<<<@€Ö­[£}ūöųī»ļ0`Ą€*„Ųŗ|ł2RSS”­­]a^įŠŠPœ>}Ļž=C~~>ōõõѹsgĢ;—Ō…bņźÕ+Üæ=zō@’žżĮćńpęĢÜŗu ÉÉÉPQQ!æ3sŅżžż{üż÷ßăEĒ1Æē!CX5`’““qčŠ!}Ųŗu+Nž<‰ÜÜ\ҦyóęŲ»w/&MšDö­]»ēĪ#õĄŁŁ™5yüų1łmy<–,YOOO‰ś_†††X¹r%­qE©JKK±aĆ¢:§L9KLvv6/^Œ²²2(++K­Æ‡5kÖ¼¼¼Čžß’¾¾¾h×®1€äääsŠ‰ŽŽfķ›>}ŗTHzz:ģģģšöķ[ÖžųųxųųųĄĆĆCāy(oß¾e½£Š‹‹qęĢ\¾|‹/ĘŖU«¤ĪU*C `޼yøxń"krr2BBBąåå…ŠŠPtźŌIī>Æ]»†Ė—/CMMM¦äܹsXŗt)Š‹‹Yē Ē•+WpąĄ̚5‹õ™˜˜lŲ°&&&čÕ«ʎKŽ%bpēĪ\ŗt ĪĪĪDפüõ|łņ%ĖȾxńbbIOO‡ƒƒāāā$ś Åoæż†ųųxR»ŠBiˆP„N4hŅŅŅŠ²eK|@`` .]ŗ„„„4oŽ\ī>Oœ8ŠŠPtģŲQ¦dŪ¶mŲ±cKy   œ?u¦Ā°aĆ 2-[¶„‹‹‹Ä„ēŻ»wøqćīŽ½‹nŻŗyŽ•æž~~~¬ļܼysr]"##1dȉ÷C\\pźŌ)$$$4Øŗ+Ź×Ž­­-īܹ@$'6L¢²³³‘×Æ_³”õbžłēdggĆĘʆȗŁŁŁ€ĀĀBҶøø˜ģ“——ĒŚfG˜Ÿ?~<ń„fĀćń0wī\tģŲ‘%óÖ½zõĀ”C‡ˆŒųLHYY©7ahhCCCb)XieccĆŹeÆ££ƒ‘#GāśõėČĻχ‹‹ nß¾­ŠīŻ»wcćʍRńxŸÕ«WĆŃѱJŽŠ‘‘‘;v,ņóóajjŠŸ~ś W®\ŸŸŠŠŠ°sēNüóĻ?šöö®rŪÖ­[‰ńCCCćĒ‡””!ŅŅŅˆÜÜÜ*?äĮ××nnnąółPWWĒ„ `jjŠČČH\½z|>Ė–-ĆĄajj*ńłŲŲX >ŃŃѰ²²Ā°aĆŠ¬Y3x{{#<<Ė–-Ćȑ#”¤¤eeer=ććć! Ń“iSVÄ”¦¦&Yß²e yęŁŲؐ9^||<`hhH”5€Pźccc#..>|€™™™D›ėׯ#..ÉÉÉąńxR•ńwļŽE\\ˬ°°<Œ™“„ĢĢL Į”Y3…y—'++ C‡Åėׯ%Ž%''cĀ„ xżśu­{ė÷źÕ‹Żįįį5j9–’’‚ŲŲX"„~Ū¶m‡   Ʊ¤¼±{÷īčŲ±#"""€I“&ĮÓÓS”µ5-Z$Ә•šš*5’qE”””kZ~Ā"ĘÓÓ3f̐ZóåƇ;v,ńlf’œœŒøø8üż÷ßšōō”šP·?~<ž?N¼ćÓŅŅ$ī³?’u¦ WVV'''©}¢ŗ,b„+…R×ŲŪۃĆį@(Āßß_ŖäīŻ»dŻŪŪ[¦ Ł®uuuC ¼½¬ ”¬ōS“'OF^^śō郞żū£¤¤HIIA^^6lŲ€7nTžÅųłłaҤIąół°µµÅģŁ³qģŲ1¼zõ Ÿ?ʒ%KŠ“'OV¹nŅ‚ ˆ!@WWćʍƒŽŽ’““įļļSSÓ*?äįĢ™3Ų¾};Ńļ8aĀ“iӏ?ĘŻ»wQPP€3f 22RŖ—wpp0œ‘˜˜ˆ^½z”’žhŌØžųć|ųšłłłXµjQ>6iŅĘĘĘ(++Cbb"9/sÅL ³|łrbü°³³#×1&&žžž1b5~P(uĢ Aƒ°mŪ6"‡iū÷ļ“uooo©±bM§!{{{Ø©©įŻ»wøpįŃ3žł100ųœŲIØ_æ~Ų¼y3:wīŒääd¬X±~~~8~ü8‰J¬-*J]+NÄįpеkWŲŲŲĄ×חģg>eÉģ°}ūvÜæłłłˆŒŒ„½½=®^½*õ·Æ*Ļž=#Ų±cœĮår OOO 4ØĘēa’››‹ļæ’ÅÅÅPSSƒ»»;ʍUUUxxx`Ŋ(--ÅŚµk1fĢ©Å?@”ZlĖ–-čŅ„ >}ś„uėÖ᯿ž‚@ Ąˆ"sŌØQh×®ž={†æžś €Č‘‰yo‰åˆˆ2ėŚµ+Ž9 |śō QQQøvķ©?@”Ō55ĀĄqżśuDEE!%%E"r›łœĘēϟYņ˜x?tėÖ­RGČÖ­[“9¬‰‰ ŅŅŅ0`Ą\»v­ŅńęēēcٲeŲ¼y3q\¶lz÷īwļŽ!66o޼©ŅólćʍČĻĻGóęĶqėÖ-`ҤIxųš!–.]ŠØØ(<~üŪ·oĒ–-[äī÷ćĒŲæ?Qšpb(£čłzYYV®\ >ŸęĶ›ĆĻĻÉīąą€Ł³g£““'OžÄŽ;¤öyóęa×®]$‚rŊ2dž-µońóŠÜܬg²@ @zzŗB~ „6”J`ooĖ—/„Y)o)**Ā£Gˆ”Ü÷īŻ#žžbŠ‹‹É¤BžÉŌøq抩S'<~ü˜x²¹¹¹± Ņ”żĻž= ŠYµjĢĢĢłóē#""¹¹¹ųż÷ß±råJ9æ}õ(?™b@Ä^cZZZh×®¬­­'įMĘćńˆr^Śdj’žż>|8Q6]¾|™Uøŗ\»v?Z·nŻ»wĆĮĮÅÅÅx÷ī._¾Œ1cĘŌų~üˆłóēC(BKK ;vģĄČ‘#QRR‚£Gb÷īŻ())ĮڵkYB!±÷ŪØQ£°fĶ˜šš"11nnn Ann.ń€iÓ¦aąĄšõõÅƇkÖ¬‘šwŚĒLJƒ ĀĪ;Ѷm[¤¦¦āĶ›7šōō¬Vų/…¢Z·nŽ;āķŪ·xō菏Ź$R¾1’oīܹ@ ” +½ P©‘ gĻžxūö-ņņņȳyŚ“iŲ¹sg„ćĶĖĖþ}ūX†šE‹ĮĘĘ999iL—ÅźÕ«Įēóabb‚[·nACCS§N…——VÆ^ōōt\¾| Ą÷ß/wæOž<§§'Q䌏ĖKJ TŁ»¶2²³³I4†””!üüüX“ćĶ›7cēĪų÷ßįįįŁ³gKō‘——‡¼¼<ø»»cɒ%äz.]ŗŻ»wGbb"‚ƒƒI”āąĮƒńöķ[$''“Ō' .Äŗuė$śĪĶĶÅ?’ü}pēĪbqvvfɾ²°··Ēõė׉2ĘÜÜgĻž…©©)JKKIÄxm¢ÆÆ¶mŪ"))IĀ"–Ķ-,, ­­~żśa÷īŻ$2D—’’‚ĢĢLŅev###üžūļ˜0aų|>āćć1pą@üśėƘ:ujĘæ}ūvā8tńāEVT M­DŠ?~œ(Ģ>ĢJUõĆ?ąÓ§OŲŗu+’““ńčŃ#™˜¾}ūāÖ­[$ĀæiÓ¦8yņ$|}}‘››Ėŗ‡ŒĮƒćüłóÄ2qāD|óĶ7ż2Æć¦M›H¤£ dÖ9 Pź \æ~šąĮVŗ?”Pˆ{÷ī”iÓ¦hÓ¦ ޽{‰ģ bHmg·0`¶nŻŹšØ««ĆÕՕ'ŖbÉÉÉ!NYS¦La1 tļŽ)))8}ś46nÜ(wźķĖ—/“Ø“ķŪ·K?ќI‘_BB>}śDö3SÖŠŪ‰å{q=?¬œķ²ź^9::ā?ž ļ§ĀĀBĢ›7nnn¬ŗUĒć‘čľ}ūJ¤D¬-ÄõĢĢ̤¦“1cyļˆwåįp8Ų·o+½1 rp2dQ=æź8‘u--­*žB©m˜)Ėz_æ~““4˜››“Zmåõ+YYYDN®nry™5k–T§(¦ü—’’"w111ä™'MŸŠ¢E øŗŗØś3@lXiҤ \\\äž\Mø}ū6YĖ×å-ĆiĢž=[Ŗ”Güž ‘:Xø\.ŃӉ#ö)”/j”Ō zzzäåōšįC‰Brāɔ8—ąŻ»w%rżŠ'S011©µ±6iŅDŖ÷±­­-QP½’¾ÖĪ/¦iÓ¦D` g„tO˜ÄBSx`Fˆ•RM›6•YŲĶĶ $“ĒOŸ>ĮŁŁūöķ«öŲ###IżńćĒW»qU())!Ž\ƒ–:įž1cY{¼”§qćĘŲ³g„fbbB¼R*<*‚Yœ“ęȤ4D˜ĘźņJq”––¢sēĪÄ»Ÿ)°¢gN~~>€Ś7€Ģ;WźžźN¦˜Ęi“©öķŪ…JU +Ą’‡[XXČTl)ooo¢t&Ņź ©©©‘T€}y~ēźL¦˜Qr¤)JŻ#ö¶ …Š5q ³‘#GBEEB”Pā] –±zōč!5"VQ“k×NfŖEńs\(‚ĒćÕŚÄ0aā€Ģ_Ä ( R‰)³‹ śśśk&Ɔ Ć£GŠ”C²ļōéÓų?öī;>Ŗ*żųgzÉL:„žŠ{1H/RA׏śUæ?æźŖø«ģ.ś²¢kY]]Ū®¢»–U±`;ETŠ)‚@(THŸL¦·Ū~Œ÷rg23™“™$<ļ×ė¾2™L9iēŽsžē<ēŅK/muiYŲ»wƔ`©¬eg°Z­Ņžx³gĻŽ81ڧO©ą8łĖ_°lٲˆ¶D,k„n‚Ü™:$mxmY§|°­vē˜1c¢'Äē;Žˆ›q¶DžįMƒ)ŅĶž=[ŗŲ6˜9r¤ŌŠ“ģ"q¢gȐ!ČĶĶķŌ¶Fū?•Æhė`JģK‰ƒ)Žć"ī3I]]]̲&EÜĒjĈĶJ™‰Ä>?Ö9-ŅŽ @č`¶-ƒ©œœ©Üā|Š!+ !CžY,?ųż~iōųńć„ė¢škšÖģ’ѱö’gķĖP:‹<²oß>Į}$ÄžU4ƒ!ūöķ“VÄŚ’#܈#šć?JĪ@0ĮlŃ¢E­öȓzä×ɝIL’‚×ш{€EŪ÷/ł^mY4oŽ‹żė_­~ B:›ŲWWWW‡$³ˆs+“'O–ś‡Ć2FēV¦M›µ*Fg“’Ÿ¶fl——'×ßxć é:[NœIMM{•u}}½tM›ČŖ %%%‚}ŽgŸ}ńÆ¼O&nIjjŖhŽ7N^Õbłņåx蔇²ŗ’ŽD’0Ń2‹+**püųqØT*,Z“H:™ÉS<ĻK˟“9˜O҉H‘7Uܹs'A€ÉdĀĉk;Šõk#-§g05{ölģŽ½[*{ļæ’>®¾śźVOöĖ/Ą5˜K׈š (ßL¹-Ł€ņ‹“¶ü \tŃEŅß׊+(Bŗœ””©ßٳgōw.‚4˜š2eŠ“rąčŃ£!e÷ÄĮTg/„Ežޚ’ ņ•j«V­ ) {öģģ×āŻ]¬ƒ$n0åv»„ŒYFu0%Ū2’' “„ōŠR©ÄwÜ XjäŹ+ÆÄkÆ½ÖźA!¤ć1z;sēNøŻnōķŪ£F’VŠlŪ¶M 8»\.)›µ³ÆŁc‘Æ<‰7`Ż'N„^Æpęš]\į‘——²æžńūżRŁČÖ@€`)ĀÕ«Wć•W^‘ųGŗj/yBP¢J=ÉWt¬Y³æłĶo" ż\[£½æ“É$• ÷Ž{/žēž§NjõkŅYäó+āj=‡Ć!Ķ›,^¼sēĪ•VSÉĒžāœA2ūéx÷å—’’"ķ}tņäI,Y²D <Įj"āĻć’K.‰šN>?ČŅwāū–——ćŗė®‹xˆūc)•ŹVƬT*•q[¢¹ą‚ ¤½AĄ?žńL™2%jU Bŗ" €„™={¶TfI>˜'Õ¦OŸŽ””iāL¾œžųńćhjj‚B”HźIZĢ„MÄ@ ˆSÓ§O9™‹™e%%%Ø©©×ėEQQ€ųS}ūöŦM›°råJé$łķ·ßāńĒoU»åƒ©hK^;š|0õōÓOGH]yå•Ņ÷Ֆ%­ķ-ć0bÄüéOĢF»śź«qĒwDĶ6'$Äl2æß/eńŠ[›L&Ģž=;dcZq0%‚ōxyöp¢µu05|ųp©öłīŻ»qÅWH+ļąõ×_—‚=—_~yÜÆ+_‘ØĮ”|·k׮؃©­[·@«6еõē,wŪm·Iµßī¼óN̟??$hDIqb­²²RŹNÆŁ—,Y…B! |>Ÿ“Ä޽{Į²,RRR¤`łŁ@«ÕJ›…Ė“–€ęū͚5Kŗݱc¬V«T °µ+oøį|ņÉ'Ņuķ—_~)­ŲŒ‡|„d¢®ŁåēÅcĒŽįūļæxˆm“'6$Ņļ~÷;<óĢ3ŅĻvćʍ˜2e ÖÆ_Ÿ”önžüłRr8æ"/Y››› N']ßnŲ°‚ ĄėõāĄ’iĒ{Lš+9vģęĶ›‡«Æ¾Ææž:nøįĮėŪx īה'?%Ŗß@°„ÕąĮƒcćʍėkš¶X¹r%>łä)”«¬¬ ‹/Ę믿ž”öŅZ! c6›„‹ś]»vI'ń"]¬;+¦ŹŹŹ¤%Ņā¤ŚØQ£:|£ŲÖhoä¼µ†*`Ā į{\Č7·Ś¹s'Ž9"­ÜhĶT„RᔇĀ‹/¾(Ż÷Ā /“jß q`£P(BVMt&łnß¾}QSbšŖ-ķźˆß’ßžö7Ü~ūķP(ąy’łĻ0eŹ)d‹”M&öÓ .„^ÆĒ Aƒ0nÜ8g‚ÕÅÅÅhhh€B”YI֝¼śź«R=åķŪ·cņäÉøżöŪńŅK/įžūļ܇jłņåqæ¦|µX¤ņŠAžž©©©-¦±OS$J„o¼ńV­Z%Õ-žłēŸ1kÖ,ißBHrDŚ`W<ˆåM§OŸ.Mš‹Įp1tęĢ™ «ŸŽUˆ“qõõõØŖŖ’~ņkt XĀQ,ż“{÷niŌ<ˆŅ .ÄOŒF#<vķŚ%“óņņB6‹×Ķ7ߌƇć?’ł†Į»ļ¾2øŠE,a¢T*–” Lżń Ł ’hū„t6•J…ēž{‹/Ęķ·ßŽÓ§OćōéÓX“hŽ~ūķ¤ņ‚õ‚ÓÓÓa³Ł¤}ĀÕ@pIł‘#G°cĒŲl6©Ÿ3fL›śœ® _æ~Ų¾};~ųa¬Y³~æ?d£æk®¹÷ß«VLČSm©cŽņżL.æür¼śź« yß¶P(X¶l.\ˆ+Vą»ļ¾ƒĆįĄ5×\ƒÆ¾śŖY°Ÿ’óēχB”€ Ų¾};–,Y‚ĀĀB )cX„Rᢋ.š5k°yóf‚°’µ]‘|åvii©“":<"ŽwüųqTVVJ« ĒߦrO°lŁ2<÷ÜsØ«« ©óßł¦¹2dH›Žæ5äļ9gĪÜx捝žžķ1aĀģܹ/¼š{ģ1°,‹|“&M:+’ĪIײpįB Æ×‹ŸžJ„‹/–'f“1 ƒŸ~śIŖ_ŽŻūé^½zį•W^ĮŽ;š›ßü&då—ŻnĒŠ”C[õzņŅy‰LÉpuuu yĻö2d6lŲ€æüå/‚%±Ä’„ÄėÕ«—”õ^TT$ķ+7o޼k®‹/¾`±XpņäIiO¶d–BLyäąĮƒąy}śōĮ°aÚ=V ŠŌŌŌ ŖŖ @ū®ŁµZ-&Mš x®ŠwÆ:y™qĻĪ&/µÕ]&üŌj5ī¾ūn¼õÖ[R`š©§žJv³ ék‹‹‹Q\\Œ^½z…ĢdddH}ĪįƇ„ŹŻżš]”——‡—_~?’ü3&Ož ų}>śč£­zœœ) tśōéŽnfTāźóŗŗŗ„•ZļW_}5ī¹ē€ĶfkUłEB’ $”Ī=÷\)s¶ØØHŖ=)_¢ œLt萓ÆS{ ]m²~ųšįųī»ļ0vģXĄ‡~ŲŖē«Õji\AAAĀVn‹ķu8ҹ6Śņū¼śź«„Ūāß!]@HB©Õj)ˆQYY)•s’/Ѳ©āʍ!&Nœ˜“Mš’iņäÉR&BKƒ)±THG@€3ƒ©Ö,@pūD>|øt»»m {ļ½÷JPq;B’I¾ZOÜć#¼ŸV(Ršŗ  EEEP«ÕĶŹóµVWL͜9;vģ2V[;˜8p °Ž¹sg¾?q_cĒŽ%¬ŽqG7F Ö!‰'ž ģv;vīÜ …B²®r'Ń>żōS‚€¹sē6›|‹‡ü9ņҦ݉˜ø“oß>ĶK֊  ]/‹%kŚ{Ķ.Ž«śōé÷ž+āŖąĢł¾³ -Ē%lÕ !Ńčõzin`ćʍš'—gęWNœ8‚‚dggKūłµ–ø PÜ÷³+ŃjµR©k›ĶÖź6Š«ąż~›öµhKŸ²hŃ"éö›o¾Łźē·—@kKĄG~®é®ēmrö I8y6YAARSS› FŽ)Mhśé§Śž”ŠŻSF£Q*A n„m05uźTh4444 ¼¼z½¾]x^ÆW & 80īēÉ7p˘u¶üü|©ži¢ŽSN^&§µgJ„R€v—Õ+¤g6l˜41k0uÉ%—–)¬ŖŖB~~~«öĒéõz©ÆīŠƒ©ĢĢL©_ƒĖńŅjµRpŗ¢¢ß}÷]«ßæ-ē® /¼¤=œI^§-æOł&”]KHņ̜9S ąnŪ¶ 'NDæ~żš=N<lŻŗ@ŪW&£SG āŹ†hIKņÆUUU”WÆ^Q7ė^Æ7ęū®]»VzOyCKFŽ)­rü駟°}ūöøž'^÷¶„W*•R6zmmm«6mļŅķ¶üÕŌŌž ä%' I±Ļmhh€N§‹ŲäååaģŲ±`V«ēw^Čųµ5²³³Ž?“!R‚ RŅØV«•&÷ć%_Ńš×æž5b2gQQQČēņėŽÖŽ€`’™øŹ~õźÕŲ“iSÄĒÅŪ?·–W#F"–M ·~żzéöˆ#:¶a„t0 €„OČ‹GÅ\qu˜„°eĖm€ČS‰*ĒŌŃÄĮTii)ŌjuHY,¹””œsĪ9ą8555˜4iRŌ 0†aĄq\Ģ÷]µj|>€Ö fēĢ™# ˜×­[÷ņvń"ĢķvĒż^¢ģģli’q÷īŻŅ ū¬Å£””AzŽü=##CZ‰<”)Öź]»vaōčŃxöŁg›õ›§NĀO<?üį‚ūx­X±¢Ußēļ’{éö 7ÜŠģ¼šķ·ß6+’(®Š“X,R?ļ¾#šē?’YJ\ząšĪ;ļ„ŒKÜn7^zé%¼ōŅK­ś^āžw&²X,ŅļņšįĆxā‰'B~·@0ųÉ'Ÿ®ž”é ä9sęDOŠĮj }åÆÄ$)‹Å‚›nŗ ļæ’>ž|ņI\wŻum~Ͷ˜1c~ó›ßą™gžĮڵkńŽ{ļaé҄ػw/€ąXFģgZóšb™;»ŻŽłóēćŃGÅ'Ÿ|‚5kÖą†n@~~~H@@^īöłēŸĒ;#gŸ}6īł£Ń(•Äę8×\s n¾łf¬Y³Ÿž9ž}öY̘1]t‘“ŅÆ# 4@0pūķ·ćż÷ßĒć?.Ün7ęĢ™ƒéÓ§ćÆż+Ö¬Yƒ>śĖ—/—ŚŻ¬Z!]M|ÅA é@#FŒĄ€pśōipµ£¼ųā‹ńüóσ㸐 ŚÖ’_änŲ°!$CB£Ń$¼¬Vuu5¾’žū7kÖ,) vźŌ©xå•W&Lˆ9I>kÖ,é¤k0µvķZ<óĢ3øóĪ;±dÉōéÓGśZYY^yå¼üņĖ‚“ņāfŻń0›Ķųß’ż_¬^½W]uÖ®]+ÕüėÖ­ƒĮ`Ą„—^*=/++K*f·Ū‘––Æ×węʝwŽ)mÖ~ć7ā­·ŽĀ\ }½©© /¾ų"Ī9眐÷ķb& Ģ„—WUU!-- &“ [·nEII ®»īŗӇ~ˆŻ»wˆ¾ŗ‡D[°`Ž~ūmĶĖ_‰“Z-.øąi„^['½€ą`ŹjµbļŽ½øļ¾ū0iŅ$Įćńąé§Ÿnó붆ŪķʰaĆpžłēcźŌ©4hģv;Ž}÷]i’ŽÖd֊®¹ę<÷Üs(--Eii)fĻž[o½#GŽ„ÕjÅ_|;v ¼¼\źÄżUą‘GA]]ŹŹŹpŁe—ÅU²`Š AųĆž€_|N§ .č7ވ)S¦Ą`0ąČ‘#X»v-jkkQXX²R{) 4eeeŲŗu+žś×æbųšį8vģ“Z-~ųa”——cāĉ˜7oęĪ‹!C†€eY|żõ×ŅäҘ1cBʳBoĮ‚Ų¶m€čē‚œœL™2{öģAæ~ż0räČ6½Wnn.²²²ŠŲ؈­[·bÜøq0 (//ĒņåĖńųć·õŪh“'NÄ5”·yóféü7~üxFx<̘1#f)0łŲ&Ö5ū{gśśz<ņČ#xä‘G`2™žž«ÕŚ,čšÄO“ŗ¬Ķ­·ŽŠ>ś‡B}}=.\ˆ‘#G¢OŸ>(--ÅéÓ§ŃæÜ|óĶŅ÷#ÖÉ ,@nn.Š‹‹QUUqŸĀp£FĀ<€Ē~æ·Żvyä >~æGށĻēCVV~÷»ßuh a̘1Šėõšł|ųč£°oß>h4”””ą±ĒÊ+šžūļćÅ_Äß’žwōļß¹¹¹Ø««“Ź2* <ųąƒÖ&BŚcüųńČĪΆÅb‰øb[tńÅć©§žоČoū[|üńĒ‚ÉŽėÖ­üæ°Z­zMĶ‘#GP^^Žņņņˆs+xņÉ'ŪōŚ«WÆĘ¢E‹pāÄ Ųķv<óĢ3ͳeĖé\7bÄōļßUUUØØØĄm·ŻX¹r%Ī?’üøŽó¦›nBII ^xįp‡?ü°YŁ]Fƒ¢¢¢6—.‹ęŖ«®’‚5oæż¶4žÓétXµj¾žśkø\.DܛĻ`0ąĶ7ߤ€0éņ(B’bĮ‚x÷Żw”R©šÕM›6 ½zõBCC¦N’ Ū'N„J„ĒqxõÕW±cĒp‡’’¬Zµ 7Žxc;¾“ÖŪŗuk\ŁÅÅÅŅ˜˜}Ä^J'Пžy-¦JJJ°|łrĮ¬ęĢĢLŌŌŌH«>€`&Łkƽ2Įæüå/ųꫯ¤ÉµsĪ9&L@jj*Ž?Žŗŗ:Ģ;7$1xš`8pN§łłłČÉɁĆįˆ;ÓańāÅøöŚkńį‡Ājµā²Ė.C^^rssįt:qųša0 ƒńćĒć’K.ió²ßHņóó„ŪO<ń6lŲæß¢¢"¬]»_|1^{ķ5lŚ“ ÷ŻwrssŃæTTTąäɓ‚wß}w‡µ‰ö˜?>”J%xžoq0õ駟BÆ×cƌm~æ„K—āĄ!$ć3;;O=õT‡žæF³uėV8)«7\^^ī»ļ¾Væ®N§ĆG}„‹.ŗ 8}ś“”1%÷ć?JŒÓ§O‡Į`€×ėÅžżūqóĶ7N:Å;šłŪßž†ņņrlŲ°G jĖ™Ķf…œg:ĀŅ„Kńģ³Ļ‚ēłÖŠ”CńšĆćć?† ųļ’qļ£ĢĢL¬^½ŗMūB:Ī‚ ššĆ£oß¾!%NĆ]|ńÅŲ³gO»&ÕT*īæ’~ÜsĻ= ]…ßīŹ4 ņóó±cĒŽ“Z†ŽŽ½{£¾¾>ę5ūĄ‘žž›Ķ øR1|µā€šä“Oā·æżm«Ūl0šŁgŸįśėÆĒĪ;ƒ?ņ ē &ĄćńH\7Üp^żuX­VŲķviR¬ŖŖ C‡ė}ļæ’~hµZ<öŲc`õõõ!+$ÓÓÓq×]wµy ÉdŠ+¤s“|UųwÖŌŌąy§N )kc2™šōÓOǼ6"$‘”J%ęϟ?ž8f~~~>śõė•Jó’ōĀ /Ä Aƒ¢2.¹ä<łä“ų÷撍ššōķŪ£FĀå—_.@‡ ‚›nŗ "–N‚×ĒācĪ=÷Üø¾WѰaưjÕ*|ńÅųå—_`·Ū“_—,Y‚x@ZŁŠZ½zõĀ?ü€žóŸųä“OPQQ–e‘––†©S§āŗė® ék5 >’üsÜ}÷ŻŲ»w/ ʍ²"pīܹŠėõ1÷U}ņÉ'1gμśź«Ų³g4 † † ąÖ[o Ł÷žlşa¬ßéļ~÷;‚q¬vŻu×”²²o¼ń, ś÷ļQ£FįŹ+Ɣö||ńű~żzģßæ_ź³²²pĮąž{īĮčŃ£ćūį’D!I1ž|¼ū6mZŌ«J„Ā’%Kšī»ļ¶k0•““ƒ›nŗIZŗ-ŸL///oóė&Rnn.śōéƒŚŚŚSb¶ĻóQS<ĻcšąĮŲ»wÆģ°ŪķŅ…ƒhĈxį…ŚōóļÓ§6n܈kƽÅÅÅą8¾®T*1hŠ ‚ MlžįĄW_}ŸĻ‡ššŌŌŌ@­Vƒćøø—ƾüņĖ0™LŅļūäɓ!ƒę>}śąOśS‡O¦Ž=W\q>’üs‚ •›Q((--… Ri,†aPRR2ąŹĢĢÄžóŸvķŁBHGŹŹŹĀ„ PRR‚¹sēF}Üāŋ”Ńh0}śō˜YŸ^x!źė룖łóŸ’Œšš¼÷Ž{p:čׯʍ‡„K—‚ēyØT*Œ=W^y%DÉĢĢ”#Ö5×ܹsńČ#`Ó¦M8zōØTs½OŸ>øāŠ+šąƒ¶9«mģŲ±Ų½{7žzź)lŲ°A*{—™™‰Y³fįę›oŁ1''ėÖ­ĆŹ•+QXXˆ““4äē燔„š7o ²ō^N­Vć£>Ā;#·Žz šūżP«Õ=z4/^Œß’ž÷ͦƒ–~†ŃVIšL&é1£Fjöõ•+WĀb±ąć?†ĻēCæ~ż0qāDiĄølŁ2( l޼RsÆ^½pé„—ā¾ūī‹ś}BgҤIøõÖ[1qāĘ×NK—.Åɓ'CJž…ĖÉɑ&Ųūöķń1Ė—/Ēøq㤸¹¹¹˜6mZČõŃ /¼—˲_Pø’ūæ’“Ź˜ČWŌÅcĖ–--–‰•W8‹–-[†#F“XD”PąŽ{ļűcĒ0yņäØ[¹r%īŗė.ģܹDmm-Ün74 z÷ī)S¦ą¼óĪ‹9±Ö’¾}ūāŪoæÅŽ;°}ūvŌÕՅL¼…÷óyyy8pą>ųąTUU”_æ~X°`4g4„ßµXŪ>Ņ÷×]wįŗė®ĆśõėQ\\ Æ×‹Ž½{ćœsĪĮüłó‘’’ŅģyūŪßp÷ŻwĒ\vŁeRrR¤I<ņ¦M›†ķŪ·C£Ń //3gĪ”¾Ļ×^{ +W®Ä¶mŪpāÄ 8Nčt:Œ;—^zi«Ćélļ¼óŽyē˜Q(QĖŹ‰ ’±ÜqĒøć޲ IDATŽ;¢~}ņäÉ1ū5 X¾ū_’śW‹ļ‰^ÆĒ²eˤ*,Ė‚eŁøV ÅĆl6K«īxžĆ01Ļ9ćʍĆ×_õė×_=®æžśßwɒ%ҹĆēóµųżŒ92®Ÿa¬r‚āŠ¶X«Śn¹åÜrĖ-‚eŗ†é°Ÿ5!‰¢hįPŹ•ģPĖĶÆ‡ö×C'[¶l¹vžüłKA¹Z–ėk±ī‹$ŽĒ‘ä³X,xōŃGqį…†Ō¢ ·gϬY³·ß~{ŌI3§Ó)ČóņņB6¶ ‚€/¾ų?żōōz=ņņņ0g̐‰¤£G"Ąl67Ȉ*++„IģXYpį†iu½Ę±cdžģßńļ’………xüńĒ#~r>ś(Ün7ž}ö٘s8ųį‡pųšaŌÕÕĮėõBÆ×£’ž˜1cf͚ÕīģŪ@ €o¾ł{öģÅbĮ`&Ž"eećÓO?…ÅbAnn./^,e:x<)mąĄ1EEEŲ°a*++Į0 ś÷ļ)S¦`޼y÷E),,„ĻēƒŃhŒZŗ”ŖŖJŹL›0aB³˲X·nöļß³ŁŒ¼¼<̟?_Ŗ“ Ų±cŠŠŠąõza2™0iŅ$\~łå“’érÜn78Žkqcs‡ĆµZŻaYšņĄh2¹Żn(•ŹVo æßžē;åµcq8mŚØ¾=āł}z<(Š„’<!„B!„4§P(„¶>N~߄ >9qā„€OvxĆ>śųƎĄÆóėĮŹNvš²CˆtP„B!„B!„B!zV„ +B!„B!„B!¤Ē”!„B!„B!„Bz €B!„B!„B!¤Ē”!„B!„B!„Bz €B!„B!„B!¤Ē”!„B!„B!„Bz €B!„B!„B!¤ĒQ'»„B!„B!„ŅAHŹū*Ф¼/!$6 €B!„B!„Bŗ¼hĮšū#=®£#‘ …"äõ£C(HBHāQ„B!„BéńN¶µuR.މ4šp#„t7±‘nGūķ¾hļ.Z°#üv“į÷‰ļžŗŌOŅy(B!„ŅIb ØhC!Ż_<“i™•ÜŅĜųyKYÉtN"„$S“~Rž1Öķh÷É_/V`¤%тį÷‡-Ś}‘^'R`„śfB:@!„Bbˆ50jĻ2śöGh0D!‰ÕŅä\¤ūāżéõĆļ‹7Y~»5)#™’HŃśĪh łĮó¼ō8ńvų×¢}é}"µ h¹_ ?”JeŌĻ•Je³ē…?>R`%ÖjBHü(BHә5- !¤'jiŅ)Žå÷Ń^+-M8…zbMŠQ’M!ķ«ĢJk&źāyŽü=āÉJn) 9Vvq¬lähϧŒdBHGˆŽą/xžovD»_žõhh«Dä"­īh)š”T*„#üóHG¤ēGŗ-oƒ Ō'ŅJ!¤hKöq{!į“kņū£=žBŗŗx--·ŽqcąWšsÖ A`<ć >–gĮó ”*=@”ŅC”Ō”*#”*”j3TŚT(Ŗąćbdē¶%£WŽśjBi.ÖŹŽhAŽhiį“uį÷q Žń€ć°Œ7ųuĪžc,ć PA©Ņ”*Źą°]„1B©TA„6Ę n̘‹–uė~š|#„“VKĮćHĮš€ĒqĶ>ŠGųcxÖ ŽqBą=ąYĄ{ š>€÷¼ Į >€ā׏ēLPØ @ jš‚Ph‚·””Śąē #… ‚2 •!$Ø”R©āž~Ÿüv<żvxŸLż1!‘Q„.¢„,āŲ™h<p".ąN¾qŽńžzŪž @£5P@”TA­1Ō=”J ”* Tź_'ź¢ hZ{;Ö}„Ņ™bMh‰å·yžć­ć«CĄS ĘWĪß6ąĒ8Ą³ĪąĮ8!\‡·W”2B„I…Rm3”źTØõ½”1ōZüØTé㚜Š'`~›BĪńf"Ē“…Ģq,|īx]uš¹kįóXĄų`üN°ŒlĄ ŽqĻ'¬§ƒ¾T”ź”_?”V› Ņš”Ö¦B«Ļ„ÖŠ :cohti-f GĖJnĖä@ēBĪVńō©bŹqœtŸ<°!?X–Ļó`YœæÓ!`ĄŁ¶ Ž%oƒ Ø_ĒLp†w_įŸó͟ j°B XĮ&^a† 0ƒSfš(”:ØÕj)č”V«„ĻÕj5”JeČēįĮ•J²¢$R’ DŽ—„BB.žI9ą9^w܎jx\µšŗźį÷ŚĄųųķųģųųķ`~ z“—R„…V— ĶÆ‡Ī. :}*“ś4M}aLķ £¹4ZSܙÉįƒ"ł× !¤#““šC<o|Īrųœå`¼§ĮxėĄxkĮ¬؈—ĄyĄrµ1§P›”Ņö‚Zßj]4)yŠ™ņ 1 €J­€˜“TŃ&ŅėSßLéāĶDŽōQœ|ó8«į“–ĀeƄß]Ÿ§~O=ŽĘ$œ?pŒćÄÆłNQ)”Ø“YPė2”Ńg#)ża0 „Ī˜59RVrxI—h ˆrvˆŌ·F z„Æģ`Y¶ŁG–eĮś­ą|'Įū«¦ ¶j¾JpP&ń{E©`”UŲ”…½ł€“šs ¤ƒSöŌ9Pس Rk V«”ф~T©TŠh4!AńcKĮėšk|€śbrv£!ØÅ%õ<§­öĘR8mš8k¤Ćėn€Ą'v0Åsų<ų<–«Ńša0åĄhī ƒ©RRūĮœ1©YC”ՙcN¶Eś~›Bb‰šŹŒ°~ų]„š9Źąs–Įļ: ĘsR*[Õ] ¬,ėė) ż‚Bµ¾?Ō†Ps”M ½yŌŗLiÓÅhY½!„ōD±‚į‘J­ˆÉ~ŸŽĘ8›Źį²„Ū^Æóx.Ģo§Ķžė«ė«…/lnN”JĘŠZchż`0‚Į<­!fF²<8"ˆD Ą‡¼'Wéö¢­šˆ¼J.tE‡x0~XoXO„@5L ”| °PP%÷[ģp*EFuŒØ;s'p~ |žlų„>š*śSõ­ÕjhµZh4éWČo‡÷˱"rŌ“³ @é@±2>ģ„°YNĄa-‡ĆZ{c8֟”¶¶p‚±:į°–4ūšĪ˜SZ.Lé¹HˁŌĢ!HĶ•Ju#/Ź#„“$ęŹ¼ö暌‹ą³…×~Ļ$³¹‰%p`½•`½•€u§t·Bi$“¦‘ЧĪ4*µ&źŅłh}“ōzŌ/Bŗ°Hec—Æāą²W”©ī0ģ–c°7ƒ×U…`ŹnĻ'pn\%øä×ó Ø“½ 5 †Ž<Ęō‘0˜r¤I7y閹É71 ©~=ÕŖ'¤{k©T`ų¾bĄƒa˜ąGŸŒ§œ»‚Æ ö4]xUG¢Ø RŌ5HA €Ęo„דrąQöÆĪ –7Ōj„ ˆV«•śey@D¾B$Ņ >ŗ¶'g+ €ŅN‘&äxžƒĆZ[Ć 4Ö ±¦NŪÉ$¶2±üžFų=h¬łEŗO„ÖĮœ1 iŁ#‘3½śåCgHYS˜"„hA€§NĖ~xmGįµć­Nf3»,µ!`ۃ€m\§ƒ{ØĆ”1„>}kŻXk€eÜIle×Ʊ~ŲŽĀÖp…ŸC”P˜:™9摮{,²ūåĆhźw=a:9ŅsE.WĀĀk+„³~ÜÖš;Kq¶dčv$ó€qć<OĶ:(T&ØMc 5ƒ>c2tĘŽqצ>™’,-MŹÉ'ę¼īF4Ö‚åōnXŖ÷‚£kōVXöƒŲĀYż9ź4hR†CŸ6 )c”7¤†L¾E+Ń"Ÿ„‹“źPDēB’+Z饚žUš`ųĒĮ:€÷L°Ōż7w) R`š 8^ ³¼Č…[9 Ż čtŗC\%"ļ“#•Ė’÷Å"źƒIODBāiåvŌ īŌŌŸŚ‹śÓ{Įh0Õ‚ĄĆmƀŪ^SESō09ƒf"³ĻØÕŗØ'fZŗIHĻyĆņz8źwĆŻų3<փą9_’[Łóœ Œ}/ū^ø«Ž†R7ŚŌ Š„åCŸ6 jµ&dmāŠ‚!„Īm³ŻęµęYXk Pz«÷Ćm? ˜w,µ#`߇€}§TPźBgCĘX¤¤ŠZ¦%Vy*ĶBHr…ĻyD *˃~wüöƒ`‡ ųŠį,*?›D* ³¶fŌŲ Ą—gģŹQą5C”× ×ė„`Hų ‘h}1­ !=@‰"ü€eż°T@ĶɟPwj7\¶Źd6ÆGņŗjQyü T’*µ™}&”׀ič=pŒ¦œ—lŠč$MH÷)čĮśmpYöĀVµ[ šInåYDąĮū*ąóUĄWæu4©“”˘Cś)ŅŅ&‹rŌBŚ+VŻyqBŽćX4Ö ¶āŌWžˆ€Æ)É­>‹xßIx}'įmųVU4¦Q0dN)}HČä[“ øHē ®’-­ö`YVśČ0 |Ī“šYw‚qģ“VyäŅ©\Š©Ž8–×Įf˃]1 ‚nt:= †3yÜŅŹ H“ž„ „Č4ĻząŠXS€Ó„ßćTń|¶d6ļ¬Ā±^4œŽ…†Ó»pl7’:9ysŃč"˜ŅśĒÜ\QD'iBŗžH¼ŒßWĆŲk€§qKb ‰H`›°nEĄŗNu4ęü`eńB:Sų¤\ųF»,ĖĄZ{5'·£žŌ¼Ö$·˜8;ū0ö=pز 6…1#ĘŌ'ąäåYbÕ©Ńł„Ž«•Æö`~O<–]`ģ{!ųĖ’Ür‹ZéG¶ž€`yŽp8GĮ¦ ƒ!z½^:"õő‚ŅŌ“ž€ ä¬>'zœ.Ł æ—2Čŗ·£eą=˜3‡”ļą…č;xž“oˆ|ć^ZŗIH×>Č⸜u;`;½ž¦Ch„G×Ę6iśLÓwpk²”N›Cö|茽)‹—ŅaZZķĮqœM'Qqb#ź+~€ßۘ䓘øF°¶ą°ż‡ŗ74ę‰Hɞ½13āœ˜‘¬V«„ėūšk|Ki›HyĖqX–…ßÓ·å'l»Ą{K@„»µŅL])€R0ü÷°7 †U9 jĆ@čõ”+CĀKe…ļŻ$öĆtMOŗ+ €³Vų‰æ©¾åĒÖ£Ŗl­ōčāœÖ8­%(žåu¤fA’”‹ŠoČ|h“ƳĘ:Q’Hį}­ĻY [Õ×°W6`OrėH[ŒŒåK0 Ō€6s ™Ó Ńź)‹—Ņ&±J°p†ń”¶b'NŲˆ¦ŗC ‰ønˆ­Ó“6Ū÷€v(tS‘’1ZŖU¾:$<9|õ7MĀŅ:ņ~¶łŠ:6Ų×üp7a+8÷€Ve÷„ŁścŽĮåė ›k,šq0¦¤Ā`0HĮ­V+õÅŃV…Š5=éŽ(BĪ*į%®˜€ •E[P~ōsŲ,EÉliAąao8{ĆœŲ÷*zšƒ#~ƒŒŽ£bnč%¢5!#ŅjWżOh:µ nėAŠÄU!šą½Ēį«:_ķ‡P™§AŸ½ŗ”ž!Y¼‘²ĒØ/&„-—`qXĖqŖųkT—~ĘļHrkI‡8Ą_m|õ&( c`̚ £¹4 +™&įihłj€ĻWŻįmųӐä“ĪfŅŌƤ©Ėļ€Ķ>ö|hŒƒ`0`4CśaN'ķŻD}0éĪ(BĪ ĶW{GŁŃĻqŖd 8ʛä֑ŽĄ±Ō”}ƒš²o`4Dß!ēcąČ‹”7¤Óä! Ž×¼ °V|[ÕWąW’[G:ggūnūVøõc Ė^ }Śø oååL"ÕØ?&äl­ Ļó`˜ŖĖ¶”¢šSŲ-Ē“ÜRŅ™¼ pļ…ǽnķPh3f!%}˜1 !ŁČbp&įiYxą#¼Ō˲p7ĀUū5XĒ<“ä“DS+d닐b8}½awƒK7£ F£F£:.d…žŲ‹„ ©&Ż@H&?鳬Ē7£¤`-œMåInéLē)”z åG>@Ÿ¼Č½©™¹Ķ&ßh =!#|"Ėė(…µņKŲ«·Š`źl#š€÷ü§ŽĄWŪźō…0d͆No É“×wūb9ź‹ é™b՞ų\8]ŗåG×Įė¬NrKIbńPŠĮŌĆjéeʹHɞ£1%b6rx $|Å·ˆĪ%älŌҊ€ßgŻ6xźæē„yĢŚ:˜Q?·MPļ<ʔt)^Ŗ0üš^(ż{ĮÖBƒut3a2g!%%„ŁŖXeY EHŁ[Bzy+/uŲ,Ų€¶Óą®Ż£½ųHŪØ”z ‘%”Ń5 ®©p›ś…Bäe ÕjµtMiĻ?źƒI²P„tkņ¶ĘRż²§Šæ„Ąi‘ßS’Æ¢²šc y9޼:Q0Q „3">ŠVĆē8‘ä–‘nI@įś~÷.ųLs”ĖŗzczÄ„ō!¤ū Ÿ“—ŗ*=¼•ǿϒŻLŅĶ(ą‡Ę’3ŲŚĆ°X'Į™1&sŗ4 'ÖØ—o˜NŁČ¤§Š“Į¹TźŹgƒķō—p×n†Ą¹“ÜRŅS(zN K(F½s ,ī隘²‘’’“ɽ^/­ ›¢Ķ«P’K’ ¤[’Ÿš]ö*ß’*Žo¤Ąiµ€Æe‡ŽÄé¢/1pŌU8| “:}ÄMziŠDĪ6Ķ÷ų8€†ā·į±MrĖHO ¼P8æAĄµ~óBč²Ī‡Ž`¢„ō„tS‘&äxž‡ŪŁ€’CļćTŃF |vSĀm`7ŲŗChhʇ3c*ĢæBL&“4'_BŁČ¤§ˆµĻšĮ^ż-œ§?ĻŅ~J¤s(<ś€å‹Pgz÷4x½éW„„Bh’L!ŻJxą£šē7QYLĖēIū¼”xUÅė1hō5č7d“Z­!g-yėsF]ћpÖżäV‘žH!ø”p¬‡ßµžŌ‹ Ėœ ƒĮsEõƄtŃźĻü^œ,üEæ¼ Žõ$¹•¤§QĮ U`'øŚhhšWę¹šxš8Ź"#ĢēŖBŃĻ’Ąé¢Ļ0tā-Čī7)āzŖ%LzŖ ^֋ś²µ°–žg’Ü2ŅÓ)y;`ū>×.ų3–BŸ:,jYųŹ<ź‡ IŽhrÕå?¢pļæįuÕ&»‰¤‡S){’[HHRĮĄ$ģCĄZŒz×yp§EZZ|>L&ŒF£t.”ldŅ•ÄZõįµ£įċ`<åIn%!±©• ņRwĮī+Fuż\x½¹šł|HMM•VƒD DS’K: @H—^īŖüŲzžé%° mšHŗĘoEé/«P[ž †O^Žō¬ĮŅ ›j “īF¾ŹĪYæÕĒVõ5$»Y„D¤ꀦ—įqM?ó2RŅ„Į“8y%‚4x’£~˜ö‰6!ērŌāšĪēQź§$·Č“J;4ģøė‡Ćėž Oz¶‘g$S62é ĀūZqŸ&ąAcŁ{pÕ¬§v¤[IÓ[`Ö}*ēŌ{¦Ćļ÷Ćl6ƒa0 Žć¤ ˆ<±”ś_Ņ(BŗłÉŽf)Į/Ūžk•»"]“»é8 ž{ś[ŠÜ1æ…^o Z¤ې÷·ŒĻŠŚÆĮ^½5É­"$ŽT NYęĮļĻ“‚ ņžW§ÓI× ņłŗŽ'ķA’p!'zŽÅ±}«qb’ŪTĻ’t[‚Ą”®ģ Ųj÷*ʇ! IDATbHžŸ‘•3JŖ%LŁc$Łä«>\–żØ:ü X? ØHĻ †&Ļ[šų&’ŗ$=$"Ļā@ĮhBZ>!Ēq<. n’;Ŗö&¹u„t •ĀLå6Ų+Qė ŸĻæß@ W6²ˆĪ#¤­"•¼b?,„ļĀQõ9@s#¤3ėģ©Ł€ ū$ŌūĪĆ0`YVŚūFœO ‚ˆØ’%­E’PņA•Ė^…½[µīH’[EHĒš{Ŗqü§‡3ä ½FcJČ&étā&‰lfP_ś>,eļӀŠō@Œü>ų-§ŠäżŅGĶā„`4!‘E+ĆRU¶;žć·'¹…„t,…HזĮ竇„vüžĮ!%YÄ zŽAÄ’:öˆÖ×zÕØ?žü*/HĪ*%!æĄā®FuŻųż9!Ah±’“™Äėx€Jb‘¶”IˆšżÉĀM8øćąo’[FHĒxµ%ėąl<‚!ē,GZFioZ BEŽēz'QUš$|ĪŅ$·ŠĪ„SŌAėy.’|ųÓH¼āRzŚŲ–ČĀÆÓ9ŽšāČī—QQųy’[GHēŅ«]Š ß ±a |¾)šł|!ŁČāDœüzžJb‘¶ˆŌ×r{ķNXŠ^ĻҾ|äģ“R‹ķē(kš‹@`XH9,Žć`0@Jh¢¹ŅV!N~¢÷y¬Ų’ßæ£ęäIn!ĖŻt Ē~¼Ę܌>¹³›e! šō¤S„nt¾5Ē^‚Ą’Ü*BCfn <– 4śÆ“–1‹Œ6V$$(RÉ+›„ū¶>·ćt’[GÉćå°õ§FXķ,Ō*śēč03?:­2ŁM‹Éēē±mÆ•U>¤šÕøč¼l¤šZ7Ķ”Tšč„?‡«u¾ó¤• ‘²‘ĆWŹŃy„D©ÆeJŽ„£j#h£sr63h¼ł-ʚźQēŸ² O<äż/ ‚VSPÄy(£Ŗ°C-×_żųĮƒłõłrŠ(·#}ķ¾H课‹‘OÄ5TĄė’ [Ćń$·ŠÄųģu{įu[aH…āĢ I”PDō<»’Ü:Bŗ…Č4ւ÷הޙ ž߆_³Ÿyõ½)ޟkKs[ƼņʱĘĘF/¶…ƒ‹rš!Ź­!FœleGæĄ”’žg“Ż,BL€õōVxģå’æiż©&=épņ‹Ć€·§ü^;Õ&g7­¢ éžÕ°5\„@`JČƊz½>źĘŠŌ“³ü:ēy°LG÷¾†²Ćko&ņj°sæ ^?t³S&¤āņós`ŠwŻÉrQƒ5€gß8‰ß_3C’Żœ.åŠE90§ØpÅ9xąÅزӊ+õNv³¢Zr^¶t{Ņ(3ī®õÖr²“mz=½Ś‹~ŖļQ×8~’Äf{‚pžē„}A(™Ähę8Žś½Ø/|<ėNrėézś¦UAļŁˆrĖ<0Ližų?$^·ˆū‚!ń”épņ‰8&ąÅķĻ ²hs’[EHrłœ„8ńÓ0ö6ä œ"Õ¤—œØ$i yŸėj<ˆS’.Š”äVŅ5( 2…õpX+ŠČ\"Õsēy^ZJ/Æ),¢>˜ōdņąĒqšø±’ūGŃXs UÆÓ` ąœ1f\²°7jźżx} ¬ ž|ż NjyĒØŖóć«OĀķ”’±čuJŒš‚Źj/¼>^†PUēĆųfhŌ Xm ŠNz`NQaäąØÕgśĪ&;ƒ#Å.h5Į×ĖR(w£Ž@ŽöÕK?YåÅ©jŅS5=4ųZ†ĒĮB'XVĄąōķ„‹Łę4óÆÓķ¬&¤Tšč›rn ź³BjŅ˃ébR“<˜N×ņDŌ,ŠĢ²°” ŪÉw ¼ōøĆĆéę`4Ø`Šuż²\€įaw²č•ٶ€#!‘dm0h6ćøe6fh°dœ,¾/ˆXÖ kx@H‡’OÄ9›*±ėėūį°–%¹U„t ćBÅ”ĄcæG-X“  æ3YeŹÖ””x5*yEH©Źƒp;,hb’ “5‹Wœ¼Ø&=“|2Žēy4Öþ­Įė®kÓė„™5ČÉŅ"'K žšŅšJø<LFUĖON‚śĘžžO9.;æ7>łŗ6ŁĶéņV€J„@q…o®ƒŪĖšŌ=&+qćł·*0\¹(lØĮ®6 hÄ»_TcŁÕ0uBö²cõ'U7Ā„Ę&ĪÉĀōIéųū«å`9YélžĮ‚ĒV ‹YŚŖÖ€Z„@v¦¦C¾’,c\žoŠP;S ‚„ƃ rt-OĀĶLĄ‹ŗć/ĀU÷}Čć¾ū©­*Ļ’††å±āśA˜2!-Ķn—ĆŻOį’³wŽńmUw’koŪ’·ŪYĪ ‰³C&$̰K[č€Ņ„-m-O[ ]ŠŅĮÓčSVKłQv#Hģ½œÄŽ÷¶eɲ­½ÜX–m9Ӊä¼_Æó’}uĒ‘}uĪ=ßĻwL,4r÷Wņ»;‚s˜`(ŠJŁs¼ŌŖüLĢ\Ļ”f'-Į =Äē®ńW«ķŃÅ3¼ąxD0`ćw6Vmdēŗ_ō;¹WĮ#”µź-¼ĪZ†}S’%¶pź]˜Ää-čŸn#VˆĘƒ„½žƒĮī’@0¤1(źQyŸ£-p3”ŠČ> ØŽ©Lŗć°ą| Qޚ’ŁæńD"Į¹FN¦†h:œ!Ön¶3e¼‰÷Öµ2cbs¦¦PQėå“-vœ®cFøraJ…ōżjhńóĪZ+ĪŁn½& µJĪśmmlŪׁV#ēŠKŅ;ĀĄīC|ŗEŖS2v¤å‹Óńś"¼õq õM>’Ć.Čķ™Ž*ͬāG·02OĒk«„r,<Ž0%•n®:šbŖÉźē±ū cžŽ+>¶rŁü4n¾2§;̃:ĀīCNfNJāŻu­LŸ˜Ä·æ4,v>{{O·¶ń›&+MĆGl¬ŁdgVQ2ūKœ,œeęÖk²cūwŗBTÕ{łßŸ#%éÄĢūKœŒe@!øqŪØé@%’„¦Ö¹ƒĆcH¼7rWZń,/€¾B³ßŪNćž_ćļ<Ųg__ Bvŗš—’\„ŪęŁ×źyąń#¼ń·ÉC:Ŗ¢ŻāĒæ+”Ł`b”q°»sĮÓl š½Gam ¢”KBŚķ7å2oZŹ`wķ˜lŪ×ĮßžSKU½—d“’Ÿ~{8‹.¶ÄŽWŹĆLŹŽN…́Õ:§‡Ņ5īĘGsBō˹_'²ÄOņ„»_bˇ?ā‡@p \¶ŁökŚlµø\.|>@ 6©ĒOčAobe!µ»~.āąQĖ;I¼„Ó¶—¶¶6:;;q:x<@̰•Øš­@p®Ņ[ü…B”ķ{•½Ÿ?6`ā€ŻD&ƒ$£‚:łĒĖuäfj1'«pŗĆüńŁ* :³&'óÉf;ļ~b¤*?[…\.ć²ł©¤[TØUr¶ģigÅĒVęNK!7SĖ__”¢Kœī0Oæ\Ē„1FĢ4£ÓJĘę?o„¬ŹĶ²y©Œ.Š#O`—ĖeŒĢ5?ŽÅšMvŽ^cå×OU’dTƌQ&£2f …£TŌz˜U”$½gP0±ŠHi„TÓąP¹‹ŁS{Ž•»ČÉŌ’•&„±]`Ąj™¦f© §»»^¤QÆ@§U°i÷‰„õŒD¢lŽŻĪœ)ošÓØä7ąn;@ss3---ŲķvøŻnń,/zŚEĀį0^g=õ»īM(~t”ĖŠjä¤¦Øø’[ĆQ*dlÜÕ~{}rD£pļ£%ŒedÖ9©r!ą÷‡ihńóō#ćyīщLoāß—²ædhŪä4j9÷|=ŸUĻLełāt~ūt%>¤Ē>2ŒN/Ć"_O«µ›Ķ†Żn?ī3¼{½ ‚Ó¦{’³ēó?SupÅ`wI 8'øė(ßöłE?Ē9¾Ēd-¼żŃuų=VjwżæK¤N…,@–ü-ZŚŚ /ī“S8Ž‹Wäsœėō.Ą Ų»ńĻŌ•¾? ×ńxü·®•±# ˜ Ņ3Ģ—¤±x¶d<_½ĮFFššÆ\+yųĖd2^’ ™–e²«ø™ īüņ°éÖl²sŻŅ Ģ0°ć@Uu^RĶ*Āį( gZz\oė1*_Ļō‰IśŁ.4ź›}čµr–ε°p–„OZ¢|¢Q)Zęd6G€@0‚×!ÅŌÓŌŠŽ¢¦ĮĖķ?-ŽmėŖŁqŁ‚4Šøųł_ʹ㠹LoB.—ń­›syęµz*j¼|óę\ ĒH­¶}ĮP”‹'Ÿƒ¬B&?iõ.ZB“cQ ]·ųHį|aŅ[üšt”Óøļ—„m'|„BFFŖšgUė[Q)å|¼ÉŽBx` M­~ž|©–ņò“ÜłåaŒ9ēčņ§ē«9\į&%Iɏn+ hœ‰;<÷Fo˜¹ÓRøēėłČå2J*Żüå_5ŲAņ²5üü»#I·ØłĒėXæ­ „Rʕ ÓłźµŁ=ś(“Į£÷’•®įįæ–čßPpzähI2*łŽWóŁsŲÉŖĻl3 v·śeŹųī¾}ķŗl^ZŁHC‹ŸQł}F¤Õ¢jóSŪ² öģ‡cß»®ŗ ];Š 7Bœ2=ŠūŻlżų“Ōnä^ ēį`Õ{’€oĢ·Č*˜KÅ_DąŠsĢõt”Q»ėē„üöAī•@pn"“EČR­„µÓA[䲄łÜU*UĢ€%ņ¹ ĪEząõy;ٱö—Ųv Ų5>ßŃƾ'V{€¼l ß½µ;|¼8ŃÜ`İnćDažNW7L£ÕĻØ|}ŸŚõĶ~ܞ0;öw’a°½3ȄB5’x„Žoݜ+®=y¬‘g^«gT¾žyӇvŚ”Ģ7nŹÅd8v ÅŃŌe]u ŗ~V*äȏž#ƑžŽ·r9ŒiąĮ;Gō9ŸV-ēĮ;G°zƒææTĖ’Ü9‚Ń’˜õۜŃ<żr©6į± E½¹ŚŹ5—¦÷(Ä>ŠČd—RJ‹ÓEsó¬„9éy CÜłM¢ƒ­»i)ž ‘°÷¤Ī Fh²śI·hhhńńß÷šųęrÉĖ‘ĘĻ_žo9©)*~öŻ‘¬ųŲŹOžXƊ''#—Ėųż3UtŗB<üƒQtŗBd¤ihjõ󳿔sļ ĖŅņė'+] głātžü|5cGøśöt*ė<¤˜”ģ+qņĘź’Ér©6C"²Ņ5§÷GœqFÓak PQ딓ŹC‡3Äīƒ÷ż¾”öĪPĀz ļ­k%ÉØ`įL󙳡½Č45`wo õhNśŽ‘ Ńh4V[ŖūóɅ!ī<$QŠĮĪę “zœh4tœ£{āõGųūjP*å,˜‘Ā««š™11‰Æ]Ÿ@uƒ—ƒe.Žżē4ŅĢ*ƌ0pł7v±ė “Ńł:6ģlēÅ?L¤pø>vĪg_«ēāÉÉ\æ4€å‹ÓŁWādłātÜŽ0…zʏ20~”Eāņ„Q«äLoŠ ‚s“&[€¬45Ͷ~¾š©’3\^«ą…·xw­•»nĶc‰“ž¶„OMĮ’¬båZ+ĻæQĻ÷暏J%G§UĀ}æ/%?GĒ.Ļä_+øēėł¼“²‰}%NīųB.V›™LF į§*ćÖåYŒŹ×ÓlóSü(«ö`IV‘’¤:ę~Y)m(ė(±-č3īö'@ gRDp ćŅ;ZĖŲņįx]-ƒÜ+ą\'Š­źUüž& &ŽAŗˆ/Ø(Oń «ö†µ4xœh4<ȽĪ,š#tų^„Ķž…„^¼]©LÄ,8Wˆ?Āį0öJ¶|p/>mĄÆ•nQ3mĀńSNt üqy½½>ég£A^+§©µg-µJŽR)ćš%é±Ā罯ū³»Fņņ»Müó•:žš“1,žmį¢B#ž£’ ;ŪY8ėģÄ/4rEćŒ|“ĮĘč=Ķ­~ŠĖ\\½XŠŠ˜rQ~.„^ŃiåŲAŠĘšxįĶFÖl²³l^*_˜gˆœ Ķ­~Ņ-j¢QÉlI–Gim •®Įé !“IQ$½©ØõņŁvwŻ2 {»tõŹHg‚Tƒ „÷sš[f÷[”·‹®yDˆ ē‰ÄGĆl„=©gõŚ&Ėn߅Ėbx®Žæüll,²M£ī¾Zü$'©H3KbFNA®–Ę_LDU ļqīšF_LÉČÜÕļeóRłūKµ J.#„+œ<Ī„Z%ćĒš³»Fō®ē[ö“³«ø“æüĻĀI`~üĀ˜SĄ[«[ųŃķ\6?•+¤±ÆÄÉźĻmÜzM6o®nįŽ/ ćŗ£¢ĄīƒXķ^xt*•…RĪsÆ×ŠŚ`Ņ#‹āęŪ¶Ž o˜å‹ÓO8ZčÓ­öXŚĢć‘fźd¢|=ūšę'Œéjju÷ż+D@'Eü`bmŲƖ tv·‚ógĖgT= Ÿ|WĀ"¼Āwa/8·Õ¾GÓįæC4rœ£Įɒ¬®Gx»ż¦>‹(­VŪÆĖ‹LŒĮ‚”JońĆŃZĘÖÕ÷ć÷ nŹÄ¬4 ›÷tõ­nšbŠ+0čdghų|‡ƒP(K_$“An¦–’ wB¤kŸĖ¤²v³7Œ^'=#e¦Ŗ™vQUõ^!€œA¾pE’ūļī~ų0įH”eóRcyŪÆ_šĪŸž«į‡æ)A”±x¶™[–gsŪ 9¼ųv#o}ŌB4 _ŗ:‹œ o~ŌĀŽCNäri·ß˜C£ÕĻoŸ®D.—įDø~iFĢ(Ļ oÖÓé ńų³Õ±m·ß˜+Ž~&IÖu —m¤¾uvŸt,‰Ä‘’åü!‘ųaÆy{ł’'W|9'CĆļļ/$%IEFj’‚ƒĖBßKŲÓk8=a\ž:œŽAoNwˆp$J§[d†ÓÅ¢«n»1­FĪožŖ`‰“££^Į?sæyŖ’ÆŽ_Ģß×#¢D0“¹ė—‡šų"“µ¹óĖƘ=%…M»ŪŃkå1ńĆéŃÖä¢ŃŅÜ*“ĮÄ1&j}D¢PÓąeŅcóVŌzHIRńłNiÆoöak 0wZ æ~²‚ …F®Z˜€%YÅųQ~õdÜ3šĢcÜ× &k7·ń_?įϚbp3)k#{ęõs”ūū DC ‚¦‡ųQæ‹Ķ>@8xr9-Įńń“ķ rO€‚¢»{„Ńw! pń⇽śmšKžędTąÄ1©[ š­¶śõ&S©$ÆK1 †"½Å{óA¶®~€ æs°»Ęœ©)¬ųø…—ßmbT¾ž7W·°h–d ž>!‰’¾×ĢS/×2ŗ™Ŗz/˧³l^*’y»ZNšYĶĮ2_¹6{{-{Ūž«c‰“t‹VĮŚMvtZjµœG\\½(-a_6ģtŠé’Œ‚›w;(©tqõ¢ō³łē’d„kų÷&&|Æh¬‰'~6¶Ē¶ÜL ’d 6G€d“µŖŪ0›fVóŲż…ŲtZĘ£ÅĖēMOaʤ$:]!ĢÉ*”GSģ|’«łtŗBCQ,É*d2ɀöŌĆćqt1”h5‰#:~woį@|üSʤu3Œ-Ō¶Īź1wD"’ĆJ¢”,B9·I$~“Õ­:%ń¤śFcśzćI6©pyzF–8Ż!ĢI*’ŒJ<¾0`¤Ēw1Ť$?GÅ÷¾’×ūtČepĖņl¦OHā›?;Ȳy©Lc$;]ĆSē·OWšēŖłæ__tҟI08Üvc.©)*FčI1%6÷v8„Ōl]ć2Hi Z¤ŗ[”pƒ¾gØöĪ.wˆu[ŗ)–ĢIąŅ9:œ!žų\5[ö“ó«{F!—ĖųćOĒņ›§*ųʽūyģž1̜Ō“čK+™z‘‰‹FūŻ'£›)¹ŁS? čÜõŸV\ˆ .BœńICå¶Æł‘p`°»%œ·ųŚ÷Q½ē ņ‹~ŠĒ?y‹ÅÓłIü’»µņU¬Gžģ. &u+ņĄ4'Aŗc°`(Ņ[ü°6ģaūGžŃHķ‰cLżXfLJ"#µ;ķEJ’’ū¾9œ6ŲØoö±x¶™+.‘ ½NĮżßĪŖO[łhƒQłz¢Ń(󧧉Dټ»µJNŃ8#2D‰bk pØĢ…%EͽwHé‘2¶ķļ ˆ°x¶¹ßčGG¶Ž f˜ G µ-˜p?Įń‘ɤtd'óžF-Oø=Qt‡R)ė÷üC “ÖĆpŁŖl3ūD€€AĪ'G~¼ƒ½üŸœiG„y:œ®å5Fčiw†ØiōQX #'S‹J)góīöŃOćFxūc+įp~æ5=ƌ00b˜Žź/zžKviüņÆgō3 –9S’Ž„ńt½ļöFH9ŖIø=a’MJ :)ŠČåīYæĘdT’“”éWp¾ń² f%qēC‡xo]+×-Ķ Ķ¬āÆæĒ3ÆÕóŠe|šÜ“„u¹j¼¬ųŲŹ3æ95”Ķbō05w »ėēö›†° !‚\ŲDp\āŚ#³kŻoˆDN® —@ 8yüĪŖöü‰ü¢‰¤÷© Āw>Ņ=ęFh.y{õƒŻ%ą‚Ā vz“ū }Rb  Ez‹Õ›Ų¹ö”3ī¬Ō•3>×ĒåļbÜHćF&ör•ÆćžŪņūlæd¦™Kz¶ĪJÓš­/ė³ļ’Ł–œ@žšk/ķŪ7ąt1hüŒ2o£Āź7Voƒœ(Ī{n‘0ņ£ö½³"~€”Žož 3æx¢œk/MgŻÖ6&3Å¢G.›ŸŹļŸ©¦ŗĮ‹Ēaü(W.LēōüųŃRęMO”“ŅͲy©Ģž’Ā#Æ`ÜH=®05>&5±q§ƒ:ÉĻŃņŃF;Ó.2%ģĖʝ6ījē`¹›Ŗz/®7^žÉ‘.kČc2(IIRQ\ę"7SrT8\éꊩČå2ņ²µģ,īdŅŲī’żØ<OWypŗĆ˜ Є疄eĮ 3%•n®‹Ū~ė5ټšfM­~r3µ=މDįw’WÅM—g2¶ŸēƒĮbņ0){+{fsæųqVŒ½B“ų‡¶źĆ°ū³G‰FDń]ąlņTQ»ļO ›ō#¢Ń¬Ųöų”0Ą?Ä/¬š’ƒ¶šƒÜ#ąĀD§ģ$'ŗ‚zū ōēIb  .}ďŖ’ųQ ĮŁF§2ʲ‹2ĒLL&sČ9@"ń£½a-¶SL{ÕÅø‘¾rmvĀ÷f%÷uĻ(^]ÕLI„›3ĢÜtyf콟|{8yŁĶ”×xČN×0n”“’g7×?lįp…›q# L½(‰H$JŃX#‡ŹŻØ”2žöŠ8 r“D"Qöv²æÄɜ)É|éŖ¬ŽŻ¤ˆ€ÜL ¹™ŻéūKS'ZČdpĶ’tžžµRZå”¶ŃĒ•G£2—/Nēł70č¤$©š",_œNv††Ÿ<^ŹĶWfak  Õ*øvI:o|،A/„)ܶƃÆ]ŸC[GWßo¦hœ‰½‡:1'«FóżēķŖė½ĢšĀK+)efWš“!3ÅEQd{gó¹]Ō¹pˆ _āTV°wßłē‚³OČ[OŻž'ˆNŗWx!ŸĒÄ×üh.}^ˆĮ £W9ɍ®¤Īvżq Xb  ½ÅęŚķģüä—Bü:HaŚ.Ž“žųŗY¤ĆŚō?Āį0-›žź’Ł IDAT±–ž/D#§uīQłzFå'6öNß7śB§Uš›rīÆVÉ¹ķ†œ>Ūó²µÜwGAŸķ7]žÉM—÷Ü6b˜Žļ­o4^o&31y\āčĮŁĒhPrżŅ TŖ¾"TVššĖō¬‰õ/ę¢RŹxėc+Łijžüå8R’¤:w·^“M0eķ–6’J®»4¹ )Õ«u¼ŗŖ™¼,-_¾ZĒ k7Ūńł#ÜxY×/M§Õ¤Żā„•¤™UüļĻĘöØMÓE§+Ģ’Łš[ż±mnļ©;\g[œų‚;8Ü2čŽųˆc…}a!;N“Ē5E\SĘ5ÕѦ>Ś4]m͚5·,^¼ų¦h4ŚćNŠ’żXļk["Nt?Įń‰_PU^Şõ=ĶÉ] œJ]¹~D²9“É„N§C­V£R©P(1 &šsŒxń£µņ ¬Gž9Č=]ø)Ōł®Åœš‹Łl&))©Ē¬T*Å,8ėō?Z÷³uõ}„ƒŽĮīš@pZCQ” ”p”†>„t³šT³Šśf”°d¬J6)ū­C3ŲøżjŽ“N#ŒKFFééé˜ĶfĢf3F£ƒĮ{ŽW*•b¢$?Z÷Š|ąa¢QU ŠŖK§Ź1•ĢĢLŅŅŅHMM%%%“É„^ÆG£Ńˆ±÷‘Éd'¤ę'Ś/~[QQћ„„„m€/®y{½śÆ8Ś‚G[(®…ćZ$®Eµ”ł“ TāTõŸ²ē³Ē„ų! BŽ:=~$©^Čēń⇽śm!~C £ŗÜČūŌŪ»3÷7¾Ę/¢‚3Eü³z$”ĶZ¶~"ÄĮ9AE­—ęV?6G“QɒŁÖmmćżu­ø4œ@0Ä#«÷å+SX¾ČČßµqØĀŪ®ÓŹÉN×0cR2W-LĆęŽ@ŗY•°ąīŁĀ  0ʲ‡2{_äų×.ā qā9~h/~øŪ+h9ųŪóFüpyĀt Äķ&8Ÿø(Æ·ļ --Ņļ½#@āŹ…‚@=ˆ_P5Õlaǚ‡É`ņTŅpš)¢¾×ļ>b?wˆ?ŚźVÓ\śAī‘@ HD’¶ģČū4“.mė-BĒ/¢ā’ŽŽČķö*¶­~€PĄ5Č=ė‰ÓfļįNš¬~­~lŽ ³Š’¹öŅtžõV;t‚ ,É*~ó£ŃTÖyyie#½ƒNĮU Ó(ČÕńŁv:­œ4³šŒT5F}āā«‚”‡Ūęóö—8±9‚\wi*—ĢŠńŅŹzŖ$ćńČa ®šmG+ DČ“€QŠP5éX: 4jP*`l^;źh;óŠ 'UŗF['4X#TÕ{•BM>õ±n›„RF^––_Ü=’`(J[GģtĶY5ō&鿌Œģ„ĀÖó¢ż„ań?”č-6ū=VšŚ£Åjķ)0÷×ŗćļłˆ@@Ļ ¾µq[?zHųüėĪG‚®C4•žĘ}#¶­÷Ä-OC—xńĆeßKSńŸ„ų!œ¤šv®Įf»,aAÅ®W…¢{(ĘaĮ@Š;ņĆė¶³mõOń{ŪĪj?–¹(­ņPYēĮØWp÷-Ŗjm¬Ż$ą’ ąw–S·_Ć2 'ŅR@JĮ _½JjńLåµĒĄķ—’”xųÖõ`k‡VŒęB=L]ƒŒż„ҹōZ×-RSŪ¢fĶf³§$3føA¤s9ĖŲAŽśø…]ŝų¾ūE5‹§ųį-0n8˜ćj%/ž1š×W)„Öuž®kD"QäŃNĢ˜= Źj#,s‘¤i%ąŃńżß63,KĖ„B#³§$“w†Œ·©&7Š~ź[{ߎeŒėBĢ!gŸŽćm0 éĄ£ÜUg½/Ū÷wšÆŌQRį&xš9˜:¢Šqy WIcl¦%ˆ³£™écį‰ū¤ńŲ¤cŌĮßč{žū¾ŚwŪ-—K ¤ļßēbj!<ō-)źŖÉ2’öU@i„4/d§ÉMĻęēOTS«cźEILgr†ńó†%•j¼‚QīŗeÆŠČ’®‹ķóŸG3ˆ„ü¹ŚŪ6g‚‡|344‡±¶I7—£­‰ŚŠ&ŖŖeTÖE !5EFs}1ūŠ#¼öAwŖĶQ¹~R;ōCé{‘dTņƒÆåsĶ’t^]%9@d§k˜4ֈ%Yu6ž}PČ£,œPĘź=ZŽ¹]-ј+žßĻo„"č1Į;ŪėŲöу"‡°@pčÜCs¹ Yį™Ä>”ˆs½ÕŌķyXDŪ ēŁI5xķ[°Łęök“Š7l‰H<ĮéŅĒš²ķ£’ĮŻYœ#ONWˆĆn–¹3\Ļ%3 |ø¾‰ār?Ćs@ķą’"ŸyY]Ę6‰«ęü5 :©u1orß}īłR”Ū®–D·/Š:ZĒī}2>ŻåÓ­mX’UFøxcCÜ`/6w„¾r4¬”£žķ3v͊Z/µ.›ŸŹŖO›xņå&2-PZZB^<’$Ü5XįH-|¶[„Öy–Ź‘t“Łé=_‡eBvšŌtxįa(­‘¾WcsZØ«źąįæpy"ŒiąörX<Ūrv:~ąt‡šų"d¦ŖłžÆ³ė`'#såW1{|„Œ$é‘“% Q˜?ŗµļ¹ņ³ŗ‡%‘ ¤ČKBGK+ä’@Żi+ó²`DÜTŖQĆwæ…0æ›ūæ*9)4¶Bq”T»©ŖsóåĖ5TwčyźåFfOIfŽt3YigŽY!Ć`r^ {j•Čåņc !J„2ö³{Ļ/„r/~^¶|ų“3īI&õ}ZÕdy÷Y8š Jt-ØBA/µ»"ąiģ. ‚S@&ƒ1é»ŲßlÄ~Œ(.„"8Uā š†ĆalyŠĘŹOōĪļ~be÷!'ŽŽ ßŗŃĄ²Y–ĪŠbŅK^æ…yŅŗaņ˜½ō€”TĄōńR‹FA&k§±±[¼ŗŖ™·ššF ļćÓĄę`2(‘dÓn]”üɒ—ļšœ3wm·W2ōzżJ5?ŗč2ŅiTR­‘$Ćɉ0̜Šõ[”Gļ†‡a[1ä¦v DɟžķD£V°čb ćFž^еńÚŲ[­Ęf;¶NéƒCüxėr”`/{śŒ\gõē6ž}½ž†?*„ŒŃY ŒęåėWCa>tŗąć­’ąQY/Żū§‹L&Ćd’@—ĖE$rāéwŻ^(«“Z¾z„ōŚ_„•PHĻ‹+ķŒi`Ī”dQĒ)m°ńĮg6vw²ųb=?ų’œ±Ć\4pŃ?"L4Ś3Ā­ _@JUÖdƒf›Ōī’"5ŗ¢…\žÄ×=”Ō%t4B(+µ[ ™+5€KĀJM3ø;ŖXæCʆQ6ģtšĒēŖy鏓™§£¬ĘĆŲg.…åø|Öö šm  Elü‡”Ū‰TŠēB¹@ééŻa÷śGik)ä^ g7ŒÓĘė—<Žpģ=½NLz­“A‰N{f $ž2¢ø^A®JB&»H¤b¢Äj-EĀ4ģ oĒįĮī’@ 8 䲄o¤øUGŪqĀé»Ę^1 N†ų}‘H„ŖCļPyąµ9ws«ŸM»ŪY6Ļ‚Vįåóm(RŹ¢Ü472ˆ„æ8×越-žÓĘĮ'Ūį@E”VŹŒüūķ6–ĪMåāÉÉ(āūx<¼¾0ļ®keĶ&;_¼\Ėõ |üņŪQFäHĀÓ@Ńź€Śf©5¶‚Õ!mstBų$ˤ™Mf† 3d¦BA–äłœ•& &ĒbD®Ōn^ Ńh€P°‰Ę)Ķ϶},˜aę›7ēžņē”É`b~-»+5“öš;ŗ q½£¹Åręé-6ū=vZŠK42ŹPÓąåĆĻķTÖyxä{éx]-“uų™SE…QvšR\ūŹą?«Ž>„RInn.łłłdffb±XHII!==³ŁŒŁlĘh4¢R©P©Tčtŗ„ēńūżųż~B”n·‡ĆĆįĄn·c·Ūq8“¶¶RWWGmm-@Ļ:± ķQZÓ½Ķl‚¢£HQ””qÉL©uŗA£jē`q;Ļæ!„ćŹHUóĆŪ øtŽˆ 9pÄE$eR”Ž•kŲ[ācd.䄹ńyįśÅ=÷D ”Źė¤Ö%zŲ;Ī\Ż^©5“öæ9éh¤PŒŹƒŃƤ°df” £`ß8X :JŁøMĻOŸh'Ż¢fĮŒ¾v}Łéļ°0o¢•› ŲāDx¤·EŌT=æČHļ<Ā6?E}łŚAī•@0šD£ŠŚ ®ÉGC‹f[[[›#H‡3D8¾’ÜqP(d¤$)I7«I³ØÉJS3,K˰, ię!c: ³ę_ȕßC.)R± 1āĒŻęŅgpZ7 rĮ@ VcYĻa»¶ĻŖw &±ˆœ ½Ÿ×«6q`ó§}^«=ĄæŽj ¤ŅM4 iF;WĪšČ0<»»ōÉāõKÅŹ]ÉĄåņōĢ;Żžś*„d3$ļQKņńŅ§J²n\"5č ¬¼ƒŖzxęµzV®µņąwF`Iœā¬ē`„Ÿ’„œ¶Ž ę$HO’ņ¤Ꝯy#ɓüp•d8=RĪSōFN„Ć)µ²ŚžŪ5*ÉS}ģp©–ĀųҶžÉ¤ūõļHi\>Ž ³/r¢¢•'^ņnŃpł‚4R’Nī‹£RD)ŹÆ`O­6f€S*•}"B„!īģŠ[l“žį€żųƒ`0‚J%ē„wšxź’I7£N å²ĢpżBŲ_Ļ­”Ņ%B.—3|ųp&L˜ĄčŃ£)(( ??ŸÜÜÜQž§ŠF£A£‘ Ķ‹…¼¼žæÜ‘H„ęęfjkk©­­„¼¼œāāb***Ē}‡>Ū%5¹FåĀ”±0k‚”&¤ŌI~Öķ€{Dƒ­Zžō|3³§¦°h–ł‚Š Yń±•7>l¦ŖŽĖ„QJłN˜[–E¹c¹$āvį ĄĮ iÜ,«;łč „RČŅŅŅŠėõČårŒF)§¤Į`ˆ=æF£Q\.)UsWĐĒ㉠cmmm„B”„×qtJķ`%¬Ż.mÓŖaäQ!dl,˜ —͆H8€<`į4Ų]`ÅĒVnZ¦Ć„·šW¹|~*“Ęš$2D!²lZooR£T*c­·Ņ{ü‘Ić|@ (]“{Ł”ķūļ`w§_¼¾0m!\ž.w—'L4ÅēÄŒ×z Õ(0$oż$“’”³\\I0ų„ĀQŹŖ=©rS^㔼փ×w’.cżG±;‚ŲAØģ™lÕ WPX gtž±# ŒĢ×”Œ¶ˆ‹öź£P~/aį®WįAvv‰7bµ7®Ć^żę ÷H  $F‡|ćjķĖś„Ņ÷^<õE‚Dō?:õģłģwD#żXȎƒ×aŻV;‹g™1ÜT×{= –^ ³'IĻI'jŠīpAeC·§~ƒUņŅ?ćµB.‰ Y©—)åž-µ°ļõąšK¤4Yļ|µĶAŅ“œŌµčij 0mBҐÆ_q¶hm ŠÜ`źŲWĶ ćóĆu %£å©āńĮĪC°«D2śŗ½×ßÅ” r+„ßUJ)uĢ“±0wrĻŗ2ńČdR*8©tˆNW GŖ`g±“5›ķ|ńŹ,.›Ÿšųą~ŠiŒĶ,„øQŁCIä‘,õAāνĒŪP(„½śu¼Ž=§x>Ųy ƒ7V·PRéā߿ˤ ĶŹŌ±0ć")Šć’é+Īua4™6m'NdāĉL˜0ƒĮpŖo@‘Ėåää䐓“ĆģŁ³cŪ}>%%%;Øé1ö*•=ėƒÄ§ö“óa!¾Ąˆ÷n°5ąĄ–æv—pt©iōQ×䣾ŁGs«›#ˆŪ{j =•RFŗEMFŖšÜL-yŁZņ³µdghÄāę<Āé±³ø“%.•»šFš8ܞ0{;Ł{Ų H¢Ü„B#Sʙ˜>1 ­ę,¦Ļ ¶ŠVż JÕ=¼„Ćœ=¢Ń(žŽ že°»"Ī™I­tz·ŃÖ6ļ˜įōĀ€%8QŗŒqĮ€—kAŠßyŅēšśĀ¬Zoć“-v¼¾²P+_ø4Ā÷%éÄĪŃī”ŅTWJ^śM¶“īĘq G$„ÕŹ»·«U0j˜ä©_Tć FÉI—ж†ĆQ²FV¬–³óP„‘y:īųB.ò“§‘s˜-{ŚyńķFņ(½?ʵ—œś¹BaŲq6ī•ŒwĮÄĪĀ}P«Õ1CkWzŸäädRRRP«%Ę`0ąńxbÅŖŪŪŪéčč ½½ęęfšššhllÄķīæJt0$ŻßūŽHi‡&…Ó$Cõ±¢”’ šŌƒ°n;¼·!J~† ÉlŲédŚ„$ōŗ»QS“üäyŹi“©cø.c\ü3{W†ø„·ų‡qŁ÷ŠQ{ņ¢Rķ!xó£žü|5 ÕĘØ¬Ŗ§Å&½’Ā;}Ó¹Éårʎ˜9s˜3gEEEŁq6ŃjµL™2…)S¦R¤HII [¶laóęĶĒ įu-šßÕšŹGŅŲ¾x†$†Čd’Į’‰ū`ÕذLJVŁA0¤ē“Ķ–ĶK=oR~¶ŻĮ3ÆÕSQė!Ż,gdj„ė//.‘"#AČ6ī…­ÅR$E"ŗ¢ƒŗÄ²‰'2|ųšŲy6HNN&99™‘#G2kÖ¬ļƒAŖ««)..¦øø˜ƒRYY«=ŽHQ€‡«¤ū!ٳ'I÷C4 ó'GI6Āē»į@¹½ĀJUm2=ŪÄņÅé\>?śŌģ,£sż4Śjز«bć®J„ź‰×ū^Œ½ē6²ć4y\SÄ5e\Smź£MÓÕÖ¬YsĖāŋoŠF£=īųߏõޱ¶%āD÷»P‰/zīv¶²ž­;šyĪĄ*ę°;‚ģ?āäH•‡#ÕnÉ«ž,aŠ)U gĢp=Ē)ČŃ AäĆˆ°}[÷vpøĀMäSYi4rssÉĪĪ&33“””RRR0čõ}½ Ün7.—+ęŁ`µZill¤©©©OžÓ~Æ©–3}Bs§„pŃhĆY åU¤,%cų•X,L&ƒFƒJ„źįÕ &š3KwŃs7•›ļ&ą©ģ. ‚3D»k¦!7L"33“ŌŌT’““1™LčõzŌjuĢ»LD‚ś£wśė~KCłG'u_ ‚ āŽĒʐɢ\>®šŪm\9õVŲ²_ņÖÆn’ CFņĄŸ7fŒ?õt]½©i‚W?†]‡!/[ĆÆXxĮ® >ßįą…7ŠØą¶kąŅ™'WP¼‹–6)]Ōg»¤”hĒBÆ×3qāDŠŠŠ(,,¤°°aƆÅĘÉÓÅjµR^^NYY`’žż“µµóƒN2Ä-™yüčØpXęUÉy䟌z7\–É’Ł–žŪķ©ĢÄ/+$33“¬¬,1‡œ%z·^w »ļ!ģ?qI įµVŽXŻĀ?IĒŁnåłwü,žUM°z³$īĘ#—Ė™2e W\q‹-Āb9æk_8N6lŲĄźÕ«Ł¶m[Ø ßĖ.–Ņ!„ ųšų@ƅ5Ū•<»"DA®–»oĶgᬁ`8[D¢PQćatŽž·Œ—Žu0w2\>ĘäKū4“J¢ĒƽВ ūšL&‹‰e3gĪRŃA'ŠĒćįšįĆlß¾-[¶PRRDāI7Ćü)RĖ˔ąÖ)=—¤˜”<÷č„SvZˆFį­ ™ų) ++‹¬¬,ŅÓÓ{Œ½¦ĒŲ{!ŚOd2Ł =&Ś/~[QQћ„„„m€/®y{½śÆ8Ś‚G[(®…ćZ$®E5!€\ ċįP ļŻƒ½iļYķCU½—ū;Ų{ŲI£u`Љ IF%EćLĢ™’ĢE£ģ‚ē\ ¾ŁĒ'[ŚŲŗ·żø©­L&EEELœ81¶˜ŹÉɐ +‰P__OYYYl1uąĄ<žcē0'«˜3%™…³,d¦Yό(2“Y_#=wf³9&‚ØÕź˜’Č#Y0ptGÜEØŁż.Q÷C 8ļ „ģØ]D’eDÆe£ŃˆN§ėį]–(­‰ąĀ&>R;S¶ļUn}ņ„D¢|¶ĆĮŹ5VĻŌpĖe>ŽŌ„ÉĻ’ÄƒcŃį’ öH©­NµZ͈#ČĶĶ%''‡ģģl, f³™¤¤¤˜aF­V cŸ«££#Ö¬VkĢSæŗŗšę滸A'l_8]2 Ä×h[1X’åäeņö§fNJ"ė aŠtŗBčµ d‘VžyĶŹ—.ƒa'žz+¼ż)lŽ×įr¹\ΤI“˜7o³gĻfÜøq&vœ(555lŪ¶M›6±k×.|>_æūN%Ր™8źŲēō¤ŌjļoŅ=š­įL(ģ'§V/Ā[K‡£1Đų9Äd2”Õjūā@Ģ!§Jļń6 ŅtąQ<öĶ'|ŽŠZ/?ś] ­m4jøļ«’±öĻ`żN鞈gōčŃ\×!$h IDATyå•\~łådee š':7p8¬Y³†Õ«WsąĄ˜ @©RŃŻ°rŽ?ŽN)uÖ§;A­–³āÉ)˜“Ļ­ŗM›v·óōĖu4¶ųxņA%rø½a‘R„m?l‚’ź¾ĒšL&ęĪĖܹs™3gĪy'–9¶nŻŹ–-[Ųøq#}Ć] óąŖł0{¢$6Ū;$żp•Œ'~šI½=‰UėŪ¹ż¦\²NŅĘāņŹxż³į“sb"HZZiii±ē˜.'R„RyAŚO„"sŠŽ”{7ü…Źā³“ƒŽīņłN[ö“cµŸ˜Ē¼V«eäȑ±°ē¬¬,RRR°X, L&SŸĒķvćv»caĻV«•††šššØ¬¬¤½½ż„®mIV1gj 󦄐“ya,xĪ*j=¼·®•}%Ī~½U*S§N…9ņ¬.¦"‘„„„lٲ…-[¶°’ž>Ž-]Čå2fNJbłātņ²Ļ`š¹CŽ]¤eŽ %%„YW$ˆÅÓ@/:·y[åKƒÜ#@p¶hwė9`]JZzNĢ“,)) £ŃˆV«-¢.TO2AbāēH$Bkć>6½ŃČ‰å ŠFįńg«8\įF„„ėĮĶK\i |°v:~^ńŃ£G3eŹŠŠŠ3f žŖÅétR^^Ī”C‡Ų»w/ūöķ;®·~f*,š—Ļćé§§“śØU2¾ó„“³öČGģüäWgüšūK¬ŻŌʁ#ż¬”J%cĒŽeņäÉLš4‰±cĒhČs6›²²2Š‹‹Ł·o8f>X€į¹:.™efĮ óŸXĻWWøyo]+‡Ź] ßW©TĢž=›eĖ–qÉ%—`4ž˜—ÕŁĄįpšńdzjÕ*:”p™ &3qĶ’ FåėĪH?¢Ź,RFŽEZZf̃Lx!ŸYāEēNė6jw’¢gæ6@ UĮ’z«‘Ėē'”•7óW\6[Šr{„{åĆM}#„ŠŠŠøžśėY²dɐ²k ‡O?ż”wŽy‡Ż»w÷xO­’®_ &½E³a/¼õ äfŖłŪCii‹nV”R˜]qÓ‡G’••K—ž––FJJJlģ½Pķ'BČ9C|hg»­œõ+¾M8tģ‰żŌÆ»Š;yļÓVj¼żī—‘‘Įüłó™7o3gĪLX{įL‰D8pą›6mbćʍ9r¤ß}“MJ®XĘā9“§XdIpr”×xxuU3å5‰SJpżõ׳|łrĢ攟“ŖŖŠU«Vńį‡ŅŅŅ’pŸ …F¾|uÖ‰‰ź¦6āK±|–ńdĀ yąésƒ>图C8p|–@ 8’Ų]=f ¤„„ÅŅ]čžd‚¾ōĢCbˇ?ĮZ·õøĒ5Zż<żr¶6?ž±Œ“”Č1×ŃØTēbŧP^—x£ŃȲeĖX¶l3fĢ8멉އÕjåĆ?dÕŖUżØUJ©vƵ—HyÄO•²ZŲsDĘµĖ p8µ˜ гVĖķl±eƒg^ką —žXÄP ”ęgåśÄ…ĶGŽÉm·ŻĘW\qĪtībļŽ½¼ųā‹lŲ°!įūÓĒĆ·®‡ŌäžĻįōHłźw‚IcÜwĒšć^w„™ö`!ŁŁ=Eų9DŌ9uāķ#”Pˆ@ĄO殟įļų aŽp…BŠłŅ2©˜ī©Ņé–ńó§ fąĪ/;/DF«ŸH$ĀčĢfj݌Č9ńcw†Žķ›¶`̘1|å+_įŹ+ÆrāŁ©RZZŹæžõ/>łä“õ 4jIh»a±Tæ Ń(¬ŽSĒ©H¶°·4Čäqż‡(E"°į`^¬HWKMMĶ!‰źˆłćųōoƒĮ mµļįØügæĒ‚>ųĢʕóulßY΁ņ §Į+ĮŚķŻū©T*®¹ęīŗė®ó®NĆŁĘēóńŚkÆńā‹/öŪĒ€’ĻŽyĒ7Uõü4Ż{P h m”Œ²eŠ~" øŲņˆ ˆ ˆ"‚lŁ LEdČp £Čh”@[ -Ż»Ķhš6ó÷Ē5iÓ&…2„¶yæ^yAī=÷ę$½÷œsæćó}ķihī'¼O¼mCģ(Õńć!SžŻ'Ē{;ī¼üæ‹\¼ŖäŃ`Ģ’ Ł GcaŪĻ‚<žžžyž{ī9š4irļ:\(**bĒŽlŪ¶ …BaŚīåĻ=» 2µ¶„ŸO N‘·'“āŁA7Ī@”+El9Ō/Ÿ“Śßßæ† acĖĄkH;jw€Xs†XsŒ˜9Gʍ×!$$¤ŻßĒ›żVžoé½µm–hŲW^Ø^÷ćĀń%ä„ßł¼q mHćĻ3%(”ęĀĮ"‘ˆž={ņę›oņĮŠ·o_š5kv_ŽŽŽōģŁ“‘#Gҹsg éééf54‰)JÅ#AX°Kƒxŗ0ąÄ9)‹6¤“\Sš¬S§NL:•)S¦z_^C7ƒH$¢eĖ– 6Œččh222Ģ2B HÉPqül ī®ZÜA¹]y*:I8vgÓĆRuLJĶw{Tw Æļ¦$}ē=ī‘ 6ī%vbnöE\/hŠ‰Ääš°4ž6†‡(–1®×„…×8{h&ƒõb:½½¼Ż*ˆO’1r¹o/±Ü^©‚Ķ9§EĶżĘ5Ö[o½EDD‰•݇4i҄޽{óÜsĻįććCrr²™Ä­Į dŗüq<Ü e³[+–®ÖĀ_—ōÄ_©@VŖ£S¤ū)ŗ~Ɛ)“|¾2•?ĻńÆnj“Ęž(‘Ć’mBAā²j‚LŸ>I“&Ž Ę2???~ųa @AAiii¦}:\N3 >TāD"”ˆÆ›³žGKXõ½™BK‡7Ä~'‘¼\•$g» WΉÄdx«źųØźhjHæūŻ¢2ŪNG¹2‚„/Ą ±Ų¶X¦aņgIģü%_×B¢ĀtHįóõę«~ųa–,YĀ AƒlYw‰DBtt4Ɔ C„R‘ <_Iįšipr„ÖĮĘ ?«wČų儒ćē¤ōīģ…›ė?;•–éŲ¶/—Š€ ‚} čiąń>P,ƒE[į§?…¬ćw:t(óęĶćĮÄÕÕµö“Ū0įāāB·nŻ>|8‰‰‰Ā}¬óń× ¢%x{@tōˆ‚¬xīGÜ=<øv½ ?oėEŅĄÅ”ŒÄtg³1·śśŻ8ī6–µūĶ~?KķŖn[±bÅ墢"ę K/•—ŽĀĖ¢£ĆZmŒqrĻM!žÄā;zowēšż<”*ó‡4±XLß¾}™5kćĒ'44“ޤ>‹D"y蔇>|8ĪĪĪ\¹rµŗR Q«3płš’Sēe4o∿ÆõAŌʍÉĪÆ`É7éüv¢µĘ\Ó¹{÷ī|öŁg¼üņĖ“lŁņõšīČSO=Ett4©©©˜ö•«õœ»$ējZ‘!®ø8ßžż#B‹ŗ, œŪ™Mą6'ȝ”ŖóC%æNÖłYP‹ˆ W'5ʲrJŹ|j°ŒćÆq 6bU„ÆŌj§¾KyY”Õöåz–~›Ī„¤bģXÄĄīZY‰Ü7„ØÓ/6Ā„j ą"‘ˆ~żś1sę̱Ʋ··§C‡<÷Üs“hтääd³Øįr5œ¾—S#µg„Õķ”G{ˆM„ė™<ķ…³Sżx¶©ŽZ£gžŚėdēWšxAĘéfø˜ Ÿ­ƒŌ,óķĪĪĪLœ8‘éÓ§×ūėčFųśśņŲcI||¼Y²¬ž8#8"#ZZw“łxĄł«pኊōģrŗwō“čqr0 ×©Č-q©aˆ³···2ŻUĒ[cįó¼KsŠŖ,ėŖ*ōŒļ"Éé*śu†Ēū ņEŖ,rīēēnj3xłå—m†ģ»€££#}śō”gĻžÄĒĒSRR‚NqWązD‡ ]"¹¹Ó5då•óh_欏©™*ž;3ßNćįTBū0M¼aߟ°p³P¼Łć?μyóxüńĒļ‰ |CĮŃёž={2dČ”J%WÆ^Å`0P$dŃ"Zސ]Į%ė~(`Žŗ<šś9ŽŹś½ŚÄ[OVžšbE„TmՌmkė÷†<īŚ 6Č}MU –ņ²bNģĘr-…ŗ¢ÓųķD1˾M'5Ӽ·X,fąĄĢ™3‡#FŌūT>gggŗvķŹ³Ļ>‹»»;‰‰‰fšƒŹ2'b„\ĻRāZo„ī%'ĪIY²1übó `¾¾¾¼’žūLš4©^L¼:t(AAAÄÅÅQ^^RWP¬ęĻ3%4õu °éķgƒˆ rŹŹõŲ9›E2TĄK$ĆŻĄ`0 ÓŖÉˆżm¹åZ/6lŲh|4q—‘–ļŒFļZ#ŠĢX½ŗ„‰m nųTĻ֎?±“Ölm©\Ė«S¹z½ /7-½:€µd¼"˜³ž€ŠjĶ=zō`žüłŒ5ŖĮ­±ģģģē™gžĮßߟ .˜­Ż J戎m[Õ-ÄŃŗGAæĪąėėFNį2¾HZŽœ* }˜—‡Žų7ŠėaĒļšõP^Méø_æ~,Y²„>}ś4¹«›”eĖ– >‰DB||¼I1Ą`"Ór SĮ0[Wgč WŅ!¼„=m[[/Rćė”!§PGY…“iīØ:‡T•P“­įk§śx«Õj)Nߋ2wŸÅözHDZJŠó‰l©cH˜÷ ?/ģ‰D >œłóēńO}FKÓ¦Myź©§øpįƒģ”¶NūւR—HĮĮ8ō!;<½¼IĖVćķaį&¼ƒ”©t¼š^<łÅj†€Į} X³×Ćį3‚ü5‘¾üņKFŒ»»uł;uĆÕՕžżūÓ§O.]ŗDQQz½ōq. :¶·æ²ōz=§/Ćo'J0 k{ ézÓŖ¹šø$1Z½} ē³q nLL6ˆĶrßR}r’ė×éČ “īȹS3UĢ[s“±R“:ókźŃGeĮ‚ 6¬^„® DGGóģ³ĻbooĻŋͤ±r Õ=-ÅÓMBĖ@[ŹėĶ Ö裶/—ļä™]Kb±˜aƆ±`ĮŚ·oß`'‘źˆD"ĀĆĆ:t(\¾|Łt/kµNĒĖ‘*““w»mŁ5±6‹rC vö¶4ś;DU§s(ņŽŽė.ٰać>B$—"®ęųagēPƈeĶm£įcŹÖN;ÉœKjm— ēpL1v…É£,WAČtų|ä™o÷óócźŌ©Lš4 __ß;óīSÄb1mŪ¶eŲ°a5ÖUzƒ Yt9U0R×V7„:ĪŽąī GO˘»¾ˆąęN4÷ÆĆ ī1Éée“ōÆ`@“”:ZÆYa¤X.d9g¾= €¹sēņā‹/āęVĒtš‚D"”k×®<üšĆ$%%™IŚfĄÉxo> ¤;ŲC’ĪŠ±µ†b¹æ)h׌²–æ—Š«™ Ŗ4¼U—d©>€m o‰ŖŅWe² “ęYĢÖNNWńĘĢZųŠ%¢{˜¹JŅA†ēÓO?å…^ĄĮĮ¦ńOaggG÷īŻéڵ+'Nœ@„R”(ƒ#g”E3h” kXümĖ6ēó@'ĻZ%n‡Ņ2N:$Ņ­­Ž'śAB*|ŗ¶2ėC"‘0vģXfĻžM@@ -ŁØMš4a芔xzz‡V«EŖ²ņż…WSAėüčŪřˆ0ė6K‰x¹Ŗø˜źd6īVͱĄŌPĒ]›Ä湯1ā’/ī$%~ū9ē§ŠłjsņR­Łöąą`>żōSʏßą½ŁööötķŚ•Aƒ‘™™IzzŗiŸVk ö²‚ü"5QįnHģl—¢5²ņ*˜·ę:ēĢ…ØĆĆĆY¼x1Ɔ k“‹IGGGz÷īM÷īŻ‰‹‹C&«¬”v=KÅÅ+„“kķ†ėmIbŠ•§£sh‹DāP«=Ų nƒĮ@™4ÜK ØeεaĆF#ÅŃ^‡F]F¾ÜĒģAŖśųksB7ŖJ±T”Ė9¹’“šš5ŠJ-ER5B„t /ē±^`g!Ų^£…oö ņ,š*ĖõŖĮ%QQQźŗ2®«śöķĖ•+WĢäF Jąč9hŃšÕѤ7F·ŲĖ ŗDyą^2AĪ]–óåšėŲ!§sčWÓaĘJČŹ7ß>`Ą/^LhhčŻėl=ĀĖĖ‹'žx­VĖłóēMŪ•*Įqäē…E™:ćPæę‡2ž8­B*×ҹ]͈d‰Ų‹Ud˜KaYšClNĖT—¾R«UäÄĻ@Æ.ŖŃ6+Ƃ×g^&§ ‚Š@-Ŗr˜½J’¾hٲ%Ė—/§k×®7õŁčtŗzU[é~§yóę <˜ÄÄD²³³Ńź‡cShŁ\h£ŖŠsü¼Ć§Šéׯ/÷;ūūĒÄIyõ£Ė“lR@§ÖZ4ƒ=Gį«ļ+3åBCCY¾|9ƒ Ŗ7ršõ±XL‡8p ēϟ§ØØČtm“ J’Ņ |wPŹŃ^3!}< äŖ)9Öp€X `‚†9īŚ 6Č}IÕ(äRY6§~łƒ^{ćkAU®gõöLöżQˆ¾JyGGG&L˜ĄgŸ}F«V­nÆćõ  dQ’5#·œ3åD„øāy‡'چĄ¹ĖręÆMC*7æ.Ÿ~śięĪŪą¤n•f͚1dȲ³³IN®ī.‘k9~NJh° M|nŻI$¦œņr"ĒVfO±Ø×ķRłP„%ćÜĒh+Šļu—lŲ°qŸāēQFZžj‹Y:½Ķ€ÕøØž­}žųŠrĪYl«*×3gU*æ/ OĒr‚­ńĪ-Œt§/›o ᫯¾b芔6ø„čЧžz gggĪž=‹žļ‡š ‹dJچĄĶ&Łśx€Æ'œ¼`@$†Ž÷wXQ‰†ėŅ0 Œž?A½6⯠jŹ*jĒvvv¼ńƼūī»89ݾ,kCB,Ó£G¢££‰‰‰A„~8½A(ŽeÅ_Ō”5œK„ų+åø¹Ś\³.€—›ŽœB­™VUC\ÕL›–eŖJ_\]CyÉ_ŪĶś*…Ä%’~ü½į‹ B !€|„K—āļļĆĻ;pą~ų!_~ł%ėÖ­cėÖ­( zöģIYY/¾ų"ööö&ł¬’’FMFF½{÷¾S_»ĮāģģĢ Aƒ())ł»@ŗpÆ5ń†VĶ!ø©PėéT¼žn„µøsõ6.$*x{Ī“Z=½:čńõ„•;ČßÓ;=ö .¼©kÅʝÅĖĖ‹!C†P\\Lbb" d}f@v•Ņ”_nTšĒ_„ČZzwń²x®`5g%°7s€88Tfs7†µ»Ķbs€ÜwT}˜Ņétœ9ō Š’ŌŪ:gJ† yuõŗyżččhV¬XĮ€µ7»eĖ– :„RÉ„K—LŪKĖt?+ÅĆMB+›$–‰ćg„¬Ś–i&yåāāŒ3?~|£¾–,aooĻĄ $&&­Vpi“NÅÉhÖÄń¶ź‚ˆu¹ØōHxš`ęϟO³fĶīĪ—ØgˆD":uźDĻž=łėÆæ(--5ķKH…”LAćF™FZÕėķ‚Zļö÷żz—:›=]Bģe/}śŠŗukbbbP«…Ž@\‚…RKĒ÷ūöčŸā—cE|³+}•”(""‚+VŠ„K—{×±z@xx8 ąģٳ””Ö ½Ī^Rąį&!$č֜l"@_‘…F‰¤J½QĻŅ&…us ŹédĒż°aĆF£ĘŁQ‹²¬‚B…—)ŠĢV©ńPUŠE£)'ꥻØĖ„ŪŹJµ<šOpS=SĘX–½:›sæ1/NķąąĄ¤I“ųļ’{CLc¤iÓ¦<łä“dddšZ,–[® Ē›L–iīņRs×Ė(‘ėˆ ­i@¹×huڵ*§ch)½;ÖŽöĄ Xõ#fY’ķŚµcÕŖU.ć’Vqvvę’žļ’(((0E\Ė€¼bčÖ¶RžŹˆ›³ Ėāć^Ī©Kvø8Kpr4od/1 ×«Č)v©aˆ«jŒ³erWR=@T]QJnütōZE¶Ž²eOķ‚‹pu2źŒ™?ž83fĢø)ēAJJ Ó¦M#**Šõė×Ó½{w¢¢¢čÕ«; 7 Z­fƆ ¦¬!ooo ĄÓO?}Ē3¬Ī;ĒŲ±c鯻7~~~wōÜ÷={öÄŃёæž²zĪ%AŪVąļī.— āķyłčtŗDŻ ż­*ŌzDbh\@d 5Q”°p œø ģwrrbŃ¢E <ų†Ū7° IDATē*((ąõ×_gƆ ÄÄÄš×_ńūļæ“——ĒĄ)))aäȑо}{āććyķµ×HLLdȐ!·ü=įįįtéŅ…C‡”ŃhČ)„Ō,Į āāŻŚŖBÄØ'q²2ń7óѓš­C¦t0­Ūk÷ŖĪg£’FC“4$ˆ…„“śFՇ©ņ².śź¶Ī÷ūÉbVlÉ@«­¼n¼¼¼X“ho¼ńFƒŠøSüė_’bėÖ­tčŠĮlūļ'‹Yśm:­Õ{°Ac0Ąö}¹lŁ›cJ čßæ?ėÖ­#88ųŽu®ʆ čŁ³§i›^o`揣| Ɩ#kGB1eEǐĖå( ŹŹŹ(//G«Õ¢ÓéŠėõ¦‡ę˜Ę]–ģK 0č57>Ȇ 6€Ž-sŠWd#•J‘J„ČårT*åååh4ŪųŪĄ1®Ł“Īn T–f±¼T‹»šŁ’ŃńöĖY ‡NƗߚGꇄ„°iÓ&FŽy—zß0psscΜ9L™2Åģ¹&9¦Æ„"Y-WC,‚¢5»ĖēņµŅš— ą󯐕K»”ģŲń;¬ßƒŁz½wļŽ¬\¹ooėÅbmŌD,óæ’żqćʙm’3¾Üŗšu·‰ 6”‚„ßf²į‡¬š €ˆą œÄłH„RJJJLóGii)eee¦zĘłĆųjĢT-|^”²myn6 „ŽÅÓų攔ģ_l¬”{ņÉ'™9sęMŪ?¶oߎV«eŚ“iuvd„‡‡ćåeYŠēv(..F.—ßńóŽO¼šĀ ¼ņŹ+€p-Ųł«·ln.zÖżMbŠåZ[7Ć'_„šßéē)S*ˆ …eŪ᯿E@\]]Yŗt©Ł³ŗ5“Z-o½õIIILž<™£GĆĪ;ł÷æ’mõøĄĄ@:vģxW$Ņ {ö씸øįI9wīܙåĖ—ćį!8æb“`ŃVa®óń€W‡(ĪOaÉ7i(”gą± ”„%fcouŪ‰V«µ­Żė¶ ‚qr=ņ9Ņ‚„[>ĻĪ_ņłž€łĀ ::šåĖ—Ó¶mŪŪķfƒĘĶĶĮƒ£T*¹xń¢i{NAÉé*ŗ¶÷@"i<—ØĮkæĻäPŒłDśä“O2kÖ,[Tb±··ē‘G!55Õ,bńźõ2T::„ßšž“>‡2} ģŻ-Ja5ŌH†;Į` (m/Ņ̟īuWlŲ°Q‹ĮĆIFrŽÆ)Æ6),°æ ŖÉāü+Ä™m1sPŖŠņĮ‚«””HéÕĮ`1a’qX»³ĢŚöķŪ³bÅ š7o~æEĆA$Ń”C:uźÄįƇŃhO’B 'ĪCĒ6ąuK+'h$TOHV2°·/ā›-&r)–j˜æī:r„–ž]„š%Öųõ|»Ļ|Ū AƒųüóĻoJņĒFMD"={öÄĆƃ˜˜“Q,§PČéUS«¹\J‹WÕųyŪÓ"Ą¹Ś9…,‘¤tģģ*ėHYŠF®š bģOc¢j€ØN§CQtĮŖōÕŹm™œŽ—óģĆšūiĮ ‚įtΜ9u žüā‹/hŚ“)ƽöšÕ6–2@ęĪ‹J„"4“Ņ[™ĶĀ… YµjæżöjµŚĢ&³|łr<==¹xń"óęĶcūöķ$$$££#{÷īeļŽ½dee!•J9}ś4b±˜-ZŌŚ·„K—ņć?röģYZµj…··7ƒ={ö°pįB¶mŪFll¬iŸ‘%K–ФIbcc™7oß}÷IIItīÜŁT‡źąĮƒ$''#‹™?>k×®%&&†–-[ŽV†J—.]HKK#99µFØeō`W!ŅæUs8rŌ=öš©ó¹÷żQĄ†Łx¹ėŲ~< O ūÜŻŻYŗt):uŗ©sķŚµ‹]»vńŸ’ü‡qćĘaooH$ĀÓÓ___ŹŹŹŲ“i½{÷6e€8;;óŌSO™]3wŠ_ż•™3gņŌSOŻ'ܽĘßߟ~żśqųšaŹŹŹČ.­NØĮpą˜†M?•R^®³XÄŁ“š ®ē:šeoז gܵe€ŲøoØś0•sżYÉæßŅyŒŃä{~Ļ7Ū>`Ą–/_n+ąt“ŲŪŪóĪ;ļšŽ{ļ™ÉW\¾VʧĖSj’nČlߟ˱³ę²#FŒą£>²eŻ"Ģ™3‡§Ÿ~Ślūϱ÷PĮ-S„äæ •–˜E!Ū"¬csÕŖ" ®­»×ݱaĆF=¤©· _ēd‹‘djµŚ”‰WUĀĆFżÅ\ŠEĖł?ēaŠ[^nų! e™Ž¦>–eæ’ 6ģ5Ōļßæ?+W®“IŌŽ=zō`ٲe¦čP€|²²ņk9° mCąÅ§`ņG$v÷‡ĮcĆŁ”–éū8„[¶upņ¬Łe¾mŌØQ̚5 ‰±Z¬[fĈ̘1Ćģ·<›Ōl+ĮÄg ¶ėYe5žnzBüóL„R©™L†B”0[ĆŪ2 «>WStu…U©ŚŽįNtl#B"dšš7oĪ_|Q§€=¹\Nnn.ķŚµ»„žīڵ‹ .˜Žńā‹/rģŲ1¢¢¢P©TĢž=›żū÷›ŚüüóĻ|ņÉ'̜9“ĄĄ@<<<Ų¹s' ,„Ś"Ęz4©©©$$$PXXhµ3fĢ`Ŋø¹¹Ejj*ååå¬]»–Y³f”Õj銔'Nœ`Ā„ dgg›Ž?pąü1Ÿ}öĮĮĮøŗŗ²cĒ/^ljNJ+xé„—Šh4DDDpģŲ1¦L™‚ĪRzŌM"‰˜1cQQB”£Œ<Ųž‹°/* Ž“F×½v†F£głę œįĶp.¾ūMŲ'‘HLõ\n–Ÿ~ś 777FUē¾XC*•GZZZ­÷üõė׉§¬Ģņųr³h4.]ŗÄ„K—jd ’““‰‹‹C&«=2%%…‹/ÖŚŸ‚‚.\øPėu{3„††²hŃ"SfÖ®?„¬<€Ēz čæę“š©²x|ÆjģōE¦,ćø[uķ®ÓéĢÖī6ī?l«šzŒ™Ž°ZŅcóoń<°ęū,Nœ37V?ūģ³¼ūī»f†|7ĒsĻ=‡··7Ó§O7ÕÉĢ-ē‹U©|01w׆ķŲ÷GVNR"‘ˆ)S¦Ų$īb±˜iÓ¦įććĆźÕ«MŪwž’‡§»„žŻė.Są@.Ź¢3ȝśįččhŠf°³³3E"'ņ†Ép«½^Ožµõčµ·žJmƆĘM—Š,öĒ6EźģŒ³³3ŽŽŽ¦1ŲZ&žś‹qĶžžō3Ņ‚ĖŪ$$+‰KPŃžč[s’ƧHUĢĒl .¹ :vģČŚµkłļ’Kn® ÆP¬50k¢PT÷F<Ņ ”?Ļg“'uąńļ­Öž„§œ9 ą’jQK¹” ˾3w¦=żōÓL™2åīw°ńųć#‹łųćŃ’]`eļQšrƒ!żĶŪ6ó…“ĮŪŪ@™Ö`Q= }h9i1ÅH„Īøøøąā₳³3NNN¦5|ÕłĆų,ßX摪¢:Žāė;Š”Y–”*“t‘3ńSŸÉØķćS·Lc­Ę;8ŗqćFd2ß}÷ĮĮĮhµZFŽɎ;xüńĒMķŅŅŅŲ¼y3-Z“Ą`0šŅK/qģŲ1^yåBCCy’ż÷™5k‘‘‘V?ļņåĖüņĖ/Œ1‚wŽyĒlŸ\.gŻŗuōéӇ… "‹žųcž|ņI@p8­\¹’«WÆÖŚĒįąąĄ¼yó1br¹œ' o“P½s\ø”ĮŃx%ļLh…ƒżĶŁøģķÅ|ņ®„”ÖĄŅķ•cę{ļ½G×®]oŗjµš„„z÷īmʈ¹Yōz==zō`Ā„ Lœ8Ń“}ķŚµ¬^½­VŖˆŠŠbٲeø» )Œ>ś(Ææž:ū÷ļēܹsøøø°xńb:wīĢ“iÓųõ×_xę™g˜ …„R‰J„²E![Į`0P.æ†<ū—{Ż6lŌcœu“öO1‹ą---E„RQQQQ#Š×6žÖOŖ,%œYmµmŪ0'&²ćõgkJ>_3RÜøq7]œ×Fķ„„„°vķZ³bßÅr˜³Jo2X¶\ ›~*ęū¹¤dXŽ"½ŪœOTpąHͼ xžŃš2KFR²`ī7 ©’ˆōšĆ3uźŌ¦£ŒAƒńß’ž×lŪ¦‚,OušxCF¶”]įxµlz;±ö­*#‘«F#Ū²@ŒĪ e²Ģļ-¶)-Ó1ģõXęm(fŻnPUŪĒGDDD?S„īł;UÄüŲ±cōģŁÓT3S"‘Š«W/3)d€^½z™$­D"]»vE*•šdżn–S§NšüóĻ×Ų‡Z­fŲ°a&ūP‡ˆˆˆ07Ņ·o_MżéŅ„ EEE&ēųŖ…¼N„‚‚[S4؊ææ?o¼ńz=|żčžžč?cuģł½€Ÿß\6AFN9ūećėRDƎĀ\.ĶņüóĻ3|ųš:õ-;;FCXXXŽ³ĘįƇY±bC‡eėÖ­L›6„„ÖÆ_oÖīóĻ?'((ˆķŪ·3wī\t:_ż5Ɔ 3ż-^}õU>ų૵L”J„)@zɒ%|÷ŻwL:•ČČH S§N%''‡Ļ?’œķŪ·Ó£GV®\YĆö駟Ęwß}ĒģŁ³Ńh4¬ZµŹ¬ĶīŻ»‰eõźÕlÜø‘V­Z…Ry{Į‡ƒ büųń€0’}żƒ`GéÖ½­Æµ^VT؏"d2™éUZZZĆvRuÜmŒćļżŒĶŗ]O©Ł Tä‘|aė-g’‘Ā‘śÓ¦M«±@³qktė֍•+Wši)¦fŖųźŪt“ŗ†7Ę%(Xū]–Y$Łøqć3f̽ėTfāĉ<õŌS¦÷z½UŪ3¹’Z÷…Øō„ķŖŖ±r—c°’JoƆ 7KūVÅčŹsjHaYr€ŲØæ˜ ŸŸŪH¹Ņ²®Ņöż¹dffŃ»£ŽęՒ.% W«Gźæłę›¶čĀ;HÓ¦MY¾|¹Y•Œ<˜½*Ō7>ŽÉ^{Zų;Uś'(–iX½=“?‘™o}ĢPŖ`ž¦Jƒ/Ļ,Ÿ|ņI­Įo:ŽĖ—/söģYRRRn(WSVVFiéżUž^2vģXʎkzo0ĄŖ‚3Ŗ:NP$Õ°å§¤Ššry”\ķ‹Ķ qÖœč© zõŚWæĘ +·ŲöĄŃBTåzD8żwR^pp0&Lø„Ļ6FōÕn—¼¼<***Ų¹s§é•™™IEE…Y»źRu †:ß{łłł888˜.U1FūWuDDDԐ&Ŗ.ęįįN§39ˆŒ}®:w% EślaƆ™je¤åĄg„ķƒū‚½6ļÉFÆæńżšĶ®lf­Č ö 9+Ō cҤIuī—ŃxoĢĪø]¶nŻJĖ–-yļ½÷hÓ¦ O?ż4=zōąÄ‰fķ"""ųšĆ ć_’śżśõ#99d ØGy„įÇӺuk‹Ÿ÷ŪoæQRRĀ“iÓ读7””” >777.^¼Hbb"&Lą‘G!,,ŒŁ³gćąąĄīŻ»ĶĪÅ“iÓ åŃGå0õLj±FL§NˆŠŠbŌØQh4ŅÓÓoūw›8q";vąZ†] ‚Cä£EÉ|ŗ<Åź±t/C.Æ,†nÉvb“æ±I`ÕcŒ“ū„˜åč“–'öŚ8+­Qšü­·ŽŖQ_ĄĘķɒ%Kxķµ×Lś†ńWJY½=“×F[ĢŖoä©Y¹-]•ÅÄć?~CgšZ­ęźÕ«hµZüüüØõa^”P˜Ņ ;"‘ˆ’żļ( :ÅŻ–mŹą“·ZćåQ·!Ž…Ė(¤miōµ`0åüAYIü½īŠ ÷ŖrÅ2-R¹©B‹T®E£ÕSZ¦Ć 7 ŃPU˜; %v"\œ„±ÄÅŁ;;^ī<Żķńņ’÷°ē>Ø#|×±ˆIćĢu³tzcÅŖŃmR„õ³€%y.)æ³ŲīŌyŽ’šŸT«{=Ū©’OāļļĻāŋyé„—LŚę×2`ŃVxoœõŒ ##½yoŠZ‘0ŗ[üp0OØū1‚›Znc0ĄņPPR¹­M›6Ģ›7ÆÖµõ޽{Y²d‰IęĄĻĻżū÷#‹3f ŽŽŽ,]ŗŌ“̘1ČåröīŻ‹³sMI‘Ęțo¾‰L&cĻž=€p_/Ü_üW(Öl¤¹<’|»_Ēö}¹¼:"ØĘ¹ŗ“‘qų‚;ĪĖ(V—d©*gŪ¤«ŹŌźõz”EēPŸ¶Ś~ĻļłHģ æŹ½šī»ļāččxKŸo4jŻŅńU)--„¢¢‚¤¤$³€Uć“‘[Uš(**²j˜/..0«•ąééIYY*•Źź=~3ż¹ÓŖ#Ę Ž‘#G¢×ėłéü«;x¹C’ĪP S,Óāēm½ĘK~‘šƒG ō‡6Į0yae_’÷æ’Õ©>Œ£LÕŹŚLJJbŠ Afæ_hh( fķZ·nmÖ&((ˆß’­V[§ZOWÆ^ÅŽŽžx Ę¾”ĮiŠ»w„›ŃŃŃ5œįįįfćQPPĒĒ`0˜¶{{{›ÉÉswāž‹Å¼’žūŒ;NĒ–ƒŠ=J%LÉPS_Äc[ąå^ó·ięk ]p1©…®ø¹¹įźźŠ««+...fRX:Īf;¹±9@ź!U# sāo©šł…D[¤ž?I»vķųā‹/˜ųą®_æn*xW+€ÉÕ$÷÷…"ü«å损—žfž…Čä.øŗ Ę8£¤ś¾źüѐēćz]«ÕPx­öõś+Ļ6įtlß’mJiŻŗµ™ń¶®ųłłįīīNbbā-ŸĆˆ££#"‘ˆ'žxā«Éćääd*x^£s£zvKyy9‰ä–Fw“°°0śõėĒ‘#GČŹ‡ø+‚ƒś•įąęī‚o-ĪVE"x¢8)Ō…>|ø){ ®ĒŪ-Bn<‡R©äčŃ£\¾\YW¬  ą†ggg ¦NĀĀB<==-:ŒŽ‰źµsš6mŹÅ‹oŲcƳµ¾[»o•ššpFŽɦM›(+‡ŸŽĀŲĮšpOŲų“žż0jHs‹Ē>ŌMMĀN)R©‹™¤śŚ½1ŪNīWlz†ydƒŽųK€ŗ„VI5¬ŚžYēHżÜÜ\NŸ>B”ĄĒLJöķŪ$D£¤„„!‰Lś“ééé(•Jڶm[§ž5TzõźÅĢ™3łč£L˜’,¤e ½:{Żąčū›-{sHĖŖLk cΜ9µN¾_ż5k×®„sēΌ=rss­.¼@X° Awƒüü|ģģģšõõ½+ēæ[8::2ž|FMNN‰)JvżVĄšGėVˆĻÅ.™4 y•(äźE½k²Į` čś÷hT’¼¬ÅŻ"æHMfn9ŁłdēW•'ü›“/·uwQŖĻÅŁŽ¦¾6u¤¹æžŽ6u$Ąß‘–N6É=@”Ō’’”"1EIb²’Ä%׳T܋ nƒ!«D®!)„¦¬Ÿ‹³­[ŗźJdØ+”ĮĪ„µpĮžŒ¶¾“to“Ķ/üMQՋ*6&VC”jĄRQn<9©XlW”ÖÓÜOD×HŖ6e½rŖØ‹DFF2žüZ#õ·mŪĘŅ„KkČ¤ģŁ³‡€€V­ZÅ_żÅžżūMū>śč#Īž=ˆ hß¾}ækC¤}ūö|öŁg¼ūī»&©§æCŪVB†GmŲ‰įR²ŠÆw&1ś©@:Fܹ“ŚŠé Œ¤Ēī1ė—k°õ`å{cŸŸõ‚ķ …‚ ĢŚµkqss»é>m޼½^_'ŪĶ —Ėyģ±ĒxóĶ7ėešžD"aΜ9Œ5 ©TØńq2¢bąŃ*Õb1Œ:C!ÄčŃŃ;;ó?n׈2~Š‘"“¹XŒF®žI(‰Ģ¢¬ ՄƤ™ū¬>PU艎0šĖŃJiĮŪ½–D";węĻ?’$==ŻĢ.RWģķķńšš 77÷ʍļ^^^(•Jd2žžžfūŒĻĘłłł4kV¼YTT„Ļ}[7vōčŃ9r€żĒˆHæœ(įrŚU>y«Õńr`/Zł: VW0i¾°ĶŁŁ™×_ż–ūÓ¤I@(»HĆĀĀčŽ½»Ł¾;%±eé3­9»Œż©^ĒčXÓėõVƓ{5½ņŹ+ģŽ½…BĮļ§į™‡… ”«v7·^ĖĒĶ¢[Ėø˜ī†›››iģ5:@Ŗgq7VŪÉżˆĶR1Nši‰&Üų€*hu–oN§“¬R³µ_æ~7ŒŌ_¶l›6m2ÓzurrāšįĆŲŪŪ3sęLģķķY¹r„i’ĉ),,䥁5<Į•Ē{Œ¢¢",X`ŚöĶ®lB[øŠŌ·~J:¾ ćPL±é½³³3Ÿžy­ąRSSٰa]ŗtałņ妣ESøøø°’ž»ā¹|ł2/¼šóēϧ’žwüüwęĢ™ĆK/½d*z·÷P>!.Dµ¹ł‡U'ĶId²S$CcĻ1E“©å]ßqÆ»sKčtR3U\M+ćJj×Ņ”$„–!/­©+żOQ¦Ņ‘š©"5³f”X;;­iÓŹ…6-]oåBxˆ+žR‘mÜ:yEjĪ^” ÆKrr jF§WG,Ó¬Y3‚‚‚šóóĆĖĖ ///|}}M’wppĄŻŻ‘H„½½}ł@«Õš¢ŖE„R©Ł«øø˜āābrrrČĢĢ4ӎįś¹ØąBb„^“³£˜NmŻéåA×öD†ŗÖ) ī^āē©”™{&2™»É€e‹«!Qµų„^Æēņ©X X**ŃŠÄKƬדT—#’ł¤`5āįįĮ¼yópuuµś¹?’ü3_~ł%ķŪ·ē½÷Ž#22™LF||<Vė޽;*•ŹĢ°u§HHH øø˜>}jIKøOéßæ?'Ndٲe€PPwŃV˜ūxߥ¾äąyEZ~:\x× 9ĢY™Ź˜’Óń`Ėm”*!›H[„lĒ‹/¾hµŲ­‘Ÿž…BĮŌ©SėäüLc–%nv ³ŌĪ(qTWj3ĄÕ¶ļFż¹•6žžžLŸ>)S¦˜Ę‹?Ax hUķVŻń«Še"/ÕņX?sg•‹„5+&½øŅńaœ?,É)6ō5¼Į`@S!CšV»RĄĀõi;]hŹ®óńńįŃG½ķĻ2dGeīܹ,^¼øÖgÖ)oŪ¶-'Ož¤“““Ī÷^UŒĻŁ7ŖÆaĢ üż÷ßk÷ *C?~Üō¼®Õj9sę QQQ·Ü·»M—.]ˆˆˆ ))‰ WAŖd°Ī\Ņsü|1Æ<_nŃŠ_ĮĻGsčŲŖ‚ųk ū»œŹ!CjȀÕ£¬Ó¹sēnłF¼¼¼‰D„……ńĀ /Üöłnö3­esķ}„„„øøø˜¶Ėår¼½½ļK'™‹‹ C‡åŪo愬\Øó}`ŅH-­ÆµśEk‰»&3Ė1_ Ӗ IDATfįĻU×ķ yÜ­OŲ, õˆŖ‘ u9IēÖ׳ßČ%9½Ņˆ̧Ÿ~Zėä¼~żz6nÜHß¾}yóĶ7 ¦øø˜k×®ÕŖ}Ų½{w²³³ok¶„Į` 66‰DrĖé‡÷’Q£FqõźUöīŻ €Ŗ\ϲoÓłč?”8Ō³ˆēü"5ė~0ÆÜ7uźTÓ"É?žų#:ŽI“&Õ9*ģnÕžŠjµõ¾PUTT’łĻX“h D4­Ü–ɬI­ėd8v““!•_@ęRóŖźD ?’”jÖ]AŹ6ōŚśQĢS£Ńs9YIģe9±—\H*EU^{±R lФI<==ńōōÄĖĖ <==qqqA"‘˜R‘Ķę„R‰N§C§ÓQVV&DāżmŌ–ÉdH„•…ćrssÉŹŹ"77×ĢĮ®ÓHN/#9½Œ*ĮŖ“ t¦K”;ŚzŠ„;M|ź§ćų^”Ńčł+^ĪŃÓ%œ½('3×zʝ““mŚ“!22’‚‚‚ ¢yóę·¤{|»‘••Eff&iii\¹r…ÄÄD LmTzbādÄÄÉpu¶£s;wzuöāĮŽųyßß×K·6łģž«©™ –-¾žb\³ē\?Aq^ĶŗQJ•ŽYĖ“iÕLĻ“ YFŅrąŪŹ D"Ó§O7+Ī]­VĖĀ… ń÷÷gٲe¦õ···÷ ;^zé%^z鄺}Į›dņäÉōīŻ»^:@^xį.\øĄŃ£GĮ¶d|4AˆŠ·F›`h“•\IUR»1åvŲż[>2…I-ńA[6ÆūŃ„K^y啞ūōéÓŲŁŁńąƒÖ¹_sēĪE.—ó駟š¶egg3gĪN:…ŃŃŃ̘1Ƥõ¾zõj ૯¾"##ƒ€€Ž~ūm|šAžüóOV¬XĄ–-[ųłēŸi×®Ó¦M³Ų­V˲eĖŲ½{7„„„ųłłńļ’›ēž{€ļ¾ūŽ 6ŸŸ··7Ļ>ū,/æü²iŒ]±bžžžųųų°bÅ ²²²`źŌ©¦kśŌ©S|’ż÷¼žśėĢ™3‡øø8ÜÜÜ>|8o¼ń†Õß§_æ~Œ=šM›6B=Æ€Ł’1æ¶ķ%DÆļ9T@ænŽø8›’”;“V“ü§™L0Ą¹»»×Ф7fŠW5B6”y¤zöGqŚty­Ēœ½(£¬BOłßŽ‘gĢŠ«W/Nž<É+Æ¼ĀØQ£hҤ )))¤¦¦2yņdœ‹ÅÄĘĘrłņeüżż-fa=÷ÜsÄÄÄ0iŅ$¦L™‚½½='Ož$$$„~żśŻtŸŒŁGÅŪŪ›²²2‹6”‡zˆ… ²hŃ"¼¼¼ %66–6mŚEdd$ß~ū-įįįóĶ7ß “Éīūś±ƒ ")) ƒĪ&ĀĄīĒĻƕT„EHLœŒ•Ūóxe8ü#l‰D<’üó·ŻŸ~żśńĆ?päȑ[WŲŪŪćććS£ŽĒķp#Ēr“&MP(¤„„ѲeK³}Ękųڵkfµ;ŅŅŅhŚŌJQŖū€ēŸž-[¶ Óé8xRp€Ä]«˜8:„ī,;¼œ”{„œ3×ܐĖåø»»ćęęf²×ī:Ī–ras€Ō3Œ“{źåŻØJė–y>QĮ/Ē*‹9880gΜZ#Ɋ‹‹Y³f ķŚµćĖ/æ4«›6mzƁlƌuźßĶ¢R©xå•Wxżõ×ė„ąż÷ß'11‘«WƐ‘SĪö}¹Œj=:ļ~dÓī³ŗC† į‰'žøįqgΜ”Y³f“k׮Ο9eŹBCCĶ(’’’˜;w./^ÄŁŁ™¾}ūņĮ˜¢f͚EĻž=)))į›o¾”°°¦OŸNŪ¶młžūļŁ¶m .dõźÕ 8ńćĒ[ģƒR©džüłüöŪoØÕjš7oĪäɓéßæ?z½ž•+Wņć?R\\LPP&L`Ȑ!¦ć?žųc @NN›7o¦ØØˆ°°0f̘Axx8»vķ"99™‡zˆ påŹüüüxłå—6l˜ÕßgōčŃÄĘƚŅ}å„Z¶ž”Ėk#kO¬ C y;³(äŖPF9²Ę…l0ŠVH‘fģ½×]©•¬¼ Žž.ęŲY)ƔR”¶¼ˆ‹ÅNDD!!!pGÖUēooo€Źčt:ņņņČĪĪ&##ƒ«WÆråŹ®\¹b¦“{=KÅõ,;É °©=;yŅæ»7]Ū{Ō[ł£»Iy…ž“±Rž8%\JUMG˜X,¦M›6tķŚ•ČČH"##iÕŖÕ}­åė닯Æoyæøø˜ÄÄD¹pįēĪ3]3J•Žcg„;+ežŚėD…»óPOoōō!Ą’žÓ«öpÕäE‘ĢŻ”N_Ż€et€ŲŠ*ŽæTĻž°°“ć`R¹–°īę’EX°ŌU‚ƒĒŒsCCɉ'(,,dҤIw,ųČ`0––†F£!((Čj‘[•JEzzz¢„·Baa!xyyÕpų(•JŅÓÓquu­u^)++#==«żŃėõ¤¦¦"‘H ² &‰ųųć5jłłĀÜs)vaÕž]žžųyŪćķy÷œĘŁyœ:/#Čz[y,JĪ„_OU¾÷ööę³Ļ>»©1>99™ąąą[*bž™™iV°V­VóĘoPZZŹ[o½Eyy9kÖ¬aęĢ™|õÕWäääpäČģģģ3f ŽŽŽ¬ZµŠ™3gršąA<==iÓ¦ W®\”iÓ¦“iÓ¦†!®*Ė—/gÓ¦M 4ˆ=z™™i2ļŁ³‡¹sēŅ»wo^}õUŽ=ŹŖU«pvvfģŲ±€ą°łį‡°³³cģŲ±H$V®\Ɍ38pą‰™Lʑ#Gøpį>ś(ƒfēĪlŲ°‡~˜ČČH«ż{ć7ˆ‹‹3EU§dĮo™Kay» uvŅ‘¬¤k{sƒœƒZ”’ļjŠD¶¤Io”³½[RĀ÷ćx«./A‘½ÆÖ¶9‚äk@Čž;†¢oß¾w¤"‘ˆ¹sē2ž|öķŪĒŌ©SMūŒN ;;; Ą”C‡7n³g϶˜}ŅæŽxć V®\ÉøqćAŚčwŽ©SŸ¢¢¢hÓ¦ [·neėÖ­<ōŠCĢ›7ÆF;777ę̙ÓiÓxļ½÷!BžĆ?¤}ūöĢž=›·ß~Ūō$ Ææžśmń’ śōéĆāŋøœ"8@BĄĆMlqM ‚cĄĒR’®Aß½{÷Zǚ›eĈģŚµ‹O?ż”f͚aŚWXXˆŸŸŸil–Édµž«OŸ>üōÓOÄĘĘҹsg@gu:]Ęl£Ķ$77·Ö@ÖšĶ7ß°qćF>žųc 2#ÆsēΈÅbvģŲAÆ^½‰D$&&’””dŗ~ļGš5kF’žż9|ų09…ž+‘^N.ēō™U@ßh=g’dČå‚ćŁčq©"%n«ćwas€ŌŒ‘ ƒ­¦œkźVŗD&ŌżØąžĪ;ļ˜ ø–8xš jµš &Ü1żV½^Ļõė׉D[=oii)YYY4kÖ¬†e]ÉĖĖC&“įēēWCŽK&“‘ŸŸŸI—Ń …‚ģģlš7on5õQ£Ń––†««+͚5³:Č9::ņŁgŸ1nÜ8SĶ‹ßOÓ®µ[EķżŹ_d\HŖL„ 1-–jCÆ×“’’rĖE꒓“ĶäTŠŠŠ˜8q"^^^Lž<™¬¬,¶mŪ†‡‡‡©?iiiüłēŸ8991vģXJKKY»v-óēĻg͚5ųūūÓŖU+ŅŅŅLεÉ@̘1ƒ?žųƒgžy†ČČHńņźø|żõ׬[·ŽAƒѵkWvļŽĶ'Ÿ|‚———iį{żśuęĢ™ƒ‹‹ ćĒ§¤¤„õė׳hŃ"–/_  Ż»w³’~ž~śiž|ņI6mŚÄ_|AŸ>}¬>Š£DGŽI^žP«"&Nʃ=¼ivóчb%„ŠóČ]kF2TÕ³lČyՈ²‚”-ču5„šī5 ÉJŽüUŸgJHN·\PÆI“&tīܙččh"##iŻŗµYjņż€É SµÆĮ` ++‹¤¤$.]ŗÄ¹sēHHH0e‹d啳ó—rvž’‡«³½:{Ńæ»7}ŗzįźÜššėĀłD»ĖēPL1åęĪ0cŹ|·nŻčÖ­]ŗt¹­”ž{‰½{÷6Ķ):ŽĖ—/söģYΜ9C\\œ =l€ų$ńI –|“Nūp7žčĻ#}|qv¼=Ż#ŠŲq¼™ĢĶjQņh¼jhēŽģ”£Č kÄ-’j8śW Ķ|ax5#śæ›×żˆŠŠŗ)ĶńóēĻ·fČ[²d ›7oęŌ©J+yzz:ļ½÷×®]„læéÓ§óšĆBōżoæżĘ°aƘ7ožÉń8xš`fΜIbb¢ISĻž=ģŁ³~łå‹}Šét̚5‹}ūö™œHżū÷7ÉĘ®[·ŽÕ«W›dcŒĮYĘõІ 8yņ$ƒ bĮ‚&ټįƇóĮ’’Āˆ#X¾|9Ÿ}ö€ ļ²fͫ㠗—_|ń/æü2Z­ ¹ćwx 4·^>ƒØ0ˆ Ó BŖBÓ]k<Ü%<Ńߑˆµģ X·³gĄ·Žz«ÖgžŖČårZµjuGśząĄŅÓÓY¹r%]»vcŻŚµk‘J„¦µ“L&cŻŗu&‡·^Ægžüł¤¦¦Ņ±cGZ“hĮ¾}ū8p`­uŹŹŹŲ¶mżū÷7ĖB1²aĆBCCYøp!vvv <˜1cʰyófFmf„Üøq£)pK­V³dÉŅÓÓMĘBƒĮĄ3Ļū,111µ:@$‰ÉĮf¼¶¶„īQę2kOōƒ>Äxū»X¬žŁ!LĖ•L9 …y4rUCœŃҐœčUm$z½žāŌĶ7\Æ;9ˆyqø'‡cć²H$¢C‡w¬OĪĪĪ|ųį‡Lš4‰””Ó×0gĪ®^½Š‹‹ ĮĮĮ€ąÄ®Īųńć>|8ÉÉÉųųųhf;ٽ{wcFÅØQ£LļÅb17n$%%777S WKōčуžŸ½óŽ«Ŗž’ųó^6*KŅøQœˆJNÜ9 2s”še™šåĢŃpä.SæjeZš#őāȕøwøŠ”=īåwžžøžĆ½ÜĖžx=÷!gŽ÷Üūł¼ēėõįįįXZZR½zuŃgØV­›7oęŽ½{Čd2¼¼¼Lb4’üóŁ’ƒaQįäɓ™>žŖU«ņß’1xš`zöģIß¾} fōčŃTŖT‰ŠŠPŹ—/Ļ AƒŠž½tčŠŠŠP.†C·Ö`a®åŻIfe ­Č9y#MŌę]C*¬Ņ.W„ aaæ{uYŠ„ü/0ĄĘ]I7ŠżčŅ„‹ ·£9\ŗt Zµj•ļ¹91aĀ"##ٲe‹øļźÕ«L›6˜}*ŻÅŅ~ųA4pēϟB” zõź¬Zµ „R‰T*eĈ 6ŒˆN̊+X±b7fõźÕfĒ P(˜Üļæ’ĪīŻ»yļ½÷čÕ«)))(•J@ĻIæbÅ ŗtéĀūļæODDsęĢįŪoæå—_~ļqéŅ%¢¢¢˜9s&īīī,]ŗ”ķŪ·Ó·o_±ĆV«Õ2fĢ>żōSZ·nĶĮƒłć?Ų²e }ōQ®ćóńńaųšį"ż’J kvĮ”óž,£ćaī÷š©ėTģŽŠ ¶Ö*>č‘»~Ӂ3p'*{»I“&ōģŁ³Ąļ‘••Ulō³aaa899‰ÉŠ' t:111bÄÅÅÅØŪOxv łļāʍ(•Jŗwļnr,55•‡ņńĒ‹IeKKKX¹r%Ož<żŠ *u­ Z FÕŅ:t’®Q£ÖÖÖ$$äļ³{yyŃæ‘ K‘©O‚Œz7ū;°uÕz!ŠŲ”2¼ÕŁ8pke u«¦rēqY‘‹>·NĀ×1‰®ÕjÉLŒģńž|Ļuv“āķrXæWqć³ lٲ¹²UH„Ņ—Äźž¢ĀŚŚ:ĻD\ĪssKI„RjÕŖõLcyѐH$Ō­[—óēĻ›¤×A²Ā‘ J*?I”Ms'“kž÷Mm._ś ł??æb“PD¹uėVīܹCFF^^^¢Ļ/•J™6mĮĮĮ$''cmmD"!((Čh.Ŗ\¹2æ’ž;æ’ž;·nŻĀŁŁ™īŻ»óöŪo‹ēōģŁÓä™Õ«W   q.šōōd̘1„††—ė÷M"‘°dÉ~ūķ7ĀĀĀHOOĒĻĻO,^?~ŪŪ‘šV{}G„››-:f‹ “jØåäÕ4d²rČd2d2™‰ķ^Śņź 4R`XŁ ĢJēŽµM…ŗžźm9ēÆfg/=<<ųśėÆ tķƒØR„ 66ĻN!—Ė?~}š‘#GŅŖU+?~,×ėÖ­cĖ–-ōė׏^½zqāÄ V®\ɒ%KŒxdwļŽMÕŖUłį‡°µµeöģŁüüóĻŠ‰‰‰L™2…1cĘP·n]6mŚÄ޽{ „K—.¹ŽÆOŸ>œ?^¬–H•©Łq(޽rēx~š÷ĮX’S³¹z÷īmäĢä”ㄸœ©’žūooo#qĻʍsšąA …HĒSÆ^=#*CgŖ0ĄK—.ˆŠ!īܹCff&Żŗu÷988Šŗuk>lŌ1ѰaC£.ŽŗuėBbb¢½\ĒŽŁ„”†cĪ:t mŪ¶?®¤|(&}4 3fĢ E‹Œ1‚?ž˜ˆˆцxēwDŃŲZµj±cĒ‘–6/ :”ƒŠ]1ĆįÜušĖCŲŻ”*-'’K”ow÷b-rŚĻńó‰Lżj™1eSå°É įĘĀĀ‚I“&jް³³m÷g… Ł4gĪqŸ`Óź€å„`ĖRb½ĶĢ„‚µœßÅMBB‚č[äü¼„ń]Fy;æs|ņÉ'8p@¤Y;šė+ÕØ5°å@:©é Ś·tĮ)‡¾ŸOM įQŁ] ¢ˆŠÉm˜D/év¼”­®ÕjI~° Nļuēß&%EFŅÓšH^„x=P¹reΟ?V ‰)ą^–mRQ§F“ID«ƒK7SQ©ąžS©SGGĒb/jŲ°! 6Ģõx÷īŻM’·B!°!<== jsā‹/¾0Ł÷Ęo˜čr <ø@TUeĖ–eģŲ±fYXX˜t å„P@jĮN`H. R„Jf’’Å777*V¬Č“'Oø÷ō™žøTpČ3ł`i)”EżtĪ…§‰L†Ég„RYŚņ įõ¼fČīžŲJVFrž<…Z­cCČc£}'NĢS÷Ćr¹ü™é§ģŻ»—¤¤$fΜI«V­š÷÷gŲ°aDFFņčŃ#ń<FƏ?žČo¼AÓ¦M:t(†{÷īQ„JqB2ŹUė§„„±wļ^zōčĮ°aĆšöö¦S§Nb >88ooo&Mš„··7Ÿ|ņ ­[·fĻž=dee;µZ-?żōžžž4k֌!C† T*yšąŃū1‚ĄĄ@¼½½;v,R©“@ĪŌ„ Ĥ Ą”“ID=.GćyąŃ“LŹīuppČSą/'„.‘āt¦’’’˜3gŽų:|X_ŅcčLå\d„äUA‚3e˜pÉy̜3„T*IK˽27ēĪp܅ó¤I“ŒŖ-wŠ'!YY k8X\G––ŒL&#==ĢĢL‘[T£Ń%h_7čt:”ŠXR_b÷‡J„eĒ”8Žūā2“Üęąd1łQ©R%†ζmŪŲŗu+Ÿž95z­“ęąāāĀŪoæĶO?żÄæ’žĖ¼yóhÓ¦ų9ÄÄeńŪęG޼ÄģŸļ™ķš)©ˆ‰ĖbŃ‘¼ūłe¶ģ‹“åŹ•#((ˆæžś‹Õ«Wō’2ł‘–––“nݚoæż–żū÷3uźT#JK7e|9;œ&^eļѓڗ3ƕµÓRÓż iiiā+==ŒŒ qžÕjµÆõü[’”āUs;lÉ±,„–u;cų߆’s˜Ē/µ»ŁŪµjÕāŻwß„ P«ÕÅVŁ-ˆŖ¶lŁŅh<Ä`ųD†ŗAbb"‰‰‰¹ŚōwļŽ„eĖ–F]ÕBW­Œ`XY*$F„Ī/sc–J„T®\¹@c¶°°ą«Æ¾2²ĶžĢ;˜ß±cG#žüPœĪ” “`Ų~ičL NS™2eŒøf…JœĀ:Sh4³Ā\2™ŒŲŲXśōéc“æmŪ¶œ>}šØØ(qlŽŽŽF•C‚3•s<†—³³3eĖ–-P„¾££#Ÿ}ösēĪ@£ÕńēŽ¦ŽšŹ7ćü2¼7ÖØś|ŌØQ… ¬ H‚>ų"99#GÅÅÅ…Ī;›Ø!‡Éܽ”²œĒ„ķŌŌŌ\Š1Ŗ kxUŖ”!½š IDATT‰!C†šėÆæś ćāłųŻ‚·ŽZYdAĘŅŅEN˜Z Æ[²į¼›š`[ŖÉŠé¶ķeóž'$¦dw[ŁŲŲŠ±cGśō郯Æļ’»dG~°³³£sēĪtīܙųųxöģŁĆ®]»ō"¾j»dz'4ž6¾Ī ō AķāŸ#^’SUüü×#v‡ĘékÕŖÅąĮƒéܹs±uٽ®°··'((ˆ   n޼É_żÅžżūŃh4Üy `ę²»üµū1_©žR“¹šÕNįöŃRS³……*^C*ĀŅ9ąÕįŚ}ļ(ņŌH“söO$%MMƶąlšµŹČ‚u¹v©TŹŌ©S eƒŪŪŪŗØ#7$$$ •J“G„¢’¼¾s5–@]U˜÷ĢźRØÕjRRRDįjBgL^žPt“ßxģķķIOO/ŠX›6mJ÷īŻÅīķÄT}¢a )Ė’ˆN~ ˰ a1®9g/§"K׊³ ؘ™īSåpų|öv… >|x”ß§f͚bg³ ܗ+W­V˼yóžé>…`›{¶åQĪߌpnq;w¦eĖ–¢Ļ(ø>ģ5ZĄĪ# Tšļ˜iPCƵū2‘ŠE&“‰Ża9»@¾$CŸp֐¹ `Æ«Ō:Rej*yBģÓ©#/j¾R¼0|ĘŹ§nU¦lmL×Ųō }fĢŅB ܉YŠ’ ”øU§ƒ¤Tż³ßwB­m*Zēė²µ‘Ьނ+²Š‚Żn;Ńjµ„] /„ ”ūćŽõزņā1D|’’=”ŁUZvvvŒ?¾PļmggWčvć\ĒOFF†ØŁ]yżų ź¼äD^Ī”ą,åt¦„ŹżÄÄÄ\ł-ēΰK$·ó”ĘüHHHׯ_ąĪ'ĆĢsR¾LDĘdrõv¶š¹··7…ŗ‡T*ÅĖĖK2~Ö›ƒƒõźÕ{)ĪT¹rĘ|ńĀvĪßĢĖt¦† ĀŽ½{E”ĻÓSx»sᨀ-ĆI–5B&+'Š)šD‡×g!×étؕrŅ›k}^Šhtģü7žß‚Ń̹øøŠæśöķ[bÅŖ_4ÜÜÜDįÅsēαvķZĪž=‹VĒĪė…ć;¶taŌūÕØģžģ4/jŽmūcłmó#äŗ^uźŌaŠ AōčŃ£4 ^ŌÆ_Ÿ™3g2bÄ6nÜČöķŪQ*•Üy `Ԍ›“iīÄøažxTxqߓrö:ŖøÄ’,s)sóÆąLĮė3’–dˆ6ūUóK± ™”±3>’ē$¤d›WōéÓ'WīųÜąęę†B” ))é™;¾är9–––¢ą¹€nŻŗŃøqćgŗ·9v’¹@¤B”@§Ó™üƒāņS ƒ±cĒrāÄ d2żCŪsz¼a,ZmÖ[ƒB§&#Ó²Xh°Ō)Ė»],iÓŲ|ŠwĻ Č2pC† "ś0…A«V­Ųæ?»vķŹS#„ puuåÖ­[(•Ź’¤~÷īŻ£AƒfEGGķŗ] *_Üųģ³ĻÄĄß”Ę kX: ¤VV˜ó2-, ¦‡œūq2qķ0D·³³õ¤“Z­øn”“õĆ0į¬ŹLF{Ø@ש5::¶tÄĮ6•[ōū ꯗ¢äĀš[>~łŚg7Óxµ•ž·iź)ŹÜYŠ’ĆnĄL%T|&ŒM,X ²m ēoɑĖåbā9==Ż$łü:–$”zÉÆ0ŒvU‘7wźś‡āP©³+C?žųcjžüąęęfbBõ‰ŸŸŸųj×®C† y.b¬r¹0ļL ŽVNŃna» U`Å©TŹäɓWŪÄ¢Ö¼Z-r»ĒaŲµ7bĈ"ŪZ¶lIZZ”””Ļ<¦ņåĖóšįĆg¾OA!8L÷ļß7;0u¦bcc±¶¶~)kkkk† &nk4:ž9šg’!¬,²Š*nѰ¼®ķœ†ónrŌn“ź7œæ’ŹÆ®±ą·ūbņĆĆƃńćǰaĆJ“E„ŸŸĖ—/gćʍ¼łę›OyÆįš™$Žūā2ó~½OŠģÅwśa×Ó4ž*?ż)&?źÕ«Ē²eĖŲøq#={ö,M~<#<<<˜0a;vģ oß¾āēyāæŒ½ĀŖ-Ń/t]nV; ™Ģ”Ėpž}hLJ2 ¹čŸ\'9īŗŁóFö³dńx(kKÉRĀŽ“ŁŪeĖ–-µØA˜9,,¬Š×ꄓ“*•ŠAƒ1dČ£—Š™]œÖ6”“ÖåŹ•ĆŅŅŅÄ6:_½Ÿ‹‹‹Q7…J {Oä}Ķ£87/’-’<{tš\M›,Žķ¤¦’)DE&ĢŽ”ćāāĀ[o½U¤÷ ĄŁŁ™5kֈ…Z“ZcĶ©ü’Q͚5#==żūóŖĪ Bņ$'µYN4iŅ[[[vķŚe2V*V¬HhhØÕét9r77·gīv)*6lh$Č{ķ.„ēh&³±‚cēųqõ³TkiČŹ”u€”,™™™ØT*Ōju‰·ß…979źotš‚Q+ŪŁH™>ڃ¾¹Żķ÷—āÅCˆ ŲŚč»@“Z \­LĪu*gɜq5č’ĶiDæXŠ×†ĻX£Õ'›Ė;J(cW°‚…re$ųԐ‹4X†TXYYY&¶„x9(õ”_q {tÄæd¦ĒųŗÄd§/e;ÕŖUĖSŒ(7Ō®]¹\ĪķŪ· }mN899akkĖēŸnņŹKȼØŖķĶqø <9 ”’+ggȋ@żśõyūķ·Åķ¤§/Wš³āq|®e–uźŌ”uėÖEŗWŸ>}°““dŃ¢E&¼Ā9„üčš6mJDDWÆ^-ŅXŌ™œ’“cµk×ĘŹŹŠC‡²«”J%'Ož¤Aƒ/-ÓߣG#Ķ’£ē“II+\°×Ń2™, ™L&:PÆ3½F­$łŃ®ņ^É©*&/¼Ķē³n©”/_ž©S§²cĒ PŚž_LØS§3gĪ$88X¤GTktģ8Ē€±W8r6ž× FĒŖąGŒžyKŌ/qpp`üųńüłēŸ¢|)Š*T`ņäÉ‹ė\–RĖŖąG ŸvČ˜£Óåī¢ĮÅ>ž““41ˆeĄ2Ōb*Ŏ`³G\Žhr,9UÅ÷+īrćNŽ9Xƒ4s“_æ~Eā¤(nƒƒƒŸł;įīīŽN§+ūLå9įęę†D"1 °ƒ¾2½|łņܽ{×hæPüņ²Õ}ūö5ņ_öŸYń’ŠåA„ÖröJŖ•lQ°u_,_Ģ~@äcóĒ’9i¬ż1hŠ "ŪeŹ”aŹ”)dee1|ųpęĢ™ĆęĶ›Y¶l}ūö})gggnß¾ĶöķŪ9uź”Ł{½łę›T¬X‘¹sēņūļæ³oß>-ZÄ·ß~[Ø1ŁŪŪćääÄŃ£GٳgüńG®ēuė֍°°0¦NŹžżūY¹r„H ;pą@īŻ»Ē”)SųēŸ˜6mW®\įƒ>x©†…K ļɉۑZ®Ž–sé–Ģ䘭 T« Oz8C-欬,qż0“įK ĪjUi žPĖČŌ°āÆ8Ž…e'¢?Īå‡TŠ×111āß®Nł†Ļ”ó[š#“s„R Z¹Rƀ1ŗø“KKńźĀ0ędó4/öė4)ߏ5Ļ cķšiI—g' ķv„Ri¢ĮT’ęŻ×„ W†? FĆŻkĮ…ŗ~ļŃx#ćzŲ°aXY™føóƒ”3õ¬ØP”qqq¢†Āó†Šŗ|ćĘ “cåĖ—G"‘äźL½¬¶ē>śČč9ķ:’ŅDXsb÷įx£ī?žøČżjÕŖ1bÄāāā8p ‹/fĖ–-,^¼˜”C‡Šē999qįĀBBBĢ>G€žżū‹ĀĮĮĮģŪ·9sę°råŹBÉŻŻ©TŹŽ½{łēŸŲ¾}»Łó¼¼¼hҤ ;vģ`Ń¢E8p€„K—²sēNŹ”)CŸ>}8~ü8 ,`ļŽ½Œ;–ųųx#ź· KKK,n«Õ:ö™OĢ vVrԊū¢õ:whµZRŸAYš¤sQq*,…&^åČ9½Źž C† aūöķ™8ą™™™œ:uŠæ’ž›#GŽu?„¦¦ų ÆxŹķ·ó’Õ«WēĒä÷ßif’SULžįÓŻ!õéyĮ‡S®³jK4Z­©TŹĄٹs' Č7@s÷ī]vļŽĶ®]»8uź”X«Õj¹yó¦ wž­[·ņM’‚§§'’ūß’˜7ožd½y7”“®²óŠóŸšÖJ«É ŠęÄl_—9ø¤Įšó—§FūŠ“`wh<‘wī\fΜɦM›ŠétT«VQ£F0nÜ8t:!!!S”B¾żö[ڵk'^ļééiņĘcc£ē˜wuu„~żśFN©TJżśõ‹Ō”Ō§OVÆ^M|¼^(ōL½;ŗQƾą<Ōe„7‘ɼD:;;;;-’ #ś«ČmĻõ½2²“,XyŸŽe'¢üżż™6mīīf"ĄįƇ™3gŽIyƆ Ō­[—U«Vń÷ßsāDvšķūļæēŠ”C¬X±ĀˆR”z4jԈU«V±cĒ/^ŒB”ąßÓI\ —3żóš/EüZĄ‘sÉL_Af–>ųX©R%fΜIÓ¦Mó½6==o¾ł†cĒŽķoÓ¦ ‹/õøFŇ~čĆ÷ߟ\«i’æ¢sēĪųłł1wī\}:Œ1Āä>^^^ōīŻ›FŒAƆ ‰ŒŒäʍģܹ³Pś žžžœ>}š šäɦOŸn–ĪqŠ ALš4‰įƇөS'’““yųš!k×®eȐ!>|˜Ń£GÓ„KĀĆĆłļæ’9räKåfļׯėÖ­×åNAƶś›9“oöö6Tt-ŗžŠ„›2²”Zŗ¶ 3SĻé+ ĖŃQdČm^Tųśśāėė‹V«E„R‰öŖ€7ŽxƒŠŠPt:hNš4Éä>ÕŖUć×_E­V#‘HL“Ķ µWÆ^uėÖķėׯŸUan°··gƌLŸ>•JeōŻ•H$ >œįƇ“‘‘aB zMŽœØU«–ŃxZ¶lIĖ–-MĪ[¾|yžcĖ }ōcƌō¢¼ĻĀĒŁDŌ¬Ž^PŽQś“@ĀxžwvwĒl>zįU¶lYŹ”)#ź°äģyÕ×C[]«Õ]ønm;[ ¬¬$¤ŹuŌŖ QśnżŪ·oćķķżœF­×–™5kÖ4[iŌ¶m[š4iš5kxųš!U«VåöķŪČd2Ö¬YSØ1U«V’ż;;;žÄĀĀ‚¹sē2|ųpʍLj#hÓ¦ .\ ""‚ٳgæŌIhŲ°aģŁ³G¬Ø ł7æF޼Ģyńčł$£Ž¢?ü°X‚Ż=zō G¢Ą}NC°_æ~aaa!>“E‹™Ü§iÓ¦lŚ“‰ĢĢL¬­­MĘöĶ7ߘ\cĪY™0a_|ńE¾æ777ž÷æ’”R©ŠétFć¶±±aźŌ©Lž<™ŒŒ ³NēĢ™3Möµiӆ6mڈŪoæż¶%čøœ`Aamm-&”@_Ax2,…®m žLq°I"5ż2™åŹ•3 ĀYXX<ÕU(TnŠétČĀȒß{n¬dāüŪܼ›-ś:jŌ(ś÷ļŸėēʔ)SØ\¹2Ó§O§AƒČår._¾lR)iˆŚµksćʍēBĆ£GJ|bE*•DėÖ­™1c.\ >IɘļońåŠź¼ŪŻ|BźybóŽ',Y‰ŠŲ¹sg¦NZ NǤI“8wīļæ’>żśõĆŽŽž˜˜q®5'''¼¼¼L„b‹J„’sēĪQÆ^½ēBył"ąąąĄÜ¹séŌ©³gĻF&“±’x1qY,üŖN®NtqĄ§F2ē"Ź›u¤lllJ©— ĮfĻP$óčĪ>“ćZ­Ž¦õ¬hR[‰•„įuĘŻĀ:ż,psscƆ lÜø‘Ó§OsåŹ\]]éŪ·ÆŒźŪ·/įįįDDDˆ% 64±9¦M›FµjÕ8|ų0§N¢zõźLž5jŌš~z½!$¹ümn;·}Ꚍ|{DQƄnū„Ą×edjłåÆ(Q¤ÓÕՕéÓ§›T×åĖ—§Gz-’čh¢££±¶¶¦WÆ^“hŃKKK<==‰ˆˆ **ŠśõėćķķMZZ4oŽŠž:uB„RqćĘ qāūšĆŎ ¹\Ž‹‹‹‘¶„F£A”Pąēē'VFWÆ^ššp?~Œ§§§8ŽœhҤ ŽŽŽÜ»w;wīP¶lY©Zµ*ÕŖU£^½zÜæŸĖ—/ćāāĀŲ±céÜ9[M.—ćźźjı®V«ÉĢĢÄĻĻ777”J%:£…*))‰śõėSÆ^½B}Ž}š[·nqG7k֌‰O>? 6ŒččhŗvķZģ÷~(W®o¾ł&eĖ–åĀ… h4ZN_LA–®”ecĒņÖźą§5‘¬Žż3eŹ>’üó\N9ʚ5k0`ćʍ£\¹rŲŚŚāęęFŊ½”æfĶüüüĎ;;;Ž}÷]üżż‹ż’uäČ&L˜@·nŻ^ÅdqĮĖĖ‹N:qśōiRSS‰KTrņæŚ4w¢l™ēćČUpŅpž¦5–vŲŚŚšĢæĀÜ[Rēߒ !Ø¢Ńhøżoā¢N×ht”³—оQ<5«Ó\»k,~žÖ[oѽ{÷g“µµ5Ķ›7ē­·Žā½÷Ž£wļŽųłł‰AįwŽĮ×׊wö “·¤R)Mš4!00¾}ūŅ„K<==Åć•+W¦mŪ¶F ‰DBŪ¶m+...ōģŁ“ĄĄ@ڵk—g Yčƒ ß[.—óć?²eĖRRRšńńįŠ”C,[¶ŒˆˆüüüęܹsüńĒ”/_žŹ•+³oß>V¬XĮƒšõõ%88˜½{÷’••ÅéÓ§Y·n7nÜ N:Ģ›7k×®įīīĪĶ›7quuÅŅŅ’ °}ūv\\\Ø\¹2ėÖ­ćąĮƒlŚ“‰FذēYńŪo扉Äz‚s9°·ß&^”w6ŸŠPŖuø;)(k§įN”~­÷õõ„J•*Ļmœ·oß槟~ĀĪĪŽ%K–Š¢E ‘m%7üśėÆø»»ŗøhҤIōīŻūY†[hÄÄÄ V«±³³cķŚµTŖTé¹ų§EĮõė×Eśs憊¬DÅź Z5qĀæiĮĒ)‘@f–š{1VŲŲŲĶ»¶¶¶¢ķ^’ģö‚ŽĻÜy†ū~žłē‰‰‰€:Ÿ—&——ÖĢK—ĖĖ,^”[)L ā"oī$ēg‚Ó—RČTfw 4ØX‚°*T`üųń¹ÆY³¦‰ę‚¹Š£2eŹ0vģŲ\ļÓ½{wēĻÕՕ©S§ķĖ­Õ8'$ żū÷§’žf·mŪÖÄį3DĻž=Mö¹»»§N:&ćŒh¾ ‹aƆqąĄѱ>r69× …ē«įr’SUāvļŽ½_™l}) {{{ŗtéĀĪ;xō$“{QxU-x՛³},d bČėT…¬ÓéPg„žpö¹Ü’ܕT&ĪæMÖÓ9ŗgĻžL›6-ß9śŚµkܽ{—Įƒ‹ģā@RR™™™TØP!×ß“V«åɓ'888ˆ4‚E…B” 11GGG‡G­Vóųńcģķķó¤xÓh4bµS^”Õ[aƒķR©”AƒQ»vm&OžLZZ›÷>!6!‹Łćjcań|æÓ‹×D¼WOļhooϜ9sŒ:Ć ‚¬¬¬Ģ҈J„’˜˜ m IDATDītsHNNF&“įįįńĢėDtt4Z­www“ßHbb"©©©xxxäYõ–””„\.§råŹ¹&«322ˆ‹‹ĆĶĶ­Ą•}U«Ve͚5L˜0°°0ī?ŹąÓon°rvÜĖāŪ¼*„•ģ,Ņ`ål§/i4&Æ“Z-Z­–‡į{MŽķ;žĄłĖ‰ŒzWKõģŖ‡r,5Å]©_Šŗwļ.O¢ćįÖ}…±9ŲŪBŠLĆå[2ź×,5ÕÅ2~ŪÅš·u“onzüŌećķœ]=„(YčÕ«+V¬»¦N]†ö͌ϹqOCŲĶ4ī?Ź FS{¾N•,®F*HOO7᣷³³i‡KB·!K†2#Eā¹ü/2ƒ4™Šć—-©č ¼ąj„^ķŹ•+¢.Üó‚N§ćčŃ£4hŠ™9s&wīÜ!**ŠĒóąĮ#}€GqęĢ/^ĢW_}Exx8 6¤U«VlŚ“‰£GŠE2‹-2*„X½z5-[¶¤M›6|ńÅōīŻ›ķŪ·³lŁ2f͚Edd$.\ 00N:±hŃ"źÖ­Ėž={X²d ß|ó ?ęŌ©S 6Œ  “É8p &L 33“.]ŗŠøqcüüü˜?>>>>>|˜zõźńÅ_šé§Ÿ²~żzvķŚÅ’ž÷?.]ŗÄž={ųä“OžėēżäÉŽ= €{łģāØłą]ė?L®köŗ7Ū»āßPĮѳÅB…ćĒ(žō,Ø[·.~ų!•+Wꥁ|ųį‡DGGS¾|ylmmINNĘÕÕ­Vk¢Ł—••ETTÕŖUĆŚŚNĒćĒ±µµmw…BĮ“'OD¦C¤„„‘@ÕŖU±²²B£ŃpļŽ=*W®Œ½½=©©©X[[M͚5‘H$ØÕjīßæotŽV«ÅĀĀ{{{¢££qssĆŹŹŠ5kÖŠ²eKZ·nĶūļæ/ś‚ÉÉɤ¦¦Š”å©©©čt:ŅŅŅÄā…ē Cśč^ś½*Ćŗ¹pr)<5ž%»”NzzŗQˆ į—“¶“äÅ”d¶æ†0\ŲUŹ bīż[ØėžĶžmllJ«~J(jÖ¬iT‰vł–Œ”“—#ĪvÖ@ūC"‘”:S%9焳—Sr9Ó<¤-ÖŚ»FNŌė"¦ØÓéH~ō:]ń’֮ݖóÕĀ;d)µH$>łäf̘Q õŋŒtd Š 6@FF†ø/99™Ń£GÓµkWśōéC—.]8tčx|ß¾} 6ŒÓ§OÓ«W/śōéC‡D궘˜ˆŒŒäĉäŪņĖ/抹sg y­öģŁC×®] ¤[·n|üńĒÄĘƊĒCBBųä“O8qā={ö¤OŸ>“oߞ9sęˆē$&&Ą•+Wųč£Dz½žżūIøŠĻĻµk׊ÕĪGĪ%3sł=‘’źy`õÖh1łįęęĘŖU« üŠét\ŗt©ČUuŻ»w7į,ßµkŻŗu£oß¾tķŚ•#F —g ų4ˆ½{÷2mŚ4ŗuėFPP]»våŹ•+,X°€éÓ§0bÄņ¤ņ»wļžXįHĒŽ9}Z_UŸœœĢØQ£čÖ­żśõ£K—.fyį÷ļßĻäɓÅńtė֍7nˆē,Y²„yóę±aƱ¾cĒŽ¢UAąąąĄ²eĖÄ®ŃŲD%ćē†#K7u*‹Mjeˆ¬×M̶¤ĀŠfOˆ¹„<åŃqFĒæ§’ˆ‰Wć’ćē(WĄłģÆ$>>>Æ _z) œ¶qč…ÜĻõ© V–p喬ŠļsłfJ•÷\źN]ÉžŪŁŁł¹ėJń|įāābD3z%d9‘Ś>u ż5CŌÆ”C™e^”·$®ŁāēūAW“õöö?®MćÄ%čaŠ­õ×_Ó(ĶćĢ™3Œ=‘]cĻž=$%%”R©ąÄ‰\ŗtÉč¹GDDФIZ“hĮ;w°““䊔CÜæµZĶ7Äޜ(ׯ_§M›6b!Hdd$‰‰‰Ģ›7»wōzõźQµjUŅÓÓ¹wļ Ģ›7ČČHńœZµjaaaR©$$$™L&væåĝ;whŚ“)eŹ”ĮÅŅ““4œœœpww§zõźłźĒ6mŚ$ūßō×WēGĒCR*ŲŚäĪś¬ā»iÜø¶O]µƒęI%[œākÖ¬aĒŽ >œōōtFV«åīŻ»FņJ„’Ń£GsąĄFŒZ­f×®]l޼™qćĘqēĪbbb=z4{öģ!11ŃčżĪ;Ēäɓٲe‹XŲūÕW_qšąAFR©döģŁĢ;—µkײzõjt:&LąŠ”CŒ=FĆĢ™3™;w.üņĖ/ģܹ“įƇϵk×Ų»w/wļŽeɒ%ÄĘĘrćĘ ¦L™Ā† X²d #GŽdłņåĢž=›“'Oņ¼”ÕjŁ·OO_je ŸšbŸ€]™BwjŲŪJØS5S“Ūe2ééé&v»aįR)^ J Æ „…żQÄæØ•ņü/xŠČ˜L"ŸŅŖtźŌé…“–āł 00Pü[£ÕqźbįÕÅ•ZĒ„›Łźœ 40įM.EÉB£FŒŚwĻ^N„°ė®³ĶCщ(„Riä@•¤]§V«!õńbæ’ķū錝s‹ŒL ‰„ļ¾ū®POBŪv͚5 żŽYYY¤„„=‹Ææžš«WÆ2uźT–.]J„J•˜1c†čˆ(•J®^½Ź7ß|ĆŠ”CY±b­Zµ"$$„ėׯS®\9† ‚““ÕŖUcȐ!|šĮ¹Ž!$$„U«VѶm[–/_ĪüłóÅ ńåĖ—™1cµk×féŅ„Lž<™›7ouÕ©T*.]ŗÄŒ3>|8+V¬Ą×חķŪ·‹Av­VKZZŸ}öõźÕć×_ešąĮDDD°aƆBn Æņ_µj•ų¹ļ?žĄĀßīś÷Rģ8Ēo›õ4,_¾¼HĮŠųųxär9µjÕ*Ņ8d2™ž„K—˜5k¾¾¾üņĖ/Œ3†°°0V­Z%ž#—Ėłžūļ‘Éd¬X±‚oæż–¬¬,/^ č…q;tčč«Y‡ BćĘĶ¾æJ„büųńÄÅÅńŻwß±jÕ*>żōSń’óķ·ßʄ X¹r%>>>,Y²„ćĒgƌ(•J~łå¾žśk K—.ĻÉĢĢd×®]3}śt–-[F•*UX¾|9iii&ćŹ ÖÖÖĢž=[LNFD*˜“ ÜH‡­øP±¼G»dqī5œKZėu‚Ų±}k·É±’®§‘”Ŗ¢]S(—£Š’ÜuPÄīJ‹KJ6¼½½ōør>_CŲZCē–ŠĢŪĪH_/?čtp%\N9{Øc¦(6*¢ć²·ž‰¹Æ ©™5øpĆųxóząā–¹tØŚŚHØāŖ+‘…õCÄ ö{NžU„HW«Q#{r°Č÷ń©S++ Ć”y}Øų4”xųšabbbŠi“¦hÕŖĖ—/;tĒG… ÄNģöķŪsöģY"##ę©TŠV«·+„źśo¾łKKKŖV­šÆ–@Īē)‘Hh޼9S§NåĻ?’4*ŗčx$ -[¶dźŌ©¬_æŽHN©T2qāDŖU«†‹‹K®Ś™‰D|oNg4'•vnHOOYģm”ƒžń‘ćśŗ2ŚśęNkäXĪ’‹73ø|ŽŠēžHLLäąĮ¢ļ ‚G±k×.ÖÆ_O×®]łč£3f Mš4įńćĒųųųpėÖ-.^¼h”$»pįĶ›7gäȑ4nܘ‹/ҧOʎKŸ>}øsē!!! 6ŒĻ?’ÜDrƆ |’ż÷Œ=µZĶŻ»w)_¾<#GŽÄĒĒ‡ØØ(2337n_~ł%WÆ^åÖ­[T«VMō½¢££IOOēūļæ§Y³fŒ=š1cĘąéé‰T*„uėÖ 2ń}CBB3f Ó¦MćĀ… ā÷dŚ“i 4ˆėׯ?×ĻōŌĮĀļ¾eC°{Ź8üĖ60įA‘mzßzzaī J„R“ŪK¼ūŗ”4ņ Įƒ^£ŃuĒ“•>/œĖQłQźL•ltźŌÉHS$·Źžē‰«į222³'}C#¼%āß)ijī>,œĄ^› “Y^«*d­V‹<ń2*Et±Ž7%MÅ8ƒŖš‰'Ņ«WÆBŻC.—#•J $†—ĀĆĆ9{ö,#GŽ$((&OžLFFēĪeS čt:ƌCæ~żšóó)/_¾,&@ ”ٰaÕŖUcīܹ“lŁ’N:ѧO6oތ••?žų#žžžōķŪ—rłņenß¾-ŽC«Õ2nÜ8Žyēüüü7nœų’1D»vķ˜8q"Ķ›7g̘1T¬XŃäœĀĄÉɉåĖ—‹‰ßæʱq×ć"ßĻĀļ„óĆŖ€¾ssŃ¢Exyyé^BgF~œĮÅśõėqqqaöģŁųśś2xš`üżż9vģ˜Ńy*Tą‡~Ą×ח>}ś >?s Ü(&Ž?NTTćʍ£wļŽ4iŅ„ĮƒćęęFdd$§OŸfąĄōļߟf͚1ž|ģģģŲŗu«Ń}<<Ē‘–āEĄ°2=®ÜÉżÜ{C’¶…¢UTktōźąĄŪĄ\ģšbŽ„®S§N¾w)^]tčŠĮ(p|)Ēs¶±†Ÿ§@æī¹=z{iČČČ0+Ź[RŖ‘³‹•“Č/”ΌĶēŠÜagkAĖFŽÄ%KHK‡oč÷k4~śé§ān¾P«ÕČårŖT©B\\R©¬¬¬prr)…ÓŅŅØU«§NB”Pˆbķ±±±Ō¬Y“ųųx$ 5kÖäĉÄĘƚˆ {yyqüųq._ÖsäÕØQƒĖ—/“œœLt“yæ§vķŚ\øpŌŌT=2ÖYIOO)JŹŁ²eĖ’””dTDSæ~}BCCE1÷¼ØkŸ~łåd2}§]§فmßśŽźģJ‡–¹SŗZYJhÖĄ1ąė­ļŲøqćs³J„ĀĀĀ‚Ÿ~ś‰ŖU«²yóff̘AXXb—еk×D]ŠS¾ : *T 99™#GŽšķ·ß²oß>,,,ˆuws"55Ոā6!!ėׯ3gĪ222DdQ©T$$$péŅ%ęĢ™ƒZ­ŸÆŠōūļæ3kÖ,n޼™k2ŽpÜåŹ•#33S¤¶urrz!7†…ro> déš źÕ,‹µUŃBęukX`caœ)ķył(M€¼bŪ:ļ“WøŒēł«ŁrWWW±U²%ÖÖÖ“oß^܎ŒĪ 6įÅ“] øn܁TźL½șȺ^x†²^‹*dĆ`aJō?ł_PØ{Ƭå÷HHÖ·†öŁgōėׯŠ÷Q*•¹VWB%Ķo¼!ī«[WĻkH;­!Õ«WG*•’PØ÷S*•ܽ{—vķŚ™­ö §Y³fFś"‚.SĪąįxjŖœćɹīyzzzĢ9įźźŹŠ+Äj©_žŠāÖ½ōgŗ§€,„–ļ–ŽE­ŃWīĶ™3ē™Ön† øtšnÜøÆÆÆU[:uL¾+ŽŽŽFēTÆ^ĢL}ėwapėÖ-³Į`!aØŪU®\9š5kʝ;ʑĘ }Õ«W'--Ķȑ*S¦ŒQWUnß©‚ĄĘʆüQ~Žŗ?–sWŠæhĮ§–µRnÄzŠ%†ĮøØŪūŠØ³ŒŽ«Õ:<=$ŒyO§‡ńµépŻ ĻÖ²eĖŅŽķ×9m«³×r?W¦€•Į‰lŪ_š ®•„„žm,č ¦a`ÜŽŽ¾Ō|Mąąą`T1}%49 ’SårčI®ėNµŠģ¬( “õCØF“Œ^å`œ'‘Å~ę{M^ƒ-?Uű¬>8.ŠŹ…††ŠšʼnråŹ¬­¬¬ųč£Xæ~=½zõ5<ź×ÆOżśõ}ĮŚ”C‡°±±”oß¾Ģž=›.]ŗP½zu¾üņK6lŲ@óęĶ©P”=zō@§Ó±vķZFŽ)vŒ >œÓ§O‹…NvvvŒ7Žü‘;v V«iÕŖ•8†¶mŪR¦LƌƂ ŲµkZ­,--qvv&007ŅÆ_?¤R)mŚ“įŲ±c\øpĘćąąĄ[o½…J„;¼…{ƒ>ø[7pqąÖ­[l޼€2vˆóf|24ØėĀ”Okbcw(ō­Nn“ó-ƒ» 4zŚXĪ©S§žŪøkŌØĮ›o¾‰««+ …‚šŻwßįē燄„%-Z“ąĘčt:£„’“““HS–””„““«V­ā»ļ¾£gĻžXYYQ¶lY‘8gbĮŚŚšōōt‘.ĢŁŁYŌ¹:u*īīī&cuvvĘŪŪ[<ĒPĆńɓ'"›@Ɔ E›<ēÜb8ŒżōSTj-_’ĮŸ bo÷lĻcŁś(DėõYŽ}÷]£¤wQ`g§@U( ×ÕeZ­–ÄÄD._¾Ģȑ#Åż111łž¦1ń¬¬¬BUü%$$`ooo” šē¶Æ\¹2gΜ…ĶAƒ ž×˜‹ZmęąąĄģٳ:t(jµšYĖļ±įGŹŸ©mc5+„“ęlDc¢T*ÅłW£Ńˆ•£šźĻæ%‚ĶuĒ4yr8ްkI|9ŖU4>–3€YZ\ņz jÕŖŌ©SGLÖ^ŗ­/„0÷“·³WU8–Kån³æ~łėY™2¾]É, K„^Š¢E‹iŒ•¢dĄßߟK—.śjD”>X'@„†­ÓiP[‚_#ó uŖ*¹žPaDÉbh抔C¶Į«#– u&é gžłžī孉Žudėæ;źųųm˜½Zlžüł“hŃB“ Š®®®ōīŻŪhŸ W'@©TråŹ‘¶nŻŗ¢ž^×®]ŗĢ|}}ńõõ5ŗßčѣ;·££#Ó¦MćöķŪ¢Mܼys£„LPPų·ŠÕķēēgD³dXÄex¾Cm>#FŒ0Śī]”B…|õ‹ ­V˜9sÄ$ŠĄīąT“Z˜óX[§óē-VłTöwlåB{?GŽ ćĶ6Z.?­µ™?>›7o~īĮzd2K—.åźÕ«ōźÕ KKKÜÜÜD[ølٲlŻŗ•įƇ³råJllløxń"Ÿ|ņ ŽŽŽ,Y²„ČČHŗwļNĒŽY¾|9'Ož4±u;tčĄ÷ß/&Įj×®Mtt4«WƵGrĀŪۛŋóū ̄P(5j”xĢĮĮØØ(–.]ʽ{÷P©T”/_žķŪ·%ēŗwļĪŅ„K©_æ> 6|”sŽJ„b޼yāvƒā‚¶M”†gu¼ėäŽ%T“l(įŌµ  …ų2¤4œwKJܤ¤£4ņŠĄ°’L„ĢäńżĀ‰ŸēŅ3¤ø)EɅŸŸeŹ”«hƆĖ_X$&.‹Ä”lQ3AX­%‰„Ö­[³ē’Ų;ļš&ĖļšŽtSŗhˆ²—"K¦bQ”!"Ø ²æČdo*eSdƒ( "¢ČŽ«`™-PJ “„»„»MÓĢßń}IštŅBõ×ūŗøh’w%yó<Ļ9ē>÷}葱¹dåØq°+~2×B¢AŖ$;ŪĶ€…lmm„„„˜Œ¬č“øTeğE«1māW$§*X’c4  z-ZTźĻĀÅÅ­VK\\Ü3{šžMš41øž&Mš” [Th=óśŠh4Čd2£B8õ¶K‹²¼’^~łe>ūģ3¶nŻJL‚œķūćų|péæQ2öՙž×ŖUĖĄ¾“pqqĮĢ̬LŠ>2™ µZ›››ČFݽR^2ŁŁŁ&ļį50¾—¬­­Q«ÕČåņ2MV”7fųšįlŚ“‰äTŪöÅņŰŚEļX“ņĪ#üBŽ(a"S¶¶¶ØT*,--Åq­¢æ’Vč'ćŅ’ĆČL Ļ÷:\¾™AF–WćśL}a>®Ä;v i™:ÕŚ&øCęę:;df«Š,”jµ:R’•„ŚØųš0ŚŠs¤Ņüüæ…:ąļļ/>4,€øUÕłX<ˆ’”VkMJ«5­×Ćr ¤XņĖ`Uäõ»0īf%^D«~v’Ą/‡’łõ„–źīšj čŌ .!ś-]ŗō¹J/^¼Hūöķ ¤ˆŹ÷ļßgĒŽ˜™™X$ł/a͚5„„čĢrŌŸj8g®ė|’Žõq,²ų!ąįć²Ā£GŲ¶m›ī<–0RĻ:łš%8x^Ī·Ņ4:·)}ü.ąå†*NŻČĒŻü2XR©“ĀŽ»’ETFGśL2FC|ęķ/Whxõ4Yݾ}ū2Ó’®Ä‹‡~ē…Z­å~Dٰ^ŠBxäÓ¤¤D")Š“öY››Kpp0wīÜA„RkŸččhƒÖÉā"*ŹD“š’łŁžł ^كu6 łq2×o£Æč:Ā“Z-Jy ņŒ’y.†ÄœŅIMµjÕŹĄo£4čŲ±#‰„}ūö=óē),*Ņ8g#•н”n­÷Kɀ'éO·mŪ¶ƲĻ-[¶4Hö‡²ōüšMųf’5<Š.(”Z4X ~św~£²BDDß~ū-WÆ^eŌØQFF˦šć?ņčŃ£ŸK`—ĒŽĆĻĻ??æBÆóĢ™3¤§§ųŗ€ķŪ·—čüĮج`nnNóęĶÅǦ Ćś`źĒ IDATĄę.&‹¼kØE.ż.Āüó‡gU„łC.Sęe›v«ĢŽ]ĖӚ7;» Ńš“–Uģaź'`łOeĖ–-œ€š’( J$°vNü¦4ĄĶ¹ųIu; †¾ēEN.œų>zK÷¼J„āĖ/æ$))©¬ßF”prrbńāÅež$:Č»vķŹąĮƒĖōŲ ™™™|łå—¢ ŲūݟzeÉąäßąādIūVeClŻÄœ¼<¹Ań#’ŗ]ߤ"Œ»’eT@*„‰]‘'ćIl`‰öˆĪE­yśCŃ×j¬ÄæłæĻ°ˆ²1ß- ēŠ{{{— »öāŋlŚ“‰³gĻ2|ųš™æśX¹re©ōķŸ5˜Ś½{·L&ĶsąĄ"„V«EvJq Õj9r¤l ŗ=== |D•ü353[³“,äŠnĘ«Pe$œG«-yQ­ üņW<Źŗ?†Ī³ĄĶĶ īŽ½Ėŗuė >S„R)_›™™”P( õéh×®‰„Ż»wKć{`mm]äĀ_*•Ņ®];.^¼Hll¬ų¼š^zé%īŻ»gd?r䉤¸véŅELDüv,‘¬u{槃 Ó¶,/+ 8sssüüüÄÖnB·8™źĢŃG‡D¶™­V[āūE`žuætķŖążłēŸ ž×h4“lىDÄū'..Ž7nŠŗµ‰Ló D=D–ݾc‰äŹK~†ęõ ^SčŠ<žž›”?w¤&† ˌ5ŚĘĆ͊1żÕ“1A ĶĻŌ/qN«ÕņūļæóÓO?qõźÕbķóųńćRE‘Ėå%Žļæ ƒDuh$ō3ŌhąŅlΦyÜÖĢiĖŪš)"õT›6mZn`7fōčŃ 6Œ£G¢ŃhHLL$77W”µŻ=˜­®T*‰ˆˆ×, ó%Ó_ū+ bccKDtR©TĒ]"tōčŃĢž=»@Ę3čŲņʼn) bęÆ[·Īč¹ŌŌŌRÉPFDDZ8ŃæÆ²r 5_ČdmgqćnĮ±T£:ņä¹’ŗłC(8g'’ Śāꊋ©#źšćwĶq©b†V«“Ż’éyēĶ›'*1¼(<~üX$†(•Jd2įįįėź¤¤$īŻ»g“oFFIIID¤äädīßæ/žn222xōčr¹\ģP(tźŌ‰6mڐ——‡L,”ÄÄDƒs޹s‡ÜÜ\£ó>oÜ»w)S¦ˆėÓočdĶv…_OŪāįįĘ«/›Š„,öņąÓ~^ é]…žÆĀĖtĻ'''3cƌR{Ē•µjÕz&‚˜B”;ōįģģĢ›o¾I‡JT\9vģ×®]+õõ}śMpp0Ū·oēć?ęšįĆLš4‰÷Ž{ˆˆŽ?Ī€ 4NÆ:t(Ó¦MCž§įģß©ōé^ü„JĖ™+©€ĪOC߄²,P§N¾ųā ¾ūī;LēĪqss#""‚ōōtvļŽ-ŸĖNŅ­¶'Hͳ 4…’Mč;„5{Ü#ć¤X\R~Š¢Oƙųi?ˆ6|ÜŖU«r¹¾]»v1uźTöķŪGLL ļ½÷^”ū”ÕjK,;tąĄźÖ­[j æS§NqźŌ)ģķķyė­· °±±)2ĘYµjƇ7 ńD0wÖĒöķŪ6lX‰×'tß©ŹŹ¤Ō§ģR}H$°ķöÉtkWøĢĘń‹) Ź¦wg°ČwŚl™®³H@qb“g…šŽ·oßNFF×®]ćūļægōčŃģŽ½›ČČH~żõW,-uņ*•ŠńćĒÓ¤Inß¾Ķʍ9zō(!!!ܽ{—yóęaooĻģŁ³i޼y‰XÕW®\A”P*“yóf²²²ˆ‰‰ĮĻĻąą`žśė/ĀĆĆyļ½÷š÷÷'==¹\ĪĀ… łóĻ? ĘÕՕqćĘqčŠ!ʍĒ×_……jµšž={rņäIģķķ6l˜x®'NŠ£GńńŅ„KQ©TH„R¦NŹöķŪ‰ŽŽ¦~żś|šĮ,X°€jÕŖ”Ńhø}ū6&‚Ŗ€Ē ąœO¹vév96Ö “nfZŅÖÖÜ«ę‘+×%ćōŁČĀś]ˆ¹*’‹0ęę< (ócŪۚó$MĆņ„ŌõóžŠ­5<އƒt‡Y³f±xńb|||ŹüüE!88˜³gĻOŪ¶mi޼9sēĪÅĒLJ“'O²qćFĀĆĆłį‡L®ć,X€»»;iii“oߞ7Žxƒ­[·"•JÉĪĪf޼y|ņÉ'tčŠŽ½{³bÅ Žxć ¤R)wļŽÅĪĪ777V¬XA÷īŻ9zō(?üšWÆ^e’žżŌ­[—;v”Jb«¬póęM&Mš$3_m”+€»¬“ÆŖå©Až§Ę²*)ęfŒ\“œ9+·ŻęĆ’Ņt~"·oßĘ××WōÄØčP«ÕÜŗUv]T͚5+w3ų²‚V«eɒ%āü\ͦ Öyr x£½mZ{ć]»l½[xk8sS7ī cÆ0ę*•Ź YxžÆ¢ā’J’ćŠg’©Õjā#Ī–ų¢ŸVŻŹÅ,())‰Ć‡ćååÅŅ„K¹~żz‘ūœ={V¬®–»vķ*Ķ%ŠŲ½{7 .ÄĻϯжėß’½X ‚: b'ék’–…±ōäȘ\Ōźņcņ k 6,×ób@±bÅ vīÜÉčŃ£ÉČȍ/\øĄžżūÅķÓŅŅ7n?żō3gĪtfV;wī»IBBBųüóĻŁ¶m[±%¶öķŪWdĖžŠ+X¶l ,tķī¾¾¾"ūę믿fńāŬ]»€­[·āėė˾}ūĖ=33___¾žśk¶nŻŹÉ“'9~ü8žł§Į¹Īž=Ėkƽ芑¾¾¾,Z“Hģ"Y¹r%óēĻēōéÓDGG³pįB~üńGöģŁĆŽ;ŒXąōƒdyž†'i%g°8ŁÉPŹ“4-+*‹L:ł«'Č3MĖ3•!rHI×1ŖŽ~ūķ2;®««+?üšC‡E­VsģŲ1BBBh×®÷īŻ›vķŚqåŹāćuŅLuźŌĮĒĒĒ@qśōéŒ=š„„öīŻKLL Ƈ°Õ«WĒĒĒĒØņŚkÆŃØQ#ńńˆ#hÜø1ĒŽ###£@T—.]ųꫯprrbß¾}ܼy4 uźŌaƆ Ō­[—}ūöĘŲ±c™6mšø5šńń1Z`wļŽ]¼‡„R)>>>F)-[¶4,+tźŌ .]/š½«ąŠ,²rtćŃ[o½Uę×:sC^}õUBBBŠ% >üšCq›/æüKKK®_æ.ŽśŸ)č>ūM›6ŃŗukNž<É„K—hŲ°!={ö·éŌ©“QŠ]»vm|||DķŽ5j0jŌ(233¹råJ”ĮŅŹ•+y÷Żw¹wļGÅÉɉfĶtĪ„S§Ne̘1DFFrčŠ!ź×ÆĻęĶ› ¾÷Ī;‹Ū Č’;hŌØ‘8¦ °³³ĆĒĒOĻūKˆ7ŽxCL^¼^“ÄJIŃØ¦Ģ(U aEƒ’­Š%ćŌÄGž5zķnx6Ń ņ ˜N#õTó<<<ŹM[ŻÉɉŽ;ņÅ_pīÜ9²³³¹pį7oŽ0čźĢbdffrüųqQ*Q”PpåŹĵjrr2§OŸ&55µŲ×$°ūõ‘––Fß¾}™={¶˜ōĶß= T*IMM;ÖT*•Į|#tŒ?^,~ØT*±#rįĀ…&Æ'==Ż Į«P(P«ŸvlåļP(Čår–.]ZąūĢ?žD¢‚WŻ]ēļ!x†„S)ü~Z‰¹‰Č=:ŃšqžDyY"&&†#GްsēNŽ|óMFŒĮ”)ShŻŗ5±±±“hŃ‚ŠŠPnŻŗeŠĮ~żśuZµjÅ_|AĖ–-¹qć½{÷fśōé¼ūī»Ü柃2tčP¦L™‚‡GńĢgO:ÅŽ½{łķ·ß8~üøĮk~~~̜9SdĖ?žęĶ›ĘŽ½{Yøp!;w ,,Œ™3gāééIXX.\`žüł¤¦¦’’’"Ž·‰‰‰Ģ˜1ƒ““4ZµjEÓ¦M Š ė䊏Åccc™3g999DGGĮüłó¹yó¦8VOš4 ||| ,ę’^£óŻWff:¹Ÿ”t¹ņ‚ļ§55āÜ!ĖG`R*•ėwx±r,śs˜J)#7ķf¹œĒĘZĀ£5ūĻ@Ģ?µ·!ļ@Ļ–*•ŠŁ³gó×_•Ėł CĖ–-™8q"#FŒ ,, ŠåFM‡ˆˆˆ`ß¾}Ģž=ŪĄ@[@NNÓ¦McΜ9œ>}šŖU«2sęL¾ųā 1OćźźŹģٳ±··§J•* 4ˆĘ§}ūöŒ1‚-ZĆ/æü‚ÆÆ/Ÿ}öŁ ½Gžžūo&L˜ ŽÕķ›Ć„tæ‡ä4ŲqŖV±`åœĘ8Ų=÷ūļŪ2ž:ÆaÅnų| 8ü“#?zō(sēĪ-Q®”,ÉņåĖY²d‰8^>|˜Å‹³yóf@Gõ÷÷%Āōqųša6mŚÄ×_Mjj*¬[·___BCCŃh4ģŻ»—%K–””Äwß}Ēܹs‰ŠŠ"..ŽŌŌT>|ČŃ£Gńõõ姟~tó§ææ? ,xfYŽg…F£į«Æ¾ā?žĄF Ó>}śl’īD:ÓŌŪ«2źžšR# r½ī;”’Ü­\·—?*;@*VƒBžĶ“øāµŖė#:įiĒH“&MŹ­śģįįA×®]‘J„œ;wŽŗuėrēμ¼¼ØWÆwļŽ„E‹h4q‚šäÉn޼IóęĶńōōD&“qėÖ-ģģģÄä~ll,aaa%’7ŹĢĢD©Tt™$&&2zōh3%FƒJ„“1 …‚ääd1€R*•˜››‹Ÿ\.4Ó§O£T*‘H$˜››³pįB|}} ®'11ш)£P(°““Ÿ×?6čUQQQ\ŗt‰O?żŌäūlҤ 'NœŠ]ƒJKĀÕ«¬ńś¬ˆM4ģB*-aQQQ>|˜“'O²nŻ:Žyē&Nœ(vdffÄ;ļ¼#VķO:Å»ļ¾Kß¾}łņĖ/IHHą³Ļ>`õźÕDFF²oß>ęĢ™C½zõŠĶVžõ×_9yņ$AAA 0@ŌēĪĖĖĆĻĻ&OžLdd$«WÆfŃ¢E¤§§sźŌ)V¬XĮģŁ³HHH`ķŚµĢž=›ŲŲXāāā˜?>“'OfĄ€ÄĘƊ“šüˆ#8}ś4}ūöÆG­Öéõ ÉhFƒ\.ĒĻĻ‰'Ҿ}{lll˜4iS§NeÜøqø»»3dČŖV­Š““uėÖ5ł^óS1 y%ŅE`oGNNu#SƊŹBÖ÷]ʈ? e(uóŽSI”:”ŁqAg„7aĀ„ ©ń÷÷7x®{÷īF¬H F]ąoā•W^1€ēļźÕ«Wģ‚oĻž= ’ęśhŃ¢ėׯ/pßöķŪÓ¾}{£ēżüüÄæłę›oŒ¶)/[”³źÜ¹sÜÉ*Q÷ԭЧ÷ˆ©÷UVh×®]”’˜}śō”OŸ>Ļ}õÕWFŪ5lؐ•+Wxż9R@§NŒŗÜƌS,3Ń*UŖ0oŽ<“ÆYZZ2jŌ(FUąžĀ¬nŻŗŃ­[7ńqæ~żŒ:õÜŻŻMŽC„…““5"$$„[!%ėB,Zx«¹ł°`aü•H$‚Įū_€”üÕ]r³¶¹®“ČlQ@Z?ił<˜śiii888pķŚ5233Ł·ojµš={ö0~üxÜÜÜŲ²e ÆæžŗøĻŒ3xēwX¾|9Ó¦MC&“#š¤¾żöŪL›6>ų D¶))):tØŠõؚ5kÉdÄÅÅ1vģXrssŁ»w/999|šĮ,_¾FĆ£GX°`×®]#((ˆ¤¤$–.]ŹŅ„K™;w.óęĶĆÕÕ•ŠŠP¦M›ĘķŪ·Y¶l™ĮxuńāEƒqjžüłŲŪŪóąĮV¬XĮ޽{yņä |ūķ·Lœ8WWWZ·nĶ78räˆI¢CžµUT<“kf“ +€<ˆ†Ä' jzš. «ŌZž¤)©ćezžIĢWƒ*"œx-’ČM-]ŗOOOöļßĻķŪ· „oß¾¼žśė\¼x‘øø8¦L™"ÜRRRDŁRRRąŲ±c$$$ŠÆ_?’’’ Ęéā@`Ŗ›ź™={¶xNKKK¬¬¬prrB”P ‘H āe[[[$ nnn¤¦¦"•źb,OOORRRÄķ⃣££‘ģč D5jŌ0xNŲĒÕՕččhńšœÉĪĪ%"‹B­ZµÄnw€„Ūxčd×båx×6ŻŃŪØŽƒä&e°YU©TZa:@„õŗ,õZMłH ŁŁ˜3ud]f.ćū}°xœī·6¼/ŲŁĄo§tń×Ā… fśōéĻĶo5$$D$¼ s”³ŹŃŃ…BAJJ ÕŖU3¹æ™™–––8::"—ĖIIIaåŹ•$'į½Ō«W®]»2vģX¾ūī;ƒć9”J%9998::–Xe”,±’~–-[&:¶„ źżY2šņ°cźÕs,“¼I÷ΌX-æĘņĆ!]÷Ą7; OĒG”P°dÉńūy^ppp`芔\½z•ß~ū:šŪoæ±råJfΜILLŒŲ­ÓÆ_?£µīīŻ»™>}:111lß¾ńćĒóĪ;ļ ÕjY»v-ß}÷;vģ`͚5}:ėׯēÖ­[¤¦¦rīÜ9>üšC<<|Ț5kŲµkOž image/svg+xml queued running finished stopped stopping threadpoolworkerthreadtakestask workerproducesa bufferof output nothingmoreto do buffersent onand moreto do problemssending sync free task sync worker thread context lws service thread context wait untilthe lwsservicethreadknows thetask is done newwsi onmount protocol_HTTPcallback enqueue threadpool task protocolWRITEABLE cancel service protocolWRITEABLE cancel service lws_threadpool_task_sync lws_threadpool_task_status_wsi move to"done queue"idlingworker thread wsi hasunexpect-edly gone write thebuffer onthe wsi acknowledgethe task hasended Threadpool synchronization with the lws service thread(syncs to the correct service thread for the wsi) libwebsockets-4.3.5/doc-assets/threadpool.svg000066400000000000000000000354061476025525100213310ustar00rootroot00000000000000 Worker threadsTask queueDone queueSYNCLWSServiceThreadreapAll communication with tasks happensin lws service thread context, via theWRITEABLE callbacktasktasktasktasktasktasktasktasktaskwsi (may be detached)task function pointercleanup function pointeruser private pointerThreadpoolenqueue libwebsockets-4.3.5/doc-assets/work.png000066400000000000000000001323241476025525100201340ustar00rootroot00000000000000‰PNG  IHDRXsrtbKGD’’’ ½§“ IDATxœģŻw\Ē’?š÷Nŗ@D@P%ˆEEE]blŲP?Š[Äc‰‰MŒQŃD£Xƒ-‚ (Q V‘Ų±‚Ņ«ō~æ?꛿]īą8ą ŹėłČ#»ŁŁŁ÷mĮ™Ż™YžP($hųŖ” €& €& €& €& €& €& €& €& €& €& €& €& €& €& €& €& €& €& hźĒ»’¾\J«ØØpsskѢŋ/äRą;{@ŗÄÄÄqćĘY[[kkk[[[ūūū7¤4ɳW¾ēsSÖHö¤|O%h$ū­ZļÄ_'¹٘ˆļhŲļ4@nžqāDAAA×®]uttŒŒŒT…„„šx<!=ēćĒ/^ģāābhhØ„„ecc3uźTÉ]Ói­£££®®~įĀ9Ę’kœ'Ģ»ėųėōN ļ!@ƒUUU­ZµJ]]TĘĘĘjjjģėŹ•+U 4zzzDtļŽ½ŗ®˜­””qäȱō­[·.Y²¤ØØHNJ3fĢ"śā‹/¤gĖĪĪīׯwÕ7kÖLWW—}ęółĖ—/Æv­zVeīÅ©éų6Ddd$ikk'%%É„@ɳ·®ēsZZš™™;¦—/_–’óóĻ?ēńx,~MMM"RSS;vģ˜hĪjOĖŌŌŌ–-[ŃÖ­[eżyņPļćXļæ r$÷F Ć~“BņƓ"®ō’ļŸŠF~DjņކżĮƒyóę}ūķ·^^^QQQ„„„YYY.\˜6mŚgŸ}¦ź"88ø¼¼\2ŻĻĻoĖ–-:::Ź©Zååå¼|ł²@ ųžūļSSSóņņ _¼x±lŁ2>ŸæqćĘ+VH®XļĆŚŲö@żŌt|āåĖ—DäččŲ¢E ł–\o3gĪĢĶĶuuu­5g‡ڶm{šąĮÜÜÜĒ?~ü8))iäȑ•••¾¾¾%%%RÖ-//3fĢ›7o|||üüüä~ķq•¦ž0ļ:ÉæNš y?ž„B#‡4ŌéÓ§żõW"śę›oŽ?޵kWī6įĄ÷ķŪgll¬ź寬¬ģŠ”CŖŽB&[¶l‰‰‰ŃŅŅ _¶l™¹¹9K·µµżžūļ÷ķŪGD›6mŠŽŽ]«iVŽ‚Ž/«%³;[Įoæż2kÖ,Yަ··÷ćĒ§L™¢„„ÅRLMM÷īŻĖćńrssļŽ½+eŻ \»vĶŻŻż—_~‘Oč²y‡®Ój5¶ężó®Ÿ!²ćóQ߃’Rõ#xēuķŚ•ˆ>śč#éŁ222Ų)—““#š^\\ĢŅSRRøD===;;»ŹŹŹ;vøøøhkk 0 ""B(&&&Μ9ÓŹŹJCCĆŅŅrīÜ¹ŁŁŁ Łż÷9cJJŹśõė]]]ŪĤI“>|Če8}ś“µµµŲ„4ž|ÉŪ·oOD‡’Ü!vvvDtāÄ ö5//ļ‹/¾hŪ¶­–––™™ŁųńćeyōYk ŠŠ Öļbٲe5å4hy{{‹&ŹxX«Um攆P®„ŖŖŖ={ötėÖM Ž1"&&F,g­‡“——·nŻŗŽ;źéé5kÖ¬}ūö³fĶJMM•~|«•ŸŸæ~żz]]]@гgϽ{÷VVVr.]ŗ4zōhmmmŃ2’÷æ’ÕT Œæ¢!]€ž={&¬­­sssŻŻŻ©¶.@ÕŖ¬¬d?*::šK;-Y„ߌŚ:--­Öåx k=Ž5\$DōčŃ£S§NõźÕK čźźvļŽ]¬æWT­×o||üĢ™3Ū¶m«££caaѽ{÷µk×&$$T»¤Ÿ0zzzNNNB”šöķŪ:::ZZZ%%%Üźµž¢{»!¦$Ń3ŠŪŪ[ņŚ b?篿žMŸ2e ‰ō-¬Óīb***¶lŁāāā"yļ\OOO2¼ŗ^é ß] ¹®ŁuеkW]]])gcµ„=}śōȑ#nnnR®))ē•ģ‘˧/@Ø4 Až={Ęžh†††JĻY×J9Ē›2eŠžžŽ¤I“,XąģģLDjjj066¶±±™;w®Oóę͉Ø[·n¢’¶5°Ą*CšššmŚ“éŌ©Ė ÆÆ’ģŁ3–įŠ”C¾¾¾lÓ šõõõõõ=zōØdlŹŽ‘#GŠķ 6ŗKOOõņLMMutt$"@ĄFX‘¶¶öŋ„ļÕZ111ģ'?zōئ<ģ˜¾¾>·e?¬ÕŖö_ƆP®„I“& ‚‰'.^¼xąĄD¤„„%VØõš1ÉÉÉģgš™™±#ŗŗŗłłłŅÆ¤äädvų“““:wīģģģĢn¶yzz–••±<{öģńõõõšš " Vęžżūk*SĘ_Qļ@EEE=x<Ž„K—„’¶÷źŃŲ»w/µmŪ¶¢¢‚K=-###544tuuccce)PŽZśq”rp‘°ś(}šĮ®®®ÜÜß~ūM4Y®ßĒ³ÕĶĢĢ\]]?ųąVŌ©S§ŖŻŅO===ccćŲŲX@ĄēóĶĢĢģģģøue9!E÷vC.Ģj wīŁ³‡ˆ:wī,šaÖ¬Yģ·žłē¢é¶¶¶DtįĀ…zģ.ĘĖĖ‹ķ®Y³fM›6ĶĄĄ€ˆš5kÖÆ_æyóęI†W×+½į»«!×5Ē›6mš––ÖčŃ£żüüŲu!y6V6łśś‘••U×®]پ•¼¦¤œW²G.cœr¼”~Š€9|ų0ū;"zó©ZõؔžœˆŌÕÕE’ޱ:ر±qĒŽ¹ÄäädVæd9ė±»®]»FDĘĘĘÜyüų±†††‰‰I^^^µį1²_é ß] ¼®õōōDŅėÖ­“<k [CCć?ž`)„„„>>>’×””óŖN‘˧/@Ø4 A¾ūī;ö÷¢Öœõؔ‹Żڽ{7Ė%š>jŌ("Z·n]C¶%½ĀtąĄ"źŁ³§h¢, ”PČn‰U€X×    ”PųąĮ"j޼¹h#”¬¬Œ ūūż÷ß„VkąŪoæ%"öT·&EEEl·p|e?¬ÕŖé_ÆzP®„+Vˆ&VVV¶jՊˆBBB¤Ä#yųŲ€uuõWÆ^Õ“–ŒÕ6ŖŽŽNff¦h:Ū„@ ­|ČŽåWėŪø}ū¶†††³³3ץsqq‘±°}ūvśWóęĶ7nÜ(öƅ’ž–+W®ģŪ·/õīŻ[Ęß(”÷Öpe9X$b]ćŁoēV”ńśõōō$¢Ć‡Kūńjmˆ>xaźtB6üĀ”$v²>6¬“ŒP(¼wļ-Y²äć?ęńx\ćĒ‹ž*õŲ]¬–9uźTŃDvßśÜ¹s5…'¬{@¾»«N×µŸŸŸh¶œœ±³QJŲ³fĶM,**255»¦¤œWuмÖ8åxB½aP4H~~>5kÖL…÷īŻ[ō+ėĖĪćńŲŻJŽ••effŹ=€ĀĀĀ”””7oŽhhhQ^^^= ?~<qŻ^‰(>>žįĆ‡Ķš5c7źBCC‰ØWÆ^¢Cż444Ų»Ū·o7š'‘ōŁ$tttŲ_v4Ia‡µįT¬>ŸĻŖ˜W®\‘Ģ,åš…‡‡‘»»»M=ĢæŲįėŻ»·‰‰‰hz—.]lll ŖMvr9 EOž<™Ēć>|˜Ī+;KKKnŻŗYZZfff®]»vžüł)))’9"""ų|~ddä™3gź“yčšČ~|üńĒ¢_­¬¬ŲŗÜ]Æ_ÖÉjżśõ>¬5<-\ø›–—SR”iŁÄׯ_g_ϟ?ODīīńāE–Īīß÷ļߟ}­ĒībėX·޾¾>É÷]4rŁ]õ»®Egs&"CCCö¹³QŠĮƒ‹~ÕŃŃ0`UwMU{^Õ)ņZć”ćõ†4ū7żå•;®ß'ƞܘ˜˜p3Ӌ¦WTTČk»IIIsēε““-Z“°²²š4i …Āz”ĘgĻž---e)'Ož$¢#F°~?&¢ąą`ޱȳ³³ņ[q>ŖU\\Ģ~WćWŠamųµ°°Ka÷Łl‰Œ,‡õL`ĻačéÓ§DŌ¶m[ÉE¬‡+ėVWņ= E-[¶ģɓ'ėׯg5Ōŗ5jTDDÄ­[·Ž¼yóōéÓɓ';v¬cĒŽ’u¬ģģģ;w²gP¾¾¾oß¾•}+ņ:Š5‘ż`ÓE±ę4w~Źxż.[¶¬gĻž?vqq7nW!nˆjćÆĒ ©Šæ“¬.xćĘ öõüłó<ÆOŸ>¬EĘŅÆ^½J"Ēzģ®vķŚ7ź‰…ŹŽ#koo_§˜„kČījąu͵n„Z¬A"ŖuėÖōßkŠ©ö¼ŖSäµĘ)Ē źM½ö,5c’N'&&VUUÉ}–±joOÖćže¼zõŹĶĶ-==ŻŁŁŁĻĻÆuėÖZZZ·oßf}¦ė ™Š >|8żŪ` ś÷v»­­mµ’J}ųį‡õü%Dōļzżśµ”<ÜCUn®qֆPÉūRģ]T쫌‡ķsÖ:j ¶iīÅj¢Xb=īŁĖż$䄆†īŲ±ĆĆĆcéŅ„ ,ŠˆZ·n½k×®„„„°°°-[¶üšĆ¢K-Z4wīÜŹŹŹ'NÄÄÄ,Y²„H‘…¼tMd?Ŗ=²’EÕzżźččüż÷ß;wīÜ“iӉ'Nœ8Ń«WÆŻ»w³jkż°.bźqB*ō/­h ??’źÕ«;v455566622b椋ŠŠāāātttŗwļĪÖŖĒīņņņZ³fĶõė×-Z4uźŌŖŖŖmŪ¶½~żŗsēĪb÷ģØŽ»«į×uCŠäŗ¬&Ķ]SÉ󪮑ק/@Ø74 AŲCĻĀĀĀ;wīČņ.!I\t%e[ėÖ­KOOwss»zõ*wG§Æ‰7n\lllppššįĆ_æ~c``Ą=e·Ū¬ˆ)ŅŁŹĖĖ{ųšaM·[¢¢¢ˆČĄĄ€›“”į‡UA$Ÿ‡ˆżC"ćįcū\.ē{lRķÓ–XžTŠ8 ™ü‘ˆbbbø·’2¹¹¹DōÉ'Ÿhhhxxx°6ŖŒ&ŁW{Op@@€««k@@ĄøqćÄś!ŌD^ŗ&r<dæ~ÕŌŌ>żōÓ9sęüńĒ_żõÕ«W»uėvēĪjļÖכ"NȆ°¶¶¶³³{ńāEBBĀŻ»wĖĖĖŁ9Ąēóū÷ļņäÉ{÷īåääTTTxxxˆVėŗ»ttt.\ø0qāÄmŪ¶±QćD4hŠ }ūö±.Ž*§øėZģÅĪYjįr\Ž ŌŗAƒt芁õįc/’‚»„'öĘPÉē ×m±®ØÓ§O}žūāŋ†ÄĆnöŸ9sF(†„„Ńȑ#Yõˆž}.ĻĘĘɝ³³3;@5å9xš ‰ūgRöĆŖdlŖQ¬{©É|ų؈Rnś£†`ó-ĘĒĒK.b‰\³JvŠ8 ™ŹŹJ"*((Čś/–ž———••U§¾:ōog\ī|–Ō”CöŖéٳgsćL¤“ׁ®‰O€ŗ^æ'N¼{÷īąĮƒ DUĖ…"NČbbcc/_¾LDC† aél˜+W®°~;ÜQuŚ])))žłghhč«WÆĀĀĀĻK”w]ĖBr ;økJ ¹G.Ē ź h>Ÿ’駟Q@@ĄéÓ§„äŌ××g½ÅžeŖėč@Y4d[¬&$öžjWd7«$ŸŸJ²µµuuuMKKūēŸŲøqćĘqK‡ FD7nÜØößģāŠĻ?’Ģīō‹9pą@xxøšššŸŸŸäZµV%;wīœč×¼¼¼K—.›.d>|}ōEFF¦¦¦Ö“-ļ°aĆx<ŽÕ«WÅ„ÅĘĘ&$$hkk÷éÓGz ’d? ė*<<¼Śé Dgbćóˆ(--M)#…P(ü믿ˆHś“¢Õ«W·oß>11qٲe²Ä)ÆM5GYNÕļśÕŅŅbs%Éżˆ"NČb €øøø›7o²·’±tֈŒŒüēŸHbäØ(w—ŸŸ_rrr``ąˆ#,棒’7ā®kY°A)œ‚‚vårהr\Ž ŌŠP~~~Ż»w …cĒŽżüóϹwHUVV>ž< €=yTSSc;|żõ×ܟڿžśkÓ¦Mr©!Ūb##ŁóĶŹŹJ’ˆˆɜlp«Š×Š=8žü•+WŒŒŒøw£‘““ÓŲ±c«ŖŖF%ZßzōčŃW_}Õš‘ø~~~nnn„„„ Ų¶m×¹"11qłņå3fĢ ¢+VˆMa!ćaU²£GžžūļģsYYŁÜ¹sóóómmm¹Ž%2¾=zōīŻ»““t̘1Ü}¬ĀĀĀćĒsO„e<¾ŽŽŽcĒŽ-))™:u*7Ū]RRŪ±¾¾¾ÜĖkd'ūIØ8)))mŪ¶ķŲ±#»jJKK‡zāÄ Ń§jIII“'OŽŠŠŅÖ֞;w®”Ņ455÷īŻĖēówļŽĶŖņŅÉė@S ĒQ–@F2^æß’½hå5//ļčŃ£ōļŠU9RÄ Ł@\ąīŻ»żū÷gwgˆČĪĪĪĪĪ.**źÉ“'€żŃfź·»^½zEDo޼©SxuśKŽŖ½®>Ģö!•••ĶŸ??77Wōš’Bī‘Ėń„śSō<£Šäęę² Å==½ęĶ›sƒG_¾|ɲ;wŽu2100čÖ­[›6mˆhīܹģi`­só³ ć$߆3Š½æ½ŽŪŗsēėAdeeÕ·o_sss>Ÿæ’~555±Łō¹*½{÷ęØ6ų„„Ēęašńńū ÜKUˆČĀĀĀĪĪŽė—)ö*1쮘ŽŽŽ‰Ńw3åää°;.DÄćńŒŁ¤lD¤¦¦VÓkd<¬’dœœ¾N”›ŹšˆlllzōčĮf9ŌŅŅ½^öƗĄĶ/aeeeaaĮN˜ŒŒ –”¦ć+)33³sēĪD¤­­Żµk×Ī;³åżśõ{›ŒļżWŌūE`b$ߥM8~üx”Č;4ŌÕÕķķķ]]]ķģģŲžł§hi5½žbńāÅDdkk+ö^<É_$Ē]Óq¬õØiO²xnÜøĮ„Črż²é)­­­{õźåźźŹ ·““LNN®ł°Ōņ€šŽ²ģ'dĆ/LIՖiooĻFsīŲ±C4½žVWWw芔¢éõŪ]ģ‹DdlllnnnaaѶmŪ &ÄÄÄH Oö+½»K×µäŁXmŲŸ}ö»¦zöģɆłŠ]SR¶ŅČkŠSŽ Ōž€\¼xńĻ?’?~¼MUUUVV–››ŪŖU«øį†C‡={ö¬‡‡GUUU\\œ®®īŽ;vģŲ!—ŁÅŌ{[:uŗpį‚»»{nnnLLŒƒƒĆ… ž÷æ’IĪĘ3xšą_żÕŃŃńåĖ—>dļ~Ɖµµµ›››G“’cddō÷ßoŪ¶ĶĶĶ­   11QGGgąĄæżöWS—¢øø8K‚č-CCĆšššąą`///++«¢¢¢ŖŖ*GGĒłóēĒĘĘ®_æ¾Śbe<¬Ź“bŊƒšššĘÅÅUTT >üźÕ«l>AFöĆgmm³zõj''§ĢĢĢģģģ6mŚ,_¾œŪį²_“k×®}’ż÷÷ļßśō©««ėĪ;/\øPæ),d’Šćźźźęęfhh8eŹ"ŅÖÖ7n\ėÖ­333cccY-sŊ=bÆĀ­Õśõėķģģ^¾|ɆH!Ē]Óq¬õ,×ļĪ;XTTtóęĶgĻžŁŁŁ-^¼8::ZlNI¹ū ŁpżśõcwvÅī7³g”EEEbź±»ņóół|>ėĻ“–––ššśōéÓ£Göčу½yŖZuśKŽ*¼®{öģ¹iÓ&vM±”Ų’×”Šˆ\Ž ŌOŲąY„M ŽæßÉÉIÕ±€į@C=uķŚ5>>~ēĪ&L`3•––&$$|öŁg!!!>>>²ĻB Šą ¼3pĆ¢‰Ą†:łż÷ß>|8cƌY³fqóœjiiŁŪŪ/\øž}?pŠ€w{³lµ3~²é/«}i@S†¼ĆŲŪNœ8!ö‹Ū·oÆZµŠˆ&L˜ šČ+¼ Ža'Nܾ}ū;w¬­­ū÷ļoddTPPššįĆѧŸ~*9õ@‡¼Ć“““®\¹ņć?‡‡‡ėźźZYYłųų̘1ƒ{õp0 @‚1MMMMMMMMMMMMMMMMˆŗŖ "ŹŹŹ ŹŹŹruu0`€č¢‚‚‚ąąą¤¤¤: :”Ēć©dĄū' UĮķŪ·===y<ž„„å?’ü3zōč£G²ŹwfffĻž=ÓÓÓīŽ½;bĈćĒ+Ą{Cõ]€ęĶ›÷ᇾzõ*&&ęʍgĻž=xš [äļŸ’äɓ[·n]»vķŌ©SGUž"€÷†ŠŸäēēėėė5Є̛7ļŃ£G—/_&"sssŸ 6°EģAAHHˆ’¼7Tü ;;›ˆ ø{{ū˜˜"JNNNOOļŅ„ ·ČÕÕõöķŪJ^š>QqĄŹŹJ__?""‚}­¬¬/_¾tttŒõšš8wŗŗ’¼7TßHLL+HeeåO?ż“xńāš2Œ=śŃ£G=Ŗw<µn¢ĘŸ––!šxžüłaƆ999ŻæŸ„dfföģŁ3=óRó² IDAT=ŻĮĮįīŻ»#FŒ8~üøčž—\«°°ŠŃŃqīܹ«V­RPšļ<Ø^`` ‹‹Ė›7o®_æ®Ā0žžūļ7JɰmŪ¶   …n¢!nÜøqüųńuė։&ęēēūśśöéÓG4Ńßß???’ɓ'·nŻŗvķŚ©S§Ž=*}-==½+V¬_æ>''GAńæŠØŽ‘#G¼¼¼ŗwļ~äȑz¬^VVvīܹ-[¶ģڵėɓ',±¼¼üäɓ6lŲ·o_nn.—9(((,,,''gļŽ½›7o¾|ł2KšąĮW_}UPPąļļļļļ_RRtńāÅņņņC‡­_æ¾²²ņöķŪ×®]ćŠRSSĖĖĖŪ·oßʍ£¢¢øōƇr_’łēV ä&¤Ē)¶u" ß¼yó/æürūömÉżšĖ/æ8::öīŻ[4qłņåÖÖÖżśõMżĢ™3«V­rppøwļĖ“fĶ77·óēĻGGG8𫯾"¢°°°¼¼¼ŖŖŖ7o޼yóF(9rdĈ‹/VSSė÷_XXŲµkן~śi’žżnnn[·neé’ €µkז””HnBzœb[Ÿ0aĀ'Ÿ|ręĢ™ķŪ·wėÖ-::Zt?…³gĻzzzŠ&FFFīßæĻž=„„„\brrrzzz—.]øWWWŃEµk‘”””»»{HHHPS†@5œœ¼¼¼222ĀĆĆė“śŠ+RRRīŻ»÷ąĮƒ”””ŃŹ•+³²²?~|ķŚµ—/_:99M:•[åÖ­[?üšĆüqōčŃ+Vl޼¹ŖŖjɒ%C‡Õ××ß³gĻž={tttˆččŃ£ööö111’›Ž‹‹[½zullģ£G,X°bŊŒŒ )”JnBzœ¢[OMM=vģŲńćĒ#"">|ųźÕ+WWWŃŸ>}šŻ½{w.„¤¤dęĢ™«WÆvttmV„¦¦Qóę͹ ‹““4–§¦µ˜=zDEE±ĒÕņ÷÷ē©šæææ”£ Lhˆ …ĒŽóņņ""kkk77·:õ …'Ožœ2eŠ££#ńxŪŌ €’ ĶĪĪ7nœh¢——×¹sēŽ¾}+K |>äȑäŖŃ©©©<oΜ9æ’ž{RR•••mŻŗÕĶĶĶÅÅEzi†††ŁŁŁ………2Ɵ““sšąAöyėÖ­ZZZ$¢Ö­[ĒÄİ~2éé釪vuŠ3==Ū'†††|>_CCC4ƒ““Ē‹‹‹c_÷ķŪwUĄ lmmÆ^½źććCD“&MŚæZZEGG‡……±G.Ņ×"¢øø8+++6Šj…ĄvźŌIģ†÷˜1cŲ“ Ł“i“‘‘Qūöķ[¶l9mŚ4"Z¹reĖ–-œœ<<<ģģģīܹ³sēĪZ‹5j¹ŗŗ4(99¹Öüƒ Z·n]—.]œżõ×oæż–M­3gĪœŹŹŹvķŚõķŪ×ÉÉiŠ A5mBö8oß¾mffÖ³gĻ!C†888“jÕj̘1¢ŒŪ·oYkŲDōÅ_XXX888tļŽŻŻŻ½oß¾3gĪ”eÅČČH±wЁš;wž>}ŗX¢……ÅöķŪŁ=ęŃ£G³±bŸÅņĒÅ҆†ĘĒĒ ‚įƇQ³fĶ®_æņčŃ# ‹‘#Gr£cÅŹiӦ͚5kŲR{{ūčč芊P===cccÉ-ŠÅcnnžį‡ž8q"++«oß¾nnn\™<8sęLAAĮ¶mŪZµjÕ¢E Ö”_lŚŚŚ2Ę9lŲ° .ÄÅŕ””Ģž=ŪÓÓS²#ž’ž÷?’¼¼<ѱĢ Aƒģģ츯͚5»qćFpppBBĀŹ•+===ÕŌŌ$÷­ŲZ·n݊ß±c‡dNØOŹ€ŹĪĪnŪ¶ķ_|±dÉE”ļķķżųńćj_‰ÕBėŲ±c¾¾¾ńńńfffņ-łÖ­[}śō‰ŠŠŖu(pŠhB0  A  A  Į4 Ź}ęĢ™Æ¾śŠĻ—élttōķŪ·sssĶĶĶ ĄŽę Špx  ŃŃŃk×®­ŖŖŖ5ēµk×:tč0bÄˆĖ—/æ|łņĉķŪ·÷ńń)**RBœrTYYłć?Ŗ: ‡@#rśōiOOĻE‹%%%?~|÷īŻēϟłņåĒ\YY©źėąļæ’Žøq£Ŗ£qjžžžŖŽąråŹ•üüüÖ­[³Ä   ÄÄD“ĄĄĄK—.•––ŚŚŚr«dee:t謕+Æ_æf]€~żõ×ׯ_·k×ŽĖ¶{÷ī/^899%%% <ųŲ±ccĒŽĶĖĖ;|ųšłóēŸ={Ö¢E‹Y³f}óĶ7Ķ›7wqqٳgĻćĒŁźŪ·ouuue_:tļŽ½:H‰łĶ›7ÖÖց!!!īīī§NJLL422:|ųpxxxEEE«V­ņņņ’śėƊŠ .ڲ²²°°°Ó§Oß»wÆY³f¦¦¦ÕnčĮƒK—.MLL,++‹ˆˆč޽»ŗś:ŸW[Nyył©S§žüóĻgĻžŁŚŚ²sūYĘ”BØĶ¦M›ų|~ūöķ»uėFDS¦La鎎ŽnnnmŪ¶3fĢųńćÕŌŌ¾üņK¶čłóēęęęFFF=zō0229r$•——/\ø°eĖ–UUU,ŪŪ·o555wģŲ! —,Y2iŅ$¶®»»ū¼yólll&Ož, 7oŽüŃG …ĀY³fŁŚŚ²Õ³³³ÕÕÕ555 YJ‹-–/_.=ęéÓ§2ÄÄĤsēĪ¢æbāĉƒ&¢eĖ–µnŻŚĖĖkģŲ±<oĖ–-l݌Œ '''uuõöķŪ›››1¢¦ mٲ„C‡:::3f̘1cFQQ‘螬¶œŒŒŒ:4kÖ¬gĻžfff’üóŲ~®5Bص{óęĶ“'OŲēµk×QzzŗP(ōöö&¢¶č‹/¾ŠŃŃ©¬¬ …ćʍkٲeZZ[ŻĀĀ‚5¢¢¢ˆčڵkl•ĄĄ@>ŸŸšš* [µjužüy”Pčåå5zōh–aŹ”)óęĶ …QQQ†††B”ššįĆD”‘‘! ?Ž„K—–-[††† …Ā—/_ѹsē¤Ē¬££³pįB®Ā~ÅŋŁ×AƒсŲ×yóę}šĮģóŒ3Œ=z$ «ŖŖrrr¤lhłņåęęęÕīĻjĖ™9s¦„„eRR’P(,..īׯ_ĒŽėaµÖאTūßį)*ĘŌĪŅŅŅŽŽž}fµĻ„„öÕÜÜÜÓӓ}īŚµkqqqJJJUUÕ¹sē&NœhffĘV;v,—ĒŽŽžÄ‰ģė©S§śōécnnž——÷źÕ«N:QXXŲ¬Y³X†üüüf͚‘””įŪ·o‰ČĆƃˆXCāĀ… nnnīīīįįįDtżśu555wwwé1«©©mŲ°Ēćq?Ķ5Ä>wéŅ…ĒćM˜0ūš’’RRR" Ož<9eŹGGG"āńx†††Ņ7T­šŹ9}ś“··w‹-ˆH[[{ɒ%wļŽ½wļžģJŁ(p0 (€Lbcccbb222RRRˆØ¢¢‚„³ +£„„EDÅÅÅYYY\·{"jÕŖ÷ŁŪŪū·ß~ūį‡ŹĖĖCCCæūī;"ŹÉÉ!"ƒ¢¢¢¼¼<Ör ¢””Öæ?;;»yóęDŌ²eK[[Ū[·n 6ģāŋß’}zzz@@Żøq£S§NśśśŅcnŻŗµ®®®čÆżššš†††šššÜW"*))),,ĢĶĶeµvwNµ²³³%Ė)((HOOŻcmŚ“!¢ųųx6ŚA–¹1 žŌnęĢ™īīīW®\)))›Ź“«†Jņ_CCƒūžü„K—>{ö,$$dźŌ©TWW’łēŸ/\øĄJšššX½zuDDD§NLMMMMMĶĶĶ#""īŻ»·f͚śÅ\+ccc@ĄZ&²ģɦ‚”rLLLŒŒŒž={Ę„<žœž}r„'µ`7ąYGüŖŖŖ½{÷Öŗ ŸĻ2dȑ#G²³³‰(33óųń㢼½½/_¾īååÅ%Ž;öēŸ&¢5kÖlŲ°!==ż³Ļ>Ūµkז-[ņóóĻž=Ū„K–³OŸ>III—.]8p Kéßæ’‘#GŹĖĖ{õźUæ˜ełQ#GŽ}zeeeµåšx¼9sęüžūļIIIDTVV¶uėV777—†G¢ŠØÅ‡~Ų±cGŸįƇ;::‰Mi_­oæż¶  ĄĮĮ”oß¾ŽŽŽ¢’Ńųńć>|ųģŁ3Ö’‡Yµj՝;wV®\YQQ1eŹ”mŪ¶±”ĆćĘŪ²eK÷īŻ¹œvvv-[¶<}ś47.¶’žēĪsqqajės­6mŚdddŌ¾}{ggē–-[N›6MʆFED®®®ƒ JNNŽ·oßžżū322Ŗ-‡ˆV®\ٲeK''';;»;wīģܹ³į1ƒt؅ŗŗśÕ«W=š‘‘±xńā“mŪ¶eĖ–D4zōhvŸiӦ͚5kŒ‰ČŽŽžĮƒüńGFFĘņåĖ»té²sēN®ēŗ©©iēĪ544X’ęƒ>øtéŅųńć‡neeU^^žźÕ«æ’ž;,,Lt€,mÜø1>>žŻļ'¢įƇæ~żšM"T§˜%Sśöķ+:DøC‡kÖ¬aĆ,,,āāāBCCćććĮšįĆ„lČŽŽ>:::44TOOĻŲŲxŪ¶mϟ?gÓ”J–CD͚5»~żzHHČ£G,,,FŽÉöd"„Zń¤Œ“)))133ūžūļēĢ™#¶ØŖŖ*,,,222--MWW·eĖ–ƒ ājö „€ ģŲ±cłņåIIIŖŽštPŖO?żōīŻ»×Æ_ß¶mj’ |bš?üąąą §§×±cĒ#GŽˆ.ڽ{wėÖ­µµµ»uėvżśuU-—>}śxzz^ŗtiĮ‚ŖŽš"Õ7~śé§+VĢ›7ļĢ™3ƒöööę&ø=uꔯÆļøq悃ƒmmm‡ ĀM «ĢEräååµ|łrUM”źĒōéÓĒĀĀ‚›×ŁŁ¹gĻž»vķ""www##£3gĪQEEEŪ¶mnj³yóf%/xoØ~ €‰‰ 7©SeeåŪ·o›7oNDÅÅÅ·nŻbļĀ "uuõįƇ_¼xQɋ” &&†ˆ^¼xĮ¾–””ōčŃC/BV} O?żōņåĖß|óMNNΜ9sJJJŲdX •••¶¶¶\N;;»'Ož(y€øŗŗŗŗŗŽū×Ō©S?śč£É“'Ė}CŖoōļßļŽ½«WÆ655=wīÜõėף›#޾}KD€Ė©ÆÆ_ZZZTT¤ĢE5…ķļļĻ«ŽŸŸ—§øø899™ūśüłsīsrrrqqqµ‹D?£”€PJ@ (% „¦V'111**J2½”„ŖöšįC›>śhżśõƒĪĖĖ …7oŽ$¢k×®q9ūķ7"*,,Tę"Åžx”P(2.wĄ€ `÷ć &÷ ©~ Ąųń杝’üóO>Ÿ?iҤ޽{ūłłQAA—3??_CCCGGG™‹÷Ć˜°ZZZЉŖā.@o޼¹wļŽœ9sų|>ŁŚŚ~śé§ĮĮĮDŌŖU+ n½xńĀÖ֖Ēć)s‘B>ķŻ»—}ųä“O½-7X·ūœœ.%++KKK‹ˆ“““<<<Ų¼œDTQQqöģŁ¾}ū*y€B•••>|˜}ž1c†¢7§ęļļÆčmH”­­}ųšaSSÓ¼¼¼ćĒoÜøqåŹ•½zõ""KKĖÆ¾śŖ¤¤¤¢¢āĖ/挎ŽŽ·o›$T™‹'((襁DdeeµmŪ6Ö5Fä>Ŗ ®rrr.\ŲŖU+öķŪ’ōÓOUUUÜŅĄĄ@{{{--­Ž;^øpAtEe.PĮƒ³š¹æææ6§ś74ejjjUUUD”`mm­čĶ” JÜÄ3Ź©™«žE`MDUUUaa”jc@@ŖŖŖf͚õųńcŃė/_*9 tP üüü¬¬¬ČČČ’żļRźŽ<P4Õæ ą=öńĒ_¹r„ÖlĪĪĪJ†Š@AŹĖĖ:YSŃ9Z¶l©” š@Īž=;žü„„ŃD7zōč6mŚ‘……ÅčŃ£oŻŗEDżśõÓ××WN`hČ_RR’hķéŅ„›7o–̦„‰’Å  €üqŸõōō”ÖƧV˜@ž„B!Ÿ’wŪ+**ŌŌŌT …Pņ+~e„.@MMM¦§”””äåå©:ź”ŠP ­ZµRu2A €Ś_æ~}åŹ•€'į]©żžŌjūöķŸžyII‰Œłł|ž‡~HD’üó"ćŖ<ØEdd¤ŒµMMĶ©S§†……ÅÅÅÅÅÅ]øp”uė֊ÆNš"0€ķ޽;!!! 55Ul‘››ŪĄMMMMMM555‰HSS³C‡¶¶¶¢ŁŠ‹‹utt”qmŠwėÖ-??æųųųœœŃō 6ųłł5Ŗ }]a ĄtčŠįįƇ•••bézzz;w~§k’„'bx<žXЦ¦ę“iÓzõź5eŹ•„$Gxš’=z”ūģååe``°råJ;;;†$_x@‘‘‘ .ĢĖĖĖČČČĻĻ'"—»wļŖ:.łĆ>|8«÷sÜÜÜTŒB”@„„„Üg … 0@…ń(Šädee„¦¦īŻ»÷Ē[4dȐ'N•¦MHFFĘźÕ«’śėÆēϟ‹-jŃ¢…™™YDD„JbS¾ŖP†óēĻ÷éÓĒĘĘf÷īŻ’µccc//ÆŲŲŲ÷»öOčMÄėׯ###ÅMLL<<<>łä“©S§Ŗ$*åCšCCƍ7vīÜŁÉÉé]³o]”MĀƇ¹Ļiiiššš* F…Š€÷Yqqqæ~ż²²²Ž¼yĆ%6ĀŚå°’WPE>åŃ zįNī-؅|7„¼WĀĆĆłå—   š2tļŽ]™ńČȘŒ%}É÷WśU¾Ā,@šī9{ölnnnµ‹V¬X!„öOD&LPLPņgAr/OąŻsśōéŁ³g/\ø}ÕÕÕĶŹŹ*))yūömBBBMk}ūķ·‹/ÖÖÖVV˜õaEV¤‘Oł””ˆņń"0x„††z{{ggg˘ŸĒćM›6- @”QÉĖ+zeK¶DÄ'~%U*t[*~(™¾jÕ*62£   888))©C‡C‡åńx\e.%{ņ䉝††É^ū'"—w„öOD{hū0ˆ)z[*~š÷ßĻ›7O4%+++==½°°P[[;33³gĻžéééwļŽ1bÄńćĒY½\™‹@É –-[łóĻ?Æ]»ö޽{YYYµ®ell¼~żz555"255=z“ā#•ƒ Ŗ°!›dJ&¢ E£»=a#3räČaƆ±ĻóēĻ·°°HMM …·oßVWW Tž"P²ß’½¦ź«³³ó7ß|³k׮ŋќ9sŠ‹‹Uoƒœž$!‘,„eĀ2Eo®qHJJ²±±9yņä'Ÿ|BDęęę>>>6l`K===y<^HHˆ’€”••%%%EGGŃåĖ—łå± śśś÷ļß·²²āRx<Žōéӕؼ ”!aFD«iõ:Z§čĶ5®Y€vķŚennīééIDÉÉÉééé]ŗtį–ŗŗŗžśėÆJ^ UZZZXX˜››;eŹ”ėׯW›gŌØQööö3gĪ­ż‘OEE…RĀT ‹t‘}˜A3”°¹FŌØØØŲ³gό3X·­ŌŌT"j޼9—ĮĀĀ"--­¢¢B™‹ŌÕŃ.xĻ”––Ž7īōéÓ5e˜4i’”ī@DōŌÖŖØŠ}hE­”°¹Fō"°S§N„„„͜9“}---„’¾„™}...V梚¢õ÷÷ēUĒĻĻĖS\\œœœĢ}}žü9÷999Y“pŃE¢ŸQJ@ (% ”€ŽćBCC‡ "YūķŚµ›?¢ųŹź›ÓXŗżņĖ/|šžĖ˜››[YYÅÄÄp)ŃŃŃ;vTņ"P„ÄÄDī³½½½ #QØdJŽHY퟈ŖØŖŚŚ? §įŹ ©Q4ŠŠŠ8ąćć#6†cҤIū÷ļOKK#¢ččč°°0///å/9:xš ±±1÷u×®]ļŹ»ź¤ ĻŅY_ņ}I/„ē“"«)4e ­QN`b Ąž={ų|žĖ—/ÅŅóņņ:vģh``ąęꦩ©9pąĄņņrå/yłż÷ß  Z½|ł²ŖƒRˆ]Ā]\ē~Roaļļ„ß}'üī±š1—'E˜ņ“š§TaŖ2k/;räČŪ·oēĢ™#¹Ø¤¤$88‡˜m IDAT8!!”]»vžžžl†På/¹ąńxb)—/_īŪ·Æ*bQ¬Ż“Ū—|¹ÆKiéfjćEšŃ@§N|ųąĮƒj3šx¼-Z|õÕWģ«‚n’ߣ{ķ©½©±ÆI”dI–ģóGōŃŗ¢ˆ¾0d•——gbbRQQ!𨄄ժU«ž={véŅÅÄĤwļŽ–––ŠŽÄ—|£(j1-Ö!=Ņ›L“?¦—ÓņöŌ¾#uŒ£8±üī䮋zé“~:„o£mBjŗu`4 vøwļ^LLLDD„hŗÆÆÆO·nŻŗõp JC+Ø¢ö¬"œÉłKśŅ‹¼ÄŅ(Ą‡|äŻ; &**j×®]ūöķ­7Ž3f芔}ūö555500Ph×čZ/źU×µųÄO¤D®_pŠiFuźŌ)±Ä«WÆŗ»+šUYQµ¶„Sś_ōW½»ėl¢MŸŃgņ ģ=€Hý½‹ĒćyzzN˜0ĮĮĮ”cĒŽjjjŠŪh z“wMK—Ór"zA/NЉ]“k6ĶV\$ļĢ2™5kÖ®]»WžnŚ@ aFDŁ”-™ĮŸü—ÓrmŅf_«ØŖ5S\<ļ+4@&öööŠ(ö/śė8'¢Ż“[ri7źö}gEV|ā[‘•ip‹ųÄ’~K EDõCd¢©©)÷2‡ŅŠP •’” µéGżjZŹ'¾-ŁŹ=Ŗ÷ “öķŪ˱“Šų‘~d~Äl¤¶dėB.ź¤. 7 „AĄ 7833ÓÄÄD^Å‘Q.å²ĻØÓxÆKŗdAD’3÷ƒ”Ņp łÖyÄć>ϦٻHĆ‹Aŗ€R= é!÷u M£UOSƒ' ÜŸų“’ZZĖ}½O÷ČI.%ƒ,š”Ē—|Ŧū,”UÓ4ńU4!‰”(śu*MķB]TLӄ.@ |»qc­Éz)-]H ^&ŌI£xPYY¹{÷ngggmmmŲŲXnŃīŻ»[·n­­­Ż­[·ėׯ‹®„ĢE _Æčj’*Ń(Ó§O’ā‹/&Ož|žüłóēĻ[[[³ōS§NłśśŽ7.88ŲÖÖvȐ! Ź_r': ((“ź»…„„xyyÅĘʶk×Nl‘»»»‘‘Ń™3gˆØ¢¢¢mŪ¶cƌټy³’4e ź$$tDW Õ?Ų³g———dķæøøųÖ­[žžžģ«ŗŗśšįĆ/^¼ØäEļ“Ś§]½zµō ¶¶¶3fĢØw7oŽ\“hŃ“iÓĪž=kjj:eŹ”+Všłü„„„ŹŹJ[[[.§Żž={ˆH™‹Ž'µ7X=˜Ēćéźź¾|łR(jkk ‚ģģģŖŖ*SSÓŁ³g×{󅅅ééé?żō“ĻٳgļŽ½»xńbuuõĻ?’üķŪ·D$øĢśśś„„„EEEŹ\¤««[ļ_šīŗ’žė×ÆļŻ»§ź@@Ījļ”šššššš’’2lŲ°#F<{ö¬øø8##£““ōŌ©Sjjjƒ®÷ę ˆhäȑß|óM·nŻfĻžżé§Ÿīܹ“ĖĄõ9“¤ĢE’üżżyÕńóóćņ'''s_Ÿ?Ī}NNN...®v‘čg”€PJ@ (% U•°aƆaƆ-_¾œD4<1?ض…Ź&!!Ēć„§§‹„ūłł5JĘB$effQ`` —rģŲ1W\\üųńc" ćżšĆUUUŹ\TļŸš®ČĖĖ»’~tttttōŌ©SXo”Ž„Äž“KiPµwb’’’ˆH]]<æŗŗzaaa=Œ±±±@ HIIįR 455555[µj„””ńāÅ nы/lmmy<ž2Õū§4rLHHČĢĢĢĖĖ«¬¬¬)››››½½½MĆ·øƒv4¼h YgrrrŅŃљ;wī›7oXJUUUhhh@@@·nŻź½y7`Ą€#GŽTUU±”æ’žūĆ?äółZZZl^N"ŖØØ8{ölß¾}‰H™‹Ž?•••žžžįįįOŸ>ĶÉɑRū'¢… >¾²²²ŹU5@³ß ßźŃæ¹`ŽōkR戒$`""""jŠß~ūmß¾}iii·oߎ‹‹Óņ]†††C† ‘H$ƽöŚŲ±ck;M©T¦„„9995.[ņ³0+šķ_į«Yhüƒ¤Ø)\äåå%&& :TG™ˆˆˆˆHK.\Øć///CCC ++«åĖ—ŪŁŁ4ĖŗŽ:\Ęe?ųUiģ‚.s1w!¶G{~:Õ¦Ą£G^{ķµ°°0A¬¬¬ņņņ 0ąĶ7ß3fŒ.CQĶāćć{ō蔣bddäģģ,•J-Z4zōh™Lęęꦒ`TŻMQÉĒųųU¼j Å³hIw“-AśWBy÷”£\Żų~-ÕDŪĄŪŪŪŽŽ>44ōÓO?U7=z4""bēĪŗÉFDDDD5Ų¼y³źĄŻŻżöķŪā†p7KQz —āæ«ōžÄIxˆŒj¤m`hhøoß¾Ն²eeeVVVóēϟ2eŠN#=žRRR:uźd``PXXhaańć?FFF¦§§Ÿ:uJģhš#~ü_D#ŗ„uœ–‹\½E"m4` öĄöļß—™™éąą0jŌ(___Ż…#"""zœ©6ó122*-­a„ķėė;oŽ<ż§*BQ¢ĪįÜ»xW@ĶŪÉČ óźŲŽzLGõÓv ;wīģŁ³ēĶ7߬Ņ^TTōŹ+Æč ŃcM"©ŗ“¦¦°°°I“&é-ŒJ%*­a]Œāź]ŃŃ.V°ņ…ļHŒ D ž³‘–“½ššįĆ;vT/nß¾}ęĢDDDDĶ«¢¢¢Ęö)S¦¼ńĘ–––]ŗtŃgžB^Į•(DUż÷G’į> ÓÜąf}F¢Ę©æHMMżłēŸććć ¶mۦٕŸŸæmŪ¶§Ÿ~ZgńˆˆˆˆSW®\Q’üóĻcĒŽ+I’¢µ ĖR‘Ŗnō„g‚ģ`7Ćū¢ÆXŁØź/ Åɓ'=ZRR²`ĮĶ.™LšÖ[oé,QŪ§P(ØŽ(•J«Ģ°X“hQõ1˜(|įĖŃ ķ.@wīÜQ( ØŅīķķ}óęĶęNEDDDŌŻŗu+###>>¾k×®qqq±±±Ԝ…Ѿ}ūM›6988øøøtģŲŃŹŹJÕ¾k×®iÓ¦‰”½éH;5m €öķŪHMMUØeeeqžQu>>>7nÜP(uœ#‘H–,YņÉ'ŸŌŲŪ¢F’¼į-vjŚNruuķܹóĀ… T-•••ß}÷]xxx@@€ĪāµV×®]«{ō K—.µž[ mCŸ?~ÜøqŁŁŁÖÖÖķŚµ{ōčQyył /¼šć?VYLDDDōø ݹsgõv‰DXZZzįĀ„R9yņäAƒ 0 C‡‰¤C‡–––śOŪ źEĄJ(5w¢VŖ€‚‚‚ššš˜˜¹\ޱcĒ#Fšė"""¢S§N >¼Ę.ooļ«W«n¢ßŗØż0n¤«aßÜ[ZZΘ1CGQˆˆˆˆZ—šššČČČÜÜÜøøøŚĪįD jiü’ȼ¼¼ÄÄÄ¢¢¢”C‡ź"Q«päȑW_}5--­J» /^¼zõŖ„„„L&³··%Qm0čŃ£GƽöZXX˜ VVVyyy šę›oŽ3F—!‰ˆˆˆZ–~żś]ŗt©zūōéÓk\ ŠŖq P£ķA‚ƒƒ322>łä“’’’õė׫Ś]]]ĆĆĆYŃć#77÷īŻ»š-'Nœ8qb×®]ūõė'V*"-i[ÄÄÄDEEݽ{×ÕÕõōéÓźvGGĒÖ¾®…ˆˆˆH“R©œ3gĪ7ß|£ĶÉNNNO=õŌ–-[tŒØYh[”——K$kkė*ķ>ģŠ”Cs§""""‡D¢ķ6—ƒ š6mڤI“lmmu‰Øyiū 0ooo{{ūŠŠŠ{÷ī©=¬›lDDDD-׈#,XжG’yČ»…[b§ fրEĄQQQ!!!III¦¦¦eeeķŚµ+((˜?ž_|”}­LDDDŌ’iŽjž~śiooļ H„RNNNĘĘĘāEÓ·i˜¶»5[øømØ Š… üżż 80!!a’žżqqq™™™£FņõõÕ}H""""ŻJKKŪ“iSEE…ŗ„øøŲĢĢLÄHś¤„2éÉHNAŹwųī ŠˆtØž;2™L.—ßæ’‡~X»v­~béӖ-[^{ķ5ĶOOϽ{÷öģŁS¬Hz0ó.ćņ#ūĢŠŠPsóü¼¼ź!¶ ØHF²źųīĄRHŸÄ“ČHGzmo\€_ą‹ T<ēį˜žā’¾Ō_:tčĖ/挏W(YYYÕOČĻĻ×A0""""żQ(ŖƒE‹‰›¤q²U€'qņü‘ƒœ‡xXŠŅ›øYåL%”×pM³åE¼8 ³c° L4Ū a†°@ź8;é[ż€¹¹łž={ Øł0""""j ž‰~ƒoT€ö `ą oÆąṌź,`q‡‘Ų )©ÅØæ8p \.OKKėŽ½»‘ö Q‰ČŗG’np` kG8"Š ^H¬`Õ}ė½¾Ą‡·)õźEĄ×Æ_×C """"}ŗsēĪ… ÄNŃxiH‹E¬źŲ&¶°u„ć0 “Bźæ'ń¤ 2U@¤R’6 ęęęnnn666—/_9rdõø˜ˆˆˆZ/…BŃ©S§ģģlÕKķŸ‘*®P„īÄĪ*a›„I¢ä”V¤žm@:Ō»wļ‚‚Õ"ąźø˜ˆˆˆZ/™L$vІ¹‹»ÕG’“™ŅCT’ įƇ>\w‹€oŻŗõÓO?i¶,_¾¼]»vŖć¢¢¢ˆˆˆ””//Æēž{NóéÜśģ"""¢6lŌØQ­ėyG{°§ĘöXÄ>'ō›…ZŸś§©ŻøqĆÓÓ³ŁģܹsÖ¬YšŁ;sęL‡dee 8šŃ£G=zōøzõźóĻ?¦—볋ˆˆˆŚ˜:ž‰oįS€²•Žōѝ„$īpæŪb‡¢V¦ž;jööö«V­Š‹‹“Ėåšķ^^^ėׯot‚ģģl''§7nTļZ³fMaaįķŪ·;uź=`Ą€Ÿ~ś)$$DĻ]DDDDśwwū OŪūČ köśŒDmCżkT”Jå3Ļ<óńĒēå啕•]¹r@tttnnī°aڒ ;;ŪĪήƮ½{÷†††vźŌ €ŸŸ_PPśöœ>»ˆˆˆØ-)..;‚VÜąV÷œž„XśžŠ[j3“-®^½zśōéS§N½óĪ;^^^ĒŽKHH(..677oJ‚œœœ €ŌŌŌGłśśŖ[üüü.]ŗ¤ē."""j3>ųą‰D¢^jčąą T#nĀ*~ÅÆ5¶{Įk&ĶÅ\=ē”¶AŪ)@łłł‰ÄĻĻ€¹¹y^^€öķŪO™2eėÖ­C† it‚ģģ윜œõė×+•Ź^½z=ŚĄĄ@zz:ĶŚĄŽŽ>##£²²RŸ]Ŗ0DDDŌØF2j'N+‰6Ґ¦>B|z”×óxކķŠNÄ`ŌŚi{ k×®‚ ÄÄÄpvv¾yófJJ €ģģģ¦$šōō,--=yņdxxųĉŸ|ņɌŒ eeeŒŒŒŌgŖŽår¹>»j‹½fĶIM/^¬>G.—§¦¦Ŗ_&&žżķŌŌTĶ‹kvió ¼ÆĄ+š ¼ÆŠŒWØņ/»Ŗh™æE%*Wcµŗ1‘·p«Sf'¹‰zōßŖ’·ą“¼‚NTæóU›ĄĄĄ?üPuüģ³ĻŚŚŚ8P"‘|üńĒŚ_¤n7nÜhß¾ż¤I“AP-38}ś“ŗwėÖ­Ō+ōÓÕ\æ‰ī7ŽŠ:uJģD‚RP^®ü"ü&„}.|¾FX3N'$ łc"˜ø īƅįaB˜RPŠšZ·Ģo9zō؉‰‰źųĒ|ė­·×­[÷ŚkÆ5½Qńšš˜8qāŃ£G8::ČĢĢT÷fddŲŲŲ鳫¹~5"""— źGMœ81<<\Ü<r‘;ÓćpݧĶÅÜ/ń„~"Ńć@Ū)@Ō£666Ÿ}öŁŃ£G_żõę%_ZZŖZšÓ©S§Ī;_¾|YŻķćć£ē."""j”JåŪoæ}’ž}666»vķjŹ Ęę² ŪźżĄ`%Vź'=&PčČ’żß’©£££#""F­z9uźŌoæżVµ$ ::śųńć“&MҵR~ųįŠ+ęĶ›7{öģ·ß~[Õ8qāDccć/æüŅŲŲX?1JQųr”—£< ‘ˆ<óoąÆńµź/x½€&aŅ$LzļģĮž0„]Ą…D$& Į nśÉI‰< XG,,,LMM»uė–ŸŸfaa °°pȐ!÷īŻėٳēŸž9tčŠ#GŽØn8賋ˆˆˆZ©ŸųłĢ3Ļ”ŽG7ƧC«‹[Ąā6n;ĄAwIˆ4‰_¤¦¦FFF>|ųŠĪĪĪĖĖkĄ€𽄄„<čիט1cd2™(]DDDŌUߛ˜˜8::žHK XüčŃ£_|ŃĘĘĘĻĻoÜøqŖĘ>\Ļźu"""¢6é*®īĮžń/DIõŃ?Cź?Q“]ä*BpppFFĘ'Ÿ|RRR²~żzU»««kxxų˜1ct–ˆˆˆØ%JEźLø‡{µŒ`;ŲyĀSŸ©ˆź„mu÷ī]WW×Ó§O«ŪÆ^½Ŗ“hDDDD-Õ4Lū ?©ēńkĄ–Ō¢i;ؼ¼\"‘X[[Wiųša‡š;QĖUŠÓ8­9ś÷ĻU\ pōO-Ÿ¶€···½½}hhč½{ßē:zōhDDDpp°n²‰ ł—qł¼ šŁÆłć‡®čśžHEŖźdc;Āq?ö{Ć[ÜŲDZjĄ.@QQQ!!!III¦¦¦eeeķŚµ+((˜?ž_|”Ӈh5N#vņƒßU\U@”Ķɾšż_śĀ·‘łˆÄаm@ĖĖĖ÷ļß—™™éąą0jŌ(__ž?žˆˆˆZØFZ>½Ke,ĘžŒŸ‹HT|µYM)` c#-Ęb˜8ùʙ°0…i;“k®“DśQ’.@’ž÷æė>ĮÕÕuÖ¬YĶ”‡ˆˆˆHyČūßT BŻrgEĢC¤;õ_}õ‰DbffvļŽ=ALLLڵk—““£T*mmmēĪ«ūœDDDD:“{—a™ś„ 2ĆéTż»„§§§§§§„„5źłēŸæsēŽ\.ĻĢĢ,++;pą€L& ŅCP""""Żł ?i¾4ƒ™XIˆtMŪ5IIIO<ńDFF†fū’%K’’’öļ߯›xDDDD§żØvžYę0·„å?ńOē#ƒ¶ONII``Põ|ƒāāāfEDDD¤_ź}?×c½øIˆtMہyxx˜šš.X°ąįƇŖ„RyģŲ±o¾ł¦_æ~:‹GDDDDDĶ©Ū€īŁ³gęĢ™r¹ÜĘĘĘĢĢ,++K.—üņĖ/:MIDDD¤½ōōō;w*•ŹU«V©ZźšØw’ĄŅ©kŲs2228WVVfgg7dȐ§Ÿ~š&""¢Å××÷Ź•+š-,ˆŌ“] Ņ©S§yóęé( Q³HOOW‰Aņ® IDATK„ҧŸ~ŗŽ“ĖP¶ uŠØ„hX°~żś+W®Čår''§ēž{nĮ‚¦¦¦: GDDDŌ•••Ŗƒ®]»ž>}ŚŁ¹źC|5Ć8 izÉEŌ"h»Ą?üąįįń믿ŗøøųśś*•Ź7ŽxĆßßæ  @włˆˆˆˆj³zõj‰D"‘H¤R©ÆÆÆ›››T*}ō葼„Ƈ×=śW F°Ž“µ Ś®ĖåK–,łĻž£žō’šįĆĮƒĻ™3ēĶ7ßŌeH"""¢}śč.Qm Ŗ-[TĒK—.UĻR“J„U‹Q|wUĒHŽĀ[zČIŌŅ4ģ9¦¦¦ü¾ŸˆˆˆD—½cĒŽ»wļ°³³›>}ŗ6ļśŖ'`‚;Üu•Ø«š’ūßŲŲŲŚzϜ9“••Õ¬‘ˆˆˆčń§>žõ×_o޼©~YZZŗyóęqćĘuéŅÅÖÖvŊŖö… jłXŅń£ź`öģþęKMԚԒssó÷Ž{oɒ%5özzzæóĪ;:ČFDDD¹\¶hŃ¢ėׯ(**Z²dɅ >’üóŠŠP©©©NNNUŽejjśąĮ;;»ŗ/®„r#6.Ēr°HGŗĢtņkµxõ‰äęĶ›½{÷®±wźŌ©%%%ŠA6"""z\\¾|ŁĻĻOūóMMMŸ|ņÉ>}śלß«øz's‘[‚’Oń©Ŗń%¼ō=¾ojb¢VK«5:tØ­ĖŹŹ*33³łņÕ/..ĪÅÅ„ŽÓś †ŻJ&`‚µZžłēȑ#kģŠ‹‹spphÖHDDDŌfݽ{W.—ēäädddا!TTTDGGW?Y*•zxxÄÄÄTļ:|ųš¢E‹śé0čŒĪ>ši艌’ś§łłłUVVžžūļš×P9~üųȑ#æśź«Y³fé,!µ©©©»wļVÆÜ­C½ƒķI Q¬ÄJs0§+ŗ6×ʼnZ©ś €?žųcŲ°aŽŽŽ+W®1b„ƒƒCnnīżū÷8°yóęž={^¼xŃČČH?q‰ˆˆØ•zé„—vķŚUļi/æüņwß}×\Ŗ.4[QAŌŚÕ_8wīÜܹs5·å ‘H&NœøuėV[[[Å#""¢¶ ##ĆŽŽ¾Žzöģ9oŽ<''§gžyĘŚŚŗ¹>—QuZ­xšąąĮƒ‹ŠŠōßEDDDöĮ ¤C‡łłłeeeśģ266nŹoGDDōx*,,¼q憶„D"éÖ­›ˆyˆH­ž)@Ƈß³gĻŁ³g»uėvŗ&Ÿ~śiS,\øšŁgŸU- 4K\YY @5'GEu\QQ”Ļ®ŚbÆY³FRĶŻĶäryjjŖśebb¢ś855U.—×Ų„yĢ+𠼯Ą+š ­ō šßėMž<¹K—.­ī·ąxŃÆ Ś/ˆ‰‰iö%?żō“MFF†źå²eĖŌ‹€Æ_æą×_UŸ¼eˉDRYY©Ļ®f’•‰ˆˆk×®U4,X b .&ŖNŪ'°±±łå—_²³³ŻÜÜ||| ›X~lŲ°A©T>\õ2==½ØØČÓÓsįĀ…/½ō€””õÉÉÉɎŽŽ2™ĢÅÅEo]Mü‰ˆˆOź}½ū÷ļ/n"ŖB«]¾|900ŠÉÉi̘1ƼņŹ‹/¾ŲÆ_?‡µk×Ö1IF”””‹-’’uļŽŻŅŅrüųń={ö“““ōöö>{ö¬śä³gĻśūūŠg5Baa”ź@=ó‡ˆZŠzļœ;wĪŌŌ“K—.ļ¾ūī‘#GžüóĻß’}÷īŻÓ§O—ÉdĮĮĮĶx?Bs  Ū¶m3119vģ˜\.ß¼y3€cĒŽéæ‹ˆˆˆ*00P5Ņ8uź”(Ž Ē× ė8ˆØŗś’>xzzŹåņź]æüņ‹D"9pą@s„©R(•ŹyóęI$k×®„‹ˆˆˆJÜ`¶0ŪX0VžYi’ļŌH"‘œ;wnŠ A5öŽ1ĀŁŁłŪoæmŚ}ˆæ$&&ęääōķŪW³1%%%99¹[·n¶¶¶UĪ×gioŲ°a§OŸpźŌ)u1 7NpJÅ_[ÆH! BŠŃs¢K«EĄŻ»wÆ­ĖŻŻ½7*źŚµk×®]«4:99999Õx¾>»ˆˆˆØµØD„ź`VĶĘlWøŠ›‡ØEŃjprrrm]III666Ķ—‡ˆˆˆH[«±Z‰ęR)¤šHu¬į蟨Šśļ899½’žū{÷ī•J«V ŃŃё‘‘[·nÕM6"""jŅÓÓ/\øpėÖ-uKRR’>w6fæ÷•PŖ[ü5·¹?śÅPC4uĖr¢¶§ž`Ɔ !!!ƒ Z¼x±ŸŸŸƒƒCQQQrrņ/æüņńĒ÷īŻūå—_ÖCP"""j™¾śź«9sęˆņŃ.pQų«BЬŃo¢Ö”žąÅ_T*•K—. Ńl—H$'NÜŗu«‘‘‘Īā‘8 EAAB”ųžūļ»w““œœ\RR¢Ść’ęĶ›„„„łłłGŽˆ¹¾V © ļāŻ%X’‡<dö°1Q W’.@*ēĪ‹‰‰ÉĶĶ522rqq čܹ³®ó‘¤¦¦~’ż÷.\ˆˆˆhōEŗwļŽÆ_?gggÕKccc33³Ż= ¬…¶°-G9€XĄBGDŌ–h[Q[µyóęŋ7ń"}ūöżų揹%’–>ŧ’Ä?øĆ=qRķv7!zĢiµ (µauōŹd2KKKÕt *]¶¶¶o½õ–±±±³³ó Aƒ¬¬¬t³*[°Eu¼K9ś'Ņ """ś‹L&›7oަM› Zś!Ł;°ć.ī°ƒŻtL;Q«ŃŅ’z‘NżöŪo§NR+ŠĻ?’\ÜeƒˆˆØÕ())Łøqć­[·nß¾[\\¬jwvvNNN®ū½:r—żą× ·ųĄĒžA F°ŽRµIŚŽČČČŲ¹s端¾  ““ō…^茵ėŒ3Ž’}ŸŁ³gė2$5ƒ_~łåÓO?““såŹ•*½Ć‡_ŗt©¹ćt®v%jŪ“-īßæ/•J½½½ģܹ³ØØčĄķŪ·ĻČČ8qā ""¢–o̘15¶[YYõčŃcɒ%£GÖuÕžLdjĪŪń‡æŖŸ,…“7zߥź]×pQćh[ŲŲŲ(•Źœœ ‹õė×/Z“Ø}ūöģģģn޼©Ė„DDDŌT×®];vģXõöO>łÄŽ^ĻĶĶDęxć|S½ė.h¾Ą‡éPÖ<õŌSR©“°°šĘ:t0}śtƒo¾©į/3µ/½ōŅ®]»Ō/%‰ ĪĪĪ111ÖÖÖśÉ0 “öa_½§…"tvč!Ńc«@zzś† ärł’%Kŗwļ@”P­X±"((H—!‰ˆˆØI$‰ęĖ’ūßļ½÷ŽńćǟyężøŽėŽšÖl™ŒÉÖ°` kS˜:ĀŃνŃū <”ŸHD­ljooæaĆĶ™LvņäÉęŽDDDD:4sęĢ äęęźmōąN؏Wb„;Ügb¦Ž>ˆ45ą€J^^^bbbQQŃŠ”Cu”‰ˆˆˆš—ś@ß¾}Ļž=«P(˜››ėēÓ吿ˆĘĻz Ē-ÜŅĻēQ¤ŚŸśčŃ£_|ŃĘĘĘĻĻoÜøqŖĘ>|X7وˆˆØ™Ķž=ŪÄÄÄÜÜ\o£‘ˆTž,ÄB½}.ÕHŪ@„ąąąčččO>łä½÷ŽS·»ŗŗ†‡‡ė&5Õ÷żb)Eé,ĢRæt…«ˆaˆŚÆˆ‰‰‰ŠŠŗ{÷®««ėéÓ§ÕķŽŽŽWÆ^ÕI4"""j ,P;99éłÓ#‘lÕ±Ęb¬žQŚåå剤śNa>TķJDDD-ŠŪoæ½}ūvÕńŖU«ōšØÆ*ŽāØźĄ>\ųKŌh;ČŪŪŪŽŽ>44ō޽{źĘ£GFDDė&5ÉW_}µfĶÕń“iÓŽ}÷]}~z%*oį–ś9¾+°āU¼ŖĻDT#mļīŪ·/$$ÄĶĶĶŌŌ“¬¬ĢŹŹŖ  `žüłS¦LŃiD"""j“““W_}uŲ°aK–,QµŒ9rĒŽUž kŪ±]sÉo7tÓē§Qm¶ hyyłžżūćāā233Fåėė«»pDDD¤ŠŠŠäääåĖ—GDDTļõóó;uźT»vķōœj(†žÅYõĖŪøķw=g ¢źü"""jiāćć{ōčQc—T*½}ūv·nśžö=)]ŠE „ ę`N7t›ƒ9°Šs "Ŗ®O.++ūöŪocbbņņņ4Ū{õźõę›o6w0"""Ņ–­­mūöķsss«w=Z’£{°G %€įž¾Š"Ŗ¶€ Ļ=÷ÜŁ³g{öģY墄„„‚‘¶lllŌ£’޽{wīÜŁŁŁłėÆæŽ°aòeĖD‰‰HÕĮdL%ÕFŪąīŻ»ēϟær劗——NQrssOž<™ŸŸæmŪ¶Ė—/8p §§'€““4õi7oŽTōļßæøøX”ØŹP¦:芮be ¢i[dffvīܙ£"""}*((P(ß}÷‘‘‘‹‹ĖäÉ’ómzTTTTTTmļ={vii©ī3Q+£mąé陓“óšįCggg"""zÜ\¼xQuœ‘‘ńŅK/©ŽĶĢĢŹŹŹ …ö—5j”ęK“ę IDm†¶€™™Ł›o¾0oŽ¼īŻ»›››«»lllśõė§›xDDDm™ ±±±K–,9yņdõŽ’’’ŚŽčä䬞VĪŽŽŽĢĢ ·ē&¢zi» čéÓ§‡ Vc׊”COŸ>ݜ”ˆˆˆŚĆ‡łå—±±±‚ $%%A©Tš˜˜Čd2-§éŪŚŚęęęŖļž:ujŠ A:ĢŻ4Ć0ģ4N8…S9 iŠö€ææBBB]¦¦¦Ķ—‡ˆˆØ-įʍ—.]:vģX||üµk×ŖŸS÷ż… N˜0ĮĆĆĆÜܼ²²ŅŅŅR&“é,/=F“-LMMEŁE˜ˆˆØu©ØØŲŗuė·ß~ūēŸjł–N:żē?’™3gށAžĻÓrœĆ¹ĶŲ\€‚üż]a*REŒDDuØ’?4?żōÓ°aĆ Õ듪ą"""…BńńĒ’ė_’Ŗ±w̘1 .8p`vv¶‰‰‰……Eee„©©ik_Ŗū=¾ß‹½b§ "mÕæ@"‘¬]»6 €kˆˆˆź–˜˜ØyĆ\&“łūū›™™y{{9ŅÅÅ„{÷ī"ĘÓĘ<8„CÅ(V@‘üĶŲ\Š&ķ%Ź5D-Mżw._¾Ü£G©TŖ»5„„„qqq‰ÄŻŻ]µ‰¦¤¤¤ŌŌTwww»ˆˆˆźP^^žé§Ÿ¾óĪ;źCCĆüqāĉ"¦ŅŅoųm;¶Ēq%”łČoÄŒa\†²é˜> ³œń÷ŽįÖ°¶„eó%%¢ę ˆŖ°°š’ų‡zŠojjśŽ{ļ©{+**BBBT]ĘĘʛ6m„‹ˆˆØnĒļŃ£G•aßxć ±sikƒ°šņ³@X($ę yb’*DTæ¦ .>|x£ß^XX8nÜø½{÷fdd¼ńĘ~ūķ7Uļśõė;VRR²iÓ&‰D„’.""¢:TVV&jh!_±5HĄ8aÜ*aÕ:aŻ:aŻĻĀĻ»„]aBŲĻĀĻg„3ŃB“źēžpOģ߀ˆ@ŪēŌfžüł·nŻj®5•••ĘĘĘļæ’žŹ•+ōģŁ3 `ūöķŖ^’ž={īܹSĻ]DDDŚ“H$Ŗƒ&ž «7ŁČžŸ¼÷U/ĖQnCq#‘NIÅš?®_æ®T*{÷ī //ļöķŪC† Q÷ž;wNĻ]DDDmŪų@=śĄŃ?Q›×"öŽ‹‹»’~llģʍēĪ;vģXŖg%:99©Oėܹóżū÷•J„>»¤Ņ–U#5ŚMÜō€%”7pć6nßĘķ8”>a4F‹—Žˆō¤žŃķæėtéŅ„¦‡ųüó󃃗/_ާOŸ3fØUF×ÜbČĢĢL©T–””賫¶ĢkÖ¬‘ŌdńāÅźsäryjźßAќššš*—ĖkģŅ<ęx^WąZŻ4µ“ߢś-Ģ]ų!>ģ‡~ŽšžŒÉ«±ś:®«zŪ+ŪÄ@]gąx^”AWЉzW XÕgōčŃͲ!33ówŽ‘ÉdAUZüžūļźžūß’ŖžõŁÕ,æ=>“’V’źŽÉēSįS±‘>Ō?(//ÆłĖŽšŲŚŚžūß’>uźŌʍŸžy;;»*Ÿžmfffbb¢Ļ.Żż¾DDDz“…¬xP„Ń631³zōDĻžči [Q²‘žµø ī¶¶¶EEE:wīlee«īŠķÕ«—ž»ˆˆˆŚ€Qå?õKoxÆÄŹ5Xó>šŁƒ1˜£¢Ē‡Č@vvvEE…śezzśÉ“'}||H„ұcĒīŽ½[”PØĪżƒ>#WUшž‚)•Øą ß}ŲgC±C‘Čø˜ˆˆØVJ„R*•¾’žūŖo÷‹ŠŠŽ=š››[Ūł X°`‹‹‹cVuē-ai“A”‰Lnp;óö°1µ,ˆˆˆj5kÖ,ccć­[·Ö{¦££ćwß}÷ōÓOė!UP|‰/’‰Ćø…ŖF;ŲĒłīč.n6"j!XÕJ"‘•——×Ų;bĈ±cĒ6ģÉ'ŸŌiŒBZĄ¢æį·ėø~‡¢ `8Ć9Łæį76°)Ei JŖ¼ż0Ęh&$¢V„Q­Ō›śxå•WFŒall @„°°0//Æ·ŽzK§’‘¬„rV•”̾«°Ŗ”W˜‰™Ū±]Źm?ˆč’c@DDT+Ķ`×®]S§NÕģ---511iāG” ä,ήú38ÓÄKUŠŠ5Xć1W#Q Ä]€ˆˆØ8žü AƒjģŹĪĪĪĻĻW‡……?žĪ;UNĖĖĖ«ķ{±ŠŠŠįƇWiŌrō_‚’_ńk,b/āb"4õ«·Žčų:^7…©ģT-2Čd9ĆYYGt“†µ̚ų)DŌV± "¢6bųšįćʍ;|ų°\.×l·²²RžĶÓÓÓŽ¾[蔣ü8Ž—¢“…Wqu ¶4īs%Ćø„H؊‡LdvFēɘܸkŃc޵ååå{÷ī­ŽŽÄŃæT*m×®]ƒŽ²;7bć5\Óž-A B Œal c3˜uB§'š„œd502Q]XQk•žž^RR ŽłUŒœœTĒVVVR©tųšį’ś×æŖœfii)“żĻh{Ń¢EK–,錵k||¼6‘*Q¹K?Ćg5Īó™ŒÉ®pŁįW7vB''8 ĄM]N@D¤ .&"¢ViāĉP*•Õ»|||ÜŻŻ{öģiffh```hhčå儇T…(“„„śeoōö€‡źŲė±¾:č!QXQ«¤¹?O§N Ōc–æi¶°@Ä` % Qm8ˆˆˆZ%™L¦P(899UYžkaa!RØ’ń6Žę蟈Z Ž "¢VišąĮēϟp芔1cʈēoŖķzš’wģ!"jių\@""j•lllTü&‹ˆØAXQ«”­:0777 QėĀ€ˆˆZAbccUǽ{÷7 QėĀ€ˆˆZŸäää¼¼<¶¶¶ z@/± "¢ÖēʍŖOOOq“µ:,ˆˆØõa@DŌh,ˆˆØõ¹y󦟥ĆĆCÜ$DD­ ""j}x€ˆØŃų 0""je …………\.­~ @ ĮQ Ē;DDŌŹ$&&ŖF’ĪĪĪ-mōODŌņ± "¢V†óˆˆš‚µ2-¶ŲŒĶ}ŃWģDDõ0;QĆ““-€ā ×®ćśfl.@ŲqˆˆźĮ€ˆˆZ™–p %ČČAĪ.ģś?¦#]¬$DD Å]€ˆˆØ5)//o×®]EE…T*-((077×ƇŽÄĶ8ÄõG’ėø^Œāčš^JCZmē{Ć;®pÕC6"¢†ā""jMnŻŗUQQĄĶĶM?£’’Ć’ÄČĶķ¹†k~šŪ…]#1RwĮˆˆ‡µ&zž’ų×ńz£ $}ŠĒ Vžš„ARH`{=¤""j DDԚØWė§ų/ž{ē4[¼ąƒBBva—25/DDԚ\»vMu Ÿ-€nā¦śxvMÅT=|(‘N± "¢VćĆ?-ĒŽéHWBŁčOEčvl7ą·fDŌ&ˆ_”——ļܹ322²¢¢¢_æ~K–,133S÷^»vmóęĶ)))^^^Ææžŗ­­­(]DD$¢¢¢¢I“&;vLŻāééSå“öhŸ‡<]ČE®5¬uqe""ż¹Ø¬¬ō÷÷OJJš2eŠ‘‘ŃĪ;ŻŻŻĻŸ?/•J\æ~½’ž¾¾¾<.¢U?ׄkb’6DD-…TŒ¢ćŒ;¶S§NŖć¾}ūøwļ€ŹŹŹČČČ©S§Źd2¶¶¶cĒŽ=xš ž»ˆˆH••• .ܰaCZŚ’}śh38`>ęÅXżÅ%"jåğ¤žĆ?|öŁgŖĄ•••TsrTTĒśģŖ-ķš5k$5Y¼x±ś¹\žššŖ~™˜˜Ø>NMM•Ėå5vió ¼ÆĄ+“ł+9rÄŪŪ{ņäÉ5ŽžœœŽ}÷ŻuėÖłųųø¹¹ŁŪŪ«ÆŠķӐ““#śoĮ+𠼯 £+č„Ų‹žrįĀ33³Õ«W«[®_æą×_U·lٲE"‘TVVź³KWæ0 ĀüłóUś5YXX<’üó.\øqć†B”Øķ½‚‡jÉļEį¢>3µv-b Pbbā˜1c&L˜°vķZu£‹‹ €””uKrr²£££L&Óg—~]""OOĻ›7oj¶ 0ĄĻĻoéŅ„O<ńDŻļ­@EH!åz‰ˆDü)@™™™#GŽ|ź©§ŌėŗT,--½½½Ļž=«n9{ö¬æææž»ˆˆØy%%%}ųį‡3fĢŠż7īŲ±cgĻžŻ¼ys½£·p«å\įjsŻ„%"jƒÄ½Q\\ģļļßµk×7nÜū’’““U½Ū¶m3119vģ˜\.ß¼y3€cĒŽéæ‹ˆˆšŃ‰'4’²°°X¹råłóēt‘ŻĀnÕüŸqĀ8å$"j«D.N:U½&qqqQõ*•ŹyóęI$k×®UæQŸ]DDŌ\’““§L™¢łßüĄĄĄF\ēMįMUš¦šf³‡$"jŪ$‚ čāʂ–ņņņ®^½Z„ŃÄĤ’žź—)))ÉÉÉŻŗu³µµ­r¦>»ˆˆØ.\ø””äėė{ąĄ„„„ćĒ«žöزråŹŽ½{OŸ>½”—ńqĄnģAHs&&"jėD.ˆˆØ­*((8pąĄźÕ«“’’œ>|Xå„3fTYż„½n薈D×pOł%"jDDŌü^żuÕWž5öZYY͘1ć“O>QM¼lØ”XĄB „ ŠPd >±‘ˆØZÄ6 DDŌ\ŗté·ß~ĖĪĪĪÉÉŁ¹s§ź‹šž}öŁ>}ś9rąĄž XÄ*”ąwŽž‰ˆŠ5UrrņŃ£GēĶ›WcÆ„„åųńćßyē.]ŗ4ĖĒŻĄ Ձ'<›å‚DDDDŌxeeeׯ_Ÿ>}ś­[·Ŗ÷š˜˜|ōŃGAAAŻ»woƽ‰æ ąf¼,Ńc‚5^ttōąĮƒ5[ĢĢĢ–-[Ö£Gggē~żś™šš6ū‡ņQS° "¢‹ˆˆ˜2eJEEE•öĪ;?÷Üsk×®Õé§³ "j īDDDڊ?~ü£G²³³«t9::öīŻ{Ė–-={öŌi†|ä·G{‚ LŠP$ƒL§GDŌöšÕ/==ż£>ڳgOJJŠf»‘‘‘¹¹yĻž=ϟ?ßø==*1½Ń›£"¢F`@DDõ›8qbTT”fK»vķ"""<<ōŗ—󈈚ˆÕ¬¤¤ä_’śWiiiQQQ\\œf× Aƒ"##ĶĢĢōŸŠ[5 "¢Ē]iiiFF†B”(//—Éd™™™ńńń+V¬ČĻĻÆr²½½żŠ+¦L™"Źč¼@DŌd\LD¤J„266¶¬¬ĢČČØ{÷ī&&&ꮬ¬¬„„„ĢĢ̲²2u£”””jSōōōß’}ļŽ½"„ÖĀłóē›ņß&*@AWtĶB€ūøļ±’µ^¼@DŌ0ééé‡Z²dIII‰ŲYōÄĢĢģƒ>pppŠ«W/±b” Ä VŖc XtAóų`ćʍ .Ōeä6å>īĀ”8!‡\ÅC<¼‹» T­T7ˆˆØqx€ˆZ؊ŠŠäädnnnāććĆĆý¼¼F  °°033³ś“œ{÷ī­Zµ*!!”Ÿ(“ɤR©j%.€Ž;Ž?ŽŻŻż©§žrqqQ :ІƒƒĆoæż6hŠ F$yܔ”ģwüž~ځJ(k;M™”ŽˆˆH¼@D-NIIɆ bcc÷ģŁ#bŒ•+W¶¹ļmŪ̉@D6²ė>Ķ>°!IHź†nśÉFDŌ&± ¢'55ÕÉÉIÄC‡}ķµ×ž}öŁvķŚ‰ćqŠ}bS}’Ļxb.ę>§{”—! ćēĒNč$JH"¢6†S€ˆØeÉŹŹśśėÆė=M&“uīÜŁÄÄÄÜÜ\³½¢¢āśõėUN 6mZ•Fkkk777u‹jZ‘µµµ„„„’óØ[ń°3:k¶tA—Žčķ§˜1¤Ŗ»ś ŽµY¼@DĶ ²²R.—[XXh’–ÜÜÜ»wļĘĘĘ—””\ŗtéīŻ»/^Ō<ĒŚŚśĆ? qļyjv—qyęå#’īØ'aŅ:¬sƒ›ˆĮˆˆüŠ‹ˆ&??欬¬cĒŽź–3gμöŚkĖ–-stt —Ė÷ķŪ÷Żwß5ż³ž}öٹsē6ż:Ō¢ÜĒżĖø¬~iG8nĄ>Ų‹ˆH?x€ˆ“•‘‘ęķķ=iҤ‘#G޼y@EEELLL³’—¤C‡;v¼~ż:§ā“1ą…Xų'žT·"šN‰‰ˆčqĆ€Ø…ŠŠŠJIIÉÉÉ)///))ÉĖĖįÖ­[T0zōh„Ryüųqõs[›×“O>idd¤¹Ļf^^^NNŽ.>ĖŪŪ; 00ŠŽŽ^*•._¾|Ā„ Ė–-ÓÅg‘>É!ߎķį?‹³RH­a|Ķ%æ‰HTŻ1$Ńć†Q‹PPPž——·téR±³4žL&ėÓ§jóœuėÖ©¶šÆīć?^¾|łčŃ£8Pż;~A²³³mmmuž˜tFłAü ŸĒłO@Œąp„ė9ńŽ:‘ųęĶ›w芔““4±ƒ4†··÷žżū888˜ššj’F’°°°gųH$Žž[š@€šró>;†cµˆĄMŲä/}&$""Ž Ł;wüżżėžZćźź:yņdccc33³Ž;†††?~<)) @`` »»{³§Ś»wļüłó_xį…Å‹›˜˜Téµ¶¶ÖÜ=³>ÜæŽņی{ø·{Wbem'8ĄįS|ź?ÕĖNčdóŚN&""b@$…BQPP0o޼½{÷ŖZĢĢĢ\\\‚‚‚zõźURR²{÷ī*ŪbźSJJJLLĢȑ#Å @­B ĪąĢl8‹³5žą‡”ŗ‹c°ž³QX‰ąžżū‘‘‘‘‘‘įį’3śūļæé„—ÄJEŌPwp'Ń!Ńl”AÖ}z£· L†bčhŒ¶‚•X ‰ˆØ:® Į–-[>łä“*K—.5j”(yˆ“—€„,ĘāW÷zĄc4FˆõŒˆˆ“Ä€H'NœŠ|)“É&L˜šśėÆ7qb=‘®Į™ •”¬zW_ōµ‡żNģlöśFDDŚć "H$ÕĮäɓ]]]ū÷ļ?~üxq#Õ- +±ņŽŌ8śEčģŠ*""jD"Pü H­…ü.ć²ś„ 27øuE×]Ųe޹""jM8ˆˆˆjP‚’Kø“ KQZŒā,diöŽĒų}Ų'V6""j DDڊF“9Ģma›„$ucGt“ƒņJT¢P€‡<(P@QˆBg8÷Eߌ®ˆLd0ƒY JŠQ\ŽrĶźŲ\æķÅŽ»ø{ —ź}4ļ«xu2&×ńQ Ē)@D"ą n;¶ē G›Ńšc(Ѿš;5 "Ø €ččh__Ž„Z–S85s‘+v–Ā–ü8ĄAõR™Ų”ˆˆØńZŠ «Wƶk×®[·nUŚ“’’RSSŻŻŻ«ļØĻ.¢ęņūļæ‹j&@ø‰›+°¢ŽŃæR%”U`ds)¤Ŗ'^YĆZI;“3„”ņ(D Øē«T¢²éæBSŒĒxųģĀ®°+ ¶°€ āf#"¢ę$“J„rÕŖU/^¬Ł^QQņ×&7mŚ$JQóZ³fś/`tt“ŲqZ¢J”ņŒp&L› L€€ĘżX –Ö‚u•F™ k/“o/“7L꽂½`&„•%b’yčU”P(v""Ņ-ń €‚‚‚±cĒ:88øŗŗV)ÖÆ_oll|ģŲ±’’’M›6I$’ØØ(żw5£M›6ŁŪŪ«F’žžž„„„b'j‰R„”Fū›ńg¾0_ģ? ""¢ę'~°{÷īž={޽{×ĻĻÆJŠ£GŁ³g«_öė×ośōéśļ"jFNNNꯒ§M›&vœjæ°_Ü”°#Ä(„ŲDDDĶOŖ»ÉEZ ‰ŽŽvuu­¬üŸłÆyyy·oß2dˆŗ%00šÜ¹szī"j^)))źćź+^4]Ā„äč>Q#]Ęå½Ų«¹ę%\Z‡uoą7šĘJ¬œŁc1Ö¾Žp”A&D›S˜J!UĻ87…é$L:ķ¶cūDL¼€ 9ȩҕ…¬,då Gµ_gm?ū±ßžHDśÓ%""Ņ”±ŲÜÜÕöCLJJ łuiēĪļßæÆT*õŁ%•Š_#Q›“}ūö©S§VoW-?ĶEī؁Ū°ķ’µwēqMœłĄæ ÷)—r)-Š7U[E@]»–j[Ļž*U«¶ŗÕj½iūźŗ­m½×Ŗ««-¢¬«¬VūSėUD©VE…ŠHŠrH I~L;MC@˜L2‘ł¼_ü1™gžļó©©©‘‘‘Ģš-[¶L:µ¦¦&++ĖjIŽŽŽÖ{ @ź’X•õ”>y”'\„ų4žĘ÷ DäE^žäߚZQ?łĖų¾ń.ݽ@d$‹¤H_ņ­¤JrĮcę,Ē&.2É×חˆ”J%»¦““ŌŁŁŁŃŃњI–k €¢V±įцĖī—Ķ<ūļB]JØäWśõ±›o–q4®'õdfo”ŌžŚ÷§žä`~)!B!ģKwr7?&4Āv'ĮĮĮŁŁŁĆ‡gÖdggwźŌÉŹIń&¹åøUVėÜ’ō“RsiīĒō±39 U/hńl÷©T:bĈ¤¤$­VKD„„„ß}÷]ll¬•“ˆØ¢¢B”PÜŗu+..Īš–.]ŗČd2“wƒ4䷈“I®Ņ¹žéģ’yz~ĶĄŁ?X”ķŽ@D·oßīŻ»w÷īŻ ’’R]]}åŹooo+'ĶZæ~}ēĪūöķėźźZ]]}łņe…B”R©4 …„„ 6¬‘ģׯ_OMMU*•*•J­V«T*„R©V«ÕjuUUUEE³²ŖŖŠ’Ŗ’łcAćiü ōBEš_€šÄĒĒ÷čŃcÖ¬Y†+srr¾śź«üüüN:}šĮ‚$I555ģsl y~’Ų­¦Õ#hDkjü€uŲŠž8:N&“‰aruuuqqquuõōōd–]\\¤RéčŃ£åry\\\ÓCI$’>}ś\LæČ¼ä÷¶]€ĒĀ8śćröįĶ7ßģßææ»»;srļįįįęęĘ,{zzņXææ’„K—B‚{ī &`e¶ū ąQ]]ŻŚµkOœ8ń’÷:īńšļڵk;v\¼xńɓ'ŪµkŚ®]».]ŗ°?­Ą/F“˜˜(‘H\]]ūōéÓ¶m[K”b ’łĻ‚ƒƒ…®ˆ¾…;w¾öŚk-bƌ6l°h-‰„~’90|օoZ”ŠŠŠü1===33sß¾}–.®M›6vvųŃV€'&O$Ī×ßwķŚ533“ÆjŌŌŌąģŸƒ ōĒW%?ÓĻxō'X“ķžšėÅ_¼}ūö¹sēxŒéääÄc4‘(¤ĀėtYö"/<ż¬ ß“XC‡=zōč—_~9o޼ɓ'oٲE*Å|Æ*ØBMj©ŖØŠYV’rM«”f;²ó#æ_éW-i¹Aķ©=Ux^—t#é_žu±õÅźšjöz“>¹ōɒg–X«jŠņa`%µuµ  øŁį¦Ö_ŪÄ\zBļŸ0°†"UQ‡;T]UĘ Č;Ė;Ŗ*Ŗ}»‘A#£ƒ£…؈žd ē‹ĪžżKĖ¤ķ®·)9·ėÜĄ^V Äk(Ŗ)b—#NG¤G¦Ū°°> Z˜XCQķo€V—[żõ“T‚§Æ€0p&j =`¼Ŗ½pöĀÉØ5”hK˜·:7ak"‡ €5”ėĖ™=~š„„ €5TH*˜/‰—°5‘ĆĄ~īž3³ąmē-lM@ä0°½×oæ¶ę(u¶& r˜XU°c°ŠUQ“čõz”ėŠņIHĀ,č ļ6 ߈&"‚ €ˆ` "˜ˆ&"‚ €ˆ`š‡ŸžyŹ”)Ɔ ›?~II‰ŠÕą&æ¹zõźsĻ=wóę͈ˆˆżū÷GFFŖT*”+Ą3üšoF———‘‘aggWRR¶dɒyóę™öš/‡(l°‘y‰_aį"¢ŗŗŗ£GNœ8ŃĪĪŽˆ|||FŒ±’~ó#o¼»‘=ū&DDjµŗsēĪģš.]ŗdffšYBvŁ'ĆĒü€ęĄ€ˆˆ¹å×Óӓ]ćķķ]QQńšįC3#ōiĒžYNm—jf43a@DTWWGDĢõ? fY£Ń4”%!!AbʳĻ>ĖnSSSóWÆæN)œĀ\ł/WŹŁ$…BQSSþĢĶĶeb²Ėl…Ba“™É³gĻ6¹YS"Ō/·é–,Yb2©‰ęĪ[’}hb¦Ś&ßÉĒF0|»š”žŪÕōsēĪ5™Ō” Mߌ"0u¦ęģQ†I†oWs#ˆmÆNHHą¶Ov‡ ÜöI…BĮ–Ė!Ā’%Køķ“lµ­æOR½·«YL¾]MŒ`Tn³"˜,#mC„Ś«™r1Ņ6%ĪšĮp0Qfff÷īŻ?>xš`fĶśõėß{ļ=Fc8+h ‰ÄÄ[ŗēęžæ•żķ޳÷8ä5§\Ļ+`ŃČūD¼-;Æ9ٱK#Æm¼ÖÉ+`Ń6™_ų€ˆØmŪ¶DTXXČ®)((hīŁCĘtóŲ³+Ą€ˆČŻŻ=""āĢ™3ģš3gĪōė×OĄ*X&æyēw9R[[»nŻŗ“““©S§rˆ³|łrŽėfér…Źk&±5YĄ:‹­ÉhÆÕp.»“Õņš£Ö‘×čb«åå ]$,½^’Ī;ļl޼YÆ×Ėd²eĖ–-]ŗŌŹu°©‹Ć¬ClM[{I|MF{[<±5Ylķ%ń5Ylķ%Q6¹>¼RXXXPPęć#Ą3ūEøGŠ­Ébk/‰ÆÉho‹'¶&‹­½$¾&‹­½$Ź&×gĒ>* ˆČŻŻ=((ČŁŁYØ ÄÄÄU“PÄÖd±µ—Ä×d“·Å[“ÅÖ^_“ÅÖ^e“` "ø @D0LDĮ@D0LDĮ@D0LDÄ.!!Ač:<ĮīܹsóęM''''''£¤ņņņ«WÆźt:“oß¾Ь$^⛣¦¦ęźÕ«UUU^^^R©ńģ1;;;??ßŪŪ[&“%étŗ³gĻŗøø8;;7= łńĶWRR’™™IDīīīFI>¼råJyy¹ŸŸ_żŒJ„2---((ČØ]wļŽ½~żŗ^Æ7ŁqęĒ7ļķeTVVž?ŽÅÅÅÅÅ„”¢iÆN§ĖĪĪV(r¹Ü(•é,ggēśp"ŗråŠJ„jÕŖ»¦““4==żŽ€€;;»†Jon|^X¢‹µZķõė×srrōz½§§gCE ŅÅÄß@­ÕjϜ9s§77·†FAjŽLYYY¦‘Ī5'¾™x?0ÕÕÕ]½zµ°°ŠĻĻĻ6LÜŗ˜óŽŃō--ŌÅÜźĘsQ“ĒXAjkŠ'żśõcŽC©Tśžū瑩ZµŹŽŽžI}õÕW5aźŽ½{]\\"""ź‡m$‰—ųœi4š„K—²goķŪ·’駟ŲŌ{÷īõģŁ“Iņóó;}ś“a^„R9lŲ0"JIIib@#ā›ļĮƒcĒŽeĻŽ†ZVVʦž:uŹ×חIźÕ«Waa”aŽk×®=żōÓDT^^Ī®$$įßLwīÜ ūę›oŖ««óņņzõźÕ„K65666,,,''§¼¼üÕW_õńń©ŖŖb’rrrĀĆĆ `46ЇųęŪæ·nŻĪœ9óčŃ£³gĻzxx̜9“IR«Õ¾¾¾£F*))ÉĶĶķÖ­Ū_’śW6ćÜÜܘ*žĶlŻŗuÖ¬Y™™™µµµmŪ¶ŠŠ2Y4·ų¶Ö^֑#G‚ƒƒšŅ^FÓæ’%K–+•ŹI“&9::޽{—IżüóĻ>\]]½f͉DrīÜ9&©²²rĈmŚ“ 5÷×®]ėļļ_l@§Ó™,[|3Y¢‹“““årłŹ•+KJJōz}MMÉ¢éb½źā?Ū“i“½½żÆæžZæhAjŽŪ»oß>‰D²k×®ŗŗŗ7n„††Ž7ĪdŃ-ćĄT]]XXTTōśėÆ{{{Ī“ r`āÖÅÜr¤‹¹ Ōējś+Č@m5˜p¤Õj _†‡‡O›6Yž6mZūöķŁ¤łó燄„0˹¹¹~~~GŽ™7ožŃ‡¤‘$#Üā›Ļ°É»vķ¢ß’»©P($Ibb"“T^^īąą°mŪ6ęåŌ©SćāāŠ‹‹ėƒ 4Ā9¾ł k8mŚ“ššp¶¶‰¤  €yłż÷ßQ^^ž^ÆÆ««ėܹóß’ž÷ƒ6~6³téRGGG“I¼ÄēĄķU©TmŪ¶]·n]C[hoQQķŚµ‹yϦöķŪ÷7Ž`–“’’:vģ˜——÷Ģ3ĻūĖ—/ļŽ½{SŠęß|üvq]]]``ą?žńĒ–k ]¬ēc 62hŠ ±cǚLd ę½½‹/ b_Ī;7,,ĢdŃ-ćĄtģŲ1vĻŌėõµµµmŚ“Y·n]żr…:0qėbn¹ŒŲB7} n$WÓĒX”jėĄMĄ]Ø×ėŁė’ŅŅŅČ&ÅÄÄܽ{·  €ˆžzꩼ¼¼ēŸ¾®®Ī(`#IFøÅ7Ÿa“õz=1M¾pį‚^ƏŠŠb’<==#""Īž=˼\½zõ’ū_“—ß5Šēųę3Ŗ”a‡††²_/FEEI$¦Jvvvééé .|lüüóĻ;w6™ÄK|,ŃŽ… ¶nŻ:>>^«Õ6T®“—~ß•JeNN»ĖQLL »ĖM˜0įŅ„K”””õ«TZZŹ^åŅĪńĶĒoŸ:uJ”PÄĒĒgggk4š†Źµ….&>jC999'Ožœ6mšÉTAjŽŪžąĮƒ{÷ī1/322µZĄ)??_"‘“mŪ–yéąąŠ·oßŌŌŌśå u`āÖÅÜr±µ.n| m䣉c¬€µu`ĄƒÜÜÜÜÜ\öƒq÷īŻĄĄ@6588˜ˆņņņ˜—ĢՊĢīh¤‘$CœćóčšįĆ;vōńńaźCD†7ż³õqrr’J„­a@#¼Ä7“V«=vģXC]ģāāŅŖU«¦tĮƇ;¶{÷īńćĒgddlŚ“Édqœćó…Æöž?~Ė–-Ū¶mÓét'x{‰čšįĆ2™ģŁgŸ„ßw9£OŁ;wŲV4T„²²2GGĒōōō“““²²²†ŹāŸG¼tńåĖ—[·n½jÕŖĄĄĄŽ½{{{{'%%™,Īŗ˜ÆšõĻž3,,lŠ A&SØyiļøqć"""œ’’2aĀ„ģģģĻ>ūĢdq‚·—ų80µk×NÆ×ß¼y“y©Ńh²³³ļßæ_æ,[805«‹ĶĢõŲ-mp 6™«éµµ…Ś¢0ąĮœ9sĀĆĆ_yåę„Z­6¼Uœ¹żæ”»Ē8°tüĒJKKKJJZ¶l[{{{ĆG8;;7«>F˜ß|«V­***š7o[%£§4±J„„„£Fš8qāńćĒß{ļ½.]ŗ˜ÜŒs|¾šŅއN™2eŃ¢E;wn| x{ĖĖĖ—/_>yņdę_ŌjµšˆŒ>e:®ŗŗś±”:łÜsĻłłł½żöŪ&’)nN|¾šŅŅ……ÅÅŹ¹¹ÅÅÅUUU³gĻž4iŅ;wźo)xßuuuõ7ß|óöŪo3wĒÖ'ų@ĶK{ķķķwķŚõąĮƒŃ£GļŁ³'11±cĒŽ&·¼½¼˜Ų„K—W_}õ’ūßwß}7|ųšŠŠ “]l &n]ĢyǼ‹¹ ŌF¹šĪj‹2qÅ4˧Ÿ~zģŲ±óēϳ\.7¼ŚY6yqKSŌŌŌ:tˆYöńń‰‰‰į7~s7īå—_fo7ŖS„¦×§~ĄŒŒŒ_~ł…YŽŠŠ23¾łNž<¹hŃ¢µk×2O)!"¹\^[[Ė”J*•Ŗ®®īŅ„KS§NŻ·oߏ?žhggwųša•JÅlóņĖ/sŽĻ ¾ŚūÉ'ŸČåņ?ü°~’Mµ·®®nāĉ_|ń³†łāžĆ§lūöķėׯ÷ņņR«Õß~ūķĢ™3}||V¬Xq÷īŻōōtf›N:qŽĻ¾ŗø¦¦ĘÉÉiėÖ­Ģ©Ą²eĖÖÆ_šąĮY³fŁT“ź]»v©Õź·Žz‹yik5_ķ½}ūvTTŌ_žņ—„K—®\¹rųšį»wļŽ‹‹³µöņu`’ĖåG]øpį‚ œœœęĢ™£R©˜ē]ŚŚ‰[7=—­u1·ŗ~®FŲŚ@mi-¤BłöŪo—-[¶{÷nĆĒ;śśś*•Jöeii)y{{s+¢““t̘1Ģņ€Īž=Ėoüf©ŖŖŠõ÷÷ß¶m»Ņ××W«ÕŖT*WWW¶JM¬É€7nÜŗu+³üĆ?˜ß|YYYqqqS§N>}:»Ņ×חy’:«¬¬¬éUb¾‹Ü°aCTTŌŁ³g£££g͚•››Ė¤j43曃ÆöŽøqćóĻ?Ÿ7oŽžżū‰ˆ9łKKK#¢W^yÅvŚKDÓ§OOOO?ž¼››³†¹ŽßčSęģģģččŲx(¹\īååED...Ó§O?qāDrrņŠ+Μ9óśėÆ3Ū,^¼ųķ·ßęŸ<īŅĪĪĪ­[·fŸq.—Ėƒ‚‚˜ļĶmŖ‹-1PoÜøqŌØQģŲŌ@Ķc{ēϟ¼gĻ©TŗsēĪÖ­[Oš4i芔J„ŅvŚĖļ) `ĒŽ̲^Æ_øp!søM˜øuq³rŁŌ.M\źś¹aSµą īŽ;6eŹ”/¾ų‚ż0ŗvķšĶ¾ĢĪĪ–J„:tąVJPPęw§OŸę=~Ói4šW^yE„ReźćååÅ\ūÄ<0›ńńĒóŸ~wéššš‚‚Ć/Äżõ×6mڐ-u±%źōōōŒŒ ĆŪmg ę·½C† aļ§|żõ×+**®_æn;ķåżĄd(55õžżūƒ&[:0qėāęę².&®µÉ\°ŚJ,õx”–īŹ•+īīīóēĻÆŸōÆżĖŃёyąN§‹ŠŠ8p Ń6³gĻnčQY$ńŸ³7ß|³uėÖ¹¹¹FėµZmHHū@qę1jĒ7ܦ¼¼œź= ­”€|Å7“R©ģÖ­[TTTżG›ßŗuK"‘°µ\²d‰««kEE…į6)))ōēg* Ć -Zdų`Dó曉ßöźt:ęŸ(ÉÉÉ&bFöźõś­[·Źd²ŌOzķµ×"""źźźōz}II‰§§ēŅ„K¶‰ˆˆ0zś›J„b—+**BBBʏo²hnńĶÄū.}ļŽ=¹\žŁgŸ1/Oœ8Aæ?…—ųę³Š@żÖ[o=żōÓ żČƒłń9ć½½‘‘‘±±±ģĖĶ›7K$£q3'¾łx?0±Ōjuddd§NLv“P&n]lęŽŃō--ŃÅÜźFr±;Ę 2P[ .ā(66öŃ£G÷ļßgÆ%¢/¾ųĀĒĒēµ×^c®ī3fĢ„K—ĪŸ?ņäI‹¶t|“¶lٲcĒŽ~żś}üńĒģŹČČČųųx©TŗråŹ &”••łłłķŲ±#66–ł— ·€F[r‹o¾3fdffŽ9ŅšJ‰ųųųČČȰ°°wŽygҤI§OŸ®¬¬LLL\±b…»»{㣣£"""œ/^¼xüųńłó盼-‰[|3ńŪ^‰Dbx”$s½©T*5yõ¤ ķĶĪĪž6mZ``ąŽ½{÷īŻĖ¬ōńńa.]¾|yļŽ½cbb ’’āźź:{öģĒĘ 8p`XXXEEÅžżūėźź woCÜ⛉÷]:00pٲe .ĢÉÉquuݾ}ūøqćśöķ[KAŗ˜,3P———'''/_¾¼”Ū‚ Ō¼·wį…Çį…ś÷ļēĪÄÄÄ >ś†Õ2LD“oß¾[·n)•ŹäädµZ}źŌ)“-ԁ‰[ó²cŅÅÜźĘs5 µÕ`ĄQūöķ‰(??ßp%ó8X‡“'O~žłēAAA?žųcŸ>}Œ²‡……±wČ5=‰af|närytt4>āƒ}ÄŲ±c===·nŻzėÖ­ üķo3Ź.“É¢££ ŸņŁx@#ā›Ļ××7::Z©T^Ⱦ«ėÖ­ėŚµė÷ß/—Ė“’’ʍg”ŻĒĒ'::Śš|wūöķ»vķŹĖĖ{ōčQhhčŃ£G‡ŚPé⛉÷ö²³³‹ŽŽnäłÖoļ£G˜ßé4ÜŁUĆĀĀŅÓÓæśź«+W®ÄĘĘ~šĮõ/u}ę™gĀĀĀ ×lŲ°įĄééé¾¾¾3gΜ1csū`}Üā›É]¼dɒŽ;īŽ½»ØØč£>zļ½÷*Żś]L–ØĻ;ׯ_æI“&5^“ 5ļķĶČČŲŗukZZšÆÆorrņØQ£LŻ2LD¤R©Ž9āźź:eŹ”wß}·‘iŖ &n]lęŽĮ¤‹¹ Ōēb=vŒd ¶‰ž‰}‚)4nLDĮ@D0LDĮ@D0LDĮ@D0LDĮ,åĄ111Z­V芡0KQ(§OŸÖėõl£V«ĒŒcµ*& ¤C‡„¦¦ ] ‘ ]hQNŸ>żõ×_«TŖ#FH„ü›©¬¬lĒŽ/^T©T]»v3gŽŸŸ_RRҼyóŹŹŹbbbˆčąĮƒ®®®7nÜXµjU~~~÷īŻēϟļćć#XcZ"|¼9qāĐ!C E·nݶnŻŗzõj6iŪ¶mk×®õņņźŌ©Ó¦M›bccõz½ææļ޽ććććććrrrśö훕•Õ£G½{÷FEEi4[ŠņHæ4 é¢¢¢ŌjuzzŗF£éÕ«WVV–F£‘Édµµµ2™L&“Ńæ’żļɓ'ēē燄„|ųį‡Ū·oæ’>aüųńYYYW®\‘ÉdæüņKXXŲ¦M›āććm@‹‚o€&---..ĪĪĪŽˆärłK/½Ä¦:::2g’DADEEEõƒ>|xōčŃĢ–”””:tĄüĀ=Ą²²2FÓ¦Mvææ?»\YY¹mŪ¶K—.WVVQżÆ •JeEEÅīŻ»Ļœ9ƬQ(łłł–Æ;€ˆ`üppp ¢ŚŚZv {ł¾F£‰‰‰©¬¬\øpįSO=•ŸŸŸ––V?‚D"!¢ž={>÷Üs̚Q£FZ¼źb‚ šĆÓÓÓĻĻļŚµkģšģģlf!++ėņåĖ|ńÅ‰čŠ”Cģ6R©T§Ó1ĖķŚµ œ3gŽ+ .øx3qāĝ;w¦¦¦jµŚS§N%''3ėŻÜ܈čźÕ«DTPPšÉ'Ÿ°YJKKoŻŗ„×ėu:ݻᄏyóęäää²²²ŅŅŅ“'Offf Ņ€– OŽTVV¾ōŅK§OŸ–J„ŽŽŽ³gĻ^±bó ©S§nŁ²ÅŁŁ™ˆ¶oß>yņä~ųįŁgŸ-//ļŁ³ēŻ»wķķķoÜøņĮ¬Y³F«Õ‘³³sJJŹóĻ?/tĖZLD—ˆ&"‚ €ˆ` "˜ˆ&"‚ €ˆü?ųżŌqÓ\&IEND®B`‚libwebsockets-4.3.5/doc-assets/wss2.png000066400000000000000000001142751476025525100200550ustar00rootroot00000000000000‰PNG  IHDRXšuŁ6JsBIT|dˆ pHYsTiqTtEXtSoftwarewww.inkscape.org›ī< IDATxœģ½wtÕ¹÷’™™Ó›tŌ»d¹w› 8ōb_Z0%„J.yCŽ{C’_Hćf­KBnņ†@ri ÓĮĘŪ`°q7ŁøØX²ŗŽtzŁæ?Ž5ұ$\p#Ģg-­„3³gĻŽsęĢžĪó<ūŁ0™ĆÄl6Kf³Y:Üć ž‰D"Z’Ϧ#©ä•W^¹§¼¼üÖ£Ó$ƒÆ.ķķķo\xį…æźæM>Am10000000ų—ÅXGC`eŽ(ĖĄĄĄĄĄĄąč"'˜ŪŚ0wt`īč@…#¤T a³”Łķ¤¼^R99$ IœąV …!° Ž3r$‚sĖœ›6aŪ¹ūĪX÷ķM;ųĮżP].bƇ=ššŌ©„¦M#™—wŒZmp8ĖĄĄĄĄĄą8`ß¹ϊxV¬ĄQSƒ¤Ŗ_ŗN%¹y3ĪĶ›É{łebÕÕō\p=³g6ģKŸĆąČ0–Į1ĀŚŌ„÷ķ·ń¾óÖ¦¦ćrNŪ®]ķŚEŃ_’Jģ”SŅbė‚ ˆq\ĪoĘXGMĆóńĒä?’<īuė@ˆÖŪīŻķŽMŃßžFdģXŚo¾’ 儵éė‚!° Ž’Ŗā}ē Ÿ|ėŽ½'ŗ9pŌŌPõ“Ÿ()”ķ¶Ūčŗź*dĒ C`|„Ą»p!EūŪ‘¹ssaŅ$˜0F†²²ōŸĒ^oZõæū|ŠÖ--°s'lŻ Ÿ}55‡|:Ks3å<@Ž‚4żēž2åšŪlpP e`````p„8¶n„ģwæĆ±eĖ”äńĄ…ĀģŁpÖYiQ%āņ¾^/ KÕŽ|Ææo½”ŠA«²oßNõm·ŃqŻu“Ü{/šÅrč}08(†Ą2000008Läp˜’?ż‰¼W^9“+§ęĪ…yó`Ö,8Śb¦ ®½6żĀ¢EšŹ+šöŪ }œäæō®ixšAbUUG·]_c 竁Įaą^»–Ń×^KŽ‚WcĘĄßž­­šĢ3iĖÕ±¶Łķi1÷üóiĖ֋/Ā“i_|ČĪTßt®uėŽmŪ¾FĖĄĄĄĄĄą4¢GeÄ]wainžāĀ3gĀĀ…°mÜqø\ǧ‘bµĀõ×Ćśõ°t)L:dQ%bÄæ’;ŁK–Ēžėb,ƒƒ`źéaĝwRōųć_œm}üxxēX½.¾ųŠc«ŽēėÖĮcAvö E¤D‚ŖŸžļ¢Eǹq’zĖĄĄĄĄĄą °ÕÕÜ}ęõĀĆƧŸĀ%—æĘ.² ·ßžžyxĘƒ—Ń4*~ń <«Vß¶ż‹a¹ ¦& łź‰ڈŪIDŗŠ’‰Ż,ƒ/‰l¶cwēcs`÷ćĢ©²¬kćF†żš‡(ĮąŠ^qŚ£Bq1B8 KąsŹŹ`Ł2äżéŃGģ–R)Ŗžć?ŲõŌSDGžĀŖ„é~’ ķ·8JGĮņh,ƒBµÓ²ć}b”ŽŻƒ£ŒOŒvīIĀ•SIŃČó0Ū<åÜ«W3ģŽ{‘c±Į+r:?ŒzÓMØŖŠ‹”ębĶ'œǟå7æ°/G£Tżē²ó…PŻīAļWš¦”iŖŖ~%Ŗ$I(Š‚,ĖČū“Æ~Y‘õµXBˆŒ ÷b µj``šÕGh¾}ŸŃQ» ”„Nts Ž5BźŖ§ać N9wŽ$YƽjUZ\%†°XŽƒ6>bģ»Hņµ˜”ŹWL[!łŃX¢©Ÿ‘õŪßŲomj¢ā—æ¤īOÖ+®äOŌČ»Aaśź‰+³fāģš .‹_ˆŻnĒjµb2õÉ£#Õ_%„ X±bŻŻŻ¤R)†Ī„ ČĖĖĆjµBĖĄąkŒ¾¦“ļłųD7Åą8“ŒhŪż!•Āö$Ćžć?†W^ˆxé%4— M]€IN"I|—÷SU`ŠĒžŁó˜ŠŚJĪ“O(“µ|99#ļ²Ė2¶÷Z®B"„jž øE‡ ”%čōwÓģk&77—¬¬,ģv;Š¢|)MšµXB|>Ļ<ó K–,”µµUß'IEEEĢ;—9sęąõzu󠁁Į×!±@;u«OtS N©xˆÄ†eŒųŻĖČŃ豅īøžņ„,£&“Øš†É||Ūy4фĄ×`Ū¶m$Æ»Ž3jkq,_> \Éž@ଳH0ūPÓ4Tń4ŻõChąėģ¢~o=š¦a6›1›-(_rA쯅Ąźźźā”‡bɒ%ŗkŠl6“““ƒ,Ė„B!žyęŚŪŪłĪw¾CQQŃ n±ĮńFhIŚv€fø涘ā)f<ü&æš÷Ž ½®²bŽz BB!AOOzp6™^ƆĶÖ÷ā ü~ˆĒe Ģę>KI4ŖŃÕ„č!Q……*&“„ß>Ÿ‰XŌ„¦JȊĄlŃp:“x½»=m4B€Ļ§˜Q“2²"0™UģŽ^ÆŠŪnŠ~ˆŚŚZ²³³©’Ķo}Ć Č™×¦§‡’?ż‰½æśUĘvUUŃÄW×z ©·Ÿ}ūöįv»ÉÉÉĮķžņ}ś—XŖŖņōÓO³lٲŒø« &póĶ7c³ŁX³f ‹-āć?fäȑ\uÕUž×CEÓ4būƒ]'*©œĮ ¶ užčfœ(Ģ|i%žÖžĮ÷ß{/üĻ’ōßļZfĢ‘¦ĮŹ•I{4€’’ß½ÓĒäÉVżø­[%^xÖN]­ÓĪšsƍIŹŹś¬%~ xś)ńøŒ;+ĮƒõŠÕaį•—­¼»(—śŻŁ$B&¬žya&Līę–[ƒœw¾Š$ źźL¼ńŖĀĀ·sŲ¹ĆKØÓ†Å•Ā›”zT7×Ķkg޼żK@,§³³“@ @Äf#ōšĆxęĢōī}ė-Śo¾™Ųšįżś«!:īJhék €’<Č>i’_’²ƒŃ[NB99]F$"•>—lÉ,e“!Ż A,£§§‡h4J2™ŌćĖ į°oß>>žųcR©¾·R—ĖÅu×]Ē©§žJSSēw©TŠ_|‘Ļ>ūŒsĪ9‡‚‚‚Ć>W*•¢¶¶–H$Œ3Žf7 Ž1±@é'¼ĮבSVļ¤bSżą;ē̓‡t×`ā"PXžÖ0*†ųę%=LžœŽ /ōņāSeDƒŃF¾yQ'eeéz"§+bŁŪ„Ø)™Ėo¬%SųŁę°āŻŹŒóD| {}VŗŪœ~Ę>Ī;æ‡ĘFxš·^ŽžgŃPߒ<ń€™Ö@­µY Ǝ0o^ßĢHUU‰Ēć$“ITU%qę™h7Ż„üĢ3ē“4¢æž•śß’ž ÆeTŸB¼Ę‚dÖ0WĒ1ēķænā[­Øm&”ʦ<ų&'$‡ё³RȅqR 6ˆķ¾“rcXĒ„Hluj-$Š’`ņJ˜J¦Ź(ę¾ņšRI&“¤R)]\}ŁŁĒU`‰n?bO¾ ŸČį`2!•— U”Į¾Ņ-[¶ąół2.”ŪķfƌlŲ°łóēsĪ9ēPRR‚æßO(:"%„ ü¢|)'%±@ė!­Łk𯇫+Ȕ7‡H":küżļ靇€$A~æį#•’…Ņć“‚Ļ>3±|‰“h0-~:»¬D"& Ąŗu‚MŸä£¦$\Ž÷ü ×^±źāŹjKqŹč…j ü~‰ĀŅ&‰E ¬x/‡hȂlŅ9&@Qq ! ‚¶63W_ć¬zÓ©»ŌŒ©’žo,o¼øK³—.Ŷk±źźƒ^ ”Aģ3;Żæ-E© ’õﭘóŅēŠ"‚ĄS…Ä>ŹĀżļŸcŖŒą’U%"8T@›Ą2Łå¼BW@Š:D90ĻŽ‹÷īŗ’«”Tƒ I! Š$¤Ü8Ž‹[šÜĜ߯v‘vł-qĒŪ‚Āū"– ‘!«N?¾5iäĭ׫Fū‹ÅčīīęÓO?eŪ¶mdeeŃŽŽŽ§Ó‰Ćįųņm300ųJtķ÷Y|ݘńņ'˜āƒÄŽ••ĮK/łŠ£Ų% śĘ"5%›īnĮGĖŻlł4Gßļė“ §V"”1’…<ü 1ūŹ&¦Lµš«_x÷—””ĘųѵŒ§’Hššd4UbÜxPS2;·eÓњĆrŠ"üŸŸ6pęY14 ::Ū¶9˜1#³?ƒJ‰Ü\Ľ÷"s…äϟOćĻ~Šk!­MæS^ sAŠŽdĶš/ķͳ h²Œõt"® bX“&Óų”¬ż±Ó#£X*4¬Sƒ@T»µĪfóˆ(rVś;“ž"Ł–Be$Eąø¤lµI"¶>›č[%ČeuxÆ=¶Iƒ«Ą’*JįŹK Cl®łrŁn GŸ¬MC\?iōH$sf—S”Ńh”ššFމ¢(¼ūī»!())aҤId±FÓ±@Ó4¶oßN<gҤIś¬UU©­­%‹QQQAVVńxœęęf"‘„„„ǵ­G‹x<ĪīŻ»‰ĒćŲķvƌs‚[utńł|“““č},,,¤°°šˆbū Žj*~¢›`p(ßÜ@į®–;d^|ŽĄ›įõ*˜¬*©øBJ• ‡4MeĖf KŗQSg’dŌ„æĖF4dŚ›%XóQ>ń˜‚'/Ź]wū0‹õyh,(+…ŅŅ“H6¬ļ¼‰¤ •”Z:nČjU)*‚¢"f³De%LŸŽ'rŹ˜^ž§«+³ Ņüƒ $ÖX B¢ „$0€’×Ļ”j4£šĘ1Ė(%`­N/ ’\X“‡ģŌšÜ½syśŁ*!Y$Ģ£ŅųįEŁ„ž±¢TqŽŚŠudŚ (»%‚‹,ˆ„ł1¼’ß>$3ÄwCā'&Ä>É­Ypķ±M"||Ÿö’„4j|k.LŸ źĪÖ@{ā£ÕŠŠ„X½T ®ŸćF!õ{Ū°Ūķ‚ԉ˗/ē–[nįŪßž6Ū¶mCQ&OžĢYg…Ķfū<<’É$Ļ>ū,­­­<ņČ#8$I"óśėÆÓŅŅĀ­·ŽŹ„ čīīfńāÅŌ××sõÕW3}śōćÖÖ£EOOŽg€²²2žėæžė·źč²k×.^{ķ5½—^z)_|ń1ŸüŠŅŅ7P˜L&ņóóæ “Į×9„2łĶõƒīóßx YguŲuJ’„Ł ®¼=ūœŗ««+Į‡ĖlߜCYU³#E]—DÄDb1Į« ²ißg!qŃUMLšlB’`ęL??($öķ³šĒßåqė~¦MObµō‰%³I¢bD¬7=vZöŗyāŃ<āńv¾q®†Õ*ŽŚÓ|÷»šąƒ™×-Å»p!ķ×^ū…‡«…d“ɕD.J"Ūū ¬}“  ¹2€äP1¹dŲ’x ,ұm޶ 2Š-³ŃŠSAKHXa¦ņ(Öį*–¢>!šÜćF$”ź$%\o.•ņ#hū\ķŲ§c:žÆÓ²Œ4ŗiōžŪxŃŃ ńŲ¬H҃ś¾…?łˆ¾ ū`ķF„ŖĮ saÜh$KZdUWWćt: ś±©TŠÕ«Wc·Ū¹šĀ ™5k’$‘——‡Åbp®c‰ŖŖlß¾½{÷¢ö³č©ŖŹž={ØÆÆĻh{"‘`ļŽ½ģŲ±’PS‰Or‰„Žg€p8|‚[tōéīīfĒŽ4440eŹ”Œ‰NJæüå/ś’………üą?8ęē40ųŖ2bķn\¾Š€ķńb/Żw\MÖÖ+ɂœÜ=ūœ¤R2Į€™š ‹Žņ’JŹL=5„Å‘¢agÄŚŪU¶lI±ryᐉ¬üßłn“’v9^’­(+ŽogŪ†B o/(„µÅĪßńqń%!<ž“°$ųęE~Ö~āąĆwĶ$b&¾V̾F3u·ųøń¦0Nēaf&æė®t€’'ļ{ļT`‰€uŸ$HŌ™¼éŌ÷Å×f!B,Uad{ę³1¶Õ$ äāŖµG ¶JHIs (żœ9Bµ6 ’ęсt†y āŪAkš YT”Ņc?īœ<ž ![·#>X -mi ÕŠV‰4ū\¤Ź²ŒāR–fŖŠxåmhj†õŸ"ŌÜx Œd±PQQĮ°aĆhkkĖą ‡Ć,Y²„ęęfn¼ńFf͚u¼{ü…X­VęĢ™ƒßļ§²²ņą .Ō’Æ®®6ÖW‚żł‰²bXœ “†¦I$"f"=vRńt<ŽĶĒS¤£>ēø¼}}&k w^³5‰ŖŹDzģĂV„&ćĪ cĻŽ‚40¬#Ųę"°‘ŽŲ9:ČŖĘče[Ż×tė,dĖ‘g•eANnŒZ@ŠŽ.±ņC »j²))qÖ¬ ž36[ŠD،ÆŽxŻIc­ ”É\|UćĘ§Ó HĄŲq ?ūu O<’`ÅŅb3Ÿ,Ļ£«Ó‚ŠZł·k"z­qć’~o6kŠe -|¶¦€–f;š¶—»ī>LWxe%|ó›°hQĘfēgŸaīč :„U^h u›­NDR"žańÕżÖz X !cžD²õęjH“ŖÉY`5DŹ Õ%“jSĄ™ÄT¬!;śß©"Ś­ Ih>·Lh]6ā«ģˆv;¦œg ÖG›“F`‰õŸ!^zńéVH&ūv¬ūšą¶yHUåĒHŁYpž7@Õƾ Ķ­°qsZdŻtL‡ÉbfŚ“i¬_æžÄĖ$ 6oŽĢsĻ=GVVS§N===4Ģf3ēŸ>Bˆ/MÖĄĄąäÅbO’]ĄźŠ“J(Ø)%-øYI{³¶F7,$¹ZKĻN ™‘O āŗ©ėØLQw,8)–šo¾Ū'®FT!]š ˆÅ f'b՚ō<Ņ»¾TZœq¬äĶ‚oĪ”!^}'mżŚ“ ‘x¾3&ēĀ /dłņålŻ:šm%•J±mŪ6žž÷æœ4"+™LņŃGį÷ū9ķ“Ó())“\}}=›6m¢¶¶I’(++ćÜsĻÕ³ŌCŚŻ8ž|4MC–eŠ‹‹u‹¦iģܹ“õėÓqeeeLš4 Æ7żxihh`Ɔ D"¦M›ĘčŃ£õ‡ ¦ituu±vķZZZZšł|ȲLaa!cƌa̘18Ī›=!»wļfƆ 455a±X5jÓ§O'77w@ł®®.6lŲĄž={šūżÄćql6.—‹’’ŹĖĖ™2eŹq‹ÅŲµkŪ¶m£½½H$‚Ūķ¦°°‰'RUU5¤›XA]]Ÿ~ś)zśÆ×«ÆiYZZzо455ńĮčŸgœq†¾Š@<gĻž=lŻŗ•¶¶6Āį0.—‹āāb¦M›FyyyFßžłĻźõ½twwóÜsĻéŸ+**˜9s&V«•X,ʎ;Ų¼y3„ĆaEĮįpŸŸOyy9ćĒōŚE2™dūöķlٲ…ęęfE”°°iÓ¦qŹ)§dųkšFss3+V¬ ¼¼œ©S§²cĒjjjhnnfüųńœžłŲl6Āį°>ć×ļ÷SXXČŲ±c™2e K—.„³³“ .ø€ĀĀĀ/hŻÉ‰bVq±eŶ¹‰ōŲPS2²,°ŗāxĖżdńķż2Ćż‰G’Žģ(6WœĪŗ &k {Vt)A¤Ū¾ßJÕGne7ŃńŠŠSņ”kvŗ½õšÓætݲ łyéߣŖŹģkpÓR甼*Čłł(/ov·'mLŲōY6­{]ØI™KÆŚĒ˜±²œ9ų›ĶS¦ ņ :1™4żŻ0Ō”Āē5v¶l¶3eJ_^+E‘?^PPDČu<žĒSś-4×{ųšC‰ĆžStÕUé%‚0Rø×­ƒ”VH"Ń §EŌĢīy]ŗu2¼ĀNt LrŽ–sŪ„!Å$[ ŪčĮ›#ˆNj‡óŲn”œĢg_b— /Š2"€lS‘³“X*T,“U¬££Č–cæīšÉ!°¶Ō vÕ¦ÅÕČHßæ-vAU”½ž|±įSXR…tė·/y³ą¢ó!µß’ÕŃ 5Ÿ#ž÷iøćfJ&Oą†ną×æžõ€A҃ٺuėeI’˜Ņū*pI&“,Y²„ĘĘFŹŹŹXŪ¶mcéŅ„ŌŌŌ Ŗ*įp«ÕŹŗuėøóĪ;©¬¬ŌEÖŅ„Kihh@’$FŌ3p:„B!V®\ɋ/¾ĄØQ£šz½ŗĄZ³f óēĻ×ć½Ŗūå>I$|ųᇼžśė444‡‰ĒćH’„Żn'77—3Ī8ƒ+Ƽ’ŹŹŹ/ōūÆ\¹’Ē{ŒÖÖVĀį0²,ćõz™9s&óęĶ£ŖŖJ/»}ūv^~łe6lŲ ‹+MÓP³ŁŒÓéÄķvóųćė³/{ō×^{U«VŃÕÕ„gģµX,8 ˜5k—_~9¹¹¹ķ ƒ,X°€eĖ–ŃŁŁI4%‹!„Ąf³‘——Ē5×\Ćõ×_Šļ¶©©‰ßżīwŌŌŌé‰×_=!mmm¼łę›¬X±‚ŽŽ"‘ˆŽN§ÓÉāŋ¹āŠ+˜5k–.^_xį…ł×ŗ»»łĒ?ž”>ēœs˜p–Ÿ”—φPńöšaOtuƒœsĪ9\{ķµ<ū쳃6!³fĶ$IB–e&MštL»|04MĆļ÷ćółHöw™ī§££ƒE‹1qāD¾’żļS\\ŒĻēćłēŸgåŹ•X,~ņ“ŸčREE7nĄétRWWĒųńćńł|ģܹ“®żÓpkjjhmmÕūæeĖšššH$Ųķv]čhšĘŗuėųӟžDkk+š¦!I’> ²««‹®®.Z[[I&“ÜpĆ CZįZZZxšĮijjŹŲ …čīīĘb±p×]wįr¹ƒ,^¼˜%K–čVµŽµ£"‘ŻŻŻƒAZ[[3& ō.ö½xńb}Ņ@ļ, ioo§©©‰T*Å5×\£§ĄBšČ#°dÉŗ»»õ:%)żC $“I|>ßAæ×¦¦&|šAÖ¬Y£‹¦k®¹†‹.ŗ‡ĆAWW/æü2ƾśŖ.j- V«5£ŲķvĪ>ūl, >Ÿ/c2¤-—]ż¦W„lŲ°W_}•††„X,ņņņ$Iæēŗŗŗ©?¾V¬XĮóĻ?Ą 7ÜĄäɓBčż’÷)))aęĢ™śZi‰D‚öövÖ¬YCKK gu3fĢĄd2‘••…ÅbįwŽįõ×_Ēårq÷Żw3zōh„|ņÉ'üć’ ££ƒ`08čoää'ķ6SĢŃ 5C\M&ÜmO ”Bne1æ•xŲ‚;?D~•}[‹dŁ‘Ą•!äs ŲH%eÜA² ƒÄC6=6,Ž9éŲ–P—Å¢āŹŠo}ܾ IDAT+ų[]˜¬)ņ*{°:’DƒVŗ›Żør¢xŠ‚¤’ Qæ{VŒœŠŌ„BØĖŽÉ¢ā-õ#Iv÷€1IÖ°Ų“ÄVr*ŗqxāØ)™`»‹°ĻĪ@ń$šHFMĶ/^åØų¬i>³Īs_–!??żüŃT™DTfų(?^ÖNAAŗÆ^Æ†Ē“‰Xz(¾ģŖ}ŒBQś®ĒīĶ¢²*Äĉrs”£Cįå—ū¼.W’ģģ8įˆĘK/ŗikU™25@q± …’,$ģź++“ åvūBfĶ °L==8źėaųĄāZÄLjÆSVSq_ŽK- Ś>;ĢX*cČ®Ģąłųötœ–itŅĶT{ Õ S±„’ÓwæiqØwABĮ:.ˆu„Ь;%Ž°źåäXµ{!œ,„ÉĄbN‹« ›Ÿ¬Cśę¹HćF#6lJ[¹XĒŠÖ‘ō°tł…H“'‚É„ÓbįÖ[o% ņśėÆzx<gõźÕÜvŪmzj„“‘H$ĀčŃ£™3gS§NÅl6£Ŗ*ÅÅÅÜwß},[¶ŒĖ/æ\Oć0cĘ ½ßįpXėļźź¢¾¾^Æ7čy¶āńø.®FĒćŃĖ=ņČ#47§ó–äēēsĆ 70cĘ "‘Ææž:ļ¾ū.@€… R]]ĶÅ_<Øū­×M÷ĄP\\ĢęĶ›yśé§õ¬śkÖ¬aŚ“iœwŽy“µµéĖ\yå•\qÅäää ińxœ-[¶°jÕ*Ż…Ö+ž.\H8Ö­x×^{-Ƈgóęͼśź«Ō××ÓŻŻĶĖ/æĢøqćōĮžż÷ßēwŽ!JĒk8NŻ‚äp8hnnfćʍĶIÖÜÜĢ_’śWÖ®]K2™D–e¾’żļså•W’••E"‘ąÓO?åµ×^Ćļ÷#IÓ§OēśėƧ““”;wņģ³Ļ²k×.Z[[łūß’Īȑ#)++ćĒ?ž1‰D‚ßüę7śł øóĪ;õĻ%%%X,hllDĮˆ#øõÖ[;v,’$‘L&illdķŚµ‡œā”¶¶–>śˆžžn»ķ6ęĪ‹ĖåB’$N9åTUå…^ą‰'ž`Ś“iŗ Š…łé§ŸĪ·¾õ-Ün·¾o÷īŻ¬ZµŠX,ʝwŽÉģŁ³±ŪķTUU yé„—©'#’,PĢ*š*ļdČ`ĮģQæ@›ØI…#;°8$ćf@M)„:D6L–.o”DÄBw³‡T܄¬,öžĀ‘ˆ“ ūDżvLf•x~Ś2Õ¾'—ď,ƒÅĄlO Xq儑$æÕM,hE–ŠU%«8HØÓ…z@¾VIJ[ė$Y#Śc'ŲįĄž'§¢I;2„mĪެu^R)™£=0oo°M³™é9sŌQ©?-°śœŁ–bźéafĻNé^Æ<}·;Žā0sÆI“Óg½śüóóŸÕ¦ātj˜Ķ‚dR¢«ÓLļ¢|§œgņ”(5ŪdŽZąę³59ø\*«ŲŸ\ŌJlæ…+»$Ģašž¹ēĀÆ=`³s×®K¤@ė ĆŽ<©SIœ^Q—źPQ;%Š$,U’£/Jh ķL'aµŽz–¼Ś­lµ€7\@ź×„D“Šę—A€u”†tUĪÉ!°ā‰“™ °i’ ØżæĒĘŒÆQæ\N° ī‹]ˆ >YÉ$Ņ7Ī@ś·+  WÆĻėõrĻ=÷`³Ł†|0Ēćq>łäīøćŽ“6¦,ĖL™2…‰'ź¢Åd21bÄĪ<óL,XĄG}ÄŌ©Sõ_f³™d2I8ęóĻ?GÓ4:;;ukˆ$ID"źėėńł|“¶¶ŅÓÓ7‹£7¦I’$6lŲĄēŸ¤-,“'Oęšk®Įn·#„  RSSC]]ž5śōéƒĘ( !ųįȬY³0™LTUU‰Dxā‰'Ų»w/›6mbÖ¬YśZQ½$“I\.eee˜Léd}UUUœžłś` …ųšĆõtłłł\vŁe\rÉ%˜ĶfŖ««ńūżĢŸ?ŸP(¤Ē”7ެ¬,^żużX‹ÅĀW\ĮwŽ©‹ˆźźjf̘ń…“ZZZųŻļ~ĒöķŪI$˜L&~üćsé„—ź+V®\©_óāāb.¼šBĪ>ūlżŗlß¾¦¦&¢ŃسTXXČ\!°<—\r‰ž¹÷”ݻޤ­\½1s½÷@UUÕ!ōE444°sēNʍĒōéÓq»Żś¹<W_}5o½õ›6m¢¹¹yĄ¬Ųüü|.¹äŻŪK]]{÷īeņäɌ?>#§Ēćįŗė®ćå—_ΰT~ՐzSā„!ŸMM»éā‘tž$Ŭ‘ÜżJ*ÄBé™y&«ŠÉš"p‘Œ¦eUƒXČJvQIī½³ō„Q šI#K“vßIȲĄdQ1ŪS$Ā–“‹O“Q5ˆvŪń䇑u€(H² 3ćŪėEÓ$bA9=8²£D{ģūŻ€i\!q±°õŠÆĶ!b‰&ČÆk°=0¹ Õ~tŅō¤VŸ8®¬ sÕÕĶx<}}ńz=ĪPœĖjIߑŖ¦~ƒ”ŻŠX¶±żsč Ż|ķ KˆīÄü׋—é–0ŹK!Ū£‹«^¼^/ßūŽ÷B0žüA›“H$X¹r%‡ƒļ}ļ{ń?' n·›¢¢"ż¾Y–9r$V«UwAz@5j[·n%‹Q__OWW{÷ī%2yņd, ėׯ§®®ŸĻĒ®]»2āz¦M›¦*ļŚµ+#ķEÆė«—^ėS/---ŸūcµZ™5k–.½^/§Ÿ~:O=õš¦éī·p8L^^žšžūļ³råJ >|øßßś˜L&3¬tEEELš4 «5-Öćʍ£°°P(„‚††āń8ŖŖ²k×.ż:Z­VęĪ«[ņ -ŗ–?młņå¤R)4MĆb±p’ż÷óĶo~3ćøX,¦ēėżüĮ°iÓ&}[}}½ŽUUihh •J ŗ¼“$Iz{B““ƒĒć!°wļ^~ūŪßņ—æü…ŹŹJŖ««;v,gŸ}ö€{k(zzzčīīęŌSO%??@|CAAtttŠŲؘ!°$IĀćń *¼»»» ”””ąńxŌ[ZZŠĒćÉpŪ~•BBMIȊ†l>t‘Øõ"ģĻŲŻ_ĖMBK„Ÿ{²¬Ä~AÖļ°”ŒdJ—ėŪ“¾Jšś*Ž_L’H·Wd—p†śöķ·Č™,jښ–„š”‰GĶŗųŠGĢÄ#fģž8Š%„ ,IÖpxb„»ķh©£{ŪЉ¤ t¦āē:Bd*«ąÜĖkQL‚SOqž™±?6›Ä䙝ģėa2iĢūv”ĀB2ÄĀ-ߎ£HY½:—śŗ,ĀA3V«Fye€ó.čbΜ8#N‘1›%f_ŲM<äĆåvļΦ»ÓŽ¬h—†8ćĢvnŗYeŌčĢś‹¬,ØŖ‚ŗŗŒĶŽŚZ s2Œģ”Čŗ.ŠūŠ$‹@vöŻö `{ø‘jEv«³’,Å&ŠŽLæø+YCæąŁgʰ>½IɑłŪqžö)éüƒJvźČū{89–ÉŌ÷­Ći…,IH÷żă†Héö›.ų v»d2™‘įÜn·pēy<ž AŃŚŚŖĒE£}÷•¢(Gt?ōORTTÄ©§ž:@”ÅćqŚŚŚōĻŻŻŻ¬Zµj@] ŪĆI`*I§v7ndńāÅhšF8&ÓŚŚŹŚµkõŁæųÅ/ŗR€¦i„B!Āį0YYYƒ =Y–õÆ^—r/Š¢••„»Mś …ˆD"ø\®A¬,ĖäēēeRq’$px¢éX$‘yģž(ŠY#Ņshb··Ž^zĪū[ŖŅŸ5P!S™ŚH$TM““»š·ŗˆ·ddąw%„„7”ČLĻŌxŲÜ1‹JŌoCSžččŻ×5čöąÄ/ÜŽ‹$AÕ0Į‹/§­Ń²Œž§ŖÆŒÄ7ĒłÖ¼“éŃl˜S»ŖŹÄO~&PÕ.„šéĘ#Y(ŠĄd’õن2wÜ©ńŻŪżhZ@/+I (ętäĶ— š7n€Ą²µ¶r Ą’d ;>›d `ü…BRĄ”{šē™lČCŌ![A¶ž8«UN %żŪeéY„»ö =šņƒæ@*+A^ ’ū‡!”0āÕwŅŁÜcńtlÖųѰw“u {6m»öJ$GßJ’$¼^/wŽy'ŖŖņŚkÆ ^’QXMūXŃ+,#£išīĀ‚ō@6mŚ4žyę =+nŻŗuŌÕÕa±X(..fĀ„ |šĮlŪ¶-[¶°gĻż'NÄjµźõõ(&“‰āāā/ŒAŹĻĻŅ"r š’$ MÓōŁd¶ŁķvdYföģŁTWW³pįBV®\©ÆŁ(„@Ó4R©}ōO<ń÷Üs²,ćr¹t Z*•0›4‘Hdøš\.&“i€ˆķuö·¢ f³Y_x|ļŽ½Ü{ļ½<žųć),EɈAźMĖp Ŗ?………‡'­¬¬ŒŸżģgœy晼÷Ž{lŻŗ•īīn]ø©ŖJcc#÷ß?ļ¼óĪ ā§Y–±Z­˜ĶfāńųĮęż'$ō§wRÉ`}‡ĆŻn')"æ²ā ‰DŌB“ĒŽ37JÄ%ģė»LÖ$¹UŻ! ™ėJM(ØI‹-‰bŅPSé{Å꩏šõ5ė‡TR!•P0™TŌ„‰D4Ż6EQAš"¬JÄĀlī²¢¢© &‹ŠÕžL·1ŃwŪÜ Ō¤¼æ­Ē@`5 œ¼”ŗlÄ ŽŽŗ®é 0p°U×Ģę2™ż•%‰¾w‹Ē£ŹŹŅ~!wš²GLÅ@jimʝś’Å89Võpäށöū‡”¾ķ'æAžļ“Č̾'„€PńÖ»ˆ—^K‹+‡éĘ«‘®ŗ±fā©ē”©ńäsJ„×?td®K˜››Ėm·Ż†ßļgٲedzĖ_š`0ˆßļ×s[õ"„ µµ•T*EII‰Žß^×aÆŠƒ¬_枖–=ļQii)EEElŪ¶÷ß?c)žI“&eXN9åż§Óɜ9søå–[ ƚ¦éĢC ŌŻŻŻ455én¢Ž@ė^$In·›¬¬,„!ØØØą®»īāī»ļ&SWWNJ+xśé§õĮ¼7·—Åb”¬¬L_°§§‡¦¦&†®‹¹–––Œx³²²2=åCqq±nÉK&“¬]»–ٳgėżémSļuŒ9sęŠŲŲȆ ō„‚ī¾ūnžüē?ėī/›ĶFii);vģ`Ĉüą?`ņäÉHƐ4™Lē”eYJ½3õ“žhš†Ćįą’K.įŅK/EÓ4ŚŪŪŁŗu+=ö{öģAÓ4Z[[Ł·oåå™ ~Äķvćńxšł|ƒArrr2ö§R)ŚŪŪB“®ždggćv»ioo' ‘“““qŗŗŗ¾ā+mĮņ·z0;ŗ(¬ī$Ō!² XTÜła$ mWސAš#MgƒĻ* ’L(D»ķŲ½QŁ1:ėsŽČB$4™h·oE7Ł%‚N$Y#§¢!$Z·”¦2ėUS2Į6®œ…#;u8qx£X\ |Ł¤’}ż3[SØŖ’į²<šø|ĮŪ"UłĒ{‚ŁQ'żŅ@śŠyTS ņūUb1܁$<Żį1GhÕÆĮ‰hĶ!/©}ģ‘&ŒAŗēv(-†Ęf“ū~ƒhÜ×üŽ‹ #Ž}ńģˉ€ÓtõåH—]„äv!_š ¤Ūn‚ņ%ÄÓ/!ž™Ÿ.{v»ż“CžLÄb1jjjhjjʰ“E£Q>śč#āń8ćĒ×ß^·Ūĉ“ÕØ¾¾žxŸO?żTtƒįp8øļ¾ū8żōÓuĮ³yófī»ļ>=a©Ćį`̘1ś¹zŪåółˆD"D"B”===¬_æžßžö·“·gėöO X±b…žr”÷śļܹ“µkן)¢Ń(‡™3g2nÜøŒļ¹×ŗŲ+ÖŗŗŗtaßK~~>ÅÅÅlŻŗ•Ż»wgX5MćĆ?Äē󑝝MÅ oĄCQUUEii)6l`÷īŻŗŅīŌ |„Ü{‰l“ī(ĄßāĮꎓ[Ł;?B¤ŪξšĀ¾ąsMFgZu„€TBA؀HĒ^©©žu ³‡ž}ÜłaJ'“āĪÓYļ%Ųž^šVØ©„)£N-•Ž™źŪ&”¦d];t5x1Ł“i£°ŗ‹DŌBŪĪüāŖ·±°•–ł(fü>,ö$¾/ĮŽFfj\>"ėŚ”`÷|%ó=ƒ”<2„ÄćķķńA’ŗ»“$“Ś€ćB”‰Ańł÷Vhš Uńł46ĘųlS>čbÕŖn>’ēwkÖ¬aƆ „Ća^zé%6oŽĢ„ $‰ŽŽjkk©­­%sĖ-·dœcäȑtttéø·ūī»—ĖE~~>sęĢa޼y¬[·ŽG}”āābN9å 1›Ķ477óńĒė–Ćœœ†OžŖŖŹ† ųå/ÉčŃ£łłĻNAAćʍcęĢ™<÷Üs,Z“ˆÜÜ\]H577óōÓOĒłŽ÷¾—!€ĘØQ£˜9s&;wīԦޕžF’É'ŸšĪ;ļ`³Ł2bä¾Ŗ$cfŗöz鶂Œķ”.'”®žbD"·Pæ®ĻŖŠY70ó¾¦Éō“dŃÓ2ųŅÅĮN7ĮĪ>×­¦ŹtÖåe”‰m“īčļļ’w9 wŗŁBh2ŃM=_¼ģM{mŽī’2HšĄŒ ŲžČqRśČŠ4ųųcß»}šuĻ<ÓĖļĪųń™ēüĖ_xńÅBĮīš±ć\¼õV_ź!“²›ÄžZDķ³b)– Ž).²ē`©²”øŽßŅs'•ĄæqZ,–ξwŚ@žé’A1 !–œv’‚`·!Ņ՗!å |°Čēž‰&ļYõˆ¾cG¦—įłŠ“ŸŸĻšįĆy’ż÷Y½z5%%%ģŪ·ķŪ·ćńxøżöŪ̼²X,ŗU«×ŃÕėÖ)//§   C`õN‘ļ¢(|ė[ߢ©©‰ 6ąółhjj0iĄb±››‹ŪķŅ}VTTÄōéÓY¶l™žŸ ŠS(\|ńÅśĢ3Y–õĄõĻ>ūŒO?żt@}N§“²²2®»ī: -¶JKK¹ćŽ;xüńĒõ¬óuuuŌķŲ”eYäæå–[ō%k -Œ~ņ“ŸšĒ?ž‘††‚Į įp8Ćbåv»)­A^^÷ß?÷ß?›6mBÓ4V­ZÅC=ď~ō#JKK¹õÖ[I„RģŁ³‡P(Äʍõ$±żÆAvvvĘņ37Žx£žf£7®,č)8 =²w–iŻ«½ßYvv6·ß~{†{1‘HŠŃŃAaaa†Ėét2kÖ,łä“OØ­­eōčŃØŖŹęĶ›‰Åb̜9“¹sēÖĆ]Q.ŗč":::X¾|9æüå/ńz½z¬Ż7ŽČŪoæĶēŸŽķ`Į.¤x,ĮØź8:éz‰FÓāg0FŒpH 4§ü)ö6Dńū ¬ü‚¾ö !…T–,éäž§Žukż¤RƒōIŌÕFØ«šęm|ūÖ2žļ’FE…ķČEÖ/HöčÖ%!ŠĀÉ}ƒ[ŽŌžBŲf-"ŃĻČč Yd“@Ÿ•LPż)‚ļłšĶo#QpLśD‚D]”D]”Ąū>rn(Ā{M!¦œć#}N: _xZ4†xźŲSųż#p×w­mˆ'Ÿ‡žż«‹ aĘT¤ü”ßxäsNG3)iĮVŪŠwl?N¤KQʍG^^^†…HQŖ««q¹\)¬V+Ɔ C’$.¹äzzzxļ½÷ō|'Näŗė®ć“ÓN0ą+ŠĀ°aĆ8묳ō€ļģģģ ÷Yee%Ó§OĻTgžyꀣa½~ń‹_°bÅ /^LGG‰DMÓ0™LŗūuāÄ‰Ģœ9SÆÓjµź}†ōtūŸžō§±nŻ:B”Š¢P^^ĪW\‘ałŹŹŹā¬³ĪŅ©ś@›L&¬V+“&MāŠ+®Č˜ķgµZ9ū쳩¬¬ä­·ŽbĖ–-ŗ{Ńl6ćv»9õŌS¹ųā‹),, 'OžĢŸ’üg^}õUÖ®]K(Ņ-=V«•ŅŅҌœi999Œ;VwŁ•––źbØ““”ū￟ߒž÷zįp˜?ž˜¹sē2sęLŹĖĖY“h6l  ‘H$ōŁ n·›źźj&Mš¤_Ć^f̘ĮÆ~õ+–,YB{{»;ęt:uŃ8fĢ.æürjkkńūż$“ÉŒ„†ŹŹŹ˜5kēŸ~Ę÷Ż» śšįĆÜ[cĒŽåž{īaŲ°alŲ°ŚŚZdY¦““”3fpŻu×ežŽś¦L™Ā°aĆŠāābīøćʎĖʍéé锬¬ŒÉ“'sę™gņģ³Ļņ’³÷ŽQRÜWŽ÷§Ŗ«sœéÉ90‰aČ9J $’%Ū`Æåµveæė“kĖŽóyŸÕ®ĆŁõėĒ^‡µ,{_鑰‚,„Ų !Ā ¢`ˆĆf†‰LŻ=»«Ž?ši1Ģ ¤śœÓ¦ŗź×·:Ōļ[÷Žß½‚ žž>ź**ƒŒTž¾|ļ6&”łąƒžzźµgFO»ø(æżļF<žæśUöK”@ø$ŅȒAķ}½AD½Qܛzčy”HēČ"ībdw”ž’Ū†”q>‘Ętć=Y·„Ąŗ9Œ=S‡ņ’žBač½ ©µålŪ‰’™ŽŸ š‘$āܙȒ„ņ»’;āó·R`éõzžć?žcŲv“ÉÄ÷¾÷½aŪSSSłźWæ:dŪ}÷ŻGGGG|9ü„j2„„„ńė_’zŌē333yņÉ'ĒlæĮ`ą¾ūīcɒ%ų|>ŗ»» …BńÄēĮ•’’’2ā9ķk_ć+_ł ķķķčõśx¹‰ ±Z­,[¶ŒeĖ–Åó¼ā«&āķz.FEņņņųö·æM(Š×Ö²Łl8ŽĖz ģv;?ž8ū·‹Ė墻;VłĻįp0ě4sęĢK† óóółŻļ~7źóYYY|õ«_å+_ł .—‹¾¾¾xI›Ķ†$I£žćōéÓ/Y^”¢¢‚ŠŠŠxy ĒC Ąh4Ęߋ‹?³’M…! IDATĮbµĻ?’üØćz }>]]]h4šx Ž‹mļųĆØć b·ŪY±b+V¬²½®®ŽŽŽŽ!½3UT.ÅHŽ«wFšˆ¢(47ųż³McWņ§WŪøēn'}ł*óŽGYĶÕܼ,rE†Ą /® ŻcWńcC2®w»1N²`]t㯷­ĄB?’r0ˆņēõpī|cN“r²Ą3­m(ī­K]żB~ĪØw"āĢ©Č1V5ž"īĬ ō:ÜJK!\IŽĶÅ ƼøŅ÷h˜Ķę!e®N7$ x% 6¢¾“ŗV«%))i˜§źz0؃šzm2™Ęü^—ĖE?‹»ŻŽF£! ŃŅŅĀ /¼@$aéŅ„—,%”¢2HD/”ˆĀ0O–f 8Ź·”Ā±ć*+‡—š°Z%ŒF—+B 0(ž(Š/ Ÿ6Fńxīch brų yuȲ€9Ń ‚ŒėœPpęō!GD”16¾Łō§ģõ“k¢o~é ż`P¦«ėŹVæ " Ó‰äęÉĶ5¢Į@”īī0CģŠŲčēƒzčģł5{,s˜ø3§OŪäæ‚öWƒ(™čydcA@cŃdŠgĪ•‰ö‡ŃŲc’&ŲąĒ»§98ü5£ˆå®Ÿą·P`544°yóf*++©««Ö|b“x  ¾¾žĪĪNNŸ>¢(L›6mČ~BZ2<ø *ĘĒśŠ"B¢ćā.š£ņiX[·neĀ„ ƒĮ!M~G"³qćFŹŹŹ† ¬ęęfvģŲ1¬šųÕŚ5Z£ąAšššØ««Ćįp XėׯgŹ”)Œ7īŠ›_)¬[·Žū￟äääKī[YYɂ ČČȲ=‰šŹ+Æ\‘Ąźččą½÷ŽĆķv“@(b÷īŻ|å+_ņ~Ö®]ˊ+ƒtww#Ė2§OŸ¦„„EX*( ö)UštYˆ„4čM!¬mlĖ_?ƒ^žN ¶T·½9„¤‹Ņ^Ÿˆ,ߞ9^])±nC]ömGnŠĄŗž€Į !++vĶs{"¼łfīģ#8‚ø˜=ŪĮźÕWY3.…3g†mŽ ¬[ײJ@cјbN‚ˆ+Bߛ]„źF(>Ŗ0O·a™wż{_Š["°zzzx÷Żwyēw.;Į2ŲmŠs2cƌ!Ļ i)i)Wl‹V«%??ŸŁ³g{.//ė(­īTdYĘķv#Ė2z½~HĶ£®®.jkkILL$ ‘‘‘ŃhŒ÷Ū«­­ÅétR^^Ž¢(ģŽ½›­[·2nÜ8v»­V‹Ó餄„…h4J^^½½½ƒĮx1Õźźjŗ»»?~|¼÷į`«ˆywŚŚŚØ««#%%£ŃHBBįpÆ×K}}= äę꒑‘AOO»vķĀćńŠÖÖʔ)S°ŪGi āńŠŃс¢(tvv’™™INN¢(¢( uuuŌ××c³Ł˜8qbüü›šš°Z­œ:u ‹ÅĀÖ­[1›Ķ2nÜ8zzzØ­­Åd2QRRBBB‚ ąńxčėėcļŽ½˜L&ʏN§CQ”x£āXeę>/<{±żŃh”mŪ¶ŃÕÕżyóČĢ̌7žøīŁ…cėt:Ϸֈ‰­cĒŽ )**Ān·ć÷ūinnF«ÕŅŠŠ@qq1’$QSSC0dҤI¤„„!Ė2żżż“¶¶¢ÕjéīīĘétāp8ā…>[[[Q…”””KÖcS¹}š»ŒDB±‡‘–HDƒ¤ė„)0ŠmĘ` įBo ŃŪl'ą»}?ū€ÕHzŽsC…ŪÖ#ČŹ‡»n¼Žoż¹5/¶ŅŽ>ÜaQTlā'?)&=}ähÅe9~|Ä~¾ž¼<`xčšVˆŅ’V'ž-½Čž‹ĖĮƒ”Ō„ó‰ ¤„Op%÷C‡±mŪ¶!ķX.E8Ž7›=xš ²k\y©BŽcÅl6³dɒĒŅėõCšē~ŅčźźāšįƔ••Å Ęxß¹æū»æ£¼¼œH$Āśõė)..f×®]455±téR‚Į ŃhÆ×‹V«„­­ —Ėł ųė_’J8fÕŖU|ōŃGń6l ££ƒĢĢL^~łe.\ČĢ™3©­­Åļ÷SVVFUU[¶l!??Ÿżū÷#Ė2+W® ¶¶–’““©¬¬ä‘GĮf³Fńūżx½ŽK öŽŽ^yåL&ÉÉÉģŻ»—éÓ§³`ĮöģŁĆĪ;IJJ¢µµ•“'Oņ¹Ļ}ŽsēĪńŪßž–’’ $‰H$‚ĻēĆļ÷ćńxhllÄķvsīÜ9jjj˜?>ÅÅÅlٲ…iÓ¦ŃŪŪĖžżūłŅ—¾µŠ¢ąńxxöŁgćÅY«««¹ė®»(**ŠŪŻ××G]]“'OfźŌ©ń¢ØŁŁŁ—ōŲõöö²gĻ,X@4„ŗŗš””¢Ń(‡fɒ%čõzŽxć E”ØØˆüü|jkké?æ$ūÅ_ä¾ūīcāĉŌÖÖņā‹/2aĀŠ‹‹9~ü8‘H„G}Ax’ż÷ÉĶĶ%u”¦°*·‘ŠPO“¢āŲ½śŃˆO§™“āndYÄŪk†Ū4<8H{qĘ0„ķób=Ņ€{Źč®Z­€É¤A¼HȅB2~”1ų†įr…yćv~ūß œ:å6ʤIV~ü“bę/ø†E!{÷Žøy ¬Œ+X‚NDŠ ö-RÆ2t鋩÷f'®uDŗCĆ<”ĘIR¾›”äŚSZĘŹMX^ƗćĒÓŅŅ2d{~~>“&MBŖ««9sęLbĖ–-ń¼<ƒĮĄÄ‰™4ikÖ¬”©©‰9sę`·Ū)++cźŌ©—ō:†B!<%%%Üu×]TVVŅŲŲHQQŪ·o'''‡{®®.~žóŸs÷Żwć÷ū©©©įūß’>IIIøŻnœN'“'O&??N‡ŃhÄćńŠÜÜĢöķŪ©ÆÆ ¬““4ęĢ™ƒV«å‡?ü!+W®ÄሹØeYęȑ#tvvņ„/} EQāĶž/XŠ¢0¤āüŽ/& ŅŽŽ­„„fĻžÅbįĻž3õõõŒ7޳gĻņąƒ2wīÜxµxY–ijj¢³³“ķŪ·SQQĒćĮårqĻ=÷žžNuu5‡¦±±1nē„ .k—ŹķŽrŃæ#ŹE£‚É$Ń 3†Ń›ƒD‚7>YüZhš”GéöźaŪ“Ž?zĆ֔)6¾ł­\JЇNōĻž¾‰·žÜ>bķŖKŃŅąÅ[Xób ¢ōų3E–/O柾“ĻŒév“ZįźsTwī¶IŃj()6\ŃPę96%#% Cw=ۊwŸė²‰īhšÓ’zĢséZ`T4ŠX—9IüRś<ćMɽä¦_»»»imm‡ƒt:Ė—/ē3ŸłL.lrrr(,,DÅ!ż - żżżlŪ¶źźj’““ikk‹÷e())!33½^ORR ńd~Y–©­­„””ēž{EQšł|””” ±y0¬x¹<µK1Ų³o0hµZć‹J’’’(..&99AŲ¾};{÷ī%99™`0Huul2’$‰ŒŒ ŠŠŠŠh4”””pźŌ)Nœ8A$Įįp““sĆØÜx@Ž (blĘDIEŌ|<ƒ™~̉>z›ķķœ¹}Ü#:½]čÉMĀjĒÖ1“ž•cĻi»OŃ?·d”#Æ›M¢¼ÜĀŌ©CÓÖ­ėø¢źź‘ˆĢ”C~õ«³lŽŌM__˜ §Ėņr ßüV.÷-M"'ۈF#\ż¢śh6o¶ŁWR‚|©‡„¾Ų„.shøRs…u©ä°‚w拾W;šń ūä!÷† 3ĪæĶĄ4Ł‚&Q{Ӌ Üt%Ė2ŃčĒ ½°°|ņņrvļŽĶٳg±Z­<ńĤ„„ń«_żź’"ė駟Ҙųzb4łāæČ}÷Ż7¬Łń' ³ŁŒN§c``EQčķķ{ƀx`A$)>ÉK’’,AĄįp`49vģX|eā”C‡(,,$))‰¾¾>l6Ÿżģgć ~ĒD’$RRRhoo§°°0ŽßpĮ•‚ƒv †‹µZmü’—Ćļ÷ĒĆ_H’„Óé$ćółeŸĻ‡ŪķĘh4āõz1›Ķq”=hóą¹777ÓŠŠĄC=Dbb"]]]ƒĮø-}}}„B!ōz=ŻŻŻ¤¤¤ +!!““4¾žõÆĒm¼xUē`NSss3ń–D”P(žŁ\EQšz½ `µZ ƒFt:z½Fƒ ȲĢkƽĘ~šœN'•••8pˆŻt ī ÄmÆ®®Ęėõ2sęĢŅÖGeģˆ½%€Øłų:«(”+Ģ‹RdHHB#ÉĻ'½›}äHģū«‘¢82ŻųŻzü.#>—‘ģ‰m8sśč¬æ½æggŒc҆ƒĆ¶ē>ū¾Ā4øMė×*@gg_håå—Z©«ó ©ģ®Ó Ģšķą®ENdYį½ĶŻx½Qä Ś=üp*EEW*Ūæŗ‡× s»|3P5błV[ūˆ“‡P.ØŲ.čDL³­'[‰ö…ńlė#źĘŗƬĮ²Ą6ķĘę Žte4‡ˆ•ŠŠ 233ٵkæüå/iooGEźźźųÖ·¾…,Ėüę7æqāŒD"cĪćŗAąŁgŸE£Ń°dɒ&än5’$‘——Ēʍyę™gšł|œ={ö’Ē zCŗŗŗxļ½÷((( %%‹ÅBUU>ų ¢(Ņßߏ $''“™™‰ÉdbĖ–-Üu×]ˆ¢HWWĖ—/k4™8q"Ƽņ §NāųńćȲ|YQ\\Lee%Į`3fpöģYŽyēž~śéaūvww³mŪ6¼^/}ōeee2~üx¶oßN8ęĉ””„×;“²V«%--7²hŃ¢ø «®®F–eŖ««ÉĢüø™źŽ;ā<³ŁŒÓ錟F£aƌ¬]»– 60iŅ$<&“iH^ Į`ąŽ{ļåÕW_„··7VŻŗu+O=õŌćhˆ¢HMM ļ¼ó’$ŃÓÓĆüłó‡ˆ½ĮµZ-‡"55•÷ß’’c¾÷įp˜‚‚‚O¼Ē÷vGo ‘ZŌ3ě!GD:Ī\yDp@§ŪŒ3§ŸÄœ~|}F‚­ŒŲÓŻHŗ}Ķöó‰ņŠÓ@Zižn3~÷ķ{ͬ›9ŽŅķÕĆŖŗkžōm:×\[śÉ¢®ĪĒ7æ^Ķ®Ż}ų}Q.žC!…}{ū9TåFbbäā}JK-W&°ŽxcÄĶīłóÆŠśėƒļ€‡Ī’n"xŹ–‡E²•ŒoÆ’ĮóÅ\†ģ#„źŠoøĄŅWÜńö _ųĀ,»Ż~Uk½ ēĪćĉƒAņņņ˜:u*gĻž% ’’’Bcc#§OŸęŃGeźŌ©˜Ķföļß5/wĶx½^>LFF999— ?E£QŚŪŪ …BÜD+ĒĪ ·§ØØ­V‹Åb!//ÜÜ\ʏ@ff&.—‹ŠŠ ²Ļ×8)++Ć`0ÄĒ™žĶf#33ƒĮ€,ˤ¤¤’’Bqq1:Žśśzņņņ8vģżżżĢæčŠÕÕE[[„„„ōōō0{öl/^Œ^Ƨ¬¬ I’Ø®®&))‰/łĖq1d4)--į\yčķķeĀ„ ¤„„QWW‡ÕjeƌĒC›3gΤ„„›ĶĘć?ŽĆįˆ{ЦNŠÅbaÖ¬Yœ9s†£GPZZ:¤J¹ ¤¦¦2aĀ<‡ĀėõĘCėŠEQ‰'¢(J|e£ äää ×ė‰D"¬\¹2¾]§Ó‘ŸŸÉdB***8vģķķķ¬Zµ §Ó’~Ųl¶!ßo³ŁLmm-,Z“膗ɸQō6W!GoN?µ¢@`Ą@oS½ĶŽ!¾V;!ææŪ+’£"}­v‚ŽAo©€"ƒ»ĆŠÆßČQŸĖH›žsv¼½&¼½fzĢ„ƒ~w‡õ‚’!Ÿ–¾Ēłm·oØ8Ŗ“p§:Č=4üfRŪļCŪ؆µXµ¢(D"d„®3–›FģsØ­õń§?µx\A‰%÷&‘žn²żƒz8pĄ5by…Ģ,O<»·4ūłõÆčķż»Ę„Öą#śųÜēŅ)+³œßWįlC”ƇLää䐕•EbbāĒ^ķH.ŗŃŒ$$Šś½ļŽFŁĪ‡xtG=”°Bą¤ļī‘[JM˜¦ŁāU×ńlé%Xļ&˜€¾ŠˆõžŲd Ś‹{cO¬0éØo‚‚¾ąłų!bµ°C”JXAS ķ6ŅÓÓINNĘjµ¢ÕjEqLÆ×{źå—_Ž~į¶›īĮ’$‰I“&1nÜ8ŖŖŖ8~ü8ķķķL˜0É“'sģŲ186‹/fõźÕD£Qžyę™[R³ŖÆÆŸżģgčt:.\8ęĢķˆŻnēbć`·īīn¼^/………lŪ¶ «ÕJRRZ­–Gy$~¼N§ćńĒbŸeyy9åååńē‹‹‹ćÉŻKšæ«ÕŹŹ•+ć«™ģœóņņų‡ų‡ų߃Ēåå呗—ß …ųč£ƒĢ™3G-ĶpKb}Ö.³‚ļĀēłā}…‹¶2ęąß#¾ŽÅcܾ“ŽĻāōü2ŠwÖ {μķ#ųę7įŁgoe££ĄU­4¼j6l±ENß²e(·Š[}'”Ƽ%K}***X¹r%ŻŻŻ455ńĆžyóęaµZłąƒšūż$%%ÅW V­ZE$įłēŸæ¦Dß«Åårń“Ÿü„ż×ežüłčtŗa"Kl6ېU^w Į`?ü“'O’––ĘźÕ«),,¼ü7ŸĻĒ[o½…Ļ磼¼œ„K—ŽZi~4¾üå/øŻb±PPPp]ŖĻ«@uu5»vķböģŁ—¬ĀÆ¢r»rhåt›{Hj."ųżļĮį€ó {>•ü׍ø¹÷Įo²!w·D`‰¢ČņåĖ‘e™?żéO“¶¶ņē?’9ž\FFO<ńD<‘bćźÕ«‰D"¼üņĖńeū7—Ėŏücž~śięĶ›7Ldét:ŹŹŹnŗ]׃ĢĢĢQ=>7QÉĖĖćßžķßnČų999äääܐ±?L™2E­ ÆrG#kDv>~K¹Sæwų?ż)D"šžĻ˜ĒŌėERGÉļIHŌ¢Õ÷üX­©©z 5!p:?K+ ¤¤čÆĮ…3ŲVē²ģŻ ~8l³æøYŁč®4A@4 hœ#;D‹„0ŠIŃŖAJŅ”D‡ž›Ø/č(č¤D‰čU¶üŃ$hµ7ŽĖzˊÕH’ÄĆ?LEE»vķ¢¦¦EQp8<üšĆƖ©C,”±zõjA`óKFokÖ¬!;;›ĀĀĀ;6TØ¢¢¢¢#`5Rł÷÷°ų™Ķh#ōšūłĻ”æžy.Eøė®DjN.ńy­$`0 ĻSüī“ł|ć[¹#¦ĮHˆ‘’R ;*g_“Ą2›Ę–')üūæø½ė| ĀhˆFūŠd¬÷\Ø[Њ# œ”ļå’üO#Ÿ—x˜²Ģs`šn»ś0” ŽUd^·“  Œ7Žqćʍł§ÓÉ7¾ń ¾ńoÜ@ĖTTT>}Ø«?Ķōe&²żkKøē÷ļ” E†ļšÜsPSk×BŹčmŁb«pö+ū> ā˜="Zƒ•Ą„łœ~y ßł†ŗŗwÕ¬[GźĪxž|’HŹtĀįB”^‚Į ņM-Vuå †Į”óżdsrrȔ$ņ¾ūݘ[ė"¦N„oéŅaŪ5 …B:Y‹5jĘIĄö‡ļˆ÷@E“Z-6[¬ČØŻnGÆ×¹Ąč„P–ŠŠŠ  ·$cO+§§ń#†•’VłŌ ÕY°&”5Ś ™8³f ¹?ų¶ŹŹ÷{z(ž—!qĮ>śÜēh/.¾%µÆAŠh4˜L&’­Vfžėæ"µ·ŪO6ižį‡Uµ(ƒ¤¤$dYĘn·ć÷ū‡ō¾ģ-k4q88NL&ÓuéH” ,@5$fM"čéd ·įV›£r 5:¬É…X“‹·ˆ¢f3õæü%’żß¤¬Y3jŲ+iēN–ķŻK÷ē?OŪO±Łn¦éW(Šč€¼ļ~Ó”C#īÓö’H0käī׃Ėįp Õjq:±B·¹÷źB4 ’$a00™Lń|4Ճ„¢¢¢rtf’ņg#ˆžžFPīœIBåŚ“¬©„$dT Ń^Ō9B9÷O’„gęLr~ō#“#xy„p˜äW^!ićFüO>IšļžÅxū6¼,_ż*ŚķŪG|¾ÉŗFHl‡“ĄŪĒét:¢Ńč%®E1.“.ō^]‹ČR–ŠŠŠŹmi$åĻEgNĘÕ^C$č¹Õ&©ÜP 'Žō‰˜¹čŒöQ÷ōĢ™ĆÉ?’™Œ_žēڵ£z³„ž~LO?é7æAžś×‰~ćą¹čę-„§iÕ*„Ŗµų‹ŠhśŃFmx  I’$ EQnIĻąkåĀŅ ź*B•„Žœ„3ŪŠŃ–Jp ‹€·—°·—ß…,ßł5*£#Jzō¦t¦DōęD ÖTŒötDńņSbŌl¦ł’o\‹‘żć£ķź}ēīnÄ’ńæž žxå;߁ÜÜėx&×@e%Ā—æ MM#>NIįģ/‰¢į Š|g$戴ŽØ‘Šhh“F$Qséö7#į^°€š·ß&uĶ’_z ńRżq½^ųõÆ~ū[X¶ ¾ö5X¾®C"õćõĀæųÅØ½#N'µų”ĢĢ1 łIU7U`©ØØØŒBLhéŃhõčHøÕęØÜfČf3mßųŻ>Jś3ϐøqćč ¢QŲø1öČĢ„æ’{xüqČĖ»ńĘF£šĀ šo’ēĪŗ[8)‰ŗgŸ%x3lś„£¶ŹQQQQQQ¹Ā©©4żčGœzåÜóę]2g)Nk+üčGPPóēĒI_*ÜxµtuĮO ……šÕÆ^R\ł‹‹9żŅK® ?°ŹčØ,•뀿“”śßžćéÓ¤¼šŽ÷ßGø\=(E‰õ8ܵ ¾óX²>’yxšAHJŗr#¢Q8yŽ6l€ŹJC].×=÷Šų£!›ĶWžš*#¢ ,•ėˆæø˜Ę’üOھłMR^z‰ÄwŽA /`$›6Å Ģ +WĀCAQŃŠ}hlŒ‰©Ó§ccĒbŸo̶Źf3­ß’>=?|…g©r9T„¢¢¢¢¢reeŃņŌS“}ó›$nŲ€óĶ7144ŒķąhvīŒ=žłŸ”¬ ²²b!¾¶6čķ½fū\‹Ńśżļ„ˆØŹµ” ,•ė€ ’śüóhśū‘Ün4.’Ė’[ō^CŸĖššŲć:૨ąÜw¾ĆĄŌ©×e<•‘Q–ŠŠŠŠŠŹu@ŃjIyžy„Ū°’¹"Iøī¹‡®U«šŖĀꦠ ,•ė€"ŠD’“ŃvtÜjSb ųfĶ¢wŽ<\wßMųj’ęU®µLƒŠŠŠŠŠŹu"œ’r«Mˆ1ŲlDĘ\‘]åś”z°TTTTTT®””L×q<Ł`@6™¢Q4.×+õ÷“ųī»$¾ū.ŠN‡gölśļ¹÷]w±ŽsQåś  ,•ėD8%…ØÅBŌį b·µŪ‰Ųl±æm6dƒØĶ@ŌjAņƬÓ!›LD-d‹EŒšYĘtō(öķŪ±oߎ¾±ńŠģB!l••Ų*+Q4¦MƵd ż÷ݧŠ­„L¾ŅƒÖÆ_’ŁŁŁß{TTTTTTT.ƒ¾±{e%¶;1WU]¾ é((Z-ī¹sé[¾÷¢EČŗ+ļĖØļ,]ŗōß/ܦz°TTTTTTī0‚¹¹t>ö=†ĘćĮŗ{7ö;±īŚ…Ōß?ęq„pūŽŲwģ j±Šļ½ō<ś(¾ņņhż§U`©ąółhmm„««‹üü|ŅÓÓĒ|l$”µµ•¶¶6RSSÉĻĻæ–ŽzdYĘårQWW‡¢(L›6 Q¼õėEZZZØ««###ƒ¢‹«>«Üvčļļ'++‹¬«,ö …Ø­­„ÆÆŅŅRœNēu¶ōĪ#‰ŠŽŽĪٳgÉĶĶ%33FsUcɲLoo/µµµŲķvņóó1 ףāk#jµŅæt)żK—‚,c:u ŪŽŲ*+1<kĒ348ß~ēŪoć++£ēŃGé{ą5Až*ŃiWzоš…Yv»}Ź °Gå ( Ńh”ŗŗ:jjjhii”„„…śśzZ[[EQŁ·oÆæž:‰‰‰ …Ų·oįp«Õ:Ŗˆ‡Ć9r„W_}•h4ŹäɗŽ:»śdjk"ž(Lw‡ŒF«@8 'F8V”µ)ęī¶Ł„±4N½‰(ŠBGGo½õ;vģ`éŅ„HŅ­æW©­­åē?’9Š¢0cƌ[mŽŹešł|ģŚµ‹uėÖa2™(--½Ŗq‚Į ;vģ`͚5(ŌZ[[9qāƒ“éz¦`Ē^ß¾}D"‘K^'n&įp˜“'Oņ‡?ü³ŁLqqńU’FE”½½^x––ʏłvī×'„““˜>žG„÷Į „§£ńūŃuvŽYli»»±WV’ōę›hūśäē#[,7Ųų;Æ×{źå—_Ž~į¶[’KP¹įȲĢ|ĄŪoæM}}=mmm“µµŃŌŌĞ={8pą “?.šī»ļrüųqĀ—hŖ×ė7nܘAh؋ņ?æš²’Ć žŲ>QhmŽņ§ē¼üå­—‚rėõE"\.~æ’ŠŽE‘“““«žÆ'½½½ų|>EaźŌ©$&&^—qE”µµõšĘƒōöö½ŹÜO:6› &ąp8®i“ÉÄ“iÓŠjµ£ŽŒœ={–M›6ŃÖÖvMÆ5ƒ×‰šš"‘Č%÷•eĒƒĒć¹īv\ˆ^Æ§ØØˆäääk¾AE‘ĀĀB²³³/¹_OO@ˆż~"‘·A=¬PF]_śg^xźĶ›iłĮšĢœOžæ·›ä—^büŹ•d’ųĒčZZn°ÅŸTõ)ąčŃ£<÷Üsää䚣Ļ~–G}”Gy„Õ«W³pįBt£$5 –/_NEEZ­öŗŁ“’&2i†J'j),Ń F“ČŒy:œ2²5L˜¢E#Ż8ļUkk+ ««ėšĘ¹U6EQŲ“i­­­(ܕ^{ټyó5qģŲ1:ŸtT†#××C;ŚX,[¶ģ’”’žž~N:uÅÆi4Y¾|9åå嗽Nō÷÷³oß>ššš®ųu®–›ńūT…µk×ŅŻŻ Ä„ä©S§Ųµk× ķ+!œ”D÷ē>GŻžĄ‰Ķ›i}ņIüc¼QĀaœk×RöšĆä<ż4ś±öTüsėć*7œ7ŽxAxšĮ‡„“Z-%%%£ę~455qöģY$I"##I’ččč`Ļž=hµZĀį0²,sļ½÷9N–eźėė9vģŁŁŁ”••]“K½æWęä±®~A€üqYyjkĀT3i†Ž®™HXaŽ=zBA…=;Bh4 *””k),śUļķķeėÖ­TUU1qāDī¾ūnņóóinn¦ŗŗšh4J$”°° &Œšæ100ĄīŻ»illDf̘Aii)‘H„ƒŅŁŁ‰¢(‚Ą¼yóˆF£lŻŗ·ŪͬY³˜8q"n·›ąv»Yøp!’$qģŲ1ŗ»»E‘¼¼H$Āŗuė…Bōöörß}÷a³Łā“,Ėttt°oß>$IBQJKK)**ĀćńpāÄ ŚŪŪ‘e9~žĶĶĶģŚµ‹ŠŠ hjj"''‡£GR\\̬Y³0›ĶŌŌŌpęĢJJJ())‰Ÿs$!!! & ÕjŁæ?żżżröģYrrr˜2eJü³–e™öövöļßYóóó)))”¾¾ž½{÷āt:ńx<ø\.œN'+W®Äl6‰DØ««ćčŃ£čõz:;;éæDBņhooGEX°`iii#ŠæßOUUµµµD£QJJJØØØ ŅŌŌDmm-ééé$Æę}ęĢNž<‰V«„§§‡sēαhŃ¢!cʲLSS~ų!Š¢`4 99™éÓ§“’’Bcc# čt:222Šh4ttt°{÷nt:įpEQ˜7o}ōėׯ§““Æ×‹ÉdāčŃ£Œ?ž‰'R__Ļž={(--„¤¤„C‡Q]]ĶņåĖ9|ų0ƒ{ļ½—ŗŗ:Ž?ŽF£Įh42mŚ“Q½·§OŸęwŽĮėõ’’’Āüłó±Z­lŪ¶źźjJKK™5k’$±’~zzz˜7oވb“ææŸ;wār¹$‰»ļ¾›ŌŌT8ĄŚµkE‘qćʑžžĪkƽF__ deeqāÄ z{{±Łlx<ŒF#Ó§O'??’–„UĆIIt=ö]=†”®ŽÄI\æ©§ē’Ē Ń(‰ļ¾‹üxŗņņnޱw(ŖėŽ,ĖģŻ»—āāāEŽŻn'##cÄc •••:tˆP(„×ėåžēhmmÅn·c±XØÆÆĒuQń»p8Lmm-ēĪĆh4^ÓÅĆė‘łhWˆcĆX­½Ż2Ūß ŅŅÅļ‡m›BTķ ō+Ō)¬{ÕOc]«M$‚7_ōŃÓ54ÖØŃh…Bų|>, ƒ®®.Ö­[Ggg'6› NĒ+Æ¼Ā©S§†xˆ.DQ4 &“‰cĒŽńŽ{ļŃßß(Š‚Ćįąƒ>ąĄȲLgg'kÖ¬!  ŅöövĀį0{÷īe×®]X­Vśūūٲe §OŸņŗ‚ Ė2n·“É„ÕjE„xhĀb± I|š;vģ@Qjkkټy3˜L&>üšCöģŁ3,DŖÕjéźźB’$Z­–öövžųĒ?Ɵ?|ų0[¶l”­­]»vŃÖֆĆį §§‡žž~ōz=}}}ˆ¢ˆĶf&PƒĮ 7n¤½½»ŻŽ,Ė444‡Łæ?»vķB§Ó łĖ_žĀ™3gŠétüõÆeĖ–-øŻnŖŖŖ0™L¼żöŪģŪ·&ę õz½ģßæƒĮ@]]›7oŽOh»vķb÷īŻ„B!š››Yæ~=§NĀćńpśōiä zČžņ—æÄmŒF£466‡Ł·oß7nÜHmm-z½žM›6Q]]ŁlĘl6óĘo°wļ^E‰ön·‡ĆÅb¹dņõ p·Ūķˆ‡}»ŗŗxé„—ƒŲl6śśśXæ~=¹¹¹ĆĘ ‡Ć>|˜ƒb·ŪŃétTVV²}ūv<ƒķŪ·säȑųuā÷æ’=mmmŲķvĢf3õõõøŻn &R, f³9ž‡vāÄ ąćkĪŃ£G ‡Ć šśėÆsüųqE‰{œ×¬Yƒ¢(čõzŽ=ŹęĶ›G EK’·ćż÷ßgćʍ„B!L&ƾś*'Nœ@£Ń ( ===ŌÖÖŽź‰‹F£ ¬V+;wīdėÖ­ųż~E‰Ÿ—ÕjE£ŃŠÓӃ^ÆĒf³”ÕjiiiaėÖ­(Š‚ŻnēäɓlŲ°sēĪśłß,……œūǤśÆ„įg?Ć3k\ĀóŹČ ū‘Gn¢…w&ŖėŽßļĒķv_ÕŹ¢¬¬,l6[\ UUU±sēNžžy²³³ ‡Ć¤¤¤`4ńžļF9sę >ŸåĖ—“““sIµoGˆīöhü·ģ÷AoW”œ‚Ų¤ÓŁ.sģ`˜q„³ļŅį8įĶ}“4JII)f.Ō‘S(įv)lZą’ĢFéD‰Īv‰æ¼åēŌńsļžŲd·ŪIMM%99™É“'“••ŦM›hnnfńāŔ——‡Ł¶m7n¤¤¤dĉŠd21eŹ”ųśįƇééé!//9sę`6›1™LüõÆ„¶¶–¹sēņŠCńöŪoÓŽŽŽ H’„Ēćį‘G‰/,ČĪĪęī»ļęŌ©S¼ųā‹ŌŌŌP^^÷\ z¶t:&L`Ś“ińpSBBóēϧ¼¼œöövŖ««yšĮ9räŻŻŻ¬ZµŠ¤¤$N:ő#G˜4iŅ/frr2N§Y–™?>‘H„ 6ŠŅŅĀSO=Ä&ɽ{÷’ššJ]]'Nd޼y”””`4±ŁlX­V²²²˜3g–‹’cĆį0UUUĢ;—łóēćółp»ŻtuuqąĄl6÷Üs}}}8p€źźjzč”ųŲ³fĶ"''‡‰'²hŃ"jkk1 (Š‚(Š”••‘™™É»ļ¾Kgg'Ÿ’üēINNęĢ™3=z”)S¦––†N§£°°‚‚śśś†|ʃ6Ī›7łóēćõzńxxņÉ'IJJāĉ9rdŌßĒģŁ³IHHĄd2QUUÅŃ£GYµjՈūźõzJKK™={6MMM¼šĀ ģŪ·ŠŠ RSS‡xÆOœ8Amm-_ūŚ×ČĢĢ$55•?žńøŻnRSSćū‰¢ˆĆį 55Y–Y¼x1Į`:Ääɓ)))ā¼N¼ųā‹dee …HMM%!!œœģv;åå唗—ÓŠŠ€ż|‘KQć׈ łÜÜ\$I";;›ĀĀBrssŁæ? <õŌS‚€Ē㔲²’Å‹“2B›šÜÜ\-Z„(ŠøŻnÖÆ_Ļ<Ą¬Y³˜Ÿ¶¶6Ł“i’$qīÜ9,˘“½ q¹\„B!RRR˜5kVüœ iiiĆŗ/ž  >ūŁĻ’™™IUUĻ>ūģem¼T Y–ńz½ †1}–ÕÕÕ¬]»–yóęQPPĄ™3gƜ>ų=ķę*//ŸĻGKK N§“#GސššE—c0„6RX.Ē…Ū -^'®Q …B$&&yļ%IÓ÷ųb3ž|žyęvīÜÉųńććaŪ±p­Éóƒ«>ÆD Ż "‰‰“’Ć?нjÉ/½„wźŌ1Æ@ü“£ ¬O8¢(²lŁ2žņ—æŠÕÕErrņēikkcÖ¬Y—+%%…žžB”Ј…ö ………Ģš5‹×_;w’}MEł“:½AĄd((śuõø‡O6‡p~Eāšż/‡ŻnēܹsCJRōööŽ.ø§OŸ& RPP@nn.‹eČ>qāD Y·n‚ °bÅ vŃ5›Ķ †ėZ,T§Óa6›’’öī5&Žó~ōųwwgwg—–;0wl|058¾äb§•£øMRµ®”*jŅŖēEßżŪ*/«žÕž¾©ŚźØŖŖōE„6§Jš&§±r±ccƒ©m,;`ĢÅę¶Ų ‹YŲŪģīyĮ™)`l“x}IśūH–’efö7Ļ3óĢožyęYfggÉÉÉłĢū”ššŹąą „„„+£…B!²³³łę7æÉŽ;xć7čīīę¬c褤$^xį¶nŻŹ‘#G8{ö,EEEFĻXYYŁŗ«ÕŹ /¼Ą’ųGJJJØ®®Ęf³a³ŁŒ±hŁŁŁ·ūė±<ĘƇsīÜ9ć±Õg‰–ĪÅääd†††ŒDśNśūūYXX øø˜’’Ün7£ė|E>0??Orr2.—‹«.oŚ“‰Ēœ>ų€sēα°°ĄĻžóu'~æ»Ż¾ę¹““c“·{Cyµõö°ėćсĄ-ĒāzĢĢĢąp8ŒżLIIa×®]9r„X,ʎ;Ų[Įz[RRŅēžõAŅŅŅ’ÉOv_(’†žųŽ÷¾Ē† ųӟž“¢K?‰põźUśūū×ÕØģŁ³‡h4Źo¼qĖ|/°tw˜’’BMM Ū·o7ʌ܋Œ,3ٹfŗŚ#LŒ.Ż-G£p»›¾’r…Ü3Ž ʼnǗ–]kü«Åb!‰ū²uėVø~ż:ŃhŸĻGgg'{÷īżĢõ- óóóƒAęęęšūż+īTķv;ßłĪw8uźåååFχŪķ¦ØØˆ .0ü’Ģ5®ŁS`³Ł0™LĢĶĶŻõ•œœLYY™ńVœ¦iĘ“kŻAŪl6ćķ6EQŲ¹s'œ8q‚X,F,#244ą 0›Ķ‘žžŽĶf3£ųżž5cƒ|šĮØŖJAAłłł˜L& ٰaōööŽ1FÉdāÉ'ŸÄįppžüyvķŚ€Ė墬¬ŒÉÉÉuķój@€?üpEŒĄēŠQ/Ē•‡! IDAT;vąõzAļzĻāķ–ŸŸŸ'  …øqćĘŗ{;FFF˜˜˜ ŖŖjĶy¶¦““”üü|ŖŖŖV́w' x< Ö|Af÷īŻhš¶f;”戔)PU›ĶĘõė×ńł|ܼyÓx|»½®'''9vģ؊cńnB”gΜįÉ'Ÿ4zM&_’ś×ąŅ„KTVV®« VÓÉŁŁYć3EQŒż«E£QHMM„°°P(Äļ’{Žxć5»Š/&™Éż?€Ćį`ūöķLOOóńĒoi544Š××g4ĀĶĶĶ“¶¶ …ČŹŹ¢««‹¦¦&|>ééélÜø‘ŖŖ*źėėyė­·hnn6^żīļļ§©© EQØ®®fqq‘ĘĘFFFF(**ZŃ{0|E£ńpˆĖ—Žśs„šy¬ĄĢĀ|œƒ’7@Gk˜ĄBg’™Š*…ō,3żŻr¦1ĢÄh””4 }]Z[ĀÄ4ČyĢBŠŪ„b5Q^„p¶)ĢGļ8×ft$Ji„‚źX™D†ĆaŚŪŪinn`Ė–-$%%ŃŲŲČéÓ§9qā555|ūŪß^ńX'‹1>>ĪG}ÄČČX,Ž;F?łłł”••qłņe:ħŸ~Źüü<^ƗŅŅRrrr0›ĶräČ~śÓŸwŌŖŖ’••E?ļ½÷'Nœ`xx˜ĢĢĢ[^C·Łl\½z•ƇÓ';vŒH$BII ÓÓÓ>|˜ŁŁY*++Ł“iŃh”ƒrčŠ!Z[[q:äęęŽņčÄb±pčŠ!Īž=‹Ćį ®®»ŻĪ{ļ½Ē”C‡hkk#“‘‘ASSG„„„“ÉÄŽ½{)(( ŠŠŠ@kk+999dgg‰j8ęȑ#Ō××ÓŽŽĪ7xńÅ)++#33Ә*¢””Ė—/óŲcŃ××ĒńćĒ ƒdggåØi dggóŌSOĻōōtb±ŲŠ}VUEQhnn¦»»“ÉDyył-īō;ʅ ˜™™Yćčč(0bĢĻĻĒćńŠŠŠ@(bćʍ|śé§>|˜¹¹9jjjØØØ rąĄŽ=JWW“““D"JKKß°” ^ŗt‰?üĪĪN¬V+½½½äęę)u‘H„O?ż”Ė—/sņäI.\ø@]]Ļ=÷333466rńāE"‘EEEʛ§OŸęüłóœ;wŽćĒ366ĘÓO?½bŪ‹‹‹tttŠŃŃĮÕ«W©ÆÆĒårńā‹/’••Å©S§hll4¦¤Šµ#GŽšöŪoÓÜÜĢ•+W(--EUU©ÆÆēęĶ›Ęx½††Ž?Īõė×drr’ 6pžüyŚŪŪ±Ūķąr¹p»Ż8N8ĄĮƒimm%RVVvĖāōō4===“““pųša222ųž÷ææb¼]rr²‘˜×Ö®}Yėė룾¾žėׯS\\Œßļ§±±‘””!JJJŒGø}ōƒƒƒlß¾Ż8×zzzHIIaaaĘĘF®_æĪɓ'¹~ż:ßųĘ7Ø©©AÓ4:D<§¶¶6į³ķ‹ūo­™ÜMĄ×d üIaaį’LT`āžŅ{7B”‘HÄhXōĻķv;Š¢ ‰D"X,ģv;±XŒ`0ˆÉdBUU¬V«1Ž$b6›QUUŃ4`0hLY i@“É„Óé\qjqB”8‘0X,`SMX­Kæą ĉD–ŽVUVŪRT0GӖ>W°ŁMD5ć(ŹŅ²f‹>}AœEœhLę„åU‡Éē„ÓcŒÅbŲķvl6š¦‡±+V«õ– o<'‹±øøH,Ćįp`±Xƒhš†ŖŖ˜ĶfB”1xU_Ēįpc/āń87oŽ\ńó"śrz]čɃ^G«éƒ«õ:[\\Äl6ćt:‰ĒćĘ+äN§sEž¶^Æ«/Lš¦į÷ūŗ·Łl„Ćįė.?n¢ŃØ1īGUUc } ˆåū KIj X±ž¾=}’õ1q‹UU2×÷ułöāń8”PȘ«I‹ÅÖÜg½¾"‘ˆńHrõ¤Ÿw‹1u“VŒ‡ĆXžż(Hļ‘ZN_~ł£¢åßa6›śs8·ŒiŅ—Åb+Īk›ĶF,# ‡ćŁėõņöŪoóŹ+Æoķµµµń»ßżŽ·ß~{Åx¦©©)Ž|óMĀį0?žń‰ÅbF¼&“É8.īÖNčõ¢ļ“^īśy؟ozøž·P(„Ķf3¦|‰ĒćD"c½^ōŻåē©~źē•Ēņŗƒ¼žśė¼üņĖ·}›OÓ4ćō8ōņ֏ķÅÅEĀį0Š¢sžéĒ‚¢(œ8q‚śśz^{ķ5rrrŒ±izū°øøø4¼į§¶ĒäääGūöķū_Ė?“1X’ō†DUÕ;އZė®iuCn±XŒyõēĖ—ÕĒĄ¬ Äłļ’ŗÉĄåŪ’ōĪżPŗQį÷’ĒĶņvKQćĶ?Żķā^Næ ®^wõ ģ»Ķj­'YkŪė˜uõr«c_ƒŻn_׀c}¬õ¬{»XļT–f³ł¶ėé āZĒćķ¶§_Ü׌Ög{½1Žiæļō’w;×óŸeYż¦gyy¾’žū”——“““c$>[¶lAÓ“5ĖJ3¶Ö­µŹ÷vķ¬}ĢŽ®^m6Ū-ǁžFązĪÓ»•³ž¬išvŪłįßĆ–[ėü_¾oĖcŌ“F=Į_½®ž&§ųr‘K`aa!įß½yóęu'n‹›ĶFWW---„B”G®ĮHæßĻųųųš³ŁlÜøqƒ?ü@ @zz:YYY8N:Åžšśśśpĉ„’@yGGļ¼ómmmĖÄb1<Ȼヒ×ėEUUb±ćććtvv‹ÅhĢŖŖråŹšššČČČ 33ӈóÆż+3334¦ūįęĶ›?~œÓ§O––fü»vķƒƒƒX,6oŽüĄĪĻłły®]»†Ķf###ƒ¹¹9š››™œœ$##ƒŒŒ <óóóŸyŪsssĘåĘb1&‰$z7īŁŠŠ'Oždnn·ŪMFFÓÓÓ\½zõ‘wppP(“®å§§§ioo§²²’]»v‘ŸŸŸ#ü7“É„Ó餳³“ĘĘFRSSÉČČ`dd„æżķoĘĶĘĢĢ ü1­­­8NÜn7iiiŽ9Ā… Œżmoo§©© UUIKK#33“įįa†††ƒōōōĒļüü<'OždzzšŒŒ œN'ćććĢĪĪ>°2ų2y`™ƒŖŖlŲ°ģģl¬V+»vķ¢  €X,ĘŲŲ’üē?y’ż÷),,dēĪ÷„Ń\ĻRŪķv#Īh4Jqq1III åaÓ4žž<ƼņŹ-ĻĪĪ¦ØØČøsڶmf³™@ @EEæłĶoųĖ_žĀÆ~õ«/lł86lŲ@ee%ƒƒƒtuu±}ūöw‰ĒH¢ Œc¶¦¦†‚‚‚ūŅćz'łłłäęęār¹Ø­­„¤¤XŗųgggóśėÆ£Ŗ*?śŃh\‰‹ÅhooēģŁ³<żōÓģŁ³Ē8Ęāń8YYY„ĮWU•ŹŹJ***HNNĘl6ÓŁŁIee%»wļ6b’¬ēĆÜÜmmm$%%‘‘‘ĶfćŁgŸÅf³}īŽČ©©)ęęęČĻĻOxX__×®]c’žżTUU——‡Ļē[Wū =żōÓD£Qć©ÉŻ,..255…Ćį --ķ>Gw«²²2222˜ššā©§žĀjµ²aĆ~ö³ŸńÉ'ŸĶŋłä“OŲæ?O<ń„Ń[åółx÷Żw9vģŁŁŁ”––ņÆż ‹ÅĀŽ;p¹\Ę›ĶĘÖ­[yę™g°Z­“µµ±qćFvļŽM  ÆÆļKÓ+ž =ō®³ŁLAA/½ōēĪćĉ”””ŠŌŌÄåĖ—łõÆĶĀĀ'Nœ §§‡—_~™h4Ź”C‡ˆD"$''ćõzÉĪΦ¶¶ŸĻĒåĖ—‰F£|ė[ßbóęĶĘĮׯŻĶšš0³³³ńā‹/’‘‘q×oÜøĮŃ£G%55•±±1¢Ń({÷īeļŽ½Äćq9~ü8“““˜Ķfb±[·nÅétŅŠŠ@AA±ī3Ļ<ƒŻnēōéÓ,.. łźWæŹ¦M›8zō(ĶĶĶl޼Æ×K `Ó¦MTUUŃŁŁ‰×넸ø˜ēž{Ž‚‚4M£­­žž~n·›ēž{§ÓÉ{ļ½Ggg'Ū·o§»»›x<ĪŽ;xžłēąż÷ßgll §ÓImmķšĒVs8ŌÖÖ²’~žüē?ć_ęęę8sę ccc˜ĶfŹŹŹØ««ćŅ„Kœ>ĪČČFļVcc#Ļ<óŒŃc¤Ļhnnfzzšüü|B”'Nœ  RZZŹąą ¹¹¹ĢĶĶa±XČĢĢÄćń°{÷nJKK9uź×®]Ćn·ĒQvv6‡Ó§O“™™IJJ 333ģܹsEĀw;ÉÉÉģŽ½›3gĪŠŲŲČžżūFśĢ™3ųż~E”ŗŗšāābΟ?Ooo/N§ŸĻG(¢¦¦†¬¬,śśśšz½äęęņƒü»ŻŽ¦iōööŅÖֆÕjEQ6mŚDMMMĀ/Ŗ³³³tttąp8Ø©©Y‘°˜L&ŹŹŹkŽ„…Ćazzzččč@Q¬V+ÕÕÕTUUĒéźźb``€p8L,cß¾}F]544 ióóóŌÕÕńųćÆŲvJJ •••w¼ŲŌÕÕįółhjj"‰ łŚ×¾Fii)š¦qźŌ)¼^/&“ —ĖŞ={hoo§¾¾žŌŌT4MĆårŃÖÖFNN{öģazzšcĒŽa³ŁŠ4‰‰ ’’’xé„—(..&‹1::JKK &“ ŸĻG  ®®n]ēōg‡grr’ņņr¬V+………ääämķģģ,‡Ęl6 …Ų¶m“¶¶ŅÓÓCyy9³³³Äćqģv;”••±gĻ\.ttt°{÷n6nÜH{{;½½½(Š‚¢(<’üó,..rōčQB”?ž8}}}TUUQWWgÄ:66FKK Ńh”}ūöĒ9tč7oŽ$==įįa¬V+Ļ>ū,uuuLLLŠŅŅĀŲŲõõõŒ³mŪ6ęęęhmme~~žx***Œķ(ŠB0DUU233 ƒų|>***p»Ż“¶¶ār¹ƒF#¶V :ĒcÄ©ŸßļGUUü~?°Ō£QXXøb߂Į ±ĢĢL·Ūm̗—‡¢(Œ£iĮ`’’Ün7CCCŒŽŽ’™™‰ßļGÓ4Ün7n·›ééiü~?n·›ĀĀB£ÜĒĒĒńł|hš†ŖŖ¢Ŗ*½½½LOO“››Ėōō“SEE>ŸĻ(C·ŪMVV–QV:ŸĻ‡ĒćYQŽĖ’ÖŪŪKyy9YYYhš†×ė5.ä.—‹¼¼<¦¦¦EQ4M3Ź^Éēó”( UUUĘžų|>£lōméå¼z=­‡¦iLMMĒMAAĮбe‡¼¼<ŗ»»)..&//`0hģė–-[Œ}ƒøŻn|>.— MӀ„FJß¶~C —`Ōåģģ,£££ØŖj”W^^Ž-ē—×ėÅēóQRRrĖ߆††˜žžfĖ–-ʱŖ—%,ÕZZš±åõ’™™‰ŖŖLOOēTUU•ēŌŌĘEN?nÖKßęz–óz½(ŠB^^Ž]×imm„øøŲˆeuœś>ėÓĻųwŁėß©nnī]÷MÆÆÕĖ./s½ ŃėIÆ{EQ(,,djjjÅł©Ŗ*Ę9¤iĒØ+½+**Œķ.ÜÆ[ėŁ‡åe¾Žsf||œ‰‰ rssÉĖĖ»ķö†††€„s,77—““4£­Z~~(Šb|VXXˆ¢(FÆXO_¾¤¤dÅwčķIffęm뢤¤dÅ5hu[ž——‡ßļ7źHUUÜn·qĪėķ`ŌĶgyŅ¢·gė”_ļjkku»»»x†††Œkåj~æĒcŌĒćĮļ÷Æ8^nēvĒōzƒĮuē_6SSSį¾¾¾cL>W‚%„B!nļŃ{`.„Bń' –B!D‚I‚%„B‘`’` !„B$˜$XB!„ & –B!D‚I‚%„B‘`’` !„B$˜$XB!„ & –B!D‚I‚%„B‘`’` !„B$˜$XB!„ ö’¢¤DωŁvdIEND®B`‚libwebsockets-4.3.5/include/000077500000000000000000000000001476025525100160155ustar00rootroot00000000000000libwebsockets-4.3.5/include/libwebsockets.h000066400000000000000000000422401476025525100210300ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /** @file */ #ifndef LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C #define LIBWEBSOCKET_H_3060898B846849FF9F88F5DB59B5950C #ifdef __cplusplus #include #include extern "C" { #else #include #endif #include #include #include "lws_config.h" /* place for one-shot opaque forward references */ typedef struct lws_context * lws_ctx_t; struct lws_sequencer; struct lws_dsh; /* * CARE: everything using cmake defines needs to be below here */ #define LWS_US_PER_SEC ((lws_usec_t)1000000) #define LWS_MS_PER_SEC ((lws_usec_t)1000) #define LWS_US_PER_MS ((lws_usec_t)1000) #define LWS_NS_PER_US ((lws_usec_t)1000) #define LWS_KI (1024) #define LWS_MI (LWS_KI * 1024) #define LWS_GI (LWS_MI * 1024) #define LWS_TI ((uint64_t)LWS_GI * 1024) #define LWS_PI ((uint64_t)LWS_TI * 1024) #define LWS_US_TO_MS(x) ((x + (LWS_US_PER_MS / 2)) / LWS_US_PER_MS) #if defined(LWS_HAS_INTPTR_T) #include #define lws_intptr_t intptr_t #else typedef unsigned long long lws_intptr_t; #endif #if defined(WIN32) || defined(_WIN32) #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #include #include #include #include #include #ifndef _WIN32_WCE #include #else #define _O_RDONLY 0x0000 #define O_RDONLY _O_RDONLY #endif typedef unsigned int uid_t; typedef unsigned int gid_t; typedef unsigned short sa_family_t; #if !defined(LWS_HAVE_SUSECONDS_T) typedef unsigned int useconds_t; typedef int suseconds_t; #endif #define LWS_INLINE __inline #define LWS_VISIBLE #define LWS_WARN_UNUSED_RESULT #define LWS_WARN_DEPRECATED #define LWS_FORMAT(string_index) #if !defined(LWS_EXTERN) && defined(LWS_BUILDING_SHARED) #ifdef LWS_DLL #ifdef LWS_INTERNAL #define LWS_EXTERN extern __declspec(dllexport) #else #define LWS_EXTERN extern __declspec(dllimport) #endif #endif #endif #if !defined(LWS_INTERNAL) && !defined(LWS_EXTERN) #define LWS_EXTERN #define LWS_VISIBLE #endif #if !defined(LWS_EXTERN) #define LWS_EXTERN #endif #if defined(__MINGW32__) #define LWS_INVALID_FILE -1 #else #define LWS_INVALID_FILE INVALID_HANDLE_VALUE #endif #define LWS_SOCK_INVALID (INVALID_SOCKET) #define LWS_O_RDONLY _O_RDONLY #define LWS_O_WRONLY _O_WRONLY #define LWS_O_CREAT _O_CREAT #define LWS_O_TRUNC _O_TRUNC #if (__STDC_VERSION__ < 199901L) && !defined(__func__) #define __func__ __FUNCTION__ #endif #else /* NOT WIN32 */ #include #if defined(LWS_HAVE_SYS_CAPABILITY_H) && defined(LWS_HAVE_LIBCAP) #include #endif #if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__QNX__) || defined(__OpenBSD__) #include #include #endif #define LWS_INLINE inline #define LWS_O_RDONLY O_RDONLY #define LWS_O_WRONLY O_WRONLY #define LWS_O_CREAT O_CREAT #define LWS_O_TRUNC O_TRUNC #if !defined(LWS_PLAT_OPTEE) && !defined(OPTEE_TA) && !defined(LWS_PLAT_FREERTOS) #include #include #define LWS_INVALID_FILE -1 #define LWS_SOCK_INVALID (-1) #else #define getdtablesize() (30) #if defined(LWS_PLAT_FREERTOS) #define LWS_INVALID_FILE NULL #define LWS_SOCK_INVALID (-1) #else #define LWS_INVALID_FILE NULL #define LWS_SOCK_INVALID (-1) #endif #endif #if defined(__FreeBSD__) #include #endif #if defined(__GNUC__) /* warn_unused_result attribute only supported by GCC 3.4 or later */ #if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) #define LWS_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) #else #define LWS_WARN_UNUSED_RESULT #endif #if defined(LWS_BUILDING_SHARED) /* this is only set when we're building lws itself shared */ #define LWS_VISIBLE __attribute__((visibility("default"))) #define LWS_EXTERN extern #else /* not shared */ #if defined(WIN32) || defined(_WIN32) || defined(__MINGW32__) #define LWS_VISIBLE #define LWS_EXTERN extern #else /* * If we explicitly say hidden here, symbols exist as T but * cannot be imported at link-time. */ #define LWS_VISIBLE #define LWS_EXTERN #endif #endif /* not shared */ #define LWS_WARN_DEPRECATED __attribute__ ((deprecated)) #define LWS_FORMAT(string_index) __attribute__ ((format(printf, string_index, string_index+1))) #else /* not GNUC */ #define LWS_VISIBLE #define LWS_WARN_UNUSED_RESULT #define LWS_WARN_DEPRECATED #define LWS_FORMAT(string_index) #if !defined(LWS_EXTERN) #define LWS_EXTERN extern #endif #endif #if defined(__ANDROID__) #include #include #endif #endif #ifdef _WIN32 #define random rand #else #if !defined(LWS_PLAT_OPTEE) #include #include #endif #endif #if defined(LWS_WITH_LIBUV_INTERNAL) #include #ifdef LWS_HAVE_UV_VERSION_H #include #endif #ifdef LWS_HAVE_NEW_UV_VERSION_H #include #endif #endif #if defined(LWS_WITH_TLS) #ifdef USE_WOLFSSL #ifdef USE_OLD_CYASSL #ifdef _WIN32 /* * Include user-controlled settings for windows from * /IDE/WIN/user_settings.h */ #include #include #else #include #endif #include #include #else #ifdef _WIN32 /* * Include user-controlled settings for windows from * /IDE/WIN/user_settings.h */ #include #include #else #include #endif #include #include #endif /* not USE_OLD_CYASSL */ #else #if defined(LWS_WITH_MBEDTLS) #if defined(LWS_PLAT_FREERTOS) /* this filepath is passed to us but without quotes or <> */ #if !defined(LWS_AMAZON_RTOS) /* AMAZON RTOS has its own setting via MTK_MBEDTLS_CONFIG_FILE */ #undef MBEDTLS_CONFIG_FILE #define MBEDTLS_CONFIG_FILE #endif #endif #if defined(LWS_WITH_TLS) #include #include #include #include #if !defined(MBEDTLS_PRIVATE) #define MBEDTLS_PRIVATE(_q) _q #endif #if (MBEDTLS_VERSION_MAJOR == 3) && (MBEDTLS_VERSION_MINOR == 0) #define MBEDTLS_PRIVATE_V30_ONLY(_q) MBEDTLS_PRIVATE(_q) #else #define MBEDTLS_PRIVATE_V30_ONLY(_q) _q #endif #endif #else #include #if !defined(LWS_WITH_MBEDTLS) #include #endif #endif #endif /* not USE_WOLFSSL */ #endif /* * Helpers for pthread mutex in user code... if lws is built for * multiple service threads, these resolve to pthread mutex * operations. In the case LWS_MAX_SMP is 1 (the default), they * are all NOPs and no pthread type or api is referenced. */ #if LWS_MAX_SMP > 1 #include #define lws_pthread_mutex(name) pthread_mutex_t name; static LWS_INLINE void lws_pthread_mutex_init(pthread_mutex_t *lock) { pthread_mutex_init(lock, NULL); } static LWS_INLINE void lws_pthread_mutex_destroy(pthread_mutex_t *lock) { pthread_mutex_destroy(lock); } static LWS_INLINE void lws_pthread_mutex_lock(pthread_mutex_t *lock) { pthread_mutex_lock(lock); } static LWS_INLINE void lws_pthread_mutex_unlock(pthread_mutex_t *lock) { pthread_mutex_unlock(lock); } #else #define lws_pthread_mutex(name) #define lws_pthread_mutex_init(_a) #define lws_pthread_mutex_destroy(_a) #define lws_pthread_mutex_lock(_a) #define lws_pthread_mutex_unlock(_a) #endif #define CONTEXT_PORT_NO_LISTEN -1 #define CONTEXT_PORT_NO_LISTEN_SERVER -2 #include #include #ifndef lws_container_of #define lws_container_of(P,T,M) ((T *)((char *)(P) - offsetof(T, M))) #endif #define LWS_ALIGN_TO(x, bou) x += ((bou) - ((x) % (bou))) % (bou) struct lws; /* api change list for user code to test against */ #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_ARG /* the struct lws_protocols has the id field present */ #define LWS_FEATURE_PROTOCOLS_HAS_ID_FIELD /* you can call lws_get_peer_write_allowance */ #define LWS_FEATURE_PROTOCOLS_HAS_PEER_WRITE_ALLOWANCE /* extra parameter introduced in 917f43ab821 */ #define LWS_FEATURE_SERVE_HTTP_FILE_HAS_OTHER_HEADERS_LEN /* File operations stuff exists */ #define LWS_FEATURE_FOPS #if defined(_WIN32) #if !defined(LWS_WIN32_HANDLE_TYPES) typedef SOCKET lws_sockfd_type; #if defined(__MINGW32__) typedef int lws_filefd_type; #else typedef HANDLE lws_filefd_type; #endif #endif #define lws_pollfd pollfd #define LWS_POLLHUP (POLLHUP) #define LWS_POLLIN (POLLRDNORM | POLLRDBAND) #define LWS_POLLOUT (POLLWRNORM) #else #if defined(LWS_PLAT_FREERTOS) #include #else typedef int lws_sockfd_type; typedef int lws_filefd_type; #endif #if defined(LWS_PLAT_OPTEE) #include struct timeval { time_t tv_sec; unsigned int tv_usec; }; #if defined(LWS_WITH_NETWORK) // #include #define lws_pollfd pollfd struct timezone; int gettimeofday(struct timeval *tv, struct timezone *tz); /* Internet address. */ struct in_addr { uint32_t s_addr; /* address in network byte order */ }; typedef unsigned short sa_family_t; typedef unsigned short in_port_t; typedef uint32_t socklen_t; #include #if !defined(TEE_SE_READER_NAME_MAX) struct addrinfo { int ai_flags; int ai_family; int ai_socktype; int ai_protocol; socklen_t ai_addrlen; struct sockaddr *ai_addr; char *ai_canonname; struct addrinfo *ai_next; }; #endif ssize_t recv(int sockfd, void *buf, size_t len, int flags); ssize_t send(int sockfd, const void *buf, size_t len, int flags); ssize_t read(int fd, void *buf, size_t count); int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen); int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen); int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); extern int errno; uint16_t ntohs(uint16_t netshort); uint16_t htons(uint16_t hostshort); int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); #define MSG_NOSIGNAL 0x4000 #define EAGAIN 11 #define EINTR 4 #define EWOULDBLOCK EAGAIN #define EADDRINUSE 98 #define INADDR_ANY 0 #define AF_INET 2 #define SHUT_WR 1 #define AF_UNSPEC 0 #define PF_UNSPEC 0 #define SOCK_STREAM 1 #define SOCK_DGRAM 2 # define AI_PASSIVE 0x0001 #define IPPROTO_UDP 17 #define SOL_SOCKET 1 #define SO_SNDBUF 7 #define EISCONN 106 #define EALREADY 114 #define EINPROGRESS 115 int shutdown(int sockfd, int how); int close(int fd); int atoi(const char *nptr); long long atoll(const char *nptr); int socket(int domain, int type, int protocol); int getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res); void freeaddrinfo(struct addrinfo *res); #if !defined(TEE_SE_READER_NAME_MAX) struct lws_pollfd { int fd; /* File descriptor to poll. */ short int events; /* Types of events poller cares about. */ short int revents; /* Types of events that actually occurred. */ }; #endif int poll(struct pollfd *fds, int nfds, int timeout); #define LWS_POLLHUP (0x18) #define LWS_POLLIN (1) #define LWS_POLLOUT (4) #else struct lws_pollfd; struct sockaddr_in; #endif #else #define lws_pollfd pollfd #define LWS_POLLHUP (POLLHUP | POLLERR) #define LWS_POLLIN (POLLIN) #define LWS_POLLOUT (POLLOUT) #endif #endif #if (defined(WIN32) || defined(_WIN32)) && !defined(__MINGW32__) /* ... */ #define ssize_t SSIZE_T #endif #if defined(WIN32) && defined(LWS_HAVE__STAT32I64) #include #include #endif #if defined(LWS_HAVE_STDINT_H) #include #else #if defined(WIN32) || defined(_WIN32) /* !!! >:-[ */ typedef __int64 int64_t; typedef unsigned __int64 uint64_t; typedef __int32 int32_t; typedef unsigned __int32 uint32_t; typedef __int16 int16_t; typedef unsigned __int16 uint16_t; typedef unsigned __int8 uint8_t; #else typedef unsigned int uint32_t; typedef unsigned short uint16_t; typedef unsigned char uint8_t; #endif #endif typedef int64_t lws_usec_t; typedef unsigned long long lws_filepos_t; typedef long long lws_fileofs_t; typedef uint32_t lws_fop_flags_t; #define lws_concat_temp(_t, _l) (_t + sizeof(_t) - _l) #define lws_concat_used(_t, _l) (sizeof(_t) - _l) /** struct lws_pollargs - argument structure for all external poll related calls * passed in via 'in' */ struct lws_pollargs { lws_sockfd_type fd; /**< applicable socket descriptor */ int events; /**< the new event mask */ int prev_events; /**< the previous event mask */ }; struct lws_extension; /* needed even with ws exts disabled for create context */ struct lws_token_limits; struct lws_protocols; struct lws_context; struct lws_tokens; struct lws_vhost; struct lws; #include #include #include #include #include #if defined(LWS_WITH_SYS_SMD) #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #if defined(LWS_WITH_CONMON) #include #endif #if defined(LWS_ROLE_MQTT) #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #if defined(LWS_WITH_FILE_OPS) #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if !defined(LWS_PLAT_FREERTOS) #include #include #endif #include #if defined(LWS_WITH_TLS) #include #if defined(LWS_WITH_MBEDTLS) #include #include #include #include #endif #include #include #include #include #include #include #include #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef __cplusplus } #endif #endif libwebsockets-4.3.5/include/libwebsockets.hxx000066400000000000000000000066751476025525100214240ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * C++ classes for Secure Streams */ #include #include #include #include #include #include #include "libwebsockets.h" class lss; /* * Exception subclass for lss-specific issues */ class lssException : public std::exception { private: std::string details; public: lssException(std::string _details) { details = _details; } ~lssException() throw() { } virtual const char *what() const throw() { return details.c_str(); } }; typedef struct lssbuf { uint8_t *buf; size_t len; } lssbuf_t; class lssAc { private: struct lwsac *ac; struct lwsac *iter; lssAc() { ac = NULL; } ~lssAc() { lwsac_free(&ac); } public: void append(lssbuf_t *lb); void start(bool atomic); int get(lssbuf_t *lb); }; /* * Fixed userdata priv used with ss creation... userdata lives in the lss * subclasses' members */ class lssPriv { public: struct lws_ss_handle *m_ss; void *m_plss; }; #define userobj_to_lss(uo) ((lss *)(((lssPriv *)userobj)->m_plss)) /* * The completion callback... it's called once, and state will be one of * * LWSSSCS_QOS_ACK_REMOTE: it completed OK * LWSSSCS_DESTROYING: we didn't complete * LWSSSCS_ALL_RETRIES_FAILED: " * LWSSSCS_QOS_NACK_REMOTE: " */ typedef int (*lsscomp_t)(lss *lss, lws_ss_constate_t state, void *arg); /* * Base class for Secure Stream objects */ class lss { public: lss(lws_ctx_t _ctx, std::string _uri, lsscomp_t _comp, bool _psh, lws_sscb_rx rx, lws_sscb_tx tx, lws_sscb_state state); virtual ~lss(); int call_completion(lws_ss_constate_t state); lsscomp_t comp; struct lws_ss_handle *m_ss; uint64_t rxlen; lws_usec_t us_start; private: lws_ctx_t ctx; char *uri; lws_ss_policy_t pol; bool comp_done; }; /* * Subclass of lss for atomic messages on heap */ class lssMsg : public lss { public: lssMsg(lws_ctx_t _ctx, lsscomp_t _comp, std::string _uri); virtual ~lssMsg(); }; /* * Subclass of lss for file transactions */ class lssFile : public lss { public: lssFile(lws_ctx_t _ctx, std::string _uri, std::string _path, lsscomp_t _comp, bool _psh); virtual ~lssFile(); lws_ss_state_return_t write(const uint8_t *buf, size_t len, int flags); std::string path; private: lws_filefd_type fd; bool push; }; libwebsockets-4.3.5/include/libwebsockets/000077500000000000000000000000001476025525100206555ustar00rootroot00000000000000libwebsockets-4.3.5/include/libwebsockets/abstract/000077500000000000000000000000001476025525100224605ustar00rootroot00000000000000libwebsockets-4.3.5/include/libwebsockets/abstract/abstract.h000066400000000000000000000112471476025525100244410ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /* * These are used to optionally pass an array of index = C string, binary array, * or ulong tokens to the abstract transport or protocol. For example if it's * raw socket transport, then the DNS address to connect to and the port are * passed using these when the client created and bound to the transport. */ typedef struct lws_token_map { union { const char *value; uint8_t *bvalue; unsigned long lvalue; } u; short name_index; /* 0 here indicates end of array */ short length_or_zero; } lws_token_map_t; /* * The indvidual protocols and transports define their own name_index-es which * are meaningful to them. Define index 0 globally as the end of an array of * them, and provide bases so user protocol and transport ones don't overlap. */ enum { LTMI_END_OF_ARRAY, LTMI_PROTOCOL_BASE = 2048, LTMI_TRANSPORT_BASE = 4096 }; struct lws_abs_transport; struct lws_abs_protocol; typedef struct lws_abs lws_abs_t; LWS_VISIBLE LWS_EXTERN const lws_token_map_t * lws_abs_get_token(const lws_token_map_t *token_map, short name_index); /* * the combination of a protocol, transport, and token maps for each */ typedef void lws_abs_transport_inst_t; typedef void lws_abs_protocol_inst_t; /** * lws_abstract_alloc() - allocate and configure an lws_abs_t * * \param vhost: the struct lws_vhost to bind to * \param user: opaque user pointer * \param abstract_path: "protocol.transport" names * \param ap_tokens: tokens for protocol options * \param at_tokens: tokens for transport * \param seq: optional sequencer we should bind to, or NULL * \param opaque_user_data: data given in sequencer callback, if any * * Returns an allocated lws_abs_t pointer set up with the other arguments. * * Doesn't create a connection instance, just allocates the lws_abs_t and * sets it up with the arguments. * * Returns NULL is there's any problem. */ LWS_VISIBLE LWS_EXTERN lws_abs_t * lws_abstract_alloc(struct lws_vhost *vhost, void *user, const char *abstract_path, const lws_token_map_t *ap_tokens, const lws_token_map_t *at_tokens, struct lws_sequencer *seq, void *opaque_user_data); /** * lws_abstract_free() - free an allocated lws_abs_t * * \param pabs: pointer to the lws_abs_t * to free * * Frees and sets the pointer to NULL. */ LWS_VISIBLE LWS_EXTERN void lws_abstract_free(lws_abs_t **pabs); /** * lws_abs_bind_and_create_instance - use an abstract protocol and transport * * \param abs: the lws_abs_t describing the combination desired * * This instantiates an abstract protocol and abstract transport bound together. * A single heap allocation is made for the combination and the protocol and * transport creation ops are called on it. The ap_tokens and at_tokens * are consulted by the creation ops to decide the details of the protocol and * transport for the instance. */ LWS_VISIBLE LWS_EXTERN lws_abs_t * lws_abs_bind_and_create_instance(const lws_abs_t *ai); /** * lws_abs_destroy_instance() - destroys an instance * * \param ai: pointer to the ai pointer to destroy * * This is for destroying an instance created by * lws_abs_bind_and_create_instance() above. * * Calls the protocol and transport destroy operations on the instance, then * frees the combined allocation in one step. The pointer ai is set to NULL. */ LWS_VISIBLE LWS_EXTERN void lws_abs_destroy_instance(lws_abs_t **ai); /* * bring in all the protocols and transports definitions */ #include #include libwebsockets-4.3.5/include/libwebsockets/abstract/protocols.h000066400000000000000000000062621476025525100246630ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /* * Information about how this protocol handles multiple use of connections. * * .flags of 0 indicates each connection must start with a fresh transport. * * Flags can be used to indicate the protocol itself supports different * kinds of multiple use. However the actual use or not of these may depend on * negotiation with the remote peer. * * LWS_AP_FLAG_PIPELINE_TRANSACTIONS: other instances can be queued on one * with an existing connection and get a * chance to "hot take over" the existing * transport in turn, like h1 keepalive * pipelining * * LWS_AP_FLAG_MUXABLE_STREAM: an existing connection can absorb more child * connections and mux them as separate child * streams ongoing, like h2 */ enum { LWS_AP_FLAG_PIPELINE_TRANSACTIONS = (1 << 0), LWS_AP_FLAG_MUXABLE_STREAM = (1 << 1), }; typedef struct lws_abs_protocol { const char *name; int alloc; int flags; int (*create)(const struct lws_abs *ai); void (*destroy)(lws_abs_protocol_inst_t **d); int (*compare)(lws_abs_t *abs1, lws_abs_t *abs2); /* events the transport invokes (handled by abstract protocol) */ int (*accept)(lws_abs_protocol_inst_t *d); int (*rx)(lws_abs_protocol_inst_t *d, const uint8_t *b, size_t l); int (*writeable)(lws_abs_protocol_inst_t *d, size_t budget); int (*closed)(lws_abs_protocol_inst_t *d); int (*heartbeat)(lws_abs_protocol_inst_t *d); /* as parent, we get a notification a new child / queue entry * bound to us... this is the parent lws_abs_t as arg */ int (*child_bind)(lws_abs_t *abs); } lws_abs_protocol_t; /** * lws_abs_protocol_get_by_name() - returns a pointer to the named protocol ops * * \param name: the name of the abstract protocol * * Returns a pointer to the named protocol ops struct if available, otherwise * NULL. */ LWS_VISIBLE LWS_EXTERN const lws_abs_protocol_t * lws_abs_protocol_get_by_name(const char *name); /* * bring in public api pieces from protocols */ #include libwebsockets-4.3.5/include/libwebsockets/abstract/protocols/000077500000000000000000000000001476025525100245045ustar00rootroot00000000000000libwebsockets-4.3.5/include/libwebsockets/abstract/protocols/smtp.h000066400000000000000000000101051476025525100256350ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /** \defgroup smtp SMTP related functions * ##SMTP related functions * \ingroup lwsapi * * These apis let you communicate with a local SMTP server to send email from * lws. It handles all the SMTP sequencing and protocol actions. * * Your system should have postfix, sendmail or another MTA listening on port * 25 and able to send email using the "mail" commandline app. Usually distro * MTAs are configured for this by default. * * You can either use the abstract protocol layer directly, or instead use the * provided smtp sequencer... this takes care of creating the protocol * connections, and provides and email queue and retry management. */ //@{ #if defined(LWS_WITH_SMTP) enum { LTMI_PSMTP_V_HELO = LTMI_PROTOCOL_BASE, /* u.value */ LTMI_PSMTP_V_LWS_SMTP_EMAIL_T, /* u.value */ }; enum { LWS_SMTP_DISPOSITION_SENT, LWS_SMTP_DISPOSITION_FAILED, LWS_SMTP_DISPOSITION_FAILED_DESTROY }; typedef struct lws_smtp_sequencer_args { const char helo[32]; struct lws_vhost *vhost; time_t retry_interval; time_t delivery_timeout; size_t email_queue_max; size_t max_content_size; } lws_smtp_sequencer_args_t; typedef struct lws_smtp_sequencer lws_smtp_sequencer_t; typedef struct lws_smtp_email lws_smtp_email_t; LWS_VISIBLE LWS_EXTERN lws_smtp_sequencer_t * lws_smtp_sequencer_create(const lws_smtp_sequencer_args_t *args); LWS_VISIBLE LWS_EXTERN void lws_smtp_sequencer_destroy(lws_smtp_sequencer_t *s); typedef int (*lws_smtp_cb_t)(void *e, void *d, int disp, const void *b, size_t l); typedef struct lws_smtp_email lws_smtp_email_t; /** * lws_smtpc_add_email() - Allocates and queues an email object * * \param s: smtp sequencer to queue on * \param payload: the email payload string, with headers and terminating . * \param payload_len: size in bytes of the payload string * \param sender: the sender name and email * \param recipient: the recipient name and email * \param data: opaque user data returned in the done callback * \param done: callback called when the email send succeeded or failed * * Allocates an email object and copies the payload, sender and recipient into * it and initializes it. Returns NULL if OOM, otherwise the allocated email * object. * * Because it copies the arguments into an allocated buffer, the original * arguments can be safely destroyed after calling this. * * The done() callback must free the email object. It doesn't have to free any * individual members. */ LWS_VISIBLE LWS_EXTERN int lws_smtpc_add_email(lws_smtp_sequencer_t *s, const char *payload, size_t payload_len, const char *sender, const char *recipient, void *data, lws_smtp_cb_t done); /** * lws_smtpc_free_email() - Add email to the list of ones being sent * * \param e: email to queue for sending on \p c * * Adds an email to the linked-list of emails to send */ LWS_VISIBLE LWS_EXTERN int lws_smtpc_free_email(lws_smtp_email_t *e); #endif //@} libwebsockets-4.3.5/include/libwebsockets/abstract/transports.h000066400000000000000000000046171476025525100250600ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /* * Abstract transport ops */ typedef struct lws_abs_transport { const char *name; int alloc; int (*create)(lws_abs_t *abs); void (*destroy)(lws_abs_transport_inst_t **d); /* check if the transport settings for these connections are the same */ int (*compare)(lws_abs_t *abs1, lws_abs_t *abs2); /* events the abstract protocol invokes (handled by transport) */ int (*tx)(lws_abs_transport_inst_t *d, uint8_t *buf, size_t len); int (*client_conn)(const lws_abs_t *abs); int (*close)(lws_abs_transport_inst_t *d); int (*ask_for_writeable)(lws_abs_transport_inst_t *d); int (*set_timeout)(lws_abs_transport_inst_t *d, int reason, int secs); int (*state)(lws_abs_transport_inst_t *d); } lws_abs_transport_t; /** * lws_abs_protocol_get_by_name() - returns a pointer to the named protocol ops * * \param name: the name of the abstract protocol * * Returns a pointer to the named protocol ops struct if available, otherwise * NULL. */ LWS_VISIBLE LWS_EXTERN const lws_abs_transport_t * lws_abs_transport_get_by_name(const char *name); /* * bring in public api pieces from transports */ #include #include libwebsockets-4.3.5/include/libwebsockets/abstract/transports/000077500000000000000000000000001476025525100246775ustar00rootroot00000000000000libwebsockets-4.3.5/include/libwebsockets/abstract/transports/raw-skt.h000066400000000000000000000025401476025525100264410ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ enum { LTMI_PEER_V_DNS_ADDRESS = LTMI_TRANSPORT_BASE, /* u.value */ LTMI_PEER_LV_PORT, /* u.lvalue */ LTMI_PEER_LV_TLS_FLAGS, /* u.lvalue */ }; libwebsockets-4.3.5/include/libwebsockets/abstract/transports/unit-test.h000066400000000000000000000054001476025525100270030ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * This is an abstract transport useful for unit testing abstract protocols. * * Instead of passing data anywhere, you give the transport a list of packets * to deliver and packets you expect back from the abstract protocol it's * bound to. */ enum { LWS_AUT_EXPECT_TEST_END = (1 << 0), LWS_AUT_EXPECT_LOCAL_CLOSE = (1 << 1), LWS_AUT_EXPECT_DO_REMOTE_CLOSE = (1 << 2), LWS_AUT_EXPECT_TX /* expect this as tx from protocol */ = (1 << 3), LWS_AUT_EXPECT_RX /* present this as rx to protocol */ = (1 << 4), LWS_AUT_EXPECT_SHOULD_FAIL = (1 << 5), LWS_AUT_EXPECT_SHOULD_TIMEOUT = (1 << 6), }; typedef enum { LPE_CONTINUE, LPE_SUCCEEDED, LPE_FAILED, LPE_FAILED_UNEXPECTED_TIMEOUT, LPE_FAILED_UNEXPECTED_PASS, LPE_FAILED_UNEXPECTED_CLOSE, LPE_SKIPPED, LPE_CLOSING } lws_unit_test_packet_disposition; typedef int (*lws_unit_test_packet_test_cb)(const void *cb_user, int disposition); typedef int (*lws_unit_test_packet_cb)(lws_abs_t *instance); /* each step in the unit test */ typedef struct lws_unit_test_packet { void *buffer; lws_unit_test_packet_cb pre; size_t len; uint32_t flags; } lws_unit_test_packet_t; /* each unit test */ typedef struct lws_unit_test { const char * name; /* NULL indicates end of test array */ lws_unit_test_packet_t * expect_array; int max_secs; } lws_unit_test_t; enum { LTMI_PEER_V_EXPECT_TEST = LTMI_TRANSPORT_BASE, /* u.value */ LTMI_PEER_V_EXPECT_RESULT_CB, /* u.value */ LTMI_PEER_V_EXPECT_RESULT_CB_ARG, /* u.value */ }; LWS_VISIBLE LWS_EXTERN const char * lws_unit_test_result_name(int in); libwebsockets-4.3.5/include/libwebsockets/lws-adopt.h000066400000000000000000000245401476025525100227450ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /** \defgroup sock-adopt Socket adoption helpers * ##Socket adoption helpers * * When integrating with an external app with its own event loop, these can * be used to accept connections from someone else's listening socket. * * When using lws own event loop, these are not needed. */ ///@{ /** * lws_adopt_socket() - adopt foreign socket as if listen socket accepted it * for the default vhost of context. * * \param context: lws context * \param accept_fd: fd of already-accepted socket to adopt * * Either returns new wsi bound to accept_fd, or closes accept_fd and * returns NULL, having cleaned up any new wsi pieces. * * LWS adopts the socket in http serving mode, it's ready to accept an upgrade * to ws or just serve http. */ LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_socket(struct lws_context *context, lws_sockfd_type accept_fd); /** * lws_adopt_socket_vhost() - adopt foreign socket as if listen socket accepted * it for vhost * * \param vh: lws vhost * \param accept_fd: fd of already-accepted socket to adopt * * Either returns new wsi bound to accept_fd, or closes accept_fd and * returns NULL, having cleaned up any new wsi pieces. * * LWS adopts the socket in http serving mode, it's ready to accept an upgrade * to ws or just serve http. */ LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_socket_vhost(struct lws_vhost *vh, lws_sockfd_type accept_fd); typedef enum { LWS_ADOPT_RAW_FILE_DESC = 0, /* convenience constant */ LWS_ADOPT_HTTP = 1, /* flag: absent implies RAW */ LWS_ADOPT_SOCKET = 2, /* flag: absent implies file */ LWS_ADOPT_ALLOW_SSL = 4, /* flag: use tls */ LWS_ADOPT_FLAG_UDP = 16, /* flag: socket is UDP */ LWS_ADOPT_FLAG_RAW_PROXY = 32, /* flag: raw proxy */ LWS_ADOPT_RAW_SOCKET_UDP = LWS_ADOPT_SOCKET | LWS_ADOPT_FLAG_UDP, } lws_adoption_type; typedef union { lws_sockfd_type sockfd; lws_filefd_type filefd; } lws_sock_file_fd_type; #if defined(LWS_ESP_PLATFORM) #include #endif typedef union { #if defined(LWS_WITH_IPV6) struct sockaddr_in6 sa6; #else #if defined(LWS_ESP_PLATFORM) uint8_t _pad_sa6[28]; #endif #endif struct sockaddr_in sa4; } lws_sockaddr46; #define sa46_sockaddr(_sa46) ((struct sockaddr *)(_sa46)) #if defined(LWS_WITH_IPV6) #define sa46_socklen(_sa46) (socklen_t)((_sa46)->sa4.sin_family == AF_INET ? \ sizeof(struct sockaddr_in) : \ sizeof(struct sockaddr_in6)) #define sa46_sockport(_sa46, _sp) { if ((_sa46)->sa4.sin_family == AF_INET) \ (_sa46)->sa4.sin_port = (_sp); else \ (_sa46)->sa6.sin6_port = (_sp); } #define sa46_address(_sa46) ((uint8_t *)((_sa46)->sa4.sin_family == AF_INET ? \ &_sa46->sa4.sin_addr : &_sa46->sa6.sin6_addr )) #else #define sa46_socklen(_sa46) (socklen_t)sizeof(struct sockaddr_in) #define sa46_sockport(_sa46, _sp) (_sa46)->sa4.sin_port = (_sp) #define sa46_address(_sa46) (uint8_t *)&_sa46->sa4.sin_addr #endif #define sa46_address_len(_sa46) ((_sa46)->sa4.sin_family == AF_INET ? 4 : 16) #if defined(LWS_WITH_UDP) struct lws_udp { lws_sockaddr46 sa46; lws_sockaddr46 sa46_pending; uint8_t connected:1; }; #endif /** * lws_adopt_descriptor_vhost() - adopt foreign socket or file descriptor * if socket descriptor, should already have been accepted from listen socket * * \param vh: lws vhost * \param type: OR-ed combinations of lws_adoption_type flags * \param fd: union with either .sockfd or .filefd set * \param vh_prot_name: NULL or vh protocol name to bind raw connection to * \param parent: NULL or struct lws to attach new_wsi to as a child * * Either returns new wsi bound to accept_fd, or closes accept_fd and * returns NULL, having cleaned up any new wsi pieces. * * If LWS_ADOPT_SOCKET is set, LWS adopts the socket in http serving mode, it's * ready to accept an upgrade to ws or just serve http. * * parent may be NULL, if given it should be an existing wsi that will become the * parent of the new wsi created by this call. */ LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_descriptor_vhost(struct lws_vhost *vh, lws_adoption_type type, lws_sock_file_fd_type fd, const char *vh_prot_name, struct lws *parent); typedef struct lws_adopt_desc { struct lws_vhost *vh; /**< vhost the wsi should belong to */ lws_adoption_type type; /**< OR-ed combinations of lws_adoption_type flags */ lws_sock_file_fd_type fd; /**< union with either .sockfd or .filefd set */ const char *vh_prot_name; /**< NULL or vh protocol name to bind raw connection to */ struct lws *parent; /**< NULL or struct lws to attach new_wsi to as a child */ void *opaque; /**< opaque pointer to set on created wsi */ const char *fi_wsi_name; /**< NULL, or Fault Injection inheritence filter for wsi=string/ context faults */ } lws_adopt_desc_t; /** * lws_adopt_descriptor_vhost_via_info() - adopt foreign socket or file descriptor * if socket descriptor, should already have been accepted from listen socket * * \param info: the struct containing the parameters * * - vh: lws vhost * - type: OR-ed combinations of lws_adoption_type flags * - fd: union with either .sockfd or .filefd set * - vh_prot_name: NULL or vh protocol name to bind raw connection to * - parent: NULL or struct lws to attach new_wsi to as a child * - opaque: opaque pointer to set on created wsi * * Either returns new wsi bound to accept_fd, or closes accept_fd and * returns NULL, having cleaned up any new wsi pieces. * * If LWS_ADOPT_SOCKET is set, LWS adopts the socket in http serving mode, it's * ready to accept an upgrade to ws or just serve http. * * parent may be NULL, if given it should be an existing wsi that will become the * parent of the new wsi created by this call. */ LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_descriptor_vhost_via_info(const lws_adopt_desc_t *info); /** * lws_adopt_socket_readbuf() - adopt foreign socket and first rx as if listen socket accepted it * for the default vhost of context. * \param context: lws context * \param accept_fd: fd of already-accepted socket to adopt * \param readbuf: NULL or pointer to data that must be drained before reading from * accept_fd * \param len: The length of the data held at \p readbuf * * Either returns new wsi bound to accept_fd, or closes accept_fd and * returns NULL, having cleaned up any new wsi pieces. * * LWS adopts the socket in http serving mode, it's ready to accept an upgrade * to ws or just serve http. * * If your external code did not already read from the socket, you can use * lws_adopt_socket() instead. * * This api is guaranteed to use the data at \p readbuf first, before reading from * the socket. * * \p readbuf is limited to the size of the ah rx buf, currently 2048 bytes. */ LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_socket_readbuf(struct lws_context *context, lws_sockfd_type accept_fd, const char *readbuf, size_t len); /** * lws_adopt_socket_vhost_readbuf() - adopt foreign socket and first rx as if listen socket * accepted it for vhost. * \param vhost: lws vhost * \param accept_fd: fd of already-accepted socket to adopt * \param readbuf: NULL or pointer to data that must be drained before reading from accept_fd * \param len: The length of the data held at \p readbuf * * Either returns new wsi bound to accept_fd, or closes accept_fd and * returns NULL, having cleaned up any new wsi pieces. * * LWS adopts the socket in http serving mode, it's ready to accept an upgrade * to ws or just serve http. * * If your external code did not already read from the socket, you can use * lws_adopt_socket() instead. * * This api is guaranteed to use the data at \p readbuf first, before reading from * the socket. * * \p readbuf is limited to the size of the ah rx buf, currently 2048 bytes. */ LWS_VISIBLE LWS_EXTERN struct lws * lws_adopt_socket_vhost_readbuf(struct lws_vhost *vhost, lws_sockfd_type accept_fd, const char *readbuf, size_t len); #define LWS_CAUDP_BIND (1 << 0) #define LWS_CAUDP_BROADCAST (1 << 1) #define LWS_CAUDP_PF_PACKET (1 << 2) #if defined(LWS_WITH_UDP) /** * lws_create_adopt_udp() - create, bind and adopt a UDP socket * * \param vhost: lws vhost * \param ads: NULL or address to do dns lookup on * \param port: UDP port to bind to, -1 means unbound * \param flags: 0 or LWS_CAUDP_NO_BIND * \param protocol_name: Name of protocol on vhost to bind wsi to * \param ifname: NULL, for network interface name to bind socket to * \param parent_wsi: NULL or parent wsi new wsi will be a child of * \param opaque: set created wsi opaque ptr to this * \param retry_policy: NULL for vhost default policy else wsi specific policy * \param fi_wsi_name: NULL, or string to inherit Fault Injection rules in * form "wsi=string/rule". "wsi/rule" faults will be * automatically applied as well. It's done at creation * time so the rules can, eg, inject faults related to * creation. * * Either returns new wsi bound to accept_fd, or closes accept_fd and * returns NULL, having cleaned up any new wsi pieces. * */ LWS_VISIBLE LWS_EXTERN struct lws * lws_create_adopt_udp(struct lws_vhost *vhost, const char *ads, int port, int flags, const char *protocol_name, const char *ifname, struct lws *parent_wsi, void *opaque, const lws_retry_bo_t *retry_policy, const char *fi_wsi_name); #endif ///@} libwebsockets-4.3.5/include/libwebsockets/lws-async-dns.h000066400000000000000000000062751476025525100235420ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #if defined(LWS_WITH_UDP) typedef enum dns_query_type { LWS_ADNS_RECORD_A = 0x01, LWS_ADNS_RECORD_CNAME = 0x05, LWS_ADNS_RECORD_MX = 0x0f, LWS_ADNS_RECORD_AAAA = 0x1c, } adns_query_type_t; typedef enum { LADNS_RET_FAILED_WSI_CLOSED = -4, LADNS_RET_NXDOMAIN = -3, LADNS_RET_TIMEDOUT = -2, LADNS_RET_FAILED = -1, LADNS_RET_FOUND, LADNS_RET_CONTINUING } lws_async_dns_retcode_t; struct addrinfo; typedef struct lws * (*lws_async_dns_cb_t)(struct lws *wsi, const char *ads, const struct addrinfo *result, int n, void *opaque); /** * lws_async_dns_query() - perform a dns lookup using async dns * * \param context: the lws_context * \param tsi: thread service index (usually 0) * \param name: DNS name to look up * \param qtype: type of query (A, AAAA etc) * \param cb: query completion callback * \param wsi: wsi if the query is related to one * * Starts an asynchronous DNS lookup, on completion the \p cb callback will * be called. * * The reference count on the cached object is incremented for every callback * that was called with the cached addrinfo results. * * The cached object can't be evicted until the reference count reaches zero... * use lws_async_dns_freeaddrinfo() to indicate you're finsihed with the * results for each callback that happened with them. */ LWS_VISIBLE LWS_EXTERN lws_async_dns_retcode_t lws_async_dns_query(struct lws_context *context, int tsi, const char *name, adns_query_type_t qtype, lws_async_dns_cb_t cb, struct lws *wsi, void *opaque); /** * lws_async_dns_freeaddrinfo() - decrement refcount on cached addrinfo results * * \param pai: a pointert to a pointer to first addrinfo returned as result in the callback * * Decrements the cache object's reference count. When it reaches zero, the * cached object may be reaped subject to LRU rules. * * The pointer to the first addrinfo give in the argument is set to NULL. */ LWS_VISIBLE LWS_EXTERN void lws_async_dns_freeaddrinfo(const struct addrinfo **ai); #endif libwebsockets-4.3.5/include/libwebsockets/lws-bb-i2c.h000066400000000000000000000041071476025525100226710ustar00rootroot00000000000000/* * I2C - bitbanged generic gpio implementation * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * This is like an abstract class for gpio, a real implementation provides * functions for the ops that use the underlying OS gpio arrangements. */ typedef struct lws_bb_i2c { lws_i2c_ops_t bb_ops; /* init to lws_bb_i2c_ops */ /* implementation-specific members */ _lws_plat_gpio_t scl; _lws_plat_gpio_t sda; const lws_gpio_ops_t *gpio; void (*delay)(void); } lws_bb_i2c_t; #define lws_bb_i2c_ops \ { \ .init = lws_bb_i2c_init, \ .start = lws_bb_i2c_start, \ .stop = lws_bb_i2c_stop, \ .write = lws_bb_i2c_write, \ .read = lws_bb_i2c_read, \ .set_ack = lws_bb_i2c_set_ack, \ } int lws_bb_i2c_init(const lws_i2c_ops_t *octx); int lws_bb_i2c_start(const lws_i2c_ops_t *octx); void lws_bb_i2c_stop(const lws_i2c_ops_t *octx); int lws_bb_i2c_write(const lws_i2c_ops_t *octx, uint8_t data); int lws_bb_i2c_read(const lws_i2c_ops_t *octx); void lws_bb_i2c_set_ack(const lws_i2c_ops_t *octx, int ack); libwebsockets-4.3.5/include/libwebsockets/lws-bb-spi.h000066400000000000000000000043221476025525100230060ustar00rootroot00000000000000/* * I2C - bitbanged generic gpio implementation * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * This is like an abstract class for gpio, a real implementation provides * functions for the ops that use the underlying OS gpio arrangements. */ #define LWSBBSPI_FLAG_USE_NCMD3 (1 << 7) #define LWSBBSPI_FLAG_USE_NCMD2 (1 << 6) #define LWSBBSPI_FLAG_USE_NCMD1 (1 << 5) #define LWSBBSPI_FLAG_USE_NCMD0 (1 << 4) #define LWSBBSPI_FLAG_USE_NCS3 (1 << 3) #define LWSBBSPI_FLAG_USE_NCS2 (1 << 2) #define LWSBBSPI_FLAG_USE_NCS1 (1 << 1) #define LWSBBSPI_FLAG_USE_NCS0 (1 << 0) #define LWS_SPI_BB_MAX_CH 4 typedef struct lws_bb_spi { lws_spi_ops_t bb_ops; /* init to lws_bb_spi_ops */ /* implementation-specific members */ const lws_gpio_ops_t *gpio; _lws_plat_gpio_t clk; _lws_plat_gpio_t ncs[LWS_SPI_BB_MAX_CH]; _lws_plat_gpio_t ncmd[LWS_SPI_BB_MAX_CH]; _lws_plat_gpio_t mosi; _lws_plat_gpio_t miso; uint8_t flags; } lws_bb_spi_t; #define lws_bb_spi_ops \ .init = lws_bb_spi_init, \ .queue = lws_bb_spi_queue int lws_bb_spi_init(const lws_spi_ops_t *octx); int lws_bb_spi_queue(const lws_spi_ops_t *octx, const lws_spi_desc_t *desc); libwebsockets-4.3.5/include/libwebsockets/lws-button.h000066400000000000000000000076241476025525100231550ustar00rootroot00000000000000/* * Generic button ops * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * Leverages the lws generic gpio pieces to bind gpio buttons to smd events */ #if !defined(__LWS_BUTTON_H__) #define __LWS_BUTTON_H__ typedef uint16_t lws_button_idx_t; /* actual minimum may be 1 x RTOS tick depending on platform */ #define LWS_BUTTON_MON_TIMER_MS 5 typedef void (*lws_button_cb_t)(void *opaque, lws_button_idx_t idx, int state); /* These are specified in ms but the granularity is LWS_BUTTON_MON_TIMER_MS, * which may have been rounded up to an RTOS tick depending on platform */ enum { LWSBTNRGMFLAG_CLASSIFY_DOUBLECLICK = (1 << 0) }; typedef struct lws_button_regime { uint16_t ms_min_down; uint16_t ms_min_down_longpress; uint16_t ms_up_settle; uint16_t ms_doubleclick_grace; uint16_t ms_repeat_down; uint8_t flags; /**< when double-click classification is enabled, clicks are delayed * by ms_min_down + ms_doubleclick_grace to wait and see if it will * become a double-click. Set LWSBTNRGMFLAG_CLASSIFY_DOUBLECLICK to * enable it or leave that bit at 0 to get faster single-click * classification. */ } lws_button_regime_t; /* * This is the const part of the button controller, describing the static * bindings to gpio, and lws_smd event name information */ typedef struct lws_button_map { _lws_plat_gpio_t gpio; const char *smd_interaction_name; const lws_button_regime_t *regime; /**< a default regime is applied if this is left NULL */ } lws_button_map_t; typedef struct lws_button_controller { const char *smd_bc_name; const lws_gpio_ops_t *gpio_ops; const lws_button_map_t *button_map; lws_button_idx_t active_state_bitmap; uint8_t count_buttons; } lws_button_controller_t; struct lws_button_state; /* opaque */ /** * lws_button_controller_create() - instantiate a button controller * * \param ctx: the lws_context * \param controller: the static controller definition * * Instantiates a button controller from a static definition of the buttons * and their smd names, and active levels, and binds it to a gpio implementation */ LWS_VISIBLE LWS_EXTERN struct lws_button_state * lws_button_controller_create(struct lws_context *ctx, const lws_button_controller_t *controller); /** * lws_button_controller_destroy() - destroys a button controller * * \param bcs: button controller state previously created * * Disables all buttons and then destroys and frees a previously created * button controller. */ LWS_VISIBLE LWS_EXTERN void lws_button_controller_destroy(struct lws_button_state *bcs); LWS_VISIBLE LWS_EXTERN lws_button_idx_t lws_button_get_bit(struct lws_button_state *bcs, const char *name); /* * lws_button_enable() - enable and disable buttons */ LWS_VISIBLE LWS_EXTERN void lws_button_enable(struct lws_button_state *bcs, lws_button_idx_t _reset, lws_button_idx_t _set); #endif libwebsockets-4.3.5/include/libwebsockets/lws-cache-ttl.h000066400000000000000000000320361476025525100235010ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /** \defgroup lws_cache_ttl Cache supporting expiry * ##Cache supporting expiry * * These apis let you quickly and reliably implement caches of named objects, * that have a "destroy-by date" and cache limits that will be observed. * * You can instantiate as many caches as you need. The first one must be an * L1 / heap cache type, it can have parents and grandparents of other types * which are accessible why writing / looking up and getting from the L1 cache. * The outer "cache" layer may persistently store items to a backing store. * * Allocated object memory is entirely for the use of user code, up to the * requested size. * * The key name for the listed objects may be any string chosen by the user, * there is no special length limit as it is also allocated. * * Both expiry and LRU orderings are kept so it is easy to find out usage * ordering and when the next object that will expire. * * Cached objects may be destroyed any time you go around the event loop, when * you allocate new objects (to keep the whole cache under the specified limit), * or when their expiry time arrives. So you shouldn't keep copies of pointers * to cached objects after returning to the event loop. */ ///@{ struct lws_cache_ttl_lru; /** * lws_cache_write_through() - add a new cache item object in all layers * * \param cache: the existing cache to allocate the object in * \param specific_key: a key string that identifies the item in the cache * \param source: optional payload for the cached item, NULL means caller will * write the payload * \param size: the size of the object to allocate * \param expiry: the usec time that the object will autodestroy * \param ppay: NULL, or a pointer to a void * to be set to the L1 payload * * If an item with the key already exists, it is destroyed before allocating a * new one. * * Returns 0 if successful. The written entry will be scheduled to be auto- * destroyed when \p expiry occurs. * * Adding or removing cache items may cause invalidation of cached queries. */ LWS_VISIBLE LWS_EXTERN int /* only valid until return to event loop */ lws_cache_write_through(struct lws_cache_ttl_lru *cache, const char *specific_key, const uint8_t *source, size_t size, lws_usec_t expiry, void **ppay); typedef struct lws_cache_match { lws_dll2_t list; lws_usec_t expiry; /* earliest expiry amongst results */ size_t payload_size; /**< the payload is not attached here. This is a hint about what * (*get)() will return for this tag name. */ size_t tag_size; /* tag name + NUL is overcommitted */ } lws_cache_match_t; /** * lws_cache_heap_lookup() - get a list of matching items * * \param cache: the cache to search for the key * \param wildcard_key: the item key string, may contain wildcards * \param pdata: pointer to pointer to be set to the serialized result list * \param psize: pointer to size_t to receive length of serialized result list * * This finds all unique items in the final cache that match search_key, which * may contain wildcards. It does not return the payloads for matching items, * just a list of specific tags in the that match. * * If successful, results are provided in a serialized list format, in no * particular order, each result has the following fields * * - BE32: payload size in bytes (payload itself is not included) * - BE32: specific tag name length in bytes * - chars: tag name with terminating NUL * * These serialized results are themselves cached in L1 cache (only) and the * result pointers are set pointing into that. If the results are still in L1 * cache next time this api is called, the results will be returned directly * from that without repeating the expensive lookup on the backup store. That * is why the results are provided in serialized form. * * The cached results list expiry is set to the earliest expiry of any listed * item. Additionally any cached results are invalidated on addition or * deletion (update is done as addition + deletion) of any item that would * match the results' original wildcard_key. For the typical case new items * are rare compared to lookups, this is efficient. * * Lookup matching does not itself affect LRU or cache status of the result * itsems. Typically user code will get the lookup results, and then perform * get operations on each item in its desired order, that will bring the items * to the head of the LRU list and occupy L1 cache. * * Returns 0 if proceeded alright, or nonzero if error. If there was an error, * any partial results set has been deallocated cleanly before returning. */ LWS_VISIBLE LWS_EXTERN int lws_cache_lookup(struct lws_cache_ttl_lru *cache, const char *wildcard_key, const void **pdata, size_t *psize); /** * lws_cache_item_get() - bring a specific item into L1 and get payload info * * \param cache: the cache to search for the key * \param specific_key: the key string of the item to get * \param pdata: pointer to a void * to be set to the payload in L1 cache * \param psize: pointer to a size_t to be set to the payload size * * If the cache still has an item matching the key string, it will be destroyed. * * Adding or removing cache items may cause invalidation of cached queries. * * Notice the cache payload is a blob of the given size. If you are storing * strings, there is no NUL termination unless you stored them with it. * * Returns 0 if successful. */ LWS_VISIBLE LWS_EXTERN int lws_cache_item_get(struct lws_cache_ttl_lru *cache, const char *specific_key, const void **pdata, size_t *psize); /** * lws_cache_item_remove() - remove item from all cache levels * * \param cache: the cache to search for the key * \param wildcard_key: the item key string * * Removes any copy of any item matching the \p wildcard_key from any cache * level in one step. * * Adding or removing cache items may cause invalidation of cached queries * that could refer to the removed item. */ LWS_VISIBLE LWS_EXTERN int lws_cache_item_remove(struct lws_cache_ttl_lru *cache, const char *wildcard_key); /** * lws_cache_footprint() - query the amount of storage used by the cache layer * * \param cache: cache to query * * Returns number of payload bytes stored in cache currently */ LWS_VISIBLE LWS_EXTERN uint64_t lws_cache_footprint(struct lws_cache_ttl_lru *cache); /** * lws_cache_debug_dump() - if built in debug mode dump cache contents to log * * \param cache: cache to dump * * If lws was built in debug mode, dump cache to log, otherwise a NOP. */ LWS_VISIBLE LWS_EXTERN void lws_cache_debug_dump(struct lws_cache_ttl_lru *cache); typedef struct lws_cache_results { const uint8_t *ptr; /* set before using walk api */ size_t size; /* set before using walk api */ size_t payload_len; size_t tag_len; const uint8_t *tag; } lws_cache_results_t; /** * lws_cache_results_walk() - parse next result * * \param walk_ctx: the context of the results blob to walk * * Caller must initialize \p walk_ctx.ptr and \p walk_ctx.size before calling. * These are set to the results returned from a _lookup api call. * * The call returns 0 if the struct elements have been set to a result, or 1 * if there where no more results in the blob to walk. * * If successful, after the call \p payload_len is set to the length of the * payload related to this result key (the payload itself is not present), * \p tag_len is set to the length of the result key name, and \p tag is set * to the result tag name, with a terminating NUL. */ LWS_VISIBLE LWS_EXTERN int lws_cache_results_walk(lws_cache_results_t *walk_ctx); typedef void (*lws_cache_item_destroy_cb)(void *item, size_t size); struct lws_cache_creation_info { struct lws_context *cx; /**< Mandatory: the lws_context */ const char *name; /**< Mandatory: short cache name */ lws_cache_item_destroy_cb cb; /**< NULL, or a callback that can hook cache item destory */ struct lws_cache_ttl_lru *parent; /**< NULL, or next cache level */ const struct lws_cache_ops *ops; /**< NULL for default, heap-based ops, else custom cache storage and * query implementation */ union { struct { const char *filepath; /**< the filepath to store items in */ } nscookiejar; } u; /**< these are extra configuration for specific cache types */ size_t max_footprint; /**< 0, or the max heap allocation allowed before destroying * lru items to keep it under the limit */ size_t max_items; /**< 0, or the max number of items allowed in the cache before * destroying lru items to keep it under the limit */ size_t max_payload; /**< 0, or the max allowed payload size for one item */ int tsi; /**< 0 unless using SMP, then tsi to bind sul to */ }; struct lws_cache_ops { struct lws_cache_ttl_lru * (*create)(const struct lws_cache_creation_info *info); /**< create an instance of the cache type specified in info */ void (*destroy)(struct lws_cache_ttl_lru **_cache); /**< destroy the logical cache instance pointed to by *_cache, doesn't * affect any NV backing storage */ int (*expunge)(struct lws_cache_ttl_lru *cache); /**< completely delete any backing storage related to the cache * instance, eg, delete the backing file */ int (*write)(struct lws_cache_ttl_lru *cache, const char *specific_key, const uint8_t *source, size_t size, lws_usec_t expiry, void **ppvoid); /**< create an entry in the cache level according to the given info */ int (*tag_match)(struct lws_cache_ttl_lru *cache, const char *wc, const char *tag, char lookup_rules); /**< Just tell us if tag would match wildcard, using whatever special * rules the backing store might use for tag matching. 0 indicates * it is a match on wildcard, nonzero means does not match. */ int (*lookup)(struct lws_cache_ttl_lru *cache, const char *wildcard_key, lws_dll2_owner_t *results_owner); /**+ add keys for search_key matches not already listed in the results * owner */ int (*invalidate)(struct lws_cache_ttl_lru *cache, const char *wildcard_key); /**< remove matching item(s) from cache level */ int (*get)(struct lws_cache_ttl_lru *cache, const char *specific_key, const void **pdata, size_t *psize); /**< if it has the item, fills L1 with item. updates LRU, and returns * pointer to payload in L1 */ void (*debug_dump)(struct lws_cache_ttl_lru *cache); /**< Helper to dump the whole cache contents to log, useful for debug */ }; /** * lws_cache_create() - create an empty cache you can allocate items in * * \param info: a struct describing the cache to create * * Create an empty cache you can allocate items in. The cache will be kept * below the max_footprint and max_items limits if they are nonzero, by * destroying least-recently-used items until it remains below the limits. * * Items will auto-destroy when their expiry time is reached. * * When items are destroyed from the cache, if \p cb is non-NULL, it will be * called back with the item pointer after it has been removed from the cache, * but before it is deallocated and destroyed. * * context and tsi are used when scheduling expiry callbacks */ LWS_VISIBLE LWS_EXTERN struct lws_cache_ttl_lru * lws_cache_create(const struct lws_cache_creation_info *info); /** * lws_cache_destroy() - destroy a previously created cache * * \param cache: pointer to the cache * * Everything in the cache is destroyed, then the cache itself is destroyed, * and *cache set to NULL. */ LWS_VISIBLE LWS_EXTERN void lws_cache_destroy(struct lws_cache_ttl_lru **cache); /** * lws_cache_expunge() - destroy all items in cache and parents * * \param cache: pointer to the cache * * Everything in the cache and parents is destroyed, leaving it empty. * If the cache has a backing store, it is deleted. * * Returns 0 if no problems reported at any cache layer, else nonzero. */ LWS_VISIBLE LWS_EXTERN int lws_cache_expunge(struct lws_cache_ttl_lru *cache); LWS_VISIBLE extern const struct lws_cache_ops lws_cache_ops_heap, lws_cache_ops_nscookiejar; ///@} libwebsockets-4.3.5/include/libwebsockets/lws-callbacks.h000066400000000000000000001101651476025525100235540ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /*! \defgroup usercb User Callback * * ##User protocol callback * * The protocol callback is the primary way lws interacts with * user code. For one of a list of a few dozen reasons the callback gets * called at some event to be handled. * * All of the events can be ignored, returning 0 is taken as "OK" and returning * nonzero in most cases indicates that the connection should be closed. */ ///@{ struct lws_ssl_info { int where; int ret; }; enum lws_cert_update_state { LWS_CUS_IDLE, LWS_CUS_STARTING, LWS_CUS_SUCCESS, LWS_CUS_FAILED, LWS_CUS_CREATE_KEYS, LWS_CUS_REG, LWS_CUS_AUTH, LWS_CUS_CHALLENGE, LWS_CUS_CREATE_REQ, LWS_CUS_REQ, LWS_CUS_CONFIRM, LWS_CUS_ISSUE, }; enum { LWS_TLS_REQ_ELEMENT_COUNTRY, LWS_TLS_REQ_ELEMENT_STATE, LWS_TLS_REQ_ELEMENT_LOCALITY, LWS_TLS_REQ_ELEMENT_ORGANIZATION, LWS_TLS_REQ_ELEMENT_COMMON_NAME, LWS_TLS_REQ_ELEMENT_SUBJECT_ALT_NAME, LWS_TLS_REQ_ELEMENT_EMAIL, LWS_TLS_REQ_ELEMENT_COUNT, LWS_TLS_SET_DIR_URL = LWS_TLS_REQ_ELEMENT_COUNT, LWS_TLS_SET_AUTH_PATH, LWS_TLS_SET_CERT_PATH, LWS_TLS_SET_KEY_PATH, LWS_TLS_TOTAL_COUNT }; struct lws_acme_cert_aging_args { struct lws_vhost *vh; const char *element_overrides[LWS_TLS_TOTAL_COUNT]; /* NULL = use pvo */ }; /* * With LWS_CALLBACK_FILTER_NETWORK_CONNECTION callback, user_data pointer * points to one of these */ struct lws_filter_network_conn_args { struct sockaddr_storage cli_addr; socklen_t clilen; lws_sockfd_type accept_fd; }; /* * NOTE: These public enums are part of the abi. If you want to add one, * add it at where specified so existing users are unaffected. */ /** enum lws_callback_reasons - reason you're getting a protocol callback */ enum lws_callback_reasons { /* --------------------------------------------------------------------- * ----- Callbacks related to wsi and protocol binding lifecycle ----- */ LWS_CALLBACK_PROTOCOL_INIT = 27, /**< One-time call per protocol, per-vhost using it, so it can * do initial setup / allocations etc */ LWS_CALLBACK_PROTOCOL_DESTROY = 28, /**< One-time call per protocol, per-vhost using it, indicating * this protocol won't get used at all after this callback, the * vhost is getting destroyed. Take the opportunity to * deallocate everything that was allocated by the protocol. */ LWS_CALLBACK_WSI_CREATE = 29, /**< outermost (earliest) wsi create notification to protocols[0] */ LWS_CALLBACK_WSI_DESTROY = 30, /**< outermost (latest) wsi destroy notification to protocols[0] */ LWS_CALLBACK_WSI_TX_CREDIT_GET = 103, /**< manually-managed connection received TX credit (len is int32) */ /* --------------------------------------------------------------------- * ----- Callbacks related to Server TLS ----- */ LWS_CALLBACK_OPENSSL_LOAD_EXTRA_CLIENT_VERIFY_CERTS = 21, /**< if configured for * including OpenSSL support, this callback allows your user code * to perform extra SSL_CTX_load_verify_locations() or similar * calls to direct OpenSSL where to find certificates the client * can use to confirm the remote server identity. user is the * OpenSSL SSL_CTX* */ LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS = 22, /**< if configured for * including OpenSSL support, this callback allows your user code * to load extra certificates into the server which allow it to * verify the validity of certificates returned by clients. user * is the server's OpenSSL SSL_CTX* and in is the lws_vhost */ LWS_CALLBACK_OPENSSL_PERFORM_CLIENT_CERT_VERIFICATION = 23, /**< if the libwebsockets vhost was created with the option * LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT, then this * callback is generated during OpenSSL verification of the cert * sent from the client. It is sent to protocol[0] callback as * no protocol has been negotiated on the connection yet. * Notice that the libwebsockets context and wsi are both NULL * during this callback. See * http://www.openssl.org/docs/ssl/SSL_CTX_set_verify.html * to understand more detail about the OpenSSL callback that * generates this libwebsockets callback and the meanings of the * arguments passed. In this callback, user is the x509_ctx, * in is the ssl pointer and len is preverify_ok * Notice that this callback maintains libwebsocket return * conventions, return 0 to mean the cert is OK or 1 to fail it. * This also means that if you don't handle this callback then * the default callback action of returning 0 allows the client * certificates. */ LWS_CALLBACK_SSL_INFO = 67, /**< SSL connections only. An event you registered an * interest in at the vhost has occurred on a connection * using the vhost. in is a pointer to a * struct lws_ssl_info containing information about the * event*/ /* --------------------------------------------------------------------- * ----- Callbacks related to Client TLS ----- */ LWS_CALLBACK_OPENSSL_PERFORM_SERVER_CERT_VERIFICATION = 58, /**< Similar to LWS_CALLBACK_OPENSSL_PERFORM_CLIENT_CERT_VERIFICATION * this callback is called during OpenSSL verification of the cert * sent from the server to the client. It is sent to protocol[0] * callback as no protocol has been negotiated on the connection yet. * Notice that the wsi is set because lws_client_connect_via_info was * successful. * * See http://www.openssl.org/docs/ssl/SSL_CTX_set_verify.html * to understand more detail about the OpenSSL callback that * generates this libwebsockets callback and the meanings of the * arguments passed. In this callback, user is the x509_ctx, * in is the ssl pointer and len is preverify_ok. * * THIS IS NOT RECOMMENDED BUT if a cert validation error shall be * overruled and cert shall be accepted as ok, * X509_STORE_CTX_set_error((X509_STORE_CTX*)user, X509_V_OK); must be * called and return value must be 0 to mean the cert is OK; * returning 1 will fail the cert in any case. * * This also means that if you don't handle this callback then * the default callback action of returning 0 will not accept the * certificate in case of a validation error decided by the SSL lib. * * This is expected and secure behaviour when validating certificates. * * Note: LCCSCF_ALLOW_SELFSIGNED and * LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK still work without this * callback being implemented. */ /* --------------------------------------------------------------------- * ----- Callbacks related to HTTP Server ----- */ LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED = 19, /**< A new client has been accepted by the ws server. This * callback allows setting any relevant property to it. Because this * happens immediately after the instantiation of a new client, * there's no websocket protocol selected yet so this callback is * issued only to protocol 0. Only wsi is defined, pointing to the * new client, and the return value is ignored. */ LWS_CALLBACK_HTTP = 12, /**< an http request has come from a client that is not * asking to upgrade the connection to a websocket * one. This is a chance to serve http content, * for example, to send a script to the client * which will then open the websockets connection. * in points to the URI path requested and * lws_serve_http_file() makes it very * simple to send back a file to the client. * Normally after sending the file you are done * with the http connection, since the rest of the * activity will come by websockets from the script * that was delivered by http, so you will want to * return 1; to close and free up the connection. */ LWS_CALLBACK_HTTP_BODY = 13, /**< the next len bytes data from the http * request body HTTP connection is now available in in. */ LWS_CALLBACK_HTTP_BODY_COMPLETION = 14, /**< the expected amount of http request body has been delivered */ LWS_CALLBACK_HTTP_FILE_COMPLETION = 15, /**< a file requested to be sent down http link has completed. */ LWS_CALLBACK_HTTP_WRITEABLE = 16, /**< you can write more down the http protocol link now. */ LWS_CALLBACK_CLOSED_HTTP = 5, /**< when a HTTP (non-websocket) session ends */ LWS_CALLBACK_FILTER_HTTP_CONNECTION = 18, /**< called when the request has * been received and parsed from the client, but the response is * not sent yet. Return non-zero to disallow the connection. * user is a pointer to the connection user space allocation, * in is the URI, eg, "/" * In your handler you can use the public APIs * lws_hdr_total_length() / lws_hdr_copy() to access all of the * headers using the header enums lws_token_indexes from * libwebsockets.h to check for and read the supported header * presence and content before deciding to allow the http * connection to proceed or to kill the connection. */ LWS_CALLBACK_ADD_HEADERS = 53, /**< This gives your user code a chance to add headers to a server * transaction bound to your protocol. `in` points to a * `struct lws_process_html_args` describing a buffer and length * you can add headers into using the normal lws apis. * * (see LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER to add headers to * a client transaction) * * Only `args->p` and `args->len` are valid, and `args->p` should * be moved on by the amount of bytes written, if any. Eg * * case LWS_CALLBACK_ADD_HEADERS: * * struct lws_process_html_args *args = * (struct lws_process_html_args *)in; * * if (lws_add_http_header_by_name(wsi, * (unsigned char *)"set-cookie:", * (unsigned char *)cookie, cookie_len, * (unsigned char **)&args->p, * (unsigned char *)args->p + args->max_len)) * return 1; * * break; */ LWS_CALLBACK_VERIFY_BASIC_AUTHORIZATION = 102, /**< This gives the user code a chance to accept or reject credentials * provided HTTP to basic authorization. It will only be called if the * http mount's authentication_mode is set to LWSAUTHM_BASIC_AUTH_CALLBACK * `in` points to a credential string of the form `username:password` If * the callback returns zero (the default if unhandled), then the * transaction ends with HTTP_STATUS_UNAUTHORIZED, otherwise the request * will be processed */ LWS_CALLBACK_CHECK_ACCESS_RIGHTS = 51, /**< This gives the user code a chance to forbid an http access. * `in` points to a `struct lws_process_html_args`, which * describes the URL, and a bit mask describing the type of * authentication required. If the callback returns nonzero, * the transaction ends with HTTP_STATUS_UNAUTHORIZED. */ LWS_CALLBACK_PROCESS_HTML = 52, /**< This gives your user code a chance to mangle outgoing * HTML. `in` points to a `struct lws_process_html_args` * which describes the buffer containing outgoing HTML. * The buffer may grow up to `.max_len` (currently +128 * bytes per buffer). */ LWS_CALLBACK_HTTP_BIND_PROTOCOL = 49, /**< By default, all HTTP handling is done in protocols[0]. * However you can bind different protocols (by name) to * different parts of the URL space using callback mounts. This * callback occurs in the new protocol when a wsi is bound * to that protocol. Any protocol allocation related to the * http transaction processing should be created then. * These specific callbacks are necessary because with HTTP/1.1, * a single connection may perform at series of different * transactions at different URLs, thus the lifetime of the * protocol bind is just for one transaction, not connection. */ LWS_CALLBACK_HTTP_DROP_PROTOCOL = 50, /**< This is called when a transaction is unbound from a protocol. * It indicates the connection completed its transaction and may * do something different now. Any protocol allocation related * to the http transaction processing should be destroyed. */ LWS_CALLBACK_HTTP_CONFIRM_UPGRADE = 86, /**< This is your chance to reject an HTTP upgrade action. The * name of the protocol being upgraded to is in 'in', and the ah * is still bound to the wsi, so you can look at the headers. * * The default of returning 0 (ie, also if not handled) means the * upgrade may proceed. Return <0 to just hang up the connection, * or >0 if you have rejected the connection by returning http headers * and response code yourself. * * There is no need for you to call transaction_completed() as the * caller will take care of it when it sees you returned >0. */ /* --------------------------------------------------------------------- * ----- Callbacks related to HTTP Client ----- */ LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP = 44, /**< The HTTP client connection has succeeded, and is now * connected to the server */ LWS_CALLBACK_CLOSED_CLIENT_HTTP = 45, /**< The HTTP client connection is closing */ LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ = 48, /**< This is generated by lws_http_client_read() used to drain * incoming data. In the case the incoming data was chunked, it will * be split into multiple smaller callbacks for each chunk block, * removing the chunk headers. If not chunked, it will appear all in * one callback. */ LWS_CALLBACK_RECEIVE_CLIENT_HTTP = 46, /**< This indicates data was received on the HTTP client connection. It * does NOT actually drain or provide the data, so if you are doing * http client, you MUST handle this and call lws_http_client_read(). * Failure to deal with it as in the minimal examples may cause spinning * around the event loop as it's continuously signalled the same data * is available for read. The related minimal examples show how to * handle it. * * It's possible to defer calling lws_http_client_read() if you use * rx flow control to stop further rx handling on the connection until * you did deal with it. But normally you would call it in the handler. * * lws_http_client_read() strips any chunked framing and calls back * with only payload data to LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ. The * chunking is the reason this is not just all done in one callback for * http. */ LWS_CALLBACK_COMPLETED_CLIENT_HTTP = 47, /**< The client transaction completed... at the moment this * is the same as closing since transaction pipelining on * client side is not yet supported. */ LWS_CALLBACK_CLIENT_HTTP_WRITEABLE = 57, /**< when doing an HTTP type client connection, you can call * lws_client_http_body_pending(wsi, 1) from * LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER to get these callbacks * sending the HTTP headers. * * From this callback, when you have sent everything, you should let * lws know by calling lws_client_http_body_pending(wsi, 0) */ LWS_CALLBACK_CLIENT_HTTP_REDIRECT = 104, /**< we're handling a 3xx redirect... return nonzero to hang up */ LWS_CALLBACK_CLIENT_HTTP_BIND_PROTOCOL = 85, LWS_CALLBACK_CLIENT_HTTP_DROP_PROTOCOL = 76, /* --------------------------------------------------------------------- * ----- Callbacks related to Websocket Server ----- */ LWS_CALLBACK_ESTABLISHED = 0, /**< (VH) after the server completes a handshake with an incoming * client. If you built the library with ssl support, in is a * pointer to the ssl struct associated with the connection or NULL. * * b0 of len is set if the connection was made using ws-over-h2 */ LWS_CALLBACK_CLOSED = 4, /**< when the websocket session ends */ LWS_CALLBACK_SERVER_WRITEABLE = 11, /**< See LWS_CALLBACK_CLIENT_WRITEABLE */ LWS_CALLBACK_RECEIVE = 6, /**< data has appeared for this server endpoint from a * remote client, it can be found at *in and is * len bytes long */ LWS_CALLBACK_RECEIVE_PONG = 7, /**< servers receive PONG packets with this callback reason */ LWS_CALLBACK_WS_PEER_INITIATED_CLOSE = 38, /**< The peer has sent an unsolicited Close WS packet. in and * len are the optional close code (first 2 bytes, network * order) and the optional additional information which is not * defined in the standard, and may be a string or non human-readable * data. * If you return 0 lws will echo the close and then close the * connection. If you return nonzero lws will just close the * connection. */ LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION = 20, /**< called when the handshake has * been received and parsed from the client, but the response is * not sent yet. Return non-zero to disallow the connection. * user is a pointer to the connection user space allocation, * in is the requested protocol name * In your handler you can use the public APIs * lws_hdr_total_length() / lws_hdr_copy() to access all of the * headers using the header enums lws_token_indexes from * libwebsockets.h to check for and read the supported header * presence and content before deciding to allow the handshake * to proceed or to kill the connection. */ LWS_CALLBACK_CONFIRM_EXTENSION_OKAY = 25, /**< When the server handshake code * sees that it does support a requested extension, before * accepting the extension by additing to the list sent back to * the client it gives this callback just to check that it's okay * to use that extension. It calls back to the requested protocol * and with in being the extension name, len is 0 and user is * valid. Note though at this time the ESTABLISHED callback hasn't * happened yet so if you initialize user content there, user * content during this callback might not be useful for anything. */ LWS_CALLBACK_WS_SERVER_BIND_PROTOCOL = 77, LWS_CALLBACK_WS_SERVER_DROP_PROTOCOL = 78, /* --------------------------------------------------------------------- * ----- Callbacks related to Websocket Client ----- */ LWS_CALLBACK_CLIENT_CONNECTION_ERROR = 1, /**< the request client connection has been unable to complete a * handshake with the remote server. If in is non-NULL, you can * find an error string of length len where it points to * * Diagnostic strings that may be returned include * * "getaddrinfo (ipv6) failed" * "unknown address family" * "getaddrinfo (ipv4) failed" * "set socket opts failed" * "insert wsi failed" * "lws_ssl_client_connect1 failed" * "lws_ssl_client_connect2 failed" * "Peer hung up" * "read failed" * "HS: URI missing" * "HS: Redirect code but no Location" * "HS: URI did not parse" * "HS: Redirect failed" * "HS: Server did not return 200" * "HS: OOM" * "HS: disallowed by client filter" * "HS: disallowed at ESTABLISHED" * "HS: ACCEPT missing" * "HS: ws upgrade response not 101" * "HS: UPGRADE missing" * "HS: Upgrade to something other than websocket" * "HS: CONNECTION missing" * "HS: UPGRADE malformed" * "HS: PROTOCOL malformed" * "HS: Cannot match protocol" * "HS: EXT: list too big" * "HS: EXT: failed setting defaults" * "HS: EXT: failed parsing defaults" * "HS: EXT: failed parsing options" * "HS: EXT: Rejects server options" * "HS: EXT: unknown ext" * "HS: Accept hash wrong" * "HS: Rejected by filter cb" * "HS: OOM" * "HS: SO_SNDBUF failed" * "HS: Rejected at CLIENT_ESTABLISHED" */ LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH = 2, /**< this is the last chance for the client user code to examine the * http headers and decide to reject the connection. If the * content in the headers is interesting to the * client (url, etc) it needs to copy it out at * this point since it will be destroyed before * the CLIENT_ESTABLISHED call */ LWS_CALLBACK_CLIENT_ESTABLISHED = 3, /**< after your client connection completed the websocket upgrade * handshake with the remote server */ LWS_CALLBACK_CLIENT_CLOSED = 75, /**< when a client websocket session ends */ LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER = 24, /**< this callback happens * when a client handshake is being compiled. user is NULL, * in is a char **, it's pointing to a char * which holds the * next location in the header buffer where you can add * headers, and len is the remaining space in the header buffer, * which is typically some hundreds of bytes. So, to add a canned * cookie, your handler code might look similar to: * * char **p = (char **)in, *end = (*p) + len; * * if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_COOKIE, * (unsigned char)"a=b", 3, p, end)) * return -1; * * See LWS_CALLBACK_ADD_HEADERS for adding headers to server * transactions. */ LWS_CALLBACK_CLIENT_RECEIVE = 8, /**< data has appeared from the server for the client connection, it * can be found at *in and is len bytes long */ LWS_CALLBACK_CLIENT_RECEIVE_PONG = 9, /**< clients receive PONG packets with this callback reason */ LWS_CALLBACK_CLIENT_WRITEABLE = 10, /**< If you call lws_callback_on_writable() on a connection, you will * get one of these callbacks coming when the connection socket * is able to accept another write packet without blocking. * If it already was able to take another packet without blocking, * you'll get this callback at the next call to the service loop * function. Notice that CLIENTs get LWS_CALLBACK_CLIENT_WRITEABLE * and servers get LWS_CALLBACK_SERVER_WRITEABLE. */ LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED = 26, /**< When a ws client * connection is being prepared to start a handshake to a server, * each supported extension is checked with protocols[0] callback * with this reason, giving the user code a chance to suppress the * claim to support that extension by returning non-zero. If * unhandled, by default 0 will be returned and the extension * support included in the header to the server. Notice this * callback comes to protocols[0]. */ LWS_CALLBACK_WS_EXT_DEFAULTS = 39, /**< Gives client connections an opportunity to adjust negotiated * extension defaults. `user` is the extension name that was * negotiated (eg, "permessage-deflate"). `in` points to a * buffer and `len` is the buffer size. The user callback can * set the buffer to a string describing options the extension * should parse. Or just ignore for defaults. */ LWS_CALLBACK_FILTER_NETWORK_CONNECTION = 17, /**< called when a client connects to * the server at network level; the connection is accepted but then * passed to this callback to decide whether to hang up immediately * or not, based on the client IP. * * user_data in the callback points to a * struct lws_filter_network_conn_args that is prepared with the * sockfd, and the peer's address information. * * in contains the connection socket's descriptor. * * Since the client connection information is not available yet, * wsi still pointing to the main server socket. * * Return non-zero to terminate the connection before sending or * receiving anything. Because this happens immediately after the * network connection from the client, there's no websocket protocol * selected yet so this callback is issued only to protocol 0. */ LWS_CALLBACK_WS_CLIENT_BIND_PROTOCOL = 79, LWS_CALLBACK_WS_CLIENT_DROP_PROTOCOL = 80, /* --------------------------------------------------------------------- * ----- Callbacks related to external poll loop integration ----- */ LWS_CALLBACK_GET_THREAD_ID = 31, /**< lws can accept callback when writable requests from other * threads, if you implement this callback and return an opaque * current thread ID integer. */ /* external poll() management support */ LWS_CALLBACK_ADD_POLL_FD = 32, /**< lws normally deals with its poll() or other event loop * internally, but in the case you are integrating with another * server you will need to have lws sockets share a * polling array with the other server. This and the other * POLL_FD related callbacks let you put your specialized * poll array interface code in the callback for protocol 0, the * first protocol you support, usually the HTTP protocol in the * serving case. * This callback happens when a socket needs to be * added to the polling loop: in points to a struct * lws_pollargs; the fd member of the struct is the file * descriptor, and events contains the active events * * If you are using the internal lws polling / event loop * you can just ignore these callbacks. */ LWS_CALLBACK_DEL_POLL_FD = 33, /**< This callback happens when a socket descriptor * needs to be removed from an external polling array. in is * again the struct lws_pollargs containing the fd member * to be removed. If you are using the internal polling * loop, you can just ignore it. */ LWS_CALLBACK_CHANGE_MODE_POLL_FD = 34, /**< This callback happens when lws wants to modify the events for * a connection. * in is the struct lws_pollargs with the fd to change. * The new event mask is in events member and the old mask is in * the prev_events member. * If you are using the internal polling loop, you can just ignore * it. */ LWS_CALLBACK_LOCK_POLL = 35, /**< These allow the external poll changes driven * by lws to participate in an external thread locking * scheme around the changes, so the whole thing is threadsafe. * These are called around three activities in the library, * - inserting a new wsi in the wsi / fd table (len=1) * - deleting a wsi from the wsi / fd table (len=1) * - changing a wsi's POLLIN/OUT state (len=0) * Locking and unlocking external synchronization objects when * len == 1 allows external threads to be synchronized against * wsi lifecycle changes if it acquires the same lock for the * duration of wsi dereference from the other thread context. */ LWS_CALLBACK_UNLOCK_POLL = 36, /**< See LWS_CALLBACK_LOCK_POLL, ignore if using lws internal poll */ /* --------------------------------------------------------------------- * ----- Callbacks related to CGI serving ----- */ LWS_CALLBACK_CGI = 40, /**< CGI: CGI IO events on stdin / out / err are sent here on * protocols[0]. The provided `lws_callback_http_dummy()` * handles this and the callback should be directed there if * you use CGI. */ LWS_CALLBACK_CGI_TERMINATED = 41, /**< CGI: The related CGI process ended, this is called before * the wsi is closed. Used to, eg, terminate chunking. * The provided `lws_callback_http_dummy()` * handles this and the callback should be directed there if * you use CGI. The child PID that terminated is in len. */ LWS_CALLBACK_CGI_STDIN_DATA = 42, /**< CGI: Data is, to be sent to the CGI process stdin, eg from * a POST body. The provided `lws_callback_http_dummy()` * handles this and the callback should be directed there if * you use CGI. */ LWS_CALLBACK_CGI_STDIN_COMPLETED = 43, /**< CGI: no more stdin is coming. The provided * `lws_callback_http_dummy()` handles this and the callback * should be directed there if you use CGI. */ LWS_CALLBACK_CGI_PROCESS_ATTACH = 70, /**< CGI: Sent when the CGI process is spawned for the wsi. The * len parameter is the PID of the child process */ /* --------------------------------------------------------------------- * ----- Callbacks related to Generic Sessions ----- */ LWS_CALLBACK_SESSION_INFO = 54, /**< This is only generated by user code using generic sessions. * It's used to get a `struct lws_session_info` filled in by * generic sessions with information about the logged-in user. * See the messageboard sample for an example of how to use. */ LWS_CALLBACK_GS_EVENT = 55, /**< Indicates an event happened to the Generic Sessions session. * `in` contains a `struct lws_gs_event_args` describing the event. */ LWS_CALLBACK_HTTP_PMO = 56, /**< per-mount options for this connection, called before * the normal LWS_CALLBACK_HTTP when the mount has per-mount * options. */ /* --------------------------------------------------------------------- * ----- Callbacks related to RAW PROXY ----- */ LWS_CALLBACK_RAW_PROXY_CLI_RX = 89, /**< RAW mode client (outgoing) RX */ LWS_CALLBACK_RAW_PROXY_SRV_RX = 90, /**< RAW mode server (listening) RX */ LWS_CALLBACK_RAW_PROXY_CLI_CLOSE = 91, /**< RAW mode client (outgoing) is closing */ LWS_CALLBACK_RAW_PROXY_SRV_CLOSE = 92, /**< RAW mode server (listening) is closing */ LWS_CALLBACK_RAW_PROXY_CLI_WRITEABLE = 93, /**< RAW mode client (outgoing) may be written */ LWS_CALLBACK_RAW_PROXY_SRV_WRITEABLE = 94, /**< RAW mode server (listening) may be written */ LWS_CALLBACK_RAW_PROXY_CLI_ADOPT = 95, /**< RAW mode client (onward) accepted socket was adopted * (equivalent to 'wsi created') */ LWS_CALLBACK_RAW_PROXY_SRV_ADOPT = 96, /**< RAW mode server (listening) accepted socket was adopted * (equivalent to 'wsi created') */ LWS_CALLBACK_RAW_PROXY_CLI_BIND_PROTOCOL = 97, LWS_CALLBACK_RAW_PROXY_SRV_BIND_PROTOCOL = 98, LWS_CALLBACK_RAW_PROXY_CLI_DROP_PROTOCOL = 99, LWS_CALLBACK_RAW_PROXY_SRV_DROP_PROTOCOL = 100, /* --------------------------------------------------------------------- * ----- Callbacks related to RAW sockets ----- */ LWS_CALLBACK_RAW_RX = 59, /**< RAW mode connection RX */ LWS_CALLBACK_RAW_CLOSE = 60, /**< RAW mode connection is closing */ LWS_CALLBACK_RAW_WRITEABLE = 61, /**< RAW mode connection may be written */ LWS_CALLBACK_RAW_ADOPT = 62, /**< RAW mode connection was adopted (equivalent to 'wsi created') */ LWS_CALLBACK_RAW_CONNECTED = 101, /**< outgoing client RAW mode connection was connected */ LWS_CALLBACK_RAW_SKT_BIND_PROTOCOL = 81, LWS_CALLBACK_RAW_SKT_DROP_PROTOCOL = 82, /* --------------------------------------------------------------------- * ----- Callbacks related to RAW file handles ----- */ LWS_CALLBACK_RAW_ADOPT_FILE = 63, /**< RAW mode file was adopted (equivalent to 'wsi created') */ LWS_CALLBACK_RAW_RX_FILE = 64, /**< This is the indication the RAW mode file has something to read. * This doesn't actually do the read of the file and len is always * 0... your code should do the read having been informed there is * something to read now. */ LWS_CALLBACK_RAW_WRITEABLE_FILE = 65, /**< RAW mode file is writeable */ LWS_CALLBACK_RAW_CLOSE_FILE = 66, /**< RAW mode wsi that adopted a file is closing */ LWS_CALLBACK_RAW_FILE_BIND_PROTOCOL = 83, LWS_CALLBACK_RAW_FILE_DROP_PROTOCOL = 84, /* --------------------------------------------------------------------- * ----- Callbacks related to generic wsi events ----- */ LWS_CALLBACK_TIMER = 73, /**< When the time elapsed after a call to * lws_set_timer_usecs(wsi, usecs) is up, the wsi will get one of * these callbacks. The deadline can be continuously extended into the * future by later calls to lws_set_timer_usecs() before the deadline * expires, or cancelled by lws_set_timer_usecs(wsi, -1); */ LWS_CALLBACK_EVENT_WAIT_CANCELLED = 71, /**< This is sent to every protocol of every vhost in response * to lws_cancel_service() or lws_cancel_service_pt(). This * callback is serialized in the lws event loop normally, even * if the lws_cancel_service[_pt]() call was from a different * thread. */ LWS_CALLBACK_CHILD_CLOSING = 69, /**< Sent to parent to notify them a child is closing / being * destroyed. in is the child wsi. */ LWS_CALLBACK_CONNECTING = 105, /**< Called before a socketfd is about to connect(). In is the * socketfd, cast to a (void *), if on a platform where the socketfd * is an int, recover portably using (lws_sockfd_type)(intptr_t)in. * * It's also called in SOCKS5 or http_proxy cases where the socketfd is * going to try to connect to its proxy. */ /* --------------------------------------------------------------------- * ----- Callbacks related to TLS certificate management ----- */ LWS_CALLBACK_VHOST_CERT_AGING = 72, /**< When a vhost TLS cert has its expiry checked, this callback * is broadcast to every protocol of every vhost in case the * protocol wants to take some action with this information. * \p in is a pointer to a struct lws_acme_cert_aging_args, * and \p len is the number of days left before it expires, as * a (ssize_t). In the struct lws_acme_cert_aging_args, vh * points to the vhost the cert aging information applies to, * and element_overrides[] is an optional way to update information * from the pvos... NULL in an index means use the information from * from the pvo for the cert renewal, non-NULL in the array index * means use that pointer instead for the index. */ LWS_CALLBACK_VHOST_CERT_UPDATE = 74, /**< When a vhost TLS cert is being updated, progress is * reported to the vhost in question here, including completion * and failure. in points to optional JSON, and len represents the * connection state using enum lws_cert_update_state */ /* --------------------------------------------------------------------- * ----- Callbacks related to MQTT Client ----- */ LWS_CALLBACK_MQTT_NEW_CLIENT_INSTANTIATED = 200, LWS_CALLBACK_MQTT_IDLE = 201, LWS_CALLBACK_MQTT_CLIENT_ESTABLISHED = 202, LWS_CALLBACK_MQTT_SUBSCRIBED = 203, LWS_CALLBACK_MQTT_CLIENT_WRITEABLE = 204, LWS_CALLBACK_MQTT_CLIENT_RX = 205, LWS_CALLBACK_MQTT_UNSUBSCRIBED = 206, LWS_CALLBACK_MQTT_DROP_PROTOCOL = 207, LWS_CALLBACK_MQTT_CLIENT_CLOSED = 208, LWS_CALLBACK_MQTT_ACK = 209, /**< When a message is fully sent, if QoS0 this callback is generated * to locally "acknowledge" it. For QoS1, this callback is only * generated when the matching PUBACK is received. Return nonzero to * close the wsi. */ LWS_CALLBACK_MQTT_RESEND = 210, /**< In QoS1 or QoS2, this callback is generated instead of the _ACK one * if we timed out waiting for a PUBACK or a PUBREC, and we must resend * the message. Return nonzero to close the wsi. */ LWS_CALLBACK_MQTT_UNSUBSCRIBE_TIMEOUT = 211, /**< When a UNSUBSCRIBE is sent, this callback is generated instead of * the _UNSUBSCRIBED one if we timed out waiting for a UNSUBACK. * Return nonzero to close the wsi. */ LWS_CALLBACK_MQTT_SHADOW_TIMEOUT = 212, /**< When a Device Shadow is sent, this callback is generated if we * timed out waiting for a response from AWS IoT. * Return nonzero to close the wsi. */ /****** add new things just above ---^ ******/ LWS_CALLBACK_USER = 1000, /**< user code can use any including above without fear of clashes */ }; /** * typedef lws_callback_function() - User server actions * \param wsi: Opaque websocket instance pointer * \param reason: The reason for the call * \param user: Pointer to per-session user data allocated by library * \param in: Pointer used for some callback reasons * \param len: Length set for some callback reasons * * This callback is the way the user controls what is served. All the * protocol detail is hidden and handled by the library. * * For each connection / session there is user data allocated that is * pointed to by "user". You set the size of this user data area when * the library is initialized with lws_create_server. */ typedef int lws_callback_function(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len); #define LWS_CB_REASON_AUX_BF__CGI 1 #define LWS_CB_REASON_AUX_BF__PROXY 2 #define LWS_CB_REASON_AUX_BF__CGI_CHUNK_END 4 #define LWS_CB_REASON_AUX_BF__CGI_HEADERS 8 #define LWS_CB_REASON_AUX_BF__PROXY_TRANS_END 16 #define LWS_CB_REASON_AUX_BF__PROXY_HEADERS 32 ///@} libwebsockets-4.3.5/include/libwebsockets/lws-cgi.h000066400000000000000000000064401476025525100223770ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /*! \defgroup cgi cgi handling * * ##CGI handling * * These functions allow low-level control over stdin/out/err of the cgi. * * However for most cases, binding the cgi to http in and out, the default * lws implementation already does the right thing. */ enum lws_enum_stdinouterr { LWS_STDIN = 0, LWS_STDOUT = 1, LWS_STDERR = 2, }; enum lws_cgi_hdr_state { LCHS_HEADER, LCHS_CR1, LCHS_LF1, LCHS_CR2, LCHS_LF2, LHCS_RESPONSE, LHCS_DUMP_HEADERS, LHCS_PAYLOAD, LCHS_SINGLE_0A, }; struct lws_cgi_args { struct lws **stdwsi; /**< get fd with lws_get_socket_fd() */ enum lws_enum_stdinouterr ch; /**< channel index */ unsigned char *data; /**< for messages with payload */ enum lws_cgi_hdr_state hdr_state; /**< track where we are in cgi headers */ int len; /**< length */ }; #ifdef LWS_WITH_CGI /** * lws_cgi: spawn network-connected cgi process * * \param wsi: connection to own the process * \param exec_array: array of "exec-name" "arg1" ... "argn" NULL * \param script_uri_path_len: how many chars on the left of the uri are the * path to the cgi, or -1 to spawn without URL-related env vars * \param timeout_secs: seconds script should be allowed to run * \param mp_cgienv: pvo list with per-vhost cgi options to put in env */ LWS_VISIBLE LWS_EXTERN int lws_cgi(struct lws *wsi, const char * const *exec_array, int script_uri_path_len, int timeout_secs, const struct lws_protocol_vhost_options *mp_cgienv); /** * lws_cgi_write_split_stdout_headers: write cgi output accounting for header part * * \param wsi: connection to own the process */ LWS_VISIBLE LWS_EXTERN int lws_cgi_write_split_stdout_headers(struct lws *wsi); /** * lws_cgi_kill: terminate cgi process associated with wsi * * \param wsi: connection to own the process */ LWS_VISIBLE LWS_EXTERN int lws_cgi_kill(struct lws *wsi); /** * lws_cgi_get_stdwsi: get wsi for stdin, stdout, or stderr * * \param wsi: parent wsi that has cgi * \param ch: which of LWS_STDIN, LWS_STDOUT or LWS_STDERR */ LWS_VISIBLE LWS_EXTERN struct lws * lws_cgi_get_stdwsi(struct lws *wsi, enum lws_enum_stdinouterr ch); #endif ///@} libwebsockets-4.3.5/include/libwebsockets/lws-client.h000066400000000000000000000405051476025525100231130ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /*! \defgroup client Client related functions * ##Client releated functions * \ingroup lwsapi * * */ ///@{ /** enum lws_client_connect_ssl_connection_flags - flags that may be used * with struct lws_client_connect_info ssl_connection member to control if * and how SSL checks apply to the client connection being created */ enum lws_client_connect_ssl_connection_flags { LCCSCF_USE_SSL = (1 << 0), LCCSCF_ALLOW_SELFSIGNED = (1 << 1), LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK = (1 << 2), LCCSCF_ALLOW_EXPIRED = (1 << 3), LCCSCF_ALLOW_INSECURE = (1 << 4), LCCSCF_H2_QUIRK_NGHTTP2_END_STREAM = (1 << 5), LCCSCF_H2_QUIRK_OVERFLOWS_TXCR = (1 << 6), LCCSCF_H2_AUTH_BEARER = (1 << 7), LCCSCF_H2_HEXIFY_AUTH_TOKEN = (1 << 8), LCCSCF_H2_MANUAL_RXFLOW = (1 << 9), LCCSCF_HTTP_MULTIPART_MIME = (1 << 10), LCCSCF_HTTP_X_WWW_FORM_URLENCODED = (1 << 11), LCCSCF_HTTP_NO_FOLLOW_REDIRECT = (1 << 12), LCCSCF_PIPELINE = (1 << 16), /**< Serialize / pipeline multiple client connections * on a single connection where possible. * * HTTP/1.0: possible if Keep-Alive: yes sent by server * HTTP/1.1: always possible... uses pipelining * HTTP/2: always possible... uses parallel streams */ LCCSCF_MUXABLE_STREAM = (1 << 17), LCCSCF_H2_PRIOR_KNOWLEDGE = (1 << 18), LCCSCF_WAKE_SUSPEND__VALIDITY = (1 << 19), /* our validity checks are important enough to wake from suspend */ LCCSCF_PRIORITIZE_READS = (1 << 20), /**< * Normally lws balances reads and writes on all connections, so both * are possible even on busy connections, and we go around the event * loop more often to facilitate that, even if there is pending data. * * This flag indicates that you want to handle any pending reads on this * connection without yielding the service loop for anything else. This * means you may block other connection processing in favour of incoming * data processing on this one if it receives back to back incoming rx. */ LCCSCF_SECSTREAM_CLIENT = (1 << 21), /**< used to mark client wsi as bound to secure stream */ LCCSCF_SECSTREAM_PROXY_LINK = (1 << 22), /**< client is a link between SS client and SS proxy */ LCCSCF_SECSTREAM_PROXY_ONWARD = (1 << 23), /**< client the SS proxy's onward connection */ LCCSCF_IP_LOW_LATENCY = (1 << 24), /**< set the "low delay" bit on the IP packets of this connection */ LCCSCF_IP_HIGH_THROUGHPUT = (1 << 25), /**< set the "high throughput" bit on the IP packets of this * connection */ LCCSCF_IP_HIGH_RELIABILITY = (1 << 26), /**< set the "high reliability" bit on the IP packets of this * connection */ LCCSCF_IP_LOW_COST = (1 << 27), /**< set the "minimize monetary cost" bit on the IP packets of this * connection */ LCCSCF_CONMON = (1 << 28), /**< If LWS_WITH_CONMON enabled for build, keeps a copy of the * getaddrinfo results so they can be queried subsequently */ LCCSCF_ACCEPT_TLS_DOWNGRADE_REDIRECTS = (1 << 29), /**< By default lws rejects https redirecting to http. Set this * flag on the client connection to allow it. */ LCCSCF_CACHE_COOKIES = (1 << 30), /**< If built with -DLWS_WITH_CACHE_NSCOOKIEJAR, store and reapply * http cookies in a Netscape Cookie Jar on this connection */ }; /** struct lws_client_connect_info - parameters to connect with when using * lws_client_connect_via_info() */ struct lws_client_connect_info { struct lws_context *context; /**< lws context to create connection in */ const char *address; /**< remote address to connect to */ int port; /**< remote port to connect to */ int ssl_connection; /**< 0, or a combination of LCCSCF_ flags */ const char *path; /**< URI path. Prefix with + for a UNIX socket. (+@ for * a Linux abstract-namespace socket) */ const char *host; /**< content of host header */ const char *origin; /**< content of origin header */ const char *protocol; /**< list of ws protocols we could accept */ int ietf_version_or_minus_one; /**< deprecated: currently leave at 0 or -1 */ void *userdata; /**< if non-NULL, use this as wsi user_data instead of malloc it */ const void *client_exts; /**< UNUSED... provide in info.extensions at context creation time */ const char *method; /**< if non-NULL, do this http method instead of ws[s] upgrade. * use "GET" to be a simple http client connection. "RAW" gets * you a connected socket that lws itself will leave alone once * connected. */ struct lws *parent_wsi; /**< if another wsi is responsible for this connection, give it here. * this is used to make sure if the parent closes so do any * child connections first. */ const char *uri_replace_from; /**< if non-NULL, when this string is found in URIs in * text/html content-encoding, it's replaced with uri_replace_to */ const char *uri_replace_to; /**< see uri_replace_from */ struct lws_vhost *vhost; /**< vhost to bind to (used to determine related SSL_CTX) */ struct lws **pwsi; /**< if not NULL, store the new wsi here early in the connection * process. Although we return the new wsi, the call to create the * client connection does progress the connection somewhat and may * meet an error that will result in the connection being scrubbed and * NULL returned. While the wsi exists though, he may process a * callback like CLIENT_CONNECTION_ERROR with his wsi: this gives the * user callback a way to identify which wsi it is that faced the error * even before the new wsi is returned and even if ultimately no wsi * is returned. */ const char *iface; /**< NULL to allow routing on any interface, or interface name or IP * to bind the socket to */ const char *local_protocol_name; /**< NULL: .protocol is used both to select the local protocol handler * to bind to and as the list of remote ws protocols we could * accept. * non-NULL: this protocol name is used to bind the connection to * the local protocol handler. .protocol is used for the * list of remote ws protocols we could accept */ const char *alpn; /**< NULL: allow lws default ALPN list, from vhost if present or from * list of roles built into lws * non-NULL: require one from provided comma-separated list of alpn * tokens */ struct lws_sequencer *seq; /**< NULL, or an lws_seq_t that wants to be given messages about * this wsi's lifecycle as it connects, errors or closes. */ void *opaque_user_data; /**< This data has no meaning to lws but is applied to the client wsi * and can be retrieved by user code with lws_get_opaque_user_data(). * It's also provided with sequencer messages if the wsi is bound to * an lws_seq_t. */ const lws_retry_bo_t *retry_and_idle_policy; /**< optional retry and idle policy to apply to this connection. * Currently only the idle parts are applied to the connection. */ int manual_initial_tx_credit; /**< if LCCSCF_H2_MANUAL_REFLOW is set, this becomes the initial tx * credit for the stream. */ uint8_t sys_tls_client_cert; /**< 0 means no client cert. 1+ means apply lws_system client cert 0+ * to the client connection. */ uint8_t priority; /**< 0 means normal priority... otherwise sets the IP priority on * packets coming from this connection, from 1 - 7. Setting 7 * (network management priority) requires CAP_NET_ADMIN capability but * the others can be set by anyone. */ #if defined(LWS_ROLE_MQTT) const lws_mqtt_client_connect_param_t *mqtt_cp; #else void *mqtt_cp; #endif #if defined(LWS_WITH_SYS_FAULT_INJECTION) lws_fi_ctx_t fic; /**< Attach external Fault Injection context to the client wsi, * hierarchy is wsi -> vhost -> context */ #endif /* for convenience, available when FI disabled in build */ const char *fi_wsi_name; /**< specific Fault Injection namespace name for wsi created for this * connection, allows targeting by "wsi=XXX/..." if you give XXX here. */ uint16_t keep_warm_secs; /**< 0 means 5s. If the client connection to the endpoint becomes idle, * defer closing it for this many seconds in case another outgoing * connection to the same endpoint turns up. */ lws_log_cx_t *log_cx; /**< NULL to use lws_context log context, else a pointer to a log * context template to take a copy of for this wsi. Used to isolate * wsi-specific logs into their own stream or file. */ /* Add new things just above here ---^ * This is part of the ABI, don't needlessly break compatibility * * The below is to ensure later library versions with new * members added above will see 0 (default) even if the app * was not built against the newer headers. */ void *_unused[4]; /**< dummy */ }; /** * lws_client_connect_via_info() - Connect to another websocket server * \param ccinfo: pointer to lws_client_connect_info struct * * This function creates a connection to a remote server using the * information provided in ccinfo. */ LWS_VISIBLE LWS_EXTERN struct lws * lws_client_connect_via_info(const struct lws_client_connect_info *ccinfo); /** * lws_init_vhost_client_ssl() - also enable client SSL on an existing vhost * * \param info: client ssl related info * \param vhost: which vhost to initialize client ssl operations on * * You only need to call this if you plan on using SSL client connections on * the vhost. For non-SSL client connections, it's not necessary to call this. * * The following members of info are used during the call * * - options must have LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT set, * otherwise the call does nothing * - provided_client_ssl_ctx must be NULL to get a generated client * ssl context, otherwise you can pass a prepared one in by setting it * - ssl_cipher_list may be NULL or set to the client valid cipher list * - ssl_ca_filepath may be NULL or client cert filepath * - ssl_cert_filepath may be NULL or client cert filepath * - ssl_private_key_filepath may be NULL or client cert private key * * You must create your vhost explicitly if you want to use this, so you have * a pointer to the vhost. Create the context first with the option flag * LWS_SERVER_OPTION_EXPLICIT_VHOSTS and then call lws_create_vhost() with * the same info struct. */ LWS_VISIBLE LWS_EXTERN int lws_init_vhost_client_ssl(const struct lws_context_creation_info *info, struct lws_vhost *vhost); /** * lws_http_client_read() - consume waiting received http client data * * \param wsi: client connection * \param buf: pointer to buffer pointer - fill with pointer to your buffer * \param len: pointer to chunk length - fill with max length of buffer * * This is called when the user code is notified client http data has arrived. * The user code may choose to delay calling it to consume the data, for example * waiting until an onward connection is writeable. * * For non-chunked connections, up to len bytes of buf are filled with the * received content. len is set to the actual amount filled before return. * * For chunked connections, the linear buffer content contains the chunking * headers and it cannot be passed in one lump. Instead, this function will * call back LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ with in pointing to the * chunk start and len set to the chunk length. There will be as many calls * as there are chunks or partial chunks in the buffer. */ LWS_VISIBLE LWS_EXTERN int lws_http_client_read(struct lws *wsi, char **buf, int *len); /** * lws_http_client_http_response() - get last HTTP response code * * \param wsi: client connection * * Returns the last server response code, eg, 200 for client http connections. * If there is no valid response, it will return 0. * * You should capture this during the LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP * callback, because after that the memory reserved for storing the related * headers is freed and this value is lost. */ LWS_VISIBLE LWS_EXTERN unsigned int lws_http_client_http_response(struct lws *wsi); /** * lws_tls_client_vhost_extra_cert_mem() - add more certs to vh client tls ctx * * \param vh: the vhost to give more client certs to * \param der: pointer to der format additional cert * \param der_len: size in bytes of der * * After the vhost is created with one cert for client verification, you * can add additional, eg, intermediate, certs to the client tls context * of the vhost, for use with validating the incoming server cert(s). */ LWS_VISIBLE LWS_EXTERN int lws_tls_client_vhost_extra_cert_mem(struct lws_vhost *vh, const uint8_t *der, size_t der_len); /** * lws_client_http_body_pending() - control if client connection needs to send body * * \param wsi: client connection * \param something_left_to_send: nonzero if need to send more body, 0 (default) * if nothing more to send * * If you will send payload data with your HTTP client connection, eg, for POST, * when you set the related http headers in * LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER callback you should also call * this API with something_left_to_send nonzero, and call * lws_callback_on_writable(wsi); * * After sending the headers, lws will call your callback with * LWS_CALLBACK_CLIENT_HTTP_WRITEABLE reason when writable. You can send the * next part of the http body payload, calling lws_callback_on_writable(wsi); * if there is more to come, or lws_client_http_body_pending(wsi, 0); to * let lws know the last part is sent and the connection can move on. */ LWS_VISIBLE LWS_EXTERN void lws_client_http_body_pending(struct lws *wsi, int something_left_to_send); /** * lws_client_http_multipart() - issue appropriate multipart header or trailer * * \param wsi: client connection * \param name: multipart header name field, or NULL if end of multipart * \param filename: multipart header filename field, or NULL if none * \param content_type: multipart header content-type part, or NULL if none * \param p: pointer to position in buffer * \param end: end of buffer * * This issues a multipart mime boundary, or terminator if name = NULL. * * Returns 0 if OK or nonzero if couldn't fit in buffer */ LWS_VISIBLE LWS_EXTERN int lws_client_http_multipart(struct lws *wsi, const char *name, const char *filename, const char *content_type, char **p, char *end); /** * lws_http_basic_auth_gen() - helper to encode client basic auth string * * \param user: user name * \param pw: password * \param buf: where to store base64 result * \param len: max usable size of buf * * Encodes a username and password in Basic Auth format for use with the * Authorization header. On return, buf is filled with something like * "Basic QWxhZGRpbjpPcGVuU2VzYW1l". */ LWS_VISIBLE LWS_EXTERN int lws_http_basic_auth_gen(const char *user, const char *pw, char *buf, size_t len); /** * lws_tls_session_is_reused() - returns nonzero if tls session was cached * * \param wsi: the wsi * * Returns zero if the tls session is fresh, else nonzero if the tls session was * taken from the cache. If lws is built with LWS_WITH_TLS_SESSIONS and the vhost * was created with the option LWS_SERVER_OPTION_ENABLE_TLS_SESSION_CACHE, then * on full tls session establishment of a client connection, the session is added * to the tls cache. * * This lets you find out if your session was new (0) or from the cache (nonzero), * it'a mainly useful for stats and testing. */ LWS_VISIBLE LWS_EXTERN int lws_tls_session_is_reused(struct lws *wsi); ///@} libwebsockets-4.3.5/include/libwebsockets/lws-conmon.h000066400000000000000000000130131476025525100231200ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /** \defgroup conmon Connection Latency information * ## Connection Latency information * * When LWS_WITH_CONMON is enabled at build, collects detailed statistics * about the client connection setup latency, available to the connection * itself */ ///@{ /* enough for 4191s, or just over an hour */ typedef uint32_t lws_conmon_interval_us_t; /* * Connection latency information... note that not all wsi actually make * connections, for example h2 streams after the initial one will have 0 * for everything except ciu_txn_resp. * * If represented in JSON, it should look like this * * { * "peer": "46.105.127.147", * "dns_us": 1234, * "dns_disp": 1, * "sockconn_us": 1234, * "tls_us": 1234, * "txn_resp_us": 1234, * "dns":["46.105.127.147", "2001:41d0:2:ee93::1"], * "prot_specific": { * "protocol": "http", * "resp": 200 * } * } * * The indexes in "dns_disp" are declared in lws_conmon_dns_disposition_t * below. * * "prot_specific" may not be present if the protocol doesn't have anything * to report or is not supported. */ typedef enum lws_conmon_pcol { LWSCONMON_PCOL_NONE, LWSCONMON_PCOL_HTTP, /* .protocol_specific.http is valid */ } lws_conmon_pcol_t; typedef enum lws_conmon_dns_disposition { LWSCONMON_DNS_NONE, /**< did not attempt DNS */ LWSCONMON_DNS_OK = 1, /**< DNS lookup did give results */ LWSCONMON_DNS_SERVER_UNREACHABLE = 2, /**< DNS server was not reachable */ LWSCONMON_DNS_NO_RESULT = 3 /**< DNS server replied but nothing usable */ } lws_conmon_dns_disposition_t; struct lws_conmon { lws_sockaddr46 peer46; /**< The peer we actually connected to, if any. .peer46.sa4.sa_family * is either 0 if invalid, or the AF_ */ union { struct { int response; /**< h1 http response code */ } http; } protocol_specific; /**< possibly-present protocol-specific additional information. This * is only valid for the first transaction after connection and does * not capture results for persistent or muxed connections like ws * messages, mqtt messages, or h2 streams */ struct addrinfo *dns_results_copy; /**< NULL, or Allocated copy of dns results, owned by this object and * freed when object destroyed. * Only set if client flag LCCSCF_CONMON applied */ lws_conmon_interval_us_t ciu_dns; /**< 0, or if a socket connection, us taken to acquire this DNS response * */ lws_conmon_interval_us_t ciu_sockconn; /**< 0, or if connection-based, the us interval between the socket * connect() attempt that succeeded, and the connection setup */ lws_conmon_interval_us_t ciu_tls; /**< 0 if no tls, or us taken to establish the tls tunnel */ lws_conmon_interval_us_t ciu_txn_resp; /**< 0, or if the protocol supports transactions, the interval between * sending the initial transaction request and starting to receive the * response */ lws_conmon_pcol_t pcol; /**< indicates which extra protocol_specific info member is valid, * if any */ lws_conmon_dns_disposition_t dns_disposition; /**< indicates general disposition of DNS request */ }; /** * lws_conmon_wsi_take() - create a connection latency object from client wsi * * \param context: lws wsi * \param dest: conmon struct to fill * * Copies wsi conmon data into the caller's struct. Passes ownership of * any allocations in the addrinfo list to the caller, lws will not delete that * any more on wsi close after this call. The caller must call * lws_conmon_release() on the struct to destroy any addrinfo in the struct * that is prepared by this eventually but it can defer it as long as it wants. * * Other than the addrinfo list, the contents of the returned object are * completely selfcontained and don't point outside of the object itself, ie, * everything else in there remains in scope while the object itself does. */ LWS_VISIBLE LWS_EXTERN void lws_conmon_wsi_take(struct lws *wsi, struct lws_conmon *dest); /** * lws_conmon_release() - free any allocations in the conmon struct * * \param conmon: pointer to conmon struct * * Destroys any allocations in the conmon struct so it can go out of scope. * It doesn't free \p dest itself, it's designed to clean out a struct that * is on the stack or embedded in another object. */ LWS_VISIBLE LWS_EXTERN void lws_conmon_release(struct lws_conmon *conmon); ///@} libwebsockets-4.3.5/include/libwebsockets/lws-context-vhost.h000066400000000000000000001566261476025525100244760ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /*! \defgroup context-and-vhost context and vhost related functions * ##Context and Vhost releated functions * \ingroup lwsapi * * * LWS requires that there is one context, in which you may define multiple * vhosts. Each vhost is a virtual host, with either its own listen port * or sharing an existing one. Each vhost has its own SSL context that can * be set up individually or left disabled. * * If you don't care about multiple "site" support, you can ignore it and * lws will create a single default vhost at context creation time. */ ///@{ /* * NOTE: These public enums are part of the abi. If you want to add one, * add it at where specified so existing users are unaffected. */ #define LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT ((1ll << 1) | \ (1ll << 12)) /**< (VH) Don't allow the connection unless the client has a * client cert that we recognize; provides * LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT */ #define LWS_SERVER_OPTION_SKIP_SERVER_CANONICAL_NAME (1ll << 2) /**< (CTX) Don't try to get the server's hostname */ #define LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT ((1ll << 3) | \ (1ll << 12)) /**< (VH) Allow non-SSL (plaintext) connections on the same * port as SSL is listening. If combined with * LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS it will try to * force http connections on an https listener (eg, http://x.com:443) to * redirect to an explicit https connection (eg, https://x.com) */ #define LWS_SERVER_OPTION_LIBEV (1ll << 4) /**< (CTX) Use libev event loop */ #define LWS_SERVER_OPTION_DISABLE_IPV6 (1ll << 5) /**< (VH) Disable IPV6 support */ #define LWS_SERVER_OPTION_DISABLE_OS_CA_CERTS (1ll << 6) /**< (VH) Don't load OS CA certs, you will need to load your * own CA cert(s) */ #define LWS_SERVER_OPTION_PEER_CERT_NOT_REQUIRED (1ll << 7) /**< (VH) Accept connections with no valid Cert (eg, selfsigned) */ #define LWS_SERVER_OPTION_VALIDATE_UTF8 (1ll << 8) /**< (VH) Check UT-8 correctness */ #define LWS_SERVER_OPTION_SSL_ECDH ((1ll << 9) | \ (1ll << 12)) /**< (VH) initialize ECDH ciphers */ #define LWS_SERVER_OPTION_LIBUV (1ll << 10) /**< (CTX) Use libuv event loop */ #define LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS ((1ll << 11) |\ (1ll << 12)) /**< (VH) Use an http redirect to force the client to ask for https. * Notice if your http server issues the STS header and the client has * ever seen that, the client will fail the http connection before it * can actually do the redirect. * * Combine with LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS to handle, eg, * http://x.com:443 -> https://x.com * * (deprecated: use mount redirection) */ #define LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT (1ll << 12) /**< (CTX) Initialize the SSL library at all */ #define LWS_SERVER_OPTION_EXPLICIT_VHOSTS (1ll << 13) /**< (CTX) Only create the context when calling context * create api, implies user code will create its own vhosts */ #define LWS_SERVER_OPTION_UNIX_SOCK (1ll << 14) /**< (VH) Use Unix socket */ #define LWS_SERVER_OPTION_STS (1ll << 15) /**< (VH) Send Strict Transport Security header, making * clients subsequently go to https even if user asked for http */ #define LWS_SERVER_OPTION_IPV6_V6ONLY_MODIFY (1ll << 16) /**< (VH) Enable LWS_SERVER_OPTION_IPV6_V6ONLY_VALUE to take effect */ #define LWS_SERVER_OPTION_IPV6_V6ONLY_VALUE (1ll << 17) /**< (VH) if set, only ipv6 allowed on the vhost */ #define LWS_SERVER_OPTION_UV_NO_SIGSEGV_SIGFPE_SPIN (1ll << 18) /**< (CTX) Libuv only: Do not spin on SIGSEGV / SIGFPE. A segfault * normally makes the lib spin so you can attach a debugger to it * even if it happened without a debugger in place. You can disable * that by giving this option. */ #define LWS_SERVER_OPTION_JUST_USE_RAW_ORIGIN (1ll << 19) /**< For backwards-compatibility reasons, by default * lws prepends "http://" to the origin you give in the client * connection info struct. If you give this flag when you create * the context, only the string you give in the client connect * info for .origin (if any) will be used directly. */ #define LWS_SERVER_OPTION_FALLBACK_TO_RAW /* use below name */ (1ll << 20) #define LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG (1ll << 20) /**< (VH) if invalid http is coming in the first line, then abandon * trying to treat the connection as http, and belatedly apply the * .listen_accept_role / .listen_accept_protocol info struct members to * the connection. If they are NULL, for backwards-compatibility the * connection is bound to "raw-skt" role, and in order of priority: * 1) the vh protocol with a pvo named "raw", 2) the vh protocol with a * pvo named "default", or 3) protocols[0]. * * Must be combined with LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT * to work with a socket listening with tls. */ #define LWS_SERVER_OPTION_LIBEVENT (1ll << 21) /**< (CTX) Use libevent event loop */ #define LWS_SERVER_OPTION_ONLY_RAW /* Use below name instead */ (1ll << 22) #define LWS_SERVER_OPTION_ADOPT_APPLY_LISTEN_ACCEPT_CONFIG (1ll << 22) /**< (VH) All connections to this vhost / port are bound to the * role and protocol given in .listen_accept_role / * .listen_accept_protocol. * * If those explicit user-controlled names are NULL, for backwards- * compatibility the connection is bound to "raw-skt" role, and in order * of priority: 1) the vh protocol with a pvo named "raw", 2) the vh * protocol with a pvo named "default", or 3) protocols[0]. * * It's much preferred to specify the role + protocol using the * .listen_accept_role and .listen_accept_protocol in the info struct. */ #define LWS_SERVER_OPTION_ALLOW_LISTEN_SHARE (1ll << 23) /**< (VH) Set to allow multiple listen sockets on one interface + * address + port. The default is to strictly allow only one * listen socket at a time. This is automatically selected if you * have multiple service threads. Linux only. */ #define LWS_SERVER_OPTION_CREATE_VHOST_SSL_CTX (1ll << 24) /**< (VH) Force setting up the vhost SSL_CTX, even though the user * code doesn't explicitly provide a cert in the info struct. It * implies the user code is going to provide a cert at the * LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS callback, which * provides the vhost SSL_CTX * in the user parameter. */ #define LWS_SERVER_OPTION_SKIP_PROTOCOL_INIT (1ll << 25) /**< (VH) You probably don't want this. It forces this vhost to not * call LWS_CALLBACK_PROTOCOL_INIT on its protocols. It's used in the * special case of a temporary vhost bound to a single protocol. */ #define LWS_SERVER_OPTION_IGNORE_MISSING_CERT (1ll << 26) /**< (VH) Don't fail if the vhost TLS cert or key are missing, just * continue. The vhost won't be able to serve anything, but if for * example the ACME plugin was configured to fetch a cert, this lets * you bootstrap your vhost from having no cert to start with. */ #define LWS_SERVER_OPTION_VHOST_UPG_STRICT_HOST_CHECK (1ll << 27) /**< (VH) On this vhost, if the connection is being upgraded, insist * that there's a Host: header and that the contents match the vhost * name + port (443 / 80 are assumed if no :port given based on if the * connection is using TLS). * * By default, without this flag, on upgrade lws just checks that the * Host: header was given without checking the contents... this is to * allow lax hostname mappings like localhost / 127.0.0.1, and CNAME * mappings like www.mysite.com / mysite.com */ #define LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE (1ll << 28) /**< (VH) Send lws default HTTP headers recommended by Mozilla * Observatory for security. This is a helper option that sends canned * headers on each http response enabling a VERY strict Content Security * Policy. The policy is so strict, for example it won't let the page * run its own inline JS nor show images or take CSS from a different * server. In many cases your JS only comes from your server as do the * image sources and CSS, so that is what you want... attackers hoping * to inject JS into your DOM are completely out of luck since even if * they succeed, it will be rejected for execution by the browser * according to the strict CSP. In other cases you have to deviate from * the complete strictness, in which case don't use this flag: use the * .headers member in the vhost init described in struct * lws_context_creation_info instead to send the adapted headers * yourself. */ #define LWS_SERVER_OPTION_ALLOW_HTTP_ON_HTTPS_LISTENER (1ll << 29) /**< (VH) If you really want to allow HTTP connections on a tls * listener, you can do it with this combined with * LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT. But this is allowing * accidental loss of the security assurances provided by tls depending * on the client using http when he meant https... it's not * recommended. */ #define LWS_SERVER_OPTION_FAIL_UPON_UNABLE_TO_BIND (1ll << 30) /**< (VH) When instantiating a new vhost and the specified port is * already in use, a null value shall be return to signal the error. */ #define LWS_SERVER_OPTION_H2_JUST_FIX_WINDOW_UPDATE_OVERFLOW (1ll << 31) /**< (VH) Indicates the connections using this vhost should ignore * h2 WINDOW_UPDATE from broken peers and fix them up */ #define LWS_SERVER_OPTION_VH_H2_HALF_CLOSED_LONG_POLL (1ll << 32) /**< (VH) Tell the vhost to treat half-closed remote clients as * entered into an immortal (ie, not subject to normal timeouts) long * poll mode. */ #define LWS_SERVER_OPTION_GLIB (1ll << 33) /**< (CTX) Use glib event loop */ #define LWS_SERVER_OPTION_H2_PRIOR_KNOWLEDGE (1ll << 34) /**< (VH) Tell the vhost to treat plain text http connections as * H2 with prior knowledge (no upgrade request involved) */ #define LWS_SERVER_OPTION_NO_LWS_SYSTEM_STATES (1ll << 35) /**< (CTX) Disable lws_system state, eg, because we are a secure streams * proxy client that is not trying to track system state by itself. */ #define LWS_SERVER_OPTION_SS_PROXY (1ll << 36) /**< (VH) We are being a SS Proxy listen socket for the vhost */ #define LWS_SERVER_OPTION_SDEVENT (1ll << 37) /**< (CTX) Use sd-event loop */ #define LWS_SERVER_OPTION_ULOOP (1ll << 38) /**< (CTX) Use libubox / uloop event loop */ #define LWS_SERVER_OPTION_DISABLE_TLS_SESSION_CACHE (1ll << 39) /**< (VHOST) Disallow use of client tls caching (on by default) */ /****** add new things just above ---^ ******/ #define lws_check_opt(c, f) ((((uint64_t)c) & ((uint64_t)f)) == ((uint64_t)f)) struct lws_plat_file_ops; struct lws_ss_policy; struct lws_ss_plugin; struct lws_metric_policy; typedef int (*lws_context_ready_cb_t)(struct lws_context *context); typedef int (*lws_peer_limits_notify_t)(struct lws_context *ctx, lws_sockfd_type sockfd, lws_sockaddr46 *sa46); /** struct lws_context_creation_info - parameters to create context and /or vhost with * * This is also used to create vhosts.... if LWS_SERVER_OPTION_EXPLICIT_VHOSTS * is not given, then for backwards compatibility one vhost is created at * context-creation time using the info from this struct. * * If LWS_SERVER_OPTION_EXPLICIT_VHOSTS is given, then no vhosts are created * at the same time as the context, they are expected to be created afterwards. */ struct lws_context_creation_info { #if defined(LWS_WITH_NETWORK) const char *iface; /**< VHOST: NULL to bind the listen socket to all interfaces, or the * interface name, eg, "eth2" * If options specifies LWS_SERVER_OPTION_UNIX_SOCK, this member is * the pathname of a UNIX domain socket. you can use the UNIX domain * sockets in abstract namespace, by prepending an at symbol to the * socket name. */ const struct lws_protocols *protocols; /**< VHOST: Array of structures listing supported protocols and a * protocol-specific callback for each one. The list is ended with an * entry that has a NULL callback pointer. SEE ALSO .pprotocols below, * which gives an alternative way to provide an array of pointers to * protocol structs. */ #if defined(LWS_ROLE_WS) const struct lws_extension *extensions; /**< VHOST: NULL or array of lws_extension structs listing the * extensions this context supports. */ #endif #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) const struct lws_token_limits *token_limits; /**< CONTEXT: NULL or struct lws_token_limits pointer which is * initialized with a token length limit for each possible WSI_TOKEN_ */ const char *http_proxy_address; /**< VHOST: If non-NULL, attempts to proxy via the given address. * If proxy auth is required, use format * "username:password\@server:port" */ const struct lws_protocol_vhost_options *headers; /**< VHOST: pointer to optional linked list of per-vhost * canned headers that are added to server responses */ const struct lws_protocol_vhost_options *reject_service_keywords; /**< CONTEXT: Optional list of keywords and rejection codes + text. * * The keywords are checked for existing in the user agent string. * * Eg, "badrobot" "404 Not Found" */ const struct lws_protocol_vhost_options *pvo; /**< VHOST: pointer to optional linked list of per-vhost * options made accessible to protocols */ const char *log_filepath; /**< VHOST: filepath to append logs to... this is opened before * any dropping of initial privileges */ const struct lws_http_mount *mounts; /**< VHOST: optional linked list of mounts for this vhost */ const char *server_string; /**< CONTEXT: string used in HTTP headers to identify server * software, if NULL, "libwebsockets". */ const char *error_document_404; /**< VHOST: If non-NULL, when asked to serve a non-existent file, * lws attempts to server this url path instead. Eg, * "/404.html" */ int port; /**< VHOST: Port to listen on. Use CONTEXT_PORT_NO_LISTEN to suppress * listening for a client. Use CONTEXT_PORT_NO_LISTEN_SERVER if you are * writing a server but you are using \ref sock-adopt instead of the * built-in listener. * * You can also set port to 0, in which case the kernel will pick * a random port that is not already in use. You can find out what * port the vhost is listening on using lws_get_vhost_listen_port() */ unsigned int http_proxy_port; /**< VHOST: If http_proxy_address was non-NULL, uses this port */ unsigned int max_http_header_data2; /**< CONTEXT: if max_http_header_data is 0 and this * is nonzero, this will be used in place of the default. It's * like this for compatibility with the original short version, * this is unsigned int length. */ unsigned int max_http_header_pool2; /**< CONTEXT: if max_http_header_pool is 0 and this * is nonzero, this will be used in place of the default. It's * like this for compatibility with the original short version: * this is unsigned int length. */ int keepalive_timeout; /**< VHOST: (default = 0 = 5s, 31s for http/2) seconds to allow remote * client to hold on to an idle HTTP/1.1 connection. Timeout lifetime * applied to idle h2 network connections */ uint32_t http2_settings[7]; /**< VHOST: if http2_settings[0] is nonzero, the values given in * http2_settings[1]..[6] are used instead of the lws * platform default values. * Just leave all at 0 if you don't care. */ unsigned short max_http_header_data; /**< CONTEXT: The max amount of header payload that can be handled * in an http request (unrecognized header payload is dropped) */ unsigned short max_http_header_pool; /**< CONTEXT: The max number of connections with http headers that * can be processed simultaneously (the corresponding memory is * allocated and deallocated dynamically as needed). If the pool is * fully busy new incoming connections must wait for accept until one * becomes free. 0 = allow as many ah as number of availble fds for * the process */ #endif #if defined(LWS_WITH_TLS) const char *ssl_private_key_password; /**< VHOST: NULL or the passphrase needed for the private key. (For * backwards compatibility, this can also be used to pass the client * cert passphrase when setting up a vhost client SSL context, but it is * preferred to use .client_ssl_private_key_password for that.) */ const char *ssl_cert_filepath; /**< VHOST: If libwebsockets was compiled to use ssl, and you want * to listen using SSL, set to the filepath to fetch the * server cert from, otherwise NULL for unencrypted. (For backwards * compatibility, this can also be used to pass the client certificate * when setting up a vhost client SSL context, but it is preferred to * use .client_ssl_cert_filepath for that.) * * Notice you can alternatively set a single DER or PEM from a memory * buffer as the vhost tls cert using \p server_ssl_cert_mem and * \p server_ssl_cert_mem_len. */ const char *ssl_private_key_filepath; /**< VHOST: filepath to private key if wanting SSL mode; * this should not be set to NULL when ssl_cert_filepath is set. * * Alteratively, the certificate and private key can both be set in * the OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS callback directly via * openSSL library calls. This requires that * LWS_SERVER_OPTION_CREATE_VHOST_SSL_CTX is set in the vhost info options * to force initializtion of the SSL_CTX context. * * (For backwards compatibility, this can also be used * to pass the client cert private key filepath when setting up a * vhost client SSL context, but it is preferred to use * .client_ssl_private_key_filepath for that.) * * Notice you can alternatively set a DER or PEM private key from a * memory buffer as the vhost tls private key using * \p server_ssl_private_key_mem and \p server_ssl_private_key_mem_len. */ const char *ssl_ca_filepath; /**< VHOST: CA certificate filepath or NULL. (For backwards * compatibility, this can also be used to pass the client CA * filepath when setting up a vhost client SSL context, * but it is preferred to use .client_ssl_ca_filepath for that.) * * Notice you can alternatively set a DER or PEM CA cert from a memory * buffer using \p server_ssl_ca_mem and \p server_ssl_ca_mem_len. */ const char *ssl_cipher_list; /**< VHOST: List of valid ciphers to use ON TLS1.2 AND LOWER ONLY (eg, * "RC4-MD5:RC4-SHA:AES128-SHA:AES256-SHA:HIGH:!DSS:!aNULL" * or you can leave it as NULL to get "DEFAULT" (For backwards * compatibility, this can also be used to pass the client cipher * list when setting up a vhost client SSL context, * but it is preferred to use .client_ssl_cipher_list for that.) * SEE .tls1_3_plus_cipher_list and .client_tls_1_3_plus_cipher_list * for the equivalent for tls1.3. */ const char *ecdh_curve; /**< VHOST: if NULL, defaults to initializing server with * "prime256v1" */ const char *tls1_3_plus_cipher_list; /**< VHOST: List of valid ciphers to use for incoming server connections * ON TLS1.3 AND ABOVE (eg, "TLS_CHACHA20_POLY1305_SHA256" on this vhost * or you can leave it as NULL to get "DEFAULT". * SEE .client_tls_1_3_plus_cipher_list to do the same on the vhost * client SSL_CTX. */ const void *server_ssl_cert_mem; /**< VHOST: Alternative for \p ssl_cert_filepath that allows setting * from memory instead of from a file. At most one of * \p ssl_cert_filepath or \p server_ssl_cert_mem should be non-NULL. */ const void *server_ssl_private_key_mem; /**< VHOST: Alternative for \p ssl_private_key_filepath allowing * init from a private key in memory instead of a file. At most one * of \p ssl_private_key_filepath or \p server_ssl_private_key_mem * should be non-NULL. */ const void *server_ssl_ca_mem; /**< VHOST: Alternative for \p ssl_ca_filepath allowing * init from a CA cert in memory instead of a file. At most one * of \p ssl_ca_filepath or \p server_ssl_ca_mem should be non-NULL. */ long ssl_options_set; /**< VHOST: Any bits set here will be set as server SSL options */ long ssl_options_clear; /**< VHOST: Any bits set here will be cleared as server SSL options */ int simultaneous_ssl_restriction; /**< CONTEXT: 0 (no limit) or limit of simultaneous SSL sessions * possible.*/ int simultaneous_ssl_handshake_restriction; /**< CONTEXT: 0 (no limit) or limit of simultaneous SSL handshakes ongoing */ int ssl_info_event_mask; /**< VHOST: mask of ssl events to be reported on LWS_CALLBACK_SSL_INFO * callback for connections on this vhost. The mask values are of * the form SSL_CB_ALERT, defined in openssl/ssl.h. The default of * 0 means no info events will be reported. */ unsigned int server_ssl_cert_mem_len; /**< VHOST: Server SSL context init: length of server_ssl_cert_mem in * bytes */ unsigned int server_ssl_private_key_mem_len; /**< VHOST: length of \p server_ssl_private_key_mem in memory */ unsigned int server_ssl_ca_mem_len; /**< VHOST: length of \p server_ssl_ca_mem in memory */ const char *alpn; /**< CONTEXT: If non-NULL, default list of advertised alpn, comma- * separated * * VHOST: If non-NULL, per-vhost list of advertised alpn, comma- * separated */ #if defined(LWS_WITH_CLIENT) const char *client_ssl_private_key_password; /**< VHOST: Client SSL context init: NULL or the passphrase needed * for the private key */ const char *client_ssl_cert_filepath; /**< VHOST: Client SSL context init: The certificate the client * should present to the peer on connection */ const void *client_ssl_cert_mem; /**< VHOST: Client SSL context init: client certificate memory buffer or * NULL... use this to load client cert from memory instead of file */ unsigned int client_ssl_cert_mem_len; /**< VHOST: Client SSL context init: length of client_ssl_cert_mem in * bytes */ const char *client_ssl_private_key_filepath; /**< VHOST: Client SSL context init: filepath to client private key * if this is set to NULL but client_ssl_cert_filepath is set, you * can handle the LWS_CALLBACK_OPENSSL_LOAD_EXTRA_CLIENT_VERIFY_CERTS * callback of protocols[0] to allow setting of the private key directly * via tls library calls */ const void *client_ssl_key_mem; /**< VHOST: Client SSL context init: client key memory buffer or * NULL... use this to load client key from memory instead of file */ const char *client_ssl_ca_filepath; /**< VHOST: Client SSL context init: CA certificate filepath or NULL */ const void *client_ssl_ca_mem; /**< VHOST: Client SSL context init: CA certificate memory buffer or * NULL... use this to load CA cert from memory instead of file */ const char *client_ssl_cipher_list; /**< VHOST: Client SSL context init: List of valid ciphers to use (eg, * "RC4-MD5:RC4-SHA:AES128-SHA:AES256-SHA:HIGH:!DSS:!aNULL" * or you can leave it as NULL to get "DEFAULT" */ const char *client_tls_1_3_plus_cipher_list; /**< VHOST: List of valid ciphers to use for outgoing client connections * ON TLS1.3 AND ABOVE on this vhost (eg, * "TLS_CHACHA20_POLY1305_SHA256") or you can leave it as NULL to get * "DEFAULT". */ long ssl_client_options_set; /**< VHOST: Any bits set here will be set as CLIENT SSL options */ long ssl_client_options_clear; /**< VHOST: Any bits set here will be cleared as CLIENT SSL options */ unsigned int client_ssl_ca_mem_len; /**< VHOST: Client SSL context init: length of client_ssl_ca_mem in * bytes */ unsigned int client_ssl_key_mem_len; /**< VHOST: Client SSL context init: length of client_ssl_key_mem in * bytes */ #endif #if !defined(LWS_WITH_MBEDTLS) SSL_CTX *provided_client_ssl_ctx; /**< CONTEXT: If non-null, swap out libwebsockets ssl * implementation for the one provided by provided_ssl_ctx. * Libwebsockets no longer is responsible for freeing the context * if this option is selected. */ #else /* WITH_MBEDTLS */ const char *mbedtls_client_preload_filepath; /**< CONTEXT: If NULL, no effect. Otherwise it should point to a * filepath where every created client SSL_CTX is preloaded from the * system trust bundle. * * This sets a processwide variable that affects all contexts. * * Requires that the mbedtls provides mbedtls_x509_crt_parse_file(), * else disabled. */ #endif #endif int ka_time; /**< CONTEXT: 0 for no TCP keepalive, otherwise apply this keepalive * timeout to all libwebsocket sockets, client or server */ int ka_probes; /**< CONTEXT: if ka_time was nonzero, after the timeout expires how many * times to try to get a response from the peer before giving up * and killing the connection */ int ka_interval; /**< CONTEXT: if ka_time was nonzero, how long to wait before each ka_probes * attempt */ unsigned int timeout_secs; /**< VHOST: various processes involving network roundtrips in the * library are protected from hanging forever by timeouts. If * nonzero, this member lets you set the timeout used in seconds. * Otherwise a default timeout is used. */ unsigned int connect_timeout_secs; /**< VHOST: client connections have this long to find a working server * from the DNS results, or the whole connection times out. If zero, * a default timeout is used */ int bind_iface; /**< VHOST: nonzero to strictly bind sockets to the interface name in * .iface (eg, "eth2"), using SO_BIND_TO_DEVICE. * * Requires SO_BINDTODEVICE support from your OS and CAP_NET_RAW * capability. * * Notice that common things like access network interface IP from * your local machine use your lo / loopback interface and will be * disallowed by this. */ unsigned int timeout_secs_ah_idle; /**< VHOST: seconds to allow a client to hold an ah without using it. * 0 defaults to 10s. */ #endif /* WITH_NETWORK */ #if defined(LWS_WITH_TLS_SESSIONS) uint32_t tls_session_timeout; /**< VHOST: seconds until timeout/ttl for newly created sessions. * 0 means default timeout (defined per protocol, usually 300s). */ uint32_t tls_session_cache_max; /**< VHOST: 0 for default limit of 10, or the maximum number of * client tls sessions we are willing to cache */ #endif gid_t gid; /**< CONTEXT: group id to change to after setting listen socket, * or -1. See also .username below. */ uid_t uid; /**< CONTEXT: user id to change to after setting listen socket, * or -1. See also .groupname below. */ uint64_t options; /**< VHOST + CONTEXT: 0, or LWS_SERVER_OPTION_... bitfields */ void *user; /**< VHOST + CONTEXT: optional user pointer that will be associated * with the context when creating the context (and can be retrieved by * lws_context_user(context), or with the vhost when creating the vhost * (and can be retrieved by lws_vhost_user(vhost)). You will need to * use LWS_SERVER_OPTION_EXPLICIT_VHOSTS and create the vhost separately * if you care about giving the context and vhost different user pointer * values. */ unsigned int count_threads; /**< CONTEXT: how many contexts to create in an array, 0 = 1 */ unsigned int fd_limit_per_thread; /**< CONTEXT: nonzero means restrict each service thread to this * many fds, 0 means the default which is divide the process fd * limit by the number of threads. * * Note if this is nonzero, and fd_limit_per_thread multiplied by the * number of service threads is less than the process ulimit, then lws * restricts internal lookup table allocation to the smaller size, and * switches to a less efficient lookup scheme. You should use this to * trade off speed against memory usage if you know the lws context * will only use a handful of fds. * * Bear in mind lws may use some fds internally, for example for the * cancel pipe, so you may need to allow for some extras for normal * operation. */ const char *vhost_name; /**< VHOST: name of vhost, must match external DNS name used to * access the site, like "warmcat.com" as it's used to match * Host: header and / or SNI name for SSL. * CONTEXT: NULL, or the name to associate with the context for * context-specific logging */ #if defined(LWS_WITH_PLUGINS) const char * const *plugin_dirs; /**< CONTEXT: NULL, or NULL-terminated array of directories to * scan for lws protocol plugins at context creation time */ #endif void *external_baggage_free_on_destroy; /**< CONTEXT: NULL, or pointer to something externally malloc'd, that * should be freed when the context is destroyed. This allows you to * automatically sync the freeing action to the context destruction * action, so there is no need for an external free() if the context * succeeded to create. */ unsigned int pt_serv_buf_size; /**< CONTEXT: 0 = default of 4096. This buffer is used by * various service related features including file serving, it * defines the max chunk of file that can be sent at once. * At the risk of lws having to buffer failed large sends, it * can be increased to, eg, 128KiB to improve throughput. */ #if defined(LWS_WITH_FILE_OPS) const struct lws_plat_file_ops *fops; /**< CONTEXT: NULL, or pointer to an array of fops structs, terminated * by a sentinel with NULL .open. * * If NULL, lws provides just the platform file operations struct for * backwards compatibility. */ #endif #if defined(LWS_WITH_SOCKS5) const char *socks_proxy_address; /**< VHOST: If non-NULL, attempts to proxy via the given address. * If proxy auth is required, use format * "username:password\@server:port" */ unsigned int socks_proxy_port; /**< VHOST: If socks_proxy_address was non-NULL, uses this port * if nonzero, otherwise requires "server:port" in .socks_proxy_address */ #endif #if defined(LWS_HAVE_SYS_CAPABILITY_H) && defined(LWS_HAVE_LIBCAP) cap_value_t caps[4]; /**< CONTEXT: array holding Linux capabilities you want to * continue to be available to the server after it transitions * to a noprivileged user. Usually none are needed but for, eg, * .bind_iface, CAP_NET_RAW is required. This gives you a way * to still have the capability but drop root. */ char count_caps; /**< CONTEXT: count of Linux capabilities in .caps[]. 0 means * no capabilities will be inherited from root (the default) */ #endif void **foreign_loops; /**< CONTEXT: This is ignored if the context is not being started with * an event loop, ie, .options has a flag like * LWS_SERVER_OPTION_LIBUV. * * NULL indicates lws should start its own even loop for * each service thread, and deal with closing the loops * when the context is destroyed. * * Non-NULL means it points to an array of external * ("foreign") event loops that are to be used in turn for * each service thread. In the default case of 1 service * thread, it can just point to one foreign event loop. */ void (*signal_cb)(void *event_lib_handle, int signum); /**< CONTEXT: NULL: default signal handling. Otherwise this receives * the signal handler callback. event_lib_handle is the * native event library signal handle, eg uv_signal_t * * for libuv. */ struct lws_context **pcontext; /**< CONTEXT: if non-NULL, at the end of context destroy processing, * the pointer pointed to by pcontext is written with NULL. You can * use this to let foreign event loops know that lws context destruction * is fully completed. */ void (*finalize)(struct lws_vhost *vh, void *arg); /**< VHOST: NULL, or pointer to function that will be called back * when the vhost is just about to be freed. The arg parameter * will be set to whatever finalize_arg is below. */ void *finalize_arg; /**< VHOST: opaque pointer lws ignores but passes to the finalize * callback. If you don't care, leave it NULL. */ const char *listen_accept_role; /**< VHOST: NULL for default, or force accepted incoming connections to * bind to this role. Uses the role names from their ops struct, eg, * "raw-skt". */ const char *listen_accept_protocol; /**< VHOST: NULL for default, or force accepted incoming connections to * bind to this vhost protocol name. */ const struct lws_protocols **pprotocols; /**< VHOST: NULL: use .protocols, otherwise ignore .protocols and use * this array of pointers to protocols structs. The end of the array * is marked by a NULL pointer. * * This is preferred over .protocols, because it allows the protocol * struct to be opaquely defined elsewhere, with just a pointer to it * needed to create the context with it. .protocols requires also * the type of the user data to be known so its size can be given. */ const char *username; /**< CONTEXT: string username for post-init * permissions. Like .uid but takes a string username. */ const char *groupname; /**< CONTEXT: string groupname for post-init * permissions. Like .gid but takes a string groupname. */ const char *unix_socket_perms; /**< VHOST: if your vhost is listening * on a unix socket, you can give a "username:groupname" string here * to control the owner:group it's created with. It's always created * with 0660 mode. */ const lws_system_ops_t *system_ops; /**< CONTEXT: hook up lws_system_ apis to system-specific * implementations */ const lws_retry_bo_t *retry_and_idle_policy; /**< VHOST: optional retry and idle policy to apply to this vhost. * Currently only the idle parts are applied to the connections. */ #if defined(LWS_WITH_SYS_STATE) lws_state_notify_link_t * const *register_notifier_list; /**< CONTEXT: NULL, or pointer to an array of notifiers that should * be registered during context creation, so they can see state change * events from very early on. The array should end with a NULL. */ #endif #if defined(LWS_WITH_SECURE_STREAMS) #if defined(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY) const struct lws_ss_policy *pss_policies; /**< CONTEXT: point to first * in a linked-list of streamtype policies prepared by user code */ #else const char *pss_policies_json; /**< CONTEXT: point to a string * containing a JSON description of the secure streams policies. Set * to NULL if not using Secure Streams. * If the platform supports files and the string does not begin with * '{', lws treats the string as a filepath to open to get the JSON * policy. */ #endif const struct lws_ss_plugin **pss_plugins; /**< CONTEXT: point to an array * of pointers to plugin structs here, terminated with a NULL ptr. * Set to NULL if not using Secure Streams. */ const char *ss_proxy_bind; /**< CONTEXT: NULL, or: ss_proxy_port == 0: * point to a string giving the Unix Domain Socket address to use (start * with @ for abstract namespace), ss_proxy_port nonzero: set the * network interface address (not name, it's ambiguous for ipv4/6) to * bind the tcp connection to the proxy to */ const char *ss_proxy_address; /**< CONTEXT: NULL, or if ss_proxy_port * nonzero: the tcp address of the ss proxy to connect to */ uint16_t ss_proxy_port; /* 0 = if connecting to ss proxy, do it via a * Unix Domain Socket, "+@proxy.ss.lws" if ss_proxy_bind is NULL else * the socket path given in ss_proxy_bind (start it with a + or +@); * nonzero means connect via a tcp socket to the tcp address in * ss_proxy_bind and the given port */ #endif int rlimit_nofile; /**< 0 = inherit the initial ulimit for files / sockets from the startup * environment. Nonzero = try to set the limit for this process. */ #if defined(LWS_WITH_PEER_LIMITS) lws_peer_limits_notify_t pl_notify_cb; /**< CONTEXT: NULL, or a callback to receive notifications each time a * connection is being dropped because of peer limits. * * The callback provides the context, and an lws_sockaddr46 with the * peer address and port. */ unsigned short ip_limit_ah; /**< CONTEXT: max number of ah a single IP may use simultaneously * 0 is no limit. This is a soft limit: if the limit is * reached, connections from that IP will wait in the ah * waiting list and not be able to acquire an ah until * a connection belonging to the IP relinquishes one it * already has. */ unsigned short ip_limit_wsi; /**< CONTEXT: max number of wsi a single IP may use simultaneously. * 0 is no limit. This is a hard limit, connections from * the same IP will simply be dropped once it acquires the * amount of simultaneous wsi / accepted connections * given here. */ #endif /* PEER_LIMITS */ #if defined(LWS_WITH_SYS_FAULT_INJECTION) lws_fi_ctx_t fic; /**< CONTEXT | VHOST: attach external Fault Injection context to the * lws_context or vhost. If creating the context + default vhost in * one step, only the context binds to \p fi. When creating a vhost * otherwise this can bind to the vhost so the faults can be injected * from the start. */ #endif #if defined(LWS_WITH_SYS_SMD) lws_smd_notification_cb_t early_smd_cb; /**< CONTEXT: NULL, or an smd notification callback that will be registered * immediately after the smd in the context is initialized. This ensures * you can get all notifications without having to intercept the event loop * creation, eg, when using an event library. Other callbacks can be * registered later manually without problems. */ void *early_smd_opaque; lws_smd_class_t early_smd_class_filter; lws_usec_t smd_ttl_us; /**< CONTEXT: SMD messages older than this many us are removed from the * queue and destroyed even if not fully delivered yet. If zero, * defaults to 2 seconds (5 second for FREERTOS). */ uint16_t smd_queue_depth; /**< CONTEXT: Maximum queue depth, If zero defaults to 40 * (20 for FREERTOS) */ #endif #if defined(LWS_WITH_SYS_METRICS) const struct lws_metric_policy *metrics_policies; /**< CONTEXT: non-SS policy metrics policies */ const char *metrics_prefix; /**< CONTEXT: prefix for this context's metrics, used to distinguish * metrics pooled from different processes / applications, so, eg what * would be "cpu.svc" if this is NULL becomes "myapp.cpu.svc" is this is * set to "myapp". Policies are applied using the name with the prefix, * if present. */ #endif int fo_listen_queue; /**< VHOST: 0 = no TCP_FASTOPEN, nonzero = enable TCP_FASTOPEN if the * platform supports it, with the given queue length for the listen * socket. */ const struct lws_plugin_evlib *event_lib_custom; /**< CONTEXT: If non-NULL, override event library selection so it uses * this custom event library implementation, instead of default internal * loop. Don't set any other event lib context creation flags in that * case. it will be used automatically. This is useful for integration * where an existing application is using its own handrolled event loop * instead of an event library, it provides a way to allow lws to use * the custom event loop natively as if it were an "event library". */ #if defined(LWS_WITH_TLS_JIT_TRUST) size_t jitt_cache_max_footprint; /**< CONTEXT: 0 for no limit, else max bytes used by JIT Trust cache... * LRU items are evicted to keep under this limit */ int vh_idle_grace_ms; /**< CONTEXT: 0 for default of 5000ms, or number of ms JIT Trust vhosts * are allowed to live without active connections using them. */ #endif lws_log_cx_t *log_cx; /**< CONTEXT: NULL to use the default, process-scope logging context, * else a specific logging context to associate with this context */ #if defined(LWS_WITH_CACHE_NSCOOKIEJAR) && defined(LWS_WITH_CLIENT) const char *http_nsc_filepath; /**< CONTEXT: Filepath to use for http netscape cookiejar file */ size_t http_nsc_heap_max_footprint; /**< CONTEXT: 0, or limit in bytes for heap usage of memory cookie * cache */ size_t http_nsc_heap_max_items; /**< CONTEXT: 0, or the max number of items allowed in the cookie cache * before destroying lru items to keep it under the limit */ size_t http_nsc_heap_max_payload; /**< CONTEXT: 0, or the maximum size of a single cookie we are able to * handle */ #endif /* Add new things just above here ---^ * This is part of the ABI, don't needlessly break compatibility * * The below is to ensure later library versions with new * members added above will see 0 (default) even if the app * was not built against the newer headers. */ void *_unused[2]; /**< dummy */ }; /** * lws_create_context() - Create the websocket handler * \param info: pointer to struct with parameters * * This function creates the listening socket (if serving) and takes care * of all initialization in one step. * * If option LWS_SERVER_OPTION_EXPLICIT_VHOSTS is given, no vhost is * created; you're expected to create your own vhosts afterwards using * lws_create_vhost(). Otherwise a vhost named "default" is also created * using the information in the vhost-related members, for compatibility. * * After initialization, it returns a struct lws_context * that * represents this server. After calling, user code needs to take care * of calling lws_service() with the context pointer to get the * server's sockets serviced. This must be done in the same process * context as the initialization call. * * The protocol callback functions are called for a handful of events * including http requests coming in, websocket connections becoming * established, and data arriving; it's also called periodically to allow * async transmission. * * HTTP requests are sent always to the FIRST protocol in protocol, since * at that time websocket protocol has not been negotiated. Other * protocols after the first one never see any HTTP callback activity. * * The server created is a simple http server by default; part of the * websocket standard is upgrading this http connection to a websocket one. * * This allows the same server to provide files like scripts and favicon / * images or whatever over http and dynamic data over websockets all in * one place; they're all handled in the user callback. */ LWS_VISIBLE LWS_EXTERN struct lws_context * lws_create_context(const struct lws_context_creation_info *info); /** * lws_context_destroy() - Destroy the websocket context * \param context: Websocket context * * This function closes any active connections and then frees the * context. After calling this, any further use of the context is * undefined. */ LWS_VISIBLE LWS_EXTERN void lws_context_destroy(struct lws_context *context); typedef int (*lws_reload_func)(void); /** * lws_context_deprecate() - Deprecate the websocket context * * \param context: Websocket context * \param cb: Callback notified when old context listen sockets are closed * * This function is used on an existing context before superceding it * with a new context. * * It closes any listen sockets in the context, so new connections are * not possible. * * And it marks the context to be deleted when the number of active * connections into it falls to zero. * * This is aimed at allowing seamless configuration reloads. * * The callback cb will be called after the listen sockets are actually * closed and may be reopened. In the callback the new context should be * configured and created. (With libuv, socket close happens async after * more loop events). */ LWS_VISIBLE LWS_EXTERN void lws_context_deprecate(struct lws_context *context, lws_reload_func cb); LWS_VISIBLE LWS_EXTERN int lws_context_is_deprecated(struct lws_context *context); /** * lws_set_proxy() - Setups proxy to lws_context. * \param vhost: pointer to struct lws_vhost you want set proxy for * \param proxy: pointer to c string containing proxy in format address:port * * Returns 0 if proxy string was parsed and proxy was setup. * Returns -1 if proxy is NULL or has incorrect format. * * This is only required if your OS does not provide the http_proxy * environment variable (eg, OSX) * * IMPORTANT! You should call this function right after creation of the * lws_context and before call to connect. If you call this * function after connect behavior is undefined. * This function will override proxy settings made on lws_context * creation with genenv() call. */ LWS_VISIBLE LWS_EXTERN int lws_set_proxy(struct lws_vhost *vhost, const char *proxy); /** * lws_set_socks() - Setup socks to lws_context. * \param vhost: pointer to struct lws_vhost you want set socks for * \param socks: pointer to c string containing socks in format address:port * * Returns 0 if socks string was parsed and socks was setup. * Returns -1 if socks is NULL or has incorrect format. * * This is only required if your OS does not provide the socks_proxy * environment variable (eg, OSX) * * IMPORTANT! You should call this function right after creation of the * lws_context and before call to connect. If you call this * function after connect behavior is undefined. * This function will override proxy settings made on lws_context * creation with genenv() call. */ LWS_VISIBLE LWS_EXTERN int lws_set_socks(struct lws_vhost *vhost, const char *socks); struct lws_vhost; /** * lws_create_vhost() - Create a vhost (virtual server context) * \param context: pointer to result of lws_create_context() * \param info: pointer to struct with parameters * * This function creates a virtual server (vhost) using the vhost-related * members of the info struct. You can create many vhosts inside one context * if you created the context with the option LWS_SERVER_OPTION_EXPLICIT_VHOSTS */ LWS_VISIBLE LWS_EXTERN struct lws_vhost * lws_create_vhost(struct lws_context *context, const struct lws_context_creation_info *info); /** * lws_vhost_destroy() - Destroy a vhost (virtual server context) * * \param vh: pointer to result of lws_create_vhost() * * This function destroys a vhost. Normally, if you just want to exit, * then lws_destroy_context() will take care of everything. If you want * to destroy an individual vhost and all connections and allocations, you * can do it with this. * * If the vhost has a listen sockets shared by other vhosts, it will be given * to one of the vhosts sharing it rather than closed. * * The vhost close is staged according to the needs of the event loop, and if * there are multiple service threads. At the point the vhost itself if * about to be freed, if you provided a finalize callback and optional arg at * vhost creation time, it will be called just before the vhost is freed. */ LWS_VISIBLE LWS_EXTERN void lws_vhost_destroy(struct lws_vhost *vh); /** * lwsws_get_config_globals() - Parse a JSON server config file * \param info: pointer to struct with parameters * \param d: filepath of the config file * \param config_strings: storage for the config strings extracted from JSON, * the pointer is incremented as strings are stored * \param len: pointer to the remaining length left in config_strings * the value is decremented as strings are stored * * This function prepares a n lws_context_creation_info struct with global * settings from a file d. * * Requires CMake option LWS_WITH_LEJP_CONF to have been enabled */ LWS_VISIBLE LWS_EXTERN int lwsws_get_config_globals(struct lws_context_creation_info *info, const char *d, char **config_strings, int *len); /** * lwsws_get_config_vhosts() - Create vhosts from a JSON server config file * \param context: pointer to result of lws_create_context() * \param info: pointer to struct with parameters * \param d: filepath of the config file * \param config_strings: storage for the config strings extracted from JSON, * the pointer is incremented as strings are stored * \param len: pointer to the remaining length left in config_strings * the value is decremented as strings are stored * * This function creates vhosts into a context according to the settings in *JSON files found in directory d. * * Requires CMake option LWS_WITH_LEJP_CONF to have been enabled */ LWS_VISIBLE LWS_EXTERN int lwsws_get_config_vhosts(struct lws_context *context, struct lws_context_creation_info *info, const char *d, char **config_strings, int *len); /** * lws_get_vhost() - return the vhost a wsi belongs to * * \param wsi: which connection */ LWS_VISIBLE LWS_EXTERN struct lws_vhost * lws_get_vhost(struct lws *wsi); /** * lws_get_vhost_name() - returns the name of a vhost * * \param vhost: which vhost */ LWS_VISIBLE LWS_EXTERN const char * lws_get_vhost_name(struct lws_vhost *vhost); /** * lws_get_vhost_by_name() - returns the vhost with the requested name, or NULL * * \param context: the lws_context to look in * \param name: vhost name we are looking for * * Returns NULL, or the vhost with the name \p name */ LWS_VISIBLE LWS_EXTERN struct lws_vhost * lws_get_vhost_by_name(struct lws_context *context, const char *name); /** * lws_get_vhost_port() - returns the port a vhost listens on, or -1 * * \param vhost: which vhost */ LWS_VISIBLE LWS_EXTERN int lws_get_vhost_port(struct lws_vhost *vhost); /** * lws_get_vhost_user() - returns the user pointer for the vhost * * \param vhost: which vhost */ LWS_VISIBLE LWS_EXTERN void * lws_get_vhost_user(struct lws_vhost *vhost); /** * lws_get_vhost_iface() - returns the binding for the vhost listen socket * * \param vhost: which vhost */ LWS_VISIBLE LWS_EXTERN const char * lws_get_vhost_iface(struct lws_vhost *vhost); /** * lws_json_dump_vhost() - describe vhost state and stats in JSON * * \param vh: the vhost * \param buf: buffer to fill with JSON * \param len: max length of buf */ LWS_VISIBLE LWS_EXTERN int lws_json_dump_vhost(const struct lws_vhost *vh, char *buf, int len); /** * lws_json_dump_context() - describe context state and stats in JSON * * \param context: the context * \param buf: buffer to fill with JSON * \param len: max length of buf * \param hide_vhosts: nonzero to not provide per-vhost mount etc information * * Generates a JSON description of vhost state into buf */ LWS_VISIBLE LWS_EXTERN int lws_json_dump_context(const struct lws_context *context, char *buf, int len, int hide_vhosts); /** * lws_vhost_user() - get the user data associated with the vhost * \param vhost: Websocket vhost * * This returns the optional user pointer that can be attached to * a vhost when it was created. Lws never dereferences this pointer, it only * sets it when the vhost is created, and returns it using this api. */ LWS_VISIBLE LWS_EXTERN void * lws_vhost_user(struct lws_vhost *vhost); /** * lws_context_user() - get the user data associated with the context * \param context: Websocket context * * This returns the optional user allocation that can be attached to * the context the sockets live in at context_create time. It's a way * to let all sockets serviced in the same context share data without * using globals statics in the user code. */ LWS_VISIBLE LWS_EXTERN void * lws_context_user(struct lws_context *context); LWS_VISIBLE LWS_EXTERN const char * lws_vh_tag(struct lws_vhost *vh); /** * lws_context_is_being_destroyed() - find out if context is being destroyed * * \param context: the struct lws_context pointer * * Returns nonzero if the context has had lws_context_destroy() called on it... * when using event library loops the destroy process can be asynchronous. In * the special case of libuv foreign loops, the failure to create the context * may have to do work on the foreign loop to reverse the partial creation, * meaning a failed context create cannot unpick what it did and return NULL. * * In that condition, a valid context that is already started the destroy * process is returned, and this test api will return nonzero as a way to * find out the create is in the middle of failing. */ LWS_VISIBLE LWS_EXTERN int lws_context_is_being_destroyed(struct lws_context *context); /*! \defgroup vhost-mounts Vhost mounts and options * \ingroup context-and-vhost-creation * * ##Vhost mounts and options */ ///@{ /** struct lws_protocol_vhost_options - linked list of per-vhost protocol * name=value options * * This provides a general way to attach a linked-list of name=value pairs, * which can also have an optional child link-list using the options member. */ struct lws_protocol_vhost_options { const struct lws_protocol_vhost_options *next; /**< linked list */ const struct lws_protocol_vhost_options *options; /**< child linked-list of more options for this node */ const char *name; /**< name of name=value pair */ const char *value; /**< value of name=value pair */ }; /** enum lws_mount_protocols * This specifies the mount protocol for a mountpoint, whether it is to be * served from a filesystem, or it is a cgi etc. */ enum lws_mount_protocols { LWSMPRO_HTTP = 0, /**< http reverse proxy */ LWSMPRO_HTTPS = 1, /**< https reverse proxy */ LWSMPRO_FILE = 2, /**< serve from filesystem directory */ LWSMPRO_CGI = 3, /**< pass to CGI to handle */ LWSMPRO_REDIR_HTTP = 4, /**< redirect to http:// url */ LWSMPRO_REDIR_HTTPS = 5, /**< redirect to https:// url */ LWSMPRO_CALLBACK = 6, /**< hand by named protocol's callback */ }; /** enum lws_authentication_mode * This specifies the authentication mode of the mount. The basic_auth_login_file mount parameter * is ignored unless LWSAUTHM_DEFAULT is set. */ enum lws_authentication_mode { LWSAUTHM_DEFAULT = 0, /**< default authenticate only if basic_auth_login_file is provided */ LWSAUTHM_BASIC_AUTH_CALLBACK = 1 << 28 /**< Basic auth with a custom verifier */ }; /** The authentication mode is stored in the top 4 bits of lws_http_mount.auth_mask */ #define AUTH_MODE_MASK 0xF0000000 /** struct lws_http_mount * * arguments for mounting something in a vhost's url namespace */ struct lws_http_mount { const struct lws_http_mount *mount_next; /**< pointer to next struct lws_http_mount */ const char *mountpoint; /**< mountpoint in http pathspace, eg, "/" */ const char *origin; /**< path to be mounted, eg, "/var/www/warmcat.com" */ const char *def; /**< default target, eg, "index.html" */ const char *protocol; /**<"protocol-name" to handle mount */ const struct lws_protocol_vhost_options *cgienv; /**< optional linked-list of cgi options. These are created * as environment variables for the cgi process */ const struct lws_protocol_vhost_options *extra_mimetypes; /**< optional linked-list of mimetype mappings */ const struct lws_protocol_vhost_options *interpret; /**< optional linked-list of files to be interpreted */ int cgi_timeout; /**< seconds cgi is allowed to live, if cgi://mount type */ int cache_max_age; /**< max-age for reuse of client cache of files, seconds */ unsigned int auth_mask; /**< bits set here must be set for authorized client session */ unsigned int cache_reusable:1; /**< set if client cache may reuse this */ unsigned int cache_revalidate:1; /**< set if client cache should revalidate on use */ unsigned int cache_intermediaries:1; /**< set if intermediaries are allowed to cache */ unsigned char origin_protocol; /**< one of enum lws_mount_protocols */ unsigned char mountpoint_len; /**< length of mountpoint string */ const char *basic_auth_login_file; /** * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /** \defgroup cose COSE apis * ##COSE related functions * \ingroup lwsaoi * * COSE RFC 8152 relates to signed and encrypted CBOR */ //@{ enum { /* RFC8152: Table 2: Common Header Parameters * https://www.iana.org/assignments/cose/cose.xhtml#header-parameters */ LWSCOSE_WKL_ALG = 1, /* int / tstr */ LWSCOSE_WKL_CRIT, /* [+ label ] */ LWSCOSE_WKL_CONTENT_TYPE, /* tstr / uint */ LWSCOSE_WKL_KID, /* bstr */ LWSCOSE_WKL_IV, /* bstr */ LWSCOSE_WKL_IV_PARTIAL, /* bstr */ LWSCOSE_WKL_COUNTERSIG, /* COSE sig(s) */ LWSCOSE_WKL_COUNTERSIG0 = 9, /* bstr */ LWSCOSE_WKL_KID_CONTEXT, /* bstr */ LWSCOSE_WKL_CUPH_NONCE = 256, /* bstr */ LWSCOSE_WKL_CUPH_OWNER_PUBKEY = 257, /* array */ /* RFC8152: Table 3: key map labels */ LWSCOSE_WKK_KTY = 1, /* int / tstr */ LWSCOSE_WKK_KID, /* bstr */ LWSCOSE_WKK_ALG, /* int / tstr */ LWSCOSE_WKK_KEY_OPS, /* [ + (int / tstr) ] */ LWSCOSE_WKK_BASE_IV, /* bstr */ /* RFC8152: Table 4: Key Operation Values */ LWSCOSE_WKKO_SIGN = 1, LWSCOSE_WKKO_VERIFY, LWSCOSE_WKKO_ENCRYPT, LWSCOSE_WKKO_DECRYPT, LWSCOSE_WKKO_WRAP_KEY, LWSCOSE_WKKO_UNWRAP_KEY, LWSCOSE_WKKO_DERIVE_KEY, LWSCOSE_WKKO_DERIVE_BITS, LWSCOSE_WKKO_MAC_CREATE, LWSCOSE_WKKO_MAC_VERIFY, /* RFC8152: Table 5: ECDSA algs */ LWSCOSE_WKAECDSA_ALG_ES256 = -7, LWSCOSE_WKAECDSA_ALG_ES384 = -35, LWSCOSE_WKAECDSA_ALG_ES512 = -36, /* RFC8152: Table 6: EDDSA algs */ LWSCOSE_WKAEDDSA_ALG_EDDSA = -8, /* RFC8152: Table 7: HMAC algs */ LWSCOSE_WKAHMAC_256_64 = 4, LWSCOSE_WKAHMAC_256_256, LWSCOSE_WKAHMAC_384_384, LWSCOSE_WKAHMAC_512_512, /* RFC8152: Table 8: AES algs */ LWSCOSE_WKAAES_128_64 = 14, LWSCOSE_WKAAES_256_64, LWSCOSE_WKAAES_128_128 = 25, LWSCOSE_WKAAES_256_128, /* RFC8152: Table 9: AES GCM algs */ LWSCOSE_WKAAESGCM_128 = 1, LWSCOSE_WKAAESGCM_192, LWSCOSE_WKAAESGCM_256, /* RFC8152: Table 10: AES CCM algs */ LWSCOSE_WKAAESCCM_16_64_128 = 10, LWSCOSE_WKAAESCCM_16_64_256, LWSCOSE_WKAAESCCM_64_64_128, LWSCOSE_WKAAESCCM_64_64_256, LWSCOSE_WKAAESCCM_16_128_128, LWSCOSE_WKAAESCCM_16_128_256, LWSCOSE_WKAAESCCM_64_128_128, LWSCOSE_WKAAESCCM_64_128_256, /* RFC8152: Table 11: CHACHA20 / Poly1305 */ LWSCOSE_WKACHACHA_POLY1305 = 24, /* RFC8152: Table 13: HKDF param */ LWSCOSE_WKAPHKDF_SALT = -20, /* RFC8152: Table 14: Context Algorithm Parameters */ LWSCOSE_WKAPCTX_PARTY_U_IDENTITY = -21, LWSCOSE_WKAPCTX_PARTY_U_NONCE = -22, LWSCOSE_WKAPCTX_PARTY_U_OTHER = -23, LWSCOSE_WKAPCTX_PARTY_V_IDENTITY = -24, LWSCOSE_WKAPCTX_PARTY_V_NONCE = -25, LWSCOSE_WKAPCTX_PARTY_V_OTHER = -26, /* RFC8152: Table 15: Direct key */ LWSCOSE_WKK_DIRECT_CEK = -6, /* RFC8152: Table 16: Direct key with KDF */ LWSCOSE_WKK_DIRECT_HKDF_SHA_256 = -10, LWSCOSE_WKK_DIRECT_HKDF_SHA_512 = -11, LWSCOSE_WKK_DIRECT_HKDF_AES_128 = -12, LWSCOSE_WKK_DIRECT_HKDF_AES_256 = -13, /* RFC8152: Table 17: AES Key Wrap Algorithm Values */ LWSCOSE_WKK_DIRECT_HKDFKW_SHA_256 = -3, LWSCOSE_WKK_DIRECT_HKDFKW_SHA_512 = -4, LWSCOSE_WKK_DIRECT_HKDFKW_AES_128 = -5, /* RFC8152: Table 18: ECDH Algorithm Values */ LWSCOSE_WKAECDH_ALG_ES_HKDF_256 = -25, LWSCOSE_WKAECDH_ALG_ES_HKDF_512 = -26, LWSCOSE_WKAECDH_ALG_SS_HKDF_256 = -27, LWSCOSE_WKAECDH_ALG_SS_HKDF_512 = -28, /* RFC8152: Table 19: ECDH Algorithm Parameters */ LWSCOSE_WKAPECDH_EPHEMERAL_KEY = -1, LWSCOSE_WKAPECDH_STATIC_KEY = -2, LWSCOSE_WKAPECDH_STATIC_KEY_ID = -3, /* RFC8152: Table 20: ECDH Algorithm Parameters with key wrap */ LWSCOSE_WKAPECDH_ES_A128KW = -29, LWSCOSE_WKAPECDH_ES_A192KW = -30, LWSCOSE_WKAPECDH_ES_A256KW = -31, LWSCOSE_WKAPECDH_SS_A128KW = -32, LWSCOSE_WKAPECDH_SS_A192KW = -33, LWSCOSE_WKAPECDH_SS_A256KW = -34, /* RFC8152: Table 21: Key Type Values * https://www.iana.org/assignments/cose/cose.xhtml#key-type */ LWSCOSE_WKKTV_OKP = 1, LWSCOSE_WKKTV_EC2 = 2, LWSCOSE_WKKTV_RSA = 3, LWSCOSE_WKKTV_SYMMETRIC = 4, LWSCOSE_WKKTV_HSS_LMS = 5, LWSCOSE_WKKTV_WALNUTDSA = 6, /* RFC8152: Table 22: Elliptic Curves * https://www.iana.org/assignments/cose/cose.xhtml#elliptic-curves */ LWSCOSE_WKEC_P256 = 1, LWSCOSE_WKEC_P384, LWSCOSE_WKEC_P521, LWSCOSE_WKEC_X25519, LWSCOSE_WKEC_X448, LWSCOSE_WKEC_ED25519, LWSCOSE_WKEC_ED448, LWSCOSE_WKEC_SECP256K1, /* RFC8152: Table 23: EC Key Parameters */ LWSCOSE_WKECKP_CRV = -1, LWSCOSE_WKECKP_X = -2, LWSCOSE_WKECKP_Y = -3, LWSCOSE_WKECKP_D = -4, /* RFC8152: Table 24: Octet Key Pair (OKP) Parameters */ LWSCOSE_WKOKP_CRV = -1, LWSCOSE_WKOKP_X = -2, LWSCOSE_WKOKP_D = -4, /* Additional from * https://www.iana.org/assignments/cose/cose.xhtml#key-type-parameters */ LWSCOSE_WKKPRSA_N = -1, LWSCOSE_WKKPRSA_E = -2, LWSCOSE_WKKPRSA_D = -3, LWSCOSE_WKKPRSA_P = -4, LWSCOSE_WKKPRSA_Q = -5, LWSCOSE_WKKPRSA_DP = -6, LWSCOSE_WKKPRSA_DQ = -7, LWSCOSE_WKKPRSA_QINV = -8, LWSCOSE_WKKPRSA_OTHER = -9, LWSCOSE_WKKPRSA_RI = -10, LWSCOSE_WKKPRSA_DI = -11, LWSCOSE_WKKPRSA_TI = -12, /* RFC8152: Table 25: Symmetric Key Parameters */ LWSCOSE_WKSYMKP_KEY_VALUE = 4, /* RFC8152: Table 26: CoAP Content-Formats for COSE */ LWSCOAP_CONTENTFORMAT_COSE_SIGN = 98, LWSCOAP_CONTENTFORMAT_COSE_SIGN1 = 18, LWSCOAP_CONTENTFORMAT_COSE_ENCRYPT = 96, LWSCOAP_CONTENTFORMAT_COSE_ENCRYPT0 = 16, LWSCOAP_CONTENTFORMAT_COSE_MAC = 97, LWSCOAP_CONTENTFORMAT_COSE_MAC0 = 17, LWSCOAP_CONTENTFORMAT_COSE_KEY = 101, LWSCOAP_CONTENTFORMAT_COSE_KEY_SET = 102, /* RFC8152: Table 27: Header Parameter for CounterSignature0 */ LWSCOSE_WKL_COUNTERSIGNATURE0 = 9, /* bstr */ /* RFC8812: Table 1: RSASSA-PKCS1-v1_5 Algorithm Values */ LWSCOSE_WKARSA_ALG_RS256 = -257, /* + SHA-256 */ LWSCOSE_WKARSA_ALG_RS384 = -258, /* + SHA-384 */ LWSCOSE_WKARSA_ALG_RS512 = -259, /* + SHA-512 */ }; enum enum_cose_key_meta_tok { COSEKEY_META_KTY, COSEKEY_META_KID, COSEKEY_META_KEY_OPS, COSEKEY_META_BASE_IV, COSEKEY_META_ALG, LWS_COUNT_COSE_KEY_ELEMENTS }; typedef int64_t cose_param_t; LWS_VISIBLE LWS_EXTERN const char * lws_cose_alg_to_name(cose_param_t alg); LWS_VISIBLE LWS_EXTERN cose_param_t lws_cose_name_to_alg(const char *name); /* * cose_key */ typedef struct lws_cose_key { /* key data elements */ struct lws_gencrypto_keyelem e[LWS_GENCRYPTO_MAX_KEYEL_COUNT]; /* generic meta key elements, like KID */ struct lws_gencrypto_keyelem meta[LWS_COUNT_COSE_KEY_ELEMENTS]; lws_dll2_t list; /* used when part of a set */ int gencrypto_kty; /**< one of LWS_GENCRYPTO_KTY_ */ cose_param_t kty; cose_param_t cose_alg; cose_param_t cose_curve; char private_key; /* nonzero = has private key elements */ } lws_cose_key_t; typedef int (*lws_cose_key_import_callback)(struct lws_cose_key *s, void *user); /** lws_cose_jwk_import() - Create an lws_cose_key_t object from cose_key CBOR * * \param pkey_set: NULL, or a pointer to an lws_dll2_owner_t for a cose_key set * \param cb: callback for each jwk-processed key, or NULL if importing a single * key with no parent "keys" JSON * \param user: pointer to be passed to the callback, otherwise ignored by lws. * NULL if importing a single key with no parent "keys" JSON * \param in: a single cose_key * \param len: the length of the cose_key in bytes * * Creates a single lws_cose_key_t if \p pkey_set is NULL or if the incoming * CBOR doesn't start with an array, otherwise expects a CBOR array containing * zero or more cose_key CBOR, and adds each to the \p pkey_set * lws_dll2_owner_t struct. Created lws_cose_key_t are filled with data from * the COSE representation and can be used with other COSE crypto ops. */ LWS_VISIBLE LWS_EXTERN lws_cose_key_t * lws_cose_key_import(lws_dll2_owner_t *pkey_set, lws_cose_key_import_callback cb, void *user, const uint8_t *in, size_t len); /** lws_cose_key_export() - Create cose_key CBOR from an lws_cose_key_t * * \param ck: the lws_cose_key_t to export to CBOR * \param ctx: the CBOR writing context (same as for lws_lec_printf()) * \param flags: 0 to export only public elements, or LWSJWKF_EXPORT_PRIVATE * * Creates an lws_jwk struct filled with data from the COSE representation. */ LWS_VISIBLE LWS_EXTERN enum lws_lec_pctx_ret lws_cose_key_export(lws_cose_key_t *ck, lws_lec_pctx_t *ctx, int flags); /** * lws_cose_key_generate() - generate a fresh key * * \param context: the lws_context used to get random * \param cose_kty: one of LWSCOSE_WKKTV_ indicating the well-known key type * \param use_mask: 0, or a bitfield where (1 << LWSCOSE_WKKO_...) set means valid for use * \param bits: key bits for RSA * \param curve: for EC keys, one of "P-256", "P-384" or "P-521" currently * \param kid: string describing the key, or NULL * * Create an lws_cose_key_t of the specified type and return it */ LWS_VISIBLE LWS_EXTERN lws_cose_key_t * lws_cose_key_generate(struct lws_context *context, cose_param_t cose_kty, int use_mask, int bits, const char *curve, const uint8_t *kid, size_t kl); LWS_VISIBLE LWS_EXTERN lws_cose_key_t * lws_cose_key_from_set(lws_dll2_owner_t *set, const uint8_t *kid, size_t kl); LWS_VISIBLE LWS_EXTERN void lws_cose_key_destroy(lws_cose_key_t **ck); LWS_VISIBLE LWS_EXTERN void lws_cose_key_set_destroy(lws_dll2_owner_t *o); /* only available in _DEBUG build */ LWS_VISIBLE LWS_EXTERN void lws_cose_key_dump(const lws_cose_key_t *ck); /* * cose_sign */ struct lws_cose_validate_context; enum lws_cose_sig_types { SIGTYPE_UNKNOWN, SIGTYPE_MULTI, SIGTYPE_SINGLE, SIGTYPE_COUNTERSIGNED, /* not yet supported */ SIGTYPE_MAC, /* only supported for validation */ SIGTYPE_MAC0, }; /* a list of these result objects is the output of the validation process */ typedef struct { lws_dll2_t list; const lws_cose_key_t *cose_key; cose_param_t cose_alg; int result; /* 0 = validated */ } lws_cose_validate_res_t; enum { LCOSESIGEXTCB_RET_FINISHED, LCOSESIGEXTCB_RET_AGAIN, LCOSESIGEXTCB_RET_ERROR = -1 }; typedef struct { struct lws_cose_validate_context *cps; const uint8_t *ext; size_t xl; } lws_cose_sig_ext_pay_t; typedef int (*lws_cose_sign_ext_pay_cb_t)(lws_cose_sig_ext_pay_t *x); typedef int (*lws_cose_validate_pay_cb_t)(struct lws_cose_validate_context *cps, void *opaque, const uint8_t *paychunk, size_t paychunk_len); typedef struct lws_cose_validate_create_info { struct lws_context *cx; /**< REQUIRED: the lws context */ lws_dll2_owner_t *keyset; /**< REQUIRED: one or more cose_keys */ enum lws_cose_sig_types sigtype; /**< 0 if a CBOR tag is in the sig, else one of SIGTYPE_MULTI, * SIGTYPE_SINGLE, etc*/ lws_cose_validate_pay_cb_t pay_cb; /**< optional: called back with unvalidated payload pieces */ void *pay_opaque; /**< optional: passed into pay_cb callback along with payload chunk */ lws_cose_sign_ext_pay_cb_t ext_cb; /**< optional extra application data provision callback */ void *ext_opaque; /**< optional extra application data provision callback opaque */ size_t ext_len; /**< if we have extra app data, this must be set to the length of it */ } lws_cose_validate_create_info_t; /** * lws_cose_validate_create() - create a signature validation context * * \param info: struct describing the validation context to create * * Creates a signature validation context set up as described in \p info. * * You can then pass the signature cbor chunks to it using * lws_cose_validate_chunk(), finialize and get the results list using * lws_cose_validate_results() and destroy with lws_cose_validate_destroy(). */ LWS_VISIBLE LWS_EXTERN struct lws_cose_validate_context * lws_cose_validate_create(const lws_cose_validate_create_info_t *info); /** * lws_cose_validate_chunk() - passes chunks of CBOR into the signature validator * * \param cps: the validation context * \param in: the chunk of CBOR (does not have to be logically complete) * \param in_len: number of bytes available at \p in * * Parses signature CBOR to produce a list of result objects. * * */ LWS_VISIBLE LWS_EXTERN int lws_cose_validate_chunk(struct lws_cose_validate_context *cps, const uint8_t *in, size_t in_len, size_t *used_in); LWS_VISIBLE LWS_EXTERN lws_dll2_owner_t * lws_cose_validate_results(struct lws_cose_validate_context *cps); LWS_VISIBLE LWS_EXTERN void lws_cose_validate_destroy(struct lws_cose_validate_context **cps); struct lws_cose_sign_context; #define LCSC_FL_ADD_CBOR_TAG (1 << 0) #define LCSC_FL_ADD_CBOR_PREFER_MAC0 (1 << 1) typedef struct lws_cose_sign_create_info { struct lws_context *cx; /**< REQUIRED: the lws context */ lws_dll2_owner_t *keyset; /**< REQUIRED: one or more cose_keys */ lws_lec_pctx_t *lec; /**< REQUIRED: the cbor output context to emit to, user must * initialize with lws_lec_init() beforehand */ lws_cose_sign_ext_pay_cb_t ext_cb; /**< optional extra application data provision callback */ void *ext_opaque; /**< optional extra application data provision callback opaque */ size_t ext_len; /**< if we have extra app data, this must be set to the length of it */ size_t inline_payload_len; /**< REQUIRED: size of the inline payload we will provide */ int flags; /**< bitmap of LCSC_FL_* */ enum lws_cose_sig_types sigtype; /**< 0, or sign type hint */ } lws_cose_sign_create_info_t; /** * lws_cose_sign_create() - Create a signing context * * \param info: a structure describing the signing context you want to create * * This allocates and returns a signing context created according to what is in * the \p info parameter. * * \p info must be prepared with the lws_context, a keyset to use, a CBOR * output context, and the inline payload length. * * Returns NULL on failure or the created signing context ready to add alg(s) * to. */ LWS_VISIBLE LWS_EXTERN struct lws_cose_sign_context * lws_cose_sign_create(const lws_cose_sign_create_info_t *info); LWS_VISIBLE LWS_EXTERN int lws_cose_sign_add(struct lws_cose_sign_context *csc, cose_param_t alg, const lws_cose_key_t *ck); LWS_VISIBLE LWS_EXTERN enum lws_lec_pctx_ret lws_cose_sign_payload_chunk(struct lws_cose_sign_context *csc, const uint8_t *in, size_t in_len); LWS_VISIBLE LWS_EXTERN void lws_cose_sign_destroy(struct lws_cose_sign_context **csc); //@} libwebsockets-4.3.5/include/libwebsockets/lws-dbus.h000066400000000000000000000066441476025525100226000ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * must be included manually as * * #include * * if dbus apis needed */ #if !defined(__LWS_DBUS_H__) #define __LWS_DBUS_H__ #include /* helper type to simplify implementing methods as individual functions */ typedef DBusHandlerResult (*lws_dbus_message_handler)(DBusConnection *conn, DBusMessage *message, DBusMessage **reply, void *d); struct lws_dbus_ctx; typedef void (*lws_dbus_closing_t)(struct lws_dbus_ctx *ctx); struct lws_dbus_ctx { struct lws_dll2_owner owner; /* dbusserver ctx: HEAD of accepted list */ struct lws_dll2 next; /* dbusserver ctx: HEAD of accepted list */ struct lws_vhost *vh; /* the vhost we logically bind to in lws */ int tsi; /* the lws thread service index (0 if only one service thread as is the default */ DBusConnection *conn; DBusServer *dbs; DBusWatch *w[4]; DBusPendingCall *pc; char hup; char timeouts; /* cb_closing callback will be called after the connection and this * related ctx struct have effectively gone out of scope. * * The callback should close and clean up the connection and free the * ctx. */ lws_dbus_closing_t cb_closing; }; /** * lws_dbus_connection_setup() - bind dbus connection object to lws event loop * * \param ctx: additional information about the connection * \param conn: the DBusConnection object to bind * * This configures a DBusConnection object to use lws for watchers and timeout * operations. */ LWS_VISIBLE LWS_EXTERN int lws_dbus_connection_setup(struct lws_dbus_ctx *ctx, DBusConnection *conn, lws_dbus_closing_t cb_closing); /** * lws_dbus_server_listen() - bind dbus connection object to lws event loop * * \param ctx: additional information about the connection * \param ads: the DBUS address to listen on, eg, "unix:abstract=mysocket" * \param err: a DBusError object to take any extra error information * \param new_conn: a callback function to prepare new accepted connections * * This creates a DBusServer and binds it to the lws event loop, and your * callback to accept new connections. */ LWS_VISIBLE LWS_EXTERN DBusServer * lws_dbus_server_listen(struct lws_dbus_ctx *ctx, const char *ads, DBusError *err, DBusNewConnectionFunction new_conn); #endif libwebsockets-4.3.5/include/libwebsockets/lws-diskcache.h000066400000000000000000000205721476025525100235550ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /*! \defgroup diskcache LWS disk cache * ## Disk cache API * * Lws provides helper apis useful if you need a disk cache containing hashed * files and need to delete files from it on an LRU basis to keep it below some * size limit. * * The API `lws_diskcache_prepare()` deals with creating the cache dir and * 256 subdirs, which are used according to the first two chars of the hex * hash of the cache file. * * `lws_diskcache_create()` and `lws_diskcache_destroy()` allocate and free * an opaque struct that represents the disk cache. * * `lws_diskcache_trim()` should be called at eg, 1s intervals to perform the * cache dir monitoring and LRU autodelete in the background lazily. It can * be done in its own thread or on a timer... it monitors the directories in a * stateful way that stats one or more file in the cache per call, and keeps * a list of the oldest files as it goes. When it completes a scan, if the * aggregate size is over the limit, it will delete oldest files first to try * to keep it under the limit. * * The cache size monitoring is extremely efficient in time and memory even when * the cache directory becomes huge. * * `lws_diskcache_query()` is used to determine if the file already exists in * the cache, or if it must be created. If it must be created, then the file * is opened using a temp name that must be converted to a findable name with * `lws_diskcache_finalize_name()` when the generation of the file contents are * complete. Aborted cached files that did not complete generation will be * flushed by the LRU eventually. If the file already exists, it is 'touched' * to make it new again and the fd returned. * */ ///@{ struct lws_diskcache_scan; /** * lws_diskcache_create() - creates an opaque struct representing the disk cache * * \param cache_dir_base: The cache dir path, eg `/var/cache/mycache` * \param cache_size_limit: maximum size on disk the cache is allowed to use * * This returns an opaque `struct lws_diskcache_scan *` which represents the * disk cache, the trim scanning state and so on. You should use * `lws_diskcache_destroy()` to free it to destroy it. */ LWS_VISIBLE LWS_EXTERN struct lws_diskcache_scan * lws_diskcache_create(const char *cache_dir_base, uint64_t cache_size_limit); /** * lws_diskcache_destroy() - destroys the pointer returned by ...create() * * \param lds: pointer to the pointer returned by lws_diskcache_create() * * Frees *lds and any allocations it did, and then sets *lds to NULL and * returns. */ LWS_VISIBLE LWS_EXTERN void lws_diskcache_destroy(struct lws_diskcache_scan **lds); /** * lws_diskcache_prepare() - ensures the cache dir structure exists on disk * * \param cache_base_dir: The cache dir path, eg `/var/cache/mycache` * \param mode: octal dir mode to enforce, like 0700 * \param uid: uid the cache dir should belong to * * This should be called while your app is still privileged. It will create * the cache directory structure on disk as necessary, enforce the given access * mode on it and set the given uid as the owner. It won't make any trouble * if the cache already exists. * * Typically the mode is 0700 and the owner is the user that your application * will transition to use when it drops root privileges. */ LWS_VISIBLE LWS_EXTERN int lws_diskcache_prepare(const char *cache_base_dir, int mode, uid_t uid); #define LWS_DISKCACHE_QUERY_NO_CACHE 0 #define LWS_DISKCACHE_QUERY_EXISTS 1 #define LWS_DISKCACHE_QUERY_CREATING 2 #define LWS_DISKCACHE_QUERY_ONGOING 3 /* something else is creating it */ /** * lws_diskcache_query() - ensures the cache dir structure exists on disk * * \param lds: The opaque struct representing the disk cache * \param is_bot: nonzero means the request is from a bot. Don't create new cache contents if so. * \param hash_hex: hex string representation of the cache object hash * \param _fd: pointer to the fd to be set * \param cache: destination string to take the cache filepath * \param cache_len: length of the buffer at `cache` * \param extant_cache_len: pointer to a size_t to take any extant cached file size * * This function is called when you want to find if the hashed name already * exists in the cache. The possibilities for the return value are * * - LWS_DISKCACHE_QUERY_NO_CACHE: It's not in the cache and you can't create * it in the cache for whatever reason. * - LWS_DISKCACHE_QUERY_EXISTS: It exists in the cache. It's open RDONLY and * *_fd has been set to the file descriptor. *extant_cache_len has been set * to the size of the cached file in bytes. cache has been set to the * full filepath of the cached file. Closing _fd is your responsibility. * - LWS_DISKCACHE_QUERY_CREATING: It didn't exist, but a temp file has been * created in the cache and *_fd set to a file descriptor opened on it RDWR. * You should create the contents, and call `lws_diskcache_finalize_name()` * when it is done. Closing _fd is your responsibility. * - LWS_DISKCACHE_QUERY_ONGOING: not returned by this api, but you may find it * desirable to make a wrapper function which can handle another asynchronous * process that is already creating the cached file. This can be used to * indicate that situation externally... how to determine the same thing is * already being generated is out of scope of this api. */ LWS_VISIBLE LWS_EXTERN int lws_diskcache_query(struct lws_diskcache_scan *lds, int is_bot, const char *hash_hex, int *_fd, char *cache, int cache_len, size_t *extant_cache_len); /** * lws_diskcache_query() - ensures the cache dir structure exists on disk * * \param cache: The cache file temp name returned with LWS_DISKCACHE_QUERY_CREATING * * This renames the cache file you are creating to its final name. It should * be called on the temp name returned by `lws_diskcache_query()` if it gave a * LWS_DISKCACHE_QUERY_CREATING return, after you have filled the cache file and * closed it. */ LWS_VISIBLE LWS_EXTERN int lws_diskcache_finalize_name(char *cache); /** * lws_diskcache_trim() - performs one or more file checks in the cache for size management * * \param lds: The opaque object representing the cache * * This should be called periodically to statefully walk the cache on disk * collecting the oldest files. When it has visited every file, if the cache * is oversize it will delete the oldest files until it's back under size again. * * Each time it's called, it will look at one or more dir in the cache. If * called when the cache is oversize, it increases the amount of work done each * call until it is reduced again. Typically it will take 256 calls before it * deletes anything, so if called once per second, it will delete files once * every 4 minutes. Each call is very inexpensive both in memory and time. */ LWS_VISIBLE LWS_EXTERN int lws_diskcache_trim(struct lws_diskcache_scan *lds); /** * lws_diskcache_secs_to_idle() - see how long to idle before calling trim * * \param lds: The opaque object representing the cache * * If the cache is undersize, there's no need to monitor it immediately. This * suggests how long to "sleep" before calling `lws_diskcache_trim()` again. */ LWS_VISIBLE LWS_EXTERN int lws_diskcache_secs_to_idle(struct lws_diskcache_scan *lds); ///@} libwebsockets-4.3.5/include/libwebsockets/lws-display.h000066400000000000000000000126021476025525100232770ustar00rootroot00000000000000/* * lws abstract display * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #if !defined(__LWS_DISPLAY_H__) #define __LWS_DISPLAY_H__ #include typedef uint16_t lws_display_scalar; /* * This is embedded in the actual display implementation object at the top, * so a pointer to this can be cast to a pointer to the implementation object * by any code that is specific to how it was implemented. * * Notice for the backlight / display intensity we contain pwm_ops... these can * be some other pwm_ops like existing gpio pwm ops, or handled in a customized * way like set oled contrast. Either way, the pwm level is arrived at via a * full set of lws_led_sequences capable of generic lws transitions */ typedef struct lws_display { int (*init)(const struct lws_display *disp); const lws_pwm_ops_t *bl_pwm_ops; int (*contrast)(const struct lws_display *disp, uint8_t contrast); int (*blit)(const struct lws_display *disp, const uint8_t *src, lws_display_scalar x, lws_display_scalar y, lws_display_scalar w, lws_display_scalar h); int (*power)(const struct lws_display *disp, int state); const lws_led_sequence_def_t *bl_active; const lws_led_sequence_def_t *bl_dim; const lws_led_sequence_def_t *bl_transition; void *variant; int bl_index; lws_display_scalar w; /**< display surface width in pixels */ lws_display_scalar h; /**< display surface height in pixels */ uint8_t latency_wake_ms; /**< ms required after wake from sleep before display usable again... * delay bringing up the backlight for this amount of time on wake. * This is managed via a sul on the event loop, not blocking. */ } lws_display_t; /* * This contains dynamic data related to display state */ enum lws_display_controller_state { LWSDISPS_OFF, LWSDISPS_AUTODIMMED, /* is in pre- blanking static dim mode */ LWSDISPS_BECOMING_ACTIVE, /* waiting for wake latency before active */ LWSDISPS_ACTIVE, /* is active */ LWSDISPS_GOING_OFF /* dimming then off */ }; typedef struct lws_display_state { lws_sorted_usec_list_t sul_autodim; const lws_display_t *disp; struct lws_context *ctx; int autodim_ms; int off_ms; struct lws_led_state *bl_lcs; lws_led_state_chs_t chs; /* set of sequencer transition channels */ enum lws_display_controller_state state; } lws_display_state_t; /** * lws_display_state_init() - initialize display states * * \param lds: the display state object * \param ctx: the lws context * \param autodim_ms: ms since last active report to dim display (<0 = never) * \param off_ms: ms since dim to turn display off (<0 = never) * \param bl_lcs: the led controller instance that has the backlight * \param disp: generic display object we belong to * * This initializes a display's state, and sets up the optional screen auto-dim * and blanking on inactive, and gradual brightness change timer. * * - auto-dim then off: set autodim to some ms and off_ms to some ms * - auto-dim only: set autodim to some ms and off_ms to -1 * - off-only: set autodim to some ms and off_ms to 0 * - neither: set both autodim and off_ms to -1 */ LWS_VISIBLE LWS_EXTERN void lws_display_state_init(lws_display_state_t *lds, struct lws_context *ctx, int autodim_ms, int off_ms, struct lws_led_state *bl_lcs, const lws_display_t *disp); /** * lws_display_state_set_brightness() - gradually change the brightness * * \param lds: the display state we are changing * \param target: the target brightness to transition to * * Adjusts the brightness gradually twoards the target at 20Hz */ LWS_VISIBLE LWS_EXTERN void lws_display_state_set_brightness(lws_display_state_t *lds, const lws_led_sequence_def_t *pwmseq); /* * lws_display_state_active() - inform the system the display is active * * \param lds: the display state we are marking as active * * Resets the auto-dim and auto-off timers and makes sure the display is on and * at the active brightness level */ LWS_VISIBLE LWS_EXTERN void lws_display_state_active(lws_display_state_t *lds); /* * lws_display_state_off() - turns off the related display * * \param lds: the display state we are turning off * * Turns the display to least power mode or completely off if possible. * Disables the timers related to dimming and blanking. */ LWS_VISIBLE LWS_EXTERN void lws_display_state_off(lws_display_state_t *lds); #endif libwebsockets-4.3.5/include/libwebsockets/lws-dll2.h000066400000000000000000000215721476025525100224750ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /** \defgroup ll linked-lists * ##Linked list apis * * simple single and doubly-linked lists */ ///@{ /** * lws_start_foreach_ll(): linkedlist iterator helper start * * \param type: type of iteration, eg, struct xyz * * \param it: iterator var name to create * \param start: start of list * * This helper creates an iterator and starts a while (it) { * loop. The iterator runs through the linked list starting at start and * ends when it gets a NULL. * The while loop should be terminated using lws_start_foreach_ll(). */ #define lws_start_foreach_ll(type, it, start)\ { \ type it = start; \ while (it) { /** * lws_end_foreach_ll(): linkedlist iterator helper end * * \param it: same iterator var name given when starting * \param nxt: member name in the iterator pointing to next list element * * This helper is the partner for lws_start_foreach_ll() that ends the * while loop. */ #define lws_end_foreach_ll(it, nxt) \ it = it->nxt; \ } \ } /** * lws_start_foreach_ll_safe(): linkedlist iterator helper start safe against delete * * \param type: type of iteration, eg, struct xyz * * \param it: iterator var name to create * \param start: start of list * \param nxt: member name in the iterator pointing to next list element * * This helper creates an iterator and starts a while (it) { * loop. The iterator runs through the linked list starting at start and * ends when it gets a NULL. * The while loop should be terminated using lws_end_foreach_ll_safe(). * Performs storage of next increment for situations where iterator can become invalidated * during iteration. */ #define lws_start_foreach_ll_safe(type, it, start, nxt)\ { \ type it = start; \ while (it) { \ type next_##it = it->nxt; /** * lws_end_foreach_ll_safe(): linkedlist iterator helper end (pre increment storage) * * \param it: same iterator var name given when starting * * This helper is the partner for lws_start_foreach_ll_safe() that ends the * while loop. It uses the precreated next_ variable already stored during * start. */ #define lws_end_foreach_ll_safe(it) \ it = next_##it; \ } \ } /** * lws_start_foreach_llp(): linkedlist pointer iterator helper start * * \param type: type of iteration, eg, struct xyz ** * \param it: iterator var name to create * \param start: start of list * * This helper creates an iterator and starts a while (it) { * loop. The iterator runs through the linked list starting at the * address of start and ends when it gets a NULL. * The while loop should be terminated using lws_start_foreach_llp(). * * This helper variant iterates using a pointer to the previous linked-list * element. That allows you to easily delete list members by rewriting the * previous pointer to the element's next pointer. */ #define lws_start_foreach_llp(type, it, start)\ { \ type it = &(start); \ while (*(it)) { #define lws_start_foreach_llp_safe(type, it, start, nxt)\ { \ type it = &(start); \ type next; \ while (*(it)) { \ next = &((*(it))->nxt); \ /** * lws_end_foreach_llp(): linkedlist pointer iterator helper end * * \param it: same iterator var name given when starting * \param nxt: member name in the iterator pointing to next list element * * This helper is the partner for lws_start_foreach_llp() that ends the * while loop. */ #define lws_end_foreach_llp(it, nxt) \ it = &(*(it))->nxt; \ } \ } #define lws_end_foreach_llp_safe(it) \ it = next; \ } \ } #define lws_ll_fwd_insert(\ ___new_object, /* pointer to new object */ \ ___m_list, /* member for next list object ptr */ \ ___list_head /* list head */ \ ) {\ ___new_object->___m_list = ___list_head; \ ___list_head = ___new_object; \ } #define lws_ll_fwd_remove(\ ___type, /* type of listed object */ \ ___m_list, /* member for next list object ptr */ \ ___target, /* object to remove from list */ \ ___list_head /* list head */ \ ) { \ lws_start_foreach_llp(___type **, ___ppss, ___list_head) { \ if (*___ppss == ___target) { \ *___ppss = ___target->___m_list; \ break; \ } \ } lws_end_foreach_llp(___ppss, ___m_list); \ } /* * doubly linked-list */ /* * lws_dll2_owner / lws_dll2 : more capable version of lws_dll. Differences: * * - there's an explicit lws_dll2_owner struct which holds head, tail and * count of members. * * - list members all hold a pointer to their owner. So user code does not * have to track anything about exactly what lws_dll2_owner list the object * is a member of. * * - you can use lws_dll unless you want the member count or the ability to * not track exactly which list it's on. * * - layout is compatible with lws_dll (but lws_dll apis will not update the * new stuff) */ struct lws_dll2; struct lws_dll2_owner; typedef struct lws_dll2 { struct lws_dll2 *prev; struct lws_dll2 *next; struct lws_dll2_owner *owner; } lws_dll2_t; typedef struct lws_dll2_owner { struct lws_dll2 *tail; struct lws_dll2 *head; uint32_t count; } lws_dll2_owner_t; LWS_VISIBLE LWS_EXTERN int lws_dll2_is_detached(const struct lws_dll2 *d); static LWS_INLINE const struct lws_dll2_owner * lws_dll2_owner(const struct lws_dll2 *d) { return d->owner; } static LWS_INLINE struct lws_dll2 * lws_dll2_get_head(struct lws_dll2_owner *owner) { return owner->head; } static LWS_INLINE struct lws_dll2 * lws_dll2_get_tail(struct lws_dll2_owner *owner) { return owner->tail; } LWS_VISIBLE LWS_EXTERN void lws_dll2_add_head(struct lws_dll2 *d, struct lws_dll2_owner *owner); LWS_VISIBLE LWS_EXTERN void lws_dll2_add_tail(struct lws_dll2 *d, struct lws_dll2_owner *owner); LWS_VISIBLE LWS_EXTERN void lws_dll2_remove(struct lws_dll2 *d); typedef int (*lws_dll2_foreach_cb_t)(struct lws_dll2 *d, void *user); LWS_VISIBLE LWS_EXTERN int lws_dll2_foreach_safe(struct lws_dll2_owner *owner, void *user, lws_dll2_foreach_cb_t cb); LWS_VISIBLE LWS_EXTERN void lws_dll2_clear(struct lws_dll2 *d); LWS_VISIBLE LWS_EXTERN void lws_dll2_owner_clear(struct lws_dll2_owner *d); LWS_VISIBLE LWS_EXTERN void lws_dll2_add_before(struct lws_dll2 *d, struct lws_dll2 *after); LWS_VISIBLE LWS_EXTERN void lws_dll2_add_sorted(lws_dll2_t *d, lws_dll2_owner_t *own, int (*compare)(const lws_dll2_t *d, const lws_dll2_t *i)); LWS_VISIBLE LWS_EXTERN void lws_dll2_add_sorted_priv(lws_dll2_t *d, lws_dll2_owner_t *own, void *priv, int (*compare3)(void *priv, const lws_dll2_t *d, const lws_dll2_t *i)); LWS_VISIBLE LWS_EXTERN void * _lws_dll2_search_sz_pl(lws_dll2_owner_t *own, const char *name, size_t namelen, size_t dll2_ofs, size_t ptr_ofs); /* * Searches objects in an owner list linearly and returns one with a given * member C-string matching a supplied length-provided string if it exists, else * NULL. */ #define lws_dll2_search_sz_pl(own, name, namelen, type, membd2list, membptr) \ ((type *)_lws_dll2_search_sz_pl(own, name, namelen, \ offsetof(type, membd2list), \ offsetof(type, membptr))) #if defined(_DEBUG) void lws_dll2_describe(struct lws_dll2_owner *owner, const char *desc); #else #define lws_dll2_describe(x, y) #endif /* * these are safe against the current container object getting deleted, * since the hold his next in a temp and go to that next. ___tmp is * the temp. */ #define lws_start_foreach_dll_safe(___type, ___it, ___tmp, ___start) \ { \ ___type ___it = ___start; \ while (___it) { \ ___type ___tmp = (___it)->next; #define lws_end_foreach_dll_safe(___it, ___tmp) \ ___it = ___tmp; \ } \ } #define lws_start_foreach_dll(___type, ___it, ___start) \ { \ ___type ___it = ___start; \ while (___it) { #define lws_end_foreach_dll(___it) \ ___it = (___it)->next; \ } \ } ///@} libwebsockets-4.3.5/include/libwebsockets/lws-dsh.h000066400000000000000000000135371476025525100224200ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /* * lws_dsh (Disordered Shared Heap) is an opaque abstraction supporting a single * linear buffer (overallocated at end of the lws_dsh_t) which may contain * multiple kinds of packets that are retired out of order, and tracked by kind. * * Each kind of packet has an lws_dll2 list of its kind of packets and acts as * a FIFO; packets of a particular type are always retired in order. But there * is no requirement about the order types are retired matching the original * order they arrived. * * Gaps are tracked as just another kind of "packet" list. * * "allocations" (including gaps) are prepended by an lws_dsh_object_t. * * dsh may themselves be on an lws_dll2_owner list, and under memory pressure * allocate into other buffers on the list. * * All management structures exist inside the allocated buffer. */ /** * lws_dsh_create() - Allocate a DSH buffer * * \param owner: the owning list this dsh belongs on, or NULL if standalone * \param buffer_size: the allocation in bytes * \param count_kinds: how many separately-tracked fifos use the buffer * * This makes a single heap allocation that includes internal tracking objects * in the buffer. Sub-allocated objects are bound to a "kind" index and * managed via a FIFO for each kind. * * Every "kind" of allocation shares the same buffer space. * * Multiple buffers may be bound together in an lws_dll2 list, and if an * allocation cannot be satisfied by the local buffer, space can be borrowed * from other dsh in the same list (the local dsh FIFO tracks these "foreign" * allocations as if they were local). * * Returns an opaque pointer to the dsh, or NULL if allocation failed. */ LWS_VISIBLE LWS_EXTERN struct lws_dsh * lws_dsh_create(lws_dll2_owner_t *owner, size_t buffer_size, int count_kinds); /** * lws_dsh_destroy() - Destroy a DSH buffer * * \param pdsh: pointer to the dsh pointer * * Deallocates the DSH and sets *pdsh to NULL. * * Before destruction, any foreign buffer usage on the part of this dsh are * individually freed. All dsh on the same list are walked and checked if they * have their own foreign allocations on the dsh buffer being destroyed. If so, * it attempts to migrate the allocation to a dsh that is not currently being * destroyed. If all else fails (basically the buffer memory is being shrunk) * unmigratable objects are cleanly destroyed. */ LWS_VISIBLE LWS_EXTERN void lws_dsh_destroy(struct lws_dsh **pdsh); /** * lws_dsh_alloc_tail() - make a suballocation inside a dsh * * \param dsh: the dsh tracking the allocation * \param kind: the kind of allocation * \param src1: the first source data to copy * \param size1: the size of the first source data * \param src2: the second source data to copy (after the first), or NULL * \param size2: the size of the second source data * * Allocates size1 + size2 bytes in a dsh (it prefers the given dsh but will * borrow space from other dsh on the same list if necessary) and copies size1 * bytes into it from src1, followed by size2 bytes from src2 if src2 isn't * NULL. The actual suballocation is a bit larger because of alignment and a * prepended management header. * * The suballocation is added to the kind-specific FIFO at the tail. */ LWS_VISIBLE LWS_EXTERN int lws_dsh_alloc_tail(struct lws_dsh *dsh, int kind, const void *src1, size_t size1, const void *src2, size_t size2); /** * lws_dsh_free() - free a suballocation from the dsh * * \param obj: a pointer to a void * that pointed to the allocated payload * * This returns the space used by \p obj in the dsh buffer to the free list * of the dsh the allocation came from. */ LWS_VISIBLE LWS_EXTERN void lws_dsh_free(void **obj); LWS_VISIBLE LWS_EXTERN size_t lws_dsh_get_size(struct lws_dsh *dsh, int kind); /** * lws_dsh_get_head() - get the head allocation inside the dsh * * \param dsh: the dsh tracking the allocation * \param kind: the kind of allocation * \param obj: pointer to a void * to be set to the payload * \param size: set to the size of the allocation * * This gets the "next" object in the kind FIFO for the dsh, and returns 0 if * any. If none, returns nonzero. * * This is nondestructive of the fifo or the payload. Use lws_dsh_free on * obj to remove the entry from the kind fifo and return the payload to the * free list. */ LWS_VISIBLE LWS_EXTERN int lws_dsh_get_head(struct lws_dsh *dsh, int kind, void **obj, size_t *size); /** * lws_dsh_describe() - DEBUG BUILDS ONLY dump the dsh to the logs * * \param dsh: the dsh to dump * \param desc: text that appears at the top of the dump * * Useful information for debugging lws_dsh */ LWS_VISIBLE LWS_EXTERN void lws_dsh_describe(struct lws_dsh *dsh, const char *desc); libwebsockets-4.3.5/include/libwebsockets/lws-eventlib-exports.h000066400000000000000000000115271476025525100251510ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * These are exports needed by event lib plugins. */ enum lws_event_lib_ops_flags { LELOF_ISPOLL = (1 >> 0), LELOF_DESTROY_FINAL = (1 >> 1), }; enum { LWS_EV_READ = (1 << 0), LWS_EV_WRITE = (1 << 1), LWS_EV_START = (1 << 2), LWS_EV_STOP = (1 << 3), }; struct lws_event_loop_ops { const char *name; /* event loop-specific context init during context creation */ int (*init_context)(struct lws_context *context, const struct lws_context_creation_info *info); /* called during lws_destroy_context */ int (*destroy_context1)(struct lws_context *context); /* called during lws_destroy_context2 */ int (*destroy_context2)(struct lws_context *context); /* init vhost listening wsi */ int (*init_vhost_listen_wsi)(struct lws *wsi); /* init the event loop for a pt */ int (*init_pt)(struct lws_context *context, void *_loop, int tsi); /* called at end of first phase of close_free_wsi() */ int (*wsi_logical_close)(struct lws *wsi); /* return nonzero if client connect not allowed */ int (*check_client_connect_ok)(struct lws *wsi); /* close handle manually */ void (*close_handle_manually)(struct lws *wsi); /* event loop accept processing */ int (*sock_accept)(struct lws *wsi); /* control wsi active events */ void (*io)(struct lws *wsi, unsigned int flags); /* run the event loop for a pt */ void (*run_pt)(struct lws_context *context, int tsi); /* called before pt is destroyed */ void (*destroy_pt)(struct lws_context *context, int tsi); /* called just before wsi is freed */ void (*destroy_wsi)(struct lws *wsi); /* return nonzero if caller thread is not loop service thread */ int (*foreign_thread)(struct lws_context *context, int tsi); uint8_t flags; uint16_t evlib_size_ctx; uint16_t evlib_size_pt; uint16_t evlib_size_vh; uint16_t evlib_size_wsi; }; LWS_VISIBLE LWS_EXTERN void * lws_evlib_wsi_to_evlib_pt(struct lws *wsi); LWS_VISIBLE LWS_EXTERN void * lws_evlib_tsi_to_evlib_pt(struct lws_context *ctx, int tsi); /* * You should consider these opaque for normal user code. */ LWS_VISIBLE LWS_EXTERN void * lws_realloc(void *ptr, size_t size, const char *reason); LWS_VISIBLE LWS_EXTERN void lws_vhost_destroy1(struct lws_vhost *vh); LWS_VISIBLE LWS_EXTERN void lws_close_free_wsi(struct lws *wsi, enum lws_close_status reason, const char *caller); LWS_VISIBLE LWS_EXTERN int lws_vhost_foreach_listen_wsi(struct lws_context *cx, void *arg, lws_dll2_foreach_cb_t cb); struct lws_context_per_thread; LWS_VISIBLE LWS_EXTERN void lws_service_do_ripe_rxflow(struct lws_context_per_thread *pt); #if !defined(wsi_from_fd) && !defined(WIN32) && !defined(_WIN32) struct lws_context; LWS_VISIBLE LWS_EXTERN struct lws * wsi_from_fd(const struct lws_context *context, int fd); #endif LWS_VISIBLE LWS_EXTERN int _lws_plat_service_forced_tsi(struct lws_context *context, int tsi); LWS_VISIBLE LWS_EXTERN void lws_context_destroy2(struct lws_context *context); LWS_VISIBLE LWS_EXTERN void lws_destroy_event_pipe(struct lws *wsi); LWS_VISIBLE LWS_EXTERN void __lws_close_free_wsi_final(struct lws *wsi); #if LWS_MAX_SMP > 1 struct lws_mutex_refcount { pthread_mutex_t lock; pthread_t lock_owner; const char *last_lock_reason; char lock_depth; char metadata; }; LWS_VISIBLE LWS_EXTERN void lws_mutex_refcount_assert_held(struct lws_mutex_refcount *mr); LWS_VISIBLE LWS_EXTERN void lws_mutex_refcount_init(struct lws_mutex_refcount *mr); LWS_VISIBLE LWS_EXTERN void lws_mutex_refcount_destroy(struct lws_mutex_refcount *mr); LWS_VISIBLE LWS_EXTERN void lws_mutex_refcount_lock(struct lws_mutex_refcount *mr, const char *reason); LWS_VISIBLE LWS_EXTERN void lws_mutex_refcount_unlock(struct lws_mutex_refcount *mr); #endif libwebsockets-4.3.5/include/libwebsockets/lws-fault-injection.h000066400000000000000000000213451476025525100247310ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * Fault injection api if built with LWS_WITH_SYS_FAULT_INJECTION */ typedef struct lws_xos { uint64_t s[4]; } lws_xos_t; /** * lws_xos_init() - seed xoshiro256 PRNG * * \param xos: the prng state object to initialize * \param seed: the 64-bit seed * * Initialize PRNG \xos with the starting state represented by \p seed */ LWS_VISIBLE LWS_EXTERN void lws_xos_init(struct lws_xos *xos, uint64_t seed); /** * lws_xos() - get next xoshiro256 PRNG result and update state * * \param xos: the PRNG state to use * * Returns next 64-bit PRNG result. These are cheap to get, * quite a white noise sequence, and completely deterministic * according to the seed it was initialized with. */ LWS_VISIBLE LWS_EXTERN uint64_t LWS_WARN_UNUSED_RESULT lws_xos(struct lws_xos *xos); /** * lws_xos_percent() - return 1 a given percent of the time on average * * \param xos: the PRNG state to use * \param percent: chance in 100 of returning 1 * * Returns 1 if next random % 100 is < \p percent, such that * 100 always returns 1, 0 never returns 1, and the chance linearly scales * inbetween */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_xos_percent(struct lws_xos *xos, int percent); #if defined(LWS_WITH_SYS_FAULT_INJECTION) enum { LWSFI_ALWAYS, LWSFI_DETERMINISTIC, /* do .count injections after .pre then stop */ LWSFI_PROBABILISTIC, /* .pre % chance of injection */ LWSFI_PATTERN, /* use .count bits in .pattern after .pre */ LWSFI_PATTERN_ALLOC, /* as _PATTERN, but .pattern is malloc'd */ LWSFI_RANGE /* pick a number between pre and count */ }; typedef struct lws_fi { const char *name; const uint8_t *pattern; uint64_t pre; uint64_t count; uint64_t times; /* start at 0, tracks usage */ char type; /* LWSFI_* */ } lws_fi_t; typedef struct lws_fi_ctx { lws_dll2_owner_t fi_owner; struct lws_xos xos; const char *name; } lws_fi_ctx_t; /** * lws_fi() - find out if we should perform the named fault injection this time * * \param fic: fault injection tracking context * \param fi_name: name of fault injection * * This checks if the named fault is configured in the fi tracking context * provided, if it is, then it will make a decision if the named fault should * be applied this time, using the tracking in the named lws_fi_t. * * If the provided context has a parent, that is also checked for the named fi * item recursively, with the first found being used to determine if to inject * or not. * * If LWS_WITH_SYS_FAULT_INJECTION is not defined, then this always return 0. */ LWS_VISIBLE LWS_EXTERN int lws_fi(const lws_fi_ctx_t *fic, const char *fi_name); /** * lws_fi_range() - get a random number from a range * * \param fic: fault injection tracking context * \param fi_name: name of fault injection * \param result: points to uint64_t to be set to the result * * This lets you get a random number from an externally-set range, set using a * fault injection syntax like "myfault(123..456)". That will cause us to * return a number between those two inclusive, from the seeded PRNG. * * This is useful when you used lws_fi() with its own fault name to decide * whether to inject the fault, and then the code to cause the fault needs * additional constrained pseudo-random fuzzing for, eg, delays before issuing * the fault. * * Returns 0 if \p *result is set, else nonzero for failure. */ LWS_VISIBLE LWS_EXTERN int lws_fi_range(const lws_fi_ctx_t *fic, const char *name, uint64_t *result); /** * lws_fi_add() - add an allocated copy of fault injection to a context * * \param fic: fault injection tracking context * \param fi: the fault injection details * * This allocates a copy of \p fi and attaches it to the fault injection context * \p fic. \p fi can go out of scope after this safely. */ LWS_VISIBLE LWS_EXTERN int lws_fi_add(lws_fi_ctx_t *fic, const lws_fi_t *fi); /** * lws_fi_remove() - remove an allocated copy of fault injection from a context * * \param fic: fault injection tracking context * \param name: the fault injection name to remove * * This looks for the named fault injection and removes and destroys it from * the specified fault injection context */ LWS_VISIBLE LWS_EXTERN void lws_fi_remove(lws_fi_ctx_t *fic, const char *name); /** * lws_fi_import() - transfers all the faults from one context to another * * \param fic_dest: the fault context to receive the faults * \param fic_src: the fault context that will be emptied out into \p fic_dest * * This is used to initialize created object fault injection contexts from * the caller. */ LWS_VISIBLE LWS_EXTERN void lws_fi_import(lws_fi_ctx_t *fic_dest, const lws_fi_ctx_t *fic_src); /** * lws_fi_inherit_copy() - attach copies of matching fault injection objects to dest * * \param fic_dest: destination Fault Injection context * \param fic_src: parent fault context that may contain matching rules * \param scope: the name of the path match required, eg, "vh" * \param value: the dynamic name of our match, eg, "myvhost" * * If called with scope "vh" and value "myvhost", then matches faults starting * "vh=myvhost/", strips that part of the name if it matches and makes a copy * of the rule with the modified name attached to the destination Fault Injection * context. */ LWS_VISIBLE LWS_EXTERN void lws_fi_inherit_copy(lws_fi_ctx_t *fic_dest, const lws_fi_ctx_t *fic_src, const char *scope, const char *value); /** * lws_fi_destroy() - removes all allocated fault injection entries * * \param fic: fault injection tracking context * * This walks any allocated fault injection entries in \p fic and detaches and * destroys them. It doesn't try to destroc \p fic itself, since this is * not usually directly allocated. */ LWS_VISIBLE LWS_EXTERN void lws_fi_destroy(const lws_fi_ctx_t *fic); /** * lws_fi_deserialize() - adds fault in string form to Fault Injection Context * * \p fic: the fault injection context * \p sers: the string serializing the desired fault details * * This turns a string like "ss=captive_portal_detect/wsi/dnsfail(10%)" into * a fault injection struct added to the fault injection context \p fic * * You can prepare the context creation info .fic with these before creating * the context, and use namespace paths on those to target other objects. */ LWS_VISIBLE LWS_EXTERN void lws_fi_deserialize(lws_fi_ctx_t *fic, const char *sers); LWS_VISIBLE LWS_EXTERN int _lws_fi_user_wsi_fi(struct lws *wsi, const char *name); LWS_VISIBLE LWS_EXTERN int _lws_fi_user_context_fi(struct lws_context *ctx, const char *name); #if defined(LWS_WITH_SECURE_STREAMS) struct lws_ss_handle; LWS_VISIBLE LWS_EXTERN int _lws_fi_user_ss_fi(struct lws_ss_handle *h, const char *name); #if defined(LWS_WITH_SECURE_STREAMS_PROXY_API) struct lws_sspc_handle; LWS_VISIBLE LWS_EXTERN int _lws_fi_user_sspc_fi(struct lws_sspc_handle *h, const char *name); #endif #endif #define lws_fi_user_wsi_fi(_wsi, _name) _lws_fi_user_wsi_fi(_wsi, _name) #define lws_fi_user_context_fi(_ctx, _name) _lws_fi_user_context_fi(_ctx, _name) #define lws_fi_user_ss_fi(_h, _name) _lws_fi_user_ss_fi(_h, _name) #define lws_fi_user_sspc_fi(_h, _name) _lws_fi_user_sspc_fi(_h, _name) #else /* * Helper so we can leave lws_fi() calls embedded in the code being tested, * if fault injection is not enabled then it just always says "no" at buildtime. */ #define lws_fi(_fi_name, _fic) (0) #define lws_fi_destroy(_x) #define lws_fi_inherit_copy(_a, _b, _c, _d) #define lws_fi_deserialize(_x, _y) #define lws_fi_user_wsi_fi(_wsi, _name) (0) #define lws_fi_user_context_fi(_wsi, _name) (0) #define lws_fi_user_ss_fi(_h, _name) (0) #define lws_fi_user_sspc_fi(_h, _name) (0) #endif libwebsockets-4.3.5/include/libwebsockets/lws-freertos.h000066400000000000000000000052761476025525100234740ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * This is included from libwebsockets.h if LWS_PLAT_FREERTOS */ typedef int lws_sockfd_type; typedef int lws_filefd_type; #if defined(LWS_AMAZON_RTOS) #include #include #include #include "timers.h" #include /* * Later lwip (at least 2.1.12) already defines these in its own headers * protected by the same test as used here... if POLLIN / POLLOUT already exist * then assume no need to declare those and struct pollfd. * * Older lwip needs these declarations done here. */ #if !defined(POLLIN) && !defined(POLLOUT) struct pollfd { lws_sockfd_type fd; /**< fd related to */ short events; /**< which POLL... events to respond to */ short revents; /**< which POLL... events occurred */ }; #define POLLIN 0x0001 #define POLLPRI 0x0002 #define POLLOUT 0x0004 #define POLLERR 0x0008 #define POLLHUP 0x0010 #define POLLNVAL 0x0020 #endif #else /* LWS_AMAZON_RTOS */ #include #include #include #include "esp_wifi.h" #include "esp_system.h" #include "esp_event.h" //#include "esp_event_loop.h" #include "nvs.h" #include "driver/gpio.h" #include "esp_spi_flash.h" #include "freertos/timers.h" #if defined(LWS_ESP_PLATFORM) #include "lwip/sockets.h" #include "lwip/netdb.h" #if defined(LWS_WITH_DRIVERS) #include "libwebsockets/lws-gpio.h" extern const lws_gpio_ops_t lws_gpio_plat; #endif #endif #endif /* LWS_AMAZON_RTOS */ #if !defined(CONFIG_FREERTOS_HZ) #define CONFIG_FREERTOS_HZ 100 #endif libwebsockets-4.3.5/include/libwebsockets/lws-fts.h000066400000000000000000000156611476025525100224360ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /** \defgroup search Search * * ##Full-text search * * Lws provides superfast indexing and fulltext searching from index files on * storage. */ ///@{ struct lws_fts; struct lws_fts_file; /* * Queries produce their results in an lwsac, using these public API types. * The first thing in the lwsac is always a struct lws_fts_result (see below) * containing heads for linked-lists of the other result types. */ /* one filepath's results */ struct lws_fts_result_filepath { struct lws_fts_result_filepath *next; int matches; /* logical number of matches */ int matches_length; /* bytes in length table (may be zero) */ int lines_in_file; int filepath_length; /* - uint32_t line table follows (first for alignment) */ /* - filepath (of filepath_length) follows */ }; /* autocomplete result */ struct lws_fts_result_autocomplete { struct lws_fts_result_autocomplete *next; int instances; int agg_instances; int ac_length; char elided; /* children skipped in interest of antecedent children */ char has_children; /* - autocomplete suggestion (of length ac_length) follows */ }; /* * The results lwsac always starts with this. If no results and / or no * autocomplete the members may be NULL. This implies the symbol nor any * suffix on it exists in the trie file. */ struct lws_fts_result { struct lws_fts_result_filepath *filepath_head; struct lws_fts_result_autocomplete *autocomplete_head; int duration_ms; int effective_flags; /* the search flags that were used */ }; /* * index creation functions */ /** * lws_fts_create() - Create a new index file * * \param fd: The fd opened for write * * Inits a new index file, returning a struct lws_fts to represent it */ LWS_VISIBLE LWS_EXTERN struct lws_fts * lws_fts_create(int fd); /** * lws_fts_destroy() - Finalize a new index file / destroy the trie lwsac * * \param trie: The previously opened index being finalized * * Finalizes an index file that was being created, and frees the memory involved * *trie is set to NULL afterwards. */ LWS_VISIBLE LWS_EXTERN void lws_fts_destroy(struct lws_fts **trie); /** * lws_fts_file_index() - Create a new entry in the trie file for an input path * * \param t: The previously opened index being written * \param filepath: The filepath (which may be virtual) associated with this file * \param filepath_len: The number of chars in the filepath * \param priority: not used yet * * Returns an ordinal that represents this new filepath in the index file. */ LWS_VISIBLE LWS_EXTERN int lws_fts_file_index(struct lws_fts *t, const char *filepath, int filepath_len, int priority); /** * lws_fts_fill() - Process all or a bufferload of input file * * \param t: The previously opened index being written * \param file_index: The ordinal representing this input filepath * \param buf: A bufferload of data from the input file * \param len: The number of bytes in buf * * Indexes a buffer of data from the input file. */ LWS_VISIBLE LWS_EXTERN int lws_fts_fill(struct lws_fts *t, uint32_t file_index, const char *buf, size_t len); /** * lws_fts_serialize() - Store the in-memory trie into the index file * * \param t: The previously opened index being written * * The trie is held in memory where it can be added to... after all the input * filepaths and data have been processed, this is called to serialize / * write the trie data into the index file. */ LWS_VISIBLE LWS_EXTERN int lws_fts_serialize(struct lws_fts *t); /* * index search functions */ /** * lws_fts_open() - Open an existing index file to search it * * \param filepath: The filepath to the index file to open * * Opening the index file returns an opaque struct lws_fts_file * that is * used to perform other operations on it, or NULL if it can't be opened. */ LWS_VISIBLE LWS_EXTERN struct lws_fts_file * lws_fts_open(const char *filepath); #define LWSFTS_F_QUERY_AUTOCOMPLETE (1 << 0) #define LWSFTS_F_QUERY_FILES (1 << 1) #define LWSFTS_F_QUERY_FILE_LINES (1 << 2) #define LWSFTS_F_QUERY_QUOTE_LINE (1 << 3) struct lws_fts_search_params { /* the actual search term */ const char *needle; /* if non-NULL, FILE results for this filepath only */ const char *only_filepath; /* will be set to the results lwsac */ struct lwsac *results_head; /* combination of LWSFTS_F_QUERY_* flags */ int flags; /* maximum number of autocomplete suggestions to return */ int max_autocomplete; /* maximum number of filepaths to return */ int max_files; /* maximum number of line number results to return per filepath */ int max_lines; }; /** * lws_fts_search() - Perform a search operation on an index * * \param jtf: The index file struct returned by lws_fts_open * \param ftsp: The struct lws_fts_search_params filled in by the caller * * The caller should memset the ftsp struct to 0 to ensure members that may be * introduced in later versions contain known values, then set the related * members to describe the kind of search action required. * * ftsp->results_head is the results lwsac, or NULL. It should be freed with * lwsac_free() when the results are finished with. * * Returns a pointer into the results lwsac that is a struct lws_fts_result * containing the head pointers into linked-lists of results for autocomplete * and filepath data, along with some sundry information. This does not need * to be freed since freeing the lwsac will also remove this and everything it * points to. */ LWS_VISIBLE LWS_EXTERN struct lws_fts_result * lws_fts_search(struct lws_fts_file *jtf, struct lws_fts_search_params *ftsp); /** * lws_fts_close() - Close a previously-opened index file * * \param jtf: The pointer returned from the open * * Closes the file handle on the index and frees any allocations */ LWS_VISIBLE LWS_EXTERN void lws_fts_close(struct lws_fts_file *jtf); ///@} libwebsockets-4.3.5/include/libwebsockets/lws-genaes.h000066400000000000000000000127111476025525100230750ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /*! \defgroup generic AES * ## Generic AES related functions * * Lws provides generic AES functions that abstract the ones * provided by whatever tls library you are linking against. * * It lets you use the same code if you build against mbedtls or OpenSSL * for example. */ ///@{ #if defined(LWS_WITH_MBEDTLS) #include #include #endif enum enum_aes_modes { LWS_GAESM_CBC, LWS_GAESM_CFB128, LWS_GAESM_CFB8, LWS_GAESM_CTR, LWS_GAESM_ECB, LWS_GAESM_OFB, LWS_GAESM_XTS, /* care... requires double-length key */ LWS_GAESM_GCM, LWS_GAESM_KW, }; enum enum_aes_operation { LWS_GAESO_ENC, LWS_GAESO_DEC }; enum enum_aes_padding { LWS_GAESP_NO_PADDING, LWS_GAESP_WITH_PADDING }; /* include/libwebsockets/lws-jwk.h must be included before this */ #define LWS_AES_BLOCKSIZE 128 #define LWS_AES_CBC_BLOCKLEN 16 struct lws_genaes_ctx { #if defined(LWS_WITH_MBEDTLS) union { mbedtls_aes_context ctx; #if defined(MBEDTLS_CIPHER_MODE_XTS) mbedtls_aes_xts_context ctx_xts; #endif mbedtls_gcm_context ctx_gcm; } u; #else EVP_CIPHER_CTX *ctx; const EVP_CIPHER *cipher; ENGINE *engine; char init; #endif unsigned char tag[16]; struct lws_gencrypto_keyelem *k; enum enum_aes_operation op; enum enum_aes_modes mode; enum enum_aes_padding padding; int taglen; char underway; }; /** lws_genaes_create() - Create genaes AES context * * \param ctx: your struct lws_genaes_ctx * \param op: LWS_GAESO_ENC or LWS_GAESO_DEC * \param mode: one of LWS_GAESM_ * \param el: struct prepared with key element data * \param padding: 0 = no padding, 1 = padding * \param engine: if openssl engine used, pass the pointer here * * Creates an AES context with a key associated with it, formed from * the key elements in \p el. * * Returns 0 for OK or nonzero for error. * * This and related APIs operate identically with OpenSSL or mbedTLS backends. */ LWS_VISIBLE LWS_EXTERN int lws_genaes_create(struct lws_genaes_ctx *ctx, enum enum_aes_operation op, enum enum_aes_modes mode, struct lws_gencrypto_keyelem *el, enum enum_aes_padding padding, void *engine); /** lws_genaes_destroy() - Destroy genaes AES context * * \param ctx: your struct lws_genaes_ctx * \param tag: NULL, or, GCM-only: buffer to receive tag * \param tlen: 0, or, GCM-only: length of tag buffer * * Destroys any allocations related to \p ctx. * * For GCM only, up to tlen bytes of tag buffer will be set on exit. * * This and related APIs operate identically with OpenSSL or mbedTLS backends. */ LWS_VISIBLE LWS_EXTERN int lws_genaes_destroy(struct lws_genaes_ctx *ctx, unsigned char *tag, size_t tlen); /** lws_genaes_crypt() - Encrypt or decrypt * * \param ctx: your struct lws_genaes_ctx * \param in: input plaintext or ciphertext * \param len: length of input (which is always length of output) * \param out: output plaintext or ciphertext * \param iv_or_nonce_ctr_or_data_unit_16: NULL, iv, nonce_ctr16, or data_unit16 * \param stream_block_16: pointer to 16-byte stream block for CTR mode only * \param nc_or_iv_off: NULL or pointer to nc, or iv_off * \param taglen: length of tag * * Encrypts or decrypts using the AES mode set when the ctx was created. * The last three arguments have different meanings depending on the mode: * * KW CBC CFB128 CFB8 CTR ECB OFB XTS * iv_or_nonce_ct.._unit_16 : iv iv iv iv nonce NULL iv dataunt * stream_block_16 : NULL NULL NULL NULL stream NULL NULL NULL * nc_or_iv_off : NULL NULL iv_off NULL nc_off NULL iv_off NULL * * For GCM: * * iv_or_nonce_ctr_or_data_unit_16 : iv * stream_block_16 : pointer to tag * nc_or_iv_off : set pointed-to size_t to iv length * in : first call: additional data, subsequently * : input data * len : first call: add data length, subsequently * : input / output length * * The length of the optional arg is always 16 if used, regardless of the mode. * * Returns 0 for OK or nonzero for error. * * This and related APIs operate identically with OpenSSL or mbedTLS backends. */ LWS_VISIBLE LWS_EXTERN int lws_genaes_crypt(struct lws_genaes_ctx *ctx, const uint8_t *in, size_t len, uint8_t *out, uint8_t *iv_or_nonce_ctr_or_data_unit_16, uint8_t *stream_block_16, size_t *nc_or_iv_off, int taglen); ///@} libwebsockets-4.3.5/include/libwebsockets/lws-gencrypto.h000066400000000000000000000104051476025525100236430ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /* * These are gencrypto-level constants... they are used by both JOSE and direct * gencrypto code. However while JWK relies on these, using gencrypto apis has * no dependency at all on any JOSE type. */ enum lws_gencrypto_kty { LWS_GENCRYPTO_KTY_UNKNOWN, LWS_GENCRYPTO_KTY_OCT, LWS_GENCRYPTO_KTY_RSA, LWS_GENCRYPTO_KTY_EC }; /* * Keytypes where the same element name is reused must all agree to put the * same-named element at the same e[] index. It's because when used with jwk, * we parse and store in incoming key data, but we may not be informed of the * definitive keytype until the end. */ enum lws_gencrypto_oct_tok { LWS_GENCRYPTO_OCT_KEYEL_K, /* note... same offset as AES K */ LWS_GENCRYPTO_OCT_KEYEL_COUNT }; enum lws_gencrypto_rsa_tok { LWS_GENCRYPTO_RSA_KEYEL_E, LWS_GENCRYPTO_RSA_KEYEL_N, LWS_GENCRYPTO_RSA_KEYEL_D, /* note... same offset as EC D */ LWS_GENCRYPTO_RSA_KEYEL_P, LWS_GENCRYPTO_RSA_KEYEL_Q, LWS_GENCRYPTO_RSA_KEYEL_DP, LWS_GENCRYPTO_RSA_KEYEL_DQ, LWS_GENCRYPTO_RSA_KEYEL_QI, /* we don't actively use these if given, but may come from COSE */ LWS_GENCRYPTO_RSA_KEYEL_OTHER, LWS_GENCRYPTO_RSA_KEYEL_RI, LWS_GENCRYPTO_RSA_KEYEL_DI, LWS_GENCRYPTO_RSA_KEYEL_TI, LWS_GENCRYPTO_RSA_KEYEL_COUNT }; enum lws_gencrypto_ec_tok { LWS_GENCRYPTO_EC_KEYEL_CRV, LWS_GENCRYPTO_EC_KEYEL_X, /* note... same offset as RSA D */ LWS_GENCRYPTO_EC_KEYEL_D = LWS_GENCRYPTO_RSA_KEYEL_D, LWS_GENCRYPTO_EC_KEYEL_Y, LWS_GENCRYPTO_EC_KEYEL_COUNT }; enum lws_gencrypto_aes_tok { /* note... same offset as OCT K */ LWS_GENCRYPTO_AES_KEYEL_K = LWS_GENCRYPTO_OCT_KEYEL_K, LWS_GENCRYPTO_AES_KEYEL_COUNT }; /* largest number of key elements for any algorithm */ #define LWS_GENCRYPTO_MAX_KEYEL_COUNT LWS_GENCRYPTO_RSA_KEYEL_COUNT /* this "stretchy" type holds individual key element data in binary form. * It's typcially used in an array with the layout mapping the element index to * the key element meaning defined by the enums above. An array of these of * length LWS_GENCRYPTO_MAX_KEYEL_COUNT can define key elements for any key * type. */ typedef struct lws_gencrypto_keyelem { uint8_t *buf; uint32_t len; } lws_gc_elem_t; /** * lws_gencrypto_bits_to_bytes() - returns rounded up bytes needed for bits * * \param bits * * Returns the number of bytes needed to store the given number of bits. If * a byte is partially used, the byte count is rounded up. */ LWS_VISIBLE LWS_EXTERN int lws_gencrypto_bits_to_bytes(int bits); /** * lws_base64_size() - returns estimated size of base64 encoding * * \param bytes * * Returns a slightly oversize estimate of the size of a base64 encoded version * of the given amount of unencoded data. */ LWS_VISIBLE LWS_EXTERN int lws_base64_size(int bytes); /** * lws_gencrypto_padded_length() - returns PKCS#5/#7 padded length * * @param blocksize - blocksize to pad to * @param len - Length of input to pad * * Returns the length of a buffer originally of size len after PKCS#5 or PKCS#7 * padding has been applied to it. */ LWS_VISIBLE LWS_EXTERN size_t lws_gencrypto_padded_length(size_t block_size, size_t len); libwebsockets-4.3.5/include/libwebsockets/lws-genec.h000066400000000000000000000157601476025525100227230ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ enum enum_genec_alg { LEGENEC_UNKNOWN, LEGENEC_ECDH, LEGENEC_ECDSA }; struct lws_genec_ctx { #if defined(LWS_WITH_MBEDTLS) union { mbedtls_ecdh_context *ctx_ecdh; mbedtls_ecdsa_context *ctx_ecdsa; } u; #else EVP_PKEY_CTX *ctx[2]; #endif struct lws_context *context; const struct lws_ec_curves *curve_table; enum enum_genec_alg genec_alg; char has_private; }; #if defined(LWS_WITH_MBEDTLS) enum enum_lws_dh_side { LDHS_OURS = MBEDTLS_ECDH_OURS, LDHS_THEIRS = MBEDTLS_ECDH_THEIRS }; #else enum enum_lws_dh_side { LDHS_OURS, LDHS_THEIRS }; #endif struct lws_ec_curves { const char *name; int tls_lib_nid; uint16_t key_bytes; }; /* ECDH-specific apis */ /** lws_genecdh_create() - Create a genecdh * * \param ctx: your genec context * \param context: your lws_context (for RNG access) * \param curve_table: NULL, enabling P-256, P-384 and P-521, or a replacement * struct lws_ec_curves array, terminated by an entry with * .name = NULL, of curves you want to allow * * Initializes a genecdh */ LWS_VISIBLE int lws_genecdh_create(struct lws_genec_ctx *ctx, struct lws_context *context, const struct lws_ec_curves *curve_table); /** lws_genecdh_set_key() - Apply an EC key to our or theirs side * * \param ctx: your genecdh context * \param el: your key elements * \param side: LDHS_OURS or LDHS_THEIRS * * Applies an EC key to one side or the other of an ECDH ctx */ LWS_VISIBLE LWS_EXTERN int lws_genecdh_set_key(struct lws_genec_ctx *ctx, struct lws_gencrypto_keyelem *el, enum enum_lws_dh_side side); /** lws_genecdh_new_keypair() - Create a genec with a new public / private key * * \param ctx: your genec context * \param side: LDHS_OURS or LDHS_THEIRS * \param curve_name: an EC curve name, like "P-256" * \param el: array pf LWS_GENCRYPTO_EC_KEYEL_COUNT key elems to take the new key * * Creates a genecdh with a newly minted EC public / private key */ LWS_VISIBLE LWS_EXTERN int lws_genecdh_new_keypair(struct lws_genec_ctx *ctx, enum enum_lws_dh_side side, const char *curve_name, struct lws_gencrypto_keyelem *el); LWS_VISIBLE LWS_EXTERN int lws_genecdh_compute_shared_secret(struct lws_genec_ctx *ctx, uint8_t *ss, int *ss_len); /* ECDSA-specific apis */ /** lws_genecdsa_create() - Create a genecdsa and * * \param ctx: your genec context * \param context: your lws_context (for RNG access) * \param curve_table: NULL, enabling P-256, P-384 and P-521, or a replacement * struct lws_ec_curves array, terminated by an entry with * .name = NULL, of curves you want to allow * * Initializes a genecdh */ LWS_VISIBLE int lws_genecdsa_create(struct lws_genec_ctx *ctx, struct lws_context *context, const struct lws_ec_curves *curve_table); /** lws_genecdsa_new_keypair() - Create a genecdsa with a new public / private key * * \param ctx: your genec context * \param curve_name: an EC curve name, like "P-256" * \param el: array pf LWS_GENCRYPTO_EC_KEYEL_COUNT key elements to take the new key * * Creates a genecdsa with a newly minted EC public / private key */ LWS_VISIBLE LWS_EXTERN int lws_genecdsa_new_keypair(struct lws_genec_ctx *ctx, const char *curve_name, struct lws_gencrypto_keyelem *el); /** lws_genecdsa_set_key() - Apply an EC key to an ecdsa context * * \param ctx: your genecdsa context * \param el: your key elements * * Applies an EC key to an ecdsa context */ LWS_VISIBLE LWS_EXTERN int lws_genecdsa_set_key(struct lws_genec_ctx *ctx, const struct lws_gencrypto_keyelem *el); /** lws_genecdsa_hash_sig_verify_jws() - Verifies a JWS ECDSA signature on a given hash * * \param ctx: your struct lws_genrsa_ctx * \param in: unencrypted payload (usually a recomputed hash) * \param hash_type: one of LWS_GENHASH_TYPE_ * \param keybits: number of bits in the crypto key * \param sig: pointer to the signature we received with the payload * \param sig_len: length of the signature we are checking in bytes * * This just looks at the signed hash... that's why there's no input length * parameter, it's decided by the choice of hash. It's up to you to confirm * separately the actual payload matches the hash that was confirmed by this to * be validly signed. * * Returns <0 for error, or 0 if signature matches the hash + key.. * * The JWS ECDSA signature verification algorithm differs to generic ECDSA * signatures and they're not interoperable. * * This and related APIs operate identically with OpenSSL or mbedTLS backends. */ LWS_VISIBLE LWS_EXTERN int lws_genecdsa_hash_sig_verify_jws(struct lws_genec_ctx *ctx, const uint8_t *in, enum lws_genhash_types hash_type, int keybits, const uint8_t *sig, size_t sig_len); /** lws_genecdsa_hash_sign_jws() - Creates a JWS ECDSA signature for a hash you provide * * \param ctx: your struct lws_genrsa_ctx * \param in: precomputed hash * \param hash_type: one of LWS_GENHASH_TYPE_ * \param keybits: number of bits in the crypto key * \param sig: pointer to buffer to take signature * \param sig_len: length of the buffer (must be >= length of key N) * * Returns <0 for error, or >=0 for success. * * This creates a JWS ECDSA signature for a hash you already computed and provide. * * The JWS ECDSA signature generation algorithm differs to generic ECDSA * signatures and they're not interoperable. * * This and related APIs operate identically with OpenSSL or mbedTLS backends. */ LWS_VISIBLE LWS_EXTERN int lws_genecdsa_hash_sign_jws(struct lws_genec_ctx *ctx, const uint8_t *in, enum lws_genhash_types hash_type, int keybits, uint8_t *sig, size_t sig_len); /* Apis that apply to both ECDH and ECDSA */ LWS_VISIBLE LWS_EXTERN void lws_genec_destroy(struct lws_genec_ctx *ctx); LWS_VISIBLE LWS_EXTERN void lws_genec_destroy_elements(struct lws_gencrypto_keyelem *el); LWS_VISIBLE LWS_EXTERN int lws_genec_dump(struct lws_gencrypto_keyelem *el); libwebsockets-4.3.5/include/libwebsockets/lws-genhash.h000066400000000000000000000140031476025525100232440ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /*! \defgroup generichash Generic Hash * ## Generic Hash related functions * * Lws provides generic hash / digest accessors that abstract the ones * provided by whatever tls library you are linking against. * * It lets you use the same code if you build against mbedtls or OpenSSL * for example. */ ///@{ enum lws_genhash_types { LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHASH_TYPE_MD5, LWS_GENHASH_TYPE_SHA1, LWS_GENHASH_TYPE_SHA256, LWS_GENHASH_TYPE_SHA384, LWS_GENHASH_TYPE_SHA512, }; enum lws_genhmac_types { LWS_GENHMAC_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_SHA256, LWS_GENHMAC_TYPE_SHA384, LWS_GENHMAC_TYPE_SHA512, }; #define LWS_GENHASH_LARGEST 64 struct lws_genhash_ctx { uint8_t type; #if defined(LWS_WITH_MBEDTLS) union { mbedtls_md5_context md5; mbedtls_sha1_context sha1; mbedtls_sha256_context sha256; mbedtls_sha512_context sha512; /* 384 also uses this */ const mbedtls_md_info_t *hmac; } u; #else const EVP_MD *evp_type; EVP_MD_CTX *mdctx; #endif }; struct lws_genhmac_ctx { uint8_t type; #if defined(LWS_WITH_MBEDTLS) const mbedtls_md_info_t *hmac; mbedtls_md_context_t ctx; #else const EVP_MD *evp_type; #if defined(LWS_HAVE_EVP_PKEY_new_raw_private_key) EVP_MD_CTX *ctx; EVP_PKEY *key; #else #if defined(LWS_HAVE_HMAC_CTX_new) HMAC_CTX *ctx; #else HMAC_CTX ctx; #endif #endif #endif }; /** lws_genhash_size() - get hash size in bytes * * \param type: one of LWS_GENHASH_TYPE_... * * Returns number of bytes in this type of hash, if the hash type is unknown, it * will return 0. */ LWS_VISIBLE LWS_EXTERN size_t LWS_WARN_UNUSED_RESULT lws_genhash_size(enum lws_genhash_types type); /** lws_genhmac_size() - get hash size in bytes * * \param type: one of LWS_GENHASH_TYPE_... * * Returns number of bytes in this type of hmac, if the hmac type is unknown, it * will return 0. */ LWS_VISIBLE LWS_EXTERN size_t LWS_WARN_UNUSED_RESULT lws_genhmac_size(enum lws_genhmac_types type); /** lws_genhash_init() - prepare your struct lws_genhash_ctx for use * * \param ctx: your struct lws_genhash_ctx * \param type: one of LWS_GENHASH_TYPE_... * * Initializes the hash context for the type you requested */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_genhash_init(struct lws_genhash_ctx *ctx, enum lws_genhash_types type); /** lws_genhash_update() - digest len bytes of the buffer starting at in * * \param ctx: your struct lws_genhash_ctx * \param in: start of the bytes to digest * \param len: count of bytes to digest * * Updates the state of your hash context to reflect digesting len bytes from in */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_genhash_update(struct lws_genhash_ctx *ctx, const void *in, size_t len); /** lws_genhash_destroy() - copy out the result digest and destroy the ctx * * \param ctx: your struct lws_genhash_ctx * \param result: NULL, or where to copy the result hash * * Finalizes the hash and copies out the digest. Destroys any allocations such * that ctx can safely go out of scope after calling this. * * NULL result is supported so that you can destroy the ctx cleanly on error * conditions, where there is no valid result. */ LWS_VISIBLE LWS_EXTERN int lws_genhash_destroy(struct lws_genhash_ctx *ctx, void *result); /** lws_genhmac_init() - prepare your struct lws_genhmac_ctx for use * * \param ctx: your struct lws_genhmac_ctx * \param type: one of LWS_GENHMAC_TYPE_... * \param key: pointer to the start of the HMAC key * \param key_len: length of the HMAC key * * Initializes the hash context for the type you requested * * If the return is nonzero, it failed and there is nothing needing to be * destroyed. */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_genhmac_init(struct lws_genhmac_ctx *ctx, enum lws_genhmac_types type, const uint8_t *key, size_t key_len); /** lws_genhmac_update() - digest len bytes of the buffer starting at in * * \param ctx: your struct lws_genhmac_ctx * \param in: start of the bytes to digest * \param len: count of bytes to digest * * Updates the state of your hash context to reflect digesting len bytes from in * * If the return is nonzero, it failed and needs destroying. */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_genhmac_update(struct lws_genhmac_ctx *ctx, const void *in, size_t len); /** lws_genhmac_destroy() - copy out the result digest and destroy the ctx * * \param ctx: your struct lws_genhmac_ctx * \param result: NULL, or where to copy the result hash * * Finalizes the hash and copies out the digest. Destroys any allocations such * that ctx can safely go out of scope after calling this. * * NULL result is supported so that you can destroy the ctx cleanly on error * conditions, where there is no valid result. */ LWS_VISIBLE LWS_EXTERN int lws_genhmac_destroy(struct lws_genhmac_ctx *ctx, void *result); ///@} libwebsockets-4.3.5/include/libwebsockets/lws-genrsa.h000066400000000000000000000217651476025525100231230ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /*! \defgroup genericRSA Generic RSA * ## Generic RSA related functions * * Lws provides generic RSA functions that abstract the ones * provided by whatever OpenSSL library you are linking against. * * It lets you use the same code if you build against mbedtls or OpenSSL * for example. */ ///@{ /* include/libwebsockets/lws-jwk.h must be included before this */ enum enum_genrsa_mode { LGRSAM_PKCS1_1_5, LGRSAM_PKCS1_OAEP_PSS, LGRSAM_COUNT }; struct lws_genrsa_ctx { #if defined(LWS_WITH_MBEDTLS) mbedtls_rsa_context *ctx; #else BIGNUM *bn[LWS_GENCRYPTO_RSA_KEYEL_COUNT]; EVP_PKEY_CTX *ctx; RSA *rsa; #endif struct lws_context *context; enum enum_genrsa_mode mode; }; /** lws_genrsa_public_decrypt_create() - Create RSA public decrypt context * * \param ctx: your struct lws_genrsa_ctx * \param el: struct prepared with key element data * \param context: lws_context for RNG * \param mode: RSA mode, one of LGRSAM_ constants * \param oaep_hashid: the lws genhash id for the hash used in MFG1 hash * used in OAEP mode - normally, SHA1 * * Creates an RSA context with a public key associated with it, formed from * the key elements in \p el. * * Mode LGRSAM_PKCS1_1_5 is in widespread use but has weaknesses. It's * recommended to use LGRSAM_PKCS1_OAEP_PSS for new implementations. * * Returns 0 for OK or nonzero for error. * * This and related APIs operate identically with OpenSSL or mbedTLS backends. */ LWS_VISIBLE LWS_EXTERN int lws_genrsa_create(struct lws_genrsa_ctx *ctx, const struct lws_gencrypto_keyelem *el, struct lws_context *context, enum enum_genrsa_mode mode, enum lws_genhash_types oaep_hashid); /** lws_genrsa_destroy_elements() - Free allocations in genrsa_elements * * \param el: your struct lws_gencrypto_keyelem * * This is a helper for user code making use of struct lws_gencrypto_keyelem * where the elements are allocated on the heap, it frees any non-NULL * buf element and sets the buf to NULL. * * NB: lws_genrsa_public_... apis do not need this as they take care of the key * creation and destruction themselves. */ LWS_VISIBLE LWS_EXTERN void lws_genrsa_destroy_elements(struct lws_gencrypto_keyelem *el); /** lws_genrsa_new_keypair() - Create new RSA keypair * * \param context: your struct lws_context (may be used for RNG) * \param ctx: your struct lws_genrsa_ctx * \param mode: RSA mode, one of LGRSAM_ constants * \param el: struct to get the new key element data allocated into it * \param bits: key size, eg, 4096 * * Creates a new RSA context and generates a new keypair into it, with \p bits * bits. * * Returns 0 for OK or nonzero for error. * * Mode LGRSAM_PKCS1_1_5 is in widespread use but has weaknesses. It's * recommended to use LGRSAM_PKCS1_OAEP_PSS for new implementations. * * This and related APIs operate identically with OpenSSL or mbedTLS backends. */ LWS_VISIBLE LWS_EXTERN int lws_genrsa_new_keypair(struct lws_context *context, struct lws_genrsa_ctx *ctx, enum enum_genrsa_mode mode, struct lws_gencrypto_keyelem *el, int bits); /** lws_genrsa_public_encrypt() - Perform RSA public key encryption * * \param ctx: your struct lws_genrsa_ctx * \param in: plaintext input * \param in_len: length of plaintext input * \param out: encrypted output * * Performs PKCS1 v1.5 Encryption * * Returns <0 for error, or length of decrypted data. * * This and related APIs operate identically with OpenSSL or mbedTLS backends. */ LWS_VISIBLE LWS_EXTERN int lws_genrsa_public_encrypt(struct lws_genrsa_ctx *ctx, const uint8_t *in, size_t in_len, uint8_t *out); /** lws_genrsa_private_encrypt() - Perform RSA private key encryption * * \param ctx: your struct lws_genrsa_ctx * \param in: plaintext input * \param in_len: length of plaintext input * \param out: encrypted output * * Performs PKCS1 v1.5 Encryption * * Returns <0 for error, or length of decrypted data. * * This and related APIs operate identically with OpenSSL or mbedTLS backends. */ LWS_VISIBLE LWS_EXTERN int lws_genrsa_private_encrypt(struct lws_genrsa_ctx *ctx, const uint8_t *in, size_t in_len, uint8_t *out); /** lws_genrsa_public_decrypt() - Perform RSA public key decryption * * \param ctx: your struct lws_genrsa_ctx * \param in: encrypted input * \param in_len: length of encrypted input * \param out: decrypted output * \param out_max: size of output buffer * * Performs PKCS1 v1.5 Decryption * * Returns <0 for error, or length of decrypted data. * * This and related APIs operate identically with OpenSSL or mbedTLS backends. */ LWS_VISIBLE LWS_EXTERN int lws_genrsa_public_decrypt(struct lws_genrsa_ctx *ctx, const uint8_t *in, size_t in_len, uint8_t *out, size_t out_max); /** lws_genrsa_private_decrypt() - Perform RSA private key decryption * * \param ctx: your struct lws_genrsa_ctx * \param in: encrypted input * \param in_len: length of encrypted input * \param out: decrypted output * \param out_max: size of output buffer * * Performs PKCS1 v1.5 Decryption * * Returns <0 for error, or length of decrypted data. * * This and related APIs operate identically with OpenSSL or mbedTLS backends. */ LWS_VISIBLE LWS_EXTERN int lws_genrsa_private_decrypt(struct lws_genrsa_ctx *ctx, const uint8_t *in, size_t in_len, uint8_t *out, size_t out_max); /** lws_genrsa_hash_sig_verify() - Verifies RSA signature on a given hash * * \param ctx: your struct lws_genrsa_ctx * \param in: input to be hashed * \param hash_type: one of LWS_GENHASH_TYPE_ * \param sig: pointer to the signature we received with the payload * \param sig_len: length of the signature we are checking in bytes * * Returns <0 for error, or 0 if signature matches the payload + key. * * This just looks at a hash... that's why there's no input length * parameter, it's decided by the choice of hash. It's up to you to confirm * separately the actual payload matches the hash that was confirmed by this to * be validly signed. * * This and related APIs operate identically with OpenSSL or mbedTLS backends. */ LWS_VISIBLE LWS_EXTERN int lws_genrsa_hash_sig_verify(struct lws_genrsa_ctx *ctx, const uint8_t *in, enum lws_genhash_types hash_type, const uint8_t *sig, size_t sig_len); /** lws_genrsa_hash_sign() - Creates an ECDSA signature for a hash you provide * * \param ctx: your struct lws_genrsa_ctx * \param in: input to be hashed and signed * \param hash_type: one of LWS_GENHASH_TYPE_ * \param sig: pointer to buffer to take signature * \param sig_len: length of the buffer (must be >= length of key N) * * Returns <0 for error, or \p sig_len for success. * * This creates an RSA signature for a hash you already computed and provide. * You should have created the hash before calling this by iterating over the * actual payload you need to confirm. * * This and related APIs operate identically with OpenSSL or mbedTLS backends. */ LWS_VISIBLE LWS_EXTERN int lws_genrsa_hash_sign(struct lws_genrsa_ctx *ctx, const uint8_t *in, enum lws_genhash_types hash_type, uint8_t *sig, size_t sig_len); /** lws_genrsa_public_decrypt_destroy() - Destroy RSA public decrypt context * * \param ctx: your struct lws_genrsa_ctx * * Destroys any allocations related to \p ctx. * * This and related APIs operate identically with OpenSSL or mbedTLS backends. */ LWS_VISIBLE LWS_EXTERN void lws_genrsa_destroy(struct lws_genrsa_ctx *ctx); /** lws_genrsa_render_pkey_asn1() - Exports public or private key to ASN1/DER * * \param ctx: your struct lws_genrsa_ctx * \param _private: 0 = public part only, 1 = all parts of the key * \param pkey_asn1: pointer to buffer to take the ASN1 * \param pkey_asn1_len: max size of the pkey_asn1_len * * Returns length of pkey_asn1 written, or -1 for error. */ LWS_VISIBLE LWS_EXTERN int lws_genrsa_render_pkey_asn1(struct lws_genrsa_ctx *ctx, int _private, uint8_t *pkey_asn1, size_t pkey_asn1_len); ///@} libwebsockets-4.3.5/include/libwebsockets/lws-gpio.h000066400000000000000000000040301476025525100225640ustar00rootroot00000000000000/* * Generic GPIO ops * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * This is like an abstract class for gpio, a real implementation provides * functions for the ops that use the underlying OS gpio arrangements. */ #if !defined(__LWS_GPIO_H__) #define __LWS_GPIO_H__ typedef int _lws_plat_gpio_t; typedef enum { LWSGGPIO_IRQ_NONE, LWSGGPIO_IRQ_RISING, LWSGGPIO_IRQ_FALLING, LWSGGPIO_IRQ_CHANGE, LWSGGPIO_IRQ_LOW, LWSGGPIO_IRQ_HIGH } lws_gpio_irq_t; enum { LWSGGPIO_FL_READ = (1 << 0), LWSGGPIO_FL_WRITE = (1 << 1), LWSGGPIO_FL_PULLUP = (1 << 2), LWSGGPIO_FL_PULLDOWN = (1 << 3), LWSGGPIO_FL_START_LOW = (1 << 4), }; typedef void (*lws_gpio_irq_cb_t)(void *arg); typedef struct lws_gpio_ops { void (*mode)(_lws_plat_gpio_t gpio, int flags); int (*read)(_lws_plat_gpio_t gpio); void (*set)(_lws_plat_gpio_t gpio, int val); int (*irq_mode)(_lws_plat_gpio_t gpio, lws_gpio_irq_t irq, lws_gpio_irq_cb_t cb, void *arg); } lws_gpio_ops_t; #endif libwebsockets-4.3.5/include/libwebsockets/lws-http.h000066400000000000000000001072771476025525100226260ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /* minimal space for typical headers and CSP stuff */ #define LWS_RECOMMENDED_MIN_HEADER_SPACE 2048 /*! \defgroup http HTTP Modules related to handling HTTP */ //@{ /*! \defgroup httpft HTTP File transfer * \ingroup http APIs for sending local files in response to HTTP requests */ //@{ /** * lws_get_mimetype() - Determine mimetype to use from filename * * \param file: filename * \param m: NULL, or mount context * * This uses a canned list of known filetypes first, if no match and m is * non-NULL, then tries a list of per-mount file suffix to mimtype mappings. * * Returns either NULL or a pointer to the mimetype matching the file. */ LWS_VISIBLE LWS_EXTERN const char * lws_get_mimetype(const char *file, const struct lws_http_mount *m); /** * lws_serve_http_file() - Send a file back to the client using http * \param wsi: Websocket instance (available from user callback) * \param file: The file to issue over http * \param content_type: The http content type, eg, text/html * \param other_headers: NULL or pointer to header string * \param other_headers_len: length of the other headers if non-NULL * * This function is intended to be called from the callback in response * to http requests from the client. It allows the callback to issue * local files down the http link in a single step. * * Returning <0 indicates error and the wsi should be closed. Returning * >0 indicates the file was completely sent and * lws_http_transaction_completed() called on the wsi (and close if != 0) * ==0 indicates the file transfer is started and needs more service later, * the wsi should be left alone. */ LWS_VISIBLE LWS_EXTERN int lws_serve_http_file(struct lws *wsi, const char *file, const char *content_type, const char *other_headers, int other_headers_len); LWS_VISIBLE LWS_EXTERN int lws_serve_http_file_fragment(struct lws *wsi); //@} enum http_status { HTTP_STATUS_CONTINUE = 100, HTTP_STATUS_OK = 200, HTTP_STATUS_NO_CONTENT = 204, HTTP_STATUS_PARTIAL_CONTENT = 206, HTTP_STATUS_MOVED_PERMANENTLY = 301, HTTP_STATUS_FOUND = 302, HTTP_STATUS_SEE_OTHER = 303, HTTP_STATUS_NOT_MODIFIED = 304, HTTP_STATUS_BAD_REQUEST = 400, HTTP_STATUS_UNAUTHORIZED, HTTP_STATUS_PAYMENT_REQUIRED, HTTP_STATUS_FORBIDDEN, HTTP_STATUS_NOT_FOUND, HTTP_STATUS_METHOD_NOT_ALLOWED, HTTP_STATUS_NOT_ACCEPTABLE, HTTP_STATUS_PROXY_AUTH_REQUIRED, HTTP_STATUS_REQUEST_TIMEOUT, HTTP_STATUS_CONFLICT, HTTP_STATUS_GONE, HTTP_STATUS_LENGTH_REQUIRED, HTTP_STATUS_PRECONDITION_FAILED, HTTP_STATUS_REQ_ENTITY_TOO_LARGE, HTTP_STATUS_REQ_URI_TOO_LONG, HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE, HTTP_STATUS_REQ_RANGE_NOT_SATISFIABLE, HTTP_STATUS_EXPECTATION_FAILED, HTTP_STATUS_INTERNAL_SERVER_ERROR = 500, HTTP_STATUS_NOT_IMPLEMENTED, HTTP_STATUS_BAD_GATEWAY, HTTP_STATUS_SERVICE_UNAVAILABLE, HTTP_STATUS_GATEWAY_TIMEOUT, HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED, }; /*! \defgroup html-chunked-substitution HTML Chunked Substitution * \ingroup http * * ##HTML chunked Substitution * * APIs for receiving chunks of text, replacing a set of variable names via * a callback, and then prepending and appending HTML chunked encoding * headers. */ //@{ struct lws_process_html_args { char *p; /**< pointer to the buffer containing the data */ int len; /**< length of the original data at p */ int max_len; /**< maximum length we can grow the data to */ int final; /**< set if this is the last chunk of the file */ int chunked; /**< 0 == unchunked, 1 == produce chunk headers (incompatible with HTTP/2) */ }; typedef const char *(*lws_process_html_state_cb)(void *data, int index); struct lws_process_html_state { char *start; /**< pointer to start of match */ char swallow[16]; /**< matched character buffer */ int pos; /**< position in match */ void *data; /**< opaque pointer */ const char * const *vars; /**< list of variable names */ int count_vars; /**< count of variable names */ lws_process_html_state_cb replace; /**< called on match to perform substitution */ }; /*! lws_chunked_html_process() - generic chunked substitution * \param args: buffer to process using chunked encoding * \param s: current processing state */ LWS_VISIBLE LWS_EXTERN int lws_chunked_html_process(struct lws_process_html_args *args, struct lws_process_html_state *s); //@} /** \defgroup HTTP-headers-read HTTP headers: read * \ingroup http * * ##HTTP header releated functions * * In lws the client http headers are temporarily stored in a pool, only for the * duration of the http part of the handshake. It's because in most cases, * the header content is ignored for the whole rest of the connection lifetime * and would then just be taking up space needlessly. * * During LWS_CALLBACK_HTTP when the URI path is delivered is the last time * the http headers are still allocated, you can use these apis then to * look at and copy out interesting header content (cookies, etc) * * Notice that the header total length reported does not include a terminating * '\0', however you must allocate for it when using the _copy apis. So the * length reported for a header containing "123" is 3, but you must provide * a buffer of length 4 so that "123\0" may be copied into it, or the copy * will fail with a nonzero return code. * * In the special case of URL arguments, like ?x=1&y=2, the arguments are * stored in a token named for the method, eg, WSI_TOKEN_GET_URI if it * was a GET or WSI_TOKEN_POST_URI if POST. You can check the total * length to confirm the method. * * For URL arguments, each argument is stored urldecoded in a "fragment", so * you can use the fragment-aware api lws_hdr_copy_fragment() to access each * argument in turn: the fragments contain urldecoded strings like x=1 or y=2. * * As a convenience, lws has an api that will find the fragment with a * given name= part, lws_get_urlarg_by_name(). */ ///@{ /** struct lws_tokens * you need these to look at headers that have been parsed if using the * LWS_CALLBACK_FILTER_CONNECTION callback. If a header from the enum * list below is absent, .token = NULL and len = 0. Otherwise .token * points to .len chars containing that header content. */ struct lws_tokens { unsigned char *token; /**< pointer to start of the token */ int len; /**< length of the token's value */ }; /* enum lws_token_indexes * these have to be kept in sync with lextable.h / minilex.c * * NOTE: These public enums are part of the abi. If you want to add one, * add it at where specified so existing users are unaffected. */ enum lws_token_indexes { WSI_TOKEN_GET_URI, /* 0 */ WSI_TOKEN_POST_URI, #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_HTTP_HEADERS_ALL) WSI_TOKEN_OPTIONS_URI, #endif WSI_TOKEN_HOST, WSI_TOKEN_CONNECTION, WSI_TOKEN_UPGRADE, /* 5 */ WSI_TOKEN_ORIGIN, #if defined(LWS_ROLE_WS) || defined(LWS_HTTP_HEADERS_ALL) WSI_TOKEN_DRAFT, #endif WSI_TOKEN_CHALLENGE, #if defined(LWS_ROLE_WS) || defined(LWS_HTTP_HEADERS_ALL) WSI_TOKEN_EXTENSIONS, WSI_TOKEN_KEY1, /* 10 */ WSI_TOKEN_KEY2, WSI_TOKEN_PROTOCOL, WSI_TOKEN_ACCEPT, WSI_TOKEN_NONCE, #endif WSI_TOKEN_HTTP, #if defined(LWS_ROLE_H2) || defined(LWS_HTTP_HEADERS_ALL) WSI_TOKEN_HTTP2_SETTINGS, /* 16 */ #endif WSI_TOKEN_HTTP_ACCEPT, #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_HTTP_HEADERS_ALL) WSI_TOKEN_HTTP_AC_REQUEST_HEADERS, #endif WSI_TOKEN_HTTP_IF_MODIFIED_SINCE, WSI_TOKEN_HTTP_IF_NONE_MATCH, /* 20 */ WSI_TOKEN_HTTP_ACCEPT_ENCODING, WSI_TOKEN_HTTP_ACCEPT_LANGUAGE, WSI_TOKEN_HTTP_PRAGMA, WSI_TOKEN_HTTP_CACHE_CONTROL, WSI_TOKEN_HTTP_AUTHORIZATION, WSI_TOKEN_HTTP_COOKIE, WSI_TOKEN_HTTP_CONTENT_LENGTH, /* 27 */ WSI_TOKEN_HTTP_CONTENT_TYPE, WSI_TOKEN_HTTP_DATE, WSI_TOKEN_HTTP_RANGE, #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_ROLE_H2) || defined(LWS_HTTP_HEADERS_ALL) WSI_TOKEN_HTTP_REFERER, #endif #if defined(LWS_ROLE_WS) || defined(LWS_HTTP_HEADERS_ALL) WSI_TOKEN_KEY, WSI_TOKEN_VERSION, WSI_TOKEN_SWORIGIN, #endif #if defined(LWS_ROLE_H2) || defined(LWS_HTTP_HEADERS_ALL) WSI_TOKEN_HTTP_COLON_AUTHORITY, WSI_TOKEN_HTTP_COLON_METHOD, WSI_TOKEN_HTTP_COLON_PATH, WSI_TOKEN_HTTP_COLON_SCHEME, WSI_TOKEN_HTTP_COLON_STATUS, #endif #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_ROLE_H2) || defined(LWS_HTTP_HEADERS_ALL) WSI_TOKEN_HTTP_ACCEPT_CHARSET, #endif WSI_TOKEN_HTTP_ACCEPT_RANGES, #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_ROLE_H2) || defined(LWS_HTTP_HEADERS_ALL) WSI_TOKEN_HTTP_ACCESS_CONTROL_ALLOW_ORIGIN, #endif WSI_TOKEN_HTTP_AGE, WSI_TOKEN_HTTP_ALLOW, WSI_TOKEN_HTTP_CONTENT_DISPOSITION, WSI_TOKEN_HTTP_CONTENT_ENCODING, WSI_TOKEN_HTTP_CONTENT_LANGUAGE, WSI_TOKEN_HTTP_CONTENT_LOCATION, WSI_TOKEN_HTTP_CONTENT_RANGE, WSI_TOKEN_HTTP_ETAG, WSI_TOKEN_HTTP_EXPECT, WSI_TOKEN_HTTP_EXPIRES, WSI_TOKEN_HTTP_FROM, WSI_TOKEN_HTTP_IF_MATCH, WSI_TOKEN_HTTP_IF_RANGE, WSI_TOKEN_HTTP_IF_UNMODIFIED_SINCE, WSI_TOKEN_HTTP_LAST_MODIFIED, WSI_TOKEN_HTTP_LINK, WSI_TOKEN_HTTP_LOCATION, #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_ROLE_H2) || defined(LWS_HTTP_HEADERS_ALL) WSI_TOKEN_HTTP_MAX_FORWARDS, WSI_TOKEN_HTTP_PROXY_AUTHENTICATE, WSI_TOKEN_HTTP_PROXY_AUTHORIZATION, #endif WSI_TOKEN_HTTP_REFRESH, WSI_TOKEN_HTTP_RETRY_AFTER, WSI_TOKEN_HTTP_SERVER, WSI_TOKEN_HTTP_SET_COOKIE, #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_ROLE_H2) || defined(LWS_HTTP_HEADERS_ALL) WSI_TOKEN_HTTP_STRICT_TRANSPORT_SECURITY, #endif WSI_TOKEN_HTTP_TRANSFER_ENCODING, #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_ROLE_H2) || defined(LWS_HTTP_HEADERS_ALL) WSI_TOKEN_HTTP_USER_AGENT, WSI_TOKEN_HTTP_VARY, WSI_TOKEN_HTTP_VIA, WSI_TOKEN_HTTP_WWW_AUTHENTICATE, #endif #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_HTTP_HEADERS_ALL) WSI_TOKEN_PATCH_URI, WSI_TOKEN_PUT_URI, WSI_TOKEN_DELETE_URI, #endif WSI_TOKEN_HTTP_URI_ARGS, #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_HTTP_HEADERS_ALL) WSI_TOKEN_PROXY, WSI_TOKEN_HTTP_X_REAL_IP, #endif WSI_TOKEN_HTTP1_0, WSI_TOKEN_X_FORWARDED_FOR, WSI_TOKEN_CONNECT, WSI_TOKEN_HEAD_URI, #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_ROLE_H2) || defined(LWS_HTTP_HEADERS_ALL) WSI_TOKEN_TE, WSI_TOKEN_REPLAY_NONCE, /* ACME */ #endif #if defined(LWS_ROLE_H2) || defined(LWS_HTTP_HEADERS_ALL) WSI_TOKEN_COLON_PROTOCOL, #endif WSI_TOKEN_X_AUTH_TOKEN, WSI_TOKEN_DSS_SIGNATURE, /****** add new things just above ---^ ******/ /* use token storage to stash these internally, not for * user use */ _WSI_TOKEN_CLIENT_SENT_PROTOCOLS, _WSI_TOKEN_CLIENT_PEER_ADDRESS, _WSI_TOKEN_CLIENT_URI, _WSI_TOKEN_CLIENT_HOST, _WSI_TOKEN_CLIENT_ORIGIN, _WSI_TOKEN_CLIENT_METHOD, _WSI_TOKEN_CLIENT_IFACE, _WSI_TOKEN_CLIENT_ALPN, /* always last real token index*/ WSI_TOKEN_COUNT, /* parser state additions, no storage associated */ WSI_TOKEN_NAME_PART, #if defined(LWS_WITH_CUSTOM_HEADERS) || defined(LWS_HTTP_HEADERS_ALL) WSI_TOKEN_UNKNOWN_VALUE_PART, #endif WSI_TOKEN_SKIPPING, WSI_TOKEN_SKIPPING_SAW_CR, WSI_PARSING_COMPLETE, WSI_INIT_TOKEN_MUXURL, }; struct lws_token_limits { unsigned short token_limit[WSI_TOKEN_COUNT]; /**< max chars for this token */ }; enum lws_h2_settings { H2SET_HEADER_TABLE_SIZE = 1, H2SET_ENABLE_PUSH, H2SET_MAX_CONCURRENT_STREAMS, H2SET_INITIAL_WINDOW_SIZE, H2SET_MAX_FRAME_SIZE, H2SET_MAX_HEADER_LIST_SIZE, H2SET_RESERVED7, H2SET_ENABLE_CONNECT_PROTOCOL, /* defined in mcmanus-httpbis-h2-ws-02 */ H2SET_COUNT /* always last */ }; /** * lws_token_to_string() - returns a textual representation of a hdr token index * * \param token: token index */ LWS_VISIBLE LWS_EXTERN const unsigned char * lws_token_to_string(enum lws_token_indexes token); /** * lws_hdr_total_length: report length of all fragments of a header totalled up * The returned length does not include the space for a * terminating '\0' * * \param wsi: websocket connection * \param h: which header index we are interested in */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_hdr_total_length(struct lws *wsi, enum lws_token_indexes h); /** * lws_hdr_fragment_length: report length of a single fragment of a header * The returned length does not include the space for a * terminating '\0' * * \param wsi: websocket connection * \param h: which header index we are interested in * \param frag_idx: which fragment of h we want to get the length of */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_hdr_fragment_length(struct lws *wsi, enum lws_token_indexes h, int frag_idx); /** * lws_hdr_copy() - copy all fragments of the given header to a buffer * The buffer length len must include space for an additional * terminating '\0', or it will fail returning -1. * * \param wsi: websocket connection * \param dest: destination buffer * \param len: length of destination buffer * \param h: which header index we are interested in * * copies the whole, aggregated header, even if it was delivered in * several actual headers piece by piece. Returns -1 or length of the whole * header. */ LWS_VISIBLE LWS_EXTERN int lws_hdr_copy(struct lws *wsi, char *dest, int len, enum lws_token_indexes h); /** * lws_hdr_copy_fragment() - copy a single fragment of the given header to a buffer * The buffer length len must include space for an additional * terminating '\0', or it will fail returning -1. * If the requested fragment index is not present, it fails * returning -1. * * \param wsi: websocket connection * \param dest: destination buffer * \param len: length of destination buffer * \param h: which header index we are interested in * \param frag_idx: which fragment of h we want to copy * * Normally this is only useful * to parse URI arguments like ?x=1&y=2, token index WSI_TOKEN_HTTP_URI_ARGS * fragment 0 will contain "x=1" and fragment 1 "y=2" */ LWS_VISIBLE LWS_EXTERN int lws_hdr_copy_fragment(struct lws *wsi, char *dest, int len, enum lws_token_indexes h, int frag_idx); /** * lws_hdr_custom_length() - return length of a custom header * * \param wsi: websocket connection * \param name: header string (including terminating :) * \param nlen: length of name * * Lws knows about 100 common http headers, and parses them into indexes when * it recognizes them. When it meets a header that it doesn't know, it stores * the name and value directly, and you can look them up using * lws_hdr_custom_length() and lws_hdr_custom_copy(). * * This api returns -1, or the length of the value part of the header if it * exists. Lws must be built with LWS_WITH_CUSTOM_HEADERS (on by default) to * use this api. */ LWS_VISIBLE LWS_EXTERN int lws_hdr_custom_length(struct lws *wsi, const char *name, int nlen); /** * lws_hdr_custom_copy() - copy value part of a custom header * * \param wsi: websocket connection * \param dst: pointer to buffer to receive the copy * \param len: number of bytes available at dst * \param name: header string (including terminating :) * \param nlen: length of name * * Lws knows about 100 common http headers, and parses them into indexes when * it recognizes them. When it meets a header that it doesn't know, it stores * the name and value directly, and you can look them up using * lws_hdr_custom_length() and lws_hdr_custom_copy(). * * This api returns -1, or the length of the string it copied into dst if it * was big enough to contain both the string and an extra terminating NUL. Lws * must be built with LWS_WITH_CUSTOM_HEADERS (on by default) to use this api. */ LWS_VISIBLE LWS_EXTERN int lws_hdr_custom_copy(struct lws *wsi, char *dst, int len, const char *name, int nlen); typedef void (*lws_hdr_custom_fe_cb_t)(const char *name, int nlen, void *opaque); /** * lws_hdr_custom_name_foreach() - Iterate the custom header names * * \param wsi: websocket connection * \param cb: callback for each custom header name * \param opaque: ignored by lws except to pass to callback * * Lws knows about 100 common http headers, and parses them into indexes when * it recognizes them. When it meets a header that it doesn't know, it stores * the name and value directly, and you can look them up using * lws_hdr_custom_length() and lws_hdr_custom_copy(). * * This api returns -1 on error else 0. Use lws_hdr_custom_copy() to get the * values of headers. Lws must be built with LWS_WITH_CUSTOM_HEADERS (on by * default) to use this api. */ LWS_VISIBLE LWS_EXTERN int lws_hdr_custom_name_foreach(struct lws *wsi, lws_hdr_custom_fe_cb_t cb, void *opaque); /** * lws_get_urlarg_by_name_safe() - get copy and return length of y for x=y urlargs * * \param wsi: the connection to check * \param name: the arg name, like "token" or "token=" * \param buf: the buffer to receive the urlarg (including the name= part) * \param len: the length of the buffer to receive the urlarg * * Returns -1 if not present, else the length of y in the urlarg name=y. If * zero or greater, then buf contains a copy of the string y. Any = after the * name match is trimmed off if the name does not end with = itself. * * This returns the explicit length and so can deal with binary blobs that are * percent-encoded. It also makes sure buf has a NUL just after the valid * length so it can work with NUL-based apis if you don't care about truncation. * * buf may have been written even when -1 is returned indicating no match. * * Use this in place of lws_get_urlarg_by_name() that does not return an * explicit length. */ LWS_VISIBLE LWS_EXTERN int lws_get_urlarg_by_name_safe(struct lws *wsi, const char *name, char *buf, int len); /** * lws_get_urlarg_by_name() - return pointer to arg value if present * * \param wsi: the connection to check * \param name: the arg name, like "token=" * \param buf: the buffer to receive the urlarg (including the name= part) * \param len: the length of the buffer to receive the urlarg * * Returns NULL if not found or a pointer inside buf to just after the * name= part. * * This assumed the argument can be represented with a NUL-terminated string. * It can't correctly deal with binary values encoded with %XX, eg. %00 will * be understood to terminate the string. * * Use lws_get_urlarg_by_name_safe() instead of this, which returns the length. */ LWS_VISIBLE LWS_EXTERN const char * lws_get_urlarg_by_name(struct lws *wsi, const char *name, char *buf, int len) /* LWS_WARN_DEPRECATED */; ///@} /*! \defgroup HTTP-headers-create HTTP headers: create * * ## HTTP headers: Create * * These apis allow you to create HTTP response headers in a way compatible with * both HTTP/1.x and HTTP/2. * * They each append to a buffer taking care about the buffer end, which is * passed in as a pointer. When data is written to the buffer, the current * position p is updated accordingly. * * All of these apis are LWS_WARN_UNUSED_RESULT as they can run out of space * and fail with nonzero return. */ ///@{ #define LWSAHH_CODE_MASK ((1 << 16) - 1) #define LWSAHH_FLAG_NO_SERVER_NAME (1 << 30) /** * lws_add_http_header_status() - add the HTTP response status code * * \param wsi: the connection to check * \param code: an HTTP code like 200, 404 etc (see enum http_status) * \param p: pointer to current position in buffer pointer * \param end: pointer to end of buffer * * Adds the initial response code, so should be called first. * * Code may additionally take OR'd flags: * * LWSAHH_FLAG_NO_SERVER_NAME: don't apply server name header this time */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_status(struct lws *wsi, unsigned int code, unsigned char **p, unsigned char *end); /** * lws_add_http_header_by_name() - append named header and value * * \param wsi: the connection to check * \param name: the hdr name, like "my-header:" * \param value: the value after the = for this header * \param length: the length of the value * \param p: pointer to current position in buffer pointer * \param end: pointer to end of buffer * * Appends name: value to the headers */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_by_name(struct lws *wsi, const unsigned char *name, const unsigned char *value, int length, unsigned char **p, unsigned char *end); /** * lws_add_http_header_by_token() - append given header and value * * \param wsi: the connection to check * \param token: the token index for the hdr * \param value: the value after the = for this header * \param length: the length of the value * \param p: pointer to current position in buffer pointer * \param end: pointer to end of buffer * * Appends name=value to the headers, but is able to take advantage of better * HTTP/2 coding mechanisms where possible. */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_by_token(struct lws *wsi, enum lws_token_indexes token, const unsigned char *value, int length, unsigned char **p, unsigned char *end); /** * lws_add_http_header_content_length() - append content-length helper * * \param wsi: the connection to check * \param content_length: the content length to use * \param p: pointer to current position in buffer pointer * \param end: pointer to end of buffer * * Appends content-length: content_length to the headers */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_header_content_length(struct lws *wsi, lws_filepos_t content_length, unsigned char **p, unsigned char *end); /** * lws_finalize_http_header() - terminate header block * * \param wsi: the connection to check * \param p: pointer to current position in buffer pointer * \param end: pointer to end of buffer * * Indicates no more headers will be added */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_finalize_http_header(struct lws *wsi, unsigned char **p, unsigned char *end); /** * lws_finalize_write_http_header() - Helper finializing and writing http headers * * \param wsi: the connection to check * \param start: pointer to the start of headers in the buffer, eg &buf[LWS_PRE] * \param p: pointer to current position in buffer pointer * \param end: pointer to end of buffer * * Terminates the headers correctly accoring to the protocol in use (h1 / h2) * and writes the headers. Returns nonzero for error. */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_finalize_write_http_header(struct lws *wsi, unsigned char *start, unsigned char **p, unsigned char *end); #define LWS_ILLEGAL_HTTP_CONTENT_LEN ((lws_filepos_t)-1ll) /** * lws_add_http_common_headers() - Helper preparing common http headers * * \param wsi: the connection to check * \param code: an HTTP code like 200, 404 etc (see enum http_status) * \param content_type: the content type, like "text/html" * \param content_len: the content length, in bytes * \param p: pointer to current position in buffer pointer * \param end: pointer to end of buffer * * Adds the initial response code, so should be called first. * * Code may additionally take OR'd flags: * * LWSAHH_FLAG_NO_SERVER_NAME: don't apply server name header this time * * This helper just calls public apis to simplify adding headers that are * commonly needed. If it doesn't fit your case, or you want to add additional * headers just call the public apis directly yourself for what you want. * * You can miss out the content length header by providing the constant * LWS_ILLEGAL_HTTP_CONTENT_LEN for the content_len. * * It does not call lws_finalize_http_header(), to allow you to add further * headers after calling this. You will need to call that yourself at the end. */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_add_http_common_headers(struct lws *wsi, unsigned int code, const char *content_type, lws_filepos_t content_len, unsigned char **p, unsigned char *end); enum { LWSHUMETH_GET, LWSHUMETH_POST, LWSHUMETH_OPTIONS, LWSHUMETH_PUT, LWSHUMETH_PATCH, LWSHUMETH_DELETE, LWSHUMETH_CONNECT, LWSHUMETH_HEAD, LWSHUMETH_COLON_PATH, }; /** * lws_http_get_uri_and_method() - Get information on method and url * * \param wsi: the connection to get information on * \param puri_ptr: points to pointer to set to url * \param puri_len: points to int to set to uri length * * Returns -1 or method index as one of the LWSHUMETH_ constants * * If returns method, *puri_ptr is set to the method's URI string and *puri_len * to its length */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_http_get_uri_and_method(struct lws *wsi, char **puri_ptr, int *puri_len); ///@} /*! \defgroup urlendec Urlencode and Urldecode * \ingroup http * * ##HTML chunked Substitution * * APIs for receiving chunks of text, replacing a set of variable names via * a callback, and then prepending and appending HTML chunked encoding * headers. */ //@{ /** * lws_urlencode() - like strncpy but with urlencoding * * \param escaped: output buffer * \param string: input buffer ('/0' terminated) * \param len: output buffer max length * * Because urlencoding expands the output string, it's not * possible to do it in-place, ie, with escaped == string */ LWS_VISIBLE LWS_EXTERN const char * lws_urlencode(char *escaped, const char *string, int len); /* * URLDECODE 1 / 2 * * This simple urldecode only operates until the first '\0' and requires the * data to exist all at once */ /** * lws_urldecode() - like strncpy but with urldecoding * * \param string: output buffer * \param escaped: input buffer ('\0' terminated) * \param len: output buffer max length * * This is only useful for '\0' terminated strings * * Since urldecoding only shrinks the output string, it is possible to * do it in-place, ie, string == escaped * * Returns 0 if completed OK or nonzero for urldecode violation (non-hex chars * where hex required, etc) */ LWS_VISIBLE LWS_EXTERN int lws_urldecode(char *string, const char *escaped, int len); ///@} /** * lws_http_date_render_from_unix() - render unixtime as RFC7231 date string * * \param buf: Destination string buffer * \param len: avilable length of dest string buffer in bytes * \param t: pointer to the time_t to render * * Returns 0 if time_t is rendered into the string buffer successfully, else * nonzero. */ LWS_VISIBLE LWS_EXTERN int lws_http_date_render_from_unix(char *buf, size_t len, const time_t *t); /** * lws_http_date_parse_unix() - parse a RFC7231 date string into unixtime * * \param b: Source string buffer * \param len: avilable length of source string buffer in bytes * \param t: pointer to the destination time_t to set * * Returns 0 if string buffer parsed as RFC7231 time successfully, and * *t set to the parsed unixtime, else return nonzero. */ LWS_VISIBLE LWS_EXTERN int lws_http_date_parse_unix(const char *b, size_t len, time_t *t); /** * lws_http_check_retry_after() - increase a timeout if retry-after present * * \param wsi: http stream this relates to * \param us_interval_in_out: default us retry interval on entry may be updated * * This function may extend the incoming retry interval if the server has * requested that using retry-after: header. It won't reduce the incoming * retry interval, only leave it alone or increase it. * * *us_interval_in_out should be set to a default retry interval on entry, if * the wsi has a retry-after time or interval that resolves to an interval * longer than the entry *us_interval_in_out, that will be updated to the longer * interval and return 0. * * If no usable retry-after or the time is now or in the past, * *us_interval_in_out is left alone and the function returns nonzero. */ LWS_VISIBLE LWS_EXTERN int lws_http_check_retry_after(struct lws *wsi, lws_usec_t *us_interval_in_out); /** * lws_return_http_status() - Return simple http status * \param wsi: Websocket instance (available from user callback) * \param code: Status index, eg, 404 * \param html_body: User-readable HTML description < 1KB, or NULL * * Helper to report HTTP errors back to the client cleanly and * consistently */ LWS_VISIBLE LWS_EXTERN int lws_return_http_status(struct lws *wsi, unsigned int code, const char *html_body); /** * lws_http_redirect() - write http redirect out on wsi * * \param wsi: websocket connection * \param code: HTTP response code (eg, 301) * \param loc: where to redirect to * \param len: length of loc * \param p: pointer current position in buffer (updated as we write) * \param end: pointer to end of buffer * * Returns amount written, or < 0 indicating fatal write failure. */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_http_redirect(struct lws *wsi, int code, const unsigned char *loc, int len, unsigned char **p, unsigned char *end); /** * lws_http_transaction_completed() - wait for new http transaction or close * \param wsi: websocket connection * * Returns nonzero if the HTTP connection must close now * Returns 0 and resets connection to wait for new HTTP header / * transaction if possible */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_http_transaction_completed(struct lws *wsi); /** * lws_http_headers_detach() - drop the associated headers storage and allow * it to be reused by another connection * \param wsi: http connection * * If the wsi has an ah headers struct attached, detach it. */ LWS_VISIBLE LWS_EXTERN int lws_http_headers_detach(struct lws *wsi); /** * lws_http_mark_sse() - called to indicate this http stream is now doing SSE * * \param wsi: http connection * * Cancel any timeout on the wsi, and for h2, mark the network connection as * containing an immortal stream for the duration the SSE stream is open. */ LWS_VISIBLE LWS_EXTERN int lws_http_mark_sse(struct lws *wsi); /** * lws_h2_client_stream_long_poll_rxonly() - h2 stream to immortal read-only * * \param wsi: h2 stream client wsi * * Send END_STREAM-flagged zero-length DATA frame to set client stream wsi into * half-closed (local) and remote into half-closed (remote). Set the client * stream wsi to be immortal (not subject to timeouts). * * Used if the remote server supports immortal long poll to put the stream into * a read-only state where it can wait as long as needed for rx. * * Returns 0 if the process (which happens asynchronously) started or non-zero * if it wasn't an h2 stream. */ LWS_VISIBLE LWS_EXTERN int lws_h2_client_stream_long_poll_rxonly(struct lws *wsi); /** * lws_http_compression_apply() - apply an http compression transform * * \param wsi: the wsi to apply the compression transform to * \param name: NULL, or the name of the compression transform, eg, "deflate" * \param p: pointer to pointer to headers buffer * \param end: pointer to end of headers buffer * \param decomp: 0 = add compressor to wsi, 1 = add decompressor * * This allows transparent compression of dynamically generated HTTP. The * requested compression (eg, "deflate") is only applied if the client headers * indicated it was supported (and it has support in lws), otherwise it's a NOP. * * If the requested compression method is NULL, then the supported compression * formats are tried, and for non-decompression (server) mode the first that's * found on the client's accept-encoding header is chosen. * * NOTE: the compression transform, same as h2 support, relies on the user * code using LWS_WRITE_HTTP and then LWS_WRITE_HTTP_FINAL on the last part * written. The internal lws fileserving code already does this. * * If the library was built without the cmake option * LWS_WITH_HTTP_STREAM_COMPRESSION set, then a NOP is provided for this api, * allowing user code to build either way and use compression if available. */ LWS_VISIBLE LWS_EXTERN int lws_http_compression_apply(struct lws *wsi, const char *name, unsigned char **p, unsigned char *end, char decomp); /** * lws_http_is_redirected_to_get() - true if redirected to GET * * \param wsi: the wsi to check * * Check if the wsi is currently in GET mode, after, eg, doing a POST and * receiving a 303. */ LWS_VISIBLE LWS_EXTERN int lws_http_is_redirected_to_get(struct lws *wsi); /** * lws_http_cookie_get() - return copy of named cookie if present * * \param wsi: the wsi to check * \param name: name of the cookie * \param buf: buffer to store the cookie contents into * \param max_len: on entry, maximum length of buf... on exit, used len of buf * * If no cookie header, or no cookie of the requested name, or the value is * larger than can fit in buf, returns nonzero. * * If the cookie is found, copies its value into buf with a terminating NUL, * sets *max_len to the used length, and returns 0. * * This handles the parsing of the possibly multi-cookie header string and * terminating the requested cookie at the next ; if present. */ LWS_VISIBLE LWS_EXTERN int lws_http_cookie_get(struct lws *wsi, const char *name, char *buf, size_t *max); /** * lws_http_client_http_error() - determine if the response code indicates an error * * \param code: the response code to test * * Returns nonzero if the code indicates an error, else zero if reflects a * non-error condition */ #define lws_http_client_http_resp_is_error(code) (!(code < 400)) /** * lws_h2_update_peer_txcredit() - manually update stream peer tx credit * * \param wsi: the h2 child stream whose peer credit to change * \param sid: the stream ID, or LWS_H2_STREAM_SID for the wsi stream ID * \param bump: signed change to confer upon peer tx credit for sid * * In conjunction with LCCSCF_H2_MANUAL_RXFLOW flag, allows the user code to * selectively starve the remote peer of the ability to send us data on a client * connection. * * Normally lws sends an initial window size for the peer to send to it of 0, * but during the header phase it sends a WINDOW_UPDATE to increase the amount * available. LCCSCF_H2_MANUAL_RXFLOW restricts this initial increase in tx * credit for the stream, before it has been asked to send us anything, to the * amount specified in the client info .manual_initial_tx_credit member, and * this api can be called to send the other side permission to send us up to * \p bump additional bytes. * * The nwsi tx credit is updated automatically for exactly what was sent to us * on a stream with LCCSCF_H2_MANUAL_RXFLOW flag, but the stream's own tx credit * must be handled manually by user code via this api. * * Returns 0 for success or nonzero for failure. */ #define LWS_H2_STREAM_SID -1 LWS_VISIBLE LWS_EXTERN int lws_h2_update_peer_txcredit(struct lws *wsi, unsigned int sid, int bump); /** * lws_h2_get_peer_txcredit_estimate() - return peer tx credit estimate * * \param wsi: the h2 child stream whose peer credit estimate to return * * Returns the estimated amount of tx credit at the peer, in other words the * number of bytes the peer is authorized to send to us. * * It's an 'estimate' because we don't know how much is already in flight * towards us and actually already used. */ LWS_VISIBLE LWS_EXTERN int lws_h2_get_peer_txcredit_estimate(struct lws *wsi); ///@} libwebsockets-4.3.5/include/libwebsockets/lws-i2c.h000066400000000000000000000040151476025525100223060ustar00rootroot00000000000000/* * Generic I2C ops * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * This is like an abstract class for i2c, a real implementation provides * functions for the ops that use the underlying OS arrangements. */ #if !defined(__LWS_I2C_H__) #define __LWS_I2C_H__ #include #include typedef struct lws_i2c_ops { int (*init)(const struct lws_i2c_ops *ctx); int (*start)(const struct lws_i2c_ops *ctx); void (*stop)(const struct lws_i2c_ops *ctx); int (*write)(const struct lws_i2c_ops *ctx, uint8_t data); int (*read)(const struct lws_i2c_ops *ctx); void (*set_ack)(const struct lws_i2c_ops *octx, int ack); } lws_i2c_ops_t; /* * These are implemented by calling the ops above, and so are generic */ LWS_VISIBLE LWS_EXTERN int lws_i2c_command(const lws_i2c_ops_t *ctx, uint8_t ads7, uint8_t c); LWS_VISIBLE LWS_EXTERN int lws_i2c_command_list(const lws_i2c_ops_t *ctx, uint8_t ads7, const uint8_t *buf, size_t len); #endif libwebsockets-4.3.5/include/libwebsockets/lws-ili9341-spi.h000066400000000000000000000042041476025525100235200ustar00rootroot00000000000000/* * lws abstract display implementation for ili9341 on spi * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #if !defined(__LWS_DISPLAY_ILI9341_SPI_H__) #define __LWS_DISPLAY_ILI9341_SPI_H__ typedef struct lws_display_ili9341 { lws_display_t disp; /* use lws_display_ili9341_ops to set */ const lws_spi_ops_t *spi; /* spi ops */ const lws_gpio_ops_t *gpio; /* NULL or gpio ops */ _lws_plat_gpio_t reset_gpio; /* if gpio ops, nReset gpio # */ uint8_t spi_index; /* cs index starting from 0 */ } lws_display_ili9341_t; int lws_display_ili9341_spi_init(const struct lws_display *disp); int lws_display_ili9341_spi_blit(const struct lws_display *disp, const uint8_t *src, lws_display_scalar x, lws_display_scalar y, lws_display_scalar w, lws_display_scalar h); int lws_display_ili9341_spi_power(const struct lws_display *disp, int state); #define lws_display_ili9341_ops \ .init = lws_display_ili9341_spi_init, \ .blit = lws_display_ili9341_spi_blit, \ .power = lws_display_ili9341_spi_power #endif libwebsockets-4.3.5/include/libwebsockets/lws-jose.h000066400000000000000000000160041476025525100225720ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ enum lws_jws_jose_hdr_indexes { LJJHI_ALG, /* REQUIRED */ LJJHI_JKU, /* Optional: string */ LJJHI_JWK, /* Optional: jwk JSON object: public key: */ LJJHI_KID, /* Optional: string */ LJJHI_X5U, /* Optional: string: url of public key cert / chain */ LJJHI_X5C, /* Optional: base64 (NOT -url): actual cert */ LJJHI_X5T, /* Optional: base64url: SHA-1 of actual cert */ LJJHI_X5T_S256, /* Optional: base64url: SHA-256 of actual cert */ LJJHI_TYP, /* Optional: string: media type */ LJJHI_CTY, /* Optional: string: content media type */ LJJHI_CRIT, /* Optional for send, REQUIRED: array of strings: * mustn't contain standardized strings or null set */ LJJHI_RECIPS_HDR, LJJHI_RECIPS_HDR_ALG, LJJHI_RECIPS_HDR_KID, LJJHI_RECIPS_EKEY, LJJHI_ENC, /* JWE only: Optional: string */ LJJHI_ZIP, /* JWE only: Optional: string ("DEF" = deflate) */ LJJHI_EPK, /* Additional arg for JWE ECDH: ephemeral public key */ LJJHI_APU, /* Additional arg for JWE ECDH: base64url */ LJJHI_APV, /* Additional arg for JWE ECDH: base64url */ LJJHI_IV, /* Additional arg for JWE AES: base64url */ LJJHI_TAG, /* Additional arg for JWE AES: base64url */ LJJHI_P2S, /* Additional arg for JWE PBES2: base64url: salt */ LJJHI_P2C, /* Additional arg for JWE PBES2: integer: count */ LWS_COUNT_JOSE_HDR_ELEMENTS }; enum lws_jose_algtype { LWS_JOSE_ENCTYPE_NONE, LWS_JOSE_ENCTYPE_RSASSA_PKCS1_1_5, LWS_JOSE_ENCTYPE_RSASSA_PKCS1_OAEP, LWS_JOSE_ENCTYPE_RSASSA_PKCS1_PSS, LWS_JOSE_ENCTYPE_ECDSA, LWS_JOSE_ENCTYPE_ECDHES, LWS_JOSE_ENCTYPE_AES_CBC, LWS_JOSE_ENCTYPE_AES_CFB128, LWS_JOSE_ENCTYPE_AES_CFB8, LWS_JOSE_ENCTYPE_AES_CTR, LWS_JOSE_ENCTYPE_AES_ECB, LWS_JOSE_ENCTYPE_AES_OFB, LWS_JOSE_ENCTYPE_AES_XTS, /* care: requires double-length key */ LWS_JOSE_ENCTYPE_AES_GCM, }; /* there's a table of these defined in lws-gencrypto-common.c */ struct lws_jose_jwe_alg { enum lws_genhash_types hash_type; enum lws_genhmac_types hmac_type; enum lws_jose_algtype algtype_signing; /* the signing cipher */ enum lws_jose_algtype algtype_crypto; /* the encryption cipher */ const char *alg; /* the JWA enc alg name, eg "ES512" */ const char *curve_name; /* NULL, or, eg, "P-256" */ unsigned short keybits_min, keybits_fixed; unsigned short ivbits; }; /* * For JWS, "JOSE header" is defined to be the union of... * * o JWS Protected Header * o JWS Unprotected Header * * For JWE, the "JOSE header" is the union of... * * o JWE Protected Header * o JWE Shared Unprotected Header * o JWE Per-Recipient Unprotected Header */ #define LWS_JWS_MAX_RECIPIENTS 3 struct lws_jws_recpient { /* * JOSE per-recipient unprotected header... for JWS this contains * protected / header / signature */ struct lws_gencrypto_keyelem unprot[LWS_COUNT_JOSE_HDR_ELEMENTS]; struct lws_jwk jwk_ephemeral; /* recipient ephemeral key if any */ struct lws_jwk jwk; /* recipient "jwk" key if any */ }; struct lws_jose { /* JOSE protected and unprotected header elements */ struct lws_gencrypto_keyelem e[LWS_COUNT_JOSE_HDR_ELEMENTS]; struct lws_jws_recpient recipient[LWS_JWS_MAX_RECIPIENTS]; char typ[32]; /* information from the protected header part */ const struct lws_jose_jwe_alg *alg; const struct lws_jose_jwe_alg *enc_alg; int recipients; /* count of used recipient[] entries */ }; /** * lws_jose_init() - prepare a struct lws_jose for use * * \param jose: the jose header struct to prepare */ LWS_VISIBLE LWS_EXTERN void lws_jose_init(struct lws_jose *jose); /** * lws_jose_destroy() - retire a struct lws_jose from use * * \param jose: the jose header struct to destroy */ LWS_VISIBLE LWS_EXTERN void lws_jose_destroy(struct lws_jose *jose); /** * lws_gencrypto_jws_alg_to_definition() - look up a jws alg name * * \param alg: the jws alg name * \param jose: pointer to the pointer to the info struct to set on success * * Returns 0 if *jose set, else nonzero for failure */ LWS_VISIBLE LWS_EXTERN int lws_gencrypto_jws_alg_to_definition(const char *alg, const struct lws_jose_jwe_alg **jose); /** * lws_gencrypto_jwe_alg_to_definition() - look up a jwe alg name * * \param alg: the jwe alg name * \param jose: pointer to the pointer to the info struct to set on success * * Returns 0 if *jose set, else nonzero for failure */ LWS_VISIBLE LWS_EXTERN int lws_gencrypto_jwe_alg_to_definition(const char *alg, const struct lws_jose_jwe_alg **jose); /** * lws_gencrypto_jwe_enc_to_definition() - look up a jwe enc name * * \param alg: the jwe enc name * \param jose: pointer to the pointer to the info struct to set on success * * Returns 0 if *jose set, else nonzero for failure */ LWS_VISIBLE LWS_EXTERN int lws_gencrypto_jwe_enc_to_definition(const char *enc, const struct lws_jose_jwe_alg **jose); /** * lws_jws_parse_jose() - parse a JWS JOSE header * * \param jose: the jose struct to set to parsing results * \param buf: the raw JOSE header * \param len: the length of the raw JOSE header * \param temp: parent-owned buffer to "allocate" elements into * \param temp_len: amount of space available in temp * * returns 0 for success, or -1 for error * *\p temp_len is updated to reflect the amount of \p temp used if successful. */ LWS_VISIBLE LWS_EXTERN int lws_jws_parse_jose(struct lws_jose *jose, const char *buf, int len, char *temp, int *temp_len); /** * lws_jwe_parse_jose() - parse a JWE JOSE header * * \param jose: the jose struct to set to parsing results * \param buf: the raw JOSE header * \param len: the length of the raw JOSE header * \param temp: parent-owned buffer to "allocate" elements into * \param temp_len: amount of space available in temp * * returns 0 for success, or -1 for error * *\p temp_len is updated to reflect the amount of \p temp used if successful. */ LWS_VISIBLE LWS_EXTERN int lws_jwe_parse_jose(struct lws_jose *jose, const char *buf, int len, char *temp, int *temp_len); libwebsockets-4.3.5/include/libwebsockets/lws-jwe.h000066400000000000000000000134231476025525100224210ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * JWE Compact Serialization consists of * * BASE64URL(UTF8(JWE Protected Header)) || '.' || * BASE64URL(JWE Encrypted Key) || '.' || * BASE64URL(JWE Initialization Vector) || '.' || * BASE64URL(JWE Ciphertext) || '.' || * BASE64URL(JWE Authentication Tag) */ #define LWS_JWE_RFC3394_OVERHEAD_BYTES 8 #define LWS_JWE_AES_IV_BYTES 16 #define LWS_JWE_LIMIT_RSA_KEY_BITS 4096 #define LWS_JWE_LIMIT_AES_KEY_BITS (512 + 64) /* RFC3394 Key Wrap adds 64b */ #define LWS_JWE_LIMIT_EC_KEY_BITS 528 /* 521 rounded to byte boundary */ #define LWS_JWE_LIMIT_HASH_BITS (LWS_GENHASH_LARGEST * 8) /* the largest key element for any cipher */ #define LWS_JWE_LIMIT_KEY_ELEMENT_BYTES (LWS_JWE_LIMIT_RSA_KEY_BITS / 8) struct lws_jwe { struct lws_jose jose; struct lws_jws jws; struct lws_jwk jwk; /* * We have to keep a copy of the CEK so we can reuse it with later * key encryptions for the multiple recipient case. */ uint8_t cek[LWS_JWE_LIMIT_KEY_ELEMENT_BYTES]; unsigned int cek_valid:1; int recip; }; LWS_VISIBLE LWS_EXTERN void lws_jwe_init(struct lws_jwe *jwe, struct lws_context *context); LWS_VISIBLE LWS_EXTERN void lws_jwe_destroy(struct lws_jwe *jwe); LWS_VISIBLE LWS_EXTERN void lws_jwe_be64(uint64_t c, uint8_t *p8); /* * JWE Compact Serialization consists of * * BASE64URL(UTF8(JWE Protected Header)) || '.' || * BASE64URL(JWE Encrypted Key) || '.' || * BASE64URL(JWE Initialization Vector) || '.' || * BASE64URL(JWE Ciphertext) || '.' || * BASE64URL(JWE Authentication Tag) */ LWS_VISIBLE LWS_EXTERN int lws_jwe_render_compact(struct lws_jwe *jwe, char *out, size_t out_len); LWS_VISIBLE int lws_jwe_render_flattened(struct lws_jwe *jwe, char *out, size_t out_len); LWS_VISIBLE LWS_EXTERN int lws_jwe_json_parse(struct lws_jwe *jwe, const uint8_t *buf, int len, char *temp, int *temp_len); /** * lws_jwe_auth_and_decrypt() - confirm and decrypt JWE * * \param jose: jose context * \param jws: jws / jwe context... .map and .map_b64 must be filled already * * This is a high level JWE decrypt api that takes a jws with the maps * already processed, and if the authentication passes, returns the decrypted * plaintext in jws.map.buf[LJWE_CTXT] and its length in jws.map.len[LJWE_CTXT]. * * In the jws, the following fields must have been set by the caller * * .context * .jwk (the key encryption key) * .map * .map_b64 * * Having the b64 and decoded maps filled externally makes it flexible where * the data was picked from, eg, from a Complete JWE JSON serialization, a * flattened one, or a Compact Serialization. * * Returns decrypt length, or -1 for failure. */ LWS_VISIBLE LWS_EXTERN int lws_jwe_auth_and_decrypt(struct lws_jwe *jwe, char *temp, int *temp_len); /** * lws_jwe_encrypt() - perform JWE encryption * * \param jose: the JOSE header information (encryption types, etc) * \param jws: the JWE elements, pointer to jwk etc * \param temp: parent-owned buffer to "allocate" elements into * \param temp_len: amount of space available in temp * * May be called up to LWS_JWS_MAX_RECIPIENTS times to encrypt the same CEK * multiple ways on the same JWE payload. * * returns the amount of temp used, or -1 for error. */ LWS_VISIBLE LWS_EXTERN int lws_jwe_encrypt(struct lws_jwe *jwe, char *temp, int *temp_len); /** * lws_jwe_create_packet() - add b64 sig to b64 hdr + payload * * \param jwe: the struct lws_jwe we are trying to render * \param payload: unencoded payload JSON * \param len: length of unencoded payload JSON * \param nonce: Nonse string to include in protected header * \param out: buffer to take signed packet * \param out_len: size of \p out buffer * \param conext: lws_context to get random from * * This creates a "flattened" JWS packet from the jwk and the plaintext * payload, and signs it. The packet is written into \p out. * * This does the whole packet assembly and signing, calling through to * lws_jws_sign_from_b64() as part of the process. * * Returns the length written to \p out, or -1. */ LWS_VISIBLE LWS_EXTERN int lws_jwe_create_packet(struct lws_jwe *jwe, const char *payload, size_t len, const char *nonce, char *out, size_t out_len, struct lws_context *context); /* only exposed because we have test vectors that need it */ LWS_VISIBLE LWS_EXTERN int lws_jwe_auth_and_decrypt_cbc_hs(struct lws_jwe *jwe, uint8_t *enc_cek, uint8_t *aad, int aad_len); /* only exposed because we have test vectors that need it */ LWS_VISIBLE LWS_EXTERN int lws_jwa_concat_kdf(struct lws_jwe *jwe, int direct, uint8_t *out, const uint8_t *shared_secret, int sslen); libwebsockets-4.3.5/include/libwebsockets/lws-jwk.h000066400000000000000000000173741476025525100224400ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /*! \defgroup jwk JSON Web Keys * ## JSON Web Keys API * * Lws provides an API to parse JSON Web Keys into a struct lws_gencrypto_keyelem. * * "oct" and "RSA" type keys are supported. For "oct" keys, they are held in * the "e" member of the struct lws_gencrypto_keyelem. * * Keys elements are allocated on the heap. You must destroy the allocations * in the struct lws_gencrypto_keyelem by calling * lws_genrsa_destroy_elements() when you are finished with it. */ ///@{ enum enum_jwk_meta_tok { JWK_META_KTY, JWK_META_KID, JWK_META_USE, JWK_META_KEY_OPS, JWK_META_X5C, JWK_META_ALG, LWS_COUNT_JWK_ELEMENTS }; struct lws_jwk { /* key data elements */ struct lws_gencrypto_keyelem e[LWS_GENCRYPTO_MAX_KEYEL_COUNT]; /* generic meta key elements, like KID */ struct lws_gencrypto_keyelem meta[LWS_COUNT_JWK_ELEMENTS]; int kty; /**< one of LWS_GENCRYPTO_KTY_ */ char private_key; /* nonzero = has private key elements */ }; typedef int (*lws_jwk_key_import_callback)(struct lws_jwk *s, void *user); struct lws_jwk_parse_state { struct lws_jwk *jwk; char b64[(((8192 / 8) * 4) / 3) + 1]; /* enough for 8Kb key */ lws_jwk_key_import_callback per_key_cb; void *user; int pos; int cose_state; int seen; unsigned short possible; }; /** lws_jwk_import() - Create a JSON Web key from the textual representation * * \param jwk: the JWK object to create * \param cb: callback for each jwk-processed key, or NULL if importing a single * key with no parent "keys" JSON * \param user: pointer to be passed to the callback, otherwise ignored by lws. * NULL if importing a single key with no parent "keys" JSON * \param in: a single JWK JSON stanza in utf-8 * \param len: the length of the JWK JSON stanza in bytes * * Creates an lws_jwk struct filled with data from the JSON representation. * * There are two ways to use this... with some protocols a single jwk is * delivered with no parent "keys": [] array. If you call this with cb and * user as NULL, then the input will be interpreted like that and the results * placed in s. * * The second case is that you are dealing with a "keys":[] array with one or * more keys in it. In this case, the function iterates through the keys using * s as a temporary jwk, and calls the user-provided callback for each key in * turn while it return 0 (nonzero return from the callback terminates the * iteration through any further keys). */ LWS_VISIBLE LWS_EXTERN int lws_jwk_import(struct lws_jwk *jwk, lws_jwk_key_import_callback cb, void *user, const char *in, size_t len); /** lws_jwk_destroy() - Destroy a JSON Web key * * \param jwk: the JWK object to destroy * * All allocations in the lws_jwk are destroyed */ LWS_VISIBLE LWS_EXTERN void lws_jwk_destroy(struct lws_jwk *jwk); /** lws_jwk_dup_oct() - Set a jwk to a dup'd binary OCT key * * \param jwk: the JWK object to set * \param key: the JWK object to destroy * \param len: the JWK object to destroy * * Sets the kty to OCT, allocates len bytes for K and copies len bytes of key * into the allocation. */ LWS_VISIBLE LWS_EXTERN int lws_jwk_dup_oct(struct lws_jwk *jwk, const void *key, int len); #define LWSJWKF_EXPORT_PRIVATE (1 << 0) #define LWSJWKF_EXPORT_NOCRLF (1 << 1) /** lws_jwk_export() - Export a JSON Web key to a textual representation * * \param jwk: the JWK object to export * \param flags: control export options * \param p: the buffer to write the exported JWK to * \param len: the length of the buffer \p p in bytes... reduced by used amount * * Returns length of the used part of the buffer if OK, or -1 for error. * * \p flags can be OR-ed together * * LWSJWKF_EXPORT_PRIVATE: default is only public part, set this to also export * the private part * * LWSJWKF_EXPORT_NOCRLF: normally adds a CRLF at the end of the export, if * you need to suppress it, set this flag * * Serializes the content of the JWK into a char buffer. */ LWS_VISIBLE LWS_EXTERN int lws_jwk_export(struct lws_jwk *jwk, int flags, char *p, int *len); /** lws_jwk_load() - Import a JSON Web key from a file * * \param jwk: the JWK object to load into * \param filename: filename to load from * \param cb: optional callback for each key * \param user: opaque user pointer passed to cb if given * * Returns 0 for OK or -1 for failure * * There are two ways to use this... with some protocols a single jwk is * delivered with no parent "keys": [] array. If you call this with cb and * user as NULL, then the input will be interpreted like that and the results * placed in s. * * The second case is that you are dealing with a "keys":[] array with one or * more keys in it. In this case, the function iterates through the keys using * s as a temporary jwk, and calls the user-provided callback for each key in * turn while it return 0 (nonzero return from the callback terminates the * iteration through any further keys, leaving the last one in s). */ LWS_VISIBLE LWS_EXTERN int lws_jwk_load(struct lws_jwk *jwk, const char *filename, lws_jwk_key_import_callback cb, void *user); /** lws_jwk_save() - Export a JSON Web key to a file * * \param jwk: the JWK object to save from * \param filename: filename to save to * * Returns 0 for OK or -1 for failure */ LWS_VISIBLE LWS_EXTERN int lws_jwk_save(struct lws_jwk *jwk, const char *filename); /** lws_jwk_rfc7638_fingerprint() - jwk to RFC7638 compliant fingerprint * * \param jwk: the JWK object to fingerprint * \param digest32: buffer to take 32-byte digest * * Returns 0 for OK or -1 for failure */ LWS_VISIBLE LWS_EXTERN int lws_jwk_rfc7638_fingerprint(struct lws_jwk *jwk, char *digest32); /** lws_jwk_strdup_meta() - allocate a duplicated string meta element * * \param jwk: the JWK object to fingerprint * \param idx: JWK_META_ element index * \param in: string to copy * \param len: length of string to copy * * Returns 0 for OK or nonzero for failure */ LWS_VISIBLE LWS_EXTERN int lws_jwk_strdup_meta(struct lws_jwk *jwk, enum enum_jwk_meta_tok idx, const char *in, int len); LWS_VISIBLE LWS_EXTERN int lws_jwk_dump(struct lws_jwk *jwk); /** lws_jwk_generate() - create a new key of given type and characteristics * * \param context: the struct lws_context used for RNG * \param jwk: the JWK object to fingerprint * \param kty: One of the LWS_GENCRYPTO_KTY_ key types * \param bits: for OCT and RSA keys, the number of bits * \param curve: for EC keys, the name of the curve * * Returns 0 for OK or nonzero for failure */ LWS_VISIBLE int lws_jwk_generate(struct lws_context *context, struct lws_jwk *jwk, enum lws_gencrypto_kty kty, int bits, const char *curve); ///@} libwebsockets-4.3.5/include/libwebsockets/lws-jws.h000066400000000000000000000524351476025525100224450ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /*! \defgroup jws JSON Web Signature * ## JSON Web Signature API * * Lws provides an API to check and create RFC7515 JSON Web Signatures * * SHA256/384/512 HMAC, and RSA 256/384/512 are supported. * * The API uses your TLS library crypto, but works exactly the same no matter * what your TLS backend is. */ ///@{ /* * The maps are built to work with both JWS (LJWS_) and JWE (LJWE_), and are * sized to the slightly larger JWE case. */ enum enum_jws_sig_elements { /* JWS block namespace */ LJWS_JOSE, LJWS_PYLD, LJWS_SIG, LJWS_UHDR, /* JWE block namespace */ LJWE_JOSE = 0, LJWE_EKEY, LJWE_IV, LJWE_CTXT, LJWE_ATAG, LJWE_AAD, LWS_JWS_MAX_COMPACT_BLOCKS }; struct lws_jws_map { const char *buf[LWS_JWS_MAX_COMPACT_BLOCKS]; uint32_t len[LWS_JWS_MAX_COMPACT_BLOCKS]; }; #define LWS_JWS_MAX_SIGS 3 struct lws_jws { struct lws_jwk *jwk; /* the struct lws_jwk containing the signing key */ struct lws_context *context; /* the lws context (used to get random) */ struct lws_jws_map map, map_b64; }; /* jws EC signatures do not have ASN.1 in them, meaning they're incompatible * with generic signatures. */ /** * lws_jws_init() - initialize a jws for use * * \param jws: pointer to the jws to initialize * \param jwk: the jwk to use with this jws * \param context: the lws_context to use */ LWS_VISIBLE LWS_EXTERN void lws_jws_init(struct lws_jws *jws, struct lws_jwk *jwk, struct lws_context *context); /** * lws_jws_destroy() - scrub a jws * * \param jws: pointer to the jws to destroy * * Call before the jws goes out of scope. * * Elements defined in the jws are zeroed. */ LWS_VISIBLE LWS_EXTERN void lws_jws_destroy(struct lws_jws *jws); /** * lws_jws_sig_confirm_compact() - check signature * * \param map: pointers and lengths for each of the unencoded JWS elements * \param jwk: public key * \param context: lws_context * \param temp: scratchpad * \param temp_len: length of scratchpad * * Confirms the signature on a JWS. Use if you have non-b64 plain JWS elements * in a map... it'll make a temp b64 version needed for comparison. See below * for other variants. * * Returns 0 on match, else nonzero. */ LWS_VISIBLE LWS_EXTERN int lws_jws_sig_confirm_compact(struct lws_jws_map *map, struct lws_jwk *jwk, struct lws_context *context, char *temp, int *temp_len); LWS_VISIBLE LWS_EXTERN int lws_jws_sig_confirm_compact_b64_map(struct lws_jws_map *map_b64, struct lws_jwk *jwk, struct lws_context *context, char *temp, int *temp_len); /** * lws_jws_sig_confirm_compact_b64() - check signature on b64 compact JWS * * \param in: pointer to b64 jose.payload[.hdr].sig * \param len: bytes available at \p in * \param map: map to take decoded non-b64 content * \param jwk: public key * \param context: lws_context * \param temp: scratchpad * \param temp_len: size of scratchpad * * Confirms the signature on a JWS. Use if you have you have b64 compact layout * (jose.payload.hdr.sig) as an aggregated string... it'll make a temp plain * version needed for comparison. * * Returns 0 on match, else nonzero. */ LWS_VISIBLE LWS_EXTERN int lws_jws_sig_confirm_compact_b64(const char *in, size_t len, struct lws_jws_map *map, struct lws_jwk *jwk, struct lws_context *context, char *temp, int *temp_len); /** * lws_jws_sig_confirm() - check signature on plain + b64 JWS elements * * \param map_b64: pointers and lengths for each of the b64-encoded JWS elements * \param map: pointers and lengths for each of the unencoded JWS elements * \param jwk: public key * \param context: lws_context * * Confirms the signature on a JWS. Use if you have you already have both b64 * compact layout (jose.payload.hdr.sig) and decoded JWS elements in maps. * * If you had the b64 string and called lws_jws_compact_decode() on it, you * will end up with both maps, and can use this api version, saving needlessly * regenerating any temp map. * * Returns 0 on match, else nonzero. */ LWS_VISIBLE LWS_EXTERN int lws_jws_sig_confirm(struct lws_jws_map *map_b64, /* b64-encoded */ struct lws_jws_map *map, /* non-b64 */ struct lws_jwk *jwk, struct lws_context *context); /** * lws_jws_sign_from_b64() - add b64 sig to b64 hdr + payload * * \param jose: jose header information * \param jws: information to include in the signature * \param b64_sig: output buffer for b64 signature * \param sig_len: size of \p b64_sig output buffer * * This adds a b64-coded JWS signature of the b64-encoded protected header * and b64-encoded payload, at \p b64_sig. The signature will be as large * as the N element of the RSA key when the RSA key is used, eg, 512 bytes for * a 4096-bit key, and then b64-encoding on top. * * In some special cases, there is only payload to sign and no header, in that * case \p b64_hdr may be NULL, and only the payload will be hashed before * signing. * * If successful, returns the length of the encoded signature written to * \p b64_sig. If the jose signing type is unknown, 0 is returned. Otherwise * -1 indicates failure. */ LWS_VISIBLE LWS_EXTERN int lws_jws_sign_from_b64(struct lws_jose *jose, struct lws_jws *jws, char *b64_sig, size_t sig_len); /** * lws_jws_compact_decode() - converts and maps compact serialization b64 sections * * \param in: the incoming compact serialized b64 * \param len: the length of the incoming compact serialized b64 * \param map: pointer to the results structure * \param map_b64: NULL, or pointer to a second results structure taking block * information about the undecoded b64 * \param out: buffer to hold decoded results * \param out_len: size of out in bytes * * Returns number of sections (2 if "none", else 3), or -1 if illegal. * * map is set to point to the start and hold the length of each decoded block. * If map_b64 is non-NULL, then it's set with information about the input b64 * blocks. */ LWS_VISIBLE LWS_EXTERN int lws_jws_compact_decode(const char *in, int len, struct lws_jws_map *map, struct lws_jws_map *map_b64, char *out, int *out_len); LWS_VISIBLE LWS_EXTERN int lws_jws_compact_encode(struct lws_jws_map *map_b64, /* b64-encoded */ const struct lws_jws_map *map, /* non-b64 */ char *buf, int *out_len); LWS_VISIBLE LWS_EXTERN int lws_jws_sig_confirm_json(const char *in, size_t len, struct lws_jws *jws, struct lws_jwk *jwk, struct lws_context *context, char *temp, int *temp_len); /** * lws_jws_write_flattened_json() - create flattened JSON sig * * \param jws: information to include in the signature * \param flattened: output buffer for JSON * \param len: size of \p flattened output buffer * */ LWS_VISIBLE LWS_EXTERN int lws_jws_write_flattened_json(struct lws_jws *jws, char *flattened, size_t len); /** * lws_jws_write_compact() - create flattened JSON sig * * \param jws: information to include in the signature * \param compact: output buffer for compact format * \param len: size of \p flattened output buffer * */ LWS_VISIBLE LWS_EXTERN int lws_jws_write_compact(struct lws_jws *jws, char *compact, size_t len); /* * below apis are not normally needed if dealing with whole JWS... they're * useful for creating from scratch */ /** * lws_jws_dup_element() - allocate space for an element and copy data into it * * \param map: map to create the element in * \param idx: index of element in the map to create * \param temp: space to allocate in * \param temp_len: available space at temp * \param in: data to duplicate into element * \param in_len: length of data to duplicate * \param actual_alloc: 0 for same as in_len, else actual allocation size * * Copies in_len from in to temp, if temp_len is sufficient. * * Returns 0 or -1 if not enough space in temp / temp_len. * * Over-allocation can be acheived by setting actual_alloc to the real * allocation desired... in_len will be copied into it. * * *temp_len is reduced by actual_alloc if successful. */ LWS_VISIBLE LWS_EXTERN int lws_jws_dup_element(struct lws_jws_map *map, int idx, char *temp, int *temp_len, const void *in, size_t in_len, size_t actual_alloc); /** * lws_jws_randomize_element() - create an element and fill with random * * \param context: lws_context used for random * \param map: map to create the element in * \param idx: index of element in the map to create * \param temp: space to allocate in * \param temp_len: available space at temp * \param random_len: length of data to fill with random * \param actual_alloc: 0 for same as random_len, else actual allocation size * * Randomize random_len bytes at temp, if temp_len is sufficient. * * Returns 0 or -1 if not enough space in temp / temp_len. * * Over-allocation can be acheived by setting actual_alloc to the real * allocation desired... the first random_len will be filled with random. * * *temp_len is reduced by actual_alloc if successful. */ LWS_VISIBLE LWS_EXTERN int lws_jws_randomize_element(struct lws_context *context, struct lws_jws_map *map, int idx, char *temp, int *temp_len, size_t random_len, size_t actual_alloc); /** * lws_jws_alloc_element() - create an element and reserve space for content * * \param map: map to create the element in * \param idx: index of element in the map to create * \param temp: space to allocate in * \param temp_len: available space at temp * \param len: logical length of element * \param actual_alloc: 0 for same as len, else actual allocation size * * Allocate len bytes at temp, if temp_len is sufficient. * * Returns 0 or -1 if not enough space in temp / temp_len. * * Over-allocation can be acheived by setting actual_alloc to the real * allocation desired... the element logical length will be set to len. * * *temp_len is reduced by actual_alloc if successful. */ LWS_VISIBLE LWS_EXTERN int lws_jws_alloc_element(struct lws_jws_map *map, int idx, char *temp, int *temp_len, size_t len, size_t actual_alloc); /** * lws_jws_encode_b64_element() - create an b64-encoded element * * \param map: map to create the element in * \param idx: index of element in the map to create * \param temp: space to allocate in * \param temp_len: available space at temp * \param in: pointer to unencoded input * \param in_len: length of unencoded input * * Allocate len bytes at temp, if temp_len is sufficient. * * Returns 0 or -1 if not enough space in temp / temp_len. * * Over-allocation can be acheived by setting actual_alloc to the real * allocation desired... the element logical length will be set to len. * * *temp_len is reduced by actual_alloc if successful. */ LWS_VISIBLE LWS_EXTERN int lws_jws_encode_b64_element(struct lws_jws_map *map, int idx, char *temp, int *temp_len, const void *in, size_t in_len); /** * lws_jws_b64_compact_map() - find block starts and lengths in compact b64 * * \param in: pointer to b64 jose.payload[.hdr].sig * \param len: bytes available at \p in * \param map: output struct with pointers and lengths for each JWS element * * Scans a jose.payload[.hdr].sig b64 string and notes where the blocks start * and their length into \p map. * * Returns number of blocks if OK. May return <0 if malformed. * May not fill all map entries. */ LWS_VISIBLE LWS_EXTERN int lws_jws_b64_compact_map(const char *in, int len, struct lws_jws_map *map); /** * lws_jws_base64_enc() - encode input data into b64url data * * \param in: the incoming plaintext * \param in_len: the length of the incoming plaintext in bytes * \param out: the buffer to store the b64url encoded data to * \param out_max: the length of \p out in bytes * * Returns either -1 if problems, or the number of bytes written to \p out. */ LWS_VISIBLE LWS_EXTERN int lws_jws_base64_enc(const char *in, size_t in_len, char *out, size_t out_max); /** * lws_jws_encode_section() - encode input data into b64url data, * prepending . if not first * * \param in: the incoming plaintext * \param in_len: the length of the incoming plaintext in bytes * \param first: nonzero if the first section * \param p: the buffer to store the b64url encoded data to * \param end: just past the end of p * * Returns either -1 if problems, or the number of bytes written to \p out. * If the section is not the first one, '.' is prepended. */ LWS_VISIBLE LWS_EXTERN int lws_jws_encode_section(const char *in, size_t in_len, int first, char **p, char *end); /** * lws_jwt_signed_validate() - check a compact JWT against a key and alg * * \param ctx: the lws_context * \param jwk: the key for checking the signature * \param alg_list: the expected alg name, like "ES512" * \param com: the compact JWT * \param len: the length of com * \param temp: a temp scratchpad * \param tl: available length of temp scratchpad * \param out: the output buffer to hold the validated plaintext * \param out_len: on entry, max length of out; on exit, used length of out * * Returns nonzero if the JWT cannot be validated or the plaintext can't fit the * provided output buffer, or 0 if it is validated as being signed by the * provided jwk. * * If validated, the plaintext in the JWT is copied into out and out_len set to * the used length. * * temp can be discarded or reused after the call returned, it's used to hold * transformations of the B64 JWS in the JWT. */ LWS_VISIBLE LWS_EXTERN int lws_jwt_signed_validate(struct lws_context *ctx, struct lws_jwk *jwk, const char *alg_list, const char *com, size_t len, char *temp, int tl, char *out, size_t *out_len); /** * lws_jwt_sign_compact() - generate a compact JWT using a key and alg * * \param ctx: the lws_context * \param jwk: the signing key * \param alg: the signing alg name, like "ES512" * \param out: the output buffer to hold the signed JWT in compact form * \param out_len: on entry, the length of out; on exit, the used amount of out * \param temp: a temp scratchpad * \param tl: available length of temp scratchpad * \param format: a printf style format specification * \param ...: zero or more args for the format specification * * Creates a JWT in a single step, from the format string and args through to * outputting a well-formed compact JWT representation in out. * * Returns 0 if all is well and *out_len is the amount of data in out, else * nonzero if failed. Temp must be large enough to hold various intermediate * representations. */ LWS_VISIBLE LWS_EXTERN int lws_jwt_sign_compact(struct lws_context *ctx, struct lws_jwk *jwk, const char *alg, char *out, size_t *out_len, char *temp, int tl, const char *format, ...) LWS_FORMAT(8); struct lws_jwt_sign_info { const char *alg; /**< entry: signing alg name, like "RS256" */ const char *jose_hdr; /**< entry: optional JOSE hdr; if present, alg field is ignored; instead the * whole claim object has to be provided in this parameter */ size_t jose_hdr_len; /**< entry: if jose_hdr is not NULL, JOSE header length without terminating '\0' */ char *out; /**< exit: signed JWT in compact form*/ size_t *out_len; /**< entry,exit: buffer size of out; actual size of JWT on exit */ char *temp; /**< exit undefined content, used by the function as a temporary scratchpad; MUST * be large enogh to store various intermediate representations */ int tl; /**< entry: size of temp buffer */ }; /** * lws_jwt_sign_compact() - generate a compact JWT using a key and JOSE header * * \param ctx: the lws_context * \param jwk: the signing key * \param info: info describing the JWT's content and output/temp buffers * \param format: a printf style format specification of the claims object * \param ...: zero or more args for the format specification * * Creates a JWT in a single step, from the format string and args through to * outputting a well-formed compact JWT representation in out. The provided * JOSE header's syntax is checked before it is added to the JWT. * * Returns 0 if all is well and *out_len is the amount of data in out, else * nonzero if failed. Temp must be large enough to hold various intermediate * representations. */ LWS_VISIBLE LWS_EXTERN int lws_jwt_sign_via_info(struct lws_context *ctx, struct lws_jwk *jwk, const struct lws_jwt_sign_info *info, const char *format, ...) LWS_FORMAT(4); /** * lws_jwt_token_sanity() - check a validated jwt payload for sanity * * \param in: the JWT payload * \param in_len: the length of the JWT payload * \param iss: the expected issuer of the token * \param aud: the expected audience of the token * \param csrf_in: NULL, or the csrf token that came in on a URL * \param sub: a buffer to hold the subject name in the JWT (eg, account name) * \param sub_len: the max length of the sub buffer * \param secs_left: set to the number of seconds of valid auth left if valid * * This performs some generic sanity tests on validated JWT payload... * * - the issuer is as expected * - the audience is us * - current time is OK for nbf ("not before") in the token * - current time is OK for exp ("expiry") in the token * - if csrf_in is not NULL, that the JWK has a csrf and it matches it * - if sub is not NULL, that the JWK provides a subject (and copies it to sub) * * If the tests pass, *secs_left is set to the number of remaining seconds the * auth is valid. * * Returns 0 if no inconsistency, else nonzero. */ LWS_VISIBLE LWS_EXTERN int lws_jwt_token_sanity(const char *in, size_t in_len, const char *iss, const char *aud, const char *csrf_in, char *sub, size_t sub_len, unsigned long *exp_unix_time); #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) struct lws_jwt_sign_set_cookie { struct lws_jwk *jwk; /**< entry: required signing key */ const char *alg; /**< entry: required signing alg, eg, "ES512" */ const char *iss; /**< entry: issuer name to use */ const char *aud; /**< entry: audience */ const char *cookie_name; /**< entry: the name of the cookie */ char sub[33]; /**< sign-entry, validate-exit: subject */ const char *extra_json; /**< sign-entry, validate-exit: * optional "ext" JSON object contents for the JWT */ size_t extra_json_len; /**< validate-exit: * length of optional "ext" JSON object contents for the JWT */ const char *csrf_in; /**< validate-entry: * NULL, or an external CSRF token to check against what is in the JWT */ unsigned long expiry_unix_time; /**< sign-entry: seconds the JWT and cookie may live, * validate-exit: expiry unix time */ }; /** * lws_jwt_sign_token_set_http_cookie() - creates sets a JWT in a wsi cookie * * \param wsi: the wsi to create the cookie header on * \param i: structure describing what should be in the JWT * \param p: wsi headers area * \param end: end of wsi headers area * * Creates a JWT specified \p i, and attaches it to the outgoing headers on * wsi. Returns 0 if successful. * * Best-practice security restrictions are applied to the cookie set action, * including forcing httponly, and __Host- prefix. As required by __Host-, the * cookie Path is set to /. __Host- is applied by the function, the cookie_name * should just be "xyz" for "__Host-xyz". * * \p extra_json should just be the bare JSON, a { } is provided around it by * the function if it's non-NULL. For example, "\"authorization\": 1". * * It's recommended the secs parameter is kept as small as consistent with one * user session on the site if possible, eg, 10 minutes or 20 minutes. At the * server, it can determine how much time is left in the auth and inform the * client; if the JWT validity expires, the page should reload so the UI always * reflects what's possible to do with the authorization state correctly. If * the JWT expires, the user can log back in using credentials usually stored in * the browser and auto-filled-in, so this is not very inconvenient. * * This is a helper on top of the other JOSE and JWT apis that somewhat crosses * over between JWT and HTTP, since it knows about cookies. So it is only built * if both LWS_WITH_JOSE and one of the http-related roles enabled. */ LWS_VISIBLE LWS_EXTERN int lws_jwt_sign_token_set_http_cookie(struct lws *wsi, const struct lws_jwt_sign_set_cookie *i, uint8_t **p, uint8_t *end); LWS_VISIBLE LWS_EXTERN int lws_jwt_get_http_cookie_validate_jwt(struct lws *wsi, struct lws_jwt_sign_set_cookie *i, char *out, size_t *out_len); #endif ///@} libwebsockets-4.3.5/include/libwebsockets/lws-lecp.h000066400000000000000000000364071476025525100225660ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /** \defgroup lecp CBOR parser * ##CBOR parsing related functions * \ingroup lwsapi * * LECP is an extremely lightweight CBOR stream parser included in lws. It * is aligned in approach with the LEJP JSON stream parser, with some additional * things needed for CBOR. */ //@{ #ifndef LECP_MAX_PARSING_STACK_DEPTH #define LECP_MAX_PARSING_STACK_DEPTH 5 #endif #ifndef LECP_MAX_DEPTH #define LECP_MAX_DEPTH 12 #endif #ifndef LECP_MAX_INDEX_DEPTH #define LECP_MAX_INDEX_DEPTH 8 #endif #ifndef LECP_MAX_PATH #define LECP_MAX_PATH 128 #endif #ifndef LECP_STRING_CHUNK /* must be >= 30 to assemble floats */ #define LECP_STRING_CHUNK 254 #endif #define LECP_FLAG_CB_IS_VALUE 64 /* * CBOR initial byte 3 x MSB bits are these */ enum { LWS_CBOR_MAJTYP_UINT = 0 << 5, LWS_CBOR_MAJTYP_INT_NEG = 1 << 5, LWS_CBOR_MAJTYP_BSTR = 2 << 5, LWS_CBOR_MAJTYP_TSTR = 3 << 5, LWS_CBOR_MAJTYP_ARRAY = 4 << 5, LWS_CBOR_MAJTYP_MAP = 5 << 5, LWS_CBOR_MAJTYP_TAG = 6 << 5, LWS_CBOR_MAJTYP_FLOAT = 7 << 5, /* also BREAK */ LWS_CBOR_MAJTYP_MASK = 7 << 5, /* * For the low 5 bits of the opcode, 0-23 are literals, unless it's * FLOAT. * * 24 = 1 byte; 25 = 2..., 26 = 4... and 27 = 8 bytes following literal. */ LWS_CBOR_1 = 24, LWS_CBOR_2 = 25, LWS_CBOR_4 = 26, LWS_CBOR_8 = 27, LWS_CBOR_RESERVED = 28, LWS_CBOR_SUBMASK = 0x1f, /* * Major type 7 discriminators in low 5 bits * 0 - 23 is SIMPLE implicit value (like, eg, LWS_CBOR_SWK_TRUE) */ LWS_CBOR_SWK_FALSE = 20, LWS_CBOR_SWK_TRUE = 21, LWS_CBOR_SWK_NULL = 22, LWS_CBOR_SWK_UNDEFINED = 23, LWS_CBOR_M7_SUBTYP_SIMPLE_X8 = 24, /* simple with additional byte */ LWS_CBOR_M7_SUBTYP_FLOAT16 = 25, LWS_CBOR_M7_SUBTYP_FLOAT32 = 26, LWS_CBOR_M7_SUBTYP_FLOAT64 = 27, LWS_CBOR_M7_BREAK = 31, /* 28, 29, 30 are illegal. * * 31 is illegal for UINT, INT_NEG, and TAG; * for BSTR, TSTR, ARRAY and MAP it means "indefinite length", ie, * it's made up of an endless amount of determinite-length * fragments terminated with a BREAK (FLOAT | 31) instead of the * next determinite-length fragment. The second framing level * means no need for escapes for BREAK in the data. */ LWS_CBOR_INDETERMINITE = 31, /* * Well-known tags */ LWS_CBOR_WKTAG_DATETIME_STD = 0, /* text */ LWS_CBOR_WKTAG_DATETIME_EPOCH = 1, /* int or float */ LWS_CBOR_WKTAG_BIGNUM_UNSIGNED = 2, /* byte string */ LWS_CBOR_WKTAG_BIGNUM_NEGATIVE = 3, /* byte string */ LWS_CBOR_WKTAG_DECIMAL_FRAC = 4, /* array */ LWS_CBOR_WKTAG_BIGFLOAT = 5, /* array */ LWS_CBOR_WKTAG_COSE_ENC0 = 16, LWS_CBOR_WKTAG_COSE_MAC0 = 17, LWS_CBOR_WKTAG_COSE_SIGN1 = 18, LWS_CBOR_WKTAG_TO_B64U = 21, /* any */ LWS_CBOR_WKTAG_TO_B64 = 22, /* any */ LWS_CBOR_WKTAG_TO_B16 = 23, /* any */ LWS_CBOR_WKTAG_CBOR = 24, /* byte string */ LWS_CBOR_WKTAG_URI = 32, /* text string */ LWS_CBOR_WKTAG_B64U = 33, /* text string */ LWS_CBOR_WKTAG_B64 = 34, /* text string */ LWS_CBOR_WKTAG_MIME = 36, /* text string */ LWS_CBOR_WKTAG_COSE_ENC = 96, LWS_CBOR_WKTAG_COSE_MAC = 97, LWS_CBOR_WKTAG_COSE_SIGN = 98, LWS_CBOR_WKTAG_SELFDESCCBOR = 55799 }; enum lecp_callbacks { LECPCB_CONSTRUCTED = 0, LECPCB_DESTRUCTED = 1, LECPCB_COMPLETE = 3, LECPCB_FAILED = 4, LECPCB_PAIR_NAME = 5, LECPCB_VAL_TRUE = LECP_FLAG_CB_IS_VALUE | 6, LECPCB_VAL_FALSE = LECP_FLAG_CB_IS_VALUE | 7, LECPCB_VAL_NULL = LECP_FLAG_CB_IS_VALUE | 8, LECPCB_VAL_NUM_INT = LECP_FLAG_CB_IS_VALUE | 9, LECPCB_VAL_RESERVED = LECP_FLAG_CB_IS_VALUE | 10, LECPCB_VAL_STR_START = 11, /* notice handle separately */ LECPCB_VAL_STR_CHUNK = LECP_FLAG_CB_IS_VALUE | 12, LECPCB_VAL_STR_END = LECP_FLAG_CB_IS_VALUE | 13, LECPCB_ARRAY_START = 14, LECPCB_ARRAY_END = 15, LECPCB_OBJECT_START = 16, LECPCB_OBJECT_END = 17, LECPCB_TAG_START = 18, LECPCB_TAG_END = 19, LECPCB_VAL_NUM_UINT = LECP_FLAG_CB_IS_VALUE | 20, LECPCB_VAL_UNDEFINED = LECP_FLAG_CB_IS_VALUE | 21, LECPCB_VAL_FLOAT16 = LECP_FLAG_CB_IS_VALUE | 22, LECPCB_VAL_FLOAT32 = LECP_FLAG_CB_IS_VALUE | 23, LECPCB_VAL_FLOAT64 = LECP_FLAG_CB_IS_VALUE | 24, LECPCB_VAL_SIMPLE = LECP_FLAG_CB_IS_VALUE | 25, LECPCB_VAL_BLOB_START = 26, /* notice handle separately */ LECPCB_VAL_BLOB_CHUNK = LECP_FLAG_CB_IS_VALUE | 27, LECPCB_VAL_BLOB_END = LECP_FLAG_CB_IS_VALUE | 28, LECPCB_ARRAY_ITEM_START = 29, LECPCB_ARRAY_ITEM_END = 30, LECPCB_LITERAL_CBOR = 31, }; enum lecp_reasons { LECP_CONTINUE = -1, LECP_REJECT_BAD_CODING = -2, LECP_REJECT_UNKNOWN = -3, LECP_REJECT_CALLBACK = -4, LECP_STACK_OVERFLOW = -5, }; struct lecp_item { union { uint64_t u64; int64_t i64; uint64_t u32; uint16_t hf; #if defined(LWS_WITH_CBOR_FLOAT) float f; double d; #else uint32_t f; uint64_t d; #endif } u; uint8_t opcode; }; struct lecp_ctx; typedef signed char (*lecp_callback)(struct lecp_ctx *ctx, char reason); struct _lecp_stack { char s; /* lejp_state stack*/ uint8_t p; /* path length */ char i; /* index array length */ char indet; /* indeterminite */ char intermediate; /* in middle of string */ char pop_iss; uint64_t tag; uint64_t collect_rem; uint32_t ordinal; uint8_t opcode; uint8_t send_new_array_item; uint8_t barrier; }; struct _lecp_parsing_stack { void *user; /* private to the stack level */ lecp_callback cb; const char * const *paths; uint8_t count_paths; uint8_t ppos; uint8_t path_match; }; struct lecp_ctx { /* sorted by type for most compact alignment * * pointers */ void *user; uint8_t *collect_tgt; /* arrays */ struct _lecp_parsing_stack pst[LECP_MAX_PARSING_STACK_DEPTH]; struct _lecp_stack st[LECP_MAX_DEPTH]; uint16_t i[LECP_MAX_INDEX_DEPTH]; /* index array */ uint16_t wild[LECP_MAX_INDEX_DEPTH]; /* index array */ char path[LECP_MAX_PATH]; uint8_t cbor[64]; /* literal cbor capture */ struct lecp_item item; /* size_t */ size_t path_stride; /* 0 means default ptr size, else * stride... allows paths to be * provided composed inside a * larger user struct instead of a * duplicated array */ size_t used_in; /* bytes of input consumed */ /* short */ uint16_t uni; /* char */ uint8_t npos; uint8_t dcount; uint8_t f; uint8_t sp; /* stack head */ uint8_t ipos; /* index stack depth */ uint8_t count_paths; uint8_t path_match; uint8_t path_match_len; uint8_t wildcount; uint8_t pst_sp; /* parsing stack head */ uint8_t outer_array; uint8_t cbor_pos; uint8_t literal_cbor_report; char present; /* temp for cb reason to use */ uint8_t be; /* big endian */ /* at end so we can memset the rest of it */ char buf[LECP_STRING_CHUNK + 1]; }; enum lws_lec_pctx_ret { LWS_LECPCTX_RET_FINISHED = 0, LWS_LECPCTX_RET_AGAIN, /* call again to continue writing buffer */ LWS_LECPCTX_RET_FAIL /* something broken, eg, format string */ }; enum cbp_state { CBPS_IDLE, CBPS_PC1, CBPS_PC2, CBPS_PC3, CBPS_STRING_BODY, CBPS_NUM_LIT, CBPS_STRING_LIT, CBPS_CONTYPE, }; typedef struct lws_lec_pctx { uint8_t stack[16]; uint8_t vaa[16]; uint8_t indet[16]; uint8_t scratch[24]; uint8_t *start; /* the beginning of the out buf */ uint8_t *buf; /* cur pos in output buf */ uint8_t *end; /* the end of the output buf */ const uint8_t *ongoing_src; uint64_t ongoing_len; uint64_t ongoing_done; struct lecp_item item; size_t used; /* number of bytes valid from start */ int opaque[4]; /* ignored by lws, caller may use */ enum cbp_state state; unsigned int fmt_pos; uint8_t sp; uint8_t scratch_len; uint8_t escflag; uint8_t _long; uint8_t vaa_pos; uint8_t dotstar; } lws_lec_pctx_t; LWS_VISIBLE LWS_EXTERN void lws_lec_int(lws_lec_pctx_t *ctx, uint8_t opcode, uint8_t indet, uint64_t num); LWS_VISIBLE LWS_EXTERN int lws_lec_scratch(lws_lec_pctx_t *ctx); /* * lws_lec_init() - prepare a cbor writing context * * \param ctx: the cbor writing context to prepare * \param buf: the output buffer start * \param len: the amount of the output buffer we can use * * Prepares a cbor writing context so that les_lec_printf can be used to * write into it. */ LWS_VISIBLE LWS_EXTERN void lws_lec_init(lws_lec_pctx_t *ctx, uint8_t *buf, size_t len); /* * lws_lec_setbuf() - update the output buffer for an initialized cbor writing ctx * * \param ctx: the cbor writing context to prepare * \param buf: the output buffer start * \param len: the amount of the output buffer we can use * * Leaves the cbor writing context state as it is, but resets the output buffer * it writes into as given in \p buf and \p len */ LWS_VISIBLE LWS_EXTERN void lws_lec_setbuf(lws_lec_pctx_t *ctx, uint8_t *buf, size_t len); /* * lws_lec_vsprintf() - write into a cbor writing context * * \param ctx: the cbor writing context to prepare * \param format: a printf style argument map * \param args: the va args * * CBOR-aware vsprintf which pauses output when it fills the output buffer. You * can call it again with the same args and same lws_lex_pctx to resume filling * * Returns either LWS_LECPCTX_RET_FINISHED if we have nothing left over that we * want to put in the buffer, or LWS_LECPCTX_RET_AGAIN if the function should * be called again with the same arguments (perhaps into a different output * buffer) to continue emitting output from where it left off. * * If LWS_LECPCTX_RET_AGAIN is returned, lws_lec_setbuf() must be used on the * context to reset or change the output buffer before calling again. * * The number of bytes placed in the output buffer is available in ctx->used. * * \p format is a printf-type format string that is specialized for CBOR * generation. It understands the following specifiers * * |`123`||unsigned literal number| * |`-123`||signed literal number| * |`%u`|`unsigned int`|number| * |`%lu`|`unsigned long int`|number| * |`%llu`|`unsigned long long int`|number| * |`%d`|`signed int`|number| * |`%ld`|`signed long int`|number| * |`%lld`|`signed long long int`|number| * |`%f`|`double`|floating point number| * |`123(...)`||literal tag and scope| * |`%t(...)`|`unsigned int`|tag and scope| * |`%lt(...)`|`unsigned long int`|tag and scope| * |`%llt(...)`|`unsigned long long int`|tag and scope| * |`[...]`||Array (fixed len if `]` in same format string)| * |`{...}`||Map (fixed len if `}` in same format string)| * |``||Container for indeterminite text string frags| * |``||Container for indeterminite binary string frags| * |`'string'`||Literal text of known length| * |`%s`|`const char *`|NUL-terminated string| * |`%.*s`|`int`, `const char *`|length-specified string| * |`%.*b`|`int`, `const uint8_t *`|length-specified binary| * |`:`||separator between Map items (a:b)| * |`,`||separator between Map pairs or array items| * * See READMEs/README.cbor-lecp.md for more details. */ LWS_VISIBLE LWS_EXTERN enum lws_lec_pctx_ret lws_lec_vsprintf(lws_lec_pctx_t *ctx, const char *format, va_list args); /* * lws_lec_printf() - write into a cbor writing context * * \param ctx: the cbor writing context to prepare * \param format: a printf style argument map * \param ...: format args * * See lws_lec_vsprintf() for format details. This is the most common way * to format the CBOR output. * * See READMEs/README.cbor-lecp.md for more details. */ LWS_VISIBLE LWS_EXTERN enum lws_lec_pctx_ret lws_lec_printf(lws_lec_pctx_t *ctx, const char *format, ...); /** * lecp_construct() - Construct an LECP parser context * * \param ctx: the parser context object to be initialized * \param cb: the user callback to receive the parsing events * \param user: an opaque user pointer available at \p cb * \param paths: an optional array of parsing paths * \param paths_count: how many paths in \p paths * * Prepares an LECP parser context for parsing. */ LWS_VISIBLE LWS_EXTERN void lecp_construct(struct lecp_ctx *ctx, lecp_callback cb, void *user, const char * const *paths, unsigned char paths_count); /** * lecp_destruct() - Destroys an LECP parser context * * \param ctx: the parser context object to be destroyed */ LWS_VISIBLE LWS_EXTERN void lecp_destruct(struct lecp_ctx *ctx); /** * lecp_parse() - parses a chunk of input CBOR * * \p ctx: the parsing context * \p cbor: the start of the chunk of CBOR * \p len: the number of bytes of CBOR available at \p cbor * * Returns LECP_CONTINUE if more input needed, one of enum lecp_reasons for a * fatal error, else 0 for successful parsing completion. * * On success or _CONTINUE, ctx->used_in is set to the number of input bytes * consumed. */ LWS_VISIBLE LWS_EXTERN int lecp_parse(struct lecp_ctx *ctx, const uint8_t *cbor, size_t len); LWS_VISIBLE LWS_EXTERN void lecp_change_callback(struct lecp_ctx *ctx, lecp_callback cb); LWS_VISIBLE LWS_EXTERN const char * lecp_error_to_string(int e); /** * lecp_parse_report_raw() - turn cbor raw reporting on and off * * \param ctx: the lecp context * \param on: 0 to disable (defaults disabled), 1 to enable * * For cose_sign, it needs access to raw cbor subtrees for the hash input. * This api causes LECPCB_LITERAL_CBOR parse callbacks when there are * ctx->cbor_pos bytes of raw cbor available in ctx->cbor[]. the callbacks * occur when the ctx->cbor[] buffer fills or if it holds anything when this * spi is used to stop the reports. * * The same CBOR that is being captured continues to be passed for parsing. */ LWS_VISIBLE LWS_EXTERN void lecp_parse_report_raw(struct lecp_ctx *ctx, int on); /** * lecp_parse_map_is_key() - return nonzero if we're in a map and this is a key * * \param ctx: the lwcp context * * Checks if the current value is a key in a map, ie, that you are on a "key" in * a list of "{key: value}" pairs. Zero means you're either not in a map or not * on the key part, and nonzero means you are in a map and on a key part. */ LWS_VISIBLE LWS_EXTERN int lecp_parse_map_is_key(struct lecp_ctx *ctx); LWS_VISIBLE LWS_EXTERN int lecp_parse_subtree(struct lecp_ctx *ctx, const uint8_t *in, size_t len); /* * Helpers for half-float */ LWS_VISIBLE LWS_EXTERN void lws_singles2halfp(uint16_t *hp, uint32_t x); LWS_VISIBLE LWS_EXTERN void lws_halfp2singles(uint32_t *xp, uint16_t h); //@} libwebsockets-4.3.5/include/libwebsockets/lws-led.h000066400000000000000000000115441476025525100224020ustar00rootroot00000000000000/* * Generic LED controller ops * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * This is like an abstract class for leds, a real implementation provides * functions for the ops that use the underlying, eg, OS gpio arrangements. */ /* only b15 significant for GPIO */ typedef uint16_t lws_led_intensity_t; typedef uint16_t lws_led_seq_phase_t; /* the normalized max intensity */ #define LWS_LED_MAX_INTENSITY (0xffff) /* the normalized 360 degree phase count for intensity functions */ #define LWS_LED_FUNC_PHASE 65536 /* used when the sequence doesn't stop by itself and goes around forever */ #define LWS_SEQ_LEDPHASE_TOTAL_ENDLESS (-1) #define LWS_LED_SEQUENCER_UPDATE_INTERVAL_MS 33 struct lws_led_state; /* opaque */ struct lws_pwm_ops; /* forward ref */ typedef lws_led_intensity_t (*lws_led_lookup_t)(lws_led_seq_phase_t ph); typedef struct lws_led_sequence_def_t { lws_led_lookup_t func; lws_led_seq_phase_t ledphase_offset; int ledphase_total; /* 65536= one cycle */ uint16_t ms; uint8_t flags; } lws_led_sequence_def_t; enum { LLSI_CURR, LLSI_NEXT, LLSI_TRANS }; typedef struct lws_led_state_ch { const lws_led_sequence_def_t *seq; /* NULL = inactive */ lws_led_seq_phase_t ph; lws_led_seq_phase_t step; int phase_budget; lws_led_intensity_t last; /**< at the end of the sequence we decouple the sequencer, but leave * the last computed sample behind for further transitions to base off */ } lws_led_state_ch_t; typedef struct lws_led_state_chs { lws_led_state_ch_t seqs[3]; } lws_led_state_chs_t; /* this should always be first in the subclassed implementation types */ typedef struct lws_led_ops { void (*intensity)(const struct lws_led_ops *lo, const char *name, lws_led_intensity_t inten); /**< for BOOL led control like GPIO, only inten b15 is significant */ struct lws_led_state * (*create)(const struct lws_led_ops *led_ops); void (*destroy)(struct lws_led_state *); } lws_led_ops_t; typedef struct lws_led_gpio_map { const char *name; _lws_plat_gpio_t gpio; lws_led_lookup_t intensity_correction; /**< May be NULL. If GPIO-based LED, ignored. If pwm_ops provided, * NULL means use default CIE 100% correction function. If non-NULL, * use the pointed-to correction function. This is useful to provide * LED-specific intensity correction / scaling so different types of * LED can "look the same". */ const struct lws_pwm_ops *pwm_ops; /**< if NULL, gpio controls the led directly. If set to a pwm_ops, * the led control is outsourced to the pwm controller. */ uint8_t active_level; } lws_led_gpio_map_t; typedef struct lws_led_gpio_controller { const lws_led_ops_t led_ops; const lws_gpio_ops_t *gpio_ops; const lws_led_gpio_map_t *led_map; uint8_t count_leds; } lws_led_gpio_controller_t; /* ops */ LWS_VISIBLE LWS_EXTERN struct lws_led_state * lws_led_gpio_create(const lws_led_ops_t *led_ops); LWS_VISIBLE LWS_EXTERN void lws_led_gpio_destroy(struct lws_led_state *lcs); /** * lws_led_gpio_intensity() - set the static intensity of an led * * \param lo: the base class of the led controller * \param index: which led in the controller set * \param inten: 16-bit unsigned intensity * * For LEDs controlled by a BOOL like GPIO, only inten b15 is significant. * For PWM type LED control, as many bits as the hardware can support from b15 * down are significant. */ LWS_VISIBLE LWS_EXTERN void lws_led_gpio_intensity(const struct lws_led_ops *lo, const char *name, lws_led_intensity_t inten); LWS_VISIBLE LWS_EXTERN int lws_led_transition(struct lws_led_state *lcs, const char *name, const lws_led_sequence_def_t *next, const lws_led_sequence_def_t *trans); #define lws_led_gpio_ops \ { \ .create = lws_led_gpio_create, \ .destroy = lws_led_gpio_destroy, \ .intensity = lws_led_gpio_intensity, \ } libwebsockets-4.3.5/include/libwebsockets/lws-lejp.h000066400000000000000000000215431476025525100225700ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /** \defgroup lejp JSON parser * ##JSON parsing related functions * \ingroup lwsapi * * LEJP is an extremely lightweight JSON stream parser included in lws. */ //@{ struct lejp_ctx; #if !defined(LWS_ARRAY_SIZE) #define LWS_ARRAY_SIZE(_x) (sizeof(_x) / sizeof(_x[0])) #endif #define LEJP_FLAG_WS_KEEP 64 #define LEJP_FLAG_WS_COMMENTLINE 32 enum lejp_states { LEJP_IDLE = 0, LEJP_MEMBERS = 1, LEJP_M_P = 2, LEJP_MP_STRING = LEJP_FLAG_WS_KEEP | 3, LEJP_MP_STRING_ESC = LEJP_FLAG_WS_KEEP | 4, LEJP_MP_STRING_ESC_U1 = LEJP_FLAG_WS_KEEP | 5, LEJP_MP_STRING_ESC_U2 = LEJP_FLAG_WS_KEEP | 6, LEJP_MP_STRING_ESC_U3 = LEJP_FLAG_WS_KEEP | 7, LEJP_MP_STRING_ESC_U4 = LEJP_FLAG_WS_KEEP | 8, LEJP_MP_DELIM = 9, LEJP_MP_VALUE = 10, LEJP_MP_VALUE_NUM_INT = LEJP_FLAG_WS_KEEP | 11, LEJP_MP_VALUE_NUM_EXP = LEJP_FLAG_WS_KEEP | 12, LEJP_MP_VALUE_TOK = LEJP_FLAG_WS_KEEP | 13, LEJP_MP_COMMA_OR_END = 14, LEJP_MP_ARRAY_END = 15, }; enum lejp_reasons { LEJP_CONTINUE = -1, LEJP_REJECT_IDLE_NO_BRACE = -2, LEJP_REJECT_MEMBERS_NO_CLOSE = -3, LEJP_REJECT_MP_NO_OPEN_QUOTE = -4, LEJP_REJECT_MP_STRING_UNDERRUN = -5, LEJP_REJECT_MP_ILLEGAL_CTRL = -6, LEJP_REJECT_MP_STRING_ESC_ILLEGAL_ESC = -7, LEJP_REJECT_ILLEGAL_HEX = -8, LEJP_REJECT_MP_DELIM_MISSING_COLON = -9, LEJP_REJECT_MP_DELIM_BAD_VALUE_START = -10, LEJP_REJECT_MP_VAL_NUM_INT_NO_FRAC = -11, LEJP_REJECT_MP_VAL_NUM_FORMAT = -12, LEJP_REJECT_MP_VAL_NUM_EXP_BAD_EXP = -13, LEJP_REJECT_MP_VAL_TOK_UNKNOWN = -14, LEJP_REJECT_MP_C_OR_E_UNDERF = -15, LEJP_REJECT_MP_C_OR_E_NOTARRAY = -16, LEJP_REJECT_MP_ARRAY_END_MISSING = -17, LEJP_REJECT_STACK_OVERFLOW = -18, LEJP_REJECT_MP_DELIM_ISTACK = -19, LEJP_REJECT_NUM_TOO_LONG = -20, LEJP_REJECT_MP_C_OR_E_NEITHER = -21, LEJP_REJECT_UNKNOWN = -22, LEJP_REJECT_CALLBACK = -23 }; #define LEJP_FLAG_CB_IS_VALUE 64 enum lejp_callbacks { LEJPCB_CONSTRUCTED = 0, LEJPCB_DESTRUCTED = 1, LEJPCB_START = 2, LEJPCB_COMPLETE = 3, LEJPCB_FAILED = 4, LEJPCB_PAIR_NAME = 5, LEJPCB_VAL_TRUE = LEJP_FLAG_CB_IS_VALUE | 6, LEJPCB_VAL_FALSE = LEJP_FLAG_CB_IS_VALUE | 7, LEJPCB_VAL_NULL = LEJP_FLAG_CB_IS_VALUE | 8, LEJPCB_VAL_NUM_INT = LEJP_FLAG_CB_IS_VALUE | 9, LEJPCB_VAL_NUM_FLOAT = LEJP_FLAG_CB_IS_VALUE | 10, LEJPCB_VAL_STR_START = 11, /* notice handle separately */ LEJPCB_VAL_STR_CHUNK = LEJP_FLAG_CB_IS_VALUE | 12, LEJPCB_VAL_STR_END = LEJP_FLAG_CB_IS_VALUE | 13, LEJPCB_ARRAY_START = 14, LEJPCB_ARRAY_END = 15, LEJPCB_OBJECT_START = 16, LEJPCB_OBJECT_END = 17, }; /** * _lejp_callback() - User parser actions * \param ctx: LEJP context * \param reason: Callback reason * * Your user callback is associated with the context at construction time, * and receives calls as the parsing progresses. * * All of the callbacks may be ignored and just return 0. * * The reasons it might get called, found in @reason, are: * * LEJPCB_CONSTRUCTED: The context was just constructed... you might want to * perform one-time allocation for the life of the context. * * LEJPCB_DESTRUCTED: The context is being destructed... if you made any * allocations at construction-time, you can free them now * * LEJPCB_START: Parsing is beginning at the first byte of input * * LEJPCB_COMPLETE: Parsing has completed successfully. You'll get a 0 or * positive return code from lejp_parse indicating the * amount of unused bytes left in the input buffer * * LEJPCB_FAILED: Parsing failed. You'll get a negative error code * returned from lejp_parse * * LEJPCB_PAIR_NAME: When a "name":"value" pair has had the name parsed, * this callback occurs. You can find the new name at * the end of ctx->path[] * * LEJPCB_VAL_TRUE: The "true" value appeared * * LEJPCB_VAL_FALSE: The "false" value appeared * * LEJPCB_VAL_NULL: The "null" value appeared * * LEJPCB_VAL_NUM_INT: A string representing an integer is in ctx->buf * * LEJPCB_VAL_NUM_FLOAT: A string representing a float is in ctx->buf * * LEJPCB_VAL_STR_START: We are starting to parse a string, no data yet * * LEJPCB_VAL_STR_CHUNK: We filled the string buffer in the ctx, but it's not * the end of the string. We produce this to spill the * intermediate buffer to the user code, so we can handle * huge JSON strings using only the small buffer in the * ctx. If the whole JSON string fits in the ctx buffer, * you won't get these callbacks. * * LEJPCB_VAL_STR_END: String parsing has completed, the last chunk of the * string is in ctx->buf. * * LEJPCB_ARRAY_START: An array started * * LEJPCB_ARRAY_END: An array ended * * LEJPCB_OBJECT_START: An object started * * LEJPCB_OBJECT_END: An object ended */ LWS_EXTERN signed char _lejp_callback(struct lejp_ctx *ctx, char reason); typedef signed char (*lejp_callback)(struct lejp_ctx *ctx, char reason); #ifndef LEJP_MAX_PARSING_STACK_DEPTH #define LEJP_MAX_PARSING_STACK_DEPTH 5 #endif #ifndef LEJP_MAX_DEPTH #define LEJP_MAX_DEPTH 12 #endif #ifndef LEJP_MAX_INDEX_DEPTH #define LEJP_MAX_INDEX_DEPTH 8 #endif #ifndef LEJP_MAX_PATH #define LEJP_MAX_PATH 128 #endif #ifndef LEJP_STRING_CHUNK /* must be >= 30 to assemble floats */ #define LEJP_STRING_CHUNK 254 #endif enum num_flags { LEJP_SEEN_MINUS = (1 << 0), LEJP_SEEN_POINT = (1 << 1), LEJP_SEEN_POST_POINT = (1 << 2), LEJP_SEEN_EXP = (1 << 3) }; struct _lejp_stack { char s; /* lejp_state stack*/ char p; /* path length */ char i; /* index array length */ char b; /* user bitfield */ }; struct _lejp_parsing_stack { void *user; /* private to the stack level */ signed char (*callback)(struct lejp_ctx *ctx, char reason); const char * const *paths; uint8_t count_paths; uint8_t ppos; uint8_t path_match; }; struct lejp_ctx { /* sorted by type for most compact alignment * * pointers */ void *user; /* arrays */ struct _lejp_parsing_stack pst[LEJP_MAX_PARSING_STACK_DEPTH]; struct _lejp_stack st[LEJP_MAX_DEPTH]; uint16_t i[LEJP_MAX_INDEX_DEPTH]; /* index array */ uint16_t wild[LEJP_MAX_INDEX_DEPTH]; /* index array */ char path[LEJP_MAX_PATH]; char buf[LEJP_STRING_CHUNK + 1]; /* size_t */ size_t path_stride; /* 0 means default ptr size, else stride */ /* int */ uint32_t line; /* short */ uint16_t uni; /* char */ uint8_t npos; uint8_t dcount; uint8_t f; uint8_t sp; /* stack head */ uint8_t ipos; /* index stack depth */ uint8_t count_paths; uint8_t path_match; uint8_t path_match_len; uint8_t wildcount; uint8_t pst_sp; /* parsing stack head */ uint8_t outer_array; }; LWS_VISIBLE LWS_EXTERN void lejp_construct(struct lejp_ctx *ctx, signed char (*callback)(struct lejp_ctx *ctx, char reason), void *user, const char * const *paths, unsigned char paths_count); LWS_VISIBLE LWS_EXTERN void lejp_destruct(struct lejp_ctx *ctx); LWS_VISIBLE LWS_EXTERN int lejp_parse(struct lejp_ctx *ctx, const unsigned char *json, int len); LWS_VISIBLE LWS_EXTERN void lejp_change_callback(struct lejp_ctx *ctx, signed char (*callback)(struct lejp_ctx *ctx, char reason)); /* * push the current paths / paths_count and lejp_cb to a stack in the ctx, and * start using the new ones */ LWS_VISIBLE LWS_EXTERN int lejp_parser_push(struct lejp_ctx *ctx, void *user, const char * const *paths, unsigned char paths_count, lejp_callback lejp_cb); /* * pop the previously used paths / paths_count and lejp_cb, and continue * parsing using those as before */ LWS_VISIBLE LWS_EXTERN int lejp_parser_pop(struct lejp_ctx *ctx); /* exported for use when reevaluating a path for use with a subcontext */ LWS_VISIBLE LWS_EXTERN void lejp_check_path_match(struct lejp_ctx *ctx); LWS_VISIBLE LWS_EXTERN int lejp_get_wildcard(struct lejp_ctx *ctx, int wildcard, char *dest, int len); LWS_VISIBLE LWS_EXTERN const char * lejp_error_to_string(int e); //@} libwebsockets-4.3.5/include/libwebsockets/lws-logs.h000066400000000000000000000574361476025525100226140ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /** \defgroup log Logging * * ##Logging * * Lws provides flexible and filterable logging facilities, which can be * used inside lws and in user code. * * Log categories may be individually filtered bitwise, and directed to built-in * sinks for syslog-compatible logging, or a user-defined function. * * Traditional logs use a single, processwide logging context. New style log * apis (lws_xxx_cx()) can pass the logging context to use in. */ ///@{ #define LLL_ERR (1 << 0) #define LLL_WARN (1 << 1) #define LLL_NOTICE (1 << 2) #define LLL_INFO (1 << 3) #define LLL_DEBUG (1 << 4) #define LLL_PARSER (1 << 5) #define LLL_HEADER (1 << 6) #define LLL_EXT (1 << 7) #define LLL_CLIENT (1 << 8) #define LLL_LATENCY (1 << 9) #define LLL_USER (1 << 10) #define LLL_THREAD (1 << 11) #define LLL_COUNT (12) /* set to count of valid flags */ #define LLLF_SECRECY_PII (1 << 16) /**< contains Personally Identifiable Information */ #define LLLF_SECRECY_BEARER (1 << 17) /**< possession of this data allows impersonation */ #define LLLF_LOG_TIMESTAMP (1 << 18) /**< set to prepend logs with timestamp */ #define LLLF_LOG_CONTEXT_AWARE (1 << 30) /**< set if the context uses an emit function that takes the logctx, auto- * applied when setting emit using lws_set_log_level_cx() api */ struct lws_log_cx; typedef void (*lws_log_emit_t)(int level, const char *line); typedef void (*lws_log_emit_cx_t)(struct lws_log_cx *cx, int level, const char *line, size_t len); typedef void (*lws_log_prepend_cx_t)(struct lws_log_cx *cx, void *obj, char **p, char *e); typedef void (*lws_log_use_cx_t)(struct lws_log_cx *cx, int _new); /* * This is the logging context */ typedef struct lws_log_cx { union { lws_log_emit_t emit; /* legacy emit function */ lws_log_emit_cx_t emit_cx; /* LLLF_LOG_CONTEXT_AWARE */ } u; #if LWS_MAX_SMP > 1 pthread_mutex_t refcount_lock; #endif lws_log_use_cx_t refcount_cb; /**< NULL, or a function called after each change to .refcount below, * this enables implementing side-effects like opening and closing * log files when the first and last object binds / unbinds */ lws_log_prepend_cx_t prepend; /**< NULL, or a cb to optionally prepend a string to logs we are a * parent of */ struct lws_log_cx *parent; /**< NULL, or points to log ctx we are a child of */ void *opaque; /**< ignored by lws, used to pass config to emit_cx, eg, filepath */ void *stg; /**< ignored by lws, may be used a storage by refcount_cb / emit_cx */ uint32_t lll_flags; /**< mask of log levels we want to emit in this context */ int32_t refcount; /**< refcount of objects bound to this log context */ #if LWS_MAX_SMP > 1 char inited; #endif } lws_log_cx_t; /** * lwsl_timestamp: generate logging timestamp string * * \param level: logging level * \param p: char * buffer to take timestamp * \param len: length of p * * returns length written in p */ LWS_VISIBLE LWS_EXTERN int lwsl_timestamp(int level, char *p, size_t len); #if defined(LWS_PLAT_OPTEE) && !defined(LWS_WITH_NETWORK) #define _lws_log(aaa, ...) SMSG(__VA_ARGS__) #else LWS_VISIBLE LWS_EXTERN void _lws_log(int filter, const char *format, ...) LWS_FORMAT(2); LWS_VISIBLE LWS_EXTERN void _lws_logv(int filter, const char *format, va_list vl); #endif struct lws_vhost; struct lws; LWS_VISIBLE LWS_EXTERN struct lws_log_cx * lwsl_context_get_cx(struct lws_context *cx); LWS_VISIBLE LWS_EXTERN struct lws_log_cx * lwsl_vhost_get_cx(struct lws_vhost *vh); LWS_VISIBLE LWS_EXTERN struct lws_log_cx * lwsl_wsi_get_cx(struct lws *wsi); #if defined(LWS_WITH_SECURE_STREAMS) struct lws_ss_handle; struct lws_sspc_handle; LWS_VISIBLE LWS_EXTERN struct lws_log_cx * lwsl_ss_get_cx(struct lws_ss_handle *ss); LWS_VISIBLE LWS_EXTERN struct lws_log_cx * lwsl_sspc_get_cx(struct lws_sspc_handle *ss); #endif LWS_VISIBLE LWS_EXTERN void lws_log_emit_cx_file(struct lws_log_cx *cx, int level, const char *line, size_t len); LWS_VISIBLE LWS_EXTERN void lws_log_use_cx_file(struct lws_log_cx *cx, int _new); LWS_VISIBLE LWS_EXTERN void lws_log_prepend_context(struct lws_log_cx *cx, void *obj, char **p, char *e); LWS_VISIBLE LWS_EXTERN void lws_log_prepend_vhost(struct lws_log_cx *cx, void *obj, char **p, char *e); LWS_VISIBLE LWS_EXTERN void lws_log_prepend_wsi(struct lws_log_cx *cx, void *obj, char **p, char *e); #if defined(LWS_WITH_SECURE_STREAMS) LWS_VISIBLE LWS_EXTERN void lws_log_prepend_ss(struct lws_log_cx *cx, void *obj, char **p, char *e); LWS_VISIBLE LWS_EXTERN void lws_log_prepend_sspc(struct lws_log_cx *cx, void *obj, char **p, char *e); #endif LWS_VISIBLE LWS_EXTERN void _lws_log_cx(lws_log_cx_t *cx, lws_log_prepend_cx_t prep, void *obj, int filter, const char *_fun, const char *format, ...) LWS_FORMAT(6); #define lwsl_cx(_c, _fil, ...) \ _lws_log_cx(lwsl_context_get_cx(_c), lws_log_prepend_context, \ _c, _fil, __func__, __VA_ARGS__) #define lwsl_vhost(_v, _fil, ...) \ _lws_log_cx(lwsl_vhost_get_cx(_v), lws_log_prepend_vhost, _v, \ _fil, __func__, __VA_ARGS__) #define lwsl_wsi(_w, _fil, ...) \ _lws_log_cx(lwsl_wsi_get_cx(_w), lws_log_prepend_wsi, _w, \ _fil, __func__, __VA_ARGS__) #define lwsl_ss(_h, _fil, ...) \ _lws_log_cx(lwsl_ss_get_cx(_h), lws_log_prepend_ss, _h, \ _fil, __func__, __VA_ARGS__) #define lwsl_hexdump_context(_c, _fil, _buf, _len) \ lwsl_hexdump_level_cx(lwsl_context_get_cx(_c), \ lws_log_prepend_context, \ _c, _fil, _buf, _len) #define lwsl_hexdump_vhost(_v, _fil, _buf, _len) \ lwsl_hexdump_level_cx(lwsl_vhost_get_cx(_v), \ lws_log_prepend_vhost, \ _v, _fil, _buf, _len) #define lwsl_hexdump_wsi(_w, _fil, _buf, _len) \ lwsl_hexdump_level_cx(lwsl_wsi_get_cx(_w), \ lws_log_prepend_wsi, \ _w, _fil, _buf, _len) #define lwsl_hexdump_ss(_h, _fil, _buf, _len) \ lwsl_hexdump_level_cx(lwsl_ss_get_cx(_h), \ lws_log_prepend_ss, \ _h, _fil, _buf, _len) /* * Figure out which logs to build in or not */ #if defined(_DEBUG) /* * In DEBUG build, select all logs unless NO_LOGS */ #if defined(LWS_WITH_NO_LOGS) #define _LWS_LINIT (LLL_ERR | LLL_USER) #else #define _LWS_LINIT ((1 << LLL_COUNT) - 1) #endif #else /* not _DEBUG */ #if defined(LWS_WITH_NO_LOGS) #define _LWS_LINIT (LLL_ERR | LLL_USER) #else #define _LWS_LINIT (LLL_ERR | LLL_USER | LLL_WARN | LLL_NOTICE) #endif #endif /* _DEBUG */ /* * Create either empty overrides or the ones forced at build-time. * These overrides have the final say... any bits set in * LWS_LOGGING_BITFIELD_SET force the build of those logs, any bits * set in LWS_LOGGING_BITFIELD_CLEAR disable the build of those logs. * * If not defined lws decides based on CMAKE_BUILD_TYPE=DEBUG or not */ #if defined(LWS_LOGGING_BITFIELD_SET) #define _LWS_LBS (LWS_LOGGING_BITFIELD_SET) #else #define _LWS_LBS 0 #endif #if defined(LWS_LOGGING_BITFIELD_CLEAR) #define _LWS_LBC (LWS_LOGGING_BITFIELD_CLEAR) #else #define _LWS_LBC 0 #endif /* * Compute the final active logging bitfield for build */ #define _LWS_ENABLED_LOGS (((_LWS_LINIT) | (_LWS_LBS)) & ~(_LWS_LBC)) /* * Individually enable or disable log levels for build * depending on what was computed */ /* * Process scope logs */ #if (_LWS_ENABLED_LOGS & LLL_ERR) #define lwsl_err(...) _lws_log(LLL_ERR, __VA_ARGS__) #else #define lwsl_err(...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_WARN) #define lwsl_warn(...) _lws_log(LLL_WARN, __VA_ARGS__) #else #define lwsl_warn(...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_NOTICE) #define lwsl_notice(...) _lws_log(LLL_NOTICE, __VA_ARGS__) #else #define lwsl_notice(...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_INFO) #define lwsl_info(...) _lws_log(LLL_INFO, __VA_ARGS__) #else #define lwsl_info(...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_DEBUG) #define lwsl_debug(...) _lws_log(LLL_DEBUG, __VA_ARGS__) #else #define lwsl_debug(...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_PARSER) #define lwsl_parser(...) _lws_log(LLL_PARSER, __VA_ARGS__) #else #define lwsl_parser(...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_HEADER) #define lwsl_header(...) _lws_log(LLL_HEADER, __VA_ARGS__) #else #define lwsl_header(...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_EXT) #define lwsl_ext(...) _lws_log(LLL_EXT, __VA_ARGS__) #else #define lwsl_ext(...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_CLIENT) #define lwsl_client(...) _lws_log(LLL_CLIENT, __VA_ARGS__) #else #define lwsl_client(...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_LATENCY) #define lwsl_latency(...) _lws_log(LLL_LATENCY, __VA_ARGS__) #else #define lwsl_latency(...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_THREAD) #define lwsl_thread(...) _lws_log(LLL_THREAD, __VA_ARGS__) #else #define lwsl_thread(...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_USER) #define lwsl_user(...) _lws_log(LLL_USER, __VA_ARGS__) #else #define lwsl_user(...) do {} while(0) #endif #define lwsl_hexdump_err(...) lwsl_hexdump_level(LLL_ERR, __VA_ARGS__) #define lwsl_hexdump_warn(...) lwsl_hexdump_level(LLL_WARN, __VA_ARGS__) #define lwsl_hexdump_notice(...) lwsl_hexdump_level(LLL_NOTICE, __VA_ARGS__) #define lwsl_hexdump_info(...) lwsl_hexdump_level(LLL_INFO, __VA_ARGS__) #define lwsl_hexdump_debug(...) lwsl_hexdump_level(LLL_DEBUG, __VA_ARGS__) /* * lws_context scope logs */ #if (_LWS_ENABLED_LOGS & LLL_ERR) #define lwsl_cx_err(_c, ...) lwsl_cx(_c, LLL_ERR, __VA_ARGS__) #else #define lwsl_cx_err(_c, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_WARN) #define lwsl_cx_warn(_c, ...) lwsl_cx(_c, LLL_WARN, __VA_ARGS__) #else #define lwsl_cx_warn(_c, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_NOTICE) #define lwsl_cx_notice(_c, ...) lwsl_cx(_c, LLL_NOTICE, __VA_ARGS__) #else #define lwsl_cx_notice(_c, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_INFO) #define lwsl_cx_info(_c, ...) lwsl_cx(_c, LLL_INFO, __VA_ARGS__) #else #define lwsl_cx_info(_c, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_DEBUG) #define lwsl_cx_debug(_c, ...) lwsl_cx(_c, LLL_DEBUG, __VA_ARGS__) #else #define lwsl_cx_debug(_c, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_PARSER) #define lwsl_cx_parser(_c, ...) lwsl_cx(_c, LLL_PARSER, __VA_ARGS__) #else #define lwsl_cx_parser(_c, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_HEADER) #define lwsl_cx_header(_c, ...) lwsl_cx(_c, LLL_HEADER, __VA_ARGS__) #else #define lwsl_cx_header(_c, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_EXT) #define lwsl_cx_ext(_c, ...) lwsl_cx(_c, LLL_EXT, __VA_ARGS__) #else #define lwsl_cx_ext(_c, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_CLIENT) #define lwsl_cx_client(_c, ...) lwsl_cx(_c, LLL_CLIENT, __VA_ARGS__) #else #define lwsl_cx_client(_c, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_LATENCY) #define lwsl_cx_latency(_c, ...) lwsl_cx(_c, LLL_LATENCY, __VA_ARGS__) #else #define lwsl_cx_latency(_c, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_THREAD) #define lwsl_cx_thread(_c, ...) lwsl_cx(_c, LLL_THREAD, __VA_ARGS__) #else #define lwsl_cx_thread(_c, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_USER) #define lwsl_cx_user(_c, ...) lwsl_cx(_c, LLL_USER, __VA_ARGS__) #else #define lwsl_cx_user(_c, ...) do {} while(0) #endif #define lwsl_hexdump_cx_err(_c, ...) lwsl_hexdump_context(_c, LLL_ERR, __VA_ARGS__) #define lwsl_hexdump_cx_warn(_c, ...) lwsl_hexdump_context(_c, LLL_WARN, __VA_ARGS__) #define lwsl_hexdump_cx_notice(_c, ...) lwsl_hexdump_context(_c, LLL_NOTICE, __VA_ARGS__) #define lwsl_hexdump_cx_info(_c, ...) lwsl_hexdump_context(_c, LLL_INFO, __VA_ARGS__) #define lwsl_hexdump_cx_debug(_c, ...) lwsl_hexdump_context(_c, LLL_DEBUG, __VA_ARGS__) /* * lws_vhost */ #if (_LWS_ENABLED_LOGS & LLL_ERR) #define lwsl_vhost_err(_v, ...) lwsl_vhost(_v, LLL_ERR, __VA_ARGS__) #else #define lwsl_vhost_err(_v, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_WARN) #define lwsl_vhost_warn(_v, ...) lwsl_vhost(_v, LLL_WARN, __VA_ARGS__) #else #define lwsl_vhost_warn(_v, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_NOTICE) #define lwsl_vhost_notice(_v, ...) lwsl_vhost(_v, LLL_NOTICE, __VA_ARGS__) #else #define lwsl_vhost_notice(_v, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_INFO) #define lwsl_vhost_info(_v, ...) lwsl_vhost(_v, LLL_INFO, __VA_ARGS__) #else #define lwsl_vhost_info(_v, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_DEBUG) #define lwsl_vhost_debug(_v, ...) lwsl_vhost(_v, LLL_DEBUG, __VA_ARGS__) #else #define lwsl_vhost_debug(_v, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_PARSER) #define lwsl_vhost_parser(_v, ...) lwsl_vhost(_v, LLL_PARSER, __VA_ARGS__) #else #define lwsl_vhost_parser(_v, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_HEADER) #define lwsl_vhost_header(_v, ...) lwsl_vhost(_v, LLL_HEADER, __VA_ARGS__) #else #define lwsl_vhost_header(_v, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_EXT) #define lwsl_vhost_ext(_v, ...) lwsl_vhost(_v, LLL_EXT, __VA_ARGS__) #else #define lwsl_vhost_ext(_v, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_CLIENT) #define lwsl_vhost_client(_v, ...) lwsl_vhost(_v, LLL_CLIENT, __VA_ARGS__) #else #define lwsl_vhost_client(_v, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_LATENCY) #define lwsl_vhost_latency(_v, ...) lwsl_vhost(_v, LLL_LATENCY, __VA_ARGS__) #else #define lwsl_vhost_latency(_v, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_THREAD) #define lwsl_vhost_thread(_v, ...) lwsl_vhost(_v, LLL_THREAD, __VA_ARGS__) #else #define lwsl_vhost_thread(_v, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_USER) #define lwsl_vhost_user(_v, ...) lwsl_vhost(_v, LLL_USER, __VA_ARGS__) #else #define lwsl_vhost_user(_v, ...) do {} while(0) #endif #define lwsl_hexdump_vhost_err(_v, ...) lwsl_hexdump_vhost(_v, LLL_ERR, __VA_ARGS__) #define lwsl_hexdump_vhost_warn(_v, ...) lwsl_hexdump_vhost(_v, LLL_WARN, __VA_ARGS__) #define lwsl_hexdump_vhost_notice(_v, ...) lwsl_hexdump_vhost(_v, LLL_NOTICE, __VA_ARGS__) #define lwsl_hexdump_vhost_info(_v, ...) lwsl_hexdump_vhost(_v, LLL_INFO, __VA_ARGS__) #define lwsl_hexdump_vhost_debug(_v, ...) lwsl_hexdump_vhost(_v, LLL_DEBUG, __VA_ARGS__) /* * lws_wsi */ #if (_LWS_ENABLED_LOGS & LLL_ERR) #define lwsl_wsi_err(_w, ...) lwsl_wsi(_w, LLL_ERR, __VA_ARGS__) #else #define lwsl_wsi_err(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_WARN) #define lwsl_wsi_warn(_w, ...) lwsl_wsi(_w, LLL_WARN, __VA_ARGS__) #else #define lwsl_wsi_warn(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_NOTICE) #define lwsl_wsi_notice(_w, ...) lwsl_wsi(_w, LLL_NOTICE, __VA_ARGS__) #else #define lwsl_wsi_notice(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_INFO) #define lwsl_wsi_info(_w, ...) lwsl_wsi(_w, LLL_INFO, __VA_ARGS__) #else #define lwsl_wsi_info(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_DEBUG) #define lwsl_wsi_debug(_w, ...) lwsl_wsi(_w, LLL_DEBUG, __VA_ARGS__) #else #define lwsl_wsi_debug(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_PARSER) #define lwsl_wsi_parser(_w, ...) lwsl_wsi(_w, LLL_PARSER, __VA_ARGS__) #else #define lwsl_wsi_parser(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_HEADER) #define lwsl_wsi_header(_w, ...) lwsl_wsi(_w, LLL_HEADER, __VA_ARGS__) #else #define lwsl_wsi_header(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_EXT) #define lwsl_wsi_ext(_w, ...) lwsl_wsi(_w, LLL_EXT, __VA_ARGS__) #else #define lwsl_wsi_ext(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_CLIENT) #define lwsl_wsi_client(_w, ...) lwsl_wsi(_w, LLL_CLIENT, __VA_ARGS__) #else #define lwsl_wsi_client(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_LATENCY) #define lwsl_wsi_latency(_w, ...) lwsl_wsi(_w, LLL_LATENCY, __VA_ARGS__) #else #define lwsl_wsi_latency(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_THREAD) #define lwsl_wsi_thread(_w, ...) lwsl_wsi(_w, LLL_THREAD, __VA_ARGS__) #else #define lwsl_wsi_thread(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_USER) #define lwsl_wsi_user(_w, ...) lwsl_wsi(_w, LLL_USER, __VA_ARGS__) #else #define lwsl_wsi_user(_w, ...) do {} while(0) #endif #define lwsl_hexdump_wsi_err(_v, ...) lwsl_hexdump_wsi(_v, LLL_ERR, __VA_ARGS__) #define lwsl_hexdump_wsi_warn(_v, ...) lwsl_hexdump_wsi(_v, LLL_WARN, __VA_ARGS__) #define lwsl_hexdump_wsi_notice(_v, ...) lwsl_hexdump_wsi(_v, LLL_NOTICE, __VA_ARGS__) #define lwsl_hexdump_wsi_info(_v, ...) lwsl_hexdump_wsi(_v, LLL_INFO, __VA_ARGS__) #define lwsl_hexdump_wsi_debug(_v, ...) lwsl_hexdump_wsi(_v, LLL_DEBUG, __VA_ARGS__) /* * lwsl_ss */ #if (_LWS_ENABLED_LOGS & LLL_ERR) #define lwsl_ss_err(_w, ...) lwsl_ss(_w, LLL_ERR, __VA_ARGS__) #else #define lwsl_ss_err(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_WARN) #define lwsl_ss_warn(_w, ...) lwsl_ss(_w, LLL_WARN, __VA_ARGS__) #else #define lwsl_ss_warn(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_NOTICE) #define lwsl_ss_notice(_w, ...) lwsl_ss(_w, LLL_NOTICE, __VA_ARGS__) #else #define lwsl_ss_notice(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_INFO) #define lwsl_ss_info(_w, ...) lwsl_ss(_w, LLL_INFO, __VA_ARGS__) #else #define lwsl_ss_info(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_DEBUG) #define lwsl_ss_debug(_w, ...) lwsl_ss(_w, LLL_DEBUG, __VA_ARGS__) #else #define lwsl_ss_debug(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_PARSER) #define lwsl_ss_parser(_w, ...) lwsl_ss(_w, LLL_PARSER, __VA_ARGS__) #else #define lwsl_ss_parser(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_HEADER) #define lwsl_ss_header(_w, ...) lwsl_ss(_w, LLL_HEADER, __VA_ARGS__) #else #define lwsl_ss_header(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_EXT) #define lwsl_ss_ext(_w, ...) lwsl_ss(_w, LLL_EXT, __VA_ARGS__) #else #define lwsl_ss_ext(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_CLIENT) #define lwsl_ss_client(_w, ...) lwsl_ss(_w, LLL_CLIENT, __VA_ARGS__) #else #define lwsl_ss_client(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_LATENCY) #define lwsl_ss_latency(_w, ...) lwsl_ss(_w, LLL_LATENCY, __VA_ARGS__) #else #define lwsl_ss_latency(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_THREAD) #define lwsl_ss_thread(_w, ...) lwsl_ss(_w, LLL_THREAD, __VA_ARGS__) #else #define lwsl_ss_thread(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_USER) #define lwsl_ss_user(_w, ...) lwsl_ss(_w, LLL_USER, __VA_ARGS__) #else #define lwsl_ss_user(_w, ...) do {} while(0) #endif #define lwsl_hexdump_ss_err(_v, ...) lwsl_hexdump_ss(_v, LLL_ERR, __VA_ARGS__) #define lwsl_hexdump_ss_warn(_v, ...) lwsl_hexdump_ss(_v, LLL_WARN, __VA_ARGS__) #define lwsl_hexdump_ss_notice(_v, ...) lwsl_hexdump_ss(_v, LLL_NOTICE, __VA_ARGS__) #define lwsl_hexdump_ss_info(_v, ...) lwsl_hexdump_ss(_v, LLL_INFO, __VA_ARGS__) #define lwsl_hexdump_ss_debug(_v, ...) lwsl_hexdump_ss(_v, LLL_DEBUG, __VA_ARGS__) /** * lwsl_hexdump_level() - helper to hexdump a buffer at a selected debug level * * \param level: one of LLL_ constants * \param vbuf: buffer start to dump * \param len: length of buffer to dump * * If \p level is visible, does a nice hexdump -C style dump of \p vbuf for * \p len bytes. This can be extremely convenient while debugging. */ LWS_VISIBLE LWS_EXTERN void lwsl_hexdump_level(int level, const void *vbuf, size_t len); LWS_VISIBLE LWS_EXTERN void lwsl_hexdump_level_cx(lws_log_cx_t *cx, lws_log_prepend_cx_t prep, void *obj, int hexdump_level, const void *vbuf, size_t len); /** * lwsl_hexdump() - helper to hexdump a buffer (DEBUG builds only) * * \param buf: buffer start to dump * \param len: length of buffer to dump * * Calls through to lwsl_hexdump_level(LLL_DEBUG, ... for compatability. * It's better to use lwsl_hexdump_level(level, ... directly so you can control * the visibility. */ LWS_VISIBLE LWS_EXTERN void lwsl_hexdump(const void *buf, size_t len); /** * lws_is_be() - returns nonzero if the platform is Big Endian */ static LWS_INLINE int lws_is_be(void) { const int probe = ~0xff; return *(const char *)&probe; } /** * lws_set_log_level() - Set the logging bitfield * \param level: OR together the LLL_ debug contexts you want output from * \param log_emit_function: NULL to leave it as it is, or a user-supplied * function to perform log string emission instead of * the default stderr one. * * log level defaults to "err", "warn" and "notice" contexts enabled and * emission on stderr. If stderr is a tty (according to isatty()) then * the output is coloured according to the log level using ANSI escapes. * * You can set the default security level for logging using the * secrecy_and_log_level() macro to set the \p level parameter, eg * * lws_set_log_level(secrecy_and_log_level(LWS_SECRECY_PII, LLL_ERR | LLL_WARN), * my_emit_function); * * Normally you can just leave it at the default. */ LWS_VISIBLE LWS_EXTERN void lws_set_log_level(int level, lws_log_emit_t log_emit_function); /** * lwsl_emit_syslog() - helper log emit function writes to system log * * \param level: one of LLL_ log level indexes * \param line: log string * * You use this by passing the function pointer to lws_set_log_level(), to set * it as the log emit function, it is not called directly. */ LWS_VISIBLE LWS_EXTERN void lwsl_emit_syslog(int level, const char *line); /** * lwsl_emit_stderr() - helper log emit function writes to stderr * * \param level: one of LLL_ log level indexes * \param line: log string * * You use this by passing the function pointer to lws_set_log_level(), to set * it as the log emit function, it is not called directly. * * It prepends a system timestamp like [2018/11/13 07:41:57:3989] * * If stderr is a tty, then ansi colour codes are added. */ LWS_VISIBLE LWS_EXTERN void lwsl_emit_stderr(int level, const char *line); /** * lwsl_emit_stderr_notimestamp() - helper log emit function writes to stderr * * \param level: one of LLL_ log level indexes * \param line: log string * * You use this by passing the function pointer to lws_set_log_level(), to set * it as the log emit function, it is not called directly. * * If stderr is a tty, then ansi colour codes are added. */ LWS_VISIBLE LWS_EXTERN void lwsl_emit_stderr_notimestamp(int level, const char *line); /** * lwsl_visible() - returns true if the log level should be printed * * \param level: one of LLL_ log level indexes * * This is useful if you have to do work to generate the log content, you * can skip the work if the log level used to print it is not actually * enabled at runtime. */ LWS_VISIBLE LWS_EXTERN int lwsl_visible(int level); struct lws; LWS_VISIBLE LWS_EXTERN const char * lws_wsi_tag(struct lws *wsi); LWS_VISIBLE LWS_EXTERN void lwsl_refcount_cx(lws_log_cx_t *cx, int _new); ///@} libwebsockets-4.3.5/include/libwebsockets/lws-lwsac.h000066400000000000000000000243161476025525100227500ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /** \defgroup lwsac lwsac * * ##Allocated Chunks * * If you know you will be allocating a large, unknown number of same or * differently sized objects, it's certainly possible to do it with libc * malloc. However the allocation cost in time and memory overhead can * add up, and deallocation means walking the structure of every object and * freeing them in turn. * * lwsac (LWS Allocated Chunks) allocates chunks intended to be larger * than your objects (4000 bytes by default) which you linearly allocate from * using lwsac_use(). * * If your next request won't fit in the current chunk, a new chunk is added * to the chain of chunks and the allocaton done from there. If the request * is larger than the chunk size, an oversize chunk is created to satisfy it. * * When you are finished with the allocations, you call lwsac_free() and * free all the *chunks*. So you may have thousands of objects in the chunks, * but they are all destroyed with the chunks without having to deallocate them * one by one pointlessly. */ ///@{ struct lwsac; typedef unsigned char * lwsac_cached_file_t; #define lws_list_ptr_container(P,T,M) ((T *)((char *)(P) - offsetof(T, M))) /* * linked-list helper that's commonly useful to manage lists of things * allocated using lwsac. * * These lists point to their corresponding "next" member in the target, NOT * the original containing struct. To get the containing struct, you must use * lws_list_ptr_container() to convert. * * It's like that because it means we no longer have to have the next pointer * at the start of the struct, and we can have the same struct on multiple * linked-lists with everything held in the struct itself. */ typedef void * lws_list_ptr; /* * optional sorting callback called by lws_list_ptr_insert() to sort the right * things inside the opqaue struct being sorted / inserted on the list. */ typedef int (*lws_list_ptr_sort_func_t)(lws_list_ptr a, lws_list_ptr b); #define lws_list_ptr_advance(_lp) _lp = *((void **)_lp) /* sort may be NULL if you don't care about order */ LWS_VISIBLE LWS_EXTERN void lws_list_ptr_insert(lws_list_ptr *phead, lws_list_ptr *add, lws_list_ptr_sort_func_t sort); /** * lwsac_use - allocate / use some memory from a lwsac * * \param head: pointer to the lwsac list object * \param ensure: the number of bytes we want to use * \param chunk_size: 0, or the size of the chunk to (over)allocate if * what we want won't fit in the current tail chunk. If * 0, the default value of 4000 is used. If ensure is * larger, it is used instead. * * This also serves to init the lwsac if *head is NULL. Basically it does * whatever is necessary to return you a pointer to ensure bytes of memory * reserved for the caller. * * This always allocates in the current chunk or a new chunk... see the * lwsac_use_backfill() variant to try first to find space in earlier chunks. * * Returns NULL if OOM. */ LWS_VISIBLE LWS_EXTERN void * lwsac_use(struct lwsac **head, size_t ensure, size_t chunk_size); /** * lwsac_use_backfill - allocate / use some memory from a lwsac * * \param head: pointer to the lwsac list object * \param ensure: the number of bytes we want to use * \param chunk_size: 0, or the size of the chunk to (over)allocate if * what we want won't fit in the current tail chunk. If * 0, the default value of 4000 is used. If ensure is * larger, it is used instead. * * This also serves to init the lwsac if *head is NULL. Basically it does * whatever is necessary to return you a pointer to ensure bytes of memory * reserved for the caller. * * Also checks if earlier blocks have enough remaining space to take the * allocation before making a new allocation. * * Returns NULL if OOM. */ LWS_VISIBLE LWS_EXTERN void * lwsac_use_backfill(struct lwsac **head, size_t ensure, size_t chunk_size); /** * lwsac_use - allocate / use some memory from a lwsac * * \param head: pointer to the lwsac list object * \param ensure: the number of bytes we want to use, which must be zeroed * \param chunk_size: 0, or the size of the chunk to (over)allocate if * what we want won't fit in the current tail chunk. If * 0, the default value of 4000 is used. If ensure is * larger, it is used instead. * * Same as lwsac_use(), but \p ensure bytes of memory at the return address * are zero'd before returning. * * Returns NULL if OOM. */ LWS_VISIBLE LWS_EXTERN void * lwsac_use_zero(struct lwsac **head, size_t ensure, size_t chunk_size); #define lwsac_use_zeroed lwsac_use_zero /** * lwsac_free - deallocate all chunks in the lwsac and set head NULL * * \param head: pointer to the lwsac list object * * This deallocates all chunks in the lwsac, then sets *head to NULL. All * lwsac_use() pointers are invalidated in one hit without individual frees. */ LWS_VISIBLE LWS_EXTERN void lwsac_free(struct lwsac **head); /* * Optional helpers useful for where consumers may need to defer destruction * until all consumers are finished with the lwsac */ /** * lwsac_detach() - destroy an lwsac unless somebody else is referencing it * * \param head: pointer to the lwsac list object * * The creator of the lwsac can all this instead of lwsac_free() when it itself * has finished with the lwsac, but other code may be consuming it. * * If there are no other references, the lwsac is destroyed, *head is set to * NULL and that's the end; however if something else has called * lwsac_reference() on the lwsac, it simply returns. When lws_unreference() * is called and no references are left, it will be destroyed then. */ LWS_VISIBLE LWS_EXTERN void lwsac_detach(struct lwsac **head); /** * lwsac_reference() - increase the lwsac reference count * * \param head: pointer to the lwsac list object * * Increment the reference count on the lwsac to defer destruction. */ LWS_VISIBLE LWS_EXTERN void lwsac_reference(struct lwsac *head); /** * lwsac_unreference() - decrease the lwsac reference count * * \param head: pointer to the lwsac list object * * Decrement the reference count on the lwsac... if it reached 0 on a detached * lwsac then the lwsac is immediately destroyed and *head set to NULL. */ LWS_VISIBLE LWS_EXTERN void lwsac_unreference(struct lwsac **head); /** * lwsac_extend() - try to increase the size of the last block * * \param head: pointer to the lwsac list object * \param amount: amount to try to increase usage for * * This will either increase the usage reservation of the last allocated block * by amount and return 0, or fail and return 1. * * This is very cheap to call and is designed to optimize usage after a static * struct for vari-sized additional content which may flow into an additional * block in a new chunk if necessary, but wants to make the most of the space * in front of it first to try to avoid gaps and the new chunk if it can. * * The additional area if the call succeeds will have been memset to 0. * * To use it, the following must be true: * * - only the last lwsac use can be extended * * - if another use happens inbetween the use and extend, it will break * * - the use cannot have been using backfill * * - a user object must be tracking the current allocated size of the last use * (lwsac doesn't know it) and increment by amount if the extend call succeeds * * Despite these restrictions this can be an important optimization for some * cases */ LWS_VISIBLE LWS_EXTERN int lwsac_extend(struct lwsac *head, size_t amount); /* helpers to keep a file cached in memory */ LWS_VISIBLE LWS_EXTERN void lwsac_use_cached_file_start(lwsac_cached_file_t cache); LWS_VISIBLE LWS_EXTERN void lwsac_use_cached_file_end(lwsac_cached_file_t *cache); LWS_VISIBLE LWS_EXTERN void lwsac_use_cached_file_detach(lwsac_cached_file_t *cache); LWS_VISIBLE LWS_EXTERN int lwsac_cached_file(const char *filepath, lwsac_cached_file_t *cache, size_t *len); /* more advanced helpers */ /* offset from lac to start of payload, first = 1 = first lac in chain */ LWS_VISIBLE LWS_EXTERN size_t lwsac_sizeof(int first); LWS_VISIBLE LWS_EXTERN size_t lwsac_get_tail_pos(struct lwsac *lac); LWS_VISIBLE LWS_EXTERN struct lwsac * lwsac_get_next(struct lwsac *lac); LWS_VISIBLE LWS_EXTERN size_t lwsac_align(size_t length); LWS_VISIBLE LWS_EXTERN void lwsac_info(struct lwsac *head); LWS_VISIBLE LWS_EXTERN uint64_t lwsac_total_alloc(struct lwsac *head); LWS_VISIBLE LWS_EXTERN uint64_t lwsac_total_overhead(struct lwsac *head); /** * lwsac_scan_extant() - returns existing copy of blob, or NULL * * \param head: the lwsac to scan * \param find: the blob to look for * \param len: the length of the blob to look for * \param nul: nonzero if the next byte must be NUL * * Helper that looks through a whole lwsac for a given binary blob already * present. Used in the case that lwsac contents are const once written, and * strings or blobs may be repeated in the input: this allows the earlier * copy to be pointed to by subsequent references without repeating the string * or blob redundantly. */ LWS_VISIBLE LWS_EXTERN uint8_t * lwsac_scan_extant(struct lwsac *head, uint8_t *find, size_t len, int nul); ///@} libwebsockets-4.3.5/include/libwebsockets/lws-map.h000066400000000000000000000150101476025525100224030ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /** \defgroup lws_map generic map apis * ##Generic map structures and apis * \ingroup lwsapi * * lws_map * * Discrete owner object represents the whole map, created with key-specific * ops for hashing the key to a uint32_t and comparing two keys. Owns a list * of hash tables whose size / modulo it set at creation time. * * Items in the map are contained in a lws_map_item_t that is indexed in a * hash table. * * It's difficult to make a single compact map abstraction that fits all cases, * this is useful to the extent you have the memory to trade off the number of * hashtables needed for the amount of items and the lookup latency limit for * your application, typically for hundreds or low thousands of items. */ //@{ typedef struct lws_map lws_map_t; struct lws_map_item; typedef void * lws_map_key_t; typedef void * lws_map_value_t; typedef uint32_t lws_map_hash_t; typedef lws_map_hash_t (*lws_map_hash_from_key_t)(const lws_map_key_t key, size_t kl); typedef int (*lws_map_compare_key_t)(const lws_map_key_t key1, size_t kl1, const lws_map_value_t key2, size_t kl2); typedef void * (*lws_map_alloc_t)(struct lws_map *mo, size_t x); typedef void (*lws_map_free_t)(void *); /* * Creation parameters for the map, copied into the map owner */ typedef struct lws_map_info { lws_map_hash_from_key_t _hash; lws_map_compare_key_t _compare; lws_map_alloc_t _alloc; /* NULL = lws_malloc */ lws_map_free_t _free; /* NULL = lws_free */ void *opaque; /**< &lwsac if using lwsac allocator */ void *aux; /**< chunk size if using lwsac allocator */ /**< this can be used by the alloc handler, eg for lws_ac */ size_t modulo; /**< number of hashed owner lists to create */ } lws_map_info_t; LWS_VISIBLE LWS_EXTERN const void * lws_map_item_key(struct lws_map_item *_item); LWS_VISIBLE LWS_EXTERN const void * lws_map_item_value(struct lws_map_item *_item); LWS_VISIBLE LWS_EXTERN size_t lws_map_item_key_len(struct lws_map_item *_item); LWS_VISIBLE LWS_EXTERN size_t lws_map_item_value_len(struct lws_map_item *_item); /* * Helpers for C string keys case */ #define lws_map_item_create_ks(_map, _str, _v, _vl) \ lws_map_item_create(_map, (const lws_map_key_t)_str, \ strlen(_str), (const lws_map_value_t)_v, \ _vl) #define lws_map_item_lookup_ks(_map, _str) \ lws_map_item_lookup(_map, (const lws_map_key_t)_str, strlen(_str)) /** * lws_map_create() - create a map object and hashtables on heap * * \param info: description of map to create * * Creates a map object on heap, using lws_malloc(). * * \p info may be all zeros inside, if so, modulo defaults to 8, and the * operation callbacks default to using lws_malloc() / _free() for item alloc, * a default xor / shift based hash and simple linear memory key compare. * * For less typical use-cases, the provided \p info members can be tuned to * control how the allocation of mapped items is done, lws provides two exports * lws_map_alloc_lwsac() and lws_map_free_lwsac() that can be used for _alloc * and _free to have items allocated inside an lwsac. * * The map itself is created on the heap directly, the info._alloc() op is only * used when creating items. * * keys have individual memory sizes and do not need to all be the same length. */ LWS_VISIBLE LWS_EXTERN lws_map_t * lws_map_create(const lws_map_info_t *info); /* * helpers that can be used for info._alloc and info._free if using lwsac * allocation for items, set info.opaque to point to the lwsac pointer, and * aux to (void *)chunksize, or leave zero / NULL for the default */ LWS_VISIBLE LWS_EXTERN void * lws_map_alloc_lwsac(struct lws_map *map, size_t x); LWS_VISIBLE LWS_EXTERN void lws_map_free_lwsac(void *v); /** * lws_map_destroy() - deallocate all items and free map * * \param pmap: pointer to pointer map object to deallocate * * Frees all items in the map, using info._free(), and then frees the map * from heap directly. \p *pmap is set to NULL. */ LWS_VISIBLE LWS_EXTERN void lws_map_destroy(lws_map_t **pmap); /** * lws_map_item_create() - allocate and map an item into an existing map * * \param map: the map to add items into * \param key: the key, may be any kind of object * \param keylen: the length of the key in bytes * \param value: the value, may be any kind of object * \param valuelen: the length of value * * Allocates space for the item, key and value using the map allocator, and * if non-NULL, copies the key and value into the item. * * If an item with the same key exists, it is removed and destroyed before * creating and adding the new one. */ LWS_VISIBLE LWS_EXTERN struct lws_map_item * lws_map_item_create(lws_map_t *map, const lws_map_key_t key, size_t keylen, const lws_map_value_t value, size_t valuelen); /** * lws_map_item_destroy() - remove item from map and free * * \param item: the item in the map to remove and free */ LWS_VISIBLE LWS_EXTERN void lws_map_item_destroy(struct lws_map_item *item); /** * lws_map_item_lookup() - look for a item with the given key in the map * * \param map: the map * \param key: the key to look for * \param keylen: the length of the key to look for * * Searches for the key in the map, using the map's key hash and key compare * functions. */ LWS_VISIBLE LWS_EXTERN struct lws_map_item * lws_map_item_lookup(lws_map_t *map, const lws_map_key_t key, size_t keylen); //@} libwebsockets-4.3.5/include/libwebsockets/lws-metrics.h000066400000000000000000000264271476025525100233120ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * Public apis related to metric collection and reporting */ /* lws_metrics public part */ typedef uint64_t u_mt_t; enum { LWSMTFL_REPORT_OUTLIERS = (1 << 0), /**< track outliers and report them internally */ LWSMTFL_REPORT_OOB = (1 << 1), /**< report events as they happen */ LWSMTFL_REPORT_INACTIVITY_AT_PERIODIC = (1 << 2), /**< explicitly externally report no activity at periodic cb, by * default no events in the period is just not reported */ LWSMTFL_REPORT_MEAN = (1 << 3), /**< average/min/max is meaningful, else only sum is meaningful */ LWSMTFL_REPORT_ONLY_GO = (1 << 4), /**< no-go pieces invalid */ LWSMTFL_REPORT_DUTY_WALLCLOCK_US = (1 << 5), /**< aggregate compares to wallclock us for duty cycle */ LWSMTFL_REPORT_HIST = (1 << 6), /**< our type is histogram (otherwise, sum / mean aggregation) */ }; /* * lws_metrics_tag allows your object to accumulate OpenMetrics-style * descriptive tags before accounting for it with a metrics object at the end. * * Tags should represent low entropy information that is likely to repeat * identically, so, eg, http method name, not eg, latency in us which is * unlikely to be seen the same twice. * * Tags are just a list of name=value pairs, used for qualifying the final * metrics entry with decorations in additional dimensions. For example, * rather than keep individual metrics on methods, scheme, mountpoint, result * code, you can keep metrics on http transactions only, and qualify the * transaction metrics entries with tags that can be queried on the metrics * backend to get the finer-grained information. * * http_srv{code="404",mount="/",method="GET",scheme="http"} 3 * * For OpenMetrics the tags are converted to a { list } and appended to the base * metrics name before using with actual metrics objects, the same set of tags * on different transactions resolve to the same qualification string. */ typedef struct lws_metrics_tag { lws_dll2_t list; const char *name; /* tag, intended to be in .rodata, not copied */ /* overallocated value */ } lws_metrics_tag_t; LWS_EXTERN LWS_VISIBLE int lws_metrics_tag_add(lws_dll2_owner_t *owner, const char *name, const char *val); #if defined(LWS_WITH_SYS_METRICS) /* * wsi-specific version that also appends the tag value to the lifecycle tag * used for logging the wsi identity */ LWS_EXTERN LWS_VISIBLE int lws_metrics_tag_wsi_add(struct lws *wsi, const char *name, const char *val); #else #define lws_metrics_tag_wsi_add(_a, _b, _c) #endif #if defined(LWS_WITH_SECURE_STREAMS) /* * ss-specific version that also appends the tag value to the lifecycle tag * used for logging the ss identity */ #if defined(LWS_WITH_SYS_METRICS) LWS_EXTERN LWS_VISIBLE int lws_metrics_tag_ss_add(struct lws_ss_handle *ss, const char *name, const char *val); #else #define lws_metrics_tag_ss_add(_a, _b, _c) #endif #endif LWS_EXTERN LWS_VISIBLE void lws_metrics_tags_destroy(lws_dll2_owner_t *owner); LWS_EXTERN LWS_VISIBLE size_t lws_metrics_tags_serialize(lws_dll2_owner_t *owner, char *buf, size_t len); LWS_EXTERN LWS_VISIBLE const char * lws_metrics_tag_get(lws_dll2_owner_t *owner, const char *name); /* histogram bucket */ typedef struct lws_metric_bucket { struct lws_metric_bucket *next; uint64_t count; /* name + NUL is overallocated */ } lws_metric_bucket_t; /* get overallocated name of bucket from bucket pointer */ #define lws_metric_bucket_name_len(_b) (*((uint8_t *)&(_b)[1])) #define lws_metric_bucket_name(_b) (((const char *)&(_b)[1]) + 1) /* * These represent persistent local event measurements. They may aggregate * a large number of events inbetween external dumping of summaries of the * period covered, in two different ways * * 1) aggregation by sum or mean, to absorb multiple scalar readings * * - go / no-go ratio counting * - mean averaging for, eg, latencies * - min / max for averaged values * - period the stats covers * * 2) aggregation by histogram, to absorb a range of outcomes that may occur * multiple times * * - add named buckets to histogram * - bucket has a 64-bit count * - bumping a bucket just increments the count if already exists, else adds * a new one with count set to 1 * * The same type with a union covers both cases. * * The lws_system ops api that hooks lws_metrics up to a metrics backend is * given a pointer to these according to the related policy, eg, hourly, or * every event passed straight through. */ typedef struct lws_metric_pub { const char *name; /**< eg, "n.cn.dns", "vh.myendpoint" */ void *backend_opaque; /**< ignored by lws, backend handler completely owns it */ lws_usec_t us_first; /**< us time metric started collecting, reset to us_dumped at dump */ lws_usec_t us_last; /**< 0, or us time last event, reset to 0 at last dump */ lws_usec_t us_dumped; /**< 0 if never, else us time of last dump to external api */ /* scope of data in .u is "since last dump" --> */ union { /* aggregation, by sum or mean */ struct { u_mt_t sum[2]; /**< go, no-go summed for mean or plan sum */ u_mt_t min; /**< smallest individual measurement */ u_mt_t max; /**< largest individual measurement */ uint32_t count[2]; /**< go, no-go count of measurements in sum */ } agg; /* histogram with dynamic named buckets */ struct { lws_metric_bucket_t *head; /**< first bucket in our bucket list */ uint64_t total_count; /**< total count in all of our buckets */ uint32_t list_size; /**< number of buckets in our bucket list */ } hist; } u; uint8_t flags; } lws_metric_pub_t; LWS_EXTERN LWS_VISIBLE void lws_metrics_hist_bump_priv_tagged(lws_metric_pub_t *mt, lws_dll2_owner_t *tow, lws_dll2_owner_t *tow2); /* * Calipers are a helper struct for implementing "hanging latency" detection, * where setting the start time and finding the end time may happen in more than * one place. * * There are convenience wrappers to eliminate caliper definitions and code * cleanly if WITH_SYS_METRICS is disabled for the build. */ struct lws_metric; typedef struct lws_metric_caliper { struct lws_dll2_owner mtags_owner; /**< collect tags here during * caliper lifetime */ struct lws_metric *mt; /**< NULL == inactive */ lws_usec_t us_start; } lws_metric_caliper_t; #if defined(LWS_WITH_SYS_METRICS) #define lws_metrics_caliper_compose(_name) \ lws_metric_caliper_t _name; #define lws_metrics_caliper_bind(_name, _mt) \ { if (_name.mt) { \ lwsl_err("caliper: overwrite %s\n", \ lws_metrics_priv_to_pub(_name.mt)->name); \ assert(0); } \ _name.mt = _mt; _name.us_start = lws_now_usecs(); } #define lws_metrics_caliper_declare(_name, _mt) \ lws_metric_caliper_t _name = { .mt = _mt, .us_start = lws_now_usecs() } #define lws_metrics_caliper_report(_name, _go_nogo) \ { if (_name.us_start) { lws_metric_event(_name.mt, _go_nogo, \ (u_mt_t)(lws_now_usecs() - \ _name.us_start)); \ } lws_metrics_caliper_done(_name); } #define lws_metrics_caliper_report_hist(_name, pwsi) if (_name.mt) { \ lws_metrics_hist_bump_priv_tagged(lws_metrics_priv_to_pub(_name.mt), \ &_name.mtags_owner, \ pwsi ? &((pwsi)->cal_conn.mtags_owner) : NULL); \ lws_metrics_caliper_done(_name); } #define lws_metrics_caliper_cancel(_name) { lws_metrics_caliper_done(_name); } #define lws_metrics_hist_bump(_mt, _name) \ lws_metrics_hist_bump_(_mt, _name) #define lws_metrics_hist_bump_priv(_mt, _name) \ lws_metrics_hist_bump_(lws_metrics_priv_to_pub(_mt), _name) #define lws_metrics_caliper_done(_name) { \ _name.us_start = 0; _name.mt = NULL; \ lws_metrics_tags_destroy(&_name.mtags_owner); } #else #define lws_metrics_caliper_compose(_name) #define lws_metrics_caliper_bind(_name, _mt) #define lws_metrics_caliper_declare(_name, _mp) #define lws_metrics_caliper_report(_name, _go_nogo) #define lws_metrics_caliper_report_hist(_name, pwsiconn) #define lws_metrics_caliper_cancel(_name) #define lws_metrics_hist_bump(_mt, _name) #define lws_metrics_hist_bump_priv(_mt, _name) #define lws_metrics_caliper_done(_name) #endif /** * lws_metrics_format() - helper to format a metrics object for logging * * \param pub: public part of metrics object * \param buf: output buffer to place string in * \param len: available length of \p buf * * Helper for describing the state of a metrics object as a human-readable * string, accounting for how its flags indicate what it contains. This is not * how you would report metrics, but during development it can be useful to * log them inbetween possibily long report intervals. * * It uses the metric's flags to adapt the format shown appropriately, eg, * as a histogram if LWSMTFL_REPORT_HIST etc */ LWS_EXTERN LWS_VISIBLE int lws_metrics_format(lws_metric_pub_t *pub, lws_metric_bucket_t **sub, char *buf, size_t len); /** * lws_metrics_hist_bump() - add or increment histogram bucket * * \param pub: public part of metrics object * \param name: bucket name to increment * * Either increment the count of an existing bucket of the right name in the * metrics object, or add a new bucket of the given name and set its count to 1. * * The metrics object must have been created with flag LWSMTFL_REPORT_HIST * * Normally, you will actually use the preprocessor wrapper * lws_metrics_hist_bump() defined above, since this automatically takes care of * removing itself from the build if WITH_SYS_METRICS is not defined, without * needing any preprocessor conditionals. */ LWS_EXTERN LWS_VISIBLE int lws_metrics_hist_bump_(lws_metric_pub_t *pub, const char *name); LWS_VISIBLE LWS_EXTERN int lws_metrics_foreach(struct lws_context *ctx, void *user, int (*cb)(lws_metric_pub_t *pub, void *user)); LWS_VISIBLE LWS_EXTERN int lws_metrics_hist_bump_describe_wsi(struct lws *wsi, lws_metric_pub_t *pub, const char *name); enum { LMT_NORMAL = 0, /* related to successful events */ LMT_OUTLIER, /* related to successful events outside of bounds */ LMT_FAIL, /* related to failed events */ LMT_COUNT, }; typedef enum lws_metric_rpt { LMR_PERIODIC = 0, /* we are reporting on a schedule */ LMR_OUTLIER, /* we are reporting the last outlier */ } lws_metric_rpt_kind_t; #define METRES_GO 0 #define METRES_NOGO 1 libwebsockets-4.3.5/include/libwebsockets/lws-misc.h000066400000000000000000001115561476025525100225750ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #if defined(LWS_WITH_SPAWN) #if defined(WIN32) || defined(_WIN32) #else #include #include #endif #endif #if defined(__OpenBSD__) #include #endif /** \defgroup misc Miscellaneous APIs * ##Miscellaneous APIs * * Various APIs outside of other categories */ ///@{ struct lws_buflist; /** * lws_buflist_append_segment(): add buffer to buflist at head * * \param head: list head * \param buf: buffer to stash * \param len: length of buffer to stash * * Returns -1 on OOM, 1 if this was the first segment on the list, and 0 if * it was a subsequent segment. */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_buflist_append_segment(struct lws_buflist **head, const uint8_t *buf, size_t len); /** * lws_buflist_next_segment_len(): number of bytes left in current segment * * \param head: list head * \param buf: if non-NULL, *buf is written with the address of the start of * the remaining data in the segment * * Returns the number of bytes left in the current segment. 0 indicates * that the buflist is empty (there are no segments on the buflist). */ LWS_VISIBLE LWS_EXTERN size_t lws_buflist_next_segment_len(struct lws_buflist **head, uint8_t **buf); /** * lws_buflist_use_segment(): remove len bytes from the current segment * * \param head: list head * \param len: number of bytes to mark as used * * If len is less than the remaining length of the current segment, the position * in the current segment is simply advanced and it returns. * * If len uses up the remaining length of the current segment, then the segment * is deleted and the list head moves to the next segment if any. * * Returns the number of bytes left in the current segment. 0 indicates * that the buflist is empty (there are no segments on the buflist). */ LWS_VISIBLE LWS_EXTERN size_t lws_buflist_use_segment(struct lws_buflist **head, size_t len); /** * lws_buflist_total_len(): Get the total size of the buflist * * \param head: list head * * Returns the total number of bytes held on all segments of the buflist */ LWS_VISIBLE LWS_EXTERN size_t lws_buflist_total_len(struct lws_buflist **head); /** * lws_buflist_linear_copy(): copy everything out as one without consuming * * \param head: list head * \param ofs: start offset into buflist in bytes * \param buf: buffer to copy linearly into * \param len: length of buffer available * * Returns -1 if len is too small, or bytes copied. Happy to do partial * copies, returns 0 when there are no more bytes to copy. */ LWS_VISIBLE LWS_EXTERN int lws_buflist_linear_copy(struct lws_buflist **head, size_t ofs, uint8_t *buf, size_t len); /** * lws_buflist_linear_use(): copy and consume from buflist head * * \param head: list head * \param buf: buffer to copy linearly into * \param len: length of buffer available * * Copies a possibly fragmented buflist from the head into the linear output * buffer \p buf for up to length \p len, and consumes the buflist content that * was copied out. * * Since it was consumed, calling again will resume copying out and consuming * from as far as it got the first time. * * Returns the number of bytes written into \p buf. */ LWS_VISIBLE LWS_EXTERN int lws_buflist_linear_use(struct lws_buflist **head, uint8_t *buf, size_t len); /** * lws_buflist_fragment_use(): copy and consume <= 1 frag from buflist head * * \param head: list head * \param buf: buffer to copy linearly into * \param len: length of buffer available * \param frag_first: pointer to char written on exit to if this is start of frag * \param frag_fin: pointer to char written on exit to if this is end of frag * * Copies all or part of the fragment at the start of a buflist from the head * into the output buffer \p buf for up to length \p len, and consumes the * buflist content that was copied out. * * Since it was consumed, calling again will resume copying out and consuming * from as far as it got the first time. * * Returns the number of bytes written into \p buf. */ LWS_VISIBLE LWS_EXTERN int lws_buflist_fragment_use(struct lws_buflist **head, uint8_t *buf, size_t len, char *frag_first, char *frag_fin); /** * lws_buflist_destroy_all_segments(): free all segments on the list * * \param head: list head * * This frees everything on the list unconditionally. *head is always * NULL after this. */ LWS_VISIBLE LWS_EXTERN void lws_buflist_destroy_all_segments(struct lws_buflist **head); /** * lws_buflist_describe(): debug helper logging buflist status * * \param head: list head * \param id: pointer shown in debug list * \param reason: reason string show in debug list * * Iterates through the buflist segments showing position and size. * This only exists when lws was built in debug mode */ LWS_VISIBLE LWS_EXTERN void lws_buflist_describe(struct lws_buflist **head, void *id, const char *reason); /** * lws_ptr_diff(): helper to report distance between pointers as an int * * \param head: the pointer with the larger address * \param tail: the pointer with the smaller address * * This helper gives you an int representing the number of bytes further * forward the first pointer is compared to the second pointer. */ #define lws_ptr_diff(head, tail) \ ((int)((char *)(head) - (char *)(tail))) #define lws_ptr_diff_size_t(head, tail) \ ((size_t)(ssize_t)((char *)(head) - (char *)(tail))) /** * lws_snprintf(): snprintf that truncates the returned length too * * \param str: destination buffer * \param size: bytes left in destination buffer * \param format: format string * \param ...: args for format * * This lets you correctly truncate buffers by concatenating lengths, if you * reach the limit the reported length doesn't exceed the limit. */ LWS_VISIBLE LWS_EXTERN int lws_snprintf(char *str, size_t size, const char *format, ...) LWS_FORMAT(3); /** * lws_strncpy(): strncpy that guarantees NUL on truncated copy * * \param dest: destination buffer * \param src: source buffer * \param size: bytes left in destination buffer * * This lets you correctly truncate buffers by concatenating lengths, if you * reach the limit the reported length doesn't exceed the limit. */ LWS_VISIBLE LWS_EXTERN char * lws_strncpy(char *dest, const char *src, size_t size); /* * Variation where we want to use the smaller of two lengths, useful when the * source string is not NUL terminated */ #define lws_strnncpy(dest, src, size1, destsize) \ lws_strncpy(dest, src, (size_t)(size1 + 1) < (size_t)(destsize) ? \ (size_t)(size1 + 1) : (size_t)(destsize)) /** * lws_nstrstr(): like strstr for length-based strings without terminating NUL * * \param buf: the string to search * \param len: the length of the string to search * \param name: the substring to search for * \param nl: the length of name * * Returns NULL if \p name is not present in \p buf. Otherwise returns the * address of the first instance of \p name in \p buf. * * Neither buf nor name need to be NUL-terminated. */ LWS_VISIBLE LWS_EXTERN const char * lws_nstrstr(const char *buf, size_t len, const char *name, size_t nl); /** * lws_json_simple_find(): dumb JSON string parser * * \param buf: the JSON to search * \param len: the length of the JSON to search * \param name: the name field to search the JSON for, eg, "\"myname\":" * \param alen: set to the length of the argument part if non-NULL return * * Either returns NULL if \p name is not present in buf, or returns a pointer * to the argument body of the first instance of \p name, and sets *alen to the * length of the argument body. * * This can cheaply handle fishing out, eg, myarg from {"myname": "myarg"} by * searching for "\"myname\":". It will return a pointer to myarg and set *alen * to 5. It equally handles args like "myname": true, or "myname":false, and * null or numbers are all returned as delimited strings. * * Anything more complicated like the value is a subobject or array, you should * parse it using a full parser like lejp. This is suitable is the JSON is * and will remain short and simple, and contains well-known names amongst other * extensible JSON members. */ LWS_VISIBLE LWS_EXTERN const char * lws_json_simple_find(const char *buf, size_t len, const char *name, size_t *alen); /** * lws_json_simple_strcmp(): dumb JSON string comparison * * \param buf: the JSON to search * \param len: the length of the JSON to search * \param name: the name field to search the JSON for, eg, "\"myname\":" * \param comp: return a strcmp of this and the discovered argument * * Helper that combines lws_json_simple_find() with strcmp() if it was found. * If the \p name was not found, returns -1. Otherwise returns a strcmp() * between what was found and \p comp, ie, return 0 if they match or something * else if they don't. * * If the JSON is relatively simple and you want to target constrained * devices, this can be a good choice. If the JSON may be complex, you * should use a full JSON parser. */ LWS_VISIBLE LWS_EXTERN int lws_json_simple_strcmp(const char *buf, size_t len, const char *name, const char *comp); /** * lws_hex_to_byte_array(): convert hex string like 0123456789ab into byte data * * \param h: incoming NUL-terminated hex string * \param dest: array to fill with binary decodes of hex pairs from h * \param max: maximum number of bytes dest can hold, must be at least half * the size of strlen(h) * * This converts hex strings into an array of 8-bit representations, ie the * input "abcd" produces two bytes of value 0xab and 0xcd. * * Returns number of bytes produced into \p dest, or -1 on error. * * Errors include non-hex chars and an odd count of hex chars in the input * string. */ LWS_VISIBLE LWS_EXTERN int lws_hex_to_byte_array(const char *h, uint8_t *dest, int max); /** * lws_hex_from_byte_array(): render byte array as hex char string * * \param src: incoming binary source array * \param slen: length of src in bytes * \param dest: array to fill with hex chars representing src * \param len: max extent of dest * * This converts binary data of length slen at src, into a hex string at dest * of maximum length len. Even if truncated, the result will be NUL-terminated. */ LWS_VISIBLE LWS_EXTERN void lws_hex_from_byte_array(const uint8_t *src, size_t slen, char *dest, size_t len); /** * lws_hex_random(): generate len - 1 or - 2 characters of random ascii hex * * \param context: the lws_context used to get the random * \param dest: destination for hex ascii chars * \param len: the number of bytes the buffer dest points to can hold * * This creates random ascii-hex strings up to a given length, with a * terminating NUL. * * There will not be any characters produced that are not 0-9, a-f, so it's * safe to go straight into, eg, JSON. */ LWS_VISIBLE LWS_EXTERN int lws_hex_random(struct lws_context *context, char *dest, size_t len); /* * lws_timingsafe_bcmp(): constant time memcmp * * \param a: first buffer * \param b: second buffer * \param len: count of bytes to compare * * Return 0 if the two buffers are the same, else nonzero. * * Always compares all of the buffer before returning, so it can't be used as * a timing oracle. */ LWS_VISIBLE LWS_EXTERN int lws_timingsafe_bcmp(const void *a, const void *b, uint32_t len); /** * lws_get_random(): fill a buffer with platform random data * * \param context: the lws context * \param buf: buffer to fill * \param len: how much to fill * * Fills buf with len bytes of random. Returns the number of bytes set, if * not equal to len, then getting the random failed. */ LWS_VISIBLE LWS_EXTERN size_t lws_get_random(struct lws_context *context, void *buf, size_t len); /** * lws_daemonize(): make current process run in the background * * \param _lock_path: the filepath to write the lock file * * Spawn lws as a background process, taking care of various things */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_daemonize(const char *_lock_path); /** * lws_get_library_version(): return string describing the version of lws * * On unix, also includes the git describe */ LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT lws_get_library_version(void); /** * lws_wsi_user() - get the user data associated with the connection * \param wsi: lws connection * * Not normally needed since it's passed into the callback */ LWS_VISIBLE LWS_EXTERN void * lws_wsi_user(struct lws *wsi); /** * lws_wsi_tsi() - get the service thread index the wsi is bound to * \param wsi: lws connection * * Only useful is LWS_MAX_SMP > 1 */ LWS_VISIBLE LWS_EXTERN int lws_wsi_tsi(struct lws *wsi); /** * lws_set_wsi_user() - set the user data associated with the client connection * \param wsi: lws connection * \param user: user data * * By default lws allocates this and it's not legal to externally set it * yourself. However client connections may have it set externally when the * connection is created... if so, this api can be used to modify it at * runtime additionally. */ LWS_VISIBLE LWS_EXTERN void lws_set_wsi_user(struct lws *wsi, void *user); /** * lws_parse_uri: cut up prot:/ads:port/path into pieces * Notice it does so by dropping '\0' into input string * and the leading / on the path is consequently lost * * \param p: incoming uri string.. will get written to * \param prot: result pointer for protocol part (https://) * \param ads: result pointer for address part * \param port: result pointer for port part * \param path: result pointer for path part * * You may also refer to unix socket addresses, using a '+' at the start of * the address. In this case, the address should end with ':', which is * treated as the separator between the address and path (the normal separator * '/' is a valid part of the socket path). Eg, * * http://+/var/run/mysocket:/my/path * * If the first character after the + is '@', it's interpreted by lws client * processing as meaning to use linux abstract namespace sockets, the @ is * replaced with a '\0' before use. */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_parse_uri(char *p, const char **prot, const char **ads, int *port, const char **path); /** * lws_cmdline_option(): simple commandline parser * * \param argc: count of argument strings * \param argv: argument strings * \param val: string to find * * Returns NULL if the string \p val is not found in the arguments. * * If it is found, then it returns a pointer to the next character after \p val. * So if \p val is "-d", then for the commandlines "myapp -d15" and * "myapp -d 15", in both cases the return will point to the "15". * * In the case there is no argument, like "myapp -d", the return will * either point to the '\\0' at the end of -d, or to the start of the * next argument, ie, will be non-NULL. */ LWS_VISIBLE LWS_EXTERN const char * lws_cmdline_option(int argc, const char **argv, const char *val); /** * lws_cmdline_option_handle_builtin(): apply standard cmdline options * * \param argc: count of argument strings * \param argv: argument strings * \param info: context creation info * * Applies standard options to the context creation info to save them having * to be (unevenly) copied into the minimal examples. * * Applies default log levels that can be overriden by -d */ LWS_VISIBLE LWS_EXTERN void lws_cmdline_option_handle_builtin(int argc, const char **argv, struct lws_context_creation_info *info); /** * lws_now_secs(): return seconds since 1970-1-1 */ LWS_VISIBLE LWS_EXTERN unsigned long lws_now_secs(void); /** * lws_now_usecs(): return useconds since 1970-1-1 */ LWS_VISIBLE LWS_EXTERN lws_usec_t lws_now_usecs(void); /** * lws_get_context - Allow getting lws_context from a Websocket connection * instance * * With this function, users can access context in the callback function. * Otherwise users may have to declare context as a global variable. * * \param wsi: Websocket connection instance */ LWS_VISIBLE LWS_EXTERN struct lws_context * LWS_WARN_UNUSED_RESULT lws_get_context(const struct lws *wsi); /** * lws_get_vhost_listen_port - Find out the port number a vhost is listening on * * In the case you passed 0 for the port number at context creation time, you * can discover the port number that was actually chosen for the vhost using * this api. * * \param vhost: Vhost to get listen port from */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_get_vhost_listen_port(struct lws_vhost *vhost); /** * lws_get_count_threads(): how many service threads the context uses * * \param context: the lws context * * By default this is always 1, if you asked for more than lws can handle it * will clip the number of threads. So you can use this to find out how many * threads are actually in use. */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_get_count_threads(struct lws_context *context); /** * lws_get_parent() - get parent wsi or NULL * \param wsi: lws connection * * Specialized wsi like cgi stdin/out/err are associated to a parent wsi, * this allows you to get their parent. */ LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT lws_get_parent(const struct lws *wsi); /** * lws_get_child() - get child wsi or NULL * \param wsi: lws connection * * Allows you to find a related wsi from the parent wsi. */ LWS_VISIBLE LWS_EXTERN struct lws * LWS_WARN_UNUSED_RESULT lws_get_child(const struct lws *wsi); /** * lws_get_effective_uid_gid() - find out eventual uid and gid while still root * * \param context: lws context * \param uid: pointer to uid result * \param gid: pointer to gid result * * This helper allows you to find out what the uid and gid for the process will * be set to after the privileges are dropped, beforehand. So while still root, * eg in LWS_CALLBACK_PROTOCOL_INIT, you can arrange things like cache dir * and subdir creation / permissions down /var/cache dynamically. */ LWS_VISIBLE LWS_EXTERN void lws_get_effective_uid_gid(struct lws_context *context, uid_t *uid, gid_t *gid); /** * lws_get_udp() - get wsi's udp struct * * \param wsi: lws connection * * Returns NULL or pointer to the wsi's UDP-specific information */ LWS_VISIBLE LWS_EXTERN const struct lws_udp * LWS_WARN_UNUSED_RESULT lws_get_udp(const struct lws *wsi); LWS_VISIBLE LWS_EXTERN void * lws_get_opaque_parent_data(const struct lws *wsi); LWS_VISIBLE LWS_EXTERN void lws_set_opaque_parent_data(struct lws *wsi, void *data); LWS_VISIBLE LWS_EXTERN void * lws_get_opaque_user_data(const struct lws *wsi); LWS_VISIBLE LWS_EXTERN void lws_set_opaque_user_data(struct lws *wsi, void *data); LWS_VISIBLE LWS_EXTERN int lws_get_child_pending_on_writable(const struct lws *wsi); LWS_VISIBLE LWS_EXTERN void lws_clear_child_pending_on_writable(struct lws *wsi); LWS_VISIBLE LWS_EXTERN int lws_get_close_length(struct lws *wsi); LWS_VISIBLE LWS_EXTERN unsigned char * lws_get_close_payload(struct lws *wsi); /** * lws_get_network_wsi() - Returns wsi that has the tcp connection for this wsi * * \param wsi: wsi you have * * Returns wsi that has the tcp connection (which may be the incoming wsi) * * HTTP/1 connections will always return the incoming wsi * HTTP/2 connections may return a different wsi that has the tcp connection */ LWS_VISIBLE LWS_EXTERN struct lws *lws_get_network_wsi(struct lws *wsi); /** * lws_set_allocator() - custom allocator support * * \param realloc * * Allows you to replace the allocator (and deallocator) used by lws */ LWS_VISIBLE LWS_EXTERN void lws_set_allocator(void *(*realloc)(void *ptr, size_t size, const char *reason)); enum { /* * Flags for enable and disable rxflow with reason bitmap and with * backwards-compatible single bool */ LWS_RXFLOW_REASON_USER_BOOL = (1 << 0), LWS_RXFLOW_REASON_HTTP_RXBUFFER = (1 << 6), LWS_RXFLOW_REASON_H2_PPS_PENDING = (1 << 7), LWS_RXFLOW_REASON_APPLIES = (1 << 14), LWS_RXFLOW_REASON_APPLIES_ENABLE_BIT = (1 << 13), LWS_RXFLOW_REASON_APPLIES_ENABLE = LWS_RXFLOW_REASON_APPLIES | LWS_RXFLOW_REASON_APPLIES_ENABLE_BIT, LWS_RXFLOW_REASON_APPLIES_DISABLE = LWS_RXFLOW_REASON_APPLIES, LWS_RXFLOW_REASON_FLAG_PROCESS_NOW = (1 << 12), }; /** * lws_rx_flow_control() - Enable and disable socket servicing for * received packets. * * If the output side of a server process becomes choked, this allows flow * control for the input side. * * \param wsi: Websocket connection instance to get callback for * \param enable: 0 = disable read servicing for this connection, 1 = enable * * If you need more than one additive reason for rxflow control, you can give * iLWS_RXFLOW_REASON_APPLIES_ENABLE or _DISABLE together with one or more of * b5..b0 set to idicate which bits to enable or disable. If any bits are * enabled, rx on the connection is suppressed. * * LWS_RXFLOW_REASON_FLAG_PROCESS_NOW flag may also be given to force any change * in rxflowbstatus to benapplied immediately, this should be used when you are * changing a wsi flow control state from outside a callback on that wsi. */ LWS_VISIBLE LWS_EXTERN int lws_rx_flow_control(struct lws *wsi, int enable); /** * lws_rx_flow_allow_all_protocol() - Allow all connections with this protocol to receive * * When the user server code realizes it can accept more input, it can * call this to have the RX flow restriction removed from all connections using * the given protocol. * \param context: lws_context * \param protocol: all connections using this protocol will be allowed to receive */ LWS_VISIBLE LWS_EXTERN void lws_rx_flow_allow_all_protocol(const struct lws_context *context, const struct lws_protocols *protocol); /** * lws_remaining_packet_payload() - Bytes to come before "overall" * rx fragment is complete * \param wsi: Websocket instance (available from user callback) * * This tracks how many bytes are left in the current ws fragment, according * to the ws length given in the fragment header. * * If the message was in a single fragment, and there is no compression, this * is the same as "how much data is left to read for this message". * * However, if the message is being sent in multiple fragments, this will * reflect the unread amount of the current **fragment**, not the message. With * ws, it is legal to not know the length of the message before it completes. * * Additionally if the message is sent via the negotiated permessage-deflate * extension, this number only tells the amount of **compressed** data left to * be read, since that is the only information available at the ws layer. */ LWS_VISIBLE LWS_EXTERN size_t lws_remaining_packet_payload(struct lws *wsi); #if defined(LWS_WITH_DIR) typedef enum { LDOT_UNKNOWN, LDOT_FILE, LDOT_DIR, LDOT_LINK, LDOT_FIFO, LDOTT_SOCKET, LDOT_CHAR, LDOT_BLOCK } lws_dir_obj_type_t; struct lws_dir_entry { const char *name; lws_dir_obj_type_t type; }; typedef int lws_dir_callback_function(const char *dirpath, void *user, struct lws_dir_entry *lde); /** * lws_dir() - get a callback for everything in a directory * * \param dirpath: the directory to scan * \param user: pointer to give to callback * \param cb: callback to receive information on each file or dir * * Calls \p cb (with \p user) for every object in dirpath. * * This wraps whether it's using POSIX apis, or libuv (as needed for windows, * since it refuses to support POSIX apis for this). */ LWS_VISIBLE LWS_EXTERN int lws_dir(const char *dirpath, void *user, lws_dir_callback_function cb); /** * lws_dir_rm_rf_cb() - callback for lws_dir that performs recursive rm -rf * * \param dirpath: directory we are at in lws_dir * \param user: ignored * \param lde: lws_dir info on the file or directory we are at * * This is a readymade rm -rf callback for use with lws_dir. It recursively * removes everything below the starting dir and then the starting dir itself. * Works on linux, OSX and Windows at least. */ LWS_VISIBLE LWS_EXTERN int lws_dir_rm_rf_cb(const char *dirpath, void *user, struct lws_dir_entry *lde); /* * We pass every file in the base dir through a filter, and call back on the * ones that match. Directories are ignored. * * The original path filter string may look like, eg, "sai-*.deb" or "*.txt" */ typedef int (*lws_dir_glob_cb_t)(void *data, const char *path); typedef struct lws_dir_glob { const char *filter; lws_dir_glob_cb_t cb; void *user; } lws_dir_glob_t; /** * lws_dir_glob_cb() - callback for lws_dir that performs filename globbing * * \param dirpath: directory we are at in lws_dir * \param user: pointer to your prepared lws_dir_glob_cb_t * \param lde: lws_dir info on the file or directory we are at * * \p user is prepared with an `lws_dir_glob_t` containing a callback for paths * that pass the filtering, a user pointer to pass to that callback, and a * glob string like "*.txt". It may not contain directories, the lws_dir musr * be started at the correct dir. * * Only the base path passed to lws_dir is scanned, it does not look in subdirs. */ LWS_VISIBLE LWS_EXTERN int lws_dir_glob_cb(const char *dirpath, void *user, struct lws_dir_entry *lde); #endif /** * lws_get_allocated_heap() - if the platform supports it, returns amount of * heap allocated by lws itself * * On glibc currently, this reports the total amount of current logical heap * allocation, found by tracking the amount allocated by lws_malloc() and * friends and accounting for freed allocations via lws_free(). * * This is useful for confirming where processwide heap allocations actually * come from... this number represents all lws internal allocations, for * fd tables, wsi allocations, ah, etc combined. It doesn't include allocations * from user code, since lws_malloc() etc are not exported from the library. * * On other platforms, it always returns 0. */ size_t lws_get_allocated_heap(void); /** * lws_get_tsi() - Get thread service index wsi belong to * \param wsi: websocket connection to check * * Returns more than zero (or zero if only one service thread as is the default). */ LWS_VISIBLE LWS_EXTERN int lws_get_tsi(struct lws *wsi); /** * lws_is_ssl() - Find out if connection is using SSL * \param wsi: websocket connection to check * * Returns nonzero if the wsi is inside a tls tunnel, else zero. */ LWS_VISIBLE LWS_EXTERN int lws_is_ssl(struct lws *wsi); /** * lws_is_cgi() - find out if this wsi is running a cgi process * * \param wsi: lws connection */ LWS_VISIBLE LWS_EXTERN int lws_is_cgi(struct lws *wsi); /** * lws_tls_jit_trust_blob_queury_skid() - walk jit trust blob for skid * * \param _blob: the start of the blob in memory * \param blen: the length of the blob in memory * \param skid: the SKID we are looking for * \param skid_len: the length of the SKID we are looking for * \param prpder: result pointer to receive a pointer to the matching DER * \param prder_len: result pointer to receive matching DER length * * Helper to scan a JIT Trust blob in memory for a trusted CA cert matching * a given SKID. Returns 0 if found and *prpder and *prder_len are set, else * nonzero. */ LWS_VISIBLE LWS_EXTERN int lws_tls_jit_trust_blob_queury_skid(const void *_blob, size_t blen, const uint8_t *skid, size_t skid_len, const uint8_t **prpder, size_t *prder_len); /** * lws_open() - platform-specific wrapper for open that prepares the fd * * \param __file: the filepath to open * \param __oflag: option flags * * This is a wrapper around platform open() that sets options on the fd * according to lws policy. Currently that is FD_CLOEXEC to stop the opened * fd being available to any child process forked by user code. */ LWS_VISIBLE LWS_EXTERN int lws_open(const char *__file, int __oflag, ...); struct lws_wifi_scan { /* generic wlan scan item */ struct lws_wifi_scan *next; char ssid[32]; int32_t rssi; /* divide by .count to get db */ uint8_t bssid[6]; uint8_t count; uint8_t channel; uint8_t authmode; }; #if defined(LWS_WITH_TLS) && !defined(LWS_WITH_MBEDTLS) /** * lws_get_ssl() - Return wsi's SSL context structure * \param wsi: websocket connection * * Returns pointer to the SSL library's context structure */ LWS_VISIBLE LWS_EXTERN SSL* lws_get_ssl(struct lws *wsi); #endif LWS_VISIBLE LWS_EXTERN void lws_explicit_bzero(void *p, size_t len); typedef struct lws_humanize_unit { const char *name; /* array ends with NULL name */ uint64_t factor; } lws_humanize_unit_t; LWS_VISIBLE extern const lws_humanize_unit_t humanize_schema_si[7]; LWS_VISIBLE extern const lws_humanize_unit_t humanize_schema_si_bytes[7]; LWS_VISIBLE extern const lws_humanize_unit_t humanize_schema_us[8]; /** * lws_humanize() - Convert possibly large number to human-readable uints * * \param buf: result string buffer * \param len: remaining length in \p buf * \param value: the uint64_t value to represent * \param schema: and array of scaling factors and units * * This produces a concise string representation of \p value, referencing the * schema \p schema of scaling factors and units to find the smallest way to * render it. * * Three schema are exported from lws for general use, humanize_schema_si, which * represents as, eg, " 22.130Gi" or " 128 "; humanize_schema_si_bytes * which is the same but shows, eg, " 22.130GiB", and humanize_schema_us, * which represents a count of us as a human-readable time like " 14.350min", * or " 1.500d". * * You can produce your own schema. */ LWS_VISIBLE LWS_EXTERN int lws_humanize(char *buf, size_t len, uint64_t value, const lws_humanize_unit_t *schema); LWS_VISIBLE LWS_EXTERN void lws_ser_wu16be(uint8_t *b, uint16_t u); LWS_VISIBLE LWS_EXTERN void lws_ser_wu32be(uint8_t *b, uint32_t u32); LWS_VISIBLE LWS_EXTERN void lws_ser_wu64be(uint8_t *b, uint64_t u64); LWS_VISIBLE LWS_EXTERN uint16_t lws_ser_ru16be(const uint8_t *b); LWS_VISIBLE LWS_EXTERN uint32_t lws_ser_ru32be(const uint8_t *b); LWS_VISIBLE LWS_EXTERN uint64_t lws_ser_ru64be(const uint8_t *b); LWS_VISIBLE LWS_EXTERN int lws_vbi_encode(uint64_t value, void *buf); LWS_VISIBLE LWS_EXTERN int lws_vbi_decode(const void *buf, uint64_t *value, size_t len); ///@} #if defined(LWS_WITH_SPAWN) /* opaque internal struct */ struct lws_spawn_piped; #if defined(WIN32) struct _lws_siginfo_t { int retcode; }; typedef struct _lws_siginfo_t siginfo_t; #endif typedef void (*lsp_cb_t)(void *opaque, lws_usec_t *accounting, siginfo_t *si, int we_killed_him); /** * lws_spawn_piped_info - details given to create a spawned pipe * * \p owner: lws_dll2_owner_t that lists all active spawns, or NULL * \p vh: vhost to bind stdwsi to... from opt_parent if given * \p opt_parent: optional parent wsi for stdwsi * \p exec_array: argv for process to spawn * \p env_array: environment for spawned process, NULL ends env list * \p protocol_name: NULL, or vhost protocol name to bind stdwsi to * \p chroot_path: NULL, or chroot patch for child process * \p wd: working directory to cd to after fork, NULL defaults to /tmp * \p plsp: NULL, or pointer to the outer lsp pointer so it can be set NULL when destroyed * \p opaque: pointer passed to the reap callback, if any * \p timeout: optional us-resolution timeout, or zero * \p reap_cb: callback when child process has been reaped and the lsp destroyed * \p tsi: tsi to bind stdwsi to... from opt_parent if given */ struct lws_spawn_piped_info { struct lws_dll2_owner *owner; struct lws_vhost *vh; struct lws *opt_parent; const char * const *exec_array; const char **env_array; const char *protocol_name; const char *chroot_path; const char *wd; struct lws_spawn_piped **plsp; void *opaque; lsp_cb_t reap_cb; lws_usec_t timeout_us; int max_log_lines; int tsi; const struct lws_role_ops *ops; /* NULL is raw file */ uint8_t disable_ctrlc; }; /** * lws_spawn_piped() - spawn a child process with stdxxx redirected * * \p lspi: info struct describing details of spawn to create * * This spawns a child process managed in the lsp object and with attributes * set in the arguments. The stdin/out/err streams are redirected to pipes * which are instantiated into wsi that become child wsi of \p parent if non- * NULL. .opaque_user_data on the stdwsi created is set to point to the * lsp object, so this can be recovered easily in the protocol handler. * * If \p owner is non-NULL, successful spawns join the given dll2 owner in the * original process. * * If \p timeout is non-zero, successful spawns register a sul with the us- * resolution timeout to callback \p timeout_cb, in the original process. * * Returns 0 if the spawn went OK or nonzero if it failed and was cleaned up. * The spawned process continues asynchronously and this will return after * starting it if all went well. */ LWS_VISIBLE LWS_EXTERN struct lws_spawn_piped * lws_spawn_piped(const struct lws_spawn_piped_info *lspi); /* * lws_spawn_piped_kill_child_process() - attempt to kill child process * * \p lsp: child object to kill * * Attempts to signal the child process in \p lsp to terminate. */ LWS_VISIBLE LWS_EXTERN int lws_spawn_piped_kill_child_process(struct lws_spawn_piped *lsp); /** * lws_spawn_stdwsi_closed() - inform the spawn one of its stdxxx pipes closed * * \p lsp: the spawn object * \p wsi: the wsi that is closing * * When you notice one of the spawn stdxxx pipes closed, inform the spawn * instance using this api. When it sees all three have closed, it will * automatically try to reap the child process. * * This is the mechanism whereby the spawn object can understand its child * has closed. */ LWS_VISIBLE LWS_EXTERN void lws_spawn_stdwsi_closed(struct lws_spawn_piped *lsp, struct lws *wsi); /** * lws_spawn_get_stdfd() - return std channel index for stdwsi * * \p wsi: the wsi * * If you know wsi is a stdwsi from a spawn, you can determine its original * channel index / fd before the pipes replaced the default fds. It will return * one of 0 (STDIN), 1 (STDOUT) or 2 (STDERR). You can handle all three in the * same protocol handler and then disambiguate them using this api. */ LWS_VISIBLE LWS_EXTERN int lws_spawn_get_stdfd(struct lws *wsi); #endif struct lws_fsmount { const char *layers_path; /* where layers live */ const char *overlay_path; /* where overlay instantiations live */ char mp[256]; /* mountpoint path */ char ovname[64]; /* unique name for mount instance */ char distro[64]; /* unique name for layer source */ #if defined(__linux__) const char *layers[4]; /* distro layers, like "base", "env" */ #endif }; /** * lws_fsmount_mount() - Mounts an overlayfs stack of layers * * \p fsm: struct lws_fsmount specifying the mount layout * * This api is able to assemble up to 4 layer directories on to a mountpoint * using overlayfs mount (Linux only). * * Set fsm.layers_path to the base dir where the layers themselves live, the * entries in fsm.layers[] specifies the relative path to the layer, comprising * fsm.layers_path/fsm.distro/fsm.layers[], with [0] being the deepest, earliest * layer and the rest being progressively on top of [0]; NULL indicates the * layer is unused. * * fsm.overlay_path is the base path of the overlayfs instantiations... empty * dirs must exist at * * fsm.overlay_path/overlays/fsm.ovname/work * fsm.overlay_path/overlays/fsm.ovname/session * * Set fsm.mp to the path of an already-existing empty dir that will be the * mountpoint, this can be whereever you like. * * Overlayfs merges the union of all the contributing layers at the mountpoint, * the mount is writeable but the layer themselves are immutable, all additions * and changes are stored in * * fsm.overlay_path/overlays/fsm.ovname/session * * Returns 0 if mounted OK, nonzero if errors. * * Retain fsm for use with unmounting. */ LWS_VISIBLE LWS_EXTERN int lws_fsmount_mount(struct lws_fsmount *fsm); /** * lws_fsmount_unmount() - Unmounts an overlayfs dir * * \p fsm: struct lws_fsmount specifying the mount layout * * Unmounts the mountpoint in fsm.mp. * * Delete fsm.overlay_path/overlays/fsm.ovname/session to permanently eradicate * all changes from the time the mountpoint was in use. * * Returns 0 if unmounted OK. */ LWS_VISIBLE LWS_EXTERN int lws_fsmount_unmount(struct lws_fsmount *fsm); libwebsockets-4.3.5/include/libwebsockets/lws-mqtt.h000066400000000000000000000335301476025525100226220ustar00rootroot00000000000000/* * libwebsockets - protocol - mqtt * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * included from libwebsockets.h */ #ifndef _LWS_MQTT_H #define _LWS_MQTT_H 1 struct _lws_mqtt_related; typedef struct _lws_mqtt_related lws_mqtt_related_t; struct lws_mqtt_str_st; typedef struct lws_mqtt_str_st lws_mqtt_str_t; #define MQTT_VER_3_1_1 4 #define LWS_MQTT_FINAL_PART 1 #define LWS_MQTT_MAX_AWSIOT_TOPICLEN 256 #define LWS_MQTT_MAX_TOPICLEN 65535 #define LWS_MQTT_MAX_CIDLEN 128 #define LWS_MQTT_RANDOM_CIDLEN 23 /* 3.1.3.1-5: Server MUST... between 1 and 23 chars... */ #define LWS_MQTT_SHADOW_MAX_THING_LEN 128 #define LWS_MQTT_SHADOW_MAX_SHADOW_LEN 64 #define LWS_MQTT_SHADOW_UPDATE_STR "/update" #define LWS_MQTT_SHADOW_DELETE_STR "/delete" #define LWS_MQTT_SHADOW_GET_STR "/get" #define LWS_MQTT_SHADOW_RESP_ACCEPTED_STR "/accepted" #define LWS_MQTT_SHADOW_RESP_REJECTED_STR "/rejected" #define LWS_MQTT_SHADOW_RESP_DELTA_STR "/delta" #define LWS_MQTT_SHADOW_RESP_DOCUMENT_STR "/documents" #define LWS_MQTT_SHADOW_UPDATE_ACCEPTED_STR LWS_MQTT_SHADOW_UPDATE_STR LWS_MQTT_SHADOW_RESP_ACCEPTED_STR #define LWS_MQTT_SHADOW_UPDATE_REJECTED_STR LWS_MQTT_SHADOW_UPDATE_STR LWS_MQTT_SHADOW_RESP_REJECTED_STR #define LWS_MQTT_SHADOW_UPDATE_DELTA_STR LWS_MQTT_SHADOW_UPDATE_STR LWS_MQTT_SHADOW_RESP_DELTA_STR #define LWS_MQTT_SHADOW_UPDATE_DOCUMENT_STR LWS_MQTT_SHADOW_UPDATE_STR LWS_MQTT_SHADOW_RESP_DOCUMENT_STR #define LWS_MQTT_SHADOW_DELETE_ACCEPTED_STR LWS_MQTT_SHADOW_DELETE_STR LWS_MQTT_SHADOW_RESP_ACCEPTED_STR #define LWS_MQTT_SHADOW_DELETE_REJECTED_STR LWS_MQTT_SHADOW_DELETE_STR LWS_MQTT_SHADOW_RESP_REJECTED_STR #define LWS_MQTT_SHADOW_GET_ACCEPTED_STR LWS_MQTT_SHADOW_GET_STR LWS_MQTT_SHADOW_RESP_ACCEPTED_STR #define LWS_MQTT_SHADOW_GET_REJECTED_STR LWS_MQTT_SHADOW_GET_STR LWS_MQTT_SHADOW_RESP_REJECTED_STR #define LWS_MQTT_SHADOW_PREFIX_FORMAT "$aws/things/%s" #define LWS_MQTT_SHADOW_NAMED_SHADOW_TOPIC_FORMAT LWS_MQTT_SHADOW_PREFIX_FORMAT "/shadow/name/%s%s" #define LWS_MQTT_SHADOW_UNNAMED_SHADOW_TOPIC_FORMAT LWS_MQTT_SHADOW_PREFIX_FORMAT "/shadow%s" #define LWS_MQTT_SHADOW_UNNAMED_TOPIC_MATCH "$aws/things/+/shadow/+" #define LWS_MQTT_SHADOW_NAMED_TOPIC_MATCH "$aws/things/+/shadow/name/+/+" typedef enum { QOS0, QOS1, QOS2, /* not supported */ RESERVED_QOS_LEVEL, FAILURE_QOS_LEVEL = 0x80 } lws_mqtt_qos_levels_t; typedef union { struct { uint8_t retain:1; uint8_t qos:2; uint8_t dup:1; uint8_t ctrl_pkt_type:4; } flags; uint8_t bits; } lws_mqtt_fixed_hdr_t; /* * MQTT connection parameters, passed into struct * lws_client_connect_info to establish a connection using * lws_client_connect_via_info(). */ typedef struct lws_mqtt_client_connect_param_s { const char *client_id; /* Client ID */ uint16_t keep_alive; /* MQTT keep alive interval in seconds */ uint8_t clean_start:1; /* MQTT clean session */ uint8_t client_id_nofree:1; /**< do not free the client id */ uint8_t username_nofree:1; /**< do not free the username */ uint8_t password_nofree:1; /**< do not free the password */ struct { const char *topic; const char *message; lws_mqtt_qos_levels_t qos; uint8_t retain; } will_param; /* MQTT LWT parameters */ struct { const char *topic; const char *message; lws_mqtt_qos_levels_t qos; uint8_t retain; } birth_param; /* MQTT Birth parameters */ const char *username; const char *password; uint8_t aws_iot; } lws_mqtt_client_connect_param_t; /* * MQTT publish parameters */ typedef struct lws_mqtt_publish_param_s { char *topic; /* Topic Name */ uint16_t topic_len; const void *payload; /* Publish Payload */ uint32_t payload_len; /* Size of the complete payload */ uint32_t payload_pos; /* where we are in payload */ lws_mqtt_qos_levels_t qos; /*--v-Following will be used by LWS-v--*/ uint16_t packet_id; /* Packet ID for QoS > 0 */ uint8_t dup:1; /* Retried PUBLISH, for QoS > 0 */ uint8_t retain:1; /* Retained message */ } lws_mqtt_publish_param_t; typedef struct topic_elem { const char *name; /* Topic Name */ lws_mqtt_qos_levels_t qos; /* Requested QoS */ /*--v-Following will be used by LWS-v--*/ uint8_t acked; } lws_mqtt_topic_elem_t; /* * MQTT publish parameters */ typedef struct lws_mqtt_subscribe_param_s { uint32_t num_topics; /* Number of topics */ lws_mqtt_topic_elem_t *topic; /* Array of topic elements */ /*--v-Following will be used by LWS-v--*/ uint16_t packet_id; } lws_mqtt_subscribe_param_t; typedef enum { LMQCP_RESERVED, LMQCP_CTOS_CONNECT, /* Connection request */ LMQCP_STOC_CONNACK, /* Connection acknowledgment */ LMQCP_PUBLISH, /* Publish Message */ LMQCP_PUBACK, /* QoS 1: Publish acknowledgment */ LMQCP_PUBREC, /* QoS 2.1: Publish received */ LMQCP_PUBREL, /* QoS 2.2: Publish release */ LMQCP_PUBCOMP, /* QoS 2.3: Publish complete */ LMQCP_CTOS_SUBSCRIBE, /* Subscribe request */ LMQCP_STOC_SUBACK, /* Subscribe acknowledgment */ LMQCP_CTOS_UNSUBSCRIBE, /* Unsubscribe request */ LMQCP_STOC_UNSUBACK, /* Unsubscribe acknowledgment */ LMQCP_CTOS_PINGREQ, /* PING request */ LMQCP_STOC_PINGRESP, /* PONG response */ LMQCP_DISCONNECT, /* Disconnect notification */ LMQCP_AUTH /* Authentication exchange */ } lws_mqtt_control_packet_t; /* flags from byte 8 of C_TO_S CONNECT */ typedef enum { LMQCFT_USERNAME_NOFREE = (1 << 10), LMQCFT_PASSWORD_NOFREE = (1 << 9), LMQCFT_CLIENT_ID_NOFREE = (1 << 8), /* only the low 8 are standardized and go out in the protocol */ LMQCFT_USERNAME = (1 << 7), LMQCFT_PASSWORD = (1 << 6), LMQCFT_WILL_RETAIN = (1 << 5), LMQCFT_WILL_QOS = (1 << 3), LMQCFT_WILL_FLAG = (1 << 2), LMQCFT_CLEAN_START = (1 << 1), LMQCFT_RESERVED = (1 << 0), LMQCFT_WILL_QOS_MASK = (3 << 3), } lws_mqtt_connect_flags_t; /* flags for S_TO_C CONNACK */ typedef enum { LMQCFT_SESSION_PRESENT = (1 << 0), } lws_mqtt_connack_flags_t; typedef enum { LMQCP_REASON_SUCCESS = 0x00, LMQCP_REASON_NORMAL_DISCONNECTION = 0x00, LMQCP_REASON_GRANTED_QOS0 = 0x00, LMQCP_REASON_GRANTED_QOS1 = 0x01, LMQCP_REASON_GRANTED_QOS2 = 0x02, LMQCP_REASON_DISCONNECT_WILL = 0x04, LMQCP_REASON_NO_MATCHING_SUBSCRIBER = 0x10, LMQCP_REASON_NO_SUBSCRIPTION_EXISTED = 0x11, LMQCP_REASON_CONTINUE_AUTHENTICATION = 0x18, LMQCP_REASON_RE_AUTHENTICATE = 0x19, LMQCP_REASON_UNSPECIFIED_ERROR = 0x80, LMQCP_REASON_MALFORMED_PACKET = 0x81, LMQCP_REASON_PROTOCOL_ERROR = 0x82, LMQCP_REASON_IMPLEMENTATION_SPECIFIC_ERROR = 0x83, /* Begin - Error codes for CONNACK */ LMQCP_REASON_UNSUPPORTED_PROTOCOL = 0x84, LMQCP_REASON_CLIENT_ID_INVALID = 0x85, LMQCP_REASON_BAD_CREDENTIALS = 0x86, LMQCP_REASON_NOT_AUTHORIZED = 0x87, /* End - Error codes for CONNACK */ LMQCP_REASON_SERVER_UNAVAILABLE = 0x88, LMQCP_REASON_SERVER_BUSY = 0x89, LMQCP_REASON_BANNED = 0x8a, LMQCP_REASON_SERVER_SHUTTING_DOWN = 0x8b, LMQCP_REASON_BAD_AUTHENTICATION_METHOD = 0x8c, LMQCP_REASON_KEEPALIVE_TIMEOUT = 0x8d, LMQCP_REASON_SESSION_TAKEN_OVER = 0x8e, LMQCP_REASON_TOPIC_FILTER_INVALID = 0x8f, LMQCP_REASON_TOPIC_NAME_INVALID = 0x90, LMQCP_REASON_PACKET_ID_IN_USE = 0x91, LMQCP_REASON_PACKET_ID_NOT_FOUND = 0x92, LMQCP_REASON_MAX_RX_EXCEEDED = 0x93, LMQCP_REASON_TOPIC_ALIAS_INVALID = 0x94, LMQCP_REASON_PACKET_TOO_LARGE = 0x95, LMQCP_REASON_RATELIMIT = 0x96, LMQCP_REASON_QUOTA_EXCEEDED = 0x97, LMQCP_REASON_ADMINISTRATIVE_ACTION = 0x98, LMQCP_REASON_PAYLOAD_FORMAT_INVALID = 0x99, LMQCP_REASON_RETAIN_NOT_SUPPORTED = 0x9a, LMQCP_REASON_QOS_NOT_SUPPORTED = 0x9b, LMQCP_REASON_USE_ANOTHER_SERVER = 0x9c, LMQCP_REASON_SERVER_MOVED = 0x9d, LMQCP_REASON_SHARED_SUBSCRIPTIONS_NOT_SUPPORTED = 0x9e, LMQCP_REASON_CONNECTION_RATE_EXCEEDED = 0x9f, LMQCP_REASON_MAXIMUM_CONNECT_TIME = 0xa0, LMQCP_REASON_SUBSCRIPTION_IDS_NOT_SUPPORTED = 0xa1, LMQCP_REASON_WILDCARD_SUBSCRIPTIONS_NOT_SUPPORTED = 0xa2, } lws_mqtt_reason_t; typedef enum { LMQPROP_INVALID, LMQPROP_PAYLOAD_FORMAT_INDICATOR = 0x01, LMQPROP_MESSAGE_EXPIRY_INTERVAL = 0x02, LMQPROP_CONTENT_TYPE = 0x03, LMQPROP_RESPONSE_TOPIC = 0x08, LMQPROP_CORRELATION_DATA = 0x09, LMQPROP_SUBSCRIPTION_IDENTIFIER = 0x0b, LMQPROP_SESSION_EXPIRY_INTERVAL = 0x11, LMQPROP_ASSIGNED_CLIENT_IDENTIFIER = 0x12, LMQPROP_SERVER_KEEP_ALIVE = 0x13, LMQPROP_AUTHENTICATION_METHOD = 0x15, LMQPROP_AUTHENTICATION_DATA = 0x16, LMQPROP_REQUEST_PROBLEM_INFORMATION = 0x17, LMQPROP_WILL_DELAY_INTERVAL = 0x18, LMQPROP_REQUEST_RESPONSE_INFORMATION = 0x19, LMQPROP_RESPONSE_INFORMATION = 0x1a, LMQPROP_SERVER_REFERENCE = 0x1c, LMQPROP_REASON_STRING = 0x1f, LMQPROP_RECEIVE_MAXIMUM = 0x21, LMQPROP_TOPIC_ALIAS_MAXIMUM = 0x22, LMQPROP_TOPIC_ALIAS = 0x23, LMQPROP_MAXIMUM_QOS = 0x24, LMQPROP_RETAIN_AVAILABLE = 0x25, LMQPROP_USER_PROPERTY = 0x26, LMQPROP_MAXIMUM_PACKET_SIZE = 0x27, LMQPROP_WILDCARD_SUBSCRIPTION_AVAIL = 0x28, LMQPROP_SUBSCRIPTION_IDENTIFIER_AVAIL = 0x29, LMQPROP_SHARED_SUBSCRIPTION_AVAIL = 0x2a } lws_mqtt_property; int lws_read_mqtt(struct lws *wsi, unsigned char *buf, lws_filepos_t len); /* returns 0 if bd1 and bd2 are "the same", that includes empty, else nonzero */ LWS_VISIBLE LWS_EXTERN int lws_mqtt_bindata_cmp(const lws_mqtt_str_t *bd1, const lws_mqtt_str_t *bd2); LWS_VISIBLE LWS_EXTERN void lws_mqtt_str_init(lws_mqtt_str_t *s, uint8_t *buf, uint16_t lim, char nf); LWS_VISIBLE LWS_EXTERN lws_mqtt_str_t * lws_mqtt_str_create(uint16_t lim); LWS_VISIBLE LWS_EXTERN lws_mqtt_str_t * lws_mqtt_str_create_init(uint8_t *buf, uint16_t len, uint16_t lim); LWS_VISIBLE LWS_EXTERN lws_mqtt_str_t * lws_mqtt_str_create_cstr_dup(const char *buf, uint16_t lim); LWS_VISIBLE LWS_EXTERN uint8_t * lws_mqtt_str_next(lws_mqtt_str_t *s, uint16_t *budget); LWS_VISIBLE LWS_EXTERN int lws_mqtt_str_advance(lws_mqtt_str_t *s, int n); LWS_VISIBLE LWS_EXTERN void lws_mqtt_str_free(lws_mqtt_str_t **s); /** * lws_mqtt_client_send_publish() - lws_write a publish packet * * \param wsi: the mqtt child wsi * \param pub: additional information on what we're publishing * \param buf: payload to send * \param len: length of data in buf * \param final: flag indicating this is the last part * * Issues part of, or the whole of, a PUBLISH frame. The first part of the * frame contains the header, and uses the .qos and .payload_len parts of \p pub * since MQTT requires the frame to specify the PUBLISH message length at the * start. The \p len paramter may be less than \p pub.payload_len, in which * case subsequent calls with more payload are needed to complete the frame. * * Although the connection is stuck waiting for the remainder, in that it can't * issue any other frames until the current one is completed, lws returns to the * event loop normally and can continue the calls with additional payload even * for huge frames as the data becomes available, consistent with timeout needs * and latency to start any new frame (even, eg, related to ping / pong). * * If you're sending large frames, the OS will typically not allow the data to * be sent all at once to kernel side. So you should ideally cut the payload * up into 1 or 2- mtu sized chunks and send that. * * Final should be set when you're calling with the last part of the payload. */ LWS_VISIBLE LWS_EXTERN int lws_mqtt_client_send_publish(struct lws *wsi, lws_mqtt_publish_param_t *pub, const void *buf, uint32_t len, int final); /** * lws_mqtt_client_send_subcribe() - lws_write a subscribe packet * * \param wsi: the mqtt child wsi * \param sub: which topic(s) we want to subscribe to * * For topics other child streams have not already subscribed to, send a packet * to the server asking to subscribe to them. If all topics listed are already * subscribed to be the shared network connection, just trigger the * LWS_CALLBACK_MQTT_SUBSCRIBED callback as if a SUBACK had come. * * \p sub doesn't need to exist after the return from this function. */ LWS_VISIBLE LWS_EXTERN int lws_mqtt_client_send_subcribe(struct lws *wsi, lws_mqtt_subscribe_param_t *sub); /** * lws_mqtt_client_send_unsubcribe() - lws_write a unsubscribe packet * * \param wsi: the mqtt child wsi * \param sub: which topic(s) we want to unsubscribe from * * For topics other child streams are not subscribed to, send a packet * to the server asking to unsubscribe from them. If all topics * listed are already subscribed by other child streams on the shared * network connection, just trigger the LWS_CALLBACK_MQTT_UNSUBSCRIBED * callback as if a UNSUBACK had come. * * \p unsub doesn't need to exist after the return from this function. */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_mqtt_client_send_unsubcribe(struct lws *wsi, const lws_mqtt_subscribe_param_t *unsub); #endif /* _LWS_MQTT_H */ libwebsockets-4.3.5/include/libwebsockets/lws-netdev.h000066400000000000000000000205351476025525100231230ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #define LWS_WIFI_MAX_SCAN_TRACK 16 #define LWS_ETH_ALEN 6 typedef uint8_t lws_wifi_ch_t; typedef int8_t lws_wifi_rssi_t; struct lws_netdev_instance; typedef enum { LWSNDTYP_UNKNOWN, LWSNDTYP_WIFI, LWSNDTYP_ETH, } lws_netdev_type_t; /* * Base class for netdev configuration */ typedef struct lws_netdev_config { void *plat_config; } lws_netdev_config_t; /* * Const Logical generic network interface ops */ typedef struct lws_netdev_ops { struct lws_netdev_instance * (*create)(struct lws_context *ctx, const struct lws_netdev_ops *ops, const char *name, void *platinfo); int (*configure)(struct lws_netdev_instance *nd, lws_netdev_config_t *config); int (*up)(struct lws_netdev_instance *nd); int (*down)(struct lws_netdev_instance *nd); int (*event)(struct lws_netdev_instance *nd, lws_usec_t timestamp, void *buf, size_t len); /**< these are SMD events coming from lws event loop thread context */ void (*destroy)(struct lws_netdev_instance **pnd); int (*connect)(struct lws_netdev_instance *wnd, const char *ssid, const char *passphrase, uint8_t *bssid); void (*scan)(struct lws_netdev_instance *nd); } lws_netdev_ops_t; /* * Network devices on this platform * * We also hold a list of all known network credentials (when they are needed * because there is a network interface without anything to connect to) and * the lws_settings instance they are stored in */ typedef struct lws_netdevs { lws_dll2_owner_t owner; /**< list of netdevs / lws_netdev_instance_t -based objects */ lws_dll2_owner_t owner_creds; /**< list of known credentials */ struct lwsac *ac_creds; /**< lwsac holding retreived credentials settings, or NULL */ lws_settings_instance_t *si; lws_sockaddr46 sa46_dns_resolver; uint8_t refcount_creds; /**< when there are multiple netdevs, must refcount creds in mem */ } lws_netdevs_t; /* * Base class for an allocated instantiated derived object using lws_netdev_ops, * ie, a specific ethernet device */ typedef struct lws_netdev_instance { const char *name; const lws_netdev_ops_t *ops; void *platinfo; lws_dll2_t list; uint8_t mac[LWS_ETH_ALEN]; uint8_t type; /* lws_netdev_type_t */ } lws_netdev_instance_t; enum { LNDIW_ALG_OPEN, LNDIW_ALG_WPA2, LNDIW_MODE_STA = (1 << 0), LNDIW_MODE_AP = (1 << 1), LNDIW_UP = (1 << 7), LNDIW_ACQ_IPv4 = (1 << 0), LNDIW_ACQ_IPv6 = (1 << 1), }; /* * Group AP / Station State */ typedef enum { LWSNDVWIFI_STATE_INITIAL, /* * We should gratuitously try whatever last worked for us, then * if that fails, worry about the rest of the logic */ LWSNDVWIFI_STATE_SCAN, /* * Unconnected, scanning: AP known in one of the config slots -> * configure it, start timeout + LWSNDVWIFI_STATE_STAT, if no AP * already up in same group with lower MAC, after a random * period start up our AP (LWSNDVWIFI_STATE_AP) */ LWSNDVWIFI_STATE_AP, /* Trying to be the group AP... periodically do a scan * LWSNDVWIFI_STATE_AP_SCAN, faster and then slower */ LWSNDVWIFI_STATE_AP_SCAN, /* * doing a scan while trying to be the group AP... if we see a * lower MAC being the AP for the same group AP, abandon being * an AP and join that AP as a station */ LWSNDVWIFI_STATE_STAT_GRP_AP, /* * We have decided to join another group member who is being the * AP, as its MAC is lower than ours. This is a stable state, * but we still do periodic scans * LWSNDVWIFI_STATE_STAT_GRP_AP_SCAN and will always prefer an * AP configured in a slot. */ LWSNDVWIFI_STATE_STAT_GRP_AP_SCAN, /* * We have joined a group member who is doing the AP job... we * want to check every now and then if a configured AP has * appeared that we should better use instead. Otherwise stay * in LWSNDVWIFI_STATE_STAT_GRP_AP */ LWSNDVWIFI_STATE_STAT, /* * trying to connect to another non-group AP. If we don't get an * IP within a timeout and retries, mark it as unusable it and go back */ LWSNDVWIFI_STATE_STAT_HAPPY, } lws_netdev_wifi_state_t; /* * Generic WIFI credentials */ typedef struct lws_wifi_creds { lws_dll2_t list; uint8_t bssid[LWS_ETH_ALEN]; char passphrase[64]; char ssid[33]; uint8_t alg; } lws_wifi_creds_t; /* * Generic WIFI Network Device Instance */ typedef struct lws_netdev_instance_wifi { lws_netdev_instance_t inst; lws_dll2_owner_t scan; /* sorted scan results */ lws_sorted_usec_list_t sul_scan; lws_wifi_creds_t *ap_cred; const char *ap_ip; const char *sta_ads; char current_attempt_ssid[33]; uint8_t current_attempt_bssid[LWS_ETH_ALEN]; uint8_t flags; uint8_t state; /* lws_netdev_wifi_state_t */ } lws_netdev_instance_wifi_t; /* * Logical scan results sorted list item */ typedef struct lws_wifi_sta { lws_dll2_t list; uint32_t last_seen; /* unix time */ uint32_t last_tried; /* unix time */ uint8_t bssid[LWS_ETH_ALEN]; char *ssid; /* points to overallocation */ uint8_t ssid_len; lws_wifi_ch_t ch; lws_wifi_rssi_t rssi[8]; int16_t rssi_avg; uint8_t authmode; uint8_t rssi_count; uint8_t rssi_next; /* ssid overallocated afterwards */ } lws_wifi_sta_t; #define rssi_averaged(_x) (_x->rssi_count ? \ ((int)_x->rssi_avg / (int)_x->rssi_count) : \ -200) LWS_VISIBLE LWS_EXTERN lws_netdevs_t * lws_netdevs_from_ctx(struct lws_context *ctx); LWS_VISIBLE LWS_EXTERN int lws_netdev_credentials_settings_set(lws_netdevs_t *nds); LWS_VISIBLE LWS_EXTERN int lws_netdev_credentials_settings_get(lws_netdevs_t *nds); LWS_VISIBLE LWS_EXTERN struct lws_netdev_instance * lws_netdev_wifi_create_plat(struct lws_context *ctx, const lws_netdev_ops_t *ops, const char *name, void *platinfo); LWS_VISIBLE LWS_EXTERN int lws_netdev_wifi_configure_plat(struct lws_netdev_instance *nd, lws_netdev_config_t *config); LWS_VISIBLE LWS_EXTERN int lws_netdev_wifi_event_plat(struct lws_netdev_instance *nd, lws_usec_t timestamp, void *buf, size_t len); LWS_VISIBLE LWS_EXTERN int lws_netdev_wifi_up_plat(struct lws_netdev_instance *nd); LWS_VISIBLE LWS_EXTERN int lws_netdev_wifi_down_plat(struct lws_netdev_instance *nd); LWS_VISIBLE LWS_EXTERN void lws_netdev_wifi_destroy_plat(struct lws_netdev_instance **pnd); LWS_VISIBLE LWS_EXTERN void lws_netdev_wifi_scan_plat(lws_netdev_instance_t *nd); LWS_VISIBLE LWS_EXTERN int lws_netdev_wifi_connect_plat(lws_netdev_instance_t *wnd, const char *ssid, const char *passphrase, uint8_t *bssid); LWS_VISIBLE LWS_EXTERN lws_netdev_instance_t * lws_netdev_find(lws_netdevs_t *netdevs, const char *ifname); #define lws_netdev_wifi_plat_ops \ .create = lws_netdev_wifi_create_plat, \ .configure = lws_netdev_wifi_configure_plat, \ .event = lws_netdev_wifi_event_plat, \ .up = lws_netdev_wifi_up_plat, \ .down = lws_netdev_wifi_down_plat, \ .connect = lws_netdev_wifi_connect_plat, \ .scan = lws_netdev_wifi_scan_plat, \ .destroy = lws_netdev_wifi_destroy_plat /* * This is for plat / OS level init that is necessary to be able to use * networking or wifi at all, without mentioning any specific device */ LWS_VISIBLE LWS_EXTERN int lws_netdev_plat_init(void); LWS_VISIBLE LWS_EXTERN int lws_netdev_plat_wifi_init(void); libwebsockets-4.3.5/include/libwebsockets/lws-network-helper.h000066400000000000000000000204461476025525100246050ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /** \defgroup net Network related helper APIs * ##Network related helper APIs * * These wrap miscellaneous useful network-related functions */ ///@{ #if defined(LWS_ESP_PLATFORM) #include #endif /* cope with large amounts of route information */ typedef uint16_t lws_route_uidx_t; typedef struct lws_dns_score { uint8_t precedence; uint8_t label; } lws_dns_score_t; /* * This represents an entry in the system routing table */ typedef struct lws_route { lws_dll2_t list; lws_sockaddr46 src; lws_sockaddr46 dest; lws_sockaddr46 gateway; struct lws_route *source; /* when used as lws_dns_sort_t */ lws_dns_score_t score; /* when used as lws_dns_sort_t */ int if_idx; int priority; int ifa_flags; /* if source_ads */ lws_route_uidx_t uidx; /* unique index for this route */ uint8_t proto; uint8_t dest_len; uint8_t src_len; uint8_t scope; /* if source_ads */ uint8_t af; /* if source_ads */ uint8_t source_ads:1; } lws_route_t; /* * We reuse the route object as the dns sort granule, so there's only one * struct needs to know all the gnarly ipv6 details */ typedef lws_route_t lws_dns_sort_t; /** * lws_canonical_hostname() - returns this host's hostname * * This is typically used by client code to fill in the host parameter * when making a client connection. You can only call it after the context * has been created. * * \param context: Websocket context */ LWS_VISIBLE LWS_EXTERN const char * LWS_WARN_UNUSED_RESULT lws_canonical_hostname(struct lws_context *context); /** * lws_get_peer_addresses() - Get client address information * \param wsi: Local struct lws associated with * \param fd: Connection socket descriptor * \param name: Buffer to take client address name * \param name_len: Length of client address name buffer * \param rip: Buffer to take client address IP dotted quad * \param rip_len: Length of client address IP buffer * * This function fills in name and rip with the name and IP of * the client connected with socket descriptor fd. Names may be * truncated if there is not enough room. If either cannot be * determined, they will be returned as valid zero-length strings. */ LWS_VISIBLE LWS_EXTERN void lws_get_peer_addresses(struct lws *wsi, lws_sockfd_type fd, char *name, int name_len, char *rip, int rip_len); /** * lws_get_peer_simple() - Get client address information without RDNS * * \param wsi: Local struct lws associated with * \param name: Buffer to take client address name * \param namelen: Length of client address name buffer * * This provides a 123.123.123.123 type IP address in name from the * peer that has connected to wsi */ LWS_VISIBLE LWS_EXTERN const char * lws_get_peer_simple(struct lws *wsi, char *name, size_t namelen); LWS_VISIBLE LWS_EXTERN const char * lws_get_peer_simple_fd(lws_sockfd_type fd, char *name, size_t namelen); #define LWS_ITOSA_USABLE 0 #define LWS_ITOSA_NOT_EXIST -1 #define LWS_ITOSA_NOT_USABLE -2 #define LWS_ITOSA_BUSY -3 /* only returned by lws_socket_bind() on EADDRINUSE */ #if !defined(LWS_PLAT_FREERTOS) && !defined(LWS_PLAT_OPTEE) /** * lws_interface_to_sa() - Convert interface name or IP to sockaddr struct * * \param ipv6: Allow IPV6 addresses * \param ifname: Interface name or IP * \param addr: struct sockaddr_in * to be written * \param addrlen: Length of addr * * This converts a textual network interface name to a sockaddr usable by * other network functions. * * If the network interface doesn't exist, it will return LWS_ITOSA_NOT_EXIST. * * If the network interface is not usable, eg ethernet cable is removed, it * may logically exist but not have any IP address. As such it will return * LWS_ITOSA_NOT_USABLE. * * If the network interface exists and is usable, it will return * LWS_ITOSA_USABLE. */ LWS_VISIBLE LWS_EXTERN int lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr, size_t addrlen); #endif /** * lws_sa46_compare_ads() - checks if two sa46 have the same address * * \param sa46a: first * \param sa46b: second * * Returns 0 if the address family is INET or INET6 and the address is the same, * or if the AF is the same but not INET or INET6, otherwise nonzero. */ LWS_VISIBLE LWS_EXTERN int lws_sa46_compare_ads(const lws_sockaddr46 *sa46a, const lws_sockaddr46 *sa46b); /** * lws_sa46_on_net() - checks if an sa46 is on the subnet represented by another * * \param sa46a: first * \param sa46_net: network * \param net_len: length of network non-mask * * Returns 0 if sa46a belongs on network sa46_net/net_len * * If there is an ipv4 / v6 mismatch between the ip and the net, the ipv4 * address is promoted to ::ffff:x.x.x.x before the comparison. */ LWS_VISIBLE LWS_EXTERN int lws_sa46_on_net(const lws_sockaddr46 *sa46a, const lws_sockaddr46 *sa46_net, int net_len); /* * lws_parse_numeric_address() - converts numeric ipv4 or ipv6 to byte address * * \param ads: the numeric ipv4 or ipv6 address string * \param result: result array * \param max_len: max length of result array * * Converts a 1.2.3.4 or 2001:abcd:123:: or ::ffff:1.2.3.4 formatted numeric * address into an array of network ordered byte address elements. * * Returns < 0 on error, else length of result set, either 4 or 16 for ipv4 / * ipv6. */ LWS_VISIBLE LWS_EXTERN int lws_parse_numeric_address(const char *ads, uint8_t *result, size_t max_len); /* * lws_sa46_parse_numeric_address() - converts numeric ipv4 or ipv6 to sa46 * * \param ads: the numeric ipv4 or ipv6 address string * \param sa46: pointer to sa46 to set * * Converts a 1.2.3.4 or 2001:abcd:123:: or ::ffff:1.2.3.4 formatted numeric * address into an sa46, a union of sockaddr_in or sockaddr_in6 depending on * what kind of address was found. sa46->sa4.sin_fmaily will be AF_INET if * ipv4, or AF_INET6 if ipv6. * * Returns 0 if the sa46 was set, else < 0 on error. */ LWS_VISIBLE LWS_EXTERN int lws_sa46_parse_numeric_address(const char *ads, lws_sockaddr46 *sa46); /** * lws_write_numeric_address() - convert network byte order ads to text * * \param ads: network byte order address array * \param size: number of bytes valid in ads * \param buf: result buffer to take text format * \param len: max size of text buffer * * Converts an array of network-ordered byte address elements to a textual * representation of the numeric address, like "1.2.3.4" or "::1". Returns the * number of chars written into buf, else < 0. ipv6 only supported with * LWS_IPV6=1 at cmake. */ LWS_VISIBLE LWS_EXTERN int lws_write_numeric_address(const uint8_t *ads, int size, char *buf, size_t len); /** * lws_sa46_write_numeric_address() - convert sa46 ads to textual numeric ads * * \param sa46: the sa46 whose address to show * \param buf: result buffer to take text format * \param len: max size of text buffer * * Converts the ipv4 or ipv6 address in an lws_sockaddr46 to a textual * representation of the numeric address, like "1.2.3.4" or "::1". Returns the * number of chars written into buf, else < 0. ipv6 only supported with * LWS_IPV6=1 at cmake. */ LWS_VISIBLE LWS_EXTERN int lws_sa46_write_numeric_address(lws_sockaddr46 *sa46, char *buf, size_t len); ///@} libwebsockets-4.3.5/include/libwebsockets/lws-optee.h000066400000000000000000000050331476025525100227460ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #ifndef __LWS_OPTEE_H #define __LWS_OPTEE_H /* 128-bit IP6 address */ struct in6_addr { union { uint8_t u6_addr8[16]; uint16_t u6_addr16[8]; uint32_t u6_addr32[4]; }; }; #define _SS_MAXSIZE 128U #define _SS_ALIGNSIZE (sizeof(int64_t)) #define _SS_PAD1SIZE (_SS_ALIGNSIZE - \ sizeof(sa_family_t)) #define _SS_PAD2SIZE (_SS_MAXSIZE - \ sizeof(sa_family_t) - _SS_PAD1SIZE - _SS_ALIGNSIZE) struct sockaddr_storage { sa_family_t ss_family; /* address family */ char __ss_pad1[_SS_PAD1SIZE]; int64_t __ss_align; /* force desired struct alignment */ char __ss_pad2[_SS_PAD2SIZE]; }; #define __SOCK_SIZE__ 16 /* sizeof(struct sockaddr) */ struct sockaddr { sa_family_t sa_family; /* address family */ uint8_t sa_data[__SOCK_SIZE__ /* address value */ - sizeof(sa_family_t)]; }; /* 16 bytes */ struct sockaddr_in { sa_family_t sin_family; in_port_t sin_port; struct in_addr sin_addr; uint8_t sin_zero[__SOCK_SIZE__ /* padding until 16 bytes */ - sizeof(sa_family_t) - sizeof(in_port_t) - sizeof(struct in_addr)]; }; struct sockaddr_in6 { sa_family_t sin6_family; /* AF_INET6 */ in_port_t sin6_port; /* Transport layer port # */ uint32_t sin6_flowinfo; /* IP6 flow information */ struct in6_addr sin6_addr; /* IP6 address */ uint32_t sin6_scope_id; /* scope zone index */ }; #endif /* __LWS_OPTEE_H */ libwebsockets-4.3.5/include/libwebsockets/lws-protocols-plugins.h000066400000000000000000000342201476025525100253350ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /*! \defgroup Protocols-and-Plugins Protocols and Plugins * \ingroup lwsapi * * ##Protocol and protocol plugin -related apis * * Protocols bind ws protocol names to a custom callback specific to that * protocol implementaion. * * A list of protocols can be passed in at context creation time, but it is * also legal to leave that NULL and add the protocols and their callback code * using plugins. * * Plugins are much preferable compared to cut and pasting code into an * application each time, since they can be used standalone. */ ///@{ /** struct lws_protocols - List of protocols and handlers client or server * supports. */ struct lws_protocols { const char *name; /**< Protocol name that must match the one given in the client * Javascript new WebSocket(url, 'protocol') name. */ lws_callback_function *callback; /**< The service callback used for this protocol. It allows the * service action for an entire protocol to be encapsulated in * the protocol-specific callback */ size_t per_session_data_size; /**< Each new connection using this protocol gets * this much memory allocated on connection establishment and * freed on connection takedown. A pointer to this per-connection * allocation is passed into the callback in the 'user' parameter */ size_t rx_buffer_size; /**< lws allocates this much space for rx data and informs callback * when something came. Due to rx flow control, the callback may not * be able to consume it all without having to return to the event * loop. That is supported in lws. * * If .tx_packet_size is 0, this also controls how much may be sent at * once for backwards compatibility. */ unsigned int id; /**< ignored by lws, but useful to contain user information bound * to the selected protocol. For example if this protocol was * called "myprotocol-v2", you might set id to 2, and the user * code that acts differently according to the version can do so by * switch (wsi->a.protocol->id), user code might use some bits as * capability flags based on selected protocol version, etc. */ void *user; /**< ignored by lws, but user code can pass a pointer here it can later access from the protocol callback */ size_t tx_packet_size; /**< 0 indicates restrict send() size to .rx_buffer_size for backwards- * compatibility. * If greater than zero, a single send() is restricted to this amount * and any remainder is buffered by lws and sent afterwards also in * these size chunks. Since that is expensive, it's preferable * to restrict one fragment you are trying to send to match this * size. */ /* Add new things just above here ---^ * This is part of the ABI, don't needlessly break compatibility */ }; #define LWS_PROTOCOL_LIST_TERM { NULL, NULL, 0, 0, 0, NULL, 0 } /** * lws_vhost_name_to_protocol() - get vhost's protocol object from its name * * \param vh: vhost to search * \param name: protocol name * * Returns NULL or a pointer to the vhost's protocol of the requested name */ LWS_VISIBLE LWS_EXTERN const struct lws_protocols * lws_vhost_name_to_protocol(struct lws_vhost *vh, const char *name); /** * lws_get_protocol() - Returns a protocol pointer from a websocket * connection. * \param wsi: pointer to struct websocket you want to know the protocol of * * * Some apis can act on all live connections of a given protocol, * this is how you can get a pointer to the active protocol if needed. */ LWS_VISIBLE LWS_EXTERN const struct lws_protocols * lws_get_protocol(struct lws *wsi); /** lws_protocol_get() - deprecated: use lws_get_protocol */ LWS_VISIBLE LWS_EXTERN const struct lws_protocols * lws_protocol_get(struct lws *wsi) LWS_WARN_DEPRECATED; /** * lws_protocol_vh_priv_zalloc() - Allocate and zero down a protocol's per-vhost * storage * \param vhost: vhost the instance is related to * \param prot: protocol the instance is related to * \param size: bytes to allocate * * Protocols often find it useful to allocate a per-vhost struct, this is a * helper to be called in the per-vhost init LWS_CALLBACK_PROTOCOL_INIT */ LWS_VISIBLE LWS_EXTERN void * lws_protocol_vh_priv_zalloc(struct lws_vhost *vhost, const struct lws_protocols *prot, int size); /** * lws_protocol_vh_priv_get() - retreive a protocol's per-vhost storage * * \param vhost: vhost the instance is related to * \param prot: protocol the instance is related to * * Recover a pointer to the allocated per-vhost storage for the protocol created * by lws_protocol_vh_priv_zalloc() earlier */ LWS_VISIBLE LWS_EXTERN void * lws_protocol_vh_priv_get(struct lws_vhost *vhost, const struct lws_protocols *prot); /** * lws_vhd_find_by_pvo() - find a partner vhd * * \param cx: the lws_context * \param protname: the name of the lws_protocol the vhd belongs to * \param pvo_name: the name of a pvo that must exist bound to the vhd * \param pvo_value: the required value of the named pvo * * This allows architectures with multiple protocols bound together to * cleanly discover partner protocol instances even on completely * different vhosts. For example, a proxy may consist of two protocols * listening on different vhosts, and there may be multiple instances * of the proxy in the same process. It's desirable that each side of * the proxy is an independent protocol that can be freely bound to any * vhost, eg, allowing Unix Domain to tls / h2 proxying, or each side * bound to different network interfaces for localhost-only visibility * on one side, using existing vhost management. * * That leaves the problem that the two sides have to find each other * and bind at runtime. This api allows each side to specify the * protocol name, and a common pvo name and pvo value that indicates * the two sides belong together, and search through all the instantiated * vhost-protocols looking for a match. If found, the private allocation * (aka "vhd" of the match is returned). NULL is returned on no match. * * Since this can only succeed when called by the last of the two * protocols to be instantiated, both sides should call it and handle * NULL gracefully, since it may mean that they were first and their * partner vhsot-protocol has not been instantiated yet. */ LWS_VISIBLE LWS_EXTERN void * lws_vhd_find_by_pvo(struct lws_context *cx, const char *protname, const char *pvo_name, const char *pvo_value); /** * lws_adjust_protocol_psds - change a vhost protocol's per session data size * * \param wsi: a connection with the protocol to change * \param new_size: the new size of the per session data size for the protocol * * Returns user_space for the wsi, after allocating * * This should not be used except to initalize a vhost protocol's per session * data size one time, before any connections are accepted. * * Sometimes the protocol wraps another protocol and needs to discover and set * its per session data size at runtime. */ LWS_VISIBLE LWS_EXTERN void * lws_adjust_protocol_psds(struct lws *wsi, size_t new_size); /** * lws_finalize_startup() - drop initial process privileges * * \param context: lws context * * This is called after the end of the vhost protocol initializations, but * you may choose to call it earlier */ LWS_VISIBLE LWS_EXTERN int lws_finalize_startup(struct lws_context *context); /** * lws_pvo_search() - helper to find a named pvo in a linked-list * * \param pvo: the first pvo in the linked-list * \param name: the name of the pvo to return if found * * Returns NULL, or a pointer to the name pvo in the linked-list */ LWS_VISIBLE LWS_EXTERN const struct lws_protocol_vhost_options * lws_pvo_search(const struct lws_protocol_vhost_options *pvo, const char *name); /** * lws_pvo_get_str() - retreive a string pvo value * * \param in: the first pvo in the linked-list * \param name: the name of the pvo to return if found * \param result: pointer to a const char * to get the result if any * * Returns 0 if found and *result set, or nonzero if not found */ LWS_VISIBLE LWS_EXTERN int lws_pvo_get_str(void *in, const char *name, const char **result); LWS_VISIBLE LWS_EXTERN int lws_protocol_init(struct lws_context *context); #define LWS_PLUGIN_API_MAGIC 191 /* * Abstract plugin header for any kind of plugin class, always at top of * actual class plugin export type. * * The export type object must be exported with the same name as the plugin * file, eg, libmyplugin.so must export a const one of these as the symbol * "myplugin". * * That is the only expected export from the plugin. */ typedef struct lws_plugin_header { const char *name; const char *_class; const char *lws_build_hash; /* set to LWS_BUILD_HASH */ unsigned int api_magic; /* set to LWS_PLUGIN_API_MAGIC at plugin build time */ /* plugin-class specific superclass data follows */ } lws_plugin_header_t; /* * "lws_protocol_plugin" class export, for lws_protocol implementations done * as plugins */ typedef struct lws_plugin_protocol { lws_plugin_header_t hdr; const struct lws_protocols *protocols; /**< array of supported protocols provided by plugin */ const struct lws_extension *extensions; /**< array of extensions provided by plugin */ int count_protocols; /**< how many protocols */ int count_extensions; /**< how many extensions */ } lws_plugin_protocol_t; /* * This is the dynamic, runtime created part of the plugin instantiation. * These are kept in a linked-list and destroyed with the context. */ struct lws_plugin { struct lws_plugin *list; /**< linked list */ const lws_plugin_header_t *hdr; union { #if defined(LWS_WITH_LIBUV) && defined(UV_ERRNO_MAP) #if (UV_VERSION_MAJOR > 0) uv_lib_t lib; /**< shared library pointer */ #endif #endif void *l; /**< */ } u; }; /* * Event lib library plugin type (when LWS_WITH_EVLIB_PLUGINS) * Public so new event libs can equally be supported outside lws itself */ typedef struct lws_plugin_evlib { lws_plugin_header_t hdr; const struct lws_event_loop_ops *ops; } lws_plugin_evlib_t; typedef int (*each_plugin_cb_t)(struct lws_plugin *p, void *user); /** * lws_plugins_init() - dynamically load plugins of matching class from dirs * * \param pplugin: pointer to linked-list for this kind of plugin * \param d: array of directory paths to look in * \param _class: class string that plugin must declare * \param filter: NULL, or a string that must appear after the third char of the plugin filename * \param each: NULL, or each_plugin_cb_t callback for each instantiated plugin * \param each_user: pointer passed to each callback * * Allows you to instantiate a class of plugins to a specified linked-list. * The each callback allows you to init each inistantiated callback and pass a * pointer each_user to it. * * To take down the plugins, pass a pointer to the linked-list head to * lws_plugins_destroy. * * This is used for lws protocol plugins but you can define your own plugin * class name like "mypluginclass", declare it in your plugin headers, and load * your own plugins to your own list using this api the same way. */ LWS_VISIBLE LWS_EXTERN int lws_plugins_init(struct lws_plugin **pplugin, const char * const *d, const char *_class, const char *filter, each_plugin_cb_t each, void *each_user); /** * lws_plugins_destroy() - dynamically unload list of plugins * * \param pplugin: pointer to linked-list for this kind of plugin * \param each: NULL, or each_plugin_cb_t callback for each instantiated plugin * \param each_user: pointer passed to each callback * * Allows you to destroy a class of plugins from a specified linked-list * created by a call to lws_plugins_init(). * * The each callback allows you to deinit each inistantiated callback and pass a * pointer each_user to it, just before its footprint is destroyed. */ LWS_VISIBLE LWS_EXTERN int lws_plugins_destroy(struct lws_plugin **pplugin, each_plugin_cb_t each, void *each_user); #if defined(LWS_WITH_PLUGINS_BUILTIN) /* provide exports for builtin plugin protocols */ extern const struct lws_protocols post_demo_protocols[1]; extern const struct lws_protocols lws_raw_proxy_protocols[1]; extern const struct lws_protocols lws_status_protocols[1]; extern const struct lws_protocols lws_mirror_protocols[1]; extern const struct lws_protocols lws_ssh_base_protocols[2]; extern const struct lws_protocols post_demo_protocols[1]; extern const struct lws_protocols dumb_increment_protocols[1]; extern const struct lws_protocols deaddrop_protocols[1]; extern const struct lws_protocols lws_raw_test_protocols[1]; extern const struct lws_protocols lws_sshd_demo_protocols[1]; extern const struct lws_protocols lws_acme_client_protocols[1]; extern const struct lws_protocols client_loopback_test_protocols[1]; extern const struct lws_protocols fulltext_demo_protocols[1]; extern const struct lws_protocols lws_openmetrics_export_protocols[ #if defined(LWS_WITH_SERVER) && defined(LWS_WITH_CLIENT) && defined(LWS_ROLE_WS) 4 #else #if defined(LWS_WITH_SERVER) 3 #else 1 #endif #endif ]; #define LWSOMPROIDX_DIRECT_HTTP_SERVER 0 #define LWSOMPROIDX_PROX_HTTP_SERVER 1 #define LWSOMPROIDX_PROX_WS_SERVER 2 #define LWSOMPROIDX_PROX_WS_CLIENT 3 #endif ///@} libwebsockets-4.3.5/include/libwebsockets/lws-purify.h000066400000000000000000000072201476025525100231500ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /*! \defgroup pur Sanitize / purify SQL and JSON helpers * * ##Sanitize / purify SQL and JSON helpers * * APIs for escaping untrusted JSON and SQL safely before use */ //@{ /** * lws_sql_purify() - like strncpy but with escaping for sql quotes * * \param escaped: output buffer * \param string: input buffer ('/0' terminated) * \param len: output buffer max length * * Because escaping expands the output string, it's not * possible to do it in-place, ie, with escaped == string */ LWS_VISIBLE LWS_EXTERN const char * lws_sql_purify(char *escaped, const char *string, size_t len); /** * lws_sql_purify_len() - return length of purified version of input string * * \param string: input buffer ('/0' terminated) * * Calculates any character escaping without writing it anywhere and returns the * calculated length of the purified string. */ int lws_sql_purify_len(const char *p); /** * lws_json_purify() - like strncpy but with escaping for json chars * * \param escaped: output buffer * \param string: input buffer ('/0' terminated) * \param len: output buffer max length * \param in_used: number of bytes of string we could escape in len * * Because escaping expands the output string, it's not * possible to do it in-place, ie, with escaped == string */ LWS_VISIBLE LWS_EXTERN const char * lws_json_purify(char *escaped, const char *string, int len, int *in_used); /** * lws_json_purify_len() - find out the escaped length of a string * * \param string: input buffer ('/0' terminated) * * JSON may have to expand escapes by up to 6x the original depending on what * it is. This doesn't actually do the escaping but goes through the motions * and computes the length of the escaped string. */ LWS_VISIBLE LWS_EXTERN int lws_json_purify_len(const char *string); /** * lws_filename_purify_inplace() - replace scary filename chars with underscore * * \param filename: filename to be purified * * Replace scary characters in the filename (it should not be a path) * with underscore, so it's safe to use. */ LWS_VISIBLE LWS_EXTERN void lws_filename_purify_inplace(char *filename); LWS_VISIBLE LWS_EXTERN int lws_plat_write_cert(struct lws_vhost *vhost, int is_key, int fd, void *buf, size_t len); LWS_VISIBLE LWS_EXTERN int lws_plat_write_file(const char *filename, void *buf, size_t len); LWS_VISIBLE LWS_EXTERN int lws_plat_read_file(const char *filename, void *buf, size_t len); LWS_VISIBLE LWS_EXTERN int lws_plat_recommended_rsa_bits(void); ///@} libwebsockets-4.3.5/include/libwebsockets/lws-pwm.h000066400000000000000000000046111476025525100224360ustar00rootroot00000000000000/* * Generic PWM controller ops * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ typedef struct lws_pwm_map { _lws_plat_gpio_t gpio; uint8_t index; uint8_t active_level; } lws_pwm_map_t; typedef struct lws_pwm_ops { int (*init)(const struct lws_pwm_ops *lo); void (*intensity)(const struct lws_pwm_ops *lo, _lws_plat_gpio_t gpio, lws_led_intensity_t inten); const lws_pwm_map_t *pwm_map; uint8_t count_pwm_map; } lws_pwm_ops_t; LWS_VISIBLE LWS_EXTERN int lws_pwm_plat_init(const struct lws_pwm_ops *lo); LWS_VISIBLE LWS_EXTERN void lws_pwm_plat_intensity(const struct lws_pwm_ops *lo, _lws_plat_gpio_t gpio, lws_led_intensity_t inten); #define lws_pwm_plat_ops \ .init = lws_pwm_plat_init, \ .intensity = lws_pwm_plat_intensity /* * May be useful for making your own transitions or sequences */ LWS_VISIBLE LWS_EXTERN lws_led_intensity_t lws_led_func_linear(lws_led_seq_phase_t n); LWS_VISIBLE LWS_EXTERN lws_led_intensity_t lws_led_func_sine(lws_led_seq_phase_t n); /* canned sequences that can work out of the box */ extern const lws_led_sequence_def_t lws_pwmseq_sine_endless_slow, lws_pwmseq_sine_endless_fast, lws_pwmseq_linear_wipe, lws_pwmseq_sine_up, lws_pwmseq_sine_down, lws_pwmseq_static_on, lws_pwmseq_static_half, lws_pwmseq_static_off; libwebsockets-4.3.5/include/libwebsockets/lws-retry.h000066400000000000000000000104561476025525100230040ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ typedef struct lws_retry_bo { const uint32_t *retry_ms_table; /* base delay in ms */ uint16_t retry_ms_table_count; /* entries in table */ uint16_t conceal_count; /* max retries to conceal */ uint16_t secs_since_valid_ping; /* idle before PING issued */ uint16_t secs_since_valid_hangup; /* idle before hangup conn */ uint8_t jitter_percent; /* % additional random jitter */ } lws_retry_bo_t; #define LWS_RETRY_CONCEAL_ALWAYS (0xffff) /** * lws_retry_get_delay_ms() - get next delay from backoff table * * \param lws_context: the lws context (used for getting random) * \param retry: the retry backoff table we are using, or NULL for default * \param ctry: pointer to the try counter * \param conceal: pointer to flag set to nonzero if the try should be concealed * in terms of creating an error * * Increments *\p try and retruns the number of ms that should elapse before the * next connection retry, according to the backoff table \p retry. *\p conceal is * set if the number of tries is less than the backoff table conceal_count, or * is zero if it exceeded it. This lets you conceal a certain number of retries * before alerting the caller there is a problem. * * If \p retry is NULL, a default of 3s + (0..300ms jitter) is used. If it's * non-NULL but jitter_percent is 0, the default of 30% jitter is retained. */ LWS_VISIBLE LWS_EXTERN unsigned int lws_retry_get_delay_ms(struct lws_context *context, const lws_retry_bo_t *retry, uint16_t *ctry, char *conceal); /** * lws_retry_sul_schedule() - schedule a sul according to the backoff table * * \param lws_context: the lws context (used for getting random) * \param sul: pointer to the sul to schedule * \param retry: the retry backoff table we are using, or NULL for default * \param cb: the callback for when the sul schedule time arrives * \param ctry: pointer to the try counter * * Helper that combines interpreting the retry table with scheduling a sul to * the computed delay. If conceal is not set, it will not schedule the sul * and just return 1. Otherwise the sul is scheduled and it returns 0. */ LWS_VISIBLE LWS_EXTERN int lws_retry_sul_schedule(struct lws_context *context, int tid, lws_sorted_usec_list_t *sul, const lws_retry_bo_t *retry, sul_cb_t cb, uint16_t *ctry); /** * lws_retry_sul_schedule_retry_wsi() - retry sul schedule helper using wsi * * \param wsi: the wsi to set the hrtimer sul on to the next retry interval * \param sul: pointer to the sul to schedule * \param cb: the callback for when the sul schedule time arrives * \param ctry: pointer to the try counter * * Helper that uses context, tid and retry policy from a wsi to call * lws_retry_sul_schedule. * * Since a udp connection can have many writes in flight, the retry count and * the sul used to track each thing that wants to be written have to be handled * individually, not the wsi. But the retry policy and the other things can * be filled in from the wsi conveniently. */ LWS_VISIBLE LWS_EXTERN int lws_retry_sul_schedule_retry_wsi(struct lws *wsi, lws_sorted_usec_list_t *sul, sul_cb_t cb, uint16_t *ctry); libwebsockets-4.3.5/include/libwebsockets/lws-ring.h000066400000000000000000000271351476025525100226000ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /** \defgroup lws_ring LWS Ringbuffer APIs * ##lws_ring: generic ringbuffer struct * * Provides an abstract ringbuffer api supporting one head and one or an * unlimited number of tails. * * All of the members are opaque and manipulated by lws_ring_...() apis. * * The lws_ring and its buffer is allocated at runtime on the heap, using * * - lws_ring_create() * - lws_ring_destroy() * * It may contain any type, the size of the "element" stored in the ring * buffer and the number of elements is given at creation time. * * When you create the ringbuffer, you can optionally provide an element * destroy callback that frees any allocations inside the element. This is then * automatically called for elements with no tail behind them, ie, elements * which don't have any pending consumer are auto-freed. * * Whole elements may be inserted into the ringbuffer and removed from it, using * * - lws_ring_insert() * - lws_ring_consume() * * You can find out how many whole elements are free or waiting using * * - lws_ring_get_count_free_elements() * - lws_ring_get_count_waiting_elements() * * In addition there are special purpose optional byte-centric apis * * - lws_ring_next_linear_insert_range() * - lws_ring_bump_head() * * which let you, eg, read() directly into the ringbuffer without needing * an intermediate bounce buffer. * * The accessors understand that the ring wraps, and optimizes insertion and * consumption into one or two memcpy()s depending on if the head or tail * wraps. * * lws_ring only supports a single head, but optionally multiple tails with * an API to inform it when the "oldest" tail has moved on. You can give * NULL where-ever an api asks for a tail pointer, and it will use an internal * single tail pointer for convenience. * * The "oldest tail", which is the only tail if you give it NULL instead of * some other tail, is used to track which elements in the ringbuffer are * still unread by anyone. * * - lws_ring_update_oldest_tail() */ ///@{ struct lws_ring; /** * lws_ring_create(): create a new ringbuffer * * \param element_len: the size in bytes of one element in the ringbuffer * \param count: the number of elements the ringbuffer can contain * \param destroy_element: NULL, or callback to be called for each element * that is removed from the ringbuffer due to the * oldest tail moving beyond it * * Creates the ringbuffer and allocates the storage. Returns the new * lws_ring *, or NULL if the allocation failed. * * If non-NULL, destroy_element will get called back for every element that is * retired from the ringbuffer after the oldest tail has gone past it, and for * any element still left in the ringbuffer when it is destroyed. It replaces * all other element destruction code in your user code. */ LWS_VISIBLE LWS_EXTERN struct lws_ring * lws_ring_create(size_t element_len, size_t count, void (*destroy_element)(void *element)); /** * lws_ring_destroy(): destroy a previously created ringbuffer * * \param ring: the struct lws_ring to destroy * * Destroys the ringbuffer allocation and the struct lws_ring itself. */ LWS_VISIBLE LWS_EXTERN void lws_ring_destroy(struct lws_ring *ring); /** * lws_ring_get_count_free_elements(): return how many elements can fit * in the free space * * \param ring: the struct lws_ring to report on * * Returns how much room is left in the ringbuffer for whole element insertion. */ LWS_VISIBLE LWS_EXTERN size_t lws_ring_get_count_free_elements(struct lws_ring *ring); /** * lws_ring_get_count_waiting_elements(): return how many elements can be consumed * * \param ring: the struct lws_ring to report on * \param tail: a pointer to the tail struct to use, or NULL for single tail * * Returns how many elements are waiting to be consumed from the perspective * of the tail pointer given. */ LWS_VISIBLE LWS_EXTERN size_t lws_ring_get_count_waiting_elements(struct lws_ring *ring, uint32_t *tail); /** * lws_ring_insert(): attempt to insert up to max_count elements from src * * \param ring: the struct lws_ring to report on * \param src: the array of elements to be inserted * \param max_count: the number of available elements at src * * Attempts to insert as many of the elements at src as possible, up to the * maximum max_count. Returns the number of elements actually inserted. */ LWS_VISIBLE LWS_EXTERN size_t lws_ring_insert(struct lws_ring *ring, const void *src, size_t max_count); /** * lws_ring_consume(): attempt to copy out and remove up to max_count elements * to src * * \param ring: the struct lws_ring to report on * \param tail: a pointer to the tail struct to use, or NULL for single tail * \param dest: the array of elements to be inserted. or NULL for no copy * \param max_count: the number of available elements at src * * Attempts to copy out as many waiting elements as possible into dest, from * the perspective of the given tail, up to max_count. If dest is NULL, the * copying out is not done but the elements are logically consumed as usual. * NULL dest is useful in combination with lws_ring_get_element(), where you * can use the element direct from the ringbuffer and then call this with NULL * dest to logically consume it. * * Increments the tail position according to how many elements could be * consumed. * * Returns the number of elements consumed. */ LWS_VISIBLE LWS_EXTERN size_t lws_ring_consume(struct lws_ring *ring, uint32_t *tail, void *dest, size_t max_count); /** * lws_ring_get_element(): get a pointer to the next waiting element for tail * * \param ring: the struct lws_ring to report on * \param tail: a pointer to the tail struct to use, or NULL for single tail * * Points to the next element that tail would consume, directly in the * ringbuffer. This lets you write() or otherwise use the element without * having to copy it out somewhere first. * * After calling this, you must call lws_ring_consume(ring, &tail, NULL, 1) * which will logically consume the element you used up and increment your * tail (tail may also be NULL there if you use a single tail). * * Returns NULL if no waiting element, or a const void * pointing to it. */ LWS_VISIBLE LWS_EXTERN const void * lws_ring_get_element(struct lws_ring *ring, uint32_t *tail); /** * lws_ring_update_oldest_tail(): free up elements older than tail for reuse * * \param ring: the struct lws_ring to report on * \param tail: a pointer to the tail struct to use, or NULL for single tail * * If you are using multiple tails, you must use this API to inform the * lws_ring when none of the tails still need elements in the fifo any more, * by updating it when the "oldest" tail has moved on. */ LWS_VISIBLE LWS_EXTERN void lws_ring_update_oldest_tail(struct lws_ring *ring, uint32_t tail); /** * lws_ring_get_oldest_tail(): get current oldest available data index * * \param ring: the struct lws_ring to report on * * If you are initializing a new ringbuffer consumer, you can set its tail to * this to start it from the oldest ringbuffer entry still available. */ LWS_VISIBLE LWS_EXTERN uint32_t lws_ring_get_oldest_tail(struct lws_ring *ring); /** * lws_ring_next_linear_insert_range(): used to write directly into the ring * * \param ring: the struct lws_ring to report on * \param start: pointer to a void * set to the start of the next ringbuffer area * \param bytes: pointer to a size_t set to the max length you may use from *start * * This provides a low-level, bytewise access directly into the ringbuffer * allowing direct insertion of data without having to use a bounce buffer. * * The api reports the position and length of the next linear range that can * be written in the ringbuffer, ie, up to the point it would wrap, and sets * *start and *bytes accordingly. You can then, eg, directly read() into * *start for up to *bytes, and use lws_ring_bump_head() to update the lws_ring * with what you have done. * * Returns nonzero if no insertion is currently possible. */ LWS_VISIBLE LWS_EXTERN int lws_ring_next_linear_insert_range(struct lws_ring *ring, void **start, size_t *bytes); /** * lws_ring_bump_head(): used to write directly into the ring * * \param ring: the struct lws_ring to operate on * \param bytes: the number of bytes you inserted at the current head */ LWS_VISIBLE LWS_EXTERN void lws_ring_bump_head(struct lws_ring *ring, size_t bytes); LWS_VISIBLE LWS_EXTERN void lws_ring_dump(struct lws_ring *ring, uint32_t *tail); /* * This is a helper that combines the common pattern of needing to consume * some ringbuffer elements, move the consumer tail on, and check if that * has moved any ringbuffer elements out of scope, because it was the last * consumer that had not already consumed them. * * Elements that go out of scope because the oldest tail is now after them * get garbage-collected by calling the destroy_element callback on them * defined when the ringbuffer was created. */ #define lws_ring_consume_and_update_oldest_tail(\ ___ring, /* the lws_ring object */ \ ___type, /* type of objects with tails */ \ ___ptail, /* ptr to tail of obj with tail doing consuming */ \ ___count, /* count of payload objects being consumed */ \ ___list_head, /* head of list of objects with tails */ \ ___mtail, /* member name of tail in ___type */ \ ___mlist /* member name of next list member ptr in ___type */ \ ) { \ int ___n, ___m; \ \ ___n = lws_ring_get_oldest_tail(___ring) == *(___ptail); \ lws_ring_consume(___ring, ___ptail, NULL, ___count); \ if (___n) { \ uint32_t ___oldest; \ ___n = 0; \ ___oldest = *(___ptail); \ lws_start_foreach_llp(___type **, ___ppss, ___list_head) { \ ___m = (int)lws_ring_get_count_waiting_elements( \ ___ring, &(*___ppss)->___mtail); \ if (___m >= ___n) { \ ___n = ___m; \ ___oldest = (*___ppss)->___mtail; \ } \ } lws_end_foreach_llp(___ppss, ___mlist); \ \ lws_ring_update_oldest_tail(___ring, ___oldest); \ } \ } /* * This does the same as the lws_ring_consume_and_update_oldest_tail() * helper, but for the simpler case there is only one consumer, so one * tail, and that tail is always the oldest tail. */ #define lws_ring_consume_single_tail(\ ___ring, /* the lws_ring object */ \ ___ptail, /* ptr to tail of obj with tail doing consuming */ \ ___count /* count of payload objects being consumed */ \ ) { \ lws_ring_consume(___ring, ___ptail, NULL, ___count); \ lws_ring_update_oldest_tail(___ring, *(___ptail)); \ } ///@} libwebsockets-4.3.5/include/libwebsockets/lws-secure-streams-client.h000066400000000000000000000263711476025525100260600ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * This is the headers for secure stream api variants that deal with clients in * different threads or even different processes. * * lws_ss_ when client is directly using the event loop * lws_sstc_ when client is in a different thread to the event loop * lws_sspc_ when client is in a different process to the event loop * * The client api is almost the same except the slightly diffent names. */ /* * lws_sspc_ apis... different process */ /* * Helper translation so user code written to lws_ss_ can be built for * lws_sspc_ in one step by #define LWS_SS_USE_SSPC before including */ struct lws_sspc_handle; #if defined(LWS_SS_USE_SSPC) #define lws_ss_handle lws_sspc_handle #define lws_ss_create lws_sspc_create #define lws_ss_destroy lws_sspc_destroy #define lws_ss_request_tx lws_sspc_request_tx #define lws_ss_request_tx_len lws_sspc_request_tx_len #define lws_ss_client_connect lws_sspc_client_connect #define lws_ss_get_sequencer lws_sspc_get_sequencer #define lws_ss_proxy_create lws_sspc_proxy_create #define lws_ss_get_context lws_sspc_get_context #define lws_ss_rideshare lws_sspc_rideshare #define lws_ss_set_metadata lws_sspc_set_metadata #define lws_ss_get_metadata lws_sspc_get_metadata #define lws_ss_add_peer_tx_credit lws_sspc_add_peer_tx_credit #define lws_ss_get_est_peer_tx_credit lws_sspc_get_est_peer_tx_credit #define lws_ss_start_timeout lws_sspc_start_timeout #define lws_ss_cancel_timeout lws_sspc_cancel_timeout #define lws_ss_to_user_object lws_sspc_to_user_object #define lws_ss_change_handlers lws_sspc_change_handlers #define lws_smd_ss_rx_forward lws_smd_sspc_rx_forward #define lws_ss_tag lws_sspc_tag #define _lws_fi_user_ss_fi _lws_fi_user_sspc_fi #define lwsl_ss_get_cx lwsl_sspc_get_cx LWS_VISIBLE LWS_EXTERN void lws_log_prepend_sspc(struct lws_log_cx *cx, void *obj, char **p, char *e); LWS_VISIBLE LWS_EXTERN struct lws_log_cx * lwsl_sspc_get_cx(struct lws_sspc_handle *ss); #undef lwsl_ss #define lwsl_ss lwsl_sspc #undef lwsl_hexdump_ss #define lwsl_hexdump_ss lwsl_hexdump_sspc #endif #define lwsl_sspc(_h, _fil, ...) \ _lws_log_cx(lwsl_sspc_get_cx(_h), lws_log_prepend_sspc, _h, \ _fil, __func__, __VA_ARGS__) #define lwsl_hexdump_sspc(_h, _fil, _buf, _len) \ lwsl_hexdump_level_cx(lwsl_sspc_get_cx(_h), \ lws_log_prepend_sspc, \ _h, _fil, _buf, _len) /* * lwsl_sspc */ #if (_LWS_ENABLED_LOGS & LLL_ERR) #define lwsl_sspc_err(_w, ...) lwsl_sspc(_w, LLL_ERR, __VA_ARGS__) #else #define lwsl_sspc_err(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_WARN) #define lwsl_sspc_warn(_w, ...) lwsl_sspc(_w, LLL_WARN, __VA_ARGS__) #else #define lwsl_sspc_warn(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_NOTICE) #define lwsl_sspc_notice(_w, ...) lwsl_sspc(_w, LLL_NOTICE, __VA_ARGS__) #else #define lwsl_sspc_notice(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_INFO) #define lwsl_sspc_info(_w, ...) lwsl_sspc(_w, LLL_INFO, __VA_ARGS__) #else #define lwsl_sspc_info(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_DEBUG) #define lwsl_sspc_debug(_w, ...) lwsl_sspc(_w, LLL_DEBUG, __VA_ARGS__) #else #define lwsl_sspc_debug(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_PARSER) #define lwsl_sspc_parser(_w, ...) lwsl_sspc(_w, LLL_PARSER, __VA_ARGS__) #else #define lwsl_sspc_parser(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_HEADER) #define lwsl_sspc_header(_w, ...) lwsl_sspc(_w, LLL_HEADER, __VA_ARGS__) #else #define lwsl_sspc_header(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_EXT) #define lwsl_sspc_ext(_w, ...) lwsl_sspc(_w, LLL_EXT, __VA_ARGS__) #else #define lwsl_sspc_ext(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_CLIENT) #define lwsl_sspc_client(_w, ...) lwsl_sspc(_w, LLL_CLIENT, __VA_ARGS__) #else #define lwsl_sspc_client(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_LATENCY) #define lwsl_sspc_latency(_w, ...) lwsl_sspc(_w, LLL_LATENCY, __VA_ARGS__) #else #define lwsl_sspc_latency(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_THREAD) #define lwsl_sspc_thread(_w, ...) lwsl_sspc(_w, LLL_THREAD, __VA_ARGS__) #else #define lwsl_sspc_thread(_w, ...) do {} while(0) #endif #if (_LWS_ENABLED_LOGS & LLL_USER) #define lwsl_sspc_user(_w, ...) lwsl_sspc(_w, LLL_USER, __VA_ARGS__) #else #define lwsl_sspc_user(_w, ...) do {} while(0) #endif #define lwsl_hexdump_sspc_err(_v, ...) lwsl_hexdump_sspc(_v, LLL_ERR, __VA_ARGS__) #define lwsl_hexdump_sspc_warn(_v, ...) lwsl_hexdump_sspc(_v, LLL_WARN, __VA_ARGS__) #define lwsl_hexdump_sspc_notice(_v, ...) lwsl_hexdump_sspc(_v, LLL_NOTICE, __VA_ARGS__) #define lwsl_hexdump_sspc_info(_v, ...) lwsl_hexdump_sspc(_v, LLL_INFO, __VA_ARGS__) #define lwsl_hexdump_sspc_debug(_v, ...) lwsl_hexdump_sspc(_v, LLL_DEBUG, __VA_ARGS__) LWS_VISIBLE LWS_EXTERN int lws_sspc_create(struct lws_context *context, int tsi, const lws_ss_info_t *ssi, void *opaque_user_data, struct lws_sspc_handle **ppss, struct lws_sequencer *seq_owner, const char **ppayload_fmt); /** * lws_sspc_destroy() - Destroy secure stream * * \param ppss: pointer to lws_ss_t pointer to be destroyed * * Destroys the lws_ss_t pointed to by *ppss, and sets *ppss to NULL. */ LWS_VISIBLE LWS_EXTERN void lws_sspc_destroy(struct lws_sspc_handle **ppss); /** * lws_sspc_request_tx() - Schedule stream for tx * * \param pss: pointer to lws_ss_t representing stream that wants to transmit * * Schedules a write on the stream represented by \p pss. When it's possible to * write on this stream, the *tx callback will occur with an empty buffer for * the stream owner to fill in. */ LWS_VISIBLE LWS_EXTERN lws_ss_state_return_t lws_sspc_request_tx(struct lws_sspc_handle *pss); /** * lws_sspc_request_tx_len() - Schedule stream for tx with length hint * * \param h: pointer to handle representing stream that wants to transmit * \param len: the length of the write in bytes * * Schedules a write on the stream represented by \p pss. When it's possible to * write on this stream, the *tx callback will occur with an empty buffer for * the stream owner to fill in. * * This api variant should be used when it's possible the payload will go out * over h1 with x-web-form-urlencoded or similar Content-Type. * * The serialized, sspc type api actually serializes and forwards the length * hint to its upstream proxy, where it's available for use to produce the * internet-capable protocol framing. */ LWS_VISIBLE LWS_EXTERN lws_ss_state_return_t lws_sspc_request_tx_len(struct lws_sspc_handle *h, unsigned long len); /** * lws_sspc_client_connect() - Attempt the client connect * * \param h: secure streams handle * * Starts the connection process for the secure stream. Returns 0. */ LWS_VISIBLE LWS_EXTERN lws_ss_state_return_t lws_sspc_client_connect(struct lws_sspc_handle *h); /** * lws_sspc_get_sequencer() - Return parent sequencer pointer if any * * \param h: secure streams handle * * Returns NULL if the secure stream is not associated with a sequencer. * Otherwise returns a pointer to the owning sequencer. You can use this to * identify which sequencer to direct messages to, from the secure stream * callback. */ LWS_VISIBLE LWS_EXTERN struct lws_sequencer * lws_sspc_get_sequencer(struct lws_sspc_handle *h); /** * lws_sspc_proxy_create() - Start a unix domain socket proxy for Secure Streams * * \param context: lws_context * * Creates a vhost that listens on an abstract namespace unix domain socket at * address "proxy.ss.lws". Client connections to this proxy to Secure Streams */ LWS_VISIBLE LWS_EXTERN int lws_sspc_proxy_create(struct lws_context *context); /** * lws_ss_get_context() - convenience helper to recover the lws context * * \h: secure streams handle * * Returns the lws context. Dispenses with the need to pass a copy of it into * your secure streams handler. */ LWS_VISIBLE LWS_EXTERN struct lws_context * lws_sspc_get_context(struct lws_sspc_handle *h); LWS_VISIBLE extern const struct lws_protocols lws_sspc_protocols[2]; LWS_VISIBLE LWS_EXTERN const char * lws_sspc_rideshare(struct lws_sspc_handle *h); /** * lws_sspc_set_metadata() - allow user to bind external data to defined ss metadata * * \h: secure streams handle * \name: metadata name from the policy * \value: pointer to user-managed data to bind to name * \len: length of the user-managed data in value * * Binds user-managed data to the named metadata item from the ss policy. * If present, the metadata item is handled in a protocol-specific way using * the associated policy information. For example, in the policy * * "\"metadata\":" "[" * "{\"uptag\":" "\"X-Upload-Tag:\"}," * "{\"ctype\":" "\"Content-Type:\"}," * "{\"xctype\":" "\"X-Content-Type:\"}" * "]," * * when the policy is using h1 is interpreted to add h1 headers of the given * name with the value of the metadata on the left. * * Return 0 if OK, or nonzero if failed. */ LWS_VISIBLE LWS_EXTERN int lws_sspc_set_metadata(struct lws_sspc_handle *h, const char *name, const void *value, size_t len); LWS_VISIBLE LWS_EXTERN int lws_sspc_get_metadata(struct lws_sspc_handle *h, const char *name, const void **value, size_t *len); LWS_VISIBLE LWS_EXTERN int lws_sspc_add_peer_tx_credit(struct lws_sspc_handle *h, int32_t add); LWS_VISIBLE LWS_EXTERN int lws_sspc_get_est_peer_tx_credit(struct lws_sspc_handle *h); LWS_VISIBLE LWS_EXTERN void lws_sspc_start_timeout(struct lws_sspc_handle *h, unsigned int timeout_ms); LWS_VISIBLE LWS_EXTERN void lws_sspc_cancel_timeout(struct lws_sspc_handle *h); LWS_VISIBLE LWS_EXTERN void * lws_sspc_to_user_object(struct lws_sspc_handle *h); LWS_VISIBLE LWS_EXTERN void lws_sspc_change_handlers(struct lws_sspc_handle *h, lws_ss_state_return_t (*rx)(void *userobj, const uint8_t *buf, size_t len, int flags), lws_ss_state_return_t (*tx)(void *userobj, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len, int *flags), lws_ss_state_return_t (*state)(void *userobj, void *h_src /* ss handle type */, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack)); const char * lws_sspc_tag(struct lws_sspc_handle *h); libwebsockets-4.3.5/include/libwebsockets/lws-secure-streams-policy.h000066400000000000000000000330771476025525100261020ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2019 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * included from libwebsockets.h */ typedef int (*plugin_auth_status_cb)(struct lws_ss_handle *ss, int status); /** * lws_ss_plugin_auth_t - api for an auth plugin * * Auth plugins create and sequence authenticated connections that can carry one * or more streams to an endpoint. That may involve other connections to other * places to eg, gather authenticated tokens and then make the real connection * using the tokens. * * The secure stream object contains members to record which auth plugin the * stream is bound to and an over-allocation of the secure stream object to * contain the plugin auth private data. * * The auth plugin controls the state of the stream connection via the status * callback, and handles retries. * * Network connections may require one kind of auth sequencing, and streams * inside those connections another kind of auth sequencing depending on their * role. So the secure stream object allows defining plugins for both kinds. * * Streams may disappear at any time and require reauth to bring a new one up. * The auth plugin sequencer will connect / reconnect either on demand, or from * the start and after any connectivity loss if any stream using the connection * has the LWSSSPOLF_NAILED_UP flag. */ #if defined(LWS_WITH_SSPLUGINS) typedef struct lws_ss_plugin { struct lws_ss_plugin *next; const char *name; /**< auth plugin name */ size_t alloc; /**< size of private allocation */ int (*create)(struct lws_ss_handle *ss, void *info, plugin_auth_status_cb status); /**< called when the auth plugin is instantiated and bound to the secure stream. status is called back with advisory information about the authenticated stream state as it proceeds */ int (*destroy)(struct lws_ss_handle *ss); /**< called when the related secure stream is being destroyed, and anything the auth plugin is doing should also be destroyed */ int (*munge)(struct lws_ss_handle *ss, char *path, size_t path_len); /**< if the plugin needs to munge transactions that have metadata outside the payload (eg, add http headers) this callback will give it the opportunity to do so */ } lws_ss_plugin_t; #endif /* the public, const metrics policy definition */ typedef struct lws_metric_policy { /* order of first two mandated by JSON policy parsing scope union */ const struct lws_metric_policy *next; const char *name; const char *report; /**< the metrics policy name in the policy, used to bind to it */ uint64_t us_schedule; /**< us interval between lws_system metrics api reports */ uint32_t us_decay_unit; /**< how many us to decay avg by half, 0 = no decay */ uint8_t min_contributors; /**< before we can judge something is an outlier */ } lws_metric_policy_t; typedef struct lws_ss_x509 { struct lws_ss_x509 *next; const char *vhost_name; /**< vhost name using cert ctx */ const uint8_t *ca_der; /**< DER x.509 cert */ size_t ca_der_len; /**< length of DER cert */ uint8_t keep:1; /**< ie, if used in server tls */ } lws_ss_x509_t; enum { LWSSSPOLF_OPPORTUNISTIC = (1 << 0), /**< the connection doesn't exist unless client asks to write */ LWSSSPOLF_NAILED_UP = (1 << 1), /**< the connection tries to be connected the whole life of the ss */ LWSSSPOLF_URGENT_TX = (1 << 2), /**< this connection carries critical tx data */ LWSSSPOLF_URGENT_RX = (1 << 3), /**< this connection carries critical rx data */ LWSSSPOLF_TLS = (1 << 4), /**< stream must be connected via a tls tunnel */ LWSSSPOLF_LONG_POLL = (1 << 5), /**< stream used to receive async rx at arbitrary intervals */ LWSSSPOLF_AUTH_BEARER = (1 << 6), /**< for http, use lws_system auth token 0 in authentication: bearer */ LWSSSPOLF_HTTP_NO_CONTENT_LENGTH = (1 << 7), /**< don't add any content length even if we have it */ LWSSSPOLF_QUIRK_NGHTTP2_END_STREAM = (1 << 8), /**< set the client flag LCCSCF_H2_QUIRK_NGHTTP2_END_STREAM */ LWSSSPOLF_H2_QUIRK_OVERFLOWS_TXCR = (1 << 9), /**< set the client flag LCCSCF_H2_QUIRK_OVERFLOWS_TXCR */ LWSSSPOLF_H2_QUIRK_UNCLEAN_HPACK_STATE = (1 << 10), /**< HPACK decoder state does not end cleanly */ LWSSSPOLF_HTTP_MULTIPART = (1 << 11), /**< indicates stream goes out as specifically a multipart mime POST * section... if the tx has LWSSS_FLAG_COALESCE_CONTINUES flag then more * multipart sections are expected. Without it, the multipart wrapper * is closed and the http transaction issue completed when this message * finishes. */ LWSSSPOLF_HTTP_X_WWW_FORM_URLENCODED = (1 << 12), /**< set up lws_system client cert */ LWSSSPOLF_LOCAL_SINK = (1 << 13), /**< expected to bind to a local sink only */ LWSSSPOLF_WAKE_SUSPEND__VALIDITY = (1 << 14), /**< this stream's idle validity checks are critical enough we * should arrange to wake from suspend to perform them */ LWSSSPOLF_SERVER = (1 << 15), /**< we listen on a socket as a server */ LWSSSPOLF_ALLOW_REDIRECTS = (1 << 16), /**< follow redirects */ LWSSSPOLF_HTTP_MULTIPART_IN = (1 << 17), /**< handle inbound multipart mime at SS level */ LWSSSPOLF_ATTR_LOW_LATENCY = (1 << 18), /**< stream requires low latency */ LWSSSPOLF_ATTR_HIGH_THROUGHPUT = (1 << 19), /**< stream requires high throughput */ LWSSSPOLF_ATTR_HIGH_RELIABILITY = (1 << 20), /**< stream requires high reliability */ LWSSSPOLF_ATTR_LOW_COST = (1 << 21), /**< stream is not critical and should be handled as cheap as poss */ LWSSSPOLF_PERF = (1 << 22), /**< capture and report performace information */ LWSSSPOLF_DIRECT_PROTO_STR = (1 << 23), /**< metadata as direct protocol string, e.g. http header */ LWSSSPOLF_HTTP_CACHE_COOKIES = (1 << 24), /**< Record http cookies and pass them back on future requests */ LWSSSPOLF_PRIORITIZE_READS = (1 << 25), /**< prioritize clearing reads at expense of writes */ }; typedef struct lws_ss_trust_store { struct lws_ss_trust_store *next; const char *name; const lws_ss_x509_t *ssx509[6]; int count; } lws_ss_trust_store_t; enum { LWSSSP_H1, LWSSSP_H2, LWSSSP_WS, LWSSSP_MQTT, LWSSSP_RAW, LWSSS_HBI_AUTH = 0, LWSSS_HBI_DSN, LWSSS_HBI_FWV, LWSSS_HBI_TYPE, _LWSSS_HBI_COUNT /* always last */ }; /* * This does for both the static policy metadata entry, and the runtime metadata * handling object. */ typedef struct lws_ss_metadata { struct lws_ss_metadata *next; const char *name; void *value__may_own_heap; size_t length; uint8_t value_length; /* only valid if set by policy */ uint8_t value_is_http_token; /* valid if set by policy */ #if defined(LWS_WITH_SS_DIRECT_PROTOCOL_STR) uint8_t name_on_lws_heap:1; /* proxy metatadata does this */ #endif uint8_t value_on_lws_heap:1; /* proxy + rx metadata does this */ #if defined(LWS_WITH_SECURE_STREAMS_PROXY_API) uint8_t pending_onward:1; #endif } lws_ss_metadata_t; typedef struct lws_ss_http_respmap { uint16_t resp; /* the http response code */ uint16_t state; /* low 16-bits of associated state */ } lws_ss_http_respmap_t; /* * This is a mapping between an auth streamtype and a name and other information * that can be independently instantiated. Other streamtypes can indicate they * require this authentication on their connection. */ typedef struct lws_ss_auth { struct lws_ss_auth *next; const char *name; const char *type; const char *streamtype; uint8_t blob_index; } lws_ss_auth_t; /** * lws_ss_policy_t: policy database entry for a stream type * * Decides the system policy for how to implement connections of name * .streamtype. * * Streams may need one kind of auth sequencing for the network connection and * another kind of auth sequencing for the streams that are carried inside it, * this is the purpose of .nauth and .sauth. Both are optional and may be NULL. * * An array of these is set at context creation time, ending with one with a * NULL streamtype. */ typedef struct lws_ss_policy { struct lws_ss_policy *next; const char *streamtype; /**< stream type lhs to match on */ const char *endpoint; /**< DNS address to connect to */ const char *rideshare_streamtype; /**< optional transport * on another, preexisting stream of this * streamtype name */ const char *payload_fmt; const char *socks5_proxy; lws_ss_metadata_t *metadata; /* linked-list of metadata */ const lws_metric_policy_t *metrics; /* linked-list of metric policies */ const lws_ss_auth_t *auth; /* NULL or auth object we bind to */ /* protocol-specific connection policy details */ union { #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) || defined(LWS_ROLE_WS) /* details for http-related protocols... */ struct { /* common to all http-related protocols */ const char *method; const char *url; const char *multipart_name; const char *multipart_filename; const char *multipart_content_type; const char *blob_header[_LWSSS_HBI_COUNT]; const char *auth_preamble; const lws_ss_http_respmap_t *respmap; union { // struct { /* LWSSSP_H1 */ // } h1; // struct { /* LWSSSP_H2 */ // } h2; struct { /* LWSSSP_WS */ const char *subprotocol; uint8_t binary; /* false = TEXT, true = BINARY */ } ws; } u; uint16_t resp_expect; uint8_t count_respmap; uint8_t fail_redirect:1; } http; #endif #if defined(LWS_ROLE_MQTT) struct { const char *topic; /* stream sends on this topic */ const char *subscribe; /* stream subscribes to this topic */ const char *will_topic; const char *will_message; const char *birth_topic; const char *birth_message; uint16_t keep_alive; uint8_t qos; uint8_t clean_start; uint8_t will_qos; uint8_t will_retain; uint8_t birth_qos; uint8_t birth_retain; uint8_t aws_iot; uint8_t retain; } mqtt; #endif /* details for non-http related protocols... */ } u; #if defined(LWS_WITH_SSPLUGINS) const struct lws_ss_plugin *plugins[2]; /**< NULL or auth plugin */ const void *plugins_info[2]; /**< plugin-specific data */ #endif #if defined(LWS_WITH_SECURE_STREAMS_AUTH_SIGV4) /* directly point to the metadata name, no need to expand */ const char *aws_region; const char *aws_service; #endif /* * We're either a client connection policy that wants a trust store, * or we're a server policy that wants a mem cert and key... Hold * these mutually-exclusive things in a union. */ union { const lws_ss_trust_store_t *store; /**< CA certs needed for conn validation, only set between * policy parsing and vhost creation */ struct { const lws_ss_x509_t *cert; /**< the server's signed cert with the pubkey */ const lws_ss_x509_t *key; /**< the server's matching private key */ } server; } trust; const lws_retry_bo_t *retry_bo; /**< retry policy to use */ uint32_t proxy_buflen; /**< max dsh alloc for proxy */ uint32_t proxy_buflen_rxflow_on_above; uint32_t proxy_buflen_rxflow_off_below; uint32_t client_buflen; /**< max dsh alloc for client */ uint32_t client_buflen_rxflow_on_above; uint32_t client_buflen_rxflow_off_below; uint32_t timeout_ms; /**< default message response * timeout in ms */ uint32_t flags; /**< stream attribute flags */ uint16_t port; /**< endpoint port */ uint8_t metadata_count; /**< metadata count */ uint8_t protocol; /**< protocol index */ uint8_t client_cert; /**< which client cert to apply 0 = none, 1+ = cc 0+ */ uint8_t priority; /* 0 = normal, 6 = max normal, * 7 = network management */ } lws_ss_policy_t; #if !defined(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY) /* * These only exist / have meaning if there's a dynamic JSON policy enabled */ LWS_VISIBLE LWS_EXTERN int lws_ss_policy_parse_begin(struct lws_context *context, int overlay); LWS_VISIBLE LWS_EXTERN int lws_ss_policy_parse_abandon(struct lws_context *context); LWS_VISIBLE LWS_EXTERN int lws_ss_policy_parse(struct lws_context *context, const uint8_t *buf, size_t len); LWS_VISIBLE LWS_EXTERN int lws_ss_policy_overlay(struct lws_context *context, const char *overlay); /* * You almost certainly don't want these, they return the first policy or auth * object in a linked-list of objects created by lws_ss_policy_parse above, * they are exported to generate static policy with */ LWS_VISIBLE LWS_EXTERN const lws_ss_policy_t * lws_ss_policy_get(struct lws_context *context); LWS_VISIBLE LWS_EXTERN const lws_ss_auth_t * lws_ss_auth_get(struct lws_context *context); #endif libwebsockets-4.3.5/include/libwebsockets/lws-secure-streams.h000066400000000000000000000746511476025525100246100ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * included from libwebsockets.h * * * Secure Streams is a *payload-only* client communication channel where all the * details about the connection are held in a systemwide policy database and * are keyed by the streamtype field... the user of the communication channel * does not know or manage the choice of endpoint, tls CA, or even wire * protocol. The advantage is he then does not have any dependency on any of * those and they can be changed just by changing the policy database without * touching the code using the stream. * * There are two ways secure streams interfaces to user code: * * 1) [Linux / RTOS] the natural, smallest interface is to call back to user * code that only operates directly from the lws event loop thread context * (direct callbacks from lws_ss_t) * * lws_thread( [user code] ---- lws ) * * 2) [Linux] where the user code is in a different process and communicates * asynchronously via a proxy socket * * user_process{ [user code] | shim | socket-}------ lws_process{ lws } * * In the second, IPC, case, all packets are prepended by one or more bytes * indicating the packet type and serializing any associated data, known as * Serialized Secure Streams or SSS. * * Serialized Secure Streams * ------------------------- * * On the transport, adjacent packets may be coalesced, that is, the original * packet sizes are lost and two or more packets are combined. For that reason * the serialization format always contains a 1-byte type and then a 2-byte * frame length. * * Client to proxy * * - Proxied connection setup * * - 0: LWSSS_SER_TXPRE_STREAMTYPE * - 1: 2-byte MSB-first rest-of-frame length * - 3: 1-byte Client SSS protocol version (introduced in SSSv1) * - 4: 4-byte Client PID (introduced in SSSv1) * - 8: 4-byte MSB-first initial tx credit * - 12: the streamtype name with no NUL * * - Proxied tx * * - 0: LWSSS_SER_TXPRE_TX_PAYLOAD * - 1: 2 byte MSB-first rest-of-frame length * - 3: 4-byte MSB-first flags * - 7: 4-byte MSB-first us between client requested write and wrote to proxy * - 11: 8-byte MSB-first us resolution unix time client wrote to proxy * - 19: payload * * - Proxied secure stream destroy * * - 0: LWSSS_SER_TXPRE_DESTROYING * - 1: 00, 00 * * - Proxied metadata - sent when one metadata item set clientside * * - 0: LWSSS_SER_TXPRE_METADATA * - 1: 2-byte MSB-first rest-of-frame length * - 3: 1-byte metadata name length * - 4: metadata name * - ...: metadata value (for rest of packet) * * - TX credit management - sent when using tx credit apis, cf METADATA * * - 0: LWSSS_SER_TXPRE_TXCR_UPDATE * - 1: 2-byte MSB-first rest-of-frame length 00, 04 * - 3: 4-byte additional tx credit adjust value * * - Stream timeout management - forwarded when user applying or cancelling t.o. * * - 0: LWSSS_SER_TXPRE_TIMEOUT_UPDATE * - 1: 2-byte MSB-first rest-of-frame length 00, 04 * - 3: 4-byte MSB-first unsigned 32-bit timeout, 0 = use policy, -1 = cancel * * - Passing up payload length hint * * - 0: LWSSS_SER_TXPRE_PAYLOAD_LENGTH_HINT * - 1: 2-byte MSB-first rest-of-frame length 00, 04 * - 3: 4-byte MSB-first unsigned 32-bit payload length hint * * Proxy to client * * - Proxied connection setup result * * - 0: LWSSS_SER_RXPRE_CREATE_RESULT * - 1: 2 byte MSB-first rest-of-frame length (usually 00, 03) * - 3: 1 byte result, 0 = success. On failure, proxy will close connection. * - 4: 4 byte client dsh allocation recommended for stream type, from policy * (introduced in SSSv1) * - 8: 2 byte MSB-first initial tx credit * - 10: if present, comma-sep list of rideshare types from policy * * - Proxied rx * * - 0: LWSSS_SER_RXPRE_RX_PAYLOAD * - 1: 2 byte MSB-first rest-of-frame length * - 3: 4-byte MSB-first flags * - 7: 4-byte MSB-first us between inbound read and wrote to client * - 11: 8-byte MSB-first us resolution unix time proxy wrote to client * - 17: (rideshare name len + rideshare name if flags & LWSSS_FLAG_RIDESHARE) * payload * * - Proxied tx credit * * - 0: LWSSS_SER_RXPRE_TXCR_UPDATE * - 1: 00, 04 * - 3: 4-byte MSB-first addition tx credit bytes * * - Proxied rx metadata * * - 0: LWSSS_SER_RXPRE_METADATA * - 1: 2-byte MSB-first rest-of-frame length * - 3: 1-byte metadata name length * - 4: metadata name * - ...: metadata value (for rest of packet) * * - Proxied state (8 or 11 byte packet) * * - 0: LWSSS_SER_RXPRE_CONNSTATE * - 1: 00, 05 if state < 256, else 00, 08 * - 3: 1 byte state index if state < 256, else 4-byte MSB-first state index * - 4 or 7: 4-byte MSB-first ordinal * * - Proxied performance information * * - 0: LWSSS_SER_RXPRE_PERF * - 1: 2-byte MSB-first rest-of-frame length * - 3: ... performance JSON (for rest of packet) * * Proxied tx may be read by the proxy but rejected due to lack of buffer space * at the proxy. For that reason, tx must be held at the sender until it has * been acknowledged or denied. * * Sinks * ----- * * Sinks are logical "servers", you can register as a sink for a particular * streamtype by using the lws_ss_create() api with ssi->register_sink set to 1. * * For directly fulfilled Secure Streams, new streams of that streamtype bind * to the rx, tx and state handlers given when it was registered. * * - When new streams are created the registered sink handler for (*state) is * called with event LWSSSCS_SINK_JOIN and the new client stream handle in * the h_src parameter. * * - When the client stream sends something to the sink, it calls the sink's * (*rx) with the client stream's */ /** \defgroup secstr Secure Streams * ##Secure Streams * * Secure Streams related apis */ ///@{ #define LWS_SS_MTU 1540 struct lws_ss_handle; typedef uint32_t lws_ss_tx_ordinal_t; /* * connection state events * * If you add states, take care about the state names and state transition * validity enforcement tables too */ typedef enum { /* zero means unset */ LWSSSCS_CREATING = 1, LWSSSCS_DISCONNECTED, LWSSSCS_UNREACHABLE, /* oridinal arg = 1 = caused by dns * server reachability failure */ LWSSSCS_AUTH_FAILED, LWSSSCS_CONNECTED, LWSSSCS_CONNECTING, LWSSSCS_DESTROYING, LWSSSCS_POLL, LWSSSCS_ALL_RETRIES_FAILED, /* all retries in bo policy failed */ LWSSSCS_QOS_ACK_REMOTE, /* remote peer received and acked tx */ LWSSSCS_QOS_NACK_REMOTE, LWSSSCS_QOS_ACK_LOCAL, /* local proxy accepted our tx */ LWSSSCS_QOS_NACK_LOCAL, /* local proxy refused our tx */ LWSSSCS_TIMEOUT, /* optional timeout timer fired */ LWSSSCS_SERVER_TXN, LWSSSCS_SERVER_UPGRADE, /* the server protocol upgraded */ LWSSSCS_EVENT_WAIT_CANCELLED, /* somebody called lws_cancel_service */ LWSSSCS_UPSTREAM_LINK_RETRY, /* if we are being proxied over some * intermediate link, this transient * state may be sent to indicate we are * waiting to establish that link before * creation can proceed.. ack is the * number of ms we have been trying */ LWSSSCS_SINK_JOIN, /* sinks get this when a new source * stream joins the sink */ LWSSSCS_SINK_PART, /* sinks get this when a new source * stream leaves the sink */ LWSSSCS_USER_BASE = 1000 } lws_ss_constate_t; enum { LWSSS_FLAG_SOM = (1 << 0), /* payload contains the start of new message */ LWSSS_FLAG_EOM = (1 << 1), /* payload contains the end of message */ LWSSS_FLAG_POLL = (1 << 2), /* Not a real transmit... poll for rx if protocol needs it */ LWSSS_FLAG_RELATED_START = (1 << 3), /* Appears in a zero-length message indicating a message group of zero * or more messages is now starting. */ LWSSS_FLAG_RELATED_END = (1 << 4), /* Appears in a zero-length message indicating a message group of zero * or more messages has now finished. */ LWSSS_FLAG_RIDESHARE = (1 << 5), /* Serialized payload starts with non-default rideshare name length and * name string without NUL, then payload */ LWSSS_FLAG_PERF_JSON = (1 << 6), /* This RX is JSON performance data, only on streams with "perf" flag * set */ /* * In the case the secure stream is proxied across a process or thread * boundary, eg by proxying through a socket for IPC, metadata must be * carried in-band. A byte is prepended to each rx payload to * differentiate what it is. * * Secure streams where the user is called back directly does not need * any of this and only pure payloads are passed. * * rx (received by client) prepends for proxied connections */ LWSSS_SER_RXPRE_RX_PAYLOAD = 0x55, LWSSS_SER_RXPRE_CREATE_RESULT, LWSSS_SER_RXPRE_CONNSTATE, LWSSS_SER_RXPRE_TXCR_UPDATE, LWSSS_SER_RXPRE_METADATA, LWSSS_SER_RXPRE_TLSNEG_ENCLAVE_SIGN, LWSSS_SER_RXPRE_PERF, /* tx (send by client) prepends for proxied connections */ LWSSS_SER_TXPRE_STREAMTYPE = 0xaa, LWSSS_SER_TXPRE_ONWARD_CONNECT, LWSSS_SER_TXPRE_DESTROYING, LWSSS_SER_TXPRE_TX_PAYLOAD, LWSSS_SER_TXPRE_METADATA, LWSSS_SER_TXPRE_TXCR_UPDATE, LWSSS_SER_TXPRE_TIMEOUT_UPDATE, LWSSS_SER_TXPRE_PAYLOAD_LENGTH_HINT, LWSSS_SER_TXPRE_TLSNEG_ENCLAVE_SIGNED, }; typedef enum { LPCSPROX_WAIT_INITIAL_TX = 1, /* after connect, must send streamtype */ LPCSPROX_REPORTING_FAIL, /* stream creation failed, wait to to tell */ LPCSPROX_REPORTING_OK, /* stream creation succeeded, wait to to tell */ LPCSPROX_OPERATIONAL, /* ready for payloads */ LPCSPROX_DESTROYED, LPCSCLI_SENDING_INITIAL_TX, /* after connect, must send streamtype */ LPCSCLI_WAITING_CREATE_RESULT, /* wait to hear if proxy ss create OK */ LPCSCLI_LOCAL_CONNECTED, /* we are in touch with the proxy */ LPCSCLI_ONWARD_CONNECT, /* request onward ss connection */ LPCSCLI_OPERATIONAL, /* ready for payloads */ } lws_ss_conn_states_t; /* * Returns from state() callback can tell the caller what the user code * wants to do */ typedef enum lws_ss_state_return { LWSSSSRET_TX_DONT_SEND = 1, /* (*tx) only, or failure */ LWSSSSRET_OK = 0, /* no error */ LWSSSSRET_DISCONNECT_ME = -1, /* caller should disconnect us */ LWSSSSRET_DESTROY_ME = -2, /* caller should destroy us */ } lws_ss_state_return_t; /** * lws_ss_info_t: information about stream to be created * * Prepare this struct with information about what the stream type is and how * the stream should interface with your code, and pass it to lws_ss_create() * to create the requested stream. */ enum { LWSSSINFLAGS_REGISTER_SINK = (1 << 0), /**< If set, we're not creating a specific stream, but registering * ourselves as the "sink" for .streamtype. It's analogous to saying * we want to be the many-to-one "server" for .streamtype; when other * streams are created with that streamtype, they should be forwarded * to this stream owner, where they join and part from the sink via * (*state) LWSSSCS_SINK_JOIN / _PART events, the new client handle * being provided in the h_src parameter. */ LWSSSINFLAGS_PROXIED = (1 << 1), /**< Set if the stream is being created as a stand-in at the proxy */ LWSSSINFLAGS_SERVER = (1 << 2), /**< Set on the server object copy of the ssi / info to indicate that * stream creation using this ssi is for Accepted connections belonging * to a server */ LWSSSINFLAGS_ACCEPTED = (1 << 3), /**< Set on the accepted object copy of the ssi / info to indicate that * we are an accepted connection from a server's listening socket */ }; typedef lws_ss_state_return_t (*lws_sscb_rx)(void *userobj, const uint8_t *buf, size_t len, int flags); typedef lws_ss_state_return_t (*lws_sscb_tx)(void *userobj, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len, int *flags); typedef lws_ss_state_return_t (*lws_sscb_state)(void *userobj, void *h_src, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack); #if defined(LWS_WITH_SECURE_STREAMS_BUFFER_DUMP) typedef void (*lws_ss_buffer_dump_cb)(void *userobj, const uint8_t *buf, size_t len, int done); #endif struct lws_ss_policy; typedef struct lws_ss_info { const char *streamtype; /**< type of stream we want to create */ size_t user_alloc; /**< size of user allocation */ size_t handle_offset; /**< offset of handle stg in user_alloc type, set to offsetof(mytype, my_handle_member) */ size_t opaque_user_data_offset; /**< offset of opaque user data ptr in user_alloc type, set to offsetof(mytype, opaque_ud_member) */ #if defined(LWS_WITH_SECURE_STREAMS_CPP) const struct lws_ss_policy *policy; /**< Normally NULL, or a locally-generated policy to apply to this * connection instead of a named streamtype */ #endif #if defined(LWS_WITH_SYS_FAULT_INJECTION) lws_fi_ctx_t fic; /**< Attach external Fault Injection context to the stream, hierarchy * is ss->context */ #endif lws_sscb_rx rx; /**< callback with rx payload for this stream */ lws_sscb_tx tx; /**< callback to send payload on this stream... 0 = send as set in * len and flags, 1 = do not send anything (ie, not even 0 len frame) */ lws_sscb_state state; /**< advisory cb about state of stream and QoS status if applicable... * h_src is only used with sinks and LWSSSCS_SINK_JOIN/_PART events. * Return nonzero to indicate you want to destroy the stream. */ #if defined(LWS_WITH_SECURE_STREAMS_BUFFER_DUMP) lws_ss_buffer_dump_cb dump; /**< cb to record needed protocol buffer data*/ #endif int manual_initial_tx_credit; /**< 0 = manage any tx credit automatically, nonzero explicitly sets the * peer stream to have the given amount of tx credit, if the protocol * can support it. * * In the special case of _lws_smd streamtype, this is used to indicate * the connection's rx class mask. * */ uint32_t client_pid; /**< used in proxy / serialization case to hold the client pid this * proxied connection is to be tagged with */ uint8_t flags; uint8_t sss_protocol_version; /**< used in proxy / serialization case to hold the SS serialization * protocol level to use with this peer... clients automatically request * the most recent version they were built with * (LWS_SSS_CLIENT_PROTOCOL_VERSION) and the proxy stores the requested * version in here */ } lws_ss_info_t; /** * lws_ss_create() - Create secure stream * * \param context: the lws context to create this inside * \param tsi: service thread index to create on (normally 0) * \param ssi: pointer to lws_ss_info_t filled in with info about desired stream * \param opaque_user_data: opaque data to set in the stream's user object * \param ppss: pointer to secure stream handle pointer set on exit * \param ppayload_fmt: NULL or pointer to a string ptr to take payload format * name from the policy * * Requests a new secure stream described by \p ssi be created. If successful, * the stream is created, its state callback called with LWSSSCS_CREATING, \p *ppss * is set to point to the handle, and it returns 0. If it failed, it returns * nonzero. * * Along with the opaque stream object, streams overallocate * * 1) a user data struct whose size is set in ssi * 2) nauth plugin instantiation data (size set in the plugin struct) * 3) sauth plugin instantiation data (size set in the plugin struct) * 4) space for a copy of the stream type name * * The user data struct is initialized to all zeros, then the .handle_offset and * .opaque_user_data_offset fields of the ssi are used to prepare the user data * struct with the ss handle that was created, and a copy of the * opaque_user_data pointer given as an argument. * * If you want to set up the stream with specific information, point to it in * opaque_user_data and use the copy of that pointer in your user data member * for it starting from the LWSSSCS_CREATING state call. * * Since different endpoints chosen by the policy may require different payload * formats, \p ppayload_fmt is set to point to the name of the needed payload * format from the policy database if non-NULL. */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_ss_create(struct lws_context *context, int tsi, const lws_ss_info_t *ssi, void *opaque_user_data, struct lws_ss_handle **ppss, struct lws_sequencer *seq_owner, const char **ppayload_fmt); /** * lws_ss_destroy() - Destroy secure stream * * \param ppss: pointer to lws_ss_t pointer to be destroyed * * Destroys the lws_ss_t pointed to by \p *ppss, and sets \p *ppss to NULL. */ LWS_VISIBLE LWS_EXTERN void lws_ss_destroy(struct lws_ss_handle **ppss); /** * lws_ss_request_tx() - Schedule stream for tx * * \param pss: pointer to lws_ss_t representing stream that wants to transmit * * Schedules a write on the stream represented by \p pss. When it's possible to * write on this stream, the \p *tx callback will occur with an empty buffer for * the stream owner to fill in. * * Returns 0 or LWSSSSRET_DESTROY_ME */ LWS_VISIBLE LWS_EXTERN lws_ss_state_return_t LWS_WARN_UNUSED_RESULT lws_ss_request_tx(struct lws_ss_handle *pss); /** * lws_ss_request_tx() - Schedule stream for tx * * \param pss: pointer to lws_ss_t representing stream that wants to transmit * \param len: the length of the write in bytes * * Schedules a write on the stream represented by \p pss. When it's possible to * write on this stream, the \p *tx callback will occur with an empty buffer for * the stream owner to fill in. * * This api variant should be used when it's possible the payload will go out * over h1 with x-web-form-urlencoded or similar Content-Type. */ LWS_VISIBLE LWS_EXTERN lws_ss_state_return_t LWS_WARN_UNUSED_RESULT lws_ss_request_tx_len(struct lws_ss_handle *pss, unsigned long len); /** * lws_ss_client_connect() - Attempt the client connect * * \param h: secure streams handle * * Starts the connection process for the secure stream. * * Can return any of the lws_ss_state_return_t values depending on user * state callback returns. * * LWSSSSRET_OK means the connection is ongoing. * */ LWS_VISIBLE LWS_EXTERN lws_ss_state_return_t LWS_WARN_UNUSED_RESULT lws_ss_client_connect(struct lws_ss_handle *h); /** * lws_ss_get_sequencer() - Return parent sequencer pointer if any * * \param h: secure streams handle * * Returns NULL if the secure stream is not associated with a sequencer. * Otherwise returns a pointer to the owning sequencer. You can use this to * identify which sequencer to direct messages to, from the secure stream * callback. */ LWS_VISIBLE LWS_EXTERN struct lws_sequencer * lws_ss_get_sequencer(struct lws_ss_handle *h); /** * lws_ss_proxy_create() - Start a unix domain socket proxy for Secure Streams * * \param context: lws_context * \param bind: if port is 0, unix domain path with leading @ for abstract. * if port nonzero, NULL, or network interface to bind listen to * \param port: tcp port to listen on * * Creates a vhost that listens either on an abstract namespace unix domain * socket (port = 0) or a tcp listen socket (port nonzero). If bind is NULL * and port is 0, the abstract unix domain socket defaults to "proxy.ss.lws". * * Client connections to this proxy to Secure Streams are fulfilled using the * policy local to the proxy and the data passed between the client and the * proxy using serialized Secure Streams protocol. */ LWS_VISIBLE LWS_EXTERN int lws_ss_proxy_create(struct lws_context *context, const char *bind, int port); /** * lws_ss_state_name() - convenience helper to get a printable conn state name * * \param state: the connection state index * * Returns a printable name for the connection state index passed in. */ LWS_VISIBLE LWS_EXTERN const char * lws_ss_state_name(int state); /** * lws_ss_get_context() - convenience helper to recover the lws context * * \param h: secure streams handle * * Returns the lws context. Dispenses with the need to pass a copy of it into * your secure streams handler. */ LWS_VISIBLE LWS_EXTERN struct lws_context * lws_ss_get_context(struct lws_ss_handle *h); #define LWSSS_TIMEOUT_FROM_POLICY 0 /** * lws_ss_start_timeout() - start or restart the timeout on the stream * * \param h: secure streams handle * \param timeout_ms: LWSSS_TIMEOUT_FROM_POLICY for policy value, else use timeout_ms * * Starts or restarts the stream's own timeout timer. If the specified time * passes without lws_ss_cancel_timeout() being called on the stream, then the * stream state callback receives LWSSSCS_TIMEOUT * * The process being protected by the timeout is up to the user code, it may be * arbitrarily long and cross multiple protocol transactions or involve other * streams. It's up to the user to decide when to start and when / if to cancel * the stream timeout. */ LWS_VISIBLE LWS_EXTERN void lws_ss_start_timeout(struct lws_ss_handle *h, unsigned int timeout_ms); /** * lws_ss_cancel_timeout() - remove any timeout on the stream * * \param h: secure streams handle * * Disable any timeout that was applied to the stream by lws_ss_start_timeout(). */ LWS_VISIBLE LWS_EXTERN void lws_ss_cancel_timeout(struct lws_ss_handle *h); /** * lws_ss_to_user_object() - convenience helper to get user object from handle * * \param h: secure streams handle * * Returns the user allocation related to the handle. Normally you won't need * this since it's available in the rx, tx and state callbacks as "userdata" * already. */ LWS_VISIBLE LWS_EXTERN void * lws_ss_to_user_object(struct lws_ss_handle *h); /** * lws_ss_rideshare() - find the current streamtype when types rideshare * * \param h: the stream handle * * Under some conditions, the payloads may be structured using protocol- * specific formatting, eg, http multipart mime. It's possible to map the * logical partitions in the payload to different stream types using * the policy "rideshare" feature. * * This api lets the callback code find out which rideshare stream type the * current payload chunk belongs to. */ LWS_VISIBLE LWS_EXTERN const char * lws_ss_rideshare(struct lws_ss_handle *h); /** * lws_ss_set_metadata() - allow user to bind external data to defined ss metadata * * \param h: secure streams handle * \param name: metadata name from the policy * \param value: pointer to user-managed data to bind to name * \param len: length of the user-managed data in value * * Binds user-managed data to the named metadata item from the ss policy. * If present, the metadata item is handled in a protocol-specific way using * the associated policy information. For example, in the policy * * "\"metadata\":" "[" * "{\"uptag\":" "\"X-Upload-Tag:\"}," * "{\"ctype\":" "\"Content-Type:\"}," * "{\"xctype\":" "\"\"}" * "]," * * when the policy is using h1 is interpreted to add h1 headers of the given * name with the value of the metadata on the left. * * Return 0 if OK or nonzero if, eg, metadata name does not exist on the * streamtype. You must check the result of this, eg, transient OOM can cause * these to fail and you should retry later. */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_ss_set_metadata(struct lws_ss_handle *h, const char *name, const void *value, size_t len); /** * lws_ss_alloc_set_metadata() - copy data and bind to ss metadata * * \param h: secure streams handle * \param name: metadata name from the policy * \param value: pointer to user-managed data to bind to name * \param len: length of the user-managed data in value * * Same as lws_ss_set_metadata(), but allocates a heap buffer for the data * first and takes a copy of it, so the original can go out of scope * immediately after. */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_ss_alloc_set_metadata(struct lws_ss_handle *h, const char *name, const void *value, size_t len); /** * lws_ss_get_metadata() - get current value of stream metadata item * * \param h: secure streams handle * \param name: metadata name from the policy * \param value: pointer to pointer to be set to point at the value * \param len: pointer to size_t to set to the length of the value * * Binds user-managed data to the named metadata item from the ss policy. * If present, the metadata item is handled in a protocol-specific way using * the associated policy information. For example, in the policy * * "\"metadata\":" "[" * "{\"uptag\":" "\"X-Upload-Tag:\"}," * "{\"ctype\":" "\"Content-Type:\"}," * "{\"xctype\":" "\"\"}" * "]," * * when the policy is using h1 is interpreted to add h1 headers of the given * name with the value of the metadata on the left. * * Return 0 if \p *value and \p *len set OK, or nonzero if, eg, metadata \p name does * not exist on the streamtype. * * The pointed-to values may only exist until the next time around the event * loop. */ LWS_VISIBLE LWS_EXTERN int lws_ss_get_metadata(struct lws_ss_handle *h, const char *name, const void **value, size_t *len); /** * lws_ss_server_ack() - indicate how we feel about what the server has sent * * \param h: ss handle of accepted connection * \param nack: 0 means we are OK with it, else some problem * * For SERVER secure streams * * Depending on the protocol, the server sending us something may be * transactional, ie, built into it sending something is the idea we will * respond somehow out-of-band; HTTP is like this with, eg, 200 response code. * * Calling this with nack=0 indicates that when we later respond, we want to * acknowledge the transaction (eg, it means a 200 if http underneath), if * nonzero that the transaction should act like it failed. * * If the underlying protocol doesn't understand transactions (eg, ws) then this * has no effect either way. */ LWS_VISIBLE LWS_EXTERN void lws_ss_server_ack(struct lws_ss_handle *h, int nack); typedef void (*lws_sssfec_cb)(struct lws_ss_handle *h, void *arg); /** * lws_ss_server_foreach_client() - callback for each live client connected to server * * \param h: server ss handle * \param cb: the callback * \param arg: arg passed to callback * * For SERVER secure streams * * Call the callback \p cb once for each client ss connected to the server, * passing \p arg as an additional callback argument each time. */ LWS_VISIBLE LWS_EXTERN void lws_ss_server_foreach_client(struct lws_ss_handle *h, lws_sssfec_cb cb, void *arg); /** * lws_ss_change_handlers() - helper for dynamically changing stream handlers * * \param h: ss handle * \param rx: the new RX handler * \param tx: the new TX handler * \param state: the new state handler * * Handlers set to NULL are left unchanged. * * This works on any handle, client or server and takes effect immediately. * * Depending on circumstances this may be helpful when * * a) a server stream undergoes an LWSSSCS_SERVER_UPGRADE (as in http -> ws) and * the payloads in the new protocol have a different purpose that is best * handled in their own rx and tx callbacks, and * * b) you may want to serve several different, possibly large things based on * what was requested. Setting a customized handler allows clean encapsulation * of the different serving strategies. * * If the stream is long-lived, like ws, you should set the changed handler back * to the default when the transaction wanting it is completed. */ LWS_VISIBLE LWS_EXTERN void lws_ss_change_handlers(struct lws_ss_handle *h, lws_sscb_rx rx, lws_sscb_tx tx, lws_sscb_state state); /** * lws_ss_add_peer_tx_credit() - allow peer to transmit more to us * * \param h: secure streams handle * \param add: additional tx credit (signed) * * Indicate to remote peer that we can accept \p add bytes more payload being * sent to us. */ LWS_VISIBLE LWS_EXTERN int lws_ss_add_peer_tx_credit(struct lws_ss_handle *h, int32_t add); /** * lws_ss_get_est_peer_tx_credit() - get our current estimate of peer's tx credit * * \param h: secure streams handle * * Based on what credit we gave it, and what we have received, report our * estimate of peer's tx credit usable to transmit to us. This may be outdated * in that some or all of its credit may already have been expended by sending * stuff to us that is in flight already. */ LWS_VISIBLE LWS_EXTERN int lws_ss_get_est_peer_tx_credit(struct lws_ss_handle *h); LWS_VISIBLE LWS_EXTERN const char * lws_ss_tag(struct lws_ss_handle *h); #if defined(LWS_WITH_SECURE_STREAMS_AUTH_SIGV4) /** * lws_ss_sigv4_set_aws_key() - set aws credential into system blob * * \param context: lws_context * \param idx: the system blob index specified in the policy, currently * up to 4 blobs. * \param keyid: aws access keyid * \param key: aws access key * * Return 0 if OK or nonzero if e.g. idx is invalid; system blob heap appending * fails. */ LWS_VISIBLE LWS_EXTERN int lws_ss_sigv4_set_aws_key(struct lws_context* context, uint8_t idx, const char * keyid, const char * key); /** * lws_aws_filesystem_credentials_helper() - read aws credentials from file * * \param path: path to read, ~ at start is converted to $HOME contents if any * \param kid: eg, "aws_access_key_id" * \param ak: eg, "aws_secret_access_key" * \param aws_keyid: pointer to pointer for allocated keyid from credentials file * \param aws_key: pointer to pointer for allocated key from credentials file * * Return 0 if both *aws_keyid and *aws_key allocated from the config file, else * nonzero, and neither *aws_keyid or *aws_key are allocated. * * If *aws_keyid and *aws_key are set, it's the user's responsibility to * free() them when they are no longer needed. */ LWS_VISIBLE LWS_EXTERN int lws_aws_filesystem_credentials_helper(const char *path, const char *kid, const char *ak, char **aws_keyid, char **aws_key); #endif ///@} libwebsockets-4.3.5/include/libwebsockets/lws-sequencer.h000066400000000000000000000225041476025525100236260ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * lws_sequencer is intended to help implement sequences that: * * - outlive a single connection lifetime, * - are not associated with a particular protocol, * - are not associated with a particular vhost, * - must receive and issue events inside the event loop * * lws_sequencer-s are bound to a pt (per-thread) which for the default case of * one service thread is the same as binding to an lws_context. */ /* * retry backoff table... retry n happens after .retry_ms_table[n] ms, with * the last entry used if n is greater than the number of entries. * * The first .conceal_count retries are concealed, but after that the failures * are reported. */ typedef enum { LWSSEQ_CREATED, /* sequencer created */ LWSSEQ_DESTROYED, /* sequencer destroyed */ LWSSEQ_TIMED_OUT, /* sequencer timeout */ LWSSEQ_HEARTBEAT, /* 1Hz callback */ LWSSEQ_WSI_CONNECTED, /* wsi we bound to us has connected */ LWSSEQ_WSI_CONN_FAIL, /* wsi we bound to us has failed to connect */ LWSSEQ_WSI_CONN_CLOSE, /* wsi we bound to us has closed */ LWSSEQ_SS_STATE_BASE, /* secure streams owned by a sequencer provide * automatic messages about state changes on * the sequencer, passing the oridinal in the * event argument field. The message index is * LWSSEQ_SS_STATE_BASE + the enum from * lws_ss_constate_t */ LWSSEQ_USER_BASE = 100 /* define your events from here */ } lws_seq_events_t; typedef enum lws_seq_cb_return { LWSSEQ_RET_CONTINUE, LWSSEQ_RET_DESTROY } lws_seq_cb_return_t; /* * handler for this sequencer. Return 0 if OK else nonzero to destroy the * sequencer. LWSSEQ_DESTROYED will be called back to the handler so it can * close / destroy any private assets associated with the sequence. * * The callback may return either LWSSEQ_RET_CONTINUE for the sequencer to * resume or LWSSEQ_RET_DESTROY to indicate the sequence is finished. * * Event indexes consist of some generic ones but mainly user-defined ones * starting from LWSSEQ_USER_BASE. */ typedef lws_seq_cb_return_t (*lws_seq_event_cb)(struct lws_sequencer *seq, void *user, int event, void *data, void *aux); typedef struct lws_seq_info { struct lws_context *context; /* lws_context for seq */ int tsi; /* thread service idx */ size_t user_size; /* size of user alloc */ void **puser; /* place ptr to user */ lws_seq_event_cb cb; /* seq callback */ const char *name; /* seq name */ const lws_retry_bo_t *retry; /* retry policy */ uint8_t wakesuspend:1; /* important enough to * wake system */ } lws_seq_info_t; /** * lws_seq_create() - create and bind sequencer to a pt * * \param info: information about sequencer to create * * This binds an abstract sequencer to a per-thread (by default, the single * event loop of an lws_context). After the event loop starts, the sequencer * will receive an LWSSEQ_CREATED event on its callback from the event loop * context, where it can begin its sequence flow. * * Lws itself will only call the callback subsequently with LWSSEQ_DESTROYED * when the sequencer is being destroyed. * * pt locking is used to protect the related data structures. */ LWS_VISIBLE LWS_EXTERN struct lws_sequencer * lws_seq_create(lws_seq_info_t *info); /** * lws_seq_destroy() - destroy the sequencer * * \param seq: pointer to the the opaque sequencer pointer returned by * lws_seq_create() * * This proceeds to destroy the sequencer, calling LWSSEQ_DESTROYED and then * freeing the sequencer object itself. The pointed-to seq pointer will be * set to NULL. */ LWS_VISIBLE LWS_EXTERN void lws_seq_destroy(struct lws_sequencer **seq); /** * lws_seq_queue_event() - queue an event on the given sequencer * * \param seq: the opaque sequencer pointer returned by lws_seq_create() * \param e: the event index to queue * \param data: associated opaque (to lws) data to provide the callback * \param aux: second opaque data to provide the callback * * This queues the event on a given sequencer. Queued events are delivered one * per sequencer each subsequent time around the event loop, so the cb is called * from the event loop thread context. * * Notice that because the events are delivered in order from the event loop, * the scope of objects pointed to by \p data or \p aux may exceed the lifetime * of the thing containing the pointed-to data. So it's usually better to pass * values here. */ LWS_VISIBLE LWS_EXTERN int lws_seq_queue_event(struct lws_sequencer *seq, lws_seq_events_t e, void *data, void *aux); /** * lws_seq_check_wsi() - check if wsi still extant * * \param seq: the sequencer interested in the wsi * \param wsi: the wsi we want to confirm hasn't closed yet * * Check if wsi still extant, by peeking in the message queue for a * LWSSEQ_WSI_CONN_CLOSE message about wsi. (Doesn't need to do the same for * CONN_FAIL since that will never have produced any messages prior to that). * * Use this to avoid trying to perform operations on wsi that have already * closed but we didn't get to that message yet. * * Returns 0 if not closed yet or 1 if it has closed but we didn't process the * close message yet. */ LWS_VISIBLE LWS_EXTERN int lws_seq_check_wsi(struct lws_sequencer *seq, struct lws *wsi); #define LWSSEQTO_NONE 0 /** * lws_seq_timeout_us() - set a timeout by which the sequence must have * completed by a different event or inform the * sequencer * * \param seq: The sequencer to set the timeout on * \param us: How many us in the future to fire the timeout * LWS_SET_TIMER_USEC_CANCEL = cancel any existing timeout * * This api allows the sequencer to ask to be informed if it has not completed * or disabled its timeout after secs seconds. Lws will send a LWSSEQ_TIMED_OUT * event to the sequencer if the timeout expires. * * Typically the sequencer sets the timeout when starting a step, then waits to * hear a queued event informing it the step completed or failed. The timeout * provides a way to deal with the case the step neither completed nor failed * within the timeout period. * * Lws wsi timeouts are not really suitable for this since they are focused on * short-term protocol timeout protection and may be set and reset many times * in one transaction. Wsi timeouts also enforce closure of the wsi when they * trigger, sequencer timeouts have no side effect except to queue the * LWSSEQ_TIMED_OUT message and leave it to the sequencer to decide how to * react appropriately. */ LWS_VISIBLE LWS_EXTERN int lws_seq_timeout_us(struct lws_sequencer *seq, lws_usec_t us); /** * lws_seq_from_user(): get the lws_seq_t pointer from the user ptr * * \param u: the sequencer user allocation returned by lws_seq_create() or * provided in the sequencer callback * * This gets the lws_seq_t * from the sequencer user allocation pointer. * Actually these are allocated at the same time in one step, with the user * allocation immediately after the lws_seq_t, so lws can compute where * the lws_seq_t is from having the user allocation pointer. Since the * size of the lws_seq_t is unknown to user code, this helper does it for * you. */ LWS_VISIBLE LWS_EXTERN struct lws_sequencer * lws_seq_from_user(void *u); /** * lws_seq_us_since_creation(): elapsed seconds since sequencer created * * \param seq: pointer to the lws_seq_t * * Returns the number of us elapsed since the lws_seq_t was * created. This is useful to calculate sequencer timeouts for the current * step considering a global sequencer lifetime limit. */ LWS_VISIBLE LWS_EXTERN lws_usec_t lws_seq_us_since_creation(struct lws_sequencer *seq); /** * lws_seq_name(): get the name of this sequencer * * \param seq: pointer to the lws_seq_t * * Returns the name given when the sequencer was created. This is useful to * annotate logging when then are multiple sequencers in play. */ LWS_VISIBLE LWS_EXTERN const char * lws_seq_name(struct lws_sequencer *seq); /** * lws_seq_get_context(): get the lws_context sequencer was created on * * \param seq: pointer to the lws_seq_t * * Returns the lws_context. Saves you having to store it if you have a seq * pointer handy. */ LWS_VISIBLE LWS_EXTERN struct lws_context * lws_seq_get_context(struct lws_sequencer *seq); libwebsockets-4.3.5/include/libwebsockets/lws-service.h000066400000000000000000000167771476025525100233130ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /** \defgroup service Built-in service loop entry * * ##Built-in service loop entry * * If you're not using libev / libuv, these apis are needed to enter the poll() * wait in lws and service any connections with pending events. */ ///@{ /** * lws_service() - Service any pending websocket activity * \param context: Websocket context * \param timeout_ms: Set to 0; ignored; for backward compatibility * * This function deals with any pending websocket traffic, for three * kinds of event. It handles these events on both server and client * types of connection the same. * * 1) Accept new connections to our context's server * * 2) Call the receive callback for incoming frame data received by * server or client connections. * * Since v3.2 internally the timeout wait is ignored, the lws scheduler is * smart enough to stay asleep until an event is queued. */ LWS_VISIBLE LWS_EXTERN int lws_service(struct lws_context *context, int timeout_ms); /** * lws_service_tsi() - Service any pending websocket activity * * \param context: Websocket context * \param timeout_ms: Set to 0; ignored; for backwards compatibility * \param tsi: Thread service index, starting at 0 * * Same as lws_service(), but for a specific thread service index. Only needed * if you are spawning multiple service threads that operate on the same lws_context. */ LWS_VISIBLE LWS_EXTERN int lws_service_tsi(struct lws_context *context, int timeout_ms, int tsi); /** * lws_cancel_service_pt() - Cancel servicing of pending socket activity * on one thread * \param wsi: Cancel service on the thread this wsi is serviced by * * Same as lws_cancel_service(), but targets a single service thread, the one * the wsi belongs to. You probably want to use lws_cancel_service() instead. */ LWS_VISIBLE LWS_EXTERN void lws_cancel_service_pt(struct lws *wsi); /** * lws_cancel_service() - Cancel wait for new pending socket activity * \param context: Websocket context * * This function creates an immediate "synchronous interrupt" to the lws poll() * wait or event loop. As soon as possible in the serialzed service sequencing, * a LWS_CALLBACK_EVENT_WAIT_CANCELLED callback is sent to every protocol on * every vhost. * * lws_cancel_service() may be called from another thread while the context * exists, and its effect will be immediately serialized. */ LWS_VISIBLE LWS_EXTERN void lws_cancel_service(struct lws_context *context); /** * lws_service_fd() - Service polled socket with something waiting * \param context: Websocket context * \param pollfd: The pollfd entry describing the socket fd and which events * happened * * This function takes a pollfd that has POLLIN or POLLOUT activity and * services it according to the state of the associated * struct lws. * * The one call deals with all "service" that might happen on a socket * including listen accepts, http files as well as websocket protocol. * * If a pollfd says it has something, you can just pass it to * lws_service_fd() whether it is a socket handled by lws or not. * If it sees it is a lws socket, the traffic will be handled and * pollfd->revents will be zeroed now. * * If the socket is foreign to lws, it leaves revents alone. So you can * see if you should service yourself by checking the pollfd revents * after letting lws try to service it. * * lws before v3.2 allowed pollfd to be NULL, to indicate that background * periodic processing should be done. Since v3.2, lws schedules any items * that need handling in the future using lws_sul and NULL is no longer valid. */ LWS_VISIBLE LWS_EXTERN int lws_service_fd(struct lws_context *context, struct lws_pollfd *pollfd); /** * lws_service_fd_tsi() - Service polled socket in specific service thread * \param context: Websocket context * \param pollfd: The pollfd entry describing the socket fd and which events * happened. * \param tsi: thread service index * * Same as lws_service_fd() but used with multiple service threads */ LWS_VISIBLE LWS_EXTERN int lws_service_fd_tsi(struct lws_context *context, struct lws_pollfd *pollfd, int tsi); /** * lws_service_adjust_timeout() - Check for any connection needing forced service * \param context: Websocket context * \param timeout_ms: The original poll timeout value. You can just set this * to 1 if you don't really have a poll timeout. * \param tsi: thread service index * * Under some conditions connections may need service even though there is no * pending network action on them, this is "forced service". For default * poll() and libuv / libev, the library takes care of calling this and * dealing with it for you. But for external poll() integration, you need * access to the apis. * * If anybody needs "forced service", returned timeout is zero. In that case, * you can call lws_service_tsi() with a timeout of -1 to only service * guys who need forced service. */ LWS_VISIBLE LWS_EXTERN int lws_service_adjust_timeout(struct lws_context *context, int timeout_ms, int tsi); /* Backwards compatibility */ #define lws_plat_service_tsi lws_service_tsi LWS_VISIBLE LWS_EXTERN int lws_handle_POLLOUT_event(struct lws *wsi, struct lws_pollfd *pollfd); ///@} /*! \defgroup uv libuv helpers * * ##libuv helpers * * APIs specific to libuv event loop itegration */ ///@{ #if defined(LWS_WITH_LIBUV) && defined(UV_ERRNO_MAP) /* * Any direct libuv allocations in lws protocol handlers must participate in the * lws reference counting scheme. Two apis are provided: * * - lws_libuv_static_refcount_add(handle, context, tsi) to mark the handle with * a pointer to the context and increment the global uv object counter * * - lws_libuv_static_refcount_del() which should be used as the close callback * for your own libuv objects declared in the protocol scope. * * Using the apis allows lws to detach itself from a libuv loop completely * cleanly and at the moment all of its libuv objects have completed close. */ LWS_VISIBLE LWS_EXTERN uv_loop_t * lws_uv_getloop(struct lws_context *context, int tsi); LWS_VISIBLE LWS_EXTERN void lws_libuv_static_refcount_add(uv_handle_t *, struct lws_context *context, int tsi); LWS_VISIBLE LWS_EXTERN void lws_libuv_static_refcount_del(uv_handle_t *); #endif /* LWS_WITH_LIBUV */ #if defined(LWS_PLAT_FREERTOS) #define lws_libuv_static_refcount_add(_a, _b, _c) #define lws_libuv_static_refcount_del NULL #endif ///@} libwebsockets-4.3.5/include/libwebsockets/lws-settings.h000066400000000000000000000105401476025525100234710ustar00rootroot00000000000000/* * Generic Settings storage * * Copyright (C) 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * * This is like an abstract class for non-volatile storage, whether in a file- * system or flash-backed blocks, etc. Named blobs of variable size are stored * in nonvolatile media of some sort. Typically, these are JSON objects under * a naming scheme like, eg, "network". * * There's a platform-specific storage identifier opaque_plat provided when the * storage object is instantiated, this describes eg the storage device or * partition in instantiation-specific terms. * * Blobs have a further "filename" associated with them. */ #define LSOOPEN_FLAG_WRITEABLE (1 << 0) struct lws_settings_ops; typedef struct { void *handle_plat; const struct lws_settings_ops *so; uint8_t refcount; void *opaque_plat; } lws_settings_instance_t; typedef struct lws_settings_ops { int (*get)(lws_settings_instance_t *si, const char *name, uint8_t *dest, size_t *max_actual); /**< if dest is NULL, max_actual is set to the actual length without * copying anything out */ int (*set)(lws_settings_instance_t *si, const char *name, const uint8_t *src, size_t len); } lws_settings_ops_t; /** * lws_settings_plat_get() - read a named blob from a settings instance * * \param si: the settings instance * \param name: the name of the setting blob in the instance * \param dest: NULL, or the buffer to copy the setting blob info * \param max_actual: point to size of dest, or zero; actual blob size on exit * * If the named blob doesn't exist in the si, or can't read, returns nonzero. * Otherwise, returns 0 and sets *max_actual to the true blob size. If dest is * non-NULL, as much of the blob as will fit in the amount specified by * *max_actual on entry is copied to dest. */ LWS_VISIBLE LWS_EXTERN int lws_settings_plat_get(lws_settings_instance_t *si, const char *name, uint8_t *dest, size_t *max_actual); /** * lws_settings_plat_get() - read a named blob from a settings instance * * \param si: the settings instance * \param name: the name of the setting blob in the instance * \param src: blob to copy to settings instance * \param len: length of blob to copy * * Creates or replaces a settings blob of the given name made up of the \p len * bytes of data from \p src. */ LWS_VISIBLE LWS_EXTERN int lws_settings_plat_set(lws_settings_instance_t *si, const char *name, const uint8_t *src, size_t len); /** * lws_settings_plat_printf() - read a named blob from a settings instance * * \param si: the settings instance * \param name: the name of the setting blob in the instance * \param format: printf-style format string * * Creates or replaces a settings blob of the given name from the printf-style * format string and arguments provided. There's no specific limit to the size, * the size is computed and then a temp heap buffer used. */ LWS_VISIBLE LWS_EXTERN int lws_settings_plat_printf(lws_settings_instance_t *si, const char *name, const char *format, ...) LWS_FORMAT(3); #define lws_settings_ops_plat \ .get = lws_settings_plat_get, \ .set = lws_settings_plat_set, LWS_VISIBLE LWS_EXTERN lws_settings_instance_t * lws_settings_init(const lws_settings_ops_t *so, void *opaque_plat); LWS_VISIBLE LWS_EXTERN void lws_settings_deinit(lws_settings_instance_t **si); libwebsockets-4.3.5/include/libwebsockets/lws-sha1-base64.h000066400000000000000000000067071476025525100235610ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /** \defgroup sha SHA and B64 helpers * ##SHA and B64 helpers * * These provide SHA-1 and B64 helper apis */ ///@{ #ifdef LWS_SHA1_USE_OPENSSL_NAME #define lws_SHA1 SHA1 #else /** * lws_SHA1(): make a SHA-1 digest of a buffer * * \param d: incoming buffer * \param n: length of incoming buffer * \param md: buffer for message digest (must be >= 20 bytes) * * Reduces any size buffer into a 20-byte SHA-1 hash. */ LWS_VISIBLE LWS_EXTERN unsigned char * lws_SHA1(const unsigned char *d, size_t n, unsigned char *md); #endif /** * lws_b64_encode_string(): encode a string into base 64 * * \param in: incoming buffer * \param in_len: length of incoming buffer * \param out: result buffer * \param out_size: length of result buffer * * Encodes a string using b64 */ LWS_VISIBLE LWS_EXTERN int lws_b64_encode_string(const char *in, int in_len, char *out, int out_size); /** * lws_b64_encode_string_url(): encode a string into base 64 * * \param in: incoming buffer * \param in_len: length of incoming buffer * \param out: result buffer * \param out_size: length of result buffer * * Encodes a string using b64 with the "URL" variant (+ -> -, and / -> _) */ LWS_VISIBLE LWS_EXTERN int lws_b64_encode_string_url(const char *in, int in_len, char *out, int out_size); /** * lws_b64_decode_string(): decode a string from base 64 * * \param in: incoming buffer * \param out: result buffer * \param out_size: length of result buffer * * Decodes a NUL-terminated string using b64 */ LWS_VISIBLE LWS_EXTERN int lws_b64_decode_string(const char *in, char *out, int out_size); /** * lws_b64_decode_string_len(): decode a string from base 64 * * \param in: incoming buffer * \param in_len: length of incoming buffer * \param out: result buffer * \param out_size: length of result buffer * * Decodes a range of chars using b64 */ LWS_VISIBLE LWS_EXTERN int lws_b64_decode_string_len(const char *in, int in_len, char *out, int out_size); struct lws_b64state { unsigned char quad[4]; size_t done; size_t len; int i; int c; }; LWS_VISIBLE LWS_EXTERN void lws_b64_decode_state_init(struct lws_b64state *state); LWS_VISIBLE LWS_EXTERN int lws_b64_decode_stateful(struct lws_b64state *s, const char *in, size_t *in_len, uint8_t *out, size_t *out_size, int final); ///@} libwebsockets-4.3.5/include/libwebsockets/lws-smd.h000066400000000000000000000202311476025525100224120ustar00rootroot00000000000000/* * lws System Message Distribution * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #define LWS_SMD_MAX_PAYLOAD 384 #define LWS_SMD_CLASS_BITFIELD_BYTES 4 #define LWS_SMD_STREAMTYPENAME "_lws_smd" #define LWS_SMD_SS_RX_HEADER_LEN 16 typedef uint32_t lws_smd_class_t; struct lws_smd_msg; /* opaque */ struct lws_smd_peer; /* opaque */ /* * Well-known device classes */ enum { LWSSMDCL_INTERACTION = (1 << 0), /**< * Any kind of event indicating a user was interacting with the device, * eg, press a button, touched the screen, lifted the device etc */ LWSSMDCL_SYSTEM_STATE = (1 << 1), /**< * The lws_system state changed, eg, to OPERATIONAL */ LWSSMDCL_NETWORK = (1 << 2), /**< * Something happened on the network, eg, link-up or DHCP, or captive * portal state update */ LWSSMDCL_METRICS = (1 << 3), /**< * An SS client process is reporting a metric to the proxy (this class * is special in that it is not rebroadcast by the proxy) */ LWSSMDCL_USER_BASE_BITNUM = 24 }; /** * lws_smd_msg_alloc() - allocate a message of length len * * \param ctx: the lws_context * \param _class: the smd message class, recipients filter on this * \param len: the required payload length * * This helper returns an opaque lws_smd_msg pointer and sets *buf to a buffer * associated with it of length \p len. * * In this way the lws_msg_smd type remains completely opaque and the allocated * area can be prepared by the caller directly, without copying. * * On failure, it returns NULL... it may fail for OOM but it may also fail if * you request to allocate for a message class that the system has no * participant who is listening for that class of event currently... the event * generation action at the caller should be bypassed without error then. * * This is useful if you have a message you know the length of. For text-based * messages like JSON, lws_smd_msg_printf() is more convenient. */ LWS_VISIBLE LWS_EXTERN void * /* payload */ lws_smd_msg_alloc(struct lws_context *ctx, lws_smd_class_t _class, size_t len); /** * lws_smd_msg_free() - abandon a previously allocated message before sending * * \param payload: pointer the previously-allocated message payload * * Destroys a previously-allocated opaque message object and the requested * buffer space, in the case that between allocating it and sending it, some * condition was met that means it can no longer be sent, eg, an error * generating the content. Otherwise there is no need to destroy allocated * message objects with this, lws will take care of it. */ LWS_VISIBLE LWS_EXTERN void lws_smd_msg_free(void **payload); /** * lws_smd_msg_send() - queue a previously allocated message * * \param ctx: the lws_context * \param msg: the prepared message * * Queues an allocated, prepared message for delivery to smd clients * * This is threadsafe to call from a non-service thread. */ LWS_VISIBLE LWS_EXTERN int lws_smd_msg_send(struct lws_context *ctx, void *payload); /** * lws_smd_msg_printf() - queue a previously allocated message * * \param ctx: the lws_context * \param _class: the message class * \param format: the format string to prepare the payload with * \param ...: arguments for the format string, if any * * For string-based messages, eg, JSON, allows formatted creating of the payload * size discovery, allocation and message send all in one step. * * Unlike lws_smd_msg_alloc() you do not need to know the length beforehand as * this computes it and calls lws_smd_msg_alloc() with the correct length. * * To be clear this also calls through to lws_smd_msg_send(), it really does * everything in one step. If there are no registered participants that want * messages of \p _class, this function returns immediately without doing any * allocation or anything else. * * This is threadsafe to call from a non-service thread. */ LWS_VISIBLE LWS_EXTERN int lws_smd_msg_printf(struct lws_context *ctx, lws_smd_class_t _class, const char *format, ...) LWS_FORMAT(3); /** * lws_smd_ss_msg_printf() - helper to prepare smd ss message tx * * \param h: the ss handle * \param buf: the ss tx buffer * \param len: on entry, points to the ss tx buffer length, on exit, set to used * \param _class: the message class * \param format: the format string to prepare the payload with * \param ...: arguments for the format string, if any * * This helper lets you produce SMD messages on an SS link of the builtin * streamtype LWS_SMD_STREAMTYPENAME, using the same api format as * lws_smd_msg_prinf(), but writing the message into the ss tx buffer from * its tx() callback. */ struct lws_ss_handle; LWS_VISIBLE LWS_EXTERN int lws_smd_ss_msg_printf(const char *tag, uint8_t *buf, size_t *len, lws_smd_class_t _class, const char *format, ...) LWS_FORMAT(5); /** * lws_smd_ss_rx_forward() - helper to forward smd messages that came in by SS * * \param ss_user: ss user pointer, as delivered to rx callback * \param buf: the ss rx buffer * \param len: the length of the ss rx buffer * * Proxied Secure Streams with the streamtype LWS_SMD_STREAMTYPENAME receive * serialized SMD messages from the proxy, this helper allows them to be * translated into deserialized SMD messages and forwarded to registered SMD * participants in the local context in one step. * * Just pass through what arrived in the LWS_SMD_STREAMTYPENAME rx() callback * to this api. * * Returns 0 if OK else nonzero if unable to queue the SMD message. */ LWS_VISIBLE LWS_EXTERN int lws_smd_ss_rx_forward(void *ss_user, const uint8_t *buf, size_t len); LWS_VISIBLE LWS_EXTERN int lws_smd_sspc_rx_forward(void *ss_user, const uint8_t *buf, size_t len); typedef int (*lws_smd_notification_cb_t)(void *opaque, lws_smd_class_t _class, lws_usec_t timestamp, void *buf, size_t len); #define LWSSMDREG_FLAG_PROXIED_SS (1 << 0) /**< It's actually a proxied SS connection registering, opaque is the ss h */ /* * lws_smd_register() - register to receive smd messages * * \param ctx: the lws_context * \param opaque: an opaque pointer handed to the callback * \param flags: typically 0 * \param _class_filter: bitmap of message classes we care about * \param cb: the callback to receive messages * * Queues an allocated, prepared message for delivery to smd clients. * * Returns NULL on failure, or an opaque handle which may be given to * lws_smd_unregister() to stop participating in the shared message queue. * * This is threadsafe to call from a non-service thread. */ LWS_VISIBLE LWS_EXTERN struct lws_smd_peer * lws_smd_register(struct lws_context *ctx, void *opaque, int flags, lws_smd_class_t _class_filter, lws_smd_notification_cb_t cb); /* * lws_smd_unregister() - unregister receiving smd messages * * \param pr: the handle returned from the registration * * Destroys the registration of the callback for messages and ability to send * messages. * * It's not necessary to call this if the registration wants to survive for as * long as the lws_context... lws_context_destroy will also clean up any * registrations still active by then. */ LWS_VISIBLE LWS_EXTERN void lws_smd_unregister(struct lws_smd_peer *pr); libwebsockets-4.3.5/include/libwebsockets/lws-spa.h000066400000000000000000000151621476025525100224210ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /** \defgroup form-parsing Form Parsing * \ingroup http * ##POSTed form parsing functions * * These lws_spa (stateful post arguments) apis let you parse and urldecode * POSTed form arguments, both using simple urlencoded and multipart transfer * encoding. * * It's capable of handling file uploads as well a named input parsing, * and the apis are the same for both form upload styles. * * You feed it a list of parameter names and it creates pointers to the * urldecoded arguments: file upload parameters pass the file data in chunks to * a user-supplied callback as they come. * * Since it's stateful, it handles the incoming data needing more than one * POST_BODY callback and has no limit on uploaded file size. */ ///@{ /** enum lws_spa_fileupload_states */ enum lws_spa_fileupload_states { LWS_UFS_CONTENT, /**< a chunk of file content has arrived */ LWS_UFS_FINAL_CONTENT, /**< the last chunk (possibly zero length) of file content has arrived */ LWS_UFS_OPEN, /**< a new file is starting to arrive */ LWS_UFS_CLOSE /**< the file decode stuff is being destroyed */ }; /** * lws_spa_fileupload_cb() - callback to receive file upload data * * \param data: opt_data pointer set in lws_spa_create * \param name: name of the form field being uploaded * \param filename: original filename from client * \param buf: start of data to receive * \param len: length of data to receive * \param state: information about how this call relates to file * * Notice name and filename shouldn't be trusted, as they are passed from * HTTP provided by the client. */ typedef int (*lws_spa_fileupload_cb)(void *data, const char *name, const char *filename, char *buf, int len, enum lws_spa_fileupload_states state); /** struct lws_spa - opaque urldecode parser capable of handling multipart * and file uploads */ struct lws_spa; /** * lws_spa_create() - create urldecode parser * * \param wsi: lws connection (used to find Content Type) * \param param_names: array of form parameter names, like "username" * \param count_params: count of param_names * \param max_storage: total amount of form parameter values we can store * \param opt_cb: NULL, or callback to receive file upload data. * \param opt_data: NULL, or user pointer provided to opt_cb. * * Creates a urldecode parser and initializes it. * * It's recommended to use the newer api, lws_spa_create_via_info() * instead. * * opt_cb can be NULL if you just want normal name=value parsing, however * if one or more entries in your form are bulk data (file transfer), you * can provide this callback and filter on the name callback parameter to * treat that urldecoded data separately. The callback should return -1 * in case of fatal error, and 0 if OK. */ LWS_VISIBLE LWS_EXTERN struct lws_spa * lws_spa_create(struct lws *wsi, const char * const *param_names, int count_params, int max_storage, lws_spa_fileupload_cb opt_cb, void *opt_data); typedef struct lws_spa_create_info { const char * const *param_names; /* array of form parameter names, like "username" */ int count_params; /* count of param_names */ int max_storage; /* total amount of form parameter values we can store */ lws_spa_fileupload_cb opt_cb; /* NULL, or callback to receive file upload data. */ void *opt_data; /* NULL, or user pointer provided to opt_cb. */ size_t param_names_stride; /* 0 if param_names is an array of char *. Else stride to next char * */ struct lwsac **ac; /* NULL, or pointer to lwsac * to contain all related heap allocations */ size_t ac_chunk_size; /* 0 for default, or ac chunk size */ } lws_spa_create_info_t; /** * lws_spa_create_via_info() - create urldecode parser * * \param wsi: lws connection (used to find Content Type) * \param info: pointer to struct defining the arguments * * Creates a urldecode parser and initializes it. * * opt_cb can be NULL if you just want normal name=value parsing, however * if one or more entries in your form are bulk data (file transfer), you * can provide this callback and filter on the name callback parameter to * treat that urldecoded data separately. The callback should return -1 * in case of fatal error, and 0 if OK. */ LWS_VISIBLE LWS_EXTERN struct lws_spa * lws_spa_create_via_info(struct lws *wsi, const lws_spa_create_info_t *info); /** * lws_spa_process() - parses a chunk of input data * * \param spa: the parser object previously created * \param in: incoming urlencoded data * \param len: count of bytes valid at \p in */ LWS_VISIBLE LWS_EXTERN int lws_spa_process(struct lws_spa *spa, const char *in, int len); /** * lws_spa_finalize() - indicate incoming data completed * * \param spa: the parser object previously created */ LWS_VISIBLE LWS_EXTERN int lws_spa_finalize(struct lws_spa *spa); /** * lws_spa_get_length() - return length of parameter value * * \param spa: the parser object previously created * \param n: parameter ordinal to return length of value for */ LWS_VISIBLE LWS_EXTERN int lws_spa_get_length(struct lws_spa *spa, int n); /** * lws_spa_get_string() - return pointer to parameter value * \param spa: the parser object previously created * \param n: parameter ordinal to return pointer to value for */ LWS_VISIBLE LWS_EXTERN const char * lws_spa_get_string(struct lws_spa *spa, int n); /** * lws_spa_destroy() - destroy parser object * * \param spa: the parser object previously created */ LWS_VISIBLE LWS_EXTERN int lws_spa_destroy(struct lws_spa *spa); ///@} libwebsockets-4.3.5/include/libwebsockets/lws-spi.h000066400000000000000000000046731476025525100224360ustar00rootroot00000000000000/* * Generic I2C ops * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * This is like an abstract class for spi, a real implementation provides * functions for the ops that use the underlying OS arrangements. * * It uses descriptor / queuing semantics but eg the GPIO BB implementantion is * synchronous. */ #if !defined(__LWS_SPI_H__) #define __LWS_SPI_H__ #include #include typedef int (*lws_spi_cb_t)(void *opaque); enum { LWSSPIMODE_CPOL = (1 << 0), LWSSPIMODE_CPHA = (1 << 1), LWS_SPI_BUSMODE_CLK_IDLE_LOW_SAMP_RISING = 0, LWS_SPI_BUSMODE_CLK_IDLE_HIGH_SAMP_RISING = LWSSPIMODE_CPOL, LWS_SPI_BUSMODE_CLK_IDLE_LOW_SAMP_FALLING = LWSSPIMODE_CPHA, LWS_SPI_BUSMODE_CLK_IDLE_HIGH_SAMP_FALLING = LWSSPIMODE_CPHA | LWSSPIMODE_CPOL, LWS_SPI_TXN_HALF_DUPLEX_DISCRETE = 0, /**< separate MISO and MOSI, but only either MISO or MOSI has data at * one time... i2c style in SPI */ }; typedef struct lws_spi_desc { const uint8_t *src; const uint8_t *data; uint8_t *dest; void *opaque; lws_spi_cb_t completion_cb; uint16_t count_cmd; uint16_t count_write; uint16_t count_read; uint8_t txn_type; uint8_t channel; } lws_spi_desc_t; typedef struct lws_spi_ops { int (*init)(const struct lws_spi_ops *ctx); int (*queue)(const struct lws_spi_ops *ctx, const lws_spi_desc_t *desc); uint8_t bus_mode; } lws_spi_ops_t; #endif libwebsockets-4.3.5/include/libwebsockets/lws-ssd1306-i2c.h000066400000000000000000000046601476025525100234150ustar00rootroot00000000000000/* * lws abstract display implementation for ssd1306 on i2c * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #if !defined(__LWS_DISPLAY_SSD1306_I2C_H__) #define __LWS_DISPLAY_SSD1306_I2C_H__ /* * D/C# pin on SSD1306 sets the I2C device ads * from these two options (7-bit address) */ #define SSD1306_I2C7_ADS1 0x3c #define SSD1306_I2C7_ADS2 0x3d typedef struct lws_display_ssd1306 { lws_display_t disp; /* use lws_display_ssd1306_ops to set ops */ const lws_i2c_ops_t *i2c; /* i2c ops */ const lws_gpio_ops_t *gpio; /* NULL or gpio ops */ _lws_plat_gpio_t reset_gpio; /* if gpio ops, nReset gpio # */ uint8_t i2c7_address; /* one of SSD1306_I2C7_ADS... */ } lws_display_ssd1306_t; int lws_display_ssd1306_i2c_init(const struct lws_display *disp); int lws_display_ssd1306_i2c_contrast(const struct lws_display *disp, uint8_t b); int lws_display_ssd1306_i2c_blit(const struct lws_display *disp, const uint8_t *src, lws_display_scalar x, lws_display_scalar y, lws_display_scalar w, lws_display_scalar h); int lws_display_ssd1306_i2c_power(const struct lws_display *disp, int state); #define lws_display_ssd1306_ops \ .init = lws_display_ssd1306_i2c_init, \ .contrast = lws_display_ssd1306_i2c_contrast, \ .blit = lws_display_ssd1306_i2c_blit, \ .power = lws_display_ssd1306_i2c_power #endif libwebsockets-4.3.5/include/libwebsockets/lws-state.h000066400000000000000000000075521476025525100227620ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ struct lws_state_notify_link; struct lws_state_manager; #if defined(LWS_WITH_SYS_STATE) typedef int (*lws_state_notify_t)(struct lws_state_manager *mgr, struct lws_state_notify_link *link, int current, int target); typedef struct lws_state_notify_link { lws_dll2_t list; lws_state_notify_t notify_cb; const char *name; } lws_state_notify_link_t; typedef struct lws_state_manager { lws_dll2_owner_t notify_list; struct lws_context *context; void *parent; #if defined(LWS_WITH_SYS_SMD) lws_smd_class_t smd_class; #endif /**< optional opaque pointer to owning object... useful to make such * a pointer available to a notification callback. Ignored by lws */ const char **state_names; const char *name; int state; } lws_state_manager_t; /** * lws_state_reg_notifier() - add dep handler for state notifications * * \param context: the lws_context * \param nl: the handler to add to the notifier linked-list * * Add \p notify_link to the context's list of notification handlers for system * state changes. The handlers can defeat or take over responsibility for * retrying the change after they have initiated some dependency. */ LWS_EXTERN LWS_VISIBLE void lws_state_reg_notifier(lws_state_manager_t *mgr, lws_state_notify_link_t *nl); /** * lws_state_reg_deregister() - deregister a notifier * * \param nl: notification hardler to deregister * * Remove a notification handler from its state manager */ LWS_EXTERN LWS_VISIBLE void lws_state_reg_deregister(lws_state_notify_link_t *nl); /** * lws_state_reg_notifier_list() - add dep handlers for state notifications * * \param context: the lws_context * \param nl: list of notification handlers * * Add a NULL-terminated list of notification handler pointers to a notification * manager object */ LWS_EXTERN LWS_VISIBLE void lws_state_reg_notifier_list(lws_state_manager_t *mgr, lws_state_notify_link_t * const *nl); /** * lws_state_transition_steps() - move to state via starting any deps * * \param mgr: the state manager object * \param target: the state we wish to move to * * Advance state by state towards state \p target. At each state, notifiers * may veto the change and be triggered to perform dependencies, stopping the * advance towards the target state. */ LWS_EXTERN LWS_VISIBLE int lws_state_transition_steps(lws_state_manager_t *mgr, int target); /** * lws_state_transition() - move to state via starting any deps * * \param mgr: the state manager object * \param target: the state we wish to move to * * Jump to state target atomically. Notifiers may veto it. */ LWS_EXTERN LWS_VISIBLE int lws_state_transition(lws_state_manager_t *mgr, int target); #else #endif libwebsockets-4.3.5/include/libwebsockets/lws-struct.h000066400000000000000000000153121476025525100231570ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #if defined(LWS_WITH_STRUCT_SQLITE3) #include #endif typedef enum { LSMT_SIGNED, LSMT_UNSIGNED, LSMT_BOOLEAN, LSMT_STRING_CHAR_ARRAY, LSMT_STRING_PTR, LSMT_LIST, LSMT_CHILD_PTR, LSMT_SCHEMA, LSMT_BLOB_PTR, } lws_struct_map_type_eum; typedef struct lejp_collation { struct lws_dll2 chunks; int len; char buf[LEJP_STRING_CHUNK + 1]; } lejp_collation_t; typedef struct lws_struct_map { const char *colname; const struct lws_struct_map *child_map; lejp_callback lejp_cb; size_t ofs; /* child dll2; points to dll2_owner */ size_t aux; size_t ofs_clist; size_t child_map_size; lws_struct_map_type_eum type; } lws_struct_map_t; typedef int (*lws_struct_args_cb)(void *obj, void *cb_arg); typedef struct lws_struct_args { const lws_struct_map_t *map_st[LEJP_MAX_PARSING_STACK_DEPTH]; lws_struct_args_cb cb; struct lwsac *ac; void *cb_arg; void *dest; size_t dest_len; size_t toplevel_dll2_ofs; size_t map_entries_st[LEJP_MAX_PARSING_STACK_DEPTH]; size_t ac_block_size; int subtype; int top_schema_index; /* * temp ac used to collate unknown possibly huge strings before final * allocation and copy */ struct lwsac *ac_chunks; struct lws_dll2_owner chunks_owner; size_t chunks_length; } lws_struct_args_t; #define LSM_SIGNED(type, name, qname) \ { \ qname, \ NULL, \ NULL, \ offsetof(type, name), \ sizeof ((type *)0)->name, \ 0, \ 0, \ LSMT_SIGNED \ } #define LSM_UNSIGNED(type, name, qname) \ { \ qname, \ NULL, \ NULL, \ offsetof(type, name), \ sizeof ((type *)0)->name, \ 0, \ 0, \ LSMT_UNSIGNED \ } #define LSM_BOOLEAN(type, name, qname) \ { \ qname, \ NULL, \ NULL, \ offsetof(type, name), \ sizeof ((type *)0)->name, \ 0, \ 0, \ LSMT_BOOLEAN \ } #define LSM_CARRAY(type, name, qname) \ { \ qname, \ NULL, \ NULL, \ offsetof(type, name), \ sizeof (((type *)0)->name), \ 0, \ 0, \ LSMT_STRING_CHAR_ARRAY \ } #define LSM_STRING_PTR(type, name, qname) \ { \ qname, \ NULL, \ NULL, \ offsetof(type, name), \ sizeof (((type *)0)->name), \ 0, \ 0, \ LSMT_STRING_PTR \ } #define LSM_LIST(ptype, pname, ctype, cname, lejp_cb, cmap, qname) \ { \ qname, \ cmap, \ lejp_cb, \ offsetof(ptype, pname), \ sizeof (ctype), \ offsetof(ctype, cname), \ LWS_ARRAY_SIZE(cmap), \ LSMT_LIST \ } #define LSM_CHILD_PTR(ptype, pname, ctype, lejp_cb, cmap, qname) \ { \ qname, \ cmap, \ lejp_cb, \ offsetof(ptype, pname), \ sizeof (ctype), \ 0, \ LWS_ARRAY_SIZE(cmap), \ LSMT_CHILD_PTR \ } #define LSM_SCHEMA(ctype, lejp_cb, map, schema_name) \ { \ schema_name, \ map, \ lejp_cb, \ 0, \ sizeof (ctype), \ 0, \ LWS_ARRAY_SIZE(map), \ LSMT_SCHEMA \ } #define LSM_SCHEMA_DLL2(ctype, cdll2mem, lejp_cb, map, schema_name) \ { \ schema_name, \ map, \ lejp_cb, \ offsetof(ctype, cdll2mem), \ sizeof (ctype), \ 0, \ LWS_ARRAY_SIZE(map), \ LSMT_SCHEMA \ } /* * This is just used to create the table schema, it is not part of serialization * and deserialization. Blobs should be accessed separately. */ #define LSM_BLOB_PTR(type, blobptr_name, qname) \ { \ qname, /* JSON item, or sqlite3 column name */ \ NULL, \ NULL, \ offsetof(type, blobptr_name), /* member that points to blob */ \ sizeof (((type *)0)->blobptr_name), /* size of blob pointer */ \ 0, /* member holding blob len */ \ 0, /* size of blob length member */ \ LSMT_BLOB_PTR \ } typedef struct lws_struct_serialize_st { const struct lws_dll2 *dllpos; const lws_struct_map_t *map; const char *obj; size_t map_entries; size_t map_entry; size_t size; char subsequent; char idt; } lws_struct_serialize_st_t; enum { LSSERJ_FLAG_PRETTY = (1 << 0), LSSERJ_FLAG_OMIT_SCHEMA = (1 << 1) }; typedef struct lws_struct_serialize { lws_struct_serialize_st_t st[LEJP_MAX_PARSING_STACK_DEPTH]; size_t offset; size_t remaining; int sp; int flags; } lws_struct_serialize_t; typedef enum { LSJS_RESULT_CONTINUE, LSJS_RESULT_FINISH, LSJS_RESULT_ERROR } lws_struct_json_serialize_result_t; LWS_VISIBLE LWS_EXTERN int lws_struct_json_init_parse(struct lejp_ctx *ctx, lejp_callback cb, void *user); LWS_VISIBLE LWS_EXTERN signed char lws_struct_schema_only_lejp_cb(struct lejp_ctx *ctx, char reason); LWS_VISIBLE LWS_EXTERN signed char lws_struct_default_lejp_cb(struct lejp_ctx *ctx, char reason); LWS_VISIBLE LWS_EXTERN lws_struct_serialize_t * lws_struct_json_serialize_create(const lws_struct_map_t *map, size_t map_entries, int flags, const void *ptoplevel); LWS_VISIBLE LWS_EXTERN void lws_struct_json_serialize_destroy(lws_struct_serialize_t **pjs); LWS_VISIBLE LWS_EXTERN lws_struct_json_serialize_result_t lws_struct_json_serialize(lws_struct_serialize_t *js, uint8_t *buf, size_t len, size_t *written); typedef struct sqlite3 sqlite3; LWS_VISIBLE LWS_EXTERN int lws_struct_sq3_serialize(sqlite3 *pdb, const lws_struct_map_t *schema, lws_dll2_owner_t *owner, uint32_t manual_idx); LWS_VISIBLE LWS_EXTERN int lws_struct_sq3_deserialize(sqlite3 *pdb, const char *filter, const char *order, const lws_struct_map_t *schema, lws_dll2_owner_t *o, struct lwsac **ac, int start, int limit); LWS_VISIBLE LWS_EXTERN int lws_struct_sq3_create_table(sqlite3 *pdb, const lws_struct_map_t *schema); LWS_VISIBLE LWS_EXTERN int lws_struct_sq3_open(struct lws_context *context, const char *sqlite3_path, char create_if_missing, sqlite3 **pdb); LWS_VISIBLE LWS_EXTERN int lws_struct_sq3_close(sqlite3 **pdb); libwebsockets-4.3.5/include/libwebsockets/lws-system.h000066400000000000000000000343521476025525100231640ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * This provides a clean way to interface lws user code to be able to * work unchanged on different systems for fetching common system information, * and performing common system operations like reboot. */ /* * Types of system blob that can be set and retreived */ typedef enum { LWS_SYSBLOB_TYPE_AUTH, LWS_SYSBLOB_TYPE_CLIENT_CERT_DER = LWS_SYSBLOB_TYPE_AUTH + 2, LWS_SYSBLOB_TYPE_CLIENT_KEY_DER, LWS_SYSBLOB_TYPE_DEVICE_SERIAL, LWS_SYSBLOB_TYPE_DEVICE_FW_VERSION, LWS_SYSBLOB_TYPE_DEVICE_TYPE, LWS_SYSBLOB_TYPE_NTP_SERVER, LWS_SYSBLOB_TYPE_MQTT_CLIENT_ID, LWS_SYSBLOB_TYPE_MQTT_USERNAME, LWS_SYSBLOB_TYPE_MQTT_PASSWORD, #if defined(LWS_WITH_SECURE_STREAMS_AUTH_SIGV4) /* extend 4 more auth blobs, each has 2 slots */ LWS_SYSBLOB_TYPE_EXT_AUTH1, LWS_SYSBLOB_TYPE_EXT_AUTH2 = LWS_SYSBLOB_TYPE_EXT_AUTH1 + 2, LWS_SYSBLOB_TYPE_EXT_AUTH3 = LWS_SYSBLOB_TYPE_EXT_AUTH2 + 2, LWS_SYSBLOB_TYPE_EXT_AUTH4 = LWS_SYSBLOB_TYPE_EXT_AUTH3 + 2, LWS_SYSBLOB_TYPE_EXT_AUTH4_1, #endif LWS_SYSBLOB_TYPE_COUNT /* ... always last */ } lws_system_blob_item_t; /* opaque generic blob whose content may be on-the-heap or pointed-to * directly case by case. When it's on the heap, it can be produced by * appending (it's a buflist underneath). Either way, it can be consumed by * copying out a given length from a given offset. */ typedef struct lws_system_blob lws_system_blob_t; LWS_EXTERN LWS_VISIBLE void lws_system_blob_direct_set(lws_system_blob_t *b, const uint8_t *ptr, size_t len); LWS_EXTERN LWS_VISIBLE void lws_system_blob_heap_empty(lws_system_blob_t *b); LWS_EXTERN LWS_VISIBLE int lws_system_blob_heap_append(lws_system_blob_t *b, const uint8_t *ptr, size_t len); LWS_EXTERN LWS_VISIBLE size_t lws_system_blob_get_size(lws_system_blob_t *b); /* return 0 and sets *ptr to point to blob data if possible, nonzero = fail */ LWS_EXTERN LWS_VISIBLE int lws_system_blob_get_single_ptr(lws_system_blob_t *b, const uint8_t **ptr); LWS_EXTERN LWS_VISIBLE int lws_system_blob_get(lws_system_blob_t *b, uint8_t *ptr, size_t *len, size_t ofs); LWS_EXTERN LWS_VISIBLE void lws_system_blob_destroy(lws_system_blob_t *b); /* * Get the opaque blob for index idx of various system blobs. Returns 0 if * *b was set otherwise nonzero means out of range */ LWS_EXTERN LWS_VISIBLE lws_system_blob_t * lws_system_get_blob(struct lws_context *context, lws_system_blob_item_t type, int idx); /* * Lws view of system state... normal operation from user code perspective is * dependent on implicit (eg, knowing the date for cert validation) and * explicit dependencies. * * Bit of lws and user code can register notification handlers that can enforce * dependent operations before state transitions can complete. */ typedef enum { /* keep system_state_names[] in sync in context.c */ LWS_SYSTATE_UNKNOWN, LWS_SYSTATE_CONTEXT_CREATED, /* context was just created */ LWS_SYSTATE_INITIALIZED, /* protocols initialized. Lws itself * can operate normally */ LWS_SYSTATE_IFACE_COLDPLUG, /* existing net ifaces iterated */ LWS_SYSTATE_DHCP, /* at least one net iface configured */ LWS_SYSTATE_CPD_PRE_TIME, /* Captive portal detect without valid * time, good for non-https tests... if * you care about it, implement and * call lws_system_ops_t * .captive_portal_detect_request() * and move the state forward according * to the result. */ LWS_SYSTATE_TIME_VALID, /* ntpclient ran, or hw time valid... * tls cannot work until we reach here */ LWS_SYSTATE_CPD_POST_TIME, /* Captive portal detect after time was * time, good for https tests... if * you care about it, implement and * call lws_system_ops_t * .captive_portal_detect_request() * and move the state forward according * to the result. */ LWS_SYSTATE_POLICY_VALID, /* user code knows how to operate... */ LWS_SYSTATE_REGISTERED, /* device has an identity... */ LWS_SYSTATE_AUTH1, /* identity used for main auth token */ LWS_SYSTATE_AUTH2, /* identity used for optional auth */ LWS_SYSTATE_OPERATIONAL, /* user code can operate normally */ LWS_SYSTATE_POLICY_INVALID, /* user code is changing its policies * drop everything done with old * policy, switch to new then enter * LWS_SYSTATE_POLICY_VALID */ LWS_SYSTATE_CONTEXT_DESTROYING, /* Context is being destroyed */ } lws_system_states_t; /* Captive Portal Detect -related */ typedef enum { LWS_CPD_UNKNOWN = 0, /* test didn't happen ince last DHCP acq yet */ LWS_CPD_INTERNET_OK, /* no captive portal: our CPD test passed OK, * we can go out on the internet */ LWS_CPD_CAPTIVE_PORTAL, /* we inferred we're behind a captive portal */ LWS_CPD_NO_INTERNET, /* we couldn't touch anything */ } lws_cpd_result_t; typedef void (*lws_attach_cb_t)(struct lws_context *context, int tsi, void *opaque); struct lws_attach_item; LWS_EXTERN LWS_VISIBLE int lws_tls_jit_trust_got_cert_cb(struct lws_context *cx, void *got_opaque, const uint8_t *skid, size_t skid_len, const uint8_t *der, size_t der_len); typedef struct lws_system_ops { int (*reboot)(void); int (*set_clock)(lws_usec_t us); int (*attach)(struct lws_context *context, int tsi, lws_attach_cb_t cb, lws_system_states_t state, void *opaque, struct lws_attach_item **get); /**< if \p get is NULL, add an attach callback request to the pt for * \p cb with arg \p opaque, that should be called when we're at or past * system state \p state. * * If \p get is non-NULL, look for the first listed item on the pt whose * state situation is ready, and set *get to point to it. If no items, * or none where the system state is right, set *get to NULL. * * It's done like this so (*attach) can perform system-specific * locking outside of lws core, for both getting and adding items the * same so it is thread-safe. A non-threadsafe helper * __lws_system_attach() is provided to do the actual work inside the * system-specific locking. */ int (*captive_portal_detect_request)(struct lws_context *context); /**< Check if we can go out on the internet cleanly, or if we are being * redirected or intercepted by a captive portal. * Start the check that proceeds asynchronously, and report the results * by calling lws_captive_portal_detect_result() api */ int (*metric_report)(lws_metric_pub_t *mdata); /**< metric \p item is reporting an event of kind \p rpt, * held in \p mdata... return 0 to leave the metric object as it is, * or nonzero to reset it. */ int (*jit_trust_query)(struct lws_context *cx, const uint8_t *skid, size_t skid_len, void *got_opaque); /**< user defined trust store search, if we do trust a cert with SKID * matching skid / skid_len, then it should get hold of the DER for the * matching root CA and call * lws_tls_jit_trust_got_cert_cb(..., got_opaque) before cleaning up and * returning. The DER should be destroyed if in heap before returning. */ uint32_t wake_latency_us; /**< time taken for this device to wake from suspend, in us */ } lws_system_ops_t; #if defined(LWS_WITH_SYS_STATE) /** * lws_system_get_state_manager() - return the state mgr object for system state * * \param context: the lws_context * * The returned pointer can be used with the lws_state_ apis */ LWS_EXTERN LWS_VISIBLE lws_state_manager_t * lws_system_get_state_manager(struct lws_context *context); #endif /* wrappers handle NULL members or no ops struct set at all cleanly */ #define LWSSYSGAUTH_HEX (1 << 0) /** * lws_system_get_ops() - get ahold of the system ops struct from the context * * \param context: the lws_context * * Returns the system ops struct. It may return NULL and if not, anything in * there may be NULL. */ LWS_EXTERN LWS_VISIBLE const lws_system_ops_t * lws_system_get_ops(struct lws_context *context); #if defined(LWS_WITH_SYS_STATE) /** * lws_system_context_from_system_mgr() - return context from system state mgr * * \param mgr: pointer to specifically the system state mgr * * Returns the context from the system state mgr. Helper since the lws_context * is opaque. */ LWS_EXTERN LWS_VISIBLE struct lws_context * lws_system_context_from_system_mgr(lws_state_manager_t *mgr); #endif /** * __lws_system_attach() - get and set items on context attach list * * \param context: context to get or set attach items to * \param tsi: thread service index (normally 0) * \param cb: callback to call from context event loop thread * \param state: the lws_system state we have to be in or have passed through * \param opaque: optional pointer to user specific info given to callback * \param get: NULL, or pointer to pointer to take detached tail item on exit * * This allows other threads to enqueue callback requests to happen from a pt's * event loop thread safely. The callback gets the context pointer and a user * opaque pointer that can be optionally given when the item is added to the * attach list. * * This api is the no-locking core function for getting and setting items on the * pt's attach list. The lws_system operation (*attach) is the actual * api that user and internal code calls for this feature, it should perform * system-specific locking, call this helper, release the locking and then * return the result. This api is public only so it can be used in the locked * implementation of (*attach). * * If get is NULL, then the call adds to the head of the pt attach list using * cb, state, and opaque; if get is non-NULL, then *get is set to the first * waiting attached item that meets the state criteria and that item is removed * from the list. * * This is a non-threadsafe helper only designed to be called from * implementations of struct lws_system's (*attach) operation where system- * specific locking has been applied around it, making it threadsafe. */ LWS_EXTERN LWS_VISIBLE int __lws_system_attach(struct lws_context *context, int tsi, lws_attach_cb_t cb, lws_system_states_t state, void *opaque, struct lws_attach_item **get); enum { LWSDH_IPV4_SUBNET_MASK = 0, LWSDH_IPV4_BROADCAST, LWSDH_LEASE_SECS, LWSDH_REBINDING_SECS, LWSDH_RENEWAL_SECS, _LWSDH_NUMS_COUNT, LWSDH_SA46_IP = 0, LWSDH_SA46_DNS_SRV_1, LWSDH_SA46_DNS_SRV_2, LWSDH_SA46_DNS_SRV_3, LWSDH_SA46_DNS_SRV_4, LWSDH_SA46_IPV4_ROUTER, LWSDH_SA46_NTP_SERVER, LWSDH_SA46_DHCP_SERVER, _LWSDH_SA46_COUNT, }; typedef struct lws_dhcpc_ifstate { char ifname[16]; char domain[64]; uint8_t mac[6]; uint32_t nums[_LWSDH_NUMS_COUNT]; lws_sockaddr46 sa46[_LWSDH_SA46_COUNT]; } lws_dhcpc_ifstate_t; typedef int (*dhcpc_cb_t)(void *opaque, lws_dhcpc_ifstate_t *is); /** * lws_dhcpc_request() - add a network interface to dhcpc management * * \param c: the lws_context * \param i: the interface name, like "eth0" * \param af: address family * \param cb: the change callback * \param opaque: opaque pointer given to the callback * * Register a network interface as being managed by DHCP. lws will proceed to * try to acquire an IP. Requires LWS_WITH_SYS_DHCP_CLIENT at cmake. */ LWS_EXTERN LWS_VISIBLE int lws_dhcpc_request(struct lws_context *c, const char *i, int af, dhcpc_cb_t cb, void *opaque); /** * lws_dhcpc_remove() - remove a network interface to dhcpc management * * \param context: the lws_context * \param iface: the interface name, like "eth0" * * Remove handling of the network interface from dhcp. */ LWS_EXTERN LWS_VISIBLE int lws_dhcpc_remove(struct lws_context *context, const char *iface); /** * lws_dhcpc_status() - has any interface reached BOUND state * * \param context: the lws_context * \param sa46: set to a DNS server from a bound interface, or NULL * * Returns 1 if any network interface managed by dhcpc has reached the BOUND * state (has acquired an IP, gateway and DNS server), otherwise 0. */ LWS_EXTERN LWS_VISIBLE int lws_dhcpc_status(struct lws_context *context, lws_sockaddr46 *sa46); /** * lws_system_cpd_start() - helper to initiate captive portal detection * * \param context: the lws_context * * Resets the context's captive portal state to LWS_CPD_UNKNOWN and calls the * lws_system_ops_t captive_portal_detect_request() implementation to begin * testing the captive portal state. */ LWS_EXTERN LWS_VISIBLE int lws_system_cpd_start(struct lws_context *context); LWS_EXTERN LWS_VISIBLE void lws_system_cpd_start_defer(struct lws_context *cx, lws_usec_t defer_us); /** * lws_system_cpd_set() - report the result of the captive portal detection * * \param context: the lws_context * \param result: one of the LWS_CPD_ constants representing captive portal state * * Sets the context's captive portal detection state to result. User captive * portal detection code would call this once it had a result from its test. */ LWS_EXTERN LWS_VISIBLE void lws_system_cpd_set(struct lws_context *context, lws_cpd_result_t result); /** * lws_system_cpd_state_get() - returns the last tested captive portal state * * \param context: the lws_context * * Returns one of the LWS_CPD_ constants indicating the system's understanding * of the current captive portal situation. */ LWS_EXTERN LWS_VISIBLE lws_cpd_result_t lws_system_cpd_state_get(struct lws_context *context); libwebsockets-4.3.5/include/libwebsockets/lws-test-sequencer.h000066400000000000000000000047371476025525100246130ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * lws_test_sequencer manages running an array of unit tests. */ typedef void (*lws_test_sequence_cb)(const void *cb_user); typedef struct lws_test_sequencer_args { lws_abs_t *abs; /* abstract protocol + unit test txport */ lws_unit_test_t *tests; /* array of lws_unit_test_t */ int *results; /* takes result dispositions */ int results_max; /* max space usable in results */ int *count_tests; /* count of done tests */ int *count_passes; /* count of passed tests */ lws_test_sequence_cb cb; /* completion callback */ void *cb_user; /* opaque user ptr given to cb */ } lws_test_sequencer_args_t; /** * lws_abs_unit_test_sequencer() - helper to sequence multiple unit tests * * \param args: lws_test_sequencer_args_t prepared with arguments for the tests * * This helper sequences one or more unit tests to run and collects the results. * * The incoming abs should be set up for the abstract protocol you want to test * and the lws unit-test transport. * * Results are one of * * LPE_SUCCEEDED * LPE_FAILED * LPE_FAILED_UNEXPECTED_TIMEOUT * LPE_FAILED_UNEXPECTED_PASS * LPE_FAILED_UNEXPECTED_CLOSE * * The callback args->cb is called when the tests have been done. */ LWS_VISIBLE LWS_EXTERN int lws_abs_unit_test_sequencer(const lws_test_sequencer_args_t *args); libwebsockets-4.3.5/include/libwebsockets/lws-threadpool.h000066400000000000000000000240401476025525100237720ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /** \defgroup threadpool Threadpool related functions * ##Threadpool * \ingroup lwsapi * * This allows you to create one or more pool of threads which can run tasks * associated with a wsi. If the pool is busy, tasks wait on a queue. * * Tasks don't have to be atomic, if they will take more than a few tens of ms * they should return back to the threadpool worker with a return of 0. This * will allow them to abort cleanly. */ //@{ struct lws_threadpool; struct lws_threadpool_task; enum lws_threadpool_task_status { LWS_TP_STATUS_QUEUED, LWS_TP_STATUS_RUNNING, LWS_TP_STATUS_SYNCING, LWS_TP_STATUS_STOPPING, LWS_TP_STATUS_FINISHED, /* lws_threadpool_task_status() frees task */ LWS_TP_STATUS_STOPPED, /* lws_threadpool_task_status() frees task */ }; enum lws_threadpool_task_return { /** Still work to do, just confirming not being stopped */ LWS_TP_RETURN_CHECKING_IN, /** Still work to do, enter cond_wait until service thread syncs. This * is used if you have filled your buffer(s) of data to the service * thread and are blocked until the service thread completes sending at * least one. */ LWS_TP_RETURN_SYNC, /** No more work to do... */ LWS_TP_RETURN_FINISHED, /** Responding to request to stop */ LWS_TP_RETURN_STOPPED, /* OR on to indicate this task wishes to outlive its wsi */ LWS_TP_RETURN_FLAG_OUTLIVE = 64 }; struct lws_threadpool_create_args { int threads; int max_queue_depth; }; struct lws_threadpool_task_args { #if defined(LWS_WITH_SECURE_STREAMS) struct lws_ss_handle *ss; /**< either wsi or ss must be set */ #endif struct lws *wsi; /**< either wsi or ss must be set */ void *user; /**< user may set (user-private pointer) */ const char *name; /**< user may set to describe task */ char async_task; /**< set to allow the task to shrug off the loss of the associated wsi and continue to completion */ enum lws_threadpool_task_return (*task)(void *user, enum lws_threadpool_task_status s); /**< user must set to actual task function */ void (*cleanup)(struct lws *wsi, void *user); /**< socket lifecycle may end while task is not stoppable, so the task * must be able to detach from any wsi and clean itself up when it does * stop. If NULL, no cleanup necessary, otherwise point to a user- * supplied function that destroys the stuff in \p user. * * wsi may be NULL on entry, indicating the task got detached due to the * wsi closing before. */ }; /** * lws_threadpool_create() - create a pool of worker threads * * \param context: the lws_context the threadpool will exist inside * \param args: argument struct prepared by caller * \param format: printf-type format for the task name * \param ...: printf type args for the task name format * * Creates a pool of worker threads with \p threads and a queue of up to * \p max_queue_depth waiting tasks if all the threads are busy. * * Returns NULL if OOM, or a struct lws_threadpool pointer that must be * destroyed by lws_threadpool_destroy(). */ LWS_VISIBLE LWS_EXTERN struct lws_threadpool * lws_threadpool_create(struct lws_context *context, const struct lws_threadpool_create_args *args, const char *format, ...) LWS_FORMAT(3); /** * lws_threadpool_finish() - Stop all pending and running tasks * * \param tp: the threadpool object * * Marks the threadpool as under destruction. Removes everything from the * pending queue and completes those tasks as LWS_TP_STATUS_STOPPED. * * Running tasks will also get LWS_TP_STATUS_STOPPED as soon as they * "resurface". * * This doesn't reap tasks or free the threadpool, the reaping is done by the * lws_threadpool_task_status() on the done task. */ LWS_VISIBLE LWS_EXTERN void lws_threadpool_finish(struct lws_threadpool *tp); /** * lws_threadpool_destroy() - Destroy a threadpool * * \param tp: the threadpool object * * Waits for all worker threads to stop, ends the threads and frees the tp. */ LWS_VISIBLE LWS_EXTERN void lws_threadpool_destroy(struct lws_threadpool *tp); /** * lws_threadpool_enqueue() - Queue the task and run it on a worker thread when possible * * \param tp: the threadpool to queue / run on * \param args: information about what to run * \param format: printf-type format for the task name * \param ...: printf type args for the task name format * * This asks for a task to run ASAP on a worker thread in threadpool \p tp. * * The args defines the wsi, a user-private pointer, a timeout in secs and * a pointer to the task function. * * Returns NULL or an opaque pointer to the queued (or running, or completed) * task. * * Once a task is created and enqueued, it can only be destroyed by calling * lws_threadpool_task_status() on it after it has reached the state * LWS_TP_STATUS_FINISHED or LWS_TP_STATUS_STOPPED. */ LWS_VISIBLE LWS_EXTERN struct lws_threadpool_task * lws_threadpool_enqueue(struct lws_threadpool *tp, const struct lws_threadpool_task_args *args, const char *format, ...) LWS_FORMAT(3); /** * lws_threadpool_dequeue() - Dequeue or try to stop a running task * * \param wsi: the wsi whose current task we want to eliminate * * Returns 0 is the task was dequeued or already compeleted, or 1 if the task * has been asked to stop asynchronously. * * This doesn't free the task. It only shortcuts it to state * LWS_TP_STATUS_STOPPED. lws_threadpool_task_status() must be performed on * the task separately once it is in LWS_TP_STATUS_STOPPED to free the task. * * DEPRECATED: You should use lws_threadpool_dequeue_task() with * lws_threadpool_get_task_wsi() / _ss() if you know there can only be one task * per connection, or call it via lws_threadpool_foreach_task_wsi() / _ss() to * get the tasks bound to the connection. */ LWS_VISIBLE LWS_EXTERN int lws_threadpool_dequeue(struct lws *wsi) LWS_WARN_DEPRECATED; LWS_VISIBLE LWS_EXTERN int lws_threadpool_dequeue_task(struct lws_threadpool_task *task); /** * lws_threadpool_task_status() - reap completed tasks * * \param wsi: the wsi to query the current task of * \param task: receives a pointer to the opaque task * \param user: receives a void * pointer to the task user data * * This is the equivalent of posix waitpid()... it returns the status of the * task, and if the task is in state LWS_TP_STATUS_FINISHED or * LWS_TP_STATUS_STOPPED, frees \p task. If in another state, the task * continues to exist. * * This is designed to be called from the service thread. * * Its use is to make sure the service thread has seen the state of the task * before deleting it. * * DEPRECATED... use lws_threadpool_task_status() instead and get the task * pointer from lws_threadpool_get_task_wsi() / _ss() if you know there can only * be one, else call it via lws_threadpool_foreach_task_wsi() / _ss() */ LWS_VISIBLE LWS_EXTERN enum lws_threadpool_task_status lws_threadpool_task_status_wsi(struct lws *wsi, struct lws_threadpool_task **task, void **user) LWS_WARN_DEPRECATED; LWS_VISIBLE LWS_EXTERN enum lws_threadpool_task_status lws_threadpool_task_status(struct lws_threadpool_task *task, void **user); LWS_VISIBLE LWS_EXTERN enum lws_threadpool_task_status lws_threadpool_task_status_noreap(struct lws_threadpool_task *task); /** * lws_threadpool_task_sync() - Indicate to a stalled task it may continue * * \param task: the task to unblock * \param stop: 0 = run after unblock, 1 = when he unblocks, stop him * * Inform the task that the service thread has finished with the shared data * and that the task, if blocked in LWS_TP_RETURN_SYNC, may continue. * * If the lws service context determined that the task must be aborted, it * should still call this but with stop = 1, causing the task to finish. */ LWS_VISIBLE LWS_EXTERN void lws_threadpool_task_sync(struct lws_threadpool_task *task, int stop); /** * lws_threadpool_dump() - dump the state of a threadpool to the log * * \param tp: The threadpool to dump * * This locks the threadpool and then dumps the pending queue, the worker * threads and the done queue, together with time information for how long * the tasks have been in their current state, how long they have occupied a * thread, etc. * * This only does anything on lws builds with CMAKE_BUILD_TYPE=DEBUG, otherwise * while it still exists, it's a NOP. */ LWS_VISIBLE LWS_EXTERN void lws_threadpool_dump(struct lws_threadpool *tp); LWS_VISIBLE LWS_EXTERN struct lws_threadpool_task * lws_threadpool_get_task_wsi(struct lws *wsi); #if defined(LWS_WITH_SECURE_STREAMS) LWS_VISIBLE LWS_EXTERN struct lws_threadpool_task * lws_threadpool_get_task_ss(struct lws_ss_handle *ss); #endif LWS_VISIBLE LWS_EXTERN int lws_threadpool_foreach_task_wsi(struct lws *wsi, void *user, int (*cb)(struct lws_threadpool_task *task, void *user)); #if defined(LWS_WITH_SECURE_STREAMS) LWS_VISIBLE LWS_EXTERN int lws_threadpool_foreach_task_ss(struct lws_ss_handle *ss, void *user, int (*cb)(struct lws_threadpool_task *task, void *user)); #endif //@} libwebsockets-4.3.5/include/libwebsockets/lws-timeout-timer.h000066400000000000000000000266041476025525100244450ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /*! \defgroup timeout Connection timeouts APIs related to setting connection timeouts */ //@{ /* * NOTE: These public enums are part of the abi. If you want to add one, * add it at where specified so existing users are unaffected. */ enum pending_timeout { NO_PENDING_TIMEOUT = 0, PENDING_TIMEOUT_AWAITING_PROXY_RESPONSE = 1, PENDING_TIMEOUT_AWAITING_CONNECT_RESPONSE = 2, PENDING_TIMEOUT_ESTABLISH_WITH_SERVER = 3, PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE = 4, PENDING_TIMEOUT_AWAITING_PING = 5, PENDING_TIMEOUT_CLOSE_ACK = 6, PENDING_TIMEOUT_UNUSED1 = 7, PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE = 8, PENDING_TIMEOUT_SSL_ACCEPT = 9, PENDING_TIMEOUT_HTTP_CONTENT = 10, PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND = 11, PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE = 12, PENDING_TIMEOUT_SHUTDOWN_FLUSH = 13, PENDING_TIMEOUT_CGI = 14, PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE = 15, PENDING_TIMEOUT_WS_PONG_CHECK_SEND_PING = 16, PENDING_TIMEOUT_WS_PONG_CHECK_GET_PONG = 17, PENDING_TIMEOUT_CLIENT_ISSUE_PAYLOAD = 18, PENDING_TIMEOUT_AWAITING_SOCKS_GREETING_REPLY = 19, PENDING_TIMEOUT_AWAITING_SOCKS_CONNECT_REPLY = 20, PENDING_TIMEOUT_AWAITING_SOCKS_AUTH_REPLY = 21, PENDING_TIMEOUT_KILLED_BY_SSL_INFO = 22, PENDING_TIMEOUT_KILLED_BY_PARENT = 23, PENDING_TIMEOUT_CLOSE_SEND = 24, PENDING_TIMEOUT_HOLDING_AH = 25, PENDING_TIMEOUT_UDP_IDLE = 26, PENDING_TIMEOUT_CLIENT_CONN_IDLE = 27, PENDING_TIMEOUT_LAGGING = 28, PENDING_TIMEOUT_THREADPOOL = 29, PENDING_TIMEOUT_THREADPOOL_TASK = 30, PENDING_TIMEOUT_KILLED_BY_PROXY_CLIENT_CLOSE = 31, PENDING_TIMEOUT_USER_OK = 32, /****** add new things just above ---^ ******/ PENDING_TIMEOUT_USER_REASON_BASE = 1000 }; #define lws_time_in_microseconds lws_now_usecs #define LWS_TO_KILL_ASYNC -1 /**< If LWS_TO_KILL_ASYNC is given as the timeout sec in a lws_set_timeout() * call, then the connection is marked to be killed at the next timeout * check. This is how you should force-close the wsi being serviced if * you are doing it outside the callback (where you should close by nonzero * return). */ #define LWS_TO_KILL_SYNC -2 /**< If LWS_TO_KILL_SYNC is given as the timeout sec in a lws_set_timeout() * call, then the connection is closed before returning (which may delete * the wsi). This should only be used where the wsi being closed is not the * wsi currently being serviced. */ /** * lws_set_timeout() - marks the wsi as subject to a timeout some seconds hence * * \param wsi: Websocket connection instance * \param reason: timeout reason * \param secs: how many seconds. You may set to LWS_TO_KILL_ASYNC to * force the connection to timeout at the next opportunity, or * LWS_TO_KILL_SYNC to close it synchronously if you know the * wsi is not the one currently being serviced. */ LWS_VISIBLE LWS_EXTERN void lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs); /** * lws_set_timeout_us() - marks the wsi as subject to a timeout some us hence * * \param wsi: Websocket connection instance * \param reason: timeout reason * \param us: 0 removes the timeout, otherwise number of us to wait * * Higher-resolution version of lws_set_timeout(). Actual resolution depends * on platform and load, usually ms. */ void lws_set_timeout_us(struct lws *wsi, enum pending_timeout reason, lws_usec_t us); /* helper for clearer LWS_TO_KILL_ASYNC / LWS_TO_KILL_SYNC usage */ #define lws_wsi_close(w, to_kill) lws_set_timeout(w, 1, to_kill) #define LWS_SET_TIMER_USEC_CANCEL ((lws_usec_t)-1ll) #define LWS_USEC_PER_SEC ((lws_usec_t)1000000) /** * lws_set_timer_usecs() - schedules a callback on the wsi in the future * * \param wsi: Websocket connection instance * \param usecs: LWS_SET_TIMER_USEC_CANCEL removes any existing scheduled * callback, otherwise number of microseconds in the future * the callback will occur at. * * NOTE: event loop support for this: * * default poll() loop: yes * libuv event loop: yes * libev: not implemented (patch welcome) * libevent: not implemented (patch welcome) * * After the deadline expires, the wsi will get a callback of type * LWS_CALLBACK_TIMER and the timer is exhausted. The deadline may be * continuously deferred by further calls to lws_set_timer_usecs() with a later * deadline, or cancelled by lws_set_timer_usecs(wsi, -1). * * If the timer should repeat, lws_set_timer_usecs() must be called again from * LWS_CALLBACK_TIMER. * * Accuracy depends on the platform and the load on the event loop or system... * all that's guaranteed is the callback will come after the requested wait * period. */ LWS_VISIBLE LWS_EXTERN void lws_set_timer_usecs(struct lws *wsi, lws_usec_t usecs); struct lws_sorted_usec_list; typedef void (*sul_cb_t)(struct lws_sorted_usec_list *sul); typedef struct lws_sorted_usec_list { struct lws_dll2 list; /* simplify the code by keeping this at start */ lws_usec_t us; sul_cb_t cb; uint32_t latency_us; /* us it may safely be delayed */ } lws_sorted_usec_list_t; /* * There are multiple sul owners to allow accounting for, a) events that must * wake from suspend, and b) events that can be missued due to suspend */ #define LWS_COUNT_PT_SUL_OWNERS 2 #define LWSSULLI_MISS_IF_SUSPENDED 0 #define LWSSULLI_WAKE_IF_SUSPENDED 1 /* * lws_sul2_schedule() - schedule a callback * * \param context: the lws_context * \param tsi: the thread service index (usually 0) * \param flags: LWSSULLI_... * \param sul: pointer to the sul element * * Generic callback-at-a-later time function. The callback happens on the * event loop thread context. * * Although the api has us resultion, the actual resolution depends on the * platform and may be, eg, 1ms. * * This doesn't allocate and doesn't fail. * * If flags contains LWSSULLI_WAKE_IF_SUSPENDED, the scheduled event is placed * on a sul owner list that, if the system has entered low power suspend mode, * tries to arrange that the system should wake from platform suspend just * before the event is due. Scheduled events without this flag will be missed * in the case the system is in suspend and nothing else happens to have woken * it. * * You can call it again with another us value to change the delay or move the * event to a different owner (ie, wake or miss on suspend). */ LWS_VISIBLE LWS_EXTERN void lws_sul2_schedule(struct lws_context *context, int tsi, int flags, lws_sorted_usec_list_t *sul); /* * lws_sul_cancel() - cancel scheduled callback * * \param sul: pointer to the sul element * * If it's scheduled, remove the sul from its owning sorted list. * If not scheduled, it's a NOP. */ LWS_VISIBLE LWS_EXTERN void lws_sul_cancel(lws_sorted_usec_list_t *sul); /* * lws_sul_earliest_wakeable_event() - get earliest wake-from-suspend event * * \param ctx: the lws context * \param pearliest: pointer to lws_usec_t to take the result * * Either returns 1 if no pending event, or 0 and sets *pearliest to the * MONOTONIC time of the current earliest next expected event. */ LWS_VISIBLE LWS_EXTERN int lws_sul_earliest_wakeable_event(struct lws_context *ctx, lws_usec_t *pearliest); /* * For backwards compatibility * * If us is LWS_SET_TIMER_USEC_CANCEL, the sul is removed from the scheduler. * New code can use lws_sul_cancel() */ LWS_VISIBLE LWS_EXTERN void lws_sul_schedule(struct lws_context *ctx, int tsi, lws_sorted_usec_list_t *sul, sul_cb_t _cb, lws_usec_t _us); LWS_VISIBLE LWS_EXTERN void lws_sul_schedule_wakesuspend(struct lws_context *ctx, int tsi, lws_sorted_usec_list_t *sul, sul_cb_t _cb, lws_usec_t _us); #if defined(LWS_WITH_SUL_DEBUGGING) /** * lws_sul_debug_zombies() - assert there are no scheduled sul in a given object * * \param ctx: lws_context * \param po: pointer to the object that is about to be destroyed * \param len: length of the object that is about to be destroyed * \param destroy_description: string clue what any failure is related to * * This is an optional debugging helper that walks the sul scheduler lists * confirming that there are no suls scheduled that live inside the object * footprint described by po and len. When internal objects are about to be * destroyed, like wsi / user_data or secure stream handles, if * LWS_WITH_SUL_DEBUGGING is enabled the scheduler is checked for anything * in the object being destroyed. If something found, an error is printed and * an assert fired. * * Internal sul like timeouts should always be cleaned up correctly, but user * suls in, eg, wsi user_data area, or in secure stream user allocation, may be * the cause of difficult to find bugs if valgrind not available and the user * code left a sul in the scheduler after destroying the object the sul was * living in. */ LWS_VISIBLE LWS_EXTERN void lws_sul_debug_zombies(struct lws_context *ctx, void *po, size_t len, const char *destroy_description); #else #define lws_sul_debug_zombies(_a, _b, _c, _d) #endif /* * lws_validity_confirmed() - reset the validity timer for a network connection * * \param wsi: the connection that saw traffic proving the connection valid * * Network connections are subject to intervals defined by the context, the * vhost if server connections, or the client connect info if a client * connection. If the connection goes longer than the specified time since * last observing traffic that can only happen if traffic is passing in both * directions, then lws will try to create a PING transaction on the network * connection. * * If the connection reaches the specified `.secs_since_valid_hangup` time * still without any proof of validity, the connection will be closed. * * If the PONG comes, or user code observes traffic that satisfies the proof * that both directions are passing traffic to the peer and calls this api, * the connection validity timer is reset and the scheme repeats. */ LWS_VISIBLE LWS_EXTERN void lws_validity_confirmed(struct lws *wsi); /* * These are not normally needed, they're exported for the case there's code * using lws_sul for which lws is an optional link dependency. */ LWS_VISIBLE LWS_EXTERN int __lws_sul_insert(lws_dll2_owner_t *own, lws_sorted_usec_list_t *sul); LWS_VISIBLE LWS_EXTERN lws_usec_t __lws_sul_service_ripe(lws_dll2_owner_t *own, int own_len, lws_usec_t usnow); ///@} libwebsockets-4.3.5/include/libwebsockets/lws-tls-sessions.h000066400000000000000000000060041476025525100242770ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /*! \defgroup tls_sessions TLS Session Management APIs related to managing TLS Sessions */ //@{ #define LWS_SESSION_TAG_LEN 96 struct lws_tls_session_dump { char tag[LWS_SESSION_TAG_LEN]; void *blob; void *opaque; size_t blob_len; }; typedef int (*lws_tls_sess_cb_t)(struct lws_context *cx, struct lws_tls_session_dump *info); /** * lws_tls_session_dump_save() - serialize a tls session via a callback * * \param vh: the vhost to load into the session cache * \param host: the name of the host the session relates to * \param port: the port the session connects to on the host * \param cb_save: the callback to perform the saving of the session blob * \param opq: an opaque pointer passed into the callback * * If a session matching the vhost/host/port exists in the vhost's session * cache, serialize it via the provided callback. * * \p opq is passed to the callback without being used by lws at all. */ LWS_VISIBLE LWS_EXTERN int lws_tls_session_dump_save(struct lws_vhost *vh, const char *host, uint16_t port, lws_tls_sess_cb_t cb_save, void *opq); /** * lws_tls_session_dump_load() - deserialize a tls session via a callback * * \param vh: the vhost to load into the session cache * \param host: the name of the host the session relates to * \param port: the port the session connects to on the host * \param cb_load: the callback to retreive the session blob from * \param opq: an opaque pointer passed into the callback * * Try to preload a session described by the first three parameters into the * client session cache, from the given callback. * * \p opq is passed to the callback without being used by lws at all. */ LWS_VISIBLE LWS_EXTERN int lws_tls_session_dump_load(struct lws_vhost *vh, const char *host, uint16_t port, lws_tls_sess_cb_t cb_load, void *opq); ///@} libwebsockets-4.3.5/include/libwebsockets/lws-tokenize.h000066400000000000000000000250341476025525100234650ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /* Do not treat - as a terminal character, so "my-token" is one token */ #define LWS_TOKENIZE_F_MINUS_NONTERM (1 << 0) /* Separately report aggregate colon-delimited tokens */ #define LWS_TOKENIZE_F_AGG_COLON (1 << 1) /* Enforce sequencing for a simple token , token , token ... list */ #define LWS_TOKENIZE_F_COMMA_SEP_LIST (1 << 2) /* Allow more characters in the tokens and less delimiters... default is * only alphanumeric + underscore in tokens */ #define LWS_TOKENIZE_F_RFC7230_DELIMS (1 << 3) /* Do not treat . as a terminal character, so "warmcat.com" is one token */ #define LWS_TOKENIZE_F_DOT_NONTERM (1 << 4) /* If something starts looking like a float, like 1.2, force to be string token. * This lets you receive dotted-quads like 192.168.0.1 as string tokens, and * avoids illegal float format detection like 1.myserver.com */ #define LWS_TOKENIZE_F_NO_FLOATS (1 << 5) /* Instead of LWS_TOKZE_INTEGER, report integers as any other string token */ #define LWS_TOKENIZE_F_NO_INTEGERS (1 << 6) /* # makes the rest of the line a comment */ #define LWS_TOKENIZE_F_HASH_COMMENT (1 << 7) /* Do not treat / as a terminal character, so "multipart/related" is one token */ #define LWS_TOKENIZE_F_SLASH_NONTERM (1 << 8) /* Do not treat * as a terminal character, so "myfile*" is one token */ #define LWS_TOKENIZE_F_ASTERISK_NONTERM (1 << 9) /* Do not treat = as a terminal character, so "x=y" is one token */ #define LWS_TOKENIZE_F_EQUALS_NONTERM (1 << 10) typedef enum { LWS_TOKZE_ERRS = 5, /* the number of errors defined */ LWS_TOKZE_ERR_BROKEN_UTF8 = -5, /* malformed or partial utf8 */ LWS_TOKZE_ERR_UNTERM_STRING = -4, /* ended while we were in "" */ LWS_TOKZE_ERR_MALFORMED_FLOAT = -3, /* like 0..1 or 0.1.1 */ LWS_TOKZE_ERR_NUM_ON_LHS = -2, /* like 123= or 0.1= */ LWS_TOKZE_ERR_COMMA_LIST = -1, /* like ",tok", or, "tok,," */ LWS_TOKZE_ENDED = 0, /* no more content */ /* Note: results have ordinal 1+, EOT is 0 and errors are < 0 */ LWS_TOKZE_DELIMITER, /* a delimiter appeared */ LWS_TOKZE_TOKEN, /* a token appeared */ LWS_TOKZE_INTEGER, /* an integer appeared */ LWS_TOKZE_FLOAT, /* a float appeared */ LWS_TOKZE_TOKEN_NAME_EQUALS, /* token [whitespace] = */ LWS_TOKZE_TOKEN_NAME_COLON, /* token [whitespace] : (only with LWS_TOKENIZE_F_AGG_COLON flag) */ LWS_TOKZE_QUOTED_STRING, /* "*", where * may have any char */ } lws_tokenize_elem; /* * helper enums to allow caller to enforce legal delimiter sequencing, eg * disallow "token,,token", "token,", and ",token" */ enum lws_tokenize_delimiter_tracking { LWSTZ_DT_NEED_FIRST_CONTENT, LWSTZ_DT_NEED_DELIM, LWSTZ_DT_NEED_NEXT_CONTENT, }; typedef struct lws_tokenize { const char *start; /**< set to the start of the string to tokenize */ const char *token; /**< the start of an identified token or delimiter */ size_t len; /**< set to the length of the string to tokenize */ size_t token_len; /**< the length of the identied token or delimiter */ uint16_t flags; /**< optional LWS_TOKENIZE_F_ flags, or 0 */ uint8_t delim; int8_t e; /**< convenient for storing lws_tokenize return */ } lws_tokenize_t; /** * lws_tokenize() - breaks down a string into tokens and delimiters in-place * * \param ts: the lws_tokenize struct to init * \param start: the string to tokenize * \param flags: LWS_TOKENIZE_F_ option flags * * This initializes the tokenize struct to point to the given string, and * sets the length to 2GiB - 1 (so there must be a terminating NUL)... you can * override this requirement by setting ts.len yourself before using it. * * .delim is also initialized to LWSTZ_DT_NEED_FIRST_CONTENT. */ LWS_VISIBLE LWS_EXTERN void lws_tokenize_init(struct lws_tokenize *ts, const char *start, int flags); /** * lws_tokenize() - breaks down a string into tokens and delimiters in-place * * \param ts: the lws_tokenize struct with information and state on what to do * * The \p ts struct should have its start, len and flags members initialized to * reflect the string to be tokenized and any options. * * Then `lws_tokenize()` may be called repeatedly on the struct, returning one * of `lws_tokenize_elem` each time, and with the struct's `token` and * `token_len` members set to describe the content of the delimiter or token * payload each time. * * There are no allocations during the process. * * returns lws_tokenize_elem that was identified (LWS_TOKZE_ENDED means reached * the end of the string). */ LWS_VISIBLE LWS_EXTERN lws_tokenize_elem lws_tokenize(struct lws_tokenize *ts); /** * lws_tokenize_cstr() - copy token string to NUL-terminated buffer * * \param ts: pointer to lws_tokenize struct to operate on * \param str: destination buffer * \pparam max: bytes in destination buffer * * returns 0 if OK or nonzero if the string + NUL won't fit. */ LWS_VISIBLE LWS_EXTERN int lws_tokenize_cstr(struct lws_tokenize *ts, char *str, size_t max); /* * lws_strexp: flexible string expansion helper api * * This stateful helper can handle multiple separate input chunks and multiple * output buffer loads with arbitrary boundaries between literals and expanded * symbols. This allows it to handle fragmented input as well as arbitrarily * long symbol expansions that are bigger than the output buffer itself. * * A user callback is used to convert symbol names to the symbol value. * * A single byte buffer for input and another for output can process any * length substitution then. The state object is around 64 bytes on a 64-bit * system and it only uses 8 bytes stack. */ typedef int (*lws_strexp_expand_cb)(void *priv, const char *name, char *out, size_t *pos, size_t olen, size_t *exp_ofs); typedef struct lws_strexp { char name[32]; lws_strexp_expand_cb cb; void *priv; char *out; size_t olen; size_t pos; size_t exp_ofs; uint8_t name_pos; char state; } lws_strexp_t; enum { LSTRX_DONE, /* it completed OK */ LSTRX_FILLED_OUT, /* out buf filled and needs resetting */ LSTRX_FATAL_NAME_TOO_LONG = -1, /* fatal */ LSTRX_FATAL_NAME_UNKNOWN = -2, }; /** * lws_strexp_init() - initialize an lws_strexp_t for use * * \p exp: the exp object to init * \p priv: the user's object pointer to pass to callback * \p cb: the callback to expand named objects * \p out: the start of the output buffer, or NULL just to get the length * \p olen: the length of the output buffer in bytes * * Prepares an lws_strexp_t for use and sets the initial output buffer * * If \p out is NULL, substitution proceeds normally, but no output is produced, * only the length is returned. olen should be set to the largest feasible * overall length. To use this mode, the substitution callback must also check * for NULL \p out and avoid producing the output. */ LWS_VISIBLE LWS_EXTERN void lws_strexp_init(lws_strexp_t *exp, void *priv, lws_strexp_expand_cb cb, char *out, size_t olen); /** * lws_strexp_reset_out() - reset the output buffer on an existing strexp * * \p exp: the exp object to init * \p out: the start of the output buffer, or NULL to just get length * \p olen: the length of the output buffer in bytes * * Provides a new output buffer for lws_strexp_expand() to continue to write * into. It can be the same as the old one if it has been copied out or used. * The position of the next write will be reset to the start of the given buf. * * If \p out is NULL, substitution proceeds normally, but no output is produced, * only the length is returned. \p olen should be set to the largest feasible * overall length. To use this mode, the substitution callback must also check * for NULL \p out and avoid producing the output. */ LWS_VISIBLE LWS_EXTERN void lws_strexp_reset_out(lws_strexp_t *exp, char *out, size_t olen); /** * lws_strexp_expand() - copy / expand a string into the output buffer * * \p exp: the exp object for the copy / expansion * \p in: the start of the next input data * \p len: the length of the input data * \p pused_in: pointer to write the amount of input used * \p pused_out: pointer to write the amount of output used * * Copies in to the output buffer set in exp, expanding any ${name} tokens using * the callback. \p *pused_in is set to the number of input chars used and * \p *pused_out the number of output characters used * * May return LSTRX_FILLED_OUT early with *pused < len if the output buffer is * filled. Handle the output buffer and reset it with lws_strexp_reset_out() * before calling again with adjusted in / len to continue. * * In the case of large expansions, the expansion itself may fill the output * buffer, in which case the expansion callback returns the LSTRX_FILLED_OUT * and will be called again to continue with its *exp_ofs parameter set * appropriately. */ LWS_VISIBLE LWS_EXTERN int lws_strexp_expand(lws_strexp_t *exp, const char *in, size_t len, size_t *pused_in, size_t *pused_out); /** * lws_strcmp_wildcard() - strcmp but the first arg can have wildcards * * \p wildcard: a string that may contain zero to three *, and may lack a NUL * \p wlen: length of the wildcard string * \p check: string to test to see if it matches wildcard * \p clen: length of check string * * Like strcmp, but supports patterns like "a*", "a*b", "a*b*" etc * where a and b are arbitrary substrings. Both the wc and check strings need * not be NUL terminated, but are specified by lengths. */ LWS_VISIBLE LWS_EXTERN int lws_strcmp_wildcard(const char *wildcard, size_t wlen, const char *check, size_t clen); libwebsockets-4.3.5/include/libwebsockets/lws-vfs.h000066400000000000000000000220111476025525100224230ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /*! \defgroup fops file operation wrapping * * ##File operation wrapping * * Use these helper functions if you want to access a file from the perspective * of a specific wsi, which is usually the case. If you just want contextless * file access, use the fops callbacks directly with NULL wsi instead of these * helpers. * * If so, then it calls the platform handler or user overrides where present * (as defined in info->fops) * * The advantage from all this is user code can be portable for file operations * without having to deal with differences between platforms. */ //@{ /** struct lws_plat_file_ops - Platform-specific file operations * * These provide platform-agnostic ways to deal with filesystem access in the * library and in the user code. */ #if defined(LWS_PLAT_FREERTOS) /* sdk preprocessor defs? compiler issue? gets confused with member names */ #define LWS_FOP_OPEN _open #define LWS_FOP_CLOSE _close #define LWS_FOP_SEEK_CUR _seek_cur #define LWS_FOP_READ _read #define LWS_FOP_WRITE _write #else #define LWS_FOP_OPEN open #define LWS_FOP_CLOSE close #define LWS_FOP_SEEK_CUR seek_cur #define LWS_FOP_READ read #define LWS_FOP_WRITE write #endif #define LWS_FOP_FLAGS_MASK ((1 << 23) - 1) #define LWS_FOP_FLAG_COMPR_ACCEPTABLE_GZIP (1 << 24) #define LWS_FOP_FLAG_COMPR_IS_GZIP (1 << 25) #define LWS_FOP_FLAG_MOD_TIME_VALID (1 << 26) #define LWS_FOP_FLAG_VIRTUAL (1 << 27) struct lws_plat_file_ops; struct lws_fop_fd { lws_filefd_type fd; /**< real file descriptor related to the file... */ const struct lws_plat_file_ops *fops; /**< fops that apply to this fop_fd */ void *filesystem_priv; /**< ignored by lws; owned by the fops handlers */ lws_filepos_t pos; /**< generic "position in file" */ lws_filepos_t len; /**< generic "length of file" */ lws_fop_flags_t flags; /**< copy of the returned flags */ uint32_t mod_time; /**< optional "modification time of file", only valid if .open() * set the LWS_FOP_FLAG_MOD_TIME_VALID flag */ }; typedef struct lws_fop_fd *lws_fop_fd_t; struct lws_fops_index { const char *sig; /* NULL or vfs signature, eg, ".zip/" */ uint8_t len; /* length of above string */ }; struct lws_plat_file_ops { lws_fop_fd_t (*LWS_FOP_OPEN)(const struct lws_plat_file_ops *fops, const char *filename, const char *vpath, lws_fop_flags_t *flags); /**< Open file (always binary access if plat supports it) * vpath may be NULL, or if the fops understands it, the point at which * the filename's virtual part starts. * *flags & LWS_FOP_FLAGS_MASK should be set to O_RDONLY or O_RDWR. * If the file may be gzip-compressed, * LWS_FOP_FLAG_COMPR_ACCEPTABLE_GZIP is set. If it actually is * gzip-compressed, then the open handler should OR * LWS_FOP_FLAG_COMPR_IS_GZIP on to *flags before returning. */ int (*LWS_FOP_CLOSE)(lws_fop_fd_t *fop_fd); /**< close file AND set the pointer to NULL */ lws_fileofs_t (*LWS_FOP_SEEK_CUR)(lws_fop_fd_t fop_fd, lws_fileofs_t offset_from_cur_pos); /**< seek from current position */ int (*LWS_FOP_READ)(lws_fop_fd_t fop_fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len); /**< Read from file, on exit *amount is set to amount actually read */ int (*LWS_FOP_WRITE)(lws_fop_fd_t fop_fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len); /**< Write to file, on exit *amount is set to amount actually written */ struct lws_fops_index fi[3]; /**< vfs path signatures implying use of this fops */ const struct lws_plat_file_ops *next; /**< NULL or next fops in list */ /* Add new things just above here ---^ * This is part of the ABI, don't needlessly break compatibility */ }; /** * lws_get_fops() - get current file ops * * \param context: context */ LWS_VISIBLE LWS_EXTERN struct lws_plat_file_ops * LWS_WARN_UNUSED_RESULT lws_get_fops(struct lws_context *context); LWS_VISIBLE LWS_EXTERN void lws_set_fops(struct lws_context *context, const struct lws_plat_file_ops *fops); /** * lws_vfs_tell() - get current file position * * \param fop_fd: fop_fd we are asking about */ LWS_VISIBLE LWS_EXTERN lws_filepos_t LWS_WARN_UNUSED_RESULT lws_vfs_tell(lws_fop_fd_t fop_fd); /** * lws_vfs_get_length() - get current file total length in bytes * * \param fop_fd: fop_fd we are asking about */ LWS_VISIBLE LWS_EXTERN lws_filepos_t LWS_WARN_UNUSED_RESULT lws_vfs_get_length(lws_fop_fd_t fop_fd); /** * lws_vfs_get_mod_time() - get time file last modified * * \param fop_fd: fop_fd we are asking about */ LWS_VISIBLE LWS_EXTERN uint32_t LWS_WARN_UNUSED_RESULT lws_vfs_get_mod_time(lws_fop_fd_t fop_fd); /** * lws_vfs_file_seek_set() - seek relative to start of file * * \param fop_fd: fop_fd we are seeking in * \param offset: offset from start of file */ LWS_VISIBLE LWS_EXTERN lws_fileofs_t lws_vfs_file_seek_set(lws_fop_fd_t fop_fd, lws_fileofs_t offset); /** * lws_vfs_file_seek_end() - seek relative to end of file * * \param fop_fd: fop_fd we are seeking in * \param offset: offset from start of file */ LWS_VISIBLE LWS_EXTERN lws_fileofs_t lws_vfs_file_seek_end(lws_fop_fd_t fop_fd, lws_fileofs_t offset); extern struct lws_plat_file_ops fops_zip; /** * lws_plat_file_open() - open vfs filepath * * \param fops: file ops struct that applies to this descriptor * \param vfs_path: filename to open * \param flags: pointer to open flags * * The vfs_path is scanned for known fops signatures, and the open directed * to any matching fops open. * * User code should use this api to perform vfs opens. * * returns semi-opaque handle */ LWS_VISIBLE LWS_EXTERN lws_fop_fd_t LWS_WARN_UNUSED_RESULT lws_vfs_file_open(const struct lws_plat_file_ops *fops, const char *vfs_path, lws_fop_flags_t *flags); /** * lws_plat_file_close() - close file * * \param fop_fd: file handle to close */ static LWS_INLINE int lws_vfs_file_close(lws_fop_fd_t *fop_fd) { if (*fop_fd && (*fop_fd)->fops) return (*fop_fd)->fops->LWS_FOP_CLOSE(fop_fd); return 0; } /** * lws_plat_file_seek_cur() - close file * * * \param fop_fd: file handle * \param offset: position to seek to */ static LWS_INLINE lws_fileofs_t lws_vfs_file_seek_cur(lws_fop_fd_t fop_fd, lws_fileofs_t offset) { return fop_fd->fops->LWS_FOP_SEEK_CUR(fop_fd, offset); } /** * lws_plat_file_read() - read from file * * \param fop_fd: file handle * \param amount: how much to read (rewritten by call) * \param buf: buffer to write to * \param len: max length */ static LWS_INLINE int LWS_WARN_UNUSED_RESULT lws_vfs_file_read(lws_fop_fd_t fop_fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len) { return fop_fd->fops->LWS_FOP_READ(fop_fd, amount, buf, len); } /** * lws_plat_file_write() - write from file * * \param fop_fd: file handle * \param amount: how much to write (rewritten by call) * \param buf: buffer to read from * \param len: max length */ static LWS_INLINE int LWS_WARN_UNUSED_RESULT lws_vfs_file_write(lws_fop_fd_t fop_fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len) { return fop_fd->fops->LWS_FOP_WRITE(fop_fd, amount, buf, len); } /* these are the platform file operations implementations... they can * be called directly and used in fops arrays */ LWS_VISIBLE LWS_EXTERN lws_fop_fd_t _lws_plat_file_open(const struct lws_plat_file_ops *fops, const char *filename, const char *vpath, lws_fop_flags_t *flags); LWS_VISIBLE LWS_EXTERN int _lws_plat_file_close(lws_fop_fd_t *fop_fd); LWS_VISIBLE LWS_EXTERN lws_fileofs_t _lws_plat_file_seek_cur(lws_fop_fd_t fop_fd, lws_fileofs_t offset); LWS_VISIBLE LWS_EXTERN int _lws_plat_file_read(lws_fop_fd_t fop_fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len); LWS_VISIBLE LWS_EXTERN int _lws_plat_file_write(lws_fop_fd_t fop_fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len); LWS_VISIBLE LWS_EXTERN int lws_alloc_vfs_file(struct lws_context *context, const char *filename, uint8_t **buf, lws_filepos_t *amount); //@} libwebsockets-4.3.5/include/libwebsockets/lws-write.h000066400000000000000000000237471476025525100230000ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /*! \defgroup sending-data Sending data APIs related to writing data on a connection */ //@{ #if !defined(LWS_SIZEOFPTR) #define LWS_SIZEOFPTR ((int)sizeof (void *)) #endif #if defined(__x86_64__) #define _LWS_PAD_SIZE 16 /* Intel recommended for best performance */ #else #define _LWS_PAD_SIZE LWS_SIZEOFPTR /* Size of a pointer on the target arch */ #endif #define _LWS_PAD(n) (((n) % _LWS_PAD_SIZE) ? \ ((n) + (_LWS_PAD_SIZE - ((n) % _LWS_PAD_SIZE))) : (n)) /* last 2 is for lws-meta */ #define LWS_PRE _LWS_PAD(4 + 10 + 2) /* used prior to 1.7 and retained for backward compatibility */ #define LWS_SEND_BUFFER_PRE_PADDING LWS_PRE #define LWS_SEND_BUFFER_POST_PADDING 0 #define LWS_WRITE_RAW LWS_WRITE_HTTP /* * NOTE: These public enums are part of the abi. If you want to add one, * add it at where specified so existing users are unaffected. */ enum lws_write_protocol { LWS_WRITE_TEXT = 0, /**< Send a ws TEXT message,the pointer must have LWS_PRE valid * memory behind it. * * The receiver expects only valid utf-8 in the payload */ LWS_WRITE_BINARY = 1, /**< Send a ws BINARY message, the pointer must have LWS_PRE valid * memory behind it. * * Any sequence of bytes is valid */ LWS_WRITE_CONTINUATION = 2, /**< Continue a previous ws message, the pointer must have LWS_PRE valid * memory behind it */ LWS_WRITE_HTTP = 3, /**< Send HTTP content */ /* LWS_WRITE_CLOSE is handled by lws_close_reason() */ LWS_WRITE_PING = 5, LWS_WRITE_PONG = 6, /* Same as write_http but we know this write ends the transaction */ LWS_WRITE_HTTP_FINAL = 7, /* HTTP2 */ LWS_WRITE_HTTP_HEADERS = 8, /**< Send http headers (http2 encodes this payload and LWS_WRITE_HTTP * payload differently, http 1.x links also handle this correctly. so * to be compatible with both in the future,header response part should * be sent using this regardless of http version expected) */ LWS_WRITE_HTTP_HEADERS_CONTINUATION = 9, /**< Continuation of http/2 headers */ /****** add new things just above ---^ ******/ /* flags */ LWS_WRITE_BUFLIST = 0x20, /**< Don't actually write it... stick it on the output buflist and * write it as soon as possible. Useful if you learn you have to * write something, have the data to write to hand but the timing is * unrelated as to whether the connection is writable or not, and were * otherwise going to have to allocate a temp buffer and write it * later anyway */ LWS_WRITE_NO_FIN = 0x40, /**< This part of the message is not the end of the message */ LWS_WRITE_H2_STREAM_END = 0x80, /**< Flag indicates this packet should go out with STREAM_END if h2 * STREAM_END is allowed on DATA or HEADERS. */ LWS_WRITE_CLIENT_IGNORE_XOR_MASK = 0x80 /**< client packet payload goes out on wire unmunged * only useful for security tests since normal servers cannot * decode the content if used */ }; /* used with LWS_CALLBACK_CHILD_WRITE_VIA_PARENT */ struct lws_write_passthru { struct lws *wsi; unsigned char *buf; size_t len; enum lws_write_protocol wp; }; /** * lws_write() - Apply protocol then write data to client * * \param wsi: Websocket instance (available from user callback) * \param buf: The data to send. For data being sent on a websocket * connection (ie, not default http), this buffer MUST have * LWS_PRE bytes valid BEFORE the pointer. * This is so the protocol header data can be added in-situ. * \param len: Count of the data bytes in the payload starting from buf * \param protocol: Use LWS_WRITE_HTTP to reply to an http connection, and one * of LWS_WRITE_BINARY or LWS_WRITE_TEXT to send appropriate * data on a websockets connection. Remember to allow the extra * bytes before and after buf if LWS_WRITE_BINARY or LWS_WRITE_TEXT * are used. * * This function provides the way to issue data back to the client, for any * role (h1, h2, ws, raw, etc). It can only be called from the WRITEABLE * callback. * * IMPORTANT NOTICE! * * When sending with ws protocol * * LWS_WRITE_TEXT, * LWS_WRITE_BINARY, * LWS_WRITE_CONTINUATION, * LWS_WRITE_PING, * LWS_WRITE_PONG, * * or sending on http/2... the send buffer has to have LWS_PRE bytes valid * BEFORE the buffer pointer you pass to lws_write(). Since you'll probably * want to use http/2 before too long, it's wise to just always do this with * lws_write buffers... LWS_PRE is typically 16 bytes it's not going to hurt * usually. * * start of alloc ptr passed to lws_write end of allocation * | | | * v <-- LWS_PRE bytes --> v v * [---------------- allocated memory ---------------] * (for lws use) [====== user buffer ======] * * This allows us to add protocol info before the data, and send as one packet * on the network without payload copying, for maximum efficiency. * * So for example you need this kind of code to use lws_write with a * 128-byte payload * * char buf[LWS_PRE + 128]; * * // fill your part of the buffer... for example here it's all zeros * memset(&buf[LWS_PRE], 0, 128); * * if (lws_write(wsi, &buf[LWS_PRE], 128, LWS_WRITE_TEXT) < 128) { * ... the connection is dead ... * return -1; * } * * LWS_PRE is currently 16, which covers ws and h2 frame headers, and is * compatible with 32 and 64-bit alignment requirements. * * (LWS_SEND_BUFFER_POST_PADDING is deprecated, it's now 0 and can be left off.) * * Return may be -1 is the write failed in a way indicating that the connection * has ended already, in which case you can close your side, or a positive * number that is at least the number of bytes requested to send (under some * encapsulation scenarios, it can indicate more than you asked was sent). * * The recommended test of the return is less than what you asked indicates * the connection has failed. * * Truncated Writes * ================ * * The OS may not accept everything you asked to write on the connection. * * Posix defines POLLOUT indication from poll() to show that the connection * will accept more write data, but it doesn't specifiy how much. It may just * accept one byte of whatever you wanted to send. * * LWS will buffer the remainder automatically, and send it out autonomously. * * During that time, WRITABLE callbacks to user code will be suppressed and * instead used internally. After it completes, it will send an extra WRITEABLE * callback to the user code, in case any request was missed. So it is possible * to receive unasked-for WRITEABLE callbacks, the user code should have enough * state to know if it wants to write anything and just return if not. * * This is to handle corner cases where unexpectedly the OS refuses what we * usually expect it to accept. It's not recommended as the way to randomly * send huge payloads, since it is being copied on to heap and is inefficient. * * Huge payloads should instead be sent in fragments that are around 2 x mtu, * which is almost always directly accepted by the OS. To simplify this for * ws fragments, there is a helper lws_write_ws_flags() below that simplifies * selecting the correct flags to give lws_write() for each fragment. * * In the case of RFC8441 ws-over-h2, you cannot send ws fragments larger than * the max h2 frame size, typically 16KB, but should further restrict it to * the same ~2 x mtu limit mentioned above. */ LWS_VISIBLE LWS_EXTERN int lws_write(struct lws *wsi, unsigned char *buf, size_t len, enum lws_write_protocol protocol); /* helper for case where buffer may be const */ #define lws_write_http(wsi, buf, len) \ lws_write(wsi, (unsigned char *)(buf), len, LWS_WRITE_HTTP) /** * lws_write_ws_flags() - Helper for multi-frame ws message flags * * \param initial: the lws_write flag to use for the start fragment, eg, * LWS_WRITE_TEXT * \param is_start: nonzero if this is the first fragment of the message * \param is_end: nonzero if this is the last fragment of the message * * Returns the correct LWS_WRITE_ flag to use for each fragment of a message * in turn. */ static LWS_INLINE int lws_write_ws_flags(int initial, int is_start, int is_end) { int r; if (is_start) r = initial; else r = LWS_WRITE_CONTINUATION; if (!is_end) r |= LWS_WRITE_NO_FIN; return r; } /** * lws_raw_transaction_completed() - Helper for flushing before close * * \param wsi: the struct lws to operate on * * Returns -1 if the wsi can close now. However if there is buffered, unsent * data, the wsi is marked as to be closed when the output buffer data is * drained, and it returns 0. * * For raw cases where the transaction completed without failure, * `return lws_raw_transaction_completed(wsi)` should better be used than * return -1. */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_raw_transaction_completed(struct lws *wsi); ///@} libwebsockets-4.3.5/include/libwebsockets/lws-writeable.h000066400000000000000000000213041476025525100236070ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /** \defgroup callback-when-writeable Callback when writeable * * ##Callback When Writeable * * lws can only write data on a connection when it is able to accept more * data without blocking. * * So a basic requirement is we should only use the lws_write() apis when the * connection we want to write on says that he can accept more data. * * When lws cannot complete your send at the time, it will buffer the data * and send it in the background, suppressing any further WRITEABLE callbacks * on that connection until it completes. So it is important to write new * things in a new writeable callback. * * These apis reflect the various ways we can indicate we would like to be * called back when one or more connections is writeable. */ ///@{ /** * lws_callback_on_writable() - Request a callback when this socket * becomes able to be written to without * blocking * * \param wsi: Websocket connection instance to get callback for * * - Which: only this wsi * - When: when the individual connection becomes writeable * - What: LWS_CALLBACK_*_WRITEABLE */ LWS_VISIBLE LWS_EXTERN int lws_callback_on_writable(struct lws *wsi); /** * lws_callback_on_writable_all_protocol() - Request a callback for all * connections using the given protocol when it * becomes possible to write to each socket without * blocking in turn. * * \param context: lws_context * \param protocol: Protocol whose connections will get callbacks * * - Which: connections using this protocol on ANY VHOST * - When: when the individual connection becomes writeable * - What: LWS_CALLBACK_*_WRITEABLE */ LWS_VISIBLE LWS_EXTERN int lws_callback_on_writable_all_protocol(const struct lws_context *context, const struct lws_protocols *protocol); /** * lws_callback_on_writable_all_protocol_vhost() - Request a callback for * all connections on same vhost using the given protocol * when it becomes possible to write to each socket without * blocking in turn. * * \param vhost: Only consider connections on this lws_vhost * \param protocol: Protocol whose connections will get callbacks * * - Which: connections using this protocol on GIVEN VHOST ONLY * - When: when the individual connection becomes writeable * - What: LWS_CALLBACK_*_WRITEABLE */ LWS_VISIBLE LWS_EXTERN int lws_callback_on_writable_all_protocol_vhost(const struct lws_vhost *vhost, const struct lws_protocols *protocol); /** * lws_callback_all_protocol() - Callback all connections using * the given protocol with the given reason * * \param context: lws_context * \param protocol: Protocol whose connections will get callbacks * \param reason: Callback reason index * * - Which: connections using this protocol on ALL VHOSTS * - When: before returning * - What: reason * * This isn't normally what you want... normally any update of connection- * specific information can wait until a network-related callback like rx, * writable, or close. */ LWS_VISIBLE LWS_EXTERN int lws_callback_all_protocol(struct lws_context *context, const struct lws_protocols *protocol, int reason); /** * lws_callback_all_protocol_vhost() - Callback all connections using * the given protocol with the given reason. This is * deprecated since v2.4: use lws_callback_all_protocol_vhost_args * * \param vh: Vhost whose connections will get callbacks * \param protocol: Which protocol to match. NULL means all. * \param reason: Callback reason index * * - Which: connections using this protocol on GIVEN VHOST ONLY * - When: now * - What: reason */ LWS_VISIBLE LWS_EXTERN int lws_callback_all_protocol_vhost(struct lws_vhost *vh, const struct lws_protocols *protocol, int reason) LWS_WARN_DEPRECATED; /** * lws_callback_all_protocol_vhost_args() - Callback all connections using * the given protocol with the given reason and args * * \param vh: Vhost whose connections will get callbacks * \param protocol: Which protocol to match. NULL means all. * \param reason: Callback reason index * \param argp: Callback "in" parameter * \param len: Callback "len" parameter * * - Which: connections using this protocol on GIVEN VHOST ONLY * - When: now * - What: reason */ LWS_VISIBLE int lws_callback_all_protocol_vhost_args(struct lws_vhost *vh, const struct lws_protocols *protocol, int reason, void *argp, size_t len); /** * lws_callback_vhost_protocols() - Callback all protocols enabled on a vhost * with the given reason * * \param wsi: wsi whose vhost will get callbacks * \param reason: Callback reason index * \param in: in argument to callback * \param len: len argument to callback * * - Which: connections using this protocol on same VHOST as wsi ONLY * - When: now * - What: reason * * This is deprecated since v2.5, use lws_callback_vhost_protocols_vhost() * which takes the pointer to the vhost directly without using or needing the * wsi. */ LWS_VISIBLE LWS_EXTERN int lws_callback_vhost_protocols(struct lws *wsi, int reason, void *in, size_t len) LWS_WARN_DEPRECATED; /** * lws_callback_vhost_protocols_vhost() - Callback all protocols enabled on a vhost * with the given reason * * \param vh: vhost that will get callbacks * \param reason: Callback reason index * \param in: in argument to callback * \param len: len argument to callback * * - Which: connections using this protocol on same VHOST as wsi ONLY * - When: now * - What: reason */ LWS_VISIBLE LWS_EXTERN int lws_callback_vhost_protocols_vhost(struct lws_vhost *vh, int reason, void *in, size_t len); LWS_VISIBLE LWS_EXTERN int lws_callback_http_dummy(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len); /** * lws_get_socket_fd() - returns the socket file descriptor * * This is needed to use sendto() on UDP raw sockets * * \param wsi: Websocket connection instance */ LWS_VISIBLE LWS_EXTERN lws_sockfd_type lws_get_socket_fd(struct lws *wsi); /** * lws_get_peer_write_allowance() - get the amount of data writeable to peer * if known * * \param wsi: Websocket connection instance * * if the protocol does not have any guidance, returns -1. Currently only * http2 connections get send window information from this API. But your code * should use it so it can work properly with any protocol. * * If nonzero return is the amount of payload data the peer or intermediary has * reported it has buffer space for. That has NO relationship with the amount * of buffer space your OS can accept on this connection for a write action. * * This number represents the maximum you could send to the peer or intermediary * on this connection right now without the protocol complaining. * * lws manages accounting for send window updates and payload writes * automatically, so this number reflects the situation at the peer or * intermediary dynamically. */ LWS_VISIBLE LWS_EXTERN lws_fileofs_t lws_get_peer_write_allowance(struct lws *wsi); /** * lws_wsi_tx_credit() - get / set generic tx credit if role supports it * * \param wsi: connection to set / get tx credit on * \param peer_to_us: 0 = set / get us-to-peer direction, else peer-to-us * \param add: amount of credit to add * * If the wsi does not support tx credit, returns 0. * * If add is zero, returns one of the wsi tx credit values for the wsi. * If add is nonzero, \p add is added to the selected tx credit value * for the wsi. */ #define LWSTXCR_US_TO_PEER 0 #define LWSTXCR_PEER_TO_US 1 LWS_VISIBLE LWS_EXTERN int lws_wsi_tx_credit(struct lws *wsi, char peer_to_us, int add); ///@} libwebsockets-4.3.5/include/libwebsockets/lws-ws-close.h000066400000000000000000000136501476025525100233720ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /*! \defgroup wsclose Websocket Close * * ##Websocket close frame control * * When we close a ws connection, we can send a reason code and a short * UTF-8 description back with the close packet. */ ///@{ /* * NOTE: These public enums are part of the abi. If you want to add one, * add it at where specified so existing users are unaffected. */ /** enum lws_close_status - RFC6455 close status codes */ enum lws_close_status { LWS_CLOSE_STATUS_NOSTATUS = 0, LWS_CLOSE_STATUS_NORMAL = 1000, /**< 1000 indicates a normal closure, meaning that the purpose for which the connection was established has been fulfilled. */ LWS_CLOSE_STATUS_GOINGAWAY = 1001, /**< 1001 indicates that an endpoint is "going away", such as a server going down or a browser having navigated away from a page. */ LWS_CLOSE_STATUS_PROTOCOL_ERR = 1002, /**< 1002 indicates that an endpoint is terminating the connection due to a protocol error. */ LWS_CLOSE_STATUS_UNACCEPTABLE_OPCODE = 1003, /**< 1003 indicates that an endpoint is terminating the connection because it has received a type of data it cannot accept (e.g., an endpoint that understands only text data MAY send this if it receives a binary message). */ LWS_CLOSE_STATUS_RESERVED = 1004, /**< Reserved. The specific meaning might be defined in the future. */ LWS_CLOSE_STATUS_NO_STATUS = 1005, /**< 1005 is a reserved value and MUST NOT be set as a status code in a Close control frame by an endpoint. It is designated for use in applications expecting a status code to indicate that no status code was actually present. */ LWS_CLOSE_STATUS_ABNORMAL_CLOSE = 1006, /**< 1006 is a reserved value and MUST NOT be set as a status code in a Close control frame by an endpoint. It is designated for use in applications expecting a status code to indicate that the connection was closed abnormally, e.g., without sending or receiving a Close control frame. */ LWS_CLOSE_STATUS_INVALID_PAYLOAD = 1007, /**< 1007 indicates that an endpoint is terminating the connection because it has received data within a message that was not consistent with the type of the message (e.g., non-UTF-8 [RFC3629] data within a text message). */ LWS_CLOSE_STATUS_POLICY_VIOLATION = 1008, /**< 1008 indicates that an endpoint is terminating the connection because it has received a message that violates its policy. This is a generic status code that can be returned when there is no other more suitable status code (e.g., 1003 or 1009) or if there is a need to hide specific details about the policy. */ LWS_CLOSE_STATUS_MESSAGE_TOO_LARGE = 1009, /**< 1009 indicates that an endpoint is terminating the connection because it has received a message that is too big for it to process. */ LWS_CLOSE_STATUS_EXTENSION_REQUIRED = 1010, /**< 1010 indicates that an endpoint (client) is terminating the connection because it has expected the server to negotiate one or more extension, but the server didn't return them in the response message of the WebSocket handshake. The list of extensions that are needed SHOULD appear in the /reason/ part of the Close frame. Note that this status code is not used by the server, because it can fail the WebSocket handshake instead */ LWS_CLOSE_STATUS_UNEXPECTED_CONDITION = 1011, /**< 1011 indicates that a server is terminating the connection because it encountered an unexpected condition that prevented it from fulfilling the request. */ LWS_CLOSE_STATUS_TLS_FAILURE = 1015, /**< 1015 is a reserved value and MUST NOT be set as a status code in a Close control frame by an endpoint. It is designated for use in applications expecting a status code to indicate that the connection was closed due to a failure to perform a TLS handshake (e.g., the server certificate can't be verified). */ LWS_CLOSE_STATUS_CLIENT_TRANSACTION_DONE = 2000, /****** add new things just above ---^ ******/ LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY = 9999, }; /** * lws_close_reason - Set reason and aux data to send with Close packet * If you are going to return nonzero from the callback * requesting the connection to close, you can optionally * call this to set the reason the peer will be told if * possible. * * \param wsi: The websocket connection to set the close reason on * \param status: A valid close status from websocket standard * \param buf: NULL or buffer containing up to 124 bytes of auxiliary data * \param len: Length of data in \p buf to send */ LWS_VISIBLE LWS_EXTERN void lws_close_reason(struct lws *wsi, enum lws_close_status status, unsigned char *buf, size_t len); ///@} libwebsockets-4.3.5/include/libwebsockets/lws-ws-ext.h000066400000000000000000000172511476025525100230660ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /*! \defgroup extensions Extension related functions * ##Extension releated functions * * Ws defines optional extensions, lws provides the ability to implement these * in user code if so desired. * * We provide one extensions permessage-deflate. */ ///@{ /* * NOTE: These public enums are part of the abi. If you want to add one, * add it at where specified so existing users are unaffected. */ enum lws_extension_callback_reasons { LWS_EXT_CB_CONSTRUCT = 4, LWS_EXT_CB_CLIENT_CONSTRUCT = 5, LWS_EXT_CB_DESTROY = 8, LWS_EXT_CB_PACKET_TX_PRESEND = 12, LWS_EXT_CB_PAYLOAD_TX = 21, LWS_EXT_CB_PAYLOAD_RX = 22, LWS_EXT_CB_OPTION_DEFAULT = 23, LWS_EXT_CB_OPTION_SET = 24, LWS_EXT_CB_OPTION_CONFIRM = 25, LWS_EXT_CB_NAMED_OPTION_SET = 26, /****** add new things just above ---^ ******/ }; /** enum lws_ext_options_types */ enum lws_ext_options_types { EXTARG_NONE, /**< does not take an argument */ EXTARG_DEC, /**< requires a decimal argument */ EXTARG_OPT_DEC /**< may have an optional decimal argument */ /* Add new things just above here ---^ * This is part of the ABI, don't needlessly break compatibility */ }; /** struct lws_ext_options - Option arguments to the extension. These are * used in the negotiation at ws upgrade time. * The helper function lws_ext_parse_options() * uses these to generate callbacks */ struct lws_ext_options { const char *name; /**< Option name, eg, "server_no_context_takeover" */ enum lws_ext_options_types type; /**< What kind of args the option can take */ /* Add new things just above here ---^ * This is part of the ABI, don't needlessly break compatibility */ }; /** struct lws_ext_option_arg */ struct lws_ext_option_arg { const char *option_name; /**< may be NULL, option_index used then */ int option_index; /**< argument ordinal to use if option_name missing */ const char *start; /**< value */ int len; /**< length of value */ }; /** * typedef lws_extension_callback_function() - Hooks to allow extensions to operate * \param context: Websockets context * \param ext: This extension * \param wsi: Opaque websocket instance pointer * \param reason: The reason for the call * \param user: Pointer to ptr to per-session user data allocated by library * \param in: Pointer used for some callback reasons * \param len: Length set for some callback reasons * * Each extension that is active on a particular connection receives * callbacks during the connection lifetime to allow the extension to * operate on websocket data and manage itself. * * Libwebsockets takes care of allocating and freeing "user" memory for * each active extension on each connection. That is what is pointed to * by the user parameter. * * LWS_EXT_CB_CONSTRUCT: called when the server has decided to * select this extension from the list provided by the client, * just before the server will send back the handshake accepting * the connection with this extension active. This gives the * extension a chance to initialize its connection context found * in user. * * LWS_EXT_CB_CLIENT_CONSTRUCT: same as LWS_EXT_CB_CONSTRUCT * but called when client is instantiating this extension. Some * extensions will work the same on client and server side and then * you can just merge handlers for both CONSTRUCTS. * * LWS_EXT_CB_DESTROY: called when the connection the extension was * being used on is about to be closed and deallocated. It's the * last chance for the extension to deallocate anything it has * allocated in the user data (pointed to by user) before the * user data is deleted. This same callback is used whether you * are in client or server instantiation context. * * LWS_EXT_CB_PACKET_TX_PRESEND: this works the same way as * LWS_EXT_CB_PACKET_RX_PREPARSE above, except it gives the * extension a chance to change websocket data just before it will * be sent out. Using the same lws_token pointer scheme in in, * the extension can change the buffer and the length to be * transmitted how it likes. Again if it wants to grow the * buffer safely, it should copy the data into its own buffer and * set the lws_tokens token pointer to it. * * LWS_EXT_CB_ARGS_VALIDATE: */ typedef int lws_extension_callback_function(struct lws_context *context, const struct lws_extension *ext, struct lws *wsi, enum lws_extension_callback_reasons reason, void *user, void *in, size_t len); /** struct lws_extension - An extension we support */ struct lws_extension { const char *name; /**< Formal extension name, eg, "permessage-deflate" */ lws_extension_callback_function *callback; /**< Service callback */ const char *client_offer; /**< String containing exts and options client offers */ /* Add new things just above here ---^ * This is part of the ABI, don't needlessly break compatibility */ }; /** * lws_set_extension_option(): set extension option if possible * * \param wsi: websocket connection * \param ext_name: name of ext, like "permessage-deflate" * \param opt_name: name of option, like "rx_buf_size" * \param opt_val: value to set option to */ LWS_VISIBLE LWS_EXTERN int lws_set_extension_option(struct lws *wsi, const char *ext_name, const char *opt_name, const char *opt_val); /** * lws_ext_parse_options() - deal with parsing negotiated extension options * * \param ext: related extension struct * \param wsi: websocket connection * \param ext_user: per-connection extension private data * \param opts: list of supported options * \param o: option string to parse * \param len: length */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_ext_parse_options(const struct lws_extension *ext, struct lws *wsi, void *ext_user, const struct lws_ext_options *opts, const char *o, int len); /** lws_extension_callback_pm_deflate() - extension for RFC7692 * * \param context: lws context * \param ext: related lws_extension struct * \param wsi: websocket connection * \param reason: incoming callback reason * \param user: per-connection extension private data * \param in: pointer parameter * \param len: length parameter * * Built-in callback implementing RFC7692 permessage-deflate */ LWS_VISIBLE LWS_EXTERN int lws_extension_callback_pm_deflate(struct lws_context *context, const struct lws_extension *ext, struct lws *wsi, enum lws_extension_callback_reasons reason, void *user, void *in, size_t len); /* * The internal exts are part of the public abi * If we add more extensions, publish the callback here ------v */ ///@} libwebsockets-4.3.5/include/libwebsockets/lws-ws-state.h000066400000000000000000000063371476025525100234110ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /** \defgroup wsstatus Websocket status APIs * ##Websocket connection status APIs * * These provide information about ws connection or message status */ ///@{ /** * lws_send_pipe_choked() - tests if socket is writable or not * \param wsi: lws connection * * Allows you to check if you can write more on the socket */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_send_pipe_choked(struct lws *wsi); /** * lws_is_final_fragment() - tests if last part of ws message * * \param wsi: lws connection */ LWS_VISIBLE LWS_EXTERN int lws_is_final_fragment(struct lws *wsi); /** * lws_is_first_fragment() - tests if first part of ws message * * \param wsi: lws connection */ LWS_VISIBLE LWS_EXTERN int lws_is_first_fragment(struct lws *wsi); /** * lws_get_reserved_bits() - access reserved bits of ws frame * \param wsi: lws connection */ LWS_VISIBLE LWS_EXTERN unsigned char lws_get_reserved_bits(struct lws *wsi); /** * lws_partial_buffered() - find out if lws buffered the last write * \param wsi: websocket connection to check * * Returns 1 if you cannot use lws_write because the last * write on this connection is still buffered, and can't be cleared without * returning to the service loop and waiting for the connection to be * writeable again. * * If you will try to do >1 lws_write call inside a single * WRITEABLE callback, you must check this after every write and bail if * set, ask for a new writeable callback and continue writing from there. * * This is never set at the start of a writeable callback, but any write * may set it. */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_partial_buffered(struct lws *wsi); /** * lws_frame_is_binary(): true if the current frame was sent in binary mode * * \param wsi: the connection we are inquiring about * * This is intended to be called from the LWS_CALLBACK_RECEIVE callback if * it's interested to see if the frame it's dealing with was sent in binary * mode. */ LWS_VISIBLE LWS_EXTERN int LWS_WARN_UNUSED_RESULT lws_frame_is_binary(struct lws *wsi); ///@} libwebsockets-4.3.5/include/libwebsockets/lws-x509.h000066400000000000000000000263501476025525100223440ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ enum lws_tls_cert_info { LWS_TLS_CERT_INFO_VALIDITY_FROM, /**< fills .time with the time_t the cert validity started from */ LWS_TLS_CERT_INFO_VALIDITY_TO, /**< fills .time with the time_t the cert validity ends at */ LWS_TLS_CERT_INFO_COMMON_NAME, /**< fills up to len bytes of .ns.name with the cert common name */ LWS_TLS_CERT_INFO_ISSUER_NAME, /**< fills up to len bytes of .ns.name with the cert issuer name */ LWS_TLS_CERT_INFO_USAGE, /**< fills verified with a bitfield asserting the valid uses */ LWS_TLS_CERT_INFO_VERIFIED, /**< fills .verified with a bool representing peer cert validity, * call returns -1 if no cert */ LWS_TLS_CERT_INFO_OPAQUE_PUBLIC_KEY, /**< the certificate's public key, as an opaque bytestream. These * opaque bytestreams can only be compared with each other using the * same tls backend, ie, OpenSSL or mbedTLS. The different backends * produce different, incompatible representations for the same cert. */ LWS_TLS_CERT_INFO_DER_RAW, /**< the certificate's raw DER representation. If it's too big, * -1 is returned and the size will be returned in buf->ns.len. * If the certificate cannot be found -1 is returned and 0 in * buf->ns.len. */ LWS_TLS_CERT_INFO_AUTHORITY_KEY_ID, /**< If the cert has one, the key ID responsible for the signature */ LWS_TLS_CERT_INFO_AUTHORITY_KEY_ID_ISSUER, /**< If the cert has one, the issuer responsible for the signature */ LWS_TLS_CERT_INFO_AUTHORITY_KEY_ID_SERIAL, /**< If the cert has one, serial number responsible for the signature */ LWS_TLS_CERT_INFO_SUBJECT_KEY_ID, /**< If the cert has one, the cert's subject key ID */ }; union lws_tls_cert_info_results { unsigned int verified; time_t time; unsigned int usage; struct { int len; /* KEEP LAST... notice the [64] is only there because * name[] is not allowed in a union. The actual length of * name[] is arbitrary and is passed into the api using the * len parameter. Eg * * char big[1024]; * union lws_tls_cert_info_results *buf = * (union lws_tls_cert_info_results *)big; * * lws_tls_peer_cert_info(wsi, type, buf, sizeof(big) - * sizeof(*buf) + sizeof(buf->ns.name)); */ char name[64]; } ns; }; struct lws_x509_cert; struct lws_jwk; /** * lws_x509_create() - Allocate an lws_x509_cert object * * \param x509: pointer to lws_x509_cert pointer to be set to allocated object * * Allocates an lws_x509_cert object and set *x509 to point to it. */ LWS_VISIBLE LWS_EXTERN int lws_x509_create(struct lws_x509_cert **x509); /** * lws_x509_parse_from_pem() - Read one or more x509 certs in PEM format from memory * * \param x509: pointer to lws_x509_cert object * \param pem: pointer to PEM format content * \param len: length of PEM format content * * Parses PEM certificates in memory into a native x509 representation for the * TLS library. If there are multiple PEM certs concatenated, they are all * read into the same object and exist as a "chain". * * IMPORTANT for compatibility with mbedtls, the last used byte of \p pem * must be '\0' and the \p len must include it. * * Returns 0 if all went OK, or nonzero for failure. */ LWS_VISIBLE LWS_EXTERN int lws_x509_parse_from_pem(struct lws_x509_cert *x509, const void *pem, size_t len); /** * lws_x509_verify() - Validate signing relationship between one or more certs * and a trusted CA cert * * \param x509: pointer to lws_x509_cert object, may contain multiple * \param trusted: a single, trusted cert object that we are checking for * \param common_name: NULL, or required CN (Common Name) of \p x509 * * Returns 0 if the cert or certs in \p x509 represent a complete chain that is * ultimately signed by the cert in \p trusted. Returns nonzero if that's not * the case. */ LWS_VISIBLE LWS_EXTERN int lws_x509_verify(struct lws_x509_cert *x509, struct lws_x509_cert *trusted, const char *common_name); /** * lws_x509_public_to_jwk() - Copy the public key out of a cert and into a JWK * * \param jwk: pointer to the jwk to initialize and set to the public key * \param x509: pointer to lws_x509_cert object that has the public key * \param curves: NULL to disallow EC, else a comma-separated list of valid * curves using the JWA naming, eg, "P-256,P-384,P-521". * \param rsabits: minimum number of RSA bits required in the cert if RSA * * Returns 0 if JWK was set to the certificate public key correctly and the * curve / the RSA key size was acceptable. Automatically produces an RSA or * EC JWK depending on what the cert had. */ LWS_VISIBLE LWS_EXTERN int lws_x509_public_to_jwk(struct lws_jwk *jwk, struct lws_x509_cert *x509, const char *curves, int rsabits); /** * lws_x509_jwk_privkey_pem() - Copy a private key PEM into a jwk that has the * public part already * * \param cx: lws_context (for random) * \param jwk: pointer to the jwk to initialize and set to the public key * \param pem: pointer to PEM private key in memory * \param len: length of PEM private key in memory * \param passphrase: NULL or passphrase needed to decrypt private key * * IMPORTANT for compatibility with mbedtls, the last used byte of \p pem * must be '\0' and the \p len must include it. * * Returns 0 if the private key was successfully added to the JWK, else * nonzero if failed. * * The PEM image in memory is zeroed down on both successful and failed exits. * The caller should take care to zero down passphrase if used. */ LWS_VISIBLE LWS_EXTERN int lws_x509_jwk_privkey_pem(struct lws_context *cx, struct lws_jwk *jwk, void *pem, size_t len, const char *passphrase); /** * lws_x509_destroy() - Destroy a previously allocated lws_x509_cert object * * \param x509: pointer to lws_x509_cert pointer * * Deallocates an lws_x509_cert object and sets its pointer to NULL. */ LWS_VISIBLE LWS_EXTERN void lws_x509_destroy(struct lws_x509_cert **x509); LWS_VISIBLE LWS_EXTERN int lws_x509_info(struct lws_x509_cert *x509, enum lws_tls_cert_info type, union lws_tls_cert_info_results *buf, size_t len); /** * lws_tls_peer_cert_info() - get information from the peer's TLS cert * * \param wsi: the connection to query * \param type: one of LWS_TLS_CERT_INFO_ * \param buf: pointer to union to take result * \param len: when result is a string, the true length of buf->ns.name[] * * lws_tls_peer_cert_info() lets you get hold of information from the peer * certificate. * * Return 0 if there is a result in \p buf, or nonzero indicating there was no * cert, or another problem. * * This function works the same no matter if the TLS backend is OpenSSL or * mbedTLS. */ LWS_VISIBLE LWS_EXTERN int lws_tls_peer_cert_info(struct lws *wsi, enum lws_tls_cert_info type, union lws_tls_cert_info_results *buf, size_t len); /** * lws_tls_vhost_cert_info() - get information from the vhost's own TLS cert * * \param vhost: the vhost to query * \param type: one of LWS_TLS_CERT_INFO_ * \param buf: pointer to union to take result * \param len: when result is a string, the true length of buf->ns.name[] * * lws_tls_vhost_cert_info() lets you get hold of information from the vhost * certificate. * * Return 0 if there is a result in \p buf, or nonzero indicating there was no * cert, or another problem. * * This function works the same no matter if the TLS backend is OpenSSL or * mbedTLS. */ LWS_VISIBLE LWS_EXTERN int lws_tls_vhost_cert_info(struct lws_vhost *vhost, enum lws_tls_cert_info type, union lws_tls_cert_info_results *buf, size_t len); /** * lws_tls_acme_sni_cert_create() - creates a temp selfsigned cert * and attaches to a vhost * * \param vhost: the vhost to acquire the selfsigned cert * \param san_a: SAN written into the certificate * \param san_b: second SAN written into the certificate * * * Returns 0 if created and attached to the vhost. Returns nonzero if problems, * and frees all allocations before returning. * * On success, any allocations are destroyed at vhost destruction automatically. */ LWS_VISIBLE LWS_EXTERN int lws_tls_acme_sni_cert_create(struct lws_vhost *vhost, const char *san_a, const char *san_b); /** * lws_tls_acme_sni_csr_create() - creates a CSR and related private key PEM * * \param context: lws_context used for random * \param elements: array of LWS_TLS_REQ_ELEMENT_COUNT const char * * \param csr: buffer that will get the b64URL(ASN-1 CSR) * \param csr_len: max length of the csr buffer * \param privkey_pem: pointer to pointer allocated to hold the privkey_pem * \param privkey_len: pointer to size_t set to the length of the privkey_pem * * Creates a CSR according to the information in \p elements, and a private * RSA key used to sign the CSR. * * The outputs are the b64URL(ASN-1 CSR) into csr, and the PEM private key into * privkey_pem. * * Notice that \p elements points to an array of const char *s pointing to the * information listed in the enum above. If an entry is NULL or an empty * string, the element is set to "none" in the CSR. * * Returns 0 on success or nonzero for failure. */ LWS_VISIBLE LWS_EXTERN int lws_tls_acme_sni_csr_create(struct lws_context *context, const char *elements[], uint8_t *csr, size_t csr_len, char **privkey_pem, size_t *privkey_len); /** * lws_tls_cert_updated() - update every vhost using the given cert path * * \param context: our lws_context * \param certpath: the filepath to the certificate * \param keypath: the filepath to the private key of the certificate * \param mem_cert: copy of the cert in memory * \param len_mem_cert: length of the copy of the cert in memory * \param mem_privkey: copy of the private key in memory * \param len_mem_privkey: length of the copy of the private key in memory * * Checks every vhost to see if it is the using certificate described by the * the given filepaths. If so, it attempts to update the vhost ssl_ctx to use * the new certificate. * * Returns 0 on success or nonzero for failure. */ LWS_VISIBLE LWS_EXTERN int lws_tls_cert_updated(struct lws_context *context, const char *certpath, const char *keypath, const char *mem_cert, size_t len_mem_cert, const char *mem_privkey, size_t len_mem_privkey); libwebsockets-4.3.5/lib/000077500000000000000000000000001476025525100151405ustar00rootroot00000000000000libwebsockets-4.3.5/lib/CMakeLists.txt000066400000000000000000000301021476025525100176740ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # include_directories(.) macro(add_subdir_include_dirs arg1) add_subdirectory(${arg1}) list(APPEND LWS_LIB_BUILD_INC_PATHS ${_CMAKE_INC_LIST}) endmacro() set(LWS_LIB_INCLUDES "") # # Plat specific build items # if (LWS_PLAT_FREERTOS) add_subdir_include_dirs(plat/freertos) if (ESP_PLATFORM) list(APPEND LWS_ESP_IDF_DIRS $ENV{IDF_PATH}/components/freertos/include $ENV{IDF_PATH}/components/esp_hw_support/include/soc/ $ENV{IDF_PATH}/components/esp_common/include $ENV{IDF_PATH}/components/esp_timer/include $ENV{IDF_PATH}/components/soc/include $ENV{IDF_PATH}/components/soc/src/esp32/include $ENV{IDF_PATH}/components/lwip/port/esp32/include $ENV{IDF_PATH}/components/lwip/lwip/src/include $ENV{IDF_PATH}/components/lwip/port/esp32/include ${CMAKE_BINARY_DIR}/config $ENV{IDF_PATH}/components/esp_rom/include $ENV{IDF_PATH}/components/esp_system/include $ENV{IDF_PATH}/components/lwip/include/apps/sntp $ENV{IDF_PATH}/components/soc/soc/esp32/include $ENV{IDF_PATH}/components/heap/include $ENV{IDF_PATH}/components/mbedtls/mbedtls/include $ENV{IDF_PATH}/components/mbedtls/port/include $ENV{IDF_PATH}/components/esp_wifi/include $ENV{IDF_PATH}/components/esp_event/include $ENV{IDF_PATH}/components/esp_netif/include $ENV{IDF_PATH}/components/esp_eth/include $ENV{IDF_PATH}/components/driver/include $ENV{IDF_PATH}/components/soc/soc/include $ENV{IDF_PATH}/components/tcpip_adapter/include $ENV{IDF_PATH}/components/lwip/include/apps $ENV{IDF_PATH}/components/nvs_flash/include $ENV{IDF_PATH}/components/esp32/include $ENV{IDF_PATH}/components/spi_flash/include $ENV{IDF_PATH}/components/mdns/include $ENV{IDF_PATH}/components/lwip/lwip/src/include/lwip $ENV{IDF_PATH}/components/lwip/lwip/src/include $ENV{IDF_PATH}/components/lwip/lwip/src/include/lwip $ENV{IDF_PATH}/components/newlib/platform_include ) include_directories(${LWS_ESP_IDF_DIRS}) list(APPEND CMAKE_REQUIRED_INCLUDES ${LWS_ESP_IDF_DIRS}) endif() else() if (LWS_PLAT_OPTEE) add_subdir_include_dirs(plat/optee) else() if (WIN32) add_subdir_include_dirs(plat/windows) else() add_subdir_include_dirs(plat/unix) endif() endif() endif() if (LIB_LIST) set(CMAKE_REQUIRED_LIBRARIES ${LIB_LIST} ${CMAKE_REQUIRED_LIBRARIES}) endif() if (LWS_WITH_ZLIB) if (LWS_WITH_BUNDLED_ZLIB) if (WIN32) # it's trying to delete internal zlib entry LIST(REMOVE_AT CMAKE_REQUIRED_LIBRARIES 0 ) endif() endif() endif() # ideally we want to use pipe2() CHECK_C_SOURCE_COMPILES(" #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif #include int main(void) { int fd[2]; return pipe2(fd, 0); }" LWS_HAVE_PIPE2) # tcp keepalive needs this on linux to work practically... but it only exists # after kernel 2.6.37 CHECK_C_SOURCE_COMPILES("#include \nint main(void) { return TCP_USER_TIMEOUT; }\n" LWS_HAVE_TCP_USER_TIMEOUT) set(LWS_PUBLIC_INCLUDES "") if (LWS_WITH_TLS) add_subdir_include_dirs(tls) endif() # Generate the lws_config.h that includes all the private compilation settings. configure_file( "${PROJECT_SOURCE_DIR}/cmake/lws_config_private.h.in" "${PROJECT_BINARY_DIR}/lws_config_private.h") add_subdir_include_dirs(core) add_subdir_include_dirs(misc) add_subdir_include_dirs(system) if (LWS_WITH_DRIVERS) add_subdir_include_dirs(drivers) endif() if (LWS_WITH_NETWORK) add_subdir_include_dirs(core-net) if (LWS_WITH_ABSTRACT) add_subdir_include_dirs(abstract) endif() add_subdir_include_dirs(roles) endif() if (LWS_WITH_JOSE) add_subdir_include_dirs(jose) endif() if (LWS_WITH_COSE) add_subdir_include_dirs(cose) endif() if (LWS_WITH_SECURE_STREAMS) add_subdir_include_dirs(secure-streams) endif() add_subdir_include_dirs(event-libs) if (LWS_WITH_STATIC) if (LWS_STATIC_PIC) set(CMAKE_POSITION_INDEPENDENT_CODE ON) endif() add_library(websockets STATIC ${SOURCES})# ${HDR_PUBLIC}) set_target_properties(websockets PROPERTIES LINKER_LANGUAGE C) list(APPEND LWS_LIBRARIES websockets) target_include_directories(websockets INTERFACE $ $ $ ) target_include_directories(websockets PRIVATE ${LWS_LIB_BUILD_INC_PATHS}) target_compile_definitions(websockets PRIVATE LWS_BUILDING_STATIC) target_include_directories(websockets PUBLIC ${LWS_PUBLIC_INCLUDES}) set(LWS_PUBLIC_INCLUDES ${LWS_PUBLIC_INCLUDES} PARENT_SCOPE) if (WIN32) # Windows uses the same .lib ending for static libraries and shared # library linker files, so rename the static library. set_target_properties(websockets PROPERTIES OUTPUT_NAME websockets_static) endif() endif() if (LWS_WITH_SHARED) if (NOT RESOURCES) set(RESOURCES "") endif() add_library(websockets_shared SHARED ${SOURCES} ${RESOURCES})# ${HDR_PUBLIC}) set_target_properties(websockets_shared PROPERTIES LINKER_LANGUAGE C) list(APPEND LWS_LIBRARIES websockets_shared) target_include_directories(websockets_shared INTERFACE $ $ $ ) target_include_directories(websockets_shared PRIVATE ${LWS_LIB_BUILD_INC_PATHS}) target_compile_definitions(websockets_shared PRIVATE LWS_BUILDING_SHARED) target_include_directories(websockets_shared PUBLIC ${LWS_PUBLIC_INCLUDES}) set(LWS_PUBLIC_INCLUDES ${LWS_PUBLIC_INCLUDES} PARENT_SCOPE) # We want the shared lib to be named "libwebsockets" # not "libwebsocket_shared". set_target_properties(websockets_shared PROPERTIES OUTPUT_NAME websockets) if (WIN32) # Compile as DLL (export function declarations) set_property( TARGET websockets_shared PROPERTY COMPILE_DEFINITIONS LWS_DLL LWS_INTERNAL) endif() if (APPLE) set_property(TARGET websockets_shared PROPERTY MACOSX_RPATH YES) endif() if (UNIX AND LWS_WITH_PLUGINS_API) set (CMAKE_POSITION_INDEPENDENT_CODE ON) if (NOT((${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") OR (${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD") OR (${CMAKE_SYSTEM_NAME} MATCHES "QNX"))) if (LWS_WITH_SHARED) target_link_libraries(websockets_shared dl) endif() endif() endif() endif() # # expose the library private include dirs to plugins, test apps etc that are # part of the lib build but different targets # if (LWS_WITH_SHARED) get_target_property(LWS_LIB_INCLUDES websockets_shared INCLUDE_DIRECTORIES) else() get_target_property(LWS_LIB_INCLUDES websockets INCLUDE_DIRECTORIES) endif() # Set the so version of the lib. # Equivalent to LDFLAGS=-version-info x:x:x if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR COMPILER_IS_CLANG) foreach(lib ${LWS_LIBRARIES}) set_target_properties(${lib} PROPERTIES SOVERSION ${SOVERSION}) endforeach() endif() # Setup the linking for all libs. foreach (lib ${LWS_LIBRARIES}) target_link_libraries(${lib} ${LIB_LIST}) endforeach() # # These will be available to parent projects including libwebsockets # using add_subdirectory() # set(LIBWEBSOCKETS_LIBRARIES ${LWS_LIBRARIES} CACHE STRING "Libwebsocket libraries") if (LWS_WITH_STATIC) set(LIBWEBSOCKETS_LIBRARIES_STATIC websockets CACHE STRING "Libwebsocket static library") endif() if (LWS_WITH_SHARED) set(LIBWEBSOCKETS_LIBRARIES_SHARED websockets_shared CACHE STRING "Libwebsocket shared library") endif() # Install libs and headers. install(TARGETS ${LWS_LIBRARIES} EXPORT LibwebsocketsTargets LIBRARY DESTINATION "${LWS_INSTALL_LIB_DIR}${LIB_SUFFIX}" COMPONENT core ARCHIVE DESTINATION "${LWS_INSTALL_LIB_DIR}${LIB_SUFFIX}" COMPONENT core RUNTIME DESTINATION "${LWS_INSTALL_BIN_DIR}" COMPONENT core # Windows DLLs PUBLIC_HEADER DESTINATION "${LWS_INSTALL_INCLUDE_DIR}" COMPONENT dev) #set(CPACK_COMPONENT_LIBRARIES_DISPLAY_NAME "Libraries" PARENT_SCOPE) set(CPACK_COMPONENT_DEV_DISPLAY_NAME "Development files" PARENT_SCOPE) if (UNIX OR MINGW) # figure out pkfcfg required libs here set(lws_requires "") if (LWS_HAVE_LIBCAP) if (NOT lws_requires STREQUAL "") set(lws_requires "${lws_requires},libcap") else() set(lws_requires "libcap") endif() endif() # Generate and install pkgconfig. # (This is not indented, because the tabs will be part of the output) file(WRITE "${PROJECT_BINARY_DIR}/libwebsockets.pc" "prefix=\"${CMAKE_INSTALL_PREFIX}\" exec_prefix=\${prefix} libdir=\${exec_prefix}/lib${LIB_SUFFIX} includedir=\${prefix}/include Name: libwebsockets Description: Websockets server and client library Version: ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH} Libs: -L\${libdir} -lwebsockets Cflags: -I\${includedir} " ) if (NOT ${lws_requires} STREQUAL "") file(APPEND "${PROJECT_BINARY_DIR}/libwebsockets.pc" "Requires: ${lws_requires}") endif() install(FILES "${PROJECT_BINARY_DIR}/libwebsockets.pc" DESTINATION lib${LIB_SUFFIX}/pkgconfig) file(WRITE "${PROJECT_BINARY_DIR}/libwebsockets_static.pc" "prefix=\"${CMAKE_INSTALL_PREFIX}\" exec_prefix=\${prefix} libdir=\${exec_prefix}/lib${LIB_SUFFIX} includedir=\${prefix}/include Name: libwebsockets_static Description: Websockets server and client static library Version: ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH} Libs: -L\${libdir} -l:libwebsockets${CMAKE_STATIC_LIBRARY_SUFFIX} Libs.private: Cflags: -I\${includedir} " ) if (NOT ${lws_requires} STREQUAL "") file(APPEND "${PROJECT_BINARY_DIR}/libwebsockets_static.pc" "Requires: ${lws_requires}") endif() install(FILES "${PROJECT_BINARY_DIR}/libwebsockets_static.pc" DESTINATION lib${LIB_SUFFIX}/pkgconfig) endif(UNIX OR MINGW) # Keep explicit parent scope exports at end # export_to_parent_intermediate() if (DEFINED LWS_PLAT_UNIX) set(LWS_PLAT_UNIX ${LWS_PLAT_UNIX} PARENT_SCOPE) if (ILLUMOS) add_definitions("-D__illumos__") endif() endif() set(LWS_HAVE_MBEDTLS_NET_SOCKETS ${LWS_HAVE_MBEDTLS_NET_SOCKETS} PARENT_SCOPE) set(LWS_HAVE_MBEDTLS_SSL_NEW_SESSION_TICKET ${LWS_HAVE_MBEDTLS_SSL_NEW_SESSION_TICKET} PARENT_SCOPE) set(LWS_HAVE_mbedtls_ssl_conf_alpn_protocols ${LWS_HAVE_mbedtls_ssl_conf_alpn_protocols} PARENT_SCOPE) set(TEST_SERVER_SSL_KEY "${TEST_SERVER_SSL_KEY}" PARENT_SCOPE) set(TEST_SERVER_SSL_CERT "${TEST_SERVER_SSL_CERT}" PARENT_SCOPE) set(TEST_SERVER_DATA ${TEST_SERVER_DATA} PARENT_SCOPE) set(LWS_HAVE_PIPE2 ${LWS_HAVE_PIPE2} PARENT_SCOPE) set(LWS_LIBRARIES ${LWS_LIBRARIES} PARENT_SCOPE) if (DEFINED WIN32_HELPERS_PATH) set(WIN32_HELPERS_PATH ${WIN32_HELPERS_PATH} PARENT_SCOPE) endif() if (DEFINED HDR_PRIVATE) set(HDR_PRIVATE ${HDR_PRIVATE} PARENT_SCOPE) endif() if (DEFINED ZLIB_FOUND) set(ZLIB_FOUND ${ZLIB_FOUND} PARENT_SCOPE) endif() if (DEFINED LIB_LIST_AT_END) set(LIB_LIST_AT_END ${LIB_LIST_AT_END} PARENT_SCOPE) endif() set(USE_WOLFSSL ${USE_WOLFSSL} PARENT_SCOPE) set(LWS_DEPS_LIB_PATHS ${LWS_DEPS_LIB_PATHS} PARENT_SCOPE) libwebsockets-4.3.5/lib/README.md000066400000000000000000000012431476025525100164170ustar00rootroot00000000000000## Library sources layout Code that goes in the libwebsockets library itself lives down ./lib Path|Sources ---|--- lib/core|Core lws code related to generic fd and wsi servicing and management lib/core-net|Core lws code that applies only if networking enabled lib/event-libs|Code containing optional event-lib specific adaptations lib/jose|JOSE / JWS / JWK / JWE implementations lib/misc|Code for various mostly optional miscellaneous features lib/plat|Platform-specific adaptation code lib/roles|Code for specific optional wsi roles, eg, http/1, h2, ws, raw, etc lib/system|Code for system-level features, eg, dhcpclient lib/tls|Code supporting the various TLS libraries libwebsockets-4.3.5/lib/abstract/000077500000000000000000000000001476025525100167435ustar00rootroot00000000000000libwebsockets-4.3.5/lib/abstract/CMakeLists.txt000066400000000000000000000033771476025525100215150ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # # The strategy is to only export to PARENT_SCOPE # # - changes to LIB_LIST # - changes to SOURCES # - includes via include_directories # # and keep everything else private include_directories(.) list(APPEND SOURCES abstract/abstract.c ) if (LWS_WITH_SEQUENCER) list(APPEND SOURCES abstract/test-sequencer.c) endif() list(APPEND SOURCES abstract/transports/unit-test.c) #if (LWS_WITH_SMTP) # list(APPEND SOURCES # abstract/protocols/smtp/smtp.c # abstract/protocols/smtp/smtp-sequencer.c # ) #endif() # # Keep explicit parent scope exports at end # exports_to_parent_scope() libwebsockets-4.3.5/lib/abstract/README.md000066400000000000000000000141701476025525100202250ustar00rootroot00000000000000# Abstract protocols and transports ## Overview Until now protocol implementations in lws have been done directly to the network-related apis inside lws. In an effort to separate out completely network implementation details from protocol specification, lws now supports "abstract protocols" and "abstract transports". ![lws_abstract overview](/doc-assets/abstract-overview.svg) The concept is that the implementation is split into two separate chunks of code hidden behind "ops" structs... the "abstract protocol" implementation is responsible for the logical protocol operation and reads and writes only memory buffers. The "abstract transport" implementation is responsible for sending and receiving buffers on some kind of transport, and again is hidden behind a standardized ops struct. In the system, both the abstract protocols and transports are found by their name. An actual "connection" is created by calling a generic api `lws_abs_bind_and_create_instance()` to instantiate the combination of a protocol and a transport. This makes it possible to confidently offer the same protocol on completely different transports, eg, like serial, or to wire up the protocol implementation to a test jig sending canned test vectors and confirming the response at buffer level, without any network. The abstract protocol itself has no relationship to the transport at all and is completely unchanged by changes to the transport. In addition, generic tokens to control settings in both the protocol and the transport are passed in at instantiation-time, eg, controlling the IP address targeted by the transport. lws SMTP client support has been rewritten to use the new scheme, and lws provides a raw socket transport built-in. ## Public API The public api for defining abstract protocols and transports is found at - [abstract.h](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/abstract/abstract.h) - [protocols.h](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/abstract/protocols.h) - [transports.h](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/abstract/transports.h) ### `lws_abs_t` The main structure that defines the abstraction is `lws_abs_t`, this is a name and then pointers to the protocol and transport, optional tokens to control both the protocol and transport, and pointers to private allocations for both the protocol and transport when instantiated. The transport is selected using ``` LWS_VISIBLE LWS_EXTERN const lws_abs_transport_t * lws_abs_transport_get_by_name(const char *name); ``` and similarly the protocol by ``` LWS_VISIBLE LWS_EXTERN const lws_abs_protocol_t * lws_abs_protocol_get_by_name(const char *name); ``` At the moment only "`raw-skt`" is defined as an lws built-in, athough you can also create your own mock transport the same way for creating test jigs. |transport op|meaning| |---|---| |`tx()`|transmit a buffer| |`client_conn()`|start a connection to a peer| |`close()`|request to close the connection to a peer| |`ask_for_writeable()`|request a `writeable()` callback when tx can be used| |`set_timeout()`|set a timeout that will close the connection if reached| |`state()`|check if the connection is established and can carry traffic| These are called by the protocol to get things done and make queries through the abstract transport. |protocol op|meaning| |---|---| |`accept()`|The peer has accepted the transport connection| |`rx()`|The peer has sent us some payload| |`writeable()`|The connection to the peer can take more tx| |`closed()`|The connection to the peer has closed| |`heartbeat()`|Called periodically even when no network events| These are called by the transport to inform the protocol of events and traffic. ### Instantiation The user fills an lws_abs_t and passes a pointer to it to `lws_abs_bind_and_create_instance()` to create an instantiation of the protocol + transport. ### `lws_token_map_t` The abstract protocol has no idea about a network or network addresses or ports or whatever... it may not even be hooked up to one. If the transport it is bound to wants things like that, they are passed in using an array of `lws_token_map_t` at instantiation time. For example this is passed to the raw socket protocol in the smtp client minimal example to control where it would connect to: ``` static const lws_token_map_t smtp_abs_tokens[] = { { .u = { .value = "127.0.0.1" }, .name_index = LTMI_PEER_DNS_ADDRESS, }, { .u = { .lvalue = 25l }, .name_index = LTMI_PEER_PORT, }}; ``` ## Steps for adding new abstract protocols - add the public header in `./include/libwebsockets/abstract/protocols/` - add a directory under `./lib/abstract/protocols/` - add your protocol sources in the new directory - in CMakeLists.txt: - add an `LWS_WITH_xxx` for your protocol - search for "using any abstract protocol" and add your `LWS_WITH_xxx` to the if so it also sets `LWS_WITH_ABSTRACT` if any set - add a clause to append your source to SOURCES if `LWS_WITH_xxx` enabled - add your `lws_abs_protocol` to the list `available_abs_protocols` in `./lib/abstract/abstract.c` ## Steps for adding new abstract transports - add the public header in `./include/libwebsockets/abstract/transports/` - add your transport sources under `./lib/abstract/transports/` - in CMakeLists.txt append your transport sources to SOURCES if `LWS_WITH_ABSTRACT` and any other cmake conditionals - add an extern for your transport `lws_protocols` in `./lib/core-net/private.h` - add your transport `lws_protocols` to `available_abstract_protocols` in `./lib/core-net/vhost.c` - add your `lws_abs_transport` to the list `available_abs_transports` in `./lib/abstract/abstract.c` # Protocol testing ## unit tests lws features an abstract transport designed to facilitate unit testing. This contains an lws_sequencer that performs the steps of tests involving sending the protocol test vector buffers and confirming the response of the protocol matches the test vectors. ## test-sequencer test-sequencer is a helper that sequences running an array of unit tests and collects the statistics and gives a PASS / FAIL result. See the SMTP client api test for an example of how to use. libwebsockets-4.3.5/lib/abstract/abstract.c000066400000000000000000000206421476025525100207160ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include #include extern const lws_abs_transport_t lws_abs_transport_cli_raw_skt, lws_abs_transport_cli_unit_test; #if defined(LWS_WITH_SMTP) extern const lws_abs_protocol_t lws_abs_protocol_smtp; #endif #if defined(LWS_WITH_MQTT) extern const lws_abs_protocol_t lws_abs_protocol_mqttc; #endif static const lws_abs_transport_t * const available_abs_transports[] = { &lws_abs_transport_cli_raw_skt, &lws_abs_transport_cli_unit_test, }; #if defined(LWS_WITH_ABSTRACT) static const lws_abs_protocol_t * const available_abs_protocols[] = { #if defined(LWS_WITH_SMTP) &lws_abs_protocol_smtp, #endif #if defined(LWS_WITH_MQTT) &lws_abs_protocol_mqttc, #endif }; #endif const lws_abs_transport_t * lws_abs_transport_get_by_name(const char *name) { int n; for (n = 0; n < (int)LWS_ARRAY_SIZE(available_abs_transports); n++) if (!strcmp(name, available_abs_transports[n]->name)) return available_abs_transports[n]; lwsl_err("%s: cannot find '%s'\n", __func__, name); return NULL; } const lws_abs_protocol_t * lws_abs_protocol_get_by_name(const char *name) { #if defined(LWS_WITH_ABSTRACT) int n; for (n = 0; n < (int)LWS_ARRAY_SIZE(available_abs_protocols); n++) if (!strcmp(name, available_abs_protocols[n]->name)) return available_abs_protocols[n]; #endif lwsl_err("%s: cannot find '%s'\n", __func__, name); return NULL; } const lws_token_map_t * lws_abs_get_token(const lws_token_map_t *token_map, short name_index) { if (!token_map) return NULL; do { if (token_map->name_index == name_index) return token_map; token_map++; } while (token_map->name_index); return NULL; } static int lws_abstract_compare_connection(lws_abs_t *abs1, lws_abs_t *abs2) { /* it has to be using the same protocol */ if (abs1->ap != abs2->ap) return 1; /* protocol has to allow some kind of binding */ if (!abs1->ap->flags) return 1; /* it has to be using the same transport */ if (abs1->at != abs2->at) return 1; /* * The transport must feel the endpoint and conditions in use match the * requested endpoint and conditions... and the transport type must be * willing to allow it */ if (abs1->at->compare(abs1, abs2)) return 1; /* * The protocol must feel they are in compatible modes if any * (and the protocol type must be willing to allow it) */ if (abs1->ap->compare(abs1, abs2)) return 1; /* * If no objection by now, we can say there's already a comparable * connection and both the protocol and transport feel we can make * use of it. */ return 0; } static int find_compatible(struct lws_dll2 *d, void *user) { lws_abs_t *ai1 = (lws_abs_t *)user, *ai2 = lws_container_of(d, lws_abs_t, abstract_instances); if (!lws_abstract_compare_connection(ai1, ai2)) { /* we can bind to it */ lws_dll2_add_tail(&ai1->bound, &ai2->children_owner); return 1; } return 0; } lws_abs_t * lws_abs_bind_and_create_instance(const lws_abs_t *abs) { size_t size = sizeof(lws_abs_t) + abs->ap->alloc + abs->at->alloc; lws_abs_t *ai; int n; /* * since we know we will allocate the lws_abs_t, the protocol's * instance allocation, and the transport's instance allocation, * we merge it into a single heap allocation */ ai = lws_malloc(size, "abs inst"); if (!ai) return NULL; *ai = *abs; ai->ati = NULL; ai->api = (char *)ai + sizeof(lws_abs_t); if (!ai->ap->flags) /* protocol only understands single connections */ goto fresh; lws_vhost_lock(ai->vh); /* ----------------------------------- vh { */ /* * Let's have a look for any already-connected transport we can use */ n = lws_dll2_foreach_safe(&ai->vh->abstract_instances_owner, ai, find_compatible); lws_vhost_unlock(ai->vh); /* } vh --------------------------------- */ if (n) goto vh_list_add; /* there's no existing connection doing what we want */ fresh: ai->ati = (char *)ai->api + abs->ap->alloc; if (ai->at->create(ai)) { ai->ati = NULL; goto bail; } vh_list_add: /* add us to the vhost's dll2 of instances */ lws_dll2_clear(&ai->abstract_instances); lws_dll2_add_head(&ai->abstract_instances, &ai->vh->abstract_instances_owner); if (ai->ap->create(ai)) { ai->api = NULL; goto bail; } if (ai->bound.owner) { /* we are a piggybacker */ lws_abs_t *ai2 = lws_container_of(ai->bound.owner, lws_abs_t, children_owner); /* * Provide an 'event' in the parent context to start handling * the bind if it's otherwise idle. We give the parent abs * because we don't know if we're "next" or whatever. Just that * a child joined him and he should look into his child * situation in case he was waiting for one to appear. */ if (ai2->ap->child_bind(ai2)) { lwsl_info("%s: anticpated child bind fail\n", __func__); lws_dll2_remove(&ai->bound); goto bail; } } return ai; bail: lws_abs_destroy_instance(&ai); return NULL; } /* * We get called to clean up each child that was still bound to a parent * at the time the parent is getting destroyed. */ static void __lws_abs_destroy_instance2(lws_abs_t **ai) { lws_abs_t *a = *ai; if (a->api) a->ap->destroy(&a->api); if (a->ati) a->at->destroy(&a->ati); lws_dll2_remove(&a->abstract_instances); *ai = NULL; free(a); } static int __reap_children(struct lws_dll2 *d, void *user) { lws_abs_t *ac = lws_container_of(d, lws_abs_t, bound); lws_dll2_foreach_safe(&ac->children_owner, NULL, __reap_children); /* then destroy ourselves */ __lws_abs_destroy_instance2(&ac); return 0; } void lws_abs_destroy_instance(lws_abs_t **ai) { lws_abs_t *a = *ai; /* destroy child instances that are bound to us first... */ lws_vhost_lock(a->vh); /* ----------------------------------- vh { */ lws_dll2_foreach_safe(&a->children_owner, NULL, __reap_children); /* ...then destroy ourselves */ __lws_abs_destroy_instance2(ai); lws_vhost_unlock(a->vh); /* } vh --------------------------------- */ } lws_abs_t * lws_abstract_alloc(struct lws_vhost *vhost, void *user, const char *abstract_path, const lws_token_map_t *ap_tokens, const lws_token_map_t *at_tokens, struct lws_sequencer *seq, void *opaque_user_data) { lws_abs_t *abs = lws_zalloc(sizeof(*abs), __func__); struct lws_tokenize ts; lws_tokenize_elem e; char tmp[30]; if (!abs) return NULL; lws_tokenize_init(&ts, abstract_path, LWS_TOKENIZE_F_MINUS_NONTERM); e = lws_tokenize(&ts); if (e != LWS_TOKZE_TOKEN) goto abs_path_problem; if (lws_tokenize_cstr(&ts, tmp, sizeof(tmp))) goto abs_path_problem; abs->ap = lws_abs_protocol_get_by_name(tmp); if (!abs->ap) goto abs_path_problem; e = lws_tokenize(&ts); if (e != LWS_TOKZE_DELIMITER) goto abs_path_problem; e = lws_tokenize(&ts); if (e != LWS_TOKZE_TOKEN) goto abs_path_problem; if (lws_tokenize_cstr(&ts, tmp, sizeof(tmp))) goto abs_path_problem; abs->at = lws_abs_transport_get_by_name(tmp); if (!abs->at) goto abs_path_problem; abs->vh = vhost; abs->ap_tokens = ap_tokens; abs->at_tokens = at_tokens; abs->seq = seq; abs->opaque_user_data = opaque_user_data; lwsl_info("%s: allocated %s\n", __func__, abstract_path); return abs; abs_path_problem: lwsl_err("%s: bad abs path '%s'\n", __func__, abstract_path); lws_free_set_NULL(abs); return NULL; } void lws_abstract_free(lws_abs_t **pabs) { if (*pabs) lws_free_set_NULL(*pabs); } libwebsockets-4.3.5/lib/abstract/private-lib-abstract.h000066400000000000000000000037021476025525100231350ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #if !defined(__PRIVATE_LIB_ABSTRACT_H__) #define __PRIVATE_LIB_ABSTRACT_H__ typedef struct lws_token_map lws_token_map_t; typedef void lws_abs_transport_inst_t; typedef void lws_abs_protocol_inst_t; typedef struct lws_abs { void *user; struct lws_vhost *vh; const struct lws_abs_protocol *ap; const lws_token_map_t *ap_tokens; const struct lws_abs_transport *at; const lws_token_map_t *at_tokens; struct lws_sequencer *seq; void *opaque_user_data; /* vh lock */ struct lws_dll2_owner children_owner; /* our children / queue */ /* vh lock */ struct lws_dll2 bound; /* parent or encapsulator */ /* vh lock */ struct lws_dll2 abstract_instances; lws_abs_transport_inst_t *ati; lws_abs_protocol_inst_t *api; } lws_abs_t; #endif libwebsockets-4.3.5/lib/abstract/protocols/000077500000000000000000000000001476025525100207675ustar00rootroot00000000000000libwebsockets-4.3.5/lib/abstract/protocols/smtp/000077500000000000000000000000001476025525100217525ustar00rootroot00000000000000libwebsockets-4.3.5/lib/abstract/protocols/smtp/private-lib-abstract-protocols-smtp.h000066400000000000000000000006241476025525100311470ustar00rootroot00000000000000#define LWS_SMTP_MAX_EMAIL_LEN 32 /* * These are allocated on to the heap with an over-allocation to hold the * payload at the end */ typedef struct lws_smtp_email { struct lws_dll2 list; void *data; char from[LWS_SMTP_MAX_EMAIL_LEN]; char to[LWS_SMTP_MAX_EMAIL_LEN]; time_t added; time_t last_try; lws_smtp_cb_t done; int tries; /* email payload follows */ } lws_smtp_email_t; libwebsockets-4.3.5/lib/abstract/protocols/smtp/smtp-sequencer.c000066400000000000000000000167131476025525100251010ustar00rootroot00000000000000/* * Abstract SMTP support for libwebsockets - SMTP sequencer * * Copyright (C) 2016-2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * This sequencer sits above the abstract protocol, and manages queueing, * retrying mail transmission, and retry limits. * * Having the sequencer means that, eg, we can manage retries after complete * connection failure. * * Connections to the smtp server are serialized */ #include "private-lib-core.h" #include "private-lib-abstract-protocols-smtp.h" typedef enum { LSMTPSS_DISCONNECTED, LSMTPSS_CONNECTING, LSMTPSS_CONNECTED, LSMTPSS_BUSY, } smtpss_connstate_t; typedef struct lws_smtp_sequencer { struct lws_dll2_owner emails_owner; /* email queue */ lws_abs_t *abs, *instance; lws_smtp_sequencer_args_t args; struct lws_sequencer *seq; smtpss_connstate_t connstate; time_t email_connect_started; /* holds the HELO for the smtp protocol to consume */ lws_token_map_t apt[3]; } lws_smtp_sequencer_t; /* sequencer messages specific to this sequencer */ enum { SEQ_MSG_CLIENT_FAILED = LWSSEQ_USER_BASE, SEQ_MSG_CLIENT_DONE, }; /* * We're going to bind to the raw-skt transport, so tell that what we want it * to connect to */ static const lws_token_map_t smtp_rs_transport_tokens[] = { { .u = { .value = "127.0.0.1" }, .name_index = LTMI_PEER_V_DNS_ADDRESS, }, { .u = { .lvalue = 25 }, .name_index = LTMI_PEER_LV_PORT, }, { } }; static void lws_smtpc_kick_internal(lws_smtp_sequencer_t *s) { lws_smtp_email_t *e; lws_dll2_t *d; char buf[64]; int n; lws_dll2_t *pd2; pd2 = lws_dll2_get_head(&s->emails_owner); if (!pd2) return; e = lws_container_of(pd2, lws_smtp_email_t, list); if (!e) return; /* Is there something to do? If so, we need a connection... */ if (s->connstate == LSMTPSS_DISCONNECTED) { s->apt[0].u.value = s->args.helo; s->apt[0].name_index = LTMI_PSMTP_V_HELO; s->apt[1].u.value = (void *)e; s->apt[1].name_index = LTMI_PSMTP_V_LWS_SMTP_EMAIL_T; /* * create and connect the smtp protocol + transport */ s->abs = lws_abstract_alloc(s->args.vhost, NULL, "smtp.raw_skt", s->apt, smtp_rs_transport_tokens, s->seq, NULL); if (!s->abs) return; s->instance = lws_abs_bind_and_create_instance(s->abs); if (!s->instance) { lws_abstract_free(&s->abs); lwsl_err("%s: failed to create SMTP client\n", __func__); goto bail1; } s->connstate = LSMTPSS_CONNECTING; lws_seq_timeout_us(s->seq, 10 * LWS_USEC_PER_SEC); return; } /* ask the transport if we have a connection to the server ongoing */ if (s->abs->at->state(s->abs->ati)) { /* * there's a connection, it could be still trying to connect * or established */ s->abs->at->ask_for_writeable(s->abs->ati); return; } /* there's no existing connection */ lws_smtpc_state_transition(c, LGSSMTP_CONNECTING); if (s->abs->at->client_conn(s->abs)) { lwsl_err("%s: failed to connect\n", __func__); return; } e->tries++; e->last_try = lws_now_secs(); } /* * The callback we get from the smtp protocol... we use this to drive * decisions about destroy email, retry and fail. * * Sequencer will handle it via the event loop. */ static int email_result(void *e, void *d, int disp, void *b, size_t l) { lws_smtp_sequencer_t *s = (lws_smtp_sequencer_t *)d; lws_sequencer_event(s->seq, LWSSEQ_USER_BASE + disp, e); return 0; } static int cleanup(struct lws_dll2 *d, void *user) { lws_smtp_email_t *e; e = lws_container_of(d, lws_smtp_email_t, list); if (e->done) e->done(e, "destroying", 10); lws_dll2_remove(d); lws_free(e); return 0; } static lws_seq_cb_return_t smtp_sequencer_cb(struct lws_sequencer *seq, void *user, int event, void *data) { struct lws_smtp_sequencer_t *s = (struct lws_smtp_sequencer_t *)user; switch ((int)event) { case LWSSEQ_CREATED: /* our sequencer just got started */ lwsl_notice("%s: %s: created\n", __func__, lws_sequencer_name(seq)); s->connstate = LSMTPSS_DISCONNECTED; s->state = 0; /* first thing we'll do is the first url */ goto step; case LWSSEQ_DESTROYED: lws_dll2_foreach_safe(&s->pending_owner, NULL, cleanup); break; case LWSSEQ_TIMED_OUT: lwsl_notice("%s: LWSSEQ_TIMED_OUT\n", __func__); break; case LWSSEQ_USER_BASE + LWS_SMTP_DISPOSITION_SENT: lws_smtpc_free_email(data); break; case LWSSEQ_WSI_CONNECTED: s->connstate = LSMTPSS_CONNECTED; lws_smtpc_kick_internal(s); break; case LWSSEQ_WSI_CONN_FAIL: case LWSSEQ_WSI_CONN_CLOSE: s->connstate = LSMTPSS_DISCONNECTED; lws_smtpc_kick_internal(s); break; case SEQ_MSG_SENT: break; default: break; } return LWSSEQ_RET_CONTINUE; } /* * Creates an lws_sequencer to manage the test sequence */ lws_smtp_sequencer_t * lws_smtp_sequencer_create(const lws_smtp_sequencer_args_t *args) { lws_smtp_sequencer_t *s; struct lws_sequencer *seq; /* * Create a sequencer in the event loop to manage the SMTP queue */ seq = lws_sequencer_create(args->vhost->context, 0, sizeof(lws_smtp_sequencer_t), (void **)&s, smtp_sequencer_cb, "smtp-seq"); if (!seq) { lwsl_err("%s: unable to create sequencer\n", __func__); return NULL; } s->abs = *args->abs; s->args = *args; s->seq = seq; /* set defaults in our copy of the args */ if (!s->args.helo[0]) strcpy(s->args.helo, "default-helo"); if (!s->args.email_queue_max) s->args.email_queue_max = 8; if (!s->args.retry_interval) s->args.retry_interval = 15 * 60; if (!s->args.delivery_timeout) s->args.delivery_timeout = 12 * 60 * 60; return s; } void lws_smtp_sequencer_destroy(lws_smtp_sequencer_t *s) { /* sequencer destruction destroys all assets */ lws_sequencer_destroy(&s->seq); } int lws_smtpc_add_email(lws_smtp_sequencer_t *s, const char *payload, size_t payload_len, const char *sender, const char *recipient, void *data, lws_smtp_cb_t done) { lws_smtp_email_t *e; if (s->emails_owner.count > s->args.email_queue_max) { lwsl_err("%s: email queue at limit of %d\n", __func__, (int)s->args.email_queue_max); return 1; } if (!done) return 1; e = malloc(sizeof(*e) + payload_len + 1); if (!e) return 1; memset(e, 0, sizeof(*e)); e->data = data; e->done = done; lws_strncpy(e->from, sender, sizeof(e->from)); lws_strncpy(e->to, recipient, sizeof(e->to)); memcpy((char *)&e[1], payload, payload_len + 1); e->added = lws_now_secs(); e->last_try = 0; e->tries = 0; lws_dll2_clear(&e->list); lws_dll2_add_tail(&e->list, &s->emails_owner); lws_smtpc_kick_internal(s); return 0; } libwebsockets-4.3.5/lib/abstract/protocols/smtp/smtp.c000066400000000000000000000222431476025525100231040ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "private-lib-abstract.h" /** enum lwsgs_smtp_states - where we are in SMTP protocol sequence */ typedef enum lwsgs_smtp_states { LGSSMTP_IDLE, /**< awaiting new email */ LGSSMTP_CONNECTING, /**< opening tcp connection to MTA */ LGSSMTP_CONNECTED, /**< tcp connection to MTA is connected */ /* (server sends greeting) */ LGSSMTP_SENT_HELO, /**< sent the HELO */ LGSSMTP_SENT_FROM, /**< sent FROM */ LGSSMTP_SENT_TO, /**< sent TO */ LGSSMTP_SENT_DATA, /**< sent DATA request */ LGSSMTP_SENT_BODY, /**< sent the email body */ /* * (server sends, eg, "250 Ok: queued as 12345") * at this point we can return to LGSSMTP_SENT_HELO and send a * new email, or continue below to QUIT, or just wait */ LGSSMTP_SENT_QUIT, /**< sent the session quit */ /* (server sends, eg, "221 Bye" and closes the connection) */ } lwsgs_smtp_states_t; /** abstract protocol instance data */ typedef struct lws_smtp_client_protocol { const struct lws_abs *abs; lwsgs_smtp_states_t estate; lws_smtp_email_t *e; /* the email we are trying to send */ const char *helo; unsigned char send_pending:1; } lws_smtpcp_t; static const short retcodes[] = { 0, /* idle */ 0, /* connecting */ 220, /* connected */ 250, /* helo */ 250, /* from */ 250, /* to */ 354, /* data */ 250, /* body */ 221, /* quit */ }; static void lws_smtpc_state_transition(lws_smtpcp_t *c, lwsgs_smtp_states_t s) { lwsl_debug("%s: cli %p: state %d -> %d\n", __func__, c, c->estate, s); c->estate = s; } static lws_smtp_email_t * lws_smtpc_get_email(lws_smtpcp_t *c) { const lws_token_map_t *tm; /* ... the email we want to send */ tm = lws_abs_get_token(c->abs->ap_tokens, LTMI_PSMTP_V_LWS_SMTP_EMAIL_T); if (!tm) { assert(0); return NULL; } return (lws_smtp_email_t *)tm->u.value; } /* * Called when something happened so that we know now the final disposition of * the email send attempt, for good or ill. * * Inform the owner via the done callback and set up the next queued one if any. * * Returns nonzero if we queued a new one */ static int lws_smtpc_email_disposition(lws_smtpcp_t *c, int disp, const void *buf, size_t len) { lws_smtpcp_t *ch; lws_abs_t *ach; lws_dll2_t *d; lws_smtpc_state_transition(c, LGSSMTP_SENT_HELO); /* lifetime of the email object is handled by done callback */ c->e->done(c->e, c->e->data, disp, buf, len); c->e = NULL; /* this may not be the time to try to send anything else... */ if (disp == LWS_SMTP_DISPOSITION_FAILED_DESTROY) return 0; /* ... otherwise... do we have another queued? */ d = lws_dll2_get_tail(&c->abs->children_owner); if (!d) return 0; ach = lws_container_of(d, lws_abs_t, bound); ch = (lws_smtpcp_t *)ach->api; c->e = lws_smtpc_get_email(ch); /* since we took it on, remove it from the queue */ lws_dll2_remove(d); return 1; } /* * we became connected */ static int lws_smtpc_abs_accept(lws_abs_protocol_inst_t *api) { lws_smtpcp_t *c = (lws_smtpcp_t *)api; /* we have become connected in the tcp sense */ lws_smtpc_state_transition(c, LGSSMTP_CONNECTED); /* * From the accept(), the next thing that should happen is the SMTP * server sends its greeting like "220 smtp2.example.com ESMTP Postfix", * we'll hear about it in the rx callback, or time out */ c->abs->at->set_timeout(c->abs->ati, PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE, 3); return 0; } static int lws_smtpc_abs_rx(lws_abs_protocol_inst_t *api, const uint8_t *buf, size_t len) { lws_smtpcp_t *c = (lws_smtpcp_t *)api; char dotstar[96], at[5]; int n; c->abs->at->set_timeout(c->abs->ati, NO_PENDING_TIMEOUT, 0); lws_strncpy(at, (const char *)buf, sizeof(at)); n = atoi(at); switch (c->estate) { case LGSSMTP_CONNECTED: if (n != 220) { /* * The server did not properly greet us... we can't * even get started, so fail the transport connection * (and anything queued on it) */ lws_strnncpy(dotstar, (const char *)buf, len, sizeof(dotstar)); lwsl_err("%s: server: %s\n", __func__, dotstar); return 1; } break; case LGSSMTP_SENT_BODY: /* * We finished one way or another... let's prepare to send a * new one... or wait until server hangs up on us */ if (!lws_smtpc_email_disposition(c, n == 250 ? LWS_SMTP_DISPOSITION_SENT : LWS_SMTP_DISPOSITION_FAILED, "destroyed", 0)) return 0; /* become idle */ break; /* ask to send */ case LGSSMTP_SENT_QUIT: lwsl_debug("%s: done\n", __func__); lws_smtpc_state_transition(c, LGSSMTP_IDLE); return 1; default: if (n != retcodes[c->estate]) { lws_strnncpy(dotstar, buf, len, sizeof(dotstar)); lwsl_notice("%s: bad response: %d (state %d) %s\n", __func__, n, c->estate, dotstar); lws_smtpc_email_disposition(c, LWS_SMTP_DISPOSITION_FAILED, buf, len); return 0; } break; } c->send_pending = 1; c->abs->at->ask_for_writeable(c->abs->ati); return 0; } static int lws_smtpc_abs_writeable(lws_abs_protocol_inst_t *api, size_t budget) { char b[256 + LWS_PRE], *p = b + LWS_PRE; lws_smtpcp_t *c = (lws_smtpcp_t *)api; int n; if (!c->send_pending || !c->e) return 0; c->send_pending = 0; lwsl_debug("%s: writing response for state %d\n", __func__, c->estate); switch (c->estate) { case LGSSMTP_CONNECTED: n = lws_snprintf(p, sizeof(b) - LWS_PRE, "HELO %s\n", c->helo); lws_smtpc_state_transition(c, LGSSMTP_SENT_HELO); break; case LGSSMTP_SENT_HELO: n = lws_snprintf(p, sizeof(b) - LWS_PRE, "MAIL FROM: <%s>\n", c->e->from); lws_smtpc_state_transition(c, LGSSMTP_SENT_FROM); break; case LGSSMTP_SENT_FROM: n = lws_snprintf(p, sizeof(b) - LWS_PRE, "RCPT TO: <%s>\n", c->e->to); lws_smtpc_state_transition(c, LGSSMTP_SENT_TO); break; case LGSSMTP_SENT_TO: n = lws_snprintf(p, sizeof(b) - LWS_PRE, "DATA\n"); lws_smtpc_state_transition(c, LGSSMTP_SENT_DATA); break; case LGSSMTP_SENT_DATA: p = (char *)&c->e[1]; n = strlen(p); lws_smtpc_state_transition(c, LGSSMTP_SENT_BODY); break; case LGSSMTP_SENT_BODY: n = lws_snprintf(p, sizeof(b) - LWS_PRE, "quit\n"); lws_smtpc_state_transition(c, LGSSMTP_SENT_QUIT); break; case LGSSMTP_SENT_QUIT: return 0; default: return 0; } //puts(p); c->abs->at->tx(c->abs->ati, (uint8_t *)p, n); return 0; } static int lws_smtpc_abs_closed(lws_abs_protocol_inst_t *api) { lws_smtpcp_t *c = (lws_smtpcp_t *)api; if (c) lws_smtpc_state_transition(c, LGSSMTP_IDLE); return 0; } /* * Creating for initial transport and for piggybacking on another transport * both get created here the same. But piggybackers have ai->bound attached. */ static int lws_smtpc_create(const lws_abs_t *ai) { lws_smtpcp_t *c = (lws_smtpcp_t *)ai->api; memset(c, 0, sizeof(*c)); c->abs = ai; c->e = lws_smtpc_get_email(c); lws_smtpc_state_transition(c, lws_dll2_is_detached(&ai->bound) ? LGSSMTP_CONNECTING : LGSSMTP_IDLE); /* If we are initiating the transport, we will get an accept() next... * * If we are piggybacking, the parent will get a .child_bind() after * this to give it a chance to act on us joining (eg, it was completely * idle and we joined). */ return 0; } static void lws_smtpc_destroy(lws_abs_protocol_inst_t **_c) { lws_smtpcp_t *c = (lws_smtpcp_t *)*_c; if (!c) return; /* so if we are still holding on to c->e, we have failed to send it */ if (c->e) lws_smtpc_email_disposition(c, LWS_SMTP_DISPOSITION_FAILED_DESTROY, "destroyed", 0); *_c = NULL; } static int lws_smtpc_compare(lws_abs_t *abs1, lws_abs_t *abs2) { return 0; } static int lws_smtpc_child_bind(lws_abs_t *abs) { return 0; } /* events the transport invokes (handled by abstract protocol) */ const lws_abs_protocol_t lws_abs_protocol_smtp = { .name = "smtp", .alloc = sizeof(lws_smtpcp_t), .flags = LWSABSPR_FLAG_PIPELINE, .create = lws_smtpc_create, .destroy = lws_smtpc_destroy, .compare = lws_smtpc_compare, .accept = lws_smtpc_abs_accept, .rx = lws_smtpc_abs_rx, .writeable = lws_smtpc_abs_writeable, .closed = lws_smtpc_abs_closed, .heartbeat = NULL, .child_bind = lws_smtpc_child_bind, }; libwebsockets-4.3.5/lib/abstract/test-sequencer.c000066400000000000000000000162741476025525100220700ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * A helper for running multiple unit tests against abstract protocols. * * An lws_seq_t is used to base its actions in the event loop and manage * the sequencing of multiple tests. A new abstract connection is instantiated * for each test using te */ #include struct lws_seq_test_sequencer { lws_abs_t original_abs; lws_test_sequencer_args_t args; struct lws_context *context; struct lws_vhost *vhost; struct lws_sequencer *unit_test_seq; /* holds the per-test token for the unit-test transport to consume */ lws_token_map_t uttt[4]; lws_abs_t *instance; int state; }; /* sequencer messages specific to this sequencer */ enum { SEQ_MSG_PASS = LWSSEQ_USER_BASE, SEQ_MSG_FAIL, SEQ_MSG_FAIL_TIMEOUT, }; /* * We get called back when the unit test transport has decided if the test * passed or failed. We get the priv, and report to the sequencer message queue * what the result was. */ static int unit_test_result_cb(const void *cb_user, int disposition) { const struct lws_seq_test_sequencer *s = (const struct lws_seq_test_sequencer *)cb_user; int r; lwsl_debug("%s: disp %d\n", __func__, disposition); switch (disposition) { case LPE_FAILED_UNEXPECTED_PASS: case LPE_FAILED_UNEXPECTED_CLOSE: case LPE_FAILED: r = SEQ_MSG_FAIL; break; case LPE_FAILED_UNEXPECTED_TIMEOUT: r = SEQ_MSG_FAIL_TIMEOUT; break; case LPE_SUCCEEDED: r = SEQ_MSG_PASS; break; default: assert(0); return -1; } lws_seq_queue_event(s->unit_test_seq, r, NULL, NULL); ((struct lws_seq_test_sequencer *)s)->instance = NULL; return 0; } /* * We receive the unit test result callback's messages via the message queue. * * We log the results and always move on to the next test until there are no * more tests. */ static lws_seq_cb_return_t test_sequencer_cb(struct lws_sequencer *seq, void *user, int event, void *data, void *aux) { struct lws_seq_test_sequencer *s = (struct lws_seq_test_sequencer *)user; lws_unit_test_packet_t *exp = (lws_unit_test_packet_t *) s->args.tests[s->state].expect_array; lws_abs_t test_abs; switch ((int)event) { case LWSSEQ_CREATED: /* our sequencer just got started */ lwsl_notice("%s: %s: created\n", __func__, lws_seq_name(seq)); s->state = 0; /* first thing we'll do is the first url */ goto step; case LWSSEQ_DESTROYED: /* * We are going down... if we have a child unit test sequencer * still around inform and destroy it */ if (s->instance) { s->instance->at->close(s->instance); s->instance = NULL; } break; case SEQ_MSG_FAIL_TIMEOUT: /* current step timed out */ if (exp->flags & LWS_AUT_EXPECT_SHOULD_TIMEOUT) { lwsl_user("%s: test %d got expected timeout\n", __func__, s->state); goto pass; } lwsl_user("%s: seq timed out at step %d\n", __func__, s->state); s->args.results[s->state] = LPE_FAILED_UNEXPECTED_TIMEOUT; goto done; /* always move on to the next test */ case SEQ_MSG_FAIL: if (exp->flags & LWS_AUT_EXPECT_SHOULD_FAIL) { /* * in this case, we expected to fail like this, it's OK */ lwsl_user("%s: test %d failed as expected\n", __func__, s->state); goto pass; /* always move on to the next test */ } lwsl_user("%s: seq failed at step %d\n", __func__, s->state); s->args.results[s->state] = LPE_FAILED; goto done; /* always move on to the next test */ case SEQ_MSG_PASS: if (exp->flags & (LWS_AUT_EXPECT_SHOULD_FAIL | LWS_AUT_EXPECT_SHOULD_TIMEOUT)) { /* * In these specific cases, done would be a failure, * we expected to timeout or fail */ lwsl_user("%s: seq failed at step %d\n", __func__, s->state); s->args.results[s->state] = LPE_FAILED_UNEXPECTED_PASS; goto done; /* always move on to the next test */ } lwsl_info("%s: seq done test %d\n", __func__, s->state); pass: (*s->args.count_passes)++; s->args.results[s->state] = LPE_SUCCEEDED; done: lws_seq_timeout_us(lws_seq_from_user(s), LWSSEQTO_NONE); s->state++; step: if (!s->args.tests[s->state].name) { /* the sequence has completed */ lwsl_user("%s: sequence completed OK\n", __func__); if (s->args.cb) s->args.cb(s->args.cb_user); return LWSSEQ_RET_DESTROY; } lwsl_info("%s: starting test %d\n", __func__, s->state); if (s->state >= s->args.results_max) { lwsl_err("%s: results array is too small\n", __func__); return LWSSEQ_RET_DESTROY; } test_abs = s->original_abs; s->uttt[0].name_index = LTMI_PEER_V_EXPECT_TEST; s->uttt[0].u.value = (void *)&s->args.tests[s->state]; s->uttt[1].name_index = LTMI_PEER_V_EXPECT_RESULT_CB; s->uttt[1].u.value = (void *)unit_test_result_cb; s->uttt[2].name_index = LTMI_PEER_V_EXPECT_RESULT_CB_ARG; s->uttt[2].u.value = (void *)s; /* give the unit test transport the test tokens */ test_abs.at_tokens = s->uttt; s->instance = lws_abs_bind_and_create_instance(&test_abs); if (!s->instance) { lwsl_notice("%s: failed to create step %d unit test\n", __func__, s->state); return LWSSEQ_RET_DESTROY; } (*s->args.count_tests)++; break; default: break; } return LWSSEQ_RET_CONTINUE; } /* * Creates an lws_sequencer to manage the test sequence */ int lws_abs_unit_test_sequencer(const lws_test_sequencer_args_t *args) { struct lws_seq_test_sequencer *s; struct lws_sequencer *seq; lws_seq_info_t i; memset(&i, 0, sizeof(i)); i.context = args->abs->vh->context; i.user_size = sizeof(struct lws_seq_test_sequencer); i.puser = (void **)&s; i.cb = test_sequencer_cb; i.name = "test-seq"; /* * Create a sequencer in the event loop to manage the tests */ seq = lws_seq_create(&i); if (!seq) { lwsl_err("%s: unable to create sequencer\n", __func__); return 1; } /* * Take a copy of the original lws_abs_t we were passed so we can use * it as the basis of the lws_abs_t we create the individual tests with */ s->original_abs = *args->abs; s->args = *args; s->context = args->abs->vh->context; s->vhost = args->abs->vh; s->unit_test_seq = seq; *s->args.count_tests = 0; *s->args.count_passes = 0; return 0; } libwebsockets-4.3.5/lib/abstract/transports/000077500000000000000000000000001476025525100211625ustar00rootroot00000000000000libwebsockets-4.3.5/lib/abstract/transports/raw-skt.c000066400000000000000000000236321476025525100227240ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "private-lib-abstract.h" typedef struct lws_abstxp_raw_skt_priv { struct lws_abs *abs; struct lws *wsi; lws_dll2_t same_abs_transport_list; uint8_t established:1; uint8_t connecting:1; } abs_raw_skt_priv_t; struct vhd { lws_dll2_owner_t owner; }; static int heartbeat_cb(struct lws_dll2 *d, void *user) { abs_raw_skt_priv_t *priv = lws_container_of(d, abs_raw_skt_priv_t, same_abs_transport_list); if (priv->abs->ap->heartbeat) priv->abs->ap->heartbeat(priv->abs->api); return 0; } static int callback_abs_client_raw_skt(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { abs_raw_skt_priv_t *priv = (abs_raw_skt_priv_t *)user; struct vhd *vhd = (struct vhd *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct vhd)); if (!vhd) return 1; lws_timed_callback_vh_protocol(lws_get_vhost(wsi), lws_get_protocol(wsi), LWS_CALLBACK_USER, 1); break; case LWS_CALLBACK_USER: /* * This comes at 1Hz without a wsi context, so there is no * valid priv. We need to track the live abstract objects that * are using our abstract protocol, and pass the heartbeat * through to the ones that care. */ if (!vhd) break; lws_dll2_foreach_safe(&vhd->owner, NULL, heartbeat_cb); lws_timed_callback_vh_protocol(lws_get_vhost(wsi), lws_get_protocol(wsi), LWS_CALLBACK_USER, 1); break; case LWS_CALLBACK_RAW_CONNECTED: lwsl_debug("LWS_CALLBACK_RAW_CONNECTED\n"); priv->connecting = 0; priv->established = 1; if (priv->abs->ap->accept) priv->abs->ap->accept(priv->abs->api); if (wsi->seq) /* * we are bound to a sequencer who wants to know about * our lifecycle events */ lws_seq_queue_event(wsi->seq, LWSSEQ_WSI_CONNECTED, wsi, NULL); break; case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_user("CONNECTION_ERROR\n"); if (in) lwsl_user(" %s\n", (const char *)in); if (wsi->seq) /* * we are bound to a sequencer who wants to know about * our lifecycle events */ lws_seq_queue_event(wsi->seq, LWSSEQ_WSI_CONN_FAIL, wsi, NULL); goto close_path; /* fallthru */ case LWS_CALLBACK_RAW_CLOSE: if (!user) break; if (wsi->seq) /* * we are bound to a sequencer who wants to know about * our lifecycle events */ lws_seq_queue_event(wsi->seq, LWSSEQ_WSI_CONN_CLOSE, wsi, NULL); close_path: lwsl_debug("LWS_CALLBACK_RAW_CLOSE\n"); priv->established = 0; priv->connecting = 0; if (priv->abs && priv->abs->ap->closed) priv->abs->ap->closed(priv->abs->api); lws_set_wsi_user(wsi, NULL); break; case LWS_CALLBACK_RAW_RX: lwsl_debug("LWS_CALLBACK_RAW_RX (%d)\n", (int)len); return !!priv->abs->ap->rx(priv->abs->api, in, len); case LWS_CALLBACK_RAW_WRITEABLE: lwsl_debug("LWS_CALLBACK_RAW_WRITEABLE\n"); priv->abs->ap->writeable(priv->abs->api, lws_get_peer_write_allowance(priv->wsi)); break; case LWS_CALLBACK_RAW_SKT_BIND_PROTOCOL: lws_dll2_add_tail(&priv->same_abs_transport_list, &vhd->owner); break; case LWS_CALLBACK_RAW_SKT_DROP_PROTOCOL: lws_dll2_remove(&priv->same_abs_transport_list); break; default: break; } return 0; } static int lws_atcrs_close(lws_abs_transport_inst_t *ati) { abs_raw_skt_priv_t *priv = (abs_raw_skt_priv_t *)ati; struct lws *wsi = priv->wsi; if (!priv->wsi) return 0; if (!lws_raw_transaction_completed(priv->wsi)) return 0; priv->wsi = NULL; lws_set_timeout(wsi, 1, LWS_TO_KILL_SYNC); /* priv is destroyed in the CLOSE callback */ return 0; } const struct lws_protocols protocol_abs_client_raw_skt = { "lws-abs-cli-raw-skt", callback_abs_client_raw_skt, 0, 1024, 1024, NULL, 0 }; static int lws_atcrs_tx(lws_abs_transport_inst_t *ati, uint8_t *buf, size_t len) { abs_raw_skt_priv_t *priv = (abs_raw_skt_priv_t *)ati; if (!priv->wsi) { lwsl_err("%s: NULL priv->wsi\n", __func__); return 1; } lwsl_debug("%s: priv %p, wsi %p, ro %p\n", __func__, priv, priv->wsi, priv->wsi->role_ops); if (lws_write(priv->wsi, buf, len, LWS_WRITE_RAW) < 0) lws_atcrs_close(ati); return 0; } #if defined(LWS_WITH_CLIENT) static int lws_atcrs_client_conn(const lws_abs_t *abs) { abs_raw_skt_priv_t *priv = (abs_raw_skt_priv_t *)abs->ati; struct lws_client_connect_info i; const lws_token_map_t *tm; if (priv->connecting) return 0; if (priv->established) { lws_set_timeout(priv->wsi, PENDING_TIMEOUT_CLIENT_CONN_IDLE, 5); return 0; } memset(&i, 0, sizeof(i)); /* address and port are passed-in using the abstract transport tokens */ tm = lws_abs_get_token(abs->at_tokens, LTMI_PEER_V_DNS_ADDRESS); if (!tm) { lwsl_notice("%s: raw_skt needs LTMI_PEER_V_DNS_ADDRESS\n", __func__); return 1; } i.address = tm->u.value; tm = lws_abs_get_token(abs->at_tokens, LTMI_PEER_LV_PORT); if (!tm) { lwsl_notice("%s: raw_skt needs LTMI_PEER_LV_PORT\n", __func__); return 1; } i.port = tm->u.lvalue; /* optional */ i.ssl_connection = 0; tm = lws_abs_get_token(abs->at_tokens, LTMI_PEER_LV_TLS_FLAGS); if (tm) i.ssl_connection = tm->u.lvalue; lwsl_debug("%s: raw_skt priv %p connecting to %s:%u %p\n", __func__, priv, i.address, i.port, abs->vh->context); i.path = ""; i.method = "RAW"; i.vhost = abs->vh; i.userdata = priv; i.host = i.address; i.pwsi = &priv->wsi; i.origin = i.address; i.context = abs->vh->context; i.local_protocol_name = "lws-abs-cli-raw-skt"; i.seq = abs->seq; i.opaque_user_data = abs->opaque_user_data; /* * the protocol itself has some natural attributes we should pass on */ if (abs->ap->flags & LWS_AP_FLAG_PIPELINE_TRANSACTIONS) i.ssl_connection |= LCCSCF_PIPELINE; if (abs->ap->flags & LWS_AP_FLAG_MUXABLE_STREAM) i.ssl_connection |= LCCSCF_MUXABLE_STREAM; priv->wsi = lws_client_connect_via_info(&i); if (!priv->wsi) return 1; priv->connecting = 1; return 0; } #endif static int lws_atcrs_ask_for_writeable(lws_abs_transport_inst_t *ati) { abs_raw_skt_priv_t *priv = (abs_raw_skt_priv_t *)ati; if (!priv->wsi || !priv->established) return 1; lws_callback_on_writable(priv->wsi); return 0; } static int lws_atcrs_create(struct lws_abs *ai) { abs_raw_skt_priv_t *at = (abs_raw_skt_priv_t *)ai->ati; memset(at, 0, sizeof(*at)); at->abs = ai; return 0; } static void lws_atcrs_destroy(lws_abs_transport_inst_t **pati) { /* * For ourselves, we don't free anything because the abstract layer * combined our allocation with that of the abs instance, and it will * free the whole thing after this. */ *pati = NULL; } static int lws_atcrs_set_timeout(lws_abs_transport_inst_t *ati, int reason, int secs) { abs_raw_skt_priv_t *priv = (abs_raw_skt_priv_t *)ati; lws_set_timeout(priv->wsi, reason, secs); return 0; } static int lws_atcrs_state(lws_abs_transport_inst_t *ati) { abs_raw_skt_priv_t *priv = (abs_raw_skt_priv_t *)ati; if (!priv || !priv->wsi || (!priv->established && !priv->connecting)) return 0; return 1; } static int lws_atcrs_compare(lws_abs_t *abs1, lws_abs_t *abs2) { const lws_token_map_t *tm1, *tm2; tm1 = lws_abs_get_token(abs1->at_tokens, LTMI_PEER_V_DNS_ADDRESS); tm2 = lws_abs_get_token(abs2->at_tokens, LTMI_PEER_V_DNS_ADDRESS); /* Address token is mandatory and must match */ if (!tm1 || !tm2 || strcmp(tm1->u.value, tm2->u.value)) return 1; /* Port token is mandatory and must match */ tm1 = lws_abs_get_token(abs1->at_tokens, LTMI_PEER_LV_PORT); tm2 = lws_abs_get_token(abs2->at_tokens, LTMI_PEER_LV_PORT); if (!tm1 || !tm2 || tm1->u.lvalue != tm2->u.lvalue) return 1; /* TLS is optional... */ tm1 = lws_abs_get_token(abs1->at_tokens, LTMI_PEER_LV_TLS_FLAGS); tm2 = lws_abs_get_token(abs2->at_tokens, LTMI_PEER_LV_TLS_FLAGS); /* ... but both must have the same situation with it given or not... */ if (!!tm1 != !!tm2) return 1; /* if not using TLS, then that's enough to call it */ if (!tm1) return 0; /* ...and if there are tls flags, both must have the same tls flags */ if (tm1->u.lvalue != tm2->u.lvalue) return 1; /* ... and both must use the same client tls ctx / vhost */ return abs1->vh != abs2->vh; } const lws_abs_transport_t lws_abs_transport_cli_raw_skt = { .name = "raw_skt", .alloc = sizeof(abs_raw_skt_priv_t), .create = lws_atcrs_create, .destroy = lws_atcrs_destroy, .compare = lws_atcrs_compare, .tx = lws_atcrs_tx, #if !defined(LWS_WITH_CLIENT) .client_conn = NULL, #else .client_conn = lws_atcrs_client_conn, #endif .close = lws_atcrs_close, .ask_for_writeable = lws_atcrs_ask_for_writeable, .set_timeout = lws_atcrs_set_timeout, .state = lws_atcrs_state, }; libwebsockets-4.3.5/lib/abstract/transports/unit-test.c000066400000000000000000000306501476025525100232660ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * An abstract transport that is useful for unit testing an abstract protocol. * It doesn't actually connect to anything, but checks the protocol's response * to provided canned packets from an array of test vectors. */ #include "private-lib-core.h" #include "private-lib-abstract.h" /* this is the transport priv instantiated at abs->ati */ typedef struct lws_abstxp_unit_test_priv { char note[128]; struct lws_abs *abs; struct lws_sequencer *seq; lws_unit_test_t *current_test; lws_unit_test_packet_t *expect; lws_unit_test_packet_test_cb result_cb; const void *result_cb_arg; lws_unit_test_packet_disposition disposition; /* synthesized protocol timeout */ time_t timeout; uint8_t established:1; uint8_t connecting:1; } abs_unit_test_priv_t; typedef struct seq_priv { lws_abs_t *ai; } seq_priv_t; enum { UTSEQ_MSG_WRITEABLE = LWSSEQ_USER_BASE, UTSEQ_MSG_CLOSING, UTSEQ_MSG_TIMEOUT, UTSEQ_MSG_CONNECTING, UTSEQ_MSG_POST_TX_KICK, UTSEQ_MSG_DISPOSITION_KNOWN }; /* * A definitive result has appeared for the current test */ static lws_unit_test_packet_disposition lws_unit_test_packet_dispose(abs_unit_test_priv_t *priv, lws_unit_test_packet_disposition disp, const char *note) { assert(priv->disposition == LPE_CONTINUE); lwsl_info("%s: %d\n", __func__, disp); if (note) lws_strncpy(priv->note, note, sizeof(priv->note)); priv->disposition = disp; lws_seq_queue_event(priv->seq, UTSEQ_MSG_DISPOSITION_KNOWN, NULL, NULL); return disp; } /* * start on the next step of the test */ lws_unit_test_packet_disposition process_expect(abs_unit_test_priv_t *priv) { assert(priv->disposition == LPE_CONTINUE); while (priv->expect->flags & LWS_AUT_EXPECT_RX && priv->disposition == LPE_CONTINUE) { int f = priv->expect->flags & LWS_AUT_EXPECT_LOCAL_CLOSE, s; if (priv->expect->pre) priv->expect->pre(priv->abs); lwsl_info("%s: rx()\n", __func__); lwsl_hexdump_debug(priv->expect->buffer, priv->expect->len); s = priv->abs->ap->rx(priv->abs->api, priv->expect->buffer, priv->expect->len); if (!!f != !!s) { lwsl_notice("%s: expected rx return %d, got %d\n", __func__, !!f, s); return lws_unit_test_packet_dispose(priv, LPE_FAILED, "rx unexpected return"); } if (priv->expect->flags & LWS_AUT_EXPECT_TEST_END) { lws_unit_test_packet_dispose(priv, LPE_SUCCEEDED, NULL); break; } priv->expect++; } return LPE_CONTINUE; } static lws_seq_cb_return_t unit_test_sequencer_cb(struct lws_sequencer *seq, void *user, int event, void *data, void *aux) { seq_priv_t *s = (seq_priv_t *)user; abs_unit_test_priv_t *priv = (abs_unit_test_priv_t *)s->ai->ati; time_t now; switch ((int)event) { case LWSSEQ_CREATED: /* our sequencer just got started */ lwsl_notice("%s: %s: created\n", __func__, lws_seq_name(seq)); if (s->ai->at->client_conn(s->ai)) { lwsl_notice("%s: %s: abstract client conn failed\n", __func__, lws_seq_name(seq)); return LWSSEQ_RET_DESTROY; } break; case LWSSEQ_DESTROYED: /* * This sequencer is about to be destroyed. If we have any * other assets in play, detach them from us. */ if (priv->abs) lws_abs_destroy_instance(&priv->abs); break; case LWSSEQ_HEARTBEAT: /* synthesize a wsi-style timeout */ if (!priv->timeout) goto ph; time(&now); if (now <= priv->timeout) goto ph; if (priv->expect->flags & LWS_AUT_EXPECT_SHOULD_TIMEOUT) { lwsl_user("%s: test got expected timeout\n", __func__); lws_unit_test_packet_dispose(priv, LPE_FAILED_UNEXPECTED_TIMEOUT, NULL); return LWSSEQ_RET_DESTROY; } lwsl_user("%s: seq timed out\n", __func__); ph: if (priv->abs->ap->heartbeat) priv->abs->ap->heartbeat(priv->abs->api); break; case UTSEQ_MSG_DISPOSITION_KNOWN: lwsl_info("%s: %s: DISPOSITION_KNOWN %s: %s\n", __func__, priv->abs->ap->name, priv->current_test->name, priv->disposition == LPE_SUCCEEDED ? "OK" : "FAIL"); /* * if the test has a callback, call it back to let it * know the result */ if (priv->result_cb) priv->result_cb(priv->result_cb_arg, priv->disposition); return LWSSEQ_RET_DESTROY; case UTSEQ_MSG_CONNECTING: lwsl_debug("UTSEQ_MSG_CONNECTING\n"); if (priv->abs->ap->accept) priv->abs->ap->accept(priv->abs->api); priv->established = 1; /* fallthru */ case UTSEQ_MSG_POST_TX_KICK: if (priv->disposition) break; if (process_expect(priv) != LPE_CONTINUE) { lwsl_notice("%s: UTSEQ_MSG_POST_TX_KICK failed\n", __func__); return LWSSEQ_RET_DESTROY; } break; case UTSEQ_MSG_WRITEABLE: /* * inform the protocol our transport is writeable now */ priv->abs->ap->writeable(priv->abs->api, 1024); break; case UTSEQ_MSG_CLOSING: if (!(priv->expect->flags & LWS_AUT_EXPECT_LOCAL_CLOSE)) { lwsl_user("%s: got unexpected close\n", __func__); lws_unit_test_packet_dispose(priv, LPE_FAILED_UNEXPECTED_CLOSE, NULL); goto done; } /* tell the abstract protocol we are closing on them */ if (priv->abs && priv->abs->ap->closed) priv->abs->ap->closed(priv->abs->api); goto done; case UTSEQ_MSG_TIMEOUT: /* current step timed out */ s->ai->at->close(s->ai->ati); if (!(priv->expect->flags & LWS_AUT_EXPECT_SHOULD_TIMEOUT)) { lwsl_user("%s: got unexpected timeout\n", __func__); lws_unit_test_packet_dispose(priv, LPE_FAILED_UNEXPECTED_TIMEOUT, NULL); return LWSSEQ_RET_DESTROY; } goto done; done: lws_seq_timeout_us(lws_seq_from_user(s), LWSSEQTO_NONE); priv->expect++; if (!priv->expect->buffer) { /* the sequence has completed */ lwsl_user("%s: sequence completed OK\n", __func__); return LWSSEQ_RET_DESTROY; } break; default: break; } return LWSSEQ_RET_CONTINUE; } static int lws_atcut_close(lws_abs_transport_inst_t *ati) { abs_unit_test_priv_t *priv = (abs_unit_test_priv_t *)ati; lwsl_notice("%s\n", __func__); lws_seq_queue_event(priv->seq, UTSEQ_MSG_CLOSING, NULL, NULL); return 0; } static int lws_atcut_tx(lws_abs_transport_inst_t *ati, uint8_t *buf, size_t len) { abs_unit_test_priv_t *priv = (abs_unit_test_priv_t *)ati; assert(priv->disposition == LPE_CONTINUE); lwsl_info("%s: received tx\n", __func__); if (priv->expect->pre) priv->expect->pre(priv->abs); if (!(priv->expect->flags & LWS_AUT_EXPECT_TX)) { lwsl_notice("%s: unexpected tx\n", __func__); lwsl_hexdump_notice(buf, len); lws_unit_test_packet_dispose(priv, LPE_FAILED, "unexpected tx"); return 1; } if (len != priv->expect->len) { lwsl_notice("%s: unexpected tx len %zu, expected %zu\n", __func__, len, priv->expect->len); lws_unit_test_packet_dispose(priv, LPE_FAILED, "tx len mismatch"); return 1; } if (memcmp(buf, priv->expect->buffer, len)) { lwsl_notice("%s: tx mismatch (exp / actual)\n", __func__); lwsl_hexdump_debug(priv->expect->buffer, len); lwsl_hexdump_debug(buf, len); lws_unit_test_packet_dispose(priv, LPE_FAILED, "tx data mismatch"); return 1; } if (priv->expect->flags & LWS_AUT_EXPECT_TEST_END) { lws_unit_test_packet_dispose(priv, LPE_SUCCEEDED, NULL); return 1; } priv->expect++; lws_seq_queue_event(priv->seq, UTSEQ_MSG_POST_TX_KICK, NULL, NULL); return 0; } #if defined(LWS_WITH_CLIENT) static int lws_atcut_client_conn(const lws_abs_t *abs) { abs_unit_test_priv_t *priv = (abs_unit_test_priv_t *)abs->ati; const lws_token_map_t *tm; if (priv->established) { lwsl_err("%s: already established\n", __func__); return 1; } /* set up the test start pieces... the array of test expects... */ tm = lws_abs_get_token(abs->at_tokens, LTMI_PEER_V_EXPECT_TEST); if (!tm) { lwsl_notice("%s: unit_test needs LTMI_PEER_V_EXPECT_TEST\n", __func__); return 1; } priv->current_test = (lws_unit_test_t *)tm->u.value; /* ... and the callback to deliver the result to */ tm = lws_abs_get_token(abs->at_tokens, LTMI_PEER_V_EXPECT_RESULT_CB); if (tm) priv->result_cb = (lws_unit_test_packet_test_cb)tm->u.value; else priv->result_cb = NULL; /* ... and the arg to deliver it with */ tm = lws_abs_get_token(abs->at_tokens, LTMI_PEER_V_EXPECT_RESULT_CB_ARG); if (tm) priv->result_cb_arg = tm->u.value; priv->expect = priv->current_test->expect_array; priv->disposition = LPE_CONTINUE; priv->note[0] = '\0'; lws_seq_timeout_us(priv->seq, priv->current_test->max_secs * LWS_US_PER_SEC); lwsl_notice("%s: %s: test '%s': start\n", __func__, abs->ap->name, priv->current_test->name); lws_seq_queue_event(priv->seq, UTSEQ_MSG_CONNECTING, NULL, NULL); return 0; } #endif static int lws_atcut_ask_for_writeable(lws_abs_transport_inst_t *ati) { abs_unit_test_priv_t *priv = (abs_unit_test_priv_t *)ati; if (!priv->established) return 1; /* * Queue a writeable event... this won't be handled by teh sequencer * until we have returned to the event loop, just like a real * callback_on_writable() */ lws_seq_queue_event(priv->seq, UTSEQ_MSG_WRITEABLE, NULL, NULL); return 0; } /* * An abstract protocol + transport has been instantiated */ static int lws_atcut_create(lws_abs_t *ai) { abs_unit_test_priv_t *priv; struct lws_sequencer *seq; lws_seq_info_t i; seq_priv_t *s; memset(&i, 0, sizeof(i)); i.context = ai->vh->context; i.user_size = sizeof(*s); i.puser = (void **)&s; i.cb = unit_test_sequencer_cb; i.name = "unit-test-seq"; /* * Create the sequencer for the steps in a single unit test */ seq = lws_seq_create(&i); if (!seq) { lwsl_err("%s: unable to create sequencer\n", __func__); return 1; } priv = ai->ati; memset(s, 0, sizeof(*s)); memset(priv, 0, sizeof(*priv)); /* the sequencer priv just points to the lws_abs_t */ s->ai = ai; priv->abs = ai; priv->seq = seq; return 0; } static void lws_atcut_destroy(lws_abs_transport_inst_t **pati) { /* * We don't free anything because the abstract layer combined our * allocation with that of the instance, and it will free the whole * thing after this. */ *pati = NULL; } static int lws_atcut_set_timeout(lws_abs_transport_inst_t *ati, int reason, int secs) { abs_unit_test_priv_t *priv = (abs_unit_test_priv_t *)ati; time_t now; time(&now); if (secs) priv->timeout = now + secs; else priv->timeout = 0; return 0; } static int lws_atcut_state(lws_abs_transport_inst_t *ati) { abs_unit_test_priv_t *priv = (abs_unit_test_priv_t *)ati; if (!priv || (!priv->established && !priv->connecting)) return 0; return 1; } static const char *dnames[] = { "INCOMPLETE", "PASS", "FAIL", "FAIL(TIMEOUT)", "FAIL(UNEXPECTED PASS)", "FAIL(UNEXPECTED CLOSE)", "SKIPPED" "?", "?" }; const char * lws_unit_test_result_name(int in) { if (in < 0 || in > (int)LWS_ARRAY_SIZE(dnames)) return "unknown"; return dnames[in]; } static int lws_atcut_compare(lws_abs_t *abs1, lws_abs_t *abs2) { return 0; } const lws_abs_transport_t lws_abs_transport_cli_unit_test = { .name = "unit_test", .alloc = sizeof(abs_unit_test_priv_t), .create = lws_atcut_create, .destroy = lws_atcut_destroy, .compare = lws_atcut_compare, .tx = lws_atcut_tx, #if !defined(LWS_WITH_CLIENT) .client_conn = NULL, #else .client_conn = lws_atcut_client_conn, #endif .close = lws_atcut_close, .ask_for_writeable = lws_atcut_ask_for_writeable, .set_timeout = lws_atcut_set_timeout, .state = lws_atcut_state, }; libwebsockets-4.3.5/lib/core-net/000077500000000000000000000000001476025525100166545ustar00rootroot00000000000000libwebsockets-4.3.5/lib/core-net/CMakeLists.txt000066400000000000000000000043011476025525100214120ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # include_directories(.) list(APPEND SOURCES core-net/dummy-callback.c core-net/output.c core-net/close.c core-net/network.c core-net/vhost.c core-net/pollfd.c core-net/service.c core-net/sorted-usec-list.c core-net/wsi.c core-net/wsi-timeout.c core-net/adopt.c roles/pipe/ops-pipe.c ) if (LWS_WITH_SYS_STATE) list(APPEND SOURCES core-net/state.c ) endif() if (LWS_WITH_NETLINK) list(APPEND SOURCES core-net/route.c ) endif() if (LWS_WITH_LWS_DSH) list(APPEND SOURCES core-net/lws-dsh.c) endif() if (LWS_WITH_SEQUENCER) list(APPEND SOURCES core-net/sequencer.c) endif() if (LWS_WITH_CLIENT) list(APPEND SOURCES core-net/client/client.c core-net/client/connect.c core-net/client/connect2.c core-net/client/connect3.c core-net/client/connect4.c core-net/client/sort-dns.c ) if (LWS_WITH_CONMON) list(APPEND SOURCES core-net/client/conmon.c ) endif() endif() if (LWS_WITH_SOCKS5 AND NOT LWS_WITHOUT_CLIENT) list(APPEND SOURCES core-net/socks5-client.c) endif() exports_to_parent_scope() libwebsockets-4.3.5/lib/core-net/README.md000066400000000000000000000054001476025525100201320ustar00rootroot00000000000000# Implementation background ## Client connection Queueing By default lws treats each client connection as completely separate, and each is made from scratch with its own network connection independently. If the user code sets the `LCCSCF_PIPELINE` bit on `info.ssl_connection` when creating the client connection though, lws attempts to optimize multiple client connections to the same place by sharing any existing connection and its tls tunnel where possible. There are two basic approaches, for h1 additional connections of the same type and endpoint basically queue on a leader and happen sequentially. For muxed protocols like h2, they may also queue if the initial connection is not up yet, but subsequently the will all join the existing connection simultaneously "broadside". ## h1 queueing The initial wsi to start the network connection becomes the "leader" that subsequent connection attempts will queue against. Each vhost has a dll2_owner `wsi->dll_cli_active_conns_owner` that "leaders" who are actually making network connections themselves can register on as "active client connections". Other client wsi being created who find there is already a leader on the active client connection list for the vhost, can join their dll2 wsi->dll2_cli_txn_queue to the leader's wsi->dll2_cli_txn_queue_owner to "queue" on the leader. The user code does not know which wsi was first or is queued, it just waits for stuff to happen the same either way. When the "leader" wsi connects, it performs its client transaction as normal, and at the end arrives at `lws_http_transaction_completed_client()`. Here, it calls through to the lws_mux `_lws_generic_transaction_completed_active_conn()` helper. This helper sees if anything else is queued, and if so, migrates assets like the SSL *, the socket fd, and any remaining queue from the original leader to the head of the list, which replaces the old leader as the "active client connection" any subsequent connects would queue on. It has to be done this way so that user code which may know each client wsi by its wsi, or have marked it with an opaque_user_data pointer, is getting its specific request handled by the wsi it expects it to be handled by. A side effect of this, and in order to be able to handle POSTs cleanly, lws does not attempt to send the headers for the next queued child before the previous child has finished. The process of moving the SSL context and fd etc between the queued wsi continues until the queue is all handled. ## muxed protocol queueing and stream binding h2 connections act the same as h1 before the initial connection has been made, but once it is made all the queued connections join the network connection as child mux streams immediately, "broadside", binding the stream to the existing network connection. libwebsockets-4.3.5/lib/core-net/adopt.c000066400000000000000000000605221476025525100201340ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" static int lws_get_idlest_tsi(struct lws_context *context) { unsigned int lowest = ~0u; int n = 0, hit = -1; for (; n < context->count_threads; n++) { lwsl_cx_debug(context, "%d %d\n", context->pt[n].fds_count, context->fd_limit_per_thread - 1); if ((unsigned int)context->pt[n].fds_count != context->fd_limit_per_thread - 1 && (unsigned int)context->pt[n].fds_count < lowest) { lowest = context->pt[n].fds_count; hit = n; } } return hit; } struct lws * lws_create_new_server_wsi(struct lws_vhost *vhost, int fixed_tsi, const char *desc) { struct lws *new_wsi; int n = fixed_tsi; if (n < 0) n = lws_get_idlest_tsi(vhost->context); if (n < 0) { lwsl_vhost_err(vhost, "no space for new conn"); return NULL; } lws_context_lock(vhost->context, __func__); new_wsi = __lws_wsi_create_with_role(vhost->context, n, NULL, vhost->lc.log_cx); lws_context_unlock(vhost->context); if (new_wsi == NULL) { lwsl_vhost_err(vhost, "OOM"); return NULL; } lws_wsi_fault_timedclose(new_wsi); __lws_lc_tag(vhost->context, &vhost->context->lcg[ #if defined(LWS_ROLE_H2) || defined(LWS_ROLE_MQTT) strcmp(desc, "adopted") ? LWSLCG_WSI_MUX : #endif LWSLCG_WSI_SERVER], &new_wsi->lc, desc); new_wsi->wsistate |= LWSIFR_SERVER; new_wsi->tsi = (char)n; lwsl_wsi_debug(new_wsi, "joining vh %s, tsi %d", vhost->name, new_wsi->tsi); lws_vhost_bind_wsi(vhost, new_wsi); new_wsi->rxflow_change_to = LWS_RXFLOW_ALLOW; new_wsi->retry_policy = vhost->retry_policy; /* initialize the instance struct */ lwsi_set_state(new_wsi, LRS_UNCONNECTED); new_wsi->hdr_parsing_completed = 0; #ifdef LWS_WITH_TLS new_wsi->tls.use_ssl = LWS_SSL_ENABLED(vhost); #endif /* * these can only be set once the protocol is known * we set an un-established connection's protocol pointer * to the start of the supported list, so it can look * for matching ones during the handshake */ new_wsi->a.protocol = vhost->protocols; new_wsi->user_space = NULL; /* * outermost create notification for wsi * no user_space because no protocol selection */ vhost->protocols[0].callback(new_wsi, LWS_CALLBACK_WSI_CREATE, NULL, NULL, 0); return new_wsi; } /* if not a socket, it's a raw, non-ssl file descriptor * req cx lock, acq pt lock, acq vh lock */ static struct lws * __lws_adopt_descriptor_vhost1(struct lws_vhost *vh, lws_adoption_type type, const char *vh_prot_name, struct lws *parent, void *opaque, const char *fi_wsi_name) { struct lws_context *context; struct lws_context_per_thread *pt; struct lws *new_wsi; int n; /* * Notice that in SMP case, the wsi may be being created on an * entirely different pt / tsi for load balancing. In that case as * we initialize it, it may become "live" concurrently unexpectedly... */ if (!vh) return NULL; context = vh->context; lws_context_assert_lock_held(vh->context); n = -1; if (parent) n = parent->tsi; new_wsi = lws_create_new_server_wsi(vh, n, "adopted"); if (!new_wsi) return NULL; /* bring in specific fault injection rules early */ lws_fi_inherit_copy(&new_wsi->fic, &context->fic, "wsi", fi_wsi_name); if (lws_fi(&new_wsi->fic, "createfail")) { lws_fi_destroy(&new_wsi->fic); return NULL; } new_wsi->a.opaque_user_data = opaque; pt = &context->pt[(int)new_wsi->tsi]; lws_pt_lock(pt, __func__); if (parent) { new_wsi->parent = parent; new_wsi->sibling_list = parent->child_list; parent->child_list = new_wsi; } if (vh_prot_name) { new_wsi->a.protocol = lws_vhost_name_to_protocol(new_wsi->a.vhost, vh_prot_name); if (!new_wsi->a.protocol) { lwsl_vhost_err(new_wsi->a.vhost, "Protocol %s not enabled", vh_prot_name); goto bail; } if (lws_ensure_user_space(new_wsi)) { lwsl_wsi_notice(new_wsi, "OOM"); goto bail; } } if (!LWS_SSL_ENABLED(new_wsi->a.vhost) || !(type & LWS_ADOPT_SOCKET)) type &= (unsigned int)~LWS_ADOPT_ALLOW_SSL; if (lws_role_call_adoption_bind(new_wsi, (int)type, vh_prot_name)) { lwsl_wsi_err(new_wsi, "no role for desc type 0x%x", type); goto bail; } #if defined(LWS_WITH_SERVER) if (new_wsi->role_ops) { lws_metrics_tag_wsi_add(new_wsi, "role", new_wsi->role_ops->name); } #endif lws_pt_unlock(pt); /* * he's an allocated wsi, but he's not on any fds list or child list, * join him to the vhost's list of these kinds of incomplete wsi until * he gets another identity (he may do async dns now...) */ lws_vhost_lock(new_wsi->a.vhost); lws_dll2_add_head(&new_wsi->vh_awaiting_socket, &new_wsi->a.vhost->vh_awaiting_socket_owner); lws_vhost_unlock(new_wsi->a.vhost); return new_wsi; bail: lwsl_wsi_notice(new_wsi, "exiting on bail"); if (parent) parent->child_list = new_wsi->sibling_list; if (new_wsi->user_space) lws_free(new_wsi->user_space); lws_fi_destroy(&new_wsi->fic); lws_pt_unlock(pt); __lws_vhost_unbind_wsi(new_wsi); /* req cx, acq vh lock */ lws_free(new_wsi); return NULL; } #if defined(LWS_WITH_SERVER) && defined(LWS_WITH_SECURE_STREAMS) /* * If the incoming wsi is bound to a vhost that is a ss server, this creates * an accepted ss bound to the wsi. * * For h1 or raw, we can do the binding here, but for muxed protocols like h2 * or mqtt we have to do it not on the nwsi but on the stream. And for h2 we * start off bound to h1 role, since we don't know if we will upgrade to h2 * until we meet the server. * * 1) No tls is assumed to mean no muxed protocol so can do it at adopt. * * 2) After alpn if not muxed we can do it. * * 3) For muxed, do it at the nwsi migration and on new stream */ int lws_adopt_ss_server_accept(struct lws *new_wsi) { struct lws_context_per_thread *pt = &new_wsi->a.context->pt[(int)new_wsi->tsi]; lws_ss_handle_t *h; void *pv, **ppv; if (!new_wsi->a.vhost->ss_handle) return 0; pv = (char *)&new_wsi->a.vhost->ss_handle[1]; /* * Yes... the vhost is pointing to its secure stream representing the * server... we want to create an accepted SS and bind it to new_wsi, * the info/ssi from the server SS (so the SS callbacks defined there), * the opaque_user_data of the server object and the policy of it. */ ppv = (void **)((char *)pv + new_wsi->a.vhost->ss_handle->info.opaque_user_data_offset); /* * indicate we are an accepted connection referencing the * server object */ new_wsi->a.vhost->ss_handle->info.flags |= LWSSSINFLAGS_SERVER; if (lws_ss_create(new_wsi->a.context, new_wsi->tsi, &new_wsi->a.vhost->ss_handle->info, *ppv, &h, NULL, NULL)) { lwsl_wsi_err(new_wsi, "accept ss creation failed"); goto fail1; } /* * We made a fresh accepted SS conn from the server pieces, * now bind the wsi... the problem is, this is the nwsi if it's * h2. */ h->wsi = new_wsi; new_wsi->a.opaque_user_data = h; h->info.flags |= LWSSSINFLAGS_ACCEPTED; /* indicate wsi should invalidate any ss link to it on close */ new_wsi->for_ss = 1; // lwsl_wsi_notice(new_wsi, "%s: opaq %p, role %s", // new_wsi->a.opaque_user_data, // new_wsi->role_ops->name); h->policy = new_wsi->a.vhost->ss_handle->policy; /* apply requested socket options */ if (lws_plat_set_socket_options_ip(new_wsi->desc.sockfd, h->policy->priority, (LCCSCF_IP_LOW_LATENCY * !!(h->policy->flags & LWSSSPOLF_ATTR_LOW_LATENCY)) | (LCCSCF_IP_HIGH_THROUGHPUT * !!(h->policy->flags & LWSSSPOLF_ATTR_HIGH_THROUGHPUT)) | (LCCSCF_IP_HIGH_RELIABILITY * !!(h->policy->flags & LWSSSPOLF_ATTR_HIGH_RELIABILITY)) | (LCCSCF_IP_LOW_COST * !!(h->policy->flags & LWSSSPOLF_ATTR_LOW_COST)))) lwsl_wsi_warn(new_wsi, "unable to set ip options"); /* * add us to the list of clients that came in from the server */ lws_pt_lock(pt, __func__); lws_dll2_add_tail(&h->cli_list, &new_wsi->a.vhost->ss_handle->src_list); lws_pt_unlock(pt); /* * Let's give it appropriate state notifications */ if (lws_ss_event_helper(h, LWSSSCS_CREATING)) goto fail; if (lws_ss_event_helper(h, LWSSSCS_CONNECTING)) goto fail; /* defer CONNECTED until we see if he is upgrading */ // if (lws_ss_event_helper(h, LWSSSCS_CONNECTED)) // goto fail; // lwsl_notice("%s: accepted ss complete, pcol %s\n", __func__, // new_wsi->a.protocol->name); return 0; fail: lws_ss_destroy(&h); fail1: return 1; } #endif static struct lws * lws_adopt_descriptor_vhost2(struct lws *new_wsi, lws_adoption_type type, lws_sock_file_fd_type fd) { struct lws_context_per_thread *pt = &new_wsi->a.context->pt[(int)new_wsi->tsi]; int n; /* enforce that every fd is nonblocking */ if (type & LWS_ADOPT_SOCKET) { if (lws_plat_set_nonblocking(fd.sockfd)) { lwsl_wsi_err(new_wsi, "unable to set sockfd %d nonblocking", fd.sockfd); goto fail; } } #if !defined(WIN32) else if (lws_plat_set_nonblocking(fd.filefd)) { lwsl_wsi_err(new_wsi, "unable to set filefd nonblocking"); goto fail; } #endif new_wsi->desc = fd; if (!LWS_SSL_ENABLED(new_wsi->a.vhost) || !(type & LWS_ADOPT_SOCKET)) type &= (unsigned int)~LWS_ADOPT_ALLOW_SSL; /* * A new connection was accepted. Give the user a chance to * set properties of the newly created wsi. There's no protocol * selected yet so we issue this to the vhosts's default protocol, * itself by default protocols[0] */ new_wsi->wsistate |= LWSIFR_SERVER; n = LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED; if (new_wsi->role_ops->adoption_cb[lwsi_role_server(new_wsi)]) n = new_wsi->role_ops->adoption_cb[lwsi_role_server(new_wsi)]; if (new_wsi->a.context->event_loop_ops->sock_accept) if (new_wsi->a.context->event_loop_ops->sock_accept(new_wsi)) goto fail; #if LWS_MAX_SMP > 1 /* * Caution: after this point the wsi is live on its service thread * which may be concurrent to this. We mark the wsi as still undergoing * init in another pt so the assigned pt leaves it alone. */ new_wsi->undergoing_init_from_other_pt = 1; #endif if (!(type & LWS_ADOPT_ALLOW_SSL)) { lws_pt_lock(pt, __func__); if (__insert_wsi_socket_into_fds(new_wsi->a.context, new_wsi)) { lws_pt_unlock(pt); lwsl_wsi_err(new_wsi, "fail inserting socket"); goto fail; } lws_pt_unlock(pt); } #if defined(LWS_WITH_SERVER) else if (lws_server_socket_service_ssl(new_wsi, fd.sockfd, 0)) { lwsl_wsi_info(new_wsi, "fail ssl negotiation"); goto fail; } #endif lws_vhost_lock(new_wsi->a.vhost); /* he has fds visibility now, remove from vhost orphan list */ lws_dll2_remove(&new_wsi->vh_awaiting_socket); lws_vhost_unlock(new_wsi->a.vhost); /* * by deferring callback to this point, after insertion to fds, * lws_callback_on_writable() can work from the callback */ if ((new_wsi->a.protocol->callback)(new_wsi, (enum lws_callback_reasons)n, new_wsi->user_space, NULL, 0)) goto fail; /* role may need to do something after all adoption completed */ lws_role_call_adoption_bind(new_wsi, (int)type | _LWS_ADOPT_FINISH, new_wsi->a.protocol->name); #if defined(LWS_WITH_SERVER) && defined(LWS_WITH_SECURE_STREAMS) /* * Did we come from an accepted client connection to a ss server? * * !!! For mux protocols, this will cause an additional inactive ss * representing the nwsi. Doing that allows us to support both h1 * (here) and h2 (at __lws_wsi_server_new()) */ lwsl_wsi_info(new_wsi, "vhost %s", new_wsi->a.vhost->lc.gutag); if (lws_adopt_ss_server_accept(new_wsi)) goto fail; #endif #if LWS_MAX_SMP > 1 /* its actual pt can service it now */ new_wsi->undergoing_init_from_other_pt = 0; #endif lws_cancel_service_pt(new_wsi); return new_wsi; fail: if (type & LWS_ADOPT_SOCKET) lws_close_free_wsi(new_wsi, LWS_CLOSE_STATUS_NOSTATUS, "adopt skt fail"); return NULL; } /* if not a socket, it's a raw, non-ssl file descriptor */ struct lws * lws_adopt_descriptor_vhost(struct lws_vhost *vh, lws_adoption_type type, lws_sock_file_fd_type fd, const char *vh_prot_name, struct lws *parent) { lws_adopt_desc_t info; memset(&info, 0, sizeof(info)); info.vh = vh; info.type = type; info.fd = fd; info.vh_prot_name = vh_prot_name; info.parent = parent; return lws_adopt_descriptor_vhost_via_info(&info); } struct lws * lws_adopt_descriptor_vhost_via_info(const lws_adopt_desc_t *info) { socklen_t slen = sizeof(lws_sockaddr46); struct lws *new_wsi; #if defined(LWS_WITH_PEER_LIMITS) struct lws_peer *peer = NULL; if (info->type & LWS_ADOPT_SOCKET) { peer = lws_get_or_create_peer(info->vh, info->fd.sockfd); if (peer && info->vh->context->ip_limit_wsi && peer->count_wsi >= info->vh->context->ip_limit_wsi) { lwsl_info("Peer reached wsi limit %d\n", info->vh->context->ip_limit_wsi); if (info->vh->context->pl_notify_cb) info->vh->context->pl_notify_cb( info->vh->context, info->fd.sockfd, &peer->sa46); compatible_close(info->fd.sockfd); return NULL; } } #endif lws_context_lock(info->vh->context, __func__); new_wsi = __lws_adopt_descriptor_vhost1(info->vh, info->type, info->vh_prot_name, info->parent, info->opaque, info->fi_wsi_name); if (!new_wsi) { if (info->type & LWS_ADOPT_SOCKET) compatible_close(info->fd.sockfd); goto bail; } if (info->type & LWS_ADOPT_SOCKET && getpeername(info->fd.sockfd, (struct sockaddr *)&new_wsi->sa46_peer, &slen) < 0) lwsl_info("%s: getpeername failed\n", __func__); #if defined(LWS_WITH_PEER_LIMITS) if (peer) lws_peer_add_wsi(info->vh->context, peer, new_wsi); #endif new_wsi = lws_adopt_descriptor_vhost2(new_wsi, info->type, info->fd); bail: lws_context_unlock(info->vh->context); return new_wsi; } struct lws * lws_adopt_socket_vhost(struct lws_vhost *vh, lws_sockfd_type accept_fd) { lws_sock_file_fd_type fd; fd.sockfd = accept_fd; return lws_adopt_descriptor_vhost(vh, LWS_ADOPT_SOCKET | LWS_ADOPT_HTTP | LWS_ADOPT_ALLOW_SSL, fd, NULL, NULL); } struct lws * lws_adopt_socket(struct lws_context *context, lws_sockfd_type accept_fd) { return lws_adopt_socket_vhost(context->vhost_list, accept_fd); } /* Common read-buffer adoption for lws_adopt_*_readbuf */ static struct lws* adopt_socket_readbuf(struct lws *wsi, const char *readbuf, size_t len) { struct lws_context_per_thread *pt; struct lws_pollfd *pfd; int n; if (!wsi) return NULL; if (!readbuf || len == 0) return wsi; if (wsi->position_in_fds_table == LWS_NO_FDS_POS) return wsi; pt = &wsi->a.context->pt[(int)wsi->tsi]; n = lws_buflist_append_segment(&wsi->buflist, (const uint8_t *)readbuf, len); if (n < 0) goto bail; if (n) lws_dll2_add_head(&wsi->dll_buflist, &pt->dll_buflist_owner); /* * we can't process the initial read data until we can attach an ah. * * if one is available, get it and place the data in his ah rxbuf... * wsi with ah that have pending rxbuf get auto-POLLIN service. * * no autoservice because we didn't get a chance to attach the * readbuf data to wsi or ah yet, and we will do it next if we get * the ah. */ if (wsi->http.ah || !lws_header_table_attach(wsi, 0)) { lwsl_notice("%s: calling service on readbuf ah\n", __func__); /* * unlike a normal connect, we have the headers already * (or the first part of them anyway). * libuv won't come back and service us without a network * event, so we need to do the header service right here. */ pfd = &pt->fds[wsi->position_in_fds_table]; pfd->revents |= LWS_POLLIN; lwsl_err("%s: calling service\n", __func__); if (lws_service_fd_tsi(wsi->a.context, pfd, wsi->tsi)) /* service closed us */ return NULL; return wsi; } lwsl_err("%s: deferring handling ah\n", __func__); return wsi; bail: lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "adopt skt readbuf fail"); return NULL; } #if defined(LWS_WITH_UDP) #if defined(LWS_WITH_CLIENT) /* * This is the ASYNC_DNS callback target for udp client, it's analogous to * connect3() */ static struct lws * lws_create_adopt_udp2(struct lws *wsi, const char *ads, const struct addrinfo *r, int n, void *opaque) { lws_sock_file_fd_type sock; int bc = 1, m; assert(wsi); if (ads && (n < 0 || !r)) { /* * DNS lookup failed: there are no usable results. Fail the * overall connection request. */ lwsl_notice("%s: bad: n %d, r %p\n", __func__, n, r); goto bail; } m = lws_sort_dns(wsi, r); #if defined(LWS_WITH_SYS_ASYNC_DNS) lws_async_dns_freeaddrinfo(&r); #else freeaddrinfo((struct addrinfo *)r); #endif if (m) goto bail; while (lws_dll2_get_head(&wsi->dns_sorted_list)) { lws_dns_sort_t *s = lws_container_of( lws_dll2_get_head(&wsi->dns_sorted_list), lws_dns_sort_t, list); /* * Remove it from the head, but don't free it yet... we are * taking responsibility to free it */ lws_dll2_remove(&s->list); /* * We have done the dns lookup, identify the result we want * if any, and then complete the adoption by binding wsi to * socket opened on it. * * Ignore the weak assumptions about protocol driven by port * number and force to DGRAM / UDP since that's what this * function is for. */ #if !defined(__linux__) sock.sockfd = socket(s->dest.sa4.sin_family, SOCK_DGRAM, IPPROTO_UDP); #else /* PF_PACKET is linux-only */ sock.sockfd = socket(wsi->pf_packet ? PF_PACKET : s->dest.sa4.sin_family, SOCK_DGRAM, wsi->pf_packet ? htons(0x800) : IPPROTO_UDP); #endif if (sock.sockfd == LWS_SOCK_INVALID) goto resume; /* ipv6 udp!!! */ if (s->af == AF_INET) s->dest.sa4.sin_port = htons(wsi->c_port); #if defined(LWS_WITH_IPV6) else s->dest.sa6.sin6_port = htons(wsi->c_port); #endif if (setsockopt(sock.sockfd, SOL_SOCKET, SO_REUSEADDR, (const char *)&bc, sizeof(bc)) < 0) lwsl_err("%s: failed to set reuse\n", __func__); if (wsi->do_broadcast && setsockopt(sock.sockfd, SOL_SOCKET, SO_BROADCAST, (const char *)&bc, sizeof(bc)) < 0) lwsl_err("%s: failed to set broadcast\n", __func__); /* Bind the udp socket to a particular network interface */ if (opaque && lws_plat_BINDTODEVICE(sock.sockfd, (const char *)opaque)) goto resume; if (wsi->do_bind && bind(sock.sockfd, sa46_sockaddr(&s->dest), #if defined(_WIN32) (int)sa46_socklen(&s->dest) #else sizeof(struct sockaddr) #endif ) == -1) { lwsl_err("%s: bind failed\n", __func__); goto resume; } if (!wsi->do_bind && !wsi->pf_packet) { #if !defined(__APPLE__) if (connect(sock.sockfd, sa46_sockaddr(&s->dest), sa46_socklen(&s->dest)) == -1 && errno != EADDRNOTAVAIL /* openbsd */ ) { lwsl_err("%s: conn fd %d fam %d %s:%u failed " "errno %d\n", __func__, sock.sockfd, s->dest.sa4.sin_family, ads ? ads : "null", wsi->c_port, LWS_ERRNO); compatible_close(sock.sockfd); goto resume; } #endif } if (wsi->udp) wsi->udp->sa46 = s->dest; wsi->sa46_peer = s->dest; /* we connected: complete the udp socket adoption flow */ #if defined(LWS_WITH_SYS_ASYNC_DNS) if (wsi->a.context->async_dns.wsi == wsi) wsi->a.context->async_dns.dns_server_connected = 1; #endif lws_free(s); lws_addrinfo_clean(wsi); return lws_adopt_descriptor_vhost2(wsi, LWS_ADOPT_RAW_SOCKET_UDP, sock); resume: lws_free(s); } lwsl_err("%s: unable to create INET socket %d\n", __func__, LWS_ERRNO); lws_addrinfo_clean(wsi); #if defined(LWS_WITH_SYS_ASYNC_DNS) if (wsi->a.context->async_dns.wsi == wsi) lws_async_dns_drop_server(wsi->a.context); #endif bail: /* caller must close */ return NULL; } struct lws * lws_create_adopt_udp(struct lws_vhost *vhost, const char *ads, int port, int flags, const char *protocol_name, const char *ifname, struct lws *parent_wsi, void *opaque, const lws_retry_bo_t *retry_policy, const char *fi_wsi_name) { #if !defined(LWS_PLAT_OPTEE) struct lws *wsi; int n; lwsl_info("%s: %s:%u\n", __func__, ads ? ads : "null", port); /* create the logical wsi without any valid fd */ lws_context_lock(vhost->context, __func__); wsi = __lws_adopt_descriptor_vhost1(vhost, LWS_ADOPT_SOCKET | LWS_ADOPT_RAW_SOCKET_UDP, protocol_name, parent_wsi, opaque, fi_wsi_name); lws_context_unlock(vhost->context); if (!wsi) { lwsl_err("%s: udp wsi creation failed\n", __func__); goto bail; } // lwsl_notice("%s: role %s\n", __func__, wsi->role_ops->name); wsi->do_bind = !!(flags & LWS_CAUDP_BIND); wsi->do_broadcast = !!(flags & LWS_CAUDP_BROADCAST); wsi->pf_packet = !!(flags & LWS_CAUDP_PF_PACKET); wsi->c_port = (uint16_t)(unsigned int)port; if (retry_policy) wsi->retry_policy = retry_policy; else wsi->retry_policy = vhost->retry_policy; #if !defined(LWS_WITH_SYS_ASYNC_DNS) { struct addrinfo *r, h; char buf[16]; memset(&h, 0, sizeof(h)); h.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ h.ai_socktype = SOCK_DGRAM; h.ai_protocol = IPPROTO_UDP; #if defined(AI_PASSIVE) h.ai_flags = AI_PASSIVE; #endif #ifdef AI_ADDRCONFIG h.ai_flags |= AI_ADDRCONFIG; #endif /* if the dns lookup is synchronous, do the whole thing now */ lws_snprintf(buf, sizeof(buf), "%u", port); n = getaddrinfo(ads, buf, &h, &r); if (n) { #if (_LWS_ENABLED_LOGS & LLL_INFO) #if !defined(LWS_PLAT_FREERTOS) lwsl_info("%s: getaddrinfo error: %s\n", __func__, gai_strerror(n)); #else lwsl_info("%s: getaddrinfo error: %s\n", __func__, strerror(n)); #endif #endif //freeaddrinfo(r); goto bail1; } /* * With synchronous dns, complete it immediately after the * blocking dns lookup finished... free r when connect either * completed or failed */ wsi = lws_create_adopt_udp2(wsi, ads, r, 0, NULL); return wsi; } #else if (ads) { /* * with async dns, use the wsi as the point about which to do * the dns lookup and have it call the second part when it's * done. * * Keep a refcount on the results and free it when we connected * or definitively failed. * * Notice wsi has no socket at this point (we don't know what * kind to ask for until we get the dns back). But it is bound * to a vhost and can be cleaned up from that at vhost destroy. */ n = lws_async_dns_query(vhost->context, 0, ads, LWS_ADNS_RECORD_A, lws_create_adopt_udp2, wsi, (void *)ifname); // lwsl_notice("%s: dns query returned %d\n", __func__, n); if (n == LADNS_RET_FAILED) { lwsl_err("%s: async dns failed\n", __func__); wsi = NULL; /* * It was already closed by calling callback with error * from lws_async_dns_query() */ goto bail; } } else { lwsl_debug("%s: udp adopt has no ads\n", __func__); wsi = lws_create_adopt_udp2(wsi, ads, NULL, 0, (void *)ifname); } /* dns lookup is happening asynchronously */ // lwsl_notice("%s: returning wsi %p\n", __func__, wsi); return wsi; #endif #if !defined(LWS_WITH_SYS_ASYNC_DNS) bail1: lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "adopt udp2 fail"); wsi = NULL; #endif bail: return wsi; #else return NULL; #endif } #endif #endif struct lws * lws_adopt_socket_readbuf(struct lws_context *context, lws_sockfd_type accept_fd, const char *readbuf, size_t len) { return adopt_socket_readbuf(lws_adopt_socket(context, accept_fd), readbuf, len); } struct lws * lws_adopt_socket_vhost_readbuf(struct lws_vhost *vhost, lws_sockfd_type accept_fd, const char *readbuf, size_t len) { return adopt_socket_readbuf(lws_adopt_socket_vhost(vhost, accept_fd), readbuf, len); } libwebsockets-4.3.5/lib/core-net/client/000077500000000000000000000000001476025525100201325ustar00rootroot00000000000000libwebsockets-4.3.5/lib/core-net/client/client.c000066400000000000000000000066171476025525100215660ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #if defined(LWS_CLIENT_HTTP_PROXYING) int lws_set_proxy(struct lws_vhost *vhost, const char *proxy) { char authstring[96]; int brackets = 0; char *p; if (!proxy) return -1; /* we have to deal with a possible redundant leading http:// */ if (!strncmp(proxy, "http://", 7)) proxy += 7; p = strrchr(proxy, '@'); if (p) { /* auth is around */ if (lws_ptr_diff_size_t(p, proxy) > sizeof(authstring) - 1) goto auth_too_long; lws_strncpy(authstring, proxy, lws_ptr_diff_size_t(p, proxy) + 1); // null termination not needed on input if (lws_b64_encode_string(authstring, lws_ptr_diff(p, proxy), vhost->proxy_basic_auth_token, sizeof vhost->proxy_basic_auth_token) < 0) goto auth_too_long; lwsl_vhost_info(vhost, " Proxy auth in use"); #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) proxy = p + 1; #endif } else vhost->proxy_basic_auth_token[0] = '\0'; #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) #if defined(LWS_WITH_IPV6) /* * isolating the address / port is complicated by IPv6 overloading * the meaning of : in the address. The convention to solve it is to * put [] around the ipv6 address part, eg, "[::1]:443". This must be * parsed to "::1" as the address and the port as 443. * * IPv4 addresses like myproxy:443 continue to be parsed as normal. */ if (proxy[0] == '[') brackets = 1; #endif lws_strncpy(vhost->http.http_proxy_address, proxy + brackets, sizeof(vhost->http.http_proxy_address)); p = vhost->http.http_proxy_address; #if defined(LWS_WITH_IPV6) if (brackets) { /* original is IPv6 format "[::1]:443" */ p = strchr(vhost->http.http_proxy_address, ']'); if (!p) { lwsl_vhost_err(vhost, "malformed proxy '%s'", proxy); return -1; } *p++ = '\0'; } #endif p = strchr(p, ':'); if (!p && !vhost->http.http_proxy_port) { lwsl_vhost_err(vhost, "http_proxy needs to be ads:port"); return -1; } if (p) { *p = '\0'; vhost->http.http_proxy_port = (unsigned int)atoi(p + 1); } lwsl_vhost_info(vhost, " Proxy %s:%u", vhost->http.http_proxy_address, vhost->http.http_proxy_port); #endif return 0; auth_too_long: lwsl_vhost_err(vhost, "proxy auth too long"); return -1; } #endif libwebsockets-4.3.5/lib/core-net/client/conmon.c000066400000000000000000000104121476025525100215650ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2019 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * Client Connection Latency and DNS reporting */ /* * We want to allocate copies for and append DNS results that we don't already * have. We take this approach because a) we may be getting duplicated results * from multiple DNS servers, and b) we may be getting results stacatto over * time. * * We capture DNS results from either getaddrinfo or ASYNC_DNS the same here, * before they are sorted and filtered. * * Because this is relatively expensive, we only do it on client wsi that * explicitly indicated that they want it with the LCCSCF_CONMON flag. */ #include int lws_conmon_append_copy_new_dns_results(struct lws *wsi, const struct addrinfo *cai) { if (!(wsi->flags & LCCSCF_CONMON)) return 0; /* * Let's go through the incoming guys, seeing if we already have them, * or if we want to take a copy */ while (cai) { struct addrinfo *ai = wsi->conmon.dns_results_copy; char skip = 0; /* do we already have this guy? */ while (ai) { if (ai->ai_family != cai->ai_family && ai->ai_addrlen != cai->ai_addrlen && ai->ai_protocol != cai->ai_protocol && ai->ai_socktype != cai->ai_socktype && /* either ipv4 or v6 address must match */ ((ai->ai_family == AF_INET && ((struct sockaddr_in *)ai->ai_addr)-> sin_addr.s_addr == ((struct sockaddr_in *)cai->ai_addr)-> sin_addr.s_addr) #if defined(LWS_WITH_IPV6) || (ai->ai_family == AF_INET6 && !memcmp(((struct sockaddr_in6 *)ai->ai_addr)-> sin6_addr.s6_addr, ((struct sockaddr_in6 *)cai->ai_addr)-> sin6_addr.s6_addr, 16)) #endif )) { /* yes, we already got a copy then */ skip = 1; break; } ai = ai->ai_next; } if (!skip) { /* * No we don't already have a copy of this one, let's * allocate and append it then */ size_t al = sizeof(struct addrinfo) + (size_t)cai->ai_addrlen; size_t cl = cai->ai_canonname ? strlen(cai->ai_canonname) + 1 : 0; ai = lws_malloc(al + cl + 1, __func__); if (!ai) { lwsl_wsi_warn(wsi, "OOM"); return 1; } *ai = *cai; ai->ai_addr = (struct sockaddr *)&ai[1]; memcpy(ai->ai_addr, cai->ai_addr, (size_t)cai->ai_addrlen); if (cl) { ai->ai_canonname = ((char *)ai->ai_addr) + cai->ai_addrlen; memcpy(ai->ai_canonname, cai->ai_canonname, cl + 1); } ai->ai_next = wsi->conmon.dns_results_copy; wsi->conmon.dns_results_copy = ai; } cai = cai->ai_next; } return 0; } void lws_conmon_addrinfo_destroy(struct addrinfo *ai) { while (ai) { struct addrinfo *ai1 = ai->ai_next; lws_free(ai); ai = ai1; } } void lws_conmon_wsi_take(struct lws *wsi, struct lws_conmon *dest) { memcpy(dest, &wsi->conmon, sizeof(*dest)); dest->peer46 = wsi->sa46_peer; /* wsi no longer has to free it... */ wsi->conmon.dns_results_copy = NULL; wsi->perf_done = 1; } void lws_conmon_release(struct lws_conmon *conmon) { if (!conmon) return; lws_conmon_addrinfo_destroy(conmon->dns_results_copy); conmon->dns_results_copy = NULL; } libwebsockets-4.3.5/lib/core-net/client/connect.c000066400000000000000000000344171476025525100217400ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" static const uint8_t hnames[] = { _WSI_TOKEN_CLIENT_PEER_ADDRESS, _WSI_TOKEN_CLIENT_URI, _WSI_TOKEN_CLIENT_HOST, _WSI_TOKEN_CLIENT_ORIGIN, _WSI_TOKEN_CLIENT_SENT_PROTOCOLS, _WSI_TOKEN_CLIENT_METHOD, _WSI_TOKEN_CLIENT_IFACE, _WSI_TOKEN_CLIENT_ALPN }; struct lws * lws_http_client_connect_via_info2(struct lws *wsi) { struct client_info_stash *stash = wsi->stash; int n; lwsl_wsi_debug(wsi, "stash %p", stash); if (!stash) return wsi; wsi->a.opaque_user_data = wsi->stash->opaque_user_data; if (stash->cis[CIS_METHOD] && (!strcmp(stash->cis[CIS_METHOD], "RAW") || !strcmp(stash->cis[CIS_METHOD], "MQTT"))) goto no_ah; /* * we're not necessarily in a position to action these right away, * stash them... we only need during connect phase so into a temp * allocated stash */ for (n = 0; n < (int)LWS_ARRAY_SIZE(hnames); n++) if (hnames[n] && stash->cis[n] && lws_hdr_simple_create(wsi, hnames[n], stash->cis[n])) goto bail; #if defined(LWS_WITH_SOCKS5) if (!wsi->a.vhost->socks_proxy_port) lws_free_set_NULL(wsi->stash); #endif no_ah: return lws_client_connect_2_dnsreq(wsi); bail: #if defined(LWS_WITH_SOCKS5) if (!wsi->a.vhost->socks_proxy_port) lws_free_set_NULL(wsi->stash); #endif lws_free_set_NULL(wsi->stash); return NULL; } int lws_client_stash_create(struct lws *wsi, const char **cisin) { size_t size; char *pc; int n; size = sizeof(*wsi->stash) + 1; /* * Let's overallocate the stash object with space for all the args * in one hit. */ for (n = 0; n < CIS_COUNT; n++) if (cisin[n]) size += strlen(cisin[n]) + 1; if (wsi->stash) lws_free_set_NULL(wsi->stash); wsi->stash = lws_malloc(size, "client stash"); if (!wsi->stash) return 1; /* all the pointers default to NULL, but no need to zero the args */ memset(wsi->stash, 0, sizeof(*wsi->stash)); pc = (char *)&wsi->stash[1]; for (n = 0; n < CIS_COUNT; n++) if (cisin[n]) { size_t mm; wsi->stash->cis[n] = pc; if (n == CIS_PATH && cisin[n][0] != '/') *pc++ = '/'; mm = strlen(cisin[n]) + 1; memcpy(pc, cisin[n], mm); pc += mm; } return 0; } struct lws * lws_client_connect_via_info(const struct lws_client_connect_info *i) { const char *local = i->protocol; struct lws *wsi, *safe = NULL; const struct lws_protocols *p; const char *cisin[CIS_COUNT]; struct lws_vhost *vh; int tsi; if (i->context->requested_stop_internal_loops) return NULL; if (!i->context->protocol_init_done) if (lws_protocol_init(i->context)) return NULL; /* * If we have .local_protocol_name, use it to select the local protocol * handler to bind to. Otherwise use .protocol if http[s]. */ if (i->local_protocol_name) local = i->local_protocol_name; lws_context_lock(i->context, __func__); /* * PHASE 1: if SMP, find out the tsi related to current service thread */ tsi = lws_pthread_self_to_tsi(i->context); assert(tsi >= 0); /* PHASE 2: create a bare wsi */ wsi = __lws_wsi_create_with_role(i->context, tsi, NULL, i->log_cx); lws_context_unlock(i->context); if (wsi == NULL) return NULL; vh = i->vhost; if (!vh) { #if defined(LWS_WITH_TLS_JIT_TRUST) if (lws_tls_jit_trust_vhost_bind(i->context, i->address, &vh)) #endif { vh = lws_get_vhost_by_name(i->context, "default"); if (!vh) { vh = i->context->vhost_list; if (!vh) { /* coverity */ lwsl_cx_err(i->context, "no vhost"); goto bail; } if (!strcmp(vh->name, "system")) vh = vh->vhost_next; } } } #if defined(LWS_WITH_SECURE_STREAMS) /* any of these imply we are a client wsi bound to an SS, which * implies our opaque user ptr is the ss (or sspc if PROXY_LINK) handle */ wsi->for_ss = !!(i->ssl_connection & (LCCSCF_SECSTREAM_CLIENT | LCCSCF_SECSTREAM_PROXY_LINK | LCCSCF_SECSTREAM_PROXY_ONWARD)); wsi->client_bound_sspc = !!(i->ssl_connection & LCCSCF_SECSTREAM_PROXY_LINK); /* so wsi close understands need to remove sspc ptr to wsi */ wsi->client_proxy_onward = !!(i->ssl_connection & LCCSCF_SECSTREAM_PROXY_ONWARD); #endif #if defined(LWS_WITH_SYS_FAULT_INJECTION) wsi->fic.name = "wsi"; if (i->fic.fi_owner.count) /* * This moves all the lws_fi_t from i->fi to the vhost fi, * leaving it empty */ lws_fi_import(&wsi->fic, &i->fic); lws_fi_inherit_copy(&wsi->fic, &i->context->fic, "wsi", i->fi_wsi_name); if (lws_fi(&wsi->fic, "createfail")) goto bail; #if defined(LWS_WITH_SECURE_STREAMS) #if defined(LWS_WITH_SECURE_STREAMS_PROXY_API) if (wsi->client_bound_sspc) { lws_sspc_handle_t *fih = (lws_sspc_handle_t *)i->opaque_user_data; lws_fi_inherit_copy(&wsi->fic, &fih->fic, "wsi", NULL); } #endif if (wsi->for_ss) { lws_ss_handle_t *fih = (lws_ss_handle_t *)i->opaque_user_data; lws_fi_inherit_copy(&wsi->fic, &fih->fic, "wsi", NULL); } #endif #endif lws_wsi_fault_timedclose(wsi); /* * Until we exit, we can report connection failure directly to the * caller without needing to call through to protocol CONNECTION_ERROR. */ wsi->client_suppress_CONNECTION_ERROR = 1; if (i->keep_warm_secs) wsi->keep_warm_secs = i->keep_warm_secs; else wsi->keep_warm_secs = 5; wsi->seq = i->seq; wsi->flags = i->ssl_connection; wsi->c_pri = i->priority; if (i->retry_and_idle_policy) wsi->retry_policy = i->retry_and_idle_policy; else wsi->retry_policy = &i->context->default_retry; if (i->ssl_connection & LCCSCF_WAKE_SUSPEND__VALIDITY) wsi->conn_validity_wakesuspend = 1; lws_vhost_bind_wsi(vh, wsi); #if defined(LWS_WITH_SYS_FAULT_INJECTION) /* additionally inerit from vhost we bound to */ lws_fi_inherit_copy(&wsi->fic, &vh->fic, "wsi", i->fi_wsi_name); #endif if (!wsi->a.vhost) { lwsl_wsi_err(wsi, "No vhost in the context"); goto bail; } /* * PHASE 3: Choose an initial role for the wsi and do role-specific init * * Note the initial role may not reflect the final role, eg, * we may want ws, but first we have to go through h1 to get that */ if (lws_role_call_client_bind(wsi, i) < 0) { lwsl_wsi_err(wsi, "unable to bind to role"); goto bail; } lwsl_wsi_info(wsi, "role binding to %s", wsi->role_ops->name); /* * PHASE 4: fill up the wsi with stuff from the connect_info as far as * it can go. It's uncertain because not only is our connection * going to complete asynchronously, we might have bound to h1 and not * even be able to get ahold of an ah immediately. */ wsi->user_space = NULL; wsi->pending_timeout = NO_PENDING_TIMEOUT; wsi->position_in_fds_table = LWS_NO_FDS_POS; wsi->ocport = wsi->c_port = (uint16_t)(unsigned int)i->port; wsi->sys_tls_client_cert = i->sys_tls_client_cert; #if defined(LWS_ROLE_H2) wsi->txc.manual_initial_tx_credit = (int32_t)i->manual_initial_tx_credit; #endif wsi->a.protocol = &wsi->a.vhost->protocols[0]; wsi->client_pipeline = !!(i->ssl_connection & LCCSCF_PIPELINE); wsi->client_no_follow_redirect = !!(i->ssl_connection & LCCSCF_HTTP_NO_FOLLOW_REDIRECT); /* * PHASE 5: handle external user_space now, generic alloc is done in * role finalization */ if (i->userdata) { wsi->user_space_externally_allocated = 1; wsi->user_space = i->userdata; } if (local) { lwsl_wsi_info(wsi, "vh %s protocol binding to %s\n", wsi->a.vhost->name, local); p = lws_vhost_name_to_protocol(wsi->a.vhost, local); if (p) lws_bind_protocol(wsi, p, __func__); else lwsl_wsi_info(wsi, "unknown protocol %s", local); lwsl_wsi_info(wsi, "%s: %s %s entry", lws_wsi_tag(wsi), wsi->role_ops->name, wsi->a.protocol ? wsi->a.protocol->name : "none"); } /* * PHASE 5: handle external user_space now, generic alloc is done in * role finalization */ if (!wsi->user_space && i->userdata) { wsi->user_space_externally_allocated = 1; wsi->user_space = i->userdata; } #if defined(LWS_WITH_TLS) wsi->tls.use_ssl = (unsigned int)i->ssl_connection; #else if (i->ssl_connection & LCCSCF_USE_SSL) { lwsl_wsi_err(wsi, "lws not configured for tls"); goto bail; } #endif /* * PHASE 6: stash the things from connect_info that we can't process * right now, eg, if http binding, without an ah. If h1 and no ah, we * will go on the ah waiting list and process those things later (after * the connect_info and maybe the things pointed to have gone out of * scope) * * However these things are stashed in a generic way at this point, * with no relationship to http or ah */ cisin[CIS_ADDRESS] = i->address; cisin[CIS_PATH] = i->path; cisin[CIS_HOST] = i->host; cisin[CIS_ORIGIN] = i->origin; cisin[CIS_PROTOCOL] = i->protocol; cisin[CIS_METHOD] = i->method; cisin[CIS_IFACE] = i->iface; cisin[CIS_ALPN] = i->alpn; if (lws_client_stash_create(wsi, cisin)) goto bail; #if defined(LWS_WITH_TLS) if (i->alpn) lws_strncpy(wsi->alpn, i->alpn, sizeof(wsi->alpn)); #endif wsi->a.opaque_user_data = wsi->stash->opaque_user_data = i->opaque_user_data; #if defined(LWS_WITH_SECURE_STREAMS) if (wsi->for_ss) { /* it's related to ss... the options are * * LCCSCF_SECSTREAM_PROXY_LINK : client SSPC link to proxy * LCCSCF_SECSTREAM_PROXY_ONWARD: proxy's onward connection */ __lws_lc_tag(i->context, &i->context->lcg[ #if defined(LWS_WITH_SECURE_STREAMS_PROXY_API) i->ssl_connection & LCCSCF_SECSTREAM_PROXY_LINK ? LWSLCG_WSI_SSP_CLIENT : #if defined(LWS_WITH_SERVER) (i->ssl_connection & LCCSCF_SECSTREAM_PROXY_ONWARD ? LWSLCG_WSI_SSP_ONWARD : #endif LWSLCG_WSI_CLIENT #if defined(LWS_WITH_SERVER) ) #endif ], #else LWSLCG_WSI_CLIENT], #endif &wsi->lc, "%s/%s/%s/(%s)", i->method ? i->method : "WS", wsi->role_ops->name, i->address, #if defined(LWS_WITH_SECURE_STREAMS_PROXY_API) wsi->client_bound_sspc ? lws_sspc_tag((lws_sspc_handle_t *)i->opaque_user_data) : #endif lws_ss_tag(((lws_ss_handle_t *)i->opaque_user_data))); } else #endif __lws_lc_tag(i->context, &i->context->lcg[LWSLCG_WSI_CLIENT], &wsi->lc, "%s/%s/%s/%s", i->method ? i->method : "WS", wsi->role_ops->name ? wsi->role_ops->name : "novh", vh->name, i->address); lws_metrics_tag_wsi_add(wsi, "vh", wsi->a.vhost->name); /* * at this point user callbacks like * LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER will be interested to * know the parent... eg for proxying we can grab extra headers from * the parent's incoming ah and add them to the child client handshake */ if (i->parent_wsi) { lwsl_wsi_info(wsi, "created as child %s", lws_wsi_tag(i->parent_wsi)); wsi->parent = i->parent_wsi; safe = wsi->sibling_list = i->parent_wsi->child_list; i->parent_wsi->child_list = wsi; } /* * PHASE 7: Do any role-specific finalization processing. We can still * see important info things via wsi->stash */ if (lws_rops_fidx(wsi->role_ops, LWS_ROPS_client_bind)) { int n = lws_rops_func_fidx(wsi->role_ops, LWS_ROPS_client_bind). client_bind(wsi, NULL); if (n && i->parent_wsi) /* unpick from parent */ i->parent_wsi->child_list = safe; if (n < 0) /* we didn't survive, wsi is freed */ goto bail2; if (n) /* something else failed, wsi needs freeing */ goto bail; } /* let the caller's optional wsi storage have the wsi we created */ if (i->pwsi) *i->pwsi = wsi; if (!wsi->a.protocol) /* we must have one protocol or another bound by this point */ goto bail; /* PHASE 8: notify protocol with role-specific connected callback */ /* raw socket per se doesn't want this... raw socket proxy wants it... */ if (wsi->role_ops != &role_ops_raw_skt || (i->local_protocol_name && !strcmp(i->local_protocol_name, "raw-proxy"))) { lwsl_wsi_debug(wsi, "adoption cb %d to %s %s", wsi->role_ops->adoption_cb[0], wsi->role_ops->name, wsi->a.protocol->name); wsi->a.protocol->callback(wsi, wsi->role_ops->adoption_cb[0], wsi->user_space, NULL, 0); } #if defined(LWS_WITH_HUBBUB) if (i->uri_replace_to) wsi->http.rw = lws_rewrite_create(wsi, html_parser_cb, i->uri_replace_from, i->uri_replace_to); #endif if (i->method && (!strcmp(i->method, "RAW") // || // !strcmp(i->method, "MQTT") )) { /* * Not for MQTT here, since we don't know if we will * pipeline it or not... */ #if defined(LWS_WITH_TLS) wsi->tls.ssl = NULL; if (wsi->tls.use_ssl & LCCSCF_USE_SSL) { const char *cce = NULL; switch ( #if !defined(LWS_WITH_SYS_ASYNC_DNS) lws_client_create_tls(wsi, &cce, 1) #else lws_client_create_tls(wsi, &cce, 0) #endif ) { case 1: return wsi; case 0: break; default: goto bail3; } } #endif /* fallthru */ wsi = lws_http_client_connect_via_info2(wsi); } if (wsi) /* * If it subsequently fails, report CONNECTION_ERROR, * because we're going to return a non-error return now. */ wsi->client_suppress_CONNECTION_ERROR = 0; return wsi; #if defined(LWS_WITH_TLS) bail3: lwsl_wsi_info(wsi, "tls start fail"); lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "tls start fail"); if (i->pwsi) *i->pwsi = NULL; return NULL; #endif bail: #if defined(LWS_WITH_TLS) if (wsi->tls.ssl) lws_tls_restrict_return(wsi); #endif lws_free_set_NULL(wsi->stash); lws_fi_destroy(&wsi->fic); lws_free(wsi); #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) bail2: #endif if (i->pwsi) *i->pwsi = NULL; return NULL; } libwebsockets-4.3.5/lib/core-net/client/connect2.c000066400000000000000000000235371476025525100220230ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #if !defined(WIN32) #include #endif #if !defined(LWS_WITH_SYS_ASYNC_DNS) static int lws_getaddrinfo46(struct lws *wsi, const char *ads, struct addrinfo **result) { lws_metrics_caliper_declare(cal, wsi->a.context->mt_conn_dns); struct addrinfo hints; #if defined(LWS_WITH_SYS_METRICS) char buckname[32]; #endif int n; memset(&hints, 0, sizeof(hints)); *result = NULL; hints.ai_socktype = SOCK_STREAM; #ifdef LWS_WITH_IPV6 if (wsi->ipv6) { #if !defined(__ANDROID__) hints.ai_family = AF_UNSPEC; #if !defined(__OpenBSD__) && !defined(__OPENBSD) hints.ai_flags = AI_V4MAPPED; #endif #endif } else #endif { hints.ai_family = PF_UNSPEC; } #if defined(LWS_WITH_CONMON) wsi->conmon_datum = lws_now_usecs(); #endif wsi->dns_reachability = 0; if (lws_fi(&wsi->fic, "dnsfail")) n = EAI_FAIL; else n = getaddrinfo(ads, NULL, &hints, result); #if defined(LWS_WITH_CONMON) wsi->conmon.ciu_dns = (lws_conmon_interval_us_t) (lws_now_usecs() - wsi->conmon_datum); #endif /* * Which EAI_* are available and the meanings are highly platform- * dependent, even different linux distros differ. */ if (0 #if defined(EAI_SYSTEM) || n == EAI_SYSTEM #endif #if defined(EAI_NODATA) || n == EAI_NODATA #endif #if defined(EAI_FAIL) || n == EAI_FAIL #endif #if defined(EAI_AGAIN) || n == EAI_AGAIN #endif ) { wsi->dns_reachability = 1; lws_metrics_caliper_report(cal, METRES_NOGO); #if defined(LWS_WITH_SYS_METRICS) lws_snprintf(buckname, sizeof(buckname), "dns=\"unreachable %d\"", n); lws_metrics_hist_bump_priv_wsi(wsi, mth_conn_failures, buckname); #endif #if defined(LWS_WITH_CONMON) wsi->conmon.dns_disposition = LWSCONMON_DNS_SERVER_UNREACHABLE; #endif #if 0 lwsl_wsi_debug(wsi, "asking to recheck CPD in 1s"); lws_system_cpd_start_defer(wsi->a.context, LWS_US_PER_SEC); #endif } lwsl_wsi_info(wsi, "getaddrinfo '%s' says %d", ads, n); #if defined(LWS_WITH_SYS_METRICS) if (n < 0) { lws_snprintf(buckname, sizeof(buckname), "dns=\"nores %d\"", n); lws_metrics_hist_bump_priv_wsi(wsi, mth_conn_failures, buckname); } #endif #if defined(LWS_WITH_CONMON) wsi->conmon.dns_disposition = n < 0 ? LWSCONMON_DNS_NO_RESULT : LWSCONMON_DNS_OK; #endif lws_metrics_caliper_report(cal, n >= 0 ? METRES_GO : METRES_NOGO); return n; } #endif #if !defined(LWS_WITH_SYS_ASYNC_DNS) && defined(EAI_NONAME) static const char * const dns_nxdomain = "DNS NXDOMAIN"; #endif struct lws * lws_client_connect_2_dnsreq(struct lws *wsi) { struct addrinfo *result = NULL; const char *meth = NULL; #if defined(LWS_WITH_IPV6) struct sockaddr_in addr; const char *iface; #endif const char *adsin; int n, port = 0; struct lws *w; if (lwsi_state(wsi) == LRS_WAITING_DNS || lwsi_state(wsi) == LRS_WAITING_CONNECT) { lwsl_wsi_info(wsi, "LRS_WAITING_DNS / CONNECT"); return wsi; } /* * clients who will create their own fresh connection keep a copy of * the hostname they originally connected to, in case other connections * want to use it too */ if (!wsi->cli_hostname_copy) { const char *pa = lws_wsi_client_stash_item(wsi, CIS_HOST, _WSI_TOKEN_CLIENT_PEER_ADDRESS); if (pa) wsi->cli_hostname_copy = lws_strdup(pa); } /* * The first job is figure out if we want to pipeline on or just join * an existing "active connection" to the same place */ meth = lws_wsi_client_stash_item(wsi, CIS_METHOD, _WSI_TOKEN_CLIENT_METHOD); /* consult active connections to find out disposition */ adsin = lws_wsi_client_stash_item(wsi, CIS_ADDRESS, _WSI_TOKEN_CLIENT_PEER_ADDRESS); /* we only pipeline connections that said it was okay */ if (!wsi->client_pipeline) { lwsl_wsi_debug(wsi, "new conn on no pipeline flag"); goto solo; } /* only pipeline things we associate with being a stream */ if (meth && strcmp(meth, "RAW") && strcmp(meth, "GET") && strcmp(meth, "POST") && strcmp(meth, "PUT") && strcmp(meth, "UDP") && strcmp(meth, "MQTT")) goto solo; if (!adsin) /* * This cannot happen since user code must provide the client * address to get this far, it's here to satisfy Coverity */ return NULL; switch (lws_vhost_active_conns(wsi, &w, adsin)) { case ACTIVE_CONNS_SOLO: break; case ACTIVE_CONNS_MUXED: lwsl_wsi_notice(wsi, "ACTIVE_CONNS_MUXED"); if (lwsi_role_h2(wsi)) { if (wsi->a.protocol->callback(wsi, LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP, wsi->user_space, NULL, 0)) goto failed1; //lwsi_set_state(wsi, LRS_H1C_ISSUE_HANDSHAKE2); //lwsi_set_state(w, LRS_ESTABLISHED); lws_callback_on_writable(wsi); } return wsi; case ACTIVE_CONNS_QUEUED: lwsl_wsi_debug(wsi, "ACTIVE_CONNS_QUEUED st 0x%x: ", lwsi_state(wsi)); if (lwsi_state(wsi) == LRS_UNCONNECTED) { if (lwsi_role_h2(w)) lwsi_set_state(wsi, LRS_H2_WAITING_TO_SEND_HEADERS); else lwsi_set_state(wsi, LRS_H1C_ISSUE_HANDSHAKE2); } return lws_client_connect_4_established(wsi, w, 0); } solo: /* * If we made our own connection, and we're doing a method that can * take a pipeline, we are an "active client connection". * * Add ourselves to the vhost list of those so that others can * piggyback on our transaction queue */ if (meth && (!strcmp(meth, "RAW") || !strcmp(meth, "GET") || !strcmp(meth, "POST") || !strcmp(meth, "PUT") || !strcmp(meth, "MQTT")) && lws_dll2_is_detached(&wsi->dll2_cli_txn_queue) && lws_dll2_is_detached(&wsi->dll_cli_active_conns)) { lws_context_lock(wsi->a.context, __func__); lws_vhost_lock(wsi->a.vhost); lwsl_wsi_info(wsi, "adding as active conn"); /* caution... we will have to unpick this on oom4 path */ lws_dll2_add_head(&wsi->dll_cli_active_conns, &wsi->a.vhost->dll_cli_active_conns_owner); lws_vhost_unlock(wsi->a.vhost); lws_context_unlock(wsi->a.context); } /* * Since address must be given at client creation, should not be * possible, but necessary to satisfy coverity */ if (!adsin) return NULL; #if defined(LWS_WITH_UNIX_SOCK) /* * unix socket destination? */ if (*adsin == '+') { wsi->unix_skt = 1; n = 0; goto next_step; } #endif /* * start off allowing ipv6 on connection if vhost allows it */ wsi->ipv6 = LWS_IPV6_ENABLED(wsi->a.vhost); #ifdef LWS_WITH_IPV6 if (wsi->stash) iface = wsi->stash->cis[CIS_IFACE]; else iface = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_IFACE); if (wsi->ipv6 && iface && inet_pton(AF_INET, iface, &addr.sin_addr) == 1) { lwsl_wsi_notice(wsi, "client connection forced to IPv4"); wsi->ipv6 = 0; } #endif #if defined(LWS_CLIENT_HTTP_PROXYING) && \ (defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2)) /* Decide what it is we need to connect to: * * Priority 1: connect to http proxy */ if (wsi->a.vhost->http.http_proxy_port) { adsin = wsi->a.vhost->http.http_proxy_address; port = (int)wsi->a.vhost->http.http_proxy_port; #else if (0) { #endif #if defined(LWS_WITH_SOCKS5) /* Priority 2: Connect to SOCK5 Proxy */ } else if (wsi->a.vhost->socks_proxy_port) { lwsl_wsi_client(wsi, "Sending SOCKS Greeting"); adsin = wsi->a.vhost->socks_proxy_address; port = (int)wsi->a.vhost->socks_proxy_port; #endif } else { /* Priority 3: Connect directly */ /* ads already set */ port = wsi->c_port; } /* * prepare the actual connection * to whatever we decided to connect to */ lwsi_set_state(wsi, LRS_WAITING_DNS); lwsl_wsi_info(wsi, "lookup %s:%u", adsin, port); wsi->conn_port = (uint16_t)port; #if !defined(LWS_WITH_SYS_ASYNC_DNS) n = 0; if (!wsi->dns_sorted_list.count) { /* * blocking dns resolution */ n = lws_getaddrinfo46(wsi, adsin, &result); #if defined(EAI_NONAME) if (n == EAI_NONAME) { /* * The DNS server responded with NXDOMAIN... even * though this is still in the client creation call, * we need to make a CCE, otherwise there won't be * any user indication of what went wrong */ wsi->client_suppress_CONNECTION_ERROR = 0; lws_inform_client_conn_fail(wsi, (void *)dns_nxdomain, strlen(dns_nxdomain)); goto failed1; } #endif } #else /* this is either FAILED, CONTINUING, or already called connect_4 */ if (lws_fi(&wsi->fic, "dnsfail")) return lws_client_connect_3_connect(wsi, NULL, NULL, -4, NULL); else n = lws_async_dns_query(wsi->a.context, wsi->tsi, adsin, LWS_ADNS_RECORD_A, lws_client_connect_3_connect, wsi, NULL); if (n == LADNS_RET_FAILED_WSI_CLOSED) return NULL; if (n == LADNS_RET_FAILED) goto failed1; return wsi; #endif #if defined(LWS_WITH_UNIX_SOCK) next_step: #endif return lws_client_connect_3_connect(wsi, adsin, result, n, NULL); //#if defined(LWS_WITH_SYS_ASYNC_DNS) failed1: lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "client_connect2"); return NULL; //#endif } libwebsockets-4.3.5/lib/core-net/client/connect3.c000066400000000000000000000443051476025525100220200ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" void lws_client_conn_wait_timeout(lws_sorted_usec_list_t *sul) { struct lws *wsi = lws_container_of(sul, struct lws, sul_connect_timeout); /* * This is used to constrain the time we're willing to wait for a * connection before giving up on it and retrying. */ lwsl_wsi_info(wsi, "connect wait timeout has fired"); lws_client_connect_3_connect(wsi, NULL, NULL, 0, NULL); } void lws_client_dns_retry_timeout(lws_sorted_usec_list_t *sul) { struct lws *wsi = lws_container_of(sul, struct lws, sul_connect_timeout); /* * This limits the amount of dns lookups we will try before * giving up and failing... it reuses sul_connect_timeout, which * isn't officially used until we connected somewhere. */ lwsl_wsi_info(wsi, "dns retry"); if (!lws_client_connect_2_dnsreq(wsi)) lwsl_wsi_notice(wsi, "DNS lookup failed"); } /* * Figure out if an ongoing connect() has arrived at a final disposition or not * * We can check using getsockopt if our connect actually completed. * Posix connect() allows nonblocking to redo the connect to * find out if it succeeded. */ typedef enum { LCCCR_CONNECTED = 1, LCCCR_CONTINUE = 0, LCCCR_FAILED = -1, } lcccr_t; static lcccr_t lws_client_connect_check(struct lws *wsi, int *real_errno) { int en = 0; #if !defined(WIN32) int e; socklen_t sl = sizeof(e); #endif (void)en; /* * This resets SO_ERROR after reading it. If there's an error * condition, the connect definitively failed. */ #if !defined(WIN32) if (!getsockopt(wsi->desc.sockfd, SOL_SOCKET, SO_ERROR, &e, &sl)) { en = LWS_ERRNO; if (!e) { lwsl_wsi_debug(wsi, "getsockopt: conn OK errno %d", en); return LCCCR_CONNECTED; } lwsl_wsi_notice(wsi, "getsockopt fd %d says e %d", wsi->desc.sockfd, e); *real_errno = e; return LCCCR_FAILED; } #else if (!connect(wsi->desc.sockfd, (const struct sockaddr *)&wsi->sa46_peer.sa4, #if defined(WIN32) sizeof(struct sockaddr))) #else 0)) #endif return LCCCR_CONNECTED; en = LWS_ERRNO; if (en == WSAEISCONN) /* already connected */ return LCCCR_CONNECTED; if (en == WSAEALREADY) { /* reset the POLLOUT wait */ if (lws_change_pollfd(wsi, 0, LWS_POLLOUT)) lwsl_wsi_notice(wsi, "pollfd failed"); } if (!en || en == WSAEINVAL || en == WSAEWOULDBLOCK || en == WSAEALREADY) { lwsl_wsi_debug(wsi, "errno %d", en); return LCCCR_CONTINUE; } #endif lwsl_wsi_notice(wsi, "connect check FAILED: %d", *real_errno || en); return LCCCR_FAILED; } /* * We come here to fire off a connect, and to check its disposition later. * * If it did not complete before the individual attempt timeout, we will try to * connect again with the next dns result. */ struct lws * lws_client_connect_3_connect(struct lws *wsi, const char *ads, const struct addrinfo *result, int n, void *opaque) { #if defined(LWS_WITH_UNIX_SOCK) struct sockaddr_un sau; #endif struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; const char *cce = "Unable to connect", *iface; const struct sockaddr *psa = NULL; uint16_t port = wsi->conn_port; lws_dns_sort_t *curr; ssize_t plen = 0; lws_dll2_t *d; char dcce[48]; #if defined(LWS_WITH_SYS_FAULT_INJECTION) int cfail; #endif int m, af = 0; /* * If we come here with result set, we need to convert getaddrinfo * results to a lws_dns_sort_t list one time and free the results. * * We use this pattern because ASYNC_DNS will callback here with the * results when it gets them (and may come here more than once, eg, for * AAAA then A or vice-versa) */ if (result) { lws_sul_cancel(&wsi->sul_connect_timeout); #if defined(LWS_WITH_CONMON) /* append a copy from before the sorting */ lws_conmon_append_copy_new_dns_results(wsi, result); #endif lws_sort_dns(wsi, result); #if defined(LWS_WITH_SYS_ASYNC_DNS) lws_async_dns_freeaddrinfo(&result); #else freeaddrinfo((struct addrinfo *)result); #endif result = NULL; } #if defined(LWS_WITH_UNIX_SOCK) memset(&sau, 0, sizeof(sau)); #endif /* * async dns calls back here for everybody who cares when it gets a * result... but if we are piggybacking, we do not want to connect * ourselves */ if (!lws_dll2_is_detached(&wsi->dll2_cli_txn_queue)) return wsi; if (n && /* calling back with a problem */ !wsi->dns_sorted_list.count && /* there's no results */ !lws_socket_is_valid(wsi->desc.sockfd) && /* no attempt ongoing */ !wsi->speculative_connect_owner.count /* no spec attempt */ ) { lwsl_wsi_notice(wsi, "dns lookup failed %d", n); /* * DNS lookup itself failed... let's try again until we * timeout */ lwsi_set_state(wsi, LRS_UNCONNECTED); lws_sul_schedule(wsi->a.context, wsi->tsi, &wsi->sul_connect_timeout, lws_client_dns_retry_timeout, LWS_USEC_PER_SEC); return wsi; // cce = "dns lookup failed"; // goto oom4; } /* * We come back here again when we think the connect() may have * completed one way or the other, we can't proceed until we know we * actually connected. */ if (lwsi_state(wsi) == LRS_WAITING_CONNECT && lws_socket_is_valid(wsi->desc.sockfd)) { if (!wsi->dns_sorted_list.count && !wsi->sul_connect_timeout.list.owner) /* no dns results and no ongoing timeout for one */ goto connect_to; /* * If the connection failed, the OS-level errno may be * something like EINPROGRESS rather than the actual problem * that prevented a connection. This value will represent the * ā€œrealā€ problem that we should report to the caller. */ int real_errno = 0; switch (lws_client_connect_check(wsi, &real_errno)) { case LCCCR_CONNECTED: /* * Oh, it has happened... */ goto conn_good; case LCCCR_CONTINUE: return NULL; default: if (!real_errno) real_errno = LWS_ERRNO; lws_snprintf(dcce, sizeof(dcce), "conn fail: %d", real_errno); cce = dcce; lwsl_wsi_debug(wsi, "%s", dcce); lws_metrics_caliper_report(wsi->cal_conn, METRES_NOGO); goto try_next_dns_result_fds; } } #if defined(LWS_WITH_UNIX_SOCK) if (ads && *ads == '+') { ads++; memset(&wsi->sa46_peer, 0, sizeof(wsi->sa46_peer)); af = sau.sun_family = AF_UNIX; strncpy(sau.sun_path, ads, sizeof(sau.sun_path)); sau.sun_path[sizeof(sau.sun_path) - 1] = '\0'; lwsl_wsi_info(wsi, "Unix skt: %s", ads); if (sau.sun_path[0] == '@') sau.sun_path[0] = '\0'; goto ads_known; } #endif #if defined(LWS_WITH_SYS_ASYNC_DNS) if (n == LADNS_RET_FAILED) { lwsl_wsi_notice(wsi, "adns failed %s", ads); /* * Caller that is giving us LADNS_RET_FAILED will deal * with cleanup */ return NULL; } #endif /* * Let's try directly connecting to each of the results in turn until * one works, or we run out of results... * * We have a sorted dll2 list with the head one most preferable */ next_dns_result: cce = "Unable to connect"; if (!wsi->dns_sorted_list.count) goto failed1; /* * Copy the wsi head sorted dns result into the wsi->sa46_peer, and * remove and free the original from the sorted list */ d = lws_dll2_get_head(&wsi->dns_sorted_list); curr = lws_container_of(d, lws_dns_sort_t, list); lws_dll2_remove(&curr->list); wsi->sa46_peer = curr->dest; #if defined(LWS_WITH_NETLINK) wsi->peer_route_uidx = curr->uidx; lwsl_wsi_info(wsi, "peer_route_uidx %d", wsi->peer_route_uidx); #endif lws_free(curr); sa46_sockport(&wsi->sa46_peer, htons(port)); psa = sa46_sockaddr(&wsi->sa46_peer); n = (int)sa46_socklen(&wsi->sa46_peer); #if defined(LWS_WITH_UNIX_SOCK) ads_known: #endif /* * Now we prepared psa, if not already connecting, create the related * socket and add to the fds */ if (!lws_socket_is_valid(wsi->desc.sockfd)) { if (wsi->a.context->event_loop_ops->check_client_connect_ok && wsi->a.context->event_loop_ops->check_client_connect_ok(wsi) ) { cce = "waiting for event loop watcher to close"; goto oom4; } #if defined(LWS_WITH_UNIX_SOCK) af = 0; if (wsi->unix_skt) { af = AF_UNIX; wsi->desc.sockfd = socket(AF_UNIX, SOCK_STREAM, 0); } else #endif { af = wsi->sa46_peer.sa4.sin_family; wsi->desc.sockfd = socket(wsi->sa46_peer.sa4.sin_family, SOCK_STREAM, 0); } if (!lws_socket_is_valid(wsi->desc.sockfd)) { lws_snprintf(dcce, sizeof(dcce), "conn fail: skt creation: errno %d", LWS_ERRNO); cce = dcce; lwsl_wsi_warn(wsi, "%s", dcce); goto try_next_dns_result; } if (lws_plat_set_socket_options(wsi->a.vhost, wsi->desc.sockfd, #if defined(LWS_WITH_UNIX_SOCK) wsi->unix_skt)) { #else 0)) { #endif lws_snprintf(dcce, sizeof(dcce), "conn fail: skt options: errno %d", LWS_ERRNO); cce = dcce; lwsl_wsi_warn(wsi, "%s", dcce); goto try_next_dns_result_closesock; } /* apply requested socket options */ if (lws_plat_set_socket_options_ip(wsi->desc.sockfd, wsi->c_pri, wsi->flags)) lwsl_wsi_warn(wsi, "unable to set ip options"); lwsl_wsi_debug(wsi, "WAITING_CONNECT"); lwsi_set_state(wsi, LRS_WAITING_CONNECT); if (wsi->a.context->event_loop_ops->sock_accept) if (wsi->a.context->event_loop_ops->sock_accept(wsi)) { lws_snprintf(dcce, sizeof(dcce), "conn fail: sock accept"); cce = dcce; lwsl_wsi_warn(wsi, "%s", dcce); goto try_next_dns_result_closesock; } lws_pt_lock(pt, __func__); if (__insert_wsi_socket_into_fds(wsi->a.context, wsi)) { lws_snprintf(dcce, sizeof(dcce), "conn fail: insert fd"); cce = dcce; lws_pt_unlock(pt); goto try_next_dns_result_closesock; } lws_pt_unlock(pt); /* * The fd + wsi combination is entered into the wsi tables * at this point, with a pollfd * * Past here, we can't simply free the structs as error * handling as oom4 does. * * We can run the whole close flow, or unpick the fds inclusion * and anything else we have done. */ if (lws_change_pollfd(wsi, 0, LWS_POLLIN)) { lws_snprintf(dcce, sizeof(dcce), "conn fail: change pollfd"); cce = dcce; goto try_next_dns_result_fds; } if (!wsi->a.protocol) wsi->a.protocol = &wsi->a.vhost->protocols[0]; lws_set_timeout(wsi, PENDING_TIMEOUT_AWAITING_CONNECT_RESPONSE, wsi->a.vhost->connect_timeout_secs); iface = lws_wsi_client_stash_item(wsi, CIS_IFACE, _WSI_TOKEN_CLIENT_IFACE); if (iface && *iface) { m = lws_socket_bind(wsi->a.vhost, wsi, wsi->desc.sockfd, 0, iface, af); if (m < 0) { lws_snprintf(dcce, sizeof(dcce), "conn fail: socket bind"); cce = dcce; goto try_next_dns_result_fds; } } } #if defined(LWS_WITH_UNIX_SOCK) if (wsi->unix_skt) { psa = (const struct sockaddr *)&sau; if (sau.sun_path[0]) n = (int)(sizeof(uint16_t) + strlen(sau.sun_path)); else n = (int)(sizeof(uint16_t) + strlen(&sau.sun_path[1]) + 1); } else #endif if (!psa) /* coverity */ goto try_next_dns_result_fds; /* * The actual connection attempt */ #if defined(LWS_ESP_PLATFORM) errno = 0; #endif /* grab a copy for peer tracking */ #if defined(LWS_WITH_UNIX_SOCK) if (!wsi->unix_skt) #endif memmove(&wsi->sa46_peer, psa, (unsigned int)n); /* * Finally, make the actual connection attempt */ #if defined(LWS_WITH_SYS_METRICS) if (wsi->cal_conn.mt) { lws_metrics_caliper_report(wsi->cal_conn, METRES_NOGO); } lws_metrics_caliper_bind(wsi->cal_conn, wsi->a.context->mt_conn_tcp); #endif wsi->socket_is_permanently_unusable = 0; if (lws_fi(&wsi->fic, "conn_cb_rej") || user_callback_handle_rxflow(wsi->a.protocol->callback, wsi, LWS_CALLBACK_CONNECTING, wsi->user_space, (void *)(intptr_t)wsi->desc.sockfd, 0)) { lwsl_wsi_info(wsi, "CONNECTION CB closed"); goto failed1; } #if defined(LWS_WITH_SYS_FAULT_INJECTION) cfail = lws_fi(&wsi->fic, "connfail"); if (cfail) m = -1; else #endif m = connect(wsi->desc.sockfd, (const struct sockaddr *)psa, (socklen_t)n); #if defined(LWS_WITH_CONMON) wsi->conmon_datum = lws_now_usecs(); wsi->conmon.ciu_sockconn = 0; #endif if (m == -1) { /* * Since we're nonblocking, connect not having completed is not * necessarily indicating any problem... we have to look at * either errno or the socket to understand if we actually * failed already... */ int errno_copy = LWS_ERRNO; #if defined(LWS_WITH_SYS_FAULT_INJECTION) if (cfail) /* fake an abnormal, fatal situation */ errno_copy = 999; #endif lwsl_wsi_debug(wsi, "connect: fd %d errno: %d", wsi->desc.sockfd, errno_copy); if (errno_copy && errno_copy != LWS_EALREADY && errno_copy != LWS_EINPROGRESS && errno_copy != LWS_EWOULDBLOCK #ifdef _WIN32 && errno_copy != WSAEINVAL && errno_copy != WSAEISCONN #endif ) { /* * The connect() failed immediately... */ #if defined(LWS_WITH_CONMON) wsi->conmon.ciu_sockconn = (lws_conmon_interval_us_t) (lws_now_usecs() - wsi->conmon_datum); #endif lws_metrics_caliper_report(wsi->cal_conn, METRES_NOGO); #if defined(_DEBUG) #if defined(LWS_WITH_UNIX_SOCK) if (!wsi->unix_skt) { #endif char nads[48]; lws_sa46_write_numeric_address(&wsi->sa46_peer, nads, sizeof(nads)); lws_snprintf(dcce, sizeof(dcce), "conn fail: errno %d: %s:%d", errno_copy, nads, port); cce = dcce; wsi->sa46_peer.sa4.sin_family = 0; lwsl_wsi_info(wsi, "%s", cce); #if defined(LWS_WITH_UNIX_SOCK) } else { lws_snprintf(dcce, sizeof(dcce), "conn fail: errno %d: UDS %s", errno_copy, ads); cce = dcce; } #endif #endif goto try_next_dns_result_fds; } #if defined(WIN32) if (lws_plat_check_connection_error(wsi)) goto try_next_dns_result_fds; if (errno_copy == WSAEISCONN) goto conn_good; #endif /* * The connection attempt is ongoing asynchronously... let's set * a specialized timeout for this connect attempt completion, it * uses wsi->sul_connect_timeout just for this purpose */ lws_sul_schedule(wsi->a.context, wsi->tsi, &wsi->sul_connect_timeout, lws_client_conn_wait_timeout, wsi->a.context->timeout_secs * LWS_USEC_PER_SEC); /* * must do specifically a POLLOUT poll to hear * about the connect completion */ if (lws_change_pollfd(wsi, 0, LWS_POLLOUT)) goto try_next_dns_result_fds; return wsi; } conn_good: /* * The connection has happened */ #if defined(LWS_WITH_CONMON) wsi->conmon.ciu_sockconn = (lws_conmon_interval_us_t) (lws_now_usecs() - wsi->conmon_datum); #endif #if !defined(LWS_PLAT_OPTEE) { socklen_t salen = sizeof(wsi->sa46_local); #if defined(_DEBUG) char buf[64]; #endif if (getsockname((int)wsi->desc.sockfd, (struct sockaddr *)&wsi->sa46_local, &salen) == -1) lwsl_warn("getsockname: %s\n", strerror(LWS_ERRNO)); #if defined(_DEBUG) #if defined(LWS_WITH_UNIX_SOCK) if (wsi->unix_skt) buf[0] = '\0'; else #endif lws_sa46_write_numeric_address(&wsi->sa46_local, buf, sizeof(buf)); lwsl_wsi_info(wsi, "source ads %s", buf); #endif } #endif lws_sul_cancel(&wsi->sul_connect_timeout); lws_metrics_caliper_report(wsi->cal_conn, METRES_GO); lws_addrinfo_clean(wsi); if (wsi->a.protocol) wsi->a.protocol->callback(wsi, LWS_CALLBACK_WSI_CREATE, wsi->user_space, NULL, 0); lwsl_wsi_debug(wsi, "going into connect_4"); return lws_client_connect_4_established(wsi, NULL, plen); oom4: /* * We get here if we're trying to clean up a connection attempt that * didn't make it as far as getting inserted into the wsi / fd tables */ if (lwsi_role_client(wsi) && wsi->a.protocol /* && lwsi_state_est(wsi) */) lws_inform_client_conn_fail(wsi,(void *)cce, strlen(cce)); /* take care that we might be inserted in fds already */ if (wsi->position_in_fds_table != LWS_NO_FDS_POS) /* do the full wsi close flow */ goto failed1; lws_metrics_caliper_report(wsi->cal_conn, METRES_NOGO); /* * We can't be an active client connection any more, if we thought * that was what we were going to be doing. It should be if we are * failing by oom4 path, we are still called by * lws_client_connect_via_info() and will be returning NULL to that, * so nobody else should have had a chance to queue on us. */ { struct lws_vhost *vhost = wsi->a.vhost; lws_sockfd_type sfd = wsi->desc.sockfd; //lws_vhost_lock(vhost); __lws_free_wsi(wsi); /* acquires vhost lock in wsi reset */ //lws_vhost_unlock(vhost); sanity_assert_no_wsi_traces(vhost->context, wsi); sanity_assert_no_sockfd_traces(vhost->context, sfd); } return NULL; connect_to: /* * It looks like the sul_connect_timeout fired */ lwsl_wsi_info(wsi, "abandoning connect due to timeout"); try_next_dns_result_fds: lws_pt_lock(pt, __func__); __remove_wsi_socket_from_fds(wsi); lws_pt_unlock(pt); try_next_dns_result_closesock: /* * We are killing the socket but leaving */ compatible_close(wsi->desc.sockfd); wsi->desc.sockfd = LWS_SOCK_INVALID; try_next_dns_result: lws_sul_cancel(&wsi->sul_connect_timeout); if (lws_dll2_get_head(&wsi->dns_sorted_list)) goto next_dns_result; lws_addrinfo_clean(wsi); lws_inform_client_conn_fail(wsi, (void *)cce, strlen(cce)); failed1: lws_sul_cancel(&wsi->sul_connect_timeout); lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "client_connect3"); return NULL; } libwebsockets-4.3.5/lib/core-net/client/connect4.c000066400000000000000000000222641476025525100220210ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" struct lws * lws_client_connect_4_established(struct lws *wsi, struct lws *wsi_piggyback, ssize_t plen) { #if defined(LWS_CLIENT_HTTP_PROXYING) struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; #endif const char *meth; struct lws_pollfd pfd; const char *cce = ""; int n, m, rawish = 0; meth = lws_wsi_client_stash_item(wsi, CIS_METHOD, _WSI_TOKEN_CLIENT_METHOD); if (meth && (!strcmp(meth, "RAW") #if defined(LWS_ROLE_MQTT) || !strcmp(meth, "MQTT") #endif )) rawish = 1; if (wsi_piggyback) goto send_hs; #if defined(LWS_CLIENT_HTTP_PROXYING) #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) /* we are connected to server, or proxy */ /* http proxy */ if (wsi->a.vhost->http.http_proxy_port) { const char *cpa; cpa = lws_wsi_client_stash_item(wsi, CIS_ADDRESS, _WSI_TOKEN_CLIENT_PEER_ADDRESS); if (!cpa) goto failed; lwsl_wsi_info(wsi, "going via proxy"); plen = lws_snprintf((char *)pt->serv_buf, 256, "CONNECT %s:%u HTTP/1.1\x0d\x0a" "Host: %s:%u\x0d\x0a" "User-agent: lws\x0d\x0a", cpa, wsi->ocport, cpa, wsi->ocport); #if defined(LWS_WITH_HTTP_BASIC_AUTH) if (wsi->a.vhost->proxy_basic_auth_token[0]) plen += lws_snprintf((char *)pt->serv_buf + plen, 256, "Proxy-authorization: basic %s\x0d\x0a", wsi->a.vhost->proxy_basic_auth_token); #endif plen += lws_snprintf((char *)pt->serv_buf + plen, 5, "\x0d\x0a"); /* lwsl_hexdump_notice(pt->serv_buf, plen); */ /* * OK from now on we talk via the proxy, so connect to that */ if (wsi->stash) wsi->stash->cis[CIS_ADDRESS] = wsi->a.vhost->http.http_proxy_address; else if (lws_hdr_simple_create(wsi, _WSI_TOKEN_CLIENT_PEER_ADDRESS, wsi->a.vhost->http.http_proxy_address)) goto failed; wsi->c_port = (uint16_t)wsi->a.vhost->http.http_proxy_port; n = (int)send(wsi->desc.sockfd, (char *)pt->serv_buf, (unsigned int)plen, MSG_NOSIGNAL); if (n < 0) { lwsl_wsi_debug(wsi, "ERROR writing to proxy socket"); cce = "proxy write failed"; goto failed; } lws_set_timeout(wsi, PENDING_TIMEOUT_AWAITING_PROXY_RESPONSE, (int)wsi->a.context->timeout_secs); wsi->conn_port = wsi->c_port; lwsi_set_state(wsi, LRS_WAITING_PROXY_REPLY); return wsi; } #endif #endif /* coverity */ if (!wsi->a.protocol) return NULL; #if defined(LWS_WITH_SOCKS5) if (lwsi_state(wsi) != LRS_ESTABLISHED) switch (lws_socks5c_greet(wsi, &cce)) { case -1: goto failed; case 1: return wsi; default: break; } #endif #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) send_hs: if (wsi_piggyback && !lws_dll2_is_detached(&wsi->dll2_cli_txn_queue)) { /* * We are pipelining on an already-established connection... * we can skip tls establishment. * * Set these queued guys to a state where they won't actually * send their headers until we decide later. */ lwsi_set_state(wsi, LRS_H2_WAITING_TO_SEND_HEADERS); /* * we can't send our headers directly, because they have to * be sent when the parent is writeable. The parent will check * for anybody on his client transaction queue that is in * LRS_H1C_ISSUE_HANDSHAKE2, and let them write. * * If we are trying to do this too early, before the network * connection has written his own headers, then it will just * wait in the queue until it's possible to send them. */ lws_callback_on_writable(wsi_piggyback); lwsl_wsi_info(wsi, "waiting to send hdrs (par state 0x%x)", lwsi_state(wsi_piggyback)); } else { lwsl_wsi_info(wsi, "%s %s client created own conn " "(raw %d) vh %s st 0x%x", wsi->role_ops->name, wsi->a.protocol->name, rawish, wsi->a.vhost->name, lwsi_state(wsi)); /* we are making our own connection */ if (!rawish #if defined(LWS_WITH_TLS) // && (!(wsi->tls.use_ssl & LCCSCF_USE_SSL) || wsi->tls.ssl) #endif ) { if (lwsi_state(wsi) != LRS_H1C_ISSUE_HANDSHAKE2) lwsi_set_state(wsi, LRS_H1C_ISSUE_HANDSHAKE); } else { /* for a method = "RAW" connection, this makes us * established */ #if defined(LWS_WITH_TLS)// && !defined(LWS_WITH_MBEDTLS) /* we have connected if we got here */ if (lwsi_state(wsi) == LRS_WAITING_CONNECT && (wsi->tls.use_ssl & LCCSCF_USE_SSL)) { int result; //lwsi_set_state(wsi, LRS_WAITING_SSL); /* * We can retry this... just cook the SSL BIO * the first time */ result = lws_client_create_tls(wsi, &cce, 1); switch (result) { case CCTLS_RETURN_DONE: break; case CCTLS_RETURN_RETRY: lwsl_wsi_debug(wsi, "create_tls RETRY"); return wsi; default: lwsl_wsi_debug(wsi, "create_tls FAIL"); goto failed; } /* * We succeeded to negotiate a new client tls * tunnel. If it's h2 alpn, we have arranged * to send the h2 prefix and set our state to * LRS_H2_WAITING_TO_SEND_HEADERS already. */ lwsl_wsi_notice(wsi, "tls established st 0x%x, " "client_h2_alpn %d", lwsi_state(wsi), wsi->client_h2_alpn); if (lwsi_state(wsi) != LRS_H2_WAITING_TO_SEND_HEADERS) lwsi_set_state(wsi, LRS_H1C_ISSUE_HANDSHAKE2); lws_set_timeout(wsi, PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND, (int)wsi->a.context->timeout_secs); #if 0 /* ensure pollin enabled */ if (lws_change_pollfd(wsi, 0, LWS_POLLIN)) lwsl_wsi_notice(wsi, "unable to set POLLIN"); #endif goto provoke_service; } #endif /* clear his established timeout */ lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); m = wsi->role_ops->adoption_cb[0]; if (m) { n = user_callback_handle_rxflow( wsi->a.protocol->callback, wsi, (enum lws_callback_reasons)m, wsi->user_space, NULL, 0); if (n < 0) { lwsl_wsi_info(wsi, "RAW_PROXY_CLI_ADOPT err"); goto failed; } } /* service.c pollout processing wants this */ wsi->hdr_parsing_completed = 1; #if defined(LWS_ROLE_MQTT) if (meth && !strcmp(meth, "MQTT")) { #if defined(LWS_WITH_TLS) if (wsi->tls.use_ssl & LCCSCF_USE_SSL) { lwsi_set_state(wsi, LRS_WAITING_SSL); return wsi; } #endif lwsl_wsi_info(wsi, "settings LRS_MQTTC_IDLE"); lwsi_set_state(wsi, LRS_MQTTC_IDLE); /* * provoke service to issue the CONNECT * directly. */ lws_set_timeout(wsi, PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE, (int)wsi->a.context->timeout_secs); assert(lws_socket_is_valid(wsi->desc.sockfd)); pfd.fd = wsi->desc.sockfd; pfd.events = LWS_POLLIN; pfd.revents = LWS_POLLOUT; lwsl_wsi_info(wsi, "going to service fd"); n = lws_service_fd_tsi(wsi->a.context, &pfd, wsi->tsi); if (n < 0) { cce = "first service failed"; goto failed; } if (n) /* returns 1 on fail after close wsi */ return NULL; return wsi; } #endif lwsl_wsi_info(wsi, "setting ESTABLISHED"); lwsi_set_state(wsi, LRS_ESTABLISHED); return wsi; } /* * provoke service to issue the handshake directly. * * we need to do it this way because in the proxy case, this is * the next state and executed only if and when we get a good * proxy response inside the state machine... but notice in * SSL case this may not have sent anything yet with 0 return, * and won't until many retries from main loop. To stop that * becoming endless, cover with a timeout. */ #if defined(LWS_WITH_TLS) //&& !defined(LWS_WITH_MBEDTLS) provoke_service: #endif lws_set_timeout(wsi, PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE, (int)wsi->a.context->timeout_secs); assert(lws_socket_is_valid(wsi->desc.sockfd)); pfd.fd = wsi->desc.sockfd; pfd.events = LWS_POLLIN; pfd.revents = LWS_POLLIN; n = lws_service_fd_tsi(wsi->a.context, &pfd, wsi->tsi); if (n < 0) { cce = "first service failed"; goto failed; } if (n) /* returns 1 on failure after closing wsi */ return NULL; } #endif return wsi; failed: lws_inform_client_conn_fail(wsi, (void *)cce, strlen(cce)); lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "client_connect4"); return NULL; } libwebsockets-4.3.5/lib/core-net/client/sort-dns.c000066400000000000000000000512461476025525100220570ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * * Either the libc getaddrinfo() or ASYNC_DNS provides a chain of addrinfo, * we use lws_sort_dns() to convert it to an lws_dll2 of lws_dns_sort_t, after * which the addrinfo results are freed. * * If the system has no routing table info (from, eg, NETLINK), then that's * it the sorted results are bound to the wsi and used. * * If the system has routing table info, we study the routing table and the * DNS results in order to sort the lws_dns_sort_t result linked-list into * most desirable at the head, and strip results we can't see a way to route. */ #include "private-lib-core.h" #if defined(__linux__) #include #endif #if defined(__FreeBSD__) #include #include #endif #if defined(LWS_WITH_IPV6) && defined(LWS_WITH_NETLINK) /* * RFC6724 default policy table * * Prefix Precedence Label * ::1/128 50 0 * ::/0 40 1 * ::ffff:0:0/96 35 4 (override prec to 100 to prefer ipv4) * 2002::/16 30 2 * 2001::/32 5 5 * fc00::/7 3 13 * ::/96 1 3 * fec0::/10 1 11 * 3ffe::/16 1 12 * * implemented using offsets into a combined 40-byte table below */ static const uint8_t ma[] = { /* 0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, /* 16 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, /* 28 */ 0x20, 0x02, /* 30 */ 0x20, 0x01, 0x00, 0x00, /* 34 */ 0xfc, 0x00, /* 36 */ 0xfe, 0xc0, /* 38 */ 0x3f, 0xfe }; static const uint8_t frac[] = { 0, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe }; /* 9 x 4 byte = 36 byte policy index table */ static const struct score_policy { uint8_t ma_ofs; uint8_t prefix; lws_dns_score_t score; } rfc6724_policy[] = { { 0, 128, { 50, 0 } }, /* ::1/128 */ { 0, 0, { 40, 1 } }, /* ::0 */ #if 1 /* favour ipv6 as a general policy */ { 16, 96, { 35, 4 } }, /* ::ffff:0:0/96 */ #else /* favour ipv4 as a general policy */ { 16, 96, { 100, 4 } }, /* ::ffff:0:0/96 */ #endif { 28, 16, { 30, 2 } }, /* 2002::/16 */ { 30, 32, { 5, 5 } }, /* 2001::/32 */ { 34, 7, { 3, 13 } }, /* fc00::/7 */ { 0, 96, { 1, 3 } }, /* ::/96 */ { 36, 10, { 1, 11 } }, /* fec0::/10 */ { 38, 16, { 1, 12 } }, /* 3ffe::/16 */ }; static int lws_ipv6_prefix_match_len(const struct sockaddr_in6 *a, const struct sockaddr_in6 *b) { const uint8_t *ads_a = (uint8_t *)&a->sin6_addr, *ads_b = (uint8_t *)&b->sin6_addr; int n = 0, match = 0; for (n = 0; n < 16; n++) { if (ads_a[n] == ads_b[n]) match += 8; else break; } if (match != 128) { int m; for (m = 1; m < 8; m++) { if ((ads_a[n] & frac[m]) == (ads_b[n] & frac[m])) match++; else break; } } return match; } static int lws_ipv6_unicast_scope(const struct sockaddr_in6 *sa) { uint64_t *u; u = (uint64_t *)&sa->sin6_addr; if (*u == 0xfe80000000000000ull) return 2; /* link-local */ return 0xe; } static int lws_sort_dns_scope(lws_sockaddr46 *sa46) { if (sa46->sa4.sin_family == AF_INET) { uint8_t *p = (uint8_t *)&sa46->sa4.sin_addr; /* RFC6724 3.2 */ if (p[0] == 127 || (p[0] == 169 && p[1] == 254)) return 2; /* link-local */ return 0xe; /* global */ } return lws_ipv6_unicast_scope(&sa46->sa6); } static int lws_sort_dns_classify(lws_sockaddr46 *sa46, lws_dns_score_t *score) { const struct score_policy *pol = rfc6724_policy; const uint8_t *p, *po; lws_sockaddr46 s; int n, m; memset(score, 0, sizeof(*score)); if (sa46->sa4.sin_family == AF_INET) { memset(&s, 0, sizeof(s)); s.sa6.sin6_family = AF_INET6; lws_4to6((uint8_t *)s.sa6.sin6_addr.s6_addr, (const uint8_t *)&sa46->sa4.sin_addr); /* use the v6 version of the v4 address */ sa46 = &s; } for (n = 0; n < (int)LWS_ARRAY_SIZE(rfc6724_policy); n++) { po = (uint8_t *)&sa46->sa6.sin6_addr.s6_addr; p = &ma[pol->ma_ofs]; for (m = 0; m < pol->prefix >> 3; m++) if (*p++ != *po++) goto next; if ((pol->prefix & 7) && (*p & frac[pol->prefix & 7]) != (*po & frac[pol->prefix & 7])) goto next; *score = pol->score; return 0; next: pol++; } return 1; } enum { SAS_PREFER_A = 1, SAS_SAME = 0, SAS_PREFER_B = -1 }; /* ifa is laid out with types for ipv4, if it's AF_INET6 case to sockaddr_in6 */ #define to_v6_sa(x) ((struct sockaddr_in6 *)x) #define to_sa46_sa(x) ((lws_sockaddr46 *)x) /* * The source address selection algorithm produces as output a single * source address for use with a given destination address. This * algorithm only applies to IPv6 destination addresses, not IPv4 * addresses. * * This implements RFC6724 Section 5. * * Either or both sa and sb can be dest or gateway routes */ static int lws_sort_dns_scomp(struct lws_context_per_thread *pt, const lws_route_t *sa, const lws_route_t *sb, const struct sockaddr_in6 *dst) { const struct sockaddr_in6 *sa6 = to_v6_sa(&sa->dest), *sb6 = to_v6_sa(&sb->dest); lws_dns_score_t scorea, scoreb, scoredst; int scopea, scopeb, scoped, mla, mlb; lws_route_t *rd; if (!sa->dest.sa4.sin_family) sa6 = to_v6_sa(&sa->gateway); if (!sb->dest.sa4.sin_family) sb6 = to_v6_sa(&sb->gateway); /* * We shouldn't come here unless sa and sb both have AF_INET6 addresses */ assert(sa6->sin6_family == AF_INET6); assert(sb6->sin6_family == AF_INET6); /* * Rule 1: Prefer same address. * If SA = D, then prefer SA. Similarly, if SB = D, then prefer SB. */ if (!memcmp(&sa6->sin6_addr, &dst->sin6_addr, 16)) return SAS_PREFER_A; if (!memcmp(&sb6->sin6_addr, &dst->sin6_addr, 16)) return SAS_PREFER_B; /* * Rule 2: Prefer appropriate scope. * If Scope(SA) < Scope(SB): If Scope(SA) < Scope(D), then prefer SB * and otherwise prefer SA. * * Similarly, if Scope(SB) < Scope(SA): If Scope(SB) < Scope(D), then * prefer SA and otherwise prefer SB. */ scopea = lws_sort_dns_scope(to_sa46_sa(sa6)); scopeb = lws_sort_dns_scope(to_sa46_sa(sb6)); scoped = lws_sort_dns_scope(to_sa46_sa(dst)); if (scopea < scopeb) return scopea < scoped ? SAS_PREFER_B : SAS_PREFER_A; if (scopeb < scopea) return scopeb < scoped ? SAS_PREFER_A : SAS_PREFER_B; /* * Rule 3: Avoid deprecated addresses. * If one of the two source addresses is "preferred" and one of them * is "deprecated" (in the RFC 4862 sense), then prefer the one that * is "preferred". */ if (!(sa->ifa_flags & IFA_F_DEPRECATED) && (sb->ifa_flags & IFA_F_DEPRECATED)) return SAS_PREFER_A; if ( (sa->ifa_flags & IFA_F_DEPRECATED) && !(sb->ifa_flags & IFA_F_DEPRECATED)) return SAS_PREFER_B; /* * Rule 4: Prefer home addresses. * If SA is simultaneously a home address and care-of address and SB is * not, then prefer SA. Similarly, if SB is simultaneously a home * address and care-of address and SA is not, then prefer SB. If SA is * just a home address and SB is just a care-of address, then prefer SA. * Similarly, if SB is just a home address and SA is just a care-of * address, then prefer SB. * * !!! not sure how to determine if care-of address */ if ( (sa->ifa_flags & IFA_F_HOMEADDRESS) && !(sb->ifa_flags & IFA_F_HOMEADDRESS)) return SAS_PREFER_A; if (!(sa->ifa_flags & IFA_F_HOMEADDRESS) && (sb->ifa_flags & IFA_F_HOMEADDRESS)) return SAS_PREFER_B; /* * Rule 5: Prefer outgoing interface. * If SA is assigned to the interface that will be used to send to D * and SB is assigned to a different interface, then prefer SA. * Similarly, if SB is assigned to the interface that will be used * to send to D and SA is assigned to a different interface, then * prefer SB. */ rd = _lws_route_est_outgoing(pt, (lws_sockaddr46 *)dst); if (rd) { if (rd->if_idx == sa->if_idx) return SAS_PREFER_A; if (rd->if_idx == sb->if_idx) return SAS_PREFER_B; } /* * Rule 6: Prefer matching label. * If Label(SA) = Label(D) and Label(SB) <> Label(D), then prefer SA. * Similarly, if Label(SB) = Label(D) and Label(SA) <> Label(D), then * prefer SB. */ lws_sort_dns_classify(to_sa46_sa(sa6), &scorea); lws_sort_dns_classify(to_sa46_sa(sb6), &scoreb); lws_sort_dns_classify(to_sa46_sa(dst), &scoredst); if (scorea.label == scoredst.label && scoreb.label != scoredst.label) return SAS_PREFER_A; if (scoreb.label == scoredst.label && scorea.label != scoredst.label) return SAS_PREFER_B; /* * Rule 7: Prefer temporary addresses. * If SA is a temporary address and SB is a public address, then * prefer SA. Similarly, if SB is a temporary address and SA is a * public address, then prefer SB. */ if ( (sa->ifa_flags & IFA_F_TEMPORARY) && !(sb->ifa_flags & IFA_F_TEMPORARY)) return SAS_PREFER_A; if (!(sa->ifa_flags & IFA_F_TEMPORARY) && (sb->ifa_flags & IFA_F_TEMPORARY)) return SAS_PREFER_B; /* * Rule 8: Use longest matching prefix. * If CommonPrefixLen(SA, D) > CommonPrefixLen(SB, D), then prefer SA. * Similarly, if CommonPrefixLen(SB, D) > CommonPrefixLen(SA, D), then * prefer SB. */ mla = lws_ipv6_prefix_match_len(sa6, dst); mlb = lws_ipv6_prefix_match_len(sb6, dst); if (mla > mlb) return SAS_PREFER_A; return SAS_SAME; } /* * Given two possible source addresses and the destination address, we attempt * to pick which one is "better". * * This implements RFC6724 Section 6. */ static int lws_sort_dns_dcomp(const lws_dns_sort_t *da, const lws_dns_sort_t *db) { int scopea, scopeb, scope_srca, scope_srcb, cpla, cplb; const uint8_t *da_ads = (const uint8_t *)&da->dest.sa6.sin6_addr, *db_ads = (const uint8_t *)&db->dest.sa6.sin6_addr; lws_dns_score_t score_srca, score_srcb; /* * Rule 1: Avoid unusable destinations * * We already strip destinations with no usable source */ /* * Rule 2: Prefer matching scope * * If Scope(DA) = Scope(Source(DA)) and Scope(DB) <> Scope(Source(DB)), * then prefer DA. Similarly, if Scope(DA) <> Scope(Source(DA)) and * Scope(DB) = Scope(Source(DB)), then prefer DB. */ scopea = lws_ipv6_unicast_scope(to_v6_sa(&da->dest)); scopeb = lws_ipv6_unicast_scope(to_v6_sa(&db->dest)); scope_srca = lws_ipv6_unicast_scope(to_v6_sa(&da->source)); scope_srcb = lws_ipv6_unicast_scope(to_v6_sa(&db->source)); if (scopea == scope_srca && scopeb != scope_srcb) return SAS_PREFER_A; if (scopea != scope_srca && scopeb == scope_srcb) return SAS_PREFER_B; #if defined(IFA_F_DEPRECATED) /* * Rule 3: Avoid deprecated addresses. * * If Source(DA) is deprecated and Source(DB) is not, then prefer DB. * Similarly, if Source(DA) is not deprecated and Source(DB) is * deprecated, then prefer DA. */ if (!(da->ifa_flags & IFA_F_DEPRECATED) && (db->ifa_flags & IFA_F_DEPRECATED)) return SAS_PREFER_A; if ( (da->ifa_flags & IFA_F_DEPRECATED) && !(db->ifa_flags & IFA_F_DEPRECATED)) return SAS_PREFER_B; #endif /* * Rule 4: Prefer home addresses. * * If Source(DA) is simultaneously a home address and care-of address * and Source(DB) is not, then prefer DA. Similarly, if Source(DB) is * simultaneously a home address and care-of address and Source(DA) is * not, then prefer DB. * * If Source(DA) is just a home address and Source(DB) is just a care-of * address, then prefer DA. Similarly, if Source(DA) is just a care-of * address and Source(DB) is just a home address, then prefer DB. * * !!! not sure how to determine if care-of address */ if ( (da->ifa_flags & IFA_F_HOMEADDRESS) && !(db->ifa_flags & IFA_F_HOMEADDRESS)) return SAS_PREFER_A; if (!(da->ifa_flags & IFA_F_HOMEADDRESS) && (db->ifa_flags & IFA_F_HOMEADDRESS)) return SAS_PREFER_B; /* * Rule 5: Prefer matching label. * * If Label(Source(DA)) = Label(DA) and Label(Source(DB)) <> Label(DB), * then prefer DA. Similarly, if Label(Source(DA)) <> Label(DA) and * Label(Source(DB)) = Label(DB), then prefer DB */ if (!da->source) return SAS_PREFER_B; if (!db->source) return SAS_PREFER_A; lws_sort_dns_classify(&da->source->dest, &score_srca); lws_sort_dns_classify(&db->source->dest, &score_srcb); if (score_srca.label == da->score.label && score_srcb.label != db->score.label) return SAS_PREFER_A; if (score_srca.label != da->score.label && score_srcb.label == db->score.label) return SAS_PREFER_B; /* * Rule 6: Prefer higher precedence. * * If Precedence(DA) > Precedence(DB), then prefer DA. Similarly, if * Precedence(DA) < Precedence(DB), then prefer DB. */ if (da->score.precedence > db->score.precedence) return SAS_PREFER_A; if (da->score.precedence < db->score.precedence) return SAS_PREFER_B; /* * Rule 7: Prefer native transport. * If DA is reached via an encapsulating transition mechanism (e.g., * IPv6 in IPv4) and DB is not, then prefer DB. Similarly, if DB is * reached via encapsulation and DA is not, then prefer DA. */ if (!memcmp(&ma[16], da_ads, 12) && memcmp(&ma[16], db_ads, 12)) return SAS_PREFER_B; if (memcmp(&ma[16], da_ads, 12) && !memcmp(&ma[16], db_ads, 12)) return SAS_PREFER_A; /* * Rule 8: Prefer smaller scope. * If Scope(DA) < Scope(DB), then prefer DA. Similarly, if Scope(DA) > * Scope(DB), then prefer DB. */ if (scopea < scopeb) return SAS_PREFER_A; if (scopea > scopeb) return SAS_PREFER_B; /* * Rule 9: Use longest matching prefix. * When DA and DB belong to the same address family (both are IPv6 or * both are IPv4): If CommonPrefixLen(Source(DA), DA) > * CommonPrefixLen(Source(DB), DB), then prefer DA. Similarly, if * CommonPrefixLen(Source(DA), DA) < CommonPrefixLen(Source(DB), DB), * then prefer DB. */ cpla = lws_ipv6_prefix_match_len(&da->source->dest.sa6, &da->dest.sa6); cplb = lws_ipv6_prefix_match_len(&db->source->dest.sa6, &db->dest.sa6); if (cpla > cplb) return SAS_PREFER_A; if (cpla < cplb) return SAS_PREFER_B; /* * Rule 10: Otherwise, leave the order unchanged. */ return SAS_SAME; } static int lws_sort_dns_compare(const lws_dll2_t *a, const lws_dll2_t *b) { const lws_dns_sort_t *sa = lws_container_of(a, lws_dns_sort_t, list), *sb = lws_container_of(b, lws_dns_sort_t, list); return lws_sort_dns_dcomp(sa, sb); } #endif /* ipv6 + netlink */ #if defined(_DEBUG) static void lws_sort_dns_dump(struct lws *wsi) { int n = 1; (void)n; /* nologs */ if (!lws_dll2_get_head(&wsi->dns_sorted_list)) lwsl_wsi_notice(wsi, "empty"); lws_start_foreach_dll(struct lws_dll2 *, d, lws_dll2_get_head(&wsi->dns_sorted_list)) { lws_dns_sort_t *s = lws_container_of(d, lws_dns_sort_t, list); char dest[48], gw[48]; lws_sa46_write_numeric_address(&s->dest, dest, sizeof(dest)); lws_sa46_write_numeric_address(&s->gateway, gw, sizeof(gw)); lwsl_wsi_info(wsi, "%d: (%d)%s, gw (%d)%s, idi: %d, " "lbl: %d, prec: %d", n++, s->dest.sa4.sin_family, dest, s->gateway.sa4.sin_family, gw, s->if_idx, s->score.label, s->score.precedence); } lws_end_foreach_dll(d); } #endif int lws_sort_dns(struct lws *wsi, const struct addrinfo *result) { #if defined(LWS_WITH_NETLINK) struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; #endif const struct addrinfo *ai = result; lwsl_wsi_info(wsi, "sort_dns: %p", result); /* * We're going to take the dns results and produce our own linked-list * of them, if we can sorted into descending preferability order, and * possibly filtered. * * First let's just convert the addrinfo list into our expanded * lws_dns_sort_t list, we can discard the addrinfo list then */ while (ai) { #if defined(LWS_WITH_NETLINK) || \ (defined(LWS_WITH_NETLINK) && defined(LWS_WITH_IPV6)) lws_route_t #if defined(LWS_WITH_NETLINK) *estr = NULL #endif #if defined(LWS_WITH_NETLINK) && defined(LWS_WITH_IPV6) , *bestsrc = NULL #endif ; #endif lws_dns_sort_t *ds; char afip[48]; /* * Only transfer address families we can cope with */ if ((int)ai->ai_addrlen > (int)sizeof(lws_sockaddr46) || (ai->ai_family != AF_INET && ai->ai_family != AF_INET6)) goto next; ds = lws_zalloc(sizeof(*ds), __func__); if (!ds) return 1; memcpy(&ds->dest, ai->ai_addr, (size_t)ai->ai_addrlen); ds->dest.sa4.sin_family = (sa_family_t)ai->ai_family; lws_sa46_write_numeric_address(&ds->dest, afip, sizeof(afip)); lwsl_wsi_info(wsi, "unsorted entry (af %d) %s", ds->dest.sa4.sin_family, afip); #if defined(LWS_WITH_NETLINK) /* * Let's assess this DNS result in terms of route * selection, eg, if no usable net route or gateway for it, * we don't have a way to use it if we listed it */ if (pt->context->routing_table.count) { estr = _lws_route_est_outgoing(pt, &ds->dest); if (!estr) { lws_free(ds); lwsl_wsi_notice(wsi, "%s has no route out\n", afip); /* * There's no outbound route for this, it's * unusable, so don't add it to the list */ goto next; } ds->if_idx = estr->if_idx; ds->uidx = estr->uidx; /* * ...evidently, there's a way for it to go out... */ } #endif #if defined(LWS_WITH_NETLINK) && defined(LWS_WITH_IPV6) /* * These sorting rules only apply to ipv6. If we have ipv4 * dest and estimate we will use an ipv4 source address to * route it, then skip this. * * However if we have ipv4 dest and estimate we will use an * ipv6 source address to route it, because of ipv6-only * egress, then promote it to ipv6 and sort it */ if (ds->dest.sa4.sin_family == AF_INET) { if (!estr || estr->dest.sa4.sin_family == AF_INET || estr->gateway.sa4.sin_family == AF_INET) /* * No estimated route, or v4 estimated route, * just add it to sorted list */ goto just_add; /* * v4 dest on estimated v6 source ads route, because * eg, there's no active v4 source ads just ipv6... * promote v4 -> v6 address using ::ffff:xx:yy */ lwsl_wsi_info(wsi, "promoting v4->v6"); lws_sa46_4to6(&ds->dest, (uint8_t *)&ds->dest.sa4.sin_addr, 0); } /* first, classify this destination ads */ lws_sort_dns_classify(&ds->dest, &ds->score); /* * RFC6724 Section 5: Source Address Selection * * Go through the source options choosing the best for this * destination... this can only operate on ipv6 destination * address */ lws_start_foreach_dll(struct lws_dll2 *, d, lws_dll2_get_head(&pt->context->routing_table)) { lws_route_t *r = lws_container_of(d, lws_route_t, list); /* gateway routes are skipped here */ if (ds->dest.sa6.sin6_family == AF_INET6 && r->dest.sa4.sin_family == AF_INET6 && (!bestsrc || lws_sort_dns_scomp(pt, bestsrc, r, &ds->dest.sa6) == SAS_PREFER_B)) bestsrc = r; } lws_end_foreach_dll(d); /* bestsrc is the best source route, or NULL if none */ if (!bestsrc && pt->context->routing_table.count) { /* drop it, no usable source route */ lws_free(ds); goto next; } just_add: if (!bestsrc) { lws_dll2_add_tail(&ds->list, &wsi->dns_sorted_list); goto next; } ds->source = bestsrc; /* * RFC6724 Section 6: Destination Address Selection * * Insert the destination into the list at a position reflecting * its preferability, so the head entry is the most preferred */ lws_dll2_add_sorted(&ds->list, &wsi->dns_sorted_list, lws_sort_dns_compare); #else /* * We don't have the routing table + source address details in * order to sort the DNS results... simply make entries in the * order of the addrinfo results */ lws_dll2_add_tail(&ds->list, &wsi->dns_sorted_list); #endif next: ai = ai->ai_next; } //lwsl_notice("%s: sorted table: %d\n", __func__, // wsi->dns_sorted_list.count); #if defined(_DEBUG) lws_sort_dns_dump(wsi); #endif return !wsi->dns_sorted_list.count; } libwebsockets-4.3.5/lib/core-net/close.c000066400000000000000000000660661476025525100201430ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #if defined(LWS_WITH_CLIENT) static int lws_close_trans_q_leader(struct lws_dll2 *d, void *user) { struct lws *w = lws_container_of(d, struct lws, dll2_cli_txn_queue); __lws_close_free_wsi(w, (enum lws_close_status)-1, "trans q leader closing"); return 0; } #endif void __lws_reset_wsi(struct lws *wsi) { if (!wsi) return; #if defined(LWS_WITH_CLIENT) lws_free_set_NULL(wsi->cli_hostname_copy); #if defined(LWS_WITH_CONMON) if (wsi->conmon.dns_results_copy) { lws_conmon_addrinfo_destroy(wsi->conmon.dns_results_copy); wsi->conmon.dns_results_copy = NULL; } wsi->conmon.ciu_dns = wsi->conmon.ciu_sockconn = wsi->conmon.ciu_tls = wsi->conmon.ciu_txn_resp = 0; #endif /* * if we have wsi in our transaction queue, if we are closing we * must go through and close all those first */ if (wsi->a.vhost) { /* we are no longer an active client connection that can piggyback */ lws_dll2_remove(&wsi->dll_cli_active_conns); lws_dll2_foreach_safe(&wsi->dll2_cli_txn_queue_owner, NULL, lws_close_trans_q_leader); /* * !!! If we are closing, but we have pending pipelined * transaction results we already sent headers for, that's going * to destroy sync for HTTP/1 and leave H2 stream with no live * swsi.` * * However this is normal if we are being closed because the * transaction queue leader is closing. */ lws_dll2_remove(&wsi->dll2_cli_txn_queue); } #endif if (wsi->a.vhost) { lws_vhost_lock(wsi->a.vhost); lws_dll2_remove(&wsi->vh_awaiting_socket); lws_vhost_unlock(wsi->a.vhost); } /* * Protocol user data may be allocated either internally by lws * or by specified the user. We should only free what we allocated. */ if (wsi->a.protocol && wsi->a.protocol->per_session_data_size && wsi->user_space && !wsi->user_space_externally_allocated) { /* confirm no sul left scheduled in user data itself */ lws_sul_debug_zombies(wsi->a.context, wsi->user_space, wsi->a.protocol->per_session_data_size, __func__); lws_free_set_NULL(wsi->user_space); } /* * Don't let buflist content or state from the wsi's previous life * carry over to the new life */ lws_buflist_destroy_all_segments(&wsi->buflist); lws_dll2_remove(&wsi->dll_buflist); lws_buflist_destroy_all_segments(&wsi->buflist_out); #if defined(LWS_WITH_UDP) if (wsi->udp) { /* confirm no sul left scheduled in wsi->udp itself */ lws_sul_debug_zombies(wsi->a.context, wsi->udp, sizeof(*wsi->udp), "close udp wsi"); lws_free_set_NULL(wsi->udp); } #endif wsi->retry = 0; #if defined(LWS_WITH_CLIENT) lws_dll2_remove(&wsi->dll2_cli_txn_queue); lws_dll2_remove(&wsi->dll_cli_active_conns); if (wsi->cli_hostname_copy) lws_free_set_NULL(wsi->cli_hostname_copy); #endif #if defined(LWS_WITH_SYS_ASYNC_DNS) lws_async_dns_cancel(wsi); #endif #if defined(LWS_WITH_HTTP_PROXY) if (wsi->http.buflist_post_body) lws_buflist_destroy_all_segments(&wsi->http.buflist_post_body); #endif #if defined(LWS_WITH_SERVER) lws_dll2_remove(&wsi->listen_list); #endif #if defined(LWS_WITH_CLIENT) if (wsi->a.vhost) lws_dll2_remove(&wsi->dll_cli_active_conns); #endif __lws_same_vh_protocol_remove(wsi); #if defined(LWS_WITH_CLIENT) //lws_free_set_NULL(wsi->stash); lws_free_set_NULL(wsi->cli_hostname_copy); #endif #if defined(LWS_WITH_PEER_LIMITS) lws_peer_track_wsi_close(wsi->a.context, wsi->peer); wsi->peer = NULL; #endif /* since we will destroy the wsi, make absolutely sure now */ #if defined(LWS_WITH_OPENSSL) __lws_ssl_remove_wsi_from_buffered_list(wsi); #endif __lws_wsi_remove_from_sul(wsi); if (lws_rops_fidx(wsi->role_ops, LWS_ROPS_destroy_role)) lws_rops_func_fidx(wsi->role_ops, LWS_ROPS_destroy_role).destroy_role(wsi); #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) __lws_header_table_detach(wsi, 0); #endif #if defined(LWS_ROLE_H2) /* * Let's try to clean out the h2-ness of the wsi */ memset(&wsi->h2, 0, sizeof(wsi->h2)); wsi->hdr_parsing_completed = wsi->mux_substream = wsi->upgraded_to_http2 = wsi->mux_stream_immortal = wsi->h2_acked_settings = wsi->seen_nonpseudoheader = wsi->socket_is_permanently_unusable = wsi->favoured_pollin = wsi->already_did_cce = wsi->told_user_closed = wsi->waiting_to_send_close_frame = wsi->close_needs_ack = wsi->parent_pending_cb_on_writable = wsi->seen_zero_length_recv = wsi->close_when_buffered_out_drained = wsi->could_have_pending = 0; #endif #if defined(LWS_WITH_CLIENT) wsi->do_ws = wsi->chunked = wsi->client_rx_avail = wsi->client_http_body_pending = wsi->transaction_from_pipeline_queue = wsi->keepalive_active = wsi->keepalive_rejected = wsi->redirected_to_get = wsi->client_pipeline = wsi->client_h2_alpn = wsi->client_mux_substream = wsi->client_mux_migrated = wsi->tls_session_reused = wsi->perf_done = 0; wsi->immortal_substream_count = 0; #endif } /* req cx lock */ void __lws_free_wsi(struct lws *wsi) { struct lws_vhost *vh; if (!wsi) return; lws_context_assert_lock_held(wsi->a.context); #if defined(LWS_WITH_SECURE_STREAMS) if (wsi->for_ss) { #if defined(LWS_WITH_SECURE_STREAMS_PROXY_API) if (wsi->client_bound_sspc) { lws_sspc_handle_t *h = (lws_sspc_handle_t *) wsi->a.opaque_user_data; if (h) { h->cwsi = NULL; wsi->a.opaque_user_data = NULL; } } else #endif { /* * Make certain it is disconnected from the ss by now */ lws_ss_handle_t *h = (lws_ss_handle_t *) wsi->a.opaque_user_data; if (h) { h->wsi = NULL; wsi->a.opaque_user_data = NULL; } } } #endif vh = wsi->a.vhost; __lws_reset_wsi(wsi); __lws_wsi_remove_from_sul(wsi); if (vh) /* this may destroy vh */ __lws_vhost_unbind_wsi(wsi); /* req cx + vh lock */ #if defined(LWS_WITH_CLIENT) if (wsi->stash) lws_free_set_NULL(wsi->stash); #endif if (wsi->a.context->event_loop_ops->destroy_wsi) wsi->a.context->event_loop_ops->destroy_wsi(wsi); lwsl_wsi_debug(wsi, "tsi fds count %d\n", wsi->a.context->pt[(int)wsi->tsi].fds_count); /* confirm no sul left scheduled in wsi itself */ lws_sul_debug_zombies(wsi->a.context, wsi, sizeof(*wsi), __func__); __lws_lc_untag(wsi->a.context, &wsi->lc); lws_free(wsi); } void lws_remove_child_from_any_parent(struct lws *wsi) { struct lws **pwsi; int seen = 0; if (!wsi->parent) return; /* detach ourselves from parent's child list */ pwsi = &wsi->parent->child_list; while (*pwsi) { if (*pwsi == wsi) { lwsl_wsi_info(wsi, "detach from parent %s", lws_wsi_tag(wsi->parent)); if (wsi->parent->a.protocol) wsi->parent->a.protocol->callback(wsi, LWS_CALLBACK_CHILD_CLOSING, wsi->parent->user_space, wsi, 0); *pwsi = wsi->sibling_list; seen = 1; break; } pwsi = &(*pwsi)->sibling_list; } if (!seen) lwsl_wsi_err(wsi, "failed to detach from parent"); wsi->parent = NULL; } #if defined(LWS_WITH_CLIENT) void lws_inform_client_conn_fail(struct lws *wsi, void *arg, size_t len) { lws_addrinfo_clean(wsi); if (wsi->already_did_cce) return; wsi->already_did_cce = 1; if (!wsi->a.protocol) return; if (!wsi->client_suppress_CONNECTION_ERROR) wsi->a.protocol->callback(wsi, LWS_CALLBACK_CLIENT_CONNECTION_ERROR, wsi->user_space, arg, len); } #endif void lws_addrinfo_clean(struct lws *wsi) { #if defined(LWS_WITH_CLIENT) struct lws_dll2 *d = lws_dll2_get_head(&wsi->dns_sorted_list), *d1; while (d) { lws_dns_sort_t *r = lws_container_of(d, lws_dns_sort_t, list); d1 = d->next; lws_dll2_remove(d); lws_free(r); d = d1; } #endif } /* requires cx and pt lock */ void __lws_close_free_wsi(struct lws *wsi, enum lws_close_status reason, const char *caller) { struct lws_context_per_thread *pt; const struct lws_protocols *pro; struct lws_context *context; struct lws *wsi1, *wsi2; int n, ccb; if (!wsi) return; lwsl_wsi_info(wsi, "caller: %s", caller); lws_access_log(wsi); if (!lws_dll2_is_detached(&wsi->dll_buflist)) lwsl_wsi_info(wsi, "going down with stuff in buflist"); context = wsi->a.context; pt = &context->pt[(int)wsi->tsi]; if (pt->pipe_wsi == wsi) pt->pipe_wsi = NULL; #if defined(LWS_WITH_SYS_METRICS) && \ (defined(LWS_WITH_CLIENT) || defined(LWS_WITH_SERVER)) /* wsi level: only reports if dangling caliper */ if (wsi->cal_conn.mt && wsi->cal_conn.us_start) { if ((lws_metrics_priv_to_pub(wsi->cal_conn.mt)->flags) & LWSMTFL_REPORT_HIST) { lws_metrics_caliper_report_hist(wsi->cal_conn, (struct lws *)NULL); } else { lws_metrics_caliper_report(wsi->cal_conn, METRES_NOGO); lws_metrics_caliper_done(wsi->cal_conn); } } else lws_metrics_caliper_done(wsi->cal_conn); #endif #if defined(LWS_WITH_SYS_ASYNC_DNS) if (wsi == context->async_dns.wsi) context->async_dns.wsi = NULL; #endif lws_pt_assert_lock_held(pt); #if defined(LWS_WITH_CLIENT) lws_free_set_NULL(wsi->cli_hostname_copy); wsi->client_mux_substream_was = wsi->client_mux_substream; lws_addrinfo_clean(wsi); #endif #if defined(LWS_WITH_HTTP2) if (wsi->mux_stream_immortal) lws_http_close_immortal(wsi); #endif /* if we have children, close them first */ if (wsi->child_list) { wsi2 = wsi->child_list; while (wsi2) { wsi1 = wsi2->sibling_list; // wsi2->parent = NULL; /* stop it doing shutdown processing */ wsi2->socket_is_permanently_unusable = 1; __lws_close_free_wsi(wsi2, reason, "general child recurse"); wsi2 = wsi1; } wsi->child_list = NULL; } #if defined(LWS_ROLE_RAW_FILE) if (wsi->role_ops == &role_ops_raw_file) { lws_remove_child_from_any_parent(wsi); __remove_wsi_socket_from_fds(wsi); if (wsi->a.protocol) wsi->a.protocol->callback(wsi, wsi->role_ops->close_cb[0], wsi->user_space, NULL, 0); goto async_close; } #endif wsi->wsistate_pre_close = wsi->wsistate; #ifdef LWS_WITH_CGI if (wsi->role_ops == &role_ops_cgi) { // lwsl_debug("%s: closing stdwsi index %d\n", __func__, (int)wsi->lsp_channel); /* we are not a network connection, but a handler for CGI io */ if (wsi->parent && wsi->parent->http.cgi) { /* * We need to keep the logical cgi around so we can * drain it */ // if (wsi->parent->child_list == wsi && !wsi->sibling_list) // lws_cgi_remove_and_kill(wsi->parent); /* end the binding between us and network connection */ if (wsi->parent->http.cgi && wsi->parent->http.cgi->lsp) wsi->parent->http.cgi->lsp->stdwsi[(int)wsi->lsp_channel] = NULL; } wsi->socket_is_permanently_unusable = 1; goto just_kill_connection; } if (wsi->http.cgi) lws_cgi_remove_and_kill(wsi); #endif #if defined(LWS_WITH_CLIENT) if (!wsi->close_is_redirect) lws_free_set_NULL(wsi->stash); #endif if (wsi->role_ops == &role_ops_raw_skt) { wsi->socket_is_permanently_unusable = 1; goto just_kill_connection; } #if defined(LWS_WITH_FILE_OPS) && (defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2)) if (lwsi_role_http(wsi) && lwsi_role_server(wsi) && wsi->http.fop_fd != NULL) lws_vfs_file_close(&wsi->http.fop_fd); #endif if (lwsi_state(wsi) == LRS_DEAD_SOCKET) return; if (wsi->socket_is_permanently_unusable || reason == LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY || lwsi_state(wsi) == LRS_SHUTDOWN) goto just_kill_connection; switch (lwsi_state_PRE_CLOSE(wsi)) { case LRS_DEAD_SOCKET: return; /* we tried the polite way... */ case LRS_WAITING_TO_SEND_CLOSE: case LRS_AWAITING_CLOSE_ACK: case LRS_RETURNED_CLOSE: goto just_kill_connection; case LRS_FLUSHING_BEFORE_CLOSE: if (lws_has_buffered_out(wsi) #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) || wsi->http.comp_ctx.buflist_comp || wsi->http.comp_ctx.may_have_more #endif ) { lws_callback_on_writable(wsi); return; } lwsl_wsi_info(wsi, " end LRS_FLUSHING_BEFORE_CLOSE"); goto just_kill_connection; default: if (lws_has_buffered_out(wsi) #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) || wsi->http.comp_ctx.buflist_comp || wsi->http.comp_ctx.may_have_more #endif ) { lwsl_wsi_info(wsi, "LRS_FLUSHING_BEFORE_CLOSE"); lwsi_set_state(wsi, LRS_FLUSHING_BEFORE_CLOSE); __lws_set_timeout(wsi, PENDING_FLUSH_STORED_SEND_BEFORE_CLOSE, 5); return; } break; } if (lwsi_state(wsi) == LRS_WAITING_CONNECT || lwsi_state(wsi) == LRS_WAITING_DNS || lwsi_state(wsi) == LRS_H1C_ISSUE_HANDSHAKE) goto just_kill_connection; if (!wsi->told_user_closed && wsi->user_space && wsi->a.protocol && wsi->protocol_bind_balance) { wsi->a.protocol->callback(wsi, wsi->role_ops->protocol_unbind_cb[ !!lwsi_role_server(wsi)], wsi->user_space, (void *)__func__, 0); wsi->protocol_bind_balance = 0; } /* * signal we are closing, lws_write will * add any necessary version-specific stuff. If the write fails, * no worries we are closing anyway. If we didn't initiate this * close, then our state has been changed to * LRS_RETURNED_CLOSE and we will skip this. * * Likewise if it's a second call to close this connection after we * sent the close indication to the peer already, we are in state * LRS_AWAITING_CLOSE_ACK and will skip doing this a second time. */ if (lws_rops_fidx(wsi->role_ops, LWS_ROPS_close_via_role_protocol) && lws_rops_func_fidx(wsi->role_ops, LWS_ROPS_close_via_role_protocol). close_via_role_protocol(wsi, reason)) { lwsl_wsi_info(wsi, "close_via_role took over (sockfd %d)", wsi->desc.sockfd); return; } just_kill_connection: lwsl_wsi_debug(wsi, "real just_kill_connection A: (sockfd %d)", wsi->desc.sockfd); #if defined(LWS_WITH_THREADPOOL) && defined(LWS_HAVE_PTHREAD_H) lws_threadpool_wsi_closing(wsi); #endif #if defined(LWS_WITH_FILE_OPS) && (defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2)) if (lwsi_role_http(wsi) && lwsi_role_server(wsi) && wsi->http.fop_fd != NULL) lws_vfs_file_close(&wsi->http.fop_fd); #endif lws_sul_cancel(&wsi->sul_connect_timeout); #if defined(LWS_WITH_SYS_ASYNC_DNS) lws_async_dns_cancel(wsi); #endif #if defined(LWS_WITH_HTTP_PROXY) if (wsi->http.buflist_post_body) lws_buflist_destroy_all_segments(&wsi->http.buflist_post_body); #endif #if defined(LWS_WITH_UDP) if (wsi->udp) { /* confirm no sul left scheduled in wsi->udp itself */ lws_sul_debug_zombies(wsi->a.context, wsi->udp, sizeof(*wsi->udp), "close udp wsi"); lws_free_set_NULL(wsi->udp); } #endif if (lws_rops_fidx(wsi->role_ops, LWS_ROPS_close_kill_connection)) lws_rops_func_fidx(wsi->role_ops, LWS_ROPS_close_kill_connection). close_kill_connection(wsi, reason); n = 0; if (!wsi->told_user_closed && wsi->user_space && wsi->protocol_bind_balance && wsi->a.protocol) { lwsl_debug("%s: %s: DROP_PROTOCOL %s\n", __func__, lws_wsi_tag(wsi), wsi->a.protocol ? wsi->a.protocol->name: "NULL"); if (wsi->a.protocol) wsi->a.protocol->callback(wsi, wsi->role_ops->protocol_unbind_cb[ !!lwsi_role_server(wsi)], wsi->user_space, (void *)__func__, 0); wsi->protocol_bind_balance = 0; } #if defined(LWS_WITH_CLIENT) if (( #if defined(LWS_ROLE_WS) /* * If our goal is a ws upgrade, effectively we did not reach * ESTABLISHED if we did not get the upgrade server reply */ (lwsi_state(wsi) == LRS_WAITING_SERVER_REPLY && wsi->role_ops == &role_ops_ws) || #endif lwsi_state(wsi) == LRS_WAITING_DNS || lwsi_state(wsi) == LRS_WAITING_CONNECT) && !wsi->already_did_cce && wsi->a.protocol && !wsi->close_is_redirect) { static const char _reason[] = "closed before established"; lwsl_wsi_debug(wsi, "closing in unestablished state 0x%x", lwsi_state(wsi)); wsi->socket_is_permanently_unusable = 1; lws_inform_client_conn_fail(wsi, (void *)_reason, sizeof(_reason)); } #endif /* * Testing with ab shows that we have to stage the socket close when * the system is under stress... shutdown any further TX, change the * state to one that won't emit anything more, and wait with a timeout * for the POLLIN to show a zero-size rx before coming back and doing * the actual close. */ if (wsi->role_ops != &role_ops_raw_skt && !lwsi_role_client(wsi) && lwsi_state(wsi) != LRS_SHUTDOWN && lwsi_state(wsi) != LRS_UNCONNECTED && reason != LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY && !wsi->socket_is_permanently_unusable) { #if defined(LWS_WITH_TLS) if (lws_is_ssl(wsi) && wsi->tls.ssl) { n = 0; switch (__lws_tls_shutdown(wsi)) { case LWS_SSL_CAPABLE_DONE: case LWS_SSL_CAPABLE_ERROR: case LWS_SSL_CAPABLE_MORE_SERVICE_READ: case LWS_SSL_CAPABLE_MORE_SERVICE_WRITE: case LWS_SSL_CAPABLE_MORE_SERVICE: break; } } else #endif { lwsl_info("%s: shutdown conn: %s (sk %d, state 0x%x)\n", __func__, lws_wsi_tag(wsi), (int)(lws_intptr_t)wsi->desc.sockfd, lwsi_state(wsi)); if (!wsi->socket_is_permanently_unusable && lws_socket_is_valid(wsi->desc.sockfd)) { wsi->socket_is_permanently_unusable = 1; n = shutdown(wsi->desc.sockfd, SHUT_WR); } } if (n) lwsl_wsi_debug(wsi, "closing: shutdown (state 0x%x) ret %d", lwsi_state(wsi), LWS_ERRNO); /* * This causes problems on WINCE / ESP32 with disconnection * when the events are half closing connection */ #if !defined(_WIN32_WCE) && !defined(LWS_PLAT_FREERTOS) /* libuv: no event available to guarantee completion */ if (!wsi->socket_is_permanently_unusable && #if defined(LWS_WITH_CLIENT) !wsi->close_is_redirect && #endif lws_socket_is_valid(wsi->desc.sockfd) && lwsi_state(wsi) != LRS_SHUTDOWN && (context->event_loop_ops->flags & LELOF_ISPOLL)) { __lws_change_pollfd(wsi, LWS_POLLOUT, LWS_POLLIN); lwsi_set_state(wsi, LRS_SHUTDOWN); __lws_set_timeout(wsi, PENDING_TIMEOUT_SHUTDOWN_FLUSH, (int)context->timeout_secs); return; } #endif } lwsl_wsi_info(wsi, "real just_kill_connection: sockfd %d\n", wsi->desc.sockfd); #ifdef LWS_WITH_HUBBUB if (wsi->http.rw) { lws_rewrite_destroy(wsi->http.rw); wsi->http.rw = NULL; } #endif if (wsi->http.pending_return_headers) lws_free_set_NULL(wsi->http.pending_return_headers); /* * we won't be servicing or receiving anything further from this guy * delete socket from the internal poll list if still present */ __lws_ssl_remove_wsi_from_buffered_list(wsi); __lws_wsi_remove_from_sul(wsi); //if (wsi->told_event_loop_closed) // cgi std close case (dummy-callback) // return; /* checking return redundant since we anyway close */ __remove_wsi_socket_from_fds(wsi); lwsi_set_state(wsi, LRS_DEAD_SOCKET); lws_buflist_destroy_all_segments(&wsi->buflist); lws_dll2_remove(&wsi->dll_buflist); if (lws_rops_fidx(wsi->role_ops, LWS_ROPS_close_role)) lws_rops_func_fidx(wsi->role_ops, LWS_ROPS_close_role). close_role(pt, wsi); /* tell the user it's all over for this guy */ ccb = 0; if ((lwsi_state_est_PRE_CLOSE(wsi) || /* raw skt adopted but didn't complete tls hs should CLOSE */ (wsi->role_ops == &role_ops_raw_skt && !lwsi_role_client(wsi)) || lwsi_state_PRE_CLOSE(wsi) == LRS_WAITING_SERVER_REPLY) && !wsi->told_user_closed && wsi->role_ops->close_cb[lwsi_role_server(wsi)]) { if (!wsi->upgraded_to_http2 || !lwsi_role_client(wsi)) ccb = 1; /* * The network wsi for a client h2 connection shouldn't * call back for its role: the child stream connections * own the role. Otherwise h2 will call back closed * one too many times as the children do it and then * the closing network stream. */ } if (!wsi->told_user_closed && !lws_dll2_is_detached(&wsi->vh_awaiting_socket)) /* * He's a guy who go started with dns, but failed or is * caught with a shutdown before he got the result. We have * to issclient_mux_substream_wasue him a close cb */ ccb = 1; lwsl_wsi_info(wsi, "cce=%d", ccb); pro = wsi->a.protocol; if (wsi->already_did_cce) /* * If we handled this by CLIENT_CONNECTION_ERROR, it's * mutually exclusive with CLOSE */ ccb = 0; #if defined(LWS_WITH_CLIENT) if (!wsi->close_is_redirect && !ccb && (lwsi_state_PRE_CLOSE(wsi) & LWSIFS_NOT_EST) && lwsi_role_client(wsi)) { lws_inform_client_conn_fail(wsi, "Closed before conn", 18); } #endif if (ccb #if defined(LWS_WITH_CLIENT) && !wsi->close_is_redirect #endif ) { if (!wsi->a.protocol && wsi->a.vhost && wsi->a.vhost->protocols) pro = &wsi->a.vhost->protocols[0]; if (pro) pro->callback(wsi, wsi->role_ops->close_cb[lwsi_role_server(wsi)], wsi->user_space, NULL, 0); wsi->told_user_closed = 1; } #if defined(LWS_ROLE_RAW_FILE) async_close: #endif #if defined(LWS_WITH_SECURE_STREAMS) if (wsi->for_ss) { lwsl_wsi_debug(wsi, "for_ss"); /* * We were adopted for a particular ss, but, eg, we may not * have succeeded with the connection... we are closing which is * good, but we have to invalidate any pointer the related ss * handle may be holding on us */ #if defined(LWS_WITH_SECURE_STREAMS_PROXY_API) if (wsi->client_proxy_onward) { /* * We are an onward proxied wsi at the proxy, * opaque is proxing "conn", we must remove its pointer * to us since we are destroying */ lws_proxy_clean_conn_ss(wsi); } else if (wsi->client_bound_sspc) { lws_sspc_handle_t *h = (lws_sspc_handle_t *)wsi->a.opaque_user_data; if (h) { // && (h->info.flags & LWSSSINFLAGS_ACCEPTED)) { #if defined(LWS_WITH_SYS_METRICS) /* * If any hanging caliper measurement, dump it, and free any tags */ lws_metrics_caliper_report_hist(h->cal_txn, (struct lws *)NULL); #endif h->cwsi = NULL; //wsi->a.opaque_user_data = NULL; } } else #endif { lws_ss_handle_t *h = (lws_ss_handle_t *)wsi->a.opaque_user_data; if (h) { // && (h->info.flags & LWSSSINFLAGS_ACCEPTED)) { /* * ss level: only reports if dangling caliper * not already reported */ lws_metrics_caliper_report_hist(h->cal_txn, wsi); h->wsi = NULL; wsi->a.opaque_user_data = NULL; if (h->ss_dangling_connected && lws_ss_event_helper(h, LWSSSCS_DISCONNECTED) == LWSSSSRET_DESTROY_ME) { lws_ss_destroy(&h); } } } } #endif lws_remove_child_from_any_parent(wsi); wsi->socket_is_permanently_unusable = 1; if (wsi->a.context->event_loop_ops->wsi_logical_close) if (wsi->a.context->event_loop_ops->wsi_logical_close(wsi)) return; __lws_close_free_wsi_final(wsi); } /* cx + vh lock */ void __lws_close_free_wsi_final(struct lws *wsi) { int n; if (!wsi->shadow && lws_socket_is_valid(wsi->desc.sockfd) && !lws_ssl_close(wsi)) { lwsl_wsi_debug(wsi, "fd %d", wsi->desc.sockfd); /* * if this is the pt pipe, skip the actual close, * go through the motions though so we will reach 0 open wsi * on the pt, and trigger the pt destroy to close the pipe fds */ if (!lws_plat_pipe_is_fd_assocated(wsi->a.context, wsi->tsi, wsi->desc.sockfd)) { n = compatible_close(wsi->desc.sockfd); if (n) lwsl_wsi_debug(wsi, "closing: close ret %d", LWS_ERRNO); } __remove_wsi_socket_from_fds(wsi); if (lws_socket_is_valid(wsi->desc.sockfd)) delete_from_fd(wsi->a.context, wsi->desc.sockfd); #if !defined(LWS_PLAT_FREERTOS) && !defined(WIN32) && !defined(LWS_PLAT_OPTEE) delete_from_fdwsi(wsi->a.context, wsi); #endif sanity_assert_no_sockfd_traces(wsi->a.context, wsi->desc.sockfd); } /* ... if we're closing the cancel pipe, account for it */ { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; if (pt->pipe_wsi == wsi) pt->pipe_wsi = NULL; if (pt->dummy_pipe_fds[0] == wsi->desc.sockfd) pt->dummy_pipe_fds[0] = LWS_SOCK_INVALID; } wsi->desc.sockfd = LWS_SOCK_INVALID; #if defined(LWS_WITH_CLIENT) lws_free_set_NULL(wsi->cli_hostname_copy); if (wsi->close_is_redirect) { wsi->close_is_redirect = 0; lwsl_wsi_info(wsi, "picking up redirection"); lws_role_transition(wsi, LWSIFR_CLIENT, LRS_UNCONNECTED, &role_ops_h1); #if defined(LWS_WITH_HTTP2) if (wsi->client_mux_substream_was) wsi->h2.END_STREAM = wsi->h2.END_HEADERS = 0; #endif #if defined(LWS_ROLE_H2) || defined(LWS_ROLE_MQTT) if (wsi->mux.parent_wsi) { lws_wsi_mux_sibling_disconnect(wsi); wsi->mux.parent_wsi = NULL; } #endif #if defined(LWS_WITH_TLS) memset(&wsi->tls, 0, sizeof(wsi->tls)); #endif // wsi->a.protocol = NULL; if (wsi->a.protocol) lws_bind_protocol(wsi, wsi->a.protocol, "client_reset"); wsi->pending_timeout = NO_PENDING_TIMEOUT; wsi->hdr_parsing_completed = 0; #if defined(LWS_WITH_TLS) if (wsi->stash->cis[CIS_ALPN]) lws_strncpy(wsi->alpn, wsi->stash->cis[CIS_ALPN], sizeof(wsi->alpn)); #endif if (lws_header_table_attach(wsi, 0)) { lwsl_wsi_err(wsi, "failed to get ah"); return; } // } //_lws_header_table_reset(wsi->http.ah); #if defined(LWS_WITH_TLS) wsi->tls.use_ssl = (unsigned int)wsi->flags; #endif #if defined(LWS_WITH_TLS_JIT_TRUST) if (wsi->stash && wsi->stash->cis[CIS_ADDRESS]) { struct lws_vhost *vh = NULL; lws_tls_jit_trust_vhost_bind(wsi->a.context, wsi->stash->cis[CIS_ADDRESS], &vh); if (vh) { if (!vh->count_bound_wsi && vh->grace_after_unref) { lwsl_wsi_info(wsi, "%s in use\n", vh->lc.gutag); lws_sul_cancel(&vh->sul_unref); } vh->count_bound_wsi++; wsi->a.vhost = vh; } } #endif return; } #endif /* outermost destroy notification for wsi (user_space still intact) */ if (wsi->a.vhost) wsi->a.vhost->protocols[0].callback(wsi, LWS_CALLBACK_WSI_DESTROY, wsi->user_space, NULL, 0); #ifdef LWS_WITH_CGI if (wsi->http.cgi) { lws_spawn_piped_destroy(&wsi->http.cgi->lsp); lws_sul_cancel(&wsi->http.cgi->sul_grace); lws_free_set_NULL(wsi->http.cgi); } #endif #if defined(LWS_WITH_SYS_FAULT_INJECTION) lws_fi_destroy(&wsi->fic); #endif __lws_wsi_remove_from_sul(wsi); sanity_assert_no_wsi_traces(wsi->a.context, wsi); __lws_free_wsi(wsi); } void lws_close_free_wsi(struct lws *wsi, enum lws_close_status reason, const char *caller) { struct lws_context *cx = wsi->a.context; struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; lws_context_lock(cx, __func__); lws_pt_lock(pt, __func__); /* may destroy vhost, cannot hold vhost lock outside it */ __lws_close_free_wsi(wsi, reason, caller); lws_pt_unlock(pt); lws_context_unlock(cx); } libwebsockets-4.3.5/lib/core-net/dummy-callback.c000066400000000000000000000557261476025525100217240ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" /* max individual proxied header payload size */ #define MAXHDRVAL 1024 #if defined(LWS_WITH_HTTP_PROXY) static int proxy_header(struct lws *wsi, struct lws *par, unsigned char *temp, int temp_len, int index, unsigned char **p, unsigned char *end) { int n = lws_hdr_total_length(par, (enum lws_token_indexes)index); if (n < 1) { lwsl_wsi_debug(wsi, "no index %d:", index); return 0; } if (lws_hdr_copy(par, (char *)temp, temp_len, (enum lws_token_indexes)index) < 0) { lwsl_wsi_notice(wsi, "unable to copy par hdr idx %d (len %d)", index, n); return -1; } lwsl_wsi_debug(wsi, "index %d: %s", index, (char *)temp); if (lws_add_http_header_by_token(wsi, (enum lws_token_indexes)index, temp, n, p, end)) { lwsl_wsi_notice(wsi, "unable to append par hdr idx %d (len %d)", index, n); return -1; } return 0; } static int stream_close(struct lws *wsi) { char buf[LWS_PRE + 6], *out = buf + LWS_PRE; if (wsi->http.did_stream_close) return 0; wsi->http.did_stream_close = 1; if (wsi->mux_substream) { if (lws_write(wsi, (unsigned char *)buf + LWS_PRE, 0, LWS_WRITE_HTTP_FINAL) < 0) goto bail; return 0; } *out++ = '0'; *out++ = '\x0d'; *out++ = '\x0a'; *out++ = '\x0d'; *out++ = '\x0a'; if (lws_write(wsi, (unsigned char *)buf + LWS_PRE, 5, LWS_WRITE_HTTP_FINAL) < 0) goto bail; return 0; bail: lwsl_wsi_info(wsi, "h2 fin wr failed"); return -1; } #endif struct lws_proxy_pkt { struct lws_dll2 pkt_list; size_t len; char binary; char first; char final; /* data follows */ }; #if defined(LWS_WITH_HTTP_PROXY) && defined(LWS_ROLE_WS) int lws_callback_ws_proxy(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct lws_proxy_pkt *pkt; struct lws_dll2 *dll; switch (reason) { /* h1 ws proxying... child / client / onward */ case LWS_CALLBACK_CLIENT_ESTABLISHED: if (!wsi->h1_ws_proxied || !wsi->parent) break; if (lws_process_ws_upgrade2(wsi->parent)) return -1; #if defined(LWS_WITH_HTTP2) if (wsi->parent->mux_substream) lwsl_wsi_info(wsi, "proxied h2 -> h1 ws established"); #endif break; case LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED: return 1; case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: case LWS_CALLBACK_CLIENT_CLOSED: lwsl_wsi_info(wsi, "client closed: parent %s", lws_wsi_tag(wsi->parent)); if (wsi->parent) lws_set_timeout(wsi->parent, 1, LWS_TO_KILL_ASYNC); break; case LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER: { unsigned char **p = (unsigned char **)in, *end = (*p) + len, tmp[MAXHDRVAL]; proxy_header(wsi, wsi->parent, tmp, sizeof(tmp), WSI_TOKEN_HTTP_ACCEPT_LANGUAGE, p, end); proxy_header(wsi, wsi->parent, tmp, sizeof(tmp), WSI_TOKEN_HTTP_COOKIE, p, end); proxy_header(wsi, wsi->parent, tmp, sizeof(tmp), WSI_TOKEN_HTTP_SET_COOKIE, p, end); break; } case LWS_CALLBACK_CLIENT_RECEIVE: wsi->parent->ws->proxy_buffered += len; if (wsi->parent->ws->proxy_buffered > 10 * 1024 * 1024) { lwsl_wsi_err(wsi, "proxied ws connection " "excessive buffering: dropping"); return -1; } pkt = lws_zalloc(sizeof(*pkt) + LWS_PRE + len, __func__); if (!pkt) return -1; pkt->len = len; pkt->first = (char)lws_is_first_fragment(wsi); pkt->final = (char)lws_is_final_fragment(wsi); pkt->binary = (char)lws_frame_is_binary(wsi); memcpy(((uint8_t *)&pkt[1]) + LWS_PRE, in, len); lws_dll2_add_tail(&pkt->pkt_list, &wsi->parent->ws->proxy_owner); lws_callback_on_writable(wsi->parent); break; case LWS_CALLBACK_CLIENT_WRITEABLE: dll = lws_dll2_get_head(&wsi->ws->proxy_owner); if (!dll) break; pkt = (struct lws_proxy_pkt *)dll; if (lws_write(wsi, ((unsigned char *)&pkt[1]) + LWS_PRE, pkt->len, (enum lws_write_protocol)lws_write_ws_flags( pkt->binary ? LWS_WRITE_BINARY : LWS_WRITE_TEXT, pkt->first, pkt->final)) < 0) return -1; lws_dll2_remove(dll); lws_free(pkt); if (lws_dll2_get_head(&wsi->ws->proxy_owner)) lws_callback_on_writable(wsi); break; /* h1 ws proxying... parent / server / incoming */ case LWS_CALLBACK_CONFIRM_EXTENSION_OKAY: return 1; case LWS_CALLBACK_CLOSED: lwsl_wsi_info(wsi, "closed"); return -1; case LWS_CALLBACK_RECEIVE: pkt = lws_zalloc(sizeof(*pkt) + LWS_PRE + len, __func__); if (!pkt) return -1; pkt->len = len; pkt->first = (char)lws_is_first_fragment(wsi); pkt->final = (char)lws_is_final_fragment(wsi); pkt->binary = (char)lws_frame_is_binary(wsi); memcpy(((uint8_t *)&pkt[1]) + LWS_PRE, in, len); lws_dll2_add_tail(&pkt->pkt_list, &wsi->child_list->ws->proxy_owner); lws_callback_on_writable(wsi->child_list); break; case LWS_CALLBACK_SERVER_WRITEABLE: dll = lws_dll2_get_head(&wsi->ws->proxy_owner); if (!dll) break; pkt = (struct lws_proxy_pkt *)dll; if (lws_write(wsi, ((unsigned char *)&pkt[1]) + LWS_PRE, pkt->len, (enum lws_write_protocol)lws_write_ws_flags( pkt->binary ? LWS_WRITE_BINARY : LWS_WRITE_TEXT, pkt->first, pkt->final)) < 0) return -1; wsi->ws->proxy_buffered -= pkt->len; lws_dll2_remove(dll); lws_free(pkt); if (lws_dll2_get_head(&wsi->ws->proxy_owner)) lws_callback_on_writable(wsi); break; default: return 0; } return 0; } const struct lws_protocols lws_ws_proxy = { "lws-ws-proxy", lws_callback_ws_proxy, 0, 8192, 8192, NULL, 0 }; #endif int lws_callback_http_dummy(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct lws_ssl_info *si; #ifdef LWS_WITH_CGI struct lws_cgi_args *args; #endif #if defined(LWS_WITH_CGI) || defined(LWS_WITH_HTTP_PROXY) char buf[LWS_PRE + 32 + 8192]; int n; #endif #if defined(LWS_WITH_HTTP_PROXY) unsigned char **p, *end; struct lws *parent; #endif switch (reason) { #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) case LWS_CALLBACK_HTTP: #if defined(LWS_WITH_SERVER) if (lws_return_http_status(wsi, HTTP_STATUS_NOT_FOUND, NULL)) return -1; if (lws_http_transaction_completed(wsi)) #endif return -1; break; #if defined(LWS_WITH_SERVER) case LWS_CALLBACK_HTTP_BODY_COMPLETION: #if defined(LWS_WITH_HTTP_PROXY) if (wsi->child_list) { lwsl_wsi_info(wsi, "HTTP_BODY_COMPLETION: %d", (int)len); lws_callback_on_writable(wsi->child_list); break; } #endif if (lws_return_http_status(wsi, 200, NULL)) return -1; break; /* fallthru */ case LWS_CALLBACK_HTTP_FILE_COMPLETION: if (lws_http_transaction_completed(wsi)) return -1; break; #endif #if defined(LWS_WITH_HTTP_PROXY) case LWS_CALLBACK_HTTP_BODY: if (wsi->child_list) { lwsl_wsi_info(wsi, "HTTP_BODY: stashing %d", (int)len); if (lws_buflist_append_segment( &wsi->http.buflist_post_body, in, len) < 0) return -1; lws_client_http_body_pending(wsi->child_list, 1); lws_callback_on_writable(wsi->child_list); } break; #endif case LWS_CALLBACK_HTTP_WRITEABLE: // lwsl_err("%s: LWS_CALLBACK_HTTP_WRITEABLE\n", __func__); #ifdef LWS_WITH_CGI if (wsi->reason_bf & (LWS_CB_REASON_AUX_BF__CGI_HEADERS | LWS_CB_REASON_AUX_BF__CGI)) { n = lws_cgi_write_split_stdout_headers(wsi); if (n < 0) { lwsl_wsi_debug(wsi, "AUX_BF__CGI forcing close"); return -1; } if (!n && wsi->http.cgi && wsi->http.cgi->lsp && wsi->http.cgi->lsp->stdwsi[LWS_STDOUT]) lws_rx_flow_control( wsi->http.cgi->lsp->stdwsi[LWS_STDOUT], 1); if (wsi->reason_bf & LWS_CB_REASON_AUX_BF__CGI_HEADERS) wsi->reason_bf &= (char)~LWS_CB_REASON_AUX_BF__CGI_HEADERS; else wsi->reason_bf &= (char)~LWS_CB_REASON_AUX_BF__CGI; if (wsi->http.cgi && wsi->http.cgi->cgi_transaction_over) { lwsl_wsi_info(wsi, "txn over"); return -1; } break; } if ((wsi->http.cgi && wsi->http.cgi->cgi_transaction_over) || (wsi->reason_bf & LWS_CB_REASON_AUX_BF__CGI_CHUNK_END)) { if (!wsi->mux_substream) { memcpy(buf + LWS_PRE, "0\x0d\x0a\x0d\x0a", 5); lwsl_wsi_debug(wsi, "wr chunk term and exiting"); lws_write(wsi, (unsigned char *)buf + LWS_PRE, 5, LWS_WRITE_HTTP); } else lws_write(wsi, (unsigned char *)buf + LWS_PRE, 0, LWS_WRITE_HTTP_FINAL); /* always close after sending it */ if (lws_http_transaction_completed(wsi)) return -1; return 0; } #endif #if defined(LWS_WITH_HTTP_PROXY) if (wsi->reason_bf & LWS_CB_REASON_AUX_BF__PROXY_HEADERS) { wsi->reason_bf &= (char)~LWS_CB_REASON_AUX_BF__PROXY_HEADERS; n = LWS_WRITE_HTTP_HEADERS; if (!wsi->http.prh_content_length) n |= LWS_WRITE_H2_STREAM_END; lwsl_wsi_debug(wsi, "issuing proxy headers: clen %d", (int)wsi->http.prh_content_length); n = lws_write(wsi, wsi->http.pending_return_headers + LWS_PRE, wsi->http.pending_return_headers_len, (enum lws_write_protocol)n); lws_free_set_NULL(wsi->http.pending_return_headers); if (n < 0) { lwsl_wsi_err(wsi, "EST_CLIENT_HTTP: wr failed"); return -1; } lws_callback_on_writable(wsi); break; } if (wsi->reason_bf & LWS_CB_REASON_AUX_BF__PROXY) { char *px = buf + LWS_PRE; int lenx = sizeof(buf) - LWS_PRE - 32; /* * our sink is writeable and our source has something * to read. So read a lump of source material of * suitable size to send or what's available, whichever * is the smaller. */ wsi->reason_bf &= (char)~LWS_CB_REASON_AUX_BF__PROXY; if (!lws_get_child(wsi)) break; /* this causes LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ */ if (lws_http_client_read(lws_get_child(wsi), &px, &lenx) < 0) { lwsl_wsi_info(wsi, "LWS_CB_REASON_AUX_BF__PROXY: " "client closed"); stream_close(wsi); return -1; } break; } if (wsi->reason_bf & LWS_CB_REASON_AUX_BF__PROXY_TRANS_END) { lwsl_wsi_info(wsi, "PROXY_TRANS_END"); wsi->reason_bf &= (char)~LWS_CB_REASON_AUX_BF__PROXY_TRANS_END; if (stream_close(wsi)) return -1; if (lws_http_transaction_completed(wsi)) return -1; } #endif break; #if defined(LWS_WITH_HTTP_PROXY) case LWS_CALLBACK_RECEIVE_CLIENT_HTTP: assert(lws_get_parent(wsi)); if (!lws_get_parent(wsi)) break; lws_get_parent(wsi)->reason_bf |= LWS_CB_REASON_AUX_BF__PROXY; lws_callback_on_writable(lws_get_parent(wsi)); break; case LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ: { char *out = buf + LWS_PRE; assert(lws_get_parent(wsi)); if (wsi->http.proxy_parent_chunked) { if (len > sizeof(buf) - LWS_PRE - 16) { lwsl_wsi_err(wsi, "oversize buf %d %d", (int)len, (int)sizeof(buf) - LWS_PRE - 16); return -1; } /* * this only needs dealing with on http/1.1 to allow * pipelining */ n = lws_snprintf(out, 14, "%X\x0d\x0a", (int)len); out += n; memcpy(out, in, len); out += len; *out++ = '\x0d'; *out++ = '\x0a'; n = lws_write(lws_get_parent(wsi), (unsigned char *)buf + LWS_PRE, (size_t)(unsigned int)(len + (unsigned int)n + 2), LWS_WRITE_HTTP); } else n = lws_write(lws_get_parent(wsi), (unsigned char *)in, len, LWS_WRITE_HTTP); if (n < 0) return -1; break; } /* h1 http proxying... */ case LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: { unsigned char *start, *p, *end; /* * We want to proxy these headers, but we are being called * at the point the onward client was established, which is * unrelated to the state or writability of our proxy * connection. * * Therefore produce the headers using the onward client ah * while we have it, and stick them on the output buflist to be * written on the proxy connection as soon as convenient. */ parent = lws_get_parent(wsi); if (!parent) return 0; start = p = (unsigned char *)buf + LWS_PRE; end = p + sizeof(buf) - LWS_PRE - MAXHDRVAL; if (lws_add_http_header_status(lws_get_parent(wsi), lws_http_client_http_response(wsi), &p, end)) return 1; /* * copy these headers from the client connection to the parent */ proxy_header(parent, wsi, end, MAXHDRVAL, WSI_TOKEN_HTTP_CONTENT_LENGTH, &p, end); proxy_header(parent, wsi, end, MAXHDRVAL, WSI_TOKEN_HTTP_CONTENT_TYPE, &p, end); proxy_header(parent, wsi, end, MAXHDRVAL, WSI_TOKEN_HTTP_ETAG, &p, end); proxy_header(parent, wsi, end, MAXHDRVAL, WSI_TOKEN_HTTP_ACCEPT_LANGUAGE, &p, end); proxy_header(parent, wsi, end, MAXHDRVAL, WSI_TOKEN_HTTP_CONTENT_ENCODING, &p, end); proxy_header(parent, wsi, end, MAXHDRVAL, WSI_TOKEN_HTTP_CACHE_CONTROL, &p, end); proxy_header(parent, wsi, end, MAXHDRVAL, WSI_TOKEN_HTTP_SET_COOKIE, &p, end); proxy_header(parent, wsi, end, MAXHDRVAL, WSI_TOKEN_HTTP_LOCATION, &p, end); if (!parent->mux_substream) if (lws_add_http_header_by_token(parent, WSI_TOKEN_CONNECTION, (unsigned char *)"close", 5, &p, end)) return -1; /* * We proxy using h1 only atm, and strip any chunking so it * can go back out on h2 just fine. * * However if we are actually going out on h1, we need to add * our own chunking since we still don't know the size. */ if (!parent->mux_substream && !lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH)) { lwsl_wsi_debug(wsi, "downstream parent chunked"); if (lws_add_http_header_by_token(parent, WSI_TOKEN_HTTP_TRANSFER_ENCODING, (unsigned char *)"chunked", 7, &p, end)) return -1; wsi->http.proxy_parent_chunked = 1; } if (lws_finalize_http_header(parent, &p, end)) return 1; parent->http.prh_content_length = (size_t)-1; if (lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH)) parent->http.prh_content_length = (size_t)atoll( lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH)); parent->http.pending_return_headers_len = lws_ptr_diff_size_t(p, start); parent->http.pending_return_headers = lws_malloc(parent->http.pending_return_headers_len + LWS_PRE, "return proxy headers"); if (!parent->http.pending_return_headers) return -1; memcpy(parent->http.pending_return_headers + LWS_PRE, start, parent->http.pending_return_headers_len); parent->reason_bf |= LWS_CB_REASON_AUX_BF__PROXY_HEADERS; lwsl_wsi_debug(wsi, "ESTABLISHED_CLIENT_HTTP: " "prepared %d headers (len %d)", lws_http_client_http_response(wsi), (int)parent->http.prh_content_length); /* * so at this point, the onward client connection can bear * traffic. We might be doing a POST and have pending cached * inbound stuff to send, it can go now. */ lws_callback_on_writable(parent); break; } case LWS_CALLBACK_COMPLETED_CLIENT_HTTP: lwsl_wsi_info(wsi, "COMPLETED_CLIENT_HTTP: (parent %s)", lws_wsi_tag(lws_get_parent(wsi))); if (!lws_get_parent(wsi)) break; lws_get_parent(wsi)->reason_bf |= LWS_CB_REASON_AUX_BF__PROXY_TRANS_END; lws_callback_on_writable(lws_get_parent(wsi)); break; case LWS_CALLBACK_CLOSED_CLIENT_HTTP: if (!lws_get_parent(wsi)) break; // lwsl_err("%s: LWS_CALLBACK_CLOSED_CLIENT_HTTP\n", __func__); lws_set_timeout(lws_get_parent(wsi), (enum pending_timeout)LWS_TO_KILL_ASYNC, (int)PENDING_TIMEOUT_KILLED_BY_PROXY_CLIENT_CLOSE); break; case LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER: parent = lws_get_parent(wsi); if (!parent) break; p = (unsigned char **)in; end = (*p) + len; /* * copy these headers from the parent request to the client * connection's request */ proxy_header(wsi, parent, (unsigned char *)buf, sizeof(buf), WSI_TOKEN_HTTP_ETAG, p, end); proxy_header(wsi, parent, (unsigned char *)buf, sizeof(buf), WSI_TOKEN_HTTP_IF_MODIFIED_SINCE, p, end); proxy_header(wsi, parent, (unsigned char *)buf, sizeof(buf), WSI_TOKEN_HTTP_ACCEPT_LANGUAGE, p, end); proxy_header(wsi, parent, (unsigned char *)buf, sizeof(buf), WSI_TOKEN_HTTP_ACCEPT_ENCODING, p, end); proxy_header(wsi, parent, (unsigned char *)buf, sizeof(buf), WSI_TOKEN_HTTP_CACHE_CONTROL, p, end); proxy_header(wsi, parent, (unsigned char *)buf, sizeof(buf), WSI_TOKEN_HTTP_COOKIE, p, end); buf[0] = '\0'; lws_get_peer_simple(parent, buf, sizeof(buf)); if (lws_add_http_header_by_token(wsi, WSI_TOKEN_X_FORWARDED_FOR, (unsigned char *)buf, (int)strlen(buf), p, end)) return -1; break; #endif #ifdef LWS_WITH_CGI /* CGI IO events (POLLIN/OUT) appear here, our default policy is: * * - POST data goes on subprocess stdin * - subprocess stdout goes on http via writeable callback * - subprocess stderr goes to the logs */ case LWS_CALLBACK_CGI: args = (struct lws_cgi_args *)in; switch (args->ch) { /* which of stdin/out/err ? */ case LWS_STDIN: /* TBD stdin rx flow control */ break; case LWS_STDOUT: if (args->stdwsi[LWS_STDOUT]) /* quench POLLIN on STDOUT until MASTER got writeable */ lws_rx_flow_control(args->stdwsi[LWS_STDOUT], 0); wsi->reason_bf |= LWS_CB_REASON_AUX_BF__CGI; /* when writing to MASTER would not block */ lws_callback_on_writable(wsi); break; case LWS_STDERR: n = lws_get_socket_fd(args->stdwsi[LWS_STDERR]); if (n < 0) break; n = (int)read(n, buf, sizeof(buf) - 2); if (n > 0) { if (buf[n - 1] != '\n') buf[n++] = '\n'; buf[n] = '\0'; lwsl_wsi_notice(wsi, "CGI-stderr: %s", buf); } break; } break; case LWS_CALLBACK_CGI_TERMINATED: if (wsi->http.cgi) { lwsl_wsi_debug(wsi, "CGI_TERMINATED: %d %" PRIu64, wsi->http.cgi->explicitly_chunked, (uint64_t)wsi->http.cgi->content_length); if (!(wsi->http.cgi->explicitly_chunked && wsi->mux_substream) && !wsi->http.cgi->content_length) { /* send terminating chunk */ lwsl_wsi_debug(wsi, "LWS_CALLBACK_CGI_TERMINATED: ending"); wsi->reason_bf |= LWS_CB_REASON_AUX_BF__CGI_CHUNK_END; lws_callback_on_writable(wsi); lws_set_timeout(wsi, PENDING_TIMEOUT_CGI, 3); break; } if (wsi->mux_substream && !wsi->cgi_stdout_zero_length) lws_write(wsi, (unsigned char *)buf + LWS_PRE, 0, LWS_WRITE_HTTP_FINAL); } #if defined(LWS_WITH_SERVER) if (lws_http_transaction_completed(wsi)) return -1; #endif return 0; case LWS_CALLBACK_CGI_STDIN_DATA: /* POST body for stdin */ args = (struct lws_cgi_args *)in; args->data[args->len] = '\0'; if (!args->stdwsi[LWS_STDIN]) return -1; n = lws_get_socket_fd(args->stdwsi[LWS_STDIN]); if (n < 0) return -1; #if defined(LWS_WITH_ZLIB) if (wsi->http.cgi->gzip_inflate) { /* gzip handling */ if (!wsi->http.cgi->gzip_init) { lwsl_wsi_info(wsi, "inflating gzip"); memset(&wsi->http.cgi->inflate, 0, sizeof(wsi->http.cgi->inflate)); if (inflateInit2(&wsi->http.cgi->inflate, 16 + 15) != Z_OK) { lwsl_wsi_err(wsi, "iniflateInit fail"); return -1; } wsi->http.cgi->gzip_init = 1; } wsi->http.cgi->inflate.next_in = args->data; wsi->http.cgi->inflate.avail_in = (unsigned int)args->len; do { wsi->http.cgi->inflate.next_out = wsi->http.cgi->inflate_buf; wsi->http.cgi->inflate.avail_out = sizeof(wsi->http.cgi->inflate_buf); n = inflate(&wsi->http.cgi->inflate, Z_SYNC_FLUSH); switch (n) { case Z_NEED_DICT: case Z_STREAM_ERROR: case Z_DATA_ERROR: case Z_MEM_ERROR: inflateEnd(&wsi->http.cgi->inflate); wsi->http.cgi->gzip_init = 0; lwsl_wsi_err(wsi, "zlib err inflate %d", n); return -1; } if (wsi->http.cgi->inflate.avail_out != sizeof(wsi->http.cgi->inflate_buf)) { int written; written = (int)write(args->stdwsi[LWS_STDIN]->desc.filefd, wsi->http.cgi->inflate_buf, sizeof(wsi->http.cgi->inflate_buf) - wsi->http.cgi->inflate.avail_out); if (written != (int)( sizeof(wsi->http.cgi->inflate_buf) - wsi->http.cgi->inflate.avail_out)) { lwsl_wsi_notice(wsi, "CGI_STDIN_DATA: " "sent %d only %d went", n, args->len); } if (n == Z_STREAM_END) { lwsl_wsi_err(wsi, "gzip inflate end"); inflateEnd(&wsi->http.cgi->inflate); wsi->http.cgi->gzip_init = 0; break; } } else break; if (wsi->http.cgi->inflate.avail_out) break; } while (1); return args->len; } #endif /* WITH_ZLIB */ n = (int)write(n, args->data, (unsigned int)args->len); // lwsl_hexdump_notice(args->data, args->len); if (n < args->len) lwsl_wsi_notice(wsi, "CGI_STDIN_DATA: " "sent %d only %d went", n, args->len); lwsl_wsi_info(wsi, "proxied %d bytes", n); if (wsi->http.cgi->post_in_expected && args->stdwsi[LWS_STDIN] && args->stdwsi[LWS_STDIN]->desc.filefd > 0) { wsi->http.cgi->post_in_expected -= (unsigned int)n; if (!wsi->http.cgi->post_in_expected) { struct lws *siwsi = args->stdwsi[LWS_STDIN]; /* * The situation here is that we finished * proxying the incoming body from the net to * the STDIN stdwsi... and we want to close it * so it can understand we are done (necessary * if no content-length)... */ lwsl_wsi_info(siwsi, "expected POST in end: " "closing stdin fd %d", siwsi->desc.sockfd); /* * We don't want the child / parent relationship * to be handled in close, since we want the * rest of the cgi and children to stay up */ lws_remove_child_from_any_parent(siwsi); lws_wsi_close(siwsi, LWS_TO_KILL_ASYNC); wsi->http.cgi->lsp->stdwsi[LWS_STDIN] = NULL; lws_spawn_stdwsi_closed(wsi->http.cgi->lsp, siwsi); } } return n; #endif /* WITH_CGI */ #endif /* ROLE_ H1 / H2 */ case LWS_CALLBACK_SSL_INFO: si = in; (void)si; lwsl_wsi_notice(wsi, "SSL_INFO: where: 0x%x, ret: 0x%x", si->where, si->ret); break; #if LWS_MAX_SMP > 1 case LWS_CALLBACK_GET_THREAD_ID: #ifdef __PTW32_H /* If we use implementation of PThreads for Win that is * distributed by VCPKG */ return (int)(lws_intptr_t)(pthread_self()).p; #else return (int)(lws_intptr_t)pthread_self(); #endif // __PTW32_H #endif default: break; } return 0; } libwebsockets-4.3.5/lib/core-net/lws-dsh.c000066400000000000000000000250501476025525100204030ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" struct lws_dsh_search { size_t required; int kind; lws_dsh_obj_t *best; lws_dsh_t *dsh; lws_dsh_t *already_checked; lws_dsh_t *this_dsh; }; static int _lws_dsh_alloc_tail(lws_dsh_t *dsh, int kind, const void *src1, size_t size1, const void *src2, size_t size2, lws_dll2_t *replace); static size_t lws_dsh_align(size_t length) { size_t align = sizeof(int *); if (length & (align - 1)) length += align - (length & (align - 1)); return length; } lws_dsh_t * lws_dsh_create(lws_dll2_owner_t *owner, size_t buf_len, int count_kinds) { size_t oha_len = sizeof(lws_dsh_obj_head_t) * (unsigned int)(++count_kinds); lws_dsh_obj_t *obj; lws_dsh_t *dsh; int n; assert(buf_len); assert(count_kinds > 1); assert(buf_len > sizeof(lws_dsh_t) + oha_len); buf_len += 64; dsh = lws_malloc(sizeof(lws_dsh_t) + buf_len + oha_len, __func__); if (!dsh) return NULL; /* set convenience pointers to the overallocated parts */ dsh->oha = (lws_dsh_obj_head_t *)&dsh[1]; dsh->buf = ((uint8_t *)dsh->oha) + oha_len; dsh->count_kinds = count_kinds; dsh->buffer_size = buf_len; dsh->being_destroyed = 0; /* clear down the obj heads array */ memset(dsh->oha, 0, oha_len); for (n = 0; n < count_kinds; n++) { dsh->oha[n].kind = n; dsh->oha[n].total_size = 0; } /* initially the whole buffer is on the free kind (0) list */ obj = (lws_dsh_obj_t *)dsh->buf; memset(obj, 0, sizeof(*obj)); obj->asize = buf_len - sizeof(*obj); lws_dll2_add_head(&obj->list, &dsh->oha[0].owner); dsh->locally_free = obj->asize; dsh->locally_in_use = 0; lws_dll2_clear(&dsh->list); if (owner) lws_dll2_add_head(&dsh->list, owner); // lws_dsh_describe(dsh, "post-init"); return dsh; } static int search_best_free(struct lws_dll2 *d, void *user) { struct lws_dsh_search *s = (struct lws_dsh_search *)user; lws_dsh_obj_t *obj = lws_container_of(d, lws_dsh_obj_t, list); lwsl_debug("%s: obj %p, asize %zu (req %zu)\n", __func__, obj, obj->asize, s->required); if (obj->asize >= s->required && (!s->best || obj->asize < s->best->asize)) { s->best = obj; s->dsh = s->this_dsh; } return 0; } void lws_dsh_destroy(lws_dsh_t **pdsh) { lws_dsh_t *dsh = *pdsh; if (!dsh) return; dsh->being_destroyed = 1; lws_dll2_remove(&dsh->list); /* everything else is in one heap allocation */ lws_free_set_NULL(*pdsh); } size_t lws_dsh_get_size(struct lws_dsh *dsh, int kind) { kind++; assert(kind < dsh->count_kinds); return dsh->oha[kind].total_size; } static int _lws_dsh_alloc_tail(lws_dsh_t *dsh, int kind, const void *src1, size_t size1, const void *src2, size_t size2, lws_dll2_t *replace) { size_t asize = sizeof(lws_dsh_obj_t) + lws_dsh_align(size1 + size2); struct lws_dsh_search s; assert(kind >= 0); kind++; assert(!dsh || kind < dsh->count_kinds); /* * Search our free list looking for the smallest guy who will fit * what we want to allocate */ s.required = asize; s.kind = kind; s.best = NULL; s.already_checked = NULL; s.this_dsh = dsh; if (dsh && !dsh->being_destroyed) lws_dll2_foreach_safe(&dsh->oha[0].owner, &s, search_best_free); if (!s.best) { lwsl_notice("%s: no buffer has space\n", __func__); return 1; } /* anything coming out of here must be aligned */ assert(!(((unsigned long)s.best) & (sizeof(int *) - 1))); if (s.best->asize < asize + (2 * sizeof(*s.best))) { /* * Exact fit, or close enough we can't / don't want to have to * track the little bit of free area that would be left. * * Move the object from the free list to the oha of the * desired kind */ lws_dll2_remove(&s.best->list); s.best->dsh = s.dsh; s.best->kind = kind; s.best->size = size1 + size2; memcpy(&s.best[1], src1, size1); if (src2) memcpy((uint8_t *)&s.best[1] + size1, src2, size2); if (replace) { s.best->list.prev = replace->prev; s.best->list.next = replace->next; s.best->list.owner = replace->owner; if (replace->prev) replace->prev->next = &s.best->list; if (replace->next) replace->next->prev = &s.best->list; } else if (dsh) { assert(!(((unsigned long)(intptr_t)(s.best)) & (sizeof(int *) - 1))); lws_dll2_add_tail(&s.best->list, &dsh->oha[kind].owner); } assert(s.dsh->locally_free >= s.best->asize); s.dsh->locally_free -= s.best->asize; s.dsh->locally_in_use += s.best->asize; dsh->oha[kind].total_size += s.best->asize; assert(s.dsh->locally_in_use <= s.dsh->buffer_size); } else { lws_dsh_obj_t *obj; /* * Free area was oversize enough that we need to split it. * * Leave the first part of the free area where it is and * reduce its extent by our asize. Use the latter part of * the original free area as the allocation. */ lwsl_debug("%s: splitting... free reduce %zu -> %zu\n", __func__, s.best->asize, s.best->asize - asize); s.best->asize -= asize; /* latter part becomes new object */ obj = (lws_dsh_obj_t *)(((uint8_t *)s.best) + lws_dsh_align(s.best->asize)); lws_dll2_clear(&obj->list); obj->dsh = s.dsh; obj->kind = kind; obj->size = size1 + size2; obj->asize = asize; memcpy(&obj[1], src1, size1); if (src2) memcpy((uint8_t *)&obj[1] + size1, src2, size2); if (replace) { s.best->list.prev = replace->prev; s.best->list.next = replace->next; s.best->list.owner = replace->owner; if (replace->prev) replace->prev->next = &s.best->list; if (replace->next) replace->next->prev = &s.best->list; } else if (dsh) { assert(!(((unsigned long)(intptr_t)(obj)) & (sizeof(int *) - 1))); lws_dll2_add_tail(&obj->list, &dsh->oha[kind].owner); } assert(s.dsh->locally_free >= asize); s.dsh->locally_free -= asize; s.dsh->locally_in_use += asize; dsh->oha[kind].total_size += asize; assert(s.dsh->locally_in_use <= s.dsh->buffer_size); } // lws_dsh_describe(dsh, "post-alloc"); return 0; } int lws_dsh_alloc_tail(lws_dsh_t *dsh, int kind, const void *src1, size_t size1, const void *src2, size_t size2) { return _lws_dsh_alloc_tail(dsh, kind, src1, size1, src2, size2, NULL); } static int buf_compare(const lws_dll2_t *d, const lws_dll2_t *i) { return (int)lws_ptr_diff(d, i); } void lws_dsh_free(void **pobj) { lws_dsh_obj_t *_o = (lws_dsh_obj_t *)((uint8_t *)(*pobj) - sizeof(*_o)), *_o2; lws_dsh_t *dsh = _o->dsh; /* anything coming out of here must be aligned */ assert(!(((unsigned long)_o) & (sizeof(int *) - 1))); /* * Remove the object from its list and place on the free list of the * dsh the buffer space belongs to */ lws_dll2_remove(&_o->list); *pobj = NULL; assert(dsh->locally_in_use >= _o->asize); dsh->locally_free += _o->asize; dsh->locally_in_use -= _o->asize; dsh->oha[_o->kind].total_size -= _o->asize; /* account for usage by kind */ assert(dsh->locally_in_use <= dsh->buffer_size); /* * The free space list is sorted in buffer address order, so detecting * coalescing opportunities is cheap. Because the free list should be * continuously tending to reduce by coalescing, the sorting should not * be expensive to maintain. */ _o->size = 0; /* not meaningful when on free list */ lws_dll2_add_sorted(&_o->list, &_o->dsh->oha[0].owner, buf_compare); /* First check for already-free block at the end we can subsume. * Because the free list is sorted, if there is such a guy he is * already our list.next */ _o2 = (lws_dsh_obj_t *)_o->list.next; if (_o2 && (uint8_t *)_o + _o->asize == (uint8_t *)_o2) { /* * since we are freeing _obj, we can coalesce with a * free area immediately ahead of it * * [ _o (being freed) ][ _o2 (free) ] -> [ larger _o ] */ _o->asize += _o2->asize; /* guy next to us was absorbed into us */ lws_dll2_remove(&_o2->list); } /* Then check if we can be subsumed by a free block behind us. * Because the free list is sorted, if there is such a guy he is * already our list.prev */ _o2 = (lws_dsh_obj_t *)_o->list.prev; if (_o2 && (uint8_t *)_o2 + _o2->asize == (uint8_t *)_o) { /* * since we are freeing obj, we can coalesce it with * the previous free area that abuts it * * [ _o2 (free) ][ _o (being freed) ] -> [ larger _o2 ] */ _o2->asize += _o->asize; /* we were absorbed! */ lws_dll2_remove(&_o->list); } // lws_dsh_describe(dsh, "post-alloc"); } int lws_dsh_get_head(lws_dsh_t *dsh, int kind, void **obj, size_t *size) { lws_dsh_obj_t *_obj; if (!dsh) return 1; _obj = (lws_dsh_obj_t *)lws_dll2_get_head(&dsh->oha[kind + 1].owner); if (!_obj) { *obj = 0; *size = 0; return 1; /* there is no head */ } *obj = (void *)(&_obj[1]); *size = _obj->size; /* anything coming out of here must be aligned */ assert(!(((unsigned long)(intptr_t)(*obj)) & (sizeof(int *) - 1))); return 0; /* we returned the head */ } #if defined(_DEBUG) && !defined(LWS_WITH_NO_LOGS) static int describe_kind(struct lws_dll2 *d, void *user) { lws_dsh_obj_t *obj = lws_container_of(d, lws_dsh_obj_t, list); lwsl_info(" _obj %p - %p, dsh %p, size %zu, asize %zu\n", obj, (uint8_t *)obj + obj->asize, obj->dsh, obj->size, obj->asize); return 0; } void lws_dsh_describe(lws_dsh_t *dsh, const char *desc) { int n = 0; lwsl_info("%s: dsh %p, bufsize %zu, kinds %d, lf: %zu, liu: %zu, %s\n", __func__, dsh, dsh->buffer_size, dsh->count_kinds, dsh->locally_free, dsh->locally_in_use, desc); for (n = 0; n < dsh->count_kinds; n++) { lwsl_info(" Kind %d:\n", n); lws_dll2_foreach_safe(&dsh->oha[n].owner, dsh, describe_kind); } } #endif libwebsockets-4.3.5/lib/core-net/network.c000066400000000000000000000574771476025525100205350ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include #if !defined(LWS_PLAT_FREERTOS) && !defined(LWS_PLAT_OPTEE) static int interface_to_sa(struct lws_vhost *vh, const char *ifname, struct sockaddr_in *addr, size_t addrlen, int allow_ipv6) { int ipv6 = 0; #ifdef LWS_WITH_IPV6 if (allow_ipv6) ipv6 = LWS_IPV6_ENABLED(vh); #endif (void)vh; return lws_interface_to_sa(ipv6, ifname, addr, addrlen); } #endif #ifndef LWS_PLAT_OPTEE static int lws_get_addresses(struct lws_vhost *vh, void *ads, char *name, int name_len, char *rip, int rip_len) { struct addrinfo ai, *res; struct sockaddr_in addr4; rip[0] = '\0'; name[0] = '\0'; addr4.sin_family = AF_UNSPEC; #ifdef LWS_WITH_IPV6 if (LWS_IPV6_ENABLED(vh)) { if (!lws_plat_inet_ntop(AF_INET6, &((struct sockaddr_in6 *)ads)->sin6_addr, rip, (socklen_t)rip_len)) { lwsl_vhost_err(vh, "inet_ntop: %s", strerror(LWS_ERRNO)); return -1; } // Strip off the IPv4 to IPv6 header if one exists if (strncmp(rip, "::ffff:", 7) == 0) memmove(rip, rip + 7, strlen(rip) - 6); getnameinfo((struct sockaddr *)ads, sizeof(struct sockaddr_in6), name, #if defined(__ANDROID__) (size_t)name_len, #else (socklen_t)name_len, #endif NULL, 0, 0); return 0; } else #endif { struct addrinfo *result; memset(&ai, 0, sizeof ai); ai.ai_family = PF_UNSPEC; ai.ai_socktype = SOCK_STREAM; #if !defined(LWS_PLAT_FREERTOS) if (getnameinfo((struct sockaddr *)ads, sizeof(struct sockaddr_in), name, #if defined(__ANDROID__) (size_t)name_len, #else (socklen_t)name_len, #endif NULL, 0, 0)) return -1; #endif if (getaddrinfo(name, NULL, &ai, &result)) return -1; res = result; while (addr4.sin_family == AF_UNSPEC && res) { switch (res->ai_family) { case AF_INET: addr4.sin_addr = ((struct sockaddr_in *)res->ai_addr)->sin_addr; addr4.sin_family = AF_INET; break; } res = res->ai_next; } freeaddrinfo(result); } if (addr4.sin_family == AF_UNSPEC) return -1; if (lws_plat_inet_ntop(AF_INET, &addr4.sin_addr, rip, (socklen_t)rip_len) == NULL) return -1; return 0; } const char * lws_get_peer_simple_fd(lws_sockfd_type fd, char *name, size_t namelen) { lws_sockaddr46 sa46; socklen_t len = sizeof(sa46); if (getpeername(fd, (struct sockaddr *)&sa46, &len) < 0) { lws_snprintf(name, namelen, "getpeername: %s", strerror(LWS_ERRNO)); return name; } lws_sa46_write_numeric_address(&sa46, name, namelen); return name; } const char * lws_get_peer_simple(struct lws *wsi, char *name, size_t namelen) { wsi = lws_get_network_wsi(wsi); return lws_get_peer_simple_fd(wsi->desc.sockfd, name, namelen); } #endif void lws_get_peer_addresses(struct lws *wsi, lws_sockfd_type fd, char *name, int name_len, char *rip, int rip_len) { #ifndef LWS_PLAT_OPTEE socklen_t len; #ifdef LWS_WITH_IPV6 struct sockaddr_in6 sin6; #endif struct sockaddr_in sin4; void *p; rip[0] = '\0'; name[0] = '\0'; #ifdef LWS_WITH_IPV6 if (LWS_IPV6_ENABLED(wsi->a.vhost)) { len = sizeof(sin6); p = &sin6; } else #endif { len = sizeof(sin4); p = &sin4; } if (getpeername(fd, p, &len) < 0) { lwsl_wsi_warn(wsi, "getpeername: %s", strerror(LWS_ERRNO)); goto bail; } lws_get_addresses(wsi->a.vhost, p, name, name_len, rip, rip_len); bail: #endif (void)wsi; (void)fd; (void)name; (void)name_len; (void)rip; (void)rip_len; } /* note: this returns a random port, or one of these <= 0 return codes: * * LWS_ITOSA_USABLE: the interface is usable, returned if so and sockfd invalid * LWS_ITOSA_NOT_EXIST: the requested iface does not even exist * LWS_ITOSA_NOT_USABLE: the requested iface exists but is not usable (eg, no IP) * LWS_ITOSA_BUSY: the port at the requested iface + port is already in use */ int lws_socket_bind(struct lws_vhost *vhost, struct lws *wsi, lws_sockfd_type sockfd, int port, const char *iface, int af) { #ifdef LWS_WITH_UNIX_SOCK struct sockaddr_un serv_unix; #endif #ifdef LWS_WITH_IPV6 struct sockaddr_in6 serv_addr6; #endif struct sockaddr_in serv_addr4; #ifndef LWS_PLAT_OPTEE socklen_t len = sizeof(struct sockaddr_storage); #endif int n = 0; #if !defined(LWS_PLAT_FREERTOS) && !defined(LWS_PLAT_OPTEE) int m; #endif struct sockaddr_storage sin, *psin = &sin; struct sockaddr *v; memset(&sin, 0, sizeof(sin)); /* if there's a wsi, we want to mark it with our source ads:port */ if (wsi) psin = (struct sockaddr_storage *)&wsi->sa46_local; switch (af) { #if defined(LWS_WITH_UNIX_SOCK) case AF_UNIX: v = (struct sockaddr *)&serv_unix; memset(&serv_unix, 0, sizeof(serv_unix)); serv_unix.sun_family = AF_UNIX; if (!iface) return LWS_ITOSA_NOT_EXIST; if (sizeof(serv_unix.sun_path) <= strlen(iface)) { lwsl_wsi_err(wsi, "\"%s\" too long for UNIX domain socket", iface); return LWS_ITOSA_NOT_EXIST; } n = (int)(sizeof(uint16_t) + strlen(iface)); strcpy(serv_unix.sun_path, iface); if (serv_unix.sun_path[0] == '@') serv_unix.sun_path[0] = '\0'; else unlink(serv_unix.sun_path); // lwsl_hexdump_notice(v, n); break; #endif #if defined(LWS_WITH_IPV6) && !defined(LWS_PLAT_FREERTOS) case AF_INET6: v = (struct sockaddr *)&serv_addr6; n = sizeof(struct sockaddr_in6); memset(&serv_addr6, 0, sizeof(serv_addr6)); serv_addr6.sin6_family = AF_INET6; if (iface) { m = interface_to_sa(vhost, iface, (struct sockaddr_in *)v, (unsigned int)n, 1); if (m == LWS_ITOSA_NOT_USABLE) { lwsl_wsi_info(wsi, "netif %s: Not usable", iface); return m; } if (m == LWS_ITOSA_NOT_EXIST) { lwsl_wsi_info(wsi, "netif %s: Does not exist", iface); return m; } serv_addr6.sin6_scope_id = (unsigned int)htonl((uint32_t) lws_get_addr_scope(wsi, iface)); } serv_addr6.sin6_port = (uint16_t)htons((uint16_t)port); break; #endif case AF_INET: v = (struct sockaddr *)&serv_addr4; n = sizeof(serv_addr4); memset(&serv_addr4, 0, sizeof(serv_addr4)); serv_addr4.sin_addr.s_addr = INADDR_ANY; serv_addr4.sin_family = AF_INET; #if !defined(LWS_PLAT_FREERTOS) && !defined(LWS_PLAT_OPTEE) if (iface) { m = interface_to_sa(vhost, iface, (struct sockaddr_in *)v, (unsigned int)n, 0); if (m == LWS_ITOSA_NOT_USABLE) { lwsl_wsi_info(wsi, "netif %s: Not usable", iface); return m; } if (m == LWS_ITOSA_NOT_EXIST) { lwsl_wsi_info(wsi, "netif %s: Does not exist", iface); return m; } } #endif serv_addr4.sin_port = htons((uint16_t)(unsigned int)port); break; default: return -1; } /* switch */ /* just checking for the interface extant */ if (sockfd == LWS_SOCK_INVALID) return LWS_ITOSA_USABLE; n = bind(sockfd, v, (socklen_t)n); #ifdef LWS_WITH_UNIX_SOCK if (n < 0 && af == AF_UNIX) { lwsl_wsi_err(wsi, "ERROR on binding fd %d to \"%s\" (%d %d)", sockfd, iface, n, LWS_ERRNO); return LWS_ITOSA_NOT_EXIST; } else #endif if (n < 0) { int _lws_errno = LWS_ERRNO; lwsl_wsi_err(wsi, "ERROR on binding fd %d to port %d (%d %d)", sockfd, port, n, _lws_errno); /* if something already listening, tell caller to fail permanently */ if (_lws_errno == LWS_EADDRINUSE) return LWS_ITOSA_BUSY; /* otherwise ask caller to retry later */ return LWS_ITOSA_NOT_EXIST; } #if defined(LWS_WITH_UNIX_SOCK) && !defined(WIN32) if (af == AF_UNIX) { uid_t uid = vhost->context->uid; gid_t gid = vhost->context->gid; if (vhost->unix_socket_perms) { if (lws_plat_user_colon_group_to_ids( vhost->unix_socket_perms, &uid, &gid)) { lwsl_wsi_err(wsi, "Failed to translate %s", vhost->unix_socket_perms); return LWS_ITOSA_NOT_EXIST; } } if (iface && iface[0] != '@' && uid && gid) { if (chown(iface, uid, gid)) { lwsl_wsi_err(wsi, "failed to set %s perms %u:%u", iface, (unsigned int)uid, (unsigned int)gid); return LWS_ITOSA_NOT_EXIST; } lwsl_wsi_notice(wsi, "vh %s unix skt %s perms %u:%u", vhost->name, iface, (unsigned int)uid, (unsigned int)gid); if (chmod(iface, 0660)) { lwsl_wsi_err(wsi, "0600 mode on %s fail", iface); return LWS_ITOSA_NOT_EXIST; } } } #endif #ifndef LWS_PLAT_OPTEE if (getsockname(sockfd, (struct sockaddr *)psin, &len) == -1) lwsl_wsi_warn(wsi, "getsockname: %s", strerror(LWS_ERRNO)); else #endif #if defined(LWS_WITH_IPV6) port = (sin.ss_family == AF_INET6) ? ntohs(((struct sockaddr_in6 *)psin)->sin6_port) : ntohs(((struct sockaddr_in *)psin)->sin_port); #else { struct sockaddr_in sain; memcpy(&sain, psin, sizeof(sain)); port = ntohs(sain.sin_port); } #endif { char buf[72]; lws_sa46_write_numeric_address((lws_sockaddr46 *)psin, buf, sizeof(buf)); lwsl_vhost_notice(vhost, "source ads %s", buf); } return port; } #if defined(LWS_WITH_CLIENT) unsigned int lws_retry_get_delay_ms(struct lws_context *context, const lws_retry_bo_t *retry, uint16_t *ctry, char *conceal) { uint64_t ms = 3000, pc = 30; /* sane-ish defaults if no retry table */ uint16_t ra; if (conceal) *conceal = 0; if (retry) { if (retry->retry_ms_table_count) { if (*ctry < retry->retry_ms_table_count) ms = retry->retry_ms_table[*ctry]; else ms = retry->retry_ms_table[ retry->retry_ms_table_count - 1]; } /* if no percent given, use the default 30% */ if (retry->jitter_percent) pc = retry->jitter_percent; } if (lws_get_random(context, &ra, sizeof(ra)) == sizeof(ra)) ms += ((ms * pc * ra) >> 16) / 100; else assert(0); if (*ctry < 0xffff) (*ctry)++; if (retry && conceal) *conceal = (int)*ctry <= retry->conceal_count; return (unsigned int)ms; } int lws_retry_sul_schedule(struct lws_context *context, int tid, lws_sorted_usec_list_t *sul, const lws_retry_bo_t *retry, sul_cb_t cb, uint16_t *ctry) { char conceal; uint64_t ms = lws_retry_get_delay_ms(context, retry, ctry, &conceal); if (!conceal) return 1; lwsl_cx_info(context, "sul %p: scheduling retry in %dms", sul, (int)ms); lws_sul_schedule(context, tid, sul, cb, (int64_t)(ms * 1000)); return 0; } int lws_retry_sul_schedule_retry_wsi(struct lws *wsi, lws_sorted_usec_list_t *sul, sul_cb_t cb, uint16_t *ctry) { char conceal; lws_usec_t us = lws_retry_get_delay_ms(wsi->a.context, wsi->retry_policy, ctry, &conceal) * LWS_US_PER_MS; if (!conceal) /* if our reties are up, they're up... */ return 1; #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) if ( #if defined(LWS_ROLE_H1) wsi->role_ops == &role_ops_h1 #endif #if defined(LWS_ROLE_H1) && defined(LWS_ROLE_H2) || #endif #if defined(LWS_ROLE_H2) wsi->role_ops == &role_ops_h2 #endif ) /* * Since we're doing it by wsi, we're in a position to check for * http retry-after, it will increase us accordingly if found */ lws_http_check_retry_after(wsi, &us); #endif lws_sul_schedule(wsi->a.context, wsi->tsi, sul, cb, us); return 0; } #endif #if defined(LWS_WITH_IPV6) unsigned long lws_get_addr_scope(struct lws *wsi, const char *ifname_or_ipaddr) { unsigned long scope; char ip[NI_MAXHOST]; unsigned int i; #if !defined(WIN32) struct ifaddrs *addrs, *addr; #else PIP_ADAPTER_ADDRESSES adapter, addrs = NULL; PIP_ADAPTER_UNICAST_ADDRESS addr; struct sockaddr_in6 *sockaddr; ULONG size = 0; int found = 0; DWORD ret; #endif /* * First see if we can look the string up as a network interface name... * windows vista+ also has this */ scope = if_nametoindex(ifname_or_ipaddr); if (scope > 0) /* we found it from the interface name lookup */ return scope; /* * if not, try to look it up as an IP -> interface -> interface index */ scope = 0; #if !defined(WIN32) getifaddrs(&addrs); for (addr = addrs; addr; addr = addr->ifa_next) { if (!addr->ifa_addr || addr->ifa_addr->sa_family != AF_INET6) continue; ip[0] = '\0'; getnameinfo(addr->ifa_addr, sizeof(struct sockaddr_in6), ip, sizeof(ip), NULL, 0, NI_NUMERICHOST); i = 0; while (ip[i]) if (ip[i++] == '%') { ip[i - 1] = '\0'; break; } if (!strcmp(ip, ifname_or_ipaddr)) { scope = if_nametoindex(addr->ifa_name); break; } } freeifaddrs(addrs); #else for (i = 0; i < 5; i++) { ret = GetAdaptersAddresses(AF_INET6, GAA_FLAG_INCLUDE_PREFIX, NULL, addrs, &size); if (ret == NO_ERROR || ret == ERROR_NO_DATA) break; if (addrs) free(addrs); if (ret != ERROR_BUFFER_OVERFLOW) { addrs = NULL; lwsl_wsi_err(wsi, "Get IPv6 ads table fail (%d)", ret); break; } addrs = (IP_ADAPTER_ADDRESSES *)malloc(size); } if ((ret == NO_ERROR) && (addrs)) { adapter = addrs; while (adapter && !found) { addr = adapter->FirstUnicastAddress; while (addr && !found) { if (addr->Address.lpSockaddr->sa_family == AF_INET6) { sockaddr = (struct sockaddr_in6 *) (addr->Address.lpSockaddr); lws_plat_inet_ntop(sockaddr->sin6_family, &sockaddr->sin6_addr, ip, sizeof(ip)); if (!strcmp(ip, ifname_or_ipaddr)) { scope = sockaddr->sin6_scope_id; found = 1; break; } } addr = addr->Next; } adapter = adapter->Next; } } if (addrs) free(addrs); #endif return scope; } #endif /* * https://en.wikipedia.org/wiki/IPv6_address * * An IPv6 address is represented as eight groups of four hexadecimal digits, * each group representing 16 bits (two octets, a group sometimes also called a * hextet[6][7]). The groups are separated by colons (:). An example of an IPv6 * address is: * * 2001:0db8:85a3:0000:0000:8a2e:0370:7334 * * The hexadecimal digits are case-insensitive, but IETF recommendations suggest * the use of lower case letters. The full representation of eight 4-digit * groups may be simplified by several techniques, eliminating parts of the * representation. * * Leading zeroes in a group may be omitted, but each group must retain at least * one hexadecimal digit.[1] Thus, the example address may be written as: * * 2001:db8:85a3:0:0:8a2e:370:7334 * * One or more consecutive groups containing zeros only may be replaced with a * single empty group, using two consecutive colons (::).[1] The substitution * may only be applied once in the address, however, because multiple * occurrences would create an ambiguous representation. Thus, the example * address can be further simplified: * * 2001:db8:85a3::8a2e:370:7334 * * The localhost (loopback) address, 0:0:0:0:0:0:0:1, and the IPv6 unspecified * address, 0:0:0:0:0:0:0:0, are reduced to ::1 and ::, respectively. * * During the transition of the Internet from IPv4 to IPv6, it is typical to * operate in a mixed addressing environment. For such use cases, a special * notation has been introduced, which expresses IPv4-mapped and IPv4-compatible * IPv6 addresses by writing the least-significant 32 bits of an address in the * familiar IPv4 dot-decimal notation, whereas the other 96 (most significant) * bits are written in IPv6 format. For example, the IPv4-mapped IPv6 address * ::ffff:c000:0280 is written as ::ffff:192.0.2.128, thus expressing clearly * the original IPv4 address that was mapped to IPv6. */ int lws_parse_numeric_address(const char *ads, uint8_t *result, size_t max_len) { struct lws_tokenize ts; uint8_t *orig = result, temp[16]; int sects = 0, ipv6 = !!strchr(ads, ':'), skip_point = -1, dm = 0; char t[5]; size_t n; long u; lws_tokenize_init(&ts, ads, LWS_TOKENIZE_F_NO_INTEGERS | LWS_TOKENIZE_F_MINUS_NONTERM); ts.len = strlen(ads); if (!ipv6 && ts.len < 7) return -1; if (ipv6 && ts.len < 2) return -2; if (!ipv6 && max_len < 4) return -3; if (ipv6 && max_len < 16) return -4; if (ipv6) memset(result, 0, max_len); do { ts.e = (int8_t)lws_tokenize(&ts); switch (ts.e) { case LWS_TOKZE_TOKEN: dm = 0; if (ipv6) { if (ts.token_len > 4) return -1; memcpy(t, ts.token, ts.token_len); t[ts.token_len] = '\0'; for (n = 0; n < ts.token_len; n++) if (t[n] < '0' || t[n] > 'f' || (t[n] > '9' && t[n] < 'A') || (t[n] > 'F' && t[n] < 'a')) return -1; u = strtol(t, NULL, 16); if (u > 0xffff) return -5; *result++ = (uint8_t)(u >> 8); } else { if (ts.token_len > 3) return -1; memcpy(t, ts.token, ts.token_len); t[ts.token_len] = '\0'; for (n = 0; n < ts.token_len; n++) if (t[n] < '0' || t[n] > '9') return -1; u = strtol(t, NULL, 10); if (u > 0xff) return -6; } if (u < 0) return -7; *result++ = (uint8_t)u; sects++; break; case LWS_TOKZE_DELIMITER: if (dm++) { if (dm > 2) return -8; if (*ts.token != ':') return -9; /* back to back : */ *result++ = 0; *result++ = 0; skip_point = lws_ptr_diff(result, orig); break; } if (ipv6 && orig[2] == 0xff && orig[3] == 0xff && skip_point == 2) { /* ipv4 backwards compatible format */ ipv6 = 0; memset(orig, 0, max_len); orig[10] = 0xff; orig[11] = 0xff; skip_point = -1; result = &orig[12]; sects = 0; break; } if (ipv6 && *ts.token != ':') return -10; if (!ipv6 && *ts.token != '.') return -11; break; case LWS_TOKZE_ENDED: if (!ipv6 && sects == 4) return lws_ptr_diff(result, orig); if (ipv6 && sects == 8) return lws_ptr_diff(result, orig); if (skip_point != -1) { int ow = lws_ptr_diff(result, orig); /* * contains ...::... */ if (ow == 16) return 16; memcpy(temp, &orig[skip_point], (unsigned int)(ow - skip_point)); memset(&orig[skip_point], 0, (unsigned int)(16 - skip_point)); memcpy(&orig[16 - (ow - skip_point)], temp, (unsigned int)(ow - skip_point)); return 16; } return -12; default: /* includes ENDED */ lwsl_err("%s: malformed ip address\n", __func__); return -13; } } while (ts.e > 0 && result - orig <= (int)max_len); lwsl_err("%s: ended on e %d\n", __func__, ts.e); return -14; } int lws_sa46_parse_numeric_address(const char *ads, lws_sockaddr46 *sa46) { uint8_t a[16]; int n; n = lws_parse_numeric_address(ads, a, sizeof(a)); if (n < 0) return -1; #if defined(LWS_WITH_IPV6) if (n == 16) { sa46->sa6.sin6_family = AF_INET6; memcpy(sa46->sa6.sin6_addr.s6_addr, a, sizeof(sa46->sa6.sin6_addr.s6_addr)); return 0; } #endif if (n != 4) return -1; sa46->sa4.sin_family = AF_INET; memcpy(&sa46->sa4.sin_addr.s_addr, a, sizeof(sa46->sa4.sin_addr.s_addr)); return 0; } int lws_write_numeric_address(const uint8_t *ads, int size, char *buf, size_t len) { char c, elided = 0, soe = 0, zb = (char)-1, n, ipv4 = 0; const char *e = buf + len; char *obuf = buf; int q = 0; if (size == 4) return lws_snprintf(buf, len, "%u.%u.%u.%u", ads[0], ads[1], ads[2], ads[3]); if (size != 16) return -1; for (c = 0; c < (char)size / 2; c++) { uint16_t v = (uint16_t)((ads[q] << 8) | ads[q + 1]); if (buf + 8 > e) return -1; q += 2; if (soe) { if (v) *buf++ = ':'; /* fall thru to print hex value */ } else if (!elided && !soe && !v) { elided = soe = 1; zb = c; continue; } if (ipv4) { n = (char)lws_snprintf(buf, lws_ptr_diff_size_t(e, buf), "%u.%u", ads[q - 2], ads[q - 1]); buf += n; if (c == 6) *buf++ = '.'; } else { if (soe && !v) continue; if (c) *buf++ = ':'; buf += lws_snprintf(buf, lws_ptr_diff_size_t(e, buf), "%x", v); if (soe && v) { soe = 0; if (c == 5 && v == 0xffff && !zb) { ipv4 = 1; *buf++ = ':'; } } } } if (buf + 3 > e) return -1; if (soe) { /* as is the case for all zeros */ *buf++ = ':'; *buf++ = ':'; *buf = '\0'; } return lws_ptr_diff(buf, obuf); } int lws_sa46_write_numeric_address(lws_sockaddr46 *sa46, char *buf, size_t len) { *buf = '\0'; #if defined(LWS_WITH_IPV6) if (sa46->sa4.sin_family == AF_INET6) return lws_write_numeric_address( (uint8_t *)&sa46->sa6.sin6_addr, 16, buf, len); #endif if (sa46->sa4.sin_family == AF_INET) return lws_write_numeric_address( (uint8_t *)&sa46->sa4.sin_addr, 4, buf, len); #if defined(LWS_WITH_UNIX_SOCK) if (sa46->sa4.sin_family == AF_UNIX) return lws_snprintf(buf, len, "(unix skt)"); #endif if (!sa46->sa4.sin_family) return lws_snprintf(buf, len, "(unset)"); if (sa46->sa4.sin_family == AF_INET6) return lws_snprintf(buf, len, "(ipv6 unsupp)"); lws_snprintf(buf, len, "(AF%d unsupp)", (int)sa46->sa4.sin_family); return -1; } int lws_sa46_compare_ads(const lws_sockaddr46 *sa46a, const lws_sockaddr46 *sa46b) { if (sa46a->sa4.sin_family != sa46b->sa4.sin_family) return 1; #if defined(LWS_WITH_IPV6) if (sa46a->sa4.sin_family == AF_INET6) return memcmp(&sa46a->sa6.sin6_addr, &sa46b->sa6.sin6_addr, 16); #endif if (sa46a->sa4.sin_family == AF_INET) return sa46a->sa4.sin_addr.s_addr != sa46b->sa4.sin_addr.s_addr; return 0; } void lws_4to6(uint8_t *v6addr, const uint8_t *v4addr) { v6addr[12] = v4addr[0]; v6addr[13] = v4addr[1]; v6addr[14] = v4addr[2]; v6addr[15] = v4addr[3]; memset(v6addr, 0, 10); v6addr[10] = v6addr[11] = 0xff; } #if defined(LWS_WITH_IPV6) void lws_sa46_4to6(lws_sockaddr46 *sa46, const uint8_t *v4addr, uint16_t port) { sa46->sa4.sin_family = AF_INET6; lws_4to6((uint8_t *)&sa46->sa6.sin6_addr.s6_addr[0], v4addr); sa46->sa6.sin6_port = htons(port); } #endif int lws_sa46_on_net(const lws_sockaddr46 *sa46a, const lws_sockaddr46 *sa46_net, int net_len) { uint8_t mask = 0xff, norm[16]; const uint8_t *p1, *p2; if (sa46a->sa4.sin_family == AF_INET) { p1 = (uint8_t *)&sa46a->sa4.sin_addr; if (sa46_net->sa4.sin_family == AF_INET6) { /* ip is v4, net is v6, promote ip to v6 */ lws_4to6(norm, p1); p1 = norm; } #if defined(LWS_WITH_IPV6) } else if (sa46a->sa4.sin_family == AF_INET6) { p1 = (uint8_t *)&sa46a->sa6.sin6_addr; #endif } else return 1; if (sa46_net->sa4.sin_family == AF_INET) { p2 = (uint8_t *)&sa46_net->sa4.sin_addr; if (sa46a->sa4.sin_family == AF_INET6) { /* ip is v6, net is v4, promote net to v6 */ lws_4to6(norm, p2); p2 = norm; /* because the mask length is for net v4 address */ net_len += 12 * 8; } #if defined(LWS_WITH_IPV6) } else if (sa46a->sa4.sin_family == AF_INET6) { p2 = (uint8_t *)&sa46_net->sa6.sin6_addr; #endif } else return 1; while (net_len > 0) { if (net_len < 8) mask = (uint8_t)(mask << (8 - net_len)); if (((*p1++) & mask) != ((*p2++) & mask)) return 1; net_len -= 8; } return 0; } void lws_sa46_copy_address(lws_sockaddr46 *sa46a, const void *in, int af) { sa46a->sa4.sin_family = (sa_family_t)af; if (af == AF_INET) memcpy(&sa46a->sa4.sin_addr, in, 4); #if defined(LWS_WITH_IPV6) else if (af == AF_INET6) memcpy(&sa46a->sa6.sin6_addr, in, sizeof(sa46a->sa6.sin6_addr)); #endif } #if defined(LWS_WITH_SYS_STATE) lws_state_manager_t * lws_system_get_state_manager(struct lws_context *context) { return &context->mgr_system; } #endif libwebsockets-4.3.5/lib/core-net/output.c000066400000000000000000000232721476025525100203660ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" /* * notice this returns number of bytes consumed, or -1 */ int lws_issue_raw(struct lws *wsi, unsigned char *buf, size_t len) { struct lws_context *context = lws_get_context(wsi); size_t real_len = len; unsigned int n, m; /* * If you're looking to dump data being sent down the tls tunnel, see * lws_ssl_capable_write() in lib/tls/mbedtls/mbedtls-ssl.c or * lib/tls/openssl/openssl-ssl.c. * * There's also a corresponding lws_ssl_capable_read() in those files * where you can enable a dump of decrypted data as soon as it was * read. */ /* just ignore sends after we cleared the truncation buffer */ if (lwsi_state(wsi) == LRS_FLUSHING_BEFORE_CLOSE && !lws_has_buffered_out(wsi) #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) && !wsi->http.comp_ctx.may_have_more #endif ) return (int)len; if (buf && lws_has_buffered_out(wsi)) { lwsl_wsi_info(wsi, "** prot: %s, incr buflist_out by %lu", wsi->a.protocol->name, (unsigned long)len); /* * already buflist ahead of this, add it on the tail of the * buflist, then ignore it for now and act like we're flushing * the buflist... */ if (lws_buflist_append_segment(&wsi->buflist_out, buf, len)) return -1; buf = NULL; len = 0; } if (wsi->buflist_out) { /* we have to drain the earliest buflist_out stuff first */ len = lws_buflist_next_segment_len(&wsi->buflist_out, &buf); real_len = len; lwsl_wsi_debug(wsi, "draining %d", (int)len); } if (!len || !buf) return 0; if (!wsi->mux_substream && !lws_socket_is_valid(wsi->desc.sockfd)) lwsl_wsi_err(wsi, "invalid sock"); /* limit sending */ if (wsi->a.protocol->tx_packet_size) n = (unsigned int)wsi->a.protocol->tx_packet_size; else { n = (unsigned int)wsi->a.protocol->rx_buffer_size; if (!n) n = context->pt_serv_buf_size; } n += LWS_PRE + 4; if (n > len) n = (unsigned int)len; /* nope, send it on the socket directly */ if (lws_fi(&wsi->fic, "sendfail")) m = (unsigned int)LWS_SSL_CAPABLE_ERROR; else m = (unsigned int)lws_ssl_capable_write(wsi, buf, n); lwsl_wsi_info(wsi, "ssl_capable_write (%d) says %d", n, m); /* something got written, it can have been truncated now */ wsi->could_have_pending = 1; switch ((int)m) { case LWS_SSL_CAPABLE_ERROR: /* we're going to close, let close know sends aren't possible */ wsi->socket_is_permanently_unusable = 1; return -1; case LWS_SSL_CAPABLE_MORE_SERVICE: /* * nothing got sent, not fatal. Retry the whole thing later, * ie, implying treat it was a truncated send so it gets * retried */ m = 0; break; } if ((int)m < 0) m = 0; /* * we were sending this from buflist_out? Then not sending everything * is a small matter of advancing ourselves only by the amount we did * send in the buflist. */ if (lws_has_buffered_out(wsi)) { if (m) { lwsl_wsi_info(wsi, "partial adv %d (vs %ld)", m, (long)real_len); lws_buflist_use_segment(&wsi->buflist_out, m); } if (!lws_has_buffered_out(wsi)) { lwsl_wsi_info(wsi, "buflist_out flushed"); m = (unsigned int)real_len; if (lwsi_state(wsi) == LRS_FLUSHING_BEFORE_CLOSE) { lwsl_wsi_info(wsi, "*signalling to close now"); return -1; /* retry closing now */ } if (wsi->close_when_buffered_out_drained) { wsi->close_when_buffered_out_drained = 0; return -1; } #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) #if defined(LWS_WITH_SERVER) if (wsi->http.deferred_transaction_completed) { lwsl_wsi_notice(wsi, "partial completed, doing " "deferred transaction completed"); wsi->http.deferred_transaction_completed = 0; return lws_http_transaction_completed(wsi) ? -1 : (int)real_len; } #endif #endif #if defined(LWS_ROLE_WS) /* Since buflist_out flushed, we're not inside a frame any more */ if (wsi->ws) wsi->ws->inside_frame = 0; #endif } /* always callback on writeable */ lws_callback_on_writable(wsi); return (int)m; } #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) if (wsi->http.comp_ctx.may_have_more) lws_callback_on_writable(wsi); #endif if (m == real_len) /* what we just sent went out cleanly */ return (int)m; /* * We were not able to send everything... and we were not sending from * an existing buflist_out. So we are starting a fresh buflist_out, by * buffering the unsent remainder on it. * (it will get first priority next time the socket is writable). */ lwsl_wsi_debug(wsi, "new partial sent %d from %lu total", m, (unsigned long)real_len); if (lws_buflist_append_segment(&wsi->buflist_out, buf + m, real_len - m) < 0) return -1; #if defined(LWS_WITH_UDP) if (lws_wsi_is_udp(wsi)) /* stash original destination for fulfilling UDP partials */ wsi->udp->sa46_pending = wsi->udp->sa46; #endif /* since something buffered, force it to get another chance to send */ lws_callback_on_writable(wsi); return (int)real_len; } int lws_write(struct lws *wsi, unsigned char *buf, size_t len, enum lws_write_protocol wp) { int m; if ((int)len < 0) { lwsl_wsi_err(wsi, "suspicious len int %d, ulong %lu", (int)len, (unsigned long)len); return -1; } #ifdef LWS_WITH_ACCESS_LOG wsi->http.access_log.sent += len; #endif assert(wsi->role_ops); if (!lws_rops_fidx(wsi->role_ops, LWS_ROPS_write_role_protocol)) m = lws_issue_raw(wsi, buf, len); else m = lws_rops_func_fidx(wsi->role_ops, LWS_ROPS_write_role_protocol). write_role_protocol(wsi, buf, len, &wp); #if defined(LWS_WITH_SYS_METRICS) if (wsi->a.vhost) lws_metric_event(wsi->a.vhost->mt_traffic_tx, (char) (m < 0 ? METRES_NOGO : METRES_GO), len); #endif return m; } int lws_ssl_capable_read_no_ssl(struct lws *wsi, unsigned char *buf, size_t len) { int n = 0, en; errno = 0; #if defined(LWS_WITH_UDP) if (lws_wsi_is_udp(wsi)) { socklen_t slt = sizeof(wsi->udp->sa46); n = (int)recvfrom(wsi->desc.sockfd, (char *)buf, #if defined(WIN32) (int) #endif len, 0, sa46_sockaddr(&wsi->udp->sa46), &slt); } else #endif n = (int)recv(wsi->desc.sockfd, (char *)buf, #if defined(WIN32) (int) #endif len, 0); en = LWS_ERRNO; if (n >= 0) { if (!n && wsi->unix_skt) goto do_err; /* * See https://libwebsockets.org/ * pipermail/libwebsockets/2019-March/007857.html */ if (!n && !wsi->unix_skt) goto do_err; #if defined(LWS_WITH_SYS_METRICS) && defined(LWS_WITH_SERVER) if (wsi->a.vhost) lws_metric_event(wsi->a.vhost->mt_traffic_rx, METRES_GO /* rx */, (unsigned int)n); #endif return n; } if (en == LWS_EAGAIN || en == LWS_EWOULDBLOCK || en == LWS_EINTR) return LWS_SSL_CAPABLE_MORE_SERVICE; do_err: #if defined(LWS_WITH_SYS_METRICS) && defined(LWS_WITH_SERVER) if (wsi->a.vhost) lws_metric_event(wsi->a.vhost->mt_traffic_rx, METRES_NOGO, 0u); #endif lwsl_wsi_info(wsi, "error on reading from skt : %d, errno %d", n, en); return LWS_SSL_CAPABLE_ERROR; } int lws_ssl_capable_write_no_ssl(struct lws *wsi, unsigned char *buf, size_t len) { int n = 0; #if defined(LWS_PLAT_OPTEE) ssize_t send(int sockfd, const void *buf, size_t len, int flags); #endif #if defined(LWS_WITH_UDP) if (lws_wsi_is_udp(wsi)) { if (lws_fi(&wsi->fic, "udp_tx_loss")) { /* pretend it was sent */ n = (int)(ssize_t)len; goto post_send; } if (lws_has_buffered_out(wsi)) n = (int)sendto(wsi->desc.sockfd, (const char *)buf, #if defined(WIN32) (int) #endif len, 0, sa46_sockaddr(&wsi->udp->sa46_pending), sa46_socklen(&wsi->udp->sa46_pending)); else n = (int)sendto(wsi->desc.sockfd, (const char *)buf, #if defined(WIN32) (int) #endif len, 0, sa46_sockaddr(&wsi->udp->sa46), sa46_socklen(&wsi->udp->sa46)); } else #endif if (wsi->role_ops->file_handle) n = (int)write((int)(lws_intptr_t)wsi->desc.filefd, buf, #if defined(WIN32) (int) #endif len); else n = (int)send(wsi->desc.sockfd, (char *)buf, #if defined(WIN32) (int) #endif len, MSG_NOSIGNAL); // lwsl_info("%s: sent len %d result %d", __func__, len, n); #if defined(LWS_WITH_UDP) post_send: #endif if (n >= 0) return n; if (LWS_ERRNO == LWS_EAGAIN || LWS_ERRNO == LWS_EWOULDBLOCK || LWS_ERRNO == LWS_EINTR) { if (LWS_ERRNO == LWS_EWOULDBLOCK) { lws_set_blocking_send(wsi); } return LWS_SSL_CAPABLE_MORE_SERVICE; } lwsl_wsi_debug(wsi, "ERROR writing len %d to skt fd %d err %d / errno %d", (int)(ssize_t)len, wsi->desc.sockfd, n, LWS_ERRNO); return LWS_SSL_CAPABLE_ERROR; } int lws_ssl_pending_no_ssl(struct lws *wsi) { (void)wsi; #if defined(LWS_PLAT_FREERTOS) return 100; #else return 0; #endif } libwebsockets-4.3.5/lib/core-net/pollfd.c000066400000000000000000000415121476025525100203030ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" int _lws_change_pollfd(struct lws *wsi, int _and, int _or, struct lws_pollargs *pa) { #if !defined(LWS_WITH_EVENT_LIBS) volatile struct lws_context_per_thread *vpt; #endif struct lws_context_per_thread *pt; struct lws_context *context; int ret = 0, pa_events; struct lws_pollfd *pfd; int sampled_tid, tid; if (!wsi) return 0; assert(wsi->position_in_fds_table == LWS_NO_FDS_POS || wsi->position_in_fds_table >= 0); if (wsi->position_in_fds_table == LWS_NO_FDS_POS) return 0; if (((volatile struct lws *)wsi)->handling_pollout && !_and && _or == LWS_POLLOUT) { /* * Happening alongside service thread handling POLLOUT. * The danger is when he is finished, he will disable POLLOUT, * countermanding what we changed here. * * Instead of changing the fds, inform the service thread * what happened, and ask it to leave POLLOUT active on exit */ ((volatile struct lws *)wsi)->leave_pollout_active = 1; /* * by definition service thread is not in poll wait, so no need * to cancel service */ lwsl_wsi_debug(wsi, "using leave_pollout_active"); return 0; } context = wsi->a.context; pt = &context->pt[(int)wsi->tsi]; assert(wsi->position_in_fds_table < (int)pt->fds_count); #if !defined(LWS_WITH_EVENT_LIBS) /* * This only applies when we use the default poll() event loop. * * BSD can revert pa->events at any time, when the kernel decides to * exit from poll(). We can't protect against it using locking. * * Therefore we must check first if the service thread is in poll() * wait; if so, we know we must be being called from a foreign thread, * and we must keep a strictly ordered list of changes we made instead * of trying to apply them, since when poll() exits, which may happen * at any time it would revert our changes. * * The plat code will apply them when it leaves the poll() wait * before doing anything else. */ vpt = (volatile struct lws_context_per_thread *)pt; vpt->foreign_spinlock = 1; lws_memory_barrier(); if (vpt->inside_poll) { struct lws_foreign_thread_pollfd *ftp, **ftp1; /* * We are certainly a foreign thread trying to change events * while the service thread is in the poll() wait. * * Create a list of changes to be applied after poll() exit, * instead of trying to apply them now. */ ftp = lws_malloc(sizeof(*ftp), "ftp"); if (!ftp) { vpt->foreign_spinlock = 0; lws_memory_barrier(); ret = -1; goto bail; } ftp->_and = _and; ftp->_or = _or; ftp->fd_index = wsi->position_in_fds_table; ftp->next = NULL; lws_pt_lock(pt, __func__); /* place at END of list to maintain order */ ftp1 = (struct lws_foreign_thread_pollfd **) &vpt->foreign_pfd_list; while (*ftp1) ftp1 = &((*ftp1)->next); *ftp1 = ftp; vpt->foreign_spinlock = 0; lws_memory_barrier(); lws_pt_unlock(pt); lws_cancel_service_pt(wsi); return 0; } vpt->foreign_spinlock = 0; lws_memory_barrier(); #endif #if !defined(__linux__) && !defined(WIN32) /* OSX couldn't see close on stdin pipe side otherwise; WSAPOLL * blows up if we give it POLLHUP */ _or |= LWS_POLLHUP; #endif pfd = &pt->fds[wsi->position_in_fds_table]; pa->fd = wsi->desc.sockfd; lwsl_wsi_debug(wsi, "fd %d events %d -> %d", pa->fd, pfd->events, (pfd->events & ~_and) | _or); pa->prev_events = pfd->events; pa->events = pfd->events = (short)((pfd->events & ~_and) | _or); if (wsi->mux_substream) return 0; #if defined(LWS_WITH_EXTERNAL_POLL) if (wsi->a.vhost && wsi->a.vhost->protocols[0].callback(wsi, LWS_CALLBACK_CHANGE_MODE_POLL_FD, wsi->user_space, (void *)pa, 0)) { ret = -1; goto bail; } #endif if (context->event_loop_ops->io) { if (_and & LWS_POLLIN) context->event_loop_ops->io(wsi, LWS_EV_STOP | LWS_EV_READ); if (_or & LWS_POLLIN) context->event_loop_ops->io(wsi, LWS_EV_START | LWS_EV_READ); if (_and & LWS_POLLOUT) context->event_loop_ops->io(wsi, LWS_EV_STOP | LWS_EV_WRITE); if (_or & LWS_POLLOUT) context->event_loop_ops->io(wsi, LWS_EV_START | LWS_EV_WRITE); } /* * if we changed something in this pollfd... * ... and we're running in a different thread context * than the service thread... * ... and the service thread is waiting ... * then cancel it to force a restart with our changed events */ pa_events = pa->prev_events != pa->events; pfd->events = (short)pa->events; if (pa_events) { if (lws_plat_change_pollfd(context, wsi, pfd)) { lwsl_wsi_info(wsi, "failed"); ret = -1; goto bail; } sampled_tid = pt->service_tid; if (sampled_tid && wsi->a.vhost) { tid = wsi->a.vhost->protocols[0].callback(wsi, LWS_CALLBACK_GET_THREAD_ID, NULL, NULL, 0); if (tid == -1) { ret = -1; goto bail; } if (tid != sampled_tid) lws_cancel_service_pt(wsi); } } bail: return ret; } #if defined(LWS_WITH_SERVER) /* * Enable or disable listen sockets on this pt globally... * it's modulated according to the pt having space for a new accept. */ static void lws_accept_modulation(struct lws_context *context, struct lws_context_per_thread *pt, int allow) { struct lws_vhost *vh = context->vhost_list; struct lws_pollargs pa1; while (vh) { lws_start_foreach_dll(struct lws_dll2 *, d, lws_dll2_get_head(&vh->listen_wsi)) { struct lws *wsi = lws_container_of(d, struct lws, listen_list); _lws_change_pollfd(wsi, allow ? 0 : LWS_POLLIN, allow ? LWS_POLLIN : 0, &pa1); } lws_end_foreach_dll(d); vh = vh->vhost_next; } } #endif #if _LWS_ENABLED_LOGS & LLL_WARN void __dump_fds(struct lws_context_per_thread *pt, const char *s) { unsigned int n; lwsl_cx_warn(pt->context, "fds_count %u, %s", pt->fds_count, s); for (n = 0; n < pt->fds_count; n++) { struct lws *wsi = wsi_from_fd(pt->context, pt->fds[n].fd); lwsl_cx_warn(pt->context, " %d: fd %d, wsi %s, pos_in_fds: %d", n + 1, pt->fds[n].fd, lws_wsi_tag(wsi), wsi ? wsi->position_in_fds_table : -1); } } #else #define __dump_fds(x, y) #endif int __insert_wsi_socket_into_fds(struct lws_context *context, struct lws *wsi) { #if defined(LWS_WITH_EXTERNAL_POLL) struct lws_pollargs pa = { wsi->desc.sockfd, LWS_POLLIN, 0 }; #endif struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; int ret = 0; // __dump_fds(pt, "pre insert"); lws_pt_assert_lock_held(pt); lwsl_wsi_debug(wsi, "tsi=%d, sock=%d, pos-in-fds=%d", wsi->tsi, wsi->desc.sockfd, pt->fds_count); if ((unsigned int)pt->fds_count >= context->fd_limit_per_thread) { lwsl_cx_err(context, "Too many fds (%d vs %d)", context->max_fds, context->fd_limit_per_thread); return 1; } #if !defined(_WIN32) if (!wsi->a.context->max_fds_unrelated_to_ulimit && wsi->desc.sockfd - lws_plat_socket_offset() >= (int)context->max_fds) { lwsl_cx_err(context, "Socket fd %d is too high (%d) offset %d", wsi->desc.sockfd, context->max_fds, lws_plat_socket_offset()); return 1; } #endif assert(wsi); #if defined(LWS_WITH_NETLINK) assert(wsi->event_pipe || wsi->a.vhost || wsi == pt->context->netlink); #else assert(wsi->event_pipe || wsi->a.vhost); #endif assert(lws_socket_is_valid(wsi->desc.sockfd)); #if defined(LWS_WITH_EXTERNAL_POLL) if (wsi->a.vhost && wsi->a.vhost->protocols[0].callback(wsi, LWS_CALLBACK_LOCK_POLL, wsi->user_space, (void *) &pa, 1)) return -1; #endif if (insert_wsi(context, wsi)) return -1; pt->count_conns++; wsi->position_in_fds_table = (int)pt->fds_count; pt->fds[wsi->position_in_fds_table].fd = wsi->desc.sockfd; pt->fds[wsi->position_in_fds_table].events = LWS_POLLIN; #if defined(LWS_WITH_EXTERNAL_POLL) pa.events = pt->fds[pt->fds_count].events; #endif lws_plat_insert_socket_into_fds(context, wsi); #if defined(LWS_WITH_EXTERNAL_POLL) /* external POLL support via protocol 0 */ if (wsi->a.vhost && wsi->a.vhost->protocols[0].callback(wsi, LWS_CALLBACK_ADD_POLL_FD, wsi->user_space, (void *) &pa, 0)) ret = -1; #endif #if defined(LWS_WITH_SERVER) /* if no more room, defeat accepts on this service thread */ if ((unsigned int)pt->fds_count == context->fd_limit_per_thread - 1) lws_accept_modulation(context, pt, 0); #endif #if defined(LWS_WITH_EXTERNAL_POLL) if (wsi->a.vhost && wsi->a.vhost->protocols[0].callback(wsi, LWS_CALLBACK_UNLOCK_POLL, wsi->user_space, (void *)&pa, 1)) ret = -1; #endif // __dump_fds(pt, "post insert"); return ret; } /* requires pt lock */ int __remove_wsi_socket_from_fds(struct lws *wsi) { struct lws_context *context = wsi->a.context; #if defined(LWS_WITH_EXTERNAL_POLL) struct lws_pollargs pa = { wsi->desc.sockfd, 0, 0 }; #endif struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; struct lws *end_wsi; int v, m, ret = 0; lws_pt_assert_lock_held(pt); // __dump_fds(pt, "pre remove"); #if !defined(_WIN32) if (!wsi->a.context->max_fds_unrelated_to_ulimit && wsi->desc.sockfd - lws_plat_socket_offset() > (int)context->max_fds) { lwsl_wsi_err(wsi, "fd %d too high (%d)", wsi->desc.sockfd, context->max_fds); return 1; } #endif #if defined(LWS_WITH_EXTERNAL_POLL) if (wsi->a.vhost && wsi->a.vhost->protocols && wsi->a.vhost->protocols[0].callback(wsi, LWS_CALLBACK_LOCK_POLL, wsi->user_space, (void *)&pa, 1)) return -1; #endif __lws_same_vh_protocol_remove(wsi); /* the guy who is to be deleted's slot index in pt->fds */ m = wsi->position_in_fds_table; /* these are the only valid possibilities for position_in_fds_table */ assert(m == LWS_NO_FDS_POS || (m >= 0 && (unsigned int)m < pt->fds_count)); if (context->event_loop_ops->io) context->event_loop_ops->io(wsi, LWS_EV_STOP | LWS_EV_READ | LWS_EV_WRITE); /* lwsl_notice("%s: wsi=%s, skt=%d, fds pos=%d, end guy pos=%d, endfd=%d\n", __func__, lws_wsi_tag(wsi), wsi->desc.sockfd, wsi->position_in_fds_table, pt->fds_count, pt->fds[pt->fds_count - 1].fd); */ if (m != LWS_NO_FDS_POS) { char fixup = 0; assert(pt->fds_count && (unsigned int)m != pt->fds_count); /* deletion guy's lws_lookup entry needs nuking */ delete_from_fd(context, wsi->desc.sockfd); if ((unsigned int)m != pt->fds_count - 1) { /* have the last guy take up the now vacant slot */ pt->fds[m] = pt->fds[pt->fds_count - 1]; fixup = 1; } pt->fds[pt->fds_count - 1].fd = -1; /* this decrements pt->fds_count */ lws_plat_delete_socket_from_fds(context, wsi, m); pt->count_conns--; if (fixup) { v = (int) pt->fds[m].fd; /* old end guy's "position in fds table" is now the * deletion guy's old one */ end_wsi = wsi_from_fd(context, v); if (!end_wsi) { lwsl_wsi_err(wsi, "no wsi for fd %d pos %d, " "pt->fds_count=%d", (int)pt->fds[m].fd, m, pt->fds_count); // assert(0); } else end_wsi->position_in_fds_table = m; } /* removed wsi has no position any more */ wsi->position_in_fds_table = LWS_NO_FDS_POS; #if defined(LWS_WITH_EXTERNAL_POLL) /* remove also from external POLL support via protocol 0 */ if (lws_socket_is_valid(wsi->desc.sockfd) && wsi->a.vhost && wsi->a.vhost->protocols[0].callback(wsi, LWS_CALLBACK_DEL_POLL_FD, wsi->user_space, (void *) &pa, 0)) ret = -1; #endif } #if defined(LWS_WITH_SERVER) if (!context->being_destroyed && /* if this made some room, accept connects on this thread */ (unsigned int)pt->fds_count < context->fd_limit_per_thread - 1) lws_accept_modulation(context, pt, 1); #endif #if defined(LWS_WITH_EXTERNAL_POLL) if (wsi->a.vhost && wsi->a.vhost->protocols[0].callback(wsi, LWS_CALLBACK_UNLOCK_POLL, wsi->user_space, (void *) &pa, 1)) ret = -1; #endif // __dump_fds(pt, "post remove"); return ret; } int __lws_change_pollfd(struct lws *wsi, int _and, int _or) { struct lws_context *context; struct lws_pollargs pa; int ret = 0; if (!wsi || (!wsi->a.protocol && !wsi->event_pipe) || wsi->position_in_fds_table == LWS_NO_FDS_POS) return 0; context = lws_get_context(wsi); if (!context) return 1; #if defined(LWS_WITH_EXTERNAL_POLL) if (wsi->a.vhost && wsi->a.vhost->protocols[0].callback(wsi, LWS_CALLBACK_LOCK_POLL, wsi->user_space, (void *) &pa, 0)) return -1; #endif ret = _lws_change_pollfd(wsi, _and, _or, &pa); #if defined(LWS_WITH_EXTERNAL_POLL) if (wsi->a.vhost && wsi->a.vhost->protocols[0].callback(wsi, LWS_CALLBACK_UNLOCK_POLL, wsi->user_space, (void *) &pa, 0)) ret = -1; #endif return ret; } int lws_change_pollfd(struct lws *wsi, int _and, int _or) { struct lws_context_per_thread *pt; int ret = 0; pt = &wsi->a.context->pt[(int)wsi->tsi]; lws_pt_lock(pt, __func__); ret = __lws_change_pollfd(wsi, _and, _or); lws_pt_unlock(pt); return ret; } int lws_callback_on_writable(struct lws *wsi) { struct lws *w = wsi; if (lwsi_state(wsi) == LRS_SHUTDOWN) return 0; if (wsi->socket_is_permanently_unusable) return 0; if (lws_rops_fidx(wsi->role_ops, LWS_ROPS_callback_on_writable)) { int q = lws_rops_func_fidx(wsi->role_ops, LWS_ROPS_callback_on_writable). callback_on_writable(wsi); if (q) return 1; w = lws_get_network_wsi(wsi); } else if (w->position_in_fds_table == LWS_NO_FDS_POS) { lwsl_wsi_debug(wsi, "failed to find socket %d", wsi->desc.sockfd); return -1; } if (__lws_change_pollfd(w, 0, LWS_POLLOUT)) return -1; return 1; } /* * stitch protocol choice into the vh protocol linked list * We always insert ourselves at the start of the list * * X <-> B * X <-> pAn <-> pB * * Illegal to attach more than once without detach inbetween */ void lws_same_vh_protocol_insert(struct lws *wsi, int n) { lws_context_lock(wsi->a.context, __func__); lws_vhost_lock(wsi->a.vhost); lws_dll2_remove(&wsi->same_vh_protocol); lws_dll2_add_head(&wsi->same_vh_protocol, &wsi->a.vhost->same_vh_protocol_owner[n]); wsi->bound_vhost_index = (uint8_t)n; lws_vhost_unlock(wsi->a.vhost); lws_context_unlock(wsi->a.context); } void __lws_same_vh_protocol_remove(struct lws *wsi) { if (wsi->a.vhost && wsi->a.vhost->same_vh_protocol_owner) lws_dll2_remove(&wsi->same_vh_protocol); } void lws_same_vh_protocol_remove(struct lws *wsi) { if (!wsi->a.vhost) return; lws_context_lock(wsi->a.context, __func__); lws_vhost_lock(wsi->a.vhost); __lws_same_vh_protocol_remove(wsi); lws_vhost_unlock(wsi->a.vhost); lws_context_unlock(wsi->a.context); } int lws_callback_on_writable_all_protocol_vhost(const struct lws_vhost *vhost, const struct lws_protocols *protocol) { struct lws *wsi; int n; if (protocol < vhost->protocols || protocol >= (vhost->protocols + vhost->count_protocols)) { lwsl_vhost_err((struct lws_vhost *)vhost, "protocol %p is not from vhost %p (%p - %p)", protocol, vhost->protocols, vhost, (vhost->protocols + vhost->count_protocols)); return -1; } n = (int)(protocol - vhost->protocols); lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, lws_dll2_get_head(&vhost->same_vh_protocol_owner[n])) { wsi = lws_container_of(d, struct lws, same_vh_protocol); assert(wsi->a.protocol == protocol); lws_callback_on_writable(wsi); } lws_end_foreach_dll_safe(d, d1); return 0; } int lws_callback_on_writable_all_protocol(const struct lws_context *context, const struct lws_protocols *protocol) { struct lws_vhost *vhost; int n; if (!context) return 0; vhost = context->vhost_list; while (vhost) { for (n = 0; n < vhost->count_protocols; n++) if (protocol->callback == vhost->protocols[n].callback && !strcmp(protocol->name, vhost->protocols[n].name)) break; if (n != vhost->count_protocols) lws_callback_on_writable_all_protocol_vhost( vhost, &vhost->protocols[n]); vhost = vhost->vhost_next; } return 0; } libwebsockets-4.3.5/lib/core-net/private-lib-core-net.h000066400000000000000000001220311476025525100227540ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #if !defined(__LWS_CORE_NET_PRIVATE_H__) #define __LWS_CORE_NET_PRIVATE_H__ #if !defined(_POSIX_C_SOURCE) #define _POSIX_C_SOURCE 200112L #endif /* * Generic pieces needed to manage muxable stream protocols like h2 */ struct lws_muxable { struct lws *parent_wsi; struct lws *child_list; struct lws *sibling_list; unsigned int my_sid; unsigned int child_count; uint32_t highest_sid; uint8_t requested_POLLOUT; }; #include "private-lib-roles.h" #ifdef __cplusplus extern "C" { #endif #define __lws_sul_insert_us(owner, sul, _us) \ (sul)->us = lws_now_usecs() + (lws_usec_t)(_us); \ __lws_sul_insert(owner, sul) /* * * ------ roles ------ * */ /* null-terminated array of pointers to roles lws built with */ extern const struct lws_role_ops *available_roles[]; #define LWS_FOR_EVERY_AVAILABLE_ROLE_START(xx) { \ const struct lws_role_ops **ppxx = available_roles; \ while (*ppxx) { \ const struct lws_role_ops *xx = *ppxx++; #define LWS_FOR_EVERY_AVAILABLE_ROLE_END }} /* * * ------ event_loop ops ------ * */ /* enums of socks version */ enum socks_version { SOCKS_VERSION_4 = 4, SOCKS_VERSION_5 = 5 }; /* enums of subnegotiation version */ enum socks_subnegotiation_version { SOCKS_SUBNEGOTIATION_VERSION_1 = 1, }; /* enums of socks commands */ enum socks_command { SOCKS_COMMAND_CONNECT = 1, SOCKS_COMMAND_BIND = 2, SOCKS_COMMAND_UDP_ASSOCIATE = 3 }; /* enums of socks address type */ enum socks_atyp { SOCKS_ATYP_IPV4 = 1, SOCKS_ATYP_DOMAINNAME = 3, SOCKS_ATYP_IPV6 = 4 }; /* enums of socks authentication methods */ enum socks_auth_method { SOCKS_AUTH_NO_AUTH = 0, SOCKS_AUTH_GSSAPI = 1, SOCKS_AUTH_USERNAME_PASSWORD = 2 }; /* enums of subnegotiation status */ enum socks_subnegotiation_status { SOCKS_SUBNEGOTIATION_STATUS_SUCCESS = 0, }; /* enums of socks request reply */ enum socks_request_reply { SOCKS_REQUEST_REPLY_SUCCESS = 0, SOCKS_REQUEST_REPLY_FAILURE_GENERAL = 1, SOCKS_REQUEST_REPLY_CONNECTION_NOT_ALLOWED = 2, SOCKS_REQUEST_REPLY_NETWORK_UNREACHABLE = 3, SOCKS_REQUEST_REPLY_HOST_UNREACHABLE = 4, SOCKS_REQUEST_REPLY_CONNECTION_REFUSED = 5, SOCKS_REQUEST_REPLY_TTL_EXPIRED = 6, SOCKS_REQUEST_REPLY_COMMAND_NOT_SUPPORTED = 7, SOCKS_REQUEST_REPLY_ATYP_NOT_SUPPORTED = 8 }; /* enums used to generate socks messages */ enum socks_msg_type { /* greeting */ SOCKS_MSG_GREETING, /* credential, user name and password */ SOCKS_MSG_USERNAME_PASSWORD, /* connect command */ SOCKS_MSG_CONNECT }; enum { LWS_RXFLOW_ALLOW = (1 << 0), LWS_RXFLOW_PENDING_CHANGE = (1 << 1), }; typedef enum lws_parser_return { LPR_FORBIDDEN = -2, LPR_FAIL = -1, LPR_OK = 0, LPR_DO_FALLBACK = 2, } lws_parser_return_t; enum pmd_return { PMDR_UNKNOWN, PMDR_DID_NOTHING, PMDR_HAS_PENDING, PMDR_EMPTY_NONFINAL, PMDR_EMPTY_FINAL, PMDR_NOTHING_WE_SHOULD_DO, PMDR_FAILED = -1 }; #if defined(LWS_WITH_PEER_LIMITS) struct lws_peer { struct lws_peer *next; struct lws_peer *peer_wait_list; lws_sockaddr46 sa46; time_t time_created; time_t time_closed_all; uint32_t hash; uint32_t count_wsi; uint32_t total_wsi; #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) struct lws_peer_role_http http; #endif }; #endif #ifdef LWS_WITH_IPV6 #define LWS_IPV6_ENABLED(vh) \ (!lws_check_opt(vh->context->options, LWS_SERVER_OPTION_DISABLE_IPV6) && \ !lws_check_opt(vh->options, LWS_SERVER_OPTION_DISABLE_IPV6)) #else #define LWS_IPV6_ENABLED(context) (0) #endif #ifdef LWS_WITH_UNIX_SOCK #define LWS_UNIX_SOCK_ENABLED(vhost) \ (vhost->options & LWS_SERVER_OPTION_UNIX_SOCK) #else #define LWS_UNIX_SOCK_ENABLED(vhost) (0) #endif enum uri_path_states { URIPS_IDLE, URIPS_SEEN_SLASH, URIPS_SEEN_SLASH_DOT, URIPS_SEEN_SLASH_DOT_DOT, }; enum uri_esc_states { URIES_IDLE, URIES_SEEN_PERCENT, URIES_SEEN_PERCENT_H1, }; #if defined(LWS_WITH_CLIENT) enum { CIS_ADDRESS, CIS_PATH, CIS_HOST, CIS_ORIGIN, CIS_PROTOCOL, CIS_METHOD, CIS_IFACE, CIS_ALPN, CIS_COUNT }; struct client_info_stash { char *cis[CIS_COUNT]; void *opaque_user_data; /* not allocated or freed by lws */ }; #endif #if defined(LWS_WITH_UDP) #define lws_wsi_is_udp(___wsi) (!!___wsi->udp) #endif #define LWS_H2_FRAME_HEADER_LENGTH 9 lws_usec_t __lws_sul_service_ripe(lws_dll2_owner_t *own, int num_own, lws_usec_t usnow); /* * lws_async_dns */ typedef struct lws_async_dns { lws_sockaddr46 sa46; /* nameserver */ lws_dll2_owner_t waiting; lws_dll2_owner_t cached; struct lws *wsi; time_t time_set_server; uint8_t dns_server_set:1; uint8_t dns_server_connected:1; } lws_async_dns_t; typedef enum { LADNS_CONF_SERVER_UNKNOWN = -1, LADNS_CONF_SERVER_SAME, LADNS_CONF_SERVER_CHANGED } lws_async_dns_server_check_t; #if defined(LWS_WITH_SYS_ASYNC_DNS) void lws_aysnc_dns_completed(struct lws *wsi, void *sa, size_t salen, lws_async_dns_retcode_t ret); #endif void lws_async_dns_cancel(struct lws *wsi); void lws_async_dns_drop_server(struct lws_context *context); /* * so we can have n connections being serviced simultaneously, * these things need to be isolated per-thread. */ struct lws_context_per_thread { #if LWS_MAX_SMP > 1 pthread_mutex_t lock_stats; struct lws_mutex_refcount mr; pthread_t self; #endif struct lws_dll2_owner dll_buflist_owner; /* guys with pending rxflow */ struct lws_dll2_owner seq_owner; /* list of lws_sequencer-s */ lws_dll2_owner_t attach_owner; /* pending lws_attach */ #if defined(LWS_WITH_SECURE_STREAMS) lws_dll2_owner_t ss_owner; #endif #if defined(LWS_WITH_SECURE_STREAMS_PROXY_API) || \ defined(LWS_WITH_SECURE_STREAMS_THREAD_API) lws_dll2_owner_t ss_dsh_owner; lws_dll2_owner_t ss_client_owner; #endif struct lws_dll2_owner pt_sul_owner[LWS_COUNT_PT_SUL_OWNERS]; #if defined (LWS_WITH_SEQUENCER) lws_sorted_usec_list_t sul_seq_heartbeat; #endif #if (defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2)) && defined(LWS_WITH_SERVER) lws_sorted_usec_list_t sul_ah_lifecheck; #endif #if defined(LWS_WITH_TLS) && defined(LWS_WITH_SERVER) lws_sorted_usec_list_t sul_tls; #endif #if defined(LWS_PLAT_UNIX) lws_sorted_usec_list_t sul_plat; #endif #if defined(LWS_ROLE_CGI) lws_sorted_usec_list_t sul_cgi; #endif #if defined(LWS_WITH_PEER_LIMITS) lws_sorted_usec_list_t sul_peer_limits; #endif #if !defined(LWS_PLAT_FREERTOS) struct lws *fake_wsi; /* used for callbacks where there's no wsi */ #endif #if defined(WIN32) struct sockaddr_in frt_pipe_si; #endif #if defined(LWS_WITH_TLS) struct lws_pt_tls tls; #endif struct lws_context *context; /* * usable by anything in the service code, but only if the scope * does not last longer than the service action (since next service * of any socket can likewise use it and overwrite) */ unsigned char *serv_buf; struct lws_pollfd *fds; volatile struct lws_foreign_thread_pollfd * volatile foreign_pfd_list; lws_sockfd_type dummy_pipe_fds[2]; struct lws *pipe_wsi; /* --- role based members --- */ #if defined(LWS_ROLE_WS) && !defined(LWS_WITHOUT_EXTENSIONS) struct lws_pt_role_ws ws; #endif #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) struct lws_pt_role_http http; #endif #if defined(LWS_ROLE_DBUS) struct lws_pt_role_dbus dbus; #endif /* --- event library based members --- */ void *evlib_pt; /* overallocated */ /* --- */ unsigned long count_conns; unsigned int fds_count; /* * set to the Thread ID that's doing the service loop just before entry * to poll indicates service thread likely idling in poll() * volatile because other threads may check it as part of processing * for pollfd event change. */ volatile int service_tid; int service_tid_detected; #if !defined(LWS_PLAT_FREERTOS) int count_event_loop_static_asset_handles; #endif volatile unsigned char inside_poll; volatile unsigned char foreign_spinlock; unsigned char tid; unsigned char inside_service:1; unsigned char inside_lws_service:1; unsigned char event_loop_foreign:1; unsigned char event_loop_destroy_processing_done:1; unsigned char event_loop_pt_unused:1; unsigned char destroy_self:1; unsigned char is_destroyed:1; }; /* * virtual host -related context information * vhostwide SSL context * vhostwide proxy * * hierarchy: * * context -> vhost -> wsi * * incoming connection non-SSL vhost binding: * * listen socket -> wsi -> select vhost after first headers * * incoming connection SSL vhost binding: * * SSL SNI -> wsi -> bind after SSL negotiation */ struct lws_vhost { #if defined(LWS_WITH_CLIENT) && defined(LWS_CLIENT_HTTP_PROXYING) char proxy_basic_auth_token[128]; #endif #if LWS_MAX_SMP > 1 struct lws_mutex_refcount mr; char close_flow_vs_tsi[LWS_MAX_SMP]; #endif #if defined(LWS_ROLE_H2) struct lws_vhost_role_h2 h2; #endif #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) struct lws_vhost_role_http http; #endif #if defined(LWS_ROLE_WS) && !defined(LWS_WITHOUT_EXTENSIONS) struct lws_vhost_role_ws ws; #endif lws_lifecycle_t lc; lws_dll2_t vh_being_destroyed_list; #if defined(LWS_WITH_SOCKS5) char socks_proxy_address[128]; char socks_user[96]; char socks_password[96]; #endif #if defined(LWS_WITH_TLS_SESSIONS) lws_dll2_owner_t tls_sessions; /* vh lock */ #endif #if defined(LWS_WITH_EVENT_LIBS) void *evlib_vh; /* overallocated */ #endif #if defined(LWS_WITH_SYS_METRICS) lws_metric_t *mt_traffic_rx; lws_metric_t *mt_traffic_tx; #endif #if defined(LWS_WITH_SYS_FAULT_INJECTION) lws_fi_ctx_t fic; /**< Fault Injection ctx for the vhost, hierarchy vhost->context */ #endif uint64_t options; struct lws_context *context; struct lws_vhost *vhost_next; const lws_retry_bo_t *retry_policy; #if defined(LWS_WITH_TLS_JIT_TRUST) lws_sorted_usec_list_t sul_unref; /* grace period after idle */ #endif #if defined(LWS_WITH_SERVER) && defined(LWS_WITH_SECURE_STREAMS) lws_ss_handle_t *ss_handle; /* ss handle for the server obj */ #endif lws_dll2_owner_t listen_wsi; const char *name; const char *iface; const char *listen_accept_role; const char *listen_accept_protocol; const char *unix_socket_perms; void (*finalize)(struct lws_vhost *vh, void *arg); void *finalize_arg; const struct lws_protocols *protocols; void **protocol_vh_privs; const struct lws_protocol_vhost_options *pvo; const struct lws_protocol_vhost_options *headers; struct lws_dll2_owner *same_vh_protocol_owner; struct lws_vhost *no_listener_vhost_list; struct lws_dll2_owner abstract_instances_owner; /* vh lock */ #if defined(LWS_WITH_CLIENT) struct lws_dll2_owner dll_cli_active_conns_owner; #endif struct lws_dll2_owner vh_awaiting_socket_owner; #if defined(LWS_WITH_TLS) struct lws_vhost_tls tls; #endif void *user; int listen_port; #if !defined(LWS_PLAT_FREERTOS) && !defined(OPTEE_TA) && !defined(WIN32) int bind_iface; #endif #if defined(LWS_WITH_SOCKS5) unsigned int socks_proxy_port; #endif int count_protocols; int ka_time; int ka_probes; int ka_interval; int keepalive_timeout; int timeout_secs_ah_idle; int connect_timeout_secs; int fo_listen_queue; int count_bound_wsi; #ifdef LWS_WITH_ACCESS_LOG int log_fd; #endif #if defined(LWS_WITH_TLS_SESSIONS) uint32_t tls_session_cache_max; #endif #if defined(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY) || defined(LWS_WITH_SECURE_STREAMS_CPP) int8_t ss_refcount; /**< refcount of number of ss connections with streamtypes using this * trust store */ #endif uint8_t allocated_vhost_protocols:1; uint8_t created_vhost_protocols:1; uint8_t being_destroyed:1; uint8_t from_ss_policy:1; #if defined(LWS_WITH_TLS_JIT_TRUST) uint8_t grace_after_unref:1; /* grace time / autodelete aoplies to us */ #endif unsigned char default_protocol_index; unsigned char raw_protocol_index; }; void __lws_vhost_destroy2(struct lws_vhost *vh); #define mux_to_wsi(_m) lws_container_of(_m, struct lws, mux) void lws_wsi_mux_insert(struct lws *wsi, struct lws *parent_wsi, unsigned int sid); int lws_wsi_mux_mark_parents_needing_writeable(struct lws *wsi); struct lws * lws_wsi_mux_move_child_to_tail(struct lws **wsi2); int lws_wsi_mux_action_pending_writeable_reqs(struct lws *wsi); void lws_wsi_mux_dump_children(struct lws *wsi); void lws_wsi_mux_close_children(struct lws *wsi, int reason); void lws_wsi_mux_sibling_disconnect(struct lws *wsi); void lws_wsi_mux_dump_waiting_children(struct lws *wsi); int lws_wsi_mux_apply_queue(struct lws *wsi); /* * struct lws */ /* * These pieces are very commonly used (via accessors) in user protocol handlers * and have to be valid, even in the case no real wsi is available for the cb. * * We put all this category of pointers in there and compose it at the top of * struct lws, so a dummy wsi providing these only needs to be this big, while * still being castable for being a struct wsi * */ struct lws_a { struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; void *opaque_user_data; }; /* * For RTOS-class platforms, their code is relatively new, post-minimal examples * and tend to not have legacy user protocol handler baggage touching unexpected * things in fakewsi unconditionally... we can use an lws_a on the stack and * don't need to define the rest of the wsi content, just cast it, this saves * a wsi footprint in heap (typ 800 bytes nowadays even on RTOS). * * For other platforms that have been around for years and have thousands of * different user protocol handler implementations, it's likely some of them * will be touching the struct lws content unconditionally in the handler even * when we are calling back with a non wsi-specific reason, and may react badly * to it being garbage. So continue to implement those as a full, zero-ed down * prepared fakewsi on heap at context creation time. */ #if defined(LWS_PLAT_FREERTOS) #define lws_fakewsi_def_plwsa(pt) struct lws_a lwsa, *plwsa = &lwsa #else #define lws_fakewsi_def_plwsa(pt) struct lws_a *plwsa = &(pt)->fake_wsi->a #endif /* since we reuse the pt version, also correct to zero down the lws_a part */ #define lws_fakewsi_prep_plwsa_ctx(_c) \ memset(plwsa, 0, sizeof(*plwsa)); plwsa->context = _c struct lws { struct lws_a a; /* structs */ #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) struct _lws_http_mode_related http; #endif #if defined(LWS_ROLE_H2) struct _lws_h2_related h2; #endif #if defined(LWS_ROLE_WS) struct _lws_websocket_related *ws; /* allocated if we upgrade to ws */ #endif #if defined(LWS_ROLE_DBUS) struct _lws_dbus_mode_related dbus; #endif #if defined(LWS_ROLE_MQTT) struct _lws_mqtt_related *mqtt; #endif #if defined(LWS_ROLE_H2) || defined(LWS_ROLE_MQTT) struct lws_muxable mux; struct lws_tx_credit txc; #endif lws_lifecycle_t lc; /* lifetime members */ #if defined(LWS_WITH_EVENT_LIBS) void *evlib_wsi; /* overallocated */ #endif lws_sorted_usec_list_t sul_timeout; lws_sorted_usec_list_t sul_hrtimer; lws_sorted_usec_list_t sul_validity; lws_sorted_usec_list_t sul_connect_timeout; struct lws_dll2 dll_buflist; /* guys with pending rxflow */ struct lws_dll2 same_vh_protocol; struct lws_dll2 vh_awaiting_socket; #if defined(LWS_WITH_SYS_ASYNC_DNS) struct lws_dll2 adns; /* on adns list of guys to tell result */ lws_async_dns_cb_t adns_cb; /* callback with result */ #endif #if defined(LWS_WITH_SERVER) struct lws_dll2 listen_list; #endif #if defined(LWS_WITH_CLIENT) struct lws_dll2 dll_cli_active_conns; struct lws_dll2 dll2_cli_txn_queue; struct lws_dll2_owner dll2_cli_txn_queue_owner; /**< caliper is reused for tcp, tls and txn conn phases */ lws_dll2_t speculative_list; lws_dll2_owner_t speculative_connect_owner; /* wsis: additional connection candidates */ lws_dll2_owner_t dns_sorted_list; /* lws_dns_sort_t: dns results wrapped and sorted in a linked-list... * deleted as they are tried, list empty == everything tried */ #endif #if defined(LWS_WITH_SYS_FAULT_INJECTION) lws_fi_ctx_t fic; /**< Fault Injection ctx for the wsi, hierarchy wsi->vhost->context */ lws_sorted_usec_list_t sul_fault_timedclose; /**< used to inject a fault that closes the wsi after a random time */ #endif #if defined(LWS_WITH_SYS_METRICS) lws_metrics_caliper_compose(cal_conn) #endif lws_sockaddr46 sa46_local; lws_sockaddr46 sa46_peer; /* pointers */ struct lws *parent; /* points to parent, if any */ struct lws *child_list; /* points to first child */ struct lws *sibling_list; /* subsequent children at same level */ const struct lws_role_ops *role_ops; struct lws_sequencer *seq; /* associated sequencer if any */ const lws_retry_bo_t *retry_policy; lws_log_cx_t *log_cx; #if defined(LWS_WITH_THREADPOOL) && defined(LWS_HAVE_PTHREAD_H) lws_dll2_owner_t tp_task_owner; /* struct lws_threadpool_task */ #endif #if defined(LWS_WITH_PEER_LIMITS) struct lws_peer *peer; #endif #if defined(LWS_WITH_UDP) struct lws_udp *udp; #endif #if defined(LWS_WITH_CLIENT) struct client_info_stash *stash; char *cli_hostname_copy; #if defined(LWS_WITH_CONMON) struct lws_conmon conmon; lws_usec_t conmon_datum; #endif #endif /* WITH_CLIENT */ void *user_space; void *opaque_parent_data; struct lws_buflist *buflist; /* input-side buflist */ struct lws_buflist *buflist_out; /* output-side buflist */ #if defined(LWS_WITH_TLS) struct lws_lws_tls tls; char alpn[24]; #endif lws_sock_file_fd_type desc; /* .filefd / .sockfd */ lws_wsi_state_t wsistate; lws_wsi_state_t wsistate_pre_close; /* ints */ #define LWS_NO_FDS_POS (-1) int position_in_fds_table; #if defined(LWS_WITH_CLIENT) int chunk_remaining; int flags; #endif unsigned int cache_secs; short bugcatcher; unsigned int hdr_parsing_completed:1; unsigned int mux_substream:1; unsigned int upgraded_to_http2:1; unsigned int mux_stream_immortal:1; unsigned int h2_stream_carries_ws:1; /* immortal set as well */ unsigned int h2_stream_carries_sse:1; /* immortal set as well */ unsigned int h2_acked_settings:1; unsigned int seen_nonpseudoheader:1; unsigned int listener:1; unsigned int pf_packet:1; unsigned int do_broadcast:1; unsigned int user_space_externally_allocated:1; unsigned int socket_is_permanently_unusable:1; unsigned int rxflow_change_to:2; unsigned int conn_stat_done:1; unsigned int cache_reuse:1; unsigned int cache_revalidate:1; unsigned int cache_intermediaries:1; unsigned int favoured_pollin:1; unsigned int sending_chunked:1; unsigned int interpreting:1; unsigned int already_did_cce:1; unsigned int told_user_closed:1; unsigned int told_event_loop_closed:1; unsigned int waiting_to_send_close_frame:1; unsigned int close_needs_ack:1; unsigned int ipv6:1; unsigned int parent_pending_cb_on_writable:1; unsigned int cgi_stdout_zero_length:1; unsigned int seen_zero_length_recv:1; unsigned int rxflow_will_be_applied:1; unsigned int event_pipe:1; unsigned int handling_404:1; unsigned int protocol_bind_balance:1; unsigned int unix_skt:1; unsigned int close_when_buffered_out_drained:1; unsigned int h1_ws_proxied:1; unsigned int proxied_ws_parent:1; unsigned int do_bind:1; unsigned int validity_hup:1; unsigned int skip_fallback:1; unsigned int file_desc:1; unsigned int conn_validity_wakesuspend:1; unsigned int dns_reachability:1; unsigned int could_have_pending:1; /* detect back-to-back writes */ unsigned int outer_will_close:1; unsigned int shadow:1; /* we do not control fd lifecycle at all */ #if defined(LWS_WITH_SECURE_STREAMS) unsigned int for_ss:1; unsigned int bound_ss_proxy_conn:1; unsigned int client_bound_sspc:1; unsigned int client_proxy_onward:1; #endif unsigned int tls_borrowed:1; unsigned int tls_borrowed_hs:1; unsigned int tls_read_wanted_write:1; #ifdef LWS_WITH_ACCESS_LOG unsigned int access_log_pending:1; #endif #if defined(LWS_WITH_CLIENT) unsigned int do_ws:1; /* whether we are doing http or ws flow */ unsigned int chunked:1; /* if the clientside connection is chunked */ unsigned int client_rx_avail:1; unsigned int client_http_body_pending:1; unsigned int transaction_from_pipeline_queue:1; unsigned int keepalive_active:1; unsigned int keepalive_rejected:1; unsigned int redirected_to_get:1; unsigned int client_pipeline:1; unsigned int client_h2_alpn:1; unsigned int client_mux_substream:1; unsigned int client_mux_migrated:1; unsigned int client_subsequent_mime_part:1; unsigned int client_no_follow_redirect:1; unsigned int client_suppress_CONNECTION_ERROR:1; /**< because the client connection creation api is still the parent of * this activity, and will report the failure */ unsigned int tls_session_reused:1; unsigned int perf_done:1; unsigned int close_is_redirect:1; unsigned int client_mux_substream_was:1; #endif #ifdef _WIN32 unsigned int sock_send_blocking:1; #endif uint16_t ocport, c_port, conn_port; uint16_t retry; #if defined(LWS_WITH_CLIENT) uint16_t keep_warm_secs; #endif /* chars */ char lws_rx_parse_state; /* enum lws_rx_parse_state */ char rx_frame_type; /* enum lws_write_protocol */ char pending_timeout; /* enum pending_timeout */ char tsi; /* thread service index we belong to */ char protocol_interpret_idx; char redirects; uint8_t rxflow_bitmap; uint8_t bound_vhost_index; uint8_t lsp_channel; /* which of stdin/out/err */ #ifdef LWS_WITH_CGI char hdr_state; #endif #if defined(LWS_WITH_CLIENT) char chunk_parser; /* enum lws_chunk_parser */ uint8_t addrinfo_idx; uint8_t sys_tls_client_cert; uint8_t c_pri; #endif uint8_t af; #if defined(LWS_WITH_CGI) || defined(LWS_WITH_CLIENT) char reason_bf; /* internal writeable callback reason bitfield */ #endif #if defined(LWS_WITH_NETLINK) lws_route_uidx_t peer_route_uidx; /**< unique index of the route the connection is estimated to take */ #endif uint8_t immortal_substream_count; /* volatile to make sure code is aware other thread can change */ volatile char handling_pollout; volatile char leave_pollout_active; #if LWS_MAX_SMP > 1 volatile char undergoing_init_from_other_pt; #endif }; #define lws_is_flowcontrolled(w) (!!(wsi->rxflow_bitmap)) #if defined(LWS_WITH_SPAWN) #if defined(WIN32) || defined(_WIN32) #else #include #include #endif struct lws_spawn_piped { struct lws_spawn_piped_info info; struct lws_dll2 dll; lws_sorted_usec_list_t sul; lws_sorted_usec_list_t sul_reap; struct lws_context *context; struct lws *stdwsi[3]; lws_filefd_type pipe_fds[3][2]; int count_log_lines; lws_usec_t created; /* set by lws_spawn_piped() */ lws_usec_t reaped; lws_usec_t accounting[4]; #if defined(WIN32) HANDLE child_pid; lws_sorted_usec_list_t sul_poll; #else pid_t child_pid; siginfo_t si; #endif int reap_retry_budget; uint8_t pipes_alive:2; uint8_t we_killed_him_timeout:1; uint8_t we_killed_him_spew:1; uint8_t ungraceful:1; }; void lws_spawn_piped_destroy(struct lws_spawn_piped **lsp); int lws_spawn_reap(struct lws_spawn_piped *lsp); #endif void lws_service_do_ripe_rxflow(struct lws_context_per_thread *pt); const struct lws_role_ops * lws_role_by_name(const char *name); int lws_socket_bind(struct lws_vhost *vhost, struct lws *wsi, lws_sockfd_type sockfd, int port, const char *iface, int ipv6_allowed); #if defined(LWS_WITH_SYS_FAULT_INJECTION) void lws_wsi_fault_timedclose(struct lws *wsi); #else #define lws_wsi_fault_timedclose(_w) #endif #if defined(LWS_WITH_IPV6) unsigned long lws_get_addr_scope(struct lws *wsi, const char *ipaddr); #endif void lws_close_free_wsi(struct lws *wsi, enum lws_close_status, const char *caller); void __lws_close_free_wsi(struct lws *wsi, enum lws_close_status, const char *caller); void __lws_free_wsi(struct lws *wsi); void lws_conmon_addrinfo_destroy(struct addrinfo *ai); int lws_conmon_append_copy_new_dns_results(struct lws *wsi, const struct addrinfo *cai); #if LWS_MAX_SMP > 1 static LWS_INLINE void lws_pt_mutex_init(struct lws_context_per_thread *pt) { lws_mutex_refcount_init(&pt->mr); pthread_mutex_init(&pt->lock_stats, NULL); } static LWS_INLINE void lws_pt_mutex_destroy(struct lws_context_per_thread *pt) { pthread_mutex_destroy(&pt->lock_stats); lws_mutex_refcount_destroy(&pt->mr); } #define lws_pt_lock(pt, reason) lws_mutex_refcount_lock(&pt->mr, reason) #define lws_pt_unlock(pt) lws_mutex_refcount_unlock(&pt->mr) #define lws_pt_assert_lock_held(pt) lws_mutex_refcount_assert_held(&pt->mr) static LWS_INLINE void lws_pt_stats_lock(struct lws_context_per_thread *pt) { pthread_mutex_lock(&pt->lock_stats); } static LWS_INLINE void lws_pt_stats_unlock(struct lws_context_per_thread *pt) { pthread_mutex_unlock(&pt->lock_stats); } #endif /* * EXTENSIONS */ #if defined(LWS_WITHOUT_EXTENSIONS) #define lws_any_extension_handled(_a, _b, _c, _d) (0) #define lws_ext_cb_active(_a, _b, _c, _d) (0) #define lws_ext_cb_all_exts(_a, _b, _c, _d, _e) (0) #define lws_issue_raw_ext_access lws_issue_raw #define lws_context_init_extensions(_a, _b) #endif int LWS_WARN_UNUSED_RESULT lws_client_interpret_server_handshake(struct lws *wsi); int LWS_WARN_UNUSED_RESULT lws_ws_rx_sm(struct lws *wsi, char already_processed, unsigned char c); int LWS_WARN_UNUSED_RESULT lws_issue_raw_ext_access(struct lws *wsi, unsigned char *buf, size_t len); void lws_role_transition(struct lws *wsi, enum lwsi_role role, enum lwsi_state state, const struct lws_role_ops *ops); int lws_http_to_fallback(struct lws *wsi, unsigned char *buf, size_t len); int LWS_WARN_UNUSED_RESULT user_callback_handle_rxflow(lws_callback_function, struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len); int lws_plat_set_nonblocking(lws_sockfd_type fd); int lws_plat_set_socket_options(struct lws_vhost *vhost, lws_sockfd_type fd, int unix_skt); int lws_plat_set_socket_options_ip(lws_sockfd_type fd, uint8_t pri, int lws_flags); int lws_plat_check_connection_error(struct lws *wsi); int LWS_WARN_UNUSED_RESULT lws_header_table_attach(struct lws *wsi, int autoservice); int lws_header_table_detach(struct lws *wsi, int autoservice); int __lws_header_table_detach(struct lws *wsi, int autoservice); void lws_header_table_reset(struct lws *wsi, int autoservice); void __lws_header_table_reset(struct lws *wsi, int autoservice); char * LWS_WARN_UNUSED_RESULT lws_hdr_simple_ptr(struct lws *wsi, enum lws_token_indexes h); int LWS_WARN_UNUSED_RESULT lws_hdr_simple_create(struct lws *wsi, enum lws_token_indexes h, const char *s); int LWS_WARN_UNUSED_RESULT lws_ensure_user_space(struct lws *wsi); int LWS_WARN_UNUSED_RESULT lws_change_pollfd(struct lws *wsi, int _and, int _or); #if defined(LWS_WITH_SERVER) int _lws_vhost_init_server(const struct lws_context_creation_info *info, struct lws_vhost *vhost); struct lws_vhost * lws_select_vhost(struct lws_context *context, int port, const char *servername); int LWS_WARN_UNUSED_RESULT lws_parse_ws(struct lws *wsi, unsigned char **buf, size_t len); void lws_server_get_canonical_hostname(struct lws_context *context, const struct lws_context_creation_info *info); #else #define _lws_vhost_init_server(_a, _b) (0) #define lws_parse_ws(_a, _b, _c) (0) #define lws_server_get_canonical_hostname(_a, _b) #endif int __remove_wsi_socket_from_fds(struct lws *wsi); enum { LWSRXFC_ERROR = -1, LWSRXFC_CACHED = 0, LWSRXFC_ADDITIONAL = 1, LWSRXFC_TRIMMED = 2, }; int _lws_plat_service_forced_tsi(struct lws_context *context, int tsi); int lws_rxflow_cache(struct lws *wsi, unsigned char *buf, size_t n, size_t len); int lws_service_flag_pending(struct lws_context *context, int tsi); int lws_has_buffered_out(struct lws *wsi); int LWS_WARN_UNUSED_RESULT lws_ws_client_rx_sm(struct lws *wsi, unsigned char c); lws_parser_return_t LWS_WARN_UNUSED_RESULT lws_parse(struct lws *wsi, unsigned char *buf, int *len); int LWS_WARN_UNUSED_RESULT lws_parse_urldecode(struct lws *wsi, uint8_t *_c); void lws_sa46_copy_address(lws_sockaddr46 *sa46a, const void *in, int af); int LWS_WARN_UNUSED_RESULT lws_http_action(struct lws *wsi); void __lws_close_free_wsi_final(struct lws *wsi); void lws_libuv_closehandle(struct lws *wsi); int lws_libuv_check_watcher_active(struct lws *wsi); #if defined(LWS_WITH_EVLIB_PLUGINS) || defined(LWS_WITH_PLUGINS) const lws_plugin_header_t * lws_plat_dlopen(struct lws_plugin **pplugin, const char *libpath, const char *sofilename, const char *_class, each_plugin_cb_t each, void *each_user); int lws_plat_destroy_dl(struct lws_plugin *p); #endif struct lws * lws_adopt_socket_vhost(struct lws_vhost *vh, lws_sockfd_type accept_fd); void lws_vhost_bind_wsi(struct lws_vhost *vh, struct lws *wsi); void __lws_vhost_unbind_wsi(struct lws *wsi); /* req cx + vh lock */ void __lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs); int __lws_change_pollfd(struct lws *wsi, int _and, int _or); int lws_callback_as_writeable(struct lws *wsi); int lws_role_call_client_bind(struct lws *wsi, const struct lws_client_connect_info *i); void lws_remove_child_from_any_parent(struct lws *wsi); char * lws_generate_client_ws_handshake(struct lws *wsi, char *p, const char *conn1); int lws_client_ws_upgrade(struct lws *wsi, const char **cce); int lws_create_client_ws_object(const struct lws_client_connect_info *i, struct lws *wsi); int lws_alpn_comma_to_openssl(const char *comma, uint8_t *os, int len); int lws_role_call_alpn_negotiated(struct lws *wsi, const char *alpn); int lws_tls_server_conn_alpn(struct lws *wsi); int lws_ws_client_rx_sm_block(struct lws *wsi, unsigned char **buf, size_t len); void lws_destroy_event_pipe(struct lws *wsi); /* socks */ int lws_socks5c_generate_msg(struct lws *wsi, enum socks_msg_type type, ssize_t *msg_len); int LWS_WARN_UNUSED_RESULT __insert_wsi_socket_into_fds(struct lws_context *context, struct lws *wsi); int LWS_WARN_UNUSED_RESULT lws_issue_raw(struct lws *wsi, unsigned char *buf, size_t len); lws_usec_t __lws_seq_timeout_check(struct lws_context_per_thread *pt, lws_usec_t usnow); lws_usec_t __lws_ss_timeout_check(struct lws_context_per_thread *pt, lws_usec_t usnow); struct lws * LWS_WARN_UNUSED_RESULT lws_client_connect_2_dnsreq(struct lws *wsi); LWS_VISIBLE struct lws * LWS_WARN_UNUSED_RESULT lws_client_reset(struct lws **wsi, int ssl, const char *address, int port, const char *path, const char *host, char weak); struct lws * LWS_WARN_UNUSED_RESULT lws_create_new_server_wsi(struct lws_vhost *vhost, int fixed_tsi, const char *desc); char * LWS_WARN_UNUSED_RESULT lws_generate_client_handshake(struct lws *wsi, char *pkt); int lws_handle_POLLOUT_event(struct lws *wsi, struct lws_pollfd *pollfd); struct lws * lws_http_client_connect_via_info2(struct lws *wsi); struct lws * __lws_wsi_create_with_role(struct lws_context *context, int tsi, const struct lws_role_ops *ops, lws_log_cx_t *log_cx_template); int lws_wsi_inject_to_loop(struct lws_context_per_thread *pt, struct lws *wsi); int lws_wsi_extract_from_loop(struct lws *wsi); #if defined(LWS_WITH_CLIENT) int lws_http_client_socket_service(struct lws *wsi, struct lws_pollfd *pollfd); int LWS_WARN_UNUSED_RESULT lws_http_transaction_completed_client(struct lws *wsi); #if !defined(LWS_WITH_TLS) #define lws_context_init_client_ssl(_a, _b) (0) #endif void lws_decode_ssl_error(void); #else #define lws_context_init_client_ssl(_a, _b) (0) #endif int __lws_rx_flow_control(struct lws *wsi); int _lws_change_pollfd(struct lws *wsi, int _and, int _or, struct lws_pollargs *pa); #if defined(LWS_WITH_SERVER) int lws_handshake_server(struct lws *wsi, unsigned char **buf, size_t len); #else #define lws_server_socket_service(_b, _c) (0) #define lws_handshake_server(_a, _b, _c) (0) #endif #ifdef LWS_WITH_ACCESS_LOG int lws_access_log(struct lws *wsi); void lws_prepare_access_log_info(struct lws *wsi, char *uri_ptr, int len, int meth); #else #define lws_access_log(_a) #endif #if defined(_DEBUG) void lws_wsi_txc_describe(struct lws_tx_credit *txc, const char *at, uint32_t sid); #else #define lws_wsi_txc_describe(x, y, z) { (void)x; } #endif int lws_wsi_txc_check_skint(struct lws_tx_credit *txc, int32_t tx_cr); int lws_wsi_txc_report_manual_txcr_in(struct lws *wsi, int32_t bump); void lws_mux_mark_immortal(struct lws *wsi); void lws_http_close_immortal(struct lws *wsi); int lws_cgi_kill_terminated(struct lws_context_per_thread *pt); void lws_cgi_remove_and_kill(struct lws *wsi); void lws_plat_delete_socket_from_fds(struct lws_context *context, struct lws *wsi, int m); void lws_plat_insert_socket_into_fds(struct lws_context *context, struct lws *wsi); int lws_plat_change_pollfd(struct lws_context *context, struct lws *wsi, struct lws_pollfd *pfd); #if defined(LWS_WITH_SERVER) && defined(LWS_WITH_SECURE_STREAMS) int lws_adopt_ss_server_accept(struct lws *new_wsi); #endif int lws_plat_pipe_create(struct lws *wsi); int lws_plat_pipe_signal(struct lws_context *ctx, int tsi); void lws_plat_pipe_close(struct lws *wsi); int lws_plat_pipe_is_fd_assocated(struct lws_context *cx, int tsi, lws_sockfd_type fd); void lws_addrinfo_clean(struct lws *wsi); void lws_add_wsi_to_draining_ext_list(struct lws *wsi); void lws_remove_wsi_from_draining_ext_list(struct lws *wsi); int lws_poll_listen_fd(struct lws_pollfd *fd); int lws_plat_service(struct lws_context *context, int timeout_ms); LWS_VISIBLE int _lws_plat_service_tsi(struct lws_context *context, int timeout_ms, int tsi); int lws_pthread_self_to_tsi(struct lws_context *context); const char * LWS_WARN_UNUSED_RESULT lws_plat_inet_ntop(int af, const void *src, char *dst, socklen_t cnt); int LWS_WARN_UNUSED_RESULT lws_plat_inet_pton(int af, const char *src, void *dst); void lws_same_vh_protocol_remove(struct lws *wsi); void __lws_same_vh_protocol_remove(struct lws *wsi); void lws_same_vh_protocol_insert(struct lws *wsi, int n); int lws_client_stash_create(struct lws *wsi, const char **cisin); void lws_seq_destroy_all_on_pt(struct lws_context_per_thread *pt); void lws_addrinfo_clean(struct lws *wsi); int _lws_route_pt_close_unroutable(struct lws_context_per_thread *pt); void _lws_routing_entry_dump(struct lws_context *cx, lws_route_t *rou); void _lws_routing_table_dump(struct lws_context *cx); #define LRR_IGNORE_PRI (1 << 0) #define LRR_MATCH_SRC (1 << 1) #define LRR_MATCH_DST (1 << 2) lws_route_t * _lws_route_remove(struct lws_context_per_thread *pt, lws_route_t *robj, int flags); void _lws_route_table_empty(struct lws_context_per_thread *pt); void _lws_route_table_ifdown(struct lws_context_per_thread *pt, int idx); lws_route_uidx_t _lws_route_get_uidx(struct lws_context *cx); int _lws_route_pt_close_route_users(struct lws_context_per_thread *pt, lws_route_uidx_t uidx); lws_route_t * _lws_route_est_outgoing(struct lws_context_per_thread *pt, const lws_sockaddr46 *dest); int lws_sort_dns(struct lws *wsi, const struct addrinfo *result); int lws_broadcast(struct lws_context_per_thread *pt, int reason, void *in, size_t len); #if defined(LWS_WITH_PEER_LIMITS) void lws_peer_track_wsi_close(struct lws_context *context, struct lws_peer *peer); int lws_peer_confirm_ah_attach_ok(struct lws_context *context, struct lws_peer *peer); void lws_peer_track_ah_detach(struct lws_context *context, struct lws_peer *peer); void lws_peer_cull_peer_wait_list(struct lws_context *context); struct lws_peer * lws_get_or_create_peer(struct lws_vhost *vhost, lws_sockfd_type sockfd); void lws_peer_add_wsi(struct lws_context *context, struct lws_peer *peer, struct lws *wsi); void lws_peer_dump_from_wsi(struct lws *wsi); #endif #ifdef LWS_WITH_HUBBUB hubbub_error html_parser_cb(const hubbub_token *token, void *pw); #endif #if defined(_DEBUG) void lws_service_assert_loop_thread(struct lws_context *cx, int tsi); #else #define lws_service_assert_loop_thread(_cx, _tsi) #endif int lws_threadpool_tsi_context(struct lws_context *context, int tsi); void lws_threadpool_wsi_closing(struct lws *wsi); void __lws_wsi_remove_from_sul(struct lws *wsi); void lws_validity_confirmed(struct lws *wsi); void _lws_validity_confirmed_role(struct lws *wsi); int lws_seq_pt_init(struct lws_context_per_thread *pt); int lws_buflist_aware_read(struct lws_context_per_thread *pt, struct lws *wsi, struct lws_tokens *ebuf, char fr, const char *hint); int lws_buflist_aware_finished_consuming(struct lws *wsi, struct lws_tokens *ebuf, int used, int buffered, const char *hint); extern const struct lws_protocols protocol_abs_client_raw_skt, protocol_abs_client_unit_test; void __lws_reset_wsi(struct lws *wsi); void lws_metrics_dump(struct lws_context *ctx); void lws_inform_client_conn_fail(struct lws *wsi, void *arg, size_t len); #if defined(LWS_WITH_SYS_ASYNC_DNS) lws_async_dns_server_check_t lws_plat_asyncdns_init(struct lws_context *context, lws_sockaddr46 *sa); int lws_async_dns_init(struct lws_context *context); void lws_async_dns_deinit(lws_async_dns_t *dns); #endif int lws_protocol_init_vhost(struct lws_vhost *vh, int *any); int _lws_generic_transaction_completed_active_conn(struct lws **wsi, char take_vh_lock); #define ACTIVE_CONNS_SOLO 0 #define ACTIVE_CONNS_MUXED 1 #define ACTIVE_CONNS_QUEUED 2 #define ACTIVE_CONNS_FAILED 3 #if defined(_DEBUG) && !defined(LWS_PLAT_FREERTOS) && !defined(WIN32) && !defined(LWS_PLAT_OPTEE) int sanity_assert_no_wsi_traces(const struct lws_context *context, struct lws *wsi); int sanity_assert_no_sockfd_traces(const struct lws_context *context, lws_sockfd_type sfd); #else static inline int sanity_assert_no_wsi_traces(const struct lws_context *context, struct lws *wsi) { (void)context; (void)wsi; return 0; } static inline int sanity_assert_no_sockfd_traces(const struct lws_context *context, lws_sockfd_type sfd) { (void)context; (void)sfd; return 0; } #endif void delete_from_fdwsi(const struct lws_context *context, struct lws *wsi); int lws_vhost_active_conns(struct lws *wsi, struct lws **nwsi, const char *adsin); const char * lws_wsi_client_stash_item(struct lws *wsi, int stash_idx, int hdr_idx); int lws_plat_BINDTODEVICE(lws_sockfd_type fd, const char *ifname); int lws_socks5c_ads_server(struct lws_vhost *vh, const struct lws_context_creation_info *info); int lws_socks5c_handle_state(struct lws *wsi, struct lws_pollfd *pollfd, const char **pcce); int lws_socks5c_greet(struct lws *wsi, const char **pcce); int lws_plat_mbedtls_net_send(void *ctx, const uint8_t *buf, size_t len); int lws_plat_mbedtls_net_recv(void *ctx, unsigned char *buf, size_t len); lws_usec_t lws_sul_nonmonotonic_adjust(struct lws_context *ctx, int64_t step_us); void __lws_vhost_destroy_pt_wsi_dieback_start(struct lws_vhost *vh); int lws_vhost_compare_listen(struct lws_vhost *v1, struct lws_vhost *v2); void lws_netdev_instance_remove_destroy(struct lws_netdev_instance *ni); int lws_score_dns_results(struct lws_context *ctx, const struct addrinfo **result); #if defined(LWS_WITH_SYS_SMD) int lws_netdev_smd_cb(void *opaque, lws_smd_class_t _class, lws_usec_t timestamp, void *buf, size_t len); #endif void lws_netdev_instance_create(lws_netdev_instance_t *ni, struct lws_context *ctx, const lws_netdev_ops_t *ops, const char *name, void *platinfo); int lws_netdev_wifi_rssi_sort_compare(const lws_dll2_t *d, const lws_dll2_t *i); void lws_netdev_wifi_scan_empty(lws_netdev_instance_wifi_t *wnd); lws_wifi_sta_t * lws_netdev_wifi_scan_find(lws_netdev_instance_wifi_t *wnd, const char *ssid, const uint8_t *bssid); int lws_netdev_wifi_scan_select(lws_netdev_instance_wifi_t *wnd); lws_wifi_creds_t * lws_netdev_credentials_find(lws_netdevs_t *netdevs, const char *ssid, const uint8_t *bssid); int lws_netdev_wifi_redo_last(lws_netdev_instance_wifi_t *wnd); void lws_ntpc_trigger(struct lws_context *ctx); void lws_netdev_wifi_scan(lws_sorted_usec_list_t *sul); #define lws_netdevs_from_ndi(ni) \ lws_container_of((ni)->list.owner, lws_netdevs_t, owner) #define lws_context_from_netdevs(nd) \ lws_container_of(nd, struct lws_context, netdevs) /* get the owner of the ni, then compute the context the owner is embedded in */ #define netdev_instance_to_ctx(ni) \ lws_container_of(lws_netdevs_from_ndi(ni), \ struct lws_context, netdevs) enum { LW5CHS_RET_RET0, LW5CHS_RET_BAIL3, LW5CHS_RET_STARTHS, LW5CHS_RET_NOTHING }; void lws_4to6(uint8_t *v6addr, const uint8_t *v4addr); void lws_sa46_4to6(lws_sockaddr46 *sa46, const uint8_t *v4addr, uint16_t port); #ifdef __cplusplus }; #endif #endif libwebsockets-4.3.5/lib/core-net/route.c000066400000000000000000000253551476025525100201700ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * We mainly focus on the routing table / gateways because those are the * elements that decide if we can get on to the internet or not. * * Everything here is _ because the caller needs to hold the pt lock in order * to access the pt routing table safely */ #include #if defined(_DEBUG) void _lws_routing_entry_dump(struct lws_context *cx, lws_route_t *rou) { char sa[48], fin[192], *end = &fin[sizeof(fin)]; char *it = fin; int n; fin[0] = '\0'; if (rou->dest.sa4.sin_family) { lws_sa46_write_numeric_address(&rou->dest, sa, sizeof(sa)); n = lws_snprintf(it, lws_ptr_diff_size_t(end, it), "dst: %s/%d, ", sa, rou->dest_len); it = it + n; } if (rou->src.sa4.sin_family) { lws_sa46_write_numeric_address(&rou->src, sa, sizeof(sa)); n = lws_snprintf(it, lws_ptr_diff_size_t(end, it), "src: %s/%d, ", sa, rou->src_len); it = it + n; } if (rou->gateway.sa4.sin_family) { lws_sa46_write_numeric_address(&rou->gateway, sa, sizeof(sa)); n = lws_snprintf(it, lws_ptr_diff_size_t(end, it), "gw: %s, ", sa); it = it + n; } lwsl_cx_info(cx, " %s ifidx: %d, pri: %d, proto: %d\n", fin, rou->if_idx, rou->priority, rou->proto); } void _lws_routing_table_dump(struct lws_context *cx) { lwsl_cx_info(cx, "\n"); lws_start_foreach_dll(struct lws_dll2 *, d, lws_dll2_get_head(&cx->routing_table)) { lws_route_t *rou = lws_container_of(d, lws_route_t, list); _lws_routing_entry_dump(cx, rou); } lws_end_foreach_dll(d); } #endif /* * We will provide a "fingerprint ordinal" as the route uidx that is unique in * the routing table. Wsi that connect mark themselves with the uidx of the * route they are estimated to be using. * * This lets us detect things like gw changes, eg when switching from wlan to * lte there may still be a valid gateway route, but all existing tcp * connections previously using the wlan gateway will be broken, since their * connections are from its gateway to the peer. * * So when we take down a route, we take care to look for any wsi that was * estimated to be using that route, eg, for gateway, and close those wsi. * * It's OK if the route uidx wraps, we explicitly confirm nobody else is using * the uidx before assigning one to a new route. * * We won't use uidx 0, so it can be understood to mean the uidx was never set. */ lws_route_uidx_t _lws_route_get_uidx(struct lws_context *cx) { lws_route_uidx_t ou; if (!cx->route_uidx) cx->route_uidx++; ou = cx->route_uidx; do { uint8_t again = 0; /* Anybody in the table already uses the pt's next uidx? */ lws_start_foreach_dll(struct lws_dll2 *, d, lws_dll2_get_head(&cx->routing_table)) { lws_route_t *rou = lws_container_of(d, lws_route_t, list); if (rou->uidx == cx->route_uidx) { /* if so, bump and restart the check */ cx->route_uidx++; if (!cx->route_uidx) cx->route_uidx++; if (cx->route_uidx == ou) { assert(0); /* we have filled up the 8-bit uidx space? */ return 0; } again = 1; break; } } lws_end_foreach_dll(d); if (!again) return cx->route_uidx++; } while (1); } lws_route_t * _lws_route_remove(struct lws_context_per_thread *pt, lws_route_t *robj, int flags) { lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, lws_dll2_get_head(&pt->context->routing_table)) { lws_route_t *rou = lws_container_of(d, lws_route_t, list); if ((!(flags & LRR_MATCH_SRC) || !lws_sa46_compare_ads(&robj->src, &rou->src)) && (!(flags & LRR_MATCH_DST) || !lws_sa46_compare_ads(&robj->dest, &rou->dest)) && (!robj->gateway.sa4.sin_family || !lws_sa46_compare_ads(&robj->gateway, &rou->gateway)) && robj->dest_len <= rou->dest_len && robj->if_idx == rou->if_idx && ((flags & LRR_IGNORE_PRI) || robj->priority == rou->priority) ) { lwsl_cx_info(pt->context, "deleting route"); _lws_route_pt_close_route_users(pt, robj->uidx); lws_dll2_remove(&rou->list); lws_free(rou); } } lws_end_foreach_dll_safe(d, d1); return NULL; } void _lws_route_table_empty(struct lws_context_per_thread *pt) { if (!pt->context) return; lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, lws_dll2_get_head(&pt->context->routing_table)) { lws_route_t *rou = lws_container_of(d, lws_route_t, list); lws_dll2_remove(&rou->list); lws_free(rou); } lws_end_foreach_dll_safe(d, d1); } void _lws_route_table_ifdown(struct lws_context_per_thread *pt, int idx) { lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, lws_dll2_get_head(&pt->context->routing_table)) { lws_route_t *rou = lws_container_of(d, lws_route_t, list); if (rou->if_idx == idx) { lws_dll2_remove(&rou->list); lws_free(rou); } } lws_end_foreach_dll_safe(d, d1); } lws_route_t * _lws_route_est_outgoing(struct lws_context_per_thread *pt, const lws_sockaddr46 *dest) { lws_route_t *best_gw = NULL; int best_gw_priority = INT_MAX; if (!dest->sa4.sin_family) { lwsl_cx_notice(pt->context, "dest has 0 AF"); /* leave it alone */ return NULL; } /* * Given the dest address and the current routing table, select the * route we think it would go out on... if we find a matching network * route, just return that, otherwise find the "best" gateway by * looking at the priority of them. */ lws_start_foreach_dll(struct lws_dll2 *, d, lws_dll2_get_head(&pt->context->routing_table)) { lws_route_t *rou = lws_container_of(d, lws_route_t, list); // _lws_routing_entry_dump(rou); if (rou->dest.sa4.sin_family && !lws_sa46_on_net(dest, &rou->dest, rou->dest_len)) /* * Yes, he has a matching network route, it beats out * any gateway route. This is like finding a route for * 192.168.0.0/24 when dest is 192.168.0.1. */ return rou; lwsl_cx_debug(pt->context, "dest af %d, rou gw af %d, pri %d", dest->sa4.sin_family, rou->gateway.sa4.sin_family, rou->priority); if (rou->gateway.sa4.sin_family && /* * dest gw * 4 4 OK * 4 6 OK with ::ffff:x:x * 6 4 not supported directly * 6 6 OK */ (dest->sa4.sin_family == rou->gateway.sa4.sin_family || (dest->sa4.sin_family == AF_INET && rou->gateway.sa4.sin_family == AF_INET6)) && rou->priority < best_gw_priority) { lwsl_cx_info(pt->context, "gw hit"); best_gw_priority = rou->priority; best_gw = rou; } } lws_end_foreach_dll(d); /* * Either best_gw is the best gw route and we set *best_gw_priority to * the best one's priority, or we're returning NULL as no network or * gw route for dest. */ lwsl_cx_info(pt->context, "returning %p", best_gw); return best_gw; } /* * Determine if the source still exists */ lws_route_t * _lws_route_find_source(struct lws_context_per_thread *pt, const lws_sockaddr46 *src) { lws_start_foreach_dll(struct lws_dll2 *, d, lws_dll2_get_head(&pt->context->routing_table)) { lws_route_t *rou = lws_container_of(d, lws_route_t, list); // _lws_routing_entry_dump(rou); if (rou->src.sa4.sin_family && !lws_sa46_compare_ads(src, &rou->src)) /* * Source route still exists */ return rou; } lws_end_foreach_dll(d); return NULL; } int _lws_route_check_wsi(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; char buf[72]; if (!wsi->sa46_peer.sa4.sin_family || #if defined(LWS_WITH_UNIX_SOCK) wsi->unix_skt || wsi->sa46_peer.sa4.sin_family == AF_UNIX || #endif wsi->desc.sockfd == LWS_SOCK_INVALID) /* not a socket, cannot judge by route, or not connected, * leave it alone */ return 0; /* OK */ /* the route to the peer is still workable? */ if (!_lws_route_est_outgoing(pt, &wsi->sa46_peer)) { /* no way to talk to the peer */ lwsl_wsi_notice(wsi, "dest route gone"); return 1; } /* the source address is still workable? */ lws_sa46_write_numeric_address(&wsi->sa46_local, buf, sizeof(buf)); //lwsl_notice("%s: %s sa46_local %s fam %d\n", __func__, wsi->lc.gutag, // buf, wsi->sa46_local.sa4.sin_family); if (wsi->sa46_local.sa4.sin_family && !_lws_route_find_source(pt, &wsi->sa46_local)) { lws_sa46_write_numeric_address(&wsi->sa46_local, buf, sizeof(buf)); lwsl_wsi_notice(wsi, "source %s gone", buf); return 1; } lwsl_wsi_debug(wsi, "source + dest OK"); return 0; } int _lws_route_pt_close_unroutable(struct lws_context_per_thread *pt) { struct lws *wsi; unsigned int n; if (!pt->context->nl_initial_done #if defined(LWS_WITH_SYS_STATE) || pt->context->mgr_system.state < LWS_SYSTATE_IFACE_COLDPLUG #endif ) return 0; lwsl_cx_debug(pt->context, "in"); #if defined(_DEBUG) _lws_routing_table_dump(pt->context); #endif for (n = 0; n < pt->fds_count; n++) { wsi = wsi_from_fd(pt->context, pt->fds[n].fd); if (!wsi) continue; if (_lws_route_check_wsi(wsi)) { lwsl_wsi_info(wsi, "culling wsi"); lws_wsi_close(wsi, LWS_TO_KILL_ASYNC); } } return 0; } int _lws_route_pt_close_route_users(struct lws_context_per_thread *pt, lws_route_uidx_t uidx) { struct lws *wsi; unsigned int n; if (!uidx) return 0; lwsl_cx_info(pt->context, "closing users of route %d", uidx); for (n = 0; n < pt->fds_count; n++) { wsi = wsi_from_fd(pt->context, pt->fds[n].fd); if (!wsi) continue; if (wsi->desc.sockfd != LWS_SOCK_INVALID && #if defined(LWS_WITH_UNIX_SOCK) !wsi->unix_skt && wsi->sa46_peer.sa4.sin_family != AF_UNIX && #endif wsi->sa46_peer.sa4.sin_family && wsi->peer_route_uidx == uidx) { lwsl_wsi_notice(wsi, "culling wsi"); lws_wsi_close(wsi, LWS_TO_KILL_ASYNC); } } return 0; } libwebsockets-4.3.5/lib/core-net/sequencer.c000066400000000000000000000204351476025525100210160ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" /* * per pending event */ typedef struct lws_seq_event { struct lws_dll2 seq_event_list; void *data; void *aux; lws_seq_events_t e; } lws_seq_event_t; /* * per sequencer */ typedef struct lws_sequencer { struct lws_dll2 seq_list; lws_sorted_usec_list_t sul_timeout; lws_sorted_usec_list_t sul_pending; struct lws_dll2_owner seq_event_owner; struct lws_context_per_thread *pt; lws_seq_event_cb cb; const char *name; const lws_retry_bo_t *retry; lws_usec_t time_created; lws_usec_t timeout; /* 0 or time we timeout */ uint8_t going_down:1; uint8_t wakesuspend:1; } lws_seq_t; #define QUEUE_SANITY_LIMIT 10 static void lws_sul_seq_heartbeat_cb(lws_sorted_usec_list_t *sul) { struct lws_context_per_thread *pt = lws_container_of(sul, struct lws_context_per_thread, sul_seq_heartbeat); /* send every sequencer a heartbeat message... it can ignore it */ lws_start_foreach_dll_safe(struct lws_dll2 *, p, tp, lws_dll2_get_head(&pt->seq_owner)) { lws_seq_t *s = lws_container_of(p, lws_seq_t, seq_list); /* queue the message to inform the sequencer */ lws_seq_queue_event(s, LWSSEQ_HEARTBEAT, NULL, NULL); } lws_end_foreach_dll_safe(p, tp); /* schedule the next one */ __lws_sul_insert_us(&pt->pt_sul_owner[LWSSULLI_MISS_IF_SUSPENDED], &pt->sul_seq_heartbeat, LWS_US_PER_SEC); } int lws_seq_pt_init(struct lws_context_per_thread *pt) { pt->sul_seq_heartbeat.cb = lws_sul_seq_heartbeat_cb; /* schedule the first heartbeat */ __lws_sul_insert_us(&pt->pt_sul_owner[LWSSULLI_MISS_IF_SUSPENDED], &pt->sul_seq_heartbeat, LWS_US_PER_SEC); return 0; } lws_seq_t * lws_seq_create(lws_seq_info_t *i) { struct lws_context_per_thread *pt = &i->context->pt[i->tsi]; lws_seq_t *seq = lws_zalloc(sizeof(*seq) + i->user_size, __func__); if (!seq) return NULL; seq->cb = i->cb; seq->pt = pt; seq->name = i->name; seq->retry = i->retry; seq->wakesuspend = i->wakesuspend; *i->puser = (void *)&seq[1]; /* add the sequencer to the pt */ lws_pt_lock(pt, __func__); /* ---------------------------------- pt { */ lws_dll2_add_tail(&seq->seq_list, &pt->seq_owner); lws_pt_unlock(pt); /* } pt ------------------------------------------ */ seq->time_created = lws_now_usecs(); /* try to queue the creation cb */ if (lws_seq_queue_event(seq, LWSSEQ_CREATED, NULL, NULL)) { lws_dll2_remove(&seq->seq_list); lws_free(seq); return NULL; } return seq; } static int seq_ev_destroy(struct lws_dll2 *d, void *user) { lws_seq_event_t *seqe = lws_container_of(d, lws_seq_event_t, seq_event_list); lws_dll2_remove(&seqe->seq_event_list); lws_free(seqe); return 0; } void lws_seq_destroy(lws_seq_t **pseq) { lws_seq_t *seq = *pseq; /* defeat another thread racing to add events while we are destroying */ seq->going_down = 1; seq->cb(seq, (void *)&seq[1], LWSSEQ_DESTROYED, NULL, NULL); lws_pt_lock(seq->pt, __func__); /* -------------------------- pt { */ lws_dll2_remove(&seq->seq_list); lws_dll2_remove(&seq->sul_timeout.list); lws_dll2_remove(&seq->sul_pending.list); /* remove and destroy any pending events */ lws_dll2_foreach_safe(&seq->seq_event_owner, NULL, seq_ev_destroy); lws_pt_unlock(seq->pt); /* } pt ---------------------------------- */ lws_free_set_NULL(seq); } void lws_seq_destroy_all_on_pt(struct lws_context_per_thread *pt) { lws_start_foreach_dll_safe(struct lws_dll2 *, p, tp, pt->seq_owner.head) { lws_seq_t *s = lws_container_of(p, lws_seq_t, seq_list); lws_seq_destroy(&s); } lws_end_foreach_dll_safe(p, tp); } static void lws_seq_sul_pending_cb(lws_sorted_usec_list_t *sul) { lws_seq_t *seq = lws_container_of(sul, lws_seq_t, sul_pending); lws_seq_event_t *seqe; struct lws_dll2 *dh; int n; if (!seq->seq_event_owner.count) return; /* events are only added at tail, so no race possible yet... */ dh = lws_dll2_get_head(&seq->seq_event_owner); seqe = lws_container_of(dh, lws_seq_event_t, seq_event_list); n = (int)seq->cb(seq, (void *)&seq[1], (int)seqe->e, seqe->data, seqe->aux); /* ... have to lock here though, because we will change the list */ lws_pt_lock(seq->pt, __func__); /* ----------------------------- pt { */ /* detach event from sequencer event list and free it */ lws_dll2_remove(&seqe->seq_event_list); lws_free(seqe); lws_pt_unlock(seq->pt); /* } pt ------------------------------------- */ if (n) { lwsl_info("%s: destroying seq '%s' by request\n", __func__, seq->name); lws_seq_destroy(&seq); } } int lws_seq_queue_event(lws_seq_t *seq, lws_seq_events_t e, void *data, void *aux) { lws_seq_event_t *seqe; if (!seq || seq->going_down) return 1; seqe = lws_zalloc(sizeof(*seqe), __func__); if (!seqe) return 1; seqe->e = e; seqe->data = data; seqe->aux = aux; // lwsl_notice("%s: seq %s: event %d\n", __func__, seq->name, e); lws_pt_lock(seq->pt, __func__); /* ----------------------------- pt { */ if (seq->seq_event_owner.count > QUEUE_SANITY_LIMIT) { lwsl_err("%s: more than %d events queued\n", __func__, QUEUE_SANITY_LIMIT); } lws_dll2_add_tail(&seqe->seq_event_list, &seq->seq_event_owner); seq->sul_pending.cb = lws_seq_sul_pending_cb; __lws_sul_insert_us(&seq->pt->pt_sul_owner[seq->wakesuspend], &seq->sul_pending, 1); lws_pt_unlock(seq->pt); /* } pt ------------------------------------- */ return 0; } /* * Check if wsi still extant, by peeking in the message queue for a * LWSSEQ_WSI_CONN_CLOSE message about wsi. (Doesn't need to do the same for * CONN_FAIL since that will never have produced any messages prior to that). * * Use this to avoid trying to perform operations on wsi that have already * closed but we didn't get to that message yet. * * Returns 0 if not closed yet or 1 if it has closed but we didn't process the * close message yet. */ int lws_seq_check_wsi(lws_seq_t *seq, struct lws *wsi) { lws_seq_event_t *seqe; struct lws_dll2 *dh; lws_pt_lock(seq->pt, __func__); /* ----------------------------- pt { */ dh = lws_dll2_get_head(&seq->seq_event_owner); while (dh) { seqe = lws_container_of(dh, lws_seq_event_t, seq_event_list); if (seqe->e == LWSSEQ_WSI_CONN_CLOSE && seqe->data == wsi) break; dh = dh->next; } lws_pt_unlock(seq->pt); /* } pt ------------------------------------- */ return !!dh; } static void lws_seq_sul_timeout_cb(lws_sorted_usec_list_t *sul) { lws_seq_t *s = lws_container_of(sul, lws_seq_t, sul_timeout); lws_seq_queue_event(s, LWSSEQ_TIMED_OUT, NULL, NULL); } /* set us to LWS_SET_TIMER_USEC_CANCEL to remove timeout */ int lws_seq_timeout_us(lws_seq_t *seq, lws_usec_t us) { seq->sul_timeout.cb = lws_seq_sul_timeout_cb; /* list is always at the very top of the sul */ __lws_sul_insert_us(&seq->pt->pt_sul_owner[seq->wakesuspend], (lws_sorted_usec_list_t *)&seq->sul_timeout.list, us); return 0; } lws_seq_t * lws_seq_from_user(void *u) { return &((lws_seq_t *)u)[-1]; } const char * lws_seq_name(lws_seq_t *seq) { return seq->name; } lws_usec_t lws_seq_us_since_creation(lws_seq_t *seq) { return lws_now_usecs() - seq->time_created; } struct lws_context * lws_seq_get_context(lws_seq_t *seq) { return seq->pt->context; } libwebsockets-4.3.5/lib/core-net/service.c000066400000000000000000000526771476025525100205010ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #if defined(_DEBUG) void lws_service_assert_loop_thread(struct lws_context *cx, int tsi) { if (!cx->event_loop_ops->foreign_thread) /* we can't judge it */ return; if (!cx->event_loop_ops->foreign_thread(cx, tsi)) /* OK */ return; /* * Lws apis are NOT THREADSAFE with the sole exception of * lws_cancel_service(). If you look at the assert backtrace, you * should see you're illegally calling an lws api from another thread. */ assert(0); } #endif int lws_callback_as_writeable(struct lws *wsi) { int n, m; n = wsi->role_ops->writeable_cb[lwsi_role_server(wsi)]; m = user_callback_handle_rxflow(wsi->a.protocol->callback, wsi, (enum lws_callback_reasons) n, wsi->user_space, NULL, 0); return m; } int lws_handle_POLLOUT_event(struct lws *wsi, struct lws_pollfd *pollfd) { volatile struct lws *vwsi = (volatile struct lws *)wsi; int n; if (wsi->socket_is_permanently_unusable) return 0; vwsi->leave_pollout_active = 0; vwsi->handling_pollout = 1; /* * if another thread wants POLLOUT on us, from here on while * handling_pollout is set, he will only set leave_pollout_active. * If we are going to disable POLLOUT, we will check that first. */ wsi->could_have_pending = 0; /* clear back-to-back write detection */ /* * user callback is lowest priority to get these notifications * actually, since other pending things cannot be disordered * * Priority 1: pending truncated sends are incomplete ws fragments * If anything else sent first the protocol would be * corrupted. * * These are post- any compression transform */ if (lws_has_buffered_out(wsi)) { if (lws_issue_raw(wsi, NULL, 0) < 0) { lwsl_wsi_info(wsi, "signalling to close"); goto bail_die; } /* leave POLLOUT active either way */ goto bail_ok; } else if (lwsi_state(wsi) == LRS_FLUSHING_BEFORE_CLOSE) { wsi->socket_is_permanently_unusable = 1; goto bail_die; /* retry closing now */ } /* Priority 2: pre- compression transform */ #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) if (wsi->http.comp_ctx.buflist_comp || wsi->http.comp_ctx.may_have_more) { enum lws_write_protocol wp = LWS_WRITE_HTTP; lwsl_wsi_info(wsi, "compl comp partial (buflist_comp %p, may %d)", wsi->http.comp_ctx.buflist_comp, wsi->http.comp_ctx.may_have_more); if (lws_rops_fidx(wsi->role_ops, LWS_ROPS_write_role_protocol) && lws_rops_func_fidx(wsi->role_ops, LWS_ROPS_write_role_protocol). write_role_protocol(wsi, NULL, 0, &wp) < 0) { lwsl_wsi_info(wsi, "signalling to close"); goto bail_die; } lws_callback_on_writable(wsi); goto bail_ok; } #endif #ifdef LWS_WITH_CGI /* * A cgi connection's wire protocol remains h1 or h2. He is just * getting his data from his child cgis. */ if (wsi->http.cgi) { /* also one shot */ if (pollfd) if (lws_change_pollfd(wsi, LWS_POLLOUT, 0)) { lwsl_wsi_info(wsi, "failed at set pollfd"); return 1; } goto user_service_go_again; } #endif /* if we got here, we should have wire protocol ops set on the wsi */ assert(wsi->role_ops); if (!lws_rops_fidx(wsi->role_ops, LWS_ROPS_handle_POLLOUT)) goto bail_ok; n = lws_rops_func_fidx(wsi->role_ops, LWS_ROPS_handle_POLLOUT). handle_POLLOUT(wsi); switch (n) { case LWS_HP_RET_BAIL_OK: goto bail_ok; case LWS_HP_RET_BAIL_DIE: goto bail_die; case LWS_HP_RET_DROP_POLLOUT: case LWS_HP_RET_USER_SERVICE: break; default: assert(0); } /* one shot */ if (pollfd) { int eff = vwsi->leave_pollout_active; if (!eff) { if (lws_change_pollfd(wsi, LWS_POLLOUT, 0)) { lwsl_wsi_info(wsi, "failed at set pollfd"); goto bail_die; } } vwsi->handling_pollout = 0; /* cannot get leave_pollout_active set after the above */ if (!eff && wsi->leave_pollout_active) { /* * got set inbetween sampling eff and clearing * handling_pollout, force POLLOUT on */ lwsl_wsi_debug(wsi, "leave_pollout_active"); if (lws_change_pollfd(wsi, 0, LWS_POLLOUT)) { lwsl_wsi_info(wsi, "failed at set pollfd"); goto bail_die; } } vwsi->leave_pollout_active = 0; } if (lwsi_role_client(wsi) && !wsi->hdr_parsing_completed && lwsi_state(wsi) != LRS_H2_WAITING_TO_SEND_HEADERS && lwsi_state(wsi) != LRS_ISSUE_HTTP_BODY) goto bail_ok; if (n == LWS_HP_RET_DROP_POLLOUT) goto bail_ok; #ifdef LWS_WITH_CGI user_service_go_again: #endif if (lws_rops_fidx(wsi->role_ops, LWS_ROPS_perform_user_POLLOUT)) { if (lws_rops_func_fidx(wsi->role_ops, LWS_ROPS_perform_user_POLLOUT). perform_user_POLLOUT(wsi) == -1) goto bail_die; else goto bail_ok; } lwsl_wsi_debug(wsi, "non mux: wsistate 0x%lx, ops %s", (unsigned long)wsi->wsistate, wsi->role_ops->name); vwsi = (volatile struct lws *)wsi; vwsi->leave_pollout_active = 0; n = lws_callback_as_writeable(wsi); vwsi->handling_pollout = 0; if (vwsi->leave_pollout_active) if (lws_change_pollfd(wsi, 0, LWS_POLLOUT)) goto bail_die; return n; /* * since these don't disable the POLLOUT, they are always doing the * right thing for leave_pollout_active whether it was set or not. */ bail_ok: vwsi->handling_pollout = 0; vwsi->leave_pollout_active = 0; return 0; bail_die: vwsi->handling_pollout = 0; vwsi->leave_pollout_active = 0; return -1; } int lws_rxflow_cache(struct lws *wsi, unsigned char *buf, size_t n, size_t len) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; uint8_t *buffered; size_t blen; int ret = LWSRXFC_CACHED, m; /* his RX is flowcontrolled, don't send remaining now */ blen = lws_buflist_next_segment_len(&wsi->buflist, &buffered); if (blen) { if (buf >= buffered && buf + len <= buffered + blen && blen != (size_t)len) { /* * rxflow while we were spilling prev rxflow * * len indicates how much was unused, then... so trim * the head buflist to match that situation */ lws_buflist_use_segment(&wsi->buflist, blen - len); lwsl_wsi_debug(wsi, "trim existing rxflow %d -> %d", (int)blen, (int)len); return LWSRXFC_TRIMMED; } ret = LWSRXFC_ADDITIONAL; } /* a new rxflow, buffer it and warn caller */ lwsl_wsi_debug(wsi, "rxflow append %d", (int)(len - n)); m = lws_buflist_append_segment(&wsi->buflist, buf + n, len - n); if (m < 0) return LWSRXFC_ERROR; if (m) { lwsl_wsi_debug(wsi, "added to rxflow list");; if (lws_dll2_is_detached(&wsi->dll_buflist)) lws_dll2_add_head(&wsi->dll_buflist, &pt->dll_buflist_owner); } return ret; } /* this is used by the platform service code to stop us waiting for network * activity in poll() when we have something that already needs service */ int lws_service_adjust_timeout(struct lws_context *context, int timeout_ms, int tsi) { struct lws_context_per_thread *pt; if (!context) return 1; if (!context->protocol_init_done) if (lws_protocol_init(context)) return 1; #if defined(LWS_WITH_SYS_SMD) if (!tsi && lws_smd_message_pending(context)) { lws_smd_msg_distribute(context); if (lws_smd_message_pending(context)) return 0; } #endif pt = &context->pt[tsi]; if (pt->evlib_pt) { lws_usec_t u; lws_pt_lock(pt, __func__); /* -------------- pt { */ u = __lws_sul_service_ripe(pt->pt_sul_owner, LWS_COUNT_PT_SUL_OWNERS, lws_now_usecs()); /* * We will come back with 0 if nothing to do at the moment, or * the number of us until something to do */ if (u && u < (lws_usec_t)timeout_ms * (lws_usec_t)1000) timeout_ms = (int)(u / 1000); lws_pt_unlock(pt); } /* * Figure out if we really want to wait in poll()... we only need to * wait if really nothing already to do and we have to wait for * something from network */ #if defined(LWS_ROLE_WS) && !defined(LWS_WITHOUT_EXTENSIONS) /* 1) if we know we are draining rx ext, do not wait in poll */ if (pt->ws.rx_draining_ext_list) return 0; #endif #if defined(LWS_WITH_TLS) /* 2) if we know we have non-network pending data, * do not wait in poll */ if (pt->context->tls_ops && pt->context->tls_ops->fake_POLLIN_for_buffered && pt->context->tls_ops->fake_POLLIN_for_buffered(pt)) return 0; #endif /* * 4) If there is any wsi with rxflow buffered and in a state to process * it, we should not wait in poll */ lws_start_foreach_dll(struct lws_dll2 *, d, pt->dll_buflist_owner.head) { struct lws *wsi = lws_container_of(d, struct lws, dll_buflist); if (!lws_is_flowcontrolled(wsi) && lwsi_state(wsi) != LRS_DEFERRING_ACTION) return 0; /* * 5) If any guys with http compression to spill, we shouldn't wait in * poll but hurry along and service them */ } lws_end_foreach_dll(d); return timeout_ms; } /* * POLLIN said there is something... we must read it, and either use it; or * if other material already in the buflist append it and return the buflist * head material. */ int lws_buflist_aware_read(struct lws_context_per_thread *pt, struct lws *wsi, struct lws_tokens *ebuf, char fr, const char *hint) { int n, e, bns; uint8_t *ep, *b; // lwsl_debug("%s: %s: %s: prior %d\n", __func__, lws_wsi_tag(wsi), hint, prior); // lws_buflist_describe(&wsi->buflist, wsi, __func__); (void)hint; if (!ebuf->token) ebuf->token = pt->serv_buf + LWS_PRE; if (!ebuf->len || (unsigned int)ebuf->len > wsi->a.context->pt_serv_buf_size - LWS_PRE) ebuf->len = (int)(wsi->a.context->pt_serv_buf_size - LWS_PRE); e = ebuf->len; ep = ebuf->token; /* h2 or muxed stream... must force the read due to HOL blocking */ if (wsi->mux_substream) fr = 1; /* there's something on the buflist? */ bns = (int)lws_buflist_next_segment_len(&wsi->buflist, &ebuf->token); b = ebuf->token; if (!fr && bns) goto buflist_material; /* we're going to read something */ ebuf->token = ep; ebuf->len = n = lws_ssl_capable_read(wsi, ep, (size_t)e); lwsl_wsi_debug(wsi, "%s: ssl_capable_read %d", hint, ebuf->len); if (!bns && /* only acknowledge error when we handled buflist content */ n == LWS_SSL_CAPABLE_ERROR) { lwsl_debug("%s: SSL_CAPABLE_ERROR\n", __func__); return -1; } if (n <= 0 && bns) /* * There wasn't anything to read yet, but there's something * on the buflist to give him */ goto buflist_material; /* we read something */ if (fr && bns) { /* * Stash what we read, since there's earlier buflist material */ n = lws_buflist_append_segment(&wsi->buflist, ebuf->token, (size_t)ebuf->len); if (n < 0) return -1; if (n && lws_dll2_is_detached(&wsi->dll_buflist)) lws_dll2_add_head(&wsi->dll_buflist, &pt->dll_buflist_owner); goto buflist_material; } /* * directly return what we read */ return 0; buflist_material: ebuf->token = b; if (e < bns) /* restrict to e, if more than e available */ ebuf->len = e; else ebuf->len = bns; return 1; /* from buflist */ } int lws_buflist_aware_finished_consuming(struct lws *wsi, struct lws_tokens *ebuf, int used, int buffered, const char *hint) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; int m; /* it's in the buflist; we didn't use any */ if (!used && buffered) return 0; if (used && buffered) { if (wsi->buflist) { m = (int)lws_buflist_use_segment(&wsi->buflist, (size_t)used); if (m) return 0; } lwsl_wsi_info(wsi, "removed from dll_buflist"); lws_dll2_remove(&wsi->dll_buflist); return 0; } /* any remainder goes on the buflist */ if (used < ebuf->len && ebuf->len >= 0 && used >= 0) { m = lws_buflist_append_segment(&wsi->buflist, ebuf->token + used, (unsigned int)(ebuf->len - used)); if (m < 0) return 1; /* OOM */ if (m) { lwsl_wsi_debug(wsi, "added to rxflow list"); if (lws_dll2_is_detached(&wsi->dll_buflist)) lws_dll2_add_head(&wsi->dll_buflist, &pt->dll_buflist_owner); } } return 0; } void lws_service_do_ripe_rxflow(struct lws_context_per_thread *pt) { struct lws_pollfd pfd; if (!pt->dll_buflist_owner.head) return; /* * service all guys with pending rxflow that reached a state they can * accept the pending data */ lws_pt_lock(pt, __func__); lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, pt->dll_buflist_owner.head) { struct lws *wsi = lws_container_of(d, struct lws, dll_buflist); pfd.events = LWS_POLLIN; pfd.revents = LWS_POLLIN; pfd.fd = -1; lwsl_wsi_debug(wsi, "rxflow processing: fc=%d, 0x%lx", lws_is_flowcontrolled(wsi), (unsigned long)wsi->wsistate); if (!lws_is_flowcontrolled(wsi) && lwsi_state(wsi) != LRS_DEFERRING_ACTION) { pt->inside_lws_service = 1; if (lws_rops_func_fidx(wsi->role_ops, LWS_ROPS_handle_POLLIN). handle_POLLIN(pt, wsi, &pfd) == LWS_HPI_RET_PLEASE_CLOSE_ME) lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "close_and_handled"); pt->inside_lws_service = 0; } } lws_end_foreach_dll_safe(d, d1); lws_pt_unlock(pt); } /* * guys that need POLLIN service again without waiting for network action * can force POLLIN here if not flowcontrolled, so they will get service. * * Return nonzero if anybody got their POLLIN faked */ int lws_service_flag_pending(struct lws_context *context, int tsi) { struct lws_context_per_thread *pt; int forced = 0; if (!context) return 1; pt = &context->pt[tsi]; lws_pt_lock(pt, __func__); /* * 1) If there is any wsi with a buflist and in a state to process * it, we should not wait in poll */ lws_start_foreach_dll(struct lws_dll2 *, d, pt->dll_buflist_owner.head) { struct lws *wsi = lws_container_of(d, struct lws, dll_buflist); if (!lws_is_flowcontrolled(wsi) && lwsi_state(wsi) != LRS_DEFERRING_ACTION) { forced = 1; break; } } lws_end_foreach_dll(d); #if defined(LWS_ROLE_WS) forced |= lws_rops_func_fidx(&role_ops_ws, LWS_ROPS_service_flag_pending). service_flag_pending(context, tsi); #endif #if defined(LWS_WITH_TLS) /* * 2) For all guys with buffered SSL read data already saved up, if they * are not flowcontrolled, fake their POLLIN status so they'll get * service to use up the buffered incoming data, even though their * network socket may have nothing */ lws_start_foreach_dll_safe(struct lws_dll2 *, p, p1, lws_dll2_get_head(&pt->tls.dll_pending_tls_owner)) { struct lws *wsi = lws_container_of(p, struct lws, tls.dll_pending_tls); if (wsi->position_in_fds_table >= 0) { pt->fds[wsi->position_in_fds_table].revents = (short)( pt->fds[wsi->position_in_fds_table].revents | (pt->fds[wsi->position_in_fds_table].events & LWS_POLLIN)); if (pt->fds[wsi->position_in_fds_table].revents & LWS_POLLIN) /* * We're not going to remove the wsi from the * pending tls list. The processing will have * to do it if he exhausts the pending tls. */ forced = 1; } } lws_end_foreach_dll_safe(p, p1); #endif lws_pt_unlock(pt); return forced; } int lws_service_fd_tsi(struct lws_context *context, struct lws_pollfd *pollfd, int tsi) { struct lws_context_per_thread *pt; struct lws *wsi; char cow = 0; if (!context || context->service_no_longer_possible) return -1; pt = &context->pt[tsi]; if (pt->event_loop_pt_unused) return -1; if (!pollfd) { /* * calling with NULL pollfd for periodic background processing * is no longer needed and is now illegal. */ assert(pollfd); return -1; } assert(lws_socket_is_valid(pollfd->fd)); /* no, here to service a socket descriptor */ wsi = wsi_from_fd(context, pollfd->fd); if (!wsi) /* not lws connection ... leave revents alone and return */ return 0; #if LWS_MAX_SMP > 1 if (wsi->undergoing_init_from_other_pt) /* * Temporary situation that other service thread is initializing * this wsi right now for use on our service thread. */ return 0; #endif /* * so that caller can tell we handled, past here we need to * zero down pollfd->revents after handling */ /* * Whatever the situation with buffered rx packets, or explicitly read- * and-buffered rx going to be handled before we want to acknowledge the * socket is gone, any sign of HUP always immediately means no more tx * is possible. */ if ((pollfd->revents & LWS_POLLHUP) == LWS_POLLHUP) { wsi->socket_is_permanently_unusable = 1; if (!(pollfd->revents & pollfd->events & LWS_POLLIN)) { /* ... there are no pending rx packets waiting... */ if (!lws_buflist_total_len(&wsi->buflist)) { /* * ... nothing stashed in the buflist either, * so acknowledge the wsi is done */ lwsl_wsi_debug(wsi, "Session Socket %d dead", pollfd->fd); goto close_and_handled; } /* * ... in fact we have some unread rx buffered in the * input buflist. Hold off the closing a bit... */ lws_set_timeout(wsi, PENDING_TIMEOUT_CLOSE_ACK, 3); } } #ifdef _WIN32 if (pollfd->revents & LWS_POLLOUT) wsi->sock_send_blocking = FALSE; #endif #if defined(LWS_WITH_TLS) if (lwsi_state(wsi) == LRS_SHUTDOWN && lws_is_ssl(wsi) && wsi->tls.ssl) { switch (__lws_tls_shutdown(wsi)) { case LWS_SSL_CAPABLE_DONE: case LWS_SSL_CAPABLE_ERROR: goto close_and_handled; case LWS_SSL_CAPABLE_MORE_SERVICE_READ: case LWS_SSL_CAPABLE_MORE_SERVICE_WRITE: case LWS_SSL_CAPABLE_MORE_SERVICE: goto handled; } } #endif if ((pollfd->revents & LWS_POLLOUT) == LWS_POLLOUT && wsi->tls_read_wanted_write) { /* * If this wsi has a pending WANT_WRITE from SSL_read(), it has * asked for a callback on writeable so it can retry the read. * * Let's consume the POLLOUT by turning it into a POLLIIN, and * setting a flag to request a new writeable */ wsi->tls_read_wanted_write = 0; pollfd->revents &= ~(LWS_POLLOUT); pollfd->revents |= LWS_POLLIN; cow = 1; } wsi->could_have_pending = 0; /* clear back-to-back write detection */ pt->inside_lws_service = 1; /* okay, what we came here to do... */ /* if we got here, we should have wire protocol ops set on the wsi */ assert(wsi->role_ops); // lwsl_notice("%s: %s: wsistate 0x%x\n", __func__, wsi->role_ops->name, // wsi->wsistate); switch (lws_rops_func_fidx(wsi->role_ops, LWS_ROPS_handle_POLLIN). handle_POLLIN(pt, wsi, pollfd)) { case LWS_HPI_RET_WSI_ALREADY_DIED: pt->inside_lws_service = 0; return 1; case LWS_HPI_RET_HANDLED: break; case LWS_HPI_RET_PLEASE_CLOSE_ME: //lwsl_notice("%s: %s pollin says please close me\n", __func__, // wsi->role_ops->name); close_and_handled: lwsl_wsi_debug(wsi, "Close and handled"); lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "close_and_handled"); #if defined(_DEBUG) && defined(LWS_WITH_LIBUV) /* * confirm close has no problem being called again while * it waits for libuv service to complete the first async * close */ if (!strcmp(context->event_loop_ops->name, "libuv")) lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "close_and_handled uv repeat test"); #endif /* * pollfd may point to something else after the close * due to pollfd swapping scheme on delete on some platforms * we can't clear revents now because it'd be the wrong guy's * revents */ pt->inside_lws_service = 0; return 1; default: assert(0); } #if defined(LWS_WITH_TLS) handled: #endif pollfd->revents = 0; if (cow) lws_callback_on_writable(wsi); pt->inside_lws_service = 0; return 0; } int lws_service_fd(struct lws_context *context, struct lws_pollfd *pollfd) { return lws_service_fd_tsi(context, pollfd, 0); } int lws_service(struct lws_context *context, int timeout_ms) { struct lws_context_per_thread *pt; int n; if (!context) return 1; pt = &context->pt[0]; pt->inside_service = 1; if (context->event_loop_ops->run_pt) { /* we are configured for an event loop */ context->event_loop_ops->run_pt(context, 0); pt->inside_service = 0; return 1; } n = lws_plat_service(context, timeout_ms); if (n != -1) pt->inside_service = 0; return n; } int lws_service_tsi(struct lws_context *context, int timeout_ms, int tsi) { struct lws_context_per_thread *pt; int n; if (!context) return 1; pt = &context->pt[tsi]; pt->inside_service = 1; #if LWS_MAX_SMP > 1 pt->self = pthread_self(); #endif if (context->event_loop_ops->run_pt) { /* we are configured for an event loop */ context->event_loop_ops->run_pt(context, tsi); pt->inside_service = 0; return 1; } n = _lws_plat_service_tsi(context, timeout_ms, tsi); pt->inside_service = 0; return n; } libwebsockets-4.3.5/lib/core-net/socks5-client.c000066400000000000000000000233351476025525100215110ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * Socks5 Client -related helpers */ #include "private-lib-core.h" int lws_set_socks(struct lws_vhost *vhost, const char *socks) { char *p_at, *p_colon; char user[96]; char password[96]; if (!socks) return -1; vhost->socks_user[0] = '\0'; vhost->socks_password[0] = '\0'; p_at = strrchr(socks, '@'); if (p_at) { /* auth is around */ if (lws_ptr_diff_size_t(p_at, socks) > (sizeof(user) + sizeof(password) - 2)) { lwsl_vhost_err(vhost, "auth too long"); goto bail; } p_colon = strchr(socks, ':'); if (p_colon) { if (lws_ptr_diff_size_t(p_colon, socks) > sizeof(user) - 1) { lwsl_vhost_err(vhost, "user too long"); goto bail; } if (lws_ptr_diff_size_t(p_at, p_colon) > sizeof(password) - 1) { lwsl_vhost_err(vhost, "pw too long"); goto bail; } lws_strncpy(vhost->socks_user, socks, lws_ptr_diff_size_t(p_colon, socks) + 1); lws_strncpy(vhost->socks_password, p_colon + 1, lws_ptr_diff_size_t(p_at, (p_colon + 1)) + 1); } lwsl_vhost_info(vhost, " Socks auth, user: %s, password: %s", vhost->socks_user, vhost->socks_password); socks = p_at + 1; } lws_strncpy(vhost->socks_proxy_address, socks, sizeof(vhost->socks_proxy_address)); p_colon = strchr(vhost->socks_proxy_address, ':'); if (!p_colon && !vhost->socks_proxy_port) { lwsl_vhost_err(vhost, "socks_proxy needs to be address:port"); return -1; } if (p_colon) { *p_colon = '\0'; vhost->socks_proxy_port = (unsigned int)atoi(p_colon + 1); } lwsl_vhost_debug(vhost, "Connections via Socks5 %s:%u", vhost->socks_proxy_address, vhost->socks_proxy_port); return 0; bail: return -1; } int lws_socks5c_generate_msg(struct lws *wsi, enum socks_msg_type type, ssize_t *msg_len) { struct lws_context *context = wsi->a.context; struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; uint8_t *p = pt->serv_buf, *end = &p[context->pt_serv_buf_size]; ssize_t n, passwd_len; short net_num; char *cp; switch (type) { case SOCKS_MSG_GREETING: if (lws_ptr_diff(end, p) < 4) return 1; /* socks version, version 5 only */ *p++ = SOCKS_VERSION_5; /* number of methods */ *p++ = 2; /* username password method */ *p++ = SOCKS_AUTH_USERNAME_PASSWORD; /* no authentication method */ *p++ = SOCKS_AUTH_NO_AUTH; break; case SOCKS_MSG_USERNAME_PASSWORD: n = (ssize_t)strlen(wsi->a.vhost->socks_user); passwd_len = (ssize_t)strlen(wsi->a.vhost->socks_password); if (n > 254 || passwd_len > 254) return 1; if (lws_ptr_diff(end, p) < 3 + n + passwd_len) return 1; /* the subnegotiation version */ *p++ = SOCKS_SUBNEGOTIATION_VERSION_1; /* length of the user name */ *p++ = (uint8_t)n; /* user name */ memcpy(p, wsi->a.vhost->socks_user, (size_t)n); p += (uint8_t)n; /* length of the password */ *p++ = (uint8_t)passwd_len; /* password */ memcpy(p, wsi->a.vhost->socks_password, (size_t)passwd_len); p += passwd_len; break; case SOCKS_MSG_CONNECT: n = (ssize_t)strlen(wsi->stash->cis[CIS_ADDRESS]); if (n > 254 || lws_ptr_diff(end, p) < 5 + n + 2) return 1; cp = (char *)&net_num; /* socks version */ *p++ = SOCKS_VERSION_5; /* socks command */ *p++ = SOCKS_COMMAND_CONNECT; /* reserved */ *p++ = 0; /* address type */ *p++ = SOCKS_ATYP_DOMAINNAME; /* length of ---> */ *p++ = (uint8_t)n; /* the address we tell SOCKS proxy to connect to */ memcpy(p, wsi->stash->cis[CIS_ADDRESS], (size_t)n); p += n; net_num = (short)htons(wsi->c_port); /* the port we tell SOCKS proxy to connect to */ *p++ = (uint8_t)cp[0]; *p++ = (uint8_t)cp[1]; break; default: return 1; } *msg_len = lws_ptr_diff(p, pt->serv_buf); return 0; } int lws_socks5c_ads_server(struct lws_vhost *vh, const struct lws_context_creation_info *info) { /* socks proxy */ if (info->socks_proxy_address) { /* override for backwards compatibility */ if (info->socks_proxy_port) vh->socks_proxy_port = info->socks_proxy_port; lws_set_socks(vh, info->socks_proxy_address); return 0; } #ifdef LWS_HAVE_GETENV { char *p = getenv("socks_proxy"); if (p && strlen(p) > 0 && strlen(p) < 95) lws_set_socks(vh, p); } #endif return 0; } /* * Returns 0 = nothing for caller to do, 1 = return wsi, -1 = goto failed */ int lws_socks5c_greet(struct lws *wsi, const char **pcce) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; ssize_t plen; int n; /* socks proxy */ if (!wsi->a.vhost->socks_proxy_port) return 0; if (lws_socks5c_generate_msg(wsi, SOCKS_MSG_GREETING, &plen)) { *pcce = "socks msg too large"; return -1; } // lwsl_hexdump_notice(pt->serv_buf, plen); n = (int)send(wsi->desc.sockfd, (char *)pt->serv_buf, (size_t)plen, MSG_NOSIGNAL); if (n < 0) { lwsl_wsi_debug(wsi, "ERROR writing socks greeting"); *pcce = "socks write failed"; return -1; } lws_set_timeout(wsi, PENDING_TIMEOUT_AWAITING_SOCKS_GREETING_REPLY, (int)wsi->a.context->timeout_secs); lwsi_set_state(wsi, LRS_WAITING_SOCKS_GREETING_REPLY); return 1; } int lws_socks5c_handle_state(struct lws *wsi, struct lws_pollfd *pollfd, const char **pcce) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; int conn_mode = 0, pending_timeout = 0; ssize_t len; int n; /* handle proxy hung up on us */ if (pollfd->revents & LWS_POLLHUP) { lwsl_wsi_warn(wsi, "SOCKS fd=%d dead", pollfd->fd); *pcce = "socks conn dead"; return LW5CHS_RET_BAIL3; } n = (int)recv(wsi->desc.sockfd, (void *)pt->serv_buf, wsi->a.context->pt_serv_buf_size, 0); if (n < 0) { if (LWS_ERRNO == LWS_EAGAIN) { lwsl_wsi_debug(wsi, "SOCKS read EAGAIN, retrying"); return LW5CHS_RET_RET0; } lwsl_wsi_err(wsi, "ERROR reading from SOCKS socket"); *pcce = "socks recv fail"; return LW5CHS_RET_BAIL3; } // lwsl_hexdump_warn(pt->serv_buf, n); switch (lwsi_state(wsi)) { case LRS_WAITING_SOCKS_GREETING_REPLY: if (pt->serv_buf[0] != SOCKS_VERSION_5) goto socks_reply_fail; if (pt->serv_buf[1] == SOCKS_AUTH_NO_AUTH) { lwsl_wsi_client(wsi, "SOCKS GR: No Auth Method"); if (lws_socks5c_generate_msg(wsi, SOCKS_MSG_CONNECT, &len)) { lwsl_wsi_err(wsi, "generate connect msg fail"); goto socks_send_msg_fail; } conn_mode = LRS_WAITING_SOCKS_CONNECT_REPLY; pending_timeout = PENDING_TIMEOUT_AWAITING_SOCKS_CONNECT_REPLY; goto socks_send; } if (pt->serv_buf[1] == SOCKS_AUTH_USERNAME_PASSWORD) { lwsl_wsi_client(wsi, "SOCKS GR: User/Pw Method"); if (lws_socks5c_generate_msg(wsi, SOCKS_MSG_USERNAME_PASSWORD, &len)) goto socks_send_msg_fail; conn_mode = LRS_WAITING_SOCKS_AUTH_REPLY; pending_timeout = PENDING_TIMEOUT_AWAITING_SOCKS_AUTH_REPLY; goto socks_send; } goto socks_reply_fail; case LRS_WAITING_SOCKS_AUTH_REPLY: if (pt->serv_buf[0] != SOCKS_SUBNEGOTIATION_VERSION_1 || pt->serv_buf[1] != SOCKS_SUBNEGOTIATION_STATUS_SUCCESS) goto socks_reply_fail; lwsl_wsi_client(wsi, "SOCKS password OK, sending connect"); if (lws_socks5c_generate_msg(wsi, SOCKS_MSG_CONNECT, &len)) { socks_send_msg_fail: *pcce = "socks gen msg fail"; return LW5CHS_RET_BAIL3; } conn_mode = LRS_WAITING_SOCKS_CONNECT_REPLY; pending_timeout = PENDING_TIMEOUT_AWAITING_SOCKS_CONNECT_REPLY; socks_send: // lwsl_hexdump_notice(pt->serv_buf, len); n = (int)send(wsi->desc.sockfd, (char *)pt->serv_buf, (size_t)len, MSG_NOSIGNAL); if (n < 0) { lwsl_wsi_debug(wsi, "ERROR writing to socks proxy"); *pcce = "socks write fail"; return LW5CHS_RET_BAIL3; } lws_set_timeout(wsi, (enum pending_timeout)pending_timeout, (int)wsi->a.context->timeout_secs); lwsi_set_state(wsi, (lws_wsi_state_t)conn_mode); break; socks_reply_fail: lwsl_wsi_err(wsi, "socks reply: v%d, err %d", pt->serv_buf[0], pt->serv_buf[1]); *pcce = "socks reply fail"; return LW5CHS_RET_BAIL3; case LRS_WAITING_SOCKS_CONNECT_REPLY: if (pt->serv_buf[0] != SOCKS_VERSION_5 || pt->serv_buf[1] != SOCKS_REQUEST_REPLY_SUCCESS) goto socks_reply_fail; lwsl_wsi_client(wsi, "socks connect OK"); #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) if (lwsi_role_http(wsi) && lws_hdr_simple_create(wsi, _WSI_TOKEN_CLIENT_PEER_ADDRESS, wsi->a.vhost->socks_proxy_address)) { *pcce = "socks connect fail"; return LW5CHS_RET_BAIL3; } #endif wsi->c_port = (uint16_t)wsi->a.vhost->socks_proxy_port; /* clear his proxy connection timeout */ lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); return LW5CHS_RET_STARTHS; default: break; } return LW5CHS_RET_NOTHING; } libwebsockets-4.3.5/lib/core-net/sorted-usec-list.c000066400000000000000000000225131476025525100222310ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" static int sul_compare(const lws_dll2_t *d, const lws_dll2_t *i) { lws_usec_t a = ((lws_sorted_usec_list_t *)d)->us; lws_usec_t b = ((lws_sorted_usec_list_t *)i)->us; /* * Simply returning (a - b) in an int * may lead to an integer overflow bug */ if (a > b) return 1; if (a < b) return -1; return 0; } /* * notice owner was chosen already, and sul->us was already computed */ int __lws_sul_insert(lws_dll2_owner_t *own, lws_sorted_usec_list_t *sul) { lws_dll2_remove(&sul->list); assert(sul->cb); /* * we sort the pt's list of sequencers with pending timeouts, so it's * cheap to check it every poll wait */ lws_dll2_add_sorted(&sul->list, own, sul_compare); return 0; } void lws_sul_cancel(lws_sorted_usec_list_t *sul) { lws_dll2_remove(&sul->list); /* we are clearing the timeout and leaving ourselves detached */ sul->us = 0; } void lws_sul2_schedule(struct lws_context *context, int tsi, int flags, lws_sorted_usec_list_t *sul) { struct lws_context_per_thread *pt = &context->pt[tsi]; lws_pt_assert_lock_held(pt); assert(sul->cb); __lws_sul_insert( &pt->pt_sul_owner[!!(flags & LWSSULLI_WAKE_IF_SUSPENDED)], sul); } /* * own points to the first in an array of length own_len * * While any sul list owner has a "ripe", ie, ready to handle sul we do them * strictly in order of sul time. When nobody has a ripe sul we return 0, if * actually nobody has any sul, or the interval between usnow and the next * earliest scheduled event on any list. */ lws_usec_t __lws_sul_service_ripe(lws_dll2_owner_t *own, int own_len, lws_usec_t usnow) { struct lws_context_per_thread *pt = (struct lws_context_per_thread *) lws_container_of(own, struct lws_context_per_thread, pt_sul_owner); if (pt->attach_owner.count) lws_system_do_attach(pt); lws_pt_assert_lock_held(pt); /* must be at least 1 */ assert(own_len > 0); /* * Of the own_len sul owning lists, the earliest next sul could be on * any of them. We have to find it and handle each in turn until no * ripe sul left on any owning list, and we can exit. * * This ensures the ripe sul are handled strictly in the right order no * matter which owning list they are on. */ do { lws_sorted_usec_list_t *hit = NULL; lws_usec_t lowest = 0; int n = 0; for (n = 0; n < own_len; n++) { lws_sorted_usec_list_t *sul; if (!own[n].count) continue; sul = (lws_sorted_usec_list_t *) lws_dll2_get_head(&own[n]); if (!hit || sul->us <= lowest) { hit = sul; lowest = sul->us; } } if (!hit) return 0; if (lowest > usnow) return lowest - usnow; /* his moment has come... remove him from his owning list */ if (!hit->cb) { lwsl_err("%s: sul with NULL callback (did not cancel on destory?)\n", __func__); return 0; } lws_dll2_remove(&hit->list); hit->us = 0; // lwsl_notice("%s: sul: %p\n", __func__, hit->cb); pt->inside_lws_service = 1; hit->cb(hit); pt->inside_lws_service = 0; } while (1); /* unreachable */ return 0; } /* * Normally we use the OS monotonic time, which does not step when the * gettimeofday() time is adjusted after, eg, ntpclient. But on some OSes, * high resolution monotonic time doesn't exist; sul time is computed from and * compared against gettimeofday() time and breaks when that steps. * * For those cases, this allows us to retrospectively adjust existing suls on * all owning lists by the step amount, at the same time we adjust the * nonmonotonic clock. Then nothing breaks so long as we do this when the * gettimeofday() clock is stepped. * * Linux and so on offer Posix MONOTONIC, which lws uses. FreeRTOS doesn't * have a high-resolution monotonic clock and has to use gettimeofday(), which * requires this adjustment when it is stepped. */ lws_usec_t lws_sul_nonmonotonic_adjust(struct lws_context *ctx, int64_t step_us) { struct lws_context_per_thread *pt = &ctx->pt[0]; int n, m; /* * for each pt */ for (m = 0; m < ctx->count_threads; m++) { /* * For each owning list... */ lws_pt_lock(pt, __func__); for (n = 0; n < LWS_COUNT_PT_SUL_OWNERS; n++) { if (!pt->pt_sul_owner[n].count) continue; /* ... and for every existing sul on a list... */ lws_start_foreach_dll(struct lws_dll2 *, p, lws_dll2_get_head( &pt->pt_sul_owner[n])) { lws_sorted_usec_list_t *sul = lws_container_of( p, lws_sorted_usec_list_t, list); /* * ... retrospectively step its ripe time by the * step we will adjust the gettimeofday() clock * with */ sul->us += step_us; } lws_end_foreach_dll(p); } lws_pt_unlock(pt); pt++; } return 0; } /* * Earliest wakeable event on any pt */ int lws_sul_earliest_wakeable_event(struct lws_context *ctx, lws_usec_t *pearliest) { struct lws_context_per_thread *pt; int n = 0, hit = -1; lws_usec_t lowest = 0; for (n = 0; n < ctx->count_threads; n++) { pt = &ctx->pt[n]; lws_pt_lock(pt, __func__); if (pt->pt_sul_owner[LWSSULLI_WAKE_IF_SUSPENDED].count) { lws_sorted_usec_list_t *sul = (lws_sorted_usec_list_t *) lws_dll2_get_head(&pt->pt_sul_owner[ LWSSULLI_WAKE_IF_SUSPENDED]); if (hit == -1 || sul->us < lowest) { hit = n; lowest = sul->us; } } lws_pt_unlock(pt); } if (hit == -1) /* there is no pending event */ return 1; *pearliest = lowest; return 0; } void lws_sul_schedule(struct lws_context *ctx, int tsi, lws_sorted_usec_list_t *sul, sul_cb_t _cb, lws_usec_t _us) { struct lws_context_per_thread *_pt = &ctx->pt[tsi]; assert(_cb); lws_pt_lock(_pt, __func__); if (_us == (lws_usec_t)LWS_SET_TIMER_USEC_CANCEL) lws_sul_cancel(sul); else { sul->cb = _cb; sul->us = lws_now_usecs() + _us; lws_sul2_schedule(ctx, tsi, LWSSULLI_MISS_IF_SUSPENDED, sul); } lws_pt_unlock(_pt); } void lws_sul_schedule_wakesuspend(struct lws_context *ctx, int tsi, lws_sorted_usec_list_t *sul, sul_cb_t _cb, lws_usec_t _us) { struct lws_context_per_thread *_pt = &ctx->pt[tsi]; assert(_cb); lws_pt_lock(_pt, __func__); if (_us == (lws_usec_t)LWS_SET_TIMER_USEC_CANCEL) lws_sul_cancel(sul); else { sul->cb = _cb; sul->us = lws_now_usecs() + _us; lws_sul2_schedule(ctx, tsi, LWSSULLI_WAKE_IF_SUSPENDED, sul); } lws_pt_unlock(_pt); } #if defined(LWS_WITH_SUL_DEBUGGING) /* * Sanity checker for any sul left scheduled when its containing object is * freed... code scheduling suls must take care to cancel them when destroying * their object. This optional debugging helper checks that when an object is * being destroyed, there is no live sul scheduled from inside the object. */ void lws_sul_debug_zombies(struct lws_context *ctx, void *po, size_t len, const char *destroy_description) { struct lws_context_per_thread *pt; int n, m; for (n = 0; n < ctx->count_threads; n++) { pt = &ctx->pt[n]; lws_pt_lock(pt, __func__); for (m = 0; m < LWS_COUNT_PT_SUL_OWNERS; m++) { lws_start_foreach_dll(struct lws_dll2 *, p, lws_dll2_get_head(&pt->pt_sul_owner[m])) { lws_sorted_usec_list_t *sul = lws_container_of(p, lws_sorted_usec_list_t, list); if (!po) { lwsl_cx_err(ctx, "%s", destroy_description); /* just sanity check the list */ assert(sul->cb); } /* * Is the sul resident inside the object that is * indicated as being deleted? */ if (po && (void *)sul >= po && (size_t)lws_ptr_diff(sul, po) < len) { lwsl_cx_err(ctx, "ERROR: Zombie Sul " "(on list %d) %s, cb %p\n", m, destroy_description, sul->cb); /* * This assert fires if you have left * a sul scheduled to fire later, but * are about to destroy the object the * sul lives in. You must take care to * do lws_sul_cancel(&sul) on any suls * that may be scheduled before * destroying the object the sul lives * inside. * * You can look up the cb pointer in * your mapfile to find out which * callback function the sul was using * which usually tells you which sul * it is. */ assert(0); } } lws_end_foreach_dll(p); } lws_pt_unlock(pt); } } #endif libwebsockets-4.3.5/lib/core-net/state.c000066400000000000000000000076031476025525100201460ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" void lws_state_reg_notifier(lws_state_manager_t *mgr, lws_state_notify_link_t *notify_link) { lws_dll2_add_head(¬ify_link->list, &mgr->notify_list); } void lws_state_reg_deregister(lws_state_notify_link_t *nl) { lws_dll2_remove(&nl->list); } void lws_state_reg_notifier_list(lws_state_manager_t *mgr, lws_state_notify_link_t * const *notify_link_array) { if (notify_link_array) while (*notify_link_array) lws_state_reg_notifier(mgr, *notify_link_array++); } #if (_LWS_ENABLED_LOGS & (LLL_INFO | LLL_DEBUG)) static const char * _systnm(lws_state_manager_t *mgr, int state, char *temp8) { if (!mgr->state_names) { lws_snprintf(temp8, 8, "%d", state); return temp8; } return mgr->state_names[state]; } #endif static int _report(lws_state_manager_t *mgr, int a, int b) { #if (_LWS_ENABLED_LOGS & LLL_INFO) char temp8[8]; #endif lws_start_foreach_dll(struct lws_dll2 *, d, mgr->notify_list.head) { lws_state_notify_link_t *l = lws_container_of(d, lws_state_notify_link_t, list); if (l->notify_cb(mgr, l, a, b)) { /* a dependency took responsibility for retry */ #if (_LWS_ENABLED_LOGS & LLL_INFO) lwsl_cx_info(mgr->context, "%s: %s: rejected '%s' -> '%s'", mgr->name, l->name, _systnm(mgr, a, temp8), _systnm(mgr, b, temp8)); #endif return 1; } } lws_end_foreach_dll(d); return 0; } static int _lws_state_transition(lws_state_manager_t *mgr, int target) { #if (_LWS_ENABLED_LOGS & LLL_DEBUG) char temp8[8]; #endif if (_report(mgr, mgr->state, target)) return 1; #if (_LWS_ENABLED_LOGS & LLL_DEBUG) if (mgr->context) lwsl_cx_debug(mgr->context, "%s: changed %d '%s' -> %d '%s'", mgr->name, mgr->state, _systnm(mgr, mgr->state, temp8), target, _systnm(mgr, target, temp8)); #endif mgr->state = target; /* Indicate success by calling the notifers again with both args same */ _report(mgr, target, target); #if defined(LWS_WITH_SYS_SMD) if (mgr->smd_class && mgr->context) (void)lws_smd_msg_printf(mgr->context, mgr->smd_class, "{\"state\":\"%s\"}", mgr->state_names[target]); #endif return 0; } int lws_state_transition_steps(lws_state_manager_t *mgr, int target) { int n = 0; #if (_LWS_ENABLED_LOGS & LLL_INFO) int i = mgr->state; char temp8[8]; #endif if (mgr->state > target) return 0; while (!n && mgr->state != target) n = _lws_state_transition(mgr, mgr->state + 1); #if (_LWS_ENABLED_LOGS & LLL_INFO) lwsl_cx_info(mgr->context, "%s -> %s", _systnm(mgr, i, temp8), _systnm(mgr, mgr->state, temp8)); #endif return 0; } int lws_state_transition(lws_state_manager_t *mgr, int target) { if (mgr->state != target) _lws_state_transition(mgr, target); return 0; } libwebsockets-4.3.5/lib/core-net/vhost.c000066400000000000000000001372201476025525100201700ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" void lws_tls_session_vh_destroy(struct lws_vhost *vh); const struct lws_role_ops *available_roles[] = { #if defined(LWS_ROLE_H2) &role_ops_h2, #endif #if defined(LWS_ROLE_H1) &role_ops_h1, #endif #if defined(LWS_ROLE_WS) &role_ops_ws, #endif #if defined(LWS_ROLE_DBUS) &role_ops_dbus, #endif #if defined(LWS_ROLE_RAW_PROXY) &role_ops_raw_proxy, #endif #if defined(LWS_ROLE_MQTT) && defined(LWS_WITH_CLIENT) &role_ops_mqtt, #endif #if defined(LWS_WITH_NETLINK) &role_ops_netlink, #endif NULL }; #if defined(LWS_WITH_ABSTRACT) const struct lws_protocols *available_abstract_protocols[] = { #if defined(LWS_ROLE_RAW) &protocol_abs_client_raw_skt, #endif NULL }; #endif #if defined(LWS_WITH_SECURE_STREAMS) const struct lws_protocols *available_secstream_protocols[] = { #if defined(LWS_ROLE_H1) &protocol_secstream_h1, #endif #if defined(LWS_ROLE_H2) &protocol_secstream_h2, #endif #if defined(LWS_ROLE_WS) &protocol_secstream_ws, #endif #if defined(LWS_ROLE_MQTT) &protocol_secstream_mqtt, #endif &protocol_secstream_raw, NULL }; #endif static const char * const mount_protocols[] = { "http://", "https://", "file://", "cgi://", ">http://", ">https://", "callback://" }; const struct lws_role_ops * lws_role_by_name(const char *name) { LWS_FOR_EVERY_AVAILABLE_ROLE_START(ar) if (!strcmp(ar->name, name)) return ar; LWS_FOR_EVERY_AVAILABLE_ROLE_END; if (!strcmp(name, role_ops_raw_skt.name)) return &role_ops_raw_skt; #if defined(LWS_ROLE_RAW_FILE) if (!strcmp(name, role_ops_raw_file.name)) return &role_ops_raw_file; #endif return NULL; } int lws_role_call_alpn_negotiated(struct lws *wsi, const char *alpn) { #if defined(LWS_WITH_TLS) if (!alpn) return 0; #if !defined(LWS_ESP_PLATFORM) lwsl_wsi_info(wsi, "'%s'", alpn); #endif LWS_FOR_EVERY_AVAILABLE_ROLE_START(ar) if (ar->alpn && !strcmp(ar->alpn, alpn) && lws_rops_fidx(ar, LWS_ROPS_alpn_negotiated)) { #if defined(LWS_WITH_SERVER) lws_metrics_tag_wsi_add(wsi, "upg", ar->name); #endif return (lws_rops_func_fidx(ar, LWS_ROPS_alpn_negotiated)). alpn_negotiated(wsi, alpn); } LWS_FOR_EVERY_AVAILABLE_ROLE_END; #endif return 0; } int lws_role_call_adoption_bind(struct lws *wsi, int type, const char *prot) { int n; /* * if the vhost is told to bind accepted sockets to a given role, * then look it up by name and try to bind to the specific role. */ if (lws_check_opt(wsi->a.vhost->options, LWS_SERVER_OPTION_ADOPT_APPLY_LISTEN_ACCEPT_CONFIG) && wsi->a.vhost->listen_accept_role) { const struct lws_role_ops *role = lws_role_by_name(wsi->a.vhost->listen_accept_role); if (!prot) prot = wsi->a.vhost->listen_accept_protocol; if (!role) lwsl_wsi_err(wsi, "can't find role '%s'", wsi->a.vhost->listen_accept_role); if (!strcmp(wsi->a.vhost->listen_accept_role, "raw-proxy")) type |= LWS_ADOPT_FLAG_RAW_PROXY; if (role && lws_rops_fidx(role, LWS_ROPS_adoption_bind)) { n = (lws_rops_func_fidx(role, LWS_ROPS_adoption_bind)). adoption_bind(wsi, type, prot); if (n < 0) return -1; if (n) /* did the bind */ return 0; } if (type & _LWS_ADOPT_FINISH) { lwsl_wsi_debug(wsi, "leaving bound to role %s", wsi->role_ops->name); return 0; } lwsl_wsi_warn(wsi, "adoption bind to role '%s', " "protocol '%s', type 0x%x, failed", wsi->a.vhost->listen_accept_role, prot, type); } /* * Otherwise ask each of the roles in order of preference if they * want to bind to this accepted socket */ LWS_FOR_EVERY_AVAILABLE_ROLE_START(ar) if (lws_rops_fidx(ar, LWS_ROPS_adoption_bind) && (lws_rops_func_fidx(ar, LWS_ROPS_adoption_bind)). adoption_bind(wsi, type, prot)) return 0; LWS_FOR_EVERY_AVAILABLE_ROLE_END; /* fall back to raw socket role if, eg, h1 not configured */ if (lws_rops_fidx(&role_ops_raw_skt, LWS_ROPS_adoption_bind) && (lws_rops_func_fidx(&role_ops_raw_skt, LWS_ROPS_adoption_bind)). adoption_bind(wsi, type, prot)) return 0; #if defined(LWS_ROLE_RAW_FILE) lwsl_wsi_notice(wsi, "falling back to raw file role bind"); /* fall back to raw file role if, eg, h1 not configured */ if (lws_rops_fidx(&role_ops_raw_file, LWS_ROPS_adoption_bind) && (lws_rops_func_fidx(&role_ops_raw_file, LWS_ROPS_adoption_bind)). adoption_bind(wsi, type, prot)) return 0; #endif return 1; } #if defined(LWS_WITH_CLIENT) int lws_role_call_client_bind(struct lws *wsi, const struct lws_client_connect_info *i) { LWS_FOR_EVERY_AVAILABLE_ROLE_START(ar) if (lws_rops_fidx(ar, LWS_ROPS_client_bind)) { int m = (lws_rops_func_fidx(ar, LWS_ROPS_client_bind)). client_bind(wsi, i); if (m < 0) return m; if (m) return 0; } LWS_FOR_EVERY_AVAILABLE_ROLE_END; /* fall back to raw socket role if, eg, h1 not configured */ if (lws_rops_fidx(&role_ops_raw_skt, LWS_ROPS_client_bind) && (lws_rops_func_fidx(&role_ops_raw_skt, LWS_ROPS_client_bind)). client_bind(wsi, i)) return 0; return 1; } #endif void * lws_protocol_vh_priv_zalloc(struct lws_vhost *vhost, const struct lws_protocols *prot, int size) { int n = 0; if (!vhost || !prot || !vhost->protocols || !prot->name) return NULL; /* allocate the vh priv array only on demand */ if (!vhost->protocol_vh_privs) { vhost->protocol_vh_privs = (void **)lws_zalloc( (size_t)vhost->count_protocols * sizeof(void *), "protocol_vh_privs"); if (!vhost->protocol_vh_privs) return NULL; } while (n < vhost->count_protocols && &vhost->protocols[n] != prot) n++; if (n == vhost->count_protocols) { n = 0; while (n < vhost->count_protocols) { if (vhost->protocols[n].name && !strcmp(vhost->protocols[n].name, prot->name)) break; n++; } if (n == vhost->count_protocols) { lwsl_vhost_err(vhost, "unknown protocol %p", prot); return NULL; } } vhost->protocol_vh_privs[n] = lws_zalloc((size_t)size, "vh priv"); return vhost->protocol_vh_privs[n]; } void * lws_protocol_vh_priv_get(struct lws_vhost *vhost, const struct lws_protocols *prot) { int n = 0; if (!vhost || !vhost->protocols || !vhost->protocol_vh_privs || !prot || !prot->name) return NULL; while (n < vhost->count_protocols && &vhost->protocols[n] != prot) n++; if (n == vhost->count_protocols) { n = 0; while (n < vhost->count_protocols) { if (vhost->protocols[n].name && !strcmp(vhost->protocols[n].name, prot->name)) break; n++; } if (n == vhost->count_protocols) { lwsl_vhost_err(vhost, "unknown protocol %p", prot); return NULL; } } return vhost->protocol_vh_privs[n]; } void * lws_vhd_find_by_pvo(struct lws_context *cx, const char *protname, const char *pvo_name, const char *pvo_value) { struct lws_vhost *vh; int n; /* let's go through all the vhosts */ vh = cx->vhost_list; while (vh) { if (vh->protocol_vh_privs) { for (n = 0; n < vh->count_protocols; n++) { const struct lws_protocol_vhost_options *pv; if (strcmp(vh->protocols[n].name, protname)) continue; /* this vh has an instance of the required protocol */ pv = lws_pvo_search(vh->pvo, protname); if (!pv) continue; pv = lws_pvo_search(pv->options, pvo_name); if (!pv) continue; /* ... he also has a pvo of the right name... */ if (!strcmp(pv->value, pvo_value)) /* * ... yes, the pvo has the right value too, * return a pointer to this vhost-protocol * private alloc (ie, its "vhd") */ return vh->protocol_vh_privs[n]; } } else lwsl_vhost_notice(vh, "no privs yet"); vh = vh->vhost_next; } return NULL; } const struct lws_protocol_vhost_options * lws_vhost_protocol_options(struct lws_vhost *vh, const char *name) { const struct lws_protocol_vhost_options *pvo = vh->pvo; if (!name) return NULL; while (pvo) { if (!strcmp(pvo->name, name)) return pvo; pvo = pvo->next; } return NULL; } int lws_protocol_init_vhost(struct lws_vhost *vh, int *any) { const struct lws_protocol_vhost_options *pvo, *pvo1; int n; #if defined(LWS_PLAT_FREERTOS) struct lws_a _lwsa, *lwsa = &_lwsa; memset(&_lwsa, 0, sizeof(_lwsa)); #else struct lws _lws; struct lws_a *lwsa = &_lws.a; memset(&_lws, 0, sizeof(_lws)); #endif lwsa->context = vh->context; lwsa->vhost = vh; /* initialize supported protocols on this vhost */ for (n = 0; n < vh->count_protocols; n++) { lwsa->protocol = &vh->protocols[n]; if (!vh->protocols[n].name) continue; pvo = lws_vhost_protocol_options(vh, vh->protocols[n].name); if (pvo) { /* * linked list of options specific to * vh + protocol */ pvo1 = pvo; pvo = pvo1->options; while (pvo) { lwsl_vhost_debug(vh, "protocol \"%s\", " "option \"%s\"", vh->protocols[n].name, pvo->name); if (!strcmp(pvo->name, "default")) { lwsl_vhost_info(vh, "Setting default " "protocol to %s", vh->protocols[n].name); vh->default_protocol_index = (unsigned char)n; } if (!strcmp(pvo->name, "raw")) { lwsl_vhost_info(vh, "Setting raw " "protocol to %s", vh->protocols[n].name); vh->raw_protocol_index = (unsigned char)n; } pvo = pvo->next; } } else lwsl_vhost_debug(vh, "not instantiating %s", vh->protocols[n].name); #if defined(LWS_WITH_TLS) if (any) *any |= !!vh->tls.ssl_ctx; #endif pvo = lws_vhost_protocol_options(vh, vh->protocols[n].name); /* * inform all the protocols that they are doing their * one-time initialization if they want to. * * NOTE the fakewsi is garbage, except the key pointers that are * prepared in case the protocol handler wants to touch them */ if (pvo #if !defined(LWS_WITH_PLUGINS) /* * with plugins, you have to explicitly * instantiate them per-vhost with pvos. * * Without plugins, not setting the vhost pvo * list at creation enables all the protocols * by default, for backwards compatibility */ || !vh->pvo #endif ) { lwsl_vhost_info(vh, "init %s.%s", vh->name, vh->protocols[n].name); if (vh->protocols[n].callback((struct lws *)lwsa, LWS_CALLBACK_PROTOCOL_INIT, NULL, #if !defined(LWS_WITH_PLUGINS) (void *)(pvo ? pvo->options : NULL), #else (void *)pvo->options, #endif 0)) { if (vh->protocol_vh_privs && vh->protocol_vh_privs[n]) { lws_free(vh->protocol_vh_privs[n]); vh->protocol_vh_privs[n] = NULL; } lwsl_vhost_err(vh, "protocol %s failed init", vh->protocols[n].name); return 1; } } } vh->created_vhost_protocols = 1; return 0; } /* * inform every vhost that hasn't already done it, that * his protocols are initializing */ int lws_protocol_init(struct lws_context *context) { struct lws_vhost *vh = context->vhost_list; int any = 0, r = 0; if (context->doing_protocol_init) return 0; context->doing_protocol_init = 1; lwsl_cx_info(context, "\n"); while (vh) { /* only do the protocol init once for a given vhost */ if (vh->created_vhost_protocols || (lws_check_opt(vh->options, LWS_SERVER_OPTION_SKIP_PROTOCOL_INIT))) goto next; if (lws_protocol_init_vhost(vh, &any)) { lwsl_vhost_warn(vh, "init vhost %s failed", vh->name); r = -1; } next: vh = vh->vhost_next; } context->doing_protocol_init = 0; if (r) lwsl_cx_warn(context, "some protocols did not init"); if (!context->protocol_init_done) { context->protocol_init_done = 1; lws_finalize_startup(context); return 0; } #if defined(LWS_WITH_SERVER) if (any) { lws_tls_check_all_cert_lifetimes(context); } #endif return 0; } /* list of supported protocols and callbacks */ static const struct lws_protocols protocols_dummy[] = { /* first protocol must always be HTTP handler */ { "http-only", /* name */ lws_callback_http_dummy, /* callback */ 0, /* per_session_data_size */ 0, /* rx_buffer_size */ 0, /* id */ NULL, /* user */ 0 /* tx_packet_size */ }, /* * the other protocols are provided by lws plugins */ { NULL, NULL, 0, 0, 0, NULL, 0} /* terminator */ }; #ifdef LWS_PLAT_OPTEE #undef LWS_HAVE_GETENV #endif struct lws_vhost * lws_create_vhost(struct lws_context *context, const struct lws_context_creation_info *info) { struct lws_vhost *vh, **vh1 = &context->vhost_list; const struct lws_http_mount *mounts; const struct lws_protocols *pcols = info->protocols; #ifdef LWS_WITH_PLUGINS struct lws_plugin *plugin = context->plugin_list; #endif struct lws_protocols *lwsp; int m, f = !info->pvo, fx = 0, abs_pcol_count = 0, sec_pcol_count = 0; const char *name = "default"; char buf[96]; char *p; #if defined(LWS_WITH_SYS_ASYNC_DNS) extern struct lws_protocols lws_async_dns_protocol; #endif int n; if (info->vhost_name) name = info->vhost_name; if (lws_fi(&info->fic, "vh_create_oom")) vh = NULL; else vh = lws_zalloc(sizeof(*vh) + strlen(name) + 1 #if defined(LWS_WITH_EVENT_LIBS) + context->event_loop_ops->evlib_size_vh #endif , __func__); if (!vh) goto early_bail; if (info->log_cx) vh->lc.log_cx = info->log_cx; else vh->lc.log_cx = &log_cx; #if defined(LWS_WITH_EVENT_LIBS) vh->evlib_vh = (void *)&vh[1]; vh->name = (const char *)vh->evlib_vh + context->event_loop_ops->evlib_size_vh; #else vh->name = (const char *)&vh[1]; #endif memcpy((char *)vh->name, name, strlen(name) + 1); #if LWS_MAX_SMP > 1 lws_mutex_refcount_init(&vh->mr); #endif if (!pcols && !info->pprotocols) pcols = &protocols_dummy[0]; vh->context = context; { char *end = buf + sizeof(buf) - 1; p = buf; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "%s", vh->name); if (info->iface) p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "|%s", info->iface); if (info->port && !(info->port & 0xffff)) p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "|%u", info->port); } __lws_lc_tag(context, &context->lcg[LWSLCG_VHOST], &vh->lc, "%s|%s|%d", buf, info->iface ? info->iface : "", info->port); #if defined(LWS_WITH_SYS_FAULT_INJECTION) vh->fic.name = "vh"; if (info->fic.fi_owner.count) /* * This moves all the lws_fi_t from info->fi to the vhost fi, * leaving it empty */ lws_fi_import(&vh->fic, &info->fic); lws_fi_inherit_copy(&vh->fic, &context->fic, "vh", vh->name); if (lws_fi(&vh->fic, "vh_create_oom")) goto bail; #endif #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) vh->http.error_document_404 = info->error_document_404; #endif if (lws_check_opt(info->options, LWS_SERVER_OPTION_ONLY_RAW)) lwsl_vhost_info(vh, "set to only support RAW"); vh->iface = info->iface; #if !defined(LWS_PLAT_FREERTOS) && !defined(OPTEE_TA) && !defined(WIN32) vh->bind_iface = info->bind_iface; #endif #if defined(LWS_WITH_CLIENT) if (info->connect_timeout_secs) vh->connect_timeout_secs = (int)info->connect_timeout_secs; else vh->connect_timeout_secs = 20; #endif /* apply the context default lws_retry */ if (info->retry_and_idle_policy) vh->retry_policy = info->retry_and_idle_policy; else vh->retry_policy = &context->default_retry; /* * let's figure out how many protocols the user is handing us, using the * old or new way depending on what he gave us */ if (!pcols) for (vh->count_protocols = 0; info->pprotocols[vh->count_protocols]; vh->count_protocols++) ; else for (vh->count_protocols = 0; pcols[vh->count_protocols].callback; vh->count_protocols++) ; vh->options = info->options; vh->pvo = info->pvo; vh->headers = info->headers; vh->user = info->user; vh->finalize = info->finalize; vh->finalize_arg = info->finalize_arg; vh->listen_accept_role = info->listen_accept_role; vh->listen_accept_protocol = info->listen_accept_protocol; vh->unix_socket_perms = info->unix_socket_perms; vh->fo_listen_queue = info->fo_listen_queue; LWS_FOR_EVERY_AVAILABLE_ROLE_START(ar) if (lws_rops_fidx(ar, LWS_ROPS_init_vhost) && (lws_rops_func_fidx(ar, LWS_ROPS_init_vhost)).init_vhost(vh, info)) return NULL; LWS_FOR_EVERY_AVAILABLE_ROLE_END; if (info->keepalive_timeout) vh->keepalive_timeout = info->keepalive_timeout; else vh->keepalive_timeout = 5; if (info->timeout_secs_ah_idle) vh->timeout_secs_ah_idle = (int)info->timeout_secs_ah_idle; else vh->timeout_secs_ah_idle = 10; #if defined(LWS_WITH_TLS) vh->tls.alpn = info->alpn; vh->tls.ssl_info_event_mask = info->ssl_info_event_mask; if (info->ecdh_curve) lws_strncpy(vh->tls.ecdh_curve, info->ecdh_curve, sizeof(vh->tls.ecdh_curve)); /* carefully allocate and take a copy of cert + key paths if present */ n = 0; if (info->ssl_cert_filepath) n += (int)strlen(info->ssl_cert_filepath) + 1; if (info->ssl_private_key_filepath) n += (int)strlen(info->ssl_private_key_filepath) + 1; if (n) { vh->tls.key_path = vh->tls.alloc_cert_path = lws_malloc((unsigned int)n, "vh paths"); if (info->ssl_cert_filepath) { n = (int)strlen(info->ssl_cert_filepath) + 1; memcpy(vh->tls.alloc_cert_path, info->ssl_cert_filepath, (unsigned int)n); vh->tls.key_path += n; } if (info->ssl_private_key_filepath) memcpy(vh->tls.key_path, info->ssl_private_key_filepath, strlen(info->ssl_private_key_filepath) + 1); } #endif #if defined(LWS_WITH_HTTP_PROXY) && defined(LWS_ROLE_WS) fx = 1; #endif #if defined(LWS_WITH_ABSTRACT) abs_pcol_count = (int)LWS_ARRAY_SIZE(available_abstract_protocols) - 1; #endif #if defined(LWS_WITH_SECURE_STREAMS) sec_pcol_count = (int)LWS_ARRAY_SIZE(available_secstream_protocols) - 1; #endif /* * give the vhost a unified list of protocols including: * * - internal, async_dns if enabled (first vhost only) * - internal, abstracted ones * - the ones that came from plugins * - his user protocols */ if (lws_fi(&vh->fic, "vh_create_pcols_oom")) lwsp = NULL; else lwsp = lws_zalloc(sizeof(struct lws_protocols) * ((unsigned int)vh->count_protocols + (unsigned int)abs_pcol_count + (unsigned int)sec_pcol_count + (unsigned int)context->plugin_protocol_count + (unsigned int)fx + 1), "vh plugin table"); if (!lwsp) { lwsl_err("OOM\n"); goto bail; } /* * 1: user protocols (from pprotocols or protocols) */ m = vh->count_protocols; if (!pcols) { for (n = 0; n < m; n++) memcpy(&lwsp[n], info->pprotocols[n], sizeof(lwsp[0])); } else memcpy(lwsp, pcols, sizeof(struct lws_protocols) * (unsigned int)m); /* * 2: abstract protocols */ #if defined(LWS_WITH_ABSTRACT) for (n = 0; n < abs_pcol_count; n++) { memcpy(&lwsp[m++], available_abstract_protocols[n], sizeof(*lwsp)); vh->count_protocols++; } #endif /* * 3: async dns protocol (first vhost only) */ #if defined(LWS_WITH_SYS_ASYNC_DNS) if (!context->vhost_list) { memcpy(&lwsp[m++], &lws_async_dns_protocol, sizeof(struct lws_protocols)); vh->count_protocols++; } #endif #if defined(LWS_WITH_SECURE_STREAMS) for (n = 0; n < sec_pcol_count; n++) { memcpy(&lwsp[m++], available_secstream_protocols[n], sizeof(*lwsp)); vh->count_protocols++; } #endif /* * 3: For compatibility, all protocols enabled on vhost if only * the default vhost exists. Otherwise only vhosts who ask * for a protocol get it enabled. */ if (context->options & LWS_SERVER_OPTION_EXPLICIT_VHOSTS) f = 0; (void)f; #ifdef LWS_WITH_PLUGINS if (plugin) { while (plugin) { const lws_plugin_protocol_t *plpr = (const lws_plugin_protocol_t *)plugin->hdr; for (n = 0; n < plpr->count_protocols; n++) { /* * for compatibility's sake, no pvo implies * allow all protocols */ if (f || lws_vhost_protocol_options(vh, plpr->protocols[n].name)) { memcpy(&lwsp[m], &plpr->protocols[n], sizeof(struct lws_protocols)); m++; vh->count_protocols++; } } plugin = plugin->list; } } #endif #if defined(LWS_WITH_HTTP_PROXY) && defined(LWS_ROLE_WS) memcpy(&lwsp[m++], &lws_ws_proxy, sizeof(*lwsp)); vh->count_protocols++; #endif vh->protocols = lwsp; vh->allocated_vhost_protocols = 1; vh->same_vh_protocol_owner = (struct lws_dll2_owner *) lws_zalloc(sizeof(struct lws_dll2_owner) * (unsigned int)vh->count_protocols, "same vh list"); #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) vh->http.mount_list = info->mounts; #endif #if defined(LWS_WITH_SYS_METRICS) && defined(LWS_WITH_SERVER) { char *end = buf + sizeof(buf) - 1; p = buf; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "vh.%s", vh->name); if (info->iface) p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), ".%s", info->iface); if (info->port && !(info->port & 0xffff)) p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), ".%u", info->port); p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), ".rx"); vh->mt_traffic_rx = lws_metric_create(context, 0, buf); p[-2] = 't'; vh->mt_traffic_tx = lws_metric_create(context, 0, buf); } #endif #ifdef LWS_WITH_UNIX_SOCK if (LWS_UNIX_SOCK_ENABLED(vh)) { lwsl_vhost_info(vh, "Creating '%s' path \"%s\", %d protocols", vh->name, vh->iface, vh->count_protocols); } else #endif { switch(info->port) { case CONTEXT_PORT_NO_LISTEN: strcpy(buf, "(serving disabled)"); break; case CONTEXT_PORT_NO_LISTEN_SERVER: strcpy(buf, "(no listener)"); break; default: lws_snprintf(buf, sizeof(buf), "port %u", info->port); break; } lwsl_vhost_info(vh, "Creating Vhost '%s' %s, %d protocols, IPv6 %s", vh->name, buf, vh->count_protocols, LWS_IPV6_ENABLED(vh) ? "on" : "off"); } mounts = info->mounts; while (mounts) { (void)mount_protocols[0]; lwsl_vhost_info(vh, " mounting %s%s to %s", mount_protocols[mounts->origin_protocol], mounts->origin ? mounts->origin : "none", mounts->mountpoint); mounts = mounts->mount_next; } vh->listen_port = info->port; #if defined(LWS_WITH_SOCKS5) vh->socks_proxy_port = 0; vh->socks_proxy_address[0] = '\0'; #endif #if defined(LWS_WITH_CLIENT) && defined(LWS_CLIENT_HTTP_PROXYING) /* either use proxy from info, or try get it from env var */ #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) vh->http.http_proxy_port = 0; vh->http.http_proxy_address[0] = '\0'; /* http proxy */ if (info->http_proxy_address) { /* override for backwards compatibility */ if (info->http_proxy_port) vh->http.http_proxy_port = info->http_proxy_port; lws_set_proxy(vh, info->http_proxy_address); } else #endif { #ifdef LWS_HAVE_GETENV #if defined(__COVERITY__) p = NULL; #else p = getenv("http_proxy"); /* coverity[tainted_scalar] */ if (p) { lws_strncpy(buf, p, sizeof(buf)); lws_set_proxy(vh, buf); } #endif #endif } #endif #if defined(LWS_WITH_SOCKS5) lws_socks5c_ads_server(vh, info); #endif vh->ka_time = info->ka_time; vh->ka_interval = info->ka_interval; vh->ka_probes = info->ka_probes; if (vh->options & LWS_SERVER_OPTION_STS) lwsl_vhost_notice(vh, " STS enabled"); #ifdef LWS_WITH_ACCESS_LOG if (info->log_filepath) { if (lws_fi(&vh->fic, "vh_create_access_log_open_fail")) vh->log_fd = (int)LWS_INVALID_FILE; else vh->log_fd = lws_open(info->log_filepath, O_CREAT | O_APPEND | O_RDWR, 0600); if (vh->log_fd == (int)LWS_INVALID_FILE) { lwsl_vhost_err(vh, "unable to open log filepath %s", info->log_filepath); goto bail; } #ifndef WIN32 if (context->uid != (uid_t)-1) if (chown(info->log_filepath, context->uid, context->gid) == -1) lwsl_vhost_err(vh, "unable to chown log file %s", info->log_filepath); #endif } else vh->log_fd = (int)LWS_INVALID_FILE; #endif if (lws_fi(&vh->fic, "vh_create_ssl_srv") || lws_context_init_server_ssl(info, vh)) { lwsl_vhost_err(vh, "lws_context_init_server_ssl failed"); goto bail1; } if (lws_fi(&vh->fic, "vh_create_ssl_cli") || lws_context_init_client_ssl(info, vh)) { lwsl_vhost_err(vh, "lws_context_init_client_ssl failed"); goto bail1; } #if defined(LWS_WITH_SERVER) lws_context_lock(context, __func__); if (lws_fi(&vh->fic, "vh_create_srv_init")) n = -1; else n = _lws_vhost_init_server(info, vh); lws_context_unlock(context); if (n < 0) { lwsl_vhost_err(vh, "init server failed\n"); goto bail1; } #endif #if defined(LWS_WITH_SYS_ASYNC_DNS) n = !!context->vhost_list; #endif while (1) { if (!(*vh1)) { *vh1 = vh; break; } vh1 = &(*vh1)->vhost_next; }; #if defined(LWS_WITH_SYS_ASYNC_DNS) if (!n) lws_async_dns_init(context); #endif /* for the case we are adding a vhost much later, after server init */ if (context->protocol_init_done) if (lws_fi(&vh->fic, "vh_create_protocol_init") || lws_protocol_init(context)) { lwsl_vhost_err(vh, "lws_protocol_init failed"); goto bail1; } return vh; bail1: lws_vhost_destroy(vh); return NULL; bail: __lws_lc_untag(vh->context, &vh->lc); lws_fi_destroy(&vh->fic); lws_free(vh); early_bail: lws_fi_destroy(&info->fic); return NULL; } int lws_init_vhost_client_ssl(const struct lws_context_creation_info *info, struct lws_vhost *vhost) { struct lws_context_creation_info i; memcpy(&i, info, sizeof(i)); i.port = CONTEXT_PORT_NO_LISTEN; return lws_context_init_client_ssl(&i, vhost); } void lws_cancel_service_pt(struct lws *wsi) { lws_plat_pipe_signal(wsi->a.context, wsi->tsi); } void lws_cancel_service(struct lws_context *context) { struct lws_context_per_thread *pt = &context->pt[0]; short m; if (context->service_no_longer_possible) return; lwsl_cx_debug(context, "\n"); for (m = 0; m < context->count_threads; m++) { if (pt->pipe_wsi) lws_plat_pipe_signal(pt->context, m); pt++; } } int __lws_create_event_pipes(struct lws_context *context) { struct lws_context_per_thread *pt; struct lws *wsi; int n; /* * Create the pt event pipes... these are unique in that they are * not bound to a vhost or protocol (both are NULL) */ #if LWS_MAX_SMP > 1 for (n = 0; n < context->count_threads; n++) { #else n = 0; { #endif pt = &context->pt[n]; if (pt->pipe_wsi) return 0; wsi = __lws_wsi_create_with_role(context, n, &role_ops_pipe, NULL); if (!wsi) return 1; __lws_lc_tag(context, &context->lcg[LWSLCG_WSI], &wsi->lc, "pipe"); wsi->event_pipe = 1; pt->pipe_wsi = wsi; if (!lws_plat_pipe_create(wsi)) { /* * platform code returns 0 if it actually created pipes * and initialized pt->dummy_pipe_fds[]. If it used * some other mechanism outside of signaling in the * normal event loop, we skip treating the pipe as * related to dummy_pipe_fds[], adding it to the fds, * etc. */ wsi->desc.sockfd = context->pt[n].dummy_pipe_fds[0]; // lwsl_debug("event pipe fd %d\n", wsi->desc.sockfd); if (lws_wsi_inject_to_loop(pt, wsi)) goto bail; } } return 0; bail: return 1; } void lws_destroy_event_pipe(struct lws *wsi) { int n; lwsl_wsi_info(wsi, "in"); n = lws_wsi_extract_from_loop(wsi); lws_plat_pipe_close(wsi); if (!n) lws_free(wsi); } /* * Start close process for any wsi bound to this vhost that belong to the * service thread we are called from. Because of async event lib close, or * protocol staged close on wsi, latency with pts joining in closing their * wsi on the vhost, this may take some time. * * When the wsi count bound to the vhost (from all pts) drops to zero, the * vhost destruction will be finalized. */ void __lws_vhost_destroy_pt_wsi_dieback_start(struct lws_vhost *vh) { #if LWS_MAX_SMP > 1 /* calling pt thread has done its wsi dieback */ int tsi = lws_pthread_self_to_tsi(vh->context); #else int tsi = 0; #endif struct lws_context *ctx = vh->context; struct lws_context_per_thread *pt = &ctx->pt[tsi]; unsigned int n; #if LWS_MAX_SMP > 1 if (vh->close_flow_vs_tsi[lws_pthread_self_to_tsi(vh->context)]) /* this pt has already done its bit */ return; #endif #if defined(LWS_WITH_CLIENT) /* * destroy any wsi that are associated with us but have no socket * (and will otherwise be missed for destruction) */ lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, vh->vh_awaiting_socket_owner.head) { struct lws *w = lws_container_of(d, struct lws, vh_awaiting_socket); if (w->tsi == tsi) { lwsl_vhost_debug(vh, "closing aso"); lws_close_free_wsi(w, LWS_CLOSE_STATUS_NOSTATUS, "awaiting skt"); } } lws_end_foreach_dll_safe(d, d1); #endif /* * Close any wsi on this pt bound to the vhost */ n = 0; while (n < pt->fds_count) { struct lws *wsi = wsi_from_fd(ctx, pt->fds[n].fd); if (wsi && wsi->tsi == tsi && wsi->a.vhost == vh) { lwsl_wsi_debug(wsi, "pt %d: closin, role %s", tsi, wsi->role_ops->name); lws_wsi_close(wsi, LWS_TO_KILL_ASYNC); if (pt->pipe_wsi == wsi) pt->pipe_wsi = NULL; } n++; } #if LWS_MAX_SMP > 1 /* calling pt thread has done its wsi dieback */ vh->close_flow_vs_tsi[lws_pthread_self_to_tsi(vh->context)] = 1; #endif } #if defined(LWS_WITH_NETWORK) /* returns nonzero if v1 and v2 can share listen sockets */ int lws_vhost_compare_listen(struct lws_vhost *v1, struct lws_vhost *v2) { return ((!v1->iface && !v2->iface) || (v1->iface && v2->iface && !strcmp(v1->iface, v2->iface))) && v1->listen_port == v2->listen_port; } /* helper to interate every listen socket on any vhost and call cb on it */ int lws_vhost_foreach_listen_wsi(struct lws_context *cx, void *arg, lws_dll2_foreach_cb_t cb) { struct lws_vhost *v = cx->vhost_list; int n; while (v) { n = lws_dll2_foreach_safe(&v->listen_wsi, arg, cb); if (n) return n; v = v->vhost_next; } return 0; } #endif /* * Mark the vhost as being destroyed, so things trying to use it abort. * * Dispose of the listen socket. */ void lws_vhost_destroy1(struct lws_vhost *vh) { struct lws_context *context = vh->context; int n; lwsl_vhost_info(vh, "\n"); lws_context_lock(context, "vhost destroy 1"); /* ---------- context { */ if (vh->being_destroyed) goto out; /* * let's lock all the pts, to enforce pt->vh order... pt is refcounted * so it's OK if we acquire it later inside this */ for (n = 0; n < context->count_threads; n++) lws_pt_lock((&context->pt[n]), __func__); lws_vhost_lock(vh); /* -------------- vh { */ #if defined(LWS_WITH_TLS_SESSIONS) && defined(LWS_WITH_TLS) lws_tls_session_vh_destroy(vh); #endif vh->being_destroyed = 1; lws_dll2_add_tail(&vh->vh_being_destroyed_list, &context->owner_vh_being_destroyed); #if defined(LWS_WITH_NETWORK) && defined(LWS_WITH_SERVER) /* * PHASE 1: take down or reassign any listen wsi * * Are there other vhosts that are piggybacking on our listen sockets? * If so we need to hand each listen socket off to one of the others * so it will remain open. * * If not, close the listen socket now. * * Either way the listen socket response to the vhost close is * immediately performed. */ lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, lws_dll2_get_head(&vh->listen_wsi)) { struct lws *wsi = lws_container_of(d, struct lws, listen_list); /* * For each of our listen sockets, check every other vhost to * see if another vhost should be given our listen socket. * * ipv4 and ipv6 sockets will both match and be migrated. */ lws_start_foreach_ll(struct lws_vhost *, v, context->vhost_list) { if (v != vh && !v->being_destroyed && lws_vhost_compare_listen(v, vh)) { /* * this can only be a listen wsi, which is * restricted... it has no protocol or other * bindings or states. So we can simply * swap it to a vhost that has the same * iface + port, but is not closing. */ lwsl_vhost_notice(vh, "listen skt migrate -> %s", lws_vh_tag(v)); lws_dll2_remove(&wsi->listen_list); lws_dll2_add_tail(&wsi->listen_list, &v->listen_wsi); /* req cx + vh lock */ /* * If the vhost sees it's being destroyed and * in the unbind the number of wsis bound to * it falls to zero, it will destroy the * vhost opportunistically before we can * complete the transfer. Add a fake wsi * bind temporarily to disallow this... */ v->count_bound_wsi++; __lws_vhost_unbind_wsi(wsi); lws_vhost_bind_wsi(v, wsi); /* * ... remove the fake wsi bind */ v->count_bound_wsi--; break; } } lws_end_foreach_ll(v, vhost_next); } lws_end_foreach_dll_safe(d, d1); /* * If any listen wsi left we couldn't pass to other vhosts, close them */ lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, lws_dll2_get_head(&vh->listen_wsi)) { struct lws *wsi = lws_container_of(d, struct lws, listen_list); lws_dll2_remove(&wsi->listen_list); lws_wsi_close(wsi, LWS_TO_KILL_ASYNC); } lws_end_foreach_dll_safe(d, d1); #endif #if defined(LWS_WITH_TLS_JIT_TRUST) lws_sul_cancel(&vh->sul_unref); #endif lws_vhost_unlock(vh); /* } vh -------------- */ for (n = 0; n < context->count_threads; n++) lws_pt_unlock((&context->pt[n])); out: lws_context_unlock(context); /* --------------------------- context { */ } #if defined(LWS_WITH_ABSTRACT) static int destroy_ais(struct lws_dll2 *d, void *user) { lws_abs_t *ai = lws_container_of(d, lws_abs_t, abstract_instances); lws_abs_destroy_instance(&ai); return 0; } #endif /* * Either start close or destroy any wsi on the vhost that belong to this pt, * if SMP mark the vh that we have done it for * * Must not have lock on vh */ void __lws_vhost_destroy2(struct lws_vhost *vh) { const struct lws_protocols *protocol = NULL; struct lws_context *context = vh->context; struct lws wsi; int n; vh->being_destroyed = 0; // lwsl_info("%s: %s\n", __func__, vh->name); /* * remove ourselves from the defer binding list */ lws_start_foreach_llp(struct lws_vhost **, pv, vh->context->no_listener_vhost_list) { if (*pv == vh) { lwsl_debug("deferred iface: removing vh %s\n", (*pv)->name); *pv = vh->no_listener_vhost_list; vh->no_listener_vhost_list = NULL; break; } } lws_end_foreach_llp(pv, no_listener_vhost_list); /* * let the protocols destroy the per-vhost protocol objects */ memset(&wsi, 0, sizeof(wsi)); wsi.a.context = vh->context; wsi.a.vhost = vh; /* not a real bound wsi */ protocol = vh->protocols; if (protocol && vh->created_vhost_protocols) { n = 0; while (n < vh->count_protocols) { wsi.a.protocol = protocol; lwsl_vhost_debug(vh, "protocol destroy"); if (protocol->callback) protocol->callback(&wsi, LWS_CALLBACK_PROTOCOL_DESTROY, NULL, NULL, 0); protocol++; n++; } } /* * remove vhost from context list of vhosts */ lws_start_foreach_llp(struct lws_vhost **, pv, context->vhost_list) { if (*pv == vh) { *pv = vh->vhost_next; break; } } lws_end_foreach_llp(pv, vhost_next); /* add ourselves to the pending destruction list */ if (vh->context->vhost_pending_destruction_list != vh) { vh->vhost_next = vh->context->vhost_pending_destruction_list; vh->context->vhost_pending_destruction_list = vh; } //lwsl_debug("%s: do dfl '%s'\n", __func__, vh->name); /* remove ourselves from the pending destruction list */ lws_start_foreach_llp(struct lws_vhost **, pv, context->vhost_pending_destruction_list) { if ((*pv) == vh) { *pv = (*pv)->vhost_next; break; } } lws_end_foreach_llp(pv, vhost_next); /* * Free all the allocations associated with the vhost */ protocol = vh->protocols; if (protocol) { n = 0; while (n < vh->count_protocols) { if (vh->protocol_vh_privs && vh->protocol_vh_privs[n]) { lws_free(vh->protocol_vh_privs[n]); vh->protocol_vh_privs[n] = NULL; } protocol++; n++; } } if (vh->protocol_vh_privs) lws_free(vh->protocol_vh_privs); lws_ssl_SSL_CTX_destroy(vh); lws_free(vh->same_vh_protocol_owner); if ( #if defined(LWS_WITH_PLUGINS) context->plugin_list || #endif (context->options & LWS_SERVER_OPTION_EXPLICIT_VHOSTS) || vh->allocated_vhost_protocols) lws_free((void *)vh->protocols); #if defined(LWS_WITH_NETWORK) LWS_FOR_EVERY_AVAILABLE_ROLE_START(ar) if (lws_rops_fidx(ar, LWS_ROPS_destroy_vhost)) lws_rops_func_fidx(ar, LWS_ROPS_destroy_vhost). destroy_vhost(vh); LWS_FOR_EVERY_AVAILABLE_ROLE_END; #endif #ifdef LWS_WITH_ACCESS_LOG if (vh->log_fd != (int)LWS_INVALID_FILE) close(vh->log_fd); #endif #if defined (LWS_WITH_TLS) lws_free_set_NULL(vh->tls.alloc_cert_path); #endif #if LWS_MAX_SMP > 1 lws_mutex_refcount_destroy(&vh->mr); #endif #if defined(LWS_WITH_UNIX_SOCK) if (LWS_UNIX_SOCK_ENABLED(vh)) { n = unlink(vh->iface); if (n) lwsl_vhost_info(vh, "Closing unix socket %s: errno %d\n", vh->iface, errno); } #endif /* * although async event callbacks may still come for wsi handles with * pending close in the case of asycn event library like libuv, * they do not refer to the vhost. So it's safe to free. */ if (vh->finalize) vh->finalize(vh, vh->finalize_arg); #if defined(LWS_WITH_ABSTRACT) /* * abstract instances */ lws_dll2_foreach_safe(&vh->abstract_instances_owner, NULL, destroy_ais); #endif #if defined(LWS_WITH_SERVER) && defined(LWS_WITH_SYS_METRICS) lws_metric_destroy(&vh->mt_traffic_rx, 0); lws_metric_destroy(&vh->mt_traffic_tx, 0); #endif lws_dll2_remove(&vh->vh_being_destroyed_list); #if defined(LWS_WITH_SYS_FAULT_INJECTION) lws_fi_destroy(&vh->fic); #endif #if defined(LWS_WITH_TLS_JIT_TRUST) lws_sul_cancel(&vh->sul_unref); #endif __lws_lc_untag(vh->context, &vh->lc); memset(vh, 0, sizeof(*vh)); lws_free(vh); } /* * Starts the vhost destroy process * * Vhosts are not simple to deal with because they are an abstraction that * crosses SMP thread boundaries, a wsi on any pt can bind to any vhost. If we * want another pt to do something to its wsis safely, we have to asynchronously * ask it to do it. * * In addition, with event libs, closing any handles (which are bound to vhosts * in their wsi) can happens asynchronously, so we can't just linearly do some * cleanup flow and free it in one step. * * The vhost destroy is cut into two pieces: * * 1) dispose of the listen socket, either by passing it on to another vhost * that was already sharing it, or just closing it. * * If any wsi bound to the vhost, mark the vhost as in the process of being * destroyed, triggering each pt to close all wsi bound to the vhost next * time around the event loop. Call lws_cancel_service() so all the pts wake * to deal with this without long poll waits making delays. * * 2) When the number of wsis bound to the vhost reaches zero, do the final * vhost destroy flow, this can be triggered from any pt. */ void lws_vhost_destroy(struct lws_vhost *vh) { struct lws_context *context = vh->context; lws_context_lock(context, __func__); /* ------ context { */ /* dispose of the listen socket one way or another */ lws_vhost_destroy1(vh); /* start async closure of all wsi on this pt thread attached to vh */ __lws_vhost_destroy_pt_wsi_dieback_start(vh); lwsl_vhost_info(vh, "count_bound_wsi %d", vh->count_bound_wsi); /* if there are none, finalize now since no further chance */ if (!vh->count_bound_wsi) { __lws_vhost_destroy2(vh); goto out; } /* * We have some wsi bound to this vhost, we have to wait for these to * complete close and unbind before progressing the vhost removal. * * When the last bound wsi on this vh is destroyed we will auto-call * __lws_vhost_destroy2() to finalize vh destruction */ #if LWS_MAX_SMP > 1 /* alert other pts they also need to do dieback flow for their wsi */ lws_cancel_service(context); #endif out: lws_context_unlock(context); /* } context ------------------- */ } void * lws_vhost_user(struct lws_vhost *vhost) { return vhost->user; } int lws_get_vhost_listen_port(struct lws_vhost *vhost) { return vhost->listen_port; } #if defined(LWS_WITH_SERVER) void lws_context_deprecate(struct lws_context *cx, lws_reload_func cb) { struct lws_vhost *vh = cx->vhost_list; /* * "deprecation" means disable the cx from accepting any new * connections and free up listen sockets to be used by a replacement * cx. * * Otherwise the deprecated cx remains operational, until its * number of connected sockets falls to zero, when it is deleted. * * So, for each vhost, close his listen sockets */ while (vh) { lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, lws_dll2_get_head(&vh->listen_wsi)) { struct lws *wsi = lws_container_of(d, struct lws, listen_list); wsi->socket_is_permanently_unusable = 1; lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, __func__); cx->deprecation_pending_listen_close_count++; } lws_end_foreach_dll_safe(d, d1); vh = vh->vhost_next; } cx->deprecated = 1; cx->deprecation_cb = cb; } #endif #if defined(LWS_WITH_NETWORK) struct lws_vhost * lws_get_vhost_by_name(struct lws_context *context, const char *name) { lws_start_foreach_ll(struct lws_vhost *, v, context->vhost_list) { if (!v->being_destroyed && !strcmp(v->name, name)) return v; } lws_end_foreach_ll(v, vhost_next); return NULL; } #if defined(LWS_WITH_CLIENT) /* * This is the logic checking to see if the new connection wsi should have a * pipelining or muxing relationship with an existing "active connection" to * the same endpoint under the same conditions. * * This was originally in the client code but since the list is held on the * vhost (to ensure the same client tls ctx is involved) it's cleaner in vhost.c * * ACTIVE_CONNS_QUEUED: We're queued on an active connection, set *nwsi to that * ACTIVE_CONNS_MUXED: We are joining an active mux conn *nwsi as a child * ACTIVE_CONNS_SOLO: There's no existing conn to join either way */ int lws_vhost_active_conns(struct lws *wsi, struct lws **nwsi, const char *adsin) { #if defined(LWS_WITH_TLS) const char *my_alpn = lws_wsi_client_stash_item(wsi, CIS_ALPN, _WSI_TOKEN_CLIENT_ALPN); #endif #if defined(LWS_WITH_TLS) char newconn_cannot_use_h1 = 0; if ((wsi->tls.use_ssl & LCCSCF_USE_SSL) && my_alpn && !strstr(my_alpn, "http/1.1")) /* * new guy wants to use tls, he specifies the alpn and he does * not list h1 as a choice ==> he can't bind to existing h1 */ newconn_cannot_use_h1 = 1; #endif if (!lws_dll2_is_detached(&wsi->dll2_cli_txn_queue)) { struct lws *w = lws_container_of( wsi->dll2_cli_txn_queue.owner, struct lws, dll2_cli_txn_queue_owner); *nwsi = w; return ACTIVE_CONNS_QUEUED; } #if defined(LWS_ROLE_H2) || defined(LWS_ROLE_MQTT) if (wsi->mux.parent_wsi) { /* * We already decided... */ *nwsi = wsi->mux.parent_wsi; return ACTIVE_CONNS_MUXED; } #endif lws_context_lock(wsi->a.context, __func__); /* -------------- cx { */ lws_vhost_lock(wsi->a.vhost); /* ----------------------------------- { */ lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, wsi->a.vhost->dll_cli_active_conns_owner.head) { struct lws *w = lws_container_of(d, struct lws, dll_cli_active_conns); lwsl_wsi_debug(wsi, "check %s %s %s %d %d", lws_wsi_tag(w), adsin, w->cli_hostname_copy ? w->cli_hostname_copy : "null", wsi->c_port, w->c_port); if (w != wsi && /* * "same internet protocol"... this is a bit tricky, * since h2 start out as h1, and may stay at h1. * * But an idle h1 connection cannot be used by a connection * request that doesn't have http/1.1 in its alpn list... */ (w->role_ops == wsi->role_ops || (lwsi_role_http(w) && lwsi_role_http(wsi))) && /* ... same role, or at least both some kind of http */ w->cli_hostname_copy && !strcmp(adsin, w->cli_hostname_copy) && /* same endpoint hostname */ #if defined(LWS_WITH_TLS) !(newconn_cannot_use_h1 && w->role_ops == &role_ops_h1) && /* if we can't use h1, old guy must not be h1 */ (wsi->tls.use_ssl & LCCSCF_USE_SSL) == (w->tls.use_ssl & LCCSCF_USE_SSL) && /* must both agree on tls use or not */ #endif wsi->c_port == w->c_port) { /* same endpoint port */ /* * There's already an active connection. * * The server may have told the existing active * connection that it doesn't support pipelining... */ if (w->keepalive_rejected) { lwsl_wsi_notice(w, "defeating pipelining"); goto solo; } #if defined(LWS_WITH_HTTP2) /* * h2: if in usable state already: just use it without * going through the queue */ if (w->client_h2_alpn && w->client_mux_migrated && (lwsi_state(w) == LRS_H2_WAITING_TO_SEND_HEADERS || lwsi_state(w) == LRS_ESTABLISHED || lwsi_state(w) == LRS_IDLING)) { lwsl_wsi_notice(w, "just join h2 directly 0x%x", lwsi_state(w)); if (lwsi_state(w) == LRS_IDLING) _lws_generic_transaction_completed_active_conn(&w, 0); //lwsi_set_state(w, LRS_H1C_ISSUE_HANDSHAKE2); wsi->client_h2_alpn = 1; lws_wsi_h2_adopt(w, wsi); lws_vhost_unlock(wsi->a.vhost); /* } ---------- */ lws_context_unlock(wsi->a.context); /* -------------- cx { */ *nwsi = w; return ACTIVE_CONNS_MUXED; } #endif #if defined(LWS_ROLE_MQTT) /* * MQTT: if in usable state already: just use it without * going through the queue */ if (lwsi_role_mqtt(wsi) && w->client_mux_migrated && lwsi_state(w) == LRS_ESTABLISHED) { if (lws_wsi_mqtt_adopt(w, wsi)) { lwsl_wsi_notice(w, "join mqtt directly"); lws_dll2_remove(&wsi->dll2_cli_txn_queue); wsi->client_mux_substream = 1; lws_vhost_unlock(wsi->a.vhost); /* } ---------- */ lws_context_unlock(wsi->a.context); /* -------------- cx { */ return ACTIVE_CONNS_MUXED; } } #endif /* * If the connection is viable but not yet in a usable * state, let's attach ourselves to it and wait for it * to get there or fail. */ lwsl_wsi_notice(wsi, "apply txn queue %s, state 0x%lx", lws_wsi_tag(w), (unsigned long)w->wsistate); /* * ...let's add ourselves to his transaction queue... * we are adding ourselves at the TAIL */ lws_dll2_add_tail(&wsi->dll2_cli_txn_queue, &w->dll2_cli_txn_queue_owner); if (lwsi_state(w) == LRS_IDLING) _lws_generic_transaction_completed_active_conn(&w, 0); /* * For eg, h1 next we'd pipeline our headers out on him, * and wait for our turn at client transaction_complete * to take over parsing the rx. */ lws_vhost_unlock(wsi->a.vhost); /* } ---------- */ lws_context_unlock(wsi->a.context); /* -------------- cx { */ *nwsi = w; return ACTIVE_CONNS_QUEUED; } } lws_end_foreach_dll_safe(d, d1); solo: lws_vhost_unlock(wsi->a.vhost); /* } ---------------------------------- */ lws_context_unlock(wsi->a.context); /* -------------- cx { */ /* there is nobody already connected in the same way */ return ACTIVE_CONNS_SOLO; } #endif #endif const char * lws_vh_tag(struct lws_vhost *vh) { return lws_lc_tag(&vh->lc); } struct lws_log_cx * lwsl_vhost_get_cx(struct lws_vhost *vh) { if (!vh) return NULL; return vh->lc.log_cx; } void lws_log_prepend_vhost(struct lws_log_cx *cx, void *obj, char **p, char *e) { struct lws_vhost *vh = (struct lws_vhost *)obj; *p += lws_snprintf(*p, lws_ptr_diff_size_t(e, (*p)), "%s: ", lws_vh_tag(vh)); } libwebsockets-4.3.5/lib/core-net/wsi-timeout.c000066400000000000000000000210021476025525100213010ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" void __lws_wsi_remove_from_sul(struct lws *wsi) { lws_sul_cancel(&wsi->sul_timeout); lws_sul_cancel(&wsi->sul_hrtimer); lws_sul_cancel(&wsi->sul_validity); #if defined(LWS_WITH_SYS_FAULT_INJECTION) lws_sul_cancel(&wsi->sul_fault_timedclose); #endif } /* * hrtimer */ static void lws_sul_hrtimer_cb(lws_sorted_usec_list_t *sul) { struct lws *wsi = lws_container_of(sul, struct lws, sul_hrtimer); if (wsi->a.protocol && wsi->a.protocol->callback(wsi, LWS_CALLBACK_TIMER, wsi->user_space, NULL, 0)) __lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "hrtimer cb errored"); } void __lws_set_timer_usecs(struct lws *wsi, lws_usec_t us) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; wsi->sul_hrtimer.cb = lws_sul_hrtimer_cb; __lws_sul_insert_us(&pt->pt_sul_owner[LWSSULLI_MISS_IF_SUSPENDED], &wsi->sul_hrtimer, us); } void lws_set_timer_usecs(struct lws *wsi, lws_usec_t usecs) { __lws_set_timer_usecs(wsi, usecs); } /* * wsi timeout */ static void lws_sul_wsitimeout_cb(lws_sorted_usec_list_t *sul) { struct lws *wsi = lws_container_of(sul, struct lws, sul_timeout); struct lws_context *cx = wsi->a.context; struct lws_context_per_thread *pt = &cx->pt[(int)wsi->tsi]; /* no need to log normal idle keepalive timeout */ // if (wsi->pending_timeout != PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE) #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) if (wsi->pending_timeout != PENDING_TIMEOUT_USER_OK) lwsl_wsi_info(wsi, "TIMEDOUT WAITING %d, dhdr %d, ah %p, wl %d", wsi->pending_timeout, wsi->hdr_parsing_completed, wsi->http.ah, pt->http.ah_wait_list_length); #if defined(LWS_WITH_CGI) if (wsi->http.cgi) lwsl_wsi_notice(wsi, "CGI timeout: %s", wsi->http.cgi->summary); #endif #else if (wsi->pending_timeout != PENDING_TIMEOUT_USER_OK) lwsl_wsi_info(wsi, "TIMEDOUT WAITING on %d ", wsi->pending_timeout); #endif /* cgi timeout */ if (wsi->pending_timeout != PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE) /* * Since he failed a timeout, he already had a chance to * do something and was unable to... that includes * situations like half closed connections. So process * this "failed timeout" close as a violent death and * don't try to do protocol cleanup like flush partials. */ wsi->socket_is_permanently_unusable = 1; #if defined(LWS_WITH_CLIENT) if (lwsi_state(wsi) == LRS_WAITING_SSL) lws_inform_client_conn_fail(wsi, (void *)"Timed out waiting SSL", 21); if (lwsi_state(wsi) == LRS_WAITING_SERVER_REPLY) lws_inform_client_conn_fail(wsi, (void *)"Timed out waiting server reply", 30); #endif lws_context_lock(cx, __func__); lws_pt_lock(pt, __func__); __lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "timeout"); lws_pt_unlock(pt); lws_context_unlock(cx); } void __lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; wsi->sul_timeout.cb = lws_sul_wsitimeout_cb; __lws_sul_insert_us(&pt->pt_sul_owner[LWSSULLI_MISS_IF_SUSPENDED], &wsi->sul_timeout, ((lws_usec_t)secs) * LWS_US_PER_SEC); lwsl_wsi_debug(wsi, "%d secs, reason %d\n", secs, reason); wsi->pending_timeout = (char)reason; } void lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; lws_context_lock(pt->context, __func__); lws_pt_lock(pt, __func__); lws_dll2_remove(&wsi->sul_timeout.list); lws_pt_unlock(pt); if (!secs) goto bail; if (secs == LWS_TO_KILL_SYNC) { lwsl_wsi_debug(wsi, "TO_KILL_SYNC"); lws_context_unlock(pt->context); lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "to sync kill"); return; } if (secs == LWS_TO_KILL_ASYNC) secs = 0; // assert(!secs || !wsi->mux_stream_immortal); if (secs && wsi->mux_stream_immortal) lwsl_wsi_err(wsi, "on immortal stream %d %d", reason, secs); lws_pt_lock(pt, __func__); __lws_set_timeout(wsi, reason, secs); lws_pt_unlock(pt); bail: lws_context_unlock(pt->context); } void lws_set_timeout_us(struct lws *wsi, enum pending_timeout reason, lws_usec_t us) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; lws_pt_lock(pt, __func__); lws_dll2_remove(&wsi->sul_timeout.list); lws_pt_unlock(pt); if (!us) return; lws_pt_lock(pt, __func__); __lws_sul_insert_us(&pt->pt_sul_owner[LWSSULLI_MISS_IF_SUSPENDED], &wsi->sul_timeout, us); lwsl_wsi_notice(wsi, "%llu us, reason %d", (unsigned long long)us, reason); wsi->pending_timeout = (char)reason; lws_pt_unlock(pt); } static void lws_validity_cb(lws_sorted_usec_list_t *sul) { struct lws *wsi = lws_container_of(sul, struct lws, sul_validity); struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; const lws_retry_bo_t *rbo = wsi->retry_policy; /* one of either the ping or hangup validity threshold was crossed */ if (wsi->validity_hup) { lwsl_wsi_info(wsi, "validity too old"); struct lws_context *cx = wsi->a.context; struct lws_context_per_thread *pt = &cx->pt[(int)wsi->tsi]; lws_context_lock(cx, __func__); lws_pt_lock(pt, __func__); __lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "validity timeout"); lws_pt_unlock(pt); lws_context_unlock(cx); return; } /* schedule a protocol-dependent ping */ lwsl_wsi_info(wsi, "scheduling validity check"); if (lws_rops_fidx(wsi->role_ops, LWS_ROPS_issue_keepalive)) lws_rops_func_fidx(wsi->role_ops, LWS_ROPS_issue_keepalive). issue_keepalive(wsi, 0); /* * We arrange to come back here after the additional ping to hangup time * and do the hangup, unless we get validated (by, eg, a PONG) and * reset the timer */ assert(rbo->secs_since_valid_hangup > rbo->secs_since_valid_ping); wsi->validity_hup = 1; __lws_sul_insert_us(&pt->pt_sul_owner[!!wsi->conn_validity_wakesuspend], &wsi->sul_validity, ((uint64_t)rbo->secs_since_valid_hangup - rbo->secs_since_valid_ping) * LWS_US_PER_SEC); } /* * The role calls this back to actually confirm validity on a particular wsi * (which may not be the original wsi) */ void _lws_validity_confirmed_role(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; const lws_retry_bo_t *rbo = wsi->retry_policy; if (!rbo || !rbo->secs_since_valid_hangup) return; wsi->validity_hup = 0; wsi->sul_validity.cb = lws_validity_cb; wsi->validity_hup = rbo->secs_since_valid_ping >= rbo->secs_since_valid_hangup; lwsl_wsi_info(wsi, "setting validity timer %ds (hup %d)", wsi->validity_hup ? rbo->secs_since_valid_hangup : rbo->secs_since_valid_ping, wsi->validity_hup); __lws_sul_insert_us(&pt->pt_sul_owner[!!wsi->conn_validity_wakesuspend], &wsi->sul_validity, ((uint64_t)(wsi->validity_hup ? rbo->secs_since_valid_hangup : rbo->secs_since_valid_ping)) * LWS_US_PER_SEC); } void lws_validity_confirmed(struct lws *wsi) { /* * This may be a stream inside a muxed network connection... leave it * to the role to figure out who actually needs to understand their * validity was confirmed. */ if (!wsi->h2_stream_carries_ws && /* only if not encapsulated */ wsi->role_ops && lws_rops_fidx(wsi->role_ops, LWS_ROPS_issue_keepalive)) lws_rops_func_fidx(wsi->role_ops, LWS_ROPS_issue_keepalive). issue_keepalive(wsi, 1); } libwebsockets-4.3.5/lib/core-net/wsi.c000066400000000000000000001106721476025525100176310ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" const char * lws_wsi_tag(struct lws *wsi) { if (!wsi) return "[null wsi]"; return lws_lc_tag(&wsi->lc); } #if defined (_DEBUG) void lwsi_set_role(struct lws *wsi, lws_wsi_state_t role) { wsi->wsistate = (wsi->wsistate & (~LWSI_ROLE_MASK)) | role; lwsl_wsi_debug(wsi, "state 0x%lx", (unsigned long)wsi->wsistate); } void lwsi_set_state(struct lws *wsi, lws_wsi_state_t lrs) { lws_wsi_state_t old = wsi->wsistate; wsi->wsistate = (old & (unsigned int)(~LRS_MASK)) | lrs; lwsl_wsi_debug(wsi, "lwsi_set_state 0x%lx -> 0x%lx", (unsigned long)old, (unsigned long)wsi->wsistate); } #endif void lws_log_prepend_wsi(struct lws_log_cx *cx, void *obj, char **p, char *e) { struct lws *wsi = (struct lws *)obj; *p += lws_snprintf(*p, lws_ptr_diff_size_t(e, (*p)), "%s: ", lws_wsi_tag(wsi)); } void lws_vhost_bind_wsi(struct lws_vhost *vh, struct lws *wsi) { if (wsi->a.vhost == vh) return; lws_context_lock(vh->context, __func__); /* ---------- context { */ wsi->a.vhost = vh; #if defined(LWS_WITH_TLS_JIT_TRUST) if (!vh->count_bound_wsi && vh->grace_after_unref) { lwsl_wsi_info(wsi, "in use"); lws_sul_cancel(&vh->sul_unref); } #endif vh->count_bound_wsi++; lws_context_unlock(vh->context); /* } context ---------- */ lwsl_wsi_debug(wsi, "vh %s: wsi %s/%s, count_bound_wsi %d\n", vh->name, wsi->role_ops ? wsi->role_ops->name : "none", wsi->a.protocol ? wsi->a.protocol->name : "none", vh->count_bound_wsi); assert(wsi->a.vhost->count_bound_wsi > 0); } /* req cx lock... acquires vh lock */ void __lws_vhost_unbind_wsi(struct lws *wsi) { struct lws_vhost *vh = wsi->a.vhost; if (!vh) return; lws_context_assert_lock_held(wsi->a.context); lws_vhost_lock(vh); assert(vh->count_bound_wsi > 0); vh->count_bound_wsi--; #if defined(LWS_WITH_TLS_JIT_TRUST) if (!vh->count_bound_wsi && vh->grace_after_unref) lws_tls_jit_trust_vh_start_grace(vh); #endif lwsl_wsi_debug(wsi, "vh %s: count_bound_wsi %d", vh->name, vh->count_bound_wsi); lws_vhost_unlock(vh); if (!vh->count_bound_wsi && vh->being_destroyed) /* * We have closed all wsi that were bound to this vhost * by any pt: nothing can be servicing any wsi belonging * to it any more. * * Finalize the vh destruction... must drop vh lock */ __lws_vhost_destroy2(vh); wsi->a.vhost = NULL; } struct lws * lws_get_network_wsi(struct lws *wsi) { if (!wsi) return NULL; #if defined(LWS_WITH_HTTP2) || defined(LWS_ROLE_MQTT) if (!wsi->mux_substream #if defined(LWS_WITH_CLIENT) && !wsi->client_mux_substream #endif ) return wsi; while (wsi->mux.parent_wsi) wsi = wsi->mux.parent_wsi; #endif return wsi; } const struct lws_protocols * lws_vhost_name_to_protocol(struct lws_vhost *vh, const char *name) { int n; for (n = 0; n < vh->count_protocols; n++) if (vh->protocols[n].name && !strcmp(name, vh->protocols[n].name)) return &vh->protocols[n]; return NULL; } int lws_callback_all_protocol(struct lws_context *context, const struct lws_protocols *protocol, int reason) { struct lws_context_per_thread *pt = &context->pt[0]; unsigned int n, m = context->count_threads; struct lws *wsi; while (m--) { for (n = 0; n < pt->fds_count; n++) { wsi = wsi_from_fd(context, pt->fds[n].fd); if (!wsi) continue; if (wsi->a.protocol == protocol) protocol->callback(wsi, (enum lws_callback_reasons)reason, wsi->user_space, NULL, 0); } pt++; } return 0; } void * lws_evlib_wsi_to_evlib_pt(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; return pt->evlib_pt; } void * lws_evlib_tsi_to_evlib_pt(struct lws_context *cx, int tsi) { struct lws_context_per_thread *pt = &cx->pt[tsi]; return pt->evlib_pt; } int lws_callback_all_protocol_vhost_args(struct lws_vhost *vh, const struct lws_protocols *protocol, int reason, void *argp, size_t len) { struct lws_context *context = vh->context; struct lws_context_per_thread *pt = &context->pt[0]; unsigned int n, m = context->count_threads; struct lws *wsi; while (m--) { for (n = 0; n < pt->fds_count; n++) { wsi = wsi_from_fd(context, pt->fds[n].fd); if (!wsi) continue; if (wsi->a.vhost == vh && (wsi->a.protocol == protocol || !protocol)) wsi->a.protocol->callback(wsi, (enum lws_callback_reasons)reason, wsi->user_space, argp, len); } pt++; } return 0; } int lws_callback_all_protocol_vhost(struct lws_vhost *vh, const struct lws_protocols *protocol, int reason) { return lws_callback_all_protocol_vhost_args(vh, protocol, reason, NULL, 0); } int lws_callback_vhost_protocols(struct lws *wsi, int reason, void *in, size_t len) { int n; for (n = 0; n < wsi->a.vhost->count_protocols; n++) if (wsi->a.vhost->protocols[n].callback(wsi, (enum lws_callback_reasons)reason, NULL, in, len)) return 1; return 0; } #if defined(LWS_WITH_SYS_FAULT_INJECTION) /* * We want to inject a fault that makes it feel like the peer hung up on us, * or we were otherwise cut off. */ void lws_wsi_fault_timedclose_cb(lws_sorted_usec_list_t *s) { struct lws *wsi = lws_container_of(s, struct lws, sul_fault_timedclose); lwsl_wsi_warn(wsi, "force-closing"); lws_wsi_close(wsi, LWS_TO_KILL_ASYNC); } #endif #if defined(LWS_WITH_SYS_FAULT_INJECTION) void lws_wsi_fault_timedclose(struct lws *wsi) { uint64_t u; if (!lws_fi(&wsi->fic, "timedclose")) return; if (lws_fi_range(&wsi->fic, "timedclose_ms", &u)) return; lwsl_wsi_warn(wsi, "injecting close in %ums", (unsigned int)u); lws_sul_schedule(wsi->a.context, wsi->tsi, &wsi->sul_fault_timedclose, lws_wsi_fault_timedclose_cb, (lws_usec_t)(u * 1000ull)); } #endif /* * We need the context lock */ struct lws * __lws_wsi_create_with_role(struct lws_context *context, int tsi, const struct lws_role_ops *ops, lws_log_cx_t *log_cx_template) { size_t s = sizeof(struct lws); struct lws *wsi; assert(tsi >= 0 && tsi < LWS_MAX_SMP); lws_context_assert_lock_held(context); #if defined(LWS_WITH_EVENT_LIBS) s += context->event_loop_ops->evlib_size_wsi; #endif wsi = lws_zalloc(s, __func__); if (!wsi) { lwsl_cx_err(context, "OOM"); return NULL; } if (log_cx_template) wsi->lc.log_cx = log_cx_template; else wsi->lc.log_cx = context->log_cx; #if defined(LWS_WITH_EVENT_LIBS) wsi->evlib_wsi = (uint8_t *)wsi + sizeof(*wsi); #endif wsi->a.context = context; lws_role_transition(wsi, 0, LRS_UNCONNECTED, ops); wsi->pending_timeout = NO_PENDING_TIMEOUT; wsi->a.protocol = NULL; wsi->tsi = (char)tsi; wsi->a.vhost = NULL; wsi->desc.sockfd = LWS_SOCK_INVALID; wsi->position_in_fds_table = LWS_NO_FDS_POS; #if defined(LWS_WITH_SYS_FAULT_INJECTION) lws_xos_init(&wsi->fic.xos, lws_xos(&context->fic.xos)); #endif lws_fi_inherit_copy(&wsi->fic, &context->fic, "wsi", NULL); if (lws_fi(&wsi->fic, "createfail")) { lws_fi_destroy(&wsi->fic); lws_free(wsi); return NULL; } return wsi; } int lws_wsi_inject_to_loop(struct lws_context_per_thread *pt, struct lws *wsi) { int ret = 1; lws_pt_lock(pt, __func__); /* -------------- pt { */ if (pt->context->event_loop_ops->sock_accept) if (pt->context->event_loop_ops->sock_accept(wsi)) goto bail; if (__insert_wsi_socket_into_fds(pt->context, wsi)) goto bail; ret = 0; bail: lws_pt_unlock(pt); return ret; } /* * Take a copy of wsi->desc.sockfd before calling this, then close it * afterwards */ int lws_wsi_extract_from_loop(struct lws *wsi) { if (lws_socket_is_valid(wsi->desc.sockfd)) __remove_wsi_socket_from_fds(wsi); if (!wsi->a.context->event_loop_ops->destroy_wsi && wsi->a.context->event_loop_ops->wsi_logical_close) { wsi->a.context->event_loop_ops->wsi_logical_close(wsi); return 1; /* close / destroy continues async */ } if (wsi->a.context->event_loop_ops->destroy_wsi) wsi->a.context->event_loop_ops->destroy_wsi(wsi); return 0; /* he is destroyed */ } int lws_callback_vhost_protocols_vhost(struct lws_vhost *vh, int reason, void *in, size_t len) { int n; struct lws *wsi = lws_zalloc(sizeof(*wsi), "fake wsi"); if (!wsi) return 1; wsi->a.context = vh->context; lws_vhost_bind_wsi(vh, wsi); for (n = 0; n < wsi->a.vhost->count_protocols; n++) { wsi->a.protocol = &vh->protocols[n]; if (wsi->a.protocol->callback(wsi, (enum lws_callback_reasons)reason, NULL, in, len)) { lws_free(wsi); return 1; } } lws_free(wsi); return 0; } int lws_rx_flow_control(struct lws *wsi, int _enable) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; int en = _enable; // h2 ignores rx flow control atm if (lwsi_role_h2(wsi) || wsi->mux_substream || lwsi_role_h2_ENCAPSULATION(wsi)) return 0; // !!! lwsl_wsi_info(wsi, "0x%x", _enable); if (!(_enable & LWS_RXFLOW_REASON_APPLIES)) { /* * convert user bool style to bitmap style... in user simple * bool style _enable = 0 = flow control it, = 1 = allow rx */ en = LWS_RXFLOW_REASON_APPLIES | LWS_RXFLOW_REASON_USER_BOOL; if (_enable & 1) en |= LWS_RXFLOW_REASON_APPLIES_ENABLE_BIT; } lws_pt_lock(pt, __func__); /* any bit set in rxflow_bitmap DISABLEs rxflow control */ if (en & LWS_RXFLOW_REASON_APPLIES_ENABLE_BIT) wsi->rxflow_bitmap = (uint8_t)(wsi->rxflow_bitmap & ~(en & 0xff)); else wsi->rxflow_bitmap = (uint8_t)(wsi->rxflow_bitmap | (en & 0xff)); if ((LWS_RXFLOW_PENDING_CHANGE | (!wsi->rxflow_bitmap)) == wsi->rxflow_change_to) goto skip; wsi->rxflow_change_to = LWS_RXFLOW_PENDING_CHANGE | (!wsi->rxflow_bitmap); lwsl_wsi_info(wsi, "bitmap 0x%x: en 0x%x, ch 0x%x", wsi->rxflow_bitmap, en, wsi->rxflow_change_to); if (_enable & LWS_RXFLOW_REASON_FLAG_PROCESS_NOW || !wsi->rxflow_will_be_applied) { en = __lws_rx_flow_control(wsi); lws_pt_unlock(pt); return en; } skip: lws_pt_unlock(pt); return 0; } void lws_rx_flow_allow_all_protocol(const struct lws_context *context, const struct lws_protocols *protocol) { const struct lws_context_per_thread *pt = &context->pt[0]; struct lws *wsi; unsigned int n, m = context->count_threads; while (m--) { for (n = 0; n < pt->fds_count; n++) { wsi = wsi_from_fd(context, pt->fds[n].fd); if (!wsi) continue; if (wsi->a.protocol == protocol) lws_rx_flow_control(wsi, LWS_RXFLOW_ALLOW); } pt++; } } int user_callback_handle_rxflow(lws_callback_function callback_function, struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { int n; wsi->rxflow_will_be_applied = 1; n = callback_function(wsi, reason, user, in, len); wsi->rxflow_will_be_applied = 0; if (!n) n = __lws_rx_flow_control(wsi); return n; } int __lws_rx_flow_control(struct lws *wsi) { struct lws *wsic = wsi->child_list; // h2 ignores rx flow control atm if (lwsi_role_h2(wsi) || wsi->mux_substream || lwsi_role_h2_ENCAPSULATION(wsi)) return 0; // !!! /* if he has children, do those if they were changed */ while (wsic) { if (wsic->rxflow_change_to & LWS_RXFLOW_PENDING_CHANGE) __lws_rx_flow_control(wsic); wsic = wsic->sibling_list; } /* there is no pending change */ if (!(wsi->rxflow_change_to & LWS_RXFLOW_PENDING_CHANGE)) return 0; /* stuff is still buffered, not ready to really accept new input */ if (lws_buflist_next_segment_len(&wsi->buflist, NULL)) { /* get ourselves called back to deal with stashed buffer */ lws_callback_on_writable(wsi); // return 0; } /* now the pending is cleared, we can change rxflow state */ wsi->rxflow_change_to &= (~LWS_RXFLOW_PENDING_CHANGE) & 3; lwsl_wsi_info(wsi, "rxflow: change_to %d", wsi->rxflow_change_to & LWS_RXFLOW_ALLOW); /* adjust the pollfd for this wsi */ if (wsi->rxflow_change_to & LWS_RXFLOW_ALLOW) { lwsl_wsi_info(wsi, "reenable POLLIN"); // lws_buflist_describe(&wsi->buflist, NULL, __func__); if (__lws_change_pollfd(wsi, 0, LWS_POLLIN)) { lwsl_wsi_info(wsi, "fail"); return -1; } } else if (__lws_change_pollfd(wsi, LWS_POLLIN, 0)) return -1; return 0; } const struct lws_protocols * lws_get_protocol(struct lws *wsi) { return wsi->a.protocol; } int lws_ensure_user_space(struct lws *wsi) { if (!wsi->a.protocol) return 0; /* allocate the per-connection user memory (if any) */ if (wsi->a.protocol->per_session_data_size && !wsi->user_space) { wsi->user_space = lws_zalloc( wsi->a.protocol->per_session_data_size, "user space"); if (wsi->user_space == NULL) { lwsl_wsi_err(wsi, "OOM"); return 1; } } else lwsl_wsi_debug(wsi, "protocol pss %lu, user_space=%p", (long)wsi->a.protocol->per_session_data_size, wsi->user_space); return 0; } void * lws_adjust_protocol_psds(struct lws *wsi, size_t new_size) { ((struct lws_protocols *)lws_get_protocol(wsi))->per_session_data_size = new_size; if (lws_ensure_user_space(wsi)) return NULL; return wsi->user_space; } int lws_get_tsi(struct lws *wsi) { return (int)wsi->tsi; } int lws_is_ssl(struct lws *wsi) { #if defined(LWS_WITH_TLS) return wsi->tls.use_ssl & LCCSCF_USE_SSL; #else (void)wsi; return 0; #endif } #if defined(LWS_WITH_TLS) && !defined(LWS_WITH_MBEDTLS) lws_tls_conn* lws_get_ssl(struct lws *wsi) { return wsi->tls.ssl; } #endif int lws_has_buffered_out(struct lws *wsi) { if (wsi->buflist_out) return 1; #if defined(LWS_ROLE_H2) { struct lws *nwsi = lws_get_network_wsi(wsi); if (nwsi->buflist_out) return 1; } #endif return 0; } int lws_partial_buffered(struct lws *wsi) { return lws_has_buffered_out(wsi); } lws_fileofs_t lws_get_peer_write_allowance(struct lws *wsi) { if (!lws_rops_fidx(wsi->role_ops, LWS_ROPS_tx_credit)) return -1; return lws_rops_func_fidx(wsi->role_ops, LWS_ROPS_tx_credit). tx_credit(wsi, LWSTXCR_US_TO_PEER, 0); } void lws_role_transition(struct lws *wsi, enum lwsi_role role, enum lwsi_state state, const struct lws_role_ops *ops) { #if (_LWS_ENABLED_LOGS & LLL_DEBUG) const char *name = "(unset)"; #endif wsi->wsistate = (unsigned int)role | (unsigned int)state; if (ops) wsi->role_ops = ops; #if (_LWS_ENABLED_LOGS & LLL_DEBUG) if (wsi->role_ops) name = wsi->role_ops->name; lwsl_wsi_debug(wsi, "wsistate 0x%lx, ops %s", (unsigned long)wsi->wsistate, name); #endif } int lws_parse_uri(char *p, const char **prot, const char **ads, int *port, const char **path) { const char *end; char unix_skt = 0; /* cut up the location into address, port and path */ *prot = p; while (*p && (*p != ':' || p[1] != '/' || p[2] != '/')) p++; if (!*p) { end = p; p = (char *)*prot; *prot = end; } else { *p = '\0'; p += 3; } if (*p == '+') /* unix skt */ unix_skt = 1; *ads = p; if (!strcmp(*prot, "http") || !strcmp(*prot, "ws")) *port = 80; else if (!strcmp(*prot, "https") || !strcmp(*prot, "wss")) *port = 443; if (*p == '[') { ++(*ads); while (*p && *p != ']') p++; if (*p) *p++ = '\0'; } else while (*p && *p != ':' && (unix_skt || *p != '/')) p++; if (*p == ':') { *p++ = '\0'; *port = atoi(p); while (*p && *p != '/') p++; } *path = "/"; if (*p) { *p++ = '\0'; if (*p) *path = p; } return 0; } /* ... */ int lws_get_urlarg_by_name_safe(struct lws *wsi, const char *name, char *buf, int len) { int n = 0, fraglen, sl = (int)strlen(name); do { fraglen = lws_hdr_copy_fragment(wsi, buf, len, WSI_TOKEN_HTTP_URI_ARGS, n); if (fraglen < 0) break; if (fraglen + 1 < len && fraglen >= sl && !strncmp(buf, name, (size_t)sl)) { /* * If he left off the trailing =, trim it from the * result */ if (name[sl - 1] != '=' && sl < fraglen && buf[sl] == '=') sl++; memmove(buf, buf + sl, (size_t)(fraglen - sl)); buf[fraglen - sl] = '\0'; return fraglen - sl; } n++; } while (1); return -1; } const char * lws_get_urlarg_by_name(struct lws *wsi, const char *name, char *buf, int len) { int n = lws_get_urlarg_by_name_safe(wsi, name, buf, len); return n < 0 ? NULL : buf; } #if defined(LWS_WITHOUT_EXTENSIONS) /* we need to provide dummy callbacks for internal exts * so user code runs when faced with a lib compiled with * extensions disabled. */ int lws_extension_callback_pm_deflate(struct lws_context *context, const struct lws_extension *ext, struct lws *wsi, enum lws_extension_callback_reasons reason, void *user, void *in, size_t len) { (void)context; (void)ext; (void)wsi; (void)reason; (void)user; (void)in; (void)len; return 0; } int lws_set_extension_option(struct lws *wsi, const char *ext_name, const char *opt_name, const char *opt_val) { return -1; } #endif int lws_is_cgi(struct lws *wsi) { #ifdef LWS_WITH_CGI return !!wsi->http.cgi; #else return 0; #endif } const struct lws_protocol_vhost_options * lws_pvo_search(const struct lws_protocol_vhost_options *pvo, const char *name) { while (pvo) { if (!strcmp(pvo->name, name)) break; pvo = pvo->next; } return pvo; } int lws_pvo_get_str(void *in, const char *name, const char **result) { const struct lws_protocol_vhost_options *pv = lws_pvo_search((const struct lws_protocol_vhost_options *)in, name); if (!pv) return 1; *result = (const char *)pv->value; return 0; } int lws_broadcast(struct lws_context_per_thread *pt, int reason, void *in, size_t len) { struct lws_vhost *v = pt->context->vhost_list; lws_fakewsi_def_plwsa(pt); int n, ret = 0; lws_fakewsi_prep_plwsa_ctx(pt->context); #if !defined(LWS_PLAT_FREERTOS) && LWS_MAX_SMP > 1 ((struct lws *)plwsa)->tsi = (char)(int)(pt - &pt->context->pt[0]); #endif while (v) { const struct lws_protocols *p = v->protocols; plwsa->vhost = v; /* not a real bound wsi */ for (n = 0; n < v->count_protocols; n++) { plwsa->protocol = p; if (p->callback && p->callback((struct lws *)plwsa, (enum lws_callback_reasons)reason, NULL, in, len)) ret |= 1; p++; } v = v->vhost_next; } return ret; } void * lws_wsi_user(struct lws *wsi) { return wsi->user_space; } int lws_wsi_tsi(struct lws *wsi) { return wsi->tsi; } void lws_set_wsi_user(struct lws *wsi, void *data) { if (!wsi->user_space_externally_allocated && wsi->user_space) lws_free(wsi->user_space); wsi->user_space_externally_allocated = 1; wsi->user_space = data; } struct lws * lws_get_parent(const struct lws *wsi) { return wsi->parent; } struct lws * lws_get_child(const struct lws *wsi) { return wsi->child_list; } void * lws_get_opaque_parent_data(const struct lws *wsi) { return wsi->opaque_parent_data; } void lws_set_opaque_parent_data(struct lws *wsi, void *data) { wsi->opaque_parent_data = data; } void * lws_get_opaque_user_data(const struct lws *wsi) { return wsi->a.opaque_user_data; } void lws_set_opaque_user_data(struct lws *wsi, void *data) { wsi->a.opaque_user_data = data; } int lws_get_child_pending_on_writable(const struct lws *wsi) { return wsi->parent_pending_cb_on_writable; } void lws_clear_child_pending_on_writable(struct lws *wsi) { wsi->parent_pending_cb_on_writable = 0; } const char * lws_get_vhost_name(struct lws_vhost *vhost) { return vhost->name; } int lws_get_vhost_port(struct lws_vhost *vhost) { return vhost->listen_port; } void * lws_get_vhost_user(struct lws_vhost *vhost) { return vhost->user; } const char * lws_get_vhost_iface(struct lws_vhost *vhost) { return vhost->iface; } lws_sockfd_type lws_get_socket_fd(struct lws *wsi) { if (!wsi) return -1; return wsi->desc.sockfd; } struct lws_vhost * lws_vhost_get(struct lws *wsi) { return wsi->a.vhost; } struct lws_vhost * lws_get_vhost(struct lws *wsi) { return wsi->a.vhost; } const struct lws_protocols * lws_protocol_get(struct lws *wsi) { return wsi->a.protocol; } #if defined(LWS_WITH_UDP) const struct lws_udp * lws_get_udp(const struct lws *wsi) { return wsi->udp; } #endif struct lws_context * lws_get_context(const struct lws *wsi) { return wsi->a.context; } struct lws_log_cx * lwsl_wsi_get_cx(struct lws *wsi) { if (!wsi) return NULL; return wsi->lc.log_cx; } #if defined(LWS_WITH_CLIENT) int _lws_generic_transaction_completed_active_conn(struct lws **_wsi, char take_vh_lock) { struct lws *wnew, *wsi = *_wsi; /* * Are we constitutionally capable of having a queue, ie, we are on * the "active client connections" list? * * If not, that's it for us. */ if (lws_dll2_is_detached(&wsi->dll_cli_active_conns)) return 0; /* no new transaction */ /* * With h1 queuing, the original "active client" moves his attributes * like fd, ssl, queue and active client list entry to the next guy in * the queue before closing... it's because the user code knows the * individual wsi and the action must take place in the correct wsi * context. Note this means we don't truly pipeline headers. * * Trying to keep the original "active client" in place to do the work * of the wsi breaks down when dealing with queued POSTs otherwise; it's * also competing with the real mux child arrangements and complicating * the code. * * For that reason, see if we have any queued child now... */ if (!wsi->dll2_cli_txn_queue_owner.head) { /* * Nothing pipelined... we should hang around a bit * in case something turns up... otherwise we'll close */ lwsl_wsi_info(wsi, "nothing pipelined waiting"); lwsi_set_state(wsi, LRS_IDLING); lws_set_timeout(wsi, PENDING_TIMEOUT_CLIENT_CONN_IDLE, wsi->keep_warm_secs); return 0; /* no new transaction right now */ } /* * We have a queued child wsi we should bequeath our assets to, before * closing ourself */ if (take_vh_lock) lws_vhost_lock(wsi->a.vhost); wnew = lws_container_of(wsi->dll2_cli_txn_queue_owner.head, struct lws, dll2_cli_txn_queue); assert(wsi != wnew); lws_dll2_remove(&wnew->dll2_cli_txn_queue); assert(lws_socket_is_valid(wsi->desc.sockfd)); __lws_change_pollfd(wsi, LWS_POLLOUT | LWS_POLLIN, 0); /* copy the fd */ wnew->desc = wsi->desc; assert(lws_socket_is_valid(wnew->desc.sockfd)); /* disconnect the fd from association with old wsi */ if (__remove_wsi_socket_from_fds(wsi)) return -1; sanity_assert_no_wsi_traces(wsi->a.context, wsi); sanity_assert_no_sockfd_traces(wsi->a.context, wsi->desc.sockfd); wsi->desc.sockfd = LWS_SOCK_INVALID; __lws_wsi_remove_from_sul(wsi); /* * ... we're doing some magic here in terms of handing off the socket * that has been active to a wsi that has not yet itself been active... * depending on the event lib we may need to give a magic spark to the * new guy and snuff out the old guy's magic spark at that level as well */ #if defined(LWS_WITH_EVENT_LIBS) if (wsi->a.context->event_loop_ops->destroy_wsi) wsi->a.context->event_loop_ops->destroy_wsi(wsi); if (wsi->a.context->event_loop_ops->sock_accept) wsi->a.context->event_loop_ops->sock_accept(wnew); #endif /* point the fd table entry to new guy */ assert(lws_socket_is_valid(wnew->desc.sockfd)); if (__insert_wsi_socket_into_fds(wsi->a.context, wnew)) return -1; #if defined(LWS_WITH_TLS) /* pass on the tls */ wnew->tls = wsi->tls; wsi->tls.client_bio = NULL; wsi->tls.ssl = NULL; wsi->tls.use_ssl = 0; #endif /* take over his copy of his endpoint as an active connection */ if (!wnew->cli_hostname_copy && wsi->cli_hostname_copy) { wnew->cli_hostname_copy = wsi->cli_hostname_copy; wsi->cli_hostname_copy = NULL; } wnew->keep_warm_secs = wsi->keep_warm_secs; /* * selected queued guy now replaces the original leader on the * active client conn list */ lws_dll2_remove(&wsi->dll_cli_active_conns); lws_dll2_add_tail(&wnew->dll_cli_active_conns, &wsi->a.vhost->dll_cli_active_conns_owner); /* move any queued guys to queue on new active conn */ lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, wsi->dll2_cli_txn_queue_owner.head) { struct lws *ww = lws_container_of(d, struct lws, dll2_cli_txn_queue); lws_dll2_remove(&ww->dll2_cli_txn_queue); lws_dll2_add_tail(&ww->dll2_cli_txn_queue, &wnew->dll2_cli_txn_queue_owner); } lws_end_foreach_dll_safe(d, d1); if (take_vh_lock) lws_vhost_unlock(wsi->a.vhost); /* * The original leader who passed on all his powers already can die... * in the call stack above us there are guys who still want to touch * him, so have him die next time around the event loop, not now. */ wsi->already_did_cce = 1; /* so the close doesn't trigger a CCE */ lws_set_timeout(wsi, 1, LWS_TO_KILL_ASYNC); /* after the first one, they can only be coming from the queue */ wnew->transaction_from_pipeline_queue = 1; lwsl_wsi_notice(wsi, " pipeline queue passed -> %s", lws_wsi_tag(wnew)); *_wsi = wnew; /* inform caller we swapped */ return 1; /* new transaction */ } #endif int LWS_WARN_UNUSED_RESULT lws_raw_transaction_completed(struct lws *wsi) { if (lws_has_buffered_out(wsi)) { /* * ...so he tried to send something large, but it went out * as a partial, but he immediately called us to say he wants * to close the connection. * * Defer the close until the last part of the partial is sent. * */ lwsl_wsi_debug(wsi, "deferring due to partial"); wsi->close_when_buffered_out_drained = 1; lws_callback_on_writable(wsi); return 0; } return -1; } int lws_bind_protocol(struct lws *wsi, const struct lws_protocols *p, const char *reason) { // if (wsi->a.protocol == p) // return 0; const struct lws_protocols *vp = wsi->a.vhost->protocols, *vpo; if (wsi->a.protocol && wsi->protocol_bind_balance) { wsi->a.protocol->callback(wsi, wsi->role_ops->protocol_unbind_cb[!!lwsi_role_server(wsi)], wsi->user_space, (void *)reason, 0); wsi->protocol_bind_balance = 0; } if (!wsi->user_space_externally_allocated) lws_free_set_NULL(wsi->user_space); lws_same_vh_protocol_remove(wsi); wsi->a.protocol = p; if (!p) return 0; if (lws_ensure_user_space(wsi)) return 1; if (p > vp && p < &vp[wsi->a.vhost->count_protocols]) lws_same_vh_protocol_insert(wsi, (int)(p - vp)); else { int n = wsi->a.vhost->count_protocols; int hit = 0; vpo = vp; while (n--) { if (p->name && vp->name && !strcmp(p->name, vp->name)) { hit = 1; lws_same_vh_protocol_insert(wsi, (int)(vp - vpo)); break; } vp++; } if (!hit) lwsl_err("%s: %p is not in vhost '%s' protocols list\n", __func__, p, wsi->a.vhost->name); } if (wsi->a.protocol->callback(wsi, wsi->role_ops->protocol_bind_cb[ !!lwsi_role_server(wsi)], wsi->user_space, NULL, 0)) return 1; wsi->protocol_bind_balance = 1; return 0; } void lws_http_close_immortal(struct lws *wsi) { struct lws *nwsi; if (!wsi->mux_substream) return; assert(wsi->mux_stream_immortal); wsi->mux_stream_immortal = 0; nwsi = lws_get_network_wsi(wsi); lwsl_wsi_debug(wsi, "%s (%d)", lws_wsi_tag(nwsi), nwsi->immortal_substream_count); assert(nwsi->immortal_substream_count); nwsi->immortal_substream_count--; if (!nwsi->immortal_substream_count) /* * since we closed the only immortal stream on this nwsi, we * need to reapply a normal timeout regime to the nwsi */ lws_set_timeout(nwsi, PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE, wsi->a.vhost->keepalive_timeout ? wsi->a.vhost->keepalive_timeout : 31); } void lws_mux_mark_immortal(struct lws *wsi) { struct lws *nwsi; lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); if (!wsi->mux_substream #if defined(LWS_WITH_CLIENT) && !wsi->client_mux_substream #endif ) { // lwsl_wsi_err(wsi, "not mux substream"); return; } if (wsi->mux_stream_immortal) /* only need to handle it once per child wsi */ return; nwsi = lws_get_network_wsi(wsi); if (!nwsi) return; lwsl_wsi_debug(wsi, "%s (%d)\n", lws_wsi_tag(nwsi), nwsi->immortal_substream_count); wsi->mux_stream_immortal = 1; assert(nwsi->immortal_substream_count < 255); /* largest count */ nwsi->immortal_substream_count++; if (nwsi->immortal_substream_count == 1) lws_set_timeout(nwsi, NO_PENDING_TIMEOUT, 0); } int lws_http_mark_sse(struct lws *wsi) { if (!wsi) return 0; lws_http_headers_detach(wsi); lws_mux_mark_immortal(wsi); if (wsi->mux_substream) wsi->h2_stream_carries_sse = 1; return 0; } #if defined(LWS_WITH_CLIENT) const char * lws_wsi_client_stash_item(struct lws *wsi, int stash_idx, int hdr_idx) { /* try the generic client stash */ if (wsi->stash) return wsi->stash->cis[stash_idx]; #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) /* if not, use the ah stash if applicable */ return lws_hdr_simple_ptr(wsi, (enum lws_token_indexes)hdr_idx); #else return NULL; #endif } #endif #if defined(LWS_ROLE_H2) || defined(LWS_ROLE_MQTT) void lws_wsi_mux_insert(struct lws *wsi, struct lws *parent_wsi, unsigned int sid) { lwsl_wsi_info(wsi, "par %s: assign sid %d (curr %d)", lws_wsi_tag(parent_wsi), sid, wsi->mux.my_sid); if (wsi->mux.my_sid && wsi->mux.my_sid != (unsigned int)sid) assert(0); wsi->mux.my_sid = sid; wsi->mux.parent_wsi = parent_wsi; wsi->role_ops = parent_wsi->role_ops; /* new guy's sibling is whoever was the first child before */ wsi->mux.sibling_list = parent_wsi->mux.child_list; /* first child is now the new guy */ parent_wsi->mux.child_list = wsi; parent_wsi->mux.child_count++; } struct lws * lws_wsi_mux_from_id(struct lws *parent_wsi, unsigned int sid) { lws_start_foreach_ll(struct lws *, wsi, parent_wsi->mux.child_list) { if (wsi->mux.my_sid == sid) return wsi; } lws_end_foreach_ll(wsi, mux.sibling_list); return NULL; } void lws_wsi_mux_dump_children(struct lws *wsi) { #if defined(_DEBUG) if (!wsi->mux.parent_wsi || !lwsl_visible(LLL_INFO)) return; lws_start_foreach_llp(struct lws **, w, wsi->mux.parent_wsi->mux.child_list) { lwsl_wsi_info(wsi, " \\---- child %s %s\n", (*w)->role_ops ? (*w)->role_ops->name : "?", lws_wsi_tag(*w)); assert(*w != (*w)->mux.sibling_list); } lws_end_foreach_llp(w, mux.sibling_list); #endif } void lws_wsi_mux_close_children(struct lws *wsi, int reason) { struct lws *wsi2; struct lws **w; if (!wsi->mux.child_list) return; w = &wsi->mux.child_list; while (*w) { lwsl_wsi_info((*w), " closing child"); /* disconnect from siblings */ wsi2 = (*w)->mux.sibling_list; assert (wsi2 != *w); (*w)->mux.sibling_list = NULL; (*w)->socket_is_permanently_unusable = 1; __lws_close_free_wsi(*w, (enum lws_close_status)reason, "mux child recurse"); *w = wsi2; } } void lws_wsi_mux_sibling_disconnect(struct lws *wsi) { struct lws *wsi2; lws_start_foreach_llp(struct lws **, w, wsi->mux.parent_wsi->mux.child_list) { /* disconnect from siblings */ if (*w == wsi) { wsi2 = (*w)->mux.sibling_list; (*w)->mux.sibling_list = NULL; *w = wsi2; lwsl_wsi_debug(wsi, " disentangled from sibling %s", lws_wsi_tag(wsi2)); break; } } lws_end_foreach_llp(w, mux.sibling_list); wsi->mux.parent_wsi->mux.child_count--; wsi->mux.parent_wsi = NULL; } void lws_wsi_mux_dump_waiting_children(struct lws *wsi) { #if defined(_DEBUG) lwsl_info("%s: %s: children waiting for POLLOUT service:\n", __func__, lws_wsi_tag(wsi)); wsi = wsi->mux.child_list; while (wsi) { lwsl_wsi_info(wsi, " %c sid %u: 0x%x %s %s", wsi->mux.requested_POLLOUT ? '*' : ' ', wsi->mux.my_sid, lwsi_state(wsi), wsi->role_ops->name, wsi->a.protocol ? wsi->a.protocol->name : "noprotocol"); wsi = wsi->mux.sibling_list; } #endif } int lws_wsi_mux_mark_parents_needing_writeable(struct lws *wsi) { struct lws /* *network_wsi = lws_get_network_wsi(wsi), */ *wsi2; //int already = network_wsi->mux.requested_POLLOUT; /* mark everybody above him as requesting pollout */ wsi2 = wsi; while (wsi2) { wsi2->mux.requested_POLLOUT = 1; lwsl_wsi_info(wsi2, "sid %u, pending writable", wsi2->mux.my_sid); wsi2 = wsi2->mux.parent_wsi; } return 0; // already; } struct lws * lws_wsi_mux_move_child_to_tail(struct lws **wsi2) { struct lws *w = *wsi2; while (w) { if (!w->mux.sibling_list) { /* w is the current last */ lwsl_wsi_debug(w, "*wsi2 = %s\n", lws_wsi_tag(*wsi2)); if (w == *wsi2) /* we are already last */ break; /* last points to us as new last */ w->mux.sibling_list = *wsi2; /* guy pointing to us until now points to * our old next */ *wsi2 = (*wsi2)->mux.sibling_list; /* we point to nothing because we are last */ w->mux.sibling_list->mux.sibling_list = NULL; /* w becomes us */ w = w->mux.sibling_list; break; } w = w->mux.sibling_list; } /* clear the waiting for POLLOUT on the guy that was chosen */ if (w) w->mux.requested_POLLOUT = 0; return w; } int lws_wsi_mux_action_pending_writeable_reqs(struct lws *wsi) { struct lws *w = wsi->mux.child_list; while (w) { if (w->mux.requested_POLLOUT) { if (lws_change_pollfd(wsi, 0, LWS_POLLOUT)) return -1; return 0; } w = w->mux.sibling_list; } if (lws_change_pollfd(wsi, LWS_POLLOUT, 0)) return -1; return 0; } int lws_wsi_txc_check_skint(struct lws_tx_credit *txc, int32_t tx_cr) { if (txc->tx_cr <= 0) { /* * If other side is not able to cope with us sending any DATA * so no matter if we have POLLOUT on our side if it's DATA we * want to send. */ if (!txc->skint) lwsl_info("%s: %p: skint (%d)\n", __func__, txc, (int)txc->tx_cr); txc->skint = 1; return 1; } if (txc->skint) lwsl_info("%s: %p: unskint (%d)\n", __func__, txc, (int)txc->tx_cr); txc->skint = 0; return 0; } #if defined(_DEBUG) void lws_wsi_txc_describe(struct lws_tx_credit *txc, const char *at, uint32_t sid) { lwsl_info("%s: %p: %s: sid %d: %speer-to-us: %d, us-to-peer: %d\n", __func__, txc, at, (int)sid, txc->skint ? "SKINT, " : "", (int)txc->peer_tx_cr_est, (int)txc->tx_cr); } #endif int lws_wsi_tx_credit(struct lws *wsi, char peer_to_us, int add) { if (wsi->role_ops && lws_rops_fidx(wsi->role_ops, LWS_ROPS_tx_credit)) return lws_rops_func_fidx(wsi->role_ops, LWS_ROPS_tx_credit). tx_credit(wsi, peer_to_us, add); return 0; } /* * Let the protocol know about incoming tx credit window updates if it's * managing the flow control manually (it may want to proxy this information) */ int lws_wsi_txc_report_manual_txcr_in(struct lws *wsi, int32_t bump) { if (!wsi->txc.manual) /* * If we don't care about managing it manually, no need to * report it */ return 0; return user_callback_handle_rxflow(wsi->a.protocol->callback, wsi, LWS_CALLBACK_WSI_TX_CREDIT_GET, wsi->user_space, NULL, (size_t)bump); } #if defined(LWS_WITH_CLIENT) int lws_wsi_mux_apply_queue(struct lws *wsi) { /* we have a transaction queue that wants to pipeline */ lws_context_lock(wsi->a.context, __func__); /* -------------- cx { */ lws_vhost_lock(wsi->a.vhost); lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, wsi->dll2_cli_txn_queue_owner.head) { struct lws *w = lws_container_of(d, struct lws, dll2_cli_txn_queue); #if defined(LWS_ROLE_H2) if (lwsi_role_http(wsi) && lwsi_state(w) == LRS_H2_WAITING_TO_SEND_HEADERS) { lwsl_wsi_info(w, "cli pipeq to be h2"); lwsi_set_state(w, LRS_H1C_ISSUE_HANDSHAKE2); /* remove ourselves from client queue */ lws_dll2_remove(&w->dll2_cli_txn_queue); /* attach ourselves as an h2 stream */ lws_wsi_h2_adopt(wsi, w); } #endif #if defined(LWS_ROLE_MQTT) if (lwsi_role_mqtt(wsi) && lwsi_state(wsi) == LRS_ESTABLISHED) { lwsl_wsi_info(w, "cli pipeq to be mqtt\n"); /* remove ourselves from client queue */ lws_dll2_remove(&w->dll2_cli_txn_queue); /* attach ourselves as an h2 stream */ lws_wsi_mqtt_adopt(wsi, w); } #endif } lws_end_foreach_dll_safe(d, d1); lws_vhost_unlock(wsi->a.vhost); lws_context_unlock(wsi->a.context); /* } cx -------------- */ return 0; } #endif #endif libwebsockets-4.3.5/lib/core/000077500000000000000000000000001476025525100160705ustar00rootroot00000000000000libwebsockets-4.3.5/lib/core/CMakeLists.txt000066400000000000000000000026541476025525100206370ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # include_directories(.) list(APPEND SOURCES core/alloc.c core/buflist.c core/context.c core/lws_dll2.c core/lws_map.c core/libwebsockets.c core/logs.c ) if (LWS_WITH_FILE_OPS) list(APPEND SOURCES core/vfs.c) endif() exports_to_parent_scope() libwebsockets-4.3.5/lib/core/alloc.c000066400000000000000000000077221476025525100173360ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #if defined(LWS_HAVE_MALLOC_USABLE_SIZE) #include /* the heap is processwide */ static size_t allocated; #endif #if defined(LWS_PLAT_OPTEE) #define TEE_USER_MEM_HINT_NO_FILL_ZERO 0x80000000 #if defined (LWS_WITH_NETWORK) /* normal TA apis */ void *__attribute__((weak)) TEE_Malloc(uint32_t size, uint32_t hint) { return NULL; } void *__attribute__((weak)) TEE_Realloc(void *buffer, uint32_t newSize) { return NULL; } void __attribute__((weak)) TEE_Free(void *buffer) { } #else /* in-OP-TEE core apis */ void * TEE_Malloc(uint32_t size, uint32_t hint) { return malloc(size); } void * TEE_Realloc(void *buffer, uint32_t newSize) { return realloc(buffer, newSize); } void TEE_Free(void *buffer) { free(buffer); } #endif void *lws_realloc(void *ptr, size_t size, const char *reason) { return TEE_Realloc(ptr, size); } void *lws_malloc(size_t size, const char *reason) { return TEE_Malloc(size, TEE_USER_MEM_HINT_NO_FILL_ZERO); } void lws_free(void *p) { TEE_Free(p); } void *lws_zalloc(size_t size, const char *reason) { void *ptr = TEE_Malloc(size, TEE_USER_MEM_HINT_NO_FILL_ZERO); if (ptr) memset(ptr, 0, size); return ptr; } void lws_set_allocator(void *(*cb)(void *ptr, size_t size, const char *reason)) { (void)cb; } #else static void * _realloc(void *ptr, size_t size, const char *reason) { void *v; if (size) { #if defined(LWS_PLAT_FREERTOS) lwsl_debug("%s: size %lu: %s (free heap %d)\n", __func__, #if defined(LWS_AMAZON_RTOS) (unsigned long)size, reason, (unsigned int)xPortGetFreeHeapSize() - (int)size); #else (unsigned long)size, reason, (unsigned int)esp_get_free_heap_size() - (int)size); #endif #else lwsl_debug("%s: size %lu: %s\n", __func__, (unsigned long)size, reason); #endif #if defined(LWS_HAVE_MALLOC_USABLE_SIZE) if (ptr) allocated -= malloc_usable_size(ptr); #endif #if defined(LWS_PLAT_OPTEE) v = (void *)TEE_Realloc(ptr, size); #else v = (void *)realloc(ptr, size); #endif #if defined(LWS_HAVE_MALLOC_USABLE_SIZE) allocated += malloc_usable_size(v); #endif return v; } if (ptr) { #if defined(LWS_HAVE_MALLOC_USABLE_SIZE) allocated -= malloc_usable_size(ptr); #endif free(ptr); } return NULL; } void *(*_lws_realloc)(void *ptr, size_t size, const char *reason) = _realloc; void *lws_realloc(void *ptr, size_t size, const char *reason) { return _lws_realloc(ptr, size, reason); } void *lws_zalloc(size_t size, const char *reason) { void *ptr = _lws_realloc(NULL, size, reason); if (ptr) memset(ptr, 0, size); return ptr; } void lws_set_allocator(void *(*cb)(void *ptr, size_t size, const char *reason)) { _lws_realloc = cb; } size_t lws_get_allocated_heap(void) { #if defined(LWS_HAVE_MALLOC_USABLE_SIZE) return allocated; #else return 0; #endif } #endif libwebsockets-4.3.5/lib/core/buflist.c000066400000000000000000000133411476025525100177060ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #ifdef LWS_HAVE_SYS_TYPES_H #include #endif /* lws_buflist */ int lws_buflist_append_segment(struct lws_buflist **head, const uint8_t *buf, size_t len) { struct lws_buflist *nbuf; int first = !*head; void *p = *head; int sanity = 1024; assert(buf); assert(len); /* append at the tail */ while (*head) { if (!--sanity) { lwsl_err("%s: buflist reached sanity limit\n", __func__); return -1; } if (*head == (*head)->next) { lwsl_err("%s: corrupt list points to self\n", __func__); return -1; } head = &((*head)->next); } (void)p; lwsl_info("%s: len %u first %d %p\n", __func__, (unsigned int)len, first, p); nbuf = (struct lws_buflist *)lws_malloc(sizeof(struct lws_buflist) + len + LWS_PRE + 1, __func__); if (!nbuf) { lwsl_err("%s: OOM\n", __func__); return -1; } nbuf->len = len; nbuf->pos = 0; nbuf->next = NULL; /* whoever consumes this might need LWS_PRE from the start... */ p = (uint8_t *)nbuf + sizeof(*nbuf) + LWS_PRE; memcpy(p, buf, len); *head = nbuf; return first; /* returns 1 if first segment just created */ } static int lws_buflist_destroy_segment(struct lws_buflist **head) { struct lws_buflist *old = *head; assert(*head); *head = old->next; old->next = NULL; old->pos = old->len = 0; lws_free(old); return !*head; /* returns 1 if last segment just destroyed */ } void lws_buflist_destroy_all_segments(struct lws_buflist **head) { struct lws_buflist *p = *head, *p1; while (p) { p1 = p->next; p->next = NULL; lws_free(p); p = p1; } *head = NULL; } size_t lws_buflist_next_segment_len(struct lws_buflist **head, uint8_t **buf) { struct lws_buflist *b = (*head); if (buf) *buf = NULL; if (!b) return 0; /* there is no next segment len */ if (!b->len && b->next) if (lws_buflist_destroy_segment(head)) return 0; b = (*head); if (!b) return 0; /* there is no next segment len */ assert(b->pos < b->len); if (buf) *buf = ((uint8_t *)b) + sizeof(*b) + b->pos + LWS_PRE; return b->len - b->pos; } size_t lws_buflist_use_segment(struct lws_buflist **head, size_t len) { struct lws_buflist *b = (*head); assert(b); assert(len); assert(b->pos + len <= b->len); b->pos = b->pos + (size_t)len; assert(b->pos <= b->len); if (b->pos < b->len) return (unsigned int)(b->len - b->pos); if (lws_buflist_destroy_segment(head)) /* last segment was just destroyed */ return 0; return lws_buflist_next_segment_len(head, NULL); } size_t lws_buflist_total_len(struct lws_buflist **head) { struct lws_buflist *p = *head; size_t size = 0; while (p) { size += p->len; p = p->next; } return size; } int lws_buflist_linear_copy(struct lws_buflist **head, size_t ofs, uint8_t *buf, size_t len) { struct lws_buflist *p = *head; uint8_t *obuf = buf; size_t s; while (p && len) { if (ofs < p->len) { s = p->len - ofs; if (s > len) s = len; memcpy(buf, ((uint8_t *)&p[1]) + LWS_PRE + ofs, s); len -= s; buf += s; ofs = 0; } else ofs -= p->len; p = p->next; } return lws_ptr_diff(buf, obuf); } int lws_buflist_linear_use(struct lws_buflist **head, uint8_t *buf, size_t len) { uint8_t *obuf = buf; size_t s; while (*head && len) { s = (*head)->len - (*head)->pos; if (s > len) s = len; memcpy(buf, ((uint8_t *)((*head) + 1)) + LWS_PRE + (*head)->pos, s); len -= s; buf += s; lws_buflist_use_segment(head, s); } return lws_ptr_diff(buf, obuf); } int lws_buflist_fragment_use(struct lws_buflist **head, uint8_t *buf, size_t len, char *frag_first, char *frag_fin) { uint8_t *obuf = buf; size_t s; if (!*head) return 0; s = (*head)->len - (*head)->pos; if (s > len) s = len; if (frag_first) *frag_first = !(*head)->pos; if (frag_fin) *frag_fin = (*head)->pos + s == (*head)->len; memcpy(buf, ((uint8_t *)((*head) + 1)) + LWS_PRE + (*head)->pos, s); len -= s; buf += s; lws_buflist_use_segment(head, s); return lws_ptr_diff(buf, obuf); } #if defined(_DEBUG) void lws_buflist_describe(struct lws_buflist **head, void *id, const char *reason) { struct lws_buflist *old; int n = 0; if (*head == NULL) lwsl_notice("%p: %s: buflist empty\n", id, reason); while (*head) { lwsl_notice("%p: %s: %d: %llu / %llu (%llu left)\n", id, reason, n, (unsigned long long)(*head)->pos, (unsigned long long)(*head)->len, (unsigned long long)(*head)->len - (*head)->pos); old = *head; head = &((*head)->next); if (*head == old) { lwsl_err("%s: next points to self\n", __func__); break; } n++; } } #endif libwebsockets-4.3.5/lib/core/context.c000066400000000000000000001676231476025525100177370ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #ifndef LWS_BUILD_HASH #define LWS_BUILD_HASH "unknown-build-hash" #endif static const char *library_version = LWS_LIBRARY_VERSION; #if defined(LWS_WITH_MBEDTLS) extern const char *mbedtls_client_preload_filepath; #endif #if defined(LWS_HAVE_SYS_RESOURCE_H) /* for setrlimit */ #include #endif #if defined(LWS_WITH_NETWORK) /* in ms */ static uint32_t default_backoff_table[] = { 1000, 3000, 9000, 17000 }; #endif /** * lws_get_library_version: get version and git hash library built from * * returns a const char * to a string like "1.1 178d78c" * representing the library version followed by the git head hash it * was built from */ const char * lws_get_library_version(void) { return library_version; } #if defined(LWS_WITH_NETWORK) #if defined(LWS_WITH_SYS_STATE) static const char * system_state_names[] = { "undef", "CONTEXT_CREATED", "INITIALIZED", "IFACE_COLDPLUG", "DHCP", "CPD_PRE_TIME", "TIME_VALID", "CPD_POST_TIME", "POLICY_VALID", "REGISTERED", "AUTH1", "AUTH2", "OPERATIONAL", "POLICY_INVALID", "DESTROYING" }; /* * Handle provoking protocol init when we pass through the right system state */ static int lws_state_notify_protocol_init(struct lws_state_manager *mgr, struct lws_state_notify_link *link, int current, int target) { struct lws_context *context = lws_container_of(mgr, struct lws_context, mgr_system); #if defined(LWS_WITH_SECURE_STREAMS) && \ defined(LWS_WITH_SECURE_STREAMS_SYS_AUTH_API_AMAZON_COM) lws_system_blob_t *ab0, *ab1; #endif int n; /* * Deal with any attachments that were waiting for the right state * to come along */ for (n = 0; n < context->count_threads; n++) lws_system_do_attach(&context->pt[n]); #if defined(LWS_WITH_SYS_DHCP_CLIENT) if (target == LWS_SYSTATE_DHCP) { /* * Don't let it past here until at least one iface has been * configured for operation with DHCP */ if (!lws_dhcpc_status(context, NULL)) return 1; } #endif #if defined(LWS_WITH_SYS_NTPCLIENT) if (target == LWS_SYSTATE_TIME_VALID && lws_now_secs() < 1594017754) /* 06:42 Mon Jul 6 2020 UTC */ { lws_ntpc_trigger(context); return 1; } #endif #if defined(LWS_WITH_NETLINK) /* * If we're going to use netlink routing data for DNS, we have to * wait to collect it asynchronously from the platform first. Netlink * role init starts a ctx sul for 350ms (reset to 100ms each time some * new netlink data comes) that sets nl_initial_done and tries to move * us to OPERATIONAL */ if (target == LWS_SYSTATE_IFACE_COLDPLUG && context->netlink && !context->nl_initial_done) { lwsl_cx_info(context, "waiting for netlink coldplug"); return 1; } #endif #if defined(LWS_WITH_SECURE_STREAMS) && \ defined(LWS_WITH_SECURE_STREAMS_SYS_AUTH_API_AMAZON_COM) /* * Skip this if we are running something without the policy for it * * If root token is empty, skip too. */ ab0 = lws_system_get_blob(context, LWS_SYSBLOB_TYPE_AUTH, 0); ab1 = lws_system_get_blob(context, LWS_SYSBLOB_TYPE_AUTH, 1); if (target == LWS_SYSTATE_AUTH1 && context->pss_policies && ab0 && ab1 && !lws_system_blob_get_size(ab0) && lws_system_blob_get_size(ab1)) { lwsl_cx_info(context, "AUTH1 state triggering api.amazon.com auth"); /* * Start trying to acquire it if it's not already in progress * returns nonzero if we determine it's not needed */ if (!lws_ss_sys_auth_api_amazon_com(context)) return 1; } #endif #if defined(LWS_WITH_SECURE_STREAMS) #if defined(LWS_WITH_DRIVERS) /* * See if we should do the SS Captive Portal Detection */ if (target == LWS_SYSTATE_CPD_PRE_TIME) { if (lws_system_cpd_state_get(context) == LWS_CPD_INTERNET_OK) return 0; /* allow it */ /* * Don't allow it to move past here until we get an IP and * CPD passes, driven by SMD */ return 1; } #endif #if !defined(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY) /* * Skip this if we are running something without the policy for it */ if (target == LWS_SYSTATE_POLICY_VALID && context->pss_policies && !context->policy_updated) { if (context->hss_fetch_policy) return 1; lwsl_cx_debug(context, "starting policy fetch"); /* * Start trying to acquire it if it's not already in progress * returns nonzero if we determine it's not needed */ if (!lws_ss_sys_fetch_policy(context)) /* we have it */ return 0; /* deny while we fetch it */ return 1; } #endif #endif /* protocol part */ if (context->protocol_init_done) return 0; if (target != LWS_SYSTATE_POLICY_VALID) return 0; lwsl_cx_info(context, "doing protocol init on POLICY_VALID\n"); return lws_protocol_init(context); } static void lws_context_creation_completion_cb(lws_sorted_usec_list_t *sul) { struct lws_context *context = lws_container_of(sul, struct lws_context, sul_system_state); /* if nothing is there to intercept anything, go all the way */ lws_state_transition_steps(&context->mgr_system, LWS_SYSTATE_OPERATIONAL); } #endif /* WITH_SYS_STATE */ #if defined(LWS_WITH_SYS_SMD) static int lws_system_smd_cb(void *opaque, lws_smd_class_t _class, lws_usec_t timestamp, void *buf, size_t len) { struct lws_context *cx = (struct lws_context *)opaque; if (_class != LWSSMDCL_NETWORK) return 0; /* something external requested CPD check */ if (!lws_json_simple_strcmp(buf, len, "\"trigger\":", "cpdcheck")) lws_system_cpd_start(cx); else /* * IP acquisition on any interface triggers captive portal * check on default route */ if (!lws_json_simple_strcmp(buf, len, "\"type\":", "ipacq")) lws_system_cpd_start(cx); #if defined(LWS_WITH_SYS_NTPCLIENT) /* * Captive portal detect showing internet workable triggers NTP Client */ if (!lws_json_simple_strcmp(buf, len, "\"type\":", "cps") && !lws_json_simple_strcmp(buf, len, "\"result\":", "OK") && lws_now_secs() < 1594017754) /* 06:42 Mon Jul 6 2020 UTC */ lws_ntpc_trigger(cx); #endif #if defined(LWS_WITH_SYS_DHCP_CLIENT) && 0 /* * Any network interface linkup triggers DHCP */ if (!lws_json_simple_strcmp(buf, len, "\"type\":", "linkup")) lws_ntpc_trigger(cx); #endif #if defined(LWS_WITH_DRIVERS) && defined(LWS_WITH_NETWORK) lws_netdev_smd_cb(opaque, _class, timestamp, buf, len); #endif return 0; } #endif #endif /* NETWORK */ #if !defined(LWS_WITH_NO_LOGS) static const char * const opts_str = #if defined(LWS_WITH_NETWORK) "NET " #else "NoNET " #endif #if defined(LWS_WITH_CLIENT) "CLI " #endif #if defined(LWS_WITH_SERVER) "SRV " #endif #if defined(LWS_ROLE_H1) "H1 " #endif #if defined(LWS_ROLE_H2) "H2 " #endif #if defined(LWS_ROLE_WS) "WS " #endif #if defined(LWS_ROLE_MQTT) "MQTT " #endif #if defined(LWS_WITH_SECURE_STREAMS) && !defined(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY) "SS-JSON-POL " #endif #if defined(LWS_WITH_SECURE_STREAMS) && defined(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY) "SS-STATIC-POL " #endif #if defined(LWS_WITH_SECURE_STREAMS_PROXY_API) "SSPROX " #endif #if defined(LWS_WITH_CONMON) "ConMon " #endif #if defined(LWS_WITH_SYS_FAULT_INJECTION) "FLTINJ " #endif #if defined(LWS_WITH_SYS_ASYNC_DNS) "ASYNC_DNS " #endif #if defined(LWS_WITH_SYS_NTPCLIENT) "NTPCLIENT " #endif #if defined(LWS_WITH_SYS_DHCP_CLIENT) "DHCP_CLIENT " #endif ; #endif #if defined(LWS_WITH_EVLIB_PLUGINS) && defined(LWS_WITH_EVENT_LIBS) static const struct lws_evlib_map { uint64_t flag; const char *name; } map[] = { { LWS_SERVER_OPTION_LIBUV, "evlib_uv" }, { LWS_SERVER_OPTION_LIBEVENT, "evlib_event" }, { LWS_SERVER_OPTION_GLIB, "evlib_glib" }, { LWS_SERVER_OPTION_LIBEV, "evlib_ev" }, { LWS_SERVER_OPTION_SDEVENT, "evlib_sd" }, { LWS_SERVER_OPTION_ULOOP, "evlib_uloop" }, }; static const char * const dlist[] = { ".", /* Priority 1: plugins in cwd */ LWS_INSTALL_LIBDIR, /* Priority 2: plugins in install dir */ NULL }; #endif struct lws_context * lws_create_context(const struct lws_context_creation_info *info) { struct lws_context *context = NULL; #if !defined(LWS_WITH_NO_LOGS) const char *s = "IPv6-absent"; #endif #if defined(LWS_WITH_FILE_OPS) struct lws_plat_file_ops *prev; #endif #ifndef LWS_NO_DAEMONIZE pid_t pid_daemon = get_daemonize_pid(); #endif #if defined(LWS_WITH_NETWORK) const lws_plugin_evlib_t *plev = NULL; unsigned short count_threads = 1; uint8_t *u; uint16_t us_wait_resolution = 0; #if defined(LWS_WITH_CACHE_NSCOOKIEJAR) && defined(LWS_WITH_CLIENT) struct lws_cache_creation_info ci; #endif #if defined(__ANDROID__) struct rlimit rt; #endif size_t #if defined(LWS_PLAT_FREERTOS) /* smaller default, can set in info->pt_serv_buf_size */ s1 = 2048, #else s1 = 4096, #endif size = sizeof(struct lws_context); #endif int n; unsigned int lpf = info->fd_limit_per_thread; #if defined(LWS_WITH_EVLIB_PLUGINS) && defined(LWS_WITH_EVENT_LIBS) struct lws_plugin *evlib_plugin_list = NULL; #if defined(_DEBUG) && !defined(LWS_WITH_NO_LOGS) char *ld_env; #endif #endif #if defined(LWS_WITH_LIBUV) char fatal_exit_defer = 0; #endif if (lws_fi(&info->fic, "ctx_createfail1")) goto early_bail; if (lpf) { lpf+= 2; #if defined(LWS_WITH_SYS_ASYNC_DNS) lpf++; #endif #if defined(LWS_WITH_SYS_NTPCLIENT) lpf++; #endif #if defined(LWS_WITH_SYS_DHCP_CLIENT) lpf++; #endif } #if defined(LWS_WITH_IPV6) && !defined(LWS_WITH_NO_LOGS) if (!lws_check_opt(info->options, LWS_SERVER_OPTION_DISABLE_IPV6)) s = "IPV6-on"; else s = "IPV6-off"; #endif if (lws_plat_context_early_init()) goto early_bail; #if defined(LWS_WITH_NETWORK) if (info->count_threads) count_threads = (unsigned short)info->count_threads; if (count_threads > LWS_MAX_SMP) count_threads = LWS_MAX_SMP; if (info->pt_serv_buf_size) s1 = info->pt_serv_buf_size; /* pt fakewsi and the pt serv buf allocations ride after the context */ size += count_threads * s1; #if !defined(LWS_PLAT_FREERTOS) size += (count_threads * sizeof(struct lws)); #endif if (info->event_lib_custom) { plev = info->event_lib_custom; us_wait_resolution = 0; } #if defined(LWS_WITH_POLL) else { extern const lws_plugin_evlib_t evlib_poll; plev = &evlib_poll; #if !defined(LWS_PLAT_FREERTOS) /* * ... freertos has us-resolution select()... * others are to ms-resolution poll() */ us_wait_resolution = 1000; #endif } #endif #if defined(LWS_WITH_EVLIB_PLUGINS) && defined(LWS_WITH_EVENT_LIBS) /* * New style dynamically loaded event lib support * * We have to pick and load the event lib plugin before we allocate * the context object, so we can overallocate it correctly */ #if defined(_DEBUG) && !defined(LWS_WITH_NO_LOGS) ld_env = getenv("LD_LIBRARY_PATH"); lwsl_info("%s: ev lib path %s, '%s'\n", __func__, LWS_INSTALL_LIBDIR, ld_env); #endif for (n = 0; n < (int)LWS_ARRAY_SIZE(map); n++) { char ok = 0; if (!lws_check_opt(info->options, map[n].flag)) continue; if (!lws_plugins_init(&evlib_plugin_list, dlist, "lws_evlib_plugin", map[n].name, NULL, NULL)) ok = 1; if (!ok || lws_fi(&info->fic, "ctx_createfail_plugin_init")) { lwsl_err("%s: failed to load %s\n", __func__, map[n].name); goto bail; } #if defined(LWS_WITH_LIBUV) if (!n) /* libuv */ fatal_exit_defer = !!info->foreign_loops; #endif if (!evlib_plugin_list || lws_fi(&info->fic, "ctx_createfail_evlib_plugin")) { lwsl_err("%s: unable to load evlib plugin %s\n", __func__, map[n].name); goto bail; } plev = (const lws_plugin_evlib_t *)evlib_plugin_list->hdr; break; } #else #if defined(LWS_WITH_EVENT_LIBS) /* * set the context event loops ops struct * * after this, all event_loop actions use the generic ops */ /* * oldstyle built-in event lib support * * We have composed them into the libwebsockets lib itself, we can * just pick the ops we want and done */ #if defined(LWS_WITH_LIBUV) if (lws_check_opt(info->options, LWS_SERVER_OPTION_LIBUV)) { extern const lws_plugin_evlib_t evlib_uv; plev = &evlib_uv; fatal_exit_defer = !!info->foreign_loops; us_wait_resolution = 0; } #else if (lws_check_opt(info->options, LWS_SERVER_OPTION_LIBUV)) { lwsl_cx_err(context, "Application wants libuv, but lws not built with it"); goto bail; } #endif #if defined(LWS_WITH_LIBEVENT) if (lws_check_opt(info->options, LWS_SERVER_OPTION_LIBEVENT)) { extern const lws_plugin_evlib_t evlib_event; plev = &evlib_event; us_wait_resolution = 0; } #else if (lws_check_opt(info->options, LWS_SERVER_OPTION_LIBEVENT)) { lwsl_cx_err(context, "Application wants libevent, but lws not built with it"); goto bail; } #endif #if defined(LWS_WITH_GLIB) if (lws_check_opt(info->options, LWS_SERVER_OPTION_GLIB)) { extern const lws_plugin_evlib_t evlib_glib; plev = &evlib_glib; us_wait_resolution = 0; } #else if (lws_check_opt(info->options, LWS_SERVER_OPTION_GLIB)) { lwsl_cx_err(context, "Application wants glib, but lws not built with it"); goto bail; } #endif #if defined(LWS_WITH_LIBEV) if (lws_check_opt(info->options, LWS_SERVER_OPTION_LIBEV)) { extern const lws_plugin_evlib_t evlib_ev; plev = &evlib_ev; us_wait_resolution = 0; } #else if (lws_check_opt(info->options, LWS_SERVER_OPTION_LIBEV)) { lwsl_cx_err(context, "Application wants libev, but lws not built with it"); goto bail; } #endif #if defined(LWS_WITH_SDEVENT) if (lws_check_opt(info->options, LWS_SERVER_OPTION_SDEVENT)) { extern const lws_plugin_evlib_t evlib_sd; plev = &evlib_sd; us_wait_resolution = 0; } #else if (lws_check_opt(info->options, LWS_SERVER_OPTION_SDEVENT)) { lwsl_cx_err(context, "Application wants sdevent, but lws not built with it"); goto bail; } #endif #if defined(LWS_WITH_ULOOP) if (lws_check_opt(info->options, LWS_SERVER_OPTION_ULOOP)) { extern const lws_plugin_evlib_t evlib_uloop; plev = &evlib_uloop; us_wait_resolution = 0; } #else if (lws_check_opt(info->options, LWS_SERVER_OPTION_ULOOP)) { lwsl_cx_err(context, "Application wants uloop, but lws not built with it"); goto bail; } #endif #endif /* with event libs */ #endif /* not with ev plugins */ if (!plev || lws_fi(&info->fic, "ctx_createfail_evlib_sel")) goto fail_event_libs; #if defined(LWS_WITH_NETWORK) size += (size_t)plev->ops->evlib_size_ctx /* the ctx evlib priv */ + (count_threads * (size_t)plev->ops->evlib_size_pt) /* the pt evlib priv */; #endif context = lws_zalloc(size, "context"); if (!context || lws_fi(&info->fic, "ctx_createfail_oom_ctx")) { #if defined(LWS_WITH_SYS_FAULT_INJECTION) lws_free(context); #endif lwsl_err("OOM"); goto early_bail; } #if defined(LWS_WITH_SYS_STATE) // NOTE: we need to init this fields because they may be used in logger when context destroying context->mgr_system.state_names = system_state_names; context->mgr_system.context = context; #endif #if defined(LWS_WITH_NETWORK) context->event_loop_ops = plev->ops; context->us_wait_resolution = us_wait_resolution; #if defined(LWS_WITH_TLS_JIT_TRUST) { struct lws_cache_creation_info ci; memset(&ci, 0, sizeof(ci)); ci.cx = context; ci.ops = &lws_cache_ops_heap; ci.name = "jitt"; ci.max_footprint = info->jitt_cache_max_footprint; context->trust_cache = lws_cache_create(&ci); } #endif #endif #if defined(LWS_WITH_EVENT_LIBS) /* at the very end */ context->evlib_ctx = (uint8_t *)context + size - plev->ops->evlib_size_ctx; #endif #if defined(LWS_WITH_EVLIB_PLUGINS) && defined(LWS_WITH_EVENT_LIBS) context->evlib_plugin_list = evlib_plugin_list; #endif #if !defined(LWS_PLAT_FREERTOS) context->uid = info->uid; context->gid = info->gid; context->username = info->username; context->groupname = info->groupname; #endif context->name = info->vhost_name; if (info->log_cx) context->log_cx = info->log_cx; else context->log_cx = &log_cx; lwsl_refcount_cx(context->log_cx, 1); context->system_ops = info->system_ops; context->pt_serv_buf_size = (unsigned int)s1; context->protocols_copy = info->protocols; #if defined(LWS_WITH_TLS_JIT_TRUST) context->vh_idle_grace_ms = info->vh_idle_grace_ms ? info->vh_idle_grace_ms : 5000; #endif #if defined(LWS_WITH_SYS_FAULT_INJECTION) context->fic.name = "ctx"; if (info->fic.fi_owner.count) /* * This moves all the lws_fi_t from info->fi to the context fi, * leaving it empty, so no injection added to default vhost */ lws_fi_import(&context->fic, &info->fic); #endif #if defined(LWS_WITH_SYS_SMD) context->smd_ttl_us = info->smd_ttl_us ? info->smd_ttl_us : #if defined(LWS_PLAT_FREERTOS) 5000000; #else 2000000; #endif context->smd_queue_depth = (uint16_t)(info->smd_queue_depth ? info->smd_queue_depth : #if defined(LWS_PLAT_FREERTOS) 20); #else 40); #endif #endif #if defined(LWS_WITH_NETWORK) context->lcg[LWSLCG_WSI].tag_prefix = "wsi"; context->lcg[LWSLCG_VHOST].tag_prefix = "vh"; context->lcg[LWSLCG_WSI_SERVER].tag_prefix = "wsisrv"; /* adopted */ #if defined(LWS_ROLE_H2) || defined(LWS_ROLE_MQTT) context->lcg[LWSLCG_WSI_MUX].tag_prefix = "mux"; /* a mux child wsi */ #endif #if defined(LWS_WITH_CLIENT) context->lcg[LWSLCG_WSI_CLIENT].tag_prefix = "wsicli"; #endif #if defined(LWS_WITH_SECURE_STREAMS) #if defined(LWS_WITH_CLIENT) context->lcg[LWSLCG_SS_CLIENT].tag_prefix = "SScli"; #endif #if defined(LWS_WITH_SERVER) context->lcg[LWSLCG_SS_SERVER].tag_prefix = "SSsrv"; #endif #if defined(LWS_WITH_CLIENT) context->lcg[LWSLCG_WSI_SS_CLIENT].tag_prefix = "wsiSScli"; #endif #if defined(LWS_WITH_SERVER) context->lcg[LWSLCG_WSI_SS_SERVER].tag_prefix = "wsiSSsrv"; #endif #endif #endif #if defined(LWS_WITH_SYS_METRICS) /* * If we're not using secure streams, we can still pass in a linked- * list of metrics policies */ context->metrics_policies = info->metrics_policies; context->metrics_prefix = info->metrics_prefix; context->mt_service = lws_metric_create(context, LWSMTFL_REPORT_DUTY_WALLCLOCK_US | LWSMTFL_REPORT_ONLY_GO, "cpu.svc"); #if defined(LWS_WITH_CLIENT) context->mt_conn_dns = lws_metric_create(context, LWSMTFL_REPORT_MEAN | LWSMTFL_REPORT_DUTY_WALLCLOCK_US, "n.cn.dns"); context->mt_conn_tcp = lws_metric_create(context, LWSMTFL_REPORT_MEAN | LWSMTFL_REPORT_DUTY_WALLCLOCK_US, "n.cn.tcp"); context->mt_conn_tls = lws_metric_create(context, LWSMTFL_REPORT_MEAN | LWSMTFL_REPORT_DUTY_WALLCLOCK_US, "n.cn.tls"); #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) context->mt_http_txn = lws_metric_create(context, LWSMTFL_REPORT_MEAN | LWSMTFL_REPORT_DUTY_WALLCLOCK_US, "n.http.txn"); #endif context->mth_conn_failures = lws_metric_create(context, LWSMTFL_REPORT_HIST, "n.cn.failures"); #if defined(LWS_WITH_SYS_ASYNC_DNS) context->mt_adns_cache = lws_metric_create(context, LWSMTFL_REPORT_MEAN | LWSMTFL_REPORT_DUTY_WALLCLOCK_US, "n.cn.adns"); #endif #if defined(LWS_WITH_SECURE_STREAMS) context->mth_ss_conn = lws_metric_create(context, LWSMTFL_REPORT_HIST, "n.ss.conn"); #endif #if defined(LWS_WITH_SECURE_STREAMS_PROXY_API) context->mt_ss_cliprox_conn = lws_metric_create(context, LWSMTFL_REPORT_HIST, "n.ss.cliprox.conn"); context->mt_ss_cliprox_paylat = lws_metric_create(context, LWSMTFL_REPORT_MEAN | LWSMTFL_REPORT_DUTY_WALLCLOCK_US, "n.ss.cliprox.paylat"); context->mt_ss_proxcli_paylat = lws_metric_create(context, LWSMTFL_REPORT_MEAN | LWSMTFL_REPORT_DUTY_WALLCLOCK_US, "n.ss.proxcli.paylat"); #endif #endif /* network + metrics + client */ #if defined(LWS_WITH_SERVER) context->mth_srv = lws_metric_create(context, LWSMTFL_REPORT_HIST, "n.srv"); #endif /* network + metrics + server */ #endif /* network + metrics */ #endif /* network */ #if defined(LWS_WITH_MBEDTLS) { char mbedtls_version[32]; #if defined(MBEDTLS_VERSION_C) mbedtls_version_get_string(mbedtls_version); #else lws_snprintf(mbedtls_version, sizeof(mbedtls_version), "%s", MBEDTLS_VERSION_STRING); #endif lwsl_cx_notice(context, "LWS: %s, MbedTLS-%s %s%s", library_version, mbedtls_version, opts_str, s); } #else lwsl_cx_notice(context, "LWS: %s, %s%s", library_version, opts_str, s); #endif #if defined(LWS_WITH_NETWORK) lwsl_cx_info(context, "Event loop: %s", plev->ops->name); #endif /* * Proxy group */ #if defined(LWS_WITH_SECURE_STREAMS_PROXY_API) #if defined(LWS_WITH_CLIENT) context->lcg[LWSLCG_SSP_CLIENT].tag_prefix = "SSPcli"; #endif #if defined(LWS_WITH_SERVER) context->lcg[LWSLCG_SSP_ONWARD].tag_prefix = "SSPonw"; #endif #if defined(LWS_WITH_CLIENT) context->lcg[LWSLCG_WSI_SSP_CLIENT].tag_prefix = "wsiSSPcli"; #endif #if defined(LWS_WITH_SERVER) context->lcg[LWSLCG_WSI_SSP_ONWARD].tag_prefix = "wsiSSPonw"; #endif #endif #if defined(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY) /* directly use the user-provided policy object list */ context->pss_policies = info->pss_policies; #endif #if defined(LWS_WITH_SECURE_STREAMS_PROXY_API) && defined(LWS_WITH_CLIENT) context->ss_proxy_bind = info->ss_proxy_bind; context->ss_proxy_port = info->ss_proxy_port; context->ss_proxy_address = info->ss_proxy_address; if (context->ss_proxy_bind && context->ss_proxy_address) lwsl_cx_notice(context, "ss proxy bind '%s', port %d, ads '%s'", context->ss_proxy_bind, context->ss_proxy_port, context->ss_proxy_address); #endif #if defined(LWS_WITH_NETWORK) context->undestroyed_threads = count_threads; context->count_threads = count_threads; #if defined(LWS_ROLE_WS) && defined(LWS_WITHOUT_EXTENSIONS) if (info->extensions) lwsl_cx_warn(context, "WITHOUT_EXTENSIONS but exts ptr set"); #endif #endif /* network */ #if defined(LWS_WITH_SECURE_STREAMS) #if !defined(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY) context->pss_policies_json = info->pss_policies_json; #endif #if defined(LWS_WITH_SSPLUGINS) context->pss_plugins = info->pss_plugins; #endif #endif /* if he gave us names, set the uid / gid */ if (lws_plat_drop_app_privileges(context, 0) || lws_fi(&context->fic, "ctx_createfail_privdrop")) goto free_context_fail2; #if defined(LWS_WITH_TLS) && defined(LWS_WITH_NETWORK) #if defined(LWS_WITH_MBEDTLS) context->tls_ops = &tls_ops_mbedtls; mbedtls_client_preload_filepath = info->mbedtls_client_preload_filepath; #else context->tls_ops = &tls_ops_openssl; #endif #endif #if LWS_MAX_SMP > 1 lws_mutex_refcount_init(&context->mr); #endif #if defined(LWS_PLAT_FREERTOS) #if defined(LWS_AMAZON_RTOS) context->last_free_heap = xPortGetFreeHeapSize(); #else context->last_free_heap = esp_get_free_heap_size(); #endif #endif #if defined(LWS_WITH_FILE_OPS) /* default to just the platform fops implementation */ context->fops_platform.LWS_FOP_OPEN = _lws_plat_file_open; context->fops_platform.LWS_FOP_CLOSE = _lws_plat_file_close; context->fops_platform.LWS_FOP_SEEK_CUR = _lws_plat_file_seek_cur; context->fops_platform.LWS_FOP_READ = _lws_plat_file_read; context->fops_platform.LWS_FOP_WRITE = _lws_plat_file_write; context->fops_platform.fi[0].sig = NULL; /* * arrange a linear linked-list of fops starting from context->fops * * platform fops * [ -> fops_zip (copied into context so .next settable) ] * [ -> info->fops ] */ context->fops = &context->fops_platform; prev = (struct lws_plat_file_ops *)context->fops; #if defined(LWS_WITH_ZIP_FOPS) /* make a soft copy so we can set .next */ context->fops_zip = fops_zip; prev->next = &context->fops_zip; prev = (struct lws_plat_file_ops *)prev->next; #endif /* if user provided fops, tack them on the end of the list */ if (info->fops) prev->next = info->fops; #endif #if defined(LWS_WITH_SERVER) context->reject_service_keywords = info->reject_service_keywords; #endif if (info->external_baggage_free_on_destroy) context->external_baggage_free_on_destroy = info->external_baggage_free_on_destroy; #if defined(LWS_WITH_NETWORK) context->time_up = lws_now_usecs(); #endif context->pcontext_finalize = info->pcontext; #if defined(LWS_WITH_TLS) && defined(LWS_WITH_NETWORK) context->simultaneous_ssl_restriction = info->simultaneous_ssl_restriction; context->simultaneous_ssl_handshake_restriction = info->simultaneous_ssl_handshake_restriction; #endif context->options = info->options; #if !defined(LWS_PLAT_FREERTOS) && !defined(LWS_PLAT_OPTEE) && !defined(WIN32) /* * If asked, try to set the rlimit / ulimit for process sockets / files. * We read the effective limit in a moment, so we will find out the * real limit according to system constraints then. */ if (info->rlimit_nofile) { struct rlimit rl; rl.rlim_cur = (unsigned int)info->rlimit_nofile; rl.rlim_max = (unsigned int)info->rlimit_nofile; setrlimit(RLIMIT_NOFILE, &rl); } #endif #ifndef LWS_NO_DAEMONIZE if (pid_daemon) { context->started_with_parent = pid_daemon; lwsl_cx_info(context, " Started with daemon pid %u", (unsigned int)pid_daemon); } #endif #if defined(__ANDROID__) n = getrlimit(RLIMIT_NOFILE, &rt); if (n == -1) { lwsl_cx_err(context, "Get RLIMIT_NOFILE failed!"); goto free_context_fail2; } context->max_fds = (unsigned int)rt.rlim_cur; #else #if defined(WIN32) || defined(_WIN32) || defined(LWS_AMAZON_RTOS) || defined(LWS_ESP_PLATFORM) context->max_fds = getdtablesize(); #else { long l = sysconf(_SC_OPEN_MAX); context->max_fds = 2560; if (l > 10000000) lwsl_cx_warn(context, "unreasonable ulimit -n workaround"); else if (l != -1l) context->max_fds = (unsigned int)l; } #endif if ((int)context->max_fds < 0 || lws_fi(&context->fic, "ctx_createfail_maxfds")) { lwsl_cx_err(context, "problem getting process max files"); goto free_context_fail2; } #endif /* * deal with any max_fds override, if it's reducing (setting it to * more than ulimit -n is meaningless). The platform init will * figure out what if this is something it can deal with. */ if (info->fd_limit_per_thread) { unsigned int mf = lpf * context->count_threads; if (mf < context->max_fds) { context->max_fds_unrelated_to_ulimit = 1; context->max_fds = mf; } } #if defined(LWS_WITH_NETWORK) context->token_limits = info->token_limits; #endif #if defined(LWS_WITH_TLS) && defined(LWS_WITH_NETWORK) time(&context->tls.last_cert_check_s); if (info->alpn) context->tls.alpn_default = info->alpn; else { char *p = context->tls.alpn_discovered, first = 1; LWS_FOR_EVERY_AVAILABLE_ROLE_START(ar) { if (ar->alpn) { if (!first) *p++ = ','; p += lws_snprintf(p, (unsigned int)( (context->tls.alpn_discovered + sizeof(context->tls.alpn_discovered) - 2) - p), "%s", ar->alpn); first = 0; } } LWS_FOR_EVERY_AVAILABLE_ROLE_END; context->tls.alpn_default = context->tls.alpn_discovered; } #endif #if defined(LWS_WITH_NETWORK) if (info->timeout_secs) context->timeout_secs = info->timeout_secs; else #endif context->timeout_secs = 15; #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) if (info->max_http_header_data) context->max_http_header_data = info->max_http_header_data; else if (info->max_http_header_data2) context->max_http_header_data = (unsigned short)info->max_http_header_data2; else context->max_http_header_data = LWS_DEF_HEADER_LEN; if (info->max_http_header_pool) context->max_http_header_pool = info->max_http_header_pool; else if (info->max_http_header_pool2) context->max_http_header_pool = (unsigned short)info->max_http_header_pool2; else context->max_http_header_pool = context->max_fds; #endif if (info->fd_limit_per_thread) context->fd_limit_per_thread = lpf; else if (context->count_threads) context->fd_limit_per_thread = context->max_fds / context->count_threads; #if defined(LWS_WITH_SYS_SMD) lws_mutex_init(context->smd.lock_messages); lws_mutex_init(context->smd.lock_peers); /* lws_system smd participant */ if (!lws_smd_register(context, context, 0, LWSSMDCL_NETWORK, lws_system_smd_cb)) { lwsl_cx_err(context, "early smd register failed"); } /* user smd participant */ if (info->early_smd_cb && !lws_smd_register(context, info->early_smd_opaque, 0, info->early_smd_class_filter, info->early_smd_cb)) { lwsl_cx_err(context, "early smd register failed"); } #endif n = 0; #if defined(LWS_WITH_NETWORK) context->default_retry.retry_ms_table = default_backoff_table; context->default_retry.conceal_count = context->default_retry.retry_ms_table_count = LWS_ARRAY_SIZE(default_backoff_table); context->default_retry.jitter_percent = 20; context->default_retry.secs_since_valid_ping = 300; context->default_retry.secs_since_valid_hangup = 310; if (info->retry_and_idle_policy && info->retry_and_idle_policy->secs_since_valid_ping) { context->default_retry.secs_since_valid_ping = info->retry_and_idle_policy->secs_since_valid_ping; context->default_retry.secs_since_valid_hangup = info->retry_and_idle_policy->secs_since_valid_hangup; } /* * Allocate the per-thread storage for scratchpad buffers, * and header data pool */ u = (uint8_t *)&context[1]; for (n = 0; n < context->count_threads; n++) { context->pt[n].serv_buf = u; u += context->pt_serv_buf_size; context->pt[n].context = context; context->pt[n].tid = (uint8_t)n; #if !defined(LWS_PLAT_FREERTOS) /* * We overallocated for a fakewsi (can't compose it in the * pt because size isn't known at that time). point to it * and zero it down. Fakewsis are needed to make callbacks work * when the source of the callback is not actually from a wsi * context. */ context->pt[n].fake_wsi = (struct lws *)u; u += sizeof(struct lws); memset(context->pt[n].fake_wsi, 0, sizeof(struct lws)); #endif context->pt[n].evlib_pt = u; u += plev->ops->evlib_size_pt; #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) context->pt[n].http.ah_list = NULL; context->pt[n].http.ah_pool_length = 0; #endif lws_pt_mutex_init(&context->pt[n]); #if defined(LWS_WITH_SEQUENCER) lws_seq_pt_init(&context->pt[n]); #endif #if defined(LWS_WITH_CGI) if (lws_rops_fidx(&role_ops_cgi, LWS_ROPS_pt_init_destroy)) (lws_rops_func_fidx(&role_ops_cgi, LWS_ROPS_pt_init_destroy)). pt_init_destroy(context, info, &context->pt[n], 0); #endif } if (!info->ka_interval && info->ka_time > 0) { lwsl_cx_err(context, "info->ka_interval can't be 0 if ka_time used"); goto free_context_fail; } #if defined(LWS_WITH_PEER_LIMITS) /* scale the peer hash table according to the max fds for the process, * so that the max list depth averages 16. Eg, 1024 fd -> 64, * 102400 fd -> 6400 */ context->pl_hash_elements = (context->count_threads * context->fd_limit_per_thread) / 16; context->pl_hash_table = lws_zalloc(sizeof(struct lws_peer *) * context->pl_hash_elements, "peer limits hash table"); context->ip_limit_ah = info->ip_limit_ah; context->ip_limit_wsi = info->ip_limit_wsi; context->pl_notify_cb = info->pl_notify_cb; #endif /* * fds table contains pollfd structs for as many pollfds as we can * handle... spread across as many service threads as we have going */ n = (int)(sizeof(struct lws_pollfd) * context->count_threads * context->fd_limit_per_thread); context->pt[0].fds = lws_zalloc((unsigned int)n, "fds table"); if (context->pt[0].fds == NULL || lws_fi(&context->fic, "ctx_createfail_oom_fds")) { #if defined(LWS_WITH_SYS_FAULT_INJECTION) lws_free(context->pt[0].fds); #endif lwsl_cx_err(context, "OOM allocating %d fds\n", context->max_fds); goto free_context_fail; } #endif lwsl_cx_info(context, "ctx: %5luB (%ld ctx + pt(%ld thr x %d)), " "pt-fds: %d, fdmap: %d", (long)sizeof(struct lws_context) + (context->count_threads * context->pt_serv_buf_size), (long)sizeof(struct lws_context), (long)context->count_threads, context->pt_serv_buf_size, context->fd_limit_per_thread, n); #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) lwsl_cx_info(context, " http: ah_data: %u, ah: %lu, max count %u", context->max_http_header_data, (long)sizeof(struct allocated_headers), context->max_http_header_pool); #endif #if defined(LWS_WITH_SERVER) if (info->server_string) { context->server_string = info->server_string; context->server_string_len = (short) strlen(context->server_string); } #endif #if LWS_MAX_SMP > 1 /* each thread serves his own chunk of fds */ for (n = 1; n < (int)context->count_threads; n++) context->pt[n].fds = context->pt[n - 1].fds + context->fd_limit_per_thread; #endif /* * Past here, we may have added handles to the event lib * loop and if libuv, have to take care about how to unpick them... */ if (lws_plat_init(context, info) || lws_fi(&context->fic, "ctx_createfail_plat_init")) goto bail_libuv_aware; #if defined(LWS_WITH_NETWORK) if (lws_fi(&context->fic, "ctx_createfail_evlib_init")) goto bail_libuv_aware; if (context->event_loop_ops->init_context) if (context->event_loop_ops->init_context(context, info)) goto bail_libuv_aware; if (lws_fi(&context->fic, "ctx_createfail_evlib_pt")) goto bail_libuv_aware; if (context->event_loop_ops->init_pt) for (n = 0; n < context->count_threads; n++) { void *lp = NULL; if (info->foreign_loops) lp = info->foreign_loops[n]; if (context->event_loop_ops->init_pt(context, lp, n)) goto bail_libuv_aware; } lws_context_lock(context, __func__); n = __lws_create_event_pipes(context); lws_context_unlock(context); if (n) goto bail_libuv_aware; for (n = 0; n < context->count_threads; n++) { LWS_FOR_EVERY_AVAILABLE_ROLE_START(ar) { if (lws_rops_fidx(ar, LWS_ROPS_pt_init_destroy)) (lws_rops_func_fidx(ar, LWS_ROPS_pt_init_destroy)). pt_init_destroy(context, info, &context->pt[n], 0); } LWS_FOR_EVERY_AVAILABLE_ROLE_END; } #endif lws_context_init_ssl_library(context, info); context->user_space = info->user; #if defined(LWS_WITH_SERVER) strcpy(context->canonical_hostname, "unknown"); #if defined(LWS_WITH_NETWORK) lws_server_get_canonical_hostname(context, info); #endif #endif #if defined(LWS_HAVE_SYS_CAPABILITY_H) && defined(LWS_HAVE_LIBCAP) memcpy(context->caps, info->caps, sizeof(context->caps)); context->count_caps = info->count_caps; #endif #if defined(LWS_WITH_NETWORK) #if defined(LWS_WITH_SYS_ASYNC_DNS) || defined(LWS_WITH_SYS_NTPCLIENT) || \ defined(LWS_WITH_SYS_DHCP_CLIENT) { /* * system vhost */ struct lws_context_creation_info ii; const struct lws_protocols *pp[4]; struct lws_vhost *vh; #if defined(LWS_WITH_SYS_ASYNC_DNS) extern const struct lws_protocols lws_async_dns_protocol; #endif #if defined(LWS_WITH_SYS_NTPCLIENT) extern const struct lws_protocols lws_system_protocol_ntpc; #endif #if defined(LWS_WITH_SYS_DHCP_CLIENT) extern const struct lws_protocols lws_system_protocol_dhcpc4; #endif n = 0; #if defined(LWS_WITH_SYS_ASYNC_DNS) pp[n++] = &lws_async_dns_protocol; #endif #if defined(LWS_WITH_SYS_NTPCLIENT) pp[n++] = &lws_system_protocol_ntpc; #endif #if defined(LWS_WITH_SYS_DHCP_CLIENT) pp[n++] = &lws_system_protocol_dhcpc4; #endif pp[n] = NULL; memset(&ii, 0, sizeof(ii)); ii.vhost_name = "system"; ii.pprotocols = pp; ii.port = CONTEXT_PORT_NO_LISTEN; if (lws_fi(&context->fic, "ctx_createfail_sys_vh")) vh = NULL; else vh = lws_create_vhost(context, &ii); if (!vh) { lwsl_cx_err(context, "failed to create system vhost"); goto bail_libuv_aware; } context->vhost_system = vh; if (lws_protocol_init_vhost(vh, NULL) || lws_fi(&context->fic, "ctx_createfail_sys_vh_init")) { lwsl_cx_err(context, "failed to init system vhost"); goto bail_libuv_aware; } #if defined(LWS_WITH_SYS_ASYNC_DNS) lws_async_dns_init(context); //goto bail_libuv_aware; #endif } #endif #if defined(LWS_WITH_SYS_STATE) /* * init the lws_state mgr for the system state */ context->mgr_system.name = "system"; context->mgr_system.state = LWS_SYSTATE_CONTEXT_CREATED; context->mgr_system.parent = context; #if defined(LWS_WITH_SYS_SMD) context->mgr_system.smd_class = LWSSMDCL_SYSTEM_STATE; #endif context->protocols_notify.name = "prot_init"; context->protocols_notify.notify_cb = lws_state_notify_protocol_init; lws_state_reg_notifier(&context->mgr_system, &context->protocols_notify); /* * insert user notifiers here so they can participate with vetoing us * trying to jump straight to operational, or at least observe us * reaching 'operational', before we returned from context creation. */ lws_state_reg_notifier_list(&context->mgr_system, info->register_notifier_list); #endif /* * if he's not saying he'll make his own vhosts later then act * compatibly and make a default vhost using the data in the info */ if (!lws_check_opt(info->options, LWS_SERVER_OPTION_EXPLICIT_VHOSTS)) { if (!lws_create_vhost(context, info) || lws_fi(&context->fic, "ctx_createfail_def_vh")) { lwsl_cx_err(context, "Failed to create default vhost"); #if defined(LWS_WITH_PEER_LIMITS) lws_free_set_NULL(context->pl_hash_table); #endif goto bail; } } #if defined(LWS_WITH_CACHE_NSCOOKIEJAR) && defined(LWS_WITH_CLIENT) if (info->http_nsc_filepath) { memset(&ci, 0, sizeof(ci)); ci.cx = context; ci.ops = &lws_cache_ops_nscookiejar; ci.name = "NSC"; ci.u.nscookiejar.filepath = info->http_nsc_filepath; context->nsc = lws_cache_create(&ci); if (!context->nsc) goto bail; ci.ops = &lws_cache_ops_heap; ci.name = "L1"; ci.parent = context->nsc; ci.max_footprint = info->http_nsc_heap_max_footprint; ci.max_items = info->http_nsc_heap_max_items; ci.max_payload = info->http_nsc_heap_max_payload; context->l1 = lws_cache_create(&ci); if (!context->l1) { lwsl_cx_err(context, "Failed to init cookiejar"); goto bail; } } #endif #if defined(LWS_WITH_SECURE_STREAMS) #if !defined(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY) if (context->pss_policies_json) { /* * You must create your context with the explicit vhosts flag * in order to use secure streams */ assert(lws_check_opt(info->options, LWS_SERVER_OPTION_EXPLICIT_VHOSTS)); if (lws_ss_policy_parse_begin(context, 0) || lws_fi(&context->fic, "ctx_createfail_ss_pol1")) { #if defined(LWS_WITH_SYS_FAULT_INJECTION) lws_ss_policy_parse_abandon(context); #endif goto bail_libuv_aware; } n = lws_ss_policy_parse(context, (uint8_t *)context->pss_policies_json, strlen(context->pss_policies_json)); if ((n != LEJP_CONTINUE && n < 0) || lws_fi(&context->fic, "ctx_createfail_ss_pol2")) { lws_ss_policy_parse_abandon(context); goto bail_libuv_aware; } if (lws_ss_policy_set(context, "hardcoded") || lws_fi(&context->fic, "ctx_createfail_ss_pol3")) { lwsl_cx_err(context, "policy set failed"); goto bail_libuv_aware; } } #else if (context->pss_policies) { /* user code set the policy objects directly, no parsing step */ if (lws_ss_policy_set(context, "hardcoded") || lws_fi(&context->fic, "ctx_createfail_ss_pol3")) { lwsl_cx_err(context, "policy set failed"); goto bail_libuv_aware; } } #endif #endif lws_context_init_extensions(info, context); lwsl_cx_info(context, " mem: per-conn: %5lu bytes + protocol rx buf", (unsigned long)sizeof(struct lws)); /* * drop any root privs for this process * to listen on port < 1023 we would have needed root, but now we are * listening, we don't want the power for anything else */ if (!lws_check_opt(info->options, LWS_SERVER_OPTION_EXPLICIT_VHOSTS)) if (lws_plat_drop_app_privileges(context, 1) || lws_fi(&context->fic, "ctx_createfail_privdrop")) goto bail_libuv_aware; #if defined(LWS_WITH_SYS_STATE) /* * We want to move on the syste, state as far as it can go towards * OPERATIONAL now. But we have to return from here first so the user * code that called us can set its copy of context, which it may be * relying on to perform operations triggered by the state change. * * We set up a sul to come back immediately and do the state change. */ lws_sul_schedule(context, 0, &context->sul_system_state, lws_context_creation_completion_cb, 1); #endif /* expedite post-context init (eg, protocols) */ lws_cancel_service(context); #endif return context; early_bail: lws_fi_destroy(&info->fic); return NULL; #if defined(LWS_WITH_NETWORK) bail: lws_fi_destroy(&info->fic); lws_context_destroy(context); return NULL; #endif bail_libuv_aware: lws_context_destroy(context); #if defined(LWS_WITH_LIBUV) return fatal_exit_defer ? context : NULL; #else return NULL; #endif #if defined(LWS_WITH_NETWORK) fail_event_libs: if (context) lwsl_cx_err(context, "Requested event library support not configured"); #endif #if defined(LWS_WITH_NETWORK) free_context_fail: if (context) { #if defined(LWS_WITH_SYS_SMD) _lws_smd_destroy(context); #endif } #endif free_context_fail2: if (context) { #if defined(LWS_WITH_SYS_METRICS) lws_metrics_destroy(context); #endif lws_fi_destroy(&context->fic); } lws_fi_destroy(&info->fic); if (context) { lwsl_refcount_cx(context->log_cx, -1); lws_free(context); } return NULL; } #if defined(LWS_WITH_NETWORK) int lws_system_cpd_start(struct lws_context *cx) { cx->captive_portal_detect = LWS_CPD_UNKNOWN; /* if there's a platform implementation, use it */ if (lws_system_get_ops(cx) && lws_system_get_ops(cx)->captive_portal_detect_request) return lws_system_get_ops(cx)->captive_portal_detect_request(cx); #if defined(LWS_WITH_SECURE_STREAMS) /* * Otherwise try to use SS "captive_portal_detect" if that's enabled */ return lws_ss_sys_cpd(cx); #else return 0; #endif } static void lws_system_deferred_cb(lws_sorted_usec_list_t *sul) { struct lws_context *cx = lws_container_of(sul, struct lws_context, sul_cpd_defer); lws_system_cpd_start(cx); } void lws_system_cpd_start_defer(struct lws_context *cx, lws_usec_t defer_us) { lws_sul_schedule(cx, 0, &cx->sul_cpd_defer, lws_system_deferred_cb, defer_us); } #if (defined(LWS_WITH_SYS_STATE) && defined(LWS_WITH_SYS_SMD)) || !defined(LWS_WITH_NO_LOGS) static const char *cname[] = { "Unknown", "OK", "Captive", "No internet" }; #endif void lws_system_cpd_set(struct lws_context *cx, lws_cpd_result_t result) { if (cx->captive_portal_detect != LWS_CPD_UNKNOWN) return; #if !defined(LWS_WITH_NO_LOGS) lwsl_cx_notice(cx, "setting CPD result %s", cname[result]); #endif cx->captive_portal_detect = (uint8_t)result; #if defined(LWS_WITH_SYS_STATE) #if defined(LWS_WITH_SYS_SMD) lws_smd_msg_printf(cx, LWSSMDCL_NETWORK, "{\"type\":\"cpd\",\"result\":\"%s\"}", cname[cx->captive_portal_detect]); #endif /* if nothing is there to intercept anything, go all the way */ if (cx->mgr_system.state != LWS_SYSTATE_POLICY_INVALID) lws_state_transition_steps(&cx->mgr_system, LWS_SYSTATE_OPERATIONAL); #endif } lws_cpd_result_t lws_system_cpd_state_get(struct lws_context *cx) { return (lws_cpd_result_t)cx->captive_portal_detect; } #endif int lws_context_is_deprecated(struct lws_context *cx) { return cx->deprecated; } /* * When using an event loop, the context destruction is in three separate * parts. This is to cover both internal and foreign event loops cleanly. * * - lws_context_destroy() simply starts a soft close of all wsi and * related allocations. The event loop continues. * * As the closes complete in the event loop, reference counting is used * to determine when everything is closed. It then calls * lws_context_destroy2(). * * - lws_context_destroy2() cleans up the rest of the higher-level logical * lws pieces like vhosts. If the loop was foreign, it then proceeds to * lws_context_destroy3(). If it the loop is internal, it stops the * internal loops and waits for lws_context_destroy() to be called again * outside the event loop (since we cannot destroy the loop from * within the loop). That will cause lws_context_destroy3() to run * directly. * * - lws_context_destroy3() destroys any internal event loops and then * destroys the context itself, setting what was info.pcontext to NULL. */ #if defined(LWS_WITH_NETWORK) static void lws_pt_destroy(struct lws_context_per_thread *pt) { volatile struct lws_foreign_thread_pollfd *ftp, *next; volatile struct lws_context_per_thread *vpt; #if defined(LWS_WITH_CGI) lws_ctx_t ctx = pt->context; if (lws_rops_fidx(&role_ops_cgi, LWS_ROPS_pt_init_destroy)) (lws_rops_func_fidx(&role_ops_cgi, LWS_ROPS_pt_init_destroy)). pt_init_destroy(ctx, NULL, pt, 1); #endif vpt = (volatile struct lws_context_per_thread *)pt; ftp = vpt->foreign_pfd_list; while (ftp) { next = ftp->next; lws_free((void *)ftp); ftp = next; } vpt->foreign_pfd_list = NULL; lws_pt_lock(pt, __func__); if (pt->pipe_wsi) { lws_destroy_event_pipe(pt->pipe_wsi); pt->pipe_wsi = NULL; } if ((pt->dummy_pipe_fds[0] || pt->dummy_pipe_fds[1]) #if !defined(WIN32) && ((int)pt->dummy_pipe_fds[0] != -1 || (int)pt->dummy_pipe_fds[1] != -1) #endif ) { struct lws wsi; memset(&wsi, 0, sizeof(wsi)); wsi.a.context = pt->context; wsi.tsi = (char)pt->tid; lws_plat_pipe_close(&wsi); } #if defined(LWS_WITH_SECURE_STREAMS) lws_dll2_foreach_safe(&pt->ss_owner, NULL, lws_ss_destroy_dll); #if defined(LWS_WITH_SECURE_STREAMS_PROXY_API) && defined(LWS_WITH_CLIENT) lws_dll2_foreach_safe(&pt->ss_client_owner, NULL, lws_sspc_destroy_dll); #endif #if defined(LWS_WITH_SEQUENCER) lws_seq_destroy_all_on_pt(pt); #endif #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) while (pt->http.ah_list) _lws_destroy_ah(pt, pt->http.ah_list); #endif #endif lws_pt_unlock(pt); pt->pipe_wsi = NULL; } #endif /* * Context destruction is now a state machine that's aware of SMP pts and * various event lib approaches. * * lws_context_destroy() expects to be called at the end of the user code's * usage of it. But it can also be called non-finally, as a way to stop * service and exit the outer user service loop, and then complete in the * final call. * * For libuv, with async close, it must decide by refcounting the hamdles on * the loop if it has extricated itself from the loop and can be destroyed. * * The various entry states for the staged destroy * * LWSCD_NO_DESTROY: begin destroy process * - mark context as starting destroy process * - start vhost destroy * - stop any further user protocol service * * LWSCD_PT_WAS_DEFERRED: come back here if any pt inside service * - Check for pts that are inside service loop, mark deferral needed if so * - If not, close all wsi on the pt loop and start logical pt destroy * - If any deferred, set state to LWSCD_PT_WAS_DEFERRED and exit * * LWSCD_PT_WAIT_ALL_DESTROYED: come back here for async loop / pt closes * - exit if any pt not marked as unused, or destroyed * - if all pt down, call into evlib to advance context destroy * - finalize vhost destruction * - finalize pt destruction * - if foreign loops, set state to LWSCD_FINALIZATION and exit * * LWSCD_FINALIZATION: come back here at final lws_destroy_context() call * - destroy sundries * - destroy and free the actual context */ void lws_context_destroy(struct lws_context *context) { struct lws_context **pcontext_finalize; #if defined(LWS_WITH_NETWORK) struct lws_context_per_thread *pt; struct lws_vhost *vh = NULL, *vh1; int alive = 0, deferred_pt = 0; #endif #if defined(LWS_WITH_PEER_LIMITS) uint32_t nu; #endif int n; if (!context || context->inside_context_destroy) return; pcontext_finalize = context->pcontext_finalize; lws_context_lock(context, __func__); context->inside_context_destroy = 1; lwsl_cx_info(context, "destroy_state %d", context->destroy_state); switch (context->destroy_state) { case LWSCD_NO_DESTROY: /* * We're getting started */ lwsl_cx_info(context, "starting context destroy flow"); context->being_destroyed = 1; #if defined(LWS_WITH_NETWORK) /* * Close any vhost listen wsi * * inform all the protocols that they are done and will have no * more callbacks. * * We can't free things until after the event loop shuts down. */ if (context->protocol_init_done) vh = context->vhost_list; while (vh) { lwsl_vhost_info(vh, "start close"); vh1 = vh->vhost_next; lws_vhost_destroy1(vh); vh = vh1; } #endif lws_plat_context_early_destroy(context); context->service_no_longer_possible = 1; context->requested_stop_internal_loops = 1; /* fallthru */ case LWSCD_PT_WAS_DEFERRED: #if defined(LWS_WITH_NETWORK) /* * We want to mark the pts as their destruction having been * initiated, so they will reject any new wsi, and iterate all * existing pt wsi starting to close them. * * If the event loop has async close, we have to return after * this and try again when all the loops stop after all the * refcounted wsi are gone. */ pt = context->pt; for (n = 0; n < context->count_threads; n++) { lws_pt_lock(pt, __func__); /* evlib will realize it needs to destroy pt */ pt->destroy_self = 1; if (pt->inside_lws_service) { pt->event_loop_pt_unused = 1; deferred_pt = 1; goto next; } /* * Close every handle in the fds */ while (pt->fds_count) { struct lws *wsi = wsi_from_fd(context, pt->fds[0].fd); if (wsi) { lwsl_cx_debug(context, "pt %d: closing wsi %p: role %s", n, wsi, wsi->role_ops->name); lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY, "ctx destroy" /* no protocol close */); if (pt->pipe_wsi == wsi) pt->pipe_wsi = NULL; } } #if defined(LWS_WITH_CGI) (lws_rops_func_fidx(&role_ops_cgi, LWS_ROPS_pt_init_destroy)). pt_init_destroy(context, NULL, pt, 1); #endif /* * This closes handles that belong to the evlib pt * footprint, eg, timers, idle */ if (context->event_loop_ops->destroy_pt) { lwsl_cx_info(context, "calling evlib destroy_pt %d\n", n); context->event_loop_ops->destroy_pt(context, n); } next: lws_pt_unlock(pt); pt++; } if (deferred_pt) { context->destroy_state = LWSCD_PT_WAS_DEFERRED; lwsl_cx_notice(context, "destroy from inside service"); lws_cancel_service(context); goto bail; } #endif context->destroy_state = LWSCD_PT_WAIT_ALL_DESTROYED; /* * We have different needs depending if foreign loop or not. * * 1) If foreign loop, we really want to advance the * destroy_context() past here, and block only for libuv- * style async close completion. * * 2a) If poll, and we exited by ourselves and are calling a * final destroy_context() outside of any service already, * we want to advance all the way in one step. * * 2b) If poll, and we are reacting to a SIGINT, service * thread(s) may be in poll wait or servicing. We can't * advance the destroy_context() to the point it's freeing * things; we have to leave that for the final * destroy_context() after the service thread(s) are * finished calling for service. */ #if defined(LWS_WITH_NETWORK) if (context->event_loop_ops->destroy_context1) { lwsl_cx_info(context, "do evlib destroy_context1 and wait"); context->event_loop_ops->destroy_context1(context); goto bail; } /* * ...if the more typical sync close, we can clean up the pts * now ourselves... */ lwsl_cx_info(context, "manually destroying pts"); pt = context->pt; for (n = 0; n < context->count_threads; n++, pt++) { pt->event_loop_pt_unused = 1; lws_pt_destroy(pt); } #endif /* fallthru */ case LWSCD_PT_WAIT_ALL_DESTROYED: #if defined(LWS_WITH_NETWORK) for (n = 0; n < context->count_threads; n++) if (!context->pt[n].is_destroyed && !context->pt[n].event_loop_pt_unused) alive++; lwsl_cx_info(context, "PT_WAIT_ALL_DESTROYED: %d alive", alive); if (alive) break; /* * With foreign loops, removing all our fds from the loop * means there are no more ways for the foreign loop to give * us any further CPU once we leave here... so we must make * sure related service threads are exiting so we can pick up * again at the original app thread and do the context * destroy completion */ /* * evlib specific loop destroy? */ if (context->event_loop_ops->destroy_context2) /* * He returns nonzero to indicate the evlib must * continue around the loop before destroy of it is * completed so it can be freed */ context->event_loop_ops->destroy_context2(context); context->requested_stop_internal_loops = 1; #endif /* * Every pt and wsi that may depend on the logical vhosts * is destroyed. We can remove the logical vhosts. */ #if defined(LWS_WITH_SYS_STATE) && defined(LWS_WITH_NETWORK) lws_state_transition(&context->mgr_system, LWS_SYSTATE_POLICY_INVALID); #endif #if defined(LWS_WITH_NETWORK) /* * free all the per-vhost allocations */ vh = context->vhost_list; while (vh) { vh1 = vh->vhost_next; // lwsl_vhost_debug(vh, "vh %s destroy2", vh->name); __lws_vhost_destroy2(vh); vh = vh1; } /* remove ourselves from the pending destruction list */ while (context->vhost_pending_destruction_list) /* removes itself from list */ __lws_vhost_destroy2(context->vhost_pending_destruction_list); #endif #if defined(LWS_WITH_NETWORK) lws_ssl_context_destroy(context); #endif lws_plat_context_late_destroy(context); #if defined(LWS_WITH_PEER_LIMITS) if (context->pl_hash_table) for (nu = 0; nu < context->pl_hash_elements; nu++) { if (!context->pl_hash_table[nu]) continue; lws_start_foreach_llp(struct lws_peer **, peer, context->pl_hash_table[nu]) { struct lws_peer *df = *peer; *peer = df->next; lws_free(df); continue; } lws_end_foreach_llp(peer, next); } lws_free(context->pl_hash_table); #endif #if defined(LWS_WITH_NETWORK) for (n = 0; n < context->count_threads; n++) { struct lws_context_per_thread *pt = &context->pt[n]; (void)pt; #if defined(LWS_WITH_SEQUENCER) lws_seq_destroy_all_on_pt(pt); #endif LWS_FOR_EVERY_AVAILABLE_ROLE_START(ar) { if (lws_rops_fidx(ar, LWS_ROPS_pt_init_destroy)) (lws_rops_func_fidx(ar, LWS_ROPS_pt_init_destroy)). pt_init_destroy(context, NULL, pt, 1); } LWS_FOR_EVERY_AVAILABLE_ROLE_END; #if defined(LWS_WITH_CGI) lws_rops_func_fidx(&role_ops_cgi, LWS_ROPS_pt_init_destroy). pt_init_destroy(context, NULL, pt, 1); #endif #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) while (pt->http.ah_list) _lws_destroy_ah(pt, pt->http.ah_list); #endif lwsl_cx_info(context, "pt destroy %d", n); lws_pt_destroy(pt); } #endif /* NETWORK */ context->destroy_state = LWSCD_FINALIZATION; #if defined(LWS_WITH_NETWORK) if (context->pt[0].event_loop_foreign && context->event_loop_ops->destroy_context1) { lwsl_cx_info(context, "leaving final context destruction" " for final call"); goto bail; } if (context->event_loop_ops->destroy_context1 && !context->pt[0].event_loop_foreign) { lwsl_cx_notice(context, "waiting for internal loop exit"); goto bail; } #endif /* fallthru */ case LWSCD_FINALIZATION: #if defined(LWS_WITH_SYS_METRICS) lws_metrics_dump(context); #endif context->evlib_finalize_destroy_after_int_loops_stop = 1; #if defined(LWS_WITH_NETWORK) if (context->event_loop_ops->destroy_context2) context->event_loop_ops->destroy_context2(context); #if defined(LWS_WITH_SYS_STATE) lws_state_transition_steps(&context->mgr_system, LWS_SYSTATE_CONTEXT_DESTROYING); #endif /* * finalize destroy of pt and things hanging off it */ for (n = 0; n < context->count_threads; n++) { struct lws_context_per_thread *pt = &context->pt[n]; /* * Destroy the pt-roles */ LWS_FOR_EVERY_AVAILABLE_ROLE_START(ar) { if (lws_rops_fidx(ar, LWS_ROPS_pt_init_destroy)) (lws_rops_func_fidx(ar, LWS_ROPS_pt_init_destroy)). pt_init_destroy(context, NULL, pt, 1); } LWS_FOR_EVERY_AVAILABLE_ROLE_END; #if defined(LWS_WITH_CGI) lws_rops_func_fidx(&role_ops_cgi, LWS_ROPS_pt_init_destroy). pt_init_destroy(context, NULL, pt, 1); #endif lws_pt_mutex_destroy(pt); assert(!pt->is_destroyed); pt->destroy_self = 0; pt->is_destroyed = 1; lwsl_cx_info(context, "pt %d fully destroyed", (int)(pt - pt->context->pt)); } /* * wsis are gone, pts are gone, vhosts are gone. * * clean up the context and things hanging off it */ #if defined(LWS_WITH_TLS_JIT_TRUST) lws_cache_destroy(&context->trust_cache); lws_tls_jit_trust_inflight_destroy_all(context); #endif #if defined(LWS_WITH_CACHE_NSCOOKIEJAR) && defined(LWS_WITH_CLIENT) lws_cache_destroy(&context->nsc); lws_cache_destroy(&context->l1); #endif #if defined(LWS_WITH_SYS_SMD) _lws_smd_destroy(context); #endif #if defined(LWS_WITH_SYS_ASYNC_DNS) lws_async_dns_deinit(&context->async_dns); #endif #if defined(LWS_WITH_SYS_DHCP_CLIENT) lws_dhcpc_remove(context, NULL); #endif if (context->pt[0].fds) lws_free_set_NULL(context->pt[0].fds); #endif lws_context_deinit_ssl_library(context); #if defined(LWS_WITH_DETAILED_LATENCIES) if (context->latencies_fd != -1) compatible_close(context->latencies_fd); #endif for (n = 0; n < LWS_SYSBLOB_TYPE_COUNT; n++) lws_system_blob_destroy( lws_system_get_blob(context, (lws_system_blob_item_t)n, 0)); #if defined(LWS_WITH_NETWORK) && defined(LWS_WITH_SECURE_STREAMS) && \ !defined(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY) while (context->server_der_list) { struct lws_ss_x509 *x = context->server_der_list; context->server_der_list = x->next; lws_free((void *)x->ca_der); } if (context->ac_policy) lwsac_free(&context->ac_policy); #endif /* * Context lock is about to go away */ lws_context_unlock(context); #if LWS_MAX_SMP > 1 lws_mutex_refcount_destroy(&context->mr); #endif #if defined(LWS_WITH_SYS_METRICS) && defined(LWS_WITH_NETWORK) lws_metrics_destroy(context); #endif if (context->external_baggage_free_on_destroy) free(context->external_baggage_free_on_destroy); #if defined(LWS_PLAT_FREERTOS) #if defined(LWS_AMAZON_RTOS) context->last_free_heap = xPortGetFreeHeapSize(); #else context->last_free_heap = esp_get_free_heap_size(); #endif #endif #if defined(LWS_WITH_EVLIB_PLUGINS) && defined(LWS_WITH_EVENT_LIBS) if (context->evlib_plugin_list) lws_plugins_destroy(&context->evlib_plugin_list, NULL, NULL); #endif #if defined(LWS_WITH_SYS_FAULT_INJECTION) lws_fi_destroy(&context->fic); #endif lwsl_refcount_cx(context->log_cx, -1); lws_free(context); if (pcontext_finalize) *pcontext_finalize = NULL; return; } #if defined(LWS_WITH_NETWORK) bail: #endif lwsl_cx_info(context, "leaving"); context->inside_context_destroy = 0; lws_context_unlock(context); } int lws_context_is_being_destroyed(struct lws_context *context) { return !!context->being_destroyed; } #if defined(LWS_WITH_SYS_STATE) struct lws_context * lws_system_context_from_system_mgr(lws_state_manager_t *mgr) { #if defined(LWS_WITH_NETWORK) return mgr->context; #else return NULL; #endif } #endif void lws_log_prepend_context(struct lws_log_cx *cx, void *obj, char **p, char *e) { struct lws_context *lcx = (struct lws_context *)obj; if (lcx->name) *p += lws_snprintf(*p, lws_ptr_diff_size_t(e, (*p)), "%s: ", lcx->name); } struct lws_log_cx * lwsl_context_get_cx(struct lws_context *cx) { if (!cx) return NULL; return cx->log_cx; } libwebsockets-4.3.5/lib/core/libwebsockets.c000066400000000000000000000731421476025525100211030ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #ifdef LWS_HAVE_SYS_TYPES_H #include #endif #include void lws_ser_wu16be(uint8_t *b, uint16_t u) { *b++ = (uint8_t)(u >> 8); *b = (uint8_t)u; } void lws_ser_wu32be(uint8_t *b, uint32_t u32) { *b++ = (uint8_t)(u32 >> 24); *b++ = (uint8_t)(u32 >> 16); *b++ = (uint8_t)(u32 >> 8); *b = (uint8_t)u32; } void lws_ser_wu64be(uint8_t *b, uint64_t u64) { lws_ser_wu32be(b, (uint32_t)(u64 >> 32)); lws_ser_wu32be(b + 4, (uint32_t)u64); } uint16_t lws_ser_ru16be(const uint8_t *b) { return (uint16_t)((b[0] << 8) | b[1]); } uint32_t lws_ser_ru32be(const uint8_t *b) { return (unsigned int)((b[0] << 24) | (b[1] << 16) | (b[2] << 8) | b[3]); } uint64_t lws_ser_ru64be(const uint8_t *b) { return (((uint64_t)lws_ser_ru32be(b)) << 32) | lws_ser_ru32be(b + 4); } int lws_vbi_encode(uint64_t value, void *buf) { uint8_t *p = (uint8_t *)buf, b; if (value > 0xfffffff) { assert(0); return -1; } do { b = value & 0x7f; value >>= 7; if (value) *p++ = (0x80 | b); else *p++ = b; } while (value); return lws_ptr_diff(p, buf); } int lws_vbi_decode(const void *buf, uint64_t *value, size_t len) { const uint8_t *p = (const uint8_t *)buf, *end = p + len; uint64_t v = 0; int s = 0; while (p < end) { v |= (((uint64_t)(*p)) & 0x7f) << s; if (*p & 0x80) { *value = v; return lws_ptr_diff(p, buf); } s += 7; if (s >= 64) return 0; p++; } return 0; } signed char char_to_hex(const char c) { if (c >= '0' && c <= '9') return (signed char)(c - '0'); if (c >= 'a' && c <= 'f') return (signed char)(c - 'a' + 10); if (c >= 'A' && c <= 'F') return (signed char)(c - 'A' + 10); return (signed char)-1; } int lws_hex_to_byte_array(const char *h, uint8_t *dest, int max) { uint8_t *odest = dest; while (max-- && *h) { int t = char_to_hex(*h++), t1; if (!*h || t < 0) return -1; t1 = char_to_hex(*h++); if (t1 < 0) return -1; *dest++ = (uint8_t)((t << 4) | t1); } if (max < 0) return -1; return lws_ptr_diff(dest, odest); } static char *hexch = "0123456789abcdef"; void lws_hex_from_byte_array(const uint8_t *src, size_t slen, char *dest, size_t len) { char *end = &dest[len - 1]; while (slen-- && dest != end) { uint8_t b = *src++; *dest++ = hexch[b >> 4]; if (dest == end) break; *dest++ = hexch[b & 0xf]; } *dest = '\0'; } int lws_hex_random(struct lws_context *context, char *dest, size_t len) { size_t n = ((len - 1) / 2) + 1; uint8_t b, *r = (uint8_t *)dest + len - n; if (lws_get_random(context, r, n) != n) return 1; while (len >= 3) { b = *r++; *dest++ = hexch[b >> 4]; *dest++ = hexch[b & 0xf]; len -= 2; } if (len == 2) *dest++ = hexch[(*r) >> 4]; *dest = '\0'; return 0; } #if !defined(LWS_PLAT_OPTEE) #if defined(LWS_WITH_FILE_OPS) int lws_open(const char *__file, int __oflag, ...) { va_list ap; int n; va_start(ap, __oflag); if (((__oflag & O_CREAT) == O_CREAT) #if defined(O_TMPFILE) || ((__oflag & O_TMPFILE) == O_TMPFILE) #endif ) #if defined(WIN32) /* last arg is really a mode_t. But windows... */ n = open(__file, __oflag, va_arg(ap, uint32_t)); #else /* ... and some other toolchains... * * error: second argument to 'va_arg' is of promotable type 'mode_t' * (aka 'unsigned short'); this va_arg has undefined behavior because * arguments will be promoted to 'int' */ n = open(__file, __oflag, (mode_t)va_arg(ap, unsigned int)); #endif else n = open(__file, __oflag); va_end(ap); if (n != -1 && lws_plat_apply_FD_CLOEXEC(n)) { close(n); return -1; } return n; } #endif #endif int lws_pthread_self_to_tsi(struct lws_context *context) { #if LWS_MAX_SMP > 1 pthread_t ps = pthread_self(); struct lws_context_per_thread *pt = &context->pt[0]; int n; /* case that we have SMP build, but don't use it */ if (context->count_threads == 1) return 0; for (n = 0; n < context->count_threads; n++) { if (pthread_equal(ps, pt->self)) return n; pt++; } return -1; #else return 0; #endif } void * lws_context_user(struct lws_context *context) { return context->user_space; } void lws_explicit_bzero(void *p, size_t len) { volatile uint8_t *vp = p; while (len--) *vp++ = 0; } #if !(defined(LWS_PLAT_OPTEE) && !defined(LWS_WITH_NETWORK)) /** * lws_now_secs() - seconds since 1970-1-1 * */ unsigned long lws_now_secs(void) { struct timeval tv; gettimeofday(&tv, NULL); return (unsigned long)tv.tv_sec; } #endif #if defined(LWS_WITH_SERVER) const char * lws_canonical_hostname(struct lws_context *context) { return (const char *)context->canonical_hostname; } #endif int lws_get_count_threads(struct lws_context *context) { return context->count_threads; } static const unsigned char e0f4[] = { 0xa0 | ((2 - 1) << 2) | 1, /* e0 */ 0x80 | ((4 - 1) << 2) | 1, /* e1 */ 0x80 | ((4 - 1) << 2) | 1, /* e2 */ 0x80 | ((4 - 1) << 2) | 1, /* e3 */ 0x80 | ((4 - 1) << 2) | 1, /* e4 */ 0x80 | ((4 - 1) << 2) | 1, /* e5 */ 0x80 | ((4 - 1) << 2) | 1, /* e6 */ 0x80 | ((4 - 1) << 2) | 1, /* e7 */ 0x80 | ((4 - 1) << 2) | 1, /* e8 */ 0x80 | ((4 - 1) << 2) | 1, /* e9 */ 0x80 | ((4 - 1) << 2) | 1, /* ea */ 0x80 | ((4 - 1) << 2) | 1, /* eb */ 0x80 | ((4 - 1) << 2) | 1, /* ec */ 0x80 | ((2 - 1) << 2) | 1, /* ed */ 0x80 | ((4 - 1) << 2) | 1, /* ee */ 0x80 | ((4 - 1) << 2) | 1, /* ef */ 0x90 | ((3 - 1) << 2) | 2, /* f0 */ 0x80 | ((4 - 1) << 2) | 2, /* f1 */ 0x80 | ((4 - 1) << 2) | 2, /* f2 */ 0x80 | ((4 - 1) << 2) | 2, /* f3 */ 0x80 | ((1 - 1) << 2) | 2, /* f4 */ 0, /* s0 */ 0x80 | ((4 - 1) << 2) | 0, /* s2 */ 0x80 | ((4 - 1) << 2) | 1, /* s3 */ }; int lws_check_byte_utf8(unsigned char state, unsigned char c) { unsigned char s = state; if (!s) { if (c >= 0x80) { if (c < 0xc2 || c > 0xf4) return -1; if (c < 0xe0) return 0x80 | ((4 - 1) << 2); else return e0f4[c - 0xe0]; } return s; } if (c < (s & 0xf0) || c >= (s & 0xf0) + 0x10 + ((s << 2) & 0x30)) return -1; return e0f4[21 + (s & 3)]; } int lws_check_utf8(unsigned char *state, unsigned char *buf, size_t len) { unsigned char s = *state; while (len--) { unsigned char c = *buf++; if (!s) { if (c >= 0x80) { if (c < 0xc2 || c > 0xf4) return 1; if (c < 0xe0) s = 0x80 | ((4 - 1) << 2); else s = e0f4[c - 0xe0]; } } else { if (c < (s & 0xf0) || c >= (s & 0xf0) + 0x10 + ((s << 2) & 0x30)) return 1; s = e0f4[21 + (s & 3)]; } } *state = s; return 0; } char * lws_strdup(const char *s) { char *d = lws_malloc(strlen(s) + 1, "strdup"); if (d) strcpy(d, s); return d; } const char * lws_nstrstr(const char *buf, size_t len, const char *name, size_t nl) { const char *end = buf + len - nl + 1; size_t n; if (nl > len) /* it cannot be found if the needle is longer than the haystack */ return NULL; while (buf < end) { if (*buf != name[0]) { buf++; continue; } if (nl == 1) /* single char match, we are done */ return buf; if (buf[nl - 1] == name[nl - 1]) { /* * This is looking interesting then... the first * and last chars match, let's check the insides */ n = 1; while (n < nl && buf[n] == name[n]) n++; if (n == nl) /* it's a hit */ return buf; } buf++; } return NULL; } /* * name wants to be something like "\"myname\":" */ const char * lws_json_simple_find(const char *buf, size_t len, const char *name, size_t *alen) { size_t nl = strlen(name); const char *np = lws_nstrstr(buf, len, name, nl), *end = buf + len, *as; int qu = 0; if (!np) return NULL; np += nl; while (np < end && (*np == ' ' || *np == '\t')) np++; if (np >= end) return NULL; /* * The arg could be lots of things after "name": with JSON, commonly a * string like "mystring", true, false, null, [...] or {...} ... we want * to handle common, simple cases cheaply with this; the user can choose * a full JSON parser like lejp if it's complicated. So if no opening * quote, return until a terminator like , ] }. If there's an opening * quote, return until closing quote, handling escaped quotes. */ if (*np == '\"') { qu = 1; np++; } as = np; while (np < end && (!qu || *np != '\"') && /* end quote is EOT if quoted */ (qu || (*np != '}' && *np != ']' && *np != ',')) /* delimiters */ ) { if (qu && *np == '\\') /* skip next char if quoted escape */ np++; np++; } *alen = (unsigned int)lws_ptr_diff(np, as); return as; } int lws_json_simple_strcmp(const char *buf, size_t len, const char *name, const char *comp) { size_t al; const char *hit = lws_json_simple_find(buf, len, name, &al); if (!hit) return -1; if (al != strlen(comp)) return -1; return strncmp(hit, comp, al); } static const char *hex = "0123456789ABCDEF"; const char * lws_sql_purify(char *escaped, const char *string, size_t len) { const char *p = string; char *q = escaped; while (*p && len-- > 2) { if (*p == '\'') { *q++ = '\''; *q++ = '\''; len --; p++; } else *q++ = *p++; } *q = '\0'; return escaped; } int lws_sql_purify_len(const char *p) { int olen = 0; while (*p) { if (*p++ == '\'') olen++; olen++; } return olen; } const char * lws_json_purify(char *escaped, const char *string, int len, int *in_used) { const char *p = string; char *q = escaped; if (!p) { escaped[0] = '\0'; return escaped; } while (*p && len-- > 6) { if (*p == '\t') { p++; *q++ = '\\'; *q++ = 't'; continue; } if (*p == '\n') { p++; *q++ = '\\'; *q++ = 'n'; continue; } if (*p == '\r') { p++; *q++ = '\\'; *q++ = 'r'; continue; } if (*p == '\\') { p++; *q++ = '\\'; *q++ = '\\'; continue; } if (*p == '\"' || *p < 0x20) { *q++ = '\\'; *q++ = 'u'; *q++ = '0'; *q++ = '0'; *q++ = hex[((*p) >> 4) & 15]; *q++ = hex[(*p) & 15]; len -= 5; p++; } else *q++ = *p++; } *q = '\0'; if (in_used) *in_used = lws_ptr_diff(p, string); return escaped; } int lws_json_purify_len(const char *string) { int len = 0; const char *p = string; while (*p) { if (*p == '\t' || *p == '\n' || *p == '\r') { p++; len += 2; continue; } if (*p == '\"' || *p == '\\' || *p < 0x20) { len += 6; p++; continue; } p++; len++; } return len; } void lws_filename_purify_inplace(char *filename) { while (*filename) { if (*filename == '.' && filename[1] == '.') { *filename = '_'; filename[1] = '_'; } if (*filename == ':' || #if !defined(WIN32) *filename == '\\' || #endif *filename == '$' || *filename == '%') *filename = '_'; filename++; } } const char * lws_urlencode(char *escaped, const char *string, int len) { const char *p = string; char *q = escaped; while (*p && len-- > 3) { if (*p == ' ') { *q++ = '+'; p++; continue; } if ((*p >= '0' && *p <= '9') || (*p >= 'A' && *p <= 'Z') || (*p >= 'a' && *p <= 'z')) { *q++ = *p++; continue; } *q++ = '%'; *q++ = hex[(*p >> 4) & 0xf]; *q++ = hex[*p & 0xf]; len -= 2; p++; } *q = '\0'; return escaped; } int lws_urldecode(char *string, const char *escaped, int len) { int state = 0, n; char sum = 0; while (*escaped && len) { switch (state) { case 0: if (*escaped == '%') { state++; escaped++; continue; } if (*escaped == '+') { escaped++; *string++ = ' '; len--; continue; } *string++ = *escaped++; len--; break; case 1: n = char_to_hex(*escaped); if (n < 0) return -1; escaped++; sum = (char)(n << 4); state++; break; case 2: n = char_to_hex(*escaped); if (n < 0) return -1; escaped++; *string++ = (char)(sum | n); len--; state = 0; break; } } *string = '\0'; return 0; } int lws_finalize_startup(struct lws_context *context) { if (lws_check_opt(context->options, LWS_SERVER_OPTION_EXPLICIT_VHOSTS)) if (lws_plat_drop_app_privileges(context, 1)) return 1; return 0; } #if !defined(LWS_PLAT_FREERTOS) void lws_get_effective_uid_gid(struct lws_context *context, uid_t *uid, gid_t *gid) { *uid = context->uid; *gid = context->gid; } #endif int lws_snprintf(char *str, size_t size, const char *format, ...) { va_list ap; int n; if (!size) return 0; va_start(ap, format); n = vsnprintf(str, size, format, ap); va_end(ap); if (n >= (int)size) return (int)size; return n; } char * lws_strncpy(char *dest, const char *src, size_t size) { strncpy(dest, src, size - 1); dest[size - 1] = '\0'; return dest; } int lws_timingsafe_bcmp(const void *a, const void *b, uint32_t len) { const uint8_t *pa = a, *pb = b; uint8_t sum = 0; while (len--) sum |= (uint8_t)(*pa++ ^ *pb++); return sum; } typedef enum { LWS_TOKZS_LEADING_WHITESPACE, LWS_TOKZS_QUOTED_STRING, LWS_TOKZS_TOKEN, LWS_TOKZS_TOKEN_POST_TERMINAL } lws_tokenize_state; lws_tokenize_elem lws_tokenize(struct lws_tokenize *ts) { const char *rfc7230_delims = "(),/:;<=>?@[\\]{}"; lws_tokenize_state state = LWS_TOKZS_LEADING_WHITESPACE; char c, flo = 0, d_minus = '-', d_dot = '.', d_star = '*', s_minus = '\0', s_dot = '\0', s_star = '\0', d_eq = '=', s_eq = '\0', skipping = 0; signed char num = (ts->flags & LWS_TOKENIZE_F_NO_INTEGERS) ? 0 : -1; int utf8 = 0; /* for speed, compute the effect of the flags outside the loop */ if (ts->flags & LWS_TOKENIZE_F_MINUS_NONTERM) { d_minus = '\0'; s_minus = '-'; } if (ts->flags & LWS_TOKENIZE_F_DOT_NONTERM) { d_dot = '\0'; s_dot = '.'; } if (ts->flags & LWS_TOKENIZE_F_ASTERISK_NONTERM) { d_star = '\0'; s_star = '*'; } if (ts->flags & LWS_TOKENIZE_F_EQUALS_NONTERM) { d_eq = '\0'; s_eq = '='; } ts->token = NULL; ts->token_len = 0; while (ts->len) { c = *ts->start++; ts->len--; utf8 = lws_check_byte_utf8((unsigned char)utf8, (unsigned char)c); if (utf8 < 0) return LWS_TOKZE_ERR_BROKEN_UTF8; if (!c) break; if (skipping) { if (c != '\r' && c != '\n') continue; else skipping = 0; } /* comment */ if (ts->flags & LWS_TOKENIZE_F_HASH_COMMENT && state != LWS_TOKZS_QUOTED_STRING && c == '#') { skipping = 1; continue; } /* whitespace */ if (c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '\f') { switch (state) { case LWS_TOKZS_LEADING_WHITESPACE: case LWS_TOKZS_TOKEN_POST_TERMINAL: continue; case LWS_TOKZS_QUOTED_STRING: ts->token_len++; continue; case LWS_TOKZS_TOKEN: /* we want to scan forward to look for = */ state = LWS_TOKZS_TOKEN_POST_TERMINAL; continue; } } /* quoted string */ if (c == '\"') { if (state == LWS_TOKZS_QUOTED_STRING) return LWS_TOKZE_QUOTED_STRING; /* starting a quoted string */ if (ts->flags & LWS_TOKENIZE_F_COMMA_SEP_LIST) { if (ts->delim == LWSTZ_DT_NEED_DELIM) return LWS_TOKZE_ERR_COMMA_LIST; ts->delim = LWSTZ_DT_NEED_DELIM; } state = LWS_TOKZS_QUOTED_STRING; ts->token = ts->start; ts->token_len = 0; continue; } /* token= aggregation */ if (!(ts->flags & LWS_TOKENIZE_F_EQUALS_NONTERM) && c == '=' && (state == LWS_TOKZS_TOKEN_POST_TERMINAL || state == LWS_TOKZS_TOKEN)) { if (num == 1) return LWS_TOKZE_ERR_NUM_ON_LHS; /* swallow the = */ return LWS_TOKZE_TOKEN_NAME_EQUALS; } /* optional token: aggregation */ if ((ts->flags & LWS_TOKENIZE_F_AGG_COLON) && c == ':' && (state == LWS_TOKZS_TOKEN_POST_TERMINAL || state == LWS_TOKZS_TOKEN)) /* swallow the : */ return LWS_TOKZE_TOKEN_NAME_COLON; /* aggregate . in a number as a float */ if (c == '.' && !(ts->flags & LWS_TOKENIZE_F_NO_FLOATS) && state == LWS_TOKZS_TOKEN && num == 1) { if (flo) return LWS_TOKZE_ERR_MALFORMED_FLOAT; flo = 1; ts->token_len++; continue; } /* * Delimiter... by default anything that: * * - isn't matched earlier, or * - is [A-Z, a-z, 0-9, _], and * - is not a partial utf8 char * * is a "delimiter", it marks the end of a token and is itself * reported as a single LWS_TOKZE_DELIMITER each time. * * However with LWS_TOKENIZE_F_RFC7230_DELIMS flag, tokens may * contain any noncontrol character that isn't defined in * rfc7230_delims, and only characters listed there are treated * as delimiters. */ if (!utf8 && ((ts->flags & LWS_TOKENIZE_F_RFC7230_DELIMS && strchr(rfc7230_delims, c) && c > 32) || ((!(ts->flags & LWS_TOKENIZE_F_RFC7230_DELIMS) && (c < '0' || c > '9') && (c < 'A' || c > 'Z') && (c < 'a' || c > 'z') && c != '_') && c != s_minus && c != s_dot && c != s_star && c != s_eq) || c == d_minus || c == d_dot || c == d_star || c == d_eq ) && !((ts->flags & LWS_TOKENIZE_F_SLASH_NONTERM) && c == '/')) { switch (state) { case LWS_TOKZS_LEADING_WHITESPACE: if (ts->flags & LWS_TOKENIZE_F_COMMA_SEP_LIST) { if (c != ',' || ts->delim != LWSTZ_DT_NEED_DELIM) return LWS_TOKZE_ERR_COMMA_LIST; ts->delim = LWSTZ_DT_NEED_NEXT_CONTENT; } ts->token = ts->start - 1; ts->token_len = 1; return LWS_TOKZE_DELIMITER; case LWS_TOKZS_QUOTED_STRING: ts->token_len++; continue; case LWS_TOKZS_TOKEN_POST_TERMINAL: case LWS_TOKZS_TOKEN: /* report the delimiter next time */ ts->start--; ts->len++; goto token_or_numeric; } } /* anything that's not whitespace or delimiter is payload */ switch (state) { case LWS_TOKZS_LEADING_WHITESPACE: if (ts->flags & LWS_TOKENIZE_F_COMMA_SEP_LIST) { if (ts->delim == LWSTZ_DT_NEED_DELIM) return LWS_TOKZE_ERR_COMMA_LIST; ts->delim = LWSTZ_DT_NEED_DELIM; } state = LWS_TOKZS_TOKEN; ts->token = ts->start - 1; ts->token_len = 1; goto checknum; case LWS_TOKZS_QUOTED_STRING: case LWS_TOKZS_TOKEN: ts->token_len++; checknum: if (!(ts->flags & LWS_TOKENIZE_F_NO_INTEGERS)) { if (c < '0' || c > '9') num = 0; else if (num < 0) num = 1; } continue; case LWS_TOKZS_TOKEN_POST_TERMINAL: /* report the new token next time */ ts->start--; ts->len++; goto token_or_numeric; } } /* we ran out of content */ if (utf8) /* ended partway through a multibyte char */ return LWS_TOKZE_ERR_BROKEN_UTF8; if (state == LWS_TOKZS_QUOTED_STRING) return LWS_TOKZE_ERR_UNTERM_STRING; if (state != LWS_TOKZS_TOKEN_POST_TERMINAL && state != LWS_TOKZS_TOKEN) { if ((ts->flags & LWS_TOKENIZE_F_COMMA_SEP_LIST) && ts->delim == LWSTZ_DT_NEED_NEXT_CONTENT) return LWS_TOKZE_ERR_COMMA_LIST; return LWS_TOKZE_ENDED; } /* report the pending token */ token_or_numeric: if (num != 1) return LWS_TOKZE_TOKEN; if (flo) return LWS_TOKZE_FLOAT; return LWS_TOKZE_INTEGER; } int lws_tokenize_cstr(struct lws_tokenize *ts, char *str, size_t max) { if (ts->token_len + 1 >= max) return 1; memcpy(str, ts->token, ts->token_len); str[ts->token_len] = '\0'; return 0; } void lws_tokenize_init(struct lws_tokenize *ts, const char *start, int flags) { ts->start = start; ts->len = 0x7fffffff; ts->flags = (uint16_t)(unsigned int)flags; ts->delim = LWSTZ_DT_NEED_FIRST_CONTENT; } typedef enum { LWS_EXPS_LITERAL, LWS_EXPS_OPEN_OR_LIT, LWS_EXPS_NAME_OR_CLOSE, LWS_EXPS_DRAIN, } lws_strexp_state; void lws_strexp_init(lws_strexp_t *exp, void *priv, lws_strexp_expand_cb cb, char *out, size_t olen) { memset(exp, 0, sizeof(*exp)); exp->cb = cb; exp->out = out; exp->olen = olen; exp->state = LWS_EXPS_LITERAL; exp->priv = priv; } void lws_strexp_reset_out(lws_strexp_t *exp, char *out, size_t olen) { exp->out = out; exp->olen = olen; exp->pos = 0; } int lws_strexp_expand(lws_strexp_t *exp, const char *in, size_t len, size_t *pused_in, size_t *pused_out) { size_t used = 0; int n; while (used < len) { switch (exp->state) { case LWS_EXPS_LITERAL: if (*in == '$') { exp->state = LWS_EXPS_OPEN_OR_LIT; break; } if (exp->out) exp->out[exp->pos] = *in; exp->pos++; if (exp->olen - exp->pos < 1) { *pused_in = used + 1; *pused_out = exp->pos; return LSTRX_FILLED_OUT; } break; case LWS_EXPS_OPEN_OR_LIT: if (*in == '{') { exp->state = LWS_EXPS_NAME_OR_CLOSE; exp->name_pos = 0; exp->exp_ofs = 0; break; } /* treat as a literal */ if (exp->olen - exp->pos < 3) return -1; if (exp->out) { exp->out[exp->pos++] = '$'; exp->out[exp->pos++] = *in; } else exp->pos += 2; if (*in != '$') exp->state = LWS_EXPS_LITERAL; break; case LWS_EXPS_NAME_OR_CLOSE: if (*in == '}') { exp->name[exp->name_pos] = '\0'; exp->state = LWS_EXPS_DRAIN; goto drain; } if (exp->name_pos >= sizeof(exp->name) - 1) return LSTRX_FATAL_NAME_TOO_LONG; exp->name[exp->name_pos++] = *in; break; case LWS_EXPS_DRAIN: drain: *pused_in = used; n = exp->cb(exp->priv, exp->name, exp->out, &exp->pos, exp->olen, &exp->exp_ofs); *pused_out = exp->pos; if (n == LSTRX_FILLED_OUT || n == LSTRX_FATAL_NAME_UNKNOWN) return n; exp->state = LWS_EXPS_LITERAL; break; } used++; in++; } if (exp->out) exp->out[exp->pos] = '\0'; *pused_in = used; *pused_out = exp->pos; return LSTRX_DONE; } int lws_strcmp_wildcard(const char *wildcard, size_t wlen, const char *check, size_t clen) { const char *match[3], *wc[3], *wc_end = wildcard + wlen, *cend = check + clen; int sp = 0; do { if (wildcard == wc_end) { /* * We reached the end of wildcard, but not of check, * and the last thing in wildcard was not a * or we * would have completed already... if we can rewind, * let's try that... */ if (sp) { wildcard = wc[sp - 1]; check = match[--sp]; continue; } /* otherwise it's the end of the road for this one */ return 1; } if (*wildcard == '*') { if (++wildcard == wc_end) /* * Wildcard ended on a *, so we know we will * match unconditionally */ return 0; /* * Now we need to stick wildcard here and see if there * is any remaining match exists, for eg b of "a*b" */ if (sp == LWS_ARRAY_SIZE(match)) { lwsl_err("%s: exceeds * stack\n", __func__); return 1; /* we can't deal with it */ } wc[sp] = wildcard; /* if we ever pop and come back here, pick up from +1 */ match[sp++] = check + 1; continue; } if (*(check++) == *wildcard) { if (wildcard == wc_end) return 0; /* * We're still compatible with wildcard... keep going */ wildcard++; continue; } if (!sp) /* * We're just trying to match literals, and failed... */ return 1; /* we're looking for a post-* match... keep looking... */ } while (check < cend); /* * We reached the end of check, if also at end of wildcard we're OK */ return wildcard != wc_end; } #if LWS_MAX_SMP > 1 void lws_mutex_refcount_init(struct lws_mutex_refcount *mr) { pthread_mutex_init(&mr->lock, NULL); mr->last_lock_reason = NULL; mr->lock_depth = 0; mr->metadata = 0; #ifdef __PTW32_H /* If we use implementation of PThreads for Win that is * distributed by VCPKG */ memset(&mr->lock_owner, 0, sizeof(pthread_t)); #else mr->lock_owner = 0; #endif } void lws_mutex_refcount_destroy(struct lws_mutex_refcount *mr) { pthread_mutex_destroy(&mr->lock); } void lws_mutex_refcount_lock(struct lws_mutex_refcount *mr, const char *reason) { /* if true, this sequence is atomic because our thread has the lock * * - if true, only guy who can race to make it untrue is our thread, * and we are here. * * - if false, only guy who could race to make it true is our thread, * and we are here * * - it can be false and change to a different tid that is also false */ #ifdef __PTW32_H /* If we use implementation of PThreads for Win that is * distributed by VCPKG */ if (pthread_equal(mr->lock_owner, pthread_self())) #else if (mr->lock_owner == pthread_self()) #endif { /* atomic because we only change it if we own the lock */ mr->lock_depth++; return; } pthread_mutex_lock(&mr->lock); /* atomic because only we can have the lock */ mr->last_lock_reason = reason; mr->lock_owner = pthread_self(); mr->lock_depth = 1; //lwsl_notice("tid %d: lock %s\n", mr->tid, reason); } void lws_mutex_refcount_unlock(struct lws_mutex_refcount *mr) { if (--mr->lock_depth) /* atomic because only thread that has the lock can unlock */ return; mr->last_lock_reason = "free"; #ifdef __PTW32_H /* If we use implementation of PThreads for Win that is * distributed by VCPKG */ memset(&mr->lock_owner, 0, sizeof(pthread_t)); #else mr->lock_owner = 0; #endif // lwsl_notice("tid %d: unlock %s\n", mr->tid, mr->last_lock_reason); pthread_mutex_unlock(&mr->lock); } void lws_mutex_refcount_assert_held(struct lws_mutex_refcount *mr) { #ifdef __PTW32_H /* If we use implementation of PThreads for Win that is * distributed by VCPKG */ assert(pthread_equal(mr->lock_owner, pthread_self()) && mr->lock_depth); #else assert(mr->lock_owner == pthread_self() && mr->lock_depth); #endif } #endif /* SMP */ const char * lws_cmdline_option(int argc, const char **argv, const char *val) { size_t n = strlen(val); int c = argc; while (--c > 0) { if (!strncmp(argv[c], val, n)) { if (!*(argv[c] + n) && c < argc - 1) { /* coverity treats unchecked argv as "tainted" */ if (!argv[c + 1] || strlen(argv[c + 1]) > 1024) return NULL; return argv[c + 1]; } if (argv[c][n] == '=') return &argv[c][n + 1]; return argv[c] + n; } } return NULL; } static const char * const builtins[] = { "-d", "--fault-injection", "--fault-seed", "--ignore-sigterm" }; enum opts { OPT_DEBUGLEVEL, OPT_FAULTINJECTION, OPT_FAULT_SEED, OPT_IGNORE_SIGTERM, }; #if !defined(LWS_PLAT_FREERTOS) static void lws_sigterm_catch(int sig) { } #endif void lws_cmdline_option_handle_builtin(int argc, const char **argv, struct lws_context_creation_info *info) { const char *p; int n, m, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; #if defined(LWS_WITH_SYS_FAULT_INJECTION) uint64_t seed = (uint64_t)lws_now_usecs(); #endif for (n = 0; n < (int)LWS_ARRAY_SIZE(builtins); n++) { p = lws_cmdline_option(argc, argv, builtins[n]); if (!p) continue; m = atoi(p); switch (n) { case OPT_DEBUGLEVEL: logs = m; break; case OPT_FAULTINJECTION: #if !defined(LWS_WITH_SYS_FAULT_INJECTION) lwsl_err("%s: FAULT_INJECTION not built\n", __func__); #endif lws_fi_deserialize(&info->fic, p); break; case OPT_FAULT_SEED: #if defined(LWS_WITH_SYS_FAULT_INJECTION) seed = (uint64_t)atoll(p); #endif break; case OPT_IGNORE_SIGTERM: #if !defined(LWS_PLAT_FREERTOS) signal(SIGTERM, lws_sigterm_catch); #endif break; } } #if defined(LWS_WITH_SYS_FAULT_INJECTION) lws_xos_init(&info->fic.xos, seed); #endif lws_set_log_level(logs, NULL); #if defined(LWS_WITH_SYS_FAULT_INJECTION) if (info->fic.fi_owner.count) lwsl_notice("%s: Fault Injection seed %llu\n", __func__, (unsigned long long)seed); #endif } const lws_humanize_unit_t humanize_schema_si[] = { { "Pi", LWS_PI }, { "Ti", LWS_TI }, { "Gi", LWS_GI }, { "Mi", LWS_MI }, { "Ki", LWS_KI }, { "", 1 }, { NULL, 0 } }; const lws_humanize_unit_t humanize_schema_si_bytes[] = { { "PiB", LWS_PI }, { "TiB", LWS_TI }, { "GiB", LWS_GI }, { "MiB", LWS_MI }, { "KiB", LWS_KI }, { "B", 1 }, { NULL, 0 } }; const lws_humanize_unit_t humanize_schema_us[] = { { "y", (uint64_t)365 * 24 * 3600 * LWS_US_PER_SEC }, { "d", (uint64_t)24 * 3600 * LWS_US_PER_SEC }, { "hr", (uint64_t)3600 * LWS_US_PER_SEC }, { "min", 60 * LWS_US_PER_SEC }, { "s", LWS_US_PER_SEC }, { "ms", LWS_US_PER_MS }, #if defined(WIN32) { "us", 1 }, #else { "μs", 1 }, #endif { NULL, 0 } }; /* biggest ull is 18446744073709551615 (20 chars) */ static int decim(char *r, uint64_t v, char chars, char leading) { uint64_t q = 1; char *ro = r; int n = 1; while ((leading || v > (q * 10) - 1) && n < 20 && n < chars) { q = q * 10; n++; } /* n is how many chars needed */ while (n--) { *r++ = (char)('0' + (char)((v / q) % 10)); q = q / 10; } *r = '\0'; return lws_ptr_diff(r, ro); } int lws_humanize(char *p, size_t len, uint64_t v, const lws_humanize_unit_t *schema) { char *obuf = p, *end = p + len; do { if (v >= schema->factor || schema->factor == 1) { if (schema->factor == 1) { p += decim(p, v, 4, 0); p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "%s", schema->name); return lws_ptr_diff(p, obuf); } p += decim(p, v / schema->factor, 4, 0); *p++ = '.'; p += decim(p, (v % schema->factor) / (schema->factor / 1000), 3, 1); p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "%s", schema->name); return lws_ptr_diff(p, obuf); } schema++; } while (schema->name); assert(0); strncpy(p, "unknown value", len); return 0; } libwebsockets-4.3.5/lib/core/logs.c000066400000000000000000000323501476025525100172030ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #ifdef LWS_HAVE_SYS_TYPES_H #include #endif #if defined(LWS_PLAT_OPTEE) void lwsl_emit_optee(int level, const char *line); #endif lws_log_cx_t log_cx = { #if !defined(LWS_PLAT_OPTEE) .u.emit = lwsl_emit_stderr, #else .u.emit = lwsl_emit_optee, #endif .lll_flags = LLL_ERR | LLL_WARN | LLL_NOTICE, }; #if !defined(LWS_PLAT_OPTEE) && !defined(LWS_WITH_NO_LOGS) static const char * log_level_names ="EWNIDPHXCLUT??"; #endif /* * Name an instance tag and attach to a group */ void __lws_lc_tag(struct lws_context *context, lws_lifecycle_group_t *grp, lws_lifecycle_t *lc, const char *format, ...) { va_list ap; int n = 1; if (*lc->gutag == '[') { /* appending inside [] */ char *cp = strchr(lc->gutag, ']'); char rend[96]; size_t ll, k; int n; if (!cp) return; /* length of closing brace and anything else after it */ k = strlen(cp); /* compute the remaining gutag unused */ ll = sizeof(lc->gutag) - lws_ptr_diff_size_t(cp, lc->gutag) - k - 1; if (ll > sizeof(rend) - 1) ll = sizeof(rend) - 1; va_start(ap, format); n = vsnprintf(rend, ll, format, ap); va_end(ap); if ((unsigned int)n > ll) n = (int)ll; /* shove the trailer up by what we added */ memmove(cp + n, cp, k); assert(k + (unsigned int)n < sizeof(lc->gutag)); cp[k + (unsigned int)n] = '\0'; /* copy what we added into place */ memcpy(cp, rend, (unsigned int)n); return; } assert(grp); assert(grp->tag_prefix); /* lc group must have a tag prefix string */ lc->gutag[0] = '['; #if defined(LWS_WITH_SECURE_STREAMS_PROXY_API) /* ie, will have getpid if set */ n += lws_snprintf(&lc->gutag[n], sizeof(lc->gutag) - (unsigned int)n - 1u, "%u|", getpid()); #endif n += lws_snprintf(&lc->gutag[n], sizeof(lc->gutag) - (unsigned int)n - 1u, "%s|%lx|", grp->tag_prefix, (unsigned long)grp->ordinal++); va_start(ap, format); n += vsnprintf(&lc->gutag[n], sizeof(lc->gutag) - (unsigned int)n - 1u, format, ap); va_end(ap); if (n < (int)sizeof(lc->gutag) - 2) { lc->gutag[n++] = ']'; lc->gutag[n++] = '\0'; } else { lc->gutag[sizeof(lc->gutag) - 2] = ']'; lc->gutag[sizeof(lc->gutag) - 1] = '\0'; } lc->us_creation = (uint64_t)lws_now_usecs(); lws_dll2_add_tail(&lc->list, &grp->owner); lwsl_refcount_cx(lc->log_cx, 1); #if defined(LWS_LOG_TAG_LIFECYCLE) lwsl_cx_notice(context, " ++ %s (%d)", lc->gutag, (int)grp->owner.count); #endif } /* * Normally we want to set the tag one time at creation. But sometimes we * don't have enough information at that point to give it a meaningful tag, eg, * it's an accepted, served connection but we haven't read data from it yet * to find out what it wants to be. * * This allows you to append some extra info to the tag in those cases, the * initial tag remains the same on the lhs so it can be tracked correctly. */ void __lws_lc_tag_append(lws_lifecycle_t *lc, const char *app) { int n = (int)strlen(lc->gutag); if (n && lc->gutag[n - 1] == ']') n--; n += lws_snprintf(&lc->gutag[n], sizeof(lc->gutag) - 2u - (unsigned int)n, "|%s]", app); if ((unsigned int)n >= sizeof(lc->gutag) - 2u) { lc->gutag[sizeof(lc->gutag) - 2] = ']'; lc->gutag[sizeof(lc->gutag) - 1] = '\0'; } } /* * Remove instance from group */ void __lws_lc_untag(struct lws_context *context, lws_lifecycle_t *lc) { //lws_lifecycle_group_t *grp; char buf[24]; if (!lc->gutag[0]) { /* we never tagged this object... */ lwsl_cx_err(context, "%s never tagged", lc->gutag); assert(0); return; } if (!lc->list.owner) { /* we already untagged this object... */ lwsl_cx_err(context, "%s untagged twice", lc->gutag); assert(0); return; } //grp = lws_container_of(lc->list.owner, lws_lifecycle_group_t, owner); lws_humanize(buf, sizeof(buf), (uint64_t)lws_now_usecs() - lc->us_creation, humanize_schema_us); #if defined(LWS_LOG_TAG_LIFECYCLE) lwsl_cx_notice(context, " -- %s (%d) %s", lc->gutag, (int)lc->list.owner->count - 1, buf); #endif lws_dll2_remove(&lc->list); lwsl_refcount_cx(lc->log_cx, -1); } const char * lws_lc_tag(lws_lifecycle_t *lc) { return lc->gutag; } int lwsl_timestamp(int level, char *p, size_t len) { #if !defined(LWS_PLAT_OPTEE) && !defined(LWS_WITH_NO_LOGS) time_t o_now; unsigned long long now; struct timeval tv; struct tm *ptm = NULL; #if defined(LWS_HAVE_LOCALTIME_R) struct tm tm; #endif int n; gettimeofday(&tv, NULL); o_now = tv.tv_sec; now = ((unsigned long long)tv.tv_sec * 10000) + (unsigned int)(tv.tv_usec / 100); #if defined(LWS_HAVE_LOCALTIME_R) ptm = localtime_r(&o_now, &tm); #else ptm = localtime(&o_now); #endif p[0] = '\0'; for (n = 0; n < LLL_COUNT; n++) { if (level != (1 << n)) continue; if (ptm) n = lws_snprintf(p, len, "[%04d/%02d/%02d %02d:%02d:%02d:%04d] %c: ", ptm->tm_year + 1900, ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec, (int)(now % 10000), log_level_names[n]); else n = lws_snprintf(p, len, "[%llu:%04d] %c: ", (unsigned long long) now / 10000, (int)(now % 10000), log_level_names[n]); #if defined(LWS_PLAT_FREERTOS) n += lws_snprintf(p + n, len - n, "%6u: ", #if defined(LWS_AMAZON_RTOS) (unsigned int)xPortGetFreeHeapSize()); #else (unsigned int)esp_get_free_heap_size()); #endif #endif return n; } #else p[0] = '\0'; #endif return 0; } #ifndef LWS_PLAT_OPTEE static const char * const colours[] = { "[31;1m", /* LLL_ERR */ "[36;1m", /* LLL_WARN */ "[35;1m", /* LLL_NOTICE */ "[32;1m", /* LLL_INFO */ "[34;1m", /* LLL_DEBUG */ "[33;1m", /* LLL_PARSER */ "[33m", /* LLL_HEADER */ "[33m", /* LLL_EXT */ "[33m", /* LLL_CLIENT */ "[33;1m", /* LLL_LATENCY */ "[0;1m", /* LLL_USER */ "[31m", /* LLL_THREAD */ }; static char tty; static void _lwsl_emit_stderr(int level, const char *line) { int n, m = LWS_ARRAY_SIZE(colours) - 1; if (!tty) tty = (char)(isatty(2) | 2); if (tty == 3) { n = 1 << (LWS_ARRAY_SIZE(colours) - 1); while (n) { if (level & n) break; m--; n >>= 1; } fprintf(stderr, "%c%s%s%c[0m", 27, colours[m], line, 27); } else fprintf(stderr, "%s", line); } void lwsl_emit_stderr(int level, const char *line) { _lwsl_emit_stderr(level, line); } void lwsl_emit_stderr_notimestamp(int level, const char *line) { _lwsl_emit_stderr(level, line); } #if !defined(LWS_PLAT_FREERTOS) && !defined(LWS_PLAT_OPTEE) /* * Helper to emit to a file */ void lws_log_emit_cx_file(struct lws_log_cx *cx, int level, const char *line, size_t len) { int fd = (int)(intptr_t)cx->stg; if (fd >= 0) if (write(fd, line, (unsigned int)len) != (ssize_t)len) fprintf(stderr, "Unable to write log to file\n"); } /* * Helper to use a .refcount_cb to store logs in a file */ void lws_log_use_cx_file(struct lws_log_cx *cx, int _new) { int fd; if (_new > 0 && cx->refcount == 1) { fd = open((const char *)cx->opaque, LWS_O_CREAT | LWS_O_TRUNC | LWS_O_WRONLY, 0600); if (fd < 0) fprintf(stderr, "Unable to open log %s: errno %d\n", (const char *)cx->opaque, errno); cx->stg = (void *)(intptr_t)fd; return; } fd = (int)(intptr_t)cx->stg; if (_new <= 0 && cx->refcount == 0 && fd >= 0) { close(fd); cx->stg = (void *)(intptr_t)-1; } } #endif #endif #if !(defined(LWS_PLAT_OPTEE) && !defined(LWS_WITH_NETWORK)) void __lws_logv(lws_log_cx_t *cx, lws_log_prepend_cx_t prep, void *obj, int filter, const char *_fun, const char *format, va_list vl) { #if LWS_MAX_SMP == 1 && !defined(LWS_WITH_THREADPOOL) /* this is incompatible with multithreaded logging */ static char buf[256]; #else char buf[1024]; #endif char *p = buf, *end = p + sizeof(buf) - 1; lws_log_cx_t *cxp; int n, back = 0; /* * We need to handle NULL wsi etc at the wrappers as gracefully as * possible */ if (!cx) { lws_strncpy(p, "NULL log cx: ", sizeof(buf) - 1); p += 13; /* use the processwide one for lack of anything better */ cx = &log_cx; } cxp = cx; if (!(cx->lll_flags & (uint32_t)filter)) /* * logs may be produced and built in to the code but disabled * at runtime */ return; #if !defined(LWS_LOGS_TIMESTAMP) if (cx->lll_flags & LLLF_LOG_TIMESTAMP) #endif { buf[0] = '\0'; lwsl_timestamp(filter, buf, sizeof(buf)); p += strlen(buf); } /* * prepend parent log ctx content first * top level cx also gets an opportunity to prepend */ while (cxp->parent) { cxp = cxp->parent; back++; } do { int b = back; cxp = cx; while (b--) cxp = cxp->parent; if (cxp->prepend) cxp->prepend(cxp, NULL, &p, end); back--; } while (back > 0); if (prep) prep(cxp, obj, &p, end); if (_fun) p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "%s: ", _fun); /* * The actual log content */ n = vsnprintf(p, lws_ptr_diff_size_t(end, p), format, vl); /* vnsprintf returns what it would have written, even if truncated */ if (p + n > end - 2) { p = end - 5; *p++ = '.'; *p++ = '.'; *p++ = '.'; *p++ = '\n'; *p++ = '\0'; } else if (n > 0) { p += n; if (p[-1] != '\n') *p++ = '\n'; *p = '\0'; } /* * The actual emit */ if (cx->lll_flags & LLLF_LOG_CONTEXT_AWARE) cx->u.emit_cx(cx, filter, buf, lws_ptr_diff_size_t(p, buf)); else cx->u.emit(filter, buf); } void _lws_logv(int filter, const char *format, va_list vl) { __lws_logv(&log_cx, NULL, NULL, filter, NULL, format, vl); } void _lws_log(int filter, const char *format, ...) { va_list ap; va_start(ap, format); __lws_logv(&log_cx, NULL, NULL, filter, NULL, format, ap); va_end(ap); } void _lws_log_cx(lws_log_cx_t *cx, lws_log_prepend_cx_t prep, void *obj, int filter, const char *_fun, const char *format, ...) { va_list ap; if (!cx) cx = &log_cx; va_start(ap, format); __lws_logv(cx, prep, obj, filter, _fun, format, ap); va_end(ap); } #endif void lws_set_log_level(int flags, lws_log_emit_t func) { log_cx.lll_flags = (uint32_t)(flags & (~LLLF_LOG_CONTEXT_AWARE)); if (func) log_cx.u.emit = func; } int lwsl_visible(int level) { return !!(log_cx.lll_flags & (uint32_t)level); } int lwsl_visible_cx(lws_log_cx_t *cx, int level) { return !!(cx->lll_flags & (uint32_t)level); } void lwsl_refcount_cx(lws_log_cx_t *cx, int _new) { #if LWS_MAX_SMP > 1 volatile lws_log_cx_t *vcx = (volatile lws_log_cx_t *)cx; #endif if (!cx) return; #if LWS_MAX_SMP > 1 if (!vcx->inited) { vcx->inited = 1; lws_pthread_mutex_init(&cx->refcount_lock); vcx->inited = 2; } while (vcx->inited != 2) ; lws_pthread_mutex_lock(&cx->refcount_lock); #endif if (_new > 0) cx->refcount++; else { assert(cx->refcount); cx->refcount--; } if (cx->refcount_cb) cx->refcount_cb(cx, _new); #if LWS_MAX_SMP > 1 lws_pthread_mutex_unlock(&cx->refcount_lock); #endif } void lwsl_hexdump_level_cx(lws_log_cx_t *cx, lws_log_prepend_cx_t prep, void *obj, int hexdump_level, const void *vbuf, size_t len) { unsigned char *buf = (unsigned char *)vbuf; unsigned int n; if (!lwsl_visible_cx(cx, hexdump_level)) return; if (!len) { _lws_log_cx(cx, prep, obj, hexdump_level, NULL, "(hexdump: zero length)\n"); return; } if (!vbuf) { _lws_log_cx(cx, prep, obj, hexdump_level, NULL, "(hexdump: NULL ptr)\n"); return; } _lws_log_cx(cx, prep, obj, hexdump_level, NULL, "\n"); for (n = 0; n < len;) { unsigned int start = n, m; char line[80], *p = line; p += lws_snprintf(p, 10, "%04X: ", start); for (m = 0; m < 16 && n < len; m++) p += lws_snprintf(p, 5, "%02X ", buf[n++]); while (m++ < 16) p += lws_snprintf(p, 5, " "); p += lws_snprintf(p, 6, " "); for (m = 0; m < 16 && (start + m) < len; m++) { if (buf[start + m] >= ' ' && buf[start + m] < 127) *p++ = (char)buf[start + m]; else *p++ = '.'; } while (m++ < 16) *p++ = ' '; *p++ = '\n'; *p = '\0'; _lws_log_cx(cx, prep, obj, hexdump_level, NULL, "%s", line); (void)line; } _lws_log_cx(cx, prep, obj, hexdump_level, NULL, "\n"); } void lwsl_hexdump_level(int hexdump_level, const void *vbuf, size_t len) { lwsl_hexdump_level_cx(&log_cx, NULL, NULL, hexdump_level, vbuf, len); } void lwsl_hexdump(const void *vbuf, size_t len) { #if defined(_DEBUG) lwsl_hexdump_level(LLL_DEBUG, vbuf, len); #endif } libwebsockets-4.3.5/lib/core/lws_dll2.c000066400000000000000000000157541476025525100177720ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #ifdef LWS_HAVE_SYS_TYPES_H #include #endif int lws_dll2_is_detached(const struct lws_dll2 *d) { if (d->owner) return 0; if (d->next || d->prev) { lwsl_err("%s: dll2 %p: detached but next %p, prev %p\n", __func__, d, d->next, d->prev); /* * New lws_dll2 objects and removed lws_dll2 objects * have .owner, .next and .prev all set to NULL, so we * can just check .owner to see if we are detached. * * We assert here if we encounter an lws_dll2 in the illegal * state of NULL .owner, but non-NULL in .next or .prev, * it's evidence of corruption, use-after-free, threads * contending on accessing without locking etc. */ assert(0); } return 1; } int lws_dll2_foreach_safe(struct lws_dll2_owner *owner, void *user, int (*cb)(struct lws_dll2 *d, void *user)) { lws_start_foreach_dll_safe(struct lws_dll2 *, p, tp, owner->head) { if (cb(p, user)) return 1; } lws_end_foreach_dll_safe(p, tp); return 0; } void lws_dll2_add_head(struct lws_dll2 *d, struct lws_dll2_owner *owner) { if (!lws_dll2_is_detached(d)) { assert(0); /* only wholly detached things can be added */ return; } /* our next guy is current first guy, if any */ if (owner->head != d) d->next = owner->head; /* if there is a next guy, set his prev ptr to our next ptr */ if (d->next) d->next->prev = d; /* there is nobody previous to us, we are the head */ d->prev = NULL; /* set the first guy to be us */ owner->head = d; if (!owner->tail) owner->tail = d; d->owner = owner; owner->count++; } /* * add us to the list that 'after' is in, just before him */ void lws_dll2_add_before(struct lws_dll2 *d, struct lws_dll2 *after) { lws_dll2_owner_t *owner = after->owner; if (!lws_dll2_is_detached(d)) { assert(0); /* only wholly detached things can be added */ return; } if (lws_dll2_is_detached(after)) { assert(0); /* can't add after something detached */ return; } d->owner = owner; /* we need to point forward to after */ d->next = after; /* we need to point back to after->prev */ d->prev = after->prev; /* guy that used to point to after, needs to point to us */ if (after->prev) after->prev->next = d; else owner->head = d; /* then after needs to point back to us */ after->prev = d; owner->count++; } void lws_dll2_add_tail(struct lws_dll2 *d, struct lws_dll2_owner *owner) { if (!lws_dll2_is_detached(d)) { assert(0); /* only wholly detached things can be added */ return; } /* our previous guy is current last guy */ d->prev = owner->tail; /* if there is a prev guy, set his next ptr to our prev ptr */ if (d->prev) d->prev->next = d; /* our next ptr is NULL */ d->next = NULL; /* set the last guy to be us */ owner->tail = d; /* list head is also us if we're the first */ if (!owner->head) owner->head = d; d->owner = owner; owner->count++; } void lws_dll2_remove(struct lws_dll2 *d) { if (lws_dll2_is_detached(d)) return; /* if we have a next guy, set his prev to our prev */ if (d->next) d->next->prev = d->prev; /* if we have a previous guy, set his next to our next */ if (d->prev) d->prev->next = d->next; /* if we have phead, track the tail and head if it points to us... */ if (d->owner->tail == d) d->owner->tail = d->prev; if (d->owner->head == d) d->owner->head = d->next; d->owner->count--; /* we're out of the list, we should not point anywhere any more */ d->owner = NULL; d->prev = NULL; d->next = NULL; } void lws_dll2_clear(struct lws_dll2 *d) { d->owner = NULL; d->prev = NULL; d->next = NULL; } void lws_dll2_owner_clear(struct lws_dll2_owner *d) { d->head = NULL; d->tail = NULL; d->count = 0; } void lws_dll2_add_sorted_priv(lws_dll2_t *d, lws_dll2_owner_t *own, void *priv, int (*compare3)(void *priv, const lws_dll2_t *d, const lws_dll2_t *i)) { lws_start_foreach_dll_safe(struct lws_dll2 *, p, tp, lws_dll2_get_head(own)) { assert(p != d); if (compare3(priv, p, d) >= 0) { /* drop us in before this guy */ lws_dll2_add_before(d, p); return; } } lws_end_foreach_dll_safe(p, tp); /* * Either nobody on the list yet to compare him to, or he's the * furthest away timeout... stick him at the tail end */ lws_dll2_add_tail(d, own); } void lws_dll2_add_sorted(lws_dll2_t *d, lws_dll2_owner_t *own, int (*compare)(const lws_dll2_t *d, const lws_dll2_t *i)) { lws_start_foreach_dll_safe(struct lws_dll2 *, p, tp, lws_dll2_get_head(own)) { assert(p != d); if (compare(p, d) >= 0) { /* drop us in before this guy */ lws_dll2_add_before(d, p); return; } } lws_end_foreach_dll_safe(p, tp); /* * Either nobody on the list yet to compare him to, or he's the * furthest away timeout... stick him at the tail end */ lws_dll2_add_tail(d, own); } void * _lws_dll2_search_sz_pl(lws_dll2_owner_t *own, const char *name, size_t namelen, size_t dll2_ofs, size_t ptr_ofs) { lws_start_foreach_dll(struct lws_dll2 *, p, lws_dll2_get_head(own)) { uint8_t *ref = ((uint8_t *)p) - dll2_ofs; /* * We have to read the const char * at the computed place and * the string is where that points */ const char *str = *((const char **)(ref + ptr_ofs)); if (str && !strncmp(str, name, namelen) && !str[namelen]) return (void *)ref; } lws_end_foreach_dll(p); return NULL; } #if defined(_DEBUG) void lws_dll2_describe(lws_dll2_owner_t *owner, const char *desc) { #if _LWS_ENABLED_LOGS & LLL_INFO int n = 1; lwsl_info("%s: %s: owner %p: count %d, head %p, tail %p\n", __func__, desc, owner, (int)owner->count, owner->head, owner->tail); lws_start_foreach_dll_safe(struct lws_dll2 *, p, tp, lws_dll2_get_head(owner)) { lwsl_info("%s: %d: %p: owner %p, prev %p, next %p\n", __func__, n++, p, p->owner, p->prev, p->next); } lws_end_foreach_dll_safe(p, tp); #endif } #endif libwebsockets-4.3.5/lib/core/lws_map.c000066400000000000000000000133131476025525100176770ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" typedef struct lws_map_hashtable { struct lws_map *map_owner; /* so items can find map */ lws_dll2_owner_t ho; } lws_map_hashtable_t; struct lws_map { lws_map_info_t info; /* array of info.modulo x lws_map_hashtable_t overallocated */ }; typedef struct lws_map_item { lws_dll2_t list; /* owned by hashtable */ size_t keylen; size_t valuelen; /* key then value is overallocated */ } lws_map_item_t; /* * lwsac-aware allocator */ void * lws_map_alloc_lwsac(struct lws_map *map, size_t x) { return lwsac_use((struct lwsac **)map->info.opaque, x, (size_t)map->info.aux); } void lws_map_free_lwsac(void *v) { } /* * Default allocation / free if none given in info */ void * lws_map_alloc_lws_malloc(struct lws_map *mo, size_t x) { return lws_malloc(x, __func__); } void lws_map_free_lws_free(void *v) { lws_free(v); } /* * This just needs to approximate a flat distribution, it's not related to * security at all. */ lws_map_hash_t lws_map_hash_from_key_default(const lws_map_key_t key, size_t kl) { lws_map_hash_t h = 0x12345678; const uint8_t *u = (const uint8_t *)key; while (kl--) h = (( (((h & 0x1fffffff /* coverity */ ) << 7) | (h >> 25)) + 0xa1b2c3d4) ^ (*u++)) ^ h; return h; } int lws_map_compare_key_default(const lws_map_key_t key1, size_t kl1, const lws_map_value_t key2, size_t kl2) { if (kl1 != kl2) return 1; return memcmp(key1, key2, kl1); } lws_map_t * lws_map_create(const lws_map_info_t *info) { lws_map_t *map; lws_map_alloc_t a = info->_alloc; size_t modulo = info->modulo; lws_map_hashtable_t *ht; size_t size; if (!a) a = lws_map_alloc_lws_malloc; if (!modulo) modulo = 8; size = sizeof(*map) + (modulo * sizeof(lws_map_hashtable_t)); map = lws_malloc(size, __func__); if (!map) return NULL; memset(map, 0, size); map->info = *info; map->info._alloc = a; map->info.modulo = modulo; if (!info->_free) map->info._free = lws_map_free_lws_free; if (!info->_hash) map->info._hash = lws_map_hash_from_key_default; if (!info->_compare) map->info._compare = lws_map_compare_key_default; ht = (lws_map_hashtable_t *)&map[1]; while (modulo--) ht[modulo].map_owner = map; return map; } static int ho_free_item(struct lws_dll2 *d, void *user) { lws_map_item_t *i = lws_container_of(d, lws_map_item_t, list); lws_map_item_destroy(i); return 0; } void lws_map_destroy(lws_map_t **pmap) { lws_map_hashtable_t *ht; lws_map_t *map = *pmap; if (!map) return; /* empty out all the hashtables */ ht = (lws_map_hashtable_t *)&(map[1]); while (map->info.modulo--) { lws_dll2_foreach_safe(&ht->ho, ht, ho_free_item); ht++; } /* free the map itself */ lws_free_set_NULL(*pmap); } lws_map_item_t * lws_map_item_create(lws_map_t *map, const lws_map_key_t key, size_t keylen, const lws_map_value_t value, size_t valuelen) { lws_map_hashtable_t *ht; lws_map_item_t *item; lws_map_hash_t h; size_t hti; uint8_t *u; item = lws_map_item_lookup(map, key, keylen); if (item) lws_map_item_destroy(item); item = map->info._alloc(map, sizeof(*item) + keylen + valuelen); if (!item) return NULL; lws_dll2_clear(&item->list); item->keylen = keylen; item->valuelen = valuelen; u = (uint8_t *)&item[1]; memcpy(u, key, keylen); u += keylen; if (value) memcpy(u, value, valuelen); h = map->info._hash(key, keylen); hti = h % map->info.modulo; ht = (lws_map_hashtable_t *)&map[1]; lws_dll2_add_head(&item->list, &ht[hti].ho); return item; } void lws_map_item_destroy(lws_map_item_t *item) { lws_map_hashtable_t *ht = lws_container_of(item->list.owner, lws_map_hashtable_t, ho); lws_dll2_remove(&item->list); ht->map_owner->info._free(item); } lws_map_item_t * lws_map_item_lookup(lws_map_t *map, const lws_map_key_t key, size_t keylen) { lws_map_hash_t h = map->info._hash(key, keylen); lws_map_hashtable_t *ht = (lws_map_hashtable_t *)&map[1]; lws_start_foreach_dll(struct lws_dll2 *, p, ht[h % map->info.modulo].ho.head) { lws_map_item_t *i = lws_container_of(p, lws_map_item_t, list); if (!map->info._compare(key, keylen, &i[1], i->keylen)) return i; } lws_end_foreach_dll(p); return NULL; } const void * lws_map_item_key(lws_map_item_t *_item) { return ((void *)&_item[1]); } const void * lws_map_item_value(lws_map_item_t *_item) { return (void *)(((uint8_t *)&_item[1]) + _item->keylen); } size_t lws_map_item_key_len(lws_map_item_t *_item) { return _item->keylen; } size_t lws_map_item_value_len(lws_map_item_t *_item) { return _item->valuelen; } libwebsockets-4.3.5/lib/core/private-lib-core.h000066400000000000000000000600041476025525100214050ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #if !defined(__LWS_PRIVATE_LIB_CORE_H__) #define __LWS_PRIVATE_LIB_CORE_H__ #include "lws_config.h" #include "lws_config_private.h" #if defined(LWS_WITH_CGI) && defined(LWS_HAVE_VFORK) && \ !defined(NO_GNU_SOURCE_THIS_TIME) && !defined(_GNU_SOURCE) #define _GNU_SOURCE #endif #if defined(LWS_SUPPRESS_DEPRECATED_API_WARNINGS) #define OPENSSL_SUPPRESS_DEPRECATED #endif /* #if !defined(_POSIX_C_SOURCE) #define _POSIX_C_SOURCE 200112L #endif */ #include #include #include #include #include #include #include #include #ifdef LWS_HAVE_INTTYPES_H #include #endif #include #ifdef LWS_HAVE_SYS_TYPES_H #include #endif #if defined(LWS_HAVE_SYS_STAT_H) && !defined(LWS_PLAT_OPTEE) #include #endif #if LWS_MAX_SMP > 1 || defined(LWS_WITH_SYS_SMD) /* https://stackoverflow.com/questions/33557506/timespec-redefinition-error */ #define HAVE_STRUCT_TIMESPEC #include #else #if !defined(pid_t) && defined(WIN32) #define pid_t int #endif #endif #ifndef LWS_DEF_HEADER_LEN #define LWS_DEF_HEADER_LEN 4096 #endif #ifndef LWS_DEF_HEADER_POOL #define LWS_DEF_HEADER_POOL 4 #endif #ifndef LWS_MAX_PROTOCOLS #define LWS_MAX_PROTOCOLS 5 #endif #ifndef LWS_MAX_EXTENSIONS_ACTIVE #define LWS_MAX_EXTENSIONS_ACTIVE 1 #endif #ifndef LWS_MAX_EXT_OFFERS #define LWS_MAX_EXT_OFFERS 8 #endif #ifndef SPEC_LATEST_SUPPORTED #define SPEC_LATEST_SUPPORTED 13 #endif #ifndef CIPHERS_LIST_STRING #define CIPHERS_LIST_STRING "DEFAULT" #endif #ifndef LWS_SOMAXCONN #define LWS_SOMAXCONN SOMAXCONN #endif #define MAX_WEBSOCKET_04_KEY_LEN 128 #ifndef SYSTEM_RANDOM_FILEPATH #define SYSTEM_RANDOM_FILEPATH "/dev/urandom" #endif #define LWS_H2_RX_SCRATCH_SIZE 512 #define lws_socket_is_valid(x) (x != LWS_SOCK_INVALID) #ifndef LWS_HAVE_STRERROR #define strerror(x) "" #endif /* * * ------ private platform defines ------ * */ #if defined(LWS_PLAT_FREERTOS) #include "private-lib-plat-freertos.h" #else #if defined(WIN32) || defined(_WIN32) #include "private-lib-plat-windows.h" #else #if defined(LWS_PLAT_OPTEE) #include "private-lib-plat.h" #else #include "private-lib-plat-unix.h" #endif #endif #endif /* * * ------ public api ------ * */ #include "libwebsockets.h" /* * lws_dsh */ typedef struct lws_dsh_obj_head { lws_dll2_owner_t owner; size_t total_size; /* for this kind in dsh */ int kind; } lws_dsh_obj_head_t; typedef struct lws_dsh_obj { lws_dll2_t list; /* must be first */ struct lws_dsh *dsh; /* invalid when on free list */ size_t size; /* invalid when on free list */ size_t asize; int kind; /* so we can account at free */ } lws_dsh_obj_t; typedef struct lws_dsh { lws_dll2_t list; uint8_t *buf; lws_dsh_obj_head_t *oha; /* array of object heads/kind */ size_t buffer_size; size_t locally_in_use; size_t locally_free; int count_kinds; uint8_t being_destroyed; /* * Overallocations at create: * * - the buffer itself * - the object heads array */ } lws_dsh_t; /* * * ------ lifecycle defines ------ * */ typedef struct lws_lifecycle_group { lws_dll2_owner_t owner; /* active count / list */ uint64_t ordinal; /* monotonic uid count */ const char *tag_prefix; /* eg, "wsi" */ } lws_lifecycle_group_t; typedef struct lws_lifecycle { #if defined(LWS_WITH_SECURE_STREAMS_PROXY_API) /* we append parent streams on the tag */ char gutag[96]; /* object unique tag + relationship info */ #else char gutag[64]; #endif lws_dll2_t list; /* group list membership */ uint64_t us_creation; /* creation timestamp */ lws_log_cx_t *log_cx; } lws_lifecycle_t; void __lws_lc_tag(struct lws_context *cx, lws_lifecycle_group_t *grp, lws_lifecycle_t *lc, const char *format, ...); void __lws_lc_tag_append(lws_lifecycle_t *lc, const char *app); void __lws_lc_untag(struct lws_context *cx, lws_lifecycle_t *lc); const char * lws_lc_tag(lws_lifecycle_t *lc); extern lws_log_cx_t log_cx; /* * Generic bidi tx credit management */ struct lws_tx_credit { int32_t tx_cr; /* our credit to write peer */ int32_t peer_tx_cr_est; /* peer's credit to write us */ int32_t manual_initial_tx_credit; uint8_t skint; /* unable to write anything */ uint8_t manual; }; #ifdef LWS_WITH_IPV6 #if defined(WIN32) || defined(_WIN32) #include #else #include #endif #endif #undef X509_NAME /* * All lws_tls...() functions must return this type, converting the * native backend result and doing the extra work to determine which one * as needed. * * Native TLS backend return codes are NOT ALLOWED outside the backend. * * Non-SSL mode also uses these types. */ enum lws_ssl_capable_status { LWS_SSL_CAPABLE_ERROR = -1, /* it failed */ LWS_SSL_CAPABLE_DONE = 0, /* it succeeded */ LWS_SSL_CAPABLE_MORE_SERVICE_READ = -2, /* retry WANT_READ */ LWS_SSL_CAPABLE_MORE_SERVICE_WRITE = -3, /* retry WANT_WRITE */ LWS_SSL_CAPABLE_MORE_SERVICE = -4, /* general retry */ }; enum lws_context_destroy { LWSCD_NO_DESTROY, /* running */ LWSCD_PT_WAS_DEFERRED, /* destroy from inside service */ LWSCD_PT_WAIT_ALL_DESTROYED, /* libuv ends up here later */ LWSCD_FINALIZATION /* the final destruction of context */ }; #if defined(LWS_WITH_TLS) #include "private-lib-tls.h" #endif #if defined(WIN32) || defined(_WIN32) // Visual studio older than 2015 and WIN_CE has only _stricmp #if (defined(_MSC_VER) && _MSC_VER < 1900) || defined(_WIN32_WCE) #define strcasecmp _stricmp #define strncasecmp _strnicmp #elif !defined(__MINGW32__) #define strcasecmp stricmp #define strncasecmp strnicmp #endif #define getdtablesize() 30000 #endif #ifndef LWS_ARRAY_SIZE #define LWS_ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) #endif #ifdef __cplusplus extern "C" { #endif #define lws_safe_modulo(_a, _b) ((_b) ? ((_a) % (_b)) : 0) #if defined(__clang__) #define lws_memory_barrier() __sync_synchronize() #elif defined(__GNUC__) #define lws_memory_barrier() __sync_synchronize() #else #define lws_memory_barrier() #endif struct lws_ring { void *buf; void (*destroy_element)(void *element); uint32_t buflen; uint32_t element_len; uint32_t head; uint32_t oldest_tail; }; struct lws_protocols; struct lws; #if defined(LWS_WITH_NETWORK) /* network */ #include "private-lib-event-libs.h" #if defined(LWS_WITH_SECURE_STREAMS) #include "private-lib-secure-streams.h" #endif #if defined(LWS_WITH_SYS_SMD) #include "private-lib-system-smd.h" #endif #if defined(LWS_WITH_SYS_FAULT_INJECTION) #include "private-lib-system-fault-injection.h" #endif #include "private-lib-system-metrics.h" struct lws_foreign_thread_pollfd { struct lws_foreign_thread_pollfd *next; int fd_index; int _and; int _or; }; #endif /* network */ #if defined(LWS_WITH_NETWORK) #include "private-lib-core-net.h" #endif struct lws_system_blob { union { struct lws_buflist *bl; struct { const uint8_t *ptr; size_t len; } direct; } u; char is_direct; }; typedef struct lws_attach_item { lws_dll2_t list; lws_attach_cb_t cb; void *opaque; lws_system_states_t state; } lws_attach_item_t; /* * These are the context's lifecycle group indexes that exist in this build * configuration. If you add some, make sure to also add the tag_prefix in * context.c context creation with matching preprocessor conditionals. */ enum { LWSLCG_WSI, /* generic wsi, eg, pipe, listen */ LWSLCG_VHOST, LWSLCG_WSI_SERVER, /* server wsi */ #if defined(LWS_ROLE_H2) || defined(LWS_ROLE_MQTT) LWSLCG_WSI_MUX, /* a mux child wsi */ #endif #if defined(LWS_WITH_CLIENT) LWSLCG_WSI_CLIENT, /* client wsi */ #endif #if defined(LWS_WITH_SECURE_STREAMS) #if defined(LWS_WITH_CLIENT) LWSLCG_SS_CLIENT, /* secstream client handle */ #endif #if defined(LWS_WITH_SERVER) LWSLCG_SS_SERVER, /* secstream server handle */ #endif #if defined(LWS_WITH_CLIENT) LWSLCG_WSI_SS_CLIENT, /* wsi bound to ss client handle */ #endif #if defined(LWS_WITH_SERVER) LWSLCG_WSI_SS_SERVER, /* wsi bound to ss server handle */ #endif #endif #if defined(LWS_WITH_SECURE_STREAMS_PROXY_API) #if defined(LWS_WITH_CLIENT) LWSLCG_SSP_CLIENT, /* SSPC handle client connection to proxy */ #endif #if defined(LWS_WITH_SERVER) LWSLCG_SSP_ONWARD, /* SS handle at proxy for onward conn */ #endif #if defined(LWS_WITH_CLIENT) LWSLCG_WSI_SSP_CLIENT, /* wsi bound to SSPC cli conn to proxy */ #endif #if defined(LWS_WITH_SERVER) LWSLCG_WSI_SSP_ONWARD, /* wsi bound to Proxy onward connection */ #endif #endif /* always last */ LWSLCG_COUNT }; /* * the rest is managed per-context, that includes * * - processwide single fd -> wsi lookup * - contextwide headers pool */ struct lws_context { #if defined(LWS_WITH_SERVER) char canonical_hostname[96]; #endif #if defined(LWS_WITH_FILE_OPS) struct lws_plat_file_ops fops_platform; #endif #if defined(LWS_WITH_ZIP_FOPS) struct lws_plat_file_ops fops_zip; #endif lws_system_blob_t system_blobs[LWS_SYSBLOB_TYPE_COUNT]; #if defined(LWS_WITH_SYS_SMD) lws_smd_t smd; #endif #if defined(LWS_WITH_SECURE_STREAMS) struct lws_ss_handle *ss_cpd; #endif lws_sorted_usec_list_t sul_cpd_defer; #if defined(LWS_WITH_NETWORK) struct lws_context_per_thread pt[LWS_MAX_SMP]; lws_retry_bo_t default_retry; lws_sorted_usec_list_t sul_system_state; lws_lifecycle_group_t lcg[LWSLCG_COUNT]; const struct lws_protocols *protocols_copy; #if defined(LWS_WITH_NETLINK) lws_sorted_usec_list_t sul_nl_coldplug; /* process can only have one netlink socket, have to do it in ctx */ lws_dll2_owner_t routing_table; struct lws *netlink; #endif #if defined(LWS_PLAT_FREERTOS) struct sockaddr_in frt_pipe_si; #endif #if defined(LWS_WITH_HTTP2) struct http2_settings set; #endif #if LWS_MAX_SMP > 1 struct lws_mutex_refcount mr; #endif #if defined(LWS_WITH_SYS_METRICS) lws_dll2_owner_t owner_mtr_dynpol; /**< owner for lws_metric_policy_dyn_t (dynamic part of metric pols) */ lws_dll2_owner_t owner_mtr_no_pol; /**< owner for lws_metric_pub_t with no policy to bind to */ #endif #if defined(LWS_WITH_NETWORK) /* * LWS_WITH_NETWORK =====> */ lws_dll2_owner_t owner_vh_being_destroyed; lws_metric_t *mt_service; /* doing service */ const lws_metric_policy_t *metrics_policies; const char *metrics_prefix; #if defined(LWS_WITH_SYS_METRICS) && defined(LWS_WITH_CLIENT) lws_metric_t *mt_conn_tcp; /* client tcp conns */ lws_metric_t *mt_conn_tls; /* client tcp conns */ lws_metric_t *mt_conn_dns; /* client dns external lookups */ lws_metric_t *mth_conn_failures; /* histogram of conn failure reasons */ #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) lws_metric_t *mt_http_txn; /* client http transaction */ #endif #if defined(LWS_WITH_SYS_ASYNC_DNS) lws_metric_t *mt_adns_cache; /* async dns lookup lat */ #endif #if defined(LWS_WITH_SECURE_STREAMS) lws_metric_t *mth_ss_conn; /* SS connection outcomes */ #endif #if defined(LWS_WITH_SECURE_STREAMS_PROXY_API) lws_metric_t *mt_ss_cliprox_conn; /* SS cli->prox conn */ lws_metric_t *mt_ss_cliprox_paylat; /* cli->prox payload latency */ lws_metric_t *mt_ss_proxcli_paylat; /* prox->cli payload latency */ #endif #endif /* client */ #if defined(LWS_WITH_SERVER) lws_metric_t *mth_srv; #endif #if defined(LWS_WITH_EVENT_LIBS) struct lws_plugin *evlib_plugin_list; void *evlib_ctx; /* overallocated */ #endif #if defined(LWS_WITH_TLS) struct lws_context_tls tls; #if defined (LWS_WITH_TLS_JIT_TRUST) lws_dll2_owner_t jit_inflight; /* ongoing sync or async jit trust lookups */ struct lws_cache_ttl_lru *trust_cache; /* caches host -> truncated trust SKID mappings */ #endif #endif #if defined(LWS_WITH_DRIVERS) lws_netdevs_t netdevs; #endif #if defined(LWS_WITH_SYS_ASYNC_DNS) lws_async_dns_t async_dns; #endif #if defined(LWS_WITH_SYS_FAULT_INJECTION) lws_fi_ctx_t fic; /**< Toplevel Fault Injection ctx */ #endif #if defined(LWS_WITH_CACHE_NSCOOKIEJAR) && defined(LWS_WITH_CLIENT) struct lws_cache_ttl_lru *l1, *nsc; #endif #if defined(LWS_WITH_SYS_NTPCLIENT) void *ntpclient_priv; #endif #if defined(LWS_WITH_SECURE_STREAMS) struct lws_ss_handle *hss_fetch_policy; #if defined(LWS_WITH_SECURE_STREAMS_SYS_AUTH_API_AMAZON_COM) struct lws_ss_handle *hss_auth; lws_sorted_usec_list_t sul_api_amazon_com; lws_sorted_usec_list_t sul_api_amazon_com_kick; #endif #if !defined(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY) struct lws_ss_x509 *server_der_list; #endif #endif #if defined(LWS_WITH_SYS_STATE) lws_state_manager_t mgr_system; lws_state_notify_link_t protocols_notify; #endif #if defined (LWS_WITH_SYS_DHCP_CLIENT) lws_dll2_owner_t dhcpc_owner; /**< list of ifaces with dhcpc */ #endif /* pointers */ struct lws_vhost *vhost_list; struct lws_vhost *no_listener_vhost_list; struct lws_vhost *vhost_pending_destruction_list; struct lws_vhost *vhost_system; #if defined(LWS_WITH_SERVER) const char *server_string; #endif const struct lws_event_loop_ops *event_loop_ops; #endif #if defined(LWS_WITH_TLS) const struct lws_tls_ops *tls_ops; #endif #if defined(LWS_WITH_PLUGINS) struct lws_plugin *plugin_list; #endif #ifdef _WIN32 /* different implementation between unix and windows */ struct lws_fd_hashtable fd_hashtable[FD_HASHTABLE_MODULUS]; #else struct lws **lws_lookup; #endif /* * <====== LWS_WITH_NETWORK end */ #endif /* NETWORK */ lws_log_cx_t *log_cx; const char *name; #if defined(LWS_WITH_SECURE_STREAMS_PROXY_API) const char *ss_proxy_bind; const char *ss_proxy_address; #endif #if defined(LWS_WITH_FILE_OPS) const struct lws_plat_file_ops *fops; #endif struct lws_context **pcontext_finalize; #if !defined(LWS_PLAT_FREERTOS) const char *username, *groupname; #endif #if defined(LWS_WITH_MBEDTLS) mbedtls_entropy_context mec; mbedtls_ctr_drbg_context mcdc; #endif #if defined(LWS_WITH_THREADPOOL) && defined(LWS_HAVE_PTHREAD_H) struct lws_threadpool *tp_list_head; #endif #if defined(LWS_WITH_PEER_LIMITS) struct lws_peer **pl_hash_table; struct lws_peer *peer_wait_list; lws_peer_limits_notify_t pl_notify_cb; time_t next_cull; #endif const lws_system_ops_t *system_ops; #if defined(LWS_WITH_SECURE_STREAMS) #if !defined(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY) const char *pss_policies_json; struct lwsac *ac_policy; void *pol_args; #endif const lws_ss_policy_t *pss_policies; const lws_ss_auth_t *pss_auths; #if defined(LWS_WITH_SSPLUGINS) const lws_ss_plugin_t **pss_plugins; #endif #endif void *external_baggage_free_on_destroy; const struct lws_token_limits *token_limits; void *user_space; #if defined(LWS_WITH_SERVER) const struct lws_protocol_vhost_options *reject_service_keywords; lws_reload_func deprecation_cb; #endif #if !defined(LWS_PLAT_FREERTOS) void (*eventlib_signal_cb)(void *event_lib_handle, int signum); #endif #if defined(LWS_HAVE_SYS_CAPABILITY_H) && defined(LWS_HAVE_LIBCAP) cap_value_t caps[4]; char count_caps; #endif lws_usec_t time_up; /* monotonic */ #if defined(LWS_WITH_SYS_SMD) lws_usec_t smd_ttl_us; #endif uint64_t options; time_t last_ws_ping_pong_check_s; #if defined(LWS_WITH_SECURE_STREAMS) time_t last_policy; #endif #if defined(LWS_PLAT_FREERTOS) unsigned long time_last_state_dump; uint32_t last_free_heap; #endif unsigned int max_fds; #if !defined(LWS_NO_DAEMONIZE) pid_t started_with_parent; #endif #if !defined(LWS_PLAT_FREERTOS) uid_t uid; gid_t gid; int fd_random; int count_cgi_spawned; #endif unsigned int fd_limit_per_thread; unsigned int timeout_secs; unsigned int pt_serv_buf_size; unsigned int max_http_header_data; unsigned int max_http_header_pool; int simultaneous_ssl_restriction; int simultaneous_ssl; int simultaneous_ssl_handshake_restriction; int simultaneous_ssl_handshake; #if defined(LWS_WITH_TLS_JIT_TRUST) int vh_idle_grace_ms; #endif #if defined(LWS_WITH_PEER_LIMITS) uint32_t pl_hash_elements; /* protected by context->lock */ uint32_t count_peers; /* protected by context->lock */ unsigned short ip_limit_ah; unsigned short ip_limit_wsi; #endif #if defined(LWS_WITH_SYS_SMD) uint16_t smd_queue_depth; #endif #if defined(LWS_WITH_NETLINK) lws_route_uidx_t route_uidx; #endif char tls_gate_accepts; unsigned int deprecated:1; unsigned int inside_context_destroy:1; unsigned int being_destroyed:1; unsigned int service_no_longer_possible:1; unsigned int being_destroyed2:1; unsigned int requested_stop_internal_loops:1; unsigned int protocol_init_done:1; unsigned int doing_protocol_init:1; unsigned int done_protocol_destroy_cb:1; unsigned int evlib_finalize_destroy_after_int_loops_stop:1; unsigned int max_fds_unrelated_to_ulimit:1; unsigned int policy_updated:1; #if defined(LWS_WITH_NETLINK) unsigned int nl_initial_done:1; #endif unsigned short count_threads; unsigned short undestroyed_threads; short plugin_protocol_count; short plugin_extension_count; short server_string_len; unsigned short deprecation_pending_listen_close_count; #if defined(LWS_WITH_SECURE_STREAMS_PROXY_API) uint16_t ss_proxy_port; #endif /* 0 if not known, else us resolution of the poll wait */ uint16_t us_wait_resolution; uint8_t max_fi; uint8_t captive_portal_detect; uint8_t captive_portal_detect_type; uint8_t destroy_state; /* enum lws_context_destroy */ }; #define lws_get_context_protocol(ctx, x) ctx->vhost_list->protocols[x] #define lws_get_vh_protocol(vh, x) vh->protocols[x] int lws_jws_base64_enc(const char *in, size_t in_len, char *out, size_t out_max); void lws_vhost_destroy1(struct lws_vhost *vh); #if defined(LWS_WITH_CACHE_NSCOOKIEJAR) && defined(LWS_WITH_CLIENT) int lws_parse_set_cookie(struct lws *wsi); int lws_cookie_send_cookies(struct lws *wsi, char **pp, char *end); #endif #if defined(LWS_PLAT_FREERTOS) int lws_find_string_in_file(const char *filename, const char *str, int stringlen); #endif signed char char_to_hex(const char c); #if defined(LWS_WITH_NETWORK) int lws_system_do_attach(struct lws_context_per_thread *pt); #endif struct lws_buflist { struct lws_buflist *next; size_t len; size_t pos; }; char * lws_strdup(const char *s); int lws_b64_selftest(void); #ifndef LWS_NO_DAEMONIZE pid_t get_daemonize_pid(); #else #define get_daemonize_pid() (0) #endif void lwsl_emit_stderr(int level, const char *line); #if !defined(LWS_WITH_TLS) #define LWS_SSL_ENABLED(context) (0) #define lws_context_init_server_ssl(_a, _b) (0) #define lws_ssl_destroy(_a) #define lws_context_init_alpn(_a) #define lws_ssl_capable_read lws_ssl_capable_read_no_ssl #define lws_ssl_capable_write lws_ssl_capable_write_no_ssl #define lws_ssl_pending lws_ssl_pending_no_ssl #define lws_server_socket_service_ssl(_b, _c, _d) (0) #define lws_ssl_close(_a) (0) #define lws_ssl_context_destroy(_a) #define lws_ssl_SSL_CTX_destroy(_a) #define lws_ssl_remove_wsi_from_buffered_list(_a) #define __lws_ssl_remove_wsi_from_buffered_list(_a) #define lws_context_init_ssl_library(_a, _b) #define lws_context_deinit_ssl_library(_a) #define lws_tls_check_all_cert_lifetimes(_a) #define lws_tls_acme_sni_cert_destroy(_a) #endif #if LWS_MAX_SMP > 1 #define lws_context_lock(c, reason) lws_mutex_refcount_lock(&c->mr, reason) #define lws_context_unlock(c) lws_mutex_refcount_unlock(&c->mr) #define lws_context_assert_lock_held(c) lws_mutex_refcount_assert_held(&c->mr) #define lws_vhost_assert_lock_held(v) lws_mutex_refcount_assert_held(&v->mr) /* enforce context lock held */ #define lws_vhost_lock(v) lws_mutex_refcount_lock(&v->mr, __func__) #define lws_vhost_unlock(v) lws_mutex_refcount_unlock(&v->mr) #else #define lws_pt_mutex_init(_a) (void)(_a) #define lws_pt_mutex_destroy(_a) (void)(_a) #define lws_pt_lock(_a, b) (void)(_a) #define lws_pt_assert_lock_held(_a) (void)(_a) #define lws_pt_unlock(_a) (void)(_a) #define lws_context_lock(_a, _b) (void)(_a) #define lws_context_unlock(_a) (void)(_a) #define lws_context_assert_lock_held(_a) (void)(_a) #define lws_vhost_assert_lock_held(_a) (void)(_a) #define lws_vhost_lock(_a) (void)(_a) #define lws_vhost_unlock(_a) (void)(_a) #define lws_pt_stats_lock(_a) (void)(_a) #define lws_pt_stats_unlock(_a) (void)(_a) #endif int LWS_WARN_UNUSED_RESULT lws_ssl_capable_read_no_ssl(struct lws *wsi, unsigned char *buf, size_t len); int LWS_WARN_UNUSED_RESULT lws_ssl_capable_write_no_ssl(struct lws *wsi, unsigned char *buf, size_t len); int LWS_WARN_UNUSED_RESULT lws_ssl_pending_no_ssl(struct lws *wsi); int lws_tls_check_cert_lifetime(struct lws_vhost *vhost); int lws_jws_selftest(void); int lws_jwe_selftest(void); int lws_protocol_init(struct lws_context *context); int lws_bind_protocol(struct lws *wsi, const struct lws_protocols *p, const char *reason); const struct lws_protocol_vhost_options * lws_vhost_protocol_options(struct lws_vhost *vh, const char *name); const struct lws_http_mount * lws_find_mount(struct lws *wsi, const char *uri_ptr, int uri_len); #ifdef LWS_WITH_HTTP2 int lws_wsi_is_h2(struct lws *wsi); #endif /* * custom allocator */ void * lws_realloc(void *ptr, size_t size, const char *reason); void * LWS_WARN_UNUSED_RESULT lws_zalloc(size_t size, const char *reason); #ifdef LWS_PLAT_OPTEE void *lws_malloc(size_t size, const char *reason); void lws_free(void *p); #define lws_free_set_NULL(P) do { lws_free(P); (P) = NULL; } while(0) #else #define lws_malloc(S, R) lws_realloc(NULL, S, R) #define lws_free(P) lws_realloc(P, 0, "lws_free") #define lws_free_set_NULL(P) do { lws_realloc(P, 0, "free"); (P) = NULL; } while(0) #endif int __lws_create_event_pipes(struct lws_context *context); int lws_plat_apply_FD_CLOEXEC(int n); const struct lws_plat_file_ops * lws_vfs_select_fops(const struct lws_plat_file_ops *fops, const char *vfs_path, const char **vpath); /* lws_plat_ */ int lws_plat_context_early_init(void); void lws_plat_context_early_destroy(struct lws_context *context); void lws_plat_context_late_destroy(struct lws_context *context); int lws_plat_init(struct lws_context *context, const struct lws_context_creation_info *info); int lws_plat_drop_app_privileges(struct lws_context *context, int actually_drop); #if defined(LWS_WITH_UNIX_SOCK) && !defined(WIN32) int lws_plat_user_colon_group_to_ids(const char *u_colon_g, uid_t *puid, gid_t *pgid); #endif int lws_plat_ntpclient_config(struct lws_context *context); int lws_plat_ifname_to_hwaddr(int fd, const char *ifname, uint8_t *hwaddr, int len); int lws_plat_vhost_tls_client_ctx_init(struct lws_vhost *vhost); int lws_check_byte_utf8(unsigned char state, unsigned char c); int LWS_WARN_UNUSED_RESULT lws_check_utf8(unsigned char *state, unsigned char *buf, size_t len); int alloc_file(struct lws_context *context, const char *filename, uint8_t **buf, lws_filepos_t *amount); int lws_lec_scratch(lws_lec_pctx_t *ctx); void lws_lec_signed(lws_lec_pctx_t *ctx, int64_t num); int lws_cose_key_checks(const lws_cose_key_t *key, int64_t kty, int64_t alg, int key_op, const char *crv); void lws_msleep(unsigned int); void lws_context_destroy2(struct lws_context *context); #if !defined(PRIu64) #define PRIu64 "llu" #endif #if defined(LWS_WITH_ABSTRACT) #include "private-lib-abstract.h" #endif #ifdef __cplusplus }; #endif #endif libwebsockets-4.3.5/lib/core/vfs.c000066400000000000000000000064601476025525100170400ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" void lws_set_fops(struct lws_context *context, const struct lws_plat_file_ops *fops) { context->fops = fops; } lws_filepos_t lws_vfs_tell(lws_fop_fd_t fop_fd) { return fop_fd->pos; } lws_filepos_t lws_vfs_get_length(lws_fop_fd_t fop_fd) { return fop_fd->len; } uint32_t lws_vfs_get_mod_time(lws_fop_fd_t fop_fd) { return fop_fd->mod_time; } lws_fileofs_t lws_vfs_file_seek_set(lws_fop_fd_t fop_fd, lws_fileofs_t offset) { lws_fileofs_t ofs; ofs = fop_fd->fops->LWS_FOP_SEEK_CUR(fop_fd, offset - (lws_fileofs_t)fop_fd->pos); return ofs; } lws_fileofs_t lws_vfs_file_seek_end(lws_fop_fd_t fop_fd, lws_fileofs_t offset) { return fop_fd->fops->LWS_FOP_SEEK_CUR(fop_fd, (lws_fileofs_t)fop_fd->len + (lws_fileofs_t)fop_fd->pos + offset); } const struct lws_plat_file_ops * lws_vfs_select_fops(const struct lws_plat_file_ops *fops, const char *vfs_path, const char **vpath) { const struct lws_plat_file_ops *pf; const char *p = vfs_path; int n; *vpath = NULL; /* no non-platform fops, just use that */ if (!fops->next) return fops; /* * scan the vfs path looking for indications we are to be * handled by a specific fops */ while (p && *p) { if (*p != '/') { p++; continue; } /* the first one is always platform fops, so skip */ pf = fops->next; while (pf) { n = 0; while (n < (int)LWS_ARRAY_SIZE(pf->fi) && pf->fi[n].sig) { if (p >= vfs_path + pf->fi[n].len) if (!strncmp(p - (pf->fi[n].len - 1), pf->fi[n].sig, (unsigned int)(pf->fi[n].len - 1))) { *vpath = p + 1; return pf; } n++; } pf = pf->next; } p++; } return fops; } lws_fop_fd_t LWS_WARN_UNUSED_RESULT lws_vfs_file_open(const struct lws_plat_file_ops *fops, const char *vfs_path, lws_fop_flags_t *flags) { const char *vpath = ""; const struct lws_plat_file_ops *selected; selected = lws_vfs_select_fops(fops, vfs_path, &vpath); return selected->LWS_FOP_OPEN(fops, vfs_path, vpath, flags); } struct lws_plat_file_ops * lws_get_fops(struct lws_context *context) { return (struct lws_plat_file_ops *)context->fops; } libwebsockets-4.3.5/lib/cose/000077500000000000000000000000001476025525100160715ustar00rootroot00000000000000libwebsockets-4.3.5/lib/cose/CMakeLists.txt000066400000000000000000000026351476025525100206370ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # if (LWS_WITH_COSE) list(APPEND SOURCES cose/cose_key.c cose/cose_validate.c cose/cose_validate_alg.c cose/cose_sign.c cose/cose_sign_alg.c ) endif() # # Keep explicit parent scope exports at end # exports_to_parent_scope() libwebsockets-4.3.5/lib/cose/cose_key.c000066400000000000000000000675311476025525100200520ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * cose_key code */ #include "private-lib-core.h" //#include "private-lib-jose.h" #define lwsl_cose lwsl_notice #define lwsl_hexdump_cose lwsl_hexdump_notice // #define VERBOSE 1 struct lws_cose_key_parse_state { struct lws_cose_key *ck; /**< single key created here if pkey_set is NULL */ char buf[(8192 / 8) + 1]; /**< enough for 8Kb key, only needed during parse */ lws_cose_key_import_callback per_key_cb; lws_dll2_owner_t *pkey_set; /**< if non-NULL, expects a [ key set ], else single key */ void *user; size_t pos; int cose_state; cose_param_t seen[16]; int seen_count; int gencrypto_eidx; int meta_idx; unsigned short possible; }; /* * A COSE key representation is a CBOR map with a specified structure. The * keys are * * LWSCOSE_WKK_KTY MUST int / tstr * LWSCOSE_WKK_KID OPT bstr * LWSCOSE_WKK_ALG OPT int / tstr * LWSCOSE_WKK_KEY_OPS OPT [ + (int / tstr) ] * LWSCOSE_WKK_BASE_IV OPT bstr */ #if defined(_DEBUG) static const char *meta_names[] = { "kty", "kid", "use", "key_ops", "base_iv", "alg" }; static const char *oct_names[] = { "k" }; static const char *rsa_names[] = { "e", "n", "d", "p", "q", "dp", "dq", "qi", "other", "ri", "di", "ti" }; static const char *ec_names[] = { "crv", "x", "d", "y", }; void lws_cose_key_dump(const struct lws_cose_key *ck) { const char **enames; char hex[2048]; int elems; int n; (void)enames; (void)meta_names; switch (ck->gencrypto_kty) { case LWS_GENCRYPTO_KTY_OCT: elems = LWS_GENCRYPTO_OCT_KEYEL_COUNT; enames = oct_names; break; case LWS_GENCRYPTO_KTY_RSA: elems = LWS_GENCRYPTO_RSA_KEYEL_COUNT; enames = rsa_names; break; case LWS_GENCRYPTO_KTY_EC: elems = LWS_GENCRYPTO_EC_KEYEL_COUNT; enames = ec_names; break; default: lwsl_err("%s: jwk %p: unknown type\n", __func__, ck); return; } lwsl_cose("%s: cose_key %p, kty: %lld (gc %d)\n", __func__, ck, (long long)ck->kty, ck->gencrypto_kty); for (n = 0; n < LWS_COUNT_COSE_KEY_ELEMENTS; n++) { if (ck->meta[n].buf) { lws_hex_from_byte_array(ck->meta[n].buf, ck->meta[n].len, hex, sizeof(hex)); lwsl_cose(" meta: %s: %s\n", meta_names[n], hex); } } for (n = 0; n < elems; n++) { if (ck->e[n].buf) { lws_hex_from_byte_array(ck->e[n].buf, ck->e[n].len, hex, sizeof(hex)); lwsl_cose(" e: %s: %s\n", enames[n], hex); } } } #endif static const char * const kty_strings[] = { NULL, "OKP", "EC2", "RSA", "SYMMETRIC", "HSS_LMS", "WALNUTDSA" }; int lws_cose_key_checks(const lws_cose_key_t *key, int64_t kty, cose_param_t alg, int key_op, const char *crv) { const struct lws_gencrypto_keyelem *ke; /* * we ourselves have to have a very clear idea what we need, even if * matches are optional in the key itself */ assert(key); assert(kty); assert(alg); assert(key_op); assert((kty != LWSCOSE_WKKTV_OKP && kty != LWSCOSE_WKKTV_EC2) || crv); /* RFC8152 8.1: * * The 'kty' field MUST be present, and it MUST be '...'. * * But kty can come as an int or a string, but we convert well-known * kty ints to the corresponding string representation at key import */ if (!kty || kty >= (int)LWS_ARRAY_SIZE(kty_strings)) { /* we don't understand it */ lwsl_notice("%s: unknown kty %d\n", __func__, (int)kty); goto bail; } ke = &key->meta[COSEKEY_META_KTY]; if (ke->buf && (strlen(kty_strings[kty]) != ke->len || memcmp(kty_strings[kty], ke->buf, ke->len))) { lwsl_notice("%s: key is of wrong kty\n", __func__); lwsl_hexdump_notice(ke->buf, ke->len); goto bail; } /* ... * If the 'alg' field is present, it MUST match the ... signature * algorithm being used. * * We attempt to convert key alg text representations to a well-known * index, if we can't, then we don't know the alg anyway and should fail * it */ if (!key->cose_alg && key->meta[COSEKEY_META_ALG].buf) { lwsl_notice("%s: alg fail 1\n", __func__); goto bail; } if (key->cose_alg && /* accept it being absent altogether */ key->cose_alg != alg) { lwsl_notice("%s: alg fail 2\n", __func__); goto bail; } /* ... * If the 'key_ops' field is present, it MUST include 'sign' / 'verify' * when creating /verifying an ... signature. */ ke = &key->meta[COSEKEY_META_KEY_OPS]; if (ke->buf && ke->len) { uint32_t n; for (n = 0; n < ke->len; n++) if (ke->buf[n] == key_op) break; if (n == ke->len) goto bail; } /* * If it's related to EC, check there is a curve associated with the * key, and check it is what we expect */ if (kty == LWSCOSE_WKKTV_OKP || kty == LWSCOSE_WKKTV_EC2) { ke = &key->e[LWS_GENCRYPTO_EC_KEYEL_CRV]; if (!ke->buf) goto bail; if (ke->len != strlen(crv)) goto bail; if (memcmp(ke->buf, crv, ke->len)) goto bail; } /* We're willing to use this key for this operation */ return 0; bail: lwsl_notice("%s: key rejected\n", __func__); return 1; } static int lws_ck_set_el(struct lws_gencrypto_keyelem *e, char *in, size_t len) { e->buf = lws_malloc(len + 1, "ck"); if (!e->buf) return -1; memcpy(e->buf, in, len); e->buf[len] = '\0'; e->len = (uint32_t)len; return 0; } static struct { const char *curve; cose_param_t cose_id; } cose_curves[] = { { "P-256", LWSCOSE_WKEC_P256 }, { "P-384", LWSCOSE_WKEC_P384 }, { "P-521", LWSCOSE_WKEC_P521 }, { "X25519", LWSCOSE_WKEC_X25519 }, { "X448", LWSCOSE_WKEC_X448 }, { "ED25519", LWSCOSE_WKEC_ED25519 }, { "ED448", LWSCOSE_WKEC_ED448 }, { "SECP256K1", LWSCOSE_WKEC_SECP256K1 }, }; /* 0 means failed */ static cose_param_t lws_cose_curve_name_to_id(const char *curve) { int n; for (n = 0; n < (int)LWS_ARRAY_SIZE(cose_curves); n++) if (!strcmp(cose_curves[n].curve, curve)) return cose_curves[n].cose_id; return 0; } static const char * lws_cose_curve_id_to_name(cose_param_t id) { int n; for (n = 0; n < (int)LWS_ARRAY_SIZE(cose_curves); n++) if (cose_curves[n].cose_id == id) return cose_curves[n].curve; return 0; } static const char * const wk_algs[] = { "ES256", "ES384", "ES512" }; static signed char wk_alg_indexes[] = { LWSCOSE_WKAECDSA_ALG_ES256, LWSCOSE_WKAECDSA_ALG_ES384, LWSCOSE_WKAECDSA_ALG_ES512, }; static signed char cb_cose_key(struct lecp_ctx *ctx, char reason) { struct lws_cose_key_parse_state *cps = (struct lws_cose_key_parse_state *)ctx->user; struct lws_gencrypto_keyelem *ke = NULL; const char *p; int n; #if defined(VERBOSE) lwsl_notice("%s: reason %d, path %s, ord %u, ppos %d\n", __func__, reason & 0x3f, ctx->path, ctx->st[ctx->sp - 1].ordinal, ctx->pst[ctx->pst_sp].ppos); #endif switch (reason) { case LECPCB_OBJECT_START: if (cps->ck) break; goto ak; case LECPCB_ARRAY_ITEM_START: if (cps->pkey_set && ctx->pst[ctx->pst_sp].ppos == 2) { ak: cps->ck = lws_zalloc(sizeof(*cps->ck), __func__); if (!cps->ck) goto bail; cps->cose_state = 0; cps->meta_idx = -1; cps->gencrypto_eidx = -1; cps->seen_count = 0; if (cps->pkey_set) lws_dll2_add_tail(&cps->ck->list, cps->pkey_set); } break; case LECPCB_ARRAY_ITEM_END: if (cps->pkey_set && ctx->pst[ctx->pst_sp].ppos == 2) { if (cps->per_key_cb) cps->per_key_cb(cps->ck, cps->user); } break; case LECPCB_TAG_START: if (ctx->item.u.u64 != LWSCOAP_CONTENTFORMAT_COSE_KEY) { lwsl_warn("%s: unexpected tag\n", __func__); goto bail; } break; case LECPCB_VAL_NUM_INT: case LECPCB_VAL_NUM_UINT: if (!ctx->sp) { lwsl_warn("%s: unexpected uint %d, ppos %d\n", __func__, ctx->sp, ctx->pst[ctx->sp].ppos); goto bail; } if (!lecp_parse_map_is_key(ctx)) { const char *kty_str; /* value part of map */ switch (cps->cose_state) { case LWSCOSE_WKK_KTY: assert(cps->ck); cps->ck->kty = (int)ctx->item.u.u64; /* convert the cose key type to gencrypto one */ switch (ctx->item.u.u64) { case LWSCOSE_WKKTV_OKP: cps->ck->gencrypto_kty = LWS_GENCRYPTO_KTY_EC; kty_str = "OKP"; break; case LWSCOSE_WKKTV_EC2: kty_str = "EC2"; cps->ck->gencrypto_kty = LWS_GENCRYPTO_KTY_EC; break; case LWSCOSE_WKKTV_RSA: kty_str = "RSA"; cps->ck->gencrypto_kty = LWS_GENCRYPTO_KTY_RSA; break; case LWSCOSE_WKKTV_SYMMETRIC: kty_str = "SYMMETRIC"; cps->ck->gencrypto_kty = LWS_GENCRYPTO_KTY_OCT; break; // case LWSCOSE_WKKTV_HSS_LMS: // case LWSCOSE_WKKTV_WALNUTDSA: default: lwsl_warn("%s: unknown kty\n", __func__); goto bail; } /* store the string version of the key type */ ke = &cps->ck->meta[COSEKEY_META_KTY]; ke->len = (uint32_t)strlen(kty_str); ke->buf = lws_malloc(ke->len + 1, __func__); if (!ke->buf) goto bail; memcpy(ke->buf, kty_str, ke->len + 1); break; case LWSCOSE_WKK_ALG: /* * He can tie the key to a cose alg code */ cps->ck->cose_alg = (int)ctx->item.u.u64; break; case LWSCOSE_WKK_KEY_OPS: if (!cps->pkey_set && (ctx->pst[ctx->sp].ppos != 3 || strcmp(ctx->path, ".[]"))) { lwsl_warn("%s: unexpected kops\n", __func__); goto bail; } if (cps->pkey_set && (ctx->pst[ctx->sp].ppos != 5 || strcmp(ctx->path, "[].[]"))) { lwsl_warn("%s: unexpected kops\n", __func__); goto bail; } break; case LWSCOSE_WKOKP_CRV: cps->ck->cose_curve = (int)ctx->item.u.u64; p = lws_cose_curve_id_to_name(cps->ck->cose_curve); if (p) { ke = &cps->ck->e[LWS_GENCRYPTO_EC_KEYEL_CRV]; ke->len = (uint32_t)strlen(p); ke->buf = lws_malloc(ke->len + 1, __func__); if (!ke->buf) goto bail; memcpy(ke->buf, p, ke->len); ke->buf[ke->len] = '\0'; } break; default: lwsl_warn("%s: uint not allowed in state %d\n", __func__, cps->cose_state); /* int not allowed in this state */ goto bail; } cps->cose_state = 0; break; } /* key part of map pair */ /* * Disallow any of these coming more than once */ cps->cose_state = (int)ctx->item.u.u64; for (n = 0 ; n < cps->seen_count; n++) if (cps->seen[n] == cps->cose_state) { /* dupe */ lwsl_warn("%s: duplicate map name %d\n", __func__, cps->cose_state); goto bail; } if (cps->seen_count >= (int)LWS_ARRAY_SIZE(cps->seen)) goto bail; cps->seen[cps->seen_count++] = cps->cose_state; cps->meta_idx = -1; switch ((int)ctx->item.u.u64) { case LWSCOSE_WKK_KTY: cps->meta_idx = COSEKEY_META_KTY; break; case LWSCOSE_WKK_KID: cps->meta_idx = COSEKEY_META_KID; break; case LWSCOSE_WKK_ALG: cps->meta_idx = COSEKEY_META_ALG; break; case LWSCOSE_WKK_KEY_OPS: cps->meta_idx = COSEKEY_META_KEY_OPS; break; case LWSCOSE_WKK_BASE_IV: cps->meta_idx = COSEKEY_META_BASE_IV; break; default: cps->gencrypto_eidx = -1; switch (cps->ck->kty) { case LWSCOSE_WKKTV_OKP: switch ((int)ctx->item.u.u64) { case LWSCOSE_WKOKP_CRV: cps->cose_state = LWSCOSE_WKOKP_CRV; break; case LWSCOSE_WKOKP_X: cps->gencrypto_eidx = LWS_GENCRYPTO_EC_KEYEL_X; break; case LWSCOSE_WKOKP_D: cps->gencrypto_eidx = LWS_GENCRYPTO_EC_KEYEL_D; break; default: goto bail; } break; case LWSCOSE_WKKTV_EC2: switch ((int)ctx->item.u.u64) { case LWSCOSE_WKECKP_CRV: cps->cose_state = LWSCOSE_WKOKP_CRV; break; case LWSCOSE_WKECKP_X: cps->gencrypto_eidx = LWS_GENCRYPTO_EC_KEYEL_X; break; case LWSCOSE_WKECKP_Y: cps->gencrypto_eidx = LWS_GENCRYPTO_EC_KEYEL_Y; break; case LWSCOSE_WKECKP_D: cps->gencrypto_eidx = LWS_GENCRYPTO_EC_KEYEL_D; break; default: goto bail; } break; case LWSCOSE_WKKTV_RSA: switch ((int)ctx->item.u.u64) { case LWSCOSE_WKKPRSA_N: cps->gencrypto_eidx = LWS_GENCRYPTO_RSA_KEYEL_N; break; case LWSCOSE_WKKPRSA_E: cps->gencrypto_eidx = LWS_GENCRYPTO_RSA_KEYEL_E; break; case LWSCOSE_WKKPRSA_D: cps->gencrypto_eidx = LWS_GENCRYPTO_RSA_KEYEL_D; break; case LWSCOSE_WKKPRSA_P: cps->gencrypto_eidx = LWS_GENCRYPTO_RSA_KEYEL_P; break; case LWSCOSE_WKKPRSA_Q: cps->gencrypto_eidx = LWS_GENCRYPTO_RSA_KEYEL_Q; break; case LWSCOSE_WKKPRSA_DP: cps->gencrypto_eidx = LWS_GENCRYPTO_RSA_KEYEL_DP; break; case LWSCOSE_WKKPRSA_DQ: cps->gencrypto_eidx = LWS_GENCRYPTO_RSA_KEYEL_DQ; break; case LWSCOSE_WKKPRSA_QINV: cps->gencrypto_eidx = LWS_GENCRYPTO_RSA_KEYEL_QI; break; case LWSCOSE_WKKPRSA_OTHER: cps->gencrypto_eidx = LWS_GENCRYPTO_RSA_KEYEL_OTHER; break; case LWSCOSE_WKKPRSA_RI: cps->gencrypto_eidx = LWS_GENCRYPTO_RSA_KEYEL_RI; break; case LWSCOSE_WKKPRSA_DI: cps->gencrypto_eidx = LWS_GENCRYPTO_RSA_KEYEL_DI; break; case LWSCOSE_WKKPRSA_TI: cps->gencrypto_eidx = LWS_GENCRYPTO_RSA_KEYEL_TI; break; default: goto bail; } break; case LWSCOSE_WKKTV_SYMMETRIC: if (ctx->item.u.i64 != -1 && ctx->item.u.u64 != LWSCOSE_WKSYMKP_KEY_VALUE) goto bail; cps->gencrypto_eidx = LWS_GENCRYPTO_OCT_KEYEL_K; break; default: lwsl_warn("%s: unknown kty\n", __func__); goto bail; } break; } break; case LECPCB_VAL_BLOB_START: if (!ctx->sp || !(ctx->st[ctx->sp - 1].ordinal & 1)) { lwsl_warn("%s: unexpected blob\n", __func__); goto bail; } if (cps->cose_state == COSEKEY_META_KID) break; /* * Validate the association of the blob now, collect it into * the temp buf in cps and then alloc and copy it into the * related key element when it's at the end and the size known */ cps->pos = 0; if (cps->gencrypto_eidx >= 0) { if (cps->ck->e[cps->gencrypto_eidx].buf) { lwsl_warn("%s: e[%d] set twice %d\n", __func__, cps->gencrypto_eidx, cps->ck->e[cps->gencrypto_eidx].len); /* key elements must only come at most once */ goto bail; } break; } if (cps->meta_idx >= 0) break; goto bail; case LECPCB_VAL_BLOB_CHUNK: case LECPCB_VAL_BLOB_END: if (cps->pos + ctx->npos > sizeof(cps->buf)) { lwsl_warn("%s: oversize blob\n", __func__); goto bail; } memcpy(cps->buf + cps->pos, ctx->buf, ctx->npos); cps->pos += ctx->npos; if (reason == LECPCB_VAL_BLOB_CHUNK) break; /* we have the key element data, let's make the ck element */ if (cps->gencrypto_eidx >= 0) { if (cps->ck->e[cps->gencrypto_eidx].buf) break; lws_ck_set_el(&cps->ck->e[cps->gencrypto_eidx], (char *)cps->buf, cps->pos); cps->gencrypto_eidx = -1; break; } if (cps->meta_idx >= 0) { lws_ck_set_el(&cps->ck->meta[cps->meta_idx], (char *)cps->buf, cps->pos); cps->meta_idx = -1; } cps->pos = 0; break; case LECPCB_VAL_STR_END: if (cps->cose_state == LWSCOSE_WKOKP_CRV) { cps->ck->cose_curve = lws_cose_curve_name_to_id(ctx->buf); ke = &cps->ck->e[LWS_GENCRYPTO_EC_KEYEL_CRV]; ke->len = ctx->npos; ke->buf = lws_malloc(ctx->npos, __func__); if (!ke->buf) goto bail; memcpy(ke->buf, ctx->buf, ctx->npos); } if (!lecp_parse_map_is_key(ctx) && cps->cose_state == LWSCOSE_WKK_ALG) { size_t n; for (n = 0; n < LWS_ARRAY_SIZE(wk_algs); n++) if (ctx->npos == strlen(wk_algs[n]) && !memcmp(ctx->buf, wk_algs[n], ctx->npos)) { cps->ck->cose_alg = wk_alg_indexes[n]; break; } if (n == LWS_ARRAY_SIZE(wk_algs)) /* key is for an alg we don't understand */ lwsl_warn("%s: key for unknown alg %.*s\n", __func__, (int)ctx->npos, ctx->buf); ke = &cps->ck->meta[COSEKEY_META_ALG]; ke->len = ctx->npos; ke->buf = lws_malloc(ctx->npos, __func__); if (!ke->buf) goto bail; memcpy(ke->buf, ctx->buf, ctx->npos); } break; } return 0; bail: lwsl_warn("%s: bail\n", __func__); lws_cose_key_destroy(&cps->ck); if (cps->pkey_set) { lws_cose_key_set_destroy(cps->pkey_set); cps->pkey_set = NULL; } return -1; } void lws_cose_key_destroy_elements(struct lws_gencrypto_keyelem *el, int m) { int n; if (!el) return; for (n = 0; n < m; n++) if (el[n].buf) { /* wipe all key material when it goes out of scope */ lws_explicit_bzero(el[n].buf, el[n].len); lws_free_set_NULL(el[n].buf); el[n].len = 0; } } void lws_cose_key_destroy(struct lws_cose_key **pck) { struct lws_cose_key *ck = *pck; if (!ck) return; lws_dll2_remove(&ck->list); lws_cose_key_destroy_elements(ck->e, LWS_ARRAY_SIZE(ck->e)); lws_cose_key_destroy_elements(ck->meta, LWS_ARRAY_SIZE(ck->meta)); lws_free_set_NULL(*pck); } static int lws_cose_key_set_memb_remove(struct lws_dll2 *d, void *user) { lws_cose_key_t *ck = lws_container_of(d, lws_cose_key_t, list); lws_dll2_remove(d); lws_cose_key_destroy(&ck); return 0; } void lws_cose_key_set_destroy(lws_dll2_owner_t *o) { lws_dll2_foreach_safe(o, NULL, lws_cose_key_set_memb_remove); } lws_cose_key_t * lws_cose_key_from_set(lws_dll2_owner_t *set, const uint8_t *kid, size_t kl) { lws_start_foreach_dll(struct lws_dll2 *, p, lws_dll2_get_head(set)) { lws_cose_key_t *ck = lws_container_of(p, lws_cose_key_t, list); struct lws_gencrypto_keyelem *ke = &ck->meta[COSEKEY_META_KID]; if (!kid) /* always the first then */ return ck; if (ke->buf && ke->len == (uint32_t)kl && !memcmp(ke->buf, kid, ke->len)) return ck; } lws_end_foreach_dll(p); return NULL; } lws_cose_key_t * lws_cose_key_generate(struct lws_context *context, cose_param_t cose_kty, int use_mask, int bits, const char *curve, const uint8_t *kid, size_t kl) { struct lws_gencrypto_keyelem *ke; lws_cose_key_t *ck; size_t sn; int n; ck = lws_zalloc(sizeof(*ck), __func__); if (!ck) return NULL; ck->kty = cose_kty; ck->private_key = 1; if (use_mask & 0xfffe) { int count = 0; for (n = 1; n < 15; n++) if (use_mask & (1 << n)) count++; ke = &ck->meta[COSEKEY_META_KEY_OPS]; ke->buf = lws_malloc((size_t)count, __func__); if (!ke->buf) goto fail; ke->len = (uint32_t)count; count = 0; for (n = 1; n < 15; n++) if (use_mask & (1 << n)) ke->buf[count++] = (uint8_t)n; } if (kid) { ke = &ck->meta[COSEKEY_META_KID]; ke->buf = lws_malloc(kl, __func__); ke->len = (uint32_t)kl; memcpy(ke->buf, kid, ke->len); } switch (cose_kty) { case LWSCOSE_WKKTV_RSA: { struct lws_genrsa_ctx ctx; memset(&ctx, 0, sizeof(ctx)); ck->gencrypto_kty = LWS_GENCRYPTO_KTY_RSA; lwsl_notice("%s: generating %d bit RSA key\n", __func__, bits); n = lws_genrsa_new_keypair(context, &ctx, LGRSAM_PKCS1_1_5, ck->e, bits); lws_genrsa_destroy(&ctx); if (n) { lwsl_err("%s: problem generating RSA key\n", __func__); goto fail; } } break; case LWSCOSE_WKKTV_SYMMETRIC: ck->gencrypto_kty = LWS_GENCRYPTO_KTY_OCT; sn = (unsigned int)lws_gencrypto_bits_to_bytes(bits); ke = &ck->e[LWS_GENCRYPTO_OCT_KEYEL_K]; ke->buf = lws_malloc(sn, "oct"); if (!ke->buf) goto fail; ke->len = (uint32_t)sn; if (lws_get_random(context, ke->buf, sn) != sn) { lwsl_err("%s: problem getting random\n", __func__); goto fail; } break; case LWSCOSE_WKKTV_OKP: case LWSCOSE_WKKTV_EC2: { struct lws_genec_ctx ctx; ck->gencrypto_kty = LWS_GENCRYPTO_KTY_EC; if (!curve) { lwsl_err("%s: must have a named curve\n", __func__); goto fail; } if (lws_genecdsa_create(&ctx, context, NULL)) goto fail; ctx.genec_alg = LEGENEC_ECDSA; lwsl_notice("%s: generating ECDSA key on curve %s\n", __func__, curve); n = lws_genecdsa_new_keypair(&ctx, curve, ck->e); lws_genec_destroy(&ctx); if (n) { lwsl_err("%s: problem generating ECDSA key\n", __func__); goto fail; } /* trim the trailing NUL */ ck->e[LWS_GENCRYPTO_EC_KEYEL_CRV].len = (uint32_t)strlen(curve); } break; default: lwsl_err("%s: unknown kty\n", __func__); goto fail; } return ck; fail: lws_free_set_NULL(ck); return NULL; } struct lws_cose_key * lws_cose_key_import(lws_dll2_owner_t *pkey_set, lws_cose_key_import_callback cb, void *user, const uint8_t *in, size_t len) { struct lws_cose_key_parse_state cps; struct lecp_ctx ctx; int m; memset(&cps, 0, sizeof(cps)); cps.per_key_cb = cb; cps.user = user; cps.pkey_set = pkey_set; cps.gencrypto_eidx = -1; lecp_construct(&ctx, cb_cose_key, &cps, NULL, 0); m = lecp_parse(&ctx, in, len); lecp_destruct(&ctx); if (m < 0) { lwsl_notice("%s: parse got %d\n", __func__, m); if (cps.pkey_set) lws_cose_key_set_destroy(cps.pkey_set); return NULL; } switch (cps.ck->gencrypto_kty) { case LWS_GENCRYPTO_KTY_UNKNOWN: lwsl_notice("%s: missing or unknown ktys\n", __func__); goto bail; default: break; } return cps.ck; bail: lws_cose_key_destroy(&cps.ck); return NULL; } /* gencrypto element orering -> cose key parameters */ static const signed char ckp[3][12] = { { /* LWS_GENCRYPTO_KTY_OCT (1) */ /* LWS_GENCRYPTO_OCT_KEYEL_K */ LWSCOSE_WKSYMKP_KEY_VALUE, }, { /* LWS_GENCRYPTO_KTY_RSA (2) */ /* LWS_GENCRYPTO_RSA_KEYEL_E */ LWSCOSE_WKKPRSA_E, /* LWS_GENCRYPTO_RSA_KEYEL_N */ LWSCOSE_WKKPRSA_N, /* LWS_GENCRYPTO_RSA_KEYEL_D */ LWSCOSE_WKKPRSA_D, /* LWS_GENCRYPTO_RSA_KEYEL_P */ LWSCOSE_WKKPRSA_P, /* LWS_GENCRYPTO_RSA_KEYEL_Q */ LWSCOSE_WKKPRSA_Q, /* LWS_GENCRYPTO_RSA_KEYEL_DP */ LWSCOSE_WKKPRSA_DP, /* LWS_GENCRYPTO_RSA_KEYEL_DQ */ LWSCOSE_WKKPRSA_DQ, /* LWS_GENCRYPTO_RSA_KEYEL_QT */ LWSCOSE_WKKPRSA_QINV, /* LWS_GENCRYPTO_RSA_KEYEL_OTHER */ LWSCOSE_WKKPRSA_OTHER, /* LWS_GENCRYPTO_RSA_KEYEL_RI */ LWSCOSE_WKKPRSA_RI, /* LWS_GENCRYPTO_RSA_KEYEL_DI */ LWSCOSE_WKKPRSA_DI, /* LWS_GENCRYPTO_RSA_KEYEL_TI */ LWSCOSE_WKKPRSA_TI, }, { /* LWS_GENCRYPTO_KTY_EC (3) */ /* LWS_GENCRYPTO_EC_KEYEL_CRV */ LWSCOSE_WKECKP_CRV, /* LWS_GENCRYPTO_EC_KEYEL_X */ LWSCOSE_WKECKP_X, /* LWS_GENCRYPTO_EC_KEYEL_D */ LWSCOSE_WKECKP_D, /* LWS_GENCRYPTO_EC_KEYEL_Y */ LWSCOSE_WKECKP_Y, } }; enum lws_lec_pctx_ret lws_cose_key_export(lws_cose_key_t *ck, lws_lec_pctx_t *ctx, int flags) { cose_param_t pa = 0; int n; if (!ctx->opaque[0]) { ctx->opaque[0] = 1; /* map pair count */ ctx->opaque[1] = 1; /* element index */ ctx->opaque[2] = 0; /* public mask */ ctx->opaque[3] = 0; /* doing AGAIN */ switch (ck->gencrypto_kty) { case LWS_GENCRYPTO_KTY_OCT: /* nothing to differentiate */ ctx->opaque[2] = 1 << LWS_GENCRYPTO_OCT_KEYEL_K; break; case LWS_GENCRYPTO_KTY_RSA: ctx->opaque[2] = 1 << LWS_GENCRYPTO_RSA_KEYEL_E; break; case LWS_GENCRYPTO_KTY_EC: ctx->opaque[2] = (1 << LWS_GENCRYPTO_EC_KEYEL_X) | (1 << LWS_GENCRYPTO_EC_KEYEL_Y); break; default: goto fail; } if (flags & LWSJWKF_EXPORT_PRIVATE) ctx->opaque[2] = 0xffff; /* * We first need to find out how many CBOR map pairs we are * planning to create, so we can set a fixed length map of the * right size. */ for (n = 0; n < (int)LWS_ARRAY_SIZE(ck->e); n++) if ((ctx->opaque[2] & (1 << n)) && ck->e[n].buf) ctx->opaque[0]++; /* * We always issue kty, others may be * * KID / ALG / KEY_OPS / BASE_IV */ if (ck->meta[COSEKEY_META_KID].buf) ctx->opaque[0]++; if (ck->meta[COSEKEY_META_ALG].buf) ctx->opaque[0]++; if (ck->meta[COSEKEY_META_KEY_OPS].buf) ctx->opaque[0]++; if (ck->meta[COSEKEY_META_BASE_IV].buf) ctx->opaque[0]++; lws_lec_int(ctx, LWS_CBOR_MAJTYP_MAP, 0, (uint64_t)ctx->opaque[0]); lws_lec_signed(ctx, LWSCOSE_WKK_KTY); lws_lec_signed(ctx, (int64_t)ck->kty); if (ck->gencrypto_kty == LWS_GENCRYPTO_KTY_EC) { struct lws_gencrypto_keyelem *ke = &ck->e[LWS_GENCRYPTO_EC_KEYEL_CRV]; if (!ke->buf || ck->e[LWS_GENCRYPTO_EC_KEYEL_CRV].len > 10) { lwsl_err("%s: no curve type\n", __func__); goto fail; } pa = lws_cose_curve_name_to_id((const char *)ke->buf); lws_lec_signed(ctx, LWSCOSE_WKECKP_CRV); if (pa) lws_lec_signed(ctx, pa); else lws_lec_printf(ctx, "%.*s", (int)ke->len, ke->buf); } ctx->opaque[1] = COSEKEY_META_KID; } /* * Start from the second key meta, then do any elements that are set */ while (ctx->buf != ctx->end) { struct lws_gencrypto_keyelem *ke = NULL; int cose_key_param = 0; if (lws_lec_scratch(ctx)) break; if (ctx->opaque[1] == LWS_ARRAY_SIZE(ck->e) + LWS_COUNT_COSE_KEY_ELEMENTS) break; if (ctx->opaque[1] >= LWS_COUNT_COSE_KEY_ELEMENTS) { n = ctx->opaque[1] - LWS_COUNT_COSE_KEY_ELEMENTS; if (ck->gencrypto_kty != LWS_GENCRYPTO_KTY_EC || n != LWS_GENCRYPTO_EC_KEYEL_CRV) { /* we didn't already encode his curve */ if ((ctx->opaque[2] & (1 << n)) && ck->e[n].buf && ck->e[n].len) { ke = &ck->e[n]; cose_key_param = ckp[ck->gencrypto_kty - 1][n]; } } } else switch (ctx->opaque[1]) { case COSEKEY_META_KID: /* bstr */ if (ck->meta[COSEKEY_META_KID].buf) { ke = &ck->meta[COSEKEY_META_KID]; cose_key_param = LWSCOSE_WKK_KID; // lwsl_hexdump_notice(ke->buf, ke->len); } break; case COSEKEY_META_ALG: /* int, tstr */ if (ck->meta[COSEKEY_META_ALG].buf) { ke = &ck->meta[COSEKEY_META_ALG]; cose_key_param = LWSCOSE_WKK_ALG; } break; case COSEKEY_META_KEY_OPS: /* [ int ] */ if (!ck->meta[COSEKEY_META_KEY_OPS].buf) break; ke = &ck->meta[COSEKEY_META_KEY_OPS]; n = (int)ke->len; if (n > 10) n = 10; /* * We copy this array into scratch by hand now we * made sure it will fit, we will never need AGAIN */ lws_lec_signed(ctx, LWSCOSE_WKK_KEY_OPS); lws_lec_int(ctx, LWS_CBOR_MAJTYP_ARRAY, 0, (uint64_t)n); memcpy(&ctx->scratch[ctx->scratch_len], ke->buf, (size_t)n); ctx->scratch_len = (uint8_t)(ctx->scratch_len + (uint8_t)n); ke = NULL; break; case COSEKEY_META_BASE_IV: /* bstr */ if (ck->meta[COSEKEY_META_BASE_IV].buf) { ke = &ck->meta[COSEKEY_META_BASE_IV]; cose_key_param = LWSCOSE_WKK_BASE_IV; } break; default: break; } if (ke && ke->buf && ke->len) { if (!ctx->opaque[3]) lws_lec_signed(ctx, cose_key_param); /* binary string or text string? */ if (ctx->opaque[1] == COSEKEY_META_KID || ctx->opaque[1] == COSEKEY_META_BASE_IV || ctx->opaque[1] >= LWS_COUNT_COSE_KEY_ELEMENTS) n = (int)lws_lec_printf(ctx, "%.*b", (int)ke->len, ke->buf); else n = (int)lws_lec_printf(ctx, "%.*s", (int)ke->len, ke->buf); switch (n) { case LWS_LECPCTX_RET_AGAIN: ctx->opaque[3] = 1; /* dump what we have and come back */ continue; case LWS_LECPCTX_RET_FAIL: goto fail; case LWS_LECPCTX_RET_FINISHED: break; } } /* move on if we finished that guy */ ctx->opaque[1]++; ctx->opaque[3] = 0; } ctx->used = lws_ptr_diff_size_t(ctx->buf, ctx->start); if (ctx->buf == ctx->end || ctx->scratch_len) return LWS_LECPCTX_RET_AGAIN; ctx->opaque[0] = 0; return LWS_LECPCTX_RET_FINISHED; fail: lwsl_notice("%s: failed\n", __func__); ctx->opaque[0] = 0; return LWS_LECPCTX_RET_FAIL; } libwebsockets-4.3.5/lib/cose/cose_sign.c000066400000000000000000000325751476025525100202220ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "private-lib-cose.h" struct lws_cose_sign_context * lws_cose_sign_create(const lws_cose_sign_create_info_t *info) { struct lws_cose_sign_context *csc; /* you have to have prepared a cbor output context for us to use */ assert(info->lec); /* you have to provide at least one key in a cose_keyset */ assert(info->keyset); /* you have to provide an lws_context (for crypto random) */ assert(info->cx); if (info->sigtype == SIGTYPE_MAC) { lwsl_err("%s: only mac0 supported for signing\n", __func__); return NULL; } csc = lws_zalloc(sizeof(*csc), __func__); if (!csc) return NULL; csc->info = *info; return csc; } int lws_cose_sign_add(struct lws_cose_sign_context *csc, cose_param_t alg, const lws_cose_key_t *ck) { lws_cose_sig_alg_t *si = lws_cose_sign_alg_create(csc->info.cx, ck, alg, LWSCOSE_WKKO_SIGN); if (!si) return 1; lws_dll2_add_tail(&si->list, &csc->algs); return 0; } static signed char cose_tags[] = { 0, LWSCOAP_CONTENTFORMAT_COSE_SIGN, LWSCOAP_CONTENTFORMAT_COSE_SIGN1, LWSCOAP_CONTENTFORMAT_COSE_SIGN, LWSCOAP_CONTENTFORMAT_COSE_MAC, LWSCOAP_CONTENTFORMAT_COSE_MAC0 }; static void lws_cose_sign_hashing(struct lws_cose_sign_context *csc, const uint8_t *in, size_t in_len) { //lwsl_hexdump_warn(in, in_len); assert(in_len); lws_start_foreach_dll_safe(struct lws_dll2 *, p, tp, lws_dll2_get_head(&csc->algs)) { lws_cose_sig_alg_t *alg = lws_container_of(p, lws_cose_sig_alg_t, list); if (lws_cose_sign_alg_hash(alg, in, in_len)) alg->failed = 1; } lws_end_foreach_dll_safe(p, tp); } /* * These chunks may be payload or application AAD being emitted into the * signed object somewhere else. But we do not emit them ourselves here * (since other non-emitted things are also hashed by us) and so can always * deal with the whole in_len in one step. */ enum lws_lec_pctx_ret lws_cose_sign_payload_chunk(struct lws_cose_sign_context *csc, const uint8_t *in, size_t in_len) { uint8_t lbuf[MAX_BLOBBED_PARAMS], lb[9]; const struct lws_gencrypto_keyelem *ke; enum lws_lec_pctx_ret ret; lws_lec_pctx_t lec, lec1; lws_cose_sig_alg_t *alg; uint8_t c; size_t s; switch (csc->tli) { case ST_UNKNOWN: /* * We need to figure out what signing structure we need to use, * given the algorithms that are in it. So let's have a look * and decide. */ if (!csc->algs.count) { lwsl_err("%s: must add at least one signature\n", __func__); return 1; } csc->type = SIGTYPE_MULTI; alg = lws_container_of(csc->algs.head, lws_cose_sig_alg_t, list); switch (alg->cose_alg) { case LWSCOSE_WKAHMAC_256_64: case LWSCOSE_WKAHMAC_256_256: case LWSCOSE_WKAHMAC_384_384: case LWSCOSE_WKAHMAC_512_512: // if (csc->info.sigtype == SIGTYPE_MAC0) csc->type = SIGTYPE_MAC0; // else // csc->type = SIGTYPE_MAC; break; } if (csc->algs.count == 1) { if (!csc->info.sigtype && csc->type == SIGTYPE_MAC) { if (csc->info.flags & LCSC_FL_ADD_CBOR_PREFER_MAC0) csc->type = SIGTYPE_MAC0; } else if (!csc->info.sigtype || csc->info.sigtype == SIGTYPE_SINGLE) /* ie, if no hint */ csc->type = SIGTYPE_SINGLE; } lwsl_notice("%s: decided on type %d\n", __func__, csc->type); /* * Start emitting the appropriate tag if that's requested */ if (csc->info.flags & LCSC_FL_ADD_CBOR_TAG) { ret = lws_lec_printf(csc->info.lec, "%t(", cose_tags[csc->type]); if (ret != LWS_LECPCTX_RET_FINISHED) return ret; } /* The */ c = 0; switch (csc->type) { case SIGTYPE_MAC0: case SIGTYPE_MULTI: case SIGTYPE_SINGLE: c = 0x84; break; case SIGTYPE_MAC: c = 0x85; break; default: break; } /* The outer array */ csc->info.lec->scratch[csc->info.lec->scratch_len++] = c; /* * Then, let's start hashing with the sigtype constant part */ lws_cose_sign_hashing(csc, sig_mctx[csc->type], sig_mctx_len[csc->type]); csc->tli = ST_OUTER_PROTECTED; csc->subsequent = 0; /* fallthru */ case ST_OUTER_PROTECTED: /* * We need to list and emit any outer protected data as a map * into its own buffer, then emit that into the output as a bstr */ switch (csc->type) { case SIGTYPE_SINGLE: case SIGTYPE_MAC0: alg = lws_container_of(csc->algs.head, lws_cose_sig_alg_t, list); lws_lec_init(&lec, lbuf, sizeof(lbuf)); /* we know it will fit... but coverity doesn't */ ret = lws_lec_printf(&lec, "{1:%lld}", (long long)alg->cose_alg); if (ret != LWS_LECPCTX_RET_FINISHED) return ret; lws_lec_scratch(&lec); if (!csc->subsequent) { lws_lec_init(&lec1, lb, sizeof(lb)); lws_lec_int(&lec1, LWS_CBOR_MAJTYP_BSTR, 0, lec.used); lws_cose_sign_hashing(csc, lec1.scratch, lec1.scratch_len); lws_cose_sign_hashing(csc, lec.start, lec.used); ret = lws_lec_printf(csc->info.lec, "%.*b", (int)lec.used, lec.start); if (ret != LWS_LECPCTX_RET_FINISHED) return ret; csc->subsequent = 1; } break; case SIGTYPE_MAC: case SIGTYPE_MULTI: lws_lec_init(&lec, lbuf, sizeof(lbuf)); lws_lec_int(&lec, LWS_CBOR_MAJTYP_BSTR, 0, 0); lws_lec_int(csc->info.lec, LWS_CBOR_MAJTYP_BSTR, 0, 0); lws_lec_scratch(&lec); lec.used = lws_ptr_diff_size_t(lec.buf, lec.start); lws_cose_sign_hashing(csc, lec.start, lec.used); break; default: lec.used = 0; break; } csc->tli = ST_OUTER_UNPROTECTED; /* fallthru */ case ST_OUTER_UNPROTECTED: /* * We need to list and emit any outer unprotected data, as * an inline cbor map */ switch (csc->type) { case SIGTYPE_SINGLE: case SIGTYPE_MAC0: alg = lws_container_of(csc->algs.head, lws_cose_sig_alg_t, list); ke = &alg->cose_key->meta[COSEKEY_META_KID]; if (ke->len) { ret = lws_lec_printf(csc->info.lec, "{%d:%.*b}", LWSCOSE_WKL_KID, (int)ke->len, ke->buf); if (ret != LWS_LECPCTX_RET_FINISHED) return ret; } /* hack for no extra data */ lws_lec_init(&lec1, lb, sizeof(lb)); lws_lec_int(&lec1, LWS_CBOR_MAJTYP_BSTR, 0, 0); lws_cose_sign_hashing(csc, lec1.scratch, lec1.scratch_len); break; case SIGTYPE_MAC: case SIGTYPE_MULTI: lws_lec_int(csc->info.lec, LWS_CBOR_MAJTYP_BSTR, 0, 0); /* * For cose-sign, we need to feed each sig alg its alg- * specific protected data into the hash before letting * all the hashes see the payload */ lws_start_foreach_dll_safe(struct lws_dll2 *, p, tp, lws_dll2_get_head(&csc->algs)) { alg = lws_container_of(p, lws_cose_sig_alg_t, list); lws_lec_init(&lec, lbuf, sizeof(lbuf)); /* we know it will fit... but coverity doesn't... */ ret = lws_lec_printf(&lec, "{1:%lld}", (long long)alg->cose_alg); if (ret != LWS_LECPCTX_RET_FINISHED) return ret; lws_lec_init(&lec1, lb, sizeof(lb)); lws_lec_int(&lec1, LWS_CBOR_MAJTYP_BSTR, 0, lec.used); // lwsl_hexdump_warn(lec1.scratch, lec1.scratch_len); // lwsl_hexdump_warn(lec.start, lec.used); if (lws_cose_sign_alg_hash(alg, lec1.scratch, lec1.scratch_len)) alg->failed = 1; if (lws_cose_sign_alg_hash(alg, lec.start, lec.used)) alg->failed = 1; } lws_end_foreach_dll_safe(p, tp); lws_lec_init(&lec1, lb, sizeof(lb)); lws_lec_int(&lec1, LWS_CBOR_MAJTYP_BSTR, 0, 0); lws_cose_sign_hashing(csc, lec1.scratch, lec1.scratch_len); break; default: ret = lws_lec_printf(csc->info.lec, "{}"); if (ret != LWS_LECPCTX_RET_FINISHED) return ret; break; } csc->tli = ST_OUTER_PAYLOAD; csc->subsequent = 0; /* Prepare the payload BSTR */ lws_lec_int(csc->info.lec, LWS_CBOR_MAJTYP_BSTR, 0, csc->info.inline_payload_len); lws_lec_init(&lec1, lb, sizeof(lb)); lws_lec_int(&lec1, LWS_CBOR_MAJTYP_BSTR, 0, csc->info.inline_payload_len); lws_cose_sign_hashing(csc, lec1.scratch, lec1.scratch_len); lws_lec_scratch(csc->info.lec); csc->rem_pay = csc->info.inline_payload_len; /* fallthru */ case ST_OUTER_PAYLOAD: if (csc->along) { in += csc->along; in_len -= csc->along; } lws_lec_scratch(csc->info.lec); if (csc->rem_pay) { lws_cose_sign_hashing(csc, in, in_len); /* * in / in_len is the payload chunk */ s = lws_ptr_diff_size_t(csc->info.lec->end, csc->info.lec->buf); if (s > (size_t)csc->rem_pay) s = (size_t)csc->rem_pay; if (s > in_len) s = in_len; memcpy(csc->info.lec->buf, in, s); csc->info.lec->buf += s; csc->info.lec->used = lws_ptr_diff_size_t( csc->info.lec->buf, csc->info.lec->start); csc->rem_pay -= s; csc->along = s; return LWS_LECPCTX_RET_AGAIN; } /* finished with rem_pay */ if (csc->type == SIGTYPE_MULTI) { csc->alg = lws_container_of(csc->algs.head, lws_cose_sig_alg_t, list); lws_lec_init(&lec1, lb, sizeof(lb)); lws_lec_int(&lec1, LWS_CBOR_MAJTYP_ARRAY, 0, csc->algs.count); lws_lec_int(csc->info.lec, LWS_CBOR_MAJTYP_ARRAY, 0, csc->algs.count); csc->tli = ST_INNER_PROTECTED; goto inner_protected; } csc->tli = ST_OUTER_SIGN1_SIGNATURE; csc->along = 0; /* fallthru */ case ST_OUTER_SIGN1_SIGNATURE: alg = lws_container_of(lws_dll2_get_head(&csc->algs), lws_cose_sig_alg_t, list); if (!alg->completed) lws_cose_sign_alg_complete(alg); if (alg->failed) return LWS_LECPCTX_RET_FAIL; ret = lws_lec_printf(csc->info.lec, "%.*b", (int)alg->rhash_len, alg->rhash); if (ret != LWS_LECPCTX_RET_FINISHED) return ret; if (csc->type == SIGTYPE_MAC) { csc->alg = lws_container_of(csc->algs.head, lws_cose_sig_alg_t, list); lws_lec_init(&lec1, lb, sizeof(lb)); lws_lec_int(&lec1, LWS_CBOR_MAJTYP_ARRAY, 0, csc->algs.count); lws_lec_int(csc->info.lec, LWS_CBOR_MAJTYP_ARRAY, 0, csc->algs.count); csc->tli = ST_INNER_PROTECTED; goto inner_protected; } break; case ST_INNER_PROTECTED: inner_protected: /* * We need to list and emit any outer protected data as a map * into its own buffer, then emit that into the output as a bstr */ switch (csc->type) { case SIGTYPE_MAC: case SIGTYPE_MULTI: lws_lec_init(&lec1, lb, sizeof(lb)); lws_lec_int(&lec1, LWS_CBOR_MAJTYP_ARRAY, 0, 3); lws_lec_int(csc->info.lec, LWS_CBOR_MAJTYP_ARRAY, 0, 3); lws_lec_init(&lec, lbuf, sizeof(lbuf)); /* we know it will fit */ lws_lec_printf(&lec, "{1:%lld}", (long long)csc->alg->cose_alg); lws_lec_init(&lec1, lb, sizeof(lb)); lws_lec_int(&lec1, LWS_CBOR_MAJTYP_BSTR, 0, lec.used); if (lws_lec_printf(csc->info.lec, "{1:%lld}", (long long)csc->alg->cose_alg) != LWS_LECPCTX_RET_FINISHED) /* coverity */ return 0; break; default: lec.used = 0; break; } csc->tli = ST_INNER_UNPROTECTED; /* fallthru */ case ST_INNER_UNPROTECTED: switch (csc->type) { case SIGTYPE_MULTI: alg = lws_container_of(csc->algs.head, lws_cose_sig_alg_t, list); ke = &alg->cose_key->meta[COSEKEY_META_KID]; if (ke->len) { ret = lws_lec_printf(csc->info.lec, "{%d:%.*b}", LWSCOSE_WKL_KID, (int)ke->len, ke->buf); if (ret != LWS_LECPCTX_RET_FINISHED) return ret; } break; default: ret = lws_lec_printf(csc->info.lec, "{}"); if (ret != LWS_LECPCTX_RET_FINISHED) return ret; break; } lws_cose_sign_alg_complete(csc->alg); if (csc->alg->failed) return LWS_LECPCTX_RET_FAIL; csc->tli = ST_INNER_SIGNATURE; /* fallthru */ case ST_INNER_SIGNATURE: ret = lws_lec_printf(csc->info.lec, "%.*b", (int)csc->alg->rhash_len, csc->alg->rhash); if (ret != LWS_LECPCTX_RET_FINISHED) return ret; if (csc->alg->list.next) { csc->alg = (lws_cose_sig_alg_t *)csc->alg->list.next; csc->tli = ST_INNER_PROTECTED; } break; } return 0; } void lws_cose_sign_destroy(struct lws_cose_sign_context **_csc) { struct lws_cose_sign_context *csc = *_csc; if (!csc) return; lws_start_foreach_dll_safe(struct lws_dll2 *, p, tp, lws_dll2_get_head(&csc->algs)) { lws_cose_sig_alg_t *alg = lws_container_of(p, lws_cose_sig_alg_t, list); lws_dll2_remove(p); lws_cose_sign_alg_destroy(&alg); } lws_end_foreach_dll_safe(p, tp); lws_free_set_NULL(*_csc); } libwebsockets-4.3.5/lib/cose/cose_sign_alg.c000066400000000000000000000154131476025525100210350ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "private-lib-cose.h" lws_cose_sig_alg_t * lws_cose_sign_alg_create(struct lws_context *cx, const lws_cose_key_t *ck, cose_param_t cose_alg, int op) { lws_cose_sig_alg_t *alg = lws_zalloc(sizeof(*alg), __func__); const struct lws_gencrypto_keyelem *ke; enum lws_genhmac_types ghm; enum lws_genhash_types gh; const char *crv; if (!alg) return NULL; alg->cose_alg = cose_alg; alg->cose_key = ck; switch (cose_alg) { /* ECDSA algs */ case LWSCOSE_WKAECDSA_ALG_ES256: /* ECDSA w/ SHA-256 */ crv = "P-256"; gh = LWS_GENHASH_TYPE_SHA256; alg->keybits = 256; goto ecdsa; case LWSCOSE_WKAECDSA_ALG_ES384: /* ECDSA w/ SHA-384 */ crv = "P-384"; gh = LWS_GENHASH_TYPE_SHA384; alg->keybits = 384; goto ecdsa; case LWSCOSE_WKAECDSA_ALG_ES512: /* ECDSA w/ SHA-512 */ crv = "P-521"; gh = LWS_GENHASH_TYPE_SHA512; alg->keybits = 521; ecdsa: /* the key is good for this? */ if (lws_cose_key_checks(ck, LWSCOSE_WKKTV_EC2, cose_alg, op, crv)) goto bail_ecdsa; if (lws_genhash_init(&alg->hash_ctx, gh)) goto bail_ecdsa; if (lws_genecdsa_create(&alg->u.ecdsactx, cx, lws_ec_curves)) { lwsl_notice("%s: lws_genrsa_public_decrypt_create\n", __func__); goto bail_ecdsa1; } if (lws_genecdsa_set_key(&alg->u.ecdsactx, ck->e)) { lwsl_notice("%s: ec key import fail\n", __func__); goto bail_ecdsa2; } break; /* HMAC algs */ case LWSCOSE_WKAHMAC_256_64: ghm = LWS_GENHMAC_TYPE_SHA256; alg->keybits = 64; goto hmac; case LWSCOSE_WKAHMAC_256_256: ghm = LWS_GENHMAC_TYPE_SHA256; alg->keybits = 256; goto hmac; case LWSCOSE_WKAHMAC_384_384: ghm = LWS_GENHMAC_TYPE_SHA384; alg->keybits = 384; goto hmac; case LWSCOSE_WKAHMAC_512_512: ghm = LWS_GENHMAC_TYPE_SHA512; alg->keybits = 512; hmac: if (lws_cose_key_checks(ck, LWSCOSE_WKKTV_SYMMETRIC, cose_alg, op, NULL)) goto bail_hmac; ke = &ck->e[LWS_GENCRYPTO_OCT_KEYEL_K]; if (lws_genhmac_init(&alg->u.hmacctx, ghm, ke->buf, ke->len)) goto bail_hmac; break; /* RSASSA algs */ case LWSCOSE_WKARSA_ALG_RS256: gh = LWS_GENHASH_TYPE_SHA256; goto rsassa; case LWSCOSE_WKARSA_ALG_RS384: gh = LWS_GENHASH_TYPE_SHA384; goto rsassa; case LWSCOSE_WKARSA_ALG_RS512: gh = LWS_GENHASH_TYPE_SHA512; rsassa: if (lws_cose_key_checks(ck, LWSCOSE_WKKTV_RSA, cose_alg, op, NULL)) goto bail_hmac; alg->keybits = (int)ck->e[LWS_GENCRYPTO_RSA_KEYEL_N].len * 8; if (lws_genhash_init(&alg->hash_ctx, gh)) goto bail_hmac; if (lws_genrsa_create(&alg->u.rsactx, ck->e, cx, LGRSAM_PKCS1_1_5, gh)) { lwsl_notice("%s: lws_genrsa_create fail\n", __func__); goto bail_hmac; } break; default: lwsl_warn("%s: unsupported alg %lld\n", __func__, (long long)cose_alg); goto bail_hmac; } return alg; bail_ecdsa2: lws_genec_destroy(&alg->u.ecdsactx); bail_ecdsa1: lws_genhash_destroy(&alg->hash_ctx, NULL); bail_ecdsa: lws_free(alg); return NULL; bail_hmac: lws_free(alg); return NULL; } int lws_cose_sign_alg_hash(lws_cose_sig_alg_t *alg, const uint8_t *in, size_t in_len) { #if defined(VERBOSE) lwsl_hexdump_warn(in, in_len); #endif switch (alg->cose_alg) { case LWSCOSE_WKAHMAC_256_64: case LWSCOSE_WKAHMAC_256_256: case LWSCOSE_WKAHMAC_384_384: case LWSCOSE_WKAHMAC_512_512: return lws_genhmac_update(&alg->u.hmacctx, in, in_len); } /* EC, rsa are just making the hash before signing */ return lws_genhash_update(&alg->hash_ctx, in, in_len); } /* * We fill up alg-> rhash and rhash_len with the results, and destroy the * crypto pieces cleanly. Call lws_cose_sign_alg_destroy() afterwards to * clean up the alg itself. */ void lws_cose_sign_alg_complete(lws_cose_sig_alg_t *alg) { uint8_t digest[LWS_GENHASH_LARGEST]; unsigned int bytes; uint8_t htype; size_t hs; if (alg->completed) return; switch (alg->cose_alg) { case LWSCOSE_WKAECDSA_ALG_ES256: /* ECDSA w/ SHA-256 */ case LWSCOSE_WKAECDSA_ALG_ES384: /* ECDSA w/ SHA-384 */ case LWSCOSE_WKAECDSA_ALG_ES512: /* ECDSA w/ SHA-512 */ hs = lws_genhash_size(alg->hash_ctx.type); bytes = (unsigned int)lws_gencrypto_bits_to_bytes(alg->keybits); lws_genhash_destroy(&alg->hash_ctx, digest); alg->rhash_len = 0; lwsl_notice("alg keybits %d hs %d\n", (int)alg->keybits, (int)hs); if (!alg->failed && lws_genecdsa_hash_sign_jws(&alg->u.ecdsactx, digest, alg->hash_ctx.type, (int)alg->keybits, alg->rhash, 2u * bytes) >= 0) alg->rhash_len = (int)(2 * bytes); else alg->failed = 1; lws_genec_destroy(&alg->u.ecdsactx); break; case LWSCOSE_WKAHMAC_256_64: case LWSCOSE_WKAHMAC_256_256: case LWSCOSE_WKAHMAC_384_384: case LWSCOSE_WKAHMAC_512_512: alg->rhash_len = (int)lws_genhmac_size(alg->u.hmacctx.type); if (alg->cose_alg == LWSCOSE_WKAHMAC_256_64) alg->rhash_len = 8; if (lws_genhmac_destroy(&alg->u.hmacctx, alg->rhash)) { lwsl_err("%s: destroy failed\n", __func__); break; } break; case LWSCOSE_WKARSA_ALG_RS256: case LWSCOSE_WKARSA_ALG_RS384: case LWSCOSE_WKARSA_ALG_RS512: bytes = (unsigned int)lws_gencrypto_bits_to_bytes(alg->keybits); htype = alg->hash_ctx.type; if (!lws_genhash_destroy(&alg->hash_ctx, digest) && !alg->failed && lws_genrsa_hash_sign(&alg->u.rsactx, digest, htype, alg->rhash, bytes) >= 0) alg->rhash_len = (int)bytes; else lwsl_err("%s: lws_genrsa_hash_sign\n", __func__); lws_genrsa_destroy(&alg->u.rsactx); break; default: break; } alg->completed = 1; } void lws_cose_sign_alg_destroy(lws_cose_sig_alg_t **_alg) { lws_dll2_remove(&(*_alg)->list); lws_cose_sign_alg_complete(*_alg); lws_free_set_NULL(*_alg); } libwebsockets-4.3.5/lib/cose/cose_validate.c000066400000000000000000000571251476025525100210510ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * cose_sign handling * * Validation: * * - we put all our pieces and results in an lwsac in the parse state object * * - we collect pieces needed for sig validation into lwsac elements * * - we go through each signature making discrete results in the lwsac for * the user code to assess */ #include "private-lib-core.h" #include "private-lib-cose.h" const uint8_t *sig_mctx[] = { (uint8_t *)"", (uint8_t *)"\x85\x69""Signature", (uint8_t *)"\x84\x6a""Signature1", (uint8_t *)"\x85\x6f""CounterSignature", (uint8_t *)"\x84\x63""MAC", (uint8_t *)"\x84\x64""MAC0", }; uint8_t sig_mctx_len[] = { 0, 11, 12, 17, 5, 6 }; struct alg_names { const char *name; cose_param_t alg; } alg_names[] = { { "ES256", LWSCOSE_WKAECDSA_ALG_ES256 }, { "ES384", LWSCOSE_WKAECDSA_ALG_ES384 }, { "ES512", LWSCOSE_WKAECDSA_ALG_ES512 }, { "HS256_64", LWSCOSE_WKAHMAC_256_64 }, { "HS256", LWSCOSE_WKAHMAC_256_256 }, { "HS384", LWSCOSE_WKAHMAC_384_384 }, { "HS512", LWSCOSE_WKAHMAC_512_512 }, { "RS256", LWSCOSE_WKARSA_ALG_RS256 }, { "RS384", LWSCOSE_WKARSA_ALG_RS384 }, { "RS512", LWSCOSE_WKARSA_ALG_RS512 }, }; /* * The Sig_structure plaintext is new temp CBOR made up from pieces from the * cose_sign, cose_signature, and payload in a specific order * * tstr context string * bstr 0-len or protected body headers * bstr (Missing for sign1) 0-len or protected signer headers * bstr 0-len or protected application part * bstr the payload * * We are getting CBOR with an optional outer tag and then an array of exactly * 4 items in a fixed order * * [ * protected headers: bstr containing a map (captured as CBOR in cps->ph[]) * unprotected: map: for sign1, eg, the alg (!?), the kid * payload: bstr * if sign: signatures: [ cose_signature struct array, * each is a 3-element array * [ * protected: bstr containing a map: (eg, the alg) (captured as CBOR) * unprotected: map: (eg, the kid) * signature: bstr * ] * if sign1: bstr containing signature * ] * * The last signatures field may be an array of signatures, or a single * cose_signature object for cose_sign1. * * For cose_sign1, we know the signature alg before the payload and can do it * in a single pass. But for sign, we do not know the signature algs until * after the payload, which is an unfortunate oversight in cose_sign, meaning we * cannot hash the payload one or more ways in a single pass. */ #if defined(VERBOSE) const char *cose_sections[] = { "ST_UNKNOWN", "ST_OUTER_PROTECTED", "ST_OUTER_UNPROTECTED", "ST_OUTER_PAYLOAD", "ST_OUTER_SIGN1_SIGNATURE", "ST_OUTER_SIGN_SIGARRAY", "ST_OUTER_MACTAG", "ST_INNER_PROTECTED", "ST_INNER_UNPROTECTED", "ST_INNER_SIGNATURE", "ST_INNER_EXCESS", }; #endif const char * lws_cose_alg_to_name(cose_param_t alg) { size_t n; for (n = 0; n < LWS_ARRAY_SIZE(alg_names); n++) if (alg_names[n].alg == alg) return alg_names[n].name; return "unknown_alg"; } cose_param_t lws_cose_name_to_alg(const char *name) { size_t n; for (n = 0; n < LWS_ARRAY_SIZE(alg_names); n++) if (!strcmp(alg_names[n].name, name)) return alg_names[n].alg; return 0; } static size_t bstr_len(uint8_t *t, size_t buflen, uint8_t opcode, uint64_t len) { uint8_t *ot = t; if (buflen < 9) return 0; if (len < 24) { *t = (uint8_t)(opcode | len); return 1; } if (len < 256) { *t++ = opcode | LWS_CBOR_1; goto b; } if (len < 65536) { *t++ = opcode | LWS_CBOR_2; goto b1; } if (len < 0xffffffffu) { *t++ = opcode | LWS_CBOR_4; goto b2; } *t++ = opcode | LWS_CBOR_8; *t++ = (uint8_t)(len >> 56); *t++ = (uint8_t)(len >> 48); *t++ = (uint8_t)(len >> 40); *t++ = (uint8_t)(len >> 32); b2: *t++ = (uint8_t)(len >> 24); *t++ = (uint8_t)(len >> 16); b1: *t++ = (uint8_t)(len >> 8); b: *t++ = (uint8_t)len; return lws_ptr_diff_size_t(t, ot); } static int apply_external(struct lws_cose_validate_context *cps) { lws_cose_sig_alg_t *alg; uint8_t t[9]; alg = lws_container_of(cps->algs.head, lws_cose_sig_alg_t, list); if (!alg) /* expected if no key */ return 0; /* get the external payload first, if any indicated */ if (cps->info.ext_len) { lws_cose_sig_ext_pay_t ex; size_t s; s = bstr_len(t, sizeof(t), LWS_CBOR_MAJTYP_BSTR, cps->info.ext_len); if (lws_cose_val_alg_hash(alg, t, s)) return 1; memset(&ex, 0, sizeof(ex)); ex.cps = cps; do { int n; ex.xl = 0; n = cps->info.ext_cb(&ex); if (ex.xl && lws_cose_val_alg_hash(alg, ex.ext, ex.xl)) return 1; if (n == LCOSESIGEXTCB_RET_ERROR) return 1; if (n == LCOSESIGEXTCB_RET_FINISHED) break; } while (1); } return 0; } static int create_alg(struct lecp_ctx *ctx, struct lws_cose_validate_context *cps) { lws_cose_validate_param_stack_t *sl = &cps->st[cps->sp], *sl0 = &cps->st[0]; lws_cose_validate_res_t *res; lws_cose_sig_alg_t *alg; lws_cose_key_t *ck; uint8_t *p; size_t s; /* with sign1, we can hash the payload in a * single pass */ ck = lws_cose_key_from_set(cps->info.keyset, sl->kid.buf, sl->kid.len); if (!ck) { lwsl_notice("%s: no key\n", __func__); lwsl_hexdump_notice(sl->kid.buf, sl->kid.len); goto no_key_or_alg; } // lwsl_notice("%s: cps->alg %d\n", __func__, (int)cps->alg); alg = lws_cose_val_alg_create(cps->info.cx, ck, cps->st[0].alg, LWSCOSE_WKKO_VERIFY); if (!alg) { lwsl_info("%s: no alg\n", __func__); no_key_or_alg: /* * We can't create the alg then, so we can't normally * create a result object. Create one especially for this * case and continue on */ res = lws_zalloc(sizeof(*res), __func__); if (res) { res->result = -1001; lws_dll2_add_tail(&res->list, &cps->results); } return 0; } lws_dll2_add_tail(&alg->list, &cps->algs); /* * Hash step 1: The first hash content depends on * sign/sign1/csign/mac/mac0 constant bstr */ if (lws_cose_val_alg_hash(alg, sig_mctx[cps->info.sigtype], sig_mctx_len[cps->info.sigtype])) goto bail; /* * Hash step 2: A zero-length bstr, or a copy of the * OUTER protected headers * * A zero-entry map alone becomes a zero- * length bstr */ if (sl0->ph_pos[0] < 2) { /* nothing to speak of */ sl0->ph[0][0] = LWS_CBOR_MAJTYP_BSTR; p = &sl0->ph[0][0]; s = 1; } else { if (sl0->ph_pos[0] < 24) { sl0->ph[0][2] = (uint8_t) (LWS_CBOR_MAJTYP_BSTR | sl0->ph_pos[0]); p = &sl0->ph[0][2]; s = (size_t)sl0->ph_pos[0] + 1; } else { sl0->ph[0][1] = LWS_CBOR_MAJTYP_BSTR | LWS_CBOR_1; sl0->ph[0][2] = (uint8_t)sl0->ph_pos[0]; p = &sl0->ph[0][1]; s = (size_t)sl0->ph_pos[0] + 2; } } if (lws_cose_val_alg_hash(alg, p, s)) goto bail; /* * Hash step 3: Protected signer headers (Elided for sign1) */ if (cps->info.sigtype == SIGTYPE_MULTI) { if (sl->ph_pos[2] < 2) { /* nothing to speak of */ sl->ph[2][0] = LWS_CBOR_MAJTYP_BSTR; p = &sl->ph[2][0]; s = 1; } else { if (sl->ph_pos[2] < 24) { sl->ph[2][2] = (uint8_t) (LWS_CBOR_MAJTYP_BSTR | sl->ph_pos[2]); p = &sl->ph[2][2]; s = (size_t)sl->ph_pos[2] + 1; } else { sl->ph[2][1] = LWS_CBOR_MAJTYP_BSTR | LWS_CBOR_1; sl->ph[2][2] = (uint8_t)sl->ph_pos[2]; p = &sl->ph[2][1]; s = (size_t)sl->ph_pos[2] + 2; } } if (lws_cose_val_alg_hash(alg, p, s)) goto bail; } /* Hash step 4: bstr for applictation protected pieces * empty for now */ if (!cps->info.ext_len) { /* ie, if no app data */ uint8_t u = LWS_CBOR_MAJTYP_BSTR; if (lws_cose_val_alg_hash(alg, &u, 1)) goto bail; } /* * The final part is the payload in its own bstr, as * we get it if sign1, else replayed from a cache in heap */ if (cps->info.sigtype == SIGTYPE_SINGLE) return 0; if (!cps->payload_stash) { lwsl_notice("%s: no payload stash\n", __func__); goto bail; } apply_external(cps); if (lws_cose_val_alg_hash(alg, cps->payload_stash, cps->payload_pos)) goto bail; lwsl_notice("a %d\n", (int)cps->sig_agg_pos); lws_cose_val_alg_destroy(cps, &alg, (const uint8_t *)cps->sig_agg, cps->sig_agg_pos); return 0; bail: return 1; } #if defined(VERBOSE) static const char * const reason_names[] = { "LECPCB_CONSTRUCTED", "LECPCB_DESTRUCTED", "LECPCB_START", "LECPCB_COMPLETE", "LECPCB_FAILED", "LECPCB_PAIR_NAME", "LECPCB_VAL_TRUE", "LECPCB_VAL_FALSE", "LECPCB_VAL_NULL", "LECPCB_VAL_NUM_INT", "LECPCB_VAL_RESERVED", /* float in lejp */ "LECPCB_VAL_STR_START", "LECPCB_VAL_STR_CHUNK", "LECPCB_VAL_STR_END", "LECPCB_ARRAY_START", "LECPCB_ARRAY_END", "LECPCB_OBJECT_START", "LECPCB_OBJECT_END", "LECPCB_TAG_START", "LECPCB_TAG_END", "LECPCB_VAL_NUM_UINT", "LECPCB_VAL_UNDEFINED", "LECPCB_VAL_FLOAT16", "LECPCB_VAL_FLOAT32", "LECPCB_VAL_FLOAT64", "LECPCB_VAL_SIMPLE", "LECPCB_VAL_BLOB_START", "LECPCB_VAL_BLOB_CHUNK", "LECPCB_VAL_BLOB_END", "LECPCB_ARRAY_ITEM_START", "LECPCB_ARRAY_ITEM_END", "LECPCB_LITERAL_CBOR" }; #endif static int ph_index(struct lws_cose_validate_context *cps) { switch (cps->tli) { case ST_OUTER_PROTECTED: return 0; case ST_OUTER_UNPROTECTED: return 1; case ST_INNER_PROTECTED: return 2; case ST_INNER_UNPROTECTED: return 3; } assert(0); return 0; } static signed char cb_cose_sig(struct lecp_ctx *ctx, char reason) { struct lws_cose_validate_context *cps = (struct lws_cose_validate_context *)ctx->user; lws_cose_validate_param_stack_t *sl; struct lws_gencrypto_keyelem *ke; lws_cose_sig_alg_t *alg; uint8_t t[9]; size_t s; int hi; #if defined(VERBOSE) lwsl_notice("%s: %s, tli %s, sub %d, ppos %d, sp %d\n", __func__, reason_names[reason & 0x1f], cose_sections[cps->tli], cps->sub, ctx->pst[ctx->pst_sp].ppos, cps->sp); #endif switch (reason) { case LECPCB_CONSTRUCTED: break; case LECPCB_TAG_START: lwsl_notice("%s: tag sigtype %d\n", __func__, cps->info.sigtype); switch (cps->info.sigtype) { default: assert(0); break; case SIGTYPE_UNKNOWN: /* it means use the tag value to set the type */ switch (ctx->item.u.u64) { case LWSCOAP_CONTENTFORMAT_COSE_SIGN: cps->info.sigtype = SIGTYPE_MULTI; break; case LWSCOAP_CONTENTFORMAT_COSE_SIGN1: cps->info.sigtype = SIGTYPE_SINGLE; break; // case LWSCOAP_CONTENTFORMAT_COSE_SIGN__: // cps->info.sigtype = SIGTYPE_COUNTERSIGNED; // break; case LWSCOAP_CONTENTFORMAT_COSE_MAC0: cps->info.sigtype = SIGTYPE_MAC0; break; case LWSCOAP_CONTENTFORMAT_COSE_MAC: cps->info.sigtype = SIGTYPE_MAC; break; default: goto unexpected_tag; } break; case SIGTYPE_MULTI: if (ctx->item.u.u64 != LWSCOAP_CONTENTFORMAT_COSE_SIGN) goto unexpected_tag; break; case SIGTYPE_SINGLE: if (ctx->item.u.u64 != LWSCOAP_CONTENTFORMAT_COSE_SIGN1) goto unexpected_tag; break; case SIGTYPE_COUNTERSIGNED: if (ctx->item.u.u64 != LWSCOAP_CONTENTFORMAT_COSE_SIGN) goto unexpected_tag; break; case SIGTYPE_MAC0: if (ctx->item.u.u64 != LWSCOAP_CONTENTFORMAT_COSE_MAC0) goto unexpected_tag; break; case SIGTYPE_MAC: if (ctx->item.u.u64 != LWSCOAP_CONTENTFORMAT_COSE_MAC) { unexpected_tag: lwsl_warn("%s: unexpected tag %d\n", __func__, (int)ctx->item.u.u64); goto bail; } break; } cps->depth++; break; case LECPCB_ARRAY_ITEM_START: if (cps->sub) break; if (ctx->pst[ctx->pst_sp].ppos == 4 || ctx->pst[ctx->pst_sp].ppos == 6) { switch (cps->tli) { case ST_INNER_UNPROTECTED: case ST_INNER_PROTECTED: hi = ph_index(cps); sl = &cps->st[cps->sp]; sl->ph_pos[hi] = 0; lecp_parse_report_raw(ctx, 1); break; default: break; } break; } if (ctx->pst[ctx->pst_sp].ppos != 2) break; switch (cps->tli) { case ST_OUTER_UNPROTECTED: case ST_OUTER_PROTECTED: /* * Holy type confusion, Batman... this is a CBOR bstr * containing valid CBOR that must also be parsed as * part of the containing array... we need to collect * it anyway since it is part of the signing plaintext * in bstr form, let's get it and then parse it at the * END of the bstr. */ lecp_parse_report_raw(ctx, 1); break; case ST_OUTER_PAYLOAD: if (cps->info.sigtype != SIGTYPE_SINGLE) break; if (create_alg(ctx, cps)) goto bail; break; case ST_OUTER_SIGN_SIGARRAY: cps->tli = ST_INNER_PROTECTED; break; } break; case LECPCB_ARRAY_ITEM_END: if (cps->sub) break; if (ctx->pst[ctx->pst_sp].ppos == 2) { sl = &cps->st[cps->sp]; switch (cps->tli) { case ST_OUTER_UNPROTECTED: break; /* fallthru */ case ST_OUTER_PROTECTED: lecp_parse_report_raw(ctx, 0); hi = ph_index(cps); if (!sl->ph_pos[hi] || cps->sub) break; cps->sub = 1; s = (size_t)sl->ph_pos[hi]; if (lecp_parse_subtree(&cps->ctx, sl->ph[hi] + 3, s) != LECP_CONTINUE) goto bail; cps->sub = 0; break; case ST_OUTER_PAYLOAD: switch (cps->info.sigtype) { case SIGTYPE_MULTI: cps->tli = ST_OUTER_SIGN_SIGARRAY - 1; break; case SIGTYPE_MAC: case SIGTYPE_MAC0: cps->tli = ST_OUTER_MACTAG - 1; break; case SIGTYPE_COUNTERSIGNED: break; default: break; } break; case ST_OUTER_SIGN1_SIGNATURE: case ST_OUTER_MACTAG: cps->sp++; cps->tli = ST_INNER_PROTECTED - 1; break; case ST_INNER_UNPROTECTED: lwsl_notice("ST_INNER_UNPROTECTED end\n"); break; case ST_INNER_PROTECTED: lwsl_notice("ST_INNER_PROTECTED end\n"); break; case ST_INNER_EXCESS: case ST_OUTER_SIGN_SIGARRAY: cps->tli--; /* so no change */ break; } if (!cps->sub) cps->tli++; } if (ctx->pst[ctx->pst_sp].ppos >= 4) { uint8_t *p; uint8_t u; size_t s1; switch (cps->tli) { case ST_INNER_UNPROTECTED: case ST_INNER_PROTECTED: hi = ph_index(cps); sl = &cps->st[cps->sp]; p = sl->ph[hi] + 3; lecp_parse_report_raw(ctx, 0); if (!sl->ph_pos[hi] || cps->sub) { if (!cps->sub) cps->tli++; break; } cps->sub = 1; s = (size_t)sl->ph_pos[hi]; /* * somehow the raw captures the * initial BSTR container length, * let's strip it */ u = (*p) & LWS_CBOR_SUBMASK; if (((*p) & LWS_CBOR_MAJTYP_MASK) == LWS_CBOR_MAJTYP_BSTR) { s1 = 1; if (u == LWS_CBOR_1) s1 = 2; else if (u == LWS_CBOR_2) s1 = 3; else if (u == LWS_CBOR_4) s1 = 5; else if (u == LWS_CBOR_8) s1 = 9; if (s1 > s) goto bail; sl->ph_pos[hi] = (int) (sl->ph_pos[hi] - (ssize_t)s1); s = s - s1; memmove(p, p + s1, s); } if (lecp_parse_subtree(&cps->ctx, p, s) != LECP_CONTINUE) goto bail; cps->sub = 0; if (!cps->sub) cps->tli++; break; case ST_INNER_SIGNATURE: if (cps->info.sigtype == SIGTYPE_MAC) { // lwsl_err("Y: alg %d\n", (int)cps->alg); if (create_alg(ctx, cps)) goto bail; } cps->tli++; break; default: break; } } break; case LECPCB_VAL_NUM_INT: case LECPCB_VAL_NUM_UINT: switch (cps->tli) { case ST_INNER_PROTECTED: case ST_INNER_UNPROTECTED: case ST_INNER_SIGNATURE: case ST_OUTER_PROTECTED: case ST_OUTER_UNPROTECTED: if (lecp_parse_map_is_key(ctx)) { cps->map_key = ctx->item.u.i64; // lwsl_notice("%s: key %d\n", __func__, (int)cps->map_key); break; } // lwsl_notice("%s: key %d val %d\n", __func__, (int)cps->map_key, (int)ctx->item.u.i64); if (cps->map_key == LWSCOSE_WKL_ALG) { sl = &cps->st[cps->sp]; cps->map_key = 0; if (cps->tli == ST_INNER_PROTECTED || cps->tli == ST_INNER_UNPROTECTED || cps->tli == ST_INNER_SIGNATURE) { sl->alg = ctx->item.u.i64; if (!cps->st[0].alg) cps->st[0].alg = sl->alg; } else sl->alg = ctx->item.u.i64; break; } break; } break; case LECPCB_VAL_STR_END: switch (cps->tli) { case ST_OUTER_UNPROTECTED: break; } break; case LECPCB_VAL_BLOB_START: lwsl_notice("%s: blob size %d\n", __func__, (int)ctx->item.u.u64); if (cps->tli == ST_OUTER_SIGN1_SIGNATURE || cps->tli == ST_INNER_SIGNATURE) { if (ctx->item.u.u64 > sizeof(cps->sig_agg)) goto bail; cps->sig_agg_pos = 0; break; } if (cps->tli != ST_OUTER_PAYLOAD) break; if (apply_external(cps)) { lwsl_notice("%s: ext\n", __func__); goto bail; } s = bstr_len(t, sizeof(t), LWS_CBOR_MAJTYP_BSTR, ctx->item.u.u64); if (cps->info.sigtype == SIGTYPE_SINGLE) { alg = lws_container_of(cps->algs.head, lws_cose_sig_alg_t, list); if (!alg) /* expected if no key */ break; if (lws_cose_val_alg_hash(alg, t, s)) { lwsl_notice("%s: hash failed\n", __func__); goto bail; } break; } cps->payload_stash_size = (size_t)(ctx->item.u.u64 + s); cps->payload_stash = lws_malloc(cps->payload_stash_size, __func__); if (!cps->payload_stash) { lwsl_notice("%s: oom\n", __func__); goto bail; } memcpy(cps->payload_stash, t, s); cps->payload_pos = s; break; case LECPCB_VAL_BLOB_CHUNK: switch (cps->tli) { case ST_OUTER_PAYLOAD: if (cps->info.pay_cb && ctx->npos) cps->info.pay_cb(cps, cps->info.pay_opaque, (uint8_t *)ctx->buf, ctx->npos); if (cps->payload_stash) { if (cps->payload_pos + ctx->npos > cps->payload_stash_size) goto bail; memcpy(cps->payload_stash + cps->payload_pos, ctx->buf, ctx->npos); cps->payload_pos += ctx->npos; break; } alg = lws_container_of(cps->algs.head, lws_cose_sig_alg_t, list); if (!alg) /* expected if no key */ break; if (ctx->npos && lws_cose_val_alg_hash(alg, (uint8_t *)ctx->buf, ctx->npos)) { lwsl_notice("%s: chunk fail\n", __func__); goto bail; } break; case ST_INNER_SIGNATURE: case ST_OUTER_SIGN1_SIGNATURE: /* the sig is big compared to ctx->buf... we need to * stash it then */ memcpy(cps->sig_agg + cps->sig_agg_pos, ctx->buf, ctx->npos); cps->sig_agg_pos = cps->sig_agg_pos + ctx->npos; break; } break; case LECPCB_VAL_BLOB_END: switch (cps->tli) { case ST_INNER_SIGNATURE: if (cps->info.sigtype == SIGTYPE_MULTI) { memcpy(cps->sig_agg + cps->sig_agg_pos, ctx->buf, ctx->npos); cps->sig_agg_pos = cps->sig_agg_pos + ctx->npos; // lwsl_err("Y: alg %d\n", (int)cps->alg); if (create_alg(ctx, cps)) goto bail; break; } if (cps->info.sigtype != SIGTYPE_MAC) break; /* fallthru */ case ST_OUTER_PROTECTED: case ST_OUTER_UNPROTECTED: case ST_INNER_PROTECTED: case ST_INNER_UNPROTECTED: if (cps->map_key == LWSCOSE_WKL_KID) { sl = &cps->st[cps->sp]; ke = &sl->kid; if (ke->buf) lws_free(ke->buf); ke->buf = lws_malloc(ctx->npos, __func__); if (!ke->buf) goto bail; ke->len = ctx->npos; memcpy(ke->buf, ctx->buf, ctx->npos); cps->map_key = 0; } break; case ST_OUTER_PAYLOAD: if (cps->info.pay_cb && ctx->npos) cps->info.pay_cb(cps, cps->info.pay_opaque, (uint8_t *)ctx->buf, ctx->npos); if (cps->payload_stash) { if (cps->payload_pos + ctx->npos > cps->payload_stash_size) goto bail; memcpy(cps->payload_stash + cps->payload_pos, ctx->buf, ctx->npos); cps->payload_pos += ctx->npos; break; } alg = lws_container_of(cps->algs.head, lws_cose_sig_alg_t, list); if (!alg) /* expected if no key */ break; if (ctx->npos && lws_cose_val_alg_hash(alg, (uint8_t *)ctx->buf, ctx->npos)) goto bail; break; case ST_OUTER_SIGN1_SIGNATURE: if (cps->info.sigtype == SIGTYPE_MULTI) break; memcpy(cps->sig_agg + cps->sig_agg_pos, ctx->buf, ctx->npos); cps->sig_agg_pos += ctx->npos; alg = lws_container_of(cps->algs.head, lws_cose_sig_alg_t, list); lwsl_notice("b\n"); if (alg) lws_cose_val_alg_destroy(cps, &alg, cps->sig_agg, cps->sig_agg_pos); break; case ST_OUTER_MACTAG: if (cps->mac_pos + ctx->npos > sizeof(cps->mac)) goto bail; memcpy(cps->mac + cps->mac_pos, ctx->buf, ctx->npos); cps->mac_pos += ctx->npos; if (cps->info.sigtype == SIGTYPE_MAC0) { if (create_alg(ctx, cps)) goto bail; } break; } break; case LECPCB_LITERAL_CBOR: /* only used for protected headers */ switch (cps->tli) { case ST_INNER_PROTECTED: case ST_OUTER_PROTECTED: case ST_INNER_UNPROTECTED: case ST_OUTER_UNPROTECTED: sl = &cps->st[cps->sp]; hi = ph_index(cps); if (sl->ph_pos[hi] + 3 + ctx->cbor_pos > (int)sizeof(sl->ph[hi]) - 3) /* more protected cbor than we can handle */ goto bail; memcpy(sl->ph[hi] + 3 + sl->ph_pos[hi], ctx->cbor, ctx->cbor_pos); sl->ph_pos[hi] += ctx->cbor_pos; break; } } return 0; bail: return -1; } struct lws_cose_validate_context * lws_cose_validate_create(const lws_cose_validate_create_info_t *info) { struct lws_cose_validate_context *cps; /* you have to provide at least one key in a cose_keyset */ assert(info->keyset); /* you have to provide an lws_context (for crypto random) */ assert(info->cx); cps = lws_zalloc(sizeof(*cps), __func__); if (!cps) return NULL; cps->info = *info; cps->tli = ST_OUTER_PROTECTED; lecp_construct(&cps->ctx, cb_cose_sig, cps, NULL, 0); return cps; } int lws_cose_validate_chunk(struct lws_cose_validate_context *cps, const uint8_t *in, size_t in_len, size_t *used_in) { int n; n = lecp_parse(&cps->ctx, in, in_len); if (used_in) *used_in = cps->ctx.used_in; if (n == LECP_CONTINUE) return LECP_CONTINUE; lecp_destruct(&cps->ctx); return n; } lws_dll2_owner_t * lws_cose_validate_results(struct lws_cose_validate_context *cps) { return &cps->results; } void lws_cose_validate_destroy(struct lws_cose_validate_context **_cps) { struct lws_cose_validate_context *cps = *_cps; if (!cps) return; lws_start_foreach_dll_safe(struct lws_dll2 *, p, tp, lws_dll2_get_head(&cps->algs)) { lws_cose_sig_alg_t *alg = lws_container_of(p, lws_cose_sig_alg_t, list); lws_dll2_remove(p); lws_cose_val_alg_destroy(cps, &alg, NULL, 0); } lws_end_foreach_dll_safe(p, tp); lws_start_foreach_dll_safe(struct lws_dll2 *, p, tp, lws_dll2_get_head(&cps->results)) { lws_cose_validate_res_t *res = lws_container_of(p, lws_cose_validate_res_t, list); lws_dll2_remove(p); lws_free(res); } lws_end_foreach_dll_safe(p, tp); lws_free_set_NULL(cps->payload_stash); lwsac_free(&cps->ac); while (cps->sp >= 0) { if (cps->st[cps->sp].kid.buf) lws_free(cps->st[cps->sp].kid.buf); cps->sp--; } lws_free_set_NULL(*_cps); } libwebsockets-4.3.5/lib/cose/cose_validate_alg.c000066400000000000000000000155201476025525100216650ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "private-lib-cose.h" lws_cose_sig_alg_t * lws_cose_val_alg_create(struct lws_context *cx, lws_cose_key_t *ck, cose_param_t cose_alg, int op) { lws_cose_sig_alg_t *alg = lws_zalloc(sizeof(*alg), __func__); struct lws_gencrypto_keyelem *ke; enum lws_genhmac_types ghm; enum lws_genhash_types gh; const char *crv; if (!alg) return NULL; alg->cose_alg = cose_alg; alg->cose_key = ck; switch (cose_alg) { /* ECDSA algs */ case LWSCOSE_WKAECDSA_ALG_ES256: /* ECDSA w/ SHA-256 */ crv = "P-256"; gh = LWS_GENHASH_TYPE_SHA256; alg->keybits = 256; goto ecdsa; case LWSCOSE_WKAECDSA_ALG_ES384: /* ECDSA w/ SHA-384 */ crv = "P-384"; gh = LWS_GENHASH_TYPE_SHA384; alg->keybits = 384; goto ecdsa; case LWSCOSE_WKAECDSA_ALG_ES512: /* ECDSA w/ SHA-512 */ crv = "P-521"; gh = LWS_GENHASH_TYPE_SHA512; alg->keybits = 521; ecdsa: /* the key is good for this? */ if (lws_cose_key_checks(ck, LWSCOSE_WKKTV_EC2, cose_alg, op, crv)) goto bail_ecdsa; if (lws_genhash_init(&alg->hash_ctx, gh)) goto bail_ecdsa; if (lws_genecdsa_create(&alg->u.ecdsactx, cx, lws_ec_curves)) { lwsl_notice("%s: lws_genrsa_public_decrypt_create\n", __func__); goto bail_ecdsa1; } if (lws_genecdsa_set_key(&alg->u.ecdsactx, ck->e)) { lwsl_notice("%s: ec key import fail\n", __func__); goto bail_ecdsa2; } break; /* HMAC algs */ case LWSCOSE_WKAHMAC_256_64: ghm = LWS_GENHMAC_TYPE_SHA256; alg->keybits = 64; goto hmac; case LWSCOSE_WKAHMAC_256_256: ghm = LWS_GENHMAC_TYPE_SHA256; alg->keybits = 256; goto hmac; case LWSCOSE_WKAHMAC_384_384: ghm = LWS_GENHMAC_TYPE_SHA384; alg->keybits = 384; goto hmac; case LWSCOSE_WKAHMAC_512_512: ghm = LWS_GENHMAC_TYPE_SHA512; alg->keybits = 512; hmac: if (lws_cose_key_checks(ck, LWSCOSE_WKKTV_SYMMETRIC, cose_alg, op, NULL)) goto bail_hmac; ke = &ck->e[LWS_GENCRYPTO_OCT_KEYEL_K]; if (lws_genhmac_init(&alg->u.hmacctx, ghm, ke->buf, ke->len)) goto bail_hmac; break; /* RSASSA algs */ case LWSCOSE_WKARSA_ALG_RS256: gh = LWS_GENHASH_TYPE_SHA256; goto rsassa; case LWSCOSE_WKARSA_ALG_RS384: gh = LWS_GENHASH_TYPE_SHA384; goto rsassa; case LWSCOSE_WKARSA_ALG_RS512: gh = LWS_GENHASH_TYPE_SHA512; rsassa: if (lws_cose_key_checks(ck, LWSCOSE_WKKTV_RSA, cose_alg, op, NULL)) goto bail_hmac; alg->keybits = (int)ck->e[LWS_GENCRYPTO_RSA_KEYEL_N].len * 8; if (lws_genhash_init(&alg->hash_ctx, gh)) goto bail_ecdsa; if (lws_genrsa_create(&alg->u.rsactx, ck->e, cx, LGRSAM_PKCS1_1_5, gh)) { lwsl_notice("%s: lws_genrsa_create fail\n", __func__); goto bail_ecdsa1; } break; default: lwsl_warn("%s: unsupported alg %lld\n", __func__, (long long)cose_alg); goto bail_hmac; } return alg; bail_ecdsa2: lws_genec_destroy(&alg->u.ecdsactx); bail_ecdsa1: lws_genhash_destroy(&alg->hash_ctx, NULL); bail_ecdsa: lws_free(alg); lwsl_notice("%s: failed\n", __func__); return NULL; bail_hmac: lws_free(alg); return NULL; } int lws_cose_val_alg_hash(lws_cose_sig_alg_t *alg, const uint8_t *in, size_t in_len) { #if defined(VERBOSE) lwsl_hexdump_warn(in, in_len); #endif switch (alg->cose_alg) { case LWSCOSE_WKAHMAC_256_64: case LWSCOSE_WKAHMAC_256_256: case LWSCOSE_WKAHMAC_384_384: case LWSCOSE_WKAHMAC_512_512: return lws_genhmac_update(&alg->u.hmacctx, in, in_len); } return lws_genhash_update(&alg->hash_ctx, in, in_len); } void lws_cose_val_alg_destroy(struct lws_cose_validate_context *cps, lws_cose_sig_alg_t **_alg, const uint8_t *against, size_t against_len) { uint8_t digest[LWS_GENHASH_LARGEST]; lws_cose_sig_alg_t *alg = *_alg; lws_cose_validate_res_t *res; size_t hs, shs; int keybits; uint8_t ht; lws_dll2_remove(&alg->list); ht = alg->hash_ctx.type; keybits = alg->keybits; res = lws_zalloc(sizeof(*res), __func__); if (res) { res->cose_key = alg->cose_key; res->cose_alg = alg->cose_alg; res->result = -999; lws_dll2_add_tail(&res->list, &cps->results); } switch (alg->cose_alg) { case LWSCOSE_WKAECDSA_ALG_ES256: /* ECDSA w/ SHA-256 */ case LWSCOSE_WKAECDSA_ALG_ES384: /* ECDSA w/ SHA-384 */ case LWSCOSE_WKAECDSA_ALG_ES512: /* ECDSA w/ SHA-512 */ hs = lws_genhash_size(alg->hash_ctx.type); lws_genhash_destroy(&alg->hash_ctx, digest); lwsl_notice("%d %d %d\n", (int)hs, (int)keybits, (int)against_len); if (res && against) res->result = lws_genecdsa_hash_sig_verify_jws( &alg->u.ecdsactx, digest, ht, keybits, against, against_len); lws_genec_destroy(&alg->u.ecdsactx); break; case LWSCOSE_WKAHMAC_256_64: case LWSCOSE_WKAHMAC_256_256: case LWSCOSE_WKAHMAC_384_384: case LWSCOSE_WKAHMAC_512_512: shs = hs = lws_genhmac_size(alg->u.hmacctx.type); if (alg->cose_alg == LWSCOSE_WKAHMAC_256_64) shs = 8; if (lws_genhmac_destroy(&alg->u.hmacctx, digest)) { lwsl_err("%s: destroy failed\n", __func__); break; } if (cps->mac_pos != shs) { lwsl_warn("%s: mac wrong size\n", __func__); /* we can't compare it, leave it at fail */ break; } if (res && against) { res->result = lws_timingsafe_bcmp(digest, cps->mac, (uint32_t)shs); if (res->result) lwsl_warn("%s: hash mismatch\n", __func__); } break; case LWSCOSE_WKARSA_ALG_RS256: case LWSCOSE_WKARSA_ALG_RS384: case LWSCOSE_WKARSA_ALG_RS512: if (!lws_genhash_destroy(&alg->hash_ctx, digest) && !alg->failed && lws_genrsa_hash_sig_verify(&alg->u.rsactx, digest, alg->hash_ctx.type, against, against_len) >= 0) { if (res) res->result = 0; } else lwsl_err("%s: lws_genrsa_hash_verify\n", __func__); lws_genrsa_destroy(&alg->u.rsactx); break; } lws_free_set_NULL(*_alg); } libwebsockets-4.3.5/lib/cose/private-lib-cose.h000066400000000000000000000073261476025525100214170ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #define VERBOSE #define MAX_BLOBBED_PARAMS 96 /* largest bstr-encoded params */ enum { ST_UNKNOWN, ST_OUTER_PROTECTED, ST_OUTER_UNPROTECTED, ST_OUTER_PAYLOAD, ST_OUTER_SIGN1_SIGNATURE, ST_OUTER_SIGN_SIGARRAY, ST_OUTER_MACTAG, ST_INNER_PROTECTED, ST_INNER_UNPROTECTED, ST_INNER_SIGNATURE, ST_INNER_EXCESS, }; typedef struct lws_cose_sig_alg { lws_dll2_t list; uint8_t rhash[512]; const lws_cose_key_t *cose_key; struct lws_genhash_ctx hash_ctx; union { struct lws_genec_ctx ecdsactx; struct lws_genrsa_ctx rsactx; struct lws_genhmac_ctx hmacctx; } u; cose_param_t cose_alg; int keybits; int rhash_len; char failed; char completed; } lws_cose_sig_alg_t; typedef struct lws_cose_validate_param_stack { uint8_t ph[4][MAX_BLOBBED_PARAMS]; int ph_pos[4]; struct lws_gencrypto_keyelem kid; cose_param_t alg; } lws_cose_validate_param_stack_t; struct lws_cose_validate_context { lws_cose_validate_create_info_t info; uint8_t mac[LWS_GENHASH_LARGEST]; uint8_t sig_agg[512]; lws_cose_validate_param_stack_t st[3]; lws_dll2_owner_t algs; lws_dll2_owner_t results; uint8_t *payload_stash; struct lwsac *ac; struct lecp_ctx ctx; void *user; size_t payload_pos; size_t payload_stash_size; int seen; int depth; int outer; size_t mac_pos; size_t sig_agg_pos; cose_param_t map_key; /* parsing temp before val */ int tli; /* toplevel item */ int sp; uint8_t sub; }; struct lws_cose_sign_context { lws_cose_sign_create_info_t info; lws_dll2_owner_t algs; lws_cose_sig_alg_t *alg; size_t rem_pay; enum lws_cose_sig_types type; /* computed */ int flags; size_t along; int tli; char subsequent; }; extern const uint8_t *sig_mctx[]; extern uint8_t sig_mctx_len[]; extern const char *cose_sections[]; lws_cose_sig_alg_t * lws_cose_val_alg_create(struct lws_context *cx, lws_cose_key_t *ck, cose_param_t cose_alg, int op); int lws_cose_val_alg_hash(lws_cose_sig_alg_t *alg, const uint8_t *in, size_t in_len); void lws_cose_val_alg_destroy(struct lws_cose_validate_context *cps, lws_cose_sig_alg_t **_alg, const uint8_t *against, size_t against_len); lws_cose_sig_alg_t * lws_cose_sign_alg_create(struct lws_context *cx, const lws_cose_key_t *ck, cose_param_t cose_alg, int op); int lws_cose_sign_alg_hash(lws_cose_sig_alg_t *alg, const uint8_t *in, size_t in_len); void lws_cose_sign_alg_complete(lws_cose_sig_alg_t *alg); void lws_cose_sign_alg_destroy(lws_cose_sig_alg_t **_alg); libwebsockets-4.3.5/lib/drivers/000077500000000000000000000000001476025525100166165ustar00rootroot00000000000000libwebsockets-4.3.5/lib/drivers/CMakeLists.txt000066400000000000000000000012331476025525100213550ustar00rootroot00000000000000list(APPEND SOURCES drivers/display/lws-display.c drivers/display/ssd1306-i2c.c drivers/display/ili9341-spi.c drivers/i2c/lws-i2c.c drivers/i2c/bitbang/lws-bb-i2c.c drivers/spi/lws-spi.c drivers/spi/bitbang/lws-bb-spi.c drivers/button/lws-button.c drivers/led/led-gpio.c drivers/led/led-seq.c drivers/pwm/pwm.c drivers/settings/settings.c ) if (LWS_WITH_NETWORK) list(APPEND SOURCES drivers/netdev/netdev.c drivers/netdev/wifi.c) endif() if (LWS_ESP_PLATFORM) list(APPEND SOURCES plat/freertos/esp32/drivers/gpio-esp32.c plat/freertos/esp32/drivers/pwm-esp32.c ) endif() exports_to_parent_scope() libwebsockets-4.3.5/lib/drivers/README.md000066400000000000000000000042201476025525100200730ustar00rootroot00000000000000# lws meta-drivers Although drivers in lws (enabled in cmake by `LWS_WITH_DRIVERS`) provide actual drivers for some devices like I2C OLED controllers, their main job is to conceal from user code the underlying OS APIs being used to interface to the SoC hardware assets. CMake already allows lws to be platform-agnostic for build, the plat adaptations allow lws to be platform-agnostic within itself for runtime. The lws drivers intend to extend that agnosticism to user code. Using this technique on supported OSes frees the user code from dependencies on the underlying OS choice... for example, although ESP32 is very good, it comes with a highly specific set of apis in esp-idf that mean your code is locked in to esp-idf if you follow them. Esp-idf uses freertos apis for things like OS timers, again if you follow those you are locked into freertos, the end result is your work is non-portable to other platforms and completely dependent on esp. LWS drivers provide a thin wrapper to eliminate the OS dependencies while still taking advantage of the work, drivers and maintenance of the underlying OS layer without duplicating them, but bringing the flexibility to retarget your work to other scenarios... for example, there is a generic gpio object subclassed for specific implementations, an i2c object which may be subclassed to use OS drivers or bitbang using the generic gpio object, buttons on top of generic gpio, led class that can use generic gpio or pwm interchangeably, platform-specific gpio, i2c, pwm implementations that can be used at the generic level are defined to use underlying OS native apis and drivers. ## Building on the next layer up At these generic objects like buttons or led controllers, there is a stable codebase used by multiple implementations and the intention is to provide best-of-breed features there generically, like - sophisticated button press debounce and classification - high quality transitions and log-response compensation and mixing for led pwm - display dimming timers, blanking timers, generic interaction detection to unblank which are automatically available on top of any implementation that is ported to lws drivers. libwebsockets-4.3.5/lib/drivers/button/000077500000000000000000000000001476025525100201315ustar00rootroot00000000000000libwebsockets-4.3.5/lib/drivers/button/README.md000066400000000000000000000145651476025525100214230ustar00rootroot00000000000000# LWS GPIO Button class drivers Lws provides an GPIO button controller class, this centralizes handling a set of up to 31 buttons for resource efficiency. Each controller has two OS timers, one for interrupt to bottom-half event triggering and another that runs at 5ms intervals only when one or more button is down. Each button has its own active level control and sophisticated state tracking; each button can apply its own classification regime, to allow for different physical button characteristics, if not overridden a default one is provided. Both the controller and individual buttons specify names that are used in the JSON events produced when the buttons perform actions. ## Button electronic to logical event processing Buttons are monitored using GPIO interrupts since this is very cheap in the usual case no interaction is ongoing. There is assumed to be one interrupt per GPIO, but they are pointed at the same ISR, with an opaque pointer to an internal struct passed per-interrupt to differentiate them and bind them to a particular button. The interrupt is set for notification of the active-going edge, usually if the button is pulled-up, that's the downgoing edge only. This avoids any ambiguity about the interrupt meaning, although oscillation is common around the transition region when the signal is becoming inactive too. An OS timer is used to schedule a bottom-half handler outside of interrupt context. To combat commonly-seen partial charging of the actual and parasitic network around the button causing drift and oscillation, the bottom-half briefly drives the button signal to the active level, forcing a more deterministic charge level if it reached the point the interrupt was triggered. This removes much of the unpredictable behaviour in the us range. It would be better done in the ISR but many OS apis cannot perform GPIO operations in interrupt context. The bottom-half makes sure a monitoring timer is enabled, by refcount. This is the engine of the rest of the classification while any button is down. The monitoring timer happens per OS tick or 5ms, whichever is longer. ## Declaring button controllers An array of button map elements if provided first mapping at least GPIOs to button names, and also optionally the classification regime for that button. Then the button controller definition which points back to the button map. ``` static const lws_button_map_t bcm[] = { { .gpio = GPIO_NUM_0, .smd_interaction_name = "user" }, }; static const lws_button_controller_t bc = { .smd_bc_name = "bc", .gpio_ops = &lws_gpio_plat, .button_map = &bcm[0], .active_state_bitmap = 0, .count_buttons = LWS_ARRAY_SIZE(bcm), }; struct lws_button_state *bcs; bcs = lws_button_controller_create(context, &bc); if (!bcs) { lwsl_err("%s: could not create buttons\n", __func__); goto spin; } ``` That is all that is needed for init, button events will be issued on lws_smd when buttons are pressed. ### Regime settings The classification regime is designed to reflect both the user interaction style and the characteristics of a particular type of button. Member|Default|Meaning ---|---|--- ms_min_down|20ms|Down events shorter than this are ignored ms_min_down_longpress|300ms|Down events longer than this are reported as a long-click ms_up_settle|20ms|After the first indication a button is no longer down, the button is ignored for this interval ms_doubleclick_grace|120ms|The time allowed after a click to see if a second, double-click, is forthcoming ms_repeat_down|0 / disabled|If held down, interval at which to issue `stilldown` events flags|LWSBTNRGMFLAG_CLASSIFY_DOUBLECLICK|Control which classifications can apply ### lws_smd System Message Distribution Events The button controller emits system messages of class `LWSSMDCL_INTERACTION`, using a JSON formatted payload ``` { "type": "button", "src": "controller-name/button-name", "event": "event-name" } ``` For example, `{"type":"button","src":"bc/user","event":"doubleclick"}` JSON is used because it is maintainable, extensible, self-documenting and does not require a central, fragile-against-versioning specification of mappings. Using button names allows the same code to adapt to different hardware or button mappings. Button events may be synthesized for test or other purposes cleanly and clearly. All the events are somewhat filtered, too short glitches from EMI or whatever are not reported. "up" and "down" events are reported for the buttons in case the intention is the duration of the press is meaningful to the user code, but more typically the user code wants to consume a higher-level classification of the interaction, eg, that it can be understood as a single "double-click" event. Event name|Meaning ---|--- down|The button passes a filter for being down, useful for duration-based response stilldown|The regime can be configured to issue "repeat" notifications at intervals up|The button has come up, useful for duration-based response click|The button activity resulted in a classification as a single-click longclick|The button activity resulted in a classification as a long-click doubleclick|The button activity resulted in a classification as a double-click Since double-click detection requires delaying click reporting until it becomes clear a second click isn't coming, it is enabled as a possible classification in the regime structure and the regime structure chosen per-button. Typically user code is interested in, eg, a high level classification of what the button is doing, eg, a "click" event on a specific button. Rather than perform a JSON parse, these events can be processed as strings cheaply using `lws_json_simple_strcmp()`, it's dumb enough to be cheap but smart enough to understand enough JSON semantics to be accurate, while retaining the ability to change and extend the JSON, eg ``` if (!lws_json_simple_strcmp(buf, len, "\"src\":", "bc/user")) { if (!lws_json_simple_strcmp(buf, len, "\"event\":", "click")) { ... } ... } ``` ### Relationship between up / down and classification Classification|Sequencing ---|--- click|down-up-click (it's classified when it went up and cannot be a longclick) longclick|down-longclick-up (it's classified while still down) doubleclick|down-up-down-doubleclick-up (classified as soon as second click down long enough) If the regime is configured for it, any "down" may be followed by one or more "stilldown" at intervals if the button is down long enough libwebsockets-4.3.5/lib/drivers/button/lws-button.c000066400000000000000000000353041476025525100224200ustar00rootroot00000000000000/* * Generic GPIO / irq buttons * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" typedef enum lws_button_classify_states { LBCS_IDLE, /* nothing happening */ LBCS_MIN_DOWN_QUALIFY, LBCS_ASSESS_DOWN_HOLD, LBCS_UP_SETTLE1, LBCS_WAIT_DOUBLECLICK, LBCS_MIN_DOWN_QUALIFY2, LBCS_WAIT_UP, LBCS_UP_SETTLE2, } lws_button_classify_states_t; /* * This is the opaque, allocated, non-const, dynamic footprint of the * button controller */ typedef struct lws_button_state { #if defined(LWS_PLAT_TIMER_TYPE) LWS_PLAT_TIMER_TYPE timer; /* bh timer */ LWS_PLAT_TIMER_TYPE timer_mon; /* monitor timer */ #endif const lws_button_controller_t *controller; struct lws_context *ctx; short mon_refcount; lws_button_idx_t enable_bitmap; lws_button_idx_t state_bitmap; uint16_t mon_timer_count; /* incremented each time the mon timer cb happens */ /* lws_button_each_t per button overallocated after this */ } lws_button_state_t; typedef struct lws_button_each { lws_button_state_t *bcs; uint16_t mon_timer_comp; uint16_t mon_timer_repeat; uint8_t state; /**^ lws_button_classify_states_t */ uint8_t isr_pending; } lws_button_each_t; #if defined(LWS_PLAT_TIMER_START) static const lws_button_regime_t default_regime = { .ms_min_down = 20, .ms_min_down_longpress = 300, .ms_up_settle = 20, .ms_doubleclick_grace = 120, .flags = LWSBTNRGMFLAG_CLASSIFY_DOUBLECLICK }; #endif /* * This is happening in interrupt context, we have to schedule a bottom half to * do the foreground lws_smd queueing, using, eg, a platform timer. * * All the buttons point here and use one timer per button controller. An * interrupt here means, "something happened to one or more buttons" */ #if defined(LWS_PLAT_TIMER_START) void lws_button_irq_cb_t(void *arg) { lws_button_each_t *each = (lws_button_each_t *)arg; each->isr_pending = 1; LWS_PLAT_TIMER_START(each->bcs->timer); } #endif /* * This is the bottom-half scheduled via a timer set in the ISR. From here we * are allowed to hold mutexes etc. We are coming here because any button * interrupt arrived, we have to run another timer that tries to put whatever is * observed on any active button into context and either discard it or arrive at * a definitive event classification. */ #if defined(LWS_PLAT_TIMER_CB) static LWS_PLAT_TIMER_CB(lws_button_bh, th) { lws_button_state_t *bcs = LWS_PLAT_TIMER_CB_GET_OPAQUE(th); lws_button_each_t *each = (lws_button_each_t *)&bcs[1]; const lws_button_controller_t *bc = bcs->controller; size_t n; /* * The ISR and bottom-half is shared by all the buttons. Each gpio * IRQ has an individual opaque ptr pointing to the corresponding * button's dynamic lws_button_each_t, the ISR marks the button's * each->isr_pending and schedules this bottom half. * * So now the bh timer has fired and something to do, we need to go * through all the buttons that have isr_pending set and service their * state. Intermediate states should start / bump the refcount on the * mon timer. That's refcounted so it only runs when a button down. */ for (n = 0; n < bc->count_buttons; n++) { if (!each[n].isr_pending) continue; /* * Hide what we're about to do from the delicate eyes of the * IRQ controller... */ bc->gpio_ops->irq_mode(bc->button_map[n].gpio, LWSGGPIO_IRQ_NONE, NULL, NULL); each[n].isr_pending = 0; /* * Force the network around the switch to the * active level briefly */ bc->gpio_ops->set(bc->button_map[n].gpio, !!(bc->active_state_bitmap & (1 << n))); bc->gpio_ops->mode(bc->button_map[n].gpio, LWSGGPIO_FL_WRITE); if (each[n].state == LBCS_IDLE) { /* * If this is the first sign something happening on this * button, make sure the monitor timer is running to * classify its response over time */ each[n].state = LBCS_MIN_DOWN_QUALIFY; each[n].mon_timer_comp = bcs->mon_timer_count; if (!bcs->mon_refcount++) { #if defined(LWS_PLAT_TIMER_START) LWS_PLAT_TIMER_START(bcs->timer_mon); #endif } } /* * Just for a us or two inbetween here, we're driving it to the * level we were informed by the interrupt it had enetered, to * force to charge on the actual and parasitic network around * the switch to a deterministic-ish state. * * If the switch remains in that state, well, it makes no * difference; if it was a pre-contact and the charge on the * network was left indeterminate, this will dispose it to act * consistently in the short term until the pullup / pulldown * has time to act on it or the switch comes and forces the * network charge state itself. */ bc->gpio_ops->mode(bc->button_map[n].gpio, LWSGGPIO_FL_READ); /* * We could do a better job manipulating the irq mode according * to the switch state. But if an interrupt comes and we have * done that, we can't tell if it's from before or after the * mode change... ie, we don't know what the interrupt was * telling us. We can't trust the gpio state if we read it now * to be related to what the irq from some time before was * trying to tell us. So always set it back to the same mode * and accept the limitation. */ bc->gpio_ops->irq_mode(bc->button_map[n].gpio, bc->active_state_bitmap & (1 << n) ? LWSGGPIO_IRQ_RISING : LWSGGPIO_IRQ_FALLING, lws_button_irq_cb_t, &each[n]); } } #endif #if defined(LWS_PLAT_TIMER_CB) static LWS_PLAT_TIMER_CB(lws_button_mon, th) { lws_button_state_t *bcs = LWS_PLAT_TIMER_CB_GET_OPAQUE(th); lws_button_each_t *each = (lws_button_each_t *)&bcs[1]; const lws_button_controller_t *bc = bcs->controller; const lws_button_regime_t *regime; const char *event_name; int comp_age_ms; char active; size_t n; bcs->mon_timer_count++; for (n = 0; n < bc->count_buttons; n++) { if (each->state == LBCS_IDLE) { each++; continue; } if (bc->button_map[n].regime) regime = bc->button_map[n].regime; else regime = &default_regime; comp_age_ms = (bcs->mon_timer_count - each->mon_timer_comp) * LWS_BUTTON_MON_TIMER_MS; active = bc->gpio_ops->read(bc->button_map[n].gpio) ^ (!(bc->active_state_bitmap & (1 << n))); // lwsl_notice("%d\n", each->state); switch (each->state) { case LBCS_MIN_DOWN_QUALIFY: /* * We're trying to figure out if the initial down event * is a glitch, or if it meets the criteria for being * treated as the definitive start of some kind of click * action. To get past this, he has to be solidly down * for the time mentioned in the applied regime (at * least when we sample it). * * Significant bounce at the start will abort this try, * but if it's really down there will be a subsequent * solid down period... it will simply restart this flow * from a new interrupt and pass the filter then. * * The "brief drive on edge" strategy considerably * reduces inconsistencies here. But physical bounce * will continue to be observed. */ if (!active) { /* We ignore stuff for a bit after discard */ each->mon_timer_comp = bcs->mon_timer_count; each->state = LBCS_UP_SETTLE2; break; } if (comp_age_ms >= regime->ms_min_down) { /* We made it through the initial regime filter, * the next step is wait and see if this down * event evolves into a single/double click or * we can call it as a long-click */ each->mon_timer_repeat = bcs->mon_timer_count; each->state = LBCS_ASSESS_DOWN_HOLD; event_name = "down"; goto emit; } break; case LBCS_ASSESS_DOWN_HOLD: /* * How long is he going to hold it? If he holds it * past the long-click threshold, we can call it as a * long-click and do the up processing afterwards. */ if (comp_age_ms >= regime->ms_min_down_longpress) { /* call it as a longclick */ event_name = "longclick"; each->state = LBCS_WAIT_UP; goto emit; } if (!active) { /* * He didn't hold it past the long-click * threshold... we could end up classifying it * as either a click or a double-click then. * * If double-clicks are not allowed to be * classified, then we can already classify it * as a single-click. */ if (!(regime->flags & LWSBTNRGMFLAG_CLASSIFY_DOUBLECLICK)) goto classify_single; /* * Just wait for the up settle time then start * looking for a second down. */ each->mon_timer_comp = bcs->mon_timer_count; each->state = LBCS_UP_SETTLE1; event_name = "up"; goto emit; } goto stilldown; case LBCS_UP_SETTLE1: if (comp_age_ms > regime->ms_up_settle) /* * Just block anything for the up settle time */ each->state = LBCS_WAIT_DOUBLECLICK; break; case LBCS_WAIT_DOUBLECLICK: if (active) { /* * He has gone down again inside the regime's * doubleclick grace period... he's going down * the double-click path */ each->mon_timer_comp = bcs->mon_timer_count; each->state = LBCS_MIN_DOWN_QUALIFY2; break; } if (comp_age_ms >= regime->ms_doubleclick_grace) { /* * The grace period expired, the second click * was either not forthcoming at all, or coming * quick enough to count: we classify it as a * single-click */ goto classify_single; } break; case LBCS_MIN_DOWN_QUALIFY2: if (!active) { /* * He went up again too quickly, classify it * as a single-click. It could be bounce in * which case you might want to increase the * ms_up_settle in the regime */ classify_single: event_name = "click"; each->mon_timer_comp = bcs->mon_timer_count; each->state = LBCS_UP_SETTLE2; goto emit; } if (comp_age_ms == regime->ms_min_down) { event_name = "down"; goto emit; } if (comp_age_ms > regime->ms_min_down) { /* * It's a double-click */ event_name = "doubleclick"; each->state = LBCS_WAIT_UP; goto emit; } break; case LBCS_WAIT_UP: if (!active) { /* * He has stopped pressing it */ each->mon_timer_comp = bcs->mon_timer_count; each->state = LBCS_UP_SETTLE2; event_name = "up"; goto emit; } stilldown: if (regime->ms_repeat_down && (bcs->mon_timer_count - each->mon_timer_repeat) * LWS_BUTTON_MON_TIMER_MS > regime->ms_repeat_down) { each->mon_timer_repeat = bcs->mon_timer_count; event_name = "stilldown"; goto emit; } break; case LBCS_UP_SETTLE2: if (comp_age_ms < regime->ms_up_settle) break; each->state = LBCS_IDLE; if (!(--bcs->mon_refcount)) { #if defined(LWS_PLAT_TIMER_STOP) LWS_PLAT_TIMER_STOP(bcs->timer_mon); #endif } } each++; continue; emit: lws_smd_msg_printf(bcs->ctx, LWSSMDCL_INTERACTION, "{\"type\":\"button\"," "\"src\":\"%s/%s\",\"event\":\"%s\"}", bc->smd_bc_name, bc->button_map[n].smd_interaction_name, event_name); each++; } } #endif struct lws_button_state * lws_button_controller_create(struct lws_context *ctx, const lws_button_controller_t *controller) { lws_button_state_t *bcs = lws_zalloc(sizeof(lws_button_state_t) + (controller->count_buttons * sizeof(lws_button_each_t)), __func__); lws_button_each_t *each = (lws_button_each_t *)&bcs[1]; size_t n; if (!bcs) return NULL; bcs->controller = controller; bcs->ctx = ctx; for (n = 0; n < controller->count_buttons; n++) each[n].bcs = bcs; #if defined(LWS_PLAT_TIMER_CREATE) /* this only runs inbetween a gpio ISR and the bottom half */ bcs->timer = LWS_PLAT_TIMER_CREATE("bcst", 1, 0, bcs, (TimerCallbackFunction_t)lws_button_bh); if (!bcs->timer) return NULL; /* this only runs when a button activity is being classified */ bcs->timer_mon = LWS_PLAT_TIMER_CREATE("bcmon", LWS_BUTTON_MON_TIMER_MS, 1, bcs, (TimerCallbackFunction_t) lws_button_mon); if (!bcs->timer_mon) return NULL; #endif return bcs; } void lws_button_controller_destroy(struct lws_button_state *bcs) { /* disable them all */ lws_button_enable(bcs, 0, 0); #if defined(LWS_PLAT_TIMER_DELETE) LWS_PLAT_TIMER_DELETE(bcs->timer); LWS_PLAT_TIMER_DELETE(bcs->timer_mon); #endif lws_free(bcs); } lws_button_idx_t lws_button_get_bit(struct lws_button_state *bcs, const char *name) { const lws_button_controller_t *bc = bcs->controller; int n; for (n = 0; n < bc->count_buttons; n++) if (!strcmp(name, bc->button_map[n].smd_interaction_name)) return 1 << n; return 0; /* not found */ } void lws_button_enable(lws_button_state_t *bcs, lws_button_idx_t _reset, lws_button_idx_t _set) { lws_button_idx_t u = (bcs->enable_bitmap & (~_reset)) | _set; const lws_button_controller_t *bc = bcs->controller; #if defined(LWS_PLAT_TIMER_START) lws_button_each_t *each = (lws_button_each_t *)&bcs[1]; #endif int n; for (n = 0; n < bcs->controller->count_buttons; n++) { if (!(bcs->enable_bitmap & (1 << n)) && (u & (1 << n))) { /* set as input with pullup or pulldown appropriately */ bc->gpio_ops->mode(bc->button_map[n].gpio, LWSGGPIO_FL_READ | ((bc->active_state_bitmap & (1 << n)) ? LWSGGPIO_FL_PULLDOWN : LWSGGPIO_FL_PULLUP)); #if defined(LWS_PLAT_TIMER_START) /* * This one is becoming enabled... the opaque for the * ISR is the indvidual lws_button_each_t, they all * point to the same ISR */ bc->gpio_ops->irq_mode(bc->button_map[n].gpio, bc->active_state_bitmap & (1 << n) ? LWSGGPIO_IRQ_RISING : LWSGGPIO_IRQ_FALLING, lws_button_irq_cb_t, &each[n]); #endif } if ((bcs->enable_bitmap & (1 << n)) && !(u & (1 << n))) /* this one is becoming disabled */ bc->gpio_ops->irq_mode(bc->button_map[n].gpio, LWSGGPIO_IRQ_NONE, NULL, NULL); } bcs->enable_bitmap = u; } libwebsockets-4.3.5/lib/drivers/devices/000077500000000000000000000000001476025525100202405ustar00rootroot00000000000000libwebsockets-4.3.5/lib/drivers/devices/display/000077500000000000000000000000001476025525100217055ustar00rootroot00000000000000libwebsockets-4.3.5/lib/drivers/devices/display/ili9341.h000066400000000000000000000053641476025525100231640ustar00rootroot00000000000000/* * Private register map for ILI9341 * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * */ #if !defined(__LWS_ILI9341_H__) #define __LWS_ILI9341_H__ enum { ILI9341_NOP = 0x00, ILI9341_SWRESET = 0x01, ILI9341_RDDID = 0x04, ILI9341_RDDST = 0x09, ILI9341_SLPIN = 0x10, ILI9341_SLPOUT = 0x11, ILI9341_PTLON = 0x12, ILI9341_NORON = 0x13, ILI9341_RDMODE = 0x0a, ILI9341_RDMADCTL = 0x0b, ILI9341_RDPIXFMT = 0x0c, ILI9341_RDIMGFMT = 0x0d, ILI9341_RDSELFDIAG = 0x0f, ILI9341_INVOFF = 0x20, ILI9341_INVON = 0x21, ILI9341_GAMMASET = 0x26, ILI9341_DISPOFF = 0x28, ILI9341_DISPON = 0x29, ILI9341_CASET = 0x2a, ILI9341_PASET = 0x2b, ILI9341_RAMWR = 0x2c, ILI9341_RAMRD = 0x2e, ILI9341_PTLAR = 0x30, ILI9341_VSCRDEF = 0x33, ILI9341_MADCTL = 0x36, ILI9341_VSCRSADD = 0x37, ILI9341_PIXFMT = 0x3a, ILI9341_FRMCTR1 = 0xb1, ILI9341_FRMCTR2 = 0xb2, ILI9341_FRMCTR3 = 0xb3, ILI9341_INVCTR = 0xb4, ILI9341_DFUNCTR = 0xb6, ILI9341_PWCTR1 = 0xc0, ILI9341_PWCTR2 = 0xc1, ILI9341_PWCTR3 = 0xc2, ILI9341_PWCTR4 = 0xc3, ILI9341_PWCTR5 = 0xc4, ILI9341_VMCTR1 = 0xc5, ILI9341_VMCTR2 = 0xc7, ILI9341_FACPUMPRAT = 0xcb, ILI9341_FACPWCTRB = 0xcf, ILI9341_RDID1 = 0xda, ILI9341_RDID2 = 0xdb, ILI9341_RDID3 = 0xdc, ILI9341_RDID4 = 0xdd, ILI9341_GMCTRP1 = 0xe0, ILI9341_GMCTRN1 = 0xe1, ILI9341_FACPWCTRA = 0xe8, ILI9341_FACPWCTR1 = 0xea, ILI9341_FACDRTIMCTRA = 0xed, ILI9341_FACSETGAMMACRV = 0xf2, ILI9341_FACDRTIMCTR = 0xf7, }; #endif libwebsockets-4.3.5/lib/drivers/devices/display/ssd1306.h000066400000000000000000000040251476025525100231620ustar00rootroot00000000000000/* * Private register map for SSD1306 * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * */ #if !defined(__LWS_SSD1306_H__) #define __LWS_SSD1306_H__ enum { SSD1306_SETLOWCOLUMN = 0x00, SSD1306_SETHIGHCOLUMN = 0x10, SSD1306_MEMORYMODE = 0x20, SSD1306_COLUMNADDR = 0x21, SSD1306_PAGEADDR = 0x22, SSD1306_DEACTIVATE_SCROLL = 0x2e, SSD1306_SETSTARTLINE = 0x40, SSD1306_SETCONTRAST = 0x81, SSD1306_CHARGEPUMP = 0x8d, SSD1306_SEGREMAP = 0xa0, SSD1306_SETSEGMENTREMAP = 0xa1, SSD1306_DISPLAYALLON_RESUME = 0xa4, SSD1306_DISPLAYALLON = 0xa5, SSD1306_NORMALDISPLAY = 0xa6, SSD1306_INVERTDISPLAY = 0xa7, SSD1306_SETMULTIPLEX = 0xa8, SSD1306_DISPLAYOFF = 0xae, SSD1306_DISPLAYON = 0xaf, SSD1306_COMSCANINC = 0xc0, SSD1306_COMSCANDEC = 0xc8, SSD1306_SETDISPLAYOFFSET = 0xd3, SSD1306_SETDISPLAYCLOCKDIV = 0xd5, SSD1306_SETPRECHARGE = 0xd9, SSD1306_SETCOMPINS = 0xda, SSD1306_SETVCOMDESELECT = 0xdb, SSD1306_NOP = 0xe3, }; #endif libwebsockets-4.3.5/lib/drivers/display/000077500000000000000000000000001476025525100202635ustar00rootroot00000000000000libwebsockets-4.3.5/lib/drivers/display/README.md000066400000000000000000000034371476025525100215510ustar00rootroot00000000000000# lws_display lws provides a generic "display" object that is independent of the connection to the display, i2c and spi implementations are provided. Its purpose is to provide basic blit, backlight binding to lws_pwm, backlight / power management and display info like pixels wide and high in a generic way. The generic display object `lws_display_t` can be included at the top of a specific display implementation object, eg, binding it to additional members to define the actual IO operations to be used, eg, i2c or spi. When the display is instantiated, it allocates an additional structure on heap that contains dynamic information about display state, `lws_display_state_t`. ## Power state machine lws_display objects have convenient power state management using a single lws sul event loop timer that is managed automatically. State|Meaning ---|--- OFF|The display is in sleep and not showing anything BECOMING_ACTIVE|The display was asked to come out of sleep and is waiting for .latency_wake_ms befor proceeding to ACTIVE. The backlight if any is off. After the delay, the backlight is sequenced up to `.bl_active` using `.bl_transition` sequencer ACTIVE|The backlight is ON and the dim timer is running AUTODIMMED|The dim timer was not told the display was active for `.autodim_ms`, we are at `.bl_dim` brightness. After `.off_ms` we will transition to OFF The lws_pwm sequencers are used to provide customizable, smooth transitions for the backlight, which may be nonlinear. ## Active notification Calling `lws_display_state_active(&lds)` on eg, user interaction causes the display state to transition to ACTIVE smoothly, taking care of waking the display and waiting out a display-specific wake period, and sequencing the backlight transition to active level as specified in the display structure. libwebsockets-4.3.5/lib/drivers/display/ili9341-spi.c000066400000000000000000000116401476025525100223200ustar00rootroot00000000000000/* * lws abstract display implementation for ili9341 on spi * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include #include static uint8_t ili9341_320x240_init[] = { /* * This provides 70Hz 320x240 at RGB565, we assume im[3:0] is 1110 * which is 4-bit SPI */ 3, ILI9341_FACPWCTRB, 0x00, 0x83, 0x30, 4, ILI9341_FACDRTIMCTRA, 0x64, 0x03, 0x12, 0x81, 3, ILI9341_FACPWCTRA, 0x85, 0x01, 0x79, 5, ILI9341_FACPUMPRAT, 0x39, 0x2c, 0x00, 0x34, 0x02, 1, ILI9341_FACDRTIMCTR, 0x20, 2, ILI9341_FACPWCTR1, 0x00, 0x00, 1, ILI9341_PWCTR1, 0x26, 1, ILI9341_PWCTR2, 0x11, 2, ILI9341_VMCTR1, 0x35, 0x3e, 1, ILI9341_VMCTR2, 0xbe, 1, ILI9341_MADCTL, 0x28, 1, ILI9341_VSCRSADD, 0x00, 1, ILI9341_PIXFMT, 0x55, 2, ILI9341_FRMCTR1, 0x00, 0x1b, 1, ILI9341_FACSETGAMMACRV, 0x00, 1, ILI9341_GAMMASET, 0x01, 15, ILI9341_GMCTRP1, 0x0f, 0x31, 0x2b, 0x0c, 0x0e, 0x08, 0x4e, 0xf1, 0x37, 0x07, 0x10, 0x03, 0x0e, 0x09, 0x00, 15, ILI9341_GMCTRN1, 0x00, 0x0e, 0x14, 0x03, 0x11, 0x07, 0x31, 0xc1, 0x48, 0x08, 0x0f, 0x0c, 0x31, 0x36, 0x0f, 4, ILI9341_DFUNCTR, 0x0a, 0x82, 0x27, 0x00, }; int lws_display_ili9341_spi_init(const struct lws_display *disp) { const lws_display_ili9341_t *ili = (const lws_display_ili9341_t *)disp; lws_spi_desc_t desc; size_t pos = 0; uint8_t u[8]; lwsl_user("%s\n", __func__); /* hardware nRESET */ if (ili->gpio) { ili->gpio->mode(ili->reset_gpio, LWSGGPIO_FL_WRITE | LWSGGPIO_FL_PULLUP); ili->gpio->set(ili->reset_gpio, 0); lws_msleep(1); ili->gpio->set(ili->reset_gpio, 1); lws_msleep(1); } /* * We cut the init table up into transactions... atm we just go with * the fact that bb spi is synchronous, using async / dma we can't use * a single desc on the stack like this */ memset(&desc, 0, sizeof(desc)); desc.count_cmd = 1; while (pos < LWS_ARRAY_SIZE(ili9341_320x240_init)) { desc.count_write = ili9341_320x240_init[pos++]; desc.src = &ili9341_320x240_init[pos++]; desc.data = &ili9341_320x240_init[pos]; pos += desc.count_write; ili->spi->queue(ili->spi, &desc); } u[0] = ILI9341_SLPOUT; desc.src = &u[0]; desc.count_write = 0; ili->spi->queue(ili->spi, &desc); lws_msleep(5); u[0] = ILI9341_DISPON; ili->spi->queue(ili->spi, &desc); return 0; } /* backlight handled by PWM */ int lws_display_ili9341_spi_brightness(const struct lws_display *disp, uint8_t b) { return 0; } int lws_display_ili9341_spi_blit(const struct lws_display *disp, const uint8_t *src, lws_display_scalar x, lws_display_scalar y, lws_display_scalar w, lws_display_scalar h) { const lws_display_ili9341_t *ili = (const lws_display_ili9341_t *)disp; lws_spi_desc_t desc; uint8_t u[5]; memset(&desc, 0, sizeof(desc)); desc.count_cmd = 1; desc.src = &u[0]; desc.count_write = 0; /* * Blit a line at a time */ while (h--) { u[0] = ILI9341_CASET; desc.data = &u[1]; u[1] = x; u[2] = x; u[3] = w >> 8; u[4] = w & 0xff; desc.count_write = 4; ili->spi->queue(ili->spi, &desc); u[0] = ILI9341_PASET; u[1] = y >> 8; u[2] = y & 0xff; u[3] = (y + 1) >> 8; u[4] = (y + 1) & 0xff; desc.count_write = 4; ili->spi->queue(ili->spi, &desc); u[0] = ILI9341_RAMWR; desc.data = src; desc.count_write = w * 2; ili->spi->queue(ili->spi, &desc); src += w * 2; y++; } return 0; } int lws_display_ili9341_spi_power(const struct lws_display *disp, int state) { const lws_display_ili9341_t *ili = (const lws_display_ili9341_t *)disp; lws_spi_desc_t desc; uint8_t u[1]; memset(&desc, 0, sizeof(desc)); desc.count_cmd = 1; desc.data = desc.src = &u[0]; u[0] = state ? ILI9341_SLPOUT : ILI9341_SLPIN; ili->spi->queue(ili->spi, &desc); /* we're not going to do anything useful for 5ms after this */ return 0; } libwebsockets-4.3.5/lib/drivers/display/lws-display.c000066400000000000000000000071371476025525100227070ustar00rootroot00000000000000/* * lws abstract display * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include static void sul_autodim_cb(lws_sorted_usec_list_t *sul) { lws_display_state_t *lds = lws_container_of(sul, lws_display_state_t, sul_autodim); int next_ms = -1; /* we fire both to dim and to blank... if already in dim state, blank */ switch (lds->state) { case LWSDISPS_BECOMING_ACTIVE: lws_display_state_set_brightness(lds, lds->disp->bl_active); lds->state = LWSDISPS_ACTIVE; next_ms = lds->autodim_ms; break; case LWSDISPS_ACTIVE: /* active -> autodimmed */ lds->state = LWSDISPS_AUTODIMMED; next_ms = lds->off_ms; lws_display_state_set_brightness(lds, lds->disp->bl_dim); break; case LWSDISPS_AUTODIMMED: /* dimmed -> OFF */ lws_display_state_set_brightness(lds, &lws_pwmseq_static_off); lds->state = LWSDISPS_GOING_OFF; next_ms = 600; break; case LWSDISPS_GOING_OFF: /* off dimming completed, actual display OFF */ lws_display_state_off(lds); return; default: return; } if (next_ms >= 0) lws_sul_schedule(lds->ctx, 0, &lds->sul_autodim, sul_autodim_cb, next_ms * LWS_US_PER_MS); } void lws_display_state_init(lws_display_state_t *lds, struct lws_context *ctx, int dim_ms, int off_ms, struct lws_led_state *bl_lcs, const lws_display_t *disp) { memset(lds, 0, sizeof(*lds)); lds->disp = disp; lds->ctx = ctx; lds->autodim_ms = dim_ms; lds->off_ms = off_ms; lds->bl_lcs = bl_lcs; lds->state = LWSDISPS_OFF; lws_led_transition(lds->bl_lcs, "backlight", &lws_pwmseq_static_off, &lws_pwmseq_static_on); disp->init(disp); } void lws_display_state_set_brightness(lws_display_state_t *lds, const lws_led_sequence_def_t *pwmseq) { lws_led_transition(lds->bl_lcs, "backlight", pwmseq, lds->disp->bl_transition); } void lws_display_state_active(lws_display_state_t *lds) { int waiting_ms; if (lds->state == LWSDISPS_OFF) { /* power us up */ lds->disp->power(lds->disp, 1); lds->state = LWSDISPS_BECOMING_ACTIVE; waiting_ms = lds->disp->latency_wake_ms; } else { if (lds->state != LWSDISPS_ACTIVE) lws_display_state_set_brightness(lds, lds->disp->bl_active); lds->state = LWSDISPS_ACTIVE; waiting_ms = lds->autodim_ms; } /* reset the autodim timer */ if (waiting_ms >= 0) lws_sul_schedule(lds->ctx, 0, &lds->sul_autodim, sul_autodim_cb, waiting_ms * LWS_US_PER_MS); } void lws_display_state_off(lws_display_state_t *lds) { lds->disp->power(lds->disp, 0); lws_sul_cancel(&lds->sul_autodim); lds->state = LWSDISPS_OFF; } libwebsockets-4.3.5/lib/drivers/display/ssd1306-i2c.c000066400000000000000000000100331476025525100222020ustar00rootroot00000000000000/* * lws abstract display implementation for ssd1306 on i2c * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include #include static uint8_t ssd1306_128x64_init[] = { SSD1306_DISPLAYOFF, SSD1306_SETDISPLAYCLOCKDIV, 0xf0, SSD1306_SETMULTIPLEX, 64 - 1, SSD1306_SETDISPLAYOFFSET, 0, SSD1306_CHARGEPUMP, 0x14, SSD1306_MEMORYMODE, 0, SSD1306_SEGREMAP | (0 << 0), SSD1306_COMSCANDEC, SSD1306_SETCOMPINS, (1 << 4) | 0x02, SSD1306_SETCONTRAST, 0, /* start at lowest */ SSD1306_SETPRECHARGE, (0xf << 4) | (1 << 0), SSD1306_SETVCOMDESELECT, (4 << 4), SSD1306_DEACTIVATE_SCROLL, SSD1306_DISPLAYALLON_RESUME, SSD1306_NORMALDISPLAY, SSD1306_DISPLAYON }; int lws_display_ssd1306_i2c_init(const struct lws_display *disp) { const lws_display_ssd1306_t *si = (const lws_display_ssd1306_t *)disp; si->i2c->init(si->i2c); if (si->gpio) { si->gpio->mode(si->reset_gpio, LWSGGPIO_FL_WRITE | LWSGGPIO_FL_PULLUP); si->gpio->set(si->reset_gpio, 0); lws_msleep(1); si->gpio->set(si->reset_gpio, 1); lws_msleep(1); } if (lws_i2c_command_list(si->i2c, si->i2c7_address, ssd1306_128x64_init, LWS_ARRAY_SIZE(ssd1306_128x64_init))) { lwsl_err("%s: fail\n", __func__); return 1; } return 0; } int lws_display_ssd1306_i2c_contrast(const struct lws_display *disp, uint8_t b) { const lws_display_ssd1306_t *si = (const lws_display_ssd1306_t *)disp; uint8_t ba[2]; ba[0] = SSD1306_SETCONTRAST; ba[1] = b; return lws_i2c_command_list(si->i2c, si->i2c7_address, ba, LWS_ARRAY_SIZE(ba)); } int lws_display_ssd1306_i2c_blit(const struct lws_display *disp, const uint8_t *src, lws_display_scalar x, lws_display_scalar y, lws_display_scalar w, lws_display_scalar h) { const lws_display_ssd1306_t *si = (const lws_display_ssd1306_t *)disp; uint8_t ba[6]; int n, m; /* * The display is arranged in 128x8 bands, with one byte containing * the 8 vertical pixels of the band. */ if (h < 8) h = 8; ba[0] = SSD1306_COLUMNADDR; ba[1] = x; ba[2] = x + w - 1; ba[3] = SSD1306_PAGEADDR; ba[4] = y / 8; ba[5] = ba[4] + (h / 8) - 1; if (lws_i2c_command_list(si->i2c, si->i2c7_address, ba, LWS_ARRAY_SIZE(ba))) { lwsl_err("%s: fail\n", __func__); return 1; } for (n = 0; n < (w * h) / 8;) { lws_bb_i2c_start(si->i2c); lws_bb_i2c_write(si->i2c, si->i2c7_address << 1); lws_bb_i2c_write(si->i2c, SSD1306_SETSTARTLINE | y); for (m = 0; m < w; m++) lws_bb_i2c_write(si->i2c, src[n++]); lws_bb_i2c_stop(si->i2c); y += 8; } return 0; } int lws_display_ssd1306_i2c_power(const struct lws_display *disp, int state) { const lws_display_ssd1306_t *si = (const lws_display_ssd1306_t *)disp; if (!state) return lws_i2c_command(si->i2c, si->i2c7_address, SSD1306_DISPLAYOFF | !!state); return lws_display_ssd1306_i2c_init(disp); } libwebsockets-4.3.5/lib/drivers/i2c/000077500000000000000000000000001476025525100172735ustar00rootroot00000000000000libwebsockets-4.3.5/lib/drivers/i2c/bitbang/000077500000000000000000000000001476025525100207015ustar00rootroot00000000000000libwebsockets-4.3.5/lib/drivers/i2c/bitbang/lws-bb-i2c.c000066400000000000000000000064771476025525100227240ustar00rootroot00000000000000/* * I2C bitbang implementation using generic gpio * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * This is like an abstract class for gpio, a real implementation provides * functions for the ops that use the underlying OS gpio arrangements. */ #include int lws_bb_i2c_init(const lws_i2c_ops_t *octx) { lws_bb_i2c_t *ctx = (lws_bb_i2c_t *)octx; ctx->gpio->mode(ctx->scl, LWSGGPIO_FL_WRITE | LWSGGPIO_FL_READ | LWSGGPIO_FL_PULLUP); ctx->gpio->mode(ctx->sda, LWSGGPIO_FL_WRITE | LWSGGPIO_FL_READ | LWSGGPIO_FL_PULLUP); return 0; } int lws_bb_i2c_start(const lws_i2c_ops_t *octx) { lws_bb_i2c_t *ctx = (lws_bb_i2c_t *)octx; ctx->gpio->set(ctx->sda, 1); ctx->gpio->set(ctx->scl, 1); ctx->delay(); if (!ctx->gpio->read(ctx->sda)) return 1; ctx->gpio->set(ctx->sda, 0); ctx->delay(); ctx->gpio->set(ctx->scl, 0); return 0; } void lws_bb_i2c_stop(const lws_i2c_ops_t *octx) { lws_bb_i2c_t *ctx = (lws_bb_i2c_t *)octx; ctx->gpio->set(ctx->sda, 0); ctx->gpio->set(ctx->scl, 1); ctx->delay(); while (!ctx->gpio->read(ctx->scl)) ; ctx->gpio->set(ctx->sda, 1); ctx->delay(); } int lws_bb_i2c_write(const lws_i2c_ops_t *octx, uint8_t data) { lws_bb_i2c_t *ctx = (lws_bb_i2c_t *)octx; int n; for (n = 0; n < 8; n++) { ctx->gpio->set(ctx->sda, !!(data & (1 << 7))); ctx->delay(); ctx->gpio->set(ctx->scl, 1); ctx->delay(); data <<= 1; ctx->gpio->set(ctx->scl, 0); } ctx->gpio->set(ctx->sda, 1); ctx->delay(); ctx->gpio->set(ctx->scl, 1); ctx->delay(); n = ctx->gpio->read(ctx->sda); ctx->gpio->set(ctx->scl, 0); ctx->delay(); return !!n; /* 0 = ACKED = OK */ } int lws_bb_i2c_read(const lws_i2c_ops_t *octx) { lws_bb_i2c_t *ctx = (lws_bb_i2c_t *)octx; int n, r = 0; ctx->gpio->set(ctx->sda, 1); for (n = 7; n <= 0; n--) { ctx->gpio->set(ctx->scl, 0); ctx->delay(); ctx->gpio->set(ctx->scl, 1); ctx->delay(); if (ctx->gpio->read(ctx->sda)) r |= 1 << n; } ctx->gpio->set(ctx->scl, 0); return r; } void lws_bb_i2c_set_ack(const lws_i2c_ops_t *octx, int ack) { lws_bb_i2c_t *ctx = (lws_bb_i2c_t *)octx; ctx->gpio->set(ctx->scl, 0); ctx->gpio->set(ctx->sda, !!ack); ctx->delay(); ctx->gpio->set(ctx->scl, 1); ctx->delay(); ctx->gpio->set(ctx->scl, 0); ctx->delay(); ctx->gpio->set(ctx->sda, 1); } libwebsockets-4.3.5/lib/drivers/i2c/lws-i2c.c000066400000000000000000000034351476025525100207240ustar00rootroot00000000000000/* * Generic I2C * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * These are generic helpers made up of calls to the i2c driver ops, so they * just need implementing once like this and are usable for any i2c underlying * implementation via the ops. */ #include int lws_i2c_command(const lws_i2c_ops_t *ctx, uint8_t ads7, uint8_t c) { if (ctx->start(ctx)) return 1; if (ctx->write(ctx, ads7 << 1)) { ctx->stop(ctx); return 1; } ctx->write(ctx, 0); ctx->write(ctx, c); ctx->stop(ctx); return 0; } int lws_i2c_command_list(const lws_i2c_ops_t *ctx, uint8_t ads7, const uint8_t *buf, size_t len) { while (len--) if (lws_i2c_command(ctx, ads7, *buf++)) return 1; return 0; } libwebsockets-4.3.5/lib/drivers/led/000077500000000000000000000000001476025525100173625ustar00rootroot00000000000000libwebsockets-4.3.5/lib/drivers/led/README.md000066400000000000000000000113601476025525100206420ustar00rootroot00000000000000# lws_led gpio and pwm class drivers Lws provides an abstract led controller class that can bind an array of LEDs to gpio and pwm controllers, and automatically handled pwm sequencers. Lumience intensity is corrected for IEC curves to match perceptual intensity, and the correction can be overridden per led for curve adaptation matching. Intensity is normalized to a 16-bit scale, when controlled by a GPIO b15 is significant and the rest ignored. When controlled by PWM, as many bits from b15 down are significant as the PWM arrangements can represent. The PWM sequencers use arbitrary function generation callbacks on a normalized 16-bit phase space, they can choose how much to interpolate and how much to put in a table, a 64-sample, 16-bit sine function is provided along with 16-bit linear sawtooth. Changing the sequencer is subject to a third transition function sequencer, this can for example mix the transition linearly over, eg, 500ms so the leds look very smooth. ## Defining an led controller An array of inidividual LED information is provided first, and referenced by the LED controller definintion. Leds are named so code does not introduce dependencies on specific implementations. ``` static const lws_led_gpio_map_t lgm[] = { { .name = "alert", .gpio = GPIO_NUM_25, .pwm_ops = &pwm_ops, .active_level = 1, }, }; static const lws_led_gpio_controller_t lgc = { .led_ops = lws_led_gpio_ops, .gpio_ops = &lws_gpio_plat, .led_map = &lgm[0], .count_leds = LWS_ARRAY_SIZE(lgm) }; struct lws_led_state *lls; lls = lgc.led_ops.create(&lgc.led_ops); if (!lls) { lwsl_err("%s: could not create led\n", __func__); goto spin; } ``` For GPIO control, the active level of the GPIO to light the LED may be set. Each LED may bind to a pwm controller, in which case setting the intensity programs the pwm controller corresponding to the GPIO. ## Setting the intensity directly ``` lgc.led_ops.intensity(&lgc.led_ops, "alert", 0); ``` ## Defining Sequencer Some common sequencers are provided out of the box, you can also define your own arbitrary ones. The main point is sequencers have a function that returns an intensity for each of 65536 phase steps in its cycle. For example, this is the linear function that is included ``` lws_led_intensity_t lws_led_func_linear(lws_led_seq_phase_t n) { return (lws_led_intensity_t)n; } ``` It simply returns an intensity between 0 - 65535 matching the phase angle of 0 - 65535 that it was given, so it's a sawtooth ramp. An interpolated sine function is also provided that returns an intensity between 0 - 65535 reflecting one cycle of sine wave for the phase angle of 0 - 65535. These functions are packaged into sequencer structures like this ``` const lws_led_sequence_def_t lws_pwmseq_sine_endless_fast = { .func = lws_led_func_sine, .ledphase_offset = 0, /* already at 0 amp at 0 phase */ .ledphase_total = LWS_SEQ_LEDPHASE_TOTAL_ENDLESS, .ms = 750 }; ``` This "endless" sequencer cycles through the sine function at 750ms per cycle. Non-endless sequencers have a specific start and end in the phase space, eg ``` const lws_led_sequence_def_t lws_pwmseq_sine_up = { .func = lws_led_func_sine, .ledphase_offset = 0, /* already at 0 amp at 0 phase */ .ledphase_total = LWS_LED_FUNC_PHASE / 2, /* 180 degree ./^ */ .ms = 300 }; ``` ... this one traverses 180 degrees of the sine wave starting from 0 and ending at full intensity, over 300ms. A commonly-used, provided one is like this, as used in the next section ``` const lws_led_sequence_def_t lws_pwmseq_linear_wipe = { .func = lws_led_func_linear, .ledphase_offset = 0, .ledphase_total = LWS_LED_FUNC_PHASE - 1, .ms = 300 }; ``` ## Setting the intensity using sequencer transitions The main api for high level sequenced control is ``` int lws_led_transition(struct lws_led_state *lcs, const char *name, const lws_led_sequence_def_t *next, const lws_led_sequence_def_t *trans); ``` This fades from the current sequence to a new sequence, using `trans` sequencer intensity as the mix factor. `trans` is typically `lws_pwmseq_linear_wipe`, fading between the current and new linearly over 300ms. At the end of the `trans` sequence, the new sequence simply replaces the current one and the transition is completed. Sequencers use a single 30Hz OS timer while any sequence is active. exported sequencer symbol|description ---|--- lws_pwmseq_sine_endless_slow|continuous 100% sine, 1.5s cycle lws_pwmseq_sine_endless_fast|continuous 100% sine, 0.75s cycle lws_pwmseq_linear_wipe|single 0 - 100% ramp over 0.3s lws_pwmseq_sine_up|single 0 - 100% using sine curve over 0.3s lws_pwmseq_sine_down|single 100% - 0 using sine curve over 0.3s lws_pwmseq_static_on|100% static lws_pwmseq_static_half|50% static lws_pwmseq_static_off|0% static libwebsockets-4.3.5/lib/drivers/led/led-gpio.c000066400000000000000000000065331476025525100212350ustar00rootroot00000000000000/* * Generic GPIO led * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "drivers/led/private-lib-drivers-led.h" #if defined(LWS_PLAT_TIMER_CB) static LWS_PLAT_TIMER_CB(lws_led_timer_cb, th) { lws_led_state_t *lcs = LWS_PLAT_TIMER_CB_GET_OPAQUE(th); lws_seq_timer_handle(lcs); } #endif struct lws_led_state * lws_led_gpio_create(const lws_led_ops_t *led_ops) { lws_led_gpio_controller_t *lgc = (lws_led_gpio_controller_t *)led_ops; /* * We allocate the main state object, and a 3 x seq dynamic footprint * for each led, since it may be sequencing the transition between two * other sequences. */ lws_led_state_t *lcs = lws_zalloc(sizeof(lws_led_state_t) + (lgc->count_leds * sizeof(lws_led_state_chs_t)), __func__); int n; if (!lcs) return NULL; lcs->controller = lgc; #if defined(LWS_PLAT_TIMER_CREATE) lcs->timer = LWS_PLAT_TIMER_CREATE("leds", LWS_LED_SEQUENCER_UPDATE_INTERVAL_MS, 1, lcs, (TimerCallbackFunction_t)lws_led_timer_cb); if (!lcs->timer) return NULL; #endif for (n = 0; n < lgc->count_leds; n++) { const lws_led_gpio_map_t *map = &lgc->led_map[n]; if (map->pwm_ops) { lgc->gpio_ops->mode(map->gpio, LWSGGPIO_FL_READ); lgc->gpio_ops->set(map->gpio, 0); } else { lgc->gpio_ops->mode(map->gpio, LWSGGPIO_FL_WRITE); lgc->gpio_ops->set(map->gpio, !lgc->led_map[n].active_level); } } return lcs; } void lws_led_gpio_destroy(struct lws_led_state *lcs) { #if defined(LWS_PLAT_TIMER_DELETE) LWS_PLAT_TIMER_DELETE(lcs->timer); #endif lws_free(lcs); } int lws_led_gpio_lookup(const struct lws_led_ops *lo, const char *name) { const lws_led_gpio_controller_t *lgc = (lws_led_gpio_controller_t *)lo; int n; for (n = 0; n < lgc->count_leds; n++) if (!strcmp(name, lgc->led_map[n].name)) return n; return -1; } void lws_led_gpio_intensity(const struct lws_led_ops *lo, const char *name, lws_led_intensity_t inten) { const lws_led_gpio_controller_t *lgc = (lws_led_gpio_controller_t *)lo; int idx = lws_led_gpio_lookup(lo, name); const lws_led_gpio_map_t *map; if (idx < 0) return; map = &lgc->led_map[idx]; if (map->pwm_ops) map->pwm_ops->intensity(map->pwm_ops, map->gpio, inten); else lgc->gpio_ops->set(map->gpio, (!!map->active_level) ^ !(inten & 0x8000)); } libwebsockets-4.3.5/lib/drivers/led/led-seq.c000066400000000000000000000135271476025525100210700ustar00rootroot00000000000000/* * Generic GPIO led * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "drivers/led/private-lib-drivers-led.h" /* * 64 entry interpolated CIE correction * https://en.wikipedia.org/wiki/Lightness */ uint16_t cie[] = { 0, 113, 227, 340, 454, 568, 688, 824, 976, 1146, 1335, 1543, 1772, 2023, 2296, 2592, 2914, 3260, 3633, 4034, 4463, 4921, 5409, 5929, 6482, 7067, 7687, 8341, 9032, 9761, 10527, 11332, 12178, 13064, 13993, 14964, 15980, 17040, 18146, 19299, 20500, 21750, 23049, 24400, 25802, 27256, 28765, 30328, 31946, 33622, 35354, 37146, 38996, 40908, 42881, 44916, 47014, 49177, 51406, 53700, 56062, 58492, 60992, 63561, 65535 /* for interpolation */ }; /* * This is the default intensity correction function, it can be overridden * per-led to eg, normalize intensity of different leds */ static lws_led_intensity_t cie_antilog(lws_led_intensity_t lin) { return (cie[lin >> 10] * (0x3ff - (lin & 0x3ff)) + cie[(lin >> 10) + 1] * (lin & 0x3ff)) / 0x3ff; } static void lws_seq_advance(lws_led_state_t *lcs, lws_led_state_ch_t *ch) { if (!ch->seq) return; if (ch->phase_budget != LWS_SEQ_LEDPHASE_TOTAL_ENDLESS && (ch->phase_budget < ch->step || !ch->phase_budget)) { /* we are done */ ch->seq = NULL; if (!(--lcs->timer_refcount)) { #if defined(LWS_PLAT_TIMER_STOP) LWS_PLAT_TIMER_STOP(lcs->timer); #endif } return; } ch->ph += ch->step; if (ch->phase_budget != LWS_SEQ_LEDPHASE_TOTAL_ENDLESS) ch->phase_budget -= ch->step; } static lws_led_intensity_t lws_seq_sample(const lws_led_gpio_map_t *map, lws_led_state_chs_t *chs) { unsigned int i; if (chs->seqs[LLSI_CURR].seq) chs->seqs[LLSI_CURR].last = chs->seqs[LLSI_CURR].seq-> func(chs->seqs[LLSI_CURR].ph); if (chs->seqs[LLSI_TRANS].seq) { /* * If a transition is ongoing, we need to use the transition * intensity as the mixing factor between the still-live current * and newly-live next sequences */ chs->seqs[LLSI_TRANS].last = chs->seqs[LLSI_TRANS].seq-> func(chs->seqs[LLSI_TRANS].ph); if (chs->seqs[LLSI_NEXT].seq) chs->seqs[LLSI_NEXT].last = chs->seqs[LLSI_NEXT].seq-> func(chs->seqs[LLSI_NEXT].ph); i = (lws_led_intensity_t)((( (unsigned int)chs->seqs[LLSI_CURR].last * (65535 - chs->seqs[LLSI_TRANS].last) >> 16) + (((unsigned int)chs->seqs[LLSI_NEXT].last * (unsigned int)chs->seqs[LLSI_TRANS].last) >> 16))); } else i = chs->seqs[LLSI_CURR].last; return map->intensity_correction ? map->intensity_correction(i) : cie_antilog((lws_led_intensity_t)i); } void lws_seq_timer_handle(lws_led_state_t *lcs) { lws_led_gpio_controller_t *lgc = lcs->controller; lws_led_state_chs_t *chs = (lws_led_state_chs_t *)&lcs[1]; const lws_led_gpio_map_t *map = &lgc->led_map[0]; unsigned int n; for (n = 0; n < lgc->count_leds; n++) { lgc->led_ops.intensity(&lgc->led_ops, map->name, lws_seq_sample(map, chs)); lws_seq_advance(lcs, &chs->seqs[LLSI_CURR]); if (chs->seqs[LLSI_TRANS].seq) { lws_seq_advance(lcs, &chs->seqs[LLSI_NEXT]); lws_seq_advance(lcs, &chs->seqs[LLSI_TRANS]); /* * When we finished the transition, we can make the * "next" sequence the current sequence and no need for * a "next" or a transition any more. */ if (!chs->seqs[LLSI_TRANS].seq) { chs->seqs[LLSI_CURR] = chs->seqs[LLSI_NEXT]; chs->seqs[LLSI_NEXT].seq = NULL; } } map++; chs++; } } static int lws_led_set_chs_seq(struct lws_led_state *lcs, lws_led_state_ch_t *dest, const lws_led_sequence_def_t *def) { int steps; dest->seq = def; dest->ph = def->ledphase_offset; dest->phase_budget = def->ledphase_total; /* * We need to compute the incremental phase angle step to cover the * total number of phases in the indicated ms, incrementing at the * timer rate of LWS_LED_SEQUENCER_UPDATE_RATE_HZ. Eg, * * 65536 phase steps (one cycle) in 2000ms at 30Hz timer rate means we * will update 2000ms / 33ms = 60 times, so we must step at at * 65536 / 60 = 1092 phase angle resolution */ steps = def->ms / LWS_LED_SEQUENCER_UPDATE_INTERVAL_MS; dest->step = (def->ledphase_total != LWS_SEQ_LEDPHASE_TOTAL_ENDLESS ? def->ledphase_total : LWS_LED_FUNC_PHASE) / (steps ? steps : 1); if (!lcs->timer_refcount++) { #if defined(LWS_PLAT_TIMER_START) LWS_PLAT_TIMER_START(lcs->timer); #endif } return steps; } int lws_led_transition(struct lws_led_state *lcs, const char *name, const lws_led_sequence_def_t *next, const lws_led_sequence_def_t *trans) { lws_led_state_chs_t *chs = (lws_led_state_chs_t *)&lcs[1]; int index = lws_led_gpio_lookup(&lcs->controller->led_ops, name); if (index < 0) return 1; lws_led_set_chs_seq(lcs, &chs[index].seqs[LLSI_TRANS], trans); lws_led_set_chs_seq(lcs, &chs[index].seqs[LLSI_NEXT], next); return 0; } libwebsockets-4.3.5/lib/drivers/led/private-lib-drivers-led.h000066400000000000000000000027041476025525100241720ustar00rootroot00000000000000/* * Generic GPIO led * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ typedef struct lws_led_state { #if defined(LWS_PLAT_TIMER_TYPE) LWS_PLAT_TIMER_TYPE timer; #endif lws_led_gpio_controller_t *controller; int timer_refcount; } lws_led_state_t; void lws_seq_timer_handle(lws_led_state_t *lcs); int lws_led_gpio_lookup(const struct lws_led_ops *lo, const char *name); libwebsockets-4.3.5/lib/drivers/netdev/000077500000000000000000000000001476025525100201035ustar00rootroot00000000000000libwebsockets-4.3.5/lib/drivers/netdev/netdev.c000066400000000000000000000161731476025525100215440ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include static const lws_struct_map_t lsm_wifi_creds[] = { LSM_CARRAY (lws_wifi_creds_t, ssid, "ssid"), LSM_CARRAY (lws_wifi_creds_t, passphrase, "passphrase"), LSM_UNSIGNED (lws_wifi_creds_t, alg, "alg"), LSM_STRING_PTR (lws_wifi_creds_t, bssid, "bssid"), }; static const lws_struct_map_t lsm_netdev_credentials[] = { LSM_LIST (lws_netdevs_t, owner_creds, lws_wifi_creds_t, list, NULL, lsm_wifi_creds, "credentials"), }; static const lws_struct_map_t lsm_netdev_schema[] = { LSM_SCHEMA (lws_netdevs_t, NULL, lsm_netdev_credentials, "lws-netdev-creds"), }; //LSM_CHILD_PTR (lws_netdev_instance_wifi_t, ap_cred, lws_wifi_creds_t, // NULL, lsm_wifi_creds, "ap_cred"), //LSM_STRING_PTR (lws_netdev_instance_wifi_t, ap_ip, "ap_ip"), int lws_netdev_credentials_settings_set(lws_netdevs_t *nds) { lws_struct_serialize_t *js; size_t w = 0, max = 2048; int n, r = 1; uint8_t *buf; buf = lws_malloc(max, __func__); /* length should be computed */ js = lws_struct_json_serialize_create(lsm_netdev_schema, LWS_ARRAY_SIZE(lsm_netdev_schema), 0, nds); if (!js) goto bail; n = lws_struct_json_serialize(js, buf, max, &w); lws_struct_json_serialize_destroy(&js); if (n != LSJS_RESULT_FINISH) goto bail; lwsl_notice("%s: setting %s\n", __func__, buf); if (!lws_settings_plat_set(nds->si, "netdev.creds", buf, w)) r = 0; bail: if (r) lwsl_err("%s: failed\n", __func__); lws_free(buf); return r; } int lws_netdev_credentials_settings_get(lws_netdevs_t *nds) { struct lejp_ctx ctx; lws_struct_args_t a; size_t l = 0; uint8_t *buf; int m; memset(&a, 0, sizeof(a)); if (lws_settings_plat_get(nds->si, "netdev.creds", NULL, &l)) { lwsl_notice("%s: not in settings\n", __func__); return 1; } buf = lws_malloc(l, __func__); if (!buf) return 1; if (lws_settings_plat_get(nds->si, "netdev.creds", buf, &l)) { lwsl_err("%s: unexpected settings get fail\n", __func__); goto bail; } a.map_st[0] = lsm_netdev_schema; a.map_entries_st[0] = LWS_ARRAY_SIZE(lsm_netdev_schema); a.ac_block_size = 512; lws_struct_json_init_parse(&ctx, NULL, &a); m = lejp_parse(&ctx, (uint8_t *)buf, l); lws_free(buf); if (m < 0 || !a.dest) { lwsl_notice("%s: JSON decode failed '%s'\n", __func__, lejp_error_to_string(m)); goto bail1; } /* * Forcibly set the state of the nds creds owner to the synthesized * one in the ac, and keep the ac for as long as we keep the creds out */ nds->owner_creds = ((lws_netdevs_t *)a.dest)->owner_creds; nds->ac_creds = a.ac; return 0; bail: lws_free(buf); bail1: lwsac_free(&a.ac); return 1; } lws_wifi_creds_t * lws_netdev_credentials_find(lws_netdevs_t *netdevs, const char *ssid, const uint8_t *bssid) { lws_start_foreach_dll(struct lws_dll2 *, p, lws_dll2_get_head( &netdevs->owner_creds)) { lws_wifi_creds_t *w = lws_container_of(p, lws_wifi_creds_t, list); if (!strcmp(ssid, (const char *)&w[1]) && !memcmp(bssid, w->bssid, 6)) return w; } lws_end_foreach_dll(p); return NULL; } lws_netdev_instance_t * lws_netdev_find(lws_netdevs_t *netdevs, const char *ifname) { lws_start_foreach_dll(struct lws_dll2 *, p, lws_dll2_get_head( &netdevs->owner)) { lws_netdev_instance_t *ni = lws_container_of(p, lws_netdev_instance_t, list); if (!strcmp(ifname, ni->name)) return ni; } lws_end_foreach_dll(p); return NULL; } /* * Context forwards NETWORK related smd here, in lws thread context */ int lws_netdev_smd_cb(void *opaque, lws_smd_class_t _class, lws_usec_t timestamp, void *buf, size_t len) { struct lws_context *ctx = (struct lws_context *)opaque; const char *iface; char setname[16]; size_t al = 0; /* deal with anything from whole-network perspective */ /* pass through netdev-specific messages to correct platform handler */ iface = lws_json_simple_find(buf, len, "\"if\":", &al); if (!iface) return 0; lws_start_foreach_dll(struct lws_dll2 *, p, lws_dll2_get_head( &ctx->netdevs.owner)) { lws_netdev_instance_t *ni = lws_container_of( p, lws_netdev_instance_t, list); if (!strncmp(ni->name, iface, al)) { /* * IP assignment on our netif? We can deal with marking * the last successful association generically... */ if (ni->type == LWSNDTYP_WIFI && !lws_json_simple_strcmp(buf, len, "\"type\":", "ipacq")) { const char *ev = lws_json_simple_find(buf, len, "\"ipv4\":", &al); lws_netdev_instance_wifi_t *wnd = (lws_netdev_instance_wifi_t *)ni; if (!ev) return 0; lws_snprintf(setname, sizeof(setname), "netdev.last.%s", iface); lws_settings_plat_printf(ctx->netdevs.si, setname, "{\"ssid\":\"%s\",\"bssid\":" "\"%02X%02X%02X%02X%02X%02X\"}", wnd->current_attempt_ssid, wnd->current_attempt_bssid[0], wnd->current_attempt_bssid[1], wnd->current_attempt_bssid[2], wnd->current_attempt_bssid[3], wnd->current_attempt_bssid[4], wnd->current_attempt_bssid[5]); } /* * Pass it through to related netdev instance for * private actions */ return ni->ops->event(ni, timestamp, buf, len); } } lws_end_foreach_dll(p); return 0; } /* * This is the generic part of the netdev instance initialization that's always * the same, regardless of the netdev type */ void lws_netdev_instance_create(lws_netdev_instance_t *ni, struct lws_context *ctx, const lws_netdev_ops_t *ops, const char *name, void *platinfo) { ni->ops = ops; ni->name = name; ni->platinfo = platinfo; /* add us to the list of active netdevs */ lws_dll2_add_tail(&ni->list, &ctx->netdevs.owner); } void lws_netdev_instance_remove_destroy(struct lws_netdev_instance *ni) { lws_dll2_remove(&ni->list); lws_free(ni); } lws_netdevs_t * lws_netdevs_from_ctx(struct lws_context *ctx) { return &ctx->netdevs; } libwebsockets-4.3.5/lib/drivers/netdev/wifi.c000066400000000000000000000155601476025525100212140ustar00rootroot00000000000000/* * libwebsockets - lws_netdev_wifi generic state handling * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * The generic wifi netdevs follow a */ #include "private-lib-core.h" int lws_netdev_wifi_rssi_sort_compare(const lws_dll2_t *d, const lws_dll2_t *i) { const lws_wifi_sta_t *wsd = (const lws_wifi_sta_t *)d, *wsi = (const lws_wifi_sta_t *)i; return rssi_averaged(wsd) > rssi_averaged(wsi); } void lws_netdev_wifi_scan_empty(lws_netdev_instance_wifi_t *wnd) { lws_start_foreach_dll_safe(struct lws_dll2 *, p, p1, lws_dll2_get_head( &wnd->scan)) { lws_wifi_sta_t *s = lws_container_of(p, lws_wifi_sta_t, list); lws_dll2_remove(p); lws_free(s); } lws_end_foreach_dll_safe(p, p1); } void lws_netdev_wifi_scan(lws_sorted_usec_list_t *sul) { lws_netdev_instance_wifi_t *wnd = lws_container_of(sul, lws_netdev_instance_wifi_t, sul_scan); wnd->inst.ops->scan(&wnd->inst); } lws_wifi_sta_t * lws_netdev_wifi_scan_find(lws_netdev_instance_wifi_t *wnd, const char *ssid, const uint8_t *bssid) { lws_start_foreach_dll(struct lws_dll2 *, p, lws_dll2_get_head( &wnd->scan)) { lws_wifi_sta_t *w = lws_container_of(p, lws_wifi_sta_t, list); if (!strcmp(ssid, (const char *)&w[1]) && !memcmp(bssid, w->bssid, 6)) return w; } lws_end_foreach_dll(p); return NULL; } int lws_netdev_wifi_scan_select(lws_netdev_instance_wifi_t *wnd) { lws_netdevs_t *netdevs = lws_netdevs_from_ndi(&wnd->inst); struct lws_context *cx = lws_context_from_netdevs(netdevs); uint32_t least_recent = 0xffffffff; lws_wifi_creds_t *pc = NULL; lws_wifi_sta_t *pw = NULL; /* * Trim enough of the lowest RSSI guys in order to get us below the * limit we are allowed to keep track of... */ while (wnd->scan.count > LWS_WIFI_MAX_SCAN_TRACK) { struct lws_dll2 *p = lws_dll2_get_tail(&wnd->scan); lws_wifi_sta_t *w = lws_container_of(p, lws_wifi_sta_t, list); lws_dll2_remove(p); lws_free(w); } /* * ... let's dump what's left */ lws_start_foreach_dll(struct lws_dll2 *, p, lws_dll2_get_head( &wnd->scan)) { lws_wifi_sta_t *w = lws_container_of(p, lws_wifi_sta_t, list); lwsl_notice("%s: %s, %02X:%02X:%02X:%02X:%02X:%02X, ch %d, rssi %d\n", __func__, (const char *)&w[1], w->bssid[0], w->bssid[1], w->bssid[2], w->bssid[3], w->bssid[4], w->bssid[5], w->ch, rssi_averaged(w)); } lws_end_foreach_dll(p); /* * make sure we have our device's connection credentials at hand */ if (!netdevs->ac_creds && lws_netdev_credentials_settings_get(netdevs)) return 0; netdevs->refcount_creds++; /* * Let's go through each starting from the best RSSI seeing if we * have credentials... if we do, pick the one we least-recently tried */ lws_start_foreach_dll(struct lws_dll2 *, p1, wnd->scan.head) { lws_wifi_sta_t *w = lws_container_of(p1, lws_wifi_sta_t, list); lws_start_foreach_dll(struct lws_dll2 *, q, netdevs->owner_creds.head) { lws_wifi_creds_t *c = lws_container_of(q, lws_wifi_creds_t, list); if (!strcmp((const char *)&w[1], c->ssid) && w->last_seen < least_recent) { /* * Not <= so we stick with higher RSSI when * all 0 */ pc = c; pw = w; least_recent = w->last_seen; } } lws_end_foreach_dll(q); } lws_end_foreach_dll(p1); if (least_recent != 0xffffffff) { /* * We picked one to try... note what we're trying so we can * record it in settings as last successful */ lws_strncpy(wnd->current_attempt_ssid, (const char *)&pw[1], sizeof(wnd->current_attempt_ssid)); memcpy(wnd->current_attempt_bssid, pw->bssid, LWS_ETH_ALEN); wnd->inst.ops->connect(&wnd->inst, pc->ssid, pc->passphrase, pw->bssid); } else { /* * We couldn't see anyone we recognized on this scan, let's * rescan in a bit */ lwsl_notice("%s: nothing usable in scan, redoing in 3s\n", __func__); lws_sul_schedule(cx, 0, &wnd->sul_scan, lws_netdev_wifi_scan, 3 * LWS_US_PER_SEC); } if (!--netdevs->refcount_creds) { lws_dll2_owner_clear(&netdevs->owner_creds); lwsac_free(&netdevs->ac_creds); } return 0; } /* * Initially our best bet is just try to reconnect to whatever we last * succeeded to connect to */ int lws_netdev_wifi_redo_last(lws_netdev_instance_wifi_t *wnd) { lws_netdevs_t *netdevs = lws_netdevs_from_ndi(&wnd->inst); uint8_t buf[256], bssid[LWS_ETH_ALEN]; const char *ssid, *pp = "", *pb; char setname[16], ssid_copy[33]; size_t l = sizeof(buf), al; lws_wifi_creds_t *cred; /* * Let's try to retreive the last successful connect info for this * netdev */ lws_snprintf(setname, sizeof(setname), "netdev.last.%s", wnd->inst.name); if (lws_settings_plat_get(netdevs->si, setname, buf, &l)) return 1; lwsl_notice("%s: last successful %s\n", __func__, buf); ssid = lws_json_simple_find((const char *)buf, l, "\"ssid\":", &al); if (!ssid || al > 32) return 1; memcpy(ssid_copy, ssid, al); ssid_copy[al + 1] = '\0'; pb = lws_json_simple_find((const char *)buf, l, "\"bssid\":", &al); if (!pb) return 1; lws_hex_to_byte_array(pb, bssid, sizeof(bssid)); /* * make sure we have our device's connection credentials at hand */ if (!netdevs->ac_creds && lws_netdev_credentials_settings_get(netdevs)) return 1; netdevs->refcount_creds++; cred = lws_netdev_credentials_find(netdevs, ssid_copy, bssid); if (cred) pp = cred->passphrase; lws_strncpy(wnd->current_attempt_ssid, ssid_copy, sizeof(wnd->current_attempt_ssid)); memcpy(wnd->current_attempt_bssid, bssid, LWS_ETH_ALEN); wnd->inst.ops->connect(&wnd->inst, ssid_copy, pp, bssid); if (!--netdevs->refcount_creds) { lws_dll2_owner_clear(&netdevs->owner_creds); lwsac_free(&netdevs->ac_creds); } return 0; } libwebsockets-4.3.5/lib/drivers/pwm/000077500000000000000000000000001476025525100174215ustar00rootroot00000000000000libwebsockets-4.3.5/lib/drivers/pwm/pwm.c000066400000000000000000000113331476025525100203710ustar00rootroot00000000000000/* * Generic GPIO led * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" static const lws_led_intensity_t sineq16[] = { /* * Quadrant at sin(270) in 16 samples, normalized so * -1 == 0 and 0 == 32767 */ 0, 158, 630, 1411, 2494, 3869, 5522, 7437, 9597, 11980, 14562, 17321, 20228, 23225, 26374, 29555, 32767 /* to interpolate against */ }; /* * Elaborate the 90 degree phase table to 360 degrees and offset to +32768, * notice for the last sample we have to interpolate against a 17th sample * reflecting full scale to avoid clipping due to interpolation against the * 16th sample again */ static lws_led_intensity_t sine_lu(int n, int next) { switch ((n >> 4) & 3) { case 1: /* forwards */ return 32768 + sineq16[(n & 15) + next]; case 2: /* scan it backwards */ return 32768 + sineq16[15 - (n & 15) + (!next)]; case 3: /* forwards */ return 32768 - sineq16[(n & 15) + next]; default: /* scan it backwards */ return 32768 - sineq16[15 - (n & 15) + (!next)]; } } /* * The normalized phase resolution is 16-bit, however much table you decide to * have needs interpolating or indexing in a reduced number of significant * phase bits if it doesn't have the same phase resolution. * * In this sine table we have a 16 x 15-bit sample quadrant reflected 4 times * to make 360 degrees, so 64 accurate sample points, with the rest of the * intermediate phases generated by linear interpolation. That probably would * sound a bit funky, but for modulating light dynamically it's more than * enough. */ lws_led_intensity_t lws_led_func_sine(lws_led_seq_phase_t n) { /* * 2: quadrant * 4: table entry in quadrant * 10: interp (LSB) */ return (sine_lu(n >> 10, 0) * (0x3ff - (n & 0x3ff)) + sine_lu(n >> 10, 1) * (n & 0x3ff)) / 0x3ff; } lws_led_intensity_t lws_led_func_linear(lws_led_seq_phase_t n) { return (lws_led_intensity_t)n; } static lws_led_intensity_t lws_led_func_static(lws_led_seq_phase_t n) { return ((int)n * LWS_LED_MAX_INTENSITY) / 2; } const lws_led_sequence_def_t lws_pwmseq_static_off = { .func = lws_led_func_static, .ledphase_offset = 0, .ledphase_total = 0, .ms = 0 }; const lws_led_sequence_def_t lws_pwmseq_static_half = { .func = lws_led_func_static, .ledphase_offset = 1, .ledphase_total = 0, .ms = 0 }; const lws_led_sequence_def_t lws_pwmseq_static_on = { .func = lws_led_func_static, .ledphase_offset = 2, .ledphase_total = 0, .ms = 0 }; const lws_led_sequence_def_t lws_pwmseq_sine_up = { .func = lws_led_func_sine, .ledphase_offset = 0, /* already at 0 amp at 0 phase */ .ledphase_total = LWS_LED_FUNC_PHASE / 2, /* 180 degree ./^ */ .ms = 300 }; const lws_led_sequence_def_t lws_pwmseq_sine_down = { .func = lws_led_func_sine, .ledphase_offset = LWS_LED_FUNC_PHASE / 2, /* start at peak */ .ledphase_total = LWS_LED_FUNC_PHASE / 2, /* 180 degree ./^ */ .ms = 300 }; const lws_led_sequence_def_t lws_pwmseq_linear_wipe = { .func = lws_led_func_linear, .ledphase_offset = 0, .ledphase_total = LWS_LED_FUNC_PHASE - 1, .ms = 300 }; const lws_led_sequence_def_t lws_pwmseq_sine_endless_slow = { .func = lws_led_func_sine, .ledphase_offset = 0, /* already at 0 amp at 0 phase */ .ledphase_total = LWS_SEQ_LEDPHASE_TOTAL_ENDLESS, .ms = 1500 }; const lws_led_sequence_def_t lws_pwmseq_sine_endless_fast = { .func = lws_led_func_sine, .ledphase_offset = 0, /* already at 0 amp at 0 phase */ .ledphase_total = LWS_SEQ_LEDPHASE_TOTAL_ENDLESS, .ms = 750 }; libwebsockets-4.3.5/lib/drivers/settings/000077500000000000000000000000001476025525100204565ustar00rootroot00000000000000libwebsockets-4.3.5/lib/drivers/settings/settings.c000066400000000000000000000036021476025525100224630ustar00rootroot00000000000000/* * lws_settings * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include lws_settings_instance_t * lws_settings_init(const lws_settings_ops_t *so, void *opaque_plat) { lws_settings_instance_t *si = lws_zalloc(sizeof(*si), __func__); if (!si) return NULL; si->so = so; si->opaque_plat = opaque_plat; return si; } void lws_settings_deinit(lws_settings_instance_t **si) { lws_free(*si); *si = NULL; } int lws_settings_plat_printf(lws_settings_instance_t *si, const char *name, const char *format, ...) { va_list ap; uint8_t *p; int n; va_start(ap, format); n = vsnprintf(NULL, 0, format, ap); va_end(ap); p = lws_malloc(n + 2, __func__); va_start(ap, format); vsnprintf((char *)p, n + 2, format, ap); va_end(ap); n = si->so->set(si, name, p, n); lws_free(p); return n; } libwebsockets-4.3.5/lib/drivers/spi/000077500000000000000000000000001476025525100174115ustar00rootroot00000000000000libwebsockets-4.3.5/lib/drivers/spi/bitbang/000077500000000000000000000000001476025525100210175ustar00rootroot00000000000000libwebsockets-4.3.5/lib/drivers/spi/bitbang/lws-bb-spi.c000066400000000000000000000071131476025525100231440ustar00rootroot00000000000000/* * SPI bitbang implementation using generic gpio * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include int lws_bb_spi_init(const lws_spi_ops_t *octx) { lws_bb_spi_t *ctx = (lws_bb_spi_t *)octx; int n; for (n = 0; n < LWS_SPI_BB_MAX_CH; n++) { if (ctx->flags & (1 << n)) ctx->gpio->mode(ctx->ncs[n], LWSGGPIO_FL_WRITE); if (ctx->flags & (1 << (n + 4))) ctx->gpio->mode(ctx->ncmd[n], LWSGGPIO_FL_WRITE); } ctx->gpio->mode(ctx->clk, LWSGGPIO_FL_WRITE | ((octx->bus_mode & LWSSPIMODE_CPOL) ? 0 : LWSGGPIO_FL_START_LOW)); ctx->gpio->mode(ctx->mosi, LWSGGPIO_FL_WRITE | LWSGGPIO_FL_START_LOW); ctx->gpio->mode(ctx->miso, LWSGGPIO_FL_READ | LWSGGPIO_FL_PULLUP); return 0; } /* if active, prepare DnC before this and call separately for Cmd / Data */ static void lws_bb_spi_write(lws_bb_spi_t *ctx, const uint8_t *buf, size_t len) { uint8_t u, inv = !!(ctx->bb_ops.bus_mode & LWSSPIMODE_CPOL); while (len--) { int n; u = *buf++; for (n = 0; n < 4; n++) { ctx->gpio->set(ctx->clk, inv); ctx->gpio->set(ctx->mosi, !!(u & 0x80)); ctx->gpio->set(ctx->clk, !inv); ctx->gpio->set(ctx->clk, inv); ctx->gpio->set(ctx->mosi, !!(u & 0x40)); ctx->gpio->set(ctx->clk, !inv); u <<= 2; } } ctx->gpio->set(ctx->clk, 0 ^ inv); } static void lws_bb_spi_read(lws_bb_spi_t *ctx, uint8_t *buf, size_t len) { uint8_t u = 0; uint8_t inv = !!(ctx->bb_ops.bus_mode & LWSSPIMODE_CPOL); while (len--) { int n; for (n = 0; n < 8; n++) { ctx->gpio->set(ctx->clk, inv); u = (u << 1) | !!ctx->gpio->read(ctx->miso); ctx->gpio->set(ctx->mosi, !!(u & 0x80)); ctx->gpio->set(ctx->clk, !inv); } *buf++ = u; } ctx->gpio->set(ctx->clk, 0 ^ inv); } int lws_bb_spi_queue(const lws_spi_ops_t *octx, const lws_spi_desc_t *desc) { lws_bb_spi_t *ctx = (lws_bb_spi_t *)octx; const uint8_t *src = desc->src; /* clock to idle */ ctx->gpio->set(ctx->clk, 0 ^ !!(octx->bus_mode & LWSSPIMODE_CPOL)); /* enable nCS */ ctx->gpio->set(ctx->ncs[desc->channel], 0); if (desc->count_cmd) { ctx->gpio->set(ctx->ncmd[desc->channel], 0); lws_bb_spi_write(ctx, src, desc->count_cmd); ctx->gpio->set(ctx->ncmd[desc->channel], 1); src += desc->count_cmd; } if (desc->count_write) lws_bb_spi_write(ctx, desc->data, desc->count_write); if (desc->count_read) lws_bb_spi_read(ctx, desc->dest, desc->count_read); /* disable nCS */ ctx->gpio->set(ctx->ncs[desc->channel], 1); /* clock to idle */ ctx->gpio->set(ctx->clk, 0 ^ !!(octx->bus_mode & LWSSPIMODE_CPOL)); return 0; } libwebsockets-4.3.5/lib/drivers/spi/lws-spi.c000066400000000000000000000022451476025525100211560ustar00rootroot00000000000000/* * Generic SPI * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include libwebsockets-4.3.5/lib/event-libs/000077500000000000000000000000001476025525100172105ustar00rootroot00000000000000libwebsockets-4.3.5/lib/event-libs/CMakeLists.txt000066400000000000000000000066431476025525100217610ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # include_directories(.) macro(create_evlib_plugin PLUGIN_NAME MAIN_SRC PLUGIN_HDR EVLIB) set(PLUGIN_SRCS ${MAIN_SRC}) source_group("Headers Private" FILES ${PLUGIN_HDR}) source_group("Sources" FILES ${MAIN_SRC}) add_library(websockets-${PLUGIN_NAME} SHARED ${MAIN_SRC} ${PLUGIN_HDR}) if (APPLE) set_property(TARGET websockets-${PLUGIN_NAME} PROPERTY MACOSX_RPATH YES) endif() foreach(libpath ${LWS_DEP_LIB_PATHS}) target_link_directories(${TEST_NAME} ${libpath}) endforeach() target_link_libraries(websockets-${PLUGIN_NAME} websockets_shared ${EVLIB}) add_dependencies(websockets-${PLUGIN_NAME} websockets_shared) target_compile_definitions(websockets-${PLUGIN_NAME} PRIVATE LWS_BUILDING_SHARED) target_include_directories(websockets-${PLUGIN_NAME} PRIVATE ${PLUGIN_INCLUDE} ${LWS_LIB_BUILD_INC_PATHS}) # Set test app specific defines. # set_property(TARGET ${PLUGIN_NAME} # PROPERTY COMPILE_DEFINITIONS # INSTALL_DATADIR="${CMAKE_INSTALL_PREFIX}/evlib-plugins" #) set(CMAKE_POSITION_INDEPENDENT_CODE ON) install(TARGETS websockets-${PLUGIN_NAME} EXPORT LibwebsocketsTargets LIBRARY DESTINATION "${LWS_INSTALL_LIB_DIR}${LIB_SUFFIX}" COMPONENT ${PLUGIN_NAME}) list(APPEND EVLIB_PLUGINS_LIST websockets-${PLUGIN_NAME}) endmacro() # # poll support gets built into the lib as the default # if (LWS_WITH_POLL) add_subdir_include_directories(poll) endif() if (LWS_WITH_LIBUV OR LWS_WITH_LIBUV_INTERNAL) add_subdir_include_directories(libuv) set(LWS_HAVE_UV_VERSION_H ${LWS_HAVE_UV_VERSION_H} PARENT_SCOPE) set(LWS_HAVE_NEW_UV_VERSION_H ${LWS_HAVE_NEW_UV_VERSION_H} PARENT_SCOPE) endif() if (LWS_WITH_LIBEVENT) add_subdir_include_directories(libevent) endif() if (LWS_WITH_GLIB) add_subdir_include_directories(glib) endif() if (LWS_WITH_LIBEV) add_subdir_include_directories(libev) set(LWS_HAVE_EVBACKEND_LINUXAIO ${LWS_HAVE_EVBACKEND_LINUXAIO} PARENT_SCOPE) set(LWS_HAVE_EVBACKEND_IOURING ${LWS_HAVE_EVBACKEND_IOURING} PARENT_SCOPE) endif() if (LWS_WITH_SDEVENT) add_subdir_include_directories(sdevent) endif() if (LWS_WITH_ULOOP) add_subdir_include_directories(uloop) endif() # # Keep explicit parent scope exports at end # export_to_parent_intermediate() set(EVLIB_PLUGINS_LIST ${EVLIB_PLUGINS_LIST} PARENT_SCOPE) libwebsockets-4.3.5/lib/event-libs/README.md000066400000000000000000000140701476025525100204710ustar00rootroot00000000000000## Information for new event lib implementers ### Introduction By default lws has built-in support for POSIX poll() as the event loop on unix, and native WSA on windows. To get access to epoll() or other platform specific better poll waits, or to integrate with existing applications already using a specific event loop, it can be desirable for lws to use another external event library, like libuv, glib, libevent, libev, or sdevent. Lws supports wholesale replacement of its wait selectable at runtime, either by building support for one or more event lib into the libwebsockets library, or by building runtime-loadable plugins. CMake symbol `LWS_WITH_EVLIB_PLUGINS` decides if the support is built as plugins or included into the lws lib. Due to their history libevent and libev have conflicting defines in the same namespace and cannot be built together if included into the lib, however when built as plugins they are built separately without problems. See ./READMEs/README.event-libs.md for more details. Despite it may be more work, lws event lib implementations must support "foreign" loops cleanly, that is integration with an already-existing loop and the ability to destroy the lws_context without stopping or leaving the foreign loop in any different state than when lws found it. For most loops this is fairly simple, but with libuv async close, it required refcounting lws libuv handles and deferring the actual destroy until they were all really closed. ### Code placement The code specific to the event library should live in `./lib/event-libs/**lib name**` ### Allowing control over enabling event libs All event libs should add a cmake define `LWS_WITH_**lib name**` and make its build dependent on it in CMakeLists.txt. Export the cmakedefine in `./cmake/lws_config.h.in` as well so user builds can understand if the event lib is available in the lws build it is trying to bind to. If the event lib is disabled in cmake, nothing in its directory is built or referenced. ### Event loop ops struct The event lib support is defined by `struct lws_event_loop_ops` in `lib/event-libs/private-lib-event-libs.h`, each event lib support instantiates one of these and fills in the appropriate ops callbacks to perform its job. By convention that lives in `./lib/event-libs/**lib name**/**lib_name**.c`. The ops struct must be public, not static, and must be named using `**lib_name**`, eg ``` ``` ### Private event lib declarations Truly private declarations for the event lib support that are only referenced by that code can go in the event-libs directory as you like. The convention is they should be in the event lib support directory in a file `private-lib-event-libs-**lib name**.h`. ### Integration with lws There are a couple of places to add refererences in ./lib/core/context.c, in a table of context creation time server option flags mapped to the **lib_name**, used for plugin mode, like this... ``` #if defined(LWS_WITH_EVLIB_PLUGINS) && defined(LWS_WITH_EVENT_LIBS) static const struct lws_evlib_map { uint64_t flag; const char *name; } map[] = { { LWS_SERVER_OPTION_LIBUV, "evlib_uv" }, { LWS_SERVER_OPTION_LIBEVENT, "evlib_event" }, { LWS_SERVER_OPTION_GLIB, "evlib_glib" }, { LWS_SERVER_OPTION_LIBEV, "evlib_ev" }, }; ``` and for backwards compatibility add a stanza to the built-in checks like this ``` #if defined(LWS_WITH_LIBUV) if (lws_check_opt(info->options, LWS_SERVER_OPTION_LIBUV)) { extern const lws_plugin_evlib_t evlib_uv; plev = &evlib_uv; } #endif ``` Both entries are the way the main libs hook up to the selected event lib ops struct at runtime. ### Integrating event lib assets to lws Declare "container structs" in your private....h for anything you need at wsi, pt, vhost and context levels, eg, the libuv event lib support need to add its own assets in the perthread struct, it declares in its private....h ``` struct lws_pt_eventlibs_libuv { uv_loop_t *io_loop; struct lws_context_per_thread *pt; uv_signal_t signals[8]; uv_timer_t sultimer; uv_idle_t idle; struct lws_signal_watcher_libuv w_sigint; }; ``` this is completely private and opaque, but in the ops struct there are provided four entries to export the sizes of these event-lib specific objects ``` ... /* evlib_size_ctx */ sizeof(struct lws_context_eventlibs_libuv), /* evlib_size_pt */ sizeof(struct lws_pt_eventlibs_libuv), /* evlib_size_vh */ 0, /* evlib_size_wsi */ sizeof(struct lws_io_watcher_libuv), }; ``` If the particular event lib doesn't need to have a private footprint in an object, it can just set the size it needs there to 0. When the context, pts, vhosts or wsis are created in lws, they over-allocate to also allow for the event lib object, and set a pointer in the lws object being created to point at the over-allocation. For example for the wsi ``` #if defined(LWS_WITH_EVENT_LIBS) void *evlib_wsi; /* overallocated */ #endif ``` and similarly there are `evlib_pt` and so on for those objects, usable by the event lib and opaque to everyone else. Once the event lib is selected at runtime, all of these objects are guaranteed to have the right size object at `wsi->evlib_wsi` initialized to zeroes. ### Enabling event lib adoption You need to add a `LWS_SERVER_OPTION...` flag as necessary in `./lib/libwebsockets.h` `enum lws_context_options`, and follow the existing code in `lws_create_context()` to convert the flag into binding your ops struct to the context. ### Implementation of the event lib bindings Study eg libuv implementation, using the available ops in the struct lws_event_loop_ops as a guide. ### Destruction Ending the event loop is generally a bit tricky, because if the event loop is internal to the lws context, you cannot destroy it while the event loop is running. Don't add special exports... we tried that, it's a huge mess. The same user code should be able work with any of the event loops including poll. The solution we found was hide the different processing necessary for the different cases in `lws_destroy_context()`. To help with that there are event lib ops available that will be called at two different places in the context destroy processing. libwebsockets-4.3.5/lib/event-libs/glib/000077500000000000000000000000001476025525100201255ustar00rootroot00000000000000libwebsockets-4.3.5/lib/event-libs/glib/CMakeLists.txt000066400000000000000000000046311476025525100226710ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # # The strategy is to only export to PARENT_SCOPE # # - changes to LIB_LIST # - includes via include_directories # # and keep everything else private include_directories(.) set(LWS_GLIB_INCLUDE_DIRS CACHE PATH "Path to the glib include directory") set(LWS_GLIB_LIBRARIES CACHE PATH "Path to the glib library") include (FindPkgConfig) if (NOT GLIB_FOUND) find_path(GLIB_INCLUDE_DIRS NAMES glib-2.0/glib.h) find_library(GLIB_LIBRARIES NAMES glib-2.0) if (GLIB_INCLUDE_DIRS AND GLIB_LIBRARIES) set(GLIB_FOUND) endif() if (GLIB_INCLUDE_DIRS) set(GLIB_INCLUDE_DIRS "${GLIB_INCLUDE_DIRS}/glib-2.0" PARENT_SCOPE) endif() endif() PKG_SEARCH_MODULE(LWS_GLIB2 glib-2.0) if (LWS_GLIB2_FOUND) list(APPEND GLIB_INCLUDE_DIRS "${LWS_GLIB2_INCLUDE_DIRS}") endif() message("glib include dir: ${GLIB_INCLUDE_DIRS}") message("glib libraries: ${GLIB_LIBRARIES}") include_directories("${GLIB_INCLUDE_DIRS}") if (LWS_WITH_EVLIB_PLUGINS) create_evlib_plugin(evlib_glib glib.c private-lib-event-libs-glib.h ${GLIB_LIBRARIES}) else() list(APPEND LIB_LIST ${GLIB_LIBRARIES}) if (LWS_WITH_NETWORK) list(APPEND SOURCES event-libs/glib/glib.c) endif() endif() # # Keep explicit parent scope exports at end # exports_to_parent_scope() libwebsockets-4.3.5/lib/event-libs/glib/glib.c000066400000000000000000000312301476025525100212050ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include #include "private-lib-event-libs-glib.h" #if !defined(G_SOURCE_FUNC) #define G_SOURCE_FUNC(f) ((GSourceFunc) (void (*)(void)) (f)) #endif #define pt_to_priv_glib(_pt) ((struct lws_pt_eventlibs_glib *)(_pt)->evlib_pt) #define wsi_to_priv_glib(_w) ((struct lws_wsi_eventlibs_glib *)(_w)->evlib_wsi) #define wsi_to_subclass(_w) (wsi_to_priv_glib(_w)->w_read.source) #define wsi_to_gsource(_w) ((GSource *)wsi_to_subclass(_w)) #define pt_to_loop(_pt) (pt_to_priv_glib(_pt)->loop) #define pt_to_g_main_context(_pt) g_main_loop_get_context(pt_to_loop(_pt)) #define lws_gs_valid(t) (t.gs) #define lws_gs_destroy(t) if (lws_gs_valid(t)) { \ g_source_destroy(t.gs); \ g_source_unref(t.gs); \ t.gs = NULL; t.tag = 0; } static gboolean lws_glib_idle_timer_cb(void *p); static gboolean lws_glib_hrtimer_cb(void *p); static gboolean lws_glib_check(GSource *src) { struct lws_io_watcher_glib_subclass *sub = (struct lws_io_watcher_glib_subclass *)src; return !!g_source_query_unix_fd(src, sub->tag); } /* * These helpers attach only to the main_context that belongs to the pt's glib * mainloop. The simpler g_timeout_add() and g_idle_add() are forbidden * because they implicitly choose the default main context to attach to * instead of specifically the loop bound to the pt. * * https://developer.gnome.org/programming-guidelines/unstable/main-contexts.html.en#what-is-gmaincontext */ static int lws_glib_set_idle(struct lws_context_per_thread *pt) { if (lws_gs_valid(pt_to_priv_glib(pt)->idle)) return 0; pt_to_priv_glib(pt)->idle.gs = g_idle_source_new(); if (!pt_to_priv_glib(pt)->idle.gs) return 1; g_source_set_callback(pt_to_priv_glib(pt)->idle.gs, lws_glib_idle_timer_cb, pt, NULL); pt_to_priv_glib(pt)->idle.tag = g_source_attach( pt_to_priv_glib(pt)->idle.gs, pt_to_g_main_context(pt)); return 0; } static int lws_glib_set_timeout(struct lws_context_per_thread *pt, unsigned int ms) { lws_gs_destroy(pt_to_priv_glib(pt)->hrtimer); pt_to_priv_glib(pt)->hrtimer.gs = g_timeout_source_new(ms); if (!pt_to_priv_glib(pt)->hrtimer.gs) return 1; g_source_set_callback(pt_to_priv_glib(pt)->hrtimer.gs, lws_glib_hrtimer_cb, pt, NULL); pt_to_priv_glib(pt)->hrtimer.tag = g_source_attach( pt_to_priv_glib(pt)->hrtimer.gs, pt_to_g_main_context(pt)); return 0; } static gboolean lws_glib_dispatch(GSource *src, GSourceFunc x, gpointer userData) { struct lws_io_watcher_glib_subclass *sub = (struct lws_io_watcher_glib_subclass *)src; struct lws_context_per_thread *pt; struct lws_pollfd eventfd; GIOCondition cond; cond = g_source_query_unix_fd(src, sub->tag); eventfd.revents = (short)cond; /* translate from glib event namespace to platform */ if (cond & G_IO_IN) eventfd.revents |= LWS_POLLIN; if (cond & G_IO_OUT) eventfd.revents |= LWS_POLLOUT; if (cond & G_IO_ERR) eventfd.revents |= LWS_POLLHUP; if (cond & G_IO_HUP) eventfd.revents |= LWS_POLLHUP; eventfd.events = eventfd.revents; eventfd.fd = sub->wsi->desc.sockfd; lwsl_wsi_debug(sub->wsi, "fd %d, events %d", eventfd.fd, eventfd.revents); pt = &sub->wsi->a.context->pt[(int)sub->wsi->tsi]; if (pt->is_destroyed) return G_SOURCE_CONTINUE; lws_service_fd_tsi(sub->wsi->a.context, &eventfd, sub->wsi->tsi); if (!lws_gs_valid(pt_to_priv_glib(pt)->idle)) lws_glib_set_idle(pt); if (pt->destroy_self) lws_context_destroy(pt->context); return G_SOURCE_CONTINUE; } static const GSourceFuncs lws_glib_source_ops = { .prepare = NULL, .check = lws_glib_check, .dispatch = lws_glib_dispatch, .finalize = NULL, }; /* * This is the callback for a timer object that is set to the earliest scheduled * lws event... it services any lws scheduled events that are ready, and then * resets the event loop timer to the earliest remaining event, if any. */ static gboolean lws_glib_hrtimer_cb(void *p) { struct lws_context_per_thread *pt = (struct lws_context_per_thread *)p; unsigned int ms; lws_usec_t us; lws_pt_lock(pt, __func__); lws_gs_destroy(pt_to_priv_glib(pt)->hrtimer); us = __lws_sul_service_ripe(pt->pt_sul_owner, LWS_COUNT_PT_SUL_OWNERS, lws_now_usecs()); if (us) { ms = (unsigned int)(us / LWS_US_PER_MS); if (!ms) ms = 1; lws_glib_set_timeout(pt, ms); } lws_pt_unlock(pt); lws_glib_set_idle(pt); return FALSE; /* stop it repeating */ } static gboolean lws_glib_idle_timer_cb(void *p) { struct lws_context_per_thread *pt = (struct lws_context_per_thread *)p; if (pt->is_destroyed) return FALSE; lws_service_do_ripe_rxflow(pt); lws_glib_hrtimer_cb(pt); /* * is there anybody with pending stuff that needs service forcing? */ if (!lws_service_adjust_timeout(pt->context, 1, pt->tid)) { /* -1 timeout means just do forced service */ _lws_plat_service_forced_tsi(pt->context, pt->tid); /* still somebody left who wants forced service? */ if (!lws_service_adjust_timeout(pt->context, 1, pt->tid)) return TRUE; } if (pt->destroy_self) lws_context_destroy(pt->context); /* * For glib, this disables the idle callback. Otherwise we keep * coming back here immediately endlessly. * * We reenable the idle callback on the next network or scheduled event */ lws_gs_destroy(pt_to_priv_glib(pt)->idle); return FALSE; } void lws_glib_sigint_cb(void *ctx) { struct lws_context_per_thread *pt = ctx; pt->inside_service = 1; if (pt->context->eventlib_signal_cb) { pt->context->eventlib_signal_cb(NULL, 0); return; } if (!pt->event_loop_foreign) g_main_loop_quit(pt_to_loop(pt)); } static int elops_init_context_glib(struct lws_context *context, const struct lws_context_creation_info *info) { // int n; context->eventlib_signal_cb = info->signal_cb; // for (n = 0; n < context->count_threads; n++) // pt_to_priv_glib(&context->pt[n])->w_sigint.context = context; return 0; } static int elops_accept_glib(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; struct lws_wsi_eventlibs_glib *wsipr = wsi_to_priv_glib(wsi); int fd; assert(!wsi_to_subclass(wsi)); wsi_to_subclass(wsi) = (struct lws_io_watcher_glib_subclass *) g_source_new((GSourceFuncs *)&lws_glib_source_ops, sizeof(*wsi_to_subclass(wsi))); if (!wsi_to_subclass(wsi)) return 1; wsipr->w_read.context = wsi->a.context; wsi_to_subclass(wsi)->wsi = wsi; if (wsi->role_ops->file_handle) fd = wsi->desc.filefd; else fd = wsi->desc.sockfd; wsi_to_subclass(wsi)->tag = g_source_add_unix_fd(wsi_to_gsource(wsi), fd, (GIOCondition)LWS_POLLIN); wsipr->w_read.actual_events = LWS_POLLIN; g_source_set_callback(wsi_to_gsource(wsi), G_SOURCE_FUNC(lws_service_fd), wsi->a.context, NULL); g_source_attach(wsi_to_gsource(wsi), pt_to_g_main_context(pt)); return 0; } static int elops_listen_init_glib(struct lws_dll2 *d, void *user) { struct lws *wsi = lws_container_of(d, struct lws, listen_list); elops_accept_glib(wsi); return 0; } static int elops_init_pt_glib(struct lws_context *context, void *_loop, int tsi) { struct lws_context_per_thread *pt = &context->pt[tsi]; struct lws_pt_eventlibs_glib *ptpr = pt_to_priv_glib(pt); GMainLoop *loop = (GMainLoop *)_loop; if (!loop) loop = g_main_loop_new(NULL, 0); else context->pt[tsi].event_loop_foreign = 1; if (!loop) { lwsl_cx_err(context, "creating glib loop failed"); return -1; } ptpr->loop = loop; lws_vhost_foreach_listen_wsi(context, NULL, elops_listen_init_glib); lws_glib_set_idle(pt); /* Register the signal watcher unless it's a foreign loop */ if (pt->event_loop_foreign) return 0; ptpr->sigint.tag = g_unix_signal_add(SIGINT, G_SOURCE_FUNC(lws_glib_sigint_cb), pt); return 0; } /* * We are changing the event wait for this guy */ static void elops_io_glib(struct lws *wsi, unsigned int flags) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; struct lws_wsi_eventlibs_glib *wsipr = wsi_to_priv_glib(wsi); GIOCondition cond = wsipr->w_read.actual_events | G_IO_ERR; if (!pt_to_loop(pt) || wsi->a.context->being_destroyed || pt->is_destroyed) return; if (!wsi_to_subclass(wsi)) return; /* * We are being given individual set / clear operations using * LWS_EV_ common namespace, convert them to glib namespace bitfield */ if (flags & LWS_EV_READ) { if (flags & LWS_EV_STOP) cond &= (unsigned int)~(G_IO_IN | G_IO_HUP); else cond |= G_IO_IN | G_IO_HUP; } if (flags & LWS_EV_WRITE) { if (flags & LWS_EV_STOP) cond &= (unsigned int)~G_IO_OUT; else cond |= G_IO_OUT; } wsipr->w_read.actual_events = (uint8_t)cond; lwsl_wsi_debug(wsi, "fd %d, 0x%x/0x%x", wsi->desc.sockfd, flags, (int)cond); g_source_modify_unix_fd(wsi_to_gsource(wsi), wsi_to_subclass(wsi)->tag, cond); } static void elops_run_pt_glib(struct lws_context *context, int tsi) { struct lws_context_per_thread *pt = &context->pt[tsi]; if (pt_to_loop(pt)) g_main_loop_run(pt_to_loop(pt)); } static void elops_destroy_wsi_glib(struct lws *wsi) { struct lws_context_per_thread *pt; if (!wsi) return; pt = &wsi->a.context->pt[(int)wsi->tsi]; if (pt->is_destroyed) return; if (!wsi_to_gsource(wsi)) return; if (wsi_to_subclass(wsi)->tag) { g_source_remove_unix_fd(wsi_to_gsource(wsi), wsi_to_subclass(wsi)->tag); wsi_to_subclass(wsi)->tag = NULL; } g_source_destroy(wsi_to_gsource(wsi)); g_source_unref(wsi_to_gsource(wsi)); wsi_to_subclass(wsi) = NULL; } static int elops_listen_destroy_glib(struct lws_dll2 *d, void *user) { struct lws *wsi = lws_container_of(d, struct lws, listen_list); elops_destroy_wsi_glib(wsi); return 0; } static void elops_destroy_pt_glib(struct lws_context *context, int tsi) { struct lws_context_per_thread *pt = &context->pt[tsi]; struct lws_pt_eventlibs_glib *ptpr = pt_to_priv_glib(pt); if (!pt_to_loop(pt)) return; lws_vhost_foreach_listen_wsi(context, NULL, elops_listen_destroy_glib); lws_gs_destroy(ptpr->idle); lws_gs_destroy(ptpr->hrtimer); if (!pt->event_loop_foreign) { g_main_loop_quit(pt_to_loop(pt)); lws_gs_destroy(ptpr->sigint); g_main_loop_unref(pt_to_loop(pt)); } pt_to_loop(pt) = NULL; } static int elops_destroy_context2_glib(struct lws_context *context) { struct lws_context_per_thread *pt = &context->pt[0]; int n; for (n = 0; n < (int)context->count_threads; n++) { if (!pt->event_loop_foreign) g_main_loop_quit(pt_to_loop(pt)); pt++; } return 0; } static int elops_wsi_logical_close_glib(struct lws *wsi) { elops_destroy_wsi_glib(wsi); return 0; } static const struct lws_event_loop_ops event_loop_ops_glib = { /* name */ "glib", /* init_context */ elops_init_context_glib, /* destroy_context1 */ NULL, /* destroy_context2 */ elops_destroy_context2_glib, /* init_vhost_listen_wsi */ elops_accept_glib, /* init_pt */ elops_init_pt_glib, /* wsi_logical_close */ elops_wsi_logical_close_glib, /* check_client_connect_ok */ NULL, /* close_handle_manually */ NULL, /* accept */ elops_accept_glib, /* io */ elops_io_glib, /* run_pt */ elops_run_pt_glib, /* destroy_pt */ elops_destroy_pt_glib, /* destroy wsi */ elops_destroy_wsi_glib, /* foreign_thread */ NULL, /* flags */ LELOF_DESTROY_FINAL, /* evlib_size_ctx */ 0, /* evlib_size_pt */ sizeof(struct lws_pt_eventlibs_glib), /* evlib_size_vh */ 0, /* evlib_size_wsi */ sizeof(struct lws_io_watcher_glib), }; #if defined(LWS_WITH_EVLIB_PLUGINS) LWS_VISIBLE #endif const lws_plugin_evlib_t evlib_glib = { .hdr = { "glib event loop", "lws_evlib_plugin", LWS_BUILD_HASH, LWS_PLUGIN_API_MAGIC }, .ops = &event_loop_ops_glib }; libwebsockets-4.3.5/lib/event-libs/glib/private-lib-event-libs-glib.h000066400000000000000000000035361476025525100255040ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include typedef struct lws_glib_tag { GSource *gs; guint tag; } lws_glib_tag_t; struct lws_pt_eventlibs_glib { GMainLoop *loop; lws_glib_tag_t hrtimer; lws_glib_tag_t sigint; lws_glib_tag_t idle; //struct lws_signal_watcher_libuv w_sigint; }; struct lws_io_watcher_glib_subclass { GSource base; struct lws *wsi; gpointer tag; }; /* * One of these is embedded in each wsi */ struct lws_io_watcher_glib { struct lws_io_watcher_glib_subclass *source; /* these are created and destroyed by glib */ struct lws_context *context; uint8_t actual_events; }; struct lws_wsi_eventlibs_glib { struct lws_io_watcher_glib w_read; }; libwebsockets-4.3.5/lib/event-libs/libev/000077500000000000000000000000001476025525100203115ustar00rootroot00000000000000libwebsockets-4.3.5/lib/event-libs/libev/CMakeLists.txt000066400000000000000000000056331476025525100230600ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # # The strategy is to only export to PARENT_SCOPE # # - changes to LIB_LIST # - includes via include_directories # # and keep everything else private include_directories(.) set(LWS_LIBEV_LIBRARIES CACHE PATH "Path to the libev library") set(LWS_LIBEV_INCLUDE_DIRS CACHE PATH "Path to the libev include directory") if (NOT LIBEV_FOUND) find_path(LIBEV_INCLUDE_DIRS NAMES ev.h) find_library(LIBEV_LIBRARIES NAMES ev) endif() message("libev include dir: ${LIBEV_INCLUDE_DIRS}") message("libev libraries: ${LIBEV_LIBRARIES}") include_directories("${LIBEV_INCLUDE_DIRS}") if ("${LWS_LIBEV_LIBRARIES}" STREQUAL "" OR "${LWS_LIBEV_INCLUDE_DIRS}" STREQUAL "") else() set(LIBEV_LIBRARIES ${LWS_LIBEV_LIBRARIES}) set(LIBEV_INCLUDE_DIRS ${LWS_LIBEV_INCLUDE_DIRS}) endif() if (LWS_WITH_EVLIB_PLUGINS) create_evlib_plugin( evlib_ev libev.c private-lib-event-libs-libev.h ${LIBEV_LIBRARIES}) else() list(APPEND LIB_LIST ${LIBEV_LIBRARIES}) list(APPEND SOURCES event-libs/libev/libev.c) # see README.build.md for discussion of why of the supported event libs, # only libev cannot cope with -Werror set_source_files_properties(event-libs/libev/libev.c PROPERTIES COMPILE_FLAGS "-Wno-error" ) endif() set(CMAKE_REQUIRED_LIBRARIES ${LIB_LIST}) CHECK_C_SOURCE_COMPILES( "#include int main(int argc, char **argv) { return EVBACKEND_LINUXAIO; } " LWS_HAVE_EVBACKEND_LINUXAIO) CHECK_C_SOURCE_COMPILES( "#include int main(int argc, char **argv) { return EVBACKEND_IOURING; } " LWS_HAVE_EVBACKEND_IOURING) # # Keep explicit parent scope exports at end # exports_to_parent_scope() set(LWS_HAVE_EVBACKEND_LINUXAIO ${LWS_HAVE_EVBACKEND_LINUXAIO} PARENT_SCOPE) set(LWS_HAVE_EVBACKEND_IOURING ${LWS_HAVE_EVBACKEND_IOURING} PARENT_SCOPE) libwebsockets-4.3.5/lib/event-libs/libev/libev.c000066400000000000000000000302311476025525100215550ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "private-lib-event-libs-libev.h" #define pt_to_priv_ev(_pt) ((struct lws_pt_eventlibs_libev *)(_pt)->evlib_pt) #define vh_to_priv_ev(_vh) ((struct lws_vh_eventlibs_libev *)(_vh)->evlib_vh) #define wsi_to_priv_ev(_w) ((struct lws_wsi_eventlibs_libev *)(_w)->evlib_wsi) static void lws_ev_hrtimer_cb(struct ev_loop *loop, struct ev_timer *watcher, int revents) { struct lws_pt_eventlibs_libev *ptpr = lws_container_of(watcher, struct lws_pt_eventlibs_libev, hrtimer); struct lws_context_per_thread *pt = ptpr->pt; lws_usec_t us; lws_pt_lock(pt, __func__); us = __lws_sul_service_ripe(pt->pt_sul_owner, LWS_COUNT_PT_SUL_OWNERS, lws_now_usecs()); if (us) { ev_timer_set(&ptpr->hrtimer, ((float)us) / 1000000.0, 0); ev_timer_start(ptpr->io_loop, &ptpr->hrtimer); } lws_pt_unlock(pt); } static void lws_ev_idle_cb(struct ev_loop *loop, struct ev_idle *handle, int revents) { struct lws_pt_eventlibs_libev *ptpr = lws_container_of(handle, struct lws_pt_eventlibs_libev, idle); struct lws_context_per_thread *pt = ptpr->pt; int reschedule = 0; lws_usec_t us; lws_service_do_ripe_rxflow(pt); /* * is there anybody with pending stuff that needs service forcing? */ if (!lws_service_adjust_timeout(pt->context, 1, pt->tid)) /* -1 timeout means just do forced service */ reschedule = _lws_plat_service_forced_tsi(pt->context, pt->tid); /* account for hrtimer */ lws_pt_lock(pt, __func__); us = __lws_sul_service_ripe(pt->pt_sul_owner, LWS_COUNT_PT_SUL_OWNERS, lws_now_usecs()); if (us) { ev_timer_set(&ptpr->hrtimer, ((float)us) / 1000000.0, 0); ev_timer_start(ptpr->io_loop, &ptpr->hrtimer); } lws_pt_unlock(pt); /* there is nobody who needs service forcing, shut down idle */ if (!reschedule) ev_idle_stop(loop, handle); if (pt->destroy_self) lws_context_destroy(pt->context); } static void lws_accept_cb(struct ev_loop *loop, struct ev_io *watcher, int revents) { struct lws_io_watcher_libev *lws_io = lws_container_of(watcher, struct lws_io_watcher_libev, watcher); struct lws_context *context = lws_io->context; struct lws_pt_eventlibs_libev *ptpr; struct lws_context_per_thread *pt; struct lws_pollfd eventfd; struct lws *wsi; int tsi = 0; if (revents & EV_ERROR) return; eventfd.fd = watcher->fd; eventfd.events = 0; eventfd.revents = EV_NONE; if (revents & EV_READ) { eventfd.events |= LWS_POLLIN; eventfd.revents |= LWS_POLLIN; } if (revents & EV_WRITE) { eventfd.events |= LWS_POLLOUT; eventfd.revents |= LWS_POLLOUT; } wsi = wsi_from_fd(context, watcher->fd); if (wsi) tsi = (int)wsi->tsi; pt = &context->pt[tsi]; ptpr = pt_to_priv_ev(pt); lws_service_fd_tsi(context, &eventfd, tsi); ev_idle_start(ptpr->io_loop, &ptpr->idle); } void lws_ev_sigint_cb(struct ev_loop *loop, struct ev_signal *watcher, int revents) { struct lws_context *context = watcher->data; if (context->eventlib_signal_cb) { context->eventlib_signal_cb((void *)watcher, watcher->signum); return; } ev_break(loop, EVBREAK_ALL); } static int elops_listen_init_ev(struct lws_dll2 *d, void *user) { #if defined(LWS_WITH_SERVER) struct lws *wsi = lws_container_of(d, struct lws, listen_list); struct lws_context *context = (struct lws_context *)user; struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; struct lws_pt_eventlibs_libev *ptpr = pt_to_priv_ev(pt); struct lws_wsi_eventlibs_libev *w = wsi_to_priv_ev(wsi); struct lws_vhost *vh = wsi->a.vhost; w->w_read.context = context; w->w_write.context = context; vh_to_priv_ev(vh)->w_accept.context = context; ev_io_init(&vh_to_priv_ev(vh)->w_accept.watcher, lws_accept_cb, wsi->desc.sockfd, EV_READ); ev_io_start(ptpr->io_loop, &vh_to_priv_ev(vh)->w_accept.watcher); #endif return 0; } static int elops_init_pt_ev(struct lws_context *context, void *_loop, int tsi) { struct lws_context_per_thread *pt = &context->pt[tsi]; struct lws_pt_eventlibs_libev *ptpr = pt_to_priv_ev(pt); struct ev_signal *w_sigint = &ptpr->w_sigint.watcher; struct ev_loop *loop = (struct ev_loop *)_loop; const char *backend_name; unsigned int backend; int status = 0; lwsl_cx_info(context, "loop %p", _loop); ptpr->pt = pt; if (!loop) loop = ev_loop_new(0); else context->pt[tsi].event_loop_foreign = 1; if (!loop) { lwsl_cx_err(context, "creating event base failed"); return -1; } ptpr->io_loop = loop; lws_vhost_foreach_listen_wsi(context, context, elops_listen_init_ev); /* Register the signal watcher unless it's a foreign loop */ if (!context->pt[tsi].event_loop_foreign) { ev_signal_init(w_sigint, lws_ev_sigint_cb, SIGINT); w_sigint->data = context; ev_signal_start(loop, w_sigint); } backend = ev_backend(loop); switch (backend) { case EVBACKEND_SELECT: backend_name = "select"; break; case EVBACKEND_POLL: backend_name = "poll"; break; case EVBACKEND_EPOLL: backend_name = "epoll"; break; #if defined(LWS_HAVE_EVBACKEND_LINUXAIO) case EVBACKEND_LINUXAIO: backend_name = "Linux AIO"; break; #endif #if defined(LWS_HAVE_EVBACKEND_IOURING) case EVBACKEND_IOURING: backend_name = "Linux io_uring"; break; #endif case EVBACKEND_KQUEUE: backend_name = "kqueue"; break; case EVBACKEND_DEVPOLL: backend_name = "/dev/poll"; break; case EVBACKEND_PORT: backend_name = "Solaris 10 \"port\""; break; default: backend_name = "Unknown libev backend"; break; } lwsl_cx_info(context, " libev backend: %s", backend_name); (void)backend_name; ev_timer_init(&ptpr->hrtimer, lws_ev_hrtimer_cb, 0, 0); ptpr->hrtimer.data = pt; ev_idle_init(&ptpr->idle, lws_ev_idle_cb); return status; } static int elops_listen_destroy_ev(struct lws_dll2 *d, void *user) { #if defined(LWS_WITH_SERVER) struct lws *wsi = lws_container_of(d, struct lws, listen_list); struct lws_context *context = (struct lws_context *)user; struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; struct lws_pt_eventlibs_libev *ptpr = pt_to_priv_ev(pt); struct lws_vhost *vh = wsi->a.vhost; ev_io_stop(ptpr->io_loop, &vh_to_priv_ev(vh)->w_accept.watcher); #endif return 0; } static void elops_destroy_pt_ev(struct lws_context *context, int tsi) { struct lws_context_per_thread *pt = &context->pt[tsi]; struct lws_pt_eventlibs_libev *ptpr = pt_to_priv_ev(pt); lws_vhost_foreach_listen_wsi(context, context, elops_listen_destroy_ev); /* static assets */ ev_timer_stop(ptpr->io_loop, &ptpr->hrtimer); ev_idle_stop(ptpr->io_loop, &ptpr->idle); if (!pt->event_loop_foreign) ev_signal_stop(ptpr->io_loop, &ptpr->w_sigint.watcher); } static int elops_init_context_ev(struct lws_context *context, const struct lws_context_creation_info *info) { int n; context->eventlib_signal_cb = info->signal_cb; for (n = 0; n < context->count_threads; n++) pt_to_priv_ev(&context->pt[n])->w_sigint.context = context; return 0; } static int elops_accept_ev(struct lws *wsi) { struct lws_wsi_eventlibs_libev *w = wsi_to_priv_ev(wsi); int fd; if (wsi->role_ops->file_handle) fd = wsi->desc.filefd; else fd = wsi->desc.sockfd; w->w_read.context = wsi->a.context; w->w_write.context = wsi->a.context; ev_io_init(&w->w_read.watcher, lws_accept_cb, fd, EV_READ); ev_io_init(&w->w_write.watcher, lws_accept_cb, fd, EV_WRITE); return 0; } static void elops_io_ev(struct lws *wsi, unsigned int flags) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; struct lws_pt_eventlibs_libev *ptpr = pt_to_priv_ev(pt); struct lws_wsi_eventlibs_libev *w = wsi_to_priv_ev(wsi); lwsl_wsi_debug(wsi, "%s flags 0x%x %p %d", wsi->role_ops->name, flags, ptpr->io_loop, pt->is_destroyed); if (!ptpr->io_loop || pt->is_destroyed) return; assert((flags & (LWS_EV_START | LWS_EV_STOP)) && (flags & (LWS_EV_READ | LWS_EV_WRITE))); if (flags & LWS_EV_START) { if (flags & LWS_EV_WRITE) ev_io_start(ptpr->io_loop, &w->w_write.watcher); if (flags & LWS_EV_READ) ev_io_start(ptpr->io_loop, &w->w_read.watcher); } else { if (flags & LWS_EV_WRITE) ev_io_stop(ptpr->io_loop, &w->w_write.watcher); if (flags & LWS_EV_READ) ev_io_stop(ptpr->io_loop, &w->w_read.watcher); } if (pt->destroy_self) lws_context_destroy(pt->context); } static void elops_run_pt_ev(struct lws_context *context, int tsi) { if (pt_to_priv_ev(&context->pt[tsi])->io_loop) ev_run(pt_to_priv_ev(&context->pt[tsi])->io_loop, 0); } static int elops_destroy_context2_ev(struct lws_context *context) { struct lws_context_per_thread *pt; struct lws_pt_eventlibs_libev *ptpr; int n, m; for (n = 0; n < context->count_threads; n++) { int budget = 1000; pt = &context->pt[n]; ptpr = pt_to_priv_ev(pt); /* only for internal loops... */ if (pt->event_loop_foreign || !ptpr->io_loop) continue; if (!context->evlib_finalize_destroy_after_int_loops_stop) { ev_break(ptpr->io_loop, EVBREAK_ONE); continue; } while (budget-- && (m = ev_run(ptpr->io_loop, 0))) ; ev_loop_destroy(ptpr->io_loop); } return 0; } static int elops_init_vhost_listen_wsi_ev(struct lws *wsi) { struct lws_wsi_eventlibs_libev *w; int fd; if (!wsi) { assert(0); return 0; } w = wsi_to_priv_ev(wsi); w->w_read.context = wsi->a.context; w->w_write.context = wsi->a.context; if (wsi->role_ops->file_handle) fd = wsi->desc.filefd; else fd = wsi->desc.sockfd; ev_io_init(&w->w_read.watcher, lws_accept_cb, fd, EV_READ); //ev_io_init(&w->w_write.watcher, lws_accept_cb, fd, EV_WRITE); elops_io_ev(wsi, LWS_EV_START | LWS_EV_READ); return 0; } static void elops_destroy_wsi_ev(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; struct lws_pt_eventlibs_libev *ptpr = pt_to_priv_ev(pt); struct lws_wsi_eventlibs_libev *w = wsi_to_priv_ev(wsi); ev_io_stop(ptpr->io_loop, &w->w_read.watcher); ev_io_stop(ptpr->io_loop, &w->w_write.watcher); } static int elops_wsi_logical_close_ev(struct lws *wsi) { elops_destroy_wsi_ev(wsi); return 0; } static const struct lws_event_loop_ops event_loop_ops_ev = { /* name */ "libev", /* init_context */ elops_init_context_ev, /* destroy_context1 */ NULL, /* destroy_context2 */ elops_destroy_context2_ev, /* init_vhost_listen_wsi */ elops_init_vhost_listen_wsi_ev, /* init_pt */ elops_init_pt_ev, /* wsi_logical_close */ elops_wsi_logical_close_ev, /* check_client_connect_ok */ NULL, /* close_handle_manually */ NULL, /* accept */ elops_accept_ev, /* io */ elops_io_ev, /* run_pt */ elops_run_pt_ev, /* destroy_pt */ elops_destroy_pt_ev, /* destroy wsi */ elops_destroy_wsi_ev, /* foreign_thread */ NULL, /* flags */ 0, /* evlib_size_ctx */ 0, /* evlib_size_pt */ sizeof(struct lws_pt_eventlibs_libev), /* evlib_size_vh */ sizeof(struct lws_vh_eventlibs_libev), /* evlib_size_wsi */ sizeof(struct lws_wsi_eventlibs_libev), }; #if defined(LWS_WITH_EVLIB_PLUGINS) LWS_VISIBLE #endif const lws_plugin_evlib_t evlib_ev = { .hdr = { "libev event loop", "lws_evlib_plugin", LWS_BUILD_HASH, LWS_PLUGIN_API_MAGIC }, .ops = &event_loop_ops_ev }; libwebsockets-4.3.5/lib/event-libs/libev/private-lib-event-libs-libev.h000066400000000000000000000041631476025525100260510ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include #define LWS_EV_REFCOUNT_STATIC_HANDLE_NEW(_x, _ctx) \ { (_x)->data = _ctx; \ _ctx->count_event_loop_static_asset_handles++; } #define LWS_EV_REFCOUNT_STATIC_HANDLE_TO_CONTEXT(_x) \ ((struct lws_context *)(_x)->data))) #define LWS_EV_REFCOUNT_STATIC_HANDLE_DESTROYED(_x) \ (--(LWS_UV_REFCOUNT_STATIC_HANDLE_TO_CONTEXT(_x)-> \ count_event_loop_static_asset_handles)) struct lws_signal_watcher_libev { ev_signal watcher; struct lws_context *context; }; struct lws_pt_eventlibs_libev { struct ev_loop *io_loop; struct ev_timer hrtimer; struct ev_idle idle; struct lws_signal_watcher_libev w_sigint; struct lws_context_per_thread *pt; }; struct lws_io_watcher_libev { ev_io watcher; struct lws_context *context; }; struct lws_vh_eventlibs_libev { struct lws_io_watcher_libev w_accept; }; struct lws_wsi_eventlibs_libev { struct lws_io_watcher_libev w_read; struct lws_io_watcher_libev w_write; }; libwebsockets-4.3.5/lib/event-libs/libevent/000077500000000000000000000000001476025525100210205ustar00rootroot00000000000000libwebsockets-4.3.5/lib/event-libs/libevent/CMakeLists.txt000066400000000000000000000046231476025525100235650ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # # The strategy is to only export to PARENT_SCOPE # # - changes to LIB_LIST # - includes via include_directories # # and keep everything else private include_directories(.) set(LWS_LIBEVENT_INCLUDE_DIRS CACHE PATH "Path to the libevent include directory") set(LWS_LIBEVENT_LIBRARIES CACHE PATH "Path to the libevent library") if (NOT LIBEVENT_FOUND) find_path(LIBEVENT_INCLUDE_DIRS NAMES event2/event.h) find_library(LIBEVENT_LIBRARIES NAMES event) endif() message("libevent include dir: ${LIBEVENT_INCLUDE_DIRS}") message("libevent libraries: ${LIBEVENT_LIBRARIES}") include_directories("${LIBEVENT_INCLUDE_DIRS}") if ("${LWS_LIBEVENT_LIBRARIES}" STREQUAL "" OR "${LWS_LIBEVENT_INCLUDE_DIRS}" STREQUAL "") else() set(LIBEVENT_LIBRARIES ${LWS_LIBEVENT_LIBRARIES}) set(LIBEVENT_INCLUDE_DIRS ${LWS_LIBEVENT_INCLUDE_DIRS}) endif() if (LWS_WITH_EVLIB_PLUGINS) create_evlib_plugin(evlib_event libevent.c private-lib-event-libs-libevent.h ${LIBEVENT_LIBRARIES}) else() list(APPEND LIB_LIST ${LIBEVENT_LIBRARIES}) set(LIBEVENT_FOUND 1 PARENT_SCOPE) if (LWS_WITH_NETWORK) list(APPEND SOURCES event-libs/libevent/libevent.c) endif() endif() # # Keep explicit parent scope exports at end # exports_to_parent_scope() libwebsockets-4.3.5/lib/event-libs/libevent/libevent.c000066400000000000000000000321611476025525100227770ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "private-lib-event-libs-libevent.h" #define pt_to_priv_event(_pt) ((struct lws_pt_eventlibs_libevent *)(_pt)->evlib_pt) #define wsi_to_priv_event(_w) ((struct lws_wsi_eventlibs_libevent *)(_w)->evlib_wsi) static void lws_event_hrtimer_cb(evutil_socket_t fd, short event, void *p) { struct lws_context_per_thread *pt = (struct lws_context_per_thread *)p; struct lws_pt_eventlibs_libevent *ptpr = pt_to_priv_event(pt); struct timeval tv; lws_usec_t us; lws_pt_lock(pt, __func__); us = __lws_sul_service_ripe(pt->pt_sul_owner, LWS_COUNT_PT_SUL_OWNERS, lws_now_usecs()); if (us) { #if defined(__APPLE__) tv.tv_sec = (int)(us / LWS_US_PER_SEC); tv.tv_usec = (int)(us - (tv.tv_sec * LWS_US_PER_SEC)); #else tv.tv_sec = (long)(us / LWS_US_PER_SEC); tv.tv_usec = (long)(us - (tv.tv_sec * LWS_US_PER_SEC)); #endif evtimer_add(ptpr->hrtimer, &tv); } lws_pt_unlock(pt); } static void lws_event_idle_timer_cb(evutil_socket_t fd, short event, void *p) { struct lws_context_per_thread *pt = (struct lws_context_per_thread *)p; struct lws_pt_eventlibs_libevent *ptpr = pt_to_priv_event(pt); struct timeval tv; lws_usec_t us; if (pt->is_destroyed) return; lws_service_do_ripe_rxflow(pt); /* * is there anybody with pending stuff that needs service forcing? */ if (!lws_service_adjust_timeout(pt->context, 1, pt->tid)) { /* -1 timeout means just do forced service */ _lws_plat_service_forced_tsi(pt->context, pt->tid); /* still somebody left who wants forced service? */ if (!lws_service_adjust_timeout(pt->context, 1, pt->tid)) { /* yes... come back again later */ tv.tv_sec = 0; tv.tv_usec = 1000; evtimer_add(ptpr->idle_timer, &tv); return; } } /* account for hrtimer */ lws_pt_lock(pt, __func__); us = __lws_sul_service_ripe(pt->pt_sul_owner, LWS_COUNT_PT_SUL_OWNERS, lws_now_usecs()); if (us) { tv.tv_sec = (suseconds_t)(us / LWS_US_PER_SEC); tv.tv_usec = (suseconds_t)(us - (tv.tv_sec * LWS_US_PER_SEC)); evtimer_add(ptpr->hrtimer, &tv); } lws_pt_unlock(pt); if (pt->destroy_self) lws_context_destroy(pt->context); } static void lws_event_cb(evutil_socket_t sock_fd, short revents, void *ctx) { struct lws_signal_watcher_libevent *lws_io = (struct lws_signal_watcher_libevent *)ctx; struct lws_context *context = lws_io->context; struct lws_context_per_thread *pt; struct lws_pollfd eventfd; struct timeval tv; struct lws *wsi; if (revents & EV_TIMEOUT) return; /* !!! EV_CLOSED doesn't exist in libevent2 */ #if LIBEVENT_VERSION_NUMBER < 0x02000000 if (revents & EV_CLOSED) { event_del(lws_io->event.watcher); event_free(lws_io->event.watcher); return; } #endif eventfd.fd = sock_fd; eventfd.events = 0; eventfd.revents = 0; if (revents & EV_READ) { eventfd.events |= LWS_POLLIN; eventfd.revents |= LWS_POLLIN; } if (revents & EV_WRITE) { eventfd.events |= LWS_POLLOUT; eventfd.revents |= LWS_POLLOUT; } wsi = wsi_from_fd(context, sock_fd); if (!wsi) return; pt = &context->pt[(int)wsi->tsi]; if (pt->is_destroyed) return; lws_service_fd_tsi(context, &eventfd, wsi->tsi); if (pt->destroy_self) { lwsl_cx_notice(context, "pt destroy self coming true"); lws_context_destroy(pt->context); return; } /* set the idle timer for 1ms ahead */ tv.tv_sec = 0; tv.tv_usec = 1000; evtimer_add(pt_to_priv_event(pt)->idle_timer, &tv); } void lws_event_sigint_cb(evutil_socket_t sock_fd, short revents, void *ctx) { struct lws_context_per_thread *pt = ctx; struct event *signal = pt_to_priv_event(pt)->w_sigint.watcher; if (pt->context->eventlib_signal_cb) { pt->context->eventlib_signal_cb((void *)(lws_intptr_t)sock_fd, event_get_signal(signal)); return; } if (!pt->event_loop_foreign) event_base_loopbreak(pt_to_priv_event(pt)->io_loop); } static int elops_listen_init_event(struct lws_dll2 *d, void *user) { #if defined(LWS_WITH_SERVER) struct lws *wsi = lws_container_of(d, struct lws, listen_list); struct lws_context *context = (struct lws_context *)user; struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; struct lws_pt_eventlibs_libevent *ptpr = pt_to_priv_event(pt); struct lws_io_watcher_libevent *w_read = &(wsi_to_priv_event(wsi)->w_read); w_read->context = context; w_read->watcher = event_new(ptpr->io_loop, wsi->desc.sockfd, (EV_READ | EV_PERSIST), lws_event_cb, w_read); event_add(w_read->watcher, NULL); w_read->set = 1; #endif return 0; } static int elops_init_pt_event(struct lws_context *context, void *_loop, int tsi) { struct event_base *loop = (struct event_base *)_loop; struct lws_context_per_thread *pt = &context->pt[tsi]; struct lws_pt_eventlibs_libevent *ptpr = pt_to_priv_event(pt); lwsl_cx_info(context, "loop %p", _loop); if (!loop) loop = event_base_new(); else context->pt[tsi].event_loop_foreign = 1; if (!loop) { lwsl_cx_err(context, "creating event base failed"); return -1; } ptpr->io_loop = loop; lws_vhost_foreach_listen_wsi(context, context, elops_listen_init_event); /* static event loop objects */ ptpr->hrtimer = event_new(loop, -1, EV_PERSIST, lws_event_hrtimer_cb, pt); ptpr->idle_timer = event_new(loop, -1, 0, lws_event_idle_timer_cb, pt); { struct timeval tv; tv.tv_sec = (long)0; tv.tv_usec = (long)1000; evtimer_add(ptpr->hrtimer, &tv); } /* Register the signal watcher unless it's a foreign loop */ if (pt->event_loop_foreign) return 0; ptpr->w_sigint.watcher = evsignal_new(loop, SIGINT, lws_event_sigint_cb, pt); event_add(ptpr->w_sigint.watcher, NULL); return 0; } static int elops_init_context_event(struct lws_context *context, const struct lws_context_creation_info *info) { int n; context->eventlib_signal_cb = info->signal_cb; for (n = 0; n < context->count_threads; n++) pt_to_priv_event(&context->pt[n])->w_sigint.context = context; return 0; } static int elops_accept_event(struct lws *wsi) { struct lws_context *context = lws_get_context(wsi); struct lws_context_per_thread *pt; struct lws_pt_eventlibs_libevent *ptpr; struct lws_wsi_eventlibs_libevent *wpr = wsi_to_priv_event(wsi); evutil_socket_t fd; wpr->w_read.context = context; wpr->w_write.context = context; // Initialize the event pt = &context->pt[(int)wsi->tsi]; ptpr = pt_to_priv_event(pt); if (wsi->role_ops->file_handle) fd = (evutil_socket_t)(ev_intptr_t) wsi->desc.filefd; else fd = wsi->desc.sockfd; wpr->w_read.watcher = event_new(ptpr->io_loop, fd, (EV_READ | EV_PERSIST), lws_event_cb, &wpr->w_read); wpr->w_write.watcher = event_new(ptpr->io_loop, fd, (EV_WRITE | EV_PERSIST), lws_event_cb, &wpr->w_write); return 0; } static void elops_io_event(struct lws *wsi, unsigned int flags) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; struct lws_pt_eventlibs_libevent *ptpr = pt_to_priv_event(pt); struct lws_wsi_eventlibs_libevent *wpr = wsi_to_priv_event(wsi); if (!ptpr->io_loop || wsi->a.context->being_destroyed || pt->is_destroyed) return; assert((flags & (LWS_EV_START | LWS_EV_STOP)) && (flags & (LWS_EV_READ | LWS_EV_WRITE))); if (flags & LWS_EV_START) { if ((flags & LWS_EV_WRITE) && !wpr->w_write.set) { event_add(wpr->w_write.watcher, NULL); wpr->w_write.set = 1; } if ((flags & LWS_EV_READ) && !wpr->w_read.set) { event_add(wpr->w_read.watcher, NULL); wpr->w_read.set = 1; } } else { if ((flags & LWS_EV_WRITE) && wpr->w_write.set) { event_del(wpr->w_write.watcher); wpr->w_write.set = 0; } if ((flags & LWS_EV_READ) && wpr->w_read.set) { event_del(wpr->w_read.watcher); wpr->w_read.set = 0; } } } static void elops_run_pt_event(struct lws_context *context, int tsi) { /* Run / Dispatch the event_base loop */ if (pt_to_priv_event(&context->pt[tsi])->io_loop) event_base_dispatch( pt_to_priv_event(&context->pt[tsi])->io_loop); } static int elops_listen_destroy_event(struct lws_dll2 *d, void *user) { #if defined(LWS_WITH_SERVER) struct lws *wsi = lws_container_of(d, struct lws, listen_list); struct lws_wsi_eventlibs_libevent *w = wsi_to_priv_event(wsi); event_free(w->w_read.watcher); w->w_read.watcher = NULL; event_free(w->w_write.watcher); w->w_write.watcher = NULL; #endif return 0; } static void elops_destroy_pt_event(struct lws_context *context, int tsi) { struct lws_context_per_thread *pt = &context->pt[tsi]; struct lws_pt_eventlibs_libevent *ptpr = pt_to_priv_event(pt); if (!ptpr->io_loop) return; lws_vhost_foreach_listen_wsi(context, context, elops_listen_destroy_event); event_free(ptpr->hrtimer); event_free(ptpr->idle_timer); if (!pt->event_loop_foreign) { event_del(ptpr->w_sigint.watcher); event_free(ptpr->w_sigint.watcher); event_base_loopexit(ptpr->io_loop, NULL); // event_base_free(pt->event.io_loop); // pt->event.io_loop = NULL; lwsl_cx_notice(context, "set to exit loop"); } } static void elops_destroy_wsi_event(struct lws *wsi) { struct lws_context_per_thread *pt; struct lws_wsi_eventlibs_libevent *w; if (!wsi) return; pt = &wsi->a.context->pt[(int)wsi->tsi]; if (pt->is_destroyed) return; w = wsi_to_priv_event(wsi); if (w->w_read.watcher) { event_free(w->w_read.watcher); w->w_read.watcher = NULL; } if (w->w_write.watcher) { event_free(w->w_write.watcher); w->w_write.watcher = NULL; } } static int elops_wsi_logical_close_event(struct lws *wsi) { elops_destroy_wsi_event(wsi); return 0; } static int elops_init_vhost_listen_wsi_event(struct lws *wsi) { struct lws_context_per_thread *pt; struct lws_pt_eventlibs_libevent *ptpr; struct lws_wsi_eventlibs_libevent *w; evutil_socket_t fd; if (!wsi) { assert(0); return 0; } w = wsi_to_priv_event(wsi); w->w_read.context = wsi->a.context; w->w_write.context = wsi->a.context; pt = &wsi->a.context->pt[(int)wsi->tsi]; ptpr = pt_to_priv_event(pt); if (wsi->role_ops->file_handle) fd = (evutil_socket_t) wsi->desc.filefd; else fd = wsi->desc.sockfd; w->w_read.watcher = event_new(ptpr->io_loop, fd, (EV_READ | EV_PERSIST), lws_event_cb, &w->w_read); w->w_write.watcher = event_new(ptpr->io_loop, fd, (EV_WRITE | EV_PERSIST), lws_event_cb, &w->w_write); elops_io_event(wsi, LWS_EV_START | LWS_EV_READ); return 0; } static int elops_destroy_context2_event(struct lws_context *context) { struct lws_context_per_thread *pt; struct lws_pt_eventlibs_libevent *ptpr; int n, m; for (n = 0; n < context->count_threads; n++) { int budget = 1000; pt = &context->pt[n]; ptpr = pt_to_priv_event(pt); /* only for internal loops... */ if (pt->event_loop_foreign || !ptpr->io_loop) continue; if (!context->evlib_finalize_destroy_after_int_loops_stop) { event_base_loopexit(ptpr->io_loop, NULL); continue; } while (budget-- && (m = event_base_loop(ptpr->io_loop, EVLOOP_NONBLOCK))) ; lwsl_cx_info(context, "event_base_free"); event_base_free(ptpr->io_loop); ptpr->io_loop = NULL; } return 0; } static const struct lws_event_loop_ops event_loop_ops_event = { /* name */ "libevent", /* init_context */ elops_init_context_event, /* destroy_context1 */ NULL, /* destroy_context2 */ elops_destroy_context2_event, /* init_vhost_listen_wsi */ elops_init_vhost_listen_wsi_event, /* init_pt */ elops_init_pt_event, /* wsi_logical_close */ elops_wsi_logical_close_event, /* check_client_connect_ok */ NULL, /* close_handle_manually */ NULL, /* accept */ elops_accept_event, /* io */ elops_io_event, /* run_pt */ elops_run_pt_event, /* destroy_pt */ elops_destroy_pt_event, /* destroy wsi */ elops_destroy_wsi_event, /* foreign_thread */ NULL, /* flags */ 0, /* evlib_size_ctx */ 0, /* evlib_size_pt */ sizeof(struct lws_pt_eventlibs_libevent), /* evlib_size_vh */ 0, /* evlib_size_wsi */ sizeof(struct lws_wsi_eventlibs_libevent), }; #if defined(LWS_WITH_EVLIB_PLUGINS) LWS_VISIBLE #endif const lws_plugin_evlib_t evlib_event = { .hdr = { "libevent event loop", "lws_evlib_plugin", LWS_BUILD_HASH, LWS_PLUGIN_API_MAGIC }, .ops = &event_loop_ops_event }; libwebsockets-4.3.5/lib/event-libs/libevent/private-lib-event-libs-libevent.h000066400000000000000000000033351476025525100272670ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include struct lws_signal_watcher_libevent { struct event *watcher; struct lws_context *context; }; struct lws_pt_eventlibs_libevent { struct event_base *io_loop; struct event *hrtimer; struct event *idle_timer; struct lws_signal_watcher_libevent w_sigint; }; struct lws_io_watcher_libevent { struct event *watcher; struct lws_context *context; uint8_t actual_events; char set; }; struct lws_wsi_eventlibs_libevent { struct lws_io_watcher_libevent w_read; struct lws_io_watcher_libevent w_write; }; libwebsockets-4.3.5/lib/event-libs/libuv/000077500000000000000000000000001476025525100203315ustar00rootroot00000000000000libwebsockets-4.3.5/lib/event-libs/libuv/CMakeLists.txt000066400000000000000000000057141476025525100231000ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # # The strategy is to only export to PARENT_SCOPE # # - changes to LIB_LIST # - includes via include_directories # # and keep everything else private include_directories(.) set(LWS_LIBUV_LIBRARIES CACHE PATH "Path to the libuv library") set(LWS_LIBUV_INCLUDE_DIRS CACHE PATH "Path to the libuv include directory") if ("${LWS_LIBUV_LIBRARIES}" STREQUAL "" OR "${LWS_LIBUV_INCLUDE_DIRS}" STREQUAL "") if (NOT LIBUV_FOUND) find_path(LIBUV_INCLUDE_DIRS NAMES uv.h) find_library(LIBUV_LIBRARIES NAMES uv) endif() else() set(LIBUV_LIBRARIES ${LWS_LIBUV_LIBRARIES}) set(LIBUV_INCLUDE_DIRS ${LWS_LIBUV_INCLUDE_DIRS}) endif() message("libuv include dir: ${LIBUV_INCLUDE_DIRS}") message("libuv libraries: ${LIBUV_LIBRARIES}") include_directories("${LIBUV_INCLUDE_DIRS}") CHECK_INCLUDE_FILE(uv-version.h LWS_HAVE_UV_VERSION_H) # libuv changed the location in 1.21.0. Retain both # checks temporarily to ensure a smooth transition. if (NOT LWS_HAVE_UV_VERSION_H) CHECK_INCLUDE_FILE(uv/version.h LWS_HAVE_NEW_UV_VERSION_H) endif() if (LWS_WITH_EVLIB_PLUGINS AND LWS_WITH_LIBUV) create_evlib_plugin(evlib_uv libuv.c private-lib-event-libs-libuv.h ${LIBUV_LIBRARIES}) endif() # wanting libuv in the library is a separate question than # wanting libuv as a selectable event loop plugin # we only came here because LWS_WITH_LIBUV or LWS_WITH_LIBUV_INTERNAL if ((NOT LWS_WITH_EVLIB_PLUGINS) OR LWS_WITH_LIBUV_INTERNAL) list(APPEND LIB_LIST ${LIBUV_LIBRARIES}) if (LWS_WITH_NETWORK) list(APPEND SOURCES event-libs/libuv/libuv.c) endif() endif() # # Keep explicit parent scope exports at end # exports_to_parent_scope() set(LWS_HAVE_UV_VERSION_H ${LWS_HAVE_UV_VERSION_H} PARENT_SCOPE) set(LWS_HAVE_NEW_UV_VERSION_H ${LWS_HAVE_NEW_UV_VERSION_H} PARENT_SCOPE) libwebsockets-4.3.5/lib/event-libs/libuv/libuv.c000066400000000000000000000563161476025525100216310ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "private-lib-event-libs-libuv.h" #define pt_to_priv_uv(_pt) ((struct lws_pt_eventlibs_libuv *)(_pt)->evlib_pt) #define wsi_to_priv_uv(_w) ((struct lws_wsi_eventlibs_libuv *)(_w)->evlib_wsi) static void lws_uv_sultimer_cb(uv_timer_t *timer #if UV_VERSION_MAJOR == 0 , int status #endif ) { struct lws_pt_eventlibs_libuv *ptpr = lws_container_of(timer, struct lws_pt_eventlibs_libuv, sultimer); struct lws_context_per_thread *pt = ptpr->pt; lws_usec_t us; lws_context_lock(pt->context, __func__); lws_pt_lock(pt, __func__); us = __lws_sul_service_ripe(pt->pt_sul_owner, LWS_COUNT_PT_SUL_OWNERS, lws_now_usecs()); if (us) uv_timer_start(&pt_to_priv_uv(pt)->sultimer, lws_uv_sultimer_cb, LWS_US_TO_MS((uint64_t)us), 0); lws_pt_unlock(pt); lws_context_unlock(pt->context); } static void lws_uv_idle(uv_idle_t *handle #if UV_VERSION_MAJOR == 0 , int status #endif ) { struct lws_pt_eventlibs_libuv *ptpr = lws_container_of(handle, struct lws_pt_eventlibs_libuv, idle); struct lws_context_per_thread *pt = ptpr->pt; lws_usec_t us; lws_service_do_ripe_rxflow(pt); lws_context_lock(pt->context, __func__); lws_pt_lock(pt, __func__); /* * is there anybody with pending stuff that needs service forcing? */ if (!lws_service_adjust_timeout(pt->context, 1, pt->tid)) /* -1 timeout means just do forced service */ _lws_plat_service_forced_tsi(pt->context, pt->tid); /* account for sultimer */ us = __lws_sul_service_ripe(pt->pt_sul_owner, LWS_COUNT_PT_SUL_OWNERS, lws_now_usecs()); if (us) uv_timer_start(&pt_to_priv_uv(pt)->sultimer, lws_uv_sultimer_cb, LWS_US_TO_MS((uint64_t)us), 0); /* if there is nobody who needs service forcing, shut down idle */ if (lws_service_adjust_timeout(pt->context, 1, pt->tid)) uv_idle_stop(handle); lws_pt_unlock(pt); lws_context_unlock(pt->context); } static void lws_io_cb(uv_poll_t *watcher, int status, int revents) { struct lws *wsi = (struct lws *)((uv_handle_t *)watcher)->data; struct lws_context *context = wsi->a.context; struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; struct lws_pt_eventlibs_libuv *ptpriv = pt_to_priv_uv(pt); struct lws_pollfd eventfd; lws_context_lock(pt->context, __func__); lws_pt_lock(pt, __func__); if (pt->is_destroyed) goto bail; if (!ptpriv->thread_valid) { /* record the thread id that gave us our first event */ ptpriv->uv_thread = uv_thread_self(); ptpriv->thread_valid = 1; } #if defined(WIN32) || defined(_WIN32) eventfd.fd = watcher->socket; #else eventfd.fd = watcher->io_watcher.fd; #endif eventfd.events = 0; eventfd.revents = 0; if (status < 0) { /* * At this point status will be an UV error, like UV_EBADF, * we treat all errors as LWS_POLLHUP * * You might want to return; instead of servicing the fd in * some cases */ if (status == UV_EAGAIN) goto bail; eventfd.events |= LWS_POLLHUP; eventfd.revents |= LWS_POLLHUP; } else { if (revents & UV_READABLE) { eventfd.events |= LWS_POLLIN; eventfd.revents |= LWS_POLLIN; } if (revents & UV_WRITABLE) { eventfd.events |= LWS_POLLOUT; eventfd.revents |= LWS_POLLOUT; } } lws_pt_unlock(pt); lws_context_unlock(pt->context); lws_service_fd_tsi(context, &eventfd, wsi->tsi); if (pt->destroy_self) { lws_context_destroy(pt->context); return; } uv_idle_start(&ptpriv->idle, lws_uv_idle); return; bail: lws_pt_unlock(pt); lws_context_unlock(pt->context); } /* * This does not actually stop the event loop. The reason is we have to pass * libuv handle closures through its event loop. So this tries to close all * wsi, and set a flag; when all the wsi closures are finalized then we * actually stop the libuv event loops. */ static void lws_libuv_stop(struct lws_context *context) { if (context->requested_stop_internal_loops) { lwsl_cx_err(context, "ignoring"); return; } context->requested_stop_internal_loops = 1; lws_context_destroy(context); } static void lws_uv_signal_handler(uv_signal_t *watcher, int signum) { struct lws_context_per_thread *pt = (struct lws_context_per_thread *) watcher->data; if (pt->context->eventlib_signal_cb) { pt->context->eventlib_signal_cb((void *)watcher, signum); return; } lwsl_cx_err(pt->context, "internal signal handler caught signal %d", signum); lws_libuv_stop(pt->context); } static int lws_uv_finalize_pt(struct lws_context_per_thread *pt) { pt->event_loop_pt_unused = 1; lwsl_cx_info(pt->context, "thr %d", (int)(pt - pt->context->pt)); lws_context_lock(pt->context, __func__); if (!--pt->context->undestroyed_threads) { struct lws_vhost *vh = pt->context->vhost_list; /* * eventually, we emptied all the pts... */ lwsl_cx_debug(pt->context, "all pts down now"); /* protocols may have initialized libuv objects */ while (vh) { lws_vhost_destroy1(vh); vh = vh->vhost_next; } if (!pt->count_event_loop_static_asset_handles && pt->event_loop_foreign) { lwsl_cx_info(pt->context, "resuming context_destroy"); lws_context_unlock(pt->context); lws_context_destroy(pt->context); /* * For foreign, we're being called from the foreign * thread context the loop is associated with, we must * return to it cleanly even though we are done with it. */ return 1; } } else lwsl_cx_debug(pt->context, "still %d undestroyed", pt->context->undestroyed_threads); lws_context_unlock(pt->context); return 0; } // static void lws_uv_walk_cb(uv_handle_t *handle, void *arg) // { // if (!uv_is_closing(handle)) // lwsl_err("%s: handle %p still alive on loop\n", __func__, handle); // } static const int sigs[] = { SIGINT, SIGTERM, SIGSEGV, SIGFPE, SIGHUP }; /* * Closing Phase 2: Close callback for a static UV asset */ static void lws_uv_close_cb_sa(uv_handle_t *handle) { struct lws_context_per_thread *pt = LWS_UV_REFCOUNT_STATIC_HANDLE_TO_PT(handle); struct lws_pt_eventlibs_libuv *ptpriv = pt_to_priv_uv(pt); struct lws_context *context = pt->context; #if !defined(LWS_WITH_NO_LOGS) && defined(_DEBUG) int tsi = (int)(pt - &context->pt[0]); #endif lwsl_cx_info(context, "thr %d: sa left %d: dyn left: %d (rk %d)", tsi, pt->count_event_loop_static_asset_handles - 1, ptpriv->extant_handles, context->requested_stop_internal_loops); /* any static assets left? */ if (LWS_UV_REFCOUNT_STATIC_HANDLE_DESTROYED(handle) || ptpriv->extant_handles) return; /* * So we believe nothing of ours left on the loop. Let's sanity * check it to count what's still on the loop */ // uv_walk(pt_to_priv_uv(pt)->io_loop, lws_uv_walk_cb, NULL); /* * That's it... all wsi were down, and now every * static asset lws had a UV handle for is down. * * Stop the loop so we can get out of here. */ lwsl_cx_info(context, "thr %d: seen final static handle gone", tsi); if (!pt->event_loop_foreign) lws_context_destroy(context); lws_uv_finalize_pt(pt); lwsl_cx_info(context, "all done"); } /* * These must be called by protocols that want to use libuv objects directly... * * .... when the libuv object is created... */ void lws_libuv_static_refcount_add(uv_handle_t *h, struct lws_context *context, int tsi) { struct lws_context_per_thread *pt = &context->pt[tsi]; LWS_UV_REFCOUNT_STATIC_HANDLE_NEW(h, pt); } /* * ... and in the close callback when the object is closed. */ void lws_libuv_static_refcount_del(uv_handle_t *h) { lws_uv_close_cb_sa(h); } void lws_libuv_stop_without_kill(const struct lws_context *context, int tsi) { if (pt_to_priv_uv(&context->pt[tsi])->io_loop) uv_stop(pt_to_priv_uv(&context->pt[tsi])->io_loop); } uv_loop_t * lws_uv_getloop(struct lws_context *context, int tsi) { if (pt_to_priv_uv(&context->pt[tsi])->io_loop) return pt_to_priv_uv(&context->pt[tsi])->io_loop; return NULL; } int lws_libuv_check_watcher_active(struct lws *wsi) { uv_handle_t *h = (uv_handle_t *)wsi_to_priv_uv(wsi)->w_read.pwatcher; if (!h) return 0; return uv_is_active(h); } static int elops_init_context_uv(struct lws_context *context, const struct lws_context_creation_info *info) { int n; context->eventlib_signal_cb = info->signal_cb; for (n = 0; n < context->count_threads; n++) pt_to_priv_uv(&context->pt[n])->w_sigint.context = context; return 0; } static int elops_destroy_context1_uv(struct lws_context *context) { struct lws_context_per_thread *pt; int n, m = 0; for (n = 0; n < context->count_threads; n++) { int budget = 10000; pt = &context->pt[n]; /* only for internal loops... */ if (!pt->event_loop_foreign) { while (budget-- && (m = uv_run(pt_to_priv_uv(pt)->io_loop, UV_RUN_NOWAIT))) ; if (m) lwsl_cx_info(context, "tsi %d: unclosed", n); } } /* call destroy2 if internal loop */ return !context->pt[0].event_loop_foreign; } static int elops_destroy_context2_uv(struct lws_context *context) { struct lws_context_per_thread *pt; int n, internal = 0; for (n = 0; n < context->count_threads; n++) { pt = &context->pt[n]; /* only for internal loops... */ if (!pt->event_loop_foreign && pt_to_priv_uv(pt)->io_loop) { internal = 1; if (!context->evlib_finalize_destroy_after_int_loops_stop) uv_stop(pt_to_priv_uv(pt)->io_loop); else { #if UV_VERSION_MAJOR > 0 uv_loop_close(pt_to_priv_uv(pt)->io_loop); #endif lws_free_set_NULL(pt_to_priv_uv(pt)->io_loop); } } } return internal; } static int elops_wsi_logical_close_uv(struct lws *wsi) { if (!lws_socket_is_valid(wsi->desc.sockfd) && wsi->role_ops && strcmp(wsi->role_ops->name, "raw-file") && !wsi_to_priv_uv(wsi)->w_read.pwatcher) return 0; if (wsi->listener || wsi->event_pipe) { lwsl_wsi_debug(wsi, "%d %d stop listener / pipe poll", wsi->listener, wsi->event_pipe); if (wsi_to_priv_uv(wsi)->w_read.pwatcher) uv_poll_stop(wsi_to_priv_uv(wsi)->w_read.pwatcher); } lwsl_wsi_debug(wsi, "lws_libuv_closehandle"); /* * libuv has to do his own close handle processing asynchronously */ lws_libuv_closehandle(wsi); return 1; /* do not complete the wsi close, uv close cb will do it */ } static int elops_check_client_connect_ok_uv(struct lws *wsi) { if (lws_libuv_check_watcher_active(wsi)) { lwsl_wsi_warn(wsi, "Waiting for libuv watcher to close"); return 1; } return 0; } static void lws_libuv_closewsi_m(uv_handle_t* handle) { lws_sockfd_type sockfd = (lws_sockfd_type)(lws_intptr_t)handle->data; lwsl_debug("%s: sockfd %d\n", __func__, sockfd); compatible_close(sockfd); lws_free(handle); } static void elops_close_handle_manually_uv(struct lws *wsi) { uv_handle_t *h = (uv_handle_t *)wsi_to_priv_uv(wsi)->w_read.pwatcher; lwsl_wsi_debug(wsi, "lws_libuv_closehandle"); /* * the "manual" variant only closes the handle itself and the * related fd. handle->data is the fd. */ h->data = (void *)(lws_intptr_t)wsi->desc.sockfd; /* * We take responsibility to close / destroy these now. * Remove any trace from the wsi. */ wsi->desc.sockfd = LWS_SOCK_INVALID; wsi_to_priv_uv(wsi)->w_read.pwatcher = NULL; wsi->told_event_loop_closed = 1; uv_close(h, lws_libuv_closewsi_m); } static int elops_accept_uv(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; struct lws_pt_eventlibs_libuv *ptpriv = pt_to_priv_uv(pt); struct lws_io_watcher_libuv *w_read = &wsi_to_priv_uv(wsi)->w_read; int n; if (!ptpriv->thread_valid) { /* record the thread id that gave us our first event */ ptpriv->uv_thread = uv_thread_self(); ptpriv->thread_valid = 1; } w_read->context = wsi->a.context; w_read->pwatcher = lws_malloc(sizeof(*w_read->pwatcher), "uvh"); if (!w_read->pwatcher) return -1; if (wsi->role_ops->file_handle) n = uv_poll_init(pt_to_priv_uv(pt)->io_loop, w_read->pwatcher, (int)(lws_intptr_t)wsi->desc.filefd); else n = uv_poll_init_socket(pt_to_priv_uv(pt)->io_loop, w_read->pwatcher, wsi->desc.sockfd); if (n) { lwsl_wsi_err(wsi, "uv_poll_init failed %d, sockfd=%p", n, (void *)(lws_intptr_t)wsi->desc.sockfd); lws_free(w_read->pwatcher); w_read->pwatcher = NULL; return -1; } ((uv_handle_t *)w_read->pwatcher)->data = (void *)wsi; ptpriv->extant_handles++; lwsl_wsi_debug(wsi, "thr %d: sa left %d: dyn left: %d", (int)(pt - &pt->context->pt[0]), pt->count_event_loop_static_asset_handles, ptpriv->extant_handles); return 0; } static void elops_io_uv(struct lws *wsi, unsigned int flags) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; struct lws_io_watcher_libuv *w = &(wsi_to_priv_uv(wsi)->w_read); int current_events = w->actual_events & (UV_READABLE | UV_WRITABLE); lwsl_wsi_debug(wsi, "%d", flags); /* w->context is set after the loop is initialized */ if (!pt_to_priv_uv(pt)->io_loop || !w->context) { lwsl_wsi_info(wsi, "no io loop yet"); return; } if (!((flags & (LWS_EV_START | LWS_EV_STOP)) && (flags & (LWS_EV_READ | LWS_EV_WRITE)))) { lwsl_wsi_err(wsi, "assert: flags %d", flags); assert(0); } if (!w->pwatcher || wsi->told_event_loop_closed) { lwsl_wsi_info(wsi, "no watcher"); return; } if (flags & LWS_EV_START) { if (flags & LWS_EV_WRITE) current_events |= UV_WRITABLE; if (flags & LWS_EV_READ) current_events |= UV_READABLE; uv_poll_start(w->pwatcher, current_events, lws_io_cb); } else { if (flags & LWS_EV_WRITE) current_events &= ~UV_WRITABLE; if (flags & LWS_EV_READ) current_events &= ~UV_READABLE; if (!(current_events & (UV_READABLE | UV_WRITABLE))) uv_poll_stop(w->pwatcher); else uv_poll_start(w->pwatcher, current_events, lws_io_cb); } w->actual_events = (uint8_t)current_events; } static int elops_init_vhost_listen_wsi_uv(struct lws *wsi) { struct lws_context_per_thread *pt; struct lws_pt_eventlibs_libuv *ptpriv; struct lws_io_watcher_libuv *w_read; int n; if (!wsi) return 0; w_read = &wsi_to_priv_uv(wsi)->w_read; if (w_read->context) return 0; pt = &wsi->a.context->pt[(int)wsi->tsi]; ptpriv = pt_to_priv_uv(pt); if (!ptpriv->io_loop) return 0; w_read->context = wsi->a.context; w_read->pwatcher = lws_malloc(sizeof(*w_read->pwatcher), "uvh"); if (!w_read->pwatcher) return -1; n = uv_poll_init_socket(pt_to_priv_uv(pt)->io_loop, w_read->pwatcher, wsi->desc.sockfd); if (n) { lwsl_wsi_err(wsi, "uv_poll_init failed %d, sockfd=%p", n, (void *)(lws_intptr_t)wsi->desc.sockfd); return -1; } ptpriv->extant_handles++; lwsl_wsi_debug(wsi, "thr %d: sa left %d: dyn left: %d", (int)(pt - &pt->context->pt[0]), pt->count_event_loop_static_asset_handles, ptpriv->extant_handles); ((uv_handle_t *)w_read->pwatcher)->data = (void *)wsi; elops_io_uv(wsi, LWS_EV_START | LWS_EV_READ); return 0; } static void elops_run_pt_uv(struct lws_context *context, int tsi) { if (pt_to_priv_uv(&context->pt[tsi])->io_loop) uv_run(pt_to_priv_uv(&context->pt[tsi])->io_loop, 0); } static void elops_destroy_pt_uv(struct lws_context *context, int tsi) { struct lws_context_per_thread *pt = &context->pt[tsi]; struct lws_pt_eventlibs_libuv *ptpriv = pt_to_priv_uv(pt); int m, ns; if (!lws_check_opt(context->options, LWS_SERVER_OPTION_LIBUV)) return; if (!ptpriv->io_loop) return; if (pt->event_loop_destroy_processing_done) { if (!pt->event_loop_foreign) { lwsl_warn("%s: stopping event loop\n", __func__); uv_stop(pt_to_priv_uv(pt)->io_loop); } return; } pt->event_loop_destroy_processing_done = 1; // lwsl_cx_debug(context, "%d", tsi); if (!pt->event_loop_foreign) { uv_signal_stop(&pt_to_priv_uv(pt)->w_sigint.watcher); ns = LWS_ARRAY_SIZE(sigs); if (lws_check_opt(context->options, LWS_SERVER_OPTION_UV_NO_SIGSEGV_SIGFPE_SPIN)) ns = 2; for (m = 0; m < ns; m++) { uv_signal_stop(&pt_to_priv_uv(pt)->signals[m]); uv_close((uv_handle_t *)&pt_to_priv_uv(pt)->signals[m], lws_uv_close_cb_sa); } } else lwsl_cx_debug(context, "not closing pt signals"); uv_timer_stop(&pt_to_priv_uv(pt)->sultimer); uv_close((uv_handle_t *)&pt_to_priv_uv(pt)->sultimer, lws_uv_close_cb_sa); uv_idle_stop(&pt_to_priv_uv(pt)->idle); uv_close((uv_handle_t *)&pt_to_priv_uv(pt)->idle, lws_uv_close_cb_sa); } static int elops_listen_init_uv(struct lws_dll2 *d, void *user) { #if defined(LWS_WITH_SERVER) struct lws *wsi = lws_container_of(d, struct lws, listen_list); if (elops_init_vhost_listen_wsi_uv(wsi) == -1) return -1; #endif return 0; } /* * This needs to be called after vhosts have been defined. * * If later, after server start, another vhost is added, this must be * called again to bind the vhost */ int elops_init_pt_uv(struct lws_context *context, void *_loop, int tsi) { struct lws_context_per_thread *pt = &context->pt[tsi]; struct lws_pt_eventlibs_libuv *ptpriv = pt_to_priv_uv(pt); int status = 0, n, ns, first = 1; uv_loop_t *loop = (uv_loop_t *)_loop; ptpriv->pt = pt; if (!ptpriv->io_loop) { if (!loop) { loop = lws_malloc(sizeof(*loop), "libuv loop"); if (!loop) { lwsl_cx_err(context, "OOM"); return -1; } #if UV_VERSION_MAJOR > 0 uv_loop_init(loop); #else lwsl_cx_err(context, "This libuv is too old to work..."); return 1; #endif pt->event_loop_foreign = 0; } else { lwsl_cx_notice(context, " Using foreign event loop..."); pt->event_loop_foreign = 1; } ptpriv->io_loop = loop; uv_idle_init(loop, &ptpriv->idle); LWS_UV_REFCOUNT_STATIC_HANDLE_NEW(&ptpriv->idle, pt); uv_idle_start(&ptpriv->idle, lws_uv_idle); ns = LWS_ARRAY_SIZE(sigs); if (lws_check_opt(context->options, LWS_SERVER_OPTION_UV_NO_SIGSEGV_SIGFPE_SPIN)) ns = 2; if (!pt->event_loop_foreign) { assert(ns <= (int)LWS_ARRAY_SIZE(ptpriv->signals)); for (n = 0; n < ns; n++) { uv_signal_init(loop, &ptpriv->signals[n]); LWS_UV_REFCOUNT_STATIC_HANDLE_NEW( &ptpriv->signals[n], pt); ptpriv->signals[n].data = pt; uv_signal_start(&ptpriv->signals[n], lws_uv_signal_handler, sigs[n]); } } } else first = 0; /* * Initialize the accept wsi read watcher with all the listening sockets * and register a callback for read operations * * We have to do it here because the uv loop(s) are not * initialized until after context creation. */ lws_vhost_foreach_listen_wsi(context, context, elops_listen_init_uv); if (!first) return status; uv_timer_init(ptpriv->io_loop, &ptpriv->sultimer); LWS_UV_REFCOUNT_STATIC_HANDLE_NEW(&ptpriv->sultimer, pt); return status; } static void lws_libuv_closewsi(uv_handle_t* handle) { struct lws *wsi = (struct lws *)handle->data; struct lws_context *context = lws_get_context(wsi); struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; struct lws_pt_eventlibs_libuv *ptpriv = pt_to_priv_uv(pt); #if defined(LWS_WITH_SERVER) int lspd = 0; #endif // lwsl_wsi_notice(wsi, "in"); lws_context_lock(context, __func__); /* * We get called back here for every wsi that closes */ #if defined(LWS_WITH_SERVER) if (wsi->role_ops && !strcmp(wsi->role_ops->name, "listen") && wsi->a.context->deprecated) { lspd = 1; context->deprecation_pending_listen_close_count--; if (!context->deprecation_pending_listen_close_count) lspd = 2; } #endif lws_pt_lock(pt, __func__); lwsl_wsi_info(wsi, "thr %d: sa left %d: dyn left: %d (rk %d)", (int)(pt - &pt->context->pt[0]), pt->count_event_loop_static_asset_handles, ptpriv->extant_handles - 1, context->requested_stop_internal_loops); __lws_close_free_wsi_final(wsi); assert(ptpriv->extant_handles); ptpriv->extant_handles--; lws_pt_unlock(pt); /* it's our job to close the handle finally */ lws_free(handle); #if defined(LWS_WITH_SERVER) if (lspd == 2 && context->deprecation_cb) { lwsl_cx_notice(context, "calling deprecation callback"); context->deprecation_cb(); } #endif /* * eventually, we closed all the wsi... */ if (context->requested_stop_internal_loops && !ptpriv->extant_handles && !pt->count_event_loop_static_asset_handles) { /* * we closed everything on this pt */ lws_context_unlock(context); lws_uv_finalize_pt(pt); return; } lws_context_unlock(context); } void lws_libuv_closehandle(struct lws *wsi) { uv_handle_t* handle; struct lws_io_watcher_libuv *w_read = &wsi_to_priv_uv(wsi)->w_read; if (!w_read->pwatcher) return; if (wsi->told_event_loop_closed) return; // lwsl_wsi_debug(wsi, "in"); wsi->told_event_loop_closed = 1; /* * The normal close path attaches the related wsi as the * handle->data. */ handle = (uv_handle_t *)w_read->pwatcher; /* ensure we can only do this once */ w_read->pwatcher = NULL; uv_close(handle, lws_libuv_closewsi); } static int elops_foreign_thread_uv(struct lws_context *cx, int tsi) { struct lws_context_per_thread *pt = &cx->pt[tsi]; struct lws_pt_eventlibs_libuv *ptpriv = pt_to_priv_uv(pt); uv_thread_t th = uv_thread_self(); if (!ptpriv->thread_valid) /* * We can't judge it until we get the first event from the loop */ return 0; /* * This is the same thread that gave us the first event on this loop? * Return 0 if so. */ return !uv_thread_equal(&th, &ptpriv->uv_thread); } static const struct lws_event_loop_ops event_loop_ops_uv = { /* name */ "libuv", /* init_context */ elops_init_context_uv, /* destroy_context1 */ elops_destroy_context1_uv, /* destroy_context2 */ elops_destroy_context2_uv, /* init_vhost_listen_wsi */ elops_init_vhost_listen_wsi_uv, /* init_pt */ elops_init_pt_uv, /* wsi_logical_close */ elops_wsi_logical_close_uv, /* check_client_connect_ok */ elops_check_client_connect_ok_uv, /* close_handle_manually */ elops_close_handle_manually_uv, /* accept */ elops_accept_uv, /* io */ elops_io_uv, /* run_pt */ elops_run_pt_uv, /* destroy_pt */ elops_destroy_pt_uv, /* destroy wsi */ NULL, /* foreign_thread */ elops_foreign_thread_uv, /* flags */ 0, /* evlib_size_ctx */ sizeof(struct lws_context_eventlibs_libuv), /* evlib_size_pt */ sizeof(struct lws_pt_eventlibs_libuv), /* evlib_size_vh */ 0, /* evlib_size_wsi */ sizeof(struct lws_io_watcher_libuv), }; #if defined(LWS_WITH_EVLIB_PLUGINS) LWS_VISIBLE #endif const lws_plugin_evlib_t evlib_uv = { .hdr = { "libuv event loop", "lws_evlib_plugin", LWS_BUILD_HASH, LWS_PLUGIN_API_MAGIC }, .ops = &event_loop_ops_uv }; libwebsockets-4.3.5/lib/event-libs/libuv/private-lib-event-libs-libuv.h000066400000000000000000000055531476025525100261150ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include /* * libuv's async destroy cb means that asking to close something doesn't mean * you can destroy it or parent things until after the close completes. * * So we must reference-count creation and close completions with libuv. * * All "static" (per-pt or per-context) uv handles must * * - have their .data set to point to the context * * - contribute to context->uv_count_static_asset_handles * counting */ #define LWS_UV_REFCOUNT_STATIC_HANDLE_NEW(_x, _pt) \ { uv_handle_t *_uht = (uv_handle_t *)(_x); _uht->data = _pt; \ _pt->count_event_loop_static_asset_handles++; } #define LWS_UV_REFCOUNT_STATIC_HANDLE_TO_PT(_x) \ ((struct lws_context_per_thread *)((uv_handle_t *)((_x)->data))) #define LWS_UV_REFCOUNT_STATIC_HANDLE_DESTROYED(_x) \ (--(LWS_UV_REFCOUNT_STATIC_HANDLE_TO_PT(_x)-> \ count_event_loop_static_asset_handles)) struct lws_signal_watcher_libuv { uv_signal_t watcher; struct lws_context *context; }; struct lws_pt_eventlibs_libuv { uv_loop_t *io_loop; struct lws_context_per_thread *pt; uv_signal_t signals[8]; uv_timer_t sultimer; uv_idle_t idle; uv_thread_t uv_thread; struct lws_signal_watcher_libuv w_sigint; int extant_handles; char thread_valid; }; struct lws_context_eventlibs_libuv { uv_loop_t loop; }; struct lws_io_watcher_libuv { uv_poll_t *pwatcher; struct lws_context *context; uint8_t actual_events; }; struct lws_wsi_eventlibs_libuv { struct lws_io_watcher_libuv w_read; }; uv_loop_t * lws_uv_getloop(struct lws_context *context, int tsi); int lws_uv_plugins_init(struct lws_context *context, const char * const *d); int lws_uv_plugins_destroy(struct lws_context *context); libwebsockets-4.3.5/lib/event-libs/poll/000077500000000000000000000000001476025525100201565ustar00rootroot00000000000000libwebsockets-4.3.5/lib/event-libs/poll/CMakeLists.txt000066400000000000000000000027751476025525100227310ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # # The strategy is to only export to PARENT_SCOPE # # - changes to LIB_LIST # - includes via include_directories # # and keep everything else private include_directories(../poll) if (LWS_WITH_NETWORK) list(APPEND SOURCES event-libs/poll/poll.c) endif() # # Keep explicit parent scope exports at end # exports_to_parent_scope() libwebsockets-4.3.5/lib/event-libs/poll/poll.c000066400000000000000000000040671476025525100212770ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE */ #include #include "private-lib-event-libs-poll.h" static int elops_foreign_thread_poll(struct lws_context *cx, int tsi) { struct lws_context_per_thread *pt = &cx->pt[tsi]; volatile struct lws_context_per_thread *vpt = (volatile struct lws_context_per_thread *)pt; /* * To avoid mandating a specific threading library, we can check * probabilistically by seeing if the lws default wait is still asleep * at the time we are checking, if it is then we cannot be being called * by the event loop loop thread. */ return vpt->inside_poll; } struct lws_event_loop_ops event_loop_ops_poll = { .name = "poll", .foreign_thread = elops_foreign_thread_poll, .flags = LELOF_ISPOLL, }; const lws_plugin_evlib_t evlib_poll = { .hdr = { "poll", "lws_evlib_plugin", "n/a", LWS_PLUGIN_API_MAGIC }, .ops = &event_loop_ops_poll }; libwebsockets-4.3.5/lib/event-libs/poll/private-lib-event-libs-poll.h000066400000000000000000000023751476025525100255660ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ extern struct lws_event_loop_ops event_loop_ops_poll; libwebsockets-4.3.5/lib/event-libs/private-lib-event-libs.h000066400000000000000000000023711476025525100236500ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * This is included from private-lib-core.h */ libwebsockets-4.3.5/lib/event-libs/sdevent/000077500000000000000000000000001476025525100206605ustar00rootroot00000000000000libwebsockets-4.3.5/lib/event-libs/sdevent/CMakeLists.txt000066400000000000000000000021531476025525100234210ustar00rootroot00000000000000# The strategy is to only export to PARENT_SCOPE # # - changes to LIB_LIST # - includes via include_directories # # and keep everything else private include_directories(.) # configure or find systemd library set(LIB_SYSTEMD_LIBRARIES CACHE PATH "Path to the libsystemd library") if ("${LWS_SYSTEMD_LIBRARIES}" STREQUAL "") if (NOT LIB_SYSTEMD_FOUND) find_path(LIBSYSTEMD_INCLUDE_DIRS NAMES systemd/sd-event.h) find_library(LIBSYSTEMD_LIBRARIES NAMES systemd) endif() else() set(LIBSYSTEMD_LIBRARIES ${LWS_SYSTEMD_LIBRARIES}) set(LIBSYSTEMD_INCLUDE_DIRS ${LWS_LIBSYSTEMD_INCLUDE_DIRS}) endif() message("libsystemd include dir: ${LIBSYSTEMD_INCLUDE_DIRS}") message("libsystemd libraries: ${LIBSYSTEMD_LIBRARIES}") if (LWS_WITH_EVLIB_PLUGINS) create_evlib_plugin( evlib_sd sdevent.c private-lib-event-libs-sdevent.h ${LIBSYSTEMD_LIBRARIES} ) else() list(APPEND LIB_LIST ${LIBSYSTEMD_LIBRARIES}) list(APPEND SOURCES event-libs/sdevent/sdevent.c) endif() # # Keep explicit parent scope exports at end # exports_to_parent_scope() libwebsockets-4.3.5/lib/event-libs/sdevent/private-lib-event-libs-sdevent.h000066400000000000000000000001361476025525100267630ustar00rootroot00000000000000#include extern const struct lws_event_loop_ops event_loop_ops_sdevent; libwebsockets-4.3.5/lib/event-libs/sdevent/sdevent.c000066400000000000000000000241241476025525100224770ustar00rootroot00000000000000#include #include #include "private-lib-event-libs-sdevent.h" #define pt_to_priv_sd(_pt) ((struct lws_pt_eventlibs_sdevent *)(_pt)->evlib_pt) #define wsi_to_priv_sd(_w) ((struct lws_wsi_watcher_sdevent *)(_w)->evlib_wsi) struct lws_pt_eventlibs_sdevent { struct lws_context_per_thread *pt; struct sd_event *io_loop; struct sd_event_source *sultimer; struct sd_event_source *idletimer; }; struct lws_wsi_watcher_sdevent { struct sd_event_source *source; uint32_t events; }; static int sultimer_handler(sd_event_source *s, uint64_t usec, void *userdata) { struct lws_context_per_thread *pt = (struct lws_context_per_thread *)userdata; lws_usec_t us; lws_context_lock(pt->context, __func__); lws_pt_lock(pt, __func__); us = __lws_sul_service_ripe(pt->pt_sul_owner, LWS_COUNT_PT_SUL_OWNERS, lws_now_usecs()); if (us) { uint64_t at; sd_event_now(sd_event_source_get_event(s), CLOCK_MONOTONIC, &at); at += (uint64_t)us; sd_event_source_set_time(pt_to_priv_sd(pt)->sultimer, at); sd_event_source_set_enabled(pt_to_priv_sd(pt)->sultimer, SD_EVENT_ONESHOT); } lws_pt_unlock(pt); lws_context_unlock(pt->context); return 0; } static int idle_handler(sd_event_source *s, uint64_t usec, void *userdata) { struct lws_context_per_thread *pt = (struct lws_context_per_thread *)userdata; lws_usec_t us; lws_service_do_ripe_rxflow(pt); lws_context_lock(pt->context, __func__); lws_pt_lock(pt, __func__); /* * is there anybody with pending stuff that needs service forcing? */ if (!lws_service_adjust_timeout(pt->context, 1, pt->tid)) /* -1 timeout means just do forced service */ _lws_plat_service_forced_tsi(pt->context, pt->tid); /* account for sultimer */ us = __lws_sul_service_ripe(pt->pt_sul_owner, LWS_COUNT_PT_SUL_OWNERS, lws_now_usecs()); if (us) { uint64_t at; sd_event_now(sd_event_source_get_event(s), CLOCK_MONOTONIC, &at); at += (uint64_t)us; sd_event_source_set_time(pt_to_priv_sd(pt)->sultimer, at); sd_event_source_set_enabled(pt_to_priv_sd(pt)->sultimer, SD_EVENT_ONESHOT); } sd_event_source_set_enabled(pt_to_priv_sd(pt)->idletimer, SD_EVENT_OFF); lws_pt_unlock(pt); lws_context_unlock(pt->context); return 0; } static int sock_accept_handler(sd_event_source *s, int fd, uint32_t revents, void *userdata) { struct lws *wsi = (struct lws *)userdata; struct lws_context *context = wsi->a.context; struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; struct sd_event_source *idletimer, *watcher; struct lws_pollfd eventfd; lws_context_lock(pt->context, __func__); lws_pt_lock(pt, __func__); if (pt->is_destroyed) goto bail; eventfd.fd = fd; eventfd.events = 0; eventfd.revents = 0; if (revents & EPOLLIN) { eventfd.events |= LWS_POLLIN; eventfd.revents |= LWS_POLLIN; } if (revents & EPOLLOUT) { eventfd.events |= LWS_POLLOUT; eventfd.revents |= LWS_POLLOUT; } lws_pt_unlock(pt); lws_context_unlock(pt->context); lws_service_fd_tsi(context, &eventfd, wsi->tsi); if (pt->destroy_self) { lws_context_destroy(pt->context); return -1; } /* fire idle handler */ idletimer = pt_to_priv_sd(pt)->idletimer; if (idletimer) { sd_event_source_set_time(idletimer, (uint64_t) 0); sd_event_source_set_enabled(idletimer, SD_EVENT_ON); } /* * allow further events * * Note: * do not move the assignment up, lws_service_fd_tsi may invalidate it! */ watcher = wsi_to_priv_sd(wsi)->source; if (watcher) sd_event_source_set_enabled(watcher, SD_EVENT_ONESHOT); return 0; bail: lws_pt_unlock(pt); lws_context_unlock(pt->context); return -1; } static void io_sd(struct lws *wsi, unsigned int flags) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; /* * Only manipulate if there is an event source, and if * the pt is still alive */ if (!pt_to_priv_sd(pt)->io_loop || !wsi_to_priv_sd(wsi)->source || pt->is_destroyed) return; // assert that the requested flags do not contain anything unexpected if (!((flags & (LWS_EV_START | LWS_EV_STOP)) && (flags & (LWS_EV_READ | LWS_EV_WRITE)))) { lwsl_wsi_err(wsi, "assert: flags %d", flags); assert(0); } // we are overdoing a bit here, so it resembles the structure in libuv.c if (flags & LWS_EV_START) { if (flags & LWS_EV_WRITE) wsi_to_priv_sd(wsi)->events |= EPOLLOUT; if (flags & LWS_EV_READ) wsi_to_priv_sd(wsi)->events |= EPOLLIN; sd_event_source_set_io_events(wsi_to_priv_sd(wsi)->source, wsi_to_priv_sd(wsi)->events); sd_event_source_set_enabled(wsi_to_priv_sd(wsi)->source, SD_EVENT_ONESHOT); } else { if (flags & LWS_EV_WRITE) wsi_to_priv_sd(wsi)->events = wsi_to_priv_sd(wsi)->events & (uint32_t)(~EPOLLOUT); if (flags & LWS_EV_READ) wsi_to_priv_sd(wsi)->events = wsi_to_priv_sd(wsi)->events & (uint32_t)(~EPOLLIN); sd_event_source_set_io_events(wsi_to_priv_sd(wsi)->source, wsi_to_priv_sd(wsi)->events); if (!(wsi_to_priv_sd(wsi)->events & (EPOLLIN | EPOLLOUT))) sd_event_source_set_enabled(wsi_to_priv_sd(wsi)->source, SD_EVENT_ONESHOT); else sd_event_source_set_enabled(wsi_to_priv_sd(wsi)->source, SD_EVENT_OFF); } } static int init_vhost_listen_wsi_sd(struct lws *wsi) { struct lws_context_per_thread *pt; if (!wsi) return 0; pt = &wsi->a.context->pt[(int)wsi->tsi]; sd_event_add_io(pt_to_priv_sd(pt)->io_loop, &wsi_to_priv_sd(wsi)->source, wsi->desc.sockfd, wsi_to_priv_sd(wsi)->events, sock_accept_handler, wsi); io_sd(wsi, LWS_EV_START | LWS_EV_READ); return 0; } static int elops_listen_init_sdevent(struct lws_dll2 *d, void *user) { #if defined(LWS_WITH_SERVER) struct lws *wsi = lws_container_of(d, struct lws, listen_list); if (init_vhost_listen_wsi_sd(wsi) == -1) return -1; #endif return 0; } static int init_pt_sd(struct lws_context *context, void *_loop, int tsi) { struct lws_context_per_thread *pt = &context->pt[tsi]; struct lws_pt_eventlibs_sdevent *ptpriv = pt_to_priv_sd(pt); struct sd_event *loop = (struct sd_event *)_loop; int first = 1; /* first to create and initialize the loop */ ptpriv->pt = pt; /* make sure we have an event loop */ if (!ptpriv->io_loop) { if (!loop) { if (sd_event_default(&loop) < 0) { lwsl_cx_err(context, "sd_event_default failed"); return -1; } pt->event_loop_foreign = 0; } else { sd_event_ref(loop); pt->event_loop_foreign = 1; } ptpriv->io_loop = loop; } else /* * If the loop was initialized before, we do not need to * do full initialization */ first = 0; lws_vhost_foreach_listen_wsi(context, NULL, elops_listen_init_sdevent); if (first) { if (0 > sd_event_add_time(loop, &ptpriv->sultimer, CLOCK_MONOTONIC, UINT64_MAX, 0, sultimer_handler, (void*) pt )) return -1; if (0 > sd_event_add_time(loop, &ptpriv->idletimer, CLOCK_MONOTONIC, 0, 0, idle_handler, (void *)pt)) return -1; sd_event_source_set_enabled(ptpriv->idletimer, SD_EVENT_ON); if (0 > sd_event_source_set_priority(ptpriv->idletimer, SD_EVENT_PRIORITY_IDLE)) return -1; } return 0; } static void wsi_destroy_sd(struct lws *wsi) { if (!wsi) return; io_sd(wsi, LWS_EV_STOP | (LWS_EV_READ | LWS_EV_WRITE)); if (wsi_to_priv_sd(wsi)->source) { sd_event_source_set_enabled(wsi_to_priv_sd(wsi)->source, SD_EVENT_OFF); sd_event_source_unref(wsi_to_priv_sd(wsi)->source); wsi_to_priv_sd(wsi)->source = NULL; } } static int wsi_logical_close_sd(struct lws *wsi) { wsi_destroy_sd(wsi); return 0; } static int sock_accept_sd(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; if (wsi->role_ops->file_handle) sd_event_add_io(pt_to_priv_sd(pt)->io_loop, &wsi_to_priv_sd(wsi)->source, wsi->desc.filefd, wsi_to_priv_sd(wsi)->events, sock_accept_handler, wsi); else sd_event_add_io(pt_to_priv_sd(pt)->io_loop, &wsi_to_priv_sd(wsi)->source, wsi->desc.sockfd, wsi_to_priv_sd(wsi)->events, sock_accept_handler, wsi); return 0; } static void run_pt_sd(struct lws_context *context, int tsi) { struct lws_context_per_thread *pt = &context->pt[tsi]; struct lws_pt_eventlibs_sdevent *ptpriv = pt_to_priv_sd(pt); if (ptpriv->io_loop) sd_event_run(ptpriv->io_loop, (uint64_t) -1); } static int elops_listen_destroy_sdevent(struct lws_dll2 *d, void *user) { #if defined(LWS_WITH_SERVER) struct lws *wsi = lws_container_of(d, struct lws, listen_list); wsi_logical_close_sd(wsi); #endif return 0; } static void destroy_pt_sd(struct lws_context *context, int tsi) { struct lws_context_per_thread *pt = &context->pt[tsi]; struct lws_pt_eventlibs_sdevent *ptpriv = pt_to_priv_sd(pt); lws_vhost_foreach_listen_wsi(context, NULL, elops_listen_destroy_sdevent); if (ptpriv->sultimer) { sd_event_source_set_enabled(ptpriv->sultimer, SD_EVENT_OFF); sd_event_source_unref(ptpriv->sultimer); ptpriv->sultimer = NULL; } if (ptpriv->idletimer) { sd_event_source_set_enabled(ptpriv->idletimer, SD_EVENT_OFF); sd_event_source_unref(ptpriv->idletimer); ptpriv->idletimer = NULL; } if (ptpriv->io_loop) { sd_event_unref(ptpriv->io_loop); ptpriv->io_loop = NULL; } } const struct lws_event_loop_ops event_loop_ops_sdevent = { .name = "sdevent", .init_context = NULL, .destroy_context1 = NULL, .destroy_context2 = NULL, .init_vhost_listen_wsi = init_vhost_listen_wsi_sd, .init_pt = init_pt_sd, .wsi_logical_close = wsi_logical_close_sd, .check_client_connect_ok = NULL, .close_handle_manually = NULL, .sock_accept = sock_accept_sd, .io = io_sd, .run_pt = run_pt_sd, .destroy_pt = destroy_pt_sd, .destroy_wsi = wsi_destroy_sd, .flags = 0, .evlib_size_ctx = 0, .evlib_size_pt = sizeof(struct lws_pt_eventlibs_sdevent), .evlib_size_vh = 0, .evlib_size_wsi = sizeof(struct lws_wsi_watcher_sdevent), }; #if defined(LWS_WITH_EVLIB_PLUGINS) LWS_VISIBLE #endif const lws_plugin_evlib_t evlib_sd = { .hdr = { "systemd event loop", "lws_evlib_plugin", LWS_BUILD_HASH, LWS_PLUGIN_API_MAGIC }, .ops = &event_loop_ops_sdevent }; libwebsockets-4.3.5/lib/event-libs/uloop/000077500000000000000000000000001476025525100203465ustar00rootroot00000000000000libwebsockets-4.3.5/lib/event-libs/uloop/CMakeLists.txt000066400000000000000000000045321476025525100231120ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2021 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # # The strategy is to only export to PARENT_SCOPE # # - changes to LIB_LIST # - includes via include_directories # # and keep everything else private include_directories(.) set(LWS_ULOOP_INCLUDE_DIRS CACHE PATH "Path to the libubox / uloop.h include directory") set(LWS_ULOOP_LIBRARIES CACHE PATH "Path to the libubox library") if (NOT ULOOP_FOUND) find_path(ULOOP_INCLUDE_DIRS NAMES libubox/uloop.h) find_library(ULOOP_LIBRARIES NAMES ubox) endif() message("libubox include dir: ${ULOOP_INCLUDE_DIRS}") message("libubox libraries: ${ULOOP_LIBRARIES}") include_directories("${ULOOP_INCLUDE_DIRS}") if ("${LWS_ULOOP_LIBRARIES}" STREQUAL "" OR "${LWS_ULOOP_INCLUDE_DIRS}" STREQUAL "") else() set(ULOOP_LIBRARIES ${LWS_ULOOP_LIBRARIES}) set(ULOOP_INCLUDE_DIRS ${LWS_ULOOP_INCLUDE_DIRS}) endif() if (LWS_WITH_EVLIB_PLUGINS) create_evlib_plugin(evlib_uloop uloop.c private-lib-event-libs-uloop.h ${ULOOP_LIBRARIES}) else() list(APPEND LIB_LIST ${ULOOP_LIBRARIES}) set(ULOOP_FOUND 1 PARENT_SCOPE) if (LWS_WITH_NETWORK) list(APPEND SOURCES event-libs/uloop/uloop.c) endif() endif() # # Keep explicit parent scope exports at end # exports_to_parent_scope() libwebsockets-4.3.5/lib/event-libs/uloop/private-lib-event-libs-uloop.h000066400000000000000000000027421476025525100261440ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include struct lws_pt_eventlibs_uloop { struct lws_context_per_thread *pt; struct uloop_timeout hrtimer; struct uloop_timeout idle_timer; }; struct lws_wsi_eventlibs_uloop { struct lws *wsi; struct uloop_fd fd; unsigned int actual_events; }; libwebsockets-4.3.5/lib/event-libs/uloop/uloop.c000066400000000000000000000202171476025525100216520ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "private-lib-event-libs-uloop.h" #define pt_to_priv_uloop(_pt) ((struct lws_pt_eventlibs_uloop *)(_pt)->evlib_pt) #define wsi_to_priv_uloop(_w) ((struct lws_wsi_eventlibs_uloop *)(_w)->evlib_wsi) static void lws_uloop_hrtimer_cb(struct uloop_timeout *ti) { struct lws_pt_eventlibs_uloop *upt = lws_container_of(ti, struct lws_pt_eventlibs_uloop, hrtimer); struct lws_context_per_thread *pt = upt->pt; lws_usec_t us; lws_pt_lock(pt, __func__); us = __lws_sul_service_ripe(pt->pt_sul_owner, LWS_COUNT_PT_SUL_OWNERS, lws_now_usecs()); if (us) uloop_timeout_set(ti, us < 1000 ? 1 : (int)(us / 1000)); lws_pt_unlock(pt); } static void lws_uloop_idle_timer_cb(struct uloop_timeout *ti) { struct lws_pt_eventlibs_uloop *upt = lws_container_of(ti, struct lws_pt_eventlibs_uloop, idle_timer); struct lws_context_per_thread *pt = upt->pt; lws_usec_t us; if (pt->is_destroyed) return; lws_service_do_ripe_rxflow(pt); /* * is there anybody with pending stuff that needs service forcing? */ if (!lws_service_adjust_timeout(pt->context, 1, pt->tid)) { /* -1 timeout means just do forced service */ _lws_plat_service_forced_tsi(pt->context, pt->tid); /* still somebody left who wants forced service? */ if (!lws_service_adjust_timeout(pt->context, 1, pt->tid)) { /* yes... come back again later */ uloop_timeout_set(ti, 1 /* 1ms */); return; } } /* account for hrtimer */ lws_pt_lock(pt, __func__); us = __lws_sul_service_ripe(pt->pt_sul_owner, LWS_COUNT_PT_SUL_OWNERS, lws_now_usecs()); if (us) { uloop_timeout_cancel(&upt->hrtimer); uloop_timeout_set(&upt->hrtimer, us < 1000 ? 1 : (int)(us / 1000)); } lws_pt_unlock(pt); if (pt->destroy_self) lws_context_destroy(pt->context); } static void lws_uloop_cb(struct uloop_fd *ufd, unsigned int revents) { struct lws_wsi_eventlibs_uloop *wu = lws_container_of(ufd, struct lws_wsi_eventlibs_uloop, fd); struct lws_context *context = wu->wsi->a.context; struct lws_context_per_thread *pt; struct lws_pollfd eventfd; eventfd.fd = wu->wsi->desc.sockfd; eventfd.events = 0; eventfd.revents = 0; if (revents & ULOOP_READ) { eventfd.events = LWS_POLLIN; eventfd.revents = LWS_POLLIN; } if (revents & ULOOP_WRITE) { eventfd.events |= LWS_POLLOUT; eventfd.revents |= LWS_POLLOUT; } pt = &context->pt[(int)wu->wsi->tsi]; if (pt->is_destroyed) return; lws_service_fd_tsi(context, &eventfd, wu->wsi->tsi); if (pt->destroy_self) { lwsl_cx_notice(context, "pt destroy self coming true"); lws_context_destroy(pt->context); return; } /* set the idle timer for 1ms ahead */ uloop_timeout_cancel(&pt_to_priv_uloop(pt)->idle_timer); uloop_timeout_set(&pt_to_priv_uloop(pt)->idle_timer, 1); } static int elops_listen_init_uloop(struct lws_dll2 *d, void *user) { #if defined(LWS_WITH_SERVER) struct lws *wsi = lws_container_of(d, struct lws, listen_list); struct lws_wsi_eventlibs_uloop *wu = wsi_to_priv_uloop(wsi); wu->wsi = wsi; wu->fd.fd = wsi->desc.sockfd; wu->fd.cb = lws_uloop_cb; uloop_fd_add(&wu->fd, ULOOP_READ); wu->actual_events = ULOOP_READ; #endif return 0; } static int elops_init_pt_uloop(struct lws_context *context, void *v, int tsi) { struct lws_context_per_thread *pt = &context->pt[tsi]; struct lws_pt_eventlibs_uloop *ptpr = pt_to_priv_uloop(pt); ptpr->pt = pt; lws_vhost_foreach_listen_wsi(context, NULL, elops_listen_init_uloop); /* static event loop objects */ ptpr->hrtimer.cb = lws_uloop_hrtimer_cb; ptpr->idle_timer.cb = lws_uloop_idle_timer_cb; uloop_timeout_add(&ptpr->hrtimer); uloop_timeout_add(&ptpr->idle_timer); uloop_timeout_set(&ptpr->hrtimer, 1); return 0; } static int elops_accept_uloop(struct lws *wsi) { struct lws_wsi_eventlibs_uloop *wu = wsi_to_priv_uloop(wsi); wu->wsi = wsi; wu->fd.fd = wsi->desc.sockfd; wu->fd.cb = lws_uloop_cb; uloop_fd_add(&wu->fd, ULOOP_READ); wu->actual_events = ULOOP_READ; return 0; } static void elops_io_uloop(struct lws *wsi, unsigned int flags) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; struct lws_wsi_eventlibs_uloop *wu = wsi_to_priv_uloop(wsi); unsigned int ulf = (unsigned int)(((flags & LWS_EV_WRITE) ? ULOOP_WRITE : 0) | ((flags & LWS_EV_READ) ? ULOOP_READ : 0)), u; if (wsi->a.context->being_destroyed || pt->is_destroyed) return; assert((flags & (LWS_EV_START | LWS_EV_STOP)) && (flags & (LWS_EV_READ | LWS_EV_WRITE))); u = wu->actual_events; if (flags & LWS_EV_START) u |= ulf; if (flags & LWS_EV_STOP) u &= ~ulf; uloop_fd_add(&wu->fd, u); wu->actual_events = u; } static void elops_run_pt_uloop(struct lws_context *context, int tsi) { uloop_run(); } static int elops_listen_destroy_uloop(struct lws_dll2 *d, void *user) { #if defined(LWS_WITH_SERVER) struct lws *wsi = lws_container_of(d, struct lws, listen_list); struct lws_wsi_eventlibs_uloop *wu = wsi_to_priv_uloop(wsi); uloop_fd_delete(&wu->fd); #endif return 0; } static void elops_destroy_pt_uloop(struct lws_context *context, int tsi) { struct lws_context_per_thread *pt = &context->pt[tsi]; struct lws_pt_eventlibs_uloop *ptpr = pt_to_priv_uloop(pt); lws_vhost_foreach_listen_wsi(context, NULL, elops_listen_destroy_uloop); uloop_timeout_cancel(&ptpr->hrtimer); uloop_timeout_cancel(&ptpr->idle_timer); } static void elops_destroy_wsi_uloop(struct lws *wsi) { struct lws_context_per_thread *pt; if (!wsi) return; pt = &wsi->a.context->pt[(int)wsi->tsi]; if (pt->is_destroyed) return; uloop_fd_delete(&wsi_to_priv_uloop(wsi)->fd); } static int elops_wsi_logical_close_uloop(struct lws *wsi) { elops_destroy_wsi_uloop(wsi); return 0; } static int elops_init_vhost_listen_wsi_uloop(struct lws *wsi) { struct lws_wsi_eventlibs_uloop *wu; if (!wsi) { assert(0); return 0; } wu = wsi_to_priv_uloop(wsi); wu->wsi = wsi; wu->fd.fd = wsi->desc.sockfd; wu->fd.cb = lws_uloop_cb; uloop_fd_add(&wu->fd, ULOOP_READ); wu->actual_events = ULOOP_READ; return 0; } static const struct lws_event_loop_ops event_loop_ops_uloop = { /* name */ "uloop", /* init_context */ NULL, /* destroy_context1 */ NULL, /* destroy_context2 */ NULL, /* init_vhost_listen_wsi */ elops_init_vhost_listen_wsi_uloop, /* init_pt */ elops_init_pt_uloop, /* wsi_logical_close */ elops_wsi_logical_close_uloop, /* check_client_connect_ok */ NULL, /* close_handle_manually */ NULL, /* accept */ elops_accept_uloop, /* io */ elops_io_uloop, /* run_pt */ elops_run_pt_uloop, /* destroy_pt */ elops_destroy_pt_uloop, /* destroy wsi */ elops_destroy_wsi_uloop, /* foreign_thread */ NULL, /* flags */ 0, /* evlib_size_ctx */ 0, /* evlib_size_pt */ sizeof(struct lws_pt_eventlibs_uloop), /* evlib_size_vh */ 0, /* evlib_size_wsi */ sizeof(struct lws_wsi_eventlibs_uloop), }; #if defined(LWS_WITH_EVLIB_PLUGINS) LWS_VISIBLE #endif const lws_plugin_evlib_t evlib_uloop = { .hdr = { "uloop event loop", "lws_evlib_plugin", LWS_BUILD_HASH, LWS_PLUGIN_API_MAGIC }, .ops = &event_loop_ops_uloop }; libwebsockets-4.3.5/lib/jose/000077500000000000000000000000001476025525100161005ustar00rootroot00000000000000libwebsockets-4.3.5/lib/jose/CMakeLists.txt000066400000000000000000000031221476025525100206360ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # include_directories(. ./jwe ./jws ./jwk) if (LWS_WITH_JOSE) list(APPEND SOURCES jose/jws/jose.c jose/jwk/jwk.c jose/jwk/jose_key.c jose/jws/jws.c jose/jwe/jwe.c jose/jwe/enc/aescbc.c jose/jwe/enc/aesgcm.c jose/jwe/enc/aeskw.c jose/jwe/jwe-rsa-aescbc.c jose/jwe/jwe-rsa-aesgcm.c jose/jwe/jwe-ecdh-es-aeskw.c ) endif() # # Keep explicit parent scope exports at end # exports_to_parent_scope() libwebsockets-4.3.5/lib/jose/README.md000066400000000000000000000040611476025525100173600ustar00rootroot00000000000000# JOSE support JOSE is a set of web standards aimed at encapsulating crypto operations flexibly inside JSON objects. Lws provides lightweight apis to performs operations on JWK, JWS and JWE independent of the tls backend in use. The JSON parsing is handled by the lws lejp stream parser. |Part|RFC|Function| |---|---|---| |JWS|[RFC7515](https://tools.ietf.org/html/rfc7515)|JSON Web Signatures| |JWE|[RFC7516](https://tools.ietf.org/html/rfc7516)|JSON Web Encryption| |JWK|[RFC7517](https://tools.ietf.org/html/rfc7517)|JSON Web Keys| |JWA|[RFC7518](https://tools.ietf.org/html/rfc7518)|JSON Web Algorithms| JWA is a set of recommendations for which combinations of algorithms are deemed desirable and secure, which implies what must be done for useful implementations of JWS, JWE and JWK. ## Supported algorithms ### Supported keys - All RFC7517 / JWK forms: octet, RSA and EC - singleton and keys[] arrays of keys supported ### Symmetric ciphers - All common AES varaiants: CBC, CFB128, CFB8, CTR, EVB, OFB, KW and XTS ### Asymmetric ciphers - RSA - EC (P-256, P-384 and P-521 JWA curves) ### Payload auth and crypt - AES_128_CBC_HMAC_SHA_256 - AES_192_CBC_HMAC_SHA_384 - AES_256_CBC_HMAC_SHA_512 - AES_128_GCM For the required and recommended asymmetric algorithms, support currently looks like this |JWK kty|JWA|lws| |---|---|---| |EC|Recommended+|yes| |RSA|Required|yes| |oct|Required|yes| |JWE alg|JWA|lws| |---|---|---| |RSA1_5|Recommended-|yes| |RSA-OAEP|Recommended+|no| |ECDH-ES|Recommended+|no| |JWS alg|JWA|lws| |---|---|---| |HS256|Required|yes| |RS256|Recommended+|yes| |ES256|Recommended|yes| ## Minimal Example tools [JWK](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/crypto/minimal-crypto-jwk) [JWS](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/crypto/minimal-crypto-jws) [JWE](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/crypto/minimal-crypto-jwe) ## API tests See `./minimal-examples/api-tests/api-test-jose/` for example test code. The tests are built and confirmed during CI. libwebsockets-4.3.5/lib/jose/jwe/000077500000000000000000000000001476025525100166655ustar00rootroot00000000000000libwebsockets-4.3.5/lib/jose/jwe/enc/000077500000000000000000000000001476025525100174325ustar00rootroot00000000000000libwebsockets-4.3.5/lib/jose/jwe/enc/aescbc.c000077500000000000000000000213421476025525100210230ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "private-lib-jose-jwe.h" int lws_jwe_encrypt_cbc_hs(struct lws_jwe *jwe, uint8_t *cek, uint8_t *aad, int aad_len) { int n, hlen = (int)lws_genhmac_size(jwe->jose.enc_alg->hmac_type); uint8_t digest[LWS_GENHASH_LARGEST]; struct lws_gencrypto_keyelem el; struct lws_genhmac_ctx hmacctx; struct lws_genaes_ctx aesctx; size_t paddedlen; uint8_t al[8]; /* Caller must have prepared space for the results */ if (jwe->jws.map.len[LJWE_ATAG] != (unsigned int)hlen / 2) { lwsl_notice("%s: expected tag len %d, got %d\n", __func__, hlen / 2, jwe->jws.map.len[LJWE_ATAG]); return -1; } if (jwe->jws.map.len[LJWE_IV] != 16) { lwsl_notice("expected iv len %d, got %d\n", 16, jwe->jws.map.len[LJWE_IV]); return -1; } /* first create the authentication hmac */ /* JWA Section 5.2.2.1 * * 1. The secondary keys MAC_KEY and ENC_KEY are generated from the * input key K as follows. Each of these two keys is an octet * string. * * MAC_KEY consists of the initial MAC_KEY_LEN octets of K, in * order. * ENC_KEY consists of the final ENC_KEY_LEN octets of K, in * order. */ /* * 2. The IV used is a 128-bit value generated randomly or * pseudorandomly for use in the cipher. */ lws_get_random(jwe->jws.context, (void *)jwe->jws.map.buf[LJWE_IV], 16); /* * 3. The plaintext is CBC encrypted using PKCS #7 padding using * ENC_KEY as the key and the IV. We denote the ciphertext output * from this step as E. */ /* second half is the AES ENC_KEY */ el.buf = cek + (hlen / 2); el.len = (uint32_t)(hlen / 2); if (lws_genaes_create(&aesctx, LWS_GAESO_ENC, LWS_GAESM_CBC, &el, LWS_GAESP_WITH_PADDING, NULL)) { lwsl_err("%s: lws_genaes_create failed\n", __func__); return -1; } /* * the plaintext gets delivered to us in LJWE_CTXT, this replaces the * plaintext there with the ciphertext, which will be larger by some * padding bytes */ n = lws_genaes_crypt(&aesctx, (uint8_t *)jwe->jws.map.buf[LJWE_CTXT], jwe->jws.map.len[LJWE_CTXT], (uint8_t *)jwe->jws.map.buf[LJWE_CTXT], (uint8_t *)jwe->jws.map.buf[LJWE_IV], NULL, NULL, LWS_AES_CBC_BLOCKLEN); paddedlen = lws_gencrypto_padded_length(LWS_AES_CBC_BLOCKLEN, jwe->jws.map.len[LJWE_CTXT]); jwe->jws.map.len[LJWE_CTXT] = (uint32_t)paddedlen; lws_genaes_destroy(&aesctx, (uint8_t *)jwe->jws.map.buf[LJWE_CTXT] + paddedlen - LWS_AES_CBC_BLOCKLEN, LWS_AES_CBC_BLOCKLEN); if (n) { lwsl_err("%s: lws_genaes_crypt failed\n", __func__); return -1; } /* * 4. The octet string AL is equal to the number of bits in the * Additional Authenticated Data A expressed as a 64-bit unsigned * big-endian integer. */ lws_jwe_be64((unsigned int)aad_len * 8, al); /* first half of the CEK is the MAC key */ if (lws_genhmac_init(&hmacctx, jwe->jose.enc_alg->hmac_type, cek, (unsigned int)hlen / 2)) return -1; /* * 5. A message Authentication Tag T is computed by applying HMAC * [RFC2104] to the following data, in order: * * - the Additional Authenticated Data A, * - the Initialization Vector IV, * - the ciphertext E computed in the previous step, and * - the octet string AL defined above. * * The string MAC_KEY is used as the MAC key. We denote the output * of the MAC computed in this step as M. The first T_LEN octets of * M are used as T. */ if (lws_genhmac_update(&hmacctx, aad, (unsigned int)aad_len) || lws_genhmac_update(&hmacctx, jwe->jws.map.buf[LJWE_IV], LWS_JWE_AES_IV_BYTES) || /* since we encrypted it, this is the ciphertext */ lws_genhmac_update(&hmacctx, (uint8_t *)jwe->jws.map.buf[LJWE_CTXT], jwe->jws.map.len[LJWE_CTXT]) || lws_genhmac_update(&hmacctx, al, 8)) { lwsl_err("%s: hmac computation failed\n", __func__); lws_genhmac_destroy(&hmacctx, NULL); return -1; } if (lws_genhmac_destroy(&hmacctx, digest)) { lwsl_err("%s: problem destroying hmac\n", __func__); return -1; } /* create tag */ memcpy((void *)jwe->jws.map.buf[LJWE_ATAG], digest, (unsigned int)hlen / 2); return (int)jwe->jws.map.len[LJWE_CTXT]; } int lws_jwe_auth_and_decrypt_cbc_hs(struct lws_jwe *jwe, uint8_t *enc_cek, uint8_t *aad, int aad_len) { int n, hlen = (int)lws_genhmac_size(jwe->jose.enc_alg->hmac_type); uint8_t digest[LWS_GENHASH_LARGEST]; struct lws_gencrypto_keyelem el; struct lws_genhmac_ctx hmacctx; struct lws_genaes_ctx aesctx; uint8_t al[8]; /* Some sanity checks on what came in */ if (jwe->jws.map.len[LJWE_ATAG] != (unsigned int)hlen / 2) { lwsl_notice("%s: expected tag len %d, got %d\n", __func__, hlen / 2, jwe->jws.map.len[LJWE_ATAG]); return -1; } if (jwe->jws.map.len[LJWE_IV] != 16) { lwsl_notice("expected iv len %d, got %d\n", 16, jwe->jws.map.len[LJWE_IV]); return -1; } /* Prepare to check authentication * * AAD is the b64 JOSE header. * * The octet string AL, which is the number of bits in AAD expressed as * a big-endian 64-bit unsigned integer is: * * [0, 0, 0, 0, 0, 0, 1, 152] * * Concatenate the AAD, the Initialization Vector, the ciphertext, and * the AL value. * */ lws_jwe_be64((unsigned int)aad_len * 8, al); /* first half of enc_cek is the MAC key */ if (lws_genhmac_init(&hmacctx, jwe->jose.enc_alg->hmac_type, enc_cek, (unsigned int)hlen / 2)) { lwsl_err("%s: lws_genhmac_init fail\n", __func__); return -1; } if (lws_genhmac_update(&hmacctx, aad, (unsigned int)aad_len) || lws_genhmac_update(&hmacctx, (uint8_t *)jwe->jws.map.buf[LJWE_IV], jwe->jws.map.len[LJWE_IV]) || lws_genhmac_update(&hmacctx, (uint8_t *)jwe->jws.map.buf[LJWE_CTXT], jwe->jws.map.len[LJWE_CTXT]) || lws_genhmac_update(&hmacctx, al, 8)) { lwsl_err("%s: hmac computation failed\n", __func__); lws_genhmac_destroy(&hmacctx, NULL); return -1; } if (lws_genhmac_destroy(&hmacctx, digest)) { lwsl_err("%s: problem destroying hmac\n", __func__); return -1; } /* first half of digest is the auth tag */ if (lws_timingsafe_bcmp(digest, jwe->jws.map.buf[LJWE_ATAG], (unsigned int)hlen / 2)) { lwsl_err("%s: auth failed: hmac tag (%d) != ATAG (%d)\n", __func__, hlen / 2, jwe->jws.map.len[LJWE_ATAG]); lwsl_hexdump_notice(jwe->jws.map.buf[LJWE_ATAG], (unsigned int)hlen / 2); lwsl_hexdump_notice(digest, (unsigned int)hlen / 2); return -1; } /* second half of enc cek is the CEK KEY */ el.buf = enc_cek + (hlen / 2); el.len = (unsigned int)hlen / 2; if (lws_genaes_create(&aesctx, LWS_GAESO_DEC, LWS_GAESM_CBC, &el, LWS_GAESP_NO_PADDING, NULL)) { lwsl_err("%s: lws_genaes_create failed\n", __func__); return -1; } n = lws_genaes_crypt(&aesctx, (uint8_t *)jwe->jws.map.buf[LJWE_CTXT], jwe->jws.map.len[LJWE_CTXT], (uint8_t *)jwe->jws.map.buf[LJWE_CTXT], (uint8_t *)jwe->jws.map.buf[LJWE_IV], NULL, NULL, 16); /* Strip the PKCS #7 padding */ if (jwe->jws.map.len[LJWE_CTXT] < LWS_AES_CBC_BLOCKLEN || jwe->jws.map.len[LJWE_CTXT] <= (unsigned char)jwe->jws.map.buf[LJWE_CTXT] [jwe->jws.map.len[LJWE_CTXT] - 1]) { lwsl_err("%s: invalid padded ciphertext length: %d. Corrupt data?\n", __func__, jwe->jws.map.len[LJWE_CTXT]); return -1; } jwe->jws.map.len[LJWE_CTXT] = (uint32_t)((int)jwe->jws.map.len[LJWE_CTXT] - jwe->jws.map.buf[LJWE_CTXT][jwe->jws.map.len[LJWE_CTXT] - 1]); n |= lws_genaes_destroy(&aesctx, NULL, 0); if (n) { lwsl_err("%s: lws_genaes_crypt failed\n", __func__); return -1; } return (int)jwe->jws.map.len[LJWE_CTXT]; } libwebsockets-4.3.5/lib/jose/jwe/enc/aesgcm.c000066400000000000000000000122521476025525100210370ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "private-lib-jose-jwe.h" /* * NOTICE this is AESGCM content encryption, it's not AES GCM key wrapping * * * This section defines the specifics of performing authenticated * encryption with AES in Galois/Counter Mode (GCM) ([AES] and * [NIST.800-38D]). * * The CEK is used as the encryption key. * * Use of an IV of size 96 bits is REQUIRED with this algorithm. * * The requested size of the Authentication Tag output MUST be 128 bits, * regardless of the key size. * * For decrypt: decrypt the KEK, then decrypt the payload * * For encrypt: encrypt the payload, then encrypt the KEK */ /* * encrypting... enc_cek is unencrypted */ int lws_jwe_encrypt_gcm(struct lws_jwe *jwe, uint8_t *enc_cek, uint8_t *aad, int aad_len) { struct lws_gencrypto_keyelem el; struct lws_genaes_ctx aesctx; size_t ivs = LWS_AESGCM_IV; int n; /* Some sanity checks on what came in */ /* MUST be 128-bit for all sizes */ if (jwe->jws.map.len[LJWE_ATAG] != LWS_AESGCM_TAG) { lwsl_notice("%s: AESGCM tag size must be 128b, got %d\n", __func__, jwe->jws.map.len[LJWE_ATAG]); return -1; } if (jwe->jws.map.len[LJWE_IV] != LWS_AESGCM_IV) { /* MUST be 96-bit */ lwsl_notice("%s: AESGCM IV must be 128b, got %d\n", __func__, jwe->jws.map.len[LJWE_IV]); return -1; } /* EKEY is directly the CEK KEY */ el.buf = enc_cek; el.len = jwe->jose.enc_alg->keybits_fixed / 8; if (lws_genaes_create(&aesctx, LWS_GAESO_ENC, LWS_GAESM_GCM, &el, LWS_GAESP_NO_PADDING, NULL)) { lwsl_err("%s: lws_genaes_create failed\n", __func__); return -1; } /* aad */ n = lws_genaes_crypt(&aesctx, aad, (unsigned int)aad_len, NULL, (uint8_t *)jwe->jws.map.buf[LJWE_IV], (uint8_t *)jwe->jws.map.buf[LJWE_ATAG], &ivs, LWS_AESGCM_TAG); if (n) { lwsl_err("%s: lws_genaes_crypt aad failed\n", __func__); return -1; } /* payload */ n = lws_genaes_crypt(&aesctx, (uint8_t *)jwe->jws.map.buf[LJWE_CTXT], jwe->jws.map.len[LJWE_CTXT], (uint8_t *)jwe->jws.map.buf[LJWE_CTXT], (uint8_t *)jwe->jws.map.buf[LJWE_IV], NULL, &ivs, LWS_AESGCM_TAG); n |= lws_genaes_destroy(&aesctx, (uint8_t *)jwe->jws.map.buf[LJWE_ATAG], LWS_AESGCM_TAG); if (n) { lwsl_err("%s: lws_genaes_crypt failed\n", __func__); return -1; } return (int)jwe->jws.map.len[LJWE_CTXT]; } int lws_jwe_auth_and_decrypt_gcm(struct lws_jwe *jwe, uint8_t *enc_cek, uint8_t *aad, int aad_len) { struct lws_gencrypto_keyelem el; struct lws_genaes_ctx aesctx; size_t ivs = LWS_AESGCM_IV; uint8_t tag[LWS_AESGCM_TAG]; int n; /* Some sanity checks on what came in */ /* Tag MUST be 128-bit for all sizes */ if (jwe->jws.map.len[LJWE_ATAG] != LWS_AESGCM_TAG) { lwsl_notice("%s: AESGCM tag size must be 128b, got %d\n", __func__, jwe->jws.map.len[LJWE_ATAG]); return -1; } if (jwe->jws.map.len[LJWE_IV] != LWS_AESGCM_IV) { /* MUST be 96-bit */ lwsl_notice("%s: AESGCM IV must be 128b, got %d\n", __func__, jwe->jws.map.len[LJWE_IV]); return -1; } /* EKEY is directly the CEK KEY */ el.buf = enc_cek; el.len = jwe->jose.enc_alg->keybits_fixed / 8; if (lws_genaes_create(&aesctx, LWS_GAESO_DEC, LWS_GAESM_GCM, &el, LWS_GAESP_NO_PADDING, NULL)) { lwsl_err("%s: lws_genaes_create failed\n", __func__); return -1; } n = lws_genaes_crypt(&aesctx, aad, (unsigned int)aad_len, NULL, (uint8_t *)jwe->jws.map.buf[LJWE_IV], (uint8_t *)jwe->jws.map.buf[LJWE_ATAG], &ivs, 16); if (n) { lwsl_err("%s: lws_genaes_crypt aad failed\n", __func__); return -1; } n = lws_genaes_crypt(&aesctx, (uint8_t *)jwe->jws.map.buf[LJWE_CTXT], jwe->jws.map.len[LJWE_CTXT], (uint8_t *)jwe->jws.map.buf[LJWE_CTXT], (uint8_t *)jwe->jws.map.buf[LJWE_IV], (uint8_t *)jwe->jws.map.buf[LJWE_ATAG], &ivs, 16); n |= lws_genaes_destroy(&aesctx, tag, sizeof(tag)); if (n) { lwsl_err("%s: lws_genaes_crypt failed\n", __func__); return -1; } return (int)jwe->jws.map.len[LJWE_CTXT]; } libwebsockets-4.3.5/lib/jose/jwe/enc/aeskw.c000066400000000000000000000127301476025525100207130ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "private-lib-jose-jwe.h" /* * RFC3394 Key Wrap uses a 128-bit key, and bloats what it is wrapping by * one 8-byte block. So, if you had a 32 byte plaintext CEK to wrap, after * wrapping it becomes a 40 byte wrapped, enciphered, key. * * The CEK comes in from and goes out in LJWE_EKEY. So LJWE_EKEY length * increases by 8 from calling this. */ int lws_jwe_encrypt_aeskw_cbc_hs(struct lws_jwe *jwe, char *temp, int *temp_len) { struct lws_genaes_ctx aesctx; /* we are wrapping a key, so size for the worst case after wrap */ uint8_t enc_cek[LWS_JWE_LIMIT_KEY_ELEMENT_BYTES + LWS_JWE_RFC3394_OVERHEAD_BYTES]; int n, m, hlen = (int)lws_genhmac_size(jwe->jose.enc_alg->hmac_type), ot = *temp_len; if (jwe->jws.jwk->kty != LWS_GENCRYPTO_KTY_OCT) { lwsl_err("%s: unexpected kty %d\n", __func__, jwe->jws.jwk->kty); return -1; } /* create a b64 version of the JOSE header, needed for hashing */ if (lws_jws_encode_b64_element(&jwe->jws.map_b64, LJWE_JOSE, temp, temp_len, jwe->jws.map.buf[LJWE_JOSE], jwe->jws.map.len[LJWE_JOSE])) return -1; /* Allocate temp space for ATAG and IV */ if (lws_jws_alloc_element(&jwe->jws.map, LJWE_ATAG, temp + (ot - *temp_len), temp_len, (unsigned int)hlen / 2, 0)) return -1; if (lws_jws_alloc_element(&jwe->jws.map, LJWE_IV, temp + (ot - *temp_len), temp_len, LWS_JWE_AES_IV_BYTES, 0)) return -1; /* 1) Encrypt the payload... */ /* the CEK is 256-bit in the example encrypted with a 128-bit key */ n = lws_jwe_encrypt_cbc_hs(jwe, (uint8_t *)jwe->jws.map.buf[LJWE_EKEY], (uint8_t *)jwe->jws.map_b64.buf[LJWE_JOSE], (int)jwe->jws.map_b64.len[LJWE_JOSE]); if (n < 0) { lwsl_err("%s: lws_jwe_encrypt_cbc_hs failed\n", __func__); return -1; } /* 2) Encrypt the JWE Encrypted Key: RFC3394 Key Wrap uses 64 bit blocks * and 128-bit input key*/ if (lws_genaes_create(&aesctx, LWS_GAESO_ENC, LWS_GAESM_KW, jwe->jws.jwk->e, 1, NULL)) { lwsl_notice("%s: lws_genaes_create\n", __func__); return -1; } /* tag size is determined by enc cipher key length */ n = lws_genaes_crypt(&aesctx, (uint8_t *)jwe->jws.map.buf[LJWE_EKEY], jwe->jws.map.len[LJWE_EKEY], enc_cek, NULL, NULL, NULL, lws_gencrypto_bits_to_bytes( jwe->jose.enc_alg->keybits_fixed)); m = lws_genaes_destroy(&aesctx, NULL, 0); if (n < 0) { lwsl_err("%s: encrypt cek fail\n", __func__); return -1; } if (m < 0) { lwsl_err("%s: lws_genaes_destroy fail\n", __func__); return -1; } jwe->jws.map.len[LJWE_EKEY] += LWS_JWE_RFC3394_OVERHEAD_BYTES; memcpy((uint8_t *)jwe->jws.map.buf[LJWE_EKEY], enc_cek, jwe->jws.map.len[LJWE_EKEY]); return (int)jwe->jws.map.len[LJWE_CTXT]; } int lws_jwe_auth_and_decrypt_aeskw_cbc_hs(struct lws_jwe *jwe) { struct lws_genaes_ctx aesctx; uint8_t enc_cek[LWS_JWE_LIMIT_KEY_ELEMENT_BYTES + LWS_JWE_RFC3394_OVERHEAD_BYTES]; int n, m; if (jwe->jws.jwk->kty != LWS_GENCRYPTO_KTY_OCT) { lwsl_err("%s: unexpected kty %d\n", __func__, jwe->jws.jwk->kty); return -1; } /* the CEK is 256-bit in the example encrypted with a 128-bit key */ if (jwe->jws.map.len[LJWE_EKEY] > sizeof(enc_cek)) return -1; /* 1) Decrypt the JWE Encrypted Key to get the raw MAC / CEK */ if (lws_genaes_create(&aesctx, LWS_GAESO_DEC, LWS_GAESM_KW, jwe->jws.jwk->e, 1, NULL)) { lwsl_notice("%s: lws_genaes_create\n", __func__); return -1; } /* * Decrypt the CEK into enc_cek * tag size is determined by enc cipher key length */ n = lws_genaes_crypt(&aesctx, (uint8_t *)jwe->jws.map.buf[LJWE_EKEY], jwe->jws.map.len[LJWE_EKEY], enc_cek, NULL, NULL, NULL, lws_gencrypto_bits_to_bytes( jwe->jose.enc_alg->keybits_fixed)); m = lws_genaes_destroy(&aesctx, NULL, 0); if (n < 0) { lwsl_err("%s: decrypt CEK fail\n", __func__); return -1; } if (m < 0) { lwsl_err("%s: lws_genaes_destroy fail\n", __func__); return -1; } /* 2) Decrypt the payload */ n = lws_jwe_auth_and_decrypt_cbc_hs(jwe, enc_cek, (uint8_t *)jwe->jws.map_b64.buf[LJWE_JOSE], (int)jwe->jws.map_b64.len[LJWE_JOSE]); if (n < 0) { lwsl_err("%s: lws_jwe_auth_and_decrypt_cbc_hs failed\n", __func__); return -1; } return (int)jwe->jws.map.len[LJWE_CTXT]; } libwebsockets-4.3.5/lib/jose/jwe/jwe-ecdh-es-aeskw.c000066400000000000000000000505501476025525100222410ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "private-lib-jose-jwe.h" /* * From RFC7518 JWA * * 4.6. Key Agreement with Elliptic Curve Diffie-Hellman Ephemeral Static * (ECDH-ES) * * This section defines the specifics of key agreement with Elliptic * Curve Diffie-Hellman Ephemeral Static [RFC6090], in combination with * the Concat KDF, as defined in Section 5.8.1 of [NIST.800-56A]. The * key agreement result can be used in one of two ways: * * 1. directly as the Content Encryption Key (CEK) for the "enc" * algorithm, in the Direct Key Agreement mode, or * * 2. as a symmetric key used to wrap the CEK with the "A128KW", * "A192KW", or "A256KW" algorithms, in the Key Agreement with Key * Wrapping mode. * * A new ephemeral public key value MUST be generated for each key * agreement operation. * * In Direct Key Agreement mode, the output of the Concat KDF MUST be a * key of the same length as that used by the "enc" algorithm. In this * case, the empty octet sequence is used as the JWE Encrypted Key * value. The "alg" (algorithm) Header Parameter value "ECDH-ES" is * used in the Direct Key Agreement mode. * * In Key Agreement with Key Wrapping mode, the output of the Concat KDF * MUST be a key of the length needed for the specified key wrapping * algorithm. In this case, the JWE Encrypted Key is the CEK wrapped * with the agreed-upon key. * * The following "alg" (algorithm) Header Parameter values are used to * indicate that the JWE Encrypted Key is the result of encrypting the * CEK using the result of the key agreement algorithm as the key * encryption key for the corresponding key wrapping algorithm: * * +-----------------+-------------------------------------------------+ * | "alg" Param | Key Management Algorithm | * | Value | | * +-----------------+-------------------------------------------------+ * | ECDH-ES+A128KW | ECDH-ES using Concat KDF and CEK wrapped with | * | | "A128KW" | * | ECDH-ES+A192KW | ECDH-ES using Concat KDF and CEK wrapped with | * | | "A192KW" | * | ECDH-ES+A256KW | ECDH-ES using Concat KDF and CEK wrapped with | * | | "A256KW" | * +-----------------+-------------------------------------------------+ * * 4.6.1. Header Parameters Used for ECDH Key Agreement * * The following Header Parameter names are used for key agreement as * defined below. * * 4.6.1.1. "epk" (Ephemeral Public Key) Header Parameter * * The "epk" (ephemeral public key) value created by the originator for * the use in key agreement algorithms. This key is represented as a * JSON Web Key [JWK] public key value. It MUST contain only public key * parameters and SHOULD contain only the minimum JWK parameters * necessary to represent the key; other JWK parameters included can be * checked for consistency and honored, or they can be ignored. This * Header Parameter MUST be present and MUST be understood and processed * by implementations when these algorithms are used. * * 4.6.1.2. "apu" (Agreement PartyUInfo) Header Parameter * * The "apu" (agreement PartyUInfo) value for key agreement algorithms * using it (such as "ECDH-ES"), represented as a base64url-encoded * string. When used, the PartyUInfo value contains information about * the producer. Use of this Header Parameter is OPTIONAL. This Header * Parameter MUST be understood and processed by implementations when * these algorithms are used. * * 4.6.1.3. "apv" (Agreement PartyVInfo) Header Parameter * * The "apv" (agreement PartyVInfo) value for key agreement algorithms * using it (such as "ECDH-ES"), represented as a base64url encoded * string. When used, the PartyVInfo value contains information about * the recipient. Use of this Header Parameter is OPTIONAL. This * Header Parameter MUST be understood and processed by implementations * when these algorithms are used. * * 4.6.2. Key Derivation for ECDH Key Agreement * * The key derivation process derives the agreed-upon key from the * shared secret Z established through the ECDH algorithm, per * Section 6.2.2.2 of [NIST.800-56A]. * * Key derivation is performed using the Concat KDF, as defined in * Section 5.8.1 of [NIST.800-56A], where the Digest Method is SHA-256. * The Concat KDF parameters are set as follows: * * Z * This is set to the representation of the shared secret Z as an * octet sequence. * * keydatalen * This is set to the number of bits in the desired output key. For * "ECDH-ES", this is length of the key used by the "enc" algorithm. * For "ECDH-ES+A128KW", "ECDH-ES+A192KW", and "ECDH-ES+A256KW", this * is 128, 192, and 256, respectively. * * AlgorithmID * The AlgorithmID value is of the form Datalen || Data, where Data * is a variable-length string of zero or more octets, and Datalen is * a fixed-length, big-endian 32-bit counter that indicates the * length (in octets) of Data. In the Direct Key Agreement case, * Data is set to the octets of the ASCII representation of the "enc" * Header Parameter value. In the Key Agreement with Key Wrapping * case, Data is set to the octets of the ASCII representation of the * "alg" (algorithm) Header Parameter value. * * PartyUInfo * The PartyUInfo value is of the form Datalen || Data, where Data is * a variable-length string of zero or more octets, and Datalen is a * fixed-length, big-endian 32-bit counter that indicates the length * (in octets) of Data. If an "apu" (agreement PartyUInfo) Header * Parameter is present, Data is set to the result of base64url * decoding the "apu" value and Datalen is set to the number of * octets in Data. Otherwise, Datalen is set to 0 and Data is set to * the empty octet sequence. * * PartyVInfo * The PartyVInfo value is of the form Datalen || Data, where Data is * a variable-length string of zero or more octets, and Datalen is a * fixed-length, big-endian 32-bit counter that indicates the length * (in octets) of Data. If an "apv" (agreement PartyVInfo) Header * Parameter is present, Data is set to the result of base64url * decoding the "apv" value and Datalen is set to the number of * octets in Data. Otherwise, Datalen is set to 0 and Data is set to * the empty octet sequence. * * SuppPubInfo * This is set to the keydatalen represented as a 32-bit big-endian * integer. * * SuppPrivInfo * This is set to the empty octet sequence. * * Applications need to specify how the "apu" and "apv" Header * Parameters are used for that application. The "apu" and "apv" values * MUST be distinct, when used. Applications wishing to conform to * [NIST.800-56A] need to provide values that meet the requirements of * that document, e.g., by using values that identify the producer and * consumer. Alternatively, applications MAY conduct key derivation in * a manner similar to "Diffie-Hellman Key Agreement Method" [RFC2631]: * in that case, the "apu" parameter MAY either be omitted or represent * a random 512-bit value (analogous to PartyAInfo in Ephemeral-Static * mode in RFC 2631) and the "apv" parameter SHOULD NOT be present. * */ /* * - ECDH-ES[-variant] comes in the jose "alg" and just covers key agreement. * The "enc" action is completely separate and handled elsewhere. However * the key size throughout is determined by the needs of the "enc" action. * * - The jwe->jws.jwk is the PEER - the encryption consumer's - public key. * * - The public part of the ephemeral key comes out in jose.jwk_ephemeral * * - Return shared secret length or < 0 for error * * - Unwrapped CEK in EKEY. If any, wrapped CEK in "wrapped". * * - Caller responsibility to cleanse EKEY. */ static int lws_jwe_encrypt_ecdh(struct lws_jwe *jwe, char *temp, int *temp_len, uint8_t *cek) { uint8_t shared_secret[LWS_JWE_LIMIT_KEY_ELEMENT_BYTES], derived[LWS_JWE_LIMIT_KEY_ELEMENT_BYTES]; int m, n, ret = -1, ot = *temp_len, ss_len = sizeof(shared_secret), // kw_hlen = lws_genhash_size(jwe->jose.alg->hash_type), enc_hlen = (int)lws_genhmac_size(jwe->jose.enc_alg->hmac_type), ekbytes = 32; //jwe->jose.alg->keybits_fixed / 8; struct lws_genec_ctx ecctx; struct lws_jwk *ephem = &jwe->jose.recipient[jwe->recip].jwk_ephemeral; if (jwe->jws.jwk->kty != LWS_GENCRYPTO_KTY_EC) { lwsl_err("%s: unexpected kty %d\n", __func__, jwe->jws.jwk->kty); return -1; } ephem->kty = LWS_GENCRYPTO_KTY_EC; ephem->private_key = 1; /* Generate jose.jwk_ephemeral on the peer public key curve */ if (lws_genecdh_create(&ecctx, jwe->jws.context, NULL)) goto bail; /* ephemeral context gets random key on same curve as recip pubkey */ if (lws_genecdh_new_keypair(&ecctx, LDHS_OURS, (const char *) jwe->jws.jwk->e[LWS_GENCRYPTO_EC_KEYEL_CRV].buf, ephem->e)) goto bail; /* peer context gets js->jwk key */ if (lws_genecdh_set_key(&ecctx, jwe->jws.jwk->e, LDHS_THEIRS)) { lwsl_err("%s: setting peer pubkey failed\n", __func__); goto bail; } /* combine our ephemeral key and the peer pubkey to get the secret */ if (lws_genecdh_compute_shared_secret(&ecctx, shared_secret, &ss_len)) { lwsl_notice("%s: lws_genecdh_compute_shared_secret failed\n", __func__); goto bail; } /* * The private part of the ephemeral key is finished with... * cleanse and free it. We need to keep the public part around so we * can publish it with the JWE as "epk". */ lws_explicit_bzero(ephem->e[LWS_GENCRYPTO_EC_KEYEL_D].buf, ephem->e[LWS_GENCRYPTO_EC_KEYEL_D].len); lws_free_set_NULL(ephem->e[LWS_GENCRYPTO_EC_KEYEL_D].buf); ephem->e[LWS_GENCRYPTO_EC_KEYEL_D].len = 0; ephem->private_key = 0; /* * Derive the CEK from the shared secret... amount of bytes written to * derived matches bitcount in jwe->jose.enc_alg->keybits_fixed * * In Direct Key Agreement mode, the output of the Concat KDF MUST be a * key of the same length as that used by the "enc" algorithm. */ if (lws_jwa_concat_kdf(jwe, jwe->jose.alg->algtype_crypto == LWS_JOSE_ENCTYPE_NONE, derived, shared_secret, ss_len)) { lwsl_notice("%s: lws_jwa_concat_kdf failed\n", __func__); goto bail; } /* in P-521 case, we get a 66-byte shared secret for a 64-byte key */ if (ss_len < enc_hlen) { lwsl_err("%s: concat KDF bad derived key len %d\n", __func__, ss_len); goto bail; } /* * For "ECDH-ES", that was it, and we use what we just wrapped in * wrapped as the CEK without publishing it. * * For "ECDH-ES-AES[128,192,256]KW", we generate a new, random CEK and * then wrap it using the key we just wrapped, and make the wrapped * version available in EKEY. */ if (jwe->jose.alg->algtype_crypto != LWS_JOSE_ENCTYPE_NONE) { struct lws_gencrypto_keyelem el; struct lws_genaes_ctx aesctx; /* generate the actual CEK in cek */ if (lws_get_random(jwe->jws.context, cek, (unsigned int)enc_hlen) != (size_t)enc_hlen) { lwsl_err("Problem getting random\n"); goto bail; } /* wrap with the derived key */ el.buf = derived; el.len = (unsigned int)enc_hlen / 2; if (lws_genaes_create(&aesctx, LWS_GAESO_ENC, LWS_GAESM_KW, &el, 1, NULL)) { lwsl_notice("%s: lws_genaes_create\n", __func__); goto bail; } /* wrap CEK into EKEY */ n = lws_genaes_crypt(&aesctx, cek, (unsigned int)enc_hlen, (void *)jwe->jws.map.buf[LJWE_EKEY], NULL, NULL, NULL, 0); m = lws_genaes_destroy(&aesctx, NULL, 0); if (n < 0) { lwsl_err("%s: encrypt cek fail\n", __func__); goto bail; } if (m < 0) { lwsl_err("%s: lws_genaes_destroy fail\n", __func__); goto bail; } jwe->jws.map.len[LJWE_EKEY] = (unsigned int)enc_hlen + 8; /* Wrapped CEK is in EKEY. Random CEK is in cek. */ } else /* direct derived CEK is in cek */ memcpy(cek, derived, (unsigned int)enc_hlen); /* rewrite the protected JOSE header to have the epk pieces */ jwe->jws.map.buf[LJWE_JOSE] = temp; m = n = lws_snprintf(temp, (size_t)*temp_len, "{\"alg\":\"%s\", \"enc\":\"%s\", \"epk\":", jwe->jose.alg->alg, jwe->jose.enc_alg->alg); *temp_len -= n; n = lws_jwk_export(ephem, 0, temp + (ot - *temp_len), temp_len); if (n < 0) { lwsl_err("%s: ephemeral export failed\n", __func__); goto bail; } m += n; n = lws_snprintf(temp + (ot - *temp_len), (size_t)*temp_len, "}"); *temp_len -= n + 1; m += n; jwe->jws.map.len[LJWE_JOSE] = (unsigned int)m; /* create a b64 version of the JOSE header, needed later for AAD */ if (lws_jws_encode_b64_element(&jwe->jws.map_b64, LJWE_JOSE, temp + (ot - *temp_len), temp_len, jwe->jws.map.buf[LJWE_JOSE], jwe->jws.map.len[LJWE_JOSE])) return -1; ret = enc_hlen; bail: lws_genec_destroy(&ecctx); /* cleanse the shared secret (watch out for cek at parent too) */ lws_explicit_bzero(shared_secret, (unsigned int)ekbytes); lws_explicit_bzero(derived, (unsigned int)ekbytes); return ret; } int lws_jwe_encrypt_ecdh_cbc_hs(struct lws_jwe *jwe, char *temp, int *temp_len) { int ss_len, // kw_hlen = lws_genhash_size(jwe->jose.alg->hash_type), enc_hlen = (int)lws_genhmac_size(jwe->jose.enc_alg->hmac_type); uint8_t cek[LWS_JWE_LIMIT_KEY_ELEMENT_BYTES]; int ekbytes = jwe->jose.alg->keybits_fixed / 8; int n, ot = *temp_len, ret = -1; /* if we will produce an EKEY, make space for it */ if (jwe->jose.alg->algtype_crypto != LWS_JOSE_ENCTYPE_NONE) { if (lws_jws_alloc_element(&jwe->jws.map, LJWE_EKEY, temp + (ot - *temp_len), temp_len, (unsigned int)enc_hlen + 8, 0)) goto bail; } /* decrypt the CEK */ ss_len = lws_jwe_encrypt_ecdh(jwe, temp + (ot - *temp_len), temp_len, cek); if (ss_len < 0) { lwsl_err("%s: lws_jwe_encrypt_ecdh failed\n", __func__); return -1; } /* cek contains the unwrapped CEK. EKEY may contain wrapped CEK */ /* make space for the payload encryption pieces */ if (lws_jws_alloc_element(&jwe->jws.map, LJWE_ATAG, temp + (ot - *temp_len), temp_len, (unsigned int)enc_hlen / 2, 0)) goto bail; if (lws_jws_alloc_element(&jwe->jws.map, LJWE_IV, temp + (ot - *temp_len), temp_len, LWS_JWE_AES_IV_BYTES, 0)) goto bail; /* Perform the authenticated encryption on CTXT... * ...the AAD is b64u(protected JOSE header) */ n = lws_jwe_encrypt_cbc_hs(jwe, cek, (uint8_t *)jwe->jws.map_b64.buf[LJWE_JOSE], (int)jwe->jws.map_b64.len[LJWE_JOSE]); if (n < 0) { lwsl_notice("%s: lws_jwe_encrypt_cbc_hs failed\n", __func__); goto bail; } ret = 0; bail: /* if fail or direct CEK, cleanse and remove EKEY */ if (ret || jwe->jose.enc_alg->algtype_crypto == LWS_JOSE_ENCTYPE_NONE) { if (jwe->jws.map.len[LJWE_EKEY]) lws_explicit_bzero((void *)jwe->jws.map.buf[LJWE_EKEY], jwe->jws.map.len[LJWE_EKEY]); jwe->jws.map.len[LJWE_EKEY] = 0; } lws_explicit_bzero(cek, (unsigned int)ekbytes); return ret; } /* * jwe->jws.jwk is recipient private key * * If kw mode, then EKEY is the wrapped CEK * * */ static int lws_jwe_auth_and_decrypt_ecdh(struct lws_jwe *jwe) { uint8_t shared_secret[LWS_JWE_LIMIT_KEY_ELEMENT_BYTES], derived[LWS_JWE_LIMIT_KEY_ELEMENT_BYTES]; int ekbytes = jwe->jose.enc_alg->keybits_fixed / 8, enc_hlen = (int)lws_genhmac_size(jwe->jose.enc_alg->hmac_type); struct lws_genec_ctx ecctx; int n, ret = -1, ss_len = sizeof(shared_secret); if (jwe->jws.jwk->kty != LWS_GENCRYPTO_KTY_EC) { lwsl_err("%s: unexpected kty %d\n", __func__, jwe->jws.jwk->kty); return -1; } if (jwe->jose.recipient[jwe->recip].jwk_ephemeral.kty != LWS_GENCRYPTO_KTY_EC) { lwsl_err("%s: missing epk\n", __func__); return -1; } /* * Recompute the shared secret... * * - direct: it's the CEK * * - aeskw: apply it as AES keywrap to EKEY to get the CEK */ /* Generate jose.jwk_ephemeral on the peer public key curve */ if (lws_genecdh_create(&ecctx, jwe->jws.context, NULL)) goto bail; /* Load our private key into our side of the ecdh context */ if (lws_genecdh_set_key(&ecctx, jwe->jws.jwk->e, LDHS_OURS)) { lwsl_err("%s: setting our private key failed\n", __func__); goto bail; } /* Import the ephemeral public key into the peer side */ if (lws_genecdh_set_key(&ecctx, jwe->jose.recipient[jwe->recip].jwk_ephemeral.e, LDHS_THEIRS)) { lwsl_err("%s: setting epk pubkey failed\n", __func__); goto bail; } /* combine their ephemeral key and our private key to get the secret */ if (lws_genecdh_compute_shared_secret(&ecctx, shared_secret, &ss_len)) { lwsl_notice("%s: lws_genecdh_compute_shared_secret failed\n", __func__); goto bail; } lws_genec_destroy(&ecctx); if (ss_len < enc_hlen) { lwsl_err("%s: ss_len %d ekbytes %d\n", __func__, ss_len, enc_hlen); goto bail; } /* * Derive the CEK from the shared secret... amount of bytes written to * cek[] matches bitcount in jwe->jose.enc_alg->keybits_fixed */ if (lws_jwa_concat_kdf(jwe, jwe->jose.alg->algtype_crypto == LWS_JOSE_ENCTYPE_NONE, derived, shared_secret, ss_len)) { lwsl_notice("%s: lws_jwa_concat_kdf failed\n", __func__); goto bail; } /* * "ECDH-ES": derived is the CEK * "ECDH-ES-AES[128,192,256]KW": wrapped key is in EKEY, * "derived" contains KEK */ if (jwe->jose.alg->algtype_crypto != LWS_JOSE_ENCTYPE_NONE) { struct lws_gencrypto_keyelem el; struct lws_genaes_ctx aesctx; int m; /* Confirm space for EKEY */ if (jwe->jws.map.len[LJWE_EKEY] < (unsigned int)enc_hlen) { lwsl_err("%s: missing EKEY\n", __func__); goto bail; } /* unwrap with the KEK we derived */ el.buf = derived; el.len = (unsigned int)enc_hlen / 2; if (lws_genaes_create(&aesctx, LWS_GAESO_DEC, LWS_GAESM_KW, &el, 1, NULL)) { lwsl_notice("%s: lws_genaes_create\n", __func__); goto bail; } /* decrypt the EKEY to end up with CEK in "shared_secret" */ n = lws_genaes_crypt(&aesctx, (const uint8_t *)jwe->jws.map.buf[LJWE_EKEY], jwe->jws.map.len[LJWE_EKEY], (uint8_t *)shared_secret, NULL, NULL, NULL, 0); m = lws_genaes_destroy(&aesctx, NULL, 0); if (n < 0) { lwsl_err("%s: decrypt cek fail\n", __func__); goto bail; } if (m < 0) { lwsl_err("%s: lws_genaes_destroy fail\n", __func__); goto bail; } } else memcpy(shared_secret, derived, (unsigned int)enc_hlen); /* either way, the recovered CEK is in shared_secret */ if (lws_jwe_auth_and_decrypt_cbc_hs(jwe, shared_secret, (uint8_t *)jwe->jws.map_b64.buf[LJWE_JOSE], (int)jwe->jws.map_b64.len[LJWE_JOSE]) < 0) { lwsl_err("%s: lws_jwe_auth_and_decrypt_cbc_hs fail\n", __func__); goto bail; } /* if all went well, then CTXT is now the plaintext */ ret = 0; bail: /* cleanse wrapped on stack that contained the CEK / wrapped key */ lws_explicit_bzero(derived, (unsigned int)ekbytes); /* cleanse the shared secret */ lws_explicit_bzero(shared_secret, (unsigned int)ekbytes); return ret; } int lws_jwe_auth_and_decrypt_ecdh_cbc_hs(struct lws_jwe *jwe, char *temp, int *temp_len) { /* create a b64 version of the JOSE header, needed later for AAD */ if (lws_jws_encode_b64_element(&jwe->jws.map_b64, LJWE_JOSE, temp, temp_len, jwe->jws.map.buf[LJWE_JOSE], jwe->jws.map.len[LJWE_JOSE])) return -1; return lws_jwe_auth_and_decrypt_ecdh(jwe); } libwebsockets-4.3.5/lib/jose/jwe/jwe-rsa-aescbc.c000066400000000000000000000140571476025525100216260ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "private-lib-jose-jwe.h" /* * Requirements on entry: * * - jwe->jws.map LJWE_JOSE contains the ASCII JOSE header * - jwe->jws.map LJWE_EKEY contains cek of enc_alg hmac length * - jwe->jws.map LJWE_CTXT contains the plaintext * * On successful exit: * * - jwe->jws.map LJWE_ATAG contains the tag * - jwe->jws.map LJWE_IV contains the new random IV that was used * - jwe->jws.map LJWE_EKEY contains the encrypted CEK * - jwe->jws.map LJWE_CTXT contains the ciphertext * * Return the amount of temp used, or -1 */ int lws_jwe_encrypt_rsa_aes_cbc_hs(struct lws_jwe *jwe, char *temp, int *temp_len) { int n, hlen = (int)lws_genhmac_size(jwe->jose.enc_alg->hmac_type), ot = *temp_len; char ekey[LWS_GENHASH_LARGEST]; struct lws_genrsa_ctx rsactx; if (jwe->jws.jwk->kty != LWS_GENCRYPTO_KTY_RSA) { lwsl_err("%s: unexpected kty %d\n", __func__, jwe->jws.jwk->kty); return -1; } /* * Notice that the unencrypted EKEY coming in is smaller than the * RSA-encrypted EKEY going out, which is going to be the RSA key size * * Create a b64 version of the JOSE header, needed as aad */ if (lws_jws_encode_b64_element(&jwe->jws.map_b64, LJWE_JOSE, temp, temp_len, jwe->jws.map.buf[LJWE_JOSE], jwe->jws.map.len[LJWE_JOSE])) return -1; if (lws_jws_alloc_element(&jwe->jws.map, LJWE_ATAG, temp + (ot - *temp_len), temp_len, (unsigned int)hlen / 2, 0)) return -1; if (lws_jws_alloc_element(&jwe->jws.map, LJWE_IV, temp + (ot - *temp_len), temp_len, LWS_JWE_AES_IV_BYTES, 0)) return -1; /* * Without changing the unencrypted CEK in EKEY, reallocate enough * space to write the RSA-encrypted version in-situ. */ if (lws_jws_dup_element(&jwe->jws.map, LJWE_EKEY, temp + (ot - *temp_len), temp_len, jwe->jws.map.buf[LJWE_EKEY], jwe->jws.map.len[LJWE_EKEY], jwe->jws.jwk->e[LWS_GENCRYPTO_RSA_KEYEL_N].len)) return -1; /* Encrypt using the raw CEK (treated as MAC KEY | ENC KEY) */ n = lws_jwe_encrypt_cbc_hs(jwe, (uint8_t *)jwe->jws.map.buf[LJWE_EKEY], (uint8_t *)jwe->jws.map_b64.buf[LJWE_JOSE], (int)jwe->jws.map_b64.len[LJWE_JOSE]); if (n < 0) { lwsl_err("%s: lws_jwe_encrypt_cbc_hs failed\n", __func__); return -1; } if (lws_genrsa_create(&rsactx, jwe->jws.jwk->e, jwe->jws.context, !strcmp(jwe->jose.alg->alg, "RSA-OAEP") ? LGRSAM_PKCS1_OAEP_PSS : LGRSAM_PKCS1_1_5, LWS_GENHASH_TYPE_UNKNOWN)) { lwsl_notice("%s: lws_genrsa_create\n", __func__); return -1; } /* encrypt the CEK using RSA, mbedtls can't handle both in and out are * the EKEY, so copy the unencrypted ekey out temporarily */ memcpy(ekey, jwe->jws.map.buf[LJWE_EKEY], (unsigned int)hlen); n = lws_genrsa_public_encrypt(&rsactx, (uint8_t *)ekey, (unsigned int)hlen, (uint8_t *)jwe->jws.map.buf[LJWE_EKEY]); lws_genrsa_destroy(&rsactx); lws_explicit_bzero(ekey, (unsigned int)hlen); /* cleanse the temp CEK copy */ if (n < 0) { lwsl_err("%s: encrypt cek fail\n", __func__); return -1; } jwe->jws.map.len[LJWE_EKEY] = (unsigned int)n; /* update to encrypted EKEY size */ /* * We end up with IV, ATAG, set, EKEY encrypted and CTXT is ciphertext, * and b64u version of ATAG in map_b64. */ return 0; } int lws_jwe_auth_and_decrypt_rsa_aes_cbc_hs(struct lws_jwe *jwe) { int n; struct lws_genrsa_ctx rsactx; uint8_t enc_cek[512]; if (jwe->jws.jwk->kty != LWS_GENCRYPTO_KTY_RSA) { lwsl_err("%s: unexpected kty %d\n", __func__, jwe->jws.jwk->kty); return -1; } if (jwe->jws.map.len[LJWE_EKEY] < 40) { lwsl_err("%s: EKEY length too short %d\n", __func__, jwe->jws.map.len[LJWE_EKEY]); return -1; } /* Decrypt the JWE Encrypted Key to get the raw MAC || CEK */ if (lws_genrsa_create(&rsactx, jwe->jws.jwk->e, jwe->jws.context, !strcmp(jwe->jose.alg->alg, "RSA-OAEP") ? LGRSAM_PKCS1_OAEP_PSS : LGRSAM_PKCS1_1_5, LWS_GENHASH_TYPE_UNKNOWN)) { lwsl_notice("%s: lws_genrsa_public_decrypt_create\n", __func__); return -1; } n = lws_genrsa_private_decrypt(&rsactx, (uint8_t *)jwe->jws.map.buf[LJWE_EKEY], jwe->jws.map.len[LJWE_EKEY], enc_cek, sizeof(enc_cek)); lws_genrsa_destroy(&rsactx); if (n < 0) { lwsl_err("%s: decrypt cek fail: \n", __func__); return -1; } n = lws_jwe_auth_and_decrypt_cbc_hs(jwe, enc_cek, (uint8_t *)jwe->jws.map_b64.buf[LJWE_JOSE], (int)jwe->jws.map_b64.len[LJWE_JOSE]); if (n < 0) { lwsl_err("%s: lws_jwe_auth_and_decrypt_cbc_hs failed\n", __func__); return -1; } #if defined(LWS_WITH_MBEDTLS) && defined(LWS_PLAT_OPTEE) /* strip padding */ n = jwe->jws.map.buf[LJWE_CTXT][jwe->jws.map.len[LJWE_CTXT] - 1]; if (n > 16) { lwsl_err("%s: n == %d, plen %d\n", __func__, n, (int)jwe->jws.map.len[LJWE_CTXT]); return -1; } jwe->jws.map.len[LJWE_CTXT] -= n; #endif return (int)jwe->jws.map.len[LJWE_CTXT]; } libwebsockets-4.3.5/lib/jose/jwe/jwe-rsa-aesgcm.c000066400000000000000000000125011476025525100216350ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "private-lib-jose-jwe.h" #define LWS_AESGCM_IV 12 int lws_jwe_encrypt_rsa_aes_gcm(struct lws_jwe *jwe, char *temp, int *temp_len) { int ekbytes = jwe->jose.enc_alg->keybits_fixed / 8; struct lws_genrsa_ctx rsactx; int n, ret = -1, ot = *temp_len; if (jwe->jws.jwk->kty != LWS_GENCRYPTO_KTY_RSA) { lwsl_err("%s: wrong kty %d\n", __func__, jwe->jws.jwk->kty); return -1; } /* create the IV + CEK */ if (lws_jws_randomize_element(jwe->jws.context, &jwe->jws.map, LJWE_IV, temp, temp_len, LWS_AESGCM_IV, 0)) return -1; if (lws_jws_alloc_element(&jwe->jws.map, LJWE_ATAG, temp + (ot - *temp_len), temp_len, LWS_AESGCM_TAG, 0)) return -1; /* create a b64 version of the JOSE header, needed as aad */ if (lws_jws_encode_b64_element(&jwe->jws.map_b64, LJWE_JOSE, temp + (ot - *temp_len), temp_len, jwe->jws.map.buf[LJWE_JOSE], jwe->jws.map.len[LJWE_JOSE])) return -1; /* * If none already, create a new, random CEK in the JWE (so it can be * reused for other recipients on same payload). If it already exists, * just reuse it. It will be cleansed in the JWE destroy. */ if (!jwe->cek_valid) { if (lws_get_random(jwe->jws.context, jwe->cek, (unsigned int)ekbytes) != (size_t)ekbytes) { lwsl_err("%s: Problem getting random\n", __func__); return -1; } jwe->cek_valid = 1; } if (lws_jws_dup_element(&jwe->jws.map, LJWE_EKEY, temp + (ot - *temp_len), temp_len, jwe->cek, (unsigned int)ekbytes, 0)) return -1; /* encrypt the payload */ n = lws_jwe_encrypt_gcm(jwe, (uint8_t *)jwe->jws.map.buf[LJWE_EKEY], (uint8_t *)jwe->jws.map_b64.buf[LJWE_JOSE], (int)jwe->jws.map_b64.len[LJWE_JOSE]); if (n < 0) { lwsl_err("%s: lws_jwe_encrypt_gcm failed\n", __func__); goto bail; } /* Encrypt the CEK into EKEY to make the JWE Encrypted Key */ if (lws_genrsa_create(&rsactx, jwe->jws.jwk->e, jwe->jws.context, !strcmp(jwe->jose.alg->alg, "RSA-OAEP") ? LGRSAM_PKCS1_OAEP_PSS : LGRSAM_PKCS1_1_5, LWS_GENHASH_TYPE_SHA1 /* !!! */)) { lwsl_notice("%s: lws_genrsa_public_decrypt_create\n", __func__); goto bail; } n = lws_genrsa_public_encrypt(&rsactx, jwe->cek, (unsigned int)ekbytes, (uint8_t *)jwe->jws.map.buf[LJWE_EKEY]); lws_genrsa_destroy(&rsactx); if (n < 0) { lwsl_err("%s: encrypt cek fail: \n", __func__); goto bail; } /* set the EKEY length to the actual enciphered length */ jwe->jws.map.len[LJWE_EKEY] = (unsigned int)n; ret = (int32_t)jwe->jws.map.len[LJWE_CTXT]; bail: return ret; } int lws_jwe_auth_and_decrypt_rsa_aes_gcm(struct lws_jwe *jwe) { int n; struct lws_genrsa_ctx rsactx; uint8_t enc_cek[LWS_JWE_LIMIT_KEY_ELEMENT_BYTES]; if (jwe->jws.jwk->kty != LWS_GENCRYPTO_KTY_RSA) { lwsl_err("%s: unexpected kty %d\n", __func__, jwe->jws.jwk->kty); return -1; } if (jwe->jws.map.len[LJWE_EKEY] < 32) { lwsl_err("%s: EKEY length too short %d\n", __func__, jwe->jws.map.len[LJWE_EKEY]); return -1; } /* Decrypt the JWE Encrypted Key to get the direct CEK */ if (lws_genrsa_create(&rsactx, jwe->jws.jwk->e, jwe->jws.context, !strcmp(jwe->jose.alg->alg, "RSA-OAEP") ? LGRSAM_PKCS1_OAEP_PSS : LGRSAM_PKCS1_1_5, LWS_GENHASH_TYPE_SHA1 /* !!! */)) { lwsl_notice("%s: lws_genrsa_public_decrypt_create\n", __func__); return -1; } n = lws_genrsa_private_decrypt(&rsactx, (uint8_t *)jwe->jws.map.buf[LJWE_EKEY], jwe->jws.map.len[LJWE_EKEY], enc_cek, sizeof(enc_cek)); lws_genrsa_destroy(&rsactx); if (n < 0) { lwsl_err("%s: decrypt cek fail: \n", __func__); return -1; } n = lws_jwe_auth_and_decrypt_gcm(jwe, enc_cek, (uint8_t *)jwe->jws.map_b64.buf[LJWE_JOSE], (int)jwe->jws.map_b64.len[LJWE_JOSE]); if (n < 0) { lwsl_err("%s: lws_jwe_auth_and_decrypt_gcm_hs failed\n", __func__); return -1; } #if defined(LWS_WITH_MBEDTLS) && defined(LWS_PLAT_OPTEE) /* strip padding */ n = jwe->jws.map.buf[LJWE_CTXT][jwe->jws.map.len[LJWE_CTXT] - 1]; if (n > 16) return -1; jwe->jws.map.len[LJWE_CTXT] -= n; #endif return (int)jwe->jws.map.len[LJWE_CTXT]; } libwebsockets-4.3.5/lib/jose/jwe/jwe.c000077500000000000000000000532771476025525100176370ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "private-lib-jose.h" #include "private-lib-jose-jwe.h" /* * Currently only support flattened or compact (implicitly single signature) */ static const char * const jwe_json[] = { "protected", "iv", "ciphertext", "tag", "encrypted_key" }; enum enum_jwe_complete_tokens { LWS_EJCT_PROTECTED, LWS_EJCT_IV, LWS_EJCT_CIPHERTEXT, LWS_EJCT_TAG, LWS_EJCT_RECIP_ENC_KEY, }; /* parse a JWS complete or flattened JSON object */ struct jwe_cb_args { struct lws_jws *jws; char *temp; int *temp_len; }; static signed char lws_jwe_json_cb(struct lejp_ctx *ctx, char reason) { struct jwe_cb_args *args = (struct jwe_cb_args *)ctx->user; int n, m; if (!(reason & LEJP_FLAG_CB_IS_VALUE) || !ctx->path_match) return 0; switch (ctx->path_match - 1) { /* strings */ case LWS_EJCT_PROTECTED: /* base64u: JOSE: must contain 'alg' */ m = LJWS_JOSE; goto append_string; case LWS_EJCT_IV: /* base64u */ m = LJWE_IV; goto append_string; case LWS_EJCT_CIPHERTEXT: /* base64u */ m = LJWE_CTXT; goto append_string; case LWS_EJCT_TAG: /* base64u */ m = LJWE_ATAG; goto append_string; case LWS_EJCT_RECIP_ENC_KEY: /* base64u */ m = LJWE_EKEY; goto append_string; default: return -1; } return 0; append_string: if (*args->temp_len < ctx->npos) { lwsl_err("%s: out of parsing space\n", __func__); return -1; } /* * We keep both b64u and decoded in temp mapped using map / map_b64, * the jws signature is actually over the b64 content not the plaintext, * and we can't do it until we see the protected alg. */ if (!args->jws->map_b64.buf[m]) { args->jws->map_b64.buf[m] = args->temp; args->jws->map_b64.len[m] = 0; } memcpy(args->temp, ctx->buf, ctx->npos); args->temp += ctx->npos; *args->temp_len -= ctx->npos; args->jws->map_b64.len[m] += ctx->npos; if (reason == LEJPCB_VAL_STR_END) { args->jws->map.buf[m] = args->temp; n = lws_b64_decode_string_len( (const char *)args->jws->map_b64.buf[m], (int)args->jws->map_b64.len[m], (char *)args->temp, *args->temp_len); if (n < 0) { lwsl_err("%s: b64 decode failed\n", __func__); return -1; } args->temp += n; *args->temp_len -= n; args->jws->map.len[m] = (uint32_t)n; } return 0; } int lws_jwe_json_parse(struct lws_jwe *jwe, const uint8_t *buf, int len, char *temp, int *temp_len) { struct jwe_cb_args args; struct lejp_ctx jctx; int m = 0; args.jws = &jwe->jws; args.temp = temp; args.temp_len = temp_len; lejp_construct(&jctx, lws_jwe_json_cb, &args, jwe_json, LWS_ARRAY_SIZE(jwe_json)); m = lejp_parse(&jctx, (uint8_t *)buf, len); lejp_destruct(&jctx); if (m < 0) { lwsl_notice("%s: parse returned %d\n", __func__, m); return -1; } return 0; } void lws_jwe_init(struct lws_jwe *jwe, struct lws_context *context) { lws_jose_init(&jwe->jose); lws_jws_init(&jwe->jws, &jwe->jwk, context); memset(&jwe->jwk, 0, sizeof(jwe->jwk)); jwe->recip = 0; jwe->cek_valid = 0; } void lws_jwe_destroy(struct lws_jwe *jwe) { lws_jws_destroy(&jwe->jws); lws_jose_destroy(&jwe->jose); lws_jwk_destroy(&jwe->jwk); /* cleanse the CEK we held on to in case of further encryptions of it */ lws_explicit_bzero(jwe->cek, sizeof(jwe->cek)); jwe->cek_valid = 0; } static uint8_t * be32(uint32_t i, uint32_t *p32) { uint8_t *p = (uint8_t *)p32; *p++ = (uint8_t)((i >> 24) & 0xff); *p++ = (uint8_t)((i >> 16) & 0xff); *p++ = (uint8_t)((i >> 8) & 0xff); *p++ = (uint8_t)(i & 0xff); return (uint8_t *)p32; } /* * The key derivation process derives the agreed-upon key from the * shared secret Z established through the ECDH algorithm, per * Section 6.2.2.2 of [NIST.800-56A]. * * * Key derivation is performed using the Concat KDF, as defined in * Section 5.8.1 of [NIST.800-56A], where the Digest Method is SHA-256. * * out must be prepared to take at least 32 bytes or the encrypted key size, * whichever is larger. */ int lws_jwa_concat_kdf(struct lws_jwe *jwe, int direct, uint8_t *out, const uint8_t *shared_secret, int sslen) { int hlen = (int)lws_genhash_size(LWS_GENHASH_TYPE_SHA256), aidlen; struct lws_genhash_ctx hash_ctx; uint32_t ctr = 1, t; const char *aid; if (!jwe->jose.enc_alg || !jwe->jose.alg) return -1; /* * Hash * * AlgorithmID || PartyUInfo || PartyVInfo * {|| SuppPubInfo }{|| SuppPrivInfo } * * AlgorithmID * * The AlgorithmID value is of the form Datalen || Data, where Data * is a variable-length string of zero or more octets, and Datalen is * a fixed-length, big-endian 32-bit counter that indicates the * length (in octets) of Data. In the Direct Key Agreement case, * Data is set to the octets of the ASCII representation of the "enc" * Header Parameter value. In the Key Agreement with Key Wrapping * case, Data is set to the octets of the ASCII representation of the * "alg" (algorithm) Header Parameter value. */ aid = direct ? jwe->jose.enc_alg->alg : jwe->jose.alg->alg; aidlen = (int)strlen(aid); /* * PartyUInfo (PartyVInfo is the same deal) * * The PartyUInfo value is of the form Datalen || Data, where Data is * a variable-length string of zero or more octets, and Datalen is a * fixed-length, big-endian 32-bit counter that indicates the length * (in octets) of Data. If an "apu" (agreement PartyUInfo) Header * Parameter is present, Data is set to the result of base64url * decoding the "apu" value and Datalen is set to the number of * octets in Data. Otherwise, Datalen is set to 0 and Data is set to * the empty octet sequence * * SuppPubInfo * * This is set to the keydatalen represented as a 32-bit big-endian * integer. * * keydatalen * * This is set to the number of bits in the desired output key. For * "ECDH-ES", this is length of the key used by the "enc" algorithm. * For "ECDH-ES+A128KW", "ECDH-ES+A192KW", and "ECDH-ES+A256KW", this * is 128, 192, and 256, respectively. * * Compute Hash i = H(counter || Z || OtherInfo). * * We must iteratively hash over key material that's larger than * one hash output size (256b for SHA-256) */ while (ctr <= (uint32_t)((jwe->jose.enc_alg->keybits_fixed + (hlen - 1)) / hlen)) { /* * Key derivation is performed using the Concat KDF, as defined * in Section 5.8.1 of [NIST.800-56A], where the Digest Method * is SHA-256. */ if (lws_genhash_init(&hash_ctx, LWS_GENHASH_TYPE_SHA256)) return -1; if (/* counter */ lws_genhash_update(&hash_ctx, be32(ctr++, &t), 4) || /* Z */ lws_genhash_update(&hash_ctx, shared_secret, (unsigned int)sslen) || /* other info */ lws_genhash_update(&hash_ctx, be32((uint32_t)strlen(aid), &t), 4) || lws_genhash_update(&hash_ctx, aid, (unsigned int)aidlen) || lws_genhash_update(&hash_ctx, be32(jwe->jose.e[LJJHI_APU].len, &t), 4) || lws_genhash_update(&hash_ctx, jwe->jose.e[LJJHI_APU].buf, jwe->jose.e[LJJHI_APU].len) || lws_genhash_update(&hash_ctx, be32(jwe->jose.e[LJJHI_APV].len, &t), 4) || lws_genhash_update(&hash_ctx, jwe->jose.e[LJJHI_APV].buf, jwe->jose.e[LJJHI_APV].len) || lws_genhash_update(&hash_ctx, be32(jwe->jose.enc_alg->keybits_fixed, &t), 4) || lws_genhash_destroy(&hash_ctx, out)) { lwsl_err("%s: fail\n", __func__); lws_genhash_destroy(&hash_ctx, NULL); return -1; } out += hlen; } return 0; } void lws_jwe_be64(uint64_t c, uint8_t *p8) { int n; for (n = 56; n >= 0; n -= 8) *p8++ = (uint8_t)((c >> n) & 0xff); } int lws_jwe_auth_and_decrypt(struct lws_jwe *jwe, char *temp, int *temp_len) { int valid_aescbc_hmac, valid_aesgcm; char dotstar[96]; if (lws_jwe_parse_jose(&jwe->jose, jwe->jws.map.buf[LJWS_JOSE], (int)jwe->jws.map.len[LJWS_JOSE], temp, temp_len) < 0) { lws_strnncpy(dotstar, jwe->jws.map.buf[LJWS_JOSE], jwe->jws.map.len[LJWS_JOSE], sizeof(dotstar)); lwsl_err("%s: JOSE parse '%s' failed\n", __func__, dotstar); return -1; } if (!jwe->jose.alg) { lws_strnncpy(dotstar, jwe->jws.map.buf[LJWS_JOSE], jwe->jws.map.len[LJWS_JOSE], sizeof(dotstar)); lwsl_err("%s: no jose.alg: %s\n", __func__, dotstar); return -1; } valid_aescbc_hmac = jwe->jose.enc_alg && jwe->jose.enc_alg->algtype_crypto == LWS_JOSE_ENCTYPE_AES_CBC && (jwe->jose.enc_alg->hmac_type == LWS_GENHMAC_TYPE_SHA256 || jwe->jose.enc_alg->hmac_type == LWS_GENHMAC_TYPE_SHA384 || jwe->jose.enc_alg->hmac_type == LWS_GENHMAC_TYPE_SHA512); valid_aesgcm = jwe->jose.enc_alg && jwe->jose.enc_alg->algtype_crypto == LWS_JOSE_ENCTYPE_AES_GCM; if ((jwe->jose.alg->algtype_signing == LWS_JOSE_ENCTYPE_RSASSA_PKCS1_1_5 || jwe->jose.alg->algtype_signing == LWS_JOSE_ENCTYPE_RSASSA_PKCS1_OAEP)) { /* RSA + AESCBC */ if (valid_aescbc_hmac) return lws_jwe_auth_and_decrypt_rsa_aes_cbc_hs(jwe); /* RSA + AESGCM */ if (valid_aesgcm) return lws_jwe_auth_and_decrypt_rsa_aes_gcm(jwe); } /* AESKW */ if (jwe->jose.alg->algtype_signing == LWS_JOSE_ENCTYPE_AES_ECB && valid_aescbc_hmac) return lws_jwe_auth_and_decrypt_aeskw_cbc_hs(jwe); /* ECDH-ES + AESKW */ if (jwe->jose.alg->algtype_signing == LWS_JOSE_ENCTYPE_ECDHES && valid_aescbc_hmac) return lws_jwe_auth_and_decrypt_ecdh_cbc_hs(jwe, temp, temp_len); lwsl_err("%s: unknown cipher alg combo %s / %s\n", __func__, jwe->jose.alg->alg, jwe->jose.enc_alg ? jwe->jose.enc_alg->alg : "NULL"); return -1; } int lws_jwe_encrypt(struct lws_jwe *jwe, char *temp, int *temp_len) { int valid_aescbc_hmac, valid_aesgcm, ot = *temp_len, ret = -1; if (jwe->jose.recipients >= (int)LWS_ARRAY_SIZE(jwe->jose.recipient)) { lwsl_err("%s: max recipients reached\n", __func__); return -1; } valid_aesgcm = jwe->jose.enc_alg && jwe->jose.enc_alg->algtype_crypto == LWS_JOSE_ENCTYPE_AES_GCM; if (lws_jwe_parse_jose(&jwe->jose, jwe->jws.map.buf[LJWS_JOSE], (int)jwe->jws.map.len[LJWS_JOSE], temp, temp_len) < 0) { lwsl_err("%s: JOSE parse failed\n", __func__); goto bail; } temp += ot - *temp_len; valid_aescbc_hmac = jwe->jose.enc_alg && jwe->jose.enc_alg->algtype_crypto == LWS_JOSE_ENCTYPE_AES_CBC && (jwe->jose.enc_alg->hmac_type == LWS_GENHMAC_TYPE_SHA256 || jwe->jose.enc_alg->hmac_type == LWS_GENHMAC_TYPE_SHA384 || jwe->jose.enc_alg->hmac_type == LWS_GENHMAC_TYPE_SHA512); if ((jwe->jose.alg->algtype_signing == LWS_JOSE_ENCTYPE_RSASSA_PKCS1_1_5 || jwe->jose.alg->algtype_signing == LWS_JOSE_ENCTYPE_RSASSA_PKCS1_OAEP)) { /* RSA + AESCBC */ if (valid_aescbc_hmac) { ret = lws_jwe_encrypt_rsa_aes_cbc_hs(jwe, temp, temp_len); goto bail; } /* RSA + AESGCM */ if (valid_aesgcm) { ret = lws_jwe_encrypt_rsa_aes_gcm(jwe, temp, temp_len); goto bail; } } /* AESKW */ if (jwe->jose.alg->algtype_signing == LWS_JOSE_ENCTYPE_AES_ECB && valid_aescbc_hmac) { ret = lws_jwe_encrypt_aeskw_cbc_hs(jwe, temp, temp_len); goto bail; } /* ECDH-ES + AESKW */ if (jwe->jose.alg->algtype_signing == LWS_JOSE_ENCTYPE_ECDHES && valid_aescbc_hmac) { ret = lws_jwe_encrypt_ecdh_cbc_hs(jwe, temp, temp_len); goto bail; } lwsl_err("%s: unknown cipher alg combo %s / %s\n", __func__, jwe->jose.alg->alg, jwe->jose.enc_alg ? jwe->jose.enc_alg->alg : "NULL"); bail: if (ret) memset(&jwe->jose.recipient[jwe->jose.recipients], 0, sizeof(jwe->jose.recipient[0])); else jwe->jose.recipients++; return ret; } /* * JWE Compact Serialization consists of * * BASE64URL(UTF8(JWE Protected Header)) || '.' || * BASE64URL(JWE Encrypted Key) || '.' || * BASE64URL(JWE Initialization Vector) || '.' || * BASE64URL(JWE Ciphertext) || '.' || * BASE64URL(JWE Authentication Tag) * * * In the JWE Compact Serialization, no JWE Shared Unprotected Header or * JWE Per-Recipient Unprotected Header are used. In this case, the * JOSE Header and the JWE Protected Header are the same. * * Therefore: * * - Everything needed in the header part must go in the protected header * (it's the only part emitted). We expect the caller did this. * * - You can't emit Compact representation if there are multiple recipients */ int lws_jwe_render_compact(struct lws_jwe *jwe, char *out, size_t out_len) { size_t orig = out_len; int n; if (jwe->jose.recipients > 1) { lwsl_notice("%s: can't issue compact representation for" " multiple recipients (%d)\n", __func__, jwe->jose.recipients); return -1; } n = lws_jws_base64_enc(jwe->jws.map.buf[LJWS_JOSE], jwe->jws.map.len[LJWS_JOSE], out, out_len); if (n < 0 || (int)out_len == n) { lwsl_info("%s: unable to encode JOSE\n", __func__); return -1; } out += n; *out++ = '.'; out_len -= (unsigned int)n + 1; n = lws_jws_base64_enc(jwe->jws.map.buf[LJWE_EKEY], jwe->jws.map.len[LJWE_EKEY], out, out_len); if (n < 0 || (int)out_len == n) { lwsl_info("%s: unable to encode EKEY\n", __func__); return -1; } out += n; *out++ = '.'; out_len -= (unsigned int)n + 1; n = lws_jws_base64_enc(jwe->jws.map.buf[LJWE_IV], jwe->jws.map.len[LJWE_IV], out, out_len); if (n < 0 || (int)out_len == n) { lwsl_info("%s: unable to encode IV\n", __func__); return -1; } out += n; *out++ = '.'; out_len -= (unsigned int)n + 1; n = lws_jws_base64_enc(jwe->jws.map.buf[LJWE_CTXT], jwe->jws.map.len[LJWE_CTXT], out, out_len); if (n < 0 || (int)out_len == n) { lwsl_info("%s: unable to encode CTXT\n", __func__); return -1; } out += n; *out++ = '.'; out_len -= (unsigned int)n + 1; n = lws_jws_base64_enc(jwe->jws.map.buf[LJWE_ATAG], jwe->jws.map.len[LJWE_ATAG], out, out_len); if (n < 0 || (int)out_len == n) { lwsl_info("%s: unable to encode ATAG\n", __func__); return -1; } out += n; *out++ = '\0'; out_len -= (unsigned int)n; return (int)(orig - out_len); } int lws_jwe_create_packet(struct lws_jwe *jwe, const char *payload, size_t len, const char *nonce, char *out, size_t out_len, struct lws_context *context) { char *buf, *start, *p, *end, *p1, *end1; struct lws_jws jws; int n, m; lws_jws_init(&jws, &jwe->jwk, context); /* * This buffer is local to the function, the actual output is prepared * into out. Only the plaintext protected header * (which contains the public key, 512 bytes for 4096b) goes in * here temporarily. */ n = LWS_PRE + 2048; buf = malloc((unsigned int)n); if (!buf) { lwsl_notice("%s: malloc %d failed\n", __func__, n); return -1; } p = start = buf + LWS_PRE; end = buf + n - LWS_PRE - 1; /* * temporary JWS protected header plaintext */ if (!jwe->jose.alg || !jwe->jose.alg->alg) goto bail; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "{\"alg\":\"%s\",\"jwk\":", jwe->jose.alg->alg); m = lws_ptr_diff(end, p); n = lws_jwk_export(&jwe->jwk, 0, p, &m); if (n < 0) { lwsl_notice("failed to export jwk\n"); goto bail; } p += n; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), ",\"nonce\":\"%s\"}", nonce); /* * prepare the signed outer JSON with all the parts in */ p1 = out; end1 = out + out_len - 1; p1 += lws_snprintf(p1, lws_ptr_diff_size_t(end1, p1), "{\"protected\":\""); jws.map_b64.buf[LJWS_JOSE] = p1; n = lws_jws_base64_enc(start, lws_ptr_diff_size_t(p, start), p1, lws_ptr_diff_size_t(end1, p1)); if (n < 0) { lwsl_notice("%s: failed to encode protected\n", __func__); goto bail; } jws.map_b64.len[LJWS_JOSE] = (unsigned int)n; p1 += n; p1 += lws_snprintf(p1, lws_ptr_diff_size_t(end1, p1), "\",\"payload\":\""); jws.map_b64.buf[LJWS_PYLD] = p1; n = lws_jws_base64_enc(payload, len, p1, lws_ptr_diff_size_t(end1, p1)); if (n < 0) { lwsl_notice("%s: failed to encode payload\n", __func__); goto bail; } jws.map_b64.len[LJWS_PYLD] = (unsigned int)n; p1 += n; p1 += lws_snprintf(p1, lws_ptr_diff_size_t(end1, p1), "\",\"header\":\""); jws.map_b64.buf[LJWS_UHDR] = p1; n = lws_jws_base64_enc(payload, len, p1, lws_ptr_diff_size_t(end1, p1)); if (n < 0) { lwsl_notice("%s: failed to encode payload\n", __func__); goto bail; } jws.map_b64.len[LJWS_UHDR] = (unsigned int)n; p1 += n; p1 += lws_snprintf(p1, lws_ptr_diff_size_t(end1, p1), "\",\"signature\":\""); /* * taking the b64 protected header and the b64 payload, sign them * and place the signature into the packet */ n = lws_jws_sign_from_b64(&jwe->jose, &jws, p1, lws_ptr_diff_size_t(end1, p1)); if (n < 0) { lwsl_notice("sig gen failed\n"); goto bail; } jws.map_b64.buf[LJWS_SIG] = p1; jws.map_b64.len[LJWS_SIG] = (unsigned int)n; p1 += n; p1 += lws_snprintf(p1, lws_ptr_diff_size_t(end1, p1), "\"}"); free(buf); return lws_ptr_diff(p1, out); bail: lws_jws_destroy(&jws); free(buf); return -1; } static const char *protected_en[] = { "encrypted_key", "aad", "iv", "ciphertext", "tag" }; static int protected_idx[] = { LJWE_EKEY, LJWE_AAD, LJWE_IV, LJWE_CTXT, LJWE_ATAG }; /* * The complete JWE may look something like this: * * { * "protected": * "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2In0", * "unprotected": * {"jku":"https://server.example.com/keys.jwks"}, * "recipients":[ * {"header": * {"alg":"RSA1_5","kid":"2011-04-29"}, * "encrypted_key": * "UGhIOguC7IuEvf_NPVaXsGMoLOmwvc1GyqlIKOK1nN94nHPoltGRhWhw7Zx0- * kFm1NJn8LE9XShH59_i8J0PH5ZZyNfGy2xGdULU7sHNF6Gp2vPLgNZ__deLKx * GHZ7PcHALUzoOegEI-8E66jX2E4zyJKx-YxzZIItRzC5hlRirb6Y5Cl_p-ko3 * YvkkysZIFNPccxRU7qve1WYPxqbb2Yw8kZqa2rMWI5ng8OtvzlV7elprCbuPh * cCdZ6XDP0_F8rkXds2vE4X-ncOIM8hAYHHi29NX0mcKiRaD0-D-ljQTP-cFPg * wCp6X-nZZd9OHBv-B3oWh2TbqmScqXMR4gp_A"}, * {"header": * {"alg":"A128KW","kid":"7"}, * "encrypted_key": * "6KB707dM9YTIgHtLvtgWQ8mKwboJW3of9locizkDTHzBC2IlrT1oOQ"}], * "iv": * "AxY8DCtDaGlsbGljb3RoZQ", * "ciphertext": * "KDlTtXchhZTGufMYmOYGS4HffxPSUrfmqCHXaI9wOGY", * "tag": * "Mz-VPPyU4RlcuYv1IwIvzw" * } * * The flattened JWE ends up like this * * { * "protected": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2In0", * "unprotected": {"jku":"https://server.example.com/keys.jwks"}, * "header": {"alg":"A128KW","kid":"7"}, * "encrypted_key": "6KB707dM9YTIgHtLvtgWQ8mKwboJW3of9locizkDTHzBC2IlrT1oOQ", * "iv": "AxY8DCtDaGlsbGljb3RoZQ", * "ciphertext": "KDlTtXchhZTGufMYmOYGS4HffxPSUrfmqCHXaI9wOGY", * "tag": "Mz-VPPyU4RlcuYv1IwIvzw" * } * * { * "protected":"", * "unprotected":, * "header":, * "encrypted_key":"", * "aad":"", * "iv":"", * "ciphertext":"", * "tag":"" * } */ int lws_jwe_render_flattened(struct lws_jwe *jwe, char *out, size_t out_len) { char buf[3072], *p1, *end1, protected[128]; int m, n, jlen, plen; jlen = lws_jose_render(&jwe->jose, jwe->jws.jwk, buf, sizeof(buf)); if (jlen < 0) { lwsl_err("%s: lws_jose_render failed\n", __func__); return -1; } /* * prepare the JWE JSON with all the parts in */ p1 = out; end1 = out + out_len - 1; /* * The protected header is b64url encoding of the JOSE header part */ plen = lws_snprintf(protected, sizeof(protected), "{\"alg\":\"%s\",\"enc\":\"%s\"}", jwe->jose.alg->alg, jwe->jose.enc_alg->alg); p1 += lws_snprintf(p1, lws_ptr_diff_size_t(end1, p1), "{\"protected\":\""); jwe->jws.map_b64.buf[LJWS_JOSE] = p1; n = lws_jws_base64_enc(protected, (size_t)plen, p1, lws_ptr_diff_size_t(end1, p1)); if (n < 0) { lwsl_notice("%s: failed to encode protected\n", __func__); goto bail; } jwe->jws.map_b64.len[LJWS_JOSE] = (unsigned int)n; p1 += n; /* unprotected not supported atm */ p1 += lws_snprintf(p1, lws_ptr_diff_size_t(end1, p1), "\",\n\"header\":"); lws_strnncpy(p1, buf, jlen, end1 - p1); p1 += strlen(p1); for (m = 0; m < (int)LWS_ARRAY_SIZE(protected_en); m++) if (jwe->jws.map.buf[protected_idx[m]]) { p1 += lws_snprintf(p1, lws_ptr_diff_size_t(end1, p1), ",\n\"%s\":\"", protected_en[m]); //jwe->jws.map_b64.buf[protected_idx[m]] = p1; n = lws_jws_base64_enc(jwe->jws.map.buf[protected_idx[m]], jwe->jws.map.len[protected_idx[m]], p1, lws_ptr_diff_size_t(end1, p1)); if (n < 0) { lwsl_notice("%s: failed to encode %s\n", __func__, protected_en[m]); goto bail; } //jwe->jws.map_b64.len[protected_idx[m]] = n; p1 += n; p1 += lws_snprintf(p1, lws_ptr_diff_size_t(end1, p1), "\""); } p1 += lws_snprintf(p1, lws_ptr_diff_size_t(end1, p1), "\n}\n"); return lws_ptr_diff(p1, out); bail: lws_jws_destroy(&jwe->jws); return -1; } libwebsockets-4.3.5/lib/jose/jwe/private-lib-jose-jwe.h000066400000000000000000000047601476025525100230040ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #define LWS_AESGCM_IV 12 #define LWS_AESGCM_TAG 16 /* jwe-rsa-aescbc.c */ int lws_jwe_auth_and_decrypt_rsa_aes_cbc_hs(struct lws_jwe *jwe); int lws_jwe_encrypt_rsa_aes_cbc_hs(struct lws_jwe *jwe, char *temp, int *temp_len); int lws_jwe_auth_and_decrypt_cbc_hs(struct lws_jwe *jwe, uint8_t *enc_cek, uint8_t *aad, int aad_len); /* jws-rsa-aesgcm.c */ int lws_jwe_auth_and_decrypt_gcm(struct lws_jwe *jwe, uint8_t *enc_cek, uint8_t *aad, int aad_len); int lws_jwe_auth_and_decrypt_rsa_aes_gcm(struct lws_jwe *jwe); int lws_jwe_encrypt_gcm(struct lws_jwe *jwe, uint8_t *enc_cek, uint8_t *aad, int aad_len); int lws_jwe_encrypt_rsa_aes_gcm(struct lws_jwe *jwe, char *temp, int *temp_len); /* jwe-rsa-aeskw.c */ int lws_jwe_encrypt_aeskw_cbc_hs(struct lws_jwe *jwe, char *temp, int *temp_len); int lws_jwe_auth_and_decrypt_aeskw_cbc_hs(struct lws_jwe *jwe); /* aescbc.c */ int lws_jwe_auth_and_decrypt_cbc_hs(struct lws_jwe *jwe, uint8_t *enc_cek, uint8_t *aad, int aad_len); int lws_jwe_encrypt_cbc_hs(struct lws_jwe *jwe, uint8_t *cek, uint8_t *aad, int aad_len); int lws_jwe_auth_and_decrypt_ecdh_cbc_hs(struct lws_jwe *jwe, char *temp, int *temp_len); int lws_jwe_encrypt_ecdh_cbc_hs(struct lws_jwe *jwe, char *temp, int *temp_len); libwebsockets-4.3.5/lib/jose/jwk/000077500000000000000000000000001476025525100166735ustar00rootroot00000000000000libwebsockets-4.3.5/lib/jose/jwk/jose_key.c000066400000000000000000000416771476025525100206660ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * JOSE-specific JWK code */ #include "private-lib-core.h" #include "private-lib-jose.h" #if !defined(LWS_PLAT_OPTEE) && !defined(OPTEE_DEV_KIT) #include #endif static const char * const kty_names[] = { "unknown", /* LWS_GENCRYPTO_KTY_UNKNOWN */ "oct", /* LWS_GENCRYPTO_KTY_OCT */ "RSA", /* LWS_GENCRYPTO_KTY_RSA */ "EC" /* LWS_GENCRYPTO_KTY_EC */ }; /* * These are the entire legal token set for names in jwk. * * The first version is used to parse a detached single jwk that don't have any * parent JSON context. The second version is used to parse full jwk objects * that has a "keys": [ ] array containing the keys. */ const char * const jwk_tok[] = { "keys[]", /* dummy */ "e", "n", "d", "p", "q", "dp", "dq", "qi", /* RSA */ "kty", /* generic */ "k", /* symmetric key data */ "crv", "x", "y", /* EC (also "D") */ "kid", /* generic */ "use" /* mutually exclusive with "key_ops" */, "key_ops" /* mutually exclusive with "use" */, "x5c", /* generic */ "alg" /* generic */ }, * const jwk_outer_tok[] = { "keys[]", "keys[].e", "keys[].n", "keys[].d", "keys[].p", "keys[].q", "keys[].dp", "keys[].dq", "keys[].qi", "keys[].kty", "keys[].k", /* generic */ "keys[].crv", "keys[].x", "keys[].y", /* EC (also "D") */ "keys[].kid", "keys[].use" /* mutually exclusive with "key_ops" */, "keys[].key_ops", /* mutually exclusive with "use" */ "keys[].x5c", "keys[].alg" }; static unsigned short tok_map[] = { F_RSA | F_EC | F_OCT | F_META | 0xff, F_RSA | F_B64U | F_M | LWS_GENCRYPTO_RSA_KEYEL_E, F_RSA | F_B64U | F_M | LWS_GENCRYPTO_RSA_KEYEL_N, F_RSA | F_EC | F_B64U | LWS_GENCRYPTO_RSA_KEYEL_D, F_RSA | F_B64U | LWS_GENCRYPTO_RSA_KEYEL_P, F_RSA | F_B64U | LWS_GENCRYPTO_RSA_KEYEL_Q, F_RSA | F_B64U | LWS_GENCRYPTO_RSA_KEYEL_DP, F_RSA | F_B64U | LWS_GENCRYPTO_RSA_KEYEL_DQ, F_RSA | F_B64U | LWS_GENCRYPTO_RSA_KEYEL_QI, F_RSA | F_EC | F_OCT | F_META | F_M | JWK_META_KTY, F_OCT | F_B64U | F_M | LWS_GENCRYPTO_OCT_KEYEL_K, F_EC | F_M | LWS_GENCRYPTO_EC_KEYEL_CRV, F_EC | F_B64U | F_M | LWS_GENCRYPTO_EC_KEYEL_X, F_EC | F_B64U | F_M | LWS_GENCRYPTO_EC_KEYEL_Y, F_RSA | F_EC | F_OCT | F_META | JWK_META_KID, F_RSA | F_EC | F_OCT | F_META | JWK_META_USE, F_RSA | F_EC | F_OCT | F_META | JWK_META_KEY_OPS, F_RSA | F_EC | F_OCT | F_META | F_B64 | JWK_META_X5C, F_RSA | F_EC | F_OCT | F_META | JWK_META_ALG, }; struct lexico { const char *name; int idx; char meta; } lexico_ec[] = { { "alg", JWK_META_ALG, 1 }, { "crv", LWS_GENCRYPTO_EC_KEYEL_CRV, 0 }, { "d", LWS_GENCRYPTO_EC_KEYEL_D, 2 | 0 }, { "key_ops", JWK_META_KEY_OPS, 1 }, { "kid", JWK_META_KID, 1 }, { "kty", JWK_META_KTY, 1 }, { "use", JWK_META_USE, 1 }, { "x", LWS_GENCRYPTO_EC_KEYEL_X, 0 }, { "x5c", JWK_META_X5C, 1 }, { "y", LWS_GENCRYPTO_EC_KEYEL_Y, 0 } }, lexico_oct[] = { { "alg", JWK_META_ALG, 1 }, { "k", LWS_GENCRYPTO_OCT_KEYEL_K, 0 }, { "key_ops", JWK_META_KEY_OPS, 1 }, { "kid", JWK_META_KID, 1 }, { "kty", JWK_META_KTY, 1 }, { "use", JWK_META_USE, 1 }, { "x5c", JWK_META_X5C, 1 } }, lexico_rsa[] = { { "alg", JWK_META_ALG, 1 }, { "d", LWS_GENCRYPTO_RSA_KEYEL_D, 2 | 0 }, { "dp", LWS_GENCRYPTO_RSA_KEYEL_DP, 2 | 0 }, { "dq", LWS_GENCRYPTO_RSA_KEYEL_DQ, 2 | 0 }, { "e", LWS_GENCRYPTO_RSA_KEYEL_E, 0 }, { "key_ops", JWK_META_KEY_OPS, 1 }, { "kid", JWK_META_KID, 1 }, { "kty", JWK_META_KTY, 1 }, { "n", LWS_GENCRYPTO_RSA_KEYEL_N, 0 }, { "p", LWS_GENCRYPTO_RSA_KEYEL_P, 2 | 0 }, { "q", LWS_GENCRYPTO_RSA_KEYEL_Q, 2 | 0 }, { "qi", LWS_GENCRYPTO_RSA_KEYEL_QI, 2 | 0 }, { "use", JWK_META_USE, 1 }, { "x5c", JWK_META_X5C, 1 } }; static int _lws_jwk_set_el_jwk_b64(struct lws_gencrypto_keyelem *e, char *in, int len) { size_t dec_size = (unsigned int)lws_base64_size(len); int n; e->buf = lws_malloc(dec_size, "jwk"); if (!e->buf) return -1; /* same decoder accepts both url or original styles */ n = lws_b64_decode_string_len(in, len, (char *)e->buf, (int)dec_size - 1); if (n < 0) return -1; e->len = (uint32_t)n; return 0; } static int _lws_jwk_set_el_jwk_b64u(struct lws_gencrypto_keyelem *e, char *in, int len) { size_t dec_size = (size_t)lws_base64_size(len); int n; e->buf = lws_malloc(dec_size, "jwk"); if (!e->buf) return -1; /* same decoder accepts both url or original styles */ n = lws_b64_decode_string_len(in, len, (char *)e->buf, (int)dec_size - 1); if (n < 0) return -1; e->len = (uint32_t)n; return 0; } signed char cb_jwk(struct lejp_ctx *ctx, char reason) { struct lws_jwk_parse_state *jps = (struct lws_jwk_parse_state *)ctx->user; struct lws_jwk *jwk = jps->jwk; unsigned int idx, n; unsigned short poss; char dotstar[64]; if (reason == LEJPCB_VAL_STR_START) jps->pos = 0; if (reason == LEJPCB_OBJECT_START && ctx->path_match == 0 + 1) /* * new keys[] member is starting * * Until we see some JSON names, it could be anything... * there is no requirement for kty to be given first and eg, * ACME specifies the keys must be ordered in lexographic * order - where kty is not first. */ jps->possible = F_RSA | F_EC | F_OCT; if (reason == LEJPCB_OBJECT_END && ctx->path_match == 0 + 1) { /* we completed parsing a key */ if (jps->per_key_cb && jps->possible) { if (jps->per_key_cb(jps->jwk, jps->user)) { lwsl_notice("%s: user cb halts import\n", __func__); return -2; } /* clear it down */ lws_jwk_destroy(jps->jwk); jps->possible = 0; } } if (reason == LEJPCB_COMPLETE) { /* * Now we saw the whole jwk and know the key type, let'jwk insist * that as a whole, it must be consistent and complete. * * The tracking of ->possible bits from even before we know the * kty already makes certain we cannot have key element members * defined that are inconsistent with the key type. */ for (n = 0; n < LWS_ARRAY_SIZE(tok_map); n++) /* * All mandataory elements for the key type * must be present */ if ((tok_map[n] & jps->possible) && ( ((tok_map[n] & (F_M | F_META)) == (F_M | F_META) && !jwk->meta[tok_map[n] & 0xff].buf) || ((tok_map[n] & (F_M | F_META)) == F_M && !jwk->e[tok_map[n] & 0xff].buf))) { lwsl_notice("%s: missing %s\n", __func__, jwk_tok[n]); return -3; } /* * When the key may be public or public + private, ensure the * intra-key members related to that are consistent. * * Only RSA keys need extra care, since EC keys are already * confirmed by making CRV, X and Y mandatory and only D * (the singular private part) optional. For RSA, N and E are * also already known to be present using mandatory checking. */ /* * If a private key, it must have all D, P and Q. Public key * must have none of them. */ if (jwk->kty == LWS_GENCRYPTO_KTY_RSA && !(((!jwk->e[LWS_GENCRYPTO_RSA_KEYEL_D].buf) && (!jwk->e[LWS_GENCRYPTO_RSA_KEYEL_P].buf) && (!jwk->e[LWS_GENCRYPTO_RSA_KEYEL_Q].buf)) || (jwk->e[LWS_GENCRYPTO_RSA_KEYEL_D].buf && jwk->e[LWS_GENCRYPTO_RSA_KEYEL_P].buf && jwk->e[LWS_GENCRYPTO_RSA_KEYEL_Q].buf)) ) { lwsl_notice("%s: RSA requires D, P and Q for private\n", __func__); return -3; } /* * If the precomputed private key terms appear, they must all * appear together. */ if (jwk->kty == LWS_GENCRYPTO_KTY_RSA && !(((!jwk->e[LWS_GENCRYPTO_RSA_KEYEL_DP].buf) && (!jwk->e[LWS_GENCRYPTO_RSA_KEYEL_DQ].buf) && (!jwk->e[LWS_GENCRYPTO_RSA_KEYEL_QI].buf)) || (jwk->e[LWS_GENCRYPTO_RSA_KEYEL_DP].buf && jwk->e[LWS_GENCRYPTO_RSA_KEYEL_DQ].buf && jwk->e[LWS_GENCRYPTO_RSA_KEYEL_QI].buf)) ) { lwsl_notice("%s: RSA DP, DQ, QI must all appear " "or none\n", __func__); return -3; } /* * The precomputed private key terms must not appear without * the private key itself also appearing. */ if (jwk->kty == LWS_GENCRYPTO_KTY_RSA && !jwk->e[LWS_GENCRYPTO_RSA_KEYEL_D].buf && jwk->e[LWS_GENCRYPTO_RSA_KEYEL_DQ].buf) { lwsl_notice("%s: RSA DP, DQ, QI can appear only with " "private key\n", __func__); return -3; } if ((jwk->kty == LWS_GENCRYPTO_KTY_RSA || jwk->kty == LWS_GENCRYPTO_KTY_EC) && jwk->e[LWS_GENCRYPTO_RSA_KEYEL_D].buf) jwk->private_key = 1; } if (!(reason & LEJP_FLAG_CB_IS_VALUE) || !ctx->path_match) return 0; if (ctx->path_match == 0 + 1) return 0; idx = tok_map[ctx->path_match - 1]; if ((idx & 0xff) == 0xff) return 0; switch (idx) { /* note: kty is not necessarily first... we have to keep track of * what could match given which element names have already been * seen. Once kty comes, we confirm it'jwk still possible (ie, it'jwk * not trying to tell us that it'jwk RSA now when we saw a "crv" * earlier) and then reduce the possibilities to just the one that * kty told. */ case F_RSA | F_EC | F_OCT | F_META | F_M | JWK_META_KTY: if (ctx->npos == 3 && !strncmp(ctx->buf, "oct", 3)) { if (!(jps->possible & F_OCT)) goto elements_mismatch; jwk->kty = LWS_GENCRYPTO_KTY_OCT; jps->possible = F_OCT; goto cont; } if (ctx->npos == 3 && !strncmp(ctx->buf, "RSA", 3)) { if (!(jps->possible & F_RSA)) goto elements_mismatch; jwk->kty = LWS_GENCRYPTO_KTY_RSA; jps->possible = F_RSA; goto cont; } if (ctx->npos == 2 && !strncmp(ctx->buf, "EC", 2)) { if (!(jps->possible & F_EC)) goto elements_mismatch; jwk->kty = LWS_GENCRYPTO_KTY_EC; jps->possible = F_EC; goto cont; } lws_strnncpy(dotstar, ctx->buf, ctx->npos, sizeof(dotstar)); lwsl_err("%s: Unknown KTY '%s'\n", __func__, dotstar); return -1; default: cont: if (jps->pos + ctx->npos >= (int)sizeof(jps->b64)) goto bail; memcpy(jps->b64 + jps->pos, ctx->buf, ctx->npos); jps->pos += ctx->npos; if (reason == LEJPCB_VAL_STR_CHUNK) return 0; /* chunking has been collated */ poss = idx & (F_RSA | F_EC | F_OCT); jps->possible &= poss; if (!jps->possible) goto elements_mismatch; if (idx & F_META) { if (_lws_jwk_set_el_jwk(&jwk->meta[idx & 0x7f], jps->b64, (unsigned int)jps->pos) < 0) goto bail; break; } if (idx & F_B64U) { /* key data... do the base64 decode as needed */ if (_lws_jwk_set_el_jwk_b64u(&jwk->e[idx & 0x7f], jps->b64, jps->pos) < 0) goto bail; if (jwk->e[idx & 0x7f].len > LWS_JWE_LIMIT_KEY_ELEMENT_BYTES) { lwsl_notice("%s: oversize keydata\n", __func__); goto bail; } return 0; } if (idx & F_B64) { /* cert data... do non-urlcoded base64 decode */ if (_lws_jwk_set_el_jwk_b64(&jwk->e[idx & 0x7f], jps->b64, jps->pos) < 0) goto bail; return 0; } if (_lws_jwk_set_el_jwk(&jwk->e[idx & 0x7f], jps->b64, (unsigned int)jps->pos) < 0) goto bail; break; } return 0; elements_mismatch: lwsl_err("%s: jwk elements mismatch\n", __func__); bail: lwsl_err("%s: element failed\n", __func__); return -1; } int lws_jwk_import(struct lws_jwk *jwk, lws_jwk_key_import_callback cb, void *user, const char *in, size_t len) { struct lejp_ctx jctx; struct lws_jwk_parse_state jps; int m; lws_jwk_init_jps(&jps, jwk, cb, user); lejp_construct(&jctx, cb_jwk, &jps, cb ? jwk_outer_tok: jwk_tok, LWS_ARRAY_SIZE(jwk_tok)); m = lejp_parse(&jctx, (uint8_t *)in, (int)len); lejp_destruct(&jctx); if (m < 0) { lwsl_notice("%s: parse got %d\n", __func__, m); lws_jwk_destroy(jwk); return -1; } switch (jwk->kty) { case LWS_GENCRYPTO_KTY_UNKNOWN: lwsl_notice("%s: missing or unknown kty\n", __func__); lws_jwk_destroy(jwk); return -1; default: break; } return 0; } int lws_jwk_export(struct lws_jwk *jwk, int flags, char *p, int *len) { char *start = p, *end = &p[*len - 1]; int n, m, limit, first = 1, asym = 0; struct lexico *l; /* RFC7638 lexicographic order requires * RSA: e -> kty -> n * oct: k -> kty * * ie, meta and key data elements appear interleaved in name alpha order */ p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "{"); switch (jwk->kty) { case LWS_GENCRYPTO_KTY_OCT: l = lexico_oct; limit = LWS_ARRAY_SIZE(lexico_oct); break; case LWS_GENCRYPTO_KTY_RSA: l = lexico_rsa; limit = LWS_ARRAY_SIZE(lexico_rsa); asym = 1; break; case LWS_GENCRYPTO_KTY_EC: l = lexico_ec; limit = LWS_ARRAY_SIZE(lexico_ec); asym = 1; break; default: return -1; } for (n = 0; n < limit; n++) { const char *q, *q_end; char tok[12]; int pos = 0, f = 1; if ((l->meta & 1) && (jwk->meta[l->idx].buf || l->idx == (int)JWK_META_KTY)) { switch (l->idx) { case JWK_META_KTY: if (!first) *p++ = ','; first = 0; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "\"%s\":\"%s\"", l->name, kty_names[jwk->kty]); break; case JWK_META_KEY_OPS: if (!first) *p++ = ','; first = 0; q = (const char *)jwk->meta[l->idx].buf; q_end = q + jwk->meta[l->idx].len; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "\"%s\":[", l->name); /* * For the public version, usages that * require the private part must be * snipped */ while (q < q_end) { if (*q != ' ' && pos < (int)sizeof(tok) - 1) { tok[pos++] = *q++; if (q != q_end) continue; } tok[pos] = '\0'; pos = 0; if ((flags & LWSJWKF_EXPORT_PRIVATE) || !asym || (strcmp(tok, "sign") && strcmp(tok, "encrypt"))) { if (!f) *p++ = ','; f = 0; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "\"%s\"", tok); } q++; } *p++ = ']'; break; default: /* both sig and enc require asym private key */ if (!(flags & LWSJWKF_EXPORT_PRIVATE) && asym && l->idx == (int)JWK_META_USE) break; if (!first) *p++ = ','; first = 0; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "\"%s\":\"", l->name); lws_strnncpy(p, (const char *)jwk->meta[l->idx].buf, jwk->meta[l->idx].len, end - p); p += strlen(p); p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "\""); break; } } if ((!(l->meta & 1)) && jwk->e[l->idx].buf && ((flags & LWSJWKF_EXPORT_PRIVATE) || !(l->meta & 2))) { if (!first) *p++ = ','; first = 0; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "\"%s\":\"", l->name); if (jwk->kty == LWS_GENCRYPTO_KTY_EC && l->idx == (int)LWS_GENCRYPTO_EC_KEYEL_CRV) { lws_strnncpy(p, (const char *)jwk->e[l->idx].buf, jwk->e[l->idx].len, end - p); m = (int)strlen(p); } else m = lws_jws_base64_enc( (const char *)jwk->e[l->idx].buf, jwk->e[l->idx].len, p, lws_ptr_diff_size_t(end, p) - 4); if (m < 0) { lwsl_notice("%s: enc failed\n", __func__); return -1; } p += m; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "\""); } l++; } p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), (flags & LWSJWKF_EXPORT_NOCRLF) ? "}" : "}\n"); *len -= lws_ptr_diff(p, start); return lws_ptr_diff(p, start); } int lws_jwk_load(struct lws_jwk *jwk, const char *filename, lws_jwk_key_import_callback cb, void *user) { unsigned int buflen = 4096; char *buf = lws_malloc(buflen, "jwk-load"); int n; if (!buf) return -1; n = lws_plat_read_file(filename, buf, buflen); if (n < 0) goto bail; n = lws_jwk_import(jwk, cb, user, buf, (unsigned int)n); lws_free(buf); return n; bail: lws_free(buf); return -1; } int lws_jwk_save(struct lws_jwk *jwk, const char *filename) { int buflen = 4096; char *buf = lws_malloc((unsigned int)buflen, "jwk-save"); int n, m; if (!buf) return -1; n = lws_jwk_export(jwk, LWSJWKF_EXPORT_PRIVATE, buf, &buflen); if (n < 0) goto bail; m = lws_plat_write_file(filename, buf, (size_t)n); lws_free(buf); if (m) return -1; return 0; bail: lws_free(buf); return -1; } libwebsockets-4.3.5/lib/jose/jwk/jwk.c000066400000000000000000000155521476025525100176420ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * Shared JWK handling that's the same whether JOSE or COSE */ #include "private-lib-core.h" #include "private-lib-jose.h" static const char *meta_names[] = { "kty", "kid", "use", "key_ops", "x5c", "alg" }; static const char meta_b64[] = { 0, 0, 0, 0, 1, 0 }; static const char *oct_names[] = { "k" }; static const char oct_b64[] = { 1 }; static const char *rsa_names[] = { "e", "n", "d", "p", "q", "dp", "dq", "qi" }; static const char rsa_b64[] = { 1, 1, 1, 1, 1, 1, 1, 1 }; static const char *ec_names[] = { "crv", "x", "d", "y", }; static const char ec_b64[] = { 0, 1, 1, 1 }; int lws_jwk_dump(struct lws_jwk *jwk) { const char **enames, *b64; int elems; int n; (void)enames; (void)meta_names; switch (jwk->kty) { default: case LWS_GENCRYPTO_KTY_UNKNOWN: lwsl_err("%s: jwk %p: unknown type\n", __func__, jwk); return 1; case LWS_GENCRYPTO_KTY_OCT: elems = LWS_GENCRYPTO_OCT_KEYEL_COUNT; enames = oct_names; b64 = oct_b64; break; case LWS_GENCRYPTO_KTY_RSA: elems = LWS_GENCRYPTO_RSA_KEYEL_COUNT; enames = rsa_names; b64 = rsa_b64; break; case LWS_GENCRYPTO_KTY_EC: elems = LWS_GENCRYPTO_EC_KEYEL_COUNT; enames = ec_names; b64 = ec_b64; break; } lwsl_info("%s: jwk %p\n", __func__, jwk); for (n = 0; n < LWS_COUNT_JWK_ELEMENTS; n++) { if (jwk->meta[n].buf && meta_b64[n]) { lwsl_info(" meta: %s\n", meta_names[n]); lwsl_hexdump_info(jwk->meta[n].buf, jwk->meta[n].len); } if (jwk->meta[n].buf && !meta_b64[n]) lwsl_info(" meta: %s: '%s'\n", meta_names[n], jwk->meta[n].buf); } for (n = 0; n < elems; n++) { if (jwk->e[n].buf && b64[n]) { lwsl_info(" e: %s\n", enames[n]); lwsl_hexdump_info(jwk->e[n].buf, jwk->e[n].len); } if (jwk->e[n].buf && !b64[n]) lwsl_info(" e: %s: '%s'\n", enames[n], jwk->e[n].buf); } return 0; } int _lws_jwk_set_el_jwk(struct lws_gencrypto_keyelem *e, char *in, size_t len) { e->buf = lws_malloc(len + 1, "jwk"); if (!e->buf) return -1; memcpy(e->buf, in, len); e->buf[len] = '\0'; e->len = (uint32_t)len; return 0; } void lws_jwk_destroy_elements(struct lws_gencrypto_keyelem *el, int m) { int n; for (n = 0; n < m; n++) if (el[n].buf) { /* wipe all key material when it goes out of scope */ lws_explicit_bzero(el[n].buf, el[n].len); lws_free_set_NULL(el[n].buf); el[n].len = 0; } } void lws_jwk_destroy(struct lws_jwk *jwk) { lws_jwk_destroy_elements(jwk->e, LWS_ARRAY_SIZE(jwk->e)); lws_jwk_destroy_elements(jwk->meta, LWS_ARRAY_SIZE(jwk->meta)); } void lws_jwk_init_jps(struct lws_jwk_parse_state *jps, struct lws_jwk *jwk, lws_jwk_key_import_callback cb, void *user) { if (jwk) memset(jwk, 0, sizeof(*jwk)); jps->jwk = jwk; jps->possible = F_RSA | F_EC | F_OCT; jps->per_key_cb = cb; jps->user = user; jps->pos = 0; jps->seen = 0; jps->cose_state = 0; } int lws_jwk_dup_oct(struct lws_jwk *jwk, const void *key, int len) { unsigned int ulen = (unsigned int)len; jwk->e[LWS_GENCRYPTO_KTY_OCT].buf = lws_malloc(ulen, __func__); if (!jwk->e[LWS_GENCRYPTO_KTY_OCT].buf) return -1; jwk->kty = LWS_GENCRYPTO_KTY_OCT; jwk->e[LWS_GENCRYPTO_OCT_KEYEL_K].len = ulen; memcpy(jwk->e[LWS_GENCRYPTO_KTY_OCT].buf, key, ulen); return 0; } int lws_jwk_generate(struct lws_context *context, struct lws_jwk *jwk, enum lws_gencrypto_kty kty, int bits, const char *curve) { size_t sn; int n; memset(jwk, 0, sizeof(*jwk)); jwk->kty = (int)kty; jwk->private_key = 1; switch (kty) { case LWS_GENCRYPTO_KTY_RSA: { struct lws_genrsa_ctx ctx; lwsl_notice("%s: generating %d bit RSA key\n", __func__, bits); n = lws_genrsa_new_keypair(context, &ctx, LGRSAM_PKCS1_1_5, jwk->e, bits); lws_genrsa_destroy(&ctx); if (n) { lwsl_err("%s: problem generating RSA key\n", __func__); return 1; } } break; case LWS_GENCRYPTO_KTY_OCT: sn = (unsigned int)lws_gencrypto_bits_to_bytes(bits); jwk->e[LWS_GENCRYPTO_OCT_KEYEL_K].buf = lws_malloc(sn, "oct"); if (!jwk->e[LWS_GENCRYPTO_OCT_KEYEL_K].buf) return 1; jwk->e[LWS_GENCRYPTO_OCT_KEYEL_K].len = (uint32_t)sn; if (lws_get_random(context, jwk->e[LWS_GENCRYPTO_OCT_KEYEL_K].buf, sn) != sn) { lwsl_err("%s: problem getting random\n", __func__); return 1; } break; case LWS_GENCRYPTO_KTY_EC: { struct lws_genec_ctx ctx; if (!curve) { lwsl_err("%s: must have a named curve\n", __func__); return 1; } if (lws_genecdsa_create(&ctx, context, NULL)) return 1; lwsl_notice("%s: generating ECDSA key on curve %s\n", __func__, curve); n = lws_genecdsa_new_keypair(&ctx, curve, jwk->e); lws_genec_destroy(&ctx); if (n) { lwsl_err("%s: problem generating ECDSA key\n", __func__); return 1; } } break; case LWS_GENCRYPTO_KTY_UNKNOWN: default: lwsl_err("%s: unknown kty\n", __func__); return 1; } return 0; } int lws_jwk_rfc7638_fingerprint(struct lws_jwk *jwk, char *digest32) { struct lws_genhash_ctx hash_ctx; size_t tmpsize = 2536; char *tmp; int n, m = (int)tmpsize; tmp = lws_malloc(tmpsize, "rfc7638 tmp"); n = lws_jwk_export(jwk, LWSJWKF_EXPORT_NOCRLF, tmp, &m); if (n < 0) goto bail; if (lws_genhash_init(&hash_ctx, LWS_GENHASH_TYPE_SHA256)) goto bail; if (lws_genhash_update(&hash_ctx, tmp, (unsigned int)n)) { lws_genhash_destroy(&hash_ctx, NULL); goto bail; } lws_free(tmp); if (lws_genhash_destroy(&hash_ctx, digest32)) return -1; return 0; bail: lws_free(tmp); return -1; } int lws_jwk_strdup_meta(struct lws_jwk *jwk, enum enum_jwk_meta_tok idx, const char *in, int len) { jwk->meta[idx].buf = lws_malloc((unsigned int)len, __func__); if (!jwk->meta[idx].buf) return 1; jwk->meta[idx].len = (uint32_t)(unsigned int)len; memcpy(jwk->meta[idx].buf, in, (unsigned int)len); return 0; } libwebsockets-4.3.5/lib/jose/jws/000077500000000000000000000000001476025525100167035ustar00rootroot00000000000000libwebsockets-4.3.5/lib/jose/jws/jose.c000066400000000000000000000372331476025525100200170ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * JOSE is actually specified as part of JWS RFC7515. JWE references RFC7515 * to specify its JOSE JSON object. So it lives in ./lib/jose/jws/jose.c. */ #include "private-lib-core.h" #include "jose/private-lib-jose.h" #include static const char * const jws_jose[] = { "alg", /* REQUIRED */ "jku", "jwk", "kid", "x5u", "x5c", "x5t", "x5t#S256", "typ", "cty", "crit", /* valid for JWE only below here */ "recipients[].header", "recipients[].header.alg", "recipients[].header.kid", "recipients[].encrypted_key", "enc", "zip", /* ("DEF" = deflate) */ "epk", /* valid for JWE ECDH only */ "apu", /* valid for JWE ECDH only */ "apv", /* valid for JWE ECDH only */ "iv", /* valid for JWE AES only */ "tag", /* valid for JWE AES only */ "p2s", /* valid for JWE PBES2 only */ "p2c" /* valid for JWE PBES2 only */ }; struct jose_cb_args { struct lws_jose *jose; struct lejp_ctx jwk_jctx; /* fake lejp context used to parse epk */ struct lws_jwk_parse_state jps; /* fake jwk parse state */ char *temp; int *temp_len; unsigned int is_jwe; unsigned int recipients_array; int recip; }; /* * JWE A.4.7 Complete JWE JSON Serialization example * * LEJPCB_CONSTRUCTED * LEJPCB_START * LEJPCB_OBJECT_START * * protected LEJPCB_PAIR_NAME * protected LEJPCB_VAL_STR_START * protected LEJPCB_VAL_STR_END * * unprotected LEJPCB_PAIR_NAME * unprotected LEJPCB_OBJECT_START * unprotected.jku LEJPCB_PAIR_NAME * unprotected.jku LEJPCB_VAL_STR_START * unprotected.jku LEJPCB_VAL_STR_END * unprotected.jku LEJPCB_OBJECT_END * * recipients LEJPCB_PAIR_NAME * recipients[] LEJPCB_ARRAY_START * * recipients[] LEJPCB_OBJECT_START * recipients[].header LEJPCB_PAIR_NAME * recipients[].header LEJPCB_OBJECT_START * recipients[].header.alg LEJPCB_PAIR_NAME * recipients[].header.alg LEJPCB_VAL_STR_START * recipients[].header.alg LEJPCB_VAL_STR_END * recipients[].header.kid LEJPCB_PAIR_NAME * recipients[].header.kid LEJPCB_VAL_STR_START * recipients[].header.kid LEJPCB_VAL_STR_END * recipients[] LEJPCB_OBJECT_END * recipients[].encrypted_key LEJPCB_PAIR_NAME * recipients[].encrypted_key LEJPCB_VAL_STR_START * recipients[].encrypted_key LEJPCB_VAL_STR_CHUNK * recipients[].encrypted_key LEJPCB_VAL_STR_END * recipients[] LEJPCB_OBJECT_END (ctx->sp = 1) * * recipients[] LEJPCB_OBJECT_START * recipients[].header LEJPCB_PAIR_NAME * recipients[].header LEJPCB_OBJECT_START * recipients[].header.alg LEJPCB_PAIR_NAME * recipients[].header.alg LEJPCB_VAL_STR_START * recipients[].header.alg LEJPCB_VAL_STR_END * recipients[].header.kid LEJPCB_PAIR_NAME * recipients[].header.kid LEJPCB_VAL_STR_START * recipients[].header.kid LEJPCB_VAL_STR_END * recipients[] LEJPCB_OBJECT_END * recipients[].encrypted_key LEJPCB_PAIR_NAME * recipients[].encrypted_key LEJPCB_VAL_STR_START * recipients[].encrypted_key LEJPCB_VAL_STR_END * recipients[] LEJPCB_OBJECT_END (ctx->sp = 1) * * recipients[] LEJPCB_ARRAY_END * * iv LEJPCB_PAIR_NAME * iv LEJPCB_VAL_STR_START * iv LEJPCB_VAL_STR_END * ciphertext LEJPCB_PAIR_NAME * ciphertext LEJPCB_VAL_STR_START * ciphertext LEJPCB_VAL_STR_END * tag LEJPCB_PAIR_NAME * tag LEJPCB_VAL_STR_START * tag LEJPCB_VAL_STR_END * * tag LEJPCB_OBJECT_END * tag LEJPCB_COMPLETE * tag LEJPCB_DESTRUCTED * */ /* * RFC7516 7.2.2 * * Note that when using the flattened syntax, just as when using the * general syntax, any unprotected Header Parameter values can reside in * either the "unprotected" member or the "header" member, or in both. */ static signed char lws_jws_jose_cb(struct lejp_ctx *ctx, char reason) { struct jose_cb_args *args = (struct jose_cb_args *)ctx->user; int n; //, dest; /* * In JOSE JSON, the element "epk" contains a fully-formed JWK. * * For JOSE paths beginning "epk.", we pass them through to a JWK * LEJP subcontext to parse using the JWK parser directly. */ if (args->is_jwe && !strncmp(ctx->path, "epk.", 4)) { memcpy(args->jwk_jctx.path, ctx->path + 4, sizeof(ctx->path) - 4); memcpy(args->jwk_jctx.buf, ctx->buf, ctx->npos); args->jwk_jctx.npos = ctx->npos; if (!ctx->path_match) args->jwk_jctx.path_match = 0; lejp_check_path_match(&args->jwk_jctx); if (args->jwk_jctx.path_match) args->jwk_jctx.pst[args->jwk_jctx.pst_sp]. callback(&args->jwk_jctx, reason); } // lwsl_notice("%s: %s %d (%d)\n", __func__, ctx->path, reason, ctx->sp); /* at the end of each recipients[] entry, bump recipients count */ if (args->is_jwe && reason == LEJPCB_OBJECT_END && ctx->sp == 1 && !strcmp(ctx->path, "recipients[]")) args->jose->recipients++; if (!(reason & LEJP_FLAG_CB_IS_VALUE) || !ctx->path_match) return 0; //dest = ctx->path_match - 1; switch (ctx->path_match - 1) { /* strings */ case LJJHI_ALG: /* REQUIRED */ /* * look up whether we support this alg and point the caller at * its definition if so */ if (!args->is_jwe && lws_gencrypto_jws_alg_to_definition(ctx->buf, &args->jose->alg)) { lwsl_notice("%s: unknown alg '%s'\n", __func__, ctx->buf); return -1; } if (args->is_jwe && lws_gencrypto_jwe_alg_to_definition(ctx->buf, &args->jose->alg)) { lwsl_notice("%s: unknown JWE alg '%s'\n", __func__, ctx->buf); return -1; } return 0; case LJJHI_TYP: /* Optional: string: media type */ lws_strnncpy(args->jose->typ, ctx->buf, ctx->npos, sizeof(args->jose->typ)); break; case LJJHI_JKU: /* Optional: string */ case LJJHI_KID: /* Optional: string */ case LJJHI_X5U: /* Optional: string: url of public key cert / chain */ case LJJHI_CTY: /* Optional: string: content media type */ /* base64 */ case LJJHI_X5C: /* Optional: base64 (NOT -url): actual cert */ /* base64-url */ case LJJHI_X5T: /* Optional: base64url: SHA-1 of actual cert */ case LJJHI_X5T_S256: /* Optional: base64url: SHA-256 of actual cert */ /* array of strings */ case LJJHI_CRIT: /* Optional for send, REQUIRED: array of strings: * mustn't contain standardized strings or null set */ break; /* jwk child */ case LJJHI_JWK: /* Optional: jwk JSON object: public key: */ /* past here, JWE only */ case LJJHI_RECIPS_HDR: if (!args->is_jwe) { lwsl_info("%s: recipients in jws\n", __func__); return -1; } args->recipients_array = 1; break; case LJJHI_RECIPS_HDR_ALG: case LJJHI_RECIPS_HDR_KID: break; case LJJHI_RECIPS_EKEY: if (!args->is_jwe) { lwsl_info("%s: recipients in jws\n", __func__); return -1; } args->recipients_array = 1; //dest = ; goto append_string; case LJJHI_ENC: /* JWE only: Mandatory: string */ if (!args->is_jwe) { lwsl_info("%s: enc in jws\n", __func__); return -1; } if (lws_gencrypto_jwe_enc_to_definition(ctx->buf, &args->jose->enc_alg)) { lwsl_notice("%s: unknown enc '%s'\n", __func__, ctx->buf); return -1; } break; case LJJHI_ZIP: /* JWE only: Optional: string ("DEF" = deflate) */ if (!args->is_jwe) return -1; goto append_string; case LJJHI_EPK: /* Additional arg for JWE ECDH */ if (!args->is_jwe) return -1; /* Ephemeral key... this JSON subsection is actually a JWK */ lwsl_err("LJJHI_EPK\n"); break; case LJJHI_APU: /* Additional arg for JWE ECDH */ if (!args->is_jwe) return -1; /* Agreement Party U */ goto append_string; case LJJHI_APV: /* Additional arg for JWE ECDH */ if (!args->is_jwe) return -1; /* Agreement Party V */ goto append_string; case LJJHI_IV: /* Additional arg for JWE AES */ if (!args->is_jwe) return -1; goto append_string; case LJJHI_TAG: /* Additional arg for JWE AES */ if (!args->is_jwe) return -1; goto append_string; case LJJHI_P2S: /* Additional arg for JWE PBES2 */ if (!args->is_jwe) return -1; goto append_string; case LJJHI_P2C: /* Additional arg for JWE PBES2 */ if (!args->is_jwe) return -1; goto append_string; /* ignore what we don't understand */ default: return 0; } return 0; append_string: if (*args->temp_len < ctx->npos) { lwsl_err("%s: out of parsing space\n", __func__); return -1; } if (!args->jose->e[ctx->path_match - 1].buf) { args->jose->e[ctx->path_match - 1].buf = (uint8_t *)args->temp; args->jose->e[ctx->path_match - 1].len = 0; } memcpy(args->temp, ctx->buf, ctx->npos); args->temp += ctx->npos; *args->temp_len -= ctx->npos; args->jose->e[ctx->path_match - 1].len += ctx->npos; if (reason == LEJPCB_VAL_STR_END) { n = lws_b64_decode_string_len( (const char *)args->jose->e[ctx->path_match - 1].buf, (int)args->jose->e[ctx->path_match - 1].len, (char *)args->jose->e[ctx->path_match - 1].buf, (int)args->jose->e[ctx->path_match - 1].len + 1); if (n < 0) { lwsl_err("%s: b64 decode failed\n", __func__); return -1; } args->temp -= (int)args->jose->e[ctx->path_match - 1].len - n - 1; *args->temp_len += (int)args->jose->e[ctx->path_match - 1].len - n - 1; args->jose->e[ctx->path_match - 1].len = (uint32_t)n; } return 0; } void lws_jose_init(struct lws_jose *jose) { memset(jose, 0, sizeof(*jose)); } static void lws_jose_recip_destroy(struct lws_jws_recpient *r) { lws_jwk_destroy(&r->jwk_ephemeral); lws_jwk_destroy(&r->jwk); } void lws_jose_destroy(struct lws_jose *jose) { int n; for (n = 0; n < (int)LWS_ARRAY_SIZE(jose->recipient); n++) lws_jose_recip_destroy(&jose->recipient[n]); } static int lws_jose_parse(struct lws_jose *jose, const uint8_t *buf, int n, char *temp, int *temp_len, int is_jwe) { struct lejp_ctx jctx; struct jose_cb_args args; int m; if (is_jwe) { /* prepare a context for JOSE epk ephemeral jwk parsing */ lws_jwk_init_jps(&args.jps, &jose->recipient[jose->recipients].jwk_ephemeral, NULL, NULL); lejp_construct(&args.jwk_jctx, cb_jwk, &args.jps, jwk_tok, LWS_ARRAY_SIZE(jwk_tok)); } args.is_jwe = (unsigned int)is_jwe; args.temp = temp; args.temp_len = temp_len; args.jose = jose; args.recip = 0; args.recipients_array = 0; jose->recipients = 0; lejp_construct(&jctx, lws_jws_jose_cb, &args, jws_jose, LWS_ARRAY_SIZE(jws_jose)); m = lejp_parse(&jctx, (uint8_t *)buf, n); lejp_destruct(&jctx); if (m < 0) { lwsl_notice("%s: parse returned %d\n", __func__, m); return -1; } if (!args.recipients_array && jose->recipient[0].unprot[LJJHI_ALG].buf) /* if no explicit recipients[], we got one */ jose->recipients++; return 0; } int lws_jws_parse_jose(struct lws_jose *jose, const char *buf, int len, char *temp, int *temp_len) { return lws_jose_parse(jose, (const uint8_t *)buf, len, temp, temp_len, 0); } int lws_jwe_parse_jose(struct lws_jose *jose, const char *buf, int len, char *temp, int *temp_len) { return lws_jose_parse(jose, (const uint8_t *)buf, len, temp, temp_len, 1); } int lws_jose_render(struct lws_jose *jose, struct lws_jwk *aux_jwk, char *out, size_t out_len) { struct lws_jwk *jwk; char *end = out + out_len - 1; int n, m, f, sub = 0, vl; /* JOSE requires an alg */ if (!jose->alg || !jose->alg->alg) goto bail; *out++ = '{'; for (n = 0; n < LWS_COUNT_JOSE_HDR_ELEMENTS; n++) { switch (n) { /* strings */ case LJJHI_ALG: /* REQUIRED */ case LJJHI_JKU: /* Optional: string */ case LJJHI_KID: /* Optional: string */ case LJJHI_TYP: /* Optional: string: media type */ case LJJHI_CTY: /* Optional: string: content media type */ case LJJHI_X5U: /* Optional: string: pubkey cert / chain URL */ case LJJHI_ENC: /* JWE only: Optional: string */ case LJJHI_ZIP: /* JWE only: Optional: string ("DEF"=deflate) */ if (jose->e[n].buf) { out += lws_snprintf(out, lws_ptr_diff_size_t(end, out), "%s\"%s\":\"%s\"", sub ? ",\n" : "", jws_jose[n], jose->e[n].buf); sub = 1; } break; case LJJHI_X5T: /* Optional: base64url: SHA-1 of actual cert */ case LJJHI_X5T_S256: /* Optional: base64url: SHA-256 of cert */ case LJJHI_APU: /* Additional arg for JWE ECDH: b64url */ case LJJHI_APV: /* Additional arg for JWE ECDH: b64url */ case LJJHI_IV: /* Additional arg for JWE AES: b64url */ case LJJHI_TAG: /* Additional arg for JWE AES: b64url */ case LJJHI_P2S: /* Additional arg for JWE PBES2: b64url: salt */ if (jose->e[n].buf) { out += lws_snprintf(out, lws_ptr_diff_size_t(end, out), "%s\"%s\":\"", sub ? ",\n" : "", jws_jose[n]); sub = 1; m = lws_b64_encode_string_url((const char *) jose->e[n].buf, (int)jose->e[n].len, out, lws_ptr_diff(end, out)); if (m < 0) return -1; out += m; out += lws_snprintf(out, lws_ptr_diff_size_t(end, out), "\""); } break; case LJJHI_P2C: /* Additional arg for JWE PBES2: int: count */ break; /* don't support atm */ case LJJHI_X5C: /* Optional: base64 (NOT -url): actual cert */ if (jose->e[n].buf) { out += lws_snprintf(out, lws_ptr_diff_size_t(end, out), "%s\"%s\":\"", sub ? ",\n" : "", jws_jose[n]); sub = 1; m = lws_b64_encode_string((const char *) jose->e[n].buf, (int)jose->e[n].len, out, lws_ptr_diff(end, out)); if (m < 0) return -1; out += m; out += lws_snprintf(out, lws_ptr_diff_size_t(end, out), "\""); } break; case LJJHI_EPK: /* Additional arg for JWE ECDH: eph pubkey */ case LJJHI_JWK: /* Optional: jwk JSON object: public key: */ jwk = n == LJJHI_EPK ? &jose->recipient[0].jwk_ephemeral : aux_jwk; if (!jwk || !jwk->kty) break; out += lws_snprintf(out, lws_ptr_diff_size_t(end, out), "%s\"%s\":", sub ? ",\n" : "", jws_jose[n]); sub = 1; vl = lws_ptr_diff(end, out); m = lws_jwk_export(jwk, 0, out, &vl); if (m < 0) { lwsl_notice("%s: failed to export key\n", __func__); return -1; } out += m; break; case LJJHI_CRIT:/* Optional for send, REQUIRED: array of strings: * mustn't contain standardized strings or null set */ if (!jose->e[n].buf) break; out += lws_snprintf(out, lws_ptr_diff_size_t(end, out), "%s\"%s\":[", sub ? ",\n" : "", jws_jose[n]); sub = 1; m = 0; f = 1; while ((unsigned int)m < jose->e[n].len && (end - out) > 1) { if (jose->e[n].buf[m] == ' ') { if (!f) *out++ = '\"'; m++; f = 1; continue; } if (f) { if (m) *out++ = ','; *out++ = '\"'; f = 0; } *out++ = (char)jose->e[n].buf[m]; m++; } break; } } *out++ = '}'; if (out > end - 2) return -1; return lws_ptr_diff(out_len, (end - out)) - 1; bail: return -1; } libwebsockets-4.3.5/lib/jose/jws/jws.c000066400000000000000000000751431476025525100176640ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "private-lib-jose-jws.h" /* * Currently only support flattened or compact (implicitly single signature) */ static const char * const jws_json[] = { "protected", /* base64u */ "header", /* JSON */ "payload", /* base64u payload */ "signature", /* base64u signature */ //"signatures[].protected", //"signatures[].header", //"signatures[].signature" }; enum lws_jws_json_tok { LJWSJT_PROTECTED, LJWSJT_HEADER, LJWSJT_PAYLOAD, LJWSJT_SIGNATURE, // LJWSJT_SIGNATURES_PROTECTED, // LJWSJT_SIGNATURES_HEADER, // LJWSJT_SIGNATURES_SIGNATURE, }; /* parse a JWS complete or flattened JSON object */ struct jws_cb_args { struct lws_jws *jws; char *temp; int *temp_len; }; static signed char lws_jws_json_cb(struct lejp_ctx *ctx, char reason) { struct jws_cb_args *args = (struct jws_cb_args *)ctx->user; int n, m; if (!(reason & LEJP_FLAG_CB_IS_VALUE) || !ctx->path_match) return 0; switch (ctx->path_match - 1) { /* strings */ case LJWSJT_PROTECTED: /* base64u: JOSE: must contain 'alg' */ m = LJWS_JOSE; goto append_string; case LJWSJT_PAYLOAD: /* base64u */ m = LJWS_PYLD; goto append_string; case LJWSJT_SIGNATURE: /* base64u */ m = LJWS_SIG; goto append_string; case LJWSJT_HEADER: /* unprotected freeform JSON */ break; default: return -1; } return 0; append_string: if (*args->temp_len < ctx->npos) { lwsl_err("%s: out of parsing space\n", __func__); return -1; } /* * We keep both b64u and decoded in temp mapped using map / map_b64, * the jws signature is actually over the b64 content not the plaintext, * and we can't do it until we see the protected alg. */ if (!args->jws->map_b64.buf[m]) { args->jws->map_b64.buf[m] = args->temp; args->jws->map_b64.len[m] = 0; } memcpy(args->temp, ctx->buf, ctx->npos); args->temp += ctx->npos; *args->temp_len -= ctx->npos; args->jws->map_b64.len[m] += ctx->npos; if (reason == LEJPCB_VAL_STR_END) { args->jws->map.buf[m] = args->temp; n = lws_b64_decode_string_len( (const char *)args->jws->map_b64.buf[m], (int)args->jws->map_b64.len[m], (char *)args->temp, *args->temp_len); if (n < 0) { lwsl_err("%s: b64 decode failed: in len %d, m %d\n", __func__, (int)args->jws->map_b64.len[m], m); return -1; } args->temp += n; *args->temp_len -= n; args->jws->map.len[m] = (unsigned int)n; } return 0; } static int lws_jws_json_parse(struct lws_jws *jws, const uint8_t *buf, int len, char *temp, int *temp_len) { struct jws_cb_args args; struct lejp_ctx jctx; int m = 0; args.jws = jws; args.temp = temp; args.temp_len = temp_len; lejp_construct(&jctx, lws_jws_json_cb, &args, jws_json, LWS_ARRAY_SIZE(jws_json)); m = lejp_parse(&jctx, (uint8_t *)buf, len); lejp_destruct(&jctx); if (m < 0) { lwsl_notice("%s: parse returned %d\n", __func__, m); return -1; } return 0; } void lws_jws_init(struct lws_jws *jws, struct lws_jwk *jwk, struct lws_context *context) { memset(jws, 0, sizeof(*jws)); jws->context = context; jws->jwk = jwk; } static void lws_jws_map_bzero(struct lws_jws_map *map) { int n; /* no need to scrub first jose header element (it can be canned then) */ for (n = 1; n < LWS_JWS_MAX_COMPACT_BLOCKS; n++) if (map->buf[n]) lws_explicit_bzero((void *)map->buf[n], map->len[n]); } void lws_jws_destroy(struct lws_jws *jws) { lws_jws_map_bzero(&jws->map); jws->jwk = NULL; } int lws_jws_dup_element(struct lws_jws_map *map, int idx, char *temp, int *temp_len, const void *in, size_t in_len, size_t actual_alloc) { if (!actual_alloc) actual_alloc = in_len; if ((size_t)*temp_len < actual_alloc) return -1; memcpy(temp, in, in_len); map->len[idx] = (uint32_t)in_len; map->buf[idx] = temp; *temp_len -= (int)actual_alloc; return 0; } int lws_jws_encode_b64_element(struct lws_jws_map *map, int idx, char *temp, int *temp_len, const void *in, size_t in_len) { int n; if (*temp_len < lws_base64_size((int)in_len)) return -1; n = lws_jws_base64_enc(in, in_len, temp, (size_t)*temp_len); if (n < 0) return -1; map->len[idx] = (unsigned int)n; map->buf[idx] = temp; *temp_len -= n; return 0; } int lws_jws_randomize_element(struct lws_context *context, struct lws_jws_map *map, int idx, char *temp, int *temp_len, size_t random_len, size_t actual_alloc) { if (!actual_alloc) actual_alloc = random_len; if ((size_t)*temp_len < actual_alloc) return -1; map->len[idx] = (uint32_t)random_len; map->buf[idx] = temp; if (lws_get_random(context, temp, random_len) != random_len) { lwsl_err("Problem getting random\n"); return -1; } *temp_len -= (int)actual_alloc; return 0; } int lws_jws_alloc_element(struct lws_jws_map *map, int idx, char *temp, int *temp_len, size_t len, size_t actual_alloc) { if (!actual_alloc) actual_alloc = len; if ((size_t)*temp_len < actual_alloc) return -1; map->len[idx] = (uint32_t)len; map->buf[idx] = temp; *temp_len -= (int)actual_alloc; return 0; } int lws_jws_base64_enc(const char *in, size_t in_len, char *out, size_t out_max) { int n; n = lws_b64_encode_string_url(in, (int)in_len, out, (int)out_max - 1); if (n < 0) { lwsl_notice("%s: in len %d too large for %d out buf\n", __func__, (int)in_len, (int)out_max); return n; /* too large for output buffer */ } /* trim the terminal = */ while (n && out[n - 1] == '=') n--; out[n] = '\0'; return n; } int lws_jws_b64_compact_map(const char *in, int len, struct lws_jws_map *map) { int me = 0; memset(map, 0, sizeof(*map)); map->buf[me] = (char *)in; map->len[me] = 0; while (len--) { if (*in++ == '.') { if (++me == LWS_JWS_MAX_COMPACT_BLOCKS) return -1; map->buf[me] = (char *)in; map->len[me] = 0; continue; } map->len[me]++; } return me + 1; } /* b64 in, map contains decoded elements, if non-NULL, * map_b64 set to b64 elements */ int lws_jws_compact_decode(const char *in, int len, struct lws_jws_map *map, struct lws_jws_map *map_b64, char *out, int *out_len) { int blocks, n, m = 0; if (!map_b64) map_b64 = map; memset(map_b64, 0, sizeof(*map_b64)); memset(map, 0, sizeof(*map)); blocks = lws_jws_b64_compact_map(in, len, map_b64); if (blocks > LWS_JWS_MAX_COMPACT_BLOCKS) return -1; while (m < blocks) { n = lws_b64_decode_string_len(map_b64->buf[m], (int)map_b64->len[m], out, *out_len); if (n < 0) { lwsl_err("%s: b64 decode failed\n", __func__); return -1; } /* replace the map entry with the decoded content */ if (n) map->buf[m] = out; else map->buf[m] = NULL; map->len[m++] = (unsigned int)n; out += n; *out_len -= n; if (*out_len < 1) return -1; } return blocks; } static int lws_jws_compact_decode_map(struct lws_jws_map *map_b64, struct lws_jws_map *map, char *out, int *out_len) { int n, m = 0; for (n = 0; n < LWS_JWS_MAX_COMPACT_BLOCKS; n++) { n = lws_b64_decode_string_len(map_b64->buf[m], (int)map_b64->len[m], out, *out_len); if (n < 0) { lwsl_err("%s: b64 decode failed\n", __func__); return -1; } /* replace the map entry with the decoded content */ map->buf[m] = out; map->len[m++] = (unsigned int)n; out += n; *out_len -= n; if (*out_len < 1) return -1; } return 0; } int lws_jws_encode_section(const char *in, size_t in_len, int first, char **p, char *end) { int n, len = lws_ptr_diff(end, (*p)) - 1; char *p_entry = *p; if (len < 3) return -1; if (!first) *(*p)++ = '.'; n = lws_jws_base64_enc(in, in_len, *p, (unsigned int)len - 1); if (n < 0) return -1; *p += n; return lws_ptr_diff((*p), p_entry); } int lws_jws_compact_encode(struct lws_jws_map *map_b64, /* b64-encoded */ const struct lws_jws_map *map, /* non-b64 */ char *buf, int *len) { int n, m; for (n = 0; n < LWS_JWS_MAX_COMPACT_BLOCKS; n++) { if (!map->buf[n]) { map_b64->buf[n] = NULL; map_b64->len[n] = 0; continue; } m = lws_jws_base64_enc(map->buf[n], map->len[n], buf, (size_t)*len); if (m < 0) return -1; buf += m; *len -= m; if (*len < 1) return -1; } return 0; } /* * This takes both a base64 -encoded map and a plaintext map. * * JWS demands base-64 encoded elements for hash computation and at least for * the JOSE header and signature, decoded versions too. */ int lws_jws_sig_confirm(struct lws_jws_map *map_b64, struct lws_jws_map *map, struct lws_jwk *jwk, struct lws_context *context) { enum enum_genrsa_mode padding = LGRSAM_PKCS1_1_5; char temp[256]; int n, h_len, b = 3, temp_len = sizeof(temp); uint8_t digest[LWS_GENHASH_LARGEST]; struct lws_genhash_ctx hash_ctx; struct lws_genec_ctx ecdsactx; struct lws_genrsa_ctx rsactx; struct lws_genhmac_ctx ctx; struct lws_jose jose; lws_jose_init(&jose); /* only valid if no signature or key */ if (!map_b64->buf[LJWS_SIG] && !map->buf[LJWS_UHDR]) b = 2; if (lws_jws_parse_jose(&jose, map->buf[LJWS_JOSE], (int)map->len[LJWS_JOSE], temp, &temp_len) < 0 || !jose.alg) { lwsl_notice("%s: parse failed\n", __func__); return -1; } if (!strcmp(jose.alg->alg, "none")) { /* "none" compact serialization has 2 blocks: jose.payload */ if (b != 2 || jwk) return -1; /* the lack of a key matches the lack of a signature */ return 0; } /* all other have 3 blocks: jose.payload.sig */ if (b != 3 || !jwk) { lwsl_notice("%s: %d blocks\n", __func__, b); return -1; } switch (jose.alg->algtype_signing) { case LWS_JOSE_ENCTYPE_RSASSA_PKCS1_PSS: case LWS_JOSE_ENCTYPE_RSASSA_PKCS1_OAEP: padding = LGRSAM_PKCS1_OAEP_PSS; /* fallthru */ case LWS_JOSE_ENCTYPE_RSASSA_PKCS1_1_5: /* RSASSA-PKCS1-v1_5 or OAEP using SHA-256/384/512 */ if (jwk->kty != LWS_GENCRYPTO_KTY_RSA) return -1; /* 6(RSA): compute the hash of the payload into "digest" */ if (lws_genhash_init(&hash_ctx, jose.alg->hash_type)) return -1; /* * JWS Signing Input value: * * BASE64URL(UTF8(JWS Protected Header)) || '.' || * BASE64URL(JWS Payload) */ if (lws_genhash_update(&hash_ctx, map_b64->buf[LJWS_JOSE], map_b64->len[LJWS_JOSE]) || lws_genhash_update(&hash_ctx, ".", 1) || lws_genhash_update(&hash_ctx, map_b64->buf[LJWS_PYLD], map_b64->len[LJWS_PYLD]) || lws_genhash_destroy(&hash_ctx, digest)) { lws_genhash_destroy(&hash_ctx, NULL); return -1; } // h_len = lws_genhash_size(jose.alg->hash_type); if (lws_genrsa_create(&rsactx, jwk->e, context, padding, LWS_GENHASH_TYPE_UNKNOWN)) { lwsl_notice("%s: lws_genrsa_public_decrypt_create\n", __func__); return -1; } n = lws_genrsa_hash_sig_verify(&rsactx, digest, jose.alg->hash_type, (uint8_t *)map->buf[LJWS_SIG], map->len[LJWS_SIG]); lws_genrsa_destroy(&rsactx); if (n < 0) { lwsl_notice("%s: decrypt fail\n", __func__); return -1; } break; case LWS_JOSE_ENCTYPE_NONE: /* HSxxx */ /* SHA256/384/512 HMAC */ h_len = (int)lws_genhmac_size(jose.alg->hmac_type); /* 6) compute HMAC over payload */ if (lws_genhmac_init(&ctx, jose.alg->hmac_type, jwk->e[LWS_GENCRYPTO_RSA_KEYEL_E].buf, jwk->e[LWS_GENCRYPTO_RSA_KEYEL_E].len)) return -1; /* * JWS Signing Input value: * * BASE64URL(UTF8(JWS Protected Header)) || '.' || * BASE64URL(JWS Payload) */ if (lws_genhmac_update(&ctx, map_b64->buf[LJWS_JOSE], map_b64->len[LJWS_JOSE]) || lws_genhmac_update(&ctx, ".", 1) || lws_genhmac_update(&ctx, map_b64->buf[LJWS_PYLD], map_b64->len[LJWS_PYLD]) || lws_genhmac_destroy(&ctx, digest)) { lws_genhmac_destroy(&ctx, NULL); return -1; } /* 7) Compare the computed and decoded hashes */ if (lws_timingsafe_bcmp(digest, map->buf[2], (uint32_t)h_len)) { lwsl_notice("digest mismatch\n"); return -1; } break; case LWS_JOSE_ENCTYPE_ECDSA: /* ECDSA using SHA-256/384/512 */ /* Confirm the key coming in with this makes sense */ /* has to be an EC key :-) */ if (jwk->kty != LWS_GENCRYPTO_KTY_EC) return -1; /* key must state its curve */ if (!jwk->e[LWS_GENCRYPTO_EC_KEYEL_CRV].buf) return -1; /* key must match the selected alg curve */ if (strcmp((const char *)jwk->e[LWS_GENCRYPTO_EC_KEYEL_CRV].buf, jose.alg->curve_name)) return -1; /* * JWS Signing Input value: * * BASE64URL(UTF8(JWS Protected Header)) || '.' || * BASE64URL(JWS Payload) * * Validating the JWS Signature is a bit different from the * previous examples. We need to split the 64 member octet * sequence of the JWS Signature (which is base64url decoded * from the value encoded in the JWS representation) into two * 32 octet sequences, the first representing R and the second * S. We then pass the public key (x, y), the signature (R, S), * and the JWS Signing Input (which is the initial substring of * the JWS Compact Serialization representation up until but not * including the second period character) to an ECDSA signature * verifier that has been configured to use the P-256 curve with * the SHA-256 hash function. */ if (lws_genhash_init(&hash_ctx, jose.alg->hash_type) || lws_genhash_update(&hash_ctx, map_b64->buf[LJWS_JOSE], map_b64->len[LJWS_JOSE]) || lws_genhash_update(&hash_ctx, ".", 1) || lws_genhash_update(&hash_ctx, map_b64->buf[LJWS_PYLD], map_b64->len[LJWS_PYLD]) || lws_genhash_destroy(&hash_ctx, digest)) { lws_genhash_destroy(&hash_ctx, NULL); return -1; } h_len = (int)lws_genhash_size(jose.alg->hash_type); if (lws_genecdsa_create(&ecdsactx, context, NULL)) { lwsl_notice("%s: lws_genrsa_public_decrypt_create\n", __func__); return -1; } if (lws_genecdsa_set_key(&ecdsactx, jwk->e)) { lws_genec_destroy(&ecdsactx); lwsl_notice("%s: ec key import fail\n", __func__); return -1; } n = lws_genecdsa_hash_sig_verify_jws(&ecdsactx, digest, jose.alg->hash_type, jose.alg->keybits_fixed, (uint8_t *)map->buf[LJWS_SIG], map->len[LJWS_SIG]); lws_genec_destroy(&ecdsactx); if (n < 0) { lwsl_notice("%s: verify fail\n", __func__); return -1; } break; default: lwsl_err("%s: unknown alg from jose\n", __func__); return -1; } return 0; } /* it's already a b64 map, we will make a temp plain version */ int lws_jws_sig_confirm_compact_b64_map(struct lws_jws_map *map_b64, struct lws_jwk *jwk, struct lws_context *context, char *temp, int *temp_len) { struct lws_jws_map map; int n; n = lws_jws_compact_decode_map(map_b64, &map, temp, temp_len); if (n > 3 || n < 0) return -1; return lws_jws_sig_confirm(map_b64, &map, jwk, context); } /* * it's already a compact / concatenated b64 string, we will make a temp * plain version */ int lws_jws_sig_confirm_compact_b64(const char *in, size_t len, struct lws_jws_map *map, struct lws_jwk *jwk, struct lws_context *context, char *temp, int *temp_len) { struct lws_jws_map map_b64; int n; if (lws_jws_b64_compact_map(in, (int)len, &map_b64) < 0) return -1; n = lws_jws_compact_decode(in, (int)len, map, &map_b64, temp, temp_len); if (n > 3 || n < 0) return -1; return lws_jws_sig_confirm(&map_b64, map, jwk, context); } /* it's already plain, we will make a temp b64 version */ int lws_jws_sig_confirm_compact(struct lws_jws_map *map, struct lws_jwk *jwk, struct lws_context *context, char *temp, int *temp_len) { struct lws_jws_map map_b64; if (lws_jws_compact_encode(&map_b64, map, temp, temp_len) < 0) return -1; return lws_jws_sig_confirm(&map_b64, map, jwk, context); } int lws_jws_sig_confirm_json(const char *in, size_t len, struct lws_jws *jws, struct lws_jwk *jwk, struct lws_context *context, char *temp, int *temp_len) { if (lws_jws_json_parse(jws, (const uint8_t *)in, (int)len, temp, temp_len)) { lwsl_err("%s: lws_jws_json_parse failed\n", __func__); return -1; } return lws_jws_sig_confirm(&jws->map_b64, &jws->map, jwk, context); } int lws_jws_sign_from_b64(struct lws_jose *jose, struct lws_jws *jws, char *b64_sig, size_t sig_len) { enum enum_genrsa_mode pad = LGRSAM_PKCS1_1_5; uint8_t digest[LWS_GENHASH_LARGEST]; struct lws_genhash_ctx hash_ctx; struct lws_genec_ctx ecdsactx; struct lws_genrsa_ctx rsactx; uint8_t *buf; int n, m; if (jose->alg->hash_type == LWS_GENHASH_TYPE_UNKNOWN && jose->alg->hmac_type == LWS_GENHMAC_TYPE_UNKNOWN && !strcmp(jose->alg->alg, "none")) return 0; if (lws_genhash_init(&hash_ctx, jose->alg->hash_type) || lws_genhash_update(&hash_ctx, jws->map_b64.buf[LJWS_JOSE], jws->map_b64.len[LJWS_JOSE]) || lws_genhash_update(&hash_ctx, ".", 1) || lws_genhash_update(&hash_ctx, jws->map_b64.buf[LJWS_PYLD], jws->map_b64.len[LJWS_PYLD]) || lws_genhash_destroy(&hash_ctx, digest)) { lws_genhash_destroy(&hash_ctx, NULL); return -1; } switch (jose->alg->algtype_signing) { case LWS_JOSE_ENCTYPE_RSASSA_PKCS1_PSS: case LWS_JOSE_ENCTYPE_RSASSA_PKCS1_OAEP: pad = LGRSAM_PKCS1_OAEP_PSS; /* fallthru */ case LWS_JOSE_ENCTYPE_RSASSA_PKCS1_1_5: if (jws->jwk->kty != LWS_GENCRYPTO_KTY_RSA) return -1; if (lws_genrsa_create(&rsactx, jws->jwk->e, jws->context, pad, LWS_GENHASH_TYPE_UNKNOWN)) { lwsl_notice("%s: lws_genrsa_public_decrypt_create\n", __func__); return -1; } n = (int)jws->jwk->e[LWS_GENCRYPTO_RSA_KEYEL_N].len; buf = lws_malloc((unsigned int)lws_base64_size(n), "jws sign"); if (!buf) return -1; n = lws_genrsa_hash_sign(&rsactx, digest, jose->alg->hash_type, buf, (unsigned int)n); lws_genrsa_destroy(&rsactx); if (n < 0) { lwsl_err("%s: lws_genrsa_hash_sign failed\n", __func__); lws_free(buf); return -1; } n = lws_jws_base64_enc((char *)buf, (unsigned int)n, b64_sig, sig_len); lws_free(buf); if (n < 0) { lwsl_err("%s: lws_jws_base64_enc failed\n", __func__); } return n; case LWS_JOSE_ENCTYPE_NONE: return lws_jws_base64_enc((char *)digest, lws_genhash_size(jose->alg->hash_type), b64_sig, sig_len); case LWS_JOSE_ENCTYPE_ECDSA: /* ECDSA using SHA-256/384/512 */ /* the key coming in with this makes sense, right? */ /* has to be an EC key :-) */ if (jws->jwk->kty != LWS_GENCRYPTO_KTY_EC) return -1; /* key must state its curve */ if (!jws->jwk->e[LWS_GENCRYPTO_EC_KEYEL_CRV].buf) return -1; /* must have all his pieces for a private key */ if (!jws->jwk->e[LWS_GENCRYPTO_EC_KEYEL_X].buf || !jws->jwk->e[LWS_GENCRYPTO_EC_KEYEL_Y].buf || !jws->jwk->e[LWS_GENCRYPTO_EC_KEYEL_D].buf) return -1; /* key must match the selected alg curve */ if (strcmp((const char *) jws->jwk->e[LWS_GENCRYPTO_EC_KEYEL_CRV].buf, jose->alg->curve_name)) return -1; if (lws_genecdsa_create(&ecdsactx, jws->context, NULL)) { lwsl_notice("%s: lws_genrsa_public_decrypt_create\n", __func__); return -1; } if (lws_genecdsa_set_key(&ecdsactx, jws->jwk->e)) { lws_genec_destroy(&ecdsactx); lwsl_notice("%s: ec key import fail\n", __func__); return -1; } m = lws_gencrypto_bits_to_bytes(jose->alg->keybits_fixed) * 2; buf = lws_malloc((unsigned int)m, "jws sign"); if (!buf) return -1; n = lws_genecdsa_hash_sign_jws(&ecdsactx, digest, jose->alg->hash_type, jose->alg->keybits_fixed, (uint8_t *)buf, (unsigned int)m); lws_genec_destroy(&ecdsactx); if (n < 0) { lws_free(buf); lwsl_notice("%s: lws_genecdsa_hash_sign_jws fail\n", __func__); return -1; } n = lws_jws_base64_enc((char *)buf, (unsigned int)m, b64_sig, sig_len); lws_free(buf); return n; default: break; } /* unknown key type */ return -1; } /* * Flattened JWS JSON: * * { * "payload": "", * "protected": "", * "header": , * "signature": "" * } */ int lws_jws_write_flattened_json(struct lws_jws *jws, char *flattened, size_t len) { size_t n = 0; if (len < 1) return 1; n += (unsigned int)lws_snprintf(flattened + n, len - n , "{\"payload\": \""); lws_strnncpy(flattened + n, jws->map_b64.buf[LJWS_PYLD], jws->map_b64.len[LJWS_PYLD], len - n); n = n + strlen(flattened + n); n += (unsigned int)lws_snprintf(flattened + n, len - n , "\",\n \"protected\": \""); lws_strnncpy(flattened + n, jws->map_b64.buf[LJWS_JOSE], jws->map_b64.len[LJWS_JOSE], len - n); n = n + strlen(flattened + n); if (jws->map_b64.buf[LJWS_UHDR]) { n += (unsigned int)lws_snprintf(flattened + n, len - n , "\",\n \"header\": "); lws_strnncpy(flattened + n, jws->map_b64.buf[LJWS_UHDR], jws->map_b64.len[LJWS_UHDR], len - n); n = n + strlen(flattened + n); } n += (unsigned int)lws_snprintf(flattened + n, len - n , "\",\n \"signature\": \""); lws_strnncpy(flattened + n, jws->map_b64.buf[LJWS_SIG], jws->map_b64.len[LJWS_SIG], len - n); n = n + strlen(flattened + n); n += (unsigned int)lws_snprintf(flattened + n, len - n , "\"}\n"); return (n >= len - 1); } int lws_jws_write_compact(struct lws_jws *jws, char *compact, size_t len) { size_t n = 0; if (len < 1) return 1; lws_strnncpy(compact + n, jws->map_b64.buf[LJWS_JOSE], jws->map_b64.len[LJWS_JOSE], len - n); n += strlen(compact + n); if (n >= len - 1) return 1; compact[n++] = '.'; lws_strnncpy(compact + n, jws->map_b64.buf[LJWS_PYLD], jws->map_b64.len[LJWS_PYLD], len - n); n += strlen(compact + n); if (n >= len - 1) return 1; compact[n++] = '.'; lws_strnncpy(compact + n, jws->map_b64.buf[LJWS_SIG], jws->map_b64.len[LJWS_SIG], len - n); n += strlen(compact + n); return n >= len - 1; } int lws_jwt_signed_validate(struct lws_context *ctx, struct lws_jwk *jwk, const char *alg_list, const char *com, size_t len, char *temp, int tl, char *out, size_t *out_len) { struct lws_tokenize ts; struct lws_jose jose; int otl = tl, r = 1; struct lws_jws jws; size_t n; memset(&jws, 0, sizeof(jws)); lws_jose_init(&jose); /* * Decode the b64.b64[.b64] compact serialization * blocks */ n = (size_t)lws_jws_compact_decode(com, (int)len, &jws.map, &jws.map_b64, temp, &tl); if (n != 3) { lwsl_err("%s: concat_map failed: %d\n", __func__, (int)n); goto bail; } temp += otl - tl; otl = tl; /* * Parse the JOSE header */ if (lws_jws_parse_jose(&jose, jws.map.buf[LJWS_JOSE], (int)jws.map.len[LJWS_JOSE], temp, &tl) < 0) { lwsl_err("%s: JOSE parse failed\n", __func__); goto bail; } /* * Insist to see an alg in there that we list as acceptable */ lws_tokenize_init(&ts, alg_list, LWS_TOKENIZE_F_COMMA_SEP_LIST | LWS_TOKENIZE_F_RFC7230_DELIMS); n = strlen(jose.alg->alg); do { ts.e = (int8_t)lws_tokenize(&ts); if (ts.e == LWS_TOKZE_TOKEN && ts.token_len == n && !strncmp(jose.alg->alg, ts.token, ts.token_len)) break; } while (ts.e != LWS_TOKZE_ENDED); if (ts.e != LWS_TOKZE_TOKEN) { lwsl_err("%s: JOSE using alg %s (accepted: %s)\n", __func__, jose.alg->alg, alg_list); goto bail; } /* we liked the alg... now how about the crypto? */ if (lws_jws_sig_confirm(&jws.map_b64, &jws.map, jwk, ctx) < 0) { lwsl_notice("%s: confirm JWT sig failed\n", __func__); goto bail; } /* yeah, it's validated... see about copying it out */ if (*out_len < jws.map.len[LJWS_PYLD] + 1) { /* we don't have enough room */ r = 2; goto bail; } memcpy(out, jws.map.buf[LJWS_PYLD], jws.map.len[LJWS_PYLD]); *out_len = jws.map.len[LJWS_PYLD]; out[jws.map.len[LJWS_PYLD]] = '\0'; r = 0; bail: lws_jws_destroy(&jws); lws_jose_destroy(&jose); return r; } static int lws_jwt_vsign_via_info(struct lws_context *ctx, struct lws_jwk *jwk, const struct lws_jwt_sign_info *info, const char *format, va_list ap) { size_t actual_hdr_len; struct lws_jose jose; struct lws_jws jws; va_list ap_cpy; int n, r = 1; int otl, tlr; char *p, *q; lws_jws_init(&jws, jwk, ctx); lws_jose_init(&jose); otl = tlr = info->tl; p = info->temp; /* * We either just use the provided info->jose_hdr, or build a * minimal header from info->alg */ actual_hdr_len = info->jose_hdr ? info->jose_hdr_len : 10 + strlen(info->alg); if (actual_hdr_len > INT_MAX) { goto bail; } if (lws_jws_alloc_element(&jws.map, LJWS_JOSE, info->temp, &tlr, actual_hdr_len, 0)) { lwsl_err("%s: temp space too small\n", __func__); goto bail; } if (!info->jose_hdr) { /* get algorithm from 'alg' string and write minimal JOSE header */ if (lws_gencrypto_jws_alg_to_definition(info->alg, &jose.alg)) { lwsl_err("%s: unknown alg %s\n", __func__, info->alg); goto bail; } jws.map.len[LJWS_JOSE] = (uint32_t)lws_snprintf( (char *)jws.map.buf[LJWS_JOSE], (size_t)otl, "{\"alg\":\"%s\"}", info->alg); } else { /* * Get algorithm by parsing the given JOSE header and copy it, * if it's ok */ if (lws_jws_parse_jose(&jose, info->jose_hdr, (int)actual_hdr_len, info->temp, &tlr)) { lwsl_err("%s: invalid jose header\n", __func__); goto bail; } tlr = otl; memcpy((char *)jws.map.buf[LJWS_JOSE], info->jose_hdr, actual_hdr_len); jws.map.len[LJWS_JOSE] = (uint32_t)actual_hdr_len; tlr -= (int)actual_hdr_len; } p += otl - tlr; otl = tlr; va_copy(ap_cpy, ap); n = vsnprintf(NULL, 0, format, ap_cpy); va_end(ap_cpy); if (n + 2 >= tlr) goto bail; q = lws_malloc((unsigned int)n + 2, __func__); if (!q) goto bail; vsnprintf(q, (unsigned int)n + 2, format, ap); /* add the plaintext from stdin to the map and a b64 version */ jws.map.buf[LJWS_PYLD] = q; jws.map.len[LJWS_PYLD] = (uint32_t)n; if (lws_jws_encode_b64_element(&jws.map_b64, LJWS_PYLD, p, &tlr, jws.map.buf[LJWS_PYLD], jws.map.len[LJWS_PYLD])) goto bail1; p += otl - tlr; otl = tlr; /* add the b64 JOSE header to the b64 map */ if (lws_jws_encode_b64_element(&jws.map_b64, LJWS_JOSE, p, &tlr, jws.map.buf[LJWS_JOSE], jws.map.len[LJWS_JOSE])) goto bail1; p += otl - tlr; otl = tlr; /* prepare the space for the b64 signature in the map */ if (lws_jws_alloc_element(&jws.map_b64, LJWS_SIG, p, &tlr, (size_t)lws_base64_size(LWS_JWE_LIMIT_KEY_ELEMENT_BYTES), 0)) goto bail1; /* sign the plaintext */ n = lws_jws_sign_from_b64(&jose, &jws, (char *)jws.map_b64.buf[LJWS_SIG], jws.map_b64.len[LJWS_SIG]); if (n < 0) goto bail1; /* set the actual b64 signature size */ jws.map_b64.len[LJWS_SIG] = (uint32_t)n; /* create the compact JWS representation */ if (lws_jws_write_compact(&jws, info->out, *info->out_len)) goto bail1; *info->out_len = strlen(info->out); r = 0; bail1: lws_free(q); bail: jws.map.buf[LJWS_PYLD] = NULL; jws.map.len[LJWS_PYLD] = 0; lws_jws_destroy(&jws); lws_jose_destroy(&jose); return r; } int lws_jwt_sign_via_info(struct lws_context *ctx, struct lws_jwk *jwk, const struct lws_jwt_sign_info *info, const char *format, ...) { int ret; va_list ap; va_start(ap, format); ret = lws_jwt_vsign_via_info(ctx, jwk, info, format, ap); va_end(ap); return ret; } int lws_jwt_sign_compact(struct lws_context *ctx, struct lws_jwk *jwk, const char *alg, char *out, size_t *out_len, char *temp, int tl, const char *format, ...) { struct lws_jwt_sign_info info = { .alg = alg, .jose_hdr = NULL, .out = out, .out_len = out_len, .temp = temp, .tl = tl }; int r = 1; va_list ap; va_start(ap, format); r = lws_jwt_vsign_via_info(ctx, jwk, &info, format, ap); va_end(ap); return r; } int lws_jwt_token_sanity(const char *in, size_t in_len, const char *iss, const char *aud, const char *csrf_in, char *sub, size_t sub_len, unsigned long *expiry_unix_time) { unsigned long now = lws_now_secs(), exp; const char *cp; size_t len; /* * It has our issuer? */ if (lws_json_simple_strcmp(in, in_len, "\"iss\":", iss)) { lwsl_notice("%s: iss mismatch\n", __func__); return 1; } /* * ... it is indended for us to consume? (this is set * to the public base url for this sai instance) */ if (lws_json_simple_strcmp(in, in_len, "\"aud\":", aud)) { lwsl_notice("%s: aud mismatch\n", __func__); return 1; } /* * ...it's not too early for it? */ cp = lws_json_simple_find(in, in_len, "\"nbf\":", &len); if (!cp || (unsigned long)atol(cp) > now) { lwsl_notice("%s: nbf fail\n", __func__); return 1; } /* * ... and not too late for it? */ cp = lws_json_simple_find(in, in_len, "\"exp\":", &len); exp = (unsigned long)atol(cp); if (!cp || (unsigned long)atol(cp) < now) { lwsl_notice("%s: exp fail %lu vs %lu\n", __func__, cp ? (unsigned long)atol(cp) : 0, now); return 1; } /* * Caller cares about subject? Then we must have it, and it can't be * empty. */ if (sub) { cp = lws_json_simple_find(in, in_len, "\"sub\":", &len); if (!cp || !len) { lwsl_notice("%s: missing subject\n", __func__); return 1; } lws_strnncpy(sub, cp, len, sub_len); } /* * If caller has been told a Cross Site Request Forgery (CSRF) nonce, * require this JWT to express the same CSRF... this makes generated * links for dangerous privileged auth'd actions expire with the JWT * that was accessing the site when the links were generated. And it * leaves an attacker not knowing what links to synthesize unless he * can read the token or pages generated with it. * * Using this is very good for security, but it implies you must refresh * generated pages still when the auth token is expiring (and the user * must log in again). */ if (csrf_in && lws_json_simple_strcmp(in, in_len, "\"csrf\":", csrf_in)) { lwsl_notice("%s: csrf mismatch\n", __func__); return 1; } if (expiry_unix_time) *expiry_unix_time = exp; return 0; } libwebsockets-4.3.5/lib/jose/jws/private-lib-jose-jws.h000066400000000000000000000025441476025525100230360ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * JOSE is actually specified as part of JWS RFC7515. JWE references RFC7515 * to specify its JOSE JSON object. So it lives in ./lib/jose/jws/jose.c. */ libwebsockets-4.3.5/lib/jose/private-lib-jose.h000066400000000000000000000041031476025525100214230ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /* information about each token declared above */ #define F_M (1 << 9) /* Mandatory for key type */ #define F_B64 (1 << 10) /* Base64 coded octets */ #define F_B64U (1 << 11) /* Base64 Url coded octets */ #define F_META (1 << 12) /* JWK key metainformation */ #define F_RSA (1 << 13) /* RSA key */ #define F_EC (1 << 14) /* Elliptic curve key */ #define F_OCT (1 << 15) /* octet key */ void lws_jwk_destroy_elements(struct lws_gencrypto_keyelem *el, int m); int lws_jose_render(struct lws_jose *jose, struct lws_jwk *aux_jwk, char *out, size_t out_len); int _lws_jwk_set_el_jwk(struct lws_gencrypto_keyelem *e, char *in, size_t len); void lws_jwk_init_jps(struct lws_jwk_parse_state *jps, struct lws_jwk *jwk, lws_jwk_key_import_callback cb, void *user); signed char cb_jwk(struct lejp_ctx *ctx, char reason); extern const char * const jwk_tok[19], * const jwk_outer_tok[19]; libwebsockets-4.3.5/lib/misc/000077500000000000000000000000001476025525100160735ustar00rootroot00000000000000libwebsockets-4.3.5/lib/misc/CMakeLists.txt000066400000000000000000000062651476025525100206440ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # # The strategy is to only export to PARENT_SCOPE # # - changes to LIB_LIST # - changes to SOURCES # - includes via include_directories # # and keep everything else private include_directories(.) list(APPEND SOURCES misc/base64-decode.c misc/prng.c misc/lws-ring.c) if (LWS_WITH_NETWORK) list(APPEND SOURCES misc/cache-ttl/lws-cache-ttl.c misc/cache-ttl/heap.c ) if (LWS_WITH_CACHE_NSCOOKIEJAR) list(APPEND SOURCES misc/cache-ttl/file.c) endif() endif() if (LWS_WITH_FTS) list(APPEND SOURCES misc/fts/trie.c misc/fts/trie-fd.c) endif() # this is an older, standalone hashed disk cache # implementation unrelated to lws-cache-ttl if (LWS_WITH_DISKCACHE) list(APPEND SOURCES misc/diskcache.c) endif() if (LWS_WITH_STRUCT_JSON) list(APPEND SOURCES misc/lws-struct-lejp.c) endif() if (LWS_WITH_STRUCT_SQLITE3) list(APPEND SOURCES misc/lws-struct-sqlite.c) endif() if (LWS_WITH_FSMOUNT AND ${CMAKE_SYSTEM_NAME} STREQUAL "Linux") list(APPEND SOURCES misc/fsmount.c) endif() if (LWS_WITH_DIR) list(APPEND SOURCES misc/dir.c) endif() if (LWS_WITH_THREADPOOL AND LWS_HAVE_PTHREAD_H) list(APPEND SOURCES misc/threadpool/threadpool.c) endif() if (LWS_WITH_PEER_LIMITS) list(APPEND SOURCES misc/peer-limits.c) endif() if (LWS_WITH_LWSAC) list(APPEND SOURCES misc/lwsac/lwsac.c) if (NOT LWS_PLAT_FREERTOS) list(APPEND SOURCES misc/lwsac/cached-file.c) endif() if (LWS_WITH_SECURE_STREAMS_CPP) list(APPEND SOURCES misc/lwsac/lwsac.cxx) endif() endif() if (NOT LWS_WITHOUT_BUILTIN_SHA1) list(APPEND SOURCES misc/sha-1.c) endif() if (LWS_WITH_LEJP) list(APPEND SOURCES misc/lejp.c) endif() if (LWS_WITH_CBOR) list(APPEND SOURCES misc/lecp.c misc/ieeehalfprecision.c) endif() if (UNIX) if (NOT LWS_HAVE_GETIFADDRS) list(APPEND HDR_PRIVATE misc/getifaddrs.h) list(APPEND SOURCES misc/getifaddrs.c) endif() endif() if (NOT WIN32 AND NOT LWS_WITHOUT_DAEMONIZE) list(APPEND SOURCES misc/daemonize.c) endif() # # Keep explicit parent scope exports at end # exports_to_parent_scope() libwebsockets-4.3.5/lib/misc/base64-decode.c000066400000000000000000000160651476025525100205540ustar00rootroot00000000000000/* * This code originally came from here * * http://base64.sourceforge.net/b64.c * * already with MIT license, which is retained. * * LICENCE: Copyright (c) 2001 Bob Trower, Trantor Standard Systems Inc. * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated * documentation files (the "Software"), to deal in the * Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, * sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, * subject to the following conditions: * * The above copyright notice and this permission notice shall * be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY * KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS * OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * VERSION HISTORY: * Bob Trower 08/04/01 -- Create Version 0.00.00B * * I cleaned it up quite a bit to match the (linux kernel) style of the rest * of libwebsockets */ #include "private-lib-core.h" #include #include static const char encode_orig[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz0123456789+/"; static const char encode_url[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz0123456789-_"; static const char decode[] = "|$$$}rstuvwxyz{$$$$$$$>?@ABCDEFGHIJKLMNOPQRSTUVW" "$$$$$$XYZ[\\]^_`abcdefghijklmnopq"; static int _lws_b64_encode_string(const char *encode, const char *in, int in_len, char *out, int out_size) { unsigned char triple[3]; int i, done = 0; while (in_len) { int len = 0; for (i = 0; i < 3; i++) { if (in_len) { triple[i] = (unsigned char)*in++; len++; in_len--; } else triple[i] = 0; } if (done + 4 >= out_size) return -1; *out++ = encode[triple[0] >> 2]; *out++ = encode[(((triple[0] & 0x03) << 4) & 0x30) | (((triple[1] & 0xf0) >> 4) & 0x0f)]; *out++ = (char)(len > 1 ? encode[(((triple[1] & 0x0f) << 2) & 0x3c) | (((triple[2] & 0xc0) >> 6) & 3)] : '='); *out++ = (char)(len > 2 ? encode[triple[2] & 0x3f] : '='); done += 4; } if (done + 1 >= out_size) return -1; *out++ = '\0'; return done; } int lws_b64_encode_string(const char *in, int in_len, char *out, int out_size) { return _lws_b64_encode_string(encode_orig, in, in_len, out, out_size); } int lws_b64_encode_string_url(const char *in, int in_len, char *out, int out_size) { return _lws_b64_encode_string(encode_url, in, in_len, out, out_size); } void lws_b64_decode_state_init(struct lws_b64state *state) { memset(state, 0, sizeof(*state)); } int lws_b64_decode_stateful(struct lws_b64state *s, const char *in, size_t *in_len, uint8_t *out, size_t *out_size, int final) { const char *orig_in = in, *end_in = in + *in_len; uint8_t *orig_out = out, *end_out = out + *out_size; while (in < end_in && *in && out + 3 <= end_out) { for (; s->i < 4 && in < end_in && *in; s->i++) { uint8_t v; v = 0; s->c = 0; while (in < end_in && *in && !v) { s->c = v = (unsigned char)*in++; /* support the url base64 variant too */ if (v == '-') s->c = v = '+'; if (v == '_') s->c = v = '/'; v = (uint8_t)((v < 43 || v > 122) ? 0 : decode[v - 43]); if (v) v = (uint8_t)((v == '$') ? 0 : v - 61); } if (s->c) { s->len++; if (v) s->quad[s->i] = (uint8_t)(v - 1); } else s->quad[s->i] = 0; } if (s->i != 4 && !final) continue; s->i = 0; /* * "The '==' sequence indicates that the last group contained * only one byte, and '=' indicates that it contained two * bytes." (wikipedia) */ if ((in >= end_in || !*in) && s->c == '=') s->len--; if (s->len >= 2) *out++ = (uint8_t)(s->quad[0] << 2 | s->quad[1] >> 4); if (s->len >= 3) *out++ = (uint8_t)(s->quad[1] << 4 | s->quad[2] >> 2); if (s->len >= 4) *out++ = (uint8_t)(((s->quad[2] << 6) & 0xc0) | s->quad[3]); s->done += s->len - 1; s->len = 0; } *out = '\0'; *in_len = (unsigned int)(in - orig_in); *out_size = (unsigned int)(out - orig_out); return 0; } /* * returns length of decoded string in out, or -1 if out was too small * according to out_size * * Only reads up to in_len chars, otherwise if in_len is -1 on entry reads until * the first NUL in the input. */ static size_t _lws_b64_decode_string(const char *in, int in_len, char *out, size_t out_size) { struct lws_b64state state; size_t il = (size_t)in_len, ol = out_size; if (in_len == -1) il = strlen(in); lws_b64_decode_state_init(&state); lws_b64_decode_stateful(&state, in, &il, (uint8_t *)out, &ol, 1); if (!il) return 0; return ol; } int lws_b64_decode_string(const char *in, char *out, int out_size) { return (int)_lws_b64_decode_string(in, -1, out, (unsigned int)out_size); } int lws_b64_decode_string_len(const char *in, int in_len, char *out, int out_size) { return (int)_lws_b64_decode_string(in, in_len, out, (unsigned int)out_size); } #if 0 static const char * const plaintext[] = { "any carnal pleasure.", "any carnal pleasure", "any carnal pleasur", "any carnal pleasu", "any carnal pleas", "Admin:kloikloi" }; static const char * const coded[] = { "YW55IGNhcm5hbCBwbGVhc3VyZS4=", "YW55IGNhcm5hbCBwbGVhc3VyZQ==", "YW55IGNhcm5hbCBwbGVhc3Vy", "YW55IGNhcm5hbCBwbGVhc3U=", "YW55IGNhcm5hbCBwbGVhcw==", "QWRtaW46a2xvaWtsb2k=" }; int lws_b64_selftest(void) { char buf[64]; unsigned int n, r = 0; unsigned int test; lwsl_notice("%s\n", __func__); /* examples from https://en.wikipedia.org/wiki/Base64 */ for (test = 0; test < (int)LWS_ARRAY_SIZE(plaintext); test++) { buf[sizeof(buf) - 1] = '\0'; n = lws_b64_encode_string(plaintext[test], strlen(plaintext[test]), buf, sizeof buf); if (n != strlen(coded[test]) || strcmp(buf, coded[test])) { lwsl_err("Failed lws_b64 encode selftest " "%d result '%s' %d\n", test, buf, n); r = -1; } buf[sizeof(buf) - 1] = '\0'; n = lws_b64_decode_string(coded[test], buf, sizeof buf); if (n != strlen(plaintext[test]) || strcmp(buf, plaintext[test])) { lwsl_err("Failed lws_b64 decode selftest " "%d result '%s' / '%s', %d / %zu\n", test, buf, plaintext[test], n, strlen(plaintext[test])); lwsl_hexdump_err(buf, n); r = -1; } } if (!r) lwsl_notice("Base 64 selftests passed\n"); else lwsl_notice("Base64 selftests failed\n"); return r; } #endif libwebsockets-4.3.5/lib/misc/cache-ttl/000077500000000000000000000000001476025525100177375ustar00rootroot00000000000000libwebsockets-4.3.5/lib/misc/cache-ttl/file.c000066400000000000000000000557771476025525100210470ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * Implements a cache backing store compatible with netscape cookies.txt format * There is one entry per "line", and fields are tab-delimited * * We need to know the format here, because while the unique cookie tag consists * of "hostname|urlpath|cookiename", that does not appear like that in the file; * we have to go parse the fields and synthesize the corresponding tag. * * We rely on all the fields except the cookie value fitting in a 256 byte * buffer, and allow eating multiple buffers to get a huge cookie values. * * Because the cookie file is a device-wide asset, although lws will change it * from the lws thread without conflict, there may be other processes that will * change it by removal and regenerating the file asynchronously. For that * reason, file handles are opened fresh each time we want to use the file, so * we always get the latest version. * * When updating the file ourselves, we use a lockfile to ensure our process * has exclusive access. * * * Tag Matching rules * * There are three kinds of tag matching rules * * 1) specific - tag strigs must be the same * 2) wilcard - tags matched using optional wildcards * 3) wildcard + lookup - wildcard, but path part matches using cookie scope rules * */ #include #include "private-lib-misc-cache-ttl.h" typedef enum nsc_iterator_ret { NIR_CONTINUE = 0, NIR_FINISH_OK = 1, NIR_FINISH_ERROR = -1 } nsc_iterator_ret_t; typedef enum cbreason { LCN_SOL = (1 << 0), LCN_EOL = (1 << 1) } cbreason_t; typedef int (*nsc_cb_t)(lws_cache_nscookiejar_t *cache, void *opaque, int flags, const char *buf, size_t size); static void expiry_cb(lws_sorted_usec_list_t *sul); static int nsc_backing_open_lock(lws_cache_nscookiejar_t *cache, int mode, const char *par) { int sanity = 50; char lock[128]; int fd_lock, fd; lwsl_debug("%s: %s\n", __func__, par); lws_snprintf(lock, sizeof(lock), "%s.LCK", cache->cache.info.u.nscookiejar.filepath); do { fd_lock = open(lock, LWS_O_CREAT | O_EXCL, 0600); if (fd_lock >= 0) { close(fd_lock); break; } if (!sanity--) { lwsl_warn("%s: unable to lock %s: errno %d\n", __func__, lock, errno); return -1; } #if defined(WIN32) Sleep(100); #else usleep(100000); #endif } while (1); fd = open(cache->cache.info.u.nscookiejar.filepath, LWS_O_CREAT | mode, 0600); if (fd == -1) { lwsl_warn("%s: unable to open or create %s\n", __func__, cache->cache.info.u.nscookiejar.filepath); unlink(lock); } return fd; } static void nsc_backing_close_unlock(lws_cache_nscookiejar_t *cache, int fd) { char lock[128]; lwsl_debug("%s\n", __func__); lws_snprintf(lock, sizeof(lock), "%s.LCK", cache->cache.info.u.nscookiejar.filepath); if (fd >= 0) close(fd); unlink(lock); } /* * We're going to call the callback with chunks of the file with flags * indicating we're giving it the start of a line and / or giving it the end * of a line. * * It's like this because the cookie value may be huge (and to a lesser extent * the path may also be big). * * If it's the start of a line (flags on the cb has LCN_SOL), then the buffer * contains up to the first 256 chars of the line, it's enough to match with. * * We cannot hold the file open inbetweentimes, since other processes may * regenerate it, so we need to bind to a new inode. We open it with an * exclusive flock() so other processes can't replace conflicting changes * while we also write changes, without having to wait and see our changes. */ static int nscookiejar_iterate(lws_cache_nscookiejar_t *cache, int fd, nsc_cb_t cb, void *opaque) { int m = 0, n = 0, e, r = LCN_SOL, ignore = 0, ret = 0; char temp[256], eof = 0; if (lseek(fd, 0, SEEK_SET) == (off_t)-1) return -1; do { /* for as many buffers in the file */ int n1; lwsl_debug("%s: n %d, m %d\n", __func__, n, m); read: if ((size_t)n >= sizeof(temp) - 1) /* there's no space left in temp */ n1 = 0; else n1 = (int)read(fd, temp + n, sizeof(temp) - (size_t)n); lwsl_debug("%s: n1 %d\n", __func__, n1); if (n1 <= 0) { eof = 1; if (m == n) continue; } else { n += n1; if ((size_t)n > sizeof(temp)) { /* coverity */ ret = -1; goto bail; } } while (m < n) { m++; /* m can == n nw then */ if (temp[m - 1] != '\n') continue; /* ie, we hit EOL */ if (temp[0] == '#') /* lines starting with # are comments */ e = 0; else e = cb(cache, opaque, r | LCN_EOL, temp, (size_t)m - 1); r = LCN_SOL; ignore = 0; /* * Move back remainder and prefill the gap that opened * up: we want to pass enough in the start chunk so the * cb can classify it even if it can't get all the * value part in one go */ /* coverity: we will blow up if m > n */ if (m > n) { ret = -1; goto bail; } memmove(temp, temp + m, (size_t)(n - m)); n -= m; m = 0; if (e) { ret = e; goto bail; } goto read; } if (m) { /* we ran out of buffer */ if (ignore || (r == LCN_SOL && n && temp[0] == '#')) { e = 0; ignore = 1; } else { e = cb(cache, opaque, r | (n == m && eof ? LCN_EOL : 0), temp, (size_t)m); m = 0; n = 0; } if (e) { /* * We have to call off the whole thing if any * step, eg, OOMs */ ret = e; goto bail; } r = 0; } } while (!eof || n != m); ret = 0; bail: return ret; } /* * lookup() just handles wildcard resolution, it doesn't deal with moving the * hits to L1. That has to be done individually by non-wildcard names. */ enum { NSC_COL_HOST = 0, /* wc idx 0 */ NSC_COL_PATH = 2, /* wc idx 1 */ NSC_COL_EXPIRY = 4, NSC_COL_NAME = 5, /* wc idx 2 */ NSC_COL_COUNT = 6 }; /* * This performs the specialized wildcard that knows about cookie path match * rules. * * To defeat the lookup path matching, lie to it about idx being NSC_COL_PATH */ static int nsc_match(const char *wc, size_t wc_len, const char *col, size_t col_len, int idx) { size_t n = 0; if (idx != NSC_COL_PATH) return lws_strcmp_wildcard(wc, wc_len, col, col_len); /* * Cookie path match is special, if we lookup on a path like /my/path, * we must match on cookie paths for every dir level including /, so * match on /, /my, and /my/path. But we must not match on /m or * /my/pa etc. If we lookup on /, we must not match /my/path * * Let's go through wc checking at / and for every complete subpath if * it is an explicit match */ if (!strcmp(col, wc)) return 0; /* exact hit */ while (n <= wc_len) { if (n == wc_len || wc[n] == '/') { if (n && col_len <= n && !strncmp(wc, col, n)) return 0; /* hit */ if (n != wc_len && col_len <= n + 1 && !strncmp(wc, col, n + 1)) /* check for trailing / */ return 0; /* hit */ } n++; } return 1; /* fail */ } static const uint8_t nsc_cols[] = { NSC_COL_HOST, NSC_COL_PATH, NSC_COL_NAME }; static int lws_cache_nscookiejar_tag_match(struct lws_cache_ttl_lru *cache, const char *wc, const char *tag, char lookup) { const char *wc_end = wc + strlen(wc), *tag_end = tag + strlen(tag), *start_wc, *start_tag; int n = 0; lwsl_cache("%s: '%s' vs '%s'\n", __func__, wc, tag); /* * Given a well-formed host|path|name tag and a wildcard term, * make the determination if the tag matches the wildcard or not, * using lookup rules that apply at this cache level. */ while (n < 3) { start_wc = wc; while (wc < wc_end && *wc != LWSCTAG_SEP) wc++; start_tag = tag; while (tag < tag_end && *tag != LWSCTAG_SEP) tag++; lwsl_cache("%s: '%.*s' vs '%.*s'\n", __func__, lws_ptr_diff(wc, start_wc), start_wc, lws_ptr_diff(tag, start_tag), start_tag); if (nsc_match(start_wc, lws_ptr_diff_size_t(wc, start_wc), start_tag, lws_ptr_diff_size_t(tag, start_tag), lookup ? nsc_cols[n] : NSC_COL_HOST)) { lwsl_cache("%s: fail\n", __func__); return 1; } if (wc < wc_end) wc++; if (tag < tag_end) tag++; n++; } lwsl_cache("%s: hit\n", __func__); return 0; /* match */ } /* * Converts the start of a cookie file line into a tag */ static int nsc_line_to_tag(const char *buf, size_t size, char *tag, size_t max_tag, lws_usec_t *pexpiry) { int n, idx = 0, tl = 0; lws_usec_t expiry = 0; size_t bn = 0; char col[64]; if (size < 3) return 1; while (bn < size && idx <= NSC_COL_NAME) { n = 0; while (bn < size && n < (int)sizeof(col) - 1 && buf[bn] != '\t') col[n++] = buf[bn++]; col[n] = '\0'; if (buf[bn] == '\t') bn++; switch (idx) { case NSC_COL_EXPIRY: expiry = (lws_usec_t)((unsigned long long)atoll(col) * (lws_usec_t)LWS_US_PER_SEC); break; case NSC_COL_HOST: case NSC_COL_PATH: case NSC_COL_NAME: /* * As we match the pieces of the wildcard, * compose the matches into a specific tag */ if (tl + n + 2 > (int)max_tag) return 1; if (tl) tag[tl++] = LWSCTAG_SEP; memcpy(tag + tl, col, (size_t)n); tl += n; tag[tl] = '\0'; break; default: break; } idx++; } if (pexpiry) *pexpiry = expiry; lwsl_info("%s: %.*s: tag '%s'\n", __func__, (int)size, buf, tag); return 0; } struct nsc_lookup_ctx { const char *wildcard_key; lws_dll2_owner_t *results_owner; lws_cache_match_t *match; /* current match if any */ size_t wklen; }; static int nsc_lookup_cb(lws_cache_nscookiejar_t *cache, void *opaque, int flags, const char *buf, size_t size) { struct nsc_lookup_ctx *ctx = (struct nsc_lookup_ctx *)opaque; lws_usec_t expiry; char tag[200]; int tl; if (!(flags & LCN_SOL)) { if (ctx->match) ctx->match->payload_size += size; return NIR_CONTINUE; } /* * There should be enough in buf to match or reject it... let's * synthesize a tag from the text "line" and then check the tags for * a match */ ctx->match = NULL; /* new SOL means stop tracking payload len */ if (nsc_line_to_tag(buf, size, tag, sizeof(tag), &expiry)) return NIR_CONTINUE; if (lws_cache_nscookiejar_tag_match(&cache->cache, ctx->wildcard_key, tag, 1)) return NIR_CONTINUE; tl = (int)strlen(tag); /* * ... it looks like a match then... create new match * object with the specific tag, and add it to the owner list */ ctx->match = lws_fi(&cache->cache.info.cx->fic, "cache_lookup_oom") ? NULL : lws_malloc(sizeof(*ctx->match) + (unsigned int)tl + 1u, __func__); if (!ctx->match) /* caller of lookup will clean results list on fail */ return NIR_FINISH_ERROR; ctx->match->payload_size = size; ctx->match->tag_size = (size_t)tl; ctx->match->expiry = expiry; memset(&ctx->match->list, 0, sizeof(ctx->match->list)); memcpy(&ctx->match[1], tag, (size_t)tl + 1u); lws_dll2_add_tail(&ctx->match->list, ctx->results_owner); return NIR_CONTINUE; } static int lws_cache_nscookiejar_lookup(struct lws_cache_ttl_lru *_c, const char *wildcard_key, lws_dll2_owner_t *results_owner) { lws_cache_nscookiejar_t *cache = (lws_cache_nscookiejar_t *)_c; struct nsc_lookup_ctx ctx; int ret, fd; fd = nsc_backing_open_lock(cache, LWS_O_RDONLY, __func__); if (fd < 0) return 1; ctx.wildcard_key = wildcard_key; ctx.results_owner = results_owner; ctx.wklen = strlen(wildcard_key); ctx.match = 0; ret = nscookiejar_iterate(cache, fd, nsc_lookup_cb, &ctx); /* * The cb can fail, eg, with OOM, making the whole lookup * invalid and returning fail. Caller will clean * results_owner on fail. */ nsc_backing_close_unlock(cache, fd); return ret == NIR_FINISH_ERROR; } /* * It's pretty horrible having to implement add or remove individual items by * file regeneration, but if we don't want to keep it all in heap, and we want * this cookie jar format, that is what we are into. * * Allow to optionally add a "line", optionally wildcard delete tags, and always * delete expired entries. * * Although we can rely on the lws thread to be doing this, multiple processes * may be using the cookie jar and can tread on each other. So we use flock() * (linux only) to get exclusive access while we are processing this. * * We leave the existing file alone and generate a new one alongside it, with a * fixed name.tmp format so it can't leak, if that went OK then we unlink the * old and rename the new. */ struct nsc_regen_ctx { const char *wildcard_key_delete; const void *add_data; lws_usec_t curr; size_t add_size; int fdt; char drop; }; /* only used by nsc_regen() */ static int nsc_regen_cb(lws_cache_nscookiejar_t *cache, void *opaque, int flags, const char *buf, size_t size) { struct nsc_regen_ctx *ctx = (struct nsc_regen_ctx *)opaque; char tag[256]; lws_usec_t expiry; if (flags & LCN_SOL) { ctx->drop = 0; if (nsc_line_to_tag(buf, size, tag, sizeof(tag), &expiry)) /* filter it out if it is unparseable */ goto drop; /* routinely track the earliest expiry */ if (!cache->earliest_expiry || (expiry && cache->earliest_expiry > expiry)) cache->earliest_expiry = expiry; if (expiry && expiry < ctx->curr) /* routinely strip anything beyond its expiry */ goto drop; if (ctx->wildcard_key_delete) lwsl_cache("%s: %s vs %s\n", __func__, tag, ctx->wildcard_key_delete); if (ctx->wildcard_key_delete && !lws_cache_nscookiejar_tag_match(&cache->cache, ctx->wildcard_key_delete, tag, 0)) { lwsl_cache("%s: %s matches wc delete %s\n", __func__, tag, ctx->wildcard_key_delete); goto drop; } } if (ctx->drop) return 0; cache->cache.current_footprint += (uint64_t)size; if (write(ctx->fdt, buf, /*msvc*/(unsigned int)size) != (ssize_t)size) return NIR_FINISH_ERROR; if (flags & LCN_EOL) if ((size_t)write(ctx->fdt, "\n", 1) != 1) return NIR_FINISH_ERROR; return 0; drop: ctx->drop = 1; return NIR_CONTINUE; } static int nsc_regen(lws_cache_nscookiejar_t *cache, const char *wc_delete, const void *pay, size_t pay_size) { struct nsc_regen_ctx ctx; char filepath[128]; int fd, ret = 1; fd = nsc_backing_open_lock(cache, LWS_O_RDONLY, __func__); if (fd < 0) return 1; lws_snprintf(filepath, sizeof(filepath), "%s.tmp", cache->cache.info.u.nscookiejar.filepath); unlink(filepath); if (lws_fi(&cache->cache.info.cx->fic, "cache_regen_temp_open")) goto bail; ctx.fdt = open(filepath, LWS_O_CREAT | LWS_O_WRONLY, 0600); if (ctx.fdt < 0) goto bail; /* magic header */ if (lws_fi(&cache->cache.info.cx->fic, "cache_regen_temp_write") || /* other consumers insist to see this at start of cookie jar */ write(ctx.fdt, "# Netscape HTTP Cookie File\n", 28) != 28) goto bail1; /* if we are adding something, put it first */ if (pay && write(ctx.fdt, pay, /*msvc*/(unsigned int)pay_size) != (ssize_t)pay_size) goto bail1; if (pay && write(ctx.fdt, "\n", 1u) != (ssize_t)1) goto bail1; cache->cache.current_footprint = 0; ctx.wildcard_key_delete = wc_delete; ctx.add_data = pay; ctx.add_size = pay_size; ctx.curr = lws_now_usecs(); ctx.drop = 0; cache->earliest_expiry = 0; if (lws_fi(&cache->cache.info.cx->fic, "cache_regen_iter_fail") || nscookiejar_iterate(cache, fd, nsc_regen_cb, &ctx)) goto bail1; close(ctx.fdt); ctx.fdt = -1; if (unlink(cache->cache.info.u.nscookiejar.filepath) == -1) lwsl_info("%s: unlink %s failed\n", __func__, cache->cache.info.u.nscookiejar.filepath); if (rename(filepath, cache->cache.info.u.nscookiejar.filepath) == -1) lwsl_info("%s: rename %s failed\n", __func__, cache->cache.info.u.nscookiejar.filepath); if (cache->earliest_expiry) lws_cache_schedule(&cache->cache, expiry_cb, cache->earliest_expiry); ret = 0; goto bail; bail1: if (ctx.fdt >= 0) close(ctx.fdt); bail: unlink(filepath); nsc_backing_close_unlock(cache, fd); return ret; } static void expiry_cb(lws_sorted_usec_list_t *sul) { lws_cache_nscookiejar_t *cache = lws_container_of(sul, lws_cache_nscookiejar_t, cache.sul); /* * regen the cookie jar without changes, so expired are removed and * new earliest expired computed */ if (nsc_regen(cache, NULL, NULL, 0)) return; if (cache->earliest_expiry) lws_cache_schedule(&cache->cache, expiry_cb, cache->earliest_expiry); } /* specific_key and expiry are ignored, since it must be encoded in payload */ static int lws_cache_nscookiejar_write(struct lws_cache_ttl_lru *_c, const char *specific_key, const uint8_t *source, size_t size, lws_usec_t expiry, void **ppvoid) { lws_cache_nscookiejar_t *cache = (lws_cache_nscookiejar_t *)_c; char tag[128]; lwsl_cache("%s: %s: len %d\n", __func__, _c->info.name, (int)size); assert(source); if (nsc_line_to_tag((const char *)source, size, tag, sizeof(tag), NULL)) return 1; if (ppvoid) *ppvoid = NULL; if (nsc_regen(cache, tag, source, size)) { lwsl_err("%s: regen failed\n", __func__); return 1; } return 0; } struct nsc_get_ctx { struct lws_buflist *buflist; const char *specific_key; const void **pdata; size_t *psize; lws_cache_ttl_lru_t *l1; lws_usec_t expiry; }; /* * We're looking for a specific key, if found, we want to make an entry for it * in L1 and return information about that */ static int nsc_get_cb(lws_cache_nscookiejar_t *cache, void *opaque, int flags, const char *buf, size_t size) { struct nsc_get_ctx *ctx = (struct nsc_get_ctx *)opaque; char tag[200]; uint8_t *q; if (ctx->buflist) goto collect; if (!(flags & LCN_SOL)) return NIR_CONTINUE; if (nsc_line_to_tag(buf, size, tag, sizeof(tag), &ctx->expiry)) { lwsl_err("%s: can't get tag\n", __func__); return NIR_CONTINUE; } lwsl_cache("%s: %s %s\n", __func__, ctx->specific_key, tag); if (strcmp(ctx->specific_key, tag)) { lwsl_cache("%s: no match\n", __func__); return NIR_CONTINUE; } /* it's a match */ lwsl_cache("%s: IS match\n", __func__); if (!(flags & LCN_EOL)) goto collect; /* it all fit in the buffer, let's create it in L1 now */ *ctx->psize = size; if (ctx->l1->info.ops->write(ctx->l1, ctx->specific_key, (const uint8_t *)buf, size, ctx->expiry, (void **)ctx->pdata)) return NIR_FINISH_ERROR; return NIR_FINISH_OK; collect: /* * it's bigger than one buffer-load, we have to stash what we're getting * on a buflist and create it when we have it all */ if (lws_buflist_append_segment(&ctx->buflist, (const uint8_t *)buf, size)) goto cleanup; if (!(flags & LCN_EOL)) return NIR_CONTINUE; /* we have all the payload, create the L1 entry without payload yet */ *ctx->psize = size; if (ctx->l1->info.ops->write(ctx->l1, ctx->specific_key, NULL, lws_buflist_total_len(&ctx->buflist), ctx->expiry, (void **)&q)) goto cleanup; *ctx->pdata = q; /* dump the buflist into the L1 cache entry */ do { uint8_t *p; size_t len = lws_buflist_next_segment_len(&ctx->buflist, &p); memcpy(q, p, len); q += len; lws_buflist_use_segment(&ctx->buflist, len); } while (ctx->buflist); return NIR_FINISH_OK; cleanup: lws_buflist_destroy_all_segments(&ctx->buflist); return NIR_FINISH_ERROR; } static int lws_cache_nscookiejar_get(struct lws_cache_ttl_lru *_c, const char *specific_key, const void **pdata, size_t *psize) { lws_cache_nscookiejar_t *cache = (lws_cache_nscookiejar_t *)_c; struct nsc_get_ctx ctx; int ret, fd; fd = nsc_backing_open_lock(cache, LWS_O_RDONLY, __func__); if (fd < 0) return 1; /* get a pointer to l1 */ ctx.l1 = &cache->cache; while (ctx.l1->child) ctx.l1 = ctx.l1->child; ctx.pdata = pdata; ctx.psize = psize; ctx.specific_key = specific_key; ctx.buflist = NULL; ctx.expiry = 0; ret = nscookiejar_iterate(cache, fd, nsc_get_cb, &ctx); nsc_backing_close_unlock(cache, fd); return ret != NIR_FINISH_OK; } static int lws_cache_nscookiejar_invalidate(struct lws_cache_ttl_lru *_c, const char *wc_key) { lws_cache_nscookiejar_t *cache = (lws_cache_nscookiejar_t *)_c; return nsc_regen(cache, wc_key, NULL, 0); } static struct lws_cache_ttl_lru * lws_cache_nscookiejar_create(const struct lws_cache_creation_info *info) { lws_cache_nscookiejar_t *cache; cache = lws_fi(&info->cx->fic, "cache_createfail") ? NULL : lws_zalloc(sizeof(*cache), __func__); if (!cache) return NULL; cache->cache.info = *info; /* * We need to scan the file, if it exists, and find the earliest * expiry while cleaning out any expired entries */ expiry_cb(&cache->cache.sul); lwsl_notice("%s: create %s\n", __func__, info->name ? info->name : "?"); return (struct lws_cache_ttl_lru *)cache; } static int lws_cache_nscookiejar_expunge(struct lws_cache_ttl_lru *_c) { lws_cache_nscookiejar_t *cache = (lws_cache_nscookiejar_t *)_c; int r; if (!cache) return 0; r = unlink(cache->cache.info.u.nscookiejar.filepath); if (r) lwsl_warn("%s: failed to unlink %s\n", __func__, cache->cache.info.u.nscookiejar.filepath); return r; } static void lws_cache_nscookiejar_destroy(struct lws_cache_ttl_lru **_pc) { lws_cache_nscookiejar_t *cache = (lws_cache_nscookiejar_t *)*_pc; if (!cache) return; lws_sul_cancel(&cache->cache.sul); lws_free_set_NULL(*_pc); } #if defined(_DEBUG) static int nsc_dump_cb(lws_cache_nscookiejar_t *cache, void *opaque, int flags, const char *buf, size_t size) { lwsl_hexdump_cache(buf, size); return 0; } static void lws_cache_nscookiejar_debug_dump(struct lws_cache_ttl_lru *_c) { lws_cache_nscookiejar_t *cache = (lws_cache_nscookiejar_t *)_c; int fd = nsc_backing_open_lock(cache, LWS_O_RDONLY, __func__); if (fd < 0) return; lwsl_cache("%s: %s\n", __func__, _c->info.name); nscookiejar_iterate(cache, fd, nsc_dump_cb, NULL); nsc_backing_close_unlock(cache, fd); } #endif const struct lws_cache_ops lws_cache_ops_nscookiejar = { .create = lws_cache_nscookiejar_create, .destroy = lws_cache_nscookiejar_destroy, .expunge = lws_cache_nscookiejar_expunge, .write = lws_cache_nscookiejar_write, .tag_match = lws_cache_nscookiejar_tag_match, .lookup = lws_cache_nscookiejar_lookup, .invalidate = lws_cache_nscookiejar_invalidate, .get = lws_cache_nscookiejar_get, #if defined(_DEBUG) .debug_dump = lws_cache_nscookiejar_debug_dump, #endif }; libwebsockets-4.3.5/lib/misc/cache-ttl/heap.c000066400000000000000000000365031476025525100210270ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include #include "private-lib-misc-cache-ttl.h" #if defined(write) #undef write #endif static void update_sul(lws_cache_ttl_lru_t_heap_t *cache); static int lws_cache_heap_invalidate(struct lws_cache_ttl_lru *_c, const char *key); static int sort_expiry(const lws_dll2_t *a, const lws_dll2_t *b) { const lws_cache_ttl_item_heap_t *c = lws_container_of(a, lws_cache_ttl_item_heap_t, list_expiry), *d = lws_container_of(b, lws_cache_ttl_item_heap_t, list_expiry); if (c->expiry > d->expiry) return 1; if (c->expiry < d->expiry) return -1; return 0; } static void _lws_cache_heap_item_destroy(lws_cache_ttl_lru_t_heap_t *cache, lws_cache_ttl_item_heap_t *item) { lwsl_cache("%s: %s (%s)\n", __func__, cache->cache.info.name, (const char *)&item[1] + item->size); lws_dll2_remove(&item->list_expiry); lws_dll2_remove(&item->list_lru); cache->cache.current_footprint -= item->size; update_sul(cache); if (cache->cache.info.cb) cache->cache.info.cb((void *)((uint8_t *)&item[1]), item->size); lws_free(item); } static void lws_cache_heap_item_destroy(lws_cache_ttl_lru_t_heap_t *cache, lws_cache_ttl_item_heap_t *item, int parent_too) { struct lws_cache_ttl_lru *backing = &cache->cache; const char *tag = ((const char *)&item[1]) + item->size; /* * We're destroying a normal item? */ if (*tag == META_ITEM_LEADING) /* no, nothing to check here then */ goto post; if (backing->info.parent) backing = backing->info.parent; /* * We need to check any cached meta-results from lookups that * include this normal item, and if any, invalidate the meta-results * since they have to be recalculated before being used again. */ lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, cache->items_lru.head) { lws_cache_ttl_item_heap_t *i = lws_container_of(d, lws_cache_ttl_item_heap_t, list_lru); const char *iname = ((const char *)&item[1]) + item->size; uint8_t *pay = (uint8_t *)&item[1], *end = pay + item->size; if (*iname == META_ITEM_LEADING) { size_t taglen = strlen(iname); /* * If the item about to be destroyed makes an * appearance on the meta results list, we must kill * the meta result item to force recalc next time */ while (pay < end) { uint32_t tlen = lws_ser_ru32be(pay + 4); if (tlen == taglen && !strcmp((const char *)pay + 8, iname)) { #if defined(_DEBUG) /* * Sanity check that the item tag is * really a match for that meta results * item */ assert (!backing->info.ops->tag_match( backing, iname + 1, tag, 1)); #endif _lws_cache_heap_item_destroy(cache, i); break; } pay += 8 + tlen + 1; } #if defined(_DEBUG) /* * Sanity check that the item tag really isn't a match * for that meta results item */ assert (backing->info.ops->tag_match(backing, iname + 1, tag, 1)); #endif } } lws_end_foreach_dll_safe(d, d1); post: _lws_cache_heap_item_destroy(cache, item); } static void lws_cache_item_evict_lru(lws_cache_ttl_lru_t_heap_t *cache) { lws_cache_ttl_item_heap_t *ei; if (!cache->items_lru.head) return; ei = lws_container_of(cache->items_lru.head, lws_cache_ttl_item_heap_t, list_lru); lws_cache_heap_item_destroy(cache, ei, 0); } /* * We need to weed out expired entries in the backing file */ static void expiry_cb(lws_sorted_usec_list_t *sul) { lws_cache_ttl_lru_t_heap_t *cache = lws_container_of(sul, lws_cache_ttl_lru_t_heap_t, cache.sul); lws_usec_t now = lws_now_usecs(); lwsl_cache("%s: %s\n", __func__, cache->cache.info.name); while (cache->items_expiry.head) { lws_cache_ttl_item_heap_t *item; item = lws_container_of(cache->items_expiry.head, lws_cache_ttl_item_heap_t, list_expiry); if (item->expiry > now) return; lws_cache_heap_item_destroy(cache, item, 1); } } /* * Let's figure out what the earliest next expiry is */ static int earliest_expiry(lws_cache_ttl_lru_t_heap_t *cache, lws_usec_t *pearliest) { lws_cache_ttl_item_heap_t *item; if (!cache->items_expiry.head) return 1; item = lws_container_of(cache->items_expiry.head, lws_cache_ttl_item_heap_t, list_expiry); *pearliest = item->expiry; return 0; } static void update_sul(lws_cache_ttl_lru_t_heap_t *cache) { lws_usec_t earliest; /* weed out any newly-expired */ expiry_cb(&cache->cache.sul); /* figure out the next soonest expiring item */ if (earliest_expiry(cache, &earliest)) { lws_sul_cancel(&cache->cache.sul); return; } lwsl_debug("%s: setting exp %llu\n", __func__, (unsigned long long)earliest); if (earliest) lws_cache_schedule(&cache->cache, expiry_cb, earliest); } static lws_cache_ttl_item_heap_t * lws_cache_heap_specific(lws_cache_ttl_lru_t_heap_t *cache, const char *specific_key) { lws_start_foreach_dll(struct lws_dll2 *, d, cache->items_lru.head) { lws_cache_ttl_item_heap_t *item = lws_container_of(d, lws_cache_ttl_item_heap_t, list_lru); const char *iname = ((const char *)&item[1]) + item->size; if (!strcmp(specific_key, iname)) return item; } lws_end_foreach_dll(d); return NULL; } static int lws_cache_heap_tag_match(struct lws_cache_ttl_lru *cache, const char *wc, const char *tag, char lookup_rules) { return lws_strcmp_wildcard(wc, strlen(wc), tag, strlen(tag)); } static int lws_cache_heap_lookup(struct lws_cache_ttl_lru *_c, const char *wildcard_key, lws_dll2_owner_t *results_owner) { lws_cache_ttl_lru_t_heap_t *cache = (lws_cache_ttl_lru_t_heap_t *)_c; size_t sklen = strlen(wildcard_key); lws_start_foreach_dll(struct lws_dll2 *, d, cache->items_lru.head) { lws_cache_ttl_item_heap_t *item = lws_container_of(d, lws_cache_ttl_item_heap_t, list_lru); const char *iname = ((const char *)&item[1]) + item->size; if (!lws_strcmp_wildcard(wildcard_key, sklen, iname, strlen(iname))) { size_t ilen = strlen(iname); lws_cache_match_t *m; char hit = 0; /* * It musn't already be on the list from an earlier * cache level */ lws_start_foreach_dll(struct lws_dll2 *, e, results_owner->head) { lws_cache_match_t *i = lws_container_of(e, lws_cache_match_t, list); if (i->tag_size == ilen && !strcmp(iname, ((const char *)&i[1]))) { hit = 1; break; } } lws_end_foreach_dll(e); if (!hit) { /* * it's unique, instantiate a record for it */ m = lws_fi(&_c->info.cx->fic, "cache_lookup_oom") ? NULL : lws_malloc(sizeof(*m) + ilen + 1, __func__); if (!m) { lws_cache_clear_matches(results_owner); return 1; } memset(&m->list, 0, sizeof(m->list)); m->tag_size = ilen; memcpy(&m[1], iname, ilen + 1); lws_dll2_add_tail(&m->list, results_owner); } } } lws_end_foreach_dll(d); return 0; } static int lws_cache_heap_write(struct lws_cache_ttl_lru *_c, const char *specific_key, const uint8_t *source, size_t size, lws_usec_t expiry, void **ppvoid) { lws_cache_ttl_lru_t_heap_t *cache = (lws_cache_ttl_lru_t_heap_t *)_c; struct lws_cache_ttl_lru *backing = _c; lws_cache_ttl_item_heap_t *item, *ei; size_t kl = strlen(specific_key); char *p; lwsl_cache("%s: %s: len %d\n", __func__, _c->info.name, (int)size); /* * Is this new tag going to invalidate any existing cached meta-results? * * If so, let's destroy any of those first to recover the heap */ if (backing->info.parent) backing = backing->info.parent; lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, cache->items_lru.head) { lws_cache_ttl_item_heap_t *i = lws_container_of(d, lws_cache_ttl_item_heap_t, list_lru); const char *iname = ((const char *)&i[1]) + i->size; if (*iname == META_ITEM_LEADING) { /* * If the item about to be added would match any cached * results from before it was added, we have to * invalidate them. To check this, we have to use the * matching rules at the backing store level */ if (!strcmp(iname + 1, specific_key)) _lws_cache_heap_item_destroy(cache, i); } } lws_end_foreach_dll_safe(d, d1); /* * Keep us under the limit if possible... note this will always allow * caching a single large item even if it is above the limits */ while ((cache->cache.info.max_footprint && cache->cache.current_footprint + size > cache->cache.info.max_footprint) || (cache->cache.info.max_items && cache->items_lru.count + 1 > cache->cache.info.max_items)) lws_cache_item_evict_lru(cache); /* remove any existing entry of the same key */ lws_cache_heap_invalidate(&cache->cache, specific_key); item = lws_fi(&_c->info.cx->fic, "cache_write_oom") ? NULL : lws_malloc(sizeof(*item) + kl + 1u + size, __func__); if (!item) return 1; cache->cache.current_footprint += item->size; /* only need to zero down our item object */ memset(item, 0, sizeof(*item)); p = (char *)&item[1]; if (ppvoid) *ppvoid = p; /* copy the payload into place */ if (source) memcpy(p, source, size); /* copy the key string into place, with terminating NUL */ memcpy(p + size, specific_key, kl + 1); item->expiry = expiry; item->key_len = kl; item->size = size; if (expiry) { /* adding to expiry is optional, on nonzero expiry */ lws_dll2_add_sorted(&item->list_expiry, &cache->items_expiry, sort_expiry); ei = lws_container_of(cache->items_expiry.head, lws_cache_ttl_item_heap_t, list_expiry); lwsl_debug("%s: setting exp %llu\n", __func__, (unsigned long long)ei->expiry); lws_cache_schedule(&cache->cache, expiry_cb, ei->expiry); } /* always add outselves to head of lru list */ lws_dll2_add_head(&item->list_lru, &cache->items_lru); return 0; } static int lws_cache_heap_get(struct lws_cache_ttl_lru *_c, const char *specific_key, const void **pdata, size_t *psize) { lws_cache_ttl_lru_t_heap_t *cache = (lws_cache_ttl_lru_t_heap_t *)_c; lws_cache_ttl_item_heap_t *item; item = lws_cache_heap_specific(cache, specific_key); if (!item) return 1; /* we are using it, move it to lru head */ lws_dll2_remove(&item->list_lru); lws_dll2_add_head(&item->list_lru, &cache->items_lru); if (pdata) { *pdata = (const void *)&item[1]; *psize = item->size; } return 0; } static int lws_cache_heap_invalidate(struct lws_cache_ttl_lru *_c, const char *specific_key) { lws_cache_ttl_lru_t_heap_t *cache = (lws_cache_ttl_lru_t_heap_t *)_c; struct lws_cache_ttl_lru *backing = _c; lws_cache_ttl_item_heap_t *item; const void *user; size_t size; if (lws_cache_heap_get(_c, specific_key, &user, &size)) return 0; if (backing->info.parent) backing = backing->info.parent; item = (lws_cache_ttl_item_heap_t *)(((uint8_t *)user) - sizeof(*item)); /* * We must invalidate any cached results that would have included this */ lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, cache->items_lru.head) { lws_cache_ttl_item_heap_t *i = lws_container_of(d, lws_cache_ttl_item_heap_t, list_lru); const char *iname = ((const char *)&i[1]) + i->size; if (*iname == META_ITEM_LEADING) { /* * If the item about to be added would match any cached * results from before it was added, we have to * invalidate them. To check this, we have to use the * matching rules at the backing store level */ if (!backing->info.ops->tag_match(backing, iname + 1, specific_key, 1)) _lws_cache_heap_item_destroy(cache, i); } } lws_end_foreach_dll_safe(d, d1); lws_cache_heap_item_destroy(cache, item, 0); return 0; } static struct lws_cache_ttl_lru * lws_cache_heap_create(const struct lws_cache_creation_info *info) { lws_cache_ttl_lru_t_heap_t *cache; assert(info->cx); assert(info->name); cache = lws_fi(&info->cx->fic, "cache_createfail") ? NULL : lws_zalloc(sizeof(*cache), __func__); if (!cache) return NULL; cache->cache.info = *info; if (info->parent) info->parent->child = &cache->cache; // lwsl_cache("%s: create %s\n", __func__, info->name); return (struct lws_cache_ttl_lru *)cache; } static int destroy_dll(struct lws_dll2 *d, void *user) { lws_cache_ttl_lru_t *_c = (struct lws_cache_ttl_lru *)user; lws_cache_ttl_lru_t_heap_t *cache = (lws_cache_ttl_lru_t_heap_t *)_c; lws_cache_ttl_item_heap_t *item = lws_container_of(d, lws_cache_ttl_item_heap_t, list_lru); lws_cache_heap_item_destroy(cache, item, 0); return 0; } static int lws_cache_heap_expunge(struct lws_cache_ttl_lru *_c) { lws_cache_ttl_lru_t_heap_t *cache = (lws_cache_ttl_lru_t_heap_t *)_c; lws_dll2_foreach_safe(&cache->items_lru, cache, destroy_dll); return 0; } static void lws_cache_heap_destroy(struct lws_cache_ttl_lru **_cache) { lws_cache_ttl_lru_t *c = *_cache; lws_cache_ttl_lru_t_heap_t *cache = (lws_cache_ttl_lru_t_heap_t *)c; if (!cache) return; lws_sul_cancel(&c->sul); lws_dll2_foreach_safe(&cache->items_lru, cache, destroy_dll); lws_free_set_NULL(*_cache); } #if defined(_DEBUG) static int dump_dll(struct lws_dll2 *d, void *user) { lws_cache_ttl_item_heap_t *item = lws_container_of(d, lws_cache_ttl_item_heap_t, list_lru); lwsl_cache(" %s: size %d, exp %llu\n", (const char *)&item[1] + item->size, (int)item->size, (unsigned long long)item->expiry); lwsl_hexdump_cache((const char *)&item[1], item->size); return 0; } static void lws_cache_heap_debug_dump(struct lws_cache_ttl_lru *_c) { lws_cache_ttl_lru_t_heap_t *cache = (lws_cache_ttl_lru_t_heap_t *)_c; #if !defined(LWS_WITH_NO_LOGS) lws_cache_ttl_item_heap_t *item = NULL; lws_dll2_t *d = cache->items_expiry.head; if (d) item = lws_container_of(d, lws_cache_ttl_item_heap_t, list_expiry); lwsl_cache("%s: %s: items %d, earliest %llu\n", __func__, cache->cache.info.name, (int)cache->items_lru.count, item ? (unsigned long long)item->expiry : 0ull); #endif lws_dll2_foreach_safe(&cache->items_lru, cache, dump_dll); } #endif const struct lws_cache_ops lws_cache_ops_heap = { .create = lws_cache_heap_create, .destroy = lws_cache_heap_destroy, .expunge = lws_cache_heap_expunge, .write = lws_cache_heap_write, .tag_match = lws_cache_heap_tag_match, .lookup = lws_cache_heap_lookup, .invalidate = lws_cache_heap_invalidate, .get = lws_cache_heap_get, #if defined(_DEBUG) .debug_dump = lws_cache_heap_debug_dump, #endif }; libwebsockets-4.3.5/lib/misc/cache-ttl/lws-cache-ttl.c000066400000000000000000000160541476025525100225600ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include #include "private-lib-misc-cache-ttl.h" #include #if defined(write) #undef write #endif void lws_cache_clear_matches(lws_dll2_owner_t *results_owner) { lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, results_owner->head) { lws_cache_match_t *item = lws_container_of(d, lws_cache_match_t, list); lws_dll2_remove(d); lws_free(item); } lws_end_foreach_dll_safe(d, d1); } void lws_cache_schedule(struct lws_cache_ttl_lru *cache, sul_cb_t cb, lws_usec_t e) { lwsl_cache("%s: %s schedule %llu\n", __func__, cache->info.name, (unsigned long long)e); lws_sul_schedule(cache->info.cx, cache->info.tsi, &cache->sul, cb, e - lws_now_usecs()); } int lws_cache_write_through(struct lws_cache_ttl_lru *cache, const char *specific_key, const uint8_t *source, size_t size, lws_usec_t expiry, void **ppay) { struct lws_cache_ttl_lru *levels[LWS_CACHE_MAX_LEVELS], *c = cache; int n = 0, r = 0; lws_cache_item_remove(cache, specific_key); /* starting from L1 */ do { levels[n++] = c; c = c->info.parent; } while (c && n < (int)LWS_ARRAY_SIZE(levels)); /* starting from outermost cache level */ while (n) { n--; r = levels[n]->info.ops->write(levels[n], specific_key, source, size, expiry, ppay); } return r; } /* * We want to make a list of unique keys that exist at any cache level * matching a wildcard search key. * * If L1 has a cached version though, we will just use that. */ int lws_cache_lookup(struct lws_cache_ttl_lru *cache, const char *wildcard_key, const void **pdata, size_t *psize) { struct lws_cache_ttl_lru *l1 = cache; lws_dll2_owner_t results_owner; lws_usec_t expiry = 0; char meta_key[128]; uint8_t *p, *temp; size_t sum = 0; int n; memset(&results_owner, 0, sizeof(results_owner)); meta_key[0] = META_ITEM_LEADING; lws_strncpy(&meta_key[1], wildcard_key, sizeof(meta_key) - 2); /* * If we have a cached result set in L1 already, return that */ if (!l1->info.ops->get(l1, meta_key, pdata, psize)) return 0; /* * No, we have to do the actual lookup work in the backing store layer * to get results for this... */ while (cache->info.parent) cache = cache->info.parent; if (cache->info.ops->lookup(cache, wildcard_key, &results_owner)) { /* eg, OOM */ lwsl_cache("%s: bs lookup fail\n", __func__); lws_cache_clear_matches(&results_owner); return 1; } /* * Scan the results, we want to know how big a payload it needs in * the cache, and we want to know the earliest expiry of any of the * component parts, so the meta cache entry for these results can be * expired when any of the results would expire. */ lws_start_foreach_dll(struct lws_dll2 *, d, results_owner.head) { lws_cache_match_t *m = lws_container_of(d, lws_cache_match_t, list); sum += 8; /* payload size, name length */ sum += m->tag_size + 1; if (m->expiry && (!expiry || expiry < m->expiry)) expiry = m->expiry; } lws_end_foreach_dll(d); lwsl_cache("%s: results %d, size %d\n", __func__, (int)results_owner.count, (int)sum); temp = lws_malloc(sum, __func__); if (!temp) { lws_cache_clear_matches(&results_owner); return 1; } /* * Fill temp with the serialized results */ p = temp; lws_start_foreach_dll(struct lws_dll2 *, d, results_owner.head) { lws_cache_match_t *m = lws_container_of(d, lws_cache_match_t, list); /* we don't copy the payload in, but take note of its size */ lws_ser_wu32be(p, (uint32_t)m->payload_size); p += 4; /* length of the tag name (there is an uncounted NUL after) */ lws_ser_wu32be(p, (uint32_t)m->tag_size); p += 4; /* then the tag name, plus the extra NUL */ memcpy(p, &m[1], m->tag_size + 1); p += m->tag_size + 1; } lws_end_foreach_dll(d); lws_cache_clear_matches(&results_owner); /* * Create the right amount of space for an L1 record of these results, * with its expiry set to the earliest of the results, and copy it in * from temp */ n = l1->info.ops->write(l1, meta_key, temp, sum, expiry, (void **)&p); /* done with temp */ lws_free(temp); if (n) return 1; /* point to the results in L1 */ *pdata = p; *psize = sum; return 0; } int lws_cache_item_get(struct lws_cache_ttl_lru *cache, const char *specific_key, const void **pdata, size_t *psize) { while (cache) { if (!cache->info.ops->get(cache, specific_key, pdata, psize)) { lwsl_cache("%s: hit\n", __func__); return 0; } cache = cache->info.parent; } return 1; } int lws_cache_expunge(struct lws_cache_ttl_lru *cache) { int ret = 0; while (cache) { ret |= cache->info.ops->expunge(cache); cache = cache->info.parent; } return ret; } int lws_cache_item_remove(struct lws_cache_ttl_lru *cache, const char *wildcard_key) { while (cache) { if (cache->info.ops->invalidate(cache, wildcard_key)) return 1; cache = cache->info.parent; } return 0; } uint64_t lws_cache_footprint(struct lws_cache_ttl_lru *cache) { return cache->current_footprint; } void lws_cache_debug_dump(struct lws_cache_ttl_lru *cache) { #if defined(_DEBUG) if (cache->info.ops->debug_dump) cache->info.ops->debug_dump(cache); #endif } int lws_cache_results_walk(lws_cache_results_t *walk_ctx) { if (!walk_ctx->size) return 1; walk_ctx->payload_len = lws_ser_ru32be(walk_ctx->ptr); walk_ctx->tag_len = lws_ser_ru32be(walk_ctx->ptr + 4); walk_ctx->tag = walk_ctx->ptr + 8; walk_ctx->ptr += walk_ctx->tag_len + 1 + 8; walk_ctx->size -= walk_ctx->tag_len + 1 + 8; return 0; } struct lws_cache_ttl_lru * lws_cache_create(const struct lws_cache_creation_info *info) { assert(info); assert(info->ops); assert(info->name); assert(info->ops->create); return info->ops->create(info); } void lws_cache_destroy(struct lws_cache_ttl_lru **_cache) { lws_cache_ttl_lru_t *cache = *_cache; if (!cache) return; assert(cache->info.ops->destroy); lws_sul_cancel(&cache->sul); cache->info.ops->destroy(_cache); } libwebsockets-4.3.5/lib/misc/cache-ttl/private-lib-misc-cache-ttl.h000066400000000000000000000062631476025525100251300ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #define lwsl_cache lwsl_debug #define lwsl_hexdump_cache lwsl_hexdump_debug #define LWS_CACHE_MAX_LEVELS 3 /* * If we need structure inside the cache tag names, use this character as a * separator */ #define LWSCTAG_SEP '|' /* * Our synthetic cache result items all have tags starting with this char */ #define META_ITEM_LEADING '!' typedef struct lws_cache_ttl_item_heap { lws_dll2_t list_expiry; lws_dll2_t list_lru; lws_usec_t expiry; size_t key_len; size_t size; /* * len + key_len + 1 bytes of data overcommitted, user object first * so it is well-aligned, then the NUL-terminated key name */ } lws_cache_ttl_item_heap_t; /* this is a "base class", all cache implementations have one at the start */ typedef struct lws_cache_ttl_lru { struct lws_cache_creation_info info; lws_sorted_usec_list_t sul; struct lws_cache_ttl_lru *child; uint64_t current_footprint; } lws_cache_ttl_lru_t; /* * The heap-backed cache uses lws_dll2 linked-lists to track items that are * in it. */ typedef struct lws_cache_ttl_lru_heap { lws_cache_ttl_lru_t cache; lws_dll2_owner_t items_expiry; lws_dll2_owner_t items_lru; } lws_cache_ttl_lru_t_heap_t; /* * We want to be able to work with a large file-backed implementation even on * devices that don't have heap to track what is in it. It means if lookups * reach this cache layer, we will be scanning a potentially large file. * * L1 caching of lookups (including null result list) reduces the expense of * this on average. We keep a copy of the last computed earliest expiry. * * We can't keep an open file handle here. Because other processes may change * the cookie file by deleting and replacing it, we have to open it fresh each * time. */ typedef struct lws_cache_nscookiejar { lws_cache_ttl_lru_t cache; lws_usec_t earliest_expiry; } lws_cache_nscookiejar_t; void lws_cache_clear_matches(lws_dll2_owner_t *results_owner); void lws_cache_schedule(struct lws_cache_ttl_lru *cache, sul_cb_t cb, lws_usec_t e); libwebsockets-4.3.5/lib/misc/daemonize.c000066400000000000000000000125671476025525100202250ustar00rootroot00000000000000/* * This code is mainly taken from Doug Potter's page * * http://www-theorie.physik.unizh.ch/~dpotter/howto/daemonize * * I contacted him 2007-04-16 about the license for the original code, * he replied it is Public Domain. Use the URL above to get the original * Public Domain version if you want it. * * This version is MIT like the rest of libwebsockets and is * Copyright (c)2006 - 2013 Andy Green * * * You're much better advised to use systemd to daemonize stuff without needing * this kind of support in the app itself. */ #include #include #include #include #include #include #include #include #include #include #include #include "private-lib-core.h" pid_t pid_daemon; static char *lock_path; pid_t get_daemonize_pid() { return pid_daemon; } static void child_handler(int signum) { int len, sent, fd; char sz[20]; switch (signum) { case SIGALRM: /* timed out daemonizing */ exit(0); break; case SIGUSR1: /* positive confirmation we daemonized well */ if (!lock_path) exit(0); /* Create the lock file as the current user */ fd = lws_open(lock_path, O_TRUNC | O_RDWR | O_CREAT, 0640); if (fd < 0) { fprintf(stderr, "unable to create lock file %s, code=%d (%s)\n", lock_path, errno, strerror(errno)); exit(0); } len = sprintf(sz, "%u", (unsigned int)pid_daemon); sent = (int)write(fd, sz, (size_t)len); if (sent != len) fprintf(stderr, "unable to write pid to lock file %s, code=%d (%s)\n", lock_path, errno, strerror(errno)); close(fd); exit(0); //!!(sent == len)); case SIGCHLD: /* daemonization failed */ exit(0); break; } } static void lws_daemon_closing(int sigact) { if (getpid() == pid_daemon) if (lock_path) { unlink(lock_path); lws_free_set_NULL(lock_path); } kill(getpid(), SIGKILL); } /* * You just need to call this from your main(), when it * returns you are all set "in the background" decoupled * from the console you were started from. * * The process context you called from has been terminated then. */ int lws_daemonize(const char *_lock_path) { struct sigaction act; pid_t sid, parent; /* already a daemon */ // if (getppid() == 1) // return 1; if (_lock_path) { int n; int fd = lws_open(_lock_path, O_RDONLY); if (fd >= 0) { char buf[10]; n = (int)read(fd, buf, sizeof(buf)); close(fd); if (n) { int ret; n = atoi(buf); ret = kill(n, 0); if (ret >= 0) { fprintf(stderr, "Daemon already running pid %d\n", n); exit(1); } fprintf(stderr, "Removing stale lock %s from dead pid %d\n", _lock_path, n); unlink(lock_path); } } n = (int)strlen(_lock_path) + 1; lock_path = lws_malloc((unsigned int)n, "daemonize lock"); if (!lock_path) { fprintf(stderr, "Out of mem in lws_daemonize\n"); return 1; } strcpy(lock_path, _lock_path); } /* Trap signals that we expect to receive */ signal(SIGCHLD, child_handler); /* died */ signal(SIGUSR1, child_handler); /* was happy */ signal(SIGALRM, child_handler); /* timeout daemonizing */ /* Fork off the parent process */ pid_daemon = fork(); if ((int)pid_daemon < 0) { fprintf(stderr, "unable to fork daemon, code=%d (%s)", errno, strerror(errno)); exit(9); } /* If we got a good PID, then we can exit the parent process. */ if (pid_daemon > 0) { /* * Wait for confirmation signal from the child via * SIGCHILD / USR1, or for two seconds to elapse * (SIGALRM). pause() should not return. */ alarm(2); pause(); /* should not be reachable */ exit(1); } /* At this point we are executing as the child process */ parent = getppid(); pid_daemon = getpid(); /* Cancel certain signals */ signal(SIGCHLD, SIG_DFL); /* A child process dies */ signal(SIGTSTP, SIG_IGN); /* Various TTY signals */ signal(SIGTTOU, SIG_IGN); signal(SIGTTIN, SIG_IGN); signal(SIGHUP, SIG_IGN); /* Ignore hangup signal */ /* Change the file mode mask */ umask(0); /* Create a new SID for the child process */ sid = setsid(); if (sid < 0) { fprintf(stderr, "unable to create a new session, code %d (%s)", errno, strerror(errno)); exit(2); } /* * Change the current working directory. This prevents the current * directory from being locked; hence not being able to remove it. */ if (chdir("/tmp") < 0) { fprintf(stderr, "unable to change directory to %s, code %d (%s)", "/", errno, strerror(errno)); exit(3); } /* Redirect standard files to /dev/null */ if (!freopen("/dev/null", "r", stdin)) fprintf(stderr, "unable to freopen() stdin, code %d (%s)", errno, strerror(errno)); if (!freopen("/dev/null", "w", stdout)) fprintf(stderr, "unable to freopen() stdout, code %d (%s)", errno, strerror(errno)); if (!freopen("/dev/null", "w", stderr)) fprintf(stderr, "unable to freopen() stderr, code %d (%s)", errno, strerror(errno)); /* Tell the parent process that we are A-okay */ kill(parent, SIGUSR1); act.sa_handler = lws_daemon_closing; sigemptyset(&act.sa_mask); act.sa_flags = 0; sigaction(SIGTERM, &act, NULL); /* return to continue what is now "the daemon" */ return 0; } libwebsockets-4.3.5/lib/misc/dir.c000066400000000000000000000230171476025525100170200ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #if !defined(NO_GNU_SOURCE_THIS_TIME) #define NO_GNU_SOURCE_THIS_TIME #endif #if !defined(_DARWIN_C_SOURCE) #define _DARWIN_C_SOURCE #endif #include "private-lib-core.h" #include #include #include #if defined(WIN32) #include #define read _read #define open _open #define close _close #define write _write #define mkdir(x,y) _mkdir(x) #define rmdir _rmdir #define unlink _unlink #define HAVE_STRUCT_TIMESPEC #if defined(pid_t) #undef pid_t #endif #endif /* win32 */ #define COMBO_SIZEOF 512 #if !defined(LWS_PLAT_FREERTOS) #if defined(WIN32) #include "../../win32port/dirent/dirent-win32.h" #else #include #endif static int filter(const struct dirent *ent) { if (!strcmp(ent->d_name, ".") || !strcmp(ent->d_name, "..")) return 0; return 1; } #if !defined(WIN32) static char csep = '/'; #else static char csep = '\\'; #endif static void lws_dir_via_stat(char *combo, size_t l, const char *path, struct lws_dir_entry *lde) { struct stat s; lws_strncpy(combo + l, path, COMBO_SIZEOF - l); lde->type = LDOT_UNKNOWN; if (!stat(combo, &s)) { switch (s.st_mode & S_IFMT) { case S_IFBLK: lde->type = LDOT_BLOCK; break; case S_IFCHR: lde->type = LDOT_CHAR; break; case S_IFDIR: lde->type = LDOT_DIR; break; case S_IFIFO: lde->type = LDOT_FIFO; break; #if !defined(WIN32) case S_IFLNK: lde->type = LDOT_LINK; break; #endif case S_IFREG: lde->type = LDOT_FILE; break; default: break; } } } int lws_dir(const char *dirpath, void *user, lws_dir_callback_function cb) { struct lws_dir_entry lde; struct dirent **namelist; int n, i, ret = 1; char combo[COMBO_SIZEOF]; size_t l; l = (size_t)(ssize_t)lws_snprintf(combo, COMBO_SIZEOF - 2, "%s", dirpath); combo[l++] = csep; combo[l] = '\0'; n = scandir((char *)dirpath, &namelist, filter, alphasort); if (n < 0) { lwsl_err("Scandir on '%s' failed, errno %d\n", dirpath, LWS_ERRNO); return 1; } for (i = 0; i < n; i++) { #if !defined(__sun) && !defined(__QNX__) unsigned int type = namelist[i]->d_type; #endif if (strchr(namelist[i]->d_name, '~')) goto skip; lde.name = namelist[i]->d_name; /* * some filesystems don't report this (ZFS) and tell that * files are LDOT_UNKNOWN */ #if defined(__sun) || defined(__QNX__) lws_dir_via_stat(combo, l, namelist[i]->d_name, &lde); #else /* * XFS on Linux doesn't fill in d_type at all, always zero. */ if (DT_BLK != DT_UNKNOWN && type == DT_BLK) lde.type = LDOT_BLOCK; else if (DT_CHR != DT_UNKNOWN && type == DT_CHR) lde.type = LDOT_CHAR; else if (DT_DIR != DT_UNKNOWN && type == DT_DIR) lde.type = LDOT_DIR; else if (DT_FIFO != DT_UNKNOWN && type == DT_FIFO) lde.type = LDOT_FIFO; else if (DT_LNK != DT_UNKNOWN && type == DT_LNK) lde.type = LDOT_LINK; else if (DT_REG != DT_UNKNOWN && type == DT_REG) lde.type = LDOT_FILE; else if (DT_SOCK != DT_UNKNOWN && type == DT_SOCK) lde.type = LDOTT_SOCKET; else { lde.type = LDOT_UNKNOWN; lws_dir_via_stat(combo, l, namelist[i]->d_name, &lde); } #endif if (cb(dirpath, user, &lde)) { while (i < n) free(namelist[i++]); ret = 0; /* told to stop by cb */ goto bail; } skip: free(namelist[i]); } bail: free(namelist); return ret; } /* * Check filename against one globby filter * * We can support things like "*.rpm" */ static int lws_dir_glob_check(const char *nm, const char *filt) { while (*nm) { if (*filt == '*') { if (!strcmp(nm, filt + 1)) return 1; } else { if (*nm != *filt) return 0; filt++; } nm++; } return 0; } /* * We get passed a single filter string, like "*.txt" or "mydir/\*.rpm" or so. */ int lws_dir_glob_cb(const char *dirpath, void *user, struct lws_dir_entry *lde) { lws_dir_glob_t *filter = (lws_dir_glob_t*)user; char path[384]; if (!strcmp(lde->name, ".") || !strcmp(lde->name, "..")) return 0; if (lde->type == LDOT_DIR) return 0; if (lws_dir_glob_check(lde->name, filter->filter)) { lws_snprintf(path, sizeof(path), "%s%c%s", dirpath, csep, lde->name); filter->cb(filter->user, path); } return 0; } int lws_dir_rm_rf_cb(const char *dirpath, void *user, struct lws_dir_entry *lde) { char path[384]; if (!strcmp(lde->name, ".") || !strcmp(lde->name, "..")) return 0; lws_snprintf(path, sizeof(path), "%s%c%s", dirpath, csep, lde->name); if (lde->type == LDOT_DIR) { #if !defined(WIN32) && !defined(_WIN32) && !defined(__COVERITY__) char dummy[8]; /* * hm... eg, recursive dir symlinks can show up a LDOT_DIR * here. If it's a symlink, don't recurse into it. * * Notice we immediately discard dummy without looking in it. * There is no way to get into trouble from its lack of NUL * termination in dummy[]. We just wanted to know if it was * a symlink at all. * * Hide this from Coverity since it flags any use of readlink() * even if safe. */ if (readlink(path, dummy, sizeof(dummy)) < 0) #endif lws_dir(path, NULL, lws_dir_rm_rf_cb); if (rmdir(path)) lwsl_warn("%s: rmdir %s failed %d\n", __func__, path, errno); } else { if (unlink(path)) { #if defined(WIN32) SetFileAttributesA(path, FILE_ATTRIBUTE_NORMAL); if (unlink(path)) #else if (rmdir(path)) #endif lwsl_warn("%s: unlink %s failed %d (type %d)\n", __func__, path, errno, lde->type); } } return 0; } #endif #if defined(LWS_WITH_PLUGINS_API) struct lws_plugins_args { struct lws_plugin **pplugin; const char *_class; const char *filter; each_plugin_cb_t each; void *each_user; }; static int lws_plugins_dir_cb(const char *dirpath, void *user, struct lws_dir_entry *lde) { struct lws_plugins_args *pa = (struct lws_plugins_args *)user; char path[256], base[64], *q = base; const lws_plugin_header_t *pl; const char *p; if (strlen(lde->name) < 7) return 0; /* keep going */ /* * The actual plugin names for protocol plugins look like * "libprotocol_lws_ssh_base.so" and for event libs * "libwebsockets-evlib_ev.so"... to recover the base name of * "lws_ssh_base" and "evlib_ev" we strip from the left to after the * first _ or -, and then truncate at the first . */ p = lde->name; while (*p && *p != '_' && *p != '-') p++; if (!*p) return 0; p++; while (*p && *p != '.' && lws_ptr_diff(q, base) < (int)sizeof(base) - 1) *q++ = *p++; *q = '\0'; /* if he's given a filter, only match if base matches it */ if (pa->filter && strcmp(base, pa->filter)) return 0; /* keep going */ lws_snprintf(path, sizeof(path) - 1, "%s/%s", dirpath, lde->name); pl = lws_plat_dlopen(pa->pplugin, path, base, pa->_class, pa->each, pa->each_user); /* * If we were looking for a specific plugin, finding it should make * us stop looking (eg, to account for directory precedence of the * same plugin). If scanning for plugins in a dir, we always keep * going. */ return pa->filter && pl; } int lws_plugins_init(struct lws_plugin **pplugin, const char * const *d, const char *_class, const char *filter, each_plugin_cb_t each, void *each_user) { struct lws_plugins_args pa; char *ld_env; int ret = 1; pa.pplugin = pplugin; pa._class = _class; pa.each = each; pa.each_user = each_user; pa.filter = filter; /* * Check LD_LIBRARY_PATH override path first if present */ ld_env = getenv("LD_LIBRARY_PATH"); if (ld_env) { char temp[128]; struct lws_tokenize ts; memset(&ts, 0, sizeof(ts)); ts.start = ld_env; ts.len = strlen(ld_env); ts.flags = LWS_TOKENIZE_F_SLASH_NONTERM | LWS_TOKENIZE_F_DOT_NONTERM | LWS_TOKENIZE_F_MINUS_NONTERM | LWS_TOKENIZE_F_NO_INTEGERS | LWS_TOKENIZE_F_NO_FLOATS; do { ts.e = (int8_t)lws_tokenize(&ts); if (ts.e != LWS_TOKZE_TOKEN) continue; lws_strnncpy(temp, ts.token, ts.token_len, sizeof(temp)); lwsl_info("%s: trying %s\n", __func__, temp); if (!lws_dir(temp, &pa, lws_plugins_dir_cb)) ret = 0; } while (ts.e > 0); } while (d && *d) { lwsl_info("%s: trying %s\n", __func__, *d); if (!lws_dir(*d, &pa, lws_plugins_dir_cb)) ret = 0; d++; } return ret; } int lws_plugins_destroy(struct lws_plugin **pplugin, each_plugin_cb_t each, void *each_user) { struct lws_plugin *p = *pplugin, *p1; while (p) { if (each) each(p, each_user); lws_plat_destroy_dl(p); p1 = p->list; p->list = NULL; lws_free(p); p = p1; } *pplugin = NULL; return 0; } #endif libwebsockets-4.3.5/lib/misc/diskcache.c000066400000000000000000000277011476025525100201640ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #if !defined(_GNU_SOURCE) #define _GNU_SOURCE #endif #include #include #include "private-lib-core.h" #include #include #include #include #include #include #include #include #include #include #include #if defined(__APPLE__) #include /* Travis OSX does not have DT_REG... */ #if !defined(DT_REG) #define DT_REG 8 #endif #endif struct file_entry { lws_list_ptr sorted; lws_list_ptr prev; char name[64]; time_t modified; size_t size; }; struct lws_diskcache_scan { struct file_entry *batch; const char *cache_dir_base; lws_list_ptr head; time_t last_scan_completed; uint64_t agg_size; uint64_t cache_size_limit; uint64_t avg_size; uint64_t cache_tries; uint64_t cache_hits; int cache_subdir; int batch_in_use; int agg_file_count; int secs_waiting; }; #define KIB (1024) #define MIB (KIB * KIB) #define lp_to_fe(p, _n) lws_list_ptr_container(p, struct file_entry, _n) static const char *hex = "0123456789abcdef"; #define BATCH_COUNT 128 static int fe_modified_sort(lws_list_ptr a, lws_list_ptr b) { struct file_entry *p1 = lp_to_fe(a, sorted), *p2 = lp_to_fe(b, sorted); return (int)((long)p2->modified - (long)p1->modified); } struct lws_diskcache_scan * lws_diskcache_create(const char *cache_dir_base, uint64_t cache_size_limit) { struct lws_diskcache_scan *lds = lws_malloc(sizeof(*lds), "cachescan"); if (!lds) return NULL; memset(lds, 0, sizeof(*lds)); lds->cache_dir_base = cache_dir_base; lds->cache_size_limit = cache_size_limit; return lds; } void lws_diskcache_destroy(struct lws_diskcache_scan **lds) { if ((*lds)->batch) lws_free((*lds)->batch); lws_free(*lds); *lds = NULL; } int lws_diskcache_prepare(const char *cache_base_dir, int mode, uid_t uid) { char dir[256]; int n, m; (void)mkdir(cache_base_dir, (unsigned short)mode); if (chown(cache_base_dir, uid, (gid_t)-1)) lwsl_err("%s: %s: unable to chown %d\n", __func__, cache_base_dir, uid); for (n = 0; n < 16; n++) { lws_snprintf(dir, sizeof(dir), "%s/%c", cache_base_dir, hex[n]); (void)mkdir(dir, (mode_t)mode); if (chown(dir, uid, (uid_t)-1)) lwsl_err("%s: %s: unable to chown %d\n", __func__, dir, uid); for (m = 0; m < 16; m++) { lws_snprintf(dir, sizeof(dir), "%s/%c/%c", cache_base_dir, hex[n], hex[m]); (void)mkdir(dir, (mode_t)mode); if (chown(dir, uid, (uid_t)-1)) lwsl_err("%s: %s: unable to chown %d\n", __func__, dir, uid); } } return 0; } /* copies and then truncates the incoming name, and renames the file at the * untruncated path to have the new truncated name */ int lws_diskcache_finalize_name(char *cache) { char ren[256], *p; strncpy(ren, cache, sizeof(ren) - 1); ren[sizeof(ren) - 1] = '\0'; p = strchr(cache, '~'); if (p) { *p = '\0'; if (rename(ren, cache)) { lwsl_err("%s: problem renaming %s to %s\n", __func__, ren, cache); return 1; } return 0; } return 1; } int lws_diskcache_query(struct lws_diskcache_scan *lds, int is_bot, const char *hash_hex, int *_fd, char *cache, int cache_len, size_t *extant_cache_len) { struct stat s; int n; /* caching is disabled? */ if (!lds->cache_dir_base) return LWS_DISKCACHE_QUERY_NO_CACHE; if (!is_bot) lds->cache_tries++; n = lws_snprintf(cache, (size_t)cache_len, "%s/%c/%c/%s", lds->cache_dir_base, hash_hex[0], hash_hex[1], hash_hex); lwsl_info("%s: job cache %s\n", __func__, cache); *_fd = open(cache, O_RDONLY); if (*_fd >= 0) { int fd; if (!is_bot) lds->cache_hits++; if (fstat(*_fd, &s)) { close(*_fd); return LWS_DISKCACHE_QUERY_NO_CACHE; } *extant_cache_len = (size_t)s.st_size; /* "touch" the hit cache file so it's last for LRU now */ fd = open(cache, O_RDWR); if (fd >= 0) close(fd); return LWS_DISKCACHE_QUERY_EXISTS; } /* bots are too random to pollute the cache with their antics */ if (is_bot) return LWS_DISKCACHE_QUERY_NO_CACHE; /* let's create it first with a unique temp name */ lws_snprintf(cache + n, (size_t)cache_len - (unsigned int)n, "~%d-%p", (int)getpid(), extant_cache_len); *_fd = open(cache, O_RDWR | O_CREAT | O_TRUNC, 0600); if (*_fd < 0) { /* well... ok... we will proceed without cache then... */ lwsl_notice("%s: Problem creating cache %s: errno %d\n", __func__, cache, errno); return LWS_DISKCACHE_QUERY_NO_CACHE; } return LWS_DISKCACHE_QUERY_CREATING; } int lws_diskcache_secs_to_idle(struct lws_diskcache_scan *lds) { return lds->secs_waiting; } /* * The goal is to collect the oldest BATCH_COUNT filepaths and filesizes from * the dirs under the cache dir. Since we don't need or want a full list of * files in there in memory at once, we restrict the linked-list size to * BATCH_COUNT entries, and once it is full, simply ignore any further files * that are newer than the newest one on that list. Files older than the * newest guy already on the list evict the newest guy already on the list * and are sorted into the correct order. In this way no matter the number * of files to be processed the memory requirement is fixed at BATCH_COUNT * struct file_entry-s. * * The oldest subset of BATCH_COUNT files are sorted into the cd->batch * allocation in more recent -> least recent order. * * We want to track the total size of all files we saw as well, so we know if * we need to actually do anything yet to restrict how much space it's taking * up. * * And we want to do those things statefully and incrementally instead of one * big atomic operation, since the user may want a huge cache, so we look in * one cache dir at a time and track state in the repodir struct. * * When we have seen everything, we add the doubly-linked prev pointers and then * if we are over the limit, start deleting up to BATCH_COUNT files working back * from the end. */ int lws_diskcache_trim(struct lws_diskcache_scan *lds) { size_t cache_size_limit = (size_t)lds->cache_size_limit; char dirpath[132], filepath[132 + 32]; lws_list_ptr lp, op = NULL; int files_trimmed = 0; struct file_entry *p; int fd, n, ret = -1; size_t trimmed = 0; struct dirent *de; struct stat s; DIR *dir; if (!lds->cache_subdir) { if (lds->last_scan_completed + lds->secs_waiting > time(NULL)) return 0; lds->batch = lws_malloc(sizeof(struct file_entry) * BATCH_COUNT, "cache_trim"); if (!lds->batch) { lwsl_err("%s: OOM\n", __func__); return 1; } lds->agg_size = 0; lds->head = NULL; lds->batch_in_use = 0; lds->agg_file_count = 0; } lws_snprintf(dirpath, sizeof(dirpath), "%s/%c/%c", lds->cache_dir_base, hex[(lds->cache_subdir >> 4) & 15], hex[lds->cache_subdir & 15]); dir = opendir(dirpath); if (!dir) { lwsl_err("Unable to walk repo dir '%s'\n", lds->cache_dir_base); return -1; } do { de = readdir(dir); if (!de) break; if (de->d_type != DT_REG) continue; lds->agg_file_count++; lws_snprintf(filepath, sizeof(filepath), "%s/%s", dirpath, de->d_name); fd = open(filepath, O_RDONLY); if (fd < 0) { lwsl_err("%s: cannot open %s\n", __func__, filepath); continue; } n = fstat(fd, &s); close(fd); if (n) { lwsl_notice("%s: cannot stat %s\n", __func__, filepath); continue; } lds->agg_size += (uint64_t)s.st_size; if (lds->batch_in_use == BATCH_COUNT) { /* * once we filled up the batch with candidates, we don't * need to consider any files newer than the newest guy * on the list... */ if (lp_to_fe(lds->head, sorted)->modified < s.st_mtime) continue; /* * ... and if we find an older file later, we know it * will be replacing the newest guy on the list, so use * that directly... */ p = lds->head; lds->head = p->sorted; } else /* we are still accepting anything to fill the batch */ p = &lds->batch[lds->batch_in_use++]; p->sorted = NULL; strncpy(p->name, de->d_name, sizeof(p->name) - 1); p->name[sizeof(p->name) - 1] = '\0'; p->modified = s.st_mtime; p->size = (size_t)s.st_size; lws_list_ptr_insert(&lds->head, &p->sorted, fe_modified_sort); } while (de); ret = 0; lds->cache_subdir++; if (lds->cache_subdir != 0x100) goto done; /* we completed the whole scan... */ /* if really no guidence, then 256MiB */ if (!cache_size_limit) cache_size_limit = 256 * 1024 * 1024; if (lds->agg_size > cache_size_limit) { /* apply prev pointers to make the list doubly-linked */ lp = lds->head; while (lp) { p = lp_to_fe(lp, sorted); p->prev = op; op = &p->prev; lp = p->sorted; } /* * reverse the list (start from tail, now traverse using * .prev)... it's oldest-first now... */ lp = op; while (lp && lds->agg_size > cache_size_limit) { p = lp_to_fe(lp, prev); lws_snprintf(filepath, sizeof(filepath), "%s/%c/%c/%s", lds->cache_dir_base, p->name[0], p->name[1], p->name); if (!unlink(filepath)) { lds->agg_size -= p->size; trimmed += p->size; files_trimmed++; } else lwsl_notice("%s: Failed to unlink %s\n", __func__, filepath); lp = p->prev; } if (files_trimmed) lwsl_notice("%s: %s: trimmed %d files totalling " "%lldKib, leaving %lldMiB\n", __func__, lds->cache_dir_base, files_trimmed, ((unsigned long long)trimmed) / KIB, ((unsigned long long)lds->agg_size) / MIB); } if (lds->agg_size && lds->agg_file_count) lds->avg_size = lds->agg_size / (uint64_t)lds->agg_file_count; /* * estimate how long we can go before scanning again... default we need * to start again immediately */ lds->last_scan_completed = time(NULL); lds->secs_waiting = 1; if (lds->agg_size < cache_size_limit) { uint64_t avg = 4096, capacity, projected; /* let's use 80% of the real average for margin */ if (lds->agg_size && lds->agg_file_count) avg = ((lds->agg_size * 8) / (uint64_t)lds->agg_file_count) / 10; /* * if we collected BATCH_COUNT files of the average size, * how much can we clean up in 256s? */ capacity = avg * BATCH_COUNT; /* * if the cache grew by 10%, would we hit the limit even then? */ projected = (lds->agg_size * 11) / 10; if (projected < cache_size_limit) /* no... */ lds->secs_waiting = (int)((256 / 2) * ((cache_size_limit - projected) / capacity)); /* * large waits imply we may not have enough info yet, so * check once an hour at least. */ if (lds->secs_waiting > 3600) lds->secs_waiting = 3600; } else lds->secs_waiting = 0; lwsl_info("%s: cache %s: %lldKiB / %lldKiB, next scan %ds\n", __func__, lds->cache_dir_base, (unsigned long long)lds->agg_size / KIB, (unsigned long long)cache_size_limit / KIB, lds->secs_waiting); lws_free(lds->batch); lds->batch = NULL; lds->cache_subdir = 0; done: closedir(dir); return ret; } libwebsockets-4.3.5/lib/misc/fsmount.c000066400000000000000000000102451476025525100177340ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * Mount and unmount overlayfs mountpoints (linux only) */ #include "private-lib-core.h" #include #include #include #include #include #include #include #include static int rm_rf_cb(const char *dirpath, void *user, struct lws_dir_entry *lde) { char path[384]; if (!strcmp(lde->name, ".") || !strcmp(lde->name, "..")) return 0; lws_snprintf(path, sizeof(path), "%s/%s", dirpath, lde->name); if (lde->type == LDOT_DIR) { lws_dir(path, NULL, rm_rf_cb); rmdir(path); } else unlink(path); return 0; } int lws_fsmount_mount(struct lws_fsmount *fsm) { struct libmnt_context *ctx; char opts[512], c; int n, m; /* * For robustness, there are a couple of sticky situations caused by * previous mounts not cleaning up... 1) still mounted on the mountpoint * and 2) junk in the session dir from the dead session. * * For 1), do a gratuitous umount attempts until it feels nothing to * umount... */ c = fsm->mp[0]; while (!lws_fsmount_unmount(fsm)) fsm->mp[0] = c; fsm->mp[0] = c; /* * ... for 2), generate the session dir basepath and destroy everything * in it... it's less dangerous than it sounds because there are * hardcoded unusual dir names in the base path, so it can't go wild * even if the overlay path is empty or / */ lws_snprintf(opts, sizeof(opts), "%s/overlays/%s/session", fsm->overlay_path, fsm->ovname); lwsl_info("%s: emptying session dir %s\n", __func__, opts); lws_dir(opts, NULL, rm_rf_cb); /* * Piece together the options for the overlay mount... */ n = lws_snprintf(opts, sizeof(opts), "lowerdir="); for (m = LWS_ARRAY_SIZE(fsm->layers) - 1; m >= 0; m--) if (fsm->layers[m]) { if (n != 9) opts[n++] = ':'; n += lws_snprintf(&opts[n], (size_t)(sizeof(opts) - (unsigned int)n), "%s/%s/%s", fsm->layers_path, fsm->distro, fsm->layers[m]); } n += lws_snprintf(&opts[n], (size_t)(sizeof(opts) - (unsigned int)n), ",upperdir=%s/overlays/%s/session", fsm->overlay_path, fsm->ovname); n += lws_snprintf(&opts[n], (size_t)(sizeof(opts) - (unsigned int)n), ",workdir=%s/overlays/%s/work", fsm->overlay_path, fsm->ovname); ctx = mnt_new_context(); if (!ctx) return 1; mnt_context_set_fstype(ctx, "overlay"); mnt_context_set_options(ctx, opts); mnt_context_set_mflags(ctx, MS_NOATIME /* |MS_NOEXEC */); mnt_context_set_target(ctx, fsm->mp); mnt_context_set_source(ctx, "none"); lwsl_notice("%s: mount opts %s\n", __func__, opts); puts(opts); m = mnt_context_mount(ctx); lwsl_notice("%s: mountpoint %s: %d\n", __func__, fsm->mp, m); mnt_free_context(ctx); return m; } int lws_fsmount_unmount(struct lws_fsmount *fsm) { struct libmnt_context *ctx; int m; lwsl_notice("%s: %s\n", __func__, fsm->mp); ctx = mnt_new_context(); if (!ctx) return 1; mnt_context_set_target(ctx, fsm->mp); m = mnt_context_umount(ctx); mnt_free_context(ctx); fsm->mp[0] = '\0'; return m; } libwebsockets-4.3.5/lib/misc/fts/000077500000000000000000000000001476025525100166675ustar00rootroot00000000000000libwebsockets-4.3.5/lib/misc/fts/README.md000066400000000000000000000260201476025525100201460ustar00rootroot00000000000000# LWS Full Text Search ## Introduction ![lwsac flow](/doc-assets/lws-fts.svg) The general approach is to scan one or more UTF-8 input text "files" (they may only exist in memory) and create an in-memory optimized trie for every token in the file. This can then be serialized out to disk in the form of a single index file (no matter how many input files were involved or how large they were). The implementation is designed to be modest on memory and cpu for both index creation and querying, and suitable for weak machines with some kind of random access storage. For searching only memory to hold results is required, the actual searches and autocomplete suggestions are done very rapidly by seeking around structures in the on-disk index file. Function|Related Link ---|--- Public API|[include/libwebsockets/lws-fts.h](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-fts.h) CI test app|[minimal-examples/api-tests/api-test-fts](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/api-tests/api-test-fts) Demo minimal example|[minimal-examples/http-server/minimal-http-server-fulltext-search](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/http-server/minimal-http-server-fulltext-search) Live Demo|[https://libwebsockets.org/ftsdemo/](https://libwebsockets.org/ftsdemo/) ## Query API overview Searching returns a potentially very large lwsac allocated object, with contents and max size controlled by the members of a struct lws_fts_search_params passed to the search function. Three kinds of result are possible: ### Autocomplete suggestions These are useful to provide lists of extant results in realtime as the user types characters that constrain the search. So if the user has typed 'len', any hits for 'len' itself are reported along with 'length', and whatever else is in the index beginning 'len'.. The results are selected using and are accompanied by an aggregated count of results down that path, and the results so the "most likely" results already measured by potential hits appear first. These results are in a linked-list headed by `result.autocomplete_head` and each is in a `struct lws_fts_result_autocomplete`. They're enabled in the search results by giving the flag `LWSFTS_F_QUERY_AUTOCOMPLETE` in the search parameter flags. ### Filepath results Simply a list of input files containing the search term with some statistics, one file is mentioned in a `struct lws_fts_result_filepath` result struct. This would be useful for creating a selection UI to "drill down" to individual files when there are many with matches. This is enabled by the `LWSFTS_F_QUERY_FILES` search flag. ### Filepath and line results Same as the file path list, but for each filepath, information on the line numbers and input file offset where the line starts are provided. This is enabled by `LWSFTS_F_QUERY_FILE_LINES`... if you additionally give `LWSFTS_F_QUERY_QUOTE_LINE` flag then the contents of each hit line from the input file are also provided. ## Result format inside the lwsac A `struct lws_fts_result` at the start of the lwsac contains heads for linked- lists of autocomplete and filepath results inside the lwsac. For autocomplete suggestions, the string itself is immediately after the `struct lws_fts_result_autocomplete` in memory. For filepath results, after each `struct lws_fts_result_filepath` is - match information depending on the flags given to the search - the filepath string You can always skip the line number table to get the filepath string by adding .matches_length to the address of the byte after the struct. The matches information is either - 0 bytes per match - 2x int32_t per match (8 bytes) if `LWSFTS_F_QUERY_FILE_LINES` given... the first is the native-endian line number of the match, the second is the byte offset in the original file where that line starts - 2 x int32_t as above plus a const char * if `LWSFTS_F_QUERY_QUOTE_LINE` is also given... this points to a NUL terminated string also stored in the results lwsac that contains up to 255 chars of the line from the original file. In some cases, the original file was either virtual (you are indexing a git revision) or is not stored with the index, in that case you can't usefully use `LWSFTS_F_QUERY_QUOTE_LINE`. To facilitate interpreting what is stored per match, the original search flags that created the result are stored in the `struct lws_fts_result`. ## Indexing In-memory and serialized to file When creating the trie, in-memory structs are used with various optimization schemes trading off memory usage for speed. While in-memory, it's possible to add more indexed filepaths to the single index. Once the trie is complete in terms of having indexed everything, it is serialized to disk. These contain many additional housekeeping pointers and trie entries which can be optimized out. Most in-memory values must be held literally in large types, whereas most of the values in the serialized file use smaller VLI which use more or less bytes according to the value. So the peak memory requirements for large tries are much bigger than the size of the serialized trie file that is output. For the linux kernel at 4.14 and default indexing list on a 2.8GHz AMD threadripper (using one thread), the stats are: Name|Value ---|--- Files indexed|52932 Input corpus size|694MiB Indexing cpu time|50.1s (>1000 files / sec; 13.8MBytes/sec) Peak alloc|78MiB Serialization time|202ms Trie File size|347MiB To index libwebsockets main branch under the same conditions: Name|Value ---|--- Files indexed|489 Input corpus size|3MiB Indexing time|123ms Peak alloc|3MiB Serialization time|1ms Trie File size|1.4MiB Once it's generated, querying the trie file is very inexpensive, even when there are lots of results. - trie entry child lists are kept sorted by the character they map to. This allows discovering there is no match as soon as a character later in the order than the one being matched is seen - for the root trie, in addition to the linked-list child + sibling entries, a 256-entry pointer table is associated with the root trie, allowing one- step lookup. But as the table is 2KiB, it's too expensive to use on all trie entries ## Structure on disk All explicit multibyte numbers are stored in Network (MSB-first) byte order. - file header - filepath line number tables - filepath information - filepath map table - tries, trie instances (hits), trie child tables ### VLI coding VLI (Variable Length Integer) coding works like this [b7 EON] [b6 .. b0 DATA] If EON = 0, then DATA represents the Least-significant 7 bits of the number. if EON = 1, DATA represents More-significant 7-bits that should be shifted left until the byte with EON = 0 is found to terminate the number. The VLI used is predicated around 32-bit unsigned integers Examples: - 0x30 = 48 - 0x81 30 = 176 - 0x81 0x80 0x00 = 16384 Bytes | Range ---|--- 1|<= 127 2|<= 16K - 1 3|<= 2M -1 4|<= 256M - 1 5|<= 4G - 1 The coding is very efficient if there's a high probabilty the number being stored is not large. So it's great for line numbers for example, where most files have less that 16K lines and the VLI for the line number fits in 2 bytes, but if you meet a huge file, the VLI coding can also handle it. All numbers except a few in the headers that are actually written after the following data are stored using VLI for space- efficiency without limiting capability. The numbers that are fixed up after the fact have to have a fixed size and can't use VLI. ### File header The first byte of the file header where the magic is, is "fileoffset" 0. All the stored "fileoffset"s are relative to that. The header has a fixed size of 16 bytes. size|function ---|--- 32-bits|Magic 0xCA7A5F75 32-bits|Fileoffset to root trie entry 32-bits|Size of the trie file when it was created (to detect truncation) 32-bits|Fileoffset to the filepath map 32-bits|Number of filepaths ### Filepath line tables Immediately after the file header are the line length tables. As the input files are parsed, line length tables are written for each file... at that time the rest of the parser data is held in memory so nothing else is in the file yet. These allow you to map logical line numbers in the file to file offsets space- and time- efficiently without having to walk through the file contents. The line information is cut into blocks, allowing quick skipping over the VLI data that doesn't contain the line you want just by following the 8-byte header part. Once you find the block with your line, you have to iteratively add the VLIs until you hit the one you want. For normal text files with average line length below 128, the VLIs will typically be a single byte. So a block of 200 line lengths is typically 208 bytes long. There is a final linetable chunk consisting of all zeros to indicate the end of the filepath line chunk series for a filepath. size|function ---|--- 16-bit|length of this chunk itself in bytes 16-bit|count of lines covered in this chunk 32-bit|count of bytes in the input file this chunk covers VLI...|for each line in the chunk, the number of bytes in the line ### Filepaths The single trie in the file may contain information from multiple files, for example one trie may cover all files in a directory. The "Filepaths" are listed after the line tables, and referred to by index thereafter. For each filepath, one after the other: size|function ---|--- VLI|fileoffset of the start of this filepath's line table VLI|count of lines in the file VLI|length of filepath in bytes ...|the filepath (with no NUL) ### Filepath map To facilitate rapid filepath lookup, there's a filepath map table with a 32-bit fileoffset per filepath. This is the way to convert filepath indexes to information on the filepath like its name, etc size|function ---|--- 32-bit...|fileoffset to filepath table for each filepath ### Trie entries Immediately after that, the trie entries are dumped, for each one a header: #### Trie entry header size|function ---|--- VLI|Fileoffset of first file table in this trie entry instance list VLI|number of child trie entries this trie entry has VLI|number of instances this trie entry has The child list follows immediately after this header #### Trie entry instance file For each file that has instances of this symbol: size|function ---|--- VLI|Fileoffset of next file table in this trie entry instance list VLI|filepath index VLI|count of line number instances following #### Trie entry file line number table Then for the file mentioned above, a list of all line numbers in the file with the symbol in them, in ascending order. As a VLI, the median size per entry will typically be ~15.9 bits due to the probability of line numbers below 16K. size|function ---|--- VLI|line number ... #### Trie entry child table For each child node size|function ---|--- VLI|file offset of child VLI|instance count belonging directly to this child VLI|aggregated number of instances down all descendent paths of child VLI|aggregated number of children down all descendent paths of child VLI|match string length ...|the match string libwebsockets-4.3.5/lib/misc/fts/private-lib-misc-fts.h000066400000000000000000000006241476025525100230030ustar00rootroot00000000000000#include /* if you need > 2GB trie files */ //typedef off_t jg2_file_offset; typedef uint32_t jg2_file_offset; struct lws_fts_file { int fd; jg2_file_offset root, flen, filepath_table; int max_direct_hits; int max_completion_hits; int filepaths; }; #define TRIE_FILE_HDR_SIZE 20 #define MAX_VLI 5 #define LWS_FTS_LINES_PER_CHUNK 200 int rq32(unsigned char *b, uint32_t *d); libwebsockets-4.3.5/lib/misc/fts/trie-fd.c000066400000000000000000000526021476025525100203720ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "private-lib-misc-fts.h" #include #include #include #include #include #include #define AC_COUNT_STASHED_CHILDREN 8 struct ch { jg2_file_offset ofs; char name[64]; int inst; int child_agg; int name_length; int effpos; int descendents; }; struct wac { struct ch ch[AC_COUNT_STASHED_CHILDREN]; jg2_file_offset self; jg2_file_offset tifs; int child_count; int child; int agg; int desc; char done_children; char once; }; struct linetable { struct linetable *next; int chunk_line_number_start; int chunk_line_number_count; off_t chunk_filepos_start; off_t vli_ofs_in_index; }; static uint32_t b32(unsigned char *b) { return (uint32_t)((b[0] << 24) | (b[1] << 16) | (b[2] << 8) | b[3]); } static uint16_t b16(unsigned char *b) { return (uint16_t)((b[0] << 8) | b[1]); } static int lws_fts_filepath(struct lws_fts_file *jtf, int filepath_index, char *result, size_t len, uint32_t *ofs_linetable, uint32_t *lines) { unsigned char buf[256 + 15]; uint32_t flen; int ra, bp = 0; size_t m; off_t o; if (filepath_index > jtf->filepaths) return 1; if (lseek(jtf->fd, (off_t)(jtf->filepath_table + (4 * (unsigned int)filepath_index)), SEEK_SET) < 0) { lwsl_err("%s: unable to seek\n", __func__); return 1; } ra = (int)read(jtf->fd, buf, 4); if (ra < 0) return 1; o = (off_t)b32(buf); if (lseek(jtf->fd, o, SEEK_SET) < 0) { lwsl_err("%s: unable to seek\n", __func__); return 1; } ra = (int)read(jtf->fd, buf, sizeof(buf)); if (ra < 0) return 1; if (ofs_linetable) bp += rq32(&buf[bp], ofs_linetable); else bp += rq32(&buf[bp], &flen); if (lines) bp += rq32(&buf[bp], lines); else bp += rq32(&buf[bp], &flen); bp += rq32(&buf[bp], &flen); m = flen; if (len - 1 < m) m = flen - 1; strncpy(result, (char *)&buf[bp], m); result[m] = '\0'; result[len - 1] = '\0'; return 0; } /* * returns -1 for fail or fd open on the trie file. * * *root is set to the position of the root trie entry. * *flen is set to the length of the whole file */ int lws_fts_adopt(struct lws_fts_file *jtf) { unsigned char buf[256]; off_t ot; if (read(jtf->fd, buf, TRIE_FILE_HDR_SIZE) != TRIE_FILE_HDR_SIZE) { lwsl_err("%s: unable to read file header\n", __func__); goto bail; } if (buf[0] != 0xca || buf[1] != 0x7a || buf[2] != 0x5f || buf[3] != 0x75) { lwsl_err("%s: bad magic %02X %02X %02X %02X\n", __func__, buf[0], buf[1], buf[2], buf[3]); goto bail; } jtf->root = b32(&buf[4]); ot = lseek(jtf->fd, 0, SEEK_END); if (ot < 0) { lwsl_err("%s: unable to seek\n", __func__); goto bail; } jtf->flen = (jg2_file_offset)ot; if (jtf->flen != b32(&buf[8])) { lwsl_err("%s: file size doesn't match expected\n", __func__); goto bail; } jtf->filepath_table = b32(&buf[12]); jtf->filepaths = (int)b32(&buf[16]); return jtf->fd; bail: return -1; } struct lws_fts_file * lws_fts_open(const char *filepath) { struct lws_fts_file *jtf; jtf = lws_malloc(sizeof(*jtf), "fts open"); if (!jtf) goto bail1; jtf->fd = open(filepath, O_RDONLY); if (jtf->fd < 0) { lwsl_err("%s: unable to open %s\n", __func__, filepath); goto bail2; } if (lws_fts_adopt(jtf) < 0) goto bail3; return jtf; bail3: close(jtf->fd); bail2: lws_free(jtf); bail1: return NULL; } void lws_fts_close(struct lws_fts_file *jtf) { close(jtf->fd); lws_free(jtf); } #define grab(_pos, _size) { \ bp = 0; \ if (lseek(jtf->fd, (off_t)(_pos), SEEK_SET) < 0) { \ lwsl_err("%s: unable to seek\n", __func__); \ \ goto bail; \ } \ \ ra = (int)read(jtf->fd, buf, (size_t)(_size)); \ if (ra < 0) \ goto bail; \ } static struct linetable * lws_fts_cache_chunktable(struct lws_fts_file *jtf, uint32_t ofs_linetable, struct lwsac **linetable_head) { struct linetable *lt, *first = NULL, **prev = NULL; unsigned char buf[8]; int line = 1, bp, ra; off_t cfs = 0; *linetable_head = NULL; do { grab(ofs_linetable, sizeof(buf)); lt = lwsac_use(linetable_head, sizeof(*lt), 0); if (!lt) goto bail; if (!first) first = lt; lt->next = NULL; if (prev) *prev = lt; prev = <->next; lt->chunk_line_number_start = line; lt->chunk_line_number_count = b16(&buf[bp + 2]); lt->vli_ofs_in_index = (off_t)(ofs_linetable + 8); lt->chunk_filepos_start = cfs; line += lt->chunk_line_number_count; cfs += (int32_t)b32(&buf[bp + 4]); ofs_linetable += b16(&buf[bp]); } while (b16(&buf[bp])); return first; bail: lwsac_free(linetable_head); return NULL; } static int lws_fts_getfileoffset(struct lws_fts_file *jtf, struct linetable *ltstart, int line, off_t *_ofs) { struct linetable *lt = ltstart; unsigned char buf[LWS_FTS_LINES_PER_CHUNK * 5]; uint32_t ll; off_t ofs; int bp, ra; /* first figure out which chunk */ do { if (line >= lt->chunk_line_number_start && line < lt->chunk_line_number_start + lt->chunk_line_number_count) break; lt = lt->next; } while (lt); if (!lt) goto bail; /* we know it's in this chunk */ ofs = lt->chunk_filepos_start; line -= lt->chunk_line_number_start; grab(lt->vli_ofs_in_index, sizeof(buf)); bp = 0; while (line) { bp += rq32(&buf[bp], &ll); ofs += (int32_t)ll; line--; } /* we know the offset it is at in the original file */ *_ofs = ofs; return 0; bail: lwsl_info("%s: bail %d\n", __func__, line); return 1; } static int ac_record(struct lws_fts_file *jtf, struct lwsac **results_head, const char *needle, int pos, struct wac *s, int sp, uint32_t instances, uint32_t agg_instances, uint32_t children, struct lws_fts_result_autocomplete ***ppac) { struct lws_fts_result_autocomplete *ac; int n, m; char *p; if (!instances && !agg_instances) return 1; m = pos; for (n = 1; n <= sp; n++) m += s[n].ch[s[n].child - 1].name_length; ac = lwsac_use(results_head, sizeof(*ac) + (unsigned int)m + 1, 0); if (!ac) return -1; p = (char *)(ac + 1); **ppac = ac; ac->next = NULL; *ppac = &ac->next; ac->instances = (int)instances; ac->agg_instances = (int)agg_instances; ac->ac_length = m; ac->has_children = !!children; ac->elided = 0; memcpy(p, needle, (size_t)pos); p += pos; for (n = 1; n <= sp; n++) { int w = s[n].child - 1; memcpy(p, s[n].ch[w].name, (size_t)s[n].ch[w].name_length); p += s[n].ch[w].name_length; } p = (char *)(ac + 1); p[m] = '\0'; /* * deduct this child's instance weight from his antecdents to track * relative path attractiveness dynamically, after we already used its * best results (children are sorted best-first) */ for (n = sp; n >= 0; n--) { s[n].ch[s[n].child - 1].child_agg -= (int)instances; s[n].agg -= (int)instances; } return 0; } struct lws_fts_result * lws_fts_search(struct lws_fts_file *jtf, struct lws_fts_search_params *ftsp) { uint32_t children, instances, co, sl, agg, slt, chunk, fileofs_tif_start, desc, agg_instances; int pos = 0, n, m, nl, bp, base = 0, ra, palm, budget, sp, ofd = -1; unsigned long long tf = (unsigned long long)lws_now_usecs(); struct lws_fts_result_autocomplete **pac = NULL; char stasis, nac = 0, credible, needle[32]; struct lws_fts_result_filepath *fp; struct lws_fts_result *result; unsigned char buf[4096]; off_t o, child_ofs; struct wac s[128]; ftsp->results_head = NULL; if (!ftsp->needle) return NULL; nl = (int)strlen(ftsp->needle); if ((size_t)nl > sizeof(needle) - 2) return NULL; result = lwsac_use(&ftsp->results_head, sizeof(*result), 0); if (!result) return NULL; /* start with no results... */ result->autocomplete_head = NULL; pac = &result->autocomplete_head; result->filepath_head = NULL; result->duration_ms = 0; result->effective_flags = ftsp->flags; palm = 0; for (n = 0; n < nl; n++) needle[n] = (char)tolower(ftsp->needle[n]); needle[nl] = '\0'; o = (off_t)jtf->root; do { bp = 0; base = 0; grab(o, sizeof(buf)); child_ofs = o + bp; bp += rq32(&buf[bp], &fileofs_tif_start); bp += rq32(&buf[bp], &children); bp += rq32(&buf[bp], &instances); bp += rq32(&buf[bp], &agg_instances); palm = pos; /* the children follow here */ if (pos == nl) { nac = 0; if (!fileofs_tif_start) /* * we matched, but there are no instances of * this, it's actually an intermediate */ goto autocomp; /* we leave with bp positioned at the instance list */ o = (off_t)fileofs_tif_start; grab(o, sizeof(buf)); break; } if (ra - bp < 1024) { /* * We don't have enough. So reload the buffer starting * at where we got to. */ base += bp; grab(o + base, sizeof(buf)); } /* gets set if any child COULD match needle if it went on */ credible = 0; for (n = 0; (uint32_t)n < children; n++) { uint32_t inst; bp += rq32(&buf[bp], &co); bp += rq32(&buf[bp], &inst); bp += rq32(&buf[bp], &agg); bp += rq32(&buf[bp], &desc); bp += rq32(&buf[bp], &sl); if (sl > (uint32_t)(nl - pos)) { /* * it can't be a match because it's longer than * our needle string (but that leaves it as a * perfectly fine autocomplete candidate) */ size_t g = (size_t)(nl - pos); /* * "credible" means at least one child matches * all the chars in needle up to as many as it * has. If not "credible" this path cannot * match. */ if (!strncmp((char *)&buf[bp], &needle[pos], g)) credible = 1; else /* * deflate the parent agg using the * knowledge this child is not on the * path shown by the remainder of needle */ agg_instances -= agg; nac = 0; bp += (int)sl; slt = 0; pos = palm; goto ensure; } /* the comparison string potentially has huge length */ slt = sl; while (slt) { /* * the strategy is to compare whatever we have * lying around, then bring in more if it didn't * fail to match yet. That way we don't bring * in anything we could already have known was * not needed due to a match fail. */ chunk = (uint32_t)(ra - bp); if (chunk > slt) chunk = slt; if ((chunk == 1 && needle[pos] != buf[bp]) || (chunk != 1 && memcmp(&needle[pos], &buf[bp], chunk))) { /* * it doesn't match... so nothing can * autocomplete this... */ bp += (int)slt; slt = 0; nac = 1; goto ensure; } slt -= chunk; pos += (int)chunk; bp += (int)chunk; /* so far, it matches */ if (!slt) { /* we matched the whole thing */ o = (int32_t)co; if (!co) goto bail; n = (int)children; credible = 1; } ensure: /* * do we have at least buf more to match, or the * remainder of the string, whichever is less? * * bp may exceed sizeof(buf) on no match path */ chunk = sizeof(buf); if (slt < chunk) chunk = slt; if (ra - bp >= (int)chunk) continue; /* * We don't have enough. So reload buf starting * at where we got to. */ base += bp; grab(o + base, sizeof(buf)); } /* while we are still comparing */ } /* for each child */ if ((uint32_t)n == children) { if (!credible) goto bail; nac = 0; goto autocomp; } } while(1); result->duration_ms = (int)(((uint64_t)lws_now_usecs() - tf) / 1000); if (!instances && !children) return result; /* the match list may easily exceed one read buffer load ... */ o += bp; /* * Only do the file match list if it was requested in the search flags */ if (!(ftsp->flags & LWSFTS_F_QUERY_FILES)) goto autocomp; do { uint32_t fi, tot, line, ro, ofs_linetable, lines, fplen, *u, _o; struct lwsac *lt_head = NULL; struct linetable *ltst; char path[256], *pp; int footprint; off_t fo; ofd = -1; grab(o, sizeof(buf)); ro = (uint32_t)o; bp += rq32(&buf[bp], &_o); o = (off_t)_o; assert(!o || o > TRIE_FILE_HDR_SIZE); bp += rq32(&buf[bp], &fi); bp += rq32(&buf[bp], &tot); if (lws_fts_filepath(jtf, (int)fi, path, sizeof(path) - 1, &ofs_linetable, &lines)) { lwsl_err("can't get filepath index %d\n", fi); goto bail; } if (ftsp->only_filepath && strcmp(path, ftsp->only_filepath)) continue; ltst = lws_fts_cache_chunktable(jtf, ofs_linetable, <_head); if (!ltst) goto bail; if (ftsp->flags & LWSFTS_F_QUERY_QUOTE_LINE) { ofd = open(path, O_RDONLY); if (ofd < 0) { lwsac_free(<_head); goto bail; } } fplen = (uint32_t)strlen(path); footprint = (int)(sizeof(*fp) + fplen + 1); if (ftsp->flags & LWSFTS_F_QUERY_FILE_LINES) { /* line number and offset in file */ footprint += (int)(2 * sizeof(uint32_t) * tot); if (ftsp->flags & LWSFTS_F_QUERY_QUOTE_LINE) /* pointer to quote string */ footprint += (int)(sizeof(void *) * tot); } fp = lwsac_use(&ftsp->results_head, (unsigned int)footprint, 0); if (!fp) { lwsac_free(<_head); goto bail; } fp->filepath_length = (int)fplen; fp->lines_in_file = (int)lines; fp->matches = (int)tot; fp->matches_length = footprint - (int)sizeof(*fp) - (int)(fplen + 1); fp->next = result->filepath_head; result->filepath_head = fp; /* line table first so it can be aligned */ u = (uint32_t*)(fp + 1); if (ftsp->flags & LWSFTS_F_QUERY_FILE_LINES) { /* for each line number */ for (n = 0; (uint32_t)n < tot; n++) { unsigned char lbuf[256], *p; char ebuf[384]; const char **v; int m; if ((ra - bp) < 8) { base += bp; grab((int32_t)ro + base, sizeof(buf)); } bp += rq32(&buf[bp], &line); *u++ = line; if (lws_fts_getfileoffset(jtf, ltst, (int)line, &fo)) continue; *u++ = (uint32_t)fo; if (!(ftsp->flags & LWSFTS_F_QUERY_QUOTE_LINE)) continue; if (lseek(ofd, fo, SEEK_SET) < 0) continue; m = (int)read(ofd, lbuf, sizeof(lbuf) - 1); if (m < 0) continue; lbuf[sizeof(lbuf) - 1] = '\0'; p = (unsigned char *)strchr((char *)lbuf, '\n'); if (p) m = lws_ptr_diff(p, lbuf); lbuf[m] = '\0'; p = (unsigned char *)strchr((char *)lbuf, '\r'); if (p) m = lws_ptr_diff(p, lbuf); lbuf[m] = '\0'; lws_json_purify(ebuf, (const char *)lbuf, sizeof(ebuf) - 1, NULL); m = (int)strlen(ebuf); p = lwsac_use(&ftsp->results_head, (unsigned int)m + 1, 0); if (!p) { lwsac_free(<_head); goto bail; } memcpy(p, ebuf, (unsigned int)m); p[m] = '\0'; v = (const char **)u; *v = (const char *)p; u += sizeof(const char *) / sizeof(uint32_t); } } pp = ((char *)&fp[1]) + fp->matches_length; memcpy(pp, path, fplen); pp[fplen] = '\0'; if (ofd >= 0) { close(ofd); ofd = -1; } lwsac_free(<_head); if (ftsp->only_filepath) break; } while (o); /* sort the instance file list by results density */ do { struct lws_fts_result_filepath **prf, *rf1, *rf2; stasis = 1; /* bubble sort keeps going until nothing changed */ prf = &result->filepath_head; while (*prf) { rf1 = *prf; rf2 = rf1->next; if (rf2 && rf1->lines_in_file && rf2->lines_in_file && ((rf1->matches * 1000) / rf1->lines_in_file) < ((rf2->matches * 1000) / rf2->lines_in_file)) { stasis = 0; *prf = rf2; rf1->next = rf2->next; rf2->next = rf1; } prf = &(*prf)->next; } } while (!stasis); autocomp: if (!(ftsp->flags & LWSFTS_F_QUERY_AUTOCOMPLETE) || nac) return result; /* * autocomplete (ie, the descendent paths that yield the most hits) * * We actually need to spider the earliest terminal descendents from * the child we definitely got past, and present the first n terminal * strings. The descendents are already sorted in order of highest * aggregated hits in their descendents first, so simply collecting n * earliest leaf children is enough. * * The leaf children may be quite deep down in a stack however. So we * have to go through all the walking motions collecting and retaining * child into for when we come back up the walk. * * We can completely ignore file instances for this, we just need the * earliest children. And we can restrict how many children we stash * in each stack level to eg, 5. * * child_ofs comes in pointing at the start of the trie entry that is * to be the starting point for making suggestions. */ budget = ftsp->max_autocomplete; base = 0; bp = 0; pac = &result->autocomplete_head; sp = 0; if (pos > (int)sizeof(s[sp].ch[0].name) - 1) pos = (int)sizeof(s[sp].ch[0].name) - 1; memset(&s[sp], 0, sizeof(s[sp])); s[sp].child = 1; s[sp].tifs = fileofs_tif_start; s[sp].self = (jg2_file_offset)child_ofs; s[sp].ch[0].effpos = pos; if (pos == nl) n = ac_record(jtf, &ftsp->results_head, needle, pos, s, 0, instances, agg_instances, children, &pac); while (sp >= 0 && budget) { int nobump = 0; struct ch *tch = &s[sp].ch[s[sp].child - 1]; grab(child_ofs, sizeof(buf)); bp += rq32(&buf[bp], &fileofs_tif_start); bp += rq32(&buf[bp], &children); bp += rq32(&buf[bp], &instances); bp += rq32(&buf[bp], &agg_instances); if (sp > 0 && s[sp - 1].done_children && tch->effpos + tch->name_length >= nl && tch->inst && fileofs_tif_start) { n = ac_record(jtf, &ftsp->results_head, needle, pos, s, sp, (uint32_t)tch->inst, (uint32_t)tch->child_agg, (uint32_t)tch->descendents, &pac); if (n < 0) goto bail; if (!n) if (--budget == 0) break; } if (!s[sp].done_children && children) { s[sp].done_children = 1; sp++; memset(&s[sp], 0, sizeof(s[sp])); s[sp].tifs = fileofs_tif_start; s[sp].self = (jg2_file_offset)child_ofs; for (n = 0; n < (int)children && s[sp].child_count < (int)LWS_ARRAY_SIZE(s[0].ch); n++) { uint32_t slen, cho, agg, inst; int i = s[sp].child_count; struct ch *ch = &s[sp].ch[i]; size_t max; bp += rq32(&buf[bp], &cho); bp += rq32(&buf[bp], &inst); bp += rq32(&buf[bp], &agg); bp += rq32(&buf[bp], &desc); bp += rq32(&buf[bp], &slen); max = slen; if (max > sizeof(ch->name) - 1) max = sizeof(ch->name) - 1; strncpy(ch->name, (char *)&buf[bp], max); bp += (int)slen; ch->name_length = (int)max; ch->name[sizeof(ch->name) - 1] = '\0'; ch->inst = (int)inst; ch->effpos = s[sp - 1].ch[s[sp - 1].child - 1].effpos; ch->child_agg = (int)agg; ch->descendents = (int)desc; /* * if we have more needle chars than we matched * to get this far, we can only allow potential * matches that are consistent with the * additional unmatched character(s)... */ m = nl - ch->effpos; if (m > ch->name_length) m = ch->name_length; if (m > 0 && strncmp(&needle[ch->effpos], ch->name, (unsigned int)m)) continue; ch->effpos += m; s[sp].ch[s[sp].child_count++].ofs = cho; } } while (sp >= 0 && s[sp].child >= s[sp].child_count) { s[sp].done_children = 0; sp--; } /* * Compare parent remaining agg vs parent's next siblings' still * intact original agg... if the next sibling has more, abandon * the parent path and go with the sibling... this keeps the * autocomplete results related to popularity. */ nobump = 0; n = sp - 1; while (n >= 0) { struct lws_fts_result_autocomplete *ac = (struct lws_fts_result_autocomplete *)pac; if (s[n].child < s[n].child_count && s[n].ch[s[n].child - 1].child_agg < s[n].ch[s[n].child].child_agg) { if (pac) /* * mark the autocomplete result that * there were more children down his * path that we skipped in these results */ ac->elided = 1; for (m = n; m < sp + 1; m++) s[m].done_children = 0; sp = n; child_ofs = (off_t)s[sp].ch[s[sp].child++].ofs; nobump = 1; } n--; } if (nobump || sp < 0) continue; child_ofs = (off_t)s[sp].ch[s[sp].child++].ofs; } /* let's do a final sort into agg order */ do { struct lws_fts_result_autocomplete *ac1, *ac2; stasis = 1; /* bubble sort keeps going until nothing changed */ pac = &result->autocomplete_head; while (*pac) { ac1 = *pac; ac2 = ac1->next; if (ac2 && ac1->instances < ac2->instances) { stasis = 0; *pac = ac2; ac1->next = ac2->next; ac2->next = ac1; } pac = &(*pac)->next; } } while (!stasis); return result; bail: if (ofd >= 0) close(ofd); lwsl_info("%s: search ended up at bail\n", __func__); return result; } libwebsockets-4.3.5/lib/misc/fts/trie.c000066400000000000000000000771641476025525100200150ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * The functions allow * * - collecting a concordance of strings from one or more files (eg, a * directory of files) into a single in-memory, lac-backed trie; * * - to optimize and serialize the in-memory trie to an fd; * * - to very quickly report any instances of a string in any of the files * indexed by the trie, by a seeking around a serialized trie fd, without * having to load it all in memory */ #include "private-lib-core.h" #include "private-lib-misc-fts.h" #include #include #include #include #include #include struct lws_fts_entry; /* notice these are stored in t->lwsac_input_head which has input file scope */ struct lws_fts_filepath { struct lws_fts_filepath *next; struct lws_fts_filepath *prev; char filepath[256]; jg2_file_offset ofs; jg2_file_offset line_table_ofs; int filepath_len; int file_index; int total_lines; int priority; }; /* notice these are stored in t->lwsac_input_head which has input file scope */ struct lws_fts_lines { struct lws_fts_lines *lines_next; /* * amount of line numbers needs to meet average count for best * efficiency. * * Line numbers are stored in VLI format since if we don't, around half * the total lac allocation consists of struct lws_fts_lines... * size chosen to maintain 8-byte struct alignment */ uint8_t vli[119]; char count; }; /* this represents the instances of a symbol inside a given filepath */ struct lws_fts_instance_file { /* linked-list of tifs generated for current file */ struct lws_fts_instance_file *inst_file_next; struct lws_fts_entry *owner; struct lws_fts_lines *lines_list, *lines_tail; uint32_t file_index; uint32_t total; /* * optimization for the common case there's only 1 - ~3 matches, so we * don't have to allocate any lws_fts_lines struct * * Using 8 bytes total for this maintains 8-byte struct alignment... */ uint8_t vli[7]; char count; }; /* * this is the main trie in-memory allocation object */ struct lws_fts_entry { struct lws_fts_entry *parent; struct lws_fts_entry *child_list; struct lws_fts_entry *sibling; /* * care... this points to content in t->lwsac_input_head, it goes * out of scope when the input file being indexed completes */ struct lws_fts_instance_file *inst_file_list; jg2_file_offset ofs_last_inst_file; char *suffix; /* suffix string or NULL if one char (in .c) */ jg2_file_offset ofs; uint32_t child_count; uint32_t instance_count; uint32_t agg_inst_count; uint32_t agg_child_count; uint32_t suffix_len; unsigned char c; }; /* there's only one of these per trie file */ struct lws_fts { struct lwsac *lwsac_head; struct lwsac *lwsac_input_head; struct lws_fts_entry *root; struct lws_fts_filepath *filepath_list; struct lws_fts_filepath *fp; struct lws_fts_entry *parser; struct lws_fts_entry *root_lookup[256]; /* * head of linked-list of tifs generated for current file * care... this points to content in t->lwsac_input_head */ struct lws_fts_instance_file *tif_list; jg2_file_offset c; /* length of output file so far */ uint64_t agg_trie_creation_us; uint64_t agg_raw_input; uint64_t worst_lwsac_input_size; int last_file_index; int chars_in_line; jg2_file_offset last_block_len_ofs; int line_number; int lines_in_unsealed_linetable; int next_file_index; int count_entries; int fd; unsigned int agg_pos; unsigned int str_match_pos; unsigned char aggregate; unsigned char agg[128]; }; /* since the kernel case allocates >300MB, no point keeping this too low */ #define TRIE_LWSAC_BLOCK_SIZE (1024 * 1024) #define spill(margin, force) \ if (bp && ((uint32_t)bp >= (sizeof(buf) - (size_t)(margin)) || (force))) { \ if ((int)write(t->fd, buf, (size_t)bp) != bp) { \ lwsl_err("%s: write %d failed (%d)\n", __func__, \ bp, errno); \ return 1; \ } \ t->c += (unsigned int)bp; \ bp = 0; \ } static int g32(unsigned char *b, uint32_t d) { *b++ = (uint8_t)((d >> 24) & 0xff); *b++ = (uint8_t)((d >> 16) & 0xff); *b++ = (uint8_t)((d >> 8) & 0xff); *b = (uint8_t)(d & 0xff); return 4; } static int g16(unsigned char *b, int d) { *b++ = (uint8_t)((d >> 8) & 0xff); *b = (uint8_t)(d & 0xff); return 2; } static int wq32(unsigned char *b, uint32_t d) { unsigned char *ob = b; if (d > (1 << 28) - 1) *b++ = (uint8_t)(((d >> 28) | 0x80) & 0xff); if (d > (1 << 21) - 1) *b++ = (uint8_t)(((d >> 21) | 0x80) & 0xff); if (d > (1 << 14) - 1) *b++ = (uint8_t)(((d >> 14) | 0x80) & 0xff); if (d > (1 << 7) - 1) *b++ = (uint8_t)(((d >> 7) | 0x80) & 0xff); *b++ = (uint8_t)(d & 0x7f); return lws_ptr_diff(b, ob); } /* read a VLI, return the number of bytes used */ int rq32(unsigned char *b, uint32_t *d) { unsigned char *ob = b; uint32_t t = 0; t = *b & 0x7f; if (*(b++) & 0x80) { t = (t << 7) | (*b & 0x7f); if (*(b++) & 0x80) { t = (t << 7) | (*b & 0x7f); if (*(b++) & 0x80) { t = (t << 7) | (*b & 0x7f); if (*(b++) & 0x80) { t = (t << 7) | (*b & 0x7f); b++; } } } } *d = t; return (int)(b - ob); } struct lws_fts * lws_fts_create(int fd) { struct lws_fts *t; struct lwsac *lwsac_head = NULL; unsigned char buf[TRIE_FILE_HDR_SIZE]; t = lwsac_use(&lwsac_head, sizeof(*t), TRIE_LWSAC_BLOCK_SIZE); if (!t) return NULL; memset(t, 0, sizeof(*t)); t->fd = fd; t->lwsac_head = lwsac_head; t->root = lwsac_use(&lwsac_head, sizeof(*t->root), TRIE_LWSAC_BLOCK_SIZE); if (!t->root) goto unwind; memset(t->root, 0, sizeof(*t->root)); t->parser = t->root; t->last_file_index = -1; t->line_number = 1; t->filepath_list = NULL; memset(t->root_lookup, 0, sizeof(*t->root_lookup)); /* write the header */ buf[0] = 0xca; buf[1] = 0x7a; buf[2] = 0x5f; buf[3] = 0x75; /* (these are filled in with correct data at the end) */ /* file offset to root trie entry */ g32(&buf[4], 0); /* file length when it was created */ g32(&buf[8], 0); /* fileoffset to the filepath table */ g32(&buf[0xc], 0); /* count of filepaths */ g32(&buf[0x10], 0); if (write(t->fd, buf, TRIE_FILE_HDR_SIZE) != TRIE_FILE_HDR_SIZE) { lwsl_err("%s: trie header write failed\n", __func__); goto unwind; } t->c = TRIE_FILE_HDR_SIZE; return t; unwind: lwsac_free(&lwsac_head); return NULL; } void lws_fts_destroy(struct lws_fts **trie) { struct lwsac *lwsac_head = (*trie)->lwsac_head; lwsac_free(&(*trie)->lwsac_input_head); lwsac_free(&lwsac_head); *trie = NULL; } int lws_fts_file_index(struct lws_fts *t, const char *filepath, int filepath_len, int priority) { struct lws_fts_filepath *fp = t->filepath_list; #if 0 while (fp) { if (fp->filepath_len == filepath_len && !strcmp(fp->filepath, filepath)) return fp->file_index; fp = fp->next; } #endif fp = lwsac_use(&t->lwsac_head, sizeof(*fp), TRIE_LWSAC_BLOCK_SIZE); if (!fp) return -1; fp->next = t->filepath_list; t->filepath_list = fp; strncpy(fp->filepath, filepath, sizeof(fp->filepath) - 1); fp->filepath[sizeof(fp->filepath) - 1] = '\0'; fp->filepath_len = filepath_len; fp->file_index = t->next_file_index++; fp->line_table_ofs = t->c; fp->priority = priority; fp->total_lines = 0; t->fp = fp; return fp->file_index; } static struct lws_fts_entry * lws_fts_entry_child_add(struct lws_fts *t, unsigned char c, struct lws_fts_entry *parent) { struct lws_fts_entry *e, **pe; e = lwsac_use(&t->lwsac_head, sizeof(*e), TRIE_LWSAC_BLOCK_SIZE); if (!e) return NULL; memset(e, 0, sizeof(*e)); e->c = c; parent->child_count++; e->parent = parent; t->count_entries++; /* keep the parent child list in ascending sort order for c */ pe = &parent->child_list; while (*pe) { assert((*pe)->parent == parent); if ((*pe)->c > c) { /* add it before */ e->sibling = *pe; *pe = e; break; } pe = &(*pe)->sibling; } if (!*pe) { /* add it at the end */ e->sibling = NULL; *pe = e; } return e; } static int finalize_per_input(struct lws_fts *t) { struct lws_fts_instance_file *tif; unsigned char buf[8192]; uint64_t lwsac_input_size; jg2_file_offset temp; int bp = 0; bp += g16(&buf[bp], 0); bp += g16(&buf[bp], 0); bp += g32(&buf[bp], 0); if ((int)write(t->fd, buf, (size_t)bp) != bp) return 1; t->c += (unsigned int)bp; bp = 0; /* * Write the generated file index + instances (if any) * * Notice the next same-parent file instance fileoffset list is * backwards, so it does not require seeks to fill in. The first * entry has 0 but the second entry points to the first entry (whose * fileoffset is known). * * After all the file instance structs are finalized, * .ofs_last_inst_file contains the fileoffset of that child's tif * list head in the file. * * The file instances are written to disk in the order that the files * were indexed, along with their prev pointers inline. */ tif = t->tif_list; while (tif) { struct lws_fts_lines *i; spill((3 * MAX_VLI) + tif->count, 0); temp = tif->owner->ofs_last_inst_file; if (tif->total) tif->owner->ofs_last_inst_file = t->c + (unsigned int)bp; assert(!temp || (temp > TRIE_FILE_HDR_SIZE && temp < t->c)); /* fileoffset of prev instance file for this entry, or 0 */ bp += wq32(&buf[bp], temp); bp += wq32(&buf[bp], tif->file_index); bp += wq32(&buf[bp], tif->total); /* remove any pointers into this disposable lac footprint */ tif->owner->inst_file_list = NULL; memcpy(&buf[bp], &tif->vli, (size_t)tif->count); bp += tif->count; i = tif->lines_list; while (i) { spill(i->count, 0); memcpy(&buf[bp], &i->vli, (size_t)i->count); bp += i->count; i = i->lines_next; } tif = tif->inst_file_next; } spill(0, 1); assert(lseek(t->fd, 0, SEEK_END) == (off_t)t->c); if (t->lwsac_input_head) { lwsac_input_size = lwsac_total_alloc(t->lwsac_input_head); if (lwsac_input_size > t->worst_lwsac_input_size) t->worst_lwsac_input_size = lwsac_input_size; } /* * those per-file allocations are all on a separate lac so we can * free it cleanly afterwards */ lwsac_free(&t->lwsac_input_head); /* and lose the pointer into the deallocated lac */ t->tif_list = NULL; return 0; } /* * 0 = punctuation, whitespace, brackets etc * 1 = character inside symbol set * 2 = upper-case character inside symbol set */ static char classify[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, //1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; #if 0 static const char * name_entry(struct lws_fts_entry *e1, char *s, int len) { struct lws_fts_entry *e2; int n = len; s[--n] = '\0'; e2 = e1; while (e2) { if (e2->suffix) { if ((int)e2->suffix_len < n) { n -= e2->suffix_len; memcpy(&s[n], e2->suffix, e2->suffix_len); } } else { n--; s[n] = e2->c; } e2 = e2->parent; } return &s[n + 1]; } #endif /* * as we parse the input, we create a line length table for the file index. * Only the file header has been written before we start doing this. */ int lws_fts_fill(struct lws_fts *t, uint32_t file_index, const char *buf, size_t len) { unsigned long long tf = (unsigned long long)lws_now_usecs(); unsigned char c, linetable[256], vlibuf[8]; struct lws_fts_entry *e, *e1, *dcl; struct lws_fts_instance_file *tif; int bp = 0, sline, chars, m; char *osuff, skipline = 0; struct lws_fts_lines *tl; unsigned int olen, n; off_t lbh; if ((int)file_index != t->last_file_index) { if (t->last_file_index >= 0) finalize_per_input(t); t->last_file_index = (int)file_index; t->line_number = 1; t->chars_in_line = 0; t->lines_in_unsealed_linetable = 0; } t->agg_raw_input += len; resume: chars = 0; lbh = (off_t)t->c; sline = t->line_number; bp += g16(&linetable[bp], 0); bp += g16(&linetable[bp], 0); bp += g32(&linetable[bp], 0); while (len) { char go_around = 0; if (t->lines_in_unsealed_linetable >= LWS_FTS_LINES_PER_CHUNK) break; len--; c = (unsigned char)*buf++; t->chars_in_line++; if (c == '\n') { skipline = 0; t->filepath_list->total_lines++; t->lines_in_unsealed_linetable++; t->line_number++; bp += wq32(&linetable[bp], (uint32_t)t->chars_in_line); if ((unsigned int)bp > sizeof(linetable) - 6) { if ((int)write(t->fd, linetable, (unsigned int)bp) != bp) { lwsl_err("%s: linetable write failed\n", __func__); return 1; } t->c += (unsigned int)bp; bp = 0; // assert(lseek(t->fd, 0, SEEK_END) == t->c); } chars += t->chars_in_line; t->chars_in_line = 0; /* * Detect overlength lines and skip them (eg, BASE64 * in css etc) */ if (len > 200) { n = 0; m = 0; while (n < 200 && m < 80 && buf[n] != '\n') { if (buf[n] == ' ' || buf[n] == '\t') m = 0; n++; m++; } /* 80 lines no whitespace, or >=200-char line */ if (m == 80 || n == 200) skipline = 1; } goto seal; } if (skipline) continue; m = classify[(int)c]; if (!m) goto seal; if (m == 2) c = (unsigned char)((char)c + 'a' - 'A'); if (t->aggregate) { /* * We created a trie entry for an earlier char in this * symbol already. So we know at the moment, any * further chars in the symbol are the only children. * * Aggregate them and add them as a string suffix to * the trie symbol at the end (when we know how much to * allocate). */ if (t->agg_pos < sizeof(t->agg) - 1) /* symbol is not too long to stash */ t->agg[t->agg_pos++] = c; continue; } if (t->str_match_pos) { go_around = 1; goto seal; } /* zeroth-iteration child matching */ if (t->parser == t->root) { e = t->root_lookup[(int)c]; if (e) { t->parser = e; continue; } } else { /* look for the char amongst the children */ e = t->parser->child_list; while (e) { /* since they're alpha ordered... */ if (e->c > c) { e = NULL; break; } if (e->c == c) { t->parser = e; if (e->suffix) t->str_match_pos = 1; break; } e = e->sibling; } if (e) continue; } /* * we are blazing a new trail, add a new child representing * the whole suffix that couldn't be matched until now. */ e = lws_fts_entry_child_add(t, c, t->parser); if (!e) { lwsl_err("%s: lws_fts_entry_child_add failed\n", __func__); return 1; } /* if it's the root node, keep the root_lookup table in sync */ if (t->parser == t->root) t->root_lookup[(int)c] = e; /* follow the new path */ t->parser = e; { struct lws_fts_entry **pe = &e->child_list; while (*pe) { assert((*pe)->parent == e); pe = &(*pe)->sibling; } } /* * If there are any more symbol characters coming, just * create a suffix string on t->parser instead of what must * currently be single-child nodes, since we just created e * as a child with a single character due to no existing match * on that single character... so if no match on 'h' with this * guy's parent, we created e that matches on the single char * 'h'. If the symbol continues ... 'a' 'p' 'p' 'y', then * instead of creating singleton child nodes under e, * modify e to match on the whole string suffix "happy". * * If later "hoppy" appears, we will remove the suffix on e, * so it reverts to a char match for 'h', add singleton children * for 'a' and 'o', and attach a "ppy" suffix child to each of * those. * * We want to do this so we don't have to allocate trie entries * for every char in the string to save memory and consequently * time. * * Don't try this optimization if the parent is the root node... * it's not compatible with it's root_lookup table and it's * highly likely children off the root entry are going to have * to be fragmented. */ if (e->parent != t->root) { t->aggregate = 1; t->agg_pos = 0; } continue; seal: if (t->str_match_pos) { /* * We're partway through matching an elaborated string * on a child, not just a character. String matches * only exist when we met a child entry that only had * one path until now... so we had an 'h', and the * only child had a string "hello". * * We are following the right path and will not need * to back up, but we may find as we go we have the * first instance of a second child path, eg, "help". * * When we get to the 'p', we have to split what was * the only string option "hello" into "hel" and then * two child entries, for "lo" and 'p'. */ if (c == t->parser->suffix[t->str_match_pos++]) { if (t->str_match_pos < t->parser->suffix_len) continue; /* * We simply matched everything, continue * parsing normally from this trie entry. */ t->str_match_pos = 0; continue; } /* * So... we hit a mismatch somewhere... it means we * have to split this string entry. * * We know the first char actually matched in order to * start down this road. So for the current trie entry, * we need to truncate his suffix at the char before * this mismatched one, where we diverged (if the * second char, simply remove the suffix string from the * current trie entry to turn it back to a 1-char match) * * The original entry, which becomes the lhs post-split, * is t->parser. */ olen = t->parser->suffix_len; osuff = t->parser->suffix; if (t->str_match_pos == 2) t->parser->suffix = NULL; else t->parser->suffix_len = t->str_match_pos - 1; /* * Then we need to create a new child trie entry that * represents the remainder of the original string * path that we didn't match. For the "hello" / * "help" case, this guy will have "lo". * * Any instances or children (not siblings...) that were * attached to the original trie entry must be detached * first and then migrate to this new guy that completes * the original string. */ dcl = t->parser->child_list; m = (int)t->parser->child_count; t->parser->child_list = NULL; t->parser->child_count = 0; e = lws_fts_entry_child_add(t, (unsigned char) osuff[t->str_match_pos - 1], t->parser); if (!e) { lwsl_err("%s: lws_fts_entry_child_add fail1\n", __func__); return 1; } e->child_list = dcl; e->child_count = (uint32_t)m; /* * any children we took over must point to us as the * parent now they appear on our child list */ e1 = e->child_list; while (e1) { e1->parent = e; e1 = e1->sibling; } /* * We detached any children, gave them to the new guy * and replaced them with just our new guy */ t->parser->child_count = 1; t->parser->child_list = e; /* * any instances that belonged to the original entry we * are splitting now must be reassigned to the end * part */ e->inst_file_list = t->parser->inst_file_list; if (e->inst_file_list) e->inst_file_list->owner = e; t->parser->inst_file_list = NULL; e->instance_count = t->parser->instance_count; t->parser->instance_count = 0; e->ofs_last_inst_file = t->parser->ofs_last_inst_file; t->parser->ofs_last_inst_file = 0; if (t->str_match_pos != olen) { /* we diverged partway */ e->suffix = &osuff[t->str_match_pos - 1]; e->suffix_len = olen - (t->str_match_pos - 1); } /* * if the current char is a terminal, skip creating a * new way forward. */ if (classify[(int)c]) { /* * Lastly we need to create a new child trie * entry that represents the new way forward * from the point that we diverged. For the * "hello" / "help" case, this guy will start * as a child of "hel" with the single * character match 'p'. * * Since he becomes the current parser context, * more symbol characters may be coming to make * him into, eg, "helping", in which case he * will acquire a suffix eventually of "ping" * via the aggregation stuff */ e = lws_fts_entry_child_add(t, c, t->parser); if (!e) { lwsl_err("%s: child_add fail2\n", __func__); return 1; } } /* go on following this path */ t->parser = e; t->aggregate = 1; t->agg_pos = 0; t->str_match_pos = 0; if (go_around) continue; /* this is intended to be a seal */ } /* end of token */ if (t->aggregate && t->agg_pos) { /* if nothing in agg[]: leave as single char match */ /* otherwise copy out the symbol aggregation */ t->parser->suffix = lwsac_use(&t->lwsac_head, t->agg_pos + 1, TRIE_LWSAC_BLOCK_SIZE); if (!t->parser->suffix) { lwsl_err("%s: lac for suffix failed\n", __func__); return 1; } /* add the first char at the beginning */ *t->parser->suffix = (char)t->parser->c; /* and then add the agg buffer stuff */ memcpy(t->parser->suffix + 1, t->agg, t->agg_pos); t->parser->suffix_len = t->agg_pos + 1; } t->aggregate = 0; if (t->parser == t->root) /* multiple terminal chars */ continue; if (!t->parser->inst_file_list || t->parser->inst_file_list->file_index != file_index) { tif = lwsac_use(&t->lwsac_input_head, sizeof(*tif), TRIE_LWSAC_BLOCK_SIZE); if (!tif) { lwsl_err("%s: lac for tif failed\n", __func__); return 1; } tif->file_index = file_index; tif->owner = t->parser; tif->lines_list = NULL; tif->lines_tail = NULL; tif->total = 0; tif->count = 0; tif->inst_file_next = t->tif_list; t->tif_list = tif; t->parser->inst_file_list = tif; } /* * A naive allocation strategy for this leads to 50% of the * total inmem lac allocation being for line numbers... * * It's mainly solved by only holding the instance and line * number tables for the duration of a file being input, as soon * as one input file is finished it is written to disk. * * For the common case of 1 - ~3 matches the line number are * stored in a small VLI array inside the filepath inst. If the * next one won't fit, it allocates a line number struct with * more vli space and continues chaining those if needed. */ n = (unsigned int)wq32(vlibuf, (uint32_t)t->line_number); tif = t->parser->inst_file_list; if (!tif->lines_list) { /* we are still trying to use the file inst vli */ if (LWS_ARRAY_SIZE(tif->vli) - (size_t)tif->count >= n) { tif->count = (char)((char)tif->count + (char)wq32(tif->vli + tif->count, (uint32_t)t->line_number)); goto after; } /* we are going to have to allocate */ } /* can we add to an existing line numbers struct? */ if (tif->lines_tail && LWS_ARRAY_SIZE(tif->lines_tail->vli) - (unsigned char)tif->lines_tail->count >= n) { tif->lines_tail->count = (char)((char)tif->lines_tail->count + (char)wq32(tif->lines_tail->vli + tif->lines_tail->count, (uint32_t)t->line_number)); goto after; } /* either no existing line numbers struct at tail, or full */ /* have to create a(nother) line numbers struct */ tl = lwsac_use(&t->lwsac_input_head, sizeof(*tl), TRIE_LWSAC_BLOCK_SIZE); if (!tl) { lwsl_err("%s: lac for tl failed\n", __func__); return 1; } tl->lines_next = NULL; if (tif->lines_tail) tif->lines_tail->lines_next = tl; tif->lines_tail = tl; if (!tif->lines_list) tif->lines_list = tl; tl->count = (char)wq32(tl->vli, (uint32_t)t->line_number); after: tif->total++; #if 0 { char s[128]; const char *ne = name_entry(t->parser, s, sizeof(s)); if (!strcmp(ne, "describ")) { lwsl_err(" %s %d\n", ne, t->str_match_pos); write(1, buf - 10, 20); } } #endif t->parser->instance_count++; t->parser = t->root; t->str_match_pos = 0; } /* seal off the line length table block */ if (bp) { if ((int)write(t->fd, linetable, (size_t)bp) != bp) return 1; t->c += (unsigned int)bp; bp = 0; } if (lseek(t->fd, lbh, SEEK_SET) < 0) { lwsl_err("%s: seek to 0x%llx failed\n", __func__, (unsigned long long)lbh); return 1; } g16(linetable, (uint16_t)(t->c - (jg2_file_offset)lbh)); g16(linetable + 2, (uint16_t)(t->line_number - sline)); g32(linetable + 4, (uint32_t)chars); if ((int)write(t->fd, linetable, 8) != 8) { lwsl_err("%s: write linetable header failed\n", __func__); return 1; } assert(lseek(t->fd, 0, SEEK_END) == (off_t)t->c); if (lseek(t->fd, (off_t)t->c, SEEK_SET) < 0) { lwsl_err("%s: end seek failed\n", __func__); return 1; } bp = 0; if (len) { t->lines_in_unsealed_linetable = 0; goto resume; } /* dump the collected per-input instance and line data, and free it */ t->agg_trie_creation_us += (uint64_t)((uint64_t)lws_now_usecs() - tf); return 0; } /* refer to ./README.md */ int lws_fts_serialize(struct lws_fts *t) { struct lws_fts_filepath *fp = t->filepath_list, *ofp; unsigned long long tf = (unsigned long long)lws_now_usecs(); struct lws_fts_entry *e, *e1, *s[256]; unsigned char buf[8192], stasis; int n, bp, sp = 0, do_parent; (void)tf; finalize_per_input(t); /* * Compute aggregated instance counts (parents should know the total * number of instances below each child path) * * * If we have * * (root) -> (c1) -> (c2) * -> (c3) * * we need to visit the nodes in the order * * c2, c1, c3, root */ sp = 0; s[0] = t->root; do_parent = 0; while (sp >= 0) { int n; /* aggregate in every antecedent */ for (n = 0; n <= sp; n++) { s[n]->agg_inst_count += s[sp]->instance_count; s[n]->agg_child_count += s[sp]->child_count; } /* handle any children before the parent */ if (s[sp]->child_list) { if (sp + 1 == LWS_ARRAY_SIZE(s)) { lwsl_err("Stack too deep\n"); goto bail; } s[sp + 1] = s[sp]->child_list; sp++; continue; } do { if (s[sp]->sibling) { s[sp] = s[sp]->sibling; break; } else sp--; } while (sp >= 0); } /* dump the filepaths and set prev */ fp = t->filepath_list; ofp = NULL; bp = 0; while (fp) { fp->ofs = t->c + (unsigned int)bp; n = (int)strlen(fp->filepath); spill(15 + n, 0); bp += wq32(&buf[bp], fp->line_table_ofs); bp += wq32(&buf[bp], (uint32_t)fp->total_lines); bp += wq32(&buf[bp], (uint32_t)n); memcpy(&buf[bp], fp->filepath, (unsigned int)n); bp += n; fp->prev = ofp; ofp = fp; fp = fp->next; } spill(0, 1); /* record the fileoffset of the filepath map and filepath count */ if (lseek(t->fd, 0xc, SEEK_SET) < 0) goto bail_seek; g32(buf, t->c + (unsigned int)bp); g32(buf + 4, (uint32_t)t->next_file_index); if ((int)write(t->fd, buf, 8) != 8) goto bail; if (lseek(t->fd, (off_t)(t->c + (unsigned int)bp), SEEK_SET) < 0) goto bail_seek; /* dump the filepath map, starting from index 0, which is at the tail */ fp = ofp; bp = 0; while (fp) { spill(5, 0); g32(buf + bp, fp->ofs); bp += 4; fp = fp->prev; } spill(0, 1); /* * The trie entries in reverse order... because of the reversal, we have * always written children first, and marked them with their file offset * before we come to refer to them. */ bp = 0; sp = 0; s[0] = t->root; do_parent = 0; while (s[sp]) { /* handle any children before the parent */ if (!do_parent && s[sp]->child_list) { if (sp + 1 == LWS_ARRAY_SIZE(s)) { lwsl_err("Stack too deep\n"); goto bail; } s[sp + 1] = s[sp]->child_list; sp++; continue; } /* leaf nodes with no children */ e = s[sp]; e->ofs = t->c + (unsigned int)bp; /* write the trie entry header */ spill((3 * MAX_VLI), 0); bp += wq32(&buf[bp], e->ofs_last_inst_file); bp += wq32(&buf[bp], e->child_count); bp += wq32(&buf[bp], e->instance_count); bp += wq32(&buf[bp], e->agg_inst_count); /* sort the children in order of highest aggregate hits first */ do { struct lws_fts_entry **pe, *te1, *te2; stasis = 1; /* bubble sort keeps going until nothing changed */ pe = &e->child_list; while (*pe) { te1 = *pe; te2 = te1->sibling; if (te2 && te1->agg_inst_count < te2->agg_inst_count) { stasis = 0; *pe = te2; te1->sibling = te2->sibling; te2->sibling = te1; } pe = &(*pe)->sibling; } } while (!stasis); /* write the children */ e1 = e->child_list; while (e1) { spill((5 * MAX_VLI) + e1->suffix_len + 1, 0); bp += wq32(&buf[bp], e1->ofs); bp += wq32(&buf[bp], e1->instance_count); bp += wq32(&buf[bp], e1->agg_inst_count); bp += wq32(&buf[bp], e1->agg_child_count); if (e1->suffix) { /* string */ bp += wq32(&buf[bp], e1->suffix_len); memmove(&buf[bp], e1->suffix, e1->suffix_len); bp += (int)e1->suffix_len; } else { /* char */ bp += wq32(&buf[bp], 1); buf[bp++] = e1->c; } #if 0 if (e1->suffix && e1->suffix_len == 3 && !memcmp(e1->suffix, "cri", 3)) { struct lws_fts_entry *e2; e2 = e1; while (e2){ if (e2->suffix) lwsl_notice("%s\n", e2->suffix); else lwsl_notice("%c\n", e2->c); e2 = e2->parent; } lwsl_err("*** %c CRI inst %d ch %d\n", e1->parent->c, e1->instance_count, e1->child_count); } #endif e1 = e1->sibling; } /* if there are siblings, do those next */ if (do_parent) { do_parent = 0; sp--; } if (s[sp]->sibling) s[sp] = s[sp]->sibling; else { /* if there are no siblings, do the parent */ do_parent = 1; s[sp] = s[sp]->parent; } } spill(0, 1); assert(lseek(t->fd, 0, SEEK_END) == (off_t)t->c); /* drop the correct root trie offset + file length into the header */ if (lseek(t->fd, 4, SEEK_SET) < 0) { lwsl_err("%s: unable to seek\n", __func__); goto bail; } g32(buf, t->root->ofs); g32(buf + 4, t->c); if (write(t->fd, buf, 0x8) != 0x8) goto bail; lwsl_notice("%s: index %d files (%uMiB) cpu time %dms, " "alloc: %dKiB + %dKiB, " "serialize: %dms, file: %dKiB\n", __func__, t->next_file_index, (int)(t->agg_raw_input / (1024 * 1024)), (int)(t->agg_trie_creation_us / 1000), (int)(lwsac_total_alloc(t->lwsac_head) / 1024), (int)(t->worst_lwsac_input_size / 1024), (int)(((uint64_t)lws_now_usecs() - tf) / 1000), (int)(t->c / 1024)); return 0; bail_seek: lwsl_err("%s: problem seekings\n", __func__); bail: return 1; } libwebsockets-4.3.5/lib/misc/getifaddrs.c000066400000000000000000000153071476025525100203610ustar00rootroot00000000000000/* * Copyright (c) 2000 - 2001 Kungliga Tekniska Hļæ½gskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * 3. Neither the name of the Institute nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * originally downloaded from * * http://ftp.uninett.no/pub/OpenBSD/src/kerberosV/src/lib/roken/getifaddrs.c */ #include #include #include #include #include #include #include #include #include #include "private-lib-core.h" #ifdef LWS_HAVE_SYS_SOCKIO_H #include #endif #ifdef LWS_HAVE_NETINET_IN6_VAR_H #include #endif #ifndef max #define max(a, b) ((a) > (b) ? (a) : (b)) #endif #include "getifaddrs.h" static int getifaddrs2(struct ifaddrs **ifap, int af, int siocgifconf, int siocgifflags, size_t ifreq_sz) { int ret; int fd; size_t buf_size; char *buf; struct ifconf ifconf; char *p; size_t sz; struct sockaddr sa_zero; struct ifreq *ifr; struct ifaddrs *start, **end = &start; buf = NULL; memset(&sa_zero, 0, sizeof(sa_zero)); fd = socket(af, SOCK_DGRAM, 0); if (fd < 0) return -1; buf_size = 8192; for (;;) { buf = lws_zalloc(buf_size, "getifaddrs2"); if (buf == NULL) { ret = ENOMEM; goto error_out; } #if defined(__QNX__) ifconf.ifc_len = (short)(int)buf_size; #else ifconf.ifc_len = (int)buf_size; #endif ifconf.ifc_buf = buf; /* * Solaris returns EINVAL when the buffer is too small. */ if (ioctl(fd, siocgifconf, &ifconf) < 0 && errno != EINVAL) { ret = errno; goto error_out; } /* * Can the difference between a full and a overfull buf * be determined? */ if (ifconf.ifc_len < (int)buf_size) break; lws_free(buf); buf_size *= 2; } for (p = ifconf.ifc_buf; p < ifconf.ifc_buf + ifconf.ifc_len; p += sz) { struct ifreq ifreq; struct sockaddr *sa; size_t salen; ifr = (struct ifreq *)p; sa = &ifr->ifr_addr; sz = ifreq_sz; salen = sizeof(struct sockaddr); #ifdef LWS_HAVE_STRUCT_SOCKADDR_SA_LEN salen = sa->sa_len; sz = max(sz, sizeof(ifr->ifr_name) + sa->sa_len); #endif #ifdef SA_LEN salen = SA_LEN(sa); sz = max(sz, sizeof(ifr->ifr_name) + SA_LEN(sa)); #endif memset(&ifreq, 0, sizeof(ifreq)); memcpy(ifreq.ifr_name, ifr->ifr_name, sizeof(ifr->ifr_name)); if (ioctl(fd, siocgifflags, &ifreq) < 0) { ret = errno; goto error_out; } *end = lws_malloc(sizeof(**end), "getifaddrs"); (*end)->ifa_next = NULL; (*end)->ifa_name = strdup(ifr->ifr_name); (*end)->ifa_flags = (unsigned int)ifreq.ifr_flags; (*end)->ifa_addr = lws_malloc(salen, "getifaddrs"); memcpy((*end)->ifa_addr, sa, salen); (*end)->ifa_netmask = NULL; #if 0 /* fix these when we actually need them */ if (ifreq.ifr_flags & IFF_BROADCAST) { (*end)->ifa_broadaddr = lws_malloc(sizeof(ifr->ifr_broadaddr), "getifaddrs"); memcpy((*end)->ifa_broadaddr, &ifr->ifr_broadaddr, sizeof(ifr->ifr_broadaddr)); } else if (ifreq.ifr_flags & IFF_POINTOPOINT) { (*end)->ifa_dstaddr = lws_malloc(sizeof(ifr->ifr_dstaddr), "getifaddrs"); memcpy((*end)->ifa_dstaddr, &ifr->ifr_dstaddr, sizeof(ifr->ifr_dstaddr)); } else (*end)->ifa_dstaddr = NULL; #else (*end)->ifa_dstaddr = NULL; #endif (*end)->ifa_data = NULL; end = &(*end)->ifa_next; } *ifap = start; close(fd); lws_free(buf); return 0; error_out: close(fd); lws_free(buf); errno = ret; return -1; } int getifaddrs(struct ifaddrs **ifap) { int ret = -1; errno = ENXIO; #if defined(AF_INET6) && defined(SIOCGIF6CONF) && defined(SIOCGIF6FLAGS) if (ret) ret = getifaddrs2(ifap, AF_INET6, SIOCGIF6CONF, SIOCGIF6FLAGS, sizeof(struct in6_ifreq)); #endif #if defined(LWS_HAVE_IPV6) && defined(SIOCGIFCONF) if (ret) ret = getifaddrs2(ifap, AF_INET6, SIOCGIFCONF, SIOCGIFFLAGS, sizeof(struct ifreq)); #endif #if defined(AF_INET) && defined(SIOCGIFCONF) && defined(SIOCGIFFLAGS) if (ret) ret = getifaddrs2(ifap, AF_INET, SIOCGIFCONF, SIOCGIFFLAGS, sizeof(struct ifreq)); #endif return ret; } void freeifaddrs(struct ifaddrs *ifp) { struct ifaddrs *p, *q; for (p = ifp; p; ) { lws_free(p->ifa_name); lws_free(p->ifa_addr); lws_free(p->ifa_dstaddr); lws_free(p->ifa_netmask); lws_free(p->ifa_data); q = p; p = p->ifa_next; lws_free(q); } } #ifdef TEST void print_addr(const char *s, struct sockaddr *sa) { int i; printf(" %s=%d/", s, sa->sa_family); #ifdef LWS_HAVE_STRUCT_SOCKADDR_SA_LEN for (i = 0; i < sa->sa_len - ((lws_intptr_t)sa->sa_data - (lws_intptr_t)&sa->sa_family); i++) printf("%02x", ((unsigned char *)sa->sa_data)[i]); #else for (i = 0; i < sizeof(sa->sa_data); i++) printf("%02x", ((unsigned char *)sa->sa_data)[i]); #endif printf("\n"); } void print_ifaddrs(struct ifaddrs *x) { struct ifaddrs *p; for (p = x; p; p = p->ifa_next) { printf("%s\n", p->ifa_name); printf(" flags=%x\n", p->ifa_flags); if (p->ifa_addr) print_addr("addr", p->ifa_addr); if (p->ifa_dstaddr) print_addr("dstaddr", p->ifa_dstaddr); if (p->ifa_netmask) print_addr("netmask", p->ifa_netmask); printf(" %p\n", p->ifa_data); } } int main() { struct ifaddrs *a = NULL, *b; getifaddrs2(&a, AF_INET, SIOCGIFCONF, SIOCGIFFLAGS, sizeof(struct ifreq)); print_ifaddrs(a); printf("---\n"); getifaddrs(&b); print_ifaddrs(b); return 0; } #endif libwebsockets-4.3.5/lib/misc/getifaddrs.h000066400000000000000000000050271476025525100203640ustar00rootroot00000000000000#ifndef LWS_HAVE_GETIFADDRS #define LWS_HAVE_GETIFADDRS 0 #endif #if LWS_HAVE_GETIFADDRS #include #include #else #ifdef __cplusplus extern "C" { #endif /* * Copyright (c) 2000 Kungliga Tekniska Hļæ½gskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * 3. Neither the name of the Institute nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* $KTH: ifaddrs.hin,v 1.3 2000/12/11 00:01:13 assar Exp $ */ #ifndef ifaddrs_h_7467027A95AD4B5C8DDD40FE7D973791 #define ifaddrs_h_7467027A95AD4B5C8DDD40FE7D973791 /* * the interface is defined in terms of the fields below, and this is * sometimes #define'd, so there seems to be no simple way of solving * this and this seemed the best. */ #undef ifa_dstaddr struct ifaddrs { struct ifaddrs *ifa_next; char *ifa_name; unsigned int ifa_flags; struct sockaddr *ifa_addr; struct sockaddr *ifa_netmask; struct sockaddr *ifa_dstaddr; void *ifa_data; }; #ifndef ifa_broadaddr #define ifa_broadaddr ifa_dstaddr #endif int getifaddrs(struct ifaddrs **); void freeifaddrs(struct ifaddrs *); #endif /* __ifaddrs_h__ */ #ifdef __cplusplus } #endif #endif libwebsockets-4.3.5/lib/misc/ieeehalfprecision.c000066400000000000000000000151321476025525100217170ustar00rootroot00000000000000/****************************************************************************** * * Filename: ieeehalfprecision.c * Programmer: James Tursa * Version: 1.0 * Date: March 3, 2009 * Copyright: (c) 2009 by James Tursa, All Rights Reserved * * This code uses the BSD License: * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the distribution * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * This file contains C code to convert between IEEE double, single, and half * precision floating point formats. The intended use is for standalone C code * that does not rely on MATLAB mex.h. The bit pattern for the half precision * floating point format is stored in a 16-bit unsigned int variable. The half * precision bit pattern definition is: * * 1 bit sign bit * 5 bits exponent, biased by 15 * 10 bits mantissa, hidden leading bit, normalized to 1.0 * * Special floating point bit patterns recognized and supported: * * All exponent bits zero: * - If all mantissa bits are zero, then number is zero (possibly signed) * - Otherwise, number is a denormalized bit pattern * * All exponent bits set to 1: * - If all mantissa bits are zero, then number is +Infinity or -Infinity * - Otherwise, number is NaN (Not a Number) * * For the denormalized cases, note that 2^(-24) is the smallest number that can * be represented in half precision exactly. 2^(-25) will convert to 2^(-24) * because of the rounding algorithm used, and 2^(-26) is too small and * underflows to zero. * ******************************************************************************/ /* changes by K. Rogovin: - changed macros UINT16_TYPE, etc to types from stdint.h (i.e. UINT16_TYPE-->uint16_t, INT16_TYPE-->int16_t, etc) - removed double conversion routines. - changed run time checks of endianness to compile time macro. - removed return value from routines - changed source parameter type from * to const * - changed pointer types from void ot uint16_t and uint32_t */ /* * andy@warmcat.com: * * - clean style and indenting * - convert to single operation * - export as lws_ */ #include #include void lws_singles2halfp(uint16_t *hp, uint32_t x) { uint32_t xs, xe, xm; uint16_t hs, he, hm; int hes; if (!(x & 0x7FFFFFFFu)) { /* Signed zero */ *hp = (uint16_t)(x >> 16); return; } xs = x & 0x80000000u; // Pick off sign bit xe = x & 0x7F800000u; // Pick off exponent bits xm = x & 0x007FFFFFu; // Pick off mantissa bits if (xe == 0) { // Denormal will underflow, return a signed zero *hp = (uint16_t) (xs >> 16); return; } if (xe == 0x7F800000u) { // Inf or NaN (all the exponent bits are set) if (!xm) { // If mantissa is zero ... *hp = (uint16_t) ((xs >> 16) | 0x7C00u); // Signed Inf return; } *hp = (uint16_t) 0xFE00u; // NaN, only 1st mantissa bit set return; } /* Normalized number */ hs = (uint16_t) (xs >> 16); // Sign bit /* Exponent unbias the single, then bias the halfp */ hes = ((int)(xe >> 23)) - 127 + 15; if (hes >= 0x1F) { // Overflow *hp = (uint16_t) ((xs >> 16) | 0x7C00u); // Signed Inf return; } if (hes <= 0) { // Underflow if ((14 - hes) > 24) /* * Mantissa shifted all the way off & no * rounding possibility */ hm = (uint16_t) 0u; // Set mantissa to zero else { xm |= 0x00800000u; // Add the hidden leading bit hm = (uint16_t) (xm >> (14 - hes)); // Mantissa if ((xm >> (13 - hes)) & 1u) // Check for rounding /* Round, might overflow into exp bit, * but this is OK */ hm = (uint16_t)(hm + 1u); } /* Combine sign bit and mantissa bits, biased exponent is 0 */ *hp = hs | hm; return; } he = (uint16_t)(hes << 10); // Exponent hm = (uint16_t)(xm >> 13); // Mantissa if (xm & 0x00001000u) // Check for rounding /* Round, might overflow to inf, this is OK */ *hp = (uint16_t)((hs | he | hm) + (uint16_t)1u); else *hp = hs | he | hm; // No rounding } void lws_halfp2singles(uint32_t *xp, uint16_t h) { uint16_t hs, he, hm; uint32_t xs, xe, xm; int32_t xes; int e; if (!(h & 0x7FFFu)) { // Signed zero *xp = ((uint32_t)h) << 16; // Return the signed zero return; } hs = h & 0x8000u; // Pick off sign bit he = h & 0x7C00u; // Pick off exponent bits hm = h & 0x03FFu; // Pick off mantissa bits if (!he) { // Denormal will convert to normalized e = -1; /* figure out how much extra to adjust the exponent */ do { e++; hm = (uint16_t)(hm << 1); /* Shift until leading bit overflows into exponent */ } while (!(hm & 0x0400u)); xs = ((uint32_t) hs) << 16; // Sign bit /* Exponent unbias the halfp, then bias the single */ xes = ((int32_t)(he >> 10)) - 15 + 127 - e; xe = (uint32_t)(xes << 23); // Exponent xm = ((uint32_t)(hm & 0x03FFu)) << 13; // Mantissa *xp = xs | xe | xm; return; } if (he == 0x7C00u) { /* Inf or NaN (all the exponent bits are set) */ if (!hm) { /* If mantissa is zero ... * Signed Inf */ *xp = (((uint32_t)hs) << 16) | ((uint32_t)0x7F800000u); return; } /* ... NaN, only 1st mantissa bit set */ *xp = (uint32_t)0xFFC00000u; return; } /* Normalized number */ xs = ((uint32_t)hs) << 16; // Sign bit /* Exponent unbias the halfp, then bias the single */ xes = ((int32_t)(he >> 10)) - 15 + 127; xe = (uint32_t)(xes << 23); // Exponent xm = ((uint32_t)hm) << 13; // Mantissa /* Combine sign bit, exponent bits, and mantissa bits */ *xp = xs | xe | xm; } libwebsockets-4.3.5/lib/misc/lecp.c000066400000000000000000001062161476025525100171700ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * Stream parser for RFC8949 CBOR */ #include "private-lib-core.h" #include #include #if defined(LWS_WITH_CBOR_FLOAT) #include #endif #define lwsl_lecp lwsl_debug static const char * const parser_errs[] = { "", "", "Bad CBOR coding", "Unknown", "Parser callback errored (see earlier error)", "Overflow" }; enum lecp_states { LECP_OPC, LECP_COLLECT, LECP_SIMPLEX8, LECP_COLLATE, LECP_ONLY_SAME }; void lecp_construct(struct lecp_ctx *ctx, lecp_callback cb, void *user, const char * const *paths, unsigned char count_paths) { uint16_t x = 0x1234; memset(ctx, 0, sizeof(*ctx) - sizeof(ctx->buf)); ctx->user = user; ctx->pst[0].cb = cb; ctx->pst[0].paths = paths; ctx->pst[0].count_paths = count_paths; ctx->be = *((uint8_t *)&x) == 0x12; ctx->st[0].s = LECP_OPC; ctx->pst[0].cb(ctx, LECPCB_CONSTRUCTED); } void lecp_destruct(struct lecp_ctx *ctx) { /* no allocations... just let callback know what it happening */ if (ctx->pst[0].cb) ctx->pst[0].cb(ctx, LECPCB_DESTRUCTED); } void lecp_change_callback(struct lecp_ctx *ctx, lecp_callback cb) { ctx->pst[0].cb(ctx, LECPCB_DESTRUCTED); ctx->pst[0].cb = cb; ctx->pst[0].cb(ctx, LECPCB_CONSTRUCTED); } const char * lecp_error_to_string(int e) { if (e > 0) e = 0; else e = -e; if (e >= (int)LWS_ARRAY_SIZE(parser_errs)) return "Unknown error"; return parser_errs[e]; } static void ex(struct lecp_ctx *ctx, void *_start, size_t len) { struct _lecp_stack *st = &ctx->st[ctx->sp]; uint8_t *start = (uint8_t *)_start; st->s = LECP_COLLECT; st->collect_rem = (uint8_t)len; if (ctx->be) ctx->collect_tgt = start; else ctx->collect_tgt = start + len - 1; } static void lecp_check_path_match(struct lecp_ctx *ctx) { const char *p, *q; size_t s = sizeof(char *); int n; if (ctx->path_stride) s = ctx->path_stride; /* we only need to check if a match is not active */ for (n = 0; !ctx->path_match && n < ctx->pst[ctx->pst_sp].count_paths; n++) { ctx->wildcount = 0; p = ctx->path; q = *((char **)(((char *)ctx->pst[ctx->pst_sp].paths) + ((unsigned int)n * s))); while (*p && *q) { if (*q != '*') { if (*p != *q) break; p++; q++; continue; } ctx->wild[ctx->wildcount++] = (uint16_t)lws_ptr_diff_size_t(p, ctx->path); q++; /* * if * has something after it, match to . * if ends with *, eat everything. * This implies match sequences must be ordered like * x.*.* * x.* * if both options are possible */ while (*p && (*p != '.' || !*q)) p++; } if (*p || *q) continue; ctx->path_match = (uint8_t)(n + 1); ctx->path_match_len = ctx->pst[ctx->pst_sp].ppos; return; } if (!ctx->path_match) ctx->wildcount = 0; } int lecp_push(struct lecp_ctx *ctx, char s_start, char s_end, char state) { struct _lecp_stack *st = &ctx->st[ctx->sp]; if (ctx->sp + 1 == LWS_ARRAY_SIZE(ctx->st)) return LECP_STACK_OVERFLOW; if (s_start && ctx->pst[ctx->pst_sp].cb(ctx, s_start)) return LECP_REJECT_CALLBACK; lwsl_lecp("%s: pushing from sp %d, parent " "(opc %d, indet %d, collect_rem %d)\n", __func__, ctx->sp, st->opcode >> 5, st->indet, (int)st->collect_rem); st->pop_iss = s_end; /* issue this when we pop back here */ ctx->st[ctx->sp + 1] = *st; ctx->sp++; st++; st->s = state; st->collect_rem = 0; st->intermediate = 0; st->indet = 0; st->ordinal = 0; st->send_new_array_item = 0; st->barrier = 0; return 0; } int lecp_pop(struct lecp_ctx *ctx) { struct _lecp_stack *st; assert(ctx->sp); ctx->sp--; st = &ctx->st[ctx->sp]; if (st->pop_iss == LECPCB_ARRAY_END) { assert(ctx->ipos); ctx->ipos--; } ctx->pst[ctx->pst_sp].ppos = st->p; ctx->path[st->p] = '\0'; lecp_check_path_match(ctx); lwsl_lecp("%s: popping to sp %d, parent " "(opc %d, indet %d, collect_rem %d)\n", __func__, ctx->sp, st->opcode >> 5, st->indet, (int)st->collect_rem); if (st->pop_iss && ctx->pst[ctx->pst_sp].cb(ctx, st->pop_iss)) return LECP_REJECT_CALLBACK; return 0; } static struct _lecp_stack * lwcp_st_parent(struct lecp_ctx *ctx) { assert(ctx->sp); return &ctx->st[ctx->sp - 1]; } int lwcp_completed(struct lecp_ctx *ctx, char indet) { int r, il = ctx->ipos; ctx->st[ctx->sp].s = LECP_OPC; while (ctx->sp && !ctx->st[ctx->sp].barrier) { struct _lecp_stack *parent = lwcp_st_parent(ctx); lwsl_lecp("%s: sp %d, parent " "(opc %d, indet %d, collect_rem %d)\n", __func__, ctx->sp, parent->opcode >> 5, parent->indet, (int)parent->collect_rem); parent->ordinal++; if (parent->opcode == LWS_CBOR_MAJTYP_ARRAY) { assert(il); il--; ctx->i[il]++; if (!parent->send_new_array_item) { if (ctx->pst[ctx->pst_sp].cb(ctx, LECPCB_ARRAY_ITEM_END)) return LECP_REJECT_CALLBACK; parent->send_new_array_item = 1; } } if (!indet && parent->indet) { lwsl_lecp("%s: abandoning walk as parent needs indet\n", __func__); break; } if (!parent->indet && parent->collect_rem) { parent->collect_rem--; lwsl_lecp("%s: sp %d, parent (opc %d, indet %d, collect_rem -> %d)\n", __func__, ctx->sp, parent->opcode >> 5, parent->indet, (int)parent->collect_rem); if (parent->collect_rem) { /* more items to come */ if (parent->opcode == LWS_CBOR_MAJTYP_ARRAY) parent->send_new_array_item = 1; break; } } lwsl_lecp("%s: parent (opc %d) collect_rem became zero\n", __func__, parent->opcode >> 5); ctx->st[ctx->sp - 1].s = LECP_OPC; r = lecp_pop(ctx); if (r) return r; indet = 0; } return 0; } static int lwcp_is_indet_string(struct lecp_ctx *ctx) { if (ctx->st[ctx->sp].indet) return 1; if (!ctx->sp) return 0; if (lwcp_st_parent(ctx)->opcode != LWS_CBOR_MAJTYP_BSTR && lwcp_st_parent(ctx)->opcode != LWS_CBOR_MAJTYP_TSTR) return 0; if (ctx->st[ctx->sp - 1].indet) return 1; return 0; } static int report_raw_cbor(struct lecp_ctx *ctx) { struct _lecp_parsing_stack *pst = &ctx->pst[ctx->pst_sp]; if (!ctx->cbor_pos) return 0; if (pst->cb(ctx, LECPCB_LITERAL_CBOR)) return 1; ctx->cbor_pos = 0; return 0; } void lecp_parse_report_raw(struct lecp_ctx *ctx, int on) { ctx->literal_cbor_report = (uint8_t)on; report_raw_cbor(ctx); } int lecp_parse_map_is_key(struct lecp_ctx *ctx) { return lwcp_st_parent(ctx)->opcode == LWS_CBOR_MAJTYP_MAP && !(lwcp_st_parent(ctx)->ordinal & 1); } int lecp_parse_subtree(struct lecp_ctx *ctx, const uint8_t *in, size_t len) { struct _lecp_stack *st = &ctx->st[++ctx->sp]; int n; st->s = 0; st->collect_rem = 0; st->intermediate = 0; st->indet = 0; st->ordinal = 0; st->send_new_array_item = 0; st->barrier = 1; n = lecp_parse(ctx, in, len); ctx->sp--; return n; } int lecp_parse(struct lecp_ctx *ctx, const uint8_t *cbor, size_t len) { size_t olen = len; int ret; while (len--) { struct _lecp_parsing_stack *pst = &ctx->pst[ctx->pst_sp]; struct _lecp_stack *st = &ctx->st[ctx->sp]; uint8_t c, sm, o; char to; c = *cbor++; /* * for, eg, cose_sign, we sometimes need to collect subtrees of * raw CBOR. Report buffers of it via the callback if we filled * the buffer, or we stopped collecting. */ if (ctx->literal_cbor_report) { ctx->cbor[ctx->cbor_pos++] = c; if (ctx->cbor_pos == sizeof(ctx->cbor) && report_raw_cbor(ctx)) goto reject_callback; } switch (st->s) { /* * We're getting the nex opcode */ case LECP_OPC: st->opcode = ctx->item.opcode = c & LWS_CBOR_MAJTYP_MASK; sm = c & LWS_CBOR_SUBMASK; to = 0; lwsl_lecp("%s: %d: OPC %d|%d\n", __func__, ctx->sp, c >> 5, sm); if (c != 0xff && ctx->sp && ctx->st[ctx->sp - 1].send_new_array_item) { ctx->st[ctx->sp - 1].send_new_array_item = 0; if (ctx->pst[ctx->pst_sp].cb(ctx, LECPCB_ARRAY_ITEM_START)) goto reject_callback; } switch (st->opcode) { case LWS_CBOR_MAJTYP_UINT: ctx->present = LECPCB_VAL_NUM_UINT; if (sm < LWS_CBOR_1) { ctx->item.u.i64 = (int64_t)sm; goto issue; } goto i2; case LWS_CBOR_MAJTYP_INT_NEG: ctx->present = LECPCB_VAL_NUM_INT; if (sm < 24) { ctx->item.u.i64 = (-1ll) - (int64_t)sm; goto issue; } i2: if (sm >= LWS_CBOR_RESERVED) goto bad_coding; ctx->item.u.u64 = 0; o = (uint8_t)(1 << (sm - LWS_CBOR_1)); ex(ctx, (uint8_t *)&ctx->item.u.u64, o); break; case LWS_CBOR_MAJTYP_BSTR: to = LECPCB_VAL_BLOB_END - LECPCB_VAL_STR_END; /* fallthru */ case LWS_CBOR_MAJTYP_TSTR: /* * The first thing is the string length, it's * going to either be a byte count for the * string or the indefinite length marker * followed by determinite-length chunks of the * same MAJTYP */ ctx->npos = 0; ctx->buf[0] = '\0'; if (!sm) { if ((!ctx->sp || (ctx->sp && !ctx->st[ctx->sp - 1].intermediate)) && pst->cb(ctx, (char)(LECPCB_VAL_STR_START + to))) goto reject_callback; if (pst->cb(ctx, (char)(LECPCB_VAL_STR_END + to))) goto reject_callback; lwcp_completed(ctx, 0); break; } if (sm < LWS_CBOR_1) { ctx->item.u.u64 = (uint64_t)sm; if ((!ctx->sp || (ctx->sp && !ctx->st[ctx->sp - 1].intermediate)) && pst->cb(ctx, (char)(LECPCB_VAL_STR_START + to))) goto reject_callback; st->indet = 0; st->collect_rem = sm; st->s = LECP_COLLATE; break; } if (sm < LWS_CBOR_RESERVED) goto i2; if (sm != LWS_CBOR_INDETERMINITE) goto bad_coding; if ((!ctx->sp || (ctx->sp && !ctx->st[ctx->sp - 1].intermediate)) && pst->cb(ctx, (char)(LECPCB_VAL_STR_START + to))) goto reject_callback; st->indet = 1; st->p = pst->ppos; lecp_push(ctx, 0, (char)(LECPCB_VAL_STR_END + to), LECP_ONLY_SAME); break; case LWS_CBOR_MAJTYP_ARRAY: ctx->npos = 0; ctx->buf[0] = '\0'; if (pst->ppos + 3u >= sizeof(ctx->path)) goto reject_overflow; st->p = pst->ppos; ctx->path[pst->ppos++] = '['; ctx->path[pst->ppos++] = ']'; ctx->path[pst->ppos] = '\0'; lecp_check_path_match(ctx); if (ctx->ipos + 1u >= LWS_ARRAY_SIZE(ctx->i)) goto reject_overflow; ctx->i[ctx->ipos++] = 0; if (pst->cb(ctx, LECPCB_ARRAY_START)) goto reject_callback; if (!sm) { if (pst->cb(ctx, LECPCB_ARRAY_END)) goto reject_callback; pst->ppos = st->p; ctx->path[pst->ppos] = '\0'; ctx->ipos--; lecp_check_path_match(ctx); lwcp_completed(ctx, 0); break; } ctx->st[ctx->sp].send_new_array_item = 1; if (sm < LWS_CBOR_1) { st->indet = 0; st->collect_rem = sm; goto push_a; } if (sm < LWS_CBOR_RESERVED) goto i2; if (sm != LWS_CBOR_INDETERMINITE) goto bad_coding; st->indet = 1; push_a: lecp_push(ctx, 0, LECPCB_ARRAY_END, LECP_OPC); break; case LWS_CBOR_MAJTYP_MAP: ctx->npos = 0; ctx->buf[0] = '\0'; if (pst->ppos + 1u >= sizeof(ctx->path)) goto reject_overflow; st->p = pst->ppos; ctx->path[pst->ppos++] = '.'; ctx->path[pst->ppos] = '\0'; lecp_check_path_match(ctx); if (pst->cb(ctx, LECPCB_OBJECT_START)) goto reject_callback; if (!sm) { if (pst->cb(ctx, LECPCB_OBJECT_END)) goto reject_callback; pst->ppos = st->p; ctx->path[pst->ppos] = '\0'; lecp_check_path_match(ctx); lwcp_completed(ctx, 0); break; } if (sm < LWS_CBOR_1) { st->indet = 0; st->collect_rem = (uint64_t)(sm * 2); goto push_m; } if (sm < LWS_CBOR_RESERVED) goto i2; if (sm != LWS_CBOR_INDETERMINITE) goto bad_coding; st->indet = 1; push_m: lecp_push(ctx, 0, LECPCB_OBJECT_END, LECP_OPC); break; case LWS_CBOR_MAJTYP_TAG: /* tag has one or another kind of int first */ if (sm < LWS_CBOR_1) { /* * We have a literal tag number, push * to decode the tag body */ ctx->item.u.u64 = st->tag = (uint64_t)sm; goto start_tag_enclosure; } /* * We have to do more stuff to get the tag * number... */ goto i2; case LWS_CBOR_MAJTYP_FLOAT: /* * This can also be a bunch of specials as well * as sizes of float... */ sm = c & LWS_CBOR_SUBMASK; switch (sm) { case LWS_CBOR_SWK_FALSE: ctx->present = LECPCB_VAL_FALSE; goto issue; case LWS_CBOR_SWK_TRUE: ctx->present = LECPCB_VAL_TRUE; goto issue; case LWS_CBOR_SWK_NULL: ctx->present = LECPCB_VAL_NULL; goto issue; case LWS_CBOR_SWK_UNDEFINED: ctx->present = LECPCB_VAL_UNDEFINED; goto issue; case LWS_CBOR_M7_SUBTYP_SIMPLE_X8: st->s = LECP_SIMPLEX8; break; case LWS_CBOR_M7_SUBTYP_FLOAT16: ctx->present = LECPCB_VAL_FLOAT16; ex(ctx, &ctx->item.u.hf, 2); break; case LWS_CBOR_M7_SUBTYP_FLOAT32: ctx->present = LECPCB_VAL_FLOAT32; ex(ctx, &ctx->item.u.f, 4); break; case LWS_CBOR_M7_SUBTYP_FLOAT64: ctx->present = LECPCB_VAL_FLOAT64; ex(ctx, &ctx->item.u.d, 8); break; case LWS_CBOR_M7_BREAK: if (!ctx->sp || !ctx->st[ctx->sp - 1].indet) goto bad_coding; lwcp_completed(ctx, 1); break; default: /* handle as simple */ ctx->item.u.u64 = (uint64_t)sm; if (pst->cb(ctx, LECPCB_VAL_SIMPLE)) goto reject_callback; break; } break; } break; /* * We're collecting int / float pieces */ case LECP_COLLECT: if (ctx->be) *ctx->collect_tgt++ = c; else *ctx->collect_tgt-- = c; if (--st->collect_rem) break; /* * We collected whatever it was... */ ctx->npos = 0; ctx->buf[0] = '\0'; switch (st->opcode) { case LWS_CBOR_MAJTYP_BSTR: case LWS_CBOR_MAJTYP_TSTR: st->collect_rem = ctx->item.u.u64; if ((!ctx->sp || (ctx->sp && !ctx->st[ctx->sp - 1].intermediate)) && pst->cb(ctx, (char)((st->opcode == LWS_CBOR_MAJTYP_TSTR) ? LECPCB_VAL_STR_START : LECPCB_VAL_BLOB_START))) goto reject_callback; st->s = LECP_COLLATE; break; case LWS_CBOR_MAJTYP_ARRAY: st->collect_rem = ctx->item.u.u64; lecp_push(ctx, 0, LECPCB_ARRAY_END, LECP_OPC); break; case LWS_CBOR_MAJTYP_MAP: st->collect_rem = ctx->item.u.u64 * 2; lecp_push(ctx, 0, LECPCB_OBJECT_END, LECP_OPC); break; case LWS_CBOR_MAJTYP_TAG: st->tag = ctx->item.u.u64; goto start_tag_enclosure; default: /* * ... then issue what we collected as a * literal */ if (st->opcode == LWS_CBOR_MAJTYP_INT_NEG) ctx->item.u.i64 = (-1ll) - ctx->item.u.i64; goto issue; } break; case LECP_SIMPLEX8: /* * Extended SIMPLE byte for 7|24 opcode, no uses * for it in RFC8949 */ if (c <= LWS_CBOR_INDETERMINITE) /* * Duplication of implicit simple values is * denied by RFC8949 3.3 */ goto bad_coding; ctx->item.u.u64 = (uint64_t)c; if (pst->cb(ctx, LECPCB_VAL_SIMPLE)) goto reject_callback; lwcp_completed(ctx, 0); break; case LECP_COLLATE: /* * let's grab b/t string content into the context * buffer, and issue chunks from there */ ctx->buf[ctx->npos++] = (char)c; if (st->collect_rem) st->collect_rem--; /* spill at chunk boundaries, or if we filled the buf */ if (ctx->npos != sizeof(ctx->buf) - 1 && st->collect_rem) break; /* spill */ ctx->buf[ctx->npos] = '\0'; /* if it's a map name, deal with the path */ if (ctx->sp && lecp_parse_map_is_key(ctx)) { if (lwcp_st_parent(ctx)->ordinal) pst->ppos = st->p; st->p = pst->ppos; if (pst->ppos + ctx->npos > sizeof(ctx->path)) goto reject_overflow; memcpy(&ctx->path[pst->ppos], ctx->buf, (size_t)(ctx->npos + 1)); pst->ppos = (uint8_t)(pst->ppos + ctx->npos); lecp_check_path_match(ctx); } to = 0; if (ctx->item.opcode == LWS_CBOR_MAJTYP_BSTR) to = LECPCB_VAL_BLOB_END - LECPCB_VAL_STR_END; o = (uint8_t)(LECPCB_VAL_STR_END + to); c = (st->collect_rem /* more to come at this layer */ || /* we or direct parent is indeterminite */ lwcp_is_indet_string(ctx)); if (ctx->sp) ctx->st[ctx->sp - 1].intermediate = !!c; if (c) o--; if (pst->cb(ctx, (char)o)) goto reject_callback; ctx->npos = 0; ctx->buf[0] = '\0'; if (ctx->sp && lwcp_st_parent(ctx)->indet) st->s = LECP_OPC; if (o == LECPCB_VAL_STR_END + to) lwcp_completed(ctx, 0); break; case LECP_ONLY_SAME: /* * deterministic sized chunks same MAJTYP as parent * level only (BSTR and TSTR frags inside interderminite * BSTR or TSTR) * * Clean end when we see M7|31 */ if (!ctx->sp) { /* * We should only come here by pushing on stack */ assert(0); return LECP_STACK_OVERFLOW; } if (c == (LWS_CBOR_MAJTYP_FLOAT | LWS_CBOR_M7_BREAK)) { /* if's the end of an interdetminite list */ if (!ctx->sp || !ctx->st[ctx->sp - 1].indet) /* * Can't have a break without an * indeterminite parent */ goto bad_coding; if (lwcp_completed(ctx, 1)) goto reject_callback; break; } if (st->opcode != lwcp_st_parent(ctx)->opcode) /* * Fragments have to be of the same type as the * outer opcode */ goto bad_coding; sm = c & LWS_CBOR_SUBMASK; if (sm == LWS_CBOR_INDETERMINITE) /* indeterminite length frags not allowed */ goto bad_coding; if (sm < LWS_CBOR_1) { st->indet = 0; st->collect_rem = (uint64_t)sm; st->s = LECP_COLLATE; break; } if (sm >= LWS_CBOR_RESERVED) goto bad_coding; goto i2; default: assert(0); return -1; } continue; start_tag_enclosure: st->p = pst->ppos; ret = lecp_push(ctx, LECPCB_TAG_START, LECPCB_TAG_END, LECP_OPC); if (ret) return ret; continue; issue: if (ctx->item.opcode == LWS_CBOR_MAJTYP_TAG) { st->tag = ctx->item.u.u64; goto start_tag_enclosure; } /* we are just a number */ if (pst->cb(ctx, ctx->present)) goto reject_callback; lwcp_completed(ctx, 0); } ctx->used_in = olen - len; if (!ctx->sp && ctx->st[0].s == LECP_OPC) return 0; return LECP_CONTINUE; reject_overflow: ret = LECP_STACK_OVERFLOW; goto reject; bad_coding: ret = LECP_REJECT_BAD_CODING; goto reject; reject_callback: ret = LECP_REJECT_CALLBACK; reject: ctx->pst[ctx->pst_sp].cb(ctx, LECPCB_FAILED); return ret; } void lws_lec_init(lws_lec_pctx_t *ctx, uint8_t *buf, size_t len) { memset(ctx, 0, sizeof(*ctx)); ctx->start = ctx->buf = buf; ctx->end = ctx->start + len; ctx->fmt_pos = 0; } void lws_lec_setbuf(lws_lec_pctx_t *ctx, uint8_t *buf, size_t len) { ctx->start = ctx->buf = buf; ctx->end = ctx->start + len; ctx->used = 0; ctx->vaa_pos = 0; } enum lws_lec_pctx_ret lws_lec_printf(lws_lec_pctx_t *ctx, const char *format, ...) { enum lws_lec_pctx_ret r; va_list ap; va_start(ap, format); r = lws_lec_vsprintf(ctx, format, ap); va_end(ap); return r; } /* * Report how many next-level elements inbetween fmt[0] and the matching * closure, eg, [] returns 0, [123] would return 1, [123,456] returns 2, and * [123,{'a':[123,456]}] returns 2. Counts for { } maps are in pairs, ie, * {'a':1, 'b': 2} returns 2 * * If there is no closure in the string it returns -1 * * We use this to figure out if we should use indeterminite lengths or specific * lengths for items in the format string */ #define bump(_r) count[sp]++ //; lwsl_notice("%s: count[%d] -> %d\n", _r, sp, count[sp]) static int format_scan(const char *fmt) { char stack[12], literal = 0, numeric = 0; int count[12], sp = 0, pc = 0, swallow = 0; literal = *fmt == '\''; stack[sp] = *fmt++; count[sp] = 0; // lwsl_notice("%s: start %s\n", __func__, fmt - 1); while (*fmt) { // lwsl_notice("%s: %c %d %d\n", __func__, *fmt, sp, literal); if (swallow) { swallow--; fmt++; continue; } if (numeric) { while (*fmt >= '0' && *fmt <= '9') fmt++; numeric = 0; if (*fmt != '(') bump("a"); } if (literal) { if (*fmt == '\\' && fmt[1]) { fmt += 2; continue; } if (*fmt == '\'') { literal = 0; if (!sp && stack[sp] == '\'') return count[sp]; if (sp) sp--; fmt++; continue; } bump("b"); fmt++; continue; } if (*fmt == '\'') { bump("c"); sp++; literal = 1; fmt++; continue; } switch (pc) { case 1: if (*fmt == '.') { pc++; fmt++; continue; } if (*fmt == 'l') { pc++; fmt++; continue; } /* fallthru */ case 2: if (*fmt == '*') { pc++; fmt++; continue; } if (*fmt == 'l') { pc++; fmt++; continue; } /* fallthru */ case 3: bump("pc"); pc = 0; fmt++; continue; } switch (*fmt) { case '<': swallow = 1; /* fallthru */ case '[': case '(': case '{': if (sp == sizeof(stack)) return -2; bump("d"); sp++; stack[sp] = *fmt; count[sp] = 0; break; case ' ': break; case ',': //count[sp]++; break; case ':': if (stack[sp] != '{') goto mismatch; //count[sp]++; break; case '%': pc = 1; break; case ']': if (stack[sp] != '[') goto mismatch; goto pop; case ')': if (stack[sp] != '(') goto mismatch; goto pop; case '}': if (stack[sp] != '{') goto mismatch; goto pop; case '>': if (stack[sp] != '<') goto mismatch; pop: if (sp) { sp--; break; } if (stack[0] == '{') { /* args have to come in pairs */ if (count[0] & 1) { lwsl_err("%s: odd map args %d %s\n", __func__, count[0], fmt); return -2; } // lwsl_notice("%s: return %d pairs\n", __func__, count[0] >> 1); /* report how many pairs */ return count[0] >> 1; } // lwsl_notice("%s: return %d items\n", __func__, count[0]); return count[0]; case '-': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': numeric = 1; break; default: bump("e"); break; } fmt++; } return -1; mismatch: lwsl_err("%s: format mismatch %c %c\n", __func__, stack[sp], *fmt); return -2; } void lws_lec_signed(lws_lec_pctx_t *ctx, int64_t num) { if (num < 0) lws_lec_int(ctx, LWS_CBOR_MAJTYP_INT_NEG, 0, (uint64_t)(-1ll - num)); else lws_lec_int(ctx, LWS_CBOR_MAJTYP_UINT, 0, (uint64_t)num); } void lws_lec_int(lws_lec_pctx_t *ctx, uint8_t opcode, uint8_t indet, uint64_t num) { uint8_t hint = 0; unsigned int n; if (indet) { ctx->scratch[ctx->scratch_len++] = (uint8_t)(opcode | LWS_CBOR_INDETERMINITE); return; } if ((opcode & LWS_CBOR_MAJTYP_MASK) == LWS_CBOR_MAJTYP_FLOAT) { hint = opcode & LWS_CBOR_SUBMASK; switch (hint) { case LWS_CBOR_M7_SUBTYP_FLOAT16: num <<= 48; break; case LWS_CBOR_M7_SUBTYP_FLOAT32: num <<= 32; break; } } else { if (num < LWS_CBOR_1) { ctx->scratch[ctx->scratch_len++] = (uint8_t)(opcode | num); return; } if (!(num & (uint64_t)(~0xffull))) { hint = LWS_CBOR_1; num <<= 56; } else if (!(num & (uint64_t)(~0xffffull))) { hint = LWS_CBOR_2; num <<= 48; } else if (!(num & (uint64_t)(~0xffffffffull))) { hint = LWS_CBOR_4; num <<= 32; } else hint = LWS_CBOR_8; } ctx->scratch[ctx->scratch_len++] = (uint8_t)(opcode | hint); n = 1u << (hint - LWS_CBOR_1); while (n--) { ctx->scratch[ctx->scratch_len++] = (uint8_t)(num >> 56); num <<= 8; } } enum { NATTYPE_INT, NATTYPE_LONG, NATTYPE_LONG_LONG, NATTYPE_PTR, NATTYPE_DOUBLE, }; int lws_lec_scratch(lws_lec_pctx_t *ctx) { size_t s; if (!ctx->scratch_len) return 0; s = lws_ptr_diff_size_t(ctx->end, ctx->buf); if (s > (size_t)ctx->scratch_len) s = (size_t)ctx->scratch_len; memcpy(ctx->buf, ctx->scratch, s); ctx->buf += s; ctx->scratch_len = (uint8_t)(ctx->scratch_len - (uint8_t)s); return ctx->buf == ctx->end; } enum lws_lec_pctx_ret lws_lec_vsprintf(lws_lec_pctx_t *ctx, const char *fmt, va_list args) { size_t fl = strlen(fmt); uint64_t u64; int64_t i64; #if defined(LWS_WITH_CBOR_FLOAT) double dbl; #endif size_t s; char c; int n; /* * We might be being called after the first time, since we had to emit * output buffer(s) before we could move on in the format string. For * this case, reposition ourselves at the vaarg we got to from the last * call. */ for (n = 0; n < ctx->vaa_pos; n++) { switch (ctx->vaa[n]) { case NATTYPE_INT: (void)va_arg(args, int); break; case NATTYPE_LONG: (void)va_arg(args, long); break; case NATTYPE_LONG_LONG: (void)va_arg(args, long long); break; case NATTYPE_PTR: (void)va_arg(args, const char *); break; case NATTYPE_DOUBLE: (void)va_arg(args, double); break; } if (ctx->state == CBPS_STRING_BODY) /* * when copying out text or binary strings, we reload * the %s or %.*s pointer on subsequent calls, in case * it was on the stack. The length and contents should * not change between calls, but it's OK if the source * address does. */ ctx->ongoing_src = va_arg(args, uint8_t *); } while (ctx->buf != ctx->end) { /* * We write small things into the context scratch array, then * copy that into the output buffer fragmenting as needed. Next * time we will finish emptying the scratch into the output * buffer preferentially. * * Then we don't otherwise have to handle fragmentations in * order to exactly fill the output buffer, simplifying * everything else. */ if (lws_lec_scratch(ctx)) break; if (ctx->fmt_pos >= fl) { if (ctx->state == CBPS_IDLE) break; c = 0; } else c = fmt[ctx->fmt_pos]; // lwsl_notice("%s: %d %d %c\n", __func__, ctx->state, ctx->sp, c); switch (ctx->state) { case CBPS_IDLE: ctx->scratch_len = 0; switch (c) { case '[': n = format_scan(&fmt[ctx->fmt_pos]); if (n == -2) return LWS_LECPCTX_RET_FAIL; lws_lec_int(ctx, LWS_CBOR_MAJTYP_ARRAY, n == -1, (uint64_t)n); goto stack_push; case '{': n = format_scan(&fmt[ctx->fmt_pos]); if (n == -2) return LWS_LECPCTX_RET_FAIL; lws_lec_int(ctx, LWS_CBOR_MAJTYP_MAP, n == -1, (uint64_t)n); goto stack_push; case '(': /* must be preceded by a number */ goto fail; case '<': /* state = CBPS_CONTYPE; break; case ']': if (!ctx->sp || ctx->stack[ctx->sp - 1] != '[') return LWS_LECPCTX_RET_FAIL; ctx->sp--; break; case '}': if (!ctx->sp || ctx->stack[ctx->sp - 1] != '{') return LWS_LECPCTX_RET_FAIL; ctx->sp--; break; case ')': if (!ctx->sp || ctx->stack[ctx->sp - 1] != '(') { lwsl_notice("bad tag end %d %c\n", ctx->sp, ctx->stack[ctx->sp - 1]); goto fail; } ctx->sp--; break; case '>': if (!ctx->sp || ctx->stack[ctx->sp - 1] != '<') return LWS_LECPCTX_RET_FAIL; ctx->scratch[ctx->scratch_len++] = (uint8_t)(LWS_CBOR_MAJTYP_FLOAT | LWS_CBOR_M7_BREAK); ctx->sp--; break; case '\'': n = format_scan(&fmt[ctx->fmt_pos]); // lwsl_notice("%s: quote fs %d\n", __func__, n); if (n < 0) return LWS_LECPCTX_RET_FAIL; lws_lec_int(ctx, LWS_CBOR_MAJTYP_TSTR, 0, (uint64_t)n); ctx->state = CBPS_STRING_LIT; break; case '%': if (ctx->vaa_pos >= sizeof(ctx->vaa) - 1) { lwsl_err("%s: too many %%\n", __func__); goto fail; } ctx->_long = 0; ctx->dotstar = 0; ctx->state = CBPS_PC1; break; case ':': break; case ',': break; case '-': ctx->item.opcode = LWS_CBOR_MAJTYP_INT_NEG; ctx->item.u.i64 = 0; ctx->state = CBPS_NUM_LIT; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': ctx->item.opcode = LWS_CBOR_MAJTYP_UINT; ctx->item.u.u64 = (uint64_t)(c - '0'); ctx->state = CBPS_NUM_LIT; break; } break; case CBPS_PC1: if (c == 'l') { ctx->_long++; ctx->state = CBPS_PC2; break; } if (c == '.') { ctx->dotstar++; ctx->state = CBPS_PC2; break; } /* fallthru */ case CBPS_PC2: if (c == 'l') { ctx->_long++; ctx->state = CBPS_PC3; break; } if (c == '*') { ctx->dotstar++; ctx->state = CBPS_PC3; break; } /* fallthru */ case CBPS_PC3: switch (c) { case 'd': switch (ctx->_long) { case 0: i64 = (int64_t)va_arg(args, int); ctx->vaa[ctx->vaa_pos++] = NATTYPE_INT; break; case 1: i64 = (int64_t)va_arg(args, long); ctx->vaa[ctx->vaa_pos++] = NATTYPE_LONG; break; case 2: i64 = (int64_t)va_arg(args, long long); ctx->vaa[ctx->vaa_pos++] = NATTYPE_LONG_LONG; break; } if (i64 < 0) lws_lec_int(ctx, LWS_CBOR_MAJTYP_INT_NEG, 0, (uint64_t)(-1ll - i64)); else lws_lec_int(ctx, LWS_CBOR_MAJTYP_UINT, 0, (uint64_t)i64); break; case 'u': switch (ctx->_long) { case 0: u64 = (uint64_t)va_arg(args, unsigned int); ctx->vaa[ctx->vaa_pos++] = NATTYPE_INT; break; case 1: u64 = (uint64_t)va_arg(args, unsigned long); ctx->vaa[ctx->vaa_pos++] = NATTYPE_LONG; break; case 2: u64 = (uint64_t)va_arg(args, unsigned long long); ctx->vaa[ctx->vaa_pos++] = NATTYPE_LONG_LONG; break; } lws_lec_int(ctx, LWS_CBOR_MAJTYP_UINT, 0, u64); break; case 's': /* text string */ ctx->ongoing_done = 0; if (ctx->dotstar == 2) { ctx->ongoing_len = (uint64_t)va_arg(args, int); ctx->vaa[ctx->vaa_pos++] = NATTYPE_INT; } /* vaa for ptr done at end of body copy */ ctx->ongoing_src = va_arg(args, uint8_t *); if (ctx->dotstar != 2) ctx->ongoing_len = (uint64_t)strlen( (const char *)ctx->ongoing_src); lws_lec_int(ctx, LWS_CBOR_MAJTYP_TSTR, 0, ctx->ongoing_len); ctx->state = CBPS_STRING_BODY; ctx->fmt_pos++; continue; case 'b': /* binary string (%.*b only) */ if (ctx->dotstar != 2) goto fail; ctx->vaa[ctx->vaa_pos++] = NATTYPE_INT; ctx->ongoing_done = 0; ctx->ongoing_len = (uint64_t)va_arg(args, int); /* vaa for ptr done at end of body copy */ ctx->ongoing_src = va_arg(args, uint8_t *); lws_lec_int(ctx, LWS_CBOR_MAJTYP_BSTR, 0, ctx->ongoing_len); ctx->state = CBPS_STRING_BODY; ctx->fmt_pos++; continue; case 't': /* dynamic tag */ switch (ctx->_long) { case 0: ctx->item.u.u64 = (uint64_t)va_arg(args, int); ctx->vaa[ctx->vaa_pos++] = NATTYPE_INT; break; case 1: ctx->item.u.u64 = (uint64_t)va_arg(args, long); ctx->vaa[ctx->vaa_pos++] = NATTYPE_LONG; break; case 2: ctx->item.u.u64 = (uint64_t)va_arg(args, long long); ctx->vaa[ctx->vaa_pos++] = NATTYPE_LONG_LONG; break; } ctx->item.opcode = LWS_CBOR_MAJTYP_UINT; ctx->fmt_pos++; if (ctx->fmt_pos >= fl) continue; c = fmt[ctx->fmt_pos]; if (c != '(') goto fail; goto tag_body; #if defined(LWS_WITH_CBOR_FLOAT) case 'f': /* floating point double */ dbl = va_arg(args, double); if (dbl == (float)dbl) { uint16_t hf; union { uint32_t ui; float f; } u1, u2; u1.f = (float)dbl; lws_singles2halfp(&hf, u1.ui); lws_halfp2singles(&u2.ui, hf); if ((isinf(u1.f) && isinf(u2.f)) || (isnan(u1.f) && isnan(u2.f)) || u1.f == u2.f) { lws_lec_int(ctx, LWS_CBOR_MAJTYP_FLOAT | LWS_CBOR_M7_SUBTYP_FLOAT16, 0, hf); break; } /* do it as 32-bit float */ lws_lec_int(ctx, LWS_CBOR_MAJTYP_FLOAT | LWS_CBOR_M7_SUBTYP_FLOAT32, 0, u1.ui); break; } /* do it as 64-bit double */ { union { uint64_t ui; double f; } u3; u3.f = dbl; lws_lec_int(ctx, LWS_CBOR_MAJTYP_FLOAT | LWS_CBOR_M7_SUBTYP_FLOAT64, 0, u3.ui); } break; #else case 'f': lwsl_err("%s: no FP support\n", __func__); goto fail; #endif } ctx->state = CBPS_IDLE; break; case CBPS_STRING_BODY: s = lws_ptr_diff_size_t(ctx->end, ctx->buf); if (s > (size_t)(ctx->ongoing_len - ctx->ongoing_done)) s = (size_t)(ctx->ongoing_len - ctx->ongoing_done); memcpy(ctx->buf, ctx->ongoing_src + ctx->ongoing_done, s); ctx->buf += s; ctx->ongoing_done += s; if (ctx->ongoing_len == ctx->ongoing_done) { /* vaa for ptr */ ctx->vaa[ctx->vaa_pos++] = NATTYPE_PTR; ctx->state = CBPS_IDLE; } continue; case CBPS_NUM_LIT: if (c >= '0' && c <= '9') { ctx->item.u.u64 = (ctx->item.u.u64 * 10) + (uint64_t)(c - '0'); break; } if (ctx->item.opcode == LWS_CBOR_MAJTYP_INT_NEG) ctx->item.u.i64--; if (c == '(') { /* tag qualifier */ tag_body: n = format_scan(&fmt[ctx->fmt_pos]); if (n == -2) goto fail; /* * inteterminite length not possible for tag, * take it to mean that the closure is in a * later format string */ lws_lec_int(ctx, LWS_CBOR_MAJTYP_TAG, 0, ctx->item.u.u64); stack_push: if (ctx->sp >= sizeof(ctx->stack)) return LWS_LECPCTX_RET_FAIL; ctx->stack[ctx->sp] = (uint8_t)c; ctx->indet[ctx->sp++] = (uint8_t)(n == -1); // lwsl_notice("%s: pushed %c\n", __func__, c); ctx->state = CBPS_IDLE; break; } lws_lec_int(ctx, ctx->item.opcode, 0, ctx->item.u.u64); ctx->state = CBPS_IDLE; /* deal with the terminating char fresh */ continue; case CBPS_STRING_LIT: if (!ctx->escflag && c == '\\') { ctx->escflag = 1; break; } if (!ctx->escflag && c == '\'') { ctx->state = CBPS_IDLE; break; } *ctx->buf++ = (uint8_t)c; ctx->escflag = 0; break; case CBPS_CONTYPE: if (c != 't' && c != 'b') return LWS_LECPCTX_RET_FAIL; lws_lec_int(ctx, c == 't' ? LWS_CBOR_MAJTYP_TSTR : LWS_CBOR_MAJTYP_BSTR, 1, 0); c = '<'; n = 0; goto stack_push; } ctx->fmt_pos++; } ctx->used = lws_ptr_diff_size_t(ctx->buf, ctx->start); // lwsl_notice("%s: ctx->used %d\n", __func__, (int)ctx->used); if (ctx->buf == ctx->end || ctx->scratch_len) return LWS_LECPCTX_RET_AGAIN; ctx->fmt_pos = 0; ctx->vaa_pos = 0; return LWS_LECPCTX_RET_FINISHED; fail: lwsl_notice("%s: failed\n", __func__); ctx->fmt_pos = 0; return LWS_LECPCTX_RET_FAIL; } libwebsockets-4.3.5/lib/misc/lejp.c000066400000000000000000000547251476025525100172060ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include #include static const char * const parser_errs[] = { "", "", "No opening '{'", "Expected closing '}'", "Expected '\"'", "String underrun", "Illegal unescaped control char", "Illegal escape format", "Illegal hex number", "Expected ':'", "Illegal value start", "Digit required after decimal point", "Bad number format", "Bad exponent format", "Unknown token", "Too many ']'", "Mismatched ']'", "Expected ']'", "JSON nesting limit exceeded", "Nesting tracking used up", "Number too long", "Comma or block end expected", "Unknown", "Parser callback errored (see earlier error)", }; /** * lejp_construct - prepare a struct lejp_ctx for use * * \param ctx: pointer to your struct lejp_ctx * \param callback: your user callback which will received parsed tokens * \param user: optional user data pointer untouched by lejp * \param paths: your array of name elements you are interested in * \param count_paths: LWS_ARRAY_SIZE() of @paths * * Prepares your context struct for use with lejp */ void lejp_construct(struct lejp_ctx *ctx, signed char (*callback)(struct lejp_ctx *ctx, char reason), void *user, const char * const *paths, unsigned char count_paths) { ctx->st[0].s = 0; ctx->st[0].p = 0; ctx->st[0].i = 0; ctx->st[0].b = 0; ctx->sp = 0; ctx->ipos = 0; ctx->outer_array = 0; ctx->path_match = 0; ctx->path_stride = 0; ctx->path[0] = '\0'; ctx->user = user; ctx->line = 1; ctx->pst_sp = 0; ctx->pst[0].callback = callback; ctx->pst[0].paths = paths; ctx->pst[0].count_paths = count_paths; ctx->pst[0].user = NULL; ctx->pst[0].ppos = 0; ctx->pst[0].callback(ctx, LEJPCB_CONSTRUCTED); } /** * lejp_destruct - retire a previously constructed struct lejp_ctx * * \param ctx: pointer to your struct lejp_ctx * * lejp does not perform any allocations, but since your user code might, this * provides a one-time LEJPCB_DESTRUCTED callback at destruction time where * you can clean up in your callback. */ void lejp_destruct(struct lejp_ctx *ctx) { /* no allocations... just let callback know what it happening */ if (ctx && ctx->pst[0].callback) ctx->pst[0].callback(ctx, LEJPCB_DESTRUCTED); } /** * lejp_change_callback - switch to a different callback from now on * * \param ctx: pointer to your struct lejp_ctx * \param callback: your user callback which will received parsed tokens * * This tells the old callback it was destroyed, in case you want to take any * action because that callback "lost focus", then changes to the new * callback and tells it first that it was constructed, and then started. * * Changing callback is a cheap and powerful trick to split out handlers * according to information earlier in the parse. For example you may have * a JSON pair "schema" whose value defines what can be expected for the rest * of the JSON. Rather than having one huge callback for all cases, you can * have an initial one looking for "schema" which then calls * lejp_change_callback() to a handler specific for the schema. * * Notice that afterwards, you need to construct the context again anyway to * parse another JSON object, and the callback is reset then to the main, * schema-interpreting one. The construction action is very lightweight. */ void lejp_change_callback(struct lejp_ctx *ctx, signed char (*callback)(struct lejp_ctx *ctx, char reason)) { ctx->pst[0].callback(ctx, LEJPCB_DESTRUCTED); ctx->pst[0].callback = callback; ctx->pst[0].callback(ctx, LEJPCB_CONSTRUCTED); ctx->pst[0].callback(ctx, LEJPCB_START); } void lejp_check_path_match(struct lejp_ctx *ctx) { const char *p, *q; int n; size_t s = sizeof(char *); if (ctx->path_stride) s = ctx->path_stride; /* we only need to check if a match is not active */ for (n = 0; !ctx->path_match && n < ctx->pst[ctx->pst_sp].count_paths; n++) { ctx->wildcount = 0; p = ctx->path; q = *((char **)(((char *)ctx->pst[ctx->pst_sp].paths) + ((unsigned int)n * s))); //lwsl_notice("%s: %s %s\n", __func__, p, q); while (*p && *q) { if (*q != '*') { if (*p != *q) break; p++; q++; continue; } ctx->wild[ctx->wildcount++] = (uint16_t)lws_ptr_diff_size_t(p, ctx->path); q++; /* * if * has something after it, match to . * if ends with *, eat everything. * This implies match sequences must be ordered like * x.*.* * x.* * if both options are possible */ while (*p && (*p != '.' || !*q)) p++; } if (*p || *q) continue; ctx->path_match = (uint8_t)(n + 1); ctx->path_match_len = ctx->pst[ctx->pst_sp].ppos; return; } if (!ctx->path_match) ctx->wildcount = 0; } int lejp_get_wildcard(struct lejp_ctx *ctx, int wildcard, char *dest, int len) { int n; if (wildcard >= ctx->wildcount || !len) return 0; n = ctx->wild[wildcard]; while (--len && n < ctx->pst[ctx->pst_sp].ppos && (n == ctx->wild[wildcard] || ctx->path[n] != '.')) *dest++ = ctx->path[n++]; *dest = '\0'; n++; return n - ctx->wild[wildcard]; } /** * lejp_parse - interpret some more incoming data incrementally * * \param ctx: previously constructed parsing context * \param json: char buffer with the new data to interpret * \param len: amount of data in the buffer * * Because lejp is a stream parser, it incrementally parses as new data * becomes available, maintaining all state in the context struct. So an * incomplete JSON is a normal situation, getting you a LEJP_CONTINUE * return, signalling there's no error but to call again with more data when * it comes to complete the parsing. Successful parsing completes with a * 0 or positive integer indicating how much of the last input buffer was * unused. */ static const char esc_char[] = "\"\\/bfnrt"; static const char esc_tran[] = "\"\\/\b\f\n\r\t"; static const char tokens[] = "rue alse ull "; int lejp_parse(struct lejp_ctx *ctx, const unsigned char *json, int len) { unsigned char c, n, s; int ret = LEJP_REJECT_UNKNOWN; if (!ctx->sp && !ctx->pst[ctx->pst_sp].ppos) ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_START); while (len--) { c = *json++; s = (unsigned char)ctx->st[ctx->sp].s; /* skip whitespace unless we should care */ if (c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '#') { if (c == '\n') { ctx->line++; ctx->st[ctx->sp].s &= (char)~LEJP_FLAG_WS_COMMENTLINE; } if (!(s & LEJP_FLAG_WS_KEEP)) { if (c == '#') ctx->st[ctx->sp].s |= LEJP_FLAG_WS_COMMENTLINE; continue; } } if (ctx->st[ctx->sp].s & LEJP_FLAG_WS_COMMENTLINE) continue; switch (s) { case LEJP_IDLE: if (!ctx->sp && c == '[') { /* push */ ctx->outer_array = 1; ctx->st[ctx->sp].s = LEJP_MP_ARRAY_END; c = LEJP_MP_VALUE; ctx->path[ctx->pst[ctx->pst_sp].ppos++] = '['; ctx->path[ctx->pst[ctx->pst_sp].ppos++] = ']'; ctx->path[ctx->pst[ctx->pst_sp].ppos] = '\0'; if (ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_ARRAY_START)) goto reject_callback; ctx->i[ctx->ipos++] = 0; if (ctx->ipos > LWS_ARRAY_SIZE(ctx->i)) { ret = LEJP_REJECT_MP_DELIM_ISTACK; goto reject; } goto add_stack_level; } if (c != '{') { ret = LEJP_REJECT_IDLE_NO_BRACE; goto reject; } if (ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_OBJECT_START)) goto reject_callback; ctx->st[ctx->sp].s = LEJP_MEMBERS; break; case LEJP_MEMBERS: if (c == '}') { if (ctx->sp >= 1) goto pop_level; ctx->st[ctx->sp].s = LEJP_IDLE; ret = LEJP_REJECT_MEMBERS_NO_CLOSE; goto reject; } ctx->st[ctx->sp].s = LEJP_M_P; goto redo_character; case LEJP_M_P: if (c != '\"') { ret = LEJP_REJECT_MP_NO_OPEN_QUOTE; goto reject; } /* push */ ctx->st[ctx->sp].s = LEJP_MP_DELIM; c = LEJP_MP_STRING; goto add_stack_level; case LEJP_MP_STRING: if (c == '\"') { if (!ctx->sp) { /* JSON can't end on quote */ ret = LEJP_REJECT_MP_STRING_UNDERRUN; goto reject; } if (ctx->st[ctx->sp - 1].s != LEJP_MP_DELIM) { ctx->buf[ctx->npos] = '\0'; if (ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_VAL_STR_END) < 0) goto reject_callback; } /* pop */ ctx->sp--; break; } if (c == '\\') { ctx->st[ctx->sp].s = LEJP_MP_STRING_ESC; break; } if (c < ' ') {/* "control characters" not allowed */ ret = LEJP_REJECT_MP_ILLEGAL_CTRL; goto reject; } goto emit_string_char; case LEJP_MP_STRING_ESC: if (c == 'u') { ctx->st[ctx->sp].s = LEJP_MP_STRING_ESC_U1; ctx->uni = 0; break; } for (n = 0; n < sizeof(esc_char); n++) { if (c != esc_char[n]) continue; /* found it */ c = (unsigned char)esc_tran[n]; ctx->st[ctx->sp].s = LEJP_MP_STRING; goto emit_string_char; } ret = LEJP_REJECT_MP_STRING_ESC_ILLEGAL_ESC; /* illegal escape char */ goto reject; case LEJP_MP_STRING_ESC_U1: case LEJP_MP_STRING_ESC_U2: case LEJP_MP_STRING_ESC_U3: case LEJP_MP_STRING_ESC_U4: ctx->uni = (uint16_t)(ctx->uni << 4); if (c >= '0' && c <= '9') ctx->uni |= (uint16_t)(c - '0'); else if (c >= 'a' && c <= 'f') ctx->uni |= (uint16_t)(c - 'a' + 10); else if (c >= 'A' && c <= 'F') ctx->uni |= (uint16_t)(c - 'A' + 10); else { ret = LEJP_REJECT_ILLEGAL_HEX; goto reject; } ctx->st[ctx->sp].s++; switch (s) { case LEJP_MP_STRING_ESC_U2: if (ctx->uni < 0x08) break; /* * 0x08-0xff (0x0800 - 0xffff) * emit 3-byte UTF-8 */ c = (unsigned char)(0xe0 | ((ctx->uni >> 4) & 0xf)); goto emit_string_char; case LEJP_MP_STRING_ESC_U3: if (ctx->uni >= 0x080) { /* * 0x080 - 0xfff (0x0800 - 0xffff) * middle 3-byte seq * send ....XXXXXX.. */ c = (unsigned char)(0x80 | ((ctx->uni >> 2) & 0x3f)); goto emit_string_char; } if (ctx->uni < 0x008) break; /* * 0x008 - 0x7f (0x0080 - 0x07ff) * start 2-byte seq */ c = (unsigned char)(0xc0 | (ctx->uni >> 2)); goto emit_string_char; case LEJP_MP_STRING_ESC_U4: if (ctx->uni >= 0x0080) /* end of 2 or 3-byte seq */ c = (unsigned char)(0x80 | (ctx->uni & 0x3f)); else /* literal */ c = (unsigned char)ctx->uni; ctx->st[ctx->sp].s = LEJP_MP_STRING; goto emit_string_char; default: break; } break; case LEJP_MP_DELIM: if (c != ':') { ret = LEJP_REJECT_MP_DELIM_MISSING_COLON; goto reject; } ctx->st[ctx->sp].s = LEJP_MP_VALUE; ctx->path[ctx->pst[ctx->pst_sp].ppos] = '\0'; lejp_check_path_match(ctx); if (ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_PAIR_NAME)) goto reject_callback; break; case LEJP_MP_VALUE: if (c == '-' || (c >= '0' && c <= '9')) { ctx->npos = 0; ctx->dcount = 0; ctx->f = 0; ctx->st[ctx->sp].s = LEJP_MP_VALUE_NUM_INT; goto redo_character; } switch (c) { case'\"': /* push */ ctx->st[ctx->sp].s = LEJP_MP_COMMA_OR_END; c = LEJP_MP_STRING; ctx->npos = 0; ctx->buf[0] = '\0'; if (ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_VAL_STR_START)) goto reject_callback; goto add_stack_level; case '{': /* push */ ctx->st[ctx->sp].s = LEJP_MP_COMMA_OR_END; c = LEJP_MEMBERS; lejp_check_path_match(ctx); if (ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_OBJECT_START)) goto reject_callback; ctx->path_match = 0; goto add_stack_level; case '[': /* push */ ctx->st[ctx->sp].s = LEJP_MP_ARRAY_END; c = LEJP_MP_VALUE; if (ctx->pst[ctx->pst_sp].ppos + 3u >= sizeof(ctx->path)) goto reject; ctx->path[ctx->pst[ctx->pst_sp].ppos++] = '['; ctx->path[ctx->pst[ctx->pst_sp].ppos++] = ']'; ctx->path[ctx->pst[ctx->pst_sp].ppos] = '\0'; if (ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_ARRAY_START)) goto reject_callback; ctx->i[ctx->ipos++] = 0; if (ctx->ipos > LWS_ARRAY_SIZE(ctx->i)) { ret = LEJP_REJECT_MP_DELIM_ISTACK; goto reject; } goto add_stack_level; case ']': /* pop */ if (!ctx->sp) { /* JSON can't end on ] */ ret = LEJP_REJECT_MP_C_OR_E_UNDERF; goto reject; } ctx->sp--; if (ctx->st[ctx->sp].s != LEJP_MP_ARRAY_END) { ret = LEJP_REJECT_MP_C_OR_E_NOTARRAY; goto reject; } /* drop the path [n] bit */ if (ctx->sp) { ctx->pst[ctx->pst_sp].ppos = (unsigned char) ctx->st[ctx->sp - 1].p; ctx->ipos = (unsigned char)ctx->st[ctx->sp - 1].i; } ctx->path[ctx->pst[ctx->pst_sp].ppos] = '\0'; if (ctx->path_match && ctx->pst[ctx->pst_sp].ppos <= ctx->path_match_len) /* * we shrank the path to be * smaller than the matching point */ ctx->path_match = 0; if (ctx->outer_array && !ctx->sp) { /* ended on ] */ n = LEJPCB_ARRAY_END; goto completed; } goto array_end; case 't': /* true */ ctx->uni = 0; ctx->st[ctx->sp].s = LEJP_MP_VALUE_TOK; break; case 'f': ctx->uni = 4; ctx->st[ctx->sp].s = LEJP_MP_VALUE_TOK; break; case 'n': ctx->uni = 4 + 5; ctx->st[ctx->sp].s = LEJP_MP_VALUE_TOK; break; default: ret = LEJP_REJECT_MP_DELIM_BAD_VALUE_START; goto reject; } break; case LEJP_MP_VALUE_NUM_INT: if (!ctx->npos && c == '-') { ctx->f |= LEJP_SEEN_MINUS; goto append_npos; } if (ctx->dcount < 20 && c >= '0' && c <= '9') { if (ctx->f & LEJP_SEEN_POINT) ctx->f |= LEJP_SEEN_POST_POINT; ctx->dcount++; goto append_npos; } if (c == '.') { if (!ctx->dcount || (ctx->f & LEJP_SEEN_POINT)) { ret = LEJP_REJECT_MP_VAL_NUM_FORMAT; goto reject; } ctx->f |= LEJP_SEEN_POINT; goto append_npos; } /* * before exponent, if we had . we must have had at * least one more digit */ if ((ctx->f & (LEJP_SEEN_POINT | LEJP_SEEN_POST_POINT)) == LEJP_SEEN_POINT) { ret = LEJP_REJECT_MP_VAL_NUM_INT_NO_FRAC; goto reject; } if (c == 'e' || c == 'E') { if (ctx->f & LEJP_SEEN_EXP) { ret = LEJP_REJECT_MP_VAL_NUM_FORMAT; goto reject; } ctx->f |= LEJP_SEEN_EXP; ctx->st[ctx->sp].s = LEJP_MP_VALUE_NUM_EXP; goto append_npos; } /* if none of the above, did we even have a number? */ if (!ctx->dcount) { ret = LEJP_REJECT_MP_VAL_NUM_FORMAT; goto reject; } ctx->buf[ctx->npos] = '\0'; if (ctx->f & (LEJP_SEEN_POINT | LEJP_SEEN_EXP)) { /* 0.001 or 1E-3 are both floats, take 1E3 as float too */ if (ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_VAL_NUM_FLOAT)) goto reject_callback; } else { if (ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_VAL_NUM_INT)) goto reject_callback; } /* then this is the post-number character, loop */ ctx->st[ctx->sp].s = LEJP_MP_COMMA_OR_END; goto redo_character; case LEJP_MP_VALUE_NUM_EXP: ctx->st[ctx->sp].s = LEJP_MP_VALUE_NUM_INT; if (c >= '0' && c <= '9') goto redo_character; if (c == '+' || c == '-') goto append_npos; ret = LEJP_REJECT_MP_VAL_NUM_EXP_BAD_EXP; goto reject; case LEJP_MP_VALUE_TOK: /* true, false, null */ if (c != tokens[ctx->uni]) { ret = LEJP_REJECT_MP_VAL_TOK_UNKNOWN; goto reject; } ctx->uni++; if (tokens[ctx->uni] != ' ') break; switch (ctx->uni) { case 3: ctx->buf[0] = '1'; ctx->buf[1] = '\0'; if (ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_VAL_TRUE)) goto reject_callback; break; case 8: ctx->buf[0] = '0'; ctx->buf[1] = '\0'; if (ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_VAL_FALSE)) goto reject_callback; break; case 12: ctx->buf[0] = '\0'; if (ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_VAL_NULL)) goto reject_callback; break; } ctx->st[ctx->sp].s = LEJP_MP_COMMA_OR_END; break; case LEJP_MP_COMMA_OR_END: ctx->path[ctx->pst[ctx->pst_sp].ppos] = '\0'; if (c == ',') { /* increment this stack level's index */ ctx->st[ctx->sp].s = LEJP_M_P; if (!ctx->sp) { ctx->pst[ctx->pst_sp].ppos = 0; /* * since we came back to root level, * no path can still match */ ctx->path_match = 0; break; } ctx->pst[ctx->pst_sp].ppos = (unsigned char)ctx->st[ctx->sp - 1].p; ctx->path[ctx->pst[ctx->pst_sp].ppos] = '\0'; if (ctx->path_match && ctx->pst[ctx->pst_sp].ppos <= ctx->path_match_len) /* * we shrank the path to be * smaller than the matching point */ ctx->path_match = 0; if (ctx->st[ctx->sp - 1].s != LEJP_MP_ARRAY_END) break; /* top level is definitely an array... */ if (ctx->ipos) ctx->i[ctx->ipos - 1]++; ctx->st[ctx->sp].s = LEJP_MP_VALUE; break; } if (c == ']') { if (!ctx->sp) { ret = LEJP_REJECT_MP_C_OR_E_UNDERF; goto reject; } /* pop */ ctx->sp--; if (ctx->st[ctx->sp].s != LEJP_MP_ARRAY_END) { ret = LEJP_REJECT_MP_C_OR_E_NOTARRAY; goto reject; } /* drop the path [n] bit */ if (ctx->sp) { ctx->pst[ctx->pst_sp].ppos = (unsigned char) ctx->st[ctx->sp - 1].p; ctx->ipos = (unsigned char)ctx->st[ctx->sp - 1].i; } ctx->path[ctx->pst[ctx->pst_sp].ppos] = '\0'; if (ctx->path_match && ctx->pst[ctx->pst_sp].ppos <= ctx->path_match_len) /* * we shrank the path to be * smaller than the matching point */ ctx->path_match = 0; if (ctx->outer_array && !ctx->sp) { /* ended on ] */ n = LEJPCB_ARRAY_END; goto completed; } /* do LEJP_MP_ARRAY_END processing */ goto redo_character; } if (c != '}') { ret = LEJP_REJECT_MP_C_OR_E_NEITHER; goto reject; } if (!ctx->sp) { n = LEJPCB_OBJECT_END; completed: lejp_check_path_match(ctx); if (ctx->pst[ctx->pst_sp].callback(ctx, (char)n) || ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_COMPLETE)) goto reject_callback; /* done, return unused amount */ return len; } /* pop */ pop_level: ctx->sp--; if (ctx->sp) { ctx->pst[ctx->pst_sp].ppos = (unsigned char)ctx->st[ctx->sp].p; ctx->ipos = (unsigned char)ctx->st[ctx->sp].i; } ctx->path[ctx->pst[ctx->pst_sp].ppos] = '\0'; if (ctx->path_match && ctx->pst[ctx->pst_sp].ppos <= ctx->path_match_len) /* * we shrank the path to be * smaller than the matching point */ ctx->path_match = 0; lejp_check_path_match(ctx); if (ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_OBJECT_END)) goto reject_callback; break; case LEJP_MP_ARRAY_END: array_end: ctx->path[ctx->pst[ctx->pst_sp].ppos] = '\0'; if (c == ',') { /* increment this stack level's index */ if (ctx->ipos) ctx->i[ctx->ipos - 1]++; ctx->st[ctx->sp].s = LEJP_MP_VALUE; if (ctx->sp) ctx->pst[ctx->pst_sp].ppos = (unsigned char) ctx->st[ctx->sp - 1].p; ctx->path[ctx->pst[ctx->pst_sp].ppos] = '\0'; break; } if (c != ']') { ret = LEJP_REJECT_MP_ARRAY_END_MISSING; goto reject; } ctx->st[ctx->sp].s = LEJP_MP_COMMA_OR_END; ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_ARRAY_END); break; } continue; emit_string_char: if (!ctx->sp || ctx->st[ctx->sp - 1].s != LEJP_MP_DELIM) { /* assemble the string value into chunks */ ctx->buf[ctx->npos++] = (char)c; if (ctx->npos == sizeof(ctx->buf) - 1) { if (ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_VAL_STR_CHUNK)) goto reject_callback; ctx->npos = 0; } continue; } /* name part of name:value pair */ ctx->path[ctx->pst[ctx->pst_sp].ppos++] = (char)c; continue; add_stack_level: /* push on to the object stack */ if (ctx->pst[ctx->pst_sp].ppos && ctx->st[ctx->sp].s != LEJP_MP_COMMA_OR_END && ctx->st[ctx->sp].s != LEJP_MP_ARRAY_END) ctx->path[ctx->pst[ctx->pst_sp].ppos++] = '.'; ctx->st[ctx->sp].p = (char)ctx->pst[ctx->pst_sp].ppos; ctx->st[ctx->sp].i = (char)ctx->ipos; if (++ctx->sp == LWS_ARRAY_SIZE(ctx->st)) { ret = LEJP_REJECT_STACK_OVERFLOW; goto reject; } ctx->path[ctx->pst[ctx->pst_sp].ppos] = '\0'; ctx->st[ctx->sp].s = (char)c; ctx->st[ctx->sp].b = 0; continue; append_npos: if (ctx->npos >= sizeof(ctx->buf)) { ret = LEJP_REJECT_NUM_TOO_LONG; goto reject; } ctx->buf[ctx->npos++] = (char)c; continue; redo_character: json--; len++; } return LEJP_CONTINUE; reject_callback: ret = LEJP_REJECT_CALLBACK; reject: ctx->pst[ctx->pst_sp].callback(ctx, LEJPCB_FAILED); return ret; } int lejp_parser_push(struct lejp_ctx *ctx, void *user, const char * const *paths, unsigned char paths_count, lejp_callback lejp_cb) { struct _lejp_parsing_stack *p; if (ctx->pst_sp + 1 == LEJP_MAX_PARSING_STACK_DEPTH) return -1; lejp_check_path_match(ctx); ctx->pst[ctx->pst_sp].path_match = ctx->path_match; ctx->pst_sp++; p = &ctx->pst[ctx->pst_sp]; p->user = user; p->callback = lejp_cb; p->paths = paths; p->count_paths = paths_count; p->ppos = 0; ctx->path_match = 0; lejp_check_path_match(ctx); lwsl_debug("%s: pushed parser stack to %d (path %s)\n", __func__, ctx->pst_sp, ctx->path); return 0; } int lejp_parser_pop(struct lejp_ctx *ctx) { if (!ctx->pst_sp) return -1; ctx->pst_sp--; lwsl_debug("%s: popped parser stack to %d\n", __func__, ctx->pst_sp); ctx->path_match = 0; /* force it to check */ lejp_check_path_match(ctx); return 0; } const char * lejp_error_to_string(int e) { if (e > 0) e = 0; else e = -e; if (e >= (int)LWS_ARRAY_SIZE(parser_errs)) return "Unknown error"; return parser_errs[e]; } libwebsockets-4.3.5/lib/misc/lws-ring.c000066400000000000000000000165651476025525100200160ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" struct lws_ring * lws_ring_create(size_t element_len, size_t count, void (*destroy_element)(void *)) { struct lws_ring *ring = lws_malloc(sizeof(*ring), "ring create"); if (!ring) return NULL; ring->buflen = (uint32_t)(count * element_len); ring->element_len = (uint32_t)element_len; ring->head = 0; ring->oldest_tail = 0; ring->destroy_element = destroy_element; ring->buf = lws_malloc(ring->buflen, "ring buf"); if (!ring->buf) { lws_free(ring); return NULL; } return ring; } void lws_ring_destroy(struct lws_ring *ring) { if (ring->destroy_element) while (ring->oldest_tail != ring->head) { ring->destroy_element((uint8_t *)ring->buf + ring->oldest_tail); ring->oldest_tail = (ring->oldest_tail + ring->element_len) % ring->buflen; } if (ring->buf) lws_free_set_NULL(ring->buf); lws_free(ring); } size_t lws_ring_get_count_free_elements(struct lws_ring *ring) { int f; /* * possible ringbuf patterns * * h == t * |--------t***h---| * |**h-----------t*| * |t**************h| * |*****ht*********| */ if (ring->head == ring->oldest_tail) f = (int)(ring->buflen - ring->element_len); else if (ring->head < ring->oldest_tail) f = (int)((ring->oldest_tail - ring->head) - ring->element_len); else f = (int)((ring->buflen - ring->head) + ring->oldest_tail - ring->element_len); if (f < 2) return 0; return (unsigned int)f / ring->element_len; } size_t lws_ring_get_count_waiting_elements(struct lws_ring *ring, uint32_t *tail) { int f; if (!tail) tail = &ring->oldest_tail; /* * possible ringbuf patterns * * h == t * |--------t***h---| * |**h-----------t*| * |t**************h| * |*****ht*********| */ if (ring->head == *tail) f = 0; else if (ring->head > *tail) f = (int)(ring->head - *tail); else f = (int)((ring->buflen - *tail) + ring->head); return (unsigned int)f / ring->element_len; } int lws_ring_next_linear_insert_range(struct lws_ring *ring, void **start, size_t *bytes) { int n; /* n is how many bytes the whole fifo can take */ n = (int)(lws_ring_get_count_free_elements(ring) * ring->element_len); if (!n) return 1; if (ring->head + (unsigned int)n > ring->buflen) { *start = (void *)(((uint8_t *)ring->buf) + ring->head); *bytes = ring->buflen - ring->head; return 0; } *start = (void *)(((uint8_t *)ring->buf) + ring->head); *bytes = (unsigned int)n; return 0; } void lws_ring_bump_head(struct lws_ring *ring, size_t bytes) { ring->head = (ring->head + (uint32_t)bytes) % ring->buflen; } size_t lws_ring_insert(struct lws_ring *ring, const void *src, size_t max_count) { const uint8_t *osrc = src; size_t m; int n; /* n is how many bytes the whole fifo can take */ n = (int)(lws_ring_get_count_free_elements(ring) * ring->element_len); /* restrict n to how much we want to insert */ if ((uint32_t)n > max_count * ring->element_len) n = (int)(max_count * ring->element_len); /* * n is legal to insert, but as an optimization we can cut the * insert into one or two memcpys, depending on if it wraps */ if (ring->head + (unsigned int)n > ring->buflen) { /* * He does wrap. The first memcpy should take us up to * the end of the buffer */ m = ring->buflen - ring->head; memcpy(((uint8_t *)ring->buf) + ring->head, src, m); /* we know it will wrap exactly back to zero */ ring->head = 0; /* adapt the second memcpy for what we already did */ src = ((uint8_t *)src) + m; n = n - (int)m; } memcpy(((uint8_t *)ring->buf) + ring->head, src, (size_t)n); ring->head = (ring->head + (unsigned int)n) % ring->buflen; return (unsigned long)(((uint8_t *)src + (unsigned int)n) - osrc) / ring->element_len; } size_t lws_ring_consume(struct lws_ring *ring, uint32_t *tail, void *dest, size_t max_count) { uint8_t *odest = dest; void *orig_tail = tail; uint32_t fake_tail; int m, n; if (!tail) { fake_tail = ring->oldest_tail; tail = &fake_tail; } /* n is how many bytes the whole fifo has for us */ n = (int)(lws_ring_get_count_waiting_elements(ring, tail) * ring->element_len); /* restrict n to how much we want to insert */ if ((size_t)n > max_count * ring->element_len) n = (int)(max_count * ring->element_len); if (!dest) { *tail = ((*tail) + (unsigned int)n) % ring->buflen; if (!orig_tail) /* single tail */ lws_ring_update_oldest_tail(ring, *tail); return (unsigned int)n / ring->element_len; } if (*tail + (unsigned int)n > ring->buflen) { /* * He does wrap. The first memcpy should take us up to * the end of the buffer */ m = (int32_t)(ring->buflen - *tail); memcpy(dest, ((uint8_t *)ring->buf) + *tail, (size_t)m); /* we know it will wrap exactly back to zero */ *tail = 0; /* adapt the second memcpy for what we already did */ dest = ((uint8_t *)dest) + m; n -= m; } memcpy(dest, ((uint8_t *)ring->buf) + *tail, (size_t)n); *tail = ((*tail) + (unsigned int)n) % ring->buflen; if (!orig_tail) /* single tail */ lws_ring_update_oldest_tail(ring, *tail); return (unsigned int)(((uint8_t *)dest + n) - odest) / (unsigned int)ring->element_len; } const void * lws_ring_get_element(struct lws_ring *ring, uint32_t *tail) { if (!tail) tail = &ring->oldest_tail; if (*tail == ring->head) return NULL; return ((uint8_t *)ring->buf) + *tail; } void lws_ring_update_oldest_tail(struct lws_ring *ring, uint32_t tail) { if (!ring->destroy_element) { ring->oldest_tail = tail; return; } while (ring->oldest_tail != tail) { ring->destroy_element((uint8_t *)ring->buf + ring->oldest_tail); ring->oldest_tail = (ring->oldest_tail + ring->element_len) % ring->buflen; } } uint32_t lws_ring_get_oldest_tail(struct lws_ring *ring) { return ring->oldest_tail; } void lws_ring_dump(struct lws_ring *ring, uint32_t *tail) { if (tail == NULL) tail = &ring->oldest_tail; lwsl_notice("ring %p: buflen %u, elem_len %u, head %u, oldest_tail %u\n" " free_elems: %u; for tail %u, waiting elements: %u\n", ring, (int)ring->buflen, (int)ring->element_len, (int)ring->head, (int)ring->oldest_tail, (int)lws_ring_get_count_free_elements(ring), (int)*tail, (int)lws_ring_get_count_waiting_elements(ring, tail)); } libwebsockets-4.3.5/lib/misc/lws-struct-lejp.c000066400000000000000000000467361476025525100213360ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include #include #include signed char lws_struct_schema_only_lejp_cb(struct lejp_ctx *ctx, char reason) { lws_struct_args_t *a = (lws_struct_args_t *)ctx->user; const lws_struct_map_t *map = a->map_st[ctx->pst_sp]; size_t n = a->map_entries_st[ctx->pst_sp], imp = 0; lejp_callback cb = map->lejp_cb; if (reason == LEJPCB_PAIR_NAME && strcmp(ctx->path, "schema")) { /* * If not "schema", the schema is implicit rather than * explicitly given, ie, he just goes ahead and starts using * member names that imply a particular type. For example, he * may have an implicit type normally, and a different one for * exceptions that just starts using "error-message" or whatever * and we can understand that's the exception type now. * * Let's look into each of the maps in the top level array * and match the first one that mentions the name he gave here, * and bind to the associated type / create a toplevel object * of that type. */ while (n--) { int m, child_members = (int)map->child_map_size; for (m = 0; m < child_members; m++) { const lws_struct_map_t *child = &map->child_map[m]; if (!strcmp(ctx->path, child->colname)) { /* * We matched on him... map is pointing * to the right toplevel type, let's * just pick up from there as if we * matched the explicit schema name... */ ctx->path_match = 1; imp = 1; goto matched; } } map++; } lwsl_notice("%s: can't match implicit schema %s\n", __func__, ctx->path); return -1; } if (reason != LEJPCB_VAL_STR_END || ctx->path_match != 1) return 0; /* If "schema", then look for a matching name in the map array */ while (n--) { if (strcmp(ctx->buf, map->colname)) { map++; continue; } matched: a->dest = lwsac_use_zero(&a->ac, map->aux, a->ac_block_size); if (!a->dest) { lwsl_err("%s: OOT\n", __func__); return 1; } a->dest_len = map->aux; if (!ctx->pst_sp) a->top_schema_index = (int)(map - a->map_st[ctx->pst_sp]); if (!cb) cb = lws_struct_default_lejp_cb; lejp_parser_push(ctx, a->dest, &map->child_map[0].colname, (uint8_t)map->child_map_size, cb); a->map_st[ctx->pst_sp] = map->child_map; a->map_entries_st[ctx->pst_sp] = map->child_map_size; // lwsl_notice("%s: child map ofs_clist %d\n", __func__, // (int)a->map_st[ctx->pst_sp]->ofs_clist); if (imp) return cb(ctx, reason); return 0; } lwsl_notice("%s: unknown schema %s\n", __func__, ctx->buf); return 1; } static int lws_struct_lejp_push(struct lejp_ctx *ctx, lws_struct_args_t *args, const lws_struct_map_t *map, uint8_t *ch) { lejp_callback cb = map->lejp_cb; if (!cb) cb = lws_struct_default_lejp_cb; lejp_parser_push(ctx, ch, (const char * const*)map->child_map, (uint8_t)map->child_map_size, cb); args->map_st[ctx->pst_sp] = map->child_map; args->map_entries_st[ctx->pst_sp] = map->child_map_size; return 0; } signed char lws_struct_default_lejp_cb(struct lejp_ctx *ctx, char reason) { lws_struct_args_t *args = (lws_struct_args_t *)ctx->user; const lws_struct_map_t *map, *pmap = NULL; uint8_t *ch; size_t n; char *u; if (reason == LEJPCB_ARRAY_END) { lejp_parser_pop(ctx); return 0; } if (reason == LEJPCB_ARRAY_START) { if (!ctx->path_match) lwsl_err("%s: ARRAY_START with ctx->path_match 0\n", __func__); map = &args->map_st[ctx->pst_sp][ctx->path_match - 1]; if (map->type == LSMT_LIST) lws_struct_lejp_push(ctx, args, map, NULL); return 0; } if (ctx->pst_sp) pmap = &args->map_st[ctx->pst_sp - 1] [ctx->pst[ctx->pst_sp - 1].path_match - 1]; if (reason == LEJPCB_OBJECT_START) { if (!ctx->path_match) { ctx->pst[ctx->pst_sp].user = NULL; return 0; } map = &args->map_st[ctx->pst_sp][ctx->path_match - 1]; n = args->map_entries_st[ctx->pst_sp]; if (map->type != LSMT_CHILD_PTR && map->type != LSMT_LIST) { ctx->pst[ctx->pst_sp].user = NULL; return 0; } pmap = map; lws_struct_lejp_push(ctx, args, map, NULL); } if (reason == LEJPCB_OBJECT_END && pmap) { if (pmap->type == LSMT_CHILD_PTR) lejp_parser_pop(ctx); if (ctx->pst_sp) pmap = &args->map_st[ctx->pst_sp - 1] [ctx->pst[ctx->pst_sp - 1].path_match - 1]; } if (!ctx->path_match) return 0; map = &args->map_st[ctx->pst_sp][ctx->path_match - 1]; n = args->map_entries_st[ctx->pst_sp]; if (map->type == LSMT_SCHEMA) { while (n--) { if (strncmp(map->colname, ctx->buf, ctx->npos)) { map++; continue; } /* instantiate the correct toplevel object */ ch = lwsac_use_zero(&args->ac, map->aux, args->ac_block_size); if (!ch) { lwsl_err("OOM\n"); return 1; } lws_struct_lejp_push(ctx, args, map, ch); return 0; } lwsl_notice("%s: unknown schema %.*s, tried %d\n", __func__, ctx->npos, ctx->buf, (int)args->map_entries_st[ctx->pst_sp]); goto cleanup; } if (!ctx->pst[ctx->pst_sp].user) { struct lws_dll2_owner *owner; struct lws_dll2 *list; /* create list item object if none already */ if (!ctx->path_match || !pmap) return 0; map = &args->map_st[ctx->pst_sp - 1][ctx->path_match - 1]; n = args->map_entries_st[ctx->pst_sp - 1]; if (!ctx->pst_sp) return 0; if (pmap->type != LSMT_LIST && pmap->type != LSMT_CHILD_PTR) return 1; /* we need to create a child or array item object */ owner = (struct lws_dll2_owner *) (((char *)ctx->pst[ctx->pst_sp - 1].user) + pmap->ofs); assert(pmap->aux); /* instantiate one of the child objects */ ctx->pst[ctx->pst_sp].user = lwsac_use_zero(&args->ac, pmap->aux, args->ac_block_size); if (!ctx->pst[ctx->pst_sp].user) { lwsl_err("OOM\n"); return 1; } lwsl_info("%s: created '%s' object size %d\n", __func__, pmap->colname, (int)pmap->aux); switch (pmap->type) { case LSMT_LIST: list = (struct lws_dll2 *) ((char *)ctx->pst[ctx->pst_sp].user + pmap->ofs_clist); lws_dll2_add_tail(list, owner); break; case LSMT_CHILD_PTR: *((void **)owner) = ctx->pst[ctx->pst_sp].user; break; default: assert(0); break; } } if (!ctx->path_match) return 0; if (reason == LEJPCB_VAL_STR_CHUNK) { lejp_collation_t *coll; /* don't cache stuff we are going to ignore */ if (map->type == LSMT_STRING_CHAR_ARRAY && args->chunks_length >= map->aux) return 0; coll = lwsac_use_zero(&args->ac_chunks, sizeof(*coll), sizeof(*coll)); if (!coll) { lwsl_err("%s: OOT\n", __func__); return 1; } coll->chunks.prev = NULL; coll->chunks.next = NULL; coll->chunks.owner = NULL; coll->len = ctx->npos; lws_dll2_add_tail(&coll->chunks, &args->chunks_owner); memcpy(coll->buf, ctx->buf, ctx->npos); args->chunks_length += ctx->npos; return 0; } if (reason != LEJPCB_VAL_STR_END && reason != LEJPCB_VAL_NUM_INT && reason != LEJPCB_VAL_TRUE && reason != LEJPCB_VAL_FALSE) return 0; /* this is the end of the string */ if (ctx->pst[ctx->pst_sp].user && pmap && pmap->type == LSMT_CHILD_PTR) { void **pp = (void **) (((char *)ctx->pst[ctx->pst_sp - 1].user) + pmap->ofs); *pp = ctx->pst[ctx->pst_sp].user; } u = (char *)ctx->pst[ctx->pst_sp].user; if (!u) u = (char *)ctx->pst[ctx->pst_sp - 1].user; { char **pp, *s; size_t lim, b; long long li; switch (map->type) { case LSMT_SIGNED: if (map->aux == sizeof(signed char)) { signed char *pc; pc = (signed char *)(u + map->ofs); *pc = (signed char)atoi(ctx->buf); break; } if (map->aux == sizeof(int)) { int *pi; pi = (int *)(u + map->ofs); *pi = atoi(ctx->buf); break; } if (map->aux == sizeof(long)) { long *pl; pl = (long *)(u + map->ofs); *pl = atol(ctx->buf); } else { long long *pll; pll = (long long *)(u + map->ofs); *pll = atoll(ctx->buf); } break; case LSMT_UNSIGNED: if (map->aux == sizeof(unsigned char)) { unsigned char *pc; pc = (unsigned char *)(u + map->ofs); *pc = (unsigned char)(unsigned int)atoi(ctx->buf); break; } if (map->aux == sizeof(unsigned int)) { unsigned int *pi; pi = (unsigned int *)(u + map->ofs); *pi = (unsigned int)atoi(ctx->buf); break; } if (map->aux == sizeof(unsigned long)) { unsigned long *pl; pl = (unsigned long *)(u + map->ofs); *pl = (unsigned long)atol(ctx->buf); } else { unsigned long long *pll; pll = (unsigned long long *)(u + map->ofs); *pll = (unsigned long long)atoll(ctx->buf); } break; case LSMT_BOOLEAN: li = reason == LEJPCB_VAL_TRUE; if (map->aux == sizeof(char)) { char *pc; pc = (char *)(u + map->ofs); *pc = (char)li; break; } if (map->aux == sizeof(int)) { int *pi; pi = (int *)(u + map->ofs); *pi = (int)li; } else { uint64_t *p64; p64 = (uint64_t *)(u + map->ofs); *p64 = (uint64_t)li; } break; case LSMT_STRING_CHAR_ARRAY: s = (char *)(u + map->ofs); lim = map->aux - 1; goto chunk_copy; case LSMT_STRING_PTR: pp = (char **)(u + map->ofs); lim = args->chunks_length + ctx->npos; s = lwsac_use(&args->ac, lim + 1, args->ac_block_size); if (!s) goto cleanup; *pp = s; chunk_copy: s[lim] = '\0'; /* copy up to lim from the string chunk ac first */ lws_start_foreach_dll_safe(struct lws_dll2 *, p, p1, args->chunks_owner.head) { lejp_collation_t *coll = (lejp_collation_t *)p; if (lim) { b = (unsigned int)coll->len; if (b > lim) b = lim; memcpy(s, coll->buf, b); s += b; lim -= b; } } lws_end_foreach_dll_safe(p, p1); lwsac_free(&args->ac_chunks); args->chunks_owner.count = 0; args->chunks_owner.head = NULL; args->chunks_owner.tail = NULL; if (lim) { b = ctx->npos; if (b > lim) b = lim; memcpy(s, ctx->buf, b); s[b] = '\0'; } break; default: break; } } if (args->cb) args->cb(args->dest, args->cb_arg); return 0; cleanup: lwsl_notice("%s: cleanup\n", __func__); lwsac_free(&args->ac_chunks); args->chunks_owner.count = 0; args->chunks_owner.head = NULL; args->chunks_owner.tail = NULL; return 1; } static const char * schema[] = { "schema" }; int lws_struct_json_init_parse(struct lejp_ctx *ctx, lejp_callback cb, void *user) { /* * By default we are looking to match on a toplevel member called * "schema", against an LSM_SCHEMA */ if (!cb) cb = lws_struct_schema_only_lejp_cb; lejp_construct(ctx, cb, user, schema, 1); ctx->path_stride = sizeof(lws_struct_map_t); return 0; } lws_struct_serialize_t * lws_struct_json_serialize_create(const lws_struct_map_t *map, size_t map_entries, int flags, const void *ptoplevel) { lws_struct_serialize_t *js = lws_zalloc(sizeof(*js), __func__); lws_struct_serialize_st_t *j; if (!js) return NULL; js->flags = flags; j = &js->st[0]; j->map = map; j->map_entries = map_entries; j->obj = ptoplevel; j->idt = 0; return js; } void lws_struct_json_serialize_destroy(lws_struct_serialize_t **pjs) { if (!*pjs) return; lws_free(*pjs); *pjs = NULL; } static void lws_struct_pretty(lws_struct_serialize_t *js, uint8_t **pbuf, size_t *plen) { if (js->flags & LSSERJ_FLAG_PRETTY) { int n; *(*pbuf)++ = '\n'; (*plen)--; for (n = 0; n < js->st[js->sp].idt; n++) { *(*pbuf)++ = ' '; (*plen)--; } } } lws_struct_json_serialize_result_t lws_struct_json_serialize(lws_struct_serialize_t *js, uint8_t *buf, size_t len, size_t *written) { lws_struct_serialize_st_t *j; const lws_struct_map_t *map; size_t budget = 0, olen = len, m; struct lws_dll2_owner *o; unsigned long long uli; const char *q; const void *p; char dbuf[72]; long long li; int n, used; *written = 0; *buf = '\0'; while (len > sizeof(dbuf) + 20) { j = &js->st[js->sp]; map = &j->map[j->map_entry]; q = j->obj + map->ofs; /* early check if the entry should be elided */ switch (map->type) { case LSMT_STRING_CHAR_ARRAY: if (!q) goto up; break; case LSMT_STRING_PTR: case LSMT_CHILD_PTR: q = (char *)*(char **)q; if (!q) goto up; break; case LSMT_LIST: o = (struct lws_dll2_owner *)q; p = j->dllpos = lws_dll2_get_head(o); if (!p) goto up; break; case LSMT_BLOB_PTR: goto up; default: break; } if (j->subsequent) { *buf++ = ','; len--; lws_struct_pretty(js, &buf, &len); } j->subsequent = 1; if (map->type != LSMT_SCHEMA && !js->offset) { n = lws_snprintf((char *)buf, len, "\"%s\":", map->colname); buf += n; len = len - (unsigned int)n; if (js->flags & LSSERJ_FLAG_PRETTY) { *buf++ = ' '; len--; } } switch (map->type) { case LSMT_BOOLEAN: case LSMT_UNSIGNED: if (map->aux == sizeof(char)) { uli = *(unsigned char *)q; } else { if (map->aux == sizeof(int)) { uli = *(unsigned int *)q; } else { if (map->aux == sizeof(long)) uli = *(unsigned long *)q; else uli = *(unsigned long long *)q; } } q = dbuf; if (map->type == LSMT_BOOLEAN) { budget = (unsigned int)lws_snprintf(dbuf, sizeof(dbuf), "%s", uli ? "true" : "false"); } else budget = (unsigned int)lws_snprintf(dbuf, sizeof(dbuf), "%llu", uli); break; case LSMT_SIGNED: if (map->aux == sizeof(signed char)) { li = (long long)*(signed char *)q; } else { if (map->aux == sizeof(int)) { li = (long long)*(int *)q; } else { if (map->aux == sizeof(long)) li = (long long)*(long *)q; else li = *(long long *)q; } } q = dbuf; budget = (unsigned int)lws_snprintf(dbuf, sizeof(dbuf), "%lld", li); break; case LSMT_STRING_CHAR_ARRAY: case LSMT_STRING_PTR: if (!js->offset) { *buf++ = '\"'; len--; } break; case LSMT_LIST: *buf++ = '['; len--; if (js->sp + 1 == LEJP_MAX_PARSING_STACK_DEPTH) return LSJS_RESULT_ERROR; /* add a stack level to handle parsing array members */ o = (struct lws_dll2_owner *)q; p = j->dllpos = lws_dll2_get_head(o); if (!j->dllpos) { *buf++ = ']'; len--; goto up; } n = j->idt; j = &js->st[++js->sp]; j->idt = (char)(n + 2); j->map = map->child_map; j->map_entries = map->child_map_size; j->size = map->aux; j->subsequent = 0; j->map_entry = 0; lws_struct_pretty(js, &buf, &len); *buf++ = '{'; len--; lws_struct_pretty(js, &buf, &len); if (p) j->obj = ((char *)p) - j->map->ofs_clist; else j->obj = NULL; continue; case LSMT_CHILD_PTR: if (js->sp + 1 == LEJP_MAX_PARSING_STACK_DEPTH) return LSJS_RESULT_ERROR; /* add a stack level to handle parsing child members */ n = j->idt; j = &js->st[++js->sp]; j->idt = (char)(n + 2); j->map = map->child_map; j->map_entries = map->child_map_size; j->size = map->aux; j->subsequent = 0; j->map_entry = 0; *buf++ = '{'; len--; lws_struct_pretty(js, &buf, &len); j->obj = q; continue; case LSMT_SCHEMA: q = dbuf; *buf++ = '{'; len--; j = &js->st[++js->sp]; lws_struct_pretty(js, &buf, &len); if (!(js->flags & LSSERJ_FLAG_OMIT_SCHEMA)) { budget = (unsigned int)lws_snprintf(dbuf, 15, "\"schema\":"); if (js->flags & LSSERJ_FLAG_PRETTY) dbuf[budget++] = ' '; budget += (unsigned int)lws_snprintf(dbuf + budget, sizeof(dbuf) - budget, "\"%s\"", map->colname); } if (js->sp != 1) return LSJS_RESULT_ERROR; j->map = map->child_map; j->map_entries = map->child_map_size; j->size = map->aux; j->subsequent = 0; j->map_entry = 0; j->obj = js->st[js->sp - 1].obj; j->dllpos = NULL; if (!(js->flags & LSSERJ_FLAG_OMIT_SCHEMA)) /* we're actually at the same level */ j->subsequent = 1; j->idt = 1; break; default: break; } switch (map->type) { case LSMT_STRING_CHAR_ARRAY: case LSMT_STRING_PTR: /* * This is a bit tricky... we have to escape the string * which may 6x its length depending on what the * contents are. * * We offset the unescaped string starting point first */ q += js->offset; budget = strlen(q); /* how much unescaped is left */ /* * This is going to escape as much as it can fit, and * let us know the amount of input that was consumed * in "used". */ lws_json_purify((char *)buf, q, (int)len, &used); m = strlen((const char *)buf); buf += m; len -= m; js->remaining = budget - (unsigned int)used; js->offset = (unsigned int)used; if (!js->remaining) js->offset = 0; break; default: q += js->offset; budget -= js->remaining; if (budget > len) { js->remaining = budget - len; js->offset = len; budget = len; } else { js->remaining = 0; js->offset = 0; } memcpy(buf, q, budget); buf += budget; *buf = '\0'; len -= budget; break; } switch (map->type) { case LSMT_STRING_CHAR_ARRAY: case LSMT_STRING_PTR: *buf++ = '\"'; len--; break; case LSMT_SCHEMA: continue; default: break; } if (js->remaining) continue; up: if (++j->map_entry < j->map_entries) continue; if (!js->sp) continue; js->sp--; if (!js->sp) { lws_struct_pretty(js, &buf, &len); *buf++ = '}'; len--; lws_struct_pretty(js, &buf, &len); break; } js->offset = 0; j = &js->st[js->sp]; map = &j->map[j->map_entry]; if (map->type == LSMT_CHILD_PTR) { lws_struct_pretty(js, &buf, &len); *buf++ = '}'; len--; /* we have done the singular child pointer */ js->offset = 0; goto up; } if (map->type != LSMT_LIST) continue; /* * we are coming back up to an array map, it means we should * advance to the next array member if there is one */ lws_struct_pretty(js, &buf, &len); *buf++ = '}'; len--; p = j->dllpos = j->dllpos->next; if (j->dllpos) { /* * there was another item in the array to do... let's * move on to that and do it */ *buf++ = ','; len--; lws_struct_pretty(js, &buf, &len); js->offset = 0; j = &js->st[++js->sp]; j->map_entry = 0; map = &j->map[j->map_entry]; *buf++ = '{'; len--; lws_struct_pretty(js, &buf, &len); j->subsequent = 0; j->obj = ((char *)p) - j->map->ofs_clist; continue; } /* there are no further items in the array */ js->offset = 0; lws_struct_pretty(js, &buf, &len); *buf++ = ']'; len--; goto up; } *written = olen - len; *buf = '\0'; /* convenience, a NUL after the official end */ return LSJS_RESULT_FINISH; } libwebsockets-4.3.5/lib/misc/lws-struct-sqlite.c000066400000000000000000000322631476025525100216730ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include #include #include /* * we get one of these per matching result from the query */ static int lws_struct_sq3_deser_cb(void *priv, int cols, char **cv, char **cn) { lws_struct_args_t *a = (lws_struct_args_t *)priv; char *u = lwsac_use_zero(&a->ac, a->dest_len, a->ac_block_size); lws_dll2_owner_t *o = (lws_dll2_owner_t *)a->cb_arg; const lws_struct_map_t *map = a->map_st[0]; int n, mems = (int)(ssize_t)a->map_entries_st[0]; long long li; size_t lim; char **pp; char *s; if (!u) { lwsl_err("OOM\n"); return 1; } lws_dll2_add_tail((lws_dll2_t *)((char *)u + a->toplevel_dll2_ofs), o); while (mems--) { for (n = 0; n < cols; n++) { if (!cv[n] || strcmp(cn[n], map->colname)) continue; switch (map->type) { case LSMT_SIGNED: if (map->aux == sizeof(signed char)) { signed char *pc; pc = (signed char *)(u + map->ofs); *pc = (signed char)atoi(cv[n]); break; } if (map->aux == sizeof(short)) { short *ps; ps = (short *)(u + map->ofs); *ps = (short)atoi(cv[n]); break; } if (map->aux == sizeof(int)) { int *pi; pi = (int *)(u + map->ofs); *pi = (int)atoll(cv[n]); /* 32-bit OS */ break; } if (map->aux == sizeof(long)) { long *pl; pl = (long *)(u + map->ofs); *pl = (long)atoll(cv[n]); /* 32-bit OS */ break; } { long long *pll; pll = (long long *)(u + map->ofs); *pll = atoll(cv[n]); } break; case LSMT_UNSIGNED: if (map->aux == sizeof(unsigned char)) { unsigned char *pc; pc = (unsigned char *)(u + map->ofs); *pc = (unsigned char)(unsigned int)atoi(cv[n]); break; } if (map->aux == sizeof(unsigned short)) { unsigned short *ps; ps = (unsigned short *)(u + map->ofs); *ps = (unsigned short)atoi(cv[n]); break; } if (map->aux == sizeof(unsigned int)) { unsigned int *pi; pi = (unsigned int *)(u + map->ofs); *pi = (unsigned int)atoi(cv[n]); break; } if (map->aux == sizeof(unsigned long)) { unsigned long *pl; pl = (unsigned long *)(u + map->ofs); *pl = (unsigned long)atol(cv[n]); break; } { unsigned long long *pll; pll = (unsigned long long *)(u + map->ofs); *pll = (unsigned long long)atoll(cv[n]); } break; case LSMT_BOOLEAN: li = 0; if (!strcmp(cv[n], "true") || !strcmp(cv[n], "TRUE") || cv[n][0] == '1') li = 1; if (map->aux == sizeof(char)) { char *pc; pc = (char *)(u + map->ofs); *pc = (char)li; break; } if (map->aux == sizeof(int)) { int *pi; pi = (int *)(u + map->ofs); *pi = (int)li; } else { uint64_t *p64; p64 = (uint64_t *)(u + map->ofs); *p64 = (uint64_t)li; } break; case LSMT_STRING_CHAR_ARRAY: s = (char *)(u + map->ofs); lim = map->aux; lws_strncpy(s, cv[n], lim); break; case LSMT_STRING_PTR: pp = (char **)(u + map->ofs); lim = strlen(cv[n]); s = lwsac_use(&a->ac, lim + 1, a->ac_block_size); if (!s) return 1; *pp = s; memcpy(s, cv[n], lim); s[lim] = '\0'; break; default: break; } } map++; } return 0; } /* * Call this with an LSM_SCHEMA map, its colname is the table name and its * type information describes the toplevel type. Schema is dereferenced and * put in args before the actual sq3 query, which is given the child map. */ int lws_struct_sq3_deserialize(sqlite3 *pdb, const char *filter, const char *order, const lws_struct_map_t *schema, lws_dll2_owner_t *o, struct lwsac **ac, int start, int _limit) { int limit = _limit < 0 ? -_limit : _limit; char s[768], results[512], where[250]; lws_struct_args_t a; int n, m; if (!order) order = "_lws_idx"; memset(&a, 0, sizeof(a)); a.ac = *ac; a.cb_arg = o; /* lws_dll2_owner tracking query result objects */ a.map_st[0] = schema->child_map; a.map_entries_st[0] = schema->child_map_size; a.dest_len = schema->aux; /* size of toplevel object to allocate */ a.toplevel_dll2_ofs = schema->ofs; lws_dll2_owner_clear(o); /* * Explicitly list the columns instead of use *, so we can skip blobs */ m = 0; for (n = 0; n < (int)schema->child_map_size; n++) m += lws_snprintf(&results[m], sizeof(results) - (unsigned int)n - 1, "%s%c", schema->child_map[n].colname, n + 1 == (int)schema->child_map_size ? ' ' : ','); where[0] = '\0'; lws_snprintf(where, sizeof(where), " where _lws_idx >= %llu %s", (unsigned long long)start, filter ? filter : ""); lws_snprintf(s, sizeof(s) - 1, "select %s " "from %s %s order by %s %slimit %d;", results, schema->colname, where, order, _limit < 0 ? "desc " : "", limit); if (sqlite3_exec(pdb, s, lws_struct_sq3_deser_cb, &a, NULL) != SQLITE_OK) { lwsl_err("%s: %s: fail %s\n", __func__, sqlite3_errmsg(pdb), s); lwsac_free(&a.ac); return -1; } *ac = a.ac; return 0; } /* * This takes a struct and turns it into an sqlite3 UPDATE, using the given * schema... which has one LSM_SCHEMA_DLL2 entry wrapping the actual schema */ static int _lws_struct_sq3_ser_one(sqlite3 *pdb, const lws_struct_map_t *schema, uint32_t idx, void *st) { const lws_struct_map_t *map = schema->child_map; int n, m, pk = 0, nentries = (int)(ssize_t)schema->child_map_size, nef = 0, did; size_t sql_est = 46 + strlen(schema->colname) + 1; /* "insert into (_lws_idx, ) values (00000001,);" ... * plus the table name */ uint8_t *stb = (uint8_t *)st; const char *p; char *sql; /* * Figure out effective number of columns, exluding BLOB. * * The first UNSIGNED is a hidden index. Blobs are not handled by * lws_struct except to create the column in the schema. */ pk = 0; nef = 0; for (n = 0; n < nentries; n++) { if (!pk && map[n].type == LSMT_UNSIGNED) { pk = 1; continue; } if (map[n].type == LSMT_BLOB_PTR) continue; nef++; } /* * Figure out an estimate for the length of the populated sqlite * command, and then malloc it up */ for (n = 0; n < nentries; n++) { sql_est += strlen(map[n].colname) + 2; switch (map[n].type) { case LSMT_SIGNED: case LSMT_UNSIGNED: case LSMT_BOOLEAN: switch (map[n].aux) { case 1: sql_est += 3 + 2; break; case 2: sql_est += 5 + 2; break; case 4: sql_est += 10 + 2; break; case 8: sql_est += 20 + 2; break; } if (map[n].type == LSMT_SIGNED) sql_est++; /* minus sign */ break; case LSMT_STRING_CHAR_ARRAY: sql_est += (unsigned int)lws_sql_purify_len((const char *)st + map[n].ofs) + 2; break; case LSMT_STRING_PTR: p = *((const char * const *)&stb[map[n].ofs]); sql_est += (unsigned int)((p ? lws_sql_purify_len(p) : 0) + 2); break; case LSMT_BLOB_PTR: /* we don't deal with blobs actually */ sql_est -= strlen(map[n].colname) + 2; break; default: lwsl_err("%s: unsupported type\n", __func__); assert(0); break; } } sql = malloc(sql_est); if (!sql) return -1; m = lws_snprintf(sql, sql_est, "insert into %s(_lws_idx, ", schema->colname); /* * First explicit integer type is primary key autoincrement, should * not be specified */ pk = 0; did = 0; for (n = 0; n < nentries; n++) { if (!pk && map[n].type == LSMT_UNSIGNED) { pk = 1; continue; } if (map[n].type == LSMT_BLOB_PTR) continue; did++; m += lws_snprintf(sql + m, sql_est - (unsigned int)m, did == nef ? "%s" : "%s, ", map[n].colname); } m += lws_snprintf(sql + m, sql_est - (unsigned int)m, ") values(%u, ", idx); pk = 0; did = 0; for (n = 0; n < nentries; n++) { uint64_t uu64; size_t q; if (!pk && map[n].type == LSMT_UNSIGNED) { pk = 1; continue; } switch (map[n].type) { case LSMT_SIGNED: case LSMT_UNSIGNED: case LSMT_BOOLEAN: uu64 = 0; for (q = 0; q < map[n].aux; q++) uu64 |= ((uint64_t)stb[map[n].ofs + q] << (q << 3)); if (map[n].type == LSMT_SIGNED) m += lws_snprintf(sql + m, sql_est - (unsigned int)m, "%lld", (long long)(int64_t)uu64); else m += lws_snprintf(sql + m, sql_est - (unsigned int)m, "%llu", (unsigned long long)uu64); break; case LSMT_STRING_CHAR_ARRAY: sql[m++] = '\''; lws_sql_purify(sql + m, (const char *)&stb[map[n].ofs], sql_est - (size_t)(ssize_t)m - 4); m += (int)(ssize_t)strlen(sql + m); sql[m++] = '\''; break; case LSMT_STRING_PTR: p = *((const char * const *)&stb[map[n].ofs]); sql[m++] = '\''; if (p) { lws_sql_purify(sql + m, p, sql_est - (unsigned int)m - 4); m += (int)(ssize_t)strlen(sql + m); } sql[m++] = '\''; break; case LSMT_BLOB_PTR: continue; default: lwsl_err("%s: unsupported type\n", __func__); assert(0); break; } did++; if (did != nef) { if (sql_est - (unsigned int)m < 6) return -1; sql[m++] = ','; sql[m++] = ' '; } } lws_snprintf(sql + m, sql_est - (unsigned int)m, ");"); n = sqlite3_exec(pdb, sql, NULL, NULL, NULL); if (n != SQLITE_OK) { lwsl_err("%s\n", sql); free(sql); lwsl_err("%s: %s: fail\n", __func__, sqlite3_errmsg(pdb)); return -1; } free(sql); return 0; } int lws_struct_sq3_serialize(sqlite3 *pdb, const lws_struct_map_t *schema, lws_dll2_owner_t *owner, uint32_t manual_idx) { uint32_t idx = manual_idx; lws_start_foreach_dll(struct lws_dll2 *, p, owner->head) { void *item = (void *)((uint8_t *)p - schema->ofs_clist); if (_lws_struct_sq3_ser_one(pdb, schema, idx++, item)) return 1; } lws_end_foreach_dll(p); return 0; } int lws_struct_sq3_create_table(sqlite3 *pdb, const lws_struct_map_t *schema) { const lws_struct_map_t *map = schema->child_map; int map_size = (int)(ssize_t)schema->child_map_size, subsequent = 0; char s[2048], *p = s, *end = &s[sizeof(s) - 1], *pri = " primary key autoincrement", *use; p += lws_snprintf(p, (unsigned int)lws_ptr_diff(end, p), "create table if not exists %s (_lws_idx integer, ", schema->colname); while (map_size--) { if (map->type > LSMT_STRING_PTR && map->type != LSMT_BLOB_PTR) { map++; continue; } if (subsequent && (end - p) > 4) { *p++ = ','; *p++ = ' '; } subsequent = 1; if (map->type == LSMT_BLOB_PTR) { p += lws_snprintf(p, (unsigned int)lws_ptr_diff(end, p), "%s blob", map->colname); } else { if (map->type < LSMT_STRING_CHAR_ARRAY) { use = ""; if (map->colname[0] != '_') /* _lws_idx is not primary key */ use = pri; p += lws_snprintf(p, (unsigned int)lws_ptr_diff(end, p), "%s integer%s", map->colname, use); if (map->colname[0] != '_') pri = ""; } else p += lws_snprintf(p, (unsigned int)lws_ptr_diff(end, p), "%s varchar", map->colname); } map++; } p += lws_snprintf(p, (unsigned int)lws_ptr_diff(end, p), ");"); if (sqlite3_exec(pdb, s, NULL, NULL, NULL) != SQLITE_OK) { lwsl_err("%s: %s: fail\n", __func__, sqlite3_errmsg(pdb)); return -1; } return 0; } int lws_struct_sq3_open(struct lws_context *context, const char *sqlite3_path, char create_if_missing, sqlite3 **pdb) { #if !defined(WIN32) uid_t uid = 0; gid_t gid = 0; #endif if (sqlite3_open_v2(sqlite3_path, pdb, SQLITE_OPEN_READWRITE | (create_if_missing ? SQLITE_OPEN_CREATE : 0), NULL) != SQLITE_OK) { lwsl_info("%s: Unable to open db %s: %s\n", __func__, sqlite3_path, sqlite3_errmsg(*pdb)); return 1; } #if !defined(WIN32) lws_get_effective_uid_gid(context, &uid, &gid); if (uid) if (chown(sqlite3_path, uid, gid)) lwsl_err("%s: failed to chown %s\n", __func__, sqlite3_path); chmod(sqlite3_path, 0600); lwsl_debug("%s: created %s owned by %u:%u mode 0600\n", __func__, sqlite3_path, (unsigned int)uid, (unsigned int)gid); #else lwsl_debug("%s: created %s\n", __func__, sqlite3_path); #endif sqlite3_extended_result_codes(*pdb, 1); return 0; } int lws_struct_sq3_close(sqlite3 **pdb) { int n; if (!*pdb) return 0; n = sqlite3_close(*pdb); if (n != SQLITE_OK) { /* * trouble... */ lwsl_err("%s: failed to close: %d\n", __func__, n); return 1; } *pdb = NULL; return 0; } libwebsockets-4.3.5/lib/misc/lwsac/000077500000000000000000000000001476025525100172045ustar00rootroot00000000000000libwebsockets-4.3.5/lib/misc/lwsac/README.md000066400000000000000000000145001476025525100204630ustar00rootroot00000000000000## LWS Allocated Chunks ![lwsac flow](/doc-assets/lwsac.svg) These apis provide a way to manage a linked-list of allocated chunks... [ HEAD alloc ] -> [ next alloc ] -> [ next alloc ] -> [ curr alloc ] ... and sub-allocate trivially inside the chunks. These sub-allocations are not tracked by lwsac at all, there is a "used" high-water mark for each chunk that's simply advanced by the amount sub-allocated. If the allocation size matches the platform pointer alignment, there is zero overhead to sub-allocate (otherwise the allocation is padded to the next platform pointer alignment automatically). If you have an unknown amount of relatively little things to allocate, including strings or other unstructured data, lwsac is significantly more efficient than individual allocations using malloc or so. [lwsac full public api](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-lwsac.h) ## lwsac_use() api ``` /** * lwsac_use - allocate / use some memory from a lwsac * * \param head: pointer to the lwsac list object * \param ensure: the number of bytes we want to use * \param chunk_size: 0, or the size of the chunk to (over)allocate if * what we want won't fit in the current tail chunk. If * 0, the default value of 4000 is used. If ensure is * larger, it is used instead. * * This also serves to init the lwsac if *head is NULL. Basically it does * whatever is necessary to return you a pointer to ensure bytes of memory * reserved for the caller. * * Returns NULL if OOM. */ LWS_VISIBLE LWS_EXTERN void * lwsac_use(struct lwsac **head, size_t ensure, size_t chunk_size); ``` When you make an sub-allocation using `lwsac_use()`, you can either set the `chunk_size` arg to zero, defaulting to 4000, or a specific chunk size. In the event the requested sub-allocation exceeds the chunk size, the chunk size is increated to match it automatically for this allocation only. Subsequent `lwsac_use()` calls will advance internal pointers to use up the remaining space inside the current chunk if possible; if not enough remaining space it is skipped, a new allocation is chained on and the request pointed to there. Lwsac does not store information about sub-allocations. There is really zero overhead for individual sub-allocations (unless their size is not pointer-aligned, in which case the actual amount sub-allocated is rounded up to the next pointer alignment automatically). For structs, which are pointer- aligned naturally, and a chunk size relatively large for the sub-allocation size, lwsac is extremely efficient even for huge numbers of small allocations. This makes lwsac very effective when the total amount of allocation needed is not known at the start and may be large... it will simply add on chunks to cope with whatever happens. ## lwsac_free() api ``` /** * lwsac_free - deallocate all chunks in the lwsac and set head NULL * * \param head: pointer to the lwsac list object * * This deallocates all chunks in the lwsac, then sets *head to NULL. All * lwsac_use() pointers are invalidated in one hit without individual frees. */ LWS_VISIBLE LWS_EXTERN void lwsac_free(struct lwsac **head); ``` When you are finished with the lwsac, you simply free the chain of allocated chunks using lwsac_free() on the lwsac head. There's no tracking or individual destruction of suballocations - the whole chain of chunks the suballocations live in are freed and invalidated all together. If the structs stored in the lwsac allocated things **outside** the lwsac, then the user must unwind through them and perform the frees. But the idea of lwsac is things stored in the lwsac also suballocate into the lwsac, and point into the lwsac if they need to, avoiding any need to visit them during destroy. It's like clearing up after a kids' party by gathering up a disposable tablecloth: no matter what was left on the table, it's all gone in one step. ## `lws_list_ptr` helpers ``` /* sort may be NULL if you don't care about order */ LWS_VISIBLE LWS_EXTERN void lws_list_ptr_insert(lws_list_ptr *phead, lws_list_ptr *add, lws_list_ptr_sort_func_t sort); ``` A common pattern needed with sub-allocated structs is they are on one or more linked-list. To make that simple to do cleanly, `lws_list...` apis are provided along with a generic insertion function that can take a sort callback. These allow a struct to participate on multiple linked-lists simultaneously. ## common const string and blob folding In some cases the input to be stored in the lwsac may repeat the same tokens multiple times... if the pattern is to store the string or blob in the lwsac and then point to it, you can make use of a helper api ``` uint8_t * lwsac_scan_extant(struct lwsac *head, uint8_t *find, size_t len, int nul); ``` This lets you check in all previous used parts of the lwsac for the same string or blob, plus optionally a terminal NUL afterwards. If not found, it returns `NULL` and you can copy it into the lwsac as usual. If it is found, a pointer is returned, and you can use this directly without copying the string or blob in again. ## optimizations to minimize overhead If the lwsac will persist in the system for some time, it's desirable to reduce the memory needed as overhead. Overhead is created - once per chunk... in addition to the malloc overhead, there's an lwsac chunk header of 2 x pointers and 2 x size_t - at the unused part at the end that was allocated but not used A good strategy is to make the initial allocation reflect the minimum expected size of the overall lwsac in one hit. Then use a chunk size that is a tradeoff between the number of chunks that might be needed and the fact that on average, you can expect to waste half a chunk. For example if the storage is typically between 4K - 6K, you could allocate 4K or 4.5K for the first chunk and then fill in using 256 or 512 byte chunks. You can measure the overhead in an lwsac using `lwsac_total_overhead()`. The lwsac apis look first in the unused part of previous chunks, if any, and will place new allocations there preferentially if they fit. This helps for the case lwsac was forced to allocate a new chunk because you asked for something large, while there was actually significant free space left in the old chunk, just not enough for that particular allocation. Subsequent lwsac use can then "backfill" smaller things there to make best use of allocated space. libwebsockets-4.3.5/lib/misc/lwsac/cached-file.c000066400000000000000000000131011476025525100214700ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #if !defined(LWS_PLAT_OPTEE) && !defined(OPTEE_DEV_KIT) #include "private-lib-core.h" #include "private-lib-misc-lwsac.h" /* * Helper for caching a file in memory in a lac, but also to check at intervals * no less than 5s if the file is still fresh. * * Set *cache to NULL the first time before calling. * * You should call this each time before using the cache... if it's * * - less than 5s since the last freshness check, and * - the file is already in memory * * it just returns with *cache left alone; this costs very little. You should * call `lwsac_use_cached_file_start()` and `lwsac_use_cached_file_end()` * to lock the cache against deletion while you are using it. * * If it's * * - at least 5s since the last freshness check, and * - the file timestamp has changed * * then * * - the file is reloaded into a new lac and *cache set to that * * - the old cache lac, if any, is detached (so it will be freed when its * reference count reaches zero, or immediately if nobody has it) * * Note the call can fail due to OOM or filesystem issue at any time. * * * After the LAC header there is stored a `struct cached_file_info` and then * the raw file contents. * * * [LAC header] * [struct cached_file_info] * [file contents] <--- *cache is set to here * * The api returns a lwsac_cached_file_t type offset to point to the file * contents. Helpers for reference counting and freeing are also provided * that take that type and know how to correct it back to operate on the LAC. */ #define cache_file_to_lac(c) ((struct lwsac *)((char *)c - \ sizeof(struct cached_file_info) - \ sizeof(struct lwsac_head) - \ sizeof(struct lwsac))) void lwsac_use_cached_file_start(lwsac_cached_file_t cache) { struct lwsac *lac = cache_file_to_lac(cache); struct lwsac_head *lachead = (struct lwsac_head *)&lac->head[1]; lachead->refcount++; // lwsl_debug("%s: html refcount: %d\n", __func__, lachead->refcount); } void lwsac_use_cached_file_end(lwsac_cached_file_t *cache) { struct lwsac *lac; struct lwsac_head *lachead; if (!cache || !*cache) return; lac = cache_file_to_lac(*cache); lachead = (struct lwsac_head *)&lac->head[1]; if (!lachead->refcount) lwsl_err("%s: html refcount zero on entry\n", __func__); if (lachead->refcount && !--lachead->refcount && lachead->detached) { *cache = NULL; /* not usable any more */ lwsac_free(&lac); } } void lwsac_use_cached_file_detach(lwsac_cached_file_t *cache) { struct lwsac *lac = cache_file_to_lac(*cache); struct lwsac_head *lachead = NULL; if (lac) { lachead = (struct lwsac_head *)&lac->head[1]; lachead->detached = 1; if (lachead->refcount) return; } *cache = NULL; lwsac_free(&lac); } int lwsac_cached_file(const char *filepath, lwsac_cached_file_t *cache, size_t *len) { struct cached_file_info *info = NULL; lwsac_cached_file_t old = *cache; struct lwsac *lac = NULL; time_t t = time(NULL); unsigned char *a; struct stat s; size_t all; ssize_t rd; int fd; if (old) { /* we already have a cached copy of it */ info = (struct cached_file_info *)((*cache) - sizeof(*info)); if (t - info->last_confirm < 5) /* we checked it as fresh less than 5s ago, use old */ return 0; } /* * ...it's been 5s, we should check again on the filesystem * that the file hasn't changed */ fd = open(filepath, O_RDONLY); if (fd < 0) { lwsl_err("%s: cannot open %s\n", __func__, filepath); return 1; } if (fstat(fd, &s)) { lwsl_err("%s: cannot stat %s\n", __func__, filepath); goto bail; } if (old && s.st_mtime == info->s.st_mtime) { /* it still seems to be the same as our cached one */ info->last_confirm = t; close(fd); return 0; } /* * we either didn't cache it yet, or it has changed since we cached * it... reload in a new lac and then detach the old lac. */ all = sizeof(*info) + (unsigned long)s.st_size + 2; info = lwsac_use(&lac, all, all); if (!info) goto bail; info->s = s; info->last_confirm = t; a = (unsigned char *)(info + 1); *len = (unsigned long)s.st_size; a[s.st_size] = '\0'; rd = read(fd, a, (unsigned long)s.st_size); if (rd != s.st_size) { lwsl_err("%s: cannot read %s (%d)\n", __func__, filepath, (int)rd); goto bail1; } close(fd); *cache = (lwsac_cached_file_t)a; if (old) lwsac_use_cached_file_detach(&old); return 0; bail1: lwsac_free(&lac); bail: close(fd); return 1; } #endif libwebsockets-4.3.5/lib/misc/lwsac/lwsac.c000066400000000000000000000165531476025525100204730ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "private-lib-misc-lwsac.h" void lws_list_ptr_insert(lws_list_ptr *head, lws_list_ptr *add, lws_list_ptr_sort_func_t sort_func) { while (sort_func && *head) { if (sort_func(add, *head) <= 0) break; head = *head; } *add = *head; *head = add; } size_t lwsac_align(size_t length) { size_t align = sizeof(int *); if (length & (align - 1)) length += align - (length & (align - 1)); return length; } size_t lwsac_sizeof(int first) { return sizeof(struct lwsac) + (first ? sizeof(struct lwsac_head) : 0); } size_t lwsac_get_tail_pos(struct lwsac *lac) { return lac->ofs; } struct lwsac * lwsac_get_next(struct lwsac *lac) { return lac->next; } int lwsac_extend(struct lwsac *head, size_t amount) { struct lwsac_head *lachead; struct lwsac *bf; assert(head); lachead = (struct lwsac_head *)&head[1]; bf = lachead->curr; assert(bf); if (bf->alloc_size - bf->ofs < lwsac_align(amount)) return 1; /* memset so constant folding never sees uninitialized data */ memset(((uint8_t *)bf) + bf->ofs, 0, lwsac_align(amount)); bf->ofs += lwsac_align(amount); return 0; } static void * _lwsac_use(struct lwsac **head, size_t ensure, size_t chunk_size, char backfill) { struct lwsac_head *lachead = NULL; size_t ofs, alloc, al, hp; struct lwsac *bf = *head; if (bf) lachead = (struct lwsac_head *)&bf[1]; al = lwsac_align(ensure); /* backfill into earlier chunks if that is allowed */ if (backfill) /* * check if anything can take it, from the start */ while (bf) { if (bf->alloc_size - bf->ofs >= ensure) goto do_use; bf = bf->next; } else { /* * If there's a current chunk, just check if he can take it */ if (lachead && lachead->curr) { bf = lachead->curr; if (bf->alloc_size - bf->ofs >= ensure) goto do_use; } } /* nothing can currently take it... so we must allocate */ hp = sizeof(*bf); /* always need the normal header part... */ if (!*head) hp += sizeof(struct lwsac_head); if (!chunk_size) alloc = LWSAC_CHUNK_SIZE + hp; else alloc = chunk_size + hp; /* * If we get asked for something outside our expectation, * increase the allocation to meet it */ if (al >= alloc - hp) alloc = al + hp; lwsl_debug("%s: alloc %d for %d\n", __func__, (int)alloc, (int)ensure); bf = malloc(alloc); if (!bf) { lwsl_err("%s: OOM trying to alloc %llud\n", __func__, (unsigned long long)alloc); return NULL; } /* * belabouring the point... ofs is aligned to the platform's * generic struct alignment at the start then */ bf->ofs = sizeof(*bf); if (!*head) { /* * We are the first, head, entry... */ *head = bf; /* * ... allocate for the special head block */ bf->ofs += sizeof(*lachead); lachead = (struct lwsac_head *)&bf[1]; memset(lachead, 0, sizeof(*lachead)); } else if (lachead->curr) lachead->curr->next = bf; lachead->curr = bf; bf->head = *head; bf->next = NULL; bf->alloc_size = alloc; lachead->total_alloc_size += alloc; lachead->total_blocks++; do_use: ofs = bf->ofs; if (al > ensure) /* zero down the alignment padding part */ memset((char *)bf + ofs + ensure, 0, al - ensure); bf->ofs += al; if (bf->ofs >= bf->alloc_size) bf->ofs = bf->alloc_size; return (char *)bf + ofs; } void * lwsac_use(struct lwsac **head, size_t ensure, size_t chunk_size) { return _lwsac_use(head, ensure, chunk_size, 0); } void * lwsac_use_backfill(struct lwsac **head, size_t ensure, size_t chunk_size) { return _lwsac_use(head, ensure, chunk_size, 1); } uint8_t * lwsac_scan_extant(struct lwsac *head, uint8_t *find, size_t len, int nul) { while (head) { uint8_t *pos = (uint8_t *)&head[1], *end = ((uint8_t *)head) + head->ofs - len; if (head->ofs - sizeof(*head) >= len) while (pos < end) { if (*pos == *find && (!nul || !pos[len]) && pos[len - 1] == find[len - 1] && !memcmp(pos, find, len)) /* found the blob */ return pos; pos++; } head = head->next; } return NULL; } uint64_t lwsac_total_overhead(struct lwsac *head) { uint64_t overhead = 0; while (head) { overhead += (head->alloc_size - head->ofs) + sizeof(*head); head = head->next; } return overhead; } void * lwsac_use_zero(struct lwsac **head, size_t ensure, size_t chunk_size) { void *p = lwsac_use(head, ensure, chunk_size); if (p) memset(p, 0, ensure); return p; } void lwsac_free(struct lwsac **head) { struct lwsac *it = *head; *head = NULL; lwsl_debug("%s: head %p\n", __func__, *head); while (it) { struct lwsac *tmp = it->next; free(it); it = tmp; } } void lwsac_info(struct lwsac *head) { #if _LWS_ENABLED_LOGS & LLL_DEBUG struct lwsac_head *lachead; if (!head) { lwsl_debug("%s: empty\n", __func__); return; } lachead = (struct lwsac_head *)&head[1]; lwsl_debug("%s: lac %p: %dKiB in %d blocks\n", __func__, head, (int)(lachead->total_alloc_size >> 10), lachead->total_blocks); #endif } uint64_t lwsac_total_alloc(struct lwsac *head) { struct lwsac_head *lachead; if (!head) return 0; lachead = (struct lwsac_head *)&head[1]; return lachead->total_alloc_size; } void lwsac_reference(struct lwsac *head) { struct lwsac_head *lachead = (struct lwsac_head *)&head[1]; lachead->refcount++; lwsl_debug("%s: head %p: (det %d) refcount -> %d\n", __func__, head, lachead->detached, lachead->refcount); } void lwsac_unreference(struct lwsac **head) { struct lwsac_head *lachead; if (!(*head)) return; lachead = (struct lwsac_head *)&(*head)[1]; if (!lachead->refcount) lwsl_warn("%s: refcount going below zero\n", __func__); lachead->refcount--; lwsl_debug("%s: head %p: (det %d) refcount -> %d\n", __func__, *head, lachead->detached, lachead->refcount); if (lachead->detached && !lachead->refcount) { lwsl_debug("%s: head %p: FREED\n", __func__, *head); lwsac_free(head); } } void lwsac_detach(struct lwsac **head) { struct lwsac_head *lachead; if (!(*head)) return; lachead = (struct lwsac_head *)&(*head)[1]; lachead->detached = 1; if (!lachead->refcount) { lwsl_debug("%s: head %p: FREED\n", __func__, *head); lwsac_free(head); } else lwsl_debug("%s: head %p: refcount %d: Marked as detached\n", __func__, *head, lachead->refcount); } libwebsockets-4.3.5/lib/misc/lwsac/lwsac.cxx000066400000000000000000000044311476025525100210430ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * C++ classes for Secure Streams - atomic heap messages */ #include #include "private-lib-misc-lwsac.h" void lssAc::start(bool atomic) { if (atomic && ac->next) { struct lwsac *ac2 = NULL, *i; size_t total = (size_t)lwsac_total_alloc(ac); uint8_t *p = (uint8_t *)lwsac_use(&ac2, total, total); /* * He wants a single linear buffer, and we have more than one * piece... let's make a new, single one, copy the fragments * in and replace the fragmented one with the unified copy. */ i = ac; while (i) { size_t bl = lwsac_get_tail_pos(i) - lwsac_sizeof(i == ac); memcpy(p, (uint8_t *)i + lwsac_sizeof(i == ac), bl); p += bl; } lwsac_free(&ac); ac = ac2; } iter = ac; } int lssAc::get(lssbuf_t *lb) { if (!ac) return 1; lb->buf = (uint8_t *)iter + lwsac_sizeof(iter == ac); lb->len = lwsac_get_tail_pos(iter) - lwsac_sizeof(iter == ac); iter = iter->next; return 0; } void lssAc::append(lssbuf_t *lb) { uint8_t *p = (uint8_t *)lwsac_use(&ac, lb->len, lb->len); if (!p) throw lssException("oom"); memcpy(p, lb->buf, lb->len); } libwebsockets-4.3.5/lib/misc/lwsac/private-lib-misc-lwsac.h000066400000000000000000000042571476025525100236430ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #if !defined(__LWS_PRIVATE_LIB_MISC_LWSAC_H__) #define __LWS_PRIVATE_LIB_MISC_LWSAC_H__ #if !defined(LWS_PLAT_OPTEE) #include #endif /* under page size of 4096 to allow overhead */ #define LWSAC_CHUNK_SIZE 4000 /* * the chunk list members all point back to the head themselves so the list * can be detached from the formal head and free itself when its reference * count reaches zero. */ /* * One of these per chunk */ struct lwsac { struct lwsac *next; struct lwsac *head; /* pointer back to the first chunk */ size_t alloc_size; /* alloc size of the whole chunk */ size_t ofs; /* next writeable position inside chunk */ }; /* * One of these per lwsac, at start of first chunk */ struct lwsac_head { struct lwsac *curr; size_t total_alloc_size; int refcount; int total_blocks; char detached; /* if our refcount gets to zero, free the chunk list */ }; #if !defined(LWS_PLAT_OPTEE) struct cached_file_info { struct stat s; time_t last_confirm; }; #endif #endif libwebsockets-4.3.5/lib/misc/peer-limits.c000066400000000000000000000201751476025525100204760ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include #include "private-lib-core.h" /* requires context->lock */ static void __lws_peer_remove_from_peer_wait_list(struct lws_context *context, struct lws_peer *peer) { struct lws_peer *df; lws_start_foreach_llp(struct lws_peer **, p, context->peer_wait_list) { if (*p == peer) { df = *p; *p = df->peer_wait_list; df->peer_wait_list = NULL; if (!context->peer_wait_list) lws_sul_cancel(&context->pt[0].sul_peer_limits); return; } } lws_end_foreach_llp(p, peer_wait_list); } void lws_sul_peer_limits_cb(lws_sorted_usec_list_t *sul) { struct lws_context_per_thread *pt = lws_container_of(sul, struct lws_context_per_thread, sul_peer_limits); lws_peer_cull_peer_wait_list(pt->context); lws_sul_schedule(pt->context, 0, &pt->context->pt[0].sul_peer_limits, lws_sul_peer_limits_cb, 10 * LWS_US_PER_SEC); } /* requires context->lock */ static void __lws_peer_add_to_peer_wait_list(struct lws_context *context, struct lws_peer *peer) { __lws_peer_remove_from_peer_wait_list(context, peer); peer->peer_wait_list = context->peer_wait_list; context->peer_wait_list = peer; if (!context->pt[0].sul_peer_limits.list.owner) lws_sul_schedule(context, 0, &context->pt[0].sul_peer_limits, lws_sul_peer_limits_cb, 10 * LWS_US_PER_SEC); } struct lws_peer * lws_get_or_create_peer(struct lws_vhost *vhost, lws_sockfd_type sockfd) { struct lws_context *context = vhost->context; struct lws_peer *peer; lws_sockaddr46 sa46; socklen_t rlen = 0; uint32_t hash = 0; uint8_t *q8; void *q; int n; if (vhost->options & LWS_SERVER_OPTION_UNIX_SOCK) return NULL; rlen = sizeof(sa46); if (getpeername(sockfd, (struct sockaddr*)&sa46, &rlen)) /* eg, udp doesn't have to have a peer */ return NULL; #ifdef LWS_WITH_IPV6 if (sa46.sa4.sin_family == AF_INET6) { q = &sa46.sa6.sin6_addr; rlen = sizeof(sa46.sa6.sin6_addr); } else #endif { q = &sa46.sa4.sin_addr; rlen = sizeof(sa46.sa4.sin_addr); } q8 = q; for (n = 0; n < (int)rlen; n++) hash = (uint32_t)((((hash << 4) | (hash >> 28)) * (uint32_t)n) ^ q8[n]); if (!context->pl_hash_elements) return NULL; hash = hash % context->pl_hash_elements; lws_context_lock(context, "peer search"); /* <======================= */ lws_start_foreach_ll(struct lws_peer *, peerx, context->pl_hash_table[hash]) { if (peerx->sa46.sa4.sin_family == sa46.sa4.sin_family) { #if defined(LWS_WITH_IPV6) if (sa46.sa4.sin_family == AF_INET6 && !memcmp(q, &peerx->sa46.sa6.sin6_addr, rlen)) goto hit; #endif if (sa46.sa4.sin_family == AF_INET && !memcmp(q, &peerx->sa46.sa4.sin_addr, rlen)) { #if defined(LWS_WITH_IPV6) hit: #endif lws_context_unlock(context); /* === */ return peerx; } } } lws_end_foreach_ll(peerx, next); lwsl_info("%s: creating new peer\n", __func__); peer = lws_zalloc(sizeof(*peer), "peer"); if (!peer) { lws_context_unlock(context); /* === */ lwsl_err("%s: OOM for new peer\n", __func__); return NULL; } context->count_peers++; peer->next = context->pl_hash_table[hash]; peer->hash = hash; peer->sa46 = sa46; context->pl_hash_table[hash] = peer; time(&peer->time_created); /* * On creation, the peer has no wsi attached, so is created on the * wait list. When a wsi is added it is removed from the wait list. */ time(&peer->time_closed_all); __lws_peer_add_to_peer_wait_list(context, peer); lws_context_unlock(context); /* ====================================> */ return peer; } /* requires context->lock */ static int __lws_peer_destroy(struct lws_context *context, struct lws_peer *peer) { lws_start_foreach_llp(struct lws_peer **, p, context->pl_hash_table[peer->hash]) { if (*p == peer) { struct lws_peer *df = *p; *p = df->next; lws_free(df); context->count_peers--; return 0; } } lws_end_foreach_llp(p, next); return 1; } void lws_peer_cull_peer_wait_list(struct lws_context *context) { struct lws_peer *df; time_t t; time(&t); if (context->next_cull && t < context->next_cull) return; lws_context_lock(context, "peer cull"); /* <========================= */ context->next_cull = t + 5; lws_start_foreach_llp(struct lws_peer **, p, context->peer_wait_list) { if (t - (*p)->time_closed_all > 10) { df = *p; /* remove us from the peer wait list */ *p = df->peer_wait_list; df->peer_wait_list = NULL; __lws_peer_destroy(context, df); continue; /* we already point to next, if any */ } } lws_end_foreach_llp(p, peer_wait_list); lws_context_unlock(context); /* ====================================> */ } void lws_peer_add_wsi(struct lws_context *context, struct lws_peer *peer, struct lws *wsi) { if (!peer) return; lws_context_lock(context, "peer add"); /* <========================== */ peer->count_wsi++; wsi->peer = peer; __lws_peer_remove_from_peer_wait_list(context, peer); lws_context_unlock(context); /* ====================================> */ } void lws_peer_dump_from_wsi(struct lws *wsi) { struct lws_peer *peer; if (!wsi || !wsi->peer) return; peer = wsi->peer; #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) lwsl_notice("%s: %s: created %llu: wsi: %d/%d, ah %d/%d\n", __func__, lws_wsi_tag(wsi), (unsigned long long)peer->time_created, peer->count_wsi, peer->total_wsi, peer->http.count_ah, peer->http.total_ah); #else lwsl_notice("%s: %s: created %llu: wsi: %d/%d\n", __func__, lws_wsi_tag(wsi), (unsigned long long)peer->time_created, peer->count_wsi, peer->total_wsi); #endif } void lws_peer_track_wsi_close(struct lws_context *context, struct lws_peer *peer) { if (!peer) return; lws_context_lock(context, "peer wsi close"); /* <==================== */ assert(peer->count_wsi); peer->count_wsi--; if (!peer->count_wsi #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) && !peer->http.count_ah #endif ) { /* * in order that we can accumulate peer activity correctly * allowing for periods when the peer has no connections, * we don't synchronously destroy the peer when his last * wsi closes. Instead we mark the time his last wsi * closed and add him to a peer_wait_list to be reaped * later if no further activity is coming. */ time(&peer->time_closed_all); __lws_peer_add_to_peer_wait_list(context, peer); } lws_context_unlock(context); /* ====================================> */ } #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) int lws_peer_confirm_ah_attach_ok(struct lws_context *context, struct lws_peer *peer) { if (!peer) return 0; if (context->ip_limit_ah && peer->http.count_ah >= context->ip_limit_ah) { lwsl_info("peer reached ah limit %d, deferring\n", context->ip_limit_ah); return 1; } return 0; } void lws_peer_track_ah_detach(struct lws_context *context, struct lws_peer *peer) { if (!peer) return; lws_context_lock(context, "peer ah detach"); /* <==================== */ assert(peer->http.count_ah); peer->http.count_ah--; lws_context_unlock(context); /* ====================================> */ } #endif libwebsockets-4.3.5/lib/misc/prng.c000066400000000000000000000041521476025525100172070ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * After Public Domain implementations * * https://github.com/svaarala/duktape/tree/master/misc */ #include static inline uint64_t rol64(uint64_t x, int k) { return (x << k) | (x >> (64 - k)); } uint64_t lws_xos(struct lws_xos *xos) { uint64_t *s = &xos->s[0]; uint64_t const result = rol64(s[1] * 5, 7) * 9; uint64_t const c = s[1] << 17; s[2] ^= s[0]; s[3] ^= s[1]; s[1] ^= s[2]; s[0] ^= s[3]; s[2] ^= c; s[3] = rol64(s[3], 45); return result; } static uint64_t splitmix64(uint64_t *s) { uint64_t r = *s; *s = r + 0x9E3779B97F4A7C15ull; r = (r ^ (r >> 30)) * 0xBF58476D1CE4E5B9ull; r = (r ^ (r >> 27)) * 0x94D049BB133111EBull; return r ^ (r >> 31); } void lws_xos_init(struct lws_xos *xos, uint64_t seed) { int n; for (n = 0; n < 4; n++) xos->s[n] = splitmix64(&seed); } int lws_xos_percent(struct lws_xos *xos, int percent) { return (int)(lws_xos(xos) % 100) < percent; } libwebsockets-4.3.5/lib/misc/romfs.c000066400000000000000000000126741476025525100173770ustar00rootroot00000000000000/* * Copyright (C) 2017 National Institute of Advanced Industrial Science * and Technology (AIST) * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of AIST nor the names of its contributors may be used * to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #include #include #include #include #include "romfs.h" #if defined(LWS_WITH_ESP32) #include "esp_spi_flash.h" #endif #define RFS_STRING_MAX 96 static u32_be_t cache[(RFS_STRING_MAX + 32) / 4]; static romfs_inode_t ci = (romfs_inode_t)cache; static romfs_t cr = (romfs_t)cache; static void set_cache(romfs_inode_t inode, size_t len) { #if defined(LWS_WITH_ESP32) spi_flash_read((uint32_t)inode, cache, len); #endif } static uint32_t untohl(const u32_be_t be) { return ((be >> 24) & 0xff) | ((be >> 16) & 0xff) << 8 | ((be >> 8) & 0xff) << 16 | (be & 0xff) << 24; } static romfs_inode_t romfs_lookup(romfs_t romfs, romfs_inode_t start, const char *path); static int plus_padding(const uint8_t *s) { int n; set_cache((romfs_inode_t)s, RFS_STRING_MAX); n = strlen((const char *)cache); if (!(n & 15)) n += 0x10; return (n + 15) & ~15; } static romfs_inode_t skip_and_pad(romfs_inode_t ri) { const uint8_t *p = ((const uint8_t *)ri) + sizeof(*ri); return (romfs_inode_t)(p + plus_padding(p)); } size_t romfs_mount_check(romfs_t romfs) { set_cache((romfs_inode_t)romfs, sizeof(*romfs)); if (cr->magic1 != 0x6d6f722d || cr->magic2 != 0x2d736631) return 0; return untohl(cr->size); } static romfs_inode_t romfs_symlink(romfs_t romfs, romfs_inode_t level, romfs_inode_t i) { const char *p = (const char *)skip_and_pad(i); if (*p == '/') { level = skip_and_pad((romfs_inode_t)romfs); p++; } return romfs_lookup(romfs, level, p); } static romfs_inode_t dir_link(romfs_t romfs, romfs_inode_t i) { set_cache(i, sizeof(*i)); return (romfs_inode_t)((const uint8_t *)romfs + untohl(ci->dir_start)); } static romfs_inode_t romfs_lookup(romfs_t romfs, romfs_inode_t start, const char *path) { romfs_inode_t level, i = start, i_in; const char *p, *cp; uint32_t next_be; if (start == (romfs_inode_t)romfs) i = skip_and_pad((romfs_inode_t)romfs); level = i; while (i != (romfs_inode_t)romfs) { const char *n = ((const char *)i) + sizeof(*i); p = path; i_in = i; set_cache(i, sizeof(*i)); next_be = ci->next; cp = (const char *)cache; set_cache((romfs_inode_t)n, RFS_STRING_MAX); while (*p && *p != '/' && *cp && *p == *cp && (p - path) < RFS_STRING_MAX) { p++; n++; cp++; } while (*p == '/' && p[1] == '/') p++; if (!*cp && (!*p || *p == '/') && (untohl(next_be) & 7) == RFST_HARDLINK) { set_cache(i, sizeof(*i)); return (romfs_inode_t) ((const uint8_t *)romfs + (untohl(ci->dir_start) & ~15)); } if (!*p && !*cp) { set_cache(i, sizeof(*i)); if ((untohl(ci->next) & 7) == RFST_SYMLINK) { i = romfs_symlink(romfs, level, i); continue; } return i; } if (!*p && *cp == '/') return NULL; while (*p == '/' && p[1] == '/') p++; if (*p == '/' && !*cp) { set_cache(i, sizeof(*i)); switch (untohl(ci->next) & 7) { case RFST_SYMLINK: i = romfs_symlink(romfs, level, i); if (!i) return NULL; i = dir_link(romfs, i); while (*path != '/' && *path) path++; if (!*path) return NULL; path++; continue; case RFST_DIR: path = p + 1; i = dir_link(romfs, i); break; default: path = p + 1; i = skip_and_pad(i); break; } level = i; continue; } set_cache(i, sizeof(*i)); if (!(untohl(ci->next) & ~15)) return NULL; i = (romfs_inode_t)((const uint8_t *)romfs + (untohl(ci->next) & ~15)); if (i == i_in) return NULL; } return NULL; } const void * romfs_get_info(romfs_t romfs, const char *path, size_t *len, size_t *csum) { romfs_inode_t i; if (*path == '/') path++; i = romfs_lookup(romfs, (romfs_inode_t)romfs, path); if (!i) return NULL; set_cache(i, sizeof(*i)); *len = untohl(ci->size); if (csum) *csum = untohl(ci->checksum); return (void *)skip_and_pad(i); } libwebsockets-4.3.5/lib/misc/romfs.h000066400000000000000000000041361476025525100173760ustar00rootroot00000000000000/* * Copyright (C) 2017 National Institute of Advanced Industrial Science * and Technology (AIST) * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of AIST nor the names of its contributors may be used * to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ typedef uint32_t u32_be_t; struct romfs_superblock { u32_be_t magic1; u32_be_t magic2; u32_be_t size; u32_be_t checksum; }; struct romfs_i { u32_be_t next; u32_be_t dir_start; u32_be_t size; u32_be_t checksum; }; enum { RFST_HARDLINK = 0, RFST_DIR = 1, RFST_SYMLINK = 3, }; typedef const struct romfs_i *romfs_inode_t; typedef const struct romfs_superblock *romfs_t; const void * romfs_get_info(romfs_t romfs, const char *path, size_t *len, size_t *csum); size_t romfs_mount_check(romfs_t romfs); libwebsockets-4.3.5/lib/misc/sha-1.c000066400000000000000000000221211476025525100171460ustar00rootroot00000000000000/* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the project nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * FIPS pub 180-1: Secure Hash Algorithm (SHA-1) * based on: http://csrc.nist.gov/fips/fip180-1.txt * implemented by Jun-ichiro itojun Itoh */ #include "private-lib-core.h" #ifdef LWS_HAVE_SYS_TYPES_H #include #endif struct sha1_ctxt { union { unsigned char b8[20]; unsigned int b32[5]; } h; union { unsigned char b8[8]; uint64_t b64[1]; } c; union { unsigned char b8[64]; unsigned int b32[16]; } m; unsigned char count; }; /* sanity check */ #if !defined(BYTE_ORDER) || !defined(LITTLE_ENDIAN) || !defined(BIG_ENDIAN) # define unsupported 1 #elif BYTE_ORDER != BIG_ENDIAN # if BYTE_ORDER != LITTLE_ENDIAN # define unsupported 1 # endif #endif #ifndef unsupported /* constant table */ static const unsigned int _K[] = { 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6 }; #define K(t) _K[(t) / 20] #define F0(b, c, d) (((b) & (c)) | ((~(b)) & (d))) #define F1(b, c, d) (((b) ^ (c)) ^ (d)) #define F2(b, c, d) (((b) & (c)) | ((b) & (d)) | ((c) & (d))) #define F3(b, c, d) (((b) ^ (c)) ^ (d)) #define S(n, x) (((x) << (n)) | ((x) >> (32 - n))) #define H(n) (ctxt->h.b32[(n)]) #define COUNT (ctxt->count) #define BCOUNT (ctxt->c.b64[0] / 8) #define W(n) (ctxt->m.b32[(n)]) #define PUTBYTE(x) { \ ctxt->m.b8[(COUNT % 64)] = (x); \ COUNT++; \ COUNT %= 64; \ ctxt->c.b64[0] += 8; \ if (COUNT % 64 == 0) \ sha1_step(ctxt); \ } #define PUTPAD(x) { \ ctxt->m.b8[(COUNT % 64)] = (x); \ COUNT++; \ COUNT %= 64; \ if (COUNT % 64 == 0) \ sha1_step(ctxt); \ } static void sha1_step(struct sha1_ctxt *ctxt) { unsigned int a, b, c, d, e, tmp; size_t t, s; #if BYTE_ORDER == LITTLE_ENDIAN struct sha1_ctxt tctxt; memcpy(&tctxt.m.b8[0], &ctxt->m.b8[0], 64); ctxt->m.b8[0] = tctxt.m.b8[3]; ctxt->m.b8[1] = tctxt.m.b8[2]; ctxt->m.b8[2] = tctxt.m.b8[1]; ctxt->m.b8[3] = tctxt.m.b8[0]; ctxt->m.b8[4] = tctxt.m.b8[7]; ctxt->m.b8[5] = tctxt.m.b8[6]; ctxt->m.b8[6] = tctxt.m.b8[5]; ctxt->m.b8[7] = tctxt.m.b8[4]; ctxt->m.b8[8] = tctxt.m.b8[11]; ctxt->m.b8[9] = tctxt.m.b8[10]; ctxt->m.b8[10] = tctxt.m.b8[9]; ctxt->m.b8[11] = tctxt.m.b8[8]; ctxt->m.b8[12] = tctxt.m.b8[15]; ctxt->m.b8[13] = tctxt.m.b8[14]; ctxt->m.b8[14] = tctxt.m.b8[13]; ctxt->m.b8[15] = tctxt.m.b8[12]; ctxt->m.b8[16] = tctxt.m.b8[19]; ctxt->m.b8[17] = tctxt.m.b8[18]; ctxt->m.b8[18] = tctxt.m.b8[17]; ctxt->m.b8[19] = tctxt.m.b8[16]; ctxt->m.b8[20] = tctxt.m.b8[23]; ctxt->m.b8[21] = tctxt.m.b8[22]; ctxt->m.b8[22] = tctxt.m.b8[21]; ctxt->m.b8[23] = tctxt.m.b8[20]; ctxt->m.b8[24] = tctxt.m.b8[27]; ctxt->m.b8[25] = tctxt.m.b8[26]; ctxt->m.b8[26] = tctxt.m.b8[25]; ctxt->m.b8[27] = tctxt.m.b8[24]; ctxt->m.b8[28] = tctxt.m.b8[31]; ctxt->m.b8[29] = tctxt.m.b8[30]; ctxt->m.b8[30] = tctxt.m.b8[29]; ctxt->m.b8[31] = tctxt.m.b8[28]; ctxt->m.b8[32] = tctxt.m.b8[35]; ctxt->m.b8[33] = tctxt.m.b8[34]; ctxt->m.b8[34] = tctxt.m.b8[33]; ctxt->m.b8[35] = tctxt.m.b8[32]; ctxt->m.b8[36] = tctxt.m.b8[39]; ctxt->m.b8[37] = tctxt.m.b8[38]; ctxt->m.b8[38] = tctxt.m.b8[37]; ctxt->m.b8[39] = tctxt.m.b8[36]; ctxt->m.b8[40] = tctxt.m.b8[43]; ctxt->m.b8[41] = tctxt.m.b8[42]; ctxt->m.b8[42] = tctxt.m.b8[41]; ctxt->m.b8[43] = tctxt.m.b8[40]; ctxt->m.b8[44] = tctxt.m.b8[47]; ctxt->m.b8[45] = tctxt.m.b8[46]; ctxt->m.b8[46] = tctxt.m.b8[45]; ctxt->m.b8[47] = tctxt.m.b8[44]; ctxt->m.b8[48] = tctxt.m.b8[51]; ctxt->m.b8[49] = tctxt.m.b8[50]; ctxt->m.b8[50] = tctxt.m.b8[49]; ctxt->m.b8[51] = tctxt.m.b8[48]; ctxt->m.b8[52] = tctxt.m.b8[55]; ctxt->m.b8[53] = tctxt.m.b8[54]; ctxt->m.b8[54] = tctxt.m.b8[53]; ctxt->m.b8[55] = tctxt.m.b8[52]; ctxt->m.b8[56] = tctxt.m.b8[59]; ctxt->m.b8[57] = tctxt.m.b8[58]; ctxt->m.b8[58] = tctxt.m.b8[57]; ctxt->m.b8[59] = tctxt.m.b8[56]; ctxt->m.b8[60] = tctxt.m.b8[63]; ctxt->m.b8[61] = tctxt.m.b8[62]; ctxt->m.b8[62] = tctxt.m.b8[61]; ctxt->m.b8[63] = tctxt.m.b8[60]; #endif a = H(0); b = H(1); c = H(2); d = H(3); e = H(4); for (t = 0; t < 20; t++) { s = t & 0x0f; if (t >= 16) W(s) = S(1, W((s+13) & 0x0f) ^ W((s+8) & 0x0f) ^ W((s+2) & 0x0f) ^ W(s)); tmp = S(5, a) + F0(b, c, d) + e + W(s) + K(t); e = d; d = c; c = S(30, b); b = a; a = tmp; } for (t = 20; t < 40; t++) { s = t & 0x0f; W(s) = S(1, W((s+13) & 0x0f) ^ W((s+8) & 0x0f) ^ W((s+2) & 0x0f) ^ W(s)); tmp = S(5, a) + F1(b, c, d) + e + W(s) + K(t); e = d; d = c; c = S(30, b); b = a; a = tmp; } for (t = 40; t < 60; t++) { s = t & 0x0f; W(s) = S(1, W((s+13) & 0x0f) ^ W((s+8) & 0x0f) ^ W((s+2) & 0x0f) ^ W(s)); tmp = S(5, a) + F2(b, c, d) + e + W(s) + K(t); e = d; d = c; c = S(30, b); b = a; a = tmp; } for (t = 60; t < 80; t++) { s = t & 0x0f; W(s) = S(1, W((s+13) & 0x0f) ^ W((s+8) & 0x0f) ^ W((s+2) & 0x0f) ^ W(s)); tmp = S(5, a) + F3(b, c, d) + e + W(s) + K(t); e = d; d = c; c = S(30, b); b = a; a = tmp; } H(0) = H(0) + a; H(1) = H(1) + b; H(2) = H(2) + c; H(3) = H(3) + d; H(4) = H(4) + e; memset(&ctxt->m.b8[0], 0, 64); } /*------------------------------------------------------------*/ static void _sha1_init(struct sha1_ctxt *ctxt) { memset(ctxt, 0, sizeof(struct sha1_ctxt)); H(0) = 0x67452301; H(1) = 0xefcdab89; H(2) = 0x98badcfe; H(3) = 0x10325476; H(4) = 0xc3d2e1f0; } void sha1_pad(struct sha1_ctxt *ctxt) { size_t padlen; /*pad length in bytes*/ size_t padstart; PUTPAD(0x80); padstart = COUNT % 64; padlen = 64 - padstart; if (padlen < 8) { memset(&ctxt->m.b8[padstart], 0, padlen); COUNT = (unsigned char)(COUNT + padlen); COUNT %= 64; sha1_step(ctxt); padstart = COUNT % 64; /* should be 0 */ padlen = 64 - padstart; /* should be 64 */ } memset(&ctxt->m.b8[padstart], 0, padlen - 8); COUNT = (unsigned char)(COUNT + (padlen - 8)); COUNT %= 64; #if BYTE_ORDER == BIG_ENDIAN PUTPAD(ctxt->c.b8[0]); PUTPAD(ctxt->c.b8[1]); PUTPAD(ctxt->c.b8[2]); PUTPAD(ctxt->c.b8[3]); PUTPAD(ctxt->c.b8[4]); PUTPAD(ctxt->c.b8[5]); PUTPAD(ctxt->c.b8[6]); PUTPAD(ctxt->c.b8[7]); #else PUTPAD(ctxt->c.b8[7]); PUTPAD(ctxt->c.b8[6]); PUTPAD(ctxt->c.b8[5]); PUTPAD(ctxt->c.b8[4]); PUTPAD(ctxt->c.b8[3]); PUTPAD(ctxt->c.b8[2]); PUTPAD(ctxt->c.b8[1]); PUTPAD(ctxt->c.b8[0]); #endif } void sha1_loop(struct sha1_ctxt *ctxt, const unsigned char *input, size_t len) { size_t off; off = 0; while (off < len) { size_t gapstart = COUNT % 64, gaplen = 64 - gapstart, copysiz = (gaplen < len - off) ? gaplen : len - off; memcpy(&ctxt->m.b8[gapstart], &input[off], copysiz); COUNT = (unsigned char)(COUNT + copysiz); COUNT %= 64; ctxt->c.b64[0] += copysiz * 8; if (COUNT % 64 == 0) sha1_step(ctxt); off += copysiz; } } void sha1_result(struct sha1_ctxt *ctxt, void *digest0) { unsigned char *digest; digest = (unsigned char *)digest0; sha1_pad(ctxt); #if BYTE_ORDER == BIG_ENDIAN memcpy(digest, &ctxt->h.b8[0], 20); #else digest[0] = ctxt->h.b8[3]; digest[1] = ctxt->h.b8[2]; digest[2] = ctxt->h.b8[1]; digest[3] = ctxt->h.b8[0]; digest[4] = ctxt->h.b8[7]; digest[5] = ctxt->h.b8[6]; digest[6] = ctxt->h.b8[5]; digest[7] = ctxt->h.b8[4]; digest[8] = ctxt->h.b8[11]; digest[9] = ctxt->h.b8[10]; digest[10] = ctxt->h.b8[9]; digest[11] = ctxt->h.b8[8]; digest[12] = ctxt->h.b8[15]; digest[13] = ctxt->h.b8[14]; digest[14] = ctxt->h.b8[13]; digest[15] = ctxt->h.b8[12]; digest[16] = ctxt->h.b8[19]; digest[17] = ctxt->h.b8[18]; digest[18] = ctxt->h.b8[17]; digest[19] = ctxt->h.b8[16]; #endif } /* * This should look and work like the libcrypto implementation */ unsigned char * lws_SHA1(const unsigned char *d, size_t n, unsigned char *md) { struct sha1_ctxt ctx; _sha1_init(&ctx); sha1_loop(&ctx, d, n); sha1_result(&ctx, (void *)md); return md; } #endif /*unsupported*/ libwebsockets-4.3.5/lib/misc/threadpool/000077500000000000000000000000001476025525100202345ustar00rootroot00000000000000libwebsockets-4.3.5/lib/misc/threadpool/README.md000066400000000000000000000201371476025525100215160ustar00rootroot00000000000000## Threadpool ### Overview ![overview](/doc-assets/threadpool.svg) An api that lets you create a pool of worker threads, and a queue of tasks that are bound to a wsi. Tasks in their own thread synchronize communication to the lws service thread of the wsi via `LWS_CALLBACK_SERVER_WRITEABLE` and friends. Tasks can produce some output, then return that they want to "sync" with the service thread. That causes a `LWS_CALLBACK_SERVER_WRITEABLE` in the service thread context, where the output can be consumed, and the task told to continue, or completed tasks be reaped. ALL of the details related to thread synchronization and an associated wsi in the lws service thread context are handled by the threadpool api, without needing any pthreads in user code. ### Example https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/ws-server/minimal-ws-server-threadpool ### Lifecycle considerations #### Tasks vs wsi Although all tasks start out as being associated to a wsi, in fact the lifetime of a task and that of the wsi are not necessarily linked. You may start a long task, eg, that runs atomically in its thread for 30s, and at any time the client may close the connection, eg, close a browser window. There are arrangements that a task can "check in" periodically with lws to see if it has been asked to stop, allowing the task lifetime to be related to the wsi lifetime somewhat, but some tasks are going to be atomic and longlived. For that reason, at wsi close an ongoing task can detach from the wsi and continue until it ends or understands it has been asked to stop. To make that work, the task is created with a `cleanup` callback that performs any freeing independent of still having a wsi around to do it... the task takes over responsibility to free the user pointer on destruction when the task is created. ![Threadpool States](/doc-assets/threadpool-states.svg) #### Reaping completed tasks Once created, although tasks may run asynchronously, the task itself does not get destroyed on completion but added to a "done queue". Only when the lws service thread context queries the task state with `lws_threadpool_task_status()` may the task be reaped and memory freed. This is analogous to unix processes and `wait()`. If a task became detached from its wsi, then joining the done queue is enough to get the task reaped, since there's nobody left any more to synchronize the reaping with. ### User interface The api is declared at https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-threadpool.h #### Threadpool creation / destruction The threadpool should be created at program or vhost init using `lws_threadpool_create()` and destroyed on exit or vhost destruction using first `lws_threadpool_finish()` and then `lws_threadpool_destroy()`. Threadpools should be named, varargs are provided on the create function to facilite eg, naming the threadpool by the vhost it's associated with. Threadpool creation takes an args struct with the following members: Member|function ---|--- threads|The maxiumum number of independent threads in the pool max_queue_depth|The maximum number of tasks allowed to wait for a place in the pool #### Task creation / destruction Tasks are created and queued using `lws_threadpool_enqueue()`, this takes an args struct with the following members Member|function ---|--- wsi|The wsi the task is initially associated with user|An opaque user-private pointer used for communication with the lws service thread and private state / data task|A pointer to the function that will run in the pool thread cleanup|A pointer to a function that will clean up finished or stopped tasks (perhaps freeing user) Tasks also should have a name, the creation function again provides varargs to simplify naming the task with string elements related to who started it and why. #### The task function itself The task function receives the task user pointer and the task state. The possible task states are State|Meaning ---|--- LWS_TP_STATUS_QUEUED|Task is still waiting for a pool thread LWS_TP_STATUS_RUNNING|Task is supposed to do its work LWS_TP_STATUS_SYNCING|Task is blocked waiting for sync from lws service thread LWS_TP_STATUS_STOPPING|Task has been asked to stop but didn't stop yet LWS_TP_STATUS_FINISHED|Task has reported it has completed LWS_TP_STATUS_STOPPED|Task has aborted The task function will only be told `LWS_TP_STATUS_RUNNING` or `LWS_TP_STATUS_STOPPING` in its status argument... RUNNING means continue with the user task and STOPPING means clean up and return `LWS_TP_RETURN_STOPPED`. If possible every 100ms or so the task should return `LWS_TP_RETURN_CHECKING_IN` to allow lws to inform it reasonably quickly that it has been asked to stop (eg, because the related wsi has closed), or if it can continue. If not possible, it's okay but eg exiting the application may experience delays until the running task finishes, and since the wsi may have gone, the work is wasted. The task function may return one of Return|Meaning ---|--- LWS_TP_RETURN_CHECKING_IN|Still wants to run, but confirming nobody asked him to stop. Will be called again immediately with `LWS_TP_STATUS_RUNNING` or `LWS_TP_STATUS_STOPPING` LWS_TP_RETURN_SYNC|Task wants to trigger a WRITABLE callback and block until lws service thread restarts it with `lws_threadpool_task_sync()` LWS_TP_RETURN_FINISHED|Task has finished, successfully as far as it goes LWS_TP_RETURN_STOPPED|Task has finished, aborting in response to a request to stop The SYNC or CHECKING_IN return may also have a flag `LWS_TP_RETURN_FLAG_OUTLIVE` applied to it, which indicates to threadpool that this task wishes to remain unstopped after the wsi closes. This is useful in the case where the task understands it will take a long time to complete, and wants to return a complete status and maybe close the connection, perhaps with a token identifying the task. The task can then be monitored separately by using the token. #### Synchronizing The task can choose to "SYNC" with the lws service thread, in other words cause a WRITABLE callback on the associated wsi in the lws service thread context and block itself until it hears back from there via `lws_threadpool_task_sync()` to resume the task. This is typically used when, eg, the task has filled its buffer, or ringbuffer, and needs to pause operations until what's done has been sent and some buffer space is open again. In the WRITABLE callback, in lws service thread context, the buffer can be sent with `lws_write()` and then `lws_threadpool_task_sync()` to allow the task to fill another buffer and continue that way. If the WRITABLE callback determines that the task should stop, it can just call `lws_threadpool_task_sync()` with the second argument as 1, to force the task to stop immediately after it resumes. #### The cleanup function When a finished task is reaped, or a task that become detached from its initial wsi completes or is stopped, it calls the `.cleanup` function defined in the task creation args struct to free anything related to the user pointer. With threadpool, responsibility for freeing allocations used by the task belongs strictly with the task, via the `.cleanup` function, once the task has been enqueued. That's different from a typical non-threadpool protocol where the wsi lifecycle controls deallocation. This reflects the fact that the task may outlive the wsi. #### Protecting against WRITABLE and / or SYNC duplication Care should be taken than data prepared by the task thread in the user priv memory should only be sent once. For example, after sending data from a user priv buffer of a given length stored in the priv, zero down the length. Task execution and the SYNC writable callbacks are mutually exclusive, so there is no danger of collision between the task thread and the lws service thread if the reason for the callback is a SYNC operation from the task thread. ### Thread overcommit If the tasks running on the threads are ultimately network-bound for all or some of their processing (via the SYNC with the WRITEABLE callback), it's possible to overcommit the number of threads in the pool compared to the number of threads the processor has in hardware to get better occupancy in the CPU. libwebsockets-4.3.5/lib/misc/threadpool/threadpool.c000066400000000000000000000715361476025525100225550ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #if !defined(_GNU_SOURCE) #define _GNU_SOURCE #endif #if defined(WIN32) #define HAVE_STRUCT_TIMESPEC #if defined(pid_t) #undef pid_t #endif #endif #include #include "private-lib-core.h" #include #include struct lws_threadpool; struct lws_threadpool_task { struct lws_threadpool_task *task_queue_next; struct lws_threadpool *tp; char name[32]; struct lws_threadpool_task_args args; lws_dll2_t list; lws_usec_t created; lws_usec_t acquired; lws_usec_t done; lws_usec_t entered_state; lws_usec_t acc_running; lws_usec_t acc_syncing; pthread_cond_t wake_idle; enum lws_threadpool_task_status status; int late_sync_retries; char wanted_writeable_cb; char outlive; }; struct lws_pool { struct lws_threadpool *tp; pthread_t thread; pthread_mutex_t lock; /* part of task wake_idle */ struct lws_threadpool_task *task; lws_usec_t acquired; int worker_index; }; struct lws_threadpool { pthread_mutex_t lock; /* protects all pool lists */ pthread_cond_t wake_idle; struct lws_pool *pool_list; struct lws_context *context; struct lws_threadpool *tp_list; /* context list of threadpools */ struct lws_threadpool_task *task_queue_head; struct lws_threadpool_task *task_done_head; char name[32]; int threads_in_pool; int queue_depth; int done_queue_depth; int max_queue_depth; int running_tasks; unsigned int destroying:1; }; static int ms_delta(lws_usec_t now, lws_usec_t then) { return (int)((now - then) / 1000); } static void us_accrue(lws_usec_t *acc, lws_usec_t then) { lws_usec_t now = lws_now_usecs(); *acc += now - then; } static int pc_delta(lws_usec_t now, lws_usec_t then, lws_usec_t us) { lws_usec_t delta = (now - then) + 1; return (int)((us * 100) / delta); } static void __lws_threadpool_task_dump(struct lws_threadpool_task *task, char *buf, int len) { lws_usec_t now = lws_now_usecs(); char *end = buf + len - 1; int syncms = 0, runms = 0; if (!task->acquired) { buf += lws_snprintf(buf, lws_ptr_diff_size_t(end, buf), "task: %s, QUEUED queued: %dms", task->name, ms_delta(now, task->created)); return; } if (task->acc_running) runms = (int)task->acc_running; if (task->acc_syncing) syncms = (int)task->acc_syncing; if (!task->done) { buf += lws_snprintf(buf, lws_ptr_diff_size_t(end, buf), "task: %s, ONGOING state %d (%dms) alive: %dms " "(queued %dms, acquired: %dms, " "run: %d%%, sync: %d%%)", task->name, task->status, ms_delta(now, task->entered_state), ms_delta(now, task->created), ms_delta(task->acquired, task->created), ms_delta(now, task->acquired), pc_delta(now, task->acquired, runms), pc_delta(now, task->acquired, syncms)); return; } lws_snprintf(buf, lws_ptr_diff_size_t(end, buf), "task: %s, DONE state %d lived: %dms " "(queued %dms, on thread: %dms, " "ran: %d%%, synced: %d%%)", task->name, task->status, ms_delta(task->done, task->created), ms_delta(task->acquired, task->created), ms_delta(task->done, task->acquired), pc_delta(task->done, task->acquired, runms), pc_delta(task->done, task->acquired, syncms)); } void lws_threadpool_dump(struct lws_threadpool *tp) { #if 0 //defined(_DEBUG) struct lws_threadpool_task **c; char buf[160]; int n, count; pthread_mutex_lock(&tp->lock); /* ======================== tpool lock */ lwsl_thread("%s: tp: %s, Queued: %d, Run: %d, Done: %d\n", __func__, tp->name, tp->queue_depth, tp->running_tasks, tp->done_queue_depth); count = 0; c = &tp->task_queue_head; while (*c) { struct lws_threadpool_task *task = *c; __lws_threadpool_task_dump(task, buf, sizeof(buf)); lwsl_thread(" - %s\n", buf); count++; c = &(*c)->task_queue_next; } if (count != tp->queue_depth) lwsl_err("%s: tp says queue depth %d, but actually %d\n", __func__, tp->queue_depth, count); count = 0; for (n = 0; n < tp->threads_in_pool; n++) { struct lws_pool *pool = &tp->pool_list[n]; struct lws_threadpool_task *task = pool->task; if (task) { __lws_threadpool_task_dump(task, buf, sizeof(buf)); lwsl_thread(" - worker %d: %s\n", n, buf); count++; } } if (count != tp->running_tasks) lwsl_err("%s: tp says %d running_tasks, but actually %d\n", __func__, tp->running_tasks, count); count = 0; c = &tp->task_done_head; while (*c) { struct lws_threadpool_task *task = *c; __lws_threadpool_task_dump(task, buf, sizeof(buf)); lwsl_thread(" - %s\n", buf); count++; c = &(*c)->task_queue_next; } if (count != tp->done_queue_depth) lwsl_err("%s: tp says done_queue_depth %d, but actually %d\n", __func__, tp->done_queue_depth, count); pthread_mutex_unlock(&tp->lock); /* --------------- tp unlock */ #endif } static void state_transition(struct lws_threadpool_task *task, enum lws_threadpool_task_status status) { task->entered_state = lws_now_usecs(); task->status = status; } static struct lws * task_to_wsi(struct lws_threadpool_task *task) { #if defined(LWS_WITH_SECURE_STREAMS) if (task->args.ss) return task->args.ss->wsi; #endif return task->args.wsi; } static void lws_threadpool_task_cleanup_destroy(struct lws_threadpool_task *task) { if (task->args.cleanup) task->args.cleanup(task_to_wsi(task), task->args.user); lws_dll2_remove(&task->list); lwsl_thread("%s: tp %p: cleaned finished task for %s\n", __func__, task->tp, lws_wsi_tag(task_to_wsi(task))); lws_free(task); } static void __lws_threadpool_reap(struct lws_threadpool_task *task) { struct lws_threadpool_task **c, *t = NULL; struct lws_threadpool *tp = task->tp; /* remove the task from the done queue */ if (tp) { c = &tp->task_done_head; while (*c) { if ((*c) == task) { t = *c; *c = t->task_queue_next; t->task_queue_next = NULL; tp->done_queue_depth--; lwsl_thread("%s: tp %s: reaped task %s\n", __func__, tp->name, lws_wsi_tag(task_to_wsi(task))); break; } c = &(*c)->task_queue_next; } if (!t) { lwsl_err("%s: task %p not in done queue\n", __func__, task); /* * This shouldn't occur, but in this case not really * safe to assume there's a task to destroy */ return; } } else lwsl_err("%s: task->tp NULL already\n", __func__); /* call the task's cleanup and delete the task itself */ lws_threadpool_task_cleanup_destroy(task); } /* * this gets called from each tsi service context after the service was * cancelled... we need to ask for the writable callback from the matching * tsi context for any wsis bound to a worked thread that need it */ int lws_threadpool_tsi_context(struct lws_context *context, int tsi) { struct lws_threadpool_task **c, *task = NULL; struct lws_threadpool *tp; struct lws *wsi; lws_context_lock(context, __func__); tp = context->tp_list_head; while (tp) { int n; /* for the running (syncing...) tasks... */ for (n = 0; n < tp->threads_in_pool; n++) { struct lws_pool *pool = &tp->pool_list[n]; task = pool->task; if (!task) continue; wsi = task_to_wsi(task); if (!wsi || wsi->tsi != tsi || (!task->wanted_writeable_cb && task->status != LWS_TP_STATUS_SYNCING)) continue; task->wanted_writeable_cb = 0; lws_memory_barrier(); /* * finally... we can ask for the callback on * writable from the correct service thread * context */ lws_callback_on_writable(wsi); } /* for the done tasks... */ c = &tp->task_done_head; while (*c) { task = *c; wsi = task_to_wsi(task); if (wsi && wsi->tsi == tsi && (task->wanted_writeable_cb || task->status == LWS_TP_STATUS_SYNCING)) { task->wanted_writeable_cb = 0; lws_memory_barrier(); /* * finally... we can ask for the callback on * writable from the correct service thread * context */ lws_callback_on_writable(wsi); } c = &task->task_queue_next; } tp = tp->tp_list; } lws_context_unlock(context); return 0; } static int lws_threadpool_worker_sync(struct lws_pool *pool, struct lws_threadpool_task *task) { enum lws_threadpool_task_status temp; struct timespec abstime; struct lws *wsi; int tries = 15; /* block until writable acknowledges */ lwsl_debug("%s: %p: LWS_TP_RETURN_SYNC in\n", __func__, task); pthread_mutex_lock(&pool->lock); /* ======================= pool lock */ lwsl_info("%s: %s: task %p (%s): syncing with %s\n", __func__, pool->tp->name, task, task->name, lws_wsi_tag(task_to_wsi(task))); temp = task->status; state_transition(task, LWS_TP_STATUS_SYNCING); while (tries--) { wsi = task_to_wsi(task); /* * if the wsi is no longer attached to this task, there is * nothing we can sync to usefully. Since the work wants to * sync, it means we should react to the situation by telling * the task it can't continue usefully by stopping it. */ if (!wsi) { lwsl_thread("%s: %s: task %p (%s): No longer bound to any " "wsi to sync to\n", __func__, pool->tp->name, task, task->name); state_transition(task, LWS_TP_STATUS_STOPPING); goto done; } /* * So "tries" times this is the maximum time between SYNC asking * for a callback on writable and actually getting it we are * willing to sit still for. * * If it is exceeded, we will stop the task. */ abstime.tv_sec = time(NULL) + 3; abstime.tv_nsec = 0; task->wanted_writeable_cb = 1; lws_memory_barrier(); /* * This will cause lws_threadpool_tsi_context() to get called * from each tsi service context, where we can safely ask for * a callback on writeable on the wsi we are associated with. */ lws_cancel_service(lws_get_context(wsi)); /* * so the danger here is that we asked for a writable callback * on the wsi, but for whatever reason, we are never going to * get one. To avoid deadlocking forever, we allow a set time * for the sync to happen naturally, otherwise the cond wait * times out and we stop the task. */ if (pthread_cond_timedwait(&task->wake_idle, &pool->lock, &abstime) == ETIMEDOUT) { task->late_sync_retries++; if (!tries) { lwsl_err("%s: %s: task %p (%s): SYNC timed out " "(associated %s)\n", __func__, pool->tp->name, task, task->name, lws_wsi_tag(task_to_wsi(task))); pthread_mutex_unlock(&pool->lock); /* ----------------- - pool unlock */ lws_threadpool_dequeue_task(task); return 1; /* destroyed task */ } continue; } else break; } if (task->status == LWS_TP_STATUS_SYNCING) state_transition(task, temp); lwsl_debug("%s: %p: LWS_TP_RETURN_SYNC out\n", __func__, task); done: pthread_mutex_unlock(&pool->lock); /* ----------------- - pool unlock */ return 0; } #if !defined(WIN32) static int dummy; #endif static void * lws_threadpool_worker(void *d) { struct lws_threadpool_task **c, **c2, *task; struct lws_pool *pool = d; struct lws_threadpool *tp = pool->tp; char buf[160]; while (!tp->destroying) { /* we have no running task... wait and get one from the queue */ pthread_mutex_lock(&tp->lock); /* =================== tp lock */ /* * if there's no task already waiting in the queue, wait for * the wake_idle condition to signal us that might have changed */ while (!tp->task_queue_head && !tp->destroying) pthread_cond_wait(&tp->wake_idle, &tp->lock); if (tp->destroying) { lwsl_notice("%s: bailing\n", __func__); goto doneski; } c = &tp->task_queue_head; c2 = NULL; task = NULL; pool->task = NULL; /* look at the queue tail */ while (*c) { c2 = c; c = &(*c)->task_queue_next; } /* is there a task at the queue tail? */ if (c2 && *c2) { pool->task = task = *c2; task->acquired = pool->acquired = lws_now_usecs(); /* remove it from the queue */ *c2 = task->task_queue_next; task->task_queue_next = NULL; tp->queue_depth--; /* mark it as running */ state_transition(task, LWS_TP_STATUS_RUNNING); } /* someone else got it first... wait and try again */ if (!task) { pthread_mutex_unlock(&tp->lock); /* ------ tp unlock */ continue; } task->wanted_writeable_cb = 0; /* we have acquired a new task */ __lws_threadpool_task_dump(task, buf, sizeof(buf)); lwsl_thread("%s: %s: worker %d ACQUIRING: %s\n", __func__, tp->name, pool->worker_index, buf); tp->running_tasks++; pthread_mutex_unlock(&tp->lock); /* --------------- tp unlock */ /* * 1) The task can return with LWS_TP_RETURN_CHECKING_IN to * "resurface" periodically, and get called again with * cont = 1 immediately to indicate it is picking up where it * left off if the task is not being "stopped". * * This allows long tasks to respond to requests to stop in * a clean and opaque way. * * 2) The task can return with LWS_TP_RETURN_SYNC to register * a "callback on writable" request on the service thread and * block until it hears back from the WRITABLE handler. * * This allows the work on the thread to be synchronized to the * previous work being dispatched cleanly. * * 3) The task can return with LWS_TP_RETURN_FINISHED to * indicate its work is completed nicely. * * 4) The task can return with LWS_TP_RETURN_STOPPED to indicate * it stopped and cleaned up after incomplete work. */ do { lws_usec_t then; int n; if (tp->destroying || !task_to_wsi(task)) { lwsl_info("%s: stopping on wsi gone\n", __func__); state_transition(task, LWS_TP_STATUS_STOPPING); } then = lws_now_usecs(); n = (int)task->args.task(task->args.user, task->status); lwsl_debug(" %d, status %d\n", n, task->status); us_accrue(&task->acc_running, then); if (n & LWS_TP_RETURN_FLAG_OUTLIVE) task->outlive = 1; switch (n & 7) { case LWS_TP_RETURN_CHECKING_IN: /* if not destroying the tp, continue */ break; case LWS_TP_RETURN_SYNC: if (!task_to_wsi(task)) { lwsl_debug("%s: task that wants to " "outlive lost wsi asked " "to sync: bypassed\n", __func__); break; } /* block until writable acknowledges */ then = lws_now_usecs(); if (lws_threadpool_worker_sync(pool, task)) { lwsl_notice("%s: Sync failed\n", __func__); goto doneski; } us_accrue(&task->acc_syncing, then); break; case LWS_TP_RETURN_FINISHED: state_transition(task, LWS_TP_STATUS_FINISHED); break; case LWS_TP_RETURN_STOPPED: state_transition(task, LWS_TP_STATUS_STOPPED); break; } } while (task->status == LWS_TP_STATUS_RUNNING); pthread_mutex_lock(&tp->lock); /* =================== tp lock */ tp->running_tasks--; if (pool->task->status == LWS_TP_STATUS_STOPPING) state_transition(task, LWS_TP_STATUS_STOPPED); /* move the task to the done queue */ pool->task->task_queue_next = tp->task_done_head; tp->task_done_head = task; tp->done_queue_depth++; pool->task->done = lws_now_usecs(); if (!pool->task->args.wsi && (pool->task->status == LWS_TP_STATUS_STOPPED || pool->task->status == LWS_TP_STATUS_FINISHED)) { __lws_threadpool_task_dump(pool->task, buf, sizeof(buf)); lwsl_thread("%s: %s: worker %d REAPING: %s\n", __func__, tp->name, pool->worker_index, buf); /* * there is no longer any wsi attached, so nothing is * going to take care of reaping us. So we must take * care of it ourselves. */ __lws_threadpool_reap(pool->task); } else { __lws_threadpool_task_dump(pool->task, buf, sizeof(buf)); lwsl_thread("%s: %s: worker %d DONE: %s\n", __func__, tp->name, pool->worker_index, buf); /* signal the associated wsi to take a fresh look at * task status */ if (task_to_wsi(pool->task)) { task->wanted_writeable_cb = 1; lws_cancel_service( lws_get_context(task_to_wsi(pool->task))); } } doneski: pool->task = NULL; pthread_mutex_unlock(&tp->lock); /* --------------- tp unlock */ } lwsl_notice("%s: Exiting\n", __func__); /* threadpool is being destroyed */ #if !defined(WIN32) pthread_exit(&dummy); #endif return NULL; } struct lws_threadpool * lws_threadpool_create(struct lws_context *context, const struct lws_threadpool_create_args *args, const char *format, ...) { struct lws_threadpool *tp; va_list ap; int n; tp = lws_malloc(sizeof(*tp) + (sizeof(struct lws_pool) * (unsigned int)args->threads), "threadpool alloc"); if (!tp) return NULL; memset(tp, 0, sizeof(*tp) + (sizeof(struct lws_pool) * (unsigned int)args->threads)); tp->pool_list = (struct lws_pool *)(tp + 1); tp->max_queue_depth = args->max_queue_depth; va_start(ap, format); n = vsnprintf(tp->name, sizeof(tp->name) - 1, format, ap); va_end(ap); lws_context_lock(context, __func__); tp->context = context; tp->tp_list = context->tp_list_head; context->tp_list_head = tp; lws_context_unlock(context); pthread_mutex_init(&tp->lock, NULL); pthread_cond_init(&tp->wake_idle, NULL); for (n = 0; n < args->threads; n++) { #if defined(LWS_HAS_PTHREAD_SETNAME_NP) char name[16]; #endif tp->pool_list[n].tp = tp; tp->pool_list[n].worker_index = n; pthread_mutex_init(&tp->pool_list[n].lock, NULL); if (pthread_create(&tp->pool_list[n].thread, NULL, lws_threadpool_worker, &tp->pool_list[n])) { lwsl_err("thread creation failed\n"); } else { #if defined(LWS_HAS_PTHREAD_SETNAME_NP) lws_snprintf(name, sizeof(name), "%s-%d", tp->name, n); pthread_setname_np(tp->pool_list[n].thread, name); #endif tp->threads_in_pool++; } } return tp; } void lws_threadpool_finish(struct lws_threadpool *tp) { struct lws_threadpool_task **c, *task; pthread_mutex_lock(&tp->lock); /* ======================== tpool lock */ /* nothing new can start, running jobs will abort as STOPPED and the * pool threads will exit ASAP (they are joined in destroy) */ tp->destroying = 1; /* stop everyone in the pending queue and move to the done queue */ c = &tp->task_queue_head; while (*c) { task = *c; *c = task->task_queue_next; task->task_queue_next = tp->task_done_head; tp->task_done_head = task; state_transition(task, LWS_TP_STATUS_STOPPED); tp->queue_depth--; tp->done_queue_depth++; task->done = lws_now_usecs(); c = &task->task_queue_next; } pthread_cond_broadcast(&tp->wake_idle); pthread_mutex_unlock(&tp->lock); /* -------------------- tpool unlock */ } void lws_threadpool_destroy(struct lws_threadpool *tp) { struct lws_threadpool_task *task, *next; struct lws_threadpool **ptp; void *retval; int n; /* remove us from the context list of threadpools */ lws_context_lock(tp->context, __func__); ptp = &tp->context->tp_list_head; while (*ptp) { if (*ptp == tp) { *ptp = tp->tp_list; break; } ptp = &(*ptp)->tp_list; } lws_context_unlock(tp->context); /* * Wake up the threadpool guys and tell them to exit */ pthread_mutex_lock(&tp->lock); /* ======================== tpool lock */ tp->destroying = 1; pthread_cond_broadcast(&tp->wake_idle); pthread_mutex_unlock(&tp->lock); /* -------------------- tpool unlock */ lws_threadpool_dump(tp); lwsl_info("%s: waiting for threads to rejoin\n", __func__); #if defined(WIN32) Sleep(1000); #endif for (n = 0; n < tp->threads_in_pool; n++) { task = tp->pool_list[n].task; pthread_join(tp->pool_list[n].thread, &retval); pthread_mutex_destroy(&tp->pool_list[n].lock); } lwsl_info("%s: all threadpools exited\n", __func__); #if defined(WIN32) Sleep(1000); #endif task = tp->task_done_head; while (task) { next = task->task_queue_next; lws_threadpool_task_cleanup_destroy(task); tp->done_queue_depth--; task = next; } pthread_mutex_destroy(&tp->lock); memset(tp, 0xdd, sizeof(*tp)); lws_free(tp); } /* * We want to stop and destroy the tasks and related priv. */ int lws_threadpool_dequeue_task(struct lws_threadpool_task *task) { struct lws_threadpool *tp; struct lws_threadpool_task **c; int n; tp = task->tp; pthread_mutex_lock(&tp->lock); /* ======================== tpool lock */ if (task->outlive && !tp->destroying) { /* disconnect from wsi, and wsi from task */ lws_dll2_remove(&task->list); task->args.wsi = NULL; #if defined(LWS_WITH_SECURE_STREAMS) task->args.ss = NULL; #endif goto bail; } c = &tp->task_queue_head; /* is he queued waiting for a chance to run? Mark him as stopped and * move him on to the done queue */ while (*c) { if ((*c) == task) { *c = task->task_queue_next; task->task_queue_next = tp->task_done_head; tp->task_done_head = task; state_transition(task, LWS_TP_STATUS_STOPPED); tp->queue_depth--; tp->done_queue_depth++; task->done = lws_now_usecs(); lwsl_debug("%s: tp %p: removed queued task %s\n", __func__, tp, lws_wsi_tag(task_to_wsi(task))); break; } c = &(*c)->task_queue_next; } /* is he on the done queue? */ c = &tp->task_done_head; while (*c) { if ((*c) == task) { *c = task->task_queue_next; task->task_queue_next = NULL; lws_threadpool_task_cleanup_destroy(task); tp->done_queue_depth--; goto bail; } c = &(*c)->task_queue_next; } /* he's not in the queue... is he already running on a thread? */ for (n = 0; n < tp->threads_in_pool; n++) { if (!tp->pool_list[n].task || tp->pool_list[n].task != task) continue; /* * ensure we don't collide with tests or changes in the * worker thread */ pthread_mutex_lock(&tp->pool_list[n].lock); /* * mark him as having been requested to stop... * the caller will hear about it in his service thread * context as a request to close */ state_transition(task, LWS_TP_STATUS_STOPPING); /* disconnect from wsi, and wsi from task */ lws_dll2_remove(&task->list); task->args.wsi = NULL; #if defined(LWS_WITH_SECURE_STREAMS) task->args.ss = NULL; #endif pthread_mutex_unlock(&tp->pool_list[n].lock); lwsl_debug("%s: tp %p: request stop running task " "for %s\n", __func__, tp, lws_wsi_tag(task_to_wsi(task))); break; } if (n == tp->threads_in_pool) { /* can't find it */ lwsl_notice("%s: tp %p: no task for %s, decoupling\n", __func__, tp, lws_wsi_tag(task_to_wsi(task))); lws_dll2_remove(&task->list); task->args.wsi = NULL; #if defined(LWS_WITH_SECURE_STREAMS) task->args.ss = NULL; #endif } bail: pthread_mutex_unlock(&tp->lock); /* -------------------- tpool unlock */ return 0; } int lws_threadpool_dequeue(struct lws *wsi) /* deprecated */ { struct lws_threadpool_task *task; if (!wsi->tp_task_owner.count) return 0; assert(wsi->tp_task_owner.count != 1); task = lws_container_of(wsi->tp_task_owner.head, struct lws_threadpool_task, list); return lws_threadpool_dequeue_task(task); } struct lws_threadpool_task * lws_threadpool_enqueue(struct lws_threadpool *tp, const struct lws_threadpool_task_args *args, const char *format, ...) { struct lws_threadpool_task *task = NULL; va_list ap; if (tp->destroying) return NULL; #if defined(LWS_WITH_SECURE_STREAMS) assert(args->ss || args->wsi); #endif pthread_mutex_lock(&tp->lock); /* ======================== tpool lock */ /* * if there's room on the queue, the job always goes on the queue * first, then any free thread may pick it up after the wake_idle */ if (tp->queue_depth == tp->max_queue_depth) { lwsl_notice("%s: queue reached limit %d\n", __func__, tp->max_queue_depth); goto bail; } /* * create the task object */ task = lws_malloc(sizeof(*task), __func__); if (!task) goto bail; memset(task, 0, sizeof(*task)); pthread_cond_init(&task->wake_idle, NULL); task->args = *args; task->tp = tp; task->created = lws_now_usecs(); va_start(ap, format); vsnprintf(task->name, sizeof(task->name) - 1, format, ap); va_end(ap); /* * add him on the tp task queue */ task->task_queue_next = tp->task_queue_head; state_transition(task, LWS_TP_STATUS_QUEUED); tp->task_queue_head = task; tp->queue_depth++; /* * mark the wsi itself as depending on this tp (so wsi close for * whatever reason can clean up) */ #if defined(LWS_WITH_SECURE_STREAMS) if (args->ss) lws_dll2_add_tail(&task->list, &args->ss->wsi->tp_task_owner); else #endif lws_dll2_add_tail(&task->list, &args->wsi->tp_task_owner); lwsl_thread("%s: tp %s: enqueued task %p (%s) for %s, depth %d\n", __func__, tp->name, task, task->name, lws_wsi_tag(task_to_wsi(task)), tp->queue_depth); /* alert any idle thread there's something new on the task list */ lws_memory_barrier(); pthread_cond_signal(&tp->wake_idle); bail: pthread_mutex_unlock(&tp->lock); /* -------------------- tpool unlock */ return task; } /* this should be called from the service thread */ enum lws_threadpool_task_status lws_threadpool_task_status(struct lws_threadpool_task *task, void **user) { enum lws_threadpool_task_status status; struct lws_threadpool *tp = task->tp; if (!tp) return LWS_TP_STATUS_FINISHED; *user = task->args.user; status = task->status; if (status == LWS_TP_STATUS_FINISHED || status == LWS_TP_STATUS_STOPPED) { char buf[160]; pthread_mutex_lock(&tp->lock); /* ================ tpool lock */ __lws_threadpool_task_dump(task, buf, sizeof(buf)); lwsl_thread("%s: %s: service thread REAPING: %s\n", __func__, tp->name, buf); __lws_threadpool_reap(task); lws_memory_barrier(); pthread_mutex_unlock(&tp->lock); /* ------------ tpool unlock */ } return status; } enum lws_threadpool_task_status lws_threadpool_task_status_noreap(struct lws_threadpool_task *task) { return task->status; } enum lws_threadpool_task_status lws_threadpool_task_status_wsi(struct lws *wsi, struct lws_threadpool_task **_task, void **user) { struct lws_threadpool_task *task; if (!wsi->tp_task_owner.count) { lwsl_notice("%s: wsi has no task, ~=FINISHED\n", __func__); return LWS_TP_STATUS_FINISHED; } assert(wsi->tp_task_owner.count == 1); /* see deprecation docs in hdr */ task = lws_container_of(wsi->tp_task_owner.head, struct lws_threadpool_task, list); *_task = task; return lws_threadpool_task_status(task, user); } void lws_threadpool_task_sync(struct lws_threadpool_task *task, int stop) { lwsl_debug("%s\n", __func__); if (!task) return; if (stop) state_transition(task, LWS_TP_STATUS_STOPPING); pthread_mutex_lock(&task->tp->lock); pthread_cond_signal(&task->wake_idle); pthread_mutex_unlock(&task->tp->lock); } int lws_threadpool_foreach_task_wsi(struct lws *wsi, void *user, int (*cb)(struct lws_threadpool_task *task, void *user)) { struct lws_threadpool_task *task1; if (wsi->tp_task_owner.head == NULL) return 0; task1 = lws_container_of(wsi->tp_task_owner.head, struct lws_threadpool_task, list); pthread_mutex_lock(&task1->tp->lock); /* ================ tpool lock */ lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, wsi->tp_task_owner.head) { struct lws_threadpool_task *task = lws_container_of(d, struct lws_threadpool_task, list); if (cb(task, user)) { pthread_mutex_unlock(&task1->tp->lock); /* ------------ tpool unlock */ return 1; } } lws_end_foreach_dll_safe(d, d1); pthread_mutex_unlock(&task1->tp->lock); /* ------------ tpool unlock */ return 0; } #if defined(LWS_WITH_SECURE_STREAMS) int lws_threadpool_foreach_task_ss(struct lws_ss_handle *ss, void *user, int (*cb)(struct lws_threadpool_task *task, void *user)) { if (!ss->wsi) return 0; return lws_threadpool_foreach_task_wsi(ss->wsi, user, cb); } #endif static int disassociate_wsi(struct lws_threadpool_task *task, void *user) { task->args.wsi = NULL; lws_dll2_remove(&task->list); return 0; } void lws_threadpool_wsi_closing(struct lws *wsi) { lws_threadpool_foreach_task_wsi(wsi, NULL, disassociate_wsi); } struct lws_threadpool_task * lws_threadpool_get_task_wsi(struct lws *wsi) { if (wsi->tp_task_owner.head == NULL) return NULL; return lws_container_of(wsi->tp_task_owner.head, struct lws_threadpool_task, list); } #if defined(LWS_WITH_SECURE_STREAMS) struct lws_threadpool_task * lws_threadpool_get_task_ss(struct lws_ss_handle *ss) { return lws_threadpool_get_task_wsi(ss->wsi); } #endif libwebsockets-4.3.5/lib/plat/000077500000000000000000000000001476025525100161005ustar00rootroot00000000000000libwebsockets-4.3.5/lib/plat/freertos/000077500000000000000000000000001476025525100177315ustar00rootroot00000000000000libwebsockets-4.3.5/lib/plat/freertos/CMakeLists.txt000066400000000000000000000041171476025525100224740ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # # The strategy is to only export to PARENT_SCOPE # # - changes to LIB_LIST # - changes to SOURCES # - includes via include_directories # # and keep everything else private include_directories(. esp32) list(APPEND SOURCES plat/freertos/freertos-fds.c plat/freertos/freertos-init.c plat/freertos/freertos-misc.c plat/freertos/freertos-pipe.c plat/freertos/freertos-service.c plat/freertos/freertos-sockets.c misc/romfs.c) if (LWS_ESP_PLATFORM AND LWS_WITH_DRIVERS) list(APPEND SOURCES plat/freertos/esp32/drivers/settings-esp32.c) if (LWS_WITH_NETWORK) list(APPEND SOURCES plat/freertos/esp32/drivers/netdev/wifi-esp32.c) endif() endif() if (LWS_WITH_FILE_OPS) list(APPEND SOURCES plat/freertos/freertos-file.c) endif() if (LWS_WITH_SYS_ASYNC_DNS OR LWS_WITH_SYS_NTPCLIENT) list(APPEND SOURCES plat/freertos/freertos-resolv.c) endif() # # Keep explicit parent scope exports at end # exports_to_parent_scope() libwebsockets-4.3.5/lib/plat/freertos/esp32/000077500000000000000000000000001476025525100206655ustar00rootroot00000000000000libwebsockets-4.3.5/lib/plat/freertos/esp32/drivers/000077500000000000000000000000001476025525100223435ustar00rootroot00000000000000libwebsockets-4.3.5/lib/plat/freertos/esp32/drivers/gpio-esp32.c000066400000000000000000000052501476025525100244010ustar00rootroot00000000000000/* * esp32 / esp-idf gpio * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include static void lws_gpio_esp32_mode(_lws_plat_gpio_t gpio, int flags) { int mode, pup = GPIO_FLOATING; switch (flags & (LWSGGPIO_FL_READ | LWSGGPIO_FL_WRITE)) { default: lwsl_err("%s: neither read nor write\n", __func__); return; case LWSGGPIO_FL_READ: mode = GPIO_MODE_INPUT; break; case LWSGGPIO_FL_WRITE: mode = GPIO_MODE_OUTPUT; break; case LWSGGPIO_FL_READ | LWSGGPIO_FL_WRITE: mode = GPIO_MODE_INPUT_OUTPUT; break; } switch (flags & (LWSGGPIO_FL_PULLUP | LWSGGPIO_FL_PULLDOWN)) { default: break; case LWSGGPIO_FL_PULLUP: pup = GPIO_PULLUP_ONLY; break; case LWSGGPIO_FL_PULLDOWN: pup = GPIO_PULLDOWN_ONLY; break; case LWSGGPIO_FL_PULLUP | LWSGGPIO_FL_PULLDOWN: pup = GPIO_PULLUP_PULLDOWN; break; } gpio_reset_pin(gpio); gpio_set_direction(gpio, mode); gpio_set_pull_mode(gpio, pup); gpio_set_level(gpio, flags & LWSGGPIO_FL_START_LOW ? 0 : 1); } static int lws_gpio_esp32_read(_lws_plat_gpio_t gpio) { return gpio_get_level(gpio); } static void lws_gpio_esp32_set(_lws_plat_gpio_t gpio, int val) { gpio_set_level(gpio, val); } static int lws_gpio_esp32_irq_mode(_lws_plat_gpio_t gpio, lws_gpio_irq_t irq_type, lws_gpio_irq_cb_t cb, void *arg) { if (gpio_set_intr_type(gpio, irq_type)) return 1; if (cb) return gpio_isr_handler_add(gpio, cb, arg); return gpio_isr_handler_remove(gpio); } const lws_gpio_ops_t lws_gpio_plat = { .mode = lws_gpio_esp32_mode, .read = lws_gpio_esp32_read, .set = lws_gpio_esp32_set, .irq_mode = lws_gpio_esp32_irq_mode, }; libwebsockets-4.3.5/lib/plat/freertos/esp32/drivers/lws-plat-gpio.h000066400000000000000000000023171476025525100252160ustar00rootroot00000000000000/* * lws generic gpio - esp32 platform wrapper * * Written in 2010-2020 by Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ extern const lws_gpio_ops_t lws_gpio_plat; libwebsockets-4.3.5/lib/plat/freertos/esp32/drivers/netdev/000077500000000000000000000000001476025525100236305ustar00rootroot00000000000000libwebsockets-4.3.5/lib/plat/freertos/esp32/drivers/netdev/wifi-esp32.c000066400000000000000000000315541476025525100256740ustar00rootroot00000000000000/* * libwebsockets - esp32 wifi -> lws_netdev_wifi * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * * These are the esp platform wifi-specific netdev pieces. Nothing else should * know any esp-specific apis. * * Operations happen via the generic lws_detdev instantiation for the platform * wifi device, which point in here for operations. We also set up native OS * event hooks per device for wifi and IP stack events, and post them as lws_smd * NETWORK events on the if in the "platform private" namespace. We then * service the events in the lws event loop thread context, which may again * generate lws_smd NETWORK events in the public namespace depending on what * happened. * * Scan requests go through a sul to make sure we don't get "piling on" from * scheduled, timed scans. Scan results go through the lws_smd "washing" and * are actually parsed in lws thread context, where they are converted to lws * netdev scan results and processed by generic code. */ #include "private-lib-core.h" #include "esp_system.h" #include "esp_spi_flash.h" #include "esp_wifi.h" #include #include /* * lws_netdev_instance_t: * lws_netdev_instance_wifi_t: * lws_netdev_instance_wifi_esp32_t */ typedef struct lws_netdev_instance_wifi_esp32 { lws_netdev_instance_wifi_t wnd; esp_event_handler_instance_t instance_any_id; esp_event_handler_instance_t instance_got_ip; wifi_config_t sta_config; } lws_netdev_instance_wifi_esp32_t; /* static wifi_config_t config = { .ap = { .channel = 6, .authmode = WIFI_AUTH_OPEN, .max_connection = 1, } }; */ /* * Platform-specific connect / associate */ int lws_netdev_wifi_connect_plat(lws_netdev_instance_t *nd, const char *ssid, const char *passphrase, uint8_t *bssid) { lws_netdev_instance_wifi_esp32_t *wnde32 = (lws_netdev_instance_wifi_esp32_t *)nd; wnde32->wnd.inst.ops->up(&wnde32->wnd.inst); wnde32->wnd.flags |= LNDIW_MODE_STA; esp_wifi_set_mode(WIFI_MODE_STA); #if 0 /* we will do our own dhcp */ tcpip_adapter_dhcpc_stop(TCPIP_ADAPTER_IF_STA); #endif lws_strncpy((char *)wnde32->sta_config.sta.ssid, ssid, sizeof(wnde32->sta_config.sta.ssid)); lws_strncpy((char *)wnde32->sta_config.sta.password, passphrase, sizeof(wnde32->sta_config.sta.password)); esp_wifi_set_config(WIFI_IF_STA, &wnde32->sta_config); esp_wifi_connect(); return 0; } /* * This is called from the SMD / lws thread context, after we heard there were * scan results on this netdev */ static void lws_esp32_scan_update(lws_netdev_instance_wifi_t *wnd) { // lws_netdevs_t *netdevs = lws_netdevs_from_ndi(&wnd->inst); wifi_ap_record_t ap_records[LWS_WIFI_MAX_SCAN_TRACK], *ar; uint32_t now = lws_now_secs(); uint16_t count_ap_records; int n; count_ap_records = LWS_ARRAY_SIZE(ap_records); if (esp_wifi_scan_get_ap_records(&count_ap_records, ap_records)) { lwsl_err("%s: failed\n", __func__); return; } if (!count_ap_records) return; if (wnd->state != LWSNDVWIFI_STATE_SCAN) return; /* * ... let's collect the OS-specific scan results, and convert then to * lws_netdev sorted by rssi. If we already have it in the scan list, * keep it and keep a little ringbuffer of its rssi along with an * averaging. If it's new, add it into the linked-list sorted by rssi. */ ar = &ap_records[0]; for (n = 0; n < count_ap_records; n++) { lws_wifi_sta_t *w; int m; m = strlen((const char *)ar->ssid); if (!m) goto next; /* * We know this guy from before? */ w = lws_netdev_wifi_scan_find(wnd, (const char *)ar->ssid, ar->bssid); if (!w) { w = lws_zalloc(sizeof(*w) + m + 1, __func__); if (!w) goto next; w->ssid = (char *)&w[1]; memcpy(w->ssid, ar->ssid, m + 1); w->ssid_len = m; memcpy(w->bssid, ar->bssid, 6); lws_dll2_add_sorted(&w->list, &wnd->scan, lws_netdev_wifi_rssi_sort_compare); } if (w->rssi_count == LWS_ARRAY_SIZE(w->rssi)) w->rssi_avg -= w->rssi[w->rssi_next]; else w->rssi_count++; w->rssi[w->rssi_next] = ar->rssi; w->rssi_avg += w->rssi[w->rssi_next++]; w->rssi_next = w->rssi_next & (LWS_ARRAY_SIZE(w->rssi) - 1); w->ch = ar->primary; w->authmode = ar->authmode; w->last_seen = now; next: ar++; } /* * We can do the rest of it using the generic scan list and credentials */ lws_netdev_wifi_scan_select(wnd); } static wifi_scan_config_t scan_config = { .ssid = 0, .bssid = 0, .channel = 0, .show_hidden = true }; void lws_netdev_wifi_scan_plat(lws_netdev_instance_t *nd) { lws_netdev_instance_wifi_t *wnd = (lws_netdev_instance_wifi_t *)nd; if (esp_wifi_scan_start(&scan_config, false)) lwsl_err("%s: %s scan failed\n", __func__, wnd->inst.name); } /* * Platform-private interface events turn up here after going through SMD and * passed down by matching network interface name via generic lws_netdev. All * that messing around gets us from an OS-specific thread with an event to back * here in lws event loop thread context, with the same event bound to a the * netdev it belongs to. */ int lws_netdev_wifi_event_plat(struct lws_netdev_instance *nd, lws_usec_t timestamp, void *buf, size_t len) { lws_netdev_instance_wifi_t *wnd = (lws_netdev_instance_wifi_t *)nd; struct lws_context *ctx = netdev_instance_to_ctx(&wnd->inst); size_t al; /* * netdev-private sync messages? */ if (!lws_json_simple_strcmp(buf, len, "\"type\":", "priv")) { const char *ev = lws_json_simple_find(buf, len, "\"ev\":", &al); if (!ev) return 0; lwsl_notice("%s: smd priv ev %.*s\n", __func__, (int)al, ev); switch (atoi(ev)) { case WIFI_EVENT_STA_START: wnd->state = LWSNDVWIFI_STATE_INITIAL; if (!lws_netdev_wifi_redo_last(wnd)) break; /* * if the "try last successful" one fails, start the * scan by falling through */ case WIFI_EVENT_STA_DISCONNECTED: lws_smd_msg_printf(ctx, LWSSMDCL_NETWORK, "{\"type\":\"linkdown\"," "\"if\":\"%s\"}", wnd->inst.name); wnd->state = LWSNDVWIFI_STATE_SCAN; /* * We do it via the sul so we don't get timed scans * on top of each other */ lws_sul_schedule(ctx, 0, &wnd->sul_scan, lws_netdev_wifi_scan, 1); break; case WIFI_EVENT_STA_CONNECTED: lws_smd_msg_printf(ctx, LWSSMDCL_NETWORK, "{\"type\":\"linkup\"," "\"if\":\"%s\"}", wnd->inst.name); break; case WIFI_EVENT_SCAN_DONE: lws_esp32_scan_update(wnd); break; default: return 0; } return 0; } return 0; } /* * This is coming from a thread context unrelated to lws... the first order is * to turn these into lws_smd events synchronized on lws thread, since we want * to change correspsonding lws netdev object states without locking. */ static void _event_handler_wifi(void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data) { lws_netdev_instance_wifi_t *wnd = (lws_netdev_instance_wifi_t *)arg; struct lws_context *ctx = netdev_instance_to_ctx(&wnd->inst); switch (event_id) { case WIFI_EVENT_STA_START: case WIFI_EVENT_STA_DISCONNECTED: case WIFI_EVENT_SCAN_DONE: case WIFI_EVENT_STA_CONNECTED: /* * These are events in the platform's private namespace, * interpreted only by the lws_smd handler above, ** in the lws * event thread context **. The point of this is to requeue the * event in the lws thread context like a bottom-half. * * To save on registrations, the context's NETWORK smd * participant passes messages to lws_netdev, who passes ones * that have if matching the netdev name to that netdev's * (*event) handler. * * The other handler may emit generic network state SMD events * for other things to consume. */ lws_smd_msg_printf(ctx, LWSSMDCL_NETWORK, "{\"type\":\"priv\",\"if\":\"%s\",\"ev\":%d}", wnd->inst.name, (int)event_id); break; default: return; } } #if 0 static int espip_to_sa46(lws_sockaddr46 *sa46, esp_ip_addr_t *eip) { memset(sa46, 0, sizeof(sa46)); switch (eip->type) { case ESP_IPADDR_TYPE_V4: sa46->sa4.sin_family = AF_INET; memcpy(sa46->sa4.sin_addr, &eip->u_addr.ip4.addr, ); return; case ESP_IPADDR_TYPE_V6: } } #endif /* * This is coming from a thread context unrelated to lws */ static void _event_handler_ip(void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data) { lws_netdev_instance_wifi_t *wnd = (lws_netdev_instance_wifi_t *)arg; lws_netdevs_t *netdevs = lws_netdevs_from_ndi(&wnd->inst); struct lws_context *ctx = lws_context_from_netdevs(netdevs); if (event_id == IP_EVENT_STA_GOT_IP) { ip_event_got_ip_t *e = (ip_event_got_ip_t *)event_data; char ip[16]; #if 0 tcpip_adapter_dns_info_t e32ip; /* * Since atm we get this via DHCP, presumably we can get ahold * of related info set by the router */ if (tcpip_adapter_get_dns_info(TCPIP_ADAPTER_IF_STA, TCPIP_ADAPTER_DNS_MAIN, /* also _BACKUP, _FALLBACK */ &e32ip)) { lwsl_err("%s: there's no dns server set\n", __func__); e32ip.ip.u_addr.ipv4 = 0x08080808; e32ip.ip.type = ESP_IPADDR_TYPE_V4; } netdevs->sa46_dns_resolver. #endif lws_write_numeric_address((void *)&e->ip_info.ip, 4, ip, sizeof(ip)); lws_smd_msg_printf(ctx, LWSSMDCL_NETWORK, "{\"type\":\"ipacq\",\"if\":\"%s\"," "\"ipv4\":\"%s\"}", wnd->inst.name, ip); } } /* * This is the platform (esp-idf) init for any kind of networking to be * available at all */ int lws_netdev_plat_init(void) { nvs_flash_init(); esp_netif_init(); ESP_ERROR_CHECK(esp_event_loop_create_default()); return 0; } /* * This is the platform (esp-idf) init for any wifi to be available at all */ int lws_netdev_plat_wifi_init(void) { wifi_init_config_t wic = WIFI_INIT_CONFIG_DEFAULT(); int n; esp_netif_create_default_wifi_sta(); n = esp_wifi_init(&wic); if (n) { lwsl_err("%s: wifi init fail: %d\n", __func__, n); return 1; } return 0; } struct lws_netdev_instance * lws_netdev_wifi_create_plat(struct lws_context *ctx, const lws_netdev_ops_t *ops, const char *name, void *platinfo) { lws_netdev_instance_wifi_esp32_t *wnde32 = lws_zalloc( sizeof(*wnde32), __func__); if (!wnde32) return NULL; wnde32->wnd.inst.type = LWSNDTYP_WIFI; lws_netdev_instance_create(&wnde32->wnd.inst, ctx, ops, name, platinfo); return &wnde32->wnd.inst; } int lws_netdev_wifi_configure_plat(struct lws_netdev_instance *nd, lws_netdev_config_t *config) { return 0; } int lws_netdev_wifi_up_plat(struct lws_netdev_instance *nd) { lws_netdev_instance_wifi_esp32_t *wnde32 = (lws_netdev_instance_wifi_esp32_t *)nd; struct lws_context *ctx = netdev_instance_to_ctx(&wnde32->wnd.inst); if (wnde32->wnd.flags & LNDIW_UP) return 0; ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &_event_handler_ip, nd, &wnde32->instance_got_ip)); ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &_event_handler_wifi, nd, &wnde32->instance_any_id)); esp_wifi_start(); wnde32->wnd.flags |= LNDIW_UP; lws_smd_msg_printf(ctx, LWSSMDCL_NETWORK, "{\"type\":\"up\",\"if\":\"%s\"}", wnde32->wnd.inst.name); return 0; } int lws_netdev_wifi_down_plat(struct lws_netdev_instance *nd) { lws_netdev_instance_wifi_esp32_t *wnde32 = (lws_netdev_instance_wifi_esp32_t *)nd; struct lws_context *ctx = netdev_instance_to_ctx(&wnde32->wnd.inst); if (!(wnde32->wnd.flags & LNDIW_UP)) return 0; lws_smd_msg_printf(ctx, LWSSMDCL_NETWORK, "{\"type\":\"down\",\"if\":\"%s\"}", wnde32->wnd.inst.name); esp_wifi_stop(); esp_event_handler_instance_unregister(IP_EVENT, IP_EVENT_STA_GOT_IP, &wnde32->instance_got_ip); esp_event_handler_instance_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, &wnde32->instance_any_id); wnde32->wnd.flags &= ~LNDIW_UP; return 0; } void lws_netdev_wifi_destroy_plat(struct lws_netdev_instance **pnd) { lws_free(*pnd); *pnd = NULL; } libwebsockets-4.3.5/lib/plat/freertos/esp32/drivers/pwm-esp32.c000066400000000000000000000051751476025525100242540ustar00rootroot00000000000000/* * esp32 / esp-idf pwm * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "soc/ledc_reg.h" #include "driver/ledc.h" #define _LEDC_HIGH_SPEED_MODE 0 static const ledc_timer_config_t tc = { .speed_mode = _LEDC_HIGH_SPEED_MODE, .duty_resolution = LEDC_TIMER_13_BIT, .timer_num = LEDC_TIMER_0, .freq_hz = 5000, .clk_cfg = LEDC_AUTO_CLK }; int lws_pwm_plat_init(const struct lws_pwm_ops *lo) { ledc_channel_config_t lc = { .duty = 8191, .intr_type = LEDC_INTR_FADE_END, .speed_mode = _LEDC_HIGH_SPEED_MODE, .timer_sel = LEDC_TIMER_0, }; size_t n; ledc_timer_config(&tc); for (n = 0; n < lo->count_pwm_map; n++) { lc.channel = LEDC_CHANNEL_0 + lo->pwm_map[n].index; lc.gpio_num = lo->pwm_map[n].gpio; ledc_channel_config(&lc); ledc_set_duty(_LEDC_HIGH_SPEED_MODE, lc.channel, 0); ledc_update_duty(_LEDC_HIGH_SPEED_MODE, lc.channel); } return 0; } void lws_pwm_plat_intensity(const struct lws_pwm_ops *lo, _lws_plat_gpio_t gpio, lws_led_intensity_t inten) { size_t n; for (n = 0; n < lo->count_pwm_map; n++) { if (lo->pwm_map[n].gpio == gpio) { if (!lo->pwm_map[n].active_level) inten = 65535 - inten; ledc_set_duty(_LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_0 + lo->pwm_map[n].index, inten >> 3); ledc_update_duty(_LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_0 + lo->pwm_map[n].index); return; } } lwsl_err("%s: unknown gpio for pwm\n", __func__); } libwebsockets-4.3.5/lib/plat/freertos/esp32/drivers/settings-esp32.c000066400000000000000000000045621476025525100253100ustar00rootroot00000000000000/* * esp32 / esp-idf NV settings shim * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include #include int lws_settings_plat_get(lws_settings_instance_t *si, const char *name, uint8_t *dest, size_t *max_actual) { int n; n = nvs_flash_init_partition((const char *)si->opaque_plat); lwsl_notice("%s: init partition %d\n", __func__, n); if (n == ESP_ERR_NOT_FOUND) return 1; if (nvs_open_from_partition((const char *)si->opaque_plat, "_lws_settings", NVS_READONLY, (nvs_handle_t *)&si->handle_plat)) return 1; n = nvs_get_blob((nvs_handle_t)si->handle_plat, name, dest, max_actual); nvs_close((nvs_handle_t)si->handle_plat); return !!n; } int lws_settings_plat_set(lws_settings_instance_t *si, const char *name, const uint8_t *src, size_t len) { int n = nvs_flash_init_partition((const char *)si->opaque_plat); lwsl_notice("%s: init partition %d\n", __func__, n); if (n == ESP_ERR_NOT_FOUND) return 1; if (nvs_open_from_partition((const char *)si->opaque_plat, "_lws_settings", NVS_READWRITE, (nvs_handle_t *)&si->handle_plat)) return 1; n = nvs_set_blob((nvs_handle_t)si->handle_plat, name, src, len); nvs_commit((nvs_handle_t)si->handle_plat); nvs_close((nvs_handle_t)si->handle_plat); return 0; } libwebsockets-4.3.5/lib/plat/freertos/freertos-fds.c000066400000000000000000000040101476025525100224730ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" void lws_plat_insert_socket_into_fds(struct lws_context *context, struct lws *wsi) { struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; pt->fds[pt->fds_count++].revents = 0; } void lws_plat_delete_socket_from_fds(struct lws_context *context, struct lws *wsi, int m) { struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; pt->fds_count--; } int lws_plat_change_pollfd(struct lws_context *context, struct lws *wsi, struct lws_pollfd *pfd) { return 0; } int insert_wsi(const struct lws_context *context, struct lws *wsi) { assert(context->lws_lookup[wsi->desc.sockfd - lws_plat_socket_offset()] == 0); context->lws_lookup[wsi->desc.sockfd - \ lws_plat_socket_offset()] = wsi; return 0; } libwebsockets-4.3.5/lib/plat/freertos/freertos-file.c000066400000000000000000000112631476025525100226460ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" int lws_plat_apply_FD_CLOEXEC(int n) { return 0; } lws_fop_fd_t IRAM_ATTR _lws_plat_file_open(const struct lws_plat_file_ops *fops, const char *filename, const char *vpath, lws_fop_flags_t *flags) { struct stat stat_buf; lws_fop_fd_t fop_fd; int ret = open(filename, *flags, 0664); if (ret < 0) return NULL; if (fstat(ret, &stat_buf) < 0) goto bail; fop_fd = lws_malloc(sizeof(*fop_fd), "fops open"); if (!fop_fd) goto bail; fop_fd->fops = fops; fop_fd->fd = ret; fop_fd->flags = *flags; fop_fd->filesystem_priv = NULL; /* we don't use it */ fop_fd->pos = 0; fop_fd->len = stat_buf.st_size; return fop_fd; bail: close(ret); return NULL; } int IRAM_ATTR _lws_plat_file_close(lws_fop_fd_t *fops_fd) { int fd = (*fops_fd)->fd; lws_free(*fops_fd); *fops_fd = NULL; return close(fd); } lws_fileofs_t IRAM_ATTR _lws_plat_file_seek_cur(lws_fop_fd_t fops_fd, lws_fileofs_t offset) { return lseek(fops_fd->fd, offset, SEEK_CUR); } int IRAM_ATTR _lws_plat_file_read(lws_fop_fd_t fops_fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len) { long n; n = read(fops_fd->fd, buf, len); if (n == -1) { *amount = 0; return -1; } fops_fd->pos += n; *amount = n; return 0; } int IRAM_ATTR _lws_plat_file_write(lws_fop_fd_t fops_fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len) { long n; n = write(fops_fd->fd, buf, len); if (n == -1) { *amount = 0; return -1; } fops_fd->pos += n; *amount = n; return 0; } #if defined(LWS_AMAZON_RTOS) int lws_find_string_in_file(const char *filename, const char *string, int stringlen) { return 0; } #else int lws_find_string_in_file(const char *filename, const char *string, int stringlen) { nvs_handle nvh; size_t s; int n; char buf[64], result[64]; const char *p = strchr(string, ':'), *q; if (!p) return 0; q = string; n = 0; while ((size_t)n < sizeof(buf) - 1 && q != p) buf[n++] = *q++; buf[n] = '\0'; ESP_ERROR_CHECK(nvs_open(filename, NVS_READWRITE, &nvh)); s = sizeof(result) - 1; n = nvs_get_str(nvh, buf, result, &s); nvs_close(nvh); if (n != ESP_OK) return 0; return !strcmp(p + 1, result); } #endif #if !defined(LWS_AMAZON_RTOS) int lws_plat_write_file(const char *filename, void *buf, size_t len) { nvs_handle nvh; int n; if (nvs_open("lws-station", NVS_READWRITE, &nvh)) { lwsl_notice("%s: failed to open nvs\n", __func__); return -1; } n = nvs_set_blob(nvh, filename, buf, len); if (n >= 0) nvs_commit(nvh); nvs_close(nvh); lwsl_notice("%s: wrote %s (%d)\n", __func__, filename, n); return n; } /* we write vhostname.cert.pem and vhostname.key.pem, 0 return means OK */ int lws_plat_write_cert(struct lws_vhost *vhost, int is_key, int fd, void *buf, size_t len) { const char *name = vhost->tls.alloc_cert_path; if (is_key) name = vhost->tls.key_path; return lws_plat_write_file(name, buf, len) < 0; } int lws_plat_read_file(const char *filename, void *buf, size_t len) { nvs_handle nvh; size_t s = 0; int n = 0; if (nvs_open("lws-station", NVS_READWRITE, &nvh)) { lwsl_notice("%s: failed to open nvs\n", __func__); return 1; } ESP_ERROR_CHECK(nvs_open("lws-station", NVS_READWRITE, &nvh)); if (nvs_get_blob(nvh, filename, NULL, &s) != ESP_OK) goto bail; if (s > len) goto bail; n = nvs_get_blob(nvh, filename, buf, &s); nvs_close(nvh); lwsl_notice("%s: read %s (%d)\n", __func__, filename, (int)s); if (n) return -1; return (int)s; bail: nvs_close(nvh); return -1; } #endif /* LWS_AMAZON_RTOS */ libwebsockets-4.3.5/lib/plat/freertos/freertos-init.c000066400000000000000000000066571476025525100227050ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" int lws_plat_context_early_init(void) { return 0; } void lws_plat_context_early_destroy(struct lws_context *context) { #if defined(LWS_AMAZON_RTOS) && defined(LWS_WITH_MBEDTLS) mbedtls_ctr_drbg_free(&context->mcdc); mbedtls_entropy_free(&context->mec); #endif } void lws_plat_context_late_destroy(struct lws_context *context) { #ifdef LWS_WITH_PLUGINS if (context->plugin_list) lws_plat_plugins_destroy(context); #endif if (context->lws_lookup) lws_free(context->lws_lookup); } #if defined(LWS_WITH_HTTP2) /* * These are the default SETTINGS used on this platform. The user * can selectively modify them for a vhost during vhost creation. */ const struct http2_settings lws_h2_defaults_esp32 = { { 1, /* H2SET_HEADER_TABLE_SIZE */ 512, /* H2SET_ENABLE_PUSH */ 0, /* H2SET_MAX_CONCURRENT_STREAMS */ 8, /* H2SET_INITIAL_WINDOW_SIZE */ 0, /* H2SET_MAX_FRAME_SIZE */ 16384, /* H2SET_MAX_HEADER_LIST_SIZE */ 512, /* H2SET_RESERVED7 */ 0, /* H2SET_ENABLE_CONNECT_PROTOCOL */ 1, }}; #endif int lws_plat_init(struct lws_context *context, const struct lws_context_creation_info *info) { #if defined(LWS_AMAZON_RTOS) && defined(LWS_WITH_MBEDTLS) int n; /* initialize platform random through mbedtls */ mbedtls_entropy_init(&context->mec); mbedtls_ctr_drbg_init(&context->mcdc); n = mbedtls_ctr_drbg_seed(&context->mcdc, mbedtls_entropy_func, &context->mec, NULL, 0); if (n) { lwsl_err("%s: mbedtls_ctr_drbg_seed() returned 0x%x\n", __func__, n); return 1; } #endif /* context has the global fd lookup array */ context->lws_lookup = lws_zalloc(sizeof(struct lws *) * context->max_fds, "esp32 lws_lookup"); if (context->lws_lookup == NULL) { lwsl_err("OOM on lws_lookup array for %d connections\n", context->max_fds); return 1; } lwsl_notice(" mem: platform fd map: %5lu bytes\n", (unsigned long)(sizeof(struct lws *) * context->max_fds)); #ifdef LWS_WITH_PLUGINS if (info->plugin_dirs) lws_plat_plugins_init(context, info->plugin_dirs); #endif #if defined(LWS_WITH_HTTP2) /* override settings */ context->set = lws_h2_defaults_esp32; #endif #if defined(LWS_ESP_PLATFORM) gpio_install_isr_service(0); #endif return 0; } libwebsockets-4.3.5/lib/plat/freertos/freertos-misc.c000066400000000000000000000050511476025525100226600ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" /* * Normally you don't want this, use lws_sul instead inside the event loop. * But sometimes for drivers it makes sense, so there's an internal-only * crossplatform api for it. */ void lws_msleep(unsigned int ms) { vTaskDelay(portTICK_PERIOD_MS > ms ? 1 : ms / portTICK_PERIOD_MS); } lws_usec_t lws_now_usecs(void) { struct timeval tv; gettimeofday(&tv, NULL); return ((unsigned long long)tv.tv_sec * 1000000LL) + tv.tv_usec; } size_t lws_get_random(struct lws_context *context, void *buf, size_t len) { #if defined(LWS_WITH_ESP32) uint8_t *pb = buf; while (len) { uint32_t r = esp_random(); uint8_t *p = (uint8_t *)&r; int b = 4; if (len < (size_t)b) b = len; len -= b; while (b--) *pb++ = p[b]; } return pb - (uint8_t *)buf; #else #if defined(LWS_WITH_MBEDTLS) int n; n = mbedtls_ctr_drbg_random(&context->mcdc, buf, len); if (!n) return len; /* failed */ lwsl_err("%s: mbedtls_ctr_drbg_random returned 0x%x\n", __func__, n); #endif return 0; #endif } void lwsl_emit_syslog(int level, const char *line) { lwsl_emit_stderr(level, line); } int lws_plat_drop_app_privileges(struct lws_context *context, int actually_init) { return 0; } int lws_plat_recommended_rsa_bits(void) { /* * 2048-bit key generation takes up to a minute on ESP32, 4096 * is like 15 minutes + */ return 2048; } libwebsockets-4.3.5/lib/plat/freertos/freertos-pipe.c000066400000000000000000000077201476025525100226670ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" int lws_plat_pipe_create(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; struct sockaddr_in *si = &wsi->a.context->frt_pipe_si; lws_sockfd_type *fd = pt->dummy_pipe_fds; socklen_t sl; /* * There's no pipe abstraction on lwip / freertos... use a UDP socket * listening on 127.0.0.1:xxxx and send a byte to it from a second UDP * socket to cancel the wait. * * Set the port to 0 at the bind, so lwip will choose a free one in the * ephemeral range for us. */ fd[0] = socket(AF_INET, SOCK_DGRAM, 0); if (fd[0] < 0) goto bail; fd[1] = socket(AF_INET, SOCK_DGRAM, 0); if (fd[1] < 0) goto bail; /* * No need for memset since it's in zalloc'd context... it's in the * context so we can reuse the prepared sockaddr to send tp fd[0] whem * we want to cancel the wait */ si->sin_family = AF_INET; si->sin_addr.s_addr = htonl(INADDR_LOOPBACK); si->sin_port = 0; if (bind(fd[0], (const struct sockaddr *)si, sizeof(*si)) < 0) goto bail; /* * Query the socket to set context->frt_pipe_si to the full sockaddr it * wants to be addressed by, including the port that lwip chose. * * Afterwards, we can use this prepared sockaddr stashed in the context * to trigger the "pipe" without any other preliminaries. */ sl = sizeof(*si); if (getsockname(fd[0], (struct sockaddr *)si, &sl)) goto bail; lwsl_info("%s: cancel UDP skt port %d\n", __func__, ntohs(si->sin_port)); return 0; bail: lwsl_err("%s: failed\n", __func__); return 1; } int lws_plat_pipe_signal(struct lws_context *ctx, int tsi) { struct lws_context_per_thread *pt = &ctx->pt[tsi]; struct sockaddr_in *si = &ctx->frt_pipe_si; lws_sockfd_type *fd = pt->dummy_pipe_fds; uint8_t u = 0; int n; /* * Send a single UDP byte payload to the listening socket fd[0], forcing * the event loop wait to wake. fd[1] and context->frt_pipe_si are * set at context creation and are static, the UDP sendto is supposed to * be threadsafe for lwip: * * https://lwip.fandom.com/wiki/LwIP_and_multithreading * * Sockets generally can't be used by more than one application thread * (on udp/raw netconn, doing a sendto/recv is currently possible). */ n = sendto(fd[1], &u, 1, 0, (struct sockaddr *)si, sizeof(*si)); return n != 1; } void lws_plat_pipe_close(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; lws_sockfd_type *fd = pt->dummy_pipe_fds; if (fd[0] && fd[0] != -1) close(fd[0]); if (fd[1] && fd[1] != -1) close(fd[1]); fd[0] = fd[1] = -1; } int lws_plat_pipe_is_fd_assocated(struct lws_context *cx, int tsi, lws_sockfd_type fd) { struct lws_context_per_thread *pt = &cx->pt[tsi]; return fd == pt->dummy_pipe_fds[0] || fd == pt->dummy_pipe_fds[1]; } libwebsockets-4.3.5/lib/plat/freertos/freertos-resolv.c000066400000000000000000000035731476025525100232460ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #if defined(LWS_WITH_SYS_ASYNC_DNS) lws_async_dns_server_check_t lws_plat_asyncdns_init(struct lws_context *context, lws_sockaddr46 *sa46) { uint32_t ipv4; lws_async_dns_server_check_t s = LADNS_CONF_SERVER_CHANGED; FreeRTOS_GetAddressConfiguration(NULL, NULL, NULL, &ipv4); sa46->sa4.sin_family = AF_INET; if (sa46->sa4.sin_addr.s_addr == ipv4) s = LADNS_CONF_SERVER_SAME; sa46->sa4.sin_addr.s_addr = ipv4; return s; } #endif int lws_plat_ntpclient_config(struct lws_context *context) { lws_system_blob_heap_append(lws_system_get_blob(context, LWS_SYSBLOB_TYPE_NTP_SERVER, 0), (const uint8_t *)"pool.ntp.org", 13); return 0; } libwebsockets-4.3.5/lib/plat/freertos/freertos-service.c000066400000000000000000000125751476025525100233760ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" int lws_plat_service(struct lws_context *context, int timeout_ms) { int n = _lws_plat_service_tsi(context, timeout_ms, 0); #if !defined(LWS_AMAZON_RTOS) esp_task_wdt_reset(); #endif return n; } int _lws_plat_service_tsi(struct lws_context *context, int timeout_ms, int tsi) { volatile struct lws_context_per_thread *vpt; struct lws_context_per_thread *pt; lws_usec_t timeout_us; int n = -1, m, c, a = 0; /* stay dead once we are dead */ if (!context) return 1; pt = &context->pt[tsi]; vpt = (volatile struct lws_context_per_thread *)pt; { unsigned long m = lws_now_secs(); if (m > context->time_last_state_dump) { context->time_last_state_dump = m; #if defined(LWS_ESP_PLATFORM) n = esp_get_free_heap_size(); #else n = xPortGetFreeHeapSize(); #endif if ((unsigned int)n != context->last_free_heap) { if ((unsigned int)n > context->last_free_heap) lwsl_debug(" heap :%ld (+%ld)\n", (unsigned long)n, (unsigned long)(n - context->last_free_heap)); else lwsl_debug(" heap :%ld (-%ld)\n", (unsigned long)n, (unsigned long)( context->last_free_heap - n)); context->last_free_heap = n; } } } if (timeout_ms < 0) timeout_ms = 0; else /* force a default timeout of 23 days */ timeout_ms = 2000000000; timeout_us = ((lws_usec_t)timeout_ms) * LWS_US_PER_MS; if (!pt->service_tid_detected && context->vhost_list) { lws_fakewsi_def_plwsa(pt); lws_fakewsi_prep_plwsa_ctx(context); pt->service_tid = context->vhost_list->protocols[0].callback( (struct lws *)plwsa, LWS_CALLBACK_GET_THREAD_ID, NULL, NULL, 0); pt->service_tid_detected = 1; } /* * is there anybody with pending stuff that needs service forcing? */ #if !defined(LWS_AMAZON_RTOS) again: #endif n = 0; if (lws_service_adjust_timeout(context, 1, tsi)) { #if defined(LWS_AMAZON_RTOS) again: #endif /* LWS_AMAZON_RTOS */ a = 0; if (timeout_us) { lws_usec_t us; lws_pt_lock(pt, __func__); /* don't stay in poll wait longer than next hr timeout */ us = __lws_sul_service_ripe(pt->pt_sul_owner, LWS_COUNT_PT_SUL_OWNERS, lws_now_usecs()); if (us && us < timeout_us) timeout_us = us; lws_pt_unlock(pt); } // n = poll(pt->fds, pt->fds_count, timeout_ms); { fd_set readfds, writefds, errfds; struct timeval tv = { timeout_us / LWS_US_PER_SEC, timeout_us % LWS_US_PER_SEC }, *ptv = &tv; int max_fd = 0; FD_ZERO(&readfds); FD_ZERO(&writefds); FD_ZERO(&errfds); for (n = 0; n < (int)pt->fds_count; n++) { pt->fds[n].revents = 0; if (pt->fds[n].fd >= max_fd) max_fd = pt->fds[n].fd; if (pt->fds[n].events & LWS_POLLIN) FD_SET(pt->fds[n].fd, &readfds); if (pt->fds[n].events & LWS_POLLOUT) FD_SET(pt->fds[n].fd, &writefds); FD_SET(pt->fds[n].fd, &errfds); } vpt->inside_poll = 1; lws_memory_barrier(); n = select(max_fd + 1, &readfds, &writefds, &errfds, ptv); vpt->inside_poll = 0; lws_memory_barrier(); n = 0; for (m = 0; m < (int)pt->fds_count; m++) { c = 0; if (FD_ISSET(pt->fds[m].fd, &readfds)) { pt->fds[m].revents |= LWS_POLLIN; c = 1; } if (FD_ISSET(pt->fds[m].fd, &writefds)) { pt->fds[m].revents |= LWS_POLLOUT; c = 1; } if (FD_ISSET(pt->fds[m].fd, &errfds)) { // lwsl_notice("errfds %d\n", pt->fds[m].fd); pt->fds[m].revents |= LWS_POLLHUP; c = 1; } if (c) n++; } } m = 0; #if defined(LWS_ROLE_WS) && !defined(LWS_WITHOUT_EXTENSIONS) m |= !!pt->ws.rx_draining_ext_list; #endif #if defined(LWS_WITH_TLS) if (pt->context->tls_ops && pt->context->tls_ops->fake_POLLIN_for_buffered) m |= pt->context->tls_ops->fake_POLLIN_for_buffered(pt); #endif if (!m && !n) return 0; } else a = 1; m = lws_service_flag_pending(context, tsi); c = m ? -1 : n; /* any socket with events to service? */ for (n = 0; n < (int)pt->fds_count && c; n++) { if (!pt->fds[n].revents) continue; c--; m = lws_service_fd_tsi(context, &pt->fds[n], tsi); if (m < 0) return -1; /* if something closed, retry this slot */ if (m) n--; } if (a) goto again; return 0; } libwebsockets-4.3.5/lib/plat/freertos/freertos-sockets.c000066400000000000000000000217221476025525100234030ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include #if defined(LWS_WITH_MBEDTLS) #if defined(LWS_HAVE_MBEDTLS_NET_SOCKETS) #include "mbedtls/net_sockets.h" #else #include "mbedtls/net.h" #endif #endif int lws_send_pipe_choked(struct lws *wsi) { struct lws *wsi_eff = wsi; fd_set writefds; struct timeval tv = { 0, 0 }; int n; #if defined(LWS_WITH_HTTP2) wsi_eff = lws_get_network_wsi(wsi); #endif /* the fact we checked implies we avoided back-to-back writes */ wsi_eff->could_have_pending = 0; /* treat the fact we got a truncated send pending as if we're choked */ if (lws_has_buffered_out(wsi) #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) || wsi->http.comp_ctx.buflist_comp || wsi->http.comp_ctx.may_have_more #endif ) return 1; FD_ZERO(&writefds); FD_SET(wsi_eff->desc.sockfd, &writefds); n = select(wsi_eff->desc.sockfd + 1, NULL, &writefds, NULL, &tv); if (n < 0) return 1; /* choked */ return !n; /* n = 0 = not writable = choked */ } int lws_poll_listen_fd(struct lws_pollfd *fd) { fd_set readfds; struct timeval tv = { 0, 0 }; FD_ZERO(&readfds); FD_SET(fd->fd, &readfds); return select(fd->fd + 1, &readfds, NULL, NULL, &tv); } int lws_plat_set_nonblocking(lws_sockfd_type fd) { return fcntl(fd, F_SETFL, O_NONBLOCK) < 0; } int lws_plat_set_socket_options(struct lws_vhost *vhost, int fd, int unix_skt) { int optval = 1; socklen_t optlen = sizeof(optval); #if defined(__APPLE__) || \ defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || \ defined(__NetBSD__) || \ defined(__OpenBSD__) struct protoent *tcp_proto; #endif if (vhost->ka_time) { /* enable keepalive on this socket */ optval = 1; if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (const void *)&optval, optlen) < 0) return 1; #if defined(__APPLE__) || \ defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || \ defined(__NetBSD__) || \ defined(__CYGWIN__) || defined(__OpenBSD__) || defined (__sun) /* * didn't find a way to set these per-socket, need to * tune kernel systemwide values */ #else /* set the keepalive conditions we want on it too */ optval = vhost->ka_time; if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, (const void *)&optval, optlen) < 0) return 1; optval = vhost->ka_interval; if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPINTVL, (const void *)&optval, optlen) < 0) return 1; optval = vhost->ka_probes; if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPCNT, (const void *)&optval, optlen) < 0) return 1; #endif } /* Disable Nagle */ optval = 1; if (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &optval, optlen) < 0) return 1; return lws_plat_set_nonblocking(fd); } static const int ip_opt_lws_flags[] = { LCCSCF_IP_LOW_LATENCY, LCCSCF_IP_HIGH_THROUGHPUT, LCCSCF_IP_HIGH_RELIABILITY, LCCSCF_IP_LOW_COST }, ip_opt_val[] = { IPTOS_LOWDELAY, IPTOS_THROUGHPUT, IPTOS_RELIABILITY, IPTOS_MINCOST }; #if !defined(LWS_WITH_NO_LOGS) static const char *ip_opt_names[] = { "LOWDELAY", "THROUGHPUT", "RELIABILITY", "MINCOST" }; #endif int lws_plat_set_socket_options_ip(lws_sockfd_type fd, uint8_t pri, int lws_flags) { int optval = (int)pri, ret = 0, n; socklen_t optlen = sizeof(optval); #if !defined(LWS_WITH_NO_LOGS) int en; #endif #if defined(SO_PRIORITY) if (pri) { /* 0 is the default already */ if (setsockopt(fd, SOL_SOCKET, SO_PRIORITY, (const void *)&optval, optlen) < 0) { #if !defined(LWS_WITH_NO_LOGS) en = errno; lwsl_warn("%s: unable to set socket pri %d: errno %d\n", __func__, (int)pri, en); #endif ret = 1; } else lwsl_notice("%s: set pri %u\n", __func__, pri); } #endif for (n = 0; n < 4; n++) { if (!(lws_flags & ip_opt_lws_flags[n])) continue; optval = (int)ip_opt_val[n]; if (setsockopt(fd, IPPROTO_IP, IP_TOS, (const void *)&optval, optlen) < 0) { #if !defined(LWS_WITH_NO_LOGS) en = errno; lwsl_warn("%s: unable to set %s: errno %d\n", __func__, ip_opt_names[n], en); #endif ret = 1; } else lwsl_notice("%s: set ip flag %s\n", __func__, ip_opt_names[n]); } return ret; } /* cast a struct sockaddr_in6 * into addr for ipv6 */ int lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr, size_t addrlen) { #if 0 int rc = LWS_ITOSA_NOT_EXIST; struct ifaddrs *ifr; struct ifaddrs *ifc; #ifdef LWS_WITH_IPV6 struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)addr; #endif getifaddrs(&ifr); for (ifc = ifr; ifc != NULL && rc; ifc = ifc->ifa_next) { if (!ifc->ifa_addr) continue; lwsl_info(" interface %s vs %s\n", ifc->ifa_name, ifname); if (strcmp(ifc->ifa_name, ifname)) continue; switch (ifc->ifa_addr->sa_family) { case AF_INET: #ifdef LWS_WITH_IPV6 if (ipv6) { /* map IPv4 to IPv6 */ memset((char *)&addr6->sin6_addr, 0, sizeof(struct in6_addr)); addr6->sin6_addr.s6_addr[10] = 0xff; addr6->sin6_addr.s6_addr[11] = 0xff; memcpy(&addr6->sin6_addr.s6_addr[12], &((struct sockaddr_in *)ifc->ifa_addr)->sin_addr, sizeof(struct in_addr)); } else #endif memcpy(addr, (struct sockaddr_in *)ifc->ifa_addr, sizeof(struct sockaddr_in)); break; #ifdef LWS_WITH_IPV6 case AF_INET6: memcpy(&addr6->sin6_addr, &((struct sockaddr_in6 *)ifc->ifa_addr)->sin6_addr, sizeof(struct in6_addr)); break; #endif default: continue; } rc = LWS_ITOSA_USABLE; } freeifaddrs(ifr); if (rc == LWS_ITOSA_NOT_EXIST) { /* check if bind to IP address */ #ifdef LWS_WITH_IPV6 if (inet_pton(AF_INET6, ifname, &addr6->sin6_addr) == 1) rc = LWS_ITOSA_USABLE; else #endif if (inet_pton(AF_INET, ifname, &addr->sin_addr) == 1) rc = LWS_ITOSA_USABLE; } return rc; #endif return LWS_ITOSA_NOT_EXIST; } const char * lws_plat_inet_ntop(int af, const void *src, char *dst, socklen_t cnt) { return inet_ntop(af, src, dst, cnt); } int lws_plat_inet_pton(int af, const char *src, void *dst) { return 1; // inet_pton(af, src, dst); } int lws_plat_ifname_to_hwaddr(int fd, const char *ifname, uint8_t *hwaddr, int len) { lwsl_err("%s: UNIMPLEMENTED on this platform\n", __func__); return -1; } int lws_plat_rawudp_broadcast(uint8_t *p, const uint8_t *canned, size_t canned_len, size_t n, int fd, const char *iface) { lwsl_err("%s: UNIMPLEMENTED on this platform\n", __func__); return -1; } int lws_plat_if_up(const char *ifname, int fd, int up) { lwsl_err("%s: UNIMPLEMENTED on this platform\n", __func__); return -1; } int lws_plat_BINDTODEVICE(lws_sockfd_type fd, const char *ifname) { lwsl_err("%s: UNIMPLEMENTED on this platform\n", __func__); return -1; } int lws_plat_ifconfig(int fd, lws_dhcpc_ifstate_t *is) { lwsl_err("%s: UNIMPLEMENTED on this platform\n", __func__); return -1; } int lws_plat_vhost_tls_client_ctx_init(struct lws_vhost *vhost) { return 0; } #if defined(LWS_WITH_MBEDTLS) int lws_plat_mbedtls_net_send(void *ctx, const uint8_t *buf, size_t len) { int fd = ((mbedtls_net_context *) ctx)->fd; int ret; if (fd < 0) return MBEDTLS_ERR_NET_INVALID_CONTEXT; ret = write(fd, buf, len); if (ret >= 0) return ret; if (errno == EAGAIN || errno == EWOULDBLOCK) return MBEDTLS_ERR_SSL_WANT_WRITE; if (errno == EPIPE || errno == ECONNRESET) return MBEDTLS_ERR_NET_CONN_RESET; if( errno == EINTR ) return MBEDTLS_ERR_SSL_WANT_WRITE; return MBEDTLS_ERR_NET_SEND_FAILED; } int lws_plat_mbedtls_net_recv(void *ctx, unsigned char *buf, size_t len) { int fd = ((mbedtls_net_context *) ctx)->fd; int ret; if (fd < 0) return MBEDTLS_ERR_NET_INVALID_CONTEXT; ret = (int)read(fd, buf, len); if (ret >= 0) return ret; if (errno == EAGAIN || errno == EWOULDBLOCK) return MBEDTLS_ERR_SSL_WANT_READ; if (errno == EPIPE || errno == ECONNRESET) return MBEDTLS_ERR_NET_CONN_RESET; if (errno == EINTR || !errno) return MBEDTLS_ERR_SSL_WANT_READ; return MBEDTLS_ERR_NET_RECV_FAILED; } #endif libwebsockets-4.3.5/lib/plat/freertos/private-lib-plat-freertos.h000066400000000000000000000075611476025525100251160ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * Included from lib/private-lib-core.h if LWS_PLAT_FREERTOS */ #if !defined(LWS_ESP_PLATFORM) #define SOMAXCONN 3 #endif #if defined(LWS_AMAZON_RTOS) int open(const char *path, int oflag, ...); #else #include #endif #include #include #include #include #include #include #ifndef __cplusplus #include #endif #include #if defined(LWS_AMAZON_RTOS) const char * gai_strerror(int); #else #include #endif #if defined(LWS_AMAZON_RTOS) #include "FreeRTOS.h" #if defined(LWS_WITH_SYS_ASYNC_DNS) #include "FreeRTOS_IP.h" #endif #include "timers.h" #if defined(LWS_ESP_PLATFORM) #include #endif #include #else #include "freertos/timers.h" #if defined(LWS_ESP_PLATFORM) #include #endif #include #include #endif #if defined(LWS_WITH_ESP32) #include "lwip/apps/sntp.h" #include #endif typedef SemaphoreHandle_t lws_mutex_t; #define lws_mutex_init(x) x = xSemaphoreCreateMutex() #define lws_mutex_destroy(x) vSemaphoreDelete(x) #define lws_mutex_lock(x) (!xSemaphoreTake(x, portMAX_DELAY)) /*0 = OK */ #define lws_mutex_unlock(x) xSemaphoreGive(x) #include #if defined(LWS_BUILTIN_GETIFADDRS) #include "./misc/getifaddrs.h" #endif #define LWS_ERRNO errno #define LWS_EAGAIN EAGAIN #define LWS_EALREADY EALREADY #define LWS_EINPROGRESS EINPROGRESS #define LWS_EINTR EINTR #define LWS_EISCONN EISCONN #define LWS_ENOTCONN ENOTCONN #define LWS_EWOULDBLOCK EWOULDBLOCK #define LWS_EADDRINUSE EADDRINUSE #define LWS_ECONNABORTED ECONNABORTED #define lws_set_blocking_send(wsi) #ifndef LWS_NO_FORK #ifdef LWS_HAVE_SYS_PRCTL_H #include #endif #endif #if !defined(MSG_NOSIGNAL) #define MSG_NOSIGNAL 0 #endif #define compatible_close(x) close(x) #define lws_plat_socket_offset() LWIP_SOCKET_OFFSET #define wsi_from_fd(A,B) A->lws_lookup[B - lws_plat_socket_offset()] struct lws_context; struct lws; int insert_wsi(const struct lws_context *context, struct lws *wsi); #define delete_from_fd(A,B) A->lws_lookup[B - lws_plat_socket_offset()] = 0 #define LWS_PLAT_TIMER_TYPE TimerHandle_t #define LWS_PLAT_TIMER_CB(name, var) void name(TimerHandle_t var) #define LWS_PLAT_TIMER_CB_GET_OPAQUE(x) pvTimerGetTimerID(x) #define LWS_PLAT_TIMER_CREATE(name, interval, repeat, opaque, cb) \ xTimerCreate(name, pdMS_TO_TICKS(interval) ? pdMS_TO_TICKS(interval) : 1, \ repeat ? pdTRUE : 0, opaque, cb) #define LWS_PLAT_TIMER_DELETE(ptr) xTimerDelete(ptr, 0) #define LWS_PLAT_TIMER_START(ptr) xTimerStart(ptr, 0) #define LWS_PLAT_TIMER_STOP(ptr) xTimerStop(ptr, 0) libwebsockets-4.3.5/lib/plat/optee/000077500000000000000000000000001476025525100172145ustar00rootroot00000000000000libwebsockets-4.3.5/lib/plat/optee/CMakeLists.txt000066400000000000000000000033511476025525100217560ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # # The strategy is to only export to PARENT_SCOPE # # - changes to LIB_LIST # - changes to SOURCES # - includes via include_directories # # and keep everything else private include_directories(.) list(APPEND SOURCES plat/optee/lws-plat-optee.c ) if (LWS_WITH_NETWORK) list(APPEND SOURCES plat/optee/network.c ) endif() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --sysroot ../../../../lib/libutils/isoc/include -I../../../../lib/libutils/isoc/include -I../../../../lib/libutils/ext/include" ) # # Keep explicit parent scope exports at end # exports_to_parent_scope() libwebsockets-4.3.5/lib/plat/optee/lws-plat-optee.c000066400000000000000000000126101476025525100222350ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #if !defined(LWS_WITH_NETWORK) #include #endif int errno; #if !defined(LWS_WITH_NETWORK) char * strcpy(char *dest, const char *src) { char *desto = dest; while (*src) *(dest++) = *(src++); *(dest++) = '\0'; return desto; } char *strncpy(char *dest, const char *src, size_t limit) { char *desto = dest; while (*src && limit--) *(dest++) = *(src++); if (limit) *(dest++) = '\0'; return desto; } #endif int lws_plat_apply_FD_CLOEXEC(int n) { return 0; } void TEE_GenerateRandom(void *randomBuffer, uint32_t randomBufferLen); #if defined(LWS_WITH_NETWORK) uint64_t lws_now_usecs(void) { return ((unsigned long long)time(NULL)) * 1000000; } #endif size_t lws_get_random(struct lws_context *context, void *buf, size_t len) { #if defined(LWS_WITH_NETWORK) TEE_GenerateRandom(buf, len); #else crypto_rng_read(buf, len); #endif return len; } static const char * const colours[] = { "[31;1m", /* LLL_ERR */ "[36;1m", /* LLL_WARN */ "[35;1m", /* LLL_NOTICE */ "[32;1m", /* LLL_INFO */ "[34;1m", /* LLL_DEBUG */ "[33;1m", /* LLL_PARSER */ "[33;1m", /* LLL_HEADER */ "[33;1m", /* LLL_EXT */ "[33;1m", /* LLL_CLIENT */ "[33;1m", /* LLL_LATENCY */ "[30;1m", /* LLL_USER */ }; void lwsl_emit_optee(int level, const char *line) { char buf[50], linecp[512]; int n, m = LWS_ARRAY_SIZE(colours) - 1; lwsl_timestamp(level, buf, sizeof(buf)); n = 1 << (LWS_ARRAY_SIZE(colours) - 1); while (n) { if (level & n) break; m--; n >>= 1; } n = strlen(line); if ((unsigned int)n > sizeof(linecp) - 1) n = sizeof(linecp) - 1; if (n) { memcpy(linecp, line, n - 1); linecp[n - 1] = '\0'; } else linecp[0] = '\0'; EMSG("%c%s%s%s%c[0m", 27, colours[m], buf, linecp, 27); } int lws_plat_set_nonblocking(lws_sockfd_type fd) { return 0; } int lws_plat_drop_app_privileges(struct lws_context *context, int actually_init) { return 0; } int lws_plat_context_early_init(void) { return 0; } void lws_plat_context_early_destroy(struct lws_context *context) { } void lws_plat_context_late_destroy(struct lws_context *context) { #if defined(LWS_WITH_NETWORK) if (context->lws_lookup) lws_free(context->lws_lookup); #endif } lws_fop_fd_t _lws_plat_file_open(const struct lws_plat_file_ops *fops, const char *filename, const char *vpath, lws_fop_flags_t *flags) { return NULL; } int _lws_plat_file_close(lws_fop_fd_t *fop_fd) { return 0; } lws_fileofs_t _lws_plat_file_seek_cur(lws_fop_fd_t fop_fd, lws_fileofs_t offset) { return 0; } int _lws_plat_file_read(lws_fop_fd_t fop_fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len) { return 0; } int _lws_plat_file_write(lws_fop_fd_t fop_fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len) { return 0; } int lws_plat_init(struct lws_context *context, const struct lws_context_creation_info *info) { #if defined(LWS_WITH_NETWORK) /* context has the global fd lookup array */ context->lws_lookup = lws_zalloc(sizeof(struct lws *) * context->max_fds, "lws_lookup"); if (context->lws_lookup == NULL) { lwsl_err("OOM on lws_lookup array for %d connections\n", context->max_fds); return 1; } lwsl_notice(" mem: platform fd map: %5lu bytes\n", (long)sizeof(struct lws *) * context->max_fds); #endif #ifdef LWS_WITH_PLUGINS if (info->plugin_dirs) lws_plat_plugins_init(context, info->plugin_dirs); #endif return 0; } int lws_plat_write_file(const char *filename, void *buf, size_t len) { return 1; } int lws_plat_read_file(const char *filename, void *buf, int len) { return -1; } int lws_plat_recommended_rsa_bits(void) { return 4096; } int lws_plat_ntpclient_config(struct lws_context *context) { #if 0 char *ntpsrv = getenv("LWS_NTP_SERVER"); if (ntpsrv && strlen(ntpsrv) < 64) { lws_system_blob_heap_append(lws_system_get_blob(context, LWS_SYSBLOB_TYPE_NTP_SERVER, 0), (const uint8_t *)ntpsrv, strlen(ntpsrv)); return 1; } #endif return 0; } void lws_msleep(unsigned int ms) { } libwebsockets-4.3.5/lib/plat/optee/network.c000066400000000000000000000155151476025525100210600ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #if defined(LWS_WITH_MBEDTLS) #if defined(LWS_HAVE_MBEDTLS_NET_SOCKETS) #include "mbedtls/net_sockets.h" #else #include "mbedtls/net.h" #endif #endif int lws_plat_pipe_create(struct lws *wsi) { return 1; } int lws_plat_pipe_signal(struct lws *wsi) { return 1; } void lws_plat_pipe_close(struct lws *wsi) { } int lws_plat_pipe_is_fd_assocated(struct lws_context *cx, int tsi, lws_sockfd_type fd) { return 0; } int lws_send_pipe_choked(struct lws *wsi) { struct lws *wsi_eff; #if defined(LWS_WITH_HTTP2) wsi_eff = lws_get_network_wsi(wsi); #else wsi_eff = wsi; #endif /* the fact we checked implies we avoided back-to-back writes */ wsi_eff->could_have_pending = 0; /* treat the fact we got a truncated send pending as if we're choked */ if (lws_has_buffered_out(wsi_eff) #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) || wsi->http.comp_ctx.buflist_comp || wsi->http.comp_ctx.may_have_more #endif ) return 1; /* okay to send another packet without blocking */ return 0; } int lws_poll_listen_fd(struct lws_pollfd *fd) { // return poll(fd, 1, 0); return 0; } int _lws_plat_service_tsi(struct lws_context *context, int timeout_ms, int tsi) { lws_usec_t timeout_us = timeout_ms * LWS_US_PER_MS; struct lws_context_per_thread *pt; int n = -1, m, c, a = 0; //char buf; /* stay dead once we are dead */ if (!context) return 1; pt = &context->pt[tsi]; if (timeout_ms < 0) timeout_ms = 0; else timeout_ms = 2000000000; if (!pt->service_tid_detected && context->vhost_list) { struct lws _lws; memset(&_lws, 0, sizeof(_lws)); _lws.context = context; pt->service_tid = context->vhost_list->protocols[0].callback( &_lws, LWS_CALLBACK_GET_THREAD_ID, NULL, NULL, 0); pt->service_tid_detected = 1; } /* * is there anybody with pending stuff that needs service forcing? */ if (lws_service_adjust_timeout(context, 1, tsi)) { again: a = 0; if (timeout_us) { lws_usec_t us; lws_pt_lock(pt, __func__); /* don't stay in poll wait longer than next hr timeout */ us = __lws_sul_service_ripe(pt->pt_sul_owner, LWS_COUNT_PT_SUL_OWNERS, lws_now_usecs()); if (us && us < timeout_us) timeout_us = us; lws_pt_unlock(pt); } n = poll(pt->fds, pt->fds_count, timeout_us / LWS_US_PER_MS); m = 0; if (pt->context->tls_ops && pt->context->tls_ops->fake_POLLIN_for_buffered) m = pt->context->tls_ops->fake_POLLIN_for_buffered(pt); if (/*!pt->ws.rx_draining_ext_list && */!m && !n) /* nothing to do */ return 0; } else a = 1; m = lws_service_flag_pending(context, tsi); if (m) c = -1; /* unknown limit */ else if (n < 0) { if (LWS_ERRNO != LWS_EINTR) return -1; return 0; } else c = n; /* any socket with events to service? */ for (n = 0; n < (int)pt->fds_count && c; n++) { if (!pt->fds[n].revents) continue; c--; #if 0 if (pt->fds[n].fd == pt->dummy_pipe_fds[0]) { if (read(pt->fds[n].fd, &buf, 1) != 1) lwsl_err("Cannot read from dummy pipe."); continue; } #endif m = lws_service_fd_tsi(context, &pt->fds[n], tsi); if (m < 0) return -1; /* if something closed, retry this slot */ if (m) n--; } if (a) goto again; return 0; } int lws_plat_service(struct lws_context *context, int timeout_ms) { return _lws_plat_service_tsi(context, timeout_ms, 0); } int lws_plat_set_socket_options(struct lws_vhost *vhost, int fd, int unix_skt) { return 0; } int lws_plat_write_cert(struct lws_vhost *vhost, int is_key, int fd, void *buf, size_t len) { return 1; } /* cast a struct sockaddr_in6 * into addr for ipv6 */ int lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr, size_t addrlen) { return -1; } void lws_plat_insert_socket_into_fds(struct lws_context *context, struct lws *wsi) { struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; pt->fds[pt->fds_count++].revents = 0; } void lws_plat_delete_socket_from_fds(struct lws_context *context, struct lws *wsi, int m) { struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; pt->fds_count--; } int lws_plat_change_pollfd(struct lws_context *context, struct lws *wsi, struct lws_pollfd *pfd) { return 0; } const char * lws_plat_inet_ntop(int af, const void *src, char *dst, socklen_t cnt) { //return inet_ntop(af, src, dst, cnt); return "lws_plat_inet_ntop"; } int lws_plat_inet_pton(int af, const char *src, void *dst) { //return inet_pton(af, src, dst); return 1; } int lws_plat_set_socket_options_ip(int fd, uint8_t pri, unsigned int lws_flags) { return 0; } int lws_plat_vhost_tls_client_ctx_init(struct lws_vhost *vhost) { return 0; } #if defined(LWS_WITH_MBEDTLS) int lws_plat_mbedtls_net_send(void *ctx, const uint8_t *buf, size_t len) { int fd = ((mbedtls_net_context *) ctx)->fd; int ret; if (fd < 0) return MBEDTLS_ERR_NET_INVALID_CONTEXT; ret = write(fd, buf, len); if (ret >= 0) return ret; if (errno == EAGAIN || errno == EWOULDBLOCK) return MBEDTLS_ERR_SSL_WANT_WRITE; if (errno == EPIPE || errno == ECONNRESET) return MBEDTLS_ERR_NET_CONN_RESET; if( errno == EINTR ) return MBEDTLS_ERR_SSL_WANT_WRITE; return MBEDTLS_ERR_NET_SEND_FAILED; } int lws_plat_mbedtls_net_recv(void *ctx, unsigned char *buf, size_t len) { int fd = ((mbedtls_net_context *) ctx)->fd; int ret; if (fd < 0) return MBEDTLS_ERR_NET_INVALID_CONTEXT; ret = (int)read(fd, buf, len); if (ret >= 0) return ret; if (errno == EAGAIN || errno == EWOULDBLOCK) return MBEDTLS_ERR_SSL_WANT_READ; if (errno == EPIPE || errno == ECONNRESET) return MBEDTLS_ERR_NET_CONN_RESET; if (errno == EINTR) return MBEDTLS_ERR_SSL_WANT_READ; return MBEDTLS_ERR_NET_RECV_FAILED; } #endif libwebsockets-4.3.5/lib/plat/optee/private-lib-plat-optee.h000066400000000000000000000040001476025525100236450ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * Included from lib/private-lib-core.h if LWS_WITH_OPTEE */ #include #include #define LWS_ERRNO errno #define LWS_EAGAIN EAGAIN #define LWS_EALREADY EALREADY #define LWS_EINPROGRESS EINPROGRESS #define LWS_EINTR EINTR #define LWS_EISCONN EISCONN #define LWS_ENOTCONN ENOTCONN #define LWS_EWOULDBLOCK EWOULDBLOCK #define LWS_EADDRINUSE EADDRINUSE #define lws_set_blocking_send(wsi) #define compatible_close(x) close(x) #define lws_plat_socket_offset() (0) #define wsi_from_fd(A,B) A->lws_lookup[B - lws_plat_socket_offset()] #define insert_wsi(A,B) assert(A->lws_lookup[B->desc.sockfd - \ lws_plat_socket_offset()] == 0); \ A->lws_lookup[B->desc.sockfd - \ lws_plat_socket_offset()] = B #define delete_from_fd(A,B) A->lws_lookup[B - lws_plat_socket_offset()] = 0 libwebsockets-4.3.5/lib/plat/unix/000077500000000000000000000000001476025525100170635ustar00rootroot00000000000000libwebsockets-4.3.5/lib/plat/unix/CMakeLists.txt000066400000000000000000000060401476025525100216230ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # # The strategy is to only export to PARENT_SCOPE # # - changes to LIB_LIST # - changes to SOURCES # - includes via include_directories # # and keep everything else private include_directories(.) execute_process( COMMAND grep -c illumos /lib/ld.so.1 OUTPUT_VARIABLE ILLUMOS ERROR_QUIET ) # Chomp the \n at end of output. string(REGEX REPLACE "[\n]+" "" ILLUMOS "${ILLUMOS}") if (NOT ${ILLUMOS} MATCHES "0") set(ILLUMOS 1) endif() set(LWS_PLAT_UNIX 1) list(APPEND SOURCES plat/unix/unix-caps.c plat/unix/unix-misc.c plat/unix/unix-init.c ) if (LWS_WITH_FILE_OPS) list(APPEND SOURCES plat/unix/unix-file.c) endif() if (LWS_WITH_NETWORK) list(APPEND SOURCES plat/unix/unix-pipe.c plat/unix/unix-service.c plat/unix/unix-sockets.c plat/unix/unix-fds.c ) if (LWS_WITH_SYS_ASYNC_DNS) if (LWS_PLAT_ANDROID) list(APPEND SOURCES plat/unix/android/android-resolv.c) else() list(APPEND SOURCES plat/unix/unix-resolv.c) endif() endif() endif() if (LWS_WITH_PLUGINS_API) list(APPEND SOURCES plat/unix/unix-plugins.c) endif() if (LWS_WITH_SPAWN) list(APPEND SOURCES plat/unix/unix-spawn.c) endif() if (HAIKU) set(CMAKE_REQUIRED_LIBRARIES network) list(APPEND LIB_LIST_AT_END network) endif() IF (CMAKE_SYSTEM_NAME STREQUAL Linux AND NOT LWS_WITHOUT_EVENTFD) CHECK_FUNCTION_EXISTS(eventfd_read LWS_HAVE_EVENTFD) endif() list(APPEND LIB_LIST_AT_END m) if (ILLUMOS) list(APPEND LIB_LIST_AT_END socket) endif() if (LWS_HAVE_LIBCAP) list(APPEND LIB_LIST_AT_END cap) endif() if (${CMAKE_SYSTEM_NAME} MATCHES "QNX") list(APPEND LIB_LIST_AT_END socket) endif() list(APPEND LIB_LIST_AT_END ${CMAKE_DL_LIBS}) # # Keep explicit parent scope exports at end # exports_to_parent_scope() set(LWS_PLAT_UNIX ${LWS_PLAT_UNIX} PARENT_SCOPE) set(ILLUMOS ${ILLUMOS} PARENT_SCOPE) set(LIB_LIST_AT_END ${LIB_LIST_AT_END} PARENT_SCOPE) set(LWS_PLAT_UNIX ${LWS_PLAT_UNIX} PARENT_SCOPE) libwebsockets-4.3.5/lib/plat/unix/android/000077500000000000000000000000001476025525100205035ustar00rootroot00000000000000libwebsockets-4.3.5/lib/plat/unix/android/android-resolv.c000066400000000000000000000036321476025525100236030ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include lws_async_dns_server_check_t lws_plat_asyncdns_init(struct lws_context *context, lws_sockaddr46 *sa46) { char d[PROP_VALUE_MAX], *p; uint32_t ip32; uint8_t i[4]; int n; d[0] = '\0'; if (__system_property_get("net.dns1", d) <= 0) return LADNS_CONF_SERVER_UNKNOWN; for (n = 0; n < 4; n++) { i[n] = (uint8_t)atoi(d); p = strchr(d, '.'); if (n != 3 && !p) return LADNS_CONF_SERVER_UNKNOWN; } ip32 = (uint32_t) ((i[0] << 24) | (i[1] << 16) | (i[2] << 8) | i[3]); n = ip32 == sa46->sa4.sin_addr.s_addr; sa46->sa4.sin_family = AF_INET; sa46->sa4.sin_addr.s_addr = ip32; return n ? LADNS_CONF_SERVER_SAME : LADNS_CONF_SERVER_CHANGED; } libwebsockets-4.3.5/lib/plat/unix/private-lib-plat-unix.h000066400000000000000000000123431476025525100233740ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * Included from lib/private-lib-core.h if no explicit platform */ #include #include #include #include #include #include #include #include #ifndef __cplusplus #include #endif #include #include #include #include #include #include #include #include #if defined(LWS_HAVE_EVENTFD) #include #endif #if defined(__APPLE__) #include #endif #if defined(__FreeBSD__) #include #endif #if defined(__linux__) #include #include #include #endif #if defined(__QNX__) #include #if defined(__LITTLEENDIAN__) #define BYTE_ORDER __LITTLEENDIAN__ #define LITTLE_ENDIAN __LITTLEENDIAN__ #define BIG_ENDIAN 4321 /* to show byte order (taken from gcc); for suppres warning that BIG_ENDIAN is not defined. */ #endif #if defined(__BIGENDIAN__) #define BYTE_ORDER __BIGENDIAN__ #define LITTLE_ENDIAN 1234 /* to show byte order (taken from gcc); for suppres warning that LITTLE_ENDIAN is not defined. */ #define BIG_ENDIAN __BIGENDIAN__ #endif #endif #if defined(LWS_HAVE_PTHREAD_H) #include typedef pthread_mutex_t lws_mutex_t; #define lws_mutex_init(x) pthread_mutex_init(&(x), NULL) #define lws_mutex_destroy(x) pthread_mutex_destroy(&(x)) #define lws_mutex_lock(x) pthread_mutex_lock(&(x)) #define lws_mutex_unlock(x) pthread_mutex_unlock(&(x)) #endif #if defined(__sun) && defined(__GNUC__) #include #if !defined (BYTE_ORDER) #define BYTE_ORDER __BYTE_ORDER__ #endif #if !defined(LITTLE_ENDIAN) #define LITTLE_ENDIAN __ORDER_LITTLE_ENDIAN__ #endif #if !defined(BIG_ENDIAN) #define BIG_ENDIAN __ORDER_BIG_ENDIAN__ #endif #endif /* sun + GNUC */ #if !defined(BYTE_ORDER) #define BYTE_ORDER __BYTE_ORDER #endif #if !defined(LITTLE_ENDIAN) #define LITTLE_ENDIAN __LITTLE_ENDIAN #endif #if !defined(BIG_ENDIAN) #define BIG_ENDIAN __BIG_ENDIAN #endif #if defined(LWS_BUILTIN_GETIFADDRS) #include "./misc/getifaddrs.h" #else #if defined(__HAIKU__) #define _BSD_SOURCE #endif #include #endif #if defined (__sun) || defined(__HAIKU__) || defined(__QNX__) || defined(__ANDROID__) #include #if defined(__ANDROID__) #include #endif #else #include #endif #ifdef __QNX__ # include "netinet/tcp_var.h" # define TCP_KEEPINTVL TCPCTL_KEEPINTVL # define TCP_KEEPIDLE TCPCTL_KEEPIDLE # define TCP_KEEPCNT TCPCTL_KEEPCNT #endif #define LWS_ERRNO errno #define LWS_EAGAIN EAGAIN #define LWS_EALREADY EALREADY #define LWS_EINPROGRESS EINPROGRESS #define LWS_EINTR EINTR #define LWS_EISCONN EISCONN #define LWS_ENOTCONN ENOTCONN #define LWS_EWOULDBLOCK EWOULDBLOCK #define LWS_EADDRINUSE EADDRINUSE #define lws_set_blocking_send(wsi) #define LWS_SOCK_INVALID (-1) struct lws_context; struct lws * wsi_from_fd(const struct lws_context *context, int fd); int insert_wsi(const struct lws_context *context, struct lws *wsi); struct lws_dhcpc_ifstate; int lws_plat_ifconfig(int fd, struct lws_dhcpc_ifstate *is); void delete_from_fd(const struct lws_context *context, int fd); #ifndef LWS_NO_FORK #ifdef LWS_HAVE_SYS_PRCTL_H #include #endif #endif #define compatible_close(x) close(x) #define compatible_file_close(fd) close(fd) #define lws_plat_socket_offset() (0) /* * Mac OSX as well as iOS do not define the MSG_NOSIGNAL flag, * but happily have something equivalent in the SO_NOSIGPIPE flag. */ #ifdef __APPLE__ /* iOS SDK 12+ seems to define it, undef it for compatibility both ways */ #undef MSG_NOSIGNAL #define MSG_NOSIGNAL SO_NOSIGPIPE #endif /* * Solaris 11.X only supports POSIX 2001, MSG_NOSIGNAL appears in * POSIX 2008. */ #if defined(__sun) && !defined(MSG_NOSIGNAL) #define MSG_NOSIGNAL 0 #endif int lws_plat_rawudp_broadcast(uint8_t *p, const uint8_t *canned, size_t canned_len, size_t n, int fd, const char *iface); int lws_plat_if_up(const char *ifname, int fd, int up); libwebsockets-4.3.5/lib/plat/unix/unix-caps.c000066400000000000000000000132411476025525100211370ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #if !defined(_GNU_SOURCE) #define _GNU_SOURCE #endif #include "private-lib-core.h" #include #include #if defined(LWS_HAVE_SYS_CAPABILITY_H) && defined(LWS_HAVE_LIBCAP) static void _lws_plat_apply_caps(unsigned int mode, const cap_value_t *cv, int count) { cap_t caps; if (!count) return; caps = cap_get_proc(); cap_set_flag(caps, (cap_flag_t)mode, count, cv, CAP_SET); cap_set_proc(caps); prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0); cap_free(caps); } #endif int lws_plat_user_colon_group_to_ids(const char *u_colon_g, uid_t *puid, gid_t *pgid) { char *colon = strchr(u_colon_g, ':'), u[33]; struct group *g; struct passwd *p; size_t ulen; if (!colon) return 1; ulen = (size_t)(unsigned int)lws_ptr_diff(colon, u_colon_g); if (ulen < 2 || ulen > sizeof(u) - 1) return 1; memcpy(u, u_colon_g, ulen); u[ulen] = '\0'; colon++; #if defined(LWS_HAVE_GETGRNAM_R) { struct group gr; char strs[1024]; if (getgrnam_r(colon, &gr, strs, sizeof(strs), &g) || !g) { #else { g = getgrnam(colon); if (!g) { #endif lwsl_err("%s: unknown group '%s'\n", __func__, colon); return 1; } *pgid = g->gr_gid; } #if defined(LWS_HAVE_GETPWNAM_R) { struct passwd pr; char strs[1024]; if (getpwnam_r(u, &pr, strs, sizeof(strs), &p) || !p) { #else { p = getpwnam(u); if (!p) { #endif lwsl_err("%s: unknown user '%s'\n", __func__, u); return 1; } *puid = p->pw_uid; } return 0; } int lws_plat_drop_app_privileges(struct lws_context *context, int actually_drop) { struct passwd *p; struct group *g; /* if he gave us the groupname, align gid to match it */ if (context->groupname) { #if defined(LWS_HAVE_GETGRNAM_R) struct group gr; char strs[1024]; if (!getgrnam_r(context->groupname, &gr, strs, sizeof(strs), &g) && g) { #else g = getgrnam(context->groupname); if (g) { #endif lwsl_cx_info(context, "group %s -> gid %u", context->groupname, g->gr_gid); context->gid = g->gr_gid; } else { lwsl_cx_err(context, "unknown groupname '%s'", context->groupname); return 1; } } /* if he gave us the username, align uid to match it */ if (context->username) { #if defined(LWS_HAVE_GETPWNAM_R) struct passwd pr; char strs[1024]; if (!getpwnam_r(context->username, &pr, strs, sizeof(strs), &p) && p) { #else p = getpwnam(context->username); if (p) { #endif context->uid = p->pw_uid; lwsl_cx_info(context, "username %s -> uid %u", context->username, (unsigned int)p->pw_uid); } else { lwsl_cx_err(context, "unknown username %s", context->username); return 1; } } if (!actually_drop) return 0; /* if he gave us the gid or we have it from the groupname, set it */ if (context->gid && context->gid != (gid_t)-1l) { #if defined(LWS_HAVE_GETGRGID_R) struct group gr; char strs[1024]; if (getgrgid_r(context->gid, &gr, strs, sizeof(strs), &g) || !g) { #else g = getgrgid(context->gid); if (!g) { #endif lwsl_cx_err(context, "cannot find name for gid %d", context->gid); return 1; } if (setgid(context->gid)) { lwsl_cx_err(context, "setgid: %s failed", strerror(LWS_ERRNO)); return 1; } lwsl_cx_notice(context, "effective group '%s'", g->gr_name); } else lwsl_cx_info(context, "not changing group"); /* if he gave us the uid or we have it from the username, set it */ if (context->uid && context->uid != (uid_t)-1l) { #if defined(LWS_HAVE_GETPWUID_R) struct passwd pr; char strs[1024]; if (getpwuid_r(context->uid, &pr, strs, sizeof(strs), &p) || !p) { #else p = getpwuid(context->uid); if (!p) { #endif lwsl_cx_err(context, "getpwuid: unable to find uid %d", context->uid); return 1; } #if defined(LWS_HAVE_SYS_CAPABILITY_H) && defined(LWS_HAVE_LIBCAP) _lws_plat_apply_caps(CAP_PERMITTED, context->caps, context->count_caps); #endif if (initgroups(p->pw_name, #if defined(__APPLE__) (int) #endif context->gid)) return 1; if (setuid(context->uid)) { lwsl_cx_err(context, "setuid: %s failed", strerror(LWS_ERRNO)); return 1; } else lwsl_cx_notice(context, "effective user '%s'", p->pw_name); #if defined(LWS_HAVE_SYS_CAPABILITY_H) && defined(LWS_HAVE_LIBCAP) _lws_plat_apply_caps(CAP_EFFECTIVE, context->caps, context->count_caps); if (context->count_caps) { int n; for (n = 0; n < context->count_caps; n++) lwsl_cx_notice(context, " RETAINING CAP %d", (int)context->caps[n]); } #endif } else lwsl_cx_info(context, "not changing user"); return 0; } libwebsockets-4.3.5/lib/plat/unix/unix-fds.c000066400000000000000000000126641476025525100207750ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #if !defined(_GNU_SOURCE) #define _GNU_SOURCE #endif #include "private-lib-core.h" struct lws * wsi_from_fd(const struct lws_context *context, int fd) { struct lws **p, **done; if (!context->max_fds_unrelated_to_ulimit) return context->lws_lookup[fd - lws_plat_socket_offset()]; /* slow fds handling */ p = context->lws_lookup; done = &p[context->max_fds]; while (p != done) { if (*p && (*p)->desc.sockfd == fd) return *p; p++; } return NULL; } #if defined(_DEBUG) int sanity_assert_no_wsi_traces(const struct lws_context *context, struct lws *wsi) { struct lws **p, **done; if (!context->max_fds_unrelated_to_ulimit) /* can't tell */ return 0; /* slow fds handling */ p = context->lws_lookup; done = &p[context->max_fds]; /* confirm the wsi doesn't already exist */ while (p != done && *p != wsi) p++; if (p == done) return 0; assert(0); /* this wsi is still mentioned inside lws */ return 1; } int sanity_assert_no_sockfd_traces(const struct lws_context *context, lws_sockfd_type sfd) { #if LWS_MAX_SMP > 1 /* * We can't really do this test... another thread can accept and * reuse the closed fd */ return 0; #else struct lws **p, **done; if (sfd == LWS_SOCK_INVALID || !context->lws_lookup) return 0; if (!context->max_fds_unrelated_to_ulimit && context->lws_lookup[sfd - lws_plat_socket_offset()]) { assert(0); /* the fd is still in use */ return 1; } /* slow fds handling */ p = context->lws_lookup; done = &p[context->max_fds]; /* confirm the sfd not already in use */ while (p != done && (!*p || (*p)->desc.sockfd != sfd)) p++; if (p == done) return 0; assert(0); /* this fd is still in the tables */ return 1; #endif } #endif int insert_wsi(const struct lws_context *context, struct lws *wsi) { struct lws **p, **done; if (sanity_assert_no_wsi_traces(context, wsi)) return 0; if (!context->max_fds_unrelated_to_ulimit) { assert(context->lws_lookup[wsi->desc.sockfd - lws_plat_socket_offset()] == 0); context->lws_lookup[wsi->desc.sockfd - \ lws_plat_socket_offset()] = wsi; return 0; } /* slow fds handling */ p = context->lws_lookup; done = &p[context->max_fds]; /* confirm fd isn't already in use by a wsi */ if (sanity_assert_no_sockfd_traces(context, wsi->desc.sockfd)) return 0; p = context->lws_lookup; /* find an empty slot */ while (p != done && *p) p++; if (p == done) { lwsl_err("%s: reached max fds\n", __func__); return 1; } *p = wsi; return 0; } void delete_from_fd(const struct lws_context *context, int fd) { struct lws **p, **done; if (!context->max_fds_unrelated_to_ulimit) { if (context->lws_lookup) context->lws_lookup[fd - lws_plat_socket_offset()] = NULL; return; } /* slow fds handling */ p = context->lws_lookup; assert(p); done = &p[context->max_fds]; /* find the match */ while (p != done && (!*p || (*p)->desc.sockfd != fd)) p++; if (p != done) *p = NULL; #if defined(_DEBUG) p = context->lws_lookup; while (p != done && (!*p || (*p)->desc.sockfd != fd)) p++; if (p != done) { lwsl_err("%s: fd %d in lws_lookup again at %d\n", __func__, fd, (int)(p - context->lws_lookup)); assert(0); } #endif } void delete_from_fdwsi(const struct lws_context *context, struct lws *wsi) { struct lws **p, **done; if (!context->max_fds_unrelated_to_ulimit) return; /* slow fds handling */ p = context->lws_lookup; done = &p[context->max_fds]; /* find the match */ while (p != done && (!*p || (*p) != wsi)) p++; if (p != done) *p = NULL; } void lws_plat_insert_socket_into_fds(struct lws_context *context, struct lws *wsi) { struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; if (context->event_loop_ops->io) context->event_loop_ops->io(wsi, LWS_EV_START | LWS_EV_READ); pt->fds[pt->fds_count++].revents = 0; } void lws_plat_delete_socket_from_fds(struct lws_context *context, struct lws *wsi, int m) { struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; if (context->event_loop_ops->io) context->event_loop_ops->io(wsi, LWS_EV_STOP | LWS_EV_READ | LWS_EV_WRITE); pt->fds_count--; } int lws_plat_change_pollfd(struct lws_context *context, struct lws *wsi, struct lws_pollfd *pfd) { return 0; } libwebsockets-4.3.5/lib/plat/unix/unix-file.c000066400000000000000000000100501476025525100211230ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #if !defined(_GNU_SOURCE) #define _GNU_SOURCE #endif #include "private-lib-core.h" #include #include #ifdef LWS_WITH_PLUGINS #include #endif #include int lws_plat_apply_FD_CLOEXEC(int n) { if (n == -1) return 0; return fcntl(n, F_SETFD, FD_CLOEXEC); } int lws_plat_write_file(const char *filename, void *buf, size_t len) { ssize_t m; int fd; fd = lws_open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0600); if (fd == -1) return 1; m = write(fd, buf, len); close(fd); if (m < 0) return 1; return (size_t)m != len; } int lws_plat_read_file(const char *filename, void *buf, size_t len) { int fd = lws_open(filename, O_RDONLY); ssize_t n; if (fd == -1) return -1; n = read(fd, buf, len); close(fd); return (int)n; } lws_fop_fd_t _lws_plat_file_open(const struct lws_plat_file_ops *fops, const char *filename, const char *vpath, lws_fop_flags_t *flags) { struct stat stat_buf; int ret = lws_open(filename, (int)((*flags) & LWS_FOP_FLAGS_MASK), 0664); lws_fop_fd_t fop_fd; if (ret < 0) return NULL; if (fstat(ret, &stat_buf) < 0) goto bail; fop_fd = malloc(sizeof(*fop_fd)); if (!fop_fd) goto bail; fop_fd->fops = fops; fop_fd->flags = *flags; fop_fd->fd = ret; fop_fd->filesystem_priv = NULL; /* we don't use it */ fop_fd->len = (lws_filepos_t)stat_buf.st_size; fop_fd->pos = 0; return fop_fd; bail: close(ret); return NULL; } int _lws_plat_file_close(lws_fop_fd_t *fop_fd) { int fd = (*fop_fd)->fd; free(*fop_fd); *fop_fd = NULL; return close(fd); } lws_fileofs_t _lws_plat_file_seek_cur(lws_fop_fd_t fop_fd, lws_fileofs_t offset) { lws_fileofs_t r; if (offset > 0 && offset > (lws_fileofs_t)fop_fd->len - (lws_fileofs_t)fop_fd->pos) offset = (lws_fileofs_t)(fop_fd->len - fop_fd->pos); if ((lws_fileofs_t)fop_fd->pos + offset < 0) offset = (lws_fileofs_t)(-fop_fd->pos); r = lseek(fop_fd->fd, (off_t)offset, SEEK_CUR); if (r >= 0) fop_fd->pos = (lws_filepos_t)r; else lwsl_err("error seeking from cur %ld, offset %ld\n", (long)fop_fd->pos, (long)offset); return r; } int _lws_plat_file_read(lws_fop_fd_t fop_fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len) { ssize_t n; n = read((int)fop_fd->fd, buf, (size_t)len); if (n == -1l) { *amount = 0; return -1; } fop_fd->pos = (lws_filepos_t)(fop_fd->pos + (lws_filepos_t)n); lwsl_debug("%s: read %ld of req %ld, pos %ld, len %ld\n", __func__, (long)n, (long)len, (long)fop_fd->pos, (long)fop_fd->len); *amount = (lws_filepos_t)n; return 0; } int _lws_plat_file_write(lws_fop_fd_t fop_fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len) { ssize_t n; n = write((int)fop_fd->fd, buf, (size_t)len); if (n == -1) { *amount = 0; return -1; } fop_fd->pos = (lws_filepos_t)(fop_fd->pos + (lws_filepos_t)n); *amount = (lws_filepos_t)n; return 0; } libwebsockets-4.3.5/lib/plat/unix/unix-init.c000066400000000000000000000160141476025525100211550ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #if !defined(_GNU_SOURCE) #define _GNU_SOURCE #endif #include "private-lib-core.h" #include #include #ifdef LWS_WITH_PLUGINS #include #endif #include #if defined(LWS_WITH_NETWORK) static void lws_sul_plat_unix(lws_sorted_usec_list_t *sul) { struct lws_context_per_thread *pt = lws_container_of(sul, struct lws_context_per_thread, sul_plat); struct lws_context *context = pt->context; int n = 0, m = 0; #if !defined(LWS_NO_DAEMONIZE) /* if our parent went down, don't linger around */ if (pt->context->started_with_parent && kill(pt->context->started_with_parent, 0) < 0) kill(getpid(), SIGTERM); #endif for (n = 0; n < context->count_threads; n++) m = m | (int)pt->fds_count; if (context->deprecated && !m) { lwsl_notice("%s: ending deprecated context\n", __func__); kill(getpid(), SIGINT); return; } #if defined(LWS_WITH_SERVER) lws_context_lock(context, "periodic checks"); lws_start_foreach_llp(struct lws_vhost **, pv, context->no_listener_vhost_list) { struct lws_vhost *v = *pv; lwsl_debug("deferred iface: checking if on vh %s\n", (*pv)->name); if (_lws_vhost_init_server(NULL, *pv) == 0) { /* became happy */ lwsl_notice("vh %s: became connected\n", v->name); *pv = v->no_listener_vhost_list; v->no_listener_vhost_list = NULL; break; } } lws_end_foreach_llp(pv, no_listener_vhost_list); lws_context_unlock(context); #endif __lws_sul_insert_us(&pt->pt_sul_owner[LWSSULLI_MISS_IF_SUSPENDED], &pt->sul_plat, 30 * LWS_US_PER_SEC); } #endif #if defined(LWS_WITH_PLUGINS) static int protocol_plugin_cb(struct lws_plugin *pin, void *each_user) { struct lws_context *context = (struct lws_context *)each_user; const lws_plugin_protocol_t *plpr = (const lws_plugin_protocol_t *)pin->hdr; context->plugin_protocol_count = (short)(context->plugin_protocol_count + plpr->count_protocols); context->plugin_extension_count = (short)(context->plugin_extension_count + plpr->count_extensions); return 0; } #endif int lws_plat_init(struct lws_context *context, const struct lws_context_creation_info *info) { int fd; #if defined(LWS_WITH_NETWORK) /* * context has the process-global fd lookup array. This can be * done two different ways now; one or the other is done depending on if * info->fd_limit_per_thread was snonzero * * - default: allocate a worst-case lookup array sized for ulimit -n * and use the fd directly as an index into it * * - slow: allocate context->max_fds entries only (which can be * forced at context creation time to be * info->fd_limit_per_thread * the number of threads) * and search the array to lookup fds * * the default way is optimized for server, if you only use one or two * client wsi the slow way may save a lot of memory. * * Both ways allocate an array of struct lws *... one allocates it for * all possible fd indexes the process could produce and uses it as a * map, the other allocates for an amount of wsi the lws context is * expected to use and searches through it to manipulate it. */ context->lws_lookup = lws_zalloc(sizeof(struct lws *) * context->max_fds, "lws_lookup"); if (!context->lws_lookup) { lwsl_cx_err(context, "OOM on alloc lws_lookup array for %d conn", context->max_fds); return 1; } #if defined(LWS_WITH_MBEDTLS) { int n; /* initialize platform random through mbedtls */ mbedtls_entropy_init(&context->mec); mbedtls_ctr_drbg_init(&context->mcdc); n = mbedtls_ctr_drbg_seed(&context->mcdc, mbedtls_entropy_func, &context->mec, NULL, 0); if (n) lwsl_err("%s: mbedtls_ctr_drbg_seed() returned 0x%x\n", __func__, n); #if 0 else { uint8_t rtest[16]; lwsl_notice("%s: started drbg\n", __func__); if (mbedtls_ctr_drbg_random(&context->mcdc, rtest, sizeof(rtest))) lwsl_err("%s: get random failed\n", __func__); else lwsl_hexdump_notice(rtest, sizeof(rtest)); } #endif } #endif lwsl_cx_info(context, " mem: platform fd map: %5lu B", (unsigned long)(sizeof(struct lws *) * context->max_fds)); #endif #if defined(LWS_WITH_FILE_OPS) fd = lws_open(SYSTEM_RANDOM_FILEPATH, O_RDONLY); #else fd = open(SYSTEM_RANDOM_FILEPATH, O_RDONLY); #endif context->fd_random = fd; if (context->fd_random < 0) { lwsl_err("Unable to open random device %s %d, errno %d\n", SYSTEM_RANDOM_FILEPATH, context->fd_random, errno); return 1; } #if defined(LWS_WITH_PLUGINS) { char *ld_env = getenv("LD_LIBRARY_PATH"); if (ld_env) { const char *pp[2] = { ld_env, NULL }; lws_plugins_init(&context->plugin_list, pp, "lws_protocol_plugin", NULL, protocol_plugin_cb, context); } if (info->plugin_dirs) lws_plugins_init(&context->plugin_list, info->plugin_dirs, "lws_protocol_plugin", NULL, protocol_plugin_cb, context); } #endif #if defined(LWS_WITH_NETWORK) /* we only need to do this on pt[0] */ context->pt[0].sul_plat.cb = lws_sul_plat_unix; __lws_sul_insert_us(&context->pt[0].pt_sul_owner[LWSSULLI_MISS_IF_SUSPENDED], &context->pt[0].sul_plat, 30 * LWS_US_PER_SEC); #endif return 0; } int lws_plat_context_early_init(void) { #if !defined(LWS_AVOID_SIGPIPE_IGN) signal(SIGPIPE, SIG_IGN); #endif return 0; } void lws_plat_context_early_destroy(struct lws_context *context) { } void lws_plat_context_late_destroy(struct lws_context *context) { #if defined(LWS_WITH_PLUGINS) if (context->plugin_list) lws_plugins_destroy(&context->plugin_list, NULL, NULL); #endif #if defined(LWS_WITH_NETWORK) if (context->lws_lookup) lws_free_set_NULL(context->lws_lookup); #endif if (!context->fd_random) lwsl_err("ZERO RANDOM FD\n"); if (context->fd_random != LWS_INVALID_FILE) close(context->fd_random); #if defined(LWS_WITH_MBEDTLS) mbedtls_entropy_free(&context->mec); mbedtls_ctr_drbg_free(&context->mcdc); #endif } libwebsockets-4.3.5/lib/plat/unix/unix-misc.c000066400000000000000000000065101476025525100211450ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #if !defined(_GNU_SOURCE) #define _GNU_SOURCE #endif #include "private-lib-core.h" /* * Normally you don't want this, use lws_sul instead inside the event loop. * But sometimes for drivers it makes sense, so there's an internal-only * crossplatform api for it. */ void lws_msleep(unsigned int ms) { usleep((unsigned int)(ms * LWS_US_PER_MS)); } lws_usec_t lws_now_usecs(void) { #if defined(LWS_HAVE_CLOCK_GETTIME) struct timespec ts; if (clock_gettime(CLOCK_MONOTONIC, &ts)) return 0; return (((lws_usec_t)ts.tv_sec) * LWS_US_PER_SEC) + ((lws_usec_t)ts.tv_nsec / LWS_NS_PER_US); #else struct timeval now; gettimeofday(&now, NULL); return (((lws_usec_t)now.tv_sec) * LWS_US_PER_SEC) + (lws_usec_t)now.tv_usec; #endif } size_t lws_get_random(struct lws_context *context, void *buf, size_t len) { #if defined(__COVERITY__) memset(buf, 0, len); return len; #else /* coverity[tainted_scalar] */ return (size_t)read(context->fd_random, (char *)buf, len); #endif } void lwsl_emit_syslog(int level, const char *line) { int syslog_level = LOG_DEBUG; switch (level) { case LLL_ERR: syslog_level = LOG_ERR; break; case LLL_WARN: syslog_level = LOG_WARNING; break; case LLL_NOTICE: syslog_level = LOG_NOTICE; break; case LLL_INFO: syslog_level = LOG_INFO; break; } syslog(syslog_level, "%s", line); } int lws_plat_write_cert(struct lws_vhost *vhost, int is_key, int fd, void *buf, size_t len) { ssize_t n; n = write(fd, buf, len); if (n < 0 || fsync(fd)) return 1; if (lseek(fd, 0, SEEK_SET) < 0) return 1; return (size_t)n != len; } int lws_plat_recommended_rsa_bits(void) { return 4096; } /* * Platform-specific ntpclient server configuration */ int lws_plat_ntpclient_config(struct lws_context *context) { #if defined(LWS_HAVE_GETENV) char *ntpsrv = getenv("LWS_NTP_SERVER"); if (ntpsrv && strlen(ntpsrv) < 64) { lws_system_blob_t *blob = lws_system_get_blob(context, LWS_SYSBLOB_TYPE_NTP_SERVER, 0); if (!blob) return 0; lws_system_blob_direct_set(blob, (const uint8_t *)ntpsrv, strlen(ntpsrv)); return 1; } #endif return 0; } libwebsockets-4.3.5/lib/plat/unix/unix-pipe.c000066400000000000000000000055311476025525100211510ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #if !defined(_GNU_SOURCE) #define _GNU_SOURCE #endif #include "private-lib-core.h" int lws_plat_pipe_create(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; int n; #if defined(LWS_HAVE_EVENTFD) pt->dummy_pipe_fds[0] = eventfd(0, EFD_CLOEXEC | EFD_NONBLOCK); pt->dummy_pipe_fds[1] = -1; n = pt->dummy_pipe_fds[0] < 0 ? -1 : 0; goto set; #elif defined(LWS_HAVE_PIPE2) n = pipe2(pt->dummy_pipe_fds, O_NONBLOCK); #else n = pipe(pt->dummy_pipe_fds); #endif #if defined(LWS_HAVE_EVENTFD) set: #endif if (n >= 0) { if (fcntl(pt->dummy_pipe_fds[0], F_SETFL, O_NONBLOCK) < 0) n = -1; else if (pt->dummy_pipe_fds[1] >= 0) { if (fcntl(pt->dummy_pipe_fds[1], F_SETFL, O_NONBLOCK) < 0) n = -1; } } return n; } int lws_plat_pipe_signal(struct lws_context *ctx, int tsi) { struct lws_context_per_thread *pt = &ctx->pt[tsi]; #if defined(LWS_HAVE_EVENTFD) eventfd_t value = 1; return eventfd_write(pt->dummy_pipe_fds[0], value); #else char buf = 0; int n; n = (int)write(pt->dummy_pipe_fds[1], &buf, 1); return n != 1; #endif } void lws_plat_pipe_close(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; if (pt->dummy_pipe_fds[0] && pt->dummy_pipe_fds[0] != -1) { close(pt->dummy_pipe_fds[0]); pt->dummy_pipe_fds[0] = -1; } if (pt->dummy_pipe_fds[1] && pt->dummy_pipe_fds[1] != -1) { close(pt->dummy_pipe_fds[1]); pt->dummy_pipe_fds[1] = -1; } } int lws_plat_pipe_is_fd_assocated(struct lws_context *cx, int tsi, lws_sockfd_type fd) { struct lws_context_per_thread *pt = &cx->pt[tsi]; return fd == pt->dummy_pipe_fds[0] || fd == pt->dummy_pipe_fds[1]; } libwebsockets-4.3.5/lib/plat/unix/unix-plugins.c000066400000000000000000000060471476025525100217000ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #if !defined(_GNU_SOURCE) #define _GNU_SOURCE #endif #include "private-lib-core.h" #include #include #include const lws_plugin_header_t * lws_plat_dlopen(struct lws_plugin **pplugin, const char *libpath, const char *sofilename, const char *_class, each_plugin_cb_t each, void *each_user) { const lws_plugin_header_t *hdr; struct lws_plugin *pin; char sym[96]; void *l; int m; if (strlen(sofilename) < 6) /* [lib]...[.so] */ return NULL; lwsl_info(" trying %s\n", libpath); l = dlopen(libpath, RTLD_NOW); if (!l) { lwsl_info("%s: Error loading DSO: %s\n", __func__, dlerror()); return NULL; } /* we could open it... can we get his export struct? */ m = lws_snprintf(sym, sizeof(sym) - 1, "%s", sofilename); if (m < 4) goto bail; if (!strcmp(&sym[m - 3], ".so")) sym[m - 3] = '\0'; /* snip the .so */ hdr = (const lws_plugin_header_t *)dlsym(l, sym); if (!hdr) { lwsl_info("%s: Failed to get export '%s' from %s: %s\n", __func__, sym, libpath, dlerror()); goto bail; } if (hdr->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_info("%s: plugin %s has outdated api %d (vs %d)\n", __func__, libpath, hdr->api_magic, LWS_PLUGIN_API_MAGIC); goto bail; } if (strcmp(hdr->lws_build_hash, LWS_BUILD_HASH)) goto bail; if (strcmp(hdr->_class, _class)) goto bail; /* * We don't already have one of these, right? */ pin = *pplugin; while (pin) { if (!strcmp(pin->hdr->name, hdr->name)) goto bail; pin = pin->list; } /* * OK let's bring it in */ pin = lws_malloc(sizeof(*pin), __func__); if (!pin) goto bail; pin->list = *pplugin; *pplugin = pin; pin->u.l = l; pin->hdr = hdr; if (each) each(pin, each_user); lwsl_notice(" %s\n", libpath); return hdr; bail: dlclose(l); return NULL; } int lws_plat_destroy_dl(struct lws_plugin *p) { return dlclose(p->u.l); } libwebsockets-4.3.5/lib/plat/unix/unix-resolv.c000066400000000000000000000051471476025525100215310ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" lws_async_dns_server_check_t lws_plat_asyncdns_init(struct lws_context *context, lws_sockaddr46 *sa46) { lws_async_dns_server_check_t s = LADNS_CONF_SERVER_CHANGED; lws_sockaddr46 sa46t; lws_tokenize_t ts; char ads[48], *r; int fd, ns = 0; ssize_t n; r = (char *)context->pt[0].serv_buf; /* grab the first chunk of /etc/resolv.conf */ fd = open("/etc/resolv.conf", LWS_O_RDONLY); if (fd < 0) return LADNS_CONF_SERVER_UNKNOWN; n = read(fd, r, context->pt_serv_buf_size - 1); close(fd); if (n < 0) return LADNS_CONF_SERVER_UNKNOWN; r[n] = '\0'; lws_tokenize_init(&ts, r, LWS_TOKENIZE_F_DOT_NONTERM | LWS_TOKENIZE_F_NO_FLOATS | LWS_TOKENIZE_F_NO_INTEGERS | LWS_TOKENIZE_F_MINUS_NONTERM | LWS_TOKENIZE_F_HASH_COMMENT); do { ts.e = (int8_t)lws_tokenize(&ts); if (ts.e != LWS_TOKZE_TOKEN) { ns = 0; continue; } if (!ns && !strncmp("nameserver", ts.token, ts.token_len)) { ns = 1; continue; } if (!ns) continue; /* we are a token just after the "nameserver" token */ ns = 0; if (ts.token_len > (int)sizeof(ads) - 1) continue; memcpy(ads, ts.token, ts.token_len); ads[ts.token_len] = '\0'; if (lws_sa46_parse_numeric_address(ads, &sa46t) < 0) continue; if (!lws_sa46_compare_ads(sa46, &sa46t)) s = LADNS_CONF_SERVER_SAME; *sa46 = sa46t; return s; } while (ts.e > 0); return LADNS_CONF_SERVER_UNKNOWN; } libwebsockets-4.3.5/lib/plat/unix/unix-service.c000066400000000000000000000142011476025525100216460ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #if !defined(_GNU_SOURCE) #define _GNU_SOURCE #endif #include "private-lib-core.h" int lws_poll_listen_fd(struct lws_pollfd *fd) { return poll(fd, 1, 0); } int _lws_plat_service_forced_tsi(struct lws_context *context, int tsi) { struct lws_context_per_thread *pt = &context->pt[tsi]; int m, n, r; r = lws_service_flag_pending(context, tsi); /* any socket with events to service? */ for (n = 0; n < (int)pt->fds_count; n++) { lws_sockfd_type fd = pt->fds[n].fd; if (!pt->fds[n].revents) continue; m = lws_service_fd_tsi(context, &pt->fds[n], tsi); if (m < 0) { lwsl_err("%s: lws_service_fd_tsi returned %d\n", __func__, m); return -1; } /* if something closed, retry this slot since may have been * swapped with end fd */ if (m && pt->fds[n].fd != fd) n--; } lws_service_do_ripe_rxflow(pt); return r; } #define LWS_POLL_WAIT_LIMIT 2000000000 int _lws_plat_service_tsi(struct lws_context *context, int timeout_ms, int tsi) { volatile struct lws_foreign_thread_pollfd *ftp, *next; volatile struct lws_context_per_thread *vpt; struct lws_context_per_thread *pt; lws_usec_t timeout_us, us; #if defined(LWS_WITH_SYS_METRICS) lws_usec_t a, b; #endif int n; #if (defined(LWS_ROLE_WS) && !defined(LWS_WITHOUT_EXTENSIONS)) || defined(LWS_WITH_TLS) int m; #endif /* stay dead once we are dead */ if (!context) return 1; #if defined(LWS_WITH_SYS_METRICS) b = #endif us = lws_now_usecs(); pt = &context->pt[tsi]; vpt = (volatile struct lws_context_per_thread *)pt; if (timeout_ms < 0) timeout_ms = 0; else /* force a default timeout of 23 days */ timeout_ms = LWS_POLL_WAIT_LIMIT; timeout_us = ((lws_usec_t)timeout_ms) * LWS_US_PER_MS; if (context->event_loop_ops->run_pt) context->event_loop_ops->run_pt(context, tsi); if (!pt->service_tid_detected && context->vhost_list) { lws_fakewsi_def_plwsa(pt); lws_fakewsi_prep_plwsa_ctx(context); pt->service_tid = context->vhost_list->protocols[0].callback( (struct lws *)plwsa, LWS_CALLBACK_GET_THREAD_ID, NULL, NULL, 0); pt->service_tid_detected = 1; } lws_pt_lock(pt, __func__); /* * service ripe scheduled events, and limit wait to next expected one */ us = __lws_sul_service_ripe(pt->pt_sul_owner, LWS_COUNT_PT_SUL_OWNERS, us); if (us && us < timeout_us) /* * If something wants zero wait, that's OK, but if the next sul * coming ripe is an interval less than our wait resolution, * bump it to be the wait resolution. */ timeout_us = us < context->us_wait_resolution ? context->us_wait_resolution : us; lws_pt_unlock(pt); /* * is there anybody with pending stuff that needs service forcing? */ if (!lws_service_adjust_timeout(context, 1, tsi)) timeout_us = 0; /* ensure we don't wrap at 2^31 with poll()'s signed int ms */ timeout_us /= LWS_US_PER_MS; /* ms now */ #if defined(LWS_WITH_SYS_METRICS) a = lws_now_usecs() - b; #endif vpt->inside_poll = 1; lws_memory_barrier(); n = poll(pt->fds, pt->fds_count, (int)timeout_us /* ms now */ ); vpt->inside_poll = 0; lws_memory_barrier(); #if defined(LWS_WITH_SYS_METRICS) b = lws_now_usecs(); #endif /* Collision will be rare and brief. Spin until it completes */ while (vpt->foreign_spinlock) ; /* * At this point we are not inside a foreign thread pollfd * change, and we have marked ourselves as outside the poll() * wait. So we are the only guys that can modify the * lws_foreign_thread_pollfd list on the pt. Drain the list * and apply the changes to the affected pollfds in the correct * order. */ lws_pt_lock(pt, __func__); ftp = vpt->foreign_pfd_list; //lwsl_notice("cleared list %p\n", ftp); while (ftp) { struct lws *wsi; struct lws_pollfd *pfd; next = ftp->next; pfd = &vpt->fds[ftp->fd_index]; if (lws_socket_is_valid(pfd->fd)) { wsi = wsi_from_fd(context, pfd->fd); if (wsi) __lws_change_pollfd(wsi, ftp->_and, ftp->_or); } lws_free((void *)ftp); ftp = next; } vpt->foreign_pfd_list = NULL; lws_memory_barrier(); lws_pt_unlock(pt); #if (defined(LWS_ROLE_WS) && !defined(LWS_WITHOUT_EXTENSIONS)) || defined(LWS_WITH_TLS) m = 0; #endif #if defined(LWS_ROLE_WS) && !defined(LWS_WITHOUT_EXTENSIONS) m |= !!pt->ws.rx_draining_ext_list; #endif #if defined(LWS_WITH_TLS) if (pt->context->tls_ops && pt->context->tls_ops->fake_POLLIN_for_buffered) m |= pt->context->tls_ops->fake_POLLIN_for_buffered(pt); #endif if ( #if (defined(LWS_ROLE_WS) && !defined(LWS_WITHOUT_EXTENSIONS)) || defined(LWS_WITH_TLS) !m && #endif !n) /* nothing to do */ lws_service_do_ripe_rxflow(pt); else if (_lws_plat_service_forced_tsi(context, tsi) < 0) return -1; #if defined(LWS_WITH_SYS_METRICS) lws_metric_event(context->mt_service, METRES_GO, (u_mt_t) (a + (lws_now_usecs() - b))); #endif if (pt->destroy_self) { lws_context_destroy(pt->context); return -1; } return 0; } int lws_plat_service(struct lws_context *context, int timeout_ms) { return _lws_plat_service_tsi(context, timeout_ms, 0); } libwebsockets-4.3.5/lib/plat/unix/unix-sockets.c000066400000000000000000000362621476025525100216740ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #if !defined(_GNU_SOURCE) #define _GNU_SOURCE #endif #include "private-lib-core.h" #include #if !defined(LWS_DETECTED_PLAT_IOS) #include #endif #include #include #include #if defined(LWS_WITH_MBEDTLS) #if defined(LWS_HAVE_MBEDTLS_NET_SOCKETS) #include "mbedtls/net_sockets.h" #else #include "mbedtls/net.h" #endif #endif #include int lws_send_pipe_choked(struct lws *wsi) { struct lws_pollfd fds; struct lws *wsi_eff; #if !defined(LWS_WITHOUT_EXTENSIONS) if (wsi->ws && wsi->ws->tx_draining_ext) return 1; #endif #if defined(LWS_WITH_HTTP2) wsi_eff = lws_get_network_wsi(wsi); #else wsi_eff = wsi; #endif /* the fact we checked implies we avoided back-to-back writes */ wsi_eff->could_have_pending = 0; /* treat the fact we got a truncated send pending as if we're choked */ if (lws_has_buffered_out(wsi_eff) #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) ||wsi->http.comp_ctx.buflist_comp || wsi->http.comp_ctx.may_have_more #endif ) return 1; fds.fd = wsi_eff->desc.sockfd; fds.events = POLLOUT; fds.revents = 0; if (poll(&fds, 1, 0) != 1) return 1; if ((fds.revents & POLLOUT) == 0) return 1; /* okay to send another packet without blocking */ return 0; } int lws_plat_set_nonblocking(lws_sockfd_type fd) { return fcntl(fd, F_SETFL, O_NONBLOCK) < 0; } int lws_plat_set_socket_options(struct lws_vhost *vhost, int fd, int unix_skt) { int optval = 1; socklen_t optlen = sizeof(optval); #if defined(__APPLE__) || \ defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || \ defined(__NetBSD__) || \ defined(__OpenBSD__) || \ defined(__HAIKU__) struct protoent *tcp_proto; #endif (void)fcntl(fd, F_SETFD, FD_CLOEXEC); if (!unix_skt && vhost->ka_time) { /* enable keepalive on this socket */ optval = 1; if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (const void *)&optval, optlen) < 0) return 1; #if defined(__APPLE__) || \ defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || \ defined(__NetBSD__) || \ defined(__CYGWIN__) || defined(__OpenBSD__) || defined (__sun) || \ defined(__HAIKU__) /* * didn't find a way to set these per-socket, need to * tune kernel systemwide values */ #else /* set the keepalive conditions we want on it too */ #if defined(LWS_HAVE_TCP_USER_TIMEOUT) optval = 1000 * (vhost->ka_time + (vhost->ka_interval * vhost->ka_probes)); if (setsockopt(fd, IPPROTO_TCP, TCP_USER_TIMEOUT, (const void *)&optval, optlen) < 0) return 1; #endif optval = vhost->ka_time; if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, (const void *)&optval, optlen) < 0) return 1; optval = vhost->ka_interval; if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPINTVL, (const void *)&optval, optlen) < 0) return 1; optval = vhost->ka_probes; if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPCNT, (const void *)&optval, optlen) < 0) return 1; #endif } #if defined(SO_BINDTODEVICE) if (!unix_skt && vhost->bind_iface && vhost->iface) { lwsl_info("binding listen skt to %s using SO_BINDTODEVICE\n", vhost->iface); if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, vhost->iface, (socklen_t)strlen(vhost->iface)) < 0) { lwsl_warn("Failed to bind to device %s\n", vhost->iface); return 1; } } #endif /* Disable Nagle */ optval = 1; #if defined (__sun) || defined(__QNX__) if (!unix_skt && setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (const void *)&optval, optlen) < 0) return 1; #elif !defined(__APPLE__) && \ !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__) && \ !defined(__NetBSD__) && \ !defined(__OpenBSD__) && \ !defined(__HAIKU__) if (!unix_skt && setsockopt(fd, SOL_TCP, TCP_NODELAY, (const void *)&optval, optlen) < 0) return 1; #else tcp_proto = getprotobyname("TCP"); if (!unix_skt && setsockopt(fd, tcp_proto->p_proto, TCP_NODELAY, &optval, optlen) < 0) return 1; #endif return lws_plat_set_nonblocking(fd); } static const int ip_opt_lws_flags[] = { LCCSCF_IP_LOW_LATENCY, LCCSCF_IP_HIGH_THROUGHPUT #if !defined(__OpenBSD__) && !defined(__sun) && !defined(__QNX__) , LCCSCF_IP_HIGH_RELIABILITY , LCCSCF_IP_LOW_COST #endif }, ip_opt_val[] = { IPTOS_LOWDELAY, IPTOS_THROUGHPUT #if !defined(__OpenBSD__) && !defined(__sun) && !defined(__QNX__) , IPTOS_RELIABILITY , IPTOS_MINCOST #endif }; #if !defined(LWS_WITH_NO_LOGS) static const char *ip_opt_names[] = { "LOWDELAY", "THROUGHPUT" #if !defined(__OpenBSD__) && !defined(__sun) && !defined(__QNX__) , "RELIABILITY" , "MINCOST" #endif }; #endif int lws_plat_set_socket_options_ip(lws_sockfd_type fd, uint8_t pri, int lws_flags) { int optval = (int)pri, ret = 0, n; socklen_t optlen = sizeof(optval); #if (_LWS_ENABLED_LOGS & LLL_WARN) int en; #endif #if 0 #if defined(TCP_FASTOPEN_CONNECT) optval = 1; if (setsockopt(fd, IPPROTO_TCP, TCP_FASTOPEN_CONNECT, (void *)&optval, sizeof(optval))) lwsl_warn("%s: FASTOPEN_CONNECT failed\n", __func__); optval = (int)pri; #endif #endif #if !defined(__APPLE__) && \ !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__) && \ !defined(__NetBSD__) && \ !defined(__OpenBSD__) && \ !defined(__sun) && \ !defined(__HAIKU__) && \ !defined(__CYGWIN__) && \ !defined(__QNX__) /* the BSDs don't have SO_PRIORITY */ if (pri) { /* 0 is the default already */ if (setsockopt(fd, SOL_SOCKET, SO_PRIORITY, (const void *)&optval, optlen) < 0) { #if (_LWS_ENABLED_LOGS & LLL_WARN) en = errno; lwsl_warn("%s: unable to set socket pri %d: errno %d\n", __func__, (int)pri, en); #endif ret = 1; } else lwsl_notice("%s: set pri %u\n", __func__, pri); } #endif #if !defined(__NuttX__) /* array size differs by platform */ for (n = 0; n < (int)LWS_ARRAY_SIZE(ip_opt_lws_flags); n++) { if (!(lws_flags & ip_opt_lws_flags[n])) continue; optval = (int)ip_opt_val[n]; if (setsockopt(fd, IPPROTO_IP, IP_TOS, (const void *)&optval, optlen) < 0) { #if !defined(LWS_WITH_NO_LOGS) en = errno; lwsl_warn("%s: unable to set %s: errno %d\n", __func__, ip_opt_names[n], en); #endif ret = 1; } else lwsl_notice("%s: set ip flag %s\n", __func__, ip_opt_names[n]); } #endif return ret; } /* cast a struct sockaddr_in6 * into addr for ipv6 */ enum { IP_SCORE_NONE, IP_SCORE_NONNATIVE, IP_SCORE_IPV6_SCOPE_BASE, /* ipv6 scopes */ IP_SCORE_GLOBAL_NATIVE = 18 }; int lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr, size_t addrlen) { int rc = LWS_ITOSA_NOT_EXIST; struct ifaddrs *ifr; struct ifaddrs *ifc; #if defined(LWS_WITH_IPV6) struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)addr; unsigned long sco = IP_SCORE_NONE; unsigned long ts; const uint8_t *p; #endif if (getifaddrs(&ifr)) { lwsl_err("%s: unable to getifaddrs: errno %d\n", __func__, errno); return LWS_ITOSA_USABLE; } for (ifc = ifr; ifc != NULL; ifc = ifc->ifa_next) { if (!ifc->ifa_addr || !ifc->ifa_name) continue; lwsl_debug(" interface %s vs %s (fam %d) ipv6 %d\n", ifc->ifa_name, ifname, ifc->ifa_addr->sa_family, ipv6); if (strcmp(ifc->ifa_name, ifname)) continue; switch (ifc->ifa_addr->sa_family) { #if defined(AF_PACKET) case AF_PACKET: /* interface exists but is not usable */ if (rc == LWS_ITOSA_NOT_EXIST) rc = LWS_ITOSA_NOT_USABLE; continue; #endif case AF_INET: #if defined(LWS_WITH_IPV6) if (ipv6) { /* any existing solution is better than this */ if (sco != IP_SCORE_NONE) break; sco = IP_SCORE_NONNATIVE; rc = LWS_ITOSA_USABLE; /* map IPv4 to IPv6 */ memset((char *)&addr6->sin6_addr, 0, sizeof(struct in6_addr)); addr6->sin6_addr.s6_addr[10] = 0xff; addr6->sin6_addr.s6_addr[11] = 0xff; memcpy(&addr6->sin6_addr.s6_addr[12], &((struct sockaddr_in *)ifc->ifa_addr)->sin_addr, sizeof(struct in_addr)); lwsl_debug("%s: uplevelling ipv4 bind to ipv6\n", __func__); break; } sco = IP_SCORE_GLOBAL_NATIVE; #endif rc = LWS_ITOSA_USABLE; memcpy(addr, (struct sockaddr_in *)ifc->ifa_addr, sizeof(struct sockaddr_in)); break; #if defined(LWS_WITH_IPV6) case AF_INET6: p = (const uint8_t *) &((struct sockaddr_in6 *)ifc->ifa_addr)->sin6_addr; ts = IP_SCORE_IPV6_SCOPE_BASE; if (p[0] == 0xff) ts = (unsigned long)(IP_SCORE_IPV6_SCOPE_BASE + (p[1] & 0xf)); if (sco >= ts) break; sco = ts; rc = LWS_ITOSA_USABLE; memcpy(&addr6->sin6_addr, &((struct sockaddr_in6 *)ifc->ifa_addr)->sin6_addr, sizeof(struct in6_addr)); break; #endif default: break; } } freeifaddrs(ifr); if (rc && !lws_sa46_parse_numeric_address(ifname, (lws_sockaddr46 *)addr)) rc = LWS_ITOSA_USABLE; return rc; } const char * lws_plat_inet_ntop(int af, const void *src, char *dst, socklen_t cnt) { return inet_ntop(af, src, dst, cnt); } int lws_plat_inet_pton(int af, const char *src, void *dst) { return inet_pton(af, src, dst); } int lws_plat_ifname_to_hwaddr(int fd, const char *ifname, uint8_t *hwaddr, int len) { #if defined(__linux__) struct ifreq i; memset(&i, 0, sizeof(i)); lws_strncpy(i.ifr_name, ifname, sizeof(i.ifr_name)); if (ioctl(fd, SIOCGIFHWADDR, &i) < 0) return -1; memcpy(hwaddr, &i.ifr_hwaddr.sa_data, 6); return 6; #else lwsl_err("%s: UNIMPLEMENTED on this platform\n", __func__); return -1; #endif } int lws_plat_rawudp_broadcast(uint8_t *p, const uint8_t *canned, size_t canned_len, size_t n, int fd, const char *iface) { #if defined(__linux__) struct sockaddr_ll sll; uint16_t *p16 = (uint16_t *)p; uint32_t ucs = 0; memcpy(p, canned, canned_len); p[2] = (uint8_t)(n >> 8); p[3] = (uint8_t)(n); while (p16 < (uint16_t *)(p + 20)) ucs = ucs + (uint32_t)(ntohs((uint16_t)(*p16++))); ucs += ucs >> 16; ucs ^= 0xffff; p[10] = (uint8_t)(ucs >> 8); p[11] = (uint8_t)(ucs); p[24] = (uint8_t)((n - 20) >> 8); p[25] = (uint8_t)((n - 20)); memset(&sll, 0, sizeof(sll)); sll.sll_family = AF_PACKET; sll.sll_protocol = (uint32_t)(htons((uint16_t)0x800)); sll.sll_halen = 6; sll.sll_ifindex = (int)if_nametoindex(iface); memset(sll.sll_addr, 0xff, 6); return (int)sendto(fd, p, n, 0, (struct sockaddr *)&sll, sizeof(sll)); #else lwsl_err("%s: UNIMPLEMENTED on this platform\n", __func__); return -1; #endif } int lws_plat_if_up(const char *ifname, int fd, int up) { #if defined(__linux__) struct ifreq ifr; memset(&ifr, 0, sizeof(ifr)); lws_strncpy(ifr.ifr_name, ifname, IFNAMSIZ); if (ioctl(fd, SIOCGIFFLAGS, &ifr) < 0) { lwsl_err("%s: SIOCGIFFLAGS fail\n", __func__); return 1; } if (up) ifr.ifr_flags |= IFF_UP; else ifr.ifr_flags &= ~IFF_UP; if (ioctl(fd, SIOCSIFFLAGS, &ifr) < 0) { lwsl_err("%s: SIOCSIFFLAGS fail\n", __func__); return 1; } return 0; #else lwsl_err("%s: UNIMPLEMENTED on this platform\n", __func__); return -1; #endif } int lws_plat_BINDTODEVICE(lws_sockfd_type fd, const char *ifname) { #if defined(__linux__) struct ifreq i; memset(&i, 0, sizeof(i)); i.ifr_addr.sa_family = AF_INET; lws_strncpy(i.ifr_ifrn.ifrn_name, ifname, sizeof(i.ifr_ifrn.ifrn_name)); if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, &i, sizeof(i)) < 0) { lwsl_notice("%s: failed %d\n", __func__, LWS_ERRNO); return 1; } return 0; #else lwsl_err("%s: UNIMPLEMENTED on this platform\n", __func__); return -1; #endif } int lws_plat_ifconfig(int fd, lws_dhcpc_ifstate_t *is) { #if defined(__linux__) struct rtentry route; struct ifreq ifr; memset(&ifr, 0, sizeof(ifr)); memset(&route, 0, sizeof(route)); lws_strncpy(ifr.ifr_name, is->ifname, IFNAMSIZ); lws_plat_if_up(is->ifname, fd, 0); memcpy(&ifr.ifr_addr, &is->sa46[LWSDH_SA46_IP], sizeof(struct sockaddr)); if (ioctl(fd, SIOCSIFADDR, &ifr) < 0) { lwsl_err("%s: SIOCSIFADDR fail\n", __func__); return 1; } if (is->sa46[LWSDH_SA46_IP].sa4.sin_family == AF_INET) { struct sockaddr_in sin; memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_addr.s_addr = *(uint32_t *)&is->nums[LWSDH_IPV4_SUBNET_MASK]; memcpy(&ifr.ifr_addr, &sin, sizeof(struct sockaddr)); if (ioctl(fd, SIOCSIFNETMASK, &ifr) < 0) { lwsl_err("%s: SIOCSIFNETMASK fail\n", __func__); return 1; } lws_plat_if_up(is->ifname, fd, 1); memcpy(&route.rt_gateway, &is->sa46[LWSDH_SA46_IPV4_ROUTER].sa4, sizeof(struct sockaddr)); sin.sin_addr.s_addr = 0; memcpy(&route.rt_dst, &sin, sizeof(struct sockaddr)); memcpy(&route.rt_genmask, &sin, sizeof(struct sockaddr)); route.rt_flags = RTF_UP | RTF_GATEWAY; route.rt_metric = 100; route.rt_dev = (char *)is->ifname; if (ioctl(fd, SIOCADDRT, &route) < 0) { lwsl_err("%s: SIOCADDRT 0x%x fail: %d\n", __func__, (unsigned int)htonl(*(uint32_t *)&is-> sa46[LWSDH_SA46_IPV4_ROUTER]. sa4.sin_addr.s_addr), LWS_ERRNO); return 1; } } else lws_plat_if_up(is->ifname, fd, 1); return 0; #else lwsl_err("%s: UNIMPLEMENTED on this platform\n", __func__); return -1; #endif } int lws_plat_vhost_tls_client_ctx_init(struct lws_vhost *vhost) { return 0; } #if defined(LWS_WITH_MBEDTLS) int lws_plat_mbedtls_net_send(void *ctx, const uint8_t *buf, size_t len) { int fd = ((mbedtls_net_context *) ctx)->MBEDTLS_PRIVATE_V30_ONLY(fd); int ret; if (fd < 0) return MBEDTLS_ERR_NET_INVALID_CONTEXT; ret = (int)write(fd, buf, len); if (ret >= 0) return ret; if (errno == EAGAIN || errno == EWOULDBLOCK) return MBEDTLS_ERR_SSL_WANT_WRITE; if (errno == EPIPE || errno == ECONNRESET) return MBEDTLS_ERR_NET_CONN_RESET; if( errno == EINTR ) return MBEDTLS_ERR_SSL_WANT_WRITE; return MBEDTLS_ERR_NET_SEND_FAILED; } int lws_plat_mbedtls_net_recv(void *ctx, unsigned char *buf, size_t len) { int fd = ((mbedtls_net_context *) ctx)->MBEDTLS_PRIVATE_V30_ONLY(fd); int ret; if (fd < 0) return MBEDTLS_ERR_NET_INVALID_CONTEXT; ret = (int)read(fd, buf, len); if (ret >= 0) return ret; if (errno == EAGAIN || errno == EWOULDBLOCK) return MBEDTLS_ERR_SSL_WANT_READ; if (errno == EPIPE || errno == ECONNRESET) return MBEDTLS_ERR_NET_CONN_RESET; if (errno == EINTR) return MBEDTLS_ERR_SSL_WANT_READ; return MBEDTLS_ERR_NET_RECV_FAILED; } #endif libwebsockets-4.3.5/lib/plat/unix/unix-spawn.c000066400000000000000000000370641476025525100213520ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #if !defined(_GNU_SOURCE) #define _GNU_SOURCE #endif #include "private-lib-core.h" #include #if defined(__OpenBSD__) || defined(__NetBSD__) #include #include #endif void lws_spawn_timeout(struct lws_sorted_usec_list *sul) { struct lws_spawn_piped *lsp = lws_container_of(sul, struct lws_spawn_piped, sul); lwsl_warn("%s: spawn exceeded timeout, killing\n", __func__); lws_spawn_piped_kill_child_process(lsp); } void lws_spawn_sul_reap(struct lws_sorted_usec_list *sul) { struct lws_spawn_piped *lsp = lws_container_of(sul, struct lws_spawn_piped, sul_reap); lwsl_notice("%s: reaping spawn after last stdpipe, tries left %d\n", __func__, lsp->reap_retry_budget); if (!lws_spawn_reap(lsp) && !lsp->pipes_alive) { if (--lsp->reap_retry_budget) { lws_sul_schedule(lsp->info.vh->context, lsp->info.tsi, &lsp->sul_reap, lws_spawn_sul_reap, 250 * LWS_US_PER_MS); } else { lwsl_err("%s: Unable to reap lsp %p, killing\n", __func__, lsp); lsp->reap_retry_budget = 20; lws_spawn_piped_kill_child_process(lsp); } } } static struct lws * lws_create_stdwsi(struct lws_context *context, int tsi, const struct lws_role_ops *ops) { struct lws_context_per_thread *pt = &context->pt[tsi]; struct lws *new_wsi; if (!context->vhost_list) return NULL; if ((unsigned int)pt->fds_count == context->fd_limit_per_thread - 1) { lwsl_err("no space for new conn\n"); return NULL; } lws_context_lock(context, __func__); new_wsi = __lws_wsi_create_with_role(context, tsi, ops, NULL); lws_context_unlock(context); if (new_wsi == NULL) { lwsl_err("Out of memory for new connection\n"); return NULL; } new_wsi->rxflow_change_to = LWS_RXFLOW_ALLOW; /* initialize the instance struct */ lws_role_transition(new_wsi, 0, LRS_ESTABLISHED, ops); new_wsi->hdr_parsing_completed = 0; /* * these can only be set once the protocol is known * we set an unestablished connection's protocol pointer * to the start of the defauly vhost supported list, so it can look * for matching ones during the handshake */ new_wsi->user_space = NULL; return new_wsi; } void lws_spawn_piped_destroy(struct lws_spawn_piped **_lsp) { struct lws_spawn_piped *lsp = *_lsp; int n; if (!lsp) return; lws_dll2_remove(&lsp->dll); lws_sul_cancel(&lsp->sul); lws_sul_cancel(&lsp->sul_reap); for (n = 0; n < 3; n++) { #if 0 if (lsp->pipe_fds[n][!!(n == 0)] == 0) lwsl_err("ZERO FD IN CGI CLOSE"); if (lsp->pipe_fds[n][!!(n == 0)] >= 0) { close(lsp->pipe_fds[n][!!(n == 0)]); lsp->pipe_fds[n][!!(n == 0)] = LWS_SOCK_INVALID; } #endif if (lsp->stdwsi[n]) { lws_set_timeout(lsp->stdwsi[n], 1, LWS_TO_KILL_ASYNC); lsp->stdwsi[n] = NULL; } } lws_free_set_NULL((*_lsp)); } int lws_spawn_reap(struct lws_spawn_piped *lsp) { long hz = sysconf(_SC_CLK_TCK); /* accounting Hz */ void *opaque = lsp->info.opaque; lsp_cb_t cb = lsp->info.reap_cb; struct lws_spawn_piped temp; struct tms tms; #if defined(__OpenBSD__) || defined(__NetBSD__) struct rusage rusa; int status; #endif int n; if (lsp->child_pid < 1) return 0; /* check if exited, do not reap yet */ memset(&lsp->si, 0, sizeof(lsp->si)); #if defined(__OpenBSD__) || defined(__NetBSD__) n = wait4(lsp->child_pid, &status, WNOHANG, &rusa); if (!n) return 0; lsp->si.si_code = WIFEXITED(status); #else n = waitid(P_PID, (id_t)lsp->child_pid, &lsp->si, WEXITED | WNOHANG | WNOWAIT); #endif if (n < 0) { lwsl_info("%s: child %d still running\n", __func__, lsp->child_pid); return 0; } if (!lsp->si.si_code) return 0; /* his process has exited... */ if (!lsp->reaped) { /* mark the earliest time we knew he had gone */ lsp->reaped = lws_now_usecs(); /* * Switch the timeout to restrict the amount of grace time * to drain stdwsi */ lws_sul_schedule(lsp->info.vh->context, lsp->info.tsi, &lsp->sul, lws_spawn_timeout, 5 * LWS_US_PER_SEC); } /* * Stage finalizing our reaction to the process going down until the * stdwsi flushed whatever is in flight and all noticed they were * closed. For that reason, each stdwsi close must call lws_spawn_reap * to check if that was the last one and we can proceed with the reap. */ if (!lsp->ungraceful && lsp->pipes_alive) { lwsl_info("%s: %d stdwsi alive, not reaping\n", __func__, lsp->pipes_alive); return 0; } /* we reached the reap point, no need for timeout wait */ lws_sul_cancel(&lsp->sul); /* * All the stdwsi went down, nothing more is coming... it's over * Collect the final information and then reap the dead process */ if (times(&tms) != (clock_t) -1) { /* * Cpu accounting in us */ lsp->accounting[0] = (lws_usec_t)((uint64_t)tms.tms_cstime * 1000000) / hz; lsp->accounting[1] = (lws_usec_t)((uint64_t)tms.tms_cutime * 1000000) / hz; lsp->accounting[2] = (lws_usec_t)((uint64_t)tms.tms_stime * 1000000) / hz; lsp->accounting[3] = (lws_usec_t)((uint64_t)tms.tms_utime * 1000000) / hz; } temp = *lsp; #if defined(__OpenBSD__) || defined(__NetBSD__) n = wait4(lsp->child_pid, &status, WNOHANG, &rusa); if (!n) return 0; lsp->si.si_code = WIFEXITED(status); if (lsp->si.si_code == CLD_EXITED) temp.si.si_code = CLD_EXITED; temp.si.si_status = WEXITSTATUS(status); #else n = waitid(P_PID, (id_t)lsp->child_pid, &temp.si, WEXITED | WNOHANG); #endif temp.si.si_status &= 0xff; /* we use b8 + for flags */ lwsl_info("%s: waitd says %d, process exit %d\n", __func__, n, temp.si.si_status); lsp->child_pid = -1; /* destroy the lsp itself first (it's freed and plsp set NULL */ if (lsp->info.plsp) lws_spawn_piped_destroy(lsp->info.plsp); /* then do the parent callback informing it's destroyed */ if (cb) cb(opaque, temp.accounting, &temp.si, temp.we_killed_him_timeout | (temp.we_killed_him_spew << 1)); return 1; /* was reaped */ } int lws_spawn_piped_kill_child_process(struct lws_spawn_piped *lsp) { int status, n; if (lsp->child_pid <= 0) return 1; lsp->ungraceful = 1; /* don't wait for flushing, just kill it */ if (lws_spawn_reap(lsp)) /* that may have invalidated lsp */ return 0; /* kill the process group */ n = kill(-lsp->child_pid, SIGTERM); lwsl_debug("%s: SIGTERM child PID %d says %d (errno %d)\n", __func__, lsp->child_pid, n, errno); if (n < 0) { /* * hum seen errno=3 when process is listed in ps, * it seems we don't always retain process grouping * * Direct these fallback attempt to the exact child */ n = kill(lsp->child_pid, SIGTERM); if (n < 0) { n = kill(lsp->child_pid, SIGPIPE); if (n < 0) { n = kill(lsp->child_pid, SIGKILL); if (n < 0) lwsl_info("%s: SIGKILL PID %d " "failed errno %d " "(maybe zombie)\n", __func__, lsp->child_pid, errno); } } } /* He could be unkillable because he's a zombie */ n = 1; while (n > 0) { n = waitpid(-lsp->child_pid, &status, WNOHANG); if (n > 0) lwsl_debug("%s: reaped PID %d\n", __func__, n); if (n <= 0) { n = waitpid(lsp->child_pid, &status, WNOHANG); if (n > 0) lwsl_debug("%s: reaped PID %d\n", __func__, n); } } lws_spawn_reap(lsp); /* that may have invalidated lsp */ return 0; } /* * Deals with spawning a subprocess and executing it securely with stdin/out/err * diverted into pipes */ struct lws_spawn_piped * lws_spawn_piped(const struct lws_spawn_piped_info *i) { const struct lws_protocols *pcol = i->vh->context->vhost_list->protocols; struct lws_context *context = i->vh->context; struct lws_spawn_piped *lsp; const char *wd; int n, m; if (i->protocol_name) pcol = lws_vhost_name_to_protocol(i->vh, i->protocol_name); if (!pcol) { lwsl_err("%s: unknown protocol %s\n", __func__, i->protocol_name ? i->protocol_name : "default"); return NULL; } lsp = lws_zalloc(sizeof(*lsp), __func__); if (!lsp) return NULL; /* wholesale take a copy of info */ lsp->info = *i; lsp->reap_retry_budget = 20; /* * Prepare the stdin / out / err pipes */ for (n = 0; n < 3; n++) { lsp->pipe_fds[n][0] = -1; lsp->pipe_fds[n][1] = -1; } /* create pipes for [stdin|stdout] and [stderr] */ for (n = 0; n < 3; n++) { if (pipe(lsp->pipe_fds[n]) == -1) goto bail1; lws_plat_apply_FD_CLOEXEC(lsp->pipe_fds[n][n == 0]); } /* * At this point, we have 6 pipe fds open on lws side and no wsis * bound to them */ /* create wsis for each stdin/out/err fd */ for (n = 0; n < 3; n++) { lsp->stdwsi[n] = lws_create_stdwsi(i->vh->context, i->tsi, i->ops ? i->ops : &role_ops_raw_file); if (!lsp->stdwsi[n]) { lwsl_err("%s: unable to create lsp stdwsi\n", __func__); goto bail2; } __lws_lc_tag(i->vh->context, &i->vh->context->lcg[LWSLCG_WSI], &lsp->stdwsi[n]->lc, "nspawn-stdwsi-%d", n); lsp->stdwsi[n]->lsp_channel = (uint8_t)n; lws_vhost_bind_wsi(i->vh, lsp->stdwsi[n]); lsp->stdwsi[n]->a.protocol = pcol; lsp->stdwsi[n]->a.opaque_user_data = i->opaque; lwsl_debug("%s: lsp stdwsi %p: pipe idx %d -> fd %d / %d\n", __func__, lsp->stdwsi[n], n, lsp->pipe_fds[n][n == 0], lsp->pipe_fds[n][n != 0]); /* read side is 0, stdin we want the write side, others read */ lsp->stdwsi[n]->desc.sockfd = lsp->pipe_fds[n][n == 0]; if (fcntl(lsp->pipe_fds[n][n == 0], F_SETFL, O_NONBLOCK) < 0) { lwsl_err("%s: setting NONBLOCK failed\n", __func__); goto bail2; } /* * We have bound 3 x pipe fds to wsis, wr side of stdin and rd * side of stdout / stderr... those are marked CLOEXEC so they * won't go through the fork * * rd side of stdin and wr side of stdout / stderr are open but * not bound to anything on lws side. */ } /* * Stitch the wsi fd into the poll wait */ for (n = 0; n < 3; n++) { if (context->event_loop_ops->sock_accept) if (context->event_loop_ops->sock_accept(lsp->stdwsi[n])) goto bail3; if (__insert_wsi_socket_into_fds(context, lsp->stdwsi[n])) goto bail3; if (i->opt_parent) { lsp->stdwsi[n]->parent = i->opt_parent; lsp->stdwsi[n]->sibling_list = i->opt_parent->child_list; i->opt_parent->child_list = lsp->stdwsi[n]; } } if (lws_change_pollfd(lsp->stdwsi[LWS_STDIN], LWS_POLLIN, LWS_POLLOUT)) goto bail3; if (lws_change_pollfd(lsp->stdwsi[LWS_STDOUT], LWS_POLLOUT, LWS_POLLIN)) goto bail3; if (lws_change_pollfd(lsp->stdwsi[LWS_STDERR], LWS_POLLOUT, LWS_POLLIN)) goto bail3; lwsl_info("%s: fds in %d, out %d, err %d\n", __func__, lsp->stdwsi[LWS_STDIN]->desc.sockfd, lsp->stdwsi[LWS_STDOUT]->desc.sockfd, lsp->stdwsi[LWS_STDERR]->desc.sockfd); /* we are ready with the redirection pipes... do the (v)fork */ #if defined(__sun) || !defined(LWS_HAVE_VFORK) || !defined(LWS_HAVE_EXECVPE) lsp->child_pid = fork(); #else lsp->child_pid = vfork(); #endif if (lsp->child_pid < 0) { lwsl_err("%s: fork failed, errno %d", __func__, errno); goto bail3; } #if defined(__linux__) if (!lsp->child_pid) prctl(PR_SET_PDEATHSIG, SIGTERM); #endif if (lsp->info.disable_ctrlc) /* stops non-daemonized main processess getting SIGINT * from TTY */ #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) setpgid(0, 0); #else setpgrp(); #endif if (lsp->child_pid) { /* * We are the parent process. We can close our copy of the * "other" side of the pipe fds, ie, rd for stdin and wr for * stdout / stderr. */ for (n = 0; n < 3; n++) /* these guys didn't have any wsi footprint */ close(lsp->pipe_fds[n][n != 0]); lsp->pipes_alive = 3; lsp->created = lws_now_usecs(); lwsl_info("%s: lsp %p spawned PID %d\n", __func__, lsp, lsp->child_pid); lws_sul_schedule(context, i->tsi, &lsp->sul, lws_spawn_timeout, i->timeout_us ? i->timeout_us : 300 * LWS_US_PER_SEC); if (i->owner) lws_dll2_add_head(&lsp->dll, i->owner); if (i->timeout_us) lws_sul_schedule(context, i->tsi, &lsp->sul, lws_spawn_timeout, i->timeout_us); return lsp; } /* * We are the forked process, redirect and kill inherited things. * * Because of vfork(), we cannot do anything that changes pages in * the parent environment. Stuff that changes kernel state for the * process is OK. Stuff that happens after the execvpe() is OK. */ if (i->chroot_path && chroot(i->chroot_path)) { lwsl_err("%s: child chroot %s failed, errno %d\n", __func__, i->chroot_path, errno); exit(2); } /* cwd: somewhere we can at least read things and enter it */ wd = i->wd; if (!wd) wd = "/tmp"; if (chdir(wd)) lwsl_notice("%s: Failed to cd to %s\n", __func__, wd); /* * Bind the child's stdin / out / err to its side of our pipes */ for (m = 0; m < 3; m++) { if (dup2(lsp->pipe_fds[m][m != 0], m) < 0) { lwsl_err("%s: stdin dup2 failed\n", __func__); goto bail3; } /* * CLOEXEC on the lws-side of the pipe fds should have already * dealt with closing those for the child perspective. * * Now it has done the dup, the child should close its original * copies of its side of the pipes. */ close(lsp->pipe_fds[m][m != 0]); } #if defined(__sun) || !defined(LWS_HAVE_VFORK) || !defined(LWS_HAVE_EXECVPE) #if defined(__linux__) || defined(__APPLE__) || defined(__sun) m = 0; while (i->env_array[m]){ const char *p = strchr(i->env_array[m], '='); int naml = lws_ptr_diff(p, i->env_array[m]); char enam[32]; if (p) { lws_strnncpy(enam, i->env_array[m], naml, sizeof(enam)); setenv(enam, p + 1, 1); } m++; } #endif execvp(i->exec_array[0], (char * const *)&i->exec_array[0]); #else execvpe(i->exec_array[0], (char * const *)&i->exec_array[0], (char **)&i->env_array[0]); #endif lwsl_err("%s: child exec of %s failed %d\n", __func__, i->exec_array[0], LWS_ERRNO); _exit(1); bail3: while (--n >= 0) __remove_wsi_socket_from_fds(lsp->stdwsi[n]); bail2: for (n = 0; n < 3; n++) if (lsp->stdwsi[n]) __lws_free_wsi(lsp->stdwsi[n]); bail1: for (n = 0; n < 3; n++) { if (lsp->pipe_fds[n][0] >= 0) close(lsp->pipe_fds[n][0]); if (lsp->pipe_fds[n][1] >= 0) close(lsp->pipe_fds[n][1]); } lws_free(lsp); lwsl_err("%s: failed\n", __func__); return NULL; } void lws_spawn_stdwsi_closed(struct lws_spawn_piped *lsp, struct lws *wsi) { int n; assert(lsp); lsp->pipes_alive--; lwsl_debug("%s: pipes alive %d\n", __func__, lsp->pipes_alive); if (!lsp->pipes_alive) lws_sul_schedule(lsp->info.vh->context, lsp->info.tsi, &lsp->sul_reap, lws_spawn_sul_reap, 1); for (n = 0; n < 3; n++) if (lsp->stdwsi[n] == wsi) lsp->stdwsi[n] = NULL; } int lws_spawn_get_stdfd(struct lws *wsi) { return wsi->lsp_channel; } libwebsockets-4.3.5/lib/plat/windows/000077500000000000000000000000001476025525100175725ustar00rootroot00000000000000libwebsockets-4.3.5/lib/plat/windows/CMakeLists.txt000066400000000000000000000063431476025525100223400ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # # The strategy is to only export to PARENT_SCOPE # # - changes to LIB_LIST # - changes to SOURCES # - includes via include_directories # # and keep everything else private include_directories(.) list(APPEND SOURCES plat/windows/windows-fds.c plat/windows/windows-file.c plat/windows/windows-init.c plat/windows/windows-misc.c plat/windows/windows-pipe.c plat/windows/windows-plugins.c plat/windows/windows-service.c plat/windows/windows-sockets.c ) if (LWS_WITH_SYS_ASYNC_DNS) list(APPEND SOURCES plat/windows/windows-resolv.c) endif() if (LWS_WITH_SPAWN) list(APPEND SOURCES plat/windows/windows-spawn.c) endif() if (LWS_WITH_ZLIB AND LWS_WITH_BUNDLED_ZLIB) set(WIN32_ZLIB_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../../win32port/zlib") set(ZLIB_SRCS ${WIN32_ZLIB_PATH}/adler32.c ${WIN32_ZLIB_PATH}/compress.c ${WIN32_ZLIB_PATH}/crc32.c ${WIN32_ZLIB_PATH}/deflate.c ${WIN32_ZLIB_PATH}/gzlib.c ${WIN32_ZLIB_PATH}/gzread.c ${WIN32_ZLIB_PATH}/gzwrite.c ${WIN32_ZLIB_PATH}/infback.c ${WIN32_ZLIB_PATH}/inffast.c ${WIN32_ZLIB_PATH}/inflate.c ${WIN32_ZLIB_PATH}/inftrees.c ${WIN32_ZLIB_PATH}/trees.c ${WIN32_ZLIB_PATH}/uncompr.c ${WIN32_ZLIB_PATH}/zutil.c) add_library(zlib_internal STATIC ${ZLIB_SRCS}) set(ZLIB_INCLUDE_DIRS ${WIN32_ZLIB_PATH}) set(ZLIB_LIBRARIES "") set(ZLIB_FOUND 1) # Make sure zlib_internal is compiled before the libs. foreach (lib ${LWS_LIBRARIES}) add_dependencies(${lib} zlib_internal) endforeach() endif() # Add helper files for Windows # (from ./lib perspective) set(WIN32_HELPERS_PATH ../win32port/win32helpers) # from our perspective in ./lib/plat/windows include_directories(../../${WIN32_HELPERS_PATH}) list(APPEND SOURCES ${WIN32_HELPERS_PATH}/gettimeofday.c ) list(APPEND HDR_PRIVATE ${WIN32_HELPERS_PATH}/gettimeofday.h ) # # Keep explicit parent scope exports at end # exports_to_parent_scope() set(WIN32_HELPERS_PATH ${WIN32_HELPERS_PATH} PARENT_SCOPE) set(HDR_PRIVATE ${HDR_PRIVATE} PARENT_SCOPE) set(ZLIB_FOUND ${ZLIB_FOUND} PARENT_SCOPE) set(LIB_LIST_AT_END ${LIB_LIST_AT_END} PARENT_SCOPE) libwebsockets-4.3.5/lib/plat/windows/private-lib-plat-windows.h000066400000000000000000000105641476025525100246150ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * Included from lib/private-lib-core.h if defined(WIN32) || defined(_WIN32) */ #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #if defined(WINVER) && (WINVER < 0x0501) #undef WINVER #undef _WIN32_WINNT #define WINVER 0x0501 #define _WIN32_WINNT WINVER #endif #define LWS_NO_DAEMONIZE #define LWS_ERRNO WSAGetLastError() #define LWS_EAGAIN WSAEWOULDBLOCK #define LWS_EALREADY WSAEALREADY #define LWS_EINPROGRESS WSAEINPROGRESS #define LWS_EINTR WSAEINTR #define LWS_EISCONN WSAEISCONN #define LWS_ENOTCONN WSAENOTCONN #define LWS_EWOULDBLOCK WSAEWOULDBLOCK #define LWS_EADDRINUSE WSAEADDRINUSE #define MSG_NOSIGNAL 0 #define SHUT_RDWR SD_BOTH #define SOL_TCP IPPROTO_TCP #define SHUT_WR SD_SEND #define compatible_close(fd) closesocket(fd) #define compatible_file_close(fd) CloseHandle(fd) #define lws_set_blocking_send(wsi) wsi->sock_send_blocking = 1 #include #include #include #include #ifdef LWS_HAVE_IN6ADDR_H #include #endif #include #include #if defined(LWS_WITH_UNIX_SOCK) #include #endif #if defined(LWS_WITH_TLS) #include #endif #if defined(LWS_HAVE_PTHREAD_H) #define lws_mutex_t pthread_mutex_t #define lws_mutex_init(x) pthread_mutex_init(&(x), NULL) #define lws_mutex_destroy(x) pthread_mutex_destroy(&(x)) #define lws_mutex_lock(x) pthread_mutex_lock(&(x)) #define lws_mutex_unlock(x) pthread_mutex_unlock(&(x)) #endif #if !defined(LWS_HAVE_ATOLL) #if defined(LWS_HAVE__ATOI64) #define atoll _atoi64 #else #warning No atoll or _atoi64 available, using atoi #define atoll atoi #endif #endif #ifndef __func__ #define __func__ __FUNCTION__ #endif #ifdef LWS_HAVE__VSNPRINTF #define vsnprintf _vsnprintf #endif /* we don't have an implementation for this on windows... */ int kill(int pid, int sig); int fork(void); #ifndef SIGINT #define SIGINT 2 #endif #include #ifndef BIG_ENDIAN #define BIG_ENDIAN 4321 /* to show byte order (taken from gcc) */ #endif #ifndef LITTLE_ENDIAN #define LITTLE_ENDIAN 1234 #endif #ifndef BYTE_ORDER #define BYTE_ORDER LITTLE_ENDIAN #endif #undef __P #ifndef __P #if __STDC__ #define __P(protos) protos #else #define __P(protos) () #endif #endif #ifdef _WIN32 #ifndef FD_HASHTABLE_MODULUS #define FD_HASHTABLE_MODULUS 32 #endif #endif #define lws_plat_socket_offset() (0) struct lws; struct lws_context; #define LWS_FD_HASH(fd) ((fd ^ (fd >> 8) ^ (fd >> 16)) % FD_HASHTABLE_MODULUS) struct lws_fd_hashtable { struct lws **wsi; int length; }; #if !defined(LWS_EXTERN) #ifdef LWS_DLL #ifdef LWS_INTERNAL #define LWS_EXTERN extern __declspec(dllexport) #else #define LWS_EXTERN extern __declspec(dllimport) #endif #else #define LWS_EXTERN #endif #endif typedef SOCKET lws_sockfd_type; #if defined(__MINGW32__) typedef int lws_filefd_type; #else typedef HANDLE lws_filefd_type; #endif #define LWS_WIN32_HANDLE_TYPES LWS_EXTERN struct lws * wsi_from_fd(const struct lws_context *context, lws_sockfd_type fd); LWS_EXTERN int insert_wsi(struct lws_context *context, struct lws *wsi); LWS_EXTERN int delete_from_fd(struct lws_context *context, lws_sockfd_type fd); libwebsockets-4.3.5/lib/plat/windows/windows-fds.c000066400000000000000000000046411476025525100222070ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #ifndef _WINSOCK_DEPRECATED_NO_WARNINGS #define _WINSOCK_DEPRECATED_NO_WARNINGS #endif #include "private-lib-core.h" struct lws * wsi_from_fd(const struct lws_context *context, lws_sockfd_type fd) { int h = LWS_FD_HASH(fd); int n = 0; for (n = 0; n < context->fd_hashtable[h].length; n++) if (context->fd_hashtable[h].wsi[n]->desc.sockfd == fd) return context->fd_hashtable[h].wsi[n]; return NULL; } int insert_wsi(struct lws_context *context, struct lws *wsi) { int h = LWS_FD_HASH(wsi->desc.sockfd); if (context->fd_hashtable[h].length == (getdtablesize() - 1)) { lwsl_err("hash table overflow\n"); return 1; } context->fd_hashtable[h].wsi[context->fd_hashtable[h].length++] = wsi; return 0; } int delete_from_fd(struct lws_context *context, lws_sockfd_type fd) { int h = LWS_FD_HASH(fd); int n = 0; for (n = 0; n < context->fd_hashtable[h].length; n++) if (context->fd_hashtable[h].wsi[n]->desc.sockfd == fd) { while (n < context->fd_hashtable[h].length) { context->fd_hashtable[h].wsi[n] = context->fd_hashtable[h].wsi[n + 1]; n++; } context->fd_hashtable[h].length--; return 0; } lwsl_debug("Failed to find fd %d requested for " "delete in hashtable\n", fd); return 1; } libwebsockets-4.3.5/lib/plat/windows/windows-file.c000066400000000000000000000107401476025525100223470ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #ifndef _WINSOCK_DEPRECATED_NO_WARNINGS #define _WINSOCK_DEPRECATED_NO_WARNINGS #endif #include "private-lib-core.h" int lws_plat_apply_FD_CLOEXEC(int n) { return 0; } lws_fop_fd_t _lws_plat_file_open(const struct lws_plat_file_ops *fops, const char *filename, const char *vpath, lws_fop_flags_t *flags) { HANDLE ret; WCHAR buf[MAX_PATH]; lws_fop_fd_t fop_fd; LARGE_INTEGER llFileSize = {0}; MultiByteToWideChar(CP_UTF8, 0, filename, -1, buf, LWS_ARRAY_SIZE(buf)); if (((*flags) & 7) == _O_RDONLY) ret = CreateFileW(buf, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); else ret = CreateFileW(buf, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (ret == INVALID_HANDLE_VALUE) goto bail; fop_fd = malloc(sizeof(*fop_fd)); if (!fop_fd) goto bail; fop_fd->fops = fops; #if defined(__MINGW32__) /* we use filesystem_priv */ fop_fd->fd = (int)(intptr_t)ret; #else fop_fd->fd = ret; #endif fop_fd->filesystem_priv = ret; fop_fd->flags = *flags; fop_fd->len = GetFileSize(ret, NULL); if(GetFileSizeEx(ret, &llFileSize)) fop_fd->len = llFileSize.QuadPart; fop_fd->pos = 0; return fop_fd; bail: return NULL; } int _lws_plat_file_close(lws_fop_fd_t *fop_fd) { HANDLE fd = (*fop_fd)->filesystem_priv; free(*fop_fd); *fop_fd = NULL; CloseHandle((HANDLE)fd); return 0; } lws_fileofs_t _lws_plat_file_seek_cur(lws_fop_fd_t fop_fd, lws_fileofs_t offset) { LARGE_INTEGER l; l.QuadPart = offset; if (!SetFilePointerEx((HANDLE)fop_fd->filesystem_priv, l, NULL, FILE_CURRENT)) { lwsl_err("error seeking from cur %ld, offset %ld\n", (long)fop_fd->pos, (long)offset); return -1; } LARGE_INTEGER zero; zero.QuadPart = 0; LARGE_INTEGER newPos; if (!SetFilePointerEx((HANDLE)fop_fd->filesystem_priv, zero, &newPos, FILE_CURRENT)) { lwsl_err("error seeking from cur %ld, offset %ld\n", (long)fop_fd->pos, (long)offset); return -1; } fop_fd->pos = newPos.QuadPart; return newPos.QuadPart; } int _lws_plat_file_read(lws_fop_fd_t fop_fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len) { DWORD _amount; if (!ReadFile((HANDLE)fop_fd->filesystem_priv, buf, (DWORD)len, &_amount, NULL)) { *amount = 0; return 1; } fop_fd->pos += _amount; *amount = (unsigned long)_amount; return 0; } int _lws_plat_file_write(lws_fop_fd_t fop_fd, lws_filepos_t *amount, uint8_t* buf, lws_filepos_t len) { DWORD _amount; if (!WriteFile((HANDLE)fop_fd->filesystem_priv, buf, (DWORD)len, &_amount, NULL)) { *amount = 0; return 1; } fop_fd->pos += _amount; *amount = (unsigned long)_amount; return 0; } int lws_plat_write_cert(struct lws_vhost *vhost, int is_key, int fd, void *buf, size_t len) { int n; n = (int)write(fd, buf, (unsigned int)len); lseek(fd, 0, SEEK_SET); return (size_t)n != len; } int lws_plat_write_file(const char *filename, void *buf, size_t len) { int m, fd; fd = lws_open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0600); if (fd == -1) return -1; m = (int)write(fd, buf, (unsigned int)len); close(fd); return (size_t)m != len; } int lws_plat_read_file(const char *filename, void *buf, size_t len) { int n, fd = lws_open(filename, O_RDONLY); if (fd == -1) return -1; n = (int)read(fd, buf, (unsigned int)len); close(fd); return n; } libwebsockets-4.3.5/lib/plat/windows/windows-init.c000066400000000000000000000076301476025525100223770ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #ifndef _WINSOCK_DEPRECATED_NO_WARNINGS #define _WINSOCK_DEPRECATED_NO_WARNINGS #endif #include "private-lib-core.h" int lws_plat_drop_app_privileges(struct lws_context *context, int actually_set) { return 0; } int lws_plat_context_early_init(void) { WORD wVersionRequested; WSADATA wsaData; int err; /* Use the MAKEWORD(lowbyte, highbyte) macro from Windef.h */ wVersionRequested = MAKEWORD(2, 2); err = WSAStartup(wVersionRequested, &wsaData); if (!err) return 0; /* * Tell the user that we could not find a usable * Winsock DLL */ lwsl_err("WSAStartup failed with error: %d\n", err); return 1; } #if defined(LWS_WITH_PLUGINS) static int protocol_plugin_cb(struct lws_plugin *pin, void *each_user) { struct lws_context *context = (struct lws_context *)each_user; const lws_plugin_protocol_t *plpr = (const lws_plugin_protocol_t *)pin->hdr; context->plugin_protocol_count += plpr->count_protocols; context->plugin_extension_count += plpr->count_extensions; return 0; } #endif int lws_plat_init(struct lws_context *context, const struct lws_context_creation_info *info) { struct lws_context_per_thread *pt = &context->pt[0]; int i, n = context->count_threads; #if defined(LWS_WITH_MBEDTLS) { int n; /* initialize platform random through mbedtls */ mbedtls_entropy_init(&context->mec); mbedtls_ctr_drbg_init(&context->mcdc); n = mbedtls_ctr_drbg_seed(&context->mcdc, mbedtls_entropy_func, &context->mec, NULL, 0); if (n) lwsl_err("%s: mbedtls_ctr_drbg_seed() returned 0x%x\n", __func__, n); #if 0 else { uint8_t rtest[16]; lwsl_notice("%s: started drbg\n", __func__); if (mbedtls_ctr_drbg_random(&context->mcdc, rtest, sizeof(rtest))) lwsl_err("%s: get random failed\n", __func__); else lwsl_hexdump_notice(rtest, sizeof(rtest)); } #endif } #endif for (i = 0; i < FD_HASHTABLE_MODULUS; i++) { context->fd_hashtable[i].wsi = lws_zalloc(sizeof(struct lws*) * context->max_fds, "win hashtable"); if (!context->fd_hashtable[i].wsi) return -1; } while (n--) { pt->fds_count = 0; pt++; } context->fd_random = 0; #if defined(LWS_WITH_PLUGINS) if (info->plugin_dirs) lws_plat_plugins_init(&context->plugin_list, info->plugin_dirs, "lws_protocol_plugin", protocol_plugin_cb, context); #endif return 0; } void lws_plat_context_early_destroy(struct lws_context *context) { } void lws_plat_context_late_destroy(struct lws_context *context) { int n; #ifdef LWS_WITH_PLUGINS if (context->plugin_list) lws_plugins_destroy(&context->plugin_list, NULL, NULL); #endif for (n = 0; n < FD_HASHTABLE_MODULUS; n++) { if (context->fd_hashtable[n].wsi) lws_free(context->fd_hashtable[n].wsi); } WSACleanup(); } libwebsockets-4.3.5/lib/plat/windows/windows-misc.c000066400000000000000000000055411476025525100223660ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #ifndef _WINSOCK_DEPRECATED_NO_WARNINGS #define _WINSOCK_DEPRECATED_NO_WARNINGS #endif #include "private-lib-core.h" /* * Normally you don't want this, use lws_sul instead inside the event loop. * But sometimes for drivers it makes sense, so there's an internal-only * crossplatform api for it. */ void lws_msleep(unsigned int ms) { Sleep(ms); } lws_usec_t lws_now_usecs(void) { #ifndef DELTA_EPOCH_IN_MICROSECS #define DELTA_EPOCH_IN_MICROSECS 11644473600000000ULL #endif FILETIME filetime; ULARGE_INTEGER datetime; #ifdef _WIN32_WCE GetCurrentFT(&filetime); #else GetSystemTimeAsFileTime(&filetime); #endif /* * As per Windows documentation for FILETIME, copy the resulting * FILETIME structure to a ULARGE_INTEGER structure using memcpy * (using memcpy instead of direct assignment can prevent alignment * faults on 64-bit Windows). */ memcpy(&datetime, &filetime, sizeof(datetime)); /* Windows file times are in 100s of nanoseconds. */ return (datetime.QuadPart / 10) - DELTA_EPOCH_IN_MICROSECS; } #ifdef _WIN32_WCE time_t time(time_t *t) { time_t ret = lws_now_usecs() / 1000000; if(t != NULL) *t = ret; return ret; } #endif size_t lws_get_random(struct lws_context *context, void *buf, size_t len) { size_t n; char *p = (char *)buf; for (n = 0; n < len; n++) p[n] = (unsigned char)rand(); return n; } void lwsl_emit_syslog(int level, const char *line) { lwsl_emit_stderr(level, line); } int kill(int pid, int sig) { lwsl_err("Sorry Windows doesn't support kill()."); exit(0); } int fork(void) { lwsl_err("Sorry Windows doesn't support fork()."); exit(0); } int lws_plat_recommended_rsa_bits(void) { return 4096; } libwebsockets-4.3.5/lib/plat/windows/windows-pipe.c000066400000000000000000000077701476025525100223760ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #ifndef _WINSOCK_DEPRECATED_NO_WARNINGS #define _WINSOCK_DEPRECATED_NO_WARNINGS #endif #include "private-lib-core.h" #include #include #include #include int lws_plat_pipe_create(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; struct sockaddr_in *si = &pt->frt_pipe_si; lws_sockfd_type *fd = pt->dummy_pipe_fds; socklen_t sl; /* * Non-WSA HANDLEs can't join the WSAPoll() wait... use a UDP socket * listening on 127.0.0.1:xxxx and send a byte to it from a second UDP * socket to cancel the wait. * * Set the port to 0 at the bind, so lwip will choose a free one in the * ephemeral range for us. */ fd[0] = socket(AF_INET, SOCK_DGRAM, 0); if (fd[0] == INVALID_SOCKET) goto bail; fd[1] = socket(AF_INET, SOCK_DGRAM, 0); if (fd[1] == INVALID_SOCKET) goto bail; /* * No need for memset since it's in zalloc'd context... it's in the * context so we can reuse the prepared sockaddr to send tp fd[0] whem * we want to cancel the wait */ si->sin_family = AF_INET; si->sin_addr.s_addr = htonl(INADDR_LOOPBACK); si->sin_port = 0; if (bind(fd[0], (const struct sockaddr *)si, sizeof(*si)) < 0) goto bail; /* * Query the socket to set pt->frt_pipe_si to the full sockaddr it * wants to be addressed by, including the port that the os chose. * * Afterwards, we can use this prepared sockaddr stashed in the context * to trigger the "pipe" without any other preliminaries. */ sl = sizeof(*si); if (getsockname(fd[0], (struct sockaddr *)si, &sl)) goto bail; lwsl_info("%s: cancel UDP skt port %d\n", __func__, ntohs(si->sin_port)); return 0; bail: lwsl_err("%s: failed\n", __func__); return 1; } int lws_plat_pipe_signal(struct lws_context *ctx, int tsi) { struct lws_context_per_thread *pt = &ctx->pt[tsi]; struct sockaddr_in *si = &pt->frt_pipe_si; lws_sockfd_type *fd = pt->dummy_pipe_fds; char u = 0; int n; /* * Send a single UDP byte payload to the listening socket fd[0], forcing * the event loop wait to wake. fd[1] and context->frt_pipe_si are * set at pt creation and are static. */ n = sendto(fd[1], &u, 1, 0, (struct sockaddr *)si, sizeof(*si)); return n != 1; } void lws_plat_pipe_close(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; if (pt->dummy_pipe_fds[0] && pt->dummy_pipe_fds[0] != LWS_SOCK_INVALID) closesocket(pt->dummy_pipe_fds[0]); if (pt->dummy_pipe_fds[1] && pt->dummy_pipe_fds[1] != LWS_SOCK_INVALID) closesocket(pt->dummy_pipe_fds[1]); pt->dummy_pipe_fds[0] = pt->dummy_pipe_fds[1] = LWS_SOCK_INVALID; } int lws_plat_pipe_is_fd_assocated(struct lws_context *cx, int tsi, lws_sockfd_type fd) { struct lws_context_per_thread *pt = &cx->pt[tsi]; return fd == pt->dummy_pipe_fds[0] || fd == pt->dummy_pipe_fds[1]; } libwebsockets-4.3.5/lib/plat/windows/windows-plugins.c000066400000000000000000000104161476025525100231110ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #ifndef _WINSOCK_DEPRECATED_NO_WARNINGS #define _WINSOCK_DEPRECATED_NO_WARNINGS #endif #include "private-lib-core.h" /* * ie, if the plugins api needed at all */ #if defined(LWS_WITH_PLUGINS_API) && (UV_VERSION_MAJOR > 0) const lws_plugin_header_t * lws_plat_dlopen(struct lws_plugin **pplugin, const char *libpath, const char *sofilename, const char *_class, each_plugin_cb_t each, void *each_user) { const lws_plugin_header_t *hdr; struct lws_plugin *pin; char sym[96], *dot; uv_lib_t lib; void *v; int m; lib.errmsg = NULL; lib.handle = NULL; if (uv_dlopen(libpath, &lib)) { uv_dlerror(&lib); lwsl_err("Error loading DSO: %s\n", lib.errmsg); uv_dlclose(&lib); return NULL; } /* we could open it... can we get his export struct? */ m = lws_snprintf(sym, sizeof(sym) - 1, "%s", sofilename); if (m < 4) goto bail; dot = strchr(sym, '.'); if (dot) *dot = '\0'; /* snip the .so or .lib or what-have-you*/ if (uv_dlsym(&lib, sym, &v)) { uv_dlerror(&lib); lwsl_err("%s: Failed to get '%s' on %s: %s\n", __func__, path, libpath, lib.errmsg); goto bail; } hdr = (const lws_plugin_header_t *)v; if (hdr->api_magic != LWS_PLUGIN_API_MAGIC) { lwsl_info("%s: plugin %s has outdated api %d (vs %d)\n", __func__, libpath, hdr->api_magic, LWS_PLUGIN_API_MAGIC); goto bail; } if (strcmp(hdr->lws_build_hash, LWS_BUILD_HASH)) goto bail; if (strcmp(hdr->_class, _class)) goto bail; /* * We don't already have one of these, right? */ pin = *pplugin; while (pin) { if (!strcmp(pin->hdr->name, hdr->name)) goto bail; pin = pin->list; } /* * OK let's bring it in */ pin = lws_malloc(sizeof(*pin), __func__); if (!pin) goto bail; pin->list = *pplugin; *pplugin = pin; pin->u.lib = lib; pin->hdr = hdr; if (each) each(pin, each_user); return hdr; bail: uv_dlclose(&lib); return NULL; } int lws_plat_destroy_dl(struct lws_plugin *p) { uv_dlclose(&p->u.lib); return 0; } #endif /* * Specifically for protocol plugins support */ #if defined(LWS_WITH_PLUGINS) && (UV_VERSION_MAJOR > 0) static int protocol_plugin_cb(struct lws_plugin *pin, void *each_user) { struct lws_context *context = (struct lws_context *)each_user; const lws_plugin_protocol_t *plpr = (const lws_plugin_protocol_t *)pin->hdr; context->plugin_protocol_count += plpr->count_protocols; context->plugin_extension_count += plpr->count_extensions; return 0; } #endif int lws_plat_plugins_init(struct lws_context *context, const char * const *d) { #if defined(LWS_WITH_PLUGINS) && (UV_VERSION_MAJOR > 0) if (info->plugin_dirs) { uv_loop_init(&context->uv.loop); lws_plugins_init(&context->plugin_list, info->plugin_dirs, "lws_protocol_plugin", NULL, protocol_plugin_cb, context); } #endif return 0; } int lws_plat_plugins_destroy(struct lws_context * context) { #if defined(LWS_WITH_PLUGINS) && (UV_VERSION_MAJOR > 0) if (lws_check_opt(context->options, LWS_SERVER_OPTION_LIBUV) && context->plugin_list) { lws_plugins_destroy(&context->plugin_list, NULL, NULL); while (uv_loop_close(&context->uv.loop)) ; } #endif return 0; } libwebsockets-4.3.5/lib/plat/windows/windows-resolv.c000066400000000000000000000050361476025525100227440ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include lws_async_dns_server_check_t lws_plat_asyncdns_init(struct lws_context *context, lws_sockaddr46 *sa46) { unsigned long ul; FIXED_INFO *fi; int n = 0; DWORD dw; ul = sizeof(fi); do { fi = (FIXED_INFO *)lws_malloc(ul, __func__); if (!fi) goto oom; dw = GetNetworkParams(fi, &ul); if (dw == NO_ERROR) break; if (dw != ERROR_BUFFER_OVERFLOW) { lwsl_err("%s: GetNetworkParams says 0x%x\n", __func__, (unsigned int)dw); return LADNS_CONF_SERVER_UNKNOWN; } lws_free(fi); if (n++) /* not twice or more */ goto oom; } while (1); /* if we got here, then we have it */ lwsl_info("%s: trying %s\n", __func__, fi->DnsServerList.IpAddress.String); n = lws_sa46_parse_numeric_address( fi->DnsServerList.IpAddress.String, sa46); lws_free(fi); return n == 0 ? LADNS_CONF_SERVER_CHANGED : LADNS_CONF_SERVER_UNKNOWN; oom: lwsl_err("%s: OOM\n", __func__); return LADNS_CONF_SERVER_UNKNOWN; } int lws_plat_ntpclient_config(struct lws_context *context) { #if defined(LWS_HAVE_GETENV) char *ntpsrv = getenv("LWS_NTP_SERVER"); if (ntpsrv && strlen(ntpsrv) < 64) { lws_system_blob_heap_append(lws_system_get_blob(context, LWS_SYSBLOB_TYPE_NTP_SERVER, 0), (const uint8_t *)ntpsrv, strlen(ntpsrv)); return 1; } #endif return 0; } libwebsockets-4.3.5/lib/plat/windows/windows-service.c000066400000000000000000000125701476025525100230730ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #ifndef _WINSOCK_DEPRECATED_NO_WARNINGS #define _WINSOCK_DEPRECATED_NO_WARNINGS #endif #include "private-lib-core.h" int _lws_plat_service_forced_tsi(struct lws_context *context, int tsi) { struct lws_context_per_thread *pt = &context->pt[tsi]; int m, n, r; r = lws_service_flag_pending(context, tsi); /* any socket with events to service? */ for (n = 0; n < (int)pt->fds_count; n++) { if (!pt->fds[n].revents) continue; unsigned int fds_count = pt->fds_count; m = lws_service_fd_tsi(context, &pt->fds[n], tsi); if (m < 0) return -1; /* if something closed, fds_count will change, retry this slot */ if (pt->fds_count != fds_count) n--; } lws_service_do_ripe_rxflow(pt); return r; } extern void lws_client_conn_wait_timeout(lws_sorted_usec_list_t *sul); int _lws_plat_service_tsi(struct lws_context *context, int timeout_ms, int tsi) { struct lws_context_per_thread *pt; struct lws_pollfd *pfd; lws_usec_t timeout_us; int64_t timeout_ms64 = (int64_t)timeout_ms; struct lws *wsi; unsigned int i; int n; /* stay dead once we are dead */ if (context == NULL) return 1; pt = &context->pt[tsi]; if (!pt->service_tid_detected && context->vhost_list) { lws_fakewsi_def_plwsa(pt); lws_fakewsi_prep_plwsa_ctx(context); pt->service_tid = context->vhost_list-> protocols[0].callback((struct lws *)plwsa, LWS_CALLBACK_GET_THREAD_ID, NULL, NULL, 0); pt->service_tid_detected = 1; } if (timeout_ms64 < 0) timeout_ms64 = 0; else /* force a default timeout of 23 days */ timeout_ms64 = 2000000000; timeout_us = ((lws_usec_t)timeout_ms64) * LWS_US_PER_MS; if (context->event_loop_ops->run_pt) context->event_loop_ops->run_pt(context, tsi); for (i = 0; i < pt->fds_count; ++i) { pfd = &pt->fds[i]; if (!(pfd->events & LWS_POLLOUT)) continue; wsi = wsi_from_fd(context, pfd->fd); if (!wsi || wsi->listener) continue; if (wsi->sock_send_blocking) continue; pfd->revents = LWS_POLLOUT; n = lws_service_fd(context, pfd); if (n < 0) return -1; /* * Force WSAWaitForMultipleEvents() to check events * and then return immediately. */ timeout_us = 0; /* if something closed, retry this slot */ if (n) i--; } /* * service pending callbacks and get maximum wait time */ { lws_usec_t us; lws_pt_lock(pt, __func__); /* don't stay in poll wait longer than next hr timeout */ us = __lws_sul_service_ripe(pt->pt_sul_owner, LWS_COUNT_PT_SUL_OWNERS, lws_now_usecs()); if (us && us < timeout_us) /* * If something wants zero wait, that's OK, but if the next sul * coming ripe is an interval less than our wait resolution, * bump it to be the wait resolution. */ timeout_us = us < context->us_wait_resolution ? context->us_wait_resolution : us; lws_pt_unlock(pt); } if (_lws_plat_service_forced_tsi(context, tsi)) timeout_us = 0; /* * is there anybody with pending stuff that needs service forcing? */ if (!lws_service_adjust_timeout(context, 1, tsi)) timeout_us = 0; // lwsl_notice("%s: in %dms, count %d\n", __func__, (int)(timeout_us / 1000), pt->fds_count); // for (n = 0; n < (int)pt->fds_count; n++) // lwsl_notice("%s: fd %d ev 0x%x POLLIN %d, POLLOUT %d\n", __func__, (int)pt->fds[n].fd, (int)pt->fds[n].events, POLLIN, POLLOUT); int d = WSAPoll((WSAPOLLFD *)&pt->fds[0], pt->fds_count, (int)(timeout_us / LWS_US_PER_MS)); if (d < 0) { lwsl_err("%s: WSAPoll failed: count %d, err %d: %d\n", __func__, pt->fds_count, d, WSAGetLastError()); return 0; } // lwsl_notice("%s: out\n", __func__); #if defined(LWS_WITH_TLS) if (pt->context->tls_ops && pt->context->tls_ops->fake_POLLIN_for_buffered) pt->context->tls_ops->fake_POLLIN_for_buffered(pt); #endif for (n = 0; n < (int)pt->fds_count; n++) if (pt->fds[n].fd != LWS_SOCK_INVALID && pt->fds[n].revents) { // lwsl_notice("%s: idx %d, revents 0x%x\n", __func__, n, pt->fds[n].revents); lws_service_fd_tsi(context, &pt->fds[n], tsi); } if (pt->destroy_self) { lws_context_destroy(pt->context); return -1; } return 0; } int lws_plat_service(struct lws_context *context, int timeout_ms) { return _lws_plat_service_tsi(context, timeout_ms, 0); } libwebsockets-4.3.5/lib/plat/windows/windows-sockets.c000066400000000000000000000351071476025525100231070ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #ifndef _WINSOCK_DEPRECATED_NO_WARNINGS #define _WINSOCK_DEPRECATED_NO_WARNINGS #endif #define MBEDTLS_ALLOW_PRIVATE_ACCESS #include "private-lib-core.h" #if defined(LWS_WITH_MBEDTLS) #if defined(LWS_HAVE_MBEDTLS_NET_SOCKETS) #include "mbedtls/net_sockets.h" #else #include "mbedtls/net.h" #endif #endif int lws_send_pipe_choked(struct lws *wsi) { struct lws *wsi_eff; #if defined(LWS_WITH_HTTP2) wsi_eff = lws_get_network_wsi(wsi); #else wsi_eff = wsi; #endif /* the fact we checked implies we avoided back-to-back writes */ wsi_eff->could_have_pending = 0; /* treat the fact we got a truncated send pending as if we're choked */ if (lws_has_buffered_out(wsi_eff) #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) ||wsi->http.comp_ctx.buflist_comp || wsi->http.comp_ctx.may_have_more #endif ) return 1; return (int)wsi_eff->sock_send_blocking; } int lws_poll_listen_fd(struct lws_pollfd *fd) { fd_set readfds; struct timeval tv = { 0, 0 }; assert((fd->events & LWS_POLLIN) == LWS_POLLIN); FD_ZERO(&readfds); FD_SET(fd->fd, &readfds); return select(((int)fd->fd) + 1, &readfds, NULL, NULL, &tv); } int lws_plat_set_nonblocking(lws_sockfd_type fd) { u_long optl = 1; int result = !!ioctlsocket(fd, FIONBIO, &optl); #if (_LWS_ENABLED_LOGS & LLL_ERR) if (result) lwsl_err("ioctlsocket FIONBIO 1 failed with error %d\n", LWS_ERRNO); #endif return result; } int lws_plat_set_socket_options(struct lws_vhost *vhost, lws_sockfd_type fd, int unix_skt) { int optval = 1; int optlen = sizeof(optval); DWORD dwBytesRet; struct tcp_keepalive alive; int protonbr; #ifndef _WIN32_WCE struct protoent *tcp_proto; #endif if (vhost->ka_time) { /* enable keepalive on this socket */ optval = 1; if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (const char *)&optval, optlen) < 0) { #if (_LWS_ENABLED_LOGS & LLL_ERR) lwsl_err("setsockopt SO_KEEPALIVE 1 failed with error %d\n", LWS_ERRNO); #endif return 1; } alive.onoff = TRUE; alive.keepalivetime = vhost->ka_time * 1000; alive.keepaliveinterval = vhost->ka_interval * 1000; if (WSAIoctl(fd, SIO_KEEPALIVE_VALS, &alive, sizeof(alive), NULL, 0, &dwBytesRet, NULL, NULL)) { #if (_LWS_ENABLED_LOGS & LLL_ERR) lwsl_err("WSAIoctl SIO_KEEPALIVE_VALS 1 %lu %lu failed with error %d\n", alive.keepalivetime, alive.keepaliveinterval, LWS_ERRNO); #endif return 1; } } /* Disable Nagle */ optval = 1; #ifndef _WIN32_WCE tcp_proto = getprotobyname("TCP"); if (!tcp_proto) { #if (_LWS_ENABLED_LOGS & LLL_WARN) lwsl_warn("getprotobyname(\"TCP\") failed with error, falling back to 6 %d\n", LWS_ERRNO); #endif protonbr = 6; /* IPPROTO_TCP */ } else protonbr = tcp_proto->p_proto; #else protonbr = 6; #endif if (setsockopt(fd, protonbr, TCP_NODELAY, (const char *)&optval, optlen) ) { #if (_LWS_ENABLED_LOGS & LLL_WARN) lwsl_warn("setsockopt TCP_NODELAY 1 failed with error %d\n", LWS_ERRNO); #endif } return lws_plat_set_nonblocking(fd); } int lws_plat_set_socket_options_ip(lws_sockfd_type fd, uint8_t pri, int lws_flags) { /* * Seems to require "differeniated services" but no docs * * https://docs.microsoft.com/en-us/windows/win32/winsock/ipproto-ip-socket-options * https://docs.microsoft.com/en-us/previous-versions/windows/desktop/qos/differentiated-services */ lwsl_warn("%s: not implemented on windows platform\n", __func__); return 0; } int lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr, size_t addrlen) { long long address; #ifdef LWS_WITH_IPV6 struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)addr; if (ipv6) { if (lws_plat_inet_pton(AF_INET6, ifname, &addr6->sin6_addr) == 1) { return LWS_ITOSA_USABLE; } } #endif address = inet_addr(ifname); if (address == INADDR_NONE) { struct hostent *entry = gethostbyname(ifname); if (entry) address = ((struct in_addr *)entry->h_addr_list[0])->s_addr; } if (address == INADDR_NONE) return LWS_ITOSA_NOT_EXIST; addr->sin_addr.s_addr = (unsigned long)(lws_intptr_t)address; return LWS_ITOSA_USABLE; } void lws_plat_insert_socket_into_fds(struct lws_context *context, struct lws *wsi) { struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; #if defined(LWS_WITH_UDP) if (wsi->udp) { lwsl_info("%s: UDP\n", __func__); pt->fds[pt->fds_count].events |= LWS_POLLIN; } #endif if (context->event_loop_ops->io) context->event_loop_ops->io(wsi, LWS_EV_START | LWS_EV_READ); pt->fds[pt->fds_count++].revents = 0; lws_plat_change_pollfd(context, wsi, &pt->fds[pt->fds_count - 1]); } void lws_plat_delete_socket_from_fds(struct lws_context *context, struct lws *wsi, int m) { struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; pt->fds_count--; } int lws_plat_check_connection_error(struct lws *wsi) { int optVal; int optLen = sizeof(int); if (getsockopt(wsi->desc.sockfd, SOL_SOCKET, SO_ERROR, (char*)&optVal, &optLen) != SOCKET_ERROR && optVal && optVal != LWS_EALREADY && optVal != LWS_EINPROGRESS && optVal != LWS_EWOULDBLOCK && optVal != WSAEINVAL) { lwsl_debug("Connect failed SO_ERROR=%d\n", optVal); return 1; } return 0; } int lws_plat_change_pollfd(struct lws_context *context, struct lws *wsi, struct lws_pollfd *pfd) { //struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; return 0; } #if defined(LWS_WITH_TLS) int lws_plat_vhost_tls_client_ctx_init(struct lws_vhost *vhost) { #if !defined(LWS_WITH_MBEDTLS) && defined(LWS_SSL_CLIENT_USE_OS_CA_CERTS) PCCERT_CONTEXT pcc = NULL; CERT_ENHKEY_USAGE* ceu = NULL; DWORD ceu_alloc = 0; X509_STORE* store; HCERTSTORE hStore; int imps = 0; if (lws_check_opt(vhost->options, LWS_SERVER_OPTION_DISABLE_OS_CA_CERTS)) return 0; /* * Windows Trust Store code adapted from curl (MIT) openssl.c * https://github.com/warmcat/libwebsockets/pull/2233 */ store = SSL_CTX_get_cert_store(vhost->tls.ssl_client_ctx); hStore = CertOpenSystemStore((HCRYPTPROV_LEGACY)NULL, TEXT("ROOT")); if (!hStore) { lwsl_notice("%s: no store\n", __func__); return 1; } do { const unsigned char* ecert; char cert_name[256]; DWORD req_size = 0; BYTE key_usage[2]; FILETIME ft; X509* x509; pcc = CertEnumCertificatesInStore(hStore, pcc); if (!pcc) break; if (!CertGetNameStringA(pcc, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0, NULL, cert_name, sizeof(cert_name))) strcpy(cert_name, "Unknown"); lwsl_debug("%s: Checking cert \"%s\"\n", __func__, cert_name); ecert = (const unsigned char*)pcc->pbCertEncoded; if (!ecert) continue; GetSystemTimeAsFileTime(&ft); if (CompareFileTime(&pcc->pCertInfo->NotBefore, &ft) > 0 || CompareFileTime(&ft, &pcc->pCertInfo->NotAfter) > 0) continue; /* If key usage exists check for signing attribute */ if (CertGetIntendedKeyUsage(pcc->dwCertEncodingType, pcc->pCertInfo, key_usage, sizeof(key_usage))) { if (!(key_usage[0] & CERT_KEY_CERT_SIGN_KEY_USAGE)) continue; } else if (GetLastError()) continue; /* * If enhanced key usage exists check for server auth attribute. * * Note "In a Microsoft environment, a certificate might also * have EKU extended properties that specify valid uses for the * certificate." * The call below checks both, and behavior varies depending on * what is found. For more details see CertGetEnhancedKeyUsage * doc. */ if (!CertGetEnhancedKeyUsage(pcc, 0, NULL, &req_size)) continue; if (req_size && req_size > ceu_alloc) { void* tmp = lws_realloc(ceu, req_size, __func__); if (!tmp) { lwsl_err("%s: OOM", __func__); break; } ceu = (CERT_ENHKEY_USAGE*)tmp; ceu_alloc = req_size; } if (!CertGetEnhancedKeyUsage(pcc, 0, ceu, &req_size)) continue; if (!ceu || (ceu && !ceu->cUsageIdentifier)) { /* * "If GetLastError returns CRYPT_E_NOT_FOUND, the * certificate is good for all uses. If it returns * zero, the certificate has no valid uses." */ if ((HRESULT)GetLastError() != CRYPT_E_NOT_FOUND) continue; /* ... allow it... */ } else if (ceu) { BOOL found = FALSE; DWORD i; /* * If there is a CEU, check that it specifies * we can use the cert for server validation */ for (i = 0; i < ceu->cUsageIdentifier; i++) { if (strcmp("1.3.6.1.5.5.7.3.1" /* OID server auth */, ceu->rgpszUsageIdentifier[i])) continue; found = TRUE; break; } if (!found) /* Don't use cert if no usage match */ continue; } x509 = d2i_X509(NULL, &ecert, pcc->cbCertEncoded); if (!x509) /* We can't parse it as am X.509, skip it */ continue; if (X509_STORE_add_cert(store, x509) == 1) { lwsl_debug("%s: Imported cert \"%s\"\n", __func__, cert_name); imps++; } /* * Treat failure as nonfatal, eg, may be dupe */ X509_free(x509); } while (1); lws_free(ceu); CertFreeCertificateContext(pcc); CertCloseStore(hStore, 0); lwsl_notice("%s: Imported %d certs from plat store\n", __func__, imps); #endif return 0; } #endif const char * lws_plat_inet_ntop(int af, const void *src, char *dst, socklen_t cnt) { WCHAR *buffer; size_t bufferlen = (size_t)cnt; BOOL ok = FALSE; buffer = lws_malloc(bufferlen * 2, "inet_ntop"); if (!buffer) { lwsl_err("Out of memory\n"); return NULL; } if (af == AF_INET) { struct sockaddr_in srcaddr; memset(&srcaddr, 0, sizeof(srcaddr)); srcaddr.sin_family = AF_INET; memcpy(&(srcaddr.sin_addr), src, sizeof(srcaddr.sin_addr)); if (!WSAAddressToStringW((struct sockaddr*)&srcaddr, sizeof(srcaddr), 0, buffer, (LPDWORD)&bufferlen)) ok = TRUE; #ifdef LWS_WITH_IPV6 } else if (af == AF_INET6) { struct sockaddr_in6 srcaddr; memset(&srcaddr, 0, sizeof(srcaddr)); srcaddr.sin6_family = AF_INET6; memcpy(&(srcaddr.sin6_addr), src, sizeof(srcaddr.sin6_addr)); if (!WSAAddressToStringW((struct sockaddr*)&srcaddr, sizeof(srcaddr), 0, buffer, (LPDWORD)&bufferlen)) ok = TRUE; #endif } else lwsl_err("Unsupported type\n"); if (!ok) { int rv = WSAGetLastError(); lwsl_err("WSAAddressToString() : %d\n", rv); } else { if (WideCharToMultiByte(CP_ACP, 0, buffer, (int)bufferlen, dst, cnt, 0, NULL) <= 0) ok = FALSE; } lws_free(buffer); return ok ? dst : NULL; } int lws_plat_inet_pton(int af, const char *src, void *dst) { WCHAR *buffer; size_t bufferlen = strlen(src) + 1; BOOL ok = FALSE; buffer = lws_malloc(bufferlen * 2, "inet_pton"); if (!buffer) { lwsl_err("Out of memory\n"); return -1; } if (MultiByteToWideChar(CP_ACP, 0, src, (int)bufferlen, buffer, (int)bufferlen) <= 0) { lwsl_err("Failed to convert multi byte to wide char\n"); lws_free(buffer); return -1; } if (af == AF_INET) { struct sockaddr_in dstaddr; int dstaddrlen = sizeof(dstaddr); memset(&dstaddr, 0, sizeof(dstaddr)); dstaddr.sin_family = AF_INET; if (!WSAStringToAddressW(buffer, af, 0, (struct sockaddr *) &dstaddr, &dstaddrlen)) { ok = TRUE; memcpy(dst, &dstaddr.sin_addr, sizeof(dstaddr.sin_addr)); } #ifdef LWS_WITH_IPV6 } else if (af == AF_INET6) { struct sockaddr_in6 dstaddr; int dstaddrlen = sizeof(dstaddr); memset(&dstaddr, 0, sizeof(dstaddr)); dstaddr.sin6_family = AF_INET6; if (!WSAStringToAddressW(buffer, af, 0, (struct sockaddr *) &dstaddr, &dstaddrlen)) { ok = TRUE; memcpy(dst, &dstaddr.sin6_addr, sizeof(dstaddr.sin6_addr)); } #endif } else lwsl_err("Unsupported type\n"); if (!ok) { int rv = WSAGetLastError(); lwsl_err("WSAAddressToString() : %d\n", rv); } lws_free(buffer); return ok ? 1 : -1; } int lws_plat_ifname_to_hwaddr(int fd, const char *ifname, uint8_t *hwaddr, int len) { lwsl_err("%s: UNIMPLEMENTED on this platform\n", __func__); return -1; } int lws_plat_rawudp_broadcast(uint8_t *p, const uint8_t *canned, size_t canned_len, size_t n, int fd, const char *iface) { lwsl_err("%s: UNIMPLEMENTED on this platform\n", __func__); return -1; } int lws_plat_if_up(const char *ifname, int fd, int up) { lwsl_err("%s: UNIMPLEMENTED on this platform\n", __func__); return -1; } int lws_plat_BINDTODEVICE(lws_sockfd_type fd, const char *ifname) { lwsl_err("%s: UNIMPLEMENTED on this platform\n", __func__); return -1; } int lws_plat_ifconfig(int fd, uint8_t *ip, lws_dhcpc_ifstate_t *is) { lwsl_err("%s: UNIMPLEMENTED on this platform\n", __func__); return -1; } #if defined(LWS_WITH_MBEDTLS) int lws_plat_mbedtls_net_send(void *ctx, const uint8_t *buf, size_t len) { int fd = ((mbedtls_net_context *) ctx)->fd; int ret, en; if (fd < 0) return MBEDTLS_ERR_NET_INVALID_CONTEXT; ret = send(fd, (const char *)buf, (unsigned int)len, 0); if (ret >= 0) return ret; en = LWS_ERRNO; if (en == EAGAIN || en == EWOULDBLOCK || en == WSAEWOULDBLOCK) return MBEDTLS_ERR_SSL_WANT_WRITE; ret = WSAGetLastError(); lwsl_notice("%s: errno %d, GLE %d\n", __func__, en, ret); if (ret == WSAECONNRESET ) return( MBEDTLS_ERR_NET_CONN_RESET ); return MBEDTLS_ERR_NET_SEND_FAILED; } int lws_plat_mbedtls_net_recv(void *ctx, unsigned char *buf, size_t len) { int fd = ((mbedtls_net_context *) ctx)->fd; int ret, en; if (fd < 0) return MBEDTLS_ERR_NET_INVALID_CONTEXT; ret = (int)recv(fd, (char *)buf, (unsigned int)len, 0); if (ret >= 0) return ret; en = LWS_ERRNO; if (en == EAGAIN || en == EWOULDBLOCK || en == WSAEWOULDBLOCK) return MBEDTLS_ERR_SSL_WANT_READ; ret = WSAGetLastError(); lwsl_notice("%s: errno %d, GLE %d\n", __func__, en, ret); if (ret == WSAECONNRESET) return MBEDTLS_ERR_NET_CONN_RESET; return MBEDTLS_ERR_NET_RECV_FAILED; } #endif libwebsockets-4.3.5/lib/plat/windows/windows-spawn.c000066400000000000000000000346641476025525100225730ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include #include #include void lws_spawn_timeout(struct lws_sorted_usec_list *sul) { struct lws_spawn_piped *lsp = lws_container_of(sul, struct lws_spawn_piped, sul); lwsl_warn("%s: spawn exceeded timeout, killing\n", __func__); lws_spawn_piped_kill_child_process(lsp); } void lws_spawn_sul_reap(struct lws_sorted_usec_list *sul) { struct lws_spawn_piped *lsp = lws_container_of(sul, struct lws_spawn_piped, sul_reap); lwsl_notice("%s: reaping spawn after last stdpipe, tries left %d\n", __func__, lsp->reap_retry_budget); if (!lws_spawn_reap(lsp) && !lsp->pipes_alive) { if (--lsp->reap_retry_budget) { lws_sul_schedule(lsp->info.vh->context, lsp->info.tsi, &lsp->sul_reap, lws_spawn_sul_reap, 250 * LWS_US_PER_MS); } else { lwsl_err("%s: Unable to reap lsp %p, killing\n", __func__, lsp); lsp->reap_retry_budget = 20; lws_spawn_piped_kill_child_process(lsp); } } } static struct lws * lws_create_basic_wsi(struct lws_context *context, int tsi, const struct lws_role_ops *ops) { struct lws_context_per_thread *pt = &context->pt[tsi]; struct lws *new_wsi; if (!context->vhost_list) return NULL; if ((unsigned int)context->pt[tsi].fds_count == context->fd_limit_per_thread - 1) { lwsl_err("no space for new conn\n"); return NULL; } lws_context_lock(context, __func__); new_wsi = __lws_wsi_create_with_role(context, tsi, ops, NULL); lws_context_unlock(context); if (new_wsi == NULL) { lwsl_err("Out of memory for new connection\n"); return NULL; } new_wsi->rxflow_change_to = LWS_RXFLOW_ALLOW; /* initialize the instance struct */ lws_role_transition(new_wsi, 0, LRS_ESTABLISHED, ops); new_wsi->hdr_parsing_completed = 0; new_wsi->position_in_fds_table = LWS_NO_FDS_POS; /* * these can only be set once the protocol is known * we set an unestablished connection's protocol pointer * to the start of the defauly vhost supported list, so it can look * for matching ones during the handshake */ new_wsi->user_space = NULL; new_wsi->desc.sockfd = LWS_SOCK_INVALID; return new_wsi; } void lws_spawn_piped_destroy(struct lws_spawn_piped **_lsp) { struct lws_spawn_piped *lsp = *_lsp; struct lws *wsi; int n; if (!lsp) return; for (n = 0; n < 3; n++) { if (lsp->pipe_fds[n][!!(n == 0)]) { CloseHandle(lsp->pipe_fds[n][n == 0]); lsp->pipe_fds[n][n == 0] = NULL; } for (n = 0; n < 3; n++) { if (lsp->stdwsi[n]) { lwsl_notice("%s: closing stdwsi %d\n", __func__, n); wsi = lsp->stdwsi[n]; lsp->stdwsi[n]->desc.filefd = NULL; lsp->stdwsi[n] = NULL; lws_set_timeout(wsi, 1, LWS_TO_KILL_SYNC); } } } lws_dll2_remove(&lsp->dll); lws_sul_cancel(&lsp->sul); lws_sul_cancel(&lsp->sul_reap); lws_sul_cancel(&lsp->sul_poll); lwsl_warn("%s: deleting lsp\n", __func__); lws_free_set_NULL((*_lsp)); } int lws_spawn_reap(struct lws_spawn_piped *lsp) { void *opaque = lsp->info.opaque; lsp_cb_t cb = lsp->info.reap_cb; struct _lws_siginfo_t lsi; lws_usec_t acct[4]; DWORD ex; if (!lsp->child_pid) return 0; if (!GetExitCodeProcess(lsp->child_pid, &ex)) { lwsl_notice("%s: GetExitCodeProcess failed\n", __func__); return 0; } /* nonzero = success */ if (ex == STILL_ACTIVE) { lwsl_notice("%s: still active\n", __func__); return 0; } /* mark the earliest time we knew he had gone */ if (!lsp->reaped) { lsp->reaped = lws_now_usecs(); /* * Switch the timeout to restrict the amount of grace time * to drain stdwsi */ lws_sul_schedule(lsp->info.vh->context, lsp->info.tsi, &lsp->sul, lws_spawn_timeout, 5 * LWS_US_PER_SEC); } /* * Stage finalizing our reaction to the process going down until the * stdwsi flushed whatever is in flight and all noticed they were * closed. For that reason, each stdwsi close must call lws_spawn_reap * to check if that was the last one and we can proceed with the reap. */ if (!lsp->ungraceful && lsp->pipes_alive) { lwsl_notice("%s: stdwsi alive, not reaping\n", __func__); return 0; } /* we reached the reap point, no need for timeout wait */ lws_sul_cancel(&lsp->sul); /* * All the stdwsi went down, nothing more is coming... it's over * Collect the final information and then reap the dead process */ lsi.retcode = 0x10000 | (int)ex; lwsl_notice("%s: process exit 0x%x\n", __func__, lsi.retcode); lsp->child_pid = NULL; /* destroy the lsp itself first (it's freed and plsp set NULL */ if (lsp->info.plsp) lws_spawn_piped_destroy(lsp->info.plsp); /* then do the parent callback informing it's destroyed */ memset(acct, 0, sizeof(acct)); if (cb) cb(opaque, acct, &lsi, 0); lwsl_notice("%s: completed reap\n", __func__); return 1; /* was reaped */ } int lws_spawn_piped_kill_child_process(struct lws_spawn_piped *lsp) { if (!lsp->child_pid) return 1; lsp->ungraceful = 1; /* don't wait for flushing, just kill it */ if (lws_spawn_reap(lsp)) /* that may have invalidated lsp */ return 0; lwsl_warn("%s: calling TerminateProcess on child pid\n", __func__); TerminateProcess(lsp->child_pid, 252); lws_spawn_reap(lsp); /* that may have invalidated lsp */ return 0; } static void windows_pipe_poll_hack(lws_sorted_usec_list_t *sul) { struct lws_spawn_piped *lsp = lws_container_of(sul, struct lws_spawn_piped, sul_poll); struct lws *wsi, *wsi1; DWORD br; char c; /* * Do it first, we know lsp exists and if it's destroyed inbetweentimes, * it will already have cancelled this */ lws_sul_schedule(lsp->context, 0, &lsp->sul_poll, windows_pipe_poll_hack, 50 * LWS_US_PER_MS); wsi = lsp->stdwsi[LWS_STDOUT]; wsi1 = lsp->stdwsi[LWS_STDERR]; if (wsi && lsp->pipe_fds[LWS_STDOUT][0] != NULL) { if (!PeekNamedPipe(lsp->pipe_fds[LWS_STDOUT][0], &c, 1, &br, NULL, NULL)) { lwsl_notice("%s: stdout pipe errored\n", __func__); CloseHandle(lsp->stdwsi[LWS_STDOUT]->desc.filefd); lsp->pipe_fds[LWS_STDOUT][0] = NULL; lsp->stdwsi[LWS_STDOUT]->desc.filefd = NULL; lsp->stdwsi[LWS_STDOUT] = NULL; lws_set_timeout(wsi, 1, LWS_TO_KILL_SYNC); if (lsp->stdwsi[LWS_STDIN]) { lwsl_notice("%s: closing stdin from stdout close\n", __func__); CloseHandle(lsp->stdwsi[LWS_STDIN]->desc.filefd); wsi = lsp->stdwsi[LWS_STDIN]; lsp->stdwsi[LWS_STDIN]->desc.filefd = NULL; lsp->stdwsi[LWS_STDIN] = NULL; lsp->pipe_fds[LWS_STDIN][1] = NULL; lws_set_timeout(wsi, 1, LWS_TO_KILL_SYNC); } /* * lsp may be destroyed by here... if we wanted to * handle a still-extant stderr we'll get it next time */ return; } else if (br) wsi->a.protocol->callback(wsi, LWS_CALLBACK_RAW_RX_FILE, NULL, NULL, 0); } /* * lsp may have been destroyed above */ if (wsi1 && lsp->pipe_fds[LWS_STDERR][0]) { if (!PeekNamedPipe(lsp->pipe_fds[LWS_STDERR][0], &c, 1, &br, NULL, NULL)) { lwsl_notice("%s: stderr pipe errored\n", __func__); CloseHandle(wsi1->desc.filefd); /* * Assume is stderr still extant on entry, lsp can't * have been destroyed by stdout/stdin processing */ lsp->stdwsi[LWS_STDERR]->desc.filefd = NULL; lsp->stdwsi[LWS_STDERR] = NULL; lsp->pipe_fds[LWS_STDERR][0] = NULL; lws_set_timeout(wsi1, 1, LWS_TO_KILL_SYNC); /* * lsp may have been destroyed above */ } else if (br) wsi1->a.protocol->callback(wsi1, LWS_CALLBACK_RAW_RX_FILE, NULL, NULL, 0); } } /* * Deals with spawning a subprocess and executing it securely with stdin/out/err * diverted into pipes */ struct lws_spawn_piped * lws_spawn_piped(const struct lws_spawn_piped_info *i) { const struct lws_protocols *pcol = i->vh->context->vhost_list->protocols; struct lws_context *context = i->vh->context; struct lws_spawn_piped *lsp; PROCESS_INFORMATION pi; SECURITY_ATTRIBUTES sa; char cli[300], *p; STARTUPINFO si; int n; if (i->protocol_name) pcol = lws_vhost_name_to_protocol(i->vh, i->protocol_name); if (!pcol) { lwsl_err("%s: unknown protocol %s\n", __func__, i->protocol_name ? i->protocol_name : "default"); return NULL; } lsp = lws_zalloc(sizeof(*lsp), __func__); if (!lsp) { lwsl_err("%s: OOM\n", __func__); return NULL; } /* wholesale take a copy of info */ lsp->info = *i; lsp->context = context; lsp->reap_retry_budget = 20; /* * Prepare the stdin / out / err pipes */ for (n = 0; n < 3; n++) { lsp->pipe_fds[n][0] = NULL; lsp->pipe_fds[n][1] = NULL; } /* create pipes for [stdin|stdout] and [stderr] */ memset(&sa, 0, sizeof(sa)); sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.bInheritHandle = TRUE; /* inherit the pipes */ sa.lpSecurityDescriptor = NULL; for (n = 0; n < 3; n++) { DWORD waitmode = PIPE_NOWAIT; if (!CreatePipe(&lsp->pipe_fds[n][0], &lsp->pipe_fds[n][1], &sa, 0)) { lwsl_err("%s: CreatePipe() failed\n", __func__); goto bail1; } SetNamedPipeHandleState(lsp->pipe_fds[1][0], &waitmode, NULL, NULL); SetNamedPipeHandleState(lsp->pipe_fds[2][0], &waitmode, NULL, NULL); /* don't inherit the pipe side that belongs to the parent */ if (!SetHandleInformation(&lsp->pipe_fds[n][!n], HANDLE_FLAG_INHERIT, 0)) { lwsl_err("%s: SetHandleInformation() failed\n", __func__); //goto bail1; } } /* create wsis for each stdin/out/err fd */ for (n = 0; n < 3; n++) { lsp->stdwsi[n] = lws_create_basic_wsi(i->vh->context, i->tsi, i->ops ? i->ops : &role_ops_raw_file); if (!lsp->stdwsi[n]) { lwsl_err("%s: unable to create lsp stdwsi\n", __func__); goto bail2; } __lws_lc_tag(i->vh->context, &i->vh->context->lcg[LWSLCG_WSI], &lsp->stdwsi[n]->lc, "nspawn-stdwsi-%d", n); lsp->stdwsi[n]->lsp_channel = n; lws_vhost_bind_wsi(i->vh, lsp->stdwsi[n]); lsp->stdwsi[n]->a.protocol = pcol; lsp->stdwsi[n]->a.opaque_user_data = i->opaque; lsp->stdwsi[n]->desc.filefd = lsp->pipe_fds[n][!n]; lsp->stdwsi[n]->file_desc = 1; lwsl_debug("%s: lsp stdwsi %p: pipe idx %d -> fd %d / %d\n", __func__, lsp->stdwsi[n], n, lsp->pipe_fds[n][!!(n == 0)], lsp->pipe_fds[n][!(n == 0)]); #if 0 /* read side is 0, stdin we want the write side, others read */ lsp->stdwsi[n]->desc.filefd = lsp->pipe_fds[n][!!(n == 0)]; if (fcntl(lsp->pipe_fds[n][!!(n == 0)], F_SETFL, O_NONBLOCK) < 0) { lwsl_err("%s: setting NONBLOCK failed\n", __func__); goto bail2; } #endif } for (n = 0; n < 3; n++) if (i->opt_parent) { lsp->stdwsi[n]->parent = i->opt_parent; lsp->stdwsi[n]->sibling_list = i->opt_parent->child_list; i->opt_parent->child_list = lsp->stdwsi[n]; } lwsl_notice("%s: pipe handles in %p, out %p, err %p\n", __func__, lsp->stdwsi[LWS_STDIN]->desc.sockfd, lsp->stdwsi[LWS_STDOUT]->desc.sockfd, lsp->stdwsi[LWS_STDERR]->desc.sockfd); /* * Windows nonblocking pipe handling is a mess that is unable * to interoperate with WSA-based wait as far as I can tell. * * Let's set up a sul to poll the pipes and synthesize the * protocol callbacks if anything coming. */ lws_sul_schedule(context, 0, &lsp->sul_poll, windows_pipe_poll_hack, 50 * LWS_US_PER_MS); /* * Windows wants a single string commandline */ p = cli; n = 0; while (i->exec_array[n]) { lws_strncpy(p, i->exec_array[n], sizeof(cli) - lws_ptr_diff(p, cli)); if (sizeof(cli) - lws_ptr_diff(p, cli) < 4) break; p += strlen(p); *p++ = ' '; *p = '\0'; n++; } puts(cli); memset(&pi, 0, sizeof(pi)); memset(&si, 0, sizeof(si)); si.cb = sizeof(STARTUPINFO); si.hStdInput = lsp->pipe_fds[LWS_STDIN][0]; si.hStdOutput = lsp->pipe_fds[LWS_STDOUT][1]; si.hStdError = lsp->pipe_fds[LWS_STDERR][1]; si.dwFlags = STARTF_USESTDHANDLES | CREATE_NO_WINDOW; si.wShowWindow = TRUE; if (!CreateProcess(NULL, cli, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi)) { lwsl_err("%s: CreateProcess failed 0x%x\n", __func__, (unsigned long)GetLastError()); goto bail3; } lsp->child_pid = pi.hProcess; lwsl_notice("%s: lsp %p spawned PID %d\n", __func__, lsp, lsp->child_pid); lws_sul_schedule(context, i->tsi, &lsp->sul, lws_spawn_timeout, i->timeout_us ? i->timeout_us : 300 * LWS_US_PER_SEC); /* * close: stdin:r, stdout:w, stderr:w */ for (n = 0; n < 3; n++) CloseHandle(lsp->pipe_fds[n][n != 0]); lsp->pipes_alive = 3; lsp->created = lws_now_usecs(); if (i->owner) lws_dll2_add_head(&lsp->dll, i->owner); if (i->timeout_us) lws_sul_schedule(context, i->tsi, &lsp->sul, lws_spawn_timeout, i->timeout_us); return lsp; bail3: lws_sul_cancel(&lsp->sul_poll); while (--n >= 0) __remove_wsi_socket_from_fds(lsp->stdwsi[n]); bail2: for (n = 0; n < 3; n++) if (lsp->stdwsi[n]) __lws_free_wsi(lsp->stdwsi[n]); bail1: for (n = 0; n < 3; n++) { if (lsp->pipe_fds[n][0] >= 0) CloseHandle(lsp->pipe_fds[n][0]); if (lsp->pipe_fds[n][1] >= 0) CloseHandle(lsp->pipe_fds[n][1]); } lws_free(lsp); lwsl_err("%s: failed\n", __func__); return NULL; } void lws_spawn_stdwsi_closed(struct lws_spawn_piped *lsp, struct lws *wsi) { int n; assert(lsp); lsp->pipes_alive--; lwsl_debug("%s: pipes alive %d\n", __func__, lsp->pipes_alive); if (!lsp->pipes_alive) lws_sul_schedule(lsp->info.vh->context, lsp->info.tsi, &lsp->sul_reap, lws_spawn_sul_reap, 1); for (n = 0; n < 3; n++) if (lsp->stdwsi[n] == wsi) lsp->stdwsi[n] = NULL; } int lws_spawn_get_stdfd(struct lws *wsi) { return wsi->lsp_channel; } libwebsockets-4.3.5/lib/roles/000077500000000000000000000000001476025525100162645ustar00rootroot00000000000000libwebsockets-4.3.5/lib/roles/CMakeLists.txt000066400000000000000000000047721476025525100210360ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # # The strategy is to only export to PARENT_SCOPE # # - changes to LIB_LIST # - changes to SOURCES # - includes via include_directories # # and keep everything else private include_directories(.) if (LWS_ROLE_MQTT) add_subdir_include_directories(mqtt) endif() if (LWS_ROLE_DBUS AND NOT LWS_PLAT_FREERTOS) add_subdir_include_directories(dbus) endif() if (LWS_ROLE_H1 OR LWS_ROLE_H2) add_subdir_include_directories(http) endif() if (LWS_ROLE_H1) add_subdir_include_directories(h1) endif() if (LWS_ROLE_H2) add_subdir_include_directories(h2) endif() if (LWS_ROLE_WS) add_subdir_include_directories(ws) endif() if (LWS_ROLE_RAW) add_subdir_include_directories(raw-skt) endif() if (LWS_ROLE_RAW_FILE) add_subdir_include_directories(raw-file) endif() if (LWS_WITH_CGI) add_subdir_include_directories(cgi) endif() if (LWS_ROLE_RAW_PROXY) add_subdir_include_directories(raw-proxy) endif() if (NOT LWS_WITHOUT_SERVER OR LWS_WITH_SECURE_STREAMS_PROCESS_API) add_subdir_include_directories(listen) endif() if (LWS_WITH_CLIENT AND (LWS_ROLE_H1 OR LWS_ROLE_H2)) list(APPEND SOURCES roles/http/client/client-http.c) endif() if (LWS_WITH_NETLINK) list(APPEND SOURCES roles/netlink/ops-netlink.c) endif() # # Keep explicit parent scope exports at end # exports_to_parent_scope() set(LWS_DEPS_LIB_PATHS ${LWS_DEPS_LIB_PATHS} PARENT_SCOPE) libwebsockets-4.3.5/lib/roles/README.md000066400000000000000000000137531476025525100175540ustar00rootroot00000000000000## Information for new role implementers ### Introduction In lws the "role" is the job the wsi is doing in the system, eg, being an http1 or h2, or ws connection, or being a listen socket, etc. This is different than, eg, a new ws protocol or a different callback for an existing role. A new role is needed when you want to add support for something completely new, like a completely new wire protocol that doesn't use http or ws. So... what's the point of implementing the protocol inside the lws role framework? You inherit all the well-maintained lws core functionality around: - connection lifecycle sequencing in a valgrind-clean way - client connection proxy support, for HTTP and Socks5 - tls support working equally on mbedTLS and OpenSSL and derivatives without any code in the role - apis for cert lifecycle management and parsing - event loop support working on all the lws event loops (poll, libuv , ev, and event) - clean connection tracking and closing even on advanced event loops - user code follows the same simple callbacks on wsi - multi-vhost support - core multithreaded service support with usually no locking requirement on the role code - direct compatibility with all other lws roles + protocols in the same event loop - compatibility with higher-level stuff like lwsws as the server application ### Code placement The code specific to that role should live in `./lib/roles/**role name**` If a role is asymmetic between a client and server side, like http is, it should generally be implemented as a single role. ### Allowing control over enabling roles All roles should add a cmake define `LWS_ROLE_**role name**` and make its build dependent on it in CMakeLists.txt. Export the cmakedefine in `./cmake/lws_config.h.in` as well so user builds can understand if the role is available in the lws build it is trying to bind to. If the role is disabled in cmake, nothing in its directory is built. ### Role ops struct The role is defined by `struct lws_role_ops` in `lib/roles/private-lib-roles.h`, each role instantiates one of these and fills in the appropriate ops callbacks to perform its job. By convention that lives in `./lib/roles/**role name**/ops-**role_name**.c`. ### Private role declarations Truly private declarations for the role can go in the role directory as you like. However when the declarations must be accessible to other things in lws build, eg, the role adds members to `struct lws` when enabled, they should be in the role directory in a file `private-lib-roles-myrole.h`. Search for "bring in role private declarations" in `./lib/roles/private-lib-roles.h and add your private role file there following the style used for the other roles, eg, ``` #if defined(LWS_ROLE_WS) #include "roles/ws/private-lib-roles-ws.h" #else #define lwsi_role_ws(wsi) (0) #endif ``` If the role is disabled at cmake, nothing from its private.h should be used anywhere. ### Integrating role assets to lws If your role needs special storage in lws objects, that's no problem. But to keep things sane, there are some rules. - declare a "container struct" in your private.h for everything, eg, the ws role wants to add storage in lws_vhost for enabled extensions, it declares in its private.h ``` struct lws_vhost_role_ws { #if !defined(LWS_WITHOUT_EXTENSIONS) const struct lws_extension *extensions; #endif }; ``` - add your role content in one place in the lws struct, protected by `#if defined(LWS_ROLE_**role name**)`, eg, again for LWS_ROLE_WS ``` struct lws_vhost { ... #if defined(LWS_ROLE_WS) struct lws_vhost_role_ws ws; #endif ... ``` ### Adding to lws available roles list Edit the NULL-terminated array `available_roles` at the top of `./lib/core/context.c` to include a pointer to your new role's ops struct, following the style already there. ``` const struct lws_role_ops * available_roles[] = { #if defined(LWS_ROLE_H2) &role_ops_h2, #endif ... ``` This makes lws aware that your role exists, and it can auto-generate some things like ALPN lists, and call your role ops callbacks for things like hooking vhost creation. ### Enabling role adoption The primary way wsi get bound to a specific role is via the lws adoption api `lws_adopt_descriptor_vhost()`. Add flags as necessary in `./include/libwebsockets/lws-adopt.h` `enum lws_adoption_type` and follow the existing code in `lws_adopt_descriptor_vhost()` to bind a wsi with suitable flags to your role ops. ### Implementation of the role After that plumbing-in is completed, the role ops you declare are "live" on a wsi bound to them via the adoption api. The core support for wsis in lws has some generic concepts - the wsi holds a pointer member `role_ops` that indicates which role ops the wsi is bound to - the wsi holds a generic uint32 `wsistate` that contains role flags and wsi state - role flags are provided (LWSIFR_CLIENT, LWSIFR_SERVER) to differentiate between client and server connections inside a wsi, along with helpers `lwsi_role_client(wsi)` and `lwsi_role_server(wsi)`. - lws provides around 30 generic states for the wsi starting from 'unconnected' through various proxy or tunnel states, to 'established', and then various states shutting down until 'dead socket'. The states have testable flags and helpers to discover if the wsi state is before establishment `lwsi_state_est(wsi)` and if in the state it is in, it can handle pollout `lwsi_state_can_handle_POLLOUT(wsi)`. - You set the initial binding, role flags and state using `lws_role_transition()`. Afterwards you can adjust the state using `lwsi_set_state()`. ### Role ops compression Since the role ops struct is typically only sparsely filled, rather than have 20 function pointers most of which may be NULL, there is a separate array of a union of function pointers that is just long enough for functions that exist in the role, and a nybble index table with a nybble for each possible op, either 0 indicating that the operation is not provided in this role, or 1 - 15 indicating the position of the function pointer in the array. libwebsockets-4.3.5/lib/roles/cgi/000077500000000000000000000000001476025525100170265ustar00rootroot00000000000000libwebsockets-4.3.5/lib/roles/cgi/CMakeLists.txt000066400000000000000000000030041476025525100215630ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # # The strategy is to only export to PARENT_SCOPE # # - changes to LIB_LIST # - changes to SOURCES # - includes via include_directories # # and keep everything else private include_directories(.) list(APPEND SOURCES roles/cgi/cgi-server.c roles/cgi/ops-cgi.c) # # Keep explicit parent scope exports at end # exports_to_parent_scope() libwebsockets-4.3.5/lib/roles/cgi/cgi-server.c000066400000000000000000000676341476025525100212600ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #if !defined(_GNU_SOURCE) #define _GNU_SOURCE #endif #include "private-lib-core.h" #if defined(WIN32) || defined(_WIN32) #else #include #endif static const char *hex = "0123456789ABCDEF"; void lws_cgi_sul_cb(lws_sorted_usec_list_t *sul); static int urlencode(const char *in, int inlen, char *out, int outlen) { char *start = out, *end = out + outlen; while (inlen-- && out < end - 4) { if ((*in >= 'A' && *in <= 'Z') || (*in >= 'a' && *in <= 'z') || (*in >= '0' && *in <= '9') || *in == '-' || *in == '_' || *in == '.' || *in == '~') { *out++ = *in++; continue; } if (*in == ' ') { *out++ = '+'; in++; continue; } *out++ = '%'; *out++ = hex[(*in) >> 4]; *out++ = hex[(*in++) & 15]; } *out = '\0'; if (out >= end - 4) return -1; return lws_ptr_diff(out, start); } static void lws_cgi_grace(lws_sorted_usec_list_t *sul) { struct lws_cgi *cgi = lws_container_of(sul, struct lws_cgi, sul_grace); /* act on the reap cb from earlier */ if (!cgi->wsi->http.cgi->post_in_expected) cgi->wsi->http.cgi->cgi_transaction_over = 1; lws_callback_on_writable(cgi->wsi); } static void lws_cgi_reap_cb(void *opaque, lws_usec_t *accounting, siginfo_t *si, int we_killed_him) { struct lws *wsi = (struct lws *)opaque; /* * The cgi has come to an end, by itself or with a signal... */ if (wsi->http.cgi) lwsl_wsi_info(wsi, "post_in_expected %d", (int)wsi->http.cgi->post_in_expected); /* * Grace period to handle the incoming stdout */ if (wsi->http.cgi) lws_sul_schedule(wsi->a.context, wsi->tsi, &wsi->http.cgi->sul_grace, lws_cgi_grace, 1 * LWS_US_PER_SEC); } int lws_cgi(struct lws *wsi, const char * const *exec_array, int script_uri_path_len, int timeout_secs, const struct lws_protocol_vhost_options *mp_cgienv) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; struct lws_spawn_piped_info info; char *env_array[30], cgi_path[500], e[1024], *p = e, *end = p + sizeof(e) - 1, tok[256], *t, *sum, *sumend; struct lws_cgi *cgi; int n, m = 0, i, uritok = -1, c; /* * give the cgi stream wsi a cgi struct */ wsi->http.cgi = lws_zalloc(sizeof(*wsi->http.cgi), "new cgi"); if (!wsi->http.cgi) { lwsl_wsi_err(wsi, "OOM"); return -1; } wsi->http.cgi->response_code = HTTP_STATUS_OK; cgi = wsi->http.cgi; cgi->wsi = wsi; /* set cgi's owning wsi */ sum = cgi->summary; sumend = sum + strlen(cgi->summary) - 1; if (timeout_secs) lws_set_timeout(wsi, PENDING_TIMEOUT_CGI, timeout_secs); /* the cgi stdout is always sending us http1.x header data first */ wsi->hdr_state = LCHS_HEADER; /* add us to the pt list of active cgis */ lwsl_wsi_debug(wsi, "adding cgi %p to list", wsi->http.cgi); cgi->cgi_list = pt->http.cgi_list; pt->http.cgi_list = cgi; /* if it's not already running, start the cleanup timer */ if (!pt->sul_cgi.list.owner) lws_sul_schedule(pt->context, (int)(pt - pt->context->pt), &pt->sul_cgi, lws_cgi_sul_cb, 3 * LWS_US_PER_SEC); sum += lws_snprintf(sum, lws_ptr_diff_size_t(sumend, sum), "%s ", exec_array[0]); if (0) { char *pct = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_CONTENT_ENCODING); if (pct && !strcmp(pct, "gzip")) wsi->http.cgi->gzip_inflate = 1; } /* prepare his CGI env */ n = 0; if (lws_is_ssl(wsi)) { env_array[n++] = p; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "HTTPS=ON"); p++; } if (wsi->http.ah) { static const unsigned char meths[] = { WSI_TOKEN_GET_URI, WSI_TOKEN_POST_URI, #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) WSI_TOKEN_OPTIONS_URI, WSI_TOKEN_PUT_URI, WSI_TOKEN_PATCH_URI, WSI_TOKEN_DELETE_URI, #endif WSI_TOKEN_CONNECT, WSI_TOKEN_HEAD_URI, #ifdef LWS_WITH_HTTP2 WSI_TOKEN_HTTP_COLON_PATH, #endif }; static const char * const meth_names[] = { "GET", "POST", #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) "OPTIONS", "PUT", "PATCH", "DELETE", #endif "CONNECT", "HEAD", ":path" }; if (script_uri_path_len >= 0) for (m = 0; m < (int)LWS_ARRAY_SIZE(meths); m++) if (lws_hdr_total_length(wsi, meths[m]) >= script_uri_path_len) { uritok = meths[m]; break; } if (script_uri_path_len < 0 && uritok < 0) goto bail; // if (script_uri_path_len < 0) // uritok = 0; if (m >= 0) { env_array[n++] = p; if (m < (int)LWS_ARRAY_SIZE(meths) - 1) { p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "REQUEST_METHOD=%s", meth_names[m]); sum += lws_snprintf(sum, lws_ptr_diff_size_t(sumend, sum), "%s ", meth_names[m]); #if defined(LWS_ROLE_H2) } else { p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "REQUEST_METHOD=%s", lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_METHOD)); sum += lws_snprintf(sum, lws_ptr_diff_size_t(sumend, sum), "%s ", lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_METHOD)); #endif } p++; } if (uritok >= 0) sum += lws_snprintf(sum, lws_ptr_diff_size_t(sumend, sum), "%s ", lws_hdr_simple_ptr(wsi, (enum lws_token_indexes)uritok)); env_array[n++] = p; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "QUERY_STRING="); /* dump the individual URI Arg parameters */ m = 0; while (script_uri_path_len >= 0) { i = lws_hdr_copy_fragment(wsi, tok, sizeof(tok), WSI_TOKEN_HTTP_URI_ARGS, m); if (i < 0) break; t = tok; while (*t && *t != '=' && p < end - 4) *p++ = *t++; if (*t == '=') *p++ = *t++; i = urlencode(t, i - lws_ptr_diff(t, tok), p, lws_ptr_diff(end, p)); if (i > 0) { p += i; *p++ = '&'; } m++; } if (m) p--; *p++ = '\0'; if (uritok >= 0) { strcpy(cgi_path, "REQUEST_URI="); c = lws_hdr_copy(wsi, cgi_path + 12, sizeof(cgi_path) - 12, (enum lws_token_indexes)uritok); if (c < 0) goto bail; cgi_path[sizeof(cgi_path) - 1] = '\0'; env_array[n++] = cgi_path; } sum += lws_snprintf(sum, lws_ptr_diff_size_t(sumend, sum), "%s", env_array[n - 1]); if (script_uri_path_len >= 0) { env_array[n++] = p; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "PATH_INFO=%s", cgi_path + 12 + script_uri_path_len); p++; } } #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) if (script_uri_path_len >= 0 && lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_REFERER)) { env_array[n++] = p; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "HTTP_REFERER=%s", lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_REFERER)); p++; } #endif if (script_uri_path_len >= 0 && lws_hdr_total_length(wsi, WSI_TOKEN_HOST)) { env_array[n++] = p; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "HTTP_HOST=%s", lws_hdr_simple_ptr(wsi, WSI_TOKEN_HOST)); p++; } if (script_uri_path_len >= 0 && lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_COOKIE)) { env_array[n++] = p; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "HTTP_COOKIE="); m = lws_hdr_copy(wsi, p, lws_ptr_diff(end, p), WSI_TOKEN_HTTP_COOKIE); if (m > 0) p += lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_COOKIE); *p++ = '\0'; } #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) if (script_uri_path_len >= 0 && lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_USER_AGENT)) { env_array[n++] = p; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "HTTP_USER_AGENT=%s", lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_USER_AGENT)); p++; } #endif if (script_uri_path_len >= 0 && lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_CONTENT_ENCODING)) { env_array[n++] = p; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "HTTP_CONTENT_ENCODING=%s", lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_CONTENT_ENCODING)); p++; } if (script_uri_path_len >= 0 && lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_ACCEPT)) { env_array[n++] = p; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "HTTP_ACCEPT=%s", lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_ACCEPT)); p++; } if (script_uri_path_len >= 0 && lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_ACCEPT_ENCODING)) { env_array[n++] = p; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "HTTP_ACCEPT_ENCODING=%s", lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_ACCEPT_ENCODING)); p++; } if (script_uri_path_len >= 0 && uritok == WSI_TOKEN_POST_URI) { if (lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE)) { env_array[n++] = p; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "CONTENT_TYPE=%s", lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE)); p++; } if (!wsi->http.cgi->gzip_inflate && lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH)) { env_array[n++] = p; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "CONTENT_LENGTH=%s", lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH)); p++; } if (lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH)) wsi->http.cgi->post_in_expected = (lws_filepos_t) atoll(lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH)); } env_array[n++] = p; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "PATH=/bin:/usr/bin:/usr/local/bin:/var/www/cgi-bin"); p++; env_array[n++] = p; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "SCRIPT_PATH=%s", exec_array[0]); p++; while (mp_cgienv) { env_array[n++] = p; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "%s=%s", mp_cgienv->name, mp_cgienv->value); if (!strcmp(mp_cgienv->name, "GIT_PROJECT_ROOT")) { wsi->http.cgi->implied_chunked = 1; wsi->http.cgi->explicitly_chunked = 1; } lwsl_info(" Applying mount-specific cgi env '%s'\n", env_array[n - 1]); p++; mp_cgienv = mp_cgienv->next; } env_array[n++] = p; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "SERVER_SOFTWARE=lws"); p++; env_array[n] = NULL; #if 0 for (m = 0; m < n; m++) lwsl_notice(" %s\n", env_array[m]); #endif memset(&info, 0, sizeof(info)); info.env_array = (const char **)env_array; info.exec_array = exec_array; info.max_log_lines = 20000; info.opt_parent = wsi; info.timeout_us = 5 * 60 * LWS_US_PER_SEC; info.tsi = wsi->tsi; info.vh = wsi->a.vhost; info.ops = &role_ops_cgi; info.plsp = &wsi->http.cgi->lsp; info.opaque = wsi; info.reap_cb = lws_cgi_reap_cb; /* * Actually having made the env, as a cgi we don't need the ah * any more */ if (script_uri_path_len >= 0) { lws_header_table_detach(wsi, 0); info.disable_ctrlc = 1; } wsi->http.cgi->lsp = lws_spawn_piped(&info); if (!wsi->http.cgi->lsp) { lwsl_err("%s: spawn failed\n", __func__); goto bail; } /* we are the parent process */ wsi->a.context->count_cgi_spawned++; /* inform cgi owner of the child PID */ n = user_callback_handle_rxflow(wsi->a.protocol->callback, wsi, LWS_CALLBACK_CGI_PROCESS_ATTACH, wsi->user_space, NULL, (unsigned int)cgi->lsp->child_pid); (void)n; return 0; bail: lws_sul_cancel(&wsi->http.cgi->sul_grace); lws_free_set_NULL(wsi->http.cgi); lwsl_err("%s: failed\n", __func__); return -1; } /* we have to parse out these headers in the CGI output */ static const char * const significant_hdr[SIGNIFICANT_HDR_COUNT] = { "content-length: ", "location: ", "status: ", "transfer-encoding: chunked", "content-encoding: gzip", }; enum header_recode { HR_NAME, HR_WHITESPACE, HR_ARG, HR_CRLF, }; int lws_cgi_write_split_stdout_headers(struct lws *wsi) { int n, m, cmd; unsigned char buf[LWS_PRE + 4096], *start = &buf[LWS_PRE], *p = start, *end = &buf[sizeof(buf) - 1 - LWS_PRE], *name, *value = NULL; char c, hrs; if (!wsi->http.cgi) return -1; while (wsi->hdr_state != LHCS_PAYLOAD) { /* * We have to separate header / finalize and payload chunks, * since they need to be handled separately */ switch (wsi->hdr_state) { case LHCS_RESPONSE: lwsl_wsi_debug(wsi, "LHCS_RESPONSE: iss response %d", wsi->http.cgi->response_code); if (lws_add_http_header_status(wsi, (unsigned int)wsi->http.cgi->response_code, &p, end)) return 1; if (!wsi->http.cgi->explicitly_chunked && !wsi->http.cgi->content_length && lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_TRANSFER_ENCODING, (unsigned char *)"chunked", 7, &p, end)) return 1; if (!(wsi->mux_substream)) if (lws_add_http_header_by_token(wsi, WSI_TOKEN_CONNECTION, (unsigned char *)"close", 5, &p, end)) return 1; n = lws_write(wsi, start, lws_ptr_diff_size_t(p, start), LWS_WRITE_HTTP_HEADERS | LWS_WRITE_NO_FIN); /* * so we have a bunch of http/1 style ascii headers * starting from wsi->http.cgi->headers_buf through * wsi->http.cgi->headers_pos. These are OK for http/1 * connections, but they're no good for http/2 conns. * * Let's redo them at headers_pos forward using the * correct coding for http/1 or http/2 */ if (!wsi->mux_substream) goto post_hpack_recode; p = wsi->http.cgi->headers_start; wsi->http.cgi->headers_start = wsi->http.cgi->headers_pos; wsi->http.cgi->headers_dumped = wsi->http.cgi->headers_start; hrs = HR_NAME; name = buf; while (p < wsi->http.cgi->headers_start) { switch (hrs) { case HR_NAME: /* * in http/2 upper-case header names * are illegal. So convert to lower- * case. */ if (name - buf > 64) return -1; if (*p != ':') { if (*p >= 'A' && *p <= 'Z') *name++ = (unsigned char)((*p++) + ('a' - 'A')); else *name++ = *p++; } else { p++; *name++ = '\0'; value = name; hrs = HR_WHITESPACE; } break; case HR_WHITESPACE: if (*p == ' ') { p++; break; } hrs = HR_ARG; /* fallthru */ case HR_ARG: if (name > end - 64) return -1; if (*p != '\x0a' && *p != '\x0d') { *name++ = *p++; break; } hrs = HR_CRLF; /* fallthru */ case HR_CRLF: if ((*p != '\x0a' && *p != '\x0d') || p + 1 == wsi->http.cgi->headers_start) { *name = '\0'; if ((strcmp((const char *)buf, "transfer-encoding") )) { lwsl_debug("+ %s: %s\n", buf, value); if ( lws_add_http_header_by_name(wsi, buf, (unsigned char *)value, lws_ptr_diff(name, value), (unsigned char **)&wsi->http.cgi->headers_pos, (unsigned char *)wsi->http.cgi->headers_end)) return 1; hrs = HR_NAME; name = buf; break; } } p++; break; } } post_hpack_recode: /* finalize cached headers before dumping them */ if (lws_finalize_http_header(wsi, (unsigned char **)&wsi->http.cgi->headers_pos, (unsigned char *)wsi->http.cgi->headers_end)) { lwsl_notice("finalize failed\n"); return -1; } wsi->hdr_state = LHCS_DUMP_HEADERS; wsi->reason_bf |= LWS_CB_REASON_AUX_BF__CGI_HEADERS; lws_callback_on_writable(wsi); /* back to the loop for writeability again */ return 0; case LHCS_DUMP_HEADERS: n = (int)(wsi->http.cgi->headers_pos - wsi->http.cgi->headers_dumped); if (n > 512) n = 512; lwsl_wsi_debug(wsi, "LHCS_DUMP_HEADERS: %d", n); cmd = LWS_WRITE_HTTP_HEADERS_CONTINUATION; if (wsi->http.cgi->headers_dumped + n != wsi->http.cgi->headers_pos) { lwsl_notice("adding no fin flag\n"); cmd |= LWS_WRITE_NO_FIN; } m = lws_write(wsi, (unsigned char *)wsi->http.cgi->headers_dumped, (unsigned int)n, (enum lws_write_protocol)cmd); if (m < 0) { lwsl_wsi_debug(wsi, "write says %d", m); return -1; } wsi->http.cgi->headers_dumped += n; if (wsi->http.cgi->headers_dumped == wsi->http.cgi->headers_pos) { wsi->hdr_state = LHCS_PAYLOAD; lws_free_set_NULL(wsi->http.cgi->headers_buf); lwsl_wsi_debug(wsi, "freed cgi headers"); if (wsi->http.cgi->post_in_expected) { lwsl_wsi_info(wsi, "post data still " "expected, asking " "for writeable"); lws_callback_on_writable(wsi); } } else { wsi->reason_bf |= LWS_CB_REASON_AUX_BF__CGI_HEADERS; lws_callback_on_writable(wsi); } /* * writeability becomes uncertain now we wrote * something, we must return to the event loop */ return 0; } if (!wsi->http.cgi->headers_buf) { /* if we don't already have a headers buf, cook one */ n = 2048; if (wsi->mux_substream) n = 4096; wsi->http.cgi->headers_buf = lws_malloc((unsigned int)n + LWS_PRE, "cgi hdr buf"); if (!wsi->http.cgi->headers_buf) { lwsl_wsi_err(wsi, "OOM"); return -1; } lwsl_wsi_debug(wsi, "allocated cgi hdrs"); wsi->http.cgi->headers_start = wsi->http.cgi->headers_buf + LWS_PRE; wsi->http.cgi->headers_pos = wsi->http.cgi->headers_start; wsi->http.cgi->headers_dumped = wsi->http.cgi->headers_pos; wsi->http.cgi->headers_end = wsi->http.cgi->headers_buf + n - 1; for (n = 0; n < SIGNIFICANT_HDR_COUNT; n++) { wsi->http.cgi->match[n] = 0; wsi->http.cgi->lp = 0; } } n = lws_get_socket_fd(wsi->http.cgi->lsp->stdwsi[LWS_STDOUT]); if (n < 0) return -1; n = (int)read(n, &c, 1); if (n < 0) { if (errno != EAGAIN) { lwsl_wsi_debug(wsi, "read says %d", n); return -1; } else n = 0; if (wsi->http.cgi->headers_pos >= wsi->http.cgi->headers_end - 4) { lwsl_wsi_notice(wsi, "CGI hdrs > buf size"); return -1; } } if (!n) goto agin; lwsl_wsi_debug(wsi, "-- 0x%02X %c %d %d", (unsigned char)c, c, wsi->http.cgi->match[1], wsi->hdr_state); if (!c) return -1; switch (wsi->hdr_state) { case LCHS_HEADER: hdr: for (n = 0; n < SIGNIFICANT_HDR_COUNT; n++) { /* * significant headers with * numeric decimal payloads */ if (!significant_hdr[n][wsi->http.cgi->match[n]] && (c >= '0' && c <= '9') && wsi->http.cgi->lp < (int)sizeof(wsi->http.cgi->l) - 1) { wsi->http.cgi->l[wsi->http.cgi->lp++] = c; wsi->http.cgi->l[wsi->http.cgi->lp] = '\0'; switch (n) { case SIGNIFICANT_HDR_CONTENT_LENGTH: wsi->http.cgi->content_length = (lws_filepos_t)atoll(wsi->http.cgi->l); break; case SIGNIFICANT_HDR_STATUS: wsi->http.cgi->response_code = atoi(wsi->http.cgi->l); lwsl_wsi_debug(wsi, "Status set to %d", wsi->http.cgi->response_code); break; default: break; } } /* hits up to the NUL are sticky until next hdr */ if (significant_hdr[n][wsi->http.cgi->match[n]]) { if (tolower(c) == significant_hdr[n][wsi->http.cgi->match[n]]) wsi->http.cgi->match[n]++; else wsi->http.cgi->match[n] = 0; } } /* some cgi only send us \x0a for EOL */ if (c == '\x0a') { wsi->hdr_state = LCHS_SINGLE_0A; *wsi->http.cgi->headers_pos++ = '\x0d'; } *wsi->http.cgi->headers_pos++ = (unsigned char)c; if (c == '\x0d') wsi->hdr_state = LCHS_LF1; if (wsi->hdr_state != LCHS_HEADER && !significant_hdr[SIGNIFICANT_HDR_TRANSFER_ENCODING] [wsi->http.cgi->match[ SIGNIFICANT_HDR_TRANSFER_ENCODING]]) { lwsl_wsi_info(wsi, "cgi produced chunked"); wsi->http.cgi->explicitly_chunked = 1; } /* presence of Location: mandates 302 retcode */ if (wsi->hdr_state != LCHS_HEADER && !significant_hdr[SIGNIFICANT_HDR_LOCATION][ wsi->http.cgi->match[SIGNIFICANT_HDR_LOCATION]]) { lwsl_wsi_debug(wsi, "CGI: Location hdr seen"); wsi->http.cgi->response_code = 302; } break; case LCHS_LF1: *wsi->http.cgi->headers_pos++ = (unsigned char)c; if (c == '\x0a') { wsi->hdr_state = LCHS_CR2; break; } /* we got \r[^\n]... it's unreasonable */ lwsl_wsi_debug(wsi, "funny CRLF 0x%02X", (unsigned char)c); return -1; case LCHS_CR2: if (c == '\x0d') { /* drop the \x0d */ wsi->hdr_state = LCHS_LF2; break; } wsi->hdr_state = LCHS_HEADER; for (n = 0; n < SIGNIFICANT_HDR_COUNT; n++) wsi->http.cgi->match[n] = 0; wsi->http.cgi->lp = 0; goto hdr; case LCHS_LF2: case LCHS_SINGLE_0A: m = wsi->hdr_state; if (c == '\x0a') { lwsl_wsi_debug(wsi, "Content-Length: %lld", (unsigned long long) wsi->http.cgi->content_length); wsi->hdr_state = LHCS_RESPONSE; /* * drop the \0xa ... finalize * will add it if needed (HTTP/1) */ break; } if (m == LCHS_LF2) /* we got \r\n\r[^\n]... unreasonable */ return -1; /* we got \x0anext header, it's reasonable */ *wsi->http.cgi->headers_pos++ = (unsigned char)c; wsi->hdr_state = LCHS_HEADER; for (n = 0; n < SIGNIFICANT_HDR_COUNT; n++) wsi->http.cgi->match[n] = 0; wsi->http.cgi->lp = 0; break; case LHCS_PAYLOAD: break; } agin: /* ran out of input, ended the hdrs, or filled up the hdrs buf */ if (!n || wsi->hdr_state == LHCS_PAYLOAD) return 0; } /* payload processing */ m = !wsi->http.cgi->implied_chunked && !wsi->mux_substream && // !wsi->http.cgi->explicitly_chunked && !wsi->http.cgi->content_length; n = lws_get_socket_fd(wsi->http.cgi->lsp->stdwsi[LWS_STDOUT]); if (n < 0) return -1; n = (int)read(n, start, sizeof(buf) - LWS_PRE); if (n < 0 && errno != EAGAIN) { lwsl_wsi_debug(wsi, "stdout read says %d", n); return -1; } if (n > 0) { // lwsl_hexdump_notice(buf, n); if (!wsi->mux_substream && m) { char chdr[LWS_HTTP_CHUNK_HDR_SIZE]; m = lws_snprintf(chdr, LWS_HTTP_CHUNK_HDR_SIZE - 3, "%X\x0d\x0a", n); memmove(start + m, start, (unsigned int)n); memcpy(start, chdr, (unsigned int)m); memcpy(start + m + n, "\x0d\x0a", 2); n += m + 2; } #if defined(LWS_WITH_HTTP2) if (wsi->mux_substream) { struct lws *nwsi = lws_get_network_wsi(wsi); __lws_set_timeout(wsi, PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE, 31); if (!nwsi->immortal_substream_count) __lws_set_timeout(nwsi, PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE, 31); } #endif cmd = LWS_WRITE_HTTP; if (wsi->http.cgi->content_length_seen + (unsigned int)n == wsi->http.cgi->content_length) cmd = LWS_WRITE_HTTP_FINAL; m = lws_write(wsi, (unsigned char *)start, (unsigned int)n, (enum lws_write_protocol)cmd); //lwsl_notice("write %d\n", m); if (m < 0) { lwsl_wsi_debug(wsi, "stdout write says %d\n", m); return -1; } wsi->http.cgi->content_length_seen += (unsigned int)n; } else { if (!wsi->mux_substream && m) { uint8_t term[LWS_PRE + 6]; lwsl_wsi_info(wsi, "sent trailer"); memcpy(term + LWS_PRE, (uint8_t *)"0\x0d\x0a\x0d\x0a", 5); if (lws_write(wsi, term + LWS_PRE, 5, LWS_WRITE_HTTP_FINAL) != 5) return -1; wsi->http.cgi->cgi_transaction_over = 1; return 0; } if (wsi->cgi_stdout_zero_length) { lwsl_wsi_debug(wsi, "stdout is POLLHUP'd"); if (wsi->mux_substream) m = lws_write(wsi, (unsigned char *)start, 0, LWS_WRITE_HTTP_FINAL); else return -1; return 1; } wsi->cgi_stdout_zero_length = 1; } return 0; } int lws_cgi_kill(struct lws *wsi) { struct lws_cgi_args args; pid_t pid; int n, m = 0; if (!wsi->http.cgi || !wsi->http.cgi->lsp) return 0; pid = wsi->http.cgi->lsp->child_pid; args.stdwsi = &wsi->http.cgi->lsp->stdwsi[0]; lws_spawn_piped_kill_child_process(wsi->http.cgi->lsp); /* that has invalidated and NULL'd wsi->http.cgi->lsp */ if (pid != -1) { if (wsi->http.cgi) m = wsi->http.cgi->being_closed; n = user_callback_handle_rxflow(wsi->a.protocol->callback, wsi, LWS_CALLBACK_CGI_TERMINATED, wsi->user_space, (void *)&args, (unsigned int)pid); if (n && !m) lws_close_free_wsi(wsi, 0, "lws_cgi_kill"); } return 0; } int lws_cgi_kill_terminated(struct lws_context_per_thread *pt) { struct lws_cgi **pcgi, *cgi = NULL; int status, n = 1; while (n > 0) { /* find finished guys but don't reap yet */ n = waitpid(-1, &status, WNOHANG); if (n <= 0) continue; lwsl_cx_debug(pt->context, "observed PID %d terminated", n); pcgi = &pt->http.cgi_list; /* check all the subprocesses on the cgi list */ while (*pcgi) { /* get the next one first as list may change */ cgi = *pcgi; pcgi = &(*pcgi)->cgi_list; if (cgi->lsp->child_pid <= 0) continue; /* finish sending cached headers */ if (cgi->headers_buf) continue; /* wait for stdout to be drained */ if (cgi->content_length > cgi->content_length_seen) continue; if (cgi->content_length) { lwsl_cx_debug(pt->context, "expected content " "length seen: %lld", (unsigned long long)cgi->content_length_seen); } /* reap it */ waitpid(n, &status, WNOHANG); /* * he's already terminated so no need for kill() * but we should do the terminated cgi callback * and close him if he's not already closing */ if (n == cgi->lsp->child_pid) { if (!cgi->content_length) { /* * well, if he sends chunked... * give him 2s after the * cgi terminated to send buffered */ cgi->chunked_grace++; continue; } /* defeat kill() */ cgi->lsp->child_pid = 0; lws_cgi_kill(cgi->wsi); break; } cgi = NULL; } /* if not found on the cgi list, as he's one of ours, reap */ if (!cgi) waitpid(n, &status, WNOHANG); } pcgi = &pt->http.cgi_list; /* check all the subprocesses on the cgi list */ while (*pcgi) { /* get the next one first as list may change */ cgi = *pcgi; pcgi = &(*pcgi)->cgi_list; if (!cgi || !cgi->lsp || cgi->lsp->child_pid <= 0) continue; /* we deferred killing him after reaping his PID */ if (cgi->chunked_grace) { cgi->chunked_grace++; if (cgi->chunked_grace < 2) continue; goto finish_him; } /* finish sending cached headers */ if (cgi->headers_buf) continue; /* wait for stdout to be drained */ if (cgi->content_length > cgi->content_length_seen) continue; if (cgi->content_length) lwsl_wsi_debug(cgi->wsi, "expected cont len seen: %lld", (unsigned long long)cgi->content_length_seen); /* reap it */ if (waitpid(cgi->lsp->child_pid, &status, WNOHANG) > 0) { if (!cgi->content_length) { /* * well, if he sends chunked... * give him 2s after the * cgi terminated to send buffered */ cgi->chunked_grace++; continue; } finish_him: lwsl_cx_debug(pt->context, "found PID %d on cgi list", cgi->lsp->child_pid); /* defeat kill() */ cgi->lsp->child_pid = 0; lws_cgi_kill(cgi->wsi); break; } } return 0; } struct lws * lws_cgi_get_stdwsi(struct lws *wsi, enum lws_enum_stdinouterr ch) { if (!wsi->http.cgi) return NULL; return wsi->http.cgi->lsp->stdwsi[ch]; } void lws_cgi_remove_and_kill(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; struct lws_cgi **pcgi = &pt->http.cgi_list; /* remove us from the cgi list */ while (*pcgi) { if (*pcgi == wsi->http.cgi) { /* drop us from the pt cgi list */ *pcgi = (*pcgi)->cgi_list; break; } pcgi = &(*pcgi)->cgi_list; } if (wsi->http.cgi->headers_buf) lws_free_set_NULL(wsi->http.cgi->headers_buf); /* we have a cgi going, we must kill it */ wsi->http.cgi->being_closed = 1; lws_cgi_kill(wsi); if (!pt->http.cgi_list) lws_sul_cancel(&pt->sul_cgi); } libwebsockets-4.3.5/lib/roles/cgi/ops-cgi.c000066400000000000000000000122601476025525100205340ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include static int rops_handle_POLLIN_cgi(struct lws_context_per_thread *pt, struct lws *wsi, struct lws_pollfd *pollfd) { struct lws_cgi_args args; assert(wsi->role_ops == &role_ops_cgi); if (wsi->lsp_channel >= LWS_STDOUT && !(pollfd->revents & pollfd->events & LWS_POLLIN)) return LWS_HPI_RET_HANDLED; if (wsi->lsp_channel == LWS_STDIN && !(pollfd->revents & pollfd->events & LWS_POLLOUT)) return LWS_HPI_RET_HANDLED; if (wsi->lsp_channel == LWS_STDIN && lws_change_pollfd(wsi, LWS_POLLOUT, 0)) { lwsl_wsi_info(wsi, "failed at set pollfd"); return LWS_HPI_RET_WSI_ALREADY_DIED; } if (!wsi->parent) { lwsl_wsi_debug(wsi, "stdwsi content with parent"); return LWS_HPI_RET_HANDLED; } if (!wsi->parent->http.cgi) { lwsl_wsi_notice(wsi, "stdwsi content with deleted cgi object"); return LWS_HPI_RET_HANDLED; } if (!wsi->parent->http.cgi->lsp) { lwsl_wsi_notice(wsi, "stdwsi content with reaped lsp"); return LWS_HPI_RET_HANDLED; } args.ch = wsi->lsp_channel; args.stdwsi = &wsi->parent->http.cgi->lsp->stdwsi[0]; args.hdr_state = (enum lws_cgi_hdr_state)wsi->hdr_state; lwsl_wsi_debug(wsi, "CGI LWS_STDOUT %p wsistate 0x%x", wsi->parent, wsi->wsistate); if (user_callback_handle_rxflow(wsi->parent->a.protocol->callback, wsi->parent, LWS_CALLBACK_CGI, wsi->parent->user_space, (void *)&args, 0)) return 1; return LWS_HPI_RET_HANDLED; } static int rops_handle_POLLOUT_cgi(struct lws *wsi) { return LWS_HP_RET_USER_SERVICE; } static int rops_destroy_role_cgi(struct lws *wsi) { #if defined(LWS_WITH_ZLIB) if (!wsi->http.cgi) return 0; if (!wsi->http.cgi->gzip_init) return 0; inflateEnd(&wsi->http.cgi->inflate); wsi->http.cgi->gzip_init = 0; #endif return 0; } void lws_cgi_sul_cb(lws_sorted_usec_list_t *sul) { struct lws_context_per_thread *pt = lws_container_of(sul, struct lws_context_per_thread, sul_cgi); lws_cgi_kill_terminated(pt); if (pt->http.cgi_list) lws_sul_schedule(pt->context, (int)(pt - pt->context->pt), &pt->sul_cgi, lws_cgi_sul_cb, 3 * LWS_US_PER_SEC); } static int rops_pt_init_destroy_cgi(struct lws_context *context, const struct lws_context_creation_info *info, struct lws_context_per_thread *pt, int destroy) { lws_sul_cancel(&pt->sul_cgi); return 0; } static int rops_close_role_cgi(struct lws_context_per_thread *pt, struct lws *wsi) { if (wsi->parent && wsi->parent->http.cgi && wsi->parent->http.cgi->lsp) lws_spawn_stdwsi_closed(wsi->parent->http.cgi->lsp, wsi); return 0; } static const lws_rops_t rops_table_cgi[] = { /* 1 */ { .pt_init_destroy = rops_pt_init_destroy_cgi }, /* 2 */ { .handle_POLLIN = rops_handle_POLLIN_cgi }, /* 3 */ { .handle_POLLOUT = rops_handle_POLLOUT_cgi }, /* 4 */ { .close_role = rops_close_role_cgi }, /* 5 */ { .destroy_role = rops_destroy_role_cgi }, }; const struct lws_role_ops role_ops_cgi = { /* role name */ "cgi", /* alpn id */ NULL, /* rops_table */ rops_table_cgi, /* rops_idx */ { /* LWS_ROPS_check_upgrades */ /* LWS_ROPS_pt_init_destroy */ 0x01, /* LWS_ROPS_init_vhost */ /* LWS_ROPS_destroy_vhost */ 0x00, /* LWS_ROPS_service_flag_pending */ /* LWS_ROPS_handle_POLLIN */ 0x02, /* LWS_ROPS_handle_POLLOUT */ /* LWS_ROPS_perform_user_POLLOUT */ 0x30, /* LWS_ROPS_callback_on_writable */ /* LWS_ROPS_tx_credit */ 0x00, /* LWS_ROPS_write_role_protocol */ /* LWS_ROPS_encapsulation_parent */ 0x00, /* LWS_ROPS_alpn_negotiated */ /* LWS_ROPS_close_via_role_protocol */ 0x00, /* LWS_ROPS_close_role */ /* LWS_ROPS_close_kill_connection */ 0x40, /* LWS_ROPS_destroy_role */ /* LWS_ROPS_adoption_bind */ 0x50, /* LWS_ROPS_client_bind */ /* LWS_ROPS_issue_keepalive */ 0x00, }, /* adoption_cb clnt, srv */ { 0, 0 }, /* rx_cb clnt, srv */ { 0, 0 }, /* writeable cb clnt, srv */ { 0, 0 }, /* close cb clnt, srv */ { 0, 0 }, /* protocol_bind_cb c,s */ { 0, 0 }, /* protocol_unbind_cb c,s */ { 0, 0 }, /* file_handle */ 0, }; libwebsockets-4.3.5/lib/roles/cgi/private-lib-roles-cgi.h000066400000000000000000000051251476025525100233020ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * This is included from private-lib-core.h if LWS_ROLE_WS */ #if defined(LWS_WITH_ZLIB) #if defined(LWS_WITH_MINIZ) #include #else #include #endif #endif extern const struct lws_role_ops role_ops_cgi; #define lwsi_role_cgi(wsi) (wsi->role_ops == &role_ops_cgi) #define LWS_HTTP_CHUNK_HDR_SIZE 16 enum { SIGNIFICANT_HDR_CONTENT_LENGTH, /* numeric */ SIGNIFICANT_HDR_LOCATION, SIGNIFICANT_HDR_STATUS, /* numeric */ SIGNIFICANT_HDR_TRANSFER_ENCODING, SIGNIFICANT_HDR_CONTENT_ENCODING_GZIP, SIGNIFICANT_HDR_COUNT }; struct lws; /* wsi who is owns the cgi points to an lws_cgi */ struct lws_cgi { struct lws_cgi *cgi_list; struct lws_spawn_piped *lsp; lws_sorted_usec_list_t sul_grace; struct lws *wsi; /* owner */ unsigned char *headers_buf; unsigned char *headers_start; unsigned char *headers_pos; unsigned char *headers_dumped; unsigned char *headers_end; char summary[128]; #if defined(LWS_WITH_ZLIB) z_stream inflate; uint8_t inflate_buf[1024]; #endif lws_filepos_t post_in_expected; lws_filepos_t content_length; lws_filepos_t content_length_seen; int match[SIGNIFICANT_HDR_COUNT]; char l[12]; int response_code; int lp; unsigned char being_closed:1; unsigned char explicitly_chunked:1; unsigned char cgi_transaction_over:1; unsigned char implied_chunked:1; unsigned char gzip_inflate:1; unsigned char gzip_init:1; unsigned char chunked_grace; }; libwebsockets-4.3.5/lib/roles/dbus/000077500000000000000000000000001476025525100172215ustar00rootroot00000000000000libwebsockets-4.3.5/lib/roles/dbus/CMakeLists.txt000066400000000000000000000043331476025525100217640ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # # The strategy is to only export to PARENT_SCOPE # # - changes to LIB_LIST # - changes to SOURCES # - includes via include_directories # # and keep everything else private include_directories(.) list(APPEND SOURCES roles/dbus/dbus.c) if (NOT LWS_DBUS_LIB) set(LWS_DBUS_LIB "dbus-1") endif() find_package(PkgConfig QUIET) pkg_check_modules(PC_DBUS1 dbus-1 QUIET) list(APPEND LWS_DBUS_INCLUDE1 ${PC_DBUS1_INCLUDE_DIRS}) list(APPEND LWS_DBUS_LIB ${PC_DBUS1_LIBRARIES}) list(APPEND LWS_DEPS_LIB_PATHS ${PC_DBUS1_LIBRARY_DIRS}) set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES};${LWS_DBUS_INCLUDE1}) CHECK_C_SOURCE_COMPILES("#include int main(void) { return 0; }" LWS_DBUS_CHECK_OK) message("dbus include dir 1: ${LWS_DBUS_INCLUDE1}") if (LWS_DBUS_INCLUDE1) include_directories("${LWS_DBUS_INCLUDE1}") endif() list(APPEND LIB_LIST ${LWS_DBUS_LIB}) # # Keep explicit parent scope exports at end # exports_to_parent_scope() set(LWS_DBUS_CHECK_OK ${LWS_DBUS_CHECK_OK} PARENT_SCOPE) set(LWS_DEPS_LIB_PATHS ${LWS_DEPS_LIB_PATHS} PARENT_SCOPE) libwebsockets-4.3.5/lib/roles/dbus/README.md000066400000000000000000000054161476025525100205060ustar00rootroot00000000000000# DBUS Role Support ## DBUS-related distro packages Fedora: dbus-devel Debian / Ubuntu: libdbus-1-dev ## Enabling for build at cmake Fedora example: ``` $ cmake .. -DLWS_ROLE_DBUS=1 -DLWS_DBUS_INCLUDE2="/usr/lib64/dbus-1.0/include" ``` Ubuntu example: ``` $ cmake .. -DLWS_ROLE_DBUS=1 -DLWS_DBUS_INCLUDE2="/usr/lib/x86_64-linux-gnu/dbus-1.0/include" ``` Dbus requires two include paths, which you can force by setting `LWS_DBUS_INCLUDE1` and `LWS_DBUS_INCLUDE2`. Although INCLUDE1 is usually guessable, both can be forced to allow cross-build. If these are not forced, then lws cmake will try to check some popular places, for `LWS_DBUS_INCLUDE1`, on both Fedora and Debian / Ubuntu, this is `/usr/include/dbus-1.0`... if the directory exists, it is used. For `LWS_DBUS_INCLUDE2`, it is the arch-specific dbus header which may be packaged separately than the main dbus headers. On Fedora, this is in `/usr/lib[64]/dbus-1.0/include`... if not given externally, lws cmake will try `/usr/lib64/dbus-1.0/include`. On Debian / Ubuntu, the package installs it in an arch-specific dir like `/usr/lib/x86_64-linux-gnu/dbus-1.0/include`, you should force the path. The library path is usually \[lib\] "dbus-1", but this can also be forced if you want to build cross or use a special build, via `LWS_DBUS_LIB`. ## Building against local dbus build If you built your own local dbus and installed it in /usr/local, then this is the incantation to direct lws to use the local version of dbus: ``` cmake .. -DLWS_ROLE_DBUS=1 -DLWS_DBUS_INCLUDE1="/usr/local/include/dbus-1.0" -DLWS_DBUS_INCLUDE2="/usr/local/lib/dbus-1.0/include" -DLWS_DBUS_LIB="/usr/local/lib/libdbus-1.so" ``` You'll also need to give the loader a helping hand to do what you want if there's a perfectly good dbus lib already in `/usr/lib[64]` using `LD_PRELOAD` like this ``` LD_PRELOAD=/usr/local/lib/libdbus-1.so.3.24.0 myapp ``` ## Lws dbus api exports Because of the irregular situation with libdbus includes, if lws exports the dbus helpers, which use dbus types, as usual from `#include ` then if lws was compiled with dbus role support it forces all users to take care about the dbus include path mess whether they use dbus themselves or not. For that reason, if you need access to the lws dbus apis, you must explicitly include them by ``` #include ``` This includes `` and so requires the include paths set up. But otherwise non-dbus users that don't include `libwebsockets/lws-dbus.h` don't have to care about it. ## DBUS and valgrind https://cgit.freedesktop.org/dbus/dbus/tree/README.valgrind 1) One-time 6KiB "Still reachable" caused by abstract unix domain socket + libc `getgrouplist()` via nss... bug since 2004(!) https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=273051 libwebsockets-4.3.5/lib/roles/dbus/dbus.c000066400000000000000000000356611476025525100203350ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * This role for wrapping dbus fds in a wsi + role is unusual in that the * wsi it creates and binds to the role do not have control over the related fd * lifecycle. In fact dbus doesn't inform us directly about the lifecycle of * the fds it wants to be managed by the lws event loop. * * What it does tell us is when it wants to wait on POLLOUT and / or POLLIN, * and since it should stop any watchers before close, we take the approach to * create a lightweight "shadow" wsi for any fd from dbus that has a POLLIN or * POLLOUT wait active. When the dbus fd asks to have no wait active, we * destroy the wsi, since this is indistinguishable from dbus close path * behaviour. If it actually stays alive and later asks to wait again, well no * worries we create a new shadow wsi until it looks like it is closing again. */ #include #include /* * retreives existing or creates new shadow wsi for fd owned by dbus stuff. * * Requires context + vhost lock */ static struct lws * __lws_shadow_wsi(struct lws_dbus_ctx *ctx, DBusWatch *w, int fd, int create_ok) { struct lws *wsi; if (fd < 0 || fd >= (int)ctx->vh->context->fd_limit_per_thread) { lwsl_err("%s: fd %d vs fds_count %d\n", __func__, fd, (int)ctx->vh->context->fd_limit_per_thread); assert(0); return NULL; } wsi = wsi_from_fd(ctx->vh->context, fd); if (wsi) { assert(wsi->opaque_parent_data == ctx); return wsi; } if (!create_ok) return NULL; lws_context_assert_lock_held(wsi->a.context); lws_vhost_assert_lock_held(wsi->a.vhost); /* requires context lock */ wsi = __lws_wsi_create_with_role(ctx->vh->context, ctx->tsi, NULL, ctx->vh->lc.log_cx); if (wsi == NULL) { lwsl_err("Out of mem\n"); return NULL; } lwsl_info("%s: creating shadow wsi\n", __func__); wsi->desc.sockfd = fd; lws_role_transition(wsi, 0, LRS_ESTABLISHED, &role_ops_dbus); wsi->a.protocol = ctx->vh->protocols; wsi->shadow = 1; wsi->opaque_parent_data = ctx; ctx->w[0] = w; __lws_lc_tag(ctx->vh->context, &ctx->vh->context->lcg[LWSLCG_WSI], &wsi->lc, "dbus|%s", ctx->vh->name); lws_vhost_bind_wsi(ctx->vh, wsi); if (__insert_wsi_socket_into_fds(ctx->vh->context, wsi)) { lwsl_err("inserting wsi socket into fds failed\n"); __lws_vhost_unbind_wsi(wsi); /* cx + vh lock */ lws_free(wsi); return NULL; } return wsi; } /* * Requires cx + vhost lock */ static int __lws_shadow_wsi_destroy(struct lws_dbus_ctx *ctx, struct lws *wsi) { lwsl_info("%s: destroying shadow wsi\n", __func__); lws_context_assert_lock_held(wsi->a.context); lws_vhost_assert_lock_held(wsi->a.vhost); if (__remove_wsi_socket_from_fds(wsi)) { lwsl_err("%s: unable to remove %d from fds\n", __func__, wsi->desc.sockfd); return 1; } __lws_vhost_unbind_wsi(wsi); lws_free(wsi); return 0; } static void handle_dispatch_status(DBusConnection *c, DBusDispatchStatus s, void *data) { lwsl_info("%s: new dbus dispatch status: %d\n", __func__, s); } /* * These are complicated by the fact libdbus can have two separate DBusWatch * objects for the same fd, to control watching POLLIN and POLLOUT individually. * * However we will actually watch using poll(), where the unit is the fd, and * it has a unified events field with just POLLIN / POLLOUT flags. * * So we have to be prepared for one or two watchers coming in any order. */ static dbus_bool_t lws_dbus_add_watch(DBusWatch *w, void *data) { struct lws_dbus_ctx *ctx = (struct lws_dbus_ctx *)data; struct lws_context_per_thread *pt = &ctx->vh->context->pt[ctx->tsi]; unsigned int flags = 0, lws_flags = 0; struct lws *wsi; int n; lws_context_lock(pt->context, __func__); lws_pt_lock(pt, __func__); wsi = __lws_shadow_wsi(ctx, w, dbus_watch_get_unix_fd(w), 1); if (!wsi) { lws_pt_unlock(pt); lws_context_unlock(pt->context); lwsl_err("%s: unable to get wsi\n", __func__); return FALSE; } for (n = 0; n < (int)LWS_ARRAY_SIZE(ctx->w); n++) if (w == ctx->w[n]) break; if (n == (int)LWS_ARRAY_SIZE(ctx->w)) for (n = 0; n < (int)LWS_ARRAY_SIZE(ctx->w); n++) if (!ctx->w[n]) { ctx->w[n] = w; break; } for (n = 0; n < (int)LWS_ARRAY_SIZE(ctx->w); n++) if (ctx->w[n] && dbus_watch_get_enabled(ctx->w[n])) flags |= dbus_watch_get_flags(ctx->w[n]); if (flags & DBUS_WATCH_READABLE) lws_flags |= LWS_POLLIN; if (flags & DBUS_WATCH_WRITABLE) lws_flags |= LWS_POLLOUT; lwsl_info("%s: %s: %p, fd %d, data %p, fl %d\n", __func__, lws_wsi_tag(wsi), w, dbus_watch_get_unix_fd(w), data, lws_flags); if (lws_flags) __lws_change_pollfd(wsi, 0, (int)lws_flags); lws_pt_unlock(pt); lws_context_unlock(pt->context); return TRUE; } /* cx + vh lock */ static int __check_destroy_shadow_wsi(struct lws_dbus_ctx *ctx, struct lws *wsi) { int n; if (!wsi) return 0; for (n = 0; n < (int)LWS_ARRAY_SIZE(ctx->w); n++) if (ctx->w[n]) return 0; __lws_shadow_wsi_destroy(ctx, wsi); if (!ctx->conn || !ctx->hup || ctx->timeouts) return 0; if (dbus_connection_get_dispatch_status(ctx->conn) == DBUS_DISPATCH_DATA_REMAINS) return 0; if (ctx->cb_closing) ctx->cb_closing(ctx); return 1; } static void lws_dbus_remove_watch(DBusWatch *w, void *data) { struct lws_dbus_ctx *ctx = (struct lws_dbus_ctx *)data; struct lws_context_per_thread *pt = &ctx->vh->context->pt[ctx->tsi]; unsigned int flags = 0, lws_flags = 0; struct lws *wsi; int n; lws_context_lock(pt->context, __func__); lws_pt_lock(pt, __func__); wsi = __lws_shadow_wsi(ctx, w, dbus_watch_get_unix_fd(w), 0); if (!wsi) goto bail; for (n = 0; n < (int)LWS_ARRAY_SIZE(ctx->w); n++) if (w == ctx->w[n]) { ctx->w[n] = NULL; break; } for (n = 0; n < (int)LWS_ARRAY_SIZE(ctx->w); n++) if (ctx->w[n]) flags |= dbus_watch_get_flags(ctx->w[n]); if ((~flags) & DBUS_WATCH_READABLE) lws_flags |= LWS_POLLIN; if ((~flags) & DBUS_WATCH_WRITABLE) lws_flags |= LWS_POLLOUT; lwsl_info("%s: %p, fd %d, data %p, clearing lws flags %d\n", __func__, w, dbus_watch_get_unix_fd(w), data, lws_flags); __lws_change_pollfd(wsi, (int)lws_flags, 0); bail: lws_pt_unlock(pt); lws_context_unlock(pt->context); } static void lws_dbus_toggle_watch(DBusWatch *w, void *data) { if (dbus_watch_get_enabled(w)) lws_dbus_add_watch(w, data); else lws_dbus_remove_watch(w, data); } static void lws_dbus_sul_cb(lws_sorted_usec_list_t *sul) { struct lws_context_per_thread *pt = lws_container_of(sul, struct lws_context_per_thread, dbus.sul); lws_start_foreach_dll_safe(struct lws_dll2 *, rdt, nx, lws_dll2_get_head(&pt->dbus.timer_list_owner)) { struct lws_role_dbus_timer *r = lws_container_of(rdt, struct lws_role_dbus_timer, timer_list); if (time(NULL) > r->fire) { lwsl_notice("%s: firing timer\n", __func__); dbus_timeout_handle(r->data); lws_dll2_remove(rdt); lws_free(rdt); } } lws_end_foreach_dll_safe(rdt, nx); if (pt->dbus.timer_list_owner.count) lws_sul_schedule(pt->context, pt->tid, &pt->dbus.sul, lws_dbus_sul_cb, 3 * LWS_US_PER_SEC); } static dbus_bool_t lws_dbus_add_timeout(DBusTimeout *t, void *data) { struct lws_dbus_ctx *ctx = (struct lws_dbus_ctx *)data; struct lws_context_per_thread *pt = &ctx->vh->context->pt[ctx->tsi]; int ms = dbus_timeout_get_interval(t); struct lws_role_dbus_timer *dbt; time_t ti = time(NULL); if (!dbus_timeout_get_enabled(t)) return TRUE; if (ms < 1000) ms = 1000; dbt = lws_malloc(sizeof(*dbt), "dbus timer"); if (!dbt) return FALSE; lwsl_info("%s: adding timeout %dms\n", __func__, dbus_timeout_get_interval(t)); dbt->data = t; dbt->fire = ti + (ms < 1000); dbt->timer_list.prev = NULL; dbt->timer_list.next = NULL; dbt->timer_list.owner = NULL; lws_dll2_add_head(&dbt->timer_list, &pt->dbus.timer_list_owner); if (!pt->dbus.sul.list.owner) lws_sul_schedule(pt->context, pt->tid, &pt->dbus.sul, lws_dbus_sul_cb, 3 * LWS_US_PER_SEC); ctx->timeouts++; return TRUE; } static void lws_dbus_remove_timeout(DBusTimeout *t, void *data) { struct lws_dbus_ctx *ctx = (struct lws_dbus_ctx *)data; struct lws_context_per_thread *pt = &ctx->vh->context->pt[ctx->tsi]; lwsl_info("%s: t %p, data %p\n", __func__, t, data); lws_start_foreach_dll_safe(struct lws_dll2 *, rdt, nx, lws_dll2_get_head(&pt->dbus.timer_list_owner)) { struct lws_role_dbus_timer *r = lws_container_of(rdt, struct lws_role_dbus_timer, timer_list); if (t == r->data) { lws_dll2_remove(rdt); lws_free(rdt); ctx->timeouts--; break; } } lws_end_foreach_dll_safe(rdt, nx); if (!pt->dbus.timer_list_owner.count) lws_sul_cancel(&pt->dbus.sul); } static void lws_dbus_toggle_timeout(DBusTimeout *t, void *data) { if (dbus_timeout_get_enabled(t)) lws_dbus_add_timeout(t, data); else lws_dbus_remove_timeout(t, data); } /* * This sets up a connection along the same lines as * dbus_connection_setup_with_g_main(), but for using the lws event loop. */ int lws_dbus_connection_setup(struct lws_dbus_ctx *ctx, DBusConnection *conn, lws_dbus_closing_t cb_closing) { int n; ctx->conn = conn; ctx->cb_closing = cb_closing; ctx->hup = 0; ctx->timeouts = 0; for (n = 0; n < (int)LWS_ARRAY_SIZE(ctx->w); n++) ctx->w[n] = NULL; if (!dbus_connection_set_watch_functions(conn, lws_dbus_add_watch, lws_dbus_remove_watch, lws_dbus_toggle_watch, ctx, NULL)) { lwsl_err("%s: dbus_connection_set_watch_functions fail\n", __func__); return 1; } if (!dbus_connection_set_timeout_functions(conn, lws_dbus_add_timeout, lws_dbus_remove_timeout, lws_dbus_toggle_timeout, ctx, NULL)) { lwsl_err("%s: dbus_connection_set_timeout_functions fail\n", __func__); return 1; } dbus_connection_set_dispatch_status_function(conn, handle_dispatch_status, ctx, NULL); return 0; } /* * This wraps dbus_server_listen(), additionally taking care of the event loop * -related setups. */ DBusServer * lws_dbus_server_listen(struct lws_dbus_ctx *ctx, const char *ads, DBusError *e, DBusNewConnectionFunction new_conn) { ctx->cb_closing = NULL; ctx->hup = 0; ctx->timeouts = 0; ctx->dbs = dbus_server_listen(ads, e); if (!ctx->dbs) return NULL; dbus_server_set_new_connection_function(ctx->dbs, new_conn, ctx, NULL); if (!dbus_server_set_watch_functions(ctx->dbs, lws_dbus_add_watch, lws_dbus_remove_watch, lws_dbus_toggle_watch, ctx, NULL)) { lwsl_err("%s: dbus_connection_set_watch_functions fail\n", __func__); goto bail; } if (!dbus_server_set_timeout_functions(ctx->dbs, lws_dbus_add_timeout, lws_dbus_remove_timeout, lws_dbus_toggle_timeout, ctx, NULL)) { lwsl_err("%s: dbus_connection_set_timeout_functions fail\n", __func__); goto bail; } return ctx->dbs; bail: dbus_server_disconnect(ctx->dbs); dbus_server_unref(ctx->dbs); return NULL; } /* * There shouldn't be a race here with watcher removal and poll wait, because * everything including the dbus activity is serialized in one event loop. * * If it removes the watcher and we remove the wsi and fd entry before this, * actually we can no longer map the fd to this invalidated wsi pointer to call * this. */ static int rops_handle_POLLIN_dbus(struct lws_context_per_thread *pt, struct lws *wsi, struct lws_pollfd *pollfd) { struct lws_dbus_ctx *ctx = (struct lws_dbus_ctx *)wsi->opaque_parent_data; unsigned int flags = 0; int n; if (pollfd->revents & LWS_POLLIN) flags |= DBUS_WATCH_READABLE; if (pollfd->revents & LWS_POLLOUT) flags |= DBUS_WATCH_WRITABLE; if (pollfd->revents & (LWS_POLLHUP)) ctx->hup = 1; /* * POLLIN + POLLOUT gets us called here on the corresponding shadow * wsi. wsi->opaque_parent_data is the watcher handle bound to the wsi */ for (n = 0; n < (int)LWS_ARRAY_SIZE(ctx->w); n++) if (ctx->w[n] && !dbus_watch_handle(ctx->w[n], flags)) lwsl_err("%s: dbus_watch_handle failed\n", __func__); if (ctx->conn) { lwsl_info("%s: conn: flags %d\n", __func__, flags); while (dbus_connection_get_dispatch_status(ctx->conn) == DBUS_DISPATCH_DATA_REMAINS) dbus_connection_dispatch(ctx->conn); handle_dispatch_status(NULL, DBUS_DISPATCH_DATA_REMAINS, NULL); __check_destroy_shadow_wsi(ctx, wsi); } else if (ctx->dbs) /* ??? */ lwsl_debug("%s: dbs: %d\n", __func__, flags); return LWS_HPI_RET_HANDLED; } static int rops_pt_init_destroy_dbus(struct lws_context *context, const struct lws_context_creation_info *info, struct lws_context_per_thread *pt, int destroy) { if (destroy) lws_sul_cancel(&pt->dbus.sul); return 0; } static const lws_rops_t rops_table_dbus[] = { /* 1 */ { .pt_init_destroy = rops_pt_init_destroy_dbus }, /* 2 */ { .handle_POLLIN = rops_handle_POLLIN_dbus }, }; const struct lws_role_ops role_ops_dbus = { /* role name */ "dbus", /* alpn id */ NULL, /* rops_table */ rops_table_dbus, /* rops_idx */ { /* LWS_ROPS_check_upgrades */ /* LWS_ROPS_pt_init_destroy */ 0x01, /* LWS_ROPS_init_vhost */ /* LWS_ROPS_destroy_vhost */ 0x00, /* LWS_ROPS_service_flag_pending */ /* LWS_ROPS_handle_POLLIN */ 0x02, /* LWS_ROPS_handle_POLLOUT */ /* LWS_ROPS_perform_user_POLLOUT */ 0x00, /* LWS_ROPS_callback_on_writable */ /* LWS_ROPS_tx_credit */ 0x00, /* LWS_ROPS_write_role_protocol */ /* LWS_ROPS_encapsulation_parent */ 0x00, /* LWS_ROPS_alpn_negotiated */ /* LWS_ROPS_close_via_role_protocol */ 0x00, /* LWS_ROPS_close_role */ /* LWS_ROPS_close_kill_connection */ 0x00, /* LWS_ROPS_destroy_role */ /* LWS_ROPS_adoption_bind */ 0x00, /* LWS_ROPS_client_bind */ /* LWS_ROPS_issue_keepalive */ 0x00, }, /* adoption_cb clnt, srv */ { 0, 0 }, /* rx_cb clnt, srv */ { 0, 0 }, /* writeable cb clnt, srv */ { 0, 0 }, /* close cb clnt, srv */ { 0, 0 }, /* protocol_bind_cb c,s */ { 0, 0 }, /* protocol_unbind_cb c,s */ { 0, 0 }, /* file_handle */ 0, }; libwebsockets-4.3.5/lib/roles/dbus/private-lib-roles-dbus.h000066400000000000000000000032071476025525100236670ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * This is included from private-lib-core.h if LWS_ROLE_DBUS */ #include extern const struct lws_role_ops role_ops_dbus; #define lwsi_role_dbus(wsi) (wsi->role_ops == &role_ops_dbus) struct lws_role_dbus_timer { struct lws_dll2 timer_list; void *data; time_t fire; }; struct lws_pt_role_dbus { struct lws_dll2_owner timer_list_owner; lws_sorted_usec_list_t sul; }; struct _lws_dbus_mode_related { DBusConnection *conn; }; libwebsockets-4.3.5/lib/roles/h1/000077500000000000000000000000001476025525100165745ustar00rootroot00000000000000libwebsockets-4.3.5/lib/roles/h1/CMakeLists.txt000066400000000000000000000027521476025525100213420ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # # The strategy is to only export to PARENT_SCOPE # # - changes to LIB_LIST # - changes to SOURCES # - includes via include_directories # # and keep everything else private include_directories(.) list(APPEND SOURCES roles/h1/ops-h1.c) # # Keep explicit parent scope exports at end # exports_to_parent_scope() libwebsockets-4.3.5/lib/roles/h1/ops-h1.c000066400000000000000000000760021476025525100200540ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include #ifndef min #define min(a, b) ((a) < (b) ? (a) : (b)) #endif /* * We have to take care about parsing because the headers may be split * into multiple fragments. They may contain unknown headers with arbitrary * argument lengths. So, we parse using a single-character at a time state * machine that is completely independent of packet size. * * Returns <0 for error or length of chars consumed from buf (up to len) */ int lws_read_h1(struct lws *wsi, unsigned char *buf, lws_filepos_t len) { unsigned char *last_char, *oldbuf = buf; lws_filepos_t body_chunk_len; size_t n; lwsl_debug("%s: h1 path: wsi state 0x%x\n", __func__, lwsi_state(wsi)); switch (lwsi_state(wsi)) { case LRS_ISSUING_FILE: return 0; case LRS_ESTABLISHED: if (lwsi_role_ws(wsi)) goto ws_mode; if (lwsi_role_client(wsi)) break; wsi->hdr_parsing_completed = 0; /* fallthru */ case LRS_HEADERS: if (!wsi->http.ah) { lwsl_err("%s: LRS_HEADERS: NULL ah\n", __func__); assert(0); } lwsl_parser("issuing %d bytes to parser\n", (int)len); #if defined(LWS_ROLE_WS) && defined(LWS_WITH_CLIENT) if (lws_ws_handshake_client(wsi, &buf, (size_t)len)) goto bail; #endif last_char = buf; if (lws_handshake_server(wsi, &buf, (size_t)len)) /* Handshake indicates this session is done. */ goto bail; /* we might have transitioned to RAW */ if (wsi->role_ops == &role_ops_raw_skt #if defined(LWS_ROLE_RAW_FILE) || wsi->role_ops == &role_ops_raw_file #endif ) /* we gave the read buffer to RAW handler already */ goto read_ok; /* * It's possible that we've exhausted our data already, or * rx flow control has stopped us dealing with this early, * but lws_handshake_server doesn't update len for us. * Figure out how much was read, so that we can proceed * appropriately: */ len -= (unsigned int)lws_ptr_diff(buf, last_char); if (!wsi->hdr_parsing_completed) /* More header content on the way */ goto read_ok; switch (lwsi_state(wsi)) { case LRS_ESTABLISHED: case LRS_HEADERS: goto read_ok; case LRS_ISSUING_FILE: goto read_ok; case LRS_DISCARD_BODY: case LRS_BODY: wsi->http.rx_content_remain = wsi->http.rx_content_length; if (wsi->http.rx_content_remain) goto http_postbody; /* there is no POST content */ goto postbody_completion; default: break; } break; case LRS_DISCARD_BODY: case LRS_BODY: http_postbody: lwsl_info("%s: http post body: cl set %d, remain %d, len %d\n", __func__, (int)wsi->http.content_length_given, (int)wsi->http.rx_content_remain, (int)len); if (wsi->http.content_length_given && !wsi->http.rx_content_remain) goto postbody_completion; while (len && (!wsi->http.content_length_given || wsi->http.rx_content_remain)) { /* Copy as much as possible, up to the limit of: * what we have in the read buffer (len) * remaining portion of the POST body (content_remain) */ if (wsi->http.content_length_given) body_chunk_len = min(wsi->http.rx_content_remain, len); else body_chunk_len = len; wsi->http.rx_content_remain -= body_chunk_len; // len -= body_chunk_len; #ifdef LWS_WITH_CGI if (wsi->http.cgi) { struct lws_cgi_args args; args.ch = LWS_STDIN; args.stdwsi = &wsi->http.cgi->lsp->stdwsi[0]; args.data = buf; args.len = (int)(unsigned int)body_chunk_len; /* returns how much used */ n = (unsigned int)user_callback_handle_rxflow( wsi->a.protocol->callback, wsi, LWS_CALLBACK_CGI_STDIN_DATA, wsi->user_space, (void *)&args, 0); if ((int)n < 0) goto bail; } else { #endif if (lwsi_state(wsi) != LRS_DISCARD_BODY) { lwsl_info("%s: HTTP_BODY %d\n", __func__, (int)body_chunk_len); n = (unsigned int)wsi->a.protocol->callback(wsi, LWS_CALLBACK_HTTP_BODY, wsi->user_space, buf, (size_t)body_chunk_len); if (n) goto bail; } n = (size_t)body_chunk_len; #ifdef LWS_WITH_CGI } #endif lwsl_info("%s: advancing buf by %d\n", __func__, (int)n); buf += n; #if defined(LWS_ROLE_H2) if (lwsi_role_h2(wsi) && !wsi->http.content_length_given) { struct lws *w = lws_get_network_wsi(wsi); if (w) lwsl_info("%s: h2: nwsi h2 flags %d\n", __func__, w->h2.h2n ? w->h2.h2n->flags: -1); if (w && w->h2.h2n && !(w->h2.h2n->flags & 1)) { lwsl_info("%s: h2, no cl, not END_STREAM, continuing\n", __func__); lws_set_timeout(wsi, PENDING_TIMEOUT_HTTP_CONTENT, (int)wsi->a.context->timeout_secs); break; } goto postbody_completion; } #endif if (wsi->http.rx_content_remain) { lws_set_timeout(wsi, PENDING_TIMEOUT_HTTP_CONTENT, (int)wsi->a.context->timeout_secs); break; } /* he sent all the content in time */ postbody_completion: #ifdef LWS_WITH_CGI /* * If we're running a cgi, we can't let him off the * hook just because he sent his POST data */ if (wsi->http.cgi) lws_set_timeout(wsi, PENDING_TIMEOUT_CGI, (int)wsi->a.context->timeout_secs); else #endif lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); #ifdef LWS_WITH_CGI if (!wsi->http.cgi) #endif { #if defined(LWS_WITH_SERVER) if (lwsi_state(wsi) == LRS_DISCARD_BODY) { /* * repeat the transaction completed * that got us into this state, having * consumed the pending body now */ if (lws_http_transaction_completed(wsi)) goto bail; break; } #endif lwsl_info("HTTP_BODY_COMPLETION: %s (%s)\n", lws_wsi_tag(wsi), wsi->a.protocol->name); n = (unsigned int)wsi->a.protocol->callback(wsi, LWS_CALLBACK_HTTP_BODY_COMPLETION, wsi->user_space, NULL, 0); if (n) { lwsl_info("%s: bailing after BODY_COMPLETION\n", __func__); goto bail; } if (wsi->mux_substream) lwsi_set_state(wsi, LRS_ESTABLISHED); } break; } break; case LRS_RETURNED_CLOSE: case LRS_AWAITING_CLOSE_ACK: case LRS_WAITING_TO_SEND_CLOSE: case LRS_SHUTDOWN: ws_mode: #if defined(LWS_WITH_CLIENT) && defined(LWS_ROLE_WS) // lwsl_notice("%s: ws_mode\n", __func__); if (lws_ws_handshake_client(wsi, &buf, (size_t)len)) goto bail; #endif #if defined(LWS_ROLE_WS) if (lwsi_role_ws(wsi) && lwsi_role_server(wsi) && /* * for h2 we are on the swsi */ lws_parse_ws(wsi, &buf, (size_t)len) < 0) { lwsl_info("%s: lws_parse_ws bailed\n", __func__); goto bail; } #endif // lwsl_notice("%s: ws_mode: buf moved on by %d\n", __func__, // lws_ptr_diff(buf, oldbuf)); break; case LRS_DEFERRING_ACTION: lwsl_notice("%s: LRS_DEFERRING_ACTION\n", __func__); break; case LRS_SSL_ACK_PENDING: break; case LRS_FLUSHING_BEFORE_CLOSE: break; case LRS_DEAD_SOCKET: lwsl_err("%s: Unhandled state LRS_DEAD_SOCKET\n", __func__); goto bail; // assert(0); /* fallthru */ case LRS_WAITING_CONNECT: /* observed on warmcat.com */ break; default: lwsl_err("%s: Unhandled state %d\n", __func__, lwsi_state(wsi)); goto bail; } read_ok: /* Nothing more to do for now */ // lwsl_info("%s: %p: read_ok, used %ld (len %d, state %d)\n", __func__, // wsi, (long)(buf - oldbuf), (int)len, wsi->state); return lws_ptr_diff(buf, oldbuf); bail: /* * h2 / h2-ws calls us recursively in * * lws_read_h1()-> * lws_h2_parser()-> * lws_read_h1() * * pattern, having stripped the h2 framing in the middle. * * When taking down the whole connection, make sure that only the * outer lws_read() does the wsi close. */ if (!wsi->outer_will_close) lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "lws_read_h1 bail"); return -1; } #if defined(LWS_WITH_SERVER) static int lws_h1_server_socket_service(struct lws *wsi, struct lws_pollfd *pollfd) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; struct lws_tokens ebuf; int n, buffered; if (lwsi_state(wsi) == LRS_DEFERRING_ACTION) goto try_pollout; /* any incoming data ready? */ if (!(pollfd->revents & pollfd->events & LWS_POLLIN)) goto try_pollout; /* * If we previously just did POLLIN when IN and OUT were signaled * (because POLLIN processing may have used up the POLLOUT), don't let * that happen twice in a row... next time we see the situation favour * POLLOUT */ if (wsi->favoured_pollin && (pollfd->revents & pollfd->events & LWS_POLLOUT)) { // lwsl_notice("favouring pollout\n"); wsi->favoured_pollin = 0; goto try_pollout; } /* * We haven't processed that the tunnel is set up yet, so * defer reading */ if (lwsi_state(wsi) == LRS_SSL_ACK_PENDING) return LWS_HPI_RET_HANDLED; /* these states imply we MUST have an ah attached */ if ((lwsi_state(wsi) == LRS_ESTABLISHED || lwsi_state(wsi) == LRS_ISSUING_FILE || lwsi_state(wsi) == LRS_HEADERS || lwsi_state(wsi) == LRS_DOING_TRANSACTION || /* at least, SSE */ lwsi_state(wsi) == LRS_DISCARD_BODY || lwsi_state(wsi) == LRS_BODY)) { if (!wsi->http.ah && lws_header_table_attach(wsi, 0)) { lwsl_info("%s: %s: ah not available\n", __func__, lws_wsi_tag(wsi)); goto try_pollout; } /* * We got here because there was specifically POLLIN... * regardless of our buflist state, we need to get it, * and either use it, or append to the buflist and use * buflist head material. * * We will not notice a connection close until the buflist is * exhausted and we tried to do a read of some kind. */ ebuf.token = NULL; ebuf.len = 0; buffered = lws_buflist_aware_read(pt, wsi, &ebuf, 0, __func__); switch (ebuf.len) { case 0: lwsl_info("%s: read 0 len a\n", __func__); wsi->seen_zero_length_recv = 1; if (lws_change_pollfd(wsi, LWS_POLLIN, 0)) goto fail; #if !defined(LWS_WITHOUT_EXTENSIONS) /* * autobahn requires us to win the race between close * and draining the extensions */ if (wsi->ws && (wsi->ws->rx_draining_ext || wsi->ws->tx_draining_ext)) goto try_pollout; #endif /* * normally, we respond to close with logically closing * our side immediately */ goto fail; case LWS_SSL_CAPABLE_ERROR: goto fail; case LWS_SSL_CAPABLE_MORE_SERVICE: goto try_pollout; } /* just ignore incoming if waiting for close */ if (lwsi_state(wsi) == LRS_FLUSHING_BEFORE_CLOSE) { lwsl_notice("%s: just ignoring\n", __func__); goto try_pollout; } if (lwsi_state(wsi) == LRS_ISSUING_FILE) { // lwsl_notice("stashing: wsi %p: bd %d\n", wsi, buffered); if (lws_buflist_aware_finished_consuming(wsi, &ebuf, 0, buffered, __func__)) return LWS_HPI_RET_PLEASE_CLOSE_ME; goto try_pollout; } /* * Otherwise give it to whoever wants it according to the * connection state */ #if defined(LWS_ROLE_H2) if (lwsi_role_h2(wsi) && lwsi_state(wsi) != LRS_BODY) n = lws_read_h2(wsi, ebuf.token, (unsigned int)ebuf.len); else #endif n = lws_read_h1(wsi, ebuf.token, (unsigned int)ebuf.len); if (n < 0) /* we closed wsi */ return LWS_HPI_RET_WSI_ALREADY_DIED; // lwsl_notice("%s: consumed %d\n", __func__, n); if (lws_buflist_aware_finished_consuming(wsi, &ebuf, n, buffered, __func__)) return LWS_HPI_RET_PLEASE_CLOSE_ME; /* * during the parsing our role changed to something non-http, * so the ah has no further meaning */ if (wsi->http.ah && !lwsi_role_h1(wsi) && !lwsi_role_h2(wsi) && !lwsi_role_cgi(wsi)) lws_header_table_detach(wsi, 0); /* * He may have used up the writability above, if we will defer * POLLOUT processing in favour of POLLIN, note it */ if (pollfd->revents & LWS_POLLOUT) wsi->favoured_pollin = 1; return LWS_HPI_RET_HANDLED; } /* * He may have used up the writability above, if we will defer POLLOUT * processing in favour of POLLIN, note it */ if (pollfd->revents & LWS_POLLOUT) wsi->favoured_pollin = 1; try_pollout: /* this handles POLLOUT for http serving fragments */ if (!(pollfd->revents & LWS_POLLOUT)) return LWS_HPI_RET_HANDLED; /* one shot */ if (lws_change_pollfd(wsi, LWS_POLLOUT, 0)) { lwsl_notice("%s a\n", __func__); goto fail; } /* clear back-to-back write detection */ wsi->could_have_pending = 0; if (lwsi_state(wsi) == LRS_DEFERRING_ACTION) { lwsl_debug("%s: LRS_DEFERRING_ACTION now writable\n", __func__); lwsi_set_state(wsi, LRS_ESTABLISHED); if (lws_change_pollfd(wsi, LWS_POLLOUT, 0)) { lwsl_info("failed at set pollfd\n"); goto fail; } } if (!wsi->hdr_parsing_completed) return LWS_HPI_RET_HANDLED; if (lwsi_state(wsi) != LRS_ISSUING_FILE) { if (lws_has_buffered_out(wsi)) { //lwsl_notice("%s: completing partial\n", __func__); if (lws_issue_raw(wsi, NULL, 0) < 0) { lwsl_info("%s signalling to close\n", __func__); goto fail; } return LWS_HPI_RET_HANDLED; } n = user_callback_handle_rxflow(wsi->a.protocol->callback, wsi, LWS_CALLBACK_HTTP_WRITEABLE, wsi->user_space, NULL, 0); if (n < 0) { lwsl_info("writeable_fail\n"); goto fail; } return LWS_HPI_RET_HANDLED; } #if defined(LWS_WITH_FILE_OPS) /* >0 == completion, <0 == error * * We'll get a LWS_CALLBACK_HTTP_FILE_COMPLETION callback when * it's done. That's the case even if we just completed the * send, so wait for that. */ n = lws_serve_http_file_fragment(wsi); if (n < 0) goto fail; #endif return LWS_HPI_RET_HANDLED; fail: lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "server socket svc fail"); return LWS_HPI_RET_WSI_ALREADY_DIED; } #endif static int rops_handle_POLLIN_h1(struct lws_context_per_thread *pt, struct lws *wsi, struct lws_pollfd *pollfd) { if (lwsi_state(wsi) == LRS_IDLING) { uint8_t buf[1]; int rlen; /* * h1 staggered spins here in IDLING if we don't close it. * It shows POLLIN but the tls connection returns ERROR if * you try to read it. */ // lwsl_notice("%s: %p: wsistate 0x%x %s, revents 0x%x\n", // __func__, wsi, wsi->wsistate, wsi->role_ops->name, // pollfd->revents); rlen = lws_ssl_capable_read(wsi, buf, sizeof(buf)); if (rlen == LWS_SSL_CAPABLE_ERROR) return LWS_HPI_RET_PLEASE_CLOSE_ME; } #ifdef LWS_WITH_CGI if (wsi->http.cgi && (pollfd->revents & LWS_POLLOUT)) { if (lws_handle_POLLOUT_event(wsi, pollfd)) return LWS_HPI_RET_PLEASE_CLOSE_ME; return LWS_HPI_RET_HANDLED; } #endif /* Priority 2: pre- compression transform */ #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) if (wsi->http.comp_ctx.buflist_comp || wsi->http.comp_ctx.may_have_more) { enum lws_write_protocol wp = LWS_WRITE_HTTP; lwsl_info("%s: completing comp partial (buflist_comp %p, may %d)\n", __func__, wsi->http.comp_ctx.buflist_comp, wsi->http.comp_ctx.may_have_more ); if (lws_rops_fidx(wsi->role_ops, LWS_ROPS_write_role_protocol) && lws_rops_func_fidx(wsi->role_ops, LWS_ROPS_write_role_protocol). write_role_protocol(wsi, NULL, 0, &wp) < 0) { lwsl_info("%s signalling to close\n", __func__); return LWS_HPI_RET_PLEASE_CLOSE_ME; } lws_callback_on_writable(wsi); if (!wsi->http.comp_ctx.buflist_comp && !wsi->http.comp_ctx.may_have_more && wsi->http.deferred_transaction_completed) { wsi->http.deferred_transaction_completed = 0; if (lws_http_transaction_completed(wsi)) return LWS_HPI_RET_PLEASE_CLOSE_ME; } return LWS_HPI_RET_HANDLED; } #endif if (lws_is_flowcontrolled(wsi)) /* We cannot deal with any kind of new RX because we are * RX-flowcontrolled. */ return LWS_HPI_RET_HANDLED; #if defined(LWS_WITH_SERVER) if (!lwsi_role_client(wsi)) { int n; lwsl_debug("%s: %s: wsistate 0x%x\n", __func__, lws_wsi_tag(wsi), (unsigned int)wsi->wsistate); if (pollfd->revents & LWS_POLLHUP && !lws_buflist_total_len(&wsi->buflist)) return LWS_HPI_RET_PLEASE_CLOSE_ME; n = lws_h1_server_socket_service(wsi, pollfd); if (n != LWS_HPI_RET_HANDLED) return n; if (lwsi_state(wsi) != LRS_SSL_INIT) if (lws_server_socket_service_ssl(wsi, LWS_SOCK_INVALID, !!(pollfd->revents & LWS_POLLIN))) return LWS_HPI_RET_PLEASE_CLOSE_ME; return LWS_HPI_RET_HANDLED; } #endif #if defined(LWS_WITH_CLIENT) if ((pollfd->revents & LWS_POLLIN) && wsi->hdr_parsing_completed && !wsi->told_user_closed) { /* * In SSL mode we get POLLIN notification about * encrypted data in. * * But that is not necessarily related to decrypted * data out becoming available; in may need to perform * other in or out before that happens. * * simply mark ourselves as having readable data * and turn off our POLLIN */ wsi->client_rx_avail = 1; if (lws_change_pollfd(wsi, LWS_POLLIN, 0)) return LWS_HPI_RET_PLEASE_CLOSE_ME; //lwsl_notice("calling back %s\n", wsi->a.protocol->name); /* let user code know, he'll usually ask for writeable * callback and drain / re-enable it there */ if (user_callback_handle_rxflow(wsi->a.protocol->callback, wsi, LWS_CALLBACK_RECEIVE_CLIENT_HTTP, wsi->user_space, NULL, 0)) { lwsl_info("RECEIVE_CLIENT_HTTP closed it\n"); return LWS_HPI_RET_PLEASE_CLOSE_ME; } return LWS_HPI_RET_HANDLED; } #endif // if (lwsi_state(wsi) == LRS_ESTABLISHED) // return LWS_HPI_RET_HANDLED; #if defined(LWS_WITH_CLIENT) if ((pollfd->revents & LWS_POLLOUT) && lws_handle_POLLOUT_event(wsi, pollfd)) { lwsl_debug("POLLOUT event closed it\n"); return LWS_HPI_RET_PLEASE_CLOSE_ME; } if (lws_http_client_socket_service(wsi, pollfd)) return LWS_HPI_RET_WSI_ALREADY_DIED; #endif if (lwsi_state(wsi) == LRS_WAITING_CONNECT && (pollfd->revents & LWS_POLLHUP)) return LWS_HPI_RET_PLEASE_CLOSE_ME; return LWS_HPI_RET_HANDLED; } static int rops_handle_POLLOUT_h1(struct lws *wsi) { if (lwsi_state(wsi) == LRS_ISSUE_HTTP_BODY || lwsi_state(wsi) == LRS_WAITING_SERVER_REPLY) { #if defined(LWS_WITH_HTTP_PROXY) if (wsi->http.proxy_clientside) { unsigned char *buf, prebuf[LWS_PRE + 1024]; size_t len = lws_buflist_next_segment_len( &wsi->parent->http.buflist_post_body, &buf); int n; if (len > sizeof(prebuf) - LWS_PRE) len = sizeof(prebuf) - LWS_PRE; if (len) { memcpy(prebuf + LWS_PRE, buf, len); lwsl_debug("%s: %s: proxying body %d %d %d %d %d\n", __func__, lws_wsi_tag(wsi), (int)len, (int)wsi->http.tx_content_length, (int)wsi->http.tx_content_remain, (int)wsi->http.rx_content_length, (int)wsi->http.rx_content_remain ); n = lws_write(wsi, prebuf + LWS_PRE, len, LWS_WRITE_HTTP); if (n < 0) { lwsl_err("%s: PROXY_BODY: write %d failed\n", __func__, (int)len); return LWS_HP_RET_BAIL_DIE; } lws_buflist_use_segment(&wsi->parent->http.buflist_post_body, len); } if (wsi->parent->http.buflist_post_body) { lws_callback_on_writable(wsi); return LWS_HP_RET_DROP_POLLOUT; } lwsl_wsi_err(wsi, "nothing to send"); #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) /* prepare ourselves to do the parsing */ wsi->http.ah->parser_state = WSI_TOKEN_NAME_PART; wsi->http.ah->lextable_pos = 0; #if defined(LWS_WITH_CUSTOM_HEADERS) wsi->http.ah->unk_pos = 0; #endif #endif lwsi_set_state(wsi, LRS_WAITING_SERVER_REPLY); lws_set_timeout(wsi, PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE, (int)wsi->a.context->timeout_secs); return LWS_HP_RET_DROP_POLLOUT; } #endif return LWS_HP_RET_USER_SERVICE; } if (lwsi_role_client(wsi)) return LWS_HP_RET_USER_SERVICE; return LWS_HP_RET_BAIL_OK; } static int rops_write_role_protocol_h1(struct lws *wsi, unsigned char *buf, size_t len, enum lws_write_protocol *wp) { size_t olen = len; int n; #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) if (wsi->http.lcs && (((*wp) & 0x1f) == LWS_WRITE_HTTP_FINAL || ((*wp) & 0x1f) == LWS_WRITE_HTTP)) { unsigned char mtubuf[1500 + LWS_PRE + LWS_HTTP_CHUNK_HDR_MAX_SIZE + LWS_HTTP_CHUNK_TRL_MAX_SIZE], *out = mtubuf + LWS_PRE + LWS_HTTP_CHUNK_HDR_MAX_SIZE; size_t o = sizeof(mtubuf) - LWS_PRE - LWS_HTTP_CHUNK_HDR_MAX_SIZE - LWS_HTTP_CHUNK_TRL_MAX_SIZE; n = lws_http_compression_transform(wsi, buf, len, wp, &out, &o); if (n) return n; lwsl_info("%s: %s: transformed %d bytes to %d " "(wp 0x%x, more %d)\n", __func__, lws_wsi_tag(wsi), (int)len, (int)o, (int)*wp, wsi->http.comp_ctx.may_have_more); if (!o) return (int)olen; if (wsi->http.comp_ctx.chunking) { char c[LWS_HTTP_CHUNK_HDR_MAX_SIZE + 2]; /* * this only needs dealing with on http/1.1 to allow * pipelining */ n = lws_snprintf(c, sizeof(c), "%X\x0d\x0a", (int)o); lwsl_info("%s: chunk (%d) %s", __func__, (int)o, c); out -= n; o += (unsigned int)n; memcpy(out, c, (unsigned int)n); out[o++] = '\x0d'; out[o++] = '\x0a'; if (((*wp) & 0x1f) == LWS_WRITE_HTTP_FINAL) { lwsl_info("%s: final chunk\n", __func__); out[o++] = '0'; out[o++] = '\x0d'; out[o++] = '\x0a'; out[o++] = '\x0d'; out[o++] = '\x0a'; } } buf = out; len = o; } #endif n = lws_issue_raw(wsi, (unsigned char *)buf, len); if (n < 0) return n; /* hide there may have been compression */ return (int)olen; } static int rops_alpn_negotiated_h1(struct lws *wsi, const char *alpn) { lwsl_debug("%s: client %d\n", __func__, lwsi_role_client(wsi)); #if defined(LWS_WITH_CLIENT) if (lwsi_role_client(wsi)) { /* * If alpn asserts it is http/1.1, server support for KA is * mandatory. * * Knowing this lets us proceed with sending pipelined headers * before we received the first response headers. */ wsi->keepalive_active = 1; } #endif return 0; } static int rops_destroy_role_h1(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; struct allocated_headers *ah; /* we may not have an ah, but may be on the waiting list... */ lwsl_info("%s: ah det due to close\n", __func__); __lws_header_table_detach(wsi, 0); ah = pt->http.ah_list; while (ah) { if (ah->in_use && ah->wsi == wsi) { lwsl_err("%s: ah leak: wsi %s\n", __func__, lws_wsi_tag(wsi)); ah->in_use = 0; ah->wsi = NULL; pt->http.ah_count_in_use--; break; } ah = ah->next; } #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) lws_http_compression_destroy(wsi); #endif #ifdef LWS_ROLE_WS lws_free_set_NULL(wsi->ws); #endif return 0; } #if defined(LWS_WITH_SERVER) static int rops_adoption_bind_h1(struct lws *wsi, int type, const char *vh_prot_name) { if (!(type & LWS_ADOPT_HTTP)) return 0; /* no match */ if (type & _LWS_ADOPT_FINISH && !lwsi_role_http(wsi)) return 0; if (type & _LWS_ADOPT_FINISH) { if (!lws_header_table_attach(wsi, 0)) lwsl_debug("Attached ah immediately\n"); else lwsl_info("%s: waiting for ah\n", __func__); return 1; } #if defined(LWS_WITH_SERVER) && defined(LWS_WITH_SECURE_STREAMS) if (wsi->a.vhost->ss_handle && wsi->a.vhost->ss_handle->policy->protocol == LWSSSP_RAW) { lws_role_transition(wsi, LWSIFR_SERVER, (type & LWS_ADOPT_ALLOW_SSL) ? LRS_SSL_INIT : LRS_ESTABLISHED, &role_ops_raw_skt); return 1; } #endif /* If Non-TLS and HTTP2 prior knowledge is enabled, skip to clear text HTTP2 */ #if defined(LWS_WITH_HTTP2) if ((!(type & LWS_ADOPT_ALLOW_SSL)) && (wsi->a.vhost->options & LWS_SERVER_OPTION_H2_PRIOR_KNOWLEDGE)) { lwsl_info("http/2 prior knowledge\n"); lws_metrics_tag_wsi_add(wsi, "upg", "h2_prior"); lws_role_call_alpn_negotiated(wsi, "h2"); } else #endif lws_role_transition(wsi, LWSIFR_SERVER, (type & LWS_ADOPT_ALLOW_SSL) ? LRS_SSL_INIT : LRS_HEADERS, &role_ops_h1); /* * Otherwise, we have to bind to h1 as a default even when we're actually going to * replace it as an h2 bind later. So don't take this seriously if the * default is disabled (ws upgrade caees properly about it) */ if (!vh_prot_name && wsi->a.vhost->default_protocol_index < wsi->a.vhost->count_protocols) wsi->a.protocol = &wsi->a.vhost->protocols[ wsi->a.vhost->default_protocol_index]; else wsi->a.protocol = &wsi->a.vhost->protocols[0]; /* the transport is accepted... give him time to negotiate */ lws_set_timeout(wsi, PENDING_TIMEOUT_ESTABLISH_WITH_SERVER, (int)wsi->a.context->timeout_secs); return 1; /* bound */ } #endif #if defined(LWS_WITH_CLIENT) static const char * const http_methods[] = { "GET", "POST", "OPTIONS", "HEAD", "PUT", "PATCH", "DELETE", "CONNECT" }; static int rops_client_bind_h1(struct lws *wsi, const struct lws_client_connect_info *i) { int n; if (!i) { /* we are finalizing an already-selected role */ /* * If we stay in http, assuming there wasn't already-set * external user_space, since we know our initial protocol * we can assign the user space now, otherwise do it after the * ws subprotocol negotiated */ if (!wsi->user_space && wsi->stash->cis[CIS_METHOD]) if (lws_ensure_user_space(wsi)) return 1; /* * For ws, default to http/1.1 only. If i->alpn had been set * though, defer to whatever he has set in there (eg, "h2"). * * The problem is he has to commit to h2 before he can find * out if the server has the SETTINGS for ws-over-h2 enabled; * if not then ws is not possible on that connection. So we * only try h2 if he assertively said to use h2 alpn, otherwise * ws implies alpn restriction to h1. */ if (!wsi->stash->cis[CIS_METHOD] && !wsi->stash->cis[CIS_ALPN]) wsi->stash->cis[CIS_ALPN] = "http/1.1"; /* if we went on the ah waiting list, it's ok, we can wait. * * When we do get the ah, now or later, he will end up at * lws_http_client_connect_via_info2(). */ if (lws_header_table_attach(wsi, 0) #if defined(LWS_WITH_CLIENT) < 0) /* * if we failed here, the connection is already closed * and freed. */ return -1; #else ) return 0; #endif return 0; } /* * Clients that want to be h1, h2, or ws all start out as h1 * (we don't yet know if the server supports h2 or ws), unless their * alpn is only "h2" */ // if (i->alpn && !strcmp(i->alpn, "h2")) // return 0; /* we are h1, he only wants h2 */ if (!i->method) { /* websockets */ #if defined(LWS_ROLE_WS) if (lws_create_client_ws_object(i, wsi)) goto fail_wsi; goto bind_h1; #else lwsl_err("%s: ws role not configured\n", __func__); goto fail_wsi; #endif } /* if a recognized http method, bind to it */ for (n = 0; n < (int)LWS_ARRAY_SIZE(http_methods); n++) if (!strcmp(i->method, http_methods[n])) goto bind_h1; /* other roles may bind to it */ return 0; /* no match */ bind_h1: /* assert the mode and union status (hdr) clearly */ lws_role_transition(wsi, LWSIFR_CLIENT, LRS_UNCONNECTED, &role_ops_h1); return 1; /* matched */ fail_wsi: return -1; } #endif static int rops_close_kill_connection_h1(struct lws *wsi, enum lws_close_status reason) { #if defined(LWS_WITH_HTTP_PROXY) if (!wsi->http.proxy_clientside) return 0; wsi->http.proxy_clientside = 0; if (user_callback_handle_rxflow(wsi->a.protocol->callback, wsi, LWS_CALLBACK_COMPLETED_CLIENT_HTTP, wsi->user_space, NULL, 0)) return 0; #endif return 0; } int rops_pt_init_destroy_h1(struct lws_context *context, const struct lws_context_creation_info *info, struct lws_context_per_thread *pt, int destroy) { /* * We only want to do this once... we will do it if no h2 support * otherwise let h2 ops do it. */ #if !defined(LWS_ROLE_H2) && defined(LWS_WITH_SERVER) if (!destroy) { pt->sul_ah_lifecheck.cb = lws_sul_http_ah_lifecheck; __lws_sul_insert_us(&pt->pt_sul_owner[LWSSULLI_MISS_IF_SUSPENDED], &pt->sul_ah_lifecheck, 30 * LWS_US_PER_SEC); } else lws_dll2_remove(&pt->sul_ah_lifecheck.list); #endif return 0; } static const lws_rops_t rops_table_h1[] = { /* 1 */ { .pt_init_destroy = rops_pt_init_destroy_h1 }, /* 2 */ { .handle_POLLIN = rops_handle_POLLIN_h1 }, /* 3 */ { .handle_POLLOUT = rops_handle_POLLOUT_h1 }, /* 4 */ { .write_role_protocol = rops_write_role_protocol_h1 }, /* 5 */ { .alpn_negotiated = rops_alpn_negotiated_h1 }, /* 6 */ { .close_kill_connection = rops_close_kill_connection_h1 }, /* 7 */ { .destroy_role = rops_destroy_role_h1 }, #if defined(LWS_WITH_SERVER) /* 8 */ { .adoption_bind = rops_adoption_bind_h1 }, #endif #if defined(LWS_WITH_CLIENT) /* 8 if client and no server */ /* 9 */ { .client_bind = rops_client_bind_h1 }, #endif }; const struct lws_role_ops role_ops_h1 = { /* role name */ "h1", /* alpn id */ "http/1.1", /* rops_table */ rops_table_h1, /* rops_idx */ { /* LWS_ROPS_check_upgrades */ /* LWS_ROPS_pt_init_destroy */ 0x01, /* LWS_ROPS_init_vhost */ /* LWS_ROPS_destroy_vhost */ 0x00, /* LWS_ROPS_service_flag_pending */ /* LWS_ROPS_handle_POLLIN */ 0x02, /* LWS_ROPS_handle_POLLOUT */ /* LWS_ROPS_perform_user_POLLOUT */ 0x30, /* LWS_ROPS_callback_on_writable */ /* LWS_ROPS_tx_credit */ 0x00, /* LWS_ROPS_write_role_protocol */ /* LWS_ROPS_encapsulation_parent */ 0x40, /* LWS_ROPS_alpn_negotiated */ /* LWS_ROPS_close_via_role_protocol */ 0x50, /* LWS_ROPS_close_role */ /* LWS_ROPS_close_kill_connection */ 0x06, /* LWS_ROPS_destroy_role */ #if defined(LWS_WITH_SERVER) /* LWS_ROPS_adoption_bind */ 0x78, #else /* LWS_ROPS_adoption_bind */ 0x70, #endif /* LWS_ROPS_client_bind */ #if defined(LWS_WITH_CLIENT) #if defined(LWS_WITH_SERVER) /* LWS_ROPS_issue_keepalive */ 0x90, #else /* LWS_ROPS_issue_keepalive */ 0x80, #endif #else /* LWS_ROPS_issue_keepalive */ 0x00, #endif }, /* adoption_cb clnt, srv */ { LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED, LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED }, /* rx_cb clnt, srv */ { LWS_CALLBACK_RECEIVE_CLIENT_HTTP, 0 /* may be POST, etc */ }, /* writeable cb clnt, srv */ { LWS_CALLBACK_CLIENT_HTTP_WRITEABLE, LWS_CALLBACK_HTTP_WRITEABLE }, /* close cb clnt, srv */ { LWS_CALLBACK_CLOSED_CLIENT_HTTP, LWS_CALLBACK_CLOSED_HTTP }, /* protocol_bind cb c, srv */ { LWS_CALLBACK_CLIENT_HTTP_BIND_PROTOCOL, LWS_CALLBACK_HTTP_BIND_PROTOCOL }, /* protocol_unbind cb c, srv */ { LWS_CALLBACK_CLIENT_HTTP_DROP_PROTOCOL, LWS_CALLBACK_HTTP_DROP_PROTOCOL }, /* file_handle */ 0, }; libwebsockets-4.3.5/lib/roles/h1/private-lib-roles-h1.h000066400000000000000000000026761476025525100226260ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * This is included from private-lib-core.h if LWS_ROLE_H1 * * Most of the h1 business is defined in the h1 / h2 common roles/http dir */ extern const struct lws_role_ops role_ops_h1; #define lwsi_role_h1(wsi) (wsi->role_ops == &role_ops_h1) libwebsockets-4.3.5/lib/roles/h2/000077500000000000000000000000001476025525100165755ustar00rootroot00000000000000libwebsockets-4.3.5/lib/roles/h2/CMakeLists.txt000066400000000000000000000030171476025525100213360ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # # The strategy is to only export to PARENT_SCOPE # # - changes to LIB_LIST # - changes to SOURCES # - includes via include_directories # # and keep everything else private include_directories(.) list(APPEND SOURCES roles/h2/http2.c roles/h2/hpack.c roles/h2/ops-h2.c) # # Keep explicit parent scope exports at end # exports_to_parent_scope() libwebsockets-4.3.5/lib/roles/h2/hpack.c000066400000000000000000001205041476025525100200310ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" /* * Official static header table for HPACK * +-------+-----------------------------+---------------+ | 1 | :authority | | | 2 | :method | GET | | 3 | :method | POST | | 4 | :path | / | | 5 | :path | /index.html | | 6 | :scheme | http | | 7 | :scheme | https | | 8 | :status | 200 | | 9 | :status | 204 | | 10 | :status | 206 | | 11 | :status | 304 | | 12 | :status | 400 | | 13 | :status | 404 | | 14 | :status | 500 | | 15 | accept-charset | | | 16 | accept-encoding | gzip, deflate | | 17 | accept-language | | | 18 | accept-ranges | | | 19 | accept | | | 20 | access-control-allow-origin | | | 21 | age | | | 22 | allow | | | 23 | authorization | | | 24 | cache-control | | | 25 | content-disposition | | | 26 | content-encoding | | | 27 | content-language | | | 28 | content-length | | | 29 | content-location | | | 30 | content-range | | | 31 | content-type | | | 32 | cookie | | | 33 | date | | | 34 | etag | | | 35 | expect | | | 36 | expires | | | 37 | from | | | 38 | host | | | 39 | if-match | | | 40 | if-modified-since | | | 41 | if-none-match | | | 42 | if-range | | | 43 | if-unmodified-since | | | 44 | last-modified | | | 45 | link | | | 46 | location | | | 47 | max-forwards | | | 48 | proxy-authenticate | | | 49 | proxy-authorization | | | 50 | range | | | 51 | referer | | | 52 | refresh | | | 53 | retry-after | | | 54 | server | | | 55 | set-cookie | | | 56 | strict-transport-security | | | 57 | transfer-encoding | | | 58 | user-agent | | | 59 | vary | | | 60 | via | | | 61 | www-authenticate | | +-------+-----------------------------+---------------+ */ static const uint8_t static_hdr_len[62] = { 0, /* starts at 1 */ 10, 7, 7, 5, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 14, 15, 15, 13, 6, 27, 3, 5, 13, 13, 19, 16, 16, 14, 16, 13, 12, 6, 4, 4, 6, 7, 4, 4, 8, 17, 13, 8, 19, 13, 4, 8, 12, 18, 19, 5, 7, 7, 11, 6, 10, 25, 17, 10, 4, 3, 16 }; static const unsigned char static_token[] = { 0, WSI_TOKEN_HTTP_COLON_AUTHORITY, WSI_TOKEN_HTTP_COLON_METHOD, WSI_TOKEN_HTTP_COLON_METHOD, WSI_TOKEN_HTTP_COLON_PATH, WSI_TOKEN_HTTP_COLON_PATH, WSI_TOKEN_HTTP_COLON_SCHEME, WSI_TOKEN_HTTP_COLON_SCHEME, WSI_TOKEN_HTTP_COLON_STATUS, WSI_TOKEN_HTTP_COLON_STATUS, WSI_TOKEN_HTTP_COLON_STATUS, WSI_TOKEN_HTTP_COLON_STATUS, WSI_TOKEN_HTTP_COLON_STATUS, WSI_TOKEN_HTTP_COLON_STATUS, WSI_TOKEN_HTTP_COLON_STATUS, WSI_TOKEN_HTTP_ACCEPT_CHARSET, WSI_TOKEN_HTTP_ACCEPT_ENCODING, WSI_TOKEN_HTTP_ACCEPT_LANGUAGE, WSI_TOKEN_HTTP_ACCEPT_RANGES, WSI_TOKEN_HTTP_ACCEPT, WSI_TOKEN_HTTP_ACCESS_CONTROL_ALLOW_ORIGIN, WSI_TOKEN_HTTP_AGE, WSI_TOKEN_HTTP_ALLOW, WSI_TOKEN_HTTP_AUTHORIZATION, WSI_TOKEN_HTTP_CACHE_CONTROL, WSI_TOKEN_HTTP_CONTENT_DISPOSITION, WSI_TOKEN_HTTP_CONTENT_ENCODING, WSI_TOKEN_HTTP_CONTENT_LANGUAGE, WSI_TOKEN_HTTP_CONTENT_LENGTH, WSI_TOKEN_HTTP_CONTENT_LOCATION, WSI_TOKEN_HTTP_CONTENT_RANGE, WSI_TOKEN_HTTP_CONTENT_TYPE, WSI_TOKEN_HTTP_COOKIE, WSI_TOKEN_HTTP_DATE, WSI_TOKEN_HTTP_ETAG, WSI_TOKEN_HTTP_EXPECT, WSI_TOKEN_HTTP_EXPIRES, WSI_TOKEN_HTTP_FROM, WSI_TOKEN_HOST, WSI_TOKEN_HTTP_IF_MATCH, WSI_TOKEN_HTTP_IF_MODIFIED_SINCE, WSI_TOKEN_HTTP_IF_NONE_MATCH, WSI_TOKEN_HTTP_IF_RANGE, WSI_TOKEN_HTTP_IF_UNMODIFIED_SINCE, WSI_TOKEN_HTTP_LAST_MODIFIED, WSI_TOKEN_HTTP_LINK, WSI_TOKEN_HTTP_LOCATION, WSI_TOKEN_HTTP_MAX_FORWARDS, WSI_TOKEN_HTTP_PROXY_AUTHENTICATE, WSI_TOKEN_HTTP_PROXY_AUTHORIZATION, WSI_TOKEN_HTTP_RANGE, WSI_TOKEN_HTTP_REFERER, WSI_TOKEN_HTTP_REFRESH, WSI_TOKEN_HTTP_RETRY_AFTER, WSI_TOKEN_HTTP_SERVER, WSI_TOKEN_HTTP_SET_COOKIE, WSI_TOKEN_HTTP_STRICT_TRANSPORT_SECURITY, WSI_TOKEN_HTTP_TRANSFER_ENCODING, WSI_TOKEN_HTTP_USER_AGENT, WSI_TOKEN_HTTP_VARY, WSI_TOKEN_HTTP_VIA, WSI_TOKEN_HTTP_WWW_AUTHENTICATE, }; /* some of the entries imply values as well as header names */ static const char * const http2_canned[] = { "", "", "GET", "POST", "/", "/index.html", "http", "https", "200", "204", "206", "304", "400", "404", "500", "", "gzip, deflate" }; /* see minihuf.c */ #include "huftable.h" static int huftable_decode(int pos, char c) { int q = pos + !!c; if (lextable_terms[q >> 3] & (1 << (q & 7))) /* terminal */ return lextable[q] | 0x8000; return pos + (lextable[q] << 1); } static int lws_frag_start(struct lws *wsi, int hdr_token_idx) { struct allocated_headers *ah = wsi->http.ah; if (!ah) { lwsl_notice("%s: no ah\n", __func__); return 1; } ah->hdr_token_idx = -1; lwsl_header("%s: token %d ah->pos = %d, ah->nfrag = %d\n", __func__, hdr_token_idx, ah->pos, ah->nfrag); if (!hdr_token_idx) { lwsl_err("%s: zero hdr_token_idx\n", __func__); return 1; } if (ah->nfrag >= LWS_ARRAY_SIZE(ah->frag_index)) { lwsl_err("%s: frag index %d too big\n", __func__, ah->nfrag); return 1; } if ((hdr_token_idx == WSI_TOKEN_HTTP_COLON_AUTHORITY || hdr_token_idx == WSI_TOKEN_HTTP_COLON_METHOD || hdr_token_idx == WSI_TOKEN_HTTP_COLON_PATH || hdr_token_idx == WSI_TOKEN_COLON_PROTOCOL || hdr_token_idx == WSI_TOKEN_HTTP_COLON_SCHEME) && ah->frag_index[hdr_token_idx]) { if (!(ah->frags[ah->frag_index[hdr_token_idx]].flags & 1)) { lws_h2_goaway(lws_get_network_wsi(wsi), H2_ERR_PROTOCOL_ERROR, "Duplicated pseudoheader"); return 1; } } if (ah->nfrag == 0) ah->nfrag = 1; ah->frags[ah->nfrag].offset = ah->pos; ah->frags[ah->nfrag].len = 0; ah->frags[ah->nfrag].nfrag = 0; ah->frags[ah->nfrag].flags = 2; /* we had reason to set it */ ah->hdr_token_idx = hdr_token_idx; /* * Okay, but we could be, eg, the second or subsequent cookie: header */ if (ah->frag_index[hdr_token_idx]) { int n; /* find the last fragment for this header... */ n = ah->frag_index[hdr_token_idx]; while (ah->frags[n].nfrag) n = ah->frags[n].nfrag; /* and point it to continue in our continuation fragment */ ah->frags[n].nfrag = ah->nfrag; } else ah->frag_index[hdr_token_idx] = ah->nfrag; return 0; } static int lws_frag_append(struct lws *wsi, unsigned char c) { struct allocated_headers *ah = wsi->http.ah; ah->data[ah->pos++] = (char)c; ah->frags[ah->nfrag].len++; return (unsigned int)ah->pos >= wsi->a.context->max_http_header_data; } static int lws_frag_end(struct lws *wsi) { lwsl_header("%s\n", __func__); if (lws_frag_append(wsi, 0)) return 1; /* don't account for the terminating NUL in the logical length */ wsi->http.ah->frags[wsi->http.ah->nfrag].len--; wsi->http.ah->nfrag++; return 0; } int lws_hdr_extant(struct lws *wsi, enum lws_token_indexes h) { struct allocated_headers *ah = wsi->http.ah; int n; if (!ah) return 0; n = ah->frag_index[h]; if (!n) return 0; return !!(ah->frags[n].flags & 2); } static void lws_dump_header(struct lws *wsi, int hdr) { char s[200]; const unsigned char *p; int len; if (hdr == LWS_HPACK_IGNORE_ENTRY) { lwsl_notice("hdr tok ignored\n"); return; } (void)p; len = lws_hdr_copy(wsi, s, sizeof(s) - 1, (enum lws_token_indexes)hdr); if (len < 0) strcpy(s, "(too big to show)"); else s[len] = '\0'; #if defined(_DEBUG) p = lws_token_to_string((enum lws_token_indexes)hdr); lwsl_header(" hdr tok %d (%s) = '%s' (len %d)\n", hdr, p ? (char *)p : (char *)"null", s, len); #endif } /* * dynamic table * * [ 0 .... num_entries - 1] * * Starts filling at 0+ * * #62 is *most recently entered* * * Number of entries is not restricted, but aggregated size of the entry * payloads is. Unfortunately the way HPACK does this is specific to an * imagined implementation, and lws implementation is much more efficient * (ignoring unknown headers and using the lws token index for the header * name part). */ /* * returns 0 if dynamic entry (arg and len are filled) * returns -1 if failure * returns nonzero token index if actually static token */ static int lws_token_from_index(struct lws *wsi, int index, const char **arg, int *len, uint32_t *hdr_len) { struct hpack_dynamic_table *dyn; if (index == LWS_HPACK_IGNORE_ENTRY) return LWS_HPACK_IGNORE_ENTRY; /* dynamic table only belongs to network wsi */ wsi = lws_get_network_wsi(wsi); if (!wsi->h2.h2n) return -1; dyn = &wsi->h2.h2n->hpack_dyn_table; if (index < 0) return -1; if (index < (int)LWS_ARRAY_SIZE(static_token)) { if (arg && index < (int)LWS_ARRAY_SIZE(http2_canned)) { *arg = http2_canned[index]; *len = (int)strlen(http2_canned[index]); } if (hdr_len) *hdr_len = static_hdr_len[index]; return static_token[index]; } if (!dyn) { lwsl_notice("no dynamic table\n"); return -1; } if (index >= (int)LWS_ARRAY_SIZE(static_token) + dyn->used_entries) { lwsl_info(" %s: adjusted index %d >= %d\n", __func__, index, (int)LWS_ARRAY_SIZE(static_token) + dyn->used_entries); lws_h2_goaway(wsi, H2_ERR_COMPRESSION_ERROR, "index out of range"); return -1; } index -= (int)LWS_ARRAY_SIZE(static_token); index = lws_safe_modulo(dyn->pos - 1 - index, dyn->num_entries); if (index < 0) index += dyn->num_entries; lwsl_header("%s: dyn index %d, tok %d\n", __func__, index, dyn->entries[index].lws_hdr_idx); if (arg && len) { *arg = dyn->entries[index].value; *len = dyn->entries[index].value_len; } if (hdr_len) *hdr_len = dyn->entries[index].hdr_len; return dyn->entries[index].lws_hdr_idx; } static int lws_h2_dynamic_table_dump(struct lws *wsi) { #if 0 struct lws *nwsi = lws_get_network_wsi(wsi); struct hpack_dynamic_table *dyn; int n, m; const char *p; if (!nwsi->h2.h2n) return 1; dyn = &nwsi->h2.h2n->hpack_dyn_table; lwsl_header("Dump dyn table for nwsi %s (%d / %d members, pos = %d, " "start index %d, virt used %d / %d)\n", lws_wsi_tag(nwsi), dyn->used_entries, dyn->num_entries, dyn->pos, (uint32_t)LWS_ARRAY_SIZE(static_token), dyn->virtual_payload_usage, dyn->virtual_payload_max); for (n = 0; n < dyn->used_entries; n++) { m = lws_safe_modulo(dyn->pos - 1 - n, dyn->num_entries); if (m < 0) m += dyn->num_entries; if (dyn->entries[m].lws_hdr_idx != LWS_HPACK_IGNORE_ENTRY) p = (const char *)lws_token_to_string( dyn->entries[m].lws_hdr_idx); else p = "(ignored)"; lwsl_header(" %3d: tok %s: (len %d) val '%s'\n", (int)(n + LWS_ARRAY_SIZE(static_token)), p, dyn->entries[m].hdr_len, dyn->entries[m].value ? dyn->entries[m].value : "null"); } #endif return 0; } static void lws_dynamic_free(struct hpack_dynamic_table *dyn, int idx) { lwsl_header("freeing %d for reuse\n", idx); dyn->virtual_payload_usage = (uint32_t)((unsigned int)dyn->virtual_payload_usage - (unsigned int)(dyn->entries[idx].value_len + dyn->entries[idx].hdr_len)); lws_free_set_NULL(dyn->entries[idx].value); dyn->entries[idx].value = NULL; dyn->entries[idx].value_len = 0; dyn->entries[idx].hdr_len = 0; dyn->entries[idx].lws_hdr_idx = LWS_HPACK_IGNORE_ENTRY; dyn->used_entries--; } /* * There are two address spaces, 1) internal ringbuffer and 2) HPACK indexes. * * Internal ringbuffer: * * The internal ringbuffer wraps as we keep filling it, dyn->pos points to * the next index to be written. * * HPACK indexes: * * The last-written entry becomes entry 0, the previously-last-written entry * becomes entry 1 etc. */ static int lws_dynamic_token_insert(struct lws *wsi, int hdr_len, int lws_hdr_index, char *arg, size_t len) { struct hpack_dynamic_table *dyn; int new_index; /* dynamic table only belongs to network wsi */ wsi = lws_get_network_wsi(wsi); if (!wsi->h2.h2n) return 1; dyn = &wsi->h2.h2n->hpack_dyn_table; if (!dyn->entries) { lwsl_err("%s: unsized dyn table\n", __func__); return 1; } lws_h2_dynamic_table_dump(wsi); new_index = lws_safe_modulo(dyn->pos, dyn->num_entries); if (dyn->num_entries && dyn->used_entries == dyn->num_entries) { if (dyn->virtual_payload_usage < dyn->virtual_payload_max) lwsl_err("Dropping header content before limit!\n"); /* we have to drop the oldest to make space */ lws_dynamic_free(dyn, new_index); } /* * evict guys to make room, allowing for some overage. We have to * take care about getting a single huge header, and evicting * everything */ while (dyn->virtual_payload_usage && dyn->used_entries && dyn->virtual_payload_usage + (unsigned int)hdr_len + len > dyn->virtual_payload_max + 1024) { int n = lws_safe_modulo(dyn->pos - dyn->used_entries, dyn->num_entries); if (n < 0) n += dyn->num_entries; lws_dynamic_free(dyn, n); } if (dyn->used_entries < dyn->num_entries) dyn->used_entries++; dyn->entries[new_index].value_len = 0; if (lws_hdr_index != LWS_HPACK_IGNORE_ENTRY) { if (dyn->entries[new_index].value) lws_free_set_NULL(dyn->entries[new_index].value); dyn->entries[new_index].value = lws_malloc(len + 1, "hpack dyn"); if (!dyn->entries[new_index].value) return 1; memcpy(dyn->entries[new_index].value, arg, len); dyn->entries[new_index].value[len] = '\0'; dyn->entries[new_index].value_len = (uint16_t)len; } else dyn->entries[new_index].value = NULL; dyn->entries[new_index].lws_hdr_idx = (uint16_t)lws_hdr_index; dyn->entries[new_index].hdr_len = (uint16_t)hdr_len; dyn->virtual_payload_usage = (uint32_t)(dyn->virtual_payload_usage + (unsigned int)hdr_len + len); lwsl_info("%s: index %ld: lws_hdr_index 0x%x, hdr len %d, '%s' len %d\n", __func__, (long)LWS_ARRAY_SIZE(static_token), lws_hdr_index, hdr_len, dyn->entries[new_index].value ? dyn->entries[new_index].value : "null", (int)len); dyn->pos = (uint16_t)lws_safe_modulo(dyn->pos + 1, dyn->num_entries); lws_h2_dynamic_table_dump(wsi); return 0; } int lws_hpack_dynamic_size(struct lws *wsi, int size) { struct hpack_dynamic_table *dyn; struct hpack_dt_entry *dte; struct lws *nwsi; int min, n = 0, m; /* * "size" here is coming from the http/2 SETTING * SETTINGS_HEADER_TABLE_SIZE. This is a (virtual, in our case) * linear buffer containing dynamic header names and values... when it * is full, old entries are evicted. * * We encode the header as an lws_hdr_idx, which is all the rest of * lws cares about; if there is no matching header we store an empty * entry in the dyn table as a placeholder. * * So to make the two systems work together we keep an accounting of * what we are using to decide when to evict... we must only evict * things when the remote peer's accounting also makes him feel he * should evict something. */ nwsi = lws_get_network_wsi(wsi); if (!nwsi->h2.h2n) goto bail; dyn = &nwsi->h2.h2n->hpack_dyn_table; lwsl_info("%s: from %d to %d, lim %u\n", __func__, (int)dyn->num_entries, size, (unsigned int)nwsi->a.vhost->h2.set.s[H2SET_HEADER_TABLE_SIZE]); if (!size) { size = dyn->num_entries * 8; lws_hpack_destroy_dynamic_header(wsi); } if (size > (int)nwsi->a.vhost->h2.set.s[H2SET_HEADER_TABLE_SIZE]) { lwsl_info("rejecting hpack dyn size %u vs %u\n", size, (unsigned int)nwsi->a.vhost->h2.set.s[H2SET_HEADER_TABLE_SIZE]); // this seems necessary to work with some browsers if (nwsi->a.vhost->h2.set.s[H2SET_HEADER_TABLE_SIZE] == 65536 && size == 65537) { /* h2spec */ lws_h2_goaway(nwsi, H2_ERR_COMPRESSION_ERROR, "Asked for header table bigger than we told"); goto bail; } size = (int)nwsi->a.vhost->h2.set.s[H2SET_HEADER_TABLE_SIZE]; } dyn->virtual_payload_max = (uint32_t)size; size = size / 8; min = size; if (min > dyn->used_entries) min = dyn->used_entries; if (size == dyn->num_entries) return 0; if (dyn->num_entries < min) min = dyn->num_entries; // lwsl_notice("dte requested size %d\n", size); dte = lws_zalloc(sizeof(*dte) * (unsigned int)(size + 1), "dynamic table entries"); if (!dte) goto bail; while (dyn->virtual_payload_usage && dyn->used_entries && dyn->virtual_payload_usage > dyn->virtual_payload_max) { n = lws_safe_modulo(dyn->pos - dyn->used_entries, dyn->num_entries); if (n < 0) n += dyn->num_entries; lws_dynamic_free(dyn, n); } if (min > dyn->used_entries) min = dyn->used_entries; if (dyn->entries) { for (n = 0; n < min; n++) { m = (dyn->pos - dyn->used_entries + n) % dyn->num_entries; if (m < 0) m += dyn->num_entries; dte[n] = dyn->entries[m]; } lws_free(dyn->entries); } dyn->entries = dte; dyn->num_entries = (uint16_t)size; dyn->used_entries = (uint16_t)min; if (size) dyn->pos = (uint16_t)lws_safe_modulo(min, size); else dyn->pos = 0; lws_h2_dynamic_table_dump(wsi); return 0; bail: lwsl_info("%s: failed to resize to %d\n", __func__, size); return 1; } void lws_hpack_destroy_dynamic_header(struct lws *wsi) { struct hpack_dynamic_table *dyn; int n; if (!wsi->h2.h2n) return; dyn = &wsi->h2.h2n->hpack_dyn_table; if (!dyn->entries) return; for (n = 0; n < dyn->num_entries; n++) if (dyn->entries[n].value) lws_free_set_NULL(dyn->entries[n].value); lws_free_set_NULL(dyn->entries); } static int lws_hpack_use_idx_hdr(struct lws *wsi, int idx, int known_token) { const char *arg = NULL; int len = 0; const char *p = NULL; int tok = lws_token_from_index(wsi, idx, &arg, &len, NULL); if (tok == LWS_HPACK_IGNORE_ENTRY) { lwsl_header("%s: lws_token says ignore, returning\n", __func__); return 0; } if (tok == -1) { lwsl_info("%s: idx %d mapped to tok %d\n", __func__, idx, tok); return 1; } if (arg) { /* dynamic result */ if (known_token > 0) tok = known_token; lwsl_header("%s: dyn: idx %d '%s' tok %d\n", __func__, idx, arg, tok); } else lwsl_header("writing indexed hdr %d (tok %d '%s')\n", idx, tok, lws_token_to_string((enum lws_token_indexes)tok)); if (tok == LWS_HPACK_IGNORE_ENTRY) return 0; if (arg) p = arg; if (idx < (int)LWS_ARRAY_SIZE(http2_canned)) p = http2_canned[idx]; if (lws_frag_start(wsi, tok)) return 1; if (p) while (*p && len--) if (lws_frag_append(wsi, (unsigned char)*p++)) return 1; if (lws_frag_end(wsi)) return 1; lws_dump_header(wsi, tok); return 0; } #if !defined(LWS_HTTP_HEADERS_ALL) && !defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) && !defined(LWS_ROLE_WS) && !defined(LWS_ROLE_H2) static uint8_t lws_header_implies_psuedoheader_map[] = { 0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, }; #endif #if !defined(LWS_HTTP_HEADERS_ALL) && defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) && !defined(LWS_ROLE_WS) && !defined(LWS_ROLE_H2) static uint8_t lws_header_implies_psuedoheader_map[] = { 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x0e,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, }; #endif #if !defined(LWS_HTTP_HEADERS_ALL) && !defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) && defined(LWS_ROLE_WS) && !defined(LWS_ROLE_H2) static uint8_t lws_header_implies_psuedoheader_map[] = { 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, }; #endif #if !defined(LWS_HTTP_HEADERS_ALL) && defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) && defined(LWS_ROLE_WS) && !defined(LWS_ROLE_H2) static uint8_t lws_header_implies_psuedoheader_map[] = { 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x10,0x00,0x00,0x00,0x00,0x00,0x00, }; #endif #if !defined(LWS_HTTP_HEADERS_ALL) && !defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) && !defined(LWS_ROLE_WS) && defined(LWS_ROLE_H2) static uint8_t lws_header_implies_psuedoheader_map[] = { 0x03,0x00,0x80,0x0f,0x00,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00, }; #endif #if !defined(LWS_HTTP_HEADERS_ALL) && defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) && !defined(LWS_ROLE_WS) && defined(LWS_ROLE_H2) static uint8_t lws_header_implies_psuedoheader_map[] = { 0x07,0x00,0x00,0x3e,0x00,0x00,0x00,0x80,0x03,0x09,0x00,0x00,0x00,0x00,0x00,0x00, }; #endif #if !defined(LWS_HTTP_HEADERS_ALL) && !defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) && defined(LWS_ROLE_WS) && defined(LWS_ROLE_H2) static uint8_t lws_header_implies_psuedoheader_map[] = { 0x03,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x00,0x00,0x00, }; #endif #if defined(LWS_HTTP_HEADERS_ALL) || ( defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) && defined(LWS_ROLE_WS) && defined(LWS_ROLE_H2)) static uint8_t lws_header_implies_psuedoheader_map[] = { 0x07,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x00,0x0e,0x24,0x00,0x00,0x00,0x00,0x00, }; #endif static int lws_hpack_handle_pseudo_rules(struct lws *nwsi, struct lws *wsi, int m) { if (m == LWS_HPACK_IGNORE_ENTRY || m == -1) return 0; if (wsi->seen_nonpseudoheader && (lws_header_implies_psuedoheader_map[m >> 3] & (1 << (m & 7)))) { lwsl_info("lws tok %d seems to be a pseudoheader\n", m); /* * it's not legal to see a * pseudoheader after normal * headers */ lws_h2_goaway(nwsi, H2_ERR_PROTOCOL_ERROR, "Pseudoheader after normal hdrs"); return 1; } if (!(lws_header_implies_psuedoheader_map[m >> 3] & (1 << (m & 7)))) wsi->seen_nonpseudoheader = 1; return 0; } int lws_hpack_interpret(struct lws *wsi, unsigned char c) { struct lws *nwsi = lws_get_network_wsi(wsi); struct lws_h2_netconn *h2n = nwsi->h2.h2n; struct allocated_headers *ah = wsi->http.ah; unsigned int prev; unsigned char c1; int n, m, plen; if (!h2n) return -1; /* * HPKT_INDEXED_HDR_7 1xxxxxxx: just "header field" * HPKT_INDEXED_HDR_6_VALUE_INCR 01xxxxxx: NEW indexed hdr + val * HPKT_LITERAL_HDR_VALUE_INCR 01000000: NEW literal hdr + val * HPKT_INDEXED_HDR_4_VALUE 0000xxxx: indexed hdr + val * HPKT_INDEXED_HDR_4_VALUE_NEVER 0001xxxx: NEVER NEW indexed hdr + val * HPKT_LITERAL_HDR_VALUE 00000000: literal hdr + val * HPKT_LITERAL_HDR_VALUE_NEVER 00010000: NEVER NEW literal hdr + val */ switch (h2n->hpack) { case HPKS_TYPE: h2n->is_first_header_char = 1; h2n->huff_pad = 0; h2n->zero_huff_padding = 0; h2n->last_action_dyntable_resize = 0; h2n->ext_count = 0; h2n->hpack_hdr_len = 0; h2n->unknown_header = 0; ah->parser_state = 255; if (c & 0x80) { /* 1.... indexed header field only */ /* just a possibly-extended integer */ h2n->hpack_type = HPKT_INDEXED_HDR_7; lwsl_header("HPKT_INDEXED_HDR_7 hdr %d\n", c & 0x7f); lws_h2_dynamic_table_dump(wsi); h2n->hdr_idx = c & 0x7f; if ((c & 0x7f) == 0x7f) { h2n->hpack_len = 0; h2n->hpack_m = 0x7f; h2n->hpack = HPKS_IDX_EXT; break; } if (!h2n->hdr_idx) { lws_h2_goaway(nwsi, H2_ERR_COMPRESSION_ERROR, "hdr index 0 seen"); return 1; } m = lws_token_from_index(wsi, (int)h2n->hdr_idx, NULL, NULL, NULL); if (lws_hpack_handle_pseudo_rules(nwsi, wsi, m)) return 1; lwsl_header("HPKT_INDEXED_HDR_7: hdr %d\n", c & 0x7f); if (lws_hpack_use_idx_hdr(wsi, c & 0x7f, -1)) { lwsl_header("%s: idx hdr wr fail\n", __func__); return 1; } /* stay at same state */ break; } if (c & 0x40) { /* 01.... indexed or literal header incr idx */ /* * [possibly-ext hdr idx (6) | new literal hdr name] * H + possibly-ext value length * literal value */ h2n->hdr_idx = 0; if (c == 0x40) { /* literal header */ lwsl_header(" HPKT_LITERAL_HDR_VALUE_INCR\n"); h2n->hpack_type = HPKT_LITERAL_HDR_VALUE_INCR; h2n->value = 0; h2n->hpack_len = 0; h2n->hpack = HPKS_HLEN; break; } /* indexed header */ h2n->hpack_type = HPKT_INDEXED_HDR_6_VALUE_INCR; lwsl_header(" HPKT_INDEXED_HDR_6_VALUE_INCR (hdr %d)\n", c & 0x3f); h2n->hdr_idx = c & 0x3f; if ((c & 0x3f) == 0x3f) { h2n->hpack_m = 0x3f; h2n->hpack_len = 0; h2n->hpack = HPKS_IDX_EXT; break; } h2n->value = 1; h2n->hpack = HPKS_HLEN; if (!h2n->hdr_idx) { lws_h2_goaway(nwsi, H2_ERR_COMPRESSION_ERROR, "hdr index 0 seen"); return 1; } break; } switch(c & 0xf0) { case 0x10: /* literal header never index */ case 0: /* literal header without indexing */ /* * follows 0x40 except 4-bit hdr idx * and don't add to index */ if (c == 0) { /* literal name */ h2n->hpack_type = HPKT_LITERAL_HDR_VALUE; lwsl_header(" HPKT_LITERAL_HDR_VALUE\n"); h2n->hpack = HPKS_HLEN; h2n->value = 0; break; } if (c == 0x10) { /* literal name NEVER */ h2n->hpack_type = HPKT_LITERAL_HDR_VALUE_NEVER; lwsl_header(" HPKT_LITERAL_HDR_VALUE_NEVER\n"); h2n->hpack = HPKS_HLEN; h2n->value = 0; break; } lwsl_header("indexed\n"); /* indexed name */ if (c & 0x10) { h2n->hpack_type = HPKT_INDEXED_HDR_4_VALUE_NEVER; lwsl_header("HPKT_LITERAL_HDR_4_VALUE_NEVER\n"); } else { h2n->hpack_type = HPKT_INDEXED_HDR_4_VALUE; lwsl_header(" HPKT_INDEXED_HDR_4_VALUE\n"); } h2n->hdr_idx = 0; if ((c & 0xf) == 0xf) { h2n->hpack_len = c & 0xf; h2n->hpack_m = 0xf; h2n->hpack_len = 0; h2n->hpack = HPKS_IDX_EXT; break; } h2n->hdr_idx = c & 0xf; h2n->value = 1; h2n->hpack = HPKS_HLEN; break; case 0x20: case 0x30: /* header table size update */ /* possibly-extended size value (5) */ lwsl_header("HPKT_SIZE_5 %x\n", c &0x1f); h2n->hpack_type = HPKT_SIZE_5; h2n->hpack_len = c & 0x1f; if (h2n->hpack_len == 0x1f) { h2n->hpack_m = 0x1f; h2n->hpack_len = 0; h2n->hpack = HPKS_IDX_EXT; break; } h2n->last_action_dyntable_resize = 1; if (lws_hpack_dynamic_size(wsi, (int)h2n->hpack_len)) return 1; break; } break; case HPKS_IDX_EXT: h2n->hpack_len = (uint32_t)((unsigned int)h2n->hpack_len | (unsigned int)((c & 0x7f) << h2n->ext_count)); h2n->ext_count = (uint8_t)(h2n->ext_count + 7); if (c & 0x80) /* extended int not complete yet */ break; /* extended integer done */ h2n->hpack_len += h2n->hpack_m; lwsl_header("HPKS_IDX_EXT: hpack_len %u\n", (unsigned int)h2n->hpack_len); switch (h2n->hpack_type) { case HPKT_INDEXED_HDR_7: if (lws_hpack_use_idx_hdr(wsi, (int)h2n->hpack_len, (int)h2n->hdr_idx)) { lwsl_notice("%s: hd7 use fail\n", __func__); return 1; } h2n->hpack = HPKS_TYPE; break; case HPKT_SIZE_5: h2n->last_action_dyntable_resize = 1; if (lws_hpack_dynamic_size(wsi, (int)h2n->hpack_len)) return 1; h2n->hpack = HPKS_TYPE; break; default: h2n->hdr_idx = h2n->hpack_len; if (!h2n->hdr_idx) { lws_h2_goaway(nwsi, H2_ERR_COMPRESSION_ERROR, "extended header index was 0"); return 1; } h2n->value = 1; h2n->hpack = HPKS_HLEN; break; } break; case HPKS_HLEN: /* [ H | 7+ ] */ h2n->huff = !!(c & 0x80); h2n->hpack_pos = 0; h2n->hpack_len = c & 0x7f; if (h2n->hpack_len == 0x7f) { h2n->hpack_m = 0x7f; h2n->hpack_len = 0; h2n->ext_count = 0; h2n->hpack = HPKS_HLEN_EXT; break; } if (h2n->value && !h2n->hpack_len) { lwsl_debug("%s: zero-length header data\n", __func__); h2n->hpack = HPKS_TYPE; goto fin; } pre_data: h2n->hpack = HPKS_DATA; if (!h2n->value || !h2n->hdr_idx) { ah->parser_state = WSI_TOKEN_NAME_PART; ah->lextable_pos = 0; h2n->unknown_header = 0; break; } if (h2n->hpack_type == HPKT_LITERAL_HDR_VALUE || h2n->hpack_type == HPKT_LITERAL_HDR_VALUE_INCR || h2n->hpack_type == HPKT_LITERAL_HDR_VALUE_NEVER) { n = ah->parser_state; if (n == 255) { n = -1; h2n->hdr_idx = (uint32_t)-1; } else h2n->hdr_idx = 1; } else { n = lws_token_from_index(wsi, (int)h2n->hdr_idx, NULL, NULL, NULL); lwsl_header(" lws_tok_from_idx(%u) says %d\n", (unsigned int)h2n->hdr_idx, n); } if (n == LWS_HPACK_IGNORE_ENTRY || n == -1) h2n->hdr_idx = LWS_HPACK_IGNORE_ENTRY; switch (h2n->hpack_type) { /* * hpack types with literal headers were parsed by the lws * header SM... on recognition of a known lws header, it does * the correct lws_frag_start() for us already. Other types * (ie, indexed header) need us to do it here. */ case HPKT_LITERAL_HDR_VALUE_INCR: case HPKT_LITERAL_HDR_VALUE: case HPKT_LITERAL_HDR_VALUE_NEVER: break; default: if (n != -1 && n != LWS_HPACK_IGNORE_ENTRY && lws_frag_start(wsi, n)) { lwsl_header("%s: frag start failed\n", __func__); return 1; } break; } break; case HPKS_HLEN_EXT: h2n->hpack_len = (uint32_t)((unsigned int)h2n->hpack_len | (unsigned int)((c & 0x7f) << h2n->ext_count)); h2n->ext_count = (uint8_t)(h2n->ext_count + 7); if (c & 0x80) /* extended integer not complete yet */ break; h2n->hpack_len += h2n->hpack_m; goto pre_data; case HPKS_DATA: //lwsl_header(" 0x%02X huff %d\n", c, h2n->huff); c1 = c; for (n = 0; n < 8; n++) { if (h2n->huff) { char b = (c >> 7) & 1; prev = h2n->hpack_pos; h2n->hpack_pos = (uint16_t)huftable_decode( (int)h2n->hpack_pos, b); c = (unsigned char)(c << 1); if (h2n->hpack_pos == 0xffff) { lwsl_notice("Huffman err\n"); return 1; } if (!(h2n->hpack_pos & 0x8000)) { if (!b) h2n->zero_huff_padding = 1; h2n->huff_pad++; continue; } c1 = (uint8_t)(h2n->hpack_pos & 0x7fff); h2n->hpack_pos = 0; h2n->huff_pad = 0; h2n->zero_huff_padding = 0; /* EOS |11111111|11111111|11111111|111111 */ if (!c1 && prev == HUFTABLE_0x100_PREV) { lws_h2_goaway(nwsi, H2_ERR_COMPRESSION_ERROR, "Huffman EOT seen"); return 1; } } else n = 8; if (h2n->value) { /* value */ if (h2n->hdr_idx && h2n->hdr_idx != LWS_HPACK_IGNORE_ENTRY) { if (ah->hdr_token_idx == WSI_TOKEN_HTTP_COLON_PATH) { switch (lws_parse_urldecode( wsi, &c1)) { case LPUR_CONTINUE: break; case LPUR_SWALLOW: goto swallow; case LPUR_EXCESSIVE: case LPUR_FORBID: lws_h2_goaway(nwsi, H2_ERR_PROTOCOL_ERROR, "Evil URI"); return 1; default: return -1; } } if (lws_frag_append(wsi, c1)) { lwsl_notice( "%s: frag app fail\n", __func__); return 1; } } //else //lwsl_header("ignoring %c\n", c1); } else { /* * Convert name using existing parser, * If h2n->unknown_header == 0, result is * in wsi->parser_state * using WSI_TOKEN_GET_URI. * * If unknown header h2n->unknown_header * will be set. */ h2n->hpack_hdr_len++; if (h2n->is_first_header_char) { h2n->is_first_header_char = 0; h2n->first_hdr_char = (char)c1; } lwsl_header("parser: %c\n", c1); /* uppercase header names illegal */ if (c1 >= 'A' && c1 <= 'Z') { lws_h2_goaway(nwsi, H2_ERR_COMPRESSION_ERROR, "Uppercase literal hpack hdr"); return 1; } plen = 1; if (!h2n->unknown_header && lws_parse(wsi, &c1, &plen)) h2n->unknown_header = 1; } swallow: (void)n; } // for n if (--h2n->hpack_len) break; /* * The header (h2n->value = 0) or the payload (h2n->value = 1) * is complete. */ if (h2n->huff && (h2n->huff_pad > 7 || (h2n->zero_huff_padding && h2n->huff_pad))) { lwsl_info("zero_huff_padding: %d huff_pad: %d\n", h2n->zero_huff_padding, h2n->huff_pad); lws_h2_goaway(nwsi, H2_ERR_COMPRESSION_ERROR, "Huffman padding excessive or wrong"); return 1; } fin: if (!h2n->value && ( h2n->hpack_type == HPKT_LITERAL_HDR_VALUE || h2n->hpack_type == HPKT_LITERAL_HDR_VALUE_INCR || h2n->hpack_type == HPKT_LITERAL_HDR_VALUE_NEVER)) { h2n->hdr_idx = LWS_HPACK_IGNORE_ENTRY; lwsl_header("wsi->parser_state: %d\n", ah->parser_state); if (ah->parser_state == WSI_TOKEN_NAME_PART) { /* h2 headers come without the colon */ c1 = ':'; plen = 1; n = lws_parse(wsi, &c1, &plen); (void)n; } if (ah->parser_state == WSI_TOKEN_NAME_PART || #if defined(LWS_WITH_CUSTOM_HEADERS) ah->parser_state == WSI_TOKEN_UNKNOWN_VALUE_PART || #endif ah->parser_state == WSI_TOKEN_SKIPPING) { h2n->unknown_header = 1; ah->parser_state = 0xff; wsi->seen_nonpseudoheader = 1; } } /* we have the header */ if (!h2n->value) { h2n->value = 1; h2n->hpack = HPKS_HLEN; h2n->huff_pad = 0; h2n->zero_huff_padding = 0; h2n->ext_count = 0; break; } /* * we have got both the header and value */ m = -1; switch (h2n->hpack_type) { /* * These are the only two that insert to the dyntable */ /* NEW indexed hdr with value */ case HPKT_INDEXED_HDR_6_VALUE_INCR: /* header length is determined by known index */ m = lws_token_from_index(wsi, (int)h2n->hdr_idx, NULL, NULL, &h2n->hpack_hdr_len); if (m < 0) /* * The peer may only send known 6-bit indexes, * there's still the possibility it sends an unset * dynamic index that we can't succeed to look up */ return 1; goto add_it; /* NEW literal hdr with value */ case HPKT_LITERAL_HDR_VALUE_INCR: /* * hdr is a new literal, so length is already in * h2n->hpack_hdr_len */ m = ah->parser_state; if (h2n->unknown_header || ah->parser_state == WSI_TOKEN_NAME_PART || ah->parser_state == WSI_TOKEN_SKIPPING) { if (h2n->first_hdr_char == ':') { lwsl_info("HPKT_LITERAL_HDR_VALUE_INCR:" " end state %d unk hdr %d\n", ah->parser_state, h2n->unknown_header); /* unknown pseudoheaders are illegal */ lws_h2_goaway(nwsi, H2_ERR_PROTOCOL_ERROR, "Unknown pseudoheader"); return 1; } m = LWS_HPACK_IGNORE_ENTRY; } add_it: /* * mark us as having been set at the time of dynamic * token insertion. */ ah->frags[ah->nfrag].flags |= 1; if (lws_dynamic_token_insert(wsi, (int)h2n->hpack_hdr_len, m, &ah->data[ah->frags[ah->nfrag].offset], ah->frags[ah->nfrag].len)) { lwsl_notice("%s: tok_insert fail\n", __func__); return 1; } break; default: break; } if (h2n->hdr_idx != LWS_HPACK_IGNORE_ENTRY && lws_frag_end(wsi)) return 1; if (h2n->hpack_type != HPKT_INDEXED_HDR_6_VALUE_INCR) { if (h2n->hpack_type == HPKT_LITERAL_HDR_VALUE || h2n->hpack_type == HPKT_LITERAL_HDR_VALUE_INCR || h2n->hpack_type == HPKT_LITERAL_HDR_VALUE_NEVER) { m = ah->parser_state; if (m == 255) m = -1; } else m = lws_token_from_index(wsi, (int)h2n->hdr_idx, NULL, NULL, NULL); } if (m != -1 && m != LWS_HPACK_IGNORE_ENTRY) lws_dump_header(wsi, m); if (lws_hpack_handle_pseudo_rules(nwsi, wsi, m)) return 1; h2n->is_first_header_char = 1; h2n->hpack = HPKS_TYPE; break; } return 0; } static unsigned int lws_h2_num_start(int starting_bits, unsigned long num) { unsigned int mask = (unsigned int)((1 << starting_bits) - 1); if (num < mask) return (unsigned int)num; return mask; } static int lws_h2_num(int starting_bits, unsigned long num, unsigned char **p, unsigned char *end) { unsigned int mask = (unsigned int)((1 << starting_bits) - 1); if (num < mask) return 0; num -= mask; do { if (num > 127) *((*p)++) = (uint8_t)(0x80 | (num & 0x7f)); else *((*p)++) = (uint8_t)(0x00 | (num & 0x7f)); if (*p >= end) return 1; num >>= 7; } while (num); return 0; } int lws_add_http2_header_by_name(struct lws *wsi, const unsigned char *name, const unsigned char *value, int length, unsigned char **p, unsigned char *end) { int len; #if defined(_DEBUG) /* value does not have to be NUL-terminated... %.*s not available on * all platforms */ if (value) { lws_strnncpy((char *)*p, (const char *)value, length, lws_ptr_diff(end, (*p))); lwsl_header("%s: %p %s:%s (len %d)\n", __func__, *p, name, (const char *)*p, length); } else { lwsl_err("%s: %p dummy copy %s (len %d)\n", __func__, *p, name, length); } #endif len = (int)strlen((char *)name); if (len) if (name[len - 1] == ':') len--; if (wsi->mux_substream && !strncmp((const char *)name, "transfer-encoding", (unsigned int)len)) { lwsl_header("rejecting %s\n", name); return 0; } if (end - *p < len + length + 8) return 1; *((*p)++) = 0; /* literal hdr, literal name, */ *((*p)++) = (uint8_t)(0 | (uint8_t)lws_h2_num_start(7, (unsigned long)len)); /* non-HUF */ if (lws_h2_num(7, (unsigned long)len, p, end)) return 1; /* upper-case header names are verboten in h2, but OK on h1, so * they're not illegal per se. Silently convert them for h2... */ while(len--) *((*p)++) = (uint8_t)tolower((int)*name++); *((*p)++) = (uint8_t)(0 | (uint8_t)lws_h2_num_start(7, (unsigned long)length)); /* non-HUF */ if (lws_h2_num(7, (unsigned long)length, p, end)) return 1; if (value) memcpy(*p, value, (unsigned int)length); *p += length; return 0; } int lws_add_http2_header_by_token(struct lws *wsi, enum lws_token_indexes token, const unsigned char *value, int length, unsigned char **p, unsigned char *end) { const unsigned char *name; name = lws_token_to_string(token); if (!name) return 1; return lws_add_http2_header_by_name(wsi, name, value, length, p, end); } int lws_add_http2_header_status(struct lws *wsi, unsigned int code, unsigned char **p, unsigned char *end) { unsigned char status[10]; int n; wsi->h2.send_END_STREAM = 0; // !!(code >= 400); n = sprintf((char *)status, "%u", code); if (lws_add_http2_header_by_token(wsi, WSI_TOKEN_HTTP_COLON_STATUS, status, n, p, end)) return 1; return 0; } libwebsockets-4.3.5/lib/roles/h2/http2.c000066400000000000000000002305041476025525100200060ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" /* * bitmap of control messages that are valid to receive for each http2 state */ static const uint16_t http2_rx_validity[] = { /* LWS_H2S_IDLE */ (1 << LWS_H2_FRAME_TYPE_SETTINGS) | (1 << LWS_H2_FRAME_TYPE_PRIORITY) | // (1 << LWS_H2_FRAME_TYPE_WINDOW_UPDATE)| /* ignore */ (1 << LWS_H2_FRAME_TYPE_HEADERS) | (1 << LWS_H2_FRAME_TYPE_CONTINUATION), /* LWS_H2S_RESERVED_LOCAL */ (1 << LWS_H2_FRAME_TYPE_SETTINGS) | (1 << LWS_H2_FRAME_TYPE_RST_STREAM) | (1 << LWS_H2_FRAME_TYPE_PRIORITY) | (1 << LWS_H2_FRAME_TYPE_WINDOW_UPDATE), /* LWS_H2S_RESERVED_REMOTE */ (1 << LWS_H2_FRAME_TYPE_SETTINGS) | (1 << LWS_H2_FRAME_TYPE_HEADERS) | (1 << LWS_H2_FRAME_TYPE_CONTINUATION) | (1 << LWS_H2_FRAME_TYPE_RST_STREAM) | (1 << LWS_H2_FRAME_TYPE_PRIORITY), /* LWS_H2S_OPEN */ (1 << LWS_H2_FRAME_TYPE_DATA) | (1 << LWS_H2_FRAME_TYPE_HEADERS) | (1 << LWS_H2_FRAME_TYPE_PRIORITY) | (1 << LWS_H2_FRAME_TYPE_RST_STREAM) | (1 << LWS_H2_FRAME_TYPE_SETTINGS) | (1 << LWS_H2_FRAME_TYPE_PUSH_PROMISE) | (1 << LWS_H2_FRAME_TYPE_PING) | (1 << LWS_H2_FRAME_TYPE_GOAWAY) | (1 << LWS_H2_FRAME_TYPE_WINDOW_UPDATE) | (1 << LWS_H2_FRAME_TYPE_CONTINUATION), /* LWS_H2S_HALF_CLOSED_REMOTE */ (1 << LWS_H2_FRAME_TYPE_SETTINGS) | (1 << LWS_H2_FRAME_TYPE_WINDOW_UPDATE) | (1 << LWS_H2_FRAME_TYPE_PRIORITY) | (1 << LWS_H2_FRAME_TYPE_RST_STREAM), /* LWS_H2S_HALF_CLOSED_LOCAL */ (1 << LWS_H2_FRAME_TYPE_DATA) | (1 << LWS_H2_FRAME_TYPE_HEADERS) | (1 << LWS_H2_FRAME_TYPE_PRIORITY) | (1 << LWS_H2_FRAME_TYPE_RST_STREAM) | (1 << LWS_H2_FRAME_TYPE_SETTINGS) | (1 << LWS_H2_FRAME_TYPE_PUSH_PROMISE) | (1 << LWS_H2_FRAME_TYPE_PING) | (1 << LWS_H2_FRAME_TYPE_GOAWAY) | (1 << LWS_H2_FRAME_TYPE_WINDOW_UPDATE) | (1 << LWS_H2_FRAME_TYPE_CONTINUATION), /* LWS_H2S_CLOSED */ (1 << LWS_H2_FRAME_TYPE_SETTINGS) | (1 << LWS_H2_FRAME_TYPE_PRIORITY) | (1 << LWS_H2_FRAME_TYPE_WINDOW_UPDATE) | (1 << LWS_H2_FRAME_TYPE_RST_STREAM), }; static const char *preface = "PRI * HTTP/2.0\x0d\x0a\x0d\x0aSM\x0d\x0a\x0d\x0a"; static const char * const h2_state_names[] = { "LWS_H2S_IDLE", "LWS_H2S_RESERVED_LOCAL", "LWS_H2S_RESERVED_REMOTE", "LWS_H2S_OPEN", "LWS_H2S_HALF_CLOSED_REMOTE", "LWS_H2S_HALF_CLOSED_LOCAL", "LWS_H2S_CLOSED", }; #if 0 static const char * const h2_setting_names[] = { "", "H2SET_HEADER_TABLE_SIZE", "H2SET_ENABLE_PUSH", "H2SET_MAX_CONCURRENT_STREAMS", "H2SET_INITIAL_WINDOW_SIZE", "H2SET_MAX_FRAME_SIZE", "H2SET_MAX_HEADER_LIST_SIZE", "reserved", "H2SET_ENABLE_CONNECT_PROTOCOL" }; void lws_h2_dump_settings(struct http2_settings *set) { int n; for (n = 1; n < H2SET_COUNT; n++) lwsl_notice(" %30s: %10d\n", h2_setting_names[n], set->s[n]); } #else void lws_h2_dump_settings(struct http2_settings *set) { } #endif struct lws_h2_protocol_send * lws_h2_new_pps(enum lws_h2_protocol_send_type type) { struct lws_h2_protocol_send *pps = lws_malloc(sizeof(*pps), "pps"); if (pps) pps->type = type; return pps; } void lws_h2_init(struct lws *wsi) { wsi->h2.h2n->our_set = wsi->a.vhost->h2.set; wsi->h2.h2n->peer_set = lws_h2_defaults; } void lws_h2_state(struct lws *wsi, enum lws_h2_states s) { if (!wsi) return; lwsl_info("%s: %s: state %s -> %s\n", __func__, lws_wsi_tag(wsi), h2_state_names[wsi->h2.h2_state], h2_state_names[s]); (void)h2_state_names; wsi->h2.h2_state = (uint8_t)s; } int lws_h2_update_peer_txcredit(struct lws *wsi, unsigned int sid, int bump) { struct lws *nwsi = lws_get_network_wsi(wsi); struct lws_h2_protocol_send *pps; assert(wsi); if (!bump) return 0; if (sid == (unsigned int)-1) sid = wsi->mux.my_sid; lwsl_info("%s: sid %d: bump %d -> %d\n", __func__, sid, bump, (int)wsi->txc.peer_tx_cr_est + bump); pps = lws_h2_new_pps(LWS_H2_PPS_UPDATE_WINDOW); if (!pps) return 1; pps->u.update_window.sid = (unsigned int)sid; pps->u.update_window.credit = (unsigned int)bump; wsi->txc.peer_tx_cr_est += bump; lws_wsi_txc_describe(&wsi->txc, __func__, wsi->mux.my_sid); lws_pps_schedule(wsi, pps); pps = lws_h2_new_pps(LWS_H2_PPS_UPDATE_WINDOW); if (!pps) return 1; pps->u.update_window.sid = 0; pps->u.update_window.credit = (unsigned int)bump; nwsi->txc.peer_tx_cr_est += bump; lws_wsi_txc_describe(&nwsi->txc, __func__, nwsi->mux.my_sid); lws_pps_schedule(nwsi, pps); return 0; } int lws_h2_get_peer_txcredit_estimate(struct lws *wsi) { lws_wsi_txc_describe(&wsi->txc, __func__, wsi->mux.my_sid); return (int)wsi->txc.peer_tx_cr_est; } static int lws_h2_update_peer_txcredit_thresh(struct lws *wsi, unsigned int sid, int threshold, int bump) { if (wsi->txc.peer_tx_cr_est > threshold) return 0; return lws_h2_update_peer_txcredit(wsi, sid, bump); } /* cx + vh lock */ static struct lws * __lws_wsi_server_new(struct lws_vhost *vh, struct lws *parent_wsi, unsigned int sid) { struct lws *nwsi = lws_get_network_wsi(parent_wsi); struct lws_h2_netconn *h2n = nwsi->h2.h2n; char tmp[50], tmp1[50]; unsigned int n, b = 0; struct lws *wsi; const char *p; lws_context_assert_lock_held(vh->context); lws_vhost_assert_lock_held(vh); /* * The identifier of a newly established stream MUST be numerically * greater than all streams that the initiating endpoint has opened or * reserved. This governs streams that are opened using a HEADERS frame * and streams that are reserved using PUSH_PROMISE. An endpoint that * receives an unexpected stream identifier MUST respond with a * connection error (Section 5.4.1) of type PROTOCOL_ERROR. */ if (sid <= h2n->highest_sid_opened) { lwsl_info("%s: tried to open lower sid %d (%d)\n", __func__, sid, (int)h2n->highest_sid_opened); lws_h2_goaway(nwsi, H2_ERR_PROTOCOL_ERROR, "Bad sid"); return NULL; } /* no more children allowed by parent */ if (parent_wsi->mux.child_count + 1 > parent_wsi->h2.h2n->our_set.s[H2SET_MAX_CONCURRENT_STREAMS]) { lwsl_notice("reached concurrent stream limit\n"); return NULL; } n = 0; p = &parent_wsi->lc.gutag[1]; do { if (*p == '|') { b++; if (b == 3) continue; } tmp1[n++] = *p++; } while (b < 3 && n < sizeof(tmp1) - 2); tmp1[n] = '\0'; lws_snprintf(tmp, sizeof(tmp), "h2_sid%u_(%s)", sid, tmp1); wsi = lws_create_new_server_wsi(vh, parent_wsi->tsi, tmp); if (!wsi) { lwsl_notice("new server wsi failed (%s)\n", lws_vh_tag(vh)); return NULL; } #if defined(LWS_WITH_SERVER) if (lwsi_role_server(parent_wsi)) { lws_metrics_caliper_bind(wsi->cal_conn, wsi->a.context->mth_srv); } #endif h2n->highest_sid_opened = sid; lws_wsi_mux_insert(wsi, parent_wsi, sid); if (sid >= h2n->highest_sid) h2n->highest_sid = sid + 2; wsi->mux_substream = 1; wsi->seen_nonpseudoheader = 0; wsi->txc.tx_cr = (int32_t)nwsi->h2.h2n->peer_set.s[H2SET_INITIAL_WINDOW_SIZE]; wsi->txc.peer_tx_cr_est = (int32_t)nwsi->h2.h2n->our_set.s[H2SET_INITIAL_WINDOW_SIZE]; lwsi_set_state(wsi, LRS_ESTABLISHED); lwsi_set_role(wsi, lwsi_role(parent_wsi)); wsi->a.protocol = &vh->protocols[0]; if (lws_ensure_user_space(wsi)) goto bail1; #if defined(LWS_WITH_SERVER) && defined(LWS_WITH_SECURE_STREAMS) if (lws_adopt_ss_server_accept(wsi)) goto bail1; #endif /* get the ball rolling */ lws_validity_confirmed(wsi); lwsl_info("%s: %s new ch %s, sid %d, usersp=%p\n", __func__, lws_wsi_tag(parent_wsi), lws_wsi_tag(wsi), sid, wsi->user_space); lws_wsi_txc_describe(&wsi->txc, __func__, wsi->mux.my_sid); lws_wsi_txc_describe(&nwsi->txc, __func__, 0); return wsi; bail1: /* undo the insert */ parent_wsi->mux.child_list = wsi->mux.sibling_list; parent_wsi->mux.child_count--; if (wsi->user_space) lws_free_set_NULL(wsi->user_space); vh->protocols[0].callback(wsi, LWS_CALLBACK_WSI_DESTROY, NULL, NULL, 0); __lws_vhost_unbind_wsi(wsi); lws_free(wsi); return NULL; } struct lws * lws_wsi_h2_adopt(struct lws *parent_wsi, struct lws *wsi) { struct lws *nwsi = lws_get_network_wsi(parent_wsi); /* no more children allowed by parent */ if (parent_wsi->mux.child_count + 1 > parent_wsi->h2.h2n->our_set.s[H2SET_MAX_CONCURRENT_STREAMS]) { lwsl_notice("reached concurrent stream limit\n"); return NULL; } /* sid is set just before issuing the headers, ensuring monoticity */ wsi->seen_nonpseudoheader = 0; #if defined(LWS_WITH_CLIENT) wsi->client_mux_substream = 1; #endif wsi->h2.initialized = 1; #if 0 /* only assign sid at header send time when we know it */ if (!wsi->mux.my_sid) { wsi->mux.my_sid = nwsi->h2.h2n->highest_sid; nwsi->h2.h2n->highest_sid += 2; } #endif lwsl_info("%s: binding wsi %s to sid %d (next %d)\n", __func__, lws_wsi_tag(wsi), (int)wsi->mux.my_sid, (int)nwsi->h2.h2n->highest_sid); lws_wsi_mux_insert(wsi, parent_wsi, wsi->mux.my_sid); wsi->txc.tx_cr = (int32_t)nwsi->h2.h2n->peer_set.s[H2SET_INITIAL_WINDOW_SIZE]; wsi->txc.peer_tx_cr_est = (int32_t) nwsi->h2.h2n->our_set.s[H2SET_INITIAL_WINDOW_SIZE]; lws_wsi_txc_describe(&wsi->txc, __func__, wsi->mux.my_sid); if (lws_ensure_user_space(wsi)) goto bail1; lws_role_transition(wsi, LWSIFR_CLIENT, LRS_H2_WAITING_TO_SEND_HEADERS, &role_ops_h2); lws_callback_on_writable(wsi); return wsi; bail1: /* undo the insert */ parent_wsi->mux.child_list = wsi->mux.sibling_list; parent_wsi->mux.child_count--; if (wsi->user_space) lws_free_set_NULL(wsi->user_space); wsi->a.protocol->callback(wsi, LWS_CALLBACK_WSI_DESTROY, NULL, NULL, 0); lws_free(wsi); return NULL; } int lws_h2_issue_preface(struct lws *wsi) { struct lws_h2_netconn *h2n = wsi->h2.h2n; struct lws_h2_protocol_send *pps; if (!h2n) { lwsl_warn("%s: no valid h2n\n", __func__); return 1; } if (h2n->sent_preface) return 1; lwsl_debug("%s: %s: fd %d\n", __func__, lws_wsi_tag(wsi), (int)wsi->desc.sockfd); if (lws_issue_raw(wsi, (uint8_t *)preface, strlen(preface)) != (int)strlen(preface)) return 1; h2n->sent_preface = 1; lws_role_transition(wsi, LWSIFR_CLIENT, LRS_H2_WAITING_TO_SEND_HEADERS, &role_ops_h2); h2n->count = 0; wsi->txc.tx_cr = 65535; /* * we must send a settings frame */ pps = lws_h2_new_pps(LWS_H2_PPS_MY_SETTINGS); if (!pps) return 1; lws_pps_schedule(wsi, pps); lwsl_info("%s: h2 client sending settings\n", __func__); return 0; } void lws_pps_schedule(struct lws *wsi, struct lws_h2_protocol_send *pps) { struct lws *nwsi = lws_get_network_wsi(wsi); struct lws_h2_netconn *h2n = nwsi->h2.h2n; if (!h2n) { lwsl_warn("%s: null h2n\n", __func__); lws_free(pps); return; } pps->next = h2n->pps; h2n->pps = pps; lws_rx_flow_control(wsi, LWS_RXFLOW_REASON_APPLIES_DISABLE | LWS_RXFLOW_REASON_H2_PPS_PENDING); lws_callback_on_writable(wsi); } int lws_h2_goaway(struct lws *wsi, uint32_t err, const char *reason) { struct lws_h2_netconn *h2n = wsi->h2.h2n; struct lws_h2_protocol_send *pps; if (h2n->type == LWS_H2_FRAME_TYPE_COUNT) return 0; pps = lws_h2_new_pps(LWS_H2_PPS_GOAWAY); if (!pps) return 1; lwsl_info("%s: %s: ERR 0x%x, '%s'\n", __func__, lws_wsi_tag(wsi), (int)err, reason); pps->u.ga.err = err; pps->u.ga.highest_sid = h2n->highest_sid; lws_strncpy(pps->u.ga.str, reason, sizeof(pps->u.ga.str)); lws_pps_schedule(wsi, pps); h2n->type = LWS_H2_FRAME_TYPE_COUNT; /* ie, IGNORE */ return 0; } int lws_h2_rst_stream(struct lws *wsi, uint32_t err, const char *reason) { struct lws *nwsi = lws_get_network_wsi(wsi); struct lws_h2_netconn *h2n = nwsi->h2.h2n; struct lws_h2_protocol_send *pps; if (!h2n) return 0; if (!wsi->h2_stream_carries_ws && h2n->type == LWS_H2_FRAME_TYPE_COUNT) return 0; pps = lws_h2_new_pps(LWS_H2_PPS_RST_STREAM); if (!pps) return 1; lwsl_info("%s: RST_STREAM 0x%x, sid %d, REASON '%s'\n", __func__, (int)err, wsi->mux.my_sid, reason); pps->u.rs.sid = wsi->mux.my_sid; pps->u.rs.err = err; lws_pps_schedule(wsi, pps); h2n->type = LWS_H2_FRAME_TYPE_COUNT; /* ie, IGNORE */ lws_h2_state(wsi, LWS_H2_STATE_CLOSED); return 0; } int lws_h2_settings(struct lws *wsi, struct http2_settings *settings, unsigned char *buf, int len) { struct lws *nwsi = lws_get_network_wsi(wsi); unsigned int a, b; if (!len) return 0; if (len < LWS_H2_SETTINGS_LEN) return 1; while (len >= LWS_H2_SETTINGS_LEN) { a = (unsigned int)((buf[0] << 8) | buf[1]); if (!a || a >= H2SET_COUNT) goto skip; b = (unsigned int)(buf[2] << 24 | buf[3] << 16 | buf[4] << 8 | buf[5]); switch (a) { case H2SET_HEADER_TABLE_SIZE: break; case H2SET_ENABLE_PUSH: if (b > 1) { lws_h2_goaway(nwsi, H2_ERR_PROTOCOL_ERROR, "ENABLE_PUSH invalid arg"); return 1; } break; case H2SET_MAX_CONCURRENT_STREAMS: break; case H2SET_INITIAL_WINDOW_SIZE: if (b > 0x7fffffff) { lws_h2_goaway(nwsi, H2_ERR_FLOW_CONTROL_ERROR, "Inital Window beyond max"); return 1; } #if defined(LWS_WITH_CLIENT) #if defined(LWS_AMAZON_RTOS) || defined(LWS_AMAZON_LINUX) if ( #else if (wsi->flags & LCCSCF_H2_QUIRK_OVERFLOWS_TXCR && #endif b == 0x7fffffff) { b >>= 4; break; } #endif /* * In addition to changing the flow-control window for * streams that are not yet active, a SETTINGS frame * can alter the initial flow-control window size for * streams with active flow-control windows (that is, * streams in the "open" or "half-closed (remote)" * state). When the value of * SETTINGS_INITIAL_WINDOW_SIZE changes, a receiver * MUST adjust the size of all stream flow-control * windows that it maintains by the difference between * the new value and the old value. */ lws_start_foreach_ll(struct lws *, w, nwsi->mux.child_list) { lwsl_info("%s: adi child tc cr %d +%d -> %d", __func__, (int)w->txc.tx_cr, b - (unsigned int)settings->s[a], (int)(w->txc.tx_cr + (int)b - (int)settings->s[a])); w->txc.tx_cr += (int)b - (int)settings->s[a]; if (w->txc.tx_cr > 0 && w->txc.tx_cr <= (int32_t)(b - settings->s[a])) lws_callback_on_writable(w); } lws_end_foreach_ll(w, mux.sibling_list); break; case H2SET_MAX_FRAME_SIZE: if (b < wsi->a.vhost->h2.set.s[H2SET_MAX_FRAME_SIZE]) { lws_h2_goaway(nwsi, H2_ERR_PROTOCOL_ERROR, "Frame size < initial"); return 1; } if (b > 0x00ffffff) { lws_h2_goaway(nwsi, H2_ERR_PROTOCOL_ERROR, "Settings Frame size above max"); return 1; } break; case H2SET_MAX_HEADER_LIST_SIZE: break; } settings->s[a] = b; lwsl_info("http2 settings %d <- 0x%x\n", a, b); skip: len -= LWS_H2_SETTINGS_LEN; buf += LWS_H2_SETTINGS_LEN; } if (len) return 1; lws_h2_dump_settings(settings); return 0; } /* RFC7640 Sect 6.9 * * The WINDOW_UPDATE frame can be specific to a stream or to the entire * connection. In the former case, the frame's stream identifier * indicates the affected stream; in the latter, the value "0" indicates * that the entire connection is the subject of the frame. * * ... * * Two flow-control windows are applicable: the stream flow-control * window and the connection flow-control window. The sender MUST NOT * send a flow-controlled frame with a length that exceeds the space * available in either of the flow-control windows advertised by the * receiver. Frames with zero length with the END_STREAM flag set (that * is, an empty DATA frame) MAY be sent if there is no available space * in either flow-control window. */ int lws_h2_tx_cr_get(struct lws *wsi) { int c = wsi->txc.tx_cr; struct lws *nwsi = lws_get_network_wsi(wsi); if (!wsi->mux_substream && !nwsi->upgraded_to_http2) return ~0x80000000; lwsl_info ("%s: %s: own tx credit %d: nwsi credit %d\n", __func__, lws_wsi_tag(wsi), c, (int)nwsi->txc.tx_cr); if (nwsi->txc.tx_cr < c) c = nwsi->txc.tx_cr; if (c < 0) return 0; return c; } void lws_h2_tx_cr_consume(struct lws *wsi, int consumed) { struct lws *nwsi = lws_get_network_wsi(wsi); wsi->txc.tx_cr -= consumed; if (nwsi != wsi) nwsi->txc.tx_cr -= consumed; } int lws_h2_frame_write(struct lws *wsi, int type, int flags, unsigned int sid, unsigned int len, unsigned char *buf) { struct lws *nwsi = lws_get_network_wsi(wsi); unsigned char *p = &buf[-LWS_H2_FRAME_HEADER_LENGTH]; int n; //if (wsi->h2_stream_carries_ws) // lwsl_hexdump_level(LLL_NOTICE, buf, len); *p++ = (uint8_t)(len >> 16); *p++ = (uint8_t)(len >> 8); *p++ = (uint8_t)len; *p++ = (uint8_t)type; *p++ = (uint8_t)flags; *p++ = (uint8_t)(sid >> 24); *p++ = (uint8_t)(sid >> 16); *p++ = (uint8_t)(sid >> 8); *p++ = (uint8_t)sid; lwsl_debug("%s: %s (eff %s). typ %d, fl 0x%x, sid=%d, len=%d, " "txcr=%d, nwsi->txcr=%d\n", __func__, lws_wsi_tag(wsi), lws_wsi_tag(nwsi), type, flags, sid, len, (int)wsi->txc.tx_cr, (int)nwsi->txc.tx_cr); if (type == LWS_H2_FRAME_TYPE_DATA) { if (wsi->txc.tx_cr < (int)len) lwsl_info("%s: %s: sending payload len %d" " but tx_cr only %d!\n", __func__, lws_wsi_tag(wsi), len, (int)wsi->txc.tx_cr); lws_h2_tx_cr_consume(wsi, (int)len); } n = lws_issue_raw(nwsi, &buf[-LWS_H2_FRAME_HEADER_LENGTH], len + LWS_H2_FRAME_HEADER_LENGTH); if (n < 0) return n; if (n >= LWS_H2_FRAME_HEADER_LENGTH) return n - LWS_H2_FRAME_HEADER_LENGTH; return n; } static void lws_h2_set_bin(struct lws *wsi, int n, unsigned char *buf) { *buf++ = (uint8_t)(n >> 8); *buf++ = (uint8_t)n; *buf++ = (uint8_t)(wsi->h2.h2n->our_set.s[n] >> 24); *buf++ = (uint8_t)(wsi->h2.h2n->our_set.s[n] >> 16); *buf++ = (uint8_t)(wsi->h2.h2n->our_set.s[n] >> 8); *buf = (uint8_t)wsi->h2.h2n->our_set.s[n]; } /* we get called on the network connection */ int lws_h2_do_pps_send(struct lws *wsi) { struct lws_h2_netconn *h2n = wsi->h2.h2n; struct lws_h2_protocol_send *pps = NULL; struct lws *cwsi; uint8_t set[LWS_PRE + 64], *p = &set[LWS_PRE], *q; int n, m = 0, flags = 0; if (!h2n) return 1; /* get the oldest pps */ lws_start_foreach_llp(struct lws_h2_protocol_send **, pps1, h2n->pps) { if ((*pps1)->next == NULL) { /* we are the oldest in the list */ pps = *pps1; /* remove us from the list */ *pps1 = NULL; continue; } } lws_end_foreach_llp(pps1, next); if (!pps) return 1; lwsl_info("%s: %s: %d\n", __func__, lws_wsi_tag(wsi), pps->type); switch (pps->type) { case LWS_H2_PPS_MY_SETTINGS: /* * if any of our settings varies from h2 "default defaults" * then we must inform the peer */ for (n = 1; n < H2SET_COUNT; n++) if (h2n->our_set.s[n] != lws_h2_defaults.s[n]) { lwsl_debug("sending SETTING %d 0x%x\n", n, (unsigned int) wsi->h2.h2n->our_set.s[n]); lws_h2_set_bin(wsi, n, &set[LWS_PRE + m]); m += (int)sizeof(h2n->one_setting); } n = lws_h2_frame_write(wsi, LWS_H2_FRAME_TYPE_SETTINGS, flags, LWS_H2_STREAM_ID_MASTER, (unsigned int)m, &set[LWS_PRE]); if (n != m) { lwsl_info("send %d %d\n", n, m); goto bail; } break; case LWS_H2_PPS_SETTINGS_INITIAL_UPDATE_WINDOW: q = &set[LWS_PRE]; *q++ = (uint8_t)(H2SET_INITIAL_WINDOW_SIZE >> 8); *q++ = (uint8_t)(H2SET_INITIAL_WINDOW_SIZE); *q++ = (uint8_t)(pps->u.update_window.credit >> 24); *q++ = (uint8_t)(pps->u.update_window.credit >> 16); *q++ = (uint8_t)(pps->u.update_window.credit >> 8); *q = (uint8_t)(pps->u.update_window.credit); lwsl_debug("%s: resetting initial window to %d\n", __func__, (int)pps->u.update_window.credit); n = lws_h2_frame_write(wsi, LWS_H2_FRAME_TYPE_SETTINGS, flags, LWS_H2_STREAM_ID_MASTER, 6, &set[LWS_PRE]); if (n != 6) { lwsl_info("send %d %d\n", n, m); goto bail; } break; case LWS_H2_PPS_ACK_SETTINGS: /* send ack ... always empty */ n = lws_h2_frame_write(wsi, LWS_H2_FRAME_TYPE_SETTINGS, 1, LWS_H2_STREAM_ID_MASTER, 0, &set[LWS_PRE]); if (n) { lwsl_err("%s: writing settings ack frame failed %d\n", __func__, n); goto bail; } wsi->h2_acked_settings = 0; /* this is the end of the preface dance then? */ if (lwsi_state(wsi) == LRS_H2_AWAIT_SETTINGS) { lwsi_set_state(wsi, LRS_ESTABLISHED); #if defined(LWS_WITH_FILE_OPS) wsi->http.fop_fd = NULL; #endif if (lws_is_ssl(lws_get_network_wsi(wsi))) break; if (wsi->a.vhost->options & LWS_SERVER_OPTION_H2_PRIOR_KNOWLEDGE) break; /* * we need to treat the headers from the upgrade as the * first job. So these need to get shifted to sid 1. */ lws_context_lock(wsi->a.context, "h2 mig"); lws_vhost_lock(wsi->a.vhost); h2n->swsi = __lws_wsi_server_new(wsi->a.vhost, wsi, 1); lws_vhost_unlock(wsi->a.vhost); lws_context_unlock(wsi->a.context); if (!h2n->swsi) goto bail; /* pass on the initial headers to SID 1 */ h2n->swsi->http.ah = wsi->http.ah; wsi->http.ah = NULL; lwsl_info("%s: inherited headers %p\n", __func__, h2n->swsi->http.ah); h2n->swsi->txc.tx_cr = (int32_t) h2n->our_set.s[H2SET_INITIAL_WINDOW_SIZE]; lwsl_info("initial tx credit on %s: %d\n", lws_wsi_tag(h2n->swsi), (int)h2n->swsi->txc.tx_cr); h2n->swsi->h2.initialized = 1; /* demanded by HTTP2 */ h2n->swsi->h2.END_STREAM = 1; lwsl_info("servicing initial http request\n"); #if defined(LWS_WITH_SERVER) if (lws_http_action(h2n->swsi)) goto bail; #endif break; } break; /* * h2 only has PING... ACK = 0 = ping, ACK = 1 = pong */ case LWS_H2_PPS_PING: case LWS_H2_PPS_PONG: if (pps->type == LWS_H2_PPS_PING) lwsl_info("sending PING\n"); else { lwsl_info("sending PONG\n"); flags = LWS_H2_FLAG_SETTINGS_ACK; } memcpy(&set[LWS_PRE], pps->u.ping.ping_payload, 8); n = lws_h2_frame_write(wsi, LWS_H2_FRAME_TYPE_PING, flags, LWS_H2_STREAM_ID_MASTER, 8, &set[LWS_PRE]); if (n != 8) goto bail; break; case LWS_H2_PPS_GOAWAY: lwsl_info("LWS_H2_PPS_GOAWAY\n"); *p++ = (uint8_t)(pps->u.ga.highest_sid >> 24); *p++ = (uint8_t)(pps->u.ga.highest_sid >> 16); *p++ = (uint8_t)(pps->u.ga.highest_sid >> 8); *p++ = (uint8_t)(pps->u.ga.highest_sid); *p++ = (uint8_t)(pps->u.ga.err >> 24); *p++ = (uint8_t)(pps->u.ga.err >> 16); *p++ = (uint8_t)(pps->u.ga.err >> 8); *p++ = (uint8_t)(pps->u.ga.err); q = (unsigned char *)pps->u.ga.str; n = 0; while (*q && n++ < (int)sizeof(pps->u.ga.str)) *p++ = *q++; h2n->we_told_goaway = 1; n = lws_h2_frame_write(wsi, LWS_H2_FRAME_TYPE_GOAWAY, 0, LWS_H2_STREAM_ID_MASTER, (unsigned int)lws_ptr_diff(p, &set[LWS_PRE]), &set[LWS_PRE]); if (n != 4) { lwsl_info("send %d %d\n", n, m); goto bail; } goto bail; case LWS_H2_PPS_RST_STREAM: lwsl_info("LWS_H2_PPS_RST_STREAM\n"); *p++ = (uint8_t)(pps->u.rs.err >> 24); *p++ = (uint8_t)(pps->u.rs.err >> 16); *p++ = (uint8_t)(pps->u.rs.err >> 8); *p++ = (uint8_t)(pps->u.rs.err); n = lws_h2_frame_write(wsi, LWS_H2_FRAME_TYPE_RST_STREAM, 0, pps->u.rs.sid, 4, &set[LWS_PRE]); if (n != 4) { lwsl_info("send %d %d\n", n, m); goto bail; } cwsi = lws_wsi_mux_from_id(wsi, pps->u.rs.sid); if (cwsi) { lwsl_debug("%s: closing cwsi %s %s %s (wsi %s)\n", __func__, lws_wsi_tag(cwsi), cwsi->role_ops->name, cwsi->a.protocol->name, lws_wsi_tag(wsi)); lws_close_free_wsi(cwsi, 0, "reset stream"); } break; case LWS_H2_PPS_UPDATE_WINDOW: lwsl_info("Issuing LWS_H2_PPS_UPDATE_WINDOW: sid %d: add %d\n", (int)pps->u.update_window.sid, (int)pps->u.update_window.credit); *p++ = (uint8_t)((pps->u.update_window.credit >> 24) & 0x7f); /* 31b */ *p++ = (uint8_t)(pps->u.update_window.credit >> 16); *p++ = (uint8_t)(pps->u.update_window.credit >> 8); *p++ = (uint8_t)(pps->u.update_window.credit); n = lws_h2_frame_write(wsi, LWS_H2_FRAME_TYPE_WINDOW_UPDATE, 0, pps->u.update_window.sid, 4, &set[LWS_PRE]); if (n != 4) { lwsl_info("send %d %d\n", n, m); goto bail; } break; default: break; } lws_free(pps); return 0; bail: lws_free(pps); return 1; } static int lws_h2_parse_end_of_frame(struct lws *wsi); /* * The frame header part has just completely arrived. * Perform actions for header completion. */ static int lws_h2_parse_frame_header(struct lws *wsi) { struct lws_h2_netconn *h2n = wsi->h2.h2n; struct lws_h2_protocol_send *pps; int n; /* * We just got the frame header */ h2n->count = 0; h2n->swsi = wsi; /* b31 is a reserved bit */ h2n->sid = h2n->sid & 0x7fffffff; if (h2n->sid && !(h2n->sid & 1)) { char pes[32]; lws_snprintf(pes, sizeof(pes), "Even Stream ID 0x%x", (unsigned int)h2n->sid); lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, pes); return 0; } /* let the network wsi live a bit longer if subs are active */ if (!wsi->immortal_substream_count) lws_set_timeout(wsi, PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE, wsi->a.vhost->keepalive_timeout ? wsi->a.vhost->keepalive_timeout : 31); if (h2n->sid) h2n->swsi = lws_wsi_mux_from_id(wsi, h2n->sid); lwsl_debug("%s (%s): fr hdr: typ 0x%x, fla 0x%x, sid 0x%x, len 0x%x\n", lws_wsi_tag(wsi), lws_wsi_tag(h2n->swsi), h2n->type, h2n->flags, (unsigned int)h2n->sid, (unsigned int)h2n->length); if (h2n->we_told_goaway && h2n->sid > h2n->highest_sid) h2n->type = LWS_H2_FRAME_TYPE_COUNT; /* ie, IGNORE */ if (h2n->type >= LWS_H2_FRAME_TYPE_COUNT) { lwsl_info("%s: ignoring unknown frame type %d (len %d)\n", __func__, h2n->type, (unsigned int)h2n->length); /* we MUST ignore frames we don't understand */ h2n->type = LWS_H2_FRAME_TYPE_COUNT; } /* * Even if we have decided to logically ignore this frame, we must * consume the correct "frame length" amount of data to retain sync */ if (h2n->length > h2n->our_set.s[H2SET_MAX_FRAME_SIZE]) { /* * peer sent us something bigger than we told * it we would allow */ lwsl_info("%s: received oversize frame %d\n", __func__, (unsigned int)h2n->length); lws_h2_goaway(wsi, H2_ERR_FRAME_SIZE_ERROR, "Peer ignored our frame size setting"); return 1; } if (h2n->swsi) lwsl_info("%s: %s, State: %s, received cmd %d\n", __func__, lws_wsi_tag(h2n->swsi), h2_state_names[h2n->swsi->h2.h2_state], h2n->type); else { /* if it's data, either way no swsi means CLOSED state */ if (h2n->type == LWS_H2_FRAME_TYPE_DATA) { if (h2n->sid <= h2n->highest_sid_opened #if defined(LWS_WITH_CLIENT) && wsi->client_h2_alpn #endif ) { lwsl_notice("ignoring straggling data fl 0x%x\n", h2n->flags); /* ie, IGNORE */ h2n->type = LWS_H2_FRAME_TYPE_COUNT; } else { lwsl_info("%s: received %d bytes data for unknown sid %d, highest known %d\n", __func__, (int)h2n->length, (int)h2n->sid, (int)h2n->highest_sid_opened); // if (h2n->sid > h2n->highest_sid_opened) { lws_h2_goaway(wsi, H2_ERR_STREAM_CLOSED, "Data for nonexistent sid"); return 0; // } } } /* if the sid is credible, treat as wsi for it closed */ if (h2n->sid > h2n->highest_sid_opened && h2n->type != LWS_H2_FRAME_TYPE_HEADERS && h2n->type != LWS_H2_FRAME_TYPE_PRIORITY) { /* if not credible, reject it */ lwsl_info("%s: %s, No child for sid %d, rxcmd %d\n", __func__, lws_wsi_tag(h2n->swsi), (unsigned int)h2n->sid, h2n->type); lws_h2_goaway(wsi, H2_ERR_STREAM_CLOSED, "Data for nonexistent sid"); return 0; } } if (h2n->swsi && h2n->sid && h2n->type != LWS_H2_FRAME_TYPE_COUNT && !(http2_rx_validity[h2n->swsi->h2.h2_state] & (1 << h2n->type))) { lwsl_info("%s: %s, State: %s, ILLEGAL cmdrx %d (OK 0x%x)\n", __func__, lws_wsi_tag(h2n->swsi), h2_state_names[h2n->swsi->h2.h2_state], h2n->type, http2_rx_validity[h2n->swsi->h2.h2_state]); if (h2n->swsi->h2.h2_state == LWS_H2_STATE_CLOSED || h2n->swsi->h2.h2_state == LWS_H2_STATE_HALF_CLOSED_REMOTE) n = H2_ERR_STREAM_CLOSED; else n = H2_ERR_PROTOCOL_ERROR; lws_h2_goaway(wsi, (unsigned int)n, "invalid rx for state"); return 0; } if (h2n->cont_exp && h2n->type != LWS_H2_FRAME_TYPE_COUNT && (h2n->cont_exp_sid != h2n->sid || h2n->type != LWS_H2_FRAME_TYPE_CONTINUATION)) { lwsl_info("%s: expected cont on sid %u (got %d on sid %u)\n", __func__, (unsigned int)h2n->cont_exp_sid, h2n->type, (unsigned int)h2n->sid); h2n->cont_exp = 0; if (h2n->cont_exp_headers) n = H2_ERR_COMPRESSION_ERROR; else n = H2_ERR_PROTOCOL_ERROR; lws_h2_goaway(wsi, (unsigned int)n, "Continuation hdrs State"); return 0; } switch (h2n->type) { case LWS_H2_FRAME_TYPE_DATA: lwsl_info("seen incoming LWS_H2_FRAME_TYPE_DATA start\n"); if (!h2n->sid) { lwsl_info("DATA: 0 sid\n"); lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "DATA 0 sid"); break; } lwsl_info("Frame header DATA: sid %u, flags 0x%x, len %u\n", (unsigned int)h2n->sid, h2n->flags, (unsigned int)h2n->length); if (!h2n->swsi) { lwsl_notice("DATA: NULL swsi\n"); break; } lwsl_info("DATA rx on state %d\n", h2n->swsi->h2.h2_state); if ( h2n->swsi->h2.h2_state == LWS_H2_STATE_HALF_CLOSED_REMOTE || h2n->swsi->h2.h2_state == LWS_H2_STATE_CLOSED) { lws_h2_goaway(wsi, H2_ERR_STREAM_CLOSED, "conn closed"); break; } if (h2n->length == 0) lws_h2_parse_end_of_frame(wsi); break; case LWS_H2_FRAME_TYPE_PRIORITY: lwsl_info("LWS_H2_FRAME_TYPE_PRIORITY complete frame\n"); if (!h2n->sid) { lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "Priority has 0 sid"); break; } if (h2n->length != 5) { lws_h2_goaway(wsi, H2_ERR_FRAME_SIZE_ERROR, "Priority has length other than 5"); break; } break; case LWS_H2_FRAME_TYPE_PUSH_PROMISE: lwsl_info("LWS_H2_FRAME_TYPE_PUSH_PROMISE complete frame\n"); lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "Server only"); break; case LWS_H2_FRAME_TYPE_GOAWAY: lwsl_debug("LWS_H2_FRAME_TYPE_GOAWAY received\n"); break; case LWS_H2_FRAME_TYPE_RST_STREAM: if (!h2n->sid) return 1; if (!h2n->swsi) { if (h2n->sid <= h2n->highest_sid_opened) break; lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "crazy sid on RST_STREAM"); return 1; } if (h2n->length != 4) { lws_h2_goaway(wsi, H2_ERR_FRAME_SIZE_ERROR, "RST_STREAM can only be length 4"); break; } lws_h2_state(h2n->swsi, LWS_H2_STATE_CLOSED); break; case LWS_H2_FRAME_TYPE_SETTINGS: lwsl_info("LWS_H2_FRAME_TYPE_SETTINGS complete frame\n"); /* nonzero sid on settings is illegal */ if (h2n->sid) { lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "Settings has nonzero sid"); break; } if (!(h2n->flags & LWS_H2_FLAG_SETTINGS_ACK)) { if (h2n->length % 6) { lws_h2_goaway(wsi, H2_ERR_FRAME_SIZE_ERROR, "Settings length error"); break; } if (h2n->type == LWS_H2_FRAME_TYPE_COUNT) return 0; if (wsi->upgraded_to_http2 && #if defined(LWS_WITH_CLIENT) (!(wsi->flags & LCCSCF_H2_QUIRK_NGHTTP2_END_STREAM) || #else ( #endif !wsi->h2_acked_settings)) { pps = lws_h2_new_pps(LWS_H2_PPS_ACK_SETTINGS); if (!pps) return 1; lws_pps_schedule(wsi, pps); wsi->h2_acked_settings = 1; } break; } /* came to us with ACK set... not allowed to have payload */ if (h2n->length) { lws_h2_goaway(wsi, H2_ERR_FRAME_SIZE_ERROR, "Settings with ACK not allowed payload"); break; } break; case LWS_H2_FRAME_TYPE_PING: if (h2n->sid) { lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "Ping has nonzero sid"); break; } if (h2n->length != 8) { lws_h2_goaway(wsi, H2_ERR_FRAME_SIZE_ERROR, "Ping payload can only be 8"); break; } break; case LWS_H2_FRAME_TYPE_CONTINUATION: lwsl_info("LWS_H2_FRAME_TYPE_CONTINUATION: sid = %u %d %d\n", (unsigned int)h2n->sid, (int)h2n->cont_exp, (int)h2n->cont_exp_sid); if (!h2n->cont_exp || h2n->cont_exp_sid != h2n->sid || !h2n->sid || !h2n->swsi) { lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "unexpected CONTINUATION"); break; } if (h2n->swsi->h2.END_HEADERS) { lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "END_HEADERS already seen"); break; } /* END_STREAM is in HEADERS, skip resetting it */ goto update_end_headers; case LWS_H2_FRAME_TYPE_HEADERS: lwsl_info("HEADERS: frame header: sid = %u\n", (unsigned int)h2n->sid); if (!h2n->sid) { lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "sid 0"); return 1; } if (h2n->swsi && !h2n->swsi->h2.END_STREAM && h2n->swsi->h2.END_HEADERS && !(h2n->flags & LWS_H2_FLAG_END_STREAM)) { lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "extra HEADERS together"); return 1; } #if defined(LWS_WITH_CLIENT) if (wsi->client_h2_alpn) { if (h2n->sid) { h2n->swsi = lws_wsi_mux_from_id(wsi, h2n->sid); lwsl_info("HEADERS: nwsi %s: sid %u mapped " "to wsi %s\n", lws_wsi_tag(wsi), (unsigned int)h2n->sid, lws_wsi_tag(h2n->swsi)); if (!h2n->swsi) break; } goto update_end_headers; } #endif if (!h2n->swsi) { /* no more children allowed by parent */ if (wsi->mux.child_count + 1 > wsi->h2.h2n->our_set.s[H2SET_MAX_CONCURRENT_STREAMS]) { lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "Another stream not allowed"); return 1; } /* * The peer has sent us a HEADERS implying the creation * of a new stream */ lws_context_lock(wsi->a.context, "h2 new str"); lws_vhost_lock(wsi->a.vhost); h2n->swsi = __lws_wsi_server_new(wsi->a.vhost, wsi, h2n->sid); lws_vhost_unlock(wsi->a.vhost); lws_context_unlock(wsi->a.context); if (!h2n->swsi) { lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "OOM"); return 1; } if (h2n->sid >= h2n->highest_sid) h2n->highest_sid = h2n->sid + 2; h2n->swsi->h2.initialized = 1; if (lws_h2_update_peer_txcredit(h2n->swsi, h2n->swsi->mux.my_sid, 4 * 65536)) goto cleanup_wsi; } /* * ah needs attaching to child wsi, even though * we only fill it from network wsi */ if (!h2n->swsi->http.ah) if (lws_header_table_attach(h2n->swsi, 0)) { lwsl_err("%s: Failed to get ah\n", __func__); return 1; } /* * The first use of a new stream identifier implicitly closes * all streams in the "idle" state that might have been * initiated by that peer with a lower-valued stream identifier. * * For example, if a client sends a HEADERS frame on stream 7 * without ever sending a frame on stream 5, then stream 5 * transitions to the "closed" state when the first frame for * stream 7 is sent or received. */ lws_start_foreach_ll(struct lws *, w, wsi->mux.child_list) { if (w->mux.my_sid < h2n->sid && w->h2.h2_state == LWS_H2_STATE_IDLE) lws_close_free_wsi(w, 0, "h2 sid close"); assert(w->mux.sibling_list != w); } lws_end_foreach_ll(w, mux.sibling_list); h2n->cont_exp = !(h2n->flags & LWS_H2_FLAG_END_HEADERS); h2n->cont_exp_sid = h2n->sid; h2n->cont_exp_headers = 1; // lws_header_table_reset(h2n->swsi, 0); update_end_headers: if (lws_check_opt(h2n->swsi->a.vhost->options, LWS_SERVER_OPTION_VH_H2_HALF_CLOSED_LONG_POLL)) { /* * We don't directly timeout streams that enter the * half-closed remote state, allowing immortal long * poll */ lws_mux_mark_immortal(h2n->swsi); lwsl_info("%s: %s: h2 stream entering long poll\n", __func__, lws_wsi_tag(h2n->swsi)); } else { h2n->swsi->h2.END_STREAM = !!(h2n->flags & LWS_H2_FLAG_END_STREAM); lwsl_debug("%s: hdr END_STREAM = %d\n",__func__, h2n->swsi->h2.END_STREAM); } /* no END_HEADERS means CONTINUATION must come */ h2n->swsi->h2.END_HEADERS = !!(h2n->flags & LWS_H2_FLAG_END_HEADERS); lwsl_info("%s: %s: END_HEADERS %d\n", __func__, lws_wsi_tag(h2n->swsi), h2n->swsi->h2.END_HEADERS); if (h2n->swsi->h2.END_HEADERS) h2n->cont_exp = 0; lwsl_debug("END_HEADERS %d\n", h2n->swsi->h2.END_HEADERS); break; cleanup_wsi: return 1; case LWS_H2_FRAME_TYPE_WINDOW_UPDATE: if (h2n->length != 4) { lws_h2_goaway(wsi, H2_ERR_FRAME_SIZE_ERROR, "window update frame not 4"); break; } lwsl_info("LWS_H2_FRAME_TYPE_WINDOW_UPDATE\n"); break; case LWS_H2_FRAME_TYPE_COUNT: if (h2n->length == 0) lws_h2_parse_end_of_frame(wsi); else lwsl_debug("%s: going on to deal with unknown frame remaining len %d\n", __func__, (unsigned int)h2n->length); break; default: lwsl_info("%s: ILLEGAL FRAME TYPE %d\n", __func__, h2n->type); h2n->type = LWS_H2_FRAME_TYPE_COUNT; /* ie, IGNORE */ break; } if (h2n->length == 0) h2n->frame_state = 0; return 0; } static const char * const method_names[] = { "GET", "POST", #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) "OPTIONS", "PUT", "PATCH", "DELETE", #endif "CONNECT", "HEAD" }; static unsigned char method_index[] = { WSI_TOKEN_GET_URI, WSI_TOKEN_POST_URI, #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) WSI_TOKEN_OPTIONS_URI, WSI_TOKEN_PUT_URI, WSI_TOKEN_PATCH_URI, WSI_TOKEN_DELETE_URI, #endif WSI_TOKEN_CONNECT, WSI_TOKEN_HEAD_URI, }; /* * The last byte of the whole frame has been handled. * Perform actions for frame completion. * * This is the crunch time for parsing that may have occured on a network * wsi with a pending partial send... we may call lws_http_action() to send * a response, conflicting with the partial. * * So in that case we change the wsi state and do the lws_http_action() in the * WRITABLE handler as a priority. */ static int lws_h2_parse_end_of_frame(struct lws *wsi) { struct lws_h2_netconn *h2n = wsi->h2.h2n; struct lws *eff_wsi = wsi; const char *p; int n; h2n->frame_state = 0; h2n->count = 0; if (h2n->sid) h2n->swsi = lws_wsi_mux_from_id(wsi, h2n->sid); if (h2n->sid > h2n->highest_sid) h2n->highest_sid = h2n->sid; if (h2n->collected_priority && (h2n->dep & ~(1u << 31)) == h2n->sid) { lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "depends on own sid"); return 0; } switch (h2n->type) { case LWS_H2_FRAME_TYPE_SETTINGS: #if defined(LWS_WITH_CLIENT) if (wsi->client_h2_alpn && !wsi->client_mux_migrated && !(h2n->flags & LWS_H2_FLAG_SETTINGS_ACK)) { struct lws_h2_protocol_send *pps; /* migrate original client ask on to substream 1 */ #if defined(LWS_WITH_FILE_OPS) wsi->http.fop_fd = NULL; #endif lwsl_info("%s: migrating\n", __func__); wsi->client_mux_migrated = 1; /* * we need to treat the headers from the upgrade as the * first job. So these need to get shifted to sid 1. */ lws_context_lock(wsi->a.context, "h2 mig"); lws_vhost_lock(wsi->a.vhost); h2n->swsi = __lws_wsi_server_new(wsi->a.vhost, wsi, 1); lws_vhost_unlock(wsi->a.vhost); lws_context_unlock(wsi->a.context); if (!h2n->swsi) return 1; h2n->sid = 1; assert(lws_wsi_mux_from_id(wsi, 1) == h2n->swsi); // lws_role_transition(wsi, LWSIFR_CLIENT, // LRS_H2_WAITING_TO_SEND_HEADERS, // &role_ops_h2); lws_role_transition(h2n->swsi, LWSIFR_CLIENT, LRS_H2_WAITING_TO_SEND_HEADERS, &role_ops_h2); /* pass on the initial headers to SID 1 */ h2n->swsi->http.ah = wsi->http.ah; #if defined(LWS_WITH_SYS_FAULT_INJECTION) lws_fi_import(&h2n->swsi->fic, &wsi->fic); #endif h2n->swsi->client_mux_substream = 1; h2n->swsi->client_h2_alpn = 1; #if defined(LWS_WITH_CLIENT) h2n->swsi->flags = wsi->flags; #if defined(LWS_WITH_CONMON) /* sid1 needs to represent the connection experience * ... we take over responsibility for the DNS list * copy as well */ h2n->swsi->conmon = wsi->conmon; h2n->swsi->conmon_datum = wsi->conmon_datum; h2n->swsi->sa46_peer = wsi->sa46_peer; wsi->conmon.dns_results_copy = NULL; #endif #endif /* CLIENT */ #if defined(LWS_WITH_SECURE_STREAMS) if (wsi->for_ss) { lws_ss_handle_t *h = (lws_ss_handle_t *)lws_get_opaque_user_data(wsi); h2n->swsi->for_ss = 1; wsi->for_ss = 0; if (h->wsi == wsi) h->wsi = h2n->swsi; } #endif h2n->swsi->a.protocol = wsi->a.protocol; if (h2n->swsi->user_space && !h2n->swsi->user_space_externally_allocated) lws_free(h2n->swsi->user_space); h2n->swsi->user_space = wsi->user_space; h2n->swsi->user_space_externally_allocated = wsi->user_space_externally_allocated; h2n->swsi->a.opaque_user_data = wsi->a.opaque_user_data; wsi->a.opaque_user_data = NULL; h2n->swsi->txc.manual_initial_tx_credit = wsi->txc.manual_initial_tx_credit; #if defined(LWS_WITH_TLS) lws_strncpy(h2n->swsi->alpn, wsi->alpn, sizeof(wsi->alpn)); #endif wsi->user_space = NULL; if (h2n->swsi->http.ah) h2n->swsi->http.ah->wsi = h2n->swsi; wsi->http.ah = NULL; lwsl_info("%s: MIGRATING nwsi %s -> swsi %s\n", __func__, lws_wsi_tag(wsi), lws_wsi_tag(h2n->swsi)); h2n->swsi->txc.tx_cr = (int32_t) h2n->peer_set.s[H2SET_INITIAL_WINDOW_SIZE]; lwsl_info("%s: initial tx credit on %s: %d\n", __func__, lws_wsi_tag(h2n->swsi), (int)h2n->swsi->txc.tx_cr); h2n->swsi->h2.initialized = 1; /* set our initial window size */ if (!wsi->h2.initialized) { wsi->txc.tx_cr = (int32_t) h2n->peer_set.s[H2SET_INITIAL_WINDOW_SIZE]; lwsl_info("%s: initial tx credit for us to " "write on nwsi %s: %d\n", __func__, lws_wsi_tag(wsi), (int)wsi->txc.tx_cr); wsi->h2.initialized = 1; } lws_callback_on_writable(h2n->swsi); if (!wsi->h2_acked_settings || !(wsi->flags & LCCSCF_H2_QUIRK_NGHTTP2_END_STREAM) ) { pps = lws_h2_new_pps(LWS_H2_PPS_ACK_SETTINGS); if (!pps) return 1; lws_pps_schedule(wsi, pps); lwsl_info("%s: SETTINGS ack PPS\n", __func__); wsi->h2_acked_settings = 1; } /* also attach any queued guys */ lws_wsi_mux_apply_queue(wsi); } #endif break; case LWS_H2_FRAME_TYPE_CONTINUATION: case LWS_H2_FRAME_TYPE_HEADERS: if (!h2n->swsi) break; /* service the http request itself */ if (h2n->last_action_dyntable_resize) { lws_h2_goaway(wsi, H2_ERR_COMPRESSION_ERROR, "dyntable resize last in headers"); break; } if (!h2n->swsi->h2.END_HEADERS) { /* we are not finished yet */ lwsl_info("witholding http action for continuation\n"); h2n->cont_exp_sid = h2n->sid; h2n->cont_exp = 1; break; } /* confirm the hpack stream state is reasonable for finishing */ if (h2n->hpack != HPKS_TYPE) { /* hpack incomplete */ lwsl_info("hpack incomplete %d (type %d, len %u)\n", h2n->hpack, h2n->type, (unsigned int)h2n->hpack_len); lws_h2_goaway(wsi, H2_ERR_COMPRESSION_ERROR, "hpack incomplete"); break; } /* this is the last part of HEADERS */ switch (h2n->swsi->h2.h2_state) { case LWS_H2_STATE_IDLE: lws_h2_state(h2n->swsi, LWS_H2_STATE_OPEN); break; case LWS_H2_STATE_RESERVED_REMOTE: lws_h2_state(h2n->swsi, LWS_H2_STATE_HALF_CLOSED_LOCAL); break; } lwsl_info("http req, %s, h2n->swsi=%s\n", lws_wsi_tag(wsi), lws_wsi_tag(h2n->swsi)); h2n->swsi->hdr_parsing_completed = 1; #if defined(LWS_WITH_CLIENT) if (h2n->swsi->client_mux_substream && lws_client_interpret_server_handshake(h2n->swsi)) { /* * This is more complicated than it looks, one exit from * interpret_server_handshake() is to do a close that * turns into a redirect. * * In that case, the wsi survives having being reset * and detached from any h2 identity. We need to get * our parents out from touching it any more */ lwsl_info("%s: cli int serv hs closed, or redir\n", __func__); return 2; } #endif if (lws_hdr_extant(h2n->swsi, WSI_TOKEN_HTTP_CONTENT_LENGTH)) { const char *simp = lws_hdr_simple_ptr(h2n->swsi, WSI_TOKEN_HTTP_CONTENT_LENGTH); if (!simp) /* coverity */ return 1; h2n->swsi->http.rx_content_length = (unsigned long long)atoll(simp); h2n->swsi->http.rx_content_remain = h2n->swsi->http.rx_content_length; h2n->swsi->http.content_length_given = 1; lwsl_info("setting rx_content_length %lld\n", (long long)h2n->swsi->http.rx_content_length); } { int n = 0, len; char buf[256]; const unsigned char *c; do { c = lws_token_to_string((enum lws_token_indexes)n); if (!c) { n++; continue; } len = lws_hdr_total_length(h2n->swsi, (enum lws_token_indexes)n); if (!len || len > (int)sizeof(buf) - 1) { n++; continue; } if (lws_hdr_copy(h2n->swsi, buf, sizeof buf, (enum lws_token_indexes)n) < 0) { lwsl_info(" %s !oversize!\n", (char *)c); } else { buf[sizeof(buf) - 1] = '\0'; lwsl_info(" %s = %s\n", (char *)c, buf); } n++; } while (c); } if (h2n->swsi->h2.h2_state == LWS_H2_STATE_HALF_CLOSED_REMOTE || h2n->swsi->h2.h2_state == LWS_H2_STATE_CLOSED) { lws_h2_goaway(wsi, H2_ERR_STREAM_CLOSED, "Banning service on CLOSED_REMOTE"); break; } switch (h2n->swsi->h2.h2_state) { case LWS_H2_STATE_IDLE: lws_h2_state(h2n->swsi, LWS_H2_STATE_OPEN); break; case LWS_H2_STATE_OPEN: if (h2n->swsi->h2.END_STREAM) lws_h2_state(h2n->swsi, LWS_H2_STATE_HALF_CLOSED_REMOTE); break; case LWS_H2_STATE_HALF_CLOSED_LOCAL: if (h2n->swsi->h2.END_STREAM) /* * action the END_STREAM */ lws_h2_state(h2n->swsi, LWS_H2_STATE_CLOSED); break; } #if defined(LWS_WITH_CLIENT) /* * If we already had the END_STREAM along with the END_HEADERS, * we have already transitioned to STATE_CLOSED and we are not * going to be doing anything further on this stream. * * In that case handle the transaction completion and * finalize the stream for the peer */ if (h2n->swsi->h2.h2_state == LWS_H2_STATE_CLOSED && h2n->swsi->client_mux_substream) { lws_h2_rst_stream(h2n->swsi, H2_ERR_NO_ERROR, "client done"); if (lws_http_transaction_completed_client(h2n->swsi)) lwsl_debug("tx completed returned close\n"); break; } if (h2n->swsi->client_mux_substream) { lwsl_info("%s: %s: headers: client path (h2 state %s)\n", __func__, lws_wsi_tag(wsi), h2_state_names[h2n->swsi->h2.h2_state]); break; } #endif if (!lws_hdr_total_length(h2n->swsi, WSI_TOKEN_HTTP_COLON_PATH) || !lws_hdr_total_length(h2n->swsi, WSI_TOKEN_HTTP_COLON_METHOD) || !lws_hdr_total_length(h2n->swsi, WSI_TOKEN_HTTP_COLON_SCHEME) || lws_hdr_total_length(h2n->swsi, WSI_TOKEN_HTTP_COLON_STATUS) || lws_hdr_extant(h2n->swsi, WSI_TOKEN_CONNECTION)) { lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "Pseudoheader checks"); break; } if (lws_hdr_extant(h2n->swsi, WSI_TOKEN_TE)) { n = lws_hdr_total_length(h2n->swsi, WSI_TOKEN_TE); if (n != 8 || !lws_hdr_simple_ptr(h2n->swsi, WSI_TOKEN_TE) || strncmp(lws_hdr_simple_ptr(h2n->swsi, WSI_TOKEN_TE), "trailers", (unsigned int)n)) { lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "Illegal transfer-encoding"); break; } } #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) lws_http_compression_validate(h2n->swsi); #endif p = lws_hdr_simple_ptr(h2n->swsi, WSI_TOKEN_HTTP_COLON_METHOD); /* * duplicate :path into the individual method uri header * index, so that it looks the same as h1 in the ah */ for (n = 0; n < (int)LWS_ARRAY_SIZE(method_names); n++) if (p && !strcasecmp(p, method_names[n])) { h2n->swsi->http.ah->frag_index[method_index[n]] = h2n->swsi->http.ah->frag_index[ WSI_TOKEN_HTTP_COLON_PATH]; break; } { lwsl_debug("%s: setting DEF_ACT from 0x%x\n", __func__, (unsigned int)h2n->swsi->wsistate); lwsi_set_state(h2n->swsi, LRS_DEFERRING_ACTION); lws_callback_on_writable(h2n->swsi); } break; case LWS_H2_FRAME_TYPE_DATA: lwsl_info("%s: DATA flags 0x%x\n", __func__, h2n->flags); if (!h2n->swsi) break; if (lws_hdr_total_length(h2n->swsi, WSI_TOKEN_HTTP_CONTENT_LENGTH) && h2n->swsi->h2.END_STREAM && h2n->swsi->http.rx_content_length && h2n->swsi->http.rx_content_remain) { lws_h2_rst_stream(h2n->swsi, H2_ERR_PROTOCOL_ERROR, "Not enough rx content"); break; } if (h2n->swsi->h2.END_STREAM && h2n->swsi->h2.h2_state == LWS_H2_STATE_OPEN) lws_h2_state(h2n->swsi, LWS_H2_STATE_HALF_CLOSED_REMOTE); if (h2n->swsi->h2.END_STREAM && h2n->swsi->h2.h2_state == LWS_H2_STATE_HALF_CLOSED_LOCAL) lws_h2_state(h2n->swsi, LWS_H2_STATE_CLOSED); #if defined(LWS_WITH_CLIENT) /* * client... remote END_STREAM implies we weren't going to * send anything else anyway. */ if (h2n->swsi->client_mux_substream && (h2n->flags & LWS_H2_FLAG_END_STREAM)) { lwsl_info("%s: %s: DATA: end stream\n", __func__, lws_wsi_tag(h2n->swsi)); if (h2n->swsi->h2.h2_state == LWS_H2_STATE_OPEN) { lws_h2_state(h2n->swsi, LWS_H2_STATE_HALF_CLOSED_REMOTE); // lws_h2_rst_stream(h2n->swsi, H2_ERR_NO_ERROR, // "client done"); // if (lws_http_transaction_completed_client(h2n->swsi)) // lwsl_debug("tx completed returned close\n"); } //if (h2n->swsi->h2.h2_state == LWS_H2_STATE_HALF_CLOSED_LOCAL) { lws_h2_state(h2n->swsi, LWS_H2_STATE_CLOSED); lws_h2_rst_stream(h2n->swsi, H2_ERR_NO_ERROR, "client done"); if (lws_http_transaction_completed_client(h2n->swsi)) lwsl_debug("tx completed returned close\n"); } } #endif break; case LWS_H2_FRAME_TYPE_PING: if (h2n->flags & LWS_H2_FLAG_SETTINGS_ACK) lws_validity_confirmed(wsi); else { /* they're sending us a ping request */ struct lws_h2_protocol_send *pps = lws_h2_new_pps(LWS_H2_PPS_PONG); if (!pps) return 1; lwsl_info("rx ping, preparing pong\n"); memcpy(pps->u.ping.ping_payload, h2n->ping_payload, 8); lws_pps_schedule(wsi, pps); } break; case LWS_H2_FRAME_TYPE_WINDOW_UPDATE: /* * We only have an unsigned 31-bit (positive) increment possible */ h2n->hpack_e_dep &= ~(1u << 31); lwsl_info("WINDOW_UPDATE: sid %u %u (0x%x)\n", (unsigned int)h2n->sid, (unsigned int)h2n->hpack_e_dep, (unsigned int)h2n->hpack_e_dep); if (h2n->sid) eff_wsi = h2n->swsi; if (!eff_wsi) { if (h2n->sid > h2n->highest_sid_opened) lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "alien sid"); break; /* ignore */ } if (eff_wsi->a.vhost->options & LWS_SERVER_OPTION_H2_JUST_FIX_WINDOW_UPDATE_OVERFLOW && (uint64_t)eff_wsi->txc.tx_cr + (uint64_t)h2n->hpack_e_dep > (uint64_t)0x7fffffff) h2n->hpack_e_dep = (uint32_t)(0x7fffffff - eff_wsi->txc.tx_cr); if ((uint64_t)eff_wsi->txc.tx_cr + (uint64_t)h2n->hpack_e_dep > (uint64_t)0x7fffffff) { lwsl_warn("%s: WINDOW_UPDATE 0x%llx + 0x%llx = 0x%llx, too high\n", __func__, (unsigned long long)eff_wsi->txc.tx_cr, (unsigned long long)h2n->hpack_e_dep, (unsigned long long)eff_wsi->txc.tx_cr + (unsigned long long)h2n->hpack_e_dep); if (h2n->sid) lws_h2_rst_stream(h2n->swsi, H2_ERR_FLOW_CONTROL_ERROR, "Flow control exceeded max"); else lws_h2_goaway(wsi, H2_ERR_FLOW_CONTROL_ERROR, "Flow control exceeded max"); break; } if (!h2n->hpack_e_dep) { lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "Zero length window update"); break; } n = eff_wsi->txc.tx_cr; eff_wsi->txc.tx_cr += (int32_t)h2n->hpack_e_dep; lws_wsi_txc_report_manual_txcr_in(eff_wsi, (int32_t)h2n->hpack_e_dep); lws_wsi_txc_describe(&eff_wsi->txc, "WINDOW_UPDATE in", eff_wsi->mux.my_sid); if (n <= 0 && eff_wsi->txc.tx_cr <= 0) /* it helps, but won't change sendability for anyone */ break; /* * It may have changed sendability (depends on SID 0 tx credit * too)... for us and any children waiting on us... reassess * blockage for all children first */ lws_start_foreach_ll(struct lws *, w, wsi->mux.child_list) { lws_callback_on_writable(w); } lws_end_foreach_ll(w, mux.sibling_list); if (eff_wsi->txc.skint && !lws_wsi_txc_check_skint(&eff_wsi->txc, lws_h2_tx_cr_get(eff_wsi))) /* * This one became un-skint, schedule a writeable * callback */ lws_callback_on_writable(eff_wsi); break; case LWS_H2_FRAME_TYPE_GOAWAY: lwsl_notice("GOAWAY: last sid %u, error 0x%08X, string '%s'\n", (unsigned int)h2n->goaway_last_sid, (unsigned int)h2n->goaway_err, h2n->goaway_str); return 1; case LWS_H2_FRAME_TYPE_RST_STREAM: lwsl_info("LWS_H2_FRAME_TYPE_RST_STREAM: sid %u: reason 0x%x\n", (unsigned int)h2n->sid, (unsigned int)h2n->hpack_e_dep); break; case LWS_H2_FRAME_TYPE_COUNT: /* IGNORING FRAME */ break; } return 0; } /* * This may want to send something on the network wsi, which may be in the * middle of a partial send. PPS sends are OK because they are queued to * go through the WRITABLE handler already. * * The read parser for the network wsi has no choice but to parse its stream * anyway, because otherwise it will not be able to get tx credit window * messages. * * Therefore if we will send non-PPS, ie, lws_http_action() for a stream * wsi, we must change its state and handle it as a priority in the * POLLOUT handler instead of writing it here. * * About closing... for the main network wsi, it should return nonzero to * close it all. If it needs to close an swsi, it can do it here. */ int lws_h2_parser(struct lws *wsi, unsigned char *in, lws_filepos_t _inlen, lws_filepos_t *inused) { struct lws_h2_netconn *h2n = wsi->h2.h2n; struct lws_h2_protocol_send *pps; unsigned char c, *oldin = in, *iend = in + (size_t)_inlen; int n, m; if (!h2n) goto fail; while (in < iend) { c = *in++; switch (lwsi_state(wsi)) { case LRS_H2_AWAIT_PREFACE: if (preface[h2n->count++] != c) goto fail; if (preface[h2n->count]) break; lwsl_info("http2: %s: established\n", lws_wsi_tag(wsi)); lwsi_set_state(wsi, LRS_H2_AWAIT_SETTINGS); lws_validity_confirmed(wsi); h2n->count = 0; wsi->txc.tx_cr = 65535; /* * we must send a settings frame -- empty one is OK... * that must be the first thing sent by server * and the peer must send a SETTINGS with ACK flag... */ pps = lws_h2_new_pps(LWS_H2_PPS_MY_SETTINGS); if (!pps) goto fail; lws_pps_schedule(wsi, pps); break; case LRS_H2_WAITING_TO_SEND_HEADERS: case LRS_ESTABLISHED: case LRS_H2_AWAIT_SETTINGS: if (h2n->frame_state != LWS_H2_FRAME_HEADER_LENGTH) goto try_frame_start; /* * post-header, preamble / payload / padding part */ h2n->count++; if (h2n->type == LWS_H2_FRAME_TYPE_COUNT) { /* IGNORING FRAME */ //lwsl_debug("%s: consuming for ignored %u %u\n", __func__, (unsigned int)h2n->count, (unsigned int)h2n->length); goto frame_end; } if (h2n->flags & LWS_H2_FLAG_PADDED && !h2n->pad_length) { /* * Get the padding count... actual padding is * at the end of the frame. */ h2n->padding = c; h2n->pad_length = 1; h2n->preamble++; if (h2n->padding > h2n->length - 1) lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "execssive padding"); break; /* we consumed this */ } if (h2n->flags & LWS_H2_FLAG_PRIORITY && !h2n->collected_priority) { /* going to be 5 preamble bytes */ lwsl_debug("PRIORITY FLAG: 0x%x\n", c); if (h2n->preamble++ - h2n->pad_length < 4) { h2n->dep = ((h2n->dep) << 8) | c; break; /* we consumed this */ } h2n->weight_temp = c; h2n->collected_priority = 1; lwsl_debug("PRI FL: dep 0x%x, weight 0x%02X\n", (unsigned int)h2n->dep, h2n->weight_temp); break; /* we consumed this */ } if (h2n->padding && h2n->count > (h2n->length - h2n->padding)) { if (c) { lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "nonzero padding"); break; } goto frame_end; } /* applies to wsi->h2.swsi which may be wsi */ switch(h2n->type) { case LWS_H2_FRAME_TYPE_SETTINGS: n = (int)(h2n->count - 1u - h2n->preamble) % LWS_H2_SETTINGS_LEN; h2n->one_setting[n] = c; if (n != LWS_H2_SETTINGS_LEN - 1) break; lws_h2_settings(wsi, &h2n->peer_set, h2n->one_setting, LWS_H2_SETTINGS_LEN); break; case LWS_H2_FRAME_TYPE_CONTINUATION: case LWS_H2_FRAME_TYPE_HEADERS: if (!h2n->swsi) break; if (lws_hpack_interpret(h2n->swsi, c)) { lwsl_info("%s: hpack failed\n", __func__); goto fail; } break; case LWS_H2_FRAME_TYPE_GOAWAY: switch (h2n->inside++) { case 0: case 1: case 2: case 3: h2n->goaway_last_sid <<= 8; h2n->goaway_last_sid |= c; h2n->goaway_str[0] = '\0'; break; case 4: case 5: case 6: case 7: h2n->goaway_err <<= 8; h2n->goaway_err |= c; break; default: if (h2n->inside - 9 < sizeof(h2n->goaway_str) - 1) h2n->goaway_str[ h2n->inside - 9] = (char)c; h2n->goaway_str[ sizeof(h2n->goaway_str) - 1] = '\0'; break; } break; case LWS_H2_FRAME_TYPE_DATA: // lwsl_info("%s: LWS_H2_FRAME_TYPE_DATA: fl 0x%x\n", // __func__, h2n->flags); /* * let the network wsi live a bit longer if * subs are active... our frame may take a long * time to chew through */ if (!wsi->immortal_substream_count) lws_set_timeout(wsi, PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE, wsi->a.vhost->keepalive_timeout ? wsi->a.vhost->keepalive_timeout : 31); if (!h2n->swsi) break; if (lws_buflist_next_segment_len( &h2n->swsi->buflist, NULL)) lwsl_info("%s: substream has pending\n", __func__); if (lwsi_role_http(h2n->swsi) && lwsi_state(h2n->swsi) == LRS_ESTABLISHED) { lwsi_set_state(h2n->swsi, LRS_BODY); lwsl_info("%s: %s to LRS_BODY\n", __func__, lws_wsi_tag(h2n->swsi)); } /* * in + length may cover multiple frames, we * can only consider the length of the DATA * in front of us */ if (lws_hdr_total_length(h2n->swsi, WSI_TOKEN_HTTP_CONTENT_LENGTH) && h2n->swsi->http.rx_content_length && h2n->swsi->http.rx_content_remain < h2n->length && /* last */ h2n->inside < h2n->length) { lwsl_warn("%s: %lu %lu %lu %lu\n", __func__, (unsigned long)h2n->swsi->http.rx_content_remain, (unsigned long)(lws_ptr_diff_size_t(iend, in) + 1), (unsigned long)h2n->inside, (unsigned long)h2n->length); /* unread data in frame */ lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "More rx than content_length told"); break; } /* * We operate on a frame. The RX we have at * hand may exceed the current frame. */ n = (int)lws_ptr_diff_size_t(iend, in) + 1; if (n > (int)(h2n->length - h2n->count + 1)) { if (h2n->count > h2n->length) goto close_swsi_and_return; n = (int)(h2n->length - h2n->count) + 1; lwsl_debug("---- restricting len to %d " "\n", n); } #if defined(LWS_WITH_CLIENT) if (h2n->swsi->client_mux_substream) { if (!h2n->swsi->a.protocol) { lwsl_err("%s: %p doesn't have protocol\n", __func__, lws_wsi_tag(h2n->swsi)); m = 1; } else { h2n->swsi->txc.peer_tx_cr_est -= n; wsi->txc.peer_tx_cr_est -= n; lws_wsi_txc_describe(&h2n->swsi->txc, __func__, h2n->swsi->mux.my_sid); m = user_callback_handle_rxflow( h2n->swsi->a.protocol->callback, h2n->swsi, LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ, h2n->swsi->user_space, in - 1, (unsigned int)n); } in += n - 1; h2n->inside += (unsigned int)n; h2n->count += (unsigned int)n - 1; if (m) { lwsl_info("RECEIVE_CLIENT_HTTP " "closed it\n"); goto close_swsi_and_return; } goto do_windows; } #endif if (lwsi_state(h2n->swsi) == LRS_DEFERRING_ACTION) { m = lws_buflist_append_segment( &h2n->swsi->buflist, in - 1, (unsigned int)n); if (m < 0) return -1; /* * Since we're in an open-ended * DEFERRING_ACTION, don't add this swsi * to the pt list of wsi holding buflist * content yet, we are not in a position * to consume it until we get out of * DEFERRING_ACTION. */ in += n - 1; h2n->inside += (unsigned int)n; h2n->count += (unsigned int)n - 1; lwsl_debug("%s: deferred %d\n", __func__, n); goto do_windows; } h2n->swsi->outer_will_close = 1; /* * choose the length for this go so that we end at * the frame boundary, in the case there is already * more waiting leave it for next time around */ n = lws_read_h1(h2n->swsi, in - 1, (unsigned int)n); // lwsl_notice("%s: lws_read_h1 %d\n", __func__, n); h2n->swsi->outer_will_close = 0; /* * can return 0 in POST body with * content len exhausted somehow. */ if (n < 0 || (!n && h2n->swsi->http.content_length_given && !lws_buflist_next_segment_len( &wsi->buflist, NULL))) { lwsl_info("%s: lws_read_h1 told %d %u / %u\n", __func__, n, (unsigned int)h2n->count, (unsigned int)h2n->length); in += h2n->length - h2n->count; h2n->inside = h2n->length; h2n->count = h2n->length - 1; //if (n < 0) // goto already_closed_swsi; goto close_swsi_and_return; } lwsl_info("%s: lws_read_h1 telling %d %u / %u\n", __func__, n, (unsigned int)h2n->count, (unsigned int)h2n->length); if (n) { in += (unsigned int)n - 1; h2n->inside += (unsigned int)n; h2n->count += (unsigned int)n - 1; h2n->swsi->txc.peer_tx_cr_est -= n; wsi->txc.peer_tx_cr_est -= n; } do_windows: #if defined(LWS_WITH_CLIENT) if (!(h2n->swsi->flags & LCCSCF_H2_MANUAL_RXFLOW)) #endif { /* * The default behaviour is we just keep * cranking the other side's tx credit * back up, for simple bulk transfer as * fast as we can take it */ m = n + 65536; /* update both the stream and nwsi */ lws_h2_update_peer_txcredit_thresh(h2n->swsi, h2n->sid, m, m); } #if defined(LWS_WITH_CLIENT) else { /* * If he's handling it himself, only * repair the nwsi credit but allow the * stream credit to run down until the * user code deals with it */ lws_h2_update_peer_txcredit(wsi, 0, n); h2n->swsi->txc.manual = 1; } #endif break; case LWS_H2_FRAME_TYPE_PRIORITY: if (h2n->count <= 4) { h2n->dep <<= 8; h2n->dep |= c; break; } h2n->weight_temp = c; lwsl_info("PRIORITY: dep 0x%x, weight 0x%02X\n", (unsigned int)h2n->dep, h2n->weight_temp); if ((h2n->dep & ~(1u << 31)) == h2n->sid) { lws_h2_goaway(wsi, H2_ERR_PROTOCOL_ERROR, "cant depend on own sid"); break; } break; case LWS_H2_FRAME_TYPE_RST_STREAM: h2n->hpack_e_dep <<= 8; h2n->hpack_e_dep |= c; break; case LWS_H2_FRAME_TYPE_PUSH_PROMISE: break; case LWS_H2_FRAME_TYPE_PING: if (h2n->flags & LWS_H2_FLAG_SETTINGS_ACK) { // ack } else { /* they're sending us a ping request */ if (h2n->count > 8) return 1; h2n->ping_payload[h2n->count - 1] = c; } break; case LWS_H2_FRAME_TYPE_WINDOW_UPDATE: h2n->hpack_e_dep <<= 8; h2n->hpack_e_dep |= c; break; case LWS_H2_FRAME_TYPE_COUNT: /* IGNORING FRAME */ //lwsl_debug("%s: consuming for ignored %u %u\n", __func__, (unsigned int)h2n->count, (unsigned int)h2n->length); h2n->count++; break; default: lwsl_notice("%s: unhandled frame type %d\n", __func__, h2n->type); goto fail; } frame_end: if (h2n->count > h2n->length) { lwsl_notice("%s: count > length %u %u (type %d)\n", __func__, (unsigned int)h2n->count, (unsigned int)h2n->length, h2n->type); } else if (h2n->count != h2n->length) break; /* * end of frame just happened */ n = lws_h2_parse_end_of_frame(wsi); if (n == 2) { *inused = (lws_filepos_t)lws_ptr_diff_size_t(in, oldin); return 2; } if (n) goto fail; break; try_frame_start: if (h2n->frame_state <= 8) { switch (h2n->frame_state++) { case 0: h2n->pad_length = 0; h2n->collected_priority = 0; h2n->padding = 0; h2n->preamble = 0; h2n->length = c; h2n->inside = 0; break; case 1: case 2: h2n->length <<= 8; h2n->length |= c; break; case 3: h2n->type = c; break; case 4: h2n->flags = c; break; case 5: case 6: case 7: case 8: h2n->sid <<= 8; h2n->sid |= c; break; } } if (h2n->frame_state == LWS_H2_FRAME_HEADER_LENGTH && lws_h2_parse_frame_header(wsi)) goto fail; break; default: if (h2n->type == LWS_H2_FRAME_TYPE_COUNT) { /* IGNORING FRAME */ //lwsl_debug("%s: consuming for ignored %u %u\n", __func__, (unsigned int)h2n->count, (unsigned int)h2n->length); h2n->count++; } break; } } *inused = (lws_filepos_t)lws_ptr_diff_size_t(in, oldin); return 0; close_swsi_and_return: lws_close_free_wsi(h2n->swsi, 0, "close_swsi_and_return"); h2n->swsi = NULL; h2n->frame_state = 0; h2n->count = 0; // already_closed_swsi: *inused = (lws_filepos_t)lws_ptr_diff_size_t(in, oldin); return 2; fail: *inused = (lws_filepos_t)lws_ptr_diff_size_t(in, oldin); return 1; } #if defined(LWS_WITH_CLIENT) int lws_h2_client_handshake(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; uint8_t *buf, *start, *p, *p1, *end; char *meth = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_METHOD), *uri = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_URI), *simp; struct lws *nwsi = lws_get_network_wsi(wsi); const char *path = "/"; int n, m; /* * The identifier of a newly established stream MUST be numerically * greater than all streams that the initiating endpoint has opened or * reserved. This governs streams that are opened using a HEADERS frame * and streams that are reserved using PUSH_PROMISE. An endpoint that * receives an unexpected stream identifier MUST respond with a * connection error (Section 5.4.1) of type PROTOCOL_ERROR. */ unsigned int sid = nwsi->h2.h2n->highest_sid_opened + 2; lwsl_debug("%s\n", __func__); /* * We MUST allocate our sid here at the point we're about to send the * stream open. It's because we don't know the order in which multiple * open streams will send their headers... in h2, sending the headers * is the point the stream is opened. The peer requires that we only * open streams in ascending sid order */ wsi->mux.my_sid = nwsi->h2.h2n->highest_sid_opened = sid; lwsl_info("%s: %s: assigning SID %d at header send\n", __func__, lws_wsi_tag(wsi), sid); lwsl_info("%s: CLIENT_WAITING_TO_SEND_HEADERS: pollout (sid %d)\n", __func__, wsi->mux.my_sid); p = start = buf = pt->serv_buf + LWS_PRE; end = start + (wsi->a.context->pt_serv_buf_size / 2) - LWS_PRE - 1; /* it's time for us to send our client stream headers */ if (!meth) meth = "GET"; /* h2 pseudoheaders must be in a bunch at the start */ if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_COLON_METHOD, (unsigned char *)meth, (int)strlen(meth), &p, end)) goto fail_length; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_COLON_SCHEME, (unsigned char *)"https", 5, &p, end)) goto fail_length; n = lws_hdr_total_length(wsi, _WSI_TOKEN_CLIENT_URI); if (n) path = uri; else if (wsi->stash && wsi->stash->cis[CIS_PATH]) { path = wsi->stash->cis[CIS_PATH]; n = (int)strlen(path); } else n = 1; if (n > 1 && path[0] == '/' && path[1] == '/') { path++; n--; } if (n && lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_COLON_PATH, (unsigned char *)path, n, &p, end)) goto fail_length; n = lws_hdr_total_length(wsi, _WSI_TOKEN_CLIENT_HOST); simp = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_HOST); if (!n && wsi->stash && wsi->stash->cis[CIS_ADDRESS]) { n = (int)strlen(wsi->stash->cis[CIS_ADDRESS]); simp = wsi->stash->cis[CIS_ADDRESS]; } // n = lws_hdr_total_length(wsi, _WSI_TOKEN_CLIENT_ORIGIN); // simp = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_ORIGIN); #if 0 if (n && simp && lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_COLON_AUTHORITY, (unsigned char *)simp, n, &p, end)) goto fail_length; #endif if (/*!wsi->client_h2_alpn && */n && simp && lws_add_http_header_by_token(wsi, WSI_TOKEN_HOST, (unsigned char *)simp, n, &p, end)) goto fail_length; if (wsi->flags & LCCSCF_HTTP_MULTIPART_MIME) { p1 = lws_http_multipart_headers(wsi, p); if (!p1) goto fail_length; p = p1; } if (wsi->flags & LCCSCF_HTTP_X_WWW_FORM_URLENCODED) { if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE, (unsigned char *)"application/x-www-form-urlencoded", 33, &p, end)) goto fail_length; lws_client_http_body_pending(wsi, 1); } /* give userland a chance to append, eg, cookies */ #if defined(LWS_WITH_CACHE_NSCOOKIEJAR) && defined(LWS_WITH_CLIENT) if (wsi->flags & LCCSCF_CACHE_COOKIES) lws_cookie_send_cookies(wsi, (char **)&p, (char *)end); #endif if (wsi->a.protocol->callback(wsi, LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER, wsi->user_space, &p, lws_ptr_diff_size_t(end, p) - 12)) goto fail_length; if (lws_finalize_http_header(wsi, &p, end)) goto fail_length; m = LWS_WRITE_HTTP_HEADERS; #if defined(LWS_WITH_CLIENT) /* below is not needed in spec, indeed it destroys the long poll * feature, but required by nghttp2 */ if ((wsi->flags & LCCSCF_H2_QUIRK_NGHTTP2_END_STREAM) && !(wsi->client_http_body_pending || lws_has_buffered_out(wsi))) m |= LWS_WRITE_H2_STREAM_END; #endif // lwsl_hexdump_notice(start, p - start); n = lws_write(wsi, start, lws_ptr_diff_size_t(p, start), (enum lws_write_protocol)m); if (n != lws_ptr_diff(p, start)) { lwsl_err("_write returned %d from %ld\n", n, (long)(p - start)); return -1; } /* * Normally let's charge up the peer tx credit a bit. But if * MANUAL_REFLOW is set, just set it to the initial credit given in * the client create info */ n = 4 * 65536; if (wsi->flags & LCCSCF_H2_MANUAL_RXFLOW) { n = wsi->txc.manual_initial_tx_credit; wsi->txc.manual = 1; } if (lws_h2_update_peer_txcredit(wsi, wsi->mux.my_sid, n)) return 1; lws_h2_state(wsi, LWS_H2_STATE_OPEN); lwsi_set_state(wsi, LRS_ESTABLISHED); if (wsi->flags & LCCSCF_HTTP_MULTIPART_MIME) lws_callback_on_writable(wsi); return 0; fail_length: lwsl_err("Client hdrs too long: incr context info.pt_serv_buf_size\n"); return -1; } #endif #if defined(LWS_ROLE_WS) && defined(LWS_WITH_SERVER) int lws_h2_ws_handshake(struct lws *wsi) { uint8_t buf[LWS_PRE + 2048], *p = buf + LWS_PRE, *start = p, *end = &buf[sizeof(buf) - 1]; const struct lws_http_mount *hit; const char * uri_ptr; size_t m; int n; if (lws_add_http_header_status(wsi, HTTP_STATUS_OK, &p, end)) return -1; if (lws_hdr_total_length(wsi, WSI_TOKEN_PROTOCOL) > 64) return -1; if (wsi->proxied_ws_parent && wsi->child_list) { if (lws_hdr_simple_ptr(wsi, WSI_TOKEN_PROTOCOL)) { if (lws_add_http_header_by_token(wsi, WSI_TOKEN_PROTOCOL, (uint8_t *)lws_hdr_simple_ptr(wsi, WSI_TOKEN_PROTOCOL), (int)strlen(lws_hdr_simple_ptr(wsi, WSI_TOKEN_PROTOCOL)), &p, end)) return -1; } } else { /* we can only return the protocol header if: * - one came in, and ... */ if (lws_hdr_total_length(wsi, WSI_TOKEN_PROTOCOL) && /* - it is not an empty string */ wsi->a.protocol->name && wsi->a.protocol->name[0]) { #if defined(LWS_WITH_SECURE_STREAMS) && defined(LWS_WITH_SERVER) /* * This is the h2 version of server-ws.c understanding that it * did the ws upgrade on a ss server object, therefore it needs * to pass back to the peer the policy ws-protocol name, not * the generic ss-ws.c protocol name */ if (wsi->a.vhost && wsi->a.vhost->ss_handle && wsi->a.vhost->ss_handle->policy->u.http.u.ws.subprotocol) { lws_ss_handle_t *h = (lws_ss_handle_t *)wsi->a.opaque_user_data; lwsl_notice("%s: Server SS %s .wsi %s switching to ws protocol\n", __func__, lws_ss_tag(h), lws_wsi_tag(h->wsi)); wsi->a.protocol = &protocol_secstream_ws; /* * inform the SS user code that this has done a one-way * upgrade to some other protocol... it will likely * want to treat subsequent payloads differently */ lws_ss_event_helper(h, LWSSSCS_SERVER_UPGRADE); lws_mux_mark_immortal(wsi); if (lws_add_http_header_by_token(wsi, WSI_TOKEN_PROTOCOL, (unsigned char *)wsi->a.vhost->ss_handle->policy-> u.http.u.ws.subprotocol, (int)strlen(wsi->a.vhost->ss_handle->policy-> u.http.u.ws.subprotocol), &p, end)) return -1; } else #endif if (lws_add_http_header_by_token(wsi, WSI_TOKEN_PROTOCOL, (unsigned char *)wsi->a.protocol->name, (int)strlen(wsi->a.protocol->name), &p, end)) return -1; } } if (lws_finalize_http_header(wsi, &p, end)) return -1; m = lws_ptr_diff_size_t(p, start); // lwsl_hexdump_notice(start, m); n = lws_write(wsi, start, m, LWS_WRITE_HTTP_HEADERS); if (n != (int)m) { lwsl_err("_write returned %d from %d\n", n, (int)m); return -1; } /* * alright clean up, set our state to generic ws established, the * mode / state of the nwsi will get the h2 processing done. */ lwsi_set_state(wsi, LRS_ESTABLISHED); wsi->lws_rx_parse_state = 0; // ==LWS_RXPS_NEW; uri_ptr = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_PATH); n = lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_COLON_PATH); hit = lws_find_mount(wsi, uri_ptr, n); if (hit && hit->cgienv && wsi->a.protocol->callback(wsi, LWS_CALLBACK_HTTP_PMO, wsi->user_space, (void *)hit->cgienv, 0)) return 1; lws_validity_confirmed(wsi); return 0; } #endif int lws_read_h2(struct lws *wsi, unsigned char *buf, lws_filepos_t len) { unsigned char *oldbuf = buf; // lwsl_notice("%s: h2 path: wsistate 0x%x len %d\n", __func__, // wsi->wsistate, (int)len); /* * wsi here is always the network connection wsi, not a stream * wsi. Once we unpicked the framing we will find the right * swsi and make it the target of the frame. * * If it's ws over h2, the nwsi will get us here to do the h2 * processing, and that will call us back with the swsi + * ESTABLISHED state for the inner payload, handled in a later * case. */ while (len) { lws_filepos_t body_chunk_len = 0; int m; /* * we were accepting input but now we stopped doing so */ if (lws_is_flowcontrolled(wsi)) { lws_rxflow_cache(wsi, buf, 0, (size_t)len); buf += len; break; } /* * lws_h2_parser() may send something; when it gets the * whole frame, it will want to perform some action * involving a reply. But we may be in a partial send * situation on the network wsi... * * Even though we may be in a partial send and unable to * send anything new, we still have to parse the network * wsi in order to gain tx credit to send, which is * potentially necessary to clear the old partial send. * * ALL network wsi-specific frames are sent by PPS * already, these are sent as a priority on the writable * handler, and so respect partial sends. The only * problem is when a stream wsi wants to send an, eg, * reply headers frame in response to the parsing * we will do now... the *stream wsi* must stall in a * different state until it is able to do so from a * priority on the WRITABLE callback, same way that * file transfers operate. */ m = lws_h2_parser(wsi, buf, len, &body_chunk_len); if (m && m != 2) { lwsl_debug("%s: http2_parser bail: %d\n", __func__, m); lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "lws_read_h2 bail"); return -1; } if (m == 2) { /* swsi has been closed */ buf += body_chunk_len; break; } buf += body_chunk_len; len -= body_chunk_len; } return lws_ptr_diff(buf, oldbuf); } int lws_h2_client_stream_long_poll_rxonly(struct lws *wsi) { if (!wsi->mux_substream) return 1; /* * Elect to send an empty DATA with END_STREAM, to force the stream * into HALF_CLOSED LOCAL */ wsi->h2.long_poll = 1; wsi->h2.send_END_STREAM = 1; // lws_header_table_detach(wsi, 0); lws_callback_on_writable(wsi); return 0; } libwebsockets-4.3.5/lib/roles/h2/huftable.h000066400000000000000000000724001476025525100205430ustar00rootroot00000000000000static unsigned char lextable[] = { /* pos 0000: 0 */ /* 0 */ 0x42 /* (to 0x0084 state 98) */, /* 1 */ 0x01 /* (to 0x0002 state 1) */, /* pos 0002: 1 */ /* 0 */ 0x5C /* (to 0x00BA state 151) */, /* 1 */ 0x01 /* (to 0x0004 state 2) */, /* pos 0004: 2 */ /* 0 */ 0x66 /* (to 0x00D0 state 173) */, /* 1 */ 0x01 /* (to 0x0006 state 3) */, /* pos 0006: 3 */ /* 0 */ 0x74 /* (to 0x00EE state 204) */, /* 1 */ 0x01 /* (to 0x0008 state 4) */, /* pos 0008: 4 */ /* 0 */ 0x8C /* (to 0x0120 state 263) */, /* 1 */ 0x01 /* (to 0x000A state 5) */, /* pos 000a: 5 */ /* 0 */ 0x46 /* (to 0x0096 state 113) */, /* 1 */ 0x01 /* (to 0x000C state 6) */, /* pos 000c: 6 */ /* 0 */ 0x75 /* (to 0x00F6 state 211) */, /* 1 */ 0x01 /* (to 0x000E state 7) */, /* pos 000e: 7 */ /* 0 */ 0x40 /* (to 0x008E state 104) */, /* 1 */ 0x01 /* (to 0x0010 state 8) */, /* pos 0010: 8 */ /* 0 */ 0x45 /* (to 0x009A state 116) */, /* 1 */ 0x01 /* (to 0x0012 state 9) */, /* pos 0012: 9 */ /* 0 */ 0x40 /* (to 0x0092 state 108) */, /* 1 */ 0x01 /* (to 0x0014 state 10) */, /* pos 0014: 10 */ /* 0 */ 0x01 /* (to 0x0016 state 11) */, /* 1 */ 0x03 /* (to 0x001A state 14) */, /* pos 0016: 11 */ /* 0 */ 0x01 /* (to 0x0018 state 12) */, /* 1 */ 0x5B /* (to 0x00CC state 166) */, /* pos 0018: 12 */ /* terminal 0 */ 0x00, /* terminal 36 */ 0x24, /* pos 001a: 14 */ /* 0 */ 0x72 /* (to 0x00FE state 220) */, /* 1 */ 0x01 /* (to 0x001C state 15) */, /* pos 001c: 15 */ /* 0 */ 0x72 /* (to 0x0100 state 222) */, /* 1 */ 0x01 /* (to 0x001E state 16) */, /* pos 001e: 16 */ /* 0 */ 0x53 /* (to 0x00C4 state 158) */, /* 1 */ 0x01 /* (to 0x0020 state 17) */, /* pos 0020: 17 */ /* terminal 123 */ 0x7B, /* 1 */ 0x01 /* (to 0x0022 state 18) */, /* pos 0022: 18 */ /* 0 */ 0x6B /* (to 0x00F8 state 216) */, /* 1 */ 0x01 /* (to 0x0024 state 19) */, /* pos 0024: 19 */ /* 0 */ 0x84 /* (to 0x012C state 279) */, /* 1 */ 0x01 /* (to 0x0026 state 20) */, /* pos 0026: 20 */ /* 0 */ 0x01 /* (to 0x0028 state 21) */, /* 1 */ 0x06 /* (to 0x0032 state 27) */, /* pos 0028: 21 */ /* 0 */ 0xB3 /* (to 0x018E state 377) */, /* 1 */ 0x01 /* (to 0x002A state 22) */, /* pos 002a: 22 */ /* 0 */ 0xC3 /* (to 0x01B0 state 414) */, /* 1 */ 0x01 /* (to 0x002C state 23) */, /* pos 002c: 23 */ /* 0 */ 0x01 /* (to 0x002E state 24) */, /* 1 */ 0x8C /* (to 0x0144 state 301) */, /* pos 002e: 24 */ /* 0 */ 0x01 /* (to 0x0030 state 25) */, /* 1 */ 0x8A /* (to 0x0142 state 298) */, /* pos 0030: 25 */ /* terminal 1 */ 0x01, /* terminal 135 */ 0x87, /* pos 0032: 27 */ /* 0 */ 0x8E /* (to 0x014E state 314) */, /* 1 */ 0x01 /* (to 0x0034 state 28) */, /* pos 0034: 28 */ /* 0 */ 0x0F /* (to 0x0052 state 50) */, /* 1 */ 0x01 /* (to 0x0036 state 29) */, /* pos 0036: 29 */ /* 0 */ 0xA4 /* (to 0x017E state 362) */, /* 1 */ 0x01 /* (to 0x0038 state 30) */, /* pos 0038: 30 */ /* 0 */ 0xB7 /* (to 0x01A6 state 403) */, /* 1 */ 0x01 /* (to 0x003A state 31) */, /* pos 003a: 31 */ /* 0 */ 0xC8 /* (to 0x01CA state 440) */, /* 1 */ 0x01 /* (to 0x003C state 32) */, /* pos 003c: 32 */ /* 0 */ 0x01 /* (to 0x003E state 33) */, /* 1 */ 0x0F /* (to 0x005A state 55) */, /* pos 003e: 33 */ /* 0 */ 0x01 /* (to 0x0040 state 34) */, /* 1 */ 0x07 /* (to 0x004C state 46) */, /* pos 0040: 34 */ /* 0 */ 0x01 /* (to 0x0042 state 35) */, /* 1 */ 0x03 /* (to 0x0046 state 39) */, /* pos 0042: 35 */ /* terminal 254 */ 0xFE, /* 1 */ 0x01 /* (to 0x0044 state 36) */, /* pos 0044: 36 */ /* terminal 2 */ 0x02, /* terminal 3 */ 0x03, /* pos 0046: 39 */ /* 0 */ 0x01 /* (to 0x0048 state 40) */, /* 1 */ 0x02 /* (to 0x004A state 43) */, /* pos 0048: 40 */ /* terminal 4 */ 0x04, /* terminal 5 */ 0x05, /* pos 004a: 43 */ /* terminal 6 */ 0x06, /* terminal 7 */ 0x07, /* pos 004c: 46 */ /* 0 */ 0x01 /* (to 0x004E state 47) */, /* 1 */ 0x0E /* (to 0x0068 state 67) */, /* pos 004e: 47 */ /* 0 */ 0x01 /* (to 0x0050 state 48) */, /* 1 */ 0x0C /* (to 0x0066 state 63) */, /* pos 0050: 48 */ /* terminal 8 */ 0x08, /* terminal 11 */ 0x0B, /* pos 0052: 50 */ /* 0 */ 0xA7 /* (to 0x01A0 state 396) */, /* 1 */ 0x01 /* (to 0x0054 state 51) */, /* pos 0054: 51 */ /* 0 */ 0x01 /* (to 0x0056 state 52) */, /* 1 */ 0x7B /* (to 0x014A state 309) */, /* pos 0056: 52 */ /* terminal 239 */ 0xEF, /* 1 */ 0x01 /* (to 0x0058 state 53) */, /* pos 0058: 53 */ /* terminal 9 */ 0x09, /* terminal 142 */ 0x8E, /* pos 005a: 55 */ /* 0 */ 0x0A /* (to 0x006E state 74) */, /* 1 */ 0x01 /* (to 0x005C state 56) */, /* pos 005c: 56 */ /* 0 */ 0x11 /* (to 0x007E state 91) */, /* 1 */ 0x01 /* (to 0x005E state 57) */, /* pos 005e: 57 */ /* 0 */ 0x64 /* (to 0x0126 state 274) */, /* 1 */ 0x01 /* (to 0x0060 state 58) */, /* pos 0060: 58 */ /* terminal 249 */ 0xF9, /* 1 */ 0x01 /* (to 0x0062 state 59) */, /* pos 0062: 59 */ /* 0 */ 0x01 /* (to 0x0064 state 60) */, /* 1 */ 0x0A /* (to 0x0076 state 81) */, /* pos 0064: 60 */ /* terminal 10 */ 0x0A, /* terminal 13 */ 0x0D, /* pos 0066: 63 */ /* terminal 12 */ 0x0C, /* terminal 14 */ 0x0E, /* pos 0068: 67 */ /* 0 */ 0x01 /* (to 0x006A state 68) */, /* 1 */ 0x02 /* (to 0x006C state 71) */, /* pos 006a: 68 */ /* terminal 15 */ 0x0F, /* terminal 16 */ 0x10, /* pos 006c: 71 */ /* terminal 17 */ 0x11, /* terminal 18 */ 0x12, /* pos 006e: 74 */ /* 0 */ 0x01 /* (to 0x0070 state 75) */, /* 1 */ 0x05 /* (to 0x0078 state 84) */, /* pos 0070: 75 */ /* 0 */ 0x01 /* (to 0x0072 state 76) */, /* 1 */ 0x02 /* (to 0x0074 state 79) */, /* pos 0072: 76 */ /* terminal 19 */ 0x13, /* terminal 20 */ 0x14, /* pos 0074: 79 */ /* terminal 21 */ 0x15, /* terminal 23 */ 0x17, /* pos 0076: 81 */ /* terminal 22 */ 0x16, /* terminal 256 */ 0x00, /* pos 0078: 84 */ /* 0 */ 0x01 /* (to 0x007A state 85) */, /* 1 */ 0x02 /* (to 0x007C state 88) */, /* pos 007a: 85 */ /* terminal 24 */ 0x18, /* terminal 25 */ 0x19, /* pos 007c: 88 */ /* terminal 26 */ 0x1A, /* terminal 27 */ 0x1B, /* pos 007e: 91 */ /* 0 */ 0x01 /* (to 0x0080 state 92) */, /* 1 */ 0x02 /* (to 0x0082 state 95) */, /* pos 0080: 92 */ /* terminal 28 */ 0x1C, /* terminal 29 */ 0x1D, /* pos 0082: 95 */ /* terminal 30 */ 0x1E, /* terminal 31 */ 0x1F, /* pos 0084: 98 */ /* 0 */ 0x13 /* (to 0x00AA state 133) */, /* 1 */ 0x01 /* (to 0x0086 state 99) */, /* pos 0086: 99 */ /* 0 */ 0x01 /* (to 0x0088 state 100) */, /* 1 */ 0x0F /* (to 0x00A4 state 129) */, /* pos 0088: 100 */ /* 0 */ 0x4B /* (to 0x011E state 258) */, /* 1 */ 0x01 /* (to 0x008A state 101) */, /* pos 008a: 101 */ /* 0 */ 0x01 /* (to 0x008C state 102) */, /* 1 */ 0x0C /* (to 0x00A2 state 126) */, /* pos 008c: 102 */ /* terminal 32 */ 0x20, /* terminal 37 */ 0x25, /* pos 008e: 104 */ /* 0 */ 0x01 /* (to 0x0090 state 105) */, /* 1 */ 0x08 /* (to 0x009E state 119) */, /* pos 0090: 105 */ /* terminal 33 */ 0x21, /* terminal 34 */ 0x22, /* pos 0092: 108 */ /* terminal 124 */ 0x7C, /* 1 */ 0x01 /* (to 0x0094 state 109) */, /* pos 0094: 109 */ /* terminal 35 */ 0x23, /* terminal 62 */ 0x3E, /* pos 0096: 113 */ /* 0 */ 0x01 /* (to 0x0098 state 114) */, /* 1 */ 0x05 /* (to 0x00A0 state 124) */, /* pos 0098: 114 */ /* terminal 38 */ 0x26, /* terminal 42 */ 0x2A, /* pos 009a: 116 */ /* terminal 63 */ 0x3F, /* 1 */ 0x01 /* (to 0x009C state 117) */, /* pos 009c: 117 */ /* terminal 39 */ 0x27, /* terminal 43 */ 0x2B, /* pos 009e: 119 */ /* terminal 40 */ 0x28, /* terminal 41 */ 0x29, /* pos 00a0: 124 */ /* terminal 44 */ 0x2C, /* terminal 59 */ 0x3B, /* pos 00a2: 126 */ /* terminal 45 */ 0x2D, /* terminal 46 */ 0x2E, /* pos 00a4: 129 */ /* 0 */ 0x01 /* (to 0x00A6 state 130) */, /* 1 */ 0x08 /* (to 0x00B4 state 144) */, /* pos 00a6: 130 */ /* 0 */ 0x01 /* (to 0x00A8 state 131) */, /* 1 */ 0x06 /* (to 0x00B2 state 141) */, /* pos 00a8: 131 */ /* terminal 47 */ 0x2F, /* terminal 51 */ 0x33, /* pos 00aa: 133 */ /* 0 */ 0x01 /* (to 0x00AC state 134) */, /* 1 */ 0x2D /* (to 0x0104 state 229) */, /* pos 00ac: 134 */ /* 0 */ 0x01 /* (to 0x00AE state 135) */, /* 1 */ 0x02 /* (to 0x00B0 state 138) */, /* pos 00ae: 135 */ /* terminal 48 */ 0x30, /* terminal 49 */ 0x31, /* pos 00b0: 138 */ /* terminal 50 */ 0x32, /* terminal 97 */ 0x61, /* pos 00b2: 141 */ /* terminal 52 */ 0x34, /* terminal 53 */ 0x35, /* pos 00b4: 144 */ /* 0 */ 0x01 /* (to 0x00B6 state 145) */, /* 1 */ 0x02 /* (to 0x00B8 state 148) */, /* pos 00b6: 145 */ /* terminal 54 */ 0x36, /* terminal 55 */ 0x37, /* pos 00b8: 148 */ /* terminal 56 */ 0x38, /* terminal 57 */ 0x39, /* pos 00ba: 151 */ /* 0 */ 0x06 /* (to 0x00C6 state 160) */, /* 1 */ 0x01 /* (to 0x00BC state 152) */, /* pos 00bc: 152 */ /* 0 */ 0x2C /* (to 0x0114 state 246) */, /* 1 */ 0x01 /* (to 0x00BE state 153) */, /* pos 00be: 153 */ /* 0 */ 0x2F /* (to 0x011C state 256) */, /* 1 */ 0x01 /* (to 0x00C0 state 154) */, /* pos 00c0: 154 */ /* 0 */ 0x01 /* (to 0x00C2 state 155) */, /* 1 */ 0x07 /* (to 0x00CE state 170) */, /* pos 00c2: 155 */ /* terminal 58 */ 0x3A, /* terminal 66 */ 0x42, /* pos 00c4: 158 */ /* terminal 60 */ 0x3C, /* terminal 96 */ 0x60, /* pos 00c6: 160 */ /* 0 */ 0x01 /* (to 0x00C8 state 161) */, /* 1 */ 0x21 /* (to 0x0108 state 232) */, /* pos 00c8: 161 */ /* 0 */ 0x01 /* (to 0x00CA state 162) */, /* 1 */ 0x1D /* (to 0x0102 state 224) */, /* pos 00ca: 162 */ /* terminal 61 */ 0x3D, /* terminal 65 */ 0x41, /* pos 00cc: 166 */ /* terminal 64 */ 0x40, /* terminal 91 */ 0x5B, /* pos 00ce: 170 */ /* terminal 67 */ 0x43, /* terminal 68 */ 0x44, /* pos 00d0: 173 */ /* 0 */ 0x01 /* (to 0x00D2 state 174) */, /* 1 */ 0x08 /* (to 0x00E0 state 189) */, /* pos 00d2: 174 */ /* 0 */ 0x01 /* (to 0x00D4 state 175) */, /* 1 */ 0x04 /* (to 0x00DA state 182) */, /* pos 00d4: 175 */ /* 0 */ 0x01 /* (to 0x00D6 state 176) */, /* 1 */ 0x02 /* (to 0x00D8 state 179) */, /* pos 00d6: 176 */ /* terminal 69 */ 0x45, /* terminal 70 */ 0x46, /* pos 00d8: 179 */ /* terminal 71 */ 0x47, /* terminal 72 */ 0x48, /* pos 00da: 182 */ /* 0 */ 0x01 /* (to 0x00DC state 183) */, /* 1 */ 0x02 /* (to 0x00DE state 186) */, /* pos 00dc: 183 */ /* terminal 73 */ 0x49, /* terminal 74 */ 0x4A, /* pos 00de: 186 */ /* terminal 75 */ 0x4B, /* terminal 76 */ 0x4C, /* pos 00e0: 189 */ /* 0 */ 0x01 /* (to 0x00E2 state 190) */, /* 1 */ 0x04 /* (to 0x00E8 state 197) */, /* pos 00e2: 190 */ /* 0 */ 0x01 /* (to 0x00E4 state 191) */, /* 1 */ 0x02 /* (to 0x00E6 state 194) */, /* pos 00e4: 191 */ /* terminal 77 */ 0x4D, /* terminal 78 */ 0x4E, /* pos 00e6: 194 */ /* terminal 79 */ 0x4F, /* terminal 80 */ 0x50, /* pos 00e8: 197 */ /* 0 */ 0x01 /* (to 0x00EA state 198) */, /* 1 */ 0x02 /* (to 0x00EC state 201) */, /* pos 00ea: 198 */ /* terminal 81 */ 0x51, /* terminal 82 */ 0x52, /* pos 00ec: 201 */ /* terminal 83 */ 0x53, /* terminal 84 */ 0x54, /* pos 00ee: 204 */ /* 0 */ 0x01 /* (to 0x00F0 state 205) */, /* 1 */ 0x11 /* (to 0x0110 state 242) */, /* pos 00f0: 205 */ /* 0 */ 0x01 /* (to 0x00F2 state 206) */, /* 1 */ 0x02 /* (to 0x00F4 state 209) */, /* pos 00f2: 206 */ /* terminal 85 */ 0x55, /* terminal 86 */ 0x56, /* pos 00f4: 209 */ /* terminal 87 */ 0x57, /* terminal 89 */ 0x59, /* pos 00f6: 211 */ /* terminal 88 */ 0x58, /* terminal 90 */ 0x5A, /* pos 00f8: 216 */ /* 0 */ 0x01 /* (to 0x00FA state 217) */, /* 1 */ 0x1F /* (to 0x0136 state 286) */, /* pos 00fa: 217 */ /* 0 */ 0x01 /* (to 0x00FC state 218) */, /* 1 */ 0x17 /* (to 0x0128 state 276) */, /* pos 00fc: 218 */ /* terminal 92 */ 0x5C, /* terminal 195 */ 0xC3, /* pos 00fe: 220 */ /* terminal 93 */ 0x5D, /* terminal 126 */ 0x7E, /* pos 0100: 222 */ /* terminal 94 */ 0x5E, /* terminal 125 */ 0x7D, /* pos 0102: 224 */ /* terminal 95 */ 0x5F, /* terminal 98 */ 0x62, /* pos 0104: 229 */ /* 0 */ 0x01 /* (to 0x0106 state 230) */, /* 1 */ 0x05 /* (to 0x010E state 240) */, /* pos 0106: 230 */ /* terminal 99 */ 0x63, /* terminal 101 */ 0x65, /* pos 0108: 232 */ /* 0 */ 0x01 /* (to 0x010A state 233) */, /* 1 */ 0x02 /* (to 0x010C state 237) */, /* pos 010a: 233 */ /* terminal 100 */ 0x64, /* terminal 102 */ 0x66, /* pos 010c: 237 */ /* terminal 103 */ 0x67, /* terminal 104 */ 0x68, /* pos 010e: 240 */ /* terminal 105 */ 0x69, /* terminal 111 */ 0x6F, /* pos 0110: 242 */ /* 0 */ 0x01 /* (to 0x0112 state 243) */, /* 1 */ 0x05 /* (to 0x011A state 254) */, /* pos 0112: 243 */ /* terminal 106 */ 0x6A, /* terminal 107 */ 0x6B, /* pos 0114: 246 */ /* 0 */ 0x01 /* (to 0x0116 state 247) */, /* 1 */ 0x02 /* (to 0x0118 state 250) */, /* pos 0116: 247 */ /* terminal 108 */ 0x6C, /* terminal 109 */ 0x6D, /* pos 0118: 250 */ /* terminal 110 */ 0x6E, /* terminal 112 */ 0x70, /* pos 011a: 254 */ /* terminal 113 */ 0x71, /* terminal 118 */ 0x76, /* pos 011c: 256 */ /* terminal 114 */ 0x72, /* terminal 117 */ 0x75, /* pos 011e: 258 */ /* terminal 115 */ 0x73, /* terminal 116 */ 0x74, /* pos 0120: 263 */ /* 0 */ 0x01 /* (to 0x0122 state 264) */, /* 1 */ 0x02 /* (to 0x0124 state 267) */, /* pos 0122: 264 */ /* terminal 119 */ 0x77, /* terminal 120 */ 0x78, /* pos 0124: 267 */ /* terminal 121 */ 0x79, /* terminal 122 */ 0x7A, /* pos 0126: 274 */ /* terminal 127 */ 0x7F, /* terminal 220 */ 0xDC, /* pos 0128: 276 */ /* terminal 208 */ 0xD0, /* 1 */ 0x01 /* (to 0x012A state 277) */, /* pos 012a: 277 */ /* terminal 128 */ 0x80, /* terminal 130 */ 0x82, /* pos 012c: 279 */ /* 0 */ 0x2E /* (to 0x0188 state 372) */, /* 1 */ 0x01 /* (to 0x012E state 280) */, /* pos 012e: 280 */ /* 0 */ 0x01 /* (to 0x0130 state 281) */, /* 1 */ 0x1B /* (to 0x0164 state 332) */, /* pos 0130: 281 */ /* 0 */ 0x01 /* (to 0x0132 state 282) */, /* 1 */ 0x06 /* (to 0x013C state 291) */, /* pos 0132: 282 */ /* terminal 230 */ 0xE6, /* 1 */ 0x01 /* (to 0x0134 state 283) */, /* pos 0134: 283 */ /* terminal 129 */ 0x81, /* terminal 132 */ 0x84, /* pos 0136: 286 */ /* 0 */ 0x01 /* (to 0x0138 state 287) */, /* 1 */ 0x14 /* (to 0x015E state 328) */, /* pos 0138: 287 */ /* 0 */ 0x01 /* (to 0x013A state 288) */, /* 1 */ 0x30 /* (to 0x0198 state 388) */, /* pos 013a: 288 */ /* terminal 131 */ 0x83, /* terminal 162 */ 0xA2, /* pos 013c: 291 */ /* 0 */ 0x01 /* (to 0x013E state 292) */, /* 1 */ 0x02 /* (to 0x0140 state 296) */, /* pos 013e: 292 */ /* terminal 133 */ 0x85, /* terminal 134 */ 0x86, /* pos 0140: 296 */ /* terminal 136 */ 0x88, /* terminal 146 */ 0x92, /* pos 0142: 298 */ /* terminal 137 */ 0x89, /* terminal 138 */ 0x8A, /* pos 0144: 301 */ /* 0 */ 0x01 /* (to 0x0146 state 302) */, /* 1 */ 0x02 /* (to 0x0148 state 305) */, /* pos 0146: 302 */ /* terminal 139 */ 0x8B, /* terminal 140 */ 0x8C, /* pos 0148: 305 */ /* terminal 141 */ 0x8D, /* terminal 143 */ 0x8F, /* pos 014a: 309 */ /* 0 */ 0x01 /* (to 0x014C state 310) */, /* 1 */ 0x06 /* (to 0x0156 state 319) */, /* pos 014c: 310 */ /* terminal 144 */ 0x90, /* terminal 145 */ 0x91, /* pos 014e: 314 */ /* 0 */ 0x01 /* (to 0x0150 state 315) */, /* 1 */ 0x12 /* (to 0x0172 state 350) */, /* pos 0150: 315 */ /* 0 */ 0x01 /* (to 0x0152 state 316) */, /* 1 */ 0x05 /* (to 0x015A state 325) */, /* pos 0152: 316 */ /* 0 */ 0x01 /* (to 0x0154 state 317) */, /* 1 */ 0x03 /* (to 0x0158 state 322) */, /* pos 0154: 317 */ /* terminal 147 */ 0x93, /* terminal 149 */ 0x95, /* pos 0156: 319 */ /* terminal 148 */ 0x94, /* terminal 159 */ 0x9F, /* pos 0158: 322 */ /* terminal 150 */ 0x96, /* terminal 151 */ 0x97, /* pos 015a: 325 */ /* 0 */ 0x01 /* (to 0x015C state 326) */, /* 1 */ 0x08 /* (to 0x016A state 338) */, /* pos 015c: 326 */ /* terminal 152 */ 0x98, /* terminal 155 */ 0x9B, /* pos 015e: 328 */ /* 0 */ 0x42 /* (to 0x01E2 state 465) */, /* 1 */ 0x01 /* (to 0x0160 state 329) */, /* pos 0160: 329 */ /* 0 */ 0x01 /* (to 0x0162 state 330) */, /* 1 */ 0x0C /* (to 0x0178 state 355) */, /* pos 0162: 330 */ /* terminal 153 */ 0x99, /* terminal 161 */ 0xA1, /* pos 0164: 332 */ /* 0 */ 0x01 /* (to 0x0166 state 333) */, /* 1 */ 0x05 /* (to 0x016E state 347) */, /* pos 0166: 333 */ /* 0 */ 0x01 /* (to 0x0168 state 334) */, /* 1 */ 0x03 /* (to 0x016C state 342) */, /* pos 0168: 334 */ /* terminal 154 */ 0x9A, /* terminal 156 */ 0x9C, /* pos 016a: 338 */ /* terminal 157 */ 0x9D, /* terminal 158 */ 0x9E, /* pos 016c: 342 */ /* terminal 160 */ 0xA0, /* terminal 163 */ 0xA3, /* pos 016e: 347 */ /* 0 */ 0x01 /* (to 0x0170 state 348) */, /* 1 */ 0x07 /* (to 0x017C state 360) */, /* pos 0170: 348 */ /* terminal 164 */ 0xA4, /* terminal 169 */ 0xA9, /* pos 0172: 350 */ /* 0 */ 0x01 /* (to 0x0174 state 351) */, /* 1 */ 0x09 /* (to 0x0184 state 369) */, /* pos 0174: 351 */ /* 0 */ 0x01 /* (to 0x0176 state 352) */, /* 1 */ 0x03 /* (to 0x017A state 357) */, /* pos 0176: 352 */ /* terminal 165 */ 0xA5, /* terminal 166 */ 0xA6, /* pos 0178: 355 */ /* terminal 167 */ 0xA7, /* terminal 172 */ 0xAC, /* pos 017a: 357 */ /* terminal 168 */ 0xA8, /* terminal 174 */ 0xAE, /* pos 017c: 360 */ /* terminal 170 */ 0xAA, /* terminal 173 */ 0xAD, /* pos 017e: 362 */ /* 0 */ 0x01 /* (to 0x0180 state 363) */, /* 1 */ 0x1B /* (to 0x01B4 state 417) */, /* pos 0180: 363 */ /* 0 */ 0x01 /* (to 0x0182 state 364) */, /* 1 */ 0x2A /* (to 0x01D4 state 449) */, /* pos 0182: 364 */ /* terminal 171 */ 0xAB, /* terminal 206 */ 0xCE, /* pos 0184: 369 */ /* 0 */ 0x01 /* (to 0x0186 state 370) */, /* 1 */ 0x09 /* (to 0x0196 state 385) */, /* pos 0186: 370 */ /* terminal 175 */ 0xAF, /* terminal 180 */ 0xB4, /* pos 0188: 372 */ /* 0 */ 0x01 /* (to 0x018A state 373) */, /* 1 */ 0x27 /* (to 0x01D6 state 451) */, /* pos 018a: 373 */ /* 0 */ 0x01 /* (to 0x018C state 374) */, /* 1 */ 0x05 /* (to 0x0194 state 381) */, /* pos 018c: 374 */ /* terminal 176 */ 0xB0, /* terminal 177 */ 0xB1, /* pos 018e: 377 */ /* 0 */ 0x01 /* (to 0x0190 state 378) */, /* 1 */ 0x07 /* (to 0x019C state 393) */, /* pos 0190: 378 */ /* 0 */ 0x01 /* (to 0x0192 state 379) */, /* 1 */ 0x05 /* (to 0x019A state 390) */, /* pos 0192: 379 */ /* terminal 178 */ 0xB2, /* terminal 181 */ 0xB5, /* pos 0194: 381 */ /* terminal 179 */ 0xB3, /* terminal 209 */ 0xD1, /* pos 0196: 385 */ /* terminal 182 */ 0xB6, /* terminal 183 */ 0xB7, /* pos 0198: 388 */ /* terminal 184 */ 0xB8, /* terminal 194 */ 0xC2, /* pos 019a: 390 */ /* terminal 185 */ 0xB9, /* terminal 186 */ 0xBA, /* pos 019c: 393 */ /* 0 */ 0x01 /* (to 0x019E state 394) */, /* 1 */ 0x04 /* (to 0x01A4 state 400) */, /* pos 019e: 394 */ /* terminal 187 */ 0xBB, /* terminal 189 */ 0xBD, /* pos 01a0: 396 */ /* 0 */ 0x01 /* (to 0x01A2 state 397) */, /* 1 */ 0x07 /* (to 0x01AE state 412) */, /* pos 01a2: 397 */ /* terminal 188 */ 0xBC, /* terminal 191 */ 0xBF, /* pos 01a4: 400 */ /* terminal 190 */ 0xBE, /* terminal 196 */ 0xC4, /* pos 01a6: 403 */ /* 0 */ 0x01 /* (to 0x01A8 state 404) */, /* 1 */ 0x0D /* (to 0x01C0 state 427) */, /* pos 01a8: 404 */ /* 0 */ 0x01 /* (to 0x01AA state 405) */, /* 1 */ 0x0A /* (to 0x01BC state 424) */, /* pos 01aa: 405 */ /* 0 */ 0x01 /* (to 0x01AC state 406) */, /* 1 */ 0x08 /* (to 0x01BA state 421) */, /* pos 01ac: 406 */ /* terminal 192 */ 0xC0, /* terminal 193 */ 0xC1, /* pos 01ae: 412 */ /* terminal 197 */ 0xC5, /* terminal 231 */ 0xE7, /* pos 01b0: 414 */ /* 0 */ 0x01 /* (to 0x01B2 state 415) */, /* 1 */ 0x1B /* (to 0x01E6 state 475) */, /* pos 01b2: 415 */ /* terminal 198 */ 0xC6, /* terminal 228 */ 0xE4, /* pos 01b4: 417 */ /* 0 */ 0x1B /* (to 0x01EA state 481) */, /* 1 */ 0x01 /* (to 0x01B6 state 418) */, /* pos 01b6: 418 */ /* 0 */ 0x01 /* (to 0x01B8 state 419) */, /* 1 */ 0x19 /* (to 0x01E8 state 478) */, /* pos 01b8: 419 */ /* terminal 199 */ 0xC7, /* terminal 207 */ 0xCF, /* pos 01ba: 421 */ /* terminal 200 */ 0xC8, /* terminal 201 */ 0xC9, /* pos 01bc: 424 */ /* 0 */ 0x01 /* (to 0x01BE state 425) */, /* 1 */ 0x06 /* (to 0x01C8 state 438) */, /* pos 01be: 425 */ /* terminal 202 */ 0xCA, /* terminal 205 */ 0xCD, /* pos 01c0: 427 */ /* 0 */ 0x0D /* (to 0x01DA state 455) */, /* 1 */ 0x01 /* (to 0x01C2 state 428) */, /* pos 01c2: 428 */ /* 0 */ 0x17 /* (to 0x01F0 state 490) */, /* 1 */ 0x01 /* (to 0x01C4 state 429) */, /* pos 01c4: 429 */ /* terminal 255 */ 0xFF, /* 1 */ 0x01 /* (to 0x01C6 state 430) */, /* pos 01c6: 430 */ /* terminal 203 */ 0xCB, /* terminal 204 */ 0xCC, /* pos 01c8: 438 */ /* terminal 210 */ 0xD2, /* terminal 213 */ 0xD5, /* pos 01ca: 440 */ /* 0 */ 0x01 /* (to 0x01CC state 441) */, /* 1 */ 0x14 /* (to 0x01F2 state 494) */, /* pos 01cc: 441 */ /* 0 */ 0x01 /* (to 0x01CE state 442) */, /* 1 */ 0x09 /* (to 0x01DE state 461) */, /* pos 01ce: 442 */ /* 0 */ 0x01 /* (to 0x01D0 state 443) */, /* 1 */ 0x02 /* (to 0x01D2 state 447) */, /* pos 01d0: 443 */ /* terminal 211 */ 0xD3, /* terminal 212 */ 0xD4, /* pos 01d2: 447 */ /* terminal 214 */ 0xD6, /* terminal 221 */ 0xDD, /* pos 01d4: 449 */ /* terminal 215 */ 0xD7, /* terminal 225 */ 0xE1, /* pos 01d6: 451 */ /* 0 */ 0x01 /* (to 0x01D8 state 452) */, /* 1 */ 0x07 /* (to 0x01E4 state 469) */, /* pos 01d8: 452 */ /* terminal 216 */ 0xD8, /* terminal 217 */ 0xD9, /* pos 01da: 455 */ /* 0 */ 0x01 /* (to 0x01DC state 456) */, /* 1 */ 0x09 /* (to 0x01EC state 484) */, /* pos 01dc: 456 */ /* terminal 218 */ 0xDA, /* terminal 219 */ 0xDB, /* pos 01de: 461 */ /* 0 */ 0x01 /* (to 0x01E0 state 462) */, /* 1 */ 0x08 /* (to 0x01EE state 488) */, /* pos 01e0: 462 */ /* terminal 222 */ 0xDE, /* terminal 223 */ 0xDF, /* pos 01e2: 465 */ /* terminal 224 */ 0xE0, /* terminal 226 */ 0xE2, /* pos 01e4: 469 */ /* terminal 227 */ 0xE3, /* terminal 229 */ 0xE5, /* pos 01e6: 475 */ /* terminal 232 */ 0xE8, /* terminal 233 */ 0xE9, /* pos 01e8: 478 */ /* terminal 234 */ 0xEA, /* terminal 235 */ 0xEB, /* pos 01ea: 481 */ /* terminal 236 */ 0xEC, /* terminal 237 */ 0xED, /* pos 01ec: 484 */ /* terminal 238 */ 0xEE, /* terminal 240 */ 0xF0, /* pos 01ee: 488 */ /* terminal 241 */ 0xF1, /* terminal 244 */ 0xF4, /* pos 01f0: 490 */ /* terminal 242 */ 0xF2, /* terminal 243 */ 0xF3, /* pos 01f2: 494 */ /* 0 */ 0x01 /* (to 0x01F4 state 495) */, /* 1 */ 0x04 /* (to 0x01FA state 503) */, /* pos 01f4: 495 */ /* 0 */ 0x01 /* (to 0x01F6 state 496) */, /* 1 */ 0x02 /* (to 0x01F8 state 499) */, /* pos 01f6: 496 */ /* terminal 245 */ 0xF5, /* terminal 246 */ 0xF6, /* pos 01f8: 499 */ /* terminal 247 */ 0xF7, /* terminal 248 */ 0xF8, /* pos 01fa: 503 */ /* 0 */ 0x01 /* (to 0x01FC state 504) */, /* 1 */ 0x02 /* (to 0x01FE state 507) */, /* pos 01fc: 504 */ /* terminal 250 */ 0xFA, /* terminal 251 */ 0xFB, /* pos 01fe: 507 */ /* terminal 252 */ 0xFC, /* terminal 253 */ 0xFD, /* total size 512 bytes, biggest jump 200/256, fails=0 */ }; static unsigned char lextable_terms[] = { 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x03, 0x00, 0x34, 0x0f, 0x43, 0x03, 0xf1, 0x3c, 0xfc, 0x3c, 0x0f, 0x30, 0x37, 0xf7, 0x0f, 0xc3, 0xcf, 0x03, 0x3c, 0xfc, 0xc0, 0xf3, 0xf0, 0x3c, 0xfc, 0xf0, 0xcf, 0xfc, 0xcc, 0xff, 0xfc, 0x0d, 0x34, 0xcc, 0xcf, 0x33, 0xf0, 0x33, 0x0c, 0x3f, 0xc3, 0x3f, 0xcc, 0x30, 0xfc, 0xcf, 0x3c, 0xf0, 0x0c, 0xcf, 0xd0, 0x03, 0x3f, 0x33, 0xff, 0xff, 0xc3, 0xf3, }; /* state that points to 0x100 for disambiguation with 0x0 */ #define HUFTABLE_0x100_PREV 118 libwebsockets-4.3.5/lib/roles/h2/minihuf.c000066400000000000000000000271161476025525100204070ustar00rootroot00000000000000/* * minilex.c * * High efficiency lexical state parser * * Copyright (C)2011-2014 Andy Green * * Licensed under MIT * * Usage: gcc minihuf.c -o minihuf && ./minihuf > huftable.h * * Run it twice to test parsing on the generated table on stderr */ #include #include #include #define LWS_ARRAY_SIZE(n) (sizeof(n) / sizeof(n[0])) struct huf { unsigned int code; unsigned char len; }; static struct huf huf_literal[] = { /* 0x00 */ { 0x1ff8, 13 }, /* 0x01 */ { 0x7fffd8, 23 }, /* 0x02 */ { 0xfffffe2, 28 }, /* 0x03 */ { 0xfffffe3, 28 }, /* 0x04 */ { 0xfffffe4, 28 }, /* 0x05 */ { 0xfffffe5, 28 }, /* 0x06 */ { 0xfffffe6, 28 }, /* 0x07 */ { 0xfffffe7, 28 }, /* 0x08 */ { 0xfffffe8, 28 }, /* 0x09 */ { 0xffffea, 24 }, /* 0x0a */ { 0x3ffffffc, 30 }, /* 0x0b */ { 0xfffffe9, 28 }, /* 0x0c */ { 0xfffffea, 28 }, /* 0x0d */ { 0x3ffffffd, 30 }, /* 0x0e */ { 0xfffffeb, 28 }, /* 0x0f */ { 0xfffffec, 28 }, /* 0x10 */ { 0xfffffed, 28 }, /* 0x11 */ { 0xfffffee, 28 }, /* 0x12 */ { 0xfffffef, 28 }, /* 0x13 */ { 0xffffff0, 28 }, /* 0x14 */ { 0xffffff1, 28 }, /* 0x15 */ { 0xffffff2, 28 }, /* 0x16 */ { 0x3ffffffe, 30 }, /* 0x17 */ { 0xffffff3, 28 }, /* 0x18 */ { 0xffffff4, 28 }, /* 0x19 */ { 0xffffff5, 28 }, /* 0x1a */ { 0xffffff6, 28 }, /* 0x1b */ { 0xffffff7, 28 }, /* 0x1c */ { 0xffffff8, 28 }, /* 0x1d */ { 0xffffff9, 28 }, /* 0x1e */ { 0xffffffa, 28 }, /* 0x1f */ { 0xffffffb, 28 }, /* 0x20 */ { 0x14, 6 }, /* 0x21 */ { 0x3f8, 10 }, /* 0x22 */ { 0x3f9, 10 }, /* 0x23 */ { 0xffa, 12 }, /* 0x24 */ { 0x1ff9, 13 }, /* 0x25 */ { 0x15, 6 }, /* 0x26 */ { 0xf8, 8 }, /* 0x27 */ { 0x7fa, 11 }, /* 0x28 */ { 0x3fa, 10 }, /* 0x29 */ { 0x3fb, 10 }, /* 0x2a */ { 0xf9, 8 }, /* 0x2b */ { 0x7fb, 11 }, /* 0x2c */ { 0xfa, 8 }, /* 0x2d */ { 0x16, 6 }, /* 0x2e */ { 0x17, 6 }, /* 0x2f */ { 0x18, 6 }, /* 0x30 */ { 0x0, 5 }, /* 0x31 */ { 0x1, 5 }, /* 0x32 */ { 0x2, 5 }, /* 0x33 */ { 0x19, 6 }, /* 0x34 */ { 0x1a, 6 }, /* 0x35 */ { 0x1b, 6 }, /* 0x36 */ { 0x1c, 6 }, /* 0x37 */ { 0x1d, 6 }, /* 0x38 */ { 0x1e, 6 }, /* 0x39 */ { 0x1f, 6 }, /* 0x3a */ { 0x5c, 7 }, /* 0x3b */ { 0xfb, 8 }, /* 0x3c */ { 0x7ffc, 15 }, /* 0x3d */ { 0x20, 6 }, /* 0x3e */ { 0xffb, 12 }, /* 0x3f */ { 0x3fc, 10 }, /* 0x40 */ { 0x1ffa, 13 }, /* 0x41 */ { 0x21, 6 }, /* 0x42 */ { 0x5d, 7 }, /* 0x43 */ { 0x5e, 7 }, /* 0x44 */ { 0x5f, 7 }, /* 0x45 */ { 0x60, 7 }, /* 0x46 */ { 0x61, 7 }, /* 0x47 */ { 0x62, 7 }, /* 0x48 */ { 0x63, 7 }, /* 0x49 */ { 0x64, 7 }, /* 0x4a */ { 0x65, 7 }, /* 0x4b */ { 0x66, 7 }, /* 0x4c */ { 0x67, 7 }, /* 0x4d */ { 0x68, 7 }, /* 0x4e */ { 0x69, 7 }, /* 0x4f */ { 0x6a, 7 }, /* 0x50 */ { 0x6b, 7 }, /* 0x51 */ { 0x6c, 7 }, /* 0x52 */ { 0x6d, 7 }, /* 0x53 */ { 0x6e, 7 }, /* 0x54 */ { 0x6f, 7 }, /* 0x55 */ { 0x70, 7 }, /* 0x56 */ { 0x71, 7 }, /* 0x57 */ { 0x72, 7 }, /* 0x58 */ { 0xfc, 8 }, /* 0x59 */ { 0x73, 7 }, /* 0x5a */ { 0xfd, 8 }, /* 0x5b */ { 0x1ffb, 13 }, /* 0x5c */ { 0x7fff0, 19 }, /* 0x5d */ { 0x1ffc, 13 }, /* 0x5e */ { 0x3ffc, 14 }, /* 0x5f */ { 0x22, 6 }, /* 0x60 */ { 0x7ffd, 15 }, /* 0x61 */ { 0x3, 5 }, /* 0x62 */ { 0x23, 6 }, /* 0x63 */ { 0x4, 5 }, /* 0x64 */ { 0x24, 6 }, /* 0x65 */ { 0x5, 5 }, /* 0x66 */ { 0x25, 6 }, /* 0x67 */ { 0x26, 6 }, /* 0x68 */ { 0x27, 6 }, /* 0x69 */ { 0x6, 5 }, /* 0x6a */ { 0x74, 7 }, /* 0x6b */ { 0x75, 7 }, /* 0x6c */ { 0x28, 6 }, /* 0x6d */ { 0x29, 6 }, /* 0x6e */ { 0x2a, 6 }, /* 0x6f */ { 0x7, 5 }, /* 0x70 */ { 0x2b, 6 }, /* 0x71 */ { 0x76, 7 }, /* 0x72 */ { 0x2c, 6 }, /* 0x73 */ { 0x8, 5 }, /* 0x74 */ { 0x9, 5 }, /* 0x75 */ { 0x2d, 6 }, /* 0x76 */ { 0x77, 7 }, /* 0x77 */ { 0x78, 7 }, /* 0x78 */ { 0x79, 7 }, /* 0x79 */ { 0x7a, 7 }, /* 0x7a */ { 0x7b, 7 }, /* 0x7b */ { 0x7ffe, 15 }, /* 0x7c */ { 0x7fc, 11 }, /* 0x7d */ { 0x3ffd, 14 }, /* 0x7e */ { 0x1ffd, 13 }, /* 0x7f */ { 0xffffffc, 28 }, /* 0x80 */ { 0xfffe6, 20 }, /* 0x81 */ { 0x3fffd2, 22 }, /* 0x82 */ { 0xfffe7, 20 }, /* 0x83 */ { 0xfffe8, 20 }, /* 0x84 */ { 0x3fffd3, 22 }, /* 0x85 */ { 0x3fffd4, 22 }, /* 0x86 */ { 0x3fffd5, 22 }, /* 0x87 */ { 0x7fffd9, 23 }, /* 0x88 */ { 0x3fffd6, 22 }, /* 0x89 */ { 0x7fffda, 23 }, /* 0x8a */ { 0x7fffdb, 23 }, /* 0x8b */ { 0x7fffdc, 23 }, /* 0x8c */ { 0x7fffdd, 23 }, /* 0x8d */ { 0x7fffde, 23 }, /* 0x8e */ { 0xffffeb, 24 }, /* 0x8f */ { 0x7fffdf, 23 }, /* 0x90 */ { 0xffffec, 24 }, /* 0x91 */ { 0xffffed, 24 }, /* 0x92 */ { 0x3fffd7, 22 }, /* 0x93 */ { 0x7fffe0, 23 }, /* 0x94 */ { 0xffffee, 24 }, /* 0x95 */ { 0x7fffe1, 23 }, /* 0x96 */ { 0x7fffe2, 23 }, /* 0x97 */ { 0x7fffe3, 23 }, /* 0x98 */ { 0x7fffe4, 23 }, /* 0x99 */ { 0x1fffdc, 21 }, /* 0x9a */ { 0x3fffd8, 22 }, /* 0x9b */ { 0x7fffe5, 23 }, /* 0x9c */ { 0x3fffd9, 22 }, /* 0x9d */ { 0x7fffe6, 23 }, /* 0x9e */ { 0x7fffe7, 23 }, /* 0x9f */ { 0xffffef, 24 }, /* 0xa0 */ { 0x3fffda, 22 }, /* 0xa1 */ { 0x1fffdd, 21 }, /* 0xa2 */ { 0xfffe9, 20 }, /* 0xa3 */ { 0x3fffdb, 22 }, /* 0xa4 */ { 0x3fffdc, 22 }, /* 0xa5 */ { 0x7fffe8, 23 }, /* 0xa6 */ { 0x7fffe9, 23 }, /* 0xa7 */ { 0x1fffde, 21 }, /* 0xa8 */ { 0x7fffea, 23 }, /* 0xa9 */ { 0x3fffdd, 22 }, /* 0xaa */ { 0x3fffde, 22 }, /* 0xab */ { 0xfffff0, 24 }, /* 0xac */ { 0x1fffdf, 21 }, /* 0xad */ { 0x3fffdf, 22 }, /* 0xae */ { 0x7fffeb, 23 }, /* 0xaf */ { 0x7fffec, 23 }, /* 0xb0 */ { 0x1fffe0, 21 }, /* 0xb1 */ { 0x1fffe1, 21 }, /* 0xb2 */ { 0x3fffe0, 22 }, /* 0xb3 */ { 0x1fffe2, 21 }, /* 0xb4 */ { 0x7fffed, 23 }, /* 0xb5 */ { 0x3fffe1, 22 }, /* 0xb6 */ { 0x7fffee, 23 }, /* 0xb7 */ { 0x7fffef, 23 }, /* 0xb8 */ { 0xfffea, 20 }, /* 0xb9 */ { 0x3fffe2, 22 }, /* 0xba */ { 0x3fffe3, 22 }, /* 0xbb */ { 0x3fffe4, 22 }, /* 0xbc */ { 0x7ffff0, 23 }, /* 0xbd */ { 0x3fffe5, 22 }, /* 0xbe */ { 0x3fffe6, 22 }, /* 0xbf */ { 0x7ffff1, 23 }, /* 0xc0 */ { 0x3ffffe0, 26 }, /* 0xc1 */ { 0x3ffffe1, 26 }, /* 0xc2 */ { 0xfffeb, 20 }, /* 0xc3 */ { 0x7fff1, 19 }, /* 0xc4 */ { 0x3fffe7, 22 }, /* 0xc5 */ { 0x7ffff2, 23 }, /* 0xc6 */ { 0x3fffe8, 22 }, /* 0xc7 */ { 0x1ffffec, 25 }, /* 0xc8 */ { 0x3ffffe2, 26 }, /* 0xc9 */ { 0x3ffffe3, 26 }, /* 0xca */ { 0x3ffffe4, 26 }, /* 0xcb */ { 0x7ffffde, 27 }, /* 0xcc */ { 0x7ffffdf, 27 }, /* 0xcd */ { 0x3ffffe5, 26 }, /* 0xce */ { 0xfffff1, 24 }, /* 0xcf */ { 0x1ffffed, 25 }, /* 0xd0 */ { 0x7fff2, 19 }, /* 0xd1 */ { 0x1fffe3, 21 }, /* 0xd2 */ { 0x3ffffe6, 26 }, /* 0xd3 */ { 0x7ffffe0, 27 }, /* 0xd4 */ { 0x7ffffe1, 27 }, /* 0xd5 */ { 0x3ffffe7, 26 }, /* 0xd6 */ { 0x7ffffe2, 27 }, /* 0xd7 */ { 0xfffff2, 24 }, /* 0xd8 */ { 0x1fffe4, 21 }, /* 0xd9 */ { 0x1fffe5, 21 }, /* 0xda */ { 0x3ffffe8, 26 }, /* 0xdb */ { 0x3ffffe9, 26 }, /* 0xdc */ { 0xffffffd, 28 }, /* 0xdd */ { 0x7ffffe3, 27 }, /* 0xde */ { 0x7ffffe4, 27 }, /* 0xdf */ { 0x7ffffe5, 27 }, /* 0xe0 */ { 0xfffec, 20 }, /* 0xe1 */ { 0xfffff3, 24 }, /* 0xe2 */ { 0xfffed, 20 }, /* 0xe3 */ { 0x1fffe6, 21 }, /* 0xe4 */ { 0x3fffe9, 22 }, /* 0xe5 */ { 0x1fffe7, 21 }, /* 0xe6 */ { 0x1fffe8, 21 }, /* 0xe7 */ { 0x7ffff3, 23 }, /* 0xe8 */ { 0x3fffea, 22 }, /* 0xe9 */ { 0x3fffeb, 22 }, /* 0xea */ { 0x1ffffee, 25 }, /* 0xeb */ { 0x1ffffef, 25 }, /* 0xec */ { 0xfffff4, 24 }, /* 0xed */ { 0xfffff5, 24 }, /* 0xee */ { 0x3ffffea, 26 }, /* 0xef */ { 0x7ffff4, 23 }, /* 0xf0 */ { 0x3ffffeb, 26 }, /* 0xf1 */ { 0x7ffffe6, 27 }, /* 0xf2 */ { 0x3ffffec, 26 }, /* 0xf3 */ { 0x3ffffed, 26 }, /* 0xf4 */ { 0x7ffffe7, 27 }, /* 0xf5 */ { 0x7ffffe8, 27 }, /* 0xf6 */ { 0x7ffffe9, 27 }, /* 0xf7 */ { 0x7ffffea, 27 }, /* 0xf8 */ { 0x7ffffeb, 27 }, /* 0xf9 */ { 0xffffffe, 28 }, /* 0xfa */ { 0x7ffffec, 27 }, /* 0xfb */ { 0x7ffffed, 27 }, /* 0xfc */ { 0x7ffffee, 27 }, /* 0xfd */ { 0x7ffffef, 27 }, /* 0xfe */ { 0x7fffff0, 27 }, /* 0xff */ { 0x3ffffee, 26 }, /* 0x100 */ { 0x3fffffff, 30 }, }; int code_bit(int idx, int bit) { if (bit < huf_literal[idx].len) return !!(huf_literal[idx].code & (1 << (huf_literal[idx].len - 1 - bit))); return -1; } #include "huftable.h" #define PARALLEL 2 struct state { int terminal; int state[PARALLEL]; int bytepos; int real_pos; }; struct state state[2000]; unsigned char terms[2000]; int next = 1; int lextable_decode(int pos, char c) { int q = pos + !!c; if (lextable_terms[q >> 3] & (1 << (q & 7))) /* terminal */ return lextable[q] | 0x8000; return pos + (lextable[q] << 1); } int main(void) { int n = 0; int m = 0; int prev; char c; int walk; int saw; int y; int j; int pos = 0; int biggest = 0; int fails = 0; m = 0; while (m < LWS_ARRAY_SIZE(state)) { for (j = 0; j < PARALLEL; j++) { state[m].state[j] = 0xffff; state[m].terminal = 0; } m++; } while (n < LWS_ARRAY_SIZE(huf_literal)) { m = 0; walk = 0; prev = 0; while (m < huf_literal[n].len) { saw = 0; if (state[walk].state[code_bit(n, m)] != 0xffff) { /* exists -- go forward */ walk = state[walk].state[code_bit(n, m)]; goto again; } /* something we didn't see before */ state[walk].state[code_bit(n, m)] = next; walk = next++; again: m++; } state[walk].terminal = n++; state[walk].state[0] = 0; /* terminal marker */ } walk = 0; for (n = 0; n < next; n++) { state[n].bytepos = walk; walk += (2 * 2); } /* compute everyone's position first */ pos = 0; walk = 0; for (n = 0; n < next; n++) { state[n].real_pos = pos; if (state[n].state[0]) /* nonterminal */ pos += 2; walk ++; } fprintf(stdout, "static unsigned char lextable[] = {\n"); #define TERMINAL_MASK 0x8000 walk = 0; pos = 0; for (n = 0; n < next; n++) { for (m = 0; m < 2; m++) { saw = state[n].state[m]; if (saw == 0) { // c is a terminal then m = 2; continue; } if (!m) fprintf(stdout, "/* pos %04x: %3d */ ", state[n].real_pos, n); else fprintf(stdout, " "); if (saw == 0xffff) { fprintf(stdout, " 0xff, 0xff, /* 0 = fail */\n "); pos ++; /* fail */ fails++; continue; } if (state[saw].state[0] == 0) { /* points to terminal */ fprintf(stdout, " /* terminal %d */ 0x%02X,\n", state[saw].terminal, state[saw].terminal & 0xff); terms[(state[n].real_pos + m) >> 3] |= 1 << ((state[n].real_pos + m) & 7); pos++; walk++; continue; } j = (state[saw].real_pos - q) >> 1; if (j > biggest) biggest = j; if (j > 0xffff) { fprintf(stderr, "Jump > 64K bytes ahead (%d to %d)\n", state[n].real_pos, state[saw].real_pos); return 1; } fprintf(stdout, " /* %d */ 0x%02X " "/* (to 0x%04X state %3d) */,\n", m, j & 0xff, state[saw].real_pos, saw); pos++; walk++; } } fprintf(stdout, "/* total size %d bytes, biggest jump %d/256, fails=%d */\n};\n" "\n static unsigned char lextable_terms[] = {\n", pos, biggest, fails); for (n = 0; n < (walk + 7) / 8; n++) { if (!(n & 7)) fprintf(stdout, "\n\t"); fprintf(stdout, "0x%02x, ", terms[n]); } fprintf(stdout, "\n};\n"); /* * Try to parse every legal input string */ for (n = 0; n < LWS_ARRAY_SIZE(huf_literal); n++) { walk = 0; m = 0; y = -1; fprintf(stderr, " trying %d\n", n); while (m < huf_literal[n].len) { prev = walk; walk = lextable_decode(walk, code_bit(n, m)); if (walk == 0xffff) { fprintf(stderr, "failed\n"); return 3; } if (walk & 0x8000) { y = walk & 0x7fff; if (y == 0 && m == 29) { y |= 0x100; fprintf(stdout, "\n/* state that points to " "0x100 for disambiguation with " "0x0 */\n" "#define HUFTABLE_0x100_PREV " "%d\n", prev); } break; } m++; } if (y != n) { fprintf(stderr, "decode failed %d got %d (0x%x)\n", n, y, y); return 4; } } fprintf(stderr, "All decode OK\n"); return 0; } libwebsockets-4.3.5/lib/roles/h2/ops-h2.c000066400000000000000000001154631476025525100200630ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include /* * These are the standardized defaults. * Override what actually goes in the vhost settings in platform or user code. * Leave these alone because they are used to determine "what is different * from the protocol defaults". */ const struct http2_settings lws_h2_defaults = { { 1, /* H2SET_HEADER_TABLE_SIZE */ 4096, /* *** This controls how many entries in the dynamic table *** * Allows the sender to inform the remote endpoint of the maximum * size of the header compression table used to decode header * blocks, in octets. The encoder can select any size equal to or * less than this value by using signaling specific to the header * compression format inside a header block (see [COMPRESSION]). * The initial value is 4,096 octets. */ /* H2SET_ENABLE_PUSH */ 1, /* H2SET_MAX_CONCURRENT_STREAMS */ 0x7fffffff, /* H2SET_INITIAL_WINDOW_SIZE */ 65535, /* H2SET_MAX_FRAME_SIZE */ 16384, /* H2SET_MAX_HEADER_LIST_SIZE */ 0x7fffffff, /*< This advisory setting informs a peer of the maximum size of * header list that the sender is prepared to accept, in octets. * The value is based on the uncompressed size of header fields, * including the length of the name and value in octets plus an * overhead of 32 octets for each header field. */ /* H2SET_RESERVED7 */ 0, /* H2SET_ENABLE_CONNECT_PROTOCOL */ 0, }}; /* these are the "lws defaults"... they can be overridden in plat */ const struct http2_settings lws_h2_stock_settings = { { 1, /* H2SET_HEADER_TABLE_SIZE */ 65536, /* ffox */ /* *** This controls how many entries in the dynamic table *** * Allows the sender to inform the remote endpoint of the maximum * size of the header compression table used to decode header * blocks, in octets. The encoder can select any size equal to or * less than this value by using signaling specific to the header * compression format inside a header block (see [COMPRESSION]). * The initial value is 4,096 octets. * * Can't pass h2spec with less than 4096 here... */ /* H2SET_ENABLE_PUSH */ 0, /* H2SET_MAX_CONCURRENT_STREAMS */ 24, /* H2SET_INITIAL_WINDOW_SIZE */ 0, /*< This is managed by explicit WINDOW_UPDATE. Because otherwise no * way to precisely control it when we do want to. */ /* H2SET_MAX_FRAME_SIZE */ 16384, /* H2SET_MAX_HEADER_LIST_SIZE */ 4096, /*< This advisory setting informs a peer of the maximum size of * header list that the sender is prepared to accept, in octets. * The value is based on the uncompressed size of header fields, * including the length of the name and value in octets plus an * overhead of 32 octets for each header field. */ /* H2SET_RESERVED7 */ 0, /* H2SET_ENABLE_CONNECT_PROTOCOL */ 1, }}; /* * The wsi at this level is normally the network wsi... we can get called on * another path via lws_service_do_ripe_rxflow() on mux children too tho... */ static int rops_handle_POLLIN_h2(struct lws_context_per_thread *pt, struct lws *wsi, struct lws_pollfd *pollfd) { struct lws_tokens ebuf; unsigned int pending = 0; char buffered = 0; struct lws *wsi1; int n, m; #ifdef LWS_WITH_CGI if (wsi->http.cgi && (pollfd->revents & LWS_POLLOUT)) { if (lws_handle_POLLOUT_event(wsi, pollfd)) return LWS_HPI_RET_PLEASE_CLOSE_ME; return LWS_HPI_RET_HANDLED; } #endif lwsl_info("%s: %s wsistate 0x%x, events %d, revents %d, pollout %d\n", __func__, wsi->lc.gutag, (unsigned int)wsi->wsistate, pollfd->events, pollfd->revents, pollfd->revents & LWS_POLLOUT); /* !!! */ if (wsi->wsistate == 0x10000013) { wsi->bugcatcher++; if (wsi->bugcatcher == 250) { lwsl_err("%s: BUGCATCHER\n", __func__); return LWS_HPI_RET_PLEASE_CLOSE_ME; } } else wsi->bugcatcher = 0; /* * something went wrong with parsing the handshake, and * we ended up back in the event loop without completing it */ if (lwsi_state(wsi) == LRS_PRE_WS_SERVING_ACCEPT) { wsi->socket_is_permanently_unusable = 1; return LWS_HPI_RET_PLEASE_CLOSE_ME; } if (lwsi_state(wsi) == LRS_WAITING_CONNECT) { #if defined(LWS_WITH_CLIENT) if ((pollfd->revents & LWS_POLLOUT) && lws_handle_POLLOUT_event(wsi, pollfd)) { lwsl_debug("POLLOUT event closed it\n"); return LWS_HPI_RET_PLEASE_CLOSE_ME; } n = lws_http_client_socket_service(wsi, pollfd); if (n) return LWS_HPI_RET_WSI_ALREADY_DIED; #endif return LWS_HPI_RET_HANDLED; } /* 1: something requested a callback when it was OK to write */ if ((pollfd->revents & LWS_POLLOUT) && lwsi_state_can_handle_POLLOUT(wsi) && lws_handle_POLLOUT_event(wsi, pollfd)) { if (lwsi_state(wsi) == LRS_RETURNED_CLOSE) lwsi_set_state(wsi, LRS_FLUSHING_BEFORE_CLOSE); /* the write failed... it's had it */ wsi->socket_is_permanently_unusable = 1; return LWS_HPI_RET_PLEASE_CLOSE_ME; } if (lwsi_state(wsi) == LRS_RETURNED_CLOSE || lwsi_state(wsi) == LRS_WAITING_TO_SEND_CLOSE || lwsi_state(wsi) == LRS_AWAITING_CLOSE_ACK) { /* * we stopped caring about anything except control * packets. Force flow control off, defeat tx * draining. */ lws_rx_flow_control(wsi, 1); #if defined(LWS_ROLE_WS) && !defined(LWS_WITHOUT_EXTENSIONS) if (wsi->ws) wsi->ws->tx_draining_ext = 0; #endif } if (wsi->mux_substream || wsi->upgraded_to_http2) { wsi1 = lws_get_network_wsi(wsi); if (wsi1 && lws_has_buffered_out(wsi1)) { lwsl_info("%s: has buffered out\n", __func__); /* * We cannot deal with any kind of new RX * because we are dealing with a partial send * (new RX may trigger new http_action() that * expect to be able to send) */ return LWS_HPI_RET_HANDLED; } } read: /* 3: network wsi buflist needs to be drained */ // lws_buflist_describe(&wsi->buflist, wsi, __func__); ebuf.len = (int)lws_buflist_next_segment_len(&wsi->buflist, &ebuf.token); if (ebuf.len) { lwsl_info("draining buflist (len %d)\n", ebuf.len); buffered = 1; goto drain; } else { if (wsi->mux_substream) { lwsl_warn("%s: uh... %s mux child with nothing to drain\n", __func__, lws_wsi_tag(wsi)); // assert(0); lws_dll2_remove(&wsi->dll_buflist); return LWS_HPI_RET_HANDLED; } } if (!lws_ssl_pending(wsi) && !(pollfd->revents & pollfd->events & LWS_POLLIN)) return LWS_HPI_RET_HANDLED; /* We have something to read... */ if (!(lwsi_role_client(wsi) && (lwsi_state(wsi) != LRS_ESTABLISHED && // lwsi_state(wsi) != LRS_H1C_ISSUE_HANDSHAKE2 && lwsi_state(wsi) != LRS_H2_WAITING_TO_SEND_HEADERS))) { int scr_ret; ebuf.token = pt->serv_buf; scr_ret = lws_ssl_capable_read(wsi, ebuf.token, wsi->a.context->pt_serv_buf_size); switch (scr_ret) { case 0: lwsl_info("%s: zero length read\n", __func__); return LWS_HPI_RET_PLEASE_CLOSE_ME; case LWS_SSL_CAPABLE_MORE_SERVICE: lwsl_info("SSL Capable more service\n"); return LWS_HPI_RET_HANDLED; case LWS_SSL_CAPABLE_ERROR: lwsl_info("%s: LWS_SSL_CAPABLE_ERROR\n", __func__); return LWS_HPI_RET_PLEASE_CLOSE_ME; } /* * coverity is confused: it knows lws_ssl_capable_read may * return < 0 and assigning that to ebuf.len is bad, but it * doesn't understand this check below on scr_ret < 0 * removes that possibility */ ebuf.len = scr_ret; if (ebuf.len < 0) /* ie, not usable data */ { lwsl_info("%s: other error\n", __func__); return LWS_HPI_RET_PLEASE_CLOSE_ME; } // lwsl_notice("%s: Actual RX %d\n", __func__, ebuf.len); // if (ebuf.len > 0) // lwsl_hexdump_notice(ebuf.token, ebuf.len); } else lwsl_info("%s: skipped read\n", __func__); if (ebuf.len < 0) return LWS_HPI_RET_PLEASE_CLOSE_ME; drain: #if defined(LWS_WITH_CLIENT) if (lwsi_role_http(wsi) && lwsi_role_client(wsi) && wsi->hdr_parsing_completed && !wsi->told_user_closed) { /* * In SSL mode we get POLLIN notification about * encrypted data in. * * But that is not necessarily related to decrypted * data out becoming available; in may need to perform * other in or out before that happens. * * simply mark ourselves as having readable data * and turn off our POLLIN */ wsi->client_rx_avail = 1; if (lws_change_pollfd(wsi, LWS_POLLIN, 0)) return LWS_HPI_RET_PLEASE_CLOSE_ME; /* let user code know, he'll usually ask for writeable * callback and drain / re-enable it there */ if (user_callback_handle_rxflow( wsi->a.protocol->callback, wsi, LWS_CALLBACK_RECEIVE_CLIENT_HTTP, wsi->user_space, NULL, 0)) { lwsl_info("RECEIVE_CLIENT_HTTP closed it\n"); return LWS_HPI_RET_PLEASE_CLOSE_ME; } return LWS_HPI_RET_HANDLED; } #endif /* service incoming data */ if (ebuf.len) { n = 0; if (lwsi_role_h2(wsi) && lwsi_state(wsi) != LRS_BODY && lwsi_state(wsi) != LRS_DISCARD_BODY) n = lws_read_h2(wsi, ebuf.token, (unsigned int)ebuf.len); else n = lws_read_h1(wsi, ebuf.token, (unsigned int)ebuf.len); if (n < 0) { /* we closed wsi */ return LWS_HPI_RET_WSI_ALREADY_DIED; } if (n && buffered) { // lwsl_notice("%s: h2 use %d\n", __func__, n); m = (int)lws_buflist_use_segment(&wsi->buflist, (size_t)n); lwsl_info("%s: draining rxflow: used %d, next %d\n", __func__, n, m); if (!m) { lwsl_notice("%s: removed %s from dll_buflist\n", __func__, lws_wsi_tag(wsi)); lws_dll2_remove(&wsi->dll_buflist); } } else /* cov: both n and ebuf.len are int */ if (n > 0 && n < ebuf.len && ebuf.len > 0) { // lwsl_notice("%s: h2 append seg %d\n", __func__, ebuf.len - n); m = lws_buflist_append_segment(&wsi->buflist, ebuf.token + n, (unsigned int)(ebuf.len - n)); if (m < 0) return LWS_HPI_RET_PLEASE_CLOSE_ME; if (m) { lwsl_debug("%s: added %s to rxflow list\n", __func__, lws_wsi_tag(wsi)); if (lws_dll2_is_detached(&wsi->dll_buflist)) lws_dll2_add_head(&wsi->dll_buflist, &pt->dll_buflist_owner); } } } // lws_buflist_describe(&wsi->buflist, wsi, __func__); #if 0 /* * This seems to be too aggressive... we don't want the ah stuck * there but eg, WINDOW_UPDATE may come and detach it if we leave * it like that... it will get detached at stream close */ if (wsi->http.ah #if defined(LWS_WITH_CLIENT) && !wsi->client_h2_alpn #endif ) { lwsl_err("xxx\n"); lws_header_table_detach(wsi, 0); } #endif pending = (unsigned int)lws_ssl_pending(wsi); if (pending) { // lwsl_info("going around\n"); goto read; } return LWS_HPI_RET_HANDLED; } int rops_handle_POLLOUT_h2(struct lws *wsi) { // lwsl_notice("%s\n", __func__); if (lwsi_state(wsi) == LRS_ISSUE_HTTP_BODY) return LWS_HP_RET_USER_SERVICE; /* * Priority 1: H2 protocol packets */ if ((wsi->upgraded_to_http2 #if defined(LWS_WITH_CLIENT) || wsi->client_h2_alpn #endif ) && wsi->h2.h2n->pps) { lwsl_info("servicing pps\n"); /* * this is called on the network connection, but may close * substreams... that may affect callers */ if (lws_h2_do_pps_send(wsi)) { wsi->socket_is_permanently_unusable = 1; return LWS_HP_RET_BAIL_DIE; } if (wsi->h2.h2n->pps) return LWS_HP_RET_BAIL_OK; /* we can resume whatever we were doing */ lws_rx_flow_control(wsi, LWS_RXFLOW_REASON_APPLIES_ENABLE | LWS_RXFLOW_REASON_H2_PPS_PENDING); return LWS_HP_RET_BAIL_OK; /* leave POLLOUT active */ } /* Priority 2: if we are closing, not allowed to send more data frags * which means user callback or tx ext flush banned now */ if (lwsi_state(wsi) == LRS_RETURNED_CLOSE) return LWS_HP_RET_USER_SERVICE; return LWS_HP_RET_USER_SERVICE; } static int rops_write_role_protocol_h2(struct lws *wsi, unsigned char *buf, size_t len, enum lws_write_protocol *wp) { unsigned char flags = 0, base = (*wp) & 0x1f; size_t olen = len; int n; #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) unsigned char mtubuf[4096 + LWS_PRE]; #endif /* if not in a state to send stuff, then just send nothing */ if (!lwsi_role_ws(wsi) && !wsi->mux_stream_immortal && base != LWS_WRITE_HTTP && base != LWS_WRITE_HTTP_FINAL && base != LWS_WRITE_HTTP_HEADERS_CONTINUATION && base != LWS_WRITE_HTTP_HEADERS && lwsi_state(wsi) != LRS_BODY && ((lwsi_state(wsi) != LRS_RETURNED_CLOSE && lwsi_state(wsi) != LRS_WAITING_TO_SEND_CLOSE && lwsi_state(wsi) != LRS_ESTABLISHED && lwsi_state(wsi) != LRS_AWAITING_CLOSE_ACK) #if defined(LWS_ROLE_WS) || base != LWS_WRITE_CLOSE #endif )) { //assert(0); lwsl_notice("%s: binning wsistate 0x%x %d: %s\n", __func__, (unsigned int)wsi->wsistate, *wp, wsi->a.protocol ? wsi->a.protocol->name : "no protocol"); return 0; } /* compression transform... */ #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) if (wsi->http.lcs) { unsigned char *out = mtubuf + LWS_PRE; size_t o = sizeof(mtubuf) - LWS_PRE; n = lws_http_compression_transform(wsi, buf, len, wp, &out, &o); if (n) return n; lwsl_info("%s: %s: transformed %d bytes to %d " "(wp 0x%x, more %d)\n", __func__, lws_wsi_tag(wsi), (int)len, (int)o, (int)*wp, wsi->http.comp_ctx.may_have_more); buf = out; len = o; base = (*wp) & 0x1f; if (!len) return (int)olen; } #endif /* * ws-over-h2 also ends up here after the ws framing applied */ n = LWS_H2_FRAME_TYPE_DATA; if (base == LWS_WRITE_HTTP_HEADERS) { n = LWS_H2_FRAME_TYPE_HEADERS; if (!((*wp) & LWS_WRITE_NO_FIN)) flags = LWS_H2_FLAG_END_HEADERS; if (wsi->h2.send_END_STREAM || ((*wp) & LWS_WRITE_H2_STREAM_END)) { flags |= LWS_H2_FLAG_END_STREAM; wsi->h2.send_END_STREAM = 1; } } if (base == LWS_WRITE_HTTP_HEADERS_CONTINUATION) { n = LWS_H2_FRAME_TYPE_CONTINUATION; if (!((*wp) & LWS_WRITE_NO_FIN)) flags = LWS_H2_FLAG_END_HEADERS; if (wsi->h2.send_END_STREAM || ((*wp) & LWS_WRITE_H2_STREAM_END)) { flags |= LWS_H2_FLAG_END_STREAM; wsi->h2.send_END_STREAM = 1; } } if ((base == LWS_WRITE_HTTP || base == LWS_WRITE_HTTP_FINAL) && wsi->http.tx_content_length) { wsi->http.tx_content_remain -= len; lwsl_info("%s: %s: tx_content_rem = %llu\n", __func__, lws_wsi_tag(wsi), (unsigned long long)wsi->http.tx_content_remain); if (!wsi->http.tx_content_remain) { lwsl_info("%s: selecting final write mode\n", __func__); base = *wp = LWS_WRITE_HTTP_FINAL; } } if (base == LWS_WRITE_HTTP_FINAL || ((*wp) & LWS_WRITE_H2_STREAM_END)) { flags |= LWS_H2_FLAG_END_STREAM; lwsl_info("%s: %s: setting END_STREAM, 0x%x\n", __func__, lws_wsi_tag(wsi), flags); wsi->h2.send_END_STREAM = 1; } n = lws_h2_frame_write(wsi, n, flags, wsi->mux.my_sid, (unsigned int)len, buf); if (n < 0) return n; /* hide it may have been compressed... */ return (int)olen; } #if defined(LWS_WITH_SERVER) static int rops_check_upgrades_h2(struct lws *wsi) { #if defined(LWS_ROLE_WS) char *p; /* * with H2 there's also a way to upgrade a stream to something * else... :method is CONNECT and :protocol says the name of * the new protocol we want to carry. We have to have sent a * SETTINGS saying that we support it though. */ p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_METHOD); if (!wsi->a.vhost->h2.set.s[H2SET_ENABLE_CONNECT_PROTOCOL] || !wsi->mux_substream || !p || strcmp(p, "CONNECT")) return LWS_UPG_RET_CONTINUE; p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_COLON_PROTOCOL); if (!p || strcmp(p, "websocket")) return LWS_UPG_RET_CONTINUE; lwsl_info("Upgrade h2 to ws\n"); lws_mux_mark_immortal(wsi); wsi->h2_stream_carries_ws = 1; lws_metrics_tag_wsi_add(wsi, "upg", "ws_over_h2"); if (lws_process_ws_upgrade(wsi)) return LWS_UPG_RET_BAIL; lwsl_info("Upgraded h2 to ws OK\n"); return LWS_UPG_RET_DONE; #else return LWS_UPG_RET_CONTINUE; #endif } #endif static int rops_init_vhost_h2(struct lws_vhost *vh, const struct lws_context_creation_info *info) { vh->h2.set = vh->context->set; if (info->http2_settings[0]) { int n; for (n = 1; n < LWS_H2_SETTINGS_LEN; n++) vh->h2.set.s[n] = info->http2_settings[n]; } return 0; } int rops_pt_init_destroy_h2(struct lws_context *context, const struct lws_context_creation_info *info, struct lws_context_per_thread *pt, int destroy) { /* if not already set by plat, use lws default SETTINGS */ if (!context->set.s[0]) context->set = lws_h2_stock_settings; /* * We only want to do this once... we will do it if we are built * otherwise h1 ops will do it (or nobody if no http at all) */ #if !defined(LWS_ROLE_H2) && defined(LWS_WITH_SERVER) if (!destroy) { pt->sul_ah_lifecheck.cb = lws_sul_http_ah_lifecheck; __lws_sul_insert_us(&pt->pt_sul_owner[LWSSULLI_MISS_IF_SUSPENDED], &pt->sul_ah_lifecheck, 30 * LWS_US_PER_SEC); } else lws_dll2_remove(&pt->sul_ah_lifecheck.list); #endif return 0; } static int rops_tx_credit_h2(struct lws *wsi, char peer_to_us, int add) { struct lws *nwsi = lws_get_network_wsi(wsi); int n; if (add) { if (peer_to_us == LWSTXCR_PEER_TO_US) { /* * We want to tell the peer they can write an additional * "add" bytes to us */ return lws_h2_update_peer_txcredit(wsi, (unsigned int)-1, add); } /* * We're being told we can write an additional "add" bytes * to the peer */ wsi->txc.tx_cr += add; nwsi->txc.tx_cr += add; return 0; } if (peer_to_us == LWSTXCR_US_TO_PEER) return lws_h2_tx_cr_get(wsi); n = wsi->txc.peer_tx_cr_est; if (n > nwsi->txc.peer_tx_cr_est) n = nwsi->txc.peer_tx_cr_est; return n; } static int rops_destroy_role_h2(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; struct allocated_headers *ah; /* we may not have an ah, but may be on the waiting list... */ lwsl_info("%s: %s: ah det due to close\n", __func__, lws_wsi_tag(wsi)); __lws_header_table_detach(wsi, 0); ah = pt->http.ah_list; while (ah) { if (ah->in_use && ah->wsi == wsi) { lwsl_err("%s: ah leak: %s\n", __func__, lws_wsi_tag(wsi)); ah->in_use = 0; ah->wsi = NULL; pt->http.ah_count_in_use--; break; } ah = ah->next; } #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) lws_http_compression_destroy(wsi); #endif if (wsi->upgraded_to_http2 || wsi->mux_substream) { lws_hpack_destroy_dynamic_header(wsi); if (wsi->h2.h2n) lws_free_set_NULL(wsi->h2.h2n); } return 0; } static int rops_close_kill_connection_h2(struct lws *wsi, enum lws_close_status reason) { #if defined(LWS_WITH_HTTP_PROXY) if (wsi->http.proxy_clientside) { wsi->http.proxy_clientside = 0; if (user_callback_handle_rxflow(wsi->a.protocol->callback, wsi, LWS_CALLBACK_COMPLETED_CLIENT_HTTP, wsi->user_space, NULL, 0)) wsi->http.proxy_clientside = 0; } #endif if (wsi->mux_substream && wsi->h2_stream_carries_ws) lws_h2_rst_stream(wsi, 0, "none"); /* else if (wsi->mux_substream) lws_h2_rst_stream(wsi, H2_ERR_STREAM_CLOSED, "swsi got closed"); */ lwsl_info(" %s, his parent %s: siblings:\n", lws_wsi_tag(wsi), lws_wsi_tag(wsi->mux.parent_wsi)); lws_wsi_mux_dump_children(wsi); if (wsi->upgraded_to_http2 || wsi->mux_substream #if defined(LWS_WITH_CLIENT) || wsi->client_mux_substream #endif ) { lwsl_info("closing %s: parent %s\n", lws_wsi_tag(wsi), lws_wsi_tag(wsi->mux.parent_wsi)); if (wsi->mux.child_list && lwsl_visible(LLL_INFO)) { lwsl_info(" parent %s: closing children: list:\n", lws_wsi_tag(wsi)); lws_wsi_mux_dump_children(wsi); } lws_wsi_mux_close_children(wsi, (int)reason); } if (wsi->upgraded_to_http2) { /* remove pps */ struct lws_h2_protocol_send *w = wsi->h2.h2n->pps, *w1; while (w) { w1 = w->next; free(w); w = w1; } wsi->h2.h2n->pps = NULL; } if (( #if defined(LWS_WITH_CLIENT) wsi->client_mux_substream || #endif wsi->mux_substream) && wsi->mux.parent_wsi) { lws_wsi_mux_sibling_disconnect(wsi); if (wsi->h2.pending_status_body) lws_free_set_NULL(wsi->h2.pending_status_body); } return 0; } static int rops_callback_on_writable_h2(struct lws *wsi) { #if defined(LWS_WITH_CLIENT) struct lws *network_wsi; #endif int already; // if (!lwsi_role_h2(wsi) && !lwsi_role_h2_ENCAPSULATION(wsi)) // return 0; if (wsi->mux.requested_POLLOUT #if defined(LWS_WITH_CLIENT) && !wsi->client_h2_alpn #endif ) { lwsl_debug("already pending writable\n"); // return 1; } /* is this for DATA or for control messages? */ if (wsi->upgraded_to_http2 && !wsi->h2.h2n->pps && lws_wsi_txc_check_skint(&wsi->txc, lws_h2_tx_cr_get(wsi))) { /* * refuse his efforts to get WRITABLE if we have no credit and * no non-DATA pps to send */ lwsl_err("%s: skint\n", __func__); return 0; } #if defined(LWS_WITH_CLIENT) network_wsi = lws_get_network_wsi(wsi); #endif already = lws_wsi_mux_mark_parents_needing_writeable(wsi); /* for network action, act only on the network wsi */ if (already #if defined(LWS_WITH_CLIENT) && !network_wsi->client_h2_alpn && !network_wsi->client_mux_substream #endif ) return 1; return 0; } #if defined(LWS_WITH_SERVER) static int lws_h2_bind_for_post_before_action(struct lws *wsi) { const struct lws_http_mount *hit; int uri_len = 0, methidx; char *uri_ptr = NULL; uint8_t *buffered; const char *p; size_t blen; p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_METHOD); if (!p || strcmp(p, "POST")) return 0; if (!lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_COLON_PATH) || !lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_PATH)) /* * There must be a path. Actually this is checked at * http2.c along with the other required header * presence before we can get here. * * But Coverity insists to see us check it. */ return 1; hit = lws_find_mount(wsi, lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_PATH), lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_COLON_PATH)); lwsl_debug("%s: %s: hit %p: %s\n", __func__, lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_PATH), hit, hit ? hit->origin : "null"); if (hit) { const struct lws_protocols *pp; const char *name = hit->origin; if (hit->origin_protocol == LWSMPRO_CGI || hit->origin_protocol == LWSMPRO_HTTP || hit->origin_protocol == LWSMPRO_HTTPS) return 0; if (hit->protocol) name = hit->protocol; else if (hit->origin_protocol == LWSMPRO_FILE) return 0; pp = lws_vhost_name_to_protocol(wsi->a.vhost, name); if (!pp) { lwsl_info("Unable to find protocol '%s'\n", name); return 1; } if (lws_bind_protocol(wsi, pp, __func__)) return 1; } methidx = lws_http_get_uri_and_method(wsi, &uri_ptr, &uri_len); if (methidx >= 0) if (wsi->a.protocol->callback(wsi, LWS_CALLBACK_HTTP, wsi->user_space, hit ? uri_ptr + hit->mountpoint_len : uri_ptr, (size_t)(hit ? uri_len - hit->mountpoint_len : uri_len))) return 1; #if defined(LWS_WITH_ACCESS_LOG) lws_prepare_access_log_info(wsi, uri_ptr, uri_len, methidx); #endif lwsl_info("%s: setting LRS_BODY from 0x%x (%s)\n", __func__, (int)wsi->wsistate, wsi->a.protocol->name); lwsi_set_state(wsi, LRS_BODY); if (wsi->http.content_length_explicitly_zero) return 0; /* * Dump any stashed body */ while (((!wsi->http.content_length_given) || wsi->http.rx_content_length) && (blen = lws_buflist_next_segment_len(&wsi->buflist, &buffered))) { if ((size_t)wsi->http.rx_content_length < blen) blen = (size_t)wsi->http.rx_content_length; if (wsi->a.protocol->callback(wsi, LWS_CALLBACK_HTTP_BODY, wsi->user_space, buffered, blen)) return 1; lws_buflist_use_segment(&wsi->buflist, blen); wsi->http.rx_content_length -= blen; } if (!wsi->buflist) /* Take us off the pt's "wsi holding input buflist" list */ lws_dll2_remove(&wsi->dll_buflist); if (wsi->http.content_length_given && wsi->http.rx_content_length) /* still a-ways to go */ return 0; if (!wsi->http.content_length_given && !wsi->h2.END_STREAM) return 0; if (wsi->a.protocol->callback(wsi, LWS_CALLBACK_HTTP_BODY_COMPLETION, wsi->user_space, NULL, 0)) return 1; return 0; } #endif /* * we are the 'network wsi' for potentially many muxed child wsi with * no network connection of their own, who have to use us for all their * network actions. So we use a round-robin scheme to share out the * POLLOUT notifications to our children. * * But because any child could exhaust the socket's ability to take * writes, we can only let one child get notified each time. * * In addition children may be closed / deleted / added between POLLOUT * notifications, so we can't hold pointers */ static int rops_perform_user_POLLOUT_h2(struct lws *wsi) { struct lws **wsi2; #if defined(LWS_ROLE_WS) int write_type = LWS_WRITE_PONG; #endif int n; wsi = lws_get_network_wsi(wsi); wsi->mux.requested_POLLOUT = 0; // if (!wsi->h2.initialized) { // lwsl_info("pollout on uninitialized http2 conn\n"); // return 0; // } lws_wsi_mux_dump_waiting_children(wsi); wsi2 = &wsi->mux.child_list; if (!*wsi2) return 0; do { struct lws *w, **wa; wa = &(*wsi2)->mux.sibling_list; if (!(*wsi2)->mux.requested_POLLOUT) goto next_child; /* * we're going to do writable callback for this child. * move him to be the last child */ lwsl_debug("servicing child %s\n", lws_wsi_tag(*wsi2)); w = lws_wsi_mux_move_child_to_tail(wsi2); if (!w) { wa = &wsi->mux.child_list; goto next_child; } lwsl_info("%s: child %s, sid %d, (wsistate 0x%x)\n", __func__, lws_wsi_tag(w), w->mux.my_sid, (unsigned int)w->wsistate); /* priority 1: post compression-transform buffered output */ if (lws_has_buffered_out(w)) { lwsl_debug("%s: completing partial\n", __func__); if (lws_issue_raw(w, NULL, 0) < 0) { lwsl_info("%s signalling to close\n", __func__); lws_close_free_wsi(w, LWS_CLOSE_STATUS_NOSTATUS, "h2 end stream 1"); wa = &wsi->mux.child_list; goto next_child; } lws_callback_on_writable(w); wa = &wsi->mux.child_list; goto next_child; } /* priority 2: pre compression-transform buffered output */ #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) if (w->http.comp_ctx.buflist_comp || w->http.comp_ctx.may_have_more) { enum lws_write_protocol wp = LWS_WRITE_HTTP; lwsl_info("%s: completing comp partial" "(buflist_comp %p, may %d)\n", __func__, w->http.comp_ctx.buflist_comp, w->http.comp_ctx.may_have_more); if (rops_write_role_protocol_h2(w, NULL, 0, &wp) < 0) { lwsl_info("%s signalling to close\n", __func__); lws_close_free_wsi(w, LWS_CLOSE_STATUS_NOSTATUS, "comp write fail"); } lws_callback_on_writable(w); wa = &wsi->mux.child_list; goto next_child; } #endif /* priority 3: if no buffered out and waiting for that... */ if (lwsi_state(w) == LRS_FLUSHING_BEFORE_CLOSE) { w->socket_is_permanently_unusable = 1; lws_close_free_wsi(w, LWS_CLOSE_STATUS_NOSTATUS, "h2 end stream 1"); wa = &wsi->mux.child_list; goto next_child; } /* if we arrived here, even by looping, we checked choked */ w->could_have_pending = 0; wsi->could_have_pending = 0; if (w->h2.pending_status_body) { w->h2.send_END_STREAM = 1; n = lws_write(w, (uint8_t *)w->h2.pending_status_body + LWS_PRE, strlen(w->h2.pending_status_body + LWS_PRE), LWS_WRITE_HTTP_FINAL); lws_free_set_NULL(w->h2.pending_status_body); lws_close_free_wsi(w, LWS_CLOSE_STATUS_NOSTATUS, "h2 end stream 1"); wa = &wsi->mux.child_list; goto next_child; } #if defined(LWS_WITH_CLIENT) if (lwsi_state(w) == LRS_H2_WAITING_TO_SEND_HEADERS) { if (lws_h2_client_handshake(w)) return -1; goto next_child; } #endif #if defined(LWS_WITH_SERVER) if (lwsi_state(w) == LRS_DEFERRING_ACTION) { /* * we had to defer the http_action to the POLLOUT * handler, because we know it will send something and * only in the POLLOUT handler do we know for sure * that there is no partial pending on the network wsi. */ lwsi_set_state(w, LRS_ESTABLISHED); if (w->buflist) { struct lws_context_per_thread *pt; pt = &w->a.context->pt[(int)w->tsi]; lwsl_debug("%s: added %s to rxflow list\n", __func__, lws_wsi_tag(w)); lws_dll2_add_head( &w->dll_buflist, &pt->dll_buflist_owner); } if (lws_h2_bind_for_post_before_action(w)) return -1; /* * Well, we could be getting a POST from the client, it * may not have any content-length. In that case, we * will be in LRS_BODY state, we can't actually start * the action until we had the body and the stream is * half-closed, indicating that we can reply */ if (lwsi_state(w) == LRS_BODY && w->h2.h2_state != LWS_H2_STATE_HALF_CLOSED_REMOTE) goto next_child; lwsl_info(" h2 action start...\n"); n = lws_http_action(w); if (n < 0) lwsl_info (" h2 action result %d\n", n); else lwsl_info(" h2 action result %d " "(wsi->http.rx_content_remain %lld)\n", n, w->http.rx_content_remain); /* * Commonly we only managed to start a larger transfer * that will complete asynchronously under its own wsi * states. In those cases we will hear about * END_STREAM going out in the POLLOUT handler. */ if (n >= 0 && !w->h2.pending_status_body && (n || w->h2.send_END_STREAM)) { lwsl_info("closing stream after h2 action\n"); lws_close_free_wsi(w, LWS_CLOSE_STATUS_NOSTATUS, "h2 end stream"); wa = &wsi->mux.child_list; } if (n < 0) wa = &wsi->mux.child_list; goto next_child; } #if defined(LWS_WITH_FILE_OPS) if (lwsi_state(w) == LRS_ISSUING_FILE) { if (lws_wsi_txc_check_skint(&w->txc, lws_h2_tx_cr_get(w))) { wa = &wsi->mux.child_list; goto next_child; } ((volatile struct lws *)w)->leave_pollout_active = 0; /* >0 == completion, <0 == error * * We'll get a LWS_CALLBACK_HTTP_FILE_COMPLETION * callback when it's done. That's the case even if we * just completed the send, so wait for that. */ n = lws_serve_http_file_fragment(w); lwsl_debug("lws_serve_http_file_fragment says %d\n", n); /* * We will often hear about out having sent the final * DATA here... if so close the actual wsi */ if (n < 0 || w->h2.send_END_STREAM) { lwsl_debug("Closing POLLOUT child %s\n", lws_wsi_tag(w)); lws_close_free_wsi(w, LWS_CLOSE_STATUS_NOSTATUS, "h2 end stream file"); wa = &wsi->mux.child_list; goto next_child; } if (n > 0) if (lws_http_transaction_completed(w)) return -1; if (!n) { lws_callback_on_writable(w); (w)->mux.requested_POLLOUT = 1; } goto next_child; } #endif #endif #if defined(LWS_ROLE_WS) /* Notify peer that we decided to close */ if (lwsi_role_ws(w) && lwsi_state(w) == LRS_WAITING_TO_SEND_CLOSE) { lwsl_debug("sending close packet\n"); w->waiting_to_send_close_frame = 0; n = lws_write(w, &w->ws->ping_payload_buf[LWS_PRE], w->ws->close_in_ping_buffer_len, LWS_WRITE_CLOSE); if (n >= 0) { lwsi_set_state(w, LRS_AWAITING_CLOSE_ACK); lws_set_timeout(w, PENDING_TIMEOUT_CLOSE_ACK, 5); lwsl_debug("sent close frame, awaiting ack\n"); } goto next_child; } /* * Acknowledge receipt of peer's notification he closed, * then logically close ourself */ if ((lwsi_role_ws(w) && w->ws->pong_pending_flag) || (lwsi_state(w) == LRS_RETURNED_CLOSE && w->ws->payload_is_close)) { if (w->ws->payload_is_close) write_type = LWS_WRITE_CLOSE | LWS_WRITE_H2_STREAM_END; n = lws_write(w, &w->ws->pong_payload_buf[LWS_PRE], w->ws->pong_payload_len, (enum lws_write_protocol)write_type); if (n < 0) return -1; /* well he is sent, mark him done */ w->ws->pong_pending_flag = 0; if (w->ws->payload_is_close) { /* oh... a close frame... then we are done */ lwsl_debug("Ack'd peer's close packet\n"); w->ws->payload_is_close = 0; lwsi_set_state(w, LRS_RETURNED_CLOSE); lws_close_free_wsi(w, LWS_CLOSE_STATUS_NOSTATUS, "returned close packet"); wa = &wsi->mux.child_list; goto next_child; } lws_callback_on_writable(w); (w)->mux.requested_POLLOUT = 1; /* otherwise for PING, leave POLLOUT active both ways */ goto next_child; } #endif /* * set client wsi to immortal long-poll mode; send END_STREAM * flag on headers to indicate to a server, that allows * it, that you want them to leave the stream in a long poll * ro immortal state. We have to send headers so the client * understands the http connection is ongoing. */ if (w->h2.send_END_STREAM && w->h2.long_poll) { uint8_t buf[LWS_PRE + 1]; enum lws_write_protocol wp = 0; if (!rops_write_role_protocol_h2(w, buf + LWS_PRE, 0, &wp)) { lwsl_info("%s: %s: entering ro long poll\n", __func__, lws_wsi_tag(w)); lws_mux_mark_immortal(w); } else lwsl_err("%s: %s: failed to set long poll\n", __func__, lws_wsi_tag(w)); goto next_child; } if (lws_callback_as_writeable(w)) { lwsl_info("Closing POLLOUT child (end stream %d)\n", w->h2.send_END_STREAM); lws_close_free_wsi(w, LWS_CLOSE_STATUS_NOSTATUS, "h2 pollout handle"); wa = &wsi->mux.child_list; } else if (w->h2.send_END_STREAM) lws_h2_state(w, LWS_H2_STATE_HALF_CLOSED_LOCAL); next_child: wsi2 = wa; } while (wsi2 && *wsi2 && !lws_send_pipe_choked(wsi)); // lws_wsi_mux_dump_waiting_children(wsi); if (lws_wsi_mux_action_pending_writeable_reqs(wsi)) return -1; return 0; } static struct lws * rops_encapsulation_parent_h2(struct lws *wsi) { if (wsi->mux.parent_wsi) return wsi->mux.parent_wsi; return NULL; } static int rops_alpn_negotiated_h2(struct lws *wsi, const char *alpn) { struct allocated_headers *ah; lwsl_debug("%s: client %d\n", __func__, lwsi_role_client(wsi)); #if defined(LWS_WITH_CLIENT) if (lwsi_role_client(wsi)) { lwsl_info("%s: upgraded to H2\n", __func__); wsi->client_h2_alpn = 1; } #endif wsi->upgraded_to_http2 = 1; /* adopt the header info */ ah = wsi->http.ah; lws_role_transition(wsi, lwsi_role_client(wsi) ? LWSIFR_CLIENT : LWSIFR_SERVER, LRS_H2_AWAIT_PREFACE, &role_ops_h2); /* http2 union member has http union struct at start */ wsi->http.ah = ah; if (!wsi->h2.h2n) wsi->h2.h2n = lws_zalloc(sizeof(*wsi->h2.h2n), "h2n"); if (!wsi->h2.h2n) return 1; lws_h2_init(wsi); /* HTTP2 union */ if (lws_hpack_dynamic_size(wsi, (int)wsi->h2.h2n->our_set.s[H2SET_HEADER_TABLE_SIZE])) return 1; wsi->txc.tx_cr = 65535; lwsl_info("%s: %s: configured for h2\n", __func__, lws_wsi_tag(wsi)); return 0; } static int rops_issue_keepalive_h2(struct lws *wsi, int isvalid) { struct lws *nwsi = lws_get_network_wsi(wsi); struct lws_h2_protocol_send *pps; uint64_t us = (uint64_t)lws_now_usecs(); if (isvalid) { _lws_validity_confirmed_role(nwsi); return 0; } /* * We can only send these frames on the network connection itself... * we shouldn't be tracking validity on anything else */ assert(wsi == nwsi); pps = lws_h2_new_pps(LWS_H2_PPS_PING); if (!pps) return 1; /* * The peer is defined to copy us back the unchanged payload in another * PING frame this time with ACK set. So by sending that out with the * current time, it's an interesting opportunity to learn the effective * RTT on the link when the PONG comes in, plus or minus the time to * schedule the PPS. */ memcpy(pps->u.ping.ping_payload, &us, 8); lws_pps_schedule(nwsi, pps); return 0; } static const lws_rops_t rops_table_h2[] = { #if defined(LWS_WITH_SERVER) /* 1 */ { .check_upgrades = rops_check_upgrades_h2 }, #else /* 1 */ { .check_upgrades = NULL }, #endif /* 2 */ { .pt_init_destroy = rops_pt_init_destroy_h2 }, /* 3 */ { .init_vhost = rops_init_vhost_h2 }, /* 4 */ { .handle_POLLIN = rops_handle_POLLIN_h2 }, /* 5 */ { .handle_POLLOUT = rops_handle_POLLOUT_h2 }, /* 6 */ { .perform_user_POLLOUT = rops_perform_user_POLLOUT_h2 }, /* 7 */ { .callback_on_writable = rops_callback_on_writable_h2 }, /* 8 */ { .tx_credit = rops_tx_credit_h2 }, /* 9 */ { .write_role_protocol = rops_write_role_protocol_h2 }, /* 10 */ { .encapsulation_parent = rops_encapsulation_parent_h2 }, /* 11 */ { .alpn_negotiated = rops_alpn_negotiated_h2 }, /* 12 */ { .close_kill_connection = rops_close_kill_connection_h2 }, /* 13 */ { .destroy_role = rops_destroy_role_h2 }, /* 14 */ { .issue_keepalive = rops_issue_keepalive_h2 }, }; const struct lws_role_ops role_ops_h2 = { /* role name */ "h2", /* alpn id */ "h2", /* rops_table */ rops_table_h2, /* rops_idx */ { /* LWS_ROPS_check_upgrades */ #if defined(LWS_WITH_SERVER) /* LWS_ROPS_pt_init_destroy */ 0x12, #else /* LWS_ROPS_pt_init_destroy */ 0x02, #endif /* LWS_ROPS_init_vhost */ /* LWS_ROPS_destroy_vhost */ 0x30, /* LWS_ROPS_service_flag_pending */ /* LWS_ROPS_handle_POLLIN */ 0x04, /* LWS_ROPS_handle_POLLOUT */ /* LWS_ROPS_perform_user_POLLOUT */ 0x56, /* LWS_ROPS_callback_on_writable */ /* LWS_ROPS_tx_credit */ 0x78, /* LWS_ROPS_write_role_protocol */ /* LWS_ROPS_encapsulation_parent */ 0x9a, /* LWS_ROPS_alpn_negotiated */ /* LWS_ROPS_close_via_role_protocol */ 0xb0, /* LWS_ROPS_close_role */ /* LWS_ROPS_close_kill_connection */ 0x0c, /* LWS_ROPS_destroy_role */ /* LWS_ROPS_adoption_bind */ 0xd0, /* LWS_ROPS_client_bind */ /* LWS_ROPS_issue_keepalive */ 0x0e, }, /* adoption_cb clnt, srv */ { LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED, LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED }, /* rx cb clnt, srv */ { LWS_CALLBACK_RECEIVE_CLIENT_HTTP, 0 /* may be POST, etc */ }, /* writeable cb clnt, srv */ { LWS_CALLBACK_CLIENT_HTTP_WRITEABLE, LWS_CALLBACK_HTTP_WRITEABLE }, /* close cb clnt, srv */ { LWS_CALLBACK_CLOSED_CLIENT_HTTP, LWS_CALLBACK_CLOSED_HTTP }, /* protocol_bind cb c, srv */ { LWS_CALLBACK_CLIENT_HTTP_BIND_PROTOCOL, LWS_CALLBACK_HTTP_BIND_PROTOCOL }, /* protocol_unbind cb c, srv */ { LWS_CALLBACK_CLIENT_HTTP_DROP_PROTOCOL, LWS_CALLBACK_HTTP_DROP_PROTOCOL }, /* file_handle */ 0, }; libwebsockets-4.3.5/lib/roles/h2/private-lib-roles-h2.h000066400000000000000000000260571476025525100226270ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ extern const struct lws_role_ops role_ops_h2; #define lwsi_role_h2(wsi) (wsi->role_ops == &role_ops_h2) struct http2_settings { uint32_t s[H2SET_COUNT]; }; struct lws_vhost_role_h2 { struct http2_settings set; }; enum lws_h2_wellknown_frame_types { LWS_H2_FRAME_TYPE_DATA, LWS_H2_FRAME_TYPE_HEADERS, LWS_H2_FRAME_TYPE_PRIORITY, LWS_H2_FRAME_TYPE_RST_STREAM, LWS_H2_FRAME_TYPE_SETTINGS, LWS_H2_FRAME_TYPE_PUSH_PROMISE, LWS_H2_FRAME_TYPE_PING, LWS_H2_FRAME_TYPE_GOAWAY, LWS_H2_FRAME_TYPE_WINDOW_UPDATE, LWS_H2_FRAME_TYPE_CONTINUATION, LWS_H2_FRAME_TYPE_COUNT /* always last */ }; enum lws_h2_flags { LWS_H2_FLAG_END_STREAM = 1, LWS_H2_FLAG_END_HEADERS = 4, LWS_H2_FLAG_PADDED = 8, LWS_H2_FLAG_PRIORITY = 0x20, LWS_H2_FLAG_SETTINGS_ACK = 1, }; enum lws_h2_errors { H2_ERR_NO_ERROR, /* Graceful shutdown */ H2_ERR_PROTOCOL_ERROR, /* Protocol error detected */ H2_ERR_INTERNAL_ERROR, /* Implementation fault */ H2_ERR_FLOW_CONTROL_ERROR, /* Flow-control limits exceeded */ H2_ERR_SETTINGS_TIMEOUT, /* Settings not acknowledged */ H2_ERR_STREAM_CLOSED, /* Frame received for closed stream */ H2_ERR_FRAME_SIZE_ERROR, /* Frame size incorrect */ H2_ERR_REFUSED_STREAM, /* Stream not processed */ H2_ERR_CANCEL, /* Stream cancelled */ H2_ERR_COMPRESSION_ERROR, /* Compression state not updated */ H2_ERR_CONNECT_ERROR, /* TCP connection error for CONNECT method */ H2_ERR_ENHANCE_YOUR_CALM, /* Processing capacity exceeded */ H2_ERR_INADEQUATE_SECURITY, /* Negotiated TLS parameters not acceptable */ H2_ERR_HTTP_1_1_REQUIRED, /* Use HTTP/1.1 for the request */ }; enum lws_h2_states { LWS_H2_STATE_IDLE, /* * Send PUSH_PROMISE -> LWS_H2_STATE_RESERVED_LOCAL * Recv PUSH_PROMISE -> LWS_H2_STATE_RESERVED_REMOTE * Send HEADERS -> LWS_H2_STATE_OPEN * Recv HEADERS -> LWS_H2_STATE_OPEN * * - Only PUSH_PROMISE + HEADERS valid to send * - Only HEADERS or PRIORITY valid to receive */ LWS_H2_STATE_RESERVED_LOCAL, /* * Send RST_STREAM -> LWS_H2_STATE_CLOSED * Recv RST_STREAM -> LWS_H2_STATE_CLOSED * Send HEADERS -> LWS_H2_STATE_HALF_CLOSED_REMOTE * * - Only HEADERS, RST_STREAM, or PRIORITY valid to send * - Only RST_STREAM, PRIORITY, or WINDOW_UPDATE valid to receive */ LWS_H2_STATE_RESERVED_REMOTE, /* * Send RST_STREAM -> LWS_H2_STATE_CLOSED * Recv RST_STREAM -> LWS_H2_STATE_CLOSED * Recv HEADERS -> LWS_H2_STATE_HALF_CLOSED_LOCAL * * - Only RST_STREAM, WINDOW_UPDATE, or PRIORITY valid to send * - Only HEADERS, RST_STREAM, or PRIORITY valid to receive */ LWS_H2_STATE_OPEN, /* * Send RST_STREAM -> LWS_H2_STATE_CLOSED * Recv RST_STREAM -> LWS_H2_STATE_CLOSED * Send END_STREAM flag -> LWS_H2_STATE_HALF_CLOSED_LOCAL * Recv END_STREAM flag -> LWS_H2_STATE_HALF_CLOSED_REMOTE */ LWS_H2_STATE_HALF_CLOSED_REMOTE, /* * Send RST_STREAM -> LWS_H2_STATE_CLOSED * Recv RST_STREAM -> LWS_H2_STATE_CLOSED * Send END_STREAM flag -> LWS_H2_STATE_CLOSED * * - Any frame valid to send * - Only WINDOW_UPDATE, PRIORITY, or RST_STREAM valid to receive */ LWS_H2_STATE_HALF_CLOSED_LOCAL, /* * Send RST_STREAM -> LWS_H2_STATE_CLOSED * Recv RST_STREAM -> LWS_H2_STATE_CLOSED * Recv END_STREAM flag -> LWS_H2_STATE_CLOSED * * - Only WINDOW_UPDATE, PRIORITY, and RST_STREAM valid to send * - Any frame valid to receive */ LWS_H2_STATE_CLOSED, /* * - Only PRIORITY, WINDOW_UPDATE (IGNORE) and RST_STREAM (IGNORE) * may be received * * - Only PRIORITY valid to send */ }; void lws_h2_state(struct lws *wsi, enum lws_h2_states s); #define LWS_H2_STREAM_ID_MASTER 0 #define LWS_H2_SETTINGS_LEN 6 #define LWS_H2_FLAG_SETTINGS_ACK 1 enum http2_hpack_state { HPKS_TYPE, HPKS_IDX_EXT, HPKS_HLEN, HPKS_HLEN_EXT, HPKS_DATA, }; /* * lws general parsimonious header strategy is only store values from known * headers, and refer to them by index. * * That means if we can't map the peer header name to one that lws knows, we * will drop the content but track the indexing with associated_lws_hdr_idx = * LWS_HPACK_IGNORE_ENTRY. */ enum http2_hpack_type { HPKT_INDEXED_HDR_7, /* 1xxxxxxx: just "header field" */ HPKT_INDEXED_HDR_6_VALUE_INCR, /* 01xxxxxx: NEW indexed hdr with value */ HPKT_LITERAL_HDR_VALUE_INCR, /* 01000000: NEW literal hdr with value */ HPKT_INDEXED_HDR_4_VALUE, /* 0000xxxx: indexed hdr with value */ HPKT_INDEXED_HDR_4_VALUE_NEVER, /* 0001xxxx: indexed hdr with value NEVER NEW */ HPKT_LITERAL_HDR_VALUE, /* 00000000: literal hdr with value */ HPKT_LITERAL_HDR_VALUE_NEVER, /* 00010000: literal hdr with value NEVER NEW */ HPKT_SIZE_5 }; #define LWS_HPACK_IGNORE_ENTRY 0xffff struct hpack_dt_entry { char *value; /* malloc'd */ uint16_t value_len; uint16_t hdr_len; /* virtual, for accounting */ uint16_t lws_hdr_idx; /* LWS_HPACK_IGNORE_ENTRY = IGNORE */ }; struct hpack_dynamic_table { struct hpack_dt_entry *entries; /* malloc'd */ uint32_t virtual_payload_usage; uint32_t virtual_payload_max; uint16_t pos; uint16_t used_entries; uint16_t num_entries; }; enum lws_h2_protocol_send_type { LWS_PPS_NONE, LWS_H2_PPS_MY_SETTINGS, LWS_H2_PPS_ACK_SETTINGS, LWS_H2_PPS_PING, LWS_H2_PPS_PONG, LWS_H2_PPS_GOAWAY, LWS_H2_PPS_RST_STREAM, LWS_H2_PPS_UPDATE_WINDOW, LWS_H2_PPS_SETTINGS_INITIAL_UPDATE_WINDOW }; struct lws_h2_protocol_send { struct lws_h2_protocol_send *next; /* linked list */ enum lws_h2_protocol_send_type type; union uu { struct { char str[32]; uint32_t highest_sid; uint32_t err; } ga; struct { uint32_t sid; uint32_t err; } rs; struct { uint8_t ping_payload[8]; } ping; struct { uint32_t sid; uint32_t credit; } update_window; } u; }; struct lws_h2_ghost_sid { struct lws_h2_ghost_sid *next; uint32_t sid; }; /* * http/2 connection info that is only used by the root connection that has * the network connection. * * h2 tends to spawn many child connections from one network connection, so * it's necessary to make members only needed by the network connection * distinct and only malloc'd on network connections. * * There's only one HPACK parser per network connection. * * But there is an ah per logical child connection... the network connection * fills it but it belongs to the logical child. */ struct lws_h2_netconn { struct http2_settings our_set; struct http2_settings peer_set; struct hpack_dynamic_table hpack_dyn_table; uint8_t ping_payload[8]; uint8_t one_setting[LWS_H2_SETTINGS_LEN]; char goaway_str[32]; /* for rx */ struct lws *swsi; struct lws_h2_protocol_send *pps; /* linked list */ enum http2_hpack_state hpack; enum http2_hpack_type hpack_type; unsigned int huff:1; unsigned int value:1; unsigned int unknown_header:1; unsigned int cont_exp:1; unsigned int cont_exp_headers:1; unsigned int we_told_goaway:1; unsigned int pad_length:1; unsigned int collected_priority:1; unsigned int is_first_header_char:1; unsigned int zero_huff_padding:1; unsigned int last_action_dyntable_resize:1; unsigned int sent_preface:1; uint32_t hdr_idx; uint32_t hpack_len; uint32_t hpack_e_dep; uint32_t count; uint32_t preamble; uint32_t length; uint32_t sid; uint32_t inside; uint32_t highest_sid; uint32_t highest_sid_opened; uint32_t cont_exp_sid; uint32_t dep; uint32_t goaway_last_sid; uint32_t goaway_err; uint32_t hpack_hdr_len; uint16_t hpack_pos; uint8_t frame_state; uint8_t type; uint8_t flags; uint8_t padding; uint8_t weight_temp; uint8_t huff_pad; char first_hdr_char; uint8_t hpack_m; uint8_t ext_count; }; struct _lws_h2_related { struct lws_h2_netconn *h2n; /* malloc'd for root net conn */ char *pending_status_body; uint8_t h2_state; /* RFC7540 state of the connection */ uint8_t END_STREAM:1; uint8_t END_HEADERS:1; uint8_t send_END_STREAM:1; uint8_t long_poll:1; uint8_t initialized:1; }; #define HTTP2_IS_TOPLEVEL_WSI(wsi) (!wsi->mux.parent_wsi) int lws_h2_rst_stream(struct lws *wsi, uint32_t err, const char *reason); struct lws * lws_h2_get_nth_child(struct lws *wsi, int n); void lws_h2_init(struct lws *wsi); int lws_h2_settings(struct lws *nwsi, struct http2_settings *settings, unsigned char *buf, int len); int lws_h2_parser(struct lws *wsi, unsigned char *in, lws_filepos_t inlen, lws_filepos_t *inused); int lws_h2_do_pps_send(struct lws *wsi); int lws_h2_frame_write(struct lws *wsi, int type, int flags, unsigned int sid, unsigned int len, unsigned char *buf); struct lws * lws_wsi_mux_from_id(struct lws *wsi, unsigned int sid); int lws_hpack_interpret(struct lws *wsi, unsigned char c); int lws_add_http2_header_by_name(struct lws *wsi, const unsigned char *name, const unsigned char *value, int length, unsigned char **p, unsigned char *end); int lws_add_http2_header_by_token(struct lws *wsi, enum lws_token_indexes token, const unsigned char *value, int length, unsigned char **p, unsigned char *end); int lws_add_http2_header_status(struct lws *wsi, unsigned int code, unsigned char **p, unsigned char *end); void lws_hpack_destroy_dynamic_header(struct lws *wsi); int lws_hpack_dynamic_size(struct lws *wsi, int size); int lws_h2_goaway(struct lws *wsi, uint32_t err, const char *reason); int lws_h2_tx_cr_get(struct lws *wsi); void lws_h2_tx_cr_consume(struct lws *wsi, int consumed); int lws_hdr_extant(struct lws *wsi, enum lws_token_indexes h); void lws_pps_schedule(struct lws *wsi, struct lws_h2_protocol_send *pss); extern const struct http2_settings lws_h2_defaults; int lws_h2_ws_handshake(struct lws *wsi); int lws_h2_issue_preface(struct lws *wsi); int lws_h2_client_handshake(struct lws *wsi); struct lws * lws_wsi_h2_adopt(struct lws *parent_wsi, struct lws *wsi); int lws_handle_POLLOUT_event_h2(struct lws *wsi); int lws_read_h2(struct lws *wsi, unsigned char *buf, lws_filepos_t len); struct lws_h2_protocol_send * lws_h2_new_pps(enum lws_h2_protocol_send_type type); libwebsockets-4.3.5/lib/roles/http/000077500000000000000000000000001476025525100172435ustar00rootroot00000000000000libwebsockets-4.3.5/lib/roles/http/CMakeLists.txt000066400000000000000000000053511476025525100220070ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # # The strategy is to only export to PARENT_SCOPE # # - changes to LIB_LIST # - changes to SOURCES # - includes via include_directories # # and keep everything else private include_directories(. ./compression) list(APPEND SOURCES roles/http/header.c roles/http/date.c roles/http/parsers.c) if (NOT LWS_WITHOUT_SERVER) list(APPEND SOURCES roles/http/server/server.c roles/http/server/lws-spa.c) endif() if (LWS_WITH_CACHE_NSCOOKIEJAR AND LWS_WITH_CLIENT) list(APPEND SOURCES roles/http/cookie.c) endif() if (LWS_WITH_HTTP_PROXY AND LWS_WITH_HUBBUB) list(APPEND SOURCES roles/http/server/rewrite.c) endif() if (LWS_WITH_ACCESS_LOG) list(APPEND SOURCES roles/http/server/access-log.c) endif() if (LWS_WITH_HTTP_STREAM_COMPRESSION) list(APPEND SOURCES roles/http/compression/stream.c roles/http/compression/deflate/deflate.c) if (LWS_WITH_HTTP_BROTLI) list(APPEND SOURCES roles/http/compression/brotli/brotli.c) list(APPEND LIB_LIST brotlienc brotlidec brotlidec) endif() endif() if (LWS_WITH_LEJP_CONF AND LWS_WITH_NETWORK AND NOT LWS_PLAT_OPTEE) list(APPEND SOURCES roles/http/server/lejp-conf.c ) endif() if (LWS_WITH_RANGES) list(APPEND SOURCES roles/http/server/ranges.c) endif() if (LWS_WITH_ZIP_FOPS) if (LWS_WITH_ZLIB) list(APPEND SOURCES roles/http/server/fops-zip.c) else() message(FATAL_ERROR "Pre-zipped file support (LWS_WITH_ZIP_FOPS) requires ZLIB (LWS_WITH_ZLIB)") endif() endif() # # Keep explicit parent scope exports at end # exports_to_parent_scope() libwebsockets-4.3.5/lib/roles/http/client/000077500000000000000000000000001476025525100205215ustar00rootroot00000000000000libwebsockets-4.3.5/lib/roles/http/client/client-http.c000066400000000000000000001260541476025525100231300ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" void lws_client_http_body_pending(struct lws *wsi, int something_left_to_send) { wsi->client_http_body_pending = !!something_left_to_send; } int lws_http_client_socket_service(struct lws *wsi, struct lws_pollfd *pollfd) { struct lws_context *context = wsi->a.context; struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; char *p = (char *)&pt->serv_buf[0]; #if defined(LWS_WITH_TLS) char ebuf[128]; #endif const char *cce = NULL; char *sb = p; int n = 0; switch (lwsi_state(wsi)) { case LRS_WAITING_DNS: /* * we are under PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE * timeout protection set in client-handshake.c */ lwsl_err("%s: %s: WAITING_DNS\n", __func__, lws_wsi_tag(wsi)); if (!lws_client_connect_2_dnsreq(wsi)) { /* closed */ lwsl_client("closed\n"); return -1; } /* either still pending connection, or changed mode */ return 0; case LRS_WAITING_CONNECT: /* * we are under PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE * timeout protection set in client-handshake.c */ if (pollfd->revents & LWS_POLLOUT) if (lws_client_connect_3_connect(wsi, NULL, NULL, 0, NULL) == NULL) { lwsl_client("closed\n"); return -1; } break; #if defined(LWS_WITH_SOCKS5) /* SOCKS Greeting Reply */ case LRS_WAITING_SOCKS_GREETING_REPLY: case LRS_WAITING_SOCKS_AUTH_REPLY: case LRS_WAITING_SOCKS_CONNECT_REPLY: switch (lws_socks5c_handle_state(wsi, pollfd, &cce)) { case LW5CHS_RET_RET0: return 0; case LW5CHS_RET_BAIL3: goto bail3; case LW5CHS_RET_STARTHS: goto start_ws_handshake; default: break; } break; #endif #if defined(LWS_CLIENT_HTTP_PROXYING) && (defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2)) case LRS_WAITING_PROXY_REPLY: /* handle proxy hung up on us */ if (pollfd->revents & LWS_POLLHUP) { lwsl_warn("Proxy conn %s (fd=%d) dead\n", lws_wsi_tag(wsi), pollfd->fd); cce = "proxy conn dead"; goto bail3; } n = (int)recv(wsi->desc.sockfd, sb, context->pt_serv_buf_size, 0); if (n < 0) { if (LWS_ERRNO == LWS_EAGAIN) { lwsl_debug("Proxy read EAGAIN... retrying\n"); return 0; } lwsl_err("ERROR reading from proxy socket\n"); cce = "proxy read err"; goto bail3; } /* sanity check what we were sent... */ pt->serv_buf[13] = '\0'; if (n < 13 || strncmp(sb, "HTTP/1.", 7) || (sb[7] != '0' && sb[7] != '1') || sb[8] != ' ') { /* lwsl_hexdump_notice(sb, n); */ cce = "http_proxy fail"; goto bail3; } /* it's h1 alright... what's his logical response code? */ n = atoi(&sb[9]); if (n != 200) { lws_snprintf(sb, 20, "http_proxy -> %u", (unsigned int)n); cce = sb; goto bail3; } lwsl_info("%s: proxy connection extablished\n", __func__); /* clear his proxy connection timeout */ lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); /* fallthru */ #endif /* dummy fallthru to satisfy compiler */ /* fallthru */ case LRS_H1C_ISSUE_HANDSHAKE: lwsl_debug("%s: LRS_H1C_ISSUE_HANDSHAKE\n", __func__); /* * we are under PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE * timeout protection set in client-handshake.c * * take care of our lws_callback_on_writable * happening at a time when there's no real connection yet */ #if defined(LWS_WITH_SOCKS5) start_ws_handshake: #endif if (lws_change_pollfd(wsi, LWS_POLLOUT, 0)) return -1; #if defined(LWS_ROLE_H2) || defined(LWS_WITH_TLS) if ( #if defined(LWS_WITH_TLS) !(wsi->tls.use_ssl & LCCSCF_USE_SSL) #endif #if defined(LWS_ROLE_H2) && defined(LWS_WITH_TLS) && #endif #if defined(LWS_ROLE_H2) !(wsi->flags & LCCSCF_H2_PRIOR_KNOWLEDGE) #endif ) goto hs2; #endif #if defined(LWS_WITH_TLS) n = lws_client_create_tls(wsi, &cce, 1); if (n == CCTLS_RETURN_ERROR) goto bail3; if (n == CCTLS_RETURN_RETRY) return 0; /* * lws_client_create_tls() can already have done the * whole tls setup and preface send... if so he set our state * to LRS_H1C_ISSUE_HANDSHAKE2... let's proceed but be prepared * to notice our state and not resend the preface... */ lwsl_debug("%s: LRS_H1C_ISSUE_HANDSHAKE fallthru\n", __func__); /* fallthru */ case LRS_WAITING_SSL: if (wsi->tls.use_ssl & LCCSCF_USE_SSL) { n = lws_ssl_client_connect2(wsi, ebuf, sizeof(ebuf)); if (!n) return 0; if (n < 0) { cce = ebuf; goto bail3; } } else { wsi->tls.ssl = NULL; if (wsi->flags & LCCSCF_H2_PRIOR_KNOWLEDGE) { lwsl_info("h2 prior knowledge\n"); lws_role_call_alpn_negotiated(wsi, "h2"); } } #endif #if defined (LWS_WITH_HTTP2) if (wsi->client_h2_alpn //&& //lwsi_state(wsi) != LRS_H1C_ISSUE_HANDSHAKE2 ) { /* * We connected to the server and set up tls and * negotiated "h2" or connected as clear text * with http/2 prior knowledge. * * So this is it, we are an h2 nwsi client connection * now, not an h1 client connection. */ lwsl_info("%s: doing h2 hello path\n", __func__); /* * send the H2 preface to legitimize the connection * * transitions us to LRS_H2_WAITING_TO_SEND_HEADERS */ if (wsi->client_h2_alpn) if (lws_h2_issue_preface(wsi)) { cce = "error sending h2 preface"; goto bail3; } // lwsi_set_state(wsi, LRS_H1C_ISSUE_HANDSHAKE2); lws_set_timeout(wsi, PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND, (int)context->timeout_secs); break; } #endif /* fallthru */ case LRS_H1C_ISSUE_HANDSHAKE2: hs2: p = lws_generate_client_handshake(wsi, p); if (p == NULL) { if (wsi->role_ops == &role_ops_raw_skt #if defined(LWS_ROLE_RAW_FILE) || wsi->role_ops == &role_ops_raw_file #endif ) return 0; lwsl_err("Failed to generate handshake for client\n"); lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "chs"); return -1; } /* send our request to the server */ lwsl_info("%s: HANDSHAKE2: %s: sending headers " "(wsistate 0x%lx), w sock %d\n", __func__, lws_wsi_tag(wsi), (unsigned long)wsi->wsistate, wsi->desc.sockfd); n = lws_ssl_capable_write(wsi, (unsigned char *)sb, lws_ptr_diff_size_t(p, sb)); switch (n) { case LWS_SSL_CAPABLE_ERROR: lwsl_debug("ERROR writing to client socket\n"); lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "cws"); return 0; case LWS_SSL_CAPABLE_MORE_SERVICE: lws_callback_on_writable(wsi); break; } if (wsi->client_http_body_pending || lws_has_buffered_out(wsi)) { lwsl_debug("body pending\n"); lwsi_set_state(wsi, LRS_ISSUE_HTTP_BODY); lws_set_timeout(wsi, PENDING_TIMEOUT_CLIENT_ISSUE_PAYLOAD, (int)context->timeout_secs); if (wsi->flags & LCCSCF_HTTP_X_WWW_FORM_URLENCODED) lws_callback_on_writable(wsi); #if defined(LWS_WITH_HTTP_PROXY) if (wsi->http.proxy_clientside && wsi->parent && wsi->parent->http.buflist_post_body) lws_callback_on_writable(wsi); #endif /* user code must ask for writable callback */ break; } lwsi_set_state(wsi, LRS_WAITING_SERVER_REPLY); wsi->hdr_parsing_completed = 0; if (lwsi_state(wsi) == LRS_IDLING) { lwsi_set_state(wsi, LRS_WAITING_SERVER_REPLY); wsi->hdr_parsing_completed = 0; #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) wsi->http.ah->parser_state = WSI_TOKEN_NAME_PART; wsi->http.ah->lextable_pos = 0; wsi->http.ah->unk_pos = 0; /* If we're (re)starting on hdr, need other implied init */ wsi->http.ah->ues = URIES_IDLE; #endif } lws_set_timeout(wsi, PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE, (int)wsi->a.context->timeout_secs); lws_callback_on_writable(wsi); goto client_http_body_sent; case LRS_ISSUE_HTTP_BODY: #if defined(LWS_WITH_HTTP_PROXY) if (wsi->http.proxy_clientside && wsi->parent && wsi->parent->http.buflist_post_body) lws_callback_on_writable(wsi); #endif if (wsi->client_http_body_pending || lws_has_buffered_out(wsi)) { //lws_set_timeout(wsi, // PENDING_TIMEOUT_CLIENT_ISSUE_PAYLOAD, // context->timeout_secs); /* user code must ask for writable callback */ break; } client_http_body_sent: #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) /* prepare ourselves to do the parsing */ wsi->http.ah->parser_state = WSI_TOKEN_NAME_PART; wsi->http.ah->lextable_pos = 0; wsi->http.ah->unk_pos = 0; #endif lwsi_set_state(wsi, LRS_WAITING_SERVER_REPLY); lws_set_timeout(wsi, PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE, (int)context->timeout_secs); break; case LRS_WAITING_SERVER_REPLY: /* * handle server hanging up on us... * but if there is POLLIN waiting, handle that first */ if ((pollfd->revents & (LWS_POLLIN | LWS_POLLHUP)) == LWS_POLLHUP) { if (lws_buflist_total_len(&wsi->buflist)) lws_set_timeout(wsi, PENDING_TIMEOUT_CLOSE_ACK, 3); else { lwsl_debug("Server conn %s (fd=%d) dead\n", lws_wsi_tag(wsi), pollfd->fd); cce = "Peer hung up"; goto bail3; } } if (pollfd->revents & LWS_POLLOUT) if (lws_change_pollfd(wsi, LWS_POLLOUT, 0)) return -1; if (!(pollfd->revents & LWS_POLLIN)) break; #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) /* interpret the server response * * HTTP/1.1 101 Switching Protocols * Upgrade: websocket * Connection: Upgrade * Sec-WebSocket-Accept: me89jWimTRKTWwrS3aRrL53YZSo= * Sec-WebSocket-Nonce: AQIDBAUGBwgJCgsMDQ4PEC== * Sec-WebSocket-Protocol: chat * * we have to take some care here to only take from the * socket bytewise. The browser may (and has been seen to * in the case that onopen() performs websocket traffic) * coalesce both handshake response and websocket traffic * in one packet, since at that point the connection is * definitively ready from browser pov. */ while (wsi->http.ah->parser_state != WSI_PARSING_COMPLETE) { struct lws_tokens eb; int n, m, buffered; eb.token = NULL; eb.len = 0; buffered = lws_buflist_aware_read(pt, wsi, &eb, 0, __func__); lwsl_debug("%s: buflist-aware-read %d %d\n", __func__, buffered, eb.len); if (eb.len == LWS_SSL_CAPABLE_MORE_SERVICE) return 0; if (buffered < 0 || eb.len < 0) { cce = "read failed"; goto bail3; } if (!eb.len) return 0; n = eb.len; if (lws_parse(wsi, eb.token, &n)) { lwsl_warn("problems parsing header\n"); cce = "problems parsing header"; goto bail3; } m = eb.len - n; #if defined(LWS_WITH_SECURE_STREAMS_BUFFER_DUMP) do { lws_ss_handle_t *h = (lws_ss_handle_t *)lws_get_opaque_user_data(wsi); if (!h) break; if (h->info.dump) { h->info.dump(ss_to_userobj(h), (const uint8_t *)eb.token, (size_t)m, (wsi->http.ah->parser_state == WSI_PARSING_COMPLETE) ? 1 : 0); } } while (0); #endif if (lws_buflist_aware_finished_consuming(wsi, &eb, m, buffered, __func__)) return -1; /* * coverity: uncomment if extended * * eb.token += m; * eb.len -= m; */ if (n) { assert(wsi->http.ah->parser_state == WSI_PARSING_COMPLETE); break; } } /* * hs may also be coming in multiple packets, there is a 5-sec * libwebsocket timeout still active here too, so if parsing did * not complete just wait for next packet coming in this state */ if (wsi->http.ah->parser_state != WSI_PARSING_COMPLETE) break; #endif /* * otherwise deal with the handshake. If there's any * packet traffic already arrived we'll trigger poll() again * right away and deal with it that way */ return lws_client_interpret_server_handshake(wsi); bail3: lwsl_info("%s: closing conn at LWS_CONNMODE...SERVER_REPLY, %s, state 0x%x\n", __func__, lws_wsi_tag(wsi), lwsi_state(wsi)); if (cce) lwsl_info("reason: %s\n", cce); else cce = "unknown"; lws_inform_client_conn_fail(wsi, (void *)cce, strlen(cce)); lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "cbail3"); return -1; default: break; } return 0; } #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) int LWS_WARN_UNUSED_RESULT lws_http_transaction_completed_client(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; int n; lwsl_info("%s: %s (%s)\n", __func__, lws_wsi_tag(wsi), wsi->a.protocol->name); // if (wsi->http.ah && wsi->http.ah->http_response) /* we're only judging if any (200, or 500 etc) http txn completed */ lws_metrics_caliper_report(wsi->cal_conn, METRES_GO); if (user_callback_handle_rxflow(wsi->a.protocol->callback, wsi, LWS_CALLBACK_COMPLETED_CLIENT_HTTP, wsi->user_space, NULL, 0)) { lwsl_debug("%s: Completed call returned nonzero (role 0x%lx)\n", __func__, (unsigned long)lwsi_role(wsi)); return -1; } wsi->http.rx_content_length = 0; /* * For h1, wsi may pass some assets on to a queued child and be * destroyed during this. */ lws_pt_lock(pt, __func__); n = _lws_generic_transaction_completed_active_conn(&wsi, 1); lws_pt_unlock(pt); if (wsi->http.ah) { if (wsi->client_mux_substream) /* * As an h2 client, once we did our transaction, that is * it for us. Further transactions will happen as new * SIDs on the connection. */ __lws_header_table_detach(wsi, 0); else if (!n) _lws_header_table_reset(wsi->http.ah); } if (!n || !wsi->http.ah) return 0; /* * H1: we can serialize the queued guys into the same ah * H2: everybody needs their own ah until their own STREAM_END */ /* otherwise set ourselves up ready to go again */ lwsi_set_state(wsi, LRS_WAITING_SERVER_REPLY); wsi->http.ah->parser_state = WSI_TOKEN_NAME_PART; wsi->http.ah->lextable_pos = 0; wsi->http.ah->unk_pos = 0; lws_set_timeout(wsi, PENDING_TIMEOUT_AWAITING_SERVER_RESPONSE, (int)wsi->a.context->timeout_secs); /* If we're (re)starting on headers, need other implied init */ wsi->http.ah->ues = URIES_IDLE; lwsi_set_state(wsi, LRS_H1C_ISSUE_HANDSHAKE2); lwsl_info("%s: %s: new queued transaction\n", __func__, lws_wsi_tag(wsi)); lws_callback_on_writable(wsi); return 0; } unsigned int lws_http_client_http_response(struct lws *wsi) { if (wsi->http.ah && wsi->http.ah->http_response) return wsi->http.ah->http_response; return 0; } #endif #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) int lws_http_is_redirected_to_get(struct lws *wsi) { return wsi->redirected_to_get; } int lws_client_interpret_server_handshake(struct lws *wsi) { int n, port = 0, ssl = 0; int close_reason = LWS_CLOSE_STATUS_PROTOCOL_ERR; const char *prot, *ads = NULL, *path, *cce = NULL; struct allocated_headers *ah, *ah1; struct lws *nwsi = lws_get_network_wsi(wsi); char *p = NULL, *q, *simp; char new_path[300]; void *opaque; // lws_free_set_NULL(wsi->stash); #if defined(LWS_WITH_CONMON) wsi->conmon.ciu_txn_resp = (lws_conmon_interval_us_t) (lws_now_usecs() - wsi->conmon_datum); #endif ah = wsi->http.ah; if (!wsi->do_ws) { /* we are being an http client... */ #if defined(LWS_ROLE_H2) if (wsi->client_h2_alpn || wsi->client_mux_substream) { lwsl_debug("%s: %s: transitioning to h2 client\n", __func__, lws_wsi_tag(wsi)); lws_role_transition(wsi, LWSIFR_CLIENT, LRS_ESTABLISHED, &role_ops_h2); } else #endif { #if defined(LWS_ROLE_H1) { lwsl_debug("%s: %s: transitioning to h1 client\n", __func__, lws_wsi_tag(wsi)); lws_role_transition(wsi, LWSIFR_CLIENT, LRS_ESTABLISHED, &role_ops_h1); } #else return -1; #endif } wsi->http.ah = ah; ah->http_response = 0; } #if defined(LWS_WITH_CACHE_NSCOOKIEJAR) && defined(LWS_WITH_CLIENT) if ((wsi->flags & LCCSCF_CACHE_COOKIES) && lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_SET_COOKIE)) lws_parse_set_cookie(wsi); #endif /* * well, what the server sent looked reasonable for syntax. * Now let's confirm it sent all the necessary headers * * http (non-ws) client will expect something like this * * HTTP/1.0.200 * server:.libwebsockets * content-type:.text/html * content-length:.17703 * set-cookie:.test=LWS_1456736240_336776_COOKIE;Max-Age=360000 */ wsi->http.conn_type = HTTP_CONNECTION_KEEP_ALIVE; if (!wsi->client_mux_substream) { p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP); /* if (wsi->do_ws && !p) { lwsl_info("no URI\n"); cce = "HS: URI missing"; goto bail3; } */ if (!p) { p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP1_0); wsi->http.conn_type = HTTP_CONNECTION_CLOSE; } if (!p) { cce = "HS: URI missing"; lwsl_info("no URI\n"); goto bail3; } #if defined(LWS_ROLE_H2) } else { p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_STATUS); if (!p) { cce = "HS: :status missing"; lwsl_info("no status\n"); goto bail3; } #endif } #if !defined(LWS_ROLE_H2) if (!p) { cce = "HS: :status missing"; lwsl_info("no status\n"); goto bail3; } #endif n = atoi(p); if (ah) ah->http_response = (unsigned int)n; if (!wsi->client_no_follow_redirect && #if defined(LWS_WITH_HTTP_PROXY) !wsi->http.proxy_clientside && #endif (n == 301 || n == 302 || n == 303 || n == 307 || n == 308)) { p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_LOCATION); if (!p) { cce = "HS: Redirect code but no Location"; goto bail3; } #if defined(LWS_WITH_CONMON) if (wsi->conmon.pcol == LWSCONMON_PCOL_NONE) { wsi->conmon.pcol = LWSCONMON_PCOL_HTTP; wsi->conmon.protocol_specific.http.response = n; } #if defined(LWS_WITH_SECURE_STREAMS) if (wsi->for_ss #if defined(LWS_WITH_SECURE_STREAMS_PROXY_API) && !wsi->client_bound_sspc #endif ) { lws_ss_handle_t *h = (lws_ss_handle_t *)lws_get_opaque_user_data(wsi); if (h) lws_conmon_ss_json(h); } #endif #endif /* let's let the user code know, if he cares */ if (wsi->a.protocol->callback(wsi, LWS_CALLBACK_CLIENT_HTTP_REDIRECT, wsi->user_space, p, (unsigned int)n)) { cce = "HS: user code rejected redirect"; goto bail3; } /* * Some redirect codes imply we have to change the method * used for the subsequent transaction, commonly POST -> * 303 -> GET. */ if (n == 303) { char *mp = lws_hdr_simple_ptr(wsi,_WSI_TOKEN_CLIENT_METHOD); int ml = lws_hdr_total_length(wsi, _WSI_TOKEN_CLIENT_METHOD); if (ml >= 3 && mp) { lwsl_info("%s: 303 switching to GET\n", __func__); memcpy(mp, "GET", 4); wsi->redirected_to_get = 1; wsi->http.ah->frags[wsi->http.ah->frag_index[ _WSI_TOKEN_CLIENT_METHOD]].len = 3; } } /* Relative reference absolute path */ if (p[0] == '/' || !strchr(p, ':')) { #if defined(LWS_WITH_TLS) ssl = nwsi->tls.use_ssl & LCCSCF_USE_SSL; #endif ads = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_PEER_ADDRESS); port = nwsi->c_port; path = p; /* lws_client_reset expects leading / omitted */ if (*path == '/') path++; } /* Absolute (Full) URI */ else if (strchr(p, ':')) { if (lws_parse_uri(p, &prot, &ads, &port, &path)) { cce = "HS: URI did not parse"; goto bail3; } if (!strcmp(prot, "wss") || !strcmp(prot, "https")) ssl = LCCSCF_USE_SSL; } /* Relative reference relative path */ else { /* This doesn't try to calculate an absolute path, * that will be left to the server */ #if defined(LWS_WITH_TLS) ssl = nwsi->tls.use_ssl & LCCSCF_USE_SSL; #endif ads = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_PEER_ADDRESS); port = wsi->c_port; /* +1 as lws_client_reset expects leading / omitted */ path = new_path + 1; if (lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_URI)) lws_strncpy(new_path, lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_URI), sizeof(new_path)); else { new_path[0] = '/'; new_path[1] = '\0'; } q = strrchr(new_path, '/'); if (q) lws_strncpy(q + 1, p, sizeof(new_path) - (unsigned int)(q - new_path) - 1); else path = p; } #if defined(LWS_WITH_TLS) if ((wsi->tls.use_ssl & LCCSCF_USE_SSL) && !ssl && !(wsi->flags & LCCSCF_ACCEPT_TLS_DOWNGRADE_REDIRECTS)) { cce = "HS: Redirect attempted SSL downgrade"; goto bail3; } #endif if (!ads) /* make coverity happy */ { cce = "no ads"; goto bail3; } if (!lws_client_reset(&wsi, ssl, ads, port, path, ads, 1)) { lwsl_err("Redirect failed\n"); cce = "HS: Redirect failed"; goto bail3; } /* * We are redirecting, let's close in order to extricate * ourselves from the current wsi usage, eg, h2 mux cleanly. * * We will notice close_is_redirect and switch to redirect * flow late in the close action. */ opaque = wsi->a.opaque_user_data; lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "redir"); wsi->a.opaque_user_data = opaque; return -1; } /* if h1 KA is allowed, enable the queued pipeline guys */ if (!wsi->client_h2_alpn && !wsi->client_mux_substream) { /* ie, coming to this for the first time */ if (wsi->http.conn_type == HTTP_CONNECTION_KEEP_ALIVE) wsi->keepalive_active = 1; else { /* * Ugh... now the main http connection has seen * both sides, we learn the server doesn't * support keepalive. * * That means any guys queued on us are going * to have to be restarted from connect2 with * their own connections. */ /* * stick around telling any new guys they can't * pipeline to this server */ wsi->keepalive_rejected = 1; lws_vhost_lock(wsi->a.vhost); lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, wsi->dll2_cli_txn_queue_owner.head) { struct lws *ww = lws_container_of(d, struct lws, dll2_cli_txn_queue); /* remove him from our queue */ lws_dll2_remove(&ww->dll2_cli_txn_queue); /* give up on pipelining */ ww->client_pipeline = 0; /* go back to "trying to connect" state */ lws_role_transition(ww, LWSIFR_CLIENT, LRS_UNCONNECTED, #if defined(LWS_ROLE_H1) &role_ops_h1); #else #if defined (LWS_ROLE_H2) &role_ops_h2); #else &role_ops_raw); #endif #endif ww->user_space = NULL; } lws_end_foreach_dll_safe(d, d1); lws_vhost_unlock(wsi->a.vhost); } } #ifdef LWS_WITH_HTTP_PROXY wsi->http.perform_rewrite = 0; if (lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE)) { if (!strncmp(lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE), "text/html", 9)) wsi->http.perform_rewrite = 0; } #endif /* he may choose to send us stuff in chunked transfer-coding */ wsi->chunked = 0; wsi->chunk_remaining = 0; /* ie, next thing is chunk size */ if (lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_TRANSFER_ENCODING)) { simp = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_TRANSFER_ENCODING); /* cannot be NULL, since it has nonzero length... coverity */ if (!simp) goto bail2; wsi->chunked = !strcmp(simp, "chunked"); /* first thing is hex, after payload there is crlf */ wsi->chunk_parser = ELCP_HEX; } wsi->http.content_length_given = 0; if (lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH)) { simp = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH); /* cannot be NULL, since it has nonzero length... coverity */ if (!simp) goto bail2; wsi->http.rx_content_length = (lws_filepos_t)atoll(simp); lwsl_info("%s: incoming content length %llu\n", __func__, (unsigned long long) wsi->http.rx_content_length); wsi->http.rx_content_remain = wsi->http.rx_content_length; wsi->http.content_length_given = 1; } else { /* can't do 1.1 without a content length or chunked */ if (!wsi->chunked) wsi->http.conn_type = HTTP_CONNECTION_CLOSE; lwsl_debug("%s: no content length\n", __func__); } if (wsi->do_ws) { /* * Give one last opportunity to ws protocols to inspect server reply * before the ws upgrade code discard it. ie: download reply body in case * of any other response code than 101. */ if (wsi->a.protocol->callback(wsi, LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP, wsi->user_space, NULL, 0)) { cce = "HS: disallowed by client filter"; goto bail2; } } else { /* allocate the per-connection user memory (if any) */ if (lws_ensure_user_space(wsi)) { lwsl_err("Problem allocating wsi user mem\n"); cce = "HS: OOM"; goto bail2; } /* * we seem to be good to go, give client last chance to check * headers and OK it */ ah1 = wsi->http.ah; wsi->http.ah = ah; if (wsi->a.protocol->callback(wsi, LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH, wsi->user_space, NULL, 0)) { wsi->http.ah = ah1; cce = "HS: disallowed by client filter"; goto bail2; } /* clear his proxy connection timeout */ lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); wsi->rxflow_change_to = LWS_RXFLOW_ALLOW; /* call him back to inform him he is up */ if (wsi->a.protocol->callback(wsi, LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP, wsi->user_space, NULL, 0)) { wsi->http.ah = ah1; cce = "HS: disallowed at ESTABLISHED"; goto bail3; } wsi->http.ah = ah1; lwsl_info("%s: %s: client conn up\n", __func__, lws_wsi_tag(wsi)); /* * Did we get a response from the server with an explicit * content-length of zero? If so, and it's not H2 which will * notice it via END_STREAM, this transaction is already * completed at the end of the header processing... */ if (!wsi->mux_substream && !wsi->client_mux_substream && lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH) && !wsi->http.rx_content_length) return !!lws_http_transaction_completed_client(wsi); /* * We can also get a case where it's http/1 and there's no * content-length at all, so anything that comes is the body * until it hangs up on us. With that situation, hanging up * on us past this point should generate a valid * LWS_CALLBACK_COMPLETED_CLIENT_HTTP. * * In that situation, he can't pipeline because in h1 there's * no post-header in-band way to signal the end of the * transaction except hangup. * * lws_http_transaction_completed_client() is the right guy to * issue it when we see the peer has hung up on us. */ return 0; } #if defined(LWS_ROLE_WS) switch (lws_client_ws_upgrade(wsi, &cce)) { case 2: goto bail2; case 3: goto bail3; } return 0; #endif bail3: close_reason = LWS_CLOSE_STATUS_NOSTATUS; bail2: if (wsi->a.protocol) { n = 0; if (cce) n = (int)strlen(cce); lws_inform_client_conn_fail(wsi, (void *)cce, (unsigned int)n); } lwsl_info("closing connection (prot %s) " "due to bail2 connection error: %s\n", wsi->a.protocol ? wsi->a.protocol->name : "unknown", cce); /* closing will free up his parsing allocations */ lws_close_free_wsi(wsi, (enum lws_close_status)close_reason, "c hs interp"); return 1; } #endif /* * set the boundary string and the content-type for client multipart mime */ uint8_t * lws_http_multipart_headers(struct lws *wsi, uint8_t *p) { char buf[10], arg[48]; int n; if (lws_get_random(wsi->a.context, (uint8_t *)buf, sizeof(buf)) != sizeof(buf)) return NULL; lws_b64_encode_string(buf, sizeof(buf), wsi->http.multipart_boundary, sizeof(wsi->http.multipart_boundary)); n = lws_snprintf(arg, sizeof(arg), "multipart/form-data; boundary=\"%s\"", wsi->http.multipart_boundary); if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE, (uint8_t *)arg, n, &p, p + 100)) return NULL; wsi->http.multipart = wsi->http.multipart_issue_boundary = 1; lws_client_http_body_pending(wsi, 1); return p; } int lws_client_http_multipart(struct lws *wsi, const char *name, const char *filename, const char *content_type, char **p, char *end) { /* * Client conn must have been created with LCCSCF_HTTP_MULTIPART_MIME * flag to use this api */ assert(wsi->http.multipart); if (!name) { *p += lws_snprintf((char *)(*p), lws_ptr_diff_size_t(end, *p), "\xd\xa--%s--\xd\xa", wsi->http.multipart_boundary); return 0; } if (wsi->client_subsequent_mime_part) *p += lws_snprintf((char *)(*p), lws_ptr_diff_size_t(end, *p), "\xd\xa"); wsi->client_subsequent_mime_part = 1; *p += lws_snprintf((char *)(*p), lws_ptr_diff_size_t(end, *p), "--%s\xd\xa" "Content-Disposition: form-data; " "name=\"%s\"", wsi->http.multipart_boundary, name); if (filename) *p += lws_snprintf((char *)(*p), lws_ptr_diff_size_t(end, *p), "; filename=\"%s\"", filename); if (content_type) *p += lws_snprintf((char *)(*p), lws_ptr_diff_size_t(end, *p), "\xd\xa" "Content-Type: %s", content_type); *p += lws_snprintf((char *)(*p), lws_ptr_diff_size_t(end, *p), "\xd\xa\xd\xa"); return *p == end; } char * lws_generate_client_handshake(struct lws *wsi, char *pkt) { const char *meth, *pp = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_SENT_PROTOCOLS), *path; char *p = pkt, *p1, *end = p + wsi->a.context->pt_serv_buf_size; meth = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_METHOD); if (!meth) { meth = "GET"; wsi->do_ws = 1; } else { wsi->do_ws = 0; } if (!strcmp(meth, "RAW")) { lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); lwsl_notice("client transition to raw\n"); if (pp) { const struct lws_protocols *pr; pr = lws_vhost_name_to_protocol(wsi->a.vhost, pp); if (!pr) { lwsl_err("protocol %s not enabled on vhost\n", pp); return NULL; } lws_bind_protocol(wsi, pr, __func__); } if ((wsi->a.protocol->callback)(wsi, LWS_CALLBACK_RAW_ADOPT, wsi->user_space, NULL, 0)) return NULL; lws_role_transition(wsi, LWSIFR_CLIENT, LRS_ESTABLISHED, &role_ops_raw_skt); lws_header_table_detach(wsi, 1); return NULL; } /* * 04 example client handshake * * GET /chat HTTP/1.1 * Host: server.example.com * Upgrade: websocket * Connection: Upgrade * Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== * Sec-WebSocket-Origin: http://example.com * Sec-WebSocket-Protocol: chat, superchat * Sec-WebSocket-Version: 4 */ path = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_URI); if (!path) { if (wsi->stash && wsi->stash->cis[CIS_PATH] && wsi->stash->cis[CIS_PATH][0]) path = wsi->stash->cis[CIS_PATH]; else path = "/"; } p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "%s %s HTTP/1.1\x0d\x0a", meth, path); p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "Pragma: no-cache\x0d\x0a" "Cache-Control: no-cache\x0d\x0a"); p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "Host: %s\x0d\x0a", lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_HOST)); if (lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_ORIGIN)) { if (lws_check_opt(wsi->a.context->options, LWS_SERVER_OPTION_JUST_USE_RAW_ORIGIN)) p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "Origin: %s\x0d\x0a", lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_ORIGIN)); else p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "Origin: %s://%s\x0d\x0a", wsi->flags & LCCSCF_USE_SSL ? "https" : "http", lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_ORIGIN)); } if (wsi->flags & LCCSCF_HTTP_MULTIPART_MIME) { p1 = (char *)lws_http_multipart_headers(wsi, (uint8_t *)p); if (!p1) return NULL; p = p1; } #if defined(LWS_WITH_HTTP_PROXY) if (wsi->parent && lws_hdr_total_length(wsi->parent, WSI_TOKEN_HTTP_CONTENT_LENGTH)) { p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "Content-Length: %s\x0d\x0a", lws_hdr_simple_ptr(wsi->parent, WSI_TOKEN_HTTP_CONTENT_LENGTH)); if (atoi(lws_hdr_simple_ptr(wsi->parent, WSI_TOKEN_HTTP_CONTENT_LENGTH))) wsi->client_http_body_pending = 1; } if (wsi->parent && lws_hdr_total_length(wsi->parent, WSI_TOKEN_HTTP_AUTHORIZATION)) { p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "Authorization: %s\x0d\x0a", lws_hdr_simple_ptr(wsi->parent, WSI_TOKEN_HTTP_AUTHORIZATION)); } if (wsi->parent && lws_hdr_total_length(wsi->parent, WSI_TOKEN_HTTP_CONTENT_TYPE)) { p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "Content-Type: %s\x0d\x0a", lws_hdr_simple_ptr(wsi->parent, WSI_TOKEN_HTTP_CONTENT_TYPE)); } #endif #if defined(LWS_ROLE_WS) if (wsi->do_ws) { const char *conn1 = ""; // if (!wsi->client_pipeline) // conn1 = "close, "; p = lws_generate_client_ws_handshake(wsi, p, conn1); if (!p) return NULL; } else #endif { if (!wsi->client_pipeline) p += lws_snprintf(p, 64, "connection: close\x0d\x0a"); } /* give userland a chance to append, eg, cookies */ #if defined(LWS_WITH_CACHE_NSCOOKIEJAR) && defined(LWS_WITH_CLIENT) if (wsi->flags & LCCSCF_CACHE_COOKIES) lws_cookie_send_cookies(wsi, &p, end); #endif if (wsi->a.protocol->callback(wsi, LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER, wsi->user_space, &p, (unsigned int)((pkt + wsi->a.context->pt_serv_buf_size) - p - 12))) return NULL; if (wsi->flags & LCCSCF_HTTP_X_WWW_FORM_URLENCODED) { p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "Content-Type: application/x-www-form-urlencoded\x0d\x0a"); p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "Content-Length: %lu\x0d\x0a", wsi->http.writeable_len); lws_client_http_body_pending(wsi, 1); } p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "\x0d\x0a"); if (wsi->client_http_body_pending || lws_has_buffered_out(wsi)) lws_callback_on_writable(wsi); lws_metrics_caliper_bind(wsi->cal_conn, wsi->a.context->mt_http_txn); #if defined(LWS_WITH_CONMON) wsi->conmon_datum = lws_now_usecs(); #endif // puts(pkt); return p; } #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) #if defined(LWS_WITH_HTTP_BASIC_AUTH) int lws_http_basic_auth_gen(const char *user, const char *pw, char *buf, size_t len) { size_t n = strlen(user), m = strlen(pw); char b[128]; if (len < 6 + ((4 * (n + m + 1)) / 3) + 1) return 1; memcpy(buf, "Basic ", 6); n = (unsigned int)lws_snprintf(b, sizeof(b), "%s:%s", user, pw); if (n >= sizeof(b) - 2) return 2; lws_b64_encode_string(b, (int)n, buf + 6, (int)len - 6); buf[len - 1] = '\0'; return 0; } #endif int lws_http_client_read(struct lws *wsi, char **buf, int *len) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; struct lws_tokens eb; int buffered, n, consumed = 0; /* * If the caller provided a non-NULL *buf and nonzero *len, we should * use that as the buffer for the read action, limititing it to *len * (actual payload will be less if chunked headers inside). * * If it's NULL / 0 length, buflist_aware_read will use the pt_serv_buf */ eb.token = (unsigned char *)*buf; eb.len = *len; buffered = lws_buflist_aware_read(pt, wsi, &eb, 0, __func__); *buf = (char *)eb.token; /* may be pointing to buflist or pt_serv_buf */ *len = 0; /* * we're taking on responsibility for handling used / unused eb * when we leave, via lws_buflist_aware_finished_consuming() */ // lwsl_notice("%s: eb.len %d ENTRY chunk remaining %d\n", __func__, eb.len, // wsi->chunk_remaining); /* allow the source to signal he has data again next time */ if (lws_change_pollfd(wsi, 0, LWS_POLLIN)) return -1; if (buffered < 0) { lwsl_debug("%s: SSL capable error\n", __func__); if (wsi->http.ah && wsi->http.ah->parser_state == WSI_PARSING_COMPLETE && !lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH)) /* * We had the headers from this stream, but as there * was no content-length: we had to wait until the * stream ended to inform the user code the transaction * has completed to the best of our knowledge */ if (lws_http_transaction_completed_client(wsi)) /* * We're going to close anyway, but that api has * warn_unused_result */ return -1; return -1; } if (eb.len <= 0) return 0; *len = eb.len; wsi->client_rx_avail = 0; /* * server may insist on transfer-encoding: chunked, * so http client must deal with it */ spin_chunks: //lwsl_notice("%s: len %d SPIN chunk remaining %d\n", __func__, *len, // wsi->chunk_remaining); while (wsi->chunked && (wsi->chunk_parser != ELCP_CONTENT) && *len) { switch (wsi->chunk_parser) { case ELCP_HEX: if ((*buf)[0] == '\x0d') { wsi->chunk_parser = ELCP_CR; break; } n = char_to_hex((*buf)[0]); if (n < 0) { lwsl_err("%s: chunking failure A\n", __func__); return -1; } wsi->chunk_remaining <<= 4; wsi->chunk_remaining |= n; break; case ELCP_CR: if ((*buf)[0] != '\x0a') { lwsl_err("%s: chunking failure B\n", __func__); return -1; } if (wsi->chunk_remaining) { wsi->chunk_parser = ELCP_CONTENT; //lwsl_notice("starting chunk size %d (block rem %d)\n", // wsi->chunk_remaining, *len); break; } wsi->chunk_parser = ELCP_TRAILER_CR; break; case ELCP_CONTENT: break; case ELCP_POST_CR: if ((*buf)[0] != '\x0d') { lwsl_err("%s: chunking failure C\n", __func__); lwsl_hexdump_err(*buf, (unsigned int)*len); return -1; } wsi->chunk_parser = ELCP_POST_LF; break; case ELCP_POST_LF: if ((*buf)[0] != '\x0a') { lwsl_err("%s: chunking failure D\n", __func__); return -1; } wsi->chunk_parser = ELCP_HEX; wsi->chunk_remaining = 0; break; case ELCP_TRAILER_CR: if ((*buf)[0] != '\x0d') { lwsl_err("%s: chunking failure F\n", __func__); lwsl_hexdump_err(*buf, (unsigned int)*len); return -1; } wsi->chunk_parser = ELCP_TRAILER_LF; break; case ELCP_TRAILER_LF: if ((*buf)[0] != '\x0a') { lwsl_err("%s: chunking failure F\n", __func__); lwsl_hexdump_err(*buf, (unsigned int)*len); return -1; } (*buf)++; (*len)--; consumed++; lwsl_info("final chunk\n"); goto completed; } (*buf)++; (*len)--; consumed++; } if (wsi->chunked && !wsi->chunk_remaining) goto account_and_ret; if (wsi->http.rx_content_remain && wsi->http.rx_content_remain < (unsigned int)*len) n = (int)wsi->http.rx_content_remain; else n = *len; if (wsi->chunked && wsi->chunk_remaining && wsi->chunk_remaining < n) n = wsi->chunk_remaining; #if defined(LWS_WITH_HTTP_PROXY) && defined(LWS_WITH_HUBBUB) /* hubbub */ if (wsi->http.perform_rewrite) lws_rewrite_parse(wsi->http.rw, (unsigned char *)*buf, n); else #endif { if ( #if defined(LWS_WITH_HTTP_PROXY) !wsi->protocol_bind_balance == !!wsi->http.proxy_clientside #else !!wsi->protocol_bind_balance #endif ) { int q; q = user_callback_handle_rxflow(wsi->a.protocol->callback, wsi, LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ, wsi->user_space, *buf, (unsigned int)n); if (q) { lwsl_info("%s: RECEIVE_CLIENT_HTTP_READ returned %d\n", __func__, q); return q; } } else lwsl_notice("%s: swallowed read (%d)\n", __func__, n); } (*buf) += n; *len -= n; if (wsi->chunked && wsi->chunk_remaining) wsi->chunk_remaining -= n; //lwsl_notice("chunk_remaining <- %d, block remaining %d\n", // wsi->chunk_remaining, *len); consumed += n; //eb.token += n; //eb.len -= n; if (wsi->chunked && !wsi->chunk_remaining) wsi->chunk_parser = ELCP_POST_CR; if (wsi->chunked && *len) goto spin_chunks; if (wsi->chunked) goto account_and_ret; /* if we know the content length, decrement the content remaining */ if (wsi->http.rx_content_length > 0) wsi->http.rx_content_remain -= (unsigned int)n; // lwsl_notice("rx_content_remain %lld, rx_content_length %lld, giv %d\n", // wsi->http.rx_content_remain, wsi->http.rx_content_length, // wsi->http.content_length_given); if (wsi->http.rx_content_remain || !wsi->http.content_length_given) goto account_and_ret; completed: if (lws_http_transaction_completed_client(wsi)) { lwsl_info("%s: transaction completed says -1\n", __func__); return -1; } account_and_ret: // lwsl_warn("%s: on way out, consuming %d / %d\n", __func__, consumed, eb.len); if (lws_buflist_aware_finished_consuming(wsi, &eb, consumed, buffered, __func__)) return -1; return 0; } #endif static uint8_t hnames2[] = { _WSI_TOKEN_CLIENT_ORIGIN, _WSI_TOKEN_CLIENT_SENT_PROTOCOLS, _WSI_TOKEN_CLIENT_METHOD, _WSI_TOKEN_CLIENT_IFACE }; /** * lws_client_reset() - retarget a connected wsi to start over with a new * connection (ie, redirect) * this only works if still in HTTP, ie, not upgraded yet * wsi: connection to reset * address: network address of the new server * port: port to connect to * path: uri path to connect to on the new server * host: host header to send to the new server */ struct lws * lws_client_reset(struct lws **pwsi, int ssl, const char *address, int port, const char *path, const char *host, char weak) { struct lws_context_per_thread *pt; #if defined(LWS_ROLE_WS) struct _lws_websocket_related *ws; #endif const char *cisin[CIS_COUNT]; struct lws *wsi; size_t o; int n; if (!pwsi) return NULL; wsi = *pwsi; pt = &wsi->a.context->pt[(int)wsi->tsi]; lwsl_debug("%s: %s: redir %d: %s\n", __func__, lws_wsi_tag(wsi), wsi->redirects, address); if (wsi->redirects == 4) { lwsl_err("%s: Too many redirects\n", __func__); return NULL; } wsi->redirects++; /* * goal is to close our role part, close the sockfd, detach the ah * but leave our wsi extant and still bound to whatever vhost it was */ o = path[0] == '/' && path[1] == '/'; memset((char *)cisin, 0, sizeof(cisin)); cisin[CIS_ADDRESS] = address; cisin[CIS_PATH] = path + o; cisin[CIS_HOST] = host; for (n = 0; n < (int)LWS_ARRAY_SIZE(hnames2); n++) cisin[n + 3] = lws_hdr_simple_ptr(wsi, hnames2[n]); #if defined(LWS_WITH_TLS) cisin[CIS_ALPN] = wsi->alpn; #endif if (lws_client_stash_create(wsi, cisin)) return NULL; if (!port) { lwsl_info("%s: forcing port 443\n", __func__); port = 443; ssl = 1; } wsi->c_port = (uint16_t)port; wsi->flags = (wsi->flags & (~LCCSCF_USE_SSL)) | (ssl ? LCCSCF_USE_SSL : 0); if (!cisin[CIS_ALPN] || !cisin[CIS_ALPN][0]) #if defined(LWS_ROLE_H2) cisin[CIS_ALPN] = "h2,http/1.1"; #else cisin[CIS_ALPN] = "http/1.1"; #endif lwsl_notice("%s: REDIRECT %s:%d, path='%s', ssl = %d, alpn='%s'\n", __func__, address, port, path, ssl, cisin[CIS_ALPN]); lws_pt_lock(pt, __func__); __remove_wsi_socket_from_fds(wsi); lws_pt_unlock(pt); #if defined(LWS_ROLE_WS) if (weak) { ws = wsi->ws; wsi->ws = NULL; } #endif /* * After this point we can't trust the incoming strings like address, * path any more, since they may have been pointing into the old ah. * * We must use the copies in the wsi->stash instead if we want them. */ __lws_reset_wsi(wsi); /* detaches ah here */ #if defined(LWS_ROLE_WS) if (weak) wsi->ws = ws; #endif wsi->client_pipeline = 1; /* * Will complete at close flow */ wsi->close_is_redirect = 1; return *pwsi; } libwebsockets-4.3.5/lib/roles/http/compression/000077500000000000000000000000001476025525100216045ustar00rootroot00000000000000libwebsockets-4.3.5/lib/roles/http/compression/README.md000066400000000000000000000014361476025525100230670ustar00rootroot00000000000000HTTP compression ---------------- This directory contains generic compression transforms that can be applied to specifically HTTP content streams, after the header, be it h1 or h2. The compression transforms expose an "ops" type struct and a compressor name as used by `content-encoding`... the ops struct definition can be found in ./private-lib-roles-http-compression.h. Because the compression transform depends on being able to send on its output before it can process new input, the transform adds a new kind of buflist `wsi->buflist_comp` that represents pre-compression transform data ("input data" from the perspective of the compression transform) that was delivered to be processed but couldn't be accepted. Currently, zlib 'deflate' and brotli 'br' are supported on the server side. libwebsockets-4.3.5/lib/roles/http/compression/brotli/000077500000000000000000000000001476025525100230775ustar00rootroot00000000000000libwebsockets-4.3.5/lib/roles/http/compression/brotli/brotli.c000066400000000000000000000064601476025525100245440ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" static int lcs_init_compression_brotli(lws_comp_ctx_t *ctx, int decomp) { ctx->is_decompression = (unsigned char)!!decomp; if (!decomp) { ctx->u.br_en = BrotliEncoderCreateInstance(NULL, NULL, NULL); if (ctx->u.br_en) { BrotliEncoderSetParameter(ctx->u.br_en, BROTLI_PARAM_MODE, BROTLI_MODE_TEXT); BrotliEncoderSetParameter(ctx->u.br_en, BROTLI_PARAM_QUALITY, BROTLI_MIN_QUALITY); } } else ctx->u.br_de = BrotliDecoderCreateInstance(NULL, NULL, NULL); return !ctx->u.br_de; } static int lcs_process_brotli(lws_comp_ctx_t *ctx, const void *in, size_t *ilen_iused, void *out, size_t *olen_oused) { size_t a_in, a_out, t_out; const uint8_t *n_in; uint8_t *n_out; int n; n_in = (void *)in; a_in = *ilen_iused; a_out = *olen_oused; n_out = out; t_out = 0; if (!ctx->is_decompression) { if (!a_in && !BrotliEncoderHasMoreOutput(ctx->u.br_en)) { *olen_oused = 0; goto bail; } n = BROTLI_OPERATION_PROCESS; if (!ctx->buflist_comp && ctx->final_on_input_side) n = BROTLI_OPERATION_FINISH; if (BrotliEncoderCompressStream(ctx->u.br_en, n, &a_in, &n_in, &a_out, &n_out, &t_out) == BROTLI_FALSE) { lwsl_err("brotli encode failed\n"); return -1; } ctx->may_have_more = !a_out; } else { n = BrotliDecoderDecompressStream(ctx->u.br_de, &a_in, &n_in, &a_out, &n_out, &t_out); switch (n) { case BROTLI_DECODER_RESULT_ERROR: lwsl_err("brotli decoder error\n"); return -1; } } *ilen_iused -= a_in; *olen_oused -= a_out; bail: if (!ctx->is_decompression) return BrotliEncoderIsFinished(ctx->u.br_en); else return BrotliDecoderIsFinished(ctx->u.br_de); } static void lcs_destroy_brotli(lws_comp_ctx_t *ctx) { if (!ctx) return; if (!(*ctx).is_decompression) BrotliEncoderDestroyInstance((*ctx).u.br_en); else BrotliDecoderDestroyInstance((*ctx).u.br_de); (*ctx).u.generic_ctx_ptr = NULL; } struct lws_compression_support lcs_brotli = { /* .encoding_name */ "br", /* .init_compression */ lcs_init_compression_brotli, /* .process */ lcs_process_brotli, /* .destroy */ lcs_destroy_brotli, }; libwebsockets-4.3.5/lib/roles/http/compression/deflate/000077500000000000000000000000001476025525100232105ustar00rootroot00000000000000libwebsockets-4.3.5/lib/roles/http/compression/deflate/deflate.c000066400000000000000000000061231476025525100247620ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" static int lcs_init_compression_deflate(lws_comp_ctx_t *ctx, int decomp) { int n; ctx->is_decompression = !!decomp; ctx->u.deflate = lws_malloc(sizeof(*ctx->u.deflate), __func__); if (!ctx->u.deflate) return 2; memset(ctx->u.deflate, 0, sizeof(*ctx->u.deflate)); if (!decomp && (n = deflateInit2(ctx->u.deflate, 1, Z_DEFLATED, -15, 8, Z_DEFAULT_STRATEGY)) != Z_OK) { lwsl_err("deflate init failed: %d\n", n); lws_free_set_NULL(ctx->u.deflate); return 1; } if (decomp && inflateInit2(ctx->u.deflate, 16 + 15) != Z_OK) { lws_free_set_NULL(ctx->u.deflate); return 1; } return 0; } static int lcs_process_deflate(lws_comp_ctx_t *ctx, const void *in, size_t *ilen_iused, void *out, size_t *olen_oused) { size_t olen_oused_in = *olen_oused; int n; ctx->u.deflate->next_in = (void *)in; ctx->u.deflate->avail_in = (unsigned int)*ilen_iused; ctx->u.deflate->next_out = out; ctx->u.deflate->avail_out = (unsigned int)*olen_oused; if (!ctx->is_decompression) n = deflate(ctx->u.deflate, Z_SYNC_FLUSH); else n = inflate(ctx->u.deflate, Z_SYNC_FLUSH); switch (n) { case Z_NEED_DICT: case Z_STREAM_ERROR: case Z_DATA_ERROR: case Z_MEM_ERROR: lwsl_err("zlib error inflate %d\n", n); return -1; } *ilen_iused -= ctx->u.deflate->avail_in; *olen_oused -= ctx->u.deflate->avail_out; /* it's ambiguous with zlib... */ ctx->may_have_more = (*olen_oused == olen_oused_in); return n == Z_STREAM_END; } static void lcs_destroy_deflate(lws_comp_ctx_t *ctx) { if (!ctx) return; if (!(*ctx).is_decompression) deflateEnd((*ctx).u.deflate); else inflateEnd((*ctx).u.deflate); lws_free_set_NULL(ctx->u.deflate); } struct lws_compression_support lcs_deflate = { /* .encoding_name */ "deflate", /* .init_compression */ lcs_init_compression_deflate, /* .process */ lcs_process_deflate, /* .destroy */ lcs_destroy_deflate, }; libwebsockets-4.3.5/lib/roles/http/compression/private-lib-roles-http-compression.h000066400000000000000000000056211476025525100306350ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * This is included from private-lib-core.h if LWS_WITH_HTTP_STREAM_COMPRESSION */ #if defined(LWS_WITH_MINIZ) #include #else #include #endif #if defined(LWS_WITH_HTTP_BROTLI) #include #include #endif /* * struct holding union of all the available compression methods' context data, * and state if it's compressing or decompressing */ typedef struct lws_compression_ctx { union { #if defined(LWS_WITH_HTTP_BROTLI) BrotliEncoderState *br_en; BrotliDecoderState *br_de; #endif z_stream *deflate; void *generic_ctx_ptr; } u; struct lws_buflist *buflist_comp; unsigned int is_decompression:1; unsigned int final_on_input_side:1; unsigned int may_have_more:1; unsigned int chunking:1; } lws_comp_ctx_t; /* generic structure defining the interface to a compression method */ struct lws_compression_support { /** compression name as used by, eg, content-ecoding */ const char *encoding_name; /** create a compression context for the compression method, or NULL */ int (*init_compression)(lws_comp_ctx_t *ctx, int decomp); /** pass data into the context to be processed */ int (*process)(lws_comp_ctx_t *ctx, const void *in, size_t *ilen_iused, void *out, size_t *olen_oused); /** destroy the de/compression context */ void (*destroy)(lws_comp_ctx_t *ctx); }; extern struct lws_compression_support lcs_deflate; extern struct lws_compression_support lcs_brotli; int lws_http_compression_validate(struct lws *wsi); int lws_http_compression_transform(struct lws *wsi, unsigned char *buf, size_t len, enum lws_write_protocol *wp, unsigned char **outbuf, size_t *olen_oused); void lws_http_compression_destroy(struct lws *wsi); libwebsockets-4.3.5/lib/roles/http/compression/stream.c000066400000000000000000000150371476025525100232510ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" /* compression methods listed in order of preference */ struct lws_compression_support *lcs_available[] = { #if defined(LWS_WITH_HTTP_BROTLI) &lcs_brotli, #endif &lcs_deflate, }; /* compute acceptable compression encodings while we still have an ah */ int lws_http_compression_validate(struct lws *wsi) { const char *a; size_t n; wsi->http.comp_accept_mask = 0; if (!wsi->http.ah || !lwsi_role_server(wsi)) return 0; a = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_ACCEPT_ENCODING); if (!a) return 0; for (n = 0; n < LWS_ARRAY_SIZE(lcs_available); n++) if (strstr(a, lcs_available[n]->encoding_name)) wsi->http.comp_accept_mask = (uint8_t)(wsi->http.comp_accept_mask | (1 << n)); return 0; } int lws_http_compression_apply(struct lws *wsi, const char *name, unsigned char **p, unsigned char *end, char decomp) { size_t n; for (n = 0; n < LWS_ARRAY_SIZE(lcs_available); n++) { /* if name is non-NULL, choose only that compression method */ if (name && strcmp(lcs_available[n]->encoding_name, name)) continue; /* * If we're the server, confirm that the client told us he could * handle this kind of compression transform... */ if (!decomp && !(wsi->http.comp_accept_mask & (1 << n))) continue; /* let's go with this one then... */ break; } if (n == LWS_ARRAY_SIZE(lcs_available)) return 1; lcs_available[n]->init_compression(&wsi->http.comp_ctx, decomp); if (!wsi->http.comp_ctx.u.generic_ctx_ptr) { lwsl_err("%s: init_compression %d failed\n", __func__, (int)n); return 1; } wsi->http.lcs = lcs_available[n]; wsi->http.comp_ctx.may_have_more = 0; wsi->http.comp_ctx.final_on_input_side = 0; wsi->http.comp_ctx.chunking = 0; wsi->http.comp_ctx.is_decompression = !!decomp; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_ENCODING, (unsigned char *)lcs_available[n]->encoding_name, (int)strlen(lcs_available[n]->encoding_name), p, end)) return -1; lwsl_info("%s: %s: applied %s content-encoding\n", __func__, lws_wsi_tag(wsi), lcs_available[n]->encoding_name); return 0; } void lws_http_compression_destroy(struct lws *wsi) { if (!wsi->http.lcs || !wsi->http.comp_ctx.u.generic_ctx_ptr) return; wsi->http.lcs->destroy(&wsi->http.comp_ctx); wsi->http.lcs = NULL; } /* * This manages the compression transform independent of h1 or h2. * * wsi->buflist_comp stashes pre-transform input that was not yet compressed */ int lws_http_compression_transform(struct lws *wsi, unsigned char *buf, size_t len, enum lws_write_protocol *wp, unsigned char **outbuf, size_t *olen_oused) { size_t ilen_iused = len; int n, use = 0, wp1f = (*wp) & 0x1f; lws_comp_ctx_t *ctx = &wsi->http.comp_ctx; ctx->may_have_more = 0; if (!wsi->http.lcs || (wp1f != LWS_WRITE_HTTP && wp1f != LWS_WRITE_HTTP_FINAL)) { *outbuf = buf; *olen_oused = len; return 0; } if (wp1f == LWS_WRITE_HTTP_FINAL) { /* * ...we may get a large buffer that represents the final input * buffer, but it may form multiple frames after being * tranformed by compression; only the last of those is actually * the final frame on the output stream. * * Note that we have received the FINAL input, and downgrade it * to a non-final for now. */ ctx->final_on_input_side = 1; *wp = (unsigned int)(LWS_WRITE_HTTP | ((*wp) & ~0x1fu)); } if (ctx->buflist_comp) { /* * we can't send this new stuff when we have old stuff * buffered and not compressed yet. Add it to the tail * and switch to trying to process the head. */ if (buf && len) { if (lws_buflist_append_segment( &ctx->buflist_comp, buf, len) < 0) return -1; lwsl_debug("%s: %s: adding %d to comp buflist\n", __func__, lws_wsi_tag(wsi), (int)len); } len = lws_buflist_next_segment_len(&ctx->buflist_comp, &buf); ilen_iused = len; use = 1; lwsl_debug("%s: %s: trying comp buflist %d\n", __func__, lws_wsi_tag(wsi), (int)len); } if (!buf && ilen_iused) return 0; lwsl_debug("%s: %s: pre-process: ilen_iused %d, olen_oused %d\n", __func__, lws_wsi_tag(wsi), (int)ilen_iused, (int)*olen_oused); n = wsi->http.lcs->process(ctx, buf, &ilen_iused, *outbuf, olen_oused); if (n && n != 1) { lwsl_err("%s: problem with compression\n", __func__); return -1; } if (!ctx->may_have_more && ctx->final_on_input_side) *wp = (unsigned int)(LWS_WRITE_HTTP_FINAL | ((*wp) & ~0x1fu)); lwsl_debug("%s: %s: more %d, ilen_iused %d\n", __func__, lws_wsi_tag(wsi), ctx->may_have_more, (int)ilen_iused); if (use && ilen_iused) { /* * we were flushing stuff from the buflist head... account for * however much actually got processed by the compression * transform */ lws_buflist_use_segment(&ctx->buflist_comp, ilen_iused); lwsl_debug("%s: %s: marking %d of comp buflist as used " "(ctx->buflist_comp %p)\n", __func__, lws_wsi_tag(wsi), (int)len, ctx->buflist_comp); } if (!use && ilen_iused != len) { /* * ...we were sending stuff from the caller directly and not * all of it got processed... stash on the buflist tail */ if (lws_buflist_append_segment(&ctx->buflist_comp, buf + ilen_iused, len - ilen_iused) < 0) return -1; lwsl_debug("%s: buffering %d unused comp input\n", __func__, (int)(len - ilen_iused)); } if (ctx->buflist_comp || ctx->may_have_more) lws_callback_on_writable(wsi); return 0; } libwebsockets-4.3.5/lib/roles/http/cookie.c000066400000000000000000000354651476025525100206750ustar00rootroot00000000000000 #include #include "private-lib-core.h" //#define LWS_COOKIE_DEBUG #if defined(LWS_COOKIE_DEBUG) #define lwsl_cookie lwsl_notice #else #define lwsl_cookie lwsl_debug #endif #define LWS_COOKIE_MAX_CACHE_NAME_LEN 128 #define lws_tolower(_c) (((_c) >= 'A' && (_c) <= 'Z') ? \ (char)((_c) + 'a' - 'A') : \ (char)(_c)) #define LWS_COOKIE_NSC_FORMAT "%.*s\t"\ "%s\t"\ "%.*s\t"\ "%s\t"\ "%llu\t"\ "%.*s\t"\ "%.*s" static const char *const mon = "janfebmaraprnayjunjulaugsepoctnovdec"; enum lws_cookie_nsc_f { LWSC_NSC_DOMAIN, LWSC_NSC_HOSTONLY, LWSC_NSC_PATH, LWSC_NSC_SECURE, LWSC_NSC_EXPIRES, LWSC_NSC_NAME, LWSC_NSC_VALUE, LWSC_NSC_COUNT, }; enum lws_cookie_elements { CE_DOMAIN, CE_PATH, CE_EXPIRES, CE_MAXAGE, CE_NAME, CE_VALUE, CE_HOSTONLY, /* these are bool, NULL = 0, non-NULL = 1 */ CE_SECURE, CE_COUNT }; struct lws_cookie { const char *f[CE_COUNT]; size_t l[CE_COUNT]; unsigned int httponly:1; }; static int lws_cookie_parse_date(const char *d, size_t len, time_t *t) { struct tm date; int offset = 0, i; memset(&date, 0, sizeof(date)); while (len) { if (isalnum((int)*d)) { offset++; goto next; } switch (offset) { case 2: if (*d == ':' && len >= 6) { date.tm_hour = atoi(d - 2); if (date.tm_hour < 0 || date.tm_hour > 23) return -1; date.tm_min = atoi(d + 1); if (date.tm_min < 0 || date.tm_min > 60) return -1; date.tm_sec = atoi(d + 4); if (date.tm_sec < 0 || date.tm_sec > 61) /* leap second */ return -1; d += 6; len -= 6; offset = 0; continue; } if (!date.tm_mday) { date.tm_mday = atoi(d - 2); if (date.tm_mday < 1 || date.tm_mday > 31) return -1; goto next2; } if (!date.tm_year) { date.tm_year = atoi(d - 2); if (date.tm_year < 0 || date.tm_year > 99) return -1; if (date.tm_year < 70) date.tm_year += 100; } goto next2; case 3: for (i = 0; i < 36; i += 3) { if (lws_tolower(*(d - 3)) == mon[i] && lws_tolower(*(d - 2)) == mon[i + 1] && lws_tolower(*(d - 1)) == mon[i + 2]) { date.tm_mon = i / 3; break; } } goto next2; case 4: if (!date.tm_year) { date.tm_year = atoi(d - 4); if (date.tm_year < 1601) return -1; date.tm_year -= 1900; } goto next2; default: goto next2; } next2: offset = 0; next: d++; len--; } *t = mktime(&date); if (*t < 0) return -1; return 0; } static void lws_cookie_rm_sws(const char **buf_p, size_t *len_p) { const char *buf; size_t len; if (!buf_p || !*buf_p || !len_p || !*len_p) { lwsl_err("%s: false parameter\n", __func__); return; } buf = *buf_p; len = *len_p; while (buf[0] == ' ' && len > 0) { buf++; len--; } while (len && buf[len - 1] == ' ') len--; *buf_p = buf; *len_p = len; } static int is_iprefix(const char *h, size_t hl, const char *n, size_t nl) { if (!h || !n || nl > hl) return 0; while (nl) { nl--; if (lws_tolower(h[nl]) != lws_tolower(n[nl])) return 0; } return 1; } static int lws_cookie_compile_cache_name(char *buf, size_t buf_len, struct lws_cookie *c) { if (!buf || !c->f[CE_DOMAIN] || !c->f[CE_PATH] || !c->f[CE_NAME] || c->l[CE_DOMAIN] + c->l[CE_PATH] + c->l[CE_NAME] + 6 > buf_len) return -1; memcpy(buf, c->f[CE_DOMAIN], c->l[CE_DOMAIN]); buf += c->l[CE_DOMAIN]; *buf++ = '|'; memcpy(buf, c->f[CE_PATH], c->l[CE_PATH]); buf += c->l[CE_PATH]; *buf++ = '|'; memcpy(buf, c->f[CE_NAME], c->l[CE_NAME]); buf += c->l[CE_NAME]; *buf = '\0'; return 0; } static int lws_cookie_parse_nsc(struct lws_cookie *c, const char *b, size_t l) { enum lws_cookie_nsc_f state = LWSC_NSC_DOMAIN; size_t n = 0; if (!c || !b || l < 13) return -1; memset(c, 0, sizeof(*c)); lwsl_cookie("%s: parsing (%.*s) \n", __func__, (int)l, b); while (l) { l--; if (b[n] != '\t' && l) { n++; continue; } switch (state) { case LWSC_NSC_DOMAIN: c->f[CE_DOMAIN] = b; c->l[CE_DOMAIN] = n; break; case LWSC_NSC_PATH: c->f[CE_PATH] = b; c->l[CE_PATH] = n; break; case LWSC_NSC_EXPIRES: c->f[CE_EXPIRES] = b; c->l[CE_EXPIRES] = n; break; case LWSC_NSC_NAME: c->f[CE_NAME] = b; c->l[CE_NAME] = n; break; case LWSC_NSC_HOSTONLY: if (b[0] == 'T') { c->f[CE_HOSTONLY] = b; c->l[CE_HOSTONLY] = 1; } break; case LWSC_NSC_SECURE: if (b[0] == 'T') { c->f[CE_SECURE] = b; c->l[CE_SECURE] = 1; } break; case LWSC_NSC_VALUE: c->f[CE_VALUE] = b; c->l[CE_VALUE] = n + 1; for (n = 0; n < LWS_ARRAY_SIZE(c->f); n++) lwsl_cookie("%s: %d: %.*s\n", __func__, (int)n, (int)c->l[n], c->f[n]); return 0; default: return -1; } b += n + 1; n = 0; state++; } return -1; } static int lws_cookie_write_nsc(struct lws *wsi, struct lws_cookie *c) { char cache_name[LWS_COOKIE_MAX_CACHE_NAME_LEN]; const char *ads, *path; struct lws_cache_ttl_lru *l1; struct client_info_stash *stash; char *cookie_string = NULL, *dl; /* 6 tabs + 20 for max time_t + 2 * TRUE/FALSE + null */ size_t size = 6 + 20 + 10 + 1; time_t expires = 0; int ret = 0; if (!wsi || !c) return -1; l1 = wsi->a.context->l1; if (!l1 || !wsi->a.context->nsc) return -1; stash = wsi->stash ? wsi->stash : lws_get_network_wsi(wsi)->stash; if (stash) { ads = stash->cis[CIS_ADDRESS]; path = stash->cis[CIS_PATH]; } else { ads = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_PEER_ADDRESS); path = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_URI); } if (!ads || !path) return -1; if (!c->f[CE_NAME] || !c->f[CE_VALUE]) { lwsl_err("%s: malformed c\n", __func__); return -1; } if (!c->f[CE_EXPIRES]) { /* * Currently we just take the approach to reject session cookies */ lwsl_warn("%s: reject session cookies\n", __func__); return 0; } if (!c->f[CE_DOMAIN]) { c->f[CE_HOSTONLY] = "T"; c->l[CE_HOSTONLY] = 1; c->f[CE_DOMAIN] = ads; c->l[CE_DOMAIN] = strlen(ads); } if (!c->f[CE_PATH]) { c->f[CE_PATH] = path; c->l[CE_PATH] = strlen(path); dl = memchr(c->f[CE_PATH], '?', c->l[CE_PATH]); if (dl) c->l[CE_PATH] = (size_t)(dl - c->f[CE_PATH]); } if (lws_cookie_compile_cache_name(cache_name, sizeof(cache_name), c)) return -1; if (c->f[CE_EXPIRES] && lws_cookie_parse_date(c->f[CE_EXPIRES], c->l[CE_EXPIRES], &expires)) { lwsl_err("%s: can't parse date %.*s\n", __func__, (int)c->l[CE_EXPIRES], c->f[CE_EXPIRES]); return -1; } size += c->l[CE_NAME] + c->l[CE_VALUE] + c->l[CE_DOMAIN] + c->l[CE_PATH]; cookie_string = (char *)lws_malloc(size, __func__); if (!cookie_string) { lwsl_err("%s: OOM\n",__func__); return -1; } lws_snprintf(cookie_string, size, LWS_COOKIE_NSC_FORMAT, (int)c->l[CE_DOMAIN], c->f[CE_DOMAIN], c->f[CE_HOSTONLY] ? "TRUE" : "FALSE", (int)c->l[CE_PATH], c->f[CE_PATH], c->f[CE_SECURE] ? "TRUE" : "FALSE", (unsigned long long)expires, (int)c->l[CE_NAME], c->f[CE_NAME], (int)c->l[CE_VALUE], c->f[CE_VALUE]); lwsl_cookie("%s: name %s\n", __func__, cache_name); lwsl_cookie("%s: c %s\n", __func__, cookie_string); if (lws_cache_write_through(l1, cache_name, (const uint8_t *)cookie_string, strlen(cookie_string), (lws_usec_t)((unsigned long long)expires * (lws_usec_t)LWS_US_PER_SEC), NULL)) { ret = -1; goto exit; } #if defined(LWS_COOKIE_DEBUG) char *po; if (lws_cache_item_get(l1, cache_name, (const void **)&po, &size) || size != strlen(cookie_string) || memcmp(po, cookie_string, size)) { lwsl_err("%s: L1 '%s' missing\n", __func__, cache_name); } if (lws_cache_item_get(wsi->a.context->nsc, cache_name, (const void **)&po, &size) || size != strlen(cookie_string) || memcmp(po, cookie_string, size)) { lwsl_err("%s: NSC '%s' missing, size %llu, po %s\n", __func__, cache_name, (unsigned long long)size, po); } #endif exit: lws_free(cookie_string); return ret; } static int lws_cookie_attach_cookies(struct lws *wsi, char *buf, char *end) { const char *domain, *path, *dl_domain, *dl_path, *po; char cache_name[LWS_COOKIE_MAX_CACHE_NAME_LEN]; size_t domain_len, path_len, size, ret = 0; struct lws_cache_ttl_lru *l1; struct client_info_stash *stash; lws_cache_results_t cr; struct lws_cookie c; int hostdomain = 1; char *p, *p1; if (!wsi) return -1; stash = wsi->stash ? wsi->stash : lws_get_network_wsi(wsi)->stash; if (!stash || !stash->cis[CIS_ADDRESS] || !stash->cis[CIS_PATH]) return -1; l1 = wsi->a.context->l1; if (!l1 || !wsi->a.context->nsc){ lwsl_err("%s:no cookiejar\n", __func__); return -1; } memset(&c, 0, sizeof(c)); domain = stash->cis[CIS_ADDRESS]; path = stash->cis[CIS_PATH]; if (!domain || !path) return -1; path_len = strlen(path); /* remove query string if exist */ dl_path = memchr(path, '?', path_len); if (dl_path) path_len = lws_ptr_diff_size_t(dl_path, path); /* remove last slash if exist */ if (path_len != 1 && path[path_len - 1] == '/') path_len--; if (!path_len) return -1; lwsl_cookie("%s: path %.*s len %d\n", __func__, (int)path_len, path, (int)path_len); /* when dest buf is not provided, we only return size of cookie string */ if (!buf || !end) p = NULL; else p = buf; /* iterate through domain and path levels to find matching cookies */ dl_domain = domain; while (dl_domain) { domain_len = strlen(domain); dl_domain = memchr(domain, '.', domain_len); /* don't match top level domain */ if (!dl_domain) break; if (domain_len + path_len + 6 > sizeof(cache_name)) return -1; /* compile key string "[domain]|[path]|*"" */ p1 = cache_name; memcpy(p1, domain, domain_len); p1 += domain_len; *p1 = '|'; p1++; memcpy(p1, path, path_len); p1 += path_len; *p1 = '|'; p1++; *p1 = '*'; p1++; *p1 = '\0'; lwsl_cookie("%s: looking for %s\n", __func__, cache_name); if (!lws_cache_lookup(l1, cache_name, (const void **)&cr.ptr, &cr.size)) { while (!lws_cache_results_walk(&cr)) { lwsl_cookie(" %s (%d)\n", (const char *)cr.tag, (int)cr.payload_len); if (lws_cache_item_get(l1, (const char *)cr.tag, (const void **)&po, &size) || lws_cookie_parse_nsc(&c, po, size)) { lwsl_err("%s: failed to get c '%s'\n", __func__, cr.tag); break; } if (c.f[CE_HOSTONLY] && !hostdomain){ lwsl_cookie("%s: not sending this\n", __func__); continue; } if (p) { if (ret) { *p = ';'; p++; *p = ' '; p++; } memcpy(p, c.f[CE_NAME], c.l[CE_NAME]); p += c.l[CE_NAME]; *p = '='; p++; memcpy(p, c.f[CE_VALUE], c.l[CE_VALUE]); p += c.l[CE_VALUE]; } if (ret) ret += 2; ret += c.l[CE_NAME] + 1 + c.l[CE_VALUE]; } } domain = dl_domain + 1; hostdomain = 0; } lwsl_notice("%s: c len (%d)\n", __func__, (int)ret); return (int)ret; } static struct { const char *const name; uint8_t len; } cft[] = { { "domain=", 7 }, { "path=", 5 }, { "expires=", 8 }, { "max-age=", 8 }, { "httponly", 8 }, { "secure", 6 } }; int lws_parse_set_cookie(struct lws *wsi) { char *tk_head, *tk_end, *buf_head, *buf_end, *cookiep, *dl; struct lws_cache_ttl_lru *l1; struct lws_cookie c; size_t fl; int f, n; if (!wsi) return -1; l1 = wsi->a.context->l1; if (!l1) return -1; f = wsi->http.ah->frag_index[WSI_TOKEN_HTTP_SET_COOKIE]; while (f) { cookiep = wsi->http.ah->data + wsi->http.ah->frags[f].offset; fl = wsi->http.ah->frags[f].len; f = wsi->http.ah->frags[f].nfrag; if (!cookiep || !fl) continue; #if defined(LWS_COOKIE_DEBUG) lwsl_notice("%s:parsing: %.*s\n", __func__, (int)fl, cookiep); #endif buf_head = cookiep; buf_end = cookiep + fl - 1; memset(&c, 0, sizeof(struct lws_cookie)); do { tk_head = buf_head; tk_end = memchr(buf_head, ';', (size_t)(buf_end - buf_head + 1)); if (!tk_end) { tk_end = buf_end; buf_head = buf_end; } else { buf_head = tk_end + 1; tk_end--; } if (c.f[CE_NAME]) goto parse_av; /* * find name value, remove leading trailing * WS and DQ for value */ dl = memchr(tk_head, '=', lws_ptr_diff_size_t(tk_end, tk_head + 1)); if (!dl || dl == tk_head) return -1; c.f[CE_NAME] = tk_head; c.l[CE_NAME] = lws_ptr_diff_size_t(dl, tk_head); lws_cookie_rm_sws(&c.f[CE_NAME], &c.l[CE_NAME]); if (!c.l[CE_NAME]) return -1; lwsl_cookie("%s: c name l %d v:%.*s\n", __func__, (int)c.l[CE_NAME], (int)c.l[CE_NAME], c.f[CE_NAME]); c.f[CE_VALUE] = dl + 1; c.l[CE_VALUE] = lws_ptr_diff_size_t(tk_end, c.f[CE_VALUE]) + 1; lws_cookie_rm_sws(&c.f[CE_VALUE], &c.l[CE_VALUE]); if (c.l[CE_VALUE] >= 2 && c.f[CE_VALUE][0] == '\"') { c.f[CE_VALUE]++; c.l[CE_VALUE] -= 2; } lwsl_cookie("%s: c value l %d v:%.*s\n", __func__, (int)c.l[CE_VALUE], (int)c.l[CE_VALUE], c.f[CE_VALUE]); continue; parse_av: while (*tk_head == ' ') { if (tk_head == tk_end) return -1; tk_head++; } for (n = 0; n < (int)LWS_ARRAY_SIZE(cft); n++) { if (lws_tolower(*tk_head) != cft[n].name[0]) continue; if (!is_iprefix(tk_head, lws_ptr_diff_size_t(tk_end, tk_head) + 1, cft[n].name, cft[n].len)) continue; if (n == 4 || n == 5) { c.f[n] = "T"; c.l[n] = 1; break; } c.f[n] = tk_head + cft[n].len; c.l[n] = lws_ptr_diff_size_t(tk_end, c.f[n]) + 1; lws_cookie_rm_sws(&c.f[n], &c.l[n]); if (n == CE_DOMAIN && c.l[0] && c.f[n][0] == '.'){ c.f[n]++; c.l[n]--; } lwsl_cookie("%s: %s l %d v:%.*s\n", __func__, cft[n].name, (int)c.l[n], (int)c.l[n], c.f[n]); break; } } while (tk_end != buf_end); if (lws_cookie_write_nsc(wsi, &c)) lwsl_err("%s:failed to write nsc\n", __func__); } return 0; } int lws_cookie_send_cookies(struct lws *wsi, char **pp, char *end) { char *p; int size; if (!wsi || !pp || !(*pp) || !end) return -1; size = lws_cookie_attach_cookies(wsi, NULL, NULL); if (!size) return 0; if (size < 0) { lwsl_err("%s:failed to get cookie string size\n", __func__); return -1; } lwsl_notice("%s: size %d\n", __func__, size); #if defined(LWS_COOKIE_DEBUG) char *p_dbg = *pp; #endif if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_COOKIE, NULL, size, (unsigned char **)pp, (unsigned char *)end)) return -1; #if defined(LWS_COOKIE_DEBUG) lwsl_notice("%s: dummy copy (%.*s) \n", __func__, (int)(*pp - p_dbg), p_dbg); #endif #ifdef LWS_WITH_HTTP2 if (lws_wsi_is_h2(wsi)) p = *pp - size; else #endif p = *pp - size - 2; if (lws_cookie_attach_cookies(wsi, p, p + size) <= 0) { lwsl_err("%s:failed to attach cookies\n", __func__); return -1; } #if defined(LWS_COOKIE_DEBUG) lwsl_notice("%s: real copy (%.*s) total len %d\n", __func__, (int)(*pp - p_dbg), p_dbg, (int)(*pp - p_dbg)); lwsl_hexdump_notice(p_dbg, (size_t)(*pp - p_dbg)); #endif return 0; } libwebsockets-4.3.5/lib/roles/http/date.c000066400000000000000000000123051476025525100203250ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * RFC7231 date string generation and parsing */ #include "private-lib-core.h" /* * To avoid needless pointers, we encode these in one string using the fact * they're 3 chars each to index it */ static const char *const s = "JanFebMarAprMayJunJulAugSepOctNovDecMonTueWedThuFriSatSun"; static int lws_http_date_render(char *buf, size_t len, const struct tm *tm) { const char *w = s + 36 + (3 * tm->tm_wday), *m = s + (3 * tm->tm_mon); if (len < 29) return -1; lws_snprintf(buf, len, "%c%c%c, %02d %c%c%c %d %02d:%02d:%02d GMT", w[0], w[1], w[2], tm->tm_mday, m[0], m[1], m[2], 1900 + tm->tm_year, tm->tm_hour, tm->tm_min, tm->tm_sec); return 0; } int lws_http_date_render_from_unix(char *buf, size_t len, const time_t *t) { #if defined(LWS_HAVE_GMTIME_R) struct tm tmp; struct tm *tm = gmtime_r(t, &tmp); #else struct tm *tm = gmtime(t); #endif if (!tm) return -1; if (lws_http_date_render(buf, len, tm)) return -1; return 0; } static int lws_http_date_parse(const char *b, size_t len, struct tm *tm) { int n; if (len < 29) return -1; /* * We reject anything that isn't a properly-formatted RFC7231 date, eg * * Tue, 15 Nov 1994 08:12:31 GMT */ if (b[3] != ',' || b[4] != ' ' || b[7] != ' ' || b[11] != ' ' || b[16] != ' ' || b[19] != ':' || b[22] != ':' || b[25] != ' ' || b[26] != 'G' || b[27] != 'M' || b[28] != 'T') return -1; memset(tm, 0, sizeof(*tm)); for (n = 36; n < 57; n += 3) if (b[0] == s[n] && b[1] == s[n + 1] && b[2] == s[n + 2]) break; else tm->tm_wday++; if (n == 57) return -1; for (n = 0; n < 36; n += 3) if (b[8] == s[n] && b[9] == s[n + 1] && b[10] == s[n + 2]) break; else tm->tm_mon++; if (n == 36) return -1; tm->tm_mday = atoi(b + 5); n = atoi(b + 12); if (n < 1900) return -1; tm->tm_year = n - 1900; n = atoi(b + 17); if (n < 0 || n > 23) return -1; tm->tm_hour = n; n = atoi(b + 20); if (n < 0 || n > 60) return -1; tm->tm_min = n; n = atoi(b + 23); if (n < 0 || n > 61) /* leap second */ return -1; tm->tm_sec = n; return 0; } int lws_http_date_parse_unix(const char *b, size_t len, time_t *t) { struct tm tm; if (lws_http_date_parse(b, len, &tm)) return -1; #if defined(WIN32) *t = _mkgmtime(&tm); #else #if defined(LWS_HAVE_TIMEGM) *t = timegm(&tm); #else /* this is a poor fallback since it uses localtime zone */ *t = mktime(&tm); #endif #endif return (int)*t == -1 ? -1 : 0; } #if defined(LWS_WITH_CLIENT) int lws_http_check_retry_after(struct lws *wsi, lws_usec_t *us_interval_in_out) { size_t len = (unsigned int)lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_RETRY_AFTER); char *p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_RETRY_AFTER); lws_usec_t u; time_t t, td; if (!p) return 1; /* * There are two arg styles for RETRY_AFTER specified in RFC7231 7.1.3, * either a full absolute second-resolution date/time, or an integer * interval * * Retry-After: Fri, 31 Dec 1999 23:59:59 GMT * Retry-After: 120 */ if (len < 9) u = ((lws_usec_t)(time_t)atoi(p)) * LWS_USEC_PER_SEC; else { if (lws_http_date_parse_unix(p, len, &t)) return 1; /* * If possible, look for DATE from the server as well, so we * can calculate the interval it thinks it is giving us, * eliminating problems from server - client clock skew */ time(&td); len = (unsigned int)lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_DATE); if (len) { p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_DATE); /* if this fails, it leaves td as client time */ (void)lws_http_date_parse_unix(p, len, &td); } if (td >= t) /* * if he's effectively giving us a 0 or negative * interval, just ignore the whole thing and keep the * incoming interval */ return 1; u = ((lws_usec_t)(t - td)) * LWS_USEC_PER_SEC; } /* * We are only willing to increase the incoming interval, not * decrease it */ if (u < *us_interval_in_out) /* keep the incoming interval */ return 1; /* use the computed interval */ *us_interval_in_out = u; return 0; } #endif libwebsockets-4.3.5/lib/roles/http/header.c000066400000000000000000000407141476025525100206450ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "lextable-strings.h" const unsigned char * lws_token_to_string(enum lws_token_indexes token) { if ((unsigned int)token >= LWS_ARRAY_SIZE(set)) return NULL; return (unsigned char *)set[token]; } /* * Return http header index if one matches slen chars of s, or -1 */ int lws_http_string_to_known_header(const char *s, size_t slen) { int n; for (n = 0; n < (int)LWS_ARRAY_SIZE(set); n++) if (!strncmp(set[n], s, slen)) return n; return LWS_HTTP_NO_KNOWN_HEADER; } #ifdef LWS_WITH_HTTP2 int lws_wsi_is_h2(struct lws *wsi) { return wsi->upgraded_to_http2 || wsi->mux_substream || #if defined(LWS_WITH_CLIENT) wsi->client_mux_substream || #endif lwsi_role_h2(wsi) || lwsi_role_h2_ENCAPSULATION(wsi); } #endif int lws_add_http_header_by_name(struct lws *wsi, const unsigned char *name, const unsigned char *value, int length, unsigned char **p, unsigned char *end) { #ifdef LWS_WITH_HTTP2 if (lws_wsi_is_h2(wsi)) return lws_add_http2_header_by_name(wsi, name, value, length, p, end); #else (void)wsi; #endif if (name) { char has_colon = 0; while (*p < end && *name) { has_colon = has_colon || *name == ':'; *((*p)++) = *name++; } if (*p + (has_colon ? 1 : 2) >= end) return 1; if (!has_colon) *((*p)++) = ':'; *((*p)++) = ' '; } if (*p + length + 3 >= end) return 1; if (value) memcpy(*p, value, (unsigned int)length); *p += length; *((*p)++) = '\x0d'; *((*p)++) = '\x0a'; return 0; } int lws_finalize_http_header(struct lws *wsi, unsigned char **p, unsigned char *end) { #ifdef LWS_WITH_HTTP2 if (lws_wsi_is_h2(wsi)) return 0; #else (void)wsi; #endif if ((lws_intptr_t)(end - *p) < 3) return 1; *((*p)++) = '\x0d'; *((*p)++) = '\x0a'; return 0; } int lws_finalize_write_http_header(struct lws *wsi, unsigned char *start, unsigned char **pp, unsigned char *end) { unsigned char *p; int len; if (lws_finalize_http_header(wsi, pp, end)) return 1; p = *pp; len = lws_ptr_diff(p, start); if (lws_write(wsi, start, (unsigned int)len, LWS_WRITE_HTTP_HEADERS) != len) return 1; return 0; } int lws_add_http_header_by_token(struct lws *wsi, enum lws_token_indexes token, const unsigned char *value, int length, unsigned char **p, unsigned char *end) { const unsigned char *name; #ifdef LWS_WITH_HTTP2 if (lws_wsi_is_h2(wsi)) return lws_add_http2_header_by_token(wsi, token, value, length, p, end); #endif name = lws_token_to_string(token); if (!name) return 1; return lws_add_http_header_by_name(wsi, name, value, length, p, end); } int lws_add_http_header_content_length(struct lws *wsi, lws_filepos_t content_length, unsigned char **p, unsigned char *end) { char b[24]; int n; n = lws_snprintf(b, sizeof(b) - 1, "%llu", (unsigned long long)content_length); if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH, (unsigned char *)b, n, p, end)) return 1; wsi->http.tx_content_length = content_length; wsi->http.tx_content_remain = content_length; lwsl_info("%s: %s: tx_content_length/remain %llu\n", __func__, lws_wsi_tag(wsi), (unsigned long long)content_length); return 0; } #if defined(LWS_WITH_SERVER) int lws_add_http_common_headers(struct lws *wsi, unsigned int code, const char *content_type, lws_filepos_t content_len, unsigned char **p, unsigned char *end) { const char *ka[] = { "close", "keep-alive" }; int types[] = { HTTP_CONNECTION_CLOSE, HTTP_CONNECTION_KEEP_ALIVE }, t = 0; if (lws_add_http_header_status(wsi, code, p, end)) return 1; if (content_type && lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE, (unsigned char *)content_type, (int)strlen(content_type), p, end)) return 1; #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) if (!wsi->http.lcs && content_type && (!strncmp(content_type, "text/", 5) || !strcmp(content_type, "application/javascript") || !strcmp(content_type, "image/svg+xml"))) lws_http_compression_apply(wsi, NULL, p, end, 0); #endif /* * if we decided to compress it, we don't know the content length... * the compressed data will go out chunked on h1 */ if ( #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) !wsi->http.lcs && #endif content_len != LWS_ILLEGAL_HTTP_CONTENT_LEN) { if (lws_add_http_header_content_length(wsi, content_len, p, end)) return 1; } else { /* there was no length... it normally means CONNECTION_CLOSE */ #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) if (!wsi->mux_substream && wsi->http.lcs) { /* so... * - h1 connection * - http compression transform active * - did not send content length * * then mark as chunked... */ wsi->http.comp_ctx.chunking = 1; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_TRANSFER_ENCODING, (unsigned char *)"chunked", 7, p, end)) return -1; /* ... but h1 compression is chunked, if active we can * still pipeline */ if (wsi->http.lcs && wsi->http.conn_type == HTTP_CONNECTION_KEEP_ALIVE) t = 1; } #endif if (!wsi->mux_substream) { if (lws_add_http_header_by_token(wsi, WSI_TOKEN_CONNECTION, (unsigned char *)ka[t], (int)strlen(ka[t]), p, end)) return 1; wsi->http.conn_type = (enum http_conn_type)types[t]; } } return 0; } static const char * const err400[] = { "Bad Request", "Unauthorized", "Payment Required", "Forbidden", "Not Found", "Method Not Allowed", "Not Acceptable", "Proxy Auth Required", "Request Timeout", "Conflict", "Gone", "Length Required", "Precondition Failed", "Request Entity Too Large", "Request URI too Long", "Unsupported Media Type", "Requested Range Not Satisfiable", "Expectation Failed" }; static const char * const err500[] = { "Internal Server Error", "Not Implemented", "Bad Gateway", "Service Unavailable", "Gateway Timeout", "HTTP Version Not Supported" }; /* security best practices from Mozilla Observatory */ static const struct lws_protocol_vhost_options pvo_hsbph[] = {{ NULL, NULL, "referrer-policy:", "no-referrer" }, { &pvo_hsbph[0], NULL, "x-frame-options:", "deny" }, { &pvo_hsbph[1], NULL, "x-xss-protection:", "1; mode=block" }, { &pvo_hsbph[2], NULL, "x-content-type-options:", "nosniff" }, { &pvo_hsbph[3], NULL, "content-security-policy:", "default-src 'none'; img-src 'self' data: ; " "script-src 'self'; font-src 'self'; " "style-src 'self'; connect-src 'self' ws: wss:; " "frame-ancestors 'none'; base-uri 'none';" "form-action 'self';" }}; int lws_add_http_header_status(struct lws *wsi, unsigned int _code, unsigned char **p, unsigned char *end) { static const char * const hver[] = { "HTTP/1.0", "HTTP/1.1", "HTTP/2" }; const struct lws_protocol_vhost_options *headers; unsigned int code = _code & LWSAHH_CODE_MASK; const char *description = "", *p1; unsigned char code_and_desc[60]; int n; wsi->http.response_code = code; #ifdef LWS_WITH_ACCESS_LOG wsi->http.access_log.response = (int)code; #endif #ifdef LWS_WITH_HTTP2 if (lws_wsi_is_h2(wsi)) { n = lws_add_http2_header_status(wsi, code, p, end); if (n) return n; } else #endif { if (code >= 400 && code < (400 + LWS_ARRAY_SIZE(err400))) description = err400[code - 400]; if (code >= 500 && code < (500 + LWS_ARRAY_SIZE(err500))) description = err500[code - 500]; if (code == 100) description = "Continue"; if (code == 200) description = "OK"; if (code == 304) description = "Not Modified"; else if (code >= 300 && code < 400) description = "Redirect"; if (wsi->http.request_version < LWS_ARRAY_SIZE(hver)) p1 = hver[wsi->http.request_version]; else p1 = hver[0]; n = lws_snprintf((char *)code_and_desc, sizeof(code_and_desc) - 1, "%s %u %s", p1, code, description); if (lws_add_http_header_by_name(wsi, NULL, code_and_desc, n, p, end)) return 1; } headers = wsi->a.vhost->headers; while (headers) { if (lws_add_http_header_by_name(wsi, (const unsigned char *)headers->name, (unsigned char *)headers->value, (int)strlen(headers->value), p, end)) return 1; headers = headers->next; } if (wsi->a.vhost->options & LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE) { headers = &pvo_hsbph[LWS_ARRAY_SIZE(pvo_hsbph) - 1]; while (headers) { if (lws_add_http_header_by_name(wsi, (const unsigned char *)headers->name, (unsigned char *)headers->value, (int)strlen(headers->value), p, end)) return 1; headers = headers->next; } } if (wsi->a.context->server_string && !(_code & LWSAHH_FLAG_NO_SERVER_NAME)) { assert(wsi->a.context->server_string_len > 0); if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_SERVER, (unsigned char *)wsi->a.context->server_string, wsi->a.context->server_string_len, p, end)) return 1; } if (wsi->a.vhost->options & LWS_SERVER_OPTION_STS) if (lws_add_http_header_by_name(wsi, (unsigned char *) "Strict-Transport-Security:", (unsigned char *)"max-age=15768000 ; " "includeSubDomains", 36, p, end)) return 1; if (*p >= (end - 2)) { lwsl_err("%s: reached end of buffer\n", __func__); return 1; } return 0; } int lws_return_http_status(struct lws *wsi, unsigned int code, const char *html_body) { struct lws_context *context = lws_get_context(wsi); struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; unsigned char *p = pt->serv_buf + LWS_PRE; unsigned char *start = p; unsigned char *end = p + context->pt_serv_buf_size - LWS_PRE; char *body = (char *)start + context->pt_serv_buf_size - 512; int n = 0, m = 0, len; char slen[20]; if (!wsi->a.vhost) { lwsl_err("%s: wsi not bound to vhost\n", __func__); return 1; } #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) if (!wsi->handling_404 && wsi->a.vhost->http.error_document_404 && code == HTTP_STATUS_NOT_FOUND) /* we should do a redirect, and do the 404 there */ if (lws_http_redirect(wsi, HTTP_STATUS_FOUND, (uint8_t *)wsi->a.vhost->http.error_document_404, (int)strlen(wsi->a.vhost->http.error_document_404), &p, end) > 0) return 0; #endif /* if the redirect failed, just do a simple status */ p = start; if (!html_body) html_body = ""; if (lws_add_http_header_status(wsi, code, &p, end)) return 1; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE, (unsigned char *)"text/html", 9, &p, end)) return 1; len = lws_snprintf(body, 510, "" "" "" "

    %u

    %s", code, html_body); n = lws_snprintf(slen, 12, "%d", len); if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH, (unsigned char *)slen, n, &p, end)) return 1; if (lws_finalize_http_header(wsi, &p, end)) return 1; #if defined(LWS_WITH_HTTP2) if (wsi->mux_substream) { /* * for HTTP/2, the headers must be sent separately, since they * go out in their own frame. That puts us in a bind that * we won't always be able to get away with two lws_write()s in * sequence, since the first may use up the writability due to * the pipe being choked or SSL_WANT_. * * However we do need to send the human-readable body, and the * END_STREAM. * * Solve it by writing the headers now... */ m = lws_write(wsi, start, lws_ptr_diff_size_t(p, start), LWS_WRITE_HTTP_HEADERS); if (m != lws_ptr_diff(p, start)) return 1; /* * ... but stash the body and send it as a priority next * handle_POLLOUT */ wsi->http.tx_content_length = (unsigned int)len; wsi->http.tx_content_remain = (unsigned int)len; wsi->h2.pending_status_body = lws_malloc((unsigned int)len + LWS_PRE + 1, "pending status body"); if (!wsi->h2.pending_status_body) return -1; strcpy(wsi->h2.pending_status_body + LWS_PRE, body); lws_callback_on_writable(wsi); return 0; } else #endif { /* * for http/1, we can just append the body after the finalized * headers and send it all in one go. */ n = lws_ptr_diff(p, start) + len; memcpy(p, body, (unsigned int)len); m = lws_write(wsi, start, (unsigned int)n, LWS_WRITE_HTTP); if (m != n) return 1; } return m != n; } int lws_http_redirect(struct lws *wsi, int code, const unsigned char *loc, int len, unsigned char **p, unsigned char *end) { unsigned char *start = *p; if (lws_add_http_header_status(wsi, (unsigned int)code, p, end)) return -1; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_LOCATION, loc, len, p, end)) return -1; /* * if we're going with http/1.1 and keepalive, we have to give fake * content metadata so the client knows we completed the transaction and * it can do the redirect... */ if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE, (unsigned char *)"text/html", 9, p, end)) return -1; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH, (unsigned char *)"0", 1, p, end)) return -1; if (lws_finalize_http_header(wsi, p, end)) return -1; return lws_write(wsi, start, lws_ptr_diff_size_t(*p, start), LWS_WRITE_HTTP_HEADERS | LWS_WRITE_H2_STREAM_END); } #endif #if !defined(LWS_WITH_HTTP_STREAM_COMPRESSION) int lws_http_compression_apply(struct lws *wsi, const char *name, unsigned char **p, unsigned char *end, char decomp) { (void)wsi; (void)name; (void)p; (void)end; (void)decomp; return 0; } #endif int lws_http_headers_detach(struct lws *wsi) { return lws_header_table_detach(wsi, 0); } #if defined(LWS_WITH_SERVER) void lws_sul_http_ah_lifecheck(lws_sorted_usec_list_t *sul) { struct allocated_headers *ah; struct lws_context_per_thread *pt = lws_container_of(sul, struct lws_context_per_thread, sul_ah_lifecheck); struct lws *wsi; time_t now; int m; now = time(NULL); lws_pt_lock(pt, __func__); ah = pt->http.ah_list; while (ah) { int len; char buf[256]; const unsigned char *c; if (!ah->in_use || !ah->wsi || !ah->assigned || (ah->wsi->a.vhost && (now - ah->assigned) < ah->wsi->a.vhost->timeout_secs_ah_idle + 360)) { ah = ah->next; continue; } /* * a single ah session somehow got held for * an unreasonable amount of time. * * Dump info on the connection... */ wsi = ah->wsi; buf[0] = '\0'; #if !defined(LWS_PLAT_OPTEE) lws_get_peer_simple(wsi, buf, sizeof(buf)); #else buf[0] = '\0'; #endif lwsl_notice("%s: ah excessive hold: wsi %p\n" " peer address: %s\n" " ah pos %lu\n", __func__, lws_wsi_tag(wsi), buf, (unsigned long)ah->pos); buf[0] = '\0'; m = 0; do { c = lws_token_to_string((enum lws_token_indexes)m); if (!c) break; if (!(*c)) break; len = lws_hdr_total_length(wsi, (enum lws_token_indexes)m); if (!len || len > (int)sizeof(buf) - 1) { m++; continue; } if (lws_hdr_copy(wsi, buf, sizeof buf, (enum lws_token_indexes)m) > 0) { buf[sizeof(buf) - 1] = '\0'; lwsl_notice(" %s = %s\n", (const char *)c, buf); } m++; } while (1); /* explicitly detach the ah */ lws_header_table_detach(wsi, 0); /* ... and then drop the connection */ __lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "excessive ah"); ah = pt->http.ah_list; } lws_pt_unlock(pt); } #endif libwebsockets-4.3.5/lib/roles/http/lextable-strings.h000066400000000000000000000062521476025525100227100ustar00rootroot00000000000000/* set of parsable strings -- ALL LOWER CASE */ static const char * const set[] = { "get ", "post ", #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_HTTP_HEADERS_ALL) "options ", #endif "host:", "connection:", "upgrade:", "origin:", #if defined(LWS_ROLE_WS) || defined(LWS_HTTP_HEADERS_ALL) "sec-websocket-draft:", #endif "\x0d\x0a", #if defined(LWS_ROLE_WS) || defined(LWS_HTTP_HEADERS_ALL) "sec-websocket-extensions:", "sec-websocket-key1:", "sec-websocket-key2:", "sec-websocket-protocol:", "sec-websocket-accept:", "sec-websocket-nonce:", #endif "http/1.1 ", #if defined(LWS_ROLE_H2) || defined(LWS_HTTP_HEADERS_ALL) "http2-settings:", #endif "accept:", #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_HTTP_HEADERS_ALL) "access-control-request-headers:", #endif "if-modified-since:", "if-none-match:", "accept-encoding:", "accept-language:", "pragma:", "cache-control:", "authorization:", "cookie:", "content-length:", "content-type:", "date:", "range:", #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_ROLE_H2) || defined(LWS_HTTP_HEADERS_ALL) "referer:", #endif #if defined(LWS_ROLE_WS) || defined(LWS_HTTP_HEADERS_ALL) "sec-websocket-key:", "sec-websocket-version:", "sec-websocket-origin:", #endif #if defined(LWS_ROLE_H2) || defined(LWS_HTTP_HEADERS_ALL) ":authority", ":method", ":path", ":scheme", ":status", #endif #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_ROLE_H2) || defined(LWS_HTTP_HEADERS_ALL) "accept-charset:", #endif "accept-ranges:", #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_ROLE_H2) || defined(LWS_HTTP_HEADERS_ALL) "access-control-allow-origin:", #endif "age:", "allow:", "content-disposition:", "content-encoding:", "content-language:", "content-location:", "content-range:", "etag:", "expect:", "expires:", "from:", "if-match:", "if-range:", "if-unmodified-since:", "last-modified:", "link:", "location:", #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_ROLE_H2) || defined(LWS_HTTP_HEADERS_ALL) "max-forwards:", "proxy-authenticate:", "proxy-authorization:", #endif "refresh:", "retry-after:", "server:", "set-cookie:", #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_ROLE_H2) || defined(LWS_HTTP_HEADERS_ALL) "strict-transport-security:", #endif "transfer-encoding:", #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_ROLE_H2) || defined(LWS_HTTP_HEADERS_ALL) "user-agent:", "vary:", "via:", "www-authenticate:", #endif #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_HTTP_HEADERS_ALL) "patch", "put", "delete", #endif "uri-args", /* fake header used for uri-only storage */ #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_HTTP_HEADERS_ALL) "proxy ", "x-real-ip:", #endif "http/1.0 ", "x-forwarded-for:", "connect ", "head ", #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || defined(LWS_ROLE_H2) || defined(LWS_HTTP_HEADERS_ALL) "te:", /* http/2 wants it to reject it */ "replay-nonce:", /* ACME */ #endif #if defined(LWS_ROLE_H2) || defined(LWS_HTTP_HEADERS_ALL) ":protocol", /* defined in mcmanus-httpbis-h2-ws-02 */ #endif "x-auth-token:", "x-amzn-dss-signature:", "", /* not matchable */ }; libwebsockets-4.3.5/lib/roles/http/lextable.h000066400000000000000000012307431476025525100212260ustar00rootroot00000000000000#if !defined(LWS_HTTP_HEADERS_ALL) && !defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) && !defined(LWS_ROLE_WS) && !defined(LWS_ROLE_H2) /* 0: 0: get */ /* 1: 1: post */ /* 2: 3: host: */ /* 3: 4: connection: */ /* 4: 5: upgrade: */ /* 5: 6: origin: */ /* 6: 8: */ /* 7: 15: http/1.1 */ /* 8: 17: accept: */ /* 9: 19: if-modified-since: */ /* 10: 20: if-none-match: */ /* 11: 21: accept-encoding: */ /* 12: 22: accept-language: */ /* 13: 23: pragma: */ /* 14: 24: cache-control: */ /* 15: 25: authorization: */ /* 16: 26: cookie: */ /* 17: 27: content-length: */ /* 18: 28: content-type: */ /* 19: 29: date: */ /* 20: 30: range: */ /* 21: 41: accept-ranges: */ /* 22: 43: age: */ /* 23: 44: allow: */ /* 24: 45: content-disposition: */ /* 25: 46: content-encoding: */ /* 26: 47: content-language: */ /* 27: 48: content-location: */ /* 28: 49: content-range: */ /* 29: 50: etag: */ /* 30: 51: expect: */ /* 31: 52: expires: */ /* 32: 53: from: */ /* 33: 54: if-match: */ /* 34: 55: if-range: */ /* 35: 56: if-unmodified-since: */ /* 36: 57: last-modified: */ /* 37: 58: link: */ /* 38: 59: location: */ /* 39: 63: refresh: */ /* 40: 64: retry-after: */ /* 41: 65: server: */ /* 42: 66: set-cookie: */ /* 43: 68: transfer-encoding: */ /* 44: 76: uri-args */ /* 45: 79: http/1.0 */ /* 46: 80: x-forwarded-for: */ /* 47: 81: connect */ /* 48: 82: head */ /* 49: 86: x-auth-token: */ /* 50: 87: x-amzn-dss-signature: */ /* 51: 88: */ /* pos 0000: 0 */ 0x67 /* 'g' */, 0x34, 0x00 /* (to 0x0034 state 1) */, 0x70 /* 'p' */, 0x36, 0x00 /* (to 0x0039 state 5) */, 0x68 /* 'h' */, 0x3F, 0x00 /* (to 0x0045 state 10) */, 0x63 /* 'c' */, 0x4B, 0x00 /* (to 0x0054 state 15) */, 0x75 /* 'u' */, 0x6C, 0x00 /* (to 0x0078 state 26) */, 0x6F /* 'o' */, 0x78, 0x00 /* (to 0x0087 state 34) */, 0x0D /* '.' */, 0x7D, 0x00 /* (to 0x008F state 41) */, 0x61 /* 'a' */, 0x8C, 0x00 /* (to 0x00A1 state 51) */, 0x69 /* 'i' */, 0xA3, 0x00 /* (to 0x00BB state 58) */, 0x64 /* 'd' */, 0x43, 0x01 /* (to 0x015E state 160) */, 0x72 /* 'r' */, 0x46, 0x01 /* (to 0x0164 state 165) */, 0x65 /* 'e' */, 0x92, 0x01 /* (to 0x01B3 state 229) */, 0x66 /* 'f' */, 0xAE, 0x01 /* (to 0x01D2 state 245) */, 0x6C /* 'l' */, 0xD0, 0x01 /* (to 0x01F7 state 278) */, 0x73 /* 's' */, 0x0C, 0x02 /* (to 0x0236 state 321) */, 0x74 /* 't' */, 0x21, 0x02 /* (to 0x024E state 337) */, 0x78 /* 'x' */, 0x3C, 0x02 /* (to 0x026C state 364) */, 0x08, /* fail */ /* pos 0034: 1 */ 0xE5 /* 'e' -> */, /* pos 0035: 2 */ 0xF4 /* 't' -> */, /* pos 0036: 3 */ 0xA0 /* ' ' -> */, /* pos 0037: 4 */ 0x00, 0x00 /* - terminal marker 0 - */, /* pos 0039: 5 */ 0x6F /* 'o' */, 0x07, 0x00 /* (to 0x0040 state 6) */, 0x72 /* 'r' */, 0xCE, 0x00 /* (to 0x010A state 106) */, 0x08, /* fail */ /* pos 0040: 6 */ 0xF3 /* 's' -> */, /* pos 0041: 7 */ 0xF4 /* 't' -> */, /* pos 0042: 8 */ 0xA0 /* ' ' -> */, /* pos 0043: 9 */ 0x00, 0x01 /* - terminal marker 1 - */, /* pos 0045: 10 */ 0x6F /* 'o' */, 0x0A, 0x00 /* (to 0x004F state 11) */, 0x74 /* 't' */, 0x4A, 0x00 /* (to 0x0092 state 43) */, 0x65 /* 'e' */, 0x3A, 0x02 /* (to 0x0285 state 381) */, 0x08, /* fail */ /* pos 004f: 11 */ 0xF3 /* 's' -> */, /* pos 0050: 12 */ 0xF4 /* 't' -> */, /* pos 0051: 13 */ 0xBA /* ':' -> */, /* pos 0052: 14 */ 0x00, 0x02 /* - terminal marker 2 - */, /* pos 0054: 15 */ 0x6F /* 'o' */, 0x07, 0x00 /* (to 0x005B state 16) */, 0x61 /* 'a' */, 0xBA, 0x00 /* (to 0x0111 state 112) */, 0x08, /* fail */ /* pos 005b: 16 */ 0x6E /* 'n' */, 0x07, 0x00 /* (to 0x0062 state 17) */, 0x6F /* 'o' */, 0xCF, 0x00 /* (to 0x012D state 138) */, 0x08, /* fail */ /* pos 0062: 17 */ 0x6E /* 'n' */, 0x07, 0x00 /* (to 0x0069 state 18) */, 0x74 /* 't' */, 0xCE, 0x00 /* (to 0x0133 state 143) */, 0x08, /* fail */ /* pos 0069: 18 */ 0xE5 /* 'e' -> */, /* pos 006a: 19 */ 0xE3 /* 'c' -> */, /* pos 006b: 20 */ 0xF4 /* 't' -> */, /* pos 006c: 21 */ 0x69 /* 'i' */, 0x07, 0x00 /* (to 0x0073 state 22) */, 0x20 /* ' ' */, 0x14, 0x02 /* (to 0x0283 state 380) */, 0x08, /* fail */ /* pos 0073: 22 */ 0xEF /* 'o' -> */, /* pos 0074: 23 */ 0xEE /* 'n' -> */, /* pos 0075: 24 */ 0xBA /* ':' -> */, /* pos 0076: 25 */ 0x00, 0x03 /* - terminal marker 3 - */, /* pos 0078: 26 */ 0x70 /* 'p' */, 0x07, 0x00 /* (to 0x007F state 27) */, 0x72 /* 'r' */, 0xE6, 0x01 /* (to 0x0261 state 355) */, 0x08, /* fail */ /* pos 007f: 27 */ 0xE7 /* 'g' -> */, /* pos 0080: 28 */ 0xF2 /* 'r' -> */, /* pos 0081: 29 */ 0xE1 /* 'a' -> */, /* pos 0082: 30 */ 0xE4 /* 'd' -> */, /* pos 0083: 31 */ 0xE5 /* 'e' -> */, /* pos 0084: 32 */ 0xBA /* ':' -> */, /* pos 0085: 33 */ 0x00, 0x04 /* - terminal marker 4 - */, /* pos 0087: 34 */ 0xF2 /* 'r' -> */, /* pos 0088: 35 */ 0xE9 /* 'i' -> */, /* pos 0089: 36 */ 0xE7 /* 'g' -> */, /* pos 008a: 37 */ 0xE9 /* 'i' -> */, /* pos 008b: 38 */ 0xEE /* 'n' -> */, /* pos 008c: 39 */ 0xBA /* ':' -> */, /* pos 008d: 40 */ 0x00, 0x05 /* - terminal marker 5 - */, /* pos 008f: 41 */ 0x8A /* '.' -> */, /* pos 0090: 42 */ 0x00, 0x06 /* - terminal marker 6 - */, /* pos 0092: 43 */ 0xF4 /* 't' -> */, /* pos 0093: 44 */ 0xF0 /* 'p' -> */, /* pos 0094: 45 */ 0xAF /* '/' -> */, /* pos 0095: 46 */ 0xB1 /* '1' -> */, /* pos 0096: 47 */ 0xAE /* '.' -> */, /* pos 0097: 48 */ 0x31 /* '1' */, 0x07, 0x00 /* (to 0x009E state 49) */, 0x30 /* '0' */, 0xCF, 0x01 /* (to 0x0269 state 362) */, 0x08, /* fail */ /* pos 009e: 49 */ 0xA0 /* ' ' -> */, /* pos 009f: 50 */ 0x00, 0x07 /* - terminal marker 7 - */, /* pos 00a1: 51 */ 0x63 /* 'c' */, 0x0D, 0x00 /* (to 0x00AE state 52) */, 0x75 /* 'u' */, 0x7B, 0x00 /* (to 0x011F state 125) */, 0x67 /* 'g' */, 0xD2, 0x00 /* (to 0x0179 state 178) */, 0x6C /* 'l' */, 0xD3, 0x00 /* (to 0x017D state 181) */, 0x08, /* fail */ /* pos 00ae: 52 */ 0xE3 /* 'c' -> */, /* pos 00af: 53 */ 0xE5 /* 'e' -> */, /* pos 00b0: 54 */ 0xF0 /* 'p' -> */, /* pos 00b1: 55 */ 0xF4 /* 't' -> */, /* pos 00b2: 56 */ 0x3A /* ':' */, 0x07, 0x00 /* (to 0x00B9 state 57) */, 0x2D /* '-' */, 0x37, 0x00 /* (to 0x00EC state 87) */, 0x08, /* fail */ /* pos 00b9: 57 */ 0x00, 0x08 /* - terminal marker 8 - */, /* pos 00bb: 58 */ 0xE6 /* 'f' -> */, /* pos 00bc: 59 */ 0xAD /* '-' -> */, /* pos 00bd: 60 */ 0x6D /* 'm' */, 0x0D, 0x00 /* (to 0x00CA state 61) */, 0x6E /* 'n' */, 0x20, 0x00 /* (to 0x00E0 state 76) */, 0x72 /* 'r' */, 0x1B, 0x01 /* (to 0x01DE state 255) */, 0x75 /* 'u' */, 0x1F, 0x01 /* (to 0x01E5 state 261) */, 0x08, /* fail */ /* pos 00ca: 61 */ 0x6F /* 'o' */, 0x07, 0x00 /* (to 0x00D1 state 62) */, 0x61 /* 'a' */, 0x0B, 0x01 /* (to 0x01D8 state 250) */, 0x08, /* fail */ /* pos 00d1: 62 */ 0xE4 /* 'd' -> */, /* pos 00d2: 63 */ 0xE9 /* 'i' -> */, /* pos 00d3: 64 */ 0xE6 /* 'f' -> */, /* pos 00d4: 65 */ 0xE9 /* 'i' -> */, /* pos 00d5: 66 */ 0xE5 /* 'e' -> */, /* pos 00d6: 67 */ 0xE4 /* 'd' -> */, /* pos 00d7: 68 */ 0xAD /* '-' -> */, /* pos 00d8: 69 */ 0xF3 /* 's' -> */, /* pos 00d9: 70 */ 0xE9 /* 'i' -> */, /* pos 00da: 71 */ 0xEE /* 'n' -> */, /* pos 00db: 72 */ 0xE3 /* 'c' -> */, /* pos 00dc: 73 */ 0xE5 /* 'e' -> */, /* pos 00dd: 74 */ 0xBA /* ':' -> */, /* pos 00de: 75 */ 0x00, 0x09 /* - terminal marker 9 - */, /* pos 00e0: 76 */ 0xEF /* 'o' -> */, /* pos 00e1: 77 */ 0xEE /* 'n' -> */, /* pos 00e2: 78 */ 0xE5 /* 'e' -> */, /* pos 00e3: 79 */ 0xAD /* '-' -> */, /* pos 00e4: 80 */ 0xED /* 'm' -> */, /* pos 00e5: 81 */ 0xE1 /* 'a' -> */, /* pos 00e6: 82 */ 0xF4 /* 't' -> */, /* pos 00e7: 83 */ 0xE3 /* 'c' -> */, /* pos 00e8: 84 */ 0xE8 /* 'h' -> */, /* pos 00e9: 85 */ 0xBA /* ':' -> */, /* pos 00ea: 86 */ 0x00, 0x0A /* - terminal marker 10 - */, /* pos 00ec: 87 */ 0x65 /* 'e' */, 0x0A, 0x00 /* (to 0x00F6 state 88) */, 0x6C /* 'l' */, 0x11, 0x00 /* (to 0x0100 state 97) */, 0x72 /* 'r' */, 0x7F, 0x00 /* (to 0x0171 state 171) */, 0x08, /* fail */ /* pos 00f6: 88 */ 0xEE /* 'n' -> */, /* pos 00f7: 89 */ 0xE3 /* 'c' -> */, /* pos 00f8: 90 */ 0xEF /* 'o' -> */, /* pos 00f9: 91 */ 0xE4 /* 'd' -> */, /* pos 00fa: 92 */ 0xE9 /* 'i' -> */, /* pos 00fb: 93 */ 0xEE /* 'n' -> */, /* pos 00fc: 94 */ 0xE7 /* 'g' -> */, /* pos 00fd: 95 */ 0xBA /* ':' -> */, /* pos 00fe: 96 */ 0x00, 0x0B /* - terminal marker 11 - */, /* pos 0100: 97 */ 0xE1 /* 'a' -> */, /* pos 0101: 98 */ 0xEE /* 'n' -> */, /* pos 0102: 99 */ 0xE7 /* 'g' -> */, /* pos 0103: 100 */ 0xF5 /* 'u' -> */, /* pos 0104: 101 */ 0xE1 /* 'a' -> */, /* pos 0105: 102 */ 0xE7 /* 'g' -> */, /* pos 0106: 103 */ 0xE5 /* 'e' -> */, /* pos 0107: 104 */ 0xBA /* ':' -> */, /* pos 0108: 105 */ 0x00, 0x0C /* - terminal marker 12 - */, /* pos 010a: 106 */ 0xE1 /* 'a' -> */, /* pos 010b: 107 */ 0xE7 /* 'g' -> */, /* pos 010c: 108 */ 0xED /* 'm' -> */, /* pos 010d: 109 */ 0xE1 /* 'a' -> */, /* pos 010e: 110 */ 0xBA /* ':' -> */, /* pos 010f: 111 */ 0x00, 0x0D /* - terminal marker 13 - */, /* pos 0111: 112 */ 0xE3 /* 'c' -> */, /* pos 0112: 113 */ 0xE8 /* 'h' -> */, /* pos 0113: 114 */ 0xE5 /* 'e' -> */, /* pos 0114: 115 */ 0xAD /* '-' -> */, /* pos 0115: 116 */ 0xE3 /* 'c' -> */, /* pos 0116: 117 */ 0xEF /* 'o' -> */, /* pos 0117: 118 */ 0xEE /* 'n' -> */, /* pos 0118: 119 */ 0xF4 /* 't' -> */, /* pos 0119: 120 */ 0xF2 /* 'r' -> */, /* pos 011a: 121 */ 0xEF /* 'o' -> */, /* pos 011b: 122 */ 0xEC /* 'l' -> */, /* pos 011c: 123 */ 0xBA /* ':' -> */, /* pos 011d: 124 */ 0x00, 0x0E /* - terminal marker 14 - */, /* pos 011f: 125 */ 0xF4 /* 't' -> */, /* pos 0120: 126 */ 0xE8 /* 'h' -> */, /* pos 0121: 127 */ 0xEF /* 'o' -> */, /* pos 0122: 128 */ 0xF2 /* 'r' -> */, /* pos 0123: 129 */ 0xE9 /* 'i' -> */, /* pos 0124: 130 */ 0xFA /* 'z' -> */, /* pos 0125: 131 */ 0xE1 /* 'a' -> */, /* pos 0126: 132 */ 0xF4 /* 't' -> */, /* pos 0127: 133 */ 0xE9 /* 'i' -> */, /* pos 0128: 134 */ 0xEF /* 'o' -> */, /* pos 0129: 135 */ 0xEE /* 'n' -> */, /* pos 012a: 136 */ 0xBA /* ':' -> */, /* pos 012b: 137 */ 0x00, 0x0F /* - terminal marker 15 - */, /* pos 012d: 138 */ 0xEB /* 'k' -> */, /* pos 012e: 139 */ 0xE9 /* 'i' -> */, /* pos 012f: 140 */ 0xE5 /* 'e' -> */, /* pos 0130: 141 */ 0xBA /* ':' -> */, /* pos 0131: 142 */ 0x00, 0x10 /* - terminal marker 16 - */, /* pos 0133: 143 */ 0xE5 /* 'e' -> */, /* pos 0134: 144 */ 0xEE /* 'n' -> */, /* pos 0135: 145 */ 0xF4 /* 't' -> */, /* pos 0136: 146 */ 0xAD /* '-' -> */, /* pos 0137: 147 */ 0x6C /* 'l' */, 0x10, 0x00 /* (to 0x0147 state 148) */, 0x74 /* 't' */, 0x1E, 0x00 /* (to 0x0158 state 155) */, 0x64 /* 'd' */, 0x46, 0x00 /* (to 0x0183 state 186) */, 0x65 /* 'e' */, 0x50, 0x00 /* (to 0x0190 state 198) */, 0x72 /* 'r' */, 0x69, 0x00 /* (to 0x01AC state 223) */, 0x08, /* fail */ /* pos 0147: 148 */ 0x65 /* 'e' */, 0x0A, 0x00 /* (to 0x0151 state 149) */, 0x61 /* 'a' */, 0x50, 0x00 /* (to 0x019A state 207) */, 0x6F /* 'o' */, 0x56, 0x00 /* (to 0x01A3 state 215) */, 0x08, /* fail */ /* pos 0151: 149 */ 0xEE /* 'n' -> */, /* pos 0152: 150 */ 0xE7 /* 'g' -> */, /* pos 0153: 151 */ 0xF4 /* 't' -> */, /* pos 0154: 152 */ 0xE8 /* 'h' -> */, /* pos 0155: 153 */ 0xBA /* ':' -> */, /* pos 0156: 154 */ 0x00, 0x11 /* - terminal marker 17 - */, /* pos 0158: 155 */ 0xF9 /* 'y' -> */, /* pos 0159: 156 */ 0xF0 /* 'p' -> */, /* pos 015a: 157 */ 0xE5 /* 'e' -> */, /* pos 015b: 158 */ 0xBA /* ':' -> */, /* pos 015c: 159 */ 0x00, 0x12 /* - terminal marker 18 - */, /* pos 015e: 160 */ 0xE1 /* 'a' -> */, /* pos 015f: 161 */ 0xF4 /* 't' -> */, /* pos 0160: 162 */ 0xE5 /* 'e' -> */, /* pos 0161: 163 */ 0xBA /* ':' -> */, /* pos 0162: 164 */ 0x00, 0x13 /* - terminal marker 19 - */, /* pos 0164: 165 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x016B state 166) */, 0x65 /* 'e' */, 0xB6, 0x00 /* (to 0x021D state 304) */, 0x08, /* fail */ /* pos 016b: 166 */ 0xEE /* 'n' -> */, /* pos 016c: 167 */ 0xE7 /* 'g' -> */, /* pos 016d: 168 */ 0xE5 /* 'e' -> */, /* pos 016e: 169 */ 0xBA /* ':' -> */, /* pos 016f: 170 */ 0x00, 0x14 /* - terminal marker 20 - */, /* pos 0171: 171 */ 0xE1 /* 'a' -> */, /* pos 0172: 172 */ 0xEE /* 'n' -> */, /* pos 0173: 173 */ 0xE7 /* 'g' -> */, /* pos 0174: 174 */ 0xE5 /* 'e' -> */, /* pos 0175: 175 */ 0xF3 /* 's' -> */, /* pos 0176: 176 */ 0xBA /* ':' -> */, /* pos 0177: 177 */ 0x00, 0x15 /* - terminal marker 21 - */, /* pos 0179: 178 */ 0xE5 /* 'e' -> */, /* pos 017a: 179 */ 0xBA /* ':' -> */, /* pos 017b: 180 */ 0x00, 0x16 /* - terminal marker 22 - */, /* pos 017d: 181 */ 0xEC /* 'l' -> */, /* pos 017e: 182 */ 0xEF /* 'o' -> */, /* pos 017f: 183 */ 0xF7 /* 'w' -> */, /* pos 0180: 184 */ 0xBA /* ':' -> */, /* pos 0181: 185 */ 0x00, 0x17 /* - terminal marker 23 - */, /* pos 0183: 186 */ 0xE9 /* 'i' -> */, /* pos 0184: 187 */ 0xF3 /* 's' -> */, /* pos 0185: 188 */ 0xF0 /* 'p' -> */, /* pos 0186: 189 */ 0xEF /* 'o' -> */, /* pos 0187: 190 */ 0xF3 /* 's' -> */, /* pos 0188: 191 */ 0xE9 /* 'i' -> */, /* pos 0189: 192 */ 0xF4 /* 't' -> */, /* pos 018a: 193 */ 0xE9 /* 'i' -> */, /* pos 018b: 194 */ 0xEF /* 'o' -> */, /* pos 018c: 195 */ 0xEE /* 'n' -> */, /* pos 018d: 196 */ 0xBA /* ':' -> */, /* pos 018e: 197 */ 0x00, 0x18 /* - terminal marker 24 - */, /* pos 0190: 198 */ 0xEE /* 'n' -> */, /* pos 0191: 199 */ 0xE3 /* 'c' -> */, /* pos 0192: 200 */ 0xEF /* 'o' -> */, /* pos 0193: 201 */ 0xE4 /* 'd' -> */, /* pos 0194: 202 */ 0xE9 /* 'i' -> */, /* pos 0195: 203 */ 0xEE /* 'n' -> */, /* pos 0196: 204 */ 0xE7 /* 'g' -> */, /* pos 0197: 205 */ 0xBA /* ':' -> */, /* pos 0198: 206 */ 0x00, 0x19 /* - terminal marker 25 - */, /* pos 019a: 207 */ 0xEE /* 'n' -> */, /* pos 019b: 208 */ 0xE7 /* 'g' -> */, /* pos 019c: 209 */ 0xF5 /* 'u' -> */, /* pos 019d: 210 */ 0xE1 /* 'a' -> */, /* pos 019e: 211 */ 0xE7 /* 'g' -> */, /* pos 019f: 212 */ 0xE5 /* 'e' -> */, /* pos 01a0: 213 */ 0xBA /* ':' -> */, /* pos 01a1: 214 */ 0x00, 0x1A /* - terminal marker 26 - */, /* pos 01a3: 215 */ 0xE3 /* 'c' -> */, /* pos 01a4: 216 */ 0xE1 /* 'a' -> */, /* pos 01a5: 217 */ 0xF4 /* 't' -> */, /* pos 01a6: 218 */ 0xE9 /* 'i' -> */, /* pos 01a7: 219 */ 0xEF /* 'o' -> */, /* pos 01a8: 220 */ 0xEE /* 'n' -> */, /* pos 01a9: 221 */ 0xBA /* ':' -> */, /* pos 01aa: 222 */ 0x00, 0x1B /* - terminal marker 27 - */, /* pos 01ac: 223 */ 0xE1 /* 'a' -> */, /* pos 01ad: 224 */ 0xEE /* 'n' -> */, /* pos 01ae: 225 */ 0xE7 /* 'g' -> */, /* pos 01af: 226 */ 0xE5 /* 'e' -> */, /* pos 01b0: 227 */ 0xBA /* ':' -> */, /* pos 01b1: 228 */ 0x00, 0x1C /* - terminal marker 28 - */, /* pos 01b3: 229 */ 0x74 /* 't' */, 0x07, 0x00 /* (to 0x01BA state 230) */, 0x78 /* 'x' */, 0x09, 0x00 /* (to 0x01BF state 234) */, 0x08, /* fail */ /* pos 01ba: 230 */ 0xE1 /* 'a' -> */, /* pos 01bb: 231 */ 0xE7 /* 'g' -> */, /* pos 01bc: 232 */ 0xBA /* ':' -> */, /* pos 01bd: 233 */ 0x00, 0x1D /* - terminal marker 29 - */, /* pos 01bf: 234 */ 0xF0 /* 'p' -> */, /* pos 01c0: 235 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x01C7 state 236) */, 0x69 /* 'i' */, 0x09, 0x00 /* (to 0x01CC state 240) */, 0x08, /* fail */ /* pos 01c7: 236 */ 0xE3 /* 'c' -> */, /* pos 01c8: 237 */ 0xF4 /* 't' -> */, /* pos 01c9: 238 */ 0xBA /* ':' -> */, /* pos 01ca: 239 */ 0x00, 0x1E /* - terminal marker 30 - */, /* pos 01cc: 240 */ 0xF2 /* 'r' -> */, /* pos 01cd: 241 */ 0xE5 /* 'e' -> */, /* pos 01ce: 242 */ 0xF3 /* 's' -> */, /* pos 01cf: 243 */ 0xBA /* ':' -> */, /* pos 01d0: 244 */ 0x00, 0x1F /* - terminal marker 31 - */, /* pos 01d2: 245 */ 0xF2 /* 'r' -> */, /* pos 01d3: 246 */ 0xEF /* 'o' -> */, /* pos 01d4: 247 */ 0xED /* 'm' -> */, /* pos 01d5: 248 */ 0xBA /* ':' -> */, /* pos 01d6: 249 */ 0x00, 0x20 /* - terminal marker 32 - */, /* pos 01d8: 250 */ 0xF4 /* 't' -> */, /* pos 01d9: 251 */ 0xE3 /* 'c' -> */, /* pos 01da: 252 */ 0xE8 /* 'h' -> */, /* pos 01db: 253 */ 0xBA /* ':' -> */, /* pos 01dc: 254 */ 0x00, 0x21 /* - terminal marker 33 - */, /* pos 01de: 255 */ 0xE1 /* 'a' -> */, /* pos 01df: 256 */ 0xEE /* 'n' -> */, /* pos 01e0: 257 */ 0xE7 /* 'g' -> */, /* pos 01e1: 258 */ 0xE5 /* 'e' -> */, /* pos 01e2: 259 */ 0xBA /* ':' -> */, /* pos 01e3: 260 */ 0x00, 0x22 /* - terminal marker 34 - */, /* pos 01e5: 261 */ 0xEE /* 'n' -> */, /* pos 01e6: 262 */ 0xED /* 'm' -> */, /* pos 01e7: 263 */ 0xEF /* 'o' -> */, /* pos 01e8: 264 */ 0xE4 /* 'd' -> */, /* pos 01e9: 265 */ 0xE9 /* 'i' -> */, /* pos 01ea: 266 */ 0xE6 /* 'f' -> */, /* pos 01eb: 267 */ 0xE9 /* 'i' -> */, /* pos 01ec: 268 */ 0xE5 /* 'e' -> */, /* pos 01ed: 269 */ 0xE4 /* 'd' -> */, /* pos 01ee: 270 */ 0xAD /* '-' -> */, /* pos 01ef: 271 */ 0xF3 /* 's' -> */, /* pos 01f0: 272 */ 0xE9 /* 'i' -> */, /* pos 01f1: 273 */ 0xEE /* 'n' -> */, /* pos 01f2: 274 */ 0xE3 /* 'c' -> */, /* pos 01f3: 275 */ 0xE5 /* 'e' -> */, /* pos 01f4: 276 */ 0xBA /* ':' -> */, /* pos 01f5: 277 */ 0x00, 0x23 /* - terminal marker 35 - */, /* pos 01f7: 278 */ 0x61 /* 'a' */, 0x0A, 0x00 /* (to 0x0201 state 279) */, 0x69 /* 'i' */, 0x15, 0x00 /* (to 0x020F state 292) */, 0x6F /* 'o' */, 0x17, 0x00 /* (to 0x0214 state 296) */, 0x08, /* fail */ /* pos 0201: 279 */ 0xF3 /* 's' -> */, /* pos 0202: 280 */ 0xF4 /* 't' -> */, /* pos 0203: 281 */ 0xAD /* '-' -> */, /* pos 0204: 282 */ 0xED /* 'm' -> */, /* pos 0205: 283 */ 0xEF /* 'o' -> */, /* pos 0206: 284 */ 0xE4 /* 'd' -> */, /* pos 0207: 285 */ 0xE9 /* 'i' -> */, /* pos 0208: 286 */ 0xE6 /* 'f' -> */, /* pos 0209: 287 */ 0xE9 /* 'i' -> */, /* pos 020a: 288 */ 0xE5 /* 'e' -> */, /* pos 020b: 289 */ 0xE4 /* 'd' -> */, /* pos 020c: 290 */ 0xBA /* ':' -> */, /* pos 020d: 291 */ 0x00, 0x24 /* - terminal marker 36 - */, /* pos 020f: 292 */ 0xEE /* 'n' -> */, /* pos 0210: 293 */ 0xEB /* 'k' -> */, /* pos 0211: 294 */ 0xBA /* ':' -> */, /* pos 0212: 295 */ 0x00, 0x25 /* - terminal marker 37 - */, /* pos 0214: 296 */ 0xE3 /* 'c' -> */, /* pos 0215: 297 */ 0xE1 /* 'a' -> */, /* pos 0216: 298 */ 0xF4 /* 't' -> */, /* pos 0217: 299 */ 0xE9 /* 'i' -> */, /* pos 0218: 300 */ 0xEF /* 'o' -> */, /* pos 0219: 301 */ 0xEE /* 'n' -> */, /* pos 021a: 302 */ 0xBA /* ':' -> */, /* pos 021b: 303 */ 0x00, 0x26 /* - terminal marker 38 - */, /* pos 021d: 304 */ 0x66 /* 'f' */, 0x07, 0x00 /* (to 0x0224 state 305) */, 0x74 /* 't' */, 0x0B, 0x00 /* (to 0x022B state 311) */, 0x08, /* fail */ /* pos 0224: 305 */ 0xF2 /* 'r' -> */, /* pos 0225: 306 */ 0xE5 /* 'e' -> */, /* pos 0226: 307 */ 0xF3 /* 's' -> */, /* pos 0227: 308 */ 0xE8 /* 'h' -> */, /* pos 0228: 309 */ 0xBA /* ':' -> */, /* pos 0229: 310 */ 0x00, 0x27 /* - terminal marker 39 - */, /* pos 022b: 311 */ 0xF2 /* 'r' -> */, /* pos 022c: 312 */ 0xF9 /* 'y' -> */, /* pos 022d: 313 */ 0xAD /* '-' -> */, /* pos 022e: 314 */ 0xE1 /* 'a' -> */, /* pos 022f: 315 */ 0xE6 /* 'f' -> */, /* pos 0230: 316 */ 0xF4 /* 't' -> */, /* pos 0231: 317 */ 0xE5 /* 'e' -> */, /* pos 0232: 318 */ 0xF2 /* 'r' -> */, /* pos 0233: 319 */ 0xBA /* ':' -> */, /* pos 0234: 320 */ 0x00, 0x28 /* - terminal marker 40 - */, /* pos 0236: 321 */ 0xE5 /* 'e' -> */, /* pos 0237: 322 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x023E state 323) */, 0x74 /* 't' */, 0x0A, 0x00 /* (to 0x0244 state 328) */, 0x08, /* fail */ /* pos 023e: 323 */ 0xF6 /* 'v' -> */, /* pos 023f: 324 */ 0xE5 /* 'e' -> */, /* pos 0240: 325 */ 0xF2 /* 'r' -> */, /* pos 0241: 326 */ 0xBA /* ':' -> */, /* pos 0242: 327 */ 0x00, 0x29 /* - terminal marker 41 - */, /* pos 0244: 328 */ 0xAD /* '-' -> */, /* pos 0245: 329 */ 0xE3 /* 'c' -> */, /* pos 0246: 330 */ 0xEF /* 'o' -> */, /* pos 0247: 331 */ 0xEF /* 'o' -> */, /* pos 0248: 332 */ 0xEB /* 'k' -> */, /* pos 0249: 333 */ 0xE9 /* 'i' -> */, /* pos 024a: 334 */ 0xE5 /* 'e' -> */, /* pos 024b: 335 */ 0xBA /* ':' -> */, /* pos 024c: 336 */ 0x00, 0x2A /* - terminal marker 42 - */, /* pos 024e: 337 */ 0xF2 /* 'r' -> */, /* pos 024f: 338 */ 0xE1 /* 'a' -> */, /* pos 0250: 339 */ 0xEE /* 'n' -> */, /* pos 0251: 340 */ 0xF3 /* 's' -> */, /* pos 0252: 341 */ 0xE6 /* 'f' -> */, /* pos 0253: 342 */ 0xE5 /* 'e' -> */, /* pos 0254: 343 */ 0xF2 /* 'r' -> */, /* pos 0255: 344 */ 0xAD /* '-' -> */, /* pos 0256: 345 */ 0xE5 /* 'e' -> */, /* pos 0257: 346 */ 0xEE /* 'n' -> */, /* pos 0258: 347 */ 0xE3 /* 'c' -> */, /* pos 0259: 348 */ 0xEF /* 'o' -> */, /* pos 025a: 349 */ 0xE4 /* 'd' -> */, /* pos 025b: 350 */ 0xE9 /* 'i' -> */, /* pos 025c: 351 */ 0xEE /* 'n' -> */, /* pos 025d: 352 */ 0xE7 /* 'g' -> */, /* pos 025e: 353 */ 0xBA /* ':' -> */, /* pos 025f: 354 */ 0x00, 0x2B /* - terminal marker 43 - */, /* pos 0261: 355 */ 0xE9 /* 'i' -> */, /* pos 0262: 356 */ 0xAD /* '-' -> */, /* pos 0263: 357 */ 0xE1 /* 'a' -> */, /* pos 0264: 358 */ 0xF2 /* 'r' -> */, /* pos 0265: 359 */ 0xE7 /* 'g' -> */, /* pos 0266: 360 */ 0xF3 /* 's' -> */, /* pos 0267: 361 */ 0x00, 0x2C /* - terminal marker 44 - */, /* pos 0269: 362 */ 0xA0 /* ' ' -> */, /* pos 026a: 363 */ 0x00, 0x2D /* - terminal marker 45 - */, /* pos 026c: 364 */ 0xAD /* '-' -> */, /* pos 026d: 365 */ 0x66 /* 'f' */, 0x07, 0x00 /* (to 0x0274 state 366) */, 0x61 /* 'a' */, 0x1A, 0x00 /* (to 0x028A state 385) */, 0x08, /* fail */ /* pos 0274: 366 */ 0xEF /* 'o' -> */, /* pos 0275: 367 */ 0xF2 /* 'r' -> */, /* pos 0276: 368 */ 0xF7 /* 'w' -> */, /* pos 0277: 369 */ 0xE1 /* 'a' -> */, /* pos 0278: 370 */ 0xF2 /* 'r' -> */, /* pos 0279: 371 */ 0xE4 /* 'd' -> */, /* pos 027a: 372 */ 0xE5 /* 'e' -> */, /* pos 027b: 373 */ 0xE4 /* 'd' -> */, /* pos 027c: 374 */ 0xAD /* '-' -> */, /* pos 027d: 375 */ 0xE6 /* 'f' -> */, /* pos 027e: 376 */ 0xEF /* 'o' -> */, /* pos 027f: 377 */ 0xF2 /* 'r' -> */, /* pos 0280: 378 */ 0xBA /* ':' -> */, /* pos 0281: 379 */ 0x00, 0x2E /* - terminal marker 46 - */, /* pos 0283: 380 */ 0x00, 0x2F /* - terminal marker 47 - */, /* pos 0285: 381 */ 0xE1 /* 'a' -> */, /* pos 0286: 382 */ 0xE4 /* 'd' -> */, /* pos 0287: 383 */ 0xA0 /* ' ' -> */, /* pos 0288: 384 */ 0x00, 0x30 /* - terminal marker 48 - */, /* pos 028a: 385 */ 0x75 /* 'u' */, 0x07, 0x00 /* (to 0x0291 state 386) */, 0x6D /* 'm' */, 0x0F, 0x00 /* (to 0x029C state 396) */, 0x08, /* fail */ /* pos 0291: 386 */ 0xF4 /* 't' -> */, /* pos 0292: 387 */ 0xE8 /* 'h' -> */, /* pos 0293: 388 */ 0xAD /* '-' -> */, /* pos 0294: 389 */ 0xF4 /* 't' -> */, /* pos 0295: 390 */ 0xEF /* 'o' -> */, /* pos 0296: 391 */ 0xEB /* 'k' -> */, /* pos 0297: 392 */ 0xE5 /* 'e' -> */, /* pos 0298: 393 */ 0xEE /* 'n' -> */, /* pos 0299: 394 */ 0xBA /* ':' -> */, /* pos 029a: 395 */ 0x00, 0x31 /* - terminal marker 49 - */, /* pos 029c: 396 */ 0xFA /* 'z' -> */, /* pos 029d: 397 */ 0xEE /* 'n' -> */, /* pos 029e: 398 */ 0xAD /* '-' -> */, /* pos 029f: 399 */ 0xE4 /* 'd' -> */, /* pos 02a0: 400 */ 0xF3 /* 's' -> */, /* pos 02a1: 401 */ 0xF3 /* 's' -> */, /* pos 02a2: 402 */ 0xAD /* '-' -> */, /* pos 02a3: 403 */ 0xF3 /* 's' -> */, /* pos 02a4: 404 */ 0xE9 /* 'i' -> */, /* pos 02a5: 405 */ 0xE7 /* 'g' -> */, /* pos 02a6: 406 */ 0xEE /* 'n' -> */, /* pos 02a7: 407 */ 0xE1 /* 'a' -> */, /* pos 02a8: 408 */ 0xF4 /* 't' -> */, /* pos 02a9: 409 */ 0xF5 /* 'u' -> */, /* pos 02aa: 410 */ 0xF2 /* 'r' -> */, /* pos 02ab: 411 */ 0xE5 /* 'e' -> */, /* pos 02ac: 412 */ 0xBA /* ':' -> */, /* pos 02ad: 413 */ 0x00, 0x32 /* - terminal marker 50 - */, /* total size 687 bytes */ #endif #if !defined(LWS_HTTP_HEADERS_ALL) && defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) && !defined(LWS_ROLE_WS) && !defined(LWS_ROLE_H2) /* 0: 0: get */ /* 1: 1: post */ /* 2: 2: options */ /* 3: 3: host: */ /* 4: 4: connection: */ /* 5: 5: upgrade: */ /* 6: 6: origin: */ /* 7: 8: */ /* 8: 15: http/1.1 */ /* 9: 17: accept: */ /* 10: 18: access-control-request-headers: */ /* 11: 19: if-modified-since: */ /* 12: 20: if-none-match: */ /* 13: 21: accept-encoding: */ /* 14: 22: accept-language: */ /* 15: 23: pragma: */ /* 16: 24: cache-control: */ /* 17: 25: authorization: */ /* 18: 26: cookie: */ /* 19: 27: content-length: */ /* 20: 28: content-type: */ /* 21: 29: date: */ /* 22: 30: range: */ /* 23: 31: referer: */ /* 24: 40: accept-charset: */ /* 25: 41: accept-ranges: */ /* 26: 42: access-control-allow-origin: */ /* 27: 43: age: */ /* 28: 44: allow: */ /* 29: 45: content-disposition: */ /* 30: 46: content-encoding: */ /* 31: 47: content-language: */ /* 32: 48: content-location: */ /* 33: 49: content-range: */ /* 34: 50: etag: */ /* 35: 51: expect: */ /* 36: 52: expires: */ /* 37: 53: from: */ /* 38: 54: if-match: */ /* 39: 55: if-range: */ /* 40: 56: if-unmodified-since: */ /* 41: 57: last-modified: */ /* 42: 58: link: */ /* 43: 59: location: */ /* 44: 60: max-forwards: */ /* 45: 61: proxy-authenticate: */ /* 46: 62: proxy-authorization: */ /* 47: 63: refresh: */ /* 48: 64: retry-after: */ /* 49: 65: server: */ /* 50: 66: set-cookie: */ /* 51: 67: strict-transport-security: */ /* 52: 68: transfer-encoding: */ /* 53: 69: user-agent: */ /* 54: 70: vary: */ /* 55: 71: via: */ /* 56: 72: www-authenticate: */ /* 57: 73: patch */ /* 58: 74: put */ /* 59: 75: delete */ /* 60: 76: uri-args */ /* 61: 77: proxy */ /* 62: 78: x-real-ip: */ /* 63: 79: http/1.0 */ /* 64: 80: x-forwarded-for: */ /* 65: 81: connect */ /* 66: 82: head */ /* 67: 83: te: */ /* 68: 84: replay-nonce: */ /* 69: 86: x-auth-token: */ /* 70: 87: x-amzn-dss-signature: */ /* 71: 88: */ /* pos 0000: 0 */ 0x67 /* 'g' */, 0x3D, 0x00 /* (to 0x003D state 1) */, 0x70 /* 'p' */, 0x3F, 0x00 /* (to 0x0042 state 5) */, 0x68 /* 'h' */, 0x4E, 0x00 /* (to 0x0054 state 10) */, 0x63 /* 'c' */, 0x5A, 0x00 /* (to 0x0063 state 15) */, 0x75 /* 'u' */, 0x7B, 0x00 /* (to 0x0087 state 26) */, 0x6F /* 'o' */, 0x8A, 0x00 /* (to 0x0099 state 34) */, 0x0D /* '.' */, 0x95, 0x00 /* (to 0x00A7 state 41) */, 0x61 /* 'a' */, 0xA4, 0x00 /* (to 0x00B9 state 51) */, 0x69 /* 'i' */, 0xC1, 0x00 /* (to 0x00D9 state 58) */, 0x64 /* 'd' */, 0x6A, 0x01 /* (to 0x0185 state 160) */, 0x72 /* 'r' */, 0x73, 0x01 /* (to 0x0191 state 165) */, 0x65 /* 'e' */, 0xBF, 0x01 /* (to 0x01E0 state 229) */, 0x66 /* 'f' */, 0xDB, 0x01 /* (to 0x01FF state 245) */, 0x6C /* 'l' */, 0xFD, 0x01 /* (to 0x0224 state 278) */, 0x73 /* 's' */, 0x42, 0x02 /* (to 0x026C state 321) */, 0x74 /* 't' */, 0x5D, 0x02 /* (to 0x028A state 337) */, 0x78 /* 'x' */, 0x7E, 0x02 /* (to 0x02AE state 364) */, 0x6D /* 'm' */, 0x08, 0x03 /* (to 0x033B state 474) */, 0x76 /* 'v' */, 0x61, 0x03 /* (to 0x0397 state 549) */, 0x77 /* 'w' */, 0x6E, 0x03 /* (to 0x03A7 state 557) */, 0x08, /* fail */ /* pos 003d: 1 */ 0xE5 /* 'e' -> */, /* pos 003e: 2 */ 0xF4 /* 't' -> */, /* pos 003f: 3 */ 0xA0 /* ' ' -> */, /* pos 0040: 4 */ 0x00, 0x00 /* - terminal marker 0 - */, /* pos 0042: 5 */ 0x6F /* 'o' */, 0x0D, 0x00 /* (to 0x004F state 6) */, 0x72 /* 'r' */, 0xE6, 0x00 /* (to 0x012B state 106) */, 0x61 /* 'a' */, 0x71, 0x03 /* (to 0x03B9 state 574) */, 0x75 /* 'u' */, 0x73, 0x03 /* (to 0x03BE state 578) */, 0x08, /* fail */ /* pos 004f: 6 */ 0xF3 /* 's' -> */, /* pos 0050: 7 */ 0xF4 /* 't' -> */, /* pos 0051: 8 */ 0xA0 /* ' ' -> */, /* pos 0052: 9 */ 0x00, 0x01 /* - terminal marker 1 - */, /* pos 0054: 10 */ 0x6F /* 'o' */, 0x0A, 0x00 /* (to 0x005E state 11) */, 0x74 /* 't' */, 0x53, 0x00 /* (to 0x00AA state 43) */, 0x65 /* 'e' */, 0x70, 0x02 /* (to 0x02CA state 381) */, 0x08, /* fail */ /* pos 005e: 11 */ 0xF3 /* 's' -> */, /* pos 005f: 12 */ 0xF4 /* 't' -> */, /* pos 0060: 13 */ 0xBA /* ':' -> */, /* pos 0061: 14 */ 0x00, 0x03 /* - terminal marker 3 - */, /* pos 0063: 15 */ 0x6F /* 'o' */, 0x07, 0x00 /* (to 0x006A state 16) */, 0x61 /* 'a' */, 0xD2, 0x00 /* (to 0x0138 state 112) */, 0x08, /* fail */ /* pos 006a: 16 */ 0x6E /* 'n' */, 0x07, 0x00 /* (to 0x0071 state 17) */, 0x6F /* 'o' */, 0xE7, 0x00 /* (to 0x0154 state 138) */, 0x08, /* fail */ /* pos 0071: 17 */ 0x6E /* 'n' */, 0x07, 0x00 /* (to 0x0078 state 18) */, 0x74 /* 't' */, 0xE6, 0x00 /* (to 0x015A state 143) */, 0x08, /* fail */ /* pos 0078: 18 */ 0xE5 /* 'e' -> */, /* pos 0079: 19 */ 0xE3 /* 'c' -> */, /* pos 007a: 20 */ 0xF4 /* 't' -> */, /* pos 007b: 21 */ 0x69 /* 'i' */, 0x07, 0x00 /* (to 0x0082 state 22) */, 0x20 /* ' ' */, 0x4A, 0x02 /* (to 0x02C8 state 380) */, 0x08, /* fail */ /* pos 0082: 22 */ 0xEF /* 'o' -> */, /* pos 0083: 23 */ 0xEE /* 'n' -> */, /* pos 0084: 24 */ 0xBA /* ':' -> */, /* pos 0085: 25 */ 0x00, 0x04 /* - terminal marker 4 - */, /* pos 0087: 26 */ 0x70 /* 'p' */, 0x0A, 0x00 /* (to 0x0091 state 27) */, 0x72 /* 'r' */, 0x19, 0x02 /* (to 0x02A3 state 355) */, 0x73 /* 's' */, 0xFF, 0x02 /* (to 0x038C state 539) */, 0x08, /* fail */ /* pos 0091: 27 */ 0xE7 /* 'g' -> */, /* pos 0092: 28 */ 0xF2 /* 'r' -> */, /* pos 0093: 29 */ 0xE1 /* 'a' -> */, /* pos 0094: 30 */ 0xE4 /* 'd' -> */, /* pos 0095: 31 */ 0xE5 /* 'e' -> */, /* pos 0096: 32 */ 0xBA /* ':' -> */, /* pos 0097: 33 */ 0x00, 0x05 /* - terminal marker 5 - */, /* pos 0099: 34 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x00A0 state 35) */, 0x70 /* 'p' */, 0x58, 0x02 /* (to 0x02F4 state 414) */, 0x08, /* fail */ /* pos 00a0: 35 */ 0xE9 /* 'i' -> */, /* pos 00a1: 36 */ 0xE7 /* 'g' -> */, /* pos 00a2: 37 */ 0xE9 /* 'i' -> */, /* pos 00a3: 38 */ 0xEE /* 'n' -> */, /* pos 00a4: 39 */ 0xBA /* ':' -> */, /* pos 00a5: 40 */ 0x00, 0x06 /* - terminal marker 6 - */, /* pos 00a7: 41 */ 0x8A /* '.' -> */, /* pos 00a8: 42 */ 0x00, 0x07 /* - terminal marker 7 - */, /* pos 00aa: 43 */ 0xF4 /* 't' -> */, /* pos 00ab: 44 */ 0xF0 /* 'p' -> */, /* pos 00ac: 45 */ 0xAF /* '/' -> */, /* pos 00ad: 46 */ 0xB1 /* '1' -> */, /* pos 00ae: 47 */ 0xAE /* '.' -> */, /* pos 00af: 48 */ 0x31 /* '1' */, 0x07, 0x00 /* (to 0x00B6 state 49) */, 0x30 /* '0' */, 0xF9, 0x01 /* (to 0x02AB state 362) */, 0x08, /* fail */ /* pos 00b6: 49 */ 0xA0 /* ' ' -> */, /* pos 00b7: 50 */ 0x00, 0x08 /* - terminal marker 8 - */, /* pos 00b9: 51 */ 0x63 /* 'c' */, 0x0D, 0x00 /* (to 0x00C6 state 52) */, 0x75 /* 'u' */, 0x8A, 0x00 /* (to 0x0146 state 125) */, 0x67 /* 'g' */, 0xE7, 0x00 /* (to 0x01A6 state 178) */, 0x6C /* 'l' */, 0xE8, 0x00 /* (to 0x01AA state 181) */, 0x08, /* fail */ /* pos 00c6: 52 */ 0xE3 /* 'c' -> */, /* pos 00c7: 53 */ 0xE5 /* 'e' -> */, /* pos 00c8: 54 */ 0x70 /* 'p' */, 0x07, 0x00 /* (to 0x00CF state 55) */, 0x73 /* 's' */, 0x31, 0x02 /* (to 0x02FC state 421) */, 0x08, /* fail */ /* pos 00cf: 55 */ 0xF4 /* 't' -> */, /* pos 00d0: 56 */ 0x3A /* ':' */, 0x07, 0x00 /* (to 0x00D7 state 57) */, 0x2D /* '-' */, 0x37, 0x00 /* (to 0x010A state 87) */, 0x08, /* fail */ /* pos 00d7: 57 */ 0x00, 0x09 /* - terminal marker 9 - */, /* pos 00d9: 58 */ 0xE6 /* 'f' -> */, /* pos 00da: 59 */ 0xAD /* '-' -> */, /* pos 00db: 60 */ 0x6D /* 'm' */, 0x0D, 0x00 /* (to 0x00E8 state 61) */, 0x6E /* 'n' */, 0x20, 0x00 /* (to 0x00FE state 76) */, 0x72 /* 'r' */, 0x2A, 0x01 /* (to 0x020B state 255) */, 0x75 /* 'u' */, 0x2E, 0x01 /* (to 0x0212 state 261) */, 0x08, /* fail */ /* pos 00e8: 61 */ 0x6F /* 'o' */, 0x07, 0x00 /* (to 0x00EF state 62) */, 0x61 /* 'a' */, 0x1A, 0x01 /* (to 0x0205 state 250) */, 0x08, /* fail */ /* pos 00ef: 62 */ 0xE4 /* 'd' -> */, /* pos 00f0: 63 */ 0xE9 /* 'i' -> */, /* pos 00f1: 64 */ 0xE6 /* 'f' -> */, /* pos 00f2: 65 */ 0xE9 /* 'i' -> */, /* pos 00f3: 66 */ 0xE5 /* 'e' -> */, /* pos 00f4: 67 */ 0xE4 /* 'd' -> */, /* pos 00f5: 68 */ 0xAD /* '-' -> */, /* pos 00f6: 69 */ 0xF3 /* 's' -> */, /* pos 00f7: 70 */ 0xE9 /* 'i' -> */, /* pos 00f8: 71 */ 0xEE /* 'n' -> */, /* pos 00f9: 72 */ 0xE3 /* 'c' -> */, /* pos 00fa: 73 */ 0xE5 /* 'e' -> */, /* pos 00fb: 74 */ 0xBA /* ':' -> */, /* pos 00fc: 75 */ 0x00, 0x0B /* - terminal marker 11 - */, /* pos 00fe: 76 */ 0xEF /* 'o' -> */, /* pos 00ff: 77 */ 0xEE /* 'n' -> */, /* pos 0100: 78 */ 0xE5 /* 'e' -> */, /* pos 0101: 79 */ 0xAD /* '-' -> */, /* pos 0102: 80 */ 0xED /* 'm' -> */, /* pos 0103: 81 */ 0xE1 /* 'a' -> */, /* pos 0104: 82 */ 0xF4 /* 't' -> */, /* pos 0105: 83 */ 0xE3 /* 'c' -> */, /* pos 0106: 84 */ 0xE8 /* 'h' -> */, /* pos 0107: 85 */ 0xBA /* ':' -> */, /* pos 0108: 86 */ 0x00, 0x0C /* - terminal marker 12 - */, /* pos 010a: 87 */ 0x65 /* 'e' */, 0x0D, 0x00 /* (to 0x0117 state 88) */, 0x6C /* 'l' */, 0x14, 0x00 /* (to 0x0121 state 97) */, 0x72 /* 'r' */, 0x8E, 0x00 /* (to 0x019E state 171) */, 0x63 /* 'c' */, 0x11, 0x02 /* (to 0x0324 state 453) */, 0x08, /* fail */ /* pos 0117: 88 */ 0xEE /* 'n' -> */, /* pos 0118: 89 */ 0xE3 /* 'c' -> */, /* pos 0119: 90 */ 0xEF /* 'o' -> */, /* pos 011a: 91 */ 0xE4 /* 'd' -> */, /* pos 011b: 92 */ 0xE9 /* 'i' -> */, /* pos 011c: 93 */ 0xEE /* 'n' -> */, /* pos 011d: 94 */ 0xE7 /* 'g' -> */, /* pos 011e: 95 */ 0xBA /* ':' -> */, /* pos 011f: 96 */ 0x00, 0x0D /* - terminal marker 13 - */, /* pos 0121: 97 */ 0xE1 /* 'a' -> */, /* pos 0122: 98 */ 0xEE /* 'n' -> */, /* pos 0123: 99 */ 0xE7 /* 'g' -> */, /* pos 0124: 100 */ 0xF5 /* 'u' -> */, /* pos 0125: 101 */ 0xE1 /* 'a' -> */, /* pos 0126: 102 */ 0xE7 /* 'g' -> */, /* pos 0127: 103 */ 0xE5 /* 'e' -> */, /* pos 0128: 104 */ 0xBA /* ':' -> */, /* pos 0129: 105 */ 0x00, 0x0E /* - terminal marker 14 - */, /* pos 012b: 106 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x0132 state 107) */, 0x6F /* 'o' */, 0x1B, 0x02 /* (to 0x0349 state 487) */, 0x08, /* fail */ /* pos 0132: 107 */ 0xE7 /* 'g' -> */, /* pos 0133: 108 */ 0xED /* 'm' -> */, /* pos 0134: 109 */ 0xE1 /* 'a' -> */, /* pos 0135: 110 */ 0xBA /* ':' -> */, /* pos 0136: 111 */ 0x00, 0x0F /* - terminal marker 15 - */, /* pos 0138: 112 */ 0xE3 /* 'c' -> */, /* pos 0139: 113 */ 0xE8 /* 'h' -> */, /* pos 013a: 114 */ 0xE5 /* 'e' -> */, /* pos 013b: 115 */ 0xAD /* '-' -> */, /* pos 013c: 116 */ 0xE3 /* 'c' -> */, /* pos 013d: 117 */ 0xEF /* 'o' -> */, /* pos 013e: 118 */ 0xEE /* 'n' -> */, /* pos 013f: 119 */ 0xF4 /* 't' -> */, /* pos 0140: 120 */ 0xF2 /* 'r' -> */, /* pos 0141: 121 */ 0xEF /* 'o' -> */, /* pos 0142: 122 */ 0xEC /* 'l' -> */, /* pos 0143: 123 */ 0xBA /* ':' -> */, /* pos 0144: 124 */ 0x00, 0x10 /* - terminal marker 16 - */, /* pos 0146: 125 */ 0xF4 /* 't' -> */, /* pos 0147: 126 */ 0xE8 /* 'h' -> */, /* pos 0148: 127 */ 0xEF /* 'o' -> */, /* pos 0149: 128 */ 0xF2 /* 'r' -> */, /* pos 014a: 129 */ 0xE9 /* 'i' -> */, /* pos 014b: 130 */ 0xFA /* 'z' -> */, /* pos 014c: 131 */ 0xE1 /* 'a' -> */, /* pos 014d: 132 */ 0xF4 /* 't' -> */, /* pos 014e: 133 */ 0xE9 /* 'i' -> */, /* pos 014f: 134 */ 0xEF /* 'o' -> */, /* pos 0150: 135 */ 0xEE /* 'n' -> */, /* pos 0151: 136 */ 0xBA /* ':' -> */, /* pos 0152: 137 */ 0x00, 0x11 /* - terminal marker 17 - */, /* pos 0154: 138 */ 0xEB /* 'k' -> */, /* pos 0155: 139 */ 0xE9 /* 'i' -> */, /* pos 0156: 140 */ 0xE5 /* 'e' -> */, /* pos 0157: 141 */ 0xBA /* ':' -> */, /* pos 0158: 142 */ 0x00, 0x12 /* - terminal marker 18 - */, /* pos 015a: 143 */ 0xE5 /* 'e' -> */, /* pos 015b: 144 */ 0xEE /* 'n' -> */, /* pos 015c: 145 */ 0xF4 /* 't' -> */, /* pos 015d: 146 */ 0xAD /* '-' -> */, /* pos 015e: 147 */ 0x6C /* 'l' */, 0x10, 0x00 /* (to 0x016E state 148) */, 0x74 /* 't' */, 0x1E, 0x00 /* (to 0x017F state 155) */, 0x64 /* 'd' */, 0x4C, 0x00 /* (to 0x01B0 state 186) */, 0x65 /* 'e' */, 0x56, 0x00 /* (to 0x01BD state 198) */, 0x72 /* 'r' */, 0x6F, 0x00 /* (to 0x01D9 state 223) */, 0x08, /* fail */ /* pos 016e: 148 */ 0x65 /* 'e' */, 0x0A, 0x00 /* (to 0x0178 state 149) */, 0x61 /* 'a' */, 0x56, 0x00 /* (to 0x01C7 state 207) */, 0x6F /* 'o' */, 0x5C, 0x00 /* (to 0x01D0 state 215) */, 0x08, /* fail */ /* pos 0178: 149 */ 0xEE /* 'n' -> */, /* pos 0179: 150 */ 0xE7 /* 'g' -> */, /* pos 017a: 151 */ 0xF4 /* 't' -> */, /* pos 017b: 152 */ 0xE8 /* 'h' -> */, /* pos 017c: 153 */ 0xBA /* ':' -> */, /* pos 017d: 154 */ 0x00, 0x13 /* - terminal marker 19 - */, /* pos 017f: 155 */ 0xF9 /* 'y' -> */, /* pos 0180: 156 */ 0xF0 /* 'p' -> */, /* pos 0181: 157 */ 0xE5 /* 'e' -> */, /* pos 0182: 158 */ 0xBA /* ':' -> */, /* pos 0183: 159 */ 0x00, 0x14 /* - terminal marker 20 - */, /* pos 0185: 160 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x018C state 161) */, 0x65 /* 'e' */, 0x39, 0x02 /* (to 0x03C1 state 580) */, 0x08, /* fail */ /* pos 018c: 161 */ 0xF4 /* 't' -> */, /* pos 018d: 162 */ 0xE5 /* 'e' -> */, /* pos 018e: 163 */ 0xBA /* ':' -> */, /* pos 018f: 164 */ 0x00, 0x15 /* - terminal marker 21 - */, /* pos 0191: 165 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x0198 state 166) */, 0x65 /* 'e' */, 0xB6, 0x00 /* (to 0x024A state 304) */, 0x08, /* fail */ /* pos 0198: 166 */ 0xEE /* 'n' -> */, /* pos 0199: 167 */ 0xE7 /* 'g' -> */, /* pos 019a: 168 */ 0xE5 /* 'e' -> */, /* pos 019b: 169 */ 0xBA /* ':' -> */, /* pos 019c: 170 */ 0x00, 0x16 /* - terminal marker 22 - */, /* pos 019e: 171 */ 0xE1 /* 'a' -> */, /* pos 019f: 172 */ 0xEE /* 'n' -> */, /* pos 01a0: 173 */ 0xE7 /* 'g' -> */, /* pos 01a1: 174 */ 0xE5 /* 'e' -> */, /* pos 01a2: 175 */ 0xF3 /* 's' -> */, /* pos 01a3: 176 */ 0xBA /* ':' -> */, /* pos 01a4: 177 */ 0x00, 0x19 /* - terminal marker 25 - */, /* pos 01a6: 178 */ 0xE5 /* 'e' -> */, /* pos 01a7: 179 */ 0xBA /* ':' -> */, /* pos 01a8: 180 */ 0x00, 0x1B /* - terminal marker 27 - */, /* pos 01aa: 181 */ 0xEC /* 'l' -> */, /* pos 01ab: 182 */ 0xEF /* 'o' -> */, /* pos 01ac: 183 */ 0xF7 /* 'w' -> */, /* pos 01ad: 184 */ 0xBA /* ':' -> */, /* pos 01ae: 185 */ 0x00, 0x1C /* - terminal marker 28 - */, /* pos 01b0: 186 */ 0xE9 /* 'i' -> */, /* pos 01b1: 187 */ 0xF3 /* 's' -> */, /* pos 01b2: 188 */ 0xF0 /* 'p' -> */, /* pos 01b3: 189 */ 0xEF /* 'o' -> */, /* pos 01b4: 190 */ 0xF3 /* 's' -> */, /* pos 01b5: 191 */ 0xE9 /* 'i' -> */, /* pos 01b6: 192 */ 0xF4 /* 't' -> */, /* pos 01b7: 193 */ 0xE9 /* 'i' -> */, /* pos 01b8: 194 */ 0xEF /* 'o' -> */, /* pos 01b9: 195 */ 0xEE /* 'n' -> */, /* pos 01ba: 196 */ 0xBA /* ':' -> */, /* pos 01bb: 197 */ 0x00, 0x1D /* - terminal marker 29 - */, /* pos 01bd: 198 */ 0xEE /* 'n' -> */, /* pos 01be: 199 */ 0xE3 /* 'c' -> */, /* pos 01bf: 200 */ 0xEF /* 'o' -> */, /* pos 01c0: 201 */ 0xE4 /* 'd' -> */, /* pos 01c1: 202 */ 0xE9 /* 'i' -> */, /* pos 01c2: 203 */ 0xEE /* 'n' -> */, /* pos 01c3: 204 */ 0xE7 /* 'g' -> */, /* pos 01c4: 205 */ 0xBA /* ':' -> */, /* pos 01c5: 206 */ 0x00, 0x1E /* - terminal marker 30 - */, /* pos 01c7: 207 */ 0xEE /* 'n' -> */, /* pos 01c8: 208 */ 0xE7 /* 'g' -> */, /* pos 01c9: 209 */ 0xF5 /* 'u' -> */, /* pos 01ca: 210 */ 0xE1 /* 'a' -> */, /* pos 01cb: 211 */ 0xE7 /* 'g' -> */, /* pos 01cc: 212 */ 0xE5 /* 'e' -> */, /* pos 01cd: 213 */ 0xBA /* ':' -> */, /* pos 01ce: 214 */ 0x00, 0x1F /* - terminal marker 31 - */, /* pos 01d0: 215 */ 0xE3 /* 'c' -> */, /* pos 01d1: 216 */ 0xE1 /* 'a' -> */, /* pos 01d2: 217 */ 0xF4 /* 't' -> */, /* pos 01d3: 218 */ 0xE9 /* 'i' -> */, /* pos 01d4: 219 */ 0xEF /* 'o' -> */, /* pos 01d5: 220 */ 0xEE /* 'n' -> */, /* pos 01d6: 221 */ 0xBA /* ':' -> */, /* pos 01d7: 222 */ 0x00, 0x20 /* - terminal marker 32 - */, /* pos 01d9: 223 */ 0xE1 /* 'a' -> */, /* pos 01da: 224 */ 0xEE /* 'n' -> */, /* pos 01db: 225 */ 0xE7 /* 'g' -> */, /* pos 01dc: 226 */ 0xE5 /* 'e' -> */, /* pos 01dd: 227 */ 0xBA /* ':' -> */, /* pos 01de: 228 */ 0x00, 0x21 /* - terminal marker 33 - */, /* pos 01e0: 229 */ 0x74 /* 't' */, 0x07, 0x00 /* (to 0x01E7 state 230) */, 0x78 /* 'x' */, 0x09, 0x00 /* (to 0x01EC state 234) */, 0x08, /* fail */ /* pos 01e7: 230 */ 0xE1 /* 'a' -> */, /* pos 01e8: 231 */ 0xE7 /* 'g' -> */, /* pos 01e9: 232 */ 0xBA /* ':' -> */, /* pos 01ea: 233 */ 0x00, 0x22 /* - terminal marker 34 - */, /* pos 01ec: 234 */ 0xF0 /* 'p' -> */, /* pos 01ed: 235 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x01F4 state 236) */, 0x69 /* 'i' */, 0x09, 0x00 /* (to 0x01F9 state 240) */, 0x08, /* fail */ /* pos 01f4: 236 */ 0xE3 /* 'c' -> */, /* pos 01f5: 237 */ 0xF4 /* 't' -> */, /* pos 01f6: 238 */ 0xBA /* ':' -> */, /* pos 01f7: 239 */ 0x00, 0x23 /* - terminal marker 35 - */, /* pos 01f9: 240 */ 0xF2 /* 'r' -> */, /* pos 01fa: 241 */ 0xE5 /* 'e' -> */, /* pos 01fb: 242 */ 0xF3 /* 's' -> */, /* pos 01fc: 243 */ 0xBA /* ':' -> */, /* pos 01fd: 244 */ 0x00, 0x24 /* - terminal marker 36 - */, /* pos 01ff: 245 */ 0xF2 /* 'r' -> */, /* pos 0200: 246 */ 0xEF /* 'o' -> */, /* pos 0201: 247 */ 0xED /* 'm' -> */, /* pos 0202: 248 */ 0xBA /* ':' -> */, /* pos 0203: 249 */ 0x00, 0x25 /* - terminal marker 37 - */, /* pos 0205: 250 */ 0xF4 /* 't' -> */, /* pos 0206: 251 */ 0xE3 /* 'c' -> */, /* pos 0207: 252 */ 0xE8 /* 'h' -> */, /* pos 0208: 253 */ 0xBA /* ':' -> */, /* pos 0209: 254 */ 0x00, 0x26 /* - terminal marker 38 - */, /* pos 020b: 255 */ 0xE1 /* 'a' -> */, /* pos 020c: 256 */ 0xEE /* 'n' -> */, /* pos 020d: 257 */ 0xE7 /* 'g' -> */, /* pos 020e: 258 */ 0xE5 /* 'e' -> */, /* pos 020f: 259 */ 0xBA /* ':' -> */, /* pos 0210: 260 */ 0x00, 0x27 /* - terminal marker 39 - */, /* pos 0212: 261 */ 0xEE /* 'n' -> */, /* pos 0213: 262 */ 0xED /* 'm' -> */, /* pos 0214: 263 */ 0xEF /* 'o' -> */, /* pos 0215: 264 */ 0xE4 /* 'd' -> */, /* pos 0216: 265 */ 0xE9 /* 'i' -> */, /* pos 0217: 266 */ 0xE6 /* 'f' -> */, /* pos 0218: 267 */ 0xE9 /* 'i' -> */, /* pos 0219: 268 */ 0xE5 /* 'e' -> */, /* pos 021a: 269 */ 0xE4 /* 'd' -> */, /* pos 021b: 270 */ 0xAD /* '-' -> */, /* pos 021c: 271 */ 0xF3 /* 's' -> */, /* pos 021d: 272 */ 0xE9 /* 'i' -> */, /* pos 021e: 273 */ 0xEE /* 'n' -> */, /* pos 021f: 274 */ 0xE3 /* 'c' -> */, /* pos 0220: 275 */ 0xE5 /* 'e' -> */, /* pos 0221: 276 */ 0xBA /* ':' -> */, /* pos 0222: 277 */ 0x00, 0x28 /* - terminal marker 40 - */, /* pos 0224: 278 */ 0x61 /* 'a' */, 0x0A, 0x00 /* (to 0x022E state 279) */, 0x69 /* 'i' */, 0x15, 0x00 /* (to 0x023C state 292) */, 0x6F /* 'o' */, 0x17, 0x00 /* (to 0x0241 state 296) */, 0x08, /* fail */ /* pos 022e: 279 */ 0xF3 /* 's' -> */, /* pos 022f: 280 */ 0xF4 /* 't' -> */, /* pos 0230: 281 */ 0xAD /* '-' -> */, /* pos 0231: 282 */ 0xED /* 'm' -> */, /* pos 0232: 283 */ 0xEF /* 'o' -> */, /* pos 0233: 284 */ 0xE4 /* 'd' -> */, /* pos 0234: 285 */ 0xE9 /* 'i' -> */, /* pos 0235: 286 */ 0xE6 /* 'f' -> */, /* pos 0236: 287 */ 0xE9 /* 'i' -> */, /* pos 0237: 288 */ 0xE5 /* 'e' -> */, /* pos 0238: 289 */ 0xE4 /* 'd' -> */, /* pos 0239: 290 */ 0xBA /* ':' -> */, /* pos 023a: 291 */ 0x00, 0x29 /* - terminal marker 41 - */, /* pos 023c: 292 */ 0xEE /* 'n' -> */, /* pos 023d: 293 */ 0xEB /* 'k' -> */, /* pos 023e: 294 */ 0xBA /* ':' -> */, /* pos 023f: 295 */ 0x00, 0x2A /* - terminal marker 42 - */, /* pos 0241: 296 */ 0xE3 /* 'c' -> */, /* pos 0242: 297 */ 0xE1 /* 'a' -> */, /* pos 0243: 298 */ 0xF4 /* 't' -> */, /* pos 0244: 299 */ 0xE9 /* 'i' -> */, /* pos 0245: 300 */ 0xEF /* 'o' -> */, /* pos 0246: 301 */ 0xEE /* 'n' -> */, /* pos 0247: 302 */ 0xBA /* ':' -> */, /* pos 0248: 303 */ 0x00, 0x2B /* - terminal marker 43 - */, /* pos 024a: 304 */ 0x66 /* 'f' */, 0x0A, 0x00 /* (to 0x0254 state 305) */, 0x74 /* 't' */, 0x14, 0x00 /* (to 0x0261 state 311) */, 0x70 /* 'p' */, 0x85, 0x01 /* (to 0x03D5 state 596) */, 0x08, /* fail */ /* pos 0254: 305 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x025B state 306) */, 0x65 /* 'e' */, 0xC7, 0x00 /* (to 0x031E state 448) */, 0x08, /* fail */ /* pos 025b: 306 */ 0xE5 /* 'e' -> */, /* pos 025c: 307 */ 0xF3 /* 's' -> */, /* pos 025d: 308 */ 0xE8 /* 'h' -> */, /* pos 025e: 309 */ 0xBA /* ':' -> */, /* pos 025f: 310 */ 0x00, 0x2F /* - terminal marker 47 - */, /* pos 0261: 311 */ 0xF2 /* 'r' -> */, /* pos 0262: 312 */ 0xF9 /* 'y' -> */, /* pos 0263: 313 */ 0xAD /* '-' -> */, /* pos 0264: 314 */ 0xE1 /* 'a' -> */, /* pos 0265: 315 */ 0xE6 /* 'f' -> */, /* pos 0266: 316 */ 0xF4 /* 't' -> */, /* pos 0267: 317 */ 0xE5 /* 'e' -> */, /* pos 0268: 318 */ 0xF2 /* 'r' -> */, /* pos 0269: 319 */ 0xBA /* ':' -> */, /* pos 026a: 320 */ 0x00, 0x30 /* - terminal marker 48 - */, /* pos 026c: 321 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x0273 state 322) */, 0x74 /* 't' */, 0x03, 0x01 /* (to 0x0372 state 514) */, 0x08, /* fail */ /* pos 0273: 322 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x027A state 323) */, 0x74 /* 't' */, 0x0A, 0x00 /* (to 0x0280 state 328) */, 0x08, /* fail */ /* pos 027a: 323 */ 0xF6 /* 'v' -> */, /* pos 027b: 324 */ 0xE5 /* 'e' -> */, /* pos 027c: 325 */ 0xF2 /* 'r' -> */, /* pos 027d: 326 */ 0xBA /* ':' -> */, /* pos 027e: 327 */ 0x00, 0x31 /* - terminal marker 49 - */, /* pos 0280: 328 */ 0xAD /* '-' -> */, /* pos 0281: 329 */ 0xE3 /* 'c' -> */, /* pos 0282: 330 */ 0xEF /* 'o' -> */, /* pos 0283: 331 */ 0xEF /* 'o' -> */, /* pos 0284: 332 */ 0xEB /* 'k' -> */, /* pos 0285: 333 */ 0xE9 /* 'i' -> */, /* pos 0286: 334 */ 0xE5 /* 'e' -> */, /* pos 0287: 335 */ 0xBA /* ':' -> */, /* pos 0288: 336 */ 0x00, 0x32 /* - terminal marker 50 - */, /* pos 028a: 337 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x0291 state 338) */, 0x65 /* 'e' */, 0x45, 0x01 /* (to 0x03D2 state 594) */, 0x08, /* fail */ /* pos 0291: 338 */ 0xE1 /* 'a' -> */, /* pos 0292: 339 */ 0xEE /* 'n' -> */, /* pos 0293: 340 */ 0xF3 /* 's' -> */, /* pos 0294: 341 */ 0xE6 /* 'f' -> */, /* pos 0295: 342 */ 0xE5 /* 'e' -> */, /* pos 0296: 343 */ 0xF2 /* 'r' -> */, /* pos 0297: 344 */ 0xAD /* '-' -> */, /* pos 0298: 345 */ 0xE5 /* 'e' -> */, /* pos 0299: 346 */ 0xEE /* 'n' -> */, /* pos 029a: 347 */ 0xE3 /* 'c' -> */, /* pos 029b: 348 */ 0xEF /* 'o' -> */, /* pos 029c: 349 */ 0xE4 /* 'd' -> */, /* pos 029d: 350 */ 0xE9 /* 'i' -> */, /* pos 029e: 351 */ 0xEE /* 'n' -> */, /* pos 029f: 352 */ 0xE7 /* 'g' -> */, /* pos 02a0: 353 */ 0xBA /* ':' -> */, /* pos 02a1: 354 */ 0x00, 0x34 /* - terminal marker 52 - */, /* pos 02a3: 355 */ 0xE9 /* 'i' -> */, /* pos 02a4: 356 */ 0xAD /* '-' -> */, /* pos 02a5: 357 */ 0xE1 /* 'a' -> */, /* pos 02a6: 358 */ 0xF2 /* 'r' -> */, /* pos 02a7: 359 */ 0xE7 /* 'g' -> */, /* pos 02a8: 360 */ 0xF3 /* 's' -> */, /* pos 02a9: 361 */ 0x00, 0x3C /* - terminal marker 60 - */, /* pos 02ab: 362 */ 0xA0 /* ' ' -> */, /* pos 02ac: 363 */ 0x00, 0x3F /* - terminal marker 63 - */, /* pos 02ae: 364 */ 0xAD /* '-' -> */, /* pos 02af: 365 */ 0x66 /* 'f' */, 0x0A, 0x00 /* (to 0x02B9 state 366) */, 0x61 /* 'a' */, 0x1D, 0x00 /* (to 0x02CF state 385) */, 0x72 /* 'r' */, 0x14, 0x01 /* (to 0x03C9 state 586) */, 0x08, /* fail */ /* pos 02b9: 366 */ 0xEF /* 'o' -> */, /* pos 02ba: 367 */ 0xF2 /* 'r' -> */, /* pos 02bb: 368 */ 0xF7 /* 'w' -> */, /* pos 02bc: 369 */ 0xE1 /* 'a' -> */, /* pos 02bd: 370 */ 0xF2 /* 'r' -> */, /* pos 02be: 371 */ 0xE4 /* 'd' -> */, /* pos 02bf: 372 */ 0xE5 /* 'e' -> */, /* pos 02c0: 373 */ 0xE4 /* 'd' -> */, /* pos 02c1: 374 */ 0xAD /* '-' -> */, /* pos 02c2: 375 */ 0xE6 /* 'f' -> */, /* pos 02c3: 376 */ 0xEF /* 'o' -> */, /* pos 02c4: 377 */ 0xF2 /* 'r' -> */, /* pos 02c5: 378 */ 0xBA /* ':' -> */, /* pos 02c6: 379 */ 0x00, 0x40 /* - terminal marker 64 - */, /* pos 02c8: 380 */ 0x00, 0x41 /* - terminal marker 65 - */, /* pos 02ca: 381 */ 0xE1 /* 'a' -> */, /* pos 02cb: 382 */ 0xE4 /* 'd' -> */, /* pos 02cc: 383 */ 0xA0 /* ' ' -> */, /* pos 02cd: 384 */ 0x00, 0x42 /* - terminal marker 66 - */, /* pos 02cf: 385 */ 0x75 /* 'u' */, 0x07, 0x00 /* (to 0x02D6 state 386) */, 0x6D /* 'm' */, 0x0F, 0x00 /* (to 0x02E1 state 396) */, 0x08, /* fail */ /* pos 02d6: 386 */ 0xF4 /* 't' -> */, /* pos 02d7: 387 */ 0xE8 /* 'h' -> */, /* pos 02d8: 388 */ 0xAD /* '-' -> */, /* pos 02d9: 389 */ 0xF4 /* 't' -> */, /* pos 02da: 390 */ 0xEF /* 'o' -> */, /* pos 02db: 391 */ 0xEB /* 'k' -> */, /* pos 02dc: 392 */ 0xE5 /* 'e' -> */, /* pos 02dd: 393 */ 0xEE /* 'n' -> */, /* pos 02de: 394 */ 0xBA /* ':' -> */, /* pos 02df: 395 */ 0x00, 0x45 /* - terminal marker 69 - */, /* pos 02e1: 396 */ 0xFA /* 'z' -> */, /* pos 02e2: 397 */ 0xEE /* 'n' -> */, /* pos 02e3: 398 */ 0xAD /* '-' -> */, /* pos 02e4: 399 */ 0xE4 /* 'd' -> */, /* pos 02e5: 400 */ 0xF3 /* 's' -> */, /* pos 02e6: 401 */ 0xF3 /* 's' -> */, /* pos 02e7: 402 */ 0xAD /* '-' -> */, /* pos 02e8: 403 */ 0xF3 /* 's' -> */, /* pos 02e9: 404 */ 0xE9 /* 'i' -> */, /* pos 02ea: 405 */ 0xE7 /* 'g' -> */, /* pos 02eb: 406 */ 0xEE /* 'n' -> */, /* pos 02ec: 407 */ 0xE1 /* 'a' -> */, /* pos 02ed: 408 */ 0xF4 /* 't' -> */, /* pos 02ee: 409 */ 0xF5 /* 'u' -> */, /* pos 02ef: 410 */ 0xF2 /* 'r' -> */, /* pos 02f0: 411 */ 0xE5 /* 'e' -> */, /* pos 02f1: 412 */ 0xBA /* ':' -> */, /* pos 02f2: 413 */ 0x00, 0x46 /* - terminal marker 70 - */, /* pos 02f4: 414 */ 0xF4 /* 't' -> */, /* pos 02f5: 415 */ 0xE9 /* 'i' -> */, /* pos 02f6: 416 */ 0xEF /* 'o' -> */, /* pos 02f7: 417 */ 0xEE /* 'n' -> */, /* pos 02f8: 418 */ 0xF3 /* 's' -> */, /* pos 02f9: 419 */ 0xA0 /* ' ' -> */, /* pos 02fa: 420 */ 0x00, 0x02 /* - terminal marker 2 - */, /* pos 02fc: 421 */ 0xF3 /* 's' -> */, /* pos 02fd: 422 */ 0xAD /* '-' -> */, /* pos 02fe: 423 */ 0xE3 /* 'c' -> */, /* pos 02ff: 424 */ 0xEF /* 'o' -> */, /* pos 0300: 425 */ 0xEE /* 'n' -> */, /* pos 0301: 426 */ 0xF4 /* 't' -> */, /* pos 0302: 427 */ 0xF2 /* 'r' -> */, /* pos 0303: 428 */ 0xEF /* 'o' -> */, /* pos 0304: 429 */ 0xEC /* 'l' -> */, /* pos 0305: 430 */ 0xAD /* '-' -> */, /* pos 0306: 431 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x030D state 432) */, 0x61 /* 'a' */, 0x24, 0x00 /* (to 0x032D state 461) */, 0x08, /* fail */ /* pos 030d: 432 */ 0xE5 /* 'e' -> */, /* pos 030e: 433 */ 0xF1 /* 'q' -> */, /* pos 030f: 434 */ 0xF5 /* 'u' -> */, /* pos 0310: 435 */ 0xE5 /* 'e' -> */, /* pos 0311: 436 */ 0xF3 /* 's' -> */, /* pos 0312: 437 */ 0xF4 /* 't' -> */, /* pos 0313: 438 */ 0xAD /* '-' -> */, /* pos 0314: 439 */ 0xE8 /* 'h' -> */, /* pos 0315: 440 */ 0xE5 /* 'e' -> */, /* pos 0316: 441 */ 0xE1 /* 'a' -> */, /* pos 0317: 442 */ 0xE4 /* 'd' -> */, /* pos 0318: 443 */ 0xE5 /* 'e' -> */, /* pos 0319: 444 */ 0xF2 /* 'r' -> */, /* pos 031a: 445 */ 0xF3 /* 's' -> */, /* pos 031b: 446 */ 0xBA /* ':' -> */, /* pos 031c: 447 */ 0x00, 0x0A /* - terminal marker 10 - */, /* pos 031e: 448 */ 0xF2 /* 'r' -> */, /* pos 031f: 449 */ 0xE5 /* 'e' -> */, /* pos 0320: 450 */ 0xF2 /* 'r' -> */, /* pos 0321: 451 */ 0xBA /* ':' -> */, /* pos 0322: 452 */ 0x00, 0x17 /* - terminal marker 23 - */, /* pos 0324: 453 */ 0xE8 /* 'h' -> */, /* pos 0325: 454 */ 0xE1 /* 'a' -> */, /* pos 0326: 455 */ 0xF2 /* 'r' -> */, /* pos 0327: 456 */ 0xF3 /* 's' -> */, /* pos 0328: 457 */ 0xE5 /* 'e' -> */, /* pos 0329: 458 */ 0xF4 /* 't' -> */, /* pos 032a: 459 */ 0xBA /* ':' -> */, /* pos 032b: 460 */ 0x00, 0x18 /* - terminal marker 24 - */, /* pos 032d: 461 */ 0xEC /* 'l' -> */, /* pos 032e: 462 */ 0xEC /* 'l' -> */, /* pos 032f: 463 */ 0xEF /* 'o' -> */, /* pos 0330: 464 */ 0xF7 /* 'w' -> */, /* pos 0331: 465 */ 0xAD /* '-' -> */, /* pos 0332: 466 */ 0xEF /* 'o' -> */, /* pos 0333: 467 */ 0xF2 /* 'r' -> */, /* pos 0334: 468 */ 0xE9 /* 'i' -> */, /* pos 0335: 469 */ 0xE7 /* 'g' -> */, /* pos 0336: 470 */ 0xE9 /* 'i' -> */, /* pos 0337: 471 */ 0xEE /* 'n' -> */, /* pos 0338: 472 */ 0xBA /* ':' -> */, /* pos 0339: 473 */ 0x00, 0x1A /* - terminal marker 26 - */, /* pos 033b: 474 */ 0xE1 /* 'a' -> */, /* pos 033c: 475 */ 0xF8 /* 'x' -> */, /* pos 033d: 476 */ 0xAD /* '-' -> */, /* pos 033e: 477 */ 0xE6 /* 'f' -> */, /* pos 033f: 478 */ 0xEF /* 'o' -> */, /* pos 0340: 479 */ 0xF2 /* 'r' -> */, /* pos 0341: 480 */ 0xF7 /* 'w' -> */, /* pos 0342: 481 */ 0xE1 /* 'a' -> */, /* pos 0343: 482 */ 0xF2 /* 'r' -> */, /* pos 0344: 483 */ 0xE4 /* 'd' -> */, /* pos 0345: 484 */ 0xF3 /* 's' -> */, /* pos 0346: 485 */ 0xBA /* ':' -> */, /* pos 0347: 486 */ 0x00, 0x2C /* - terminal marker 44 - */, /* pos 0349: 487 */ 0xF8 /* 'x' -> */, /* pos 034a: 488 */ 0xF9 /* 'y' -> */, /* pos 034b: 489 */ 0x2D /* '-' */, 0x07, 0x00 /* (to 0x0352 state 490) */, 0x20 /* ' ' */, 0x79, 0x00 /* (to 0x03C7 state 585) */, 0x08, /* fail */ /* pos 0352: 490 */ 0xE1 /* 'a' -> */, /* pos 0353: 491 */ 0xF5 /* 'u' -> */, /* pos 0354: 492 */ 0xF4 /* 't' -> */, /* pos 0355: 493 */ 0xE8 /* 'h' -> */, /* pos 0356: 494 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x035D state 495) */, 0x6F /* 'o' */, 0x0E, 0x00 /* (to 0x0367 state 504) */, 0x08, /* fail */ /* pos 035d: 495 */ 0xEE /* 'n' -> */, /* pos 035e: 496 */ 0xF4 /* 't' -> */, /* pos 035f: 497 */ 0xE9 /* 'i' -> */, /* pos 0360: 498 */ 0xE3 /* 'c' -> */, /* pos 0361: 499 */ 0xE1 /* 'a' -> */, /* pos 0362: 500 */ 0xF4 /* 't' -> */, /* pos 0363: 501 */ 0xE5 /* 'e' -> */, /* pos 0364: 502 */ 0xBA /* ':' -> */, /* pos 0365: 503 */ 0x00, 0x2D /* - terminal marker 45 - */, /* pos 0367: 504 */ 0xF2 /* 'r' -> */, /* pos 0368: 505 */ 0xE9 /* 'i' -> */, /* pos 0369: 506 */ 0xFA /* 'z' -> */, /* pos 036a: 507 */ 0xE1 /* 'a' -> */, /* pos 036b: 508 */ 0xF4 /* 't' -> */, /* pos 036c: 509 */ 0xE9 /* 'i' -> */, /* pos 036d: 510 */ 0xEF /* 'o' -> */, /* pos 036e: 511 */ 0xEE /* 'n' -> */, /* pos 036f: 512 */ 0xBA /* ':' -> */, /* pos 0370: 513 */ 0x00, 0x2E /* - terminal marker 46 - */, /* pos 0372: 514 */ 0xF2 /* 'r' -> */, /* pos 0373: 515 */ 0xE9 /* 'i' -> */, /* pos 0374: 516 */ 0xE3 /* 'c' -> */, /* pos 0375: 517 */ 0xF4 /* 't' -> */, /* pos 0376: 518 */ 0xAD /* '-' -> */, /* pos 0377: 519 */ 0xF4 /* 't' -> */, /* pos 0378: 520 */ 0xF2 /* 'r' -> */, /* pos 0379: 521 */ 0xE1 /* 'a' -> */, /* pos 037a: 522 */ 0xEE /* 'n' -> */, /* pos 037b: 523 */ 0xF3 /* 's' -> */, /* pos 037c: 524 */ 0xF0 /* 'p' -> */, /* pos 037d: 525 */ 0xEF /* 'o' -> */, /* pos 037e: 526 */ 0xF2 /* 'r' -> */, /* pos 037f: 527 */ 0xF4 /* 't' -> */, /* pos 0380: 528 */ 0xAD /* '-' -> */, /* pos 0381: 529 */ 0xF3 /* 's' -> */, /* pos 0382: 530 */ 0xE5 /* 'e' -> */, /* pos 0383: 531 */ 0xE3 /* 'c' -> */, /* pos 0384: 532 */ 0xF5 /* 'u' -> */, /* pos 0385: 533 */ 0xF2 /* 'r' -> */, /* pos 0386: 534 */ 0xE9 /* 'i' -> */, /* pos 0387: 535 */ 0xF4 /* 't' -> */, /* pos 0388: 536 */ 0xF9 /* 'y' -> */, /* pos 0389: 537 */ 0xBA /* ':' -> */, /* pos 038a: 538 */ 0x00, 0x33 /* - terminal marker 51 - */, /* pos 038c: 539 */ 0xE5 /* 'e' -> */, /* pos 038d: 540 */ 0xF2 /* 'r' -> */, /* pos 038e: 541 */ 0xAD /* '-' -> */, /* pos 038f: 542 */ 0xE1 /* 'a' -> */, /* pos 0390: 543 */ 0xE7 /* 'g' -> */, /* pos 0391: 544 */ 0xE5 /* 'e' -> */, /* pos 0392: 545 */ 0xEE /* 'n' -> */, /* pos 0393: 546 */ 0xF4 /* 't' -> */, /* pos 0394: 547 */ 0xBA /* ':' -> */, /* pos 0395: 548 */ 0x00, 0x35 /* - terminal marker 53 - */, /* pos 0397: 549 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x039E state 550) */, 0x69 /* 'i' */, 0x09, 0x00 /* (to 0x03A3 state 554) */, 0x08, /* fail */ /* pos 039e: 550 */ 0xF2 /* 'r' -> */, /* pos 039f: 551 */ 0xF9 /* 'y' -> */, /* pos 03a0: 552 */ 0xBA /* ':' -> */, /* pos 03a1: 553 */ 0x00, 0x36 /* - terminal marker 54 - */, /* pos 03a3: 554 */ 0xE1 /* 'a' -> */, /* pos 03a4: 555 */ 0xBA /* ':' -> */, /* pos 03a5: 556 */ 0x00, 0x37 /* - terminal marker 55 - */, /* pos 03a7: 557 */ 0xF7 /* 'w' -> */, /* pos 03a8: 558 */ 0xF7 /* 'w' -> */, /* pos 03a9: 559 */ 0xAD /* '-' -> */, /* pos 03aa: 560 */ 0xE1 /* 'a' -> */, /* pos 03ab: 561 */ 0xF5 /* 'u' -> */, /* pos 03ac: 562 */ 0xF4 /* 't' -> */, /* pos 03ad: 563 */ 0xE8 /* 'h' -> */, /* pos 03ae: 564 */ 0xE5 /* 'e' -> */, /* pos 03af: 565 */ 0xEE /* 'n' -> */, /* pos 03b0: 566 */ 0xF4 /* 't' -> */, /* pos 03b1: 567 */ 0xE9 /* 'i' -> */, /* pos 03b2: 568 */ 0xE3 /* 'c' -> */, /* pos 03b3: 569 */ 0xE1 /* 'a' -> */, /* pos 03b4: 570 */ 0xF4 /* 't' -> */, /* pos 03b5: 571 */ 0xE5 /* 'e' -> */, /* pos 03b6: 572 */ 0xBA /* ':' -> */, /* pos 03b7: 573 */ 0x00, 0x38 /* - terminal marker 56 - */, /* pos 03b9: 574 */ 0xF4 /* 't' -> */, /* pos 03ba: 575 */ 0xE3 /* 'c' -> */, /* pos 03bb: 576 */ 0xE8 /* 'h' -> */, /* pos 03bc: 577 */ 0x00, 0x39 /* - terminal marker 57 - */, /* pos 03be: 578 */ 0xF4 /* 't' -> */, /* pos 03bf: 579 */ 0x00, 0x3A /* - terminal marker 58 - */, /* pos 03c1: 580 */ 0xEC /* 'l' -> */, /* pos 03c2: 581 */ 0xE5 /* 'e' -> */, /* pos 03c3: 582 */ 0xF4 /* 't' -> */, /* pos 03c4: 583 */ 0xE5 /* 'e' -> */, /* pos 03c5: 584 */ 0x00, 0x3B /* - terminal marker 59 - */, /* pos 03c7: 585 */ 0x00, 0x3D /* - terminal marker 61 - */, /* pos 03c9: 586 */ 0xE5 /* 'e' -> */, /* pos 03ca: 587 */ 0xE1 /* 'a' -> */, /* pos 03cb: 588 */ 0xEC /* 'l' -> */, /* pos 03cc: 589 */ 0xAD /* '-' -> */, /* pos 03cd: 590 */ 0xE9 /* 'i' -> */, /* pos 03ce: 591 */ 0xF0 /* 'p' -> */, /* pos 03cf: 592 */ 0xBA /* ':' -> */, /* pos 03d0: 593 */ 0x00, 0x3E /* - terminal marker 62 - */, /* pos 03d2: 594 */ 0xBA /* ':' -> */, /* pos 03d3: 595 */ 0x00, 0x43 /* - terminal marker 67 - */, /* pos 03d5: 596 */ 0xEC /* 'l' -> */, /* pos 03d6: 597 */ 0xE1 /* 'a' -> */, /* pos 03d7: 598 */ 0xF9 /* 'y' -> */, /* pos 03d8: 599 */ 0xAD /* '-' -> */, /* pos 03d9: 600 */ 0xEE /* 'n' -> */, /* pos 03da: 601 */ 0xEF /* 'o' -> */, /* pos 03db: 602 */ 0xEE /* 'n' -> */, /* pos 03dc: 603 */ 0xE3 /* 'c' -> */, /* pos 03dd: 604 */ 0xE5 /* 'e' -> */, /* pos 03de: 605 */ 0xBA /* ':' -> */, /* pos 03df: 606 */ 0x00, 0x44 /* - terminal marker 68 - */, /* total size 993 bytes */ #endif #if !defined(LWS_HTTP_HEADERS_ALL) && !defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) && defined(LWS_ROLE_WS) && !defined(LWS_ROLE_H2) /* 0: 0: get */ /* 1: 1: post */ /* 2: 3: host: */ /* 3: 4: connection: */ /* 4: 5: upgrade: */ /* 5: 6: origin: */ /* 6: 7: sec-websocket-draft: */ /* 7: 8: */ /* 8: 9: sec-websocket-extensions: */ /* 9: 10: sec-websocket-key1: */ /* 10: 11: sec-websocket-key2: */ /* 11: 12: sec-websocket-protocol: */ /* 12: 13: sec-websocket-accept: */ /* 13: 14: sec-websocket-nonce: */ /* 14: 15: http/1.1 */ /* 15: 17: accept: */ /* 16: 19: if-modified-since: */ /* 17: 20: if-none-match: */ /* 18: 21: accept-encoding: */ /* 19: 22: accept-language: */ /* 20: 23: pragma: */ /* 21: 24: cache-control: */ /* 22: 25: authorization: */ /* 23: 26: cookie: */ /* 24: 27: content-length: */ /* 25: 28: content-type: */ /* 26: 29: date: */ /* 27: 30: range: */ /* 28: 32: sec-websocket-key: */ /* 29: 33: sec-websocket-version: */ /* 30: 34: sec-websocket-origin: */ /* 31: 41: accept-ranges: */ /* 32: 43: age: */ /* 33: 44: allow: */ /* 34: 45: content-disposition: */ /* 35: 46: content-encoding: */ /* 36: 47: content-language: */ /* 37: 48: content-location: */ /* 38: 49: content-range: */ /* 39: 50: etag: */ /* 40: 51: expect: */ /* 41: 52: expires: */ /* 42: 53: from: */ /* 43: 54: if-match: */ /* 44: 55: if-range: */ /* 45: 56: if-unmodified-since: */ /* 46: 57: last-modified: */ /* 47: 58: link: */ /* 48: 59: location: */ /* 49: 63: refresh: */ /* 50: 64: retry-after: */ /* 51: 65: server: */ /* 52: 66: set-cookie: */ /* 53: 68: transfer-encoding: */ /* 54: 76: uri-args */ /* 55: 79: http/1.0 */ /* 56: 80: x-forwarded-for: */ /* 57: 81: connect */ /* 58: 82: head */ /* 59: 86: x-auth-token: */ /* 60: 87: x-amzn-dss-signature: */ /* 61: 88: */ /* pos 0000: 0 */ 0x67 /* 'g' */, 0x3D, 0x00 /* (to 0x003D state 1) */, 0x70 /* 'p' */, 0x3F, 0x00 /* (to 0x0042 state 5) */, 0x68 /* 'h' */, 0x4E, 0x00 /* (to 0x0054 state 10) */, 0x63 /* 'c' */, 0x5A, 0x00 /* (to 0x0063 state 15) */, 0x75 /* 'u' */, 0x7B, 0x00 /* (to 0x0087 state 26) */, 0x6F /* 'o' */, 0x8A, 0x00 /* (to 0x0099 state 34) */, 0x0D /* '.' */, 0x95, 0x00 /* (to 0x00A7 state 41) */, 0x61 /* 'a' */, 0xA4, 0x00 /* (to 0x00B9 state 51) */, 0x69 /* 'i' */, 0xC1, 0x00 /* (to 0x00D9 state 58) */, 0x64 /* 'd' */, 0x6A, 0x01 /* (to 0x0185 state 160) */, 0x72 /* 'r' */, 0x73, 0x01 /* (to 0x0191 state 165) */, 0x65 /* 'e' */, 0xBF, 0x01 /* (to 0x01E0 state 229) */, 0x66 /* 'f' */, 0xDB, 0x01 /* (to 0x01FF state 245) */, 0x6C /* 'l' */, 0xFD, 0x01 /* (to 0x0224 state 278) */, 0x73 /* 's' */, 0x42, 0x02 /* (to 0x026C state 321) */, 0x74 /* 't' */, 0x60, 0x02 /* (to 0x028D state 337) */, 0x78 /* 'x' */, 0x81, 0x02 /* (to 0x02B1 state 364) */, 0x6D /* 'm' */, 0x0B, 0x03 /* (to 0x033E state 474) */, 0x76 /* 'v' */, 0x64, 0x03 /* (to 0x039A state 549) */, 0x77 /* 'w' */, 0x71, 0x03 /* (to 0x03AA state 557) */, 0x08, /* fail */ /* pos 003d: 1 */ 0xE5 /* 'e' -> */, /* pos 003e: 2 */ 0xF4 /* 't' -> */, /* pos 003f: 3 */ 0xA0 /* ' ' -> */, /* pos 0040: 4 */ 0x00, 0x00 /* - terminal marker 0 - */, /* pos 0042: 5 */ 0x6F /* 'o' */, 0x0D, 0x00 /* (to 0x004F state 6) */, 0x72 /* 'r' */, 0xE6, 0x00 /* (to 0x012B state 106) */, 0x61 /* 'a' */, 0x74, 0x03 /* (to 0x03BC state 574) */, 0x75 /* 'u' */, 0x76, 0x03 /* (to 0x03C1 state 578) */, 0x08, /* fail */ /* pos 004f: 6 */ 0xF3 /* 's' -> */, /* pos 0050: 7 */ 0xF4 /* 't' -> */, /* pos 0051: 8 */ 0xA0 /* ' ' -> */, /* pos 0052: 9 */ 0x00, 0x01 /* - terminal marker 1 - */, /* pos 0054: 10 */ 0x6F /* 'o' */, 0x0A, 0x00 /* (to 0x005E state 11) */, 0x74 /* 't' */, 0x53, 0x00 /* (to 0x00AA state 43) */, 0x65 /* 'e' */, 0x73, 0x02 /* (to 0x02CD state 381) */, 0x08, /* fail */ /* pos 005e: 11 */ 0xF3 /* 's' -> */, /* pos 005f: 12 */ 0xF4 /* 't' -> */, /* pos 0060: 13 */ 0xBA /* ':' -> */, /* pos 0061: 14 */ 0x00, 0x02 /* - terminal marker 2 - */, /* pos 0063: 15 */ 0x6F /* 'o' */, 0x07, 0x00 /* (to 0x006A state 16) */, 0x61 /* 'a' */, 0xD2, 0x00 /* (to 0x0138 state 112) */, 0x08, /* fail */ /* pos 006a: 16 */ 0x6E /* 'n' */, 0x07, 0x00 /* (to 0x0071 state 17) */, 0x6F /* 'o' */, 0xE7, 0x00 /* (to 0x0154 state 138) */, 0x08, /* fail */ /* pos 0071: 17 */ 0x6E /* 'n' */, 0x07, 0x00 /* (to 0x0078 state 18) */, 0x74 /* 't' */, 0xE6, 0x00 /* (to 0x015A state 143) */, 0x08, /* fail */ /* pos 0078: 18 */ 0xE5 /* 'e' -> */, /* pos 0079: 19 */ 0xE3 /* 'c' -> */, /* pos 007a: 20 */ 0xF4 /* 't' -> */, /* pos 007b: 21 */ 0x69 /* 'i' */, 0x07, 0x00 /* (to 0x0082 state 22) */, 0x20 /* ' ' */, 0x4D, 0x02 /* (to 0x02CB state 380) */, 0x08, /* fail */ /* pos 0082: 22 */ 0xEF /* 'o' -> */, /* pos 0083: 23 */ 0xEE /* 'n' -> */, /* pos 0084: 24 */ 0xBA /* ':' -> */, /* pos 0085: 25 */ 0x00, 0x03 /* - terminal marker 3 - */, /* pos 0087: 26 */ 0x70 /* 'p' */, 0x0A, 0x00 /* (to 0x0091 state 27) */, 0x72 /* 'r' */, 0x1C, 0x02 /* (to 0x02A6 state 355) */, 0x73 /* 's' */, 0x02, 0x03 /* (to 0x038F state 539) */, 0x08, /* fail */ /* pos 0091: 27 */ 0xE7 /* 'g' -> */, /* pos 0092: 28 */ 0xF2 /* 'r' -> */, /* pos 0093: 29 */ 0xE1 /* 'a' -> */, /* pos 0094: 30 */ 0xE4 /* 'd' -> */, /* pos 0095: 31 */ 0xE5 /* 'e' -> */, /* pos 0096: 32 */ 0xBA /* ':' -> */, /* pos 0097: 33 */ 0x00, 0x04 /* - terminal marker 4 - */, /* pos 0099: 34 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x00A0 state 35) */, 0x70 /* 'p' */, 0x5B, 0x02 /* (to 0x02F7 state 414) */, 0x08, /* fail */ /* pos 00a0: 35 */ 0xE9 /* 'i' -> */, /* pos 00a1: 36 */ 0xE7 /* 'g' -> */, /* pos 00a2: 37 */ 0xE9 /* 'i' -> */, /* pos 00a3: 38 */ 0xEE /* 'n' -> */, /* pos 00a4: 39 */ 0xBA /* ':' -> */, /* pos 00a5: 40 */ 0x00, 0x05 /* - terminal marker 5 - */, /* pos 00a7: 41 */ 0x8A /* '.' -> */, /* pos 00a8: 42 */ 0x00, 0x07 /* - terminal marker 7 - */, /* pos 00aa: 43 */ 0xF4 /* 't' -> */, /* pos 00ab: 44 */ 0xF0 /* 'p' -> */, /* pos 00ac: 45 */ 0xAF /* '/' -> */, /* pos 00ad: 46 */ 0xB1 /* '1' -> */, /* pos 00ae: 47 */ 0xAE /* '.' -> */, /* pos 00af: 48 */ 0x31 /* '1' */, 0x07, 0x00 /* (to 0x00B6 state 49) */, 0x30 /* '0' */, 0xFC, 0x01 /* (to 0x02AE state 362) */, 0x08, /* fail */ /* pos 00b6: 49 */ 0xA0 /* ' ' -> */, /* pos 00b7: 50 */ 0x00, 0x0E /* - terminal marker 14 - */, /* pos 00b9: 51 */ 0x63 /* 'c' */, 0x0D, 0x00 /* (to 0x00C6 state 52) */, 0x75 /* 'u' */, 0x8A, 0x00 /* (to 0x0146 state 125) */, 0x67 /* 'g' */, 0xE7, 0x00 /* (to 0x01A6 state 178) */, 0x6C /* 'l' */, 0xE8, 0x00 /* (to 0x01AA state 181) */, 0x08, /* fail */ /* pos 00c6: 52 */ 0xE3 /* 'c' -> */, /* pos 00c7: 53 */ 0xE5 /* 'e' -> */, /* pos 00c8: 54 */ 0x70 /* 'p' */, 0x07, 0x00 /* (to 0x00CF state 55) */, 0x73 /* 's' */, 0x34, 0x02 /* (to 0x02FF state 421) */, 0x08, /* fail */ /* pos 00cf: 55 */ 0xF4 /* 't' -> */, /* pos 00d0: 56 */ 0x3A /* ':' */, 0x07, 0x00 /* (to 0x00D7 state 57) */, 0x2D /* '-' */, 0x37, 0x00 /* (to 0x010A state 87) */, 0x08, /* fail */ /* pos 00d7: 57 */ 0x00, 0x0F /* - terminal marker 15 - */, /* pos 00d9: 58 */ 0xE6 /* 'f' -> */, /* pos 00da: 59 */ 0xAD /* '-' -> */, /* pos 00db: 60 */ 0x6D /* 'm' */, 0x0D, 0x00 /* (to 0x00E8 state 61) */, 0x6E /* 'n' */, 0x20, 0x00 /* (to 0x00FE state 76) */, 0x72 /* 'r' */, 0x2A, 0x01 /* (to 0x020B state 255) */, 0x75 /* 'u' */, 0x2E, 0x01 /* (to 0x0212 state 261) */, 0x08, /* fail */ /* pos 00e8: 61 */ 0x6F /* 'o' */, 0x07, 0x00 /* (to 0x00EF state 62) */, 0x61 /* 'a' */, 0x1A, 0x01 /* (to 0x0205 state 250) */, 0x08, /* fail */ /* pos 00ef: 62 */ 0xE4 /* 'd' -> */, /* pos 00f0: 63 */ 0xE9 /* 'i' -> */, /* pos 00f1: 64 */ 0xE6 /* 'f' -> */, /* pos 00f2: 65 */ 0xE9 /* 'i' -> */, /* pos 00f3: 66 */ 0xE5 /* 'e' -> */, /* pos 00f4: 67 */ 0xE4 /* 'd' -> */, /* pos 00f5: 68 */ 0xAD /* '-' -> */, /* pos 00f6: 69 */ 0xF3 /* 's' -> */, /* pos 00f7: 70 */ 0xE9 /* 'i' -> */, /* pos 00f8: 71 */ 0xEE /* 'n' -> */, /* pos 00f9: 72 */ 0xE3 /* 'c' -> */, /* pos 00fa: 73 */ 0xE5 /* 'e' -> */, /* pos 00fb: 74 */ 0xBA /* ':' -> */, /* pos 00fc: 75 */ 0x00, 0x10 /* - terminal marker 16 - */, /* pos 00fe: 76 */ 0xEF /* 'o' -> */, /* pos 00ff: 77 */ 0xEE /* 'n' -> */, /* pos 0100: 78 */ 0xE5 /* 'e' -> */, /* pos 0101: 79 */ 0xAD /* '-' -> */, /* pos 0102: 80 */ 0xED /* 'm' -> */, /* pos 0103: 81 */ 0xE1 /* 'a' -> */, /* pos 0104: 82 */ 0xF4 /* 't' -> */, /* pos 0105: 83 */ 0xE3 /* 'c' -> */, /* pos 0106: 84 */ 0xE8 /* 'h' -> */, /* pos 0107: 85 */ 0xBA /* ':' -> */, /* pos 0108: 86 */ 0x00, 0x11 /* - terminal marker 17 - */, /* pos 010a: 87 */ 0x65 /* 'e' */, 0x0D, 0x00 /* (to 0x0117 state 88) */, 0x6C /* 'l' */, 0x14, 0x00 /* (to 0x0121 state 97) */, 0x72 /* 'r' */, 0x8E, 0x00 /* (to 0x019E state 171) */, 0x63 /* 'c' */, 0x14, 0x02 /* (to 0x0327 state 453) */, 0x08, /* fail */ /* pos 0117: 88 */ 0xEE /* 'n' -> */, /* pos 0118: 89 */ 0xE3 /* 'c' -> */, /* pos 0119: 90 */ 0xEF /* 'o' -> */, /* pos 011a: 91 */ 0xE4 /* 'd' -> */, /* pos 011b: 92 */ 0xE9 /* 'i' -> */, /* pos 011c: 93 */ 0xEE /* 'n' -> */, /* pos 011d: 94 */ 0xE7 /* 'g' -> */, /* pos 011e: 95 */ 0xBA /* ':' -> */, /* pos 011f: 96 */ 0x00, 0x12 /* - terminal marker 18 - */, /* pos 0121: 97 */ 0xE1 /* 'a' -> */, /* pos 0122: 98 */ 0xEE /* 'n' -> */, /* pos 0123: 99 */ 0xE7 /* 'g' -> */, /* pos 0124: 100 */ 0xF5 /* 'u' -> */, /* pos 0125: 101 */ 0xE1 /* 'a' -> */, /* pos 0126: 102 */ 0xE7 /* 'g' -> */, /* pos 0127: 103 */ 0xE5 /* 'e' -> */, /* pos 0128: 104 */ 0xBA /* ':' -> */, /* pos 0129: 105 */ 0x00, 0x13 /* - terminal marker 19 - */, /* pos 012b: 106 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x0132 state 107) */, 0x6F /* 'o' */, 0x1E, 0x02 /* (to 0x034C state 487) */, 0x08, /* fail */ /* pos 0132: 107 */ 0xE7 /* 'g' -> */, /* pos 0133: 108 */ 0xED /* 'm' -> */, /* pos 0134: 109 */ 0xE1 /* 'a' -> */, /* pos 0135: 110 */ 0xBA /* ':' -> */, /* pos 0136: 111 */ 0x00, 0x14 /* - terminal marker 20 - */, /* pos 0138: 112 */ 0xE3 /* 'c' -> */, /* pos 0139: 113 */ 0xE8 /* 'h' -> */, /* pos 013a: 114 */ 0xE5 /* 'e' -> */, /* pos 013b: 115 */ 0xAD /* '-' -> */, /* pos 013c: 116 */ 0xE3 /* 'c' -> */, /* pos 013d: 117 */ 0xEF /* 'o' -> */, /* pos 013e: 118 */ 0xEE /* 'n' -> */, /* pos 013f: 119 */ 0xF4 /* 't' -> */, /* pos 0140: 120 */ 0xF2 /* 'r' -> */, /* pos 0141: 121 */ 0xEF /* 'o' -> */, /* pos 0142: 122 */ 0xEC /* 'l' -> */, /* pos 0143: 123 */ 0xBA /* ':' -> */, /* pos 0144: 124 */ 0x00, 0x15 /* - terminal marker 21 - */, /* pos 0146: 125 */ 0xF4 /* 't' -> */, /* pos 0147: 126 */ 0xE8 /* 'h' -> */, /* pos 0148: 127 */ 0xEF /* 'o' -> */, /* pos 0149: 128 */ 0xF2 /* 'r' -> */, /* pos 014a: 129 */ 0xE9 /* 'i' -> */, /* pos 014b: 130 */ 0xFA /* 'z' -> */, /* pos 014c: 131 */ 0xE1 /* 'a' -> */, /* pos 014d: 132 */ 0xF4 /* 't' -> */, /* pos 014e: 133 */ 0xE9 /* 'i' -> */, /* pos 014f: 134 */ 0xEF /* 'o' -> */, /* pos 0150: 135 */ 0xEE /* 'n' -> */, /* pos 0151: 136 */ 0xBA /* ':' -> */, /* pos 0152: 137 */ 0x00, 0x16 /* - terminal marker 22 - */, /* pos 0154: 138 */ 0xEB /* 'k' -> */, /* pos 0155: 139 */ 0xE9 /* 'i' -> */, /* pos 0156: 140 */ 0xE5 /* 'e' -> */, /* pos 0157: 141 */ 0xBA /* ':' -> */, /* pos 0158: 142 */ 0x00, 0x17 /* - terminal marker 23 - */, /* pos 015a: 143 */ 0xE5 /* 'e' -> */, /* pos 015b: 144 */ 0xEE /* 'n' -> */, /* pos 015c: 145 */ 0xF4 /* 't' -> */, /* pos 015d: 146 */ 0xAD /* '-' -> */, /* pos 015e: 147 */ 0x6C /* 'l' */, 0x10, 0x00 /* (to 0x016E state 148) */, 0x74 /* 't' */, 0x1E, 0x00 /* (to 0x017F state 155) */, 0x64 /* 'd' */, 0x4C, 0x00 /* (to 0x01B0 state 186) */, 0x65 /* 'e' */, 0x56, 0x00 /* (to 0x01BD state 198) */, 0x72 /* 'r' */, 0x6F, 0x00 /* (to 0x01D9 state 223) */, 0x08, /* fail */ /* pos 016e: 148 */ 0x65 /* 'e' */, 0x0A, 0x00 /* (to 0x0178 state 149) */, 0x61 /* 'a' */, 0x56, 0x00 /* (to 0x01C7 state 207) */, 0x6F /* 'o' */, 0x5C, 0x00 /* (to 0x01D0 state 215) */, 0x08, /* fail */ /* pos 0178: 149 */ 0xEE /* 'n' -> */, /* pos 0179: 150 */ 0xE7 /* 'g' -> */, /* pos 017a: 151 */ 0xF4 /* 't' -> */, /* pos 017b: 152 */ 0xE8 /* 'h' -> */, /* pos 017c: 153 */ 0xBA /* ':' -> */, /* pos 017d: 154 */ 0x00, 0x18 /* - terminal marker 24 - */, /* pos 017f: 155 */ 0xF9 /* 'y' -> */, /* pos 0180: 156 */ 0xF0 /* 'p' -> */, /* pos 0181: 157 */ 0xE5 /* 'e' -> */, /* pos 0182: 158 */ 0xBA /* ':' -> */, /* pos 0183: 159 */ 0x00, 0x19 /* - terminal marker 25 - */, /* pos 0185: 160 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x018C state 161) */, 0x65 /* 'e' */, 0x3C, 0x02 /* (to 0x03C4 state 580) */, 0x08, /* fail */ /* pos 018c: 161 */ 0xF4 /* 't' -> */, /* pos 018d: 162 */ 0xE5 /* 'e' -> */, /* pos 018e: 163 */ 0xBA /* ':' -> */, /* pos 018f: 164 */ 0x00, 0x1A /* - terminal marker 26 - */, /* pos 0191: 165 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x0198 state 166) */, 0x65 /* 'e' */, 0xB6, 0x00 /* (to 0x024A state 304) */, 0x08, /* fail */ /* pos 0198: 166 */ 0xEE /* 'n' -> */, /* pos 0199: 167 */ 0xE7 /* 'g' -> */, /* pos 019a: 168 */ 0xE5 /* 'e' -> */, /* pos 019b: 169 */ 0xBA /* ':' -> */, /* pos 019c: 170 */ 0x00, 0x1B /* - terminal marker 27 - */, /* pos 019e: 171 */ 0xE1 /* 'a' -> */, /* pos 019f: 172 */ 0xEE /* 'n' -> */, /* pos 01a0: 173 */ 0xE7 /* 'g' -> */, /* pos 01a1: 174 */ 0xE5 /* 'e' -> */, /* pos 01a2: 175 */ 0xF3 /* 's' -> */, /* pos 01a3: 176 */ 0xBA /* ':' -> */, /* pos 01a4: 177 */ 0x00, 0x1F /* - terminal marker 31 - */, /* pos 01a6: 178 */ 0xE5 /* 'e' -> */, /* pos 01a7: 179 */ 0xBA /* ':' -> */, /* pos 01a8: 180 */ 0x00, 0x20 /* - terminal marker 32 - */, /* pos 01aa: 181 */ 0xEC /* 'l' -> */, /* pos 01ab: 182 */ 0xEF /* 'o' -> */, /* pos 01ac: 183 */ 0xF7 /* 'w' -> */, /* pos 01ad: 184 */ 0xBA /* ':' -> */, /* pos 01ae: 185 */ 0x00, 0x21 /* - terminal marker 33 - */, /* pos 01b0: 186 */ 0xE9 /* 'i' -> */, /* pos 01b1: 187 */ 0xF3 /* 's' -> */, /* pos 01b2: 188 */ 0xF0 /* 'p' -> */, /* pos 01b3: 189 */ 0xEF /* 'o' -> */, /* pos 01b4: 190 */ 0xF3 /* 's' -> */, /* pos 01b5: 191 */ 0xE9 /* 'i' -> */, /* pos 01b6: 192 */ 0xF4 /* 't' -> */, /* pos 01b7: 193 */ 0xE9 /* 'i' -> */, /* pos 01b8: 194 */ 0xEF /* 'o' -> */, /* pos 01b9: 195 */ 0xEE /* 'n' -> */, /* pos 01ba: 196 */ 0xBA /* ':' -> */, /* pos 01bb: 197 */ 0x00, 0x22 /* - terminal marker 34 - */, /* pos 01bd: 198 */ 0xEE /* 'n' -> */, /* pos 01be: 199 */ 0xE3 /* 'c' -> */, /* pos 01bf: 200 */ 0xEF /* 'o' -> */, /* pos 01c0: 201 */ 0xE4 /* 'd' -> */, /* pos 01c1: 202 */ 0xE9 /* 'i' -> */, /* pos 01c2: 203 */ 0xEE /* 'n' -> */, /* pos 01c3: 204 */ 0xE7 /* 'g' -> */, /* pos 01c4: 205 */ 0xBA /* ':' -> */, /* pos 01c5: 206 */ 0x00, 0x23 /* - terminal marker 35 - */, /* pos 01c7: 207 */ 0xEE /* 'n' -> */, /* pos 01c8: 208 */ 0xE7 /* 'g' -> */, /* pos 01c9: 209 */ 0xF5 /* 'u' -> */, /* pos 01ca: 210 */ 0xE1 /* 'a' -> */, /* pos 01cb: 211 */ 0xE7 /* 'g' -> */, /* pos 01cc: 212 */ 0xE5 /* 'e' -> */, /* pos 01cd: 213 */ 0xBA /* ':' -> */, /* pos 01ce: 214 */ 0x00, 0x24 /* - terminal marker 36 - */, /* pos 01d0: 215 */ 0xE3 /* 'c' -> */, /* pos 01d1: 216 */ 0xE1 /* 'a' -> */, /* pos 01d2: 217 */ 0xF4 /* 't' -> */, /* pos 01d3: 218 */ 0xE9 /* 'i' -> */, /* pos 01d4: 219 */ 0xEF /* 'o' -> */, /* pos 01d5: 220 */ 0xEE /* 'n' -> */, /* pos 01d6: 221 */ 0xBA /* ':' -> */, /* pos 01d7: 222 */ 0x00, 0x25 /* - terminal marker 37 - */, /* pos 01d9: 223 */ 0xE1 /* 'a' -> */, /* pos 01da: 224 */ 0xEE /* 'n' -> */, /* pos 01db: 225 */ 0xE7 /* 'g' -> */, /* pos 01dc: 226 */ 0xE5 /* 'e' -> */, /* pos 01dd: 227 */ 0xBA /* ':' -> */, /* pos 01de: 228 */ 0x00, 0x26 /* - terminal marker 38 - */, /* pos 01e0: 229 */ 0x74 /* 't' */, 0x07, 0x00 /* (to 0x01E7 state 230) */, 0x78 /* 'x' */, 0x09, 0x00 /* (to 0x01EC state 234) */, 0x08, /* fail */ /* pos 01e7: 230 */ 0xE1 /* 'a' -> */, /* pos 01e8: 231 */ 0xE7 /* 'g' -> */, /* pos 01e9: 232 */ 0xBA /* ':' -> */, /* pos 01ea: 233 */ 0x00, 0x27 /* - terminal marker 39 - */, /* pos 01ec: 234 */ 0xF0 /* 'p' -> */, /* pos 01ed: 235 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x01F4 state 236) */, 0x69 /* 'i' */, 0x09, 0x00 /* (to 0x01F9 state 240) */, 0x08, /* fail */ /* pos 01f4: 236 */ 0xE3 /* 'c' -> */, /* pos 01f5: 237 */ 0xF4 /* 't' -> */, /* pos 01f6: 238 */ 0xBA /* ':' -> */, /* pos 01f7: 239 */ 0x00, 0x28 /* - terminal marker 40 - */, /* pos 01f9: 240 */ 0xF2 /* 'r' -> */, /* pos 01fa: 241 */ 0xE5 /* 'e' -> */, /* pos 01fb: 242 */ 0xF3 /* 's' -> */, /* pos 01fc: 243 */ 0xBA /* ':' -> */, /* pos 01fd: 244 */ 0x00, 0x29 /* - terminal marker 41 - */, /* pos 01ff: 245 */ 0xF2 /* 'r' -> */, /* pos 0200: 246 */ 0xEF /* 'o' -> */, /* pos 0201: 247 */ 0xED /* 'm' -> */, /* pos 0202: 248 */ 0xBA /* ':' -> */, /* pos 0203: 249 */ 0x00, 0x2A /* - terminal marker 42 - */, /* pos 0205: 250 */ 0xF4 /* 't' -> */, /* pos 0206: 251 */ 0xE3 /* 'c' -> */, /* pos 0207: 252 */ 0xE8 /* 'h' -> */, /* pos 0208: 253 */ 0xBA /* ':' -> */, /* pos 0209: 254 */ 0x00, 0x2B /* - terminal marker 43 - */, /* pos 020b: 255 */ 0xE1 /* 'a' -> */, /* pos 020c: 256 */ 0xEE /* 'n' -> */, /* pos 020d: 257 */ 0xE7 /* 'g' -> */, /* pos 020e: 258 */ 0xE5 /* 'e' -> */, /* pos 020f: 259 */ 0xBA /* ':' -> */, /* pos 0210: 260 */ 0x00, 0x2C /* - terminal marker 44 - */, /* pos 0212: 261 */ 0xEE /* 'n' -> */, /* pos 0213: 262 */ 0xED /* 'm' -> */, /* pos 0214: 263 */ 0xEF /* 'o' -> */, /* pos 0215: 264 */ 0xE4 /* 'd' -> */, /* pos 0216: 265 */ 0xE9 /* 'i' -> */, /* pos 0217: 266 */ 0xE6 /* 'f' -> */, /* pos 0218: 267 */ 0xE9 /* 'i' -> */, /* pos 0219: 268 */ 0xE5 /* 'e' -> */, /* pos 021a: 269 */ 0xE4 /* 'd' -> */, /* pos 021b: 270 */ 0xAD /* '-' -> */, /* pos 021c: 271 */ 0xF3 /* 's' -> */, /* pos 021d: 272 */ 0xE9 /* 'i' -> */, /* pos 021e: 273 */ 0xEE /* 'n' -> */, /* pos 021f: 274 */ 0xE3 /* 'c' -> */, /* pos 0220: 275 */ 0xE5 /* 'e' -> */, /* pos 0221: 276 */ 0xBA /* ':' -> */, /* pos 0222: 277 */ 0x00, 0x2D /* - terminal marker 45 - */, /* pos 0224: 278 */ 0x61 /* 'a' */, 0x0A, 0x00 /* (to 0x022E state 279) */, 0x69 /* 'i' */, 0x15, 0x00 /* (to 0x023C state 292) */, 0x6F /* 'o' */, 0x17, 0x00 /* (to 0x0241 state 296) */, 0x08, /* fail */ /* pos 022e: 279 */ 0xF3 /* 's' -> */, /* pos 022f: 280 */ 0xF4 /* 't' -> */, /* pos 0230: 281 */ 0xAD /* '-' -> */, /* pos 0231: 282 */ 0xED /* 'm' -> */, /* pos 0232: 283 */ 0xEF /* 'o' -> */, /* pos 0233: 284 */ 0xE4 /* 'd' -> */, /* pos 0234: 285 */ 0xE9 /* 'i' -> */, /* pos 0235: 286 */ 0xE6 /* 'f' -> */, /* pos 0236: 287 */ 0xE9 /* 'i' -> */, /* pos 0237: 288 */ 0xE5 /* 'e' -> */, /* pos 0238: 289 */ 0xE4 /* 'd' -> */, /* pos 0239: 290 */ 0xBA /* ':' -> */, /* pos 023a: 291 */ 0x00, 0x2E /* - terminal marker 46 - */, /* pos 023c: 292 */ 0xEE /* 'n' -> */, /* pos 023d: 293 */ 0xEB /* 'k' -> */, /* pos 023e: 294 */ 0xBA /* ':' -> */, /* pos 023f: 295 */ 0x00, 0x2F /* - terminal marker 47 - */, /* pos 0241: 296 */ 0xE3 /* 'c' -> */, /* pos 0242: 297 */ 0xE1 /* 'a' -> */, /* pos 0243: 298 */ 0xF4 /* 't' -> */, /* pos 0244: 299 */ 0xE9 /* 'i' -> */, /* pos 0245: 300 */ 0xEF /* 'o' -> */, /* pos 0246: 301 */ 0xEE /* 'n' -> */, /* pos 0247: 302 */ 0xBA /* ':' -> */, /* pos 0248: 303 */ 0x00, 0x30 /* - terminal marker 48 - */, /* pos 024a: 304 */ 0x66 /* 'f' */, 0x0A, 0x00 /* (to 0x0254 state 305) */, 0x74 /* 't' */, 0x14, 0x00 /* (to 0x0261 state 311) */, 0x70 /* 'p' */, 0x88, 0x01 /* (to 0x03D8 state 596) */, 0x08, /* fail */ /* pos 0254: 305 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x025B state 306) */, 0x65 /* 'e' */, 0xCA, 0x00 /* (to 0x0321 state 448) */, 0x08, /* fail */ /* pos 025b: 306 */ 0xE5 /* 'e' -> */, /* pos 025c: 307 */ 0xF3 /* 's' -> */, /* pos 025d: 308 */ 0xE8 /* 'h' -> */, /* pos 025e: 309 */ 0xBA /* ':' -> */, /* pos 025f: 310 */ 0x00, 0x31 /* - terminal marker 49 - */, /* pos 0261: 311 */ 0xF2 /* 'r' -> */, /* pos 0262: 312 */ 0xF9 /* 'y' -> */, /* pos 0263: 313 */ 0xAD /* '-' -> */, /* pos 0264: 314 */ 0xE1 /* 'a' -> */, /* pos 0265: 315 */ 0xE6 /* 'f' -> */, /* pos 0266: 316 */ 0xF4 /* 't' -> */, /* pos 0267: 317 */ 0xE5 /* 'e' -> */, /* pos 0268: 318 */ 0xF2 /* 'r' -> */, /* pos 0269: 319 */ 0xBA /* ':' -> */, /* pos 026a: 320 */ 0x00, 0x32 /* - terminal marker 50 - */, /* pos 026c: 321 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x0273 state 322) */, 0x74 /* 't' */, 0x06, 0x01 /* (to 0x0375 state 514) */, 0x08, /* fail */ /* pos 0273: 322 */ 0x72 /* 'r' */, 0x0A, 0x00 /* (to 0x027D state 323) */, 0x74 /* 't' */, 0x0D, 0x00 /* (to 0x0283 state 328) */, 0x63 /* 'c' */, 0x6B, 0x01 /* (to 0x03E4 state 607) */, 0x08, /* fail */ /* pos 027d: 323 */ 0xF6 /* 'v' -> */, /* pos 027e: 324 */ 0xE5 /* 'e' -> */, /* pos 027f: 325 */ 0xF2 /* 'r' -> */, /* pos 0280: 326 */ 0xBA /* ':' -> */, /* pos 0281: 327 */ 0x00, 0x33 /* - terminal marker 51 - */, /* pos 0283: 328 */ 0xAD /* '-' -> */, /* pos 0284: 329 */ 0xE3 /* 'c' -> */, /* pos 0285: 330 */ 0xEF /* 'o' -> */, /* pos 0286: 331 */ 0xEF /* 'o' -> */, /* pos 0287: 332 */ 0xEB /* 'k' -> */, /* pos 0288: 333 */ 0xE9 /* 'i' -> */, /* pos 0289: 334 */ 0xE5 /* 'e' -> */, /* pos 028a: 335 */ 0xBA /* ':' -> */, /* pos 028b: 336 */ 0x00, 0x34 /* - terminal marker 52 - */, /* pos 028d: 337 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x0294 state 338) */, 0x65 /* 'e' */, 0x45, 0x01 /* (to 0x03D5 state 594) */, 0x08, /* fail */ /* pos 0294: 338 */ 0xE1 /* 'a' -> */, /* pos 0295: 339 */ 0xEE /* 'n' -> */, /* pos 0296: 340 */ 0xF3 /* 's' -> */, /* pos 0297: 341 */ 0xE6 /* 'f' -> */, /* pos 0298: 342 */ 0xE5 /* 'e' -> */, /* pos 0299: 343 */ 0xF2 /* 'r' -> */, /* pos 029a: 344 */ 0xAD /* '-' -> */, /* pos 029b: 345 */ 0xE5 /* 'e' -> */, /* pos 029c: 346 */ 0xEE /* 'n' -> */, /* pos 029d: 347 */ 0xE3 /* 'c' -> */, /* pos 029e: 348 */ 0xEF /* 'o' -> */, /* pos 029f: 349 */ 0xE4 /* 'd' -> */, /* pos 02a0: 350 */ 0xE9 /* 'i' -> */, /* pos 02a1: 351 */ 0xEE /* 'n' -> */, /* pos 02a2: 352 */ 0xE7 /* 'g' -> */, /* pos 02a3: 353 */ 0xBA /* ':' -> */, /* pos 02a4: 354 */ 0x00, 0x35 /* - terminal marker 53 - */, /* pos 02a6: 355 */ 0xE9 /* 'i' -> */, /* pos 02a7: 356 */ 0xAD /* '-' -> */, /* pos 02a8: 357 */ 0xE1 /* 'a' -> */, /* pos 02a9: 358 */ 0xF2 /* 'r' -> */, /* pos 02aa: 359 */ 0xE7 /* 'g' -> */, /* pos 02ab: 360 */ 0xF3 /* 's' -> */, /* pos 02ac: 361 */ 0x00, 0x36 /* - terminal marker 54 - */, /* pos 02ae: 362 */ 0xA0 /* ' ' -> */, /* pos 02af: 363 */ 0x00, 0x37 /* - terminal marker 55 - */, /* pos 02b1: 364 */ 0xAD /* '-' -> */, /* pos 02b2: 365 */ 0x66 /* 'f' */, 0x0A, 0x00 /* (to 0x02BC state 366) */, 0x61 /* 'a' */, 0x1D, 0x00 /* (to 0x02D2 state 385) */, 0x72 /* 'r' */, 0x14, 0x01 /* (to 0x03CC state 586) */, 0x08, /* fail */ /* pos 02bc: 366 */ 0xEF /* 'o' -> */, /* pos 02bd: 367 */ 0xF2 /* 'r' -> */, /* pos 02be: 368 */ 0xF7 /* 'w' -> */, /* pos 02bf: 369 */ 0xE1 /* 'a' -> */, /* pos 02c0: 370 */ 0xF2 /* 'r' -> */, /* pos 02c1: 371 */ 0xE4 /* 'd' -> */, /* pos 02c2: 372 */ 0xE5 /* 'e' -> */, /* pos 02c3: 373 */ 0xE4 /* 'd' -> */, /* pos 02c4: 374 */ 0xAD /* '-' -> */, /* pos 02c5: 375 */ 0xE6 /* 'f' -> */, /* pos 02c6: 376 */ 0xEF /* 'o' -> */, /* pos 02c7: 377 */ 0xF2 /* 'r' -> */, /* pos 02c8: 378 */ 0xBA /* ':' -> */, /* pos 02c9: 379 */ 0x00, 0x38 /* - terminal marker 56 - */, /* pos 02cb: 380 */ 0x00, 0x39 /* - terminal marker 57 - */, /* pos 02cd: 381 */ 0xE1 /* 'a' -> */, /* pos 02ce: 382 */ 0xE4 /* 'd' -> */, /* pos 02cf: 383 */ 0xA0 /* ' ' -> */, /* pos 02d0: 384 */ 0x00, 0x3A /* - terminal marker 58 - */, /* pos 02d2: 385 */ 0x75 /* 'u' */, 0x07, 0x00 /* (to 0x02D9 state 386) */, 0x6D /* 'm' */, 0x0F, 0x00 /* (to 0x02E4 state 396) */, 0x08, /* fail */ /* pos 02d9: 386 */ 0xF4 /* 't' -> */, /* pos 02da: 387 */ 0xE8 /* 'h' -> */, /* pos 02db: 388 */ 0xAD /* '-' -> */, /* pos 02dc: 389 */ 0xF4 /* 't' -> */, /* pos 02dd: 390 */ 0xEF /* 'o' -> */, /* pos 02de: 391 */ 0xEB /* 'k' -> */, /* pos 02df: 392 */ 0xE5 /* 'e' -> */, /* pos 02e0: 393 */ 0xEE /* 'n' -> */, /* pos 02e1: 394 */ 0xBA /* ':' -> */, /* pos 02e2: 395 */ 0x00, 0x3B /* - terminal marker 59 - */, /* pos 02e4: 396 */ 0xFA /* 'z' -> */, /* pos 02e5: 397 */ 0xEE /* 'n' -> */, /* pos 02e6: 398 */ 0xAD /* '-' -> */, /* pos 02e7: 399 */ 0xE4 /* 'd' -> */, /* pos 02e8: 400 */ 0xF3 /* 's' -> */, /* pos 02e9: 401 */ 0xF3 /* 's' -> */, /* pos 02ea: 402 */ 0xAD /* '-' -> */, /* pos 02eb: 403 */ 0xF3 /* 's' -> */, /* pos 02ec: 404 */ 0xE9 /* 'i' -> */, /* pos 02ed: 405 */ 0xE7 /* 'g' -> */, /* pos 02ee: 406 */ 0xEE /* 'n' -> */, /* pos 02ef: 407 */ 0xE1 /* 'a' -> */, /* pos 02f0: 408 */ 0xF4 /* 't' -> */, /* pos 02f1: 409 */ 0xF5 /* 'u' -> */, /* pos 02f2: 410 */ 0xF2 /* 'r' -> */, /* pos 02f3: 411 */ 0xE5 /* 'e' -> */, /* pos 02f4: 412 */ 0xBA /* ':' -> */, /* pos 02f5: 413 */ 0x00, 0x3C /* - terminal marker 60 - */, /* pos 02f7: 414 */ 0xF4 /* 't' -> */, /* pos 02f8: 415 */ 0xE9 /* 'i' -> */, /* pos 02f9: 416 */ 0xEF /* 'o' -> */, /* pos 02fa: 417 */ 0xEE /* 'n' -> */, /* pos 02fb: 418 */ 0xF3 /* 's' -> */, /* pos 02fc: 419 */ 0xA0 /* ' ' -> */, /* pos 02fd: 420 */ 0x00, 0x02 /* - terminal marker 2 - */, /* pos 02ff: 421 */ 0xF3 /* 's' -> */, /* pos 0300: 422 */ 0xAD /* '-' -> */, /* pos 0301: 423 */ 0xE3 /* 'c' -> */, /* pos 0302: 424 */ 0xEF /* 'o' -> */, /* pos 0303: 425 */ 0xEE /* 'n' -> */, /* pos 0304: 426 */ 0xF4 /* 't' -> */, /* pos 0305: 427 */ 0xF2 /* 'r' -> */, /* pos 0306: 428 */ 0xEF /* 'o' -> */, /* pos 0307: 429 */ 0xEC /* 'l' -> */, /* pos 0308: 430 */ 0xAD /* '-' -> */, /* pos 0309: 431 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x0310 state 432) */, 0x61 /* 'a' */, 0x24, 0x00 /* (to 0x0330 state 461) */, 0x08, /* fail */ /* pos 0310: 432 */ 0xE5 /* 'e' -> */, /* pos 0311: 433 */ 0xF1 /* 'q' -> */, /* pos 0312: 434 */ 0xF5 /* 'u' -> */, /* pos 0313: 435 */ 0xE5 /* 'e' -> */, /* pos 0314: 436 */ 0xF3 /* 's' -> */, /* pos 0315: 437 */ 0xF4 /* 't' -> */, /* pos 0316: 438 */ 0xAD /* '-' -> */, /* pos 0317: 439 */ 0xE8 /* 'h' -> */, /* pos 0318: 440 */ 0xE5 /* 'e' -> */, /* pos 0319: 441 */ 0xE1 /* 'a' -> */, /* pos 031a: 442 */ 0xE4 /* 'd' -> */, /* pos 031b: 443 */ 0xE5 /* 'e' -> */, /* pos 031c: 444 */ 0xF2 /* 'r' -> */, /* pos 031d: 445 */ 0xF3 /* 's' -> */, /* pos 031e: 446 */ 0xBA /* ':' -> */, /* pos 031f: 447 */ 0x00, 0x0A /* - terminal marker 10 - */, /* pos 0321: 448 */ 0xF2 /* 'r' -> */, /* pos 0322: 449 */ 0xE5 /* 'e' -> */, /* pos 0323: 450 */ 0xF2 /* 'r' -> */, /* pos 0324: 451 */ 0xBA /* ':' -> */, /* pos 0325: 452 */ 0x00, 0x17 /* - terminal marker 23 - */, /* pos 0327: 453 */ 0xE8 /* 'h' -> */, /* pos 0328: 454 */ 0xE1 /* 'a' -> */, /* pos 0329: 455 */ 0xF2 /* 'r' -> */, /* pos 032a: 456 */ 0xF3 /* 's' -> */, /* pos 032b: 457 */ 0xE5 /* 'e' -> */, /* pos 032c: 458 */ 0xF4 /* 't' -> */, /* pos 032d: 459 */ 0xBA /* ':' -> */, /* pos 032e: 460 */ 0x00, 0x18 /* - terminal marker 24 - */, /* pos 0330: 461 */ 0xEC /* 'l' -> */, /* pos 0331: 462 */ 0xEC /* 'l' -> */, /* pos 0332: 463 */ 0xEF /* 'o' -> */, /* pos 0333: 464 */ 0xF7 /* 'w' -> */, /* pos 0334: 465 */ 0xAD /* '-' -> */, /* pos 0335: 466 */ 0xEF /* 'o' -> */, /* pos 0336: 467 */ 0xF2 /* 'r' -> */, /* pos 0337: 468 */ 0xE9 /* 'i' -> */, /* pos 0338: 469 */ 0xE7 /* 'g' -> */, /* pos 0339: 470 */ 0xE9 /* 'i' -> */, /* pos 033a: 471 */ 0xEE /* 'n' -> */, /* pos 033b: 472 */ 0xBA /* ':' -> */, /* pos 033c: 473 */ 0x00, 0x1A /* - terminal marker 26 - */, /* pos 033e: 474 */ 0xE1 /* 'a' -> */, /* pos 033f: 475 */ 0xF8 /* 'x' -> */, /* pos 0340: 476 */ 0xAD /* '-' -> */, /* pos 0341: 477 */ 0xE6 /* 'f' -> */, /* pos 0342: 478 */ 0xEF /* 'o' -> */, /* pos 0343: 479 */ 0xF2 /* 'r' -> */, /* pos 0344: 480 */ 0xF7 /* 'w' -> */, /* pos 0345: 481 */ 0xE1 /* 'a' -> */, /* pos 0346: 482 */ 0xF2 /* 'r' -> */, /* pos 0347: 483 */ 0xE4 /* 'd' -> */, /* pos 0348: 484 */ 0xF3 /* 's' -> */, /* pos 0349: 485 */ 0xBA /* ':' -> */, /* pos 034a: 486 */ 0x00, 0x2C /* - terminal marker 44 - */, /* pos 034c: 487 */ 0xF8 /* 'x' -> */, /* pos 034d: 488 */ 0xF9 /* 'y' -> */, /* pos 034e: 489 */ 0x2D /* '-' */, 0x07, 0x00 /* (to 0x0355 state 490) */, 0x20 /* ' ' */, 0x79, 0x00 /* (to 0x03CA state 585) */, 0x08, /* fail */ /* pos 0355: 490 */ 0xE1 /* 'a' -> */, /* pos 0356: 491 */ 0xF5 /* 'u' -> */, /* pos 0357: 492 */ 0xF4 /* 't' -> */, /* pos 0358: 493 */ 0xE8 /* 'h' -> */, /* pos 0359: 494 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x0360 state 495) */, 0x6F /* 'o' */, 0x0E, 0x00 /* (to 0x036A state 504) */, 0x08, /* fail */ /* pos 0360: 495 */ 0xEE /* 'n' -> */, /* pos 0361: 496 */ 0xF4 /* 't' -> */, /* pos 0362: 497 */ 0xE9 /* 'i' -> */, /* pos 0363: 498 */ 0xE3 /* 'c' -> */, /* pos 0364: 499 */ 0xE1 /* 'a' -> */, /* pos 0365: 500 */ 0xF4 /* 't' -> */, /* pos 0366: 501 */ 0xE5 /* 'e' -> */, /* pos 0367: 502 */ 0xBA /* ':' -> */, /* pos 0368: 503 */ 0x00, 0x2D /* - terminal marker 45 - */, /* pos 036a: 504 */ 0xF2 /* 'r' -> */, /* pos 036b: 505 */ 0xE9 /* 'i' -> */, /* pos 036c: 506 */ 0xFA /* 'z' -> */, /* pos 036d: 507 */ 0xE1 /* 'a' -> */, /* pos 036e: 508 */ 0xF4 /* 't' -> */, /* pos 036f: 509 */ 0xE9 /* 'i' -> */, /* pos 0370: 510 */ 0xEF /* 'o' -> */, /* pos 0371: 511 */ 0xEE /* 'n' -> */, /* pos 0372: 512 */ 0xBA /* ':' -> */, /* pos 0373: 513 */ 0x00, 0x2E /* - terminal marker 46 - */, /* pos 0375: 514 */ 0xF2 /* 'r' -> */, /* pos 0376: 515 */ 0xE9 /* 'i' -> */, /* pos 0377: 516 */ 0xE3 /* 'c' -> */, /* pos 0378: 517 */ 0xF4 /* 't' -> */, /* pos 0379: 518 */ 0xAD /* '-' -> */, /* pos 037a: 519 */ 0xF4 /* 't' -> */, /* pos 037b: 520 */ 0xF2 /* 'r' -> */, /* pos 037c: 521 */ 0xE1 /* 'a' -> */, /* pos 037d: 522 */ 0xEE /* 'n' -> */, /* pos 037e: 523 */ 0xF3 /* 's' -> */, /* pos 037f: 524 */ 0xF0 /* 'p' -> */, /* pos 0380: 525 */ 0xEF /* 'o' -> */, /* pos 0381: 526 */ 0xF2 /* 'r' -> */, /* pos 0382: 527 */ 0xF4 /* 't' -> */, /* pos 0383: 528 */ 0xAD /* '-' -> */, /* pos 0384: 529 */ 0xF3 /* 's' -> */, /* pos 0385: 530 */ 0xE5 /* 'e' -> */, /* pos 0386: 531 */ 0xE3 /* 'c' -> */, /* pos 0387: 532 */ 0xF5 /* 'u' -> */, /* pos 0388: 533 */ 0xF2 /* 'r' -> */, /* pos 0389: 534 */ 0xE9 /* 'i' -> */, /* pos 038a: 535 */ 0xF4 /* 't' -> */, /* pos 038b: 536 */ 0xF9 /* 'y' -> */, /* pos 038c: 537 */ 0xBA /* ':' -> */, /* pos 038d: 538 */ 0x00, 0x33 /* - terminal marker 51 - */, /* pos 038f: 539 */ 0xE5 /* 'e' -> */, /* pos 0390: 540 */ 0xF2 /* 'r' -> */, /* pos 0391: 541 */ 0xAD /* '-' -> */, /* pos 0392: 542 */ 0xE1 /* 'a' -> */, /* pos 0393: 543 */ 0xE7 /* 'g' -> */, /* pos 0394: 544 */ 0xE5 /* 'e' -> */, /* pos 0395: 545 */ 0xEE /* 'n' -> */, /* pos 0396: 546 */ 0xF4 /* 't' -> */, /* pos 0397: 547 */ 0xBA /* ':' -> */, /* pos 0398: 548 */ 0x00, 0x35 /* - terminal marker 53 - */, /* pos 039a: 549 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x03A1 state 550) */, 0x69 /* 'i' */, 0x09, 0x00 /* (to 0x03A6 state 554) */, 0x08, /* fail */ /* pos 03a1: 550 */ 0xF2 /* 'r' -> */, /* pos 03a2: 551 */ 0xF9 /* 'y' -> */, /* pos 03a3: 552 */ 0xBA /* ':' -> */, /* pos 03a4: 553 */ 0x00, 0x36 /* - terminal marker 54 - */, /* pos 03a6: 554 */ 0xE1 /* 'a' -> */, /* pos 03a7: 555 */ 0xBA /* ':' -> */, /* pos 03a8: 556 */ 0x00, 0x37 /* - terminal marker 55 - */, /* pos 03aa: 557 */ 0xF7 /* 'w' -> */, /* pos 03ab: 558 */ 0xF7 /* 'w' -> */, /* pos 03ac: 559 */ 0xAD /* '-' -> */, /* pos 03ad: 560 */ 0xE1 /* 'a' -> */, /* pos 03ae: 561 */ 0xF5 /* 'u' -> */, /* pos 03af: 562 */ 0xF4 /* 't' -> */, /* pos 03b0: 563 */ 0xE8 /* 'h' -> */, /* pos 03b1: 564 */ 0xE5 /* 'e' -> */, /* pos 03b2: 565 */ 0xEE /* 'n' -> */, /* pos 03b3: 566 */ 0xF4 /* 't' -> */, /* pos 03b4: 567 */ 0xE9 /* 'i' -> */, /* pos 03b5: 568 */ 0xE3 /* 'c' -> */, /* pos 03b6: 569 */ 0xE1 /* 'a' -> */, /* pos 03b7: 570 */ 0xF4 /* 't' -> */, /* pos 03b8: 571 */ 0xE5 /* 'e' -> */, /* pos 03b9: 572 */ 0xBA /* ':' -> */, /* pos 03ba: 573 */ 0x00, 0x38 /* - terminal marker 56 - */, /* pos 03bc: 574 */ 0xF4 /* 't' -> */, /* pos 03bd: 575 */ 0xE3 /* 'c' -> */, /* pos 03be: 576 */ 0xE8 /* 'h' -> */, /* pos 03bf: 577 */ 0x00, 0x39 /* - terminal marker 57 - */, /* pos 03c1: 578 */ 0xF4 /* 't' -> */, /* pos 03c2: 579 */ 0x00, 0x3A /* - terminal marker 58 - */, /* pos 03c4: 580 */ 0xEC /* 'l' -> */, /* pos 03c5: 581 */ 0xE5 /* 'e' -> */, /* pos 03c6: 582 */ 0xF4 /* 't' -> */, /* pos 03c7: 583 */ 0xE5 /* 'e' -> */, /* pos 03c8: 584 */ 0x00, 0x3B /* - terminal marker 59 - */, /* pos 03ca: 585 */ 0x00, 0x3D /* - terminal marker 61 - */, /* pos 03cc: 586 */ 0xE5 /* 'e' -> */, /* pos 03cd: 587 */ 0xE1 /* 'a' -> */, /* pos 03ce: 588 */ 0xEC /* 'l' -> */, /* pos 03cf: 589 */ 0xAD /* '-' -> */, /* pos 03d0: 590 */ 0xE9 /* 'i' -> */, /* pos 03d1: 591 */ 0xF0 /* 'p' -> */, /* pos 03d2: 592 */ 0xBA /* ':' -> */, /* pos 03d3: 593 */ 0x00, 0x3E /* - terminal marker 62 - */, /* pos 03d5: 594 */ 0xBA /* ':' -> */, /* pos 03d6: 595 */ 0x00, 0x43 /* - terminal marker 67 - */, /* pos 03d8: 596 */ 0xEC /* 'l' -> */, /* pos 03d9: 597 */ 0xE1 /* 'a' -> */, /* pos 03da: 598 */ 0xF9 /* 'y' -> */, /* pos 03db: 599 */ 0xAD /* '-' -> */, /* pos 03dc: 600 */ 0xEE /* 'n' -> */, /* pos 03dd: 601 */ 0xEF /* 'o' -> */, /* pos 03de: 602 */ 0xEE /* 'n' -> */, /* pos 03df: 603 */ 0xE3 /* 'c' -> */, /* pos 03e0: 604 */ 0xE5 /* 'e' -> */, /* pos 03e1: 605 */ 0xBA /* ':' -> */, /* pos 03e2: 606 */ 0x00, 0x44 /* - terminal marker 68 - */, /* pos 03e4: 607 */ 0xAD /* '-' -> */, /* pos 03e5: 608 */ 0xF7 /* 'w' -> */, /* pos 03e6: 609 */ 0xE5 /* 'e' -> */, /* pos 03e7: 610 */ 0xE2 /* 'b' -> */, /* pos 03e8: 611 */ 0xF3 /* 's' -> */, /* pos 03e9: 612 */ 0xEF /* 'o' -> */, /* pos 03ea: 613 */ 0xE3 /* 'c' -> */, /* pos 03eb: 614 */ 0xEB /* 'k' -> */, /* pos 03ec: 615 */ 0xE5 /* 'e' -> */, /* pos 03ed: 616 */ 0xF4 /* 't' -> */, /* pos 03ee: 617 */ 0xAD /* '-' -> */, /* pos 03ef: 618 */ 0x64 /* 'd' */, 0x19, 0x00 /* (to 0x0408 state 619) */, 0x65 /* 'e' */, 0x1D, 0x00 /* (to 0x040F state 625) */, 0x6B /* 'k' */, 0x26, 0x00 /* (to 0x041B state 636) */, 0x70 /* 'p' */, 0x35, 0x00 /* (to 0x042D state 643) */, 0x61 /* 'a' */, 0x3C, 0x00 /* (to 0x0437 state 652) */, 0x6E /* 'n' */, 0x41, 0x00 /* (to 0x043F state 659) */, 0x76 /* 'v' */, 0x47, 0x00 /* (to 0x0448 state 666) */, 0x6F /* 'o' */, 0x4D, 0x00 /* (to 0x0451 state 674) */, 0x08, /* fail */ /* pos 0408: 619 */ 0xF2 /* 'r' -> */, /* pos 0409: 620 */ 0xE1 /* 'a' -> */, /* pos 040a: 621 */ 0xE6 /* 'f' -> */, /* pos 040b: 622 */ 0xF4 /* 't' -> */, /* pos 040c: 623 */ 0xBA /* ':' -> */, /* pos 040d: 624 */ 0x00, 0x06 /* - terminal marker 6 - */, /* pos 040f: 625 */ 0xF8 /* 'x' -> */, /* pos 0410: 626 */ 0xF4 /* 't' -> */, /* pos 0411: 627 */ 0xE5 /* 'e' -> */, /* pos 0412: 628 */ 0xEE /* 'n' -> */, /* pos 0413: 629 */ 0xF3 /* 's' -> */, /* pos 0414: 630 */ 0xE9 /* 'i' -> */, /* pos 0415: 631 */ 0xEF /* 'o' -> */, /* pos 0416: 632 */ 0xEE /* 'n' -> */, /* pos 0417: 633 */ 0xF3 /* 's' -> */, /* pos 0418: 634 */ 0xBA /* ':' -> */, /* pos 0419: 635 */ 0x00, 0x08 /* - terminal marker 8 - */, /* pos 041b: 636 */ 0xE5 /* 'e' -> */, /* pos 041c: 637 */ 0xF9 /* 'y' -> */, /* pos 041d: 638 */ 0x31 /* '1' */, 0x0A, 0x00 /* (to 0x0427 state 639) */, 0x32 /* '2' */, 0x0A, 0x00 /* (to 0x042A state 641) */, 0x3A /* ':' */, 0x23, 0x00 /* (to 0x0446 state 665) */, 0x08, /* fail */ /* pos 0427: 639 */ 0xBA /* ':' -> */, /* pos 0428: 640 */ 0x00, 0x09 /* - terminal marker 9 - */, /* pos 042a: 641 */ 0xBA /* ':' -> */, /* pos 042b: 642 */ 0x00, 0x0A /* - terminal marker 10 - */, /* pos 042d: 643 */ 0xF2 /* 'r' -> */, /* pos 042e: 644 */ 0xEF /* 'o' -> */, /* pos 042f: 645 */ 0xF4 /* 't' -> */, /* pos 0430: 646 */ 0xEF /* 'o' -> */, /* pos 0431: 647 */ 0xE3 /* 'c' -> */, /* pos 0432: 648 */ 0xEF /* 'o' -> */, /* pos 0433: 649 */ 0xEC /* 'l' -> */, /* pos 0434: 650 */ 0xBA /* ':' -> */, /* pos 0435: 651 */ 0x00, 0x0B /* - terminal marker 11 - */, /* pos 0437: 652 */ 0xE3 /* 'c' -> */, /* pos 0438: 653 */ 0xE3 /* 'c' -> */, /* pos 0439: 654 */ 0xE5 /* 'e' -> */, /* pos 043a: 655 */ 0xF0 /* 'p' -> */, /* pos 043b: 656 */ 0xF4 /* 't' -> */, /* pos 043c: 657 */ 0xBA /* ':' -> */, /* pos 043d: 658 */ 0x00, 0x0C /* - terminal marker 12 - */, /* pos 043f: 659 */ 0xEF /* 'o' -> */, /* pos 0440: 660 */ 0xEE /* 'n' -> */, /* pos 0441: 661 */ 0xE3 /* 'c' -> */, /* pos 0442: 662 */ 0xE5 /* 'e' -> */, /* pos 0443: 663 */ 0xBA /* ':' -> */, /* pos 0444: 664 */ 0x00, 0x0D /* - terminal marker 13 - */, /* pos 0446: 665 */ 0x00, 0x1C /* - terminal marker 28 - */, /* pos 0448: 666 */ 0xE5 /* 'e' -> */, /* pos 0449: 667 */ 0xF2 /* 'r' -> */, /* pos 044a: 668 */ 0xF3 /* 's' -> */, /* pos 044b: 669 */ 0xE9 /* 'i' -> */, /* pos 044c: 670 */ 0xEF /* 'o' -> */, /* pos 044d: 671 */ 0xEE /* 'n' -> */, /* pos 044e: 672 */ 0xBA /* ':' -> */, /* pos 044f: 673 */ 0x00, 0x1D /* - terminal marker 29 - */, /* pos 0451: 674 */ 0xF2 /* 'r' -> */, /* pos 0452: 675 */ 0xE9 /* 'i' -> */, /* pos 0453: 676 */ 0xE7 /* 'g' -> */, /* pos 0454: 677 */ 0xE9 /* 'i' -> */, /* pos 0455: 678 */ 0xEE /* 'n' -> */, /* pos 0456: 679 */ 0xBA /* ':' -> */, /* pos 0457: 680 */ 0x00, 0x1E /* - terminal marker 30 - */, /* total size 1113 bytes */ #endif #if !defined(LWS_HTTP_HEADERS_ALL) && defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) && defined(LWS_ROLE_WS) && !defined(LWS_ROLE_H2) /* 0: 0: get */ /* 1: 1: post */ /* 2: 2: options */ /* 3: 3: host: */ /* 4: 4: connection: */ /* 5: 5: upgrade: */ /* 6: 6: origin: */ /* 7: 7: sec-websocket-draft: */ /* 8: 8: */ /* 9: 9: sec-websocket-extensions: */ /* 10: 10: sec-websocket-key1: */ /* 11: 11: sec-websocket-key2: */ /* 12: 12: sec-websocket-protocol: */ /* 13: 13: sec-websocket-accept: */ /* 14: 14: sec-websocket-nonce: */ /* 15: 15: http/1.1 */ /* 16: 17: accept: */ /* 17: 18: access-control-request-headers: */ /* 18: 19: if-modified-since: */ /* 19: 20: if-none-match: */ /* 20: 21: accept-encoding: */ /* 21: 22: accept-language: */ /* 22: 23: pragma: */ /* 23: 24: cache-control: */ /* 24: 25: authorization: */ /* 25: 26: cookie: */ /* 26: 27: content-length: */ /* 27: 28: content-type: */ /* 28: 29: date: */ /* 29: 30: range: */ /* 30: 31: referer: */ /* 31: 32: sec-websocket-key: */ /* 32: 33: sec-websocket-version: */ /* 33: 34: sec-websocket-origin: */ /* 34: 40: accept-charset: */ /* 35: 41: accept-ranges: */ /* 36: 42: access-control-allow-origin: */ /* 37: 43: age: */ /* 38: 44: allow: */ /* 39: 45: content-disposition: */ /* 40: 46: content-encoding: */ /* 41: 47: content-language: */ /* 42: 48: content-location: */ /* 43: 49: content-range: */ /* 44: 50: etag: */ /* 45: 51: expect: */ /* 46: 52: expires: */ /* 47: 53: from: */ /* 48: 54: if-match: */ /* 49: 55: if-range: */ /* 50: 56: if-unmodified-since: */ /* 51: 57: last-modified: */ /* 52: 58: link: */ /* 53: 59: location: */ /* 54: 60: max-forwards: */ /* 55: 61: proxy-authenticate: */ /* 56: 62: proxy-authorization: */ /* 57: 63: refresh: */ /* 58: 64: retry-after: */ /* 59: 65: server: */ /* 60: 66: set-cookie: */ /* 61: 67: strict-transport-security: */ /* 62: 68: transfer-encoding: */ /* 63: 69: user-agent: */ /* 64: 70: vary: */ /* 65: 71: via: */ /* 66: 72: www-authenticate: */ /* 67: 73: patch */ /* 68: 74: put */ /* 69: 75: delete */ /* 70: 76: uri-args */ /* 71: 77: proxy */ /* 72: 78: x-real-ip: */ /* 73: 79: http/1.0 */ /* 74: 80: x-forwarded-for: */ /* 75: 81: connect */ /* 76: 82: head */ /* 77: 83: te: */ /* 78: 84: replay-nonce: */ /* 79: 86: x-auth-token: */ /* 80: 87: x-amzn-dss-signature: */ /* pos 0000: 0 */ 0x67 /* 'g' */, 0x3D, 0x00 /* (to 0x003D state 1) */, 0x70 /* 'p' */, 0x3F, 0x00 /* (to 0x0042 state 5) */, 0x68 /* 'h' */, 0x4E, 0x00 /* (to 0x0054 state 10) */, 0x63 /* 'c' */, 0x5A, 0x00 /* (to 0x0063 state 15) */, 0x75 /* 'u' */, 0x7B, 0x00 /* (to 0x0087 state 26) */, 0x6F /* 'o' */, 0x8A, 0x00 /* (to 0x0099 state 34) */, 0x0D /* '.' */, 0x95, 0x00 /* (to 0x00A7 state 41) */, 0x61 /* 'a' */, 0xA4, 0x00 /* (to 0x00B9 state 51) */, 0x69 /* 'i' */, 0xC1, 0x00 /* (to 0x00D9 state 58) */, 0x64 /* 'd' */, 0x6A, 0x01 /* (to 0x0185 state 160) */, 0x72 /* 'r' */, 0x73, 0x01 /* (to 0x0191 state 165) */, 0x65 /* 'e' */, 0xBF, 0x01 /* (to 0x01E0 state 229) */, 0x66 /* 'f' */, 0xDB, 0x01 /* (to 0x01FF state 245) */, 0x6C /* 'l' */, 0xFD, 0x01 /* (to 0x0224 state 278) */, 0x73 /* 's' */, 0x42, 0x02 /* (to 0x026C state 321) */, 0x74 /* 't' */, 0x60, 0x02 /* (to 0x028D state 337) */, 0x78 /* 'x' */, 0x81, 0x02 /* (to 0x02B1 state 364) */, 0x6D /* 'm' */, 0x0B, 0x03 /* (to 0x033E state 474) */, 0x76 /* 'v' */, 0x64, 0x03 /* (to 0x039A state 549) */, 0x77 /* 'w' */, 0x71, 0x03 /* (to 0x03AA state 557) */, 0x08, /* fail */ /* pos 003d: 1 */ 0xE5 /* 'e' -> */, /* pos 003e: 2 */ 0xF4 /* 't' -> */, /* pos 003f: 3 */ 0xA0 /* ' ' -> */, /* pos 0040: 4 */ 0x00, 0x00 /* - terminal marker 0 - */, /* pos 0042: 5 */ 0x6F /* 'o' */, 0x0D, 0x00 /* (to 0x004F state 6) */, 0x72 /* 'r' */, 0xE6, 0x00 /* (to 0x012B state 106) */, 0x61 /* 'a' */, 0x74, 0x03 /* (to 0x03BC state 574) */, 0x75 /* 'u' */, 0x76, 0x03 /* (to 0x03C1 state 578) */, 0x08, /* fail */ /* pos 004f: 6 */ 0xF3 /* 's' -> */, /* pos 0050: 7 */ 0xF4 /* 't' -> */, /* pos 0051: 8 */ 0xA0 /* ' ' -> */, /* pos 0052: 9 */ 0x00, 0x01 /* - terminal marker 1 - */, /* pos 0054: 10 */ 0x6F /* 'o' */, 0x0A, 0x00 /* (to 0x005E state 11) */, 0x74 /* 't' */, 0x53, 0x00 /* (to 0x00AA state 43) */, 0x65 /* 'e' */, 0x73, 0x02 /* (to 0x02CD state 381) */, 0x08, /* fail */ /* pos 005e: 11 */ 0xF3 /* 's' -> */, /* pos 005f: 12 */ 0xF4 /* 't' -> */, /* pos 0060: 13 */ 0xBA /* ':' -> */, /* pos 0061: 14 */ 0x00, 0x03 /* - terminal marker 3 - */, /* pos 0063: 15 */ 0x6F /* 'o' */, 0x07, 0x00 /* (to 0x006A state 16) */, 0x61 /* 'a' */, 0xD2, 0x00 /* (to 0x0138 state 112) */, 0x08, /* fail */ /* pos 006a: 16 */ 0x6E /* 'n' */, 0x07, 0x00 /* (to 0x0071 state 17) */, 0x6F /* 'o' */, 0xE7, 0x00 /* (to 0x0154 state 138) */, 0x08, /* fail */ /* pos 0071: 17 */ 0x6E /* 'n' */, 0x07, 0x00 /* (to 0x0078 state 18) */, 0x74 /* 't' */, 0xE6, 0x00 /* (to 0x015A state 143) */, 0x08, /* fail */ /* pos 0078: 18 */ 0xE5 /* 'e' -> */, /* pos 0079: 19 */ 0xE3 /* 'c' -> */, /* pos 007a: 20 */ 0xF4 /* 't' -> */, /* pos 007b: 21 */ 0x69 /* 'i' */, 0x07, 0x00 /* (to 0x0082 state 22) */, 0x20 /* ' ' */, 0x4D, 0x02 /* (to 0x02CB state 380) */, 0x08, /* fail */ /* pos 0082: 22 */ 0xEF /* 'o' -> */, /* pos 0083: 23 */ 0xEE /* 'n' -> */, /* pos 0084: 24 */ 0xBA /* ':' -> */, /* pos 0085: 25 */ 0x00, 0x04 /* - terminal marker 4 - */, /* pos 0087: 26 */ 0x70 /* 'p' */, 0x0A, 0x00 /* (to 0x0091 state 27) */, 0x72 /* 'r' */, 0x1C, 0x02 /* (to 0x02A6 state 355) */, 0x73 /* 's' */, 0x02, 0x03 /* (to 0x038F state 539) */, 0x08, /* fail */ /* pos 0091: 27 */ 0xE7 /* 'g' -> */, /* pos 0092: 28 */ 0xF2 /* 'r' -> */, /* pos 0093: 29 */ 0xE1 /* 'a' -> */, /* pos 0094: 30 */ 0xE4 /* 'd' -> */, /* pos 0095: 31 */ 0xE5 /* 'e' -> */, /* pos 0096: 32 */ 0xBA /* ':' -> */, /* pos 0097: 33 */ 0x00, 0x05 /* - terminal marker 5 - */, /* pos 0099: 34 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x00A0 state 35) */, 0x70 /* 'p' */, 0x5B, 0x02 /* (to 0x02F7 state 414) */, 0x08, /* fail */ /* pos 00a0: 35 */ 0xE9 /* 'i' -> */, /* pos 00a1: 36 */ 0xE7 /* 'g' -> */, /* pos 00a2: 37 */ 0xE9 /* 'i' -> */, /* pos 00a3: 38 */ 0xEE /* 'n' -> */, /* pos 00a4: 39 */ 0xBA /* ':' -> */, /* pos 00a5: 40 */ 0x00, 0x06 /* - terminal marker 6 - */, /* pos 00a7: 41 */ 0x8A /* '.' -> */, /* pos 00a8: 42 */ 0x00, 0x08 /* - terminal marker 8 - */, /* pos 00aa: 43 */ 0xF4 /* 't' -> */, /* pos 00ab: 44 */ 0xF0 /* 'p' -> */, /* pos 00ac: 45 */ 0xAF /* '/' -> */, /* pos 00ad: 46 */ 0xB1 /* '1' -> */, /* pos 00ae: 47 */ 0xAE /* '.' -> */, /* pos 00af: 48 */ 0x31 /* '1' */, 0x07, 0x00 /* (to 0x00B6 state 49) */, 0x30 /* '0' */, 0xFC, 0x01 /* (to 0x02AE state 362) */, 0x08, /* fail */ /* pos 00b6: 49 */ 0xA0 /* ' ' -> */, /* pos 00b7: 50 */ 0x00, 0x0F /* - terminal marker 15 - */, /* pos 00b9: 51 */ 0x63 /* 'c' */, 0x0D, 0x00 /* (to 0x00C6 state 52) */, 0x75 /* 'u' */, 0x8A, 0x00 /* (to 0x0146 state 125) */, 0x67 /* 'g' */, 0xE7, 0x00 /* (to 0x01A6 state 178) */, 0x6C /* 'l' */, 0xE8, 0x00 /* (to 0x01AA state 181) */, 0x08, /* fail */ /* pos 00c6: 52 */ 0xE3 /* 'c' -> */, /* pos 00c7: 53 */ 0xE5 /* 'e' -> */, /* pos 00c8: 54 */ 0x70 /* 'p' */, 0x07, 0x00 /* (to 0x00CF state 55) */, 0x73 /* 's' */, 0x34, 0x02 /* (to 0x02FF state 421) */, 0x08, /* fail */ /* pos 00cf: 55 */ 0xF4 /* 't' -> */, /* pos 00d0: 56 */ 0x3A /* ':' */, 0x07, 0x00 /* (to 0x00D7 state 57) */, 0x2D /* '-' */, 0x37, 0x00 /* (to 0x010A state 87) */, 0x08, /* fail */ /* pos 00d7: 57 */ 0x00, 0x10 /* - terminal marker 16 - */, /* pos 00d9: 58 */ 0xE6 /* 'f' -> */, /* pos 00da: 59 */ 0xAD /* '-' -> */, /* pos 00db: 60 */ 0x6D /* 'm' */, 0x0D, 0x00 /* (to 0x00E8 state 61) */, 0x6E /* 'n' */, 0x20, 0x00 /* (to 0x00FE state 76) */, 0x72 /* 'r' */, 0x2A, 0x01 /* (to 0x020B state 255) */, 0x75 /* 'u' */, 0x2E, 0x01 /* (to 0x0212 state 261) */, 0x08, /* fail */ /* pos 00e8: 61 */ 0x6F /* 'o' */, 0x07, 0x00 /* (to 0x00EF state 62) */, 0x61 /* 'a' */, 0x1A, 0x01 /* (to 0x0205 state 250) */, 0x08, /* fail */ /* pos 00ef: 62 */ 0xE4 /* 'd' -> */, /* pos 00f0: 63 */ 0xE9 /* 'i' -> */, /* pos 00f1: 64 */ 0xE6 /* 'f' -> */, /* pos 00f2: 65 */ 0xE9 /* 'i' -> */, /* pos 00f3: 66 */ 0xE5 /* 'e' -> */, /* pos 00f4: 67 */ 0xE4 /* 'd' -> */, /* pos 00f5: 68 */ 0xAD /* '-' -> */, /* pos 00f6: 69 */ 0xF3 /* 's' -> */, /* pos 00f7: 70 */ 0xE9 /* 'i' -> */, /* pos 00f8: 71 */ 0xEE /* 'n' -> */, /* pos 00f9: 72 */ 0xE3 /* 'c' -> */, /* pos 00fa: 73 */ 0xE5 /* 'e' -> */, /* pos 00fb: 74 */ 0xBA /* ':' -> */, /* pos 00fc: 75 */ 0x00, 0x12 /* - terminal marker 18 - */, /* pos 00fe: 76 */ 0xEF /* 'o' -> */, /* pos 00ff: 77 */ 0xEE /* 'n' -> */, /* pos 0100: 78 */ 0xE5 /* 'e' -> */, /* pos 0101: 79 */ 0xAD /* '-' -> */, /* pos 0102: 80 */ 0xED /* 'm' -> */, /* pos 0103: 81 */ 0xE1 /* 'a' -> */, /* pos 0104: 82 */ 0xF4 /* 't' -> */, /* pos 0105: 83 */ 0xE3 /* 'c' -> */, /* pos 0106: 84 */ 0xE8 /* 'h' -> */, /* pos 0107: 85 */ 0xBA /* ':' -> */, /* pos 0108: 86 */ 0x00, 0x13 /* - terminal marker 19 - */, /* pos 010a: 87 */ 0x65 /* 'e' */, 0x0D, 0x00 /* (to 0x0117 state 88) */, 0x6C /* 'l' */, 0x14, 0x00 /* (to 0x0121 state 97) */, 0x72 /* 'r' */, 0x8E, 0x00 /* (to 0x019E state 171) */, 0x63 /* 'c' */, 0x14, 0x02 /* (to 0x0327 state 453) */, 0x08, /* fail */ /* pos 0117: 88 */ 0xEE /* 'n' -> */, /* pos 0118: 89 */ 0xE3 /* 'c' -> */, /* pos 0119: 90 */ 0xEF /* 'o' -> */, /* pos 011a: 91 */ 0xE4 /* 'd' -> */, /* pos 011b: 92 */ 0xE9 /* 'i' -> */, /* pos 011c: 93 */ 0xEE /* 'n' -> */, /* pos 011d: 94 */ 0xE7 /* 'g' -> */, /* pos 011e: 95 */ 0xBA /* ':' -> */, /* pos 011f: 96 */ 0x00, 0x14 /* - terminal marker 20 - */, /* pos 0121: 97 */ 0xE1 /* 'a' -> */, /* pos 0122: 98 */ 0xEE /* 'n' -> */, /* pos 0123: 99 */ 0xE7 /* 'g' -> */, /* pos 0124: 100 */ 0xF5 /* 'u' -> */, /* pos 0125: 101 */ 0xE1 /* 'a' -> */, /* pos 0126: 102 */ 0xE7 /* 'g' -> */, /* pos 0127: 103 */ 0xE5 /* 'e' -> */, /* pos 0128: 104 */ 0xBA /* ':' -> */, /* pos 0129: 105 */ 0x00, 0x15 /* - terminal marker 21 - */, /* pos 012b: 106 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x0132 state 107) */, 0x6F /* 'o' */, 0x1E, 0x02 /* (to 0x034C state 487) */, 0x08, /* fail */ /* pos 0132: 107 */ 0xE7 /* 'g' -> */, /* pos 0133: 108 */ 0xED /* 'm' -> */, /* pos 0134: 109 */ 0xE1 /* 'a' -> */, /* pos 0135: 110 */ 0xBA /* ':' -> */, /* pos 0136: 111 */ 0x00, 0x16 /* - terminal marker 22 - */, /* pos 0138: 112 */ 0xE3 /* 'c' -> */, /* pos 0139: 113 */ 0xE8 /* 'h' -> */, /* pos 013a: 114 */ 0xE5 /* 'e' -> */, /* pos 013b: 115 */ 0xAD /* '-' -> */, /* pos 013c: 116 */ 0xE3 /* 'c' -> */, /* pos 013d: 117 */ 0xEF /* 'o' -> */, /* pos 013e: 118 */ 0xEE /* 'n' -> */, /* pos 013f: 119 */ 0xF4 /* 't' -> */, /* pos 0140: 120 */ 0xF2 /* 'r' -> */, /* pos 0141: 121 */ 0xEF /* 'o' -> */, /* pos 0142: 122 */ 0xEC /* 'l' -> */, /* pos 0143: 123 */ 0xBA /* ':' -> */, /* pos 0144: 124 */ 0x00, 0x17 /* - terminal marker 23 - */, /* pos 0146: 125 */ 0xF4 /* 't' -> */, /* pos 0147: 126 */ 0xE8 /* 'h' -> */, /* pos 0148: 127 */ 0xEF /* 'o' -> */, /* pos 0149: 128 */ 0xF2 /* 'r' -> */, /* pos 014a: 129 */ 0xE9 /* 'i' -> */, /* pos 014b: 130 */ 0xFA /* 'z' -> */, /* pos 014c: 131 */ 0xE1 /* 'a' -> */, /* pos 014d: 132 */ 0xF4 /* 't' -> */, /* pos 014e: 133 */ 0xE9 /* 'i' -> */, /* pos 014f: 134 */ 0xEF /* 'o' -> */, /* pos 0150: 135 */ 0xEE /* 'n' -> */, /* pos 0151: 136 */ 0xBA /* ':' -> */, /* pos 0152: 137 */ 0x00, 0x18 /* - terminal marker 24 - */, /* pos 0154: 138 */ 0xEB /* 'k' -> */, /* pos 0155: 139 */ 0xE9 /* 'i' -> */, /* pos 0156: 140 */ 0xE5 /* 'e' -> */, /* pos 0157: 141 */ 0xBA /* ':' -> */, /* pos 0158: 142 */ 0x00, 0x19 /* - terminal marker 25 - */, /* pos 015a: 143 */ 0xE5 /* 'e' -> */, /* pos 015b: 144 */ 0xEE /* 'n' -> */, /* pos 015c: 145 */ 0xF4 /* 't' -> */, /* pos 015d: 146 */ 0xAD /* '-' -> */, /* pos 015e: 147 */ 0x6C /* 'l' */, 0x10, 0x00 /* (to 0x016E state 148) */, 0x74 /* 't' */, 0x1E, 0x00 /* (to 0x017F state 155) */, 0x64 /* 'd' */, 0x4C, 0x00 /* (to 0x01B0 state 186) */, 0x65 /* 'e' */, 0x56, 0x00 /* (to 0x01BD state 198) */, 0x72 /* 'r' */, 0x6F, 0x00 /* (to 0x01D9 state 223) */, 0x08, /* fail */ /* pos 016e: 148 */ 0x65 /* 'e' */, 0x0A, 0x00 /* (to 0x0178 state 149) */, 0x61 /* 'a' */, 0x56, 0x00 /* (to 0x01C7 state 207) */, 0x6F /* 'o' */, 0x5C, 0x00 /* (to 0x01D0 state 215) */, 0x08, /* fail */ /* pos 0178: 149 */ 0xEE /* 'n' -> */, /* pos 0179: 150 */ 0xE7 /* 'g' -> */, /* pos 017a: 151 */ 0xF4 /* 't' -> */, /* pos 017b: 152 */ 0xE8 /* 'h' -> */, /* pos 017c: 153 */ 0xBA /* ':' -> */, /* pos 017d: 154 */ 0x00, 0x1A /* - terminal marker 26 - */, /* pos 017f: 155 */ 0xF9 /* 'y' -> */, /* pos 0180: 156 */ 0xF0 /* 'p' -> */, /* pos 0181: 157 */ 0xE5 /* 'e' -> */, /* pos 0182: 158 */ 0xBA /* ':' -> */, /* pos 0183: 159 */ 0x00, 0x1B /* - terminal marker 27 - */, /* pos 0185: 160 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x018C state 161) */, 0x65 /* 'e' */, 0x3C, 0x02 /* (to 0x03C4 state 580) */, 0x08, /* fail */ /* pos 018c: 161 */ 0xF4 /* 't' -> */, /* pos 018d: 162 */ 0xE5 /* 'e' -> */, /* pos 018e: 163 */ 0xBA /* ':' -> */, /* pos 018f: 164 */ 0x00, 0x1C /* - terminal marker 28 - */, /* pos 0191: 165 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x0198 state 166) */, 0x65 /* 'e' */, 0xB6, 0x00 /* (to 0x024A state 304) */, 0x08, /* fail */ /* pos 0198: 166 */ 0xEE /* 'n' -> */, /* pos 0199: 167 */ 0xE7 /* 'g' -> */, /* pos 019a: 168 */ 0xE5 /* 'e' -> */, /* pos 019b: 169 */ 0xBA /* ':' -> */, /* pos 019c: 170 */ 0x00, 0x1D /* - terminal marker 29 - */, /* pos 019e: 171 */ 0xE1 /* 'a' -> */, /* pos 019f: 172 */ 0xEE /* 'n' -> */, /* pos 01a0: 173 */ 0xE7 /* 'g' -> */, /* pos 01a1: 174 */ 0xE5 /* 'e' -> */, /* pos 01a2: 175 */ 0xF3 /* 's' -> */, /* pos 01a3: 176 */ 0xBA /* ':' -> */, /* pos 01a4: 177 */ 0x00, 0x23 /* - terminal marker 35 - */, /* pos 01a6: 178 */ 0xE5 /* 'e' -> */, /* pos 01a7: 179 */ 0xBA /* ':' -> */, /* pos 01a8: 180 */ 0x00, 0x25 /* - terminal marker 37 - */, /* pos 01aa: 181 */ 0xEC /* 'l' -> */, /* pos 01ab: 182 */ 0xEF /* 'o' -> */, /* pos 01ac: 183 */ 0xF7 /* 'w' -> */, /* pos 01ad: 184 */ 0xBA /* ':' -> */, /* pos 01ae: 185 */ 0x00, 0x26 /* - terminal marker 38 - */, /* pos 01b0: 186 */ 0xE9 /* 'i' -> */, /* pos 01b1: 187 */ 0xF3 /* 's' -> */, /* pos 01b2: 188 */ 0xF0 /* 'p' -> */, /* pos 01b3: 189 */ 0xEF /* 'o' -> */, /* pos 01b4: 190 */ 0xF3 /* 's' -> */, /* pos 01b5: 191 */ 0xE9 /* 'i' -> */, /* pos 01b6: 192 */ 0xF4 /* 't' -> */, /* pos 01b7: 193 */ 0xE9 /* 'i' -> */, /* pos 01b8: 194 */ 0xEF /* 'o' -> */, /* pos 01b9: 195 */ 0xEE /* 'n' -> */, /* pos 01ba: 196 */ 0xBA /* ':' -> */, /* pos 01bb: 197 */ 0x00, 0x27 /* - terminal marker 39 - */, /* pos 01bd: 198 */ 0xEE /* 'n' -> */, /* pos 01be: 199 */ 0xE3 /* 'c' -> */, /* pos 01bf: 200 */ 0xEF /* 'o' -> */, /* pos 01c0: 201 */ 0xE4 /* 'd' -> */, /* pos 01c1: 202 */ 0xE9 /* 'i' -> */, /* pos 01c2: 203 */ 0xEE /* 'n' -> */, /* pos 01c3: 204 */ 0xE7 /* 'g' -> */, /* pos 01c4: 205 */ 0xBA /* ':' -> */, /* pos 01c5: 206 */ 0x00, 0x28 /* - terminal marker 40 - */, /* pos 01c7: 207 */ 0xEE /* 'n' -> */, /* pos 01c8: 208 */ 0xE7 /* 'g' -> */, /* pos 01c9: 209 */ 0xF5 /* 'u' -> */, /* pos 01ca: 210 */ 0xE1 /* 'a' -> */, /* pos 01cb: 211 */ 0xE7 /* 'g' -> */, /* pos 01cc: 212 */ 0xE5 /* 'e' -> */, /* pos 01cd: 213 */ 0xBA /* ':' -> */, /* pos 01ce: 214 */ 0x00, 0x29 /* - terminal marker 41 - */, /* pos 01d0: 215 */ 0xE3 /* 'c' -> */, /* pos 01d1: 216 */ 0xE1 /* 'a' -> */, /* pos 01d2: 217 */ 0xF4 /* 't' -> */, /* pos 01d3: 218 */ 0xE9 /* 'i' -> */, /* pos 01d4: 219 */ 0xEF /* 'o' -> */, /* pos 01d5: 220 */ 0xEE /* 'n' -> */, /* pos 01d6: 221 */ 0xBA /* ':' -> */, /* pos 01d7: 222 */ 0x00, 0x2A /* - terminal marker 42 - */, /* pos 01d9: 223 */ 0xE1 /* 'a' -> */, /* pos 01da: 224 */ 0xEE /* 'n' -> */, /* pos 01db: 225 */ 0xE7 /* 'g' -> */, /* pos 01dc: 226 */ 0xE5 /* 'e' -> */, /* pos 01dd: 227 */ 0xBA /* ':' -> */, /* pos 01de: 228 */ 0x00, 0x2B /* - terminal marker 43 - */, /* pos 01e0: 229 */ 0x74 /* 't' */, 0x07, 0x00 /* (to 0x01E7 state 230) */, 0x78 /* 'x' */, 0x09, 0x00 /* (to 0x01EC state 234) */, 0x08, /* fail */ /* pos 01e7: 230 */ 0xE1 /* 'a' -> */, /* pos 01e8: 231 */ 0xE7 /* 'g' -> */, /* pos 01e9: 232 */ 0xBA /* ':' -> */, /* pos 01ea: 233 */ 0x00, 0x2C /* - terminal marker 44 - */, /* pos 01ec: 234 */ 0xF0 /* 'p' -> */, /* pos 01ed: 235 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x01F4 state 236) */, 0x69 /* 'i' */, 0x09, 0x00 /* (to 0x01F9 state 240) */, 0x08, /* fail */ /* pos 01f4: 236 */ 0xE3 /* 'c' -> */, /* pos 01f5: 237 */ 0xF4 /* 't' -> */, /* pos 01f6: 238 */ 0xBA /* ':' -> */, /* pos 01f7: 239 */ 0x00, 0x2D /* - terminal marker 45 - */, /* pos 01f9: 240 */ 0xF2 /* 'r' -> */, /* pos 01fa: 241 */ 0xE5 /* 'e' -> */, /* pos 01fb: 242 */ 0xF3 /* 's' -> */, /* pos 01fc: 243 */ 0xBA /* ':' -> */, /* pos 01fd: 244 */ 0x00, 0x2E /* - terminal marker 46 - */, /* pos 01ff: 245 */ 0xF2 /* 'r' -> */, /* pos 0200: 246 */ 0xEF /* 'o' -> */, /* pos 0201: 247 */ 0xED /* 'm' -> */, /* pos 0202: 248 */ 0xBA /* ':' -> */, /* pos 0203: 249 */ 0x00, 0x2F /* - terminal marker 47 - */, /* pos 0205: 250 */ 0xF4 /* 't' -> */, /* pos 0206: 251 */ 0xE3 /* 'c' -> */, /* pos 0207: 252 */ 0xE8 /* 'h' -> */, /* pos 0208: 253 */ 0xBA /* ':' -> */, /* pos 0209: 254 */ 0x00, 0x30 /* - terminal marker 48 - */, /* pos 020b: 255 */ 0xE1 /* 'a' -> */, /* pos 020c: 256 */ 0xEE /* 'n' -> */, /* pos 020d: 257 */ 0xE7 /* 'g' -> */, /* pos 020e: 258 */ 0xE5 /* 'e' -> */, /* pos 020f: 259 */ 0xBA /* ':' -> */, /* pos 0210: 260 */ 0x00, 0x31 /* - terminal marker 49 - */, /* pos 0212: 261 */ 0xEE /* 'n' -> */, /* pos 0213: 262 */ 0xED /* 'm' -> */, /* pos 0214: 263 */ 0xEF /* 'o' -> */, /* pos 0215: 264 */ 0xE4 /* 'd' -> */, /* pos 0216: 265 */ 0xE9 /* 'i' -> */, /* pos 0217: 266 */ 0xE6 /* 'f' -> */, /* pos 0218: 267 */ 0xE9 /* 'i' -> */, /* pos 0219: 268 */ 0xE5 /* 'e' -> */, /* pos 021a: 269 */ 0xE4 /* 'd' -> */, /* pos 021b: 270 */ 0xAD /* '-' -> */, /* pos 021c: 271 */ 0xF3 /* 's' -> */, /* pos 021d: 272 */ 0xE9 /* 'i' -> */, /* pos 021e: 273 */ 0xEE /* 'n' -> */, /* pos 021f: 274 */ 0xE3 /* 'c' -> */, /* pos 0220: 275 */ 0xE5 /* 'e' -> */, /* pos 0221: 276 */ 0xBA /* ':' -> */, /* pos 0222: 277 */ 0x00, 0x32 /* - terminal marker 50 - */, /* pos 0224: 278 */ 0x61 /* 'a' */, 0x0A, 0x00 /* (to 0x022E state 279) */, 0x69 /* 'i' */, 0x15, 0x00 /* (to 0x023C state 292) */, 0x6F /* 'o' */, 0x17, 0x00 /* (to 0x0241 state 296) */, 0x08, /* fail */ /* pos 022e: 279 */ 0xF3 /* 's' -> */, /* pos 022f: 280 */ 0xF4 /* 't' -> */, /* pos 0230: 281 */ 0xAD /* '-' -> */, /* pos 0231: 282 */ 0xED /* 'm' -> */, /* pos 0232: 283 */ 0xEF /* 'o' -> */, /* pos 0233: 284 */ 0xE4 /* 'd' -> */, /* pos 0234: 285 */ 0xE9 /* 'i' -> */, /* pos 0235: 286 */ 0xE6 /* 'f' -> */, /* pos 0236: 287 */ 0xE9 /* 'i' -> */, /* pos 0237: 288 */ 0xE5 /* 'e' -> */, /* pos 0238: 289 */ 0xE4 /* 'd' -> */, /* pos 0239: 290 */ 0xBA /* ':' -> */, /* pos 023a: 291 */ 0x00, 0x33 /* - terminal marker 51 - */, /* pos 023c: 292 */ 0xEE /* 'n' -> */, /* pos 023d: 293 */ 0xEB /* 'k' -> */, /* pos 023e: 294 */ 0xBA /* ':' -> */, /* pos 023f: 295 */ 0x00, 0x34 /* - terminal marker 52 - */, /* pos 0241: 296 */ 0xE3 /* 'c' -> */, /* pos 0242: 297 */ 0xE1 /* 'a' -> */, /* pos 0243: 298 */ 0xF4 /* 't' -> */, /* pos 0244: 299 */ 0xE9 /* 'i' -> */, /* pos 0245: 300 */ 0xEF /* 'o' -> */, /* pos 0246: 301 */ 0xEE /* 'n' -> */, /* pos 0247: 302 */ 0xBA /* ':' -> */, /* pos 0248: 303 */ 0x00, 0x35 /* - terminal marker 53 - */, /* pos 024a: 304 */ 0x66 /* 'f' */, 0x0A, 0x00 /* (to 0x0254 state 305) */, 0x74 /* 't' */, 0x14, 0x00 /* (to 0x0261 state 311) */, 0x70 /* 'p' */, 0x88, 0x01 /* (to 0x03D8 state 596) */, 0x08, /* fail */ /* pos 0254: 305 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x025B state 306) */, 0x65 /* 'e' */, 0xCA, 0x00 /* (to 0x0321 state 448) */, 0x08, /* fail */ /* pos 025b: 306 */ 0xE5 /* 'e' -> */, /* pos 025c: 307 */ 0xF3 /* 's' -> */, /* pos 025d: 308 */ 0xE8 /* 'h' -> */, /* pos 025e: 309 */ 0xBA /* ':' -> */, /* pos 025f: 310 */ 0x00, 0x39 /* - terminal marker 57 - */, /* pos 0261: 311 */ 0xF2 /* 'r' -> */, /* pos 0262: 312 */ 0xF9 /* 'y' -> */, /* pos 0263: 313 */ 0xAD /* '-' -> */, /* pos 0264: 314 */ 0xE1 /* 'a' -> */, /* pos 0265: 315 */ 0xE6 /* 'f' -> */, /* pos 0266: 316 */ 0xF4 /* 't' -> */, /* pos 0267: 317 */ 0xE5 /* 'e' -> */, /* pos 0268: 318 */ 0xF2 /* 'r' -> */, /* pos 0269: 319 */ 0xBA /* ':' -> */, /* pos 026a: 320 */ 0x00, 0x3A /* - terminal marker 58 - */, /* pos 026c: 321 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x0273 state 322) */, 0x74 /* 't' */, 0x06, 0x01 /* (to 0x0375 state 514) */, 0x08, /* fail */ /* pos 0273: 322 */ 0x72 /* 'r' */, 0x0A, 0x00 /* (to 0x027D state 323) */, 0x74 /* 't' */, 0x0D, 0x00 /* (to 0x0283 state 328) */, 0x63 /* 'c' */, 0x6B, 0x01 /* (to 0x03E4 state 607) */, 0x08, /* fail */ /* pos 027d: 323 */ 0xF6 /* 'v' -> */, /* pos 027e: 324 */ 0xE5 /* 'e' -> */, /* pos 027f: 325 */ 0xF2 /* 'r' -> */, /* pos 0280: 326 */ 0xBA /* ':' -> */, /* pos 0281: 327 */ 0x00, 0x3B /* - terminal marker 59 - */, /* pos 0283: 328 */ 0xAD /* '-' -> */, /* pos 0284: 329 */ 0xE3 /* 'c' -> */, /* pos 0285: 330 */ 0xEF /* 'o' -> */, /* pos 0286: 331 */ 0xEF /* 'o' -> */, /* pos 0287: 332 */ 0xEB /* 'k' -> */, /* pos 0288: 333 */ 0xE9 /* 'i' -> */, /* pos 0289: 334 */ 0xE5 /* 'e' -> */, /* pos 028a: 335 */ 0xBA /* ':' -> */, /* pos 028b: 336 */ 0x00, 0x3C /* - terminal marker 60 - */, /* pos 028d: 337 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x0294 state 338) */, 0x65 /* 'e' */, 0x45, 0x01 /* (to 0x03D5 state 594) */, 0x08, /* fail */ /* pos 0294: 338 */ 0xE1 /* 'a' -> */, /* pos 0295: 339 */ 0xEE /* 'n' -> */, /* pos 0296: 340 */ 0xF3 /* 's' -> */, /* pos 0297: 341 */ 0xE6 /* 'f' -> */, /* pos 0298: 342 */ 0xE5 /* 'e' -> */, /* pos 0299: 343 */ 0xF2 /* 'r' -> */, /* pos 029a: 344 */ 0xAD /* '-' -> */, /* pos 029b: 345 */ 0xE5 /* 'e' -> */, /* pos 029c: 346 */ 0xEE /* 'n' -> */, /* pos 029d: 347 */ 0xE3 /* 'c' -> */, /* pos 029e: 348 */ 0xEF /* 'o' -> */, /* pos 029f: 349 */ 0xE4 /* 'd' -> */, /* pos 02a0: 350 */ 0xE9 /* 'i' -> */, /* pos 02a1: 351 */ 0xEE /* 'n' -> */, /* pos 02a2: 352 */ 0xE7 /* 'g' -> */, /* pos 02a3: 353 */ 0xBA /* ':' -> */, /* pos 02a4: 354 */ 0x00, 0x3E /* - terminal marker 62 - */, /* pos 02a6: 355 */ 0xE9 /* 'i' -> */, /* pos 02a7: 356 */ 0xAD /* '-' -> */, /* pos 02a8: 357 */ 0xE1 /* 'a' -> */, /* pos 02a9: 358 */ 0xF2 /* 'r' -> */, /* pos 02aa: 359 */ 0xE7 /* 'g' -> */, /* pos 02ab: 360 */ 0xF3 /* 's' -> */, /* pos 02ac: 361 */ 0x00, 0x46 /* - terminal marker 70 - */, /* pos 02ae: 362 */ 0xA0 /* ' ' -> */, /* pos 02af: 363 */ 0x00, 0x49 /* - terminal marker 73 - */, /* pos 02b1: 364 */ 0xAD /* '-' -> */, /* pos 02b2: 365 */ 0x66 /* 'f' */, 0x0A, 0x00 /* (to 0x02BC state 366) */, 0x61 /* 'a' */, 0x1D, 0x00 /* (to 0x02D2 state 385) */, 0x72 /* 'r' */, 0x14, 0x01 /* (to 0x03CC state 586) */, 0x08, /* fail */ /* pos 02bc: 366 */ 0xEF /* 'o' -> */, /* pos 02bd: 367 */ 0xF2 /* 'r' -> */, /* pos 02be: 368 */ 0xF7 /* 'w' -> */, /* pos 02bf: 369 */ 0xE1 /* 'a' -> */, /* pos 02c0: 370 */ 0xF2 /* 'r' -> */, /* pos 02c1: 371 */ 0xE4 /* 'd' -> */, /* pos 02c2: 372 */ 0xE5 /* 'e' -> */, /* pos 02c3: 373 */ 0xE4 /* 'd' -> */, /* pos 02c4: 374 */ 0xAD /* '-' -> */, /* pos 02c5: 375 */ 0xE6 /* 'f' -> */, /* pos 02c6: 376 */ 0xEF /* 'o' -> */, /* pos 02c7: 377 */ 0xF2 /* 'r' -> */, /* pos 02c8: 378 */ 0xBA /* ':' -> */, /* pos 02c9: 379 */ 0x00, 0x4A /* - terminal marker 74 - */, /* pos 02cb: 380 */ 0x00, 0x4B /* - terminal marker 75 - */, /* pos 02cd: 381 */ 0xE1 /* 'a' -> */, /* pos 02ce: 382 */ 0xE4 /* 'd' -> */, /* pos 02cf: 383 */ 0xA0 /* ' ' -> */, /* pos 02d0: 384 */ 0x00, 0x4C /* - terminal marker 76 - */, /* pos 02d2: 385 */ 0x75 /* 'u' */, 0x07, 0x00 /* (to 0x02D9 state 386) */, 0x6D /* 'm' */, 0x0F, 0x00 /* (to 0x02E4 state 396) */, 0x08, /* fail */ /* pos 02d9: 386 */ 0xF4 /* 't' -> */, /* pos 02da: 387 */ 0xE8 /* 'h' -> */, /* pos 02db: 388 */ 0xAD /* '-' -> */, /* pos 02dc: 389 */ 0xF4 /* 't' -> */, /* pos 02dd: 390 */ 0xEF /* 'o' -> */, /* pos 02de: 391 */ 0xEB /* 'k' -> */, /* pos 02df: 392 */ 0xE5 /* 'e' -> */, /* pos 02e0: 393 */ 0xEE /* 'n' -> */, /* pos 02e1: 394 */ 0xBA /* ':' -> */, /* pos 02e2: 395 */ 0x00, 0x4F /* - terminal marker 79 - */, /* pos 02e4: 396 */ 0xFA /* 'z' -> */, /* pos 02e5: 397 */ 0xEE /* 'n' -> */, /* pos 02e6: 398 */ 0xAD /* '-' -> */, /* pos 02e7: 399 */ 0xE4 /* 'd' -> */, /* pos 02e8: 400 */ 0xF3 /* 's' -> */, /* pos 02e9: 401 */ 0xF3 /* 's' -> */, /* pos 02ea: 402 */ 0xAD /* '-' -> */, /* pos 02eb: 403 */ 0xF3 /* 's' -> */, /* pos 02ec: 404 */ 0xE9 /* 'i' -> */, /* pos 02ed: 405 */ 0xE7 /* 'g' -> */, /* pos 02ee: 406 */ 0xEE /* 'n' -> */, /* pos 02ef: 407 */ 0xE1 /* 'a' -> */, /* pos 02f0: 408 */ 0xF4 /* 't' -> */, /* pos 02f1: 409 */ 0xF5 /* 'u' -> */, /* pos 02f2: 410 */ 0xF2 /* 'r' -> */, /* pos 02f3: 411 */ 0xE5 /* 'e' -> */, /* pos 02f4: 412 */ 0xBA /* ':' -> */, /* pos 02f5: 413 */ 0x00, 0x50 /* - terminal marker 80 - */, /* pos 02f7: 414 */ 0xF4 /* 't' -> */, /* pos 02f8: 415 */ 0xE9 /* 'i' -> */, /* pos 02f9: 416 */ 0xEF /* 'o' -> */, /* pos 02fa: 417 */ 0xEE /* 'n' -> */, /* pos 02fb: 418 */ 0xF3 /* 's' -> */, /* pos 02fc: 419 */ 0xA0 /* ' ' -> */, /* pos 02fd: 420 */ 0x00, 0x02 /* - terminal marker 2 - */, /* pos 02ff: 421 */ 0xF3 /* 's' -> */, /* pos 0300: 422 */ 0xAD /* '-' -> */, /* pos 0301: 423 */ 0xE3 /* 'c' -> */, /* pos 0302: 424 */ 0xEF /* 'o' -> */, /* pos 0303: 425 */ 0xEE /* 'n' -> */, /* pos 0304: 426 */ 0xF4 /* 't' -> */, /* pos 0305: 427 */ 0xF2 /* 'r' -> */, /* pos 0306: 428 */ 0xEF /* 'o' -> */, /* pos 0307: 429 */ 0xEC /* 'l' -> */, /* pos 0308: 430 */ 0xAD /* '-' -> */, /* pos 0309: 431 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x0310 state 432) */, 0x61 /* 'a' */, 0x24, 0x00 /* (to 0x0330 state 461) */, 0x08, /* fail */ /* pos 0310: 432 */ 0xE5 /* 'e' -> */, /* pos 0311: 433 */ 0xF1 /* 'q' -> */, /* pos 0312: 434 */ 0xF5 /* 'u' -> */, /* pos 0313: 435 */ 0xE5 /* 'e' -> */, /* pos 0314: 436 */ 0xF3 /* 's' -> */, /* pos 0315: 437 */ 0xF4 /* 't' -> */, /* pos 0316: 438 */ 0xAD /* '-' -> */, /* pos 0317: 439 */ 0xE8 /* 'h' -> */, /* pos 0318: 440 */ 0xE5 /* 'e' -> */, /* pos 0319: 441 */ 0xE1 /* 'a' -> */, /* pos 031a: 442 */ 0xE4 /* 'd' -> */, /* pos 031b: 443 */ 0xE5 /* 'e' -> */, /* pos 031c: 444 */ 0xF2 /* 'r' -> */, /* pos 031d: 445 */ 0xF3 /* 's' -> */, /* pos 031e: 446 */ 0xBA /* ':' -> */, /* pos 031f: 447 */ 0x00, 0x11 /* - terminal marker 17 - */, /* pos 0321: 448 */ 0xF2 /* 'r' -> */, /* pos 0322: 449 */ 0xE5 /* 'e' -> */, /* pos 0323: 450 */ 0xF2 /* 'r' -> */, /* pos 0324: 451 */ 0xBA /* ':' -> */, /* pos 0325: 452 */ 0x00, 0x1E /* - terminal marker 30 - */, /* pos 0327: 453 */ 0xE8 /* 'h' -> */, /* pos 0328: 454 */ 0xE1 /* 'a' -> */, /* pos 0329: 455 */ 0xF2 /* 'r' -> */, /* pos 032a: 456 */ 0xF3 /* 's' -> */, /* pos 032b: 457 */ 0xE5 /* 'e' -> */, /* pos 032c: 458 */ 0xF4 /* 't' -> */, /* pos 032d: 459 */ 0xBA /* ':' -> */, /* pos 032e: 460 */ 0x00, 0x22 /* - terminal marker 34 - */, /* pos 0330: 461 */ 0xEC /* 'l' -> */, /* pos 0331: 462 */ 0xEC /* 'l' -> */, /* pos 0332: 463 */ 0xEF /* 'o' -> */, /* pos 0333: 464 */ 0xF7 /* 'w' -> */, /* pos 0334: 465 */ 0xAD /* '-' -> */, /* pos 0335: 466 */ 0xEF /* 'o' -> */, /* pos 0336: 467 */ 0xF2 /* 'r' -> */, /* pos 0337: 468 */ 0xE9 /* 'i' -> */, /* pos 0338: 469 */ 0xE7 /* 'g' -> */, /* pos 0339: 470 */ 0xE9 /* 'i' -> */, /* pos 033a: 471 */ 0xEE /* 'n' -> */, /* pos 033b: 472 */ 0xBA /* ':' -> */, /* pos 033c: 473 */ 0x00, 0x24 /* - terminal marker 36 - */, /* pos 033e: 474 */ 0xE1 /* 'a' -> */, /* pos 033f: 475 */ 0xF8 /* 'x' -> */, /* pos 0340: 476 */ 0xAD /* '-' -> */, /* pos 0341: 477 */ 0xE6 /* 'f' -> */, /* pos 0342: 478 */ 0xEF /* 'o' -> */, /* pos 0343: 479 */ 0xF2 /* 'r' -> */, /* pos 0344: 480 */ 0xF7 /* 'w' -> */, /* pos 0345: 481 */ 0xE1 /* 'a' -> */, /* pos 0346: 482 */ 0xF2 /* 'r' -> */, /* pos 0347: 483 */ 0xE4 /* 'd' -> */, /* pos 0348: 484 */ 0xF3 /* 's' -> */, /* pos 0349: 485 */ 0xBA /* ':' -> */, /* pos 034a: 486 */ 0x00, 0x36 /* - terminal marker 54 - */, /* pos 034c: 487 */ 0xF8 /* 'x' -> */, /* pos 034d: 488 */ 0xF9 /* 'y' -> */, /* pos 034e: 489 */ 0x2D /* '-' */, 0x07, 0x00 /* (to 0x0355 state 490) */, 0x20 /* ' ' */, 0x79, 0x00 /* (to 0x03CA state 585) */, 0x08, /* fail */ /* pos 0355: 490 */ 0xE1 /* 'a' -> */, /* pos 0356: 491 */ 0xF5 /* 'u' -> */, /* pos 0357: 492 */ 0xF4 /* 't' -> */, /* pos 0358: 493 */ 0xE8 /* 'h' -> */, /* pos 0359: 494 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x0360 state 495) */, 0x6F /* 'o' */, 0x0E, 0x00 /* (to 0x036A state 504) */, 0x08, /* fail */ /* pos 0360: 495 */ 0xEE /* 'n' -> */, /* pos 0361: 496 */ 0xF4 /* 't' -> */, /* pos 0362: 497 */ 0xE9 /* 'i' -> */, /* pos 0363: 498 */ 0xE3 /* 'c' -> */, /* pos 0364: 499 */ 0xE1 /* 'a' -> */, /* pos 0365: 500 */ 0xF4 /* 't' -> */, /* pos 0366: 501 */ 0xE5 /* 'e' -> */, /* pos 0367: 502 */ 0xBA /* ':' -> */, /* pos 0368: 503 */ 0x00, 0x37 /* - terminal marker 55 - */, /* pos 036a: 504 */ 0xF2 /* 'r' -> */, /* pos 036b: 505 */ 0xE9 /* 'i' -> */, /* pos 036c: 506 */ 0xFA /* 'z' -> */, /* pos 036d: 507 */ 0xE1 /* 'a' -> */, /* pos 036e: 508 */ 0xF4 /* 't' -> */, /* pos 036f: 509 */ 0xE9 /* 'i' -> */, /* pos 0370: 510 */ 0xEF /* 'o' -> */, /* pos 0371: 511 */ 0xEE /* 'n' -> */, /* pos 0372: 512 */ 0xBA /* ':' -> */, /* pos 0373: 513 */ 0x00, 0x38 /* - terminal marker 56 - */, /* pos 0375: 514 */ 0xF2 /* 'r' -> */, /* pos 0376: 515 */ 0xE9 /* 'i' -> */, /* pos 0377: 516 */ 0xE3 /* 'c' -> */, /* pos 0378: 517 */ 0xF4 /* 't' -> */, /* pos 0379: 518 */ 0xAD /* '-' -> */, /* pos 037a: 519 */ 0xF4 /* 't' -> */, /* pos 037b: 520 */ 0xF2 /* 'r' -> */, /* pos 037c: 521 */ 0xE1 /* 'a' -> */, /* pos 037d: 522 */ 0xEE /* 'n' -> */, /* pos 037e: 523 */ 0xF3 /* 's' -> */, /* pos 037f: 524 */ 0xF0 /* 'p' -> */, /* pos 0380: 525 */ 0xEF /* 'o' -> */, /* pos 0381: 526 */ 0xF2 /* 'r' -> */, /* pos 0382: 527 */ 0xF4 /* 't' -> */, /* pos 0383: 528 */ 0xAD /* '-' -> */, /* pos 0384: 529 */ 0xF3 /* 's' -> */, /* pos 0385: 530 */ 0xE5 /* 'e' -> */, /* pos 0386: 531 */ 0xE3 /* 'c' -> */, /* pos 0387: 532 */ 0xF5 /* 'u' -> */, /* pos 0388: 533 */ 0xF2 /* 'r' -> */, /* pos 0389: 534 */ 0xE9 /* 'i' -> */, /* pos 038a: 535 */ 0xF4 /* 't' -> */, /* pos 038b: 536 */ 0xF9 /* 'y' -> */, /* pos 038c: 537 */ 0xBA /* ':' -> */, /* pos 038d: 538 */ 0x00, 0x3D /* - terminal marker 61 - */, /* pos 038f: 539 */ 0xE5 /* 'e' -> */, /* pos 0390: 540 */ 0xF2 /* 'r' -> */, /* pos 0391: 541 */ 0xAD /* '-' -> */, /* pos 0392: 542 */ 0xE1 /* 'a' -> */, /* pos 0393: 543 */ 0xE7 /* 'g' -> */, /* pos 0394: 544 */ 0xE5 /* 'e' -> */, /* pos 0395: 545 */ 0xEE /* 'n' -> */, /* pos 0396: 546 */ 0xF4 /* 't' -> */, /* pos 0397: 547 */ 0xBA /* ':' -> */, /* pos 0398: 548 */ 0x00, 0x3F /* - terminal marker 63 - */, /* pos 039a: 549 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x03A1 state 550) */, 0x69 /* 'i' */, 0x09, 0x00 /* (to 0x03A6 state 554) */, 0x08, /* fail */ /* pos 03a1: 550 */ 0xF2 /* 'r' -> */, /* pos 03a2: 551 */ 0xF9 /* 'y' -> */, /* pos 03a3: 552 */ 0xBA /* ':' -> */, /* pos 03a4: 553 */ 0x00, 0x40 /* - terminal marker 64 - */, /* pos 03a6: 554 */ 0xE1 /* 'a' -> */, /* pos 03a7: 555 */ 0xBA /* ':' -> */, /* pos 03a8: 556 */ 0x00, 0x41 /* - terminal marker 65 - */, /* pos 03aa: 557 */ 0xF7 /* 'w' -> */, /* pos 03ab: 558 */ 0xF7 /* 'w' -> */, /* pos 03ac: 559 */ 0xAD /* '-' -> */, /* pos 03ad: 560 */ 0xE1 /* 'a' -> */, /* pos 03ae: 561 */ 0xF5 /* 'u' -> */, /* pos 03af: 562 */ 0xF4 /* 't' -> */, /* pos 03b0: 563 */ 0xE8 /* 'h' -> */, /* pos 03b1: 564 */ 0xE5 /* 'e' -> */, /* pos 03b2: 565 */ 0xEE /* 'n' -> */, /* pos 03b3: 566 */ 0xF4 /* 't' -> */, /* pos 03b4: 567 */ 0xE9 /* 'i' -> */, /* pos 03b5: 568 */ 0xE3 /* 'c' -> */, /* pos 03b6: 569 */ 0xE1 /* 'a' -> */, /* pos 03b7: 570 */ 0xF4 /* 't' -> */, /* pos 03b8: 571 */ 0xE5 /* 'e' -> */, /* pos 03b9: 572 */ 0xBA /* ':' -> */, /* pos 03ba: 573 */ 0x00, 0x42 /* - terminal marker 66 - */, /* pos 03bc: 574 */ 0xF4 /* 't' -> */, /* pos 03bd: 575 */ 0xE3 /* 'c' -> */, /* pos 03be: 576 */ 0xE8 /* 'h' -> */, /* pos 03bf: 577 */ 0x00, 0x43 /* - terminal marker 67 - */, /* pos 03c1: 578 */ 0xF4 /* 't' -> */, /* pos 03c2: 579 */ 0x00, 0x44 /* - terminal marker 68 - */, /* pos 03c4: 580 */ 0xEC /* 'l' -> */, /* pos 03c5: 581 */ 0xE5 /* 'e' -> */, /* pos 03c6: 582 */ 0xF4 /* 't' -> */, /* pos 03c7: 583 */ 0xE5 /* 'e' -> */, /* pos 03c8: 584 */ 0x00, 0x45 /* - terminal marker 69 - */, /* pos 03ca: 585 */ 0x00, 0x47 /* - terminal marker 71 - */, /* pos 03cc: 586 */ 0xE5 /* 'e' -> */, /* pos 03cd: 587 */ 0xE1 /* 'a' -> */, /* pos 03ce: 588 */ 0xEC /* 'l' -> */, /* pos 03cf: 589 */ 0xAD /* '-' -> */, /* pos 03d0: 590 */ 0xE9 /* 'i' -> */, /* pos 03d1: 591 */ 0xF0 /* 'p' -> */, /* pos 03d2: 592 */ 0xBA /* ':' -> */, /* pos 03d3: 593 */ 0x00, 0x48 /* - terminal marker 72 - */, /* pos 03d5: 594 */ 0xBA /* ':' -> */, /* pos 03d6: 595 */ 0x00, 0x4D /* - terminal marker 77 - */, /* pos 03d8: 596 */ 0xEC /* 'l' -> */, /* pos 03d9: 597 */ 0xE1 /* 'a' -> */, /* pos 03da: 598 */ 0xF9 /* 'y' -> */, /* pos 03db: 599 */ 0xAD /* '-' -> */, /* pos 03dc: 600 */ 0xEE /* 'n' -> */, /* pos 03dd: 601 */ 0xEF /* 'o' -> */, /* pos 03de: 602 */ 0xEE /* 'n' -> */, /* pos 03df: 603 */ 0xE3 /* 'c' -> */, /* pos 03e0: 604 */ 0xE5 /* 'e' -> */, /* pos 03e1: 605 */ 0xBA /* ':' -> */, /* pos 03e2: 606 */ 0x00, 0x4E /* - terminal marker 78 - */, /* pos 03e4: 607 */ 0xAD /* '-' -> */, /* pos 03e5: 608 */ 0xF7 /* 'w' -> */, /* pos 03e6: 609 */ 0xE5 /* 'e' -> */, /* pos 03e7: 610 */ 0xE2 /* 'b' -> */, /* pos 03e8: 611 */ 0xF3 /* 's' -> */, /* pos 03e9: 612 */ 0xEF /* 'o' -> */, /* pos 03ea: 613 */ 0xE3 /* 'c' -> */, /* pos 03eb: 614 */ 0xEB /* 'k' -> */, /* pos 03ec: 615 */ 0xE5 /* 'e' -> */, /* pos 03ed: 616 */ 0xF4 /* 't' -> */, /* pos 03ee: 617 */ 0xAD /* '-' -> */, /* pos 03ef: 618 */ 0x64 /* 'd' */, 0x19, 0x00 /* (to 0x0408 state 619) */, 0x65 /* 'e' */, 0x1D, 0x00 /* (to 0x040F state 625) */, 0x6B /* 'k' */, 0x26, 0x00 /* (to 0x041B state 636) */, 0x70 /* 'p' */, 0x35, 0x00 /* (to 0x042D state 643) */, 0x61 /* 'a' */, 0x3C, 0x00 /* (to 0x0437 state 652) */, 0x6E /* 'n' */, 0x41, 0x00 /* (to 0x043F state 659) */, 0x76 /* 'v' */, 0x47, 0x00 /* (to 0x0448 state 666) */, 0x6F /* 'o' */, 0x4D, 0x00 /* (to 0x0451 state 674) */, 0x08, /* fail */ /* pos 0408: 619 */ 0xF2 /* 'r' -> */, /* pos 0409: 620 */ 0xE1 /* 'a' -> */, /* pos 040a: 621 */ 0xE6 /* 'f' -> */, /* pos 040b: 622 */ 0xF4 /* 't' -> */, /* pos 040c: 623 */ 0xBA /* ':' -> */, /* pos 040d: 624 */ 0x00, 0x07 /* - terminal marker 7 - */, /* pos 040f: 625 */ 0xF8 /* 'x' -> */, /* pos 0410: 626 */ 0xF4 /* 't' -> */, /* pos 0411: 627 */ 0xE5 /* 'e' -> */, /* pos 0412: 628 */ 0xEE /* 'n' -> */, /* pos 0413: 629 */ 0xF3 /* 's' -> */, /* pos 0414: 630 */ 0xE9 /* 'i' -> */, /* pos 0415: 631 */ 0xEF /* 'o' -> */, /* pos 0416: 632 */ 0xEE /* 'n' -> */, /* pos 0417: 633 */ 0xF3 /* 's' -> */, /* pos 0418: 634 */ 0xBA /* ':' -> */, /* pos 0419: 635 */ 0x00, 0x09 /* - terminal marker 9 - */, /* pos 041b: 636 */ 0xE5 /* 'e' -> */, /* pos 041c: 637 */ 0xF9 /* 'y' -> */, /* pos 041d: 638 */ 0x31 /* '1' */, 0x0A, 0x00 /* (to 0x0427 state 639) */, 0x32 /* '2' */, 0x0A, 0x00 /* (to 0x042A state 641) */, 0x3A /* ':' */, 0x23, 0x00 /* (to 0x0446 state 665) */, 0x08, /* fail */ /* pos 0427: 639 */ 0xBA /* ':' -> */, /* pos 0428: 640 */ 0x00, 0x0A /* - terminal marker 10 - */, /* pos 042a: 641 */ 0xBA /* ':' -> */, /* pos 042b: 642 */ 0x00, 0x0B /* - terminal marker 11 - */, /* pos 042d: 643 */ 0xF2 /* 'r' -> */, /* pos 042e: 644 */ 0xEF /* 'o' -> */, /* pos 042f: 645 */ 0xF4 /* 't' -> */, /* pos 0430: 646 */ 0xEF /* 'o' -> */, /* pos 0431: 647 */ 0xE3 /* 'c' -> */, /* pos 0432: 648 */ 0xEF /* 'o' -> */, /* pos 0433: 649 */ 0xEC /* 'l' -> */, /* pos 0434: 650 */ 0xBA /* ':' -> */, /* pos 0435: 651 */ 0x00, 0x0C /* - terminal marker 12 - */, /* pos 0437: 652 */ 0xE3 /* 'c' -> */, /* pos 0438: 653 */ 0xE3 /* 'c' -> */, /* pos 0439: 654 */ 0xE5 /* 'e' -> */, /* pos 043a: 655 */ 0xF0 /* 'p' -> */, /* pos 043b: 656 */ 0xF4 /* 't' -> */, /* pos 043c: 657 */ 0xBA /* ':' -> */, /* pos 043d: 658 */ 0x00, 0x0D /* - terminal marker 13 - */, /* pos 043f: 659 */ 0xEF /* 'o' -> */, /* pos 0440: 660 */ 0xEE /* 'n' -> */, /* pos 0441: 661 */ 0xE3 /* 'c' -> */, /* pos 0442: 662 */ 0xE5 /* 'e' -> */, /* pos 0443: 663 */ 0xBA /* ':' -> */, /* pos 0444: 664 */ 0x00, 0x0E /* - terminal marker 14 - */, /* pos 0446: 665 */ 0x00, 0x1F /* - terminal marker 31 - */, /* pos 0448: 666 */ 0xE5 /* 'e' -> */, /* pos 0449: 667 */ 0xF2 /* 'r' -> */, /* pos 044a: 668 */ 0xF3 /* 's' -> */, /* pos 044b: 669 */ 0xE9 /* 'i' -> */, /* pos 044c: 670 */ 0xEF /* 'o' -> */, /* pos 044d: 671 */ 0xEE /* 'n' -> */, /* pos 044e: 672 */ 0xBA /* ':' -> */, /* pos 044f: 673 */ 0x00, 0x20 /* - terminal marker 32 - */, /* pos 0451: 674 */ 0xF2 /* 'r' -> */, /* pos 0452: 675 */ 0xE9 /* 'i' -> */, /* pos 0453: 676 */ 0xE7 /* 'g' -> */, /* pos 0454: 677 */ 0xE9 /* 'i' -> */, /* pos 0455: 678 */ 0xEE /* 'n' -> */, /* pos 0456: 679 */ 0xBA /* ':' -> */, /* pos 0457: 680 */ 0x00, 0x21 /* - terminal marker 33 - */, /* total size 1113 bytes */ #endif #if !defined(LWS_HTTP_HEADERS_ALL) && !defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) && !defined(LWS_ROLE_WS) && defined(LWS_ROLE_H2) /* 0: 0: get */ /* 1: 1: post */ /* 2: 3: host: */ /* 3: 4: connection: */ /* 4: 5: upgrade: */ /* 5: 6: origin: */ /* 6: 8: */ /* 7: 15: http/1.1 */ /* 8: 16: http2-settings: */ /* 9: 17: accept: */ /* 10: 19: if-modified-since: */ /* 11: 20: if-none-match: */ /* 12: 21: accept-encoding: */ /* 13: 22: accept-language: */ /* 14: 23: pragma: */ /* 15: 24: cache-control: */ /* 16: 25: authorization: */ /* 17: 26: cookie: */ /* 18: 27: content-length: */ /* 19: 28: content-type: */ /* 20: 29: date: */ /* 21: 30: range: */ /* 22: 31: referer: */ /* 23: 35: :authority */ /* 24: 36: :method */ /* 25: 37: :path */ /* 26: 38: :scheme */ /* 27: 39: :status */ /* 28: 40: accept-charset: */ /* 29: 41: accept-ranges: */ /* 30: 42: access-control-allow-origin: */ /* 31: 43: age: */ /* 32: 44: allow: */ /* 33: 45: content-disposition: */ /* 34: 46: content-encoding: */ /* 35: 47: content-language: */ /* 36: 48: content-location: */ /* 37: 49: content-range: */ /* 38: 50: etag: */ /* 39: 51: expect: */ /* 40: 52: expires: */ /* 41: 53: from: */ /* 42: 54: if-match: */ /* 43: 55: if-range: */ /* 44: 56: if-unmodified-since: */ /* 45: 57: last-modified: */ /* 46: 58: link: */ /* 47: 59: location: */ /* 48: 60: max-forwards: */ /* 49: 61: proxy-authenticate: */ /* 50: 62: proxy-authorization: */ /* 51: 63: refresh: */ /* 52: 64: retry-after: */ /* 53: 65: server: */ /* 54: 66: set-cookie: */ /* 55: 67: strict-transport-security: */ /* 56: 68: transfer-encoding: */ /* 57: 69: user-agent: */ /* 58: 70: vary: */ /* 59: 71: via: */ /* 60: 72: www-authenticate: */ /* 61: 76: uri-args */ /* 62: 79: http/1.0 */ /* 63: 80: x-forwarded-for: */ /* 64: 81: connect */ /* 65: 82: head */ /* 66: 83: te: */ /* 67: 84: replay-nonce: */ /* 68: 85: :protocol */ /* 69: 86: x-auth-token: */ /* 70: 87: x-amzn-dss-signature: */ /* pos 0000: 0 */ 0x67 /* 'g' */, 0x40, 0x00 /* (to 0x0040 state 1) */, 0x70 /* 'p' */, 0x42, 0x00 /* (to 0x0045 state 5) */, 0x68 /* 'h' */, 0x51, 0x00 /* (to 0x0057 state 10) */, 0x63 /* 'c' */, 0x5D, 0x00 /* (to 0x0066 state 15) */, 0x75 /* 'u' */, 0x7E, 0x00 /* (to 0x008A state 26) */, 0x6F /* 'o' */, 0x8D, 0x00 /* (to 0x009C state 34) */, 0x0D /* '.' */, 0x98, 0x00 /* (to 0x00AA state 41) */, 0x61 /* 'a' */, 0xAD, 0x00 /* (to 0x00C2 state 51) */, 0x69 /* 'i' */, 0xCA, 0x00 /* (to 0x00E2 state 58) */, 0x64 /* 'd' */, 0x73, 0x01 /* (to 0x018E state 160) */, 0x72 /* 'r' */, 0x7C, 0x01 /* (to 0x019A state 165) */, 0x65 /* 'e' */, 0xC8, 0x01 /* (to 0x01E9 state 229) */, 0x66 /* 'f' */, 0xE4, 0x01 /* (to 0x0208 state 245) */, 0x6C /* 'l' */, 0x06, 0x02 /* (to 0x022D state 278) */, 0x73 /* 's' */, 0x4B, 0x02 /* (to 0x0275 state 321) */, 0x74 /* 't' */, 0x69, 0x02 /* (to 0x0296 state 337) */, 0x78 /* 'x' */, 0x8A, 0x02 /* (to 0x02BA state 364) */, 0x6D /* 'm' */, 0x14, 0x03 /* (to 0x0347 state 474) */, 0x76 /* 'v' */, 0x6D, 0x03 /* (to 0x03A3 state 549) */, 0x77 /* 'w' */, 0x7A, 0x03 /* (to 0x03B3 state 557) */, 0x3A /* ':' */, 0x32, 0x04 /* (to 0x046E state 692) */, 0x08, /* fail */ /* pos 0040: 1 */ 0xE5 /* 'e' -> */, /* pos 0041: 2 */ 0xF4 /* 't' -> */, /* pos 0042: 3 */ 0xA0 /* ' ' -> */, /* pos 0043: 4 */ 0x00, 0x00 /* - terminal marker 0 - */, /* pos 0045: 5 */ 0x6F /* 'o' */, 0x0D, 0x00 /* (to 0x0052 state 6) */, 0x72 /* 'r' */, 0xEC, 0x00 /* (to 0x0134 state 106) */, 0x61 /* 'a' */, 0x7A, 0x03 /* (to 0x03C5 state 574) */, 0x75 /* 'u' */, 0x7C, 0x03 /* (to 0x03CA state 578) */, 0x08, /* fail */ /* pos 0052: 6 */ 0xF3 /* 's' -> */, /* pos 0053: 7 */ 0xF4 /* 't' -> */, /* pos 0054: 8 */ 0xA0 /* ' ' -> */, /* pos 0055: 9 */ 0x00, 0x01 /* - terminal marker 1 - */, /* pos 0057: 10 */ 0x6F /* 'o' */, 0x0A, 0x00 /* (to 0x0061 state 11) */, 0x74 /* 't' */, 0x53, 0x00 /* (to 0x00AD state 43) */, 0x65 /* 'e' */, 0x79, 0x02 /* (to 0x02D6 state 381) */, 0x08, /* fail */ /* pos 0061: 11 */ 0xF3 /* 's' -> */, /* pos 0062: 12 */ 0xF4 /* 't' -> */, /* pos 0063: 13 */ 0xBA /* ':' -> */, /* pos 0064: 14 */ 0x00, 0x02 /* - terminal marker 2 - */, /* pos 0066: 15 */ 0x6F /* 'o' */, 0x07, 0x00 /* (to 0x006D state 16) */, 0x61 /* 'a' */, 0xD8, 0x00 /* (to 0x0141 state 112) */, 0x08, /* fail */ /* pos 006d: 16 */ 0x6E /* 'n' */, 0x07, 0x00 /* (to 0x0074 state 17) */, 0x6F /* 'o' */, 0xED, 0x00 /* (to 0x015D state 138) */, 0x08, /* fail */ /* pos 0074: 17 */ 0x6E /* 'n' */, 0x07, 0x00 /* (to 0x007B state 18) */, 0x74 /* 't' */, 0xEC, 0x00 /* (to 0x0163 state 143) */, 0x08, /* fail */ /* pos 007b: 18 */ 0xE5 /* 'e' -> */, /* pos 007c: 19 */ 0xE3 /* 'c' -> */, /* pos 007d: 20 */ 0xF4 /* 't' -> */, /* pos 007e: 21 */ 0x69 /* 'i' */, 0x07, 0x00 /* (to 0x0085 state 22) */, 0x20 /* ' ' */, 0x53, 0x02 /* (to 0x02D4 state 380) */, 0x08, /* fail */ /* pos 0085: 22 */ 0xEF /* 'o' -> */, /* pos 0086: 23 */ 0xEE /* 'n' -> */, /* pos 0087: 24 */ 0xBA /* ':' -> */, /* pos 0088: 25 */ 0x00, 0x03 /* - terminal marker 3 - */, /* pos 008a: 26 */ 0x70 /* 'p' */, 0x0A, 0x00 /* (to 0x0094 state 27) */, 0x72 /* 'r' */, 0x22, 0x02 /* (to 0x02AF state 355) */, 0x73 /* 's' */, 0x08, 0x03 /* (to 0x0398 state 539) */, 0x08, /* fail */ /* pos 0094: 27 */ 0xE7 /* 'g' -> */, /* pos 0095: 28 */ 0xF2 /* 'r' -> */, /* pos 0096: 29 */ 0xE1 /* 'a' -> */, /* pos 0097: 30 */ 0xE4 /* 'd' -> */, /* pos 0098: 31 */ 0xE5 /* 'e' -> */, /* pos 0099: 32 */ 0xBA /* ':' -> */, /* pos 009a: 33 */ 0x00, 0x04 /* - terminal marker 4 - */, /* pos 009c: 34 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x00A3 state 35) */, 0x70 /* 'p' */, 0x61, 0x02 /* (to 0x0300 state 414) */, 0x08, /* fail */ /* pos 00a3: 35 */ 0xE9 /* 'i' -> */, /* pos 00a4: 36 */ 0xE7 /* 'g' -> */, /* pos 00a5: 37 */ 0xE9 /* 'i' -> */, /* pos 00a6: 38 */ 0xEE /* 'n' -> */, /* pos 00a7: 39 */ 0xBA /* ':' -> */, /* pos 00a8: 40 */ 0x00, 0x05 /* - terminal marker 5 - */, /* pos 00aa: 41 */ 0x8A /* '.' -> */, /* pos 00ab: 42 */ 0x00, 0x06 /* - terminal marker 6 - */, /* pos 00ad: 43 */ 0xF4 /* 't' -> */, /* pos 00ae: 44 */ 0xF0 /* 'p' -> */, /* pos 00af: 45 */ 0x2F /* '/' */, 0x07, 0x00 /* (to 0x00B6 state 46) */, 0x32 /* '2' */, 0xB0, 0x03 /* (to 0x0462 state 681) */, 0x08, /* fail */ /* pos 00b6: 46 */ 0xB1 /* '1' -> */, /* pos 00b7: 47 */ 0xAE /* '.' -> */, /* pos 00b8: 48 */ 0x31 /* '1' */, 0x07, 0x00 /* (to 0x00BF state 49) */, 0x30 /* '0' */, 0xFC, 0x01 /* (to 0x02B7 state 362) */, 0x08, /* fail */ /* pos 00bf: 49 */ 0xA0 /* ' ' -> */, /* pos 00c0: 50 */ 0x00, 0x07 /* - terminal marker 7 - */, /* pos 00c2: 51 */ 0x63 /* 'c' */, 0x0D, 0x00 /* (to 0x00CF state 52) */, 0x75 /* 'u' */, 0x8A, 0x00 /* (to 0x014F state 125) */, 0x67 /* 'g' */, 0xE7, 0x00 /* (to 0x01AF state 178) */, 0x6C /* 'l' */, 0xE8, 0x00 /* (to 0x01B3 state 181) */, 0x08, /* fail */ /* pos 00cf: 52 */ 0xE3 /* 'c' -> */, /* pos 00d0: 53 */ 0xE5 /* 'e' -> */, /* pos 00d1: 54 */ 0x70 /* 'p' */, 0x07, 0x00 /* (to 0x00D8 state 55) */, 0x73 /* 's' */, 0x34, 0x02 /* (to 0x0308 state 421) */, 0x08, /* fail */ /* pos 00d8: 55 */ 0xF4 /* 't' -> */, /* pos 00d9: 56 */ 0x3A /* ':' */, 0x07, 0x00 /* (to 0x00E0 state 57) */, 0x2D /* '-' */, 0x37, 0x00 /* (to 0x0113 state 87) */, 0x08, /* fail */ /* pos 00e0: 57 */ 0x00, 0x09 /* - terminal marker 9 - */, /* pos 00e2: 58 */ 0xE6 /* 'f' -> */, /* pos 00e3: 59 */ 0xAD /* '-' -> */, /* pos 00e4: 60 */ 0x6D /* 'm' */, 0x0D, 0x00 /* (to 0x00F1 state 61) */, 0x6E /* 'n' */, 0x20, 0x00 /* (to 0x0107 state 76) */, 0x72 /* 'r' */, 0x2A, 0x01 /* (to 0x0214 state 255) */, 0x75 /* 'u' */, 0x2E, 0x01 /* (to 0x021B state 261) */, 0x08, /* fail */ /* pos 00f1: 61 */ 0x6F /* 'o' */, 0x07, 0x00 /* (to 0x00F8 state 62) */, 0x61 /* 'a' */, 0x1A, 0x01 /* (to 0x020E state 250) */, 0x08, /* fail */ /* pos 00f8: 62 */ 0xE4 /* 'd' -> */, /* pos 00f9: 63 */ 0xE9 /* 'i' -> */, /* pos 00fa: 64 */ 0xE6 /* 'f' -> */, /* pos 00fb: 65 */ 0xE9 /* 'i' -> */, /* pos 00fc: 66 */ 0xE5 /* 'e' -> */, /* pos 00fd: 67 */ 0xE4 /* 'd' -> */, /* pos 00fe: 68 */ 0xAD /* '-' -> */, /* pos 00ff: 69 */ 0xF3 /* 's' -> */, /* pos 0100: 70 */ 0xE9 /* 'i' -> */, /* pos 0101: 71 */ 0xEE /* 'n' -> */, /* pos 0102: 72 */ 0xE3 /* 'c' -> */, /* pos 0103: 73 */ 0xE5 /* 'e' -> */, /* pos 0104: 74 */ 0xBA /* ':' -> */, /* pos 0105: 75 */ 0x00, 0x0A /* - terminal marker 10 - */, /* pos 0107: 76 */ 0xEF /* 'o' -> */, /* pos 0108: 77 */ 0xEE /* 'n' -> */, /* pos 0109: 78 */ 0xE5 /* 'e' -> */, /* pos 010a: 79 */ 0xAD /* '-' -> */, /* pos 010b: 80 */ 0xED /* 'm' -> */, /* pos 010c: 81 */ 0xE1 /* 'a' -> */, /* pos 010d: 82 */ 0xF4 /* 't' -> */, /* pos 010e: 83 */ 0xE3 /* 'c' -> */, /* pos 010f: 84 */ 0xE8 /* 'h' -> */, /* pos 0110: 85 */ 0xBA /* ':' -> */, /* pos 0111: 86 */ 0x00, 0x0B /* - terminal marker 11 - */, /* pos 0113: 87 */ 0x65 /* 'e' */, 0x0D, 0x00 /* (to 0x0120 state 88) */, 0x6C /* 'l' */, 0x14, 0x00 /* (to 0x012A state 97) */, 0x72 /* 'r' */, 0x8E, 0x00 /* (to 0x01A7 state 171) */, 0x63 /* 'c' */, 0x14, 0x02 /* (to 0x0330 state 453) */, 0x08, /* fail */ /* pos 0120: 88 */ 0xEE /* 'n' -> */, /* pos 0121: 89 */ 0xE3 /* 'c' -> */, /* pos 0122: 90 */ 0xEF /* 'o' -> */, /* pos 0123: 91 */ 0xE4 /* 'd' -> */, /* pos 0124: 92 */ 0xE9 /* 'i' -> */, /* pos 0125: 93 */ 0xEE /* 'n' -> */, /* pos 0126: 94 */ 0xE7 /* 'g' -> */, /* pos 0127: 95 */ 0xBA /* ':' -> */, /* pos 0128: 96 */ 0x00, 0x0C /* - terminal marker 12 - */, /* pos 012a: 97 */ 0xE1 /* 'a' -> */, /* pos 012b: 98 */ 0xEE /* 'n' -> */, /* pos 012c: 99 */ 0xE7 /* 'g' -> */, /* pos 012d: 100 */ 0xF5 /* 'u' -> */, /* pos 012e: 101 */ 0xE1 /* 'a' -> */, /* pos 012f: 102 */ 0xE7 /* 'g' -> */, /* pos 0130: 103 */ 0xE5 /* 'e' -> */, /* pos 0131: 104 */ 0xBA /* ':' -> */, /* pos 0132: 105 */ 0x00, 0x0D /* - terminal marker 13 - */, /* pos 0134: 106 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x013B state 107) */, 0x6F /* 'o' */, 0x1E, 0x02 /* (to 0x0355 state 487) */, 0x08, /* fail */ /* pos 013b: 107 */ 0xE7 /* 'g' -> */, /* pos 013c: 108 */ 0xED /* 'm' -> */, /* pos 013d: 109 */ 0xE1 /* 'a' -> */, /* pos 013e: 110 */ 0xBA /* ':' -> */, /* pos 013f: 111 */ 0x00, 0x0E /* - terminal marker 14 - */, /* pos 0141: 112 */ 0xE3 /* 'c' -> */, /* pos 0142: 113 */ 0xE8 /* 'h' -> */, /* pos 0143: 114 */ 0xE5 /* 'e' -> */, /* pos 0144: 115 */ 0xAD /* '-' -> */, /* pos 0145: 116 */ 0xE3 /* 'c' -> */, /* pos 0146: 117 */ 0xEF /* 'o' -> */, /* pos 0147: 118 */ 0xEE /* 'n' -> */, /* pos 0148: 119 */ 0xF4 /* 't' -> */, /* pos 0149: 120 */ 0xF2 /* 'r' -> */, /* pos 014a: 121 */ 0xEF /* 'o' -> */, /* pos 014b: 122 */ 0xEC /* 'l' -> */, /* pos 014c: 123 */ 0xBA /* ':' -> */, /* pos 014d: 124 */ 0x00, 0x0F /* - terminal marker 15 - */, /* pos 014f: 125 */ 0xF4 /* 't' -> */, /* pos 0150: 126 */ 0xE8 /* 'h' -> */, /* pos 0151: 127 */ 0xEF /* 'o' -> */, /* pos 0152: 128 */ 0xF2 /* 'r' -> */, /* pos 0153: 129 */ 0xE9 /* 'i' -> */, /* pos 0154: 130 */ 0xFA /* 'z' -> */, /* pos 0155: 131 */ 0xE1 /* 'a' -> */, /* pos 0156: 132 */ 0xF4 /* 't' -> */, /* pos 0157: 133 */ 0xE9 /* 'i' -> */, /* pos 0158: 134 */ 0xEF /* 'o' -> */, /* pos 0159: 135 */ 0xEE /* 'n' -> */, /* pos 015a: 136 */ 0xBA /* ':' -> */, /* pos 015b: 137 */ 0x00, 0x10 /* - terminal marker 16 - */, /* pos 015d: 138 */ 0xEB /* 'k' -> */, /* pos 015e: 139 */ 0xE9 /* 'i' -> */, /* pos 015f: 140 */ 0xE5 /* 'e' -> */, /* pos 0160: 141 */ 0xBA /* ':' -> */, /* pos 0161: 142 */ 0x00, 0x11 /* - terminal marker 17 - */, /* pos 0163: 143 */ 0xE5 /* 'e' -> */, /* pos 0164: 144 */ 0xEE /* 'n' -> */, /* pos 0165: 145 */ 0xF4 /* 't' -> */, /* pos 0166: 146 */ 0xAD /* '-' -> */, /* pos 0167: 147 */ 0x6C /* 'l' */, 0x10, 0x00 /* (to 0x0177 state 148) */, 0x74 /* 't' */, 0x1E, 0x00 /* (to 0x0188 state 155) */, 0x64 /* 'd' */, 0x4C, 0x00 /* (to 0x01B9 state 186) */, 0x65 /* 'e' */, 0x56, 0x00 /* (to 0x01C6 state 198) */, 0x72 /* 'r' */, 0x6F, 0x00 /* (to 0x01E2 state 223) */, 0x08, /* fail */ /* pos 0177: 148 */ 0x65 /* 'e' */, 0x0A, 0x00 /* (to 0x0181 state 149) */, 0x61 /* 'a' */, 0x56, 0x00 /* (to 0x01D0 state 207) */, 0x6F /* 'o' */, 0x5C, 0x00 /* (to 0x01D9 state 215) */, 0x08, /* fail */ /* pos 0181: 149 */ 0xEE /* 'n' -> */, /* pos 0182: 150 */ 0xE7 /* 'g' -> */, /* pos 0183: 151 */ 0xF4 /* 't' -> */, /* pos 0184: 152 */ 0xE8 /* 'h' -> */, /* pos 0185: 153 */ 0xBA /* ':' -> */, /* pos 0186: 154 */ 0x00, 0x12 /* - terminal marker 18 - */, /* pos 0188: 155 */ 0xF9 /* 'y' -> */, /* pos 0189: 156 */ 0xF0 /* 'p' -> */, /* pos 018a: 157 */ 0xE5 /* 'e' -> */, /* pos 018b: 158 */ 0xBA /* ':' -> */, /* pos 018c: 159 */ 0x00, 0x13 /* - terminal marker 19 - */, /* pos 018e: 160 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x0195 state 161) */, 0x65 /* 'e' */, 0x3C, 0x02 /* (to 0x03CD state 580) */, 0x08, /* fail */ /* pos 0195: 161 */ 0xF4 /* 't' -> */, /* pos 0196: 162 */ 0xE5 /* 'e' -> */, /* pos 0197: 163 */ 0xBA /* ':' -> */, /* pos 0198: 164 */ 0x00, 0x14 /* - terminal marker 20 - */, /* pos 019a: 165 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x01A1 state 166) */, 0x65 /* 'e' */, 0xB6, 0x00 /* (to 0x0253 state 304) */, 0x08, /* fail */ /* pos 01a1: 166 */ 0xEE /* 'n' -> */, /* pos 01a2: 167 */ 0xE7 /* 'g' -> */, /* pos 01a3: 168 */ 0xE5 /* 'e' -> */, /* pos 01a4: 169 */ 0xBA /* ':' -> */, /* pos 01a5: 170 */ 0x00, 0x15 /* - terminal marker 21 - */, /* pos 01a7: 171 */ 0xE1 /* 'a' -> */, /* pos 01a8: 172 */ 0xEE /* 'n' -> */, /* pos 01a9: 173 */ 0xE7 /* 'g' -> */, /* pos 01aa: 174 */ 0xE5 /* 'e' -> */, /* pos 01ab: 175 */ 0xF3 /* 's' -> */, /* pos 01ac: 176 */ 0xBA /* ':' -> */, /* pos 01ad: 177 */ 0x00, 0x1D /* - terminal marker 29 - */, /* pos 01af: 178 */ 0xE5 /* 'e' -> */, /* pos 01b0: 179 */ 0xBA /* ':' -> */, /* pos 01b1: 180 */ 0x00, 0x1F /* - terminal marker 31 - */, /* pos 01b3: 181 */ 0xEC /* 'l' -> */, /* pos 01b4: 182 */ 0xEF /* 'o' -> */, /* pos 01b5: 183 */ 0xF7 /* 'w' -> */, /* pos 01b6: 184 */ 0xBA /* ':' -> */, /* pos 01b7: 185 */ 0x00, 0x20 /* - terminal marker 32 - */, /* pos 01b9: 186 */ 0xE9 /* 'i' -> */, /* pos 01ba: 187 */ 0xF3 /* 's' -> */, /* pos 01bb: 188 */ 0xF0 /* 'p' -> */, /* pos 01bc: 189 */ 0xEF /* 'o' -> */, /* pos 01bd: 190 */ 0xF3 /* 's' -> */, /* pos 01be: 191 */ 0xE9 /* 'i' -> */, /* pos 01bf: 192 */ 0xF4 /* 't' -> */, /* pos 01c0: 193 */ 0xE9 /* 'i' -> */, /* pos 01c1: 194 */ 0xEF /* 'o' -> */, /* pos 01c2: 195 */ 0xEE /* 'n' -> */, /* pos 01c3: 196 */ 0xBA /* ':' -> */, /* pos 01c4: 197 */ 0x00, 0x21 /* - terminal marker 33 - */, /* pos 01c6: 198 */ 0xEE /* 'n' -> */, /* pos 01c7: 199 */ 0xE3 /* 'c' -> */, /* pos 01c8: 200 */ 0xEF /* 'o' -> */, /* pos 01c9: 201 */ 0xE4 /* 'd' -> */, /* pos 01ca: 202 */ 0xE9 /* 'i' -> */, /* pos 01cb: 203 */ 0xEE /* 'n' -> */, /* pos 01cc: 204 */ 0xE7 /* 'g' -> */, /* pos 01cd: 205 */ 0xBA /* ':' -> */, /* pos 01ce: 206 */ 0x00, 0x22 /* - terminal marker 34 - */, /* pos 01d0: 207 */ 0xEE /* 'n' -> */, /* pos 01d1: 208 */ 0xE7 /* 'g' -> */, /* pos 01d2: 209 */ 0xF5 /* 'u' -> */, /* pos 01d3: 210 */ 0xE1 /* 'a' -> */, /* pos 01d4: 211 */ 0xE7 /* 'g' -> */, /* pos 01d5: 212 */ 0xE5 /* 'e' -> */, /* pos 01d6: 213 */ 0xBA /* ':' -> */, /* pos 01d7: 214 */ 0x00, 0x23 /* - terminal marker 35 - */, /* pos 01d9: 215 */ 0xE3 /* 'c' -> */, /* pos 01da: 216 */ 0xE1 /* 'a' -> */, /* pos 01db: 217 */ 0xF4 /* 't' -> */, /* pos 01dc: 218 */ 0xE9 /* 'i' -> */, /* pos 01dd: 219 */ 0xEF /* 'o' -> */, /* pos 01de: 220 */ 0xEE /* 'n' -> */, /* pos 01df: 221 */ 0xBA /* ':' -> */, /* pos 01e0: 222 */ 0x00, 0x24 /* - terminal marker 36 - */, /* pos 01e2: 223 */ 0xE1 /* 'a' -> */, /* pos 01e3: 224 */ 0xEE /* 'n' -> */, /* pos 01e4: 225 */ 0xE7 /* 'g' -> */, /* pos 01e5: 226 */ 0xE5 /* 'e' -> */, /* pos 01e6: 227 */ 0xBA /* ':' -> */, /* pos 01e7: 228 */ 0x00, 0x25 /* - terminal marker 37 - */, /* pos 01e9: 229 */ 0x74 /* 't' */, 0x07, 0x00 /* (to 0x01F0 state 230) */, 0x78 /* 'x' */, 0x09, 0x00 /* (to 0x01F5 state 234) */, 0x08, /* fail */ /* pos 01f0: 230 */ 0xE1 /* 'a' -> */, /* pos 01f1: 231 */ 0xE7 /* 'g' -> */, /* pos 01f2: 232 */ 0xBA /* ':' -> */, /* pos 01f3: 233 */ 0x00, 0x26 /* - terminal marker 38 - */, /* pos 01f5: 234 */ 0xF0 /* 'p' -> */, /* pos 01f6: 235 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x01FD state 236) */, 0x69 /* 'i' */, 0x09, 0x00 /* (to 0x0202 state 240) */, 0x08, /* fail */ /* pos 01fd: 236 */ 0xE3 /* 'c' -> */, /* pos 01fe: 237 */ 0xF4 /* 't' -> */, /* pos 01ff: 238 */ 0xBA /* ':' -> */, /* pos 0200: 239 */ 0x00, 0x27 /* - terminal marker 39 - */, /* pos 0202: 240 */ 0xF2 /* 'r' -> */, /* pos 0203: 241 */ 0xE5 /* 'e' -> */, /* pos 0204: 242 */ 0xF3 /* 's' -> */, /* pos 0205: 243 */ 0xBA /* ':' -> */, /* pos 0206: 244 */ 0x00, 0x28 /* - terminal marker 40 - */, /* pos 0208: 245 */ 0xF2 /* 'r' -> */, /* pos 0209: 246 */ 0xEF /* 'o' -> */, /* pos 020a: 247 */ 0xED /* 'm' -> */, /* pos 020b: 248 */ 0xBA /* ':' -> */, /* pos 020c: 249 */ 0x00, 0x29 /* - terminal marker 41 - */, /* pos 020e: 250 */ 0xF4 /* 't' -> */, /* pos 020f: 251 */ 0xE3 /* 'c' -> */, /* pos 0210: 252 */ 0xE8 /* 'h' -> */, /* pos 0211: 253 */ 0xBA /* ':' -> */, /* pos 0212: 254 */ 0x00, 0x2A /* - terminal marker 42 - */, /* pos 0214: 255 */ 0xE1 /* 'a' -> */, /* pos 0215: 256 */ 0xEE /* 'n' -> */, /* pos 0216: 257 */ 0xE7 /* 'g' -> */, /* pos 0217: 258 */ 0xE5 /* 'e' -> */, /* pos 0218: 259 */ 0xBA /* ':' -> */, /* pos 0219: 260 */ 0x00, 0x2B /* - terminal marker 43 - */, /* pos 021b: 261 */ 0xEE /* 'n' -> */, /* pos 021c: 262 */ 0xED /* 'm' -> */, /* pos 021d: 263 */ 0xEF /* 'o' -> */, /* pos 021e: 264 */ 0xE4 /* 'd' -> */, /* pos 021f: 265 */ 0xE9 /* 'i' -> */, /* pos 0220: 266 */ 0xE6 /* 'f' -> */, /* pos 0221: 267 */ 0xE9 /* 'i' -> */, /* pos 0222: 268 */ 0xE5 /* 'e' -> */, /* pos 0223: 269 */ 0xE4 /* 'd' -> */, /* pos 0224: 270 */ 0xAD /* '-' -> */, /* pos 0225: 271 */ 0xF3 /* 's' -> */, /* pos 0226: 272 */ 0xE9 /* 'i' -> */, /* pos 0227: 273 */ 0xEE /* 'n' -> */, /* pos 0228: 274 */ 0xE3 /* 'c' -> */, /* pos 0229: 275 */ 0xE5 /* 'e' -> */, /* pos 022a: 276 */ 0xBA /* ':' -> */, /* pos 022b: 277 */ 0x00, 0x2C /* - terminal marker 44 - */, /* pos 022d: 278 */ 0x61 /* 'a' */, 0x0A, 0x00 /* (to 0x0237 state 279) */, 0x69 /* 'i' */, 0x15, 0x00 /* (to 0x0245 state 292) */, 0x6F /* 'o' */, 0x17, 0x00 /* (to 0x024A state 296) */, 0x08, /* fail */ /* pos 0237: 279 */ 0xF3 /* 's' -> */, /* pos 0238: 280 */ 0xF4 /* 't' -> */, /* pos 0239: 281 */ 0xAD /* '-' -> */, /* pos 023a: 282 */ 0xED /* 'm' -> */, /* pos 023b: 283 */ 0xEF /* 'o' -> */, /* pos 023c: 284 */ 0xE4 /* 'd' -> */, /* pos 023d: 285 */ 0xE9 /* 'i' -> */, /* pos 023e: 286 */ 0xE6 /* 'f' -> */, /* pos 023f: 287 */ 0xE9 /* 'i' -> */, /* pos 0240: 288 */ 0xE5 /* 'e' -> */, /* pos 0241: 289 */ 0xE4 /* 'd' -> */, /* pos 0242: 290 */ 0xBA /* ':' -> */, /* pos 0243: 291 */ 0x00, 0x2D /* - terminal marker 45 - */, /* pos 0245: 292 */ 0xEE /* 'n' -> */, /* pos 0246: 293 */ 0xEB /* 'k' -> */, /* pos 0247: 294 */ 0xBA /* ':' -> */, /* pos 0248: 295 */ 0x00, 0x2E /* - terminal marker 46 - */, /* pos 024a: 296 */ 0xE3 /* 'c' -> */, /* pos 024b: 297 */ 0xE1 /* 'a' -> */, /* pos 024c: 298 */ 0xF4 /* 't' -> */, /* pos 024d: 299 */ 0xE9 /* 'i' -> */, /* pos 024e: 300 */ 0xEF /* 'o' -> */, /* pos 024f: 301 */ 0xEE /* 'n' -> */, /* pos 0250: 302 */ 0xBA /* ':' -> */, /* pos 0251: 303 */ 0x00, 0x2F /* - terminal marker 47 - */, /* pos 0253: 304 */ 0x66 /* 'f' */, 0x0A, 0x00 /* (to 0x025D state 305) */, 0x74 /* 't' */, 0x14, 0x00 /* (to 0x026A state 311) */, 0x70 /* 'p' */, 0x88, 0x01 /* (to 0x03E1 state 596) */, 0x08, /* fail */ /* pos 025d: 305 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x0264 state 306) */, 0x65 /* 'e' */, 0xCA, 0x00 /* (to 0x032A state 448) */, 0x08, /* fail */ /* pos 0264: 306 */ 0xE5 /* 'e' -> */, /* pos 0265: 307 */ 0xF3 /* 's' -> */, /* pos 0266: 308 */ 0xE8 /* 'h' -> */, /* pos 0267: 309 */ 0xBA /* ':' -> */, /* pos 0268: 310 */ 0x00, 0x33 /* - terminal marker 51 - */, /* pos 026a: 311 */ 0xF2 /* 'r' -> */, /* pos 026b: 312 */ 0xF9 /* 'y' -> */, /* pos 026c: 313 */ 0xAD /* '-' -> */, /* pos 026d: 314 */ 0xE1 /* 'a' -> */, /* pos 026e: 315 */ 0xE6 /* 'f' -> */, /* pos 026f: 316 */ 0xF4 /* 't' -> */, /* pos 0270: 317 */ 0xE5 /* 'e' -> */, /* pos 0271: 318 */ 0xF2 /* 'r' -> */, /* pos 0272: 319 */ 0xBA /* ':' -> */, /* pos 0273: 320 */ 0x00, 0x34 /* - terminal marker 52 - */, /* pos 0275: 321 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x027C state 322) */, 0x74 /* 't' */, 0x06, 0x01 /* (to 0x037E state 514) */, 0x08, /* fail */ /* pos 027c: 322 */ 0x72 /* 'r' */, 0x0A, 0x00 /* (to 0x0286 state 323) */, 0x74 /* 't' */, 0x0D, 0x00 /* (to 0x028C state 328) */, 0x63 /* 'c' */, 0x6B, 0x01 /* (to 0x03ED state 607) */, 0x08, /* fail */ /* pos 0286: 323 */ 0xF6 /* 'v' -> */, /* pos 0287: 324 */ 0xE5 /* 'e' -> */, /* pos 0288: 325 */ 0xF2 /* 'r' -> */, /* pos 0289: 326 */ 0xBA /* ':' -> */, /* pos 028a: 327 */ 0x00, 0x35 /* - terminal marker 53 - */, /* pos 028c: 328 */ 0xAD /* '-' -> */, /* pos 028d: 329 */ 0xE3 /* 'c' -> */, /* pos 028e: 330 */ 0xEF /* 'o' -> */, /* pos 028f: 331 */ 0xEF /* 'o' -> */, /* pos 0290: 332 */ 0xEB /* 'k' -> */, /* pos 0291: 333 */ 0xE9 /* 'i' -> */, /* pos 0292: 334 */ 0xE5 /* 'e' -> */, /* pos 0293: 335 */ 0xBA /* ':' -> */, /* pos 0294: 336 */ 0x00, 0x36 /* - terminal marker 54 - */, /* pos 0296: 337 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x029D state 338) */, 0x65 /* 'e' */, 0x45, 0x01 /* (to 0x03DE state 594) */, 0x08, /* fail */ /* pos 029d: 338 */ 0xE1 /* 'a' -> */, /* pos 029e: 339 */ 0xEE /* 'n' -> */, /* pos 029f: 340 */ 0xF3 /* 's' -> */, /* pos 02a0: 341 */ 0xE6 /* 'f' -> */, /* pos 02a1: 342 */ 0xE5 /* 'e' -> */, /* pos 02a2: 343 */ 0xF2 /* 'r' -> */, /* pos 02a3: 344 */ 0xAD /* '-' -> */, /* pos 02a4: 345 */ 0xE5 /* 'e' -> */, /* pos 02a5: 346 */ 0xEE /* 'n' -> */, /* pos 02a6: 347 */ 0xE3 /* 'c' -> */, /* pos 02a7: 348 */ 0xEF /* 'o' -> */, /* pos 02a8: 349 */ 0xE4 /* 'd' -> */, /* pos 02a9: 350 */ 0xE9 /* 'i' -> */, /* pos 02aa: 351 */ 0xEE /* 'n' -> */, /* pos 02ab: 352 */ 0xE7 /* 'g' -> */, /* pos 02ac: 353 */ 0xBA /* ':' -> */, /* pos 02ad: 354 */ 0x00, 0x38 /* - terminal marker 56 - */, /* pos 02af: 355 */ 0xE9 /* 'i' -> */, /* pos 02b0: 356 */ 0xAD /* '-' -> */, /* pos 02b1: 357 */ 0xE1 /* 'a' -> */, /* pos 02b2: 358 */ 0xF2 /* 'r' -> */, /* pos 02b3: 359 */ 0xE7 /* 'g' -> */, /* pos 02b4: 360 */ 0xF3 /* 's' -> */, /* pos 02b5: 361 */ 0x00, 0x3D /* - terminal marker 61 - */, /* pos 02b7: 362 */ 0xA0 /* ' ' -> */, /* pos 02b8: 363 */ 0x00, 0x3E /* - terminal marker 62 - */, /* pos 02ba: 364 */ 0xAD /* '-' -> */, /* pos 02bb: 365 */ 0x66 /* 'f' */, 0x0A, 0x00 /* (to 0x02C5 state 366) */, 0x61 /* 'a' */, 0x1D, 0x00 /* (to 0x02DB state 385) */, 0x72 /* 'r' */, 0x14, 0x01 /* (to 0x03D5 state 586) */, 0x08, /* fail */ /* pos 02c5: 366 */ 0xEF /* 'o' -> */, /* pos 02c6: 367 */ 0xF2 /* 'r' -> */, /* pos 02c7: 368 */ 0xF7 /* 'w' -> */, /* pos 02c8: 369 */ 0xE1 /* 'a' -> */, /* pos 02c9: 370 */ 0xF2 /* 'r' -> */, /* pos 02ca: 371 */ 0xE4 /* 'd' -> */, /* pos 02cb: 372 */ 0xE5 /* 'e' -> */, /* pos 02cc: 373 */ 0xE4 /* 'd' -> */, /* pos 02cd: 374 */ 0xAD /* '-' -> */, /* pos 02ce: 375 */ 0xE6 /* 'f' -> */, /* pos 02cf: 376 */ 0xEF /* 'o' -> */, /* pos 02d0: 377 */ 0xF2 /* 'r' -> */, /* pos 02d1: 378 */ 0xBA /* ':' -> */, /* pos 02d2: 379 */ 0x00, 0x3F /* - terminal marker 63 - */, /* pos 02d4: 380 */ 0x00, 0x40 /* - terminal marker 64 - */, /* pos 02d6: 381 */ 0xE1 /* 'a' -> */, /* pos 02d7: 382 */ 0xE4 /* 'd' -> */, /* pos 02d8: 383 */ 0xA0 /* ' ' -> */, /* pos 02d9: 384 */ 0x00, 0x41 /* - terminal marker 65 - */, /* pos 02db: 385 */ 0x75 /* 'u' */, 0x07, 0x00 /* (to 0x02E2 state 386) */, 0x6D /* 'm' */, 0x0F, 0x00 /* (to 0x02ED state 396) */, 0x08, /* fail */ /* pos 02e2: 386 */ 0xF4 /* 't' -> */, /* pos 02e3: 387 */ 0xE8 /* 'h' -> */, /* pos 02e4: 388 */ 0xAD /* '-' -> */, /* pos 02e5: 389 */ 0xF4 /* 't' -> */, /* pos 02e6: 390 */ 0xEF /* 'o' -> */, /* pos 02e7: 391 */ 0xEB /* 'k' -> */, /* pos 02e8: 392 */ 0xE5 /* 'e' -> */, /* pos 02e9: 393 */ 0xEE /* 'n' -> */, /* pos 02ea: 394 */ 0xBA /* ':' -> */, /* pos 02eb: 395 */ 0x00, 0x45 /* - terminal marker 69 - */, /* pos 02ed: 396 */ 0xFA /* 'z' -> */, /* pos 02ee: 397 */ 0xEE /* 'n' -> */, /* pos 02ef: 398 */ 0xAD /* '-' -> */, /* pos 02f0: 399 */ 0xE4 /* 'd' -> */, /* pos 02f1: 400 */ 0xF3 /* 's' -> */, /* pos 02f2: 401 */ 0xF3 /* 's' -> */, /* pos 02f3: 402 */ 0xAD /* '-' -> */, /* pos 02f4: 403 */ 0xF3 /* 's' -> */, /* pos 02f5: 404 */ 0xE9 /* 'i' -> */, /* pos 02f6: 405 */ 0xE7 /* 'g' -> */, /* pos 02f7: 406 */ 0xEE /* 'n' -> */, /* pos 02f8: 407 */ 0xE1 /* 'a' -> */, /* pos 02f9: 408 */ 0xF4 /* 't' -> */, /* pos 02fa: 409 */ 0xF5 /* 'u' -> */, /* pos 02fb: 410 */ 0xF2 /* 'r' -> */, /* pos 02fc: 411 */ 0xE5 /* 'e' -> */, /* pos 02fd: 412 */ 0xBA /* ':' -> */, /* pos 02fe: 413 */ 0x00, 0x46 /* - terminal marker 70 - */, /* pos 0300: 414 */ 0xF4 /* 't' -> */, /* pos 0301: 415 */ 0xE9 /* 'i' -> */, /* pos 0302: 416 */ 0xEF /* 'o' -> */, /* pos 0303: 417 */ 0xEE /* 'n' -> */, /* pos 0304: 418 */ 0xF3 /* 's' -> */, /* pos 0305: 419 */ 0xA0 /* ' ' -> */, /* pos 0306: 420 */ 0x00, 0x02 /* - terminal marker 2 - */, /* pos 0308: 421 */ 0xF3 /* 's' -> */, /* pos 0309: 422 */ 0xAD /* '-' -> */, /* pos 030a: 423 */ 0xE3 /* 'c' -> */, /* pos 030b: 424 */ 0xEF /* 'o' -> */, /* pos 030c: 425 */ 0xEE /* 'n' -> */, /* pos 030d: 426 */ 0xF4 /* 't' -> */, /* pos 030e: 427 */ 0xF2 /* 'r' -> */, /* pos 030f: 428 */ 0xEF /* 'o' -> */, /* pos 0310: 429 */ 0xEC /* 'l' -> */, /* pos 0311: 430 */ 0xAD /* '-' -> */, /* pos 0312: 431 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x0319 state 432) */, 0x61 /* 'a' */, 0x24, 0x00 /* (to 0x0339 state 461) */, 0x08, /* fail */ /* pos 0319: 432 */ 0xE5 /* 'e' -> */, /* pos 031a: 433 */ 0xF1 /* 'q' -> */, /* pos 031b: 434 */ 0xF5 /* 'u' -> */, /* pos 031c: 435 */ 0xE5 /* 'e' -> */, /* pos 031d: 436 */ 0xF3 /* 's' -> */, /* pos 031e: 437 */ 0xF4 /* 't' -> */, /* pos 031f: 438 */ 0xAD /* '-' -> */, /* pos 0320: 439 */ 0xE8 /* 'h' -> */, /* pos 0321: 440 */ 0xE5 /* 'e' -> */, /* pos 0322: 441 */ 0xE1 /* 'a' -> */, /* pos 0323: 442 */ 0xE4 /* 'd' -> */, /* pos 0324: 443 */ 0xE5 /* 'e' -> */, /* pos 0325: 444 */ 0xF2 /* 'r' -> */, /* pos 0326: 445 */ 0xF3 /* 's' -> */, /* pos 0327: 446 */ 0xBA /* ':' -> */, /* pos 0328: 447 */ 0x00, 0x11 /* - terminal marker 17 - */, /* pos 032a: 448 */ 0xF2 /* 'r' -> */, /* pos 032b: 449 */ 0xE5 /* 'e' -> */, /* pos 032c: 450 */ 0xF2 /* 'r' -> */, /* pos 032d: 451 */ 0xBA /* ':' -> */, /* pos 032e: 452 */ 0x00, 0x16 /* - terminal marker 22 - */, /* pos 0330: 453 */ 0xE8 /* 'h' -> */, /* pos 0331: 454 */ 0xE1 /* 'a' -> */, /* pos 0332: 455 */ 0xF2 /* 'r' -> */, /* pos 0333: 456 */ 0xF3 /* 's' -> */, /* pos 0334: 457 */ 0xE5 /* 'e' -> */, /* pos 0335: 458 */ 0xF4 /* 't' -> */, /* pos 0336: 459 */ 0xBA /* ':' -> */, /* pos 0337: 460 */ 0x00, 0x1C /* - terminal marker 28 - */, /* pos 0339: 461 */ 0xEC /* 'l' -> */, /* pos 033a: 462 */ 0xEC /* 'l' -> */, /* pos 033b: 463 */ 0xEF /* 'o' -> */, /* pos 033c: 464 */ 0xF7 /* 'w' -> */, /* pos 033d: 465 */ 0xAD /* '-' -> */, /* pos 033e: 466 */ 0xEF /* 'o' -> */, /* pos 033f: 467 */ 0xF2 /* 'r' -> */, /* pos 0340: 468 */ 0xE9 /* 'i' -> */, /* pos 0341: 469 */ 0xE7 /* 'g' -> */, /* pos 0342: 470 */ 0xE9 /* 'i' -> */, /* pos 0343: 471 */ 0xEE /* 'n' -> */, /* pos 0344: 472 */ 0xBA /* ':' -> */, /* pos 0345: 473 */ 0x00, 0x1E /* - terminal marker 30 - */, /* pos 0347: 474 */ 0xE1 /* 'a' -> */, /* pos 0348: 475 */ 0xF8 /* 'x' -> */, /* pos 0349: 476 */ 0xAD /* '-' -> */, /* pos 034a: 477 */ 0xE6 /* 'f' -> */, /* pos 034b: 478 */ 0xEF /* 'o' -> */, /* pos 034c: 479 */ 0xF2 /* 'r' -> */, /* pos 034d: 480 */ 0xF7 /* 'w' -> */, /* pos 034e: 481 */ 0xE1 /* 'a' -> */, /* pos 034f: 482 */ 0xF2 /* 'r' -> */, /* pos 0350: 483 */ 0xE4 /* 'd' -> */, /* pos 0351: 484 */ 0xF3 /* 's' -> */, /* pos 0352: 485 */ 0xBA /* ':' -> */, /* pos 0353: 486 */ 0x00, 0x30 /* - terminal marker 48 - */, /* pos 0355: 487 */ 0xF8 /* 'x' -> */, /* pos 0356: 488 */ 0xF9 /* 'y' -> */, /* pos 0357: 489 */ 0x2D /* '-' */, 0x07, 0x00 /* (to 0x035E state 490) */, 0x20 /* ' ' */, 0x79, 0x00 /* (to 0x03D3 state 585) */, 0x08, /* fail */ /* pos 035e: 490 */ 0xE1 /* 'a' -> */, /* pos 035f: 491 */ 0xF5 /* 'u' -> */, /* pos 0360: 492 */ 0xF4 /* 't' -> */, /* pos 0361: 493 */ 0xE8 /* 'h' -> */, /* pos 0362: 494 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x0369 state 495) */, 0x6F /* 'o' */, 0x0E, 0x00 /* (to 0x0373 state 504) */, 0x08, /* fail */ /* pos 0369: 495 */ 0xEE /* 'n' -> */, /* pos 036a: 496 */ 0xF4 /* 't' -> */, /* pos 036b: 497 */ 0xE9 /* 'i' -> */, /* pos 036c: 498 */ 0xE3 /* 'c' -> */, /* pos 036d: 499 */ 0xE1 /* 'a' -> */, /* pos 036e: 500 */ 0xF4 /* 't' -> */, /* pos 036f: 501 */ 0xE5 /* 'e' -> */, /* pos 0370: 502 */ 0xBA /* ':' -> */, /* pos 0371: 503 */ 0x00, 0x31 /* - terminal marker 49 - */, /* pos 0373: 504 */ 0xF2 /* 'r' -> */, /* pos 0374: 505 */ 0xE9 /* 'i' -> */, /* pos 0375: 506 */ 0xFA /* 'z' -> */, /* pos 0376: 507 */ 0xE1 /* 'a' -> */, /* pos 0377: 508 */ 0xF4 /* 't' -> */, /* pos 0378: 509 */ 0xE9 /* 'i' -> */, /* pos 0379: 510 */ 0xEF /* 'o' -> */, /* pos 037a: 511 */ 0xEE /* 'n' -> */, /* pos 037b: 512 */ 0xBA /* ':' -> */, /* pos 037c: 513 */ 0x00, 0x32 /* - terminal marker 50 - */, /* pos 037e: 514 */ 0xF2 /* 'r' -> */, /* pos 037f: 515 */ 0xE9 /* 'i' -> */, /* pos 0380: 516 */ 0xE3 /* 'c' -> */, /* pos 0381: 517 */ 0xF4 /* 't' -> */, /* pos 0382: 518 */ 0xAD /* '-' -> */, /* pos 0383: 519 */ 0xF4 /* 't' -> */, /* pos 0384: 520 */ 0xF2 /* 'r' -> */, /* pos 0385: 521 */ 0xE1 /* 'a' -> */, /* pos 0386: 522 */ 0xEE /* 'n' -> */, /* pos 0387: 523 */ 0xF3 /* 's' -> */, /* pos 0388: 524 */ 0xF0 /* 'p' -> */, /* pos 0389: 525 */ 0xEF /* 'o' -> */, /* pos 038a: 526 */ 0xF2 /* 'r' -> */, /* pos 038b: 527 */ 0xF4 /* 't' -> */, /* pos 038c: 528 */ 0xAD /* '-' -> */, /* pos 038d: 529 */ 0xF3 /* 's' -> */, /* pos 038e: 530 */ 0xE5 /* 'e' -> */, /* pos 038f: 531 */ 0xE3 /* 'c' -> */, /* pos 0390: 532 */ 0xF5 /* 'u' -> */, /* pos 0391: 533 */ 0xF2 /* 'r' -> */, /* pos 0392: 534 */ 0xE9 /* 'i' -> */, /* pos 0393: 535 */ 0xF4 /* 't' -> */, /* pos 0394: 536 */ 0xF9 /* 'y' -> */, /* pos 0395: 537 */ 0xBA /* ':' -> */, /* pos 0396: 538 */ 0x00, 0x37 /* - terminal marker 55 - */, /* pos 0398: 539 */ 0xE5 /* 'e' -> */, /* pos 0399: 540 */ 0xF2 /* 'r' -> */, /* pos 039a: 541 */ 0xAD /* '-' -> */, /* pos 039b: 542 */ 0xE1 /* 'a' -> */, /* pos 039c: 543 */ 0xE7 /* 'g' -> */, /* pos 039d: 544 */ 0xE5 /* 'e' -> */, /* pos 039e: 545 */ 0xEE /* 'n' -> */, /* pos 039f: 546 */ 0xF4 /* 't' -> */, /* pos 03a0: 547 */ 0xBA /* ':' -> */, /* pos 03a1: 548 */ 0x00, 0x39 /* - terminal marker 57 - */, /* pos 03a3: 549 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x03AA state 550) */, 0x69 /* 'i' */, 0x09, 0x00 /* (to 0x03AF state 554) */, 0x08, /* fail */ /* pos 03aa: 550 */ 0xF2 /* 'r' -> */, /* pos 03ab: 551 */ 0xF9 /* 'y' -> */, /* pos 03ac: 552 */ 0xBA /* ':' -> */, /* pos 03ad: 553 */ 0x00, 0x3A /* - terminal marker 58 - */, /* pos 03af: 554 */ 0xE1 /* 'a' -> */, /* pos 03b0: 555 */ 0xBA /* ':' -> */, /* pos 03b1: 556 */ 0x00, 0x3B /* - terminal marker 59 - */, /* pos 03b3: 557 */ 0xF7 /* 'w' -> */, /* pos 03b4: 558 */ 0xF7 /* 'w' -> */, /* pos 03b5: 559 */ 0xAD /* '-' -> */, /* pos 03b6: 560 */ 0xE1 /* 'a' -> */, /* pos 03b7: 561 */ 0xF5 /* 'u' -> */, /* pos 03b8: 562 */ 0xF4 /* 't' -> */, /* pos 03b9: 563 */ 0xE8 /* 'h' -> */, /* pos 03ba: 564 */ 0xE5 /* 'e' -> */, /* pos 03bb: 565 */ 0xEE /* 'n' -> */, /* pos 03bc: 566 */ 0xF4 /* 't' -> */, /* pos 03bd: 567 */ 0xE9 /* 'i' -> */, /* pos 03be: 568 */ 0xE3 /* 'c' -> */, /* pos 03bf: 569 */ 0xE1 /* 'a' -> */, /* pos 03c0: 570 */ 0xF4 /* 't' -> */, /* pos 03c1: 571 */ 0xE5 /* 'e' -> */, /* pos 03c2: 572 */ 0xBA /* ':' -> */, /* pos 03c3: 573 */ 0x00, 0x3C /* - terminal marker 60 - */, /* pos 03c5: 574 */ 0xF4 /* 't' -> */, /* pos 03c6: 575 */ 0xE3 /* 'c' -> */, /* pos 03c7: 576 */ 0xE8 /* 'h' -> */, /* pos 03c8: 577 */ 0x00, 0x43 /* - terminal marker 67 - */, /* pos 03ca: 578 */ 0xF4 /* 't' -> */, /* pos 03cb: 579 */ 0x00, 0x44 /* - terminal marker 68 - */, /* pos 03cd: 580 */ 0xEC /* 'l' -> */, /* pos 03ce: 581 */ 0xE5 /* 'e' -> */, /* pos 03cf: 582 */ 0xF4 /* 't' -> */, /* pos 03d0: 583 */ 0xE5 /* 'e' -> */, /* pos 03d1: 584 */ 0x00, 0x45 /* - terminal marker 69 - */, /* pos 03d3: 585 */ 0x00, 0x47 /* - terminal marker 71 - */, /* pos 03d5: 586 */ 0xE5 /* 'e' -> */, /* pos 03d6: 587 */ 0xE1 /* 'a' -> */, /* pos 03d7: 588 */ 0xEC /* 'l' -> */, /* pos 03d8: 589 */ 0xAD /* '-' -> */, /* pos 03d9: 590 */ 0xE9 /* 'i' -> */, /* pos 03da: 591 */ 0xF0 /* 'p' -> */, /* pos 03db: 592 */ 0xBA /* ':' -> */, /* pos 03dc: 593 */ 0x00, 0x48 /* - terminal marker 72 - */, /* pos 03de: 594 */ 0xBA /* ':' -> */, /* pos 03df: 595 */ 0x00, 0x42 /* - terminal marker 66 - */, /* pos 03e1: 596 */ 0xEC /* 'l' -> */, /* pos 03e2: 597 */ 0xE1 /* 'a' -> */, /* pos 03e3: 598 */ 0xF9 /* 'y' -> */, /* pos 03e4: 599 */ 0xAD /* '-' -> */, /* pos 03e5: 600 */ 0xEE /* 'n' -> */, /* pos 03e6: 601 */ 0xEF /* 'o' -> */, /* pos 03e7: 602 */ 0xEE /* 'n' -> */, /* pos 03e8: 603 */ 0xE3 /* 'c' -> */, /* pos 03e9: 604 */ 0xE5 /* 'e' -> */, /* pos 03ea: 605 */ 0xBA /* ':' -> */, /* pos 03eb: 606 */ 0x00, 0x43 /* - terminal marker 67 - */, /* pos 03ed: 607 */ 0xAD /* '-' -> */, /* pos 03ee: 608 */ 0xF7 /* 'w' -> */, /* pos 03ef: 609 */ 0xE5 /* 'e' -> */, /* pos 03f0: 610 */ 0xE2 /* 'b' -> */, /* pos 03f1: 611 */ 0xF3 /* 's' -> */, /* pos 03f2: 612 */ 0xEF /* 'o' -> */, /* pos 03f3: 613 */ 0xE3 /* 'c' -> */, /* pos 03f4: 614 */ 0xEB /* 'k' -> */, /* pos 03f5: 615 */ 0xE5 /* 'e' -> */, /* pos 03f6: 616 */ 0xF4 /* 't' -> */, /* pos 03f7: 617 */ 0xAD /* '-' -> */, /* pos 03f8: 618 */ 0x64 /* 'd' */, 0x19, 0x00 /* (to 0x0411 state 619) */, 0x65 /* 'e' */, 0x1D, 0x00 /* (to 0x0418 state 625) */, 0x6B /* 'k' */, 0x26, 0x00 /* (to 0x0424 state 636) */, 0x70 /* 'p' */, 0x35, 0x00 /* (to 0x0436 state 643) */, 0x61 /* 'a' */, 0x3C, 0x00 /* (to 0x0440 state 652) */, 0x6E /* 'n' */, 0x41, 0x00 /* (to 0x0448 state 659) */, 0x76 /* 'v' */, 0x47, 0x00 /* (to 0x0451 state 666) */, 0x6F /* 'o' */, 0x4D, 0x00 /* (to 0x045A state 674) */, 0x08, /* fail */ /* pos 0411: 619 */ 0xF2 /* 'r' -> */, /* pos 0412: 620 */ 0xE1 /* 'a' -> */, /* pos 0413: 621 */ 0xE6 /* 'f' -> */, /* pos 0414: 622 */ 0xF4 /* 't' -> */, /* pos 0415: 623 */ 0xBA /* ':' -> */, /* pos 0416: 624 */ 0x00, 0x07 /* - terminal marker 7 - */, /* pos 0418: 625 */ 0xF8 /* 'x' -> */, /* pos 0419: 626 */ 0xF4 /* 't' -> */, /* pos 041a: 627 */ 0xE5 /* 'e' -> */, /* pos 041b: 628 */ 0xEE /* 'n' -> */, /* pos 041c: 629 */ 0xF3 /* 's' -> */, /* pos 041d: 630 */ 0xE9 /* 'i' -> */, /* pos 041e: 631 */ 0xEF /* 'o' -> */, /* pos 041f: 632 */ 0xEE /* 'n' -> */, /* pos 0420: 633 */ 0xF3 /* 's' -> */, /* pos 0421: 634 */ 0xBA /* ':' -> */, /* pos 0422: 635 */ 0x00, 0x09 /* - terminal marker 9 - */, /* pos 0424: 636 */ 0xE5 /* 'e' -> */, /* pos 0425: 637 */ 0xF9 /* 'y' -> */, /* pos 0426: 638 */ 0x31 /* '1' */, 0x0A, 0x00 /* (to 0x0430 state 639) */, 0x32 /* '2' */, 0x0A, 0x00 /* (to 0x0433 state 641) */, 0x3A /* ':' */, 0x23, 0x00 /* (to 0x044F state 665) */, 0x08, /* fail */ /* pos 0430: 639 */ 0xBA /* ':' -> */, /* pos 0431: 640 */ 0x00, 0x0A /* - terminal marker 10 - */, /* pos 0433: 641 */ 0xBA /* ':' -> */, /* pos 0434: 642 */ 0x00, 0x0B /* - terminal marker 11 - */, /* pos 0436: 643 */ 0xF2 /* 'r' -> */, /* pos 0437: 644 */ 0xEF /* 'o' -> */, /* pos 0438: 645 */ 0xF4 /* 't' -> */, /* pos 0439: 646 */ 0xEF /* 'o' -> */, /* pos 043a: 647 */ 0xE3 /* 'c' -> */, /* pos 043b: 648 */ 0xEF /* 'o' -> */, /* pos 043c: 649 */ 0xEC /* 'l' -> */, /* pos 043d: 650 */ 0xBA /* ':' -> */, /* pos 043e: 651 */ 0x00, 0x0C /* - terminal marker 12 - */, /* pos 0440: 652 */ 0xE3 /* 'c' -> */, /* pos 0441: 653 */ 0xE3 /* 'c' -> */, /* pos 0442: 654 */ 0xE5 /* 'e' -> */, /* pos 0443: 655 */ 0xF0 /* 'p' -> */, /* pos 0444: 656 */ 0xF4 /* 't' -> */, /* pos 0445: 657 */ 0xBA /* ':' -> */, /* pos 0446: 658 */ 0x00, 0x0D /* - terminal marker 13 - */, /* pos 0448: 659 */ 0xEF /* 'o' -> */, /* pos 0449: 660 */ 0xEE /* 'n' -> */, /* pos 044a: 661 */ 0xE3 /* 'c' -> */, /* pos 044b: 662 */ 0xE5 /* 'e' -> */, /* pos 044c: 663 */ 0xBA /* ':' -> */, /* pos 044d: 664 */ 0x00, 0x0E /* - terminal marker 14 - */, /* pos 044f: 665 */ 0x00, 0x1F /* - terminal marker 31 - */, /* pos 0451: 666 */ 0xE5 /* 'e' -> */, /* pos 0452: 667 */ 0xF2 /* 'r' -> */, /* pos 0453: 668 */ 0xF3 /* 's' -> */, /* pos 0454: 669 */ 0xE9 /* 'i' -> */, /* pos 0455: 670 */ 0xEF /* 'o' -> */, /* pos 0456: 671 */ 0xEE /* 'n' -> */, /* pos 0457: 672 */ 0xBA /* ':' -> */, /* pos 0458: 673 */ 0x00, 0x20 /* - terminal marker 32 - */, /* pos 045a: 674 */ 0xF2 /* 'r' -> */, /* pos 045b: 675 */ 0xE9 /* 'i' -> */, /* pos 045c: 676 */ 0xE7 /* 'g' -> */, /* pos 045d: 677 */ 0xE9 /* 'i' -> */, /* pos 045e: 678 */ 0xEE /* 'n' -> */, /* pos 045f: 679 */ 0xBA /* ':' -> */, /* pos 0460: 680 */ 0x00, 0x21 /* - terminal marker 33 - */, /* pos 0462: 681 */ 0xAD /* '-' -> */, /* pos 0463: 682 */ 0xF3 /* 's' -> */, /* pos 0464: 683 */ 0xE5 /* 'e' -> */, /* pos 0465: 684 */ 0xF4 /* 't' -> */, /* pos 0466: 685 */ 0xF4 /* 't' -> */, /* pos 0467: 686 */ 0xE9 /* 'i' -> */, /* pos 0468: 687 */ 0xEE /* 'n' -> */, /* pos 0469: 688 */ 0xE7 /* 'g' -> */, /* pos 046a: 689 */ 0xF3 /* 's' -> */, /* pos 046b: 690 */ 0xBA /* ':' -> */, /* pos 046c: 691 */ 0x00, 0x08 /* - terminal marker 8 - */, /* pos 046e: 692 */ 0x61 /* 'a' */, 0x0D, 0x00 /* (to 0x047B state 693) */, 0x6D /* 'm' */, 0x14, 0x00 /* (to 0x0485 state 702) */, 0x70 /* 'p' */, 0x18, 0x00 /* (to 0x048C state 708) */, 0x73 /* 's' */, 0x20, 0x00 /* (to 0x0497 state 712) */, 0x08, /* fail */ /* pos 047b: 693 */ 0xF5 /* 'u' -> */, /* pos 047c: 694 */ 0xF4 /* 't' -> */, /* pos 047d: 695 */ 0xE8 /* 'h' -> */, /* pos 047e: 696 */ 0xEF /* 'o' -> */, /* pos 047f: 697 */ 0xF2 /* 'r' -> */, /* pos 0480: 698 */ 0xE9 /* 'i' -> */, /* pos 0481: 699 */ 0xF4 /* 't' -> */, /* pos 0482: 700 */ 0xF9 /* 'y' -> */, /* pos 0483: 701 */ 0x00, 0x17 /* - terminal marker 23 - */, /* pos 0485: 702 */ 0xE5 /* 'e' -> */, /* pos 0486: 703 */ 0xF4 /* 't' -> */, /* pos 0487: 704 */ 0xE8 /* 'h' -> */, /* pos 0488: 705 */ 0xEF /* 'o' -> */, /* pos 0489: 706 */ 0xE4 /* 'd' -> */, /* pos 048a: 707 */ 0x00, 0x18 /* - terminal marker 24 - */, /* pos 048c: 708 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x0493 state 709) */, 0x72 /* 'r' */, 0x1B, 0x00 /* (to 0x04AA state 723) */, 0x08, /* fail */ /* pos 0493: 709 */ 0xF4 /* 't' -> */, /* pos 0494: 710 */ 0xE8 /* 'h' -> */, /* pos 0495: 711 */ 0x00, 0x19 /* - terminal marker 25 - */, /* pos 0497: 712 */ 0x63 /* 'c' */, 0x07, 0x00 /* (to 0x049E state 713) */, 0x74 /* 't' */, 0x0A, 0x00 /* (to 0x04A4 state 718) */, 0x08, /* fail */ /* pos 049e: 713 */ 0xE8 /* 'h' -> */, /* pos 049f: 714 */ 0xE5 /* 'e' -> */, /* pos 04a0: 715 */ 0xED /* 'm' -> */, /* pos 04a1: 716 */ 0xE5 /* 'e' -> */, /* pos 04a2: 717 */ 0x00, 0x1A /* - terminal marker 26 - */, /* pos 04a4: 718 */ 0xE1 /* 'a' -> */, /* pos 04a5: 719 */ 0xF4 /* 't' -> */, /* pos 04a6: 720 */ 0xF5 /* 'u' -> */, /* pos 04a7: 721 */ 0xF3 /* 's' -> */, /* pos 04a8: 722 */ 0x00, 0x1B /* - terminal marker 27 - */, /* pos 04aa: 723 */ 0xEF /* 'o' -> */, /* pos 04ab: 724 */ 0xF4 /* 't' -> */, /* pos 04ac: 725 */ 0xEF /* 'o' -> */, /* pos 04ad: 726 */ 0xE3 /* 'c' -> */, /* pos 04ae: 727 */ 0xEF /* 'o' -> */, /* pos 04af: 728 */ 0xEC /* 'l' -> */, /* pos 04b0: 729 */ 0x00, 0x44 /* - terminal marker 68 - */, /* total size 1202 bytes */ #endif #if !defined(LWS_HTTP_HEADERS_ALL) && defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) && !defined(LWS_ROLE_WS) && defined(LWS_ROLE_H2) /* 0: 0: get */ /* 1: 1: post */ /* 2: 2: options */ /* 3: 3: host: */ /* 4: 4: connection: */ /* 5: 5: upgrade: */ /* 6: 6: origin: */ /* 7: 8: */ /* 8: 15: http/1.1 */ /* 9: 16: http2-settings: */ /* 10: 17: accept: */ /* 11: 18: access-control-request-headers: */ /* 12: 19: if-modified-since: */ /* 13: 20: if-none-match: */ /* 14: 21: accept-encoding: */ /* 15: 22: accept-language: */ /* 16: 23: pragma: */ /* 17: 24: cache-control: */ /* 18: 25: authorization: */ /* 19: 26: cookie: */ /* 20: 27: content-length: */ /* 21: 28: content-type: */ /* 22: 29: date: */ /* 23: 30: range: */ /* 24: 31: referer: */ /* 25: 35: :authority */ /* 26: 36: :method */ /* 27: 37: :path */ /* 28: 38: :scheme */ /* 29: 39: :status */ /* 30: 40: accept-charset: */ /* 31: 41: accept-ranges: */ /* 32: 42: access-control-allow-origin: */ /* 33: 43: age: */ /* 34: 44: allow: */ /* 35: 45: content-disposition: */ /* 36: 46: content-encoding: */ /* 37: 47: content-language: */ /* 38: 48: content-location: */ /* 39: 49: content-range: */ /* 40: 50: etag: */ /* 41: 51: expect: */ /* 42: 52: expires: */ /* 43: 53: from: */ /* 44: 54: if-match: */ /* 45: 55: if-range: */ /* 46: 56: if-unmodified-since: */ /* 47: 57: last-modified: */ /* 48: 58: link: */ /* 49: 59: location: */ /* 50: 60: max-forwards: */ /* 51: 61: proxy-authenticate: */ /* 52: 62: proxy-authorization: */ /* 53: 63: refresh: */ /* 54: 64: retry-after: */ /* 55: 65: server: */ /* 56: 66: set-cookie: */ /* 57: 67: strict-transport-security: */ /* 58: 68: transfer-encoding: */ /* 59: 69: user-agent: */ /* 60: 70: vary: */ /* 61: 71: via: */ /* 62: 72: www-authenticate: */ /* 63: 73: patch */ /* 64: 74: put */ /* 65: 75: delete */ /* 66: 76: uri-args */ /* 67: 77: proxy */ /* 68: 78: x-real-ip: */ /* 69: 79: http/1.0 */ /* 70: 80: x-forwarded-for: */ /* 71: 81: connect */ /* 72: 82: head */ /* 73: 83: te: */ /* 74: 84: replay-nonce: */ /* 75: 85: :protocol */ /* 76: 86: x-auth-token: */ /* 77: 87: x-amzn-dss-signature: */ /* pos 0000: 0 */ 0x67 /* 'g' */, 0x40, 0x00 /* (to 0x0040 state 1) */, 0x70 /* 'p' */, 0x42, 0x00 /* (to 0x0045 state 5) */, 0x68 /* 'h' */, 0x51, 0x00 /* (to 0x0057 state 10) */, 0x63 /* 'c' */, 0x5D, 0x00 /* (to 0x0066 state 15) */, 0x75 /* 'u' */, 0x7E, 0x00 /* (to 0x008A state 26) */, 0x6F /* 'o' */, 0x8D, 0x00 /* (to 0x009C state 34) */, 0x0D /* '.' */, 0x98, 0x00 /* (to 0x00AA state 41) */, 0x61 /* 'a' */, 0xAD, 0x00 /* (to 0x00C2 state 51) */, 0x69 /* 'i' */, 0xCA, 0x00 /* (to 0x00E2 state 58) */, 0x64 /* 'd' */, 0x73, 0x01 /* (to 0x018E state 160) */, 0x72 /* 'r' */, 0x7C, 0x01 /* (to 0x019A state 165) */, 0x65 /* 'e' */, 0xC8, 0x01 /* (to 0x01E9 state 229) */, 0x66 /* 'f' */, 0xE4, 0x01 /* (to 0x0208 state 245) */, 0x6C /* 'l' */, 0x06, 0x02 /* (to 0x022D state 278) */, 0x73 /* 's' */, 0x4B, 0x02 /* (to 0x0275 state 321) */, 0x74 /* 't' */, 0x69, 0x02 /* (to 0x0296 state 337) */, 0x78 /* 'x' */, 0x8A, 0x02 /* (to 0x02BA state 364) */, 0x6D /* 'm' */, 0x14, 0x03 /* (to 0x0347 state 474) */, 0x76 /* 'v' */, 0x6D, 0x03 /* (to 0x03A3 state 549) */, 0x77 /* 'w' */, 0x7A, 0x03 /* (to 0x03B3 state 557) */, 0x3A /* ':' */, 0x32, 0x04 /* (to 0x046E state 692) */, 0x08, /* fail */ /* pos 0040: 1 */ 0xE5 /* 'e' -> */, /* pos 0041: 2 */ 0xF4 /* 't' -> */, /* pos 0042: 3 */ 0xA0 /* ' ' -> */, /* pos 0043: 4 */ 0x00, 0x00 /* - terminal marker 0 - */, /* pos 0045: 5 */ 0x6F /* 'o' */, 0x0D, 0x00 /* (to 0x0052 state 6) */, 0x72 /* 'r' */, 0xEC, 0x00 /* (to 0x0134 state 106) */, 0x61 /* 'a' */, 0x7A, 0x03 /* (to 0x03C5 state 574) */, 0x75 /* 'u' */, 0x7C, 0x03 /* (to 0x03CA state 578) */, 0x08, /* fail */ /* pos 0052: 6 */ 0xF3 /* 's' -> */, /* pos 0053: 7 */ 0xF4 /* 't' -> */, /* pos 0054: 8 */ 0xA0 /* ' ' -> */, /* pos 0055: 9 */ 0x00, 0x01 /* - terminal marker 1 - */, /* pos 0057: 10 */ 0x6F /* 'o' */, 0x0A, 0x00 /* (to 0x0061 state 11) */, 0x74 /* 't' */, 0x53, 0x00 /* (to 0x00AD state 43) */, 0x65 /* 'e' */, 0x79, 0x02 /* (to 0x02D6 state 381) */, 0x08, /* fail */ /* pos 0061: 11 */ 0xF3 /* 's' -> */, /* pos 0062: 12 */ 0xF4 /* 't' -> */, /* pos 0063: 13 */ 0xBA /* ':' -> */, /* pos 0064: 14 */ 0x00, 0x03 /* - terminal marker 3 - */, /* pos 0066: 15 */ 0x6F /* 'o' */, 0x07, 0x00 /* (to 0x006D state 16) */, 0x61 /* 'a' */, 0xD8, 0x00 /* (to 0x0141 state 112) */, 0x08, /* fail */ /* pos 006d: 16 */ 0x6E /* 'n' */, 0x07, 0x00 /* (to 0x0074 state 17) */, 0x6F /* 'o' */, 0xED, 0x00 /* (to 0x015D state 138) */, 0x08, /* fail */ /* pos 0074: 17 */ 0x6E /* 'n' */, 0x07, 0x00 /* (to 0x007B state 18) */, 0x74 /* 't' */, 0xEC, 0x00 /* (to 0x0163 state 143) */, 0x08, /* fail */ /* pos 007b: 18 */ 0xE5 /* 'e' -> */, /* pos 007c: 19 */ 0xE3 /* 'c' -> */, /* pos 007d: 20 */ 0xF4 /* 't' -> */, /* pos 007e: 21 */ 0x69 /* 'i' */, 0x07, 0x00 /* (to 0x0085 state 22) */, 0x20 /* ' ' */, 0x53, 0x02 /* (to 0x02D4 state 380) */, 0x08, /* fail */ /* pos 0085: 22 */ 0xEF /* 'o' -> */, /* pos 0086: 23 */ 0xEE /* 'n' -> */, /* pos 0087: 24 */ 0xBA /* ':' -> */, /* pos 0088: 25 */ 0x00, 0x04 /* - terminal marker 4 - */, /* pos 008a: 26 */ 0x70 /* 'p' */, 0x0A, 0x00 /* (to 0x0094 state 27) */, 0x72 /* 'r' */, 0x22, 0x02 /* (to 0x02AF state 355) */, 0x73 /* 's' */, 0x08, 0x03 /* (to 0x0398 state 539) */, 0x08, /* fail */ /* pos 0094: 27 */ 0xE7 /* 'g' -> */, /* pos 0095: 28 */ 0xF2 /* 'r' -> */, /* pos 0096: 29 */ 0xE1 /* 'a' -> */, /* pos 0097: 30 */ 0xE4 /* 'd' -> */, /* pos 0098: 31 */ 0xE5 /* 'e' -> */, /* pos 0099: 32 */ 0xBA /* ':' -> */, /* pos 009a: 33 */ 0x00, 0x05 /* - terminal marker 5 - */, /* pos 009c: 34 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x00A3 state 35) */, 0x70 /* 'p' */, 0x61, 0x02 /* (to 0x0300 state 414) */, 0x08, /* fail */ /* pos 00a3: 35 */ 0xE9 /* 'i' -> */, /* pos 00a4: 36 */ 0xE7 /* 'g' -> */, /* pos 00a5: 37 */ 0xE9 /* 'i' -> */, /* pos 00a6: 38 */ 0xEE /* 'n' -> */, /* pos 00a7: 39 */ 0xBA /* ':' -> */, /* pos 00a8: 40 */ 0x00, 0x06 /* - terminal marker 6 - */, /* pos 00aa: 41 */ 0x8A /* '.' -> */, /* pos 00ab: 42 */ 0x00, 0x07 /* - terminal marker 7 - */, /* pos 00ad: 43 */ 0xF4 /* 't' -> */, /* pos 00ae: 44 */ 0xF0 /* 'p' -> */, /* pos 00af: 45 */ 0x2F /* '/' */, 0x07, 0x00 /* (to 0x00B6 state 46) */, 0x32 /* '2' */, 0xB0, 0x03 /* (to 0x0462 state 681) */, 0x08, /* fail */ /* pos 00b6: 46 */ 0xB1 /* '1' -> */, /* pos 00b7: 47 */ 0xAE /* '.' -> */, /* pos 00b8: 48 */ 0x31 /* '1' */, 0x07, 0x00 /* (to 0x00BF state 49) */, 0x30 /* '0' */, 0xFC, 0x01 /* (to 0x02B7 state 362) */, 0x08, /* fail */ /* pos 00bf: 49 */ 0xA0 /* ' ' -> */, /* pos 00c0: 50 */ 0x00, 0x08 /* - terminal marker 8 - */, /* pos 00c2: 51 */ 0x63 /* 'c' */, 0x0D, 0x00 /* (to 0x00CF state 52) */, 0x75 /* 'u' */, 0x8A, 0x00 /* (to 0x014F state 125) */, 0x67 /* 'g' */, 0xE7, 0x00 /* (to 0x01AF state 178) */, 0x6C /* 'l' */, 0xE8, 0x00 /* (to 0x01B3 state 181) */, 0x08, /* fail */ /* pos 00cf: 52 */ 0xE3 /* 'c' -> */, /* pos 00d0: 53 */ 0xE5 /* 'e' -> */, /* pos 00d1: 54 */ 0x70 /* 'p' */, 0x07, 0x00 /* (to 0x00D8 state 55) */, 0x73 /* 's' */, 0x34, 0x02 /* (to 0x0308 state 421) */, 0x08, /* fail */ /* pos 00d8: 55 */ 0xF4 /* 't' -> */, /* pos 00d9: 56 */ 0x3A /* ':' */, 0x07, 0x00 /* (to 0x00E0 state 57) */, 0x2D /* '-' */, 0x37, 0x00 /* (to 0x0113 state 87) */, 0x08, /* fail */ /* pos 00e0: 57 */ 0x00, 0x0A /* - terminal marker 10 - */, /* pos 00e2: 58 */ 0xE6 /* 'f' -> */, /* pos 00e3: 59 */ 0xAD /* '-' -> */, /* pos 00e4: 60 */ 0x6D /* 'm' */, 0x0D, 0x00 /* (to 0x00F1 state 61) */, 0x6E /* 'n' */, 0x20, 0x00 /* (to 0x0107 state 76) */, 0x72 /* 'r' */, 0x2A, 0x01 /* (to 0x0214 state 255) */, 0x75 /* 'u' */, 0x2E, 0x01 /* (to 0x021B state 261) */, 0x08, /* fail */ /* pos 00f1: 61 */ 0x6F /* 'o' */, 0x07, 0x00 /* (to 0x00F8 state 62) */, 0x61 /* 'a' */, 0x1A, 0x01 /* (to 0x020E state 250) */, 0x08, /* fail */ /* pos 00f8: 62 */ 0xE4 /* 'd' -> */, /* pos 00f9: 63 */ 0xE9 /* 'i' -> */, /* pos 00fa: 64 */ 0xE6 /* 'f' -> */, /* pos 00fb: 65 */ 0xE9 /* 'i' -> */, /* pos 00fc: 66 */ 0xE5 /* 'e' -> */, /* pos 00fd: 67 */ 0xE4 /* 'd' -> */, /* pos 00fe: 68 */ 0xAD /* '-' -> */, /* pos 00ff: 69 */ 0xF3 /* 's' -> */, /* pos 0100: 70 */ 0xE9 /* 'i' -> */, /* pos 0101: 71 */ 0xEE /* 'n' -> */, /* pos 0102: 72 */ 0xE3 /* 'c' -> */, /* pos 0103: 73 */ 0xE5 /* 'e' -> */, /* pos 0104: 74 */ 0xBA /* ':' -> */, /* pos 0105: 75 */ 0x00, 0x0C /* - terminal marker 12 - */, /* pos 0107: 76 */ 0xEF /* 'o' -> */, /* pos 0108: 77 */ 0xEE /* 'n' -> */, /* pos 0109: 78 */ 0xE5 /* 'e' -> */, /* pos 010a: 79 */ 0xAD /* '-' -> */, /* pos 010b: 80 */ 0xED /* 'm' -> */, /* pos 010c: 81 */ 0xE1 /* 'a' -> */, /* pos 010d: 82 */ 0xF4 /* 't' -> */, /* pos 010e: 83 */ 0xE3 /* 'c' -> */, /* pos 010f: 84 */ 0xE8 /* 'h' -> */, /* pos 0110: 85 */ 0xBA /* ':' -> */, /* pos 0111: 86 */ 0x00, 0x0D /* - terminal marker 13 - */, /* pos 0113: 87 */ 0x65 /* 'e' */, 0x0D, 0x00 /* (to 0x0120 state 88) */, 0x6C /* 'l' */, 0x14, 0x00 /* (to 0x012A state 97) */, 0x72 /* 'r' */, 0x8E, 0x00 /* (to 0x01A7 state 171) */, 0x63 /* 'c' */, 0x14, 0x02 /* (to 0x0330 state 453) */, 0x08, /* fail */ /* pos 0120: 88 */ 0xEE /* 'n' -> */, /* pos 0121: 89 */ 0xE3 /* 'c' -> */, /* pos 0122: 90 */ 0xEF /* 'o' -> */, /* pos 0123: 91 */ 0xE4 /* 'd' -> */, /* pos 0124: 92 */ 0xE9 /* 'i' -> */, /* pos 0125: 93 */ 0xEE /* 'n' -> */, /* pos 0126: 94 */ 0xE7 /* 'g' -> */, /* pos 0127: 95 */ 0xBA /* ':' -> */, /* pos 0128: 96 */ 0x00, 0x0E /* - terminal marker 14 - */, /* pos 012a: 97 */ 0xE1 /* 'a' -> */, /* pos 012b: 98 */ 0xEE /* 'n' -> */, /* pos 012c: 99 */ 0xE7 /* 'g' -> */, /* pos 012d: 100 */ 0xF5 /* 'u' -> */, /* pos 012e: 101 */ 0xE1 /* 'a' -> */, /* pos 012f: 102 */ 0xE7 /* 'g' -> */, /* pos 0130: 103 */ 0xE5 /* 'e' -> */, /* pos 0131: 104 */ 0xBA /* ':' -> */, /* pos 0132: 105 */ 0x00, 0x0F /* - terminal marker 15 - */, /* pos 0134: 106 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x013B state 107) */, 0x6F /* 'o' */, 0x1E, 0x02 /* (to 0x0355 state 487) */, 0x08, /* fail */ /* pos 013b: 107 */ 0xE7 /* 'g' -> */, /* pos 013c: 108 */ 0xED /* 'm' -> */, /* pos 013d: 109 */ 0xE1 /* 'a' -> */, /* pos 013e: 110 */ 0xBA /* ':' -> */, /* pos 013f: 111 */ 0x00, 0x10 /* - terminal marker 16 - */, /* pos 0141: 112 */ 0xE3 /* 'c' -> */, /* pos 0142: 113 */ 0xE8 /* 'h' -> */, /* pos 0143: 114 */ 0xE5 /* 'e' -> */, /* pos 0144: 115 */ 0xAD /* '-' -> */, /* pos 0145: 116 */ 0xE3 /* 'c' -> */, /* pos 0146: 117 */ 0xEF /* 'o' -> */, /* pos 0147: 118 */ 0xEE /* 'n' -> */, /* pos 0148: 119 */ 0xF4 /* 't' -> */, /* pos 0149: 120 */ 0xF2 /* 'r' -> */, /* pos 014a: 121 */ 0xEF /* 'o' -> */, /* pos 014b: 122 */ 0xEC /* 'l' -> */, /* pos 014c: 123 */ 0xBA /* ':' -> */, /* pos 014d: 124 */ 0x00, 0x11 /* - terminal marker 17 - */, /* pos 014f: 125 */ 0xF4 /* 't' -> */, /* pos 0150: 126 */ 0xE8 /* 'h' -> */, /* pos 0151: 127 */ 0xEF /* 'o' -> */, /* pos 0152: 128 */ 0xF2 /* 'r' -> */, /* pos 0153: 129 */ 0xE9 /* 'i' -> */, /* pos 0154: 130 */ 0xFA /* 'z' -> */, /* pos 0155: 131 */ 0xE1 /* 'a' -> */, /* pos 0156: 132 */ 0xF4 /* 't' -> */, /* pos 0157: 133 */ 0xE9 /* 'i' -> */, /* pos 0158: 134 */ 0xEF /* 'o' -> */, /* pos 0159: 135 */ 0xEE /* 'n' -> */, /* pos 015a: 136 */ 0xBA /* ':' -> */, /* pos 015b: 137 */ 0x00, 0x12 /* - terminal marker 18 - */, /* pos 015d: 138 */ 0xEB /* 'k' -> */, /* pos 015e: 139 */ 0xE9 /* 'i' -> */, /* pos 015f: 140 */ 0xE5 /* 'e' -> */, /* pos 0160: 141 */ 0xBA /* ':' -> */, /* pos 0161: 142 */ 0x00, 0x13 /* - terminal marker 19 - */, /* pos 0163: 143 */ 0xE5 /* 'e' -> */, /* pos 0164: 144 */ 0xEE /* 'n' -> */, /* pos 0165: 145 */ 0xF4 /* 't' -> */, /* pos 0166: 146 */ 0xAD /* '-' -> */, /* pos 0167: 147 */ 0x6C /* 'l' */, 0x10, 0x00 /* (to 0x0177 state 148) */, 0x74 /* 't' */, 0x1E, 0x00 /* (to 0x0188 state 155) */, 0x64 /* 'd' */, 0x4C, 0x00 /* (to 0x01B9 state 186) */, 0x65 /* 'e' */, 0x56, 0x00 /* (to 0x01C6 state 198) */, 0x72 /* 'r' */, 0x6F, 0x00 /* (to 0x01E2 state 223) */, 0x08, /* fail */ /* pos 0177: 148 */ 0x65 /* 'e' */, 0x0A, 0x00 /* (to 0x0181 state 149) */, 0x61 /* 'a' */, 0x56, 0x00 /* (to 0x01D0 state 207) */, 0x6F /* 'o' */, 0x5C, 0x00 /* (to 0x01D9 state 215) */, 0x08, /* fail */ /* pos 0181: 149 */ 0xEE /* 'n' -> */, /* pos 0182: 150 */ 0xE7 /* 'g' -> */, /* pos 0183: 151 */ 0xF4 /* 't' -> */, /* pos 0184: 152 */ 0xE8 /* 'h' -> */, /* pos 0185: 153 */ 0xBA /* ':' -> */, /* pos 0186: 154 */ 0x00, 0x14 /* - terminal marker 20 - */, /* pos 0188: 155 */ 0xF9 /* 'y' -> */, /* pos 0189: 156 */ 0xF0 /* 'p' -> */, /* pos 018a: 157 */ 0xE5 /* 'e' -> */, /* pos 018b: 158 */ 0xBA /* ':' -> */, /* pos 018c: 159 */ 0x00, 0x15 /* - terminal marker 21 - */, /* pos 018e: 160 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x0195 state 161) */, 0x65 /* 'e' */, 0x3C, 0x02 /* (to 0x03CD state 580) */, 0x08, /* fail */ /* pos 0195: 161 */ 0xF4 /* 't' -> */, /* pos 0196: 162 */ 0xE5 /* 'e' -> */, /* pos 0197: 163 */ 0xBA /* ':' -> */, /* pos 0198: 164 */ 0x00, 0x16 /* - terminal marker 22 - */, /* pos 019a: 165 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x01A1 state 166) */, 0x65 /* 'e' */, 0xB6, 0x00 /* (to 0x0253 state 304) */, 0x08, /* fail */ /* pos 01a1: 166 */ 0xEE /* 'n' -> */, /* pos 01a2: 167 */ 0xE7 /* 'g' -> */, /* pos 01a3: 168 */ 0xE5 /* 'e' -> */, /* pos 01a4: 169 */ 0xBA /* ':' -> */, /* pos 01a5: 170 */ 0x00, 0x17 /* - terminal marker 23 - */, /* pos 01a7: 171 */ 0xE1 /* 'a' -> */, /* pos 01a8: 172 */ 0xEE /* 'n' -> */, /* pos 01a9: 173 */ 0xE7 /* 'g' -> */, /* pos 01aa: 174 */ 0xE5 /* 'e' -> */, /* pos 01ab: 175 */ 0xF3 /* 's' -> */, /* pos 01ac: 176 */ 0xBA /* ':' -> */, /* pos 01ad: 177 */ 0x00, 0x1F /* - terminal marker 31 - */, /* pos 01af: 178 */ 0xE5 /* 'e' -> */, /* pos 01b0: 179 */ 0xBA /* ':' -> */, /* pos 01b1: 180 */ 0x00, 0x21 /* - terminal marker 33 - */, /* pos 01b3: 181 */ 0xEC /* 'l' -> */, /* pos 01b4: 182 */ 0xEF /* 'o' -> */, /* pos 01b5: 183 */ 0xF7 /* 'w' -> */, /* pos 01b6: 184 */ 0xBA /* ':' -> */, /* pos 01b7: 185 */ 0x00, 0x22 /* - terminal marker 34 - */, /* pos 01b9: 186 */ 0xE9 /* 'i' -> */, /* pos 01ba: 187 */ 0xF3 /* 's' -> */, /* pos 01bb: 188 */ 0xF0 /* 'p' -> */, /* pos 01bc: 189 */ 0xEF /* 'o' -> */, /* pos 01bd: 190 */ 0xF3 /* 's' -> */, /* pos 01be: 191 */ 0xE9 /* 'i' -> */, /* pos 01bf: 192 */ 0xF4 /* 't' -> */, /* pos 01c0: 193 */ 0xE9 /* 'i' -> */, /* pos 01c1: 194 */ 0xEF /* 'o' -> */, /* pos 01c2: 195 */ 0xEE /* 'n' -> */, /* pos 01c3: 196 */ 0xBA /* ':' -> */, /* pos 01c4: 197 */ 0x00, 0x23 /* - terminal marker 35 - */, /* pos 01c6: 198 */ 0xEE /* 'n' -> */, /* pos 01c7: 199 */ 0xE3 /* 'c' -> */, /* pos 01c8: 200 */ 0xEF /* 'o' -> */, /* pos 01c9: 201 */ 0xE4 /* 'd' -> */, /* pos 01ca: 202 */ 0xE9 /* 'i' -> */, /* pos 01cb: 203 */ 0xEE /* 'n' -> */, /* pos 01cc: 204 */ 0xE7 /* 'g' -> */, /* pos 01cd: 205 */ 0xBA /* ':' -> */, /* pos 01ce: 206 */ 0x00, 0x24 /* - terminal marker 36 - */, /* pos 01d0: 207 */ 0xEE /* 'n' -> */, /* pos 01d1: 208 */ 0xE7 /* 'g' -> */, /* pos 01d2: 209 */ 0xF5 /* 'u' -> */, /* pos 01d3: 210 */ 0xE1 /* 'a' -> */, /* pos 01d4: 211 */ 0xE7 /* 'g' -> */, /* pos 01d5: 212 */ 0xE5 /* 'e' -> */, /* pos 01d6: 213 */ 0xBA /* ':' -> */, /* pos 01d7: 214 */ 0x00, 0x25 /* - terminal marker 37 - */, /* pos 01d9: 215 */ 0xE3 /* 'c' -> */, /* pos 01da: 216 */ 0xE1 /* 'a' -> */, /* pos 01db: 217 */ 0xF4 /* 't' -> */, /* pos 01dc: 218 */ 0xE9 /* 'i' -> */, /* pos 01dd: 219 */ 0xEF /* 'o' -> */, /* pos 01de: 220 */ 0xEE /* 'n' -> */, /* pos 01df: 221 */ 0xBA /* ':' -> */, /* pos 01e0: 222 */ 0x00, 0x26 /* - terminal marker 38 - */, /* pos 01e2: 223 */ 0xE1 /* 'a' -> */, /* pos 01e3: 224 */ 0xEE /* 'n' -> */, /* pos 01e4: 225 */ 0xE7 /* 'g' -> */, /* pos 01e5: 226 */ 0xE5 /* 'e' -> */, /* pos 01e6: 227 */ 0xBA /* ':' -> */, /* pos 01e7: 228 */ 0x00, 0x27 /* - terminal marker 39 - */, /* pos 01e9: 229 */ 0x74 /* 't' */, 0x07, 0x00 /* (to 0x01F0 state 230) */, 0x78 /* 'x' */, 0x09, 0x00 /* (to 0x01F5 state 234) */, 0x08, /* fail */ /* pos 01f0: 230 */ 0xE1 /* 'a' -> */, /* pos 01f1: 231 */ 0xE7 /* 'g' -> */, /* pos 01f2: 232 */ 0xBA /* ':' -> */, /* pos 01f3: 233 */ 0x00, 0x28 /* - terminal marker 40 - */, /* pos 01f5: 234 */ 0xF0 /* 'p' -> */, /* pos 01f6: 235 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x01FD state 236) */, 0x69 /* 'i' */, 0x09, 0x00 /* (to 0x0202 state 240) */, 0x08, /* fail */ /* pos 01fd: 236 */ 0xE3 /* 'c' -> */, /* pos 01fe: 237 */ 0xF4 /* 't' -> */, /* pos 01ff: 238 */ 0xBA /* ':' -> */, /* pos 0200: 239 */ 0x00, 0x29 /* - terminal marker 41 - */, /* pos 0202: 240 */ 0xF2 /* 'r' -> */, /* pos 0203: 241 */ 0xE5 /* 'e' -> */, /* pos 0204: 242 */ 0xF3 /* 's' -> */, /* pos 0205: 243 */ 0xBA /* ':' -> */, /* pos 0206: 244 */ 0x00, 0x2A /* - terminal marker 42 - */, /* pos 0208: 245 */ 0xF2 /* 'r' -> */, /* pos 0209: 246 */ 0xEF /* 'o' -> */, /* pos 020a: 247 */ 0xED /* 'm' -> */, /* pos 020b: 248 */ 0xBA /* ':' -> */, /* pos 020c: 249 */ 0x00, 0x2B /* - terminal marker 43 - */, /* pos 020e: 250 */ 0xF4 /* 't' -> */, /* pos 020f: 251 */ 0xE3 /* 'c' -> */, /* pos 0210: 252 */ 0xE8 /* 'h' -> */, /* pos 0211: 253 */ 0xBA /* ':' -> */, /* pos 0212: 254 */ 0x00, 0x2C /* - terminal marker 44 - */, /* pos 0214: 255 */ 0xE1 /* 'a' -> */, /* pos 0215: 256 */ 0xEE /* 'n' -> */, /* pos 0216: 257 */ 0xE7 /* 'g' -> */, /* pos 0217: 258 */ 0xE5 /* 'e' -> */, /* pos 0218: 259 */ 0xBA /* ':' -> */, /* pos 0219: 260 */ 0x00, 0x2D /* - terminal marker 45 - */, /* pos 021b: 261 */ 0xEE /* 'n' -> */, /* pos 021c: 262 */ 0xED /* 'm' -> */, /* pos 021d: 263 */ 0xEF /* 'o' -> */, /* pos 021e: 264 */ 0xE4 /* 'd' -> */, /* pos 021f: 265 */ 0xE9 /* 'i' -> */, /* pos 0220: 266 */ 0xE6 /* 'f' -> */, /* pos 0221: 267 */ 0xE9 /* 'i' -> */, /* pos 0222: 268 */ 0xE5 /* 'e' -> */, /* pos 0223: 269 */ 0xE4 /* 'd' -> */, /* pos 0224: 270 */ 0xAD /* '-' -> */, /* pos 0225: 271 */ 0xF3 /* 's' -> */, /* pos 0226: 272 */ 0xE9 /* 'i' -> */, /* pos 0227: 273 */ 0xEE /* 'n' -> */, /* pos 0228: 274 */ 0xE3 /* 'c' -> */, /* pos 0229: 275 */ 0xE5 /* 'e' -> */, /* pos 022a: 276 */ 0xBA /* ':' -> */, /* pos 022b: 277 */ 0x00, 0x2E /* - terminal marker 46 - */, /* pos 022d: 278 */ 0x61 /* 'a' */, 0x0A, 0x00 /* (to 0x0237 state 279) */, 0x69 /* 'i' */, 0x15, 0x00 /* (to 0x0245 state 292) */, 0x6F /* 'o' */, 0x17, 0x00 /* (to 0x024A state 296) */, 0x08, /* fail */ /* pos 0237: 279 */ 0xF3 /* 's' -> */, /* pos 0238: 280 */ 0xF4 /* 't' -> */, /* pos 0239: 281 */ 0xAD /* '-' -> */, /* pos 023a: 282 */ 0xED /* 'm' -> */, /* pos 023b: 283 */ 0xEF /* 'o' -> */, /* pos 023c: 284 */ 0xE4 /* 'd' -> */, /* pos 023d: 285 */ 0xE9 /* 'i' -> */, /* pos 023e: 286 */ 0xE6 /* 'f' -> */, /* pos 023f: 287 */ 0xE9 /* 'i' -> */, /* pos 0240: 288 */ 0xE5 /* 'e' -> */, /* pos 0241: 289 */ 0xE4 /* 'd' -> */, /* pos 0242: 290 */ 0xBA /* ':' -> */, /* pos 0243: 291 */ 0x00, 0x2F /* - terminal marker 47 - */, /* pos 0245: 292 */ 0xEE /* 'n' -> */, /* pos 0246: 293 */ 0xEB /* 'k' -> */, /* pos 0247: 294 */ 0xBA /* ':' -> */, /* pos 0248: 295 */ 0x00, 0x30 /* - terminal marker 48 - */, /* pos 024a: 296 */ 0xE3 /* 'c' -> */, /* pos 024b: 297 */ 0xE1 /* 'a' -> */, /* pos 024c: 298 */ 0xF4 /* 't' -> */, /* pos 024d: 299 */ 0xE9 /* 'i' -> */, /* pos 024e: 300 */ 0xEF /* 'o' -> */, /* pos 024f: 301 */ 0xEE /* 'n' -> */, /* pos 0250: 302 */ 0xBA /* ':' -> */, /* pos 0251: 303 */ 0x00, 0x31 /* - terminal marker 49 - */, /* pos 0253: 304 */ 0x66 /* 'f' */, 0x0A, 0x00 /* (to 0x025D state 305) */, 0x74 /* 't' */, 0x14, 0x00 /* (to 0x026A state 311) */, 0x70 /* 'p' */, 0x88, 0x01 /* (to 0x03E1 state 596) */, 0x08, /* fail */ /* pos 025d: 305 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x0264 state 306) */, 0x65 /* 'e' */, 0xCA, 0x00 /* (to 0x032A state 448) */, 0x08, /* fail */ /* pos 0264: 306 */ 0xE5 /* 'e' -> */, /* pos 0265: 307 */ 0xF3 /* 's' -> */, /* pos 0266: 308 */ 0xE8 /* 'h' -> */, /* pos 0267: 309 */ 0xBA /* ':' -> */, /* pos 0268: 310 */ 0x00, 0x35 /* - terminal marker 53 - */, /* pos 026a: 311 */ 0xF2 /* 'r' -> */, /* pos 026b: 312 */ 0xF9 /* 'y' -> */, /* pos 026c: 313 */ 0xAD /* '-' -> */, /* pos 026d: 314 */ 0xE1 /* 'a' -> */, /* pos 026e: 315 */ 0xE6 /* 'f' -> */, /* pos 026f: 316 */ 0xF4 /* 't' -> */, /* pos 0270: 317 */ 0xE5 /* 'e' -> */, /* pos 0271: 318 */ 0xF2 /* 'r' -> */, /* pos 0272: 319 */ 0xBA /* ':' -> */, /* pos 0273: 320 */ 0x00, 0x36 /* - terminal marker 54 - */, /* pos 0275: 321 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x027C state 322) */, 0x74 /* 't' */, 0x06, 0x01 /* (to 0x037E state 514) */, 0x08, /* fail */ /* pos 027c: 322 */ 0x72 /* 'r' */, 0x0A, 0x00 /* (to 0x0286 state 323) */, 0x74 /* 't' */, 0x0D, 0x00 /* (to 0x028C state 328) */, 0x63 /* 'c' */, 0x6B, 0x01 /* (to 0x03ED state 607) */, 0x08, /* fail */ /* pos 0286: 323 */ 0xF6 /* 'v' -> */, /* pos 0287: 324 */ 0xE5 /* 'e' -> */, /* pos 0288: 325 */ 0xF2 /* 'r' -> */, /* pos 0289: 326 */ 0xBA /* ':' -> */, /* pos 028a: 327 */ 0x00, 0x37 /* - terminal marker 55 - */, /* pos 028c: 328 */ 0xAD /* '-' -> */, /* pos 028d: 329 */ 0xE3 /* 'c' -> */, /* pos 028e: 330 */ 0xEF /* 'o' -> */, /* pos 028f: 331 */ 0xEF /* 'o' -> */, /* pos 0290: 332 */ 0xEB /* 'k' -> */, /* pos 0291: 333 */ 0xE9 /* 'i' -> */, /* pos 0292: 334 */ 0xE5 /* 'e' -> */, /* pos 0293: 335 */ 0xBA /* ':' -> */, /* pos 0294: 336 */ 0x00, 0x38 /* - terminal marker 56 - */, /* pos 0296: 337 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x029D state 338) */, 0x65 /* 'e' */, 0x45, 0x01 /* (to 0x03DE state 594) */, 0x08, /* fail */ /* pos 029d: 338 */ 0xE1 /* 'a' -> */, /* pos 029e: 339 */ 0xEE /* 'n' -> */, /* pos 029f: 340 */ 0xF3 /* 's' -> */, /* pos 02a0: 341 */ 0xE6 /* 'f' -> */, /* pos 02a1: 342 */ 0xE5 /* 'e' -> */, /* pos 02a2: 343 */ 0xF2 /* 'r' -> */, /* pos 02a3: 344 */ 0xAD /* '-' -> */, /* pos 02a4: 345 */ 0xE5 /* 'e' -> */, /* pos 02a5: 346 */ 0xEE /* 'n' -> */, /* pos 02a6: 347 */ 0xE3 /* 'c' -> */, /* pos 02a7: 348 */ 0xEF /* 'o' -> */, /* pos 02a8: 349 */ 0xE4 /* 'd' -> */, /* pos 02a9: 350 */ 0xE9 /* 'i' -> */, /* pos 02aa: 351 */ 0xEE /* 'n' -> */, /* pos 02ab: 352 */ 0xE7 /* 'g' -> */, /* pos 02ac: 353 */ 0xBA /* ':' -> */, /* pos 02ad: 354 */ 0x00, 0x3A /* - terminal marker 58 - */, /* pos 02af: 355 */ 0xE9 /* 'i' -> */, /* pos 02b0: 356 */ 0xAD /* '-' -> */, /* pos 02b1: 357 */ 0xE1 /* 'a' -> */, /* pos 02b2: 358 */ 0xF2 /* 'r' -> */, /* pos 02b3: 359 */ 0xE7 /* 'g' -> */, /* pos 02b4: 360 */ 0xF3 /* 's' -> */, /* pos 02b5: 361 */ 0x00, 0x42 /* - terminal marker 66 - */, /* pos 02b7: 362 */ 0xA0 /* ' ' -> */, /* pos 02b8: 363 */ 0x00, 0x45 /* - terminal marker 69 - */, /* pos 02ba: 364 */ 0xAD /* '-' -> */, /* pos 02bb: 365 */ 0x66 /* 'f' */, 0x0A, 0x00 /* (to 0x02C5 state 366) */, 0x61 /* 'a' */, 0x1D, 0x00 /* (to 0x02DB state 385) */, 0x72 /* 'r' */, 0x14, 0x01 /* (to 0x03D5 state 586) */, 0x08, /* fail */ /* pos 02c5: 366 */ 0xEF /* 'o' -> */, /* pos 02c6: 367 */ 0xF2 /* 'r' -> */, /* pos 02c7: 368 */ 0xF7 /* 'w' -> */, /* pos 02c8: 369 */ 0xE1 /* 'a' -> */, /* pos 02c9: 370 */ 0xF2 /* 'r' -> */, /* pos 02ca: 371 */ 0xE4 /* 'd' -> */, /* pos 02cb: 372 */ 0xE5 /* 'e' -> */, /* pos 02cc: 373 */ 0xE4 /* 'd' -> */, /* pos 02cd: 374 */ 0xAD /* '-' -> */, /* pos 02ce: 375 */ 0xE6 /* 'f' -> */, /* pos 02cf: 376 */ 0xEF /* 'o' -> */, /* pos 02d0: 377 */ 0xF2 /* 'r' -> */, /* pos 02d1: 378 */ 0xBA /* ':' -> */, /* pos 02d2: 379 */ 0x00, 0x46 /* - terminal marker 70 - */, /* pos 02d4: 380 */ 0x00, 0x47 /* - terminal marker 71 - */, /* pos 02d6: 381 */ 0xE1 /* 'a' -> */, /* pos 02d7: 382 */ 0xE4 /* 'd' -> */, /* pos 02d8: 383 */ 0xA0 /* ' ' -> */, /* pos 02d9: 384 */ 0x00, 0x48 /* - terminal marker 72 - */, /* pos 02db: 385 */ 0x75 /* 'u' */, 0x07, 0x00 /* (to 0x02E2 state 386) */, 0x6D /* 'm' */, 0x0F, 0x00 /* (to 0x02ED state 396) */, 0x08, /* fail */ /* pos 02e2: 386 */ 0xF4 /* 't' -> */, /* pos 02e3: 387 */ 0xE8 /* 'h' -> */, /* pos 02e4: 388 */ 0xAD /* '-' -> */, /* pos 02e5: 389 */ 0xF4 /* 't' -> */, /* pos 02e6: 390 */ 0xEF /* 'o' -> */, /* pos 02e7: 391 */ 0xEB /* 'k' -> */, /* pos 02e8: 392 */ 0xE5 /* 'e' -> */, /* pos 02e9: 393 */ 0xEE /* 'n' -> */, /* pos 02ea: 394 */ 0xBA /* ':' -> */, /* pos 02eb: 395 */ 0x00, 0x4C /* - terminal marker 76 - */, /* pos 02ed: 396 */ 0xFA /* 'z' -> */, /* pos 02ee: 397 */ 0xEE /* 'n' -> */, /* pos 02ef: 398 */ 0xAD /* '-' -> */, /* pos 02f0: 399 */ 0xE4 /* 'd' -> */, /* pos 02f1: 400 */ 0xF3 /* 's' -> */, /* pos 02f2: 401 */ 0xF3 /* 's' -> */, /* pos 02f3: 402 */ 0xAD /* '-' -> */, /* pos 02f4: 403 */ 0xF3 /* 's' -> */, /* pos 02f5: 404 */ 0xE9 /* 'i' -> */, /* pos 02f6: 405 */ 0xE7 /* 'g' -> */, /* pos 02f7: 406 */ 0xEE /* 'n' -> */, /* pos 02f8: 407 */ 0xE1 /* 'a' -> */, /* pos 02f9: 408 */ 0xF4 /* 't' -> */, /* pos 02fa: 409 */ 0xF5 /* 'u' -> */, /* pos 02fb: 410 */ 0xF2 /* 'r' -> */, /* pos 02fc: 411 */ 0xE5 /* 'e' -> */, /* pos 02fd: 412 */ 0xBA /* ':' -> */, /* pos 02fe: 413 */ 0x00, 0x4D /* - terminal marker 77 - */, /* pos 0300: 414 */ 0xF4 /* 't' -> */, /* pos 0301: 415 */ 0xE9 /* 'i' -> */, /* pos 0302: 416 */ 0xEF /* 'o' -> */, /* pos 0303: 417 */ 0xEE /* 'n' -> */, /* pos 0304: 418 */ 0xF3 /* 's' -> */, /* pos 0305: 419 */ 0xA0 /* ' ' -> */, /* pos 0306: 420 */ 0x00, 0x02 /* - terminal marker 2 - */, /* pos 0308: 421 */ 0xF3 /* 's' -> */, /* pos 0309: 422 */ 0xAD /* '-' -> */, /* pos 030a: 423 */ 0xE3 /* 'c' -> */, /* pos 030b: 424 */ 0xEF /* 'o' -> */, /* pos 030c: 425 */ 0xEE /* 'n' -> */, /* pos 030d: 426 */ 0xF4 /* 't' -> */, /* pos 030e: 427 */ 0xF2 /* 'r' -> */, /* pos 030f: 428 */ 0xEF /* 'o' -> */, /* pos 0310: 429 */ 0xEC /* 'l' -> */, /* pos 0311: 430 */ 0xAD /* '-' -> */, /* pos 0312: 431 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x0319 state 432) */, 0x61 /* 'a' */, 0x24, 0x00 /* (to 0x0339 state 461) */, 0x08, /* fail */ /* pos 0319: 432 */ 0xE5 /* 'e' -> */, /* pos 031a: 433 */ 0xF1 /* 'q' -> */, /* pos 031b: 434 */ 0xF5 /* 'u' -> */, /* pos 031c: 435 */ 0xE5 /* 'e' -> */, /* pos 031d: 436 */ 0xF3 /* 's' -> */, /* pos 031e: 437 */ 0xF4 /* 't' -> */, /* pos 031f: 438 */ 0xAD /* '-' -> */, /* pos 0320: 439 */ 0xE8 /* 'h' -> */, /* pos 0321: 440 */ 0xE5 /* 'e' -> */, /* pos 0322: 441 */ 0xE1 /* 'a' -> */, /* pos 0323: 442 */ 0xE4 /* 'd' -> */, /* pos 0324: 443 */ 0xE5 /* 'e' -> */, /* pos 0325: 444 */ 0xF2 /* 'r' -> */, /* pos 0326: 445 */ 0xF3 /* 's' -> */, /* pos 0327: 446 */ 0xBA /* ':' -> */, /* pos 0328: 447 */ 0x00, 0x0B /* - terminal marker 11 - */, /* pos 032a: 448 */ 0xF2 /* 'r' -> */, /* pos 032b: 449 */ 0xE5 /* 'e' -> */, /* pos 032c: 450 */ 0xF2 /* 'r' -> */, /* pos 032d: 451 */ 0xBA /* ':' -> */, /* pos 032e: 452 */ 0x00, 0x18 /* - terminal marker 24 - */, /* pos 0330: 453 */ 0xE8 /* 'h' -> */, /* pos 0331: 454 */ 0xE1 /* 'a' -> */, /* pos 0332: 455 */ 0xF2 /* 'r' -> */, /* pos 0333: 456 */ 0xF3 /* 's' -> */, /* pos 0334: 457 */ 0xE5 /* 'e' -> */, /* pos 0335: 458 */ 0xF4 /* 't' -> */, /* pos 0336: 459 */ 0xBA /* ':' -> */, /* pos 0337: 460 */ 0x00, 0x1E /* - terminal marker 30 - */, /* pos 0339: 461 */ 0xEC /* 'l' -> */, /* pos 033a: 462 */ 0xEC /* 'l' -> */, /* pos 033b: 463 */ 0xEF /* 'o' -> */, /* pos 033c: 464 */ 0xF7 /* 'w' -> */, /* pos 033d: 465 */ 0xAD /* '-' -> */, /* pos 033e: 466 */ 0xEF /* 'o' -> */, /* pos 033f: 467 */ 0xF2 /* 'r' -> */, /* pos 0340: 468 */ 0xE9 /* 'i' -> */, /* pos 0341: 469 */ 0xE7 /* 'g' -> */, /* pos 0342: 470 */ 0xE9 /* 'i' -> */, /* pos 0343: 471 */ 0xEE /* 'n' -> */, /* pos 0344: 472 */ 0xBA /* ':' -> */, /* pos 0345: 473 */ 0x00, 0x20 /* - terminal marker 32 - */, /* pos 0347: 474 */ 0xE1 /* 'a' -> */, /* pos 0348: 475 */ 0xF8 /* 'x' -> */, /* pos 0349: 476 */ 0xAD /* '-' -> */, /* pos 034a: 477 */ 0xE6 /* 'f' -> */, /* pos 034b: 478 */ 0xEF /* 'o' -> */, /* pos 034c: 479 */ 0xF2 /* 'r' -> */, /* pos 034d: 480 */ 0xF7 /* 'w' -> */, /* pos 034e: 481 */ 0xE1 /* 'a' -> */, /* pos 034f: 482 */ 0xF2 /* 'r' -> */, /* pos 0350: 483 */ 0xE4 /* 'd' -> */, /* pos 0351: 484 */ 0xF3 /* 's' -> */, /* pos 0352: 485 */ 0xBA /* ':' -> */, /* pos 0353: 486 */ 0x00, 0x32 /* - terminal marker 50 - */, /* pos 0355: 487 */ 0xF8 /* 'x' -> */, /* pos 0356: 488 */ 0xF9 /* 'y' -> */, /* pos 0357: 489 */ 0x2D /* '-' */, 0x07, 0x00 /* (to 0x035E state 490) */, 0x20 /* ' ' */, 0x79, 0x00 /* (to 0x03D3 state 585) */, 0x08, /* fail */ /* pos 035e: 490 */ 0xE1 /* 'a' -> */, /* pos 035f: 491 */ 0xF5 /* 'u' -> */, /* pos 0360: 492 */ 0xF4 /* 't' -> */, /* pos 0361: 493 */ 0xE8 /* 'h' -> */, /* pos 0362: 494 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x0369 state 495) */, 0x6F /* 'o' */, 0x0E, 0x00 /* (to 0x0373 state 504) */, 0x08, /* fail */ /* pos 0369: 495 */ 0xEE /* 'n' -> */, /* pos 036a: 496 */ 0xF4 /* 't' -> */, /* pos 036b: 497 */ 0xE9 /* 'i' -> */, /* pos 036c: 498 */ 0xE3 /* 'c' -> */, /* pos 036d: 499 */ 0xE1 /* 'a' -> */, /* pos 036e: 500 */ 0xF4 /* 't' -> */, /* pos 036f: 501 */ 0xE5 /* 'e' -> */, /* pos 0370: 502 */ 0xBA /* ':' -> */, /* pos 0371: 503 */ 0x00, 0x33 /* - terminal marker 51 - */, /* pos 0373: 504 */ 0xF2 /* 'r' -> */, /* pos 0374: 505 */ 0xE9 /* 'i' -> */, /* pos 0375: 506 */ 0xFA /* 'z' -> */, /* pos 0376: 507 */ 0xE1 /* 'a' -> */, /* pos 0377: 508 */ 0xF4 /* 't' -> */, /* pos 0378: 509 */ 0xE9 /* 'i' -> */, /* pos 0379: 510 */ 0xEF /* 'o' -> */, /* pos 037a: 511 */ 0xEE /* 'n' -> */, /* pos 037b: 512 */ 0xBA /* ':' -> */, /* pos 037c: 513 */ 0x00, 0x34 /* - terminal marker 52 - */, /* pos 037e: 514 */ 0xF2 /* 'r' -> */, /* pos 037f: 515 */ 0xE9 /* 'i' -> */, /* pos 0380: 516 */ 0xE3 /* 'c' -> */, /* pos 0381: 517 */ 0xF4 /* 't' -> */, /* pos 0382: 518 */ 0xAD /* '-' -> */, /* pos 0383: 519 */ 0xF4 /* 't' -> */, /* pos 0384: 520 */ 0xF2 /* 'r' -> */, /* pos 0385: 521 */ 0xE1 /* 'a' -> */, /* pos 0386: 522 */ 0xEE /* 'n' -> */, /* pos 0387: 523 */ 0xF3 /* 's' -> */, /* pos 0388: 524 */ 0xF0 /* 'p' -> */, /* pos 0389: 525 */ 0xEF /* 'o' -> */, /* pos 038a: 526 */ 0xF2 /* 'r' -> */, /* pos 038b: 527 */ 0xF4 /* 't' -> */, /* pos 038c: 528 */ 0xAD /* '-' -> */, /* pos 038d: 529 */ 0xF3 /* 's' -> */, /* pos 038e: 530 */ 0xE5 /* 'e' -> */, /* pos 038f: 531 */ 0xE3 /* 'c' -> */, /* pos 0390: 532 */ 0xF5 /* 'u' -> */, /* pos 0391: 533 */ 0xF2 /* 'r' -> */, /* pos 0392: 534 */ 0xE9 /* 'i' -> */, /* pos 0393: 535 */ 0xF4 /* 't' -> */, /* pos 0394: 536 */ 0xF9 /* 'y' -> */, /* pos 0395: 537 */ 0xBA /* ':' -> */, /* pos 0396: 538 */ 0x00, 0x39 /* - terminal marker 57 - */, /* pos 0398: 539 */ 0xE5 /* 'e' -> */, /* pos 0399: 540 */ 0xF2 /* 'r' -> */, /* pos 039a: 541 */ 0xAD /* '-' -> */, /* pos 039b: 542 */ 0xE1 /* 'a' -> */, /* pos 039c: 543 */ 0xE7 /* 'g' -> */, /* pos 039d: 544 */ 0xE5 /* 'e' -> */, /* pos 039e: 545 */ 0xEE /* 'n' -> */, /* pos 039f: 546 */ 0xF4 /* 't' -> */, /* pos 03a0: 547 */ 0xBA /* ':' -> */, /* pos 03a1: 548 */ 0x00, 0x3B /* - terminal marker 59 - */, /* pos 03a3: 549 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x03AA state 550) */, 0x69 /* 'i' */, 0x09, 0x00 /* (to 0x03AF state 554) */, 0x08, /* fail */ /* pos 03aa: 550 */ 0xF2 /* 'r' -> */, /* pos 03ab: 551 */ 0xF9 /* 'y' -> */, /* pos 03ac: 552 */ 0xBA /* ':' -> */, /* pos 03ad: 553 */ 0x00, 0x3C /* - terminal marker 60 - */, /* pos 03af: 554 */ 0xE1 /* 'a' -> */, /* pos 03b0: 555 */ 0xBA /* ':' -> */, /* pos 03b1: 556 */ 0x00, 0x3D /* - terminal marker 61 - */, /* pos 03b3: 557 */ 0xF7 /* 'w' -> */, /* pos 03b4: 558 */ 0xF7 /* 'w' -> */, /* pos 03b5: 559 */ 0xAD /* '-' -> */, /* pos 03b6: 560 */ 0xE1 /* 'a' -> */, /* pos 03b7: 561 */ 0xF5 /* 'u' -> */, /* pos 03b8: 562 */ 0xF4 /* 't' -> */, /* pos 03b9: 563 */ 0xE8 /* 'h' -> */, /* pos 03ba: 564 */ 0xE5 /* 'e' -> */, /* pos 03bb: 565 */ 0xEE /* 'n' -> */, /* pos 03bc: 566 */ 0xF4 /* 't' -> */, /* pos 03bd: 567 */ 0xE9 /* 'i' -> */, /* pos 03be: 568 */ 0xE3 /* 'c' -> */, /* pos 03bf: 569 */ 0xE1 /* 'a' -> */, /* pos 03c0: 570 */ 0xF4 /* 't' -> */, /* pos 03c1: 571 */ 0xE5 /* 'e' -> */, /* pos 03c2: 572 */ 0xBA /* ':' -> */, /* pos 03c3: 573 */ 0x00, 0x3E /* - terminal marker 62 - */, /* pos 03c5: 574 */ 0xF4 /* 't' -> */, /* pos 03c6: 575 */ 0xE3 /* 'c' -> */, /* pos 03c7: 576 */ 0xE8 /* 'h' -> */, /* pos 03c8: 577 */ 0x00, 0x3F /* - terminal marker 63 - */, /* pos 03ca: 578 */ 0xF4 /* 't' -> */, /* pos 03cb: 579 */ 0x00, 0x40 /* - terminal marker 64 - */, /* pos 03cd: 580 */ 0xEC /* 'l' -> */, /* pos 03ce: 581 */ 0xE5 /* 'e' -> */, /* pos 03cf: 582 */ 0xF4 /* 't' -> */, /* pos 03d0: 583 */ 0xE5 /* 'e' -> */, /* pos 03d1: 584 */ 0x00, 0x41 /* - terminal marker 65 - */, /* pos 03d3: 585 */ 0x00, 0x43 /* - terminal marker 67 - */, /* pos 03d5: 586 */ 0xE5 /* 'e' -> */, /* pos 03d6: 587 */ 0xE1 /* 'a' -> */, /* pos 03d7: 588 */ 0xEC /* 'l' -> */, /* pos 03d8: 589 */ 0xAD /* '-' -> */, /* pos 03d9: 590 */ 0xE9 /* 'i' -> */, /* pos 03da: 591 */ 0xF0 /* 'p' -> */, /* pos 03db: 592 */ 0xBA /* ':' -> */, /* pos 03dc: 593 */ 0x00, 0x44 /* - terminal marker 68 - */, /* pos 03de: 594 */ 0xBA /* ':' -> */, /* pos 03df: 595 */ 0x00, 0x49 /* - terminal marker 73 - */, /* pos 03e1: 596 */ 0xEC /* 'l' -> */, /* pos 03e2: 597 */ 0xE1 /* 'a' -> */, /* pos 03e3: 598 */ 0xF9 /* 'y' -> */, /* pos 03e4: 599 */ 0xAD /* '-' -> */, /* pos 03e5: 600 */ 0xEE /* 'n' -> */, /* pos 03e6: 601 */ 0xEF /* 'o' -> */, /* pos 03e7: 602 */ 0xEE /* 'n' -> */, /* pos 03e8: 603 */ 0xE3 /* 'c' -> */, /* pos 03e9: 604 */ 0xE5 /* 'e' -> */, /* pos 03ea: 605 */ 0xBA /* ':' -> */, /* pos 03eb: 606 */ 0x00, 0x4A /* - terminal marker 74 - */, /* pos 03ed: 607 */ 0xAD /* '-' -> */, /* pos 03ee: 608 */ 0xF7 /* 'w' -> */, /* pos 03ef: 609 */ 0xE5 /* 'e' -> */, /* pos 03f0: 610 */ 0xE2 /* 'b' -> */, /* pos 03f1: 611 */ 0xF3 /* 's' -> */, /* pos 03f2: 612 */ 0xEF /* 'o' -> */, /* pos 03f3: 613 */ 0xE3 /* 'c' -> */, /* pos 03f4: 614 */ 0xEB /* 'k' -> */, /* pos 03f5: 615 */ 0xE5 /* 'e' -> */, /* pos 03f6: 616 */ 0xF4 /* 't' -> */, /* pos 03f7: 617 */ 0xAD /* '-' -> */, /* pos 03f8: 618 */ 0x64 /* 'd' */, 0x19, 0x00 /* (to 0x0411 state 619) */, 0x65 /* 'e' */, 0x1D, 0x00 /* (to 0x0418 state 625) */, 0x6B /* 'k' */, 0x26, 0x00 /* (to 0x0424 state 636) */, 0x70 /* 'p' */, 0x35, 0x00 /* (to 0x0436 state 643) */, 0x61 /* 'a' */, 0x3C, 0x00 /* (to 0x0440 state 652) */, 0x6E /* 'n' */, 0x41, 0x00 /* (to 0x0448 state 659) */, 0x76 /* 'v' */, 0x47, 0x00 /* (to 0x0451 state 666) */, 0x6F /* 'o' */, 0x4D, 0x00 /* (to 0x045A state 674) */, 0x08, /* fail */ /* pos 0411: 619 */ 0xF2 /* 'r' -> */, /* pos 0412: 620 */ 0xE1 /* 'a' -> */, /* pos 0413: 621 */ 0xE6 /* 'f' -> */, /* pos 0414: 622 */ 0xF4 /* 't' -> */, /* pos 0415: 623 */ 0xBA /* ':' -> */, /* pos 0416: 624 */ 0x00, 0x07 /* - terminal marker 7 - */, /* pos 0418: 625 */ 0xF8 /* 'x' -> */, /* pos 0419: 626 */ 0xF4 /* 't' -> */, /* pos 041a: 627 */ 0xE5 /* 'e' -> */, /* pos 041b: 628 */ 0xEE /* 'n' -> */, /* pos 041c: 629 */ 0xF3 /* 's' -> */, /* pos 041d: 630 */ 0xE9 /* 'i' -> */, /* pos 041e: 631 */ 0xEF /* 'o' -> */, /* pos 041f: 632 */ 0xEE /* 'n' -> */, /* pos 0420: 633 */ 0xF3 /* 's' -> */, /* pos 0421: 634 */ 0xBA /* ':' -> */, /* pos 0422: 635 */ 0x00, 0x09 /* - terminal marker 9 - */, /* pos 0424: 636 */ 0xE5 /* 'e' -> */, /* pos 0425: 637 */ 0xF9 /* 'y' -> */, /* pos 0426: 638 */ 0x31 /* '1' */, 0x0A, 0x00 /* (to 0x0430 state 639) */, 0x32 /* '2' */, 0x0A, 0x00 /* (to 0x0433 state 641) */, 0x3A /* ':' */, 0x23, 0x00 /* (to 0x044F state 665) */, 0x08, /* fail */ /* pos 0430: 639 */ 0xBA /* ':' -> */, /* pos 0431: 640 */ 0x00, 0x0A /* - terminal marker 10 - */, /* pos 0433: 641 */ 0xBA /* ':' -> */, /* pos 0434: 642 */ 0x00, 0x0B /* - terminal marker 11 - */, /* pos 0436: 643 */ 0xF2 /* 'r' -> */, /* pos 0437: 644 */ 0xEF /* 'o' -> */, /* pos 0438: 645 */ 0xF4 /* 't' -> */, /* pos 0439: 646 */ 0xEF /* 'o' -> */, /* pos 043a: 647 */ 0xE3 /* 'c' -> */, /* pos 043b: 648 */ 0xEF /* 'o' -> */, /* pos 043c: 649 */ 0xEC /* 'l' -> */, /* pos 043d: 650 */ 0xBA /* ':' -> */, /* pos 043e: 651 */ 0x00, 0x0C /* - terminal marker 12 - */, /* pos 0440: 652 */ 0xE3 /* 'c' -> */, /* pos 0441: 653 */ 0xE3 /* 'c' -> */, /* pos 0442: 654 */ 0xE5 /* 'e' -> */, /* pos 0443: 655 */ 0xF0 /* 'p' -> */, /* pos 0444: 656 */ 0xF4 /* 't' -> */, /* pos 0445: 657 */ 0xBA /* ':' -> */, /* pos 0446: 658 */ 0x00, 0x0D /* - terminal marker 13 - */, /* pos 0448: 659 */ 0xEF /* 'o' -> */, /* pos 0449: 660 */ 0xEE /* 'n' -> */, /* pos 044a: 661 */ 0xE3 /* 'c' -> */, /* pos 044b: 662 */ 0xE5 /* 'e' -> */, /* pos 044c: 663 */ 0xBA /* ':' -> */, /* pos 044d: 664 */ 0x00, 0x0E /* - terminal marker 14 - */, /* pos 044f: 665 */ 0x00, 0x1F /* - terminal marker 31 - */, /* pos 0451: 666 */ 0xE5 /* 'e' -> */, /* pos 0452: 667 */ 0xF2 /* 'r' -> */, /* pos 0453: 668 */ 0xF3 /* 's' -> */, /* pos 0454: 669 */ 0xE9 /* 'i' -> */, /* pos 0455: 670 */ 0xEF /* 'o' -> */, /* pos 0456: 671 */ 0xEE /* 'n' -> */, /* pos 0457: 672 */ 0xBA /* ':' -> */, /* pos 0458: 673 */ 0x00, 0x20 /* - terminal marker 32 - */, /* pos 045a: 674 */ 0xF2 /* 'r' -> */, /* pos 045b: 675 */ 0xE9 /* 'i' -> */, /* pos 045c: 676 */ 0xE7 /* 'g' -> */, /* pos 045d: 677 */ 0xE9 /* 'i' -> */, /* pos 045e: 678 */ 0xEE /* 'n' -> */, /* pos 045f: 679 */ 0xBA /* ':' -> */, /* pos 0460: 680 */ 0x00, 0x21 /* - terminal marker 33 - */, /* pos 0462: 681 */ 0xAD /* '-' -> */, /* pos 0463: 682 */ 0xF3 /* 's' -> */, /* pos 0464: 683 */ 0xE5 /* 'e' -> */, /* pos 0465: 684 */ 0xF4 /* 't' -> */, /* pos 0466: 685 */ 0xF4 /* 't' -> */, /* pos 0467: 686 */ 0xE9 /* 'i' -> */, /* pos 0468: 687 */ 0xEE /* 'n' -> */, /* pos 0469: 688 */ 0xE7 /* 'g' -> */, /* pos 046a: 689 */ 0xF3 /* 's' -> */, /* pos 046b: 690 */ 0xBA /* ':' -> */, /* pos 046c: 691 */ 0x00, 0x09 /* - terminal marker 9 - */, /* pos 046e: 692 */ 0x61 /* 'a' */, 0x0D, 0x00 /* (to 0x047B state 693) */, 0x6D /* 'm' */, 0x14, 0x00 /* (to 0x0485 state 702) */, 0x70 /* 'p' */, 0x18, 0x00 /* (to 0x048C state 708) */, 0x73 /* 's' */, 0x20, 0x00 /* (to 0x0497 state 712) */, 0x08, /* fail */ /* pos 047b: 693 */ 0xF5 /* 'u' -> */, /* pos 047c: 694 */ 0xF4 /* 't' -> */, /* pos 047d: 695 */ 0xE8 /* 'h' -> */, /* pos 047e: 696 */ 0xEF /* 'o' -> */, /* pos 047f: 697 */ 0xF2 /* 'r' -> */, /* pos 0480: 698 */ 0xE9 /* 'i' -> */, /* pos 0481: 699 */ 0xF4 /* 't' -> */, /* pos 0482: 700 */ 0xF9 /* 'y' -> */, /* pos 0483: 701 */ 0x00, 0x19 /* - terminal marker 25 - */, /* pos 0485: 702 */ 0xE5 /* 'e' -> */, /* pos 0486: 703 */ 0xF4 /* 't' -> */, /* pos 0487: 704 */ 0xE8 /* 'h' -> */, /* pos 0488: 705 */ 0xEF /* 'o' -> */, /* pos 0489: 706 */ 0xE4 /* 'd' -> */, /* pos 048a: 707 */ 0x00, 0x1A /* - terminal marker 26 - */, /* pos 048c: 708 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x0493 state 709) */, 0x72 /* 'r' */, 0x1B, 0x00 /* (to 0x04AA state 723) */, 0x08, /* fail */ /* pos 0493: 709 */ 0xF4 /* 't' -> */, /* pos 0494: 710 */ 0xE8 /* 'h' -> */, /* pos 0495: 711 */ 0x00, 0x1B /* - terminal marker 27 - */, /* pos 0497: 712 */ 0x63 /* 'c' */, 0x07, 0x00 /* (to 0x049E state 713) */, 0x74 /* 't' */, 0x0A, 0x00 /* (to 0x04A4 state 718) */, 0x08, /* fail */ /* pos 049e: 713 */ 0xE8 /* 'h' -> */, /* pos 049f: 714 */ 0xE5 /* 'e' -> */, /* pos 04a0: 715 */ 0xED /* 'm' -> */, /* pos 04a1: 716 */ 0xE5 /* 'e' -> */, /* pos 04a2: 717 */ 0x00, 0x1C /* - terminal marker 28 - */, /* pos 04a4: 718 */ 0xE1 /* 'a' -> */, /* pos 04a5: 719 */ 0xF4 /* 't' -> */, /* pos 04a6: 720 */ 0xF5 /* 'u' -> */, /* pos 04a7: 721 */ 0xF3 /* 's' -> */, /* pos 04a8: 722 */ 0x00, 0x1D /* - terminal marker 29 - */, /* pos 04aa: 723 */ 0xEF /* 'o' -> */, /* pos 04ab: 724 */ 0xF4 /* 't' -> */, /* pos 04ac: 725 */ 0xEF /* 'o' -> */, /* pos 04ad: 726 */ 0xE3 /* 'c' -> */, /* pos 04ae: 727 */ 0xEF /* 'o' -> */, /* pos 04af: 728 */ 0xEC /* 'l' -> */, /* pos 04b0: 729 */ 0x00, 0x4B /* - terminal marker 75 - */, /* total size 1202 bytes */ #endif #if !defined(LWS_HTTP_HEADERS_ALL) && !defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) && defined(LWS_ROLE_WS) && defined(LWS_ROLE_H2) /* 0: 0: get */ /* 1: 1: post */ /* 2: 3: host: */ /* 3: 4: connection: */ /* 4: 5: upgrade: */ /* 5: 6: origin: */ /* 6: 7: sec-websocket-draft: */ /* 7: 8: */ /* 8: 9: sec-websocket-extensions: */ /* 9: 10: sec-websocket-key1: */ /* 10: 11: sec-websocket-key2: */ /* 11: 12: sec-websocket-protocol: */ /* 12: 13: sec-websocket-accept: */ /* 13: 14: sec-websocket-nonce: */ /* 14: 15: http/1.1 */ /* 15: 16: http2-settings: */ /* 16: 17: accept: */ /* 17: 19: if-modified-since: */ /* 18: 20: if-none-match: */ /* 19: 21: accept-encoding: */ /* 20: 22: accept-language: */ /* 21: 23: pragma: */ /* 22: 24: cache-control: */ /* 23: 25: authorization: */ /* 24: 26: cookie: */ /* 25: 27: content-length: */ /* 26: 28: content-type: */ /* 27: 29: date: */ /* 28: 30: range: */ /* 29: 31: referer: */ /* 30: 32: sec-websocket-key: */ /* 31: 33: sec-websocket-version: */ /* 32: 34: sec-websocket-origin: */ /* 33: 35: :authority */ /* 34: 36: :method */ /* 35: 37: :path */ /* 36: 38: :scheme */ /* 37: 39: :status */ /* 38: 40: accept-charset: */ /* 39: 41: accept-ranges: */ /* 40: 42: access-control-allow-origin: */ /* 41: 43: age: */ /* 42: 44: allow: */ /* 43: 45: content-disposition: */ /* 44: 46: content-encoding: */ /* 45: 47: content-language: */ /* 46: 48: content-location: */ /* 47: 49: content-range: */ /* 48: 50: etag: */ /* 49: 51: expect: */ /* 50: 52: expires: */ /* 51: 53: from: */ /* 52: 54: if-match: */ /* 53: 55: if-range: */ /* 54: 56: if-unmodified-since: */ /* 55: 57: last-modified: */ /* 56: 58: link: */ /* 57: 59: location: */ /* 58: 60: max-forwards: */ /* 59: 61: proxy-authenticate: */ /* 60: 62: proxy-authorization: */ /* 61: 63: refresh: */ /* 62: 64: retry-after: */ /* 63: 65: server: */ /* 64: 66: set-cookie: */ /* 65: 67: strict-transport-security: */ /* 66: 68: transfer-encoding: */ /* 67: 69: user-agent: */ /* 68: 70: vary: */ /* 69: 71: via: */ /* 70: 72: www-authenticate: */ /* 71: 76: uri-args */ /* 72: 79: http/1.0 */ /* 73: 80: x-forwarded-for: */ /* 74: 81: connect */ /* 75: 82: head */ /* 76: 83: te: */ /* 77: 84: replay-nonce: */ /* 78: 85: :protocol */ /* 79: 86: x-auth-token: */ /* 80: 87: x-amzn-dss-signature: */ /* pos 0000: 0 */ 0x67 /* 'g' */, 0x40, 0x00 /* (to 0x0040 state 1) */, 0x70 /* 'p' */, 0x42, 0x00 /* (to 0x0045 state 5) */, 0x68 /* 'h' */, 0x51, 0x00 /* (to 0x0057 state 10) */, 0x63 /* 'c' */, 0x5D, 0x00 /* (to 0x0066 state 15) */, 0x75 /* 'u' */, 0x7E, 0x00 /* (to 0x008A state 26) */, 0x6F /* 'o' */, 0x8D, 0x00 /* (to 0x009C state 34) */, 0x0D /* '.' */, 0x98, 0x00 /* (to 0x00AA state 41) */, 0x61 /* 'a' */, 0xAD, 0x00 /* (to 0x00C2 state 51) */, 0x69 /* 'i' */, 0xCA, 0x00 /* (to 0x00E2 state 58) */, 0x64 /* 'd' */, 0x73, 0x01 /* (to 0x018E state 160) */, 0x72 /* 'r' */, 0x7C, 0x01 /* (to 0x019A state 165) */, 0x65 /* 'e' */, 0xC8, 0x01 /* (to 0x01E9 state 229) */, 0x66 /* 'f' */, 0xE4, 0x01 /* (to 0x0208 state 245) */, 0x6C /* 'l' */, 0x06, 0x02 /* (to 0x022D state 278) */, 0x73 /* 's' */, 0x4B, 0x02 /* (to 0x0275 state 321) */, 0x74 /* 't' */, 0x69, 0x02 /* (to 0x0296 state 337) */, 0x78 /* 'x' */, 0x8A, 0x02 /* (to 0x02BA state 364) */, 0x6D /* 'm' */, 0x14, 0x03 /* (to 0x0347 state 474) */, 0x76 /* 'v' */, 0x6D, 0x03 /* (to 0x03A3 state 549) */, 0x77 /* 'w' */, 0x7A, 0x03 /* (to 0x03B3 state 557) */, 0x3A /* ':' */, 0x32, 0x04 /* (to 0x046E state 692) */, 0x08, /* fail */ /* pos 0040: 1 */ 0xE5 /* 'e' -> */, /* pos 0041: 2 */ 0xF4 /* 't' -> */, /* pos 0042: 3 */ 0xA0 /* ' ' -> */, /* pos 0043: 4 */ 0x00, 0x00 /* - terminal marker 0 - */, /* pos 0045: 5 */ 0x6F /* 'o' */, 0x0D, 0x00 /* (to 0x0052 state 6) */, 0x72 /* 'r' */, 0xEC, 0x00 /* (to 0x0134 state 106) */, 0x61 /* 'a' */, 0x7A, 0x03 /* (to 0x03C5 state 574) */, 0x75 /* 'u' */, 0x7C, 0x03 /* (to 0x03CA state 578) */, 0x08, /* fail */ /* pos 0052: 6 */ 0xF3 /* 's' -> */, /* pos 0053: 7 */ 0xF4 /* 't' -> */, /* pos 0054: 8 */ 0xA0 /* ' ' -> */, /* pos 0055: 9 */ 0x00, 0x01 /* - terminal marker 1 - */, /* pos 0057: 10 */ 0x6F /* 'o' */, 0x0A, 0x00 /* (to 0x0061 state 11) */, 0x74 /* 't' */, 0x53, 0x00 /* (to 0x00AD state 43) */, 0x65 /* 'e' */, 0x79, 0x02 /* (to 0x02D6 state 381) */, 0x08, /* fail */ /* pos 0061: 11 */ 0xF3 /* 's' -> */, /* pos 0062: 12 */ 0xF4 /* 't' -> */, /* pos 0063: 13 */ 0xBA /* ':' -> */, /* pos 0064: 14 */ 0x00, 0x02 /* - terminal marker 2 - */, /* pos 0066: 15 */ 0x6F /* 'o' */, 0x07, 0x00 /* (to 0x006D state 16) */, 0x61 /* 'a' */, 0xD8, 0x00 /* (to 0x0141 state 112) */, 0x08, /* fail */ /* pos 006d: 16 */ 0x6E /* 'n' */, 0x07, 0x00 /* (to 0x0074 state 17) */, 0x6F /* 'o' */, 0xED, 0x00 /* (to 0x015D state 138) */, 0x08, /* fail */ /* pos 0074: 17 */ 0x6E /* 'n' */, 0x07, 0x00 /* (to 0x007B state 18) */, 0x74 /* 't' */, 0xEC, 0x00 /* (to 0x0163 state 143) */, 0x08, /* fail */ /* pos 007b: 18 */ 0xE5 /* 'e' -> */, /* pos 007c: 19 */ 0xE3 /* 'c' -> */, /* pos 007d: 20 */ 0xF4 /* 't' -> */, /* pos 007e: 21 */ 0x69 /* 'i' */, 0x07, 0x00 /* (to 0x0085 state 22) */, 0x20 /* ' ' */, 0x53, 0x02 /* (to 0x02D4 state 380) */, 0x08, /* fail */ /* pos 0085: 22 */ 0xEF /* 'o' -> */, /* pos 0086: 23 */ 0xEE /* 'n' -> */, /* pos 0087: 24 */ 0xBA /* ':' -> */, /* pos 0088: 25 */ 0x00, 0x03 /* - terminal marker 3 - */, /* pos 008a: 26 */ 0x70 /* 'p' */, 0x0A, 0x00 /* (to 0x0094 state 27) */, 0x72 /* 'r' */, 0x22, 0x02 /* (to 0x02AF state 355) */, 0x73 /* 's' */, 0x08, 0x03 /* (to 0x0398 state 539) */, 0x08, /* fail */ /* pos 0094: 27 */ 0xE7 /* 'g' -> */, /* pos 0095: 28 */ 0xF2 /* 'r' -> */, /* pos 0096: 29 */ 0xE1 /* 'a' -> */, /* pos 0097: 30 */ 0xE4 /* 'd' -> */, /* pos 0098: 31 */ 0xE5 /* 'e' -> */, /* pos 0099: 32 */ 0xBA /* ':' -> */, /* pos 009a: 33 */ 0x00, 0x04 /* - terminal marker 4 - */, /* pos 009c: 34 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x00A3 state 35) */, 0x70 /* 'p' */, 0x61, 0x02 /* (to 0x0300 state 414) */, 0x08, /* fail */ /* pos 00a3: 35 */ 0xE9 /* 'i' -> */, /* pos 00a4: 36 */ 0xE7 /* 'g' -> */, /* pos 00a5: 37 */ 0xE9 /* 'i' -> */, /* pos 00a6: 38 */ 0xEE /* 'n' -> */, /* pos 00a7: 39 */ 0xBA /* ':' -> */, /* pos 00a8: 40 */ 0x00, 0x05 /* - terminal marker 5 - */, /* pos 00aa: 41 */ 0x8A /* '.' -> */, /* pos 00ab: 42 */ 0x00, 0x07 /* - terminal marker 7 - */, /* pos 00ad: 43 */ 0xF4 /* 't' -> */, /* pos 00ae: 44 */ 0xF0 /* 'p' -> */, /* pos 00af: 45 */ 0x2F /* '/' */, 0x07, 0x00 /* (to 0x00B6 state 46) */, 0x32 /* '2' */, 0xB0, 0x03 /* (to 0x0462 state 681) */, 0x08, /* fail */ /* pos 00b6: 46 */ 0xB1 /* '1' -> */, /* pos 00b7: 47 */ 0xAE /* '.' -> */, /* pos 00b8: 48 */ 0x31 /* '1' */, 0x07, 0x00 /* (to 0x00BF state 49) */, 0x30 /* '0' */, 0xFC, 0x01 /* (to 0x02B7 state 362) */, 0x08, /* fail */ /* pos 00bf: 49 */ 0xA0 /* ' ' -> */, /* pos 00c0: 50 */ 0x00, 0x0E /* - terminal marker 14 - */, /* pos 00c2: 51 */ 0x63 /* 'c' */, 0x0D, 0x00 /* (to 0x00CF state 52) */, 0x75 /* 'u' */, 0x8A, 0x00 /* (to 0x014F state 125) */, 0x67 /* 'g' */, 0xE7, 0x00 /* (to 0x01AF state 178) */, 0x6C /* 'l' */, 0xE8, 0x00 /* (to 0x01B3 state 181) */, 0x08, /* fail */ /* pos 00cf: 52 */ 0xE3 /* 'c' -> */, /* pos 00d0: 53 */ 0xE5 /* 'e' -> */, /* pos 00d1: 54 */ 0x70 /* 'p' */, 0x07, 0x00 /* (to 0x00D8 state 55) */, 0x73 /* 's' */, 0x34, 0x02 /* (to 0x0308 state 421) */, 0x08, /* fail */ /* pos 00d8: 55 */ 0xF4 /* 't' -> */, /* pos 00d9: 56 */ 0x3A /* ':' */, 0x07, 0x00 /* (to 0x00E0 state 57) */, 0x2D /* '-' */, 0x37, 0x00 /* (to 0x0113 state 87) */, 0x08, /* fail */ /* pos 00e0: 57 */ 0x00, 0x10 /* - terminal marker 16 - */, /* pos 00e2: 58 */ 0xE6 /* 'f' -> */, /* pos 00e3: 59 */ 0xAD /* '-' -> */, /* pos 00e4: 60 */ 0x6D /* 'm' */, 0x0D, 0x00 /* (to 0x00F1 state 61) */, 0x6E /* 'n' */, 0x20, 0x00 /* (to 0x0107 state 76) */, 0x72 /* 'r' */, 0x2A, 0x01 /* (to 0x0214 state 255) */, 0x75 /* 'u' */, 0x2E, 0x01 /* (to 0x021B state 261) */, 0x08, /* fail */ /* pos 00f1: 61 */ 0x6F /* 'o' */, 0x07, 0x00 /* (to 0x00F8 state 62) */, 0x61 /* 'a' */, 0x1A, 0x01 /* (to 0x020E state 250) */, 0x08, /* fail */ /* pos 00f8: 62 */ 0xE4 /* 'd' -> */, /* pos 00f9: 63 */ 0xE9 /* 'i' -> */, /* pos 00fa: 64 */ 0xE6 /* 'f' -> */, /* pos 00fb: 65 */ 0xE9 /* 'i' -> */, /* pos 00fc: 66 */ 0xE5 /* 'e' -> */, /* pos 00fd: 67 */ 0xE4 /* 'd' -> */, /* pos 00fe: 68 */ 0xAD /* '-' -> */, /* pos 00ff: 69 */ 0xF3 /* 's' -> */, /* pos 0100: 70 */ 0xE9 /* 'i' -> */, /* pos 0101: 71 */ 0xEE /* 'n' -> */, /* pos 0102: 72 */ 0xE3 /* 'c' -> */, /* pos 0103: 73 */ 0xE5 /* 'e' -> */, /* pos 0104: 74 */ 0xBA /* ':' -> */, /* pos 0105: 75 */ 0x00, 0x11 /* - terminal marker 17 - */, /* pos 0107: 76 */ 0xEF /* 'o' -> */, /* pos 0108: 77 */ 0xEE /* 'n' -> */, /* pos 0109: 78 */ 0xE5 /* 'e' -> */, /* pos 010a: 79 */ 0xAD /* '-' -> */, /* pos 010b: 80 */ 0xED /* 'm' -> */, /* pos 010c: 81 */ 0xE1 /* 'a' -> */, /* pos 010d: 82 */ 0xF4 /* 't' -> */, /* pos 010e: 83 */ 0xE3 /* 'c' -> */, /* pos 010f: 84 */ 0xE8 /* 'h' -> */, /* pos 0110: 85 */ 0xBA /* ':' -> */, /* pos 0111: 86 */ 0x00, 0x12 /* - terminal marker 18 - */, /* pos 0113: 87 */ 0x65 /* 'e' */, 0x0D, 0x00 /* (to 0x0120 state 88) */, 0x6C /* 'l' */, 0x14, 0x00 /* (to 0x012A state 97) */, 0x72 /* 'r' */, 0x8E, 0x00 /* (to 0x01A7 state 171) */, 0x63 /* 'c' */, 0x14, 0x02 /* (to 0x0330 state 453) */, 0x08, /* fail */ /* pos 0120: 88 */ 0xEE /* 'n' -> */, /* pos 0121: 89 */ 0xE3 /* 'c' -> */, /* pos 0122: 90 */ 0xEF /* 'o' -> */, /* pos 0123: 91 */ 0xE4 /* 'd' -> */, /* pos 0124: 92 */ 0xE9 /* 'i' -> */, /* pos 0125: 93 */ 0xEE /* 'n' -> */, /* pos 0126: 94 */ 0xE7 /* 'g' -> */, /* pos 0127: 95 */ 0xBA /* ':' -> */, /* pos 0128: 96 */ 0x00, 0x13 /* - terminal marker 19 - */, /* pos 012a: 97 */ 0xE1 /* 'a' -> */, /* pos 012b: 98 */ 0xEE /* 'n' -> */, /* pos 012c: 99 */ 0xE7 /* 'g' -> */, /* pos 012d: 100 */ 0xF5 /* 'u' -> */, /* pos 012e: 101 */ 0xE1 /* 'a' -> */, /* pos 012f: 102 */ 0xE7 /* 'g' -> */, /* pos 0130: 103 */ 0xE5 /* 'e' -> */, /* pos 0131: 104 */ 0xBA /* ':' -> */, /* pos 0132: 105 */ 0x00, 0x14 /* - terminal marker 20 - */, /* pos 0134: 106 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x013B state 107) */, 0x6F /* 'o' */, 0x1E, 0x02 /* (to 0x0355 state 487) */, 0x08, /* fail */ /* pos 013b: 107 */ 0xE7 /* 'g' -> */, /* pos 013c: 108 */ 0xED /* 'm' -> */, /* pos 013d: 109 */ 0xE1 /* 'a' -> */, /* pos 013e: 110 */ 0xBA /* ':' -> */, /* pos 013f: 111 */ 0x00, 0x15 /* - terminal marker 21 - */, /* pos 0141: 112 */ 0xE3 /* 'c' -> */, /* pos 0142: 113 */ 0xE8 /* 'h' -> */, /* pos 0143: 114 */ 0xE5 /* 'e' -> */, /* pos 0144: 115 */ 0xAD /* '-' -> */, /* pos 0145: 116 */ 0xE3 /* 'c' -> */, /* pos 0146: 117 */ 0xEF /* 'o' -> */, /* pos 0147: 118 */ 0xEE /* 'n' -> */, /* pos 0148: 119 */ 0xF4 /* 't' -> */, /* pos 0149: 120 */ 0xF2 /* 'r' -> */, /* pos 014a: 121 */ 0xEF /* 'o' -> */, /* pos 014b: 122 */ 0xEC /* 'l' -> */, /* pos 014c: 123 */ 0xBA /* ':' -> */, /* pos 014d: 124 */ 0x00, 0x16 /* - terminal marker 22 - */, /* pos 014f: 125 */ 0xF4 /* 't' -> */, /* pos 0150: 126 */ 0xE8 /* 'h' -> */, /* pos 0151: 127 */ 0xEF /* 'o' -> */, /* pos 0152: 128 */ 0xF2 /* 'r' -> */, /* pos 0153: 129 */ 0xE9 /* 'i' -> */, /* pos 0154: 130 */ 0xFA /* 'z' -> */, /* pos 0155: 131 */ 0xE1 /* 'a' -> */, /* pos 0156: 132 */ 0xF4 /* 't' -> */, /* pos 0157: 133 */ 0xE9 /* 'i' -> */, /* pos 0158: 134 */ 0xEF /* 'o' -> */, /* pos 0159: 135 */ 0xEE /* 'n' -> */, /* pos 015a: 136 */ 0xBA /* ':' -> */, /* pos 015b: 137 */ 0x00, 0x17 /* - terminal marker 23 - */, /* pos 015d: 138 */ 0xEB /* 'k' -> */, /* pos 015e: 139 */ 0xE9 /* 'i' -> */, /* pos 015f: 140 */ 0xE5 /* 'e' -> */, /* pos 0160: 141 */ 0xBA /* ':' -> */, /* pos 0161: 142 */ 0x00, 0x18 /* - terminal marker 24 - */, /* pos 0163: 143 */ 0xE5 /* 'e' -> */, /* pos 0164: 144 */ 0xEE /* 'n' -> */, /* pos 0165: 145 */ 0xF4 /* 't' -> */, /* pos 0166: 146 */ 0xAD /* '-' -> */, /* pos 0167: 147 */ 0x6C /* 'l' */, 0x10, 0x00 /* (to 0x0177 state 148) */, 0x74 /* 't' */, 0x1E, 0x00 /* (to 0x0188 state 155) */, 0x64 /* 'd' */, 0x4C, 0x00 /* (to 0x01B9 state 186) */, 0x65 /* 'e' */, 0x56, 0x00 /* (to 0x01C6 state 198) */, 0x72 /* 'r' */, 0x6F, 0x00 /* (to 0x01E2 state 223) */, 0x08, /* fail */ /* pos 0177: 148 */ 0x65 /* 'e' */, 0x0A, 0x00 /* (to 0x0181 state 149) */, 0x61 /* 'a' */, 0x56, 0x00 /* (to 0x01D0 state 207) */, 0x6F /* 'o' */, 0x5C, 0x00 /* (to 0x01D9 state 215) */, 0x08, /* fail */ /* pos 0181: 149 */ 0xEE /* 'n' -> */, /* pos 0182: 150 */ 0xE7 /* 'g' -> */, /* pos 0183: 151 */ 0xF4 /* 't' -> */, /* pos 0184: 152 */ 0xE8 /* 'h' -> */, /* pos 0185: 153 */ 0xBA /* ':' -> */, /* pos 0186: 154 */ 0x00, 0x19 /* - terminal marker 25 - */, /* pos 0188: 155 */ 0xF9 /* 'y' -> */, /* pos 0189: 156 */ 0xF0 /* 'p' -> */, /* pos 018a: 157 */ 0xE5 /* 'e' -> */, /* pos 018b: 158 */ 0xBA /* ':' -> */, /* pos 018c: 159 */ 0x00, 0x1A /* - terminal marker 26 - */, /* pos 018e: 160 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x0195 state 161) */, 0x65 /* 'e' */, 0x3C, 0x02 /* (to 0x03CD state 580) */, 0x08, /* fail */ /* pos 0195: 161 */ 0xF4 /* 't' -> */, /* pos 0196: 162 */ 0xE5 /* 'e' -> */, /* pos 0197: 163 */ 0xBA /* ':' -> */, /* pos 0198: 164 */ 0x00, 0x1B /* - terminal marker 27 - */, /* pos 019a: 165 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x01A1 state 166) */, 0x65 /* 'e' */, 0xB6, 0x00 /* (to 0x0253 state 304) */, 0x08, /* fail */ /* pos 01a1: 166 */ 0xEE /* 'n' -> */, /* pos 01a2: 167 */ 0xE7 /* 'g' -> */, /* pos 01a3: 168 */ 0xE5 /* 'e' -> */, /* pos 01a4: 169 */ 0xBA /* ':' -> */, /* pos 01a5: 170 */ 0x00, 0x1C /* - terminal marker 28 - */, /* pos 01a7: 171 */ 0xE1 /* 'a' -> */, /* pos 01a8: 172 */ 0xEE /* 'n' -> */, /* pos 01a9: 173 */ 0xE7 /* 'g' -> */, /* pos 01aa: 174 */ 0xE5 /* 'e' -> */, /* pos 01ab: 175 */ 0xF3 /* 's' -> */, /* pos 01ac: 176 */ 0xBA /* ':' -> */, /* pos 01ad: 177 */ 0x00, 0x27 /* - terminal marker 39 - */, /* pos 01af: 178 */ 0xE5 /* 'e' -> */, /* pos 01b0: 179 */ 0xBA /* ':' -> */, /* pos 01b1: 180 */ 0x00, 0x29 /* - terminal marker 41 - */, /* pos 01b3: 181 */ 0xEC /* 'l' -> */, /* pos 01b4: 182 */ 0xEF /* 'o' -> */, /* pos 01b5: 183 */ 0xF7 /* 'w' -> */, /* pos 01b6: 184 */ 0xBA /* ':' -> */, /* pos 01b7: 185 */ 0x00, 0x2A /* - terminal marker 42 - */, /* pos 01b9: 186 */ 0xE9 /* 'i' -> */, /* pos 01ba: 187 */ 0xF3 /* 's' -> */, /* pos 01bb: 188 */ 0xF0 /* 'p' -> */, /* pos 01bc: 189 */ 0xEF /* 'o' -> */, /* pos 01bd: 190 */ 0xF3 /* 's' -> */, /* pos 01be: 191 */ 0xE9 /* 'i' -> */, /* pos 01bf: 192 */ 0xF4 /* 't' -> */, /* pos 01c0: 193 */ 0xE9 /* 'i' -> */, /* pos 01c1: 194 */ 0xEF /* 'o' -> */, /* pos 01c2: 195 */ 0xEE /* 'n' -> */, /* pos 01c3: 196 */ 0xBA /* ':' -> */, /* pos 01c4: 197 */ 0x00, 0x2B /* - terminal marker 43 - */, /* pos 01c6: 198 */ 0xEE /* 'n' -> */, /* pos 01c7: 199 */ 0xE3 /* 'c' -> */, /* pos 01c8: 200 */ 0xEF /* 'o' -> */, /* pos 01c9: 201 */ 0xE4 /* 'd' -> */, /* pos 01ca: 202 */ 0xE9 /* 'i' -> */, /* pos 01cb: 203 */ 0xEE /* 'n' -> */, /* pos 01cc: 204 */ 0xE7 /* 'g' -> */, /* pos 01cd: 205 */ 0xBA /* ':' -> */, /* pos 01ce: 206 */ 0x00, 0x2C /* - terminal marker 44 - */, /* pos 01d0: 207 */ 0xEE /* 'n' -> */, /* pos 01d1: 208 */ 0xE7 /* 'g' -> */, /* pos 01d2: 209 */ 0xF5 /* 'u' -> */, /* pos 01d3: 210 */ 0xE1 /* 'a' -> */, /* pos 01d4: 211 */ 0xE7 /* 'g' -> */, /* pos 01d5: 212 */ 0xE5 /* 'e' -> */, /* pos 01d6: 213 */ 0xBA /* ':' -> */, /* pos 01d7: 214 */ 0x00, 0x2D /* - terminal marker 45 - */, /* pos 01d9: 215 */ 0xE3 /* 'c' -> */, /* pos 01da: 216 */ 0xE1 /* 'a' -> */, /* pos 01db: 217 */ 0xF4 /* 't' -> */, /* pos 01dc: 218 */ 0xE9 /* 'i' -> */, /* pos 01dd: 219 */ 0xEF /* 'o' -> */, /* pos 01de: 220 */ 0xEE /* 'n' -> */, /* pos 01df: 221 */ 0xBA /* ':' -> */, /* pos 01e0: 222 */ 0x00, 0x2E /* - terminal marker 46 - */, /* pos 01e2: 223 */ 0xE1 /* 'a' -> */, /* pos 01e3: 224 */ 0xEE /* 'n' -> */, /* pos 01e4: 225 */ 0xE7 /* 'g' -> */, /* pos 01e5: 226 */ 0xE5 /* 'e' -> */, /* pos 01e6: 227 */ 0xBA /* ':' -> */, /* pos 01e7: 228 */ 0x00, 0x2F /* - terminal marker 47 - */, /* pos 01e9: 229 */ 0x74 /* 't' */, 0x07, 0x00 /* (to 0x01F0 state 230) */, 0x78 /* 'x' */, 0x09, 0x00 /* (to 0x01F5 state 234) */, 0x08, /* fail */ /* pos 01f0: 230 */ 0xE1 /* 'a' -> */, /* pos 01f1: 231 */ 0xE7 /* 'g' -> */, /* pos 01f2: 232 */ 0xBA /* ':' -> */, /* pos 01f3: 233 */ 0x00, 0x30 /* - terminal marker 48 - */, /* pos 01f5: 234 */ 0xF0 /* 'p' -> */, /* pos 01f6: 235 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x01FD state 236) */, 0x69 /* 'i' */, 0x09, 0x00 /* (to 0x0202 state 240) */, 0x08, /* fail */ /* pos 01fd: 236 */ 0xE3 /* 'c' -> */, /* pos 01fe: 237 */ 0xF4 /* 't' -> */, /* pos 01ff: 238 */ 0xBA /* ':' -> */, /* pos 0200: 239 */ 0x00, 0x31 /* - terminal marker 49 - */, /* pos 0202: 240 */ 0xF2 /* 'r' -> */, /* pos 0203: 241 */ 0xE5 /* 'e' -> */, /* pos 0204: 242 */ 0xF3 /* 's' -> */, /* pos 0205: 243 */ 0xBA /* ':' -> */, /* pos 0206: 244 */ 0x00, 0x32 /* - terminal marker 50 - */, /* pos 0208: 245 */ 0xF2 /* 'r' -> */, /* pos 0209: 246 */ 0xEF /* 'o' -> */, /* pos 020a: 247 */ 0xED /* 'm' -> */, /* pos 020b: 248 */ 0xBA /* ':' -> */, /* pos 020c: 249 */ 0x00, 0x33 /* - terminal marker 51 - */, /* pos 020e: 250 */ 0xF4 /* 't' -> */, /* pos 020f: 251 */ 0xE3 /* 'c' -> */, /* pos 0210: 252 */ 0xE8 /* 'h' -> */, /* pos 0211: 253 */ 0xBA /* ':' -> */, /* pos 0212: 254 */ 0x00, 0x34 /* - terminal marker 52 - */, /* pos 0214: 255 */ 0xE1 /* 'a' -> */, /* pos 0215: 256 */ 0xEE /* 'n' -> */, /* pos 0216: 257 */ 0xE7 /* 'g' -> */, /* pos 0217: 258 */ 0xE5 /* 'e' -> */, /* pos 0218: 259 */ 0xBA /* ':' -> */, /* pos 0219: 260 */ 0x00, 0x35 /* - terminal marker 53 - */, /* pos 021b: 261 */ 0xEE /* 'n' -> */, /* pos 021c: 262 */ 0xED /* 'm' -> */, /* pos 021d: 263 */ 0xEF /* 'o' -> */, /* pos 021e: 264 */ 0xE4 /* 'd' -> */, /* pos 021f: 265 */ 0xE9 /* 'i' -> */, /* pos 0220: 266 */ 0xE6 /* 'f' -> */, /* pos 0221: 267 */ 0xE9 /* 'i' -> */, /* pos 0222: 268 */ 0xE5 /* 'e' -> */, /* pos 0223: 269 */ 0xE4 /* 'd' -> */, /* pos 0224: 270 */ 0xAD /* '-' -> */, /* pos 0225: 271 */ 0xF3 /* 's' -> */, /* pos 0226: 272 */ 0xE9 /* 'i' -> */, /* pos 0227: 273 */ 0xEE /* 'n' -> */, /* pos 0228: 274 */ 0xE3 /* 'c' -> */, /* pos 0229: 275 */ 0xE5 /* 'e' -> */, /* pos 022a: 276 */ 0xBA /* ':' -> */, /* pos 022b: 277 */ 0x00, 0x36 /* - terminal marker 54 - */, /* pos 022d: 278 */ 0x61 /* 'a' */, 0x0A, 0x00 /* (to 0x0237 state 279) */, 0x69 /* 'i' */, 0x15, 0x00 /* (to 0x0245 state 292) */, 0x6F /* 'o' */, 0x17, 0x00 /* (to 0x024A state 296) */, 0x08, /* fail */ /* pos 0237: 279 */ 0xF3 /* 's' -> */, /* pos 0238: 280 */ 0xF4 /* 't' -> */, /* pos 0239: 281 */ 0xAD /* '-' -> */, /* pos 023a: 282 */ 0xED /* 'm' -> */, /* pos 023b: 283 */ 0xEF /* 'o' -> */, /* pos 023c: 284 */ 0xE4 /* 'd' -> */, /* pos 023d: 285 */ 0xE9 /* 'i' -> */, /* pos 023e: 286 */ 0xE6 /* 'f' -> */, /* pos 023f: 287 */ 0xE9 /* 'i' -> */, /* pos 0240: 288 */ 0xE5 /* 'e' -> */, /* pos 0241: 289 */ 0xE4 /* 'd' -> */, /* pos 0242: 290 */ 0xBA /* ':' -> */, /* pos 0243: 291 */ 0x00, 0x37 /* - terminal marker 55 - */, /* pos 0245: 292 */ 0xEE /* 'n' -> */, /* pos 0246: 293 */ 0xEB /* 'k' -> */, /* pos 0247: 294 */ 0xBA /* ':' -> */, /* pos 0248: 295 */ 0x00, 0x38 /* - terminal marker 56 - */, /* pos 024a: 296 */ 0xE3 /* 'c' -> */, /* pos 024b: 297 */ 0xE1 /* 'a' -> */, /* pos 024c: 298 */ 0xF4 /* 't' -> */, /* pos 024d: 299 */ 0xE9 /* 'i' -> */, /* pos 024e: 300 */ 0xEF /* 'o' -> */, /* pos 024f: 301 */ 0xEE /* 'n' -> */, /* pos 0250: 302 */ 0xBA /* ':' -> */, /* pos 0251: 303 */ 0x00, 0x39 /* - terminal marker 57 - */, /* pos 0253: 304 */ 0x66 /* 'f' */, 0x0A, 0x00 /* (to 0x025D state 305) */, 0x74 /* 't' */, 0x14, 0x00 /* (to 0x026A state 311) */, 0x70 /* 'p' */, 0x88, 0x01 /* (to 0x03E1 state 596) */, 0x08, /* fail */ /* pos 025d: 305 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x0264 state 306) */, 0x65 /* 'e' */, 0xCA, 0x00 /* (to 0x032A state 448) */, 0x08, /* fail */ /* pos 0264: 306 */ 0xE5 /* 'e' -> */, /* pos 0265: 307 */ 0xF3 /* 's' -> */, /* pos 0266: 308 */ 0xE8 /* 'h' -> */, /* pos 0267: 309 */ 0xBA /* ':' -> */, /* pos 0268: 310 */ 0x00, 0x3D /* - terminal marker 61 - */, /* pos 026a: 311 */ 0xF2 /* 'r' -> */, /* pos 026b: 312 */ 0xF9 /* 'y' -> */, /* pos 026c: 313 */ 0xAD /* '-' -> */, /* pos 026d: 314 */ 0xE1 /* 'a' -> */, /* pos 026e: 315 */ 0xE6 /* 'f' -> */, /* pos 026f: 316 */ 0xF4 /* 't' -> */, /* pos 0270: 317 */ 0xE5 /* 'e' -> */, /* pos 0271: 318 */ 0xF2 /* 'r' -> */, /* pos 0272: 319 */ 0xBA /* ':' -> */, /* pos 0273: 320 */ 0x00, 0x3E /* - terminal marker 62 - */, /* pos 0275: 321 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x027C state 322) */, 0x74 /* 't' */, 0x06, 0x01 /* (to 0x037E state 514) */, 0x08, /* fail */ /* pos 027c: 322 */ 0x72 /* 'r' */, 0x0A, 0x00 /* (to 0x0286 state 323) */, 0x74 /* 't' */, 0x0D, 0x00 /* (to 0x028C state 328) */, 0x63 /* 'c' */, 0x6B, 0x01 /* (to 0x03ED state 607) */, 0x08, /* fail */ /* pos 0286: 323 */ 0xF6 /* 'v' -> */, /* pos 0287: 324 */ 0xE5 /* 'e' -> */, /* pos 0288: 325 */ 0xF2 /* 'r' -> */, /* pos 0289: 326 */ 0xBA /* ':' -> */, /* pos 028a: 327 */ 0x00, 0x3F /* - terminal marker 63 - */, /* pos 028c: 328 */ 0xAD /* '-' -> */, /* pos 028d: 329 */ 0xE3 /* 'c' -> */, /* pos 028e: 330 */ 0xEF /* 'o' -> */, /* pos 028f: 331 */ 0xEF /* 'o' -> */, /* pos 0290: 332 */ 0xEB /* 'k' -> */, /* pos 0291: 333 */ 0xE9 /* 'i' -> */, /* pos 0292: 334 */ 0xE5 /* 'e' -> */, /* pos 0293: 335 */ 0xBA /* ':' -> */, /* pos 0294: 336 */ 0x00, 0x40 /* - terminal marker 64 - */, /* pos 0296: 337 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x029D state 338) */, 0x65 /* 'e' */, 0x45, 0x01 /* (to 0x03DE state 594) */, 0x08, /* fail */ /* pos 029d: 338 */ 0xE1 /* 'a' -> */, /* pos 029e: 339 */ 0xEE /* 'n' -> */, /* pos 029f: 340 */ 0xF3 /* 's' -> */, /* pos 02a0: 341 */ 0xE6 /* 'f' -> */, /* pos 02a1: 342 */ 0xE5 /* 'e' -> */, /* pos 02a2: 343 */ 0xF2 /* 'r' -> */, /* pos 02a3: 344 */ 0xAD /* '-' -> */, /* pos 02a4: 345 */ 0xE5 /* 'e' -> */, /* pos 02a5: 346 */ 0xEE /* 'n' -> */, /* pos 02a6: 347 */ 0xE3 /* 'c' -> */, /* pos 02a7: 348 */ 0xEF /* 'o' -> */, /* pos 02a8: 349 */ 0xE4 /* 'd' -> */, /* pos 02a9: 350 */ 0xE9 /* 'i' -> */, /* pos 02aa: 351 */ 0xEE /* 'n' -> */, /* pos 02ab: 352 */ 0xE7 /* 'g' -> */, /* pos 02ac: 353 */ 0xBA /* ':' -> */, /* pos 02ad: 354 */ 0x00, 0x42 /* - terminal marker 66 - */, /* pos 02af: 355 */ 0xE9 /* 'i' -> */, /* pos 02b0: 356 */ 0xAD /* '-' -> */, /* pos 02b1: 357 */ 0xE1 /* 'a' -> */, /* pos 02b2: 358 */ 0xF2 /* 'r' -> */, /* pos 02b3: 359 */ 0xE7 /* 'g' -> */, /* pos 02b4: 360 */ 0xF3 /* 's' -> */, /* pos 02b5: 361 */ 0x00, 0x47 /* - terminal marker 71 - */, /* pos 02b7: 362 */ 0xA0 /* ' ' -> */, /* pos 02b8: 363 */ 0x00, 0x48 /* - terminal marker 72 - */, /* pos 02ba: 364 */ 0xAD /* '-' -> */, /* pos 02bb: 365 */ 0x66 /* 'f' */, 0x0A, 0x00 /* (to 0x02C5 state 366) */, 0x61 /* 'a' */, 0x1D, 0x00 /* (to 0x02DB state 385) */, 0x72 /* 'r' */, 0x14, 0x01 /* (to 0x03D5 state 586) */, 0x08, /* fail */ /* pos 02c5: 366 */ 0xEF /* 'o' -> */, /* pos 02c6: 367 */ 0xF2 /* 'r' -> */, /* pos 02c7: 368 */ 0xF7 /* 'w' -> */, /* pos 02c8: 369 */ 0xE1 /* 'a' -> */, /* pos 02c9: 370 */ 0xF2 /* 'r' -> */, /* pos 02ca: 371 */ 0xE4 /* 'd' -> */, /* pos 02cb: 372 */ 0xE5 /* 'e' -> */, /* pos 02cc: 373 */ 0xE4 /* 'd' -> */, /* pos 02cd: 374 */ 0xAD /* '-' -> */, /* pos 02ce: 375 */ 0xE6 /* 'f' -> */, /* pos 02cf: 376 */ 0xEF /* 'o' -> */, /* pos 02d0: 377 */ 0xF2 /* 'r' -> */, /* pos 02d1: 378 */ 0xBA /* ':' -> */, /* pos 02d2: 379 */ 0x00, 0x49 /* - terminal marker 73 - */, /* pos 02d4: 380 */ 0x00, 0x4A /* - terminal marker 74 - */, /* pos 02d6: 381 */ 0xE1 /* 'a' -> */, /* pos 02d7: 382 */ 0xE4 /* 'd' -> */, /* pos 02d8: 383 */ 0xA0 /* ' ' -> */, /* pos 02d9: 384 */ 0x00, 0x4B /* - terminal marker 75 - */, /* pos 02db: 385 */ 0x75 /* 'u' */, 0x07, 0x00 /* (to 0x02E2 state 386) */, 0x6D /* 'm' */, 0x0F, 0x00 /* (to 0x02ED state 396) */, 0x08, /* fail */ /* pos 02e2: 386 */ 0xF4 /* 't' -> */, /* pos 02e3: 387 */ 0xE8 /* 'h' -> */, /* pos 02e4: 388 */ 0xAD /* '-' -> */, /* pos 02e5: 389 */ 0xF4 /* 't' -> */, /* pos 02e6: 390 */ 0xEF /* 'o' -> */, /* pos 02e7: 391 */ 0xEB /* 'k' -> */, /* pos 02e8: 392 */ 0xE5 /* 'e' -> */, /* pos 02e9: 393 */ 0xEE /* 'n' -> */, /* pos 02ea: 394 */ 0xBA /* ':' -> */, /* pos 02eb: 395 */ 0x00, 0x4F /* - terminal marker 79 - */, /* pos 02ed: 396 */ 0xFA /* 'z' -> */, /* pos 02ee: 397 */ 0xEE /* 'n' -> */, /* pos 02ef: 398 */ 0xAD /* '-' -> */, /* pos 02f0: 399 */ 0xE4 /* 'd' -> */, /* pos 02f1: 400 */ 0xF3 /* 's' -> */, /* pos 02f2: 401 */ 0xF3 /* 's' -> */, /* pos 02f3: 402 */ 0xAD /* '-' -> */, /* pos 02f4: 403 */ 0xF3 /* 's' -> */, /* pos 02f5: 404 */ 0xE9 /* 'i' -> */, /* pos 02f6: 405 */ 0xE7 /* 'g' -> */, /* pos 02f7: 406 */ 0xEE /* 'n' -> */, /* pos 02f8: 407 */ 0xE1 /* 'a' -> */, /* pos 02f9: 408 */ 0xF4 /* 't' -> */, /* pos 02fa: 409 */ 0xF5 /* 'u' -> */, /* pos 02fb: 410 */ 0xF2 /* 'r' -> */, /* pos 02fc: 411 */ 0xE5 /* 'e' -> */, /* pos 02fd: 412 */ 0xBA /* ':' -> */, /* pos 02fe: 413 */ 0x00, 0x50 /* - terminal marker 80 - */, /* pos 0300: 414 */ 0xF4 /* 't' -> */, /* pos 0301: 415 */ 0xE9 /* 'i' -> */, /* pos 0302: 416 */ 0xEF /* 'o' -> */, /* pos 0303: 417 */ 0xEE /* 'n' -> */, /* pos 0304: 418 */ 0xF3 /* 's' -> */, /* pos 0305: 419 */ 0xA0 /* ' ' -> */, /* pos 0306: 420 */ 0x00, 0x02 /* - terminal marker 2 - */, /* pos 0308: 421 */ 0xF3 /* 's' -> */, /* pos 0309: 422 */ 0xAD /* '-' -> */, /* pos 030a: 423 */ 0xE3 /* 'c' -> */, /* pos 030b: 424 */ 0xEF /* 'o' -> */, /* pos 030c: 425 */ 0xEE /* 'n' -> */, /* pos 030d: 426 */ 0xF4 /* 't' -> */, /* pos 030e: 427 */ 0xF2 /* 'r' -> */, /* pos 030f: 428 */ 0xEF /* 'o' -> */, /* pos 0310: 429 */ 0xEC /* 'l' -> */, /* pos 0311: 430 */ 0xAD /* '-' -> */, /* pos 0312: 431 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x0319 state 432) */, 0x61 /* 'a' */, 0x24, 0x00 /* (to 0x0339 state 461) */, 0x08, /* fail */ /* pos 0319: 432 */ 0xE5 /* 'e' -> */, /* pos 031a: 433 */ 0xF1 /* 'q' -> */, /* pos 031b: 434 */ 0xF5 /* 'u' -> */, /* pos 031c: 435 */ 0xE5 /* 'e' -> */, /* pos 031d: 436 */ 0xF3 /* 's' -> */, /* pos 031e: 437 */ 0xF4 /* 't' -> */, /* pos 031f: 438 */ 0xAD /* '-' -> */, /* pos 0320: 439 */ 0xE8 /* 'h' -> */, /* pos 0321: 440 */ 0xE5 /* 'e' -> */, /* pos 0322: 441 */ 0xE1 /* 'a' -> */, /* pos 0323: 442 */ 0xE4 /* 'd' -> */, /* pos 0324: 443 */ 0xE5 /* 'e' -> */, /* pos 0325: 444 */ 0xF2 /* 'r' -> */, /* pos 0326: 445 */ 0xF3 /* 's' -> */, /* pos 0327: 446 */ 0xBA /* ':' -> */, /* pos 0328: 447 */ 0x00, 0x0B /* - terminal marker 11 - */, /* pos 032a: 448 */ 0xF2 /* 'r' -> */, /* pos 032b: 449 */ 0xE5 /* 'e' -> */, /* pos 032c: 450 */ 0xF2 /* 'r' -> */, /* pos 032d: 451 */ 0xBA /* ':' -> */, /* pos 032e: 452 */ 0x00, 0x1D /* - terminal marker 29 - */, /* pos 0330: 453 */ 0xE8 /* 'h' -> */, /* pos 0331: 454 */ 0xE1 /* 'a' -> */, /* pos 0332: 455 */ 0xF2 /* 'r' -> */, /* pos 0333: 456 */ 0xF3 /* 's' -> */, /* pos 0334: 457 */ 0xE5 /* 'e' -> */, /* pos 0335: 458 */ 0xF4 /* 't' -> */, /* pos 0336: 459 */ 0xBA /* ':' -> */, /* pos 0337: 460 */ 0x00, 0x26 /* - terminal marker 38 - */, /* pos 0339: 461 */ 0xEC /* 'l' -> */, /* pos 033a: 462 */ 0xEC /* 'l' -> */, /* pos 033b: 463 */ 0xEF /* 'o' -> */, /* pos 033c: 464 */ 0xF7 /* 'w' -> */, /* pos 033d: 465 */ 0xAD /* '-' -> */, /* pos 033e: 466 */ 0xEF /* 'o' -> */, /* pos 033f: 467 */ 0xF2 /* 'r' -> */, /* pos 0340: 468 */ 0xE9 /* 'i' -> */, /* pos 0341: 469 */ 0xE7 /* 'g' -> */, /* pos 0342: 470 */ 0xE9 /* 'i' -> */, /* pos 0343: 471 */ 0xEE /* 'n' -> */, /* pos 0344: 472 */ 0xBA /* ':' -> */, /* pos 0345: 473 */ 0x00, 0x28 /* - terminal marker 40 - */, /* pos 0347: 474 */ 0xE1 /* 'a' -> */, /* pos 0348: 475 */ 0xF8 /* 'x' -> */, /* pos 0349: 476 */ 0xAD /* '-' -> */, /* pos 034a: 477 */ 0xE6 /* 'f' -> */, /* pos 034b: 478 */ 0xEF /* 'o' -> */, /* pos 034c: 479 */ 0xF2 /* 'r' -> */, /* pos 034d: 480 */ 0xF7 /* 'w' -> */, /* pos 034e: 481 */ 0xE1 /* 'a' -> */, /* pos 034f: 482 */ 0xF2 /* 'r' -> */, /* pos 0350: 483 */ 0xE4 /* 'd' -> */, /* pos 0351: 484 */ 0xF3 /* 's' -> */, /* pos 0352: 485 */ 0xBA /* ':' -> */, /* pos 0353: 486 */ 0x00, 0x3A /* - terminal marker 58 - */, /* pos 0355: 487 */ 0xF8 /* 'x' -> */, /* pos 0356: 488 */ 0xF9 /* 'y' -> */, /* pos 0357: 489 */ 0x2D /* '-' */, 0x07, 0x00 /* (to 0x035E state 490) */, 0x20 /* ' ' */, 0x79, 0x00 /* (to 0x03D3 state 585) */, 0x08, /* fail */ /* pos 035e: 490 */ 0xE1 /* 'a' -> */, /* pos 035f: 491 */ 0xF5 /* 'u' -> */, /* pos 0360: 492 */ 0xF4 /* 't' -> */, /* pos 0361: 493 */ 0xE8 /* 'h' -> */, /* pos 0362: 494 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x0369 state 495) */, 0x6F /* 'o' */, 0x0E, 0x00 /* (to 0x0373 state 504) */, 0x08, /* fail */ /* pos 0369: 495 */ 0xEE /* 'n' -> */, /* pos 036a: 496 */ 0xF4 /* 't' -> */, /* pos 036b: 497 */ 0xE9 /* 'i' -> */, /* pos 036c: 498 */ 0xE3 /* 'c' -> */, /* pos 036d: 499 */ 0xE1 /* 'a' -> */, /* pos 036e: 500 */ 0xF4 /* 't' -> */, /* pos 036f: 501 */ 0xE5 /* 'e' -> */, /* pos 0370: 502 */ 0xBA /* ':' -> */, /* pos 0371: 503 */ 0x00, 0x3B /* - terminal marker 59 - */, /* pos 0373: 504 */ 0xF2 /* 'r' -> */, /* pos 0374: 505 */ 0xE9 /* 'i' -> */, /* pos 0375: 506 */ 0xFA /* 'z' -> */, /* pos 0376: 507 */ 0xE1 /* 'a' -> */, /* pos 0377: 508 */ 0xF4 /* 't' -> */, /* pos 0378: 509 */ 0xE9 /* 'i' -> */, /* pos 0379: 510 */ 0xEF /* 'o' -> */, /* pos 037a: 511 */ 0xEE /* 'n' -> */, /* pos 037b: 512 */ 0xBA /* ':' -> */, /* pos 037c: 513 */ 0x00, 0x3C /* - terminal marker 60 - */, /* pos 037e: 514 */ 0xF2 /* 'r' -> */, /* pos 037f: 515 */ 0xE9 /* 'i' -> */, /* pos 0380: 516 */ 0xE3 /* 'c' -> */, /* pos 0381: 517 */ 0xF4 /* 't' -> */, /* pos 0382: 518 */ 0xAD /* '-' -> */, /* pos 0383: 519 */ 0xF4 /* 't' -> */, /* pos 0384: 520 */ 0xF2 /* 'r' -> */, /* pos 0385: 521 */ 0xE1 /* 'a' -> */, /* pos 0386: 522 */ 0xEE /* 'n' -> */, /* pos 0387: 523 */ 0xF3 /* 's' -> */, /* pos 0388: 524 */ 0xF0 /* 'p' -> */, /* pos 0389: 525 */ 0xEF /* 'o' -> */, /* pos 038a: 526 */ 0xF2 /* 'r' -> */, /* pos 038b: 527 */ 0xF4 /* 't' -> */, /* pos 038c: 528 */ 0xAD /* '-' -> */, /* pos 038d: 529 */ 0xF3 /* 's' -> */, /* pos 038e: 530 */ 0xE5 /* 'e' -> */, /* pos 038f: 531 */ 0xE3 /* 'c' -> */, /* pos 0390: 532 */ 0xF5 /* 'u' -> */, /* pos 0391: 533 */ 0xF2 /* 'r' -> */, /* pos 0392: 534 */ 0xE9 /* 'i' -> */, /* pos 0393: 535 */ 0xF4 /* 't' -> */, /* pos 0394: 536 */ 0xF9 /* 'y' -> */, /* pos 0395: 537 */ 0xBA /* ':' -> */, /* pos 0396: 538 */ 0x00, 0x41 /* - terminal marker 65 - */, /* pos 0398: 539 */ 0xE5 /* 'e' -> */, /* pos 0399: 540 */ 0xF2 /* 'r' -> */, /* pos 039a: 541 */ 0xAD /* '-' -> */, /* pos 039b: 542 */ 0xE1 /* 'a' -> */, /* pos 039c: 543 */ 0xE7 /* 'g' -> */, /* pos 039d: 544 */ 0xE5 /* 'e' -> */, /* pos 039e: 545 */ 0xEE /* 'n' -> */, /* pos 039f: 546 */ 0xF4 /* 't' -> */, /* pos 03a0: 547 */ 0xBA /* ':' -> */, /* pos 03a1: 548 */ 0x00, 0x43 /* - terminal marker 67 - */, /* pos 03a3: 549 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x03AA state 550) */, 0x69 /* 'i' */, 0x09, 0x00 /* (to 0x03AF state 554) */, 0x08, /* fail */ /* pos 03aa: 550 */ 0xF2 /* 'r' -> */, /* pos 03ab: 551 */ 0xF9 /* 'y' -> */, /* pos 03ac: 552 */ 0xBA /* ':' -> */, /* pos 03ad: 553 */ 0x00, 0x44 /* - terminal marker 68 - */, /* pos 03af: 554 */ 0xE1 /* 'a' -> */, /* pos 03b0: 555 */ 0xBA /* ':' -> */, /* pos 03b1: 556 */ 0x00, 0x45 /* - terminal marker 69 - */, /* pos 03b3: 557 */ 0xF7 /* 'w' -> */, /* pos 03b4: 558 */ 0xF7 /* 'w' -> */, /* pos 03b5: 559 */ 0xAD /* '-' -> */, /* pos 03b6: 560 */ 0xE1 /* 'a' -> */, /* pos 03b7: 561 */ 0xF5 /* 'u' -> */, /* pos 03b8: 562 */ 0xF4 /* 't' -> */, /* pos 03b9: 563 */ 0xE8 /* 'h' -> */, /* pos 03ba: 564 */ 0xE5 /* 'e' -> */, /* pos 03bb: 565 */ 0xEE /* 'n' -> */, /* pos 03bc: 566 */ 0xF4 /* 't' -> */, /* pos 03bd: 567 */ 0xE9 /* 'i' -> */, /* pos 03be: 568 */ 0xE3 /* 'c' -> */, /* pos 03bf: 569 */ 0xE1 /* 'a' -> */, /* pos 03c0: 570 */ 0xF4 /* 't' -> */, /* pos 03c1: 571 */ 0xE5 /* 'e' -> */, /* pos 03c2: 572 */ 0xBA /* ':' -> */, /* pos 03c3: 573 */ 0x00, 0x46 /* - terminal marker 70 - */, /* pos 03c5: 574 */ 0xF4 /* 't' -> */, /* pos 03c6: 575 */ 0xE3 /* 'c' -> */, /* pos 03c7: 576 */ 0xE8 /* 'h' -> */, /* pos 03c8: 577 */ 0x00, 0x3F /* - terminal marker 63 - */, /* pos 03ca: 578 */ 0xF4 /* 't' -> */, /* pos 03cb: 579 */ 0x00, 0x40 /* - terminal marker 64 - */, /* pos 03cd: 580 */ 0xEC /* 'l' -> */, /* pos 03ce: 581 */ 0xE5 /* 'e' -> */, /* pos 03cf: 582 */ 0xF4 /* 't' -> */, /* pos 03d0: 583 */ 0xE5 /* 'e' -> */, /* pos 03d1: 584 */ 0x00, 0x41 /* - terminal marker 65 - */, /* pos 03d3: 585 */ 0x00, 0x43 /* - terminal marker 67 - */, /* pos 03d5: 586 */ 0xE5 /* 'e' -> */, /* pos 03d6: 587 */ 0xE1 /* 'a' -> */, /* pos 03d7: 588 */ 0xEC /* 'l' -> */, /* pos 03d8: 589 */ 0xAD /* '-' -> */, /* pos 03d9: 590 */ 0xE9 /* 'i' -> */, /* pos 03da: 591 */ 0xF0 /* 'p' -> */, /* pos 03db: 592 */ 0xBA /* ':' -> */, /* pos 03dc: 593 */ 0x00, 0x44 /* - terminal marker 68 - */, /* pos 03de: 594 */ 0xBA /* ':' -> */, /* pos 03df: 595 */ 0x00, 0x4C /* - terminal marker 76 - */, /* pos 03e1: 596 */ 0xEC /* 'l' -> */, /* pos 03e2: 597 */ 0xE1 /* 'a' -> */, /* pos 03e3: 598 */ 0xF9 /* 'y' -> */, /* pos 03e4: 599 */ 0xAD /* '-' -> */, /* pos 03e5: 600 */ 0xEE /* 'n' -> */, /* pos 03e6: 601 */ 0xEF /* 'o' -> */, /* pos 03e7: 602 */ 0xEE /* 'n' -> */, /* pos 03e8: 603 */ 0xE3 /* 'c' -> */, /* pos 03e9: 604 */ 0xE5 /* 'e' -> */, /* pos 03ea: 605 */ 0xBA /* ':' -> */, /* pos 03eb: 606 */ 0x00, 0x4D /* - terminal marker 77 - */, /* pos 03ed: 607 */ 0xAD /* '-' -> */, /* pos 03ee: 608 */ 0xF7 /* 'w' -> */, /* pos 03ef: 609 */ 0xE5 /* 'e' -> */, /* pos 03f0: 610 */ 0xE2 /* 'b' -> */, /* pos 03f1: 611 */ 0xF3 /* 's' -> */, /* pos 03f2: 612 */ 0xEF /* 'o' -> */, /* pos 03f3: 613 */ 0xE3 /* 'c' -> */, /* pos 03f4: 614 */ 0xEB /* 'k' -> */, /* pos 03f5: 615 */ 0xE5 /* 'e' -> */, /* pos 03f6: 616 */ 0xF4 /* 't' -> */, /* pos 03f7: 617 */ 0xAD /* '-' -> */, /* pos 03f8: 618 */ 0x64 /* 'd' */, 0x19, 0x00 /* (to 0x0411 state 619) */, 0x65 /* 'e' */, 0x1D, 0x00 /* (to 0x0418 state 625) */, 0x6B /* 'k' */, 0x26, 0x00 /* (to 0x0424 state 636) */, 0x70 /* 'p' */, 0x35, 0x00 /* (to 0x0436 state 643) */, 0x61 /* 'a' */, 0x3C, 0x00 /* (to 0x0440 state 652) */, 0x6E /* 'n' */, 0x41, 0x00 /* (to 0x0448 state 659) */, 0x76 /* 'v' */, 0x47, 0x00 /* (to 0x0451 state 666) */, 0x6F /* 'o' */, 0x4D, 0x00 /* (to 0x045A state 674) */, 0x08, /* fail */ /* pos 0411: 619 */ 0xF2 /* 'r' -> */, /* pos 0412: 620 */ 0xE1 /* 'a' -> */, /* pos 0413: 621 */ 0xE6 /* 'f' -> */, /* pos 0414: 622 */ 0xF4 /* 't' -> */, /* pos 0415: 623 */ 0xBA /* ':' -> */, /* pos 0416: 624 */ 0x00, 0x06 /* - terminal marker 6 - */, /* pos 0418: 625 */ 0xF8 /* 'x' -> */, /* pos 0419: 626 */ 0xF4 /* 't' -> */, /* pos 041a: 627 */ 0xE5 /* 'e' -> */, /* pos 041b: 628 */ 0xEE /* 'n' -> */, /* pos 041c: 629 */ 0xF3 /* 's' -> */, /* pos 041d: 630 */ 0xE9 /* 'i' -> */, /* pos 041e: 631 */ 0xEF /* 'o' -> */, /* pos 041f: 632 */ 0xEE /* 'n' -> */, /* pos 0420: 633 */ 0xF3 /* 's' -> */, /* pos 0421: 634 */ 0xBA /* ':' -> */, /* pos 0422: 635 */ 0x00, 0x08 /* - terminal marker 8 - */, /* pos 0424: 636 */ 0xE5 /* 'e' -> */, /* pos 0425: 637 */ 0xF9 /* 'y' -> */, /* pos 0426: 638 */ 0x31 /* '1' */, 0x0A, 0x00 /* (to 0x0430 state 639) */, 0x32 /* '2' */, 0x0A, 0x00 /* (to 0x0433 state 641) */, 0x3A /* ':' */, 0x23, 0x00 /* (to 0x044F state 665) */, 0x08, /* fail */ /* pos 0430: 639 */ 0xBA /* ':' -> */, /* pos 0431: 640 */ 0x00, 0x09 /* - terminal marker 9 - */, /* pos 0433: 641 */ 0xBA /* ':' -> */, /* pos 0434: 642 */ 0x00, 0x0A /* - terminal marker 10 - */, /* pos 0436: 643 */ 0xF2 /* 'r' -> */, /* pos 0437: 644 */ 0xEF /* 'o' -> */, /* pos 0438: 645 */ 0xF4 /* 't' -> */, /* pos 0439: 646 */ 0xEF /* 'o' -> */, /* pos 043a: 647 */ 0xE3 /* 'c' -> */, /* pos 043b: 648 */ 0xEF /* 'o' -> */, /* pos 043c: 649 */ 0xEC /* 'l' -> */, /* pos 043d: 650 */ 0xBA /* ':' -> */, /* pos 043e: 651 */ 0x00, 0x0B /* - terminal marker 11 - */, /* pos 0440: 652 */ 0xE3 /* 'c' -> */, /* pos 0441: 653 */ 0xE3 /* 'c' -> */, /* pos 0442: 654 */ 0xE5 /* 'e' -> */, /* pos 0443: 655 */ 0xF0 /* 'p' -> */, /* pos 0444: 656 */ 0xF4 /* 't' -> */, /* pos 0445: 657 */ 0xBA /* ':' -> */, /* pos 0446: 658 */ 0x00, 0x0C /* - terminal marker 12 - */, /* pos 0448: 659 */ 0xEF /* 'o' -> */, /* pos 0449: 660 */ 0xEE /* 'n' -> */, /* pos 044a: 661 */ 0xE3 /* 'c' -> */, /* pos 044b: 662 */ 0xE5 /* 'e' -> */, /* pos 044c: 663 */ 0xBA /* ':' -> */, /* pos 044d: 664 */ 0x00, 0x0D /* - terminal marker 13 - */, /* pos 044f: 665 */ 0x00, 0x1E /* - terminal marker 30 - */, /* pos 0451: 666 */ 0xE5 /* 'e' -> */, /* pos 0452: 667 */ 0xF2 /* 'r' -> */, /* pos 0453: 668 */ 0xF3 /* 's' -> */, /* pos 0454: 669 */ 0xE9 /* 'i' -> */, /* pos 0455: 670 */ 0xEF /* 'o' -> */, /* pos 0456: 671 */ 0xEE /* 'n' -> */, /* pos 0457: 672 */ 0xBA /* ':' -> */, /* pos 0458: 673 */ 0x00, 0x1F /* - terminal marker 31 - */, /* pos 045a: 674 */ 0xF2 /* 'r' -> */, /* pos 045b: 675 */ 0xE9 /* 'i' -> */, /* pos 045c: 676 */ 0xE7 /* 'g' -> */, /* pos 045d: 677 */ 0xE9 /* 'i' -> */, /* pos 045e: 678 */ 0xEE /* 'n' -> */, /* pos 045f: 679 */ 0xBA /* ':' -> */, /* pos 0460: 680 */ 0x00, 0x20 /* - terminal marker 32 - */, /* pos 0462: 681 */ 0xAD /* '-' -> */, /* pos 0463: 682 */ 0xF3 /* 's' -> */, /* pos 0464: 683 */ 0xE5 /* 'e' -> */, /* pos 0465: 684 */ 0xF4 /* 't' -> */, /* pos 0466: 685 */ 0xF4 /* 't' -> */, /* pos 0467: 686 */ 0xE9 /* 'i' -> */, /* pos 0468: 687 */ 0xEE /* 'n' -> */, /* pos 0469: 688 */ 0xE7 /* 'g' -> */, /* pos 046a: 689 */ 0xF3 /* 's' -> */, /* pos 046b: 690 */ 0xBA /* ':' -> */, /* pos 046c: 691 */ 0x00, 0x0F /* - terminal marker 15 - */, /* pos 046e: 692 */ 0x61 /* 'a' */, 0x0D, 0x00 /* (to 0x047B state 693) */, 0x6D /* 'm' */, 0x14, 0x00 /* (to 0x0485 state 702) */, 0x70 /* 'p' */, 0x18, 0x00 /* (to 0x048C state 708) */, 0x73 /* 's' */, 0x20, 0x00 /* (to 0x0497 state 712) */, 0x08, /* fail */ /* pos 047b: 693 */ 0xF5 /* 'u' -> */, /* pos 047c: 694 */ 0xF4 /* 't' -> */, /* pos 047d: 695 */ 0xE8 /* 'h' -> */, /* pos 047e: 696 */ 0xEF /* 'o' -> */, /* pos 047f: 697 */ 0xF2 /* 'r' -> */, /* pos 0480: 698 */ 0xE9 /* 'i' -> */, /* pos 0481: 699 */ 0xF4 /* 't' -> */, /* pos 0482: 700 */ 0xF9 /* 'y' -> */, /* pos 0483: 701 */ 0x00, 0x21 /* - terminal marker 33 - */, /* pos 0485: 702 */ 0xE5 /* 'e' -> */, /* pos 0486: 703 */ 0xF4 /* 't' -> */, /* pos 0487: 704 */ 0xE8 /* 'h' -> */, /* pos 0488: 705 */ 0xEF /* 'o' -> */, /* pos 0489: 706 */ 0xE4 /* 'd' -> */, /* pos 048a: 707 */ 0x00, 0x22 /* - terminal marker 34 - */, /* pos 048c: 708 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x0493 state 709) */, 0x72 /* 'r' */, 0x1B, 0x00 /* (to 0x04AA state 723) */, 0x08, /* fail */ /* pos 0493: 709 */ 0xF4 /* 't' -> */, /* pos 0494: 710 */ 0xE8 /* 'h' -> */, /* pos 0495: 711 */ 0x00, 0x23 /* - terminal marker 35 - */, /* pos 0497: 712 */ 0x63 /* 'c' */, 0x07, 0x00 /* (to 0x049E state 713) */, 0x74 /* 't' */, 0x0A, 0x00 /* (to 0x04A4 state 718) */, 0x08, /* fail */ /* pos 049e: 713 */ 0xE8 /* 'h' -> */, /* pos 049f: 714 */ 0xE5 /* 'e' -> */, /* pos 04a0: 715 */ 0xED /* 'm' -> */, /* pos 04a1: 716 */ 0xE5 /* 'e' -> */, /* pos 04a2: 717 */ 0x00, 0x24 /* - terminal marker 36 - */, /* pos 04a4: 718 */ 0xE1 /* 'a' -> */, /* pos 04a5: 719 */ 0xF4 /* 't' -> */, /* pos 04a6: 720 */ 0xF5 /* 'u' -> */, /* pos 04a7: 721 */ 0xF3 /* 's' -> */, /* pos 04a8: 722 */ 0x00, 0x25 /* - terminal marker 37 - */, /* pos 04aa: 723 */ 0xEF /* 'o' -> */, /* pos 04ab: 724 */ 0xF4 /* 't' -> */, /* pos 04ac: 725 */ 0xEF /* 'o' -> */, /* pos 04ad: 726 */ 0xE3 /* 'c' -> */, /* pos 04ae: 727 */ 0xEF /* 'o' -> */, /* pos 04af: 728 */ 0xEC /* 'l' -> */, /* pos 04b0: 729 */ 0x00, 0x4E /* - terminal marker 78 - */, /* total size 1202 bytes */ #endif #if defined(LWS_HTTP_HEADERS_ALL) || ( defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) && defined(LWS_ROLE_WS) && defined(LWS_ROLE_H2)) /* 0: 0: get */ /* 1: 1: post */ /* 2: 2: options */ /* 3: 3: host: */ /* 4: 4: connection: */ /* 5: 5: upgrade: */ /* 6: 6: origin: */ /* 7: 7: sec-websocket-draft: */ /* 8: 8: */ /* 9: 9: sec-websocket-extensions: */ /* 10: 10: sec-websocket-key1: */ /* 11: 11: sec-websocket-key2: */ /* 12: 12: sec-websocket-protocol: */ /* 13: 13: sec-websocket-accept: */ /* 14: 14: sec-websocket-nonce: */ /* 15: 15: http/1.1 */ /* 16: 16: http2-settings: */ /* 17: 17: accept: */ /* 18: 18: access-control-request-headers: */ /* 19: 19: if-modified-since: */ /* 20: 20: if-none-match: */ /* 21: 21: accept-encoding: */ /* 22: 22: accept-language: */ /* 23: 23: pragma: */ /* 24: 24: cache-control: */ /* 25: 25: authorization: */ /* 26: 26: cookie: */ /* 27: 27: content-length: */ /* 28: 28: content-type: */ /* 29: 29: date: */ /* 30: 30: range: */ /* 31: 31: referer: */ /* 32: 32: sec-websocket-key: */ /* 33: 33: sec-websocket-version: */ /* 34: 34: sec-websocket-origin: */ /* 35: 35: :authority */ /* 36: 36: :method */ /* 37: 37: :path */ /* 38: 38: :scheme */ /* 39: 39: :status */ /* 40: 40: accept-charset: */ /* 41: 41: accept-ranges: */ /* 42: 42: access-control-allow-origin: */ /* 43: 43: age: */ /* 44: 44: allow: */ /* 45: 45: content-disposition: */ /* 46: 46: content-encoding: */ /* 47: 47: content-language: */ /* 48: 48: content-location: */ /* 49: 49: content-range: */ /* 50: 50: etag: */ /* 51: 51: expect: */ /* 52: 52: expires: */ /* 53: 53: from: */ /* 54: 54: if-match: */ /* 55: 55: if-range: */ /* 56: 56: if-unmodified-since: */ /* 57: 57: last-modified: */ /* 58: 58: link: */ /* 59: 59: location: */ /* 60: 60: max-forwards: */ /* 61: 61: proxy-authenticate: */ /* 62: 62: proxy-authorization: */ /* 63: 63: refresh: */ /* 64: 64: retry-after: */ /* 65: 65: server: */ /* 66: 66: set-cookie: */ /* 67: 67: strict-transport-security: */ /* 68: 68: transfer-encoding: */ /* 69: 69: user-agent: */ /* 70: 70: vary: */ /* 71: 71: via: */ /* 72: 72: www-authenticate: */ /* 73: 73: patch */ /* 74: 74: put */ /* 75: 75: delete */ /* 76: 76: uri-args */ /* 77: 77: proxy */ /* 78: 78: x-real-ip: */ /* 79: 79: http/1.0 */ /* 80: 80: x-forwarded-for: */ /* 81: 81: connect */ /* 82: 82: head */ /* 83: 83: te: */ /* 84: 84: replay-nonce: */ /* 85: 85: :protocol */ /* 86: 86: x-auth-token: */ /* 87: 87: x-amzn-dss-signature: */ /* pos 0000: 0 */ 0x67 /* 'g' */, 0x40, 0x00 /* (to 0x0040 state 1) */, 0x70 /* 'p' */, 0x42, 0x00 /* (to 0x0045 state 5) */, 0x68 /* 'h' */, 0x51, 0x00 /* (to 0x0057 state 10) */, 0x63 /* 'c' */, 0x5D, 0x00 /* (to 0x0066 state 15) */, 0x75 /* 'u' */, 0x7E, 0x00 /* (to 0x008A state 26) */, 0x6F /* 'o' */, 0x8D, 0x00 /* (to 0x009C state 34) */, 0x0D /* '.' */, 0x98, 0x00 /* (to 0x00AA state 41) */, 0x61 /* 'a' */, 0xAD, 0x00 /* (to 0x00C2 state 51) */, 0x69 /* 'i' */, 0xCA, 0x00 /* (to 0x00E2 state 58) */, 0x64 /* 'd' */, 0x73, 0x01 /* (to 0x018E state 160) */, 0x72 /* 'r' */, 0x7C, 0x01 /* (to 0x019A state 165) */, 0x65 /* 'e' */, 0xC8, 0x01 /* (to 0x01E9 state 229) */, 0x66 /* 'f' */, 0xE4, 0x01 /* (to 0x0208 state 245) */, 0x6C /* 'l' */, 0x06, 0x02 /* (to 0x022D state 278) */, 0x73 /* 's' */, 0x4B, 0x02 /* (to 0x0275 state 321) */, 0x74 /* 't' */, 0x69, 0x02 /* (to 0x0296 state 337) */, 0x78 /* 'x' */, 0x8A, 0x02 /* (to 0x02BA state 364) */, 0x6D /* 'm' */, 0x14, 0x03 /* (to 0x0347 state 474) */, 0x76 /* 'v' */, 0x6D, 0x03 /* (to 0x03A3 state 549) */, 0x77 /* 'w' */, 0x7A, 0x03 /* (to 0x03B3 state 557) */, 0x3A /* ':' */, 0x32, 0x04 /* (to 0x046E state 692) */, 0x08, /* fail */ /* pos 0040: 1 */ 0xE5 /* 'e' -> */, /* pos 0041: 2 */ 0xF4 /* 't' -> */, /* pos 0042: 3 */ 0xA0 /* ' ' -> */, /* pos 0043: 4 */ 0x00, 0x00 /* - terminal marker 0 - */, /* pos 0045: 5 */ 0x6F /* 'o' */, 0x0D, 0x00 /* (to 0x0052 state 6) */, 0x72 /* 'r' */, 0xEC, 0x00 /* (to 0x0134 state 106) */, 0x61 /* 'a' */, 0x7A, 0x03 /* (to 0x03C5 state 574) */, 0x75 /* 'u' */, 0x7C, 0x03 /* (to 0x03CA state 578) */, 0x08, /* fail */ /* pos 0052: 6 */ 0xF3 /* 's' -> */, /* pos 0053: 7 */ 0xF4 /* 't' -> */, /* pos 0054: 8 */ 0xA0 /* ' ' -> */, /* pos 0055: 9 */ 0x00, 0x01 /* - terminal marker 1 - */, /* pos 0057: 10 */ 0x6F /* 'o' */, 0x0A, 0x00 /* (to 0x0061 state 11) */, 0x74 /* 't' */, 0x53, 0x00 /* (to 0x00AD state 43) */, 0x65 /* 'e' */, 0x79, 0x02 /* (to 0x02D6 state 381) */, 0x08, /* fail */ /* pos 0061: 11 */ 0xF3 /* 's' -> */, /* pos 0062: 12 */ 0xF4 /* 't' -> */, /* pos 0063: 13 */ 0xBA /* ':' -> */, /* pos 0064: 14 */ 0x00, 0x03 /* - terminal marker 3 - */, /* pos 0066: 15 */ 0x6F /* 'o' */, 0x07, 0x00 /* (to 0x006D state 16) */, 0x61 /* 'a' */, 0xD8, 0x00 /* (to 0x0141 state 112) */, 0x08, /* fail */ /* pos 006d: 16 */ 0x6E /* 'n' */, 0x07, 0x00 /* (to 0x0074 state 17) */, 0x6F /* 'o' */, 0xED, 0x00 /* (to 0x015D state 138) */, 0x08, /* fail */ /* pos 0074: 17 */ 0x6E /* 'n' */, 0x07, 0x00 /* (to 0x007B state 18) */, 0x74 /* 't' */, 0xEC, 0x00 /* (to 0x0163 state 143) */, 0x08, /* fail */ /* pos 007b: 18 */ 0xE5 /* 'e' -> */, /* pos 007c: 19 */ 0xE3 /* 'c' -> */, /* pos 007d: 20 */ 0xF4 /* 't' -> */, /* pos 007e: 21 */ 0x69 /* 'i' */, 0x07, 0x00 /* (to 0x0085 state 22) */, 0x20 /* ' ' */, 0x53, 0x02 /* (to 0x02D4 state 380) */, 0x08, /* fail */ /* pos 0085: 22 */ 0xEF /* 'o' -> */, /* pos 0086: 23 */ 0xEE /* 'n' -> */, /* pos 0087: 24 */ 0xBA /* ':' -> */, /* pos 0088: 25 */ 0x00, 0x04 /* - terminal marker 4 - */, /* pos 008a: 26 */ 0x70 /* 'p' */, 0x0A, 0x00 /* (to 0x0094 state 27) */, 0x72 /* 'r' */, 0x22, 0x02 /* (to 0x02AF state 355) */, 0x73 /* 's' */, 0x08, 0x03 /* (to 0x0398 state 539) */, 0x08, /* fail */ /* pos 0094: 27 */ 0xE7 /* 'g' -> */, /* pos 0095: 28 */ 0xF2 /* 'r' -> */, /* pos 0096: 29 */ 0xE1 /* 'a' -> */, /* pos 0097: 30 */ 0xE4 /* 'd' -> */, /* pos 0098: 31 */ 0xE5 /* 'e' -> */, /* pos 0099: 32 */ 0xBA /* ':' -> */, /* pos 009a: 33 */ 0x00, 0x05 /* - terminal marker 5 - */, /* pos 009c: 34 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x00A3 state 35) */, 0x70 /* 'p' */, 0x61, 0x02 /* (to 0x0300 state 414) */, 0x08, /* fail */ /* pos 00a3: 35 */ 0xE9 /* 'i' -> */, /* pos 00a4: 36 */ 0xE7 /* 'g' -> */, /* pos 00a5: 37 */ 0xE9 /* 'i' -> */, /* pos 00a6: 38 */ 0xEE /* 'n' -> */, /* pos 00a7: 39 */ 0xBA /* ':' -> */, /* pos 00a8: 40 */ 0x00, 0x06 /* - terminal marker 6 - */, /* pos 00aa: 41 */ 0x8A /* '.' -> */, /* pos 00ab: 42 */ 0x00, 0x08 /* - terminal marker 8 - */, /* pos 00ad: 43 */ 0xF4 /* 't' -> */, /* pos 00ae: 44 */ 0xF0 /* 'p' -> */, /* pos 00af: 45 */ 0x2F /* '/' */, 0x07, 0x00 /* (to 0x00B6 state 46) */, 0x32 /* '2' */, 0xB0, 0x03 /* (to 0x0462 state 681) */, 0x08, /* fail */ /* pos 00b6: 46 */ 0xB1 /* '1' -> */, /* pos 00b7: 47 */ 0xAE /* '.' -> */, /* pos 00b8: 48 */ 0x31 /* '1' */, 0x07, 0x00 /* (to 0x00BF state 49) */, 0x30 /* '0' */, 0xFC, 0x01 /* (to 0x02B7 state 362) */, 0x08, /* fail */ /* pos 00bf: 49 */ 0xA0 /* ' ' -> */, /* pos 00c0: 50 */ 0x00, 0x0F /* - terminal marker 15 - */, /* pos 00c2: 51 */ 0x63 /* 'c' */, 0x0D, 0x00 /* (to 0x00CF state 52) */, 0x75 /* 'u' */, 0x8A, 0x00 /* (to 0x014F state 125) */, 0x67 /* 'g' */, 0xE7, 0x00 /* (to 0x01AF state 178) */, 0x6C /* 'l' */, 0xE8, 0x00 /* (to 0x01B3 state 181) */, 0x08, /* fail */ /* pos 00cf: 52 */ 0xE3 /* 'c' -> */, /* pos 00d0: 53 */ 0xE5 /* 'e' -> */, /* pos 00d1: 54 */ 0x70 /* 'p' */, 0x07, 0x00 /* (to 0x00D8 state 55) */, 0x73 /* 's' */, 0x34, 0x02 /* (to 0x0308 state 421) */, 0x08, /* fail */ /* pos 00d8: 55 */ 0xF4 /* 't' -> */, /* pos 00d9: 56 */ 0x3A /* ':' */, 0x07, 0x00 /* (to 0x00E0 state 57) */, 0x2D /* '-' */, 0x37, 0x00 /* (to 0x0113 state 87) */, 0x08, /* fail */ /* pos 00e0: 57 */ 0x00, 0x11 /* - terminal marker 17 - */, /* pos 00e2: 58 */ 0xE6 /* 'f' -> */, /* pos 00e3: 59 */ 0xAD /* '-' -> */, /* pos 00e4: 60 */ 0x6D /* 'm' */, 0x0D, 0x00 /* (to 0x00F1 state 61) */, 0x6E /* 'n' */, 0x20, 0x00 /* (to 0x0107 state 76) */, 0x72 /* 'r' */, 0x2A, 0x01 /* (to 0x0214 state 255) */, 0x75 /* 'u' */, 0x2E, 0x01 /* (to 0x021B state 261) */, 0x08, /* fail */ /* pos 00f1: 61 */ 0x6F /* 'o' */, 0x07, 0x00 /* (to 0x00F8 state 62) */, 0x61 /* 'a' */, 0x1A, 0x01 /* (to 0x020E state 250) */, 0x08, /* fail */ /* pos 00f8: 62 */ 0xE4 /* 'd' -> */, /* pos 00f9: 63 */ 0xE9 /* 'i' -> */, /* pos 00fa: 64 */ 0xE6 /* 'f' -> */, /* pos 00fb: 65 */ 0xE9 /* 'i' -> */, /* pos 00fc: 66 */ 0xE5 /* 'e' -> */, /* pos 00fd: 67 */ 0xE4 /* 'd' -> */, /* pos 00fe: 68 */ 0xAD /* '-' -> */, /* pos 00ff: 69 */ 0xF3 /* 's' -> */, /* pos 0100: 70 */ 0xE9 /* 'i' -> */, /* pos 0101: 71 */ 0xEE /* 'n' -> */, /* pos 0102: 72 */ 0xE3 /* 'c' -> */, /* pos 0103: 73 */ 0xE5 /* 'e' -> */, /* pos 0104: 74 */ 0xBA /* ':' -> */, /* pos 0105: 75 */ 0x00, 0x13 /* - terminal marker 19 - */, /* pos 0107: 76 */ 0xEF /* 'o' -> */, /* pos 0108: 77 */ 0xEE /* 'n' -> */, /* pos 0109: 78 */ 0xE5 /* 'e' -> */, /* pos 010a: 79 */ 0xAD /* '-' -> */, /* pos 010b: 80 */ 0xED /* 'm' -> */, /* pos 010c: 81 */ 0xE1 /* 'a' -> */, /* pos 010d: 82 */ 0xF4 /* 't' -> */, /* pos 010e: 83 */ 0xE3 /* 'c' -> */, /* pos 010f: 84 */ 0xE8 /* 'h' -> */, /* pos 0110: 85 */ 0xBA /* ':' -> */, /* pos 0111: 86 */ 0x00, 0x14 /* - terminal marker 20 - */, /* pos 0113: 87 */ 0x65 /* 'e' */, 0x0D, 0x00 /* (to 0x0120 state 88) */, 0x6C /* 'l' */, 0x14, 0x00 /* (to 0x012A state 97) */, 0x72 /* 'r' */, 0x8E, 0x00 /* (to 0x01A7 state 171) */, 0x63 /* 'c' */, 0x14, 0x02 /* (to 0x0330 state 453) */, 0x08, /* fail */ /* pos 0120: 88 */ 0xEE /* 'n' -> */, /* pos 0121: 89 */ 0xE3 /* 'c' -> */, /* pos 0122: 90 */ 0xEF /* 'o' -> */, /* pos 0123: 91 */ 0xE4 /* 'd' -> */, /* pos 0124: 92 */ 0xE9 /* 'i' -> */, /* pos 0125: 93 */ 0xEE /* 'n' -> */, /* pos 0126: 94 */ 0xE7 /* 'g' -> */, /* pos 0127: 95 */ 0xBA /* ':' -> */, /* pos 0128: 96 */ 0x00, 0x15 /* - terminal marker 21 - */, /* pos 012a: 97 */ 0xE1 /* 'a' -> */, /* pos 012b: 98 */ 0xEE /* 'n' -> */, /* pos 012c: 99 */ 0xE7 /* 'g' -> */, /* pos 012d: 100 */ 0xF5 /* 'u' -> */, /* pos 012e: 101 */ 0xE1 /* 'a' -> */, /* pos 012f: 102 */ 0xE7 /* 'g' -> */, /* pos 0130: 103 */ 0xE5 /* 'e' -> */, /* pos 0131: 104 */ 0xBA /* ':' -> */, /* pos 0132: 105 */ 0x00, 0x16 /* - terminal marker 22 - */, /* pos 0134: 106 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x013B state 107) */, 0x6F /* 'o' */, 0x1E, 0x02 /* (to 0x0355 state 487) */, 0x08, /* fail */ /* pos 013b: 107 */ 0xE7 /* 'g' -> */, /* pos 013c: 108 */ 0xED /* 'm' -> */, /* pos 013d: 109 */ 0xE1 /* 'a' -> */, /* pos 013e: 110 */ 0xBA /* ':' -> */, /* pos 013f: 111 */ 0x00, 0x17 /* - terminal marker 23 - */, /* pos 0141: 112 */ 0xE3 /* 'c' -> */, /* pos 0142: 113 */ 0xE8 /* 'h' -> */, /* pos 0143: 114 */ 0xE5 /* 'e' -> */, /* pos 0144: 115 */ 0xAD /* '-' -> */, /* pos 0145: 116 */ 0xE3 /* 'c' -> */, /* pos 0146: 117 */ 0xEF /* 'o' -> */, /* pos 0147: 118 */ 0xEE /* 'n' -> */, /* pos 0148: 119 */ 0xF4 /* 't' -> */, /* pos 0149: 120 */ 0xF2 /* 'r' -> */, /* pos 014a: 121 */ 0xEF /* 'o' -> */, /* pos 014b: 122 */ 0xEC /* 'l' -> */, /* pos 014c: 123 */ 0xBA /* ':' -> */, /* pos 014d: 124 */ 0x00, 0x18 /* - terminal marker 24 - */, /* pos 014f: 125 */ 0xF4 /* 't' -> */, /* pos 0150: 126 */ 0xE8 /* 'h' -> */, /* pos 0151: 127 */ 0xEF /* 'o' -> */, /* pos 0152: 128 */ 0xF2 /* 'r' -> */, /* pos 0153: 129 */ 0xE9 /* 'i' -> */, /* pos 0154: 130 */ 0xFA /* 'z' -> */, /* pos 0155: 131 */ 0xE1 /* 'a' -> */, /* pos 0156: 132 */ 0xF4 /* 't' -> */, /* pos 0157: 133 */ 0xE9 /* 'i' -> */, /* pos 0158: 134 */ 0xEF /* 'o' -> */, /* pos 0159: 135 */ 0xEE /* 'n' -> */, /* pos 015a: 136 */ 0xBA /* ':' -> */, /* pos 015b: 137 */ 0x00, 0x19 /* - terminal marker 25 - */, /* pos 015d: 138 */ 0xEB /* 'k' -> */, /* pos 015e: 139 */ 0xE9 /* 'i' -> */, /* pos 015f: 140 */ 0xE5 /* 'e' -> */, /* pos 0160: 141 */ 0xBA /* ':' -> */, /* pos 0161: 142 */ 0x00, 0x1A /* - terminal marker 26 - */, /* pos 0163: 143 */ 0xE5 /* 'e' -> */, /* pos 0164: 144 */ 0xEE /* 'n' -> */, /* pos 0165: 145 */ 0xF4 /* 't' -> */, /* pos 0166: 146 */ 0xAD /* '-' -> */, /* pos 0167: 147 */ 0x6C /* 'l' */, 0x10, 0x00 /* (to 0x0177 state 148) */, 0x74 /* 't' */, 0x1E, 0x00 /* (to 0x0188 state 155) */, 0x64 /* 'd' */, 0x4C, 0x00 /* (to 0x01B9 state 186) */, 0x65 /* 'e' */, 0x56, 0x00 /* (to 0x01C6 state 198) */, 0x72 /* 'r' */, 0x6F, 0x00 /* (to 0x01E2 state 223) */, 0x08, /* fail */ /* pos 0177: 148 */ 0x65 /* 'e' */, 0x0A, 0x00 /* (to 0x0181 state 149) */, 0x61 /* 'a' */, 0x56, 0x00 /* (to 0x01D0 state 207) */, 0x6F /* 'o' */, 0x5C, 0x00 /* (to 0x01D9 state 215) */, 0x08, /* fail */ /* pos 0181: 149 */ 0xEE /* 'n' -> */, /* pos 0182: 150 */ 0xE7 /* 'g' -> */, /* pos 0183: 151 */ 0xF4 /* 't' -> */, /* pos 0184: 152 */ 0xE8 /* 'h' -> */, /* pos 0185: 153 */ 0xBA /* ':' -> */, /* pos 0186: 154 */ 0x00, 0x1B /* - terminal marker 27 - */, /* pos 0188: 155 */ 0xF9 /* 'y' -> */, /* pos 0189: 156 */ 0xF0 /* 'p' -> */, /* pos 018a: 157 */ 0xE5 /* 'e' -> */, /* pos 018b: 158 */ 0xBA /* ':' -> */, /* pos 018c: 159 */ 0x00, 0x1C /* - terminal marker 28 - */, /* pos 018e: 160 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x0195 state 161) */, 0x65 /* 'e' */, 0x3C, 0x02 /* (to 0x03CD state 580) */, 0x08, /* fail */ /* pos 0195: 161 */ 0xF4 /* 't' -> */, /* pos 0196: 162 */ 0xE5 /* 'e' -> */, /* pos 0197: 163 */ 0xBA /* ':' -> */, /* pos 0198: 164 */ 0x00, 0x1D /* - terminal marker 29 - */, /* pos 019a: 165 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x01A1 state 166) */, 0x65 /* 'e' */, 0xB6, 0x00 /* (to 0x0253 state 304) */, 0x08, /* fail */ /* pos 01a1: 166 */ 0xEE /* 'n' -> */, /* pos 01a2: 167 */ 0xE7 /* 'g' -> */, /* pos 01a3: 168 */ 0xE5 /* 'e' -> */, /* pos 01a4: 169 */ 0xBA /* ':' -> */, /* pos 01a5: 170 */ 0x00, 0x1E /* - terminal marker 30 - */, /* pos 01a7: 171 */ 0xE1 /* 'a' -> */, /* pos 01a8: 172 */ 0xEE /* 'n' -> */, /* pos 01a9: 173 */ 0xE7 /* 'g' -> */, /* pos 01aa: 174 */ 0xE5 /* 'e' -> */, /* pos 01ab: 175 */ 0xF3 /* 's' -> */, /* pos 01ac: 176 */ 0xBA /* ':' -> */, /* pos 01ad: 177 */ 0x00, 0x29 /* - terminal marker 41 - */, /* pos 01af: 178 */ 0xE5 /* 'e' -> */, /* pos 01b0: 179 */ 0xBA /* ':' -> */, /* pos 01b1: 180 */ 0x00, 0x2B /* - terminal marker 43 - */, /* pos 01b3: 181 */ 0xEC /* 'l' -> */, /* pos 01b4: 182 */ 0xEF /* 'o' -> */, /* pos 01b5: 183 */ 0xF7 /* 'w' -> */, /* pos 01b6: 184 */ 0xBA /* ':' -> */, /* pos 01b7: 185 */ 0x00, 0x2C /* - terminal marker 44 - */, /* pos 01b9: 186 */ 0xE9 /* 'i' -> */, /* pos 01ba: 187 */ 0xF3 /* 's' -> */, /* pos 01bb: 188 */ 0xF0 /* 'p' -> */, /* pos 01bc: 189 */ 0xEF /* 'o' -> */, /* pos 01bd: 190 */ 0xF3 /* 's' -> */, /* pos 01be: 191 */ 0xE9 /* 'i' -> */, /* pos 01bf: 192 */ 0xF4 /* 't' -> */, /* pos 01c0: 193 */ 0xE9 /* 'i' -> */, /* pos 01c1: 194 */ 0xEF /* 'o' -> */, /* pos 01c2: 195 */ 0xEE /* 'n' -> */, /* pos 01c3: 196 */ 0xBA /* ':' -> */, /* pos 01c4: 197 */ 0x00, 0x2D /* - terminal marker 45 - */, /* pos 01c6: 198 */ 0xEE /* 'n' -> */, /* pos 01c7: 199 */ 0xE3 /* 'c' -> */, /* pos 01c8: 200 */ 0xEF /* 'o' -> */, /* pos 01c9: 201 */ 0xE4 /* 'd' -> */, /* pos 01ca: 202 */ 0xE9 /* 'i' -> */, /* pos 01cb: 203 */ 0xEE /* 'n' -> */, /* pos 01cc: 204 */ 0xE7 /* 'g' -> */, /* pos 01cd: 205 */ 0xBA /* ':' -> */, /* pos 01ce: 206 */ 0x00, 0x2E /* - terminal marker 46 - */, /* pos 01d0: 207 */ 0xEE /* 'n' -> */, /* pos 01d1: 208 */ 0xE7 /* 'g' -> */, /* pos 01d2: 209 */ 0xF5 /* 'u' -> */, /* pos 01d3: 210 */ 0xE1 /* 'a' -> */, /* pos 01d4: 211 */ 0xE7 /* 'g' -> */, /* pos 01d5: 212 */ 0xE5 /* 'e' -> */, /* pos 01d6: 213 */ 0xBA /* ':' -> */, /* pos 01d7: 214 */ 0x00, 0x2F /* - terminal marker 47 - */, /* pos 01d9: 215 */ 0xE3 /* 'c' -> */, /* pos 01da: 216 */ 0xE1 /* 'a' -> */, /* pos 01db: 217 */ 0xF4 /* 't' -> */, /* pos 01dc: 218 */ 0xE9 /* 'i' -> */, /* pos 01dd: 219 */ 0xEF /* 'o' -> */, /* pos 01de: 220 */ 0xEE /* 'n' -> */, /* pos 01df: 221 */ 0xBA /* ':' -> */, /* pos 01e0: 222 */ 0x00, 0x30 /* - terminal marker 48 - */, /* pos 01e2: 223 */ 0xE1 /* 'a' -> */, /* pos 01e3: 224 */ 0xEE /* 'n' -> */, /* pos 01e4: 225 */ 0xE7 /* 'g' -> */, /* pos 01e5: 226 */ 0xE5 /* 'e' -> */, /* pos 01e6: 227 */ 0xBA /* ':' -> */, /* pos 01e7: 228 */ 0x00, 0x31 /* - terminal marker 49 - */, /* pos 01e9: 229 */ 0x74 /* 't' */, 0x07, 0x00 /* (to 0x01F0 state 230) */, 0x78 /* 'x' */, 0x09, 0x00 /* (to 0x01F5 state 234) */, 0x08, /* fail */ /* pos 01f0: 230 */ 0xE1 /* 'a' -> */, /* pos 01f1: 231 */ 0xE7 /* 'g' -> */, /* pos 01f2: 232 */ 0xBA /* ':' -> */, /* pos 01f3: 233 */ 0x00, 0x32 /* - terminal marker 50 - */, /* pos 01f5: 234 */ 0xF0 /* 'p' -> */, /* pos 01f6: 235 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x01FD state 236) */, 0x69 /* 'i' */, 0x09, 0x00 /* (to 0x0202 state 240) */, 0x08, /* fail */ /* pos 01fd: 236 */ 0xE3 /* 'c' -> */, /* pos 01fe: 237 */ 0xF4 /* 't' -> */, /* pos 01ff: 238 */ 0xBA /* ':' -> */, /* pos 0200: 239 */ 0x00, 0x33 /* - terminal marker 51 - */, /* pos 0202: 240 */ 0xF2 /* 'r' -> */, /* pos 0203: 241 */ 0xE5 /* 'e' -> */, /* pos 0204: 242 */ 0xF3 /* 's' -> */, /* pos 0205: 243 */ 0xBA /* ':' -> */, /* pos 0206: 244 */ 0x00, 0x34 /* - terminal marker 52 - */, /* pos 0208: 245 */ 0xF2 /* 'r' -> */, /* pos 0209: 246 */ 0xEF /* 'o' -> */, /* pos 020a: 247 */ 0xED /* 'm' -> */, /* pos 020b: 248 */ 0xBA /* ':' -> */, /* pos 020c: 249 */ 0x00, 0x35 /* - terminal marker 53 - */, /* pos 020e: 250 */ 0xF4 /* 't' -> */, /* pos 020f: 251 */ 0xE3 /* 'c' -> */, /* pos 0210: 252 */ 0xE8 /* 'h' -> */, /* pos 0211: 253 */ 0xBA /* ':' -> */, /* pos 0212: 254 */ 0x00, 0x36 /* - terminal marker 54 - */, /* pos 0214: 255 */ 0xE1 /* 'a' -> */, /* pos 0215: 256 */ 0xEE /* 'n' -> */, /* pos 0216: 257 */ 0xE7 /* 'g' -> */, /* pos 0217: 258 */ 0xE5 /* 'e' -> */, /* pos 0218: 259 */ 0xBA /* ':' -> */, /* pos 0219: 260 */ 0x00, 0x37 /* - terminal marker 55 - */, /* pos 021b: 261 */ 0xEE /* 'n' -> */, /* pos 021c: 262 */ 0xED /* 'm' -> */, /* pos 021d: 263 */ 0xEF /* 'o' -> */, /* pos 021e: 264 */ 0xE4 /* 'd' -> */, /* pos 021f: 265 */ 0xE9 /* 'i' -> */, /* pos 0220: 266 */ 0xE6 /* 'f' -> */, /* pos 0221: 267 */ 0xE9 /* 'i' -> */, /* pos 0222: 268 */ 0xE5 /* 'e' -> */, /* pos 0223: 269 */ 0xE4 /* 'd' -> */, /* pos 0224: 270 */ 0xAD /* '-' -> */, /* pos 0225: 271 */ 0xF3 /* 's' -> */, /* pos 0226: 272 */ 0xE9 /* 'i' -> */, /* pos 0227: 273 */ 0xEE /* 'n' -> */, /* pos 0228: 274 */ 0xE3 /* 'c' -> */, /* pos 0229: 275 */ 0xE5 /* 'e' -> */, /* pos 022a: 276 */ 0xBA /* ':' -> */, /* pos 022b: 277 */ 0x00, 0x38 /* - terminal marker 56 - */, /* pos 022d: 278 */ 0x61 /* 'a' */, 0x0A, 0x00 /* (to 0x0237 state 279) */, 0x69 /* 'i' */, 0x15, 0x00 /* (to 0x0245 state 292) */, 0x6F /* 'o' */, 0x17, 0x00 /* (to 0x024A state 296) */, 0x08, /* fail */ /* pos 0237: 279 */ 0xF3 /* 's' -> */, /* pos 0238: 280 */ 0xF4 /* 't' -> */, /* pos 0239: 281 */ 0xAD /* '-' -> */, /* pos 023a: 282 */ 0xED /* 'm' -> */, /* pos 023b: 283 */ 0xEF /* 'o' -> */, /* pos 023c: 284 */ 0xE4 /* 'd' -> */, /* pos 023d: 285 */ 0xE9 /* 'i' -> */, /* pos 023e: 286 */ 0xE6 /* 'f' -> */, /* pos 023f: 287 */ 0xE9 /* 'i' -> */, /* pos 0240: 288 */ 0xE5 /* 'e' -> */, /* pos 0241: 289 */ 0xE4 /* 'd' -> */, /* pos 0242: 290 */ 0xBA /* ':' -> */, /* pos 0243: 291 */ 0x00, 0x39 /* - terminal marker 57 - */, /* pos 0245: 292 */ 0xEE /* 'n' -> */, /* pos 0246: 293 */ 0xEB /* 'k' -> */, /* pos 0247: 294 */ 0xBA /* ':' -> */, /* pos 0248: 295 */ 0x00, 0x3A /* - terminal marker 58 - */, /* pos 024a: 296 */ 0xE3 /* 'c' -> */, /* pos 024b: 297 */ 0xE1 /* 'a' -> */, /* pos 024c: 298 */ 0xF4 /* 't' -> */, /* pos 024d: 299 */ 0xE9 /* 'i' -> */, /* pos 024e: 300 */ 0xEF /* 'o' -> */, /* pos 024f: 301 */ 0xEE /* 'n' -> */, /* pos 0250: 302 */ 0xBA /* ':' -> */, /* pos 0251: 303 */ 0x00, 0x3B /* - terminal marker 59 - */, /* pos 0253: 304 */ 0x66 /* 'f' */, 0x0A, 0x00 /* (to 0x025D state 305) */, 0x74 /* 't' */, 0x14, 0x00 /* (to 0x026A state 311) */, 0x70 /* 'p' */, 0x88, 0x01 /* (to 0x03E1 state 596) */, 0x08, /* fail */ /* pos 025d: 305 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x0264 state 306) */, 0x65 /* 'e' */, 0xCA, 0x00 /* (to 0x032A state 448) */, 0x08, /* fail */ /* pos 0264: 306 */ 0xE5 /* 'e' -> */, /* pos 0265: 307 */ 0xF3 /* 's' -> */, /* pos 0266: 308 */ 0xE8 /* 'h' -> */, /* pos 0267: 309 */ 0xBA /* ':' -> */, /* pos 0268: 310 */ 0x00, 0x3F /* - terminal marker 63 - */, /* pos 026a: 311 */ 0xF2 /* 'r' -> */, /* pos 026b: 312 */ 0xF9 /* 'y' -> */, /* pos 026c: 313 */ 0xAD /* '-' -> */, /* pos 026d: 314 */ 0xE1 /* 'a' -> */, /* pos 026e: 315 */ 0xE6 /* 'f' -> */, /* pos 026f: 316 */ 0xF4 /* 't' -> */, /* pos 0270: 317 */ 0xE5 /* 'e' -> */, /* pos 0271: 318 */ 0xF2 /* 'r' -> */, /* pos 0272: 319 */ 0xBA /* ':' -> */, /* pos 0273: 320 */ 0x00, 0x40 /* - terminal marker 64 - */, /* pos 0275: 321 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x027C state 322) */, 0x74 /* 't' */, 0x06, 0x01 /* (to 0x037E state 514) */, 0x08, /* fail */ /* pos 027c: 322 */ 0x72 /* 'r' */, 0x0A, 0x00 /* (to 0x0286 state 323) */, 0x74 /* 't' */, 0x0D, 0x00 /* (to 0x028C state 328) */, 0x63 /* 'c' */, 0x6B, 0x01 /* (to 0x03ED state 607) */, 0x08, /* fail */ /* pos 0286: 323 */ 0xF6 /* 'v' -> */, /* pos 0287: 324 */ 0xE5 /* 'e' -> */, /* pos 0288: 325 */ 0xF2 /* 'r' -> */, /* pos 0289: 326 */ 0xBA /* ':' -> */, /* pos 028a: 327 */ 0x00, 0x41 /* - terminal marker 65 - */, /* pos 028c: 328 */ 0xAD /* '-' -> */, /* pos 028d: 329 */ 0xE3 /* 'c' -> */, /* pos 028e: 330 */ 0xEF /* 'o' -> */, /* pos 028f: 331 */ 0xEF /* 'o' -> */, /* pos 0290: 332 */ 0xEB /* 'k' -> */, /* pos 0291: 333 */ 0xE9 /* 'i' -> */, /* pos 0292: 334 */ 0xE5 /* 'e' -> */, /* pos 0293: 335 */ 0xBA /* ':' -> */, /* pos 0294: 336 */ 0x00, 0x42 /* - terminal marker 66 - */, /* pos 0296: 337 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x029D state 338) */, 0x65 /* 'e' */, 0x45, 0x01 /* (to 0x03DE state 594) */, 0x08, /* fail */ /* pos 029d: 338 */ 0xE1 /* 'a' -> */, /* pos 029e: 339 */ 0xEE /* 'n' -> */, /* pos 029f: 340 */ 0xF3 /* 's' -> */, /* pos 02a0: 341 */ 0xE6 /* 'f' -> */, /* pos 02a1: 342 */ 0xE5 /* 'e' -> */, /* pos 02a2: 343 */ 0xF2 /* 'r' -> */, /* pos 02a3: 344 */ 0xAD /* '-' -> */, /* pos 02a4: 345 */ 0xE5 /* 'e' -> */, /* pos 02a5: 346 */ 0xEE /* 'n' -> */, /* pos 02a6: 347 */ 0xE3 /* 'c' -> */, /* pos 02a7: 348 */ 0xEF /* 'o' -> */, /* pos 02a8: 349 */ 0xE4 /* 'd' -> */, /* pos 02a9: 350 */ 0xE9 /* 'i' -> */, /* pos 02aa: 351 */ 0xEE /* 'n' -> */, /* pos 02ab: 352 */ 0xE7 /* 'g' -> */, /* pos 02ac: 353 */ 0xBA /* ':' -> */, /* pos 02ad: 354 */ 0x00, 0x44 /* - terminal marker 68 - */, /* pos 02af: 355 */ 0xE9 /* 'i' -> */, /* pos 02b0: 356 */ 0xAD /* '-' -> */, /* pos 02b1: 357 */ 0xE1 /* 'a' -> */, /* pos 02b2: 358 */ 0xF2 /* 'r' -> */, /* pos 02b3: 359 */ 0xE7 /* 'g' -> */, /* pos 02b4: 360 */ 0xF3 /* 's' -> */, /* pos 02b5: 361 */ 0x00, 0x4C /* - terminal marker 76 - */, /* pos 02b7: 362 */ 0xA0 /* ' ' -> */, /* pos 02b8: 363 */ 0x00, 0x4F /* - terminal marker 79 - */, /* pos 02ba: 364 */ 0xAD /* '-' -> */, /* pos 02bb: 365 */ 0x66 /* 'f' */, 0x0A, 0x00 /* (to 0x02C5 state 366) */, 0x61 /* 'a' */, 0x1D, 0x00 /* (to 0x02DB state 385) */, 0x72 /* 'r' */, 0x14, 0x01 /* (to 0x03D5 state 586) */, 0x08, /* fail */ /* pos 02c5: 366 */ 0xEF /* 'o' -> */, /* pos 02c6: 367 */ 0xF2 /* 'r' -> */, /* pos 02c7: 368 */ 0xF7 /* 'w' -> */, /* pos 02c8: 369 */ 0xE1 /* 'a' -> */, /* pos 02c9: 370 */ 0xF2 /* 'r' -> */, /* pos 02ca: 371 */ 0xE4 /* 'd' -> */, /* pos 02cb: 372 */ 0xE5 /* 'e' -> */, /* pos 02cc: 373 */ 0xE4 /* 'd' -> */, /* pos 02cd: 374 */ 0xAD /* '-' -> */, /* pos 02ce: 375 */ 0xE6 /* 'f' -> */, /* pos 02cf: 376 */ 0xEF /* 'o' -> */, /* pos 02d0: 377 */ 0xF2 /* 'r' -> */, /* pos 02d1: 378 */ 0xBA /* ':' -> */, /* pos 02d2: 379 */ 0x00, 0x50 /* - terminal marker 80 - */, /* pos 02d4: 380 */ 0x00, 0x51 /* - terminal marker 81 - */, /* pos 02d6: 381 */ 0xE1 /* 'a' -> */, /* pos 02d7: 382 */ 0xE4 /* 'd' -> */, /* pos 02d8: 383 */ 0xA0 /* ' ' -> */, /* pos 02d9: 384 */ 0x00, 0x52 /* - terminal marker 82 - */, /* pos 02db: 385 */ 0x75 /* 'u' */, 0x07, 0x00 /* (to 0x02E2 state 386) */, 0x6D /* 'm' */, 0x0F, 0x00 /* (to 0x02ED state 396) */, 0x08, /* fail */ /* pos 02e2: 386 */ 0xF4 /* 't' -> */, /* pos 02e3: 387 */ 0xE8 /* 'h' -> */, /* pos 02e4: 388 */ 0xAD /* '-' -> */, /* pos 02e5: 389 */ 0xF4 /* 't' -> */, /* pos 02e6: 390 */ 0xEF /* 'o' -> */, /* pos 02e7: 391 */ 0xEB /* 'k' -> */, /* pos 02e8: 392 */ 0xE5 /* 'e' -> */, /* pos 02e9: 393 */ 0xEE /* 'n' -> */, /* pos 02ea: 394 */ 0xBA /* ':' -> */, /* pos 02eb: 395 */ 0x00, 0x56 /* - terminal marker 86 - */, /* pos 02ed: 396 */ 0xFA /* 'z' -> */, /* pos 02ee: 397 */ 0xEE /* 'n' -> */, /* pos 02ef: 398 */ 0xAD /* '-' -> */, /* pos 02f0: 399 */ 0xE4 /* 'd' -> */, /* pos 02f1: 400 */ 0xF3 /* 's' -> */, /* pos 02f2: 401 */ 0xF3 /* 's' -> */, /* pos 02f3: 402 */ 0xAD /* '-' -> */, /* pos 02f4: 403 */ 0xF3 /* 's' -> */, /* pos 02f5: 404 */ 0xE9 /* 'i' -> */, /* pos 02f6: 405 */ 0xE7 /* 'g' -> */, /* pos 02f7: 406 */ 0xEE /* 'n' -> */, /* pos 02f8: 407 */ 0xE1 /* 'a' -> */, /* pos 02f9: 408 */ 0xF4 /* 't' -> */, /* pos 02fa: 409 */ 0xF5 /* 'u' -> */, /* pos 02fb: 410 */ 0xF2 /* 'r' -> */, /* pos 02fc: 411 */ 0xE5 /* 'e' -> */, /* pos 02fd: 412 */ 0xBA /* ':' -> */, /* pos 02fe: 413 */ 0x00, 0x57 /* - terminal marker 87 - */, /* pos 0300: 414 */ 0xF4 /* 't' -> */, /* pos 0301: 415 */ 0xE9 /* 'i' -> */, /* pos 0302: 416 */ 0xEF /* 'o' -> */, /* pos 0303: 417 */ 0xEE /* 'n' -> */, /* pos 0304: 418 */ 0xF3 /* 's' -> */, /* pos 0305: 419 */ 0xA0 /* ' ' -> */, /* pos 0306: 420 */ 0x00, 0x02 /* - terminal marker 2 - */, /* pos 0308: 421 */ 0xF3 /* 's' -> */, /* pos 0309: 422 */ 0xAD /* '-' -> */, /* pos 030a: 423 */ 0xE3 /* 'c' -> */, /* pos 030b: 424 */ 0xEF /* 'o' -> */, /* pos 030c: 425 */ 0xEE /* 'n' -> */, /* pos 030d: 426 */ 0xF4 /* 't' -> */, /* pos 030e: 427 */ 0xF2 /* 'r' -> */, /* pos 030f: 428 */ 0xEF /* 'o' -> */, /* pos 0310: 429 */ 0xEC /* 'l' -> */, /* pos 0311: 430 */ 0xAD /* '-' -> */, /* pos 0312: 431 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x0319 state 432) */, 0x61 /* 'a' */, 0x24, 0x00 /* (to 0x0339 state 461) */, 0x08, /* fail */ /* pos 0319: 432 */ 0xE5 /* 'e' -> */, /* pos 031a: 433 */ 0xF1 /* 'q' -> */, /* pos 031b: 434 */ 0xF5 /* 'u' -> */, /* pos 031c: 435 */ 0xE5 /* 'e' -> */, /* pos 031d: 436 */ 0xF3 /* 's' -> */, /* pos 031e: 437 */ 0xF4 /* 't' -> */, /* pos 031f: 438 */ 0xAD /* '-' -> */, /* pos 0320: 439 */ 0xE8 /* 'h' -> */, /* pos 0321: 440 */ 0xE5 /* 'e' -> */, /* pos 0322: 441 */ 0xE1 /* 'a' -> */, /* pos 0323: 442 */ 0xE4 /* 'd' -> */, /* pos 0324: 443 */ 0xE5 /* 'e' -> */, /* pos 0325: 444 */ 0xF2 /* 'r' -> */, /* pos 0326: 445 */ 0xF3 /* 's' -> */, /* pos 0327: 446 */ 0xBA /* ':' -> */, /* pos 0328: 447 */ 0x00, 0x12 /* - terminal marker 18 - */, /* pos 032a: 448 */ 0xF2 /* 'r' -> */, /* pos 032b: 449 */ 0xE5 /* 'e' -> */, /* pos 032c: 450 */ 0xF2 /* 'r' -> */, /* pos 032d: 451 */ 0xBA /* ':' -> */, /* pos 032e: 452 */ 0x00, 0x1F /* - terminal marker 31 - */, /* pos 0330: 453 */ 0xE8 /* 'h' -> */, /* pos 0331: 454 */ 0xE1 /* 'a' -> */, /* pos 0332: 455 */ 0xF2 /* 'r' -> */, /* pos 0333: 456 */ 0xF3 /* 's' -> */, /* pos 0334: 457 */ 0xE5 /* 'e' -> */, /* pos 0335: 458 */ 0xF4 /* 't' -> */, /* pos 0336: 459 */ 0xBA /* ':' -> */, /* pos 0337: 460 */ 0x00, 0x28 /* - terminal marker 40 - */, /* pos 0339: 461 */ 0xEC /* 'l' -> */, /* pos 033a: 462 */ 0xEC /* 'l' -> */, /* pos 033b: 463 */ 0xEF /* 'o' -> */, /* pos 033c: 464 */ 0xF7 /* 'w' -> */, /* pos 033d: 465 */ 0xAD /* '-' -> */, /* pos 033e: 466 */ 0xEF /* 'o' -> */, /* pos 033f: 467 */ 0xF2 /* 'r' -> */, /* pos 0340: 468 */ 0xE9 /* 'i' -> */, /* pos 0341: 469 */ 0xE7 /* 'g' -> */, /* pos 0342: 470 */ 0xE9 /* 'i' -> */, /* pos 0343: 471 */ 0xEE /* 'n' -> */, /* pos 0344: 472 */ 0xBA /* ':' -> */, /* pos 0345: 473 */ 0x00, 0x2A /* - terminal marker 42 - */, /* pos 0347: 474 */ 0xE1 /* 'a' -> */, /* pos 0348: 475 */ 0xF8 /* 'x' -> */, /* pos 0349: 476 */ 0xAD /* '-' -> */, /* pos 034a: 477 */ 0xE6 /* 'f' -> */, /* pos 034b: 478 */ 0xEF /* 'o' -> */, /* pos 034c: 479 */ 0xF2 /* 'r' -> */, /* pos 034d: 480 */ 0xF7 /* 'w' -> */, /* pos 034e: 481 */ 0xE1 /* 'a' -> */, /* pos 034f: 482 */ 0xF2 /* 'r' -> */, /* pos 0350: 483 */ 0xE4 /* 'd' -> */, /* pos 0351: 484 */ 0xF3 /* 's' -> */, /* pos 0352: 485 */ 0xBA /* ':' -> */, /* pos 0353: 486 */ 0x00, 0x3C /* - terminal marker 60 - */, /* pos 0355: 487 */ 0xF8 /* 'x' -> */, /* pos 0356: 488 */ 0xF9 /* 'y' -> */, /* pos 0357: 489 */ 0x2D /* '-' */, 0x07, 0x00 /* (to 0x035E state 490) */, 0x20 /* ' ' */, 0x79, 0x00 /* (to 0x03D3 state 585) */, 0x08, /* fail */ /* pos 035e: 490 */ 0xE1 /* 'a' -> */, /* pos 035f: 491 */ 0xF5 /* 'u' -> */, /* pos 0360: 492 */ 0xF4 /* 't' -> */, /* pos 0361: 493 */ 0xE8 /* 'h' -> */, /* pos 0362: 494 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x0369 state 495) */, 0x6F /* 'o' */, 0x0E, 0x00 /* (to 0x0373 state 504) */, 0x08, /* fail */ /* pos 0369: 495 */ 0xEE /* 'n' -> */, /* pos 036a: 496 */ 0xF4 /* 't' -> */, /* pos 036b: 497 */ 0xE9 /* 'i' -> */, /* pos 036c: 498 */ 0xE3 /* 'c' -> */, /* pos 036d: 499 */ 0xE1 /* 'a' -> */, /* pos 036e: 500 */ 0xF4 /* 't' -> */, /* pos 036f: 501 */ 0xE5 /* 'e' -> */, /* pos 0370: 502 */ 0xBA /* ':' -> */, /* pos 0371: 503 */ 0x00, 0x3D /* - terminal marker 61 - */, /* pos 0373: 504 */ 0xF2 /* 'r' -> */, /* pos 0374: 505 */ 0xE9 /* 'i' -> */, /* pos 0375: 506 */ 0xFA /* 'z' -> */, /* pos 0376: 507 */ 0xE1 /* 'a' -> */, /* pos 0377: 508 */ 0xF4 /* 't' -> */, /* pos 0378: 509 */ 0xE9 /* 'i' -> */, /* pos 0379: 510 */ 0xEF /* 'o' -> */, /* pos 037a: 511 */ 0xEE /* 'n' -> */, /* pos 037b: 512 */ 0xBA /* ':' -> */, /* pos 037c: 513 */ 0x00, 0x3E /* - terminal marker 62 - */, /* pos 037e: 514 */ 0xF2 /* 'r' -> */, /* pos 037f: 515 */ 0xE9 /* 'i' -> */, /* pos 0380: 516 */ 0xE3 /* 'c' -> */, /* pos 0381: 517 */ 0xF4 /* 't' -> */, /* pos 0382: 518 */ 0xAD /* '-' -> */, /* pos 0383: 519 */ 0xF4 /* 't' -> */, /* pos 0384: 520 */ 0xF2 /* 'r' -> */, /* pos 0385: 521 */ 0xE1 /* 'a' -> */, /* pos 0386: 522 */ 0xEE /* 'n' -> */, /* pos 0387: 523 */ 0xF3 /* 's' -> */, /* pos 0388: 524 */ 0xF0 /* 'p' -> */, /* pos 0389: 525 */ 0xEF /* 'o' -> */, /* pos 038a: 526 */ 0xF2 /* 'r' -> */, /* pos 038b: 527 */ 0xF4 /* 't' -> */, /* pos 038c: 528 */ 0xAD /* '-' -> */, /* pos 038d: 529 */ 0xF3 /* 's' -> */, /* pos 038e: 530 */ 0xE5 /* 'e' -> */, /* pos 038f: 531 */ 0xE3 /* 'c' -> */, /* pos 0390: 532 */ 0xF5 /* 'u' -> */, /* pos 0391: 533 */ 0xF2 /* 'r' -> */, /* pos 0392: 534 */ 0xE9 /* 'i' -> */, /* pos 0393: 535 */ 0xF4 /* 't' -> */, /* pos 0394: 536 */ 0xF9 /* 'y' -> */, /* pos 0395: 537 */ 0xBA /* ':' -> */, /* pos 0396: 538 */ 0x00, 0x43 /* - terminal marker 67 - */, /* pos 0398: 539 */ 0xE5 /* 'e' -> */, /* pos 0399: 540 */ 0xF2 /* 'r' -> */, /* pos 039a: 541 */ 0xAD /* '-' -> */, /* pos 039b: 542 */ 0xE1 /* 'a' -> */, /* pos 039c: 543 */ 0xE7 /* 'g' -> */, /* pos 039d: 544 */ 0xE5 /* 'e' -> */, /* pos 039e: 545 */ 0xEE /* 'n' -> */, /* pos 039f: 546 */ 0xF4 /* 't' -> */, /* pos 03a0: 547 */ 0xBA /* ':' -> */, /* pos 03a1: 548 */ 0x00, 0x45 /* - terminal marker 69 - */, /* pos 03a3: 549 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x03AA state 550) */, 0x69 /* 'i' */, 0x09, 0x00 /* (to 0x03AF state 554) */, 0x08, /* fail */ /* pos 03aa: 550 */ 0xF2 /* 'r' -> */, /* pos 03ab: 551 */ 0xF9 /* 'y' -> */, /* pos 03ac: 552 */ 0xBA /* ':' -> */, /* pos 03ad: 553 */ 0x00, 0x46 /* - terminal marker 70 - */, /* pos 03af: 554 */ 0xE1 /* 'a' -> */, /* pos 03b0: 555 */ 0xBA /* ':' -> */, /* pos 03b1: 556 */ 0x00, 0x47 /* - terminal marker 71 - */, /* pos 03b3: 557 */ 0xF7 /* 'w' -> */, /* pos 03b4: 558 */ 0xF7 /* 'w' -> */, /* pos 03b5: 559 */ 0xAD /* '-' -> */, /* pos 03b6: 560 */ 0xE1 /* 'a' -> */, /* pos 03b7: 561 */ 0xF5 /* 'u' -> */, /* pos 03b8: 562 */ 0xF4 /* 't' -> */, /* pos 03b9: 563 */ 0xE8 /* 'h' -> */, /* pos 03ba: 564 */ 0xE5 /* 'e' -> */, /* pos 03bb: 565 */ 0xEE /* 'n' -> */, /* pos 03bc: 566 */ 0xF4 /* 't' -> */, /* pos 03bd: 567 */ 0xE9 /* 'i' -> */, /* pos 03be: 568 */ 0xE3 /* 'c' -> */, /* pos 03bf: 569 */ 0xE1 /* 'a' -> */, /* pos 03c0: 570 */ 0xF4 /* 't' -> */, /* pos 03c1: 571 */ 0xE5 /* 'e' -> */, /* pos 03c2: 572 */ 0xBA /* ':' -> */, /* pos 03c3: 573 */ 0x00, 0x48 /* - terminal marker 72 - */, /* pos 03c5: 574 */ 0xF4 /* 't' -> */, /* pos 03c6: 575 */ 0xE3 /* 'c' -> */, /* pos 03c7: 576 */ 0xE8 /* 'h' -> */, /* pos 03c8: 577 */ 0x00, 0x49 /* - terminal marker 73 - */, /* pos 03ca: 578 */ 0xF4 /* 't' -> */, /* pos 03cb: 579 */ 0x00, 0x4A /* - terminal marker 74 - */, /* pos 03cd: 580 */ 0xEC /* 'l' -> */, /* pos 03ce: 581 */ 0xE5 /* 'e' -> */, /* pos 03cf: 582 */ 0xF4 /* 't' -> */, /* pos 03d0: 583 */ 0xE5 /* 'e' -> */, /* pos 03d1: 584 */ 0x00, 0x4B /* - terminal marker 75 - */, /* pos 03d3: 585 */ 0x00, 0x4D /* - terminal marker 77 - */, /* pos 03d5: 586 */ 0xE5 /* 'e' -> */, /* pos 03d6: 587 */ 0xE1 /* 'a' -> */, /* pos 03d7: 588 */ 0xEC /* 'l' -> */, /* pos 03d8: 589 */ 0xAD /* '-' -> */, /* pos 03d9: 590 */ 0xE9 /* 'i' -> */, /* pos 03da: 591 */ 0xF0 /* 'p' -> */, /* pos 03db: 592 */ 0xBA /* ':' -> */, /* pos 03dc: 593 */ 0x00, 0x4E /* - terminal marker 78 - */, /* pos 03de: 594 */ 0xBA /* ':' -> */, /* pos 03df: 595 */ 0x00, 0x53 /* - terminal marker 83 - */, /* pos 03e1: 596 */ 0xEC /* 'l' -> */, /* pos 03e2: 597 */ 0xE1 /* 'a' -> */, /* pos 03e3: 598 */ 0xF9 /* 'y' -> */, /* pos 03e4: 599 */ 0xAD /* '-' -> */, /* pos 03e5: 600 */ 0xEE /* 'n' -> */, /* pos 03e6: 601 */ 0xEF /* 'o' -> */, /* pos 03e7: 602 */ 0xEE /* 'n' -> */, /* pos 03e8: 603 */ 0xE3 /* 'c' -> */, /* pos 03e9: 604 */ 0xE5 /* 'e' -> */, /* pos 03ea: 605 */ 0xBA /* ':' -> */, /* pos 03eb: 606 */ 0x00, 0x54 /* - terminal marker 84 - */, /* pos 03ed: 607 */ 0xAD /* '-' -> */, /* pos 03ee: 608 */ 0xF7 /* 'w' -> */, /* pos 03ef: 609 */ 0xE5 /* 'e' -> */, /* pos 03f0: 610 */ 0xE2 /* 'b' -> */, /* pos 03f1: 611 */ 0xF3 /* 's' -> */, /* pos 03f2: 612 */ 0xEF /* 'o' -> */, /* pos 03f3: 613 */ 0xE3 /* 'c' -> */, /* pos 03f4: 614 */ 0xEB /* 'k' -> */, /* pos 03f5: 615 */ 0xE5 /* 'e' -> */, /* pos 03f6: 616 */ 0xF4 /* 't' -> */, /* pos 03f7: 617 */ 0xAD /* '-' -> */, /* pos 03f8: 618 */ 0x64 /* 'd' */, 0x19, 0x00 /* (to 0x0411 state 619) */, 0x65 /* 'e' */, 0x1D, 0x00 /* (to 0x0418 state 625) */, 0x6B /* 'k' */, 0x26, 0x00 /* (to 0x0424 state 636) */, 0x70 /* 'p' */, 0x35, 0x00 /* (to 0x0436 state 643) */, 0x61 /* 'a' */, 0x3C, 0x00 /* (to 0x0440 state 652) */, 0x6E /* 'n' */, 0x41, 0x00 /* (to 0x0448 state 659) */, 0x76 /* 'v' */, 0x47, 0x00 /* (to 0x0451 state 666) */, 0x6F /* 'o' */, 0x4D, 0x00 /* (to 0x045A state 674) */, 0x08, /* fail */ /* pos 0411: 619 */ 0xF2 /* 'r' -> */, /* pos 0412: 620 */ 0xE1 /* 'a' -> */, /* pos 0413: 621 */ 0xE6 /* 'f' -> */, /* pos 0414: 622 */ 0xF4 /* 't' -> */, /* pos 0415: 623 */ 0xBA /* ':' -> */, /* pos 0416: 624 */ 0x00, 0x07 /* - terminal marker 7 - */, /* pos 0418: 625 */ 0xF8 /* 'x' -> */, /* pos 0419: 626 */ 0xF4 /* 't' -> */, /* pos 041a: 627 */ 0xE5 /* 'e' -> */, /* pos 041b: 628 */ 0xEE /* 'n' -> */, /* pos 041c: 629 */ 0xF3 /* 's' -> */, /* pos 041d: 630 */ 0xE9 /* 'i' -> */, /* pos 041e: 631 */ 0xEF /* 'o' -> */, /* pos 041f: 632 */ 0xEE /* 'n' -> */, /* pos 0420: 633 */ 0xF3 /* 's' -> */, /* pos 0421: 634 */ 0xBA /* ':' -> */, /* pos 0422: 635 */ 0x00, 0x09 /* - terminal marker 9 - */, /* pos 0424: 636 */ 0xE5 /* 'e' -> */, /* pos 0425: 637 */ 0xF9 /* 'y' -> */, /* pos 0426: 638 */ 0x31 /* '1' */, 0x0A, 0x00 /* (to 0x0430 state 639) */, 0x32 /* '2' */, 0x0A, 0x00 /* (to 0x0433 state 641) */, 0x3A /* ':' */, 0x23, 0x00 /* (to 0x044F state 665) */, 0x08, /* fail */ /* pos 0430: 639 */ 0xBA /* ':' -> */, /* pos 0431: 640 */ 0x00, 0x0A /* - terminal marker 10 - */, /* pos 0433: 641 */ 0xBA /* ':' -> */, /* pos 0434: 642 */ 0x00, 0x0B /* - terminal marker 11 - */, /* pos 0436: 643 */ 0xF2 /* 'r' -> */, /* pos 0437: 644 */ 0xEF /* 'o' -> */, /* pos 0438: 645 */ 0xF4 /* 't' -> */, /* pos 0439: 646 */ 0xEF /* 'o' -> */, /* pos 043a: 647 */ 0xE3 /* 'c' -> */, /* pos 043b: 648 */ 0xEF /* 'o' -> */, /* pos 043c: 649 */ 0xEC /* 'l' -> */, /* pos 043d: 650 */ 0xBA /* ':' -> */, /* pos 043e: 651 */ 0x00, 0x0C /* - terminal marker 12 - */, /* pos 0440: 652 */ 0xE3 /* 'c' -> */, /* pos 0441: 653 */ 0xE3 /* 'c' -> */, /* pos 0442: 654 */ 0xE5 /* 'e' -> */, /* pos 0443: 655 */ 0xF0 /* 'p' -> */, /* pos 0444: 656 */ 0xF4 /* 't' -> */, /* pos 0445: 657 */ 0xBA /* ':' -> */, /* pos 0446: 658 */ 0x00, 0x0D /* - terminal marker 13 - */, /* pos 0448: 659 */ 0xEF /* 'o' -> */, /* pos 0449: 660 */ 0xEE /* 'n' -> */, /* pos 044a: 661 */ 0xE3 /* 'c' -> */, /* pos 044b: 662 */ 0xE5 /* 'e' -> */, /* pos 044c: 663 */ 0xBA /* ':' -> */, /* pos 044d: 664 */ 0x00, 0x0E /* - terminal marker 14 - */, /* pos 044f: 665 */ 0x00, 0x20 /* - terminal marker 32 - */, /* pos 0451: 666 */ 0xE5 /* 'e' -> */, /* pos 0452: 667 */ 0xF2 /* 'r' -> */, /* pos 0453: 668 */ 0xF3 /* 's' -> */, /* pos 0454: 669 */ 0xE9 /* 'i' -> */, /* pos 0455: 670 */ 0xEF /* 'o' -> */, /* pos 0456: 671 */ 0xEE /* 'n' -> */, /* pos 0457: 672 */ 0xBA /* ':' -> */, /* pos 0458: 673 */ 0x00, 0x21 /* - terminal marker 33 - */, /* pos 045a: 674 */ 0xF2 /* 'r' -> */, /* pos 045b: 675 */ 0xE9 /* 'i' -> */, /* pos 045c: 676 */ 0xE7 /* 'g' -> */, /* pos 045d: 677 */ 0xE9 /* 'i' -> */, /* pos 045e: 678 */ 0xEE /* 'n' -> */, /* pos 045f: 679 */ 0xBA /* ':' -> */, /* pos 0460: 680 */ 0x00, 0x22 /* - terminal marker 34 - */, /* pos 0462: 681 */ 0xAD /* '-' -> */, /* pos 0463: 682 */ 0xF3 /* 's' -> */, /* pos 0464: 683 */ 0xE5 /* 'e' -> */, /* pos 0465: 684 */ 0xF4 /* 't' -> */, /* pos 0466: 685 */ 0xF4 /* 't' -> */, /* pos 0467: 686 */ 0xE9 /* 'i' -> */, /* pos 0468: 687 */ 0xEE /* 'n' -> */, /* pos 0469: 688 */ 0xE7 /* 'g' -> */, /* pos 046a: 689 */ 0xF3 /* 's' -> */, /* pos 046b: 690 */ 0xBA /* ':' -> */, /* pos 046c: 691 */ 0x00, 0x10 /* - terminal marker 16 - */, /* pos 046e: 692 */ 0x61 /* 'a' */, 0x0D, 0x00 /* (to 0x047B state 693) */, 0x6D /* 'm' */, 0x14, 0x00 /* (to 0x0485 state 702) */, 0x70 /* 'p' */, 0x18, 0x00 /* (to 0x048C state 708) */, 0x73 /* 's' */, 0x20, 0x00 /* (to 0x0497 state 712) */, 0x08, /* fail */ /* pos 047b: 693 */ 0xF5 /* 'u' -> */, /* pos 047c: 694 */ 0xF4 /* 't' -> */, /* pos 047d: 695 */ 0xE8 /* 'h' -> */, /* pos 047e: 696 */ 0xEF /* 'o' -> */, /* pos 047f: 697 */ 0xF2 /* 'r' -> */, /* pos 0480: 698 */ 0xE9 /* 'i' -> */, /* pos 0481: 699 */ 0xF4 /* 't' -> */, /* pos 0482: 700 */ 0xF9 /* 'y' -> */, /* pos 0483: 701 */ 0x00, 0x23 /* - terminal marker 35 - */, /* pos 0485: 702 */ 0xE5 /* 'e' -> */, /* pos 0486: 703 */ 0xF4 /* 't' -> */, /* pos 0487: 704 */ 0xE8 /* 'h' -> */, /* pos 0488: 705 */ 0xEF /* 'o' -> */, /* pos 0489: 706 */ 0xE4 /* 'd' -> */, /* pos 048a: 707 */ 0x00, 0x24 /* - terminal marker 36 - */, /* pos 048c: 708 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x0493 state 709) */, 0x72 /* 'r' */, 0x1B, 0x00 /* (to 0x04AA state 723) */, 0x08, /* fail */ /* pos 0493: 709 */ 0xF4 /* 't' -> */, /* pos 0494: 710 */ 0xE8 /* 'h' -> */, /* pos 0495: 711 */ 0x00, 0x25 /* - terminal marker 37 - */, /* pos 0497: 712 */ 0x63 /* 'c' */, 0x07, 0x00 /* (to 0x049E state 713) */, 0x74 /* 't' */, 0x0A, 0x00 /* (to 0x04A4 state 718) */, 0x08, /* fail */ /* pos 049e: 713 */ 0xE8 /* 'h' -> */, /* pos 049f: 714 */ 0xE5 /* 'e' -> */, /* pos 04a0: 715 */ 0xED /* 'm' -> */, /* pos 04a1: 716 */ 0xE5 /* 'e' -> */, /* pos 04a2: 717 */ 0x00, 0x26 /* - terminal marker 38 - */, /* pos 04a4: 718 */ 0xE1 /* 'a' -> */, /* pos 04a5: 719 */ 0xF4 /* 't' -> */, /* pos 04a6: 720 */ 0xF5 /* 'u' -> */, /* pos 04a7: 721 */ 0xF3 /* 's' -> */, /* pos 04a8: 722 */ 0x00, 0x27 /* - terminal marker 39 - */, /* pos 04aa: 723 */ 0xEF /* 'o' -> */, /* pos 04ab: 724 */ 0xF4 /* 't' -> */, /* pos 04ac: 725 */ 0xEF /* 'o' -> */, /* pos 04ad: 726 */ 0xE3 /* 'c' -> */, /* pos 04ae: 727 */ 0xEF /* 'o' -> */, /* pos 04af: 728 */ 0xEC /* 'l' -> */, /* pos 04b0: 729 */ 0x00, 0x55 /* - terminal marker 85 - */, /* total size 1202 bytes */ #endif /* #if !defined(LWS_HTTP_HEADERS_ALL) && !defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) && !defined(LWS_ROLE_WS) && !defined(LWS_ROLE_H2) static uint8_t lws_header_implies_psuedoheader_map[] = { 0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, }; #endif #if !defined(LWS_HTTP_HEADERS_ALL) && defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) && !defined(LWS_ROLE_WS) && !defined(LWS_ROLE_H2) static uint8_t lws_header_implies_psuedoheader_map[] = { 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x0e,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, }; #endif #if !defined(LWS_HTTP_HEADERS_ALL) && !defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) && defined(LWS_ROLE_WS) && !defined(LWS_ROLE_H2) static uint8_t lws_header_implies_psuedoheader_map[] = { 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, }; #endif #if !defined(LWS_HTTP_HEADERS_ALL) && defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) && defined(LWS_ROLE_WS) && !defined(LWS_ROLE_H2) static uint8_t lws_header_implies_psuedoheader_map[] = { 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x10,0x00,0x00,0x00,0x00,0x00,0x00, }; #endif #if !defined(LWS_HTTP_HEADERS_ALL) && !defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) && !defined(LWS_ROLE_WS) && defined(LWS_ROLE_H2) static uint8_t lws_header_implies_psuedoheader_map[] = { 0x03,0x00,0x80,0x0f,0x00,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00, }; #endif #if !defined(LWS_HTTP_HEADERS_ALL) && defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) && !defined(LWS_ROLE_WS) && defined(LWS_ROLE_H2) static uint8_t lws_header_implies_psuedoheader_map[] = { 0x07,0x00,0x00,0x3e,0x00,0x00,0x00,0x80,0x03,0x09,0x00,0x00,0x00,0x00,0x00,0x00, }; #endif #if !defined(LWS_HTTP_HEADERS_ALL) && !defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) && defined(LWS_ROLE_WS) && defined(LWS_ROLE_H2) static uint8_t lws_header_implies_psuedoheader_map[] = { 0x03,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x00,0x00,0x00, }; #endif #if defined(LWS_HTTP_HEADERS_ALL) || ( defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) && defined(LWS_ROLE_WS) && defined(LWS_ROLE_H2)) static uint8_t lws_header_implies_psuedoheader_map[] = { 0x07,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x00,0x0e,0x24,0x00,0x00,0x00,0x00,0x00, }; #endif */ libwebsockets-4.3.5/lib/roles/http/minilex.c000066400000000000000000000244111476025525100210560ustar00rootroot00000000000000/* * minilex.c * * High efficiency lexical state parser * * Copyright (C)2011-2020 Andy Green * * Licensed under MIT * * Usage: gcc minilex.c -o minilex && ./minilex > lextable.h * * Run it twice to test parsing on the generated table on stderr * * Whoo this got a bit complicated by lws-buildtime deselection of some * headers optionally. There are 3 x vars, UNCOMMON, WS, H2 so we make * eight copies of the lextable selected by the appropriate #if defined() */ #include #include #include /* get all the strings */ #define LWS_ROLE_WS 1 #define LWS_WITH_HTTP_UNCOMMON_HEADERS 1 #define LWS_ROLE_H2 1 #include "lextable-strings.h" #undef LWS_ROLE_WS #undef LWS_WITH_HTTP_UNCOMMON_HEADERS #undef LWS_ROLE_H2 /* bitfield for the 8 versions as to which strings exist... index layout * * b0 b1 b2 * 0 = * 1 = uncommon * 2 = ws * 3 = uncommon ws * 4 = h2 * 5 = uncommon h2 * 6 = ws h2 * 7 = uncommon ws h2 */ unsigned char filter_array[] = { 0xff, /* get */ 0xff, /* post */ 0xaa, /* options */ 0xff, /* host */ 0xff, /* connection */ 0xff, /* upgrade */ 0xff, /* origin */ 0xcc, /* sec-ws-draft */ 0xff, /* crlf */ 0xcc, /* sec-ws-ext */ 0xcc, /* sec-ws-key1 */ 0xcc, /* sec-ws-key2 */ 0xcc, /* sec-ws-protocol */ 0xcc, /* sec-ws-accept */ 0xcc, /* sec-ws-nonce */ 0xff, /* http/1.1 */ 0xf0, /* http2-settings */ 0xff, /* accept */ 0xaa, /* access-control-req-hdrs */ 0xff, /* if-modified-since */ 0xff, /* if-none-match */ 0xff, /* accept-encoding */ 0xff, /* accept-language */ 0xff, /* pragma */ 0xff, /* cache-control */ 0xff, /* authorization */ 0xff, /* cookie */ 0xff, /* content-length */ 0xff, /* content-type */ 0xff, /* date */ 0xff, /* range */ 0xfa, /* referer */ 0xcc, /* sec-ws-key */ 0xcc, /* sec-ws-version */ 0xcc, /* sec-sc-origin */ 0xf0, /* authority */ 0xf0, /* method */ 0xf0, /* path */ 0xf0, /* scheme */ 0xf0, /* status */ 0xfa, /* accept-charset */ 0xff, /* accept-ranges */ 0xfa, /* access-control-allow-origin */ 0xff, /* age */ 0xff, /* allow */ 0xff, /* content-disposition */ 0xff, /* content-encoding */ 0xff, /* content-language */ 0xff, /* content-location */ 0xff, /* content-range */ 0xff, /* etag */ 0xff, /* expect */ 0xff, /* expires */ 0xff, /* from */ 0xff, /* if-match */ 0xff, /* if-range */ 0xff, /* if-unmodified-since */ 0xff, /* last-modified */ 0xff, /* link */ 0xff, /* location */ 0xfa, /* max-forwards */ 0xfa, /* proxy-authenticate */ 0xfa, /* proxy-authorization */ 0xff, /* refresh */ 0xff, /* retry-after */ 0xff, /* server */ 0xff, /* set-cookie */ 0xfa, /* strict-transport-security */ 0xff, /* transfer-encoding */ 0xfa, /* user-agent */ 0xfa, /* vary */ 0xfa, /* via */ 0xfa, /* www-authenticate */ 0xaa, /* patch */ 0xaa, /* put */ 0xaa, /* delete */ 0xff, /* uri-args */ 0xaa, /* proxy */ 0xaa, /* x-real-ip */ 0xff, /* http/1.0 */ 0xff, /* x-forwarded-for */ 0xff, /* connect */ 0xff, /* head */ 0xfa, /* te */ 0xfa, /* replay-nonce */ 0xf0, /* protocol */ 0xff, /* x-auth-token */ 0xff /* not matchable */ }; static unsigned char lws_header_implies_psuedoheader_map[] = { 0x07, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00 /* <-64 */, 0x0e /* <- 72 */, 0x24 /* <- 80 */, 0, 0, 0, 0 }; /* * b7 = 0 = 1-byte seq * 0x08 = fail * 2-byte seq * 0x00 - 0x07, then terminal as given in 2nd byte 3-byte seq * no match: go fwd 3 byte, match: jump fwd by amt in +1/+2 bytes * = 1 = 1-byte seq * no match: die, match go fwd 1 byte */ unsigned char lextable[][2000] = { { #include "lextable.h" }, #define LWS_WITH_HTTP_UNCOMMON_HEADERS { #include "lextable.h" }, #undef LWS_WITH_HTTP_UNCOMMON_HEADERS #define LWS_ROLE_WS 1 { #include "lextable.h" }, #define LWS_WITH_HTTP_UNCOMMON_HEADERS { #include "lextable.h" }, #undef LWS_ROLE_WS #undef LWS_WITH_HTTP_UNCOMMON_HEADERS #define LWS_ROLE_H2 1 { #include "lextable.h" }, #define LWS_WITH_HTTP_UNCOMMON_HEADERS { #include "lextable.h" }, #undef LWS_WITH_HTTP_UNCOMMON_HEADERS #define LWS_ROLE_WS 1 { #include "lextable.h" }, #define LWS_WITH_HTTP_UNCOMMON_HEADERS 1 { #include "lextable.h" }, }; #define PARALLEL 30 struct state { char c[PARALLEL]; int state[PARALLEL]; int count; int bytepos; int real_pos; }; static unsigned char pseudomap[8][16]; struct state state[1000]; int next = 1; #define FAIL_CHAR 0x08 int lextable_decode(int version, int pos, char c) { while (1) { if (lextable[version][pos] & (1 << 7)) { /* 1-byte, fail on mismatch */ if ((lextable[version][pos] & 0x7f) != c) return -1; /* fall thru */ pos++; if (lextable[version][pos] == FAIL_CHAR) return -1; return pos; } else { /* b7 = 0, end or 3-byte */ if (lextable[version][pos] < FAIL_CHAR) /* terminal marker */ return pos; if (lextable[version][pos] == c) /* goto */ return pos + (lextable[version][pos + 1]) + (lextable[version][pos + 2] << 8); /* fall thru goto */ pos += 3; /* continue */ } } } int issue(int version) { const char *rset[200]; int n = 0; int m; int prev; int walk; int saw; int y; int j; int pos = 0; int setmembers = 0; memset(rset, 0, sizeof(rset)); if (version == 7) printf("#if defined(LWS_HTTP_HEADERS_ALL) || (%cdefined(LWS_WITH_HTTP_UNCOMMON_HEADERS) && " "%cdefined(LWS_ROLE_WS) && " "%cdefined(LWS_ROLE_H2))\n", version & 1 ? ' ' : '!', version & 2 ? ' ' : '!', version & 4 ? ' ' : '!'); else printf("#if !defined(LWS_HTTP_HEADERS_ALL) && %cdefined(LWS_WITH_HTTP_UNCOMMON_HEADERS) && " "%cdefined(LWS_ROLE_WS) && " "%cdefined(LWS_ROLE_H2)\n", version & 1 ? ' ' : '!', version & 2 ? ' ' : '!', version & 4 ? ' ' : '!'); /* * let's create version's view of the set of strings */ for (n = 0; n < sizeof(set) / sizeof(set[0]); n++) if (filter_array[n] & (1 << version)) { printf("\t/* %d: %d: %s */\n", setmembers, n, set[n]); if (lws_header_implies_psuedoheader_map[n >> 3] & (1 << (n & 7))) pseudomap[version][(setmembers >> 3)] |= 1 << (setmembers & 7); rset[setmembers++] = set[n]; } n = 0; while (n < setmembers) { m = 0; walk = 0; prev = 0; if (rset[n][0] == '\0') { n++; continue; } while (rset[n][m]) { saw = 0; for (y = 0; y < state[walk].count; y++) if (state[walk].c[y] == rset[n][m]) { /* exists -- go forward */ walk = state[walk].state[y]; saw = 1; break; } if (saw) goto again; /* something we didn't see before */ state[walk].c[state[walk].count] = rset[n][m]; state[walk].state[state[walk].count] = next; state[walk].count++; walk = next++; again: m++; } state[walk].c[0] = n++; state[walk].state[0] = 0; /* terminal marker */ state[walk].count = 1; } walk = 0; for (n = 0; n < next; n++) { state[n].bytepos = walk; walk += (2 * state[n].count); } /* compute everyone's position first */ pos = 0; walk = 0; for (n = 0; n < next; n++) { state[n].real_pos = pos; for (m = 0; m < state[n].count; m++) { if (state[n].state[m] == 0) pos += 2; /* terminal marker */ else { /* c is a character */ if ((state[state[n].state[m]].bytepos - walk) == 2) pos++; else { pos += 3; if (m == state[n].count - 1) pos++; /* fail */ } } walk += 2; } } walk = 0; pos = 0; for (n = 0; n < next; n++) { for (m = 0; m < state[n].count; m++) { if (!m) fprintf(stdout, "/* pos %04x: %3d */ ", state[n].real_pos, n); else fprintf(stdout, " "); y = state[n].c[m]; saw = state[n].state[m]; if (saw == 0) { // c is a terminal then if (y > 0x7ff) { fprintf(stderr, "terminal too big\n"); return 2; } fprintf(stdout, " 0x%02X, 0x%02X " " " "/* - terminal marker %2d - */,\n", y >> 8, y & 0xff, y & 0x7f); pos += 2; walk += 2; continue; } /* c is a character */ prev = y &0x7f; if (prev < 32 || prev > 126) prev = '.'; if ((state[saw].bytepos - walk) == 2) { fprintf(stdout, " 0x%02X /* '%c' -> */,\n", y | 0x80, prev); pos++; walk += 2; continue; } j = state[saw].real_pos - pos; if (j > 0xffff) { fprintf(stderr, "Jump > 64K bytes ahead (%d to %d)\n", state[n].real_pos, state[saw].real_pos); return 1; } fprintf(stdout, " 0x%02X /* '%c' */, 0x%02X, 0x%02X " "/* (to 0x%04X state %3d) */,\n", y, prev, j & 0xff, j >> 8, state[saw].real_pos, saw); pos += 3; if (m == state[n].count - 1) { fprintf(stdout, " 0x%02X, /* fail */\n", FAIL_CHAR); pos++; /* fail */ } walk += 2; } } fprintf(stdout, "/* total size %d bytes */\n", pos); printf("#endif\n\n"); /* * Try to parse every legal input string */ for (n = 0; n < setmembers; n++) { walk = 0; m = 0; y = -1; if (rset[n][0] == '\0') continue; fprintf(stderr, " trying %d '%s'\n", n, rset[n]); while (rset[n][m]) { walk = lextable_decode(version, walk, rset[n][m]); if (walk < 0) { fprintf(stderr, "failed\n"); return 3; } if (lextable[version][walk] < FAIL_CHAR) { y = (lextable[version][walk] << 8) + lextable[version][walk + 1]; break; } m++; } if (y != n) { fprintf(stderr, "decode failed %d\n", y); return 4; } } fprintf(stderr, "All decode OK\n"); return 0; } int main(void) { int m, n; for (n = 0; n < 8; n++) { issue(n); } printf("\n/*\n"); for (n = 0; n < 8; n++) { if (n == 7) printf("#if defined(LWS_HTTP_HEADERS_ALL) || (%cdefined(LWS_WITH_HTTP_UNCOMMON_HEADERS) && " "%cdefined(LWS_ROLE_WS) && " "%cdefined(LWS_ROLE_H2))\n", n & 1 ? ' ' : '!', n & 2 ? ' ' : '!', n & 4 ? ' ' : '!'); else printf("#if !defined(LWS_HTTP_HEADERS_ALL) && %cdefined(LWS_WITH_HTTP_UNCOMMON_HEADERS) && " "%cdefined(LWS_ROLE_WS) && " "%cdefined(LWS_ROLE_H2)\n", n & 1 ? ' ' : '!', n & 2 ? ' ' : '!', n & 4 ? ' ' : '!'); printf("static uint8_t lws_header_implies_psuedoheader_map[] = {\n\t"); for (m = 0; m < sizeof(pseudomap[n]); m++) printf("0x%02x,", pseudomap[n][m]); printf("\n};\n"); printf("#endif\n"); } printf("*/\n"); fprintf(stderr, "did all the variants\n"); } libwebsockets-4.3.5/lib/roles/http/parsers.c000066400000000000000000001176221476025525100210770ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" static const unsigned char lextable_h1[] = { #include "lextable.h" }; #define FAIL_CHAR 0x08 #if defined(LWS_WITH_CUSTOM_HEADERS) #define UHO_NLEN 0 #define UHO_VLEN 2 #define UHO_LL 4 #define UHO_NAME 8 #endif static struct allocated_headers * _lws_create_ah(struct lws_context_per_thread *pt, ah_data_idx_t data_size) { struct allocated_headers *ah = lws_zalloc(sizeof(*ah), "ah struct"); if (!ah) return NULL; ah->data = lws_malloc(data_size, "ah data"); if (!ah->data) { lws_free(ah); return NULL; } ah->next = pt->http.ah_list; pt->http.ah_list = ah; ah->data_length = data_size; pt->http.ah_pool_length++; lwsl_info("%s: created ah %p (size %d): pool length %u\n", __func__, ah, (int)data_size, (unsigned int)pt->http.ah_pool_length); return ah; } int _lws_destroy_ah(struct lws_context_per_thread *pt, struct allocated_headers *ah) { lws_start_foreach_llp(struct allocated_headers **, a, pt->http.ah_list) { if ((*a) == ah) { *a = ah->next; pt->http.ah_pool_length--; lwsl_info("%s: freed ah %p : pool length %u\n", __func__, ah, (unsigned int)pt->http.ah_pool_length); if (ah->data) lws_free(ah->data); lws_free(ah); return 0; } } lws_end_foreach_llp(a, next); return 1; } void _lws_header_table_reset(struct allocated_headers *ah) { /* init the ah to reflect no headers or data have appeared yet */ memset(ah->frag_index, 0, sizeof(ah->frag_index)); memset(ah->frags, 0, sizeof(ah->frags)); ah->nfrag = 0; ah->pos = 0; ah->http_response = 0; ah->parser_state = WSI_TOKEN_NAME_PART; ah->lextable_pos = 0; ah->unk_pos = 0; #if defined(LWS_WITH_CUSTOM_HEADERS) ah->unk_ll_head = 0; ah->unk_ll_tail = 0; #endif } // doesn't scrub the ah rxbuffer by default, parent must do if needed void __lws_header_table_reset(struct lws *wsi, int autoservice) { struct allocated_headers *ah = wsi->http.ah; struct lws_context_per_thread *pt; struct lws_pollfd *pfd; /* if we have the idea we're resetting 'our' ah, must be bound to one */ assert(ah); /* ah also concurs with ownership */ assert(ah->wsi == wsi); _lws_header_table_reset(ah); /* since we will restart the ah, our new headers are not completed */ wsi->hdr_parsing_completed = 0; /* while we hold the ah, keep a timeout on the wsi */ __lws_set_timeout(wsi, PENDING_TIMEOUT_HOLDING_AH, wsi->a.vhost->timeout_secs_ah_idle); time(&ah->assigned); if (wsi->position_in_fds_table != LWS_NO_FDS_POS && lws_buflist_next_segment_len(&wsi->buflist, NULL) && autoservice) { lwsl_debug("%s: service on readbuf ah\n", __func__); pt = &wsi->a.context->pt[(int)wsi->tsi]; /* * Unlike a normal connect, we have the headers already * (or the first part of them anyway) */ pfd = &pt->fds[wsi->position_in_fds_table]; pfd->revents |= LWS_POLLIN; lwsl_err("%s: calling service\n", __func__); lws_service_fd_tsi(wsi->a.context, pfd, wsi->tsi); } } void lws_header_table_reset(struct lws *wsi, int autoservice) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; lws_pt_lock(pt, __func__); __lws_header_table_reset(wsi, autoservice); lws_pt_unlock(pt); } static void _lws_header_ensure_we_are_on_waiting_list(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; struct lws_pollargs pa; struct lws **pwsi = &pt->http.ah_wait_list; while (*pwsi) { if (*pwsi == wsi) return; pwsi = &(*pwsi)->http.ah_wait_list; } lwsl_info("%s: wsi: %s\n", __func__, lws_wsi_tag(wsi)); wsi->http.ah_wait_list = pt->http.ah_wait_list; pt->http.ah_wait_list = wsi; pt->http.ah_wait_list_length++; /* we cannot accept input then */ _lws_change_pollfd(wsi, LWS_POLLIN, 0, &pa); } static int __lws_remove_from_ah_waiting_list(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; struct lws **pwsi =&pt->http.ah_wait_list; while (*pwsi) { if (*pwsi == wsi) { lwsl_info("%s: wsi %s\n", __func__, lws_wsi_tag(wsi)); /* point prev guy to our next */ *pwsi = wsi->http.ah_wait_list; /* we shouldn't point anywhere now */ wsi->http.ah_wait_list = NULL; pt->http.ah_wait_list_length--; return 1; } pwsi = &(*pwsi)->http.ah_wait_list; } return 0; } int LWS_WARN_UNUSED_RESULT lws_header_table_attach(struct lws *wsi, int autoservice) { struct lws_context *context = wsi->a.context; struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; struct lws_pollargs pa; int n; #if defined(LWS_ROLE_MQTT) && defined(LWS_WITH_CLIENT) if (lwsi_role_mqtt(wsi)) goto connect_via_info2; #endif lwsl_info("%s: %s: ah %p (tsi %d, count = %d) in\n", __func__, lws_wsi_tag(wsi), (void *)wsi->http.ah, wsi->tsi, pt->http.ah_count_in_use); if (!lwsi_role_http(wsi)) { lwsl_err("%s: bad role %s\n", __func__, wsi->role_ops->name); assert(0); return -1; } lws_pt_lock(pt, __func__); /* if we are already bound to one, just clear it down */ if (wsi->http.ah) { lwsl_info("%s: cleardown\n", __func__); goto reset; } n = pt->http.ah_count_in_use == (int)context->max_http_header_pool; #if defined(LWS_WITH_PEER_LIMITS) if (!n) n = lws_peer_confirm_ah_attach_ok(context, wsi->peer); #endif if (n) { /* * Pool is either all busy, or we don't want to give this * particular guy an ah right now... * * Make sure we are on the waiting list, and return that we * weren't able to provide the ah */ _lws_header_ensure_we_are_on_waiting_list(wsi); goto bail; } __lws_remove_from_ah_waiting_list(wsi); wsi->http.ah = _lws_create_ah(pt, context->max_http_header_data); if (!wsi->http.ah) { /* we could not create an ah */ _lws_header_ensure_we_are_on_waiting_list(wsi); goto bail; } wsi->http.ah->in_use = 1; wsi->http.ah->wsi = wsi; /* mark our owner */ pt->http.ah_count_in_use++; #if defined(LWS_WITH_PEER_LIMITS) && (defined(LWS_ROLE_H1) || \ defined(LWS_ROLE_H2)) lws_context_lock(context, "ah attach"); /* <========================= */ if (wsi->peer) wsi->peer->http.count_ah++; lws_context_unlock(context); /* ====================================> */ #endif _lws_change_pollfd(wsi, 0, LWS_POLLIN, &pa); lwsl_info("%s: did attach wsi %s: ah %p: count %d (on exit)\n", __func__, lws_wsi_tag(wsi), (void *)wsi->http.ah, pt->http.ah_count_in_use); reset: __lws_header_table_reset(wsi, autoservice); lws_pt_unlock(pt); #if defined(LWS_WITH_CLIENT) #if defined(LWS_ROLE_MQTT) connect_via_info2: #endif if (lwsi_role_client(wsi) && lwsi_state(wsi) == LRS_UNCONNECTED) if (!lws_http_client_connect_via_info2(wsi)) /* our client connect has failed, the wsi * has been closed */ return -1; #endif return 0; bail: lws_pt_unlock(pt); return 1; } int __lws_header_table_detach(struct lws *wsi, int autoservice) { struct lws_context *context = wsi->a.context; struct allocated_headers *ah = wsi->http.ah; struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; struct lws_pollargs pa; struct lws **pwsi, **pwsi_eligible; time_t now; __lws_remove_from_ah_waiting_list(wsi); if (!ah) return 0; lwsl_info("%s: %s: ah %p (tsi=%d, count = %d)\n", __func__, lws_wsi_tag(wsi), (void *)ah, wsi->tsi, pt->http.ah_count_in_use); /* we did have an ah attached */ time(&now); if (ah->assigned && now - ah->assigned > 3) { /* * we're detaching the ah, but it was held an * unreasonably long time */ lwsl_debug("%s: %s: ah held %ds, role/state 0x%lx 0x%x," "\n", __func__, lws_wsi_tag(wsi), (int)(now - ah->assigned), (unsigned long)lwsi_role(wsi), lwsi_state(wsi)); } ah->assigned = 0; /* if we think we're detaching one, there should be one in use */ assert(pt->http.ah_count_in_use > 0); /* and this specific one should have been in use */ assert(ah->in_use); memset(&wsi->http.ah, 0, sizeof(wsi->http.ah)); #if defined(LWS_WITH_PEER_LIMITS) if (ah->wsi) lws_peer_track_ah_detach(context, wsi->peer); #endif ah->wsi = NULL; /* no owner */ wsi->http.ah = NULL; pwsi = &pt->http.ah_wait_list; /* oh there is nobody on the waiting list... leave the ah unattached */ if (!*pwsi) goto nobody_usable_waiting; /* * at least one wsi on the same tsi is waiting, give it to oldest guy * who is allowed to take it (if any) */ lwsl_info("%s: pt wait list %s\n", __func__, lws_wsi_tag(*pwsi)); wsi = NULL; pwsi_eligible = NULL; while (*pwsi) { #if defined(LWS_WITH_PEER_LIMITS) /* are we willing to give this guy an ah? */ if (!lws_peer_confirm_ah_attach_ok(context, (*pwsi)->peer)) #endif { wsi = *pwsi; pwsi_eligible = pwsi; } pwsi = &(*pwsi)->http.ah_wait_list; } if (!wsi) /* everybody waiting already has too many ah... */ goto nobody_usable_waiting; lwsl_info("%s: transferring ah to last eligible wsi in wait list " "%s (wsistate 0x%lx)\n", __func__, lws_wsi_tag(wsi), (unsigned long)wsi->wsistate); wsi->http.ah = ah; ah->wsi = wsi; /* new owner */ __lws_header_table_reset(wsi, autoservice); #if defined(LWS_WITH_PEER_LIMITS) && (defined(LWS_ROLE_H1) || \ defined(LWS_ROLE_H2)) lws_context_lock(context, "ah detach"); /* <========================= */ if (wsi->peer) wsi->peer->http.count_ah++; lws_context_unlock(context); /* ====================================> */ #endif /* clients acquire the ah and then insert themselves in fds table... */ if (wsi->position_in_fds_table != LWS_NO_FDS_POS) { lwsl_info("%s: Enabling %s POLLIN\n", __func__, lws_wsi_tag(wsi)); /* he has been stuck waiting for an ah, but now his wait is * over, let him progress */ _lws_change_pollfd(wsi, 0, LWS_POLLIN, &pa); } /* point prev guy to next guy in list instead */ *pwsi_eligible = wsi->http.ah_wait_list; /* the guy who got one is out of the list */ wsi->http.ah_wait_list = NULL; pt->http.ah_wait_list_length--; #if defined(LWS_WITH_CLIENT) if (lwsi_role_client(wsi) && lwsi_state(wsi) == LRS_UNCONNECTED) { lws_pt_unlock(pt); if (!lws_http_client_connect_via_info2(wsi)) { /* our client connect has failed, the wsi * has been closed */ return -1; } return 0; } #endif assert(!!pt->http.ah_wait_list_length == !!(lws_intptr_t)pt->http.ah_wait_list); bail: lwsl_info("%s: %s: ah %p (tsi=%d, count = %d)\n", __func__, lws_wsi_tag(wsi), (void *)ah, pt->tid, pt->http.ah_count_in_use); return 0; nobody_usable_waiting: lwsl_info("%s: nobody usable waiting\n", __func__); _lws_destroy_ah(pt, ah); pt->http.ah_count_in_use--; goto bail; } int lws_header_table_detach(struct lws *wsi, int autoservice) { struct lws_context *context = wsi->a.context; struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; int n; lws_pt_lock(pt, __func__); n = __lws_header_table_detach(wsi, autoservice); lws_pt_unlock(pt); return n; } int lws_hdr_fragment_length(struct lws *wsi, enum lws_token_indexes h, int frag_idx) { int n; if (!wsi->http.ah) return 0; n = wsi->http.ah->frag_index[h]; if (!n) return 0; do { if (!frag_idx) return wsi->http.ah->frags[n].len; n = wsi->http.ah->frags[n].nfrag; } while (frag_idx-- && n); return 0; } int lws_hdr_total_length(struct lws *wsi, enum lws_token_indexes h) { int n; int len = 0; if (!wsi->http.ah) return 0; n = wsi->http.ah->frag_index[h]; if (!n) return 0; do { len += wsi->http.ah->frags[n].len; n = wsi->http.ah->frags[n].nfrag; if (n) len++; } while (n); return len; } int lws_hdr_copy_fragment(struct lws *wsi, char *dst, int len, enum lws_token_indexes h, int frag_idx) { int n = 0; int f; if (!wsi->http.ah) return -1; f = wsi->http.ah->frag_index[h]; if (!f) return -1; while (n < frag_idx) { f = wsi->http.ah->frags[f].nfrag; if (!f) return -1; n++; } if (wsi->http.ah->frags[f].len >= len) return -1; memcpy(dst, wsi->http.ah->data + wsi->http.ah->frags[f].offset, wsi->http.ah->frags[f].len); dst[wsi->http.ah->frags[f].len] = '\0'; return wsi->http.ah->frags[f].len; } int lws_hdr_copy(struct lws *wsi, char *dst, int len, enum lws_token_indexes h) { int toklen = lws_hdr_total_length(wsi, h), n, comma; *dst = '\0'; if (!toklen) return 0; if (toklen >= len) return -1; if (!wsi->http.ah) return -1; n = wsi->http.ah->frag_index[h]; if (!n) return 0; do { comma = (wsi->http.ah->frags[n].nfrag) ? 1 : 0; if (h == WSI_TOKEN_HTTP_URI_ARGS) lwsl_notice("%s: WSI_TOKEN_HTTP_URI_ARGS '%.*s'\n", __func__, (int)wsi->http.ah->frags[n].len, &wsi->http.ah->data[ wsi->http.ah->frags[n].offset]); if (wsi->http.ah->frags[n].len + comma >= len) { lwsl_notice("blowout len\n"); return -1; } strncpy(dst, &wsi->http.ah->data[wsi->http.ah->frags[n].offset], wsi->http.ah->frags[n].len); dst += wsi->http.ah->frags[n].len; len -= wsi->http.ah->frags[n].len; n = wsi->http.ah->frags[n].nfrag; /* * Note if you change this logic, take care about updating len * and make sure lws_hdr_total_length() gives the same resulting * length */ if (comma) { if (h == WSI_TOKEN_HTTP_COOKIE || h == WSI_TOKEN_HTTP_SET_COOKIE) *dst++ = ';'; else if (h == WSI_TOKEN_HTTP_URI_ARGS) *dst++ = '&'; else *dst++ = ','; len--; } } while (n); *dst = '\0'; if (h == WSI_TOKEN_HTTP_URI_ARGS) lwsl_err("%s: WSI_TOKEN_HTTP_URI_ARGS toklen %d\n", __func__, (int)toklen); return toklen; } #if defined(LWS_WITH_CUSTOM_HEADERS) int lws_hdr_custom_length(struct lws *wsi, const char *name, int nlen) { ah_data_idx_t ll; if (!wsi->http.ah || wsi->mux_substream) return -1; ll = wsi->http.ah->unk_ll_head; while (ll) { if (ll >= wsi->http.ah->data_length) return -1; if (nlen == lws_ser_ru16be( (uint8_t *)&wsi->http.ah->data[ll + UHO_NLEN]) && !strncmp(name, &wsi->http.ah->data[ll + UHO_NAME], (unsigned int)nlen)) return lws_ser_ru16be( (uint8_t *)&wsi->http.ah->data[ll + UHO_VLEN]); ll = lws_ser_ru32be((uint8_t *)&wsi->http.ah->data[ll + UHO_LL]); } return -1; } int lws_hdr_custom_copy(struct lws *wsi, char *dst, int len, const char *name, int nlen) { ah_data_idx_t ll; int n; if (!wsi->http.ah || wsi->mux_substream) return -1; *dst = '\0'; ll = wsi->http.ah->unk_ll_head; while (ll) { if (ll >= wsi->http.ah->data_length) return -1; if (nlen == lws_ser_ru16be( (uint8_t *)&wsi->http.ah->data[ll + UHO_NLEN]) && !strncmp(name, &wsi->http.ah->data[ll + UHO_NAME], (unsigned int)nlen)) { n = lws_ser_ru16be( (uint8_t *)&wsi->http.ah->data[ll + UHO_VLEN]); if (n + 1 > len) return -1; strncpy(dst, &wsi->http.ah->data[ll + UHO_NAME + (unsigned int)nlen], (unsigned int)n); dst[n] = '\0'; return n; } ll = lws_ser_ru32be((uint8_t *)&wsi->http.ah->data[ll + UHO_LL]); } return -1; } int lws_hdr_custom_name_foreach(struct lws *wsi, lws_hdr_custom_fe_cb_t cb, void *custom) { ah_data_idx_t ll; if (!wsi->http.ah || wsi->mux_substream) return -1; ll = wsi->http.ah->unk_ll_head; while (ll) { if (ll >= wsi->http.ah->data_length) return -1; cb(&wsi->http.ah->data[ll + UHO_NAME], lws_ser_ru16be((uint8_t *)&wsi->http.ah->data[ll + UHO_NLEN]), custom); ll = lws_ser_ru32be((uint8_t *)&wsi->http.ah->data[ll + UHO_LL]); } return 0; } #endif char *lws_hdr_simple_ptr(struct lws *wsi, enum lws_token_indexes h) { int n; if (!wsi->http.ah) return NULL; n = wsi->http.ah->frag_index[h]; if (!n) return NULL; return wsi->http.ah->data + wsi->http.ah->frags[n].offset; } static int LWS_WARN_UNUSED_RESULT lws_pos_in_bounds(struct lws *wsi) { if (!wsi->http.ah) return -1; if (wsi->http.ah->pos < (unsigned int)wsi->a.context->max_http_header_data) return 0; if ((int)wsi->http.ah->pos >= (int)wsi->a.context->max_http_header_data - 1) { lwsl_err("Ran out of header data space\n"); return 1; } /* * with these tests everywhere, it should never be able to exceed * the limit, only meet it */ lwsl_err("%s: pos %ld, limit %ld\n", __func__, (unsigned long)wsi->http.ah->pos, (unsigned long)wsi->a.context->max_http_header_data); assert(0); return 1; } int LWS_WARN_UNUSED_RESULT lws_hdr_simple_create(struct lws *wsi, enum lws_token_indexes h, const char *s) { if (!*s) { /* * If we get an empty string, then remove any entry for the * header */ wsi->http.ah->frag_index[h] = 0; return 0; } wsi->http.ah->nfrag++; if (wsi->http.ah->nfrag == LWS_ARRAY_SIZE(wsi->http.ah->frags)) { lwsl_warn("More hdr frags than we can deal with, dropping\n"); return -1; } wsi->http.ah->frag_index[h] = wsi->http.ah->nfrag; wsi->http.ah->frags[wsi->http.ah->nfrag].offset = wsi->http.ah->pos; wsi->http.ah->frags[wsi->http.ah->nfrag].len = 0; wsi->http.ah->frags[wsi->http.ah->nfrag].nfrag = 0; do { if (lws_pos_in_bounds(wsi)) return -1; wsi->http.ah->data[wsi->http.ah->pos++] = *s; if (*s) wsi->http.ah->frags[wsi->http.ah->nfrag].len++; } while (*s++); return 0; } static int LWS_WARN_UNUSED_RESULT issue_char(struct lws *wsi, unsigned char c) { unsigned short frag_len; if (lws_pos_in_bounds(wsi)) return -1; frag_len = wsi->http.ah->frags[wsi->http.ah->nfrag].len; /* * If we haven't hit the token limit, just copy the character into * the header */ if (!wsi->http.ah->current_token_limit || frag_len < wsi->http.ah->current_token_limit) { wsi->http.ah->data[wsi->http.ah->pos++] = (char)c; wsi->http.ah->frags[wsi->http.ah->nfrag].len++; return 0; } /* Insert a null character when we *hit* the limit: */ if (frag_len == wsi->http.ah->current_token_limit) { if (lws_pos_in_bounds(wsi)) return -1; wsi->http.ah->data[wsi->http.ah->pos++] = '\0'; lwsl_warn("header %li exceeds limit %ld\n", (long)wsi->http.ah->parser_state, (long)wsi->http.ah->current_token_limit); } return 1; } int lws_parse_urldecode(struct lws *wsi, uint8_t *_c) { struct allocated_headers *ah = wsi->http.ah; unsigned int enc = 0; uint8_t c = *_c; // lwsl_notice("ah->ups %d\n", ah->ups); /* * PRIORITY 1 * special URI processing... convert %xx */ switch (ah->ues) { case URIES_IDLE: if (c == '%') { ah->ues = URIES_SEEN_PERCENT; goto swallow; } break; case URIES_SEEN_PERCENT: if (char_to_hex((char)c) < 0) /* illegal post-% char */ goto forbid; ah->esc_stash = (char)c; ah->ues = URIES_SEEN_PERCENT_H1; goto swallow; case URIES_SEEN_PERCENT_H1: if (char_to_hex((char)c) < 0) /* illegal post-% char */ goto forbid; *_c = (uint8_t)(unsigned int)((char_to_hex(ah->esc_stash) << 4) | char_to_hex((char)c)); c = *_c; enc = 1; ah->ues = URIES_IDLE; break; } /* * PRIORITY 2 * special URI processing... * convert /.. or /... or /../ etc to / * convert /./ to / * convert // or /// etc to / * leave /.dir or whatever alone */ if (!c && (!ah->frag_index[WSI_TOKEN_HTTP_URI_ARGS] || !ah->post_literal_equal)) { /* * Since user code is typically going to parse the path using * NUL-terminated apis, it's too dangerous to allow NUL * injection here. * * It's allowed in the urlargs, because the apis to access * those only allow retreival with explicit length. */ lwsl_warn("%s: saw NUL outside of uri args\n", __func__); return -1; } switch (ah->ups) { case URIPS_IDLE: /* genuine delimiter */ if ((c == '&' || c == ';') && !enc) { if (issue_char(wsi, '\0') < 0) return -1; /* don't account for it */ wsi->http.ah->frags[wsi->http.ah->nfrag].len--; /* link to next fragment */ ah->frags[ah->nfrag].nfrag = (uint8_t)(ah->nfrag + 1); ah->nfrag++; if (ah->nfrag >= LWS_ARRAY_SIZE(ah->frags)) goto excessive; /* start next fragment after the & */ ah->post_literal_equal = 0; ah->frags[ah->nfrag].offset = ++ah->pos; ah->frags[ah->nfrag].len = 0; ah->frags[ah->nfrag].nfrag = 0; goto swallow; } /* uriencoded = in the name part, disallow */ if (c == '=' && enc && ah->frag_index[WSI_TOKEN_HTTP_URI_ARGS] && !ah->post_literal_equal) { c = '_'; *_c =c; } /* after the real =, we don't care how many = */ if (c == '=' && !enc) ah->post_literal_equal = 1; /* + to space */ if (c == '+' && !enc) { c = ' '; *_c = c; } /* issue the first / always */ if (c == '/' && !ah->frag_index[WSI_TOKEN_HTTP_URI_ARGS]) ah->ups = URIPS_SEEN_SLASH; break; case URIPS_SEEN_SLASH: /* swallow subsequent slashes */ if (c == '/') goto swallow; /* track and swallow the first . after / */ if (c == '.') { ah->ups = URIPS_SEEN_SLASH_DOT; goto swallow; } ah->ups = URIPS_IDLE; break; case URIPS_SEEN_SLASH_DOT: /* swallow second . */ if (c == '.') { ah->ups = URIPS_SEEN_SLASH_DOT_DOT; goto swallow; } /* change /./ to / */ if (c == '/') { ah->ups = URIPS_SEEN_SLASH; goto swallow; } /* it was like /.dir ... regurgitate the . */ ah->ups = URIPS_IDLE; if (issue_char(wsi, '.') < 0) return -1; break; case URIPS_SEEN_SLASH_DOT_DOT: /* /../ or /..[End of URI] --> backup to last / */ if (c == '/' || c == '?') { /* * back up one dir level if possible * safe against header fragmentation because * the method URI can only be in 1 fragment */ if (ah->frags[ah->nfrag].len > 2) { ah->pos--; ah->frags[ah->nfrag].len--; do { ah->pos--; ah->frags[ah->nfrag].len--; } while (ah->frags[ah->nfrag].len > 1 && ah->data[ah->pos] != '/'); } ah->ups = URIPS_SEEN_SLASH; if (ah->frags[ah->nfrag].len > 1) break; goto swallow; } /* /..[^/] ... regurgitate and allow */ if (issue_char(wsi, '.') < 0) return -1; if (issue_char(wsi, '.') < 0) return -1; ah->ups = URIPS_IDLE; break; } if (c == '?' && !enc && !ah->frag_index[WSI_TOKEN_HTTP_URI_ARGS]) { /* start of URI args */ if (ah->ues != URIES_IDLE) goto forbid; /* seal off uri header */ if (issue_char(wsi, '\0') < 0) return -1; /* don't account for it */ wsi->http.ah->frags[wsi->http.ah->nfrag].len--; /* move to using WSI_TOKEN_HTTP_URI_ARGS */ ah->nfrag++; if (ah->nfrag >= LWS_ARRAY_SIZE(ah->frags)) goto excessive; ah->frags[ah->nfrag].offset = ++ah->pos; ah->frags[ah->nfrag].len = 0; ah->frags[ah->nfrag].nfrag = 0; ah->post_literal_equal = 0; ah->frag_index[WSI_TOKEN_HTTP_URI_ARGS] = ah->nfrag; ah->ups = URIPS_IDLE; goto swallow; } return LPUR_CONTINUE; swallow: return LPUR_SWALLOW; forbid: return LPUR_FORBID; excessive: return LPUR_EXCESSIVE; } static const unsigned char methods[] = { WSI_TOKEN_GET_URI, WSI_TOKEN_POST_URI, #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) WSI_TOKEN_OPTIONS_URI, WSI_TOKEN_PUT_URI, WSI_TOKEN_PATCH_URI, WSI_TOKEN_DELETE_URI, #endif WSI_TOKEN_CONNECT, WSI_TOKEN_HEAD_URI, }; /* * possible returns:, -1 fail, 0 ok or 2, transition to raw */ lws_parser_return_t LWS_WARN_UNUSED_RESULT lws_parse(struct lws *wsi, unsigned char *buf, int *len) { struct allocated_headers *ah = wsi->http.ah; struct lws_context *context = wsi->a.context; unsigned int n, m; unsigned char c; int r, pos; assert(wsi->http.ah); do { (*len)--; c = *buf++; switch (ah->parser_state) { #if defined(LWS_WITH_CUSTOM_HEADERS) case WSI_TOKEN_UNKNOWN_VALUE_PART: if (c == '\r') break; if (c == '\n') { lws_ser_wu16be((uint8_t *)&ah->data[ah->unk_pos + 2], (uint16_t)(ah->pos - ah->unk_value_pos)); ah->parser_state = WSI_TOKEN_NAME_PART; ah->unk_pos = 0; ah->lextable_pos = 0; break; } /* trim leading whitespace */ if (ah->pos != ah->unk_value_pos || (c != ' ' && c != '\t')) { if (lws_pos_in_bounds(wsi)) return LPR_FAIL; ah->data[ah->pos++] = (char)c; } pos = ah->lextable_pos; break; #endif default: lwsl_parser("WSI_TOK_(%d) '%c'\n", ah->parser_state, c); /* collect into malloc'd buffers */ /* optional initial space swallow */ if (!ah->frags[ah->frag_index[ah->parser_state]].len && c == ' ') break; for (m = 0; m < LWS_ARRAY_SIZE(methods); m++) if (ah->parser_state == methods[m]) break; if (m == LWS_ARRAY_SIZE(methods)) /* it was not any of the methods */ goto check_eol; /* special URI processing... end at space */ if (c == ' ') { /* enforce starting with / */ if (!ah->frags[ah->nfrag].len) if (issue_char(wsi, '/') < 0) return LPR_FAIL; if (ah->ups == URIPS_SEEN_SLASH_DOT_DOT) { /* * back up one dir level if possible * safe against header fragmentation * because the method URI can only be * in 1 fragment */ if (ah->frags[ah->nfrag].len > 2) { ah->pos--; ah->frags[ah->nfrag].len--; do { ah->pos--; ah->frags[ah->nfrag].len--; } while (ah->frags[ah->nfrag].len > 1 && ah->data[ah->pos] != '/'); } } /* begin parsing HTTP version: */ if (issue_char(wsi, '\0') < 0) return LPR_FAIL; /* don't account for it */ wsi->http.ah->frags[wsi->http.ah->nfrag].len--; ah->parser_state = WSI_TOKEN_HTTP; goto start_fragment; } r = lws_parse_urldecode(wsi, &c); switch (r) { case LPUR_CONTINUE: break; case LPUR_SWALLOW: goto swallow; case LPUR_FORBID: goto forbid; case LPUR_EXCESSIVE: goto excessive; default: return LPR_FAIL; } check_eol: /* bail at EOL */ if (ah->parser_state != WSI_TOKEN_CHALLENGE && (c == '\x0d' || c == '\x0a')) { if (ah->ues != URIES_IDLE) goto forbid; if (c == '\x0a') { /* broken peer */ ah->parser_state = WSI_TOKEN_NAME_PART; ah->unk_pos = 0; ah->lextable_pos = 0; } else ah->parser_state = WSI_TOKEN_SKIPPING_SAW_CR; c = '\0'; lwsl_parser("*\n"); } n = (unsigned int)issue_char(wsi, c); if ((int)n < 0) return LPR_FAIL; if (n > 0) ah->parser_state = WSI_TOKEN_SKIPPING; else { /* * Explicit zeroes are legal in URI ARGS. * They can only exist as a safety terminator * after the valid part of the token contents * for other types. */ if (!c && ah->parser_state != WSI_TOKEN_HTTP_URI_ARGS) /* don't account for safety terminator */ wsi->http.ah->frags[wsi->http.ah->nfrag].len--; } swallow: /* per-protocol end of headers management */ if (ah->parser_state == WSI_TOKEN_CHALLENGE) goto set_parsing_complete; break; /* collecting and checking a name part */ case WSI_TOKEN_NAME_PART: lwsl_parser("WSI_TOKEN_NAME_PART '%c' 0x%02X " "(role=0x%lx) " "wsi->lextable_pos=%d\n", c, c, (unsigned long)lwsi_role(wsi), ah->lextable_pos); if (!ah->unk_pos && c == '\x0a') /* broken peer */ goto set_parsing_complete; if (c >= 'A' && c <= 'Z') c = (unsigned char)(c + 'a' - 'A'); /* * ...in case it's an unknown header, speculatively * store it as the name comes in. If we recognize it as * a known header, we'll snip this. */ if (!wsi->mux_substream && !ah->unk_pos) { ah->unk_pos = ah->pos; #if defined(LWS_WITH_CUSTOM_HEADERS) /* * Prepare new unknown header linked-list entry * * - 16-bit BE: name part length * - 16-bit BE: value part length * - 32-bit BE: data offset of next, or 0 */ for (n = 0; n < 8; n++) if (!lws_pos_in_bounds(wsi)) ah->data[ah->pos++] = 0; #endif } if (lws_pos_in_bounds(wsi)) return LPR_FAIL; ah->data[ah->pos++] = (char)c; pos = ah->lextable_pos; #if defined(LWS_WITH_CUSTOM_HEADERS) if (!wsi->mux_substream && pos < 0 && c == ':') { #if defined(_DEBUG) char dotstar[64]; int uhlen; #endif /* * process unknown headers * * register us in the unknown hdr ll */ if (!ah->unk_ll_head) ah->unk_ll_head = ah->unk_pos; if (ah->unk_ll_tail) lws_ser_wu32be( (uint8_t *)&ah->data[ah->unk_ll_tail + UHO_LL], ah->unk_pos); ah->unk_ll_tail = ah->unk_pos; #if defined(_DEBUG) uhlen = (int)(ah->pos - (ah->unk_pos + UHO_NAME)); lws_strnncpy(dotstar, &ah->data[ah->unk_pos + UHO_NAME], uhlen, sizeof(dotstar)); lwsl_debug("%s: unk header %d '%s'\n", __func__, ah->pos - (ah->unk_pos + UHO_NAME), dotstar); #endif /* set the unknown header name part length */ lws_ser_wu16be((uint8_t *)&ah->data[ah->unk_pos], (uint16_t)((ah->pos - ah->unk_pos) - UHO_NAME)); ah->unk_value_pos = ah->pos; /* * collect whatever's coming for the unknown header * argument until the next CRLF */ ah->parser_state = WSI_TOKEN_UNKNOWN_VALUE_PART; break; } #endif if (pos < 0) break; while (1) { if (lextable_h1[pos] & (1 << 7)) { /* 1-byte, fail on mismatch */ if ((lextable_h1[pos] & 0x7f) != c) { nope: ah->lextable_pos = -1; break; } /* fall thru */ pos++; if (lextable_h1[pos] == FAIL_CHAR) goto nope; ah->lextable_pos = (int16_t)pos; break; } if (lextable_h1[pos] == FAIL_CHAR) goto nope; /* b7 = 0, end or 3-byte */ if (lextable_h1[pos] < FAIL_CHAR) { if (!wsi->mux_substream) { /* * We hit a terminal marker, so * we recognized this header... * drop the speculative name * part storage */ ah->pos = ah->unk_pos; ah->unk_pos = 0; } ah->lextable_pos = (int16_t)pos; break; } if (lextable_h1[pos] == c) { /* goto */ ah->lextable_pos = (int16_t)(pos + (lextable_h1[pos + 1]) + (lextable_h1[pos + 2] << 8)); break; } /* fall thru goto */ pos += 3; /* continue */ } /* * If it's h1, server needs to be on the look out for * unknown methods... */ if (ah->lextable_pos < 0 && lwsi_role_h1(wsi) && lwsi_role_server(wsi)) { /* * this is not a header we know about... did * we get a valid method (GET, POST etc) * already, or is this the bogus method? */ for (m = 0; m < LWS_ARRAY_SIZE(methods); m++) if (ah->frag_index[methods[m]]) { /* * already had the method */ #if !defined(LWS_WITH_CUSTOM_HEADERS) ah->parser_state = WSI_TOKEN_SKIPPING; #endif if (wsi->mux_substream) ah->parser_state = WSI_TOKEN_SKIPPING; break; } if (m != LWS_ARRAY_SIZE(methods)) { #if defined(LWS_WITH_CUSTOM_HEADERS) /* * We have the method, this is just an * unknown header then */ if (!wsi->mux_substream) goto unknown_hdr; else break; #else break; #endif } /* * ...it's an unknown http method from a client * in fact, it cannot be valid http. * * Are we set up to transition to another role * in these cases? */ if (lws_check_opt(wsi->a.vhost->options, LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG)) { lwsl_notice("%s: http fail fallback\n", __func__); /* transition to other role */ return LPR_DO_FALLBACK; } lwsl_info("Unknown method - dropping\n"); goto forbid; } if (ah->lextable_pos < 0) { /* * It's not a header that lws knows about... */ #if defined(LWS_WITH_CUSTOM_HEADERS) if (!wsi->mux_substream) goto unknown_hdr; #endif /* * ...otherwise for a client, let him ignore * unknown headers coming from the server */ ah->parser_state = WSI_TOKEN_SKIPPING; break; } if (lextable_h1[ah->lextable_pos] < FAIL_CHAR) { /* terminal state */ n = ((unsigned int)lextable_h1[ah->lextable_pos] << 8) | lextable_h1[ah->lextable_pos + 1]; lwsl_parser("known hdr %d\n", n); for (m = 0; m < LWS_ARRAY_SIZE(methods); m++) if (n == methods[m] && ah->frag_index[methods[m]]) { lwsl_warn("Duplicated method\n"); return LPR_FAIL; } if (!wsi->mux_substream) { /* * Whether we are collecting unknown names or not, * if we matched an internal header we can dispense * with the header name part we were keeping */ ah->pos = ah->unk_pos; ah->unk_pos = 0; } #if defined(LWS_ROLE_WS) /* * WSORIGIN is protocol equiv to ORIGIN, * JWebSocket likes to send it, map to ORIGIN */ if (n == WSI_TOKEN_SWORIGIN) n = WSI_TOKEN_ORIGIN; #endif ah->parser_state = (uint8_t) (WSI_TOKEN_GET_URI + n); ah->ups = URIPS_IDLE; if (context->token_limits) ah->current_token_limit = context-> token_limits->token_limit[ ah->parser_state]; else ah->current_token_limit = wsi->a.context->max_http_header_data; if (ah->parser_state == WSI_TOKEN_CHALLENGE) goto set_parsing_complete; goto start_fragment; } break; #if defined(LWS_WITH_CUSTOM_HEADERS) unknown_hdr: //ah->parser_state = WSI_TOKEN_SKIPPING; //break; if (!wsi->mux_substream) break; #endif start_fragment: ah->nfrag++; excessive: if (ah->nfrag == LWS_ARRAY_SIZE(ah->frags)) { lwsl_warn("More hdr frags than we can deal with\n"); return LPR_FAIL; } ah->frags[ah->nfrag].offset = ah->pos; ah->frags[ah->nfrag].len = 0; ah->frags[ah->nfrag].nfrag = 0; ah->frags[ah->nfrag].flags = 2; n = ah->frag_index[ah->parser_state]; if (!n) { /* first fragment */ ah->frag_index[ah->parser_state] = ah->nfrag; ah->hdr_token_idx = ah->parser_state; break; } /* continuation */ while (ah->frags[n].nfrag) n = ah->frags[n].nfrag; ah->frags[n].nfrag = ah->nfrag; if (issue_char(wsi, ' ') < 0) return LPR_FAIL; break; /* skipping arg part of a name we didn't recognize */ case WSI_TOKEN_SKIPPING: lwsl_parser("WSI_TOKEN_SKIPPING '%c'\n", c); if (c == '\x0a') { /* broken peer */ ah->parser_state = WSI_TOKEN_NAME_PART; ah->unk_pos = 0; ah->lextable_pos = 0; } if (c == '\x0d') ah->parser_state = WSI_TOKEN_SKIPPING_SAW_CR; break; case WSI_TOKEN_SKIPPING_SAW_CR: lwsl_parser("WSI_TOKEN_SKIPPING_SAW_CR '%c'\n", c); if (ah->ues != URIES_IDLE) goto forbid; if (c == '\x0a') { ah->parser_state = WSI_TOKEN_NAME_PART; ah->unk_pos = 0; ah->lextable_pos = 0; } else ah->parser_state = WSI_TOKEN_SKIPPING; break; /* we're done, ignore anything else */ case WSI_PARSING_COMPLETE: lwsl_parser("WSI_PARSING_COMPLETE '%c'\n", c); break; } } while (*len); return LPR_OK; set_parsing_complete: if (ah->ues != URIES_IDLE) goto forbid; if (lws_hdr_total_length(wsi, WSI_TOKEN_UPGRADE)) { #if defined(LWS_ROLE_WS) const char *pv = lws_hdr_simple_ptr(wsi, WSI_TOKEN_VERSION); if (pv) wsi->rx_frame_type = (char)atoi(pv); lwsl_parser("v%02d hdrs done\n", wsi->rx_frame_type); #endif } ah->parser_state = WSI_PARSING_COMPLETE; wsi->hdr_parsing_completed = 1; return LPR_OK; forbid: lwsl_info(" forbidding on uri sanitation\n"); #if defined(LWS_WITH_SERVER) lws_return_http_status(wsi, HTTP_STATUS_FORBIDDEN, NULL); #endif return LPR_FORBIDDEN; } int lws_http_cookie_get(struct lws *wsi, const char *name, char *buf, size_t *max_len) { size_t max = *max_len, bl = strlen(name); char *p, *bo = buf; int n; n = lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_COOKIE); if ((unsigned int)n < bl + 1) return 1; /* * This can come to us two ways, in ah fragments (h2) or as a single * semicolon-delimited string (h1) */ #if defined(LWS_ROLE_H2) if (lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_COLON_METHOD)) { /* * The h2 way... */ int f = wsi->http.ah->frag_index[WSI_TOKEN_HTTP_COOKIE]; size_t fl; while (f) { p = wsi->http.ah->data + wsi->http.ah->frags[f].offset; fl = (size_t)wsi->http.ah->frags[f].len; if (fl >= bl + 1 && p[bl] == '=' && !memcmp(p, name, bl)) { fl -= bl + 1; if (max - 1 < fl) fl = max - 1; if (fl) memcpy(buf, p + bl + 1, fl); *max_len = fl; buf[fl] = '\0'; return 0; } f = wsi->http.ah->frags[f].nfrag; } return -1; } #endif /* * The h1 way... */ p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COOKIE); if (!p) return 1; p += bl; n -= (int)bl; while (n-- > 0) { if (*p == '=' && !memcmp(p - bl, name, (unsigned int)bl)) { p++; while (*p != ';' && n-- && max) { *buf++ = *p++; max--; } if (!max) return 2; *buf = '\0'; *max_len = lws_ptr_diff_size_t(buf, bo); return 0; } p++; } return 1; } #if defined(LWS_WITH_JOSE) #define MAX_JWT_SIZE 1024 int lws_jwt_get_http_cookie_validate_jwt(struct lws *wsi, struct lws_jwt_sign_set_cookie *i, char *out, size_t *out_len) { char temp[MAX_JWT_SIZE * 2]; size_t cml = *out_len; const char *cp; /* first use out to hold the encoded JWT */ if (lws_http_cookie_get(wsi, i->cookie_name, out, out_len)) { lwsl_debug("%s: cookie %s not provided\n", __func__, i->cookie_name); return 1; } /* decode the JWT into temp */ if (lws_jwt_signed_validate(wsi->a.context, i->jwk, i->alg, out, *out_len, temp, sizeof(temp), out, &cml)) { lwsl_info("%s: jwt validation failed\n", __func__); return 1; } /* * Copy out the decoded JWT payload into out, overwriting the * original encoded JWT taken from the cookie (that has long ago been * translated into allocated buffers in the JOSE object) */ if (lws_jwt_token_sanity(out, cml, i->iss, i->aud, i->csrf_in, i->sub, sizeof(i->sub), &i->expiry_unix_time)) { lwsl_notice("%s: jwt sanity failed\n", __func__); return 1; } /* * If he's interested in his private JSON part, point him to that in * the args struct (it's pointing to the data in out */ cp = lws_json_simple_find(out, cml, "\"ext\":", &i->extra_json_len); if (cp) i->extra_json = cp; if (!cp) lwsl_notice("%s: no ext JWT payload\n", __func__); return 0; } int lws_jwt_sign_token_set_http_cookie(struct lws *wsi, const struct lws_jwt_sign_set_cookie *i, uint8_t **p, uint8_t *end) { char plain[MAX_JWT_SIZE + 1], temp[MAX_JWT_SIZE * 2], csrf[17]; size_t pl = sizeof(plain); unsigned long long ull; int n; /* * Create a 16-char random csrf token with the same lifetime as the JWT */ lws_hex_random(wsi->a.context, csrf, sizeof(csrf)); ull = lws_now_secs(); if (lws_jwt_sign_compact(wsi->a.context, i->jwk, i->alg, plain, &pl, temp, sizeof(temp), "{\"iss\":\"%s\",\"aud\":\"%s\"," "\"iat\":%llu,\"nbf\":%llu,\"exp\":%llu," "\"csrf\":\"%s\",\"sub\":\"%s\"%s%s%s}", i->iss, i->aud, ull, ull - 60, ull + i->expiry_unix_time, csrf, i->sub, i->extra_json ? ",\"ext\":{" : "", i->extra_json ? i->extra_json : "", i->extra_json ? "}" : "")) { lwsl_err("%s: failed to create JWT\n", __func__); return 1; } /* * There's no point the browser holding on to a JWT beyond the JWT's * expiry time, so set it to be the same. */ n = lws_snprintf(temp, sizeof(temp), "__Host-%s=%s;" "HttpOnly;" "Secure;" "SameSite=strict;" "Path=/;" "Max-Age=%lu", i->cookie_name, plain, i->expiry_unix_time); if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_SET_COOKIE, (uint8_t *)temp, n, p, end)) { lwsl_err("%s: failed to add JWT cookie header\n", __func__); return 1; } return 0; } #endif libwebsockets-4.3.5/lib/roles/http/private-lib-roles-http.h000066400000000000000000000212441476025525100237340ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * This is included from private-lib-core.h if either H1 or H2 roles are * enabled */ #if defined(LWS_WITH_HUBBUB) #include #include #endif #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) #include "private-lib-roles-http-compression.h" #endif #define lwsi_role_http(wsi) (lwsi_role_h1(wsi) || lwsi_role_h2(wsi)) enum http_version { HTTP_VERSION_1_0, HTTP_VERSION_1_1, HTTP_VERSION_2 }; enum http_conn_type { HTTP_CONNECTION_CLOSE, HTTP_CONNECTION_KEEP_ALIVE }; /* * This is totally opaque to code using the library. It's exported as a * forward-reference pointer-only declaration; the user can use the pointer with * other APIs to get information out of it. */ #if defined(LWS_PLAT_FREERTOS) typedef uint16_t ah_data_idx_t; #else typedef uint32_t ah_data_idx_t; #endif struct lws_fragments { ah_data_idx_t offset; uint16_t len; uint8_t nfrag; /* which ah->frag[] continues this content, or 0 */ uint8_t flags; /* only http2 cares */ }; #if defined(LWS_WITH_RANGES) enum range_states { LWSRS_NO_ACTIVE_RANGE, LWSRS_BYTES_EQ, LWSRS_FIRST, LWSRS_STARTING, LWSRS_ENDING, LWSRS_COMPLETED, LWSRS_SYNTAX, }; struct lws_range_parsing { unsigned long long start, end, extent, agg, budget; const char buf[128]; int pos; enum range_states state; char start_valid, end_valid, ctr, count_ranges, did_try, inside, send_ctr; }; int lws_ranges_init(struct lws *wsi, struct lws_range_parsing *rp, unsigned long long extent); int lws_ranges_next(struct lws_range_parsing *rp); void lws_ranges_reset(struct lws_range_parsing *rp); #endif #define LWS_HTTP_NO_KNOWN_HEADER 0xff /* * these are assigned from a pool held in the context. * Both client and server mode uses them for http header analysis */ struct allocated_headers { struct allocated_headers *next; /* linked list */ struct lws *wsi; /* owner */ char *data; /* prepared by context init to point to dedicated storage */ ah_data_idx_t data_length; /* * the randomly ordered fragments, indexed by frag_index and * lws_fragments->nfrag for continuation. */ struct lws_fragments frags[WSI_TOKEN_COUNT]; time_t assigned; /* * for each recognized token, frag_index says which frag[] his data * starts in (0 means the token did not appear) * the actual header data gets dumped as it comes in, into data[] */ uint8_t frag_index[WSI_TOKEN_COUNT]; #if defined(LWS_WITH_CLIENT) char initial_handshake_hash_base64[30]; #endif int hdr_token_idx; ah_data_idx_t pos; ah_data_idx_t http_response; ah_data_idx_t current_token_limit; ah_data_idx_t unk_pos; /* to undo speculative unknown header */ #if defined(LWS_WITH_CUSTOM_HEADERS) ah_data_idx_t unk_value_pos; ah_data_idx_t unk_ll_head; ah_data_idx_t unk_ll_tail; #endif int16_t lextable_pos; uint8_t in_use; uint8_t nfrag; char /*enum uri_path_states */ ups; char /*enum uri_esc_states */ ues; char esc_stash; char post_literal_equal; uint8_t /* enum lws_token_indexes */ parser_state; }; #if defined(LWS_WITH_HUBBUB) struct lws_rewrite { hubbub_parser *parser; hubbub_parser_optparams params; const char *from, *to; int from_len, to_len; unsigned char *p, *end; struct lws *wsi; }; static LWS_INLINE int hstrcmp(hubbub_string *s, const char *p, int len) { if ((int)s->len != len) return 1; return strncmp((const char *)s->ptr, p, len); } typedef hubbub_error (*hubbub_callback_t)(const hubbub_token *token, void *pw); LWS_EXTERN struct lws_rewrite * lws_rewrite_create(struct lws *wsi, hubbub_callback_t cb, const char *from, const char *to); LWS_EXTERN void lws_rewrite_destroy(struct lws_rewrite *r); LWS_EXTERN int lws_rewrite_parse(struct lws_rewrite *r, const unsigned char *in, int in_len); #endif struct lws_pt_role_http { struct allocated_headers *ah_list; struct lws *ah_wait_list; #ifdef LWS_WITH_CGI struct lws_cgi *cgi_list; #endif int ah_wait_list_length; uint32_t ah_pool_length; int ah_count_in_use; }; struct lws_peer_role_http { uint32_t count_ah; uint32_t total_ah; }; struct lws_vhost_role_http { #if defined(LWS_CLIENT_HTTP_PROXYING) char http_proxy_address[128]; #endif const struct lws_http_mount *mount_list; const char *error_document_404; #if defined(LWS_CLIENT_HTTP_PROXYING) unsigned int http_proxy_port; #endif }; #ifdef LWS_WITH_ACCESS_LOG struct lws_access_log { char *header_log; char *user_agent; char *referrer; unsigned long sent; int response; }; #endif #define LWS_HTTP_CHUNK_HDR_MAX_SIZE (6 + 2) /* 6 hex digits and then CRLF */ #define LWS_HTTP_CHUNK_TRL_MAX_SIZE (2 + 5) /* CRLF, then maybe 0 CRLF CRLF */ struct _lws_http_mode_related { struct lws *new_wsi_list; unsigned char *pending_return_headers; size_t pending_return_headers_len; size_t prh_content_length; #if defined(LWS_WITH_HTTP_PROXY) struct lws_rewrite *rw; struct lws_buflist *buflist_post_body; #endif struct allocated_headers *ah; struct lws *ah_wait_list; unsigned long writeable_len; #if defined(LWS_WITH_FILE_OPS) lws_filepos_t filepos; lws_filepos_t filelen; lws_fop_fd_t fop_fd; #endif #if defined(LWS_WITH_CLIENT) char multipart_boundary[16]; #endif #if defined(LWS_WITH_RANGES) struct lws_range_parsing range; char multipart_content_type[64]; #endif #ifdef LWS_WITH_ACCESS_LOG struct lws_access_log access_log; #endif #if defined(LWS_WITH_SERVER) unsigned int response_code; #endif #ifdef LWS_WITH_CGI struct lws_cgi *cgi; /* wsi being cgi stream have one of these */ #endif #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) struct lws_compression_support *lcs; lws_comp_ctx_t comp_ctx; unsigned char comp_accept_mask; #endif enum http_version request_version; enum http_conn_type conn_type; lws_filepos_t tx_content_length; lws_filepos_t tx_content_remain; lws_filepos_t rx_content_length; lws_filepos_t rx_content_remain; #if defined(LWS_WITH_HTTP_PROXY) unsigned int perform_rewrite:1; unsigned int proxy_clientside:1; unsigned int proxy_parent_chunked:1; #endif unsigned int deferred_transaction_completed:1; unsigned int content_length_explicitly_zero:1; unsigned int content_length_given:1; unsigned int did_stream_close:1; unsigned int multipart:1; unsigned int cgi_transaction_complete:1; unsigned int multipart_issue_boundary:1; }; #if defined(LWS_WITH_CLIENT) enum lws_chunk_parser { ELCP_HEX, ELCP_CR, ELCP_CONTENT, ELCP_POST_CR, ELCP_POST_LF, ELCP_TRAILER_CR, ELCP_TRAILER_LF }; #endif enum lws_parse_urldecode_results { LPUR_CONTINUE, LPUR_SWALLOW, LPUR_FORBID, LPUR_EXCESSIVE, }; enum lws_check_basic_auth_results { LCBA_CONTINUE, LCBA_FAILED_AUTH, LCBA_END_TRANSACTION, }; enum lws_check_basic_auth_results lws_check_basic_auth(struct lws *wsi, const char *basic_auth_login_file, unsigned int auth_mode); int lws_unauthorised_basic_auth(struct lws *wsi); int lws_read_h1(struct lws *wsi, unsigned char *buf, lws_filepos_t len); void _lws_header_table_reset(struct allocated_headers *ah); LWS_EXTERN int _lws_destroy_ah(struct lws_context_per_thread *pt, struct allocated_headers *ah); int lws_http_proxy_start(struct lws *wsi, const struct lws_http_mount *hit, char *uri_ptr, char ws); void lws_sul_http_ah_lifecheck(lws_sorted_usec_list_t *sul); uint8_t * lws_http_multipart_headers(struct lws *wsi, uint8_t *p); int lws_http_string_to_known_header(const char *s, size_t slen); int lws_http_date_render_from_unix(char *buf, size_t len, const time_t *t); int lws_http_date_parse_unix(const char *b, size_t len, time_t *t); enum { CCTLS_RETURN_ERROR = -1, CCTLS_RETURN_DONE = 0, CCTLS_RETURN_RETRY = 1, }; int lws_client_create_tls(struct lws *wsi, const char **pcce, int do_c1); libwebsockets-4.3.5/lib/roles/http/server/000077500000000000000000000000001476025525100205515ustar00rootroot00000000000000libwebsockets-4.3.5/lib/roles/http/server/access-log.c000066400000000000000000000134321476025525100227400ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" /* * Produce Apache-compatible log string for wsi, like this: * * 2.31.234.19 - - [27/Mar/2016:03:22:44 +0800] * "GET /aep-screen.png HTTP/1.1" * 200 152987 "https://libwebsockets.org/index.html" * "Mozilla/5.0 (Macint... Chrome/49.0.2623.87 Safari/537.36" * */ extern const char * const method_names[]; static const char * const hver[] = { "HTTP/1.0", "HTTP/1.1", "HTTP/2" }; void lws_prepare_access_log_info(struct lws *wsi, char *uri_ptr, int uri_len, int meth) { char da[64], uri[256], ta[64]; time_t t = time(NULL); struct lws *nwsi; const char *me; int l = 256, m; struct tm *ptm = NULL; #if defined(LWS_HAVE_LOCALTIME_R) struct tm tm; #endif if (!wsi->a.vhost) return; /* only worry about preparing it if we store it */ if (wsi->a.vhost->log_fd == (int)LWS_INVALID_FILE) return; if (wsi->access_log_pending) lws_access_log(wsi); wsi->http.access_log.header_log = lws_malloc((unsigned int)l, "access log"); if (!wsi->http.access_log.header_log) return; #if defined(LWS_HAVE_LOCALTIME_R) ptm = localtime_r(&t, &tm); #else ptm = localtime(&t); #endif if (ptm) strftime(da, sizeof(da), "%d/%b/%Y:%H:%M:%S %z", ptm); else strcpy(da, "01/Jan/1970:00:00:00 +0000"); #if defined(LWS_ROLE_H2) if (wsi->mux_substream) me = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_METHOD); else #endif me = method_names[meth]; if (!me) me = "(null)"; m = uri_len; if (m > (int)sizeof(uri) - 1) m = sizeof(uri) - 1; strncpy(uri, uri_ptr, (unsigned int)m); uri[m] = '\0'; nwsi = lws_get_network_wsi(wsi); if (nwsi->sa46_peer.sa4.sin_family) lws_sa46_write_numeric_address(&nwsi->sa46_peer, ta, sizeof(ta)); else strncpy(ta, "unknown", sizeof(ta)); lws_snprintf(wsi->http.access_log.header_log, (size_t)l, "%s - - [%s] \"%s %s %s\"", ta, da, me, uri, hver[wsi->http.request_version]); //lwsl_notice("%s\n", wsi->http.access_log.header_log); l = lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_USER_AGENT); if (l) { wsi->http.access_log.user_agent = lws_malloc((unsigned int)l + 5, "access log"); if (!wsi->http.access_log.user_agent) { lwsl_err("OOM getting user agent\n"); lws_free_set_NULL(wsi->http.access_log.header_log); return; } wsi->http.access_log.user_agent[0] = '\0'; if (lws_hdr_copy(wsi, wsi->http.access_log.user_agent, l + 4, WSI_TOKEN_HTTP_USER_AGENT) >= 0) for (m = 0; m < l; m++) if (wsi->http.access_log.user_agent[m] == '\"') wsi->http.access_log.user_agent[m] = '\''; } l = lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_REFERER); if (l) { wsi->http.access_log.referrer = lws_malloc((unsigned int)l + 5, "referrer"); if (!wsi->http.access_log.referrer) { lwsl_err("OOM getting referrer\n"); lws_free_set_NULL(wsi->http.access_log.user_agent); lws_free_set_NULL(wsi->http.access_log.header_log); return; } wsi->http.access_log.referrer[0] = '\0'; if (lws_hdr_copy(wsi, wsi->http.access_log.referrer, l + 4, WSI_TOKEN_HTTP_REFERER) >= 0) for (m = 0; m < l; m++) if (wsi->http.access_log.referrer[m] == '\"') wsi->http.access_log.referrer[m] = '\''; } wsi->access_log_pending = 1; } int lws_access_log(struct lws *wsi) { char *p = wsi->http.access_log.user_agent, ass[512], *p1 = wsi->http.access_log.referrer; int l; if (!wsi->a.vhost) return 0; if (wsi->a.vhost->log_fd == (int)LWS_INVALID_FILE) return 0; if (!wsi->access_log_pending) return 0; if (!wsi->http.access_log.header_log) return 0; if (!p) p = ""; if (!p1) p1 = ""; /* * We do this in two parts to restrict an oversize referrer such that * we will always have space left to append an empty useragent, while * maintaining the structure of the log text */ l = lws_snprintf(ass, sizeof(ass) - 7, "%s %d %lu \"%s", wsi->http.access_log.header_log, wsi->http.access_log.response, wsi->http.access_log.sent, p1); if (strlen(p) > sizeof(ass) - 6 - (unsigned int)l) { p[sizeof(ass) - 6 - (unsigned int)l] = '\0'; l--; } l += lws_snprintf(ass + (unsigned int)l, sizeof(ass) - 1 - (unsigned int)l, "\" \"%s\"\n", p); ass[sizeof(ass) - 1] = '\0'; if ((int)write(wsi->a.vhost->log_fd, ass, (size_t)l) != l) lwsl_err("Failed to write log\n"); if (wsi->http.access_log.header_log) { lws_free(wsi->http.access_log.header_log); wsi->http.access_log.header_log = NULL; } if (wsi->http.access_log.user_agent) { lws_free(wsi->http.access_log.user_agent); wsi->http.access_log.user_agent = NULL; } if (wsi->http.access_log.referrer) { lws_free(wsi->http.access_log.referrer); wsi->http.access_log.referrer = NULL; } wsi->access_log_pending = 0; return 0; } libwebsockets-4.3.5/lib/roles/http/server/fops-zip.c000066400000000000000000000417071476025525100224750ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Original code used in this source file: * * https://github.com/PerBothner/DomTerm.git @912add15f3d0aec * * ./lws-term/io.c * ./lws-term/junzip.c * * Copyright (C) 2017 Per Bothner * * MIT License * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * ( copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * * Somewhat rewritten by AG */ #include "private-lib-core.h" #if defined(LWS_WITH_MINIZ) #include #else #include #endif /* * This code works with zip format containers which may have files compressed * with gzip deflate (type 8) or store uncompressed (type 0). * * Linux zip produces such zipfiles by default, eg * * $ zip ../myzip.zip file1 file2 file3 */ #define ZIP_COMPRESSION_METHOD_STORE 0 #define ZIP_COMPRESSION_METHOD_DEFLATE 8 typedef struct { lws_filepos_t filename_start; uint32_t crc32; uint32_t comp_size; uint32_t uncomp_size; uint32_t offset; uint32_t mod_time; uint16_t filename_len; uint16_t extra; uint16_t method; uint16_t file_com_len; } lws_fops_zip_hdr_t; typedef struct { struct lws_fop_fd fop_fd; /* MUST BE FIRST logical fop_fd into * file inside zip: fops_zip fops */ lws_fop_fd_t zip_fop_fd; /* logical fop fd on to zip file * itself: using platform fops */ lws_fops_zip_hdr_t hdr; z_stream inflate; lws_filepos_t content_start; lws_filepos_t exp_uncomp_pos; union { uint8_t trailer8[8]; uint32_t trailer32[2]; } u; uint8_t rbuf[128]; /* decompression chunk size */ int entry_count; unsigned int decompress:1; /* 0 = direct from file */ unsigned int add_gzip_container:1; } *lws_fops_zip_t; struct lws_plat_file_ops fops_zip; #define fop_fd_to_priv(FD) ((lws_fops_zip_t)(FD)) static const uint8_t hd[] = { 31, 139, 8, 0, 0, 0, 0, 0, 0, 3 }; enum { ZC_SIGNATURE = 0, ZC_VERSION_MADE_BY = 4, ZC_VERSION_NEEDED_TO_EXTRACT = 6, ZC_GENERAL_PURPOSE_BIT_FLAG = 8, ZC_COMPRESSION_METHOD = 10, ZC_LAST_MOD_FILE_TIME = 12, ZC_LAST_MOD_FILE_DATE = 14, ZC_CRC32 = 16, ZC_COMPRESSED_SIZE = 20, ZC_UNCOMPRESSED_SIZE = 24, ZC_FILE_NAME_LENGTH = 28, ZC_EXTRA_FIELD_LENGTH = 30, ZC_FILE_COMMENT_LENGTH = 32, ZC_DISK_NUMBER_START = 34, ZC_INTERNAL_FILE_ATTRIBUTES = 36, ZC_EXTERNAL_FILE_ATTRIBUTES = 38, ZC_REL_OFFSET_LOCAL_HEADER = 42, ZC_DIRECTORY_LENGTH = 46, ZE_SIGNATURE_OFFSET = 0, ZE_DESK_NUMBER = 4, ZE_CENTRAL_DIRECTORY_DISK_NUMBER = 6, ZE_NUM_ENTRIES_THIS_DISK = 8, ZE_NUM_ENTRIES = 10, ZE_CENTRAL_DIRECTORY_SIZE = 12, ZE_CENTRAL_DIR_OFFSET = 16, ZE_ZIP_COMMENT_LENGTH = 20, ZE_DIRECTORY_LENGTH = 22, ZL_REL_OFFSET_CONTENT = 28, ZL_HEADER_LENGTH = 30, LWS_FZ_ERR_SEEK_END_RECORD = 1, LWS_FZ_ERR_READ_END_RECORD, LWS_FZ_ERR_END_RECORD_MAGIC, LWS_FZ_ERR_END_RECORD_SANITY, LWS_FZ_ERR_CENTRAL_SEEK, LWS_FZ_ERR_CENTRAL_READ, LWS_FZ_ERR_CENTRAL_SANITY, LWS_FZ_ERR_NAME_TOO_LONG, LWS_FZ_ERR_NAME_SEEK, LWS_FZ_ERR_NAME_READ, LWS_FZ_ERR_CONTENT_SANITY, LWS_FZ_ERR_CONTENT_SEEK, LWS_FZ_ERR_SCAN_SEEK, LWS_FZ_ERR_NOT_FOUND, LWS_FZ_ERR_ZLIB_INIT, LWS_FZ_ERR_READ_CONTENT, LWS_FZ_ERR_SEEK_COMPRESSED, }; #define eff_size(_priv) (_priv->hdr.method == ZIP_COMPRESSION_METHOD_STORE ? \ _priv->hdr.uncomp_size : _priv->hdr.comp_size) static uint16_t get_u16(void *p) { const uint8_t *c = (const uint8_t *)p; return (uint16_t)((c[0] | (c[1] << 8))); } static uint32_t get_u32(void *p) { const uint8_t *c = (const uint8_t *)p; return (uint32_t)((c[0] | (c[1] << 8) | (c[2] << 16) | (c[3] << 24))); } int lws_fops_zip_scan(lws_fops_zip_t priv, const char *name, int len) { lws_filepos_t amount; uint8_t buf[96]; int i; if (lws_vfs_file_seek_end(priv->zip_fop_fd, -ZE_DIRECTORY_LENGTH) < 0) return LWS_FZ_ERR_SEEK_END_RECORD; if (lws_vfs_file_read(priv->zip_fop_fd, &amount, buf, ZE_DIRECTORY_LENGTH)) return LWS_FZ_ERR_READ_END_RECORD; if (amount != ZE_DIRECTORY_LENGTH) return LWS_FZ_ERR_READ_END_RECORD; /* * We require the zip to have the last record right at the end * Linux zip always does this if no zip comment. */ if (buf[0] != 'P' || buf[1] != 'K' || buf[2] != 5 || buf[3] != 6) return LWS_FZ_ERR_END_RECORD_MAGIC; i = get_u16(buf + ZE_NUM_ENTRIES); if (get_u16(buf + ZE_DESK_NUMBER) || get_u16(buf + ZE_CENTRAL_DIRECTORY_DISK_NUMBER) || i != get_u16(buf + ZE_NUM_ENTRIES_THIS_DISK)) return LWS_FZ_ERR_END_RECORD_SANITY; /* end record is OK... look for our file in the central dir */ if (lws_vfs_file_seek_set(priv->zip_fop_fd, get_u32(buf + ZE_CENTRAL_DIR_OFFSET)) < 0) return LWS_FZ_ERR_CENTRAL_SEEK; while (i--) { priv->content_start = lws_vfs_tell(priv->zip_fop_fd); if (lws_vfs_file_read(priv->zip_fop_fd, &amount, buf, ZC_DIRECTORY_LENGTH)) return LWS_FZ_ERR_CENTRAL_READ; if (amount != ZC_DIRECTORY_LENGTH) return LWS_FZ_ERR_CENTRAL_READ; if (get_u32(buf + ZC_SIGNATURE) != 0x02014B50) return LWS_FZ_ERR_CENTRAL_SANITY; lwsl_debug("cstart 0x%lx\n", (unsigned long)priv->content_start); priv->hdr.filename_len = get_u16(buf + ZC_FILE_NAME_LENGTH); priv->hdr.extra = get_u16(buf + ZC_EXTRA_FIELD_LENGTH); priv->hdr.filename_start = lws_vfs_tell(priv->zip_fop_fd); priv->hdr.method = get_u16(buf + ZC_COMPRESSION_METHOD); priv->hdr.crc32 = get_u32(buf + ZC_CRC32); priv->hdr.comp_size = get_u32(buf + ZC_COMPRESSED_SIZE); priv->hdr.uncomp_size = get_u32(buf + ZC_UNCOMPRESSED_SIZE); priv->hdr.offset = get_u32(buf + ZC_REL_OFFSET_LOCAL_HEADER); priv->hdr.mod_time = get_u32(buf + ZC_LAST_MOD_FILE_TIME); priv->hdr.file_com_len = get_u16(buf + ZC_FILE_COMMENT_LENGTH); if (priv->hdr.filename_len != len) goto next; if (len >= (int)sizeof(buf) - 1) return LWS_FZ_ERR_NAME_TOO_LONG; if (priv->zip_fop_fd->fops->LWS_FOP_READ(priv->zip_fop_fd, &amount, buf, (unsigned int)len)) return LWS_FZ_ERR_NAME_READ; if ((int)amount != len) return LWS_FZ_ERR_NAME_READ; buf[len] = '\0'; lwsl_debug("check %s vs %s\n", buf, name); if (strcmp((const char *)buf, name)) goto next; /* we found a match */ if (lws_vfs_file_seek_set(priv->zip_fop_fd, priv->hdr.offset) < 0) return LWS_FZ_ERR_NAME_SEEK; if (priv->zip_fop_fd->fops->LWS_FOP_READ(priv->zip_fop_fd, &amount, buf, ZL_HEADER_LENGTH)) return LWS_FZ_ERR_NAME_READ; if (amount != ZL_HEADER_LENGTH) return LWS_FZ_ERR_NAME_READ; priv->content_start = priv->hdr.offset + ZL_HEADER_LENGTH + priv->hdr.filename_len + get_u16(buf + ZL_REL_OFFSET_CONTENT); lwsl_debug("content supposed to start at 0x%lx\n", (unsigned long)priv->content_start); if (priv->content_start > priv->zip_fop_fd->len) return LWS_FZ_ERR_CONTENT_SANITY; if (lws_vfs_file_seek_set(priv->zip_fop_fd, (lws_fileofs_t)priv->content_start) < 0) return LWS_FZ_ERR_CONTENT_SEEK; /* we are aligned at the start of the content */ priv->exp_uncomp_pos = 0; return 0; next: if (i && lws_vfs_file_seek_set(priv->zip_fop_fd, (lws_fileofs_t)priv->content_start + (ZC_DIRECTORY_LENGTH + priv->hdr.filename_len + priv->hdr.extra + priv->hdr.file_com_len)) < 0) return LWS_FZ_ERR_SCAN_SEEK; } return LWS_FZ_ERR_NOT_FOUND; } static int lws_fops_zip_reset_inflate(lws_fops_zip_t priv) { if (priv->decompress) inflateEnd(&priv->inflate); priv->inflate.zalloc = Z_NULL; priv->inflate.zfree = Z_NULL; priv->inflate.opaque = Z_NULL; priv->inflate.avail_in = 0; priv->inflate.next_in = Z_NULL; if (inflateInit2(&priv->inflate, -MAX_WBITS) != Z_OK) { lwsl_err("inflate init failed\n"); return LWS_FZ_ERR_ZLIB_INIT; } if (lws_vfs_file_seek_set(priv->zip_fop_fd, (lws_fileofs_t)priv->content_start) < 0) return LWS_FZ_ERR_CONTENT_SEEK; priv->exp_uncomp_pos = 0; return 0; } static lws_fop_fd_t lws_fops_zip_open(const struct lws_plat_file_ops *fops, const char *vfs_path, const char *vpath, lws_fop_flags_t *flags) { lws_fop_flags_t local_flags = 0; lws_fops_zip_t priv; char rp[192]; int m; /* * vpath points at the / after the fops signature in vfs_path, eg * with a vfs_path "/var/www/docs/manual.zip/index.html", vpath * will come pointing at "/index.html" */ priv = lws_zalloc(sizeof(*priv), "fops_zip priv"); if (!priv) return NULL; priv->fop_fd.fops = &fops_zip; m = sizeof(rp) - 1; if ((vpath - vfs_path - 1) < m) m = lws_ptr_diff(vpath, vfs_path) - 1; lws_strncpy(rp, vfs_path, (unsigned int)m + 1); /* open the zip file itself using the incoming fops, not fops_zip */ priv->zip_fop_fd = fops->LWS_FOP_OPEN(fops, rp, NULL, &local_flags); if (!priv->zip_fop_fd) { lwsl_err("%s: unable to open zip %s\n", __func__, rp); goto bail1; } if (*vpath == '/') vpath++; m = lws_fops_zip_scan(priv, vpath, (int)strlen(vpath)); if (m) { lwsl_err("unable to find record matching '%s' %d\n", vpath, m); goto bail2; } /* the directory metadata tells us modification time, so pass it on */ priv->fop_fd.mod_time = priv->hdr.mod_time; *flags |= LWS_FOP_FLAG_MOD_TIME_VALID | LWS_FOP_FLAG_VIRTUAL; priv->fop_fd.flags = *flags; /* The zip fop_fd is left pointing at the start of the content. * * 1) Content could be uncompressed (STORE), and we can always serve * that directly * * 2) Content could be compressed (GZIP), and the client can handle * receiving GZIP... we can wrap it in a GZIP header and trailer * and serve the content part directly. The flag indicating we * are providing GZIP directly is set so lws will send the right * headers. * * 3) Content could be compressed (GZIP) but the client can't handle * receiving GZIP... we can decompress it and serve as it is * inflated piecemeal. * * 4) Content may be compressed some unknown way... fail * */ if (priv->hdr.method == ZIP_COMPRESSION_METHOD_STORE) { /* * it is stored uncompressed, leave it indicated as * uncompressed, and just serve it from inside the * zip with no gzip container; */ lwsl_info("direct zip serving (stored)\n"); priv->fop_fd.len = priv->hdr.uncomp_size; return &priv->fop_fd; } if ((*flags & LWS_FOP_FLAG_COMPR_ACCEPTABLE_GZIP) && priv->hdr.method == ZIP_COMPRESSION_METHOD_DEFLATE) { /* * We can serve the gzipped file contents directly as gzip * from inside the zip container; client says it is OK. * * To convert to standalone gzip, we have to add a 10-byte * constant header and a variable 8-byte trailer around the * content. * * The 8-byte trailer is prepared now and held in the priv. */ lwsl_info("direct zip serving (gzipped)\n"); priv->fop_fd.len = sizeof(hd) + priv->hdr.comp_size + sizeof(priv->u); if (lws_is_be()) { uint8_t *p = priv->u.trailer8; *p++ = (uint8_t)priv->hdr.crc32; *p++ = (uint8_t)(priv->hdr.crc32 >> 8); *p++ = (uint8_t)(priv->hdr.crc32 >> 16); *p++ = (uint8_t)(priv->hdr.crc32 >> 24); *p++ = (uint8_t)priv->hdr.uncomp_size; *p++ = (uint8_t)(priv->hdr.uncomp_size >> 8); *p++ = (uint8_t)(priv->hdr.uncomp_size >> 16); *p = (uint8_t)(priv->hdr.uncomp_size >> 24); } else { priv->u.trailer32[0] = priv->hdr.crc32; priv->u.trailer32[1] = priv->hdr.uncomp_size; } *flags |= LWS_FOP_FLAG_COMPR_IS_GZIP; priv->fop_fd.flags = *flags; priv->add_gzip_container = 1; return &priv->fop_fd; } if (priv->hdr.method == ZIP_COMPRESSION_METHOD_DEFLATE) { /* we must decompress it to serve it */ lwsl_info("decompressed zip serving\n"); priv->fop_fd.len = priv->hdr.uncomp_size; if (lws_fops_zip_reset_inflate(priv)) { lwsl_err("inflate init failed\n"); goto bail2; } priv->decompress = 1; return &priv->fop_fd; } /* we can't handle it ... */ lwsl_err("zipped file %s compressed in unknown way (%d)\n", vfs_path, priv->hdr.method); bail2: lws_vfs_file_close(&priv->zip_fop_fd); bail1: free(priv); return NULL; } /* ie, we are closing the fop_fd for the file inside the gzip */ static int lws_fops_zip_close(lws_fop_fd_t *fd) { lws_fops_zip_t priv = fop_fd_to_priv(*fd); if (priv->decompress) inflateEnd(&priv->inflate); lws_vfs_file_close(&priv->zip_fop_fd); /* close the gzip fop_fd */ free(priv); *fd = NULL; return 0; } static lws_fileofs_t lws_fops_zip_seek_cur(lws_fop_fd_t fd, lws_fileofs_t offset_from_cur_pos) { fd->pos = (lws_filepos_t)((lws_fileofs_t)fd->pos + offset_from_cur_pos); return (lws_fileofs_t)fd->pos; } static int lws_fops_zip_read(lws_fop_fd_t fd, lws_filepos_t *amount, uint8_t *buf, lws_filepos_t len) { lws_fops_zip_t priv = fop_fd_to_priv(fd); lws_filepos_t ramount, rlen, cur = lws_vfs_tell(fd); int ret; if (priv->decompress) { if (priv->exp_uncomp_pos != fd->pos) { /* * there has been a seek in the uncompressed fop_fd * we have to restart the decompression and loop eating * the decompressed data up to the seek point */ lwsl_info("seek in decompressed\n"); lws_fops_zip_reset_inflate(priv); while (priv->exp_uncomp_pos != fd->pos) { rlen = len; if (rlen > fd->pos - priv->exp_uncomp_pos) rlen = fd->pos - priv->exp_uncomp_pos; if (lws_fops_zip_read(fd, amount, buf, rlen)) return LWS_FZ_ERR_SEEK_COMPRESSED; } *amount = 0; } priv->inflate.avail_out = (unsigned int)len; priv->inflate.next_out = buf; spin: if (!priv->inflate.avail_in) { rlen = sizeof(priv->rbuf); if (rlen > eff_size(priv) - (cur - priv->content_start)) rlen = eff_size(priv) - (cur - priv->content_start); if (priv->zip_fop_fd->fops->LWS_FOP_READ( priv->zip_fop_fd, &ramount, priv->rbuf, rlen)) return LWS_FZ_ERR_READ_CONTENT; cur += ramount; priv->inflate.avail_in = (unsigned int)ramount; priv->inflate.next_in = priv->rbuf; } ret = inflate(&priv->inflate, Z_NO_FLUSH); if (ret == Z_STREAM_ERROR) return ret; switch (ret) { case Z_NEED_DICT: ret = Z_DATA_ERROR; /* fallthru */ case Z_DATA_ERROR: case Z_MEM_ERROR: return ret; } if (!priv->inflate.avail_in && priv->inflate.avail_out && cur != priv->content_start + priv->hdr.comp_size) goto spin; *amount = len - priv->inflate.avail_out; priv->exp_uncomp_pos += *amount; fd->pos += *amount; return 0; } if (priv->add_gzip_container) { lwsl_info("%s: gzip + container\n", __func__); *amount = 0; /* place the canned header at the start */ if (len && fd->pos < sizeof(hd)) { rlen = sizeof(hd) - fd->pos; if (rlen > len) rlen = len; /* provide stuff from canned header */ memcpy(buf, hd + fd->pos, (size_t)rlen); fd->pos += rlen; buf += rlen; len -= rlen; *amount += rlen; } /* serve gzipped data direct from zipfile */ if (len && fd->pos >= sizeof(hd) && fd->pos < priv->hdr.comp_size + sizeof(hd)) { rlen = priv->hdr.comp_size - (priv->zip_fop_fd->pos - priv->content_start); if (rlen > len) rlen = len; if (rlen && priv->zip_fop_fd->pos < (priv->hdr.comp_size + priv->content_start)) { if (lws_vfs_file_read(priv->zip_fop_fd, &ramount, buf, rlen)) return LWS_FZ_ERR_READ_CONTENT; *amount += ramount; fd->pos += ramount; // virtual pos buf += ramount; len -= ramount; } } /* place the prepared trailer at the end */ if (len && fd->pos >= priv->hdr.comp_size + sizeof(hd) && fd->pos < priv->hdr.comp_size + sizeof(hd) + sizeof(priv->u)) { cur = fd->pos - priv->hdr.comp_size - sizeof(hd); rlen = sizeof(priv->u) - cur; if (rlen > len) rlen = len; memcpy(buf, priv->u.trailer8 + cur, (size_t)rlen); *amount += rlen; fd->pos += rlen; } return 0; } lwsl_info("%s: store\n", __func__); if (len > eff_size(priv) - cur) len = eff_size(priv) - cur; if (priv->zip_fop_fd->fops->LWS_FOP_READ(priv->zip_fop_fd, amount, buf, len)) return LWS_FZ_ERR_READ_CONTENT; fd->pos += *amount; return 0; } struct lws_plat_file_ops fops_zip = { lws_fops_zip_open, lws_fops_zip_close, lws_fops_zip_seek_cur, lws_fops_zip_read, NULL, { { ".zip/", 5 }, { ".jar/", 5 }, { ".war/", 5 } }, NULL, }; libwebsockets-4.3.5/lib/roles/http/server/lejp-conf.c000066400000000000000000000664361476025525100226110ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #ifndef _WIN32 /* this is needed for Travis CI */ #include #endif #define ESC_INSTALL_DATADIR "_lws_ddir_" static const char * const paths_global[] = { "global.uid", "global.gid", "global.username", "global.groupname", "global.count-threads", "global.init-ssl", "global.server-string", "global.plugin-dir", "global.ws-pingpong-secs", /* deprecated */ "global.timeout-secs", "global.reject-service-keywords[].*", "global.reject-service-keywords[]", "global.default-alpn", "global.ip-limit-ah", "global.ip-limit-wsi", "global.rlimit-nofile", }; enum lejp_global_paths { LEJPGP_UID, LEJPGP_GID, LEJPGP_USERNAME, LEJPGP_GROUPNAME, LEJPGP_COUNT_THREADS, LWJPGP_INIT_SSL, LEJPGP_SERVER_STRING, LEJPGP_PLUGIN_DIR, LWJPGP_PINGPONG_SECS, LWJPGP_TIMEOUT_SECS, LWJPGP_REJECT_SERVICE_KEYWORDS_NAME, LWJPGP_REJECT_SERVICE_KEYWORDS, LWJPGP_DEFAULT_ALPN, LWJPGP_IP_LIMIT_AH, LWJPGP_IP_LIMIT_WSI, LWJPGP_FD_LIMIT_PT, }; static const char * const paths_vhosts[] = { "vhosts[]", "vhosts[].name", "vhosts[].port", "vhosts[].interface", "vhosts[].unix-socket", "vhosts[].unix-socket-perms", "vhosts[].sts", "vhosts[].host-ssl-key", "vhosts[].host-ssl-cert", "vhosts[].host-ssl-ca", "vhosts[].access-log", "vhosts[].mounts[].mountpoint", "vhosts[].mounts[].origin", "vhosts[].mounts[].protocol", "vhosts[].mounts[].default", "vhosts[].mounts[].auth-mask", "vhosts[].mounts[].cgi-timeout", "vhosts[].mounts[].cgi-env[].*", "vhosts[].mounts[].cgi-env[]", "vhosts[].mounts[].cache-max-age", "vhosts[].mounts[].cache-reuse", "vhosts[].mounts[].cache-revalidate", "vhosts[].mounts[].basic-auth", "vhosts[].mounts[].cache-intermediaries", "vhosts[].mounts[].extra-mimetypes.*", "vhosts[].mounts[].extra-mimetypes", "vhosts[].mounts[].interpret.*", "vhosts[].mounts[].interpret", "vhosts[].mounts[]", "vhosts[].ws-protocols[].*.*", "vhosts[].ws-protocols[].*", "vhosts[].ws-protocols[]", "vhosts[].keepalive_timeout", "vhosts[].enable-client-ssl", "vhosts[].ciphers", "vhosts[].ecdh-curve", "vhosts[].noipv6", "vhosts[].ipv6only", "vhosts[].ssl-option-set", "vhosts[].ssl-option-clear", "vhosts[].mounts[].pmo[].*", "vhosts[].mounts[].pmo[]", "vhosts[].headers[].*", "vhosts[].headers[]", "vhosts[].client-ssl-key", "vhosts[].client-ssl-cert", "vhosts[].client-ssl-ca", "vhosts[].client-ssl-ciphers", "vhosts[].onlyraw", "vhosts[].client-cert-required", "vhosts[].ignore-missing-cert", "vhosts[].error-document-404", "vhosts[].alpn", "vhosts[].fo-listen-queue", "vhosts[].ssl-client-option-set", "vhosts[].ssl-client-option-clear", "vhosts[].tls13-ciphers", "vhosts[].client-tls13-ciphers", "vhosts[].strict-host-check", "vhosts[].listen-accept-role", "vhosts[].listen-accept-protocol", "vhosts[].apply-listen-accept", /* deprecates "onlyraw" */ "vhosts[].fallback-listen-accept", "vhosts[].allow-non-tls", "vhosts[].redirect-http", "vhosts[].allow-http-on-https", "vhosts[].disable-no-protocol-ws-upgrades", "vhosts[].h2-half-closed-long-poll", }; enum lejp_vhost_paths { LEJPVP, LEJPVP_NAME, LEJPVP_PORT, LEJPVP_INTERFACE, LEJPVP_UNIXSKT, LEJPVP_UNIXSKT_PERMS, LEJPVP_STS, LEJPVP_HOST_SSL_KEY, LEJPVP_HOST_SSL_CERT, LEJPVP_HOST_SSL_CA, LEJPVP_ACCESS_LOG, LEJPVP_MOUNTPOINT, LEJPVP_ORIGIN, LEJPVP_MOUNT_PROTOCOL, LEJPVP_DEFAULT, LEJPVP_DEFAULT_AUTH_MASK, LEJPVP_CGI_TIMEOUT, LEJPVP_CGI_ENV, LEJPVP_CGI_ENV_base, LEJPVP_MOUNT_CACHE_MAX_AGE, LEJPVP_MOUNT_CACHE_REUSE, LEJPVP_MOUNT_CACHE_REVALIDATE, LEJPVP_MOUNT_BASIC_AUTH, LEJPVP_MOUNT_CACHE_INTERMEDIARIES, LEJPVP_MOUNT_EXTRA_MIMETYPES, LEJPVP_MOUNT_EXTRA_MIMETYPES_base, LEJPVP_MOUNT_INTERPRET, LEJPVP_MOUNT_INTERPRET_base, LEJPVP_MOUNTS, LEJPVP_PROTOCOL_NAME_OPT, LEJPVP_PROTOCOL_NAME, LEJPVP_PROTOCOL, LEJPVP_KEEPALIVE_TIMEOUT, LEJPVP_ENABLE_CLIENT_SSL, LEJPVP_CIPHERS, LEJPVP_ECDH_CURVE, LEJPVP_NOIPV6, LEJPVP_IPV6ONLY, LEJPVP_SSL_OPTION_SET, LEJPVP_SSL_OPTION_CLEAR, LEJPVP_PMO, LEJPVP_PM_baseO, LEJPVP_HEADERS_NAME, LEJPVP_HEADERS, LEJPVP_CLIENT_SSL_KEY, LEJPVP_CLIENT_SSL_CERT, LEJPVP_CLIENT_SSL_CA, LEJPVP_CLIENT_CIPHERS, LEJPVP_FLAG_ONLYRAW, LEJPVP_FLAG_CLIENT_CERT_REQUIRED, LEJPVP_IGNORE_MISSING_CERT, LEJPVP_ERROR_DOCUMENT_404, LEJPVP_ALPN, LWJPVP_FO_LISTEN_QUEUE, LEJPVP_SSL_CLIENT_OPTION_SET, LEJPVP_SSL_CLIENT_OPTION_CLEAR, LEJPVP_TLS13_CIPHERS, LEJPVP_CLIENT_TLS13_CIPHERS, LEJPVP_FLAG_STRICT_HOST_CHECK, LEJPVP_LISTEN_ACCEPT_ROLE, LEJPVP_LISTEN_ACCEPT_PROTOCOL, LEJPVP_FLAG_APPLY_LISTEN_ACCEPT, LEJPVP_FLAG_FALLBACK_LISTEN_ACCEPT, LEJPVP_FLAG_ALLOW_NON_TLS, LEJPVP_FLAG_REDIRECT_HTTP, LEJPVP_FLAG_ALLOW_HTTP_ON_HTTPS, LEJPVP_FLAG_DISABLE_NO_PROTOCOL_WS_UPGRADES, LEJPVP_FLAG_H2_HALF_CLOSED_LONG_POLL, }; #define MAX_PLUGIN_DIRS 10 struct jpargs { struct lws_context_creation_info *info; struct lws_context *context; const struct lws_protocols *protocols; const struct lws_protocols **pprotocols; const struct lws_extension *extensions; char *p, *end, valid; struct lws_http_mount *head, *last; struct lws_protocol_vhost_options *pvo; struct lws_protocol_vhost_options *pvo_em; struct lws_protocol_vhost_options *pvo_int; struct lws_http_mount m; const char **plugin_dirs; int count_plugin_dirs; unsigned int reject_ws_with_no_protocol:1; unsigned int enable_client_ssl:1; unsigned int fresh_mount:1; unsigned int any_vhosts:1; unsigned int chunk:1; }; static void * lwsws_align(struct jpargs *a) { if ((lws_intptr_t)(a->p) & 15) a->p += 16 - ((lws_intptr_t)(a->p) & 15); a->chunk = 0; return a->p; } static int arg_to_bool(const char *s) { static const char * const on[] = { "on", "yes", "true" }; int n = atoi(s); if (n) return 1; for (n = 0; n < (int)LWS_ARRAY_SIZE(on); n++) if (!strcasecmp(s, on[n])) return 1; return 0; } static void set_reset_flag(uint64_t *p, const char *state, uint64_t flag) { if (arg_to_bool(state)) *p |= flag; else *p &= ~(flag); } static signed char lejp_globals_cb(struct lejp_ctx *ctx, char reason) { struct jpargs *a = (struct jpargs *)ctx->user; struct lws_protocol_vhost_options *rej; int n; /* we only match on the prepared path strings */ if (!(reason & LEJP_FLAG_CB_IS_VALUE) || !ctx->path_match) return 0; /* this catches, eg, vhosts[].headers[].xxx */ if (reason == LEJPCB_VAL_STR_END && ctx->path_match == LWJPGP_REJECT_SERVICE_KEYWORDS_NAME + 1) { rej = lwsws_align(a); a->p += sizeof(*rej); n = lejp_get_wildcard(ctx, 0, a->p, lws_ptr_diff(a->end, a->p)); rej->next = a->info->reject_service_keywords; a->info->reject_service_keywords = rej; rej->name = a->p; lwsl_notice(" adding rej %s=%s\n", a->p, ctx->buf); a->p += n - 1; *(a->p++) = '\0'; rej->value = a->p; rej->options = NULL; goto dostring; } switch (ctx->path_match - 1) { case LEJPGP_UID: a->info->uid = (unsigned int)atoi(ctx->buf); return 0; case LEJPGP_GID: a->info->gid = (unsigned int)atoi(ctx->buf); return 0; case LEJPGP_USERNAME: a->info->username = a->p; break; case LEJPGP_GROUPNAME: a->info->groupname = a->p; break; case LEJPGP_COUNT_THREADS: a->info->count_threads = (unsigned int)atoi(ctx->buf); return 0; case LWJPGP_INIT_SSL: if (arg_to_bool(ctx->buf)) a->info->options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; return 0; case LEJPGP_SERVER_STRING: #if defined(LWS_WITH_SERVER) a->info->server_string = a->p; #endif break; case LEJPGP_PLUGIN_DIR: if (a->count_plugin_dirs == MAX_PLUGIN_DIRS - 1) { lwsl_err("Too many plugin dirs\n"); return -1; } a->plugin_dirs[a->count_plugin_dirs++] = a->p; break; case LWJPGP_PINGPONG_SECS: /* deprecated */ return 0; case LWJPGP_TIMEOUT_SECS: a->info->timeout_secs = (unsigned int)atoi(ctx->buf); return 0; #if defined(LWS_WITH_TLS) case LWJPGP_DEFAULT_ALPN: a->info->alpn = a->p; break; #endif #if defined(LWS_WITH_PEER_LIMITS) case LWJPGP_IP_LIMIT_AH: a->info->ip_limit_ah = (uint16_t)atoi(ctx->buf); return 0; case LWJPGP_IP_LIMIT_WSI: a->info->ip_limit_wsi = (uint16_t)atoi(ctx->buf); return 0; #endif case LWJPGP_FD_LIMIT_PT: a->info->rlimit_nofile = atoi(ctx->buf); return 0; default: return 0; } dostring: a->p += lws_snprintf(a->p, lws_ptr_diff_size_t(a->end, a->p), "%s", ctx->buf); *(a->p)++ = '\0'; return 0; } static signed char lejp_vhosts_cb(struct lejp_ctx *ctx, char reason) { struct jpargs *a = (struct jpargs *)ctx->user; struct lws_protocol_vhost_options *pvo, *mp_cgienv, *headers; struct lws_http_mount *m; char *p, *p1; int n; #if 0 lwsl_notice(" %d: %s (%d)\n", reason, ctx->path, ctx->path_match); for (n = 0; n < ctx->wildcount; n++) lwsl_notice(" %d\n", ctx->wild[n]); #endif if (reason == LEJPCB_OBJECT_START && ctx->path_match == LEJPVP + 1) { uint32_t i[4]; #if defined(LWS_WITH_SERVER) const char *ss; #endif /* set the defaults for this vhost */ a->reject_ws_with_no_protocol = 0; a->valid = 1; a->head = NULL; a->last = NULL; i[0] = a->info->count_threads; i[1] = a->info->options & ( LWS_SERVER_OPTION_SKIP_SERVER_CANONICAL_NAME | LWS_SERVER_OPTION_LIBUV | LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_UV_NO_SIGSEGV_SIGFPE_SPIN | LWS_SERVER_OPTION_LIBEVENT | LWS_SERVER_OPTION_LIBEV ); #if defined(LWS_WITH_SERVER) ss = a->info->server_string; #endif i[3] = a->info->timeout_secs; memset(a->info, 0, sizeof(*a->info)); a->info->count_threads = i[0]; a->info->options = i[1]; #if defined(LWS_WITH_SERVER) a->info->server_string = ss; #endif a->info->timeout_secs = i[3]; a->info->protocols = a->protocols; a->info->pprotocols = a->pprotocols; #if defined(LWS_ROLE_WS) a->info->extensions = a->extensions; #endif #if defined(LWS_WITH_TLS) #if defined(LWS_WITH_CLIENT) a->info->client_ssl_cipher_list = "ECDHE-ECDSA-AES256-GCM-SHA384:" "ECDHE-RSA-AES256-GCM-SHA384:" "DHE-RSA-AES256-GCM-SHA384:" "ECDHE-RSA-AES256-SHA384:" "HIGH:!aNULL:!eNULL:!EXPORT:" "!DES:!MD5:!PSK:!RC4:!HMAC_SHA1:" "!SHA1:!DHE-RSA-AES128-GCM-SHA256:" "!DHE-RSA-AES128-SHA256:" "!AES128-GCM-SHA256:" "!AES128-SHA256:" "!DHE-RSA-AES256-SHA256:" "!AES256-GCM-SHA384:" "!AES256-SHA256"; #endif #if defined(LWS_WITH_SERVER) a->info->ssl_cipher_list = "ECDHE-ECDSA-AES256-GCM-SHA384:" "ECDHE-RSA-AES256-GCM-SHA384:" "DHE-RSA-AES256-GCM-SHA384:" "ECDHE-RSA-AES256-SHA384:" "HIGH:!aNULL:!eNULL:!EXPORT:" "!DES:!MD5:!PSK:!RC4:!HMAC_SHA1:" "!SHA1:!DHE-RSA-AES128-GCM-SHA256:" "!DHE-RSA-AES128-SHA256:" "!AES128-GCM-SHA256:" "!AES128-SHA256:" "!DHE-RSA-AES256-SHA256:" "!AES256-GCM-SHA384:" "!AES256-SHA256"; #endif #endif a->info->keepalive_timeout = 5; } if (reason == LEJPCB_OBJECT_START && ctx->path_match == LEJPVP_MOUNTS + 1) { a->fresh_mount = 1; memset(&a->m, 0, sizeof(a->m)); } /* this catches, eg, vhosts[].ws-protocols[].xxx-protocol */ if (reason == LEJPCB_OBJECT_START && ctx->path_match == LEJPVP_PROTOCOL_NAME + 1) { a->pvo = lwsws_align(a); a->p += sizeof(*a->pvo); n = lejp_get_wildcard(ctx, 0, a->p, lws_ptr_diff(a->end, a->p)); /* ie, enable this protocol, no options yet */ a->pvo->next = a->info->pvo; a->info->pvo = a->pvo; a->pvo->name = a->p; lwsl_info(" adding protocol %s\n", a->p); a->p += n; a->pvo->value = a->p; a->pvo->options = NULL; goto dostring; } /* this catches, eg, vhosts[].headers[].xxx */ if ((reason == LEJPCB_VAL_STR_END || reason == LEJPCB_VAL_STR_CHUNK) && ctx->path_match == LEJPVP_HEADERS_NAME + 1) { if (!a->chunk) { headers = lwsws_align(a); a->p += sizeof(*headers); n = lejp_get_wildcard(ctx, 0, a->p, lws_ptr_diff(a->end, a->p)); /* ie, add this header */ headers->next = a->info->headers; a->info->headers = headers; headers->name = a->p; lwsl_notice(" adding header %s=%s\n", a->p, ctx->buf); a->p += n - 1; *(a->p++) = ':'; if (a->p < a->end) *(a->p++) = '\0'; else *(a->p - 1) = '\0'; headers->value = a->p; headers->options = NULL; } a->chunk = reason == LEJPCB_VAL_STR_CHUNK; goto dostring; } if (reason == LEJPCB_OBJECT_END && (ctx->path_match == LEJPVP + 1 || !ctx->path[0]) && a->valid) { struct lws_vhost *vhost; //lwsl_notice("%s\n", ctx->path); if (!a->info->port && !(a->info->options & LWS_SERVER_OPTION_UNIX_SOCK)) { lwsl_err("Port required (eg, 443)\n"); return 1; } a->valid = 0; a->info->mounts = a->head; vhost = lws_create_vhost(a->context, a->info); if (!vhost) { lwsl_err("Failed to create vhost %s\n", a->info->vhost_name); return 1; } a->any_vhosts = 1; if (a->reject_ws_with_no_protocol) { a->reject_ws_with_no_protocol = 0; vhost->default_protocol_index = 255; } #if defined(LWS_WITH_TLS) && defined(LWS_WITH_CLIENT) if (a->enable_client_ssl) { const char *cert_filepath = a->info->client_ssl_cert_filepath; const char *private_key_filepath = a->info->client_ssl_private_key_filepath; const char *ca_filepath = a->info->client_ssl_ca_filepath; const char *cipher_list = a->info->client_ssl_cipher_list; memset(a->info, 0, sizeof(*a->info)); a->info->client_ssl_cert_filepath = cert_filepath; a->info->client_ssl_private_key_filepath = private_key_filepath; a->info->client_ssl_ca_filepath = ca_filepath; a->info->client_ssl_cipher_list = cipher_list; a->info->options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; lws_init_vhost_client_ssl(a->info, vhost); } #endif return 0; } if (reason == LEJPCB_OBJECT_END && ctx->path_match == LEJPVP_MOUNTS + 1) { static const char * const mount_protocols[] = { "http://", "https://", "file://", "cgi://", ">http://", ">https://", "callback://", "gzip://", }; if (!a->fresh_mount) return 0; if (!a->m.mountpoint || !a->m.origin) { lwsl_err("mountpoint and origin required\n"); return 1; } lwsl_debug("adding mount %s\n", a->m.mountpoint); m = lwsws_align(a); memcpy(m, &a->m, sizeof(*m)); if (a->last) a->last->mount_next = m; for (n = 0; n < (int)LWS_ARRAY_SIZE(mount_protocols); n++) if (!strncmp(a->m.origin, mount_protocols[n], strlen(mount_protocols[n]))) { lwsl_info("----%s\n", a->m.origin); m->origin_protocol = (uint8_t)(unsigned int)n; m->origin = a->m.origin + strlen(mount_protocols[n]); break; } if (n == (int)LWS_ARRAY_SIZE(mount_protocols)) { lwsl_err("unsupported protocol:// %s\n", a->m.origin); return 1; } a->p += sizeof(*m); if (!a->head) a->head = m; a->last = m; a->fresh_mount = 0; } /* we only match on the prepared path strings */ if (!(reason & LEJP_FLAG_CB_IS_VALUE) || !ctx->path_match) return 0; switch (ctx->path_match - 1) { case LEJPVP_NAME: a->info->vhost_name = a->p; break; case LEJPVP_PORT: a->info->port = atoi(ctx->buf); return 0; case LEJPVP_INTERFACE: a->info->iface = a->p; break; case LEJPVP_UNIXSKT: if (arg_to_bool(ctx->buf)) a->info->options |= (uint64_t)LWS_SERVER_OPTION_UNIX_SOCK; else a->info->options &= (uint64_t)~(LWS_SERVER_OPTION_UNIX_SOCK); return 0; case LEJPVP_UNIXSKT_PERMS: a->info->unix_socket_perms = a->p; break; case LEJPVP_STS: if (arg_to_bool(ctx->buf)) a->info->options |= (uint64_t)LWS_SERVER_OPTION_STS; else a->info->options &= (uint64_t)~(LWS_SERVER_OPTION_STS); return 0; #if defined(LWS_WITH_TLS) case LEJPVP_HOST_SSL_KEY: a->info->ssl_private_key_filepath = a->p; break; case LEJPVP_HOST_SSL_CERT: a->info->ssl_cert_filepath = a->p; break; case LEJPVP_HOST_SSL_CA: a->info->ssl_ca_filepath = a->p; break; #endif case LEJPVP_ACCESS_LOG: a->info->log_filepath = a->p; break; case LEJPVP_MOUNTPOINT: a->m.mountpoint = a->p; a->m.mountpoint_len = (unsigned char)strlen(ctx->buf); break; case LEJPVP_ORIGIN: if (!strncmp(ctx->buf, "callback://", 11)) a->m.protocol = a->p + 11; if (!a->m.origin) a->m.origin = a->p; break; case LEJPVP_DEFAULT: a->m.def = a->p; break; case LEJPVP_DEFAULT_AUTH_MASK: a->m.auth_mask = (unsigned int)atoi(ctx->buf); return 0; case LEJPVP_MOUNT_CACHE_MAX_AGE: a->m.cache_max_age = atoi(ctx->buf); return 0; case LEJPVP_MOUNT_CACHE_REUSE: a->m.cache_reusable = !!arg_to_bool(ctx->buf); return 0; case LEJPVP_MOUNT_CACHE_REVALIDATE: a->m.cache_revalidate = !!arg_to_bool(ctx->buf); return 0; case LEJPVP_MOUNT_CACHE_INTERMEDIARIES: a->m.cache_intermediaries = !!arg_to_bool(ctx->buf);; return 0; case LEJPVP_MOUNT_BASIC_AUTH: #if defined(LWS_WITH_HTTP_BASIC_AUTH) a->m.basic_auth_login_file = a->p; #endif break; case LEJPVP_CGI_TIMEOUT: a->m.cgi_timeout = atoi(ctx->buf); return 0; case LWJPVP_FO_LISTEN_QUEUE: a->info->fo_listen_queue = atoi(ctx->buf); return 0; case LEJPVP_KEEPALIVE_TIMEOUT: a->info->keepalive_timeout = atoi(ctx->buf); return 0; #if defined(LWS_WITH_TLS) #if defined(LWS_WITH_CLIENT) case LEJPVP_CLIENT_CIPHERS: a->info->client_ssl_cipher_list = a->p; break; case LEJPVP_CLIENT_TLS13_CIPHERS: a->info->client_tls_1_3_plus_cipher_list = a->p; break; #endif case LEJPVP_CIPHERS: a->info->ssl_cipher_list = a->p; break; case LEJPVP_TLS13_CIPHERS: a->info->tls1_3_plus_cipher_list = a->p; break; case LEJPVP_ECDH_CURVE: a->info->ecdh_curve = a->p; break; #endif case LEJPVP_PMO: case LEJPVP_CGI_ENV: mp_cgienv = lwsws_align(a); a->p += sizeof(*a->m.cgienv); mp_cgienv->next = a->m.cgienv; a->m.cgienv = mp_cgienv; n = lejp_get_wildcard(ctx, 0, a->p, lws_ptr_diff(a->end, a->p)); mp_cgienv->name = a->p; a->p += n; mp_cgienv->value = a->p; mp_cgienv->options = NULL; //lwsl_notice(" adding pmo / cgi-env '%s' = '%s'\n", // mp_cgienv->name, mp_cgienv->value); goto dostring; case LEJPVP_PROTOCOL_NAME_OPT: /* this catches, eg, * vhosts[].ws-protocols[].xxx-protocol.yyy-option * ie, these are options attached to a protocol with { } */ pvo = lwsws_align(a); a->p += sizeof(*a->pvo); n = lejp_get_wildcard(ctx, 1, a->p, lws_ptr_diff(a->end, a->p)); /* ie, enable this protocol, no options yet */ pvo->next = a->pvo->options; a->pvo->options = pvo; pvo->name = a->p; a->p += n; pvo->value = a->p; pvo->options = NULL; break; case LEJPVP_MOUNT_EXTRA_MIMETYPES: a->pvo_em = lwsws_align(a); a->p += sizeof(*a->pvo_em); n = lejp_get_wildcard(ctx, 0, a->p, lws_ptr_diff(a->end, a->p)); /* ie, enable this protocol, no options yet */ a->pvo_em->next = a->m.extra_mimetypes; a->m.extra_mimetypes = a->pvo_em; a->pvo_em->name = a->p; lwsl_notice(" + extra-mimetypes %s -> %s\n", a->p, ctx->buf); a->p += n; a->pvo_em->value = a->p; a->pvo_em->options = NULL; break; case LEJPVP_MOUNT_INTERPRET: a->pvo_int = lwsws_align(a); a->p += sizeof(*a->pvo_int); n = lejp_get_wildcard(ctx, 0, a->p, lws_ptr_diff(a->end, a->p)); /* ie, enable this protocol, no options yet */ a->pvo_int->next = a->m.interpret; a->m.interpret = a->pvo_int; a->pvo_int->name = a->p; lwsl_notice(" adding interpret %s -> %s\n", a->p, ctx->buf); a->p += n; a->pvo_int->value = a->p; a->pvo_int->options = NULL; break; case LEJPVP_ENABLE_CLIENT_SSL: a->enable_client_ssl = !!arg_to_bool(ctx->buf); return 0; #if defined(LWS_WITH_TLS) && defined(LWS_WITH_CLIENT) case LEJPVP_CLIENT_SSL_KEY: a->info->client_ssl_private_key_filepath = a->p; break; case LEJPVP_CLIENT_SSL_CERT: a->info->client_ssl_cert_filepath = a->p; break; case LEJPVP_CLIENT_SSL_CA: a->info->client_ssl_ca_filepath = a->p; break; #endif case LEJPVP_NOIPV6: set_reset_flag(&a->info->options, ctx->buf, LWS_SERVER_OPTION_DISABLE_IPV6); return 0; case LEJPVP_FLAG_ONLYRAW: set_reset_flag(&a->info->options, ctx->buf, LWS_SERVER_OPTION_ADOPT_APPLY_LISTEN_ACCEPT_CONFIG); return 0; case LEJPVP_IPV6ONLY: a->info->options |= LWS_SERVER_OPTION_IPV6_V6ONLY_MODIFY; set_reset_flag(&a->info->options, ctx->buf, LWS_SERVER_OPTION_IPV6_V6ONLY_VALUE); return 0; case LEJPVP_FLAG_CLIENT_CERT_REQUIRED: if (arg_to_bool(ctx->buf)) a->info->options |= LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT; return 0; case LEJPVP_IGNORE_MISSING_CERT: set_reset_flag(&a->info->options, ctx->buf, LWS_SERVER_OPTION_IGNORE_MISSING_CERT); return 0; case LEJPVP_FLAG_STRICT_HOST_CHECK: set_reset_flag(&a->info->options, ctx->buf, LWS_SERVER_OPTION_VHOST_UPG_STRICT_HOST_CHECK); return 0; case LEJPVP_ERROR_DOCUMENT_404: a->info->error_document_404 = a->p; break; #if defined(LWS_WITH_TLS) case LEJPVP_SSL_OPTION_SET: a->info->ssl_options_set |= atol(ctx->buf); return 0; case LEJPVP_SSL_OPTION_CLEAR: a->info->ssl_options_clear |= atol(ctx->buf); return 0; #if defined(LWS_WITH_CLIENT) case LEJPVP_SSL_CLIENT_OPTION_SET: a->info->ssl_client_options_set |= atol(ctx->buf); return 0; case LEJPVP_SSL_CLIENT_OPTION_CLEAR: a->info->ssl_client_options_clear |= atol(ctx->buf); return 0; #endif case LEJPVP_ALPN: a->info->alpn = a->p; break; #endif case LEJPVP_LISTEN_ACCEPT_ROLE: a->info->listen_accept_role = a->p; break; case LEJPVP_LISTEN_ACCEPT_PROTOCOL: a->info->listen_accept_protocol = a->p; break; case LEJPVP_FLAG_APPLY_LISTEN_ACCEPT: set_reset_flag(&a->info->options, ctx->buf, LWS_SERVER_OPTION_ADOPT_APPLY_LISTEN_ACCEPT_CONFIG); return 0; case LEJPVP_FLAG_FALLBACK_LISTEN_ACCEPT: lwsl_notice("vh %s: LEJPVP_FLAG_FALLBACK_LISTEN_ACCEPT: %s\n", a->info->vhost_name, ctx->buf); set_reset_flag(&a->info->options, ctx->buf, LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG); return 0; case LEJPVP_FLAG_ALLOW_NON_TLS: set_reset_flag(&a->info->options, ctx->buf, LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT); return 0; case LEJPVP_FLAG_REDIRECT_HTTP: set_reset_flag(&a->info->options, ctx->buf, LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS); return 0; case LEJPVP_FLAG_ALLOW_HTTP_ON_HTTPS: set_reset_flag(&a->info->options, ctx->buf, LWS_SERVER_OPTION_ALLOW_HTTP_ON_HTTPS_LISTENER); return 0; case LEJPVP_FLAG_DISABLE_NO_PROTOCOL_WS_UPGRADES: a->reject_ws_with_no_protocol = 1; return 0; case LEJPVP_FLAG_H2_HALF_CLOSED_LONG_POLL: set_reset_flag(&a->info->options, ctx->buf, LWS_SERVER_OPTION_VH_H2_HALF_CLOSED_LONG_POLL); return 0; default: return 0; } dostring: p = ctx->buf; p[LEJP_STRING_CHUNK] = '\0'; p1 = strstr(p, ESC_INSTALL_DATADIR); if (p1) { n = lws_ptr_diff(p1, p); if (n > a->end - a->p) n = lws_ptr_diff(a->end, a->p); lws_strncpy(a->p, p, (unsigned int)n + 1u); a->p += n; a->p += lws_snprintf(a->p, lws_ptr_diff_size_t(a->end, a->p), "%s", LWS_INSTALL_DATADIR); p += n + (int)strlen(ESC_INSTALL_DATADIR); } a->p += lws_snprintf(a->p, lws_ptr_diff_size_t(a->end, a->p), "%s", p); if (reason == LEJPCB_VAL_STR_END) *(a->p)++ = '\0'; return 0; } /* * returns 0 = OK, 1 = can't open, 2 = parsing error */ static int lwsws_get_config(void *user, const char *f, const char * const *paths, int count_paths, lejp_callback cb) { unsigned char buf[128]; struct lejp_ctx ctx; int n, m = 0, fd; memset(&ctx, 0, sizeof(ctx)); fd = lws_open(f, O_RDONLY); if (fd < 0) { lwsl_err("Cannot open %s\n", f); return 2; } lwsl_info("%s: %s\n", __func__, f); lejp_construct(&ctx, cb, user, paths, (uint8_t)(unsigned int)count_paths); do { n = (int)read(fd, buf, sizeof(buf)); if (!n) break; m = lejp_parse(&ctx, buf, n); } while (m == LEJP_CONTINUE); close(fd); n = (int32_t)ctx.line; lejp_destruct(&ctx); if (m < 0) { lwsl_err("%s(%u): parsing error %d: %s\n", f, n, m, lejp_error_to_string(m)); return 2; } return 0; } struct lws_dir_args { void *user; const char * const *paths; int count_paths; lejp_callback cb; }; static int lwsws_get_config_d_cb(const char *dirpath, void *user, struct lws_dir_entry *lde) { struct lws_dir_args *da = (struct lws_dir_args *)user; char path[256]; if (lde->type != LDOT_FILE && lde->type != LDOT_UNKNOWN /* ZFS */) return 0; lws_snprintf(path, sizeof(path) - 1, "%s/%s", dirpath, lde->name); return lwsws_get_config(da->user, path, da->paths, da->count_paths, da->cb); } int lwsws_get_config_globals(struct lws_context_creation_info *info, const char *d, char **cs, int *len) { struct lws_dir_args da; struct jpargs a; #if defined(LWS_WITH_PLUGINS) const char * const *old = info->plugin_dirs; #endif char dd[128]; memset(&a, 0, sizeof(a)); a.info = info; a.p = *cs; a.end = (a.p + *len) - 1; a.valid = 0; lwsws_align(&a); #if defined(LWS_WITH_PLUGINS) info->plugin_dirs = (void *)a.p; #endif a.plugin_dirs = (void *)a.p; /* writeable version */ a.p += MAX_PLUGIN_DIRS * sizeof(void *); #if defined(LWS_WITH_PLUGINS) /* copy any default paths */ while (old && *old) { a.plugin_dirs[a.count_plugin_dirs++] = *old; old++; } #endif lws_snprintf(dd, sizeof(dd) - 1, "%s/conf", d); if (lwsws_get_config(&a, dd, paths_global, LWS_ARRAY_SIZE(paths_global), lejp_globals_cb) > 1) return 1; lws_snprintf(dd, sizeof(dd) - 1, "%s/conf.d", d); da.user = &a; da.paths = paths_global; da.count_paths = LWS_ARRAY_SIZE(paths_global), da.cb = lejp_globals_cb; if (lws_dir(dd, &da, lwsws_get_config_d_cb) > 1) return 1; a.plugin_dirs[a.count_plugin_dirs] = NULL; *cs = a.p; *len = lws_ptr_diff(a.end, a.p); return 0; } int lwsws_get_config_vhosts(struct lws_context *context, struct lws_context_creation_info *info, const char *d, char **cs, int *len) { struct lws_dir_args da; struct jpargs a; char dd[128]; memset(&a, 0, sizeof(a)); a.info = info; a.p = *cs; a.end = a.p + *len; a.valid = 0; a.context = context; a.protocols = info->protocols; a.pprotocols = info->pprotocols; #if defined(LWS_ROLE_WS) a.extensions = info->extensions; #endif lws_snprintf(dd, sizeof(dd) - 1, "%s/conf", d); if (lwsws_get_config(&a, dd, paths_vhosts, LWS_ARRAY_SIZE(paths_vhosts), lejp_vhosts_cb) > 1) return 1; lws_snprintf(dd, sizeof(dd) - 1, "%s/conf.d", d); da.user = &a; da.paths = paths_vhosts; da.count_paths = LWS_ARRAY_SIZE(paths_vhosts), da.cb = lejp_vhosts_cb; if (lws_dir(dd, &da, lwsws_get_config_d_cb) > 1) return 1; *cs = a.p; *len = lws_ptr_diff(a.end, a.p); if (!a.any_vhosts) { lwsl_err("Need at least one vhost\n"); return 1; } // lws_finalize_startup(context); return 0; } libwebsockets-4.3.5/lib/roles/http/server/lws-spa.c000066400000000000000000000342121476025525100223050ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #define LWS_MAX_ELEM_NAME 32 enum urldecode_stateful { US_NAME, US_IDLE, US_PC1, US_PC2, MT_LOOK_BOUND_IN, MT_HNAME, MT_DISP, MT_TYPE, MT_IGNORE1, MT_IGNORE2, MT_IGNORE3, MT_COMPLETED, }; static struct mp_hdr { const char * const hdr; uint8_t hdr_len; } mp_hdrs[] = { { "content-disposition: ", 21 }, { "content-type: ", 14 }, { "\x0d\x0a", 2 } }; struct lws_spa; typedef int (*lws_urldecode_stateful_cb)(struct lws_spa *spa, const char *name, char **buf, int len, int final); struct lws_urldecode_stateful { char *out; struct lws_spa *data; struct lws *wsi; char name[LWS_MAX_ELEM_NAME]; char temp[LWS_MAX_ELEM_NAME]; char content_type[32]; char content_disp[32]; char content_disp_filename[256]; char mime_boundary[128]; int out_len; int pos; int hdr_idx; int mp; int sum; uint8_t matchable; uint8_t multipart_form_data:1; uint8_t inside_quote:1; uint8_t subname:1; uint8_t boundary_real_crlf:1; enum urldecode_stateful state; lws_urldecode_stateful_cb output; }; struct lws_spa { struct lws_urldecode_stateful *s; lws_spa_create_info_t i; int *param_length; char finalized; char **params; char *storage; char *end; }; static struct lws_urldecode_stateful * lws_urldecode_s_create(struct lws_spa *spa, struct lws *wsi, char *out, int out_len, lws_urldecode_stateful_cb output) { struct lws_urldecode_stateful *s; char buf[205], *p; int m = 0; if (spa->i.ac) s = lwsac_use_zero(spa->i.ac, sizeof(*s), spa->i.ac_chunk_size); else s = lws_zalloc(sizeof(*s), "stateful urldecode"); if (!s) return NULL; s->out = out; s->out_len = out_len; s->output = output; s->pos = 0; s->sum = 0; s->mp = 0; s->state = US_NAME; s->name[0] = '\0'; s->data = spa; s->wsi = wsi; if (lws_hdr_copy(wsi, buf, sizeof(buf), WSI_TOKEN_HTTP_CONTENT_TYPE) > 0) { /* multipart/form-data; * boundary=----WebKitFormBoundarycc7YgAPEIHvgE9Bf */ if (!strncmp(buf, "multipart/form-data", 19) || !strncmp(buf, "multipart/related", 17)) { s->multipart_form_data = 1; s->state = MT_LOOK_BOUND_IN; s->mp = 2; p = strstr(buf, "boundary="); if (p) { p += 9; s->mime_boundary[m++] = '\x0d'; s->mime_boundary[m++] = '\x0a'; s->mime_boundary[m++] = '-'; s->mime_boundary[m++] = '-'; if (*p == '\"') p++; while (m < (int)sizeof(s->mime_boundary) - 1 && *p && *p != ' ' && *p != ';' && *p != '\"') s->mime_boundary[m++] = *p++; s->mime_boundary[m] = '\0'; // lwsl_notice("boundary '%s'\n", s->mime_boundary); } } } return s; } static int lws_urldecode_s_process(struct lws_urldecode_stateful *s, const char *in, int len) { int n, hit; char c; while (len--) { if (s->pos == s->out_len - s->mp - 1) { if (s->output(s->data, s->name, &s->out, s->pos, LWS_UFS_CONTENT)) return -1; s->pos = 0; } switch (s->state) { /* states for url arg style */ case US_NAME: s->inside_quote = 0; if (*in == '=') { s->name[s->pos] = '\0'; s->pos = 0; s->state = US_IDLE; in++; continue; } if (*in == '&') { s->name[s->pos] = '\0'; if (s->output(s->data, s->name, &s->out, s->pos, LWS_UFS_FINAL_CONTENT)) return -1; s->pos = 0; s->state = US_IDLE; in++; continue; } if (s->pos >= (int)sizeof(s->name) - 1) { lwsl_hexdump_notice(s->name, (size_t)s->pos); lwsl_notice("Name too long...\n"); return -1; } s->name[s->pos++] = *in++; break; case US_IDLE: if (*in == '%') { s->state++; in++; continue; } if (*in == '&') { s->out[s->pos] = '\0'; if (s->output(s->data, s->name, &s->out, s->pos, LWS_UFS_FINAL_CONTENT)) return -1; s->pos = 0; s->state = US_NAME; in++; continue; } if (*in == '+') { in++; s->out[s->pos++] = ' '; continue; } s->out[s->pos++] = *in++; break; case US_PC1: n = char_to_hex(*in); if (n < 0) return -1; in++; s->sum = n << 4; s->state++; break; case US_PC2: n = char_to_hex(*in); if (n < 0) return -1; in++; s->out[s->pos++] = (char)(s->sum | n); s->state = US_IDLE; break; /* states for multipart / mime style */ case MT_LOOK_BOUND_IN: retry_as_first: if (*in == s->mime_boundary[s->mp] && s->mime_boundary[s->mp]) { in++; s->mp++; if (!s->mime_boundary[s->mp]) { s->mp = 0; s->state = MT_IGNORE1; if (s->output(s->data, s->name, &s->out, s->pos, LWS_UFS_FINAL_CONTENT)) return -1; s->pos = 0; s->content_disp[0] = '\0'; s->name[0] = '\0'; s->content_disp_filename[0] = '\0'; s->boundary_real_crlf = 1; } continue; } if (s->mp) { n = 0; if (!s->boundary_real_crlf) n = 2; if (s->mp >= n) { memcpy(s->out + s->pos, s->mime_boundary + n, (unsigned int)(s->mp - n)); s->pos += s->mp; s->mp = 0; goto retry_as_first; } } s->out[s->pos++] = *in; in++; s->mp = 0; break; case MT_HNAME: c =*in; if (c >= 'A' && c <= 'Z') c = (char)(c + 'a' - 'A'); if (!s->mp) /* initially, any of them might match */ s->matchable = (1 << LWS_ARRAY_SIZE(mp_hdrs)) - 1; hit = -1; for (n = 0; n < (int)LWS_ARRAY_SIZE(mp_hdrs); n++) { if (!(s->matchable & (1 << n))) continue; /* this guy is still in contention... */ if (s->mp >= mp_hdrs[n].hdr_len) { /* he went past the end of it */ s->matchable &= (uint8_t)~(1 << n); continue; } if (c != mp_hdrs[n].hdr[s->mp]) { /* mismatched a char */ s->matchable &= (uint8_t)~(1 << n); continue; } if (s->mp + 1 == mp_hdrs[n].hdr_len) { /* we have a winner... */ hit = n; break; } } in++; if (hit == -1 && !s->matchable) { /* We ruled them all out */ s->state = MT_IGNORE1; s->mp = 0; continue; } s->mp++; if (hit < 0) continue; /* we matched the one in hit */ s->mp = 0; s->temp[0] = '\0'; s->subname = 0; if (hit == 2) s->state = MT_LOOK_BOUND_IN; else s->state += (unsigned int)hit + 1u; break; case MT_DISP: /* form-data; name="file"; filename="t.txt" */ if (*in == '\x0d') { if (s->content_disp_filename[0]) if (s->output(s->data, s->name, &s->out, s->pos, LWS_UFS_OPEN)) return -1; s->state = MT_IGNORE2; goto done; } if (*in == ';') { s->subname = 1; s->temp[0] = '\0'; s->mp = 0; goto done; } if (*in == '\"') { s->inside_quote = !!((s->inside_quote ^ 1) & 1); goto done; } if (s->subname) { if (*in == '=') { s->temp[s->mp] = '\0'; s->subname = 0; s->mp = 0; goto done; } if (s->mp < (int)sizeof(s->temp) - 1 && (*in != ' ' || s->inside_quote)) s->temp[s->mp++] = *in; goto done; } if (!s->temp[0]) { if (s->mp < (int)sizeof(s->content_disp) - 1) s->content_disp[s->mp++] = *in; if (s->mp < (int)sizeof(s->content_disp)) s->content_disp[s->mp] = '\0'; goto done; } if (!strcmp(s->temp, "name")) { if (s->mp < (int)sizeof(s->name) - 1) s->name[s->mp++] = *in; else s->mp = (int)sizeof(s->name) - 1; s->name[s->mp] = '\0'; goto done; } if (!strcmp(s->temp, "filename")) { if (s->mp < (int)sizeof(s->content_disp_filename) - 1) s->content_disp_filename[s->mp++] = *in; s->content_disp_filename[s->mp] = '\0'; goto done; } done: in++; break; case MT_TYPE: if (*in == '\x0d') s->state = MT_IGNORE2; else { if (s->mp < (int)sizeof(s->content_type) - 1) s->content_type[s->mp++] = *in; s->content_type[s->mp] = '\0'; } in++; break; case MT_IGNORE1: if (*in == '\x0d') s->state = MT_IGNORE2; if (*in == '-') s->state = MT_IGNORE3; in++; break; case MT_IGNORE2: s->mp = 0; if (*in == '\x0a') s->state = MT_HNAME; in++; break; case MT_IGNORE3: if (*in == '\x0d') s->state = MT_IGNORE2; if (*in == '-') { s->state = MT_COMPLETED; s->wsi->http.rx_content_remain = 0; } in++; break; case MT_COMPLETED: break; } } return 0; } static int lws_urldecode_s_destroy(struct lws_spa *spa, struct lws_urldecode_stateful *s) { int ret = 0; if (s->state != US_IDLE) ret = -1; if (!ret) if (s->output(s->data, s->name, &s->out, s->pos, LWS_UFS_FINAL_CONTENT)) ret = -1; if (s->output(s->data, s->name, NULL, 0, LWS_UFS_CLOSE)) return -1; if (!spa->i.ac) lws_free(s); return ret; } static int lws_urldecode_spa_lookup(struct lws_spa *spa, const char *name) { const char * const *pp = spa->i.param_names; int n; for (n = 0; n < spa->i.count_params; n++) { if (!strcmp(*pp, name)) return n; if (spa->i.param_names_stride) pp = (const char * const *)(((char *)pp) + spa->i.param_names_stride); else pp++; } return -1; } static int lws_urldecode_spa_cb(struct lws_spa *spa, const char *name, char **buf, int len, int final) { int n; if (final == LWS_UFS_CLOSE || spa->s->content_disp_filename[0]) { if (spa->i.opt_cb) { n = spa->i.opt_cb(spa->i.opt_data, name, spa->s->content_disp_filename, buf ? *buf : NULL, len, (enum lws_spa_fileupload_states)final); if (n < 0) return -1; } return 0; } n = lws_urldecode_spa_lookup(spa, name); if (n == -1 || !len) /* unrecognized */ return 0; if (!spa->i.ac) { if (!spa->params[n]) spa->params[n] = *buf; if ((*buf) + len >= spa->end) { lwsl_info("%s: exceeded storage\n", __func__); return -1; } /* move it on inside storage */ (*buf) += len; *((*buf)++) = '\0'; spa->s->out_len -= len + 1; } else { spa->params[n] = lwsac_use(spa->i.ac, (unsigned int)len + 1, spa->i.ac_chunk_size); if (!spa->params[n]) return -1; memcpy(spa->params[n], *buf, (unsigned int)len); spa->params[n][len] = '\0'; } spa->param_length[n] += len; return 0; } struct lws_spa * lws_spa_create_via_info(struct lws *wsi, const lws_spa_create_info_t *i) { struct lws_spa *spa; if (i->ac) spa = lwsac_use_zero(i->ac, sizeof(*spa), i->ac_chunk_size); else spa = lws_zalloc(sizeof(*spa), "spa"); if (!spa) return NULL; spa->i = *i; if (!spa->i.max_storage) spa->i.max_storage = 512; if (i->ac) spa->storage = lwsac_use(i->ac, (unsigned int)spa->i.max_storage, i->ac_chunk_size); else spa->storage = lws_malloc((unsigned int)spa->i.max_storage, "spa"); if (!spa->storage) goto bail2; spa->end = spa->storage + spa->i.max_storage - 1; if (i->count_params) { if (i->ac) spa->params = lwsac_use_zero(i->ac, sizeof(char *) * (unsigned int)i->count_params, i->ac_chunk_size); else spa->params = lws_zalloc(sizeof(char *) * (unsigned int)i->count_params, "spa params"); if (!spa->params) goto bail3; } spa->s = lws_urldecode_s_create(spa, wsi, spa->storage, spa->i.max_storage, lws_urldecode_spa_cb); if (!spa->s) goto bail4; if (i->count_params) { if (i->ac) spa->param_length = lwsac_use_zero(i->ac, sizeof(int) * (unsigned int)i->count_params, i->ac_chunk_size); else spa->param_length = lws_zalloc(sizeof(int) * (unsigned int)i->count_params, "spa param len"); if (!spa->param_length) goto bail5; } // lwsl_notice("%s: Created SPA %p\n", __func__, spa); return spa; bail5: lws_urldecode_s_destroy(spa, spa->s); bail4: if (!i->ac) lws_free(spa->params); bail3: if (!i->ac) lws_free(spa->storage); bail2: if (!i->ac) lws_free(spa); if (i->ac) lwsac_free(i->ac); return NULL; } struct lws_spa * lws_spa_create(struct lws *wsi, const char * const *param_names, int count_params, int max_storage, lws_spa_fileupload_cb opt_cb, void *opt_data) { lws_spa_create_info_t i; memset(&i, 0, sizeof(i)); i.count_params = count_params; i.max_storage = max_storage; i.opt_cb = opt_cb; i.opt_data = opt_data; i.param_names = param_names; return lws_spa_create_via_info(wsi, &i); } int lws_spa_process(struct lws_spa *spa, const char *in, int len) { if (!spa) { lwsl_err("%s: NULL spa\n", __func__); return -1; } /* we reject any junk after the last part arrived and we finalized */ if (spa->finalized) return 0; return lws_urldecode_s_process(spa->s, in, len); } int lws_spa_get_length(struct lws_spa *spa, int n) { if (n >= spa->i.count_params) return 0; return spa->param_length[n]; } const char * lws_spa_get_string(struct lws_spa *spa, int n) { if (n >= spa->i.count_params) return NULL; return spa->params[n]; } int lws_spa_finalize(struct lws_spa *spa) { if (!spa) return 0; if (spa->s) { lws_urldecode_s_destroy(spa, spa->s); spa->s = NULL; } spa->finalized = 1; return 0; } int lws_spa_destroy(struct lws_spa *spa) { int n = 0; lwsl_info("%s: destroy spa %p\n", __func__, spa); if (spa->s) lws_urldecode_s_destroy(spa, spa->s); if (spa->i.ac) lwsac_free(spa->i.ac); else { lws_free(spa->param_length); lws_free(spa->params); lws_free(spa->storage); lws_free(spa); } return n; } libwebsockets-4.3.5/lib/roles/http/server/ranges.c000066400000000000000000000115401476025525100221750ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" /* * RFC7233 examples * * o The first 500 bytes (byte offsets 0-499, inclusive): * * bytes=0-499 * * o The second 500 bytes (byte offsets 500-999, inclusive): * * bytes=500-999 * * o The final 500 bytes (byte offsets 9500-9999, inclusive): * * bytes=-500 * * Or: * * bytes=9500- * * o The first and last bytes only (bytes 0 and 9999): * * bytes=0-0,-1 * * o Other valid (but not canonical) specifications of the second 500 * bytes (byte offsets 500-999, inclusive): * * bytes=500-600,601-999 * bytes=500-700,601-999 */ /* * returns 1 if the range struct represents a usable range * if no ranges header, you get one of these for the whole * file. Otherwise you get one for each valid range in the * header. * * returns 0 if no further valid range forthcoming; rp->state * may be LWSRS_SYNTAX or LWSRS_COMPLETED */ int lws_ranges_next(struct lws_range_parsing *rp) { static const char * const beq = "bytes="; while (1) { char c = rp->buf[rp->pos]; switch (rp->state) { case LWSRS_SYNTAX: case LWSRS_COMPLETED: return 0; case LWSRS_NO_ACTIVE_RANGE: rp->state = LWSRS_COMPLETED; return 0; case LWSRS_BYTES_EQ: // looking for "bytes=" if (c != beq[rp->pos]) { rp->state = LWSRS_SYNTAX; return -1; } if (rp->pos == 5) rp->state = LWSRS_FIRST; break; case LWSRS_FIRST: rp->start = 0; rp->end = 0; rp->start_valid = 0; rp->end_valid = 0; rp->state = LWSRS_STARTING; // fallthru case LWSRS_STARTING: if (c == '-') { rp->state = LWSRS_ENDING; break; } if (!(c >= '0' && c <= '9')) { rp->state = LWSRS_SYNTAX; return 0; } rp->start = (unsigned long long)(((unsigned long long)rp->start * 10) + (unsigned long long)(c - '0')); rp->start_valid = 1; break; case LWSRS_ENDING: if (c == ',' || c == '\0') { rp->state = LWSRS_FIRST; if (c == ',') rp->pos++; /* * By the end of this, start and end are * always valid if the range still is */ if (!rp->start_valid) { /* eg, -500 */ if (rp->end > rp->extent) rp->end = rp->extent; rp->start = rp->extent - rp->end; rp->end = rp->extent - 1; } else if (!rp->end_valid) rp->end = rp->extent - 1; rp->did_try = 1; /* end must be >= start or ignore it */ if (rp->end < rp->start) { if (c == ',') break; rp->state = LWSRS_COMPLETED; return 0; } return 1; /* issue range */ } if (!(c >= '0' && c <= '9')) { rp->state = LWSRS_SYNTAX; return 0; } rp->end = (unsigned long long)(((unsigned long long)rp->end * 10) + (unsigned long long)(c - '0')); rp->end_valid = 1; break; } rp->pos++; } } void lws_ranges_reset(struct lws_range_parsing *rp) { rp->pos = 0; rp->ctr = 0; rp->start = 0; rp->end = 0; rp->start_valid = 0; rp->end_valid = 0; rp->state = LWSRS_BYTES_EQ; } /* * returns count of valid ranges */ int lws_ranges_init(struct lws *wsi, struct lws_range_parsing *rp, unsigned long long extent) { rp->agg = 0; rp->send_ctr = 0; rp->inside = 0; rp->count_ranges = 0; rp->did_try = 0; lws_ranges_reset(rp); rp->state = LWSRS_COMPLETED; rp->extent = extent; if (lws_hdr_copy(wsi, (char *)rp->buf, sizeof(rp->buf), WSI_TOKEN_HTTP_RANGE) <= 0) return 0; rp->state = LWSRS_BYTES_EQ; while (lws_ranges_next(rp)) { rp->count_ranges++; rp->agg += rp->end - rp->start + 1; } lwsl_debug("%s: count %d\n", __func__, rp->count_ranges); lws_ranges_reset(rp); if (rp->did_try && !rp->count_ranges) return -1; /* "not satisfiable */ lws_ranges_next(rp); return rp->count_ranges; } libwebsockets-4.3.5/lib/roles/http/server/rewrite.c000066400000000000000000000017761476025525100224110ustar00rootroot00000000000000#include "private-lib-core.h" #if defined(LWS_WITH_HUBBUB) struct lws_rewrite * lws_rewrite_create(struct lws *wsi, hubbub_callback_t cb, const char *from, const char *to) { struct lws_rewrite *r = lws_malloc(sizeof(*r), "rewrite"); if (!r) { lwsl_err("OOM\n"); return NULL; } if (hubbub_parser_create("UTF-8", false, &r->parser) != HUBBUB_OK) { lws_free(r); return NULL; } r->from = from; r->from_len = strlen(from); r->to = to; r->to_len = strlen(to); r->params.token_handler.handler = cb; r->wsi = wsi; r->params.token_handler.pw = (void *)r; if (hubbub_parser_setopt(r->parser, HUBBUB_PARSER_TOKEN_HANDLER, &r->params) != HUBBUB_OK) { lws_free(r); return NULL; } return r; } int lws_rewrite_parse(struct lws_rewrite *r, const unsigned char *in, int in_len) { if (r && hubbub_parser_parse_chunk(r->parser, in, in_len) != HUBBUB_OK) return -1; return 0; } void lws_rewrite_destroy(struct lws_rewrite *r) { hubbub_parser_destroy(r->parser); lws_free(r); } #endif libwebsockets-4.3.5/lib/roles/http/server/server.c000066400000000000000000002545061476025525100222370ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #if !defined(SOL_TCP) && defined(IPPROTO_TCP) #define SOL_TCP IPPROTO_TCP #endif const char * const method_names[] = { "GET", "POST", #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) "OPTIONS", "PUT", "PATCH", "DELETE", #endif "CONNECT", "HEAD", #ifdef LWS_WITH_HTTP2 ":path", #endif }; #if defined(LWS_WITH_FILE_OPS) static const char * const intermediates[] = { "private", "public" }; #endif /* * return 0: all done * 1: nonfatal error * <0: fatal error * * REQUIRES CONTEXT LOCK HELD */ #if defined(LWS_WITH_SERVER) struct vh_sock_args { const struct lws_context_creation_info *info; struct lws_vhost *vhost; int af; }; static int check_extant(struct lws_dll2 *d, void *user) { struct lws *wsi = lws_container_of(d, struct lws, listen_list); struct vh_sock_args *a = (struct vh_sock_args *)user; if (!lws_vhost_compare_listen(wsi->a.vhost, a->vhost)) return 0; if (wsi->af != a ->af) return 0; lwsl_notice(" using listen skt from vhost %s\n", wsi->a.vhost->name); return 1; } /* * Creates a single listen socket of a specific AF */ int _lws_vhost_init_server_af(struct vh_sock_args *a) { struct lws_context *cx = a->vhost->context; struct lws_context_per_thread *pt; int n, opt = 1, limit = 1; lws_sockfd_type sockfd; struct lws *wsi; int m = 0, is; #if defined(LWS_WITH_IPV6) int value = 1; #endif (void)method_names; (void)opt; lwsl_info("%s: af %d\n", __func__, (int)a->af); if (lws_vhost_foreach_listen_wsi(a->vhost->context, a, check_extant)) return 0; deal: if (a->vhost->iface) { /* * let's check before we do anything else about the disposition * of the interface he wants to bind to... */ is = lws_socket_bind(a->vhost, NULL, LWS_SOCK_INVALID, a->vhost->listen_port, a->vhost->iface, a->af); lwsl_debug("initial if check says %d\n", is); if (is == LWS_ITOSA_BUSY) /* treat as fatal */ return -1; lws_start_foreach_llp(struct lws_vhost **, pv, cx->no_listener_vhost_list) { if (is >= LWS_ITOSA_USABLE && *pv == a->vhost) { /* on the list and shouldn't be: remove it */ lwsl_debug("deferred iface: removing vh %s\n", (*pv)->name); *pv = a->vhost->no_listener_vhost_list; a->vhost->no_listener_vhost_list = NULL; goto done_list; } if (is < LWS_ITOSA_USABLE && *pv == a->vhost) goto done_list; } lws_end_foreach_llp(pv, no_listener_vhost_list); /* not on the list... */ if (is < LWS_ITOSA_USABLE) { /* ... but needs to be: so add it */ lwsl_debug("deferred iface: adding vh %s\n", a->vhost->name); a->vhost->no_listener_vhost_list = cx->no_listener_vhost_list; cx->no_listener_vhost_list = a->vhost; } done_list: switch (is) { default: break; case LWS_ITOSA_NOT_EXIST: /* can't add it */ if (!a->info) return -1; /* first time */ lwsl_err("%s: VH %s: iface %s port %d DOESN'T EXIST\n", __func__, a->vhost->name, a->vhost->iface, a->vhost->listen_port); return (a->info->options & LWS_SERVER_OPTION_FAIL_UPON_UNABLE_TO_BIND) == LWS_SERVER_OPTION_FAIL_UPON_UNABLE_TO_BIND ? -1 : 1; case LWS_ITOSA_NOT_USABLE: /* can't add it */ if (!a->info) /* first time */ return -1; lwsl_err("%s: VH %s: iface %s port %d NOT USABLE\n", __func__, a->vhost->name, a->vhost->iface, a->vhost->listen_port); return (a->info->options & LWS_SERVER_OPTION_FAIL_UPON_UNABLE_TO_BIND) == LWS_SERVER_OPTION_FAIL_UPON_UNABLE_TO_BIND ? -1 : 1; } } (void)n; #if defined(__linux__) /* * A Unix domain sockets cannot be bound multiple times, even if we * set the SO_REUSE* options on. * * However on recent linux, each thread is able to independently listen. * * So we can assume creating just one listening socket for a multi- * threaded environment will typically work. */ if (a->af != AF_UNIX) limit = cx->count_threads; #endif for (m = 0; m < limit; m++) { sockfd = lws_fi(&a->vhost->fic, "listenskt") ? LWS_SOCK_INVALID : socket(a->af, SOCK_STREAM, 0); if (sockfd == LWS_SOCK_INVALID) { lwsl_err("ERROR opening socket\n"); return 1; } #if !defined(LWS_PLAT_FREERTOS) #if (defined(WIN32) || defined(_WIN32)) && defined(SO_EXCLUSIVEADDRUSE) /* * only accept that we are the only listener on the port * https://msdn.microsoft.com/zh-tw/library/ * windows/desktop/ms740621(v=vs.85).aspx * * for lws, to match Linux, we default to exclusive listen */ if (!lws_check_opt(a->vhost->options, LWS_SERVER_OPTION_ALLOW_LISTEN_SHARE)) { if (setsockopt(sockfd, SOL_SOCKET, SO_EXCLUSIVEADDRUSE, (const void *)&opt, sizeof(opt)) < 0) { lwsl_err("reuseaddr failed\n"); compatible_close(sockfd); return -1; } } else #endif /* * allow us to restart even if old sockets in TIME_WAIT */ if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (const void *)&opt, sizeof(opt)) < 0) { lwsl_err("reuseaddr failed\n"); compatible_close(sockfd); return -1; } #if defined(LWS_WITH_IPV6) && defined(IPV6_V6ONLY) /* * If we have an ipv6 listen socket, it only accepts ipv6. * * There will be a separate ipv4 listen socket if that's * enabled. */ if (a->af == AF_INET6 && setsockopt(sockfd, IPPROTO_IPV6, IPV6_V6ONLY, (const void*)&value, sizeof(value)) < 0) { compatible_close(sockfd); return -1; } #endif #if defined(__linux__) && defined(SO_REUSEPORT) /* keep coverity happy */ #if LWS_MAX_SMP > 1 n = 1; #else n = lws_check_opt(a->vhost->options, LWS_SERVER_OPTION_ALLOW_LISTEN_SHARE); #endif if (n || cx->count_threads > 1) /* ... also implied by threads > 1 */ if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEPORT, (const void *)&opt, sizeof(opt)) < 0) { compatible_close(sockfd); return -1; } #endif #endif lws_plat_set_socket_options(a->vhost, sockfd, 0); is = lws_socket_bind(a->vhost, NULL, sockfd, a->vhost->listen_port, a->vhost->iface, a->af); if (is == LWS_ITOSA_BUSY) { /* treat as fatal */ compatible_close(sockfd); return -1; } /* * There is a race where the network device may come up and then * go away and fail here. So correctly handle unexpected failure * here despite we earlier confirmed it. */ if (is < 0) { lwsl_info("%s: lws_socket_bind says %d\n", __func__, is); compatible_close(sockfd); if (a->vhost->iface) goto deal; return -1; } /* * Create the listen wsi and customize it */ lws_context_lock(cx, __func__); wsi = __lws_wsi_create_with_role(cx, m, &role_ops_listen, NULL); lws_context_unlock(cx); if (wsi == NULL) { lwsl_err("Out of mem\n"); goto bail; } wsi->af = (uint8_t)a->af; #ifdef LWS_WITH_UNIX_SOCK if (!LWS_UNIX_SOCK_ENABLED(a->vhost)) #endif { wsi->unix_skt = 1; a->vhost->listen_port = is; lwsl_debug("%s: lws_socket_bind says %d\n", __func__, is); } wsi->desc.sockfd = sockfd; wsi->a.protocol = a->vhost->protocols; lws_vhost_bind_wsi(a->vhost, wsi); wsi->listener = 1; if (wsi->a.context->event_loop_ops->init_vhost_listen_wsi) wsi->a.context->event_loop_ops->init_vhost_listen_wsi(wsi); pt = &cx->pt[m]; lws_pt_lock(pt, __func__); if (__insert_wsi_socket_into_fds(cx, wsi)) { lwsl_notice("inserting wsi socket into fds failed\n"); lws_pt_unlock(pt); goto bail; } lws_dll2_add_tail(&wsi->listen_list, &a->vhost->listen_wsi); lws_pt_unlock(pt); #if defined(WIN32) && defined(TCP_FASTOPEN) if (a->vhost->fo_listen_queue) { int optval = 1; if (setsockopt(wsi->desc.sockfd, IPPROTO_TCP, TCP_FASTOPEN, (const char*)&optval, sizeof(optval)) < 0) { #if (_LWS_ENABLED_LOGS & LLL_WARN) int error = LWS_ERRNO; lwsl_warn("%s: TCP_NODELAY failed with error %d\n", __func__, error); #endif } } #else #if defined(TCP_FASTOPEN) if (a->vhost->fo_listen_queue) { int qlen = a->vhost->fo_listen_queue; if (setsockopt(wsi->desc.sockfd, SOL_TCP, TCP_FASTOPEN, &qlen, sizeof(qlen))) lwsl_warn("%s: TCP_FASTOPEN failed\n", __func__); } #endif #endif n = listen(wsi->desc.sockfd, LWS_SOMAXCONN); if (n < 0) { lwsl_err("listen failed with error %d\n", LWS_ERRNO); lws_dll2_remove(&wsi->listen_list); __remove_wsi_socket_from_fds(wsi); goto bail; } if (wsi) __lws_lc_tag(a->vhost->context, &a->vhost->context->lcg[LWSLCG_WSI], &wsi->lc, "listen|%s|%s|%d", a->vhost->name, a->vhost->iface ? a->vhost->iface : "", (int)a->vhost->listen_port); } /* for each thread able to independently listen */ if (!lws_check_opt(cx->options, LWS_SERVER_OPTION_EXPLICIT_VHOSTS)) { #ifdef LWS_WITH_UNIX_SOCK if (a->af == AF_UNIX) lwsl_info(" Listening on \"%s\"\n", a->vhost->iface); else #endif lwsl_info(" Listening on %s:%d\n", a->vhost->iface, a->vhost->listen_port); } // info->port = vhost->listen_port; return 0; bail: compatible_close(sockfd); return -1; } int _lws_vhost_init_server(const struct lws_context_creation_info *info, struct lws_vhost *vhost) { struct vh_sock_args a; int n; a.info = info; a.vhost = vhost; if (info) { vhost->iface = info->iface; vhost->listen_port = info->port; } /* set up our external listening socket we serve on */ if (vhost->listen_port == CONTEXT_PORT_NO_LISTEN || vhost->listen_port == CONTEXT_PORT_NO_LISTEN_SERVER) return 0; /* * Let's figure out what AF(s) we want this vhost to listen on. * * We want AF_UNIX alone if that's what's told */ #if defined(LWS_WITH_UNIX_SOCK) /* * If unix socket, ask for that and we are done */ if (LWS_UNIX_SOCK_ENABLED(vhost)) { a.af = AF_UNIX; goto single; } #endif /* * We may support both ipv4 and ipv6, but get a numeric vhost listen * iface that is unambiguously ipv4 or ipv6, meaning we can only listen * for the related AF then. */ if (vhost->iface) { uint8_t buf[16]; int q; q = lws_parse_numeric_address(vhost->iface, buf, sizeof(buf)); if (q == 4) { a.af = AF_INET; goto single; } if (q == 16) { #if defined(LWS_WITH_IPV6) if (LWS_IPV6_ENABLED(vhost)) { a.af = AF_INET6; goto single; } #endif lwsl_err("%s: ipv6 not supported on %s\n", __func__, vhost->name); return 1; } } /* * ... if we make it here, we would want to listen on AF_INET and * AF_INET6 unless one or the other is forbidden */ #if defined(LWS_WITH_IPV6) if (!(LWS_IPV6_ENABLED(vhost) && (vhost->options & LWS_SERVER_OPTION_IPV6_V6ONLY_MODIFY) && (vhost->options & LWS_SERVER_OPTION_IPV6_V6ONLY_VALUE))) { #endif a.af = AF_INET; n = _lws_vhost_init_server_af(&a); if (n) return n; #if defined(LWS_WITH_IPV6) } if (LWS_IPV6_ENABLED(vhost)) { a.af = AF_INET6; goto single; } #endif return 0; single: return _lws_vhost_init_server_af(&a); } #endif struct lws_vhost * lws_select_vhost(struct lws_context *context, int port, const char *servername) { struct lws_vhost *vhost = context->vhost_list; const char *p; int n, colon; n = (int)strlen(servername); colon = n; p = strchr(servername, ':'); if (p) colon = lws_ptr_diff(p, servername); /* Priotity 1: first try exact matches */ while (vhost) { if (port == vhost->listen_port && !strncmp(vhost->name, servername, (unsigned int)colon)) { lwsl_info("SNI: Found: %s\n", servername); return vhost; } vhost = vhost->vhost_next; } /* * Priority 2: if no exact matches, try matching *.vhost-name * unintentional matches are possible but resolve to x.com for *.x.com * which is reasonable. If exact match exists we already chose it and * never reach here. SSL will still fail it if the cert doesn't allow * *.x.com. */ vhost = context->vhost_list; while (vhost) { int m = (int)strlen(vhost->name); if (port && port == vhost->listen_port && m <= (colon - 2) && servername[colon - m - 1] == '.' && !strncmp(vhost->name, servername + colon - m, (unsigned int)m)) { lwsl_info("SNI: Found %s on wildcard: %s\n", servername, vhost->name); return vhost; } vhost = vhost->vhost_next; } /* Priority 3: match the first vhost on our port */ vhost = context->vhost_list; while (vhost) { if (port && port == vhost->listen_port) { lwsl_info("%s: vhost match to %s based on port %d\n", __func__, vhost->name, port); return vhost; } vhost = vhost->vhost_next; } /* no match */ return NULL; } static const struct lws_mimetype { const char *extension; const char *mimetype; } server_mimetypes[] = { { ".html", "text/html" }, { ".htm", "text/html" }, { ".js", "text/javascript" }, { ".css", "text/css" }, { ".png", "image/png" }, { ".jpg", "image/jpeg" }, { ".jpeg", "image/jpeg" }, { ".ico", "image/x-icon" }, { ".gif", "image/gif" }, { ".svg", "image/svg+xml" }, { ".ttf", "application/x-font-ttf" }, { ".otf", "application/font-woff" }, { ".woff", "application/font-woff" }, { ".woff2", "application/font-woff2" }, { ".gz", "application/gzip" }, { ".txt", "text/plain" }, { ".xml", "application/xml" }, { ".json", "application/json" }, { ".mjs", "text/javascript" }, }; const char * lws_get_mimetype(const char *file, const struct lws_http_mount *m) { const struct lws_protocol_vhost_options *pvo; size_t n = strlen(file), len, i; const char *fallback_mimetype = NULL; const struct lws_mimetype *mt; /* prioritize user-defined mimetypes */ for (pvo = m ? m->extra_mimetypes : NULL; pvo; pvo = pvo->next) { /* ie, match anything */ if (!fallback_mimetype && pvo->name[0] == '*') { fallback_mimetype = pvo->value; continue; } len = strlen(pvo->name); if (n > len && !strcasecmp(&file[n - len], pvo->name)) { lwsl_info("%s: match to user mimetype: %s\n", __func__, pvo->value); return pvo->value; } } /* fallback to server-defined mimetypes */ for (i = 0; i < LWS_ARRAY_SIZE(server_mimetypes); ++i) { mt = &server_mimetypes[i]; len = strlen(mt->extension); if (n > len && !strcasecmp(&file[n - len], mt->extension)) { lwsl_info("%s: match to server mimetype: %s\n", __func__, mt->mimetype); return mt->mimetype; } } /* fallback to '*' if defined */ if (fallback_mimetype) { lwsl_info("%s: match to any mimetype: %s\n", __func__, fallback_mimetype); return fallback_mimetype; } return NULL; } #if defined(LWS_WITH_FILE_OPS) static lws_fop_flags_t lws_vfs_prepare_flags(struct lws *wsi) { lws_fop_flags_t f = 0; if (!lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_ACCEPT_ENCODING)) return f; if (strstr(lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_ACCEPT_ENCODING), "gzip")) { lwsl_info("client indicates GZIP is acceptable\n"); f |= LWS_FOP_FLAG_COMPR_ACCEPTABLE_GZIP; } return f; } static int lws_http_serve(struct lws *wsi, char *uri, const char *origin, const struct lws_http_mount *m) { const struct lws_protocol_vhost_options *pvo = m->interpret; struct lws_process_html_args args; const char *mimetype; #if !defined(_WIN32_WCE) const struct lws_plat_file_ops *fops; const char *vpath; lws_fop_flags_t fflags = LWS_O_RDONLY; #if defined(WIN32) && defined(LWS_HAVE__STAT32I64) struct _stat32i64 st; #else struct stat st; #endif int spin = 0; #endif char path[256], sym[2048]; unsigned char *p = (unsigned char *)sym + 32 + LWS_PRE, *start = p; unsigned char *end = p + sizeof(sym) - 32 - LWS_PRE; #if !defined(WIN32) && !defined(LWS_PLAT_FREERTOS) size_t len; #endif int n; wsi->handling_404 = 0; if (!wsi->a.vhost) return -1; #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) if (wsi->a.vhost->http.error_document_404 && !strcmp(uri, wsi->a.vhost->http.error_document_404)) wsi->handling_404 = 1; #endif lws_snprintf(path, sizeof(path) - 1, "%s/%s", origin, uri); #if !defined(_WIN32_WCE) fflags |= lws_vfs_prepare_flags(wsi); do { spin++; fops = lws_vfs_select_fops(wsi->a.context->fops, path, &vpath); if (wsi->http.fop_fd) lws_vfs_file_close(&wsi->http.fop_fd); wsi->http.fop_fd = fops->LWS_FOP_OPEN(wsi->a.context->fops, path, vpath, &fflags); if (!wsi->http.fop_fd) { lwsl_info("%s: Unable to open '%s': errno %d\n", __func__, path, errno); return 1; } /* if it can't be statted, don't try */ if (fflags & LWS_FOP_FLAG_VIRTUAL) break; #if defined(LWS_PLAT_FREERTOS) break; #endif #if !defined(WIN32) if (fstat(wsi->http.fop_fd->fd, &st)) { lwsl_info("unable to stat %s\n", path); goto notfound; } #else #if defined(LWS_HAVE__STAT32I64) { WCHAR buf[MAX_PATH]; MultiByteToWideChar(CP_UTF8, 0, path, -1, buf, LWS_ARRAY_SIZE(buf)); if (_wstat32i64(buf, &st)) { lwsl_info("unable to stat %s\n", path); goto notfound; } } #else if (stat(path, &st)) { lwsl_info("unable to stat %s\n", path); goto notfound; } #endif #endif wsi->http.fop_fd->mod_time = (uint32_t)st.st_mtime; fflags |= LWS_FOP_FLAG_MOD_TIME_VALID; #if !defined(WIN32) && !defined(LWS_PLAT_FREERTOS) if ((S_IFMT & st.st_mode) == S_IFLNK) { len = (size_t)readlink(path, sym, sizeof(sym) - 1); if (len) { lwsl_err("Failed to read link %s\n", path); goto notfound; } sym[len] = '\0'; lwsl_debug("symlink %s -> %s\n", path, sym); lws_snprintf(path, sizeof(path) - 1, "%s", sym); } #endif if ((S_IFMT & st.st_mode) == S_IFDIR) { lwsl_debug("default filename append to dir\n"); lws_snprintf(path, sizeof(path) - 1, "%s/%s/%s", origin, uri, m->def ? m->def : "index.html"); } } while ((S_IFMT & st.st_mode) != S_IFREG && spin < 5); if (spin == 5) lwsl_err("symlink loop %s \n", path); n = sprintf(sym, "%08llX%08lX", (unsigned long long)lws_vfs_get_length(wsi->http.fop_fd), (unsigned long)lws_vfs_get_mod_time(wsi->http.fop_fd)); /* disable ranges if IF_RANGE token invalid */ if (lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_IF_RANGE)) if (strcmp(sym, lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_IF_RANGE))) /* differs - defeat Range: */ wsi->http.ah->frag_index[WSI_TOKEN_HTTP_RANGE] = 0; if (lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_IF_NONE_MATCH)) { /* * he thinks he has some version of it already, * check if the tag matches */ if (!strcmp(sym, lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_IF_NONE_MATCH))) { char cache_control[50], *cc = "no-store"; int cclen = 8; lwsl_debug("%s: ETAG match %s %s\n", __func__, uri, origin); /* we don't need to send the payload */ if (lws_add_http_header_status(wsi, HTTP_STATUS_NOT_MODIFIED, &p, end)) { lwsl_err("%s: failed adding not modified\n", __func__); return -1; } if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_ETAG, (unsigned char *)sym, n, &p, end)) return -1; /* but we still need to send cache control... */ if (m->cache_max_age && m->cache_reusable) { if (!m->cache_revalidate) { cc = cache_control; cclen = sprintf(cache_control, "%s, max-age=%u", intermediates[wsi->cache_intermediaries], m->cache_max_age); } else { cc = cache_control; cclen = sprintf(cache_control, "must-revalidate, %s, max-age=%u", intermediates[wsi->cache_intermediaries], m->cache_max_age); } } if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CACHE_CONTROL, (unsigned char *)cc, cclen, &p, end)) return -1; if (lws_finalize_http_header(wsi, &p, end)) return -1; n = lws_write(wsi, start, lws_ptr_diff_size_t(p, start), LWS_WRITE_HTTP_HEADERS | LWS_WRITE_H2_STREAM_END); if (n != lws_ptr_diff(p, start)) { lwsl_err("_write returned %d from %ld\n", n, (long)(p - start)); return -1; } lws_vfs_file_close(&wsi->http.fop_fd); if (lws_http_transaction_completed(wsi)) return -1; return 0; } } if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_ETAG, (unsigned char *)sym, n, &p, end)) return -1; #endif mimetype = lws_get_mimetype(path, m); if (!mimetype) { lwsl_info("unknown mimetype for %s\n", path); if (lws_return_http_status(wsi, HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE, NULL) || lws_http_transaction_completed(wsi)) return -1; return 0; } if (!mimetype[0]) lwsl_debug("sending no mimetype for %s\n", path); wsi->sending_chunked = 0; wsi->interpreting = 0; /* * check if this is in the list of file suffixes to be interpreted by * a protocol */ while (pvo) { n = (int)strlen(path); if (n > (int)strlen(pvo->name) && !strcmp(&path[(unsigned int)n - strlen(pvo->name)], pvo->name)) { wsi->interpreting = 1; if (!wsi->mux_substream) wsi->sending_chunked = 1; wsi->protocol_interpret_idx = (char)( lws_vhost_name_to_protocol(wsi->a.vhost, pvo->value) - &lws_get_vhost(wsi)->protocols[0]); lwsl_debug("want %s interpreted by %s (pcol is %s)\n", path, wsi->a.vhost->protocols[ (int)wsi->protocol_interpret_idx].name, wsi->a.protocol->name); if (lws_bind_protocol(wsi, &wsi->a.vhost->protocols[ (int)wsi->protocol_interpret_idx], __func__)) return -1; if (lws_ensure_user_space(wsi)) return -1; break; } pvo = pvo->next; } if (wsi->sending_chunked) { if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_TRANSFER_ENCODING, (unsigned char *)"chunked", 7, &p, end)) return -1; } if (m->protocol) { const struct lws_protocols *pp = lws_vhost_name_to_protocol( wsi->a.vhost, m->protocol); if (lws_bind_protocol(wsi, pp, __func__)) return -1; args.p = (char *)p; args.max_len = lws_ptr_diff(end, p); if (pp->callback(wsi, LWS_CALLBACK_ADD_HEADERS, wsi->user_space, &args, 0)) return -1; p = (unsigned char *)args.p; } *p = '\0'; n = lws_serve_http_file(wsi, path, mimetype, (char *)start, lws_ptr_diff(p, start)); if (n < 0 || ((n > 0) && lws_http_transaction_completed(wsi))) return -1; /* error or can't reuse connection: close the socket */ return 0; notfound: return 1; } #endif #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) const struct lws_http_mount * lws_find_mount(struct lws *wsi, const char *uri_ptr, int uri_len) { const struct lws_http_mount *hm, *hit = NULL; int best = 0; hm = wsi->a.vhost->http.mount_list; while (hm) { if (uri_len >= hm->mountpoint_len && !strncmp(uri_ptr, hm->mountpoint, hm->mountpoint_len) && (uri_ptr[hm->mountpoint_len] == '\0' || uri_ptr[hm->mountpoint_len] == '/' || hm->mountpoint_len == 1) ) { #if defined(LWS_WITH_SYS_METRICS) lws_metrics_tag_wsi_add(wsi, "mnt", hm->mountpoint); #endif if (hm->origin_protocol == LWSMPRO_CALLBACK || ((hm->origin_protocol == LWSMPRO_CGI || lws_hdr_total_length(wsi, WSI_TOKEN_GET_URI) || lws_hdr_total_length(wsi, WSI_TOKEN_POST_URI) || #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) lws_hdr_total_length(wsi, WSI_TOKEN_PUT_URI) || lws_hdr_total_length(wsi, WSI_TOKEN_PATCH_URI) || lws_hdr_total_length(wsi, WSI_TOKEN_DELETE_URI) || #endif lws_hdr_total_length(wsi, WSI_TOKEN_HEAD_URI) || #if defined(LWS_ROLE_H2) (wsi->mux_substream && lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_COLON_PATH)) || #endif hm->protocol) && hm->mountpoint_len > best)) { best = hm->mountpoint_len; hit = hm; } } hm = hm->mount_next; } return hit; } #endif #if defined(LWS_WITH_HTTP_BASIC_AUTH) && !defined(LWS_PLAT_FREERTOS) && defined(LWS_WITH_FILE_OPS) static int lws_find_string_in_file(const char *filename, const char *string, int stringlen) { char buf[128]; int fd, match = 0, pos = 0, n = 0, hit = 0; fd = lws_open(filename, O_RDONLY); if (fd < 0) { lwsl_err("can't open auth file: %s\n", filename); return 0; } while (1) { if (pos == n) { n = (int)read(fd, buf, sizeof(buf)); if (n <= 0) { if (match == stringlen) hit = 1; break; } pos = 0; } if (match == stringlen) { if (buf[pos] == '\r' || buf[pos] == '\n') { hit = 1; break; } match = 0; } if (buf[pos] == string[match]) match++; else match = 0; pos++; } close(fd); return hit; } #endif #if defined(LWS_WITH_HTTP_BASIC_AUTH) int lws_unauthorised_basic_auth(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; unsigned char *start = pt->serv_buf + LWS_PRE, *p = start, *end = p + 2048; char buf[64]; int n; /* no auth... tell him it is required */ if (lws_add_http_header_status(wsi, HTTP_STATUS_UNAUTHORIZED, &p, end)) return -1; n = lws_snprintf(buf, sizeof(buf), "Basic realm=\"lwsws\""); if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_WWW_AUTHENTICATE, (unsigned char *)buf, n, &p, end)) return -1; if (lws_add_http_header_content_length(wsi, 0, &p, end)) return -1; if (lws_finalize_http_header(wsi, &p, end)) return -1; n = lws_write(wsi, start, lws_ptr_diff_size_t(p, start), LWS_WRITE_HTTP_HEADERS | LWS_WRITE_H2_STREAM_END); if (n < 0) return -1; return lws_http_transaction_completed(wsi); } #endif int lws_clean_url(char *p) { if (p[0] == 'h' && p[1] == 't' && p[2] == 't' && p[3] == 'p') { p += 4; if (*p == 's') p++; if (*p == ':') { p++; if (*p == '/') p++; } } while (*p) { if (p[0] == '/' && p[1] == '/') { char *p1 = p; while (*p1) { *p1 = p1[1]; p1++; } continue; } p++; } return 0; } static const unsigned char methods[] = { WSI_TOKEN_GET_URI, WSI_TOKEN_POST_URI, #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) WSI_TOKEN_OPTIONS_URI, WSI_TOKEN_PUT_URI, WSI_TOKEN_PATCH_URI, WSI_TOKEN_DELETE_URI, #endif WSI_TOKEN_CONNECT, WSI_TOKEN_HEAD_URI, #ifdef LWS_WITH_HTTP2 WSI_TOKEN_HTTP_COLON_PATH, #endif }; int lws_http_get_uri_and_method(struct lws *wsi, char **puri_ptr, int *puri_len) { int n, count = 0; for (n = 0; n < (int)LWS_ARRAY_SIZE(methods); n++) if (lws_hdr_total_length(wsi, methods[n])) count++; if (!count) { lwsl_warn("Missing URI in HTTP request\n"); return -1; } if (count != 1 && !((wsi->mux_substream || wsi->h2_stream_carries_ws) #if defined(LWS_ROLE_H2) && lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_COLON_PATH) #endif )) { lwsl_warn("multiple methods?\n"); return -1; } for (n = 0; n < (int)LWS_ARRAY_SIZE(methods); n++) if (lws_hdr_total_length(wsi, methods[n])) { *puri_ptr = lws_hdr_simple_ptr(wsi, methods[n]); *puri_len = lws_hdr_total_length(wsi, methods[n]); return n; } return -1; } #if defined(LWS_WITH_HTTP_BASIC_AUTH) enum lws_check_basic_auth_results lws_check_basic_auth(struct lws *wsi, const char *basic_auth_login_file, unsigned int auth_mode) { #if defined(LWS_WITH_FILE_OPS) char b64[160], plain[(sizeof(b64) * 3) / 4], *pcolon; int m, ml, fi, bar; if (!basic_auth_login_file && auth_mode == LWSAUTHM_DEFAULT) return LCBA_CONTINUE; /* Did he send auth? */ ml = lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_AUTHORIZATION); if (!ml) return LCBA_FAILED_AUTH; /* Disallow fragmentation monkey business */ fi = wsi->http.ah->frag_index[WSI_TOKEN_HTTP_AUTHORIZATION]; if (wsi->http.ah->frags[fi].nfrag) { lwsl_err("fragmented basic auth header not allowed\n"); return LCBA_FAILED_AUTH; } m = lws_hdr_copy(wsi, b64, sizeof(b64), WSI_TOKEN_HTTP_AUTHORIZATION); if (m < 7) { lwsl_err("b64 auth too long\n"); return LCBA_END_TRANSACTION; } b64[5] = '\0'; if (strcasecmp(b64, "Basic")) { lwsl_err("auth missing basic: %s\n", b64); return LCBA_END_TRANSACTION; } /* It'll be like Authorization: Basic QWxhZGRpbjpPcGVuU2VzYW1l */ m = lws_b64_decode_string(b64 + 6, plain, sizeof(plain) - 1); if (m < 0) { lwsl_err("plain auth too long\n"); return LCBA_END_TRANSACTION; } plain[m] = '\0'; pcolon = strchr(plain, ':'); if (!pcolon) { lwsl_err("basic auth format broken\n"); return LCBA_END_TRANSACTION; } switch (auth_mode) { case LWSAUTHM_DEFAULT: if (lws_find_string_in_file(basic_auth_login_file, plain, m)) break; lwsl_err("%s: basic auth lookup failed\n", __func__); return LCBA_FAILED_AUTH; case LWSAUTHM_BASIC_AUTH_CALLBACK: bar = wsi->a.protocol->callback(wsi, LWS_CALLBACK_VERIFY_BASIC_AUTHORIZATION, wsi->user_space, plain, (unsigned int)m); if (!bar) return LCBA_FAILED_AUTH; break; default: /* Invalid auth mode so lets fail all authentication attempts */ return LCBA_FAILED_AUTH; } /* * Rewrite WSI_TOKEN_HTTP_AUTHORIZATION so it is just the * authorized username */ *pcolon = '\0'; wsi->http.ah->frags[fi].len = (uint16_t)lws_ptr_diff_size_t(pcolon, &plain[0]); pcolon = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_AUTHORIZATION); strncpy(pcolon, plain, (unsigned int)(ml - 1)); pcolon[ml - 1] = '\0'; lwsl_info("%s: basic auth accepted for %s\n", __func__, lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_AUTHORIZATION)); return LCBA_CONTINUE; #else if (!basic_auth_login_file && auth_mode == LWSAUTHM_DEFAULT) return LCBA_CONTINUE; return LCBA_FAILED_AUTH; #endif } #endif #if defined(LWS_WITH_HTTP_PROXY) /* * Set up an onward http proxy connection according to the mount this * uri falls under. Notice this can also be starting the proxying of what was * originally an incoming h1 upgrade, or an h2 ws "upgrade". */ int lws_http_proxy_start(struct lws *wsi, const struct lws_http_mount *hit, char *uri_ptr, char ws) { char ads[96], host[96], *pcolon, *pslash, unix_skt = 0; struct lws_client_connect_info i; struct lws *cwsi; int n, na; unsigned int max_http_header_data = wsi->a.context->max_http_header_data > 256 ? wsi->a.context->max_http_header_data : 256; char *rpath = NULL; #if defined(LWS_ROLE_WS) if (ws) /* * Neither our inbound ws upgrade request side, nor our onward * ws client connection on our side can bind to the actual * protocol that only the remote inbound side and the remote * onward side understand. * * Instead these are both bound to our built-in "lws-ws-proxy" * protocol, which understands how to proxy between the two * sides. * * We bind the parent, inbound part here and our side of the * onward client connection is bound to the same handler using * the .local_protocol_name. */ lws_bind_protocol(wsi, &lws_ws_proxy, __func__); #endif memset(&i, 0, sizeof(i)); i.context = lws_get_context(wsi); if (hit->origin[0] == '+') unix_skt = 1; pcolon = strchr(hit->origin, ':'); pslash = strchr(hit->origin, '/'); if (!pslash) { lwsl_err("Proxy mount origin '%s' must have /\n", hit->origin); return -1; } if (unix_skt) { if (!pcolon) { lwsl_err("Proxy mount origin for unix skt must " "have address delimited by :\n"); return -1; } n = lws_ptr_diff(pcolon, hit->origin); pslash = pcolon; } else { if (pcolon > pslash) pcolon = NULL; if (pcolon) n = (int)(pcolon - hit->origin); else n = (int)(pslash - hit->origin); if (n >= (int)sizeof(ads) - 2) n = sizeof(ads) - 2; } memcpy(ads, hit->origin, (unsigned int)n); ads[n] = '\0'; i.address = ads; i.port = 80; if (hit->origin_protocol == LWSMPRO_HTTPS) { i.port = 443; i.ssl_connection = 1; } if (pcolon) i.port = atoi(pcolon + 1); rpath = lws_malloc(max_http_header_data, __func__); if (!rpath) return -1; /* rpath needs cleaning after this... ---> */ n = lws_snprintf(rpath, max_http_header_data - 1, "/%s/%s", pslash + 1, uri_ptr + hit->mountpoint_len) - 1; lws_clean_url(rpath); n = (int)strlen(rpath); if (n && rpath[n - 1] == '/') n--; na = lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_URI_ARGS); if (na) { char *p; int budg; if (!n) /* don't start with the ?... use the first / if so */ n++; p = rpath + n; if (na >= (int)max_http_header_data - n - 2) { lwsl_info("%s: query string %d longer " "than we can handle\n", __func__, na); lws_free(rpath); return -1; } *p++ = '?'; budg = lws_hdr_copy(wsi, p, (int)(&rpath[max_http_header_data - 1] - p), WSI_TOKEN_HTTP_URI_ARGS); if (budg > 0) p += budg; *p = '\0'; } i.path = rpath; lwsl_notice("%s: proxied path '%s'\n", __func__, i.path); /* incoming may be h1 or h2... if he sends h1 HOST, use that * directly, otherwise we must convert h2 :authority to h1 * host */ i.host = NULL; #if defined(LWS_ROLE_H2) n = lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_COLON_AUTHORITY); if (n > 0) i.host = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_AUTHORITY); else #endif { n = lws_hdr_total_length(wsi, WSI_TOKEN_HOST); if (n > 0) i.host = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HOST); } #if 0 if (i.address[0] != '+' || !lws_hdr_simple_ptr(wsi, WSI_TOKEN_HOST)) i.host = i.address; else i.host = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HOST); #endif i.origin = NULL; if (!ws) { if (lws_hdr_simple_ptr(wsi, WSI_TOKEN_POST_URI) #if defined(LWS_WITH_HTTP2) || ( lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_METHOD) && !strcmp(lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_METHOD), "post") ) #endif ) i.method = "POST"; else if (lws_hdr_simple_ptr(wsi, WSI_TOKEN_PUT_URI) #if defined(LWS_WITH_HTTP2) || ( lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_METHOD) && !strcmp(lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_METHOD), "put") ) #endif ) i.method = "PUT"; else if (lws_hdr_simple_ptr(wsi, WSI_TOKEN_PATCH_URI) #if defined(LWS_WITH_HTTP2) || ( lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_METHOD) && !strcmp(lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_METHOD), "patch") ) #endif ) i.method = "PATCH"; else if (lws_hdr_simple_ptr(wsi, WSI_TOKEN_DELETE_URI) #if defined(LWS_WITH_HTTP2) || ( lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_METHOD) && !strcmp(lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_METHOD), "delete") ) #endif ) i.method = "DELETE"; else i.method = "GET"; } if (i.host) lws_snprintf(host, sizeof(host), "%s:%u", i.host, wsi->a.vhost->listen_port); else lws_snprintf(host, sizeof(host), "%s:%d", i.address, i.port); i.host = host; i.alpn = "http/1.1"; i.parent_wsi = wsi; i.pwsi = &cwsi; #if defined(LWS_ROLE_WS) i.protocol = lws_hdr_simple_ptr(wsi, WSI_TOKEN_PROTOCOL); if (ws) i.local_protocol_name = "lws-ws-proxy"; #endif // i.uri_replace_from = hit->origin; // i.uri_replace_to = hit->mountpoint; lwsl_info("proxying to %s port %d url %s, ssl %d, from %s, to %s\n", i.address, i.port, i.path, i.ssl_connection, i.uri_replace_from, i.uri_replace_to); if (!lws_client_connect_via_info(&i)) { lwsl_err("proxy connect fail\n"); /* * ... we can't do the proxy action, but we can * cleanly return him a 503 and a description */ lws_return_http_status(wsi, HTTP_STATUS_SERVICE_UNAVAILABLE, "

    Service Temporarily Unavailable

    " "The server is temporarily unable to service " "your request due to maintenance downtime or " "capacity problems. Please try again later."); lws_free(rpath); return 1; } lws_free(rpath); lwsl_info("%s: setting proxy clientside on %s (parent %s)\n", __func__, lws_wsi_tag(cwsi), lws_wsi_tag(lws_get_parent(cwsi))); cwsi->http.proxy_clientside = 1; if (ws) { wsi->proxied_ws_parent = 1; cwsi->h1_ws_proxied = 1; if (i.protocol) { lwsl_debug("%s: (requesting '%s')\n", __func__, i.protocol); } } return 0; } #endif static const char * const oprot[] = { "http://", "https://" }; static int lws_http_redirect_hit(struct lws_context_per_thread *pt, struct lws *wsi, const struct lws_http_mount *hit, char *uri_ptr, int uri_len, int *h) { char *s; int n; *h = 0; s = uri_ptr + hit->mountpoint_len; /* * if we have a mountpoint like https://xxx.com/yyy * there is an implied / at the end for our purposes since * we can only mount on a "directory". * * But if we just go with that, the browser cannot understand * that he is actually looking down one "directory level", so * even though we give him /yyy/abc.html he acts like the * current directory level is /. So relative urls like "x.png" * wrongly look outside the mountpoint. * * Therefore if we didn't come in on a url with an explicit * / at the end, we must redirect to add it so the browser * understands he is one "directory level" down. */ if ((hit->mountpoint_len > 1 || (hit->origin_protocol == LWSMPRO_REDIR_HTTP || hit->origin_protocol == LWSMPRO_REDIR_HTTPS)) && (*s != '/' || (hit->origin_protocol == LWSMPRO_REDIR_HTTP || hit->origin_protocol == LWSMPRO_REDIR_HTTPS)) && (hit->origin_protocol != LWSMPRO_CGI && hit->origin_protocol != LWSMPRO_CALLBACK)) { unsigned char *start = pt->serv_buf + LWS_PRE, *p = start, *end = p + wsi->a.context->pt_serv_buf_size - LWS_PRE - 512; *h = 1; lwsl_info("Doing 301 '%s' org %s\n", s, hit->origin); /* > at start indicates deal with by redirect */ if (hit->origin_protocol == LWSMPRO_REDIR_HTTP || hit->origin_protocol == LWSMPRO_REDIR_HTTPS) n = lws_snprintf((char *)end, 256, "%s%s", oprot[hit->origin_protocol & 1], hit->origin); else { if (!lws_hdr_total_length(wsi, WSI_TOKEN_HOST)) { #if defined(LWS_ROLE_H2) if (!lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_COLON_AUTHORITY)) #endif goto bail_nuke_ah; #if defined(LWS_ROLE_H2) n = lws_snprintf((char *)end, 256, "%s%s%s/", oprot[!!lws_is_ssl(wsi)], lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_AUTHORITY), uri_ptr); #else ; #endif } else n = lws_snprintf((char *)end, 256, "%s%s%s/", oprot[!!lws_is_ssl(wsi)], lws_hdr_simple_ptr(wsi, WSI_TOKEN_HOST), uri_ptr); } lws_clean_url((char *)end); n = lws_http_redirect(wsi, HTTP_STATUS_MOVED_PERMANENTLY, end, n, &p, end); if ((int)n < 0) goto bail_nuke_ah; return lws_http_transaction_completed(wsi); } return 0; bail_nuke_ah: lws_header_table_detach(wsi, 1); return 1; } int lws_http_action(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; int uri_len = 0, meth, m, http_version_len, ha; const struct lws_http_mount *hit = NULL; enum http_version request_version; struct lws_process_html_args args; enum http_conn_type conn_type; char content_length_str[32]; char http_version_str[12]; char http_conn_str[25]; char *uri_ptr = NULL; #if defined(LWS_WITH_FILE_OPS) char *s; #endif unsigned int n; meth = lws_http_get_uri_and_method(wsi, &uri_ptr, &uri_len); if (meth < 0 || meth >= (int)LWS_ARRAY_SIZE(method_names)) goto bail_nuke_ah; lws_metrics_tag_wsi_add(wsi, "vh", wsi->a.vhost->name); lws_metrics_tag_wsi_add(wsi, "meth", method_names[meth]); /* we insist on absolute paths */ if (!uri_ptr || uri_ptr[0] != '/') { lws_return_http_status(wsi, HTTP_STATUS_FORBIDDEN, NULL); goto bail_nuke_ah; } lwsl_info("Method: '%s' (%d), request for '%s'\n", method_names[meth], meth, uri_ptr); if (wsi->role_ops && lws_rops_fidx(wsi->role_ops, LWS_ROPS_check_upgrades)) switch (lws_rops_func_fidx(wsi->role_ops, LWS_ROPS_check_upgrades). check_upgrades(wsi)) { case LWS_UPG_RET_DONE: return 0; case LWS_UPG_RET_CONTINUE: break; case LWS_UPG_RET_BAIL: goto bail_nuke_ah; } if (lws_ensure_user_space(wsi)) goto bail_nuke_ah; /* HTTP header had a content length? */ wsi->http.rx_content_length = 0; wsi->http.content_length_explicitly_zero = 0; if (lws_hdr_total_length(wsi, WSI_TOKEN_POST_URI) #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) || lws_hdr_total_length(wsi, WSI_TOKEN_PATCH_URI) || lws_hdr_total_length(wsi, WSI_TOKEN_PUT_URI) #endif ) wsi->http.rx_content_length = 100 * 1024 * 1024; if (lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH) && lws_hdr_copy(wsi, content_length_str, sizeof(content_length_str) - 1, WSI_TOKEN_HTTP_CONTENT_LENGTH) > 0) { wsi->http.rx_content_remain = wsi->http.rx_content_length = (lws_filepos_t)atoll(content_length_str); if (!wsi->http.rx_content_length) { wsi->http.content_length_explicitly_zero = 1; lwsl_debug("%s: explicit 0 content-length\n", __func__); } } if (wsi->mux_substream) { wsi->http.request_version = HTTP_VERSION_2; } else { /* http_version? Default to 1.0, override with token: */ request_version = HTTP_VERSION_1_0; /* Works for single digit HTTP versions. : */ http_version_len = lws_hdr_total_length(wsi, WSI_TOKEN_HTTP); if (http_version_len > 7 && lws_hdr_copy(wsi, http_version_str, sizeof(http_version_str) - 1, WSI_TOKEN_HTTP) > 0 && http_version_str[5] == '1' && http_version_str[7] == '1') request_version = HTTP_VERSION_1_1; wsi->http.request_version = request_version; /* HTTP/1.1 defaults to "keep-alive", 1.0 to "close" */ if (request_version == HTTP_VERSION_1_1) conn_type = HTTP_CONNECTION_KEEP_ALIVE; else conn_type = HTTP_CONNECTION_CLOSE; /* Override default if http "Connection:" header: */ if (lws_hdr_total_length(wsi, WSI_TOKEN_CONNECTION) && lws_hdr_copy(wsi, http_conn_str, sizeof(http_conn_str) - 1, WSI_TOKEN_CONNECTION) > 0) { http_conn_str[sizeof(http_conn_str) - 1] = '\0'; if (!strcasecmp(http_conn_str, "keep-alive")) conn_type = HTTP_CONNECTION_KEEP_ALIVE; else if (!strcasecmp(http_conn_str, "close")) conn_type = HTTP_CONNECTION_CLOSE; } wsi->http.conn_type = conn_type; } n = (unsigned int)wsi->a.protocol->callback(wsi, LWS_CALLBACK_FILTER_HTTP_CONNECTION, wsi->user_space, uri_ptr, (unsigned int)uri_len); if (n) { lwsl_info("LWS_CALLBACK_HTTP closing\n"); return 1; } /* * if there is content supposed to be coming, * put a timeout on it having arrived */ if (!wsi->mux_stream_immortal) lws_set_timeout(wsi, PENDING_TIMEOUT_HTTP_CONTENT, (int)wsi->a.context->timeout_secs); #if defined(LWS_WITH_TLS) if (wsi->tls.redirect_to_https) { /* * We accepted http:// only so we could redirect to * https://, so issue the redirect. Create the redirection * URI from the host: header, and regenerate the path part from * the parsed pieces */ unsigned char *start = pt->serv_buf + LWS_PRE, *p = start, *end = p + wsi->a.context->pt_serv_buf_size - LWS_PRE; n = (unsigned int)lws_hdr_total_length(wsi, WSI_TOKEN_HOST); if (!n || n > 128) goto bail_nuke_ah; if (!lws_hdr_simple_ptr(wsi, WSI_TOKEN_HOST)) goto bail_nuke_ah; p += lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), "https://"); memcpy(p, lws_hdr_simple_ptr(wsi, WSI_TOKEN_HOST), n); p += n; *p++ = '/'; if (uri_len >= lws_ptr_diff(end, p)) goto bail_nuke_ah; if (uri_ptr[0]) p--; memcpy(p, uri_ptr, (unsigned int)uri_len); p += uri_len; n = 0; while (lws_hdr_copy_fragment(wsi, (char *)p + 1, lws_ptr_diff(end, p) - 2, WSI_TOKEN_HTTP_URI_ARGS, (int)n) > 0) { *p = n ? '&' : '?'; p += strlen((char *)p); if (p >= end - 2) goto bail_nuke_ah; n++; } n = (unsigned int)lws_ptr_diff(p, start); p += LWS_PRE; n = (unsigned int)lws_http_redirect(wsi, HTTP_STATUS_MOVED_PERMANENTLY, start, (int)n, &p, end); if ((int)n < 0) goto bail_nuke_ah; return lws_http_transaction_completed(wsi); } #endif #ifdef LWS_WITH_ACCESS_LOG lws_prepare_access_log_info(wsi, uri_ptr, uri_len, meth); #endif /* can we serve it from the mount list? */ hit = lws_find_mount(wsi, uri_ptr, uri_len); if (!hit) { /* deferred cleanup and reset to protocols[0] */ lwsl_info("no hit\n"); if (lws_bind_protocol(wsi, &wsi->a.vhost->protocols[0], "no mount hit")) return 1; lwsi_set_state(wsi, LRS_DOING_TRANSACTION); m = wsi->a.protocol->callback(wsi, LWS_CALLBACK_HTTP, wsi->user_space, uri_ptr, (unsigned int)uri_len); goto after; } #if defined(LWS_WITH_FILE_OPS) s = uri_ptr + hit->mountpoint_len; #endif n = (unsigned int)lws_http_redirect_hit(pt, wsi, hit, uri_ptr, uri_len, &ha); if (ha) return (int)n; #if defined(LWS_WITH_HTTP_BASIC_AUTH) /* basic auth? */ switch (lws_check_basic_auth(wsi, hit->basic_auth_login_file, hit->auth_mask & AUTH_MODE_MASK)) { case LCBA_CONTINUE: break; case LCBA_FAILED_AUTH: return lws_unauthorised_basic_auth(wsi); case LCBA_END_TRANSACTION: lws_return_http_status(wsi, HTTP_STATUS_FORBIDDEN, NULL); return lws_http_transaction_completed(wsi); } #endif #if defined(LWS_WITH_HTTP_PROXY) /* * The mount is a reverse proxy? */ // if (hit) // lwsl_notice("%s: origin_protocol: %d\n", __func__, hit->origin_protocol); //else // lwsl_notice("%s: no hit\n", __func__); if (hit->origin_protocol == LWSMPRO_HTTPS || hit->origin_protocol == LWSMPRO_HTTP) { n = (unsigned int)lws_http_proxy_start(wsi, hit, uri_ptr, 0); // lwsl_notice("proxy start says %d\n", n); if (n) return (int)n; goto deal_body; } #endif /* * A particular protocol callback is mounted here? * * For the duration of this http transaction, bind us to the * associated protocol */ if (hit->origin_protocol == LWSMPRO_CALLBACK || hit->protocol) { const struct lws_protocols *pp; const char *name = hit->origin; if (hit->protocol) name = hit->protocol; pp = lws_vhost_name_to_protocol(wsi->a.vhost, name); if (!pp) { lwsl_err("Unable to find plugin '%s'\n", name); return 1; } if (lws_bind_protocol(wsi, pp, "http action CALLBACK bind")) return 1; lwsl_debug("%s: %s, checking access rights for mask 0x%x\n", __func__, hit->origin, hit->auth_mask); args.p = uri_ptr; args.len = uri_len; args.max_len = hit->auth_mask & ~AUTH_MODE_MASK; args.final = 0; /* used to signal callback dealt with it */ args.chunked = 0; n = (unsigned int)wsi->a.protocol->callback(wsi, LWS_CALLBACK_CHECK_ACCESS_RIGHTS, wsi->user_space, &args, 0); if (n) { lws_return_http_status(wsi, HTTP_STATUS_UNAUTHORIZED, NULL); goto bail_nuke_ah; } if (args.final) /* callback completely handled it well */ return 0; if (hit->cgienv && wsi->a.protocol->callback(wsi, LWS_CALLBACK_HTTP_PMO, wsi->user_space, (void *)hit->cgienv, 0)) return 1; if (lws_hdr_total_length(wsi, WSI_TOKEN_POST_URI)) { m = wsi->a.protocol->callback(wsi, LWS_CALLBACK_HTTP, wsi->user_space, uri_ptr + hit->mountpoint_len, (unsigned int)uri_len - hit->mountpoint_len); goto after; } } #ifdef LWS_WITH_CGI /* did we hit something with a cgi:// origin? */ if (hit->origin_protocol == LWSMPRO_CGI) { const char *cmd[] = { NULL, /* replace with cgi path */ NULL }; lwsl_debug("%s: cgi\n", __func__); cmd[0] = hit->origin; n = 5; if (hit->cgi_timeout) n = (unsigned int)hit->cgi_timeout; n = (unsigned int)lws_cgi(wsi, cmd, hit->mountpoint_len, (int)n, hit->cgienv); if (n) { lwsl_err("%s: cgi failed\n", __func__); return -1; } goto deal_body; } #endif #if defined(LWS_WITH_FILE_OPS) n = (unsigned int)(uri_len - lws_ptr_diff(s, uri_ptr)); if (s[0] == '\0' || (n == 1 && s[n - 1] == '/')) s = (char *)hit->def; if (!s) s = "index.html"; #endif wsi->cache_secs = (unsigned int)hit->cache_max_age; wsi->cache_reuse = hit->cache_reusable; wsi->cache_revalidate = hit->cache_revalidate; wsi->cache_intermediaries = hit->cache_intermediaries; #if defined(LWS_WITH_FILE_OPS) m = 1; if (hit->origin_protocol == LWSMPRO_FILE) m = lws_http_serve(wsi, s, hit->origin, hit); if (m > 0) #endif { /* * lws_return_http_status(wsi, HTTP_STATUS_NOT_FOUND, NULL); */ if (hit->protocol) { const struct lws_protocols *pp = lws_vhost_name_to_protocol( wsi->a.vhost, hit->protocol); /* coverity */ if (!pp) return 1; lwsi_set_state(wsi, LRS_DOING_TRANSACTION); if (lws_bind_protocol(wsi, pp, "http_action HTTP")) return 1; m = pp->callback(wsi, LWS_CALLBACK_HTTP, wsi->user_space, uri_ptr + hit->mountpoint_len, (size_t)(uri_len - hit->mountpoint_len)); } else m = wsi->a.protocol->callback(wsi, LWS_CALLBACK_HTTP, wsi->user_space, uri_ptr, (size_t)uri_len); } after: if (m) { lwsl_info("LWS_CALLBACK_HTTP closing\n"); return 1; } #if defined(LWS_WITH_CGI) || defined(LWS_WITH_HTTP_PROXY) deal_body: #endif /* * If we're not issuing a file, check for content_length or * HTTP keep-alive. No keep-alive header allocation for * ISSUING_FILE, as this uses HTTP/1.0. * * In any case, return 0 and let lws_read decide how to * proceed based on state */ if (lwsi_state(wsi) == LRS_ISSUING_FILE) return 0; /* Prepare to read body if we have a content length: */ lwsl_debug("wsi->http.rx_content_length %lld %d %d\n", (long long)wsi->http.rx_content_length, wsi->upgraded_to_http2, wsi->mux_substream); if (wsi->http.content_length_explicitly_zero && lws_hdr_total_length(wsi, WSI_TOKEN_POST_URI)) { /* * POST with an explicit content-length of zero * * If we don't give the user code the empty HTTP_BODY callback, * he may become confused to hear the HTTP_BODY_COMPLETION (due * to, eg, instantiation of lws_spa never happened). * * HTTP_BODY_COMPLETION is responsible for sending the result * status code and result body if any, and to do the transaction * complete processing. */ if (wsi->a.protocol->callback(wsi, LWS_CALLBACK_HTTP_BODY, wsi->user_space, NULL, 0)) return 1; if (wsi->a.protocol->callback(wsi, LWS_CALLBACK_HTTP_BODY_COMPLETION, wsi->user_space, NULL, 0)) return 1; return 0; } if (wsi->http.rx_content_length <= 0) return 0; if (lwsi_state(wsi) != LRS_DISCARD_BODY) { lwsi_set_state(wsi, LRS_BODY); lwsl_info("%s: %s: LRS_BODY state set (0x%x)\n", __func__, lws_wsi_tag(wsi), (int)wsi->wsistate); } wsi->http.rx_content_remain = wsi->http.rx_content_length; /* * At this point we have transitioned from deferred * action to expecting BODY on the stream wsi, if it's * in a bundle like h2. So if the stream wsi has its * own buflist, we need to deal with that first. */ while (1) { struct lws_tokens ebuf; int m; ebuf.len = (int)lws_buflist_next_segment_len(&wsi->buflist, &ebuf.token); if (!ebuf.len) break; lwsl_debug("%s: consuming %d\n", __func__, (int)ebuf.len); m = lws_read_h1(wsi, ebuf.token, (lws_filepos_t)ebuf.len); if (m < 0) return -1; if (lws_buflist_aware_finished_consuming(wsi, &ebuf, m, 1, __func__)) return -1; } return 0; bail_nuke_ah: lws_header_table_detach(wsi, 1); return 1; } int lws_confirm_host_header(struct lws *wsi) { struct lws_tokenize ts; lws_tokenize_elem e; int port = 80, n; char buf[128]; /* * this vhost wants us to validate what the * client sent against our vhost name */ if (!lws_hdr_total_length(wsi, WSI_TOKEN_HOST)) { lwsl_info("%s: missing host on upgrade\n", __func__); return 1; } #if defined(LWS_WITH_TLS) if (wsi->tls.ssl) port = 443; #endif n = lws_hdr_copy(wsi, buf, sizeof(buf) - 1, WSI_TOKEN_HOST); if (n <= 0) { lwsl_info("%s: missing or oversize host header\n", __func__); return 1; } ts.len = (size_t)n; lws_tokenize_init(&ts, buf, LWS_TOKENIZE_F_DOT_NONTERM /* server.com */| LWS_TOKENIZE_F_NO_FLOATS /* 1.server.com */| LWS_TOKENIZE_F_MINUS_NONTERM /* a-b.com */); if (lws_tokenize(&ts) != LWS_TOKZE_TOKEN) goto bad_format; if (strncmp(ts.token, wsi->a.vhost->name, ts.token_len)) { buf[(size_t)(ts.token - buf) + ts.token_len] = '\0'; lwsl_info("%s: '%s' in host hdr but vhost name %s\n", __func__, ts.token, wsi->a.vhost->name); return 1; } e = lws_tokenize(&ts); if (e == LWS_TOKZE_DELIMITER && ts.token[0] == ':') { if (lws_tokenize(&ts) != LWS_TOKZE_INTEGER) goto bad_format; else port = atoi(ts.token); } else if (e != LWS_TOKZE_ENDED) goto bad_format; if (wsi->a.vhost->listen_port != port) { lwsl_info("%s: host port %d mismatches vhost port %d\n", __func__, port, wsi->a.vhost->listen_port); return 1; } lwsl_debug("%s: host header OK\n", __func__); return 0; bad_format: lwsl_info("%s: bad host header format\n", __func__); return 1; } #if defined(LWS_WITH_SERVER) int lws_http_to_fallback(struct lws *wsi, unsigned char *obuf, size_t olen) { const struct lws_role_ops *role = &role_ops_raw_skt; const struct lws_protocols *p1, *protocol = &wsi->a.vhost->protocols[wsi->a.vhost->raw_protocol_index]; char ipbuf[64]; int n; if (wsi->a.vhost->listen_accept_role && lws_role_by_name(wsi->a.vhost->listen_accept_role)) role = lws_role_by_name(wsi->a.vhost->listen_accept_role); if (wsi->a.vhost->listen_accept_protocol) { p1 = lws_vhost_name_to_protocol(wsi->a.vhost, wsi->a.vhost->listen_accept_protocol); if (p1) protocol = p1; } lws_bind_protocol(wsi, protocol, __func__); lws_role_transition(wsi, LWSIFR_SERVER, LRS_ESTABLISHED, role); lws_header_table_detach(wsi, 0); lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); n = LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED; if (wsi->role_ops->adoption_cb[1]) n = wsi->role_ops->adoption_cb[1]; ipbuf[0] = '\0'; #if !defined(LWS_PLAT_OPTEE) lws_get_peer_simple(wsi, ipbuf, sizeof(ipbuf)); #endif lwsl_notice("%s: vh %s, peer: %s, role %s, " "protocol %s, cb %d, ah %p\n", __func__, wsi->a.vhost->name, ipbuf, role ? role->name : "null", protocol->name, n, wsi->http.ah); if ((wsi->a.protocol->callback)(wsi, (enum lws_callback_reasons)n, wsi->user_space, NULL, 0)) return 1; n = LWS_CALLBACK_RAW_RX; if (wsi->role_ops->rx_cb[lwsi_role_server(wsi)]) n = wsi->role_ops->rx_cb[lwsi_role_server(wsi)]; if (wsi->a.protocol->callback(wsi, (enum lws_callback_reasons)n, wsi->user_space, obuf, olen)) return 1; return 0; } int lws_handshake_server(struct lws *wsi, unsigned char **buf, size_t len) { struct lws_context *context = lws_get_context(wsi); struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; #if defined(LWS_WITH_HTTP2) struct allocated_headers *ah; #endif unsigned char *obuf = *buf; #if defined(LWS_WITH_HTTP2) char tbuf[128], *p; #endif size_t olen = len; int n = 0, m, i; if (len >= 10000000) { lwsl_err("%s: assert: len %ld\n", __func__, (long)len); assert(0); } if (!wsi->http.ah) { lwsl_err("%s: assert: NULL ah\n", __func__); assert(0); } while (len) { if (!lwsi_role_server(wsi) || !lwsi_role_http(wsi)) { lwsl_err("%s: bad wsi role 0x%x\n", __func__, (int)lwsi_role(wsi)); goto bail_nuke_ah; } i = (int)len; m = lws_parse(wsi, *buf, &i); lwsl_info("%s: parsed count %d\n", __func__, (int)len - i); (*buf) += (int)len - i; len = (unsigned int)i; if (m == LPR_DO_FALLBACK) { /* * http parser went off the rails and * LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ * ACCEPT_CONFIG is set on this vhost. * * We are transitioning from http with an AH, to * a backup role (raw-skt, by default). Drop * the ah, bind to the role with mode as * ESTABLISHED. */ raw_transition: if (lws_http_to_fallback(wsi, obuf, olen)) { lwsl_info("%s: fallback -> close\n", __func__); goto bail_nuke_ah; } (*buf) = obuf + olen; return 0; } if (m) { lwsl_info("lws_parse failed\n"); goto bail_nuke_ah; } /* coverity... */ if (!wsi->http.ah) goto bail_nuke_ah; if (wsi->http.ah->parser_state != WSI_PARSING_COMPLETE) continue; lwsl_parser("%s: lws_parse sees parsing complete\n", __func__); /* select vhost */ if (wsi->a.vhost->listen_port && lws_hdr_total_length(wsi, WSI_TOKEN_HOST)) { struct lws_vhost *vhost = lws_select_vhost( context, wsi->a.vhost->listen_port, lws_hdr_simple_ptr(wsi, WSI_TOKEN_HOST)); if (vhost) lws_vhost_bind_wsi(vhost, wsi); } else lwsl_info("no host\n"); if ((!lwsi_role_h2(wsi) || !lwsi_role_server(wsi)) && (!wsi->conn_stat_done)) wsi->conn_stat_done = 1; /* check for unwelcome guests */ #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) if (wsi->a.context->reject_service_keywords) { const struct lws_protocol_vhost_options *rej = wsi->a.context->reject_service_keywords; char ua[384], *msg = NULL; if (lws_hdr_copy(wsi, ua, sizeof(ua) - 1, WSI_TOKEN_HTTP_USER_AGENT) > 0) { #ifdef LWS_WITH_ACCESS_LOG char *uri_ptr = NULL; int meth, uri_len; #endif ua[sizeof(ua) - 1] = '\0'; while (rej) { if (!strstr(ua, rej->name)) { rej = rej->next; continue; } msg = strchr(rej->value, ' '); if (msg) msg++; lws_return_http_status(wsi, (unsigned int)atoi(rej->value), msg); #ifdef LWS_WITH_ACCESS_LOG meth = lws_http_get_uri_and_method(wsi, &uri_ptr, &uri_len); if (meth >= 0) lws_prepare_access_log_info(wsi, uri_ptr, uri_len, meth); /* wsi close will do the log */ #endif /* * We don't want anything from * this rejected guy. Follow * the close flow, not the * transaction complete flow. */ goto bail_nuke_ah; } } } #endif /* * So he may have come to us requesting one or another kind * of upgrade from http... but we may want to redirect him at * http level. In that case, we need to check the redirect * situation even though he's not actually wanting http and * prioritize returning that if there is one. */ { const struct lws_http_mount *hit = NULL; int uri_len = 0, ha, n; char *uri_ptr = NULL; n = lws_http_get_uri_and_method(wsi, &uri_ptr, &uri_len); if (n >= 0) { hit = lws_find_mount(wsi, uri_ptr, uri_len); if (hit) { n = lws_http_redirect_hit(pt, wsi, hit, uri_ptr, uri_len, &ha); if (ha) return n; } } } if (lws_hdr_total_length(wsi, WSI_TOKEN_CONNECT)) { lwsl_info("Changing to RAW mode\n"); goto raw_transition; } lwsi_set_state(wsi, LRS_PRE_WS_SERVING_ACCEPT); lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); if (lws_hdr_total_length(wsi, WSI_TOKEN_UPGRADE)) { const char *up = lws_hdr_simple_ptr(wsi, WSI_TOKEN_UPGRADE); if (strcasecmp(up, "websocket") && strcasecmp(up, "h2c")) { lwsl_info("Unknown upgrade '%s'\n", up); if (lws_return_http_status(wsi, HTTP_STATUS_FORBIDDEN, NULL) || lws_http_transaction_completed(wsi)) goto bail_nuke_ah; } n = user_callback_handle_rxflow(wsi->a.protocol->callback, wsi, LWS_CALLBACK_HTTP_CONFIRM_UPGRADE, wsi->user_space, (char *)up, 0); /* just hang up? */ if (n < 0) goto bail_nuke_ah; /* callback returned headers already, do t_c? */ if (n > 0) { if (lws_http_transaction_completed(wsi)) goto bail_nuke_ah; /* continue on */ return 0; } /* callback said 0, it was allowed */ if (wsi->a.vhost->options & LWS_SERVER_OPTION_VHOST_UPG_STRICT_HOST_CHECK && lws_confirm_host_header(wsi)) goto bail_nuke_ah; if (!strcasecmp(up, "websocket")) { #if defined(LWS_ROLE_WS) lws_metrics_tag_wsi_add(wsi, "upg", "ws"); lwsl_info("Upgrade to ws\n"); goto upgrade_ws; #endif } #if defined(LWS_WITH_HTTP2) if (!strcasecmp(up, "h2c")) { lws_metrics_tag_wsi_add(wsi, "upg", "h2c"); lwsl_info("Upgrade to h2c\n"); goto upgrade_h2c; } #endif } /* no upgrade ack... he remained as HTTP */ lwsl_info("%s: %s: No upgrade\n", __func__, lws_wsi_tag(wsi)); lwsi_set_state(wsi, LRS_ESTABLISHED); #if defined(LWS_WITH_FILE_OPS) wsi->http.fop_fd = NULL; #endif #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) lws_http_compression_validate(wsi); #endif lwsl_debug("%s: %s: ah %p\n", __func__, lws_wsi_tag(wsi), (void *)wsi->http.ah); n = lws_http_action(wsi); return n; #if defined(LWS_WITH_HTTP2) upgrade_h2c: if (!lws_hdr_total_length(wsi, WSI_TOKEN_HTTP2_SETTINGS)) { lwsl_info("missing http2_settings\n"); goto bail_nuke_ah; } lwsl_info("h2c upgrade...\n"); p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP2_SETTINGS); /* convert the peer's HTTP-Settings */ n = lws_b64_decode_string(p, tbuf, sizeof(tbuf)); if (n < 0) { lwsl_parser("HTTP2_SETTINGS too long\n"); return 1; } wsi->upgraded_to_http2 = 1; /* adopt the header info */ ah = wsi->http.ah; lws_role_transition(wsi, LWSIFR_SERVER, LRS_H2_AWAIT_PREFACE, &role_ops_h2); /* http2 union member has http union struct at start */ wsi->http.ah = ah; if (!wsi->h2.h2n) { wsi->h2.h2n = lws_zalloc(sizeof(*wsi->h2.h2n), "h2n"); if (!wsi->h2.h2n) return 1; } lws_h2_init(wsi); /* HTTP2 union */ lws_h2_settings(wsi, &wsi->h2.h2n->peer_set, (uint8_t *)tbuf, n); if (lws_hpack_dynamic_size(wsi, (int)wsi->h2.h2n->peer_set.s[ H2SET_HEADER_TABLE_SIZE])) return 1; strcpy(tbuf, "HTTP/1.1 101 Switching Protocols\x0d\x0a" "Connection: Upgrade\x0d\x0a" "Upgrade: h2c\x0d\x0a\x0d\x0a"); m = (int)strlen(tbuf); n = lws_issue_raw(wsi, (unsigned char *)tbuf, (unsigned int)m); if (n != m) { lwsl_debug("http2 switch: ERROR writing to socket\n"); return 1; } return 0; #endif #if defined(LWS_ROLE_WS) upgrade_ws: if (lws_process_ws_upgrade(wsi)) goto bail_nuke_ah; return 0; #endif } /* while all chars are handled */ return 0; bail_nuke_ah: /* drop the header info */ lws_header_table_detach(wsi, 1); return 1; } #endif int LWS_WARN_UNUSED_RESULT lws_http_transaction_completed(struct lws *wsi) { int n; if (wsi->http.cgi_transaction_complete) return 0; if (lws_has_buffered_out(wsi) #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) || wsi->http.comp_ctx.buflist_comp || wsi->http.comp_ctx.may_have_more #endif ) { /* * ...so he tried to send something large as the http reply, * it went as a partial, but he immediately said the * transaction was completed. * * Defer the transaction completed until the last part of the * partial is sent. */ lwsl_debug("%s: %s: deferring due to partial\n", __func__, lws_wsi_tag(wsi)); wsi->http.deferred_transaction_completed = 1; lws_callback_on_writable(wsi); return 0; } /* * Are we finishing the transaction before we have consumed any body? * * For h1 this would kill keepalive pipelining, and for h2, considering * it can extend over multiple DATA frames, it would kill the network * connection. */ if (wsi->http.rx_content_length && wsi->http.rx_content_remain) { /* * are we already in LRS_DISCARD_BODY and didn't clear the * remaining before trying to complete the transaction again? */ if (lwsi_state(wsi) == LRS_DISCARD_BODY) return -1; /* * let's defer transaction completed processing until we * discarded the remaining body */ lwsi_set_state(wsi, LRS_DISCARD_BODY); return 0; } #if defined(LWS_WITH_SYS_METRICS) { char tmp[10]; lws_snprintf(tmp, sizeof(tmp), "%u", wsi->http.response_code); lws_metrics_tag_wsi_add(wsi, "status", tmp); } #endif lwsl_info("%s: %s\n", __func__, lws_wsi_tag(wsi)); #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) lws_http_compression_destroy(wsi); #endif lws_access_log(wsi); if (!wsi->hdr_parsing_completed #if defined(LWS_WITH_CGI) && !wsi->http.cgi #endif ) { char peer[64]; #if !defined(LWS_PLAT_OPTEE) lws_get_peer_simple(wsi, peer, sizeof(peer) - 1); #else peer[0] = '\0'; #endif peer[sizeof(peer) - 1] = '\0'; lwsl_info("%s: (from %s) ignoring, ah parsing incomplete\n", __func__, peer); return 0; } #if defined(LWS_WITH_CGI) if (wsi->http.cgi) { lwsl_debug("%s: cleaning cgi\n", __func__); wsi->http.cgi_transaction_complete = 1; lws_cgi_remove_and_kill(wsi); lws_spawn_piped_destroy(&wsi->http.cgi->lsp); lws_sul_cancel(&wsi->http.cgi->sul_grace); lws_free_set_NULL(wsi->http.cgi); wsi->http.cgi_transaction_complete = 0; } #endif /* if we can't go back to accept new headers, drop the connection */ if (wsi->mux_substream) return 1; if (wsi->seen_zero_length_recv) return 1; if (wsi->http.conn_type != HTTP_CONNECTION_KEEP_ALIVE) { lwsl_info("%s: %s: close connection\n", __func__, lws_wsi_tag(wsi)); return 1; } if (lws_bind_protocol(wsi, &wsi->a.vhost->protocols[0], __func__)) return 1; /* * otherwise set ourselves up ready to go again, but because we have no * idea about the wsi writability, we make put it in a holding state * until we can verify POLLOUT. The part of this that confirms POLLOUT * with no partials is in lws_server_socket_service() below. */ lwsl_debug("%s: %s: setting DEF_ACT from 0x%x: %p\n", __func__, lws_wsi_tag(wsi), (int)wsi->wsistate, wsi->buflist); lwsi_set_state(wsi, LRS_DEFERRING_ACTION); wsi->http.tx_content_length = 0; wsi->http.tx_content_remain = 0; wsi->hdr_parsing_completed = 0; wsi->sending_chunked = 0; #ifdef LWS_WITH_ACCESS_LOG wsi->http.access_log.sent = 0; #endif #if defined(LWS_WITH_FILE_OPS) && (defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2)) if (lwsi_role_http(wsi) && lwsi_role_server(wsi) && wsi->http.fop_fd != NULL) lws_vfs_file_close(&wsi->http.fop_fd); #endif n = NO_PENDING_TIMEOUT; if (wsi->a.vhost->keepalive_timeout) n = PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE; lws_set_timeout(wsi, (enum pending_timeout)n, wsi->a.vhost->keepalive_timeout); /* * We already know we are on http1.1 / keepalive and the next thing * coming will be another header set. * * If there is no pending rx and we still have the ah, drop it and * reacquire a new ah when the new headers start to arrive. (Otherwise * we needlessly hog an ah indefinitely.) * * However if there is pending rx and we know from the keepalive state * that is already at least the start of another header set, simply * reset the existing header table and keep it. */ if (wsi->http.ah) { // lws_buflist_describe(&wsi->buflist, wsi, __func__); if (!lws_buflist_next_segment_len(&wsi->buflist, NULL)) { lwsl_debug("%s: %s: nothing in buflist, detaching ah\n", __func__, lws_wsi_tag(wsi)); lws_header_table_detach(wsi, 1); #ifdef LWS_WITH_TLS /* * additionally... if we are hogging an SSL instance * with no pending pipelined headers (or ah now), and * SSL is scarce, drop this connection without waiting */ if (wsi->a.vhost->tls.use_ssl && wsi->a.context->simultaneous_ssl_restriction && wsi->a.context->simultaneous_ssl == wsi->a.context->simultaneous_ssl_restriction) { lwsl_info("%s: simultaneous_ssl_restriction\n", __func__); return 1; } #endif } else { lwsl_info("%s: %s: resetting/keeping ah as pipeline\n", __func__, lws_wsi_tag(wsi)); lws_header_table_reset(wsi, 0); /* * If we kept the ah, we should restrict the amount * of time we are willing to keep it. Otherwise it * will be bound the whole time the connection remains * open. */ lws_set_timeout(wsi, PENDING_TIMEOUT_HOLDING_AH, wsi->a.vhost->keepalive_timeout); } /* If we're (re)starting on headers, need other implied init */ if (wsi->http.ah) wsi->http.ah->ues = URIES_IDLE; //lwsi_set_state(wsi, LRS_ESTABLISHED); // !!! } else if (lws_buflist_next_segment_len(&wsi->buflist, NULL)) if (lws_header_table_attach(wsi, 0)) lwsl_debug("acquired ah\n"); lwsl_debug("%s: %s: keep-alive await new transaction (state 0x%x)\n", __func__, lws_wsi_tag(wsi), (int)wsi->wsistate); lws_callback_on_writable(wsi); return 0; } #if defined(LWS_WITH_FILE_OPS) int lws_serve_http_file(struct lws *wsi, const char *file, const char *content_type, const char *other_headers, int other_headers_len) { struct lws_context *context = lws_get_context(wsi); struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; unsigned char *response = pt->serv_buf + LWS_PRE; #if defined(LWS_WITH_RANGES) struct lws_range_parsing *rp = &wsi->http.range; #endif int ret = 0, cclen = 8, n = HTTP_STATUS_OK; char cache_control[50], *cc = "no-store"; lws_fop_flags_t fflags = LWS_O_RDONLY; const struct lws_plat_file_ops *fops; lws_filepos_t total_content_length; unsigned char *p = response; unsigned char *end = p + context->pt_serv_buf_size - LWS_PRE; const char *vpath; #if defined(LWS_WITH_RANGES) int ranges; #endif if (wsi->handling_404) n = HTTP_STATUS_NOT_FOUND; /* * We either call the platform fops .open with first arg platform fops, * or we call fops_zip .open with first arg platform fops, and fops_zip * open will decide whether to switch to fops_zip or stay with fops_def. * * If wsi->http.fop_fd is already set, the caller already opened it */ if (!wsi->http.fop_fd) { fops = lws_vfs_select_fops(wsi->a.context->fops, file, &vpath); fflags |= lws_vfs_prepare_flags(wsi); wsi->http.fop_fd = fops->LWS_FOP_OPEN(wsi->a.context->fops, file, vpath, &fflags); if (!wsi->http.fop_fd) { lwsl_info("%s: Unable to open: '%s': errno %d\n", __func__, file, errno); if (lws_return_http_status(wsi, HTTP_STATUS_NOT_FOUND, NULL)) return -1; return !wsi->mux_substream; } } /* * Caution... wsi->http.fop_fd is live from here */ wsi->http.filelen = lws_vfs_get_length(wsi->http.fop_fd); total_content_length = wsi->http.filelen; #if defined(LWS_WITH_RANGES) ranges = lws_ranges_init(wsi, rp, wsi->http.filelen); lwsl_debug("Range count %d\n", ranges); /* * no ranges -> 200; * 1 range -> 206 + Content-Type: normal; Content-Range; * more -> 206 + Content-Type: multipart/byteranges * Repeat the true Content-Type in each multipart header * along with Content-Range */ if (ranges < 0) { /* it means he expressed a range in Range:, but it was illegal */ lws_return_http_status(wsi, HTTP_STATUS_REQ_RANGE_NOT_SATISFIABLE, NULL); if (lws_http_transaction_completed(wsi)) goto bail; /* <0 means just hang up */ lws_vfs_file_close(&wsi->http.fop_fd); return 0; /* == 0 means we did the transaction complete */ } if (ranges) n = HTTP_STATUS_PARTIAL_CONTENT; #endif if (lws_add_http_header_status(wsi, (unsigned int)n, &p, end)) goto bail; if ((wsi->http.fop_fd->flags & (LWS_FOP_FLAG_COMPR_ACCEPTABLE_GZIP | LWS_FOP_FLAG_COMPR_IS_GZIP)) == (LWS_FOP_FLAG_COMPR_ACCEPTABLE_GZIP | LWS_FOP_FLAG_COMPR_IS_GZIP)) { if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_ENCODING, (unsigned char *)"gzip", 4, &p, end)) goto bail; lwsl_info("file is being provided in gzip\n"); } #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) else { /* * if we know its very compressible, and we can use * compression, then use the most preferred compression * method that the client said he will accept */ if (!wsi->interpreting && ( !strncmp(content_type, "text/", 5) || !strcmp(content_type, "application/javascript") || !strcmp(content_type, "image/svg+xml"))) lws_http_compression_apply(wsi, NULL, &p, end, 0); } #endif if ( #if defined(LWS_WITH_RANGES) ranges < 2 && #endif content_type && content_type[0]) if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE, (unsigned char *)content_type, (int)strlen(content_type), &p, end)) goto bail; #if defined(LWS_WITH_RANGES) if (ranges >= 2) { /* multipart byteranges */ lws_strncpy(wsi->http.multipart_content_type, content_type, sizeof(wsi->http.multipart_content_type)); if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE, (unsigned char *) "multipart/byteranges; " "boundary=_lws", 20, &p, end)) goto bail; /* * our overall content length has to include * * - (n + 1) x "_lws\r\n" * - n x Content-Type: xxx/xxx\r\n * - n x Content-Range: bytes xxx-yyy/zzz\r\n * - n x /r/n * - the actual payloads (aggregated in rp->agg) * * Precompute it for the main response header */ total_content_length = (lws_filepos_t)rp->agg + 6 /* final _lws\r\n */; lws_ranges_reset(rp); while (lws_ranges_next(rp)) { n = lws_snprintf(cache_control, sizeof(cache_control), "bytes %llu-%llu/%llu", rp->start, rp->end, rp->extent); total_content_length = total_content_length + (lws_filepos_t)( 6 /* header _lws\r\n */ + /* Content-Type: xxx/xxx\r\n */ 14 + (int)strlen(content_type) + 2 + /* Content-Range: xxxx\r\n */ 15 + n + 2 + 2); /* /r/n */ } lws_ranges_reset(rp); lws_ranges_next(rp); } if (ranges == 1) { total_content_length = (lws_filepos_t)rp->agg; n = lws_snprintf(cache_control, sizeof(cache_control), "bytes %llu-%llu/%llu", rp->start, rp->end, rp->extent); if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_RANGE, (unsigned char *)cache_control, n, &p, end)) goto bail; } wsi->http.range.inside = 0; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_ACCEPT_RANGES, (unsigned char *)"bytes", 5, &p, end)) goto bail; #endif if (!wsi->mux_substream) { /* for http/1.1 ... */ if (!wsi->sending_chunked #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) && !wsi->http.lcs #endif ) { /* ... if not already using chunked and not using an * http compression translation, then send the naive * content length */ if (lws_add_http_header_content_length(wsi, total_content_length, &p, end)) goto bail; } else { #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) if (wsi->http.lcs) { /* ...otherwise, for http 1 it must go chunked. * For the compression case, the reason is we * compress on the fly and do not know the * compressed content-length until it has all * been sent. Http/1.1 pipelining must be able * to know where the transaction boundaries are * ... so chunking... */ if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_TRANSFER_ENCODING, (unsigned char *)"chunked", 7, &p, end)) goto bail; /* * ...this is fun, isn't it :-) For h1 that is * using an http compression translation, the * compressor must chunk its output privately. * * h2 doesn't need (or support) any of this * crap. */ lwsl_debug("setting chunking\n"); wsi->http.comp_ctx.chunking = 1; } #endif } } if (wsi->cache_secs && wsi->cache_reuse) { if (!wsi->cache_revalidate) { cc = cache_control; cclen = sprintf(cache_control, "%s, max-age=%u", intermediates[wsi->cache_intermediaries], wsi->cache_secs); } else { cc = cache_control; cclen = sprintf(cache_control, "must-revalidate, %s, max-age=%u", intermediates[wsi->cache_intermediaries], wsi->cache_secs); } } /* Only add cache control if its not specified by any other_headers. */ if (!other_headers || (!strstr(other_headers, "cache-control") && !strstr(other_headers, "Cache-Control"))) { if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CACHE_CONTROL, (unsigned char *)cc, cclen, &p, end)) goto bail; } if (other_headers) { if ((end - p) < other_headers_len) goto bail; memcpy(p, other_headers, (unsigned int)other_headers_len); p += other_headers_len; } if (lws_finalize_http_header(wsi, &p, end)) goto bail; ret = lws_write(wsi, response, lws_ptr_diff_size_t(p, response), LWS_WRITE_HTTP_HEADERS); if (ret != (p - response)) { lwsl_err("_write returned %d from %ld\n", ret, (long)(p - response)); goto bail; } wsi->http.filepos = 0; lwsi_set_state(wsi, LRS_ISSUING_FILE); if (lws_hdr_total_length(wsi, WSI_TOKEN_HEAD_URI)) { /* we do not emit the body */ lws_vfs_file_close(&wsi->http.fop_fd); if (lws_http_transaction_completed(wsi)) goto bail; return 0; } lws_callback_on_writable(wsi); return 0; bail: lws_vfs_file_close(&wsi->http.fop_fd); return -1; } #endif #if defined(LWS_WITH_FILE_OPS) int lws_serve_http_file_fragment(struct lws *wsi) { struct lws_context *context = wsi->a.context; struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; struct lws_process_html_args args; lws_filepos_t amount, poss; unsigned char *p, *pstart; #if defined(LWS_WITH_RANGES) unsigned char finished = 0; #endif #if defined(LWS_ROLE_H2) struct lws *nwsi; #endif int n, m; lwsl_debug("wsi->mux_substream %d\n", wsi->mux_substream); do { /* priority 1: buffered output */ if (lws_has_buffered_out(wsi)) { if (lws_issue_raw(wsi, NULL, 0) < 0) { lwsl_info("%s: closing\n", __func__); goto file_had_it; } break; } /* priority 2: buffered pre-compression-transform */ #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) if (wsi->http.comp_ctx.buflist_comp || wsi->http.comp_ctx.may_have_more) { enum lws_write_protocol wp = LWS_WRITE_HTTP; lwsl_info("%s: completing comp partial (buflist %p, may %d)\n", __func__, wsi->http.comp_ctx.buflist_comp, wsi->http.comp_ctx.may_have_more); if (lws_rops_fidx(wsi->role_ops, LWS_ROPS_write_role_protocol) && lws_rops_func_fidx(wsi->role_ops, LWS_ROPS_write_role_protocol). write_role_protocol(wsi, NULL, 0, &wp) < 0) { lwsl_info("%s signalling to close\n", __func__); goto file_had_it; } lws_callback_on_writable(wsi); break; } #endif if (wsi->http.filepos == wsi->http.filelen) goto all_sent; n = 0; p = pstart = pt->serv_buf + LWS_H2_FRAME_HEADER_LENGTH; #if defined(LWS_WITH_RANGES) if (wsi->http.range.count_ranges && !wsi->http.range.inside) { lwsl_notice("%s: doing range start %llu\n", __func__, wsi->http.range.start); if ((long long)lws_vfs_file_seek_cur(wsi->http.fop_fd, (lws_fileofs_t)wsi->http.range.start - (lws_fileofs_t)wsi->http.filepos) < 0) goto file_had_it; wsi->http.filepos = wsi->http.range.start; if (wsi->http.range.count_ranges > 1) { n = lws_snprintf((char *)p, context->pt_serv_buf_size - LWS_H2_FRAME_HEADER_LENGTH, "_lws\x0d\x0a" "Content-Type: %s\x0d\x0a" "Content-Range: bytes " "%llu-%llu/%llu\x0d\x0a" "\x0d\x0a", wsi->http.multipart_content_type, wsi->http.range.start, wsi->http.range.end, wsi->http.range.extent); p += n; } wsi->http.range.budget = wsi->http.range.end - wsi->http.range.start + 1; wsi->http.range.inside = 1; } #endif poss = context->pt_serv_buf_size; #if defined(LWS_ROLE_H2) /* * If it's h2, restrict any lump that we are sending to the * max h2 frame size the peer indicated he could handle in * his SETTINGS */ nwsi = lws_get_network_wsi(wsi); if (nwsi->h2.h2n && poss > (lws_filepos_t)nwsi->h2.h2n->peer_set.s[H2SET_MAX_FRAME_SIZE]) poss = (lws_filepos_t)nwsi->h2.h2n->peer_set.s[H2SET_MAX_FRAME_SIZE]; #endif poss = poss - (lws_filepos_t)(n + LWS_H2_FRAME_HEADER_LENGTH); if (wsi->http.tx_content_length) if (poss > wsi->http.tx_content_remain) poss = wsi->http.tx_content_remain; /* * If there is a hint about how much we will do well to send at * one time, restrict ourselves to only trying to send that. */ if (wsi->a.protocol->tx_packet_size && poss > wsi->a.protocol->tx_packet_size) poss = wsi->a.protocol->tx_packet_size; if (lws_rops_fidx(wsi->role_ops, LWS_ROPS_tx_credit)) { lws_filepos_t txc = (unsigned int)lws_rops_func_fidx(wsi->role_ops, LWS_ROPS_tx_credit). tx_credit(wsi, LWSTXCR_US_TO_PEER, 0); if (!txc) { /* * We shouldn't've been able to get the * WRITEABLE if we are skint */ lwsl_notice("%s: %s: no tx credit\n", __func__, lws_wsi_tag(wsi)); return 0; } if (txc < poss) poss = txc; /* * Tracking consumption of the actual payload amount * will be handled when the role data frame is sent... */ } #if defined(LWS_WITH_RANGES) if (wsi->http.range.count_ranges) { if (wsi->http.range.count_ranges > 1) poss -= 7; /* allow for final boundary */ if (poss > wsi->http.range.budget) poss = wsi->http.range.budget; } #endif if (wsi->sending_chunked) { /* we need to drop the chunk size in here */ p += 10; /* allow for the chunk to grow by 128 in translation */ poss -= 10 + 128; } amount = 0; if (lws_vfs_file_read(wsi->http.fop_fd, &amount, p, poss) < 0) goto file_had_it; /* caller will close */ if (wsi->sending_chunked) n = (int)amount; else n = lws_ptr_diff(p, pstart) + (int)amount; lwsl_debug("%s: sending %d\n", __func__, n); if (n) { lws_set_timeout(wsi, PENDING_TIMEOUT_HTTP_CONTENT, (int)context->timeout_secs); if (wsi->interpreting) { args.p = (char *)p; args.len = n; args.max_len = (int)(unsigned int)poss + 128; args.final = wsi->http.filepos + (unsigned int)n == wsi->http.filelen; args.chunked = wsi->sending_chunked; if (user_callback_handle_rxflow( wsi->a.vhost->protocols[ (int)wsi->protocol_interpret_idx].callback, wsi, LWS_CALLBACK_PROCESS_HTML, wsi->user_space, &args, 0) < 0) goto file_had_it; n = args.len; p = (unsigned char *)args.p; } else p = pstart; #if defined(LWS_WITH_RANGES) if (wsi->http.range.send_ctr + 1 == wsi->http.range.count_ranges && // last range wsi->http.range.count_ranges > 1 && // was 2+ ranges (ie, multipart) wsi->http.range.budget - amount == 0) {// final part n += lws_snprintf((char *)pstart + n, 6, "_lws\x0d\x0a"); // append trailing boundary lwsl_debug("added trailing boundary\n"); } #endif m = lws_write(wsi, p, (unsigned int)n, wsi->http.filepos + amount == wsi->http.filelen ? LWS_WRITE_HTTP_FINAL : LWS_WRITE_HTTP); if (m < 0) goto file_had_it; wsi->http.filepos += amount; #if defined(LWS_WITH_RANGES) if (wsi->http.range.count_ranges >= 1) { wsi->http.range.budget -= amount; if (wsi->http.range.budget == 0) { lwsl_notice("range budget exhausted\n"); wsi->http.range.inside = 0; wsi->http.range.send_ctr++; if (lws_ranges_next(&wsi->http.range) < 1) { finished = 1; goto all_sent; } } } #endif if (m != n) { /* adjust for what was not sent */ if (lws_vfs_file_seek_cur(wsi->http.fop_fd, m - n) == (lws_fileofs_t)-1) goto file_had_it; } } all_sent: if ((!lws_has_buffered_out(wsi) #if defined(LWS_WITH_HTTP_STREAM_COMPRESSION) && !wsi->http.comp_ctx.buflist_comp && !wsi->http.comp_ctx.may_have_more #endif ) && (wsi->http.filepos >= wsi->http.filelen #if defined(LWS_WITH_RANGES) || finished) #else ) #endif ) { lwsi_set_state(wsi, LRS_ESTABLISHED); /* we might be in keepalive, so close it off here */ lws_vfs_file_close(&wsi->http.fop_fd); lwsl_debug("file completed\n"); if (wsi->a.protocol->callback && user_callback_handle_rxflow(wsi->a.protocol->callback, wsi, LWS_CALLBACK_HTTP_FILE_COMPLETION, wsi->user_space, NULL, 0) < 0) { /* * For http/1.x, the choices from * transaction_completed are either * 0 to use the connection for pipelined * or nonzero to hang it up. * * However for http/2. while we are * still interested in hanging up the * nwsi if there was a network-level * fatal error, simply completing the * transaction is a matter of the stream * state, not the root connection at the * network level */ if (wsi->mux_substream) return 1; else return -1; } return 1; /* >0 indicates completed */ } /* * while(1) here causes us to spam the whole file contents into * a hugely bloated output buffer if it ever can't send the * whole chunk... */ } while (!lws_send_pipe_choked(wsi)); lws_callback_on_writable(wsi); return 0; /* indicates further processing must be done */ file_had_it: lws_vfs_file_close(&wsi->http.fop_fd); return -1; } #endif #if defined(LWS_WITH_SERVER) void lws_server_get_canonical_hostname(struct lws_context *context, const struct lws_context_creation_info *info) { if (lws_check_opt(info->options, LWS_SERVER_OPTION_SKIP_SERVER_CANONICAL_NAME)) return; #if !defined(LWS_PLAT_FREERTOS) /* find canonical hostname */ if (gethostname((char *)context->canonical_hostname, sizeof(context->canonical_hostname) - 1)) lws_strncpy((char *)context->canonical_hostname, "unknown", sizeof(context->canonical_hostname)); lwsl_cx_info(context, " canonical_hostname = %s\n", context->canonical_hostname); #else (void)context; #endif } #endif int lws_chunked_html_process(struct lws_process_html_args *args, struct lws_process_html_state *s) { char *sp, buffer[32]; const char *pc; int old_len, n; /* do replacements */ sp = args->p; old_len = args->len; args->len = 0; s->start = sp; while (sp < args->p + old_len) { if (args->len + 7 >= args->max_len) { lwsl_err("Used up interpret padding\n"); return -1; } if ((!s->pos && *sp == '$') || s->pos) { int hits = 0, hit = 0; if (!s->pos) s->start = sp; s->swallow[s->pos++] = *sp; if (s->pos == sizeof(s->swallow) - 1) goto skip; for (n = 0; n < s->count_vars; n++) if (!strncmp(s->swallow, s->vars[n], (unsigned int)s->pos)) { hits++; hit = n; } if (!hits) { skip: s->swallow[s->pos] = '\0'; memcpy(s->start, s->swallow, (unsigned int)s->pos); args->len++; s->pos = 0; sp = s->start + 1; continue; } if (hits == 1 && s->pos == (int)strlen(s->vars[hit])) { pc = s->replace(s->data, hit); if (!pc) pc = "NULL"; n = (int)strlen(pc); s->swallow[s->pos] = '\0'; if (n != s->pos) { memmove(s->start + n, s->start + s->pos, (unsigned int)(old_len - (sp - args->p) - 1)); old_len += (n - s->pos) + 1; } memcpy(s->start, pc, (unsigned int)n); args->len++; sp = s->start + 1; s->pos = 0; } sp++; continue; } args->len++; sp++; } if (args->chunked) { /* no space left for final chunk trailer */ if (args->final && args->len + 7 >= args->max_len) return -1; n = sprintf(buffer, "%X\x0d\x0a", args->len); args->p -= n; memcpy(args->p, buffer, (unsigned int)n); args->len += n; if (args->final) { sp = args->p + args->len; *sp++ = '\x0d'; *sp++ = '\x0a'; *sp++ = '0'; *sp++ = '\x0d'; *sp++ = '\x0a'; *sp++ = '\x0d'; *sp++ = '\x0a'; args->len += 7; } else { sp = args->p + args->len; *sp++ = '\x0d'; *sp++ = '\x0a'; args->len += 2; } } return 0; } libwebsockets-4.3.5/lib/roles/listen/000077500000000000000000000000001476025525100175625ustar00rootroot00000000000000libwebsockets-4.3.5/lib/roles/listen/CMakeLists.txt000066400000000000000000000027631476025525100223320ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # # The strategy is to only export to PARENT_SCOPE # # - changes to LIB_LIST # - changes to SOURCES # - includes via include_directories # # and keep everything else private include_directories(.) list(APPEND SOURCES roles/listen/ops-listen.c) # # Keep explicit parent scope exports at end # exports_to_parent_scope() libwebsockets-4.3.5/lib/roles/listen/ops-listen.c000066400000000000000000000152541476025525100220320ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include static int rops_handle_POLLIN_listen(struct lws_context_per_thread *pt, struct lws *wsi, struct lws_pollfd *pollfd) { struct lws_context *context = wsi->a.context; struct lws_filter_network_conn_args filt; lws_sock_file_fd_type fd; memset(&filt, 0, sizeof(filt)); /* if our vhost is going down, ignore it */ if (wsi->a.vhost->being_destroyed) return LWS_HPI_RET_HANDLED; /* pollin means a client has connected to us then * * pollout is a hack on esp32 for background accepts signalling * they completed */ do { struct lws *cwsi; int opts = LWS_ADOPT_SOCKET | LWS_ADOPT_ALLOW_SSL; if (!(pollfd->revents & (LWS_POLLIN | LWS_POLLOUT)) || !(pollfd->events & LWS_POLLIN)) break; #if defined(LWS_WITH_TLS) /* * can we really accept it, with regards to SSL limit? * another vhost may also have had POLLIN on his * listener this round and used it up already */ if (wsi->a.vhost->tls.use_ssl && context->simultaneous_ssl_restriction && context->simultaneous_ssl == context->simultaneous_ssl_restriction) /* * no... ignore it, he won't come again until * we are below the simultaneous_ssl_restriction * limit and POLLIN is enabled on him again */ break; #endif /* listen socket got an unencrypted connection... */ filt.clilen = sizeof(filt.cli_addr); /* * We cannot identify the peer who is in the listen * socket connect queue before we accept it; even if * we could, not accepting it due to PEER_LIMITS would * block the connect queue for other legit peers. */ filt.accept_fd = accept((int)pollfd->fd, (struct sockaddr *)&filt.cli_addr, &filt.clilen); if (filt.accept_fd == LWS_SOCK_INVALID) { if (LWS_ERRNO == LWS_EAGAIN || LWS_ERRNO == LWS_EWOULDBLOCK) { break; } lwsl_err("accept: errno %d\n", LWS_ERRNO); return LWS_HPI_RET_HANDLED; } if (context->being_destroyed) { compatible_close(filt.accept_fd); return LWS_HPI_RET_PLEASE_CLOSE_ME; } lws_plat_set_socket_options(wsi->a.vhost, filt.accept_fd, 0); #if defined(LWS_WITH_IPV6) lwsl_debug("accepted new conn port %u on fd=%d\n", ((filt.cli_addr.ss_family == AF_INET6) ? ntohs(((struct sockaddr_in6 *) &filt.cli_addr)->sin6_port) : ntohs(((struct sockaddr_in *) &filt.cli_addr)->sin_port)), filt.accept_fd); #else { struct sockaddr_in sain; memcpy(&sain, &filt.cli_addr, sizeof(sain)); lwsl_debug("accepted new conn port %u on fd=%d\n", ntohs(sain.sin_port), filt.accept_fd); } #endif /* * look at who we connected to and give user code a * chance to reject based on client IP. There's no * protocol selected yet so we issue this to * protocols[0] */ if ((wsi->a.vhost->protocols[0].callback)(wsi, LWS_CALLBACK_FILTER_NETWORK_CONNECTION, (void *)&filt, (void *)(lws_intptr_t)filt.accept_fd, 0)) { lwsl_debug("Callback denied net connection\n"); compatible_close(filt.accept_fd); return LWS_HPI_RET_HANDLED; } if (!(wsi->a.vhost->options & LWS_SERVER_OPTION_ADOPT_APPLY_LISTEN_ACCEPT_CONFIG)) opts |= LWS_ADOPT_HTTP; #if defined(LWS_WITH_TLS) if (!wsi->a.vhost->tls.use_ssl) #endif opts &= ~LWS_ADOPT_ALLOW_SSL; fd.sockfd = filt.accept_fd; cwsi = lws_adopt_descriptor_vhost(wsi->a.vhost, (lws_adoption_type)opts, fd, wsi->a.vhost->listen_accept_protocol, NULL); if (!cwsi) { lwsl_info("%s: vh %s: adopt failed\n", __func__, wsi->a.vhost->name); /* already closed cleanly as necessary */ return LWS_HPI_RET_WSI_ALREADY_DIED; } /* if (lws_server_socket_service_ssl(cwsi, accept_fd, 1)) { lws_close_free_wsi(cwsi, LWS_CLOSE_STATUS_NOSTATUS, "listen svc fail"); return LWS_HPI_RET_WSI_ALREADY_DIED; } lwsl_info("%s: new %s: wsistate 0x%lx, role_ops %s\n", __func__, lws_wsi_tag(cwsi), (unsigned long)cwsi->wsistate, cwsi->role_ops->name); */ } while (pt->fds_count < context->fd_limit_per_thread - 1 && wsi->position_in_fds_table != LWS_NO_FDS_POS && lws_poll_listen_fd(&pt->fds[wsi->position_in_fds_table]) > 0); return LWS_HPI_RET_HANDLED; } int rops_handle_POLLOUT_listen(struct lws *wsi) { return LWS_HP_RET_USER_SERVICE; } static const lws_rops_t rops_table_listen[] = { /* 1 */ { .handle_POLLIN = rops_handle_POLLIN_listen }, /* 2 */ { .handle_POLLOUT = rops_handle_POLLOUT_listen }, }; const struct lws_role_ops role_ops_listen = { /* role name */ "listen", /* alpn id */ NULL, /* rops_table */ rops_table_listen, /* rops_idx */ { /* LWS_ROPS_check_upgrades */ /* LWS_ROPS_pt_init_destroy */ 0x00, /* LWS_ROPS_init_vhost */ /* LWS_ROPS_destroy_vhost */ 0x00, /* LWS_ROPS_service_flag_pending */ /* LWS_ROPS_handle_POLLIN */ 0x01, /* LWS_ROPS_handle_POLLOUT */ /* LWS_ROPS_perform_user_POLLOUT */ 0x20, /* LWS_ROPS_callback_on_writable */ /* LWS_ROPS_tx_credit */ 0x00, /* LWS_ROPS_write_role_protocol */ /* LWS_ROPS_encapsulation_parent */ 0x00, /* LWS_ROPS_alpn_negotiated */ /* LWS_ROPS_close_via_role_protocol */ 0x00, /* LWS_ROPS_close_role */ /* LWS_ROPS_close_kill_connection */ 0x00, /* LWS_ROPS_destroy_role */ /* LWS_ROPS_adoption_bind */ 0x00, /* LWS_ROPS_client_bind */ /* LWS_ROPS_issue_keepalive */ 0x00, }, /* adoption_cb clnt, srv */ { 0, 0 }, /* rx_cb clnt, srv */ { 0, 0 }, /* writeable cb clnt, srv */ { 0, 0 }, /* close cb clnt, srv */ { 0, 0 }, /* protocol_bind_cb c,s */ { 0, 0 }, /* protocol_unbind_cb c,s */ { 0, 0 }, /* file_handle */ 0, }; libwebsockets-4.3.5/lib/roles/mqtt/000077500000000000000000000000001476025525100172515ustar00rootroot00000000000000libwebsockets-4.3.5/lib/roles/mqtt/CMakeLists.txt000066400000000000000000000032651476025525100220170ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # # The strategy is to only export to PARENT_SCOPE # # - changes to LIB_LIST # - changes to SOURCES # - includes via include_directories # # and keep everything else private include_directories(.) if (LWS_WITH_CLIENT) list(APPEND SOURCES roles/mqtt/mqtt.c roles/mqtt/ops-mqtt.c roles/mqtt/primitives.c roles/mqtt/client/client-mqtt.c roles/mqtt/client/client-mqtt-handshake.c ) endif() # # Keep explicit parent scope exports at end # exports_to_parent_scope() libwebsockets-4.3.5/lib/roles/mqtt/client/000077500000000000000000000000001476025525100205275ustar00rootroot00000000000000libwebsockets-4.3.5/lib/roles/mqtt/client/client-mqtt-handshake.c000066400000000000000000000132651476025525100250670ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * Sakthi Kannan * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include #define MQTT_CONNECT_MSG_BASE_LEN (12) struct lws * lws_mqtt_client_send_connect(struct lws *wsi) { /* static int */ /* lws_mqttc_abs_writeable(lws_abs_protocol_inst_t *api, size_t budget) */ const lws_mqttc_t *c = &wsi->mqtt->client; uint8_t b[256 + LWS_PRE], *start = b + LWS_PRE, *p = start; unsigned int len = MQTT_CONNECT_MSG_BASE_LEN; switch (lwsi_state(wsi)) { case LRS_MQTTC_IDLE: /* * Transport connected - this is our chance to do the * protocol connect action. */ /* 1. Fixed Headers */ if (lws_mqtt_fill_fixed_header(p++, LMQCP_CTOS_CONNECT, 0, 0, 0)) { lwsl_err("%s: Failled to fill fixed header\n", __func__); return NULL; } /* * 2. Remaining length - Add the lengths of client ID, * username and password and their length fields if * the respective flags are set. */ len += c->id->len; if (c->conn_flags & LMQCFT_USERNAME && c->username) { len = len + (unsigned int)c->username->len + 2; if (c->conn_flags & LMQCFT_PASSWORD) len += (unsigned int)(c->password ? c->password->len : 0) + 2u; } if (c->conn_flags & LMQCFT_WILL_FLAG && c->will.topic) { len = len + (unsigned int)c->will.topic->len + 2; len += (c->will.message ? c->will.message->len : 0) + 2u; } p += lws_mqtt_vbi_encode(len, p); /* * 3. Variable Header - Protocol name & level, Connect * flags and keep alive time (in secs). */ lws_ser_wu16be(p, 4); /* Length of protocol name */ p += 2; *p++ = 'M'; *p++ = 'Q'; *p++ = 'T'; *p++ = 'T'; *p++ = MQTT_VER_3_1_1; *p++ = (uint8_t)c->conn_flags; lws_ser_wu16be(p, c->keep_alive_secs); p += 2; /* * 4. Payload - Client ID, Will topic & message, * Username & password. */ if (lws_mqtt_str_is_not_empty(c->id)) { lws_ser_wu16be(p, c->id->len); p += 2; memcpy(p, c->id->buf, c->id->len); p += c->id->len; } else { /* * If the Client supplies a zero-byte * ClientId, the Client MUST also set * CleanSession to 1 [MQTT-3.1.3-7]. */ if (!(c->conn_flags & LMQCFT_CLEAN_START)) { lwsl_err("%s: Empty client ID needs a clean start\n", __func__); return NULL; } *p++ = 0; } if (c->conn_flags & LMQCFT_WILL_FLAG) { if (lws_mqtt_str_is_not_empty(c->will.topic)) { lws_ser_wu16be(p, c->will.topic->len); p += 2; memcpy(p, c->will.topic->buf, c->will.topic->len); p += c->will.topic->len; if (lws_mqtt_str_is_not_empty(c->will.message)) { lws_ser_wu16be(p, c->will.message->len); p += 2; memcpy(p, c->will.message->buf, c->will.message->len); p += c->will.message->len; } else { lws_ser_wu16be(p, 0); p += 2; } } else { lwsl_err("%s: Missing Will Topic\n", __func__); return NULL; } } if (c->conn_flags & LMQCFT_USERNAME) { /* * Detailed sanity check on the username and * password strings. */ if (lws_mqtt_str_is_not_empty(c->username)) { lws_ser_wu16be(p, c->username->len); p += 2; memcpy(p, c->username->buf, c->username->len); p += c->username->len; } else { lwsl_err("%s: Empty / missing Username!\n", __func__); return NULL; } if (c->conn_flags & LMQCFT_PASSWORD) { if (lws_mqtt_str_is_not_empty(c->password)) { lws_ser_wu16be(p, c->password->len); p += 2; memcpy(p, c->password->buf, c->password->len); p += c->password->len; } else { lws_ser_wu16be(p, 0); p += 2; } } } else if (c->conn_flags & LMQCFT_PASSWORD) { lwsl_err("%s: Unsupported - Password without username\n", __func__); return NULL; } break; default: lwsl_err("%s: unexpected state %d\n", __func__, lwsi_state(wsi)); return NULL; } /* * Perform the actual write */ if (lws_write(wsi, (unsigned char *)&b[LWS_PRE], lws_ptr_diff_size_t(p, start), LWS_WRITE_BINARY) != lws_ptr_diff(p, start)) { lwsl_notice("%s: write failed\n", __func__); return NULL; } return wsi; } struct lws * lws_mqtt_client_send_disconnect(struct lws *wsi) { uint8_t b[256 + LWS_PRE], *start = b + LWS_PRE, *p = start; /* 1. Fixed Headers */ if (lws_mqtt_fill_fixed_header(p++, LMQCP_DISCONNECT, 0, 0, 0)) { lwsl_err("%s: Failled to fill fixed header\n", __func__); return NULL; } *p++ = 0; if (lws_write(wsi, (unsigned char *)&b[LWS_PRE], lws_ptr_diff_size_t(p, start), LWS_WRITE_BINARY) != lws_ptr_diff(p, start)) { lwsl_err("%s: write failed\n", __func__); return NULL; } return wsi; } libwebsockets-4.3.5/lib/roles/mqtt/client/client-mqtt.c000066400000000000000000000232411476025525100231360ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /* * You can leave buf NULL, if so it will be allocated on the heap once the * actual length is known. nf should be 0, it will be set at allocation time. * * Or you can ensure no allocation and use an external buffer by setting buf * and lim. But buf must be in the ep context somehow, since it may have to * survive returns to the event loop unchanged. Set nf to 0 in this case. * * Or you can set buf to an externally allocated buffer, in which case you may * set nf so it will be freed when the string is "freed". */ #include "private-lib-core.h" /* #include "lws-mqtt.h" */ /* 3.1.3.1-5: MUST allow... that contain only the characters... */ static const uint8_t *code = (const uint8_t *) "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; static int lws_mqtt_generate_id(struct lws* wsi, lws_mqtt_str_t **ms, const char *client_id) { struct lws_context *context = wsi->a.context; uint16_t ran[24]; /* 16-bit so wrap bias from %62 diluted by ~1000 */ size_t n, len; uint8_t *buf; if (client_id) len = strlen(client_id); else len = LWS_MQTT_RANDOM_CIDLEN; *ms = lws_mqtt_str_create((uint16_t)(len + 1)); if (!*ms) return 1; buf = lws_mqtt_str_next(*ms, NULL); if (client_id) { lws_strnncpy((char *)buf, client_id, len, len + 1); lwsl_notice("%s: User space provided a client ID '%s'\n", __func__, (const char *)buf); } else { lwsl_notice("%s: generating random client id\n", __func__); n = len * sizeof(ran[0]); if (lws_get_random(context, ran, n) != n) { lws_mqtt_str_free(ms); return 1; } for (n = 0; n < len; n++) buf[n] = code[ran[n] % 62]; buf[len] = '\0'; } if (lws_mqtt_str_advance(*ms, (uint16_t)len)) { lws_mqtt_str_free(ms); return 1; } return 0; } int lws_read_mqtt(struct lws *wsi, unsigned char *buf, lws_filepos_t len) { lws_mqttc_t *c = &wsi->mqtt->client; return _lws_mqtt_rx_parser(wsi, &c->par, buf, (size_t)len); } int lws_create_client_mqtt_object(const struct lws_client_connect_info *i, struct lws *wsi) { lws_mqttc_t *c; const lws_mqtt_client_connect_param_t *cp = i->mqtt_cp; /* allocate the ws struct for the wsi */ wsi->mqtt = lws_zalloc(sizeof(*wsi->mqtt), "client mqtt struct"); if (!wsi->mqtt) goto oom; wsi->mqtt->wsi = wsi; c = &wsi->mqtt->client; if (lws_mqtt_generate_id(wsi, &c->id, cp->client_id)) { lwsl_err("%s: Error generating client ID\n", __func__); return 1; } lwsl_info("%s: using client id '%.*s'\n", __func__, c->id->len, (const char *)c->id->buf); if (cp->clean_start || !(cp->client_id && cp->client_id[0])) c->conn_flags = LMQCFT_CLEAN_START; if (cp->client_id_nofree) c->conn_flags |= LMQCFT_CLIENT_ID_NOFREE; if (cp->username_nofree) c->conn_flags |= LMQCFT_USERNAME_NOFREE; if (cp->password_nofree) c->conn_flags |= LMQCFT_PASSWORD_NOFREE; if (!(c->conn_flags & LMQCFT_CLIENT_ID_NOFREE)) lws_free((void *)cp->client_id); c->keep_alive_secs = cp->keep_alive; c->aws_iot = cp->aws_iot; if (cp->will_param.topic && *cp->will_param.topic) { c->will.topic = lws_mqtt_str_create_cstr_dup( cp->will_param.topic, 0); if (!c->will.topic) goto oom1; c->conn_flags |= LMQCFT_WILL_FLAG; if (cp->will_param.message) { c->will.message = lws_mqtt_str_create_cstr_dup( cp->will_param.message, 0); if (!c->will.message) goto oom2; } c->conn_flags = (uint16_t)(unsigned int)(c->conn_flags | ((cp->will_param.qos << 3) & LMQCFT_WILL_QOS_MASK)); c->conn_flags |= (uint16_t)((!!cp->will_param.retain) * LMQCFT_WILL_RETAIN); } if (cp->username && *cp->username) { c->username = lws_mqtt_str_create_cstr_dup(cp->username, 0); if (!c->username) goto oom3; c->conn_flags |= LMQCFT_USERNAME; if (!(c->conn_flags & LMQCFT_USERNAME_NOFREE)) lws_free((void *)cp->username); if (cp->password) { c->password = lws_mqtt_str_create_cstr_dup(cp->password, 0); if (!c->password) goto oom4; c->conn_flags |= LMQCFT_PASSWORD; if (!(c->conn_flags & LMQCFT_PASSWORD_NOFREE)) lws_free((void *)cp->password); } } return 0; oom4: lws_mqtt_str_free(&c->username); oom3: lws_mqtt_str_free(&c->will.message); oom2: lws_mqtt_str_free(&c->will.topic); oom1: lws_mqtt_str_free(&c->id); oom: lwsl_err("%s: OOM!\n", __func__); return 1; } int lws_mqtt_client_socket_service(struct lws *wsi, struct lws_pollfd *pollfd, struct lws *wsi_conn) { struct lws_context *context = wsi->a.context; struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; int n = 0, m = 0; struct lws_tokens ebuf; int buffered = 0; int pending = 0; #if defined(LWS_WITH_TLS) char erbuf[128]; #endif const char *cce = NULL; switch (lwsi_state(wsi)) { #if defined(LWS_WITH_SOCKS5) /* SOCKS Greeting Reply */ case LRS_WAITING_SOCKS_GREETING_REPLY: case LRS_WAITING_SOCKS_AUTH_REPLY: case LRS_WAITING_SOCKS_CONNECT_REPLY: switch (lws_socks5c_handle_state(wsi, pollfd, &cce)) { case LW5CHS_RET_RET0: return 0; case LW5CHS_RET_BAIL3: goto bail3; case LW5CHS_RET_STARTHS: /* * Now we got the socks5 connection, we need to go down * the tls path on it if that's what we want */ if (!(wsi->tls.use_ssl & LCCSCF_USE_SSL)) goto start_ws_handshake; switch (lws_client_create_tls(wsi, &cce, 0)) { case 0: break; case 1: return 0; default: goto bail3; } break; default: break; } break; #endif case LRS_WAITING_DNS: /* * we are under PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE * timeout protection set in client-handshake.c */ if (!lws_client_connect_2_dnsreq(wsi)) { /* closed */ lwsl_client("closed\n"); return -1; } /* either still pending connection, or changed mode */ return 0; case LRS_WAITING_CONNECT: /* * we are under PENDING_TIMEOUT_SENT_CLIENT_HANDSHAKE * timeout protection set in client-handshake.c */ if (pollfd->revents & LWS_POLLOUT) lws_client_connect_3_connect(wsi, NULL, NULL, 0, NULL); break; #if defined(LWS_WITH_TLS) case LRS_WAITING_SSL: if (wsi->tls.use_ssl & LCCSCF_USE_SSL) { n = lws_ssl_client_connect2(wsi, erbuf, sizeof(erbuf)); if (!n) return 0; if (n < 0) { cce = erbuf; goto bail3; } } else wsi->tls.ssl = NULL; #endif /* LWS_WITH_TLS */ /* fallthru */ #if defined(LWS_WITH_SOCKS5) start_ws_handshake: #endif lwsi_set_state(wsi, LRS_MQTTC_IDLE); lws_set_timeout(wsi, PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND, (int)context->timeout_secs); /* fallthru */ case LRS_MQTTC_IDLE: /* * we should be ready to send out MQTT CONNECT */ lwsl_info("%s: %s: Transport established, send out CONNECT\n", __func__, lws_wsi_tag(wsi)); if (lws_change_pollfd(wsi, LWS_POLLOUT, 0)) return -1; if (!lws_mqtt_client_send_connect(wsi)) { lwsl_err("%s: Unable to send MQTT CONNECT\n", __func__); return -1; } if (lws_change_pollfd(wsi, 0, LWS_POLLIN)) return -1; lwsi_set_state(wsi, LRS_MQTTC_AWAIT_CONNACK); return 0; case LRS_ESTABLISHED: case LRS_MQTTC_AWAIT_CONNACK: buffered = 0; ebuf.token = pt->serv_buf; ebuf.len = (int)wsi->a.context->pt_serv_buf_size; if ((unsigned int)ebuf.len > wsi->a.context->pt_serv_buf_size) ebuf.len = (int)wsi->a.context->pt_serv_buf_size; if ((int)pending > ebuf.len) pending = (char)ebuf.len; ebuf.len = lws_ssl_capable_read(wsi, ebuf.token, (unsigned int)(pending ? pending : ebuf.len)); switch (ebuf.len) { case 0: lwsl_info("%s: zero length read\n", __func__); goto fail; case LWS_SSL_CAPABLE_MORE_SERVICE: lwsl_info("SSL Capable more service\n"); return 0; case LWS_SSL_CAPABLE_ERROR: lwsl_info("%s: LWS_SSL_CAPABLE_ERROR\n", __func__); goto fail; } if (ebuf.len < 0) n = -1; else n = lws_read_mqtt(wsi, ebuf.token, (unsigned int)ebuf.len); if (n < 0) { lwsl_err("%s: Parsing packet failed\n", __func__); goto fail; } m = ebuf.len - n; // lws_buflist_describe(&wsi->buflist, wsi, __func__); lwsl_debug("%s: consuming %d / %d\n", __func__, n, ebuf.len); if (lws_buflist_aware_finished_consuming(wsi, &ebuf, m, buffered, __func__)) return -1; return 0; #if defined(LWS_WITH_TLS) || defined(LWS_WITH_SOCKS5) bail3: #endif lwsl_info("closing conn at LWS_CONNMODE...SERVER_REPLY\n"); if (cce) lwsl_info("reason: %s\n", cce); lws_inform_client_conn_fail(wsi, (void *)cce, strlen(cce)); lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "cbail3"); return -1; default: break; } return 0; fail: lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "mqtt svc fail"); return LWS_HPI_RET_WSI_ALREADY_DIED; } libwebsockets-4.3.5/lib/roles/mqtt/mqtt.c000066400000000000000000002030411476025525100204020ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * MQTT v5 * * http://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html * * Control Packet structure * * - Always: 2+ byte: Fixed Hdr * - Required in some: variable: Variable Hdr + [(CONNECT)Will Props] + Props * - Required in some: variable: Payload * * For CONNECT, the props if present MUST be in the order [MQTT-3.1.3-1] * * - Client Identifier * - Will Properties * - Will Topic * - Will Payload * - User Name * - Password */ #include "private-lib-core.h" #include #include #include typedef enum { LMQPRS_AWAITING_CONNECT, } lws_mqtt_protocol_server_connstate_t; const char * const reason_names_g1[] = { "Success / Normal disconnection / QoS0", "QoS1", "QoS2", "Disconnect Will", "No matching subscriber", "No subscription existed", "Continue authentication", "Re-authenticate" }; const char * const reason_names_g2[] = { "Unspecified error", "Malformed packet", "Protocol error", "Implementation specific error", "Unsupported protocol", "Client ID invalid", "Bad credentials", "Not Authorized", "Server Unavailable", "Server Busy", "Banned", "Server Shutting Down", "Bad Authentication Method", "Keepalive Timeout", "Session taken over", "Topic Filter Invalid", "Packet ID in use", "Packet ID not found", "Max RX Exceeded", "Topic Alias Invalid", "Packet too large", "Ratelimit", "Quota Exceeded", "Administrative Action", "Payload format invalid", "Retain not supported", "QoS not supported", "Use another server", "Server Moved", "Shared subscriptions not supported", "Connection rate exceeded", "Maximum Connect Time", "Subscription IDs not supported", "Wildcard subscriptions not supported" }; #define LMQCP_WILL_PROPERTIES 0 /* For each property, a bitmap describing which commands it is valid for */ static const uint16_t property_valid[] = { [LMQPROP_PAYLOAD_FORMAT_INDICATOR] = (1 << LMQCP_PUBLISH) | (1 << LMQCP_WILL_PROPERTIES), [LMQPROP_MESSAGE_EXPIRY_INTERVAL] = (1 << LMQCP_PUBLISH) | (1 << LMQCP_WILL_PROPERTIES), [LMQPROP_CONTENT_TYPE] = (1 << LMQCP_PUBLISH) | (1 << LMQCP_WILL_PROPERTIES), [LMQPROP_RESPONSE_TOPIC] = (1 << LMQCP_PUBLISH) | (1 << LMQCP_WILL_PROPERTIES), [LMQPROP_CORRELATION_DATA] = (1 << LMQCP_PUBLISH) | (1 << LMQCP_WILL_PROPERTIES), [LMQPROP_SUBSCRIPTION_IDENTIFIER] = (1 << LMQCP_PUBLISH) | (1 << LMQCP_CTOS_SUBSCRIBE), [LMQPROP_SESSION_EXPIRY_INTERVAL] = (1 << LMQCP_CTOS_CONNECT) | (1 << LMQCP_STOC_CONNACK) | (1 << LMQCP_DISCONNECT), [LMQPROP_ASSIGNED_CLIENT_IDENTIFIER] = (1 << LMQCP_STOC_CONNACK), [LMQPROP_SERVER_KEEP_ALIVE] = (1 << LMQCP_STOC_CONNACK), [LMQPROP_AUTHENTICATION_METHOD] = (1 << LMQCP_CTOS_CONNECT) | (1 << LMQCP_STOC_CONNACK) | (1 << LMQCP_AUTH), [LMQPROP_AUTHENTICATION_DATA] = (1 << LMQCP_CTOS_CONNECT) | (1 << LMQCP_STOC_CONNACK) | (1 << LMQCP_AUTH), [LMQPROP_REQUEST_PROBLEM_INFORMATION] = (1 << LMQCP_CTOS_CONNECT), [LMQPROP_WILL_DELAY_INTERVAL] = (1 << LMQCP_WILL_PROPERTIES), [LMQPROP_REQUEST_RESPONSE_INFORMATION] = (1 << LMQCP_CTOS_CONNECT), [LMQPROP_RESPONSE_INFORMATION] = (1 << LMQCP_STOC_CONNACK), [LMQPROP_SERVER_REFERENCE] = (1 << LMQCP_STOC_CONNACK) | (1 << LMQCP_DISCONNECT), [LMQPROP_REASON_STRING] = (1 << LMQCP_STOC_CONNACK) | (1 << LMQCP_PUBACK) | (1 << LMQCP_PUBREC) | (1 << LMQCP_PUBREL) | (1 << LMQCP_PUBCOMP) | (1 << LMQCP_STOC_SUBACK) | (1 << LMQCP_STOC_UNSUBACK) | (1 << LMQCP_DISCONNECT) | (1 << LMQCP_AUTH), [LMQPROP_RECEIVE_MAXIMUM] = (1 << LMQCP_CTOS_CONNECT) | (1 << LMQCP_STOC_CONNACK), [LMQPROP_TOPIC_ALIAS_MAXIMUM] = (1 << LMQCP_CTOS_CONNECT) | (1 << LMQCP_STOC_CONNACK), [LMQPROP_TOPIC_ALIAS] = (1 << LMQCP_PUBLISH), [LMQPROP_MAXIMUM_QOS] = (1 << LMQCP_STOC_CONNACK), [LMQPROP_RETAIN_AVAILABLE] = (1 << LMQCP_STOC_CONNACK), [LMQPROP_USER_PROPERTY] = (1 << LMQCP_CTOS_CONNECT) | (1 << LMQCP_STOC_CONNACK) | (1 << LMQCP_PUBLISH) | (1 << LMQCP_WILL_PROPERTIES) | (1 << LMQCP_PUBACK) | (1 << LMQCP_PUBREC) | (1 << LMQCP_PUBREL) | (1 << LMQCP_PUBCOMP) | (1 << LMQCP_CTOS_SUBSCRIBE) | (1 << LMQCP_STOC_SUBACK) | (1 << LMQCP_CTOS_UNSUBSCRIBE) | (1 << LMQCP_STOC_UNSUBACK) | (1 << LMQCP_DISCONNECT) | (1 << LMQCP_AUTH), [LMQPROP_MAXIMUM_PACKET_SIZE] = (1 << LMQCP_CTOS_CONNECT) | (1 << LMQCP_STOC_CONNACK), [LMQPROP_WILDCARD_SUBSCRIPTION_AVAIL] = (1 << LMQCP_STOC_CONNACK), [LMQPROP_SUBSCRIPTION_IDENTIFIER_AVAIL] = (1 << LMQCP_STOC_CONNACK), [LMQPROP_SHARED_SUBSCRIPTION_AVAIL] = (1 << LMQCP_STOC_CONNACK) }; /* * For each command index, maps flags, id, qos and payload legality * notice in most cases PUBLISH requires further processing */ static const uint8_t map_flags[] = { [LMQCP_RESERVED] = 0x00, [LMQCP_CTOS_CONNECT] = LMQCP_LUT_FLAG_RESERVED_FLAGS | LMQCP_LUT_FLAG_PAYLOAD | LMQCP_LUT_FLAG_PACKET_ID_NONE | 0x00, [LMQCP_STOC_CONNACK] = LMQCP_LUT_FLAG_RESERVED_FLAGS | LMQCP_LUT_FLAG_PACKET_ID_NONE | 0x00, [LMQCP_PUBLISH] = LMQCP_LUT_FLAG_PAYLOAD | /* option */ LMQCP_LUT_FLAG_PACKET_ID_QOS12 | 0x00, [LMQCP_PUBACK] = LMQCP_LUT_FLAG_RESERVED_FLAGS | LMQCP_LUT_FLAG_PACKET_ID_HAS | 0x00, [LMQCP_PUBREC] = LMQCP_LUT_FLAG_RESERVED_FLAGS | LMQCP_LUT_FLAG_PACKET_ID_HAS | 0x00, [LMQCP_PUBREL] = LMQCP_LUT_FLAG_RESERVED_FLAGS | LMQCP_LUT_FLAG_PACKET_ID_HAS | 0x02, [LMQCP_PUBCOMP] = LMQCP_LUT_FLAG_RESERVED_FLAGS | LMQCP_LUT_FLAG_PACKET_ID_HAS | 0x00, [LMQCP_CTOS_SUBSCRIBE] = LMQCP_LUT_FLAG_RESERVED_FLAGS | LMQCP_LUT_FLAG_PAYLOAD | LMQCP_LUT_FLAG_PACKET_ID_HAS | 0x02, [LMQCP_STOC_SUBACK] = LMQCP_LUT_FLAG_RESERVED_FLAGS | LMQCP_LUT_FLAG_PAYLOAD | LMQCP_LUT_FLAG_PACKET_ID_HAS | 0x00, [LMQCP_CTOS_UNSUBSCRIBE] = LMQCP_LUT_FLAG_RESERVED_FLAGS | LMQCP_LUT_FLAG_PAYLOAD | LMQCP_LUT_FLAG_PACKET_ID_HAS | 0x02, [LMQCP_STOC_UNSUBACK] = LMQCP_LUT_FLAG_RESERVED_FLAGS | LMQCP_LUT_FLAG_PAYLOAD | LMQCP_LUT_FLAG_PACKET_ID_NONE | 0x00, [LMQCP_CTOS_PINGREQ] = LMQCP_LUT_FLAG_RESERVED_FLAGS | LMQCP_LUT_FLAG_PACKET_ID_NONE | 0x00, [LMQCP_STOC_PINGRESP] = LMQCP_LUT_FLAG_RESERVED_FLAGS | LMQCP_LUT_FLAG_PACKET_ID_NONE | 0x00, [LMQCP_DISCONNECT] = LMQCP_LUT_FLAG_RESERVED_FLAGS | LMQCP_LUT_FLAG_PACKET_ID_NONE | 0x00, [LMQCP_AUTH] = LMQCP_LUT_FLAG_RESERVED_FLAGS | LMQCP_LUT_FLAG_PACKET_ID_NONE | 0x00, }; static int lws_mqtt_pconsume(lws_mqtt_parser_t *par, int consumed) { par->consumed += (unsigned int)consumed; if (par->consumed > par->props_len) return -1; /* more properties coming */ if (par->consumed < par->props_len) { par->state = LMQCPP_PROP_ID_VBI; return 0; } /* properties finished: are we headed for payload or idle? */ if ((map_flags[ctl_pkt_type(par)] & LMQCP_LUT_FLAG_PAYLOAD) && /* A PUBLISH packet MUST NOT contain a Packet Identifier if * its QoS value is set to 0 [MQTT-2.2.1-2]. */ (ctl_pkt_type(par) != LMQCP_PUBLISH || (par->packet_type_flags & 6))) { par->state = LMQCPP_PAYLOAD; return 0; } par->state = LMQCPP_IDLE; return 0; } static int lws_mqtt_set_client_established(struct lws *wsi) { lws_role_transition(wsi, LWSIFR_CLIENT, LRS_ESTABLISHED, &role_ops_mqtt); if (user_callback_handle_rxflow(wsi->a.protocol->callback, wsi, LWS_CALLBACK_MQTT_CLIENT_ESTABLISHED, wsi->user_space, NULL, 0) < 0) { lwsl_err("%s: MQTT_ESTABLISHED failed\n", __func__); return -1; } /* * If we made a new connection and got the ACK, our connection is * definitely working in both directions at the moment */ lws_validity_confirmed(wsi); /* clear connection timeout */ lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); return 0; } static lws_mqtt_validate_topic_return_t lws_mqtt_validate_topic(const char *topic, size_t topiclen, uint8_t awsiot) { size_t spos = 0; const char *sub = topic; int8_t slashes = 0; lws_mqtt_validate_topic_return_t ret = LMVTR_VALID; if (awsiot) { if (topiclen > LWS_MQTT_MAX_AWSIOT_TOPICLEN) return LMVTR_FAILED_OVERSIZE; if (topic[0] == '$') { ret = LMVTR_VALID_SHADOW; slashes = -3; } } else { if (topiclen > LWS_MQTT_MAX_TOPICLEN) return LMVTR_FAILED_OVERSIZE; if (topic[0] == '$') return LMVTR_FAILED_WILDCARD_FORMAT; } while (*sub != 0) { if (sub[0] == '+') { /* topic == "+foo" || "a/+foo" ? */ if (spos > 0 && sub[-1] != '/') return LMVTR_FAILED_WILDCARD_FORMAT; /* topic == "foo+" or "foo+/a" ? */ if (sub[1] != 0 && sub[1] != '/') return LMVTR_FAILED_WILDCARD_FORMAT; ret = LMVTR_VALID_WILDCARD; } else if (sub[0] == '#') { /* topic == "foo#" ? */ if (spos > 0 && sub[-1] != '/') return LMVTR_FAILED_WILDCARD_FORMAT; /* topic == "#foo" ? */ if (sub[1] != 0) return LMVTR_FAILED_WILDCARD_FORMAT; ret = LMVTR_VALID_WILDCARD; } else if (sub[0] == '/') { slashes++; } spos++; sub++; } if (awsiot && (slashes < 0 || slashes > 7)) return LMVTR_FAILED_SHADOW_FORMAT; return ret; } static lws_mqtt_subs_t * lws_mqtt_create_sub(struct _lws_mqtt_related *mqtt, const char *topic) { lws_mqtt_subs_t *mysub; size_t topiclen = strlen(topic); lws_mqtt_validate_topic_return_t flag; flag = lws_mqtt_validate_topic(topic, topiclen, mqtt->client.aws_iot); switch (flag) { case LMVTR_FAILED_OVERSIZE: lwsl_err("%s: Topic is too long\n", __func__); return NULL; case LMVTR_FAILED_SHADOW_FORMAT: case LMVTR_FAILED_WILDCARD_FORMAT: lwsl_err("%s: Invalid topic format \"%s\"\n", __func__, topic); return NULL; case LMVTR_VALID: case LMVTR_VALID_WILDCARD: case LMVTR_VALID_SHADOW: mysub = lws_malloc(sizeof(*mysub) + topiclen + 1, "sub"); if (!mysub) { lwsl_err("%s: Error allocating mysub\n", __func__); return NULL; } mysub->wildcard = (flag == LMVTR_VALID_WILDCARD); mysub->shadow = (flag == LMVTR_VALID_SHADOW); break; default: lwsl_err("%s: Unknown flag - %d\n", __func__, flag); return NULL; } mysub->next = mqtt->subs_head; mqtt->subs_head = mysub; memcpy(mysub->topic, topic, strlen(topic) + 1); mysub->ref_count = 1; lwsl_info("%s: Created mysub %p for wsi->mqtt %p\n", __func__, mysub, mqtt); return mysub; } static int lws_mqtt_client_remove_subs(struct _lws_mqtt_related *mqtt) { lws_mqtt_subs_t *s = mqtt->subs_head; lws_mqtt_subs_t *temp = NULL; lwsl_info("%s: Called to remove subs from wsi->mqtt %p\n", __func__, mqtt); while (s && s->next) { if (s->next->ref_count == 0) break; s = s->next; } if (s && s->next) { temp = s->next; lwsl_info("%s: Removing sub %p from wsi->mqtt %p\n", __func__, temp, mqtt); s->next = temp->next; lws_free(temp); return 0; } return 1; } /* * This fires if the wsi did a PUBLISH under QoS1 or QoS2, but no PUBACK or * PUBREC came before the timeout period */ static void lws_mqtt_publish_resend(struct lws_sorted_usec_list *sul) { struct _lws_mqtt_related *mqtt = lws_container_of(sul, struct _lws_mqtt_related, sul_qos_puback_pubrec_wait); lwsl_notice("%s: %s\n", __func__, lws_wsi_tag(mqtt->wsi)); if (mqtt->wsi->a.protocol->callback(mqtt->wsi, LWS_CALLBACK_MQTT_RESEND, mqtt->wsi->user_space, NULL, 0)) lws_set_timeout(mqtt->wsi, 1, LWS_TO_KILL_ASYNC); } static void lws_mqtt_unsuback_timeout(struct lws_sorted_usec_list *sul) { struct _lws_mqtt_related *mqtt = lws_container_of(sul, struct _lws_mqtt_related, sul_unsuback_wait); lwsl_debug("%s: %s\n", __func__, lws_wsi_tag(mqtt->wsi)); if (mqtt->wsi->a.protocol->callback(mqtt->wsi, LWS_CALLBACK_MQTT_UNSUBSCRIBE_TIMEOUT, mqtt->wsi->user_space, NULL, 0)) lws_set_timeout(mqtt->wsi, 1, LWS_TO_KILL_ASYNC); } static void lws_mqtt_shadow_timeout(struct lws_sorted_usec_list *sul) { struct _lws_mqtt_related *mqtt = lws_container_of(sul, struct _lws_mqtt_related, sul_shadow_wait); lwsl_debug("%s: %s\n", __func__, lws_wsi_tag(mqtt->wsi)); if (mqtt->wsi->a.protocol->callback(mqtt->wsi, LWS_CALLBACK_MQTT_SHADOW_TIMEOUT, mqtt->wsi->user_space, NULL, 0)) lws_set_timeout(mqtt->wsi, 1, LWS_TO_KILL_ASYNC); } void lws_mqttc_state_transition(lws_mqttc_t *c, lwsgs_mqtt_states_t s) { lwsl_debug("%s: ep %p: state %d -> %d\n", __func__, c, c->estate, s); c->estate = s; } lws_mqtt_match_topic_return_t lws_mqtt_is_topic_matched(const char* sub, const char* pub) { const char *ppos = pub, *spos = sub; if (!ppos || !spos) { return LMMTR_TOPIC_MATCH_ERROR; } while (*spos) { if (*ppos == '#' || *ppos == '+') { lwsl_err("%s: PUBLISH to wildcard " "topic \"%s\" not supported\n", __func__, pub); return LMMTR_TOPIC_MATCH_ERROR; } /* foo/+/bar == foo/xyz/bar ? */ if (*spos == '+') { /* Skip ahead */ while (*ppos != '\0' && *ppos != '/') { ppos++; } } else if (*spos == '#') { return LMMTR_TOPIC_MATCH; } else { if (*ppos == '\0') { /* foo/bar == foo/bar/# ? */ if (!strncmp(spos, "/#", 2)) return LMMTR_TOPIC_MATCH; return LMMTR_TOPIC_NOMATCH; /* Non-matching character */ } else if (*ppos != *spos) { return LMMTR_TOPIC_NOMATCH; } ppos++; } spos++; } if (*spos == '\0' && *ppos == '\0') return LMMTR_TOPIC_MATCH; return LMMTR_TOPIC_NOMATCH; } lws_mqtt_subs_t* lws_mqtt_find_sub(struct _lws_mqtt_related* mqtt, const char* ptopic) { lws_mqtt_subs_t *s = mqtt->subs_head; while (s) { /* SUB topic == PUB topic ? */ /* foo/bar/xyz == foo/bar/xyz ? */ if (!s->wildcard) { if (!strcmp((const char*)s->topic, ptopic)) return s; } else { if (lws_mqtt_is_topic_matched( s->topic, ptopic) == LMMTR_TOPIC_MATCH) return s; } s = s->next; } return NULL; } int _lws_mqtt_rx_parser(struct lws *wsi, lws_mqtt_parser_t *par, const uint8_t *buf, size_t len) { struct lws *w; int n; if (par->flag_pending_send_reason_close) return 0; /* * Stateful, fragmentation-immune parser * * Notice that len can always be 1 if under attack, even over tls if * the server is compromised or malicious. */ while (len) { lwsl_debug("%s: %d, len = %d\n", __func__, par->state, (int)len); switch (par->state) { case LMQCPP_IDLE: par->packet_type_flags = *buf++; len--; #if defined(LWS_WITH_CLIENT) /* * The case where we sent the connect, but we received * something else before any CONNACK */ if (lwsi_state(wsi) == LRS_MQTTC_AWAIT_CONNACK && par->packet_type_flags >> 4 != LMQCP_STOC_CONNACK) { lwsl_notice("%s: server sent non-CONNACK\n", __func__); goto send_protocol_error_and_close; } #endif /* LWS_WITH_CLIENT */ n = map_flags[par->packet_type_flags >> 4]; /* * Where a flag bit is marked as ā€œReservedā€, it is * reserved for future use and MUST be set to the value * listed [MQTT-2.1.3-1]. */ if ((n & LMQCP_LUT_FLAG_RESERVED_FLAGS) && ((par->packet_type_flags & 0x0f) != (n & 0x0f))) { lwsl_notice("%s: %s: bad flags, 0x%02x mask 0x%02x (len %d)\n", __func__, lws_wsi_tag(wsi), par->packet_type_flags, n, (int)len + 1); lwsl_hexdump_err(buf - 1, len + 1); goto send_protocol_error_and_close; } lwsl_debug("%s: received pkt type 0x%x / flags 0x%x\n", __func__, par->packet_type_flags >> 4, par->packet_type_flags & 0xf); /* allows us to know if a property that can only be * given once, appears twice */ memset(par->props_seen, 0, sizeof(par->props_seen)); par->state = par->packet_type_flags & 0xf0; break; case LMQCPP_CONNECT_PACKET: lwsl_debug("%s: received CONNECT pkt\n", __func__); par->state = LMQCPP_CONNECT_REMAINING_LEN_VBI; lws_mqtt_vbi_init(&par->vbit); break; case LMQCPP_CONNECT_REMAINING_LEN_VBI: switch (lws_mqtt_vbi_r(&par->vbit, &buf, &len)) { case LMSPR_NEED_MORE: break; case LMSPR_COMPLETED: par->cpkt_remlen = par->vbit.value; n = map_flags[ctl_pkt_type(par)]; lws_mqtt_str_init(&par->s_temp, par->temp, sizeof(par->temp), 0); par->state = LMQCPP_CONNECT_VH_PNAME; break; default: lwsl_notice("%s: bad vbi\n", __func__); goto send_protocol_error_and_close; } break; case LMQCPP_CONNECT_VH_PNAME: switch (lws_mqtt_str_parse(&par->s_temp, &buf, &len)) { case LMSPR_NEED_MORE: break; case LMSPR_COMPLETED: if (par->s_temp.len != 4 || memcmp(par->s_temp.buf, "MQTT", par->s_temp.len)) { lwsl_notice("%s: protocol name: %.*s\n", __func__, par->s_temp.len, par->s_temp.buf); goto send_unsupp_connack_and_close; } par->state = LMQCPP_CONNECT_VH_PVERSION; break; default: lwsl_notice("%s: bad protocol name\n", __func__); goto send_protocol_error_and_close; } break; case LMQCPP_CONNECT_VH_PVERSION: par->conn_protocol_version = *buf++; len--; if (par->conn_protocol_version != 5) { lwsl_info("%s: unsupported MQTT version %d\n", __func__, par->conn_protocol_version); goto send_unsupp_connack_and_close; } par->state = LMQCPP_CONNECT_VH_FLAGS; break; case LMQCPP_CONNECT_VH_FLAGS: par->cpkt_flags = *buf++; len--; if (par->cpkt_flags & 1) { /* * The Server MUST validate that the reserved * flag in the CONNECT packet is set to 0 * [MQTT-3.1.2-3]. */ par->reason = LMQCP_REASON_MALFORMED_PACKET; goto send_reason_and_close; } /* * conn_flags specifies the Will Properties that should * appear in the payload section */ lws_mqtt_2byte_init(&par->vbit); par->state = LMQCPP_CONNECT_VH_KEEPALIVE; break; case LMQCPP_CONNECT_VH_KEEPALIVE: switch (lws_mqtt_vbi_r(&par->vbit, &buf, &len)) { case LMSPR_NEED_MORE: break; case LMSPR_COMPLETED: par->keepalive = (uint16_t)par->vbit.value; lws_mqtt_vbi_init(&par->vbit); par->state = LMQCPP_CONNECT_VH_PROPERTIES_VBI_LEN; break; default: lwsl_notice("%s: ka bad vbi\n", __func__); goto send_protocol_error_and_close; } break; case LMQCPP_PINGRESP_ZERO: len--; /* second byte of PINGRESP must be zero */ if (*buf++) goto send_protocol_error_and_close; goto cmd_completion; case LMQCPP_CONNECT_VH_PROPERTIES_VBI_LEN: switch (lws_mqtt_vbi_r(&par->vbit, &buf, &len)) { case LMSPR_NEED_MORE: break; case LMSPR_COMPLETED: /* reset consumption counter */ par->consumed = 0; par->props_len = par->vbit.value; lws_mqtt_vbi_init(&par->vbit); par->state = LMQCPP_PROP_ID_VBI; break; default: lwsl_notice("%s: connpr bad vbi\n", __func__); goto send_protocol_error_and_close; } break; /* PUBREC */ case LMQCPP_PUBREC_PACKET: lwsl_debug("%s: received PUBREC pkt\n", __func__); lws_mqtt_vbi_init(&par->vbit); switch (lws_mqtt_vbi_r(&par->vbit, &buf, &len)) { case LMSPR_NEED_MORE: break; case LMSPR_COMPLETED: par->cpkt_remlen = par->vbit.value; lwsl_debug("%s: PUBREC pkt len = %d\n", __func__, (int)par->cpkt_remlen); if (par->cpkt_remlen < 2) goto send_protocol_error_and_close; par->state = LMQCPP_PUBREC_VH_PKT_ID; break; default: lwsl_notice("%s: pubrec bad vbi\n", __func__); goto send_protocol_error_and_close; } break; case LMQCPP_PUBREC_VH_PKT_ID: if (len < 2) { lwsl_notice("%s: len breakage 3\n", __func__); return -1; } par->cpkt_id = lws_ser_ru16be(buf); wsi->mqtt->ack_pkt_id = par->cpkt_id; buf += 2; len -= 2; par->cpkt_remlen -= 2; par->n = 0; goto cmd_completion; /* PUBREL */ case LMQCPP_PUBREL_PACKET: lwsl_debug("%s: received PUBREL pkt\n", __func__); lws_mqtt_vbi_init(&par->vbit); switch (lws_mqtt_vbi_r(&par->vbit, &buf, &len)) { case LMSPR_NEED_MORE: break; case LMSPR_COMPLETED: par->cpkt_remlen = par->vbit.value; lwsl_debug("%s: PUBREL pkt len = %d\n", __func__, (int)par->cpkt_remlen); if (par->cpkt_remlen < 2) goto send_protocol_error_and_close; par->state = LMQCPP_PUBREL_VH_PKT_ID; break; default: lwsl_err("%s: pubrel bad vbi\n", __func__); goto send_protocol_error_and_close; } break; case LMQCPP_PUBREL_VH_PKT_ID: if (len < 2) { lwsl_notice("%s: len breakage 3\n", __func__); return -1; } par->cpkt_id = lws_ser_ru16be(buf); wsi->mqtt->ack_pkt_id = par->cpkt_id; buf += 2; len -= 2; par->cpkt_remlen -= 2; par->n = 0; goto cmd_completion; /* PUBCOMP */ case LMQCPP_PUBCOMP_PACKET: lwsl_debug("%s: received PUBCOMP pkt\n", __func__); lws_mqtt_vbi_init(&par->vbit); switch (lws_mqtt_vbi_r(&par->vbit, &buf, &len)) { case LMSPR_NEED_MORE: break; case LMSPR_COMPLETED: par->cpkt_remlen = par->vbit.value; lwsl_debug("%s: PUBCOMP pkt len = %d\n", __func__, (int)par->cpkt_remlen); if (par->cpkt_remlen < 2) goto send_protocol_error_and_close; par->state = LMQCPP_PUBCOMP_VH_PKT_ID; break; default: lwsl_err("%s: pubcmp bad vbi\n", __func__); goto send_protocol_error_and_close; } break; case LMQCPP_PUBCOMP_VH_PKT_ID: if (len < 2) { lwsl_notice("%s: len breakage 3\n", __func__); return -1; } par->cpkt_id = lws_ser_ru16be(buf); wsi->mqtt->ack_pkt_id = par->cpkt_id; buf += 2; len -= 2; par->cpkt_remlen -= 2; par->n = 0; goto cmd_completion; case LMQCPP_PUBLISH_PACKET: if (lwsi_role_client(wsi) && wsi->mqtt->inside_subscribe) { lwsl_notice("%s: Topic rx before subscribing\n", __func__); goto send_protocol_error_and_close; } lwsl_info("%s: received PUBLISH pkt\n", __func__); par->state = LMQCPP_PUBLISH_REMAINING_LEN_VBI; lws_mqtt_vbi_init(&par->vbit); break; case LMQCPP_PUBLISH_REMAINING_LEN_VBI: switch (lws_mqtt_vbi_r(&par->vbit, &buf, &len)) { case LMSPR_NEED_MORE: break; case LMSPR_COMPLETED: par->cpkt_remlen = par->vbit.value; lwsl_debug("%s: PUBLISH pkt len = %d\n", __func__, (int)par->cpkt_remlen); /* Move on to PUBLISH's variable header */ par->state = LMQCPP_PUBLISH_VH_TOPIC; break; default: lwsl_notice("%s: pubrem bad vbi\n", __func__); goto send_protocol_error_and_close; } break; case LMQCPP_PUBLISH_VH_TOPIC: { lws_mqtt_publish_param_t *pub = NULL; if (len < 2) { lwsl_notice("%s: topic too short\n", __func__); return -1; } /* Topic len */ par->n = lws_ser_ru16be(buf); buf += 2; len -= 2; if (len < par->n) {/* the way this is written... */ lwsl_notice("%s: len breakage\n", __func__); return -1; } /* Invalid topic len */ if (par->n == 0) { lwsl_notice("%s: zero topic len\n", __func__); par->reason = LMQCP_REASON_MALFORMED_PACKET; goto send_reason_and_close; } lwsl_debug("%s: PUBLISH topic len %d\n", __func__, (int)par->n); assert(!wsi->mqtt->rx_cpkt_param); wsi->mqtt->rx_cpkt_param = lws_zalloc( sizeof(lws_mqtt_publish_param_t), "rx pub param"); if (!wsi->mqtt->rx_cpkt_param) goto oom; pub = (lws_mqtt_publish_param_t *)wsi->mqtt->rx_cpkt_param; pub->topic_len = (uint16_t)par->n; /* Topic Name */ pub->topic = (char *)lws_zalloc((size_t)pub->topic_len + 1, "rx publish topic"); if (!pub->topic) goto oom; lws_strncpy(pub->topic, (const char *)buf, (size_t)pub->topic_len + 1); buf += pub->topic_len; len -= pub->topic_len; /* Extract QoS Level from Fixed Header Flags */ pub->qos = (lws_mqtt_qos_levels_t) ((par->packet_type_flags >> 1) & 0x3); pub->payload_pos = 0; pub->payload_len = par->cpkt_remlen - (unsigned int)(2 + pub->topic_len + ((pub->qos) ? 2 : 0)); switch (pub->qos) { case QOS0: par->state = LMQCPP_PAYLOAD; if (pub->payload_len == 0) goto cmd_completion; break; case QOS1: case QOS2: par->state = LMQCPP_PUBLISH_VH_PKT_ID; break; default: par->reason = LMQCP_REASON_MALFORMED_PACKET; lws_free_set_NULL(pub->topic); lws_free_set_NULL(wsi->mqtt->rx_cpkt_param); goto send_reason_and_close; } break; } case LMQCPP_PUBLISH_VH_PKT_ID: { lws_mqtt_publish_param_t *pub = (lws_mqtt_publish_param_t *)wsi->mqtt->rx_cpkt_param; if (len < 2) { lwsl_notice("%s: len breakage 2\n", __func__); return -1; } par->cpkt_id = lws_ser_ru16be(buf); buf += 2; len -= 2; wsi->mqtt->peer_ack_pkt_id = par->cpkt_id; lwsl_debug("%s: Packet ID %d\n", __func__, (int)par->cpkt_id); par->state = LMQCPP_PAYLOAD; pub->payload_pos = 0; pub->payload_len = par->cpkt_remlen - (unsigned int)(2 + pub->topic_len + ((pub->qos) ? 2 : 0)); if (pub->payload_len == 0) goto cmd_completion; break; } case LMQCPP_PAYLOAD: { lws_mqtt_publish_param_t *pub = (lws_mqtt_publish_param_t *)wsi->mqtt->rx_cpkt_param; if (pub == NULL) { lwsl_err("%s: Uninitialized pub_param\n", __func__); goto send_protocol_error_and_close; } pub->payload = buf; goto cmd_completion; } case LMQCPP_CONNACK_PACKET: if (!lwsi_role_client(wsi)) { lwsl_err("%s: CONNACK is only Server to Client", __func__); goto send_unsupp_connack_and_close; } lwsl_debug("%s: received CONNACK pkt\n", __func__); lws_mqtt_vbi_init(&par->vbit); switch (lws_mqtt_vbi_r(&par->vbit, &buf, &len)) { case LMSPR_NEED_MORE: break; case LMSPR_COMPLETED: par->cpkt_remlen = par->vbit.value; lwsl_debug("%s: CONNACK pkt len = %d\n", __func__, (int)par->cpkt_remlen); if (par->cpkt_remlen != 2) goto send_protocol_error_and_close; par->state = LMQCPP_CONNACK_VH_FLAGS; break; default: lwsl_notice("%s: connack bad vbi\n", __func__); goto send_protocol_error_and_close; } break; case LMQCPP_CONNACK_VH_FLAGS: { lws_mqttc_t *c = &wsi->mqtt->client; par->cpkt_flags = *buf++; len--; if (par->cpkt_flags & ~LMQCFT_SESSION_PRESENT) { /* * Byte 1 is the "Connect Acknowledge * Flags". Bits 7-1 are reserved and * MUST be set to 0. */ par->reason = LMQCP_REASON_MALFORMED_PACKET; goto send_reason_and_close; } /* * If the Server accepts a connection with * CleanSession set to 1, the Server MUST set * Session Present to 0 in the CONNACK packet * in addition to setting a zero return code * in the CONNACK packet [MQTT-3.2.2-1]. If * the Server accepts a connection with * CleanSession set to 0, the value set in * Session Present depends on whether the * Server already has stored Session state for * the supplied client ID. If the Server has * stored Session state, it MUST set * SessionPresent to 1 in the CONNACK packet * [MQTT-3.2.2-2]. If the Server does not have * stored Session state, it MUST set Session * Present to 0 in the CONNACK packet. This is * in addition to setting a zero return code * in the CONNACK packet [MQTT-3.2.2-3]. */ if ((c->conn_flags & LMQCFT_CLEAN_START) && (par->cpkt_flags & LMQCFT_SESSION_PRESENT)) goto send_protocol_error_and_close; wsi->mqtt->session_resumed = ((unsigned int)par->cpkt_flags & LMQCFT_SESSION_PRESENT); /* Move on to Connect Return Code */ par->state = LMQCPP_CONNACK_VH_RETURN_CODE; break; } case LMQCPP_CONNACK_VH_RETURN_CODE: par->conn_rc = *buf++; len--; /* * If a server sends a CONNACK packet containing a * non-zero return code it MUST then close the Network * Connection [MQTT-3.2.2-5] */ switch (par->conn_rc) { case 0: goto cmd_completion; case 1: case 2: case 3: case 4: case 5: par->reason = LMQCP_REASON_UNSUPPORTED_PROTOCOL + par->conn_rc - 1; goto send_reason_and_close; default: lwsl_notice("%s: bad connack retcode\n", __func__); goto send_protocol_error_and_close; } break; /* SUBACK */ case LMQCPP_SUBACK_PACKET: if (!lwsi_role_client(wsi)) { lwsl_err("%s: SUBACK is only Server to Client", __func__); goto send_unsupp_connack_and_close; } lwsl_debug("%s: received SUBACK pkt\n", __func__); lws_mqtt_vbi_init(&par->vbit); switch (lws_mqtt_vbi_r(&par->vbit, &buf, &len)) { case LMSPR_NEED_MORE: break; case LMSPR_COMPLETED: par->cpkt_remlen = par->vbit.value; lwsl_debug("%s: SUBACK pkt len = %d\n", __func__, (int)par->cpkt_remlen); if (par->cpkt_remlen <= 2) goto send_protocol_error_and_close; par->state = LMQCPP_SUBACK_VH_PKT_ID; break; default: lwsl_notice("%s: suback bad vbi\n", __func__); goto send_protocol_error_and_close; } break; case LMQCPP_SUBACK_VH_PKT_ID: if (len < 2) { lwsl_notice("%s: len breakage 4\n", __func__); return -1; } par->cpkt_id = lws_ser_ru16be(buf); wsi->mqtt->ack_pkt_id = par->cpkt_id; buf += 2; len -= 2; par->cpkt_remlen -= 2; par->n = 0; par->state = LMQCPP_SUBACK_PAYLOAD; *par->temp = 0; break; case LMQCPP_SUBACK_PAYLOAD: { lws_mqtt_qos_levels_t qos = (lws_mqtt_qos_levels_t)*buf++; len--; switch (qos) { case QOS0: case QOS1: case QOS2: break; case FAILURE_QOS_LEVEL: goto send_protocol_error_and_close; default: par->reason = LMQCP_REASON_MALFORMED_PACKET; goto send_reason_and_close; } if (++(par->n) == par->cpkt_remlen) { par->n = 0; goto cmd_completion; } break; } /* UNSUBACK */ case LMQCPP_UNSUBACK_PACKET: if (!lwsi_role_client(wsi)) { lwsl_err("%s: UNSUBACK is only Server to Client", __func__); goto send_unsupp_connack_and_close; } lwsl_debug("%s: received UNSUBACK pkt\n", __func__); lws_mqtt_vbi_init(&par->vbit); switch (lws_mqtt_vbi_r(&par->vbit, &buf, &len)) { case LMSPR_NEED_MORE: break; case LMSPR_COMPLETED: par->cpkt_remlen = par->vbit.value; lwsl_debug("%s: UNSUBACK pkt len = %d\n", __func__, (int)par->cpkt_remlen); if (par->cpkt_remlen < 2) goto send_protocol_error_and_close; par->state = LMQCPP_UNSUBACK_VH_PKT_ID; break; default: lwsl_notice("%s: unsuback bad vbi\n", __func__); goto send_protocol_error_and_close; } break; case LMQCPP_UNSUBACK_VH_PKT_ID: if (len < 2) { lwsl_notice("%s: len breakage 3\n", __func__); return -1; } par->cpkt_id = lws_ser_ru16be(buf); wsi->mqtt->ack_pkt_id = par->cpkt_id; buf += 2; len -= 2; par->cpkt_remlen -= 2; par->n = 0; goto cmd_completion; case LMQCPP_PUBACK_PACKET: lws_mqtt_vbi_init(&par->vbit); switch (lws_mqtt_vbi_r(&par->vbit, &buf, &len)) { case LMSPR_NEED_MORE: break; case LMSPR_COMPLETED: par->cpkt_remlen = par->vbit.value; lwsl_info("%s: PUBACK pkt len = %d\n", __func__, (int)par->cpkt_remlen); /* * must be 4 or more, with special case that 2 * means success with no reason code or props */ if (par->cpkt_remlen <= 1 || par->cpkt_remlen == 3) goto send_protocol_error_and_close; par->state = LMQCPP_PUBACK_VH_PKT_ID; par->fixed_seen[2] = par->fixed_seen[3] = 0; par->fixed = 0; par->n = 0; break; default: lwsl_notice("%s: puback bad vbi\n", __func__); goto send_protocol_error_and_close; } break; case LMQCPP_PUBACK_VH_PKT_ID: /* * There are 3 fixed bytes and then a VBI for the * property section length */ par->fixed_seen[par->fixed++] = *buf++; if (len < par->cpkt_remlen - par->n) { lwsl_notice("%s: len breakage 4\n", __func__); return -1; } len--; par->n++; if (par->fixed == 2) par->cpkt_id = lws_ser_ru16be(par->fixed_seen); if (par->fixed == 3) { lws_mqtt_vbi_init(&par->vbit); par->props_consumed = 0; par->state = LMQCPP_PUBACK_PROPERTIES_LEN_VBI; } /* length of 2 is truncated packet and we completed it */ if (par->cpkt_remlen == par->fixed) goto cmd_completion; break; case LMQCPP_PUBACK_PROPERTIES_LEN_VBI: switch (lws_mqtt_vbi_r(&par->vbit, &buf, &len)) { case LMSPR_NEED_MORE: break; case LMSPR_COMPLETED: par->props_len = par->vbit.value; lwsl_info("%s: PUBACK props len = %d\n", __func__, (int)par->cpkt_remlen); /* * If there are no properties, this is a * command completion event in itself */ if (!par->props_len) goto cmd_completion; /* * Otherwise consume the properties before * completing the command */ lws_mqtt_vbi_init(&par->vbit); par->state = LMQCPP_PUBACK_VH_PKT_ID; break; default: lwsl_notice("%s: puback pr bad vbi\n", __func__); goto send_protocol_error_and_close; } break; case LMQCPP_EAT_PROPERTIES_AND_COMPLETE: /* * TODO: stash the props */ par->props_consumed++; len--; buf++; if (par->props_len != par->props_consumed) break; cmd_completion: /* * We come here when we understood we just processed * the last byte of a command packet, regardless of the * packet type */ par->state = LMQCPP_IDLE; switch (par->packet_type_flags >> 4) { case LMQCP_STOC_CONNACK: lwsl_info("%s: cmd_completion: CONNACK\n", __func__); /* * Getting the CONNACK means we are the first, * the nwsi, and we succeeded to create a new * network connection ourselves. * * Since others may join us sharing the nwsi, * and we may close while they still want to use * it, our wsi lifecycle alone can no longer * define the lifecycle of the nwsi... it means * we need to do a "magic trick" and instead of * being both the nwsi and act like a child * stream, create a new wsi to take over the * nwsi duties and turn our wsi into a child of * the nwsi with its own lifecycle. * * The nwsi gets a mostly empty wsi->nwsi used * to track already-subscribed topics globally * for the connection. */ /* we were under SENT_CLIENT_HANDSHAKE timeout */ lws_set_timeout(wsi, 0, 0); w = lws_create_new_server_wsi(wsi->a.vhost, wsi->tsi, "mqtt_sid1"); if (!w) { lwsl_notice("%s: sid 1 migrate failed\n", __func__); return -1; } wsi->mux.highest_sid = 1; lws_wsi_mux_insert(w, wsi, wsi->mux.highest_sid++); wsi->mux_substream = 1; w->mux_substream = 1; w->client_mux_substream = 1; wsi->client_mux_migrated = 1; wsi->told_user_closed = 1; /* don't tell nwsi closed */ lwsi_set_state(w, LRS_ESTABLISHED); lwsi_set_state(wsi, LRS_ESTABLISHED); lwsi_set_role(w, lwsi_role(wsi)); #if defined(LWS_WITH_CLIENT) w->flags = wsi->flags; #endif w->mqtt = wsi->mqtt; wsi->mqtt = lws_zalloc(sizeof(*wsi->mqtt), "nwsi mqtt"); if (!wsi->mqtt) return -1; w->mqtt->wsi = w; w->a.protocol = wsi->a.protocol; if (w->user_space && !w->user_space_externally_allocated) lws_free_set_NULL(w->user_space); w->user_space = wsi->user_space; wsi->user_space = NULL; w->user_space_externally_allocated = wsi->user_space_externally_allocated; if (lws_ensure_user_space(w)) goto bail1; w->a.opaque_user_data = wsi->a.opaque_user_data; wsi->a.opaque_user_data = NULL; w->stash = wsi->stash; wsi->stash = NULL; lws_mux_mark_immortal(w); lwsl_notice("%s: migrated nwsi %s to sid 1 %s\n", __func__, lws_wsi_tag(wsi), lws_wsi_tag(w)); /* * It was the last thing we were waiting for * before we can be fully ESTABLISHED */ if (lws_mqtt_set_client_established(w)) { lwsl_notice("%s: set EST fail\n", __func__); return -1; } /* get the ball rolling */ lws_validity_confirmed(wsi); /* well, add the queued guys as children */ lws_wsi_mux_apply_queue(wsi); break; bail1: /* undo the insert */ wsi->mux.child_list = w->mux.sibling_list; wsi->mux.child_count--; if (w->user_space) lws_free_set_NULL(w->user_space); w->a.vhost->protocols[0].callback(w, LWS_CALLBACK_WSI_DESTROY, NULL, NULL, 0); __lws_vhost_unbind_wsi(w); /* cx + vh lock */ lws_free(w); return 0; case LMQCP_PUBREC: lwsl_err("%s: cmd_completion: PUBREC\n", __func__); /* * Figure out which child asked for this */ n = 0; lws_start_foreach_ll(struct lws *, w, wsi->mux.child_list) { if (w->mqtt->unacked_publish && w->mqtt->ack_pkt_id == par->cpkt_id) { char requested_close = 0; w->mqtt->unacked_publish = 0; w->mqtt->unacked_pubrel = 1; if (user_callback_handle_rxflow( w->a.protocol->callback, w, LWS_CALLBACK_MQTT_ACK, w->user_space, NULL, 0) < 0) { lwsl_info("%s: MQTT_ACK requests close\n", __func__); requested_close = 1; } n = 1; /* * We got an assertive PUBREC, * no need for timeout wait * any more */ lws_sul_cancel(&w->mqtt-> sul_qos_puback_pubrec_wait); if (requested_close) { __lws_close_free_wsi(w, 0, "ack cb"); break; } break; } } lws_end_foreach_ll(w, mux.sibling_list); if (!n) { lwsl_err("%s: unsolicited PUBREC\n", __func__); return -1; } wsi->mqtt->send_pubrel = 1; lws_callback_on_writable(wsi); break; case LMQCP_PUBCOMP: lwsl_err("%s: cmd_completion: PUBCOMP\n", __func__); n = 0; lws_start_foreach_ll(struct lws *, w, wsi->mux.child_list) { if (w->mqtt->unacked_pubrel > 0 && w->mqtt->ack_pkt_id == par->cpkt_id) { w->mqtt->unacked_pubrel = 0; n = 1; } } lws_end_foreach_ll(w, mux.sibling_list); if (!n) { lwsl_err("%s: unsolicited PUBCOMP\n", __func__); return -1; } /* * If we published something and PUBCOMP arrived, * our connection is definitely working in both * directions at the moment. */ lws_validity_confirmed(wsi); break; case LMQCP_PUBREL: lwsl_err("%s: cmd_completion: PUBREL\n", __func__); wsi->mqtt->send_pubcomp = 1; lws_callback_on_writable(wsi); break; case LMQCP_PUBACK: lwsl_info("%s: cmd_completion: PUBACK\n", __func__); /* * Figure out which child asked for this */ n = 0; lws_start_foreach_ll(struct lws *, w, wsi->mux.child_list) { if (w->mqtt->unacked_publish && w->mqtt->ack_pkt_id == par->cpkt_id) { char requested_close = 0; w->mqtt->unacked_publish = 0; if (user_callback_handle_rxflow( w->a.protocol->callback, w, LWS_CALLBACK_MQTT_ACK, w->user_space, NULL, 0) < 0) { lwsl_info("%s: MQTT_ACK requests close\n", __func__); requested_close = 1; } n = 1; /* * We got an assertive PUBACK, * no need for ACK timeout wait * any more */ lws_sul_cancel(&w->mqtt->sul_qos_puback_pubrec_wait); if (requested_close) { __lws_close_free_wsi(w, 0, "ack cb"); break; } break; } } lws_end_foreach_ll(w, mux.sibling_list); if (!n) { lwsl_err("%s: unsolicited PUBACK\n", __func__); return -1; } /* * If we published something and it was acked, * our connection is definitely working in both * directions at the moment. */ lws_validity_confirmed(wsi); break; case LMQCP_STOC_PINGRESP: lwsl_info("%s: cmd_completion: PINGRESP\n", __func__); /* * If we asked for a PINGRESP and it came, * our connection is definitely working in both * directions at the moment. */ lws_validity_confirmed(wsi); break; case LMQCP_STOC_SUBACK: lwsl_info("%s: cmd_completion: SUBACK\n", __func__); /* * Figure out which child asked for this */ n = 0; lws_start_foreach_ll(struct lws *, w, wsi->mux.child_list) { if (w->mqtt->inside_subscribe && w->mqtt->ack_pkt_id == par->cpkt_id) { w->mqtt->inside_subscribe = 0; if (user_callback_handle_rxflow( w->a.protocol->callback, w, LWS_CALLBACK_MQTT_SUBSCRIBED, w->user_space, NULL, 0) < 0) { lwsl_err("%s: MQTT_SUBSCRIBE failed\n", __func__); return -1; } n = 1; break; } } lws_end_foreach_ll(w, mux.sibling_list); if (!n) { lwsl_err("%s: unsolicited SUBACK\n", __func__); return -1; } /* * If we subscribed to something and SUBACK came, * our connection is definitely working in both * directions at the moment. */ lws_validity_confirmed(wsi); break; case LMQCP_STOC_UNSUBACK: { char requested_close = 0; lwsl_info("%s: cmd_completion: UNSUBACK\n", __func__); /* * Figure out which child asked for this */ n = 0; lws_start_foreach_ll(struct lws *, w, wsi->mux.child_list) { if (w->mqtt->inside_unsubscribe && w->mqtt->ack_pkt_id == par->cpkt_id) { struct lws *nwsi = lws_get_network_wsi(w); /* * No more subscribers left, * remove the topic from nwsi */ lws_mqtt_client_remove_subs(nwsi->mqtt); w->mqtt->inside_unsubscribe = 0; if (user_callback_handle_rxflow( w->a.protocol->callback, w, LWS_CALLBACK_MQTT_UNSUBSCRIBED, w->user_space, NULL, 0) < 0) { lwsl_info("%s: MQTT_UNSUBACK requests close\n", __func__); requested_close = 1; } n = 1; lws_sul_cancel(&w->mqtt->sul_unsuback_wait); if (requested_close) { __lws_close_free_wsi(w, 0, "unsub ack cb"); break; } break; } } lws_end_foreach_ll(w, mux.sibling_list); if (!n) { lwsl_err("%s: unsolicited UNSUBACK\n", __func__); return -1; } /* * If we unsubscribed to something and * UNSUBACK came, our connection is * definitely working in both * directions at the moment. */ lws_validity_confirmed(wsi); break; } case LMQCP_PUBLISH: { lws_mqtt_publish_param_t *pub = (lws_mqtt_publish_param_t *) wsi->mqtt->rx_cpkt_param; size_t chunk; if (pub == NULL) { lwsl_notice("%s: no pub\n", __func__); return -1; } /* * RX PUBLISH is delivered to any children that * registered for the related topic */ n = wsi->role_ops->rx_cb[lwsi_role_server(wsi)]; chunk = pub->payload_len - pub->payload_pos; if (chunk > len) chunk = len; lws_start_foreach_ll(struct lws *, w, wsi->mux.child_list) { if (lws_mqtt_find_sub(w->mqtt, pub->topic)) if (w->a.protocol->callback( w, (enum lws_callback_reasons)n, w->user_space, (void *)pub, chunk)) { par->payload_consumed = 0; lws_free_set_NULL(pub->topic); lws_free_set_NULL(wsi->mqtt->rx_cpkt_param); return 1; } } lws_end_foreach_ll(w, mux.sibling_list); pub->payload_pos += (uint32_t)chunk; len -= chunk; buf += chunk; lwsl_debug("%s: post pos %d, plen %d, len %d\n", __func__, (int)pub->payload_pos, (int)pub->payload_len, (int)len); if (pub->payload_pos != pub->payload_len) { /* * More chunks of the payload pending, * blocking this connection from doing * anything else */ par->state = LMQCPP_PAYLOAD; break; } if (pub->qos == 1) { /* For QOS = 1, send out PUBACK */ wsi->mqtt->send_puback = 1; lws_callback_on_writable(wsi); } else if (pub->qos == 2) { /* For QOS = 2, send out PUBREC */ wsi->mqtt->send_pubrec = 1; lws_callback_on_writable(wsi); } par->payload_consumed = 0; lws_free_set_NULL(pub->topic); lws_free_set_NULL(wsi->mqtt->rx_cpkt_param); break; } default: break; } break; case LMQCPP_PROP_ID_VBI: switch (lws_mqtt_vbi_r(&par->vbit, &buf, &len)) { case LMSPR_NEED_MORE: break; case LMSPR_COMPLETED: par->consumed = (uint32_t)((unsigned int)par->consumed + (unsigned int)(unsigned char)par->vbit.consumed); if (par->vbit.value > LWS_ARRAY_SIZE(property_valid)) { lwsl_notice("%s: undef prop id 0x%x\n", __func__, (int)par->vbit.value); goto send_protocol_error_and_close; } if (!(property_valid[par->vbit.value] & (1 << ctl_pkt_type(par)))) { lwsl_notice("%s: prop id 0x%x invalid for" " control pkt %d\n", __func__, (int)par->vbit.value, ctl_pkt_type(par)); goto send_protocol_error_and_close; } par->prop_id = par->vbit.value; par->flag_prop_multi = !!( par->props_seen[par->prop_id >> 3] & (1 << (par->prop_id & 7))); par->props_seen[par->prop_id >> 3] = (uint8_t)((par->props_seen[par->prop_id >> 3]) | (1 << (par->prop_id & 7))); /* * even if it's not a vbi property arg, * .consumed of this will be zero the first time */ lws_mqtt_vbi_init(&par->vbit); /* * if it's a string, next state must set the * destination and size limit itself. But * resetting it generically here lets it use * lws_mqtt_str_first() to understand it's the * first time around. */ lws_mqtt_str_init(&par->s_temp, NULL, 0, 0); /* property arg state enums are so encoded */ par->state = 0x100 | par->vbit.value; break; default: lwsl_notice("%s: prop id bad vbi\n", __func__); goto send_protocol_error_and_close; } break; /* * All possible property payloads... restricting which ones * can appear in which control packets is already done above * in LMQCPP_PROP_ID_VBI */ case LMQCPP_PROP_REQUEST_PROBLEM_INFO_1BYTE: case LMQCPP_PROP_REQUEST_REPSONSE_INFO_1BYTE: case LMQCPP_PROP_MAXIMUM_QOS_1BYTE: case LMQCPP_PROP_RETAIN_AVAILABLE_1BYTE: case LMQCPP_PROP_WILDCARD_SUBSCRIPTION_AVAILABLE_1BYTE: case LMQCPP_PROP_SUBSCRIPTION_IDENTIFIER_AVAILABLE_1BYTE: case LMQCPP_PROP_SHARED_SUBSCRIPTION_AVAILABLE_1BYTE: case LMQCPP_PROP_PAYLOAD_FORMAT_INDICATOR_1BYTE: /* 3.3.2.3.2 */ if (par->flag_prop_multi) goto singular_prop_seen_twice; par->payload_format = *buf++; len--; if (lws_mqtt_pconsume(par, 1)) goto send_protocol_error_and_close; break; case LMQCPP_PROP_MAXIMUM_PACKET_SIZE_4BYTE: case LMQCPP_PROP_WILL_DELAY_INTERVAL_4BYTE: case LMQCPP_PROP_SESSION_EXPIRY_INTERVAL_4BYTE: case LMQCPP_PROP_MSG_EXPIRY_INTERVAL_4BYTE: if (par->flag_prop_multi) goto singular_prop_seen_twice; if (lws_mqtt_mb_first(&par->vbit)) lws_mqtt_4byte_init(&par->vbit); switch (lws_mqtt_mb_parse(&par->vbit, &buf, &len)) { case LMSPR_NEED_MORE: break; case LMSPR_COMPLETED: if (lws_mqtt_pconsume(par, par->vbit.consumed)) goto send_protocol_error_and_close; break; default: goto send_protocol_error_and_close; } break; case LMQCPP_PROP_SERVER_KEEPALIVE_2BYTE: case LMQCPP_PROP_RECEIVE_MAXIMUM_2BYTE: case LMQCPP_PROP_TOPIC_MAXIMUM_2BYTE: case LMQCPP_PROP_TOPIC_ALIAS_2BYTE: if (par->flag_prop_multi) goto singular_prop_seen_twice; if (lws_mqtt_mb_first(&par->vbit)) lws_mqtt_2byte_init(&par->vbit); switch (lws_mqtt_mb_parse(&par->vbit, &buf, &len)) { case LMSPR_NEED_MORE: break; case LMSPR_COMPLETED: if (lws_mqtt_pconsume(par, par->vbit.consumed)) goto send_protocol_error_and_close; break; default: goto send_protocol_error_and_close; } break; case LMQCPP_PROP_ASSIGNED_CLIENTID_UTF8S: case LMQCPP_PROP_AUTH_METHOD_UTF8S: case LMQCPP_PROP_USER_PROPERTY_NAME_UTF8S: case LMQCPP_PROP_USER_PROPERTY_VALUE_UTF8S: case LMQCPP_PROP_RESPONSE_INFO_UTF8S: case LMQCPP_PROP_SERVER_REFERENCE_UTF8S: case LMQCPP_PROP_REASON_STRING_UTF8S: case LMQCPP_PROP_RESPONSE_TOPIC_UTF8S: case LMQCPP_PROP_CONTENT_TYPE_UTF8S: if (par->flag_prop_multi) goto singular_prop_seen_twice; if (lws_mqtt_str_first(&par->s_temp)) lws_mqtt_str_init(&par->s_temp, par->temp, sizeof(par->temp), 0); switch (lws_mqtt_str_parse(&par->s_temp, &buf, &len)) { case LMSPR_NEED_MORE: break; case LMSPR_COMPLETED: if (lws_mqtt_pconsume(par, par->s_temp.len)) goto send_protocol_error_and_close; break; default: lwsl_info("%s: bad protocol name\n", __func__); goto send_protocol_error_and_close; } break; case LMQCPP_PROP_SUBSCRIPTION_ID_VBI: case LMQCPP_PROP_CORRELATION_BINDATA: case LMQCPP_PROP_AUTH_DATA_BINDATA: /* TODO */ lwsl_err("%s: Unimplemented packet state 0x%x\n", __func__, par->state); return -1; } } return 0; oom: lwsl_err("%s: OOM!\n", __func__); goto send_protocol_error_and_close; singular_prop_seen_twice: lwsl_info("%s: property appears twice\n", __func__); send_protocol_error_and_close: lwsl_notice("%s: peac\n", __func__); par->reason = LMQCP_REASON_PROTOCOL_ERROR; send_reason_and_close: lwsl_notice("%s: srac\n", __func__); par->flag_pending_send_reason_close = 1; goto ask; send_unsupp_connack_and_close: lwsl_notice("%s: unsupac\n", __func__); par->reason = LMQCP_REASON_UNSUPPORTED_PROTOCOL; par->flag_pending_send_connack_close = 1; ask: /* Should we ask for clients? */ lws_callback_on_writable(wsi); return -1; } int lws_mqtt_fill_fixed_header(uint8_t *p, lws_mqtt_control_packet_t ctrl_pkt_type, uint8_t dup, lws_mqtt_qos_levels_t qos, uint8_t retain) { lws_mqtt_fixed_hdr_t hdr; hdr.bits = 0; hdr.flags.ctrl_pkt_type = ctrl_pkt_type & 0xf; switch(ctrl_pkt_type) { case LMQCP_PUBLISH: hdr.flags.dup = !!dup; /* * A PUBLISH Packet MUST NOT have both QoS bits set to * 1. If a Server or Client receives a PUBLISH Packet * which has both QoS bits set to 1 it MUST close the * Network Connection [MQTT-3.3.1-4]. */ if (qos >= RESERVED_QOS_LEVEL) { lwsl_err("%s: Unsupport QoS level 0x%x\n", __func__, qos); return -1; } hdr.flags.qos = qos & 3; hdr.flags.retain = !!retain; break; case LMQCP_CTOS_CONNECT: case LMQCP_STOC_CONNACK: case LMQCP_PUBACK: case LMQCP_PUBREC: case LMQCP_PUBCOMP: case LMQCP_STOC_SUBACK: case LMQCP_STOC_UNSUBACK: case LMQCP_CTOS_PINGREQ: case LMQCP_STOC_PINGRESP: case LMQCP_DISCONNECT: case LMQCP_AUTH: hdr.bits &= 0xf0; break; /* * Bits 3,2,1 and 0 of the fixed header of the PUBREL, * SUBSCRIBE, UNSUBSCRIBE Control Packets are reserved and * MUST be set to 0,0,1 and 0 respectively. The Server MUST * treat any other value as malformed and close the Network * Connection [MQTT-3.6.1-1], [MQTT-3.8.1-1], [MQTT-3.10.1-1]. */ case LMQCP_PUBREL: case LMQCP_CTOS_SUBSCRIBE: case LMQCP_CTOS_UNSUBSCRIBE: hdr.bits |= 0x02; break; default: return -1; } *p = hdr.bits; return 0; } int lws_mqtt_client_send_publish(struct lws *wsi, lws_mqtt_publish_param_t *pub, const void *buf, uint32_t len, int is_complete) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; uint8_t *b = (uint8_t *)pt->serv_buf, *start, *p; struct lws *nwsi = lws_get_network_wsi(wsi); lws_mqtt_str_t mqtt_vh_payload; uint32_t vh_len, rem_len; assert(pub->topic); lwsl_debug("%s: len = %d, is_complete = %d\n", __func__, (int)len, (int)is_complete); if (lwsi_state(wsi) != LRS_ESTABLISHED) { lwsl_err("%s: %s: unknown state 0x%x\n", __func__, lws_wsi_tag(wsi), lwsi_state(wsi)); assert(0); return 1; } if (wsi->mqtt->inside_payload) { /* * Headers are filled, we are sending * the payload - a buffer with LWS_PRE * in front it. */ start = (uint8_t *)buf; p = start + len; if (is_complete) wsi->mqtt->inside_payload = 0; goto do_write; } start = b + LWS_PRE; p = start; /* * Fill headers and the first chunk of the * payload (if any) */ if (lws_mqtt_fill_fixed_header(p++, LMQCP_PUBLISH, pub->dup, pub->qos, pub->retain)) { lwsl_err("%s: Failed to fill fixed header\n", __func__); return 1; } /* * Topic len field + Topic len + Packet ID * (for QOS>0) + Payload len */ vh_len = (unsigned int)(2 + pub->topic_len + ((pub->qos) ? 2 : 0)); rem_len = vh_len + pub->payload_len; lwsl_debug("%s: Remaining len = %d\n", __func__, (int) rem_len); /* Will the chunk of payload fit? */ if ((vh_len + len) >= (wsi->a.context->pt_serv_buf_size - LWS_PRE)) { lwsl_err("%s: Payload is too big\n", __func__); return 1; } p += lws_mqtt_vbi_encode(rem_len, p); /* Topic's Len */ lws_ser_wu16be(p, pub->topic_len); p += 2; /* * Init lws_mqtt_str for "MQTT Variable * Headers + payload" (only the supplied * chuncked payload) */ lws_mqtt_str_init(&mqtt_vh_payload, (uint8_t *)p, (uint16_t)(unsigned int)(pub->topic_len + ((pub->qos) ? 2u : 0u) + len), 0); p = lws_mqtt_str_next(&mqtt_vh_payload, NULL); lws_strncpy((char *)p, pub->topic, (size_t)pub->topic_len+1); if (lws_mqtt_str_advance(&mqtt_vh_payload, pub->topic_len)) { lwsl_err("%s: a\n", __func__); return 1; } /* Packet ID */ if (pub->qos != QOS0) { p = lws_mqtt_str_next(&mqtt_vh_payload, NULL); if (!pub->dup) nwsi->mqtt->pkt_id++; wsi->mqtt->ack_pkt_id = pub->packet_id = nwsi->mqtt->pkt_id; lwsl_debug("%s: pkt_id = %d\n", __func__, (int)wsi->mqtt->ack_pkt_id); lws_ser_wu16be(p, pub->packet_id); if (lws_mqtt_str_advance(&mqtt_vh_payload, 2)) { lwsl_err("%s: b\n", __func__); return 1; } } p = lws_mqtt_str_next(&mqtt_vh_payload, NULL); memcpy(p, buf, len); if (lws_mqtt_str_advance(&mqtt_vh_payload, (int)len)) return 1; p = lws_mqtt_str_next(&mqtt_vh_payload, NULL); if (!is_complete) nwsi->mqtt->inside_payload = wsi->mqtt->inside_payload = 1; do_write: // lwsl_hexdump_err(start, lws_ptr_diff(p, start)); if (lws_write(nwsi, start, lws_ptr_diff_size_t(p, start), LWS_WRITE_BINARY) != lws_ptr_diff(p, start)) { lwsl_err("%s: write failed\n", __func__); return 1; } if (!is_complete) { /* still some more chunks to come... */ lws_callback_on_writable(wsi); return 0; } wsi->mqtt->inside_payload = nwsi->mqtt->inside_payload = 0; if (pub->qos != QOS0) wsi->mqtt->unacked_publish = 1; /* this was the last part of the publish message */ if (pub->qos == QOS0) { /* * There won't be any real PUBACK, act like we got one * so the user callback logic is the same for QoS0 or * QoS1 */ if (wsi->a.protocol->callback(wsi, LWS_CALLBACK_MQTT_ACK, wsi->user_space, NULL, 0)) { lwsl_err("%s: ACK callback exited\n", __func__); return 1; } } else if (pub->qos == QOS1 || pub->qos == QOS2) { /* For QoS1 or QoS2, if no PUBACK or PUBREC coming after 3s, * we must RETRY the publish */ wsi->mqtt->sul_qos_puback_pubrec_wait.cb = lws_mqtt_publish_resend; __lws_sul_insert_us(&pt->pt_sul_owner[wsi->conn_validity_wakesuspend], &wsi->mqtt->sul_qos_puback_pubrec_wait, 3 * LWS_USEC_PER_SEC); } if (wsi->mqtt->inside_shadow) { wsi->mqtt->sul_shadow_wait.cb = lws_mqtt_shadow_timeout; __lws_sul_insert_us(&pt->pt_sul_owner[wsi->conn_validity_wakesuspend], &wsi->mqtt->sul_shadow_wait, 60 * LWS_USEC_PER_SEC); } return 0; } int lws_mqtt_client_send_subcribe(struct lws *wsi, lws_mqtt_subscribe_param_t *sub) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; uint8_t *b = (uint8_t *)pt->serv_buf + LWS_PRE, *start = b, *p = start; struct lws *nwsi = lws_get_network_wsi(wsi); lws_mqtt_str_t mqtt_vh_payload; uint8_t exists[8], extant; lws_mqtt_subs_t *mysub; uint32_t rem_len; #if defined(_DEBUG) uint32_t tops; #endif uint32_t n; assert(sub->num_topics); assert(sub->num_topics < sizeof(exists)); switch (lwsi_state(wsi)) { case LRS_ESTABLISHED: /* Protocol connection established */ if (lws_mqtt_fill_fixed_header(p++, LMQCP_CTOS_SUBSCRIBE, 0, 0, 0)) { lwsl_err("%s: Failed to fill fixed header\n", __func__); return 1; } /* * The stream wants to subscribe to one or more topic, but * the shared nwsi may already be subscribed to some or all of * them from interactions with other streams. For those cases, * we filter them from the list the child wants until we just * have ones that are new to the nwsi. If nothing left, we just * synthesize the callback to the child as if SUBACK had come * and we're done, otherwise just ask the server for topics that * are new to the wsi. */ extant = 0; memset(&exists, 0, sizeof(exists)); for (n = 0; n < sub->num_topics; n++) { lwsl_info("%s: Subscribing to topic[%d] = \"%s\"\n", __func__, (int)n, sub->topic[n].name); mysub = lws_mqtt_find_sub(nwsi->mqtt, sub->topic[n].name); if (mysub && mysub->ref_count) { mysub->ref_count++; /* another stream using it */ exists[n] = 1; extant++; } /* * Attach the topic we're subscribing to, to wsi->mqtt */ if (!lws_mqtt_create_sub(wsi->mqtt, sub->topic[n].name)) { lwsl_err("%s: create sub fail\n", __func__); return 1; } } if (extant == sub->num_topics) { /* * It turns out there's nothing to do here, the nwsi has * already subscribed to all the topics this stream * wanted. Just tell it it can have them. */ lwsl_notice("%s: all topics already subscribed\n", __func__); if (user_callback_handle_rxflow( wsi->a.protocol->callback, wsi, LWS_CALLBACK_MQTT_SUBSCRIBED, wsi->user_space, NULL, 0) < 0) { lwsl_err("%s: MQTT_SUBSCRIBE failed\n", __func__); return -1; } return 0; } #if defined(_DEBUG) /* * zero or more of the topics already existed, but not all, * so we must go to the server with a filtered list of the * new ones only */ tops = sub->num_topics - extant; #endif /* * Pid + (Topic len field + Topic len + Req. QoS) x Num of Topics */ rem_len = 2; for (n = 0; n < sub->num_topics; n++) if (!exists[n]) rem_len += (2 + (uint32_t)strlen(sub->topic[n].name) + (uint32_t)1); wsi->mqtt->sub_size = (uint16_t)rem_len; #if defined(_DEBUG) lwsl_debug("%s: Number of topics = %d, Remaining len = %d\n", __func__, (int)tops, (int)rem_len); #endif p += lws_mqtt_vbi_encode(rem_len, p); if ((rem_len + lws_ptr_diff_size_t(p, start)) >= wsi->a.context->pt_serv_buf_size) { lwsl_err("%s: Payload is too big\n", __func__); return 1; } /* Init lws_mqtt_str */ lws_mqtt_str_init(&mqtt_vh_payload, (uint8_t *)p, (uint16_t)rem_len, 0); p = lws_mqtt_str_next(&mqtt_vh_payload, NULL); /* Packet ID */ wsi->mqtt->ack_pkt_id = sub->packet_id = ++nwsi->mqtt->pkt_id; lwsl_debug("%s: pkt_id = %d\n", __func__, (int)sub->packet_id); lws_ser_wu16be(p, wsi->mqtt->ack_pkt_id); nwsi->mqtt->client.aws_iot = wsi->mqtt->client.aws_iot; if (lws_mqtt_str_advance(&mqtt_vh_payload, 2)) return 1; p = lws_mqtt_str_next(&mqtt_vh_payload, NULL); for (n = 0; n < sub->num_topics; n++) { lwsl_info("%s: topics[%d] = %s\n", __func__, (int)n, sub->topic[n].name); /* if the nwsi already has it, don't ask server for it */ if (exists[n]) { lwsl_info("%s: topics[%d] \"%s\" exists in nwsi\n", __func__, (int)n, sub->topic[n].name); continue; } /* * Attach the topic we're subscribing to, to nwsi->mqtt * so we know the nwsi itself has a subscription to it */ if (!lws_mqtt_create_sub(nwsi->mqtt, sub->topic[n].name)) return 1; /* Topic's Len */ lws_ser_wu16be(p, (uint16_t)strlen(sub->topic[n].name)); if (lws_mqtt_str_advance(&mqtt_vh_payload, 2)) return 1; p = lws_mqtt_str_next(&mqtt_vh_payload, NULL); /* Topic Name */ lws_strncpy((char *)p, sub->topic[n].name, strlen(sub->topic[n].name) + 1); if (lws_mqtt_str_advance(&mqtt_vh_payload, (int)strlen(sub->topic[n].name))) return 1; p = lws_mqtt_str_next(&mqtt_vh_payload, NULL); /* QoS */ *p = (uint8_t)sub->topic[n].qos; if (lws_mqtt_str_advance(&mqtt_vh_payload, 1)) return 1; p = lws_mqtt_str_next(&mqtt_vh_payload, NULL); } break; default: return 1; } if (wsi->mqtt->inside_resume_session) return 0; if (lws_write(nwsi, start, lws_ptr_diff_size_t(p, start), LWS_WRITE_BINARY) != lws_ptr_diff(p, start)) return 1; wsi->mqtt->inside_subscribe = 1; return 0; } int lws_mqtt_client_send_unsubcribe(struct lws *wsi, const lws_mqtt_subscribe_param_t *unsub) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; uint8_t *b = (uint8_t *)pt->serv_buf + LWS_PRE, *start = b, *p = start; struct lws *nwsi = lws_get_network_wsi(wsi); lws_mqtt_str_t mqtt_vh_payload; uint8_t send_unsub[8], orphaned; uint32_t rem_len, n; lws_mqtt_subs_t *mysub; #if defined(_DEBUG) uint32_t tops; #endif lwsl_info("%s: Enter\n", __func__); switch (lwsi_state(wsi)) { case LRS_ESTABLISHED: /* Protocol connection established */ orphaned = 0; memset(&send_unsub, 0, sizeof(send_unsub)); for (n = 0; n < unsub->num_topics; n++) { mysub = lws_mqtt_find_sub(nwsi->mqtt, unsub->topic[n].name); assert(mysub); if (mysub && --mysub->ref_count == 0) { lwsl_notice("%s: Need to send UNSUB\n", __func__); send_unsub[n] = 1; orphaned++; } } if (!orphaned) { /* * The nwsi still has other subscribers bound to the * topics. * * So, don't send UNSUB to server, and just fake the * UNSUB ACK event for the guy going away. */ lwsl_notice("%s: unsubscribed!\n", __func__); if (user_callback_handle_rxflow( wsi->a.protocol->callback, wsi, LWS_CALLBACK_MQTT_UNSUBSCRIBED, wsi->user_space, NULL, 0) < 0) { /* * We can't directly close here, because the * caller still has the wsi. Inform the * caller that we want to close */ return 1; } return 0; } #if defined(_DEBUG) /* * one or more of the topics needs to be unsubscribed * from, so we must go to the server with a filtered * list of the new ones only */ tops = orphaned; #endif if (lws_mqtt_fill_fixed_header(p++, LMQCP_CTOS_UNSUBSCRIBE, 0, 0, 0)) { lwsl_err("%s: Failed to fill fixed header\n", __func__); return 1; } /* * Pid + (Topic len field + Topic len) x Num of Topics */ rem_len = 2; for (n = 0; n < unsub->num_topics; n++) if (send_unsub[n]) rem_len += (2 + (uint32_t)strlen(unsub->topic[n].name)); wsi->mqtt->sub_size = (uint16_t)rem_len; #if defined(_DEBUG) lwsl_debug("%s: Number of topics = %d, Remaining len = %d\n", __func__, (int)tops, (int)rem_len); #endif p += lws_mqtt_vbi_encode(rem_len, p); if ((rem_len + lws_ptr_diff_size_t(p, start)) >= wsi->a.context->pt_serv_buf_size) { lwsl_err("%s: Payload is too big\n", __func__); return 1; } /* Init lws_mqtt_str */ lws_mqtt_str_init(&mqtt_vh_payload, (uint8_t *)p, (uint16_t)rem_len, 0); p = lws_mqtt_str_next(&mqtt_vh_payload, NULL); /* Packet ID */ wsi->mqtt->ack_pkt_id = ++nwsi->mqtt->pkt_id; lwsl_debug("%s: pkt_id = %d\n", __func__, (int)wsi->mqtt->ack_pkt_id); lws_ser_wu16be(p, wsi->mqtt->ack_pkt_id); nwsi->mqtt->client.aws_iot = wsi->mqtt->client.aws_iot; if (lws_mqtt_str_advance(&mqtt_vh_payload, 2)) return 1; p = lws_mqtt_str_next(&mqtt_vh_payload, NULL); for (n = 0; n < unsub->num_topics; n++) { lwsl_info("%s: topics[%d] = %s\n", __func__, (int)n, unsub->topic[n].name); /* * Subscriber still bound to it, don't UBSUB * from the server */ if (!send_unsub[n]) continue; /* Topic's Len */ lws_ser_wu16be(p, (uint16_t)strlen(unsub->topic[n].name)); if (lws_mqtt_str_advance(&mqtt_vh_payload, 2)) return 1; p = lws_mqtt_str_next(&mqtt_vh_payload, NULL); /* Topic Name */ lws_strncpy((char *)p, unsub->topic[n].name, strlen(unsub->topic[n].name) + 1); if (lws_mqtt_str_advance(&mqtt_vh_payload, (int)strlen(unsub->topic[n].name))) return 1; p = lws_mqtt_str_next(&mqtt_vh_payload, NULL); } break; default: return 1; } if (lws_write(nwsi, start, lws_ptr_diff_size_t(p, start), LWS_WRITE_BINARY) != lws_ptr_diff(p, start)) return 1; wsi->mqtt->inside_unsubscribe = 1; wsi->mqtt->sul_unsuback_wait.cb = lws_mqtt_unsuback_timeout; __lws_sul_insert_us(&pt->pt_sul_owner[wsi->conn_validity_wakesuspend], &wsi->mqtt->sul_unsuback_wait, 3 * LWS_USEC_PER_SEC); return 0; } /* * This is called when child streams bind to an already-existing and compatible * MQTT stream */ struct lws * lws_wsi_mqtt_adopt(struct lws *parent_wsi, struct lws *wsi) { /* no more children allowed by parent? */ if (parent_wsi->mux.child_count + 1 > LWS_MQTT_MAX_CHILDREN) { lwsl_err("%s: reached concurrent stream limit\n", __func__); return NULL; } #if defined(LWS_WITH_CLIENT) wsi->client_mux_substream = 1; #endif lws_wsi_mux_insert(wsi, parent_wsi, wsi->mux.my_sid); if (lws_ensure_user_space(wsi)) goto bail1; lws_mqtt_set_client_established(wsi); lws_callback_on_writable(wsi); return wsi; bail1: /* undo the insert */ parent_wsi->mux.child_list = wsi->mux.sibling_list; parent_wsi->mux.child_count--; if (wsi->user_space) lws_free_set_NULL(wsi->user_space); wsi->a.protocol->callback(wsi, LWS_CALLBACK_WSI_DESTROY, NULL, NULL, 0); lws_free(wsi); return NULL; } libwebsockets-4.3.5/lib/roles/mqtt/ops-mqtt.c000066400000000000000000000425401476025525100212060ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" static int rops_handle_POLLIN_mqtt(struct lws_context_per_thread *pt, struct lws *wsi, struct lws_pollfd *pollfd) { unsigned int pending = 0; struct lws_tokens ebuf; int n = 0; char buffered = 0; lwsl_debug("%s: wsistate 0x%x, %s pollout %d\n", __func__, (unsigned int)wsi->wsistate, wsi->a.protocol->name, pollfd->revents); /* * After the CONNACK and nwsi establishment, the first logical * stream is migrated out of the nwsi to be child sid 1, and the * nwsi no longer has a wsi->mqtt of its own. * * RX events on the nwsi must be converted to events seen or not * seen by one or more child streams. * * SUBACK - reflected to child stream that asked for it * PUBACK - routed to child that did the related publish */ ebuf.token = NULL; ebuf.len = 0; if (lwsi_state(wsi) != LRS_ESTABLISHED) { #if defined(LWS_WITH_CLIENT) if (lwsi_state(wsi) == LRS_WAITING_SSL && ((pollfd->revents & LWS_POLLOUT)) && lws_change_pollfd(wsi, LWS_POLLOUT, 0)) { lwsl_info("failed at set pollfd\n"); return LWS_HPI_RET_PLEASE_CLOSE_ME; } if ((pollfd->revents & LWS_POLLOUT) && lws_handle_POLLOUT_event(wsi, pollfd)) { lwsl_debug("POLLOUT event closed it\n"); return LWS_HPI_RET_PLEASE_CLOSE_ME; } n = lws_mqtt_client_socket_service(wsi, pollfd, NULL); if (n) return LWS_HPI_RET_WSI_ALREADY_DIED; #endif return LWS_HPI_RET_HANDLED; } /* 1: something requested a callback when it was OK to write */ if ((pollfd->revents & LWS_POLLOUT) && lwsi_state_can_handle_POLLOUT(wsi) && lws_handle_POLLOUT_event(wsi, pollfd)) { if (lwsi_state(wsi) == LRS_RETURNED_CLOSE) lwsi_set_state(wsi, LRS_FLUSHING_BEFORE_CLOSE); return LWS_HPI_RET_PLEASE_CLOSE_ME; } /* 3: buflist needs to be drained */ read: // lws_buflist_describe(&wsi->buflist, wsi, __func__); ebuf.len = (int)lws_buflist_next_segment_len(&wsi->buflist, &ebuf.token); if (ebuf.len) { lwsl_info("draining buflist (len %d)\n", ebuf.len); buffered = 1; goto drain; } if (!(pollfd->revents & pollfd->events & LWS_POLLIN)) return LWS_HPI_RET_HANDLED; /* if (lws_is_flowcontrolled(wsi)) { */ /* lwsl_info("%s: %p should be rxflow (bm 0x%x)..\n", */ /* __func__, wsi, wsi->rxflow_bitmap); */ /* return LWS_HPI_RET_HANDLED; */ /* } */ if (!(lwsi_role_client(wsi) && lwsi_state(wsi) != LRS_ESTABLISHED)) { /* * In case we are going to react to this rx by scheduling * writes, we need to restrict the amount of rx to the size * the protocol reported for rx buffer. * * Otherwise we get a situation we have to absorb possibly a * lot of reads before we get a chance to drain them by writing * them, eg, with echo type tests in autobahn. */ buffered = 0; ebuf.token = pt->serv_buf; ebuf.len = (int)wsi->a.context->pt_serv_buf_size; if ((unsigned int)ebuf.len > wsi->a.context->pt_serv_buf_size) ebuf.len = (int)wsi->a.context->pt_serv_buf_size; if ((int)pending > ebuf.len) pending = (unsigned int)ebuf.len; ebuf.len = lws_ssl_capable_read(wsi, ebuf.token, pending ? pending : (unsigned int)ebuf.len); switch (ebuf.len) { case 0: lwsl_info("%s: zero length read\n", __func__); return LWS_HPI_RET_PLEASE_CLOSE_ME; case LWS_SSL_CAPABLE_MORE_SERVICE: lwsl_info("SSL Capable more service\n"); return LWS_HPI_RET_HANDLED; case LWS_SSL_CAPABLE_ERROR: lwsl_info("%s: LWS_SSL_CAPABLE_ERROR\n", __func__); return LWS_HPI_RET_PLEASE_CLOSE_ME; } /* * coverity thinks ssl_capable_read() may read over * 2GB. Dissuade it... */ ebuf.len &= 0x7fffffff; } drain: /* service incoming data */ //lws_buflist_describe(&wsi->buflist, wsi, __func__); if (ebuf.len) { n = lws_read_mqtt(wsi, ebuf.token, (unsigned int)ebuf.len); if (n < 0) { lwsl_notice("%s: lws_read_mqtt returned %d\n", __func__, n); /* we closed wsi */ goto fail; } // lws_buflist_describe(&wsi->buflist, wsi, __func__); lwsl_debug("%s: consuming %d / %d\n", __func__, n, ebuf.len); if (lws_buflist_aware_finished_consuming(wsi, &ebuf, ebuf.len, buffered, __func__)) return LWS_HPI_RET_PLEASE_CLOSE_ME; } ebuf.token = NULL; ebuf.len = 0; pending = (unsigned int)lws_ssl_pending(wsi); if (pending) { pending = pending > wsi->a.context->pt_serv_buf_size ? wsi->a.context->pt_serv_buf_size : pending; goto read; } if (buffered && /* were draining, now nothing left */ !lws_buflist_next_segment_len(&wsi->buflist, NULL)) { lwsl_info("%s: %s flow buf: drained\n", __func__, lws_wsi_tag(wsi)); /* having drained the rxflow buffer, can rearm POLLIN */ #if !defined(LWS_WITH_SERVER) n = #endif __lws_rx_flow_control(wsi); /* n ignored, needed for NO_SERVER case */ } /* n = 0 */ return LWS_HPI_RET_HANDLED; fail: lwsl_err("%s: Failed, bailing\n", __func__); lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "mqtt svc fail"); return LWS_HPI_RET_WSI_ALREADY_DIED; } #if 0 /* defined(LWS_WITH_SERVER) */ static int rops_adoption_bind_mqtt(struct lws *wsi, int type, const char *vh_prot_name) { /* no http but socket... must be mqtt */ if ((type & LWS_ADOPT_HTTP) || !(type & LWS_ADOPT_SOCKET) || (type & _LWS_ADOPT_FINISH)) return 0; /* no match */ lws_role_transition(wsi, 0, (type & LWS_ADOPT_ALLOW_SSL) ? LRS_SSL_INIT : LRS_ESTABLISHED, &role_ops_mqtt); if (vh_prot_name) lws_bind_protocol(wsi, wsi->a.protocol, __func__); else /* this is the only time he will transition */ lws_bind_protocol(wsi, &wsi->a.vhost->protocols[wsi->a.vhost->mqtt_protocol_index], __func__); return 1; /* bound */ } #endif static int rops_client_bind_mqtt(struct lws *wsi, const struct lws_client_connect_info *i) { lwsl_debug("%s: i = %p\n", __func__, i); if (!i) { /* finalize */ if (!wsi->user_space && wsi->stash->cis[CIS_METHOD]) if (lws_ensure_user_space(wsi)) return 1; if (!wsi->stash->cis[CIS_METHOD] && !wsi->stash->cis[CIS_ALPN]) wsi->stash->cis[CIS_ALPN] = "x-amzn-mqtt-ca"; /* if we went on the ah waiting list, it's ok, we can * wait. * * When we do get the ah, now or later, he will end up * at lws_http_client_connect_via_info2(). */ #if defined(LWS_WITH_CLIENT) if (lws_header_table_attach(wsi, 0) < 0) /* * if we failed here, the connection is already closed * and freed. */ return -1; #else if (lws_header_table_attach(wsi, 0)) return 0; #endif return 0; } /* if a recognized mqtt method, bind to it */ if (strcmp(i->method, "MQTT")) return 0; /* no match */ if (lws_create_client_mqtt_object(i, wsi)) return 1; lws_role_transition(wsi, LWSIFR_CLIENT, LRS_UNCONNECTED, &role_ops_mqtt); return 1; /* matched */ } static int rops_handle_POLLOUT_mqtt(struct lws *wsi) { struct lws **wsi2; lwsl_debug("%s\n", __func__); #if defined(LWS_WITH_CLIENT) if (wsi->mqtt && wsi->mqtt->send_pingreq && !wsi->mqtt->inside_payload) { uint8_t buf[LWS_PRE + 2]; /* * We are swallowing this POLLOUT in order to send a PINGREQ * autonomously */ wsi->mqtt->send_pingreq = 0; lwsl_notice("%s: issuing PINGREQ\n", __func__); buf[LWS_PRE] = LMQCP_CTOS_PINGREQ << 4; buf[LWS_PRE + 1] = 0; if (lws_write(wsi, (uint8_t *)&buf[LWS_PRE], 2, LWS_WRITE_BINARY) != 2) return LWS_HP_RET_BAIL_DIE; return LWS_HP_RET_BAIL_OK; } #endif if (wsi->mqtt && !wsi->mqtt->inside_payload && (wsi->mqtt->send_pubrec || wsi->mqtt->send_pubrel || wsi->mqtt->send_pubcomp)) { uint8_t buf[LWS_PRE + 4]; /* Remaining len = 2 */ buf[LWS_PRE + 1] = 2; if (wsi->mqtt->send_pubrec) { lwsl_notice("%s: issuing PUBREC for pkt id: %d\n", __func__, wsi->mqtt->peer_ack_pkt_id); buf[LWS_PRE] = LMQCP_PUBREC << 4 | 0x2; /* Packet ID */ lws_ser_wu16be(&buf[LWS_PRE + 2], wsi->mqtt->peer_ack_pkt_id); wsi->mqtt->send_pubrec = 0; } else if (wsi->mqtt->send_pubrel) { lwsl_notice("%s: issuing PUBREL for pkt id: %d\n", __func__, wsi->mqtt->ack_pkt_id); buf[LWS_PRE] = LMQCP_PUBREL << 4 | 0x2; lws_ser_wu16be(&buf[LWS_PRE + 2], wsi->mqtt->ack_pkt_id); wsi->mqtt->send_pubrel = 0; } else { lwsl_notice("%s: issuing PUBCOMP for pkt id: %d\n", __func__, wsi->mqtt->peer_ack_pkt_id); buf[LWS_PRE] = LMQCP_PUBCOMP << 4 | 0x2; lws_ser_wu16be(&buf[LWS_PRE + 2], wsi->mqtt->peer_ack_pkt_id); wsi->mqtt->send_pubcomp = 0; } if (lws_write(wsi, (uint8_t *)&buf[LWS_PRE], 4, LWS_WRITE_BINARY) != 4) return LWS_HP_RET_BAIL_DIE; return LWS_HP_RET_BAIL_OK; } wsi = lws_get_network_wsi(wsi); wsi->mux.requested_POLLOUT = 0; wsi2 = &wsi->mux.child_list; if (!*wsi2) { lwsl_debug("%s: no children\n", __func__); return LWS_HP_RET_DROP_POLLOUT; } if (!wsi->mqtt) return LWS_HP_RET_BAIL_DIE; lws_wsi_mux_dump_waiting_children(wsi); do { struct lws *w, **wa; wa = &(*wsi2)->mux.sibling_list; if (!(*wsi2)->mux.requested_POLLOUT) goto next_child; if (!lwsi_state_can_handle_POLLOUT(wsi)) goto next_child; /* * If the nwsi is in the middle of a frame, we can only * continue to send that */ if (wsi->mqtt->inside_payload && !(*wsi2)->mqtt->inside_payload) goto next_child; /* * we're going to do writable callback for this child. * move him to be the last child */ w = lws_wsi_mux_move_child_to_tail(wsi2); if (!w) { wa = &wsi->mux.child_list; goto next_child; } lwsl_debug("%s: child %s (wsistate 0x%x)\n", __func__, lws_wsi_tag(w), (unsigned int)w->wsistate); if (lwsi_state(wsi) == LRS_ESTABLISHED && !wsi->mqtt->inside_payload && wsi->mqtt->send_puback) { uint8_t buf[LWS_PRE + 4]; lwsl_notice("%s: issuing PUBACK for pkt id: %d\n", __func__, wsi->mqtt->ack_pkt_id); /* Fixed header */ buf[LWS_PRE] = LMQCP_PUBACK << 4; /* Remaining len = 2 */ buf[LWS_PRE + 1] = 2; /* Packet ID */ lws_ser_wu16be(&buf[LWS_PRE + 2], wsi->mqtt->peer_ack_pkt_id); if (lws_write(wsi, (uint8_t *)&buf[LWS_PRE], 4, LWS_WRITE_BINARY) != 4) return LWS_HP_RET_BAIL_DIE; wsi->mqtt->send_puback = 0; w->mux.requested_POLLOUT = 1; wa = &wsi->mux.child_list; goto next_child; } if (lws_callback_as_writeable(w)) { lwsl_notice("%s: Closing child %s\n", __func__, lws_wsi_tag(w)); lws_close_free_wsi(w, LWS_CLOSE_STATUS_NOSTATUS, "mqtt pollout handle"); wa = &wsi->mux.child_list; } next_child: wsi2 = wa; } while (wsi2 && *wsi2 && !lws_send_pipe_choked(wsi)); // lws_wsi_mux_dump_waiting_children(wsi); if (lws_wsi_mux_action_pending_writeable_reqs(wsi)) return LWS_HP_RET_BAIL_DIE; return LWS_HP_RET_BAIL_OK; } #if defined(LWS_WITH_CLIENT) static int rops_issue_keepalive_mqtt(struct lws *wsi, int isvalid) { struct lws *nwsi = lws_get_network_wsi(wsi); if (isvalid) { _lws_validity_confirmed_role(nwsi); return 0; } nwsi->mqtt->send_pingreq = 1; lws_callback_on_writable(nwsi); return 0; } #endif static int rops_close_role_mqtt(struct lws_context_per_thread *pt, struct lws *wsi) { struct lws *nwsi = lws_get_network_wsi(wsi); lws_mqtt_subs_t *s, *s1, *mysub; lws_mqttc_t *c; if (!wsi->mqtt) return 0; c = &wsi->mqtt->client; lws_sul_cancel(&wsi->mqtt->sul_qos_puback_pubrec_wait); lws_mqtt_str_free(&c->username); lws_mqtt_str_free(&c->password); lws_mqtt_str_free(&c->will.message); lws_mqtt_str_free(&c->will.topic); lws_mqtt_str_free(&c->id); /* clean up any subscription allocations */ s = wsi->mqtt->subs_head; wsi->mqtt->subs_head = NULL; while (s) { s1 = s->next; /* * Account for children no longer using nwsi subscription */ mysub = lws_mqtt_find_sub(nwsi->mqtt, (const char *)&s[1]); // assert(mysub); /* if child subscribed, nwsi must feel the same */ if (mysub) { assert(mysub->ref_count); mysub->ref_count--; } lws_free(s); s = s1; } lws_mqtt_publish_param_t *pub = (lws_mqtt_publish_param_t *) wsi->mqtt->rx_cpkt_param; if (pub) lws_free_set_NULL(pub->topic); lws_free_set_NULL(wsi->mqtt->rx_cpkt_param); lws_free_set_NULL(wsi->mqtt); return 0; } static int rops_callback_on_writable_mqtt(struct lws *wsi) { #if defined(LWS_WITH_CLIENT) struct lws *network_wsi; #endif int already; lwsl_debug("%s: %s (wsistate 0x%x)\n", __func__, lws_wsi_tag(wsi), (unsigned int)wsi->wsistate); if (wsi->mux.requested_POLLOUT #if defined(LWS_WITH_CLIENT) && !wsi->client_h2_alpn #endif ) { lwsl_debug("already pending writable\n"); return 1; } #if 0 /* is this for DATA or for control messages? */ if (wsi->upgraded_to_http2 && !wsi->h2.h2n->pps && !lws_h2_tx_cr_get(wsi)) { /* * other side is not able to cope with us sending DATA * anything so no matter if we have POLLOUT on our side if it's * DATA we want to send. * * Delay waiting for our POLLOUT until peer indicates he has * space for more using tx window command in http2 layer */ lwsl_notice("%s: %p: skint (%d)\n", __func__, wsi, wsi->h2.tx_cr); wsi->h2.skint = 1; return 0; } wsi->h2.skint = 0; #endif #if defined(LWS_WITH_CLIENT) network_wsi = lws_get_network_wsi(wsi); #endif already = lws_wsi_mux_mark_parents_needing_writeable(wsi); /* for network action, act only on the network wsi */ if (already #if defined(LWS_WITH_CLIENT) && !network_wsi->client_mux_substream #endif ) return 1; return 0; } static int rops_close_kill_connection_mqtt(struct lws *wsi, enum lws_close_status reason) { lwsl_info(" %s, his parent %s: child list %p, siblings:\n", lws_wsi_tag(wsi), lws_wsi_tag(wsi->mux.parent_wsi), wsi->mux.child_list); //lws_wsi_mux_dump_children(wsi); if (wsi->mux_substream #if defined(LWS_WITH_CLIENT) || wsi->client_mux_substream #endif ) { lwsl_info("closing %s: parent %s: first child %p\n", lws_wsi_tag(wsi), lws_wsi_tag(wsi->mux.parent_wsi), wsi->mux.child_list); if (wsi->mux.child_list && lwsl_visible(LLL_INFO)) { lwsl_info(" parent %s: closing children: list:\n", lws_wsi_tag(wsi)); lws_wsi_mux_dump_children(wsi); } lws_wsi_mux_close_children(wsi, (int)reason); } if (( #if defined(LWS_WITH_CLIENT) wsi->client_mux_substream || #endif wsi->mux_substream) && wsi->mux.parent_wsi) { lws_wsi_mux_sibling_disconnect(wsi); } return 0; } static const lws_rops_t rops_table_mqtt[] = { /* 1 */ { .handle_POLLIN = rops_handle_POLLIN_mqtt }, /* 2 */ { .handle_POLLOUT = rops_handle_POLLOUT_mqtt }, /* 3 */ { .callback_on_writable = rops_callback_on_writable_mqtt }, /* 4 */ { .close_role = rops_close_role_mqtt }, /* 5 */ { .close_kill_connection = rops_close_kill_connection_mqtt }, #if defined(LWS_WITH_CLIENT) /* 6 */ { .client_bind = rops_client_bind_mqtt }, /* 7 */ { .issue_keepalive = rops_issue_keepalive_mqtt }, #endif }; struct lws_role_ops role_ops_mqtt = { /* role name */ "mqtt", /* alpn id */ "x-amzn-mqtt-ca", /* "mqtt/3.1.1" */ /* rops_table */ rops_table_mqtt, /* rops_idx */ { /* LWS_ROPS_check_upgrades */ /* LWS_ROPS_pt_init_destroy */ 0x00, /* LWS_ROPS_init_vhost */ /* LWS_ROPS_destroy_vhost */ 0x00, /* LWS_ROPS_service_flag_pending */ /* LWS_ROPS_handle_POLLIN */ 0x01, /* LWS_ROPS_handle_POLLOUT */ /* LWS_ROPS_perform_user_POLLOUT */ 0x20, /* LWS_ROPS_callback_on_writable */ /* LWS_ROPS_tx_credit */ 0x30, /* LWS_ROPS_write_role_protocol */ /* LWS_ROPS_encapsulation_parent */ 0x00, /* LWS_ROPS_alpn_negotiated */ /* LWS_ROPS_close_via_role_protocol */ 0x00, /* LWS_ROPS_close_role */ /* LWS_ROPS_close_kill_connection */ 0x45, /* LWS_ROPS_destroy_role */ /* LWS_ROPS_adoption_bind */ 0x00, /* LWS_ROPS_client_bind */ #if defined(LWS_WITH_CLIENT) /* LWS_ROPS_issue_keepalive */ 0x67, #else /* LWS_ROPS_issue_keepalive */ 0x00, #endif }, .adoption_cb = { LWS_CALLBACK_MQTT_NEW_CLIENT_INSTANTIATED, LWS_CALLBACK_MQTT_NEW_CLIENT_INSTANTIATED }, .rx_cb = { LWS_CALLBACK_MQTT_CLIENT_RX, LWS_CALLBACK_MQTT_CLIENT_RX }, .writeable_cb = { LWS_CALLBACK_MQTT_CLIENT_WRITEABLE, LWS_CALLBACK_MQTT_CLIENT_WRITEABLE }, .close_cb = { LWS_CALLBACK_MQTT_CLIENT_CLOSED, LWS_CALLBACK_MQTT_CLIENT_CLOSED }, .protocol_bind_cb = { LWS_CALLBACK_MQTT_IDLE, LWS_CALLBACK_MQTT_IDLE }, .protocol_unbind_cb = { LWS_CALLBACK_MQTT_DROP_PROTOCOL, LWS_CALLBACK_MQTT_DROP_PROTOCOL }, .file_handle = 0, }; libwebsockets-4.3.5/lib/roles/mqtt/primitives.c000066400000000000000000000160331476025525100216130ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * MQTT v5 * * http://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html */ #include "private-lib-core.h" #include #include #include /* * Encode is done into a buffer of at least 4 bytes space. * * Returns -1 for error, or number of bytes used */ int lws_mqtt_vbi_encode(uint32_t value, void *buf) { uint8_t *p = (uint8_t *)buf, b; if (value > 0xfffffff) { assert(0); return -1; } do { b = value & 0x7f; value >>= 7; if (value) *p++ = (0x80 | b); else *p++ = b; } while (value); return lws_ptr_diff(p, (uint8_t *)buf); } void lws_mqtt_vbi_init(lws_mqtt_vbi *vbi) { vbi->value = 0; vbi->consumed = 0; vbi->budget = 4; } void lws_mqtt_2byte_init(lws_mqtt_vbi *vbi) { vbi->value = 0; vbi->consumed = 0; vbi->budget = 2; } void lws_mqtt_4byte_init(lws_mqtt_vbi *vbi) { vbi->value = 0; vbi->consumed = 0; vbi->budget = 4; } lws_mqtt_stateful_primitive_return_t lws_mqtt_vbi_r(lws_mqtt_vbi *vbi, const uint8_t **in, size_t *len) { uint8_t multiplier = 0; if (!vbi->budget) { lwsl_info("%s: bad vbi\n", __func__); return LMSPR_FAILED_ALREADY_COMPLETED; } while (*len && vbi->budget--) { uint8_t u = *((*in)++); (*len)--; vbi->consumed++; vbi->value = vbi->value + (uint32_t)((u & 0x7f) << multiplier); multiplier = (uint8_t)(multiplier + 7); if (!(u & 0x80)) return LMSPR_COMPLETED; /* finished */ } if (!vbi->budget) { /* should have ended on b7 = 0 and exited then... */ lwsl_info("%s: bad vbi\n", __func__); return LMSPR_FAILED_FORMAT; } return LMSPR_NEED_MORE; } lws_mqtt_stateful_primitive_return_t lws_mqtt_mb_parse(lws_mqtt_vbi *vbi, const uint8_t **in, size_t *len) { if (!vbi->budget) return LMSPR_FAILED_ALREADY_COMPLETED; while (*len && vbi->budget--) { vbi->value = (vbi->value << 8) | *((*in)++); (*len)--; vbi->consumed++; } return vbi->budget ? LMSPR_NEED_MORE : LMSPR_COMPLETED; } /* * You can leave buf NULL, if so it will be allocated on the heap once the * actual length is known. nf should be 0, it will be set at allocation time. * * Or you can ensure no allocation and use an external buffer by setting buf * and lim. But buf must be in the ep context somehow, since it may have to * survive returns to the event loop unchanged. Set nf to 0 in this case. * * Or you can set buf to an externally allocated buffer, in which case you may * set nf so it will be freed when the string is "freed". */ void lws_mqtt_str_init(lws_mqtt_str_t *s, uint8_t *buf, uint16_t lim, char nf) { s->len = 0; /* at COMPLETED, consumed count is s->len + 2 */ s->pos = 0; s->buf = buf; s->limit = lim; s->len_valid = 0; s->needs_freeing = nf; } lws_mqtt_str_t * lws_mqtt_str_create(uint16_t lim) { lws_mqtt_str_t *s = lws_malloc(sizeof(*s) + lim + 1, __func__); if (!s) return NULL; s->len = 0; s->pos = 0; s->buf = (uint8_t *)&s[1]; s->limit = lim; s->len_valid = 0; s->needs_freeing = 1; return s; } lws_mqtt_str_t * lws_mqtt_str_create_init(uint8_t *buf, uint16_t len, uint16_t lim) { lws_mqtt_str_t *s; if (!lim) lim = len; s = lws_mqtt_str_create(lim); if (!s) return NULL; memcpy(s->buf, buf, len); s->len = len; s->len_valid = 1; s->pos = len; return s; } lws_mqtt_str_t * lws_mqtt_str_create_cstr_dup(const char *buf, uint16_t lim) { size_t len = strlen(buf); if (!lim) lim = (uint16_t)len; return lws_mqtt_str_create_init((uint8_t *)buf, (uint16_t)len, lim); } uint8_t * lws_mqtt_str_next(lws_mqtt_str_t *s, uint16_t *budget) { if (budget) *budget = (uint16_t)(s->limit - s->pos); return &s->buf[s->pos]; } int lws_mqtt_str_advance(lws_mqtt_str_t *s, int n) { if (n > s->limit - s->pos) { lwsl_err("%s: attempted overflow %d vs %d\n", __func__, n, s->limit - s->pos); return 1; } s->pos = (uint16_t)(s->pos + (uint16_t)n); s->len = (uint16_t)(s->len + (uint16_t)n); return 0; } void lws_mqtt_str_free(lws_mqtt_str_t **ps) { lws_mqtt_str_t *s = *ps; if (!s || !s->needs_freeing) return; /* buf may be independently allocated or allocated along with the * lws_mqtt_str_t at the end... if so the whole lws_mqtt_str_t is freed. */ if (s->buf != (uint8_t *)&s[1]) lws_free_set_NULL(s->buf); else lws_free_set_NULL(*ps); } /* * Parses and allocates for lws_mqtt_str_t in a fragmentation-immune, but * efficient for bulk data way. * * Returns: LMSPR_NEED_MORE if needs more data, * LMSPR_COMPLETED if complete, <0 for error * * *len is reduced by, and *in is advanced by, the amount of data actually used, * except in error case * * lws_mqtt_str_free() must be called after calling this successfully * or not. */ lws_mqtt_stateful_primitive_return_t lws_mqtt_str_parse(lws_mqtt_str_t *s, const uint8_t **in, size_t *len) { const uint8_t *oin = *in; /* handle the length + allocation if needed */ while (*len && !s->len_valid && s->pos < 2) { s->len = (uint16_t)((s->len << 8) | *((*in)++)); (*len)--; oin = *in; if (++s->pos == 2) { if (s->len > s->limit) return LMSPR_FAILED_OVERSIZE; s->pos = 0; s->len_valid = 1; if (!s->len) /* do not need to allocate */ return LMSPR_COMPLETED; if (!s->buf) { s->buf = lws_malloc(s->len, __func__); if (!s->buf) return LMSPR_FAILED_OOM; s->needs_freeing = 1; } } } /* handle copying bulk data into allocation */ if (s->len_valid && *len) { uint16_t span = (uint16_t)(s->len - s->pos); if (span > *len) span = (uint16_t)*len; memcpy(s->buf + s->pos, *in, span); *in += span; s->pos = (uint16_t)(s->pos + (uint16_t)span); } *len -= (unsigned long)(*in - oin); return s->buf && s->pos == s->len ? LMSPR_COMPLETED : LMSPR_NEED_MORE; } int lws_mqtt_bindata_cmp(const lws_mqtt_str_t *bd1, const lws_mqtt_str_t *bd2) { if (bd1->len != bd2->len) return 1; if (!!bd1->buf != !!bd2->buf) return 1; if (!bd1->buf && !bd2->buf) return 0; return memcmp(bd1->buf, bd2->buf, bd1->len); } libwebsockets-4.3.5/lib/roles/mqtt/private-lib-roles-mqtt.h000066400000000000000000000275451476025525100237620ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #ifndef _PRIVATE_LIB_ROLES_MQTT #define _PRIVATE_LIB_ROLES_MQTT 1 extern struct lws_role_ops role_ops_mqtt; #define lwsi_role_mqtt(wsi) (wsi->role_ops == &role_ops_mqtt) #define LWS_MQTT_MAX_CHILDREN 8 /* max child streams on same parent */ #define LMQCP_LUT_FLAG_RESERVED_FLAGS 0x10 #define LMQCP_LUT_FLAG_PACKET_ID_NONE 0x00 #define LMQCP_LUT_FLAG_PACKET_ID_HAS 0x20 #define LMQCP_LUT_FLAG_PACKET_ID_QOS12 0x40 #define LMQCP_LUT_FLAG_PACKET_ID_MASK 0x60 #define LMQCP_LUT_FLAG_PAYLOAD 0x80 /* payload req (publish = opt)*/ #define lws_mqtt_str_is_not_empty(s) ( ((s)) && \ ((s))->len && \ ((s))->buf && \ *((s))->buf ) #define LWS_MQTT_RESPONSE_TIMEOUT (3 * LWS_US_PER_SEC) #define LWS_MQTT_RETRY_CEILING (60 * LWS_US_PER_SEC) #define LWS_MQTT_MAX_PUBLISH_RETRY (3) typedef enum { LMSPR_COMPLETED = 0, LMSPR_NEED_MORE = 1, LMSPR_FAILED_OOM = -1, LMSPR_FAILED_OVERSIZE = -2, LMSPR_FAILED_FORMAT = -3, LMSPR_FAILED_ALREADY_COMPLETED = -4, } lws_mqtt_stateful_primitive_return_t; typedef struct { uint32_t value; char budget; char consumed; } lws_mqtt_vbi; /* works for vbi, 2-byte and 4-byte fixed length */ static inline int lws_mqtt_mb_first(lws_mqtt_vbi *vbi) { return !vbi->consumed; } int lws_mqtt_vbi_encode(uint32_t value, void *buf); /* * Decode is done statefully on an arbitrary amount of input data (which may * be one byte). It's like this so it can continue seamlessly if a buffer ends * partway through the primitive, and the api matches the bulk binary data case. * * VBI decode: * * Initialize the lws_mqtt_vbi state by calling lws_mqtt_vbi_init() on it, then * feed lws_mqtt_vbi_r() bytes to decode. * * Returns <0 for error, LMSPR_COMPLETED if done (vbi->value is valid), or * LMSPR_NEED_MORE if more calls to lws_mqtt_vbi_r() with subsequent bytes * needed. * * *in and *len are updated accordingly. * * 2-byte and 4-byte decode: * * Initialize the lws_mqtt_vbi state by calling lws_mqtt_2byte_init() or * lws_mqtt_4byte_init() on it, then feed lws_mqtt_mb_parse() bytes * to decode. * * Returns <0 for error, LMSPR_COMPLETED if done (vbi->value is valid), or * LMSPR_NEED_MORE if more calls to lws_mqtt_mb_parse() with subsequent * bytes needed. * * *in and *len are updated accordingly. */ void lws_mqtt_vbi_init(lws_mqtt_vbi *vbi); void lws_mqtt_2byte_init(lws_mqtt_vbi *vbi); void lws_mqtt_4byte_init(lws_mqtt_vbi *vbi); lws_mqtt_stateful_primitive_return_t lws_mqtt_vbi_r(lws_mqtt_vbi *vbi, const uint8_t **in, size_t *len); lws_mqtt_stateful_primitive_return_t lws_mqtt_mb_parse(lws_mqtt_vbi *vbi, const uint8_t **in, size_t *len); struct lws_mqtt_str_st { uint8_t *buf; uint16_t len; uint16_t limit; /* it's cheaper to add the state here than * the pointer to point to it elsewhere */ uint16_t pos; char len_valid; char needs_freeing; }; static inline int lws_mqtt_str_first(struct lws_mqtt_str_st *s) { return !s->buf && !s->pos; } lws_mqtt_stateful_primitive_return_t lws_mqtt_str_parse(struct lws_mqtt_str_st *bd, const uint8_t **in, size_t *len); typedef enum { LMQCPP_IDLE, /* receive packet type part of fixed header took us out of idle... */ LMQCPP_CONNECT_PACKET = LMQCP_CTOS_CONNECT << 4, LMQCPP_CONNECT_REMAINING_LEN_VBI, LMQCPP_CONNECT_VH_PNAME, LMQCPP_CONNECT_VH_PVERSION, LMQCPP_CONNECT_VH_FLAGS, LMQCPP_CONNECT_VH_KEEPALIVE, LMQCPP_CONNECT_VH_PROPERTIES_VBI_LEN, LMQCPP_CONNACK_PACKET = LMQCP_STOC_CONNACK << 4, LMQCPP_CONNACK_VH_FLAGS, LMQCPP_CONNACK_VH_RETURN_CODE, LMQCPP_PUBLISH_PACKET = LMQCP_PUBLISH << 4, LMQCPP_PUBLISH_REMAINING_LEN_VBI, LMQCPP_PUBLISH_VH_TOPIC, LMQCPP_PUBLISH_VH_PKT_ID, LMQCPP_PUBACK_PACKET = LMQCP_PUBACK << 4, LMQCPP_PUBACK_VH_PKT_ID, LMQCPP_PUBACK_PROPERTIES_LEN_VBI, LMQCPP_PUBREC_PACKET = LMQCP_PUBREC << 4, LMQCPP_PUBREC_VH_PKT_ID, LMQCPP_PUBREL_PACKET = LMQCP_PUBREL << 4, LMQCPP_PUBREL_VH_PKT_ID, LMQCPP_PUBCOMP_PACKET = LMQCP_PUBCOMP << 4, LMQCPP_PUBCOMP_VH_PKT_ID, LMQCPP_SUBACK_PACKET = LMQCP_STOC_SUBACK << 4, LMQCPP_SUBACK_VH_PKT_ID, LMQCPP_SUBACK_PAYLOAD, LMQCPP_UNSUBACK_PACKET = LMQCP_STOC_UNSUBACK << 4, LMQCPP_UNSUBACK_VH_PKT_ID, LMQCPP_PINGRESP_ZERO = LMQCP_STOC_PINGRESP << 4, LMQCPP_PAYLOAD, LMQCPP_EAT_PROPERTIES_AND_COMPLETE, LMQCPP_PROP_ID_VBI, /* all possible property payloads */ /* 3.3.2.3.2 */ LMQCPP_PROP_PAYLOAD_FORMAT_INDICATOR_1BYTE = 0x101, LMQCPP_PROP_MSG_EXPIRY_INTERVAL_4BYTE = 0x102, LMQCPP_PROP_CONTENT_TYPE_UTF8S = 0x103, LMQCPP_PROP_RESPONSE_TOPIC_UTF8S = 0x108, LMQCPP_PROP_CORRELATION_BINDATA = 0x109, LMQCPP_PROP_SUBSCRIPTION_ID_VBI = 0x10b, LMQCPP_PROP_SESSION_EXPIRY_INTERVAL_4BYTE = 0x111, LMQCPP_PROP_ASSIGNED_CLIENTID_UTF8S = 0x112, LMQCPP_PROP_SERVER_KEEPALIVE_2BYTE = 0x113, LMQCPP_PROP_AUTH_METHOD_UTF8S = 0x115, LMQCPP_PROP_AUTH_DATA_BINDATA = 0x116, LMQCPP_PROP_REQUEST_PROBLEM_INFO_1BYTE = 0x117, LMQCPP_PROP_WILL_DELAY_INTERVAL_4BYTE = 0x118, LMQCPP_PROP_REQUEST_REPSONSE_INFO_1BYTE = 0x119, LMQCPP_PROP_RESPONSE_INFO_UTF8S = 0x11a, LMQCPP_PROP_SERVER_REFERENCE_UTF8S = 0x11c, LMQCPP_PROP_REASON_STRING_UTF8S = 0x11f, LMQCPP_PROP_RECEIVE_MAXIMUM_2BYTE = 0x121, LMQCPP_PROP_TOPIC_MAXIMUM_2BYTE = 0x122, LMQCPP_PROP_TOPIC_ALIAS_2BYTE = 0x123, LMQCPP_PROP_MAXIMUM_QOS_1BYTE = 0x124, LMQCPP_PROP_RETAIN_AVAILABLE_1BYTE = 0x125, LMQCPP_PROP_USER_PROPERTY_NAME_UTF8S = 0x126, LMQCPP_PROP_USER_PROPERTY_VALUE_UTF8S = 0x226, LMQCPP_PROP_MAXIMUM_PACKET_SIZE_4BYTE = 0x127, LMQCPP_PROP_WILDCARD_SUBSCRIPTION_AVAILABLE_1BYTE = 0x128, LMQCPP_PROP_SUBSCRIPTION_IDENTIFIER_AVAILABLE_1BYTE = 0x129, LMQCPP_PROP_SHARED_SUBSCRIPTION_AVAILABLE_1BYTE = 0x12a, } lws_mqtt_packet_parse_state_t; /* * the states an MQTT connection can be in */ typedef enum { LGSMQTT_UNKNOWN, LGSMQTT_IDLE, LGSMQTT_TRANSPORT_CONNECTED, LGSMQTT_SENT_CONNECT, LGSMQTT_ESTABLISHED, LGSMQTT_SENT_SUBSCRIBE, LGSMQTT_SUBSCRIBED, } lwsgs_mqtt_states_t; typedef struct lws_mqtt_parser_st { /* struct lws_mqtt_str_st s_content_type; */ lws_mqtt_packet_parse_state_t state; lws_mqtt_vbi vbit; lws_mqtt_reason_t reason; lws_mqtt_str_t s_temp; uint8_t fixed_seen[4]; uint8_t props_seen[8]; uint8_t cpkt_flags; uint32_t cpkt_remlen; uint32_t props_len; uint32_t consumed; uint32_t prop_id; uint32_t props_consumed; uint32_t payload_consumed; uint16_t keepalive; uint16_t cpkt_id; uint32_t n; uint8_t temp[32]; uint8_t conn_rc; uint8_t payload_format; uint8_t packet_type_flags; uint8_t conn_protocol_version; uint8_t fixed; uint8_t flag_pending_send_connack_close:1; uint8_t flag_pending_send_reason_close:1; uint8_t flag_prop_multi:1; uint8_t flag_server:1; } lws_mqtt_parser_t; typedef enum { LMVTR_VALID = 0, LMVTR_VALID_WILDCARD = 1, LMVTR_VALID_SHADOW = 2, LMVTR_FAILED_OVERSIZE = -1, LMVTR_FAILED_WILDCARD_FORMAT = -2, LMVTR_FAILED_SHADOW_FORMAT = -3, } lws_mqtt_validate_topic_return_t; typedef enum { LMMTR_TOPIC_NOMATCH = 0, LMMTR_TOPIC_MATCH = 1, LMMTR_TOPIC_MATCH_ERROR = -1 } lws_mqtt_match_topic_return_t; typedef struct lws_mqtt_subs { struct lws_mqtt_subs *next; uint8_t ref_count; /* number of children referencing */ /* Flags */ uint8_t wildcard:1; uint8_t shadow:1; /* subscription name + NUL overallocated here */ char topic[]; } lws_mqtt_subs_t; typedef struct lws_mqtts { lws_mqtt_parser_t par; lwsgs_mqtt_states_t estate; struct lws_dll2 active_session_list_head; struct lws_dll2 limbo_session_list_head; } lws_mqtts_t; typedef struct lws_mqttc { lws_mqtt_parser_t par; lwsgs_mqtt_states_t estate; struct lws_mqtt_str_st *id; struct lws_mqtt_str_st *username; struct lws_mqtt_str_st *password; struct { struct lws_mqtt_str_st *topic; struct lws_mqtt_str_st *message; lws_mqtt_qos_levels_t qos; uint8_t retain; } will; uint16_t keep_alive_secs; uint16_t conn_flags; uint8_t aws_iot; } lws_mqttc_t; struct _lws_mqtt_related { lws_mqttc_t client; lws_sorted_usec_list_t sul_qos_puback_pubrec_wait; /* QoS1 puback or QoS2 pubrec wait TO */ lws_sorted_usec_list_t sul_qos1_puback_wait; /* QoS1 puback wait TO */ lws_sorted_usec_list_t sul_unsuback_wait; /* unsuback wait TO */ lws_sorted_usec_list_t sul_qos2_pubrec_wait; /* QoS2 pubrec wait TO */ lws_sorted_usec_list_t sul_shadow_wait; /* Device Shadow wait TO */ struct lws *wsi; /**< so sul can use lws_container_of */ lws_mqtt_subs_t *subs_head; /**< Linked-list of heap-allocated subscription objects */ void *rx_cpkt_param; uint16_t pkt_id; uint16_t ack_pkt_id; uint16_t peer_ack_pkt_id; uint16_t sub_size; #if defined(LWS_WITH_CLIENT) uint8_t send_pingreq:1; uint8_t session_resumed:1; #endif uint8_t inside_payload:1; uint8_t inside_subscribe:1; uint8_t inside_unsubscribe:1; uint8_t inside_birth:1; uint8_t inside_resume_session:1; uint8_t send_puback:1; uint8_t send_pubrel:1; uint8_t send_pubrec:1; uint8_t send_pubcomp:1; uint8_t unacked_publish:1; uint8_t unacked_pubrel:1; uint8_t done_subscribe:1; uint8_t done_birth:1; uint8_t inside_shadow:1; uint8_t done_shadow_subscribe:1; uint8_t send_shadow_unsubscribe:1; }; /* * New sessions are created by starting CONNECT. If the ClientID sent * by the client matches a different, extant session, then the * existing one is taken over and the new one created for duration of * CONNECT processing is destroyed. * * On the server side, bearing in mind multiple simultaneous, * fragmented CONNECTs may be interleaved ongoing, all state and * parsing temps for a session must live in the session object. */ struct lws_mqtt_endpoint_st; typedef struct lws_mqtts_session_st { struct lws_dll2 session_list; } lws_mqtts_session_t; #define ctl_pkt_type(x) (x->packet_type_flags >> 4) void lws_mqttc_state_transition(lws_mqttc_t *ep, lwsgs_mqtt_states_t s); int _lws_mqtt_rx_parser(struct lws *wsi, lws_mqtt_parser_t *par, const uint8_t *buf, size_t len); int lws_mqtt_client_socket_service(struct lws *wsi, struct lws_pollfd *pollfd, struct lws *wsi_conn); int lws_create_client_mqtt_object(const struct lws_client_connect_info *i, struct lws *wsi); struct lws * lws_mqtt_client_send_connect(struct lws *wsi); struct lws * lws_mqtt_client_send_disconnect(struct lws *wsi); int lws_mqtt_fill_fixed_header(uint8_t *p, lws_mqtt_control_packet_t ctrl_pkt_type, uint8_t dup, lws_mqtt_qos_levels_t qos, uint8_t retain); struct lws * lws_wsi_mqtt_adopt(struct lws *parent_wsi, struct lws *wsi); lws_mqtt_subs_t * lws_mqtt_find_sub(struct _lws_mqtt_related *mqtt, const char *topic); lws_mqtt_match_topic_return_t lws_mqtt_is_topic_matched(const char* sub, const char* pub); #endif /* _PRIVATE_LIB_ROLES_MQTT */ libwebsockets-4.3.5/lib/roles/netlink/000077500000000000000000000000001476025525100177305ustar00rootroot00000000000000libwebsockets-4.3.5/lib/roles/netlink/ops-netlink.c000066400000000000000000000413161476025525100223440ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * We mainly focus on the routing table / gateways because those are the * elements that decide if we can get on to the internet or not. * * We also need to understand the source addresses of possible outgoing routes, * and follow LINK down (ifconfig down) to clean up routes on the interface idx * going down that are not otherwise cleaned. */ #include #include #include #include #include /* work around CentOS 7 -Wconversion problem */ #undef RTA_ALIGNTO #define RTA_ALIGNTO 4U //#define lwsl_netlink lwsl_notice #define lwsl_cx_netlink lwsl_cx_info static void lws_netlink_coldplug_done_cb(lws_sorted_usec_list_t *sul) { struct lws_context *ctx = lws_container_of(sul, struct lws_context, sul_nl_coldplug); ctx->nl_initial_done = 1; #if defined(LWS_WITH_SYS_STATE) /* if nothing is there to intercept anything, go all the way */ lws_state_transition_steps(&ctx->mgr_system, LWS_SYSTATE_OPERATIONAL); #endif } static int rops_handle_POLLIN_netlink(struct lws_context_per_thread *pt, struct lws *wsi, struct lws_pollfd *pollfd) { struct lws_context *cx = pt->context; uint8_t s[4096] #if defined(_DEBUG) , route_change = 0 #endif #if defined(LWS_WITH_SYS_SMD) , gateway_change = 0 #endif ; struct sockaddr_nl nladdr; lws_route_t robj, *rou, *rmat; struct nlmsghdr *h; struct msghdr msg; struct iovec iov; unsigned int n; char buf[72]; if (!(pollfd->revents & LWS_POLLIN)) return LWS_HPI_RET_HANDLED; memset(&msg, 0, sizeof(msg)); iov.iov_base = (void *)s; iov.iov_len = sizeof(s); msg.msg_name = (void *)&(nladdr); msg.msg_namelen = sizeof(nladdr); msg.msg_iov = &iov; msg.msg_iovlen = 1; n = (unsigned int)recvmsg(wsi->desc.sockfd, &msg, 0); if ((int)n < 0) { lwsl_cx_notice(cx, "recvmsg failed"); return LWS_HPI_RET_PLEASE_CLOSE_ME; } // lwsl_hexdump_notice(s, (size_t)n); h = (struct nlmsghdr *)s; /* we can get a bunch of messages coalesced in one read*/ for ( ; NLMSG_OK(h, n); h = NLMSG_NEXT(h, n)) { struct ifaddrmsg *ifam; struct rtattr *ra; struct rtmsg *rm; #if !defined(LWS_WITH_NO_LOGS) && defined(_DEBUG) struct ndmsg *nd; #endif unsigned int ra_len; uint8_t *p; struct ifinfomsg *ifi; struct rtattr *attribute; unsigned int len; lwsl_cx_netlink(cx, "RTM %d", h->nlmsg_type); memset(&robj, 0, sizeof(robj)); robj.if_idx = -1; robj.priority = -1; rm = (struct rtmsg *)NLMSG_DATA(h); /* * We have to care about NEWLINK so we can understand when a * network interface went down, and clear the related routes. * * We don't get individual DELROUTEs for these. */ switch (h->nlmsg_type) { case RTM_NEWLINK: ifi = NLMSG_DATA(h); len = (unsigned int)(h->nlmsg_len - NLMSG_LENGTH(sizeof(*ifi))); /* loop over all attributes for the NEWLINK message */ for (attribute = IFLA_RTA(ifi); RTA_OK(attribute, len); attribute = RTA_NEXT(attribute, len)) { lwsl_cx_netlink(cx, "if attr %d", (int)attribute->rta_type); switch(attribute->rta_type) { case IFLA_IFNAME: lwsl_cx_netlink(cx, "NETLINK ifidx %d : %s", ifi->ifi_index, (char *)RTA_DATA(attribute)); break; default: break; } /* switch */ } /* for loop */ lwsl_cx_netlink(cx, "NEWLINK ifi_index %d, flags 0x%x", ifi->ifi_index, ifi->ifi_flags); /* * Despite "New"link this is actually telling us there * is some change on the network interface IFF_ state */ if (!(ifi->ifi_flags & IFF_UP)) { /* * Interface is down, so scrub all routes that * applied to it */ lwsl_cx_netlink(cx, "NEWLINK: ifdown %d", ifi->ifi_index); lws_pt_lock(pt, __func__); _lws_route_table_ifdown(pt, ifi->ifi_index); lws_pt_unlock(pt); } continue; /* ie, not break, no second half */ case RTM_NEWADDR: case RTM_DELADDR: ifam = (struct ifaddrmsg *)NLMSG_DATA(h); robj.source_ads = 1; robj.dest_len = ifam->ifa_prefixlen; robj.if_idx = (int)ifam->ifa_index; robj.scope = ifam->ifa_scope; robj.ifa_flags = ifam->ifa_flags; robj.dest.sa4.sin_family = ifam->ifa_family; /* address attributes */ ra = (struct rtattr *)IFA_RTA(ifam); ra_len = (unsigned int)IFA_PAYLOAD(h); lwsl_cx_netlink(cx, "%s", h->nlmsg_type == RTM_NEWADDR ? "NEWADDR" : "DELADDR"); /* * almost nothing interesting within IFA_* attributes: * so skip it and goto to the second half */ goto second_half; case RTM_NEWROUTE: case RTM_DELROUTE: lwsl_cx_netlink(cx, "%s", h->nlmsg_type == RTM_NEWROUTE ? "NEWROUTE" : "DELROUTE"); /* route attributes */ ra = (struct rtattr *)RTM_RTA(rm); ra_len = (unsigned int)RTM_PAYLOAD(h); break; case RTM_DELNEIGH: case RTM_NEWNEIGH: lwsl_cx_netlink(cx, "%s", h->nlmsg_type == RTM_NEWNEIGH ? "NEWNEIGH" : "DELNEIGH"); #if !defined(LWS_WITH_NO_LOGS) && defined(_DEBUG) nd = (struct ndmsg *)rm; lwsl_cx_netlink(cx, "fam %u, ifidx %u, flags 0x%x", nd->ndm_family, nd->ndm_ifindex, nd->ndm_flags); #endif ra = (struct rtattr *)RTM_RTA(rm); ra_len = (unsigned int)RTM_PAYLOAD(h); for ( ; RTA_OK(ra, ra_len); ra = RTA_NEXT(ra, ra_len)) { lwsl_cx_netlink(cx, "atr %d", ra->rta_type); switch (ra->rta_type) { case NDA_DST: lwsl_cx_netlink(cx, "dst len %d", ra->rta_len); break; } } lws_pt_lock(pt, __func__); _lws_route_pt_close_unroutable(pt); lws_pt_unlock(pt); continue; default: lwsl_cx_netlink(cx, "*** Unknown RTM_%d", h->nlmsg_type); continue; } /* switch */ robj.proto = rm->rtm_protocol; // iterate over route attributes for ( ; RTA_OK(ra, ra_len); ra = RTA_NEXT(ra, ra_len)) { // lwsl_netlink("%s: atr %d\n", __func__, ra->rta_type); switch (ra->rta_type) { case RTA_PREFSRC: /* protocol ads: preferred src ads */ case RTA_SRC: lws_sa46_copy_address(&robj.src, RTA_DATA(ra), rm->rtm_family); robj.src_len = rm->rtm_src_len; lws_sa46_write_numeric_address(&robj.src, buf, sizeof(buf)); lwsl_cx_netlink(cx, "RTA_SRC: %s", buf); break; case RTA_DST: /* check if is local addr -> considering it as src addr too */ if (rm->rtm_type == RTN_LOCAL && ((rm->rtm_family == AF_INET && rm->rtm_dst_len == 32) || (rm->rtm_family == AF_INET6 && rm->rtm_dst_len == 128))) { lws_sa46_copy_address(&robj.src, RTA_DATA(ra), rm->rtm_family); lwsl_cx_netlink(cx, "Local addr: RTA_DST -> added to RTA_SRC"); } lws_sa46_copy_address(&robj.dest, RTA_DATA(ra), rm->rtm_family); robj.dest_len = rm->rtm_dst_len; lws_sa46_write_numeric_address(&robj.dest, buf, sizeof(buf)); lwsl_cx_netlink(cx, "RTA_DST: %s", buf); break; case RTA_GATEWAY: lws_sa46_copy_address(&robj.gateway, RTA_DATA(ra), rm->rtm_family); #if defined(LWS_WITH_SYS_SMD) gateway_change = 1; #endif break; case RTA_IIF: /* int: input interface index */ case RTA_OIF: /* int: output interface index */ robj.if_idx = *(int *)RTA_DATA(ra); lwsl_cx_netlink(cx, "ifidx %d", robj.if_idx); break; case RTA_PRIORITY: /* int: priority of route */ p = RTA_DATA(ra); robj.priority = p[3] << 24 | p[2] << 16 | p[1] << 8 | p[0]; break; case RTA_CACHEINFO: /* struct rta_cacheinfo */ break; #if defined(LWS_HAVE_RTA_PREF) case RTA_PREF: /* char: RFC4191 v6 router preference */ break; #endif case RTA_TABLE: /* int */ break; default: lwsl_cx_info(cx, "unknown attr type %d", ra->rta_type); break; } } /* for */ /* * the second half, once all the attributes were collected */ second_half: switch (h->nlmsg_type) { case RTM_DELROUTE: /* * This will also take down wsi marked as using it */ lwsl_cx_netlink(cx, "DELROUTE: if_idx %d", robj.if_idx); lws_pt_lock(pt, __func__); _lws_route_remove(pt, &robj, 0); lws_pt_unlock(pt); goto inform; case RTM_NEWROUTE: lwsl_cx_netlink(cx, "NEWROUTE rtm_type %d", rm->rtm_type); /* * We don't want any routing debris like /32 or broadcast * in our routing table... we will collect source addresses * bound to interfaces via NEWADDR */ if (rm->rtm_type != RTN_UNICAST && rm->rtm_type != RTN_LOCAL) break; if (rm->rtm_flags & RTM_F_CLONED) break; goto ana; case RTM_DELADDR: lwsl_cx_notice(cx, "DELADDR"); #if defined(_DEBUG) _lws_routing_entry_dump(cx, &robj); #endif lws_pt_lock(pt, __func__); _lws_route_remove(pt, &robj, LRR_MATCH_SRC | LRR_IGNORE_PRI); _lws_route_pt_close_unroutable(pt); lws_pt_unlock(pt); break; case RTM_NEWADDR: lwsl_cx_netlink(cx, "NEWADDR"); ana: /* * Is robj a dupe in the routing table already? * * match on pri ignore == set pri and skip * no match == add */ lws_pt_lock(pt, __func__); /* returns zero on match already in table */ rmat = _lws_route_remove(pt, &robj, h->nlmsg_type == RTM_NEWROUTE ? LRR_MATCH_DST : LRR_MATCH_SRC | LRR_IGNORE_PRI); lws_pt_unlock(pt); if (rmat) { rmat->priority = robj.priority; break; } rou = lws_malloc(sizeof(*rou), __func__); if (!rou) { lwsl_cx_err(cx, "oom"); return LWS_HPI_RET_HANDLED; } *rou = robj; lws_pt_lock(pt, __func__); /* * We lock the pt before getting the uidx, so it * cannot race */ rou->uidx = _lws_route_get_uidx(cx); lws_dll2_add_tail(&rou->list, &cx->routing_table); lwsl_cx_info(cx, "route list size %u", cx->routing_table.count); _lws_route_pt_close_unroutable(pt); lws_pt_unlock(pt); inform: #if defined(_DEBUG) route_change = 1; #endif #if defined(LWS_WITH_SYS_SMD) /* * Reflect the route add / del event using SMD. * Participants interested can refer to the pt * routing table */ (void)lws_smd_msg_printf(cx, LWSSMDCL_NETWORK, "{\"rt\":\"%s\"}\n", (h->nlmsg_type == RTM_DELROUTE) ? "del" : "add"); #endif break; default: // lwsl_info("%s: unknown msg type %d\n", __func__, // h->nlmsg_type); break; } } /* message iterator */ #if defined(LWS_WITH_SYS_SMD) if (gateway_change) /* * If a route with a gw was added or deleted, retrigger captive * portal detection if we have that */ (void)lws_smd_msg_printf(cx, LWSSMDCL_NETWORK, "{\"trigger\": \"cpdcheck\", " "\"src\":\"gw-change\"}"); #endif #if defined(_DEBUG) if (route_change) { lws_context_lock(cx, __func__); _lws_routing_table_dump(cx); lws_context_unlock(cx); } #endif if (!cx->nl_initial_done && pt == &cx->pt[0] && cx->routing_table.count) { /* * While netlink info still coming, keep moving the timer for * calling it "done" to +100ms until after it stops coming */ lws_context_lock(cx, __func__); lws_sul_schedule(cx, 0, &cx->sul_nl_coldplug, lws_netlink_coldplug_done_cb, 100 * LWS_US_PER_MS); lws_context_unlock(cx); } return LWS_HPI_RET_HANDLED; } struct nl_req_s { struct nlmsghdr hdr; struct rtmsg gen; }; int rops_pt_init_destroy_netlink(struct lws_context *context, const struct lws_context_creation_info *info, struct lws_context_per_thread *pt, int destroy) { struct sockaddr_nl sanl; struct nl_req_s req; struct msghdr msg; struct iovec iov; struct lws *wsi; int n, ret = 1; if (destroy) { /* * pt netlink wsi closed + freed as part of pt's destroy * wsi mass close, just need to take down the routing table */ _lws_route_table_empty(pt); return 0; } if (context->netlink) return 0; if (pt > &context->pt[0]) /* we can only have one netlink socket */ return 0; lwsl_cx_info(context, "creating netlink skt"); /* * We want a netlink socket per pt as well */ lws_context_lock(context, __func__); wsi = __lws_wsi_create_with_role(context, (int)(pt - &context->pt[0]), &role_ops_netlink, NULL); lws_context_unlock(context); if (!wsi) goto bail; wsi->desc.sockfd = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE); if (wsi->desc.sockfd == LWS_SOCK_INVALID) { lwsl_cx_err(context, "unable to open netlink"); goto bail1; } lws_plat_set_nonblocking(wsi->desc.sockfd); __lws_lc_tag(context, &context->lcg[LWSLCG_VHOST], &wsi->lc, "netlink"); memset(&sanl, 0, sizeof(sanl)); sanl.nl_family = AF_NETLINK; sanl.nl_groups = RTMGRP_LINK | RTMGRP_IPV4_ROUTE | RTMGRP_IPV4_IFADDR #if defined(LWS_WITH_IPV6) | RTMGRP_IPV6_ROUTE | RTMGRP_IPV6_IFADDR #endif ; if (lws_fi(&context->fic, "netlink_bind") || bind(wsi->desc.sockfd, (struct sockaddr*)&sanl, sizeof(sanl)) < 0) { lwsl_cx_warn(context, "netlink bind failed"); ret = 0; /* some systems deny access, just ignore */ goto bail2; } context->netlink = wsi; if (lws_wsi_inject_to_loop(pt, wsi)) goto bail2; /* if (lws_change_pollfd(wsi, 0, LWS_POLLIN)) { lwsl_err("%s: pollfd in fail\n", __func__); goto bail2; } */ /* * Since we're starting the PT, ask to be sent all the existing routes. * * This requires CAP_ADMIN, or root... we do this early before dropping * privs */ memset(&sanl, 0, sizeof(sanl)); memset(&msg, 0, sizeof(msg)); memset(&req, 0, sizeof(req)); sanl.nl_family = AF_NETLINK; req.hdr.nlmsg_len = NLMSG_LENGTH(sizeof(req.gen)); req.hdr.nlmsg_type = RTM_GETROUTE; req.hdr.nlmsg_flags = NLM_F_REQUEST | NLM_F_DUMP; req.hdr.nlmsg_seq = 1; req.hdr.nlmsg_pid = (uint32_t)getpid(); req.gen.rtm_family = AF_PACKET; req.gen.rtm_table = RT_TABLE_DEFAULT; iov.iov_base = &req; iov.iov_len = req.hdr.nlmsg_len; msg.msg_iov = &iov; msg.msg_iovlen = 1; msg.msg_name = &sanl; msg.msg_namelen = sizeof(sanl); n = (int)sendmsg(wsi->desc.sockfd, (struct msghdr *)&msg, 0); if (n < 0) { lwsl_cx_notice(context, "rt dump req failed... permissions? errno %d", LWS_ERRNO); } /* * Responses are going to come asynchronously, let's block moving * off state IFACE_COLDPLUG until we have had them. This is important * since if we don't hold there, when we do get the responses we may * cull any ongoing connections as unroutable otherwise */ lwsl_cx_debug(context, "starting netlink coldplug wait"); return 0; bail2: __lws_lc_untag(wsi->a.context, &wsi->lc); compatible_close(wsi->desc.sockfd); bail1: lws_free(wsi); bail: return ret; } static const lws_rops_t rops_table_netlink[] = { /* 1 */ { .pt_init_destroy = rops_pt_init_destroy_netlink }, /* 2 */ { .handle_POLLIN = rops_handle_POLLIN_netlink }, }; const struct lws_role_ops role_ops_netlink = { /* role name */ "netlink", /* alpn id */ NULL, /* rops_table */ rops_table_netlink, /* rops_idx */ { /* LWS_ROPS_check_upgrades */ /* LWS_ROPS_pt_init_destroy */ 0x01, /* LWS_ROPS_init_vhost */ /* LWS_ROPS_destroy_vhost */ 0x00, /* LWS_ROPS_service_flag_pending */ /* LWS_ROPS_handle_POLLIN */ 0x02, /* LWS_ROPS_handle_POLLOUT */ /* LWS_ROPS_perform_user_POLLOUT */ 0x00, /* LWS_ROPS_callback_on_writable */ /* LWS_ROPS_tx_credit */ 0x00, /* LWS_ROPS_write_role_protocol */ /* LWS_ROPS_encapsulation_parent */ 0x00, /* LWS_ROPS_alpn_negotiated */ /* LWS_ROPS_close_via_role_protocol */ 0x00, /* LWS_ROPS_close_role */ /* LWS_ROPS_close_kill_connection */ 0x00, /* LWS_ROPS_destroy_role */ /* LWS_ROPS_adoption_bind */ 0x00, /* LWS_ROPS_client_bind */ /* LWS_ROPS_issue_keepalive */ 0x00, }, /* adoption_cb clnt, srv */ { 0, 0 }, /* rx_cb clnt, srv */ { 0, 0 }, /* writeable cb clnt, srv */ { 0, 0 }, /* close cb clnt, srv */ { 0, 0 }, /* protocol_bind_cb c,s */ { 0, 0 }, /* protocol_unbind_cb c,s */ { 0, 0 }, /* file_handle */ 0, }; libwebsockets-4.3.5/lib/roles/pipe/000077500000000000000000000000001476025525100172215ustar00rootroot00000000000000libwebsockets-4.3.5/lib/roles/pipe/ops-pipe.c000066400000000000000000000117411476025525100211250ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include static int rops_handle_POLLIN_pipe(struct lws_context_per_thread *pt, struct lws *wsi, struct lws_pollfd *pollfd) { #if defined(LWS_HAVE_EVENTFD) eventfd_t value; int n; n = eventfd_read(wsi->desc.sockfd, &value); if (n < 0) { lwsl_notice("%s: eventfd read %d bailed errno %d\n", __func__, wsi->desc.sockfd, LWS_ERRNO); return LWS_HPI_RET_PLEASE_CLOSE_ME; } #elif !defined(WIN32) && !defined(_WIN32) char s[100]; int n; /* * discard the byte(s) that signaled us * We really don't care about the number of bytes, but coverity * thinks we should. */ n = (int)read(wsi->desc.sockfd, s, sizeof(s)); (void)n; if (n < 0) return LWS_HPI_RET_PLEASE_CLOSE_ME; #elif defined(WIN32) char s[100]; int n; n = recv(wsi->desc.sockfd, s, sizeof(s), 0); if (n == SOCKET_ERROR) return LWS_HPI_RET_PLEASE_CLOSE_ME; #endif #if defined(LWS_WITH_THREADPOOL) && defined(LWS_HAVE_PTHREAD_H) /* * threadpools that need to call for on_writable callbacks do it by * marking the task as needing one for its wsi, then cancelling service. * * Each tsi will call this to perform the actual callback_on_writable * from the correct service thread context */ lws_threadpool_tsi_context(pt->context, pt->tid); #endif #if LWS_MAX_SMP > 1 /* * Other pts need to take care of their own wsi bound to a vhost that * is going down */ if (pt->context->owner_vh_being_destroyed.head) { lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, pt->context->owner_vh_being_destroyed.head) { struct lws_vhost *v = lws_container_of(d, struct lws_vhost, vh_being_destroyed_list); lws_vhost_lock(v); /* -------------- vh { */ __lws_vhost_destroy_pt_wsi_dieback_start(v); lws_vhost_unlock(v); /* } vh -------------- */ } lws_end_foreach_dll_safe(d, d1); } #endif #if defined(LWS_WITH_SECURE_STREAMS) lws_dll2_foreach_safe(&pt->ss_owner, NULL, lws_ss_cancel_notify_dll); #if defined(LWS_WITH_SECURE_STREAMS_PROXY_API) && defined(LWS_WITH_CLIENT) lws_dll2_foreach_safe(&pt->ss_client_owner, NULL, lws_sspc_cancel_notify_dll); #endif #endif /* * the poll() wait, or the event loop for libuv etc is a * process-wide resource that we interrupted. So let every * protocol that may be interested in the pipe event know that * it happened. */ if (lws_broadcast(pt, LWS_CALLBACK_EVENT_WAIT_CANCELLED, NULL, 0)) { lwsl_info("closed in event cancel\n"); return LWS_HPI_RET_PLEASE_CLOSE_ME; } return LWS_HPI_RET_HANDLED; } static const lws_rops_t rops_table_pipe[] = { /* 1 */ { .handle_POLLIN = rops_handle_POLLIN_pipe }, }; const struct lws_role_ops role_ops_pipe = { /* role name */ "pipe", /* alpn id */ NULL, /* rops_table */ rops_table_pipe, /* rops_idx */ { /* LWS_ROPS_check_upgrades */ /* LWS_ROPS_pt_init_destroy */ 0x00, /* LWS_ROPS_init_vhost */ /* LWS_ROPS_destroy_vhost */ 0x00, /* LWS_ROPS_service_flag_pending */ /* LWS_ROPS_handle_POLLIN */ 0x01, /* LWS_ROPS_handle_POLLOUT */ /* LWS_ROPS_perform_user_POLLOUT */ 0x00, /* LWS_ROPS_callback_on_writable */ /* LWS_ROPS_tx_credit */ 0x00, /* LWS_ROPS_write_role_protocol */ /* LWS_ROPS_encapsulation_parent */ 0x00, /* LWS_ROPS_alpn_negotiated */ /* LWS_ROPS_close_via_role_protocol */ 0x00, /* LWS_ROPS_close_role */ /* LWS_ROPS_close_kill_connection */ 0x00, /* LWS_ROPS_destroy_role */ /* LWS_ROPS_adoption_bind */ 0x00, /* LWS_ROPS_client_bind */ /* LWS_ROPS_issue_keepalive */ 0x00, }, /* adoption_cb clnt, srv */ { 0, 0 }, /* rx_cb clnt, srv */ { 0, 0 }, /* writeable cb clnt, srv */ { 0, 0 }, /* close cb clnt, srv */ { 0, 0 }, /* protocol_bind_cb c,s */ { 0, 0 }, /* protocol_unbind_cb c,s */ { 0, 0 }, #if defined(WIN32) /* file_handle (no, UDP) */ 0, #else /* file_handle */ 1, #endif }; libwebsockets-4.3.5/lib/roles/private-lib-roles.h000066400000000000000000000351161476025525100220030ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ typedef uint32_t lws_wsi_state_t; /* * The wsi->role_ops pointer decides almost everything about what role the wsi * will play, h2, raw, ws, etc. * * However there are a few additional flags needed that vary, such as if the * role is a client or server side, if it has that concept. And the connection * fulfilling the role, has a separate dynamic state. * * 31 16 15 0 * [ role flags ] [ state ] * * The role flags part is generally invariant for the lifetime of the wsi, * although it can change if the connection role itself does, eg, if the * connection upgrades from H1 -> WS1 the role flags may be changed at that * point. * * The state part reflects the dynamic connection state, and the states are * reused between roles. * * None of the internal role or state representations are made available outside * of lws internals. Even for lws internals, if you add stuff here, please keep * the constants inside this header only by adding necessary helpers here and * use the helpers in the actual code. This is to ease any future refactors. * * Notice LWSIFR_ENCAP means we have a parent wsi that actually carries our * data as a stream inside a different protocol. */ #define _RS 16 #define LWSIFR_CLIENT (0x1000 << _RS) /* client side */ #define LWSIFR_SERVER (0x2000 << _RS) /* server side */ #define LWSIFR_P_ENCAP_H2 (0x0100 << _RS) /* we are encapsulated by h2 */ enum lwsi_role { LWSI_ROLE_MASK = (0xffff << _RS), LWSI_ROLE_ENCAP_MASK = (0x0f00 << _RS), }; #define lwsi_role(wsi) (wsi->wsistate & (unsigned int)LWSI_ROLE_MASK) #if !defined (_DEBUG) #define lwsi_set_role(wsi, role) wsi->wsistate = \ (wsi->wsistate & (~LWSI_ROLE_MASK)) | role #else void lwsi_set_role(struct lws *wsi, lws_wsi_state_t role); #endif #define lwsi_role_client(wsi) (!!(wsi->wsistate & LWSIFR_CLIENT)) #define lwsi_role_server(wsi) (!!(wsi->wsistate & LWSIFR_SERVER)) #define lwsi_role_h2_ENCAPSULATION(wsi) \ ((wsi->wsistate & LWSI_ROLE_ENCAP_MASK) == LWSIFR_P_ENCAP_H2) /* Pollout wants a callback in this state */ #define LWSIFS_POCB (0x100) /* Before any protocol connection was established */ #define LWSIFS_NOT_EST (0x200) enum lwsi_state { /* Phase 1: pre-transport */ LRS_UNCONNECTED = LWSIFS_NOT_EST | 0, LRS_WAITING_DNS = LWSIFS_NOT_EST | 1, LRS_WAITING_CONNECT = LWSIFS_NOT_EST | 2, /* Phase 2: establishing intermediaries on top of transport */ LRS_WAITING_PROXY_REPLY = LWSIFS_NOT_EST | 3, LRS_WAITING_SSL = LWSIFS_NOT_EST | 4, LRS_WAITING_SOCKS_GREETING_REPLY = LWSIFS_NOT_EST | 5, LRS_WAITING_SOCKS_CONNECT_REPLY = LWSIFS_NOT_EST | 6, LRS_WAITING_SOCKS_AUTH_REPLY = LWSIFS_NOT_EST | 7, /* Phase 3: establishing tls tunnel */ LRS_SSL_INIT = LWSIFS_NOT_EST | 8, LRS_SSL_ACK_PENDING = LWSIFS_NOT_EST | 9, LRS_PRE_WS_SERVING_ACCEPT = LWSIFS_NOT_EST | 10, /* Phase 4: connected */ LRS_WAITING_SERVER_REPLY = LWSIFS_NOT_EST | 11, LRS_H2_AWAIT_PREFACE = LWSIFS_NOT_EST | 12, LRS_H2_AWAIT_SETTINGS = LWSIFS_NOT_EST | LWSIFS_POCB | 13, LRS_MQTTC_IDLE = LWSIFS_POCB | 33, LRS_MQTTC_AWAIT_CONNACK = 34, /* Phase 5: protocol logically established */ LRS_H2_CLIENT_SEND_SETTINGS = LWSIFS_POCB | 14, LRS_H2_WAITING_TO_SEND_HEADERS = LWSIFS_POCB | 15, LRS_DEFERRING_ACTION = LWSIFS_POCB | 16, LRS_IDLING = 17, LRS_H1C_ISSUE_HANDSHAKE = 18, LRS_H1C_ISSUE_HANDSHAKE2 = 19, LRS_ISSUE_HTTP_BODY = 20, LRS_ISSUING_FILE = 21, LRS_HEADERS = 22, LRS_BODY = 23, LRS_DISCARD_BODY = 24, LRS_ESTABLISHED = LWSIFS_POCB | 25, /* we are established, but we have embarked on serving a single * transaction. Other transaction input may be pending, but we will * not service it while we are busy dealing with the current * transaction. * * When we complete the current transaction, we would reset our state * back to ESTABLISHED and start to process the next transaction. */ LRS_DOING_TRANSACTION = LWSIFS_POCB | 26, /* Phase 6: finishing */ LRS_WAITING_TO_SEND_CLOSE = LWSIFS_POCB | 27, LRS_RETURNED_CLOSE = LWSIFS_POCB | 28, LRS_AWAITING_CLOSE_ACK = LWSIFS_POCB | 29, LRS_FLUSHING_BEFORE_CLOSE = LWSIFS_POCB | 30, LRS_SHUTDOWN = 31, /* Phase 7: dead */ LRS_DEAD_SOCKET = 32, LRS_MASK = 0xffff }; #define lwsi_state(wsi) ((enum lwsi_state)(wsi->wsistate & LRS_MASK)) #define lwsi_state_PRE_CLOSE(wsi) \ ((enum lwsi_state)(wsi->wsistate_pre_close & LRS_MASK)) #define lwsi_state_est(wsi) (!(wsi->wsistate & LWSIFS_NOT_EST)) #define lwsi_state_est_PRE_CLOSE(wsi) \ (!(wsi->wsistate_pre_close & LWSIFS_NOT_EST)) #define lwsi_state_can_handle_POLLOUT(wsi) (wsi->wsistate & LWSIFS_POCB) #if !defined (_DEBUG) #define lwsi_set_state(wsi, lrs) wsi->wsistate = \ (wsi->wsistate & (lws_wsi_state_t)(~LRS_MASK)) | lrs #else void lwsi_set_state(struct lws *wsi, lws_wsi_state_t lrs); #endif #define _LWS_ADOPT_FINISH (1 << 24) /* * Internal role-specific ops * * Many roles are sparsely filled with callbacks, rather than has 20 x * function pointers in the ops struct, let's have a 20 nybble array telling us * if the pointer doesn't exist, or its offset in a smaller "just pointers that * exist" array. * * We can support up to 15 valid pointers in the role that way and only have to * provide pointers that exist for that role, at the cost of a 10-byte nybble * table. * * For x86_64, a set 196 byte allocation becomes 60 + 8 bytes per defined ptr, * where the ops table is sparse this is a considable .rodata saving, for 32-bit * 52 + 4 bytes per defined ptr accounting for padding. */ /* * After http headers have parsed, this is the last chance for a role * to upgrade the connection to something else using the headers. * ws-over-h2 is upgraded from h2 like this. */ typedef int (*lws_rops_check_upgrades_t)(struct lws *wsi); /* role-specific context init during context creation */ typedef int (*lws_rops_pt_init_destroy_t)(struct lws_context *context, const struct lws_context_creation_info *info, struct lws_context_per_thread *pt, int destroy); /* role-specific per-vhost init during vhost creation */ typedef int (*lws_rops_init_vhost_t)(struct lws_vhost *vh, const struct lws_context_creation_info *info); /* role-specific per-vhost destructor during vhost destroy */ typedef int (*lws_rops_destroy_vhost_t)(struct lws_vhost *vh); /* chance for the role to force POLLIN without network activity */ typedef int (*lws_rops_service_flag_pending_t)(struct lws_context *context, int tsi); /* an fd using this role has POLLIN signalled */ typedef int (*lws_rops_handle_POLLIN_t)(struct lws_context_per_thread *pt, struct lws *wsi, struct lws_pollfd *pollfd); /* an fd using the role wanted a POLLOUT callback and now has it */ typedef int (*lws_rops_handle_POLLOUT_t)(struct lws *wsi); /* perform user pollout */ typedef int (*lws_rops_perform_user_POLLOUT_t)(struct lws *wsi); /* do effective callback on writeable */ typedef int (*lws_rops_callback_on_writable_t)(struct lws *wsi); /* connection-specific tx credit in bytes */ typedef int (*lws_rops_tx_credit_t)(struct lws *wsi, char peer_to_us, int add); /* role-specific write formatting */ typedef int (*lws_rops_write_role_protocol_t)(struct lws *wsi, unsigned char *buf, size_t len, enum lws_write_protocol *wp); /* get encapsulation parent */ typedef struct lws * (*lws_rops_encapsulation_parent_t)(struct lws *wsi); /* role-specific destructor */ typedef int (*lws_rops_alpn_negotiated_t)(struct lws *wsi, const char *alpn); /* chance for the role to handle close in the protocol */ typedef int (*lws_rops_close_via_role_protocol_t)(struct lws *wsi, enum lws_close_status reason); /* role-specific close processing */ typedef int (*lws_rops_close_role_t)(struct lws_context_per_thread *pt, struct lws *wsi); /* role-specific connection close processing */ typedef int (*lws_rops_close_kill_connection_t)(struct lws *wsi, enum lws_close_status reason); /* role-specific destructor */ typedef int (*lws_rops_destroy_role_t)(struct lws *wsi); /* role-specific socket-adopt */ typedef int (*lws_rops_adoption_bind_t)(struct lws *wsi, int type, const char *prot); /* role-specific client-bind: * ret 1 = bound, 0 = not bound, -1 = fail out * i may be NULL, indicating client_bind is being called after * a successful bind earlier, to finalize the binding. In that * case ret 0 = OK, 1 = fail, wsi needs freeing, -1 = fail, wsi freed */ typedef int (*lws_rops_client_bind_t)(struct lws *wsi, const struct lws_client_connect_info *i); /* isvalid = 0: request a role-specific keepalive (PING etc) * = 1: reset any related validity timer */ typedef int (*lws_rops_issue_keepalive_t)(struct lws *wsi, int isvalid); #define LWS_COUNT_ROLE_OPS 20 typedef union lws_rops { lws_rops_check_upgrades_t check_upgrades; lws_rops_pt_init_destroy_t pt_init_destroy; lws_rops_init_vhost_t init_vhost; lws_rops_destroy_vhost_t destroy_vhost; lws_rops_service_flag_pending_t service_flag_pending; lws_rops_handle_POLLIN_t handle_POLLIN; lws_rops_handle_POLLOUT_t handle_POLLOUT; lws_rops_perform_user_POLLOUT_t perform_user_POLLOUT; lws_rops_callback_on_writable_t callback_on_writable; lws_rops_tx_credit_t tx_credit; lws_rops_write_role_protocol_t write_role_protocol; lws_rops_encapsulation_parent_t encapsulation_parent; lws_rops_alpn_negotiated_t alpn_negotiated; lws_rops_close_via_role_protocol_t close_via_role_protocol; lws_rops_close_role_t close_role; lws_rops_close_kill_connection_t close_kill_connection; lws_rops_destroy_role_t destroy_role; lws_rops_adoption_bind_t adoption_bind; lws_rops_client_bind_t client_bind; lws_rops_issue_keepalive_t issue_keepalive; } lws_rops_t; typedef enum { LWS_ROPS_check_upgrades, LWS_ROPS_pt_init_destroy, LWS_ROPS_init_vhost, LWS_ROPS_destroy_vhost, LWS_ROPS_service_flag_pending, LWS_ROPS_handle_POLLIN, LWS_ROPS_handle_POLLOUT, LWS_ROPS_perform_user_POLLOUT, LWS_ROPS_callback_on_writable, LWS_ROPS_tx_credit, LWS_ROPS_write_role_protocol, LWS_ROPS_encapsulation_parent, LWS_ROPS_alpn_negotiated, LWS_ROPS_close_via_role_protocol, LWS_ROPS_close_role, LWS_ROPS_close_kill_connection, LWS_ROPS_destroy_role, LWS_ROPS_adoption_bind, LWS_ROPS_client_bind, LWS_ROPS_issue_keepalive, } lws_rops_func_idx_t; struct lws_context_per_thread; struct lws_role_ops { const char *name; const char *alpn; const lws_rops_t *rops_table; /**< the occupied role ops func ptrs */ uint8_t rops_idx[(LWS_COUNT_ROLE_OPS + 1) / 2]; /**< translates role index into .rops[] offset */ /* * the callback reasons for adoption for client, server * (just client applies if no concept of client or server) */ uint8_t adoption_cb[2]; /* * the callback reasons for adoption for client, server * (just client applies if no concept of client or server) */ uint8_t rx_cb[2]; /* * the callback reasons for WRITEABLE for client, server * (just client applies if no concept of client or server) */ uint8_t writeable_cb[2]; /* * the callback reasons for CLOSE for client, server * (just client applies if no concept of client or server) */ uint8_t close_cb[2]; /* * the callback reasons for protocol bind for client, server * (just client applies if no concept of client or server) */ uint8_t protocol_bind_cb[2]; /* * the callback reasons for protocol unbind for client, server * (just client applies if no concept of client or server) */ uint8_t protocol_unbind_cb[2]; uint8_t file_handle:1; /* role operates on files not sockets */ }; #define lws_rops_fidx(_rops, fidx) \ ((fidx & 1) ? (_rops)->rops_idx[fidx / 2] & 0xf : \ (_rops)->rops_idx[fidx / 2] >> 4) #define lws_rops_func_fidx(_rops, fidx) \ ((_rops)->rops_table[lws_rops_fidx(_rops, fidx) - 1]) /* core roles */ extern const struct lws_role_ops role_ops_raw_skt, role_ops_raw_file, role_ops_listen, role_ops_pipe, role_ops_netlink; /* bring in role private declarations */ #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) #include "private-lib-roles-http.h" #else #define lwsi_role_http(wsi) (0) #endif #if defined(LWS_ROLE_H1) #include "private-lib-roles-h1.h" #else #define lwsi_role_h1(wsi) (0) #endif #if defined(LWS_ROLE_H2) #include "private-lib-roles-h2.h" #else #define lwsi_role_h2(wsi) (0) #endif #if defined(LWS_ROLE_WS) #include "private-lib-roles-ws.h" #else #define lwsi_role_ws(wsi) (0) #endif #if defined(LWS_ROLE_CGI) #include "private-lib-roles-cgi.h" #else #define lwsi_role_cgi(wsi) (0) #endif #if defined(LWS_ROLE_DBUS) #include "private-lib-roles-dbus.h" #else #define lwsi_role_dbus(wsi) (0) #endif #if defined(LWS_ROLE_RAW_PROXY) #include "private-lib-roles-raw-proxy.h" #else #define lwsi_role_raw_proxy(wsi) (0) #endif #if defined(LWS_ROLE_MQTT) #include "mqtt/private-lib-roles-mqtt.h" #else #define lwsi_role_mqtt(wsi) (0) #endif enum { LWS_HP_RET_BAIL_OK, LWS_HP_RET_BAIL_DIE, LWS_HP_RET_USER_SERVICE, LWS_HP_RET_DROP_POLLOUT, LWS_HPI_RET_WSI_ALREADY_DIED, /* we closed it */ LWS_HPI_RET_HANDLED, /* no probs */ LWS_HPI_RET_PLEASE_CLOSE_ME, /* close it for us */ LWS_UPG_RET_DONE, LWS_UPG_RET_CONTINUE, LWS_UPG_RET_BAIL }; #define LWS_CONNECT_COMPLETION_GOOD (-99) int lws_role_call_adoption_bind(struct lws *wsi, int type, const char *prot); struct lws * lws_client_connect_4_established(struct lws *wsi, struct lws *wsi_piggyback, ssize_t plen); struct lws * lws_client_connect_3_connect(struct lws *wsi, const char *ads, const struct addrinfo *result, int n, void *opaque); libwebsockets-4.3.5/lib/roles/raw-file/000077500000000000000000000000001476025525100177725ustar00rootroot00000000000000libwebsockets-4.3.5/lib/roles/raw-file/CMakeLists.txt000066400000000000000000000027641476025525100225430ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # # The strategy is to only export to PARENT_SCOPE # # - changes to LIB_LIST # - changes to SOURCES # - includes via include_directories # # and keep everything else private include_directories(.) list(APPEND SOURCES roles/raw-file/ops-raw-file.c) # # Keep explicit parent scope exports at end # exports_to_parent_scope()libwebsockets-4.3.5/lib/roles/raw-file/ops-raw-file.c000066400000000000000000000104601476025525100224440ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include static int rops_handle_POLLIN_raw_file(struct lws_context_per_thread *pt, struct lws *wsi, struct lws_pollfd *pollfd) { int n; if (pollfd->revents & LWS_POLLOUT) { if (lws_change_pollfd(wsi, LWS_POLLOUT, 0)) { lwsl_wsi_info(wsi, "failed at set pollfd"); return LWS_HPI_RET_WSI_ALREADY_DIED; } n = lws_callback_as_writeable(wsi); if (n) return LWS_HPI_RET_PLEASE_CLOSE_ME; } if (pollfd->revents & LWS_POLLIN) { if (user_callback_handle_rxflow(wsi->a.protocol->callback, wsi, LWS_CALLBACK_RAW_RX_FILE, wsi->user_space, NULL, 0)) { lwsl_wsi_debug(wsi, "raw rx callback closed it"); return LWS_HPI_RET_PLEASE_CLOSE_ME; } } if (pollfd->revents & LWS_POLLHUP) if (!(pollfd->revents & LWS_POLLIN)) return LWS_HPI_RET_PLEASE_CLOSE_ME; return LWS_HPI_RET_HANDLED; } static int rops_adoption_bind_raw_file(struct lws *wsi, int type, const char *vh_prot_name) { /* no socket or http: it can only be a raw file */ if ((type & LWS_ADOPT_HTTP) || (type & LWS_ADOPT_SOCKET) || (type & _LWS_ADOPT_FINISH)) return 0; /* no match */ lws_role_transition(wsi, 0, LRS_ESTABLISHED, &role_ops_raw_file); if (!vh_prot_name) { if (wsi->a.vhost->default_protocol_index >= wsi->a.vhost->count_protocols) return 0; wsi->a.protocol = &wsi->a.vhost->protocols[ wsi->a.vhost->default_protocol_index]; } return 1; /* bound */ } static const lws_rops_t rops_table_raw_file[] = { /* 1 */ { .handle_POLLIN = rops_handle_POLLIN_raw_file }, /* 2 */ { .adoption_bind = rops_adoption_bind_raw_file }, }; const struct lws_role_ops role_ops_raw_file = { /* role name */ "raw-file", /* alpn id */ NULL, /* rops_table */ rops_table_raw_file, /* rops_idx */ { /* LWS_ROPS_check_upgrades */ /* LWS_ROPS_pt_init_destroy */ 0x00, /* LWS_ROPS_init_vhost */ /* LWS_ROPS_destroy_vhost */ 0x00, /* LWS_ROPS_service_flag_pending */ /* LWS_ROPS_handle_POLLIN */ 0x01, /* LWS_ROPS_handle_POLLOUT */ /* LWS_ROPS_perform_user_POLLOUT */ 0x00, /* LWS_ROPS_callback_on_writable */ /* LWS_ROPS_tx_credit */ 0x00, /* LWS_ROPS_write_role_protocol */ /* LWS_ROPS_encapsulation_parent */ 0x00, /* LWS_ROPS_alpn_negotiated */ /* LWS_ROPS_close_via_role_protocol */ 0x00, /* LWS_ROPS_close_role */ /* LWS_ROPS_close_kill_connection */ 0x00, /* LWS_ROPS_destroy_role */ /* LWS_ROPS_adoption_bind */ 0x02, /* LWS_ROPS_client_bind */ /* LWS_ROPS_issue_keepalive */ 0x00, }, /* adoption_cb clnt, srv */ { LWS_CALLBACK_RAW_ADOPT_FILE, LWS_CALLBACK_RAW_ADOPT_FILE }, /* rx_cb clnt, srv */ { LWS_CALLBACK_RAW_RX_FILE, LWS_CALLBACK_RAW_RX_FILE }, /* writeable cb clnt, srv */ { LWS_CALLBACK_RAW_WRITEABLE_FILE, LWS_CALLBACK_RAW_WRITEABLE_FILE}, /* close cb clnt, srv */ { LWS_CALLBACK_RAW_CLOSE_FILE, LWS_CALLBACK_RAW_CLOSE_FILE}, /* protocol_bind cb c, srv */ { LWS_CALLBACK_RAW_FILE_BIND_PROTOCOL, LWS_CALLBACK_RAW_FILE_BIND_PROTOCOL }, /* protocol_unbind cb c, srv */ { LWS_CALLBACK_RAW_FILE_DROP_PROTOCOL, LWS_CALLBACK_RAW_FILE_DROP_PROTOCOL }, /* file_handle */ 1, }; libwebsockets-4.3.5/lib/roles/raw-proxy/000077500000000000000000000000001476025525100202345ustar00rootroot00000000000000libwebsockets-4.3.5/lib/roles/raw-proxy/CMakeLists.txt000066400000000000000000000027721476025525100230040ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # # The strategy is to only export to PARENT_SCOPE # # - changes to LIB_LIST # - changes to SOURCES # - includes via include_directories # # and keep everything else private include_directories(.) list(APPEND SOURCES roles/raw-proxy/ops-raw-proxy.c) # # Keep explicit parent scope exports at end # exports_to_parent_scope() libwebsockets-4.3.5/lib/roles/raw-proxy/ops-raw-proxy.c000066400000000000000000000164101476025525100231510ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include static int rops_handle_POLLIN_raw_proxy(struct lws_context_per_thread *pt, struct lws *wsi, struct lws_pollfd *pollfd) { struct lws_tokens ebuf; int n, buffered; /* pending truncated sends have uber priority */ if (lws_has_buffered_out(wsi)) { if (!(pollfd->revents & LWS_POLLOUT)) return LWS_HPI_RET_HANDLED; /* drain the output buflist */ if (lws_issue_raw(wsi, NULL, 0) < 0) goto fail; /* * we can't afford to allow input processing to send * something new, so spin around he event loop until * he doesn't have any partials */ return LWS_HPI_RET_HANDLED; } if (lwsi_state(wsi) == LRS_WAITING_CONNECT) goto try_pollout; if ((pollfd->revents & pollfd->events & LWS_POLLIN) && /* any tunnel has to have been established... */ lwsi_state(wsi) != LRS_SSL_ACK_PENDING && !(wsi->favoured_pollin && (pollfd->revents & pollfd->events & LWS_POLLOUT))) { ebuf.token = NULL; ebuf.len = 0; buffered = lws_buflist_aware_read(pt, wsi, &ebuf, 1, __func__); if (buffered < 0) goto fail; switch (ebuf.len) { case 0: lwsl_info("%s: read 0 len\n", __func__); wsi->seen_zero_length_recv = 1; if (lws_change_pollfd(wsi, LWS_POLLIN, 0)) goto fail; /* * we need to go to fail here, since it's the only * chance we get to understand that the socket has * closed */ // goto try_pollout; goto fail; case LWS_SSL_CAPABLE_ERROR: goto fail; case LWS_SSL_CAPABLE_MORE_SERVICE: goto try_pollout; } n = user_callback_handle_rxflow(wsi->a.protocol->callback, wsi, lwsi_role_client(wsi) ? LWS_CALLBACK_RAW_PROXY_CLI_RX : LWS_CALLBACK_RAW_PROXY_SRV_RX, wsi->user_space, ebuf.token, (size_t)ebuf.len); if (n < 0) { lwsl_info("LWS_CALLBACK_RAW_PROXY_*_RX fail\n"); goto fail; } if (lws_buflist_aware_finished_consuming(wsi, &ebuf, ebuf.len, buffered, __func__)) return LWS_HPI_RET_PLEASE_CLOSE_ME; } else if (wsi->favoured_pollin && (pollfd->revents & pollfd->events & LWS_POLLOUT)) /* we balanced the last favouring of pollin */ wsi->favoured_pollin = 0; try_pollout: if (!(pollfd->revents & LWS_POLLOUT)) return LWS_HPI_RET_HANDLED; if (lws_handle_POLLOUT_event(wsi, pollfd)) { lwsl_debug("POLLOUT event closed it\n"); return LWS_HPI_RET_PLEASE_CLOSE_ME; } #if defined(LWS_WITH_CLIENT) if (lws_http_client_socket_service(wsi, pollfd)) return LWS_HPI_RET_WSI_ALREADY_DIED; #endif return LWS_HPI_RET_HANDLED; fail: lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "raw svc fail"); return LWS_HPI_RET_WSI_ALREADY_DIED; } static int rops_adoption_bind_raw_proxy(struct lws *wsi, int type, const char *vh_prot_name) { /* no http but socket... must be raw skt */ if ((type & LWS_ADOPT_HTTP) || !(type & LWS_ADOPT_SOCKET) || (!(type & LWS_ADOPT_FLAG_RAW_PROXY)) || (type & _LWS_ADOPT_FINISH)) return 0; /* no match */ #if defined(LWS_WITH_UDP) if (type & LWS_ADOPT_FLAG_UDP) /* * these can be >128 bytes, so just alloc for UDP */ wsi->udp = lws_malloc(sizeof(*wsi->udp), "udp struct"); #endif lws_role_transition(wsi, LWSIFR_SERVER, (type & LWS_ADOPT_ALLOW_SSL) ? LRS_SSL_INIT : LRS_ESTABLISHED, &role_ops_raw_proxy); if (vh_prot_name) lws_bind_protocol(wsi, wsi->a.protocol, __func__); else /* this is the only time he will transition */ lws_bind_protocol(wsi, &wsi->a.vhost->protocols[wsi->a.vhost->raw_protocol_index], __func__); return 1; /* bound */ } static int rops_client_bind_raw_proxy(struct lws *wsi, const struct lws_client_connect_info *i) { if (!i) { /* finalize */ if (!wsi->user_space && wsi->stash->cis[CIS_METHOD]) if (lws_ensure_user_space(wsi)) return 1; return 0; } /* we are a fallback if nothing else matched */ if (i->local_protocol_name && !strcmp(i->local_protocol_name, "raw-proxy")) lws_role_transition(wsi, LWSIFR_CLIENT, LRS_UNCONNECTED, &role_ops_raw_proxy); return 0; } static int rops_handle_POLLOUT_raw_proxy(struct lws *wsi) { if (lwsi_state(wsi) == LRS_ESTABLISHED) return LWS_HP_RET_USER_SERVICE; if (lwsi_role_client(wsi)) return LWS_HP_RET_USER_SERVICE; return LWS_HP_RET_BAIL_OK; } static const lws_rops_t rops_table_raw_proxy[] = { /* 1 */ { .handle_POLLIN = rops_handle_POLLIN_raw_proxy }, /* 2 */ { .handle_POLLOUT = rops_handle_POLLOUT_raw_proxy }, /* 3 */ { .adoption_bind = rops_adoption_bind_raw_proxy }, /* 4 */ { .client_bind = rops_client_bind_raw_proxy }, }; const struct lws_role_ops role_ops_raw_proxy = { /* role name */ "raw-proxy", /* alpn id */ NULL, /* rops_table */ rops_table_raw_proxy, /* rops_idx */ { /* LWS_ROPS_check_upgrades */ /* LWS_ROPS_pt_init_destroy */ 0x00, /* LWS_ROPS_init_vhost */ /* LWS_ROPS_destroy_vhost */ 0x00, /* LWS_ROPS_service_flag_pending */ /* LWS_ROPS_handle_POLLIN */ 0x01, /* LWS_ROPS_handle_POLLOUT */ /* LWS_ROPS_perform_user_POLLOUT */ 0x20, /* LWS_ROPS_callback_on_writable */ /* LWS_ROPS_tx_credit */ 0x00, /* LWS_ROPS_write_role_protocol */ /* LWS_ROPS_encapsulation_parent */ 0x00, /* LWS_ROPS_alpn_negotiated */ /* LWS_ROPS_close_via_role_protocol */ 0x00, /* LWS_ROPS_close_role */ /* LWS_ROPS_close_kill_connection */ 0x00, /* LWS_ROPS_destroy_role */ /* LWS_ROPS_adoption_bind */ 0x03, /* LWS_ROPS_client_bind */ /* LWS_ROPS_issue_keepalive */ 0x40, }, /* adoption_cb clnt, srv */ { LWS_CALLBACK_RAW_PROXY_CLI_ADOPT, LWS_CALLBACK_RAW_PROXY_SRV_ADOPT }, /* rx_cb clnt, srv */ { LWS_CALLBACK_RAW_PROXY_CLI_RX, LWS_CALLBACK_RAW_PROXY_SRV_RX }, /* writeable cb clnt, srv */ { LWS_CALLBACK_RAW_PROXY_CLI_WRITEABLE, LWS_CALLBACK_RAW_PROXY_SRV_WRITEABLE, }, /* close cb clnt, srv */ { LWS_CALLBACK_RAW_PROXY_CLI_CLOSE, LWS_CALLBACK_RAW_PROXY_SRV_CLOSE }, /* protocol_bind cb c, srv */ { LWS_CALLBACK_RAW_PROXY_CLI_BIND_PROTOCOL, LWS_CALLBACK_RAW_PROXY_SRV_BIND_PROTOCOL }, /* protocol_unbind cb c, srv */ { LWS_CALLBACK_RAW_PROXY_CLI_DROP_PROTOCOL, LWS_CALLBACK_RAW_PROXY_SRV_DROP_PROTOCOL }, /* file_handle */ 0, }; libwebsockets-4.3.5/lib/roles/raw-proxy/private-lib-roles-raw-proxy.h000066400000000000000000000032001476025525100257060ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * This is included from private-lib-core.h if LWS_ROLE_RAW_PROXY */ extern const struct lws_role_ops role_ops_raw_proxy; #define lwsi_role_raw_proxy(wsi) (wsi->role_ops == &role_ops_raw_proxy) #if 0 struct lws_vhost_role_ws { const struct lws_extension *extensions; }; struct lws_pt_role_ws { struct lws *rx_draining_ext_list; struct lws *tx_draining_ext_list; }; struct _lws_raw_proxy_related { struct lws *wsi_onward; }; #endif libwebsockets-4.3.5/lib/roles/raw-skt/000077500000000000000000000000001476025525100176545ustar00rootroot00000000000000libwebsockets-4.3.5/lib/roles/raw-skt/CMakeLists.txt000066400000000000000000000031121476025525100224110ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # # The strategy is to only export to PARENT_SCOPE # # - changes to LIB_LIST # - changes to SOURCES # - includes via include_directories # # and keep everything else private include_directories(.) list(APPEND SOURCES roles/raw-skt/ops-raw-skt.c) if (LWS_WITH_ABSTRACT) list(APPEND SOURCES abstract/transports/raw-skt.c) endif() # # Keep explicit parent scope exports at end # exports_to_parent_scope() libwebsockets-4.3.5/lib/roles/raw-skt/ops-raw-skt.c000066400000000000000000000247261476025525100222220ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include #if defined(LWS_WITH_CLIENT) static int lws_raw_skt_connect(struct lws *wsi) { int n; #if defined(LWS_WITH_TLS) const char *cce = NULL; char ccebuf[128]; #if !defined(LWS_WITH_SYS_ASYNC_DNS) switch (lws_client_create_tls(wsi, &cce, 1)) { #else switch (lws_client_create_tls(wsi, &cce, 0)) { #endif case CCTLS_RETURN_ERROR: lws_inform_client_conn_fail(wsi, (void *)cce, strlen(cce)); return -1; case CCTLS_RETURN_RETRY: return 0; case CCTLS_RETURN_DONE: break; } if (wsi->tls.use_ssl & LCCSCF_USE_SSL) { n = lws_ssl_client_connect2(wsi, ccebuf, sizeof(ccebuf)); if (n < 0) { lws_inform_client_conn_fail(wsi, (void *)ccebuf, strlen(ccebuf)); return -1; } if (n != 1) return 0; /* wait */ } #endif if (!wsi->hdr_parsing_completed) { n = user_callback_handle_rxflow(wsi->a.protocol->callback, wsi, wsi->role_ops->adoption_cb[lwsi_role_server(wsi)], wsi->user_space, NULL, 0); if (n) { lws_inform_client_conn_fail(wsi, (void *)"user", 4); return 1; } } lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); lwsi_set_state(wsi, LRS_ESTABLISHED); return 1; /* success */ } #endif static int rops_handle_POLLIN_raw_skt(struct lws_context_per_thread *pt, struct lws *wsi, struct lws_pollfd *pollfd) { #if defined(LWS_WITH_SOCKS5) const char *cce = NULL; #endif struct lws_tokens ebuf; int n = 0, buffered = 0; /* pending truncated sends have uber priority */ if (lws_has_buffered_out(wsi)) { if (!(pollfd->revents & LWS_POLLOUT)) return LWS_HPI_RET_HANDLED; /* drain the output buflist */ if (lws_issue_raw(wsi, NULL, 0) < 0) goto fail; /* * we can't afford to allow input processing to send * something new, so spin around he event loop until * he doesn't have any partials */ return LWS_HPI_RET_HANDLED; } #if defined(LWS_WITH_SERVER) if (!lwsi_role_client(wsi) && lwsi_state(wsi) != LRS_ESTABLISHED) { lwsl_wsi_debug(wsi, "wsistate 0x%x\n", (int)wsi->wsistate); if (lwsi_state(wsi) != LRS_SSL_INIT) if (lws_server_socket_service_ssl(wsi, LWS_SOCK_INVALID, !!(pollfd->revents & pollfd->events & LWS_POLLIN))) return LWS_HPI_RET_PLEASE_CLOSE_ME; return LWS_HPI_RET_HANDLED; } #endif if ((pollfd->revents & pollfd->events & LWS_POLLIN) && !(wsi->favoured_pollin && (pollfd->revents & pollfd->events & LWS_POLLOUT))) { lwsl_wsi_debug(wsi, "POLLIN: state 0x%x", lwsi_state(wsi)); switch (lwsi_state(wsi)) { /* any tunnel has to have been established... */ case LRS_SSL_ACK_PENDING: goto nope; /* we are actually connected */ case LRS_WAITING_CONNECT: goto nope; case LRS_WAITING_SSL: #if defined(LWS_WITH_CLIENT) n = lws_raw_skt_connect(wsi); if (n < 0) goto fail; #endif break; #if defined(LWS_WITH_SOCKS5) /* SOCKS Greeting Reply */ case LRS_WAITING_SOCKS_GREETING_REPLY: case LRS_WAITING_SOCKS_AUTH_REPLY: case LRS_WAITING_SOCKS_CONNECT_REPLY: switch (lws_socks5c_handle_state(wsi, pollfd, &cce)) { case LW5CHS_RET_RET0: goto nope; case LW5CHS_RET_BAIL3: lws_inform_client_conn_fail(wsi, (void *)cce, strlen(cce)); goto fail; case LW5CHS_RET_STARTHS: lwsi_set_state(wsi, LRS_ESTABLISHED); lws_client_connect_4_established(wsi, NULL, 0); /* * Now we got the socks5 connection, we need to * go down the tls path on it now if that's what * we want */ goto post_rx; default: break; } goto post_rx; #endif default: ebuf.token = NULL; ebuf.len = (int) wsi->a.protocol->rx_buffer_size; buffered = lws_buflist_aware_read(pt, wsi, &ebuf, 1, __func__); switch (ebuf.len) { case 0: if (wsi->unix_skt) break; lwsl_wsi_info(wsi, "read 0 len"); wsi->seen_zero_length_recv = 1; if (lws_change_pollfd(wsi, LWS_POLLIN, 0)) goto fail; /* * we need to go to fail here, since it's the only * chance we get to understand that the socket has * closed */ // goto try_pollout; goto fail; case LWS_SSL_CAPABLE_ERROR: goto fail; case LWS_SSL_CAPABLE_MORE_SERVICE: goto try_pollout; } #if defined(LWS_WITH_UDP) if (lws_fi(&wsi->fic, "udp_rx_loss")) { n = ebuf.len; goto post_rx; } #endif n = user_callback_handle_rxflow(wsi->a.protocol->callback, wsi, LWS_CALLBACK_RAW_RX, wsi->user_space, ebuf.token, (unsigned int)ebuf.len); #if defined(LWS_WITH_UDP) || defined(LWS_WITH_SOCKS5) post_rx: #endif if (n < 0) { lwsl_wsi_info(wsi, "LWS_CALLBACK_RAW_RX_fail"); goto fail; } if (lws_buflist_aware_finished_consuming(wsi, &ebuf, ebuf.len, buffered, __func__)) return LWS_HPI_RET_PLEASE_CLOSE_ME; goto try_pollout; } } nope: if (wsi->favoured_pollin && (pollfd->revents & pollfd->events & LWS_POLLOUT)) /* we balanced the last favouring of pollin */ wsi->favoured_pollin = 0; try_pollout: if (!(pollfd->revents & LWS_POLLOUT)) return LWS_HPI_RET_HANDLED; #if defined(LWS_WITH_CLIENT) if (lwsi_state(wsi) == LRS_WAITING_CONNECT) { if (!lws_client_connect_3_connect(wsi, NULL, NULL, 0, NULL)) return LWS_HPI_RET_WSI_ALREADY_DIED; if (lws_raw_skt_connect(wsi) < 0) goto fail; } #endif if (lwsi_state(wsi) == LRS_WAITING_SSL) return LWS_HPI_RET_HANDLED; /* one shot */ if (lws_change_pollfd(wsi, LWS_POLLOUT, 0)) goto fail; /* clear back-to-back write detection */ wsi->could_have_pending = 0; n = user_callback_handle_rxflow(wsi->a.protocol->callback, wsi, LWS_CALLBACK_RAW_WRITEABLE, wsi->user_space, NULL, 0); if (n < 0) { lwsl_info("writeable_fail\n"); goto fail; } return LWS_HPI_RET_HANDLED; fail: lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "raw svc fail"); return LWS_HPI_RET_WSI_ALREADY_DIED; } #if defined(LWS_WITH_SERVER) static int rops_adoption_bind_raw_skt(struct lws *wsi, int type, const char *vh_prot_name) { // lwsl_notice("%s: bind type %d\n", __func__, type); /* no http but socket... must be raw skt */ if ((type & LWS_ADOPT_HTTP) || !(type & LWS_ADOPT_SOCKET) || ((type & _LWS_ADOPT_FINISH) && (!(type & LWS_ADOPT_FLAG_UDP)))) return 0; /* no match */ #if defined(LWS_WITH_UDP) if ((type & LWS_ADOPT_FLAG_UDP) && !wsi->udp) { /* * these can be >128 bytes, so just alloc for UDP */ wsi->udp = lws_malloc(sizeof(*wsi->udp), "udp struct"); if (!wsi->udp) return 0; memset(wsi->udp, 0, sizeof(*wsi->udp)); } #endif lws_role_transition(wsi, 0, (type & LWS_ADOPT_ALLOW_SSL) ? LRS_SSL_INIT : LRS_ESTABLISHED, &role_ops_raw_skt); if (vh_prot_name) lws_bind_protocol(wsi, wsi->a.protocol, __func__); else /* this is the only time he will transition */ lws_bind_protocol(wsi, &wsi->a.vhost->protocols[wsi->a.vhost->raw_protocol_index], __func__); return 1; /* bound */ } #endif #if defined(LWS_WITH_CLIENT) static int rops_client_bind_raw_skt(struct lws *wsi, const struct lws_client_connect_info *i) { if (!i) { /* finalize */ if (!wsi->user_space && wsi->stash->cis[CIS_METHOD]) if (lws_ensure_user_space(wsi)) return 1; return 0; } /* we are a fallback if nothing else matched */ if (!i->local_protocol_name || strcmp(i->local_protocol_name, "raw-proxy")) lws_role_transition(wsi, LWSIFR_CLIENT, LRS_UNCONNECTED, &role_ops_raw_skt); return 1; /* matched */ } #endif static const lws_rops_t rops_table_raw_skt[] = { /* 1 */ { .handle_POLLIN = rops_handle_POLLIN_raw_skt }, #if defined(LWS_WITH_SERVER) /* 2 */ { .adoption_bind = rops_adoption_bind_raw_skt }, #else /* 2 */ { .adoption_bind = NULL }, #endif #if defined(LWS_WITH_CLIENT) /* 3 */ { .client_bind = rops_client_bind_raw_skt }, #endif }; const struct lws_role_ops role_ops_raw_skt = { /* role name */ "raw-skt", /* alpn id */ NULL, /* rops_table */ rops_table_raw_skt, /* rops_idx */ { /* LWS_ROPS_check_upgrades */ /* LWS_ROPS_pt_init_destroy */ 0x00, /* LWS_ROPS_init_vhost */ /* LWS_ROPS_destroy_vhost */ 0x00, /* LWS_ROPS_service_flag_pending */ /* LWS_ROPS_handle_POLLIN */ 0x01, /* LWS_ROPS_handle_POLLOUT */ /* LWS_ROPS_perform_user_POLLOUT */ 0x00, /* LWS_ROPS_callback_on_writable */ /* LWS_ROPS_tx_credit */ 0x00, /* LWS_ROPS_write_role_protocol */ /* LWS_ROPS_encapsulation_parent */ 0x00, /* LWS_ROPS_alpn_negotiated */ /* LWS_ROPS_close_via_role_protocol */ 0x00, /* LWS_ROPS_close_role */ /* LWS_ROPS_close_kill_connection */ 0x00, /* LWS_ROPS_destroy_role */ #if defined(LWS_WITH_SERVER) /* LWS_ROPS_adoption_bind */ 0x02, #else /* LWS_ROPS_adoption_bind */ 0x00, #endif #if defined(LWS_WITH_CLIENT) /* LWS_ROPS_client_bind */ /* LWS_ROPS_issue_keepalive */ 0x30, #else /* LWS_ROPS_client_bind */ /* LWS_ROPS_issue_keepalive */ 0x00, #endif }, /* adoption_cb clnt, srv */ { LWS_CALLBACK_RAW_CONNECTED, LWS_CALLBACK_RAW_ADOPT }, /* rx_cb clnt, srv */ { LWS_CALLBACK_RAW_RX, LWS_CALLBACK_RAW_RX }, /* writeable cb clnt, srv */ { LWS_CALLBACK_RAW_WRITEABLE, LWS_CALLBACK_RAW_WRITEABLE}, /* close cb clnt, srv */ { LWS_CALLBACK_RAW_CLOSE, LWS_CALLBACK_RAW_CLOSE }, /* protocol_bind cb c, srv */ { LWS_CALLBACK_RAW_SKT_BIND_PROTOCOL, LWS_CALLBACK_RAW_SKT_BIND_PROTOCOL }, /* protocol_unbind cb c, srv */ { LWS_CALLBACK_RAW_SKT_DROP_PROTOCOL, LWS_CALLBACK_RAW_SKT_DROP_PROTOCOL }, /* file_handle */ 0, }; libwebsockets-4.3.5/lib/roles/ws/000077500000000000000000000000001476025525100167155ustar00rootroot00000000000000libwebsockets-4.3.5/lib/roles/ws/CMakeLists.txt000066400000000000000000000035751476025525100214670ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # # The strategy is to only export to PARENT_SCOPE # # - changes to LIB_LIST # - changes to SOURCES # - includes via include_directories # # and keep everything else private include_directories(.) list(APPEND SOURCES roles/ws/ops-ws.c) if (NOT LWS_WITHOUT_CLIENT) list(APPEND SOURCES roles/ws/client-ws.c roles/ws/client-parser-ws.c) endif() if (NOT LWS_WITHOUT_SERVER) list(APPEND SOURCES roles/ws/server-ws.c) endif() if (NOT LWS_WITHOUT_EXTENSIONS) list(APPEND HDR_PRIVATE roles/ws/ext/extension-permessage-deflate.h) list(APPEND SOURCES roles/ws/ext/extension.c roles/ws/ext/extension-permessage-deflate.c) endif() # # Keep explicit parent scope exports at end # exports_to_parent_scope() libwebsockets-4.3.5/lib/roles/ws/client-parser-ws.c000066400000000000000000000445351476025525100222730ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" /* * parsers.c: lws_ws_rx_sm() needs to be roughly kept in * sync with changes here, esp related to ext draining */ int lws_ws_client_rx_sm(struct lws *wsi, unsigned char c) { int callback_action = LWS_CALLBACK_CLIENT_RECEIVE; struct lws_ext_pm_deflate_rx_ebufs pmdrx; unsigned short close_code; unsigned char *pp; int handled, m, n; #if !defined(LWS_WITHOUT_EXTENSIONS) int rx_draining_ext = 0; #endif pmdrx.eb_in.token = NULL; pmdrx.eb_in.len = 0; pmdrx.eb_out.token = NULL; pmdrx.eb_out.len = 0; #if !defined(LWS_WITHOUT_EXTENSIONS) if (wsi->ws->rx_draining_ext) { assert(!c); lws_remove_wsi_from_draining_ext_list(wsi); rx_draining_ext = 1; lwsl_wsi_debug(wsi, "doing draining flow"); goto drain_extension; } #endif switch (wsi->lws_rx_parse_state) { case LWS_RXPS_NEW: /* control frames (PING) may interrupt checkable sequences */ wsi->ws->defeat_check_utf8 = 0; switch (wsi->ws->ietf_spec_revision) { case 13: wsi->ws->opcode = c & 0xf; /* revisit if an extension wants them... */ switch (wsi->ws->opcode) { case LWSWSOPC_TEXT_FRAME: wsi->ws->rsv_first_msg = (c & 0x70); #if !defined(LWS_WITHOUT_EXTENSIONS) /* * set the expectation that we will have to * fake up the zlib trailer to the inflator for * this frame */ wsi->ws->pmd_trailer_application = !!(c & 0x40); #endif wsi->ws->continuation_possible = 1; wsi->ws->check_utf8 = lws_check_opt( wsi->a.context->options, LWS_SERVER_OPTION_VALIDATE_UTF8); wsi->ws->utf8 = 0; wsi->ws->first_fragment = 1; break; case LWSWSOPC_BINARY_FRAME: wsi->ws->rsv_first_msg = (c & 0x70); #if !defined(LWS_WITHOUT_EXTENSIONS) /* * set the expectation that we will have to * fake up the zlib trailer to the inflator for * this frame */ wsi->ws->pmd_trailer_application = !!(c & 0x40); #endif wsi->ws->check_utf8 = 0; wsi->ws->continuation_possible = 1; wsi->ws->first_fragment = 1; break; case LWSWSOPC_CONTINUATION: if (!wsi->ws->continuation_possible) { lwsl_wsi_info(wsi, "disordered continuation"); return -1; } wsi->ws->first_fragment = 0; break; case LWSWSOPC_CLOSE: wsi->ws->check_utf8 = 0; wsi->ws->utf8 = 0; break; case 3: case 4: case 5: case 6: case 7: case 0xb: case 0xc: case 0xd: case 0xe: case 0xf: lwsl_wsi_info(wsi, "illegal opcode"); return -1; default: wsi->ws->defeat_check_utf8 = 1; break; } wsi->ws->rsv = (c & 0x70); /* revisit if an extension wants them... */ if ( #if !defined(LWS_WITHOUT_EXTENSIONS) !wsi->ws->count_act_ext && #endif wsi->ws->rsv) { lwsl_wsi_info(wsi, "illegal rsv bits set"); return -1; } wsi->ws->final = !!((c >> 7) & 1); lwsl_wsi_ext(wsi, " This RX frame Final %d", wsi->ws->final); if (wsi->ws->owed_a_fin && (wsi->ws->opcode == LWSWSOPC_TEXT_FRAME || wsi->ws->opcode == LWSWSOPC_BINARY_FRAME)) { lwsl_wsi_info(wsi, "hey you owed us a FIN"); return -1; } if ((!(wsi->ws->opcode & 8)) && wsi->ws->final) { wsi->ws->continuation_possible = 0; wsi->ws->owed_a_fin = 0; } if ((wsi->ws->opcode & 8) && !wsi->ws->final) { lwsl_wsi_info(wsi, "control msg can't be fragmented"); return -1; } if (!wsi->ws->final) wsi->ws->owed_a_fin = 1; switch (wsi->ws->opcode) { case LWSWSOPC_TEXT_FRAME: case LWSWSOPC_BINARY_FRAME: wsi->ws->frame_is_binary = wsi->ws->opcode == LWSWSOPC_BINARY_FRAME; break; } wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN; break; default: lwsl_wsi_err(wsi, "unknown spec version %02d", wsi->ws->ietf_spec_revision); break; } break; case LWS_RXPS_04_FRAME_HDR_LEN: wsi->ws->this_frame_masked = !!(c & 0x80); if (wsi->ws->this_frame_masked) goto server_cannot_mask; switch (c & 0x7f) { case 126: /* control frames are not allowed to have big lengths */ if (wsi->ws->opcode & 8) goto illegal_ctl_length; wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN16_2; break; case 127: /* control frames are not allowed to have big lengths */ if (wsi->ws->opcode & 8) goto illegal_ctl_length; wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN64_8; break; default: wsi->ws->rx_packet_length = c & 0x7f; if (wsi->ws->this_frame_masked) wsi->lws_rx_parse_state = LWS_RXPS_07_COLLECT_FRAME_KEY_1; else { if (wsi->ws->rx_packet_length) { wsi->lws_rx_parse_state = LWS_RXPS_WS_FRAME_PAYLOAD; } else { wsi->lws_rx_parse_state = LWS_RXPS_NEW; goto spill; } } break; } break; case LWS_RXPS_04_FRAME_HDR_LEN16_2: wsi->ws->rx_packet_length = (size_t)((unsigned int)c << 8); wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN16_1; break; case LWS_RXPS_04_FRAME_HDR_LEN16_1: wsi->ws->rx_packet_length |= c; if (wsi->ws->this_frame_masked) wsi->lws_rx_parse_state = LWS_RXPS_07_COLLECT_FRAME_KEY_1; else { if (wsi->ws->rx_packet_length) wsi->lws_rx_parse_state = LWS_RXPS_WS_FRAME_PAYLOAD; else { wsi->lws_rx_parse_state = LWS_RXPS_NEW; goto spill; } } break; case LWS_RXPS_04_FRAME_HDR_LEN64_8: if (c & 0x80) { lwsl_wsi_warn(wsi, "b63 of length must be zero"); /* kill the connection */ return -1; } #if defined __LP64__ wsi->ws->rx_packet_length = ((size_t)c) << 56; #else wsi->ws->rx_packet_length = 0; #endif wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN64_7; break; case LWS_RXPS_04_FRAME_HDR_LEN64_7: #if defined __LP64__ wsi->ws->rx_packet_length |= ((size_t)c) << 48; #endif wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN64_6; break; case LWS_RXPS_04_FRAME_HDR_LEN64_6: #if defined __LP64__ wsi->ws->rx_packet_length |= ((size_t)c) << 40; #endif wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN64_5; break; case LWS_RXPS_04_FRAME_HDR_LEN64_5: #if defined __LP64__ wsi->ws->rx_packet_length |= ((size_t)c) << 32; #endif wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN64_4; break; case LWS_RXPS_04_FRAME_HDR_LEN64_4: wsi->ws->rx_packet_length |= ((size_t)c) << 24; wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN64_3; break; case LWS_RXPS_04_FRAME_HDR_LEN64_3: wsi->ws->rx_packet_length |= ((size_t)c) << 16; wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN64_2; break; case LWS_RXPS_04_FRAME_HDR_LEN64_2: wsi->ws->rx_packet_length |= ((size_t)c) << 8; wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN64_1; break; case LWS_RXPS_04_FRAME_HDR_LEN64_1: wsi->ws->rx_packet_length |= (size_t)c; if (wsi->ws->this_frame_masked) wsi->lws_rx_parse_state = LWS_RXPS_07_COLLECT_FRAME_KEY_1; else { if (wsi->ws->rx_packet_length) wsi->lws_rx_parse_state = LWS_RXPS_WS_FRAME_PAYLOAD; else { wsi->lws_rx_parse_state = LWS_RXPS_NEW; goto spill; } } break; case LWS_RXPS_07_COLLECT_FRAME_KEY_1: wsi->ws->mask[0] = c; if (c) wsi->ws->all_zero_nonce = 0; wsi->lws_rx_parse_state = LWS_RXPS_07_COLLECT_FRAME_KEY_2; break; case LWS_RXPS_07_COLLECT_FRAME_KEY_2: wsi->ws->mask[1] = c; if (c) wsi->ws->all_zero_nonce = 0; wsi->lws_rx_parse_state = LWS_RXPS_07_COLLECT_FRAME_KEY_3; break; case LWS_RXPS_07_COLLECT_FRAME_KEY_3: wsi->ws->mask[2] = c; if (c) wsi->ws->all_zero_nonce = 0; wsi->lws_rx_parse_state = LWS_RXPS_07_COLLECT_FRAME_KEY_4; break; case LWS_RXPS_07_COLLECT_FRAME_KEY_4: wsi->ws->mask[3] = c; if (c) wsi->ws->all_zero_nonce = 0; if (wsi->ws->rx_packet_length) wsi->lws_rx_parse_state = LWS_RXPS_WS_FRAME_PAYLOAD; else { wsi->lws_rx_parse_state = LWS_RXPS_NEW; goto spill; } break; case LWS_RXPS_WS_FRAME_PAYLOAD: assert(wsi->ws->rx_ubuf); #if !defined(LWS_WITHOUT_EXTENSIONS) if (wsi->ws->rx_draining_ext) goto drain_extension; #endif if (wsi->ws->this_frame_masked && !wsi->ws->all_zero_nonce) c ^= wsi->ws->mask[(wsi->ws->mask_idx++) & 3]; /* * unmask and collect the payload body in * rx_ubuf_head + LWS_PRE */ wsi->ws->rx_ubuf[LWS_PRE + (wsi->ws->rx_ubuf_head++)] = c; if (--wsi->ws->rx_packet_length == 0) { /* spill because we have the whole frame */ wsi->lws_rx_parse_state = LWS_RXPS_NEW; lwsl_wsi_debug(wsi, "spilling as we have the whole frame"); goto spill; } /* * if there's no protocol max frame size given, we are * supposed to default to context->pt_serv_buf_size */ if (!wsi->a.protocol->rx_buffer_size && wsi->ws->rx_ubuf_head != wsi->a.context->pt_serv_buf_size) break; if (wsi->a.protocol->rx_buffer_size && wsi->ws->rx_ubuf_head != wsi->a.protocol->rx_buffer_size) break; /* spill because we filled our rx buffer */ lwsl_wsi_debug(wsi, "spilling as we filled our rx buffer"); spill: handled = 0; /* * is this frame a control packet we should take care of at this * layer? If so service it and hide it from the user callback */ switch (wsi->ws->opcode) { case LWSWSOPC_CLOSE: pp = &wsi->ws->rx_ubuf[LWS_PRE]; if (lws_check_opt(wsi->a.context->options, LWS_SERVER_OPTION_VALIDATE_UTF8) && wsi->ws->rx_ubuf_head > 2 && lws_check_utf8(&wsi->ws->utf8, pp + 2, wsi->ws->rx_ubuf_head - 2)) goto utf8_fail; /* is this an acknowledgment of our close? */ if (lwsi_state(wsi) == LRS_AWAITING_CLOSE_ACK) { /* * fine he has told us he is closing too, let's * finish our close */ lwsl_wsi_parser(wsi, "seen server's close ack"); return -1; } lwsl_wsi_parser(wsi, "client sees server close len = %d", (int)wsi->ws->rx_ubuf_head); if (wsi->ws->rx_ubuf_head >= 2) { close_code = (unsigned short)((pp[0] << 8) | pp[1]); if (close_code < 1000 || close_code == 1004 || close_code == 1005 || close_code == 1006 || (close_code >= 1016 && close_code < 3000) ) { pp[0] = (LWS_CLOSE_STATUS_PROTOCOL_ERR >> 8) & 0xff; pp[1] = LWS_CLOSE_STATUS_PROTOCOL_ERR & 0xff; } } if (user_callback_handle_rxflow( wsi->a.protocol->callback, wsi, LWS_CALLBACK_WS_PEER_INITIATED_CLOSE, wsi->user_space, pp, wsi->ws->rx_ubuf_head)) return -1; memcpy(wsi->ws->ping_payload_buf + LWS_PRE, pp, wsi->ws->rx_ubuf_head); wsi->ws->close_in_ping_buffer_len = (uint8_t)wsi->ws->rx_ubuf_head; lwsl_wsi_info(wsi, "scheduling return close as ack"); __lws_change_pollfd(wsi, LWS_POLLIN, 0); lws_set_timeout(wsi, PENDING_TIMEOUT_CLOSE_SEND, 3); wsi->waiting_to_send_close_frame = 1; wsi->close_needs_ack = 0; lwsi_set_state(wsi, LRS_WAITING_TO_SEND_CLOSE); lws_callback_on_writable(wsi); handled = 1; break; case LWSWSOPC_PING: lwsl_wsi_info(wsi, "received %d byte ping, sending pong", (int)wsi->ws->rx_ubuf_head); /* he set a close reason on this guy, ignore PING */ if (wsi->ws->close_in_ping_buffer_len) goto ping_drop; if (wsi->ws->pong_pending_flag) { /* * there is already a pending pong payload * we should just log and drop */ lwsl_wsi_parser(wsi, "DROP PING since one pending"); goto ping_drop; } /* control packets can only be < 128 bytes long */ if (wsi->ws->rx_ubuf_head > 128 - 3) { lwsl_wsi_parser(wsi, "DROP PING payload too large"); goto ping_drop; } /* stash the pong payload */ memcpy(wsi->ws->pong_payload_buf + LWS_PRE, &wsi->ws->rx_ubuf[LWS_PRE], wsi->ws->rx_ubuf_head); wsi->ws->pong_payload_len = (uint8_t)wsi->ws->rx_ubuf_head; wsi->ws->pong_pending_flag = 1; /* get it sent as soon as possible */ lws_callback_on_writable(wsi); ping_drop: wsi->ws->rx_ubuf_head = 0; handled = 1; break; case LWSWSOPC_PONG: lwsl_wsi_info(wsi, "Received pong"); lwsl_hexdump_wsi_debug(wsi, &wsi->ws->rx_ubuf[LWS_PRE], wsi->ws->rx_ubuf_head); lws_validity_confirmed(wsi); /* issue it */ callback_action = LWS_CALLBACK_CLIENT_RECEIVE_PONG; break; case LWSWSOPC_CONTINUATION: case LWSWSOPC_TEXT_FRAME: case LWSWSOPC_BINARY_FRAME: break; default: /* not handled or failed */ lwsl_wsi_ext(wsi, "Unhandled ext opc 0x%x", wsi->ws->opcode); wsi->ws->rx_ubuf_head = 0; return -1; } /* * No it's real payload, pass it up to the user callback. * * We have been statefully collecting it in the * LWS_RXPS_WS_FRAME_PAYLOAD clause above. * * It's nicely buffered with the pre-padding taken care of * so it can be sent straight out again using lws_write. * * However, now we have a chunk of it, we want to deal with it * all here. Since this may be input to permessage-deflate and * there are block limits on that for input and output, we may * need to iterate. */ if (handled) goto already_done; pmdrx.eb_in.token = &wsi->ws->rx_ubuf[LWS_PRE]; pmdrx.eb_in.len = (int)wsi->ws->rx_ubuf_head; /* for the non-pm-deflate case */ pmdrx.eb_out = pmdrx.eb_in; lwsl_wsi_debug(wsi, "starting disbursal of %d deframed rx", (int)wsi->ws->rx_ubuf_head); #if !defined(LWS_WITHOUT_EXTENSIONS) drain_extension: #endif do { // lwsl_wsi_notice("pmdrx.eb_in.len: %d", // (int)pmdrx.eb_in.len); n = PMDR_DID_NOTHING; #if !defined(LWS_WITHOUT_EXTENSIONS) lwsl_wsi_ext(wsi, "+++ passing %d %p to ext", pmdrx.eb_in.len, pmdrx.eb_in.token); n = lws_ext_cb_active(wsi, LWS_EXT_CB_PAYLOAD_RX, &pmdrx, 0); lwsl_wsi_ext(wsi, "Ext RX returned %d", n); if (n < 0) { wsi->socket_is_permanently_unusable = 1; return -1; } if (n == PMDR_DID_NOTHING) /* ie, not PMDR_NOTHING_WE_SHOULD_DO */ break; #endif lwsl_wsi_ext(wsi, "post inflate ebuf in len %d / out len %d", pmdrx.eb_in.len, pmdrx.eb_out.len); #if !defined(LWS_WITHOUT_EXTENSIONS) if (rx_draining_ext && !pmdrx.eb_out.len) { lwsl_wsi_debug(wsi, " --- ending drain on 0 read result"); goto already_done; } if (n == PMDR_HAS_PENDING) { /* 1 means stuff to drain */ /* extension had more... main loop will come back */ lwsl_wsi_ext(wsi, "adding to draining ext list"); lws_add_wsi_to_draining_ext_list(wsi); } else { lwsl_wsi_ext(wsi, "removing from draining ext list"); lws_remove_wsi_from_draining_ext_list(wsi); } rx_draining_ext = wsi->ws->rx_draining_ext; #endif if (wsi->ws->check_utf8 && !wsi->ws->defeat_check_utf8) { if (lws_check_utf8(&wsi->ws->utf8, pmdrx.eb_out.token, (unsigned int)pmdrx.eb_out.len)) { lws_close_reason(wsi, LWS_CLOSE_STATUS_INVALID_PAYLOAD, (uint8_t *)"bad utf8", 8); goto utf8_fail; } /* we are ending partway through utf-8 character? */ if (!wsi->ws->rx_packet_length && wsi->ws->final && wsi->ws->utf8 #if !defined(LWS_WITHOUT_EXTENSIONS) /* if ext not negotiated, going to be UNKNOWN */ && (n == PMDR_EMPTY_FINAL || n == PMDR_UNKNOWN) #endif ) { lwsl_wsi_info(wsi, "FINAL utf8 error"); lws_close_reason(wsi, LWS_CLOSE_STATUS_INVALID_PAYLOAD, (uint8_t *)"partial utf8", 12); utf8_fail: lwsl_wsi_info(wsi, "utf8 error"); lwsl_hexdump_wsi_info(wsi, pmdrx.eb_out.token, (unsigned int)pmdrx.eb_out.len); return -1; } } if (pmdrx.eb_out.len < 0 && callback_action != LWS_CALLBACK_CLIENT_RECEIVE_PONG) goto already_done; if (!pmdrx.eb_out.token) goto already_done; pmdrx.eb_out.token[pmdrx.eb_out.len] = '\0'; if (!wsi->a.protocol->callback) goto already_done; if (callback_action == LWS_CALLBACK_CLIENT_RECEIVE_PONG) lwsl_wsi_info(wsi, "Client doing pong callback"); #if !defined(LWS_WITHOUT_EXTENSIONS) if (n == PMDR_HAS_PENDING) /* extension had more... main loop will come back * we want callback to be done with this set, if so, * because lws_is_final() hides it was final until the * last chunk */ lws_add_wsi_to_draining_ext_list(wsi); else lws_remove_wsi_from_draining_ext_list(wsi); #endif if (lwsi_state(wsi) == LRS_RETURNED_CLOSE || lwsi_state(wsi) == LRS_WAITING_TO_SEND_CLOSE || lwsi_state(wsi) == LRS_AWAITING_CLOSE_ACK) goto already_done; /* if pmd not enabled, in == out */ if (n == PMDR_DID_NOTHING #if !defined(LWS_WITHOUT_EXTENSIONS) || n == PMDR_NOTHING_WE_SHOULD_DO || n == PMDR_UNKNOWN #endif ) pmdrx.eb_in.len -= pmdrx.eb_out.len; m = wsi->a.protocol->callback(wsi, (enum lws_callback_reasons)callback_action, wsi->user_space, pmdrx.eb_out.token, (unsigned int)pmdrx.eb_out.len); wsi->ws->first_fragment = 0; lwsl_wsi_debug(wsi, "bulk ws rx: inp used %d, output %d", (int)wsi->ws->rx_ubuf_head, (int)pmdrx.eb_out.len); /* if user code wants to close, let caller know */ if (m) return 1; } while (pmdrx.eb_in.len #if !defined(LWS_WITHOUT_EXTENSIONS) || rx_draining_ext #endif ); already_done: wsi->ws->rx_ubuf_head = 0; break; default: lwsl_wsi_err(wsi, "client rx illegal state"); return 1; } return 0; illegal_ctl_length: lwsl_wsi_warn(wsi, "Control frame asking for extended length is illegal"); /* kill the connection */ return -1; server_cannot_mask: lws_close_reason(wsi, LWS_CLOSE_STATUS_PROTOCOL_ERR, (uint8_t *)"srv mask", 8); lwsl_wsi_warn(wsi, "Server must not mask"); /* kill the connection */ return -1; } libwebsockets-4.3.5/lib/roles/ws/client-ws.c000066400000000000000000000403421476025525100207710ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include /* * In-place str to lower case */ static void strtolower(char *s) { while (*s) { #ifdef LWS_PLAT_OPTEE int tolower_optee(int c); *s = tolower_optee((int)*s); #else *s = (char)tolower((int)*s); #endif s++; } } int lws_create_client_ws_object(const struct lws_client_connect_info *i, struct lws *wsi) { int v = SPEC_LATEST_SUPPORTED; /* allocate the ws struct for the wsi */ wsi->ws = lws_zalloc(sizeof(*wsi->ws), "client ws struct"); if (!wsi->ws) { lwsl_wsi_notice(wsi, "OOM"); return 1; } /* -1 means just use latest supported */ if (i->ietf_version_or_minus_one != -1 && i->ietf_version_or_minus_one) v = i->ietf_version_or_minus_one; wsi->ws->ietf_spec_revision = (uint8_t)v; return 0; } #if defined(LWS_WITH_CLIENT) int lws_ws_handshake_client(struct lws *wsi, unsigned char **buf, size_t len) { unsigned char *bufin = *buf; if ((lwsi_state(wsi) != LRS_WAITING_PROXY_REPLY) && (lwsi_state(wsi) != LRS_H1C_ISSUE_HANDSHAKE) && (lwsi_state(wsi) != LRS_WAITING_SERVER_REPLY) && !lwsi_role_client(wsi)) return 0; lwsl_wsi_debug(wsi, "hs client feels it has %d in", (int)len); while (len) { /* * we were accepting input but now we stopped doing so */ if (lws_is_flowcontrolled(wsi)) { lwsl_wsi_debug(wsi, "caching %ld", (long)len); /* * Since we cached the remaining available input, we * can say we "consumed" it. * * But what about the case where the available input * came out of the rxflow cache already? If we are * effectively "putting it back in the cache", we have * to place it at the cache head, not the tail as usual. */ if (lws_rxflow_cache(wsi, *buf, 0, len) == LWSRXFC_TRIMMED) { /* * we dealt with it by trimming the existing * rxflow cache HEAD to account for what we used. * * indicate we didn't use anything to the caller * so he doesn't do any consumed processing */ lwsl_wsi_info(wsi, "trimming inside rxflow cache"); *buf = bufin; } else *buf += len; return 0; } #if !defined(LWS_WITHOUT_EXTENSIONS) if (wsi->ws->rx_draining_ext) { int m; lwsl_wsi_info(wsi, "draining ext"); if (lwsi_role_client(wsi)) m = lws_ws_client_rx_sm(wsi, 0); else m = lws_ws_rx_sm(wsi, 0, 0); if (m < 0) return -1; continue; } #endif /* * caller will account for buflist usage by studying what * happened to *buf */ if (lws_ws_client_rx_sm(wsi, *(*buf)++)) { lwsl_wsi_info(wsi, "client_rx_sm exited, DROPPING %d", (int)len); return -1; } len--; } // lwsl_wsi_notice(wsi, "finished with %ld", (long)len); return 0; } #endif char * lws_generate_client_ws_handshake(struct lws *wsi, char *p, const char *conn1) { char buf[128], hash[20], key_b64[40]; int n; #if !defined(LWS_WITHOUT_EXTENSIONS) const struct lws_extension *ext; int ext_count = 0; #endif /* * create the random key */ if (lws_get_random(wsi->a.context, hash, 16) != 16) { lwsl_wsi_err(wsi, "Unable to read from random dev %s", SYSTEM_RANDOM_FILEPATH); return NULL; } /* coverity[tainted_scalar] */ lws_b64_encode_string(hash, 16, key_b64, sizeof(key_b64)); p += sprintf(p, "Upgrade: websocket\x0d\x0a" "Connection: %sUpgrade\x0d\x0a" "Sec-WebSocket-Key: ", conn1); strcpy(p, key_b64); p += strlen(key_b64); p += sprintf(p, "\x0d\x0a"); if (lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_SENT_PROTOCOLS)) p += sprintf(p, "Sec-WebSocket-Protocol: %s\x0d\x0a", lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_SENT_PROTOCOLS)); /* tell the server what extensions we could support */ #if !defined(LWS_WITHOUT_EXTENSIONS) ext = wsi->a.vhost->ws.extensions; while (ext && ext->callback) { n = wsi->a.vhost->protocols[0].callback(wsi, LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED, wsi->user_space, (char *)ext->name, 0); /* * zero return from callback means go ahead and allow * the extension, it's what we get if the callback is * unhandled */ if (n) { ext++; continue; } /* apply it */ if (ext_count) *p++ = ','; else p += sprintf(p, "Sec-WebSocket-Extensions: "); p += sprintf(p, "%s", ext->client_offer); ext_count++; ext++; } if (ext_count) p += sprintf(p, "\x0d\x0a"); #endif if (wsi->ws->ietf_spec_revision) p += sprintf(p, "Sec-WebSocket-Version: %d\x0d\x0a", wsi->ws->ietf_spec_revision); /* prepare the expected server accept response */ key_b64[39] = '\0'; /* enforce composed length below buf sizeof */ n = sprintf(buf, "%s258EAFA5-E914-47DA-95CA-C5AB0DC85B11", key_b64); lws_SHA1((unsigned char *)buf, (unsigned int)n, (unsigned char *)hash); lws_b64_encode_string(hash, 20, wsi->http.ah->initial_handshake_hash_base64, sizeof(wsi->http.ah->initial_handshake_hash_base64)); return p; } int lws_client_ws_upgrade(struct lws *wsi, const char **cce) { struct lws_context *context = wsi->a.context; struct lws_tokenize ts; int n, len, okay = 0; lws_tokenize_elem e; char *p, buf[64]; const char *pc; #if !defined(LWS_WITHOUT_EXTENSIONS) struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; char *sb = (char *)&pt->serv_buf[0]; const struct lws_ext_options *opts; const struct lws_extension *ext; char ext_name[128]; const char *c, *a; int more = 1; char ignore; #endif if (wsi->client_mux_substream) {/* !!! client ws-over-h2 not there yet */ lwsl_wsi_warn(wsi, "client ws-over-h2 upgrade not supported yet"); *cce = "HS: h2 / ws upgrade unsupported"; goto bail3; } if (wsi->http.ah->http_response == 401) { lwsl_wsi_warn(wsi, "got bad HTTP response '%d'", wsi->http.ah->http_response); *cce = "HS: ws upgrade unauthorized"; goto bail3; } if (wsi->http.ah->http_response != 101) { lwsl_wsi_warn(wsi, "got bad HTTP response '%d'", wsi->http.ah->http_response); *cce = "HS: ws upgrade response not 101"; goto bail3; } if (lws_hdr_total_length(wsi, WSI_TOKEN_ACCEPT) == 0) { lwsl_wsi_info(wsi, "no ACCEPT"); *cce = "HS: ACCEPT missing"; goto bail3; } p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_UPGRADE); if (!p) { lwsl_wsi_info(wsi, "no UPGRADE"); *cce = "HS: UPGRADE missing"; goto bail3; } strtolower(p); if (strcmp(p, "websocket")) { lwsl_wsi_warn(wsi, "got bad Upgrade header '%s'", p); *cce = "HS: Upgrade to something other than websocket"; goto bail3; } /* connection: must have "upgrade" */ lws_tokenize_init(&ts, buf, LWS_TOKENIZE_F_COMMA_SEP_LIST | LWS_TOKENIZE_F_MINUS_NONTERM); n = lws_hdr_copy(wsi, buf, sizeof(buf) - 1, WSI_TOKEN_CONNECTION); if (n <= 0) /* won't fit, or absent */ goto bad_conn_format; ts.len = (unsigned int)n; do { e = lws_tokenize(&ts); switch (e) { case LWS_TOKZE_TOKEN: if (!strncasecmp(ts.token, "upgrade", ts.token_len)) e = LWS_TOKZE_ENDED; break; case LWS_TOKZE_DELIMITER: break; default: /* includes ENDED found by the tokenizer itself */ bad_conn_format: lwsl_wsi_info(wsi, "malformed connection '%s'", buf); *cce = "HS: UPGRADE malformed"; goto bail3; } } while (e > 0); pc = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_SENT_PROTOCOLS); #if defined(_DEBUG) if (!pc) lwsl_wsi_parser(wsi, "lws_client_int_s_hs: no protocol list"); else lwsl_wsi_parser(wsi, "lws_client_int_s_hs: protocol list '%s'", pc); #endif /* * confirm the protocol the server wants to talk was in the list * of protocols we offered */ len = lws_hdr_total_length(wsi, WSI_TOKEN_PROTOCOL); if (!len) { lwsl_wsi_info(wsi, "WSI_TOKEN_PROTOCOL is null"); /* * no protocol name to work from, if we don't already have one * default to first protocol */ if (wsi->a.protocol) { p = (char *)wsi->a.protocol->name; goto identify_protocol; } /* no choice but to use the default protocol */ n = 0; wsi->a.protocol = &wsi->a.vhost->protocols[0]; goto check_extensions; } p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_PROTOCOL); len = (int)strlen(p); while (pc && *pc && !okay) { if (!strncmp(pc, p, (unsigned int)len) && (pc[len] == ',' || pc[len] == '\0')) { okay = 1; continue; } while (*pc && *pc++ != ',') ; while (*pc == ' ') pc++; } if (!okay) { lwsl_wsi_info(wsi, "got bad protocol %s", p); *cce = "HS: PROTOCOL malformed"; goto bail2; } identify_protocol: #if defined(LWS_WITH_HTTP_PROXY) lws_strncpy(wsi->ws->actual_protocol, p, sizeof(wsi->ws->actual_protocol)); #endif /* * identify the selected protocol struct and set it */ n = 0; /* keep client connection pre-bound protocol */ if (!lwsi_role_client(wsi)) wsi->a.protocol = NULL; while (n < wsi->a.vhost->count_protocols) { if (!wsi->a.protocol && strcmp(p, wsi->a.vhost->protocols[n].name) == 0) { wsi->a.protocol = &wsi->a.vhost->protocols[n]; break; } n++; } if (n == wsi->a.vhost->count_protocols) { /* no match */ /* if server, that's already fatal */ if (!lwsi_role_client(wsi)) { lwsl_wsi_info(wsi, "fail protocol %s", p); *cce = "HS: Cannot match protocol"; goto bail2; } /* for client, find the index of our pre-bound protocol */ n = 0; while (wsi->a.vhost->protocols[n].callback) { if (wsi->a.protocol && strcmp(wsi->a.protocol->name, wsi->a.vhost->protocols[n].name) == 0) { wsi->a.protocol = &wsi->a.vhost->protocols[n]; break; } n++; } if (!wsi->a.vhost->protocols[n].callback) { if (wsi->a.protocol) lwsl_wsi_err(wsi, "Failed to match protocol %s", wsi->a.protocol->name); else lwsl_wsi_err(wsi, "No protocol on client"); *cce = "ws protocol no match"; goto bail2; } } lwsl_wsi_debug(wsi, "Selected protocol %s", wsi->a.protocol ? wsi->a.protocol->name : "no pcol"); check_extensions: /* * stitch protocol choice into the vh protocol linked list * We always insert ourselves at the start of the list * * X <-> B * X <-> pAn <-> pB */ lws_same_vh_protocol_insert(wsi, n); #if !defined(LWS_WITHOUT_EXTENSIONS) /* instantiate the accepted extensions */ if (!lws_hdr_total_length(wsi, WSI_TOKEN_EXTENSIONS)) { lwsl_wsi_ext(wsi, "no client extensions allowed by server"); goto check_accept; } /* * break down the list of server accepted extensions * and go through matching them or identifying bogons */ if (lws_hdr_copy(wsi, sb, (int)context->pt_serv_buf_size, WSI_TOKEN_EXTENSIONS) < 0) { lwsl_wsi_warn(wsi, "ext list from server failed to copy"); *cce = "HS: EXT: list too big"; goto bail2; } c = sb; n = 0; ignore = 0; a = NULL; while (more) { if (*c && (*c != ',' && *c != '\t')) { if (*c == ';') { ignore = 1; if (!a) a = c + 1; } if (ignore || *c == ' ') { c++; continue; } ext_name[n] = *c++; if (n < (int)sizeof(ext_name) - 1) n++; continue; } ext_name[n] = '\0'; ignore = 0; if (!*c) more = 0; else { c++; if (!n) continue; } /* check we actually support it */ lwsl_wsi_notice(wsi, "checking client ext %s", ext_name); n = 0; ext = wsi->a.vhost->ws.extensions; while (ext && ext->callback) { if (strcmp(ext_name, ext->name)) { ext++; continue; } n = 1; lwsl_wsi_notice(wsi, "instantiating client ext %s", ext_name); /* instantiate the extension on this conn */ wsi->ws->active_extensions[wsi->ws->count_act_ext] = ext; /* allow him to construct his ext instance */ if (ext->callback(lws_get_context(wsi), ext, wsi, LWS_EXT_CB_CLIENT_CONSTRUCT, (void *)&wsi->ws->act_ext_user[ wsi->ws->count_act_ext], (void *)&opts, 0)) { lwsl_wsi_info(wsi, " ext %s failed construction", ext_name); ext++; continue; } /* * allow the user code to override ext defaults if it * wants to */ ext_name[0] = '\0'; if (user_callback_handle_rxflow(wsi->a.protocol->callback, wsi, LWS_CALLBACK_WS_EXT_DEFAULTS, (char *)ext->name, ext_name, sizeof(ext_name))) { *cce = "HS: EXT: failed setting defaults"; goto bail2; } if (ext_name[0] && lws_ext_parse_options(ext, wsi, wsi->ws->act_ext_user[ wsi->ws->count_act_ext], opts, ext_name, (int)strlen(ext_name))) { lwsl_wsi_err(wsi, "unable to parse user defaults '%s'", ext_name); *cce = "HS: EXT: failed parsing defaults"; goto bail2; } /* * give the extension the server options */ if (a && lws_ext_parse_options(ext, wsi, wsi->ws->act_ext_user[ wsi->ws->count_act_ext], opts, a, lws_ptr_diff(c, a))) { lwsl_wsi_err(wsi, "unable to parse remote def '%s'", a); *cce = "HS: EXT: failed parsing options"; goto bail2; } if (ext->callback(lws_get_context(wsi), ext, wsi, LWS_EXT_CB_OPTION_CONFIRM, wsi->ws->act_ext_user[wsi->ws->count_act_ext], NULL, 0)) { lwsl_wsi_err(wsi, "ext %s rejects server options %s", ext->name, a); *cce = "HS: EXT: Rejects server options"; goto bail2; } wsi->ws->count_act_ext++; ext++; } if (n == 0) { lwsl_wsi_warn(wsi, "Unknown ext '%s'!", ext_name); *cce = "HS: EXT: unknown ext"; goto bail2; } a = NULL; n = 0; } check_accept: #endif /* * Confirm his accept token is the one we precomputed */ p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_ACCEPT); if (strcmp(p, wsi->http.ah->initial_handshake_hash_base64)) { lwsl_wsi_warn(wsi, "lws_client_int_s_hs: accept '%s' wrong vs '%s'", p, wsi->http.ah->initial_handshake_hash_base64); *cce = "HS: Accept hash wrong"; goto bail2; } /* allocate the per-connection user memory (if any) */ if (lws_ensure_user_space(wsi)) { lwsl_wsi_err(wsi, "Problem allocating wsi user mem"); *cce = "HS: OOM"; goto bail2; } /* * we seem to be good to go, give client last chance to check * headers and OK it */ if (wsi->a.protocol->callback(wsi, LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH, wsi->user_space, NULL, 0)) { *cce = "HS: Rejected by filter cb"; goto bail2; } /* clear his proxy connection timeout */ lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); /* free up his parsing allocations */ lws_header_table_detach(wsi, 0); lws_role_transition(wsi, LWSIFR_CLIENT, LRS_ESTABLISHED, &role_ops_ws); lws_validity_confirmed(wsi); wsi->rxflow_change_to = LWS_RXFLOW_ALLOW; /* * create the frame buffer for this connection according to the * size mentioned in the protocol definition. If 0 there, then * use a big default for compatibility */ n = (int)wsi->a.protocol->rx_buffer_size; if (!n) n = (int)context->pt_serv_buf_size; n += LWS_PRE; wsi->ws->rx_ubuf = lws_malloc((unsigned int)n + 4 /* 0x0000ffff zlib */, "client frame buffer"); if (!wsi->ws->rx_ubuf) { lwsl_wsi_err(wsi, "OOM allocating rx buffer %d", n); *cce = "HS: OOM"; goto bail2; } wsi->ws->rx_ubuf_alloc = (unsigned int)n; lwsl_wsi_debug(wsi, "handshake OK for protocol %s", wsi->a.protocol->name); /* call him back to inform him he is up */ if (wsi->a.protocol->callback(wsi, LWS_CALLBACK_CLIENT_ESTABLISHED, wsi->user_space, NULL, 0)) { *cce = "HS: Rejected at CLIENT_ESTABLISHED"; goto bail3; } return 0; bail3: return 3; bail2: return 2; } libwebsockets-4.3.5/lib/roles/ws/ext/000077500000000000000000000000001476025525100175155ustar00rootroot00000000000000libwebsockets-4.3.5/lib/roles/ws/ext/extension-permessage-deflate.c000066400000000000000000000367261476025525100254460ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "extension-permessage-deflate.h" #include #include #include #define LWS_ZLIB_MEMLEVEL 8 const struct lws_ext_options lws_ext_pm_deflate_options[] = { /* public RFC7692 settings */ { "server_no_context_takeover", EXTARG_NONE }, { "client_no_context_takeover", EXTARG_NONE }, { "server_max_window_bits", EXTARG_OPT_DEC }, { "client_max_window_bits", EXTARG_OPT_DEC }, /* ones only user code can set */ { "rx_buf_size", EXTARG_DEC }, { "tx_buf_size", EXTARG_DEC }, { "compression_level", EXTARG_DEC }, { "mem_level", EXTARG_DEC }, { NULL, 0 }, /* sentinel */ }; static void lws_extension_pmdeflate_restrict_args(struct lws *wsi, struct lws_ext_pm_deflate_priv *priv) { int n, extra; /* cap the RX buf at the nearest power of 2 to protocol rx buf */ n = (int)wsi->a.context->pt_serv_buf_size; if (wsi->a.protocol->rx_buffer_size) n = (int)wsi->a.protocol->rx_buffer_size; extra = 7; while (n >= 1 << (extra + 1)) extra++; if (extra < priv->args[PMD_RX_BUF_PWR2]) { priv->args[PMD_RX_BUF_PWR2] = (unsigned char)extra; lwsl_wsi_info(wsi, " Capping pmd rx to %d", 1 << extra); } } static unsigned char trail[] = { 0, 0, 0xff, 0xff }; LWS_VISIBLE int lws_extension_callback_pm_deflate(struct lws_context *context, const struct lws_extension *ext, struct lws *wsi, enum lws_extension_callback_reasons reason, void *user, void *in, size_t len) { struct lws_ext_pm_deflate_priv *priv = (struct lws_ext_pm_deflate_priv *)user; struct lws_ext_pm_deflate_rx_ebufs *pmdrx = (struct lws_ext_pm_deflate_rx_ebufs *)in; struct lws_ext_option_arg *oa; int n, ret = 0, was_fin = 0, m; unsigned int pen = 0; int penbits = 0; switch (reason) { case LWS_EXT_CB_NAMED_OPTION_SET: oa = in; if (!oa->option_name) break; lwsl_wsi_ext(wsi, "named option set: %s", oa->option_name); for (n = 0; n < (int)LWS_ARRAY_SIZE(lws_ext_pm_deflate_options); n++) if (!strcmp(lws_ext_pm_deflate_options[n].name, oa->option_name)) break; if (n == (int)LWS_ARRAY_SIZE(lws_ext_pm_deflate_options)) break; oa->option_index = n; /* fallthru */ case LWS_EXT_CB_OPTION_SET: oa = in; lwsl_wsi_ext(wsi, "option set: idx %d, %s, len %d", oa->option_index, oa->start, oa->len); if (oa->start) priv->args[oa->option_index] = (unsigned char)atoi(oa->start); else priv->args[oa->option_index] = 1; if (priv->args[PMD_CLIENT_MAX_WINDOW_BITS] == 8) priv->args[PMD_CLIENT_MAX_WINDOW_BITS] = 9; lws_extension_pmdeflate_restrict_args(wsi, priv); break; case LWS_EXT_CB_OPTION_CONFIRM: if (priv->args[PMD_SERVER_MAX_WINDOW_BITS] < 8 || priv->args[PMD_SERVER_MAX_WINDOW_BITS] > 15 || priv->args[PMD_CLIENT_MAX_WINDOW_BITS] < 8 || priv->args[PMD_CLIENT_MAX_WINDOW_BITS] > 15) return -1; break; case LWS_EXT_CB_CLIENT_CONSTRUCT: case LWS_EXT_CB_CONSTRUCT: n = (int)context->pt_serv_buf_size; if (wsi->a.protocol->rx_buffer_size) n = (int)wsi->a.protocol->rx_buffer_size; if (n < 128) { lwsl_wsi_info(wsi, " permessage-deflate requires the protocol " "(%s) to have an RX buffer >= 128", wsi->a.protocol->name); return -1; } /* fill in **user */ priv = lws_zalloc(sizeof(*priv), "pmd priv"); *((void **)user) = priv; lwsl_wsi_ext(wsi, "LWS_EXT_CB_*CONSTRUCT"); memset(priv, 0, sizeof(*priv)); /* fill in pointer to options list */ if (in) *((const struct lws_ext_options **)in) = lws_ext_pm_deflate_options; /* fallthru */ case LWS_EXT_CB_OPTION_DEFAULT: /* set the public, RFC7692 defaults... */ priv->args[PMD_SERVER_NO_CONTEXT_TAKEOVER] = 0, priv->args[PMD_CLIENT_NO_CONTEXT_TAKEOVER] = 0; priv->args[PMD_SERVER_MAX_WINDOW_BITS] = 15; priv->args[PMD_CLIENT_MAX_WINDOW_BITS] = 15; /* ...and the ones the user code can override */ priv->args[PMD_RX_BUF_PWR2] = 10; /* ie, 1024 */ priv->args[PMD_TX_BUF_PWR2] = 10; /* ie, 1024 */ priv->args[PMD_COMP_LEVEL] = 1; priv->args[PMD_MEM_LEVEL] = 8; lws_extension_pmdeflate_restrict_args(wsi, priv); break; case LWS_EXT_CB_DESTROY: lwsl_wsi_ext(wsi, "LWS_EXT_CB_DESTROY"); lws_free(priv->buf_rx_inflated); lws_free(priv->buf_tx_deflated); if (priv->rx_init) (void)inflateEnd(&priv->rx); if (priv->tx_init) (void)deflateEnd(&priv->tx); lws_free(priv); return ret; case LWS_EXT_CB_PAYLOAD_RX: /* * ie, we are INFLATING */ lwsl_wsi_ext(wsi, " LWS_EXT_CB_PAYLOAD_RX: in %d, existing in %d", pmdrx->eb_in.len, priv->rx.avail_in); /* * If this frame is not marked as compressed, * there is nothing we should do with it */ if (!(wsi->ws->rsv_first_msg & 0x40) || (wsi->ws->opcode & 8)) /* * This is a bit different than DID_NOTHING... we have * identified using ext-private bits in the packet, or * by it being a control fragment that we SHOULD not do * anything to it, parent should continue as if we * processed it */ return PMDR_NOTHING_WE_SHOULD_DO; /* * we shouldn't come back in here if we already applied the * trailer for this compressed packet */ if (!wsi->ws->pmd_trailer_application) return PMDR_DID_NOTHING; pmdrx->eb_out.len = 0; lwsl_wsi_ext(wsi, "LWS_EXT_CB_PAYLOAD_RX: in %d, " "existing avail in %d, pkt fin: %d", pmdrx->eb_in.len, priv->rx.avail_in, wsi->ws->final); /* if needed, initialize the inflator */ if (!priv->rx_init) { if (inflateInit2(&priv->rx, -priv->args[PMD_SERVER_MAX_WINDOW_BITS]) != Z_OK) { lwsl_wsi_err(wsi, "iniflateInit failed"); return PMDR_FAILED; } priv->rx_init = 1; if (!priv->buf_rx_inflated) priv->buf_rx_inflated = lws_malloc( (unsigned int)(LWS_PRE + 7 + 5 + (1 << priv->args[PMD_RX_BUF_PWR2])), "pmd rx inflate buf"); if (!priv->buf_rx_inflated) { lwsl_wsi_err(wsi, "OOM"); return PMDR_FAILED; } } #if 0 /* * don't give us new input while we still work through * the last input */ if (priv->rx.avail_in && pmdrx->eb_in.token && pmdrx->eb_in.len) { lwsl_wsi_warn(wsi, "priv->rx.avail_in %d while getting new in", priv->rx.avail_in); // assert(0); } #endif if (!priv->rx.avail_in && pmdrx->eb_in.token && pmdrx->eb_in.len) { priv->rx.next_in = (unsigned char *)pmdrx->eb_in.token; priv->rx.avail_in = (uInt)pmdrx->eb_in.len; } priv->rx.next_out = priv->buf_rx_inflated + LWS_PRE; pmdrx->eb_out.token = priv->rx.next_out; priv->rx.avail_out = (uInt)(1 << priv->args[PMD_RX_BUF_PWR2]); /* so... if... * * - he has no remaining input content for this message, and * * - and this is the final fragment, and * * - we used everything that could be drained on the input side * * ...then put back the 00 00 FF FF the sender stripped as our * input to zlib */ if (!priv->rx.avail_in && wsi->ws->final && !wsi->ws->rx_packet_length && wsi->ws->pmd_trailer_application) { lwsl_wsi_ext(wsi, "trailer apply 1"); was_fin = 1; wsi->ws->pmd_trailer_application = 0; priv->rx.next_in = trail; priv->rx.avail_in = sizeof(trail); } /* * if after all that there's nothing pending and nothing to give * him right now, bail without having done anything */ if (!priv->rx.avail_in) return PMDR_DID_NOTHING; n = inflate(&priv->rx, was_fin ? Z_SYNC_FLUSH : Z_NO_FLUSH); lwsl_wsi_ext(wsi, "inflate ret %d, avi %d, avo %d, wsifinal %d", n, priv->rx.avail_in, priv->rx.avail_out, wsi->ws->final); switch (n) { case Z_NEED_DICT: case Z_STREAM_ERROR: case Z_DATA_ERROR: case Z_MEM_ERROR: lwsl_wsi_err(wsi, "zlib error inflate %d: \"%s\"", n, priv->rx.msg); return PMDR_FAILED; } /* * track how much input was used, and advance it */ pmdrx->eb_in.token = pmdrx->eb_in.token + ((unsigned int)pmdrx->eb_in.len - (unsigned int)priv->rx.avail_in); pmdrx->eb_in.len = (int)priv->rx.avail_in; lwsl_wsi_debug(wsi, "%d %d %d %d %d", priv->rx.avail_in, wsi->ws->final, (int)wsi->ws->rx_packet_length, was_fin, wsi->ws->pmd_trailer_application); if (!priv->rx.avail_in && wsi->ws->final && !wsi->ws->rx_packet_length && !was_fin && wsi->ws->pmd_trailer_application) { lwsl_wsi_ext(wsi, "RX trailer apply 2"); /* we overallocated just for this situation where * we might issue something */ priv->rx.avail_out += 5; was_fin = 1; wsi->ws->pmd_trailer_application = 0; priv->rx.next_in = trail; priv->rx.avail_in = sizeof(trail); n = inflate(&priv->rx, Z_SYNC_FLUSH); lwsl_wsi_ext(wsi, "RX trailer infl ret %d, avi %d, avo %d", n, priv->rx.avail_in, priv->rx.avail_out); switch (n) { case Z_NEED_DICT: case Z_STREAM_ERROR: case Z_DATA_ERROR: case Z_MEM_ERROR: lwsl_wsi_info(wsi, "zlib error inflate %d: %s", n, priv->rx.msg); return -1; } assert(priv->rx.avail_out); } pmdrx->eb_out.len = lws_ptr_diff(priv->rx.next_out, pmdrx->eb_out.token); priv->count_rx_between_fin = priv->count_rx_between_fin + (size_t)pmdrx->eb_out.len; lwsl_wsi_ext(wsi, " RX leaving with new effbuff len %d, " "rx.avail_in=%d, TOTAL RX since FIN %lu", pmdrx->eb_out.len, priv->rx.avail_in, (unsigned long)priv->count_rx_between_fin); if (was_fin) { lwsl_wsi_ext(wsi, "was_fin"); priv->count_rx_between_fin = 0; if (priv->args[PMD_SERVER_NO_CONTEXT_TAKEOVER]) { lwsl_wsi_ext(wsi, "PMD_SERVER_NO_CONTEXT_TAKEOVER"); (void)inflateEnd(&priv->rx); priv->rx_init = 0; } return PMDR_EMPTY_FINAL; } if (priv->rx.avail_in) return PMDR_HAS_PENDING; return PMDR_EMPTY_NONFINAL; case LWS_EXT_CB_PAYLOAD_TX: /* * ie, we are DEFLATING * * initialize us if needed */ if (!priv->tx_init) { n = deflateInit2(&priv->tx, priv->args[PMD_COMP_LEVEL], Z_DEFLATED, -priv->args[PMD_SERVER_MAX_WINDOW_BITS + (wsi->a.vhost->listen_port <= 0)], priv->args[PMD_MEM_LEVEL], Z_DEFAULT_STRATEGY); if (n != Z_OK) { lwsl_wsi_ext(wsi, "inflateInit2 failed %d", n); return PMDR_FAILED; } priv->tx_init = 1; } if (!priv->buf_tx_deflated) priv->buf_tx_deflated = lws_malloc((unsigned int)(LWS_PRE + 7 + 5 + (1 << priv->args[PMD_TX_BUF_PWR2])), "pmd tx deflate buf"); if (!priv->buf_tx_deflated) { lwsl_wsi_err(wsi, "OOM"); return PMDR_FAILED; } /* hook us up with any deflated input that the caller has */ if (pmdrx->eb_in.token) { assert(!priv->tx.avail_in); priv->count_tx_between_fin = priv->count_tx_between_fin + (size_t)pmdrx->eb_in.len; lwsl_wsi_ext(wsi, "TX: eb_in length %d, " "TOTAL TX since FIN: %d", pmdrx->eb_in.len, (int)priv->count_tx_between_fin); priv->tx.next_in = (unsigned char *)pmdrx->eb_in.token; priv->tx.avail_in = (uInt)pmdrx->eb_in.len; } priv->tx.next_out = priv->buf_tx_deflated + LWS_PRE + 5; pmdrx->eb_out.token = priv->tx.next_out; priv->tx.avail_out = (uInt)(1 << priv->args[PMD_TX_BUF_PWR2]); pen = 0; penbits = 0; deflatePending(&priv->tx, &pen, &penbits); pen = pen | (unsigned int)penbits; if (!priv->tx.avail_in && (len & LWS_WRITE_NO_FIN)) { lwsl_wsi_ext(wsi, "no available in, pen: %u", pen); if (!pen) return PMDR_DID_NOTHING; } m = Z_NO_FLUSH; if (!(len & LWS_WRITE_NO_FIN)) { lwsl_wsi_ext(wsi, "deflate with SYNC_FLUSH, pkt len %d", (int)wsi->ws->rx_packet_length); m = Z_SYNC_FLUSH; } n = deflate(&priv->tx, m); if (n == Z_STREAM_ERROR) { lwsl_wsi_notice(wsi, "Z_STREAM_ERROR"); return PMDR_FAILED; } pen = (!priv->tx.avail_out) && n != Z_STREAM_END; lwsl_wsi_ext(wsi, "deflate ret %d, len 0x%x", n, (unsigned int)len); if ((len & 0xf) == LWS_WRITE_TEXT) priv->tx_first_frame_type = LWSWSOPC_TEXT_FRAME; if ((len & 0xf) == LWS_WRITE_BINARY) priv->tx_first_frame_type = LWSWSOPC_BINARY_FRAME; pmdrx->eb_out.len = lws_ptr_diff(priv->tx.next_out, pmdrx->eb_out.token); if (m == Z_SYNC_FLUSH && !(len & LWS_WRITE_NO_FIN) && !pen && pmdrx->eb_out.len < 4) { lwsl_wsi_err(wsi, "FAIL want to trim out length %d", (int)pmdrx->eb_out.len); assert(0); } if (!(len & LWS_WRITE_NO_FIN) && m == Z_SYNC_FLUSH && !pen && pmdrx->eb_out.len >= 4) { // lwsl_wsi_err(wsi, "Trimming 4 from end of write"); priv->tx.next_out -= 4; priv->tx.avail_out += 4; priv->count_tx_between_fin = 0; assert(priv->tx.next_out[0] == 0x00 && priv->tx.next_out[1] == 0x00 && priv->tx.next_out[2] == 0xff && priv->tx.next_out[3] == 0xff); } /* * track how much input was used and advance it */ pmdrx->eb_in.token = pmdrx->eb_in.token + ((unsigned int)pmdrx->eb_in.len - (unsigned int)priv->tx.avail_in); pmdrx->eb_in.len = (int)priv->tx.avail_in; priv->compressed_out = 1; pmdrx->eb_out.len = lws_ptr_diff(priv->tx.next_out, pmdrx->eb_out.token); lwsl_wsi_ext(wsi, " TX rewritten with new eb_in len %d, " "eb_out len %d, deflatePending %d", pmdrx->eb_in.len, pmdrx->eb_out.len, pen); if (pmdrx->eb_in.len || pen) return PMDR_HAS_PENDING; if (!(len & LWS_WRITE_NO_FIN)) return PMDR_EMPTY_FINAL; return PMDR_EMPTY_NONFINAL; case LWS_EXT_CB_PACKET_TX_PRESEND: if (!priv->compressed_out) break; priv->compressed_out = 0; /* * we may have not produced any output for the actual "first" * write... in that case, we need to fix up the inappropriate * use of CONTINUATION when the first real write does come. */ if (priv->tx_first_frame_type & 0xf) { *pmdrx->eb_in.token = (unsigned char)((((unsigned char)*pmdrx->eb_in.token) & (unsigned char)~0xf) | ((unsigned char)priv->tx_first_frame_type & (unsigned char)0xf)); /* * We have now written the "first" fragment, only * do that once */ priv->tx_first_frame_type = 0; } n = *(pmdrx->eb_in.token) & 15; /* set RSV1, but not on CONTINUATION */ if (n == LWSWSOPC_TEXT_FRAME || n == LWSWSOPC_BINARY_FRAME) *pmdrx->eb_in.token |= 0x40; lwsl_wsi_ext(wsi, "PRESEND compressed: ws frame 0x%02X, len %d", ((*pmdrx->eb_in.token) & 0xff), pmdrx->eb_in.len); if (((*pmdrx->eb_in.token) & 0x80) && /* fin */ priv->args[PMD_CLIENT_NO_CONTEXT_TAKEOVER]) { lwsl_wsi_debug(wsi, "PMD_CLIENT_NO_CONTEXT_TAKEOVER"); (void)deflateEnd(&priv->tx); priv->tx_init = 0; } break; default: break; } return 0; } libwebsockets-4.3.5/lib/roles/ws/ext/extension-permessage-deflate.h000066400000000000000000000041201476025525100254320ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #if defined(LWS_WITH_MINIZ) #include #else #include #endif #define DEFLATE_FRAME_COMPRESSION_LEVEL_SERVER 1 #define DEFLATE_FRAME_COMPRESSION_LEVEL_CLIENT Z_DEFAULT_COMPRESSION enum arg_indexes { PMD_SERVER_NO_CONTEXT_TAKEOVER, PMD_CLIENT_NO_CONTEXT_TAKEOVER, PMD_SERVER_MAX_WINDOW_BITS, PMD_CLIENT_MAX_WINDOW_BITS, PMD_RX_BUF_PWR2, PMD_TX_BUF_PWR2, PMD_COMP_LEVEL, PMD_MEM_LEVEL, PMD_ARG_COUNT }; struct lws_ext_pm_deflate_priv { z_stream rx; z_stream tx; unsigned char *buf_rx_inflated; /* RX inflated output buffer */ unsigned char *buf_tx_deflated; /* TX deflated output buffer */ unsigned char *buf_tx_holding; size_t count_rx_between_fin; size_t count_tx_between_fin; size_t len_tx_holding; unsigned char args[PMD_ARG_COUNT]; unsigned char tx_first_frame_type; unsigned char tx_init:1; unsigned char rx_init:1; unsigned char compressed_out:1; }; libwebsockets-4.3.5/lib/roles/ws/ext/extension.c000066400000000000000000000211101476025525100216700ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "extension-permessage-deflate.h" void lws_context_init_extensions(const struct lws_context_creation_info *info, struct lws_context *context) { lwsl_cx_info(context, " LWS_MAX_EXTENSIONS_ACTIVE: %u", LWS_MAX_EXTENSIONS_ACTIVE); } enum lws_ext_option_parser_states { LEAPS_SEEK_NAME, LEAPS_EAT_NAME, LEAPS_SEEK_VAL, LEAPS_EAT_DEC, LEAPS_SEEK_ARG_TERM }; int lws_ext_parse_options(const struct lws_extension *ext, struct lws *wsi, void *ext_user, const struct lws_ext_options *opts, const char *in, int len) { enum lws_ext_option_parser_states leap = LEAPS_SEEK_NAME; unsigned int match_map = 0, n, m, w = 0, count_options = 0, pending_close_quote = 0; struct lws_ext_option_arg oa; oa.option_name = NULL; while (opts[count_options].name) count_options++; while (len) { lwsl_wsi_ext(wsi, "'%c' %d", *in, leap); switch (leap) { case LEAPS_SEEK_NAME: if (*in == ' ') break; if (*in == ',') { len = 1; break; } match_map = (unsigned int)(1 << count_options) - 1; leap = LEAPS_EAT_NAME; w = 0; /* fallthru */ case LEAPS_EAT_NAME: oa.start = NULL; oa.len = 0; m = match_map; n = 0; pending_close_quote = 0; while (m) { if (!(m & 1)) { m >>= 1; n++; continue; } lwsl_wsi_ext(wsi, " m=%d, n=%d, w=%d", m, n, w); if (*in == opts[n].name[w]) { if (!opts[n].name[w + 1]) { oa.option_index = (int)n; lwsl_wsi_ext(wsi, "hit %d", oa.option_index); leap = LEAPS_SEEK_VAL; if (len == 1) goto set_arg; break; } } else { match_map &= (unsigned int)~(1 << n); if (!match_map) { lwsl_wsi_ext(wsi, "empty match map"); return -1; } } m >>= 1; n++; } w++; break; case LEAPS_SEEK_VAL: if (*in == ' ') break; if (*in == ',') { len = 1; break; } if (*in == ';' || len == 1) { /* ie,nonoptional */ if (opts[oa.option_index].type == EXTARG_DEC) return -1; leap = LEAPS_SEEK_NAME; goto set_arg; } if (*in == '=') { w = 0; pending_close_quote = 0; if (opts[oa.option_index].type == EXTARG_NONE) return -1; leap = LEAPS_EAT_DEC; break; } return -1; case LEAPS_EAT_DEC: if (*in >= '0' && *in <= '9') { if (!w) oa.start = in; w++; if (len != 1) break; } if (!w && *in =='"') { pending_close_quote = 1; break; } if (!w) return -1; if (pending_close_quote && *in != '"' && len != 1) return -1; leap = LEAPS_SEEK_ARG_TERM; if (oa.start) oa.len = lws_ptr_diff(in, oa.start); if (len == 1) oa.len++; set_arg: ext->callback(lws_get_context(wsi), ext, wsi, LWS_EXT_CB_OPTION_SET, ext_user, (char *)&oa, 0); if (len == 1) break; if (pending_close_quote && *in == '"') break; /* fallthru */ case LEAPS_SEEK_ARG_TERM: if (*in == ' ') break; if (*in == ';') { leap = LEAPS_SEEK_NAME; break; } if (*in == ',') { len = 1; break; } return -1; } len--; in++; } return 0; } /* 0 = nobody had nonzero return, 1 = somebody had positive return, -1 = fail */ int lws_ext_cb_active(struct lws *wsi, int reason, void *arg, int len) { int n, m, handled = 0; if (!wsi->ws) return 0; for (n = 0; n < wsi->ws->count_act_ext; n++) { m = wsi->ws->active_extensions[n]->callback( lws_get_context(wsi), wsi->ws->active_extensions[n], wsi, (enum lws_extension_callback_reasons)reason, wsi->ws->act_ext_user[n], arg, (size_t)len); if (m < 0) { lwsl_wsi_ext(wsi, "Ext '%s' failed to handle callback %d!", wsi->ws->active_extensions[n]->name, reason); return -1; } /* valgrind... */ if (reason == LWS_EXT_CB_DESTROY) wsi->ws->act_ext_user[n] = NULL; if (m > handled) handled = m; } return handled; } int lws_ext_cb_all_exts(struct lws_context *context, struct lws *wsi, int reason, void *arg, int len) { int n = 0, m, handled = 0; const struct lws_extension *ext; if (!wsi || !wsi->a.vhost || !wsi->ws) return 0; ext = wsi->a.vhost->ws.extensions; while (ext && ext->callback && !handled) { m = ext->callback(context, ext, wsi, (enum lws_extension_callback_reasons)reason, (void *)(lws_intptr_t)n, arg, (size_t)len); if (m < 0) { lwsl_wsi_ext(wsi, "Ext '%s' failed to handle callback %d!", wsi->ws->active_extensions[n]->name, reason); return -1; } if (m) handled = 1; ext++; n++; } return 0; } int lws_issue_raw_ext_access(struct lws *wsi, unsigned char *buf, size_t len) { struct lws_tokens ebuf; int ret, m, n = 0; ebuf.token = buf; ebuf.len = (int)len; /* * while we have original buf to spill ourselves, or extensions report * more in their pipeline */ ret = 1; while (ret == 1) { /* default to nobody has more to spill */ ret = 0; /* show every extension the new incoming data */ m = lws_ext_cb_active(wsi, LWS_EXT_CB_PACKET_TX_PRESEND, &ebuf, 0); if (m < 0) return -1; if (m) /* handled */ ret = 1; if (buf != ebuf.token) /* * extension recreated it: * need to buffer this if not all sent */ wsi->ws->clean_buffer = 0; /* assuming they left us something to send, send it */ if (ebuf.len) { n = lws_issue_raw(wsi, ebuf.token, (size_t)ebuf.len); if (n < 0) { lwsl_wsi_info(wsi, "closing from ext access"); return -1; } /* always either sent it all or privately buffered */ if (wsi->ws->clean_buffer) len = (size_t)n; lwsl_wsi_ext(wsi, "written %d bytes to client", n); } /* no extension has more to spill? Then we can go */ if (!ret) break; /* we used up what we had */ ebuf.token = NULL; ebuf.len = 0; /* * Did that leave the pipe choked? * Or we had to hold on to some of it? */ if (!lws_send_pipe_choked(wsi) && !lws_has_buffered_out(wsi)) /* no we could add more, lets's do that */ continue; lwsl_wsi_debug(wsi, "choked"); /* * Yes, he's choked. Don't spill the rest now get a callback * when he is ready to send and take care of it there */ lws_callback_on_writable(wsi); wsi->ws->extension_data_pending = 1; ret = 0; } return (int)len; } int lws_any_extension_handled(struct lws *wsi, enum lws_extension_callback_reasons r, void *v, size_t len) { struct lws_context *context = wsi->a.context; int n, handled = 0; if (!wsi->ws) return 0; /* maybe an extension will take care of it for us */ for (n = 0; n < wsi->ws->count_act_ext && !handled; n++) { if (!wsi->ws->active_extensions[n]->callback) continue; handled |= wsi->ws->active_extensions[n]->callback(context, wsi->ws->active_extensions[n], wsi, r, wsi->ws->act_ext_user[n], v, len); } return handled; } int lws_set_extension_option(struct lws *wsi, const char *ext_name, const char *opt_name, const char *opt_val) { struct lws_ext_option_arg oa; int idx = 0; if (!wsi->ws) return 0; /* first identify if the ext is active on this wsi */ while (idx < wsi->ws->count_act_ext && strcmp(wsi->ws->active_extensions[idx]->name, ext_name)) idx++; if (idx == wsi->ws->count_act_ext) return -1; /* request ext not active on this wsi */ oa.option_name = opt_name; oa.option_index = 0; oa.start = opt_val; oa.len = 0; return wsi->ws->active_extensions[idx]->callback(wsi->a.context, wsi->ws->active_extensions[idx], wsi, LWS_EXT_CB_NAMED_OPTION_SET, wsi->ws->act_ext_user[idx], &oa, 0); } libwebsockets-4.3.5/lib/roles/ws/ops-ws.c000066400000000000000000001577671476025525100203400ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include #define LWS_CPYAPP(ptr, str) { strcpy(ptr, str); ptr += strlen(str); } /* * client-parser.c: lws_ws_client_rx_sm() needs to be roughly kept in * sync with changes here, esp related to ext draining */ int lws_ws_rx_sm(struct lws *wsi, char already_processed, unsigned char c) { int callback_action = LWS_CALLBACK_RECEIVE; struct lws_ext_pm_deflate_rx_ebufs pmdrx; unsigned short close_code; unsigned char *pp; int ret = 0; int n = 0; #if !defined(LWS_WITHOUT_EXTENSIONS) int rx_draining_ext = 0; int lin; #endif pmdrx.eb_in.token = NULL; pmdrx.eb_in.len = 0; pmdrx.eb_out.token = NULL; pmdrx.eb_out.len = 0; switch (wsi->lws_rx_parse_state) { case LWS_RXPS_NEW: #if !defined(LWS_WITHOUT_EXTENSIONS) if (wsi->ws->rx_draining_ext) { pmdrx.eb_in.token = NULL; pmdrx.eb_in.len = 0; pmdrx.eb_out.token = NULL; pmdrx.eb_out.len = 0; lws_remove_wsi_from_draining_ext_list(wsi); rx_draining_ext = 1; lwsl_debug("%s: doing draining flow\n", __func__); goto drain_extension; } #endif switch (wsi->ws->ietf_spec_revision) { case 13: /* * no prepended frame key any more */ wsi->ws->all_zero_nonce = 1; goto handle_first; default: lwsl_warn("lws_ws_rx_sm: unknown spec version %d\n", wsi->ws->ietf_spec_revision); break; } break; case LWS_RXPS_04_mask_1: wsi->ws->mask[1] = c; if (c) wsi->ws->all_zero_nonce = 0; wsi->lws_rx_parse_state = LWS_RXPS_04_mask_2; break; case LWS_RXPS_04_mask_2: wsi->ws->mask[2] = c; if (c) wsi->ws->all_zero_nonce = 0; wsi->lws_rx_parse_state = LWS_RXPS_04_mask_3; break; case LWS_RXPS_04_mask_3: wsi->ws->mask[3] = c; if (c) wsi->ws->all_zero_nonce = 0; /* * start from the zero'th byte in the XOR key buffer since * this is the start of a frame with a new key */ wsi->ws->mask_idx = 0; wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_1; break; /* * 04 logical framing from the spec (all this is masked when incoming * and has to be unmasked) * * We ignore the possibility of extension data because we don't * negotiate any extensions at the moment. * * 0 1 2 3 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 * +-+-+-+-+-------+-+-------------+-------------------------------+ * |F|R|R|R| opcode|R| Payload len | Extended payload length | * |I|S|S|S| (4) |S| (7) | (16/63) | * |N|V|V|V| |V| | (if payload len==126/127) | * | |1|2|3| |4| | | * +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - + * | Extended payload length continued, if payload len == 127 | * + - - - - - - - - - - - - - - - +-------------------------------+ * | | Extension data | * +-------------------------------+ - - - - - - - - - - - - - - - + * : : * +---------------------------------------------------------------+ * : Application data : * +---------------------------------------------------------------+ * * We pass payload through to userland as soon as we get it, ignoring * FIN. It's up to userland to buffer it up if it wants to see a * whole unfragmented block of the original size (which may be up to * 2^63 long!) */ case LWS_RXPS_04_FRAME_HDR_1: handle_first: wsi->ws->opcode = c & 0xf; wsi->ws->rsv = c & 0x70; wsi->ws->final = !!((c >> 7) & 1); wsi->ws->defeat_check_utf8 = 0; if (((wsi->ws->opcode) & 8) && !wsi->ws->final) { lws_close_reason(wsi, LWS_CLOSE_STATUS_PROTOCOL_ERR, (uint8_t *)"frag ctl", 8); return -1; } switch (wsi->ws->opcode) { case LWSWSOPC_TEXT_FRAME: wsi->ws->check_utf8 = lws_check_opt( wsi->a.context->options, LWS_SERVER_OPTION_VALIDATE_UTF8); /* fallthru */ case LWSWSOPC_BINARY_FRAME: if (wsi->ws->opcode == LWSWSOPC_BINARY_FRAME) wsi->ws->check_utf8 = 0; if (wsi->ws->continuation_possible) { lws_close_reason(wsi, LWS_CLOSE_STATUS_PROTOCOL_ERR, (uint8_t *)"bad cont", 8); return -1; } wsi->ws->rsv_first_msg = (c & 0x70); #if !defined(LWS_WITHOUT_EXTENSIONS) /* * set the expectation that we will have to * fake up the zlib trailer to the inflator for this * frame */ wsi->ws->pmd_trailer_application = !!(c & 0x40); #endif wsi->ws->frame_is_binary = wsi->ws->opcode == LWSWSOPC_BINARY_FRAME; wsi->ws->first_fragment = 1; wsi->ws->continuation_possible = !wsi->ws->final; break; case LWSWSOPC_CONTINUATION: if (!wsi->ws->continuation_possible) { lws_close_reason(wsi, LWS_CLOSE_STATUS_PROTOCOL_ERR, (uint8_t *)"bad cont", 8); return -1; } break; case LWSWSOPC_CLOSE: wsi->ws->check_utf8 = 0; wsi->ws->utf8 = 0; break; case 3: case 4: case 5: case 6: case 7: case 0xb: case 0xc: case 0xd: case 0xe: case 0xf: lws_close_reason(wsi, LWS_CLOSE_STATUS_PROTOCOL_ERR, (uint8_t *)"bad opc", 7); lwsl_info("illegal opcode\n"); return -1; } if (wsi->ws->owed_a_fin && (wsi->ws->opcode == LWSWSOPC_TEXT_FRAME || wsi->ws->opcode == LWSWSOPC_BINARY_FRAME)) { lwsl_info("hey you owed us a FIN\n"); lws_close_reason(wsi, LWS_CLOSE_STATUS_PROTOCOL_ERR, (uint8_t *)"bad fin", 7); return -1; } if ((!(wsi->ws->opcode & 8)) && wsi->ws->final) { wsi->ws->continuation_possible = 0; wsi->ws->owed_a_fin = 0; } if (!wsi->ws->final) wsi->ws->owed_a_fin = 1; wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN; if (wsi->ws->rsv && ( #if !defined(LWS_WITHOUT_EXTENSIONS) !wsi->ws->count_act_ext || #endif (wsi->ws->rsv & ~0x40))) { lws_close_reason(wsi, LWS_CLOSE_STATUS_PROTOCOL_ERR, (uint8_t *)"rsv bits", 8); return -1; } break; case LWS_RXPS_04_FRAME_HDR_LEN: wsi->ws->this_frame_masked = !!(c & 0x80); switch (c & 0x7f) { case 126: /* control frames are not allowed to have big lengths */ if (wsi->ws->opcode & 8) goto illegal_ctl_length; wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN16_2; break; case 127: /* control frames are not allowed to have big lengths */ if (wsi->ws->opcode & 8) goto illegal_ctl_length; wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN64_8; break; default: wsi->ws->rx_packet_length = c & 0x7f; if (wsi->ws->this_frame_masked) wsi->lws_rx_parse_state = LWS_RXPS_07_COLLECT_FRAME_KEY_1; else if (wsi->ws->rx_packet_length) { wsi->lws_rx_parse_state = LWS_RXPS_WS_FRAME_PAYLOAD; } else { wsi->lws_rx_parse_state = LWS_RXPS_NEW; goto spill; } break; } break; case LWS_RXPS_04_FRAME_HDR_LEN16_2: wsi->ws->rx_packet_length = (size_t)(c << 8); wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN16_1; break; case LWS_RXPS_04_FRAME_HDR_LEN16_1: wsi->ws->rx_packet_length |= c; if (wsi->ws->this_frame_masked) wsi->lws_rx_parse_state = LWS_RXPS_07_COLLECT_FRAME_KEY_1; else { wsi->lws_rx_parse_state = LWS_RXPS_WS_FRAME_PAYLOAD; } break; case LWS_RXPS_04_FRAME_HDR_LEN64_8: if (c & 0x80) { lwsl_warn("b63 of length must be zero\n"); /* kill the connection */ return -1; } #if defined __LP64__ wsi->ws->rx_packet_length = ((size_t)c) << 56; #else wsi->ws->rx_packet_length = 0; #endif wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN64_7; break; case LWS_RXPS_04_FRAME_HDR_LEN64_7: #if defined __LP64__ wsi->ws->rx_packet_length |= ((size_t)c) << 48; #endif wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN64_6; break; case LWS_RXPS_04_FRAME_HDR_LEN64_6: #if defined __LP64__ wsi->ws->rx_packet_length |= ((size_t)c) << 40; #endif wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN64_5; break; case LWS_RXPS_04_FRAME_HDR_LEN64_5: #if defined __LP64__ wsi->ws->rx_packet_length |= ((size_t)c) << 32; #endif wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN64_4; break; case LWS_RXPS_04_FRAME_HDR_LEN64_4: wsi->ws->rx_packet_length |= ((size_t)c) << 24; wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN64_3; break; case LWS_RXPS_04_FRAME_HDR_LEN64_3: wsi->ws->rx_packet_length |= ((size_t)c) << 16; wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN64_2; break; case LWS_RXPS_04_FRAME_HDR_LEN64_2: wsi->ws->rx_packet_length |= ((size_t)c) << 8; wsi->lws_rx_parse_state = LWS_RXPS_04_FRAME_HDR_LEN64_1; break; case LWS_RXPS_04_FRAME_HDR_LEN64_1: wsi->ws->rx_packet_length |= ((size_t)c); if (wsi->ws->this_frame_masked) wsi->lws_rx_parse_state = LWS_RXPS_07_COLLECT_FRAME_KEY_1; else wsi->lws_rx_parse_state = LWS_RXPS_WS_FRAME_PAYLOAD; break; case LWS_RXPS_07_COLLECT_FRAME_KEY_1: wsi->ws->mask[0] = c; if (c) wsi->ws->all_zero_nonce = 0; wsi->lws_rx_parse_state = LWS_RXPS_07_COLLECT_FRAME_KEY_2; break; case LWS_RXPS_07_COLLECT_FRAME_KEY_2: wsi->ws->mask[1] = c; if (c) wsi->ws->all_zero_nonce = 0; wsi->lws_rx_parse_state = LWS_RXPS_07_COLLECT_FRAME_KEY_3; break; case LWS_RXPS_07_COLLECT_FRAME_KEY_3: wsi->ws->mask[2] = c; if (c) wsi->ws->all_zero_nonce = 0; wsi->lws_rx_parse_state = LWS_RXPS_07_COLLECT_FRAME_KEY_4; break; case LWS_RXPS_07_COLLECT_FRAME_KEY_4: wsi->ws->mask[3] = c; if (c) wsi->ws->all_zero_nonce = 0; wsi->lws_rx_parse_state = LWS_RXPS_WS_FRAME_PAYLOAD; wsi->ws->mask_idx = 0; if (wsi->ws->rx_packet_length == 0) { wsi->lws_rx_parse_state = LWS_RXPS_NEW; goto spill; } break; case LWS_RXPS_WS_FRAME_PAYLOAD: assert(wsi->ws->rx_ubuf); if (wsi->ws->rx_ubuf_head + LWS_PRE >= wsi->ws->rx_ubuf_alloc) { lwsl_err("Attempted overflow \n"); return -1; } if (!(already_processed & ALREADY_PROCESSED_IGNORE_CHAR)) { if (wsi->ws->all_zero_nonce) wsi->ws->rx_ubuf[LWS_PRE + (wsi->ws->rx_ubuf_head++)] = c; else wsi->ws->rx_ubuf[LWS_PRE + (wsi->ws->rx_ubuf_head++)] = c ^ wsi->ws->mask[(wsi->ws->mask_idx++) & 3]; --wsi->ws->rx_packet_length; } if (!wsi->ws->rx_packet_length) { lwsl_debug("%s: ws fragment length exhausted\n", __func__); /* spill because we have the whole frame */ wsi->lws_rx_parse_state = LWS_RXPS_NEW; goto spill; } #if !defined(LWS_WITHOUT_EXTENSIONS) if (wsi->ws->rx_draining_ext) { lwsl_debug("%s: UNTIL_EXHAUSTED draining\n", __func__); goto drain_extension; } #endif /* * if there's no protocol max frame size given, we are * supposed to default to context->pt_serv_buf_size */ if (!wsi->a.protocol->rx_buffer_size && wsi->ws->rx_ubuf_head != wsi->a.context->pt_serv_buf_size) break; if (wsi->a.protocol->rx_buffer_size && wsi->ws->rx_ubuf_head != wsi->a.protocol->rx_buffer_size) break; /* spill because we filled our rx buffer */ spill: /* * is this frame a control packet we should take care of at this * layer? If so service it and hide it from the user callback */ lwsl_parser("spill on %s\n", wsi->a.protocol->name); switch (wsi->ws->opcode) { case LWSWSOPC_CLOSE: if (wsi->ws->peer_has_sent_close) break; wsi->ws->peer_has_sent_close = 1; pp = &wsi->ws->rx_ubuf[LWS_PRE]; if (lws_check_opt(wsi->a.context->options, LWS_SERVER_OPTION_VALIDATE_UTF8) && wsi->ws->rx_ubuf_head > 2 && lws_check_utf8(&wsi->ws->utf8, pp + 2, wsi->ws->rx_ubuf_head - 2)) goto utf8_fail; /* is this an acknowledgment of our close? */ if (lwsi_state(wsi) == LRS_AWAITING_CLOSE_ACK) { /* * fine he has told us he is closing too, let's * finish our close */ lwsl_parser("seen client close ack\n"); return -1; } if (lwsi_state(wsi) == LRS_RETURNED_CLOSE) /* if he sends us 2 CLOSE, kill him */ return -1; if (lws_partial_buffered(wsi)) { /* * if we're in the middle of something, * we can't do a normal close response and * have to just close our end. */ wsi->socket_is_permanently_unusable = 1; lwsl_parser("Closing on peer close " "due to pending tx\n"); return -1; } if (wsi->ws->rx_ubuf_head >= 2) { close_code = (unsigned short)((pp[0] << 8) | pp[1]); if (close_code < 1000 || close_code == 1004 || close_code == 1005 || close_code == 1006 || close_code == 1012 || close_code == 1013 || close_code == 1014 || close_code == 1015 || (close_code >= 1016 && close_code < 3000) ) { pp[0] = (LWS_CLOSE_STATUS_PROTOCOL_ERR >> 8) & 0xff; pp[1] = LWS_CLOSE_STATUS_PROTOCOL_ERR & 0xff; } } if (user_callback_handle_rxflow( wsi->a.protocol->callback, wsi, LWS_CALLBACK_WS_PEER_INITIATED_CLOSE, wsi->user_space, &wsi->ws->rx_ubuf[LWS_PRE], wsi->ws->rx_ubuf_head)) return -1; lwsl_parser("server sees client close packet\n"); lwsi_set_state(wsi, LRS_RETURNED_CLOSE); /* deal with the close packet contents as a PONG */ wsi->ws->payload_is_close = 1; goto process_as_ping; case LWSWSOPC_PING: lwsl_info("received %d byte ping, sending pong\n", (int)wsi->ws->rx_ubuf_head); if (wsi->ws->pong_pending_flag) { /* * there is already a pending pong payload * we should just log and drop */ lwsl_parser("DROP PING since one pending\n"); goto ping_drop; } process_as_ping: /* control packets can only be < 128 bytes long */ if (wsi->ws->rx_ubuf_head > 128 - 3) { lwsl_parser("DROP PING payload too large\n"); goto ping_drop; } /* stash the pong payload */ memcpy(wsi->ws->pong_payload_buf + LWS_PRE, &wsi->ws->rx_ubuf[LWS_PRE], wsi->ws->rx_ubuf_head); wsi->ws->pong_payload_len = (uint8_t)wsi->ws->rx_ubuf_head; wsi->ws->pong_pending_flag = 1; /* get it sent as soon as possible */ lws_callback_on_writable(wsi); ping_drop: wsi->ws->rx_ubuf_head = 0; return 0; case LWSWSOPC_PONG: lwsl_info("received pong\n"); lwsl_hexdump(&wsi->ws->rx_ubuf[LWS_PRE], wsi->ws->rx_ubuf_head); lws_validity_confirmed(wsi); /* issue it */ callback_action = LWS_CALLBACK_RECEIVE_PONG; break; case LWSWSOPC_TEXT_FRAME: case LWSWSOPC_BINARY_FRAME: case LWSWSOPC_CONTINUATION: break; default: lwsl_parser("unknown opc %x\n", wsi->ws->opcode); return -1; } /* * No it's real payload, pass it up to the user callback. * * We have been statefully collecting it in the * LWS_RXPS_WS_FRAME_PAYLOAD clause above. * * It's nicely buffered with the pre-padding taken care of * so it can be sent straight out again using lws_write. * * However, now we have a chunk of it, we want to deal with it * all here. Since this may be input to permessage-deflate and * there are block limits on that for input and output, we may * need to iterate. */ pmdrx.eb_in.token = &wsi->ws->rx_ubuf[LWS_PRE]; pmdrx.eb_in.len = (int)wsi->ws->rx_ubuf_head; /* for the non-pm-deflate case */ pmdrx.eb_out = pmdrx.eb_in; if (wsi->ws->opcode == LWSWSOPC_PONG && !pmdrx.eb_in.len) goto already_done; #if !defined(LWS_WITHOUT_EXTENSIONS) drain_extension: #endif do { // lwsl_notice("%s: pmdrx.eb_in.len: %d\n", __func__, // (int)pmdrx.eb_in.len); if (lwsi_state(wsi) == LRS_RETURNED_CLOSE || lwsi_state(wsi) == LRS_AWAITING_CLOSE_ACK) goto already_done; n = PMDR_DID_NOTHING; #if !defined(LWS_WITHOUT_EXTENSIONS) lin = pmdrx.eb_in.len; //if (lin) // lwsl_hexdump_notice(ebuf.token, ebuf.len); lwsl_ext("%s: +++ passing %d %p to ext\n", __func__, pmdrx.eb_in.len, pmdrx.eb_in.token); n = lws_ext_cb_active(wsi, LWS_EXT_CB_PAYLOAD_RX, &pmdrx, 0); lwsl_debug("%s: ext says %d / ebuf.len %d\n", __func__, n, pmdrx.eb_out.len); if (wsi->ws->rx_draining_ext) already_processed &= (char)~ALREADY_PROCESSED_NO_CB; #endif /* * ebuf may be pointing somewhere completely different * now, it's the output */ #if !defined(LWS_WITHOUT_EXTENSIONS) if (n < 0) { /* * we may rely on this to get RX, just drop * connection */ wsi->socket_is_permanently_unusable = 1; return -1; } if (n == PMDR_DID_NOTHING) /* ie, not PMDR_NOTHING_WE_SHOULD_DO */ break; #endif lwsl_debug("%s: post ext ret %d, ebuf in %d / out %d\n", __func__, n, pmdrx.eb_in.len, pmdrx.eb_out.len); #if !defined(LWS_WITHOUT_EXTENSIONS) if (rx_draining_ext && !pmdrx.eb_out.len) { lwsl_debug(" --- ending drain on 0 read\n"); goto already_done; } if (n == PMDR_HAS_PENDING) /* * extension had more... * main loop will come back */ lws_add_wsi_to_draining_ext_list(wsi); else lws_remove_wsi_from_draining_ext_list(wsi); rx_draining_ext = wsi->ws->rx_draining_ext; #endif if (pmdrx.eb_out.len && wsi->ws->check_utf8 && !wsi->ws->defeat_check_utf8) { if (lws_check_utf8(&wsi->ws->utf8, pmdrx.eb_out.token, (size_t)pmdrx.eb_out.len)) { lws_close_reason(wsi, LWS_CLOSE_STATUS_INVALID_PAYLOAD, (uint8_t *)"bad utf8", 8); goto utf8_fail; } /* we are ending partway through utf-8 character? */ if (!wsi->ws->rx_packet_length && wsi->ws->final && wsi->ws->utf8 #if !defined(LWS_WITHOUT_EXTENSIONS) /* if ext not negotiated, going to be UNKNOWN */ && (n == PMDR_EMPTY_FINAL || n == PMDR_UNKNOWN) #endif ) { lwsl_info("FINAL utf8 error\n"); lws_close_reason(wsi, LWS_CLOSE_STATUS_INVALID_PAYLOAD, (uint8_t *)"partial utf8", 12); utf8_fail: lwsl_notice("utf8 error\n"); lwsl_hexdump_notice(pmdrx.eb_out.token, (size_t)pmdrx.eb_out.len); return -1; } } /* if pmd not enabled, in == out */ if (n == PMDR_DID_NOTHING #if !defined(LWS_WITHOUT_EXTENSIONS) || n == PMDR_NOTHING_WE_SHOULD_DO || n == PMDR_UNKNOWN #endif ) pmdrx.eb_in.len -= pmdrx.eb_out.len; if (!wsi->wsistate_pre_close && (pmdrx.eb_out.len >= 0 || callback_action == LWS_CALLBACK_RECEIVE_PONG || n == PMDR_EMPTY_FINAL)) { if (pmdrx.eb_out.len) pmdrx.eb_out.token[pmdrx.eb_out.len] = '\0'; if (wsi->a.protocol->callback && !(already_processed & ALREADY_PROCESSED_NO_CB)) { if (callback_action == LWS_CALLBACK_RECEIVE_PONG) lwsl_info("Doing pong callback\n"); ret = user_callback_handle_rxflow( wsi->a.protocol->callback, wsi, (enum lws_callback_reasons) callback_action, wsi->user_space, pmdrx.eb_out.token, (size_t)pmdrx.eb_out.len); } wsi->ws->first_fragment = 0; } #if !defined(LWS_WITHOUT_EXTENSIONS) if (!lin) break; #endif } while (pmdrx.eb_in.len #if !defined(LWS_WITHOUT_EXTENSIONS) || rx_draining_ext #endif ); already_done: wsi->ws->rx_ubuf_head = 0; break; } return ret; illegal_ctl_length: lwsl_warn("Control frame with xtended length is illegal\n"); /* kill the connection */ return -1; } size_t lws_remaining_packet_payload(struct lws *wsi) { return wsi->ws->rx_packet_length; } int lws_frame_is_binary(struct lws *wsi) { return wsi->ws->frame_is_binary; } void lws_add_wsi_to_draining_ext_list(struct lws *wsi) { #if !defined(LWS_WITHOUT_EXTENSIONS) struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; if (wsi->ws->rx_draining_ext) return; lwsl_debug("%s: RX EXT DRAINING: Adding to list\n", __func__); wsi->ws->rx_draining_ext = 1; wsi->ws->rx_draining_ext_list = pt->ws.rx_draining_ext_list; pt->ws.rx_draining_ext_list = wsi; #endif } void lws_remove_wsi_from_draining_ext_list(struct lws *wsi) { #if !defined(LWS_WITHOUT_EXTENSIONS) struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; struct lws **w = &pt->ws.rx_draining_ext_list; if (!wsi->ws->rx_draining_ext) return; lwsl_debug("%s: RX EXT DRAINING: Removing from list\n", __func__); wsi->ws->rx_draining_ext = 0; /* remove us from context draining ext list */ while (*w) { if (*w == wsi) { /* if us, point it instead to who we were pointing to */ *w = wsi->ws->rx_draining_ext_list; break; } w = &((*w)->ws->rx_draining_ext_list); } wsi->ws->rx_draining_ext_list = NULL; #endif } static int lws_0405_frame_mask_generate(struct lws *wsi) { size_t n; /* fetch the per-frame nonce */ n = lws_get_random(lws_get_context(wsi), wsi->ws->mask, 4); if (n != 4) { lwsl_parser("Unable to read from random device %s %d\n", SYSTEM_RANDOM_FILEPATH, (int)n); return 1; } /* start masking from first byte of masking key buffer */ wsi->ws->mask_idx = 0; return 0; } int lws_server_init_wsi_for_ws(struct lws *wsi) { int n; lwsi_set_state(wsi, LRS_ESTABLISHED); /* * create the frame buffer for this connection according to the * size mentioned in the protocol definition. If 0 there, use * a big default for compatibility */ n = (int)wsi->a.protocol->rx_buffer_size; if (!n) n = (int)wsi->a.context->pt_serv_buf_size; n += LWS_PRE; wsi->ws->rx_ubuf = lws_malloc((unsigned int)n + 4 /* 0x0000ffff zlib */, "rx_ubuf"); if (!wsi->ws->rx_ubuf) { lwsl_err("Out of Mem allocating rx buffer %d\n", n); return 1; } wsi->ws->rx_ubuf_alloc = (uint32_t)n; /* notify user code that we're ready to roll */ if (wsi->a.protocol->callback) if (wsi->a.protocol->callback(wsi, LWS_CALLBACK_ESTABLISHED, wsi->user_space, #ifdef LWS_WITH_TLS wsi->tls.ssl, #else NULL, #endif wsi->h2_stream_carries_ws)) return 1; lws_validity_confirmed(wsi); lwsl_debug("ws established\n"); return 0; } int lws_is_final_fragment(struct lws *wsi) { #if !defined(LWS_WITHOUT_EXTENSIONS) lwsl_debug("%s: final %d, rx pk length %ld, draining %ld\n", __func__, wsi->ws->final, (long)wsi->ws->rx_packet_length, (long)wsi->ws->rx_draining_ext); return wsi->ws->final && !wsi->ws->rx_packet_length && !wsi->ws->rx_draining_ext; #else return wsi->ws->final && !wsi->ws->rx_packet_length; #endif } int lws_is_first_fragment(struct lws *wsi) { return wsi->ws->first_fragment; } unsigned char lws_get_reserved_bits(struct lws *wsi) { return wsi->ws->rsv; } int lws_get_close_length(struct lws *wsi) { return wsi->ws->close_in_ping_buffer_len; } unsigned char * lws_get_close_payload(struct lws *wsi) { return &wsi->ws->ping_payload_buf[LWS_PRE]; } void lws_close_reason(struct lws *wsi, enum lws_close_status status, unsigned char *buf, size_t len) { unsigned char *p, *start; int budget = sizeof(wsi->ws->ping_payload_buf) - LWS_PRE; assert(lwsi_role_ws(wsi)); start = p = &wsi->ws->ping_payload_buf[LWS_PRE]; *p++ = (uint8_t)((((int)status) >> 8) & 0xff); *p++ = (uint8_t)(((int)status) & 0xff); if (buf) while (len-- && p < start + budget) *p++ = *buf++; wsi->ws->close_in_ping_buffer_len = (uint8_t)lws_ptr_diff(p, start); } static int lws_is_ws_with_ext(struct lws *wsi) { #if defined(LWS_WITHOUT_EXTENSIONS) return 0; #else return lwsi_role_ws(wsi) && !!wsi->ws->count_act_ext; #endif } static int rops_handle_POLLIN_ws(struct lws_context_per_thread *pt, struct lws *wsi, struct lws_pollfd *pollfd) { unsigned int pending = 0; struct lws_tokens ebuf; char buffered = 0; int n = 0, m, sanity = 100; #if defined(LWS_WITH_HTTP2) struct lws *wsi1; #endif if (!wsi->ws) { lwsl_err("ws role wsi with no ws\n"); return LWS_HPI_RET_PLEASE_CLOSE_ME; } // lwsl_notice("%s: %s\n", __func__, wsi->a.protocol->name); //lwsl_info("%s: wsistate 0x%x, pollout %d\n", __func__, // wsi->wsistate, pollfd->revents & LWS_POLLOUT); /* * something went wrong with parsing the handshake, and * we ended up back in the event loop without completing it */ if (lwsi_state(wsi) == LRS_PRE_WS_SERVING_ACCEPT) { wsi->socket_is_permanently_unusable = 1; return LWS_HPI_RET_PLEASE_CLOSE_ME; } ebuf.token = NULL; ebuf.len = 0; if (lwsi_state(wsi) == LRS_WAITING_CONNECT) { #if defined(LWS_WITH_CLIENT) if ((pollfd->revents & LWS_POLLOUT) && lws_handle_POLLOUT_event(wsi, pollfd)) { lwsl_debug("POLLOUT event closed it\n"); return LWS_HPI_RET_PLEASE_CLOSE_ME; } n = lws_http_client_socket_service(wsi, pollfd); if (n) return LWS_HPI_RET_WSI_ALREADY_DIED; #endif return LWS_HPI_RET_HANDLED; } /* 1: something requested a callback when it was OK to write */ if ((pollfd->revents & LWS_POLLOUT) && lwsi_state_can_handle_POLLOUT(wsi) && lws_handle_POLLOUT_event(wsi, pollfd)) { if (lwsi_state(wsi) == LRS_RETURNED_CLOSE) lwsi_set_state(wsi, LRS_FLUSHING_BEFORE_CLOSE); return LWS_HPI_RET_PLEASE_CLOSE_ME; } if (lwsi_state(wsi) == LRS_RETURNED_CLOSE || lwsi_state(wsi) == LRS_WAITING_TO_SEND_CLOSE) { /* * we stopped caring about anything except control * packets. Force flow control off, defeat tx * draining. */ lws_rx_flow_control(wsi, 1); #if !defined(LWS_WITHOUT_EXTENSIONS) if (wsi->ws) wsi->ws->tx_draining_ext = 0; #endif } #if !defined(LWS_WITHOUT_EXTENSIONS) if (wsi->ws->tx_draining_ext) { lws_handle_POLLOUT_event(wsi, pollfd); //lwsl_notice("%s: tx drain\n", __func__); /* * We cannot deal with new RX until the TX ext path has * been drained. It's because new rx will, eg, crap on * the wsi rx buf that may be needed to retain state. * * TX ext drain path MUST go through event loop to avoid * blocking. */ lws_callback_on_writable(wsi); return LWS_HPI_RET_HANDLED; } #endif if ((pollfd->revents & LWS_POLLIN) && lws_is_flowcontrolled(wsi)) { /* We cannot deal with any kind of new RX because we are * RX-flowcontrolled. */ lwsl_info("%s: flowcontrolled, ignoring rx\n", __func__); if (__lws_change_pollfd(wsi, LWS_POLLIN, 0)) return -1; return LWS_HPI_RET_HANDLED; } if (lws_is_flowcontrolled(wsi)) return LWS_HPI_RET_HANDLED; #if defined(LWS_WITH_HTTP2) if (wsi->mux_substream || wsi->upgraded_to_http2) { wsi1 = lws_get_network_wsi(wsi); if (wsi1 && lws_has_buffered_out(wsi1)) /* We cannot deal with any kind of new RX * because we are dealing with a partial send * (new RX may trigger new http_action() that * expect to be able to send) */ return LWS_HPI_RET_HANDLED; } #endif #if !defined(LWS_WITHOUT_EXTENSIONS) /* 2: RX Extension needs to be drained */ if (wsi->ws->rx_draining_ext) { lwsl_debug("%s: RX EXT DRAINING: Service\n", __func__); #if defined(LWS_WITH_CLIENT) if (lwsi_role_client(wsi)) { n = lws_ws_client_rx_sm(wsi, 0); if (n < 0) /* we closed wsi */ return LWS_HPI_RET_PLEASE_CLOSE_ME; } else #endif n = lws_ws_rx_sm(wsi, ALREADY_PROCESSED_IGNORE_CHAR, 0); return LWS_HPI_RET_HANDLED; } if (wsi->ws->rx_draining_ext) /* * We have RX EXT content to drain, but can't do it * right now. That means we cannot do anything lower * priority either. */ return LWS_HPI_RET_HANDLED; #endif /* 3: buflist needs to be drained */ read: //lws_buflist_describe(&wsi->buflist, wsi, __func__); ebuf.len = (int)lws_buflist_next_segment_len(&wsi->buflist, &ebuf.token); if (ebuf.len) { lwsl_info("draining buflist (len %d)\n", ebuf.len); buffered = 1; goto drain; } if (!(pollfd->revents & pollfd->events & LWS_POLLIN) && !wsi->http.ah) return LWS_HPI_RET_HANDLED; if (lws_is_flowcontrolled(wsi)) { lwsl_info("%s: %p should be rxflow (bm 0x%x)..\n", __func__, wsi, wsi->rxflow_bitmap); return LWS_HPI_RET_HANDLED; } if (!(lwsi_role_client(wsi) && (lwsi_state(wsi) != LRS_ESTABLISHED && lwsi_state(wsi) != LRS_AWAITING_CLOSE_ACK && lwsi_state(wsi) != LRS_H2_WAITING_TO_SEND_HEADERS))) { /* * In case we are going to react to this rx by scheduling * writes, we need to restrict the amount of rx to the size * the protocol reported for rx buffer. * * Otherwise we get a situation we have to absorb possibly a * lot of reads before we get a chance to drain them by writing * them, eg, with echo type tests in autobahn. */ buffered = 0; ebuf.token = pt->serv_buf; if (lwsi_role_ws(wsi)) ebuf.len = (int)wsi->ws->rx_ubuf_alloc; else ebuf.len = (int)wsi->a.context->pt_serv_buf_size; if ((unsigned int)ebuf.len > wsi->a.context->pt_serv_buf_size) ebuf.len = (int)wsi->a.context->pt_serv_buf_size; if ((int)pending > ebuf.len) pending = (unsigned int)ebuf.len; ebuf.len = lws_ssl_capable_read(wsi, ebuf.token, (size_t)(pending ? pending : (unsigned int)ebuf.len)); switch (ebuf.len) { case 0: lwsl_info("%s: zero length read\n", __func__); return LWS_HPI_RET_PLEASE_CLOSE_ME; case LWS_SSL_CAPABLE_MORE_SERVICE: lwsl_info("SSL Capable more service\n"); return LWS_HPI_RET_HANDLED; case LWS_SSL_CAPABLE_ERROR: lwsl_info("%s: LWS_SSL_CAPABLE_ERROR\n", __func__); return LWS_HPI_RET_PLEASE_CLOSE_ME; } /* * coverity thinks ssl_capable_read() may read over * 2GB. Dissuade it... */ ebuf.len &= 0x7fffffff; } drain: /* * give any active extensions a chance to munge the buffer * before parse. We pass in a pointer to an lws_tokens struct * prepared with the default buffer and content length that's in * there. Rather than rewrite the default buffer, extensions * that expect to grow the buffer can adapt .token to * point to their own per-connection buffer in the extension * user allocation. By default with no extensions or no * extension callback handling, just the normal input buffer is * used then so it is efficient. */ m = 0; do { /* service incoming data */ //lws_buflist_describe(&wsi->buflist, wsi, __func__); if (ebuf.len > 0) { #if defined(LWS_ROLE_H2) if (lwsi_role_h2(wsi) && lwsi_state(wsi) != LRS_BODY && lwsi_state(wsi) != LRS_DISCARD_BODY) n = lws_read_h2(wsi, ebuf.token, (unsigned int)ebuf.len); else #endif n = lws_read_h1(wsi, ebuf.token, (unsigned int)ebuf.len); if (n < 0) { /* we closed wsi */ return LWS_HPI_RET_WSI_ALREADY_DIED; } //lws_buflist_describe(&wsi->buflist, wsi, __func__); //lwsl_notice("%s: consuming %d / %d\n", __func__, n, ebuf.len); if (ebuf.len < 0 || lws_buflist_aware_finished_consuming(wsi, &ebuf, n, buffered, __func__)) return LWS_HPI_RET_PLEASE_CLOSE_ME; } ebuf.token = NULL; ebuf.len = 0; } while (m); if (wsi->http.ah #if defined(LWS_WITH_CLIENT) && !wsi->client_h2_alpn #endif ) { lwsl_info("%s: %p: detaching ah\n", __func__, wsi); lws_header_table_detach(wsi, 0); } pending = (unsigned int)lws_ssl_pending(wsi); #if defined(LWS_WITH_CLIENT) if (!pending && (wsi->flags & LCCSCF_PRIORITIZE_READS) && lws_buflist_total_len(&wsi->buflist)) pending = 9999999; #endif if (pending) { if (lws_is_ws_with_ext(wsi)) pending = pending > wsi->ws->rx_ubuf_alloc ? wsi->ws->rx_ubuf_alloc : pending; else pending = pending > wsi->a.context->pt_serv_buf_size ? wsi->a.context->pt_serv_buf_size : pending; if (--sanity) { #if !defined(LWS_WITHOUT_EXTENSIONS) while (wsi->ws->rx_draining_ext) { // RX Extension needs to be drained before next read n = lws_ws_rx_sm(wsi, ALREADY_PROCESSED_IGNORE_CHAR, 0); if (n < 0) { return LWS_HPI_RET_PLEASE_CLOSE_ME; } } #endif goto read; } else /* * Something has gone wrong, we are spinning... * let's bail on this connection */ return LWS_HPI_RET_PLEASE_CLOSE_ME; } if (buffered && /* were draining, now nothing left */ !lws_buflist_next_segment_len(&wsi->buflist, NULL)) { lwsl_info("%s: %p flow buf: drained\n", __func__, wsi); /* having drained the rxflow buffer, can rearm POLLIN */ #if !defined(LWS_WITH_SERVER) n = #endif __lws_rx_flow_control(wsi); /* n ignored, needed for NO_SERVER case */ } /* n = 0 */ return LWS_HPI_RET_HANDLED; } int rops_handle_POLLOUT_ws(struct lws *wsi) { int write_type = LWS_WRITE_PONG; #if !defined(LWS_WITHOUT_EXTENSIONS) struct lws_ext_pm_deflate_rx_ebufs pmdrx; int ret, m; #endif int n; #if !defined(LWS_WITHOUT_EXTENSIONS) lwsl_debug("%s: %s: wsi->ws->tx_draining_ext %d\n", __func__, wsi->a.protocol->name, wsi->ws->tx_draining_ext); #endif /* Priority 3: pending control packets (pong or close) * * 3a: close notification packet requested from close api */ if (lwsi_state(wsi) == LRS_WAITING_TO_SEND_CLOSE) { lwsl_debug("sending close packet\n"); lwsl_hexdump_debug(&wsi->ws->ping_payload_buf[LWS_PRE], wsi->ws->close_in_ping_buffer_len); wsi->waiting_to_send_close_frame = 0; n = lws_write(wsi, &wsi->ws->ping_payload_buf[LWS_PRE], wsi->ws->close_in_ping_buffer_len, LWS_WRITE_CLOSE); if (n >= 0) { if (wsi->close_needs_ack) { lwsi_set_state(wsi, LRS_AWAITING_CLOSE_ACK); lws_set_timeout(wsi, PENDING_TIMEOUT_CLOSE_ACK, 5); lwsl_debug("sent close, await ack\n"); return LWS_HP_RET_BAIL_OK; } wsi->close_needs_ack = 0; lwsi_set_state(wsi, LRS_RETURNED_CLOSE); } return LWS_HP_RET_BAIL_DIE; } /* else, the send failed and we should just hang up */ if ((lwsi_role_ws(wsi) && wsi->ws->pong_pending_flag) || (lwsi_state(wsi) == LRS_RETURNED_CLOSE && wsi->ws->payload_is_close)) { if (wsi->ws->payload_is_close) write_type = LWS_WRITE_CLOSE; else { if (wsi->wsistate_pre_close) { /* we started close flow, forget pong */ wsi->ws->pong_pending_flag = 0; return LWS_HP_RET_BAIL_OK; } lwsl_info("issuing pong %d on %s\n", wsi->ws->pong_payload_len, lws_wsi_tag(wsi)); } n = lws_write(wsi, &wsi->ws->pong_payload_buf[LWS_PRE], wsi->ws->pong_payload_len, (enum lws_write_protocol)write_type); if (n < 0) return LWS_HP_RET_BAIL_DIE; /* well he is sent, mark him done */ wsi->ws->pong_pending_flag = 0; if (wsi->ws->payload_is_close) { // assert(0); /* oh... a close frame was it... then we are done */ return LWS_HP_RET_BAIL_DIE; } /* otherwise for PING, leave POLLOUT active either way */ return LWS_HP_RET_BAIL_OK; } if (!wsi->socket_is_permanently_unusable && wsi->ws->send_check_ping) { lwsl_info("%s: issuing ping on wsi %s: %s %s h2: %d\n", __func__, lws_wsi_tag(wsi), wsi->role_ops->name, wsi->a.protocol->name, wsi->mux_substream); wsi->ws->send_check_ping = 0; n = lws_write(wsi, &wsi->ws->ping_payload_buf[LWS_PRE], 0, LWS_WRITE_PING); if (n < 0) return LWS_HP_RET_BAIL_DIE; return LWS_HP_RET_BAIL_OK; } /* Priority 4: if we are closing, not allowed to send more data frags * which means user callback or tx ext flush banned now */ if (lwsi_state(wsi) == LRS_RETURNED_CLOSE) return LWS_HP_RET_USER_SERVICE; #if !defined(LWS_WITHOUT_EXTENSIONS) /* Priority 5: Tx path extension with more to send * * These are handled as new fragments each time around * So while we must block new writeable callback to enforce * payload ordering, but since they are always complete * fragments control packets can interleave OK. */ if (wsi->ws->tx_draining_ext) { lwsl_ext("SERVICING TX EXT DRAINING\n"); if (lws_write(wsi, NULL, 0, LWS_WRITE_CONTINUATION) < 0) return LWS_HP_RET_BAIL_DIE; /* leave POLLOUT active */ return LWS_HP_RET_BAIL_OK; } /* Priority 6: extensions */ if (!wsi->ws->extension_data_pending && !wsi->ws->tx_draining_ext) { lwsl_ext("%s: !wsi->ws->extension_data_pending\n", __func__); return LWS_HP_RET_USER_SERVICE; } /* * Check in on the active extensions, see if they had pending stuff to * spill... they need to get the first look-in otherwise sequence will * be disordered. * * coming here with a NULL, zero-length ebuf means just spill pending */ ret = 1; if (wsi->role_ops == &role_ops_raw_skt #if defined(LWS_ROLE_RAW_FILE) || wsi->role_ops == &role_ops_raw_file #endif ) ret = 0; while (ret == 1) { /* default to nobody has more to spill */ ret = 0; pmdrx.eb_in.token = NULL; pmdrx.eb_in.len = 0; /* give every extension a chance to spill */ m = lws_ext_cb_active(wsi, LWS_EXT_CB_PACKET_TX_PRESEND, &pmdrx, 0); if (m < 0) { lwsl_err("ext reports fatal error\n"); return LWS_HP_RET_BAIL_DIE; } if (m) /* * at least one extension told us he has more * to spill, so we will go around again after */ ret = 1; /* assuming they gave us something to send, send it */ if (pmdrx.eb_in.len) { n = lws_issue_raw(wsi, (unsigned char *)pmdrx.eb_in.token, (unsigned int)pmdrx.eb_in.len); if (n < 0) { lwsl_info("closing from POLLOUT spill\n"); return LWS_HP_RET_BAIL_DIE; } /* * Keep amount spilled small to minimize chance of this */ if (n != pmdrx.eb_in.len) { lwsl_err("Unable to spill ext %d vs %d\n", pmdrx.eb_in.len, n); return LWS_HP_RET_BAIL_DIE; } } else continue; /* no extension has more to spill */ if (!ret) continue; /* * There's more to spill from an extension, but we just sent * something... did that leave the pipe choked? */ if (!lws_send_pipe_choked(wsi)) /* no we could add more */ continue; lwsl_info("choked in POLLOUT service\n"); /* * Yes, he's choked. Leave the POLLOUT masked on so we will * come back here when he is unchoked. Don't call the user * callback to enforce ordering of spilling, he'll get called * when we come back here and there's nothing more to spill. */ return LWS_HP_RET_BAIL_OK; } wsi->ws->extension_data_pending = 0; #endif return LWS_HP_RET_USER_SERVICE; } static int rops_service_flag_pending_ws(struct lws_context *context, int tsi) { #if !defined(LWS_WITHOUT_EXTENSIONS) struct lws_context_per_thread *pt = &context->pt[tsi]; struct lws *wsi; int forced = 0; /* POLLIN faking (the pt lock is taken by the parent) */ /* * 1) For all guys with already-available ext data to drain, if they are * not flowcontrolled, fake their POLLIN status */ wsi = pt->ws.rx_draining_ext_list; while (wsi && wsi->position_in_fds_table != LWS_NO_FDS_POS) { pt->fds[wsi->position_in_fds_table].revents = (short)((short)pt->fds[wsi->position_in_fds_table].revents | (short)(pt->fds[wsi->position_in_fds_table].events & LWS_POLLIN)); if (pt->fds[wsi->position_in_fds_table].revents & LWS_POLLIN) forced = 1; wsi = wsi->ws->rx_draining_ext_list; } return forced; #else return 0; #endif } static int rops_close_via_role_protocol_ws(struct lws *wsi, enum lws_close_status reason) { if (!wsi->ws) return 0; if (!wsi->ws->close_in_ping_buffer_len && /* already a reason */ (reason == LWS_CLOSE_STATUS_NOSTATUS || reason == LWS_CLOSE_STATUS_NOSTATUS_CONTEXT_DESTROY)) return 0; lwsl_debug("%s: sending close indication...\n", __func__); /* if no prepared close reason, use 1000 and no aux data */ if (!wsi->ws->close_in_ping_buffer_len) { wsi->ws->close_in_ping_buffer_len = 2; wsi->ws->ping_payload_buf[LWS_PRE] = (reason >> 8) & 0xff; wsi->ws->ping_payload_buf[LWS_PRE + 1] = reason & 0xff; } wsi->waiting_to_send_close_frame = 1; wsi->close_needs_ack = 1; lwsi_set_state(wsi, LRS_WAITING_TO_SEND_CLOSE); __lws_set_timeout(wsi, PENDING_TIMEOUT_CLOSE_SEND, 5); lws_callback_on_writable(wsi); return 1; } static int rops_close_role_ws(struct lws_context_per_thread *pt, struct lws *wsi) { if (!wsi->ws) return 0; #if !defined(LWS_WITHOUT_EXTENSIONS) if (wsi->ws->rx_draining_ext) { struct lws **w = &pt->ws.rx_draining_ext_list; wsi->ws->rx_draining_ext = 0; /* remove us from context draining ext list */ while (*w) { if (*w == wsi) { *w = wsi->ws->rx_draining_ext_list; break; } w = &((*w)->ws->rx_draining_ext_list); } wsi->ws->rx_draining_ext_list = NULL; } if (wsi->ws->tx_draining_ext) { struct lws **w = &pt->ws.tx_draining_ext_list; lwsl_ext("%s: CLEARING tx_draining_ext\n", __func__); wsi->ws->tx_draining_ext = 0; /* remove us from context draining ext list */ while (*w) { if (*w == wsi) { *w = wsi->ws->tx_draining_ext_list; break; } w = &((*w)->ws->tx_draining_ext_list); } wsi->ws->tx_draining_ext_list = NULL; } #endif lws_free_set_NULL(wsi->ws->rx_ubuf); wsi->ws->pong_payload_len = 0; wsi->ws->pong_pending_flag = 0; /* deallocate any active extension contexts */ if (lws_ext_cb_active(wsi, LWS_EXT_CB_DESTROY, NULL, 0) < 0) lwsl_warn("extension destruction failed\n"); return 0; } static int rops_write_role_protocol_ws(struct lws *wsi, unsigned char *buf, size_t len, enum lws_write_protocol *wp) { #if !defined(LWS_WITHOUT_EXTENSIONS) struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; enum lws_write_protocol wpt; #endif struct lws_ext_pm_deflate_rx_ebufs pmdrx; int masked7 = lwsi_role_client(wsi); unsigned char is_masked_bit = 0; unsigned char *dropmask = NULL; size_t orig_len = len; int pre = 0, n = 0; // lwsl_err("%s: wp 0x%x len %d\n", __func__, *wp, (int)len); #if !defined(LWS_WITHOUT_EXTENSIONS) if (wsi->ws->tx_draining_ext) { /* remove us from the list */ struct lws **w = &pt->ws.tx_draining_ext_list; lwsl_ext("%s: CLEARING tx_draining_ext\n", __func__); wsi->ws->tx_draining_ext = 0; /* remove us from context draining ext list */ while (*w) { if (*w == wsi) { *w = wsi->ws->tx_draining_ext_list; break; } w = &((*w)->ws->tx_draining_ext_list); } wsi->ws->tx_draining_ext_list = NULL; wpt = *wp; *wp = (wsi->ws->tx_draining_stashed_wp & 0xc0) | LWS_WRITE_CONTINUATION; /* * When we are just flushing (len == 0), we can trust the * stashed wp info completely. Otherwise adjust it to the * FIN status of the incoming packet. */ if (!(wpt & LWS_WRITE_NO_FIN) && len) *wp &= (enum lws_write_protocol)~LWS_WRITE_NO_FIN; lwsl_ext("FORCED draining wp to 0x%02X " "(stashed 0x%02X, incoming 0x%02X)\n", *wp, wsi->ws->tx_draining_stashed_wp, wpt); // assert(0); } #endif if (((*wp) & 0x1f) == LWS_WRITE_HTTP || ((*wp) & 0x1f) == LWS_WRITE_HTTP_FINAL || ((*wp) & 0x1f) == LWS_WRITE_HTTP_HEADERS_CONTINUATION || ((*wp) & 0x1f) == LWS_WRITE_HTTP_HEADERS) goto send_raw; /* if we are continuing a frame that already had its header done */ if (wsi->ws->inside_frame) { lwsl_debug("INSIDE FRAME\n"); goto do_more_inside_frame; } wsi->ws->clean_buffer = 1; /* * give a chance to the extensions to modify payload * the extension may decide to produce unlimited payload erratically * (eg, compression extension), so we require only that if he produces * something, it will be a complete fragment of the length known at * the time (just the fragment length known), and if he has * more we will come back next time he is writeable and allow him to * produce more fragments until he's drained. * * This allows what is sent each time it is writeable to be limited to * a size that can be sent without partial sends or blocking, allows * interleaving of control frames and other connection service. */ pmdrx.eb_in.token = buf; pmdrx.eb_in.len = (int)len; /* for the non-pm-deflate case */ pmdrx.eb_out = pmdrx.eb_in; switch ((int)*wp) { case LWS_WRITE_PING: case LWS_WRITE_PONG: case LWS_WRITE_CLOSE: break; default: #if !defined(LWS_WITHOUT_EXTENSIONS) n = lws_ext_cb_active(wsi, (int)LWS_EXT_CB_PAYLOAD_TX, &pmdrx, (int)*wp); if (n < 0) return -1; lwsl_ext("%s: defl ext ret %d, ext in remaining %d, " "out %d compressed (wp 0x%x)\n", __func__, n, (int)pmdrx.eb_in.len, (int)pmdrx.eb_out.len, *wp); if (n == PMDR_HAS_PENDING) { lwsl_ext("%s: HAS PENDING: write drain len %d " "(wp 0x%x) SETTING tx_draining_ext " "(remaining in %d)\n", __func__, (int)pmdrx.eb_out.len, *wp, (int)pmdrx.eb_in.len); /* extension requires further draining */ wsi->ws->tx_draining_ext = 1; wsi->ws->tx_draining_ext_list = pt->ws.tx_draining_ext_list; pt->ws.tx_draining_ext_list = wsi; /* we must come back to do more */ lws_callback_on_writable(wsi); /* * keep a copy of the write type for the overall * action that has provoked generation of these * fragments, so the last guy can use its FIN state. */ wsi->ws->tx_draining_stashed_wp = (uint8_t)*wp; /* * Despite what we may have thought, this is definitely * NOT the last fragment, because the extension asserted * he has more coming. For example, the extension may * be compressing, and has saved up everything until the * end, where the output is larger than one chunk. * * Make sure this intermediate one doesn't actually * go out with a FIN. */ *wp |= LWS_WRITE_NO_FIN; } #endif if (pmdrx.eb_out.len && wsi->ws->stashed_write_pending) { wsi->ws->stashed_write_pending = 0; *wp = (unsigned int)(((*wp) & 0xc0) | (unsigned int)wsi->ws->stashed_write_type); } } /* * an extension did something we need to keep... for example, if * compression extension, it has already updated its state according * to this being issued */ if (buf != pmdrx.eb_out.token) { /* * ext might eat it, but not have anything to issue yet. * In that case we have to follow his lead, but stash and * replace the write type that was lost here the first time. */ if (len && !pmdrx.eb_out.len) { if (!wsi->ws->stashed_write_pending) wsi->ws->stashed_write_type = (char)(*wp) & 0x3f; wsi->ws->stashed_write_pending = 1; return (int)len; } /* * extension recreated it: * need to buffer this if not all sent */ wsi->ws->clean_buffer = 0; } buf = pmdrx.eb_out.token; len = (unsigned int)pmdrx.eb_out.len; if (!buf) { lwsl_err("null buf (%d)\n", (int)len); return -1; } switch (wsi->ws->ietf_spec_revision) { case 13: if (masked7) { pre += 4; dropmask = &buf[0 - pre]; is_masked_bit = 0x80; } switch ((*wp) & 0xf) { case LWS_WRITE_TEXT: n = LWSWSOPC_TEXT_FRAME; break; case LWS_WRITE_BINARY: n = LWSWSOPC_BINARY_FRAME; break; case LWS_WRITE_CONTINUATION: n = LWSWSOPC_CONTINUATION; break; case LWS_WRITE_CLOSE: n = LWSWSOPC_CLOSE; break; case LWS_WRITE_PING: n = LWSWSOPC_PING; break; case LWS_WRITE_PONG: n = LWSWSOPC_PONG; break; default: lwsl_warn("lws_write: unknown write opc / wp\n"); return -1; } if (!((*wp) & LWS_WRITE_NO_FIN)) n |= 1 << 7; if (len < 126) { pre += 2; buf[-pre] = (uint8_t)n; buf[-pre + 1] = (unsigned char)(len | is_masked_bit); } else { if (len < 65536) { pre += 4; buf[-pre] = (uint8_t)n; buf[-pre + 1] = (uint8_t)(126 | is_masked_bit); buf[-pre + 2] = (unsigned char)(len >> 8); buf[-pre + 3] = (unsigned char)len; } else { pre += 10; buf[-pre] = (uint8_t)n; buf[-pre + 1] = (uint8_t)(127 | is_masked_bit); #if defined __LP64__ buf[-pre + 2] = (len >> 56) & 0x7f; buf[-pre + 3] = (uint8_t)(len >> 48); buf[-pre + 4] = (uint8_t)(len >> 40); buf[-pre + 5] = (uint8_t)(len >> 32); #else buf[-pre + 2] = 0; buf[-pre + 3] = 0; buf[-pre + 4] = 0; buf[-pre + 5] = 0; #endif buf[-pre + 6] = (unsigned char)(len >> 24); buf[-pre + 7] = (unsigned char)(len >> 16); buf[-pre + 8] = (unsigned char)(len >> 8); buf[-pre + 9] = (unsigned char)len; } } break; } do_more_inside_frame: /* * Deal with masking if we are in client -> server direction and * the wp demands it */ if (masked7) { if (!wsi->ws->inside_frame) if (lws_0405_frame_mask_generate(wsi)) { lwsl_err("frame mask generation failed\n"); return -1; } /* * in v7, just mask the payload */ if (dropmask) { /* never set if already inside frame */ for (n = 4; n < (int)len + 4; n++) dropmask[n] = dropmask[n] ^ wsi->ws->mask[ (wsi->ws->mask_idx++) & 3]; /* copy the frame nonce into place */ memcpy(dropmask, wsi->ws->mask, 4); } } if (lwsi_role_h2_ENCAPSULATION(wsi)) { struct lws *encap = lws_get_network_wsi(wsi); assert(encap != wsi); return lws_rops_func_fidx(encap->role_ops, LWS_ROPS_write_role_protocol). write_role_protocol(wsi, buf - pre, len + (unsigned int)pre, wp); } switch ((*wp) & 0x1f) { case LWS_WRITE_TEXT: case LWS_WRITE_BINARY: case LWS_WRITE_CONTINUATION: if (!wsi->h2_stream_carries_ws) { /* * give any active extensions a chance to munge the * buffer before send. We pass in a pointer to an * lws_tokens struct prepared with the default buffer * and content length that's in there. Rather than * rewrite the default buffer, extensions that expect * to grow the buffer can adapt .token to point to their * own per-connection buffer in the extension user * allocation. By default with no extensions or no * extension callback handling, just the normal input * buffer is used then so it is efficient. * * callback returns 1 in case it wants to spill more * buffers * * This takes care of holding the buffer if send is * incomplete, ie, if wsi->ws->clean_buffer is 0 * (meaning an extension meddled with the buffer). If * wsi->ws->clean_buffer is 1, it will instead return * to the user code how much OF THE USER BUFFER was * consumed. */ n = lws_issue_raw_ext_access(wsi, buf - pre, len + (unsigned int)pre); wsi->ws->inside_frame = 1; if (n <= 0) return n; if (n == (int)len + pre) { /* everything in the buffer was handled * (or rebuffered...) */ wsi->ws->inside_frame = 0; return (int)orig_len; } /* * it is how many bytes of user buffer got sent... may * be < orig_len in which case callback when writable * has already been arranged and user code can call * lws_write() again with the rest later. */ return n - pre; } break; default: break; } send_raw: return lws_issue_raw(wsi, (unsigned char *)buf - pre, len + (unsigned int)pre); } static int rops_close_kill_connection_ws(struct lws *wsi, enum lws_close_status reason) { /* deal with ws encapsulation in h2 */ #if defined(LWS_WITH_HTTP2) if (wsi->mux_substream && wsi->h2_stream_carries_ws) return lws_rops_func_fidx(&role_ops_h2, LWS_ROPS_close_kill_connection). close_kill_connection(wsi, reason); return 0; #else return 0; #endif } static int rops_callback_on_writable_ws(struct lws *wsi) { #if defined(LWS_WITH_HTTP2) if (lwsi_role_h2_ENCAPSULATION(wsi)) { /* we know then that it has an h2 parent */ struct lws *enc = lws_rops_func_fidx(&role_ops_h2, LWS_ROPS_encapsulation_parent). encapsulation_parent(wsi); assert(enc); if (lws_rops_func_fidx(enc->role_ops, LWS_ROPS_callback_on_writable). callback_on_writable(wsi)) return 1; } #endif return 0; } static int rops_init_vhost_ws(struct lws_vhost *vh, const struct lws_context_creation_info *info) { #if !defined(LWS_WITHOUT_EXTENSIONS) #ifdef LWS_WITH_PLUGINS struct lws_plugin *plugin; int m; if (vh->context->plugin_extension_count) { m = 0; while (info->extensions && info->extensions[m].callback) m++; /* * give the vhost a unified list of extensions including the * ones that came from plugins */ vh->ws.extensions = lws_zalloc(sizeof(struct lws_extension) * (unsigned int)(m + vh->context->plugin_extension_count + 1), "extensions"); if (!vh->ws.extensions) return 1; memcpy((struct lws_extension *)vh->ws.extensions, info->extensions, sizeof(struct lws_extension) * (unsigned int)m); plugin = vh->context->plugin_list; while (plugin) { const lws_plugin_protocol_t *plpr = (const lws_plugin_protocol_t *)plugin->hdr; memcpy((struct lws_extension *)&vh->ws.extensions[m], plpr->extensions, sizeof(struct lws_extension) * (unsigned int)plpr->count_extensions); m += plpr->count_extensions; plugin = plugin->list; } } else #endif vh->ws.extensions = info->extensions; #endif return 0; } static int rops_destroy_vhost_ws(struct lws_vhost *vh) { #ifdef LWS_WITH_PLUGINS #if !defined(LWS_WITHOUT_EXTENSIONS) if (vh->context->plugin_extension_count) lws_free((void *)vh->ws.extensions); #endif #endif return 0; } #if defined(LWS_WITH_HTTP_PROXY) static int ws_destroy_proxy_buf(struct lws_dll2 *d, void *user) { lws_free(d); return 0; } #endif static int rops_destroy_role_ws(struct lws *wsi) { #if defined(LWS_WITH_HTTP_PROXY) lws_dll2_foreach_safe(&wsi->ws->proxy_owner, NULL, ws_destroy_proxy_buf); #endif lws_free_set_NULL(wsi->ws); return 0; } static int rops_issue_keepalive_ws(struct lws *wsi, int isvalid) { uint64_t us; #if defined(LWS_WITH_HTTP2) if (lwsi_role_h2_ENCAPSULATION(wsi)) { /* we know then that it has an h2 parent */ struct lws *enc = lws_rops_func_fidx(&role_ops_h2, LWS_ROPS_encapsulation_parent). encapsulation_parent(wsi); assert(enc); if (lws_rops_func_fidx(enc->role_ops, LWS_ROPS_issue_keepalive). issue_keepalive(enc, isvalid)) return 1; } #endif if (isvalid) _lws_validity_confirmed_role(wsi); else { us = (uint64_t)lws_now_usecs(); memcpy(&wsi->ws->ping_payload_buf[LWS_PRE], &us, 8); wsi->ws->send_check_ping = 1; lws_callback_on_writable(wsi); } return 0; } static const lws_rops_t rops_table_ws[] = { /* 1 */ { .init_vhost = rops_init_vhost_ws }, /* 2 */ { .destroy_vhost = rops_destroy_vhost_ws }, /* 3 */ { .service_flag_pending = rops_service_flag_pending_ws }, /* 4 */ { .handle_POLLIN = rops_handle_POLLIN_ws }, /* 5 */ { .handle_POLLOUT = rops_handle_POLLOUT_ws }, /* 6 */ { .callback_on_writable = rops_callback_on_writable_ws }, /* 7 */ { .write_role_protocol = rops_write_role_protocol_ws }, /* 8 */ { .close_via_role_protocol = rops_close_via_role_protocol_ws }, /* 9 */ { .close_role = rops_close_role_ws }, /* 10 */ { .close_kill_connection = rops_close_kill_connection_ws }, /* 11 */ { .destroy_role = rops_destroy_role_ws }, /* 12 */ { .issue_keepalive = rops_issue_keepalive_ws }, }; const struct lws_role_ops role_ops_ws = { /* role name */ "ws", /* alpn id */ NULL, /* rops_table */ rops_table_ws, /* rops_idx */ { /* LWS_ROPS_check_upgrades */ /* LWS_ROPS_pt_init_destroy */ 0x00, /* LWS_ROPS_init_vhost */ /* LWS_ROPS_destroy_vhost */ 0x12, /* LWS_ROPS_service_flag_pending */ /* LWS_ROPS_handle_POLLIN */ 0x34, /* LWS_ROPS_handle_POLLOUT */ /* LWS_ROPS_perform_user_POLLOUT */ 0x50, /* LWS_ROPS_callback_on_writable */ /* LWS_ROPS_tx_credit */ 0x60, /* LWS_ROPS_write_role_protocol */ /* LWS_ROPS_encapsulation_parent */ 0x70, /* LWS_ROPS_alpn_negotiated */ /* LWS_ROPS_close_via_role_protocol */ 0x08, /* LWS_ROPS_close_role */ /* LWS_ROPS_close_kill_connection */ 0x9a, /* LWS_ROPS_destroy_role */ /* LWS_ROPS_adoption_bind */ 0xb0, /* LWS_ROPS_client_bind */ /* LWS_ROPS_issue_keepalive */ 0x0c, }, /* adoption_cb clnt, srv */ { LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED, LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED }, /* rx_cb clnt, srv */ { LWS_CALLBACK_CLIENT_RECEIVE, LWS_CALLBACK_RECEIVE }, /* writeable cb clnt, srv */ { LWS_CALLBACK_CLIENT_WRITEABLE, LWS_CALLBACK_SERVER_WRITEABLE }, /* close cb clnt, srv */ { LWS_CALLBACK_CLIENT_CLOSED, LWS_CALLBACK_CLOSED }, /* protocol_bind cb c, srv */ { LWS_CALLBACK_WS_CLIENT_BIND_PROTOCOL, LWS_CALLBACK_WS_SERVER_BIND_PROTOCOL }, /* protocol_unbind cb c, srv */ { LWS_CALLBACK_WS_CLIENT_DROP_PROTOCOL, LWS_CALLBACK_WS_SERVER_DROP_PROTOCOL }, /* file handles */ 0 }; libwebsockets-4.3.5/lib/roles/ws/private-lib-roles-ws.h000066400000000000000000000131441476025525100230600ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * This is included from private-lib-core.h if LWS_ROLE_WS */ extern const struct lws_role_ops role_ops_ws; #define lwsi_role_ws(wsi) (wsi->role_ops == &role_ops_ws) enum lws_rx_parse_state { LWS_RXPS_NEW, LWS_RXPS_04_mask_1, LWS_RXPS_04_mask_2, LWS_RXPS_04_mask_3, LWS_RXPS_04_FRAME_HDR_1, LWS_RXPS_04_FRAME_HDR_LEN, LWS_RXPS_04_FRAME_HDR_LEN16_2, LWS_RXPS_04_FRAME_HDR_LEN16_1, LWS_RXPS_04_FRAME_HDR_LEN64_8, LWS_RXPS_04_FRAME_HDR_LEN64_7, LWS_RXPS_04_FRAME_HDR_LEN64_6, LWS_RXPS_04_FRAME_HDR_LEN64_5, LWS_RXPS_04_FRAME_HDR_LEN64_4, LWS_RXPS_04_FRAME_HDR_LEN64_3, LWS_RXPS_04_FRAME_HDR_LEN64_2, LWS_RXPS_04_FRAME_HDR_LEN64_1, LWS_RXPS_07_COLLECT_FRAME_KEY_1, LWS_RXPS_07_COLLECT_FRAME_KEY_2, LWS_RXPS_07_COLLECT_FRAME_KEY_3, LWS_RXPS_07_COLLECT_FRAME_KEY_4, LWS_RXPS_WS_FRAME_PAYLOAD }; enum lws_websocket_opcodes_07 { LWSWSOPC_CONTINUATION = 0, LWSWSOPC_TEXT_FRAME = 1, LWSWSOPC_BINARY_FRAME = 2, LWSWSOPC_NOSPEC__MUX = 7, /* control extensions 8+ */ LWSWSOPC_CLOSE = 8, LWSWSOPC_PING = 9, LWSWSOPC_PONG = 0xa, }; /* this is not usable directly by user code any more, lws_close_reason() */ #define LWS_WRITE_CLOSE 4 #define ALREADY_PROCESSED_IGNORE_CHAR 1 #define ALREADY_PROCESSED_NO_CB 2 #if !defined(LWS_WITHOUT_EXTENSIONS) struct lws_vhost_role_ws { const struct lws_extension *extensions; }; struct lws_pt_role_ws { struct lws *rx_draining_ext_list; struct lws *tx_draining_ext_list; }; #endif #define PAYLOAD_BUF_SIZE 128 - 3 + LWS_PRE struct _lws_websocket_related { unsigned char *rx_ubuf; #if !defined(LWS_WITHOUT_EXTENSIONS) const struct lws_extension *active_extensions[LWS_MAX_EXTENSIONS_ACTIVE]; void *act_ext_user[LWS_MAX_EXTENSIONS_ACTIVE]; struct lws *rx_draining_ext_list; struct lws *tx_draining_ext_list; #endif #if defined(LWS_WITH_HTTP_PROXY) struct lws_dll2_owner proxy_owner; char actual_protocol[16]; size_t proxy_buffered; #endif /* Also used for close content... control opcode == < 128 */ uint8_t ping_payload_buf[PAYLOAD_BUF_SIZE]; uint8_t pong_payload_buf[PAYLOAD_BUF_SIZE]; unsigned int final:1; unsigned int frame_is_binary:1; unsigned int all_zero_nonce:1; unsigned int this_frame_masked:1; unsigned int inside_frame:1; /* next write will be more of frame */ unsigned int clean_buffer:1; /* buffer not rewritten by extension */ unsigned int payload_is_close:1; /* process as PONG, but it is close */ unsigned int pong_pending_flag:1; unsigned int continuation_possible:1; unsigned int owed_a_fin:1; unsigned int check_utf8:1; unsigned int defeat_check_utf8:1; unsigned int stashed_write_pending:1; unsigned int send_check_ping:1; unsigned int first_fragment:1; unsigned int peer_has_sent_close:1; #if !defined(LWS_WITHOUT_EXTENSIONS) unsigned int extension_data_pending:1; unsigned int rx_draining_ext:1; unsigned int tx_draining_ext:1; unsigned int pmd_trailer_application:1; #endif uint8_t mask[4]; size_t rx_packet_length; uint32_t rx_ubuf_head; uint32_t rx_ubuf_alloc; uint8_t pong_payload_len; uint8_t mask_idx; uint8_t opcode; uint8_t rsv; uint8_t rsv_first_msg; /* zero if no info, or length including 2-byte close code */ uint8_t close_in_ping_buffer_len; uint8_t utf8; uint8_t stashed_write_type; uint8_t tx_draining_stashed_wp; uint8_t ietf_spec_revision; #if !defined(LWS_WITHOUT_EXTENSIONS) uint8_t count_act_ext; #endif }; /* * we need to separately track what's happening with both compressed rx in * and with inflated rx out that will be passed to the user code */ struct lws_ext_pm_deflate_rx_ebufs { struct lws_tokens eb_in; struct lws_tokens eb_out; }; int lws_ws_handshake_client(struct lws *wsi, unsigned char **buf, size_t len); #if !defined(LWS_WITHOUT_EXTENSIONS) LWS_VISIBLE void lws_context_init_extensions(const struct lws_context_creation_info *info, struct lws_context *context); LWS_EXTERN int lws_any_extension_handled(struct lws *wsi, enum lws_extension_callback_reasons r, void *v, size_t len); LWS_EXTERN int lws_ext_cb_active(struct lws *wsi, int reason, void *buf, int len); LWS_EXTERN int lws_ext_cb_all_exts(struct lws_context *context, struct lws *wsi, int reason, void *arg, int len); #endif int handshake_0405(struct lws_context *context, struct lws *wsi); int lws_process_ws_upgrade(struct lws *wsi); int lws_process_ws_upgrade2(struct lws *wsi); extern const struct lws_protocols lws_ws_proxy; int lws_server_init_wsi_for_ws(struct lws *wsi); void lws_sul_wsping_cb(lws_sorted_usec_list_t *sul); libwebsockets-4.3.5/lib/roles/ws/server-ws.c000066400000000000000000000671471476025525100210350ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include #define LWS_CPYAPP(ptr, str) { strcpy(ptr, str); ptr += strlen(str); } #if !defined(LWS_WITHOUT_EXTENSIONS) static int lws_extension_server_handshake(struct lws *wsi, char **p, int budget) { struct lws_context *context = wsi->a.context; struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; char ext_name[64], *args, *end = (*p) + budget - 1; const struct lws_ext_options *opts, *po; const struct lws_extension *ext; struct lws_ext_option_arg oa; int n, m, more = 1; int ext_count = 0; char ignore; char *c; /* * Figure out which extensions the client has that we want to * enable on this connection, and give him back the list */ if (!lws_hdr_total_length(wsi, WSI_TOKEN_EXTENSIONS)) return 0; /* * break down the list of client extensions * and go through them */ if (lws_hdr_copy(wsi, (char *)pt->serv_buf, (int)context->pt_serv_buf_size, WSI_TOKEN_EXTENSIONS) < 0) return 1; c = (char *)pt->serv_buf; lwsl_parser("WSI_TOKEN_EXTENSIONS = '%s'\n", c); wsi->ws->count_act_ext = 0; ignore = 0; n = 0; args = NULL; /* * We may get a simple request * * Sec-WebSocket-Extensions: permessage-deflate * * or an elaborated one with requested options * * Sec-WebSocket-Extensions: permessage-deflate; \ * server_no_context_takeover; \ * client_no_context_takeover */ while (more) { if (c >= (char *)pt->serv_buf + 255) return -1; if (*c && (*c != ',' && *c != '\t')) { if (*c == ';') { ignore = 1; if (!args) args = c + 1; } if (ignore || *c == ' ') { c++; continue; } ext_name[n] = *c++; if (n < (int)sizeof(ext_name) - 1) n++; continue; } ext_name[n] = '\0'; ignore = 0; if (!*c) more = 0; else { c++; if (!n) continue; } while (args && *args == ' ') args++; /* check a client's extension against our support */ ext = wsi->a.vhost->ws.extensions; while (ext && ext->callback) { if (strcmp(ext_name, ext->name)) { ext++; continue; } /* * oh, we do support this one he asked for... but let's * confirm he only gave it once */ for (m = 0; m < wsi->ws->count_act_ext; m++) if (wsi->ws->active_extensions[m] == ext) { lwsl_info("ext mentioned twice\n"); return 1; /* shenanigans */ } /* * ask user code if it's OK to apply it on this * particular connection + protocol */ m = (wsi->a.protocol->callback)(wsi, LWS_CALLBACK_CONFIRM_EXTENSION_OKAY, wsi->user_space, ext_name, 0); /* * zero return from callback means go ahead and allow * the extension, it's what we get if the callback is * unhandled */ if (m) { ext++; continue; } /* apply it */ ext_count++; /* instantiate the extension on this conn */ wsi->ws->active_extensions[wsi->ws->count_act_ext] = ext; /* allow him to construct his context */ if (ext->callback(lws_get_context(wsi), ext, wsi, LWS_EXT_CB_CONSTRUCT, (void *)&wsi->ws->act_ext_user[ wsi->ws->count_act_ext], (void *)&opts, 0)) { lwsl_info("ext %s failed construction\n", ext_name); ext_count--; ext++; continue; } if (ext_count > 1) *(*p)++ = ','; else LWS_CPYAPP(*p, "\x0d\x0aSec-WebSocket-Extensions: "); *p += lws_snprintf(*p, lws_ptr_diff_size_t(end, *p), "%s", ext_name); /* * The client may send a bunch of different option * sets for the same extension, we are supposed to * pick one we like the look of. The option sets are * separated by comma. * * Actually we just either accept the first one or * nothing. * * Go through the options trying to apply the * recognized ones */ lwsl_info("ext args %s\n", args); while (args && *args && *args != ',') { while (*args == ' ') args++; po = opts; while (po->name) { /* only support arg-less options... */ if (po->type != EXTARG_NONE || strncmp(args, po->name, strlen(po->name))) { po++; continue; } oa.option_name = NULL; oa.option_index = (int)(po - opts); oa.start = NULL; oa.len = 0; lwsl_info("setting '%s'\n", po->name); if (!ext->callback(lws_get_context(wsi), ext, wsi, LWS_EXT_CB_OPTION_SET, wsi->ws->act_ext_user[ wsi->ws->count_act_ext], &oa, lws_ptr_diff_size_t(end, *p))) { *p += lws_snprintf(*p, lws_ptr_diff_size_t(end, *p), "; %s", po->name); lwsl_debug("adding option %s\n", po->name); } po++; } while (*args && *args != ',' && *args != ';') args++; if (*args == ';') args++; } wsi->ws->count_act_ext++; lwsl_parser("cnt_act_ext <- %d\n", wsi->ws->count_act_ext); if (args && *args == ',') more = 0; ext++; } n = 0; args = NULL; } return 0; } #endif int lws_process_ws_upgrade2(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; #if defined(LWS_WITH_HTTP_BASIC_AUTH) const struct lws_protocol_vhost_options *pvos = NULL; const char *ws_prot_basic_auth = NULL; /* * Allow basic auth a look-in now we bound the wsi to the protocol. * * For vhost ws basic auth, it is "basic-auth": "path" as usual but * applied to the protocol's entry in the vhost's "ws-protocols": * section, as a pvo. */ pvos = lws_vhost_protocol_options(wsi->a.vhost, wsi->a.protocol->name); if (pvos && pvos->options && !lws_pvo_get_str((void *)pvos->options, "basic-auth", &ws_prot_basic_auth)) { lwsl_info("%s: ws upgrade requires basic auth\n", __func__); switch (lws_check_basic_auth(wsi, ws_prot_basic_auth, LWSAUTHM_DEFAULT /* no callback based auth here */)) { case LCBA_CONTINUE: break; case LCBA_FAILED_AUTH: return lws_unauthorised_basic_auth(wsi); case LCBA_END_TRANSACTION: lws_return_http_status(wsi, HTTP_STATUS_FORBIDDEN, NULL); return lws_http_transaction_completed(wsi); } } #endif /* * We are upgrading to ws, so http/1.1 + h2 and keepalive + pipelined * header considerations about keeping the ah around no longer apply. * * However it's common for the first ws protocol data to have been * coalesced with the browser upgrade request and to already be in the * ah rx buffer. */ lws_pt_lock(pt, __func__); /* * Switch roles if we're upgrading away from http */ if (!wsi->h2_stream_carries_ws) { lws_role_transition(wsi, LWSIFR_SERVER, LRS_ESTABLISHED, &role_ops_ws); #if defined(LWS_WITH_SECURE_STREAMS) && defined(LWS_WITH_SERVER) /* * If we're a SS server object, we have to switch to ss-ws * protocol handler too */ if (wsi->a.vhost->ss_handle) { lwsl_info("%s: %s switching to ws protocol\n", __func__, lws_ss_tag(wsi->a.vhost->ss_handle)); wsi->a.protocol = &protocol_secstream_ws; /* * inform the SS user code that this has done a one-way * upgrade to some other protocol... it will likely * want to treat subsequent payloads differently */ (void)lws_ss_event_helper(wsi->a.vhost->ss_handle, LWSSSCS_SERVER_UPGRADE); } #endif } lws_pt_unlock(pt); /* allocate the ws struct for the wsi */ wsi->ws = lws_zalloc(sizeof(*wsi->ws), "ws struct"); if (!wsi->ws) { lwsl_notice("OOM\n"); return 1; } if (lws_hdr_total_length(wsi, WSI_TOKEN_VERSION)) wsi->ws->ietf_spec_revision = (uint8_t) atoi(lws_hdr_simple_ptr(wsi, WSI_TOKEN_VERSION)); /* allocate wsi->user storage */ if (lws_ensure_user_space(wsi)) { lwsl_notice("problem with user space\n"); return 1; } /* * Give the user code a chance to study the request and * have the opportunity to deny it */ if ((wsi->a.protocol->callback)(wsi, LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION, wsi->user_space, lws_hdr_simple_ptr(wsi, WSI_TOKEN_PROTOCOL), 0)) { lwsl_warn("User code denied connection\n"); return 1; } /* * Perform the handshake according to the protocol version the * client announced */ switch (wsi->ws->ietf_spec_revision) { default: lwsl_notice("Unknown client spec version %d\n", wsi->ws->ietf_spec_revision); wsi->ws->ietf_spec_revision = 13; //return 1; /* fallthru */ case 13: #if defined(LWS_WITH_HTTP2) if (wsi->h2_stream_carries_ws) { if (lws_h2_ws_handshake(wsi)) { lwsl_notice("h2 ws handshake failed\n"); return 1; } lws_role_transition(wsi, LWSIFR_SERVER | LWSIFR_P_ENCAP_H2, LRS_ESTABLISHED, &role_ops_ws); /* * There should be no validity checking since we * are encapsulated in something else with its own * validity checking */ lws_sul_cancel(&wsi->sul_validity); } else #endif { lwsl_parser("lws_parse calling handshake_04\n"); if (handshake_0405(wsi->a.context, wsi)) { lwsl_notice("hs0405 has failed the connection\n"); return 1; } } break; } if (lws_server_init_wsi_for_ws(wsi)) { lwsl_notice("%s: user ESTABLISHED failed connection\n", __func__); return 1; } lwsl_parser("accepted v%02d connection\n", wsi->ws->ietf_spec_revision); #if defined(LWS_WITH_ACCESS_LOG) { char *uptr = "unknown method", combo[128], dotstar[64]; int l = 14, meth = lws_http_get_uri_and_method(wsi, &uptr, &l); if (wsi->h2_stream_carries_ws) wsi->http.request_version = HTTP_VERSION_2; wsi->http.access_log.response = 101; lws_strnncpy(dotstar, uptr, l, sizeof(dotstar)); l = lws_snprintf(combo, sizeof(combo), "%s (%s)", dotstar, wsi->a.protocol->name); if (meth < 0) meth = 0; lws_prepare_access_log_info(wsi, combo, l, meth); lws_access_log(wsi); } #endif lwsl_info("%s: %s: dropping ah on ws upgrade\n", __func__, lws_wsi_tag(wsi)); lws_header_table_detach(wsi, 1); return 0; } int lws_process_ws_upgrade(struct lws *wsi) { const struct lws_protocols *pcol = NULL; char buf[128], name[64]; struct lws_tokenize ts; lws_tokenize_elem e; int n; if (!wsi->a.protocol) lwsl_err("NULL protocol at lws_read\n"); /* * It's either websocket or h2->websocket * * If we are on h1, confirm we got the required "connection: upgrade" * header. h2 / ws-over-h2 does not have this. */ #if defined(LWS_WITH_HTTP2) if (!wsi->mux_substream) { #endif lws_tokenize_init(&ts, buf, LWS_TOKENIZE_F_COMMA_SEP_LIST | LWS_TOKENIZE_F_DOT_NONTERM | LWS_TOKENIZE_F_RFC7230_DELIMS | LWS_TOKENIZE_F_MINUS_NONTERM); n = lws_hdr_copy(wsi, buf, sizeof(buf) - 1, WSI_TOKEN_CONNECTION); if (n <= 0) goto bad_conn_format; ts.len = (unsigned int)n; do { e = lws_tokenize(&ts); switch (e) { case LWS_TOKZE_TOKEN: if (!strncasecmp(ts.token, "upgrade", ts.token_len)) e = LWS_TOKZE_ENDED; break; case LWS_TOKZE_DELIMITER: break; default: /* includes ENDED */ bad_conn_format: lwsl_err("%s: malformed or absent conn hdr\n", __func__); return 1; } } while (e > 0); #if defined(LWS_WITH_HTTP2) } #endif #if defined(LWS_WITH_HTTP_PROXY) { const struct lws_http_mount *hit; int uri_len = 0, meth; char *uri_ptr; meth = lws_http_get_uri_and_method(wsi, &uri_ptr, &uri_len); hit = lws_find_mount(wsi, uri_ptr, uri_len); if (hit && (meth == LWSHUMETH_GET || meth == LWSHUMETH_CONNECT || meth == LWSHUMETH_COLON_PATH) && (hit->origin_protocol == LWSMPRO_HTTPS || hit->origin_protocol == LWSMPRO_HTTP)) /* * We are an h1 ws upgrade on a urlpath that corresponds * to a proxying mount. Don't try to deal with it * locally, eg, we won't even have the right protocol * handler since we're not the guy handling it, just a * conduit. * * Instead open the related ongoing h1 connection * according to the mount configuration and proxy * whatever that has to say from now on. */ return lws_http_proxy_start(wsi, hit, uri_ptr, 1); } #endif /* * Select the first protocol we support from the list * the client sent us. */ lws_tokenize_init(&ts, buf, LWS_TOKENIZE_F_COMMA_SEP_LIST | LWS_TOKENIZE_F_MINUS_NONTERM | LWS_TOKENIZE_F_DOT_NONTERM | LWS_TOKENIZE_F_RFC7230_DELIMS); n = lws_hdr_copy(wsi, buf, sizeof(buf) - 1, WSI_TOKEN_PROTOCOL); if (n < 0) { lwsl_err("%s: protocol list too long\n", __func__); return 1; } ts.len = (unsigned int)n; if (!ts.len) { int n = wsi->a.vhost->default_protocol_index; /* * Some clients only have one protocol and do not send the * protocol list header... allow it and match to the vhost's * default protocol (which itself defaults to zero). * * Setting the vhost default protocol index to -1 or anything * more than the actual number of protocols on the vhost causes * these "no protocol" ws connections to be rejected. */ if (n >= wsi->a.vhost->count_protocols) { lwsl_notice("%s: rejecting ws upg with no protocol\n", __func__); return 1; } lwsl_info("%s: defaulting to prot handler %d\n", __func__, n); lws_bind_protocol(wsi, &wsi->a.vhost->protocols[n], "ws upgrade default pcol"); goto alloc_ws; } #if defined(LWS_WITH_SECURE_STREAMS) && defined(LWS_WITH_SERVER) if (wsi->a.vhost->ss_handle) { lws_ss_handle_t *sssh = wsi->a.vhost->ss_handle; /* * At the moment, once we see it's a ss ws server, whatever * he asked for we bind him to the ss-ws protocol handler. * * In the response subprotocol header, we need to name * * sssh->policy->u.http.u.ws.subprotocol * * though... */ if (sssh->policy->u.http.u.ws.subprotocol) { pcol = lws_vhost_name_to_protocol(wsi->a.vhost, "lws-secstream-ws"); if (pcol) { lws_bind_protocol(wsi, pcol, "ss ws upg pcol"); goto alloc_ws; } } } #endif /* otherwise go through the user-provided protocol list */ do { e = lws_tokenize(&ts); switch (e) { case LWS_TOKZE_TOKEN: if (lws_tokenize_cstr(&ts, name, sizeof(name))) { lwsl_err("%s: pcol name too long\n", __func__); return 1; } lwsl_debug("checking %s\n", name); pcol = lws_vhost_name_to_protocol(wsi->a.vhost, name); if (pcol) { /* if we know it, bind to it and stop looking */ lws_bind_protocol(wsi, pcol, "ws upg pcol"); e = LWS_TOKZE_ENDED; } break; case LWS_TOKZE_DELIMITER: case LWS_TOKZE_ENDED: break; default: lwsl_err("%s: malformatted protocol list", __func__); return 1; } } while (e > 0); /* we didn't find a protocol he wanted? */ if (!pcol) { lwsl_notice("No supported protocol \"%s\"\n", buf); return 1; } alloc_ws: return lws_process_ws_upgrade2(wsi); } int handshake_0405(struct lws_context *context, struct lws *wsi) { struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; struct lws_process_html_args args; unsigned char hash[20]; int n, accept_len; char *response; char *p; if (!lws_hdr_total_length(wsi, WSI_TOKEN_HOST) || !lws_hdr_total_length(wsi, WSI_TOKEN_KEY)) { lwsl_info("handshake_04 missing pieces\n"); /* completed header processing, but missing some bits */ goto bail; } if (lws_hdr_total_length(wsi, WSI_TOKEN_KEY) >= MAX_WEBSOCKET_04_KEY_LEN) { lwsl_warn("Client key too long %d\n", MAX_WEBSOCKET_04_KEY_LEN); goto bail; } /* * since key length is restricted above (currently 128), cannot * overflow */ n = sprintf((char *)pt->serv_buf, "%s258EAFA5-E914-47DA-95CA-C5AB0DC85B11", lws_hdr_simple_ptr(wsi, WSI_TOKEN_KEY)); lws_SHA1(pt->serv_buf, (unsigned int)n, hash); accept_len = lws_b64_encode_string((char *)hash, 20, (char *)pt->serv_buf, (int)context->pt_serv_buf_size); if (accept_len < 0) { lwsl_warn("Base64 encoded hash too long\n"); goto bail; } /* allocate the per-connection user memory (if any) */ if (lws_ensure_user_space(wsi)) goto bail; /* create the response packet */ /* make a buffer big enough for everything */ response = (char *)pt->serv_buf + MAX_WEBSOCKET_04_KEY_LEN + 256 + LWS_PRE; p = response; LWS_CPYAPP(p, "HTTP/1.1 101 Switching Protocols\x0d\x0a" "Upgrade: WebSocket\x0d\x0a" "Connection: Upgrade\x0d\x0a" "Sec-WebSocket-Accept: "); strcpy(p, (char *)pt->serv_buf); p += accept_len; /* we can only return the protocol header if: * - one came in, and ... */ if (lws_hdr_total_length(wsi, WSI_TOKEN_PROTOCOL) && /* - it is not an empty string */ wsi->a.protocol->name && wsi->a.protocol->name[0]) { const char *prot = wsi->a.protocol->name; #if defined(LWS_WITH_HTTP_PROXY) if (wsi->proxied_ws_parent && wsi->child_list) prot = wsi->child_list->ws->actual_protocol; #endif #if defined(LWS_WITH_SECURE_STREAMS) && defined(LWS_WITH_SERVER) { lws_ss_handle_t *sssh = wsi->a.vhost->ss_handle; /* * At the moment, once we see it's a ss ws server, whatever * he asked for we bind him to the ss-ws protocol handler. * * In the response subprotocol header, we need to name * * sssh->policy->u.http.u.ws.subprotocol * * though... */ if (sssh && sssh->policy && sssh->policy->u.http.u.ws.subprotocol) prot = sssh->policy->u.http.u.ws.subprotocol; } #endif LWS_CPYAPP(p, "\x0d\x0aSec-WebSocket-Protocol: "); p += lws_snprintf(p, 128, "%s", prot); } #if !defined(LWS_WITHOUT_EXTENSIONS) /* * Figure out which extensions the client has that we want to * enable on this connection, and give him back the list. * * Give him a limited write bugdet */ if (lws_extension_server_handshake(wsi, &p, 192)) goto bail; #endif LWS_CPYAPP(p, "\x0d\x0a"); args.p = p; args.max_len = lws_ptr_diff((char *)pt->serv_buf + context->pt_serv_buf_size, p); if (user_callback_handle_rxflow(wsi->a.protocol->callback, wsi, LWS_CALLBACK_ADD_HEADERS, wsi->user_space, &args, 0)) goto bail; p = args.p; /* end of response packet */ LWS_CPYAPP(p, "\x0d\x0a"); /* okay send the handshake response accepting the connection */ lwsl_parser("issuing resp pkt %d len\n", lws_ptr_diff(p, response)); #if defined(DEBUG) fwrite(response, 1, p - response, stderr); #endif n = lws_write(wsi, (unsigned char *)response, lws_ptr_diff_size_t(p, response), LWS_WRITE_HTTP_HEADERS); if (n != lws_ptr_diff(p, response)) { lwsl_info("%s: ERROR writing to socket %d\n", __func__, n); goto bail; } /* alright clean up and set ourselves into established state */ lwsi_set_state(wsi, LRS_ESTABLISHED); wsi->lws_rx_parse_state = LWS_RXPS_NEW; { const char * uri_ptr = lws_hdr_simple_ptr(wsi, WSI_TOKEN_GET_URI); int uri_len = lws_hdr_total_length(wsi, WSI_TOKEN_GET_URI); const struct lws_http_mount *hit = lws_find_mount(wsi, uri_ptr, uri_len); if (hit && hit->cgienv && wsi->a.protocol->callback(wsi, LWS_CALLBACK_HTTP_PMO, wsi->user_space, (void *)hit->cgienv, 0)) return 1; } return 0; bail: /* caller will free up his parsing allocations */ return -1; } /* * Once we reach LWS_RXPS_WS_FRAME_PAYLOAD, we know how much * to expect in that state and can deal with it in bulk more efficiently. */ static int lws_ws_frame_rest_is_payload(struct lws *wsi, uint8_t **buf, size_t len) { struct lws_ext_pm_deflate_rx_ebufs pmdrx; unsigned int avail = (unsigned int)len; uint8_t *buffer = *buf, mask[4]; #if !defined(LWS_WITHOUT_EXTENSIONS) unsigned int old_packet_length = (unsigned int)wsi->ws->rx_packet_length; #endif int n = 0; /* * With zlib, we can give it as much input as we like. The pmd * extension will draw it down in chunks (default 1024). * * If we try to restrict how much we give it, because we must go * back to the event loop each time, we will drop the remainder... */ #if !defined(LWS_WITHOUT_EXTENSIONS) if (!wsi->ws->count_act_ext) #endif { if (wsi->a.protocol->rx_buffer_size) avail = (unsigned int)wsi->a.protocol->rx_buffer_size; else avail = wsi->a.context->pt_serv_buf_size; } /* do not consume more than we should */ if (avail > wsi->ws->rx_packet_length) avail = (unsigned int)wsi->ws->rx_packet_length; /* do not consume more than what is in the buffer */ if (avail > len) avail = (unsigned int)len; if (!avail) return 0; pmdrx.eb_in.token = buffer; pmdrx.eb_in.len = (int)avail; pmdrx.eb_out.token = buffer; pmdrx.eb_out.len = (int)avail; if (!wsi->ws->all_zero_nonce) { for (n = 0; n < 4; n++) mask[n] = wsi->ws->mask[(wsi->ws->mask_idx + n) & 3]; /* deal with 4-byte chunks using unwrapped loop */ n = (int)(avail >> 2); while (n--) { *(buffer) = *(buffer) ^ mask[0]; buffer++; *(buffer) = *(buffer) ^ mask[1]; buffer++; *(buffer) = *(buffer) ^ mask[2]; buffer++; *(buffer) = *(buffer) ^ mask[3]; buffer++; } /* and the remaining bytes bytewise */ for (n = 0; n < (int)(avail & 3); n++) { *(buffer) = *(buffer) ^ mask[n]; buffer++; } wsi->ws->mask_idx = (wsi->ws->mask_idx + avail) & 3; } lwsl_info("%s: using %d of raw input (total %d on offer)\n", __func__, avail, (int)len); (*buf) += avail; len -= avail; wsi->ws->rx_packet_length -= avail; #if !defined(LWS_WITHOUT_EXTENSIONS) n = lws_ext_cb_active(wsi, LWS_EXT_CB_PAYLOAD_RX, &pmdrx, 0); lwsl_info("%s: ext says %d / ebuf_out.len %d\n", __func__, n, pmdrx.eb_out.len); /* * ebuf may be pointing somewhere completely different now, * it's the output */ if (n < 0) { /* * we may rely on this to get RX, just drop connection */ lwsl_notice("%s: LWS_EXT_CB_PAYLOAD_RX blew out\n", __func__); wsi->socket_is_permanently_unusable = 1; return -1; } /* * if we had an rx fragment right at the last compressed byte of the * message, we can get a zero length inflated output, where no prior * rx inflated output marked themselves with FIN, since there was * raw ws payload still to drain at that time. * * Then we need to generate a zero length ws rx that can be understood * as the message completion. */ if (!pmdrx.eb_out.len && /* zero-length inflation output */ n == PMDR_EMPTY_FINAL && /* nothing to drain from the inflator */ old_packet_length && /* we gave the inflator new input */ !wsi->ws->rx_packet_length && /* raw ws packet payload all gone */ wsi->ws->final && /* the raw ws packet is a FIN guy */ wsi->a.protocol->callback && !wsi->wsistate_pre_close) { lwsl_ext("%s: issuing zero length FIN pkt\n", __func__); if (user_callback_handle_rxflow(wsi->a.protocol->callback, wsi, LWS_CALLBACK_RECEIVE, wsi->user_space, NULL, 0)) return -1; return (int)avail; } /* * If doing permessage-deflate, above was the only way to get a zero * length receive. Otherwise we're more willing. */ if (wsi->ws->count_act_ext && !pmdrx.eb_out.len) return (int)avail; if (n == PMDR_HAS_PENDING) /* extension had more... main loop will come back */ lws_add_wsi_to_draining_ext_list(wsi); else lws_remove_wsi_from_draining_ext_list(wsi); #endif if (pmdrx.eb_out.len && wsi->ws->check_utf8 && !wsi->ws->defeat_check_utf8) { if (lws_check_utf8(&wsi->ws->utf8, pmdrx.eb_out.token, (unsigned int)pmdrx.eb_out.len)) { lws_close_reason(wsi, LWS_CLOSE_STATUS_INVALID_PAYLOAD, (uint8_t *)"bad utf8", 8); goto utf8_fail; } /* we are ending partway through utf-8 character? */ if (!wsi->ws->rx_packet_length && wsi->ws->final && wsi->ws->utf8 && !n) { lwsl_info("FINAL utf8 error\n"); lws_close_reason(wsi, LWS_CLOSE_STATUS_INVALID_PAYLOAD, (uint8_t *)"partial utf8", 12); utf8_fail: lwsl_info("utf8 error\n"); lwsl_hexdump_info(pmdrx.eb_out.token, (size_t)pmdrx.eb_out.len); return -1; } } if (wsi->a.protocol->callback && !wsi->wsistate_pre_close) if (user_callback_handle_rxflow(wsi->a.protocol->callback, wsi, LWS_CALLBACK_RECEIVE, wsi->user_space, pmdrx.eb_out.token, (unsigned int)pmdrx.eb_out.len)) return -1; wsi->ws->first_fragment = 0; #if !defined(LWS_WITHOUT_EXTENSIONS) lwsl_info("%s: input used %d, output %d, rem len %d, rx_draining_ext %d\n", __func__, avail, pmdrx.eb_out.len, (int)len, wsi->ws->rx_draining_ext); #endif return (int)avail; /* how much we used from the input */ } int lws_parse_ws(struct lws *wsi, unsigned char **buf, size_t len) { unsigned char *bufin = *buf; int m, bulk = 0; lwsl_debug("%s: received %d byte packet\n", __func__, (int)len); //lwsl_hexdump_notice(*buf, len); /* let the rx protocol state machine have as much as it needs */ while (len) { /* * we were accepting input but now we stopped doing so */ if (wsi->rxflow_bitmap) { lwsl_info("%s: doing rxflow, caching %d\n", __func__, (int)len); /* * Since we cached the remaining available input, we * can say we "consumed" it. * * But what about the case where the available input * came out of the rxflow cache already? If we are * effectively "putting it back in the cache", we have * leave it where it is, already pointed to by the head. */ if (lws_rxflow_cache(wsi, *buf, 0, len) == LWSRXFC_TRIMMED) { /* * We dealt with it by trimming the existing * rxflow cache HEAD to account for what we used. * * so he doesn't do any consumed processing */ lwsl_info("%s: trimming inside rxflow cache\n", __func__); *buf = bufin; } else *buf += len; return 1; } #if !defined(LWS_WITHOUT_EXTENSIONS) if (wsi->ws->rx_draining_ext) { lwsl_debug("%s: draining rx ext\n", __func__); m = lws_ws_rx_sm(wsi, ALREADY_PROCESSED_IGNORE_CHAR, 0); if (m < 0) return -1; continue; } #endif /* consume payload bytes efficiently */ while (wsi->lws_rx_parse_state == LWS_RXPS_WS_FRAME_PAYLOAD && (wsi->ws->opcode == LWSWSOPC_TEXT_FRAME || wsi->ws->opcode == LWSWSOPC_BINARY_FRAME || wsi->ws->opcode == LWSWSOPC_CONTINUATION) && len) { uint8_t *bin = *buf; bulk = 1; m = lws_ws_frame_rest_is_payload(wsi, buf, len); assert((int)lws_ptr_diff(*buf, bin) <= (int)len); len -= lws_ptr_diff_size_t(*buf, bin); if (!m) { break; } if (m < 0) { lwsl_info("%s: rest_is_payload bailed\n", __func__); return -1; } } if (!bulk) { /* process the byte */ m = lws_ws_rx_sm(wsi, 0, *(*buf)++); len--; } else { /* * We already handled this byte in bulk, just deal * with the ramifications */ #if !defined(LWS_WITHOUT_EXTENSIONS) lwsl_debug("%s: coming out of bulk with len %d, " "wsi->ws->rx_draining_ext %d\n", __func__, (int)len, wsi->ws->rx_draining_ext); #endif m = lws_ws_rx_sm(wsi, ALREADY_PROCESSED_IGNORE_CHAR | ALREADY_PROCESSED_NO_CB, 0); } if (m < 0) { lwsl_info("%s: lws_ws_rx_sm bailed %d\n", __func__, bulk); return -1; } bulk = 0; } lwsl_debug("%s: exit with %d unused\n", __func__, (int)len); return 0; } libwebsockets-4.3.5/lib/secure-streams/000077500000000000000000000000001476025525100201025ustar00rootroot00000000000000libwebsockets-4.3.5/lib/secure-streams/CMakeLists.txt000066400000000000000000000077561476025525100226610ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # include_directories(.) if (LWS_WITH_CLIENT) list(APPEND SOURCES secure-streams/secure-streams.c secure-streams/policy-common.c secure-streams/system/captive-portal-detect/captive-portal-detect.c secure-streams/protocols/ss-raw.c ) if (NOT LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY) list(APPEND SOURCES secure-streams/policy-json.c secure-streams/system/fetch-policy/fetch-policy.c ) endif() if (LWS_ROLE_H1) list(APPEND SOURCES secure-streams/protocols/ss-h1.c ) endif() if (LWS_ROLE_H2) list(APPEND SOURCES secure-streams/protocols/ss-h2.c ) endif() if (LWS_ROLE_WS) list(APPEND SOURCES secure-streams/protocols/ss-ws.c ) endif() if (LWS_ROLE_MQTT) list(APPEND SOURCES secure-streams/protocols/ss-mqtt.c ) endif() if (LWS_WITH_SECURE_STREAMS_PROXY_API) list(APPEND SOURCES secure-streams/secure-streams-serialize.c secure-streams/secure-streams-client.c ) endif() if (LWS_WITH_SECURE_STREAMS_PROXY_API) list(APPEND SOURCES secure-streams/secure-streams-process.c ) endif() if (LWS_WITH_SECURE_STREAMS_SYS_AUTH_API_AMAZON_COM AND LWS_WITH_SYS_STATE) list(APPEND SOURCES secure-streams/system/auth-api.amazon.com/auth.c ) endif() if (LWS_WITH_SECURE_STREAMS_AUTH_SIGV4) list(APPEND SOURCES secure-streams/system/auth-sigv4/sign.c ) endif() if (LWS_WITH_SECURE_STREAMS_CPP) list(APPEND SOURCES secure-streams/cpp/lss.cxx) if (LWS_ROLE_H1 OR LWS_ROLE_H2) list(APPEND SOURCES secure-streams/cpp/lssFile.cxx) endif() if (LWS_ROLE_WS) list(APPEND SOURCES secure-streams/cpp/lssMsg.cxx) endif() endif() # # Helper function for adding a secure stream plugin # macro(create_ss_plugin NAME S2 S3 S4 S5 S6) set(SSP_SRCS) set(SSP_PUBLIC_HDR) set(SSP_HDR) if ("${S2}" STREQUAL "") else() list(APPEND SSP_SRCS plugins/${NAME}/${S2}) endif() if ("${S3}" STREQUAL "") else() list(APPEND SSP_SRCS plugins/${NAME}/${S3}) endif() if ("${S4}" STREQUAL "") else() list(APPEND SSP_SRCS plugins/${NAME}/${S4}) endif() if ("${S5}" STREQUAL "") else() list(APPEND SSP_SRCS plugins/${NAME}/${S5}) endif() if ("${S6}" STREQUAL "") else() list(APPEND SSP_SRCS plugins/${NAME}/${S6}) endif() source_group("Headers Private" FILES ${SSP_HDR}) source_group("Sources" FILES ${SSP_SRCS}) add_library( ${NAME} STATIC ${SSP_HDR} ${SSP_PUBLIC_HDR} ${SSP_SRCS} ) target_include_directories(${NAME} PRIVATE "${LWS_LIB_INCLUDES}" ${LWS_LIB_BUILD_INC_PATHS}) if (NOT LWS_PLAT_FREERTOS) add_dependencies(${NAME} websockets_shared) endif() list(APPEND SS_PLUGINS_LIST ${NAME}) endmacro() # create_ss_plugin(ssp-h1url "h1url.c" "" "" "" "") endif() # # Keep explicit parent scope exports at end # exports_to_parent_scope() libwebsockets-4.3.5/lib/secure-streams/README.md000066400000000000000000000771741476025525100214010ustar00rootroot00000000000000# Secure Streams Secure Streams is a networking api that strictly separates payload from any metadata. That includes the client endpoint address for the connection, the tls trust chain and even the protocol used to connect to the endpoint. The user api just receives and transmits payload, and receives advisory connection state information. The details about how the connections for different types of secure stream should be made are held in JSON "policy database" initially passed in to the context creation, but able to be updated from a remote copy. Both client and server networking can be handled using Secure Streams APIS. ![overview](/doc-assets/ss-operation-modes.png) ## Secure Streams CLIENT State lifecycle ![overview](/doc-assets/ss-state-flow.png) Secure Streams are created using `lws_ss_create()`, after that they may acquire underlying connections, and lose them, but the lifecycle of the Secure Stream itself is not directly related to any underlying connection. Once created, Secure Streams may attempt connections, these may fail and once the number of failures exceeds the count of attempts to conceal in the retry / backoff policy, the stream reaches `LWSSSCS_ALL_RETRIES_FAILED`. The stream becomes idle again until another explicit connection attempt is given. Once connected, the user code can use `lws_ss_request_tx()` to ask for a slot to write to the peer, when this if forthcoming the tx handler can send a message. If the underlying protocol gives indications of transaction success, such as, eg, a 200 for http, or an ACK from MQTT, the stream state is called back with an `LWSSSCS_QOS_ACK_REMOTE` or `LWSSSCS_QOS_NACK_REMOTE`. ## SS Callback return handling SS state(), rx() and tx() can indicate with their return code some common situations that should be handled by the caller. Constant|Scope|Meaning ---|---|--- LWSSSSRET_TX_DONT_SEND|tx|This opportunity to send something was passed on LWSSSSRET_OK|state, rx, tx|No error, continue doing what we're doing LWSSSSRET_DISCONNECT_ME|state, rx|assertively disconnect from peer LWSSSSRET_DESTROY_ME|state, rx|Caller should now destroy the stream itself LWSSSSRET_SS_HANDLE_DESTROYED|state|Something handled a request to destroy the stream Destruction of the stream we're calling back on inside the callback is tricky, it's preferable to return `LWSSSSRET_DESTROY_ME` if it is required, and let the caller handle it. But in some cases, helpers called from the callbacks may destroy the handle themselves, in that case the handler should return `LWSSSSRET_SS_HANDLE_DESTROYED` indicating that the handle is already destroyed. ## Secure Streams SERVER State lifecycle ![overview](/doc-assets/ss-state-flow-server.png) You can also run servers defined using Secure Streams, the main difference is that the user code must assertively create a secure stream of the server type in order to create the vhost and listening socket. When this stream is destroyed, the vhost is destroyed and the listen socket closed, otherwise it does not perform any rx or tx, it just represents the server lifecycle. When client connections randomly arrive at the listen socket, new Secure Stream objects are created along with accept sockets to represent each client connection. As they represent the incoming connection, their lifecycle is the same as that of the underlying connection. There is no retry concept since as with eg, http servers, the clients may typically not be routable for new connections initiated by the server. Since connections at socket level are already established, new connections are immediately taken through CREATING, CONNECTING, CONNECTED states for consistency. Some underlying protocols like http are "transactional", the server receives a logical request and must reply with a logical response. The additional state `LWSSSCS_SERVER_TXN` provides a point where the user code can set transaction metadata before or in place of sending any payload. It's also possible to defer this until any rx related to the transaction was received, but commonly with http requests, there is no rx / body. Configuring the response there may look like ``` /* * We do want to ack the transaction... */ lws_ss_server_ack(m->ss, 0); /* * ... it's going to be text/html... */ lws_ss_set_metadata(m->ss, "mime", "text/html", 9); /* * ...it's going to be 128 byte (and request tx) */ lws_ss_request_tx_len(m->ss, 128); ``` Otherwise the general api usage is very similar to client usage. ## Convention for rx and tx callback return Function|Return|Meaning ---|---|--- tx|`LWSSSSRET_OK`|Send the amount of `buf` stored in `*len` tx|`LWSSSSRET_TX_DONT_SEND`|Do not send anything tx|`LWSSSSRET_DISCONNECT_ME`|Close the current connection tx|`LWSSSSRET_DESTROY_ME`|Destroy the Secure Stream rx|>=0|accepted rx|<0|Close the current connection # JSON Policy Database Example JSON policy... formatting is shown for clarity but whitespace can be omitted in the actual policy. Ordering is not critical in itself, but forward references are not allowed, things must be defined before they are allowed to be referenced later in the JSON. ``` { "release": "01234567", "product": "myproduct", "schema-version": 1, "retry": [{ "default": { "backoff": [1000, 2000, 3000, 5000, 10000], "conceal": 5, "jitterpc": 20 } }], "certs": [{ "isrg_root_x1": "MIIFazCCA1OgAw...AnX5iItreGCc=" }, { "LEX3_isrg_root_x1": "MIIFjTCCA3WgAwIB...WEsikxqEt" }], "trust_stores": [{ "le_via_isrg": ["isrg_root_x1", "LEX3_isrg_root_x1"] }], "s": [{ "mintest": { "endpoint": "warmcat.com", "port": 4443, "protocol": "h1get", "aux": "index.html", "plugins": [], "tls": true, "opportunistic": true, "retry": "default", "tls_trust_store": "le_via_isrg" } }] } ``` ### `Release` Identifies the policy version ### `Product` Identifies the product the policy should apply to ### `Schema-version` The minimum version of the policy parser required to parse this policy ### `via-socks5` Optional redirect for Secure Streams client traffic through a socks5 proxy given in the format `address:port`, eg, `127.0.0.1:12345`. ### `retry` A list of backoff schemes referred to in the policy ### `backoff` An array of ms delays for each retry in turn ### `conceal` The number of retries to conceal from higher layers before giving errors. If this is larger than the number of times in the backoff array, then the last time is used for the extra delays. 65535 means never stop trying. ### `jitterpc` Percentage of the delay times mentioned in the backoff array that may be randomly added to the figure from the array. For example with an array entry of 1000ms, and jitterpc of 20%, actual delays will be chosen randomly from 1000ms through 1200ms. This is to stop retry storms triggered by a single event like an outage becoming synchronized into a DoS. ### `certs` Certificates needed for validation should be listed here each with a name. The format is base64 DER, which is the same as the part of PEM that is inside the start and end lines. ### `trust_stores` Chains of certificates given in the `certs` section may be named and described inside the `trust_stores` section. Each entry in `trust_stores` is created as a vhost + tls context with the given name. Stream types can later be associated with one of these to enforce validity checking of the remote server. Entries should be named using "name" and the stack array defined using "stack" ### `auth` Optional section describing a map of available authentication streamtypes to auth token blob indexes. ``` ... "auth": [{"name":"newauth","type":"sigv4", "blob":0}] ... ``` Streams can indicate they depend on a valid auth token from one of these schemes by using the `"use_auth": "name"` member in the streamtype definition, where name is, eg, "sigv4" in the example above. If "use_auth" is not in the streamtype definition, default auth is lwa if "http_auth_header" is there. ### `auth[].name` This is the name of the authentication scheme used by other streamtypes ### `auth[].type` Indicate the auth type, e.g. sigv4 ### `auth[].streamtype` This is the auth streamtype to be used to refresh the authentication token ### `auth[].blob` This is the auth blob index the authentication token is stored into and retreived from system blob, currently up to 4 blobs. ### `s` These are an array of policies for the supported stream type names. ### `server` **SERVER ONLY**: if set to `true`, the policy describes a secure streams server. ### `endpoint` **CLIENT**: The DNS address the secure stream should connect to. This may contain string symbols which will be replaced with the corresponding streamtype metadata value at runtime. Eg, if the streamtype lists a metadata name "region", it's then possible to define the endpoint as, eg, `${region}.mysite.com`, and before attempting the connection setting the stream's metadata item "region" to the desired value, eg, "uk". If the endpoint string begins with `+`, then it's understood to mean a connection to a Unix Domain Socket, for Linux `+@` means the following Unix Domain Socket is in the Linux Abstract Namespace and doesn't have a filesystem footprint. This is only supported on unix-type and windows platforms and when lws was configured with `-DLWS_UNIX_SOCK=1` **SERVER**: If given, the network interface name or IP address the listen socket should bind to. **SERVER**: If begins with '!', the rest of the endpoint name is the vhost name of an existing vhost to bind to, instead of creating a new one. This is useful when the vhost layout is already being managed by lejp-conf JSON and it's more convenient to put the details in there. ### `port` **CLIENT**: The port number as an integer on the endpoint to connect to **SERVER**: The port number the server will listen on ### `protocol` **CLIENT**: The wire protocol to connect to the endpoint with. Currently supported streamtypes are |Wire protocol|Description| |---|---| |h1|http/1| |h2|http/2| |ws|http/1 Websockets| |mqtt|mqtt 3.1.1| |raw|| Raw protocol is a bit different than the others in that there is no protocol framing, whatever is received on the connection is passed to the user rx callback and whatever the tx callback provides is issued on to the connection. Because tcp can be arbitrarily fragmented by any intermediary, such streams have to be regarded as an ordered bytestream that may be fragmented at any byte without any meaning in terms of message boundaries, for that reason SOM and EOM are ignored with raw. ### `allow_redirects` By default redirects are not followed, if you wish a streamtype to observe them, eg, because that's how it responds to a POST, set `"allow_redirects": true` ### `tls` Set to `true` to enforce the stream travelling in a tls tunnel ### `client cert` Set if the stream needs to authenticate itself using a tls client certificate. Set to the certificate index counting from 0+. The certificates are managed using lws_sytstem blobs. ### `opportunistic` Set to `true` if the connection may be left dropped except when in use ### `nailed_up` Set to `true` to have lws retry if the connection carrying this stream should ever drop. ### `retry` The name of the policy described in the `retry` section to apply to this connection for retry + backoff ### `timeout_ms` Optional timeout associated with streams of this streamtype. If user code applies the `lws_ss_start_timeout()` api on a stream with a timeout of LWSSS_TIMEOUT_FROM_POLICY, the `timeout_ms` entry given in the policy is applied. ### `perf` If set to true, and lws was built with `LWS_WITH_CONMON`, causes this streamtype to receive additional rx payload with the `LWSSS_FLAG_PERF_JSON` flag set on it, that is JSON representing the onward connection performance information. These are based on the information captured in the struct defined in libwebsockets/lws-conmon.h, represented in JSON ``` { "peer": "46.105.127.147", "dns_us": 1234, "sockconn_us": 1234, "tls_us": 1234, "txn_resp_us": 1234, "dns":["46.105.127.147", "2001:41d0:2:ee93::1"] } ``` Streamtypes without "perf": true will never see the special rx payloads. Notice that the `LWSSS_FLAG_PERF_JSON` payloads must be handled out of band for the normal payloads, as they can appear inside normal payload messages. ### `tls_trust_store` The name of the trust store described in the `trust_stores` section to apply to validate the remote server cert. If missing and tls is enabled on the streamtype, then validation is attempted using the OS trust store, otherwise the connection fails. ### `use_auth` Indicate that the streamtype should use the named auth type from the `auth` array in the policy ### `aws_region` Indicate which metadata should be used to set aws region for certain streamtype ### `aws_service` Indicate which metadata should be used to set aws service for certain streamtype ### `direct_proto_str` If set to `true`, application can use `lws_ss_set_metadata()` to directly set protocol related string and use `lws_ss_get_metadata` to fetch certain protocol related string. Please note that currently HTTP header is the supported protocol string. The `name` parameter is the name of HTTP header name (**with ':'**, e.g. `"Content-Type:"`) and `value` is the header's value. `LWS_WITH_SS_DIRECT_PROTOCOL_STR` flag needs to be configured during compilation for this. Currently it's only work for non-proxy case. ### `server_cert` **SERVER ONLY**: subject to change... the name of the x.509 cert that is the server's tls certificate ### `server_key` **SERVER ONLY**: subject to change... the name of the x.509 cert that is the server's tls key ### `swake_validity` Set to `true` if this streamtype is important enough for the functioning of the device that its locally-initiated periodic connection validity checks of the interval described in the associated retry / backoff selection, are important enough to wake the whole system from low power suspend so they happen on schedule. ### `proxy_buflen` Only used when the streamtype is proxied... sets the maximum size of the payload buffering (in bytes) the proxy will hold for this type of stream. If the endpoint dumps a lot of data without any flow control, this may need to be correspondingly large. Default is 32KB. ### `proxy_buflen_rxflow_on_above`, `proxy_buflen_rxflow_off_below` When `proxy_buflen` is set, you can also wire up the amount of buffered data intended for the client held at the proxy, to the onward ss wsi rx flow control state. If more than `proxy_buflen_rxflow_on_above` bytes are buffered, rx flow control is set stopping further rx. Once the dsh is drained below `proxy_buflen_rxflow_off_below`, the rx flow control is released and RX resumes. ### `client_buflen` Only used when the streamtype is proxied... sets the maximum size of the payload buffering (in bytes) the client will hold for this type of stream. If the client sends a lot of data without any flow control, this may need to be correspondingly large. Default is 32KB. ### `attr_priority` A number between 0 (normal priority) and 6 (very high priority). 7 is also possible, but requires CAP_NET_ADMIN on Linux and is reserved for network administration packets. Normally default priority is fine, but under some conditions when transporting over IP packets, you may want to control the IP packet ToS priority for the streamtype by using this. ### `attr_low_latency` This is a flag indicating that the streamtype packets should be transported in a way that results in lower latency where there is a choice. For IP packets, this sets the ToS "low delay" flag on packets from this streamtype. ### `attr_high_throughput` This is a flag indicating that this streamtype should be expected to produce bulk content that requires high throughput. For IP packets, this sets the ToS "high throughput" flag on packets from this streamtype. ### `attr_high_reliability` This is a flag indicating that extra efforts should be made to deliver packets from this streamtype where possible. For IP packets, this sets the ToS "high reliability" flag on packets from this streamtype. ### `attr_low_cost` This is a flag indicating that packets from this streamtype should be routed as inexpensively as possible by trading off latency and reliability where there is a choice. For IP packets, this sets the ToS "low cost" flag on packets from this streamtype. ### `metadata` This allows declaring basically dynamic symbol names to be used by the streamtype, along with an optional mapping to a protocol-specific entity such as a given http header. Eg: ``` "metadata": [ { "myname": "" }, { "ctype": "content-type:" } ], ``` In this example "ctype" is associated with the http header "content-type" while "myname" doesn't have any association to a header. Symbol names may be used in the other policy for the streamtype for string substitution using the syntax like `xxx${myname}yyy`, forward references are valid but the scope of the symbols is just the streamtype the metadata is defined for. Client code can set metadata by name, using the `lws_ss_set_metadata()` api, this should be done before a transaction. And for metadata associated with a protocol-specific entity, like http headers, if incoming responses contain the mentioned header, the metadata symbol is set to that value at the client before any rx proceeds. Metadata continues to work the same for the client in the case it is proxying its connectivity, metadata is passed in both directions serialized over the proxy link. ## http transport ### `http_method` HTTP method to use with http-related protocols, like GET or POST. Not required for ws. ### `http_expect` Optionally indicates that success for HTTP transactions using this streamtype is different than the default 200 - 299. Eg, you may choose to set this to 204 for Captive Portal Detect usage if that's what you expect the server to reply with to indicate success. In that case, anything other than 204 will be treated as a connection failure. ### `http_fail_redirect` Set to `true` if you want to fail the connection on meeting an http redirect. This is needed to, eg, detect Captive Portals correctly. Normally, if on https, you would want the default behaviour of following the redirect. ### `http_url` Url path to use with http-related protocols The URL path can include metatadata like this "/mypath?whatever=${metadataname}" ${metadataname} will be replaced by the current value of the same metadata name. The metadata names must be listed in the "metadata": [ ] section. ### `http_resp_map` If your server overloads the meaning of the http transport response code with server-custom application codes, you can map these to discrete Secure Streams state callbacks using a JSON map, eg ``` "http_resp_map": [ { "530": 1530 }, { "531": 1531 } ], ``` It's not recommended to abuse the transport layer http response code by mixing it with application state information like this, but if it's dealing with legacy serverside that takes this approach, it's possible to handle it in SS this way while removing the dependency on http. ### `http_auth_header` The name of the header that takes the auth token, with a trailing ':', eg ``` "http_auth_header": "authorization:" ``` ### `http_dsn_header` The name of the header that takes the dsn token, with a trailing ':', eg ``` "http_dsn_header": "x-dsn:" ``` ### `http_fwv_header` The name of the header that takes the firmware version token, with a trailing ':', eg ``` "http_fwv_header": "x-fw-version:" ``` ### `http_devtype_header` The name of the header that takes the device type token, with a trailing ':', eg ``` "http_devtype_header": "x-device-type:" ``` ### `http_auth_preamble` An optional string that precedes the auth token, eg ``` "http_auth_preamble": "bearer " ``` ### `auth_hexify` Convert the auth token to hex ('A' -> "41") before transporting. Not necessary if the auth token is already in printable string format suitable for transport. Needed if the auth token is a chunk of 8-bit binary. ### `nghttp2_quirk_end_stream` Set this to `true` if the peer server has the quirk it won't send a response until we have sent an `END_STREAM`, even though we have sent headers with `END_HEADERS`. ### `h2q_oflow_txcr` Set this to `true` if the peer server has the quirk it sends an maximum initial tx credit of 0x7fffffff and then later increments it illegally. ### `http_multipart_ss_in` Indicates that SS should parse any incoming multipart mime on this stream ### `http_multipart_name` Indicates this stream goes out using multipart mime, and provides the name part of the multipart header ### `http_multipart_filename` Indicates this stream goes out using multipart mime, and provides the filename part of the multipart header ### `http_multipart_content_type` The `content-type` to mark up the multipart mime section with if present ### `http_www_form_urlencoded` Indicate the data is sent in `x-www-form-urlencoded` form ### `http_cookies` This streamtype should store and bring out http cookies from the peer. ### `rideshare` For special cases where one logically separate stream travels with another when using this protocol. Eg, a single multipart mime transaction carries content from two or more streams. ## ws transport ### `ws_subprotocol` ** CLIENT **: Name of the ws subprotocol to request from the server ** SERVER **: Name of the subprotocol we will accept ### `ws_binary` Use if the ws messages are binary ### `ws_prioritize_reads` Set `true` if the event loop should prioritize keeping up with input at the potential expense of output latency. ## MQTT transport ### `mqtt_topic` Set the topic this streamtype uses for writes ### `mqtt_subscribe` Set the topic this streamtype subscribes to ### `mqtt qos` Set the QOS level for this streamtype ### `mqtt_retain` Set to true if this streamtype should use MQTT's "retain" feature. ### `mqtt_keep_alive` 16-bit number representing MQTT keep alive for the stream. This is applied at connection time... where different streams may bind to the same underlying MQTT connection, all the streams should have an identical setting for this. ### `mqtt_clean_start` Set to true if the connection should use MQTT's "clean start" feature. This is applied at connection time... where different streams may bind to the same underlying MQTT connection, all the streams should have an identical setting for this. ### `mqtt_will_topic` Set the topic of the connection's will message, if any (there is none by default). This is applied at connection time... where different streams may bind to the same underlying MQTT connection, all the streams should have an identical setting for this. ### `mqtt_will_message` Set the content of the connect's will message, if any (there is none by default). This is applied at connection time... where different streams may bind to the same underlying MQTT connection, all the streams should have an identical setting for this. ### `mqtt_will_qos` Set the QoS of the will message, if any (there is none by default). This is applied at connection time... where different streams may bind to the same underlying MQTT connection, all the streams should have an identical setting for this. ### `mqtt_will_retain` Set to true if the connection should use MQTT's "will retain" feature, if there is a will message (there is none by default). This is applied at connection time... where different streams may bind to the same underlying MQTT connection, all the streams should have an identical setting for this. ## Loading and using updated remote policy If the default, hardcoded policy includes a streamtype `fetch_policy`, during startup when lws_system reaches the POLICY state, lws will use a Secure Stream of type `fetch_policy` to download, parse and update the policy to use it. The secure-streams-proxy minimal example shows how this is done and fetches its real policy from warmcat.com at startup using the built-in one. ## Applying streamtype policy overlays This is intended for modifying policies at runtime for testing, eg, to force error paths to be taken. After the main policy is processed, you may parse additional, usually smaller policy fragments on top of it. Where streamtype names in the new fragment already exist in the current parsed policy, the settings in the fragment are applied over the parsed policy, overriding settings. There's a simple api to enable this by giving it the override JSON in one string ``` int lws_ss_policy_overlay(struct lws_context *context, const char *overlay); ``` but there are also other apis available that can statefully process larger overlay fragments if needed. An example overlay fragment looks like this ``` { "s": [{ "captive_portal_detect": { "endpoint": "google.com", "http_url": "/", "port": 80 }}]} ``` ie the overlay fragment completely follows the structure of the main policy, just misses out anything it doesn't override. Currently ONLY streamtypes may be overridden. You can see an example of this in use in `minimal-secure-streams` example where `--force-portal` and `--force-no-internet` options cause the captive portal detect streamtype to be overridden to force the requested kind of outcome. ## Captive Portal Detection If the policy contains a streamtype `captive_portal_detect` then the type of transaction described there is automatically performed after acquiring a DHCP address to try to determine the captive portal situation. ``` "captive_portal_detect": { "endpoint": "connectivitycheck.android.com", "port": 80, "protocol": "h1", "http_method": "GET", "http_url": "generate_204", "opportunistic": true, "http_expect": 204, "http_fail_redirect": true } ``` ## Stream serialization and proxying By default Secure Streams expects to make the outgoing connection described in the policy in the same process / thread, this suits the case where all the participating clients are in the same statically-linked image. In this case the `lws_ss_` apis are fulfilled locally by secure-streams.c and policy.c for policy lookups. However it also supports serialization, where the SS api can be streamed over another transport such as a Unix Domain Socket connection. This suits the case where the clients are actually in different processes in, eg, Linux or Android. In those cases, you run a proxy process (minimal-secure-streams-proxy) that listens on a Unix Domain Socket and is connected to by one or more other processes that pass their SS API activity to the proxy for fulfilment (or onward proxying). Each Secure Stream that is created then in turn creates a private Unix Domain Socket connection to the proxy for each stream. In this case the proxy uses secure-streams.c and policy.c as before to fulfil the inbound proxy streams, but uses secure-streams-serialize.c to serialize and deserialize the proxied SS API activity. The proxy clients define LWS_SS_USE_SSPC either very early in their sources before the includes, or on the compiler commandline... this causes the lws_ss_ apis to be replaced at preprocessor time with lws_sspc_ equivalents. These serialize the api action and pass it to the proxy over a Unix Domain Socket for fulfilment, the results and state changes etc are streamed over the Unix Domain Socket and presented to the application exactly the same as if it was being fulfilled locally. To demonstrate this, some minimal examples, eg, minimal-secure-streams and mimimal-secure-streams-avs build themselves both ways, once with direct SS API fulfilment and once with Unix Domain Socket proxying and -client appended on the executable name. To test the -client variants, run minimal-secure-streams-proxy on the same machine. ## Complicated scenarios with secure streams proxy As mentioned above, Secure Streams has two modes, by default the application directly parses the policy and makes the outgoing connections itself. However when configured at cmake with ``` -DLWS_WITH_SOCKS5=1 -DLWS_WITH_SECURE_STREAMS=1 -DLWS_WITH_SECURE_STREAMS_PROXY_API=1 -DLWS_WITH_MINIMAL_EXAMPLES=1 ``` and define `LWS_SS_USE_SSPC` when building the application, applications forward their network requests to a local or remote SS proxy for fulfilment... and only the SS proxy has the system policy. By default, the SS proxy is on the local machine and is connected to via a Unix Domain Socket, but tcp links are also possible. (Note the proxied traffic is not encrypyed by default.) Using the configuration above, the example SS applications are built two ways, once for direct connection fulfilment (eg, `./bin/lws-minimal-secure-streams`), and once with `LWS_SS_USE_SSPC` also defined so it connects via an SS proxy, (eg, `./bin/lws-minimal-secure-streams-client`). ## Testing an example scenario with SS Proxy and socks5 proxy ``` [ SS application ] --- tcp --- [ socks 5 proxy ] --- tcp --- [ SS proxy ] --- internet ``` In this scenario, everything is on localhost, the socks5 proxy listens on :1337 and the SS proxy listens on :1234. The SS application connects to the socks5 proxy to get to the SS proxy, which then goes out to the internet ### 1 Start the SS proxy Tell it to listen on lo interface on port 1234 ``` $ ./bin/lws-minimal-secure-streams-proxy -p 1234 -i lo ``` ### 2 Start the SOCKS5 proxy ``` $ ssh -D 1337 -N -v localhost ``` The -v makes connections to the proxy visible in the terminal for testing ### 3 Run the SS application The application is told to make all connections via the socks5 proxy at 127.0.0.1:1337, and to fulfil its SS connections via an SS proxy, binding connections to 127.0.0.1 (ipv4 lo interface, -1), to 127.0.0.1:1234 (-a/-p). ``` socks_proxy=127.0.0.1:1337 ./bin/lws-minimal-secure-streams-client -p 1234 -i 127.0.0.1 -a 127.0.0.1 ``` You can confirm this goes through the ssh socks5 proxy to get to the SS proxy and fulfil the connection. ## Using static policies If one of your targets is too constrained to make use of dynamic JSON policies, but using SS and the policies is attractive for wider reasons, you can use a static policy built into the firmware for the constrained target. The secure-streams example "policy2c" (which runs on the build machine, not the device) https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/secure-streams/minimal-secure-streams-policy2c accepts a normal JSON policy on stdin, and emits a C code representation that can be included directly in the firmware. https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/secure-streams/minimal-secure-streams-staticpolicy/static-policy.h Using this technique it's possible to standardize on maintaining JSON policies across a range of devices with different contraints, and use the C conversion of the policy on devices that are too small. The Cmake option `LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY` should be enabled to use this mode, it will not build the JSON parser (and the option for LEJP can also be disabled if you're not otherwise using it, saving an additional couple of KB). Notice policy2c example tool must be built with `LWS_ROLE_H1`, `LWS_ROLE_H2`, `LWS_ROLE_WS` and `LWS_ROLE_MQTT` enabled so it can handle any kind of policy. ## HTTP and ws serving All ws servers start out as http servers... for that reason ws serving is handled as part of http serving, if you give the `ws_subprotocol` entry to the streamtype additionally, the server will also accept upgrades to ws. To help the user code understand if the upgrade occurred, there's a special state `LWSSSCS_SERVER_UPGRADE`, so subsequent rx and tx can be understood to have come from the upgraded protocol. To allow separation of rx and tx handling between http and ws, there's a ss api `lws_ss_change_handlers()` which allows dynamically setting SS handlers. Since the http and ws upgrade identity is encapsulated in one streamtype, the user object for the server streamtype should contain related user data for both http and ws underlying protocol identity. libwebsockets-4.3.5/lib/secure-streams/cpp/000077500000000000000000000000001476025525100206645ustar00rootroot00000000000000libwebsockets-4.3.5/lib/secure-streams/cpp/README.md000066400000000000000000000016511476025525100221460ustar00rootroot00000000000000## Secure Streams client C++ API Enable for build by selecting `-DLWS_WITH_SECURE_STREAMS=1 -DLWS_WITH_SECURE_STREAMS_CPP=1` at cmake. Because it's designed for OpenSSL + system trust bundle, the minimal example minimal-secure-streams-cpp requires `-DLWS_WITH_MINIMAL_EXAMPLES=1 -DLWS_WITH_MBEDTLS=0` By default the -cpp example downloads https://warmcat.com/test-a.bin to the local file /tmp/test-a.bin. By giving, eg, -c 4, you can run four concurrent downloads of files test-a.bin through test-d.bin... up to 12 files may be downloaded concurrently. By default it will connect over h2 and share the single connection between all the downloads. ### File level api ``` #include ... new lssFile(context, "https://warmcat.com/index.html", "/tmp/index.html", lss_completion, 0); ``` This will copy the remote url to the given local file, and call the completion callback when it has succeeded or failed. libwebsockets-4.3.5/lib/secure-streams/cpp/lss.cxx000066400000000000000000000074001476025525100222120ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * C++ classes for Secure Streams */ #include static const char *pcols[] = { "http://", /* LWSSSP_H1 */ "https://", "h2://", /* LWSSSP_H2 */ "h2s://", "ws://", /* LWSSSP_WS */ "wss://", "mqtt://", /* LWSSSP_MQTT */ "mqtts://", "raw://", /* LWSSSP_RAW */ "raws://", }; static const uint8_t pcols_len[] = { 7, 8, 5, 6, 5, 6, 7, 8, 6, 7 }; static const uint16_t pcols_port[] = { 80, 443, 443, 443, 80, 443, 1883, 8883, 80, 443 }; lss::lss(lws_ctx_t _ctx, std::string _uri, lsscomp_t _comp, bool _psh, lws_sscb_rx rx, lws_sscb_tx tx, lws_sscb_state state) { const char *p, *urlpath; lws_ss_info_t ssi; int n, port; memset(&ssi, 0, sizeof(ssi)); memset(&pol, 0, sizeof(pol)); ctx = _ctx; comp = _comp; comp_done = 0; rxlen = 0; /* * We have a common stub userdata, our "real" userdata is in the * derived class members. The Opaque user pointer points to the * lss itself. */ ssi.handle_offset = offsetof(lssPriv, lssPriv::m_ss); ssi.opaque_user_data_offset = offsetof(lssPriv, lssPriv::m_plss); ssi.user_alloc = sizeof(lssPriv); ssi.rx = rx; ssi.tx = tx; ssi.state = state; ssi.policy = &pol; /* we will provide our own policy */ /* * _uri is like "https://warmcat.com:443/index.html"... we need to * deconstruct it into its policy implications */ uri = strdup(_uri.c_str()); for (n = 0; n < LWS_ARRAY_SIZE(pcols); n++) if (!strncmp(uri, pcols[n], pcols_len[n])) break; if (n == LWS_ARRAY_SIZE(pcols)) throw lssException("unknown uri protocol://"); pol.protocol = n >> 1; if (n & 1) pol.flags |= LWSSSPOLF_TLS; n = pcols_port[n]; if (lws_parse_uri(uri, &p, &pol.endpoint, &n, &urlpath)) throw lssException("unable to parse uri://"); pol.port = (uint16_t)n; if (pol.protocol <= LWSSSP_WS) { pol.u.http.url = urlpath; /* * These are workarounds for common h2 server noncompliances */ pol.flags |= LWSSSPOLF_QUIRK_NGHTTP2_END_STREAM | LWSSSPOLF_H2_QUIRK_OVERFLOWS_TXCR | LWSSSPOLF_H2_QUIRK_UNCLEAN_HPACK_STATE; if (pol.protocol < LWSSSP_WS) pol.u.http.method = _psh ? "POST" : "GET"; } us_start = lws_now_usecs(); if (lws_ss_create(ctx, 0, &ssi, (void *)this, &m_ss, NULL, NULL)) goto blow; if (pol.protocol <= LWSSSP_WS) lws_ss_client_connect(m_ss); return; blow: if (uri) free(uri); throw lssException("ss creation failed"); } lss::~lss() { if (uri) free(uri); if (m_ss) lws_ss_destroy(&m_ss); } int lss::call_completion(lws_ss_constate_t state) { if (comp_done) return 0; if (!comp) return 0; comp_done = 1; return comp(this, state, NULL); } libwebsockets-4.3.5/lib/secure-streams/cpp/lssFile.cxx000066400000000000000000000066171476025525100230230ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * C++ classes for Secure Streams - file transaction */ #include #include #include #include static lws_ss_state_return_t lssfile_rx(void *userobj, const uint8_t *buf, size_t len, int flags) { lssFile *lf = (lssFile *)userobj_to_lss(userobj); return lf->write(buf, len, flags); } static lws_ss_state_return_t lssfile_tx(void *userobj, lws_ss_tx_ordinal_t ord,uint8_t *buf, size_t *len, int *flags) { /* * TODO: we don't know how to send things yet */ return LWSSSSRET_TX_DONT_SEND; } static lws_ss_state_return_t lssfile_state(void *userobj, void *h_src, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { lssFile *lf = (lssFile *)userobj_to_lss(userobj); lwsl_info("%s: state %s\n", __func__, lws_ss_state_name(state)); switch (state) { /* * These reflect some kind of final disposition for the transaction, * that we want to report along with the completion. If no other chance * we'll report DESTROYING */ case LWSSSCS_DESTROYING: case LWSSSCS_ALL_RETRIES_FAILED: case LWSSSCS_QOS_ACK_REMOTE: case LWSSSCS_QOS_NACK_REMOTE: lf->call_completion(state); if (state == LWSSSCS_DESTROYING) { /* * we get DESTROYING because we are already in the * middle of destroying the m_ss, unlink the C++ lss * from the ss handle so it won't recursively try to * destroy it */ lf->m_ss = NULL; delete lf; } break; } return LWSSSSRET_OK; } lws_ss_state_return_t lssFile::write(const uint8_t *buf, size_t len, int flags) { if (fd == LWS_INVALID_FILE) { fd = open(path.c_str(), O_WRONLY | O_CREAT | O_TRUNC, 0640); if (fd == LWS_INVALID_FILE) return LWSSSSRET_DESTROY_ME; } if (::write(fd, buf, len) != len) { close(fd); fd = LWS_INVALID_FILE; return LWSSSSRET_DESTROY_ME; } rxlen += len; if (flags & LWSSS_FLAG_EOM) { close(fd); fd = LWS_INVALID_FILE; } return LWSSSSRET_OK; } lssFile::lssFile(lws_ctx_t ctx, std::string uri, std::string _path, lsscomp_t comp, bool _psh) : lss(ctx, uri, comp, _psh, lssfile_rx, lssfile_tx, lssfile_state) { path = _path; push = _psh; fd = LWS_INVALID_FILE; } lssFile::~lssFile() { if (fd == LWS_INVALID_FILE) return; close(fd); fd = LWS_INVALID_FILE; } libwebsockets-4.3.5/lib/secure-streams/cpp/lssMsg.cxx000066400000000000000000000036321476025525100226640ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * C++ classes for Secure Streams - atomic heap messages */ #include static lws_ss_state_return_t lssmsg_rx(void *userobj, const uint8_t *buf, size_t len, int flags) { return LWSSSSRET_OK; } static lws_ss_state_return_t lssmsg_tx(void *userobj, lws_ss_tx_ordinal_t ord,uint8_t *buf, size_t *len, int *flags) { /* * TODO: we don't know how to send things yet */ return LWSSSSRET_TX_DONT_SEND; } static lws_ss_state_return_t lssmsg_state(void *userobj, void *h_src, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { return LWSSSSRET_OK; } lssMsg::lssMsg(lws_ctx_t ctx, lsscomp_t _comp, std::string uri) : lss(ctx, uri, comp, 0, lssmsg_rx, lssmsg_tx, lssmsg_state) { } lssMsg::~lssMsg() { } libwebsockets-4.3.5/lib/secure-streams/plugins/000077500000000000000000000000001476025525100215635ustar00rootroot00000000000000libwebsockets-4.3.5/lib/secure-streams/plugins/ssp-h1url/000077500000000000000000000000001476025525100234215ustar00rootroot00000000000000libwebsockets-4.3.5/lib/secure-streams/plugins/ssp-h1url/h1url.c000066400000000000000000000014551476025525100246250ustar00rootroot00000000000000/* * ssp-h1url plugin * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * CC0 so it can be used as a template for your own secure streams plugins * licensed how you like. */ #include static int ssp_h1url_create(struct lws_ss_handle *ss, void *info, plugin_auth_status_cb status) { return 0; } static int ssp_h1url_destroy(struct lws_ss_handle *ss) { return 0; } static int ssp_h1url_munge(struct lws_ss_handle *ss, char *path, size_t path_len) { return 0; } /* this is the only exported symbol */ const lws_ss_plugin_t ssp_h1url = { .name = "h1url", .alloc = 0, .create = ssp_h1url_create, .destroy = ssp_h1url_destroy, .munge = ssp_h1url_munge }; libwebsockets-4.3.5/lib/secure-streams/policy-common.c000066400000000000000000000347321476025525100230440ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2019 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * This file contains the stuff related to secure streams policy, it's always * built if LWS_WITH_SECURE_STREAMS enabled. */ #include #if defined(LWS_WITH_SYS_SMD) const lws_ss_policy_t pol_smd = { .flags = 0, /* have to set something for windows */ }; #endif const lws_ss_policy_t * lws_ss_policy_lookup(const struct lws_context *context, const char *streamtype) { const lws_ss_policy_t *p = context->pss_policies; if (!streamtype) return NULL; #if defined(LWS_WITH_SYS_SMD) if (!strcmp(streamtype, LWS_SMD_STREAMTYPENAME)) return &pol_smd; #endif while (p) { if (!strcmp(p->streamtype, streamtype)) return p; p = p->next; } return NULL; } int _lws_ss_set_metadata(lws_ss_metadata_t *omd, const char *name, const void *value, size_t len) { /* * If there was already a heap-based value, it's about to go out of * scope due to us trashing the pointer. So free it first and clear * its flag indicating it's heap-based. */ if (omd->value_on_lws_heap) { lws_free_set_NULL(omd->value__may_own_heap); omd->value_on_lws_heap = 0; } // lwsl_notice("%s: %s %s\n", __func__, name, (const char *)value); omd->name = name; omd->value__may_own_heap = (void *)value; omd->length = len; return 0; } int lws_ss_set_metadata(struct lws_ss_handle *h, const char *name, const void *value, size_t len) { lws_ss_metadata_t *omd = lws_ss_get_handle_metadata(h, name); lws_service_assert_loop_thread(h->context, h->tsi); if (omd) return _lws_ss_set_metadata(omd, name, value, len); #if defined(LWS_WITH_SS_DIRECT_PROTOCOL_STR) if (h->policy->flags & LWSSSPOLF_DIRECT_PROTO_STR) { omd = lws_ss_get_handle_instant_metadata(h, name); if (!omd) { omd = lws_zalloc(sizeof(*omd), "imetadata"); if (!omd) { lwsl_err("%s OOM\n", __func__); return 1; } omd->name = name; omd->next = h->instant_metadata; h->instant_metadata = omd; } omd->value__may_own_heap = (void *)value; omd->length = len; return 0; } #endif lwsl_info("%s: unknown metadata %s\n", __func__, name); return 1; } int _lws_ss_alloc_set_metadata(lws_ss_metadata_t *omd, const char *name, const void *value, size_t len) { uint8_t *p; int n; if (omd->value_on_lws_heap) { lws_free_set_NULL(omd->value__may_own_heap); omd->value_on_lws_heap = 0; } p = lws_malloc(len, __func__); if (!p) return 1; n = _lws_ss_set_metadata(omd, name, p, len); if (n) { lws_free(p); return n; } memcpy(p, value, len); omd->value_on_lws_heap = 1; return 0; } int lws_ss_alloc_set_metadata(struct lws_ss_handle *h, const char *name, const void *value, size_t len) { lws_ss_metadata_t *omd = lws_ss_get_handle_metadata(h, name); lws_service_assert_loop_thread(h->context, h->tsi); if (!omd) { lwsl_info("%s: unknown metadata %s\n", __func__, name); return 1; } return _lws_ss_alloc_set_metadata(omd, name, value, len); } int lws_ss_get_metadata(struct lws_ss_handle *h, const char *name, const void **value, size_t *len) { lws_ss_metadata_t *omd = lws_ss_get_handle_metadata(h, name); #if defined(LWS_WITH_SS_DIRECT_PROTOCOL_STR) int n; #endif lws_service_assert_loop_thread(h->context, h->tsi); if (omd) { *value = omd->value__may_own_heap; *len = omd->length; return 0; } #if defined(LWS_WITH_SS_DIRECT_PROTOCOL_STR) if (!(h->policy->flags & LWSSSPOLF_DIRECT_PROTO_STR) || !h->wsi) goto bail; n = lws_http_string_to_known_header(name, strlen(name)); if (n != LWS_HTTP_NO_KNOWN_HEADER) { *len = (size_t)lws_hdr_total_length(h->wsi, n); if (!*len) goto bail; *value = lws_hdr_simple_ptr(h->wsi, n); if (!*value) goto bail; return 0; } #if defined(LWS_WITH_CUSTOM_HEADERS) n = lws_hdr_custom_length(h->wsi, (const char *)name, (int)strlen(name)); if (n <= 0) goto bail; *value = lwsac_use(&h->imd_ac, (size_t)(n+1), (size_t)(n+1)); if (!*value) { lwsl_err("%s ac OOM\n", __func__); return 1; } if (lws_hdr_custom_copy(h->wsi, (char *)(*value), n+1, name, (int)strlen(name))) { /* waste n+1 bytes until ss is destryed */ goto bail; } *len = (size_t)n; return 0; #endif bail: #endif lwsl_info("%s: unknown metadata %s\n", __func__, name); return 1; } lws_ss_metadata_t * lws_ss_get_handle_metadata(struct lws_ss_handle *h, const char *name) { int n; lws_service_assert_loop_thread(h->context, h->tsi); for (n = 0; n < h->policy->metadata_count; n++) if (!strcmp(name, h->metadata[n].name)) return &h->metadata[n]; return NULL; } #if defined(LWS_WITH_SS_DIRECT_PROTOCOL_STR) lws_ss_metadata_t * lws_ss_get_handle_instant_metadata(struct lws_ss_handle *h, const char *name) { lws_ss_metadata_t *imd = h->instant_metadata; while (imd) { if (!strcmp(name, imd->name)) return imd; imd = imd->next; } return NULL; } #endif lws_ss_metadata_t * lws_ss_policy_metadata(const lws_ss_policy_t *p, const char *name) { lws_ss_metadata_t *pmd = p->metadata; while (pmd) { if (pmd->name && !strcmp(name, pmd->name)) return pmd; pmd = pmd->next; } return NULL; } lws_ss_metadata_t * lws_ss_policy_metadata_index(const lws_ss_policy_t *p, size_t index) { lws_ss_metadata_t *pmd = p->metadata; while (pmd) { if (pmd->length == index) return pmd; pmd = pmd->next; } return NULL; } #if !defined(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY) static int fe_lws_ss_destroy(struct lws_dll2 *d, void *user) { lws_ss_handle_t *h = lws_container_of(d, lws_ss_handle_t, list); lws_ss_destroy(&h); return 0; } #endif /* * Dynamic policy: we want to one-time create the vhost for the policy and the * trust store behind it. * * Static policy: We want to make use of a trust store / vhost from the policy and add to its * ss-refcount. */ struct lws_vhost * lws_ss_policy_ref_trust_store(struct lws_context *context, const lws_ss_policy_t *pol, char doref) { struct lws_context_creation_info i; struct lws_vhost *v; int n; memset(&i, 0, sizeof(i)); if (!pol->trust.store) { v = lws_get_vhost_by_name(context, "_ss_default"); if (!v) { /* corner case... there's no trust store used */ i.options = context->options; i.vhost_name = "_ss_default"; i.port = CONTEXT_PORT_NO_LISTEN; v = lws_create_vhost(context, &i); if (!v) { lwsl_err("%s: failed to create vhost %s\n", __func__, i.vhost_name); return NULL; } } goto accepted; } v = lws_get_vhost_by_name(context, pol->trust.store->name); if (v) { lwsl_debug("%s: vh already exists\n", __func__); goto accepted; } i.options = context->options; i.vhost_name = pol->trust.store->name; lwsl_debug("%s: %s\n", __func__, i.vhost_name); #if defined(LWS_WITH_TLS) && defined(LWS_WITH_CLIENT) i.client_ssl_ca_mem = pol->trust.store->ssx509[0]->ca_der; i.client_ssl_ca_mem_len = (unsigned int) pol->trust.store->ssx509[0]->ca_der_len; #endif i.port = CONTEXT_PORT_NO_LISTEN; lwsl_info("%s: %s trust store initial '%s'\n", __func__, i.vhost_name, pol->trust.store->ssx509[0]->vhost_name); v = lws_create_vhost(context, &i); if (!v) { lwsl_err("%s: failed to create vhost %s\n", __func__, i.vhost_name); return NULL; } else v->from_ss_policy = 1; for (n = 1; v && n < pol->trust.store->count; n++) { lwsl_info("%s: add '%s' to trust store\n", __func__, pol->trust.store->ssx509[n]->vhost_name); #if defined(LWS_WITH_TLS) if (lws_tls_client_vhost_extra_cert_mem(v, pol->trust.store->ssx509[n]->ca_der, pol->trust.store->ssx509[n]->ca_der_len)) { lwsl_err("%s: add extra cert failed\n", __func__); return NULL; } #endif } accepted: #if defined(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY) || defined(LWS_WITH_SECURE_STREAMS_CPP) if (doref) v->ss_refcount++; #endif return v; } #if defined(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY) || defined(LWS_WITH_SECURE_STREAMS_CPP) int lws_ss_policy_unref_trust_store(struct lws_context *context, const lws_ss_policy_t *pol) { struct lws_vhost *v; const char *name = "_ss_default"; if (pol->trust.store) name = pol->trust.store->name; v = lws_get_vhost_by_name(context, name); if (!v || !v->from_ss_policy) return 0; assert(v->ss_refcount); v->ss_refcount--; if (!v->ss_refcount) { lwsl_notice("%s: destroying vh %s\n", __func__, name); lws_vhost_destroy(v); } return 1; } #endif int lws_ss_policy_set(struct lws_context *context, const char *name) { int ret = 0; #if !defined(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY) struct policy_cb_args *args = (struct policy_cb_args *)context->pol_args; const lws_ss_policy_t *pol; struct lws_vhost *v; lws_ss_x509_t *x; char buf[16]; int m; /* * Parsing seems to have succeeded, and we're going to use the new * policy that's laid out in args->ac */ if (!args) return 1; lejp_destruct(&args->jctx); if (context->ac_policy) { int n; #if defined(LWS_WITH_SYS_METRICS) lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, context->owner_mtr_dynpol.head) { lws_metric_policy_dyn_t *dm = lws_container_of(d, lws_metric_policy_dyn_t, list); lws_metric_policy_dyn_destroy(dm, 1); /* keep */ } lws_end_foreach_dll_safe(d, d1); #endif /* * any existing ss created with the old policy have to go away * now, since they point to the shortly-to-be-destroyed old * policy */ for (n = 0; n < context->count_threads; n++) { struct lws_context_per_thread *pt = &context->pt[n]; lws_dll2_foreach_safe(&pt->ss_owner, NULL, fe_lws_ss_destroy); } /* * So this is a bit fun-filled, we already had a policy in * force, perhaps it was the default policy that's just good for * fetching the real policy, and we're doing that now. * * We can destroy all the policy-related direct allocations * easily because they're cleanly in a single lwsac... */ lwsac_free(&context->ac_policy); /* * ...but when we did the trust stores, we created vhosts for * each. We need to destroy those now too, and recreate new * ones from the new policy, perhaps with different X.509s. * * Vhost destruction is inherently async, it can't be destroyed * until all of the wsi bound to it have closed, and, eg, libuv * means their closure is deferred until a later go around the * event loop. SMP means we also have to wait for all the pts * to close their wsis that are bound on the vhost too. * * This marks the vhost as being destroyed so new things won't * use it, and starts the close of all wsi on this pt that are * bound to the wsi, and deals with the listen socket if any. * "being-destroyed" vhosts can't be found using get_vhost_by_ * name(), so if a new vhost of the same name exists that isn't * being destroyed that will be the one found. * * When the number of wsi bound to the vhost gets to zero a * short time later, the vhost is actually destroyed. */ v = context->vhost_list; while (v) { if (v->from_ss_policy) { struct lws_vhost *vh = v->vhost_next; lwsl_debug("%s: destroying %s\n", __func__, lws_vh_tag(v)); lws_vhost_destroy(v); v = vh; continue; } v = v->vhost_next; } } context->pss_policies = args->heads[LTY_POLICY].p; context->ac_policy = args->ac; lws_humanize(buf, sizeof(buf), lwsac_total_alloc(args->ac), humanize_schema_si_bytes); if (lwsac_total_alloc(args->ac)) m = (int)((lwsac_total_overhead(args->ac) * 100) / lwsac_total_alloc(args->ac)); else m = 0; (void)m; lwsl_info("%s: %s, pad %d%c: %s\n", __func__, buf, m, '%', name); /* Create vhosts for each type of trust store */ /* * We get called from context creation... instantiates * vhosts with client tls contexts set up for each unique CA. * * We create the vhosts by walking streamtype list and create vhosts * using trust store name if it's a client connection that doesn't * already exist. */ pol = context->pss_policies; while (pol) { if (!(pol->flags & LWSSSPOLF_SERVER)) { v = lws_ss_policy_ref_trust_store(context, pol, 0 /* no refcount inc */); if (!v) ret = 1; } pol = pol->next; } #if defined(LWS_WITH_SOCKS5) /* * ... we need to go through every vhost updating its understanding of * which socks5 proxy to use... */ v = context->vhost_list; while (v) { lws_set_socks(v, args->socks5_proxy); v = v->vhost_next; } if (context->vhost_system) lws_set_socks(context->vhost_system, args->socks5_proxy); if (args->socks5_proxy) lwsl_notice("%s: global socks5 proxy: %s\n", __func__, args->socks5_proxy); #endif /* * For dynamic policy case, now we processed the x.509 CAs, we can free * all of our originals. For static policy, they're in .rodata, nothing * to free. */ x = args->heads[LTY_X509].x; while (x) { /* * Free all the client DER buffers now they have been parsed * into tls library X.509 objects */ if (!x->keep) { /* used for server */ lws_free((void *)x->ca_der); x->ca_der = NULL; } x = x->next; } context->last_policy = time(NULL); #if defined(LWS_WITH_SYS_METRICS) if (context->pss_policies) ((lws_ss_policy_t *)context->pss_policies)->metrics = args->heads[LTY_METRICS].m; #endif /* and we can discard the parsing args object now, invalidating args */ lws_free_set_NULL(context->pol_args); #endif #if defined(LWS_WITH_SYS_METRICS) lws_metric_rebind_policies(context); #endif #if defined(LWS_WITH_SYS_SMD) (void)lws_smd_msg_printf(context, LWSSMDCL_SYSTEM_STATE, "{\"policy\":\"updated\",\"ts\":%lu}", (long)context->last_policy); #endif return ret; } libwebsockets-4.3.5/lib/secure-streams/policy-json.c000066400000000000000000001001601476025525100225120ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2019 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * This file contains the stuff related to JSON-provided policy, it's not built * if LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY enabled. */ #include static const char * const lejp_tokens_policy[] = { "release", "product", "schema-version", "via-socks5", "retry[].*.backoff", "retry[].*.conceal", "retry[].*.jitterpc", "retry[].*.svalidping", "retry[].*.svalidhup", "retry[].*", "certs[].*", "trust_stores[].name", "trust_stores[].stack", "metrics[].name", "metrics[].us_schedule", "metrics[].us_halflife", "metrics[].min_outlier", "metrics[].report", "s[].*.endpoint", "s[].*.via-socks5", "s[].*.protocol", "s[].*.port", "s[].*.plugins", "s[].*.tls", "s[].*.client_cert", "s[].*.opportunistic", "s[].*.nailed_up", "s[].*.allow_redirects", "s[].*.urgent_tx", "s[].*.urgent_rx", "s[].*.attr_priority", "s[].*.attr_low_latency", "s[].*.attr_high_throughput", "s[].*.attr_high_reliability", "s[].*.attr_low_cost", "s[].*.long_poll", "s[].*.ws_prioritize_reads", "s[].*.retry", "s[].*.timeout_ms", "s[].*.perf", "s[].*.tls_trust_store", "s[].*.proxy_buflen", "s[].*.proxy_buflen_rxflow_on_above", "s[].*.proxy_buflen_rxflow_off_below", "s[].*.client_buflen", "s[].*.client_buflen_rxflow_on_above", "s[].*.client_buflen_rxflow_off_below", "s[].*.metadata", "s[].*.metadata[].*", "s[].*.http_resp_map", "s[].*.http_resp_map[].*", "s[].*.http_auth_header", "s[].*.http_dsn_header", "s[].*.http_fwv_header", "s[].*.http_devtype_header", "s[].*.http_auth_preamble", "s[].*.http_no_content_length", "s[].*.rideshare", /* streamtype name this rides shotgun with */ "s[].*.payload_fmt", "s[].*.http_method", "s[].*.http_url", "s[].*.nghttp2_quirk_end_stream", "s[].*.h2q_oflow_txcr", "s[].*.http_multipart_name", "s[].*.http_multipart_filename", "s[].*.http_mime_content_type", "s[].*.http_www_form_urlencoded", "s[].*.http_expect", "s[].*.http_cookies", "s[].*.http_fail_redirect", "s[].*.http_multipart_ss_in", "s[].*.ws_subprotocol", "s[].*.ws_binary", "s[].*.local_sink", "s[].*.server", "s[].*.server_cert", "s[].*.server_key", "s[].*.mqtt_topic", "s[].*.mqtt_subscribe", "s[].*.mqtt_qos", "s[].*.mqtt_retain", "s[].*.mqtt_keep_alive", "s[].*.mqtt_clean_start", "s[].*.mqtt_will_topic", "s[].*.mqtt_will_message", "s[].*.mqtt_will_qos", "s[].*.mqtt_will_retain", "s[].*.mqtt_birth_topic", "s[].*.mqtt_birth_message", "s[].*.mqtt_birth_qos", "s[].*.mqtt_birth_retain", "s[].*.aws_iot", "s[].*.swake_validity", "s[].*.use_auth", "s[].*.aws_region", "s[].*.aws_service", "s[].*.direct_proto_str", "s[].*", "auth[].name", "auth[].type", "auth[].streamtype", "auth[].blob", "auth[]", }; typedef enum { LSSPPT_RELEASE, LSSPPT_PRODUCT, LSSPPT_SCHEMA_VERSION, LSSPPT_VIA_SOCKS5, LSSPPT_BACKOFF, LSSPPT_CONCEAL, LSSPPT_JITTERPC, LSSPPT_VALIDPING_S, LSSPPT_VALIDHUP_S, LSSPPT_RETRY, LSSPPT_CERTS, LSSPPT_TRUST_STORES_NAME, LSSPPT_TRUST_STORES_STACK, LSSPPT_METRICS_NAME, LSSPPT_METRICS_US_SCHEDULE, LSSPPT_METRICS_US_HALFLIFE, LSSPPT_METRICS_MIN_OUTLIER, LSSPPT_METRICS_REPORT, LSSPPT_ENDPOINT, LSSPPT_VH_VIA_SOCKS5, LSSPPT_PROTOCOL, LSSPPT_PORT, LSSPPT_PLUGINS, LSSPPT_TLS, LSSPPT_TLS_CLIENT_CERT, LSSPPT_OPPORTUNISTIC, LSSPPT_NAILED_UP, LSSPPT_ALLOW_REDIRECTS, LSSPPT_URGENT_TX, LSSPPT_URGENT_RX, LSSPPT_ATTR_PRIORITY, LSSPPT_ATTR_LOW_LATENCY, LSSPPT_ATTR_HIGH_THROUGHPUT, LSSPPT_ATTR_HIGH_RELIABILITY, LSSPPT_ATTR_LOW_COST, LSSPPT_LONG_POLL, LSSPPT_PRIORITIZE_READS, LSSPPT_RETRYPTR, LSSPPT_DEFAULT_TIMEOUT_MS, LSSPPT_PERF, LSSPPT_TRUST, LSSPPT_PROXY_BUFLEN, LSSPPT_PROXY_BUFLEN_RXFLOW_ON_ABOVE, LSSPPT_PROXY_BUFLEN_RXFLOW_OFF_BELOW, LSSPPT_CLIENT_BUFLEN, LSSPPT_CLIENT_BUFLEN_RXFLOW_ON_ABOVE, LSSPPT_CLIENT_BUFLEN_RXFLOW_OFF_BELOW, LSSPPT_METADATA, LSSPPT_METADATA_ITEM, LSSPPT_HTTPRESPMAP, LSSPPT_HTTPRESPMAP_ITEM, LSSPPT_HTTP_AUTH_HEADER, LSSPPT_HTTP_DSN_HEADER, LSSPPT_HTTP_FWV_HEADER, LSSPPT_HTTP_TYPE_HEADER, LSSPPT_HTTP_AUTH_PREAMBLE, LSSPPT_HTTP_NO_CONTENT_LENGTH, LSSPPT_RIDESHARE, LSSPPT_PAYLOAD_FORMAT, LSSPPT_HTTP_METHOD, LSSPPT_HTTP_URL, LSSPPT_NGHTTP2_QUIRK_END_STREAM, LSSPPT_H2_QUIRK_OVERFLOWS_TXCR, LSSPPT_HTTP_MULTIPART_NAME, LSSPPT_HTTP_MULTIPART_FILENAME, LSSPPT_HTTP_MULTIPART_CONTENT_TYPE, LSSPPT_HTTP_WWW_FORM_URLENCODED, LSSPPT_HTTP_EXPECT, LSSPPT_HTTP_COOKIES, LSSPPT_HTTP_FAIL_REDIRECT, LSSPPT_HTTP_MULTIPART_SS_IN, LSSPPT_WS_SUBPROTOCOL, LSSPPT_WS_BINARY, LSSPPT_LOCAL_SINK, LSSPPT_SERVER, LSSPPT_SERVER_CERT, LSSPPT_SERVER_KEY, LSSPPT_MQTT_TOPIC, LSSPPT_MQTT_SUBSCRIBE, LSSPPT_MQTT_QOS, LSSPPT_MQTT_RETAIN, LSSPPT_MQTT_KEEPALIVE, LSSPPT_MQTT_CLEAN_START, LSSPPT_MQTT_WILL_TOPIC, LSSPPT_MQTT_WILL_MESSAGE, LSSPPT_MQTT_WILL_QOS, LSSPPT_MQTT_WILL_RETAIN, LSSPPT_MQTT_BIRTH_TOPIC, LSSPPT_MQTT_BIRTH_MESSAGE, LSSPPT_MQTT_BIRTH_QOS, LSSPPT_MQTT_BIRTH_RETAIN, LSSPPT_MQTT_AWS_IOT, LSSPPT_SWAKE_VALIDITY, LSSPPT_USE_AUTH, LSSPPT_AWS_REGION, LSSPPT_AWS_SERVICE, LSSPPT_DIRECT_PROTO_STR, LSSPPT_STREAMTYPES, LSSPPT_AUTH_NAME, LSSPPT_AUTH_TYPE, LSSPPT_AUTH_STREAMTYPE, LSSPPT_AUTH_BLOB, LSSPPT_AUTH, } policy_token_t; #define POL_AC_INITIAL 2048 #define POL_AC_GRAIN 800 #define MAX_CERT_TEMP 3072 /* used to discover actual cert size for realloc */ static uint16_t sizes[] = { sizeof(backoff_t), sizeof(lws_ss_x509_t), sizeof(lws_ss_trust_store_t), sizeof(lws_ss_policy_t), sizeof(lws_ss_auth_t), sizeof(lws_metric_policy_t), }; static const char * const protonames[] = { "h1", /* LWSSSP_H1 */ "h2", /* LWSSSP_H2 */ "ws", /* LWSSSP_WS */ "mqtt", /* LWSSSP_MQTT */ "raw", /* LWSSSP_RAW */ }; static const lws_ss_auth_t * lws_ss_policy_find_auth_by_name(struct policy_cb_args *a, const char *name, size_t len) { const lws_ss_auth_t *auth = a->heads[LTY_AUTH].a; while (auth) { if (auth->name && len == strlen(auth->name) && !strncmp(auth->name, name, len)) return auth; auth = auth->next; } return NULL; } static int lws_ss_policy_alloc_helper(struct policy_cb_args *a, int type) { /* * We do the pointers always as .b union member, all of the * participating structs begin with .next and .name the same */ a->curr[type].b = lwsac_use_zero(&a->ac, sizes[type], POL_AC_GRAIN); if (!a->curr[type].b) return 1; a->curr[type].b->next = a->heads[type].b; a->heads[type].b = a->curr[type].b; return 0; } static signed char lws_ss_policy_parser_cb(struct lejp_ctx *ctx, char reason) { struct policy_cb_args *a = (struct policy_cb_args *)ctx->user; #if defined(LWS_WITH_SSPLUGINS) const lws_ss_plugin_t **pin; #endif char **pp, dotstar[32], *q; lws_ss_trust_store_t *ts; lws_ss_metadata_t *pmd; lws_ss_x509_t *x, **py; lws_ss_policy_t *p2; lws_retry_bo_t *b; size_t inl, outl; uint8_t *extant; backoff_t *bot; int n = -1; // lwsl_debug("%s: %d %d %s\n", __func__, reason, ctx->path_match - 1, // ctx->path); switch (ctx->path_match - 1) { case LSSPPT_RETRY: n = LTY_BACKOFF; break; case LSSPPT_CERTS: n = LTY_X509; break; case LSSPPT_TRUST_STORES_NAME: case LSSPPT_TRUST_STORES_STACK: n = LTY_TRUSTSTORE; break; case LSSPPT_STREAMTYPES: n = LTY_POLICY; break; case LSSPPT_AUTH: n = LTY_AUTH; break; case LSSPPT_METRICS_NAME: case LSSPPT_METRICS_US_SCHEDULE: case LSSPPT_METRICS_US_HALFLIFE: case LSSPPT_METRICS_MIN_OUTLIER: case LSSPPT_METRICS_REPORT: n = LTY_METRICS; break; } if (reason == LEJPCB_ARRAY_START && (ctx->path_match - 1 == LSSPPT_PLUGINS || ctx->path_match - 1 == LSSPPT_METADATA || ctx->path_match - 1 == LSSPPT_HTTPRESPMAP)) a->count = 0; if (reason == LEJPCB_OBJECT_START && n == LTY_AUTH) { if (lws_ss_policy_alloc_helper(a, LTY_AUTH)) goto oom; return 0; } if (reason == LEJPCB_ARRAY_END && ctx->path_match - 1 == LSSPPT_TRUST_STORES_STACK && !a->count) { lwsl_err("%s: at least one cert required in trust store\n", __func__); goto oom; } if (reason == LEJPCB_ARRAY_END && a->count && a->pending_respmap) { // lwsl_notice("%s: allocating respmap %d\n", __func__, a->count); a->curr[LTY_POLICY].p->u.http.respmap = lwsac_use_zero(&a->ac, sizeof(lws_ss_http_respmap_t) * (unsigned int)a->count, POL_AC_GRAIN); if (!a->curr[LTY_POLICY].p->u.http.respmap) goto oom; memcpy((void *)a->curr[LTY_POLICY].p->u.http.respmap, a->respmap, sizeof(lws_ss_http_respmap_t) * (unsigned int)a->count); a->curr[LTY_POLICY].p->u.http.count_respmap = (uint8_t)a->count; a->count = 0; a->pending_respmap = 0; return 0; } if (reason == LEJPCB_OBJECT_END && a->p) { /* * Allocate a just-the-right-size buf for the cert DER now * we decoded it into the a->p temp buffer and know the exact * size. * * The struct *x is in the lwsac... the ca_der it points to * is individually allocated from the heap */ a->curr[LTY_X509].x->ca_der = lws_malloc((unsigned int)a->count, "ssx509"); if (!a->curr[LTY_X509].x->ca_der) goto oom; memcpy((uint8_t *)a->curr[LTY_X509].x->ca_der, a->p, (unsigned int)a->count); a->curr[LTY_X509].x->ca_der_len = (unsigned int)a->count; /* * ... and then we can free the temp buffer */ lws_free_set_NULL(a->p); return 0; } if (reason == LEJPCB_PAIR_NAME && n != -1 && (n != LTY_TRUSTSTORE && n != LTY_AUTH && n != LTY_METRICS)) { p2 = NULL; if (n == LTY_POLICY) { /* * We want to allow for the possibility of overlays... * eg, we come later with a JSON snippet that overrides * select streamtype members of a streamtype that was * already defined */ p2 = (lws_ss_policy_t *)a->context->pss_policies; while (p2) { if (!strncmp(p2->streamtype, ctx->path + ctx->st[ctx->sp].p, (unsigned int)(ctx->path_match_len - ctx->st[ctx->sp].p))) { lwsl_info("%s: overriding s[] %s\n", __func__, p2->streamtype); break; } p2 = p2->next; } } /* * We do the pointers always as .b union member, all of the * participating structs begin with .next and .name the same */ if (p2) /* we may be overriding existing streamtype... */ a->curr[n].b = (backoff_t *)p2; else a->curr[n].b = lwsac_use_zero(&a->ac, sizes[n], POL_AC_GRAIN); if (!a->curr[n].b) goto oom; if (n == LTY_X509) { a->p = lws_malloc(MAX_CERT_TEMP, "cert temp"); if (!a->p) goto oom; memset(&a->b64, 0, sizeof(a->b64)); } a->count = 0; if (!p2) { a->curr[n].b->next = a->heads[n].b; a->heads[n].b = a->curr[n].b; pp = (char **)&a->curr[n].b->name; goto string1; } return 0; /* overriding */ } if (!(reason & LEJP_FLAG_CB_IS_VALUE) || !ctx->path_match) return 0; switch (ctx->path_match - 1) { /* strings */ case LSSPPT_RELEASE: break; case LSSPPT_PRODUCT: break; case LSSPPT_SCHEMA_VERSION: break; case LSSPPT_VIA_SOCKS5: /* the global / default proxy */ pp = (char **)&a->socks5_proxy; goto string2; case LSSPPT_BACKOFF: b = &a->curr[LTY_BACKOFF].b->r; if (b->retry_ms_table_count == 8) { lwsl_err("%s: > 8 backoff levels\n", __func__); return 1; } if (!b->retry_ms_table_count) { b->retry_ms_table = (uint32_t *)lwsac_use_zero(&a->ac, sizeof(uint32_t) * 8, POL_AC_GRAIN); if (!b->retry_ms_table) goto oom; } ((uint32_t *)b->retry_ms_table) [b->retry_ms_table_count++] = (uint32_t)atoi(ctx->buf); break; case LSSPPT_CONCEAL: a->curr[LTY_BACKOFF].b->r.conceal_count = (uint16_t)atoi(ctx->buf); break; case LSSPPT_JITTERPC: a->curr[LTY_BACKOFF].b->r.jitter_percent = (uint8_t)atoi(ctx->buf); break; case LSSPPT_VALIDPING_S: a->curr[LTY_BACKOFF].b->r.secs_since_valid_ping = (uint16_t)atoi(ctx->buf); break; case LSSPPT_VALIDHUP_S: a->curr[LTY_BACKOFF].b->r.secs_since_valid_hangup = (uint16_t)atoi(ctx->buf); break; case LSSPPT_CERTS: if (a->count + ctx->npos >= MAX_CERT_TEMP) { lwsl_err("%s: cert too big\n", __func__); goto oom; } inl = ctx->npos; outl = MAX_CERT_TEMP - (unsigned int)a->count; lws_b64_decode_stateful(&a->b64, ctx->buf, &inl, a->p + a->count, &outl, reason == LEJPCB_VAL_STR_END); a->count += (int)outl; if (inl != ctx->npos) { lwsl_err("%s: b64 decode fail\n", __func__); goto oom; } break; case LSSPPT_TRUST_STORES_NAME: if (lws_ss_policy_alloc_helper(a, LTY_TRUSTSTORE)) goto oom; a->count = 0; pp = (char **)&a->curr[LTY_TRUSTSTORE].b->name; goto string2; case LSSPPT_TRUST_STORES_STACK: if (a->count >= (int)LWS_ARRAY_SIZE( a->curr[LTY_TRUSTSTORE].t->ssx509)) { lwsl_err("%s: trust store too big\n", __func__); goto oom; } lwsl_debug("%s: trust stores stack %.*s\n", __func__, ctx->npos, ctx->buf); x = a->heads[LTY_X509].x; while (x) { if (!strncmp(x->vhost_name, ctx->buf, ctx->npos)) { a->curr[LTY_TRUSTSTORE].t->ssx509[a->count++] = x; a->curr[LTY_TRUSTSTORE].t->count++; return 0; } x = x->next; } lws_strnncpy(dotstar, ctx->buf, ctx->npos, sizeof(dotstar)); lwsl_err("%s: unknown trust store entry %s\n", __func__, dotstar); goto oom; #if defined(LWS_WITH_SYS_METRICS) case LSSPPT_METRICS_NAME: if (lws_ss_policy_alloc_helper(a, LTY_METRICS)) goto oom; pp = (char **)&a->curr[LTY_METRICS].b->name; goto string2; case LSSPPT_METRICS_US_SCHEDULE: a->curr[LTY_METRICS].m->us_schedule = (uint64_t)atoll(ctx->buf); break; case LSSPPT_METRICS_US_HALFLIFE: a->curr[LTY_METRICS].m->us_decay_unit = (uint32_t)atol(ctx->buf); break; case LSSPPT_METRICS_MIN_OUTLIER: a->curr[LTY_METRICS].m->min_contributors = (uint8_t)atoi(ctx->buf); break; case LSSPPT_METRICS_REPORT: pp = (char **)&a->curr[LTY_METRICS].m->report; goto string2; #endif case LSSPPT_SERVER_CERT: case LSSPPT_SERVER_KEY: /* iterate through the certs */ py = &a->heads[LTY_X509].x; x = a->heads[LTY_X509].x; while (x) { if (!strncmp(x->vhost_name, ctx->buf, ctx->npos) && !x->vhost_name[ctx->npos]) { if ((ctx->path_match - 1) == LSSPPT_SERVER_CERT) a->curr[LTY_POLICY].p->trust.server.cert = x; else a->curr[LTY_POLICY].p->trust.server.key = x; /* * Certs that are for servers need to stick * around in DER form, so the vhost can be * instantiated when the server is brought up */ x->keep = 1; lwsl_notice("%s: server '%s' keep %d %p\n", __func__, x->vhost_name, ctx->path_match - 1, x); /* * Server DER we need to move it to another * list just for destroying it when the context * is destroyed... snip us out of the live * X.509 list */ *py = x->next; /* * ... and instead put us on the list of things * to keep hold of for context destruction */ x->next = a->context->server_der_list; a->context->server_der_list = x; return 0; } py = &x->next; x = x->next; } lws_strnncpy(dotstar, ctx->buf, ctx->npos, sizeof(dotstar)); lwsl_err("%s: unknown cert / key %s\n", __func__, dotstar); goto oom; case LSSPPT_ENDPOINT: pp = (char **)&a->curr[LTY_POLICY].p->endpoint; goto string2; case LSSPPT_VH_VIA_SOCKS5: pp = (char **)&a->curr[LTY_POLICY].p->socks5_proxy; goto string2; case LSSPPT_PORT: a->curr[LTY_POLICY].p->port = (uint16_t)atoi(ctx->buf); break; case LSSPPT_PROXY_BUFLEN: a->curr[LTY_POLICY].p->proxy_buflen = (uint32_t)atol(ctx->buf); break; case LSSPPT_PROXY_BUFLEN_RXFLOW_ON_ABOVE: a->curr[LTY_POLICY].p->proxy_buflen_rxflow_on_above = (uint32_t)atol(ctx->buf); break; case LSSPPT_PROXY_BUFLEN_RXFLOW_OFF_BELOW: a->curr[LTY_POLICY].p->proxy_buflen_rxflow_off_below = (uint32_t)atol(ctx->buf); break; case LSSPPT_CLIENT_BUFLEN: a->curr[LTY_POLICY].p->client_buflen = (uint32_t)atol(ctx->buf); break; case LSSPPT_CLIENT_BUFLEN_RXFLOW_ON_ABOVE: a->curr[LTY_POLICY].p->client_buflen_rxflow_on_above = (uint32_t)atol(ctx->buf); break; case LSSPPT_CLIENT_BUFLEN_RXFLOW_OFF_BELOW: a->curr[LTY_POLICY].p->client_buflen_rxflow_off_below = (uint32_t)atol(ctx->buf); break; case LSSPPT_HTTP_METHOD: pp = (char **)&a->curr[LTY_POLICY].p->u.http.method; goto string2; case LSSPPT_HTTP_URL: pp = (char **)&a->curr[LTY_POLICY].p->u.http.url; goto string2; case LSSPPT_RIDESHARE: pp = (char **)&a->curr[LTY_POLICY].p->rideshare_streamtype; goto string2; case LSSPPT_PAYLOAD_FORMAT: pp = (char **)&a->curr[LTY_POLICY].p->payload_fmt; goto string2; case LSSPPT_PLUGINS: #if defined(LWS_WITH_SSPLUGINS) pin = a->context->pss_plugins; if (a->count == (int)LWS_ARRAY_SIZE(a->curr[LTY_POLICY].p->plugins)) { lwsl_err("%s: too many plugins\n", __func__); goto oom; } if (!pin) break; while (*pin) { if (!strncmp((*pin)->name, ctx->buf, ctx->npos)) { a->curr[LTY_POLICY].p->plugins[a->count++] = *pin; return 0; } pin++; } lwsl_err("%s: unknown plugin\n", __func__); goto oom; #else break; #endif case LSSPPT_TLS: if (reason == LEJPCB_VAL_TRUE) a->curr[LTY_POLICY].p->flags |= LWSSSPOLF_TLS; break; case LSSPPT_TLS_CLIENT_CERT: a->curr[LTY_POLICY].p->client_cert = (uint8_t)(atoi(ctx->buf) + 1); break; case LSSPPT_AUTH_BLOB: a->curr[LTY_AUTH].a->blob_index = (uint8_t)atoi(ctx->buf); break; case LSSPPT_HTTP_EXPECT: a->curr[LTY_POLICY].p->u.http.resp_expect = (uint16_t)atoi(ctx->buf); break; case LSSPPT_DEFAULT_TIMEOUT_MS: a->curr[LTY_POLICY].p->timeout_ms = (uint32_t)atoi(ctx->buf); break; case LSSPPT_ATTR_PRIORITY: a->curr[LTY_POLICY].p->priority = (uint8_t)atoi(ctx->buf); break; case LSSPPT_OPPORTUNISTIC: if (reason == LEJPCB_VAL_TRUE) a->curr[LTY_POLICY].p->flags |= LWSSSPOLF_OPPORTUNISTIC; break; case LSSPPT_NAILED_UP: if (reason == LEJPCB_VAL_TRUE) a->curr[LTY_POLICY].p->flags |= LWSSSPOLF_NAILED_UP; break; case LSSPPT_URGENT_TX: if (reason == LEJPCB_VAL_TRUE) a->curr[LTY_POLICY].p->flags |= LWSSSPOLF_URGENT_TX; break; case LSSPPT_URGENT_RX: if (reason == LEJPCB_VAL_TRUE) a->curr[LTY_POLICY].p->flags |= LWSSSPOLF_URGENT_RX; break; case LSSPPT_LONG_POLL: if (reason == LEJPCB_VAL_TRUE) a->curr[LTY_POLICY].p->flags |= LWSSSPOLF_LONG_POLL; break; case LSSPPT_PRIORITIZE_READS: if (reason == LEJPCB_VAL_TRUE) a->curr[LTY_POLICY].p->flags |= LWSSSPOLF_PRIORITIZE_READS; break; case LSSPPT_HTTP_WWW_FORM_URLENCODED: if (reason == LEJPCB_VAL_TRUE) a->curr[LTY_POLICY].p->flags |= LWSSSPOLF_HTTP_X_WWW_FORM_URLENCODED; break; case LSSPPT_SWAKE_VALIDITY: if (reason == LEJPCB_VAL_TRUE) a->curr[LTY_POLICY].p->flags |= LWSSSPOLF_WAKE_SUSPEND__VALIDITY; break; case LSSPPT_ALLOW_REDIRECTS: if (reason == LEJPCB_VAL_TRUE) a->curr[LTY_POLICY].p->flags |= LWSSSPOLF_ALLOW_REDIRECTS; break; case LSSPPT_HTTP_COOKIES: if (reason == LEJPCB_VAL_TRUE) a->curr[LTY_POLICY].p->flags |= LWSSSPOLF_HTTP_CACHE_COOKIES; break; case LSSPPT_HTTP_MULTIPART_SS_IN: if (reason == LEJPCB_VAL_TRUE) a->curr[LTY_POLICY].p->flags |= LWSSSPOLF_HTTP_MULTIPART_IN; return 0; case LSSPPT_ATTR_LOW_LATENCY: if (reason == LEJPCB_VAL_TRUE) a->curr[LTY_POLICY].p->flags |= LWSSSPOLF_ATTR_LOW_LATENCY; return 0; case LSSPPT_ATTR_HIGH_THROUGHPUT: if (reason == LEJPCB_VAL_TRUE) a->curr[LTY_POLICY].p->flags |= LWSSSPOLF_ATTR_HIGH_THROUGHPUT; return 0; case LSSPPT_ATTR_HIGH_RELIABILITY: if (reason == LEJPCB_VAL_TRUE) a->curr[LTY_POLICY].p->flags |= LWSSSPOLF_ATTR_HIGH_RELIABILITY; return 0; case LSSPPT_ATTR_LOW_COST: if (reason == LEJPCB_VAL_TRUE) a->curr[LTY_POLICY].p->flags |= LWSSSPOLF_ATTR_LOW_COST; return 0; case LSSPPT_PERF: if (reason == LEJPCB_VAL_TRUE) a->curr[LTY_POLICY].p->flags |= LWSSSPOLF_PERF; return 0; case LSSPPT_RETRYPTR: bot = a->heads[LTY_BACKOFF].b; while (bot) { if (!strncmp(ctx->buf, bot->name, ctx->npos)) { a->curr[LTY_POLICY].p->retry_bo = &bot->r; return 0; } bot = bot->next; } lwsl_err("%s: unknown backoff scheme\n", __func__); return -1; case LSSPPT_TRUST: ts = a->heads[LTY_TRUSTSTORE].t; while (ts) { if (!strncmp(ctx->buf, ts->name, ctx->npos)) { a->curr[LTY_POLICY].p->trust.store = ts; return 0; } ts = ts->next; } lws_strnncpy(dotstar, ctx->buf, ctx->npos, sizeof(dotstar)); lwsl_err("%s: unknown trust store name %s\n", __func__, dotstar); return -1; case LSSPPT_METADATA: break; case LSSPPT_USE_AUTH: a->curr[LTY_POLICY].p->auth = lws_ss_policy_find_auth_by_name(a, ctx->buf, ctx->npos); if (!a->curr[LTY_POLICY].p->auth) { lws_strnncpy(dotstar, ctx->buf, ctx->npos, sizeof(dotstar)); lwsl_err("%s: unknown auth '%s'\n", __func__, dotstar); return -1; } break; case LSSPPT_METADATA_ITEM: pmd = a->curr[LTY_POLICY].p->metadata; a->curr[LTY_POLICY].p->metadata = lwsac_use_zero(&a->ac, sizeof(lws_ss_metadata_t) + ctx->npos + (unsigned int)(ctx->path_match_len - ctx->st[ctx->sp - 2].p + 1) + 2, POL_AC_GRAIN); a->curr[LTY_POLICY].p->metadata->next = pmd; q = (char *)a->curr[LTY_POLICY].p->metadata + sizeof(lws_ss_metadata_t); a->curr[LTY_POLICY].p->metadata->name = q; memcpy(q, ctx->path + ctx->st[ctx->sp - 2].p + 1, (unsigned int)(ctx->path_match_len - ctx->st[ctx->sp - 2].p)); q += ctx->path_match_len - ctx->st[ctx->sp - 2].p; a->curr[LTY_POLICY].p->metadata->value__may_own_heap = q; memcpy(q, ctx->buf, ctx->npos); #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) /* * Check the metadata value part to see if it's a well-known * http header... if so, LWS_HTTP_NO_KNOWN_HEADER (0xff) means * no header string match else it's the well-known header index */ a->curr[LTY_POLICY].p->metadata->value_is_http_token = (uint8_t) lws_http_string_to_known_header(ctx->buf, ctx->npos); #endif a->curr[LTY_POLICY].p->metadata->length = /* the index in handle->metadata */ a->curr[LTY_POLICY].p->metadata_count++; a->curr[LTY_POLICY].p->metadata->value_length = ctx->npos; break; #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) case LSSPPT_HTTPRESPMAP_ITEM: if (a->count >= (int)LWS_ARRAY_SIZE(a->respmap)) { lwsl_err("%s: respmap too big\n", __func__); return -1; } a->respmap[a->count].resp = (uint16_t) atoi(ctx->path + ctx->st[ctx->sp - 2].p + 1); a->respmap[a->count].state = (uint16_t)atoi(ctx->buf); a->pending_respmap = 1; a->count++; break; case LSSPPT_HTTP_AUTH_HEADER: case LSSPPT_HTTP_DSN_HEADER: case LSSPPT_HTTP_FWV_HEADER: case LSSPPT_HTTP_TYPE_HEADER: pp = (char **)&a->curr[LTY_POLICY].p->u.http.blob_header[ (ctx->path_match - 1) - LSSPPT_HTTP_AUTH_HEADER]; goto string2; case LSSPPT_HTTP_AUTH_PREAMBLE: pp = (char **)&a->curr[LTY_POLICY].p->u.http.auth_preamble; goto string2; case LSSPPT_HTTP_NO_CONTENT_LENGTH: if (reason == LEJPCB_VAL_TRUE) a->curr[LTY_POLICY].p->flags |= LWSSSPOLF_HTTP_NO_CONTENT_LENGTH; break; case LSSPPT_NGHTTP2_QUIRK_END_STREAM: if (reason == LEJPCB_VAL_TRUE) a->curr[LTY_POLICY].p->flags |= LWSSSPOLF_QUIRK_NGHTTP2_END_STREAM; break; case LSSPPT_H2_QUIRK_OVERFLOWS_TXCR: if (reason == LEJPCB_VAL_TRUE) a->curr[LTY_POLICY].p->flags |= LWSSSPOLF_H2_QUIRK_OVERFLOWS_TXCR; break; case LSSPPT_HTTP_MULTIPART_NAME: a->curr[LTY_POLICY].p->flags |= LWSSSPOLF_HTTP_MULTIPART; pp = (char **)&a->curr[LTY_POLICY].p->u.http.multipart_name; goto string2; case LSSPPT_HTTP_MULTIPART_FILENAME: a->curr[LTY_POLICY].p->flags |= LWSSSPOLF_HTTP_MULTIPART; pp = (char **)&a->curr[LTY_POLICY].p->u.http.multipart_filename; goto string2; case LSSPPT_HTTP_MULTIPART_CONTENT_TYPE: a->curr[LTY_POLICY].p->flags |= LWSSSPOLF_HTTP_MULTIPART; pp = (char **)&a->curr[LTY_POLICY].p->u.http.multipart_content_type; goto string2; case LSSPPT_AUTH_NAME: pp = (char **)&a->curr[LTY_AUTH].a->name; goto string2; case LSSPPT_AUTH_STREAMTYPE: pp = (char **)&a->curr[LTY_AUTH].a->streamtype; goto string2; case LSSPPT_AUTH_TYPE: pp = (char **)&a->curr[LTY_AUTH].a->type; goto string2; case LSSPPT_HTTP_FAIL_REDIRECT: a->curr[LTY_POLICY].p->u.http.fail_redirect = reason == LEJPCB_VAL_TRUE; break; #if defined(LWS_WITH_SECURE_STREAMS_AUTH_SIGV4) case LSSPPT_AWS_REGION: pp = (char **)&a->curr[LTY_POLICY].p->aws_region; goto string2; case LSSPPT_AWS_SERVICE: pp = (char **)&a->curr[LTY_POLICY].p->aws_service; goto string2; #endif #endif #if defined(LWS_ROLE_WS) case LSSPPT_WS_SUBPROTOCOL: pp = (char **)&a->curr[LTY_POLICY].p->u.http.u.ws.subprotocol; goto string2; case LSSPPT_WS_BINARY: a->curr[LTY_POLICY].p->u.http.u.ws.binary = reason == LEJPCB_VAL_TRUE; break; #endif case LSSPPT_LOCAL_SINK: if (reason == LEJPCB_VAL_TRUE) a->curr[LTY_POLICY].p->flags |= LWSSSPOLF_LOCAL_SINK; break; case LSSPPT_SERVER: if (reason == LEJPCB_VAL_TRUE) a->curr[LTY_POLICY].p->flags |= LWSSSPOLF_SERVER; break; #if defined(LWS_ROLE_MQTT) case LSSPPT_MQTT_TOPIC: pp = (char **)&a->curr[LTY_POLICY].p->u.mqtt.topic; goto string2; case LSSPPT_MQTT_SUBSCRIBE: pp = (char **)&a->curr[LTY_POLICY].p->u.mqtt.subscribe; goto string2; case LSSPPT_MQTT_QOS: a->curr[LTY_POLICY].p->u.mqtt.qos = (uint8_t)atoi(ctx->buf); break; case LSSPPT_MQTT_RETAIN: a->curr[LTY_POLICY].p->u.mqtt.retain = reason == LEJPCB_VAL_TRUE; break; case LSSPPT_MQTT_KEEPALIVE: a->curr[LTY_POLICY].p->u.mqtt.keep_alive = (uint16_t)atoi(ctx->buf); break; case LSSPPT_MQTT_CLEAN_START: a->curr[LTY_POLICY].p->u.mqtt.clean_start = reason == LEJPCB_VAL_TRUE; break; case LSSPPT_MQTT_WILL_TOPIC: pp = (char **)&a->curr[LTY_POLICY].p->u.mqtt.will_topic; goto string2; case LSSPPT_MQTT_WILL_MESSAGE: pp = (char **)&a->curr[LTY_POLICY].p->u.mqtt.will_message; goto string2; case LSSPPT_MQTT_WILL_QOS: a->curr[LTY_POLICY].p->u.mqtt.will_qos = (uint8_t)atoi(ctx->buf); break; case LSSPPT_MQTT_WILL_RETAIN: a->curr[LTY_POLICY].p->u.mqtt.will_retain = reason == LEJPCB_VAL_TRUE; break; case LSSPPT_MQTT_BIRTH_TOPIC: pp = (char **)&a->curr[LTY_POLICY].p->u.mqtt.birth_topic; goto string2; case LSSPPT_MQTT_BIRTH_MESSAGE: pp = (char **)&a->curr[LTY_POLICY].p->u.mqtt.birth_message; goto string2; case LSSPPT_MQTT_BIRTH_QOS: a->curr[LTY_POLICY].p->u.mqtt.birth_qos = (uint8_t)atoi(ctx->buf); break; case LSSPPT_MQTT_BIRTH_RETAIN: a->curr[LTY_POLICY].p->u.mqtt.birth_retain = reason == LEJPCB_VAL_TRUE; break; case LSSPPT_MQTT_AWS_IOT: if (reason == LEJPCB_VAL_TRUE) a->curr[LTY_POLICY].p->u.mqtt.aws_iot = reason == LEJPCB_VAL_TRUE; break; #endif case LSSPPT_DIRECT_PROTO_STR: if (reason == LEJPCB_VAL_TRUE) a->curr[LTY_POLICY].p->flags |= LWSSSPOLF_DIRECT_PROTO_STR; break; case LSSPPT_PROTOCOL: a->curr[LTY_POLICY].p->protocol = 0xff; for (n = 0; n < (int)LWS_ARRAY_SIZE(protonames); n++) if (strlen(protonames[n]) == ctx->npos && !strncmp(ctx->buf, protonames[n], ctx->npos)) a->curr[LTY_POLICY].p->protocol = (uint8_t)n; if (a->curr[LTY_POLICY].p->protocol != 0xff) break; lws_strnncpy(dotstar, ctx->buf, ctx->npos, sizeof(dotstar)); lwsl_err("%s: unknown protocol name %s\n", __func__, dotstar); return -1; default: break; } return 0; string2: /* * If we can do const string folding, reuse the existing string rather * than make a new entry */ extant = lwsac_scan_extant(a->ac, (uint8_t *)ctx->buf, (size_t)ctx->npos, 1); if (extant) { *pp = (char *)extant; return 0; } *pp = lwsac_use_backfill(&a->ac, (size_t)(ctx->npos + 1), POL_AC_GRAIN); if (!*pp) goto oom; memcpy(*pp, ctx->buf, ctx->npos); (*pp)[ctx->npos] = '\0'; return 0; string1: n = ctx->st[ctx->sp].p; *pp = lwsac_use_backfill(&a->ac, (size_t)ctx->path_match_len + (size_t)1 - (size_t)n, POL_AC_GRAIN); if (!*pp) goto oom; memcpy(*pp, ctx->path + n, ctx->path_match_len - (unsigned int)n); (*pp)[ctx->path_match_len - n] = '\0'; return 0; oom: lwsl_err("%s: OOM\n", __func__); lws_free_set_NULL(a->p); lwsac_free(&a->ac); return -1; } int lws_ss_policy_parse_begin(struct lws_context *context, int overlay) { struct policy_cb_args *args; char *p; args = lws_zalloc(sizeof(struct policy_cb_args), __func__); if (!args) { lwsl_err("%s: OOM\n", __func__); return 1; } if (overlay) /* continue to use the existing lwsac */ args->ac = context->ac_policy; else /* we don't want to see any old policy */ context->pss_policies = NULL; context->pol_args = args; args->context = context; p = lwsac_use(&args->ac, 1, POL_AC_INITIAL); if (!p) { lwsl_err("%s: OOM\n", __func__); lws_free_set_NULL(context->pol_args); return -1; } *p = 0; lejp_construct(&args->jctx, lws_ss_policy_parser_cb, args, lejp_tokens_policy, LWS_ARRAY_SIZE(lejp_tokens_policy)); return 0; } int lws_ss_policy_parse_abandon(struct lws_context *context) { struct policy_cb_args *args = (struct policy_cb_args *)context->pol_args; lws_ss_x509_t *x; x = args->heads[LTY_X509].x; while (x) { /* * Free all the client DER buffers now they have been parsed * into tls library X.509 objects */ lws_free((void *)x->ca_der); x->ca_der = NULL; x = x->next; } x = context->server_der_list; while (x) { lws_free((void *)x->ca_der); x->ca_der = NULL; x = x->next; } lejp_destruct(&args->jctx); lwsac_free(&args->ac); lws_free_set_NULL(context->pol_args); context->server_der_list = NULL; return 0; } #if !defined(LWS_PLAT_FREERTOS) && !defined(LWS_PLAT_OPTEE) int lws_ss_policy_parse_file(struct lws_context *cx, const char *filepath) { struct policy_cb_args *args = (struct policy_cb_args *)cx->pol_args; uint8_t buf[512]; int n, m, fd = lws_open(filepath, LWS_O_RDONLY); if (fd < 0) return LEJP_REJECT_UNKNOWN; do { n = (int)read(fd, buf, sizeof(buf)); if (n < 0) { m = -1; goto bail; } m = lejp_parse(&args->jctx, buf, n); if (m != LEJP_CONTINUE && m < 0) { lwsl_err("%s: parse failed line %u: %d: %s\n", __func__, (unsigned int)args->jctx.line, m, lejp_error_to_string(m)); lws_ss_policy_parse_abandon(cx); m = -1; goto bail; } if (m != LEJP_CONTINUE) break; } while (n); m = 0; bail: close(fd); return m; } #endif int lws_ss_policy_parse(struct lws_context *context, const uint8_t *buf, size_t len) { struct policy_cb_args *args = (struct policy_cb_args *)context->pol_args; int m; #if !defined(LWS_PLAT_FREERTOS) && !defined(LWS_PLAT_OPTEE) if (args->jctx.line < 2 && buf[0] != '{' && !args->parse_data) return lws_ss_policy_parse_file(context, (const char *)buf); #endif args->parse_data = 1; m = lejp_parse(&args->jctx, buf, (int)len); if (m == LEJP_CONTINUE || m >= 0) return m; lwsl_err("%s: parse failed line %u: %d: %s\n", __func__, (unsigned int)args->jctx.line, m, lejp_error_to_string(m)); lws_ss_policy_parse_abandon(context); assert(0); return m; } int lws_ss_policy_overlay(struct lws_context *context, const char *overlay) { lws_ss_policy_parse_begin(context, 1); return lws_ss_policy_parse(context, (const uint8_t *)overlay, strlen(overlay)); } const lws_ss_policy_t * lws_ss_policy_get(struct lws_context *context) { struct policy_cb_args *args = (struct policy_cb_args *)context->pol_args; if (!args) return NULL; return args->heads[LTY_POLICY].p; } const lws_ss_auth_t * lws_ss_auth_get(struct lws_context *context) { struct policy_cb_args *args = (struct policy_cb_args *)context->pol_args; if (!args) return NULL; return args->heads[LTY_AUTH].a; } libwebsockets-4.3.5/lib/secure-streams/private-lib-secure-streams.h000066400000000000000000000376071476025525100254460ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2019 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /* current SS Serialization protocol version */ #define LWS_SSS_CLIENT_PROTOCOL_VERSION 1 /* * Secure Stream state */ typedef enum { SSSEQ_IDLE, SSSEQ_TRY_CONNECT, SSSEQ_TRY_CONNECT_NAUTH, SSSEQ_TRY_CONNECT_SAUTH, SSSEQ_RECONNECT_WAIT, SSSEQ_DO_RETRY, SSSEQ_CONNECTED, } lws_ss_seq_state_t; struct conn; /** * lws_ss_handle_t: publicly-opaque secure stream object implementation */ typedef struct lws_ss_handle { lws_ss_info_t info; /**< copy of stream creation info */ lws_lifecycle_t lc; #if defined(LWS_WITH_SYS_METRICS) lws_metrics_caliper_compose(cal_txn) #endif struct lws_dll2 list; /**< pt lists active ss */ struct lws_dll2 to_list; /**< pt lists ss with pending to-s */ #if defined(LWS_WITH_SERVER) struct lws_dll2 cli_list; /**< same server clients list */ #endif #if defined(LWS_WITH_SYS_FAULT_INJECTION) lws_fi_ctx_t fic; /**< Fault Injection context */ #endif struct lws_dll2_owner src_list; /**< sink's list of bound sources */ struct lws_context *context; /**< lws context we are created on */ const lws_ss_policy_t *policy; /**< system policy for stream */ struct lws_sequencer *seq; /**< owning sequencer if any */ struct lws *wsi; /**< the stream wsi if any */ struct conn *conn_if_sspc_onw; #if defined(LWS_WITH_SSPLUGINS) void *nauthi; /**< the nauth plugin instance data */ void *sauthi; /**< the sauth plugin instance data */ #endif lws_ss_metadata_t *metadata; #if defined(LWS_WITH_SS_DIRECT_PROTOCOL_STR) lws_ss_metadata_t *instant_metadata; /**< for set instant metadata */ struct lwsac *imd_ac; /**< for get custom header */ #endif const lws_ss_policy_t *rideshare; struct lws_ss_handle *h_in_svc; #if defined(LWS_WITH_CONMON) char *conmon_json; #endif //struct lws_ss_handle *h_sink; /**< sink we are bound to, or NULL */ //void *sink_obj;/**< sink's private object representing us */ lws_sorted_usec_list_t sul_timeout; lws_sorted_usec_list_t sul; lws_ss_tx_ordinal_t txord; /* protocol-specific connection helpers */ union { /* ...for http-related protocols... */ struct { /* common to all http-related protocols */ /* incoming multipart parsing */ char boundary[24]; /* --boundary from headers */ uint8_t boundary_len; /* length of --boundary */ uint8_t boundary_seq; /* current match amount */ uint8_t boundary_dashes; /* check for -- after */ uint8_t boundary_post; /* swallow post CRLF */ uint8_t som:1; /* SOM has been sent */ uint8_t eom:1; /* EOM has been sent */ uint8_t any:1; /* any content has been sent */ uint8_t good_respcode:1; /* 200 type response code */ union { struct { /* LWSSSP_H1 */ #if defined(WIN32) uint8_t dummy; #endif } h1; struct { /* LWSSSP_H2 */ #if defined(WIN32) uint8_t dummy; #endif } h2; struct { /* LWSSSP_WS */ #if defined(WIN32) uint8_t dummy; #endif } ws; } u; } http; /* details for non-http related protocols... */ #if defined(LWS_ROLE_MQTT) struct { lws_mqtt_topic_elem_t topic_qos; lws_mqtt_topic_elem_t sub_top; lws_mqtt_subscribe_param_t sub_info; lws_mqtt_subscribe_param_t shadow_sub; /* allocation that must be destroyed with conn */ void *heap_baggage; const char *subscribe_to; size_t subscribe_to_len; struct lws_buflist *buflist_unacked; uint32_t unacked_size; uint8_t retry_count; uint8_t send_unacked:1; } mqtt; #endif #if defined(LWS_WITH_SYS_SMD) struct { struct lws_smd_peer *smd_peer; lws_sorted_usec_list_t sul_write; } smd; #endif } u; unsigned long writeable_len; lws_ss_constate_t connstate;/**< public connection state */ lws_ss_seq_state_t seqstate; /**< private connection state */ lws_ss_state_return_t pending_ret; /**< holds desired disposition * for ss during CCE */ #if defined(LWS_WITH_SERVER) int txn_resp; #endif uint16_t retry; /**< retry / backoff tracking */ #if defined(LWS_WITH_CONMON) uint16_t conmon_len; #endif int16_t temp16; uint8_t tsi; /**< service thread idx, usually 0 */ uint8_t subseq; /**< emulate SOM tracking */ uint8_t txn_ok; /**< 1 = transaction was OK */ uint8_t prev_ss_state; uint8_t txn_resp_set:1; /**< user code set one */ uint8_t txn_resp_pending:1; /**< we have yet to send */ uint8_t hanging_som:1; uint8_t inside_msg:1; uint8_t being_serialized:1; /* we are not the consumer */ uint8_t destroying:1; uint8_t ss_dangling_connected:1; uint8_t proxy_onward:1; /* opaque is conn */ uint8_t inside_connect:1; /* set if we are currently * creating the onward * connect */ } lws_ss_handle_t; /* connection helper that doesn't need to hang around after connection starts */ union lws_ss_contemp { #if defined(LWS_ROLE_MQTT) lws_mqtt_client_connect_param_t ccp; #else #if defined(WIN32) uint8_t dummy; #endif #endif }; /* * When allocating the opaque handle, we overallocate for: * * 1) policy->nauth_plugin->alloc (.nauthi) if any * 2) policy->sauth_plugin->alloc (.sauthi) if any * 3) copy of creation info stream type pointed to by info.streamtype... this * may be arbitrarily long and since it may be coming from socket ipc and be * temporary at creation time, we need a place for the copy to stay in scope * 4) copy of info->streamtype contents */ /* the user object allocation is immediately after the ss object allocation */ #define ss_to_userobj(ss) ((void *)&(ss)[1]) /* * serialization parser state */ enum { KIND_C_TO_P, KIND_SS_TO_P, }; struct lws_ss_serialization_parser { char streamtype[32]; char rideshare[32]; char metadata_name[32]; uint64_t ust_pwait; lws_ss_metadata_t *ssmd; uint8_t *rxmetaval; int ps; int ctr; uint32_t usd_phandling; uint32_t flags; uint32_t client_pid; int32_t temp32; int32_t txcr_out; int32_t txcr_in; uint16_t rem; uint8_t type; uint8_t frag1; uint8_t slen; uint8_t rsl_pos; uint8_t rsl_idx; uint8_t protocol_version; }; /* * Unlike locally-fulfilled SS, SSS doesn't have to hold metadata on client side * but pass it through to the proxy. The client side doesn't know the real * metadata names that are available in the policy (since it's hardcoded in code * no point passing them back to the client from the policy). Because of that, * it doesn't know how many to allocate when we create the sspc_handle either. * * So we use a linked-list of changed-but-not-yet-proxied metadata allocated * on the heap and items removed as they are proxied out. Anything on the list * is sent to the proxy before any requested tx is handled. * * This is also used to queue tx credit changes */ typedef struct lws_sspc_metadata { lws_dll2_t list; char name[32]; /* empty string, then actually TCXR */ size_t len; int tx_cr_adjust; /* the value of length .len is overallocated after this */ } lws_sspc_metadata_t; /* state of the upstream proxy onward connection */ enum { LWSSSPC_ONW_NONE, LWSSSPC_ONW_REQ, LWSSSPC_ONW_ONGOING, LWSSSPC_ONW_CONN, }; typedef struct lws_sspc_handle { char rideshare_list[128]; lws_lifecycle_t lc; lws_ss_info_t ssi; lws_sorted_usec_list_t sul_retry; struct lws_ss_serialization_parser parser; #if defined(LWS_WITH_SYS_FAULT_INJECTION) lws_fi_ctx_t fic; /**< Fault Injection context */ #endif lws_dll2_owner_t metadata_owner; lws_dll2_owner_t metadata_owner_rx; struct lws_dll2 client_list; struct lws_tx_credit txc; #if defined(LWS_WITH_SYS_METRICS) lws_metrics_caliper_compose(cal_txn) #endif struct lws *cwsi; struct lws_dsh *dsh; struct lws_context *context; struct lws_sspc_handle *h_in_svc; /* * Used to detect illegal lws_sspc_destroy() calls while still * being serviced */ lws_usec_t us_earliest_write_req; lws_usec_t us_start_upstream; unsigned long writeable_len; lws_ss_conn_states_t state; uint32_t timeout_ms; uint32_t ord; int16_t temp16; uint8_t rideshare_ofs[4]; uint8_t rsidx; uint8_t prev_ss_state; uint8_t conn_req_state:2; uint8_t destroying:1; uint8_t non_wsi:1; uint8_t ignore_txc:1; uint8_t pending_timeout_update:1; uint8_t pending_writeable_len:1; uint8_t creating_cb_done:1; uint8_t ss_dangling_connected:1; } lws_sspc_handle_t; typedef struct backoffs { struct backoffs *next; const char *name; lws_retry_bo_t r; } backoff_t; union u { backoff_t *b; lws_ss_x509_t *x; lws_ss_trust_store_t *t; lws_ss_policy_t *p; lws_ss_auth_t *a; lws_metric_policy_t *m; }; enum { LTY_BACKOFF, LTY_X509, LTY_TRUSTSTORE, LTY_POLICY, LTY_AUTH, LTY_METRICS, _LTY_COUNT /* always last */ }; struct policy_cb_args { struct lejp_ctx jctx; struct lws_context *context; struct lwsac *ac; const char *socks5_proxy; struct lws_b64state b64; lws_ss_http_respmap_t respmap[16]; union u heads[_LTY_COUNT]; union u curr[_LTY_COUNT]; uint8_t *p; int count; char pending_respmap; uint8_t parse_data:1; }; #if defined(LWS_WITH_SYS_SMD) extern const lws_ss_policy_t pol_smd; #endif /* * returns one of * * LWSSSSRET_OK * LWSSSSRET_DISCONNECT_ME * LWSSSSRET_DESTROY_ME */ int lws_ss_deserialize_parse(struct lws_ss_serialization_parser *par, struct lws_context *context, struct lws_dsh *dsh, const uint8_t *cp, size_t len, lws_ss_conn_states_t *state, void *parconn, lws_ss_handle_t **pss, lws_ss_info_t *ssi, char client); int lws_ss_serialize_rx_payload(struct lws_dsh *dsh, const uint8_t *buf, size_t len, int flags, const char *rsp); int lws_ss_deserialize_tx_payload(struct lws_dsh *dsh, struct lws *wsi, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len, int *flags); int lws_ss_serialize_state(struct lws *wsi, struct lws_dsh *dsh, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack); const lws_ss_policy_t * lws_ss_policy_lookup(const struct lws_context *context, const char *streamtype); /* can be used as a cb from lws_dll2_foreach_safe() to destroy ss */ int lws_ss_destroy_dll(struct lws_dll2 *d, void *user); int lws_sspc_destroy_dll(struct lws_dll2 *d, void *user); void lws_sspc_rxmetadata_destroy(lws_sspc_handle_t *h); int lws_ss_policy_set(struct lws_context *context, const char *name); int lws_ss_sys_fetch_policy(struct lws_context *context); lws_ss_state_return_t lws_ss_event_helper(lws_ss_handle_t *h, lws_ss_constate_t cs); lws_ss_state_return_t _lws_ss_backoff(lws_ss_handle_t *h, lws_usec_t us_override); lws_ss_state_return_t lws_ss_backoff(lws_ss_handle_t *h); int _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(lws_ss_state_return_t r, struct lws *wsi, lws_ss_handle_t **ph); int lws_ss_set_timeout_us(lws_ss_handle_t *h, lws_usec_t us); void ss_proxy_onward_txcr(void *userobj, int bump); int lws_ss_serialize_txcr(struct lws_dsh *dsh, int txcr); int lws_ss_sys_auth_api_amazon_com(struct lws_context *context); lws_ss_metadata_t * lws_ss_get_handle_metadata(struct lws_ss_handle *h, const char *name); lws_ss_metadata_t * lws_ss_policy_metadata_index(const lws_ss_policy_t *p, size_t index); #if defined(LWS_WITH_SS_DIRECT_PROTOCOL_STR) lws_ss_metadata_t * lws_ss_get_handle_instant_metadata(struct lws_ss_handle *h, const char *name); #endif lws_ss_metadata_t * lws_ss_policy_metadata(const lws_ss_policy_t *p, const char *name); int lws_ss_exp_cb_metadata(void *priv, const char *name, char *out, size_t *pos, size_t olen, size_t *exp_ofs); int _lws_ss_set_metadata(lws_ss_metadata_t *omd, const char *name, const void *value, size_t len); int _lws_ss_alloc_set_metadata(lws_ss_metadata_t *omd, const char *name, const void *value, size_t len); lws_ss_state_return_t _lws_ss_client_connect(lws_ss_handle_t *h, int is_retry, void *conn_if_sspc_onw); lws_ss_state_return_t _lws_ss_request_tx(lws_ss_handle_t *h); int __lws_ss_proxy_bind_ss_to_conn_wsi(void *parconn, size_t dsh_size); struct lws_vhost * lws_ss_policy_ref_trust_store(struct lws_context *context, const lws_ss_policy_t *pol, char doref); lws_ss_state_return_t lws_sspc_event_helper(lws_sspc_handle_t *h, lws_ss_constate_t cs, lws_ss_tx_ordinal_t flags); int lws_ss_check_next_state(lws_lifecycle_t *lc, uint8_t *prevstate, lws_ss_constate_t cs); int lws_ss_check_next_state_ss(lws_ss_handle_t *ss, uint8_t *prevstate, lws_ss_constate_t cs); int lws_ss_check_next_state_sspc(lws_sspc_handle_t *ss, uint8_t *prevstate, lws_ss_constate_t cs); void lws_proxy_clean_conn_ss(struct lws *wsi); int lws_ss_cancel_notify_dll(struct lws_dll2 *d, void *user); int lws_sspc_cancel_notify_dll(struct lws_dll2 *d, void *user); #if defined(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY) || defined(LWS_WITH_SECURE_STREAMS_CPP) int lws_ss_policy_unref_trust_store(struct lws_context *context, const lws_ss_policy_t *pol); #endif int lws_ss_sys_cpd(struct lws_context *cx); #if defined(LWS_WITH_SECURE_STREAMS_AUTH_SIGV4) int lws_ss_apply_sigv4(struct lws *wsi, struct lws_ss_handle *h, unsigned char **p, unsigned char *end); #endif #if defined(_DEBUG) void lws_ss_assert_extant(struct lws_context *cx, int tsi, struct lws_ss_handle *h); #else #define lws_ss_assert_extant(_a, _b, _c) #endif typedef int (* const secstream_protocol_connect_munge_t)(lws_ss_handle_t *h, char *buf, size_t len, struct lws_client_connect_info *i, union lws_ss_contemp *ct); typedef int (* const secstream_protocol_add_txcr_t)(lws_ss_handle_t *h, int add); typedef int (* const secstream_protocol_get_txcr_t)(lws_ss_handle_t *h); struct ss_pcols { const char *name; const char *alpn; const struct lws_protocols *protocol; secstream_protocol_connect_munge_t munge; secstream_protocol_add_txcr_t tx_cr_add; secstream_protocol_get_txcr_t tx_cr_est; }; /* * Because both sides of the connection share the conn, we allocate it * during accepted adoption, and both sides point to it. * * When .ss or .wsi close, they must NULL their entry here so no dangling * refereneces. * * The last one of the accepted side and the onward side to close frees it. */ lws_ss_state_return_t lws_conmon_ss_json(lws_ss_handle_t *h); void ss_proxy_onward_link_req_writeable(lws_ss_handle_t *h_onward); struct conn { struct lws_ss_serialization_parser parser; lws_dsh_t *dsh; /* unified buffer for both sides */ struct lws *wsi; /* the proxy's client side */ lws_ss_handle_t *ss; /* the onward, ss side */ lws_ss_conn_states_t state; char onward_in_flow_control; }; extern const struct ss_pcols ss_pcol_h1; extern const struct ss_pcols ss_pcol_h2; extern const struct ss_pcols ss_pcol_ws; extern const struct ss_pcols ss_pcol_mqtt; extern const struct ss_pcols ss_pcol_raw; extern const struct lws_protocols protocol_secstream_h1; extern const struct lws_protocols protocol_secstream_h2; extern const struct lws_protocols protocol_secstream_ws; extern const struct lws_protocols protocol_secstream_mqtt; extern const struct lws_protocols protocol_secstream_raw; libwebsockets-4.3.5/lib/secure-streams/protocols/000077500000000000000000000000001476025525100221265ustar00rootroot00000000000000libwebsockets-4.3.5/lib/secure-streams/protocols/README.md000066400000000000000000000025411476025525100234070ustar00rootroot00000000000000# Lws Protocol bindings for Secure Streams This directory contains the code wiring up normal lws protocols to Secure Streams. ## The lws_protocols callback This is the normal lws struct lws_protocols callback that handles events and traffic on the lws protocol being supported. The various events and traffic are converted into calls using the Secure Streams api, and Secure Streams events. ## The connect_munge helper Different protocols have different semantics in the arguments to the client connect function, this protocol-specific helper is called to munge the connect_info struct to match the details of the protocol selected. The `ss->policy->aux` string is used to hold protocol-specific information passed in the from the policy, eg, the URL path or websockets subprotocol name. ## The (library-private) ss_pcols export Each protocol binding exports two things to other parts of lws (they are not exported to user code) - a struct lws_protocols, including a pointer to the callback - a struct ss_pcols describing how secure_streams should use, including a pointer to the related connect_munge helper. In ./lib/core-net/vhost.c, enabled protocols are added to vhost protcols lists so they may be used. And in ./lib/secure-streams/secure-streams.c, enabled struct ss_pcols are listed and checked for matches when the user creates a new Secure Stream. libwebsockets-4.3.5/lib/secure-streams/protocols/ss-h1.c000066400000000000000000000760531476025525100232400ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * This is the glue that wires up h1 to Secure Streams. */ #include #if !defined(LWS_PLAT_FREERTOS) || defined(LWS_ROLE_H2) #define LWS_WITH_SS_RIDESHARE #endif #if defined(LWS_WITH_SS_RIDESHARE) static int ss_http_multipart_parser(lws_ss_handle_t *h, void *in, size_t len) { uint8_t *q = (uint8_t *)in; int pending_issue = 0, n = 0; /* let's stick it in the boundary state machine first */ while (n < (int)len) { if (h->u.http.boundary_seq != h->u.http.boundary_len) { if (q[n] == h->u.http.boundary[h->u.http.boundary_seq]) h->u.http.boundary_seq++; else { h->u.http.boundary_seq = 0; h->u.http.boundary_dashes = 0; h->u.http.boundary_post = 0; } goto around; } /* * We already matched the boundary string, now we're * looking if there's a -- afterwards */ if (h->u.http.boundary_dashes < 2) { if (q[n] == '-') { h->u.http.boundary_dashes++; goto around; } /* there was no final -- ... */ } if (h->u.http.boundary_dashes == 2) { /* * It's an EOM boundary: issue pending + multipart EOP */ lwsl_debug("%s: seen EOP, n %d pi %d\n", __func__, n, pending_issue); /* * It's possible we already started the decode before * the end of the last packet. Then there is no * remainder to send. */ if (n >= pending_issue + h->u.http.boundary_len + (h->u.http.any ? 2 : 0) + 1) { h->info.rx(ss_to_userobj(h), &q[pending_issue], (unsigned int)(n - pending_issue - h->u.http.boundary_len - 1 - (h->u.http.any ? 2 : 0) /* crlf */), (!h->u.http.som ? LWSSS_FLAG_SOM : 0) | LWSSS_FLAG_EOM | LWSSS_FLAG_RELATED_END); h->u.http.eom = 1; } /* * Peer may not END_STREAM us */ return 0; //return -1; } /* how about --boundaryCRLF */ if (h->u.http.boundary_post < 2) { if ((!h->u.http.boundary_post && q[n] == '\x0d') || (h->u.http.boundary_post && q[n] == '\x0a')) { h->u.http.boundary_post++; goto around; } /* there was no final CRLF ... it's wrong */ return -1; } if (h->u.http.boundary_post != 2) goto around; /* * We have a starting "--boundaryCRLF" or intermediate * "CRLF--boundaryCRLF" boundary */ lwsl_debug("%s: b_post = 2 (pi %d)\n", __func__, pending_issue); h->u.http.boundary_seq = 0; h->u.http.boundary_post = 0; if (n >= pending_issue && (h->u.http.any || !h->u.http.som)) { /* Intermediate... do the EOM */ lwsl_debug("%s: seen interm EOP n %d pi %d\n", __func__, n, pending_issue); /* * It's possible we already started the decode before * the end of the last packet. Then there is no * remainder to send. */ if (n >= pending_issue + h->u.http.boundary_len + (h->u.http.any ? 2 : 0)) { h->info.rx(ss_to_userobj(h), &q[pending_issue], (unsigned int)(n - pending_issue - h->u.http.boundary_len - (h->u.http.any ? 2 /* crlf */ : 0)), (!h->u.http.som ? LWSSS_FLAG_SOM : 0) | LWSSS_FLAG_EOM); h->u.http.eom = 1; } } /* Next message starts after this boundary */ pending_issue = n; if (h->u.http.eom) { /* reset only if we have sent eom */ h->u.http.som = 0; h->u.http.eom = 0; } around: n++; } if (pending_issue != n) { uint8_t oh = 0; /* * handle the first or last "--boundaryCRLF" case which is not captured in the * previous loop, on the Bob downchannel (/directive) * * probably does not cover the case that one boundary term is separated in multipile * one callbacks though never see such case */ if ((n >= h->u.http.boundary_len) && h->u.http.boundary_seq == h->u.http.boundary_len && h->u.http.boundary_post == 2) { oh = 1; } h->info.rx(ss_to_userobj(h), &q[pending_issue], (unsigned int)(oh ? (n - pending_issue - h->u.http.boundary_len - (h->u.http.any ? 2 : 0)) : (n - pending_issue)), (!h->u.http.som ? LWSSS_FLAG_SOM : 0) | (oh && h->u.http.any ? LWSSS_FLAG_EOM : 0)); if (oh && h->u.http.any) h->u.http.eom = 1; h->u.http.any = 1; h->u.http.som = 1; } return 0; } #endif /* * Returns 0, or the ss state resp maps on to */ static int lws_ss_http_resp_to_state(lws_ss_handle_t *h, int resp) { const lws_ss_http_respmap_t *r = h->policy->u.http.respmap; int n = h->policy->u.http.count_respmap; while (n--) if (resp == r->resp) return r->state; else r++; return 0; /* no hit */ } /* * This converts any set metadata items into outgoing http headers */ static int lws_apply_metadata(lws_ss_handle_t *h, struct lws *wsi, uint8_t *buf, uint8_t **pp, uint8_t *end) { lws_ss_metadata_t *polmd = h->policy->metadata; int m = 0; while (polmd) { /* has to have a non-empty header string */ if (polmd->value__may_own_heap && ((uint8_t *)polmd->value__may_own_heap)[0] && h->metadata[m].value__may_own_heap) { if (lws_add_http_header_by_name(wsi, polmd->value__may_own_heap, h->metadata[m].value__may_own_heap, (int)h->metadata[m].length, pp, end)) return -1; /* * Check for the case he's setting a non-zero * content-length "via the backdoor" metadata- * driven headers, and set the body_pending() * state if so... */ if (!strncmp(polmd->value__may_own_heap, "content-length", 14) && atoi(h->metadata[m].value__may_own_heap)) lws_client_http_body_pending(wsi, 1); } m++; polmd = polmd->next; } /* * Content-length on POST / PUT / PATCH if we have the length information */ if (h->policy->u.http.method && ( (!strcmp(h->policy->u.http.method, "POST") || !strcmp(h->policy->u.http.method, "PATCH") || !strcmp(h->policy->u.http.method, "PUT"))) && wsi->http.writeable_len) { if (!(h->policy->flags & LWSSSPOLF_HTTP_NO_CONTENT_LENGTH)) { int n = lws_snprintf((char *)buf, 20, "%u", (unsigned int)wsi->http.writeable_len); if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH, buf, n, pp, end)) return -1; } lws_client_http_body_pending(wsi, 1); } return 0; } #if defined(LWS_WITH_SS_DIRECT_PROTOCOL_STR) static int lws_apply_instant_metadata(lws_ss_handle_t *h, struct lws *wsi, uint8_t *buf, uint8_t **pp, uint8_t *end) { lws_ss_metadata_t *imd = h->instant_metadata; while (imd) { if (imd->name && imd->value__may_own_heap) { lwsl_debug("%s add header %s %s %d\n", __func__, imd->name, (char *)imd->value__may_own_heap, (int)imd->length); if (lws_add_http_header_by_name(wsi, (const unsigned char *)imd->name, (const unsigned char *)imd->value__may_own_heap, (int)imd->length, pp, end)) return -1; /* it's possible user set content-length directly */ if (!strncmp(imd->name, "content-length", 14) && atoi(imd->value__may_own_heap)) lws_client_http_body_pending(wsi, 1); } imd = imd->next; } return 0; } #endif /* * Check if any metadata headers present in the server headers, and record * them into the associated metadata item if so. */ static int lws_extract_metadata(lws_ss_handle_t *h, struct lws *wsi) { lws_ss_metadata_t *polmd = h->policy->metadata, *omd; int n; while (polmd) { if (polmd->value_is_http_token != LWS_HTTP_NO_KNOWN_HEADER) { /* it's a well-known header token */ n = lws_hdr_total_length(wsi, polmd->value_is_http_token); if (n) { const char *cp = lws_hdr_simple_ptr(wsi, polmd->value_is_http_token); omd = lws_ss_get_handle_metadata(h, polmd->name); if (!omd || !cp) return 1; assert(!strcmp(omd->name, polmd->name)); /* * it's present on the wsi, we want to * set the related metadata name to it then */ _lws_ss_alloc_set_metadata(omd, polmd->name, cp, (unsigned int)n); #if defined(LWS_WITH_SECURE_STREAMS_PROXY_API) /* * ...and because we are doing it from parsing * onward rx, we want to mark the metadata as * needing passing to the client */ omd->pending_onward = 1; #endif } } #if defined(LWS_WITH_CUSTOM_HEADERS) else /* has to have a non-empty header string */ if (polmd->value__may_own_heap && ((uint8_t *)polmd->value__may_own_heap)[0]) { char *p; /* * Can it be a custom header? */ n = lws_hdr_custom_length(wsi, (const char *) polmd->value__may_own_heap, polmd->value_length); if (n > 0) { p = lws_malloc((unsigned int)n + 1, __func__); if (!p) return 1; /* if needed, free any previous value */ if (polmd->value_on_lws_heap) { lws_free( polmd->value__may_own_heap); polmd->value_on_lws_heap = 0; } /* * copy the named custom header value * into the malloc'd buffer */ if (lws_hdr_custom_copy(wsi, p, n + 1, (const char *) polmd->value__may_own_heap, polmd->value_length) < 0) { lws_free(p); return 1; } omd = lws_ss_get_handle_metadata(h, polmd->name); if (omd) { _lws_ss_set_metadata(omd, polmd->name, p, (size_t)n); omd->value_on_lws_heap = 1; #if defined(LWS_WITH_SECURE_STREAMS_PROXY_API) omd->pending_onward = 1; #endif } } } #endif polmd = polmd->next; } return 0; } static const uint8_t blob_idx[] = { LWS_SYSBLOB_TYPE_AUTH, LWS_SYSBLOB_TYPE_DEVICE_SERIAL, LWS_SYSBLOB_TYPE_DEVICE_FW_VERSION, LWS_SYSBLOB_TYPE_DEVICE_TYPE, }; int secstream_h1(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { #if defined(LWS_WITH_SERVER) struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; #endif lws_ss_handle_t *h = (lws_ss_handle_t *)lws_get_opaque_user_data(wsi); uint8_t buf[LWS_PRE + 1520], *p = &buf[LWS_PRE], #if defined(LWS_WITH_SERVER) *start = p, #endif *end = &buf[sizeof(buf) - 1]; lws_ss_state_return_t r; int f = 0, m, status; char conceal_eom = 0; lws_usec_t inter; size_t buflen; switch (reason) { case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: if (!h) { lwsl_err("%s: CCE with no ss handle %s\n", __func__, lws_wsi_tag(wsi)); break; } lws_ss_assert_extant(wsi->a.context, wsi->tsi, h); assert(h->policy); #if defined(LWS_WITH_CONMON) lws_conmon_ss_json(h); #endif lws_metrics_caliper_report_hist(h->cal_txn, wsi); lwsl_info("%s: %s CLIENT_CONNECTION_ERROR: %s\n", __func__, h->lc.gutag, in ? (const char *)in : "none"); if (h->ss_dangling_connected) { /* already disconnected, no action for DISCONNECT_ME */ r = lws_ss_event_helper(h, LWSSSCS_DISCONNECTED); if (r != LWSSSSRET_OK) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); } else { /* already disconnected, no action for DISCONNECT_ME */ r = lws_ss_event_helper(h, LWSSSCS_UNREACHABLE); if (r) { if (h->inside_connect) { h->pending_ret = r; break; } return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); } } h->wsi = NULL; r = lws_ss_backoff(h); if (r != LWSSSSRET_OK) { if (h->inside_connect) { h->pending_ret = r; break; } return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); } break; case LWS_CALLBACK_CLIENT_HTTP_REDIRECT: if (!h) return -1; if (h->policy->u.http.fail_redirect) lws_system_cpd_set(lws_get_context(wsi), LWS_CPD_CAPTIVE_PORTAL); /* unless it's explicitly allowed, reject to follow it */ return !(h->policy->flags & LWSSSPOLF_ALLOW_REDIRECTS); case LWS_CALLBACK_CLOSED_HTTP: /* server */ case LWS_CALLBACK_CLOSED_CLIENT_HTTP: if (!h) break; lws_sul_cancel(&h->sul_timeout); lws_ss_assert_extant(wsi->a.context, wsi->tsi, h); #if defined(LWS_WITH_CONMON) if (wsi->conmon.pcol == LWSCONMON_PCOL_NONE) { wsi->conmon.pcol = LWSCONMON_PCOL_HTTP; wsi->conmon.protocol_specific.http.response = (int)lws_http_client_http_response(wsi); } lws_conmon_ss_json(h); #endif lws_metrics_caliper_report_hist(h->cal_txn, wsi); //lwsl_notice("%s: %s LWS_CALLBACK_CLOSED_CLIENT_HTTP\n", // __func__, wsi->lc.gutag); h->wsi = NULL; h->hanging_som = 0; h->subseq = 0; #if defined(LWS_WITH_SERVER) lws_pt_lock(pt, __func__); lws_dll2_remove(&h->cli_list); lws_pt_unlock(pt); #endif if (h->policy && !(h->policy->flags & LWSSSPOLF_OPPORTUNISTIC) && #if defined(LWS_WITH_SERVER) !(h->info.flags & LWSSSINFLAGS_ACCEPTED) && /* not server */ #endif !h->txn_ok && !wsi->a.context->being_destroyed) { r = lws_ss_backoff(h); if (r != LWSSSSRET_OK) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); break; } else h->seqstate = SSSEQ_IDLE; if (h->ss_dangling_connected) { /* already disconnected, no action for DISCONNECT_ME */ r = lws_ss_event_helper(h, LWSSSCS_DISCONNECTED); if (r != LWSSSSRET_OK) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); } break; case LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: if (!h) return -1; lws_ss_assert_extant(wsi->a.context, wsi->tsi, h); h->wsi = wsi; /* since we accept the wsi is bound to the SS, * ensure the SS feels the same way about the wsi */ #if defined(LWS_WITH_CONMON) if (wsi->conmon.pcol == LWSCONMON_PCOL_NONE) { wsi->conmon.pcol = LWSCONMON_PCOL_HTTP; wsi->conmon.protocol_specific.http.response = (int)lws_http_client_http_response(wsi); } lws_conmon_ss_json(h); #endif status = (int)lws_http_client_http_response(wsi); lwsl_info("%s: LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: %d\n", __func__, status); // if (!status) /* it's just telling use we connected / joined the nwsi */ // break; #if defined(LWS_WITH_SYS_METRICS) if (status) { lws_snprintf((char *)buf, 10, "%d", status); lws_metrics_tag_ss_add(h, "http_resp", (char *)buf); } #endif if (status == HTTP_STATUS_SERVICE_UNAVAILABLE /* 503 */ || status == 429 /* Too many requests */) { /* * We understand this attempt failed, and that we should * conceal this attempt. If there's a specified * retry-after, we should use that if larger than our * computed backoff */ inter = 0; lws_http_check_retry_after(wsi, &inter); r = _lws_ss_backoff(h, inter); if (r != LWSSSSRET_OK) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); return -1; /* end this stream */ } if (h->policy->u.http.resp_expect) h->u.http.good_respcode = status == h->policy->u.http.resp_expect; else h->u.http.good_respcode = (status >= 200 && status < 300); // lwsl_err("%s: good resp %d %d\n", __func__, status, h->u.http.good_respcode); if (lws_extract_metadata(h, wsi)) { lwsl_info("%s: rx metadata extract failed\n", __func__); return -1; } if (status) { /* * Check and see if it's something from the response * map, if so, generate the requested status. If we're * the proxy onward connection, metadata has priority * over state updates on the serialization, so the * state callback will see the right metadata. */ int n = lws_ss_http_resp_to_state(h, status); if (n) { r = lws_ss_event_helper(h, (lws_ss_constate_t)n); if (r != LWSSSSRET_OK) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); } } if (h->u.http.good_respcode) lwsl_info("%s: Connected streamtype %s, %d\n", __func__, h->policy->streamtype, status); else if (h->u.http.good_respcode) lwsl_warn("%s: Connected streamtype %s, BAD %d\n", __func__, h->policy->streamtype, status); h->hanging_som = 0; h->retry = 0; h->seqstate = SSSEQ_CONNECTED; lws_sul_cancel(&h->sul); if (h->prev_ss_state != LWSSSCS_CONNECTED) { wsi->client_suppress_CONNECTION_ERROR = 1; if (h->prev_ss_state != LWSSSCS_CONNECTED) { r = lws_ss_event_helper(h, LWSSSCS_CONNECTED); if (r != LWSSSSRET_OK) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); } } /* * Since it's an http transaction we initiated... this is * proof of connection validity */ lws_validity_confirmed(wsi); #if defined(LWS_WITH_SS_RIDESHARE) /* * There are two ways we might want to deal with multipart, * one is pass it through raw (although the user code needs * a helping hand for learning the boundary), and the other * is to deframe it and provide basically submessages in the * different parts. */ if (lws_hdr_copy(wsi, (char *)buf, sizeof(buf), WSI_TOKEN_HTTP_CONTENT_TYPE) > 0 && /* multipart/form-data; * boundary=----WebKitFormBoundarycc7YgAPEIHvgE9Bf */ (!strncmp((char *)buf, "multipart/form-data", 19) || !strncmp((char *)buf, "multipart/related", 17))) { struct lws_tokenize ts; lws_tokenize_elem e; // puts((const char *)buf); memset(&ts, 0, sizeof(ts)); ts.start = (char *)buf; ts.len = strlen(ts.start); ts.flags = LWS_TOKENIZE_F_RFC7230_DELIMS | LWS_TOKENIZE_F_SLASH_NONTERM | LWS_TOKENIZE_F_MINUS_NONTERM; h->u.http.boundary[0] = '\0'; do { e = lws_tokenize(&ts); if (e == LWS_TOKZE_TOKEN_NAME_EQUALS && !strncmp(ts.token, "boundary", 8) && ts.token_len == 8) { e = lws_tokenize(&ts); if (e != LWS_TOKZE_TOKEN) goto malformed; h->u.http.boundary[0] = '\x0d'; h->u.http.boundary[1] = '\x0a'; h->u.http.boundary[2] = '-'; h->u.http.boundary[3] = '-'; lws_strnncpy(h->u.http.boundary + 4, ts.token, ts.token_len, sizeof(h->u.http.boundary) - 4); h->u.http.boundary_len = (uint8_t)(ts.token_len + 4); h->u.http.boundary_seq = 2; h->u.http.boundary_dashes = 0; } } while (e > 0); lwsl_info("%s: multipart boundary '%s' len %d\n", __func__, h->u.http.boundary, h->u.http.boundary_len); /* inform the ss that a related message group begins */ if ((h->policy->flags & LWSSSPOLF_HTTP_MULTIPART_IN) && h->u.http.boundary[0]) h->info.rx(ss_to_userobj(h), NULL, 0, LWSSS_FLAG_RELATED_START); // lws_header_table_detach(wsi, 0); } break; malformed: lwsl_notice("%s: malformed multipart header\n", __func__); return -1; #else break; #endif case LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER: if (!h) return -1; if (h->writeable_len) wsi->http.writeable_len = h->writeable_len; { uint8_t **p = (uint8_t **)in, *end = (*p) + len, *oin = *(uint8_t **)in; /* * blob-based headers */ for (m = 0; m < _LWSSS_HBI_COUNT; m++) { lws_system_blob_t *ab; int o = 0, n; if (!h->policy->u.http.blob_header[m]) continue; /* * To be backward compatible, default is system-wide LWA auth, * and "http_auth_header" is for default LWA auth, current users do not * need any change in their policy. * If user wants different auth/token, need to specify the "use_auth" * and will be handled after metadata headers are applied. */ if (m == LWSSS_HBI_AUTH && h->policy->u.http.auth_preamble) o = lws_snprintf((char *)buf, sizeof(buf), "%s", h->policy->u.http.auth_preamble); if (o > (int)sizeof(buf) - 2) return -1; ab = lws_system_get_blob(wsi->a.context, blob_idx[m], 0); if (!ab) return -1; buflen = sizeof(buf) - (unsigned int)o - 2u; n = lws_system_blob_get(ab, buf + o, &buflen, 0); if (n < 0) return -1; buf[(unsigned int)o + buflen] = '\0'; lwsl_debug("%s: adding blob %d: %s\n", __func__, m, buf); if (lws_add_http_header_by_name(wsi, (uint8_t *)h->policy->u.http.blob_header[m], buf, (int)((int)buflen + o), p, end)) return -1; } /* * metadata-based headers */ if (lws_apply_metadata(h, wsi, buf, p, end)) return -1; #if defined(LWS_WITH_SS_DIRECT_PROTOCOL_STR) if (h->policy->flags & LWSSSPOLF_DIRECT_PROTO_STR) { if (lws_apply_instant_metadata(h, wsi, buf, p, end)) return -1; } #endif #if defined(LWS_WITH_SECURE_STREAMS_AUTH_SIGV4) if (h->policy->auth && h->policy->auth->type && !strcmp(h->policy->auth->type, "sigv4")) { if (lws_ss_apply_sigv4(wsi, h, p, end)) return -1; } #endif (void)oin; //if (*p != oin) // lwsl_hexdump_notice(oin, lws_ptr_diff_size_t(*p, oin)); } /* * So when proxied, for POST we have to synthesize a CONNECTED * state, so it can request a writeable and deliver the POST * body */ if ((h->policy->protocol == LWSSSP_H1 || h->policy->protocol == LWSSSP_H2) && h->being_serialized && ( !strcmp(h->policy->u.http.method, "PUT") || !strcmp(h->policy->u.http.method, "PATCH") || !strcmp(h->policy->u.http.method, "POST"))) { wsi->client_suppress_CONNECTION_ERROR = 1; if (h->prev_ss_state != LWSSSCS_CONNECTED) { r = lws_ss_event_helper(h, LWSSSCS_CONNECTED); if (r) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); } } break; /* chunks of chunked content, with header removed */ case LWS_CALLBACK_HTTP_BODY: case LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ: lwsl_debug("%s: RECEIVE_CLIENT_HTTP_READ: read %d\n", __func__, (int)len); if (!h || !h->info.rx) return 0; #if defined(LWS_WITH_SS_RIDESHARE) if ((h->policy->flags & LWSSSPOLF_HTTP_MULTIPART_IN) && h->u.http.boundary[0]) return ss_http_multipart_parser(h, in, len); #endif if (!h->subseq) { f |= LWSSS_FLAG_SOM; h->hanging_som = 1; h->subseq = 1; } // lwsl_notice("%s: HTTP_READ: client side sent len %d fl 0x%x\n", // __func__, (int)len, (int)f); h->wsi = wsi; /* since we accept the wsi is bound to the SS, * ensure the SS feels the same way about the wsi */ r = h->info.rx(ss_to_userobj(h), (const uint8_t *)in, len, f); if (r != LWSSSSRET_OK) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); return 0; /* don't passthru */ /* uninterpreted http content */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP: { char *px = (char *)buf + LWS_PRE; /* guarantees LWS_PRE */ int lenx = sizeof(buf) - LWS_PRE; m = lws_http_client_read(wsi, &px, &lenx); if (m < 0) return m; } lws_set_timeout(wsi, 99, 30); return 0; /* don't passthru */ case LWS_CALLBACK_COMPLETED_CLIENT_HTTP: // lwsl_debug("%s: LWS_CALLBACK_COMPLETED_CLIENT_HTTP\n", __func__); if (!h) return -1; if (h->hanging_som) { h->info.rx(ss_to_userobj(h), NULL, 0, LWSSS_FLAG_EOM); h->hanging_som = 0; h->subseq = 0; } wsi->http.writeable_len = h->writeable_len = 0; lws_sul_cancel(&h->sul_timeout); h->txn_ok = 1; #if defined(LWS_WITH_SYS_METRICS) lws_metrics_tag_ss_add(h, "result", h->u.http.good_respcode ? "SS_ACK_REMOTE" : "SS_NACK_REMOTE"); #endif r = lws_ss_event_helper(h, h->u.http.good_respcode ? LWSSSCS_QOS_ACK_REMOTE : LWSSSCS_QOS_NACK_REMOTE); if (r != LWSSSSRET_OK) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); lws_cancel_service(lws_get_context(wsi)); /* abort poll wait */ break; case LWS_CALLBACK_HTTP_WRITEABLE: case LWS_CALLBACK_CLIENT_HTTP_WRITEABLE: if (!h || !h->info.tx) { lwsl_notice("%s: no handle / tx\n", __func__); return 0; } #if defined(LWS_WITH_SERVER) if (h->txn_resp_pending) { /* * If we're going to start sending something, we need to * to take care of the http response header for it first */ h->txn_resp_pending = 0; if (lws_add_http_common_headers(wsi, (unsigned int)(h->txn_resp_set ? (h->txn_resp ? h->txn_resp : 200) : HTTP_STATUS_NOT_FOUND), NULL, h->wsi->http.writeable_len, &p, end)) return 1; /* * metadata-based headers */ if (lws_apply_metadata(h, wsi, buf, &p, end)) return -1; if (lws_finalize_write_http_header(wsi, start, &p, end)) return 1; /* write the body separately */ lws_callback_on_writable(wsi); return 0; } #endif if ( #if defined(LWS_WITH_SERVER) !(h->info.flags & LWSSSINFLAGS_ACCEPTED) && /* not accepted */ #endif !h->rideshare) h->rideshare = h->policy; #if defined(LWS_WITH_SS_RIDESHARE) if ( #if defined(LWS_WITH_SERVER) !(h->info.flags & LWSSSINFLAGS_ACCEPTED) && /* not accepted */ #endif !h->inside_msg && h->rideshare->u.http.multipart_name) lws_client_http_multipart(wsi, h->rideshare->u.http.multipart_name, h->rideshare->u.http.multipart_filename, h->rideshare->u.http.multipart_content_type, (char **)&p, (char *)end); buflen = lws_ptr_diff_size_t(end, p); if (h->policy->u.http.multipart_name) buflen -= 24; /* allow space for end of multipart */ #else buflen = lws_ptr_diff_size_t(end, p); #endif r = h->info.tx(ss_to_userobj(h), h->txord++, p, &buflen, &f); if (r == LWSSSSRET_TX_DONT_SEND) return 0; if (r < 0) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); // lwsl_notice("%s: WRITEABLE: user tx says len %d fl 0x%x\n", // __func__, (int)buflen, (int)f); p += buflen; if (f & LWSSS_FLAG_EOM) { #if defined(LWS_WITH_SERVER) if (!(h->info.flags & LWSSSINFLAGS_ACCEPTED)) { #endif conceal_eom = 1; /* end of rideshares */ if (!h->rideshare->rideshare_streamtype) { lws_client_http_body_pending(wsi, 0); #if defined(LWS_WITH_SS_RIDESHARE) if (h->rideshare->u.http.multipart_name) lws_client_http_multipart(wsi, NULL, NULL, NULL, (char **)&p, (char *)end); conceal_eom = 0; #endif } else { h->rideshare = lws_ss_policy_lookup(wsi->a.context, h->rideshare->rideshare_streamtype); lws_callback_on_writable(wsi); } #if defined(LWS_WITH_SERVER) } #endif h->inside_msg = 0; } else { /* otherwise we can spin with zero length writes */ if (!f && !lws_ptr_diff(p, buf + LWS_PRE)) break; h->inside_msg = 1; lws_callback_on_writable(wsi); } lwsl_info("%s: lws_write %d %d\n", __func__, lws_ptr_diff(p, buf + LWS_PRE), f); if (lws_write(wsi, buf + LWS_PRE, lws_ptr_diff_size_t(p, buf + LWS_PRE), (!conceal_eom && (f & LWSSS_FLAG_EOM)) ? LWS_WRITE_HTTP_FINAL : LWS_WRITE_HTTP) != (int)lws_ptr_diff(p, buf + LWS_PRE)) { lwsl_err("%s: write failed\n", __func__); return -1; } #if defined(LWS_WITH_SERVER) if ((h->info.flags & LWSSSINFLAGS_ACCEPTED) /* server */ && (f & LWSSS_FLAG_EOM) && lws_http_transaction_completed(wsi)) return -1; #else lws_set_timeout(wsi, 0, 0); #endif break; #if defined(LWS_WITH_SERVER) case LWS_CALLBACK_HTTP: if (!h) return -1; lwsl_info("%s: LWS_CALLBACK_HTTP\n", __func__); { h->txn_resp_set = 0; h->txn_resp_pending = 1; h->writeable_len = 0; #if defined(LWS_ROLE_H2) m = lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_COLON_METHOD); if (m) { if (lws_ss_alloc_set_metadata(h, "method", lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_METHOD), (unsigned int)m)) return -1; m = lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_COLON_PATH); if (m && lws_ss_alloc_set_metadata(h, "path", lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_COLON_PATH), (unsigned int)m)) return -1; } else #endif { m = lws_hdr_total_length(wsi, WSI_TOKEN_GET_URI); if (m) { if (lws_ss_alloc_set_metadata(h, "path", lws_hdr_simple_ptr(wsi, WSI_TOKEN_GET_URI), (unsigned int)m)) return -1; if (lws_ss_alloc_set_metadata(h, "method", "GET", 3)) return -1; } else { m = lws_hdr_total_length(wsi, WSI_TOKEN_POST_URI); if (m) { if (lws_ss_alloc_set_metadata(h, "path", lws_hdr_simple_ptr(wsi, WSI_TOKEN_POST_URI), (unsigned int)m)) return -1; if (lws_ss_alloc_set_metadata(h, "method", "POST", 4)) return -1; } else { m = lws_hdr_total_length(wsi, WSI_TOKEN_PATCH_URI); if (m) { if (lws_ss_alloc_set_metadata(h, "path", lws_hdr_simple_ptr(wsi, WSI_TOKEN_PATCH_URI), (unsigned int)m)) return -1; if (lws_ss_alloc_set_metadata(h, "method", "PATCH", 5)) return -1; } } } } } if (!h->ss_dangling_connected) { #if defined(LWS_WITH_SYS_METRICS) /* * If any hanging caliper measurement, dump it, and free any tags */ lws_metrics_caliper_report_hist(h->cal_txn, (struct lws *)NULL); #endif wsi->client_suppress_CONNECTION_ERROR = 1; if (h->prev_ss_state != LWSSSCS_CONNECTED) { r = lws_ss_event_helper(h, LWSSSCS_CONNECTED); if (r) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); } } r = lws_ss_event_helper(h, LWSSSCS_SERVER_TXN); if (r) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); return 0; #endif default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } const struct lws_protocols protocol_secstream_h1 = { "lws-secstream-h1", secstream_h1, 0, 0, 0, NULL, 0 }; /* * Munge connect info according to protocol-specific considerations... this * usually means interpreting aux in a protocol-specific way and using the * pieces at connection setup time, eg, http url pieces. * * len bytes of buf can be used for things with scope until after the actual * connect. */ static int secstream_connect_munge_h1(lws_ss_handle_t *h, char *buf, size_t len, struct lws_client_connect_info *i, union lws_ss_contemp *ct) { const char *pbasis = h->policy->u.http.url; size_t used_in, used_out; lws_strexp_t exp; /* i.path on entry is used to override the policy urlpath if not "" */ if (i->path[0]) pbasis = i->path; if (!pbasis) return 0; /* uncomment to force h1 */ // i->alpn = "http/1.1"; #if defined(LWS_WITH_SS_RIDESHARE) if (h->policy->flags & LWSSSPOLF_HTTP_MULTIPART) i->ssl_connection |= LCCSCF_HTTP_MULTIPART_MIME; if (h->policy->flags & LWSSSPOLF_HTTP_X_WWW_FORM_URLENCODED) i->ssl_connection |= LCCSCF_HTTP_X_WWW_FORM_URLENCODED; #endif if (h->policy->flags & LWSSSPOLF_HTTP_CACHE_COOKIES) i->ssl_connection |= LCCSCF_CACHE_COOKIES; /* protocol aux is the path part */ i->path = buf; /* skip the unnessary '/' */ if (*pbasis == '/') pbasis = pbasis + 1; buf[0] = '/'; lws_strexp_init(&exp, (void *)h, lws_ss_exp_cb_metadata, buf + 1, len - 1); if (lws_strexp_expand(&exp, pbasis, strlen(pbasis), &used_in, &used_out) != LSTRX_DONE) return 1; return 0; } const struct ss_pcols ss_pcol_h1 = { "h1", "http/1.1", &protocol_secstream_h1, secstream_connect_munge_h1, NULL, NULL }; libwebsockets-4.3.5/lib/secure-streams/protocols/ss-h2.c000066400000000000000000000140531476025525100232310ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include extern int secstream_h1(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len); static int secstream_h2(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { lws_ss_handle_t *h = (lws_ss_handle_t *)lws_get_opaque_user_data(wsi); lws_ss_state_return_t r; int n; switch (reason) { case LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: if (!h) return -1; #if defined(LWS_WITH_SECURE_STREAMS_PROXY_API) if (h->being_serialized) { /* * We are the proxy-side SS for a remote client... we * need to inform the client about the initial tx credit * to write to it that the remote h2 server set up */ lwsl_info("%s: reporting initial tx cr from server %d\n", __func__, wsi->txc.tx_cr); ss_proxy_onward_txcr((void *)(h + 1), wsi->txc.tx_cr); } #endif n = secstream_h1(wsi, reason, user, in, len); if (!n && (h->policy->flags & LWSSSPOLF_LONG_POLL)) { lwsl_notice("%s: h2 client %s entering LONG_POLL\n", __func__, lws_wsi_tag(wsi)); lws_h2_client_stream_long_poll_rxonly(wsi); } return n; case LWS_CALLBACK_CLOSED_CLIENT_HTTP: /* * Only allow the wsi that the handle believes is representing * him to report closure up to h1 */ if (!h || h->wsi != wsi) return 0; break; case LWS_CALLBACK_COMPLETED_CLIENT_HTTP: if (!h) return -1; // lwsl_err("%s: h2 COMPLETED_CLIENT_HTTP\n", __func__); r = 0; if (h->hanging_som) r = h->info.rx(ss_to_userobj(h), NULL, 0, LWSSS_FLAG_EOM); h->txn_ok = 1; lws_cancel_service(lws_get_context(wsi)); /* abort poll wait */ if (h->hanging_som && r == LWSSSSRET_DESTROY_ME) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); h->hanging_som = 0; break; case LWS_CALLBACK_WSI_TX_CREDIT_GET: if (!h) return -1; /* * The peer has sent us additional tx credit... */ lwsl_info("%s: LWS_CALLBACK_WSI_TX_CREDIT_GET: %d\n", __func__, (int)len); #if defined(LWS_WITH_SECURE_STREAMS_PROXY_API) if (h->being_serialized) /* we are the proxy-side SS for a remote client */ ss_proxy_onward_txcr((void *)(h + 1), (int)len); #endif break; default: break; } return secstream_h1(wsi, reason, user, in, len); } const struct lws_protocols protocol_secstream_h2 = { "lws-secstream-h2", secstream_h2, 0, 0, 0, NULL, 0 }; /* * Munge connect info according to protocol-specific considerations... this * usually means interpreting aux in a protocol-specific way and using the * pieces at connection setup time, eg, http url pieces. * * len bytes of buf can be used for things with scope until after the actual * connect. */ int secstream_connect_munge_h2(lws_ss_handle_t *h, char *buf, size_t len, struct lws_client_connect_info *i, union lws_ss_contemp *ct) { const char *pbasis = h->policy->u.http.url; size_t used_in, used_out; lws_strexp_t exp; /* i.path on entry is used to override the policy urlpath if not "" */ if (i->path[0]) pbasis = i->path; if (h->policy->flags & LWSSSPOLF_QUIRK_NGHTTP2_END_STREAM) i->ssl_connection |= LCCSCF_H2_QUIRK_NGHTTP2_END_STREAM; if (h->policy->flags & LWSSSPOLF_H2_QUIRK_OVERFLOWS_TXCR) i->ssl_connection |= LCCSCF_H2_QUIRK_OVERFLOWS_TXCR; if (h->policy->flags & LWSSSPOLF_HTTP_MULTIPART) i->ssl_connection |= LCCSCF_HTTP_MULTIPART_MIME; if (h->policy->flags & LWSSSPOLF_HTTP_X_WWW_FORM_URLENCODED) i->ssl_connection |= LCCSCF_HTTP_X_WWW_FORM_URLENCODED; if (h->policy->flags & LWSSSPOLF_HTTP_CACHE_COOKIES) i->ssl_connection |= LCCSCF_CACHE_COOKIES; i->ssl_connection |= LCCSCF_PIPELINE; i->alpn = "h2"; /* initial peer tx credit */ if (h->info.manual_initial_tx_credit) { i->ssl_connection |= LCCSCF_H2_MANUAL_RXFLOW; i->manual_initial_tx_credit = h->info.manual_initial_tx_credit; lwsl_info("%s: initial txcr %d\n", __func__, i->manual_initial_tx_credit); } if (!pbasis) return 0; /* protocol aux is the path part */ i->path = buf; buf[0] = '/'; lws_strexp_init(&exp, (void *)h, lws_ss_exp_cb_metadata, buf + 1, len - 1); if (lws_strexp_expand(&exp, pbasis, strlen(pbasis), &used_in, &used_out) != LSTRX_DONE) return 1; return 0; } static int secstream_tx_credit_add_h2(lws_ss_handle_t *h, int add) { lwsl_info("%s: %s: add %d\n", __func__, lws_ss_tag(h), add); if (h->wsi) return lws_h2_update_peer_txcredit(h->wsi, (unsigned int)LWS_H2_STREAM_SID, add); return 0; } static int secstream_tx_credit_est_h2(lws_ss_handle_t *h) { if (h->wsi) { lwsl_info("%s: %s: est %d\n", __func__, lws_ss_tag(h), lws_h2_get_peer_txcredit_estimate(h->wsi)); return lws_h2_get_peer_txcredit_estimate(h->wsi); } lwsl_info("%s: %s: Unknown (0)\n", __func__, lws_ss_tag(h)); return 0; } const struct ss_pcols ss_pcol_h2 = { "h2", "h2", &protocol_secstream_h2, secstream_connect_munge_h2, secstream_tx_credit_add_h2, secstream_tx_credit_est_h2 }; libwebsockets-4.3.5/lib/secure-streams/protocols/ss-mqtt.c000066400000000000000000000750341476025525100237130ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2019 - 2022 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include static void secstream_mqtt_cleanup(lws_ss_handle_t *h) { uint32_t i; if (h->u.mqtt.heap_baggage) { lws_free(h->u.mqtt.heap_baggage); h->u.mqtt.heap_baggage = NULL; } if (h->u.mqtt.sub_info.topic) { for (i = 0; i < h->u.mqtt.sub_info.num_topics; i++) { if (h->u.mqtt.sub_info.topic[i].name) { lws_free((void*)h->u.mqtt.sub_info.topic[i].name); h->u.mqtt.sub_info.topic[i].name = NULL; } } lws_free(h->u.mqtt.sub_info.topic); h->u.mqtt.sub_info.topic = NULL; } lws_buflist_destroy_all_segments(&h->u.mqtt.buflist_unacked); } static int secstream_mqtt_subscribe(struct lws *wsi) { size_t used_in, used_out, topic_limit; lws_strexp_t exp; char* expbuf; lws_ss_handle_t *h = (lws_ss_handle_t *)lws_get_opaque_user_data(wsi); if (!h || !h->policy) return -1; if (h->policy->u.mqtt.aws_iot) topic_limit = LWS_MQTT_MAX_AWSIOT_TOPICLEN; else topic_limit = LWS_MQTT_MAX_TOPICLEN; if (!h->policy->u.mqtt.subscribe || wsi->mqtt->done_subscribe) return 0; lws_strexp_init(&exp, (void*)h, lws_ss_exp_cb_metadata, NULL, topic_limit); /* * Expand with no output first to calculate the size of * expanded string then, allocate new buffer and expand * again with the buffer */ if (lws_strexp_expand(&exp, h->policy->u.mqtt.subscribe, strlen(h->policy->u.mqtt.subscribe), &used_in, &used_out) != LSTRX_DONE) { lwsl_err( "%s, failed to expand MQTT subscribe" " topic with no output\n", __func__); return 1; } expbuf = lws_malloc(used_out + 1, __func__); if (!expbuf) { lwsl_err( "%s, failed to allocate MQTT subscribe" "topic", __func__); return 1; } lws_strexp_init(&exp, (void*)h, lws_ss_exp_cb_metadata, expbuf, used_out + 1); if (lws_strexp_expand(&exp, h->policy->u.mqtt.subscribe, strlen(h->policy->u.mqtt.subscribe), &used_in, &used_out) != LSTRX_DONE) { lwsl_err("%s, failed to expand MQTT subscribe topic\n", __func__); lws_free(expbuf); return 1; } lwsl_notice("%s, expbuf - %s\n", __func__, expbuf); h->u.mqtt.sub_top.name = expbuf; /* * The policy says to subscribe to something, and we * haven't done it yet. Do it using the pre-prepared * string-substituted version of the policy string. */ lwsl_notice("%s: subscribing %s\n", __func__, h->u.mqtt.sub_top.name); h->u.mqtt.sub_top.qos = h->policy->u.mqtt.qos; memset(&h->u.mqtt.sub_info, 0, sizeof(h->u.mqtt.sub_info)); h->u.mqtt.sub_info.num_topics = 1; h->u.mqtt.sub_info.topic = &h->u.mqtt.sub_top; h->u.mqtt.sub_info.topic = lws_malloc(sizeof(lws_mqtt_topic_elem_t), __func__); h->u.mqtt.sub_info.topic[0].name = lws_strdup(expbuf); h->u.mqtt.sub_info.topic[0].qos = h->policy->u.mqtt.qos; if (lws_mqtt_client_send_subcribe(wsi, &h->u.mqtt.sub_info)) { lwsl_notice("%s: unable to subscribe", __func__); lws_free(expbuf); h->u.mqtt.sub_top.name = NULL; return -1; } lws_free(expbuf); h->u.mqtt.sub_top.name = NULL; /* Expect a SUBACK */ if (lws_change_pollfd(wsi, 0, LWS_POLLIN)) { lwsl_err("%s: Unable to set LWS_POLLIN\n", __func__); return -1; } return 0; } static int secstream_mqtt_publish(struct lws *wsi, uint8_t *buf, size_t buf_len, uint32_t payload_len, const char* topic, lws_mqtt_qos_levels_t qos, uint8_t retain, uint8_t dup, int f) { lws_ss_handle_t *h = (lws_ss_handle_t *)lws_get_opaque_user_data(wsi); size_t used_in, used_out, topic_limit; lws_strexp_t exp; char *expbuf; lws_mqtt_publish_param_t mqpp; if (h->policy->u.mqtt.aws_iot) topic_limit = LWS_MQTT_MAX_AWSIOT_TOPICLEN; else topic_limit = LWS_MQTT_MAX_TOPICLEN; memset(&mqpp, 0, sizeof(mqpp)); lws_strexp_init(&exp, h, lws_ss_exp_cb_metadata, NULL, topic_limit); if (lws_strexp_expand(&exp, topic, strlen(topic), &used_in, &used_out) != LSTRX_DONE) { lwsl_err("%s, failed to expand MQTT publish" " topic with no output\n", __func__); return 1; } expbuf = lws_malloc(used_out + 1, __func__); if (!expbuf) { lwsl_err("%s, failed to allocate MQTT publish topic", __func__); return 1; } lws_strexp_init(&exp, (void *)h, lws_ss_exp_cb_metadata, expbuf, used_out + 1); if (lws_strexp_expand(&exp, topic, strlen(topic), &used_in, &used_out) != LSTRX_DONE) { lws_free(expbuf); return 1; } lwsl_notice("%s, expbuf - %s\n", __func__, expbuf); mqpp.topic = (char *)expbuf; mqpp.topic_len = (uint16_t)strlen(mqpp.topic); mqpp.packet_id = (uint16_t)(h->txord - 1); mqpp.qos = qos; mqpp.retain = !!retain; mqpp.payload = buf; mqpp.dup = !!dup; if (payload_len) mqpp.payload_len = payload_len; else mqpp.payload_len = (uint32_t)buf_len; lwsl_notice("%s: payload len %d\n", __func__, (int)mqpp.payload_len); if (lws_mqtt_client_send_publish(wsi, &mqpp, (const char *)buf, (uint32_t)buf_len, f & LWSSS_FLAG_EOM)) { lwsl_notice("%s: failed to publish\n", __func__); lws_free(expbuf); return -1; } lws_free(expbuf); if ((mqpp.qos == QOS1 || mqpp.qos == QOS2) && buf_len > 0) { if (lws_buflist_append_segment(&h->u.mqtt.buflist_unacked, buf, buf_len) < 0) { lwsl_notice("%s: failed to store unacked\n", __func__); return -1; } } return 0; } static int secstream_mqtt_birth(struct lws *wsi, uint8_t *buf, size_t buflen) { lws_strexp_t exp; size_t used_in, used_out = 0; lws_ss_handle_t *h = (lws_ss_handle_t *)lws_get_opaque_user_data(wsi); if (h->policy->u.mqtt.birth_message) { lws_strexp_init(&exp, h, lws_ss_exp_cb_metadata, (char *)buf, buflen); if (lws_strexp_expand(&exp, h->policy->u.mqtt.birth_message, strlen(h->policy->u.mqtt.birth_message), &used_in, &used_out) != LSTRX_DONE) { return 1; } } wsi->mqtt->inside_birth = 1; return secstream_mqtt_publish(wsi, buf, used_out, 0, h->policy->u.mqtt.birth_topic, h->policy->u.mqtt.birth_qos, h->policy->u.mqtt.birth_retain, 0, LWSSS_FLAG_EOM); } static int secstream_mqtt_resend(struct lws *wsi, uint8_t *buf) { uint8_t *buffered; size_t len; int f = 0, r; lws_ss_handle_t *h = (lws_ss_handle_t *)lws_get_opaque_user_data(wsi); len = lws_buflist_next_segment_len(&h->u.mqtt.buflist_unacked, &buffered); if (h->u.mqtt.unacked_size <= len) f |= LWSSS_FLAG_EOM; if (!len) { /* when the message does not have payload */ buffered = buf; } else { h->u.mqtt.unacked_size -= (uint32_t)len; } if (wsi->mqtt->inside_birth) { r = secstream_mqtt_publish(wsi, buffered, len, 0, h->policy->u.mqtt.birth_topic, h->policy->u.mqtt.birth_qos, h->policy->u.mqtt.birth_retain, 1, f); } else { r = secstream_mqtt_publish(wsi, buffered, len, (uint32_t)h->writeable_len, h->policy->u.mqtt.topic, h->policy->u.mqtt.qos, h->policy->u.mqtt.retain, 1, f); } if (len) lws_buflist_use_segment(&h->u.mqtt.buflist_unacked, len); if (r) { lws_buflist_destroy_all_segments(&h->u.mqtt.buflist_unacked); h->u.mqtt.retry_count = h->u.mqtt.send_unacked = 0; if (wsi->mqtt->inside_birth) { lwsl_err("%s: %s: failed to send Birth\n", __func__, lws_ss_tag(h)); return -1; } else { r = lws_ss_event_helper(h, LWSSSCS_QOS_NACK_REMOTE); if (r != LWSSSSRET_OK) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); } } return 0; } static char * expand_metadata(lws_ss_handle_t *h, const char* str, const char* post, size_t max_len) { lws_strexp_t exp; char *expbuf = NULL; size_t used_in = 0, used_out = 0, post_len = 0; memset(&exp, 0, sizeof(exp)); if (post) post_len = strlen(post); if (post_len > max_len) return NULL; lws_strexp_init(&exp, (void *)h, lws_ss_exp_cb_metadata, NULL, max_len - post_len); if (lws_strexp_expand(&exp, str, strlen(str), &used_in, &used_out) != LSTRX_DONE) { lwsl_err("%s, failed to expand %s", __func__, str); return NULL; } expbuf = lws_malloc(used_out + 1 + post_len, __func__); if (!expbuf) { lwsl_err("%s, failed to allocate str_exp for %s", __func__, str); return NULL; } lws_strexp_init(&exp, (void*)h, lws_ss_exp_cb_metadata, expbuf, used_out + 1 + post_len); if (lws_strexp_expand(&exp, str, strlen(str), &used_in, &used_out) != LSTRX_DONE) { lwsl_err("%s, failed to expand str_exp %s\n", __func__, str); lws_free(expbuf); return NULL; } if (post) strcat(expbuf, post); return expbuf; } static lws_mqtt_match_topic_return_t secstream_mqtt_is_shadow_matched(struct lws *wsi, const char *topic) { lws_ss_handle_t *h = (lws_ss_handle_t *)lws_get_opaque_user_data(wsi); const char *match[] = { LWS_MQTT_SHADOW_UNNAMED_TOPIC_MATCH, LWS_MQTT_SHADOW_NAMED_TOPIC_MATCH }; char *expbuf = NULL; unsigned int i = 0; lws_mqtt_match_topic_return_t ret = LMMTR_TOPIC_NOMATCH; if (!topic) return LMMTR_TOPIC_MATCH_ERROR; expbuf = expand_metadata(h, topic, NULL, LWS_MQTT_MAX_AWSIOT_TOPICLEN); if (!expbuf) { lwsl_wsi_warn(wsi, "Failed to expand Shadow topic"); return LMMTR_TOPIC_MATCH_ERROR; } for (i = 0; i < (sizeof(match) / sizeof(match[0])); i++) { if (lws_mqtt_is_topic_matched( match[i], expbuf) == LMMTR_TOPIC_MATCH) { ret = LMMTR_TOPIC_MATCH; break; } } lws_free(expbuf); return ret; } static void secstream_mqtt_shadow_cleanup(struct lws *wsi) { lws_ss_handle_t *h = (lws_ss_handle_t *)lws_get_opaque_user_data(wsi); uint32_t i = 0; for (i = 0; i < h->u.mqtt.shadow_sub.num_topics; i++) lws_free((void *)h->u.mqtt.shadow_sub.topic[i].name); h->u.mqtt.shadow_sub.num_topics = 0; if (h->u.mqtt.shadow_sub.topic) { lws_free(h->u.mqtt.shadow_sub.topic); h->u.mqtt.shadow_sub.topic = NULL; } } static lws_ss_state_return_t secstream_mqtt_shadow_unsubscribe(struct lws *wsi) { lws_ss_handle_t *h = (lws_ss_handle_t *)lws_get_opaque_user_data(wsi); if (h->u.mqtt.shadow_sub.num_topics == 0) { wsi->mqtt->send_shadow_unsubscribe = 0; wsi->mqtt->inside_shadow = 0; wsi->mqtt->done_shadow_subscribe = 0; return LWSSSSRET_OK; } if (lws_mqtt_client_send_unsubcribe(wsi, &h->u.mqtt.shadow_sub)) { lwsl_wsi_err(wsi, "Failed to send MQTT unsubsribe"); return LWSSSSRET_DISCONNECT_ME; } /* Expect a UNSUBACK */ if (lws_change_pollfd(wsi, 0, LWS_POLLIN)) { lwsl_wsi_err(wsi, "Unable to set LWS_POLLIN"); return LWSSSSRET_DISCONNECT_ME; } wsi->mqtt->send_shadow_unsubscribe = 0; return LWSSSSRET_OK; } static int secstream_mqtt_shadow_subscribe(struct lws *wsi) { lws_ss_handle_t *h = (lws_ss_handle_t *)lws_get_opaque_user_data(wsi); char* expbuf = NULL; const char *suffixes[] = { LWS_MQTT_SHADOW_RESP_ACCEPTED_STR, LWS_MQTT_SHADOW_RESP_REJECTED_STR }; unsigned int i, suffixes_len = sizeof(suffixes) / sizeof(suffixes[0]); if (!h->policy->u.mqtt.topic || wsi->mqtt->inside_shadow) return 0; if (h->u.mqtt.shadow_sub.num_topics > 0) secstream_mqtt_shadow_cleanup(wsi); memset(&h->u.mqtt.shadow_sub, 0, sizeof(lws_mqtt_subscribe_param_t)); h->u.mqtt.shadow_sub.topic = lws_malloc( sizeof(lws_mqtt_topic_elem_t) * suffixes_len, __func__); if (!h->u.mqtt.shadow_sub.topic) { lwsl_ss_err(h, "Failed to allocate Shadow topics"); return -1; } h->u.mqtt.shadow_sub.num_topics = suffixes_len; for (i = 0; i < suffixes_len; i++) { expbuf = expand_metadata(h, h->policy->u.mqtt.topic, suffixes[i], LWS_MQTT_MAX_AWSIOT_TOPICLEN); if (!expbuf) { lwsl_ss_err(h, "Failed to allocate Shadow topic"); secstream_mqtt_shadow_cleanup(wsi); return -1; } h->u.mqtt.shadow_sub.topic[i].name = expbuf; h->u.mqtt.shadow_sub.topic[i].qos = h->policy->u.mqtt.qos; } h->u.mqtt.shadow_sub.packet_id = (uint16_t)(h->txord - 1); if (lws_mqtt_client_send_subcribe(wsi, &h->u.mqtt.shadow_sub)) { lwsl_wsi_notice(wsi, "Unable to subscribe Shadow topics"); return 0; } /* Expect a SUBACK */ if (lws_change_pollfd(wsi, 0, LWS_POLLIN)) { lwsl_err("%s: Unable to set LWS_POLLIN\n", __func__); return -1; } wsi->mqtt->inside_shadow = 1; return 0; } static int secstream_mqtt(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { lws_ss_handle_t *h = (lws_ss_handle_t *)lws_get_opaque_user_data(wsi); size_t used_in = 0, used_out = 0, topic_len = 0; lws_mqtt_publish_param_t *pmqpp = NULL; lws_ss_state_return_t r = LWSSSSRET_OK; uint8_t buf[LWS_PRE + 1400]; size_t buflen = sizeof(buf) - LWS_PRE; lws_ss_metadata_t *omd = NULL; char *sub_topic = NULL; lws_strexp_t exp; int f = 0; memset(buf, 0, sizeof(buf)); memset(&exp, 0, sizeof(exp)); switch (reason) { /* because we are protocols[0] ... */ case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_info("%s: CLIENT_CONNECTION_ERROR: %s\n", __func__, in ? (char *)in : "(null)"); if (!h) break; #if defined(LWS_WITH_CONMON) lws_conmon_ss_json(h); #endif r = lws_ss_event_helper(h, LWSSSCS_UNREACHABLE); h->wsi = NULL; secstream_mqtt_cleanup(h); if (r == LWSSSSRET_DESTROY_ME) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); r = lws_ss_backoff(h); if (r != LWSSSSRET_OK) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); break; case LWS_CALLBACK_MQTT_CLIENT_CLOSED: if (!h) break; lws_sul_cancel(&h->sul_timeout); #if defined(LWS_WITH_CONMON) lws_conmon_ss_json(h); #endif if (h->ss_dangling_connected) r = lws_ss_event_helper(h, LWSSSCS_DISCONNECTED); else r = lws_ss_event_helper(h, LWSSSCS_UNREACHABLE); if (h->wsi) lws_set_opaque_user_data(h->wsi, NULL); h->wsi = NULL; secstream_mqtt_cleanup(h); if (r) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); if (h->policy && !(h->policy->flags & LWSSSPOLF_OPPORTUNISTIC) && !h->txn_ok && !wsi->a.context->being_destroyed) { r = lws_ss_backoff(h); if (r != LWSSSSRET_OK) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); } break; case LWS_CALLBACK_MQTT_CLIENT_ESTABLISHED: /* * Make sure the handle wsi points to the stream wsi not the * original nwsi, in the case it was migrated */ h->wsi = wsi; h->retry = 0; h->seqstate = SSSEQ_CONNECTED; if (h->policy->u.mqtt.birth_topic && !wsi->mqtt->done_birth) { struct lws *nwsi = lws_get_network_wsi(wsi); lws_start_foreach_ll(struct lws *, w, nwsi->mux.child_list) { if (w != wsi && (w->mqtt->done_birth || w->mqtt->inside_birth)) { /* * If any Birth was sent out or * is pending on other stream, * skip sending Birth. */ wsi->mqtt->done_birth = 1; break; } } lws_end_foreach_ll(w, mux.sibling_list); } if (!h->policy->u.mqtt.subscribe || !h->policy->u.mqtt.subscribe[0]) { /* * If subscribe is empty in the policy, then, * skip sending SUBSCRIBE and signal the user * application. */ wsi->mqtt->done_subscribe = 1; } else if (!h->policy->u.mqtt.clean_start && wsi->mqtt->session_resumed) { wsi->mqtt->inside_resume_session = 1; /* * If the previous session is resumed and Server has * stored session, then, do not subscribe. */ if (!secstream_mqtt_subscribe(wsi)) wsi->mqtt->done_subscribe = 1; wsi->mqtt->inside_resume_session = 0; } else if (h->policy->u.mqtt.subscribe && !wsi->mqtt->done_subscribe) { /* * If a subscribe is pending on the stream, then make * sure the SUBSCRIBE is done before signaling the * user application. */ lws_callback_on_writable(wsi); break; } if (h->policy->u.mqtt.birth_topic && !wsi->mqtt->done_birth) { /* * If a Birth is pending on the stream, then make * sure the Birth is done before signaling the * user application. */ lws_callback_on_writable(wsi); break; } lws_sul_cancel(&h->sul); #if defined(LWS_WITH_SYS_METRICS) /* * If any hanging caliper measurement, dump it, and free any tags */ lws_metrics_caliper_report_hist(h->cal_txn, (struct lws *)NULL); #endif r = lws_ss_event_helper(h, LWSSSCS_CONNECTED); if (r != LWSSSSRET_OK) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); if (h->policy->u.mqtt.topic) lws_callback_on_writable(wsi); break; case LWS_CALLBACK_MQTT_CLIENT_RX: // lwsl_user("LWS_CALLBACK_CLIENT_RECEIVE: read %d\n", (int)len); if (!h || !h->info.rx) return 0; pmqpp = (lws_mqtt_publish_param_t *)in; f = 0; if (!pmqpp->payload_pos) f |= LWSSS_FLAG_SOM; if (pmqpp->payload_pos + len == pmqpp->payload_len) f |= LWSSS_FLAG_EOM; h->subseq = 1; if (wsi->mqtt->inside_shadow) { /* * When Shadow is used, the stream receives multiple * topics including Shadow response, set received * topic on the metadata */ lws_strexp_init(&exp, (void*)h, lws_ss_exp_cb_metadata, NULL, (size_t)-1); if (lws_strexp_expand(&exp, h->policy->u.mqtt.subscribe, strlen(h->policy->u.mqtt.subscribe), &used_in, &used_out) != LSTRX_DONE) { lwsl_err("%s, failed to expand subscribe topic", __func__); return -1; } omd = lws_ss_get_handle_metadata(h, exp.name); if (!omd) { lwsl_err("%s, failed to find metadata for subscribe", __func__); return -1; } sub_topic = omd->value__may_own_heap; topic_len = omd->length; _lws_ss_set_metadata(omd, exp.name, (const void *)pmqpp->topic, pmqpp->topic_len); } r = h->info.rx(ss_to_userobj(h), (const uint8_t *)pmqpp->payload, len, f); if (wsi->mqtt->inside_shadow) _lws_ss_set_metadata(omd, exp.name, &sub_topic, topic_len); if (r != LWSSSSRET_OK) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); if (wsi->mqtt->inside_shadow) { size_t acc_n = strlen(LWS_MQTT_SHADOW_RESP_ACCEPTED_STR); size_t rej_n = strlen(LWS_MQTT_SHADOW_RESP_REJECTED_STR); uint32_t i; for (i = 0; i < h->u.mqtt.shadow_sub.num_topics; i++) { /* * received response ('/accepted' or 'rejected') * and clean up Shadow operation */ if (strncmp(h->u.mqtt.shadow_sub.topic[i].name, pmqpp->topic, pmqpp->topic_len) || (strlen(pmqpp->topic) < acc_n || strlen(pmqpp->topic) < rej_n)) continue; if (!strcmp(pmqpp->topic + (strlen(pmqpp->topic) - acc_n), LWS_MQTT_SHADOW_RESP_ACCEPTED_STR) || !strcmp(pmqpp->topic + (strlen(pmqpp->topic) - rej_n), LWS_MQTT_SHADOW_RESP_REJECTED_STR)) { lws_sul_cancel(&wsi->mqtt->sul_shadow_wait); wsi->mqtt->send_shadow_unsubscribe = 1; lws_callback_on_writable(wsi); return 0; } } } return 0; /* don't passthru */ case LWS_CALLBACK_MQTT_SUBSCRIBED: if (wsi->mqtt->inside_shadow) { wsi->mqtt->done_shadow_subscribe = 1; lws_callback_on_writable(wsi); return 0; } /* * Stream demanded a subscribe without a Birth while connecting, once * done notify CONNECTED event to the application. */ if (!wsi->mqtt->done_subscribe && !h->policy->u.mqtt.birth_topic) { lws_sul_cancel(&h->sul); r = lws_ss_event_helper(h, LWSSSCS_CONNECTED); if (r != LWSSSSRET_OK) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); } wsi->mqtt->done_subscribe = 1; lws_callback_on_writable(wsi); break; case LWS_CALLBACK_MQTT_ACK: lws_sul_cancel(&h->sul_timeout); if (h->u.mqtt.send_unacked) { lws_buflist_destroy_all_segments(&h->u.mqtt.buflist_unacked); h->u.mqtt.retry_count = h->u.mqtt.send_unacked = 0; } if (wsi->mqtt->inside_birth) { /* * Skip LWSSSCS_QOS_ACK_REMOTE for a Birth, notify * CONNECTED event to the application. */ wsi->mqtt->inside_birth = 0; wsi->mqtt->done_birth = 1; r = lws_ss_event_helper(h, LWSSSCS_CONNECTED); if (r != LWSSSSRET_OK) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); lws_callback_on_writable(wsi); break; } r = lws_ss_event_helper(h, LWSSSCS_QOS_ACK_REMOTE); if (r != LWSSSSRET_OK) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); break; case LWS_CALLBACK_MQTT_RESEND: lws_sul_cancel(&h->sul_timeout); if (h->u.mqtt.retry_count++ < LWS_MQTT_MAX_PUBLISH_RETRY) { h->u.mqtt.unacked_size = (uint32_t)lws_buflist_total_len(&h->u.mqtt.buflist_unacked); if (h->u.mqtt.unacked_size) { lwsl_notice("%s: %s: resend unacked message (%d/%d) \n", __func__, lws_ss_tag(h), h->u.mqtt.retry_count, LWS_MQTT_MAX_PUBLISH_RETRY); h->u.mqtt.send_unacked = 1; lws_callback_on_writable(wsi); break; } } lws_buflist_destroy_all_segments(&h->u.mqtt.buflist_unacked); h->u.mqtt.retry_count = h->u.mqtt.send_unacked = 0; if (wsi->mqtt->inside_birth) { lwsl_err("%s: %s: failed to send Birth\n", __func__, lws_ss_tag(h)); return -1; } r = lws_ss_event_helper(h, LWSSSCS_QOS_NACK_REMOTE); if (r != LWSSSSRET_OK) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); break; case LWS_CALLBACK_MQTT_CLIENT_WRITEABLE: { if (!h || !h->info.tx) return 0; lwsl_notice("%s: %s: WRITEABLE\n", __func__, lws_ss_tag(h)); if (h->seqstate != SSSEQ_CONNECTED) { lwsl_warn("%s: seqstate %d\n", __func__, h->seqstate); break; } if (!wsi->mqtt->done_subscribe && h->policy->u.mqtt.subscribe) return secstream_mqtt_subscribe(wsi); if (h->u.mqtt.send_unacked) return secstream_mqtt_resend(wsi, buf + LWS_PRE); if (!wsi->mqtt->done_birth && h->policy->u.mqtt.birth_topic) return secstream_mqtt_birth(wsi, buf + LWS_PRE, buflen); if (h->policy->u.mqtt.aws_iot) { if (secstream_mqtt_is_shadow_matched(wsi, h->policy->u.mqtt.topic) == LMMTR_TOPIC_MATCH) { if (!wsi->mqtt->done_shadow_subscribe) return secstream_mqtt_shadow_subscribe(wsi); if (wsi->mqtt->send_shadow_unsubscribe) return secstream_mqtt_shadow_unsubscribe(wsi); } } r = h->info.tx(ss_to_userobj(h), h->txord++, buf + LWS_PRE, &buflen, &f); if (r == LWSSSSRET_TX_DONT_SEND) { if (wsi->mqtt->done_shadow_subscribe) { return secstream_mqtt_shadow_unsubscribe(wsi); } return 0; } if (r == LWSSSSRET_DISCONNECT_ME) { lws_mqtt_subscribe_param_t lmsp; if (h->u.mqtt.sub_info.num_topics) { lmsp.num_topics = h->u.mqtt.sub_info.num_topics; lmsp.topic = h->u.mqtt.sub_info.topic; lmsp.packet_id = (uint16_t)(h->txord - 1); if (lws_mqtt_client_send_unsubcribe(wsi, &lmsp)) { lwsl_err("%s, failed to send" " MQTT unsubsribe", __func__); return -1; } return 0; } } if (r < 0) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); if (secstream_mqtt_publish(wsi, buf + LWS_PRE, buflen, (uint32_t)h->writeable_len, h->policy->u.mqtt.topic, h->policy->u.mqtt.qos, h->policy->u.mqtt.retain, 0, f) != 0) { r = lws_ss_event_helper(h, LWSSSCS_QOS_NACK_REMOTE); if (r != LWSSSSRET_OK) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); } return 0; } case LWS_CALLBACK_MQTT_UNSUBSCRIBED: { struct lws *nwsi = lws_get_network_wsi(wsi); if (wsi->mqtt->inside_shadow) { secstream_mqtt_shadow_cleanup(wsi); wsi->mqtt->inside_shadow = 0; wsi->mqtt->done_shadow_subscribe = 0; break; } if (nwsi && (nwsi->mux.child_count == 1)) lws_mqtt_client_send_disconnect(nwsi); return -1; } case LWS_CALLBACK_MQTT_UNSUBSCRIBE_TIMEOUT: if (!wsi->mqtt) return -1; if (wsi->mqtt->inside_shadow) { secstream_mqtt_shadow_cleanup(wsi); wsi->mqtt->inside_shadow = 0; wsi->mqtt->done_shadow_subscribe = 0; lwsl_warn("%s: %s: Unsubscribe (Shadow) timeout.\n", __func__, lws_ss_tag(h)); break; } if (wsi->mqtt->inside_unsubscribe) { lwsl_warn("%s: %s: Unsubscribe timeout.\n", __func__, lws_ss_tag(h)); return -1; } break; case LWS_CALLBACK_MQTT_SHADOW_TIMEOUT: if (!wsi->mqtt) return -1; if (wsi->mqtt->inside_shadow) { lwsl_warn("%s: %s: Shadow timeout.\n", __func__, lws_ss_tag(h)); wsi->mqtt->send_shadow_unsubscribe = 1; lws_callback_on_writable(wsi); } break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } const struct lws_protocols protocol_secstream_mqtt = { "lws-secstream-mqtt", secstream_mqtt, 0, 0, 0, NULL, 0 }; /* * Munge connect info according to protocol-specific considerations... this * usually means interpreting aux in a protocol-specific way and using the * pieces at connection setup time, eg, http url pieces. * * len bytes of buf can be used for things with scope until after the actual * connect. * * For ws, protocol aux is ; */ enum { SSCMM_STRSUB_WILL_TOPIC, SSCMM_STRSUB_WILL_MESSAGE, SSCMM_STRSUB_SUBSCRIBE, SSCMM_STRSUB_TOPIC, SSCMM_STRSUB_BIRTH_TOPIC, SSCMM_STRSUB_BIRTH_MESSAGE }; static int secstream_connect_munge_mqtt(lws_ss_handle_t *h, char *buf, size_t len, struct lws_client_connect_info *i, union lws_ss_contemp *ct) { const char *sources[6] = { /* we're going to string-substitute these before use */ h->policy->u.mqtt.will_topic, h->policy->u.mqtt.will_message, h->policy->u.mqtt.subscribe, h->policy->u.mqtt.topic, h->policy->u.mqtt.birth_topic, h->policy->u.mqtt.birth_message }; size_t used_in, olen[6] = { 0, 0, 0, 0, 0, 0 }, tot = 0; lws_strexp_t exp; char *ps[6]; uint8_t *p = NULL; int n = -1; size_t blen; lws_system_blob_t *b = NULL; memset(&ct->ccp, 0, sizeof(ct->ccp)); b = lws_system_get_blob(i->context, LWS_SYSBLOB_TYPE_MQTT_CLIENT_ID, 0); /* If LWS_SYSBLOB_TYPE_MQTT_CLIENT_ID is set */ if (b && (blen = lws_system_blob_get_size(b))) { if (blen > LWS_MQTT_MAX_CIDLEN) { lwsl_err("%s - Client ID too long.\n", __func__); return -1; } p = (uint8_t *)lws_zalloc(blen+1, __func__); if (!p) return -1; n = lws_system_blob_get(b, p, &blen, 0); if (n) { ct->ccp.client_id = NULL; } else { ct->ccp.client_id = (const char *)p; lwsl_notice("%s - Client ID = %s\n", __func__, ct->ccp.client_id); } } else { /* Default (Random) client ID */ ct->ccp.client_id = NULL; } b = lws_system_get_blob(i->context, LWS_SYSBLOB_TYPE_MQTT_USERNAME, 0); /* If LWS_SYSBLOB_TYPE_MQTT_USERNAME is set */ if (b && (blen = lws_system_blob_get_size(b))) { p = (uint8_t *)lws_zalloc(blen+1, __func__); if (!p) return -1; n = lws_system_blob_get(b, p, &blen, 0); if (n) { ct->ccp.username = NULL; } else { ct->ccp.username = (const char *)p; lwsl_notice("%s - Username ID = %s\n", __func__, ct->ccp.username); } } b = lws_system_get_blob(i->context, LWS_SYSBLOB_TYPE_MQTT_PASSWORD, 0); /* If LWS_SYSBLOB_TYPE_MQTT_PASSWORD is set */ if (b && (blen = lws_system_blob_get_size(b))) { p = (uint8_t *)lws_zalloc(blen+1, __func__); if (!p) return -1; n = lws_system_blob_get(b, p, &blen, 0); if (n) { ct->ccp.password = NULL; } else { ct->ccp.password = (const char *)p; lwsl_notice("%s - Password ID = %s\n", __func__, ct->ccp.password); } } ct->ccp.keep_alive = h->policy->u.mqtt.keep_alive; ct->ccp.clean_start = (h->policy->u.mqtt.clean_start & 1u); ct->ccp.will_param.qos = h->policy->u.mqtt.will_qos; ct->ccp.will_param.retain = h->policy->u.mqtt.will_retain; ct->ccp.birth_param.qos = h->policy->u.mqtt.birth_qos; ct->ccp.birth_param.retain = h->policy->u.mqtt.birth_retain; ct->ccp.aws_iot = h->policy->u.mqtt.aws_iot; h->u.mqtt.topic_qos.qos = h->policy->u.mqtt.qos; /* * We're going to string-substitute several of these parameters, which * have unknown, possibly large size. And, as their usage is deferred * inside the asynchronous lifetime of the MQTT connection, they need * to live on the heap. * * Notice these allocations at h->u.mqtt.heap_baggage belong to the * underlying MQTT stream lifetime, not the logical SS lifetime, and * are destroyed if present at connection error or close of the * underlying connection. * * * First, compute the length of each without producing strsubst output, * and keep a running total. */ for (n = 0; n < (int)LWS_ARRAY_SIZE(sources); n++) { if (!sources[n]) continue; lws_strexp_init(&exp, (void *)h, lws_ss_exp_cb_metadata, NULL, (size_t)-1); if (lws_strexp_expand(&exp, sources[n], strlen(sources[n]), &used_in, &olen[n]) != LSTRX_DONE) { lwsl_err("%s: failed to subsitute %s\n", __func__, sources[n]); return 1; } tot += olen[n] + 1; } /* * Then, allocate enough space on the heap for the total of the * substituted results */ h->u.mqtt.heap_baggage = lws_malloc(tot, __func__); if (!h->u.mqtt.heap_baggage) return 1; /* * Finally, issue the subsitutions one after the other into the single * allocated result buffer and prepare pointers into them */ p = h->u.mqtt.heap_baggage; for (n = 0; n < (int)LWS_ARRAY_SIZE(sources); n++) { lws_strexp_init(&exp, (void *)h, lws_ss_exp_cb_metadata, (char *)p, (size_t)-1); if (!sources[n]) { ps[n] = NULL; continue; } ps[n] = (char *)p; if (lws_strexp_expand(&exp, sources[n], strlen(sources[n]), &used_in, &olen[n]) != LSTRX_DONE) return 1; p += olen[n] + 1; } /* * Point the guys who want the substituted content at the substituted * strings */ ct->ccp.will_param.topic = ps[SSCMM_STRSUB_WILL_TOPIC]; ct->ccp.will_param.message = ps[SSCMM_STRSUB_WILL_MESSAGE]; h->u.mqtt.subscribe_to = ps[SSCMM_STRSUB_SUBSCRIBE]; h->u.mqtt.subscribe_to_len = olen[SSCMM_STRSUB_SUBSCRIBE]; h->u.mqtt.topic_qos.name = ps[SSCMM_STRSUB_TOPIC]; ct->ccp.birth_param.topic = ps[SSCMM_STRSUB_BIRTH_TOPIC]; ct->ccp.birth_param.message = ps[SSCMM_STRSUB_BIRTH_MESSAGE]; i->method = "MQTT"; i->mqtt_cp = &ct->ccp; i->alpn = "x-amzn-mqtt-ca"; /* share connections where possible */ i->ssl_connection |= LCCSCF_PIPELINE; return 0; } const struct ss_pcols ss_pcol_mqtt = { "MQTT", "x-amzn-mqtt-ca", //"mqtt/3.1.1", &protocol_secstream_mqtt, secstream_connect_munge_mqtt, NULL, NULL }; libwebsockets-4.3.5/lib/secure-streams/protocols/ss-raw.c000066400000000000000000000124721476025525100235140ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * This is the glue that wires up raw-socket to Secure Streams. */ #include int secstream_raw(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { #if defined(LWS_WITH_SERVER) struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; #endif lws_ss_handle_t *h = (lws_ss_handle_t *)lws_get_opaque_user_data(wsi); uint8_t buf[LWS_PRE + 1520], *p = &buf[LWS_PRE], *end = &buf[sizeof(buf) - 1]; lws_ss_state_return_t r; size_t buflen; int f = 0; switch (reason) { case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: assert(h); assert(h->policy); lwsl_info("%s: %s, %s CLIENT_CONNECTION_ERROR: %s\n", __func__, lws_ss_tag(h), h->policy->streamtype, in ? (char *)in : "(null)"); #if defined(LWS_WITH_CONMON) lws_conmon_ss_json(h); #endif r = lws_ss_event_helper(h, LWSSSCS_UNREACHABLE); if (r == LWSSSSRET_DESTROY_ME) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); h->wsi = NULL; r = lws_ss_backoff(h); if (r != LWSSSSRET_OK) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); break; case LWS_CALLBACK_RAW_CLOSE: if (!h) break; lws_sul_cancel(&h->sul_timeout); #if defined(LWS_WITH_CONMON) lws_conmon_ss_json(h); #endif lwsl_info("%s: %s, %s RAW_CLOSE\n", __func__, lws_ss_tag(h), h->policy ? h->policy->streamtype : "no policy"); h->wsi = NULL; #if defined(LWS_WITH_SERVER) lws_pt_lock(pt, __func__); lws_dll2_remove(&h->cli_list); lws_pt_unlock(pt); #endif /* wsi is going down anyway */ r = lws_ss_event_helper(h, LWSSSCS_DISCONNECTED); if (r == LWSSSSRET_DESTROY_ME) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); if (h->policy && !(h->policy->flags & LWSSSPOLF_OPPORTUNISTIC) && #if defined(LWS_WITH_SERVER) !(h->info.flags & LWSSSINFLAGS_ACCEPTED) && /* not server */ #endif !h->txn_ok && !wsi->a.context->being_destroyed) { r = lws_ss_backoff(h); if (r != LWSSSSRET_OK) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); break; } break; case LWS_CALLBACK_RAW_CONNECTED: lwsl_info("%s: RAW_CONNECTED\n", __func__); h->retry = 0; h->seqstate = SSSEQ_CONNECTED; lws_sul_cancel(&h->sul); #if defined(LWS_WITH_SYS_METRICS) /* * If any hanging caliper measurement, dump it, and free any tags */ lws_metrics_caliper_report_hist(h->cal_txn, (struct lws *)NULL); #endif r = lws_ss_event_helper(h, LWSSSCS_CONNECTED); if (r != LWSSSSRET_OK) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); lws_validity_confirmed(wsi); break; case LWS_CALLBACK_RAW_ADOPT: lwsl_info("%s: RAW_ADOPT\n", __func__); break; /* chunks of chunked content, with header removed */ case LWS_CALLBACK_RAW_RX: if (!h || !h->info.rx) return 0; r = h->info.rx(ss_to_userobj(h), (const uint8_t *)in, len, 0); if (r != LWSSSSRET_OK) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); return 0; /* don't passthru */ case LWS_CALLBACK_RAW_WRITEABLE: lwsl_info("%s: RAW_WRITEABLE\n", __func__); if (!h || !h->info.tx) return 0; buflen = lws_ptr_diff_size_t(end, p); r = h->info.tx(ss_to_userobj(h), h->txord++, p, &buflen, &f); if (r == LWSSSSRET_TX_DONT_SEND) return 0; if (r < 0) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); /* * flags are ignored with raw, there are no protocol payload * boundaries, just an arbitrarily-fragmented bytestream */ p += buflen; if (lws_write(wsi, buf + LWS_PRE, lws_ptr_diff_size_t(p, buf + LWS_PRE), LWS_WRITE_HTTP) != lws_ptr_diff(p, buf + LWS_PRE)) { lwsl_err("%s: write failed\n", __func__); return -1; } lws_set_timeout(wsi, 0, 0); break; default: break; } return 0; } static int secstream_connect_munge_raw(lws_ss_handle_t *h, char *buf, size_t len, struct lws_client_connect_info *i, union lws_ss_contemp *ct) { i->method = "RAW"; return 0; } const struct lws_protocols protocol_secstream_raw = { "lws-secstream-raw", secstream_raw, 0, 0, 0, NULL, 0 }; const struct ss_pcols ss_pcol_raw = { "raw", "", &protocol_secstream_raw, secstream_connect_munge_raw, NULL, NULL }; libwebsockets-4.3.5/lib/secure-streams/protocols/ss-ws.c000066400000000000000000000155631476025525100233600ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include static int secstream_ws(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { #if defined(LWS_WITH_SERVER) struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; #endif lws_ss_handle_t *h = (lws_ss_handle_t *)lws_get_opaque_user_data(wsi); uint8_t buf[LWS_PRE + 1400]; lws_ss_state_return_t r; int f = 0, f1, n; size_t buflen; switch (reason) { /* because we are protocols[0] ... */ case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_info("%s: CLIENT_CONNECTION_ERROR: %s\n", __func__, in ? (char *)in : "(null)"); if (!h) break; #if defined(LWS_WITH_CONMON) lws_conmon_ss_json(h); #endif r = lws_ss_event_helper(h, LWSSSCS_UNREACHABLE); if (r == LWSSSSRET_DESTROY_ME) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); h->wsi = NULL; r = lws_ss_backoff(h); if (r != LWSSSSRET_OK) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); break; case LWS_CALLBACK_CLOSED: /* server */ case LWS_CALLBACK_CLIENT_CLOSED: if (!h) break; lws_sul_cancel(&h->sul_timeout); #if defined(LWS_WITH_CONMON) lws_conmon_ss_json(h); #endif r = lws_ss_event_helper(h, LWSSSCS_DISCONNECTED); if (r == LWSSSSRET_DESTROY_ME) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); if (h->wsi) lws_set_opaque_user_data(h->wsi, NULL); h->wsi = NULL; #if defined(LWS_WITH_SERVER) lws_pt_lock(pt, __func__); lws_dll2_remove(&h->cli_list); lws_pt_unlock(pt); #endif if (reason == LWS_CALLBACK_CLIENT_CLOSED) { if (h->policy && !(h->policy->flags & LWSSSPOLF_OPPORTUNISTIC) && #if defined(LWS_WITH_SERVER) !(h->info.flags & LWSSSINFLAGS_ACCEPTED) && /* not server */ #endif !wsi->a.context->being_destroyed) { r = lws_ss_backoff(h); if (r != LWSSSSRET_OK) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); break; } #if defined(LWS_WITH_SERVER) if (h->info.flags & LWSSSINFLAGS_ACCEPTED) { /* * was an accepted client connection to * our server, so the stream is over now */ lws_ss_destroy(&h); return 0; } #endif } break; case LWS_CALLBACK_ESTABLISHED: case LWS_CALLBACK_CLIENT_ESTABLISHED: h->retry = 0; h->seqstate = SSSEQ_CONNECTED; lws_sul_cancel(&h->sul); #if defined(LWS_WITH_SYS_METRICS) /* * If any hanging caliper measurement, dump it, and free any tags */ lws_metrics_caliper_report_hist(h->cal_txn, (struct lws *)NULL); #endif r = lws_ss_event_helper(h, LWSSSCS_CONNECTED); if (r != LWSSSSRET_OK) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); break; case LWS_CALLBACK_RECEIVE: case LWS_CALLBACK_CLIENT_RECEIVE: // lwsl_user("LWS_CALLBACK_CLIENT_RECEIVE: read %d\n", (int)len); if (!h || !h->info.rx) return 0; if (lws_is_first_fragment(wsi)) f |= LWSSS_FLAG_SOM; if (lws_is_final_fragment(wsi)) f |= LWSSS_FLAG_EOM; // lws_frame_is_binary(wsi); h->subseq = 1; r = h->info.rx(ss_to_userobj(h), (const uint8_t *)in, len, f); if (r != LWSSSSRET_OK) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); return 0; /* don't passthru */ case LWS_CALLBACK_SERVER_WRITEABLE: case LWS_CALLBACK_CLIENT_WRITEABLE: // lwsl_notice("%s: %s: WRITEABLE\n", __func__, lws_ss_tag(h)); if (!h || !h->info.tx) return 0; if (h->seqstate != SSSEQ_CONNECTED) { lwsl_warn("%s: seqstate %d\n", __func__, h->seqstate); break; } buflen = sizeof(buf) - LWS_PRE; r = h->info.tx(ss_to_userobj(h), h->txord++, buf + LWS_PRE, &buflen, &f); if (r == LWSSSSRET_TX_DONT_SEND) return 0; if (r != LWSSSSRET_OK) return _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, wsi, &h); f1 = lws_write_ws_flags(h->policy->u.http.u.ws.binary ? LWS_WRITE_BINARY : LWS_WRITE_TEXT, !!(f & LWSSS_FLAG_SOM), !!(f & LWSSS_FLAG_EOM)); n = lws_write(wsi, buf + LWS_PRE, buflen, (enum lws_write_protocol)f1); if (n < (int)buflen) { lwsl_info("%s: write failed %d %d\n", __func__, n, (int)buflen); return -1; } return 0; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } const struct lws_protocols protocol_secstream_ws = { "lws-secstream-ws", secstream_ws, 0, 0, 0, NULL, 0 }; /* * Munge connect info according to protocol-specific considerations... this * usually means interpreting aux in a protocol-specific way and using the * pieces at connection setup time, eg, http url pieces. * * len bytes of buf can be used for things with scope until after the actual * connect. * * For ws, protocol aux is ; */ static int secstream_connect_munge_ws(lws_ss_handle_t *h, char *buf, size_t len, struct lws_client_connect_info *i, union lws_ss_contemp *ct) { const char *pbasis = h->policy->u.http.url; size_t used_in, used_out; lws_strexp_t exp; /* i.path on entry is used to override the policy urlpath if not "" */ if (i->path[0]) pbasis = i->path; if (!pbasis) return 0; if (h->policy->flags & LWSSSPOLF_HTTP_CACHE_COOKIES) i->ssl_connection |= LCCSCF_CACHE_COOKIES; if (h->policy->flags & LWSSSPOLF_PRIORITIZE_READS) i->ssl_connection |= LCCSCF_PRIORITIZE_READS; /* protocol aux is the path part ; ws subprotocol name */ i->path = buf; buf[0] = '/'; lws_strexp_init(&exp, (void *)h, lws_ss_exp_cb_metadata, buf + 1, len - 1); if (lws_strexp_expand(&exp, pbasis, strlen(pbasis), &used_in, &used_out) != LSTRX_DONE) return 1; i->protocol = h->policy->u.http.u.ws.subprotocol; lwsl_ss_info(h, "url %s, ws subprotocol %s", buf, i->protocol); return 0; } const struct ss_pcols ss_pcol_ws = { "ws", "http/1.1", &protocol_secstream_ws, secstream_connect_munge_ws, 0, 0 }; libwebsockets-4.3.5/lib/secure-streams/secure-streams-client.c000066400000000000000000000636561476025525100245040ustar00rootroot00000000000000/* * lws-minimal-secure-streams-client * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * * This client does not perform any INET networking... instead it opens a unix * domain socket on a proxy that is listening for it, and that creates the * actual secure stream connection. * * We are able to use the usual secure streams api in the client process, with * payloads and connection state information proxied over the unix domain * socket and fulfilled in the proxy process. * * The public client helper pieces are built as part of lws */ #include extern const uint32_t ss_state_txn_validity[17]; int lws_ss_check_next_state_sspc(lws_sspc_handle_t *ss, uint8_t *prevstate, lws_ss_constate_t cs) { if (cs >= LWSSSCS_USER_BASE || cs == LWSSSCS_EVENT_WAIT_CANCELLED) /* * we can't judge user or transient states, leave the old state * and just wave them through */ return 0; if (cs >= LWS_ARRAY_SIZE(ss_state_txn_validity)) { /* we don't recognize this state as usable */ lwsl_sspc_err(ss, "bad new state %u", cs); assert(0); return 1; } if (*prevstate >= LWS_ARRAY_SIZE(ss_state_txn_validity)) { /* existing state is broken */ lwsl_sspc_err(ss, "bad existing state %u", (unsigned int)*prevstate); assert(0); return 1; } if (ss_state_txn_validity[*prevstate] & (1u << cs)) { lwsl_sspc_notice(ss, "%s -> %s", lws_ss_state_name((int)*prevstate), lws_ss_state_name((int)cs)); /* this is explicitly allowed, update old state to new */ *prevstate = (uint8_t)cs; return 0; } lwsl_sspc_err(ss, "transition from %s -> %s is illegal", lws_ss_state_name((int)*prevstate), lws_ss_state_name((int)cs)); assert(0); return 1; } lws_ss_state_return_t lws_sspc_event_helper(lws_sspc_handle_t *h, lws_ss_constate_t cs, lws_ss_tx_ordinal_t flags) { lws_ss_state_return_t ret; if (!h) return LWSSSSRET_OK; if (lws_ss_check_next_state_sspc(h, &h->prev_ss_state, cs)) return LWSSSSRET_DESTROY_ME; if (!h->ssi.state) return LWSSSSRET_OK; h->h_in_svc = h; ret = h->ssi.state((void *)((uint8_t *)(h + 1)), NULL, cs, flags); h->h_in_svc = NULL; return ret; } static void lws_sspc_sul_retry_cb(lws_sorted_usec_list_t *sul) { lws_sspc_handle_t *h = lws_container_of(sul, lws_sspc_handle_t, sul_retry); static struct lws_client_connect_info i; /* * We may have started up before the system proxy, so be prepared with * a sul to retry at 1Hz */ memset(&i, 0, sizeof i); i.context = h->context; if (h->context->ss_proxy_port) { /* tcp */ i.address = h->context->ss_proxy_address; i.port = h->context->ss_proxy_port; i.iface = h->context->ss_proxy_bind; } else { if (h->context->ss_proxy_bind) i.address = h->context->ss_proxy_bind; else #if defined(__linux__) i.address = "+@proxy.ss.lws"; #else i.address = "+/tmp/proxy.ss.lws"; #endif } i.host = i.address; i.origin = i.address; i.method = "RAW"; i.protocol = lws_sspc_protocols[0].name; i.local_protocol_name = lws_sspc_protocols[0].name; i.path = ""; i.pwsi = &h->cwsi; i.opaque_user_data = (void *)h; i.ssl_connection = LCCSCF_SECSTREAM_PROXY_LINK; lws_metrics_caliper_bind(h->cal_txn, h->context->mt_ss_cliprox_conn); #if defined(LWS_WITH_SYS_METRICS) lws_metrics_tag_add(&h->cal_txn.mtags_owner, "ss", h->ssi.streamtype); #endif /* this wsi is the link to the proxy */ if (!lws_client_connect_via_info(&i)) { #if defined(LWS_WITH_SYS_METRICS) /* * If any hanging caliper measurement, dump it, and free any tags */ lws_metrics_caliper_report_hist(h->cal_txn, (struct lws *)NULL); #endif lws_sul_schedule(h->context, 0, &h->sul_retry, lws_sspc_sul_retry_cb, LWS_US_PER_SEC); return; } lwsl_sspc_notice(h, "%s", h->cwsi->lc.gutag); } static int lws_sspc_serialize_metadata(lws_sspc_handle_t *h, lws_sspc_metadata_t *md, uint8_t *p, uint8_t *end) { int n, txc; if (md->name[0] == '\0') { lwsl_info("sending tx credit update %d\n", md->tx_cr_adjust); p[0] = LWSSS_SER_TXPRE_TXCR_UPDATE; lws_ser_wu16be(&p[1], 4); lws_ser_wu32be(&p[3], (uint32_t)md->tx_cr_adjust); n = 7; } else { lwsl_sspc_info(h, "sending metadata"); p[0] = LWSSS_SER_TXPRE_METADATA; txc = (int)strlen(md->name); n = txc + 1 + (int)md->len; if (n > 0xffff) /* we can't serialize this metadata in 16b length */ return -1; if (n > lws_ptr_diff(end, &p[4])) /* we don't have space for this metadata */ return -1; lws_ser_wu16be(&p[1], (uint16_t)n); p[3] = (uint8_t)txc; memcpy(&p[4], md->name, (unsigned int)txc); memcpy(&p[4 + txc], &md[1], md->len); n = 4 + txc + (int)md->len; } lws_dll2_remove(&md->list); lws_free(md); return n; } static int callback_sspc_client(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { lws_sspc_handle_t *h = (lws_sspc_handle_t *)lws_get_opaque_user_data(wsi); size_t pktsize = wsi->a.context->max_http_header_data; void *m = (void *)((uint8_t *)(h + 1)); uint8_t *pkt = NULL, *p = NULL, *end = NULL; lws_ss_state_return_t r; uint64_t interval; const uint8_t *cp; uint8_t s[64]; lws_usec_t us; int flags, n; switch (reason) { case LWS_CALLBACK_CONNECTING: /* * In our particular case, we want CCEs even inside the * initial connect loop time */ wsi->client_suppress_CONNECTION_ERROR = 0; break; case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_warn("%s: CCE: %s\n", __func__, in ? (const char *)in : "null"); #if defined(LWS_WITH_SYS_METRICS) /* * If any hanging caliper measurement, dump it, and free any tags */ lws_metrics_caliper_report_hist(h->cal_txn, (struct lws *)NULL); #endif lws_set_opaque_user_data(wsi, NULL); h->cwsi = NULL; lws_sul_schedule(h->context, 0, &h->sul_retry, lws_sspc_sul_retry_cb, LWS_US_PER_SEC); if (h->ssi.state) { interval = (uint64_t)(lws_now_usecs() - h->us_start_upstream) / LWS_US_PER_MS; if (interval > 0xffffffffull) interval = 0xffffffffull; r = h->ssi.state(lws_sspc_to_user_object(h), NULL, LWSSSCS_UPSTREAM_LINK_RETRY, (uint32_t)interval); if (r == LWSSSSRET_DESTROY_ME) lws_sspc_destroy(&h); } break; case LWS_CALLBACK_RAW_CONNECTED: if (!h || lws_fi(&h->fic, "sspc_fail_on_linkup")) return -1; lwsl_sspc_info(h, "CONNECTED (%s)", h->ssi.streamtype); h->state = LPCSCLI_SENDING_INITIAL_TX; /* * We create the dsh at the response to the initial tx, which * will let us know the policy's max size for it... let's * protect the connection with a promise to complete the * SS serialization streamtype negotation within a short period, * we will cancel this timeout when we have the proxy's ack * of the streamtype serialization, eg, it exists in the proxy * policy etc */ lws_set_timeout(wsi, PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND, 3); lws_callback_on_writable(wsi); h->us_start_upstream = 0; break; case LWS_CALLBACK_RAW_CLOSE: /* * our ss proxy Unix Domain socket has closed... */ if (!h) { lwsl_info("%s: no sspc on client proxy link close", __func__); break; } lwsl_sspc_info(h, "LWS_CALLBACK_RAW_CLOSE: proxy conn down, wsi %s", lws_wsi_tag(wsi)); lws_dsh_destroy(&h->dsh); if (h->ss_dangling_connected && h->ssi.state) { lwsl_sspc_notice(h, "setting _DISCONNECTED"); h->ss_dangling_connected = 0; h->prev_ss_state = LWSSSCS_DISCONNECTED; r = h->ssi.state(ss_to_userobj(h), NULL, LWSSSCS_DISCONNECTED, 0); if (r == LWSSSSRET_DESTROY_ME) { h->cwsi = NULL; lws_set_opaque_user_data(wsi, NULL); lws_sspc_destroy(&h); break; } } h->cwsi = NULL; /* * schedule a reconnect in 1s */ lws_sul_schedule(h->context, 0, &h->sul_retry, lws_sspc_sul_retry_cb, LWS_US_PER_SEC); break; case LWS_CALLBACK_RAW_RX: /* * ie, the proxy has sent us something */ if (!h || !h->cwsi) { lwsl_info("%s: rx when client ss destroyed\n", __func__); return -1; } lwsl_sspc_info(h, "%s: RAW_RX: rx %d\n", __func__, (int)len); if (!len) { lwsl_sspc_notice(h, "RAW_RX: zero len"); return -1; } if (lws_fi(&h->fic, "sspc_fake_rxparse_disconnect_me")) n = LWSSSSRET_DISCONNECT_ME; else if (lws_fi(&h->fic, "sspc_fake_rxparse_destroy_me")) n = LWSSSSRET_DESTROY_ME; else n = lws_ss_deserialize_parse(&h->parser, lws_get_context(wsi), h->dsh, in, len, &h->state, h, (lws_ss_handle_t **)m, &h->ssi, 1); switch (n) { case LWSSSSRET_OK: break; case LWSSSSRET_DISCONNECT_ME: lwsl_info("%s: proxlicent RX ended with DISCONNECT_ME\n", __func__); return -1; case LWSSSSRET_DESTROY_ME: lwsl_info("%s: proxlicent RX ended with DESTROY_ME\n", __func__); lws_set_opaque_user_data(wsi, NULL); lws_sspc_destroy(&h); return -1; } if (h->state == LPCSCLI_LOCAL_CONNECTED || h->state == LPCSCLI_ONWARD_CONNECT) lws_set_timeout(wsi, 0, 0); break; case LWS_CALLBACK_RAW_WRITEABLE: /* * We can transmit something to the proxy... */ if (!h) break; lwsl_sspc_debug(h, "WRITEABLE %s, state %d", wsi->lc.gutag, h->state); /* * Management of ss timeout can happen any time and doesn't * depend on wsi existence or state */ n = 0; cp = s; if (h->pending_timeout_update) { s[0] = LWSSS_SER_TXPRE_TIMEOUT_UPDATE; s[1] = 0; s[2] = 4; /* * 0: use policy timeout value * 0xffffffff: cancel the timeout */ lws_ser_wu32be(&s[3], h->timeout_ms); /* in case anything else to write */ lws_callback_on_writable(h->cwsi); h->pending_timeout_update = 0; n = 7; goto do_write; } s[1] = 0; /* * This is the state of the link that connects us to the onward * proxy */ switch (h->state) { case LPCSCLI_SENDING_INITIAL_TX: /* * We are negotating the opening of a particular * streamtype */ n = (int)strlen(h->ssi.streamtype) + 1 + 4 + 4; s[0] = LWSSS_SER_TXPRE_STREAMTYPE; lws_ser_wu16be(&s[1], (uint16_t)n); /* SSSv1: add protocol version byte (initially 1) */ s[3] = (uint8_t)LWS_SSS_CLIENT_PROTOCOL_VERSION; lws_ser_wu32be(&s[4], (uint32_t)getpid()); lws_ser_wu32be(&s[8], (uint32_t)h->txc.peer_tx_cr_est); //h->txcr_out = txc; lws_strncpy((char *)&s[12], h->ssi.streamtype, sizeof(s) - 12); n += 3; h->state = LPCSCLI_WAITING_CREATE_RESULT; break; case LPCSCLI_LOCAL_CONNECTED: // lwsl_notice("%s: LPCSCLI_LOCAL_CONNECTED\n", __func__); /* * Do we need to prioritize sending any metadata * changes? */ if (h->metadata_owner.count) { lws_sspc_metadata_t *md = lws_container_of( lws_dll2_get_tail(&h->metadata_owner), lws_sspc_metadata_t, list); pkt = lws_malloc(pktsize + LWS_PRE, __func__); if (!pkt) goto hangup; cp = p = pkt + LWS_PRE; end = p + pktsize; n = lws_sspc_serialize_metadata(h, md, p, end); if (n < 0) goto metadata_hangup; lwsl_sspc_debug(h, "(local_conn) metadata"); goto req_write_and_issue; } if (h->pending_writeable_len) { lwsl_sspc_debug(h, "(local_conn) PAYLOAD_LENGTH_HINT %u", (unsigned int)h->writeable_len); s[0] = LWSSS_SER_TXPRE_PAYLOAD_LENGTH_HINT; lws_ser_wu16be(&s[1], 4); lws_ser_wu32be(&s[3], (uint32_t)h->writeable_len); h->pending_writeable_len = 0; n = 7; goto req_write_and_issue; } if (h->conn_req_state >= LWSSSPC_ONW_ONGOING) { lwsl_sspc_info(h, "conn_req_state %d", h->conn_req_state); break; } lwsl_sspc_info(h, "(local_conn) onward connect"); h->conn_req_state = LWSSSPC_ONW_ONGOING; s[0] = LWSSS_SER_TXPRE_ONWARD_CONNECT; s[1] = 0; s[2] = 0; n = 3; break; case LPCSCLI_OPERATIONAL: /* * * - Do we need to prioritize sending any metadata * changes? (includes txcr updates) * * - Do we need to forward a hint about the payload * length? */ pkt = lws_malloc(pktsize + LWS_PRE, __func__); if (!pkt) goto hangup; cp = p = pkt + LWS_PRE; end = p + pktsize; if (h->metadata_owner.count) { lws_sspc_metadata_t *md = lws_container_of( lws_dll2_get_tail(&h->metadata_owner), lws_sspc_metadata_t, list); n = lws_sspc_serialize_metadata(h, md, p, end); if (n < 0) goto metadata_hangup; goto req_write_and_issue; } if (h->pending_writeable_len) { lwsl_sspc_info(h, "PAYLOAD_LENGTH_HINT %u", (unsigned int)h->writeable_len); s[0] = LWSSS_SER_TXPRE_PAYLOAD_LENGTH_HINT; lws_ser_wu16be(&s[1], 4); lws_ser_wu32be(&s[3], (uint32_t)h->writeable_len); h->pending_writeable_len = 0; n = 7; goto req_write_and_issue; } /* we can't write anything if we don't have credit */ if (!h->ignore_txc && h->txc.tx_cr <= 0) { lwsl_sspc_info(h, "WRITEABLE / OPERATIONAL:" " lack credit (%d)", h->txc.tx_cr); // break; } len = pktsize - LWS_PRE - 19; flags = 0; if (!h->ssi.tx) { n = 0; goto do_write_nz; } n = h->ssi.tx(m, h->ord++, pkt + LWS_PRE + 19, &len, &flags); switch (n) { case LWSSSSRET_TX_DONT_SEND: n = 0; goto do_write_nz; case LWSSSSRET_DISCONNECT_ME: case LWSSSSRET_DESTROY_ME: lwsl_notice("%s: sspc tx DISCONNECT/DESTROY unimplemented\n", __func__); break; default: break; } h->txc.tx_cr = h->txc.tx_cr - (int)len; cp = p; n = (int)(len + 19); us = lws_now_usecs(); p[0] = LWSSS_SER_TXPRE_TX_PAYLOAD; lws_ser_wu16be(&p[1], (uint16_t)(len + 19 - 3)); lws_ser_wu32be(&p[3], (uint32_t)flags); /* time spent here waiting to send this */ lws_ser_wu32be(&p[7], (uint32_t)(us - h->us_earliest_write_req)); /* ust that the client write happened */ lws_ser_wu64be(&p[11], (uint64_t)us); h->us_earliest_write_req = 0; if (flags & LWSSS_FLAG_EOM) if (h->rsidx + 1 < (int)LWS_ARRAY_SIZE(h->rideshare_ofs) && h->rideshare_ofs[h->rsidx + 1]) h->rsidx++; break; default: break; } do_write_nz: if (!n) break; do_write: if (lws_fi(&h->fic, "sspc_link_write_fail")) n = -1; else n = lws_write(wsi, (uint8_t *)cp, (unsigned int)n, LWS_WRITE_RAW); if (n < 0) { lwsl_sspc_notice(h, "WRITEABLE: %d", n); goto hangup; } break; default: break; } lws_free(pkt); return lws_callback_http_dummy(wsi, reason, user, in, len); metadata_hangup: lwsl_sspc_err(h, "metadata too large"); hangup: lws_free(pkt); lwsl_warn("hangup\n"); /* hang up on him */ return -1; req_write_and_issue: /* in case anything else to write */ lws_callback_on_writable(h->cwsi); goto do_write_nz; } const struct lws_protocols lws_sspc_protocols[] = { { "ssproxy-protocol", callback_sspc_client, 0, 2048, 2048, NULL, 0 }, { NULL, NULL, 0, 0, 0, NULL, 0 } }; int lws_sspc_create(struct lws_context *context, int tsi, const lws_ss_info_t *ssi, void *opaque_user_data, lws_sspc_handle_t **ppss, struct lws_sequencer *seq_owner, const char **ppayload_fmt) { lws_sspc_handle_t *h; uint8_t *ua; char *p; lws_service_assert_loop_thread(context, tsi); /* allocate the handle (including ssi), the user alloc, * and the streamname */ h = malloc(sizeof(lws_sspc_handle_t) + ssi->user_alloc + strlen(ssi->streamtype) + 1); if (!h) return 1; memset(h, 0, sizeof(*h)); h->lc.log_cx = context->log_cx; #if defined(LWS_WITH_SYS_FAULT_INJECTION) h->fic.name = "sspc"; lws_xos_init(&h->fic.xos, lws_xos(&context->fic.xos)); if (ssi->fic.fi_owner.count) lws_fi_import(&h->fic, &ssi->fic); lws_fi_inherit_copy(&h->fic, &context->fic, "ss", ssi->streamtype); #endif if (lws_fi(&h->fic, "sspc_create_oom")) { /* * We have to do this a litte later, so we can cleanly inherit * the OOM pieces and drain the info fic */ lws_fi_destroy(&h->fic); free(h); return 1; } __lws_lc_tag(context, &context->lcg[LWSLCG_SSP_CLIENT], &h->lc, ssi->streamtype); memcpy(&h->ssi, ssi, sizeof(*ssi)); ua = (uint8_t *)(h + 1); memset(ua, 0, ssi->user_alloc); p = (char *)ua + ssi->user_alloc; memcpy(p, ssi->streamtype, strlen(ssi->streamtype) + 1); h->ssi.streamtype = (const char *)p; h->context = context; h->us_start_upstream = lws_now_usecs(); if (!ssi->manual_initial_tx_credit) h->txc.peer_tx_cr_est = 500000000; else h->txc.peer_tx_cr_est = ssi->manual_initial_tx_credit; if (!strcmp(ssi->streamtype, LWS_SMD_STREAMTYPENAME)) h->ignore_txc = 1; lws_dll2_add_head(&h->client_list, &context->pt[tsi].ss_client_owner); /* fill in the things the real api does for the caller */ *((void **)(ua + ssi->opaque_user_data_offset)) = opaque_user_data; *((void **)(ua + ssi->handle_offset)) = h; if (ppss) *ppss = h; /* try the actual connect */ lws_sspc_sul_retry_cb(&h->sul_retry); return 0; } /* used on context destroy when iterating listed lws_ss on a pt */ int lws_sspc_destroy_dll(struct lws_dll2 *d, void *user) { lws_sspc_handle_t *h = lws_container_of(d, lws_sspc_handle_t, client_list); lws_sspc_destroy(&h); return 0; } void lws_sspc_rxmetadata_destroy(lws_sspc_handle_t *h) { lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, lws_dll2_get_head(&h->metadata_owner_rx)) { lws_sspc_metadata_t *md = lws_container_of(d, lws_sspc_metadata_t, list); lws_dll2_remove(&md->list); lws_free(md); } lws_end_foreach_dll_safe(d, d1); } void lws_sspc_destroy(lws_sspc_handle_t **ph) { lws_sspc_handle_t *h; if (!*ph) return; h = *ph; if (h == h->h_in_svc) { lwsl_err("%s: illegal destroy, return LWSSSSRET_DESTROY_ME instead\n", __func__); assert(0); return; } lws_service_assert_loop_thread(h->context, 0); if (h->destroying) return; h->destroying = 1; /* if this caliper is still dangling at destroy, we failed */ #if defined(LWS_WITH_SYS_METRICS) /* * If any hanging caliper measurement, dump it, and free any tags */ lws_metrics_caliper_report_hist(h->cal_txn, (struct lws *)NULL); #endif if (h->ss_dangling_connected && h->ssi.state) { lws_sspc_event_helper(h, LWSSSCS_DISCONNECTED, 0); h->ss_dangling_connected = 0; } #if defined(LWS_WITH_SYS_FAULT_INJECTION) lws_fi_destroy(&h->fic); #endif lws_sul_cancel(&h->sul_retry); lws_dll2_remove(&h->client_list); if (h->dsh) lws_dsh_destroy(&h->dsh); if (h->cwsi) { lws_set_opaque_user_data(h->cwsi, NULL); lws_wsi_close(h->cwsi, LWS_TO_KILL_ASYNC); h->cwsi = NULL; } /* clean out any pending metadata changes that didn't make it */ lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, lws_dll2_get_head(&(*ph)->metadata_owner)) { lws_sspc_metadata_t *md = lws_container_of(d, lws_sspc_metadata_t, list); lws_dll2_remove(&md->list); lws_free(md); } lws_end_foreach_dll_safe(d, d1); lws_sspc_rxmetadata_destroy(h); lws_sspc_event_helper(h, LWSSSCS_DESTROYING, 0); *ph = NULL; lws_sul_cancel(&h->sul_retry); /* confirm no sul left scheduled in handle or user allocation object */ lws_sul_debug_zombies(h->context, h, sizeof(*h) + h->ssi.user_alloc, __func__); __lws_lc_untag(h->context, &h->lc); free(h); } lws_ss_state_return_t lws_sspc_request_tx(lws_sspc_handle_t *h) { if (!h || !h->cwsi) return LWSSSSRET_OK; lws_service_assert_loop_thread(h->context, 0); if (!h->us_earliest_write_req) h->us_earliest_write_req = lws_now_usecs(); if (h->state == LPCSCLI_LOCAL_CONNECTED && h->conn_req_state == LWSSSPC_ONW_NONE) h->conn_req_state = LWSSSPC_ONW_REQ; lws_callback_on_writable(h->cwsi); return LWSSSSRET_OK; } /* * Currently we fulfil the writeable part locally by just enabling POLLOUT on * the UDS link, without serialization footprint, which is reasonable as far as * it goes. * * But for the ..._len() variant, the expected payload length hint we are being * told is something that must be serialized to the onward peer, since either * that guy or someone upstream of him is the guy who will compose the framing * with it that actually goes out. * * This information is needed at the upstream guy before we have sent any * payload, eg, for http POST, he has to prepare the content-length in the * headers, before any payload. So we have to issue a serialization of the * length at this point. */ lws_ss_state_return_t lws_sspc_request_tx_len(lws_sspc_handle_t *h, unsigned long len) { /* * for client conns, they cannot even complete creation of the handle * without the onwared connection to the proxy, it's not legal to start * using it until it's operation and has the onward connection (and the * link has called CREATED state) */ if (!h) return LWSSSSRET_OK; lws_service_assert_loop_thread(h->context, 0); lwsl_sspc_notice(h, "setting writeable_len %u", (unsigned int)len); h->writeable_len = len; h->pending_writeable_len = 1; if (!h->us_earliest_write_req) h->us_earliest_write_req = lws_now_usecs(); if (h->state == LPCSCLI_LOCAL_CONNECTED && h->conn_req_state == LWSSSPC_ONW_NONE) h->conn_req_state = LWSSSPC_ONW_REQ; /* * We're going to use this up with serializing h->writeable_len... that * will request again. */ if (h->cwsi) lws_callback_on_writable(h->cwsi); return LWSSSSRET_OK; } int lws_sspc_client_connect(lws_sspc_handle_t *h) { if (!h || h->state == LPCSCLI_OPERATIONAL) return 0; lws_service_assert_loop_thread(h->context, 0); assert(h->state == LPCSCLI_LOCAL_CONNECTED); if (h->state == LPCSCLI_LOCAL_CONNECTED && h->conn_req_state == LWSSSPC_ONW_NONE) h->conn_req_state = LWSSSPC_ONW_REQ; if (h->cwsi) lws_callback_on_writable(h->cwsi); return 0; } struct lws_context * lws_sspc_get_context(struct lws_sspc_handle *h) { return h->context; } const char * lws_sspc_rideshare(struct lws_sspc_handle *h) { /* * ...the serialized RX rideshare name if any... */ if (h->parser.rideshare[0]) { lwsl_sspc_info(h, "parser %s", h->parser.rideshare); return h->parser.rideshare; } /* * The tx rideshare index */ if (h->rideshare_list[0]) { lwsl_sspc_info(h, "tx list %s", &h->rideshare_list[h->rideshare_ofs[h->rsidx]]); return &h->rideshare_list[h->rideshare_ofs[h->rsidx]]; } /* * ... otherwise default to our stream type name */ lwsl_sspc_info(h, "def %s\n", h->ssi.streamtype); return h->ssi.streamtype; } static int _lws_sspc_set_metadata(struct lws_sspc_handle *h, const char *name, const void *value, size_t len, int tx_cr_adjust) { lws_sspc_metadata_t *md; lws_service_assert_loop_thread(h->context, 0); /* * Are we replacing a pending metadata of the same name? It's not * efficient to do this but user code can do what it likes... let's * optimize away the old one. * * Tx credit adjust always has name "" */ lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, lws_dll2_get_head(&h->metadata_owner)) { md = lws_container_of(d, lws_sspc_metadata_t, list); if (!strcmp(name, md->name)) { lws_dll2_remove(&md->list); lws_free(md); break; } } lws_end_foreach_dll_safe(d, d1); /* * We have to stash the metadata and pass it to the proxy */ if (lws_fi(&h->fic, "sspc_fail_metadata_set")) md = NULL; else md = lws_malloc(sizeof(*md) + len, "set metadata"); if (!md) { lwsl_sspc_err(h, "OOM"); return 1; } memset(md, 0, sizeof(*md)); md->tx_cr_adjust = tx_cr_adjust; h->txc.peer_tx_cr_est += tx_cr_adjust; lws_strncpy(md->name, name, sizeof(md->name)); md->len = len; if (len) memcpy(&md[1], value, len); lws_dll2_add_tail(&md->list, &h->metadata_owner); if (len) { lwsl_sspc_info(h, "set metadata %s", name); lwsl_hexdump_sspc_info(h, value, len); } else lwsl_sspc_info(h, "serializing tx cr adj %d", (int)tx_cr_adjust); if (h->cwsi) lws_callback_on_writable(h->cwsi); return 0; } int lws_sspc_set_metadata(struct lws_sspc_handle *h, const char *name, const void *value, size_t len) { return _lws_sspc_set_metadata(h, name, value, len, 0); } int lws_sspc_get_metadata(struct lws_sspc_handle *h, const char *name, const void **value, size_t *len) { lws_sspc_metadata_t *md; /* * client side does not have access to policy * and any metadata are new to it each time, * we allocate them, removing any existing with * the same name first */ lws_service_assert_loop_thread(h->context, 0); lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, lws_dll2_get_head(&h->metadata_owner_rx)) { md = lws_container_of(d, lws_sspc_metadata_t, list); if (!strcmp(md->name, name)) { *len = md->len; *value = &md[1]; return 0; } } lws_end_foreach_dll_safe(d, d1); return 1; } int lws_sspc_add_peer_tx_credit(struct lws_sspc_handle *h, int32_t bump) { lws_service_assert_loop_thread(h->context, 0); lwsl_sspc_notice(h, "%d\n", bump); return _lws_sspc_set_metadata(h, "", NULL, 0, (int)bump); } int lws_sspc_get_est_peer_tx_credit(struct lws_sspc_handle *h) { lws_service_assert_loop_thread(h->context, 0); return h->txc.peer_tx_cr_est; } void lws_sspc_start_timeout(struct lws_sspc_handle *h, unsigned int timeout_ms) { lws_service_assert_loop_thread(h->context, 0); if (!h->cwsi) /* we can't fulfil it */ return; h->timeout_ms = (uint32_t)timeout_ms; h->pending_timeout_update = 1; lws_callback_on_writable(h->cwsi); } void lws_sspc_cancel_timeout(struct lws_sspc_handle *h) { lws_sspc_start_timeout(h, (unsigned int)-1); } void * lws_sspc_to_user_object(struct lws_sspc_handle *h) { return (void *)(h + 1); } void lws_sspc_change_handlers(struct lws_sspc_handle *h, lws_ss_state_return_t (*rx)(void *userobj, const uint8_t *buf, size_t len, int flags), lws_ss_state_return_t (*tx)(void *userobj, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len, int *flags), lws_ss_state_return_t (*state)(void *userobj, void *h_src /* ss handle type */, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack)) { if (rx) h->ssi.rx = rx; if (tx) h->ssi.tx = tx; if (state) h->ssi.state = state; } const char * lws_sspc_tag(struct lws_sspc_handle *h) { if (!h) return "[null sspc]"; return lws_lc_tag(&h->lc); } int lws_sspc_cancel_notify_dll(struct lws_dll2 *d, void *user) { lws_sspc_handle_t *h = lws_container_of(d, lws_sspc_handle_t, client_list); lws_sspc_event_helper(h, LWSSSCS_EVENT_WAIT_CANCELLED, 0); return 0; } libwebsockets-4.3.5/lib/secure-streams/secure-streams-process.c000066400000000000000000000472601476025525100246750ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2019 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * * When the user code is in a different process, a non-tls unix domain socket * proxy is used to asynchronusly transfer buffers in each direction via the * network stack, without explicit IPC * * user_process{ [user code] | shim | socket-}------ lws_process{ lws } * * Lws exposes a listening unix domain socket in this case, the user processes * connect to it and pass just info.streamtype in an initial tx packet. All * packets are prepended by a 1-byte type field when used in this mode. See * lws-secure-streams.h for documentation and definitions. * * Proxying in either direction can face the situation it cannot send the onward * packet immediately and is subject to separating the write request from the * write action. To make the best use of memory, a single preallocated buffer * stashes pending packets in all four directions (c->p, p->c, p->ss, ss->p). * This allows it to adapt to different traffic patterns without wasted areas * dedicated to traffic that isn't coming in a particular application. * * A shim is provided to monitor the process' unix domain socket and regenerate * the secure sockets api there with callbacks happening in the process thread * context. * * This file implements the listening unix domain socket proxy... this code is * only going to run on a Linux-class device with its implications about memory * availability. */ #include struct raw_pss { struct conn *conn; }; /* * Proxy - onward secure-stream handler */ typedef struct ss_proxy_onward { lws_ss_handle_t *ss; struct conn *conn; } ss_proxy_t; void lws_proxy_clean_conn_ss(struct lws *wsi) { #if 0 lws_ss_handle_t *h = (lws_ss_handle_t *)wsi->a.opaque_user_data; struct conn *conn = h->conn_if_sspc_onw; if (!wsi) return; if (conn && conn->ss) conn->ss->wsi = NULL; #endif } void ss_proxy_onward_link_req_writeable(lws_ss_handle_t *h_onward) { ss_proxy_t *m = (ss_proxy_t *)&h_onward[1]; if (m->conn->wsi) /* if possible, request client conn write */ lws_callback_on_writable(m->conn->wsi); } int __lws_ss_proxy_bind_ss_to_conn_wsi(void *parconn, size_t dsh_size) { struct conn *conn = (struct conn *)parconn; struct lws_context_per_thread *pt; if (!conn || !conn->wsi || !conn->ss) return -1; pt = &conn->wsi->a.context->pt[(int)conn->wsi->tsi]; if (lws_fi(&conn->ss->fic, "ssproxy_dsh_create_oom")) return -1; conn->dsh = lws_dsh_create(&pt->ss_dsh_owner, dsh_size, 2); if (!conn->dsh) return -1; __lws_lc_tag_append(&conn->wsi->lc, lws_ss_tag(conn->ss)); return 0; } /* Onward secure streams payload interface */ static lws_ss_state_return_t ss_proxy_onward_rx(void *userobj, const uint8_t *buf, size_t len, int flags) { ss_proxy_t *m = (ss_proxy_t *)userobj; const char *rsp = NULL; int n; // lwsl_notice("%s: len %d\n", __func__, (int)len); /* * The onward secure stream connection has received something. */ if (m->ss->rideshare != m->ss->policy && m->ss->rideshare) { rsp = m->ss->rideshare->streamtype; flags |= LWSSS_FLAG_RIDESHARE; } /* * Apply SSS framing around this chunk of RX and stash it in the dsh * in ss -> proxy [ -> client] direction. This can fail... */ if (lws_fi(&m->ss->fic, "ssproxy_dsh_rx_queue_oom")) n = 1; else n = lws_ss_serialize_rx_payload(m->conn->dsh, buf, len, flags, rsp); if (n) /* * We couldn't buffer this rx, eg due to OOM, let's escalate it * to be a "loss of connection", which it basically is... */ return LWSSSSRET_DISCONNECT_ME; /* * Manage rx flow on the SS (onward) side according to our situation * in the dsh holding proxy->client serialized forwarding rx */ if (!m->conn->onward_in_flow_control && m->ss->wsi && m->ss->policy->proxy_buflen_rxflow_on_above && lws_dsh_get_size(m->conn->dsh, KIND_SS_TO_P) >= m->ss->policy->proxy_buflen_rxflow_on_above) { lwsl_info("%s: %s: rxflow disabling rx (%lu / %lu, hwm %lu)\n", __func__, lws_wsi_tag(m->ss->wsi), (unsigned long)lws_dsh_get_size(m->conn->dsh, KIND_SS_TO_P), (unsigned long)m->ss->policy->proxy_buflen, (unsigned long)m->ss->policy->proxy_buflen_rxflow_on_above); /* * stop taking in rx once the onward wsi rx is above the * high water mark */ lws_rx_flow_control(m->ss->wsi, 0); m->conn->onward_in_flow_control = 1; } if (m->conn->wsi) /* if possible, request client conn write */ lws_callback_on_writable(m->conn->wsi); return LWSSSSRET_OK; } /* * we are transmitting buffered payload originally from the client on to the ss */ static lws_ss_state_return_t ss_proxy_onward_tx(void *userobj, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len, int *flags) { ss_proxy_t *m = (ss_proxy_t *)userobj; void *p; size_t si; if (!m->conn->ss || m->conn->state != LPCSPROX_OPERATIONAL) { lwsl_notice("%s: ss not ready\n", __func__); *len = 0; return LWSSSSRET_TX_DONT_SEND; } /* * The onward secure stream says that we could send something to it * (by putting it in buf, and setting *len and *flags)... dredge the * next thing out of the dsh */ if (lws_ss_deserialize_tx_payload(m->conn->dsh, m->ss->wsi, ord, buf, len, flags)) return LWSSSSRET_TX_DONT_SEND; /* ... there's more we want to send? */ if (!lws_dsh_get_head(m->conn->dsh, KIND_C_TO_P, (void **)&p, &si)) _lws_ss_request_tx(m->conn->ss); if (!*len && !*flags) /* we don't actually want to send anything */ return LWSSSSRET_TX_DONT_SEND; lwsl_info("%s: onward tx %d fl 0x%x\n", __func__, (int)*len, *flags); #if 0 { int ff = open("/tmp/z", O_RDWR | O_CREAT | O_APPEND, 0666); if (ff == -1) lwsl_err("%s: errno %d\n", __func__, errno); write(ff, buf, *len); close(ff); } #endif return LWSSSSRET_OK; } static lws_ss_state_return_t ss_proxy_onward_state(void *userobj, void *sh, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { ss_proxy_t *m = (ss_proxy_t *)userobj; size_t dsh_size; switch (state) { case LWSSSCS_CREATING: /* * conn is private to -process.c, call thru to a) adjust * the accepted incoming proxy link wsi tag name to be * appended with the onward ss tag information now we * have it, and b) allocate the dsh buffer now we * can find out the policy about it for the streamtype. */ dsh_size = m->ss->policy->proxy_buflen ? m->ss->policy->proxy_buflen : 32768; lwsl_notice("%s: %s: initializing dsh max len %lu\n", __func__, lws_ss_tag(m->ss), (unsigned long)dsh_size); /* this includes ssproxy_dsh_create_oom fault generation */ if (__lws_ss_proxy_bind_ss_to_conn_wsi(m->conn, dsh_size)) { /* failed to allocate the dsh */ lwsl_notice("%s: dsh init failed\n", __func__); return LWSSSSRET_DESTROY_ME; } break; case LWSSSCS_DESTROYING: if (!m->conn) break; if (!m->conn->wsi) { /* * Our onward secure stream is closing and our client * connection has already gone away... destroy the conn. */ lwsl_info("%s: Destroying conn\n", __func__); lws_dsh_destroy(&m->conn->dsh); free(m->conn); m->conn = NULL; return 0; } else lwsl_info("%s: ss DESTROYING, wsi up\n", __func__); break; default: break; } if (!m->conn) { lwsl_warn("%s: dropping state due to conn not up\n", __func__); return LWSSSSRET_OK; } if (lws_ss_serialize_state(m->conn->wsi, m->conn->dsh, state, ack)) /* * Failed to alloc state packet that we want to send in dsh, * we will lose coherence and have to disconnect the link */ return LWSSSSRET_DISCONNECT_ME; if (m->conn->wsi) /* if possible, request client conn write */ lws_callback_on_writable(m->conn->wsi); return LWSSSSRET_OK; } void ss_proxy_onward_txcr(void *userobj, int bump) { ss_proxy_t *m = (ss_proxy_t *)userobj; if (!m->conn) return; lws_ss_serialize_txcr(m->conn->dsh, bump); if (m->conn->wsi) /* if possible, request client conn write */ lws_callback_on_writable(m->conn->wsi); } /* * Client <-> Proxy connection, usually on Unix Domain Socket */ static int callback_ss_proxy(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct raw_pss *pss = (struct raw_pss *)user; const lws_ss_policy_t *rsp; struct conn *conn = NULL; lws_ss_metadata_t *md; lws_ss_info_t ssi; const uint8_t *cp; char s[512]; uint8_t *p; size_t si; char pay; int n; if (pss) conn = pss->conn; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: break; case LWS_CALLBACK_PROTOCOL_DESTROY: break; /* callbacks related to raw socket descriptor "accepted side" */ case LWS_CALLBACK_RAW_ADOPT: lwsl_info("LWS_CALLBACK_RAW_ADOPT\n"); if (!pss) return -1; if (lws_fi(&wsi->fic, "ssproxy_client_adopt_oom")) pss->conn = NULL; else pss->conn = malloc(sizeof(struct conn)); if (!pss->conn) return -1; memset(pss->conn, 0, sizeof(*pss->conn)); /* dsh is allocated when the onward ss is done */ pss->conn->wsi = wsi; wsi->bound_ss_proxy_conn = 1; /* opaque is conn */ pss->conn->state = LPCSPROX_WAIT_INITIAL_TX; /* * Client is expected to follow the unix domain socket * acceptance up rapidly with an initial tx containing the * streamtype name. We can't create the stream until then. */ lws_set_timeout(wsi, PENDING_TIMEOUT_AWAITING_CLIENT_HS_SEND, 3); break; case LWS_CALLBACK_RAW_CLOSE: lwsl_info("LWS_CALLBACK_RAW_CLOSE:\n"); if (!conn) break; /* * the client unix domain socket connection (wsi / conn->wsi) * has closed... eg, client has exited or otherwise has * definitively finished with the proxying and onward connection * * But right now, the SS and possibly the SS onward wsi are * still live... */ assert(conn->wsi == wsi); conn->wsi = NULL; lwsl_notice("%s: cli->prox link %s closing\n", __func__, lws_wsi_tag(wsi)); /* sever relationship with conn */ lws_set_opaque_user_data(wsi, NULL); /* * The current wsi is decoupled from the pss / conn and * the conn no longer has a pointer on it. * * If there's an outgoing, proxied SS conn on our behalf, we * have to destroy those */ if (conn->ss) { struct lws *cw = conn->ss->wsi; /* * conn->ss is the onward connection SS */ lwsl_info("%s: destroying %s, wsi %s\n", __func__, lws_ss_tag(conn->ss), lws_wsi_tag(conn->ss->wsi)); /* sever conn relationship with ss about to be deleted */ conn->ss->wsi = NULL; if (cw && wsi != cw) { /* disconnect onward SS from its wsi */ lws_set_opaque_user_data(cw, NULL); /* * The wsi doing the onward connection can no * longer relate to the conn... otherwise when * he gets callbacks he wants to bind to * the ss we are about to delete */ lws_wsi_close(cw, LWS_TO_KILL_ASYNC); } lws_ss_destroy(&conn->ss); /* * Conn may have gone, at ss destroy handler in * ssi.state for proxied ss */ break; } if (conn->state == LPCSPROX_DESTROYED || !conn->ss) { /* * There's no onward secure stream and our client * connection is closing. Destroy the conn. */ lws_dsh_destroy(&conn->dsh); free(conn); pss->conn = NULL; } else lwsl_debug("%s: CLOSE; %s\n", __func__, lws_ss_tag(conn->ss)); break; case LWS_CALLBACK_RAW_RX: /* * ie, the proxy is receiving something from a client */ lwsl_info("%s: RX: rx %d\n", __func__, (int)len); if (!conn || !conn->wsi) { lwsl_err("%s: rx with bad conn state\n", __func__); return -1; } // lwsl_hexdump_info(in, len); if (conn->state == LPCSPROX_WAIT_INITIAL_TX) { memset(&ssi, 0, sizeof(ssi)); ssi.user_alloc = sizeof(ss_proxy_t); ssi.handle_offset = offsetof(ss_proxy_t, ss); ssi.opaque_user_data_offset = offsetof(ss_proxy_t, conn); ssi.rx = ss_proxy_onward_rx; ssi.tx = ss_proxy_onward_tx; } ssi.state = ss_proxy_onward_state; ssi.flags = 0; // coverity[uninit_use_in_call] n = lws_ss_deserialize_parse(&conn->parser, lws_get_context(wsi), conn->dsh, in, len, &conn->state, conn, &conn->ss, &ssi, 0); switch (n) { case LWSSSSRET_OK: break; case LWSSSSRET_DISCONNECT_ME: return -1; case LWSSSSRET_DESTROY_ME: if (conn->ss) lws_ss_destroy(&conn->ss); return -1; } if (conn->state == LPCSPROX_REPORTING_FAIL || conn->state == LPCSPROX_REPORTING_OK) lws_callback_on_writable(conn->wsi); break; case LWS_CALLBACK_RAW_WRITEABLE: lwsl_debug("%s: %s: LWS_CALLBACK_RAW_WRITEABLE, state 0x%x\n", __func__, lws_wsi_tag(wsi), lwsi_state(wsi)); /* * We can transmit something back to the client from the dsh * of stuff we received on its behalf from the ss */ if (!conn || !conn->wsi) break; n = 0; pay = 0; s[3] = 0; cp = (const uint8_t *)s; switch (conn->state) { case LPCSPROX_REPORTING_FAIL: s[3] = 1; /* fallthru */ case LPCSPROX_REPORTING_OK: s[0] = LWSSS_SER_RXPRE_CREATE_RESULT; s[1] = 0; s[2] = 1; n = 8; lws_ser_wu32be((uint8_t *)&s[4], conn->ss && conn->ss->policy ? conn->ss->policy->client_buflen : 0); /* * If there's rideshare sequencing, it's added after the * first 4 bytes or the create result, comma-separated */ if (conn->ss) { rsp = conn->ss->policy; while (rsp) { if (n != 4 && n < (int)sizeof(s) - 2) s[n++] = ','; n += lws_snprintf(&s[n], sizeof(s) - (unsigned int)n, "%s", rsp->streamtype); rsp = lws_ss_policy_lookup(wsi->a.context, rsp->rideshare_streamtype); } } s[2] = (char)(n - 3); conn->state = LPCSPROX_OPERATIONAL; lws_set_timeout(wsi, 0, 0); break; case LPCSPROX_OPERATIONAL: /* * returning [onward -> ] proxy]-> client * rx metadata has priority 1 */ md = conn->ss->metadata; while (md) { // lwsl_notice("%s: check %s: %d\n", __func__, // md->name, md->pending_onward); if (md->pending_onward) { size_t naml = strlen(md->name); // lwsl_notice("%s: proxy issuing rxmd\n", __func__); if (4 + naml + md->length > sizeof(s)) { lwsl_err("%s: rxmdata too big\n", __func__); goto hangup; } md->pending_onward = 0; p = (uint8_t *)s; p[0] = LWSSS_SER_RXPRE_METADATA; lws_ser_wu16be(&p[1], (uint16_t)(1 + naml + md->length)); p[3] = (uint8_t)naml; memcpy(&p[4], md->name, naml); p += 4 + naml; memcpy(p, md->value__may_own_heap, md->length); p += md->length; n = lws_ptr_diff(p, cp); goto again; } md = md->next; } /* * If we have performance data, render it in JSON * and send that in LWSSS_SER_RXPRE_PERF has * priority 2 */ #if defined(LWS_WITH_CONMON) if (conn->ss->conmon_json) { unsigned int xlen = conn->ss->conmon_len; if (xlen > sizeof(s) - 3) xlen = sizeof(s) - 3; cp = (uint8_t *)s; p = (uint8_t *)s; p[0] = LWSSS_SER_RXPRE_PERF; lws_ser_wu16be(&p[1], (uint16_t)xlen); memcpy(&p[3], conn->ss->conmon_json, xlen); lws_free_set_NULL(conn->ss->conmon_json); n = (int)(xlen + 3); pay = 0; goto again; } #endif /* * if no fresh rx metadata, just pass through incoming * dsh */ if (lws_dsh_get_head(conn->dsh, KIND_SS_TO_P, (void **)&p, &si)) break; cp = p; #if 0 if (cp[0] == LWSSS_SER_RXPRE_RX_PAYLOAD && wsi->a.context->detailed_latency_cb) { /* * we're fulfilling rx that came in on ss * by sending it back out to the client on * the Unix Domain Socket * * + 7 u32 write will compute latency here... * + 11 u32 ust we received from ss * * lws_write will report it and fill in * LAT_DUR_PROXY_CLIENT_REQ_TO_WRITE */ us = lws_now_usecs(); lws_ser_wu32be(&p[7], us - lws_ser_ru64be(&p[11])); lws_ser_wu64be(&p[11], us); wsi->detlat.acc_size = wsi->detlat.req_size = si - 19; /* time proxy held it */ wsi->detlat.latencies[ LAT_DUR_PROXY_RX_TO_ONWARD_TX] = lws_ser_ru32be(&p[7]); } #endif pay = 1; n = (int)si; break; default: break; } again: if (!n) break; if (lws_fi(&wsi->fic, "ssproxy_client_write_fail")) n = -1; else n = lws_write(wsi, (uint8_t *)cp, (unsigned int)n, LWS_WRITE_RAW); if (n < 0) { lwsl_info("%s: WRITEABLE: %d\n", __func__, n); goto hangup; } switch (conn->state) { case LPCSPROX_REPORTING_FAIL: goto hangup; case LPCSPROX_OPERATIONAL: if (!conn) break; if (pay) { lws_dsh_free((void **)&p); /* * Did we go below the rx flow threshold for * this dsh? */ if (conn->onward_in_flow_control && conn->ss->policy->proxy_buflen_rxflow_on_above && conn->ss->wsi && lws_dsh_get_size(conn->dsh, KIND_SS_TO_P) < conn->ss->policy->proxy_buflen_rxflow_off_below) { lwsl_info("%s: %s: rxflow enabling rx (%lu / %lu, lwm %lu)\n", __func__, lws_wsi_tag(conn->ss->wsi), (unsigned long)lws_dsh_get_size(conn->dsh, KIND_SS_TO_P), (unsigned long)conn->ss->policy->proxy_buflen, (unsigned long)conn->ss->policy->proxy_buflen_rxflow_off_below); /* * Resume receiving taking in rx once * below the low threshold */ lws_rx_flow_control(conn->ss->wsi, LWS_RXFLOW_ALLOW); conn->onward_in_flow_control = 0; } } if (!lws_dsh_get_head(conn->dsh, KIND_SS_TO_P, (void **)&p, &si)) { if (!lws_send_pipe_choked(wsi)) { cp = p; pay = 1; n = (int)si; goto again; } lws_callback_on_writable(wsi); } break; default: break; } break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); hangup: /* hang up on him */ return -1; } static const struct lws_protocols protocols[] = { { "ssproxy-protocol", callback_ss_proxy, sizeof(struct raw_pss), 2048, 2048, NULL, 0 }, { NULL, NULL, 0, 0, 0, NULL, 0 } }; /* * called from create_context() */ int lws_ss_proxy_create(struct lws_context *context, const char *bind, int port) { struct lws_context_creation_info info; memset(&info, 0, sizeof(info)); info.vhost_name = "ssproxy"; info.options = LWS_SERVER_OPTION_ADOPT_APPLY_LISTEN_ACCEPT_CONFIG | LWS_SERVER_OPTION_SS_PROXY; info.port = port; if (!port) { if (!bind) #if defined(__linux__) bind = "@proxy.ss.lws"; #else bind = "/tmp/proxy.ss.lws"; #endif info.options |= LWS_SERVER_OPTION_UNIX_SOCK; } info.iface = bind; #if defined(__linux__) info.unix_socket_perms = "root:root"; #else #endif info.listen_accept_role = "raw-skt"; info.listen_accept_protocol = "ssproxy-protocol"; info.protocols = protocols; if (!lws_create_vhost(context, &info)) { lwsl_err("%s: Failed to create ss proxy vhost\n", __func__); return 1; } return 0; } libwebsockets-4.3.5/lib/secure-streams/secure-streams-serialize.c000066400000000000000000001060261476025525100252020ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2019 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * * In the case Secure Streams protocol needs to pass through a buffer, * or a streamed connection, the protocol metadata must be serialized. This * file provides internal apis to perform the serialization and deserialization * in and out of an lws_dsh fifo-type buffer. */ #include typedef enum { RPAR_TYPE, RPAR_LEN_MSB, RPAR_LEN_LSB, RPAR_FLAG_B3, RPAR_FLAG_B2, RPAR_FLAG_B1, RPAR_FLAG_B0, RPAR_LATA3, RPAR_LATA2, RPAR_LATA1, RPAR_LATA0, RPAR_LATB7, RPAR_LATB6, RPAR_LATB5, RPAR_LATB4, RPAR_LATB3, RPAR_LATB2, RPAR_LATB1, RPAR_LATB0, RPAR_RIDESHARE_LEN, RPAR_RIDESHARE, RPAR_PERF, RPAR_RESULT_CREATION_DSH, RPAR_RESULT_CREATION_RIDESHARE, RPAR_METADATA_NAMELEN, RPAR_METADATA_NAME, RPAR_METADATA_VALUE, RPAR_PAYLOAD, RPAR_RX_TXCR_UPDATE, RPAR_STREAMTYPE, RPAR_INIT_PROVERS, RPAR_INIT_PID, RPAR_INITTXC0, RPAR_TXCR0, RPAR_TIMEOUT0, RPAR_PAYLEN0, RPAR_RESULT_CREATION, RPAR_STATEINDEX, RPAR_ORD3, RPAR_ORD2, RPAR_ORD1, RPAR_ORD0, } rx_parser_t; #if defined(_DEBUG) && !defined(LWS_WITH_NO_LOGS) static const char *sn[] = { "unset", "LPCSPROX_WAIT_INITIAL_TX", "LPCSPROX_REPORTING_FAIL", "LPCSPROX_REPORTING_OK", "LPCSPROX_OPERATIONAL", "LPCSPROX_DESTROYED", "LPCSCLI_SENDING_INITIAL_TX", "LPCSCLI_WAITING_CREATE_RESULT", "LPCSCLI_LOCAL_CONNECTED", "LPCSCLI_ONWARD_CONNECT", "LPCSCLI_OPERATIONAL", }; #endif struct lws_log_cx * lwsl_sspc_get_cx(struct lws_sspc_handle *sspc) { if (!sspc) return NULL; return sspc->lc.log_cx; } void lws_log_prepend_sspc(struct lws_log_cx *cx, void *obj, char **p, char *e) { struct lws_sspc_handle *h = (struct lws_sspc_handle *)obj; *p += lws_snprintf(*p, lws_ptr_diff_size_t(e, (*p)), "%s: ", lws_sspc_tag(h)); } static void lws_ss_serialize_state_transition(lws_sspc_handle_t *h, lws_ss_conn_states_t *state, int new_state) { #if defined(_DEBUG) lwsl_sspc_info(h, "%s -> %s", sn[*state], sn[new_state]); #endif *state = (lws_ss_conn_states_t)new_state; } /* * event loop received something and is queueing it for the foreign side of * the dsh to consume later as serialized rx */ int lws_ss_serialize_rx_payload(struct lws_dsh *dsh, const uint8_t *buf, size_t len, int flags, const char *rsp) { lws_usec_t us = lws_now_usecs(); uint8_t pre[128]; int est = 19, l = 0; if (flags & LWSSS_FLAG_RIDESHARE) { /* * We should have the rideshare name if we have been told it's * on a non-default rideshare */ assert(rsp); if (!rsp) return 1; l = (int)strlen(rsp); est += 1 + l; } else assert(!rsp); // lwsl_user("%s: len %d, flags: %d\n", __func__, (int)len, flags); // lwsl_hexdump_info(buf, len); pre[0] = LWSSS_SER_RXPRE_RX_PAYLOAD; lws_ser_wu16be(&pre[1], (uint16_t)(len + (size_t)est - 3)); lws_ser_wu32be(&pre[3], (uint32_t)flags); lws_ser_wu32be(&pre[7], 0); /* write will compute latency here... */ lws_ser_wu64be(&pre[11], (uint64_t)us); /* ... and set this to the write time */ /* * If we are on a non-default rideshare, append the non-default name to * the headers of the payload part, 1-byte length first */ if (flags & LWSSS_FLAG_RIDESHARE) { pre[19] = (uint8_t)l; memcpy(&pre[20], rsp, (unsigned int)l); } if (lws_dsh_alloc_tail(dsh, KIND_SS_TO_P, pre, (unsigned int)est, buf, len)) { lwsl_err("%s: unable to alloc in dsh 1\n", __func__); return 1; } return 0; } /* * event loop is consuming dsh-buffered, already-serialized tx from the * foreign side */ int lws_ss_deserialize_tx_payload(struct lws_dsh *dsh, struct lws *wsi, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len, int *flags) { uint8_t *p; size_t si; if (lws_dsh_get_head(dsh, KIND_C_TO_P, (void **)&p, &si)) { *len = 0; return 0; } /* * The packet in the dsh has a proxying serialization header, process * and strip it so we just forward the payload */ if (*len <= si - 23 || si < 23) { /* * What comes out of the dsh needs to fit in the tx buffer... * we have arrangements at the proxy rx of the client UDS to * chop chunks larger than 1380 into seuqential lumps of 1380 */ lwsl_err("%s: *len = %d, si = %d\n", __func__, (int)*len, (int)si); assert(0); return 1; } if (p[0] != LWSSS_SER_TXPRE_TX_PAYLOAD) { assert(0); return 1; } *len = (size_t)(lws_ser_ru16be(&p[1]) - (23 - 3)); if (*len != si - 23) { /* * We cannot accept any length that doesn't reflect the actual * length of what came in from the dsh, either something nasty * happened with truncation or we are being attacked */ assert(0); return 1; } memcpy(buf, p + 23, si - 23); *flags = (int)lws_ser_ru32be(&p[3]); lws_dsh_free((void **)&p); return 0; } /* * event loop side is issuing state, serialize and put it in the dbuf for * the foreign side to consume later */ int lws_ss_serialize_state(struct lws *wsi, struct lws_dsh *dsh, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { uint8_t pre[12]; int n = 4; if (state == LWSSSCS_EVENT_WAIT_CANCELLED) return 0; lwsl_info("%s: %s, ord 0x%x\n", __func__, lws_ss_state_name((int)state), (unsigned int)ack); pre[0] = LWSSS_SER_RXPRE_CONNSTATE; pre[1] = 0; if (state > 255) { pre[2] = 8; lws_ser_wu32be(&pre[3], state); n = 7; } else { pre[2] = 5; pre[3] = (uint8_t)state; } lws_ser_wu32be(&pre[n], ack); if (lws_dsh_alloc_tail(dsh, KIND_SS_TO_P, pre, (unsigned int)n + 4, NULL, 0) || (wsi && lws_fi(&wsi->fic, "sspc_dsh_ss2p_oom"))) { lwsl_err("%s: unable to alloc in dsh 2\n", __func__); return 1; } return 0; } /* * event loop side was told about remote peer tx credit window update, serialize * and put it in the dbuf for the foreign side to consume later */ int lws_ss_serialize_txcr(struct lws_dsh *dsh, int txcr) { uint8_t pre[7]; lwsl_info("%s: %d\n", __func__, txcr); pre[0] = LWSSS_SER_RXPRE_TXCR_UPDATE; pre[1] = 0; pre[2] = 4; lws_ser_wu32be(&pre[3], (uint32_t)txcr); if (lws_dsh_alloc_tail(dsh, KIND_SS_TO_P, pre, 7, NULL, 0)) { lwsl_err("%s: unable to alloc in dsh 2\n", __func__); return 1; } return 0; } /* * event loop side is consuming serialized data from the client via dsh, parse * it using a bytewise parser for the serialization header(s)... * it's possibly coalesced * * client: pss is pointing to the start of userdata. We can use * pss_to_sspc_h(_pss, _ssi) to convert that to a pointer to the sspc * handle * * proxy: pss is pointing to &conn->ss, a pointer to the ss handle * * Returns one of * * LWSSSSRET_OK * LWSSSSRET_DISCONNECT_ME * LWSSSSRET_DESTROY_ME */ /* convert userdata ptr _pss to handle pointer, allowing for any layout in * userdata */ #define client_pss_to_sspc_h(_pss, _ssi) (*((lws_sspc_handle_t **) \ ((uint8_t *)_pss) + _ssi->handle_offset)) /* client pss to sspc userdata */ #define client_pss_to_userdata(_pss) ((void *)_pss) /* proxy convert pss to ss handle */ #define proxy_pss_to_ss_h(_pss) (*_pss) /* convert userdata ptr _pss to handle pointer, allowing for any layout in * userdata */ #define client_pss_to_sspc_h(_pss, _ssi) (*((lws_sspc_handle_t **) \ ((uint8_t *)_pss) + _ssi->handle_offset)) /* client pss to sspc userdata */ #define client_pss_to_userdata(_pss) ((void *)_pss) /* proxy convert pss to ss handle */ #define proxy_pss_to_ss_h(_pss) (*_pss) int lws_ss_deserialize_parse(struct lws_ss_serialization_parser *par, struct lws_context *context, struct lws_dsh *dsh, const uint8_t *cp, size_t len, lws_ss_conn_states_t *state, void *parconn, lws_ss_handle_t **pss, lws_ss_info_t *ssi, char client) { lws_ss_state_return_t r; lws_ss_metadata_t *pm; lws_sspc_handle_t *h; uint8_t pre[23]; uint32_t flags; lws_usec_t us; uint8_t *p; int n; while (len--) { switch (par->ps) { case RPAR_TYPE: par->type = *cp++; par->ps++; break; case RPAR_LEN_MSB: /* this is remaining frame length */ par->rem = (uint16_t)((*cp++) << 8); par->ps++; break; case RPAR_LEN_LSB: par->rem = (uint16_t)(par->rem | *cp++); switch (par->type) { /* event loop side */ case LWSSS_SER_TXPRE_TX_PAYLOAD: if (client) goto hangup; if (*state != LPCSPROX_OPERATIONAL) goto hangup; par->ps = RPAR_FLAG_B3; break; case LWSSS_SER_TXPRE_DESTROYING: if (client) goto hangup; par->ps = RPAR_TYPE; lwsl_cx_notice(context, "DESTROYING"); goto hangup; case LWSSS_SER_TXPRE_ONWARD_CONNECT: if (client) goto hangup; if (*state != LPCSPROX_OPERATIONAL) goto hangup; par->ps = RPAR_TYPE; lwsl_cx_notice(context, "ONWARD_CONNECT"); /* * Shrug it off if we are already connecting or * connected */ if (!proxy_pss_to_ss_h(pss) || proxy_pss_to_ss_h(pss)->wsi) break; /* * We're going to try to do the onward connect */ if ((proxy_pss_to_ss_h(pss) && lws_fi(&proxy_pss_to_ss_h(pss)->fic, "ssproxy_onward_conn_fail")) || _lws_ss_client_connect(proxy_pss_to_ss_h(pss), 0, parconn) == LWSSSSRET_DESTROY_ME) goto hangup; break; case LWSSS_SER_TXPRE_STREAMTYPE: if (client) goto hangup; if (*state != LPCSPROX_WAIT_INITIAL_TX) goto hangup; if (par->rem < 1 + 4 + 1) goto hangup; par->ps = RPAR_INIT_PROVERS; break; case LWSSS_SER_TXPRE_METADATA: if (client) goto hangup; if (par->rem < 3) goto hangup; par->ctr = 0; par->ps = RPAR_METADATA_NAMELEN; break; case LWSSS_SER_TXPRE_TXCR_UPDATE: par->ps = RPAR_TXCR0; par->ctr = 0; break; case LWSSS_SER_TXPRE_TIMEOUT_UPDATE: if (client) goto hangup; if (par->rem != 4) goto hangup; par->ps = RPAR_TIMEOUT0; par->ctr = 0; break; case LWSSS_SER_TXPRE_PAYLOAD_LENGTH_HINT: if (client) goto hangup; if (par->rem != 4) goto hangup; par->ps = RPAR_PAYLEN0; par->ctr = 0; break; /* client side */ case LWSSS_SER_RXPRE_RX_PAYLOAD: if (!client) goto hangup; if (*state != LPCSCLI_OPERATIONAL && *state != LPCSCLI_LOCAL_CONNECTED) goto hangup; par->rideshare[0] = '\0'; par->ps = RPAR_FLAG_B3; break; case LWSSS_SER_RXPRE_CREATE_RESULT: if (!client) goto hangup; if (*state != LPCSCLI_WAITING_CREATE_RESULT) goto hangup; if (par->rem < 1) goto hangup; par->ps = RPAR_RESULT_CREATION; break; case LWSSS_SER_RXPRE_CONNSTATE: if (!client) goto hangup; if (*state != LPCSCLI_LOCAL_CONNECTED && *state != LPCSCLI_OPERATIONAL) goto hangup; if (par->rem < 5 || par->rem > 8) goto hangup; par->ps = RPAR_STATEINDEX; par->ctr = 0; break; case LWSSS_SER_RXPRE_METADATA: if (!client) goto hangup; if (par->rem < 3) goto hangup; par->ctr = 0; par->ps = RPAR_METADATA_NAMELEN; break; case LWSSS_SER_RXPRE_TXCR_UPDATE: par->ctr = 0; par->ps = RPAR_RX_TXCR_UPDATE; break; case LWSSS_SER_RXPRE_PERF: par->ctr = 0; if (!par->rem) goto hangup; par->ps = RPAR_PERF; break; default: lwsl_cx_notice(context, "bad type 0x%x", par->type); goto hangup; } break; case RPAR_FLAG_B3: case RPAR_FLAG_B2: case RPAR_FLAG_B1: case RPAR_FLAG_B0: par->flags <<= 8; par->flags |= *cp++; par->ps++; if (!par->rem--) goto hangup; break; case RPAR_LATA3: case RPAR_LATA2: case RPAR_LATA1: case RPAR_LATA0: par->usd_phandling <<= 8; par->usd_phandling |= *cp++; par->ps++; if (!par->rem--) goto hangup; break; case RPAR_LATB7: case RPAR_LATB6: case RPAR_LATB5: case RPAR_LATB4: case RPAR_LATB3: case RPAR_LATB2: case RPAR_LATB1: case RPAR_LATB0: par->ust_pwait <<= 8; par->ust_pwait |= *cp++; par->ps++; par->frag1 = 1; if (!par->rem--) goto hangup; if (par->ps == RPAR_RIDESHARE_LEN && !(par->flags & LWSSS_FLAG_RIDESHARE)) par->ps = RPAR_PAYLOAD; if (par->rem) break; /* fallthru - handle 0-length payload */ if (!(par->flags & LWSSS_FLAG_RIDESHARE)) goto payload_ff; goto hangup; /* * Inbound rideshare info is provided on the RX packet * itself */ case RPAR_RIDESHARE_LEN: par->slen = *cp++; par->ctr = 0; par->ps++; if (par->rem-- < par->slen) goto hangup; break; case RPAR_PERF: n = (int)len + 1; if (n > par->rem) n = par->rem; if (client && client_pss_to_sspc_h(pss, ssi) && ssi->rx) { int ret; /* we still have an sspc handle */ ret = ssi->rx(client_pss_to_userdata(pss), (uint8_t *)cp, (unsigned int)n, (int)(LWSSS_FLAG_SOM | LWSSS_FLAG_EOM | LWSSS_FLAG_PERF_JSON)); if (lws_fi(&client_pss_to_sspc_h(pss, ssi)->fic, "sspc_perf_rx_fake_destroy_me")) ret = LWSSSSRET_DESTROY_ME; switch (ret) { case LWSSSSRET_OK: break; case LWSSSSRET_DISCONNECT_ME: goto hangup; case LWSSSSRET_DESTROY_ME: return LWSSSSRET_DESTROY_ME; } } if (n) { cp += n; par->rem = (uint16_t)(par->rem - (uint16_t)(unsigned int)n); len = (len + 1) - (unsigned int)n; } if (!par->rem) par->ps = RPAR_TYPE; break; case RPAR_RIDESHARE: par->rideshare[par->ctr++] = (char)*cp++; if (!par->rem--) goto hangup; if (par->ctr != par->slen) break; par->ps = RPAR_PAYLOAD; if (par->rem) break; /* fallthru - handle 0-length payload */ case RPAR_PAYLOAD: payload_ff: n = (int)len + 1; if (n > par->rem) n = par->rem; /* * We get called with a serialized buffer of a size * chosen by the client. We can only create dsh entries * with up to 1380 payload, to guarantee we can emit * them on the onward connection atomically. * * If 1380 isn't enough to cover what was handed to us, * we'll stop at 1380 and go around again and create * more dsh entries for the rest, with their own * headers. */ if (n > 1380) n = 1380; /* * Since we're in the business of fragmenting client * serialized payloads at 1380, we have to deal with * refragmenting the SOM / EOM flags that covered the * whole client serialized packet, so they apply to * each dsh entry we split it into correctly */ flags = par->flags & LWSSS_FLAG_RELATED_START; if (par->frag1) /* * Only set the first time we came to this * state after deserialization of the header */ flags |= par->flags & (LWSSS_FLAG_SOM | LWSSS_FLAG_POLL); if (par->rem == n) /* * We are going to complete the advertised * payload length from the client on this dsh, * so give him the EOM type flags if any */ flags |= par->flags & (LWSSS_FLAG_EOM | LWSSS_FLAG_RELATED_END); par->frag1 = 0; us = lws_now_usecs(); if (!client) { lws_ss_handle_t *hss; /* * Proxy - we received some serialized tx from * the client. * * The header for buffering private to the * proxy is 23 bytes vs 19, so we can hold the * current time when it was buffered * additionally */ hss = proxy_pss_to_ss_h(pss); if (hss) lwsl_ss_info(hss, "C2P RX: len %d", (int)n); p = pre; pre[0] = LWSSS_SER_TXPRE_TX_PAYLOAD; lws_ser_wu16be(&p[1], (uint16_t)((unsigned int)n + 23 - 3)); lws_ser_wu32be(&p[3], flags); /* us held at client before written */ lws_ser_wu32be(&p[7], par->usd_phandling); /* us taken for transit to proxy */ lws_ser_wu32be(&p[11], (uint32_t)(us - (lws_usec_t)par->ust_pwait)); /* time used later to find proxy hold time */ lws_ser_wu64be(&p[15], (uint64_t)us); if ((hss && lws_fi(&hss->fic, "ssproxy_dsh_c2p_pay_oom")) || lws_dsh_alloc_tail(dsh, KIND_C_TO_P, pre, 23, cp, (unsigned int)n)) { lwsl_ss_err(hss, "unable to alloc in dsh 3"); return LWSSSSRET_DISCONNECT_ME; } if (hss) _lws_ss_request_tx(hss); } else { /* * Client receives some RX from proxy * * Pass whatever payload we have to ss user */ h = lws_container_of(par, lws_sspc_handle_t, parser); h->txc.peer_tx_cr_est -= n; lwsl_sspc_info(h, "P2C RX: len %d", (int)n); if (ssi->rx && client_pss_to_sspc_h(pss, ssi)) { /* we still have an sspc handle */ int ret; ret = ssi->rx(client_pss_to_userdata(pss), (uint8_t *)cp, (unsigned int)n, (int)flags); if (client_pss_to_sspc_h(pss, ssi) && lws_fi(&client_pss_to_sspc_h(pss, ssi)->fic, "sspc_rx_fake_destroy_me")) ret = LWSSSSRET_DESTROY_ME; switch (ret) { case LWSSSSRET_OK: break; case LWSSSSRET_DISCONNECT_ME: goto hangup; case LWSSSSRET_DESTROY_ME: return LWSSSSRET_DESTROY_ME; } } #if 0 if (lws_det_lat_active(context)) { lws_detlat_t d; d.type = LDLT_READ; d.acc_size = d.req_size = n; d.latencies[LAT_DUR_USERCB] = lws_now_usecs() - us; d.latencies[LAT_DUR_PROXY_CLIENT_REQ_TO_WRITE] = par->usd_phandling; d.latencies[LAT_DUR_PROXY_CLIENT_WRITE_TO_PROXY_RX] = us - par->ust_pwait; lws_det_lat_cb(context, &d); } #endif } if (n) { cp += n; par->rem = (uint16_t)(par->rem - (uint16_t)(unsigned int)n); len = (len + 1) - (unsigned int)n; /* * if we didn't consume it all, we'll come * around again and produce more dsh entries up * to 1380 each until it is gone */ } if (!par->rem) par->ps = RPAR_TYPE; break; case RPAR_RX_TXCR_UPDATE: if (!--par->rem && par->ctr != 3) goto hangup; par->temp32 = (par->temp32 << 8) | *cp++; if (++par->ctr < 4) break; /* * Proxy is telling us remote endpoint is allowing us * par->temp32 more bytes tx credit to write to it */ h = lws_container_of(par, lws_sspc_handle_t, parser); h->txc.tx_cr += par->temp32; lwsl_info("%s: RX_PEER_TXCR: %d\n", __func__, par->temp32); lws_sspc_request_tx(h); /* in case something waiting */ par->ctr = 0; par->ps = RPAR_TYPE; break; case RPAR_INIT_PROVERS: /* Protocol version byte for this connection */ par->protocol_version = *cp++; /* * So we have to know what versions of the serialization * protocol we can support at the proxy side, and * reject anythng we don't know how to deal with * noisily in the logs. */ if (par->protocol_version != 1) { lwsl_err("%s: Rejecting client with " "unsupported SSv%d protocol\n", __func__, par->protocol_version); goto hangup; } if (!--par->rem) goto hangup; par->ctr = 0; par->ps = RPAR_INIT_PID; break; case RPAR_INIT_PID: if (!--par->rem) goto hangup; par->temp32 = (par->temp32 << 8) | *cp++; if (++par->ctr < 4) break; par->client_pid = (uint32_t)par->temp32; par->ctr = 0; par->ps = RPAR_INITTXC0; break; case RPAR_INITTXC0: if (!--par->rem) goto hangup; par->temp32 = (par->temp32 << 8) | *cp++; if (++par->ctr < 4) break; par->txcr_out = par->temp32; par->ctr = 0; par->ps = RPAR_STREAMTYPE; break; /* * These are the client adjusting our / the remote peer ability * to send back to him. He's sending a signed u32 BE */ case RPAR_TXCR0: par->temp32 = (par->temp32 << 8) | *cp++; if (++par->ctr < 4) { if (!--par->rem) goto hangup; break; } if (--par->rem) goto hangup; if (!client) { /* * We're the proxy, being told by the client * that it wants to allow more tx from the peer * on the onward connection towards it. */ #if defined(LWS_ROLE_H2) || defined(LWS_ROLE_MQTT) if (proxy_pss_to_ss_h(pss) && proxy_pss_to_ss_h(pss)->wsi) { lws_wsi_tx_credit( proxy_pss_to_ss_h(pss)->wsi, LWSTXCR_PEER_TO_US, par->temp32); lwsl_notice("%s: proxy RX_PEER_TXCR: +%d (est %d)\n", __func__, par->temp32, proxy_pss_to_ss_h(pss)->wsi-> txc.peer_tx_cr_est); _lws_ss_request_tx(proxy_pss_to_ss_h(pss)); } else #endif lwsl_info("%s: dropping TXCR\n", __func__); } else { /* * We're the client, being told by the proxy * about tx credit being given to us from the * remote peer, allowing the client to write to * it. */ h = lws_container_of(par, lws_sspc_handle_t, parser); h->txc.tx_cr += par->temp32; lwsl_info("%s: client RX_PEER_TXCR: %d\n", __func__, par->temp32); lws_sspc_request_tx(h); /* in case something waiting */ } par->ps = RPAR_TYPE; break; case RPAR_TIMEOUT0: par->temp32 = (par->temp32 << 8) | *cp++; if (++par->ctr < 4) { if (!--par->rem) goto hangup; break; } if (--par->rem) goto hangup; /* * Proxy... * * *pss may have gone away asynchronously inbetweentimes */ if (proxy_pss_to_ss_h(pss)) { if ((unsigned int)par->temp32 == 0xffffffff) { lwsl_notice("%s: cancel ss timeout\n", __func__); lws_ss_cancel_timeout( proxy_pss_to_ss_h(pss)); } else { if (!par->temp32) par->temp32 = (int) proxy_pss_to_ss_h(pss)-> policy->timeout_ms; lwsl_notice("%s: set ss timeout for +%ums\n", __func__, par->temp32); lws_ss_start_timeout( proxy_pss_to_ss_h(pss), (unsigned int) par->temp32); } } par->ps = RPAR_TYPE; break; case RPAR_PAYLEN0: /* * It's the length from lws_ss_request_tx_len() being * passed up to the proxy */ par->temp32 = (par->temp32 << 8) | *cp++; if (++par->ctr < 4) { if (!--par->rem) goto hangup; break; } if (--par->rem) goto hangup; lwsl_notice("%s: set payload len %u\n", __func__, par->temp32); par->ps = RPAR_TYPE; if (proxy_pss_to_ss_h(pss)) { r = lws_ss_request_tx_len(proxy_pss_to_ss_h(pss), (unsigned long)par->temp32); if (r == LWSSSSRET_DESTROY_ME) goto hangup; } break; case RPAR_METADATA_NAMELEN: /* both client and proxy */ if (!--par->rem) goto hangup; par->slen = *cp++; if (par->slen >= sizeof(par->metadata_name) - 1) goto hangup; par->ctr = 0; par->ps++; break; case RPAR_METADATA_NAME: /* both client and proxy */ if (!--par->rem) goto hangup; par->metadata_name[par->ctr++] = (char)*cp++; if (par->ctr != par->slen) break; par->metadata_name[par->ctr] = '\0'; par->ps = RPAR_METADATA_VALUE; if (client) { lws_sspc_metadata_t *md; lws_sspc_handle_t *h = client_pss_to_sspc_h(pss, ssi); /* * client side does not have access to policy * and any metadata are new to it each time, * we allocate them, removing any existing with * the same name first */ lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, lws_dll2_get_head( &h->metadata_owner_rx)) { md = lws_container_of(d, lws_sspc_metadata_t, list); if (!strcmp(md->name, par->metadata_name)) { lws_dll2_remove(&md->list); lws_free(md); } } lws_end_foreach_dll_safe(d, d1); /* * Create the client's rx metadata entry */ if (h && lws_fi(&h->fic, "sspc_rx_metadata_oom")) md = NULL; else md = lws_malloc(sizeof(lws_sspc_metadata_t) + par->rem + 1, "rxmeta"); if (!md) { lwsl_err("%s: OOM\n", __func__); goto hangup; } if (!h) /* coverity */ goto hangup; memset(md, 0, sizeof(lws_sspc_metadata_t)); lws_strncpy(md->name, par->metadata_name, sizeof(md->name)); md->len = par->rem; par->rxmetaval = (uint8_t *)&md[1]; /* * Overallocate by 1 and put a NUL just beyond * the official md->len, so value can be easily * dereferenced safely for NUL-terminated string * apis that's the most common usage */ par->rxmetaval[md->len] = '\0'; lws_dll2_add_tail(&md->list, &h->metadata_owner_rx); par->ctr = 0; break; } /* proxy side is receiving it */ if (!proxy_pss_to_ss_h(pss)) goto hangup; if (!proxy_pss_to_ss_h(pss)->policy) { lwsl_err("%s: null policy\n", __func__); goto hangup; } /* * This is the policy's metadata list for the given * name */ pm = lws_ss_policy_metadata( proxy_pss_to_ss_h(pss)->policy, par->metadata_name); if (!pm) { lwsl_err("%s: metadata %s not in proxy policy\n", __func__, par->metadata_name); goto hangup; } par->ssmd = lws_ss_get_handle_metadata( proxy_pss_to_ss_h(pss), par->metadata_name); if (par->ssmd) { if (par->ssmd->value_on_lws_heap) lws_free_set_NULL(par->ssmd->value__may_own_heap); par->ssmd->value_on_lws_heap = 0; if (proxy_pss_to_ss_h(pss) && lws_fi(&proxy_pss_to_ss_h(pss)->fic, "ssproxy_rx_metadata_oom")) par->ssmd->value__may_own_heap = NULL; else par->ssmd->value__may_own_heap = lws_malloc((unsigned int)par->rem + 1, "metadata"); if (!par->ssmd->value__may_own_heap) { lwsl_err("%s: OOM mdv\n", __func__); goto hangup; } par->ssmd->length = par->rem; ((uint8_t *)par->ssmd->value__may_own_heap)[par->rem] = '\0'; /* mark it as needing cleanup */ par->ssmd->value_on_lws_heap = 1; } par->ctr = 0; break; case RPAR_METADATA_VALUE: /* both client and proxy */ if (client) { *par->rxmetaval++ = *cp++; } else { if (!par->ssmd) { /* we don't recognize the name */ cp++; if (--par->rem) break; par->ps = RPAR_TYPE; break; } ((uint8_t *)(par->ssmd->value__may_own_heap))[par->ctr++] = *cp++; } if (--par->rem) break; /* we think we got all the value */ if (client) { h = lws_container_of(par, lws_sspc_handle_t, parser); lwsl_sspc_notice(h, "RX METADATA %s", par->metadata_name); } else { lwsl_ss_info(proxy_pss_to_ss_h(pss), "RPAR_METADATA_VALUE for %s (len %d)", par->ssmd->name, (int)par->ssmd->length); lwsl_hexdump_ss_info(proxy_pss_to_ss_h(pss), par->ssmd->value__may_own_heap, par->ssmd->length); } par->ps = RPAR_TYPE; break; case RPAR_STREAMTYPE: /* only the proxy can get these */ if (client) goto hangup; if (par->ctr == sizeof(par->streamtype) - 1) goto hangup; /* * We can only expect to get this if we ourselves are * in the state that we're waiting for it. If it comes * later it's a protocol error. */ if (*state != LPCSPROX_WAIT_INITIAL_TX) goto hangup; /* * We're the proxy, creating an SS on behalf of a * client */ par->streamtype[par->ctr++] = (char)*cp++; if (--par->rem) break; par->ps = RPAR_TYPE; par->streamtype[par->ctr] = '\0'; lwsl_info("%s: proxy ss '%s', sssv%d, txcr %d\n", __func__, par->streamtype, par->protocol_version, par->txcr_out); ssi->streamtype = par->streamtype; if (par->txcr_out) // !!! ssi->manual_initial_tx_credit = par->txcr_out; /* * Even for a synthetic SS proxing action like _lws_smd, * we create an actual SS in the proxy representing the * connection */ ssi->flags |= LWSSSINFLAGS_PROXIED; ssi->sss_protocol_version = par->protocol_version; ssi->client_pid = par->client_pid; if (lws_ss_create(context, 0, ssi, parconn, pss, NULL, NULL)) { /* * We're unable to create the onward secure * stream he asked for... schedule a chance to * inform him */ lwsl_err("%s: create '%s' fail\n", __func__, par->streamtype); *state = LPCSPROX_REPORTING_FAIL; break; } else { lwsl_debug("%s: create '%s' OK\n", __func__, par->streamtype); *state = LPCSPROX_REPORTING_OK; } if (*pss) { (*pss)->being_serialized = 1; #if defined(LWS_WITH_SYS_SMD) if ((*pss)->policy != &pol_smd) /* * In SMD case we overloaded the * initial credit to be the class mask */ #endif { lwsl_info("%s: Created SS initial credit %d\n", __func__, par->txcr_out); (*pss)->info.manual_initial_tx_credit = par->txcr_out; } } /* parent needs to schedule write on client conn */ break; /* clientside states */ case RPAR_RESULT_CREATION: if (*cp++) { lwsl_err("%s: stream creation failed\n", __func__); goto hangup; } if (--par->rem < 4) goto hangup; par->ps = RPAR_RESULT_CREATION_DSH; par->ctr = 0; break; case RPAR_RESULT_CREATION_DSH: par->temp32 = (par->temp32 << 8) | (*cp++); if (!par->rem--) goto hangup; if (++par->ctr < 4) break; /* * Client (par->temp32 == dsh alloc) */ h = lws_container_of(par, lws_sspc_handle_t, parser); lws_ss_serialize_state_transition(h, state, LPCSCLI_LOCAL_CONNECTED); lws_set_timeout(h->cwsi, NO_PENDING_TIMEOUT, 0); if (h->dsh) goto hangup; /* * This is telling us that the streamtype could be (and * was) created at the proxy. It's not telling us that * the onward peer connection could be connected. * * We'll get a proxied state() coming later that informs * us about the situation with that. * * However at this point, we should choose to inform * the client that his stream was created... we will * later get a proxied CREATING state from the peer * but we should do it now and suppress the later one. * * The reason is he may set metadata in CREATING, and * we will try to do writeables to sync the stream to * proxy and ultimately bring up the onward connection * now we are in LOCAL_CONNECTED. We need to do the * CREATING now so we'll know the metadata to sync. */ #if defined(LWS_WITH_SYS_METRICS) /* * If any hanging caliper measurement, dump it, and free any tags */ lws_metrics_caliper_report_hist(h->cal_txn, (struct lws *)NULL); #endif if (!h->creating_cb_done) { if (lws_ss_check_next_state_sspc(h, &h->prev_ss_state, LWSSSCS_CREATING)) return LWSSSSRET_DESTROY_ME; h->prev_ss_state = (uint8_t)LWSSSCS_CREATING; h->creating_cb_done = 1; } else h->prev_ss_state = LWSSSCS_DISCONNECTED; if (ssi->state) { n = ssi->state(client_pss_to_userdata(pss), NULL, h->prev_ss_state, 0); switch (n) { case LWSSSSRET_OK: break; case LWSSSSRET_DISCONNECT_ME: goto hangup; case LWSSSSRET_DESTROY_ME: return LWSSSSRET_DESTROY_ME; } } h->dsh = lws_dsh_create(NULL, (size_t)(par->temp32 ? par->temp32 : 32768), 1); if (!h->dsh) goto hangup; lws_callback_on_writable(h->cwsi); par->rsl_pos = 0; par->rsl_idx = 0; memset(&h->rideshare_ofs[0], 0, sizeof(h->rideshare_ofs[0])); h->rideshare_list[0] = '\0'; h->rsidx = 0; /* no rideshare data is OK */ par->ps = RPAR_TYPE; if (par->rem) { par->ps = RPAR_RESULT_CREATION_RIDESHARE; if (par->rem >= sizeof(h->rideshare_list)) goto hangup; } break; case RPAR_RESULT_CREATION_RIDESHARE: h = lws_container_of(par, lws_sspc_handle_t, parser); if (*cp == ',') { cp++; h->rideshare_list[par->rsl_pos++] = '\0'; if (par->rsl_idx == LWS_ARRAY_SIZE(h->rideshare_ofs)) goto hangup; h->rideshare_ofs[++par->rsl_idx] = par->rsl_pos; } else h->rideshare_list[par->rsl_pos++] = (char)*cp++; if (!--par->rem) par->ps = RPAR_TYPE; break; case RPAR_STATEINDEX: par->ctr = (par->ctr << 8) | (*cp++); if (--par->rem == 4) par->ps = RPAR_ORD3; break; case RPAR_ORD3: par->flags = (uint32_t)((*cp++) << 24); par->ps++; break; case RPAR_ORD2: par->flags |= (uint32_t)((*cp++) << 16); par->ps++; break; case RPAR_ORD1: par->flags |= (uint32_t)((*cp++) << 8); par->ps++; break; case RPAR_ORD0: par->flags |= (uint32_t)(*cp++); par->ps++; par->ps = RPAR_TYPE; /* * Client received a proxied state change */ h = client_pss_to_sspc_h(pss, ssi); if (!h) /* * Since we're being informed we need to have * a stream to inform. Assume whatever set this * to NULL has started to close it. */ break; switch (par->ctr) { case LWSSSCS_DISCONNECTED: case LWSSSCS_UNREACHABLE: case LWSSSCS_AUTH_FAILED: lws_ss_serialize_state_transition(h, state, LPCSCLI_LOCAL_CONNECTED); h->conn_req_state = LWSSSPC_ONW_NONE; break; case LWSSSCS_CONNECTED: lwsl_sspc_info(h, "CONNECTED %s", ssi->streamtype); if (*state == LPCSCLI_OPERATIONAL) /* * Don't allow to see connected more * than once for one connection */ goto swallow; lws_ss_serialize_state_transition(h, state, LPCSCLI_OPERATIONAL); h->conn_req_state = LWSSSPC_ONW_CONN; break; case LWSSSCS_TIMEOUT: break; default: break; } if (par->ctr < 0) goto hangup; #if defined(_DEBUG) lwsl_sspc_info(h, "forwarding proxied state %s", lws_ss_state_name(par->ctr)); #endif if (par->ctr == LWSSSCS_CREATING) { h = lws_container_of(par, lws_sspc_handle_t, parser); if (h->creating_cb_done) /* * We have told him he's CREATING when * we heard we had linked up to the * proxy, so suppress the remote * CREATING so that he only sees it once */ break; h->creating_cb_done = 1; } if (ssi->state) { h = lws_container_of(par, lws_sspc_handle_t, parser); lws_ss_constate_t cs = (lws_ss_constate_t)par->ctr; if (cs == LWSSSCS_CONNECTED) h->ss_dangling_connected = 1; if (cs == LWSSSCS_DISCONNECTED) h->ss_dangling_connected = 0; if (lws_ss_check_next_state_sspc(h, &h->prev_ss_state, cs)) return LWSSSSRET_DESTROY_ME; if (cs < LWSSSCS_USER_BASE) h->prev_ss_state = (uint8_t)cs; h->h_in_svc = h; n = ssi->state(client_pss_to_userdata(pss), NULL, cs, par->flags); h->h_in_svc = NULL; switch (n) { case LWSSSSRET_OK: break; case LWSSSSRET_DISCONNECT_ME: goto hangup; case LWSSSSRET_DESTROY_ME: return LWSSSSRET_DESTROY_ME; } } swallow: break; default: goto hangup; } } return LWSSSSRET_OK; hangup: lwsl_cx_notice(context, "hangup"); return LWSSSSRET_DISCONNECT_ME; } libwebsockets-4.3.5/lib/secure-streams/secure-streams.c000066400000000000000000001315031476025525100232130ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2019 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include static const struct ss_pcols *ss_pcols[] = { #if defined(LWS_ROLE_H1) &ss_pcol_h1, /* LWSSSP_H1 */ #else NULL, #endif #if defined(LWS_ROLE_H2) &ss_pcol_h2, /* LWSSSP_H2 */ #else NULL, #endif #if defined(LWS_ROLE_WS) &ss_pcol_ws, /* LWSSSP_WS */ #else NULL, #endif #if defined(LWS_ROLE_MQTT) &ss_pcol_mqtt, /* LWSSSP_MQTT */ #else NULL, #endif &ss_pcol_raw, /* LWSSSP_RAW */ NULL, }; static const char *state_names[] = { "(unset)", "LWSSSCS_CREATING", "LWSSSCS_DISCONNECTED", "LWSSSCS_UNREACHABLE", "LWSSSCS_AUTH_FAILED", "LWSSSCS_CONNECTED", "LWSSSCS_CONNECTING", "LWSSSCS_DESTROYING", "LWSSSCS_POLL", "LWSSSCS_ALL_RETRIES_FAILED", "LWSSSCS_QOS_ACK_REMOTE", "LWSSSCS_QOS_NACK_REMOTE", "LWSSSCS_QOS_ACK_LOCAL", "LWSSSCS_QOS_NACK_LOCAL", "LWSSSCS_TIMEOUT", "LWSSSCS_SERVER_TXN", "LWSSSCS_SERVER_UPGRADE", "LWSSSCS_EVENT_WAIT_CANCELLED", "LWSSSCS_UPSTREAM_LINK_RETRY", }; /* * For each "current state", set bit offsets for valid "next states". * * Since there are complicated ways to arrive at state transitions like proxying * and asynchronous destruction etc, so we monitor the state transitions we are * giving the ss user code to ensure we never deliver illegal state transitions * (because we will assert if we have bugs that do it) */ const uint32_t ss_state_txn_validity[] = { /* if we was last in this state... we can legally go to these states */ [0] = (1 << LWSSSCS_CREATING) | (1 << LWSSSCS_DESTROYING), [LWSSSCS_CREATING] = (1 << LWSSSCS_CONNECTING) | (1 << LWSSSCS_TIMEOUT) | (1 << LWSSSCS_POLL) | (1 << LWSSSCS_SERVER_UPGRADE) | (1 << LWSSSCS_DESTROYING), [LWSSSCS_DISCONNECTED] = (1 << LWSSSCS_CONNECTING) | (1 << LWSSSCS_TIMEOUT) | (1 << LWSSSCS_POLL) | (1 << LWSSSCS_DESTROYING), [LWSSSCS_UNREACHABLE] = (1 << LWSSSCS_ALL_RETRIES_FAILED) | (1 << LWSSSCS_TIMEOUT) | (1 << LWSSSCS_POLL) | (1 << LWSSSCS_CONNECTING) | /* win conn failure > retry > succ */ (1 << LWSSSCS_CONNECTED) | (1 << LWSSSCS_DESTROYING), [LWSSSCS_AUTH_FAILED] = (1 << LWSSSCS_ALL_RETRIES_FAILED) | (1 << LWSSSCS_TIMEOUT) | (1 << LWSSSCS_CONNECTING) | (1 << LWSSSCS_DESTROYING), [LWSSSCS_CONNECTED] = (1 << LWSSSCS_SERVER_UPGRADE) | (1 << LWSSSCS_SERVER_TXN) | (1 << LWSSSCS_AUTH_FAILED) | (1 << LWSSSCS_QOS_ACK_REMOTE) | (1 << LWSSSCS_QOS_NACK_REMOTE) | (1 << LWSSSCS_QOS_ACK_LOCAL) | (1 << LWSSSCS_QOS_NACK_LOCAL) | (1 << LWSSSCS_DISCONNECTED) | (1 << LWSSSCS_TIMEOUT) | (1 << LWSSSCS_POLL) | /* proxy retry */ (1 << LWSSSCS_DESTROYING), [LWSSSCS_CONNECTING] = (1 << LWSSSCS_UNREACHABLE) | (1 << LWSSSCS_AUTH_FAILED) | (1 << LWSSSCS_CONNECTING) | (1 << LWSSSCS_CONNECTED) | (1 << LWSSSCS_TIMEOUT) | (1 << LWSSSCS_POLL) | (1 << LWSSSCS_DISCONNECTED) | /* proxy retry */ (1 << LWSSSCS_DESTROYING), [LWSSSCS_DESTROYING] = 0, [LWSSSCS_POLL] = (1 << LWSSSCS_CONNECTING) | (1 << LWSSSCS_TIMEOUT) | (1 << LWSSSCS_ALL_RETRIES_FAILED) | (1 << LWSSSCS_DESTROYING), [LWSSSCS_ALL_RETRIES_FAILED] = (1 << LWSSSCS_CONNECTING) | (1 << LWSSSCS_TIMEOUT) | (1 << LWSSSCS_DESTROYING), [LWSSSCS_QOS_ACK_REMOTE] = (1 << LWSSSCS_DISCONNECTED) | (1 << LWSSSCS_TIMEOUT) | #if defined(LWS_ROLE_MQTT) (1 << LWSSSCS_QOS_ACK_REMOTE) | (1 << LWSSSCS_QOS_NACK_REMOTE) | #endif (1 << LWSSSCS_DESTROYING), [LWSSSCS_QOS_NACK_REMOTE] = (1 << LWSSSCS_DISCONNECTED) | (1 << LWSSSCS_TIMEOUT) | #if defined(LWS_ROLE_MQTT) (1 << LWSSSCS_QOS_ACK_REMOTE) | (1 << LWSSSCS_QOS_NACK_REMOTE) | #endif (1 << LWSSSCS_DESTROYING), [LWSSSCS_QOS_ACK_LOCAL] = (1 << LWSSSCS_DISCONNECTED) | (1 << LWSSSCS_TIMEOUT) | (1 << LWSSSCS_DESTROYING), [LWSSSCS_QOS_NACK_LOCAL] = (1 << LWSSSCS_DESTROYING) | (1 << LWSSSCS_TIMEOUT), /* he can get the timeout at any point and take no action... */ [LWSSSCS_TIMEOUT] = (1 << LWSSSCS_CONNECTING) | (1 << LWSSSCS_CONNECTED) | (1 << LWSSSCS_QOS_ACK_REMOTE) | (1 << LWSSSCS_QOS_NACK_REMOTE) | (1 << LWSSSCS_POLL) | (1 << LWSSSCS_TIMEOUT) | (1 << LWSSSCS_DISCONNECTED) | (1 << LWSSSCS_UNREACHABLE) | (1 << LWSSSCS_DESTROYING), [LWSSSCS_SERVER_TXN] = (1 << LWSSSCS_DISCONNECTED) | (1 << LWSSSCS_TIMEOUT) | (1 << LWSSSCS_DESTROYING), [LWSSSCS_SERVER_UPGRADE] = (1 << LWSSSCS_SERVER_TXN) | (1 << LWSSSCS_TIMEOUT) | (1 << LWSSSCS_DISCONNECTED) | (1 << LWSSSCS_DESTROYING), }; #if defined(LWS_WITH_CONMON) /* * Convert any conmon data to JSON and attach to the ss handle. */ lws_ss_state_return_t lws_conmon_ss_json(lws_ss_handle_t *h) { char ads[48], *end, *buf, *obuf; const struct addrinfo *ai; lws_ss_state_return_t ret = LWSSSSRET_OK; struct lws_conmon cm; size_t len = 500; if (!h->policy || !(h->policy->flags & LWSSSPOLF_PERF) || !h->wsi || h->wsi->perf_done) return LWSSSSRET_OK; if (h->conmon_json) lws_free_set_NULL(h->conmon_json); h->conmon_json = lws_malloc(len, __func__); if (!h->conmon_json) return LWSSSSRET_OK; obuf = buf = h->conmon_json; end = buf + len - 1; lws_conmon_wsi_take(h->wsi, &cm); lws_sa46_write_numeric_address(&cm.peer46, ads, sizeof(ads)); buf += lws_snprintf(buf, lws_ptr_diff_size_t(end, buf), "{\"peer\":\"%s\"," "\"dns_us\":%u," "\"dns_disp\":%u," "\"sockconn_us\":%u," "\"tls_us\":%u," "\"txn_resp_us\":%u," "\"dns\":[", ads, (unsigned int)cm.ciu_dns, (unsigned int)cm.dns_disposition, (unsigned int)cm.ciu_sockconn, (unsigned int)cm.ciu_tls, (unsigned int)cm.ciu_txn_resp); ai = cm.dns_results_copy; while (ai) { lws_sa46_write_numeric_address((lws_sockaddr46 *)ai->ai_addr, ads, sizeof(ads)); buf += lws_snprintf(buf, lws_ptr_diff_size_t(end, buf), "\"%s\"", ads); if (ai->ai_next && buf < end - 2) *buf++ = ','; ai = ai->ai_next; } buf += lws_snprintf(buf, lws_ptr_diff_size_t(end, buf), "]"); switch (cm.pcol) { case LWSCONMON_PCOL_HTTP: buf += lws_snprintf(buf, lws_ptr_diff_size_t(end, buf), ",\"prot_specific\":{\"protocol\":\"http\",\"resp\":%u}", (unsigned int)cm.protocol_specific.http.response); break; default: break; } buf += lws_snprintf(buf, lws_ptr_diff_size_t(end, buf), "}"); /* * This destroys the DNS list in the lws_conmon that we took * responsibility for when we used lws_conmon_wsi_take() */ lws_conmon_release(&cm); h->conmon_len = (uint16_t)lws_ptr_diff(buf, obuf); #if defined(LWS_WITH_SECURE_STREAMS_PROXY_API) if (h->proxy_onward) { /* * ask to forward it on the proxy link */ ss_proxy_onward_link_req_writeable(h); return LWSSSSRET_OK; } #endif /* * We can deliver it directly */ if (h->info.rx) ret = h->info.rx(ss_to_userobj(h), (uint8_t *)h->conmon_json, (unsigned int)h->conmon_len, (int)(LWSSS_FLAG_SOM | LWSSS_FLAG_EOM | LWSSS_FLAG_PERF_JSON)); lws_free_set_NULL(h->conmon_json); return ret; } #endif int lws_ss_check_next_state(lws_lifecycle_t *lc, uint8_t *prevstate, lws_ss_constate_t cs) { if (cs >= LWSSSCS_USER_BASE || cs == LWSSSCS_EVENT_WAIT_CANCELLED || cs == LWSSSCS_SERVER_TXN || cs == LWSSSCS_UPSTREAM_LINK_RETRY) /* * we can't judge user or transient states, leave the old state * and just wave them through */ return 0; if (cs >= LWS_ARRAY_SIZE(ss_state_txn_validity)) { /* we don't recognize this state as usable */ lwsl_err("%s: %s: bad new state %u\n", __func__, lc->gutag, cs); assert(0); return 1; } if (*prevstate >= LWS_ARRAY_SIZE(ss_state_txn_validity)) { /* existing state is broken */ lwsl_err("%s: %s: bad existing state %u\n", __func__, lc->gutag, (unsigned int)*prevstate); assert(0); return 1; } if (ss_state_txn_validity[*prevstate] & (1u << cs)) { lwsl_notice("%s: %s: %s -> %s\n", __func__, lc->gutag, lws_ss_state_name((int)*prevstate), lws_ss_state_name((int)cs)); /* this is explicitly allowed, update old state to new */ *prevstate = (uint8_t)cs; return 0; } lwsl_err("%s: %s: transition from %s -> %s is illegal\n", __func__, lc->gutag, lws_ss_state_name((int)*prevstate), lws_ss_state_name((int)cs)); assert(0); return 1; } int lws_ss_check_next_state_ss(lws_ss_handle_t *ss, uint8_t *prevstate, lws_ss_constate_t cs) { if (cs >= LWSSSCS_USER_BASE || cs == LWSSSCS_EVENT_WAIT_CANCELLED || cs == LWSSSCS_UPSTREAM_LINK_RETRY) /* * we can't judge user or transient states, leave the old state * and just wave them through */ return 0; if (cs >= LWS_ARRAY_SIZE(ss_state_txn_validity)) { /* we don't recognize this state as usable */ lwsl_ss_err(ss, "bad new state %u", cs); assert(0); return 1; } if (*prevstate >= LWS_ARRAY_SIZE(ss_state_txn_validity)) { /* existing state is broken */ lwsl_ss_err(ss, "bad existing state %u", (unsigned int)*prevstate); assert(0); return 1; } if (ss_state_txn_validity[*prevstate] & (1u << cs)) { lwsl_ss_notice(ss, "%s -> %s", lws_ss_state_name((int)*prevstate), lws_ss_state_name((int)cs)); /* this is explicitly allowed, update old state to new */ *prevstate = (uint8_t)cs; return 0; } lwsl_ss_err(ss, "transition from %s -> %s is illegal", lws_ss_state_name((int)*prevstate), lws_ss_state_name((int)cs)); assert(0); return 1; } const char * lws_ss_state_name(int state) { if (state >= LWSSSCS_USER_BASE) return "user state"; if (state >= (int)LWS_ARRAY_SIZE(state_names)) return "unknown"; return state_names[state]; } lws_ss_state_return_t lws_ss_event_helper(lws_ss_handle_t *h, lws_ss_constate_t cs) { lws_ss_state_return_t r; if (!h) return LWSSSSRET_OK; if (lws_ss_check_next_state_ss(h, &h->prev_ss_state, cs)) return LWSSSSRET_DESTROY_ME; if (cs == LWSSSCS_CONNECTED) h->ss_dangling_connected = 1; if (cs == LWSSSCS_DISCONNECTED) h->ss_dangling_connected = 0; #if defined(LWS_WITH_SEQUENCER) /* * A parent sequencer for the ss is optional, if we have one, keep it * informed of state changes on the ss connection */ if (h->seq && cs != LWSSSCS_DESTROYING) lws_seq_queue_event(h->seq, LWSSEQ_SS_STATE_BASE + cs, (void *)h, NULL); #endif if (h->info.state) { h->h_in_svc = h; r = h->info.state(ss_to_userobj(h), NULL, cs, cs == LWSSSCS_UNREACHABLE && h->wsi && h->wsi->dns_reachability); h->h_in_svc = NULL; #if defined(LWS_WITH_SERVER) if ((h->info.flags & LWSSSINFLAGS_ACCEPTED) && cs == LWSSSCS_DISCONNECTED) r = LWSSSSRET_DESTROY_ME; #endif return r; } return LWSSSSRET_OK; } int _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(lws_ss_state_return_t r, struct lws *wsi, lws_ss_handle_t **ph) { if (r == LWSSSSRET_DESTROY_ME) { lwsl_info("%s: DESTROY ME: %s, %s\n", __func__, lws_wsi_tag(wsi), lws_ss_tag(*ph)); if (wsi) { lws_set_opaque_user_data(wsi, NULL); lws_set_timeout(wsi, 1, LWS_TO_KILL_ASYNC); } else { if ((*ph)->wsi) { lws_set_opaque_user_data((*ph)->wsi, NULL); lws_set_timeout((*ph)->wsi, 1, LWS_TO_KILL_ASYNC); } } (*ph)->wsi = NULL; lws_ss_destroy(ph); } return -1; /* close connection */ } static void lws_ss_timeout_sul_check_cb(lws_sorted_usec_list_t *sul) { lws_ss_state_return_t r; lws_ss_handle_t *h = lws_container_of(sul, lws_ss_handle_t, sul); lwsl_info("%s: retrying %s after backoff\n", __func__, lws_ss_tag(h)); /* we want to retry... */ h->seqstate = SSSEQ_DO_RETRY; r = _lws_ss_request_tx(h); _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, NULL, &h); } int lws_ss_exp_cb_metadata(void *priv, const char *name, char *out, size_t *pos, size_t olen, size_t *exp_ofs) { lws_ss_handle_t *h = (lws_ss_handle_t *)priv; const char *replace = NULL; size_t total, budget; lws_ss_metadata_t *md = lws_ss_policy_metadata(h->policy, name), *hmd = lws_ss_get_handle_metadata(h, name); if (!md) { lwsl_err("%s: Unknown metadata %s\n", __func__, name); return LSTRX_FATAL_NAME_UNKNOWN; } if (!hmd) return LSTRX_FILLED_OUT; replace = hmd->value__may_own_heap; if (!replace) return LSTRX_DONE; total = hmd->length; budget = olen - *pos; total -= *exp_ofs; if (total < budget) budget = total; if (out) memcpy(out + *pos, replace + (*exp_ofs), budget); *exp_ofs += budget; *pos += budget; if (budget == total) return LSTRX_DONE; return LSTRX_FILLED_OUT; } int lws_ss_set_timeout_us(lws_ss_handle_t *h, lws_usec_t us) { struct lws_context_per_thread *pt = &h->context->pt[h->tsi]; h->sul.cb = lws_ss_timeout_sul_check_cb; __lws_sul_insert_us(&pt->pt_sul_owner[ !!(h->policy->flags & LWSSSPOLF_WAKE_SUSPEND__VALIDITY)], &h->sul, us); return 0; } lws_ss_state_return_t _lws_ss_backoff(lws_ss_handle_t *h, lws_usec_t us_override) { uint64_t ms; char conceal; lws_service_assert_loop_thread(h->context, h->tsi); if (h->seqstate == SSSEQ_RECONNECT_WAIT) return LWSSSSRET_OK; /* figure out what we should do about another retry */ lwsl_info("%s: %s: retry backoff after failure\n", __func__, lws_ss_tag(h)); ms = lws_retry_get_delay_ms(h->context, h->policy->retry_bo, &h->retry, &conceal); if (!conceal) { lwsl_info("%s: %s: abandon conn attempt \n",__func__, lws_ss_tag(h)); if (h->seqstate == SSSEQ_IDLE) /* been here? */ return LWSSSSRET_OK; h->seqstate = SSSEQ_IDLE; return lws_ss_event_helper(h, LWSSSCS_ALL_RETRIES_FAILED); } /* Only increase our planned backoff, or go with it */ if (us_override < (lws_usec_t)ms * LWS_US_PER_MS) us_override = (lws_usec_t)(ms * LWS_US_PER_MS); h->seqstate = SSSEQ_RECONNECT_WAIT; lws_ss_set_timeout_us(h, us_override); lwsl_info("%s: %s: retry wait %dms\n", __func__, lws_ss_tag(h), (int)(us_override / 1000)); return LWSSSSRET_OK; } lws_ss_state_return_t lws_ss_backoff(lws_ss_handle_t *h) { return _lws_ss_backoff(h, 0); } #if defined(LWS_WITH_SYS_SMD) /* * Local SMD <-> SS * * We pass received messages through to the SS handler synchronously, using the * lws service thread context. * * After the SS is created and registered, still nothing is going to come here * until the peer sends us his rx_class_mask and we update his registration with * it, because from SS creation his rx_class_mask defaults to 0. */ static int lws_smd_ss_cb(void *opaque, lws_smd_class_t _class, lws_usec_t timestamp, void *buf, size_t len) { lws_ss_handle_t *h = (lws_ss_handle_t *)opaque; uint8_t *p = (uint8_t *)buf - LWS_SMD_SS_RX_HEADER_LEN; lws_service_assert_loop_thread(h->context, h->tsi); /* * When configured with SS enabled, lws over-allocates * LWS_SMD_SS_RX_HEADER_LEN bytes behind the payload of the queued * message, for prepending serialized class and timestamp data in-band * with the payload. */ lws_ser_wu64be(p, _class); lws_ser_wu64be(p + 8, (uint64_t)timestamp); if (h->info.rx) h->info.rx((void *)(h + 1), p, len + LWS_SMD_SS_RX_HEADER_LEN, LWSSS_FLAG_SOM | LWSSS_FLAG_EOM); return 0; } static void lws_ss_smd_tx_cb(lws_sorted_usec_list_t *sul) { lws_ss_handle_t *h = lws_container_of(sul, lws_ss_handle_t, u.smd.sul_write); uint8_t buf[LWS_SMD_SS_RX_HEADER_LEN + LWS_SMD_MAX_PAYLOAD], *p; size_t len = sizeof(buf); lws_smd_class_t _class; int flags = 0, n; lws_service_assert_loop_thread(h->context, h->tsi); if (!h->info.tx) return; n = h->info.tx((h + 1), h->txord++, buf, &len, &flags); if (n) /* nonzero return means don't want to send anything */ return; // lwsl_notice("%s: (SS %p bound to _lws_smd creates message) tx len %d\n", __func__, h, (int)len); // lwsl_hexdump_notice(buf, len); assert(len >= LWS_SMD_SS_RX_HEADER_LEN); _class = (lws_smd_class_t)lws_ser_ru64be(buf); p = lws_smd_msg_alloc(h->context, _class, len - LWS_SMD_SS_RX_HEADER_LEN); if (!p) { // this can be rejected if nobody listening for this class //lwsl_notice("%s: failed to alloc\n", __func__); return; } memcpy(p, buf + LWS_SMD_SS_RX_HEADER_LEN, len - LWS_SMD_SS_RX_HEADER_LEN); if (lws_smd_msg_send(h->context, p)) { lwsl_notice("%s: failed to queue\n", __func__); return; } } #endif lws_ss_state_return_t _lws_ss_client_connect(lws_ss_handle_t *h, int is_retry, void *conn_if_sspc_onw) { const char *prot, *_prot, *ipath, *_ipath, *ads, *_ads; struct lws_client_connect_info i; const struct ss_pcols *ssp; size_t used_in, used_out; union lws_ss_contemp ct; lws_ss_state_return_t r; int port, _port, tls; char *path, ep[96]; lws_strexp_t exp; struct lws *wsi; lws_service_assert_loop_thread(h->context, h->tsi); if (!h->policy) { lwsl_err("%s: ss with no policy\n", __func__); return LWSSSSRET_OK; } /* * We are already bound to a sink? */ // if (h->h_sink) // return 0; if (!is_retry) h->retry = 0; #if defined(LWS_WITH_SYS_SMD) if (h->policy == &pol_smd) { if (h->u.smd.smd_peer) return LWSSSSRET_OK; // lwsl_notice("%s: received connect for _lws_smd, registering for class mask 0x%x\n", // __func__, h->info.manual_initial_tx_credit); h->u.smd.smd_peer = lws_smd_register(h->context, h, (h->info.flags & LWSSSINFLAGS_PROXIED) ? LWSSMDREG_FLAG_PROXIED_SS : 0, (lws_smd_class_t)h->info.manual_initial_tx_credit, lws_smd_ss_cb); if (!h->u.smd.smd_peer) return LWSSSSRET_TX_DONT_SEND; if (lws_ss_event_helper(h, LWSSSCS_CONNECTING)) return LWSSSSRET_TX_DONT_SEND; if (lws_ss_event_helper(h, LWSSSCS_CONNECTED)) return LWSSSSRET_TX_DONT_SEND; return LWSSSSRET_OK; } #endif /* * We're going to substitute ${metadata} in the endpoint at connection- * time, so this can be set dynamically... */ lws_strexp_init(&exp, (void *)h, lws_ss_exp_cb_metadata, ep, sizeof(ep)); if (lws_strexp_expand(&exp, h->policy->endpoint, strlen(h->policy->endpoint), &used_in, &used_out) != LSTRX_DONE) { lwsl_err("%s: address strexp failed\n", __func__); return LWSSSSRET_TX_DONT_SEND; } /* * ... in some cases, we might want the user to be able to override * some policy settings by what he provided in there. For example, * if he set the endpoint to "https://myendpoint.com:4443/mypath" it * might be quite convenient to override the policy to follow the info * that was given for at least server, port and the url path. */ _port = port = h->policy->port; _prot = prot = NULL; _ipath = ipath = ""; _ads = ads = ep; if (strchr(ep, ':') && !lws_parse_uri(ep, &_prot, &_ads, &_port, &_ipath)) { lwsl_debug("%s: using uri parse results '%s' '%s' %d '%s'\n", __func__, _prot, _ads, _port, _ipath); prot = _prot; ads = _ads; port = _port; ipath = _ipath; } memset(&i, 0, sizeof i); /* otherwise uninitialized garbage */ i.context = h->context; tls = !!(h->policy->flags & LWSSSPOLF_TLS); if (prot && (!strcmp(prot, "http") || !strcmp(prot, "ws") || !strcmp(prot, "mqtt"))) tls = 0; if (tls) { lwsl_info("%s: using tls\n", __func__); i.ssl_connection = LCCSCF_USE_SSL; if (!h->policy->trust.store) lwsl_info("%s: using platform trust store\n", __func__); else { i.vhost = lws_get_vhost_by_name(h->context, h->policy->trust.store->name); if (!i.vhost) { lwsl_err("%s: missing vh for policy %s\n", __func__, h->policy->trust.store->name); return -1; } } } if (h->policy->flags & LWSSSPOLF_WAKE_SUSPEND__VALIDITY) i.ssl_connection |= LCCSCF_WAKE_SUSPEND__VALIDITY; /* translate policy attributes to IP ToS flags */ if (h->policy->flags & LWSSSPOLF_ATTR_LOW_LATENCY) i.ssl_connection |= LCCSCF_IP_LOW_LATENCY; if (h->policy->flags & LWSSSPOLF_ATTR_HIGH_THROUGHPUT) i.ssl_connection |= LCCSCF_IP_HIGH_THROUGHPUT; if (h->policy->flags & LWSSSPOLF_ATTR_HIGH_RELIABILITY) i.ssl_connection |= LCCSCF_IP_HIGH_RELIABILITY; if (h->policy->flags & LWSSSPOLF_ATTR_LOW_COST) i.ssl_connection |= LCCSCF_IP_LOW_COST; if (h->policy->flags & LWSSSPOLF_PERF) /* collect conmon stats on this */ i.ssl_connection |= LCCSCF_CONMON; /* mark the connection with the streamtype priority from the policy */ i.priority = h->policy->priority; i.ssl_connection |= LCCSCF_SECSTREAM_CLIENT; if (conn_if_sspc_onw) { i.ssl_connection |= LCCSCF_SECSTREAM_PROXY_ONWARD; h->conn_if_sspc_onw = conn_if_sspc_onw; } i.address = ads; i.port = port; i.host = i.address; i.origin = i.address; i.opaque_user_data = h; i.seq = h->seq; i.retry_and_idle_policy = h->policy->retry_bo; i.sys_tls_client_cert = h->policy->client_cert; i.path = ipath; /* if this is not "", munge should use it instead of policy * url path */ ssp = ss_pcols[(int)h->policy->protocol]; if (!ssp) { lwsl_err("%s: unsupported protocol\n", __func__); return LWSSSSRET_TX_DONT_SEND; } i.alpn = ssp->alpn; /* * For http, we can get the method from the http object, override in * the protocol-specific munge callback below if not http */ i.method = h->policy->u.http.method; i.protocol = ssp->protocol->name; /* lws protocol name */ i.local_protocol_name = i.protocol; path = lws_malloc(h->context->max_http_header_data, __func__); if (!path) { lwsl_warn("%s: OOM on path prealloc\n", __func__); return LWSSSSRET_TX_DONT_SEND; } if (ssp->munge) /* eg, raw doesn't use; endpoint strexp already done */ ssp->munge(h, path, h->context->max_http_header_data, &i, &ct); i.pwsi = &h->wsi; #if defined(LWS_WITH_SSPLUGINS) if (h->policy->plugins[0] && h->policy->plugins[0]->munge) h->policy->plugins[0]->munge(h, path, h->context->max_http_header_data); #endif lwsl_info("%s: connecting %s, '%s' '%s' %s\n", __func__, i.method, i.alpn, i.address, i.path); #if defined(LWS_WITH_SYS_METRICS) /* possibly already hanging connect retry... */ if (!h->cal_txn.mt) lws_metrics_caliper_bind(h->cal_txn, h->context->mth_ss_conn); if (h->policy->streamtype) lws_metrics_tag_add(&h->cal_txn.mtags_owner, "ss", h->policy->streamtype); #endif h->txn_ok = 0; r = lws_ss_event_helper(h, LWSSSCS_CONNECTING); if (r) { lws_free(path); return r; } h->inside_connect = 1; h->pending_ret = LWSSSSRET_OK; wsi = lws_client_connect_via_info(&i); h->inside_connect = 0; lws_free(path); if (!wsi) { /* * We already found that we could not connect, without even * having to go around the event loop */ if (h->pending_ret) return h->pending_ret; if (h->prev_ss_state != LWSSSCS_UNREACHABLE && h->prev_ss_state != LWSSSCS_ALL_RETRIES_FAILED) { /* * blocking DNS failure can get to unreachable via * CCE, and unreachable can get to ALL_RETRIES_FAILED */ r = lws_ss_event_helper(h, LWSSSCS_UNREACHABLE); if (r) return r; r = lws_ss_backoff(h); if (r) return r; } return LWSSSSRET_TX_DONT_SEND; } return LWSSSSRET_OK; } lws_ss_state_return_t lws_ss_client_connect(lws_ss_handle_t *h) { lws_ss_state_return_t r; lws_service_assert_loop_thread(h->context, h->tsi); r = _lws_ss_client_connect(h, 0, 0); return r; } /* * Public API */ /* * Create either a stream or a sink */ int lws_ss_create(struct lws_context *context, int tsi, const lws_ss_info_t *ssi, void *opaque_user_data, lws_ss_handle_t **ppss, struct lws_sequencer *seq_owner, const char **ppayload_fmt) { struct lws_context_per_thread *pt = &context->pt[tsi]; const lws_ss_policy_t *pol; lws_ss_state_return_t r; lws_ss_metadata_t *smd; lws_ss_handle_t *h; size_t size; void **v; char *p; int n; lws_service_assert_loop_thread(context, tsi); #if defined(LWS_WITH_SECURE_STREAMS_CPP) pol = ssi->policy; if (!pol) { #endif #if defined(LWS_WITH_SYS_FAULT_INJECTION) lws_fi_ctx_t temp_fic; /* * We have to do a temp inherit from context to find out * early if we are supposed to inject a fault concealing * the policy */ memset(&temp_fic, 0, sizeof(temp_fic)); lws_xos_init(&temp_fic.xos, lws_xos(&context->fic.xos)); lws_fi_inherit_copy(&temp_fic, &context->fic, "ss", ssi->streamtype); if (lws_fi(&temp_fic, "ss_no_streamtype_policy")) pol = NULL; else pol = lws_ss_policy_lookup(context, ssi->streamtype); lws_fi_destroy(&temp_fic); #else pol = lws_ss_policy_lookup(context, ssi->streamtype); #endif if (!pol) { lwsl_cx_info(context, "unknown stream type %s", ssi->streamtype); return 1; } #if defined(LWS_WITH_SECURE_STREAMS_CPP) } #endif #if 0 if (ssi->flags & LWSSSINFLAGS_REGISTER_SINK) { /* * This can register a secure streams sink as well as normal * secure streams connections. If that's what's happening, * confirm the policy agrees that this streamtype should be * directed to a sink. */ if (!(pol->flags & LWSSSPOLF_LOCAL_SINK)) { /* * Caller wanted to create a sink for this streamtype, * but the policy does not agree the streamtype should * be routed to a local sink. */ lwsl_err("%s: %s policy does not allow local sink\n", __func__, ssi->streamtype); return 1; } } else { if (!(pol->flags & LWSSSPOLF_LOCAL_SINK)) { } // lws_dll2_foreach_safe(&pt->ss_owner, NULL, lws_ss_destroy_dll); } #endif /* * We overallocate and point to things in the overallocation... * * 1) the user_alloc from the stream info * 2) network auth plugin instantiation data * 3) stream auth plugin instantiation data * 4) as many metadata pointer structs as the policy tells * 5) the streamtype name (length is not aligned) * * ... when we come to destroy it, just one free to do. */ size = sizeof(*h) + ssi->user_alloc + (ssi->streamtype ? strlen(ssi->streamtype): 0) + 1; #if defined(LWS_WITH_SSPLUGINS) if (pol->plugins[0]) size += pol->plugins[0]->alloc; if (pol->plugins[1]) size += pol->plugins[1]->alloc; #endif size += pol->metadata_count * sizeof(lws_ss_metadata_t); h = lws_zalloc(size, __func__); if (!h) return 2; h->lc.log_cx = context->log_cx; if (ssi->sss_protocol_version) __lws_lc_tag(context, &context->lcg[LWSLCG_WSI_SS_CLIENT], &h->lc, "%s|v%u|%u", ssi->streamtype ? ssi->streamtype : "nostreamtype", (unsigned int)ssi->sss_protocol_version, (unsigned int)ssi->client_pid); else __lws_lc_tag(context, &context->lcg[LWSLCG_WSI_SS_CLIENT], &h->lc, "%s", ssi->streamtype ? ssi->streamtype : "nostreamtype"); #if defined(LWS_WITH_SYS_FAULT_INJECTION) h->fic.name = "ss"; lws_xos_init(&h->fic.xos, lws_xos(&context->fic.xos)); if (ssi->fic.fi_owner.count) lws_fi_import(&h->fic, &ssi->fic); lws_fi_inherit_copy(&h->fic, &context->fic, "ss", ssi->streamtype); #endif h->info = *ssi; h->policy = pol; h->context = context; h->tsi = (uint8_t)tsi; h->seq = seq_owner; if (h->info.flags & LWSSSINFLAGS_PROXIED) h->proxy_onward = 1; /* start of overallocated area */ p = (char *)(h + 1); /* set the handle pointer in the user data struct */ v = (void **)(p + ssi->handle_offset); *v = h; /* set the opaque user data in the user data struct */ v = (void **)(p + ssi->opaque_user_data_offset); *v = opaque_user_data; p += ssi->user_alloc; #if defined(LWS_WITH_SSPLUGINS) if (pol->plugins[0]) { h->nauthi = p; p += pol->plugins[0]->alloc; } if (pol->plugins[1]) { h->sauthi = p; p += pol->plugins[1]->alloc; } #endif if (pol->metadata_count) { h->metadata = (lws_ss_metadata_t *)p; p += pol->metadata_count * sizeof(lws_ss_metadata_t); lwsl_cx_info(context, "%s metadata count %d", pol->streamtype, pol->metadata_count); } smd = pol->metadata; for (n = 0; n < pol->metadata_count; n++) { h->metadata[n].name = smd->name; if (n + 1 == pol->metadata_count) h->metadata[n].next = NULL; else h->metadata[n].next = &h->metadata[n + 1]; smd = smd->next; } if (ssi->streamtype) memcpy(p, ssi->streamtype, strlen(ssi->streamtype) + 1); /* don't mark accepted ss as being the server */ if (ssi->flags & LWSSSINFLAGS_SERVER) h->info.flags &= (uint8_t)~LWSSSINFLAGS_SERVER; h->info.streamtype = p; lws_pt_lock(pt, __func__); lws_dll2_add_head(&h->list, &pt->ss_owner); lws_pt_unlock(pt); if (ppss) *ppss = h; if (ppayload_fmt) *ppayload_fmt = pol->payload_fmt; if (ssi->flags & LWSSSINFLAGS_SERVER) /* * return early for accepted connection flow */ return 0; #if defined(LWS_WITH_SYS_SMD) /* * For a local Secure Streams connection */ if (!(ssi->flags & LWSSSINFLAGS_PROXIED) && pol == &pol_smd) { /* * So he has asked to be wired up to SMD over a SS link. * Register him as an smd participant in his own right. * * Just for this case, ssi->manual_initial_tx_credit is used * to set the rx class mask (this is part of the SS serialization * format as well) */ h->u.smd.smd_peer = lws_smd_register(context, h, 0, (lws_smd_class_t)ssi->manual_initial_tx_credit, lws_smd_ss_cb); if (!h->u.smd.smd_peer || lws_fi(&h->fic, "ss_create_smd")) goto fail_creation; lwsl_cx_info(context, "registered SS SMD"); } #endif #if defined(LWS_WITH_SERVER) if (h->policy->flags & LWSSSPOLF_SERVER) { const struct lws_protocols *pprot[3], **ppp = &pprot[0]; struct lws_context_creation_info i; struct lws_vhost *vho = NULL; lwsl_cx_info(context, "creating server"); if (h->policy->endpoint && h->policy->endpoint[0] == '!') { /* * There's already a vhost existing that we want to * bind to, we don't have to specify and create one. * * The vhost must enable any protocols that we want. */ vho = lws_get_vhost_by_name(context, &h->policy->endpoint[1]); if (!vho || lws_fi(&h->fic, "ss_create_vhost")) { lwsl_err("%s: no vhost %s\n", __func__, &h->policy->endpoint[1]); goto fail_creation; } goto extant; } /* * This streamtype represents a server, we're being asked to * instantiate a corresponding vhost for it */ memset(&i, 0, sizeof i); i.iface = h->policy->endpoint; i.vhost_name = h->policy->streamtype; i.port = h->policy->port; if (i.iface && i.iface[0] == '+') { i.iface++; i.options |= LWS_SERVER_OPTION_UNIX_SOCK; } if (!ss_pcols[h->policy->protocol] || lws_fi(&h->fic, "ss_create_pcol")) { lwsl_err("%s: unsupp protocol", __func__); goto fail_creation; } *ppp++ = ss_pcols[h->policy->protocol]->protocol; #if defined(LWS_ROLE_WS) if (h->policy->u.http.u.ws.subprotocol) /* * He names a ws subprotocol, ie, we want to support * ss-ws protocol in this vhost */ *ppp++ = &protocol_secstream_ws; #endif *ppp = NULL; i.pprotocols = pprot; #if defined(LWS_WITH_TLS) if (h->policy->flags & LWSSSPOLF_TLS) { i.options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; i.server_ssl_cert_mem = h->policy->trust.server.cert->ca_der; i.server_ssl_cert_mem_len = (unsigned int) h->policy->trust.server.cert->ca_der_len; i.server_ssl_private_key_mem = h->policy->trust.server.key->ca_der; i.server_ssl_private_key_mem_len = (unsigned int) h->policy->trust.server.key->ca_der_len; } #endif if (!lws_fi(&h->fic, "ss_srv_vh_fail")) vho = lws_create_vhost(context, &i); else vho = NULL; if (!vho) { lwsl_cx_err(context, "failed to create vh"); goto fail_creation; } extant: /* * Mark this vhost as having to apply ss server semantics to * any incoming accepted connection */ vho->ss_handle = h; r = lws_ss_event_helper(h, LWSSSCS_CREATING); lwsl_cx_info(context, "CREATING returned status %d", (int)r); if (r == LWSSSSRET_DESTROY_ME || lws_fi(&h->fic, "ss_create_destroy_me")) goto fail_creation; lwsl_cx_notice(context, "created server %s", h->policy->streamtype); return 0; } #endif #if defined(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY) /* * For static policy case, dynamically ref / instantiate the related * trust store and vhost. We do it by logical ss rather than connection * because we don't want to expose the latency of creating the x.509 * trust store at the first connection. * * But it might be given the tls linkup takes time anyway, it can move * to the ss connect code instead. */ if (!lws_ss_policy_ref_trust_store(context, h->policy, 1 /* do the ref */) || lws_fi(&h->fic, "ss_create_no_ts")) { lwsl_err("%s: unable to get vhost / trust store\n", __func__); goto fail_creation; } #else #if defined(LWS_WITH_SECURE_STREAMS_CPP) if (!ssi->streamtype && !lws_ss_policy_ref_trust_store(context, h->policy, 1 /* do the ref */)) { lwsl_err("%s: unable to get vhost / trust store\n", __func__); goto fail_creation; } #endif #endif r = lws_ss_event_helper(h, LWSSSCS_CREATING); lwsl_ss_info(h, "CREATING returned status %d", (int)r); if (r == LWSSSSRET_DESTROY_ME || lws_fi(&h->fic, "ss_create_destroy_me")) goto fail_creation; #if defined(LWS_WITH_SYS_SMD) if (!(ssi->flags & LWSSSINFLAGS_PROXIED) && pol == &pol_smd) { r = lws_ss_event_helper(h, LWSSSCS_CONNECTING); if (r || lws_fi(&h->fic, "ss_create_smd_1")) goto fail_creation; r = lws_ss_event_helper(h, LWSSSCS_CONNECTED); if (r || lws_fi(&h->fic, "ss_create_smd_2")) goto fail_creation; } #endif if (!(ssi->flags & LWSSSINFLAGS_REGISTER_SINK) && ((h->policy->flags & LWSSSPOLF_NAILED_UP) #if defined(LWS_WITH_SYS_SMD) || ((h->policy == &pol_smd) //&& //(ssi->flags & LWSSSINFLAGS_PROXIED)) ) #endif )) { r = _lws_ss_client_connect(h, 0, 0); if (lws_fi(&h->fic, "ss_create_conn")) r = LWSSSSRET_DESTROY_ME; switch (r) { case LWSSSSRET_OK: break; case LWSSSSRET_TX_DONT_SEND: case LWSSSSRET_DISCONNECT_ME: if (lws_ss_backoff(h) == LWSSSSRET_DESTROY_ME) goto fail_creation; break; case LWSSSSRET_DESTROY_ME: goto fail_creation; } } return 0; fail_creation: if (ppss) *ppss = NULL; lws_ss_destroy(&h); return 1; } void * lws_ss_to_user_object(struct lws_ss_handle *h) { return (void *)(h + 1); } void lws_ss_destroy(lws_ss_handle_t **ppss) { struct lws_context_per_thread *pt; #if defined(LWS_WITH_SERVER) struct lws_vhost *v = NULL; #endif lws_ss_handle_t *h = *ppss; lws_ss_metadata_t *pmd; if (!h) return; lws_service_assert_loop_thread(h->context, h->tsi); if (h == h->h_in_svc) { lwsl_err("%s: illegal destroy, return LWSSSSRET_DESTROY_ME instead\n", __func__); assert(0); return; } if (h->destroying) { lwsl_info("%s: reentrant destroy\n", __func__); return; } h->destroying = 1; #if defined(LWS_WITH_CONMON) if (h->conmon_json) lws_free_set_NULL(h->conmon_json); #endif if (h->wsi) { /* * Don't let the wsi point to us any more, * we (the ss object bound to the wsi) are going away now */ lws_set_opaque_user_data(h->wsi, NULL); lws_set_timeout(h->wsi, 1, LWS_TO_KILL_SYNC); } /* * if we bound an smd registration to the SS, unregister it */ #if defined(LWS_WITH_SYS_SMD) if (h->policy == &pol_smd) { lws_sul_cancel(&h->u.smd.sul_write); if (h->u.smd.smd_peer) { lws_smd_unregister(h->u.smd.smd_peer); h->u.smd.smd_peer = NULL; } } #endif pt = &h->context->pt[h->tsi]; lws_pt_lock(pt, __func__); *ppss = NULL; lws_dll2_remove(&h->list); #if defined(LWS_WITH_SERVER) lws_dll2_remove(&h->cli_list); #endif lws_dll2_remove(&h->to_list); lws_sul_cancel(&h->sul_timeout); /* * for lss, DESTROYING deletes the C++ lss object, making the * self-defined h->policy radioactive */ #if defined(LWS_WITH_SERVER) if (h->policy && (h->policy->flags & LWSSSPOLF_SERVER)) v = lws_get_vhost_by_name(h->context, h->policy->streamtype); #endif /* * Since we also come here to unpick create, it's possible we failed * the creation before issuing any states, even CREATING. We should * only issue cleanup states on destroy if we previously got as far as * issuing CREATING. */ if (h->prev_ss_state) { if (h->ss_dangling_connected) (void)lws_ss_event_helper(h, LWSSSCS_DISCONNECTED); (void)lws_ss_event_helper(h, LWSSSCS_DESTROYING); } lws_pt_unlock(pt); /* in proxy case, metadata value on heap may need cleaning up */ pmd = h->metadata; while (pmd) { lwsl_info("%s: pmd %p\n", __func__, pmd); if (pmd->value_on_lws_heap) lws_free_set_NULL(pmd->value__may_own_heap); pmd = pmd->next; } #if defined(LWS_WITH_SS_DIRECT_PROTOCOL_STR) { lws_ss_metadata_t *imd; pmd = h->instant_metadata; while (pmd) { imd = pmd; pmd = pmd->next; lwsl_info("%s: instant md %p\n", __func__, imd); lws_free(imd); } h->instant_metadata = NULL; if (h->imd_ac) lwsac_free(&h->imd_ac); } #endif lws_sul_cancel(&h->sul); #if defined(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY) /* * For static policy case, dynamically ref / instantiate the related * trust store and vhost. We do it by logical ss rather than connection * because we don't want to expose the latency of creating the x.509 * trust store at the first connection. * * But it might be given the tls linkup takes time anyway, it can move * to the ss connect code instead. */ if (h->policy) lws_ss_policy_unref_trust_store(h->context, h->policy); #else #if defined(LWS_WITH_SECURE_STREAMS_CPP) if (!h->info.streamtype || !*(h->info.streamtype)) lws_ss_policy_unref_trust_store(h->context, h->policy); #endif #endif #if defined(LWS_WITH_SERVER) if (v) /* * For server, the policy describes a vhost that implements the * server, when we take down the ss, we take down the related * vhost (if it got that far) */ lws_vhost_destroy(v); #endif #if defined(LWS_WITH_SYS_FAULT_INJECTION) lws_fi_destroy(&h->fic); #endif #if defined(LWS_WITH_SYS_METRICS) /* * If any hanging caliper measurement, dump it, and free any tags */ lws_metrics_caliper_report_hist(h->cal_txn, (struct lws *)NULL); #endif lws_sul_cancel(&h->sul_timeout); /* confirm no sul left scheduled in handle or user allocation object */ lws_sul_debug_zombies(h->context, h, sizeof(*h) + h->info.user_alloc, __func__); __lws_lc_untag(h->context, &h->lc); lws_explicit_bzero((void *)h, sizeof(*h) + h->info.user_alloc); lws_free_set_NULL(h); } #if defined(LWS_WITH_SERVER) void lws_ss_server_ack(struct lws_ss_handle *h, int nack) { h->txn_resp = nack; h->txn_resp_set = 1; } void lws_ss_server_foreach_client(struct lws_ss_handle *h, lws_sssfec_cb cb, void *arg) { lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, h->src_list.head) { struct lws_ss_handle *h = lws_container_of(d, struct lws_ss_handle, cli_list); cb(h, arg); } lws_end_foreach_dll_safe(d, d1); } #endif lws_ss_state_return_t lws_ss_request_tx(lws_ss_handle_t *h) { lws_ss_state_return_t r; r = _lws_ss_request_tx(h); return r; } lws_ss_state_return_t _lws_ss_request_tx(lws_ss_handle_t *h) { lws_ss_state_return_t r; // lwsl_notice("%s: h %p, wsi %p\n", __func__, h, h->wsi); lws_service_assert_loop_thread(h->context, h->tsi); if (h->wsi) { lws_callback_on_writable(h->wsi); return LWSSSSRET_OK; } if (!h->policy) { /* avoid crash */ lwsl_err("%s: null policy\n", __func__); return LWSSSSRET_OK; } if (h->policy->flags & LWSSSPOLF_SERVER) return LWSSSSRET_OK; /* * there's currently no wsi / connection associated with the ss handle */ #if defined(LWS_WITH_SYS_SMD) if (h->policy == &pol_smd) { /* * He's an _lws_smd... and no wsi... since we're just going * to queue it, we could call his tx() right here, but rather * than surprise him let's set a sul to do it next time around * the event loop */ lws_sul_schedule(h->context, 0, &h->u.smd.sul_write, lws_ss_smd_tx_cb, 1); return LWSSSSRET_OK; } #endif if (h->seqstate != SSSEQ_IDLE && h->seqstate != SSSEQ_DO_RETRY) return LWSSSSRET_OK; h->seqstate = SSSEQ_TRY_CONNECT; if (h->prev_ss_state != LWSSSCS_POLL) { /* possible if we were created * before we could action it */ r = lws_ss_event_helper(h, LWSSSCS_POLL); if (r) return r; } /* * Retries operate via lws_ss_request_tx(), explicitly ask for a * reconnection to clear the retry limit */ r = _lws_ss_client_connect(h, 1, 0); if (r == LWSSSSRET_DESTROY_ME) return r; if (r) return lws_ss_backoff(h); return LWSSSSRET_OK; } lws_ss_state_return_t lws_ss_request_tx_len(lws_ss_handle_t *h, unsigned long len) { lws_service_assert_loop_thread(h->context, h->tsi); if (h->wsi && h->policy && (h->policy->protocol == LWSSSP_H1 || h->policy->protocol == LWSSSP_H2 || h->policy->protocol == LWSSSP_WS)) h->wsi->http.writeable_len = len; else h->writeable_len = len; return lws_ss_request_tx(h); } /* * private helpers */ /* used on context destroy when iterating listed lws_ss on a pt */ int lws_ss_destroy_dll(struct lws_dll2 *d, void *user) { lws_ss_handle_t *h = lws_container_of(d, lws_ss_handle_t, list); lws_ss_destroy(&h); return 0; } int lws_ss_cancel_notify_dll(struct lws_dll2 *d, void *user) { lws_ss_handle_t *h = lws_container_of(d, lws_ss_handle_t, list); if (lws_ss_event_helper(h, LWSSSCS_EVENT_WAIT_CANCELLED)) lwsl_warn("%s: cancel event ignores return\n", __func__); return 0; } struct lws_sequencer * lws_ss_get_sequencer(lws_ss_handle_t *h) { return h->seq; } struct lws_context * lws_ss_get_context(struct lws_ss_handle *h) { return h->context; } const char * lws_ss_rideshare(struct lws_ss_handle *h) { if (!h->rideshare) return h->policy->streamtype; return h->rideshare->streamtype; } int lws_ss_add_peer_tx_credit(struct lws_ss_handle *h, int32_t bump) { const struct ss_pcols *ssp; lws_service_assert_loop_thread(h->context, h->tsi); ssp = ss_pcols[(int)h->policy->protocol]; if (h->wsi && ssp && ssp->tx_cr_add) return ssp->tx_cr_add(h, bump); return 0; } int lws_ss_get_est_peer_tx_credit(struct lws_ss_handle *h) { const struct ss_pcols *ssp; lws_service_assert_loop_thread(h->context, h->tsi); ssp = ss_pcols[(int)h->policy->protocol]; if (h->wsi && ssp && ssp->tx_cr_add) return ssp->tx_cr_est(h); return 0; } /* * protocol-independent handler for ss timeout */ static void lws_ss_to_cb(lws_sorted_usec_list_t *sul) { lws_ss_handle_t *h = lws_container_of(sul, lws_ss_handle_t, sul_timeout); lws_ss_state_return_t r; lwsl_info("%s: %s timeout fired\n", __func__, lws_ss_tag(h)); r = lws_ss_event_helper(h, LWSSSCS_TIMEOUT); if (r != LWSSSSRET_DISCONNECT_ME && r != LWSSSSRET_DESTROY_ME) return; if (h->wsi) lws_set_timeout(h->wsi, 1, LWS_TO_KILL_ASYNC); _lws_ss_handle_state_ret_CAN_DESTROY_HANDLE(r, h->wsi, &h); } void lws_ss_start_timeout(struct lws_ss_handle *h, unsigned int timeout_ms) { lws_service_assert_loop_thread(h->context, h->tsi); if (!timeout_ms && !h->policy->timeout_ms) return; lws_sul_schedule(h->context, 0, &h->sul_timeout, lws_ss_to_cb, (timeout_ms ? timeout_ms : h->policy->timeout_ms) * LWS_US_PER_MS); } void lws_ss_cancel_timeout(struct lws_ss_handle *h) { lws_service_assert_loop_thread(h->context, h->tsi); lws_sul_cancel(&h->sul_timeout); } void lws_ss_change_handlers(struct lws_ss_handle *h, lws_ss_state_return_t (*rx)(void *userobj, const uint8_t *buf, size_t len, int flags), lws_ss_state_return_t (*tx)(void *userobj, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len, int *flags), lws_ss_state_return_t (*state)(void *userobj, void *h_src /* ss handle type */, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack)) { if (rx) h->info.rx = rx; if (tx) h->info.tx = tx; if (state) h->info.state = state; } const char * lws_ss_tag(struct lws_ss_handle *h) { if (!h) return "[null ss]"; return lws_lc_tag(&h->lc); } struct lws_log_cx * lwsl_ss_get_cx(struct lws_ss_handle *ss) { if (!ss) return NULL; return ss->lc.log_cx; } void lws_log_prepend_ss(struct lws_log_cx *cx, void *obj, char **p, char *e) { struct lws_ss_handle *h = (struct lws_ss_handle *)obj; *p += lws_snprintf(*p, lws_ptr_diff_size_t(e, (*p)), "%s: ", lws_ss_tag(h)); } #if defined(_DEBUG) void lws_ss_assert_extant(struct lws_context *cx, int tsi, struct lws_ss_handle *h) { struct lws_context_per_thread *pt = &cx->pt[tsi]; lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, pt->ss_owner.head) { struct lws_ss_handle *h1 = lws_container_of(d, struct lws_ss_handle, list); if (h == h1) return; /* okay */ } lws_end_foreach_dll_safe(d, d1); /* * The ss handle is not listed in the pt ss handle owner... */ assert(0); } #endif libwebsockets-4.3.5/lib/secure-streams/system/000077500000000000000000000000001476025525100214265ustar00rootroot00000000000000libwebsockets-4.3.5/lib/secure-streams/system/auth-api.amazon.com/000077500000000000000000000000001476025525100251775ustar00rootroot00000000000000libwebsockets-4.3.5/lib/secure-streams/system/auth-api.amazon.com/auth.c000066400000000000000000000174271476025525100263170ustar00rootroot00000000000000/* * LWA auth support for Secure Streams * * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include typedef struct ss_api_amazon_auth { struct lws_ss_handle *ss; void *opaque_data; /* ... application specific state ... */ struct lejp_ctx jctx; size_t pos; int expires_secs; } ss_api_amazon_auth_t; static const char * const lejp_tokens_lwa[] = { "access_token", "expires_in", }; typedef enum { LSSPPT_ACCESS_TOKEN, LSSPPT_EXPIRES_IN, } lejp_tokens_t; enum { AUTH_IDX_LWA, AUTH_IDX_ROOT, }; static void lws_ss_sys_auth_api_amazon_com_kick(lws_sorted_usec_list_t *sul) { struct lws_context *context = lws_container_of(sul, struct lws_context, sul_api_amazon_com_kick); lws_state_transition_steps(&context->mgr_system, LWS_SYSTATE_OPERATIONAL); } static void lws_ss_sys_auth_api_amazon_com_renew(lws_sorted_usec_list_t *sul) { struct lws_context *context = lws_container_of(sul, struct lws_context, sul_api_amazon_com); lws_ss_sys_auth_api_amazon_com(context); } static signed char auth_api_amazon_com_parser_cb(struct lejp_ctx *ctx, char reason) { ss_api_amazon_auth_t *m = (ss_api_amazon_auth_t *)ctx->user; struct lws_context *context = (struct lws_context *)m->opaque_data; lws_system_blob_t *blob; if (!(reason & LEJP_FLAG_CB_IS_VALUE) || !ctx->path_match) return 0; switch (ctx->path_match - 1) { case LSSPPT_ACCESS_TOKEN: if (!ctx->npos) break; blob = lws_system_get_blob(context, LWS_SYSBLOB_TYPE_AUTH, AUTH_IDX_LWA); if (!blob) return -1; if (lws_system_blob_heap_append(blob, (const uint8_t *)ctx->buf, ctx->npos)) { lwsl_err("%s: unable to store auth token\n", __func__); return -1; } break; case LSSPPT_EXPIRES_IN: m->expires_secs = atoi(ctx->buf); lws_sul_schedule(context, 0, &context->sul_api_amazon_com, lws_ss_sys_auth_api_amazon_com_renew, (lws_usec_t)m->expires_secs * LWS_US_PER_SEC); break; } return 0; } /* secure streams payload interface */ static lws_ss_state_return_t ss_api_amazon_auth_rx(void *userobj, const uint8_t *buf, size_t len, int flags) { ss_api_amazon_auth_t *m = (ss_api_amazon_auth_t *)userobj; struct lws_context *context = (struct lws_context *)m->opaque_data; lws_system_blob_t *ab; #if !defined(LWS_WITH_NO_LOGS) size_t total; #endif int n; ab = lws_system_get_blob(context, LWS_SYSBLOB_TYPE_AUTH, AUTH_IDX_LWA); /* coverity */ if (!ab) return LWSSSSRET_DISCONNECT_ME; if (buf) { if (flags & LWSSS_FLAG_SOM) { lejp_construct(&m->jctx, auth_api_amazon_com_parser_cb, m, lejp_tokens_lwa, LWS_ARRAY_SIZE(lejp_tokens_lwa)); lws_system_blob_heap_empty(ab); } n = lejp_parse(&m->jctx, buf, (int)len); if (n < 0) { lejp_destruct(&m->jctx); lws_system_blob_destroy( lws_system_get_blob(context, LWS_SYSBLOB_TYPE_AUTH, AUTH_IDX_LWA)); return LWSSSSRET_DISCONNECT_ME; } } if (!(flags & LWSSS_FLAG_EOM)) return LWSSSSRET_OK; /* we should have the auth token now */ #if !defined(LWS_WITH_NO_LOGS) total = lws_system_blob_get_size(ab); lwsl_notice("%s: acquired %u-byte api.amazon.com auth token, exp %ds\n", __func__, (unsigned int)total, m->expires_secs); #endif lejp_destruct(&m->jctx); /* we move the system state at auth connection close */ return LWSSSSRET_DISCONNECT_ME; } static lws_ss_state_return_t ss_api_amazon_auth_tx(void *userobj, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len, int *flags) { ss_api_amazon_auth_t *m = (ss_api_amazon_auth_t *)userobj; struct lws_context *context = (struct lws_context *)m->opaque_data; lws_system_blob_t *ab; size_t total; int n; /* * We send out auth slot AUTH_IDX_ROOT, it's the LWA user / device * identity token */ ab = lws_system_get_blob(context, LWS_SYSBLOB_TYPE_AUTH, AUTH_IDX_ROOT); if (!ab) return LWSSSSRET_DESTROY_ME; total = lws_system_blob_get_size(ab); n = lws_system_blob_get(ab, buf, len, m->pos); if (n < 0) return LWSSSSRET_TX_DONT_SEND; if (!m->pos) *flags |= LWSSS_FLAG_SOM; m->pos += *len; if (m->pos == total) { *flags |= LWSSS_FLAG_EOM; m->pos = 0; /* for next time */ } return LWSSSSRET_OK; } static lws_ss_state_return_t ss_api_amazon_auth_state(void *userobj, void *sh, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { ss_api_amazon_auth_t *m = (ss_api_amazon_auth_t *)userobj; struct lws_context *context = (struct lws_context *)m->opaque_data; lws_system_blob_t *ab; size_t s; lwsl_info("%s: %s, ord 0x%x\n", __func__, lws_ss_state_name((int)state), (unsigned int)ack); ab = lws_system_get_blob(context, LWS_SYSBLOB_TYPE_AUTH, AUTH_IDX_ROOT); /* coverity */ if (!ab) return LWSSSSRET_DESTROY_ME; switch (state) { case LWSSSCS_CREATING: //if (lws_ss_set_metadata(m->ss, "ctype", "application/json", 16)) // return LWSSSSRET_DESTROY_ME; /* fallthru */ case LWSSSCS_CONNECTING: s = lws_system_blob_get_size(ab); if (!s) lwsl_debug("%s: no auth blob\n", __func__); m->pos = 0; return lws_ss_request_tx_len(m->ss, (unsigned long)s); case LWSSSCS_DISCONNECTED: /* * We defer moving the system state forward until we have * closed our connection + tls for the auth action... this is * because on small systems, we need that memory recovered * before we can make another connection subsequently. * * At this point, we're ultimately being called from within * the wsi close process, the tls tunnel is not freed yet. * Use a sul to actually do it next time around the event loop * when the close process for the auth wsi has completed and * the related tls is already freed. */ s = lws_system_blob_get_size(ab); if (s && context->mgr_system.state != LWS_SYSTATE_OPERATIONAL) lws_sul_schedule(context, 0, &context->sul_api_amazon_com_kick, lws_ss_sys_auth_api_amazon_com_kick, 1); context->hss_auth = NULL; return LWSSSSRET_DESTROY_ME; default: break; } return LWSSSSRET_OK; } int lws_ss_sys_auth_api_amazon_com(struct lws_context *context) { lws_ss_info_t ssi; if (context->hss_auth) /* already exists */ return 0; /* We're making an outgoing secure stream ourselves */ memset(&ssi, 0, sizeof(ssi)); ssi.handle_offset = offsetof(ss_api_amazon_auth_t, ss); ssi.opaque_user_data_offset = offsetof(ss_api_amazon_auth_t, opaque_data); ssi.rx = ss_api_amazon_auth_rx; ssi.tx = ss_api_amazon_auth_tx; ssi.state = ss_api_amazon_auth_state; ssi.user_alloc = sizeof(ss_api_amazon_auth_t); ssi.streamtype = "api_amazon_com_auth"; if (lws_ss_create(context, 0, &ssi, context, &context->hss_auth, NULL, NULL)) { lwsl_info("%s: Create LWA auth ss failed (policy?)\n", __func__); return 1; } return 0; } libwebsockets-4.3.5/lib/secure-streams/system/auth-sigv4/000077500000000000000000000000001476025525100234215ustar00rootroot00000000000000libwebsockets-4.3.5/lib/secure-streams/system/auth-sigv4/sign.c000066400000000000000000000333211476025525100245270ustar00rootroot00000000000000/* * Sigv4 support for Secure Streams * * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2020 Andy Green * securestreams-dev@amazon.com * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include struct sigv4_header { const char * name; const char * value; }; #define MAX_HEADER_NUM 8 struct sigv4 { struct sigv4_header headers[MAX_HEADER_NUM]; uint8_t hnum; char ymd[10]; /*YYYYMMDD*/ const char *timestamp; const char *payload_hash; const char *region; const char *service; }; static const uint8_t blob_idx[] = { LWS_SYSBLOB_TYPE_EXT_AUTH1, LWS_SYSBLOB_TYPE_EXT_AUTH2, LWS_SYSBLOB_TYPE_EXT_AUTH3, LWS_SYSBLOB_TYPE_EXT_AUTH4, }; enum { LWS_SS_SIGV4_KEYID, LWS_SS_SIGV4_KEY, LWS_SS_SIGV4_BLOB_SLOTS }; static inline int add_header(struct sigv4 *s, const char *name, const char *value) { if (s->hnum >= MAX_HEADER_NUM) { lwsl_err("%s too many sigv4 headers\n", __func__); return -1; } s->headers[s->hnum].name = name; s->headers[s->hnum].value = value; s->hnum++; if (!strncmp(name, "x-amz-content-sha256", strlen("x-amz-content-sha256"))) s->payload_hash = value; if (!strncmp(name, "x-amz-date", strlen("x-amz-date"))) { s->timestamp = value; strncpy(s->ymd, value, 8); } return 0; } static int cmp_header(const void * a, const void * b) { return strcmp(((struct sigv4_header *)a)->name, ((struct sigv4_header *)b)->name); } static int init_sigv4(struct lws *wsi, struct lws_ss_handle *h, struct sigv4 *s) { lws_ss_metadata_t *polmd = h->policy->metadata; int m = 0; add_header(s, "host:", lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_HOST)); while (polmd) { if (polmd->value__may_own_heap && ((uint8_t *)polmd->value__may_own_heap)[0] && h->metadata[m].value__may_own_heap) { /* consider all headers start with "x-amz-" need to be signed */ if (!strncmp(polmd->value__may_own_heap, "x-amz-", strlen("x-amz-"))) { if (add_header(s, polmd->value__may_own_heap, h->metadata[m].value__may_own_heap)) return -1; } } if (!strcmp(h->metadata[m].name, h->policy->aws_region) && h->metadata[m].value__may_own_heap) s->region = h->metadata[m].value__may_own_heap; if (!strcmp(h->metadata[m].name, h->policy->aws_service) && h->metadata[m].value__may_own_heap) s->service = h->metadata[m].value__may_own_heap; m++; polmd = polmd->next; } qsort(s->headers, s->hnum, sizeof(struct sigv4_header), cmp_header); #if 0 do { int i; for (i= 0; ihnum; i++) lwsl_debug("%s hdr %s %s\n", __func__, s->headers[i].name, s->headers[i].value); lwsl_debug("%s service: %s region: %s\n", __func__, s->service, s->region); } while(0); #endif return 0; } static void bin2hex(uint8_t *in, size_t len, char *out) { static const char *hex = "0123456789abcdef"; size_t n; for (n = 0; n < len; n++) { *out++ = hex[(in[n] >> 4) & 0xf]; *out++ = hex[in[n] & 15]; } *out = '\0'; } static int hmacsha256(const uint8_t *key, size_t keylen, const uint8_t *txt, size_t txtlen, uint8_t *digest) { struct lws_genhmac_ctx hmacctx; if (lws_genhmac_init(&hmacctx, LWS_GENHMAC_TYPE_SHA256, key, keylen)) return -1; if (lws_genhmac_update(&hmacctx, txt, txtlen)) { lwsl_err("%s: hmac computation failed\n", __func__); lws_genhmac_destroy(&hmacctx, NULL); return -1; } if (lws_genhmac_destroy(&hmacctx, digest)) { lwsl_err("%s: problem destroying hmac\n", __func__); return -1; } return 0; } /* cut the last byte of the str */ static inline int hash_update_bite_str(struct lws_genhash_ctx *ctx, const char * str) { int ret = 0; if ((ret = lws_genhash_update(ctx, (void *)str, strlen(str)-1))) { lws_genhash_destroy(ctx, NULL); lwsl_err("%s err %d line \n", __func__, ret); } return ret; } static inline int hash_update_str(struct lws_genhash_ctx *ctx, const char * str) { int ret = 0; if ((ret = lws_genhash_update(ctx, (void *)str, strlen(str)))) { lws_genhash_destroy(ctx, NULL); lwsl_err("%s err %d \n", __func__, ret); } return ret; } static int build_sign_string(struct lws *wsi, char *buf, size_t bufsz, struct lws_ss_handle *h, struct sigv4 *s) { char hash[65], *end = &buf[bufsz - 1], *start; struct lws_genhash_ctx hash_ctx; uint8_t hash_bin[32]; int i, ret = 0; start = buf; if ((ret = lws_genhash_init(&hash_ctx, LWS_GENHASH_TYPE_SHA256))) { lws_genhash_destroy(&hash_ctx, NULL); lwsl_err("%s genhash init err %d \n", __func__, ret); return -1; } /* * hash canonical_request */ if (hash_update_str(&hash_ctx, h->policy->u.http.method) || hash_update_str(&hash_ctx, "\n")) return -1; if (hash_update_str(&hash_ctx, lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_URI)) || hash_update_str(&hash_ctx, "\n")) return -1; /* TODO, append query string */ if (hash_update_str(&hash_ctx, "\n")) return -1; for (i = 0; i < s->hnum; i++) { if (hash_update_str(&hash_ctx, s->headers[i].name) || hash_update_str(&hash_ctx, s->headers[i].value) || hash_update_str(&hash_ctx, "\n")) return -1; } if (hash_update_str(&hash_ctx, "\n")) return -1; for (i = 0; i < s->hnum-1; i++) { if (hash_update_bite_str(&hash_ctx, s->headers[i].name) || hash_update_str(&hash_ctx, ";")) return -1; } if (hash_update_bite_str(&hash_ctx, s->headers[i].name) || hash_update_str(&hash_ctx, "\n") || hash_update_str(&hash_ctx, s->payload_hash)) return -1; if ((ret = lws_genhash_destroy(&hash_ctx, hash_bin))) { lws_genhash_destroy(&hash_ctx, NULL); lwsl_err("%s lws_genhash error \n", __func__); return -1; } bin2hex(hash_bin, sizeof(hash_bin), hash); /* * build sign string like the following * * "AWS4-HMAC-SHA256" + "\n" + * timeStampISO8601Format + "\n" + * date.Format() + "/" + + "/" + + "/aws4_request" + "\n" + * Hex(SHA256Hash()) */ buf = start; buf += lws_snprintf(buf, lws_ptr_diff_size_t(end, buf), "%s\n", "AWS4-HMAC-SHA256"); buf += lws_snprintf(buf, lws_ptr_diff_size_t(end, buf), "%s\n", s->timestamp); buf += lws_snprintf(buf, lws_ptr_diff_size_t(end, buf), "%s/%s/%s/%s\n", s->ymd, s->region, s->service, "aws4_request"); buf += lws_snprintf(buf, lws_ptr_diff_size_t(end, buf), "%s", hash); *buf++ = '\0'; assert(buf <= start + bufsz); return 0; } /* * DateKey = HMAC-SHA256("AWS4"+"", "") * DateRegionKey = HMAC-SHA256(, "") * DateRegionServiceKey = HMAC-SHA256(, "") * SigningKey = HMAC-SHA256(, "aws4_request") */ static int calc_signing_key(struct lws *wsi, struct lws_ss_handle *h, struct sigv4 *s, uint8_t *sign_key) { uint8_t key[128], date_key[32], and_region_key[32], and_service_key[32], *kb; lws_system_blob_t *ab; size_t keylen; int n; ab = lws_system_get_blob(wsi->a.context, blob_idx[h->policy->auth->blob_index], LWS_SS_SIGV4_KEY); if (!ab) return -1; kb = key; *kb++ = 'A'; *kb++ = 'W'; *kb++ = 'S'; *kb++ = '4'; keylen = sizeof(key) - 4; if (lws_system_blob_get_size(ab) > keylen - 1) return -1; n = lws_system_blob_get(ab, kb, &keylen, 0); if (n < 0) return -1; kb[keylen] = '\0'; hmacsha256((const uint8_t *)key, strlen((const char *)key), (const uint8_t *)s->ymd, strlen(s->ymd), date_key); hmacsha256(date_key, sizeof(date_key), (const uint8_t *)s->region, strlen(s->region), and_region_key); hmacsha256(and_region_key, sizeof(and_region_key), (const uint8_t *)s->service, strlen(s->service), and_service_key); hmacsha256(and_service_key, sizeof(and_service_key), (uint8_t *)"aws4_request", strlen("aws4_request"), sign_key); return 0; } /* Sample auth string: * * 'Authorization: AWS4-HMAC-SHA256 Credential=AKIAVHWASOFE7TJ7ZUQY/20200731/us-west-2/s3/aws4_request, * SignedHeaders=host;x-amz-content-sha256;x-amz-date, \ * Signature=ad9fb75ff3b46c7990e3e8f090abfdd6c01fd67761a517111694377e20698377' */ static int build_auth_string(struct lws *wsi, char * buf, size_t bufsz, struct lws_ss_handle *h, struct sigv4 *s, uint8_t *signature_bin) { char *start = buf, *end = &buf[bufsz - 1]; char *c; lws_system_blob_t *ab; size_t keyidlen = 128; // max keyid len is 128 int n; buf += lws_snprintf(buf, lws_ptr_diff_size_t(end, buf), "%s", "AWS4-HMAC-SHA256 "); ab = lws_system_get_blob(wsi->a.context, blob_idx[h->policy->auth->blob_index], LWS_SS_SIGV4_KEYID); if (!ab) return -1; buf += lws_snprintf(buf, lws_ptr_diff_size_t(end, buf), "%s", "Credential="); n = lws_system_blob_get(ab,(uint8_t *)buf, &keyidlen, 0); if (n < 0) return -1; buf += keyidlen; buf += lws_snprintf(buf, lws_ptr_diff_size_t(end, buf), "/%s/%s/%s/%s, ", s->ymd, s->region, s->service, "aws4_request"); buf += lws_snprintf(buf, lws_ptr_diff_size_t(end, buf), "%s", "SignedHeaders="); for (n = 0; n < s->hnum; n++) { buf += lws_snprintf(buf, lws_ptr_diff_size_t(end, buf), "%s",s->headers[n].name); buf--; /* remove ':' */ *buf++ = ';'; } c = buf - 1; *c = ','; /* overwrite ';' back to ',' */ buf += lws_snprintf(buf, lws_ptr_diff_size_t(end, buf), "%s", " Signature="); bin2hex(signature_bin, 32, buf); assert(buf+65 <= start + bufsz); lwsl_debug("%s %s\n", __func__, start); return 0; } int lws_ss_apply_sigv4(struct lws *wsi, struct lws_ss_handle *h, unsigned char **p, unsigned char *end) { uint8_t buf[512], sign_key[32], signature_bin[32], *bp; struct sigv4 s; memset(&s, 0, sizeof(s)); bp = buf; init_sigv4(wsi, h, &s); if (!s.timestamp || !s.payload_hash) { lwsl_err("%s missing headers\n", __func__); return -1; } if (build_sign_string(wsi, (char *)bp, sizeof(buf), h, &s)) return -1; if (calc_signing_key(wsi, h, &s, sign_key)) return -1; hmacsha256(sign_key, sizeof(sign_key), (const uint8_t *)buf, strlen((const char *)buf), signature_bin); bp = buf; /* reuse for auth_str */ if (build_auth_string(wsi, (char *)bp, sizeof(buf), h, &s, signature_bin)) return -1; if (lws_add_http_header_by_name(wsi, (const uint8_t *)"Authorization:", buf, (int)strlen((const char*)buf), p, end)) return -1; return 0; } int lws_ss_sigv4_set_aws_key(struct lws_context* context, uint8_t idx, const char * keyid, const char * key) { const char * s[] = { keyid, key }; lws_system_blob_t *ab; int i; if (idx > LWS_ARRAY_SIZE(blob_idx)) return -1; for (i = 0; i < LWS_SS_SIGV4_BLOB_SLOTS; i++) { ab = lws_system_get_blob(context, blob_idx[idx], i); if (!ab) return -1; lws_system_blob_heap_empty(ab); if (lws_system_blob_heap_append(ab, (const uint8_t *)s[i], strlen(s[i]))) { lwsl_err("%s: can't store %d \n", __func__, i); return -1; } } return 0; } #if defined(__linux__) || defined(__APPLE__) || defined(WIN32) || \ defined(__FreeBSD__) || defined(__NetBSD__) || defined(__ANDROID__) || \ defined(__sun) || defined(__OpenBSD__) /* ie, if we have filesystem ops */ int lws_aws_filesystem_credentials_helper(const char *path, const char *kid, const char *ak, char **aws_keyid, char **aws_key) { char *str = NULL, *val = NULL, *line = NULL, sth[128]; size_t len = sizeof(sth); const char *home = ""; int i, poff = 0; ssize_t rd; FILE *fp; *aws_keyid = *aws_key = NULL; if (path[0] == '~') { home = getenv("HOME"); if (home && strlen(home) > sizeof(sth) - 1) /* coverity */ return -1; else { if (!home) home = ""; poff = 1; } } lws_snprintf(sth, sizeof(sth), "%s%s", home, path + poff); fp = fopen(sth, "r"); if (!fp) { lwsl_err("%s can't open '%s'\n", __func__, sth); return -1; } while ((rd = getline(&line, &len, fp)) != -1) { for (i = 0; i < 2; i++) { size_t slen; if (strncmp(line, i ? kid : ak, strlen(i ? kid : ak))) continue; str = strchr(line, '='); if (!str) continue; str++; /* only read the first key for each */ if (*(i ? aws_keyid : aws_key)) continue; /* * Trim whitespace from the start and end */ slen = (size_t)(rd - lws_ptr_diff(str, line)); while (slen && *str == ' ') { str++; slen--; } while (slen && (str[slen - 1] == '\r' || str[slen - 1] == '\n' || str[slen - 1] == ' ')) slen--; val = malloc(slen + 1); if (!val) goto bail; strncpy(val, str, slen); val[slen] = '\0'; *(i ? aws_keyid : aws_key) = val; } } bail: fclose(fp); if (line) free(line); if (!*aws_keyid || !*aws_key) { if (*aws_keyid) { free(*aws_keyid); *aws_keyid = NULL; } if (*aws_key) { free(*aws_key); *aws_key = NULL; } lwsl_err("%s can't find aws credentials! \ please check %s\n", __func__, path); return -1; } lwsl_info("%s: '%s' '%s'\n", __func__, *aws_keyid, *aws_key); return 0; } #endif libwebsockets-4.3.5/lib/secure-streams/system/captive-portal-detect/000077500000000000000000000000001476025525100256265ustar00rootroot00000000000000libwebsockets-4.3.5/lib/secure-streams/system/captive-portal-detect/captive-portal-detect.c000066400000000000000000000055641476025525100322040ustar00rootroot00000000000000/* * Captive portal detect for Secure Streams * * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include typedef struct ss_cpd { struct lws_ss_handle *ss; void *opaque_data; /* ... application specific state ... */ lws_sorted_usec_list_t sul; } ss_cpd_t; static lws_ss_state_return_t ss_cpd_state(void *userobj, void *sh, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { ss_cpd_t *m = (ss_cpd_t *)userobj; struct lws_context *cx = (struct lws_context *)m->opaque_data; lwsl_ss_info(m->ss, "%s, ord 0x%x\n", lws_ss_state_name((int)state), (unsigned int)ack); switch (state) { case LWSSSCS_CREATING: lws_ss_start_timeout(m->ss, 3 * LWS_US_PER_SEC); return lws_ss_request_tx(m->ss); case LWSSSCS_QOS_ACK_REMOTE: lws_system_cpd_set(cx, LWS_CPD_INTERNET_OK); cx->ss_cpd = NULL; return LWSSSSRET_DESTROY_ME; case LWSSSCS_TIMEOUT: case LWSSSCS_ALL_RETRIES_FAILED: case LWSSSCS_DISCONNECTED: /* * First result reported sticks... if nothing else, this will * cover the situation we didn't connect to anything */ lws_system_cpd_set(cx, LWS_CPD_NO_INTERNET); cx->ss_cpd = NULL; return LWSSSSRET_DESTROY_ME; default: break; } return LWSSSSRET_OK; } static const lws_ss_info_t ssi_cpd = { .handle_offset = offsetof(ss_cpd_t, ss), .opaque_user_data_offset = offsetof(ss_cpd_t, opaque_data), .state = ss_cpd_state, .user_alloc = sizeof(ss_cpd_t), .streamtype = "captive_portal_detect", }; int lws_ss_sys_cpd(struct lws_context *cx) { if (cx->ss_cpd) { lwsl_cx_notice(cx, "CPD already ongoing"); return 0; } if (lws_ss_create(cx, 0, &ssi_cpd, cx, &cx->ss_cpd, NULL, NULL)) { lwsl_cx_info(cx, "Create stream failed (policy?)"); return 1; } return 0; } libwebsockets-4.3.5/lib/secure-streams/system/fetch-policy/000077500000000000000000000000001476025525100240145ustar00rootroot00000000000000libwebsockets-4.3.5/lib/secure-streams/system/fetch-policy/fetch-policy.c000066400000000000000000000110641476025525100265500ustar00rootroot00000000000000/* * Policy fetching for Secure Streams * * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include typedef struct ss_fetch_policy { struct lws_ss_handle *ss; void *opaque_data; /* ... application specific state ... */ lws_sorted_usec_list_t sul; uint8_t partway; } ss_fetch_policy_t; /* secure streams payload interface */ static lws_ss_state_return_t ss_fetch_policy_rx(void *userobj, const uint8_t *buf, size_t len, int flags) { ss_fetch_policy_t *m = (ss_fetch_policy_t *)userobj; struct lws_context *context = (struct lws_context *)m->opaque_data; if (flags & LWSSS_FLAG_SOM) { if (lws_ss_policy_parse_begin(context, 0)) return LWSSSSRET_OK; m->partway = 1; } if (len && lws_ss_policy_parse(context, buf, len) < 0) return LWSSSSRET_OK; if (flags & LWSSS_FLAG_EOM) m->partway = 2; return LWSSSSRET_OK; } static lws_ss_state_return_t ss_fetch_policy_tx(void *userobj, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len, int *flags) { return LWSSSSRET_TX_DONT_SEND; } static void policy_set(lws_sorted_usec_list_t *sul) { ss_fetch_policy_t *m = lws_container_of(sul, ss_fetch_policy_t, sul); struct lws_context *context = (struct lws_context *)m->opaque_data; /* * We get called if the policy parse was successful, just after the * ss connection close that was using the vhost from the old policy */ lws_ss_destroy(&m->ss); if (lws_ss_policy_set(context, "updated")) lwsl_err("%s: policy set failed\n", __func__); else { context->policy_updated = 1; #if defined(LWS_WITH_SYS_STATE) lws_state_transition_steps(&context->mgr_system, LWS_SYSTATE_OPERATIONAL); #endif } } static lws_ss_state_return_t ss_fetch_policy_state(void *userobj, void *sh, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { ss_fetch_policy_t *m = (ss_fetch_policy_t *)userobj; struct lws_context *context = (struct lws_context *)m->opaque_data; lwsl_info("%s: %s, ord 0x%x\n", __func__, lws_ss_state_name((int)state), (unsigned int)ack); switch (state) { case LWSSSCS_CREATING: return lws_ss_request_tx(m->ss); case LWSSSCS_CONNECTING: break; case LWSSSCS_QOS_ACK_REMOTE: switch (m->partway) { case 2: lws_sul_schedule(context, 0, &m->sul, policy_set, 1); m->partway = 0; break; } break; case LWSSSCS_DISCONNECTED: if (m->partway == 1) { lws_ss_policy_parse_abandon(context); break; } m->partway = 0; break; default: break; } return LWSSSSRET_OK; } int lws_ss_sys_fetch_policy(struct lws_context *context) { lws_ss_info_t ssi; if (context->hss_fetch_policy) /* already exists */ return 0; /* We're making an outgoing secure stream ourselves */ memset(&ssi, 0, sizeof(ssi)); ssi.handle_offset = offsetof(ss_fetch_policy_t, ss); ssi.opaque_user_data_offset = offsetof(ss_fetch_policy_t, opaque_data); ssi.rx = ss_fetch_policy_rx; ssi.tx = ss_fetch_policy_tx; ssi.state = ss_fetch_policy_state; ssi.user_alloc = sizeof(ss_fetch_policy_t); ssi.streamtype = "fetch_policy"; if (lws_ss_create(context, 0, &ssi, context, &context->hss_fetch_policy, NULL, NULL)) { /* * If there's no fetch_policy streamtype, it can just be we're * running on a proxied client with no policy of its own, * it's OK. */ lwsl_info("%s: Policy fetch ss failed (stub policy?)\n", __func__); return 0; } lwsl_info("%s: policy fetching ongoing\n", __func__); /* fetching it is ongoing */ return 1; } libwebsockets-4.3.5/lib/system/000077500000000000000000000000001476025525100164645ustar00rootroot00000000000000libwebsockets-4.3.5/lib/system/CMakeLists.txt000066400000000000000000000041621476025525100212270ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # # The strategy is to only export to PARENT_SCOPE # # - changes to LIB_LIST # - changes to SOURCES # - includes via include_directories # # and keep everything else private include_directories(./async-dns) list(APPEND SOURCES system/system.c) if (LWS_WITH_NETWORK) if (LWS_WITH_SYS_ASYNC_DNS) list(APPEND SOURCES system/async-dns/async-dns.c system/async-dns/async-dns-parse.c) endif() if (LWS_WITH_SYS_NTPCLIENT) list(APPEND SOURCES system/ntpclient/ntpclient.c) endif() if (LWS_WITH_SYS_DHCP_CLIENT) list(APPEND SOURCES system/dhcpclient/dhcpclient.c system/dhcpclient/dhcpc4.c) endif() if (LWS_WITH_SYS_SMD) add_subdir_include_dirs(smd) endif() if (LWS_WITH_SYS_FAULT_INJECTION) include_directories(./fault-injection) list(APPEND SOURCES system/fault-injection/fault-injection.c) endif() add_subdir_include_dirs(metrics) endif() # # Keep explicit parent scope exports at end # exports_to_parent_scope() libwebsockets-4.3.5/lib/system/README.md000066400000000000000000000045521476025525100177510ustar00rootroot00000000000000# LWS System Helpers Lws now has a little collection of helper utilities for common network-based functions necessary for normal device operation, eg, async DNS, ntpclient (necessary for tls validation), and DHCP client. ## Conventions If any system helper is enabled for build, lws creates an additional vhost "system" at Context Creation time. Wsi that are created for the system features are bound to this. In the context object, this is available as `.vhost_system`. # Attaching to an existing context from other threads To simplify the case different pieces of code want to attach to a single lws_context at runtime, from different thread contexts, lws_system has an api via an lws_system operation function pointer where the other threads can use platform-specific locking to request callbacks to their own code from the lws event loop thread context safely. For convenience, the callback can be delayed until the system has entered or passed a specified system state, eg, LWS_SYSTATE_OPERATIONAL so the code will only get called back after the network, ntpclient and auth have been done. Additionally an opaque pointer can be passed to the callback when it is called from the lws event loop context. ## Implementing the system-specific locking `lws_system_ops_t` struct has a member `.attach` ``` int (*attach)(struct lws_context *context, int tsi, lws_attach_cb_t *cb, lws_system_states_t state, void *opaque, struct lws_attach_item **get); ``` This should be defined in user code as setting locking, then passing the arguments through to a non-threadsafe helper ``` int __lws_system_attach(struct lws_context *context, int tsi, lws_attach_cb_t *cb, lws_system_states_t state, void *opaque, struct lws_attach_item **get); ``` that does the actual attach work. When it returns, the locking should be unlocked and the return passed back. ## Attaching the callback request User code should call the lws_system_ops_t `.attach` function like ``` lws_system_get_ops(context)->attach(...); ``` The callback function which will be called from the lws event loop context should look like this ``` void my_callback(struct lws_context *context, int tsi, void *opaque); ``` with the callback function name passed into the (*attach)() call above. When the callback happens, the opaque user pointer set at the (*attach)() call is passed back to it as an argument. libwebsockets-4.3.5/lib/system/async-dns/000077500000000000000000000000001476025525100203635ustar00rootroot00000000000000libwebsockets-4.3.5/lib/system/async-dns/async-dns-parse.c000066400000000000000000000416301476025525100235420ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "private-lib-async-dns.h" /* updates *dest, returns chars used from ls directly, else -1 for fail */ static int lws_adns_parse_label(const uint8_t *pkt, int len, const uint8_t *ls, int budget, char **dest, size_t dl) { const uint8_t *e = pkt + len, *ols = ls; char pointer = 0, first = 1; uint8_t ll; int n; if (budget < 1) return 0; /* caller must catch end of labels */ assert(*ls); again1: if (ls >= e) return -1; if (((*ls) & 0xc0) == 0xc0) { if (budget < 2) return -1; /* pointer into message pkt to name to actually use */ n = lws_ser_ru16be(ls) & 0x3fff; if (n >= len) { lwsl_notice("%s: illegal name pointer\n", __func__); return -1; } /* dereference the label pointer */ ls = pkt + n; /* are we being fuzzed or messed with? */ if (((*ls) & 0xc0) == 0xc0) { /* ... pointer to pointer is unreasonable */ lwsl_notice("%s: label ptr to ptr invalid\n", __func__); return -1; } pointer = 1; } if (ls >= e) return -1; ll = *ls++; if (ls + ll + 1 > e) { lwsl_notice("%s: label len invalid, %d vs %d\n", __func__, lws_ptr_diff((ls + ll + 1), pkt), lws_ptr_diff(e, pkt)); return -1; } if (ls + ll > ols + budget) { lwsl_notice("%s: label too long %d vs %d\n", __func__, ll, budget); return -1; } if ((unsigned int)ll + 2 > dl) { lwsl_notice("%s: qname too large\n", __func__); return -1; } /* copy the label content into place */ memcpy(*dest, ls, ll); (*dest)[ll] = '.'; (*dest)[ll + 1] = '\0'; *dest += ll + 1; ls += ll; if (pointer) { if (*ls) goto again1; /* * special fun rule... if whole qname was a pointer label, * it has no 00 terminator afterwards */ if (first) return 2; /* we just took the 16-bit pointer */ return 3; } first = 0; if (*ls) goto again1; ls++; return lws_ptr_diff(ls, ols); } typedef int (*lws_async_dns_find_t)(const char *name, void *opaque, uint32_t ttl, adns_query_type_t type, const uint8_t *payload); /* locally query the response packet */ struct label_stack { char name[DNS_MAX]; int enl; const uint8_t *p; }; /* * Walk the response packet, calling back to the user-provided callback for each * A (and AAAA if LWS_IPV6=1) record with a matching name found in there. * * Able to recurse using an explicit non-CPU stack to resolve CNAME usages * * Return -1: unexpectedly failed * 0: found * 1: didn't find anything matching */ static int lws_adns_iterate(lws_adns_q_t *q, const uint8_t *pkt, int len, const char *expname, lws_async_dns_find_t cb, void *opaque) { const uint8_t *e = pkt + len, *p, *pay; struct label_stack stack[8]; int n = 0, stp = 0, ansc, m; uint16_t rrtype, rrpaylen; char *sp, inq; uint32_t ttl; lws_strncpy(stack[0].name, expname, sizeof(stack[0].name)); stack[0].enl = (int)strlen(expname); start: ansc = lws_ser_ru16be(pkt + DHO_NANSWERS); p = pkt + DHO_SIZEOF; inq = 1; /* * The response also includes the query... and we have to parse it * so we can understand we reached the response... there's a QNAME * made up of labels and then 2 x 16-bit fields, for query type and * query class */ while (p + 14 < e && (inq || ansc)) { if (!inq && !stp) ansc--; /* * First is the name the query applies to... two main * formats can appear here, one is a pointer to * elsewhere in the message, the other separately * provides len / data for each dotted "label", so for * "warmcat.com" warmcat and com are given each with a * prepended length byte. Any of those may be a pointer * to somewhere else in the packet :-/ * * Paranoia is appropriate since the name length must be * parsed out before the rest of the RR can be used and * we can be attacked with absolutely any crafted * content easily via UDP. * * So parse the name and additionally confirm it matches * what the query the TID belongs to actually asked for. */ sp = stack[0].name; /* while we have more labels */ n = lws_adns_parse_label(pkt, len, p, len, &sp, sizeof(stack[0].name) - lws_ptr_diff_size_t(sp, stack[0].name)); /* includes case name won't fit */ if (n < 0) return -1; p += n; if (p + (inq ? 5 : 14) > e) return -1; /* * p is now just after the decoded RR name, pointing at: type * * We sent class = 1 = IN query... response must match */ if (lws_ser_ru16be(&p[2]) != 1) { lwsl_err("%s: non-IN response 0x%x\n", __func__, lws_ser_ru16be(&p[2])); return -1; } if (inq) { lwsl_debug("%s: reached end of inq\n", __func__); inq = 0; p += 4; continue; } /* carefully validate the claimed RR payload length */ rrpaylen = lws_ser_ru16be(&p[8]); if (p + 10 + rrpaylen > e) { /* it may be == e */ lwsl_notice("%s: invalid RR data length\n", __func__); return -1; } ttl = lws_ser_ru32be(&p[4]); rrtype = lws_ser_ru16be(&p[0]); p += 10; /* point to the payload */ pay = p; /* * Compare the RR names, allowing for the decoded labelname * to have an extra '.' at the end. */ n = lws_ptr_diff(sp, stack[0].name); if (stack[0].name[n - 1] == '.') n--; m = stack[stp].enl; if (stack[stp].name[m - 1] == '.') m--; if (n < 1 || n != m || strncmp(stack[0].name, stack[stp].name, (unsigned int)n)) { //lwsl_notice("%s: skipping %s vs %s\n", __func__, // stack[0].name, stack[stp].name); goto skip; } /* * It's something we could be interested in... * * We can skip RRs we don't understand. But we need to deal * with at least these and their payloads: * * A: 4: ipv4 address * AAAA: 16: ipv6 address (if asked for AAAA) * CNAME: ?: labelized name * * If we hit a CNAME we need to try to dereference it with * stuff that is in the same response packet and judge it * from that, without losing our place here. CNAMEs may * point to CNAMEs to whatever depth we're willing to handle. */ switch (rrtype) { case LWS_ADNS_RECORD_AAAA: if (rrpaylen != 16) { lwsl_err("%s: unexpected rrpaylen\n", __func__); return -1; } #if defined(LWS_WITH_IPV6) goto do_cb; #else break; #endif case LWS_ADNS_RECORD_A: if (rrpaylen != 4) { lwsl_err("%s: unexpected rrpaylen4\n", __func__); return -1; } #if defined(LWS_WITH_IPV6) do_cb: #endif cb(stack[0].name, opaque, ttl, rrtype, p); break; case LWS_ADNS_RECORD_CNAME: /* * The name the CNAME refers to MAY itself be * included elsewhere in the response packet. * * So switch tack, stack where to resume from and * search for the decoded CNAME label name definition * instead. * * First decode the CNAME label payload into the next * stack level buffer for it. */ if (++stp == (int)LWS_ARRAY_SIZE(stack)) { lwsl_notice("%s: CNAMEs too deep\n", __func__); return -1; } sp = stack[stp].name; /* get the cname alias */ n = lws_adns_parse_label(pkt, len, p, rrpaylen, &sp, sizeof(stack[stp].name) - lws_ptr_diff_size_t(sp, stack[stp].name)); /* includes case name won't fit */ if (n < 0) return -1; p += n; if (p + 14 > e) return -1; #if 0 /* it should have exactly reached rrpaylen if only one * CNAME, else somewhere in the middle */ if (p != pay + rrpaylen) { lwsl_err("%s: cname name bad len %d\n", __func__, rrpaylen); return -1; } #endif lwsl_notice("%s: recursing looking for %s\n", __func__, stack[stp].name); lwsl_info("%s: recursing looking for %s\n", __func__, stack[stp].name); stack[stp].enl = lws_ptr_diff(sp, stack[stp].name); /* when we unstack, resume from here */ stack[stp].p = pay + rrpaylen; goto start; default: break; } skip: p += rrpaylen; } if (!stp) return 1; /* we didn't find anything, but we didn't error */ lwsl_info("%s: '%s' -> CNAME '%s' resolution not provided, recursing\n", __func__, ((const char *)&q[1]) + DNS_MAX, stack[stp].name); /* * This implies there wasn't any usable definition for the * CNAME in the end, eg, only AAAA when we needed an A. * * It's also legit if the DNS just returns the CNAME, and that server * did not directly know the next step in resolution of the CNAME, so * instead of putting the resolution elsewhere in the response, has * told us just the CNAME and left it to us to find out its resolution * separately. * * Reset this request to be for the CNAME, and restart the request * action with a new tid. */ if (lws_async_dns_get_new_tid(q->context, q)) return -1; LADNS_MOST_RECENT_TID(q) &= 0xfffe; q->asked = q->responded = 0; #if defined(LWS_WITH_IPV6) q->sent[1] = 0; #endif q->sent[0] = 0; q->recursion++; if (q->recursion == DNS_RECURSION_LIMIT) { lwsl_err("%s: recursion overflow\n", __func__); return -1; } if (q->firstcache) lws_adns_cache_destroy(q->firstcache); q->firstcache = NULL; /* overwrite the query name with the CNAME */ n = 0; { char *cp = (char *)&q[1]; while (stack[stp].name[n]) *cp++ = (char)tolower(stack[stp].name[n++]); /* trim the following . if any */ if (n && cp[-1] == '.') cp--; *cp = '\0'; } lws_callback_on_writable(q->dns->wsi); return 2; } int lws_async_dns_estimate(const char *name, void *opaque, uint32_t ttl, adns_query_type_t type, const uint8_t *payload) { size_t *est = (size_t *)opaque, my; my = sizeof(struct addrinfo); if (type == LWS_ADNS_RECORD_AAAA) my += sizeof(struct sockaddr_in6); else my += sizeof(struct sockaddr_in); *est += my; return 0; } struct adstore { const char *name; struct addrinfo *pos; struct addrinfo *prev; int ctr; uint32_t smallest_ttl; uint8_t flags; }; /* * Callback for each A or AAAA record, creating getaddrinfo-compatible results * into the preallocated exact-sized storage. */ int lws_async_dns_store(const char *name, void *opaque, uint32_t ttl, adns_query_type_t type, const uint8_t *payload) { struct adstore *adst = (struct adstore *)opaque; #if defined(_DEBUG) char buf[48]; #endif size_t i; if (ttl < adst->smallest_ttl || !adst->ctr) adst->smallest_ttl = ttl; if (adst->prev) adst->prev->ai_next = adst->pos; adst->prev = adst->pos; adst->pos->ai_flags = 0; adst->pos->ai_family = type == LWS_ADNS_RECORD_AAAA ? AF_INET6 : AF_INET; adst->pos->ai_socktype = SOCK_STREAM; adst->pos->ai_protocol = IPPROTO_UDP; /* no meaning */ adst->pos->ai_addrlen = type == LWS_ADNS_RECORD_AAAA ? sizeof(struct sockaddr_in6) : sizeof(struct sockaddr_in); adst->pos->ai_canonname = (char *)adst->name; adst->pos->ai_addr = (struct sockaddr *)&adst->pos[1]; adst->pos->ai_next = NULL; #if defined(LWS_WITH_IPV6) if (type == LWS_ADNS_RECORD_AAAA) { struct sockaddr_in6 *in6 = (struct sockaddr_in6 *)&adst->pos[1]; i = sizeof(*in6); memset(in6, 0, i); in6->sin6_family = (sa_family_t)adst->pos->ai_family; memcpy(in6->sin6_addr.s6_addr, payload, 16); adst->flags |= 2; } else #endif { struct sockaddr_in *in = (struct sockaddr_in *)&adst->pos[1]; i = sizeof(*in); memset(in, 0, i); in->sin_family = (sa_family_t)adst->pos->ai_family; memcpy(&in->sin_addr.s_addr, payload, 4); adst->flags |= 1; } adst->pos = (struct addrinfo *)((uint8_t *)adst->pos + sizeof(struct addrinfo) + i); #if defined(_DEBUG) if (lws_write_numeric_address(payload, type == LWS_ADNS_RECORD_AAAA ? 16 : 4, buf, sizeof(buf)) > 0) lwsl_info("%s: %d: %s: %s\n", __func__, adst->ctr, adst->name, buf); #endif adst->ctr++; return 0; } /* * We want to parse out all A or AAAA records */ void lws_adns_parse_udp(lws_async_dns_t *dns, const uint8_t *pkt, size_t len) { const char *nm, *nmcname; lws_adns_cache_t *c; struct adstore adst; lws_adns_q_t *q; int n, ncname; size_t est; // lwsl_hexdump_notice(pkt, len); /* we have to at least have the header */ if (len < DHO_SIZEOF) return; /* we asked with one query, so anything else is bogus */ if (lws_ser_ru16be(pkt + DHO_NQUERIES) != 1) return; /* match both A and AAAA queries if any */ q = lws_adns_get_query(dns, 0, &dns->waiting, lws_ser_ru16be(pkt + DHO_TID), NULL); if (!q) { lwsl_info("%s: dropping unknown query tid 0x%x\n", __func__, lws_ser_ru16be(pkt + DHO_TID)); return; } /* we can get dups... drop any that have already happened */ n = 1 << (lws_ser_ru16be(pkt + DHO_TID) & 1); if (q->responded & n) { lwsl_notice("%s: dup\n", __func__); goto fail_out; } q->responded = (uint8_t)(q->responded | n); /* we want to confirm the results against what we last requested... */ nmcname = ((const char *)&q[1]); /* * First walk the packet figuring out the allocation needed for all * the results. Produce the following layout at c * * lws_adns_cache_t: new cache object * [struct addrinfo + struct sockaddr_in or _in6]: for each A or AAAA * char []: copy of resolved name */ ncname = (int)strlen(nmcname) + 1; est = sizeof(lws_adns_cache_t) + (unsigned int)ncname; if (lws_ser_ru16be(pkt + DHO_NANSWERS)) { int ir = lws_adns_iterate(q, pkt, (int)len, nmcname, lws_async_dns_estimate, &est); if (ir < 0) goto fail_out; if (ir == 2) /* CNAME recursive resolution */ return; } /* but we want to create the cache entry against the original request */ nm = ((const char *)&q[1]) + DNS_MAX; n = (int)strlen(nm) + 1; lwsl_info("%s: create cache entry for %s, %zu\n", __func__, nm, est - sizeof(lws_adns_cache_t)); c = lws_malloc(est + 1, "async-dns-entry"); if (!c) { lwsl_err("%s: OOM %zu\n", __func__, est); goto fail_out; } memset(c, 0, sizeof(*c)); /* place it at end, no need to care about alignment padding */ c->name = adst.name = ((const char *)c) + est - n; memcpy((char *)c->name, nm, (unsigned int)n); /* * Then walk the packet again, placing the objects we accounted for * the first time into the result allocation after the cache object * and copy of the name */ adst.pos = (struct addrinfo *)&c[1]; adst.prev = NULL; adst.ctr = 0; adst.smallest_ttl = 3600; adst.flags = 0; /* * smallest_ttl applies as it is to empty results (NXDOMAIN), or is * set to the minimum ttl seen in all the results. */ if (lws_ser_ru16be(pkt + DHO_NANSWERS) && lws_adns_iterate(q, pkt, (int)len, nmcname, lws_async_dns_store, &adst) < 0) { lws_free(c); goto fail_out; } if (lws_ser_ru16be(pkt + DHO_NANSWERS)) { c->results = (struct addrinfo *)&c[1]; if (q->last) /* chain the second one on */ *q->last = c->results; else /* first one had no results, set first guy's c->results */ if (q->firstcache) q->firstcache->results = c->results; } if (adst.prev) /* so we know where to continue the addrinfo list */ /* can be NULL if first resp empty */ q->last = &adst.prev->ai_next; if (q->firstcache) { /* also need to free chain when we free this guy */ q->firstcache->chain = c; c->firstcache = q->firstcache; } else { q->firstcache = c; c->incomplete = !q->responded;// != q->asked; /* * Only register the first one into the cache... * Trim the oldest cache entry if necessary */ lws_async_dns_trim_cache(dns); /* * cache the first results object... if a second one comes, * we won't directly register it but will chain it on to this * first one and continue to addinfo ai_next linked list from * the first into the second */ c->flags = adst.flags; lws_dll2_add_head(&c->list, &dns->cached); lws_sul_schedule(q->context, 0, &c->sul, sul_cb_expire, lws_now_usecs() + (adst.smallest_ttl * LWS_US_PER_SEC)); } if (q->responded != q->asked) return; /* * Now we captured everything into the new object, return the * addrinfo results, if any, to all interested wsi, if any... */ c->incomplete = 0; lws_async_dns_complete(q, q->firstcache); q->go_nogo = METRES_GO; /* * the query is completely finished with */ fail_out: lws_adns_q_destroy(q); } libwebsockets-4.3.5/lib/system/async-dns/async-dns.c000066400000000000000000000535331476025525100224370ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "private-lib-async-dns.h" static const uint32_t botable[] = { 300, 500, 700, 1250, 5000 /* in case everything just dog slow */ }; static const lws_retry_bo_t retry_policy = { botable, LWS_ARRAY_SIZE(botable), LWS_RETRY_CONCEAL_ALWAYS, /* don't conceal after the last table entry */ 0, 0, 20 }; void lws_adns_q_destroy(lws_adns_q_t *q) { lws_metrics_caliper_report(q->metcal, (char)q->go_nogo); lws_sul_cancel(&q->sul); lws_sul_cancel(&q->write_sul); lws_dll2_remove(&q->list); lws_free(q); } lws_adns_q_t * lws_adns_get_query(lws_async_dns_t *dns, adns_query_type_t qtype, lws_dll2_owner_t *owner, uint16_t tid, const char *name) { lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, lws_dll2_get_head(owner)) { lws_adns_q_t *q = lws_container_of(d, lws_adns_q_t, list); int n = 0, nmax = q->tids >= LWS_ARRAY_SIZE(q->tid) ? LWS_ARRAY_SIZE(q->tid) : q->tids; if (!name) for (n = 0; n < nmax; n++) if ((tid & 0xfffe) == (q->tid[n] & 0xfffe)) return q; if (name && q->qtype == ((tid & 1) ? LWS_ADNS_RECORD_AAAA : LWS_ADNS_RECORD_A) && !strcasecmp(name, (const char *)&q[1])) { if (owner == &dns->cached) { /* Keep sorted by LRU: move to the head */ lws_dll2_remove(&q->list); lws_dll2_add_head(&q->list, &dns->cached); } return q; } } lws_end_foreach_dll_safe(d, d1); return NULL; } void lws_async_dns_drop_server(struct lws_context *context) { context->async_dns.dns_server_set = 0; lws_set_timeout(context->async_dns.wsi, 1, LWS_TO_KILL_ASYNC); context->async_dns.wsi = NULL; context->async_dns.dns_server_connected = 0; } int lws_async_dns_complete(lws_adns_q_t *q, lws_adns_cache_t *c) { lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, lws_dll2_get_head(&q->wsi_adns)) { struct lws *w = lws_container_of(d, struct lws, adns); lws_dll2_remove(d); if (c && c->results) { lwsl_wsi_debug(w, "q: %p, c: %p, refcount %d -> %d", q, c, c->refcount, c->refcount + 1); c->refcount++; } lws_set_timeout(w, NO_PENDING_TIMEOUT, 0); /* * This may decide to close / delete w */ if (w->adns_cb(w, (const char *)&q[1], c ? c->results : NULL, 0, q->opaque) == NULL) lwsl_info("%s: failed\n", __func__); // lws_close_free_wsi(w, LWS_CLOSE_STATUS_NOSTATUS, // "adopt udp2 fail"); } lws_end_foreach_dll_safe(d, d1); if (q->standalone_cb) { if (c && c->results) { lwsl_wsi_debug(q->dns ? q->dns->wsi : NULL, "q: %p, c: %p, refcount %d -> %d", q, c, c->refcount, c->refcount + 1); c->refcount++; } q->standalone_cb(NULL, (const char *)&q[1], c ? c->results : NULL, 0, q->opaque); } lws_adns_dump(q->dns); return 0; } static void lws_async_dns_sul_cb_retry(struct lws_sorted_usec_list *sul) { lws_adns_q_t *q = lws_container_of(sul, lws_adns_q_t, sul); lwsl_wsi_info(q->dns ? q->dns->wsi : NULL, "in"); lws_adns_dump(q->dns); if (q->dns && q->dns->wsi) { q->is_retry = 1; lws_callback_on_writable(q->dns->wsi); } } static void lws_async_dns_writeable(struct lws *wsi, lws_adns_q_t *q) { uint8_t pkt[LWS_PRE + DNS_PACKET_LEN], *e = &pkt[sizeof(pkt)], *p, *pl; int m, n, which; const char *name; /* * We managed to get to the point of being WRITEABLE, which is not a * given if no routes. So call off the write_sul timeout for that. */ lws_sul_cancel(&q->write_sul); if (!q->is_retry && q->sent[0] #if defined(LWS_WITH_IPV6) && q->sent[0] == q->sent[1] #endif ) return; q->is_retry = 0; /* * UDP is not reliable, it can be locally dropped, or dropped * by any intermediary or the remote peer. So even though we * will do the write in a moment, we schedule another request * for rewrite according to the wsi retry policy. * * If the result came before, we'll cancel it as part of the * wsi close. * * If we have already reached the end of our concealed retries * in the policy, just close without another write. */ if (lws_dll2_is_detached(&q->sul.list) && lws_retry_sul_schedule_retry_wsi(wsi, &q->sul, lws_async_dns_sul_cb_retry, &q->retry)) { /* we have reached the end of our concealed retries */ lwsl_wsi_info(wsi, "failing query"); /* * our policy is to force reloading the dns server info * if our connection ever timed out, in case it or the * routing state changed */ lws_async_dns_drop_server(q->context); goto qfail; } name = (const char *)&q[1]; p = &pkt[LWS_PRE]; memset(p, 0, DHO_SIZEOF); #if defined(LWS_WITH_IPV6) if (!q->responded) { /* must pick between ipv6 and ipv4 */ which = q->sent[0] >= q->sent[1]; q->sent[which]++; q->asked = 3; /* want results for 4 & 6 before done */ } else which = q->responded & 1; #else which = 0; q->asked = 1; #endif lwsl_wsi_info(wsi, "%s, which %d", name, which); /* we hack b0 of the tid to be 0 = A, 1 = AAAA */ lws_ser_wu16be(&p[DHO_TID], #if defined(LWS_WITH_IPV6) which ? (LADNS_MOST_RECENT_TID(q) | 1) : #endif LADNS_MOST_RECENT_TID(q)); lws_ser_wu16be(&p[DHO_FLAGS], (1 << 8)); lws_ser_wu16be(&p[DHO_NQUERIES], 1); p += DHO_SIZEOF; /* start of label-formatted qname */ pl = p++; do { if (*name == '.' || !*name) { *pl = (uint8_t)(unsigned int)lws_ptr_diff(p, pl + 1); pl = p; *p++ = 0; /* also serves as terminal length */ if (!*name++) break; } else *p++ = (uint8_t)*name++; } while (p + 6 < e); if (p + 6 >= e) { assert(0); lwsl_wsi_err(wsi, "name too big"); goto qfail; } lws_ser_wu16be(p, which ? LWS_ADNS_RECORD_AAAA : LWS_ADNS_RECORD_A); p += 2; lws_ser_wu16be(p, 1); /* IN class */ p += 2; assert(p < pkt + sizeof(pkt) - LWS_PRE); n = lws_ptr_diff(p, pkt + LWS_PRE); m = lws_write(wsi, pkt + LWS_PRE, (unsigned int)n, 0); if (m != n) { lwsl_wsi_notice(wsi, "dns write failed %d %d errno %d", m, n, errno); goto qfail; } #if defined(LWS_WITH_IPV6) if (!q->responded && q->sent[0] != q->sent[1]) { lwsl_wsi_debug(wsi, "request writeable for ipv6"); lws_callback_on_writable(wsi); } #endif return; qfail: lwsl_wsi_warn(wsi, "failing query doing NULL completion"); /* * in ipv6 case, we made a cache entry for the first response but * evidently the second response didn't come in time, purge the * incomplete cache entry */ if (q->firstcache) { lwsl_wsi_debug(wsi, "destroy firstcache"); lws_adns_cache_destroy(q->firstcache); q->firstcache = NULL; } lws_async_dns_complete(q, NULL); lws_adns_q_destroy(q); } static int callback_async_dns(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct lws_async_dns *dns = &(lws_get_context(wsi)->async_dns); switch (reason) { /* callbacks related to raw socket descriptor */ case LWS_CALLBACK_RAW_ADOPT: //lwsl_wsi_user(wsi, "LWS_CALLBACK_RAW_ADOPT"); break; case LWS_CALLBACK_RAW_CLOSE: //lwsl_wsi_user(wsi, "LWS_CALLBACK_RAW_CLOSE"); break; case LWS_CALLBACK_RAW_RX: //lwsl_wsi_user(wsi, "LWS_CALLBACK_RAW_RX (%d)", (int)len); // lwsl_hexdump_wsi_notice(wsi, in, len); lws_adns_parse_udp(dns, in, len); break; case LWS_CALLBACK_RAW_WRITEABLE: //lwsl_wsi_user(wsi, "LWS_CALLBACK_RAW_WRITEABLE"); lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, dns->waiting.head) { lws_adns_q_t *q = lws_container_of(d, lws_adns_q_t, list); if (//lws_dll2_is_detached(&q->sul.list) && (!q->asked || q->responded != q->asked)) lws_async_dns_writeable(wsi, q); } lws_end_foreach_dll_safe(d, d1); break; default: break; } return 0; } struct lws_protocols lws_async_dns_protocol = { "lws-async-dns", callback_async_dns, 0, 0, 0, NULL, 0 }; int lws_async_dns_init(struct lws_context *context) { lws_async_dns_t *dns = &context->async_dns; char ads[48]; int n; if (dns->wsi) return 0; if (!context->vhost_list) { /* coverity... system vhost always present */ lwsl_cx_err(context, "no system vhost"); return 1; } memset(&dns->sa46, 0, sizeof(dns->sa46)); #if defined(LWS_WITH_SYS_DHCP_CLIENT) if (lws_dhcpc_status(context, &dns->sa46)) goto ok; #endif n = lws_plat_asyncdns_init(context, &dns->sa46); if (n < 0) { lwsl_cx_warn(context, "no valid dns server, retry"); return 1; } if (n != LADNS_CONF_SERVER_CHANGED) return 0; #if defined(LWS_WITH_SYS_DHCP_CLIENT) ok: #endif dns->sa46.sa4.sin_port = htons(53); lws_write_numeric_address((uint8_t *)&dns->sa46.sa4.sin_addr.s_addr, 4, ads, sizeof(ads)); dns->wsi = lws_create_adopt_udp(context->vhost_list, ads, 53, 0, lws_async_dns_protocol.name, NULL, NULL, NULL, &retry_policy, "asyncdns"); if (!dns->wsi) { lwsl_cx_err(context, "foreign socket adoption failed"); return 1; } context->async_dns.wsi->udp->sa46 = dns->sa46; dns->dns_server_set = 1; return 0; } lws_adns_cache_t * lws_adns_get_cache(lws_async_dns_t *dns, const char *name) { lws_adns_cache_t *c; if (!name) { assert(0); return NULL; } lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, lws_dll2_get_head(&dns->cached)) { c = lws_container_of(d, lws_adns_cache_t, list); // lwsl_wsi_notice(dns->wsi, "%s vs %s (inc %d)", name, c->name, c->incomplete); if (!c->incomplete && !strcasecmp(name, c->name)) { /* Keep sorted by LRU: move to the head */ lws_dll2_remove(&c->list); lws_dll2_add_head(&c->list, &dns->cached); return c; } } lws_end_foreach_dll_safe(d, d1); return NULL; } #if defined(_DEBUG) void lws_adns_dump(lws_async_dns_t *dns) { lws_adns_cache_t *c; if (!dns) return; lwsl_wsi_info(dns->wsi, "ADNS cache %u entries", (unsigned int)dns->cached.count); lws_start_foreach_dll(struct lws_dll2 *, d, lws_dll2_get_head(&dns->cached)) { c = lws_container_of(d, lws_adns_cache_t, list); lwsl_wsi_info(dns->wsi, "cache: '%s', exp: %lldus, incomp %d, " "fl 0x%x, refc %d, res %p\n", c->name, (long long)(c->sul.us - lws_now_usecs()), c->incomplete, c->flags, c->refcount, c->results); } lws_end_foreach_dll(d); lws_start_foreach_dll(struct lws_dll2 *, d, lws_dll2_get_head(&dns->waiting)) { lws_adns_q_t *q = lws_container_of(d, lws_adns_q_t, list); lwsl_wsi_info(dns->wsi, "q: '%s', sent %d, resp %d", (const char *)&q[1], q->sent[0], q->responded); } lws_end_foreach_dll(d); } #endif void lws_adns_cache_destroy(lws_adns_cache_t *c) { lws_dll2_remove(&c->sul.list); lws_dll2_remove(&c->list); if (c->chain) lws_free(c->chain); lws_free(c); } static int cache_clean(struct lws_dll2 *d, void *user) { lws_adns_cache_destroy(lws_container_of(d, lws_adns_cache_t, list)); return 0; } void sul_cb_expire(struct lws_sorted_usec_list *sul) { lws_adns_cache_t *c = lws_container_of(sul, lws_adns_cache_t, sul); lws_adns_cache_destroy(c); } void sul_cb_write(struct lws_sorted_usec_list *sul) { lws_adns_q_t *q = lws_container_of(sul, lws_adns_q_t, write_sul); /* * Something's up, we couldn't even get from write request to * WRITEABLE within the timeout, let alone the result... fail * the query and everyone riding on it... */ lwsl_wsi_info(q->dns ? q->dns->wsi : NULL, "failing"); lws_adns_dump(q->dns); lws_async_dns_complete(q, NULL); /* no cache to relate to */ lws_adns_q_destroy(q); } void lws_async_dns_freeaddrinfo(const struct addrinfo **pai) { lws_adns_cache_t *c; if (!*pai) return; /* * First query may have been empty... if second has something, we * fixed up the first result to point to second... but it means * looking backwards from ai, which is c->result, which is the second * packet's results, doesn't get us to the firstcache pointer. * * Adjust c to the firstcache in this case. */ c = &((lws_adns_cache_t *)(*pai))[-1]; if (c->firstcache) c = c->firstcache; lwsl_debug("%s: c %p, %s, refcount %d -> %d\n", __func__, c, (c->results && c->results->ai_canonname) ? c->results->ai_canonname : "none", c->refcount, c->refcount - 1); assert(c->refcount > 0); c->refcount--; *pai = NULL; } void lws_async_dns_trim_cache(lws_async_dns_t *dns) { lws_adns_cache_t *c1; if (dns->cached.count + 1< MAX_CACHE_ENTRIES) return; c1 = lws_container_of(lws_dll2_get_tail(&dns->cached), lws_adns_cache_t, list); if (c1->refcount) lwsl_wsi_info(dns->wsi, "acache %p: refcount %d on purge", c1, c1->refcount); else lws_adns_cache_destroy(c1); } static int clean(struct lws_dll2 *d, void *user) { lws_adns_q_destroy(lws_container_of(d, lws_adns_q_t, list)); return 0; } void lws_async_dns_deinit(lws_async_dns_t *dns) { lws_dll2_foreach_safe(&dns->waiting, NULL, clean); lws_dll2_foreach_safe(&dns->cached, NULL, cache_clean); if (dns->wsi && !dns->dns_server_connected) { lwsl_wsi_notice(dns->wsi, "late free of incomplete dns wsi"); __lws_lc_untag(dns->wsi->a.context, &dns->wsi->lc); #if defined(LWS_WITH_SYS_METRICS) lws_metrics_tags_destroy(&dns->wsi->cal_conn.mtags_owner); #endif lws_free_set_NULL(dns->wsi->udp); lws_free_set_NULL(dns->wsi); } } static int cancel(struct lws_dll2 *d, void *user) { lws_adns_q_t *q = lws_container_of(d, lws_adns_q_t, list); lws_start_foreach_dll_safe(struct lws_dll2 *, d3, d4, lws_dll2_get_head(&q->wsi_adns)) { struct lws *w = lws_container_of(d3, struct lws, adns); if (user == w) { lws_dll2_remove(d3); if (!q->wsi_adns.count) lws_adns_q_destroy(q); return 1; } } lws_end_foreach_dll_safe(d3, d4); return 0; } void lws_async_dns_cancel(struct lws *wsi) { lws_async_dns_t *dns = &wsi->a.context->async_dns; lws_dll2_foreach_safe(&dns->waiting, wsi, cancel); } static int check_tid(struct lws_dll2 *d, void *user) { lws_adns_q_t *q = lws_container_of(d, lws_adns_q_t, list); int n = 0, nmax = q->tids >= LWS_ARRAY_SIZE(q->tid) ? LWS_ARRAY_SIZE(q->tid) : q->tids; uint16_t check = (uint16_t)(intptr_t)user; for (n = 0; n < nmax; n++) if (check == q->tid[n]) return 1; return 0; } int lws_async_dns_get_new_tid(struct lws_context *context, lws_adns_q_t *q) { lws_async_dns_t *dns = &context->async_dns; int budget = 10; /* * Make the TID unpredictable, but must be unique amongst ongoing ones */ do { uint16_t tid; if (lws_get_random(context, &tid, 2) != 2) return -1; if (lws_dll2_foreach_safe(&dns->waiting, (void *)(intptr_t)tid, check_tid)) continue; q->tids++; LADNS_MOST_RECENT_TID(q) = tid; return 0; } while (budget--); lwsl_cx_err(context, "unable to get unique tid"); return -1; } struct temp_q { lws_adns_q_t tq; char name[48]; }; lws_async_dns_retcode_t lws_async_dns_query(struct lws_context *context, int tsi, const char *name, adns_query_type_t qtype, lws_async_dns_cb_t cb, struct lws *wsi, void *opaque) { lws_async_dns_t *dns = &context->async_dns; size_t nlen = strlen(name); lws_sockaddr46 *sa46; lws_adns_cache_t *c; struct addrinfo *ai; struct temp_q tmq; lws_adns_q_t *q; uint8_t ads[16]; char *p; int m; lwsl_cx_info(context, "entry %s", name); lws_adns_dump(dns); #if !defined(LWS_WITH_IPV6) if (qtype == LWS_ADNS_RECORD_AAAA) { lwsl_cx_err(context, "ipv6 not enabled"); goto failed; } #endif if (nlen >= DNS_MAX - 1) goto failed; /* * we magically know 'localhost' and 'localhost6' if IPv6, this is a * sort of canned /etc/hosts */ if (!strcmp(name, "localhost")) name = "127.0.0.1"; #if defined(LWS_WITH_IPV6) if (!strcmp(name, "localhost6")) name = "::1"; #endif if (wsi) { if (!lws_dll2_is_detached(&wsi->adns)) { lwsl_cx_err(context, "%s already bound to query %p", lws_wsi_tag(wsi), wsi->adns.owner); goto failed; } wsi->adns_cb = cb; } /* there's a done, cached query we can just reuse? */ c = lws_adns_get_cache(dns, name); if (c) { lwsl_cx_info(context, "%s: using cached, c->results %p", name, c->results); m = c->results ? LADNS_RET_FOUND : LADNS_RET_FAILED; if (c->results) c->refcount++; #if defined(LWS_WITH_SYS_METRICS) lws_metric_event(context->mt_adns_cache, METRES_GO, 0); #endif if (cb(wsi, name, c->results, m, opaque) == NULL) return LADNS_RET_FAILED_WSI_CLOSED; return m; } else lwsl_cx_info(context, "%s uncached", name); #if defined(LWS_WITH_SYS_METRICS) lws_metric_event(context->mt_adns_cache, METRES_NOGO, 0); #endif /* * It's a 1.2.3.4 or ::1 type IP address already? We don't need a dns * server set up to be able to create an addrinfo result for that. * * Create it as a cached object so it follows the refcount lifecycle * of any other result */ m = lws_parse_numeric_address(name, ads, sizeof(ads)); if (m == 4 #if defined(LWS_WITH_IPV6) || m == 16 #endif ) { lws_async_dns_trim_cache(dns); c = lws_zalloc(sizeof(lws_adns_cache_t) + sizeof(struct addrinfo) + sizeof(lws_sockaddr46) + nlen + 1, "adns-numip"); if (!c) goto failed; ai = (struct addrinfo *)&c[1]; sa46 = (lws_sockaddr46 *)&ai[1]; ai->ai_socktype = SOCK_STREAM; c->name = (const char *)&sa46[1]; memcpy((char *)c->name, name, nlen + 1); ai->ai_canonname = (char *)&sa46[1]; c->results = ai; memset(&tmq.tq, 0, sizeof(tmq.tq)); tmq.tq.opaque = opaque; if (wsi) { wsi->adns_cb = cb; lws_dll2_add_head(&wsi->adns, &tmq.tq.wsi_adns); } else tmq.tq.standalone_cb = cb; lws_strncpy(tmq.name, name, sizeof(tmq.name)); lws_dll2_add_head(&c->list, &dns->cached); lws_sul_schedule(context, 0, &c->sul, sul_cb_expire, 3600ll * LWS_US_PER_SEC); lws_adns_dump(dns); } if (m == 4) { ai = (struct addrinfo *)&c[1]; sa46 = (lws_sockaddr46 *)&ai[1]; ai->ai_family = sa46->sa4.sin_family = AF_INET; ai->ai_addrlen = sizeof(sa46->sa4); ai->ai_addr = (struct sockaddr *)&sa46->sa4; memcpy(&sa46->sa4.sin_addr, ads, (unsigned int)m); lws_async_dns_complete(&tmq.tq, c); return LADNS_RET_FOUND; } #if defined(LWS_WITH_IPV6) if (m == 16) { ai->ai_family = sa46->sa6.sin6_family = AF_INET6; ai->ai_addrlen = sizeof(sa46->sa6); ai->ai_addr = (struct sockaddr *)&sa46->sa6; memcpy(&sa46->sa6.sin6_addr, ads, (unsigned int)m); lws_async_dns_complete(&tmq.tq, c); return LADNS_RET_FOUND; } #endif /* * to try anything else we need a remote server configured... */ if (!context->async_dns.dns_server_set && lws_async_dns_init(context)) { lwsl_cx_notice(context, "init failed"); goto failed; } /* there's an ongoing query we can share the result of */ q = lws_adns_get_query(dns, qtype, &dns->waiting, 0, name); if (q) { lwsl_cx_debug(context, "dns piggybacking: %d:%s", qtype, name); if (wsi) lws_dll2_add_head(&wsi->adns, &q->wsi_adns); return LADNS_RET_CONTINUING; } /* * Allocate new query / queries... this is a bit complicated because * multiple queries in one packet are not supported peoperly in DNS * itself, and there's no reliable other way to get both ipv6 and ipv4 * (AAAA and A) responses in one hit. * * If we don't support ipv6, it's simple, we just ask for A and that's * it. But if we do support ipv6, we need to ask twice, once for A * and in a separate query, again for AAAA. * * For ipv6, A / ipv4 is routable over ipv6. So we always ask for A * first and then if ipv6, AAAA separately. * * Allocate for DNS_MAX, because we may recurse and alter what we're * looking for. * * 0 sizeof(*q) sizeof(*q) + DNS_MAX * [lws_adns_q_t][ name (DNS_MAX reserved) ] [ name \0 ] */ q = (lws_adns_q_t *)lws_malloc(sizeof(*q) + DNS_MAX + nlen + 1, __func__); if (!q) goto failed; memset(q, 0, sizeof(*q)); if (wsi) lws_dll2_add_head(&wsi->adns, &q->wsi_adns); q->qtype = (uint16_t)qtype; if (lws_async_dns_get_new_tid(context, q)) { lwsl_cx_err(context, "tid fail"); goto failed; } LADNS_MOST_RECENT_TID(q) &= 0xfffe; q->context = context; q->tsi = (uint8_t)tsi; q->opaque = opaque; q->dns = dns; if (!wsi) q->standalone_cb = cb; /* schedule a retry according to the retry policy on the wsi */ if (lws_retry_sul_schedule_retry_wsi(dns->wsi, &q->sul, lws_async_dns_sul_cb_retry, &q->retry)) goto failed; /* fail us if we can't write by this timeout */ lws_sul_schedule(context, 0, &q->write_sul, sul_cb_write, LWS_US_PER_SEC); /* * We may rewrite the copy at +sizeof(*q) for CNAME recursion. Keep * a second copy at + sizeof(*q) + DNS_MAX so we can create the cache * entry for the original name, not the last CNAME we met. */ p = (char *)&q[1]; while (nlen--) { *p++ = (char)tolower(*name++); p[DNS_MAX - 1] = p[-1]; } *p = '\0'; p[DNS_MAX] = '\0'; lws_callback_on_writable(dns->wsi); lws_dll2_add_head(&q->list, &dns->waiting); lws_metrics_caliper_bind(q->metcal, context->mt_conn_dns); q->go_nogo = METRES_NOGO; /* caliper is reported in lws_adns_q_destroy */ lwsl_cx_info(context, "created new query: %s", name); lws_adns_dump(dns); return LADNS_RET_CONTINUING; failed: lwsl_cx_notice(context, "failed"); if (!cb(wsi, NULL, NULL, LADNS_RET_FAILED, opaque)) return LADNS_RET_FAILED_WSI_CLOSED; return LADNS_RET_FAILED; } libwebsockets-4.3.5/lib/system/async-dns/private-lib-async-dns.h000066400000000000000000000075321476025525100246560ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #define DNS_MAX 96 /* Maximum host name */ #define DNS_RECURSION_LIMIT 3 #define DNS_PACKET_LEN 1400 /* Buffer size for DNS packet */ #define MAX_CACHE_ENTRIES 10 /* Dont cache more than that */ #define DNS_QUERY_TIMEOUT 30 /* Query timeout, seconds */ /* * ... when we completed a query then the query object is destroyed and a * cache object below is created with the results in getaddrinfo format * appended to the allocation */ typedef struct lws_adns_cache { lws_sorted_usec_list_t sul; /* for cache TTL management */ lws_dll2_t list; struct lws_adns_cache *firstcache; struct lws_adns_cache *chain; struct addrinfo *results; const char *name; uint8_t flags; /* b0 = has ipv4, b1 = has ipv6 */ char refcount; char incomplete; /* addrinfo, lws_sa46, then name overallocated here */ } lws_adns_cache_t; /* * these objects are used while a query is ongoing... */ typedef struct { lws_sorted_usec_list_t sul; /* per-query write retry timer */ lws_sorted_usec_list_t write_sul; /* fail if unable to write by this time */ lws_dll2_t list; lws_metrics_caliper_compose(metcal) lws_dll2_owner_t wsi_adns; lws_async_dns_cb_t standalone_cb; /* if not associated to wsi */ struct lws_context *context; void *opaque; struct addrinfo **last; lws_async_dns_t *dns; lws_adns_cache_t *firstcache; lws_async_dns_retcode_t ret; uint16_t tid[3]; /* last 3 sent tid */ uint16_t qtype; uint16_t retry; uint8_t tsi; #if defined(LWS_WITH_IPV6) uint8_t sent[2]; #else uint8_t sent[1]; #endif uint8_t asked; uint8_t responded; uint8_t recursion; uint8_t tids; uint8_t go_nogo; uint8_t is_retry:1; /* name overallocated here */ } lws_adns_q_t; #define LADNS_MOST_RECENT_TID(_q) \ q->tid[(int)(_q->tids - 1) % (int)LWS_ARRAY_SIZE(q->tid)] enum { DHO_TID, DHO_FLAGS = 2, DHO_NQUERIES = 4, DHO_NANSWERS = 6, DHO_NAUTH = 8, DHO_NOTHER = 10, DHO_SIZEOF = 12 /* last */ }; void lws_adns_q_destroy(lws_adns_q_t *q); void sul_cb_expire(struct lws_sorted_usec_list *sul); void lws_adns_cache_destroy(lws_adns_cache_t *c); int lws_async_dns_complete(lws_adns_q_t *q, lws_adns_cache_t *c); lws_adns_cache_t * lws_adns_get_cache(lws_async_dns_t *dns, const char *name); void lws_adns_parse_udp(lws_async_dns_t *dns, const uint8_t *pkt, size_t len); lws_adns_q_t * lws_adns_get_query(lws_async_dns_t *dns, adns_query_type_t qtype, lws_dll2_owner_t *owner, uint16_t tid, const char *name); void lws_async_dns_trim_cache(lws_async_dns_t *dns); int lws_async_dns_get_new_tid(struct lws_context *context, lws_adns_q_t *q); #if defined(_DEBUG) void lws_adns_dump(lws_async_dns_t *dns); #else #define lws_adns_dump(_d) #endif libwebsockets-4.3.5/lib/system/dhcpclient/000077500000000000000000000000001476025525100206015ustar00rootroot00000000000000libwebsockets-4.3.5/lib/system/dhcpclient/dhcpc4.c000066400000000000000000000346461476025525100221270ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * The protocol part of dhcp4 client */ #include "private-lib-core.h" #include "private-lib-system-dhcpclient.h" #define LDHC_OP_BOOTREQUEST 1 #define LDHC_OP_BOOTREPLY 2 /* * IPv4... max total 576 * * 0 1 2 3 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | op (1) | htype (1) | hlen (1) | hops (1) | * +---------------+---------------+---------------+---------------+ * | +04 xid (4) | * +-------------------------------+-------------------------------+ * | +08 secs (2) | +0a flags (2) | * +-------------------------------+-------------------------------+ * | +0C ciaddr (4) client IP | * +---------------------------------------------------------------+ * | +10 yiaddr (4) your IP | * +---------------------------------------------------------------+ * | +14 siaddr (4) server IP | * +---------------------------------------------------------------+ * | +18 giaddr (4) gateway IP | * +---------------------------------------------------------------+ * | | * | +1C chaddr (16) client HWADDR | * +---------------------------------------------------------------+ * | | * | +2C sname (64) | * +---------------------------------------------------------------+ * | | * | +6C file (128) | * +---------------------------------------------------------------+ * | | * | +EC options (variable) | * +---------------------------------------------------------------+ */ static const uint8_t rawdisc4[] = { 0x45, 0x00, 0, 0, 0, 0, 0x40, 0, 0x2e, IPPROTO_UDP, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 68, 0, 67, 0, 0, 0, 0 }; static const uint32_t botable2[] = { 1500, 1750, 5000 /* in case dog slow */ }; static const lws_retry_bo_t bo2 = { botable2, LWS_ARRAY_SIZE(botable2), LWS_RETRY_CONCEAL_ALWAYS, 0, 0, 20 }; static int lws_dhcpc4_prep(uint8_t *start, unsigned int bufsiz, lws_dhcpc_req_t *r, int op) { uint8_t *p = start; memset(start, 0, bufsiz); *p++ = 1; *p++ = 1; *p++ = 6; /* sizeof ethernet MAC */ memcpy(p + 1, r->xid, 4); // p[7] = 0x80; /* broadcast flag */ p += 0x1c - 3; if (lws_plat_ifname_to_hwaddr(r->wsi_raw->desc.sockfd, (const char *)&r[1], r->is.mac, 6) < 0) return -1; memcpy(p, r->is.mac, 6); p += 16 + 64 + 128; *p++ = 0x63; /* RFC2132 Magic Cookie indicates start of options */ *p++ = 0x82; *p++ = 0x53; *p++ = 0x63; *p++ = LWSDHC4POPT_MESSAGE_TYPE; *p++ = 1; /* length */ *p++ = (uint8_t)op; switch (op) { case LWSDHC4PDISCOVER: *p++ = LWSDHC4POPT_PARAM_REQ_LIST; *p++ = 4; /* length */ *p++ = LWSDHC4POPT_SUBNET_MASK; *p++ = LWSDHC4POPT_ROUTER; *p++ = LWSDHC4POPT_DNSERVER; *p++ = LWSDHC4POPT_DOMAIN_NAME; break; case LWSDHC4PREQUEST: if (r->is.sa46[LWSDH_SA46_IP].sa4.sin_family != AF_INET) break; *p++ = LWSDHC4POPT_REQUESTED_ADS; *p++ = 4; /* length */ lws_ser_wu32be(p, r->is.sa46[LWSDH_SA46_IP].sa4.sin_addr.s_addr); p += 4; *p++ = LWSDHC4POPT_SERVER_ID; *p++ = 4; /* length */ lws_ser_wu32be(p, r->is.sa46[LWSDH_SA46_DHCP_SERVER].sa4.sin_addr.s_addr); p += 4; break; } *p++ = LWSDHC4POPT_END_OPTIONS; return lws_ptr_diff(p, start); } static int callback_dhcpc4(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { lws_dhcpc_req_t *r = (lws_dhcpc_req_t *)user; uint8_t pkt[LWS_PRE + 576], *p = pkt + LWS_PRE; int n, m; switch (reason) { case LWS_CALLBACK_RAW_ADOPT: lwsl_debug("%s: LWS_CALLBACK_RAW_ADOPT\n", __func__); lws_callback_on_writable(wsi); break; case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("%s: udp conn failed\n", __func__); /* fallthru */ case LWS_CALLBACK_RAW_CLOSE: lwsl_debug("%s: LWS_CALLBACK_RAW_CLOSE\n", __func__); if (!r) break; r->wsi_raw = NULL; lws_sul_cancel(&r->sul_write); if (r->state != LDHC_BOUND) { r->state = LDHC_INIT; lws_retry_sul_schedule(r->context, 0, &r->sul_conn, &bo2, lws_dhcpc4_retry_conn, &r->retry_count_conn); } break; case LWS_CALLBACK_RAW_RX: if (lws_dhcpc4_parse(r, in, len)) break; /* * that's it... commit to the configuration */ /* set up our network interface as offered */ if (lws_plat_ifconfig(r->wsi_raw->desc.sockfd, &r->is)) /* * Problem setting the IP... maybe something * transient like racing with NetworkManager? * Since the sul retries are still around it * will retry */ return -1; /* clear timeouts related to the broadcast socket */ lws_sul_cancel(&r->sul_write); lws_sul_cancel(&r->sul_conn); lwsl_notice("%s: DHCP configured %s\n", __func__, (const char *)&r[1]); r->state = LDHC_BOUND; lws_state_transition_steps(&wsi->a.context->mgr_system, LWS_SYSTATE_OPERATIONAL); r->cb(r->opaque, &r->is); r->wsi_raw = NULL; return -1; /* close the broadcast wsi */ case LWS_CALLBACK_RAW_WRITEABLE: if (!r) break; /* * UDP is not reliable, it can be locally dropped, or dropped * by any intermediary or the remote peer. So even though we * will do the write in a moment, we schedule another request * for rewrite according to the wsi retry policy. * * If the result came before, we'll cancel it in the close flow. * * If we have already reached the end of our concealed retries * in the policy, just close without another write. */ if (lws_dll2_is_detached(&r->sul_write.list) && lws_retry_sul_schedule_retry_wsi(wsi, &r->sul_write, lws_dhcpc_retry_write, &r->retry_count_write)) { /* we have reached the end of our concealed retries */ lwsl_warn("%s: concealed retries done, failing\n", __func__); goto retry_conn; } switch (r->state) { case LDHC_INIT: n = LWSDHC4PDISCOVER; goto bcast; case LDHC_REQUESTING: n = LWSDHC4PREQUEST; /* fallthru */ bcast: n = lws_dhcpc4_prep(p + 28, (unsigned int) (sizeof(pkt) - LWS_PRE - 28), r, n); if (n < 0) { lwsl_err("%s: failed to prep\n", __func__); break; } m = lws_plat_rawudp_broadcast(p, rawdisc4, LWS_ARRAY_SIZE(rawdisc4), (size_t)(n + 28), r->wsi_raw->desc.sockfd, (const char *)&r[1]); if (m < 0) lwsl_err("%s: Failed to write dhcp client req: " "%d %d, errno %d\n", __func__, n, m, LWS_ERRNO); break; default: break; } return 0; retry_conn: lws_retry_sul_schedule(wsi->a.context, 0, &r->sul_conn, &bo2, lws_dhcpc4_retry_conn, &r->retry_count_conn); return -1; default: break; } return 0; } struct lws_protocols lws_system_protocol_dhcpc4 = { "lws-dhcp4client", callback_dhcpc4, 0, 128, 0, NULL, 0 }; void lws_dhcpc4_retry_conn(struct lws_sorted_usec_list *sul) { lws_dhcpc_req_t *r = lws_container_of(sul, lws_dhcpc_req_t, sul_conn); if (r->wsi_raw || !lws_dll2_is_detached(&r->sul_conn.list)) return; /* create the UDP socket aimed at the server */ r->retry_count_write = 0; r->wsi_raw = lws_create_adopt_udp(r->context->vhost_system, "0.0.0.0", 68, LWS_CAUDP_PF_PACKET | LWS_CAUDP_BROADCAST, "lws-dhcp4client", (const char *)&r[1], NULL, NULL, &bo2, "dhcpc"); lwsl_debug("%s: created wsi_raw: %s\n", __func__, lws_wsi_tag(r->wsi_raw)); if (!r->wsi_raw) { lwsl_err("%s: unable to create udp skt\n", __func__); lws_retry_sul_schedule(r->context, 0, &r->sul_conn, &bo2, lws_dhcpc4_retry_conn, &r->retry_count_conn); return; } /* force the network if up */ lws_plat_if_up((const char *)&r[1], r->wsi_raw->desc.sockfd, 0); lws_plat_if_up((const char *)&r[1], r->wsi_raw->desc.sockfd, 1); r->wsi_raw->user_space = r; r->wsi_raw->user_space_externally_allocated = 1; lws_get_random(r->wsi_raw->a.context, r->xid, 4); } static void lws_sa46_set_ipv4(lws_dhcpc_req_t *r, unsigned int which, uint8_t *p) { r->is.sa46[which].sa4.sin_family = AF_INET; r->is.sa46[which].sa4.sin_addr.s_addr = ntohl(lws_ser_ru32be(p)); } int lws_dhcpc4_parse(lws_dhcpc_req_t *r, void *in, size_t len) { uint8_t pkt[LWS_PRE + 576], *p = pkt + LWS_PRE, *end; int n, m; switch (r->state) { case LDHC_INIT: /* expect DHCPOFFER */ case LDHC_REQUESTING: /* expect DHCPACK */ /* * We should check carefully if we like what we were * sent... anything can spam us with crafted replies */ if (len < 0x100) break; p = (uint8_t *)in + 28; /* skip to UDP payload */ if (p[0] != 2 || p[1] != 1 || p[2] != 6) break; if (memcmp(&p[4], r->xid, 4)) /* must be our xid */ break; if (memcmp(&p[0x1c], r->is.mac, 6)) /* our netif mac? */ break; /* the DHCP magic cookie must be in place */ if (lws_ser_ru32be(&p[0xec]) != 0x63825363) break; /* "your" client IP address */ lws_sa46_set_ipv4(r, LWSDH_SA46_IP, p + 0x10); /* IP of next server used in bootstrap */ lws_sa46_set_ipv4(r, LWSDH_SA46_DHCP_SERVER, p + 0x14); /* it looks legit so far... look at the options */ end = (uint8_t *)in + len; p += 0xec + 4; while (p < end) { uint8_t c = *p++; uint8_t l = 0; if (c && c != 0xff) { /* pad 0 and EOT 0xff have no length */ l = *p++; if (!l) { lwsl_err("%s: zero length\n", __func__); goto broken; } if (p + l > end) { /* ...nice try... */ lwsl_err("%s: bad len\n", __func__); goto broken; } } if (c == 0xff) /* end of options */ break; m = 0; switch (c) { case LWSDHC4POPT_SUBNET_MASK: n = LWSDH_IPV4_SUBNET_MASK; goto get_ipv4; case LWSDHC4POPT_ROUTER: lws_sa46_set_ipv4(r, LWSDH_SA46_IPV4_ROUTER, p); break; case LWSDHC4POPT_TIME_SERVER: lws_sa46_set_ipv4(r, LWSDH_SA46_NTP_SERVER, p); break; case LWSDHC4POPT_BROADCAST_ADS: n = LWSDH_IPV4_BROADCAST; goto get_ipv4; case LWSDHC4POPT_LEASE_TIME: n = LWSDH_LEASE_SECS; goto get_ipv4; case LWSDHC4POPT_RENEWAL_TIME: /* AKA T1 */ n = LWSDH_RENEWAL_SECS; goto get_ipv4; case LWSDHC4POPT_REBINDING_TIME: /* AKA T2 */ n = LWSDH_REBINDING_SECS; goto get_ipv4; case LWSDHC4POPT_DNSERVER: if (l & 3) break; m = LWSDH_SA46_DNS_SRV_1; while (l && m - LWSDH_SA46_DNS_SRV_1 < 4) { lws_sa46_set_ipv4(r, (unsigned int)m++, p); l = (uint8_t)(l - 4); p += 4; } break; case LWSDHC4POPT_DOMAIN_NAME: m = l; if (m > (int)sizeof(r->is.domain) - 1) m = sizeof(r->is.domain) - 1; lws_strnncpy(r->is.domain, (const char *)p, (unsigned int)m, sizeof(r->is.domain)); break; case LWSDHC4POPT_MESSAGE_TYPE: /* * Confirm this is the right message * for the state of the negotiation */ if (r->state == LDHC_INIT && *p != LWSDHC4POFFER) goto broken; if (r->state == LDHC_REQUESTING && *p != LWSDHC4PACK) goto broken; break; default: break; } p += l; continue; get_ipv4: if (l >= 4) r->is.nums[n] = ntohl(lws_ser_ru32be(p)); p += l; continue; broken: memset(r->is.sa46, 0, sizeof(r->is.sa46)); break; } #if defined(_DEBUG) /* dump what we have parsed out */ for (n = 0; n < (int)_LWSDH_NUMS_COUNT; n++) { m = (int)ntohl(r->is.nums[n]); lwsl_info("%s: %d: 0x%x\n", __func__, n, m); } for (n = 0; n < (int)_LWSDH_SA46_COUNT; n++) { lws_sa46_write_numeric_address(&r->is.sa46[n], (char *)pkt, 48); lwsl_info("%s: %d: %s\n", __func__, n, pkt); } #endif /* * Having seen everything in there... do we really feel * we could use it? Everything critical is there? */ if (!r->is.sa46[LWSDH_SA46_IP].sa4.sin_family || !r->is.sa46[LWSDH_SA46_DHCP_SERVER].sa4.sin_family || !r->is.sa46[LWSDH_SA46_IPV4_ROUTER].sa4.sin_family || !r->is.nums[LWSDH_IPV4_SUBNET_MASK] || !r->is.nums[LWSDH_LEASE_SECS] || !r->is.sa46[LWSDH_SA46_DNS_SRV_1].sa4.sin_family) { lwsl_notice("%s: rejecting on incomplete\n", __func__); memset(r->is.sa46, 0, sizeof(r->is.sa46)); break; } /* * Network layout has to be internally consistent... * DHCP server has to be reachable by broadcast and * default route has to be on same subnet */ if ((r->is.sa46[LWSDH_SA46_IP].sa4.sin_addr.s_addr & r->is.nums[LWSDH_IPV4_SUBNET_MASK]) != (r->is.sa46[LWSDH_SA46_DHCP_SERVER].sa4.sin_addr.s_addr & r->is.nums[LWSDH_IPV4_SUBNET_MASK])) { lwsl_notice("%s: rejecting on srv %x reachable on mask %x\n", __func__, r->is.sa46[LWSDH_SA46_IP].sa4.sin_addr.s_addr, r->is.nums[LWSDH_IPV4_SUBNET_MASK]); break; } if (r->state == LDHC_INIT) { lwsl_info("%s: moving to REQ\n", __func__); r->state = LDHC_REQUESTING; lws_callback_on_writable(r->wsi_raw); //break; } return 0; default: break; } return 1; } libwebsockets-4.3.5/lib/system/dhcpclient/dhcpclient.c000066400000000000000000000076251476025525100230740ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "private-lib-system-dhcpclient.h" void lws_dhcpc_retry_write(struct lws_sorted_usec_list *sul) { lws_dhcpc_req_t *r = lws_container_of(sul, lws_dhcpc_req_t, sul_write); lwsl_debug("%s\n", __func__); if (r && r->wsi_raw) lws_callback_on_writable(r->wsi_raw); } static void lws_dhcpc_destroy(lws_dhcpc_req_t **pr) { lws_dhcpc_req_t *r = *pr; lws_sul_cancel(&r->sul_conn); lws_sul_cancel(&r->sul_write); lws_sul_cancel(&r->sul_renew); if (r->wsi_raw) lws_set_timeout(r->wsi_raw, 1, LWS_TO_KILL_ASYNC); lws_dll2_remove(&r->list); lws_free_set_NULL(r); } int lws_dhcpc_status(struct lws_context *context, lws_sockaddr46 *sa46) { lws_dhcpc_req_t *r; lws_start_foreach_dll(struct lws_dll2 *, p, context->dhcpc_owner.head) { r = (lws_dhcpc_req_t *)p; if (r->state == LDHC_BOUND) { if (sa46) { memcpy(sa46, &r->is.sa46[LWSDH_SA46_DNS_SRV_1], sizeof(*sa46)); } return 1; } } lws_end_foreach_dll(p); return 0; } static lws_dhcpc_req_t * lws_dhcpc_find(struct lws_context *context, const char *iface, int af) { lws_dhcpc_req_t *r; /* see if we are already looking after this af / iface combination */ lws_start_foreach_dll(struct lws_dll2 *, p, context->dhcpc_owner.head) { r = (lws_dhcpc_req_t *)p; if (!strcmp((const char *)&r[1], iface) && af == r->af) return r; /* yes... */ } lws_end_foreach_dll(p); return NULL; } /* * Create a persistent dhcp client entry for network interface "iface" and AF * type "af" */ int lws_dhcpc_request(struct lws_context *context, const char *iface, int af, dhcpc_cb_t cb, void *opaque) { lws_dhcpc_req_t *r = lws_dhcpc_find(context, iface, af); int n; /* see if we are already looking after this af / iface combination */ if (r) return 0; /* nope... let's create a request object as he asks */ n = (int)strlen(iface); r = lws_zalloc(sizeof(*r) + (unsigned int)n + 1u, __func__); if (!r) return 1; memcpy(&r[1], iface, (unsigned int)n + 1); r->af = (uint8_t)af; r->cb = cb; r->opaque = opaque; r->context = context; r->state = LDHC_INIT; lws_strncpy(r->is.ifname, iface, sizeof(r->is.ifname)); lws_dll2_add_head(&r->list, &context->dhcpc_owner); /* add him to list */ lws_dhcpc4_retry_conn(&r->sul_conn); return 0; } /* * Destroy every DHCP client object related to interface "iface" */ static int _remove_if(struct lws_dll2 *d, void *opaque) { lws_dhcpc_req_t *r = lws_container_of(d, lws_dhcpc_req_t, list); if (!opaque || !strcmp((const char *)&r[1], (const char *)opaque)) lws_dhcpc_destroy(&r); return 0; } int lws_dhcpc_remove(struct lws_context *context, const char *iface) { lws_dll2_foreach_safe(&context->dhcpc_owner, (void *)iface, _remove_if); return 0; } libwebsockets-4.3.5/lib/system/dhcpclient/private-lib-system-dhcpclient.h000066400000000000000000000066261476025525100266370ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ typedef enum { LDHC_INIT_REBOOT, LDHC_REBOOTING, /* jitterwait */ LDHC_INIT, /* issue DHCPDISCOVER */ LDHC_SELECTING, LDHC_REQUESTING, LDHC_REBINDING, LDHC_BOUND, LDHC_RENEWING } lws_dhcpc_state_t; enum { LWSDHC4PDISCOVER = 1, LWSDHC4POFFER, LWSDHC4PREQUEST, LWSDHC4PDECLINE, LWSDHC4PACK, LWSDHC4PNACK, LWSDHC4PRELEASE, LWSDHC4POPT_PAD = 0, LWSDHC4POPT_SUBNET_MASK = 1, LWSDHC4POPT_TIME_OFFSET = 2, LWSDHC4POPT_ROUTER = 3, LWSDHC4POPT_TIME_SERVER = 4, LWSDHC4POPT_NAME_SERVER = 5, LWSDHC4POPT_DNSERVER = 6, LWSDHC4POPT_LOG_SERVER = 7, LWSDHC4POPT_COOKIE_SERVER = 8, LWSDHC4POPT_LPR_SERVER = 9, LWSDHC4POPT_IMPRESS_SERVER = 10, LWSDHC4POPT_RESLOC_SERVER = 11, LWSDHC4POPT_HOST_NAME = 12, LWSDHC4POPT_BOOTFILE_SIZE = 13, LWSDHC4POPT_MERIT_DUMP_FILE = 14, LWSDHC4POPT_DOMAIN_NAME = 15, LWSDHC4POPT_SWAP_SERVER = 16, LWSDHC4POPT_ROOT_PATH = 17, LWSDHC4POPT_EXTENSIONS_PATH = 18, LWSDHC4POPT_BROADCAST_ADS = 28, LWSDHC4POPT_REQUESTED_ADS = 50, LWSDHC4POPT_LEASE_TIME = 51, LWSDHC4POPT_OPTION_OVERLOAD = 52, LWSDHC4POPT_MESSAGE_TYPE = 53, LWSDHC4POPT_SERVER_ID = 54, LWSDHC4POPT_PARAM_REQ_LIST = 55, LWSDHC4POPT_MESSAGE = 56, LWSDHC4POPT_MAX_DHCP_MSG_SIZE = 57, LWSDHC4POPT_RENEWAL_TIME = 58, /* AKA T1 */ LWSDHC4POPT_REBINDING_TIME = 59, /* AKA T2 */ LWSDHC4POPT_VENDOR_CLASS_ID = 60, LWSDHC4POPT_CLIENT_ID = 61, LWSDHC4POPT_END_OPTIONS = 255 }; typedef struct lws_dhcpc_req { lws_dll2_t list; struct lws_context *context; lws_sorted_usec_list_t sul_renew; lws_sorted_usec_list_t sul_conn; lws_sorted_usec_list_t sul_write; dhcpc_cb_t cb; /* cb on completion / failure */ void *opaque; /* ignored by lws, give to cb */ /* these are separated so we can close the bcast one asynchronously */ struct lws *wsi_raw; /* for broadcast */ lws_dhcpc_state_t state; lws_dhcpc_ifstate_t is; uint16_t retry_count_conn; uint16_t retry_count_write; uint8_t xid[4]; uint8_t af; /* address family */ } lws_dhcpc_req_t; /* interface name is overallocated here */ void lws_dhcpc4_retry_conn(struct lws_sorted_usec_list *sul); int lws_dhcpc4_parse(lws_dhcpc_req_t *r, void *in, size_t len); void lws_dhcpc_retry_write(struct lws_sorted_usec_list *sul); libwebsockets-4.3.5/lib/system/fault-injection/000077500000000000000000000000001476025525100215575ustar00rootroot00000000000000libwebsockets-4.3.5/lib/system/fault-injection/fault-injection.c000066400000000000000000000231631476025525100250230ustar00rootroot00000000000000/* * lws System Fault Injection * * Copyright (C) 2019 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include static lws_fi_priv_t * lws_fi_lookup(const lws_fi_ctx_t *fic, const char *name) { lws_start_foreach_dll(struct lws_dll2 *, p, fic->fi_owner.head) { lws_fi_priv_t *pv = lws_container_of(p, lws_fi_priv_t, list); if (!strcmp(pv->fi.name, name)) return pv; } lws_end_foreach_dll(p); return NULL; } int lws_fi(const lws_fi_ctx_t *fic, const char *name) { lws_fi_priv_t *pv; int n; pv = lws_fi_lookup(fic, name); if (!pv) return 0; switch (pv->fi.type) { case LWSFI_ALWAYS: goto inject; case LWSFI_DETERMINISTIC: pv->fi.times++; if (pv->fi.times >= pv->fi.pre) if (pv->fi.times < pv->fi.pre + pv->fi.count) goto inject; return 0; case LWSFI_PROBABILISTIC: if (lws_xos_percent((lws_xos_t *)&fic->xos, (int)pv->fi.pre)) goto inject; return 0; case LWSFI_PATTERN: case LWSFI_PATTERN_ALLOC: n = (int)((pv->fi.times++) % pv->fi.count); if (pv->fi.pattern[n >> 3] & (1 << (n & 7))) goto inject; return 0; default: return 0; } return 0; inject: lwsl_warn("%s: Injecting fault %s->%s\n", __func__, fic->name ? fic->name : "unk", pv->fi.name); return 1; } int lws_fi_range(const lws_fi_ctx_t *fic, const char *name, uint64_t *result) { lws_fi_priv_t *pv; uint64_t d; pv = lws_fi_lookup(fic, name); if (!pv) return 1; if (pv->fi.type != LWSFI_RANGE) { lwsl_err("%s: fault %s is not a 123..456 range\n", __func__, name); return 1; } d = pv->fi.count - pv->fi.pre; *result = pv->fi.pre + (lws_xos((lws_xos_t *)&fic->xos) % d); return 0; } int _lws_fi_user_wsi_fi(struct lws *wsi, const char *name) { return lws_fi(&wsi->fic, name); } int _lws_fi_user_context_fi(struct lws_context *ctx, const char *name) { return lws_fi(&ctx->fic, name); } #if defined(LWS_WITH_SECURE_STREAMS) int _lws_fi_user_ss_fi(struct lws_ss_handle *h, const char *name) { return lws_fi(&h->fic, name); } #if defined(LWS_WITH_SECURE_STREAMS_PROXY_API) int _lws_fi_user_sspc_fi(struct lws_sspc_handle *h, const char *name) { return lws_fi(&h->fic, name); } #endif #endif int lws_fi_add(lws_fi_ctx_t *fic, const lws_fi_t *fi) { lws_fi_priv_t *pv; size_t n = strlen(fi->name); pv = lws_malloc(sizeof(*pv) + n + 1, __func__); if (!pv) return 1; lws_dll2_clear(&pv->list); memcpy(&pv->fi, fi, sizeof(*fi)); pv->fi.name = (const char *)&pv[1]; memcpy(&pv[1], fi->name, n + 1); lws_dll2_add_tail(&pv->list, &fic->fi_owner); return 0; } void lws_fi_remove(lws_fi_ctx_t *fic, const char *name) { lws_fi_priv_t *pv = lws_fi_lookup(fic, name); if (!pv) return; lws_dll2_remove(&pv->list); lws_free(pv); } void lws_fi_import(lws_fi_ctx_t *fic_dest, const lws_fi_ctx_t *fic_src) { /* inherit the PRNG seed for our context from source guy too */ lws_xos_init(&fic_dest->xos, lws_xos((lws_xos_t *)&fic_src->xos)); lws_start_foreach_dll_safe(struct lws_dll2 *, p, p1, fic_src->fi_owner.head) { lws_fi_priv_t *pv = lws_container_of(p, lws_fi_priv_t, list); lws_dll2_remove(&pv->list); lws_dll2_add_tail(&pv->list, &fic_dest->fi_owner); } lws_end_foreach_dll_safe(p, p1); } static void do_inherit(lws_fi_ctx_t *fic_dest, lws_fi_t *pfi, size_t trim) { lws_fi_t fi = *pfi; fi.name += trim; lwsl_info("%s: %s: %s inherited as %s\n", __func__, fic_dest->name, pfi->name, fi.name); if (fi.type == LWSFI_PATTERN_ALLOC) { fi.pattern = lws_malloc((size_t)((fi.count >> 3) + 1), __func__); if (!fi.pattern) return; memcpy((uint8_t *)fi.pattern, pfi->pattern, (size_t)((fi.count >> 3) + 1)); } lws_fi_add(fic_dest, &fi); } void lws_fi_inherit_copy(lws_fi_ctx_t *fic_dest, const lws_fi_ctx_t *fic_src, const char *scope, const char *value) { size_t sl = 0, vl = 0; if (scope) sl = strlen(scope); if (value) vl = strlen(value); lws_start_foreach_dll_safe(struct lws_dll2 *, p, p1, fic_src->fi_owner.head) { lws_fi_priv_t *pv = lws_container_of(p, lws_fi_priv_t, list); size_t nl = strlen(pv->fi.name); if (!scope) do_inherit(fic_dest, &pv->fi, 0); else if (nl > sl + 2 && !strncmp(pv->fi.name, scope, sl) && pv->fi.name[sl] == '/') do_inherit(fic_dest, &pv->fi, sl + 1); else { if (value && nl > sl + vl + 2 && pv->fi.name[sl] == '=' && !strncmp(pv->fi.name + sl + 1, value, vl) && pv->fi.name[sl + 1 + vl] == '/') do_inherit(fic_dest, &pv->fi, sl + vl + 2); } } lws_end_foreach_dll_safe(p, p1); } void lws_fi_destroy(const lws_fi_ctx_t *fic) { lws_start_foreach_dll_safe(struct lws_dll2 *, p, p1, fic->fi_owner.head) { lws_fi_priv_t *pv = lws_container_of(p, lws_fi_priv_t, list); if (pv->fi.type == LWSFI_PATTERN_ALLOC && pv->fi.pattern) { lws_free((void *)pv->fi.pattern); pv->fi.pattern = NULL; } lws_dll2_remove(&pv->list); lws_free(pv); } lws_end_foreach_dll_safe(p, p1); } /* * We want to support these kinds of qualifier * * myfault true always * myfault(10%) true 10% of the time * myfault(....X X) true when X * myfault2(20..3000) pick a number between 20 and 3000 */ enum { PARSE_NAME, PARSE_WHEN, PARSE_PC, PARSE_ENDBR, PARSE_COMMA }; void lws_fi_deserialize(lws_fi_ctx_t *fic, const char *sers) { int state = PARSE_NAME, m; struct lws_tokenize ts; lws_fi_t fi; char nm[64]; /* * Go through the comma-separated list of faults * creating them and adding to the lws_context info */ lws_tokenize_init(&ts, sers, LWS_TOKENIZE_F_DOT_NONTERM | LWS_TOKENIZE_F_NO_INTEGERS | LWS_TOKENIZE_F_NO_FLOATS | LWS_TOKENIZE_F_EQUALS_NONTERM | LWS_TOKENIZE_F_SLASH_NONTERM | LWS_TOKENIZE_F_MINUS_NONTERM); ts.len = (unsigned int)strlen(sers); if (ts.len < 1 || ts.len > 10240) return; do { ts.e = (int8_t)lws_tokenize(&ts); switch (ts.e) { case LWS_TOKZE_TOKEN: if (state == PARSE_NAME) { /* * One fault to inject looks like, eg, * * vh=xxx/listenskt */ memset(&fi, 0, sizeof(fi)); lws_strnncpy(nm, ts.token, ts.token_len, sizeof(nm)); fi.name = nm; fi.type = LWSFI_ALWAYS; lwsl_notice("%s: name %.*s\n", __func__, (int)ts.token_len, ts.token); /* added later, potentially after (when) */ break; } if (state == PARSE_WHEN) { /* it's either numeric (then % or ..num2), or * .X pattern */ lwsl_notice("%s: when\n", __func__); if (*ts.token == '.' || *ts.token == 'X') { uint8_t *pat; size_t n; /* * pattern... we need to allocate it */ fi.type = LWSFI_PATTERN_ALLOC; pat = lws_zalloc((ts.token_len >> 3) + 1, __func__); if (!pat) return; fi.pattern = pat; fi.count = (uint64_t)ts.token_len; for (n = 0; n < ts.token_len; n++) if (ts.token[n] == 'X') pat[n >> 3] = (uint8_t)( pat[n >> 3] | (1 << (n & 7))); lwsl_hexdump_notice(pat, (ts.token_len >> 3) + 1); state = PARSE_ENDBR; break; } fi.pre = (uint64_t)atoll(ts.token); for (m = 0; m < (int)ts.token_len - 1; m++) if (ts.token[m] < '0' || ts.token[m] > '9') break; /* * We can understand num% or num..num */ if (m != (int)ts.token_len && ts.token[m] == '.' && ts.token[m + 1] == '.') { fi.count = (uint64_t)atoll( &ts.token[m + 2]); fi.type = LWSFI_RANGE; state = PARSE_ENDBR; if (fi.pre >= fi.count) { lwsl_err("%s: range must have " "smaller first!\n", __func__); } lwsl_notice("%s: range %llx .." "%llx\n", __func__, (unsigned long long)fi.pre, (unsigned long long)fi.count); break; } lwsl_notice("%s: prob %d%%\n", __func__, (int)fi.pre); fi.type = LWSFI_PROBABILISTIC; state = PARSE_PC; break; } break; case LWS_TOKZE_DELIMITER: if (*ts.token == ',') { lws_fi_add(fic, &fi); state = PARSE_NAME; break; } if (*ts.token == '(') { lwsl_notice("%s: (\n", __func__); if (state != PARSE_NAME) { lwsl_err("%s: misplaced (\n", __func__); return; } state = PARSE_WHEN; break; } if (*ts.token == ')') { if (state != PARSE_ENDBR) { lwsl_err("%s: misplaced )\n", __func__); return; } state = PARSE_NAME; break; } if (*ts.token == '%') { if (state != PARSE_PC) { lwsl_err("%s: misplaced %%\n", __func__); return; } state = PARSE_ENDBR; break; } break; case LWS_TOKZE_ENDED: lws_fi_add(fic, &fi); return; default: return; } } while (ts.e > 0); } libwebsockets-4.3.5/lib/system/fault-injection/private-lib-system-fault-injection.h000066400000000000000000000025511476025525100305640ustar00rootroot00000000000000/* * lws System Message Distribution * * Copyright (C) 2019 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #if defined(LWS_WITH_SYS_FAULT_INJECTION) typedef struct lws_fi_priv { lws_dll2_t list; lws_fi_t fi; } lws_fi_priv_t; void lws_fi_import(lws_fi_ctx_t *fic_dest, const lws_fi_ctx_t *fic_src); #endif libwebsockets-4.3.5/lib/system/metrics/000077500000000000000000000000001476025525100201325ustar00rootroot00000000000000libwebsockets-4.3.5/lib/system/metrics/CMakeLists.txt000066400000000000000000000002111476025525100226640ustar00rootroot00000000000000include_directories(.) if (LWS_WITH_SYS_METRICS) list(APPEND SOURCES system/metrics/metrics.c ) endif() exports_to_parent_scope() libwebsockets-4.3.5/lib/system/metrics/metrics.c000066400000000000000000000532231476025525100217510ustar00rootroot00000000000000/* * lws Generic Metrics * * Copyright (C) 2019 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include int lws_metrics_tag_add(lws_dll2_owner_t *owner, const char *name, const char *val) { size_t vl = strlen(val); lws_metrics_tag_t *tag; // lwsl_notice("%s: adding %s=%s\n", __func__, name, val); /* * Remove (in order to replace) any existing tag of same name */ lws_start_foreach_dll(struct lws_dll2 *, d, owner->head) { tag = lws_container_of(d, lws_metrics_tag_t, list); if (!strcmp(name, tag->name)) { lws_dll2_remove(&tag->list); lws_free(tag); break; } } lws_end_foreach_dll(d); /* * Create the new tag */ tag = lws_malloc(sizeof(*tag) + vl + 1, __func__); if (!tag) return 1; lws_dll2_clear(&tag->list); tag->name = name; memcpy(&tag[1], val, vl + 1); lws_dll2_add_tail(&tag->list, owner); return 0; } int lws_metrics_tag_wsi_add(struct lws *wsi, const char *name, const char *val) { __lws_lc_tag(wsi->a.context, NULL, &wsi->lc, "|%s", val); return lws_metrics_tag_add(&wsi->cal_conn.mtags_owner, name, val); } #if defined(LWS_WITH_SECURE_STREAMS) int lws_metrics_tag_ss_add(struct lws_ss_handle *ss, const char *name, const char *val) { __lws_lc_tag(ss->context, NULL, &ss->lc, "|%s", val); return lws_metrics_tag_add(&ss->cal_txn.mtags_owner, name, val); } #if defined(LWS_WITH_SECURE_STREAMS_PROXY_API) int lws_metrics_tag_sspc_add(struct lws_sspc_handle *sspc, const char *name, const char *val) { __lws_lc_tag(sspc->context, NULL, &sspc->lc, "|%s", val); return lws_metrics_tag_add(&sspc->cal_txn.mtags_owner, name, val); } #endif #endif void lws_metrics_tags_destroy(lws_dll2_owner_t *owner) { lws_metrics_tag_t *t; lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, owner->head) { t = lws_container_of(d, lws_metrics_tag_t, list); lws_dll2_remove(&t->list); lws_free(t); } lws_end_foreach_dll_safe(d, d1); } size_t lws_metrics_tags_serialize(lws_dll2_owner_t *owner, char *buf, size_t len) { char *end = buf + len - 1, *p = buf; lws_metrics_tag_t *t; lws_start_foreach_dll(struct lws_dll2 *, d, owner->head) { t = lws_container_of(d, lws_metrics_tag_t, list); p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "%s=\"%s\"", t->name, (const char *)&t[1]); if (d->next && p + 2 < end) *p++ = ','; } lws_end_foreach_dll(d); *p = '\0'; return lws_ptr_diff_size_t(p, buf); } const char * lws_metrics_tag_get(lws_dll2_owner_t *owner, const char *name) { lws_metrics_tag_t *t; lws_start_foreach_dll(struct lws_dll2 *, d, owner->head) { t = lws_container_of(d, lws_metrics_tag_t, list); if (!strcmp(name, t->name)) return (const char *)&t[1]; } lws_end_foreach_dll(d); return NULL; } static int lws_metrics_dump_cb(lws_metric_pub_t *pub, void *user); static void lws_metrics_report_and_maybe_clear(struct lws_context *ctx, lws_metric_pub_t *pub) { if (!pub->us_first || pub->us_last == pub->us_dumped) return; lws_metrics_dump_cb(pub, ctx); } static void lws_metrics_periodic_cb(lws_sorted_usec_list_t *sul) { lws_metric_policy_dyn_t *dmp = lws_container_of(sul, lws_metric_policy_dyn_t, sul); struct lws_context *ctx = lws_container_of(dmp->list.owner, struct lws_context, owner_mtr_dynpol); if (!ctx->system_ops || !ctx->system_ops->metric_report) return; lws_start_foreach_dll(struct lws_dll2 *, d, dmp->owner.head) { lws_metric_t *mt = lws_container_of(d, lws_metric_t, list); lws_metric_pub_t *pub = lws_metrics_priv_to_pub(mt); lws_metrics_report_and_maybe_clear(ctx, pub); } lws_end_foreach_dll(d); #if defined(LWS_WITH_SYS_SMD) && defined(LWS_WITH_SECURE_STREAMS) (void)lws_smd_msg_printf(ctx, LWSSMDCL_METRICS, "{\"dump\":\"%s\",\"ts\":%lu}", dmp->policy->name, (long)ctx->last_policy); #endif if (dmp->policy->us_schedule) lws_sul_schedule(ctx, 0, &dmp->sul, lws_metrics_periodic_cb, (lws_usec_t)dmp->policy->us_schedule); } /* * Policies are in two pieces, a const policy and a dynamic part that contains * lists and sul timers for the policy etc. This creates a dynmic part * corresponding to the static part. * * Metrics can exist detached from being bound to any policy about how to * report them, these are collected but not reported unless they later become * bound to a reporting policy dynamically. */ lws_metric_policy_dyn_t * lws_metrics_policy_dyn_create(struct lws_context *ctx, const lws_metric_policy_t *po) { lws_metric_policy_dyn_t *dmet; dmet = lws_zalloc(sizeof(*dmet), __func__); if (!dmet) return NULL; dmet->policy = po; lws_dll2_add_tail(&dmet->list, &ctx->owner_mtr_dynpol); if (po->us_schedule) lws_sul_schedule(ctx, 0, &dmet->sul, lws_metrics_periodic_cb, (lws_usec_t)po->us_schedule); return dmet; } /* * Get a dynamic metrics policy from the const one, may return NULL if OOM */ lws_metric_policy_dyn_t * lws_metrics_policy_get_dyn(struct lws_context *ctx, const lws_metric_policy_t *po) { lws_start_foreach_dll(struct lws_dll2 *, d, ctx->owner_mtr_dynpol.head) { lws_metric_policy_dyn_t *dm = lws_container_of(d, lws_metric_policy_dyn_t, list); if (dm->policy == po) return dm; } lws_end_foreach_dll(d); /* * no dyn policy part for this const policy --> create one * * We want a dynamic part for listing metrics that bound to the policy */ return lws_metrics_policy_dyn_create(ctx, po); } static int lws_metrics_check_in_policy(const char *polstring, const char *name) { struct lws_tokenize ts; memset(&ts, 0, sizeof(ts)); ts.start = polstring; ts.len = strlen(polstring); ts.flags = (uint16_t)(LWS_TOKENIZE_F_MINUS_NONTERM | LWS_TOKENIZE_F_ASTERISK_NONTERM | LWS_TOKENIZE_F_COMMA_SEP_LIST | LWS_TOKENIZE_F_NO_FLOATS | LWS_TOKENIZE_F_DOT_NONTERM); do { ts.e = (int8_t)lws_tokenize(&ts); if (ts.e == LWS_TOKZE_TOKEN) { if (!lws_strcmp_wildcard(ts.token, ts.token_len, name, strlen(name))) /* yes, we are mentioned in this guy's policy */ return 0; } } while (ts.e > 0); /* no, this policy doesn't apply to a metric with our name */ return 1; } static const lws_metric_policy_t * lws_metrics_find_policy(struct lws_context *ctx, const char *name) { const lws_metric_policy_t *mp = ctx->metrics_policies; if (!mp) { #if defined(LWS_WITH_SECURE_STREAMS) if (ctx->pss_policies) mp = ctx->pss_policies->metrics; #endif if (!mp) return NULL; } while (mp) { if (mp->report && !lws_metrics_check_in_policy(mp->report, name)) return mp; mp = mp->next; } return NULL; } /* * Create a lws_metric_t, bind to a named policy if possible (or add to the * context list of unbound metrics) and set its lws_system * idx. The metrics objects themselves are typically composed into other * objects and are well-known composed members of them. */ lws_metric_t * lws_metric_create(struct lws_context *ctx, uint8_t flags, const char *name) { const lws_metric_policy_t *po; lws_metric_policy_dyn_t *dmp; lws_metric_pub_t *pub; lws_metric_t *mt; char pname[32]; size_t nl; if (ctx->metrics_prefix) { /* * In multi-process case, we want to prefix metrics from this * process / context with a string distinguishing which * application they came from */ nl = (size_t)lws_snprintf(pname, sizeof(pname) - 1, "%s.%s", ctx->metrics_prefix, name); name = pname; } else nl = strlen(name); mt = (lws_metric_t *)lws_zalloc(sizeof(*mt) /* private */ + sizeof(lws_metric_pub_t) + nl + 1 /* copy of metric name */, __func__); if (!mt) return NULL; pub = lws_metrics_priv_to_pub(mt); pub->name = (char *)pub + sizeof(lws_metric_pub_t); memcpy((char *)pub->name, name, nl + 1); pub->flags = flags; /* after these common members, we have to use the right type */ if (!(flags & LWSMTFL_REPORT_HIST)) { /* anything is smaller or equal to this */ pub->u.agg.min = ~(u_mt_t)0; pub->us_first = lws_now_usecs(); } mt->ctx = ctx; /* * Let's see if we can bind to a reporting policy straight away */ po = lws_metrics_find_policy(ctx, name); if (po) { dmp = lws_metrics_policy_get_dyn(ctx, po); if (dmp) { lwsl_notice("%s: metpol %s\n", __func__, name); lws_dll2_add_tail(&mt->list, &dmp->owner); return 0; } } /* * If not, well, let's go on without and maybe later at runtime, he'll * get interested in us and apply a reporting policy */ lws_dll2_add_tail(&mt->list, &ctx->owner_mtr_no_pol); return mt; } /* * If our metric is bound to a reporting policy, return a pointer to it, * otherwise NULL */ const lws_metric_policy_t * lws_metric_get_policy(lws_metric_t *mt) { lws_metric_policy_dyn_t *dp; /* * Our metric must either be on the "no policy" context list or * listed by the dynamic part of the policy it is bound to */ assert(mt->list.owner); if ((char *)mt->list.owner >= (char *)mt->ctx && (char *)mt->list.owner < (char *)mt->ctx + sizeof(struct lws_context)) /* we are on the "no policy" context list */ return NULL; /* we are listed by a dynamic policy owner */ dp = lws_container_of(mt->list.owner, lws_metric_policy_dyn_t, owner); /* return the const policy the dynamic policy represents */ return dp->policy; } void lws_metric_rebind_policies(struct lws_context *ctx) { const lws_metric_policy_t *po; lws_metric_policy_dyn_t *dmp; lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, ctx->owner_mtr_no_pol.head) { lws_metric_t *mt = lws_container_of(d, lws_metric_t, list); lws_metric_pub_t *pub = lws_metrics_priv_to_pub(mt); po = lws_metrics_find_policy(ctx, pub->name); if (po) { dmp = lws_metrics_policy_get_dyn(ctx, po); if (dmp) { lwsl_info("%s: %s <- pol %s\n", __func__, pub->name, po->name); lws_dll2_remove(&mt->list); lws_dll2_add_tail(&mt->list, &dmp->owner); } } else lwsl_debug("%s: no pol for %s\n", __func__, pub->name); } lws_end_foreach_dll_safe(d, d1); } int lws_metric_destroy(lws_metric_t **pmt, int keep) { lws_metric_t *mt = *pmt; lws_metric_pub_t *pub; if (!mt) return 0; pub = lws_metrics_priv_to_pub(mt); lws_dll2_remove(&mt->list); if (keep) { lws_dll2_add_tail(&mt->list, &mt->ctx->owner_mtr_no_pol); return 0; } if (pub->flags & LWSMTFL_REPORT_HIST) { lws_metric_bucket_t *b = pub->u.hist.head, *b1; pub->u.hist.head = NULL; while (b) { b1 = b->next; lws_free(b); b = b1; } } lws_free(mt); *pmt = NULL; return 0; } /* * Allow an existing metric to have its reporting policy changed at runtime */ int lws_metric_switch_policy(lws_metric_t *mt, const char *polname) { const lws_metric_policy_t *po; lws_metric_policy_dyn_t *dmp; po = lws_metrics_find_policy(mt->ctx, polname); if (!po) return 1; dmp = lws_metrics_policy_get_dyn(mt->ctx, po); if (!dmp) return 1; lws_dll2_remove(&mt->list); lws_dll2_add_tail(&mt->list, &dmp->owner); return 0; } /* * If keep is set, don't destroy existing metrics objects, just detach them * from the policy being deleted and keep track of them on ctx-> * owner_mtr_no_pol */ void lws_metric_policy_dyn_destroy(lws_metric_policy_dyn_t *dm, int keep) { lws_sul_cancel(&dm->sul); lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, dm->owner.head) { lws_metric_t *m = lws_container_of(d, lws_metric_t, list); lws_metric_destroy(&m, keep); } lws_end_foreach_dll_safe(d, d1); lws_sul_cancel(&dm->sul); lws_dll2_remove(&dm->list); lws_free(dm); } /* * Destroy all dynamic metrics policies, deinit any metrics still using them */ void lws_metrics_destroy(struct lws_context *ctx) { lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, ctx->owner_mtr_dynpol.head) { lws_metric_policy_dyn_t *dm = lws_container_of(d, lws_metric_policy_dyn_t, list); lws_metric_policy_dyn_destroy(dm, 0); /* don't keep */ } lws_end_foreach_dll_safe(d, d1); /* destroy metrics with no current policy too... */ lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, ctx->owner_mtr_no_pol.head) { lws_metric_t *mt = lws_container_of(d, lws_metric_t, list); lws_metric_destroy(&mt, 0); /* don't keep */ } lws_end_foreach_dll_safe(d, d1); /* ... that's the whole allocated metrics footprint gone... */ } int lws_metrics_hist_bump_(lws_metric_pub_t *pub, const char *name) { lws_metric_bucket_t *buck = pub->u.hist.head; size_t nl = strlen(name); char *nm; if (!(pub->flags & LWSMTFL_REPORT_HIST)) { lwsl_err("%s: %s not histogram: flags %d\n", __func__, pub->name, pub->flags); assert(0); } assert(nl < 255); pub->us_last = lws_now_usecs(); if (!pub->us_first) pub->us_first = pub->us_last; while (buck) { if (lws_metric_bucket_name_len(buck) == nl && !strcmp(name, lws_metric_bucket_name(buck))) { buck->count++; goto happy; } buck = buck->next; } buck = lws_malloc(sizeof(*buck) + nl + 2, __func__); if (!buck) return 1; nm = (char *)buck + sizeof(*buck); /* length byte at beginning of name, avoid struct alignment overhead */ *nm = (char)nl; memcpy(nm + 1, name, nl + 1); buck->next = pub->u.hist.head; pub->u.hist.head = buck; buck->count = 1; pub->u.hist.list_size++; happy: pub->u.hist.total_count++; return 0; } int lws_metrics_hist_bump_describe_wsi(struct lws *wsi, lws_metric_pub_t *pub, const char *name) { char desc[192], d1[48], *p = desc, *end = desc + sizeof(desc); #if defined(LWS_WITH_SECURE_STREAMS) #if defined(LWS_WITH_SECURE_STREAMS_PROXY_API) if (wsi->client_bound_sspc) { lws_sspc_handle_t *h = (lws_sspc_handle_t *)wsi->a.opaque_user_data; if (h) p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "ss=\"%s\",", h->ssi.streamtype); } else if (wsi->client_proxy_onward) { lws_ss_handle_t *h = (lws_ss_handle_t *)wsi->a.opaque_user_data; struct conn *conn = h->conn_if_sspc_onw; if (conn && conn->ss) p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "ss=\"%s\",", conn->ss->info.streamtype); } else #endif if (wsi->for_ss) { lws_ss_handle_t *h = (lws_ss_handle_t *)wsi->a.opaque_user_data; if (h) p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "ss=\"%s\",", h->info.streamtype); } #endif #if defined(LWS_WITH_CLIENT) if (wsi->stash && wsi->stash->cis[CIS_HOST]) p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "hostname=\"%s\",", wsi->stash->cis[CIS_HOST]); #endif lws_sa46_write_numeric_address(&wsi->sa46_peer, d1, sizeof(d1)); p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "peer=\"%s\",", d1); p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "%s", name); lws_metrics_hist_bump_(pub, desc); return 0; } int lws_metrics_foreach(struct lws_context *ctx, void *user, int (*cb)(lws_metric_pub_t *pub, void *user)) { int n; lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1, ctx->owner_mtr_no_pol.head) { lws_metric_t *mt = lws_container_of(d, lws_metric_t, list); n = cb(lws_metrics_priv_to_pub(mt), user); if (n) return n; } lws_end_foreach_dll_safe(d, d1); lws_start_foreach_dll_safe(struct lws_dll2 *, d2, d3, ctx->owner_mtr_dynpol.head) { lws_metric_policy_dyn_t *dm = lws_container_of(d2, lws_metric_policy_dyn_t, list); lws_start_foreach_dll_safe(struct lws_dll2 *, e, e1, dm->owner.head) { lws_metric_t *mt = lws_container_of(e, lws_metric_t, list); n = cb(lws_metrics_priv_to_pub(mt), user); if (n) return n; } lws_end_foreach_dll_safe(e, e1); } lws_end_foreach_dll_safe(d2, d3); return 0; } static int lws_metrics_dump_cb(lws_metric_pub_t *pub, void *user) { struct lws_context *ctx = (struct lws_context *)user; int n; if (!ctx->system_ops || !ctx->system_ops->metric_report) return 0; /* * return nonzero to reset stats */ n = ctx->system_ops->metric_report(pub); /* track when we dumped it... */ pub->us_first = pub->us_dumped = lws_now_usecs(); pub->us_last = 0; if (!n) return 0; /* ... and clear it back to 0 */ if (pub->flags & LWSMTFL_REPORT_HIST) { lws_metric_bucket_t *b = pub->u.hist.head, *b1; pub->u.hist.head = NULL; while (b) { b1 = b->next; lws_free(b); b = b1; } pub->u.hist.total_count = 0; pub->u.hist.list_size = 0; } else memset(&pub->u.agg, 0, sizeof(pub->u.agg)); return 0; } void lws_metrics_dump(struct lws_context *ctx) { lws_metrics_foreach(ctx, ctx, lws_metrics_dump_cb); } static int _lws_metrics_format(lws_metric_pub_t *pub, lws_usec_t now, int gng, char *buf, size_t len) { const lws_humanize_unit_t *schema = humanize_schema_si; char *end = buf + len - 1, *obuf = buf; if (pub->flags & LWSMTFL_REPORT_DUTY_WALLCLOCK_US) schema = humanize_schema_us; if (!(pub->flags & LWSMTFL_REPORT_MEAN)) { /* only the sum is meaningful */ if (pub->flags & LWSMTFL_REPORT_DUTY_WALLCLOCK_US) { buf += lws_snprintf(buf, lws_ptr_diff_size_t(end, buf), " %u, ", (unsigned int)pub->u.agg.count[gng]); buf += lws_humanize(buf, lws_ptr_diff_size_t(end, buf), (uint64_t)pub->u.agg.sum[gng], humanize_schema_us); buf += lws_snprintf(buf, lws_ptr_diff_size_t(end, buf), " / "); buf += lws_humanize(buf, lws_ptr_diff_size_t(end, buf), (uint64_t)(now - pub->us_first), humanize_schema_us); buf += lws_snprintf(buf, lws_ptr_diff_size_t(end, buf), " (%d%%)", (int)((100 * pub->u.agg.sum[gng]) / (unsigned long)(now - pub->us_first))); } else { /* it's a monotonic ordinal, like total tx */ buf += lws_snprintf(buf, lws_ptr_diff_size_t(end, buf), "(%u) ", (unsigned int)pub->u.agg.count[gng]); buf += lws_humanize(buf, lws_ptr_diff_size_t(end, buf), (uint64_t)pub->u.agg.sum[gng], humanize_schema_si); } } else { buf += lws_snprintf(buf, lws_ptr_diff_size_t(end, buf), "%u, mean: ", (unsigned int)pub->u.agg.count[gng]); /* the average over the period is meaningful */ buf += lws_humanize(buf, lws_ptr_diff_size_t(end, buf), (uint64_t)(pub->u.agg.count[gng] ? pub->u.agg.sum[gng] / pub->u.agg.count[gng] : 0), schema); } return lws_ptr_diff(buf, obuf); } int lws_metrics_format(lws_metric_pub_t *pub, lws_metric_bucket_t **sub, char *buf, size_t len) { char *end = buf + len - 1, *obuf = buf; lws_usec_t t = lws_now_usecs(); const lws_humanize_unit_t *schema = humanize_schema_si; if (pub->flags & LWSMTFL_REPORT_DUTY_WALLCLOCK_US) schema = humanize_schema_us; if (pub->flags & LWSMTFL_REPORT_HIST) { if (*sub == NULL) return 0; if (*sub) { buf += lws_snprintf(buf, lws_ptr_diff_size_t(end, buf), "%s{%s} %llu", pub->name, lws_metric_bucket_name(*sub), (unsigned long long)(*sub)->count); *sub = (*sub)->next; } goto happy; } buf += lws_snprintf(buf, lws_ptr_diff_size_t(end, buf), "%s: ", pub->name); if (!pub->u.agg.count[METRES_GO] && !pub->u.agg.count[METRES_NOGO]) return 0; if (pub->u.agg.count[METRES_GO]) { if (!(pub->flags & LWSMTFL_REPORT_ONLY_GO)) buf += lws_snprintf(buf, lws_ptr_diff_size_t(end, buf), "Go: "); buf += _lws_metrics_format(pub, t, METRES_GO, buf, lws_ptr_diff_size_t(end, buf)); } if (!(pub->flags & LWSMTFL_REPORT_ONLY_GO) && pub->u.agg.count[METRES_NOGO]) { buf += lws_snprintf(buf, lws_ptr_diff_size_t(end, buf), ", NoGo: "); buf += _lws_metrics_format(pub, t, METRES_NOGO, buf, lws_ptr_diff_size_t(end, buf)); } if (pub->flags & LWSMTFL_REPORT_MEAN) { buf += lws_snprintf(buf, lws_ptr_diff_size_t(end, buf), ", min: "); buf += lws_humanize(buf, lws_ptr_diff_size_t(end, buf), pub->u.agg.min, schema); buf += lws_snprintf(buf, lws_ptr_diff_size_t(end, buf), ", max: "); buf += lws_humanize(buf, lws_ptr_diff_size_t(end, buf), pub->u.agg.max, schema); } happy: if (pub->flags & LWSMTFL_REPORT_HIST) return 1; *sub = NULL; return lws_ptr_diff(buf, obuf); } /* * We want to, at least internally, record an event... depending on the policy, * that might cause us to call through to the lws_system apis, or just update * our local stats about it and dump at the next periodic chance (also set by * the policy) */ void lws_metric_event(lws_metric_t *mt, char go_nogo, u_mt_t val) { lws_metric_pub_t *pub; assert((go_nogo & 0xfe) == 0); if (!mt) return; pub = lws_metrics_priv_to_pub(mt); assert(!(pub->flags & LWSMTFL_REPORT_HIST)); pub->us_last = lws_now_usecs(); if (!pub->us_first) pub->us_first = pub->us_last; pub->u.agg.count[(int)go_nogo]++; pub->u.agg.sum[(int)go_nogo] += val; if (val > pub->u.agg.max) pub->u.agg.max = val; if (val < pub->u.agg.min) pub->u.agg.min = val; if (pub->flags & LWSMTFL_REPORT_OOB) lws_metrics_report_and_maybe_clear(mt->ctx, pub); } void lws_metrics_hist_bump_priv_tagged(lws_metric_pub_t *mt, lws_dll2_owner_t *tow, lws_dll2_owner_t *tow2) { char qual[192]; size_t p; p = lws_metrics_tags_serialize(tow, qual, sizeof(qual)); if (tow2) lws_metrics_tags_serialize(tow2, qual + p, sizeof(qual) - p); lws_metrics_hist_bump(mt, qual); } libwebsockets-4.3.5/lib/system/metrics/private-lib-system-metrics.h000066400000000000000000000102771476025525100255160ustar00rootroot00000000000000/* * lws System Metrics * * Copyright (C) 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /* * Const struct that describes a policy for processing raw metrics to turn them * into events. * * Typically although we want to monitor every event, the data produced can be * too large, and many events that are "normal" just need to be counted as such; * outliers or change-to-continuous outliers may deserve closer recording as * events in their own right. * * Mean computation must "decay" as it ages, we do this by halving the sum and * count after .us_decay_unit us. * * We don't acknowledge outliers until there are at least .min_contributors * in the current mean (which is subject to decaying) * * We decide something is an outlier event if it deviates from the mean by * .pc_outlier_deviation %. */ /* * The dynamic counterpart for each static metric policy, this is on heap * one per const lws_metric_policy_t. It's listed in context->owner_mtr_dynpol */ typedef struct lws_metric_policy_dyn { const lws_metric_policy_t *policy; /**< the static part of the policy we belong to... can be NULL if no * policy matches or the policy was invalidated */ lws_dll2_owner_t owner; /**< list of metrics that are using this policy */ lws_dll2_t list; /**< context owns us */ lws_sorted_usec_list_t sul; /**< schedule periodic reports for metrics using this policy */ } lws_metric_policy_dyn_t; /* * A metrics private part, encapsulating the public part */ typedef struct lws_metric { lws_dll2_t list; /**< owned by either 1) ctx.lws_metric_policy_dyn_t.owner, or * 2) ctx.owner_mtr_no_pol */ struct lws_context *ctx; /* public part overallocated */ } lws_metric_t; #if defined(LWS_WITH_SYS_METRICS) #define lws_metrics_hist_bump_priv(_mt, _name) \ lws_metrics_hist_bump_(lws_metrics_priv_to_pub(_mt), _name) #define lws_metrics_hist_bump_priv_wsi(_wsi, _hist, _name) \ lws_metrics_hist_bump_(lws_metrics_priv_to_pub(_wsi->a.context->_hist), _name) #define lws_metrics_hist_bump_priv_ss(_ss, _hist, _name) \ lws_metrics_hist_bump_(lws_metrics_priv_to_pub(_ss->context->_hist), _name) #define lws_metrics_priv_to_pub(_x) ((lws_metric_pub_t *)&(_x)[1]) #else #define lws_metrics_hist_bump_priv(_mt, _name) #define lws_metrics_hist_bump_priv_wsi(_wsi, _hist, _name) #define lws_metrics_hist_bump_priv_ss(_ss, _hist, _name) #define lws_metrics_priv_to_pub(_x) ((lws_metric_pub_t *)NULL) #endif #if defined(LWS_WITH_SECURE_STREAMS_PROXY_API) /* * sspc-specific version that also appends the tag value to the lifecycle tag * used for logging the sspc identity */ int lws_metrics_tag_sspc_add(struct lws_sspc_handle *ss, const char *name, const char *val); #endif int lws_metrics_register_policy(struct lws_context *ctx, const lws_metric_policy_t *head); void lws_metrics_destroy(struct lws_context *ctx); void lws_metric_event(lws_metric_t *mt, char go_nogo, u_mt_t val); lws_metric_t * lws_metric_create(struct lws_context *ctx, uint8_t flags, const char *name); int lws_metric_destroy(lws_metric_t **mt, int keep); void lws_metric_policy_dyn_destroy(lws_metric_policy_dyn_t *dm, int keep); void lws_metric_rebind_policies(struct lws_context *ctx); libwebsockets-4.3.5/lib/system/ntpclient/000077500000000000000000000000001476025525100204645ustar00rootroot00000000000000libwebsockets-4.3.5/lib/system/ntpclient/ntpclient.c000066400000000000000000000214111476025525100226270ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #define LWSNTPC_LI_NONE 0 #define LWSNTPC_VN_3 3 #define LWSNTPC_MODE_CLIENT 3 struct vhd_ntpc { struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; lws_sorted_usec_list_t sul_conn; lws_sorted_usec_list_t sul_write; /* track write retries */ const char *ntp_server_ads; struct lws *wsi_udp; uint16_t retry_count_conn; uint16_t retry_count_write; char set_time; }; /* * Without a valid ntp we won't be able to do anything requiring client tls. * * We have our own outer backoff scheme that just keeps retrying dns lookup * and the transaction forever. */ static const uint32_t botable[] = { 300, 500, 650, 800, 800, 900, 1000, 1100, 1500 }; static const lws_retry_bo_t bo = { botable, LWS_ARRAY_SIZE(botable), LWS_RETRY_CONCEAL_ALWAYS, 0, 0, 20 }; /* * Once we resolved the remote server (implying we should have network), * we use a different policy on the wsi itself that gives it a few tries before * failing the wsi and using to outer retry policy to get dns to a different * server in the pool and try fresh */ static const uint32_t botable2[] = { 1000, 1250, 5000 /* in case dog slow */ }; static const lws_retry_bo_t bo2 = { botable2, LWS_ARRAY_SIZE(botable2), LWS_ARRAY_SIZE(botable2), /* don't conceal after the last table entry */ 0, 0, 20 }; static void lws_ntpc_retry_conn(struct lws_sorted_usec_list *sul) { struct vhd_ntpc *v = lws_container_of(sul, struct vhd_ntpc, sul_conn); lwsl_debug("%s: wsi_udp: %s\n", __func__, lws_wsi_tag(v->wsi_udp)); if (v->wsi_udp || !lws_dll2_is_detached(&v->sul_conn.list)) return; /* create the UDP socket aimed at the server */ lwsl_notice("%s: server %s\n", __func__, v->ntp_server_ads); v->retry_count_write = 0; v->wsi_udp = lws_create_adopt_udp(v->vhost, v->ntp_server_ads, 123, 0, v->protocol->name, NULL, NULL, NULL, &bo2, "ntpclient"); lwsl_debug("%s: created wsi_udp: %s\n", __func__, lws_wsi_tag(v->wsi_udp)); if (!v->wsi_udp) { lwsl_err("%s: unable to create udp skt\n", __func__); lws_retry_sul_schedule(v->context, 0, &v->sul_conn, &bo, lws_ntpc_retry_conn, &v->retry_count_conn); } } static void lws_ntpc_retry_write(struct lws_sorted_usec_list *sul) { struct vhd_ntpc *v = lws_container_of(sul, struct vhd_ntpc, sul_write); lwsl_debug("%s\n", __func__); if (v && v->wsi_udp) lws_callback_on_writable(v->wsi_udp); } static int callback_ntpc(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct vhd_ntpc *v = (struct vhd_ntpc *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); uint8_t pkt[LWS_PRE + 48]; struct timeval t1; int64_t delta_us; uint64_t ns; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: /* per vhost */ if (v) break; lwsl_debug("%s: LWS_CALLBACK_PROTOCOL_INIT:\n", __func__); lws_protocol_vh_priv_zalloc(wsi->a.vhost, wsi->a.protocol, sizeof(*v)); v = (struct vhd_ntpc *)lws_protocol_vh_priv_get(wsi->a.vhost, wsi->a.protocol); v->context = lws_get_context(wsi); v->vhost = lws_get_vhost(wsi); v->protocol = lws_get_protocol(wsi); v->context->ntpclient_priv = v; if (!lws_system_get_ops(wsi->a.context) || !lws_system_get_ops(wsi->a.context)->set_clock) { #if !defined(LWS_ESP_PLATFORM) lwsl_err("%s: set up system ops for set_clock\n", __func__); #endif // return -1; } /* register our lws_system notifier */ v->ntp_server_ads = "pool.ntp.org"; lws_plat_ntpclient_config(v->context); lws_system_blob_get_single_ptr(lws_system_get_blob( v->context, LWS_SYSBLOB_TYPE_NTP_SERVER, 0), (const uint8_t **)&v->ntp_server_ads); if (!v->ntp_server_ads || v->ntp_server_ads[0] == '\0') v->ntp_server_ads = "pool.ntp.org"; lwsl_notice("%s: using ntp server %s\n", __func__, v->ntp_server_ads); break; case LWS_CALLBACK_PROTOCOL_DESTROY: /* per vhost */ if (!v) break; if (v->wsi_udp) lws_set_timeout(v->wsi_udp, 1, LWS_TO_KILL_ASYNC); v->wsi_udp = NULL; goto cancel_conn_timer; /* callbacks related to raw socket descriptor */ case LWS_CALLBACK_RAW_ADOPT: lwsl_debug("%s: LWS_CALLBACK_RAW_ADOPT\n", __func__); lws_callback_on_writable(wsi); break; case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_info("%s: CONNECTION_ERROR\n", __func__); goto do_close; case LWS_CALLBACK_RAW_CLOSE: lwsl_debug("%s: LWS_CALLBACK_RAW_CLOSE\n", __func__); do_close: v->wsi_udp = NULL; /* cancel any pending write retry */ lws_sul_cancel(&v->sul_write); if (v->set_time) goto cancel_conn_timer; lws_retry_sul_schedule(v->context, 0, &v->sul_conn, &bo, lws_ntpc_retry_conn, &v->retry_count_conn); break; case LWS_CALLBACK_RAW_RX: if (len != 48) return 0; /* ignore it */ /* * First get the seconds, corrected for the ntp epoch of 1900 * vs the unix epoch of 1970. Then shift the seconds up by 1bn * and add in the ns */ ns = (uint64_t)lws_ser_ru32be(((uint8_t *)in) + 40) - (uint64_t)2208988800; ns = (ns * 1000000000) + lws_ser_ru32be(((uint8_t *)in) + 44); /* * Compute the step */ gettimeofday(&t1, NULL); delta_us = ((int64_t)ns / 1000) - ((t1.tv_sec * LWS_US_PER_SEC) + t1.tv_usec); lwsl_notice("%s: Unix time: %llu, step: %lldus\n", __func__, (unsigned long long)ns / 1000000000, (long long)delta_us); #if defined(LWS_PLAT_FREERTOS) { struct timeval t; t.tv_sec = (unsigned long long)ns / 1000000000; t.tv_usec = (ns % 1000000000) / 1000; lws_sul_nonmonotonic_adjust(wsi->a.context, delta_us); settimeofday(&t, NULL); } #endif if (lws_system_get_ops(wsi->a.context) && lws_system_get_ops(wsi->a.context)->set_clock) lws_system_get_ops(wsi->a.context)->set_clock((int64_t)ns / 1000); v->set_time = 1; lws_state_transition_steps(&wsi->a.context->mgr_system, LWS_SYSTATE_OPERATIONAL); /* close the wsi */ return -1; case LWS_CALLBACK_RAW_WRITEABLE: /* * UDP is not reliable, it can be locally dropped, or dropped * by any intermediary or the remote peer. So even though we * will do the write in a moment, we schedule another request * for rewrite according to the wsi retry policy. * * If the result came before, we'll cancel it in the close flow. * * If we have already reached the end of our concealed retries * in the policy, just close without another write. */ if (lws_dll2_is_detached(&v->sul_write.list) && lws_retry_sul_schedule_retry_wsi(wsi, &v->sul_write, lws_ntpc_retry_write, &v->retry_count_write)) { /* we have reached the end of our concealed retries */ lwsl_warn("%s: concealed retries done, failing\n", __func__); goto retry_conn; } memset(pkt + LWS_PRE, 0, sizeof(pkt) - LWS_PRE); pkt[LWS_PRE] = (LWSNTPC_LI_NONE << 6) | (LWSNTPC_VN_3 << 3) | (LWSNTPC_MODE_CLIENT << 0); if (lws_write(wsi, pkt + LWS_PRE, sizeof(pkt) - LWS_PRE, 0) == sizeof(pkt) - LWS_PRE) break; lwsl_err("%s: Failed to write ntp client req\n", __func__); retry_conn: lws_retry_sul_schedule(wsi->a.context, 0, &v->sul_conn, &bo, lws_ntpc_retry_conn, &v->retry_count_conn); return -1; default: break; } return 0; cancel_conn_timer: lws_sul_cancel(&v->sul_conn); return 0; } void lws_ntpc_trigger(struct lws_context *ctx) { struct vhd_ntpc *v = (struct vhd_ntpc *)ctx->ntpclient_priv; lwsl_notice("%s\n", __func__); v->retry_count_conn = 0; lws_ntpc_retry_conn(&v->sul_conn); } struct lws_protocols lws_system_protocol_ntpc = { "lws-ntpclient", callback_ntpc, 0, 128, 0, NULL, 0 }; libwebsockets-4.3.5/lib/system/smd/000077500000000000000000000000001476025525100172475ustar00rootroot00000000000000libwebsockets-4.3.5/lib/system/smd/CMakeLists.txt000066400000000000000000000001341476025525100220050ustar00rootroot00000000000000include_directories(.) list(APPEND SOURCES system/smd/smd.c ) exports_to_parent_scope() libwebsockets-4.3.5/lib/system/smd/README.md000066400000000000000000000257701476025525100205410ustar00rootroot00000000000000# LWS System Message Distribution ## Overview Independent pieces of a system may need to become aware of events and state changes in the other pieces quickly, along with the new state if it is small. These messages are local to inside a system, although they may be triggered by events outside of it. Examples include keypresses, or networking state changes. Individual OSes and frameworks typically have their own fragmented apis for message-passing, but the lws apis operate the same across any platforms including, eg, Windows and RTOS and allow crossplatform code to be written once. Message payloads are short, less than 384 bytes, below system limits for atomic pipe or UDS datagrams and consistent with heap usage on smaller systems, but large enough to carry JSON usefully. Messages are typically low duty cycle. ![SMD message](/doc-assets/smd-message.png) Messages may be sent by any registered participant, they are allocated on heap in a linked-list, and delivered to all other registered participants for that message class no sooner than next time around the event loop. This retains the ability to handle multiple event queuing in one event loop trip while guaranteeing message handling is nonrecursive and so with modest stack usage. Messages are passed to all other registered participants before being destroyed. Messages are delivered to all particpants on the same lws_context by default. ![SMD message](/doc-assets/smd-single-process.png) `lws_smd` apis allow publication and subscription of message objects between participants that are in a single process and are informed by callback from lws service thread context. SMD messages can also broadcast between particpants in different lws_contexts in different processes, using existing Secure Streams proxying. In this way different application processes can intercommunicate and all observe any system smd messages they are interested in. ![SMD message](/doc-assets/smd-proxy.png) Registering as a participant and sending messages are threadsafe APIs. ## Message Class Message class is a bitfield messages use to indicate their general type, eg, network status, or UI event like a keypress. Participants set a bitmask to filter what kind of messages they care about, classes that are 0 in the peer's filter are never delivered to the peer. A message usually indicates it is a single class, but it's possible to set multiple class bits and match on any. If so, care must be taken the payload can be parsed by readers expecting any of the indicated classes, eg, by using JSON. `lws_smd` tracks a global union mask for all participants' class mask. Requests to allocate a message of a class that no participant listens for are rejected, not at distribution-time but at message allocation-time, so no heap or cpu is wasted on things that are not currently interesting; but such messages start to appear as soon as a participant appears that wants them. The message generation action should be bypassed without error in the case lws_smd_msg_alloc() returns NULL. Various well-known high level classes are defined but also a bit index `LWSSMDCL_USER_BASE_BITNUM`, which can be used by user code to define up to 8 private classes, with class bit values `(1 << LWSSMDCL_USER_BASE_BITNUM)` thru `(1 << (LWSSMDCL_USER_BASE_BITNUM + 7))` ## Messaging guarantees Sent messages are delivered to all registered participants whose class mask indicates they want it, including the sender. The send apis are threadsafe. Locally-delivered message delivery callbacks occur from lws event loop thread context 0 (the only one in the default case `LWS_MAX_SMP` = 1). Clients in different processes receive callbacks from the thread context of their UDS networking thread. The message payload may be destroyed immediately when you return from the callback, you can't store references to it or expect it to be there later. Messages are timestamped with a systemwide monotonic timestamp. When participants are on the lws event loop, messages are delivered in-order. When participants are on different threads, delivery order depends on platform lock acquisition. External process participants are connected by the Unix Domain Socket capability of Secure Streams, and may be delivered out-of-order; receivers that care must consult the message creation timestamps. ## Message Refcounting To avoid keeping a list of the length of the number of participants for each message, a refcount is used in the message, computed at the time the message arrived considering the number of active participants that indicated a desire to receive messages of that class. Since peers may detach / close their link asynchronously, the logical peer objects at the distributor defer destroying themselves until there is no more possibility of messages arriving timestamped with the period they were active. A grace period (default 2s) is used to ensure departing peers correctly account for message refcounts before being destroyed. ## Message creation Messages may contain arbitrary text or binary data depending on the class. JSON is recommended since lws_smd messages are small and low duty cycle but have open-ended content: JSON is maintainable, extensible, debuggable and self- documenting and avoids, eg, fragile dependencies on header versions shared between teams. To simplify issuing JSON, a threadsafe api to create and send messages in one step using format strings is provided: ``` int lws_smd_msg_printf(struct lws_context *ctx, lws_smd_class_t _class, const char *format, ...); ``` ## Secure Streams `lws_smd` streamtype When built with LWS_WITH_SECURE_STREAMS, lws_smd exposes a built-in streamtype `_lws_smd` which user Secure Streams may use to interoperate with lws_smd using SS payload semantics. When using `_lws_smd`, the SS info struct member `manual_initial_tx_credit` provided by the user when creating the Secure Stream is overloaded to be used as the RX class mask for the SMD connection associated with the Secure Stream. Both RX and TX payloads have a 16-byte binary header before the actual payload. For TX, although the header is 16-bytes, only the first 64-bit class bitfield needs setting, the timestamp is fetched and added by lws. - MSB-first 64-bit class bitfield (currently only 32 least-sig in use) - MSB-First Order 64-bit us-resolution timestamp A helper `lws_smd_ss_msg_printf()` is provided to format and create and smd message from the SS tx() callback in one step, using the same api layout as for direct messages via `lws_smd_msg_printf()` ``` int lws_smd_ss_msg_printf(const char *tag, uint8_t *buf, size_t *len, lws_smd_class_t _class, const char *format, ...); ``` ## Well-known message schema Class|Schema ---|--- LWSSMDCL_INTERACTION|lws_button events LWSSMDCL_NETWORK|captive portal detection requests and results LWSSMDCL_SYSTEM_STATE|lws_system state progression ### User interaction Button events Class: `LWSSMDCL_INTERACTION` Produced by lws_button when a user interacts with a defined button. Click-related events are produced alongside up and down related events, the participant can choose which to attend to according to the meaning of the interaction. Both kinds of event go through sophisticated filtering before being issued, see `./lib/drivers/button/README.md` for details. #### SMD Button interaction event Schema: ``` { "type": "button", "src": "/", "event": "" } ``` For example, `{"type":"button","src":"bc/user","event":"doubleclick"}` Event name|Meaning ---|--- down|The button passes a filter for being down, useful for duration-based response up|The button has come up, useful for duration-based response click|The button activity resulted in a classification as a single-click longclick|The button activity resulted in a classification as a long-click doubleclick|The button activity resulted in a classification as a double-click ### Routing Table Change Class: `LWSSMDCL_NETWORK` If able to subscribe to OS routing table changes (eg, by rtnetlink on Linux which is supported), lws announces there have been changes using SMD. If Captive Portal Detect is enabled, and routing tables changes can be seen, then a new CPD is requested automatically and the results will be seen over SMD when that completes. Schema: ``` { "rt": "add|del", "add" if being added } ``` When the context / pts are created, if linux then lws attempts to get the routing table sent, which requires root. This is done before the permissions are dropped after protocols init. Lws maintains a cache of the routing table in each pt. Upon changes, existing connections are reassessed to see if their peer can still be routed to, if not the connection is closed. If a gateway route changes, `{"trigger":"cpdcheck","src":"gw-change"}` is issued on SMD as well. ### Captive Portal Detection Class: `LWSSMDCL_NETWORK` Actively detects if the network can reach the internet or if it is intercepted by a captive portal. The detection steps are programmable via the Secure Streams Policy for a streamtype `captive_portal_detect`, eg ``` "captive_portal_detect": { "endpoint": "connectivitycheck.android.com", "http_url": "generate_204", "port": 80, "protocol": "h1", "http_method": "GET", "opportunistic": true, "http_expect": 204, "http_fail_redirect": true } ``` #### SMD Report Result Schema: `{"type": "cpd", "result":""}` result|meaning ---|--- OK|Internet is reachable Captive|Internet is behind a captive portal No internet|There is no connectivity #### SMD Request re-detection Schema: `{"trigger": "cpdcheck"}` ### lws_system state progression Class: `LWSSMDCL_SYSTEM_STATE` Lws system state changes are forwarded to lws_smd messages so participants not on the lws event loop directly can be aware of progress. Code registering a lws_system notifier callback, on the main lws loop, can synchronously veto state changes and hook proposed state changes, lws_smd events are asynchronous notifications of state changes after they were decided only... however they are available over the whole system. It's not possible to make validated TLS connections until the system has acquired the date as well as acquired an IP on a non-captive portal connection, for that reason user code will usually be dependent on the system reaching "OPERATIONAL" state if lws is responsible for managing the boot process. #### System state event Schema: `{"state":""}"` State|Meaning ---|--- CONTEXT_CREATED|We're creating the lws_context INITIALIZED|Initial vhosts and protocols initialized IFACE_COLDPLUG|Network interfaces discovered DHCP|DHCP acquired CPD_PRE_TIME|Captive portal detect hook before we have system time TIME_VALID|Ntpclient has run CPD_POST_TIME|Captive portal detect hook after system time (tls-based check) POLICY_VALID|The system policy has been acquired and parsed REGISTERED|This device is registered with an authority AUTH1|We acquired auth1 from the authority using our registration info AUTH2|We acquired auth2 from the authority using our registration info OPERATIONAL|We are active and able to make authenticated tls connections POLICY_INVALID|The policy is being changed libwebsockets-4.3.5/lib/system/smd/private-lib-system-smd.h000066400000000000000000000052461476025525100237500ustar00rootroot00000000000000/* * lws System Message Distribution * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #if defined(LWS_WITH_SECURE_STREAMS) #define LWS_SMD_SS_RX_HEADER_LEN_EFF (LWS_SMD_SS_RX_HEADER_LEN) #else #define LWS_SMD_SS_RX_HEADER_LEN_EFF (0) #endif struct lws_smd_peer; typedef struct lws_smd_msg { lws_dll2_t list; struct lws_smd_peer *exc; lws_usec_t timestamp; lws_smd_class_t _class; uint16_t length; uint16_t refcount; /* message itself is over-allocated after this */ } lws_smd_msg_t; typedef struct lws_smd_peer { lws_dll2_t list; #if defined(LWS_WITH_SECURE_STREAMS) lws_ss_handle_t *ss_handle; /* LSMDT_SECURE_STREAMS */ #endif lws_smd_notification_cb_t cb; /* LSMDT_ */ struct lws_context *ctx; void *opaque; /* NULL, or next message we will handle */ lws_smd_msg_t *tail; lws_smd_class_t _class_filter; } lws_smd_peer_t; /* * Manages message distribution * * There is one of these in the lws_context, but the distribution action also * gets involved in delivering to pt event loops individually for SMP case */ typedef struct lws_smd { lws_dll2_owner_t owner_messages; /* lws_smd_msg_t */ lws_mutex_t lock_messages; lws_dll2_owner_t owner_peers; /* lws_smd_peer_t */ lws_mutex_t lock_peers; /* union of peer class filters, suppress creation of msg classes not set */ lws_smd_class_t _class_filter; char delivering; } lws_smd_t; /* check if this tsi has pending messages to deliver */ int lws_smd_message_pending(struct lws_context *ctx); int lws_smd_msg_distribute(struct lws_context *ctx); int _lws_smd_destroy(struct lws_context *ctx); libwebsockets-4.3.5/lib/system/smd/smd.c000066400000000000000000000500641476025525100202030ustar00rootroot00000000000000/* * lws System Message Distribution * * Copyright (C) 2019 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include /* comment me to remove extra debug and sanity checks */ // #define LWS_SMD_DEBUG #if defined(LWS_SMD_DEBUG) #define lwsl_smd lwsl_notice #else #define lwsl_smd(_s, ...) #endif void * lws_smd_msg_alloc(struct lws_context *ctx, lws_smd_class_t _class, size_t len) { lws_smd_msg_t *msg; /* only allow it if someone wants to consume this class of event */ if (!(ctx->smd._class_filter & _class)) { lwsl_cx_info(ctx, "rejecting class 0x%x as no participant wants", (unsigned int)_class); return NULL; } assert(len <= LWS_SMD_MAX_PAYLOAD); /* * If SS configured, over-allocate LWS_SMD_SS_RX_HEADER_LEN behind * payload, ie, msg_t (gap LWS_SMD_SS_RX_HEADER_LEN) payload */ msg = lws_malloc(sizeof(*msg) + LWS_SMD_SS_RX_HEADER_LEN_EFF + len, __func__); if (!msg) return NULL; memset(msg, 0, sizeof(*msg)); msg->timestamp = lws_now_usecs(); msg->length = (uint16_t)len; msg->_class = _class; return ((uint8_t *)&msg[1]) + LWS_SMD_SS_RX_HEADER_LEN_EFF; } void lws_smd_msg_free(void **ppay) { lws_smd_msg_t *msg = (lws_smd_msg_t *)(((uint8_t *)*ppay) - LWS_SMD_SS_RX_HEADER_LEN_EFF - sizeof(*msg)); /* if SS configured, actual alloc is LWS_SMD_SS_RX_HEADER_LEN behind */ lws_free(msg); *ppay = NULL; } #if defined(LWS_SMD_DEBUG) static void lws_smd_dump(lws_smd_t *smd) { int n = 1; lws_start_foreach_dll_safe(struct lws_dll2 *, p, p1, smd->owner_messages.head) { lws_smd_msg_t *msg = lws_container_of(p, lws_smd_msg_t, list); lwsl_info(" msg %d: %p: ref %d, lat %dms, cls: 0x%x, len %u: '%s'\n", n++, msg, msg->refcount, (unsigned int)((lws_now_usecs() - msg->timestamp) / 1000), msg->length, msg->_class, (const char *)&msg[1] + LWS_SMD_SS_RX_HEADER_LEN_EFF); } lws_end_foreach_dll_safe(p, p1); n = 1; lws_start_foreach_dll(struct lws_dll2 *, p, smd->owner_peers.head) { lws_smd_peer_t *pr = lws_container_of(p, lws_smd_peer_t, list); lwsl_info(" peer %d: %p: tail: %p, filt 0x%x\n", n++, pr, pr->tail, pr->_class_filter); } lws_end_foreach_dll(p); } #endif static int _lws_smd_msg_peer_interested_in_msg(lws_smd_peer_t *pr, lws_smd_msg_t *msg) { return !!(msg->_class & pr->_class_filter); } /* * Figure out what to set the initial refcount for the message to */ static int _lws_smd_msg_assess_peers_interested(lws_smd_t *smd, lws_smd_msg_t *msg, struct lws_smd_peer *exc) { struct lws_context *ctx = lws_container_of(smd, struct lws_context, smd); int interested = 0; lws_start_foreach_dll(struct lws_dll2 *, p, ctx->smd.owner_peers.head) { lws_smd_peer_t *pr = lws_container_of(p, lws_smd_peer_t, list); if (pr != exc && _lws_smd_msg_peer_interested_in_msg(pr, msg)) /* * This peer wants to consume it */ interested++; } lws_end_foreach_dll(p); return interested; } static int _lws_smd_class_mask_union(lws_smd_t *smd) { uint32_t mask = 0; lws_start_foreach_dll_safe(struct lws_dll2 *, p, p1, smd->owner_peers.head) { lws_smd_peer_t *pr = lws_container_of(p, lws_smd_peer_t, list); mask |= pr->_class_filter; } lws_end_foreach_dll_safe(p, p1); smd->_class_filter = mask; return 0; } /* Call with message lock held */ static void _lws_smd_msg_destroy(struct lws_context *cx, lws_smd_t *smd, lws_smd_msg_t *msg) { /* * We think we gave the message to everyone and can destroy it. * Sanity check that no peer holds a pointer to this guy */ lws_start_foreach_dll_safe(struct lws_dll2 *, p, p1, smd->owner_peers.head) { lws_smd_peer_t *xpr = lws_container_of(p, lws_smd_peer_t, list); if (xpr->tail == msg) { lwsl_cx_err(cx, "peer %p has msg %p " "we are about to destroy as tail", xpr, msg); #if !defined(LWS_PLAT_FREERTOS) assert(0); #endif } } lws_end_foreach_dll_safe(p, p1); /* * We have fully delivered the message now, it * can be unlinked and destroyed */ lwsl_cx_info(cx, "destroy msg %p", msg); lws_dll2_remove(&msg->list); lws_free(msg); } /* * This is wanting to be threadsafe, limiting the apis we can call */ int _lws_smd_msg_send(struct lws_context *ctx, void *pay, struct lws_smd_peer *exc) { lws_smd_msg_t *msg = (lws_smd_msg_t *)(((uint8_t *)pay) - LWS_SMD_SS_RX_HEADER_LEN_EFF - sizeof(*msg)); if (ctx->smd.owner_messages.count >= ctx->smd_queue_depth) { lwsl_cx_warn(ctx, "rejecting message on queue depth %d", (int)ctx->smd.owner_messages.count); /* reject the message due to max queue depth reached */ return 1; } if (!ctx->smd.delivering && lws_mutex_lock(ctx->smd.lock_peers)) /* +++++++++++++++ peers */ return 1; /* For Coverity */ if (lws_mutex_lock(ctx->smd.lock_messages)) /* +++++++++++++++++ messages */ goto bail; msg->refcount = (uint16_t)_lws_smd_msg_assess_peers_interested( &ctx->smd, msg, exc); if (!msg->refcount) { /* possible, condsidering exc and no other participants */ lws_mutex_unlock(ctx->smd.lock_messages); /* --------------- messages */ lws_free(msg); if (!ctx->smd.delivering) lws_mutex_unlock(ctx->smd.lock_peers); /* ------------- peers */ return 0; } msg->exc = exc; /* let's add him on the queue... */ lws_dll2_add_tail(&msg->list, &ctx->smd.owner_messages); /* * Any peer with no active tail needs to check our class to see if we * should become his tail */ lws_start_foreach_dll(struct lws_dll2 *, p, ctx->smd.owner_peers.head) { lws_smd_peer_t *pr = lws_container_of(p, lws_smd_peer_t, list); if (pr != exc && !pr->tail && _lws_smd_msg_peer_interested_in_msg(pr, msg)) { pr->tail = msg; /* tail message has to actually be of interest to the peer */ assert(!pr->tail || (pr->tail->_class & pr->_class_filter)); } } lws_end_foreach_dll(p); #if defined(LWS_SMD_DEBUG) lwsl_smd("%s: added %p (refc %u) depth now %d\n", __func__, msg, msg->refcount, ctx->smd.owner_messages.count); lws_smd_dump(&ctx->smd); #endif lws_mutex_unlock(ctx->smd.lock_messages); /* --------------- messages */ bail: if (!ctx->smd.delivering) lws_mutex_unlock(ctx->smd.lock_peers); /* ------------- peers */ /* we may be happening from another thread context */ lws_cancel_service(ctx); return 0; } /* * This is wanting to be threadsafe, limiting the apis we can call */ int lws_smd_msg_send(struct lws_context *ctx, void *pay) { return _lws_smd_msg_send(ctx, pay, NULL); } /* * This is wanting to be threadsafe, limiting the apis we can call */ int lws_smd_msg_printf(struct lws_context *ctx, lws_smd_class_t _class, const char *format, ...) { lws_smd_msg_t *msg; va_list ap; void *p; int n; if (!(ctx->smd._class_filter & _class)) /* * There's nobody interested in messages of this class atm. * Don't bother generating it, and act like all is well. */ return 0; va_start(ap, format); n = vsnprintf(NULL, 0, format, ap); va_end(ap); if (n > LWS_SMD_MAX_PAYLOAD) /* too large to send */ return 1; p = lws_smd_msg_alloc(ctx, _class, (size_t)n + 2); if (!p) return 1; msg = (lws_smd_msg_t *)(((uint8_t *)p) - LWS_SMD_SS_RX_HEADER_LEN_EFF - sizeof(*msg)); msg->length = (uint16_t)n; va_start(ap, format); vsnprintf((char *)p, (unsigned int)n + 2, format, ap); va_end(ap); /* * locks taken and released in here */ if (lws_smd_msg_send(ctx, p)) { lws_smd_msg_free(&p); return 1; } return 0; } #if defined(LWS_WITH_SECURE_STREAMS) int lws_smd_ss_msg_printf(const char *tag, uint8_t *buf, size_t *len, lws_smd_class_t _class, const char *format, ...) { char *content = (char *)buf + LWS_SMD_SS_RX_HEADER_LEN; va_list ap; int n; if (*len < LWS_SMD_SS_RX_HEADER_LEN) return 1; lws_ser_wu64be(buf, _class); lws_ser_wu64be(buf + 8, 0); /* valgrind notices uninitialized if left */ va_start(ap, format); n = vsnprintf(content, (*len) - LWS_SMD_SS_RX_HEADER_LEN, format, ap); va_end(ap); if (n > LWS_SMD_MAX_PAYLOAD || (unsigned int)n > (*len) - LWS_SMD_SS_RX_HEADER_LEN) /* too large to send */ return 1; *len = LWS_SMD_SS_RX_HEADER_LEN + (unsigned int)n; lwsl_info("%s: %s send cl 0x%x, len %u\n", __func__, tag, (unsigned int)_class, (unsigned int)n); return 0; } /* * This is a helper that user rx handler for LWS_SMD_STREAMTYPENAME SS can * call through to with the payload it received from the proxy. It will then * forward the recieved SMD message to all local (same-context) participants * that are interested in that class (except ones with callback skip_cb, so * we don't loop). */ static int _lws_smd_ss_rx_forward(struct lws_context *ctx, const char *tag, struct lws_smd_peer *pr, const uint8_t *buf, size_t len) { lws_smd_class_t _class; lws_smd_msg_t *msg; void *p; if (len < LWS_SMD_SS_RX_HEADER_LEN_EFF) return 1; if (len >= LWS_SMD_MAX_PAYLOAD + LWS_SMD_SS_RX_HEADER_LEN_EFF) return 1; _class = (lws_smd_class_t)lws_ser_ru64be(buf); if (_class == LWSSMDCL_METRICS) { } /* only locally forward messages that we care about in this process */ if (!(ctx->smd._class_filter & _class)) /* * There's nobody interested in messages of this class atm. * Don't bother generating it, and act like all is well. */ return 0; p = lws_smd_msg_alloc(ctx, _class, len); if (!p) return 1; msg = (lws_smd_msg_t *)(((uint8_t *)p) - LWS_SMD_SS_RX_HEADER_LEN_EFF - sizeof(*msg)); msg->length = (uint16_t)(len - LWS_SMD_SS_RX_HEADER_LEN_EFF); /* adopt the original source timestamp, not time we forwarded it */ msg->timestamp = (lws_usec_t)lws_ser_ru64be(buf + 8); /* copy the message payload in */ memcpy(p, buf + LWS_SMD_SS_RX_HEADER_LEN_EFF, msg->length); /* * locks taken and released in here */ if (_lws_smd_msg_send(ctx, p, pr)) { /* we couldn't send it after all that... */ lws_smd_msg_free(&p); return 1; } lwsl_info("%s: %s send cl 0x%x, len %u, ts %llu\n", __func__, tag, (unsigned int)_class, msg->length, (unsigned long long)msg->timestamp); return 0; } int lws_smd_ss_rx_forward(void *ss_user, const uint8_t *buf, size_t len) { struct lws_ss_handle *h = (struct lws_ss_handle *) (((char *)ss_user) - sizeof(*h)); struct lws_context *ctx = lws_ss_get_context(h); return _lws_smd_ss_rx_forward(ctx, lws_ss_tag(h), h->u.smd.smd_peer, buf, len); } #if defined(LWS_WITH_SECURE_STREAMS_PROXY_API) int lws_smd_sspc_rx_forward(void *ss_user, const uint8_t *buf, size_t len) { struct lws_sspc_handle *h = (struct lws_sspc_handle *) (((char *)ss_user) - sizeof(*h)); struct lws_context *ctx = lws_sspc_get_context(h); return _lws_smd_ss_rx_forward(ctx, lws_sspc_tag(h), NULL, buf, len); } #endif #endif /* * Peers that deregister need to adjust the refcount of messages they would * have been interested in, but didn't take delivery of yet */ static void _lws_smd_peer_destroy(lws_smd_peer_t *pr) { lws_smd_t *smd = lws_container_of(pr->list.owner, lws_smd_t, owner_peers); if (lws_mutex_lock(smd->lock_messages)) /* +++++++++ messages */ return; /* For Coverity */ lws_dll2_remove(&pr->list); /* * We take the approach to adjust the refcount of every would-have-been * delivered message we were interested in */ while (pr->tail) { lws_smd_msg_t *m1 = lws_container_of(pr->tail->list.next, lws_smd_msg_t, list); if (_lws_smd_msg_peer_interested_in_msg(pr, pr->tail)) { if (!--pr->tail->refcount) _lws_smd_msg_destroy(pr->ctx, smd, pr->tail); } pr->tail = m1; } lws_free(pr); lws_mutex_unlock(smd->lock_messages); /* messages ------- */ } static lws_smd_msg_t * _lws_smd_msg_next_matching_filter(lws_smd_peer_t *pr) { lws_dll2_t *tail = &pr->tail->list; lws_smd_msg_t *msg; do { tail = tail->next; if (!tail) return NULL; msg = lws_container_of(tail, lws_smd_msg_t, list); if (msg->exc != pr && _lws_smd_msg_peer_interested_in_msg(pr, msg)) return msg; } while (1); return NULL; } /* * Delivers only one message to the peer and advances the tail, or sets to NULL * if no more filtered queued messages. Returns nonzero if tail non-NULL. * * For Proxied SS, only asks for writeable and does not advance or change the * tail. * * This is done so if multiple messages queued, we don't get a situation where * one participant gets them all spammed, then the next etc. Instead they are * delivered round-robin. * * Requires peer lock, may take message lock */ static int _lws_smd_msg_deliver_peer(struct lws_context *ctx, lws_smd_peer_t *pr) { lws_smd_msg_t *msg; if (!pr->tail) return 0; msg = lws_container_of(pr->tail, lws_smd_msg_t, list); lwsl_cx_info(ctx, "deliver cl 0x%x, len %d, refc %d, to peer %p", (unsigned int)msg->_class, (int)msg->length, (int)msg->refcount, pr); pr->cb(pr->opaque, msg->_class, msg->timestamp, ((uint8_t *)&msg[1]) + LWS_SMD_SS_RX_HEADER_LEN_EFF, (size_t)msg->length); assert(msg->refcount); /* * If there is one, move forward to the next queued * message that meets the filters of this peer */ pr->tail = _lws_smd_msg_next_matching_filter(pr); /* tail message has to actually be of interest to the peer */ assert(!pr->tail || (pr->tail->_class & pr->_class_filter)); if (lws_mutex_lock(ctx->smd.lock_messages)) /* +++++++++ messages */ return 1; /* For Coverity */ if (!--msg->refcount) _lws_smd_msg_destroy(ctx, &ctx->smd, msg); lws_mutex_unlock(ctx->smd.lock_messages); /* messages ------- */ return !!pr->tail; } /* * Called when the event loop could deliver messages synchronously, eg, on * entry to idle */ int lws_smd_msg_distribute(struct lws_context *ctx) { char more; /* commonly, no messages and nothing to do... */ if (!ctx->smd.owner_messages.count) return 0; ctx->smd.delivering = 1; do { more = 0; if (lws_mutex_lock(ctx->smd.lock_peers)) /* +++++++++++++++ peers */ return 1; /* For Coverity */ lws_start_foreach_dll_safe(struct lws_dll2 *, p, p1, ctx->smd.owner_peers.head) { lws_smd_peer_t *pr = lws_container_of(p, lws_smd_peer_t, list); more = (char)(more | !!_lws_smd_msg_deliver_peer(ctx, pr)); } lws_end_foreach_dll_safe(p, p1); lws_mutex_unlock(ctx->smd.lock_peers); /* ------------- peers */ } while (more); ctx->smd.delivering = 0; return 0; } struct lws_smd_peer * lws_smd_register(struct lws_context *ctx, void *opaque, int flags, lws_smd_class_t _class_filter, lws_smd_notification_cb_t cb) { lws_smd_peer_t *pr = lws_zalloc(sizeof(*pr), __func__); if (!pr) return NULL; pr->cb = cb; pr->opaque = opaque; pr->_class_filter = _class_filter; pr->ctx = ctx; if (!ctx->smd.delivering && lws_mutex_lock(ctx->smd.lock_peers)) { /* +++++++++++++++ peers */ lws_free(pr); return NULL; /* For Coverity */ } /* * Let's lock the message list before adding this peer... because... */ if (lws_mutex_lock(ctx->smd.lock_messages)) { /* +++++++++ messages */ lws_free(pr); pr = NULL; goto bail1; /* For Coverity */ } lws_dll2_add_tail(&pr->list, &ctx->smd.owner_peers); /* update the global class mask union to account for new peer mask */ _lws_smd_class_mask_union(&ctx->smd); /* * Now there's a new peer added, any messages we have stashed will try * to deliver to this guy too, if he's interested in that class. So we * have to update the message refcounts for queued messages-he's- * interested-in accordingly. */ lws_start_foreach_dll_safe(struct lws_dll2 *, p, p1, ctx->smd.owner_messages.head) { lws_smd_msg_t *msg = lws_container_of(p, lws_smd_msg_t, list); if (_lws_smd_msg_peer_interested_in_msg(pr, msg)) msg->refcount++; } lws_end_foreach_dll_safe(p, p1); /* ... ok we are done adding the peer */ lws_mutex_unlock(ctx->smd.lock_messages); /* messages ------- */ lwsl_cx_info(ctx, "peer %p (count %u) registered", pr, (unsigned int)ctx->smd.owner_peers.count); bail1: if (!ctx->smd.delivering) lws_mutex_unlock(ctx->smd.lock_peers); /* ------------- peers */ return pr; } void lws_smd_unregister(struct lws_smd_peer *pr) { lws_smd_t *smd = lws_container_of(pr->list.owner, lws_smd_t, owner_peers); if (!smd->delivering && lws_mutex_lock(smd->lock_peers)) /* +++++++++++++++++++ peers */ return; /* For Coverity */ lwsl_cx_notice(pr->ctx, "destroying peer %p", pr); _lws_smd_peer_destroy(pr); if (!smd->delivering) lws_mutex_unlock(smd->lock_peers); /* ----------------- peers */ } int lws_smd_message_pending(struct lws_context *ctx) { int ret = 1; /* * First cheaply check the common case no messages pending, so there's * definitely nothing for this tsi or anything else */ if (!ctx->smd.owner_messages.count) return 0; /* * If there are any messages, check their age and expire ones that * have been hanging around too long */ if (lws_mutex_lock(ctx->smd.lock_peers)) /* +++++++++++++++++++++++ peers */ return 1; /* For Coverity */ if (lws_mutex_lock(ctx->smd.lock_messages)) /* +++++++++++++++++ messages */ goto bail; /* For Coverity */ lws_start_foreach_dll_safe(struct lws_dll2 *, p, p1, ctx->smd.owner_messages.head) { lws_smd_msg_t *msg = lws_container_of(p, lws_smd_msg_t, list); if ((lws_now_usecs() - msg->timestamp) > ctx->smd_ttl_us) { lwsl_cx_warn(ctx, "timing out queued message %p", msg); /* * We're forcibly yanking this guy, we can expect that * there might be peers that point to it as their tail. * * In that case, move their tails on to the next guy * they are interested in, if any. */ lws_start_foreach_dll_safe(struct lws_dll2 *, pp, pp1, ctx->smd.owner_peers.head) { lws_smd_peer_t *pr = lws_container_of(pp, lws_smd_peer_t, list); if (pr->tail == msg) pr->tail = _lws_smd_msg_next_matching_filter(pr); } lws_end_foreach_dll_safe(pp, pp1); /* * No peer should fall foul of the peer tail checks * when destroying the message now. */ _lws_smd_msg_destroy(ctx, &ctx->smd, msg); } } lws_end_foreach_dll_safe(p, p1); lws_mutex_unlock(ctx->smd.lock_messages); /* --------------- messages */ /* * Walk the peer list */ lws_start_foreach_dll(struct lws_dll2 *, p, ctx->smd.owner_peers.head) { lws_smd_peer_t *pr = lws_container_of(p, lws_smd_peer_t, list); if (pr->tail) goto bail; } lws_end_foreach_dll(p); /* * There's no message pending that we need to handle */ ret = 0; bail: lws_mutex_unlock(ctx->smd.lock_peers); /* --------------------- peers */ return ret; } int _lws_smd_destroy(struct lws_context *ctx) { /* stop any message creation */ ctx->smd._class_filter = 0; /* * Walk the message list, destroying them */ lws_start_foreach_dll_safe(struct lws_dll2 *, p, p1, ctx->smd.owner_messages.head) { lws_smd_msg_t *msg = lws_container_of(p, lws_smd_msg_t, list); lws_dll2_remove(&msg->list); lws_free(msg); } lws_end_foreach_dll_safe(p, p1); /* * Walk the peer list, destroying them */ lws_start_foreach_dll_safe(struct lws_dll2 *, p, p1, ctx->smd.owner_peers.head) { lws_smd_peer_t *pr = lws_container_of(p, lws_smd_peer_t, list); pr->tail = NULL; /* we just nuked all the messages, ignore */ _lws_smd_peer_destroy(pr); } lws_end_foreach_dll_safe(p, p1); lws_mutex_destroy(ctx->smd.lock_messages); lws_mutex_destroy(ctx->smd.lock_peers); return 0; } libwebsockets-4.3.5/lib/system/system.c000066400000000000000000000132361476025525100201610ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include /* * It's either a buflist (.is_direct = 0) or * a direct pointer + len (.is_direct = 1) */ const lws_system_ops_t * lws_system_get_ops(struct lws_context *context) { return context->system_ops; } void lws_system_blob_direct_set(lws_system_blob_t *b, const uint8_t *ptr, size_t len) { b->is_direct = 1; b->u.direct.ptr = ptr; b->u.direct.len = len; } void lws_system_blob_heap_empty(lws_system_blob_t *b) { b->is_direct = 0; lws_buflist_destroy_all_segments(&b->u.bl); } int lws_system_blob_heap_append(lws_system_blob_t *b, const uint8_t *buf, size_t len) { assert(!b->is_direct); lwsl_debug("%s: blob %p\n", __func__, b); if (lws_buflist_append_segment(&b->u.bl, buf, len) < 0) return -1; return 0; } size_t lws_system_blob_get_size(lws_system_blob_t *b) { if (b->is_direct) return b->u.direct.len; return lws_buflist_total_len(&b->u.bl); } int lws_system_blob_get(lws_system_blob_t *b, uint8_t *buf, size_t *len, size_t ofs) { int n; if (b->is_direct) { assert(b->u.direct.ptr); if (ofs >= b->u.direct.len) { *len = 0; return 1; } if (*len > b->u.direct.len - ofs) *len = b->u.direct.len - ofs; memcpy(buf, b->u.direct.ptr + ofs, *len); return 0; } n = lws_buflist_linear_copy(&b->u.bl, ofs, buf, *len); if (n < 0) return -2; *len = (unsigned int)n; return 0; } int lws_system_blob_get_single_ptr(lws_system_blob_t *b, const uint8_t **ptr) { if (b->is_direct) { *ptr = b->u.direct.ptr; return 0; } if (!b->u.bl) return -1; if (b->u.bl->next) return -1; /* multipart buflist, no single pointer to it all */ *ptr = (const uint8_t *)&b->u.bl[1] + LWS_PRE; return 0; } void lws_system_blob_destroy(lws_system_blob_t *b) { if (!b) return; // lwsl_info("%s: blob %p\n", __func__, b); if (!b->is_direct) lws_buflist_destroy_all_segments(&b->u.bl); } lws_system_blob_t * lws_system_get_blob(struct lws_context *context, lws_system_blob_item_t type, int idx) { if (idx < 0 || idx >= (int)LWS_ARRAY_SIZE(context->system_blobs)) return NULL; return &context->system_blobs[type + (unsigned int)idx]; } #if defined(LWS_WITH_NETWORK) /* * Caller must protect the whole call with system-specific locking */ int __lws_system_attach(struct lws_context *context, int tsi, lws_attach_cb_t cb, lws_system_states_t state, void *opaque, struct lws_attach_item **get) { struct lws_context_per_thread *pt = &context->pt[tsi]; struct lws_attach_item *item; if (!get) { /* * allocate and add to the head of the pt's attach list */ item = lws_zalloc(sizeof(*item), __func__); if (!item) return 1; item->cb = cb; item->opaque = opaque; item->state = state; lws_dll2_add_head(&item->list, &pt->attach_owner); lws_cancel_service(context); return 0; } *get = NULL; #if defined(LWS_WITH_SYS_STATE) if (!pt->attach_owner.count) return 0; /* * If any, return the first guy whose state requirement matches */ lws_start_foreach_dll(struct lws_dll2 *, d, lws_dll2_get_head(&pt->attach_owner)) { item = lws_container_of(d, lws_attach_item_t, list); if (pt->context->mgr_system.state >= (int)item->state) { *get = item; lws_dll2_remove(d); /* * We detached it, but the caller now has the * responsibility to lws_free() *get. */ return 0; } } lws_end_foreach_dll(d); #endif /* nobody ready to go... leave *get as NULL and return cleanly */ return 0; } int lws_system_do_attach(struct lws_context_per_thread *pt) { /* * If nothing to do, we just return immediately */ while (pt->attach_owner.count) { struct lws_attach_item *item; /* * If anybody used the attach apis, there must be an * implementation of the (*attach) lws_system op function */ assert(pt->context->system_ops->attach); if (!pt->context->system_ops->attach) { lwsl_err("%s: define (*attach)\n", __func__); return 1; } /* * System locking is applied only around this next call, while * we detach and get a pointer to the tail attach item. We * become responsible to free what we have detached. */ if (pt->context->system_ops->attach(pt->context, pt->tid, NULL, 0, NULL, &item)) { lwsl_err("%s: attach problem\n", __func__); return 1; } if (!item) /* there's nothing more to do at the moment */ return 0; /* * Do the callback from the lws event loop thread */ item->cb(pt->context, pt->tid, item->opaque); /* it's done, destroy the item */ lws_free(item); } return 0; } #endif libwebsockets-4.3.5/lib/tls/000077500000000000000000000000001476025525100157425ustar00rootroot00000000000000libwebsockets-4.3.5/lib/tls/CMakeLists.txt000066400000000000000000000557531476025525100205210ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # # # This converts everything about the tls support into # # - entries on SOURCES (modifications set back in PARENT_SCOPE) # - entries on LIB_LIST (modifications set back in PARENT_SCOPE) # - include_directories() # - Api build-time discovery results set in PARENT_SCOPE # # Everything else is handled privately here. include_directories(.) # Allow the user to use the old CyaSSL options/library in stead of wolfSSL if (LWS_WITH_CYASSL AND LWS_WITH_WOLFSSL) message(FATAL_ERROR "LWS_WITH_CYASSL and LWS_WITH_WOLFSSL are mutually exclusive!") endif() if (LWS_WITH_CYASSL) # Copy CyaSSL options to the wolfSSL options set(LWS_WITH_WOLFSSL ${LWS_WITH_CYASSL} CACHE BOOL "Use wolfSSL/CyaSSL instead of OpenSSL" FORCE PARENT_SCOPE) set(LWS_WOLFSSL_LIBRARIES ${LWS_CYASSL_LIBRARIES} CACHE PATH "Path to wolfSSL/CyaSSL libraries" FORCE PARENT_SCOPE) set(LWS_WOLFSSL_INCLUDE_DIRS ${LWS_CYASSL_INCLUDE_DIRS} CACHE PATH "Path to wolfSSL/CyaSSL header files" FORCE PARENT_SCOPE) endif() set(LWS_OPENSSL_LIBRARIES CACHE PATH "Path to the OpenSSL library" ) set(LWS_OPENSSL_INCLUDE_DIRS CACHE PATH "Path to the OpenSSL include directory" ) set(LWS_WOLFSSL_LIBRARIES CACHE PATH "Path to the wolfSSL library" ) set(LWS_WOLFSSL_INCLUDE_DIRS CACHE PATH "Path to the wolfSSL include directory" ) if (LWS_WITH_BORINGSSL) # boringssl deprecated EVP_PKEY set (LWS_WITH_GENHASH OFF PARENT_SCOPE) endif() if (LWS_WITH_SSL AND NOT LWS_WITH_WOLFSSL AND NOT LWS_WITH_MBEDTLS) if ("${LWS_OPENSSL_LIBRARIES}" STREQUAL "" OR "${LWS_OPENSSL_INCLUDE_DIRS}" STREQUAL "") else() if (NOT LWS_PLAT_FREERTOS) set(OPENSSL_LIBRARIES ${LWS_OPENSSL_LIBRARIES}) endif() set(OPENSSL_INCLUDE_DIRS ${LWS_OPENSSL_INCLUDE_DIRS}) set(OPENSSL_FOUND 1) endif() endif() if (LWS_WITH_SSL AND LWS_WITH_WOLFSSL) if ("${LWS_WOLFSSL_LIBRARIES}" STREQUAL "" OR "${LWS_WOLFSSL_INCLUDE_DIRS}" STREQUAL "") include (FindPkgConfig) PKG_SEARCH_MODULE(LWS_WOLFSSL wolfssl) if (NOT WOLFSSL_FOUND) if (LWS_WITH_CYASSL) message(FATAL_ERROR "You must set LWS_CYASSL_LIBRARIES and LWS_CYASSL_INCLUDE_DIRS when LWS_WITH_CYASSL is turned on.") else() message(FATAL_ERROR "You must set LWS_WOLFSSL_LIBRARIES and LWS_WOLFSSL_INCLUDE_DIRS when LWS_WITH_WOLFSSL is turned on.") endif() endif() else() set(WOLFSSL_LIBRARIES ${LWS_WOLFSSL_LIBRARIES}) set(WOLFSSL_INCLUDE_DIRS ${LWS_WOLFSSL_INCLUDE_DIRS}) set(WOLFSSL_FOUND 1) endif() set(USE_WOLFSSL 1) set(USE_WOLFSSL 1 PARENT_SCOPE) set(LWS_WITH_TLS 1 PARENT_SCOPE) if (LWS_WITH_CYASSL) set(USE_OLD_CYASSL 1) endif() endif() if (LWS_SSL_CLIENT_USE_OS_CA_CERTS) set(LWS_SSL_CLIENT_USE_OS_CA_CERTS 1 PARENT_SCOPE) endif() if (LWS_WITH_MBEDTLS) add_subdirectory(mbedtls) include_directories(${_CMAKE_INC_LIST}) endif() # The base dir where the test-apps look for the SSL certs. set(LWS_OPENSSL_CLIENT_CERTS ../share CACHE PATH "Server SSL certificate directory") if (WIN32) set(LWS_OPENSSL_CLIENT_CERTS . CACHE PATH "Client SSL certificate directory" PARENT_SCOPE) else() set(LWS_OPENSSL_CLIENT_CERTS /etc/pki/tls/certs/ CACHE PATH "Client SSL certificate directory") endif() if (LWS_WITH_SSL) list(APPEND SOURCES tls/tls.c) if (LWS_WITH_NETWORK) list(APPEND SOURCES tls/tls-network.c) endif() if (LWS_WITH_TLS_SESSIONS) list(APPEND SOURCES tls/tls-sessions.c) endif() if (LWS_WITH_TLS_JIT_TRUST) list(APPEND SOURCES tls/tls-jit-trust.c) endif() if (LWS_WITH_MBEDTLS) list(APPEND SOURCES tls/mbedtls/mbedtls-tls.c tls/mbedtls/mbedtls-extensions.c tls/mbedtls/mbedtls-x509.c) if (LWS_WITH_NETWORK) list(APPEND SOURCES tls/mbedtls/mbedtls-ssl.c) endif() if (LWS_WITH_TLS_JIT_TRUST) list(APPEND SOURCES tls/mbedtls/mbedtls-extensions.c) endif() if (LWS_WITH_TLS_SESSIONS) list(APPEND SOURCES tls/mbedtls/mbedtls-session.c) endif() if (LWS_WITH_GENCRYPTO) list(APPEND SOURCES tls/mbedtls/lws-genhash.c tls/mbedtls/lws-genrsa.c tls/mbedtls/lws-genaes.c tls/lws-genec-common.c tls/mbedtls/lws-genec.c tls/mbedtls/lws-gencrypto.c) endif() else() list(APPEND SOURCES tls/openssl/openssl-tls.c tls/openssl/openssl-x509.c) if (LWS_WITH_NETWORK) list(APPEND SOURCES tls/openssl/openssl-ssl.c) endif() if (LWS_WITH_TLS_SESSIONS) list(APPEND SOURCES tls/openssl/openssl-session.c) endif() if (LWS_WITH_GENCRYPTO) list(APPEND SOURCES tls/openssl/lws-genhash.c tls/openssl/lws-genrsa.c tls/openssl/lws-genaes.c tls/lws-genec-common.c tls/openssl/lws-genec.c tls/openssl/lws-gencrypto.c) endif() endif() if (NOT LWS_WITHOUT_SERVER) list(APPEND SOURCES tls/tls-server.c) if (LWS_WITH_MBEDTLS) list(APPEND SOURCES tls/mbedtls/mbedtls-server.c) else() list(APPEND SOURCES tls/openssl/openssl-server.c) endif() endif() if (NOT LWS_WITHOUT_CLIENT) list(APPEND SOURCES tls/tls-client.c) if (LWS_WITH_MBEDTLS) list(APPEND SOURCES tls/mbedtls/mbedtls-client.c) else() list(APPEND SOURCES tls/openssl/openssl-client.c) endif() endif() endif() set(SOURCES ${SOURCES} PARENT_SCOPE) # # OpenSSL # if (LWS_WITH_SSL) message("Compiling with SSL support") set(chose_ssl 0) if (LWS_WITH_WOLFSSL) # Use wolfSSL as OpenSSL replacement. # TODO: Add a find_package command for this also. message("wolfSSL include dir: ${WOLFSSL_INCLUDE_DIRS}") message("wolfSSL libraries: ${WOLFSSL_LIBRARIES}") # Additional to the root directory we need to include # the wolfssl/ subdirectory which contains the OpenSSL # compatibility layer headers. if (LWS_WITH_CYASSL) foreach(inc ${WOLFSSL_INCLUDE_DIRS}) set(OPENSSL_INCLUDE_DIRS ${OPENSSL_INCLUDE_DIRS} ${inc} ${inc}/cyassl) set(LWS_PUBLIC_INCLUDES ${LWS_PUBLIC_INCLUDES} "${inc}" "${inc}/cyassl") set(LWS_PUBLIC_INCLUDES ${LWS_PUBLIC_INCLUDES} PARENT_SCOPE) endforeach() else() foreach(inc ${WOLFSSL_INCLUDE_DIRS}) set(OPENSSL_INCLUDE_DIRS ${OPENSSL_INCLUDE_DIRS} ${inc} ${inc}/wolfssl) set(LWS_PUBLIC_INCLUDES ${LWS_PUBLIC_INCLUDES} "${inc}" "${inc}/wolfssl") set(LWS_PUBLIC_INCLUDES ${LWS_PUBLIC_INCLUDES} PARENT_SCOPE) endforeach() endif() set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${OPENSSL_INCLUDE_DIRS}) set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} PARENT_SCOPE) set(OPENSSL_INCLUDE_DIRS ${OPENSSL_INCLUDE_DIRS} PARENT_SCOPE) set(VARIA wolfSSL_) list(INSERT LIB_LIST 0 "${WOLFSSL_LIBRARIES}") message("LIB_LIST ${LIB_LIST}") set(chose_ssl 1) endif() if (LWS_WITH_MBEDTLS AND DEFINED MBEDTLS_INCLUDE_DIRS AND DEFINED MBEDTLS_LIBRARIES) message("MBEDTLS include dir: ${MBEDTLS_INCLUDE_DIRS}") message("MBEDTLS libraries: ${MBEDTLS_LIBRARIES}") foreach(inc ${MBEDTLS_INCLUDE_DIRS}) set(LWS_PUBLIC_INCLUDES ${LWS_PUBLIC_INCLUDES} "${inc}" "${inc}/mbedtls") set(LWS_PUBLIC_INCLUDES ${LWS_PUBLIC_INCLUDES} PARENT_SCOPE) endforeach() list(INSERT LIB_LIST 0 "${MBEDTLS_LIBRARIES}") endif() if (LWS_WITH_MBEDTLS) set(chose_ssl 1) endif() if (NOT chose_ssl) if (OPENSSL_FOUND AND "${OPENSSL_INCLUDE_DIRS}" STREQUAL "") set(OPENSSL_INCLUDE_DIRS "${OPENSSL_INCLUDE_DIR}") endif() if (NOT OPENSSL_FOUND AND NOT LWS_WITH_BORINGSSL) # TODO: Add support for STATIC also. if (NOT LWS_PLAT_FREERTOS) find_package(PkgConfig QUIET) pkg_check_modules(PC_OPENSSL openssl QUIET) find_package(OpenSSL REQUIRED) list(APPEND OPENSSL_LIBRARIES ${PC_OPENSSL_LINK_LIBRARIES}) set(OPENSSL_LIBRARIES ${OPENSSL_LIBRARIES} PARENT_SCOPE) endif() set(OPENSSL_INCLUDE_DIRS "${OPENSSL_INCLUDE_DIR}") endif() message("OpenSSL include dir: ${OPENSSL_INCLUDE_DIRS}") if (NOT LWS_PLAT_FREERTOS) message("OpenSSL libraries: ${OPENSSL_LIBRARIES}") endif() if (OPENSSL_INCLUDE_DIRS) set(LWS_PUBLIC_INCLUDES ${LWS_PUBLIC_INCLUDES} "${OPENSSL_INCLUDE_DIRS}") set(LWS_PUBLIC_INCLUDES ${LWS_PUBLIC_INCLUDES} PARENT_SCOPE) endif() if (NOT LWS_PLAT_FREERTOS) list(INSERT LIB_LIST 0 ${OPENSSL_LIBRARIES}) endif() if (NOT LWS_WITH_MBEDTLS) # older (0.98) Openssl lacks this set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${OPENSSL_INCLUDE_DIRS} PARENT_SCOPE) check_include_file(openssl/ecdh.h LWS_HAVE_OPENSSL_ECDH_H) if (LWS_SSL_SERVER_WITH_ECDH_CERT AND NOT LWS_HAVE_OPENSSL_ECDH_H) message(FATAL_ERROR "Missing openssl/ecdh.h, so cannot use LWS_SSL_SERVER_WITH_ECDH_CERT") endif() else() unset(LWS_HAVE_OPENSSL_ECDH_H PARENT_SCOPE) endif(NOT LWS_WITH_MBEDTLS) endif() endif(LWS_WITH_SSL) if (DEFINED OPENSSL_INCLUDE_DIRS) set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIRS}) endif() if (DEFINED LIB_LIST) set(CMAKE_REQUIRED_LIBRARIES ${LIB_LIST}) endif() if (UNIX AND NOT (${CMAKE_SYSTEM_NAME} MATCHES "QNX")) set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${CMAKE_DL_LIBS}) endif() if ((CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) AND NOT ((${CMAKE_SYSTEM_NAME} MATCHES "QNX") OR PC_OPENSSL_FOUND)) set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} pthread) endif() if (NOT VARIA) set(VARIA "") endif() CHECK_FUNCTION_EXISTS(${VARIA}SSL_CTX_set1_param LWS_HAVE_SSL_CTX_set1_param PARENT_SCOPE) CHECK_FUNCTION_EXISTS(${VARIA}SSL_set_info_callback LWS_HAVE_SSL_SET_INFO_CALLBACK PARENT_SCOPE) CHECK_FUNCTION_EXISTS(${VARIA}X509_VERIFY_PARAM_set1_host LWS_HAVE_X509_VERIFY_PARAM_set1_host PARENT_SCOPE) CHECK_SYMBOL_EXISTS(${VARIA}X509_VERIFY_PARAM_set1_host LWS_HAVE_X509_VERIFY_PARAM_set1_host_sym PARENT_SCOPE) if (LWS_HAVE_X509_VERIFY_PARAM_set1_host_sym) set(LWS_HAVE_X509_VERIFY_PARAM_set1_host 1 PARENT_SCOPE) endif() CHECK_FUNCTION_EXISTS(${VARIA}RSA_set0_key LWS_HAVE_RSA_SET0_KEY PARENT_SCOPE) CHECK_FUNCTION_EXISTS(${VARIA}X509_get_key_usage LWS_HAVE_X509_get_key_usage PARENT_SCOPE) CHECK_FUNCTION_EXISTS(${VARIA}SSL_CTX_EVP_PKEY_new_raw_private_key LWS_HAVE_SSL_CTX_EVP_PKEY_new_raw_private_key PARENT_SCOPE) CHECK_FUNCTION_EXISTS(${VARIA}SSL_CTX_get0_certificate LWS_HAVE_SSL_CTX_get0_certificate PARENT_SCOPE) CHECK_FUNCTION_EXISTS(${VARIA}SSL_get0_alpn_selected LWS_HAVE_SSL_get0_alpn_selected PARENT_SCOPE) CHECK_FUNCTION_EXISTS(${VARIA}SSL_set_alpn_protos LWS_HAVE_SSL_set_alpn_protos PARENT_SCOPE) CHECK_FUNCTION_EXISTS(${VARIA}EVP_aes_128_cfb8 LWS_HAVE_EVP_aes_128_cfb8 PARENT_SCOPE) CHECK_FUNCTION_EXISTS(${VARIA}EVP_aes_128_cfb128 LWS_HAVE_EVP_aes_128_cfb128 PARENT_SCOPE) CHECK_FUNCTION_EXISTS(${VARIA}EVP_aes_192_cfb8 LWS_HAVE_EVP_aes_192_cfb8 PARENT_SCOPE) CHECK_FUNCTION_EXISTS(${VARIA}EVP_aes_192_cfb128 LWS_HAVE_EVP_aes_192_cfb128 PARENT_SCOPE) CHECK_FUNCTION_EXISTS(${VARIA}EVP_aes_256_cfb8 LWS_HAVE_EVP_aes_256_cfb8 PARENT_SCOPE) CHECK_FUNCTION_EXISTS(${VARIA}EVP_aes_256_cfb128 LWS_HAVE_EVP_aes_256_cfb128 PARENT_SCOPE) CHECK_FUNCTION_EXISTS(${VARIA}EVP_aes_128_xts LWS_HAVE_EVP_aes_128_xts PARENT_SCOPE) CHECK_FUNCTION_EXISTS(${VARIA}EVP_aes_128_ofb LWS_HAVE_EVP_aes_128_ofb PARENT_SCOPE) CHECK_FUNCTION_EXISTS(${VARIA}EVP_aes_128_ecb LWS_HAVE_EVP_aes_128_ecb PARENT_SCOPE) CHECK_FUNCTION_EXISTS(${VARIA}EVP_aes_128_ctr LWS_HAVE_EVP_aes_128_ctr PARENT_SCOPE) CHECK_FUNCTION_EXISTS(${VARIA}EVP_aes_128_xts LWS_HAVE_EVP_aes_128_xts PARENT_SCOPE) CHECK_FUNCTION_EXISTS(${VARIA}RSA_verify_pss_mgf1 LWS_HAVE_RSA_verify_pss_mgf1 PARENT_SCOPE) CHECK_FUNCTION_EXISTS(${VARIA}HMAC_CTX_new LWS_HAVE_HMAC_CTX_new PARENT_SCOPE) CHECK_SYMBOL_EXISTS(${VARIA}SSL_CTX_set_ciphersuites LWS_HAVE_SSL_CTX_set_ciphersuites PARENT_SCOPE) CHECK_FUNCTION_EXISTS(${VARIA}EVP_PKEY_new_raw_private_key LWS_HAVE_EVP_PKEY_new_raw_private_key PARENT_SCOPE) CHECK_FUNCTION_EXISTS(${VARIA}SSL_SESSION_set_time LWS_HAVE_SSL_SESSION_set_time PARENT_SCOPE) CHECK_SYMBOL_EXISTS(${VARIA}SSL_SESSION_up_ref LWS_HAVE_SSL_SESSION_up_ref PARENT_SCOPE) # deprecated in openssl v3 CHECK_FUNCTION_EXISTS(${VARIA}EC_KEY_new_by_curve_name LWS_HAVE_EC_KEY_new_by_curve_name PARENT_SCOPE) if (LWS_WITH_SSL AND NOT LWS_WITH_MBEDTLS) # we don't want to confuse what's in or out of the wrapper with # what's in an openssl also installed on the build host CHECK_C_SOURCE_COMPILES("#include \nint main(void) { STACK_OF(X509) *c = NULL; SSL_CTX *ctx = NULL; return (int)SSL_CTX_get_extra_chain_certs_only(ctx, &c); }\n" LWS_HAVE_SSL_EXTRA_CHAIN_CERTS) CHECK_C_SOURCE_COMPILES("#include \nint main(void) { EVP_MD_CTX *md_ctx = NULL; EVP_MD_CTX_free(md_ctx); return 0; }\n" LWS_HAVE_EVP_MD_CTX_free) CHECK_C_SOURCE_COMPILES("#include \nint main(void) { OPENSSL_STACK *x = NULL; return !x; } \n" LWS_HAVE_OPENSSL_STACK) set(LWS_HAVE_SSL_EXTRA_CHAIN_CERTS ${LWS_HAVE_SSL_EXTRA_CHAIN_CERTS} PARENT_SCOPE) set(LWS_HAVE_EVP_MD_CTX_free ${LWS_HAVE_EVP_MD_CTX_free} PARENT_SCOPE) CHECK_FUNCTION_EXISTS(${VARIA}ECDSA_SIG_set0 LWS_HAVE_ECDSA_SIG_set0 PARENT_SCOPE) CHECK_FUNCTION_EXISTS(${VARIA}BN_bn2binpad LWS_HAVE_BN_bn2binpad PARENT_SCOPE) CHECK_FUNCTION_EXISTS(${VARIA}EVP_aes_128_wrap LWS_HAVE_EVP_aes_128_wrap PARENT_SCOPE) CHECK_FUNCTION_EXISTS(${VARIA}EC_POINT_get_affine_coordinates LWS_HAVE_EC_POINT_get_affine_coordinates PARENT_SCOPE) CHECK_SYMBOL_EXISTS(${VARIA}SSL_CTX_load_verify_file LWS_HAVE_SSL_CTX_load_verify_file PARENT_SCOPE) CHECK_SYMBOL_EXISTS(${VARIA}SSL_CTX_load_verify_dir LWS_HAVE_SSL_CTX_load_verify_dir PARENT_SCOPE) endif() if (LWS_WITH_MBEDTLS) set(LWS_HAVE_TLS_CLIENT_METHOD 1 PARENT_SCOPE) if (NOT LWS_PLAT_FREERTOS) # not supported in esp-idf openssl wrapper yet, but is in our version set(LWS_HAVE_X509_VERIFY_PARAM_set1_host 1 PARENT_SCOPE) endif() set(CMAKE_REQUIRED_LIBRARIES ${MBEDTLS_LIBRARY} ${MBEDX509_LIBRARY} ${MBEDCRYPTO_LIBRARY}) set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${MBEDTLS_INCLUDE_DIRS}) if (ESP_PLATFORM) # we know we should have things set(LWS_HAVE_MBEDTLS_AUTH_KEY_ID 1 CACHE BOOL x) set(LWS_HAVE_mbedtls_ssl_conf_alpn_protocols 1 CACHE BOOL x) set(LWS_HAVE_mbedtls_ssl_get_alpn_protocol 1 CACHE BOOL x) set(LWS_HAVE_mbedtls_ssl_conf_sni 1 CACHE BOOL x) set(LWS_HAVE_mbedtls_ssl_set_hs_ca_chain 1 CACHE BOOL x) set(LWS_HAVE_mbedtls_ssl_set_hs_own_cert 1 CACHE BOOL x) set(LWS_HAVE_mbedtls_ssl_set_hs_authmode 1 CACHE BOOL x) set(LWS_HAVE_mbedtls_net_init 1 CACHE BOOL x) set(LWS_HAVE_mbedtls_x509_crt_parse_file 1 CACHE BOOL x) # some embedded may lack filesystem set(LWS_HAVE_mbedtls_md_setup 1 CACHE BOOL x) # not on xenial 2.2 set(LWS_HAVE_mbedtls_rsa_complete 1 CACHE BOOL x) # not on xenial 2.2 set(LWS_HAVE_mbedtls_internal_aes_encrypt 1 CACHE BOOL x) # not on xenial 2.2 else() CHECK_C_SOURCE_COMPILES("#include \nint main(void) { struct mbedtls_x509_crt c; c.authority_key_id.keyIdentifier.tag = MBEDTLS_ASN1_OCTET_STRING; return c.authority_key_id.keyIdentifier.tag; }\n" LWS_HAVE_MBEDTLS_AUTH_KEY_ID) CHECK_C_SOURCE_COMPILES("#include \nint main(void) { void *v = (void *)mbedtls_ssl_set_verify; return !!v; }\n" LWS_HAVE_mbedtls_ssl_set_verify) CHECK_C_SOURCE_COMPILES("#include \nint main(void) { void *v = (void *)mbedtls_ssl_conf_alpn_protocols; return !!v; }\n" LWS_HAVE_mbedtls_ssl_conf_alpn_protocols) CHECK_FUNCTION_EXISTS(mbedtls_ssl_get_alpn_protocol LWS_HAVE_mbedtls_ssl_get_alpn_protocol PARENT_SCOPE) CHECK_FUNCTION_EXISTS(mbedtls_ssl_conf_sni LWS_HAVE_mbedtls_ssl_conf_sni PARENT_SCOPE) CHECK_FUNCTION_EXISTS(mbedtls_ssl_set_hs_ca_chain LWS_HAVE_mbedtls_ssl_set_hs_ca_chain PARENT_SCOPE) CHECK_FUNCTION_EXISTS(mbedtls_ssl_set_hs_own_cert LWS_HAVE_mbedtls_ssl_set_hs_own_cert PARENT_SCOPE) CHECK_FUNCTION_EXISTS(mbedtls_ssl_set_hs_authmode LWS_HAVE_mbedtls_ssl_set_hs_authmode PARENT_SCOPE) CHECK_FUNCTION_EXISTS(mbedtls_net_init LWS_HAVE_mbedtls_net_init PARENT_SCOPE) CHECK_FUNCTION_EXISTS(mbedtls_x509_crt_parse_file LWS_HAVE_mbedtls_x509_crt_parse_file PARENT_SCOPE) # some embedded may lack filesystem CHECK_FUNCTION_EXISTS(mbedtls_md_setup LWS_HAVE_mbedtls_md_setup PARENT_SCOPE) # not on xenial 2.2 CHECK_FUNCTION_EXISTS(mbedtls_rsa_complete LWS_HAVE_mbedtls_rsa_complete PARENT_SCOPE) # not on xenial 2.2 CHECK_FUNCTION_EXISTS(mbedtls_internal_aes_encrypt LWS_HAVE_mbedtls_internal_aes_encrypt PARENT_SCOPE) # not on xenial 2.2 endif() else() CHECK_FUNCTION_EXISTS(${VARIA}TLS_client_method LWS_HAVE_TLS_CLIENT_METHOD PARENT_SCOPE) CHECK_FUNCTION_EXISTS(${VARIA}TLSv1_2_client_method LWS_HAVE_TLSV1_2_CLIENT_METHOD PARENT_SCOPE) endif() # Generate self-signed SSL certs for the test-server. if (LWS_WITH_SSL AND NOT LWS_WITH_WOLFSSL) message("Searching for OpenSSL executable and dlls") find_package(OpenSSLbins) if (DEFINED OPENSSL_EXECUTABLE) message("OpenSSL executable: ${OPENSSL_EXECUTABLE}") if (OPENSSL_EXECUTABLE MATCHES "^$") set(OPENSSL_EXECUTABLE openssl) endif() endif() if (NOT DEFINED OPENSSL_EXECUTABLE) set(OPENSSL_EXECUTABLE openssl) endif() endif() set(GENCERTS 0) if (LWS_WITH_SSL AND OPENSSL_EXECUTABLE AND NOT LWS_WITHOUT_TEST_SERVER AND NOT LWS_WITHOUT_SERVER AND NOT LWS_WITHOUT_TESTAPPS) set(GENCERTS 1) endif() if (LWS_PLAT_FREERTOS AND LWS_WITH_SSL) set(GENCERTS 1) endif() message(" GENCERTS = ${GENCERTS}") if (GENCERTS) message("Generating SSL Certificates for the test-server...") set(TEST_SERVER_SSL_KEY "${PROJECT_BINARY_DIR}/libwebsockets-test-server.key.pem") set(TEST_SERVER_SSL_CERT "${PROJECT_BINARY_DIR}/libwebsockets-test-server.pem") if (WIN32) if (MINGW) message("cmd = \"${OPENSSL_EXECUTABLE}\" req -new -newkey rsa:2048 -days 10000 -nodes -x509 -subj \"/C=GB/ST=Erewhon/L=All around/O=libwebsockets-test/CN=localhost\" -keyout \"${TEST_SERVER_SSL_KEY}\" -out \"${TEST_SERVER_SSL_CERT}\"") execute_process( COMMAND "${OPENSSL_EXECUTABLE}" req -new -newkey rsa:2048 -days 10000 -nodes -x509 -subj "/C=GB/ST=Erewhon/L=All around/O=libwebsockets-test/CN=localhost" -keyout "${TEST_SERVER_SSL_KEY}" -out "${TEST_SERVER_SSL_CERT}" RESULT_VARIABLE OPENSSL_RETURN_CODE) else() file(WRITE "${PROJECT_BINARY_DIR}/openssl_input.txt" "GB\n" "Erewhon\n" "All around\n" "libwebsockets-test\n" "localhost\n" "none@invalid.org\n\n" ) # The "type" command is a bit picky with paths. file(TO_NATIVE_PATH "${PROJECT_BINARY_DIR}/openssl_input.txt" OPENSSL_INPUT_WIN_PATH) message("OPENSSL_INPUT_WIN_PATH = ${OPENSSL_INPUT_WIN_PATH}") message("cmd = \"${OPENSSL_EXECUTABLE}\" req -new -newkey rsa:2048 -days 10000 -nodes -x509 -keyout \"${TEST_SERVER_SSL_KEY}\" -out \"${TEST_SERVER_SSL_CERT}\"") if(OPENSSL_CONFIG_FILE) execute_process( COMMAND cmd /c type "${OPENSSL_INPUT_WIN_PATH}" COMMAND "${OPENSSL_EXECUTABLE}" req -config ${OPENSSL_CONFIG_FILE} -new -newkey rsa:2048 -days 10000 -nodes -x509 -keyout "${TEST_SERVER_SSL_KEY}" -out "${TEST_SERVER_SSL_CERT}" RESULT_VARIABLE OPENSSL_RETURN_CODE OUTPUT_QUIET ERROR_QUIET) else() execute_process( COMMAND cmd /c type "${OPENSSL_INPUT_WIN_PATH}" COMMAND "${OPENSSL_EXECUTABLE}" req -new -newkey rsa:2048 -days 10000 -nodes -x509 -keyout "${TEST_SERVER_SSL_KEY}" -out "${TEST_SERVER_SSL_CERT}" RESULT_VARIABLE OPENSSL_RETURN_CODE OUTPUT_QUIET ERROR_QUIET) endif() message("\n") endif() if (OPENSSL_RETURN_CODE) message(WARNING "!!! Failed to generate SSL certificate for Test Server using cmd.exe !!!:\nOpenSSL return code = ${OPENSSL_RETURN_CODE}") else() message("SUCCSESFULLY generated SSL certificate") endif() else() if (CMAKE_HOST_SYSTEM_NAME MATCHES "NetBSD") execute_process( COMMAND "${OPENSSL_EXECUTABLE}" req -new -newkey rsa:2048 -days 10000 -nodes -x509 -subj "/O=lws/CN=localhost" -keyout "${TEST_SERVER_SSL_KEY}" -out "${TEST_SERVER_SSL_CERT}" RESULT_VARIABLE OPENSSL_RETURN_CODE # OUTPUT_QUIET ERROR_QUIET ) else() # Unix. execute_process( COMMAND printf "GB\\nErewhon\\nAll around\\nlibwebsockets-test\\n\\nlocalhost\\nnone@invalid.org\\n" COMMAND "${OPENSSL_EXECUTABLE}" req -new -newkey rsa:2048 -days 10000 -nodes -x509 -keyout "${TEST_SERVER_SSL_KEY}" -out "${TEST_SERVER_SSL_CERT}" RESULT_VARIABLE OPENSSL_RETURN_CODE # OUTPUT_QUIET ERROR_QUIET ) endif() if (OPENSSL_RETURN_CODE) message(WARNING "!!! Failed to generate SSL certificate for Test Server!!!:\nOpenSSL return code = ${OPENSSL_RETURN_CODE}") else() message("SUCCESSFULLY generated SSL certificate") endif() endif() list(APPEND TEST_SERVER_DATA "${TEST_SERVER_SSL_KEY}" "${TEST_SERVER_SSL_CERT}") endif() # # Copy OpenSSL dlls to the output directory on Windows. # (Otherwise we'll get an error when trying to run) # if (MSVC AND LWS_WITH_SSL AND NOT LWS_WITH_WOLFSSL) if(OPENSSL_BIN_FOUND) message("OpenSSL dlls found:") message(" Libeay: ${LIBEAY_BIN}") message(" SSLeay: ${SSLEAY_BIN}") foreach(TARGET_BIN ${TEST_APP_LIST}) add_custom_command(TARGET ${TARGET_BIN} POST_BUILD COMMAND "${CMAKE_COMMAND}" -E copy "${LIBEAY_BIN}" "$" VERBATIM) add_custom_command(TARGET ${TARGET_BIN} POST_BUILD COMMAND "${CMAKE_COMMAND}" -E copy "${SSLEAY_BIN}" "$" VERBATIM) # # Win32: if we are using libuv, also need to copy it in the output dir # if (MSVC AND LWS_WITH_LIBUV) STRING(REPLACE ".lib" ".dll" LIBUV_BIN ${LIBUV_LIBRARIES}) add_custom_command(TARGET ${TARGET_BIN} POST_BUILD COMMAND "${CMAKE_COMMAND}" -E copy "${LIBUV_BIN}" "$" VERBATIM) endif() endforeach() endif() endif() if (LWS_WITH_TLS AND (LWS_WITH_JOSE OR LWS_WITH_GENCRYPTO)) list(APPEND SOURCES tls/lws-gencrypto-common.c) endif() # # Keep explicit parent scope exports at end # exports_to_parent_scope() set(LWS_HAVE_MBEDTLS_NET_SOCKETS ${LWS_HAVE_MBEDTLS_NET_SOCKETS} PARENT_SCOPE) set(LWS_HAVE_MBEDTLS_SSL_NEW_SESSION_TICKET ${LWS_HAVE_MBEDTLS_SSL_NEW_SESSION_TICKET} PARENT_SCOPE) set(LWS_HAVE_mbedtls_ssl_conf_alpn_protocols ${LWS_HAVE_mbedtls_ssl_conf_alpn_protocols} PARENT_SCOPE) set(TEST_SERVER_SSL_KEY "${TEST_SERVER_SSL_KEY}" PARENT_SCOPE) set(TEST_SERVER_SSL_CERT "${TEST_SERVER_SSL_CERT}" PARENT_SCOPE) set(TEST_SERVER_DATA ${TEST_SERVER_DATA} PARENT_SCOPE) libwebsockets-4.3.5/lib/tls/lws-gencrypto-common.c000066400000000000000000000530261476025525100222170ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" /* * These came from RFC7518 (JSON Web Algorithms) Section 3 * * Cryptographic Algorithms for Digital Signatures and MACs */ static const struct lws_jose_jwe_alg lws_gencrypto_jws_alg_map[] = { /* * JWSs MAY also be created that do not provide integrity protection. * Such a JWS is called an Unsecured JWS. An Unsecured JWS uses the * "alg" value "none" and is formatted identically to other JWSs, but * MUST use the empty octet sequence as its JWS Signature value. * Recipients MUST verify that the JWS Signature value is the empty * octet sequence. * * Implementations that support Unsecured JWSs MUST NOT accept such * objects as valid unless the application specifies that it is * acceptable for a specific object to not be integrity protected. * Implementations MUST NOT accept Unsecured JWSs by default. In order * to mitigate downgrade attacks, applications MUST NOT signal * acceptance of Unsecured JWSs at a global level, and SHOULD signal * acceptance on a per-object basis. See Section 8.5 for security * considerations associated with using this algorithm. */ { /* optional */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_NONE, LWS_JOSE_ENCTYPE_NONE, "none", NULL, 0, 0, 0 }, /* * HMAC with SHA-2 Functions * * The HMAC SHA-256 MAC for a JWS is validated by computing an HMAC * value per RFC 2104, using SHA-256 as the hash algorithm "H", using * the received JWS Signing Input as the "text" value, and using the * shared key. This computed HMAC value is then compared to the result * of base64url decoding the received encoded JWS Signature value. The * comparison of the computed HMAC value to the JWS Signature value MUST * be done in a constant-time manner to thwart timing attacks. * * Alternatively, the computed HMAC value can be base64url encoded and * compared to the received encoded JWS Signature value (also in a * constant-time manner), as this comparison produces the same result as * comparing the unencoded values. In either case, if the values match, * the HMAC has been validated. */ { /* required: HMAC using SHA-256 */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_SHA256, LWS_JOSE_ENCTYPE_NONE, LWS_JOSE_ENCTYPE_NONE, "HS256", NULL, 0, 0, 0 }, { /* optional: HMAC using SHA-384 */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_SHA384, LWS_JOSE_ENCTYPE_NONE, LWS_JOSE_ENCTYPE_NONE, "HS384", NULL, 0, 0, 0 }, { /* optional: HMAC using SHA-512 */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_SHA512, LWS_JOSE_ENCTYPE_NONE, LWS_JOSE_ENCTYPE_NONE, "HS512", NULL, 0, 0, 0 }, /* * Digital Signature with RSASSA-PKCS1-v1_5 * * This section defines the use of the RSASSA-PKCS1-v1_5 digital * signature algorithm as defined in Section 8.2 of RFC 3447 [RFC3447] * (commonly known as PKCS #1), using SHA-2 [SHS] hash functions. * * A key of size 2048 bits or larger MUST be used with these algorithms. * * The RSASSA-PKCS1-v1_5 SHA-256 digital signature is generated as * follows: generate a digital signature of the JWS Signing Input using * RSASSA-PKCS1-v1_5-SIGN and the SHA-256 hash function with the desired * private key. This is the JWS Signature value. * * The RSASSA-PKCS1-v1_5 SHA-256 digital signature for a JWS is * validated as follows: submit the JWS Signing Input, the JWS * Signature, and the public key corresponding to the private key used * by the signer to the RSASSA-PKCS1-v1_5-VERIFY algorithm using SHA-256 * as the hash function. */ { /* recommended: RSASSA-PKCS1-v1_5 using SHA-256 */ LWS_GENHASH_TYPE_SHA256, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_RSASSA_PKCS1_1_5, LWS_JOSE_ENCTYPE_NONE, "RS256", NULL, 2048, 4096, 0 }, { /* optional: RSASSA-PKCS1-v1_5 using SHA-384 */ LWS_GENHASH_TYPE_SHA384, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_RSASSA_PKCS1_1_5, LWS_JOSE_ENCTYPE_NONE, "RS384", NULL, 2048, 4096, 0 }, { /* optional: RSASSA-PKCS1-v1_5 using SHA-512 */ LWS_GENHASH_TYPE_SHA512, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_RSASSA_PKCS1_1_5, LWS_JOSE_ENCTYPE_NONE, "RS512", NULL, 2048, 4096, 0 }, /* * Digital Signature with ECDSA * * The ECDSA P-256 SHA-256 digital signature is generated as follows: * * 1. Generate a digital signature of the JWS Signing Input using ECDSA * P-256 SHA-256 with the desired private key. The output will be * the pair (R, S), where R and S are 256-bit unsigned integers. * 2. Turn R and S into octet sequences in big-endian order, with each * array being be 32 octets long. The octet sequence * representations MUST NOT be shortened to omit any leading zero * octets contained in the values. * * 3. Concatenate the two octet sequences in the order R and then S. * (Note that many ECDSA implementations will directly produce this * concatenation as their output.) * * 4. The resulting 64-octet sequence is the JWS Signature value. * * The ECDSA P-256 SHA-256 digital signature for a JWS is validated as * follows: * * 1. The JWS Signature value MUST be a 64-octet sequence. If it is * not a 64-octet sequence, the validation has failed. * * 2. Split the 64-octet sequence into two 32-octet sequences. The * first octet sequence represents R and the second S. The values R * and S are represented as octet sequences using the Integer-to- * OctetString Conversion defined in Section 2.3.7 of SEC1 [SEC1] * (in big-endian octet order). * 3. Submit the JWS Signing Input, R, S, and the public key (x, y) to * the ECDSA P-256 SHA-256 validator. */ { /* Recommended+: ECDSA using P-256 and SHA-256 */ LWS_GENHASH_TYPE_SHA256, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_ECDSA, LWS_JOSE_ENCTYPE_NONE, "ES256", "P-256", 256, 256, 0 }, { /* optional: ECDSA using P-384 and SHA-384 */ LWS_GENHASH_TYPE_SHA384, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_ECDSA, LWS_JOSE_ENCTYPE_NONE, "ES384", "P-384", 384, 384, 0 }, { /* optional: ECDSA using P-521 and SHA-512 */ LWS_GENHASH_TYPE_SHA512, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_ECDSA, LWS_JOSE_ENCTYPE_NONE, "ES512", "P-521", 521, 521, 0 }, #if 0 Not yet supported /* * Digital Signature with RSASSA-PSS * * A key of size 2048 bits or larger MUST be used with this algorithm. * * The RSASSA-PSS SHA-256 digital signature is generated as follows: * generate a digital signature of the JWS Signing Input using RSASSA- * PSS-SIGN, the SHA-256 hash function, and the MGF1 mask generation * function with SHA-256 with the desired private key. This is the JWS * Signature value. * * The RSASSA-PSS SHA-256 digital signature for a JWS is validated as * follows: submit the JWS Signing Input, the JWS Signature, and the * public key corresponding to the private key used by the signer to the * RSASSA-PSS-VERIFY algorithm using SHA-256 as the hash function and * using MGF1 as the mask generation function with SHA-256. * */ { /* optional: RSASSA-PSS using SHA-256 and MGF1 with SHA-256 */ LWS_GENHASH_TYPE_SHA256, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_RSASSA_PKCS1_PSS, LWS_JOSE_ENCTYPE_NONE, "PS256", NULL, 2048, 4096, 0 }, { /* optional: RSASSA-PSS using SHA-384 and MGF1 with SHA-384 */ LWS_GENHASH_TYPE_SHA384, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_RSASSA_PKCS1_PSS, LWS_JOSE_ENCTYPE_NONE, "PS384", NULL, 2048, 4096, 0 }, { /* optional: RSASSA-PSS using SHA-512 and MGF1 with SHA-512*/ LWS_GENHASH_TYPE_SHA512, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_RSASSA_PKCS1_PSS, LWS_JOSE_ENCTYPE_NONE, "PS512", NULL, 2048, 4096, 0 }, #endif /* list terminator */ { 0, 0, 0, 0, NULL, NULL, 0, 0, 0} }; /* * These came from RFC7518 (JSON Web Algorithms) Section 4 * * Cryptographic Algorithms for Key Management * * JWE uses cryptographic algorithms to encrypt or determine the Content * Encryption Key (CEK). */ static const struct lws_jose_jwe_alg lws_gencrypto_jwe_alg_map[] = { /* * This section defines the specifics of encrypting a JWE CEK with * RSAES-PKCS1-v1_5 [RFC3447]. The "alg" (algorithm) Header Parameter * value "RSA1_5" is used for this algorithm. * * A key of size 2048 bits or larger MUST be used with this algorithm. */ { /* recommended-: RSAES-PKCS1-v1_5 */ LWS_GENHASH_TYPE_SHA256, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_RSASSA_PKCS1_1_5, LWS_JOSE_ENCTYPE_NONE, "RSA1_5", NULL, 2048, 4096, 0 }, { /* recommended+: RSAES OAEP using default parameters */ LWS_GENHASH_TYPE_SHA1, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_RSASSA_PKCS1_OAEP, LWS_JOSE_ENCTYPE_NONE, "RSA-OAEP", NULL, 2048, 4096, 0 }, { /* recommended+: RSAES OAEP using SHA-256 and MGF1 SHA-256 */ LWS_GENHASH_TYPE_SHA256, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_RSASSA_PKCS1_OAEP, LWS_JOSE_ENCTYPE_NONE, "RSA-OAEP-256", NULL, 2048, 4096, 0 }, /* * Key Wrapping with AES Key Wrap * * This section defines the specifics of encrypting a JWE CEK with the * Advanced Encryption Standard (AES) Key Wrap Algorithm [RFC3394] using * the default initial value specified in Section 2.2.3.1 of that * document. * * */ { /* recommended: AES Key Wrap with AES Key Wrap with defaults using 128-bit key */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_AES_ECB, LWS_JOSE_ENCTYPE_NONE, "A128KW", NULL, 128, 128, 64 }, { /* optional: AES Key Wrap with AES Key Wrap with defaults using 192-bit key */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_AES_ECB, LWS_JOSE_ENCTYPE_NONE, "A192KW", NULL, 192, 192, 64 }, { /* recommended: AES Key Wrap with AES Key Wrap with defaults using 256-bit key */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_AES_ECB, LWS_JOSE_ENCTYPE_NONE, "A256KW", NULL, 256, 256, 64 }, /* * This section defines the specifics of directly performing symmetric * key encryption without performing a key wrapping step. In this case, * the shared symmetric key is used directly as the Content Encryption * Key (CEK) value for the "enc" algorithm. An empty octet sequence is * used as the JWE Encrypted Key value. The "alg" (algorithm) Header * Parameter value "dir" is used in this case. */ { /* recommended */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_NONE, LWS_JOSE_ENCTYPE_NONE, "dir", NULL, 0, 0, 0 }, /* * Key Agreement with Elliptic Curve Diffie-Hellman Ephemeral Static * (ECDH-ES) * * This section defines the specifics of key agreement with Elliptic * Curve Diffie-Hellman Ephemeral Static [RFC6090], in combination with * the Concat KDF, as defined in Section 5.8.1 of [NIST.800-56A]. The * key agreement result can be used in one of two ways: * * 1. directly as the Content Encryption Key (CEK) for the "enc" * algorithm, in the Direct Key Agreement mode, or * * 2. as a symmetric key used to wrap the CEK with the "A128KW", * "A192KW", or "A256KW" algorithms, in the Key Agreement with Key * Wrapping mode. * * A new ephemeral public key value MUST be generated for each key * agreement operation. * * In Direct Key Agreement mode, the output of the Concat KDF MUST be a * key of the same length as that used by the "enc" algorithm. In this * case, the empty octet sequence is used as the JWE Encrypted Key * value. The "alg" (algorithm) Header Parameter value "ECDH-ES" is * used in the Direct Key Agreement mode. * * In Key Agreement with Key Wrapping mode, the output of the Concat KDF * MUST be a key of the length needed for the specified key wrapping * algorithm. In this case, the JWE Encrypted Key is the CEK wrapped * with the agreed-upon key. */ { /* recommended+: ECDH Ephemeral Static Key agreement Concat KDF */ LWS_GENHASH_TYPE_SHA256, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_ECDHES, LWS_JOSE_ENCTYPE_NONE, "ECDH-ES", NULL, 128, 128, 0 }, { /* recommended: ECDH-ES + Concat KDF + wrapped by AES128KW */ LWS_GENHASH_TYPE_SHA256, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_ECDHES, LWS_JOSE_ENCTYPE_AES_ECB, "ECDH-ES+A128KW", NULL, 128, 128, 0 }, { /* optional: ECDH-ES + Concat KDF + wrapped by AES192KW */ LWS_GENHASH_TYPE_SHA256, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_ECDHES, LWS_JOSE_ENCTYPE_AES_ECB, "ECDH-ES+A192KW", NULL, 192, 192, 0 }, { /* recommended: ECDH-ES + Concat KDF + wrapped by AES256KW */ LWS_GENHASH_TYPE_SHA256, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_ECDHES, LWS_JOSE_ENCTYPE_AES_ECB, "ECDH-ES+A256KW", NULL, 256, 256, 0 }, /* * Key Encryption with AES GCM * * This section defines the specifics of encrypting a JWE Content * Encryption Key (CEK) with Advanced Encryption Standard (AES) in * Galois/Counter Mode (GCM) ([AES] and [NIST.800-38D]). * * Use of an Initialization Vector (IV) of size 96 bits is REQUIRED with * this algorithm. The IV is represented in base64url-encoded form as * the "iv" (initialization vector) Header Parameter value. * * The Additional Authenticated Data value used is the empty octet * string. * * The requested size of the Authentication Tag output MUST be 128 bits, * regardless of the key size. * * The JWE Encrypted Key value is the ciphertext output. * * The Authentication Tag output is represented in base64url-encoded * form as the "tag" (authentication tag) Header Parameter value. * * * "iv" (Initialization Vector) Header Parameter * * The "iv" (initialization vector) Header Parameter value is the * base64url-encoded representation of the 96-bit IV value used for the * key encryption operation. This Header Parameter MUST be present and * MUST be understood and processed by implementations when these * algorithms are used. * * "tag" (Authentication Tag) Header Parameter * * The "tag" (authentication tag) Header Parameter value is the * base64url-encoded representation of the 128-bit Authentication Tag * value resulting from the key encryption operation. This Header * Parameter MUST be present and MUST be understood and processed by * implementations when these algorithms are used. */ { /* optional: Key wrapping with AES GCM using 128-bit key */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_AES_ECB, LWS_JOSE_ENCTYPE_NONE, "A128GCMKW", NULL, 128, 128, 96 }, { /* optional: Key wrapping with AES GCM using 192-bit key */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_AES_ECB, LWS_JOSE_ENCTYPE_NONE, "A192GCMKW", NULL, 192, 192, 96 }, { /* optional: Key wrapping with AES GCM using 256-bit key */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_AES_ECB, LWS_JOSE_ENCTYPE_NONE, "A256GCMKW", NULL, 256, 256, 96 }, /* list terminator */ { 0, 0, 0, 0, NULL, NULL, 0, 0, 0 } }; /* * The "enc" (encryption algorithm) Header Parameter identifies the * content encryption algorithm used to perform authenticated encryption * on the plaintext to produce the ciphertext and the Authentication * Tag. This algorithm MUST be an AEAD algorithm with a specified key * length. The encrypted content is not usable if the "enc" value does * not represent a supported algorithm. "enc" values should either be * registered in the IANA "JSON Web Signature and Encryption Algorithms" * registry established by [JWA] or be a value that contains a * Collision-Resistant Name. The "enc" value is a case-sensitive ASCII * string containing a StringOrURI value. This Header Parameter MUST be * present and MUST be understood and processed by implementations. */ static const struct lws_jose_jwe_alg lws_gencrypto_jwe_enc_map[] = { /* * AES_128_CBC_HMAC_SHA_256 / 512 * * It uses the HMAC message authentication code [RFC2104] with the * SHA-256 hash function [SHS] to provide message authentication, with * the HMAC output truncated to 128 bits, corresponding to the * HMAC-SHA-256-128 algorithm defined in [RFC4868]. For encryption, it * uses AES in the CBC mode of operation as defined in Section 6.2 of * [NIST.800-38A], with PKCS #7 padding and a 128-bit IV value. * * The AES_CBC_HMAC_SHA2 parameters specific to AES_128_CBC_HMAC_SHA_256 * are: * * The input key K is 32 octets long. * ENC_KEY_LEN is 16 octets. * MAC_KEY_LEN is 16 octets. * The SHA-256 hash algorithm is used for the HMAC. * The HMAC-SHA-256 output is truncated to T_LEN=16 octets, by * stripping off the final 16 octets. */ { /* required */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_SHA256, LWS_JOSE_ENCTYPE_NONE, LWS_JOSE_ENCTYPE_AES_CBC, "A128CBC-HS256", NULL, 256, 256, 128 }, /* * AES_192_CBC_HMAC_SHA_384 is based on AES_128_CBC_HMAC_SHA_256, but * with the following differences: * * The input key K is 48 octets long instead of 32. * ENC_KEY_LEN is 24 octets instead of 16. * MAC_KEY_LEN is 24 octets instead of 16. * SHA-384 is used for the HMAC instead of SHA-256. * The HMAC SHA-384 value is truncated to T_LEN=24 octets instead of 16. */ { /* required */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_SHA384, LWS_JOSE_ENCTYPE_NONE, LWS_JOSE_ENCTYPE_AES_CBC, "A192CBC-HS384", NULL, 384, 384, 192 }, /* * AES_256_CBC_HMAC_SHA_512 is based on AES_128_CBC_HMAC_SHA_256, but * with the following differences: * * The input key K is 64 octets long instead of 32. * ENC_KEY_LEN is 32 octets instead of 16. * MAC_KEY_LEN is 32 octets instead of 16. * SHA-512 is used for the HMAC instead of SHA-256. * The HMAC SHA-512 value is truncated to T_LEN=32 octets instead of 16. */ { /* required */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_SHA512, LWS_JOSE_ENCTYPE_NONE, LWS_JOSE_ENCTYPE_AES_CBC, "A256CBC-HS512", NULL, 512, 512, 256 }, /* * The CEK is used as the encryption key. * * Use of an IV of size 96 bits is REQUIRED with this algorithm. * * The requested size of the Authentication Tag output MUST be 128 bits, * regardless of the key size. */ { /* recommended: AES GCM using 128-bit key */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_NONE, LWS_JOSE_ENCTYPE_AES_GCM, "A128GCM", NULL, 128, 128, 96 }, { /* optional: AES GCM using 192-bit key */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_NONE, LWS_JOSE_ENCTYPE_AES_GCM, "A192GCM", NULL, 192, 192, 96 }, { /* recommended: AES GCM using 256-bit key */ LWS_GENHASH_TYPE_UNKNOWN, LWS_GENHMAC_TYPE_UNKNOWN, LWS_JOSE_ENCTYPE_NONE, LWS_JOSE_ENCTYPE_AES_GCM, "A256GCM", NULL, 256, 256, 96 }, { 0, 0, 0, 0, NULL, NULL, 0, 0, 0 } /* sentinel */ }; int lws_gencrypto_jws_alg_to_definition(const char *alg, const struct lws_jose_jwe_alg **jose) { const struct lws_jose_jwe_alg *a = lws_gencrypto_jws_alg_map; while (a->alg) { if (!strcmp(alg, a->alg)) { *jose = a; return 0; } a++; } return 1; } int lws_gencrypto_jwe_alg_to_definition(const char *alg, const struct lws_jose_jwe_alg **jose) { const struct lws_jose_jwe_alg *a = lws_gencrypto_jwe_alg_map; while (a->alg) { if (!strcmp(alg, a->alg)) { *jose = a; return 0; } a++; } return 1; } int lws_gencrypto_jwe_enc_to_definition(const char *enc, const struct lws_jose_jwe_alg **jose) { const struct lws_jose_jwe_alg *e = lws_gencrypto_jwe_enc_map; while (e->alg) { if (!strcmp(enc, e->alg)) { *jose = e; return 0; } e++; } return 1; } size_t lws_genhash_size(enum lws_genhash_types type) { switch(type) { case LWS_GENHASH_TYPE_UNKNOWN: return 0; case LWS_GENHASH_TYPE_MD5: return 16; case LWS_GENHASH_TYPE_SHA1: return 20; case LWS_GENHASH_TYPE_SHA256: return 32; case LWS_GENHASH_TYPE_SHA384: return 48; case LWS_GENHASH_TYPE_SHA512: return 64; } return 0; } size_t lws_genhmac_size(enum lws_genhmac_types type) { switch(type) { case LWS_GENHMAC_TYPE_UNKNOWN: return 0; case LWS_GENHMAC_TYPE_SHA256: return 32; case LWS_GENHMAC_TYPE_SHA384: return 48; case LWS_GENHMAC_TYPE_SHA512: return 64; } return 0; } int lws_gencrypto_bits_to_bytes(int bits) { if (bits & 7) return (bits / 8) + 1; return bits / 8; } int lws_base64_size(int bytes) { return ((bytes * 4) / 3) + 6; } void lws_gencrypto_destroy_elements(struct lws_gencrypto_keyelem *el, int m) { int n; for (n = 0; n < m; n++) if (el[n].buf) lws_free_set_NULL(el[n].buf); } size_t lws_gencrypto_padded_length(size_t pad_block_size, size_t len) { return (len / pad_block_size + 1) * pad_block_size; } libwebsockets-4.3.5/lib/tls/lws-genec-common.c000066400000000000000000000070631476025525100212660ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * lws_genec provides an EC abstraction api in lws that works the * same whether you are using openssl or mbedtls crypto functions underneath. */ #include "private-lib-core.h" const struct lws_ec_curves * lws_genec_curve(const struct lws_ec_curves *table, const char *name) { const struct lws_ec_curves *c = lws_ec_curves; if (table) c = table; while (c->name) { if (!strcmp(name, c->name)) return c; c++; } return NULL; } //extern const struct lws_ec_curves *lws_ec_curves; int lws_genec_confirm_curve_allowed_by_tls_id(const char *allowed, int id, struct lws_jwk *jwk) { struct lws_tokenize ts; lws_tokenize_elem e; size_t len; int n; lws_tokenize_init(&ts, allowed, LWS_TOKENIZE_F_COMMA_SEP_LIST | LWS_TOKENIZE_F_MINUS_NONTERM); ts.len = strlen(allowed); do { e = lws_tokenize(&ts); switch (e) { case LWS_TOKZE_TOKEN: n = 0; while (lws_ec_curves[n].name) { if (id != lws_ec_curves[n].tls_lib_nid) { n++; continue; } lwsl_info("match curve %s\n", lws_ec_curves[n].name); len = strlen(lws_ec_curves[n].name); jwk->e[LWS_GENCRYPTO_EC_KEYEL_CRV].len = (uint32_t)len; jwk->e[LWS_GENCRYPTO_EC_KEYEL_CRV].buf = lws_malloc(len + 1, "cert crv"); if (!jwk->e[LWS_GENCRYPTO_EC_KEYEL_CRV].buf) { lwsl_err("%s: OOM\n", __func__); return 1; } memcpy(jwk->e[LWS_GENCRYPTO_EC_KEYEL_CRV].buf, lws_ec_curves[n].name, len + 1); return 0; } break; case LWS_TOKZE_DELIMITER: break; default: /* includes ENDED */ lwsl_err("%s: malformed or curve name in list\n", __func__); return -1; } } while (e > 0); lwsl_err("%s: unsupported curve group nid %d\n", __func__, id); return -1; } void lws_genec_destroy_elements(struct lws_gencrypto_keyelem *el) { int n; for (n = 0; n < LWS_GENCRYPTO_EC_KEYEL_COUNT; n++) if (el[n].buf) lws_free_set_NULL(el[n].buf); } static const char *enames[] = { "crv", "x", "d", "y" }; int lws_genec_dump(struct lws_gencrypto_keyelem *el) { int n; (void)enames; lwsl_info(" genec %p: crv: '%s'\n", el, !!el[LWS_GENCRYPTO_EC_KEYEL_CRV].buf ? (char *)el[LWS_GENCRYPTO_EC_KEYEL_CRV].buf: "no curve name"); for (n = LWS_GENCRYPTO_EC_KEYEL_X; n < LWS_GENCRYPTO_EC_KEYEL_COUNT; n++) { lwsl_info(" e: %s\n", enames[n]); lwsl_hexdump_info(el[n].buf, el[n].len); } lwsl_info("\n"); return 0; } libwebsockets-4.3.5/lib/tls/mbedtls/000077500000000000000000000000001476025525100173745ustar00rootroot00000000000000libwebsockets-4.3.5/lib/tls/mbedtls/CMakeLists.txt000066400000000000000000000117521476025525100221420ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # # The strategy is to only export to PARENT_SCOPE # # - changes to LIB_LIST # - changes to SOURCES # - includes via include_directories # # and keep everything else private include_directories(wrapper/include wrapper/include/internal) set(LWS_WITH_SSL ON) include_directories(wrapper/include) include_directories(wrapper/include/platform) include_directories(wrapper/include/internal) include_directories(wrapper/include/openssl) if (LWS_WITH_NETWORK) list(APPEND HDR_PRIVATE tls/mbedtls/wrapper/include/internal/ssl3.h tls/mbedtls/wrapper/include/internal/ssl_cert.h tls/mbedtls/wrapper/include/internal/ssl_code.h tls/mbedtls/wrapper/include/internal/ssl_dbg.h tls/mbedtls/wrapper/include/internal/ssl_lib.h tls/mbedtls/wrapper/include/internal/ssl_methods.h tls/mbedtls/wrapper/include/internal/ssl_pkey.h tls/mbedtls/wrapper/include/internal/ssl_stack.h tls/mbedtls/wrapper/include/internal/ssl_types.h tls/mbedtls/wrapper/include/internal/ssl_x509.h tls/mbedtls/wrapper/include/internal/tls1.h tls/mbedtls/wrapper/include/internal/x509_vfy.h) list(APPEND HDR_PRIVATE tls/mbedtls/wrapper/include/openssl/ssl.h) list(APPEND HDR_PRIVATE tls/mbedtls/wrapper/include/platform/ssl_pm.h tls/mbedtls/wrapper/include/platform/ssl_port.h) list(APPEND SOURCES tls/mbedtls/wrapper/library/ssl_cert.c tls/mbedtls/wrapper/library/ssl_lib.c tls/mbedtls/wrapper/library/ssl_methods.c tls/mbedtls/wrapper/library/ssl_pkey.c tls/mbedtls/wrapper/library/ssl_stack.c tls/mbedtls/wrapper/library/ssl_x509.c) list(APPEND SOURCES tls/mbedtls/wrapper/platform/ssl_pm.c tls/mbedtls/wrapper/platform/ssl_port.c) endif() set(_WANT_MBT 0) if (NOT LWS_PLAT_FREERTOS) if (NOT DEFINED LWS_MBEDTLS_LIBRARIES) set(_WANT_MBT 1) endif() if (NOT DEFINED LWS_MBEDTLS_INCLUDE_DIRS) set(_WANT_MBT 1) endif() endif() if (_WANT_MBT) find_path(LWS_MBEDTLS_INCLUDE_DIRS mbedtls/ssl.h) find_library(MBEDTLS_LIBRARY mbedtls) find_library(MBEDX509_LIBRARY mbedx509) find_library(MBEDCRYPTO_LIBRARY mbedcrypto) set(LWS_MBEDTLS_LIBRARIES "${MBEDTLS_LIBRARY}" "${MBEDX509_LIBRARY}" "${MBEDCRYPTO_LIBRARY}") include(FindPackageHandleStandardArgs) find_package_handle_standard_args(MBEDTLS DEFAULT_MSG LWS_MBEDTLS_INCLUDE_DIRS MBEDTLS_LIBRARY MBEDX509_LIBRARY MBEDCRYPTO_LIBRARY) mark_as_advanced(LWS_MBEDTLS_INCLUDE_DIRS MBEDTLS_LIBRARY MBEDX509_LIBRARY MBEDCRYPTO_LIBRARY) if ("${LWS_MBEDTLS_LIBRARIES}" STREQUAL "" OR "${LWS_MBEDTLS_INCLUDE_DIRS}" STREQUAL "") message(FATAL_ERROR "You must set LWS_MBEDTLS_LIBRARIES and LWS_MBEDTLS_INCLUDE_DIRS when LWS_WITH_MBEDTLS is turned on.") endif() endif() if (LWS_MBEDTLS_LIBRARIES) set(MBEDTLS_LIBRARIES ${LWS_MBEDTLS_LIBRARIES}) set(MBEDTLS_LIBRARIES ${LWS_MBEDTLS_LIBRARIES} PARENT_SCOPE) endif() if (LWS_MBEDTLS_INCLUDE_DIRS) set(MBEDTLS_INCLUDE_DIRS ${LWS_MBEDTLS_INCLUDE_DIRS}) set(MBEDTLS_INCLUDE_DIRS ${LWS_MBEDTLS_INCLUDE_DIRS} PARENT_SCOPE) endif() set(USE_MBEDTLS 1 PARENT_SCOPE) if (DEFINED MBEDTLS_INCLUDE_DIRS) include_directories(${MBEDTLS_INCLUDE_DIRS}) set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${MBEDTLS_INCLUDE_DIRS}) endif() if (DEFINED MBEDTLS_LIBRARIES) list(APPEND LIB_LIST ${MBEDTLS_LIBRARIES}) endif() # old mbedtls has everything in mbedtls/net.h CHECK_C_SOURCE_COMPILES("#include \nint main(void) { return 0;}\n" LWS_HAVE_MBEDTLS_NET_SOCKETS) CHECK_C_SOURCE_COMPILES("#include \nint main(void) { return MBEDTLS_SSL_NEW_SESSION_TICKET;}\n" LWS_HAVE_MBEDTLS_SSL_NEW_SESSION_TICKET) # # Keep explicit parent scope exports at end # exports_to_parent_scope() set(LWS_HAVE_MBEDTLS_NET_SOCKETS ${LWS_HAVE_MBEDTLS_NET_SOCKETS} PARENT_SCOPE) set(LWS_HAVE_MBEDTLS_SSL_NEW_SESSION_TICKET ${LWS_HAVE_MBEDTLS_SSL_NEW_SESSION_TICKET} PARENT_SCOPE) libwebsockets-4.3.5/lib/tls/mbedtls/lws-genaes.c000066400000000000000000000267221476025525100216160ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * lws_genaes provides an abstraction api for AES in lws that works the * same whether you are using openssl or mbedtls hash functions underneath. */ #include "private-lib-core.h" #if defined(LWS_WITH_JOSE) #include "private-lib-jose.h" #endif static int operation_map[] = { MBEDTLS_AES_ENCRYPT, MBEDTLS_AES_DECRYPT }; static unsigned int _write_pkcs7_pad(uint8_t *p, int len) { unsigned int n = 0, padlen = LWS_AES_CBC_BLOCKLEN * ((unsigned int)len / LWS_AES_CBC_BLOCKLEN + 1) - (unsigned int)len; p += len; while (n++ < padlen) *p++ = (uint8_t)padlen; return padlen; } int lws_genaes_create(struct lws_genaes_ctx *ctx, enum enum_aes_operation op, enum enum_aes_modes mode, struct lws_gencrypto_keyelem *el, enum enum_aes_padding padding, void *engine) { int n = 0; ctx->mode = mode; ctx->k = el; ctx->op = (enum enum_aes_operation)operation_map[op]; ctx->underway = 0; ctx->padding = padding == LWS_GAESP_WITH_PADDING; switch (ctx->mode) { case LWS_GAESM_XTS: #if defined(MBEDTLS_CIPHER_MODE_XTS) mbedtls_aes_xts_init(&ctx->u.ctx_xts); break; #else return -1; #endif case LWS_GAESM_GCM: mbedtls_gcm_init(&ctx->u.ctx_gcm); n = mbedtls_gcm_setkey(&ctx->u.ctx_gcm, MBEDTLS_CIPHER_ID_AES, ctx->k->buf, ctx->k->len * 8); if (n) { lwsl_notice("%s: mbedtls_gcm_setkey: -0x%x\n", __func__, -n); return n; } return n; default: mbedtls_aes_init(&ctx->u.ctx); break; } switch (op) { case LWS_GAESO_ENC: if (ctx->mode == LWS_GAESM_XTS) #if defined(MBEDTLS_CIPHER_MODE_XTS) n = mbedtls_aes_xts_setkey_enc(&ctx->u.ctx_xts, ctx->k->buf, ctx->k->len * 8); #else return -1; #endif else n = mbedtls_aes_setkey_enc(&ctx->u.ctx, ctx->k->buf, ctx->k->len * 8); break; case LWS_GAESO_DEC: switch (ctx->mode) { case LWS_GAESM_XTS: #if defined(MBEDTLS_CIPHER_MODE_XTS) n = mbedtls_aes_xts_setkey_dec(&ctx->u.ctx_xts, ctx->k->buf, ctx->k->len * 8); break; #else return -1; #endif case LWS_GAESM_CFB128: case LWS_GAESM_CFB8: case LWS_GAESM_CTR: case LWS_GAESM_OFB: n = mbedtls_aes_setkey_enc(&ctx->u.ctx, ctx->k->buf, ctx->k->len * 8); break; default: n = mbedtls_aes_setkey_dec(&ctx->u.ctx, ctx->k->buf, ctx->k->len * 8); break; } break; } if (n) lwsl_notice("%s: setting key: -0x%x\n", __func__, -n); return n; } int lws_genaes_destroy(struct lws_genaes_ctx *ctx, unsigned char *tag, size_t tlen) { #if defined(MBEDTLS_VERSION_NUMBER) && MBEDTLS_VERSION_NUMBER >= 0x03000000 size_t last_len = 0; uint8_t last[16]; #endif int n; if (ctx->mode == LWS_GAESM_GCM) { #if defined(MBEDTLS_VERSION_NUMBER) && MBEDTLS_VERSION_NUMBER >= 0x03000000 n = mbedtls_gcm_finish(&ctx->u.ctx_gcm, last, sizeof(last), &last_len, tag, tlen); #else n = mbedtls_gcm_finish(&ctx->u.ctx_gcm, tag, tlen); #endif if (n) lwsl_notice("%s: mbedtls_gcm_finish: -0x%x\n", __func__, -n); if (tag && ctx->op == MBEDTLS_AES_DECRYPT && !n) { if (lws_timingsafe_bcmp(ctx->tag, tag, (unsigned int)ctx->taglen)) { lwsl_err("%s: lws_genaes_crypt tag " "mismatch (bad first)\n", __func__); lwsl_hexdump_notice(tag, tlen); lwsl_hexdump_notice(ctx->tag, (unsigned int)ctx->taglen); n = -1; } } mbedtls_gcm_free(&ctx->u.ctx_gcm); return n; } if (ctx->mode == LWS_GAESM_XTS) #if defined(MBEDTLS_CIPHER_MODE_XTS) mbedtls_aes_xts_free(&ctx->u.ctx_xts); #else return -1; #endif else mbedtls_aes_free(&ctx->u.ctx); return 0; } #if defined(LWS_HAVE_mbedtls_internal_aes_encrypt) static int lws_genaes_rfc3394_wrap(int wrap, int cek_bits, const uint8_t *kek, int kek_bits, const uint8_t *in, uint8_t *out) { int n, m, ret = -1, c64 = cek_bits / 64; mbedtls_aes_context ctx; uint8_t a[8], b[16]; /* * notice the KEK key used to perform the wrapping or unwrapping is * always the size of the AES key used, eg, A128KW == 128 bits. The * key being wrapped or unwrapped may be larger and is set by the * 'bits' parameter. * * If it's larger than the KEK key size bits, we iterate over it */ mbedtls_aes_init(&ctx); if (wrap) { /* * The inputs to the key wrapping process are the KEK and the * plaintext to be wrapped. The plaintext consists of n 64-bit * blocks, containing the key data being wrapped. * * Inputs: Plaintext, n 64-bit values {P1, P2, ..., Pn}, * and Key, K (the KEK). * Outputs: Ciphertext, (n+1) 64-bit values * {C0, C1, ..., Cn}. * * The default initial value (IV) is defined to be the * hexadecimal constant: * * A[0] = IV = A6A6A6A6A6A6A6A6 */ memset(out, 0xa6, 8); memcpy(out + 8, in, 8 * (unsigned int)c64); n = mbedtls_aes_setkey_enc(&ctx, kek, (unsigned int)kek_bits); } else { /* * 2.2.2 Key Unwrap * * The inputs to the unwrap process are the KEK and (n+1) * 64-bit blocks of ciphertext consisting of previously * wrapped key. It returns n blocks of plaintext consisting * of the n 64-bit blocks of the decrypted key data. * * Inputs: Ciphertext, (n+1) 64-bit values {C0, C1, ..., Cn}, * and Key, K (the KEK). * * Outputs: Plaintext, n 64-bit values {P1, P2, ..., Pn}. */ memcpy(a, in, 8); memcpy(out, in + 8, 8 * (unsigned int)c64); n = mbedtls_aes_setkey_dec(&ctx, kek, (unsigned int)kek_bits); } if (n < 0) { lwsl_err("%s: setkey failed\n", __func__); goto bail; } if (wrap) { for (n = 0; n <= 5; n++) { uint8_t *r = out + 8; for (m = 1; m <= c64; m++) { memcpy(b, out, 8); memcpy(b + 8, r, 8); if (mbedtls_internal_aes_encrypt(&ctx, b, b)) goto bail; memcpy(out, b, 8); out[7] ^= (uint8_t)(c64 * n + m); memcpy(r, b + 8, 8); r += 8; } } ret = 0; } else { /* * */ for (n = 5; n >= 0; n--) { uint8_t *r = out + (c64 - 1) * 8; for (m = c64; m >= 1; m--) { memcpy(b, a, 8); b[7] ^= (uint8_t)(c64 * n + m); memcpy(b + 8, r, 8); if (mbedtls_internal_aes_decrypt(&ctx, b, b)) goto bail; memcpy(a, b, 8); memcpy(r, b + 8, 8); r -= 8; } } ret = 0; for (n = 0; n < 8; n++) if (a[n] != 0xa6) ret = -1; } bail: if (ret) lwsl_notice("%s: failed\n", __func__); mbedtls_aes_free(&ctx); return ret; } #endif int lws_genaes_crypt(struct lws_genaes_ctx *ctx, const uint8_t *in, size_t len, uint8_t *out, uint8_t *iv_or_nonce_ctr_or_data_unit_16, uint8_t *stream_block_16, size_t *nc_or_iv_off, int taglen) { uint8_t iv[LWS_JWE_AES_IV_BYTES], sb[16]; int n = 0; switch (ctx->mode) { case LWS_GAESM_KW: #if defined(LWS_HAVE_mbedtls_internal_aes_encrypt) /* a key of length ctx->k->len is wrapped by a 128-bit KEK */ n = lws_genaes_rfc3394_wrap(ctx->op == MBEDTLS_AES_ENCRYPT, (ctx->op == MBEDTLS_AES_ENCRYPT ? (int)len * 8 : ((int)len - 8) * 8), ctx->k->buf, (int)ctx->k->len * 8, in, out); break; #else lwsl_err("%s: your mbedtls is too old\n", __func__); return -1; #endif case LWS_GAESM_CBC: memcpy(iv, iv_or_nonce_ctr_or_data_unit_16, 16); /* * If encrypting, we do the PKCS#7 padding. * During decryption, the caller will need to unpad. */ if (ctx->padding && ctx->op == MBEDTLS_AES_ENCRYPT) { /* * Since we don't want to burden the caller with * the over-allocation at the end of the input, * we have to allocate a temp with space for it */ uint8_t *padin = (uint8_t *)lws_malloc( lws_gencrypto_padded_length(LWS_AES_CBC_BLOCKLEN, len), __func__); if (!padin) return -1; memcpy(padin, in, len); len += _write_pkcs7_pad((uint8_t *)padin, (int)len); n = mbedtls_aes_crypt_cbc(&ctx->u.ctx, (int)ctx->op, len, iv, padin, out); lws_free(padin); } else n = mbedtls_aes_crypt_cbc(&ctx->u.ctx, (int)ctx->op, len, iv, in, out); break; case LWS_GAESM_CFB128: memcpy(iv, iv_or_nonce_ctr_or_data_unit_16, 16); n = mbedtls_aes_crypt_cfb128(&ctx->u.ctx, (int)ctx->op, len, nc_or_iv_off, iv, in, out); break; case LWS_GAESM_CFB8: memcpy(iv, iv_or_nonce_ctr_or_data_unit_16, 16); n = mbedtls_aes_crypt_cfb8(&ctx->u.ctx, (int)ctx->op, len, iv, in, out); break; case LWS_GAESM_CTR: memcpy(iv, iv_or_nonce_ctr_or_data_unit_16, 16); memcpy(sb, stream_block_16, 16); n = mbedtls_aes_crypt_ctr(&ctx->u.ctx, len, nc_or_iv_off, iv, sb, in, out); memcpy(iv_or_nonce_ctr_or_data_unit_16, iv, 16); memcpy(stream_block_16, sb, 16); break; case LWS_GAESM_ECB: n = mbedtls_aes_crypt_ecb(&ctx->u.ctx, (int)ctx->op, in, out); break; case LWS_GAESM_OFB: #if defined(MBEDTLS_CIPHER_MODE_OFB) memcpy(iv, iv_or_nonce_ctr_or_data_unit_16, 16); n = mbedtls_aes_crypt_ofb(&ctx->u.ctx, len, nc_or_iv_off, iv, in, out); break; #else return -1; #endif case LWS_GAESM_XTS: #if defined(MBEDTLS_CIPHER_MODE_XTS) memcpy(iv, iv_or_nonce_ctr_or_data_unit_16, 16); n = mbedtls_aes_crypt_xts(&ctx->u.ctx_xts, (int)ctx->op, len, iv, in, out); break; #else return -1; #endif case LWS_GAESM_GCM: if (!ctx->underway) { ctx->underway = 1; memcpy(ctx->tag, stream_block_16, (unsigned int)taglen); ctx->taglen = taglen; /* * iv: iv_or_nonce_ctr_or_data_unit_16 * iv_len: *nc_or_iv_off * stream_block_16: pointer to tag * additional data: in * additional data len: len */ #if defined(MBEDTLS_VERSION_NUMBER) && MBEDTLS_VERSION_NUMBER >= 0x03000000 n = mbedtls_gcm_starts(&ctx->u.ctx_gcm, (int)ctx->op, iv_or_nonce_ctr_or_data_unit_16, *nc_or_iv_off); if (!n) n = mbedtls_gcm_update_ad(&ctx->u.ctx_gcm, in, len); #else n = mbedtls_gcm_starts(&ctx->u.ctx_gcm, (int)ctx->op, iv_or_nonce_ctr_or_data_unit_16, *nc_or_iv_off, in, len); #endif if (n) { lwsl_notice("%s: mbedtls_gcm_starts: -0x%x\n", __func__, -n); return -1; } break; } #if defined(MBEDTLS_VERSION_NUMBER) && MBEDTLS_VERSION_NUMBER >= 0x03000000 { size_t al; n = mbedtls_gcm_update(&ctx->u.ctx_gcm, in, len, out, len, &al); } #else n = mbedtls_gcm_update(&ctx->u.ctx_gcm, len, in, out); #endif if (n) { lwsl_notice("%s: mbedtls_gcm_update: -0x%x\n", __func__, -n); return -1; } break; } if (n) { lwsl_notice("%s: failed: -0x%x, len %d\n", __func__, -n, (int)len); return -1; } return 0; } libwebsockets-4.3.5/lib/tls/mbedtls/lws-gencrypto.c000066400000000000000000000040571476025525100223630ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * lws-gencrypto openssl-specific common code */ #include "private-lib-core.h" #include "private-lib-tls-mbedtls.h" mbedtls_md_type_t lws_gencrypto_mbedtls_hash_to_MD_TYPE(enum lws_genhash_types hash_type) { mbedtls_md_type_t h = (mbedtls_md_type_t)-1; switch (hash_type) { case LWS_GENHASH_TYPE_MD5: h = MBEDTLS_MD_MD5; break; case LWS_GENHASH_TYPE_SHA1: h = MBEDTLS_MD_SHA1; break; case LWS_GENHASH_TYPE_SHA256: h = MBEDTLS_MD_SHA256; break; case LWS_GENHASH_TYPE_SHA384: h = MBEDTLS_MD_SHA384; break; case LWS_GENHASH_TYPE_SHA512: h = MBEDTLS_MD_SHA512; break; default: break; } return h; } int lws_gencrypto_mbedtls_rngf(void *context, unsigned char *buf, size_t len) { if ((size_t)lws_get_random(context, buf, len) == len) { // lwsl_hexdump_err(buf, len); return 0; } lwsl_err("%s: rng failed\n", __func__); return -1; } libwebsockets-4.3.5/lib/tls/mbedtls/lws-genec.c000066400000000000000000000341021476025525100214240ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * lws_genec provides an EC abstraction api in lws that works the * same whether you are using openssl or mbedtls crypto functions underneath. */ #include "private-lib-core.h" #include "private-lib-tls-mbedtls.h" #if defined(MBEDTLS_VERSION_NUMBER) && MBEDTLS_VERSION_NUMBER >= 0x03000000 #define ECDHCTX(_c, _ins) _c->u.ctx_ecdh->MBEDTLS_PRIVATE(ctx).\ MBEDTLS_PRIVATE(mbed_ecdh).MBEDTLS_PRIVATE(_ins) #define ECDSACTX(_c, _ins) _c->u.ctx_ecdsa->MBEDTLS_PRIVATE(_ins) #else #define ECDHCTX(_c, _ins) _c->u.ctx_ecdh->_ins #define ECDSACTX(_c, _ins) _c->u.ctx_ecdsa->_ins #endif const struct lws_ec_curves lws_ec_curves[] = { /* * These are the curves we are willing to use by default... * * The 3 recommended+ (P-256) and optional curves in RFC7518 7.6 * * Specific keys lengths from RFC8422 p20 */ { "P-256", MBEDTLS_ECP_DP_SECP256R1, 32 }, { "P-384", MBEDTLS_ECP_DP_SECP384R1, 48 }, { "P-521", MBEDTLS_ECP_DP_SECP521R1, 66 }, { NULL, 0, 0 } }; static int lws_genec_keypair_import(struct lws_genec_ctx *ctx, enum enum_lws_dh_side side, const struct lws_gencrypto_keyelem *el) { const struct lws_ec_curves *curve; mbedtls_ecp_keypair kp; int ret = -1; if (el[LWS_GENCRYPTO_EC_KEYEL_CRV].len < 4) { lwsl_notice("%s: crv '%s' (%d)\n", __func__, el[LWS_GENCRYPTO_EC_KEYEL_CRV].buf ? (char *)el[LWS_GENCRYPTO_EC_KEYEL_CRV].buf : "null", el[LWS_GENCRYPTO_EC_KEYEL_CRV].len); return -21; } curve = lws_genec_curve(ctx->curve_table, (char *)el[LWS_GENCRYPTO_EC_KEYEL_CRV].buf); if (!curve) return -22; /* * d (the private part) may be missing, otherwise it and everything * else must match the expected bignum size */ if ((el[LWS_GENCRYPTO_EC_KEYEL_D].len && el[LWS_GENCRYPTO_EC_KEYEL_D].len != curve->key_bytes) || el[LWS_GENCRYPTO_EC_KEYEL_X].len != curve->key_bytes || el[LWS_GENCRYPTO_EC_KEYEL_Y].len != curve->key_bytes) return -23; mbedtls_ecp_keypair_init(&kp); if (mbedtls_ecp_group_load(&kp.MBEDTLS_PRIVATE(grp), (mbedtls_ecp_group_id)curve->tls_lib_nid)) goto bail1; ctx->has_private = !!el[LWS_GENCRYPTO_EC_KEYEL_D].len; /* d (the private key) is directly an mpi */ if (ctx->has_private && mbedtls_mpi_read_binary(&kp.MBEDTLS_PRIVATE(d), el[LWS_GENCRYPTO_EC_KEYEL_D].buf, el[LWS_GENCRYPTO_EC_KEYEL_D].len)) goto bail1; mbedtls_ecp_set_zero(&kp.MBEDTLS_PRIVATE(Q)); if (mbedtls_mpi_read_binary(&kp.MBEDTLS_PRIVATE(Q).MBEDTLS_PRIVATE(X), el[LWS_GENCRYPTO_EC_KEYEL_X].buf, el[LWS_GENCRYPTO_EC_KEYEL_X].len)) goto bail1; if (mbedtls_mpi_read_binary(&kp.MBEDTLS_PRIVATE(Q).MBEDTLS_PRIVATE(Y), el[LWS_GENCRYPTO_EC_KEYEL_Y].buf, el[LWS_GENCRYPTO_EC_KEYEL_Y].len)) goto bail1; mbedtls_mpi_lset(&kp.MBEDTLS_PRIVATE(Q).MBEDTLS_PRIVATE(Z), 1); switch (ctx->genec_alg) { case LEGENEC_ECDH: if (mbedtls_ecdh_get_params(ctx->u.ctx_ecdh, &kp, (mbedtls_ecdh_side)side)) goto bail1; /* verify the key is consistent with the claimed curve */ if (ctx->has_private && mbedtls_ecp_check_privkey(&ECDHCTX(ctx, grp), &ECDHCTX(ctx, d))) goto bail1; if (mbedtls_ecp_check_pubkey(&ECDHCTX(ctx, grp), &ECDHCTX(ctx, Q))) goto bail1; break; case LEGENEC_ECDSA: if (mbedtls_ecdsa_from_keypair(ctx->u.ctx_ecdsa, &kp)) goto bail1; /* verify the key is consistent with the claimed curve */ if (ctx->has_private && mbedtls_ecp_check_privkey(&ECDSACTX(ctx, grp), &ECDSACTX(ctx, d))) goto bail1; if (mbedtls_ecp_check_pubkey(&ECDSACTX(ctx, grp), &ECDSACTX(ctx, Q))) goto bail1; break; default: goto bail1; } ret = 0; bail1: mbedtls_ecp_keypair_free(&kp); return ret; } int lws_genecdh_create(struct lws_genec_ctx *ctx, struct lws_context *context, const struct lws_ec_curves *curve_table) { memset(ctx, 0, sizeof(*ctx)); ctx->context = context; ctx->curve_table = curve_table; ctx->genec_alg = LEGENEC_ECDH; ctx->u.ctx_ecdh = lws_zalloc(sizeof(*ctx->u.ctx_ecdh), "genecdh"); if (!ctx->u.ctx_ecdh) return 1; mbedtls_ecdh_init(ctx->u.ctx_ecdh); return 0; } int lws_genecdsa_create(struct lws_genec_ctx *ctx, struct lws_context *context, const struct lws_ec_curves *curve_table) { memset(ctx, 0, sizeof(*ctx)); ctx->context = context; ctx->curve_table = curve_table; ctx->genec_alg = LEGENEC_ECDSA; ctx->u.ctx_ecdsa = lws_zalloc(sizeof(*ctx->u.ctx_ecdsa), "genecdsa"); if (!ctx->u.ctx_ecdsa) return 1; mbedtls_ecdsa_init(ctx->u.ctx_ecdsa); return 0; } int lws_genecdh_set_key(struct lws_genec_ctx *ctx, struct lws_gencrypto_keyelem *el, enum enum_lws_dh_side side) { if (ctx->genec_alg != LEGENEC_ECDH) return -1; return lws_genec_keypair_import(ctx, side, el); } int lws_genecdsa_set_key(struct lws_genec_ctx *ctx, const struct lws_gencrypto_keyelem *el) { if (ctx->genec_alg != LEGENEC_ECDSA) return -1; return lws_genec_keypair_import(ctx, 0, el); } void lws_genec_destroy(struct lws_genec_ctx *ctx) { switch (ctx->genec_alg) { case LEGENEC_ECDH: if (ctx->u.ctx_ecdh) { mbedtls_ecdh_free(ctx->u.ctx_ecdh); lws_free(ctx->u.ctx_ecdh); ctx->u.ctx_ecdh = NULL; } break; case LEGENEC_ECDSA: if (ctx->u.ctx_ecdsa) { mbedtls_ecdsa_free(ctx->u.ctx_ecdsa); lws_free(ctx->u.ctx_ecdsa); ctx->u.ctx_ecdsa = NULL; } break; default: break; } } int lws_genecdh_new_keypair(struct lws_genec_ctx *ctx, enum enum_lws_dh_side side, const char *curve_name, struct lws_gencrypto_keyelem *el) { const struct lws_ec_curves *curve; mbedtls_ecdsa_context ecdsa; mbedtls_ecp_keypair *kp; mbedtls_mpi *mpi[3]; int n; if (ctx->genec_alg != LEGENEC_ECDH) return -1; curve = lws_genec_curve(ctx->curve_table, curve_name); if (!curve) { lwsl_err("%s: curve '%s' not supported\n", __func__, curve_name); return -22; } mbedtls_ecdsa_init(&ecdsa); n = mbedtls_ecdsa_genkey(&ecdsa, (mbedtls_ecp_group_id)curve->tls_lib_nid, lws_gencrypto_mbedtls_rngf, ctx->context); if (n) { lwsl_err("mbedtls_ecdsa_genkey failed 0x%x\n", -n); goto bail1; } kp = (mbedtls_ecp_keypair *)&ecdsa; n = mbedtls_ecdh_get_params(ctx->u.ctx_ecdh, kp, (mbedtls_ecdh_side)side); if (n) { lwsl_err("mbedtls_ecdh_get_params failed 0x%x\n", -n); goto bail1; } /* * we need to capture the individual element BIGNUMs into * lws_gencrypto_keyelem, so they can be serialized, used in jwk etc */ mpi[0] = &kp->MBEDTLS_PRIVATE(Q).MBEDTLS_PRIVATE(X); mpi[1] = &kp->MBEDTLS_PRIVATE(d); mpi[2] = &kp->MBEDTLS_PRIVATE(Q).MBEDTLS_PRIVATE(Y); el[LWS_GENCRYPTO_EC_KEYEL_CRV].len = (uint32_t)strlen(curve_name) + 1; el[LWS_GENCRYPTO_EC_KEYEL_CRV].buf = lws_malloc(el[LWS_GENCRYPTO_EC_KEYEL_CRV].len, "ec"); if (!el[LWS_GENCRYPTO_EC_KEYEL_CRV].buf) goto bail1; strcpy((char *)el[LWS_GENCRYPTO_EC_KEYEL_CRV].buf, curve_name); for (n = LWS_GENCRYPTO_EC_KEYEL_X; n < LWS_GENCRYPTO_EC_KEYEL_COUNT; n++) { el[n].len = curve->key_bytes; el[n].buf = lws_malloc(curve->key_bytes, "ec"); if (!el[n].buf) goto bail2; if (mbedtls_mpi_write_binary(mpi[n - 1], el[n].buf, curve->key_bytes)) goto bail2; } mbedtls_ecdsa_free(&ecdsa); return 0; bail2: for (n = 0; n < LWS_GENCRYPTO_EC_KEYEL_COUNT; n++) if (el[n].buf) lws_free_set_NULL(el[n].buf); bail1: mbedtls_ecdsa_free(&ecdsa); lws_free_set_NULL(ctx->u.ctx_ecdh); return -1; } int lws_genecdsa_new_keypair(struct lws_genec_ctx *ctx, const char *curve_name, struct lws_gencrypto_keyelem *el) { const struct lws_ec_curves *curve; mbedtls_ecp_keypair *kp; mbedtls_mpi *mpi[3]; int n; if (ctx->genec_alg != LEGENEC_ECDSA) return -1; curve = lws_genec_curve(ctx->curve_table, curve_name); if (!curve) { lwsl_err("%s: curve '%s' not supported\n", __func__, curve_name); return -22; } //mbedtls_ecdsa_init(ctx->u.ctx_ecdsa); n = mbedtls_ecdsa_genkey(ctx->u.ctx_ecdsa, (mbedtls_ecp_group_id)curve->tls_lib_nid, lws_gencrypto_mbedtls_rngf, ctx->context); if (n) { lwsl_err("mbedtls_ecdsa_genkey failed 0x%x\n", -n); goto bail1; } /* * we need to capture the individual element BIGNUMs into * lws_gencrypto_keyelems, so they can be serialized, used in jwk etc */ kp = (mbedtls_ecp_keypair *)ctx->u.ctx_ecdsa; mpi[0] = &kp->MBEDTLS_PRIVATE(Q).MBEDTLS_PRIVATE(X); mpi[1] = &kp->MBEDTLS_PRIVATE(d); mpi[2] = &kp->MBEDTLS_PRIVATE(Q).MBEDTLS_PRIVATE(Y); el[LWS_GENCRYPTO_EC_KEYEL_CRV].len = (uint32_t)strlen(curve_name) + 1; el[LWS_GENCRYPTO_EC_KEYEL_CRV].buf = lws_malloc(el[LWS_GENCRYPTO_EC_KEYEL_CRV].len, "ec"); if (!el[LWS_GENCRYPTO_EC_KEYEL_CRV].buf) goto bail1; strcpy((char *)el[LWS_GENCRYPTO_EC_KEYEL_CRV].buf, curve_name); for (n = LWS_GENCRYPTO_EC_KEYEL_X; n < LWS_GENCRYPTO_EC_KEYEL_COUNT; n++) { el[n].len = curve->key_bytes; el[n].buf = lws_malloc(curve->key_bytes, "ec"); if (!el[n].buf) goto bail2; if (mbedtls_mpi_write_binary(mpi[n - 1], el[n].buf, el[n].len)) { lwsl_err("%s: mbedtls_mpi_write_binary failed\n", __func__); goto bail2; } } return 0; bail2: for (n = 0; n < LWS_GENCRYPTO_EC_KEYEL_COUNT; n++) if (el[n].buf) lws_free_set_NULL(el[n].buf); bail1: lws_free_set_NULL(ctx->u.ctx_ecdsa); return -1; } int lws_genecdsa_hash_sign_jws(struct lws_genec_ctx *ctx, const uint8_t *in, enum lws_genhash_types hash_type, int keybits, uint8_t *sig, size_t sig_len) { int n, keybytes = lws_gencrypto_bits_to_bytes(keybits); size_t hlen = lws_genhash_size(hash_type); mbedtls_mpi mpi_r, mpi_s; size_t slen = sig_len; if (ctx->genec_alg != LEGENEC_ECDSA) return -1; /* * The ECDSA P-256 SHA-256 digital signature is generated as follows: * * 1. Generate a digital signature of the JWS Signing Input using ECDSA * P-256 SHA-256 with the desired private key. The output will be * the pair (R, S), where R and S are 256-bit unsigned integers. * * 2. Turn R and S into octet sequences in big-endian order, with each * array being be 32 octets long. The octet sequence * representations MUST NOT be shortened to omit any leading zero * octets contained in the values. * * 3. Concatenate the two octet sequences in the order R and then S. * (Note that many ECDSA implementations will directly produce this * concatenation as their output.) * * 4. The resulting 64-octet sequence is the JWS Signature value. */ mbedtls_mpi_init(&mpi_r); mbedtls_mpi_init(&mpi_s); n = mbedtls_ecdsa_sign(&ECDSACTX(ctx, grp), &mpi_r, &mpi_s, &ECDSACTX(ctx, d), in, hlen, lws_gencrypto_mbedtls_rngf, ctx->context); if (n) { lwsl_err("%s: mbedtls_ecdsa_sign failed: -0x%x\n", __func__, -n); goto bail2; } if (mbedtls_mpi_write_binary(&mpi_r, sig, (unsigned int)keybytes)) goto bail2; mbedtls_mpi_free(&mpi_r); if (mbedtls_mpi_write_binary(&mpi_s, sig + keybytes, (unsigned int)keybytes)) goto bail1; mbedtls_mpi_free(&mpi_s); return (int)slen; bail2: mbedtls_mpi_free(&mpi_r); bail1: mbedtls_mpi_free(&mpi_s); return -3; } int lws_genecdsa_hash_sig_verify_jws(struct lws_genec_ctx *ctx, const uint8_t *in, enum lws_genhash_types hash_type, int keybits, const uint8_t *sig, size_t sig_len) { int n, keybytes = lws_gencrypto_bits_to_bytes(keybits); size_t hlen = lws_genhash_size(hash_type); mbedtls_mpi mpi_r, mpi_s; if (ctx->genec_alg != LEGENEC_ECDSA) return -1; if ((int)sig_len != keybytes * 2) return -1; /* * 1. The JWS Signature value MUST be a 64-octet sequence. If it is * not a 64-octet sequence, the validation has failed. * * 2. Split the 64-octet sequence into two 32-octet sequences. The * first octet sequence represents R and the second S. The values R * and S are represented as octet sequences using the Integer-to- * OctetString Conversion defined in Section 2.3.7 of SEC1 [SEC1] * (in big-endian octet order). * * 3. Submit the JWS Signing Input, R, S, and the public key (x, y) to * the ECDSA P-256 SHA-256 validator. */ mbedtls_mpi_init(&mpi_r); mbedtls_mpi_init(&mpi_s); if (mbedtls_mpi_read_binary(&mpi_r, sig, (unsigned int)keybytes)) return -1; if (mbedtls_mpi_read_binary(&mpi_s, sig + keybytes, (unsigned int)keybytes)) goto bail1; n = mbedtls_ecdsa_verify(&ECDSACTX(ctx, grp), in, hlen, &ECDSACTX(ctx, Q), &mpi_r, &mpi_s); mbedtls_mpi_free(&mpi_s); mbedtls_mpi_free(&mpi_r); if (n) { lwsl_err("%s: mbedtls_ecdsa_verify failed: -0x%x\n", __func__, -n); goto bail; } return 0; bail1: mbedtls_mpi_free(&mpi_r); bail: return -3; } int lws_genecdh_compute_shared_secret(struct lws_genec_ctx *ctx, uint8_t *ss, int *ss_len) { int n; size_t st; if (mbedtls_ecp_check_pubkey(&ECDHCTX(ctx, grp), &ECDHCTX(ctx, Q)) || mbedtls_ecp_check_pubkey(&ECDHCTX(ctx, grp), &ECDHCTX(ctx, Qp))) { lwsl_err("%s: both sides must be set up\n", __func__); return -1; } n = mbedtls_ecdh_calc_secret(ctx->u.ctx_ecdh, &st, ss, (size_t)*ss_len, lws_gencrypto_mbedtls_rngf, ctx->context); if (n) return -1; *ss_len = (int)st; return 0; } libwebsockets-4.3.5/lib/tls/mbedtls/lws-genhash.c000066400000000000000000000176031476025525100217670ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * lws_genhash provides a hash / hmac abstraction api in lws that works the * same whether you are using openssl or mbedtls hash functions underneath. */ #include "libwebsockets.h" #include #if defined(MBEDTLS_VERSION_NUMBER) && (MBEDTLS_VERSION_NUMBER >= 0x03000000) #define mbedtls_md5_starts_ret mbedtls_md5_starts #define mbedtls_md5_update_ret mbedtls_md5_update #define mbedtls_md5_finish_ret mbedtls_md5_finish #define mbedtls_sha1_finish_ret mbedtls_sha1_finish #define mbedtls_sha1_update_ret mbedtls_sha1_update #define mbedtls_sha1_starts_ret mbedtls_sha1_starts #define mbedtls_sha256_starts_ret mbedtls_sha256_starts #define mbedtls_sha256_update_ret mbedtls_sha256_update #define mbedtls_sha256_finish_ret mbedtls_sha256_finish #define mbedtls_sha512_starts_ret mbedtls_sha512_starts #define mbedtls_sha512_update_ret mbedtls_sha512_update #define mbedtls_sha512_finish_ret mbedtls_sha512_finish #endif #if defined(MBEDTLS_VERSION_NUMBER) && (MBEDTLS_VERSION_NUMBER >= 0x02070000) /* * We have the _ret variants available, check the return codes on everything */ int lws_genhash_init(struct lws_genhash_ctx *ctx, enum lws_genhash_types type) { ctx->type = (uint8_t)type; switch (ctx->type) { case LWS_GENHASH_TYPE_MD5: mbedtls_md5_init(&ctx->u.md5); if (mbedtls_md5_starts_ret(&ctx->u.md5)) return 1; break; case LWS_GENHASH_TYPE_SHA1: mbedtls_sha1_init(&ctx->u.sha1); if (mbedtls_sha1_starts_ret(&ctx->u.sha1)) return 1; break; case LWS_GENHASH_TYPE_SHA256: mbedtls_sha256_init(&ctx->u.sha256); if (mbedtls_sha256_starts_ret(&ctx->u.sha256, 0)) return 1; break; case LWS_GENHASH_TYPE_SHA384: mbedtls_sha512_init(&ctx->u.sha512); if (mbedtls_sha512_starts_ret(&ctx->u.sha512, 1 /* is384 */)) return 1; break; case LWS_GENHASH_TYPE_SHA512: mbedtls_sha512_init(&ctx->u.sha512); if (mbedtls_sha512_starts_ret(&ctx->u.sha512, 0)) return 1; break; default: return 1; } return 0; } int lws_genhash_update(struct lws_genhash_ctx *ctx, const void *in, size_t len) { if (!len) return 0; switch (ctx->type) { case LWS_GENHASH_TYPE_MD5: if (mbedtls_md5_update_ret(&ctx->u.md5, in, len)) return 1; break; case LWS_GENHASH_TYPE_SHA1: if (mbedtls_sha1_update_ret(&ctx->u.sha1, in, len)) return 1; break; case LWS_GENHASH_TYPE_SHA256: if (mbedtls_sha256_update_ret(&ctx->u.sha256, in, len)) return 1; break; case LWS_GENHASH_TYPE_SHA384: if (mbedtls_sha512_update_ret(&ctx->u.sha512, in, len)) return 1; break; case LWS_GENHASH_TYPE_SHA512: if (mbedtls_sha512_update_ret(&ctx->u.sha512, in, len)) return 1; break; } return 0; } int lws_genhash_destroy(struct lws_genhash_ctx *ctx, void *result) { switch (ctx->type) { case LWS_GENHASH_TYPE_MD5: if (mbedtls_md5_finish_ret(&ctx->u.md5, result)) return 1; mbedtls_md5_free(&ctx->u.md5); break; case LWS_GENHASH_TYPE_SHA1: if (mbedtls_sha1_finish_ret(&ctx->u.sha1, result)) return 1; mbedtls_sha1_free(&ctx->u.sha1); break; case LWS_GENHASH_TYPE_SHA256: if (mbedtls_sha256_finish_ret(&ctx->u.sha256, result)) return 1; mbedtls_sha256_free(&ctx->u.sha256); break; case LWS_GENHASH_TYPE_SHA384: if (mbedtls_sha512_finish_ret(&ctx->u.sha512, result)) return 1; mbedtls_sha512_free(&ctx->u.sha512); break; case LWS_GENHASH_TYPE_SHA512: if (mbedtls_sha512_finish_ret(&ctx->u.sha512, result)) return 1; mbedtls_sha512_free(&ctx->u.sha512); break; } return 0; } #else /* * mbedtls is too old to have the _ret variants */ int lws_genhash_init(struct lws_genhash_ctx *ctx, enum lws_genhash_types type) { ctx->type = type; switch (ctx->type) { case LWS_GENHASH_TYPE_MD5: mbedtls_md5_init(&ctx->u.md5); mbedtls_md5_starts(&ctx->u.md5); break; case LWS_GENHASH_TYPE_SHA1: mbedtls_sha1_init(&ctx->u.sha1); mbedtls_sha1_starts(&ctx->u.sha1); break; case LWS_GENHASH_TYPE_SHA256: mbedtls_sha256_init(&ctx->u.sha256); mbedtls_sha256_starts(&ctx->u.sha256, 0); break; case LWS_GENHASH_TYPE_SHA384: mbedtls_sha512_init(&ctx->u.sha512); mbedtls_sha512_starts(&ctx->u.sha512, 1 /* is384 */); break; case LWS_GENHASH_TYPE_SHA512: mbedtls_sha512_init(&ctx->u.sha512); mbedtls_sha512_starts(&ctx->u.sha512, 0); break; default: return 1; } return 0; } int lws_genhash_update(struct lws_genhash_ctx *ctx, const void *in, size_t len) { if (!len) return 0; switch (ctx->type) { case LWS_GENHASH_TYPE_MD5: mbedtls_md5_update(&ctx->u.md5, in, len); break; case LWS_GENHASH_TYPE_SHA1: mbedtls_sha1_update(&ctx->u.sha1, in, len); break; case LWS_GENHASH_TYPE_SHA256: mbedtls_sha256_update(&ctx->u.sha256, in, len); break; case LWS_GENHASH_TYPE_SHA384: mbedtls_sha512_update(&ctx->u.sha512, in, len); break; case LWS_GENHASH_TYPE_SHA512: mbedtls_sha512_update(&ctx->u.sha512, in, len); break; } return 0; } int lws_genhash_destroy(struct lws_genhash_ctx *ctx, void *result) { switch (ctx->type) { case LWS_GENHASH_TYPE_MD5: mbedtls_md5_finish(&ctx->u.md5, result); mbedtls_md5_free(&ctx->u.md5); break; case LWS_GENHASH_TYPE_SHA1: mbedtls_sha1_finish(&ctx->u.sha1, result); mbedtls_sha1_free(&ctx->u.sha1); break; case LWS_GENHASH_TYPE_SHA256: mbedtls_sha256_finish(&ctx->u.sha256, result); mbedtls_sha256_free(&ctx->u.sha256); break; case LWS_GENHASH_TYPE_SHA384: mbedtls_sha512_finish(&ctx->u.sha512, result); mbedtls_sha512_free(&ctx->u.sha512); break; case LWS_GENHASH_TYPE_SHA512: mbedtls_sha512_finish(&ctx->u.sha512, result); mbedtls_sha512_free(&ctx->u.sha512); break; } return 0; } #endif int lws_genhmac_init(struct lws_genhmac_ctx *ctx, enum lws_genhmac_types type, const uint8_t *key, size_t key_len) { int t; ctx->type = (uint8_t)type; switch (type) { case LWS_GENHMAC_TYPE_SHA256: t = MBEDTLS_MD_SHA256; break; case LWS_GENHMAC_TYPE_SHA384: t = MBEDTLS_MD_SHA384; break; case LWS_GENHMAC_TYPE_SHA512: t = MBEDTLS_MD_SHA512; break; default: return -1; } ctx->hmac = mbedtls_md_info_from_type((mbedtls_md_type_t)t); if (!ctx->hmac) return -1; #if !defined(LWS_HAVE_mbedtls_md_setup) if (mbedtls_md_init_ctx(&ctx->ctx, ctx->hmac)) return -1; #else if (mbedtls_md_setup(&ctx->ctx, ctx->hmac, 1)) return -1; #endif if (mbedtls_md_hmac_starts(&ctx->ctx, key, key_len)) { mbedtls_md_free(&ctx->ctx); ctx->hmac = NULL; return -1; } return 0; } int lws_genhmac_update(struct lws_genhmac_ctx *ctx, const void *in, size_t len) { if (!len) return 0; if (mbedtls_md_hmac_update(&ctx->ctx, in, len)) return -1; return 0; } int lws_genhmac_destroy(struct lws_genhmac_ctx *ctx, void *result) { int n = 0; if (result) n = mbedtls_md_hmac_finish(&ctx->ctx, result); mbedtls_md_free(&ctx->ctx); ctx->hmac = NULL; if (n) return -1; return 0; } libwebsockets-4.3.5/lib/tls/mbedtls/lws-genrsa.c000066400000000000000000000324201476025525100216230ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * lws_genrsa provides an RSA abstraction api in lws that works the * same whether you are using openssl or mbedtls crypto functions underneath. */ #include "private-lib-core.h" #include "private-lib-tls-mbedtls.h" #include void lws_genrsa_destroy_elements(struct lws_gencrypto_keyelem *el) { int n; for (n = 0; n < LWS_GENCRYPTO_RSA_KEYEL_COUNT; n++) if (el[n].buf) lws_free_set_NULL(el[n].buf); } static int mode_map[] = { MBEDTLS_RSA_PKCS_V15, MBEDTLS_RSA_PKCS_V21 }; int lws_genrsa_create(struct lws_genrsa_ctx *ctx, const struct lws_gencrypto_keyelem *el, struct lws_context *context, enum enum_genrsa_mode mode, enum lws_genhash_types oaep_hashid) { memset(ctx, 0, sizeof(*ctx)); ctx->ctx = lws_zalloc(sizeof(*ctx->ctx), "genrsa"); if (!ctx->ctx) return 1; ctx->context = context; ctx->mode = mode; if (mode >= LGRSAM_COUNT) return -1; #if !defined(MBEDTLS_VERSION_NUMBER) || MBEDTLS_VERSION_NUMBER < 0x03000000 mbedtls_rsa_init(ctx->ctx, mode_map[mode], 0); #else mbedtls_rsa_init(ctx->ctx); mbedtls_rsa_set_padding(ctx->ctx, mode_map[mode], 0); #endif ctx->ctx->MBEDTLS_PRIVATE(padding) = mode_map[mode]; ctx->ctx->MBEDTLS_PRIVATE(hash_id) = (int)lws_gencrypto_mbedtls_hash_to_MD_TYPE(oaep_hashid); { int n; mbedtls_mpi *mpi[LWS_GENCRYPTO_RSA_KEYEL_COUNT] = { &ctx->ctx->MBEDTLS_PRIVATE(E), &ctx->ctx->MBEDTLS_PRIVATE(N), &ctx->ctx->MBEDTLS_PRIVATE(D), &ctx->ctx->MBEDTLS_PRIVATE(P), &ctx->ctx->MBEDTLS_PRIVATE(Q), &ctx->ctx->MBEDTLS_PRIVATE(DP), &ctx->ctx->MBEDTLS_PRIVATE(DQ), &ctx->ctx->MBEDTLS_PRIVATE(QP), }; for (n = 0; n < LWS_GENCRYPTO_RSA_KEYEL_COUNT; n++) if (el[n].buf && mbedtls_mpi_read_binary(mpi[n], el[n].buf, el[n].len)) { lwsl_notice("mpi load failed\n"); lws_free_set_NULL(ctx->ctx); return -1; } /* mbedtls... compute missing P & Q */ if ( el[LWS_GENCRYPTO_RSA_KEYEL_D].len && !el[LWS_GENCRYPTO_RSA_KEYEL_P].len && !el[LWS_GENCRYPTO_RSA_KEYEL_Q].len) { #if defined(LWS_HAVE_mbedtls_rsa_complete) if (mbedtls_rsa_complete(ctx->ctx)) { lwsl_notice("mbedtls_rsa_complete failed\n"); #else { lwsl_notice("%s: you have to provide P and Q\n", __func__); #endif lws_free_set_NULL(ctx->ctx); return -1; } } } ctx->ctx->MBEDTLS_PRIVATE(len) = el[LWS_GENCRYPTO_RSA_KEYEL_N].len; return 0; } static int _rngf(void *context, unsigned char *buf, size_t len) { if ((size_t)lws_get_random(context, buf, len) == len) return 0; return -1; } int lws_genrsa_new_keypair(struct lws_context *context, struct lws_genrsa_ctx *ctx, enum enum_genrsa_mode mode, struct lws_gencrypto_keyelem *el, int bits) { int n; memset(ctx, 0, sizeof(*ctx)); ctx->ctx = lws_zalloc(sizeof(*ctx->ctx), "genrsa"); if (!ctx->ctx) return -1; ctx->context = context; ctx->mode = mode; if (mode >= LGRSAM_COUNT) return -1; #if !defined(MBEDTLS_VERSION_NUMBER) || MBEDTLS_VERSION_NUMBER < 0x03000000 mbedtls_rsa_init(ctx->ctx, mode_map[mode], 0); #else mbedtls_rsa_init(ctx->ctx); mbedtls_rsa_set_padding(ctx->ctx, mode_map[mode], 0); #endif n = mbedtls_rsa_gen_key(ctx->ctx, _rngf, context, (unsigned int)bits, 65537); if (n) { lwsl_err("mbedtls_rsa_gen_key failed 0x%x\n", -n); goto cleanup_1; } { mbedtls_mpi *mpi[LWS_GENCRYPTO_RSA_KEYEL_COUNT] = { &ctx->ctx->MBEDTLS_PRIVATE(E), &ctx->ctx->MBEDTLS_PRIVATE(N), &ctx->ctx->MBEDTLS_PRIVATE(D), &ctx->ctx->MBEDTLS_PRIVATE(P), &ctx->ctx->MBEDTLS_PRIVATE(Q), &ctx->ctx->MBEDTLS_PRIVATE(DP), &ctx->ctx->MBEDTLS_PRIVATE(DQ), &ctx->ctx->MBEDTLS_PRIVATE(QP), }; for (n = 0; n < LWS_GENCRYPTO_RSA_KEYEL_COUNT; n++) if (mpi[n] && mbedtls_mpi_size(mpi[n])) { el[n].buf = lws_malloc( mbedtls_mpi_size(mpi[n]), "genrsakey"); if (!el[n].buf) goto cleanup; el[n].len = (uint32_t)mbedtls_mpi_size(mpi[n]); if (mbedtls_mpi_write_binary(mpi[n], el[n].buf, el[n].len)) goto cleanup; } } return 0; cleanup: for (n = 0; n < LWS_GENCRYPTO_RSA_KEYEL_COUNT; n++) if (el[n].buf) lws_free_set_NULL(el[n].buf); cleanup_1: lws_free(ctx->ctx); return -1; } int lws_genrsa_public_decrypt(struct lws_genrsa_ctx *ctx, const uint8_t *in, size_t in_len, uint8_t *out, size_t out_max) { size_t olen = 0; int n; ctx->ctx->MBEDTLS_PRIVATE(len) = in_len; #if defined(LWS_HAVE_mbedtls_rsa_complete) mbedtls_rsa_complete(ctx->ctx); #endif switch(ctx->mode) { case LGRSAM_PKCS1_1_5: n = mbedtls_rsa_rsaes_pkcs1_v15_decrypt(ctx->ctx, _rngf, ctx->context, #if !defined(MBEDTLS_VERSION_NUMBER) || MBEDTLS_VERSION_NUMBER < 0x03000000 MBEDTLS_RSA_PUBLIC, #endif &olen, in, out, out_max); break; case LGRSAM_PKCS1_OAEP_PSS: n = mbedtls_rsa_rsaes_oaep_decrypt(ctx->ctx, _rngf, ctx->context, #if !defined(MBEDTLS_VERSION_NUMBER) || MBEDTLS_VERSION_NUMBER < 0x03000000 MBEDTLS_RSA_PUBLIC, #endif NULL, 0, &olen, in, out, out_max); break; default: return -1; } if (n) { lwsl_notice("%s: -0x%x\n", __func__, -n); return -1; } return (int)olen; } int lws_genrsa_private_decrypt(struct lws_genrsa_ctx *ctx, const uint8_t *in, size_t in_len, uint8_t *out, size_t out_max) { size_t olen = 0; int n; ctx->ctx->MBEDTLS_PRIVATE(len) = in_len; #if defined(LWS_HAVE_mbedtls_rsa_complete) mbedtls_rsa_complete(ctx->ctx); #endif switch(ctx->mode) { case LGRSAM_PKCS1_1_5: n = mbedtls_rsa_rsaes_pkcs1_v15_decrypt(ctx->ctx, _rngf, ctx->context, #if !defined(MBEDTLS_VERSION_NUMBER) || MBEDTLS_VERSION_NUMBER < 0x03000000 MBEDTLS_RSA_PRIVATE, #endif &olen, in, out, out_max); break; case LGRSAM_PKCS1_OAEP_PSS: n = mbedtls_rsa_rsaes_oaep_decrypt(ctx->ctx, _rngf, ctx->context, #if !defined(MBEDTLS_VERSION_NUMBER) || MBEDTLS_VERSION_NUMBER < 0x03000000 MBEDTLS_RSA_PRIVATE, #endif NULL, 0, &olen, in, out, out_max); break; default: return -1; } if (n) { lwsl_notice("%s: -0x%x\n", __func__, -n); return -1; } return (int)olen; } int lws_genrsa_public_encrypt(struct lws_genrsa_ctx *ctx, const uint8_t *in, size_t in_len, uint8_t *out) { int n; #if defined(LWS_HAVE_mbedtls_rsa_complete) mbedtls_rsa_complete(ctx->ctx); #endif switch(ctx->mode) { case LGRSAM_PKCS1_1_5: n = mbedtls_rsa_rsaes_pkcs1_v15_encrypt(ctx->ctx, _rngf, ctx->context, #if !defined(MBEDTLS_VERSION_NUMBER) || MBEDTLS_VERSION_NUMBER < 0x03000000 MBEDTLS_RSA_PUBLIC, #endif in_len, in, out); break; case LGRSAM_PKCS1_OAEP_PSS: n = mbedtls_rsa_rsaes_oaep_encrypt(ctx->ctx, _rngf, ctx->context, #if !defined(MBEDTLS_VERSION_NUMBER) || MBEDTLS_VERSION_NUMBER < 0x03000000 MBEDTLS_RSA_PUBLIC, #endif NULL, 0, in_len, in, out); break; default: return -1; } if (n < 0) { lwsl_notice("%s: -0x%x: in_len: %d\n", __func__, -n, (int)in_len); return -1; } return (int)mbedtls_mpi_size(&ctx->ctx->MBEDTLS_PRIVATE(N)); } int lws_genrsa_private_encrypt(struct lws_genrsa_ctx *ctx, const uint8_t *in, size_t in_len, uint8_t *out) { int n; #if defined(LWS_HAVE_mbedtls_rsa_complete) mbedtls_rsa_complete(ctx->ctx); #endif switch(ctx->mode) { case LGRSAM_PKCS1_1_5: n = mbedtls_rsa_rsaes_pkcs1_v15_encrypt(ctx->ctx, _rngf, ctx->context, #if !defined(MBEDTLS_VERSION_NUMBER) || MBEDTLS_VERSION_NUMBER < 0x03000000 MBEDTLS_RSA_PRIVATE, #endif in_len, in, out); break; case LGRSAM_PKCS1_OAEP_PSS: n = mbedtls_rsa_rsaes_oaep_encrypt(ctx->ctx, _rngf, ctx->context, #if !defined(MBEDTLS_VERSION_NUMBER) || MBEDTLS_VERSION_NUMBER < 0x03000000 MBEDTLS_RSA_PRIVATE, #endif NULL, 0, in_len, in, out); break; default: return -1; } if (n) { lwsl_notice("%s: -0x%x: in_len: %d\n", __func__, -n, (int)in_len); return -1; } return (int)mbedtls_mpi_size(&ctx->ctx->MBEDTLS_PRIVATE(N)); } int lws_genrsa_hash_sig_verify(struct lws_genrsa_ctx *ctx, const uint8_t *in, enum lws_genhash_types hash_type, const uint8_t *sig, size_t sig_len) { int n, h = (int)lws_gencrypto_mbedtls_hash_to_MD_TYPE(hash_type); if (h < 0) return -1; #if defined(LWS_HAVE_mbedtls_rsa_complete) mbedtls_rsa_complete(ctx->ctx); #endif switch(ctx->mode) { case LGRSAM_PKCS1_1_5: n = mbedtls_rsa_rsassa_pkcs1_v15_verify(ctx->ctx, #if !defined(MBEDTLS_VERSION_NUMBER) || MBEDTLS_VERSION_NUMBER < 0x03000000 NULL, NULL, MBEDTLS_RSA_PUBLIC, #endif (mbedtls_md_type_t)h, (unsigned int)lws_genhash_size(hash_type), in, sig); break; case LGRSAM_PKCS1_OAEP_PSS: n = mbedtls_rsa_rsassa_pss_verify(ctx->ctx, #if !defined(MBEDTLS_VERSION_NUMBER) || MBEDTLS_VERSION_NUMBER < 0x03000000 NULL, NULL, MBEDTLS_RSA_PUBLIC, #endif (mbedtls_md_type_t)h, (unsigned int)lws_genhash_size(hash_type), in, sig); break; default: return -1; } if (n < 0) { lwsl_notice("%s: (mode %d) -0x%x\n", __func__, ctx->mode, -n); return -1; } return n; } int lws_genrsa_hash_sign(struct lws_genrsa_ctx *ctx, const uint8_t *in, enum lws_genhash_types hash_type, uint8_t *sig, size_t sig_len) { int n, h = (int)lws_gencrypto_mbedtls_hash_to_MD_TYPE(hash_type); if (h < 0) return -1; #if defined(LWS_HAVE_mbedtls_rsa_complete) mbedtls_rsa_complete(ctx->ctx); #endif /* * The "sig" buffer must be as large as the size of ctx->N * (eg. 128 bytes if RSA-1024 is used). */ if (sig_len < ctx->ctx->MBEDTLS_PRIVATE(len)) return -1; switch(ctx->mode) { case LGRSAM_PKCS1_1_5: n = mbedtls_rsa_rsassa_pkcs1_v15_sign(ctx->ctx, mbedtls_ctr_drbg_random, &ctx->context->mcdc, #if !defined(MBEDTLS_VERSION_NUMBER) || MBEDTLS_VERSION_NUMBER < 0x03000000 MBEDTLS_RSA_PRIVATE, #endif (mbedtls_md_type_t)h, (unsigned int)lws_genhash_size(hash_type), in, sig); break; case LGRSAM_PKCS1_OAEP_PSS: n = mbedtls_rsa_rsassa_pss_sign(ctx->ctx, mbedtls_ctr_drbg_random, &ctx->context->mcdc, #if !defined(MBEDTLS_VERSION_NUMBER) || MBEDTLS_VERSION_NUMBER < 0x03000000 MBEDTLS_RSA_PRIVATE, #endif (mbedtls_md_type_t)h, (unsigned int)lws_genhash_size(hash_type), in, sig); break; default: return -1; } if (n < 0) { lwsl_notice("%s: -0x%x\n", __func__, -n); return -1; } return (int)ctx->ctx->MBEDTLS_PRIVATE(len); } int lws_genrsa_render_pkey_asn1(struct lws_genrsa_ctx *ctx, int _private, uint8_t *pkey_asn1, size_t pkey_asn1_len) { uint8_t *p = pkey_asn1, *totlen, *end = pkey_asn1 + pkey_asn1_len - 1; mbedtls_mpi *mpi[LWS_GENCRYPTO_RSA_KEYEL_COUNT] = { &ctx->ctx->MBEDTLS_PRIVATE(N), &ctx->ctx->MBEDTLS_PRIVATE(E), &ctx->ctx->MBEDTLS_PRIVATE(D), &ctx->ctx->MBEDTLS_PRIVATE(P), &ctx->ctx->MBEDTLS_PRIVATE(Q), &ctx->ctx->MBEDTLS_PRIVATE(DP), &ctx->ctx->MBEDTLS_PRIVATE(DQ), &ctx->ctx->MBEDTLS_PRIVATE(QP), }; int n; /* 30 82 - sequence * 09 29 <-- length(0x0929) less 4 bytes * 02 01 <- length (1) * 00 * 02 82 * 02 01 <- length (513) N * ... * * 02 03 <- length (3) E * 01 00 01 * * 02 82 * 02 00 <- length (512) D P Q EXP1 EXP2 COEFF * * */ *p++ = 0x30; *p++ = 0x82; totlen = p; p += 2; *p++ = 0x02; *p++ = 0x01; *p++ = 0x00; for (n = 0; n < LWS_GENCRYPTO_RSA_KEYEL_COUNT; n++) { int m = (int)mbedtls_mpi_size(mpi[n]); uint8_t *elen; *p++ = 0x02; elen = p; if (m < 0x7f) *p++ = (uint8_t)m; else { *p++ = 0x82; *p++ = (uint8_t)(m >> 8); *p++ = (uint8_t)(m & 0xff); } if (p + m > end) return -1; if (mbedtls_mpi_write_binary(mpi[n], p, (unsigned int)m)) return -1; if (p[0] & 0x80) { p[0] = 0x00; if (mbedtls_mpi_write_binary(mpi[n], &p[1], (unsigned int)m)) return -1; m++; } if (m < 0x7f) *elen = (uint8_t)m; else { *elen++ = 0x82; *elen++ = (uint8_t)(m >> 8); *elen = (uint8_t)(m & 0xff); } p += m; } n = lws_ptr_diff(p, pkey_asn1); *totlen++ = (uint8_t)((n - 4) >> 8); *totlen = (uint8_t)((n - 4) & 0xff); return n; } void lws_genrsa_destroy(struct lws_genrsa_ctx *ctx) { if (!ctx->ctx) return; mbedtls_rsa_free(ctx->ctx); lws_free(ctx->ctx); ctx->ctx = NULL; } libwebsockets-4.3.5/lib/tls/mbedtls/mbedtls-client.c000066400000000000000000000344231476025525100224540ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "private-lib-tls-mbedtls.h" #if defined(LWS_WITH_TLS_JIT_TRUST) /* * We get called for each peer certificate that was provided in turn. * * Our job is just to collect the AKID and SKIDs into ssl->kid_chain, and walk * later at verification result time if it failed. * * None of these should be trusted, even if a misconfigured server sends us * his root CA. */ static int lws_mbedtls_client_verify_callback(SSL *ssl, mbedtls_x509_crt *x509) { union lws_tls_cert_info_results ci; /* we reached the max we can hold? */ if (ssl->kid_chain.count == LWS_ARRAY_SIZE(ssl->kid_chain.akid)) return 0; /* if not, stash the SKID and AKID into the next kid slot */ if (!lws_tls_mbedtls_cert_info(x509, LWS_TLS_CERT_INFO_SUBJECT_KEY_ID, &ci, 0)) lws_tls_kid_copy(&ci, &ssl->kid_chain.skid[ssl->kid_chain.count]); if (!lws_tls_mbedtls_cert_info(x509, LWS_TLS_CERT_INFO_AUTHORITY_KEY_ID, &ci, 0)) lws_tls_kid_copy(&ci, &ssl->kid_chain.akid[ssl->kid_chain.count]); ssl->kid_chain.count++; // lwsl_notice("%s: %u\n", __func__, ssl->kid_chain.count); return 0; } #endif int lws_ssl_client_bio_create(struct lws *wsi) { char hostname[128], *p; const char *alpn_comma = wsi->a.context->tls.alpn_default; struct alpn_ctx protos; int fl = SSL_VERIFY_PEER; if (wsi->stash) lws_strncpy(hostname, wsi->stash->cis[CIS_HOST], sizeof(hostname)); else if (lws_hdr_copy(wsi, hostname, sizeof(hostname), _WSI_TOKEN_CLIENT_HOST) <= 0) { lwsl_err("%s: Unable to get hostname\n", __func__); return -1; } /* * remove any :port part on the hostname... necessary for network * connection but typical certificates do not contain it */ p = hostname; while (*p) { if (*p == ':') { *p = '\0'; break; } p++; } wsi->tls.ssl = SSL_new(wsi->a.vhost->tls.ssl_client_ctx); if (!wsi->tls.ssl) { lwsl_info("%s: SSL_new() failed\n", __func__); return -1; } #if defined(LWS_WITH_TLS_SESSIONS) if (!(wsi->a.vhost->options & LWS_SERVER_OPTION_DISABLE_TLS_SESSION_CACHE)) lws_tls_reuse_session(wsi); #endif if (wsi->a.vhost->tls.ssl_info_event_mask) SSL_set_info_callback(wsi->tls.ssl, lws_ssl_info_callback); if (!(wsi->tls.use_ssl & LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK)) { X509_VERIFY_PARAM *param = SSL_get0_param(wsi->tls.ssl); /* Enable automatic hostname checks */ // X509_VERIFY_PARAM_set_hostflags(param, // X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS); lwsl_info("%s: setting hostname %s\n", __func__, hostname); if (X509_VERIFY_PARAM_set1_host(param, hostname, 0) != 1) return -1; } if (wsi->a.vhost->tls.alpn) alpn_comma = wsi->a.vhost->tls.alpn; if (wsi->stash) { lws_strncpy(hostname, wsi->stash->cis[CIS_HOST], sizeof(hostname)); if (wsi->stash->cis[CIS_ALPN]) alpn_comma = wsi->stash->cis[CIS_ALPN]; } else { if (lws_hdr_copy(wsi, hostname, sizeof(hostname), _WSI_TOKEN_CLIENT_ALPN) > 0) alpn_comma = hostname; } protos.len = (uint8_t)lws_alpn_comma_to_openssl(alpn_comma, protos.data, sizeof(protos.data) - 1); lwsl_info("%s: %s: client conn sending ALPN list '%s' (protos.len %d)\n", __func__, lws_wsi_tag(wsi), alpn_comma, protos.len); /* with mbedtls, protos is not pointed to after exit from this call */ SSL_set_alpn_select_cb(wsi->tls.ssl, &protos); if (wsi->flags & LCCSCF_ALLOW_SELFSIGNED) { lwsl_notice("%s: allowing selfsigned\n", __func__); fl = SSL_VERIFY_FAIL_IF_NO_PEER_CERT; } if (wsi->flags & LCCSCF_ALLOW_INSECURE) fl = SSL_VERIFY_NONE; /* * use server name indication (SNI), if supported, * when establishing connection */ #if defined(LWS_WITH_TLS_JIT_TRUST) SSL_set_verify(wsi->tls.ssl, SSL_VERIFY_PEER, lws_mbedtls_client_verify_callback); (void)fl; #else SSL_set_verify(wsi->tls.ssl, fl, NULL); #endif SSL_set_fd(wsi->tls.ssl, (int)wsi->desc.sockfd); if (wsi->sys_tls_client_cert) { lws_system_blob_t *b = lws_system_get_blob(wsi->a.context, LWS_SYSBLOB_TYPE_CLIENT_CERT_DER, wsi->sys_tls_client_cert - 1); const uint8_t *pem_data = NULL; uint8_t *data = NULL; lws_filepos_t flen; size_t size; int err = 0; if (!b) goto no_client_cert; /* * Set up the per-connection client cert */ size = lws_system_blob_get_size(b); if (!size) goto no_client_cert; if (lws_system_blob_get_single_ptr(b, &pem_data)) goto no_client_cert; if (lws_tls_alloc_pem_to_der_file(wsi->a.context, NULL, (const char *)pem_data, size, &data, &flen)) goto no_client_cert; size = (size_t) flen; err = SSL_use_certificate_ASN1(wsi->tls.ssl, data, (int)size); lws_free_set_NULL(data); if (err != 1) goto no_client_cert; b = lws_system_get_blob(wsi->a.context, LWS_SYSBLOB_TYPE_CLIENT_KEY_DER, wsi->sys_tls_client_cert - 1); if (!b) goto no_client_cert; size = lws_system_blob_get_size(b); if (!size) goto no_client_cert; if (lws_system_blob_get_single_ptr(b, &pem_data)) goto no_client_cert; if (lws_tls_alloc_pem_to_der_file(wsi->a.context, NULL, (const char *)pem_data, size, &data, &flen)) goto no_client_cert; size = (size_t) flen; err = SSL_use_PrivateKey_ASN1(0, wsi->tls.ssl, data, (int)size); lws_free_set_NULL(data); if (err != 1) goto no_client_cert; /* no wrapper api for check key */ lwsl_notice("%s: set system client cert %u\n", __func__, wsi->sys_tls_client_cert - 1); } return 0; no_client_cert: lwsl_err("%s: unable to set up system client cert %d\n", __func__, wsi->sys_tls_client_cert - 1); return 1; } int ERR_get_error(void) { return 0; } enum lws_ssl_capable_status lws_tls_client_connect(struct lws *wsi, char *errbuf, size_t elen) { int m, n = SSL_connect(wsi->tls.ssl), en; if (n == 1) { lws_tls_server_conn_alpn(wsi); #if defined(LWS_WITH_TLS_SESSIONS) lws_tls_session_new_mbedtls(wsi); #endif lwsl_info("%s: client connect OK\n", __func__); return LWS_SSL_CAPABLE_DONE; } en = (int)LWS_ERRNO; m = SSL_get_error(wsi->tls.ssl, n); if (m == SSL_ERROR_WANT_READ || SSL_want_read(wsi->tls.ssl)) return LWS_SSL_CAPABLE_MORE_SERVICE_READ; if (m == SSL_ERROR_WANT_WRITE || SSL_want_write(wsi->tls.ssl)) return LWS_SSL_CAPABLE_MORE_SERVICE_WRITE; if (!n) /* we don't know what he wants, but he says to retry */ return LWS_SSL_CAPABLE_MORE_SERVICE; if (m == SSL_ERROR_SYSCALL && !en && n >= 0) /* otherwise we miss explicit failures and spin * in hs state 17 until timeout... */ return LWS_SSL_CAPABLE_MORE_SERVICE; lws_snprintf(errbuf, elen, "mbedtls connect %d %d %d", n, m, en); return LWS_SSL_CAPABLE_ERROR; } int lws_tls_client_confirm_peer_cert(struct lws *wsi, char *ebuf, size_t ebuf_len) { int n; unsigned int avoid = 0; X509 *peer = SSL_get_peer_certificate(wsi->tls.ssl); struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; const char *type = ""; char *sb = (char *)&pt->serv_buf[0]; if (!peer) { #if defined(LWS_WITH_SYS_METRICS) lws_metrics_hist_bump_describe_wsi(wsi, lws_metrics_priv_to_pub( wsi->a.context->mth_conn_failures), "tls=\"nocert\""); #endif lwsl_info("peer did not provide cert\n"); lws_snprintf(ebuf, ebuf_len, "no peer cert"); return -1; } n = (int)SSL_get_verify_result(wsi->tls.ssl); lwsl_debug("get_verify says %d\n", n); switch (n) { case X509_V_OK: return 0; case X509_V_ERR_HOSTNAME_MISMATCH: type = "hostname"; avoid = LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK; break; case X509_V_ERR_INVALID_CA: type = "invalidca"; avoid = LCCSCF_ALLOW_SELFSIGNED; break; case X509_V_ERR_CERT_NOT_YET_VALID: type = "notyetvalid"; avoid = LCCSCF_ALLOW_EXPIRED; break; case X509_V_ERR_CERT_HAS_EXPIRED: type = "expired"; avoid = LCCSCF_ALLOW_EXPIRED; break; } lwsl_info("%s: cert problem: %s\n", __func__, type); #if defined(LWS_WITH_SYS_METRICS) { char buckname[64]; lws_snprintf(buckname, sizeof(buckname), "tls=\"%s\"", type); lws_metrics_hist_bump_describe_wsi(wsi, lws_metrics_priv_to_pub(wsi->a.context->mth_conn_failures), buckname); } #endif if (wsi->tls.use_ssl & avoid) { lwsl_info("%s: allowing anyway\n", __func__); return 0; } #if defined(LWS_WITH_TLS_JIT_TRUST) if (n == X509_V_ERR_INVALID_CA) lws_tls_jit_trust_sort_kids(wsi, &wsi->tls.ssl->kid_chain); #endif lws_snprintf(ebuf, ebuf_len, "server's cert didn't look good, %s (use_ssl 0x%x) X509_V_ERR = %d: %s\n", type, (unsigned int)wsi->tls.use_ssl, n, ERR_error_string((unsigned long)n, sb)); lwsl_info("%s\n", ebuf); lws_tls_err_describe_clear(); return -1; } int lws_tls_client_create_vhost_context(struct lws_vhost *vh, const struct lws_context_creation_info *info, const char *cipher_list, const char *ca_filepath, const void *ca_mem, unsigned int ca_mem_len, const char *cert_filepath, const void *cert_mem, unsigned int cert_mem_len, const char *private_key_filepath, const void *key_mem, unsigned int key_mem_len ) { X509 *d2i_X509(X509 **cert, const unsigned char *buffer, long len); SSL_METHOD *method = (SSL_METHOD *)TLS_client_method(); unsigned long error; int n; #if defined(LWS_WITH_TLS_SESSIONS) vh->tls_session_cache_max = info->tls_session_cache_max ? info->tls_session_cache_max : 10; lws_tls_session_cache(vh, info->tls_session_timeout); #endif if (!method) { error = (unsigned long)ERR_get_error(); lwsl_err("problem creating ssl method %lu: %s\n", error, ERR_error_string(error, (char *)vh->context->pt[0].serv_buf)); return 1; } /* create context */ vh->tls.ssl_client_ctx = SSL_CTX_new(method, &vh->context->mcdc); if (!vh->tls.ssl_client_ctx) { error = (unsigned long)ERR_get_error(); lwsl_err("problem creating ssl context %lu: %s\n", error, ERR_error_string(error, (char *)vh->context->pt[0].serv_buf)); return 1; } if (!ca_filepath && (!ca_mem || !ca_mem_len)) return 0; if (ca_filepath) { #if !defined(LWS_PLAT_OPTEE) uint8_t *buf; lws_filepos_t len; if (alloc_file(vh->context, ca_filepath, &buf, &len)) { lwsl_err("Load CA cert file %s failed\n", ca_filepath); return 1; } vh->tls.x509_client_CA = d2i_X509(NULL, buf, (long)len); free(buf); lwsl_info("Loading vh %s client CA for verification %s\n", vh->name, ca_filepath); #endif } else { vh->tls.x509_client_CA = d2i_X509(NULL, (uint8_t*)ca_mem, (long)ca_mem_len); lwsl_info("%s: using mem client CA cert %d\n", __func__, ca_mem_len); } if (!vh->tls.x509_client_CA) { lwsl_err("client CA: x509 parse failed\n"); return 1; } if (!vh->tls.ssl_ctx) SSL_CTX_add_client_CA(vh->tls.ssl_client_ctx, vh->tls.x509_client_CA); else SSL_CTX_add_client_CA(vh->tls.ssl_ctx, vh->tls.x509_client_CA); /* support for client-side certificate authentication */ if (cert_filepath) { #if !defined(LWS_PLAT_OPTEE) uint8_t *buf; lws_filepos_t amount; if (lws_tls_use_any_upgrade_check_extant(cert_filepath) != LWS_TLS_EXTANT_YES && (info->options & LWS_SERVER_OPTION_IGNORE_MISSING_CERT)) return 0; lwsl_notice("%s: doing cert filepath %s\n", __func__, cert_filepath); if (alloc_file(vh->context, cert_filepath, &buf, &amount)) return 1; buf[amount++] = '\0'; n = SSL_CTX_use_certificate_ASN1(vh->tls.ssl_client_ctx, (int)amount, buf); lws_free(buf); if (n < 1) { lwsl_err("problem %d getting cert '%s'\n", n, cert_filepath); lws_tls_err_describe_clear(); return 1; } lwsl_info("Loaded client cert %s\n", cert_filepath); #endif } else if (cert_mem && cert_mem_len) { /* lwsl_hexdump_notice(cert_mem, cert_mem_len - 1); */ n = SSL_CTX_use_certificate_ASN1(vh->tls.ssl_client_ctx, (int)cert_mem_len, cert_mem); if (n < 1) { lwsl_err("%s: (mbedtls) problem interpreting client cert\n", __func__); lws_tls_err_describe_clear(); return 1; } lwsl_info("%s: using mem client cert %d\n", __func__, cert_mem_len); } if (private_key_filepath) { #if !defined(LWS_PLAT_OPTEE) uint8_t *buf; lws_filepos_t amount; lwsl_notice("%s: doing private key filepath %s\n", __func__, private_key_filepath); if (alloc_file(vh->context, private_key_filepath, &buf, &amount)) return 1; buf[amount++] = '\0'; n = SSL_CTX_use_PrivateKey_ASN1(0, vh->tls.ssl_client_ctx, buf, (long)amount); lws_free(buf); if (n < 1) { lwsl_err("problem %d getting private key '%s'\n", n, private_key_filepath); lws_tls_err_describe_clear(); return 1; } lwsl_notice("Loaded private key %s\n", private_key_filepath); #endif } else if (key_mem && key_mem_len) { /* lwsl_hexdump_notice(cert_mem, cert_mem_len - 1); */ n = SSL_CTX_use_PrivateKey_ASN1(0, vh->tls.ssl_client_ctx, key_mem, (long)key_mem_len - 1); if (n < 1) { lwsl_err("%s: (mbedtls) problem interpreting private key\n", __func__); lws_tls_err_describe_clear(); return 1; } lwsl_info("%s: using mem private key %d\n", __func__, key_mem_len); } return 0; } int lws_tls_client_vhost_extra_cert_mem(struct lws_vhost *vh, const uint8_t *der, size_t der_len) { if (SSL_CTX_add_client_CA_ASN1(vh->tls.ssl_client_ctx, (int)der_len, der) != 1) { lwsl_err("%s: failed\n", __func__); return 1; } return 0; } libwebsockets-4.3.5/lib/tls/mbedtls/mbedtls-extensions.c000066400000000000000000000401651476025525100233750ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2022 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * These are additional apis that belong in mbedtls but do not yet exist there. * Alternaives are provided for lws to use that understand additional standard * v3 tls extensions. Error results are simplified to lws style. * * This file includes code taken from mbedtls and modified, and from an as of * 2021-06-11 unaccepted-upstream patch for mbedtls contributed by GĆ”bor Tóth * . Gabor has graciously allowed use of his patch with more * liberal terms but to not complicate matters I provide it here under the same * Apache 2.0 terms as the mbedtls pieces. * * Those original pieces are licensed Apache-2.0 as follows * * Copyright The Mbed TLS Contributors * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "private-lib-core.h" #include "private-lib-tls-mbedtls.h" #include #include /* * This section from mbedtls oid.c */ typedef struct { mbedtls_oid_descriptor_t descriptor; int ext_type; } oid_x509_ext_t; #define ADD_LEN(s) s, MBEDTLS_OID_SIZE(s) #define LWS_MBEDTLS_OID_AUTHORITY_KEY_IDENTIFIER MBEDTLS_OID_ID_CE "\x23" /**< id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 35 } */ #define LWS_MBEDTLS_OID_SUBJECT_KEY_IDENTIFIER MBEDTLS_OID_ID_CE "\x0E" /**< id-ce-subjectKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 14 } */ #define LWS_MBEDTLS_OID_X509_EXT_AUTHORITY_KEY_IDENTIFIER (1 << 0) #define LWS_MBEDTLS_OID_X509_EXT_SUBJECT_KEY_IDENTIFIER (1 << 1) #define LWS_MBEDTLS_X509_EXT_AUTHORITY_KEY_IDENTIFIER LWS_MBEDTLS_OID_X509_EXT_AUTHORITY_KEY_IDENTIFIER #define LWS_MBEDTLS_X509_EXT_SUBJECT_KEY_IDENTIFIER LWS_MBEDTLS_OID_X509_EXT_SUBJECT_KEY_IDENTIFIER #define LWS_MBEDTLS_X509_SAN_OTHER_NAME 0 #define LWS_MBEDTLS_X509_SAN_RFC822_NAME 1 #define LWS_MBEDTLS_X509_SAN_DNS_NAME 2 #define LWS_MBEDTLS_ASN1_TAG_CLASS_MASK 0xC0 #define LWS_MBEDTLS_ASN1_TAG_VALUE_MASK 0x1F static const oid_x509_ext_t oid_x509_ext[] = { { {ADD_LEN( LWS_MBEDTLS_OID_SUBJECT_KEY_IDENTIFIER ), "id-ce-subjectKeyIdentifier", "Subject Key Identifier" }, LWS_MBEDTLS_OID_X509_EXT_SUBJECT_KEY_IDENTIFIER, }, { {ADD_LEN( LWS_MBEDTLS_OID_AUTHORITY_KEY_IDENTIFIER ), "id-ce-authorityKeyIdentifier", "Authority Key Identifier" }, LWS_MBEDTLS_OID_X509_EXT_AUTHORITY_KEY_IDENTIFIER, }, { { NULL, 0, NULL, NULL }, 0 }, }; #define FN_OID_TYPED_FROM_ASN1( TYPE_T, NAME, LIST ) \ static const TYPE_T * oid_ ## NAME ## _from_asn1( \ const mbedtls_asn1_buf *oid ) \ { \ const TYPE_T *p = (LIST); \ const mbedtls_oid_descriptor_t *cur = \ (const mbedtls_oid_descriptor_t *) p; \ if( p == NULL || oid == NULL ) return( NULL ); \ while( cur->MBEDTLS_PRIVATE(asn1) != NULL ) { \ if( cur->MBEDTLS_PRIVATE(asn1_len) == oid->MBEDTLS_PRIVATE_V30_ONLY(len) && \ memcmp( cur->MBEDTLS_PRIVATE(asn1), oid->MBEDTLS_PRIVATE_V30_ONLY(p), oid->MBEDTLS_PRIVATE_V30_ONLY(len) ) == 0 ) { \ return( p ); \ } \ p++; \ cur = (const mbedtls_oid_descriptor_t *) p; \ } \ return( NULL ); \ } #define FN_OID_GET_ATTR1(FN_NAME, TYPE_T, TYPE_NAME, ATTR1_TYPE, ATTR1) \ int FN_NAME( const mbedtls_asn1_buf *oid, ATTR1_TYPE * ATTR1 ) \ { \ const TYPE_T *data = oid_ ## TYPE_NAME ## _from_asn1( oid ); \ if (!data) return 1; \ *ATTR1 = data->ATTR1; \ return 0; \ } FN_OID_TYPED_FROM_ASN1(oid_x509_ext_t, x509_ext, oid_x509_ext) FN_OID_GET_ATTR1(lws_mbedtls_oid_get_x509_ext_type, oid_x509_ext_t, x509_ext, int, ext_type) typedef struct lws_mbedtls_x509_san_other_name { /** * The type_id is an OID as deifned in RFC 5280. * To check the value of the type id, you should use * \p MBEDTLS_OID_CMP with a known OID mbedtls_x509_buf. */ mbedtls_x509_buf type_id; /**< The type id. */ union { /** * From RFC 4108 section 5: * HardwareModuleName ::= SEQUENCE { * hwType OBJECT IDENTIFIER, * hwSerialNum OCTET STRING } */ struct { mbedtls_x509_buf oid; /**< The object identifier. */ mbedtls_x509_buf val; /**< The named value. */ } hardware_module_name; } value; } lws_mbedtls_x509_san_other_name; typedef struct lws_mbedtls_x509_subject_alternative_name { int type; /**< The SAN type, value of LWS_MBEDTLS_X509_SAN_XXX. */ union { lws_mbedtls_x509_san_other_name other_name; /**< The otherName supported type. */ mbedtls_x509_buf unstructured_name; /**< The buffer for the un constructed types. Only dnsName currently supported */ } san; /**< A union of the supported SAN types */ } lws_mbedtls_x509_subject_alternative_name; static int x509_get_skid(uint8_t **p, const uint8_t *end, mbedtls_x509_buf *skid) { int ret = 1; size_t len = 0u; ret = mbedtls_asn1_get_tag(p, end, &len, MBEDTLS_ASN1_OCTET_STRING); if (ret) return ret; skid->MBEDTLS_PRIVATE_V30_ONLY(len) = len; skid->MBEDTLS_PRIVATE_V30_ONLY(tag) = MBEDTLS_ASN1_OCTET_STRING; skid->MBEDTLS_PRIVATE_V30_ONLY(p) = *p; *p += len; return *p != end; } /* * Names may have multiple allocated segments in a linked-list, when the mbedtls * api mbedtls_x509_get_name() fails, it doesn't clean up any already-allocated * segments, wrongly leaving it to the caller to handle. This helper takes care * of the missing cleaning for allocation error path. * * name.next must be set to NULL by user code before calling ...get_name(..., * &name), since not every error exit sets it and it will contain garbage if * defined on stack as is usual. */ static void lws_x509_clean_name(mbedtls_x509_name *name) { mbedtls_x509_name *n1; if (!name) return; n1 = name->MBEDTLS_PRIVATE_V30_ONLY(next); while (n1) { name = n1->MBEDTLS_PRIVATE_V30_ONLY(next); free(n1); n1 = name; } } static int lws_mbedtls_x509_parse_general_name(const mbedtls_x509_buf *name_buf, lws_mbedtls_x509_subject_alternative_name *name) { // mbedtls_x509_name_other_name other_name; uint8_t *bufferPointer, **p, *end; mbedtls_x509_name rfc822Name; int ret; switch (name_buf->MBEDTLS_PRIVATE_V30_ONLY(tag) & (LWS_MBEDTLS_ASN1_TAG_CLASS_MASK | LWS_MBEDTLS_ASN1_TAG_VALUE_MASK)) { #if 0 case MBEDTLS_ASN1_CONTEXT_SPECIFIC | LWS_MBEDTLS_X509_SAN_OTHER_NAME: ret = x509_get_other_name( name_buf, &other_name ); if (ret) return ret; memset(name, 0, sizeof(*name)); name->type = LWS_MBEDTLS_X509_SAN_OTHER_NAME; memcpy(&name->name.other_name, &other_name, sizeof(other_name)); return 0; #endif case MBEDTLS_ASN1_SEQUENCE | LWS_MBEDTLS_X509_SAN_RFC822_NAME: bufferPointer = name_buf->MBEDTLS_PRIVATE_V30_ONLY(p); p = &bufferPointer; end = name_buf->MBEDTLS_PRIVATE_V30_ONLY(p) + name_buf->MBEDTLS_PRIVATE_V30_ONLY(len); /* The leading ASN1 tag and length has been processed. * Stepping back with 2 bytes, because mbedtls_x509_get_name * expects the beginning of the SET tag */ *p = *p - 2; rfc822Name.MBEDTLS_PRIVATE_V30_ONLY(next) = NULL; ret = mbedtls_x509_get_name( p, end, &rfc822Name ); if (ret) { lws_x509_clean_name(&rfc822Name); return ret; } memset(name, 0, sizeof(*name)); name->type = LWS_MBEDTLS_X509_SAN_OTHER_NAME; memcpy(&name->san.other_name, &rfc822Name, sizeof(rfc822Name)); return 0; case MBEDTLS_ASN1_CONTEXT_SPECIFIC | LWS_MBEDTLS_X509_SAN_DNS_NAME: memset(name, 0, sizeof(*name)); name->type = LWS_MBEDTLS_X509_SAN_DNS_NAME; memcpy(&name->san.unstructured_name, name_buf, sizeof(*name_buf) ); return 0; default: return 1; } return 1; } static int lws_x509_get_general_names(uint8_t **p, const uint8_t *end, mbedtls_x509_sequence *name ) { mbedtls_asn1_sequence *cur = name; mbedtls_asn1_buf *buf; size_t len, tag_len; unsigned char tag; int r; /* Get main sequence tag */ r = mbedtls_asn1_get_tag(p, end, &len, MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE); if (r) return r; if (*p + len != end) return 1; while (*p < end) { lws_mbedtls_x509_subject_alternative_name dnb; memset(&dnb, 0, sizeof(dnb)); tag = **p; (*p)++; r = mbedtls_asn1_get_len(p, end, &tag_len); if (r) return r; /* Tag shall be CONTEXT_SPECIFIC or SET */ if ((tag & LWS_MBEDTLS_ASN1_TAG_CLASS_MASK) != MBEDTLS_ASN1_CONTEXT_SPECIFIC && (tag & (MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE)) != (MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE)) return 1; /* * Check that the name is structured correctly. */ r = lws_mbedtls_x509_parse_general_name( &cur->MBEDTLS_PRIVATE_V30_ONLY(buf), &dnb); /* * In case the extension is malformed, return an error, * and clear the allocated sequences. */ if (r && r != MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE) { mbedtls_x509_sequence *seq_cur = name->MBEDTLS_PRIVATE_V30_ONLY(next); mbedtls_x509_sequence *seq_prv; while( seq_cur != NULL ) { seq_prv = seq_cur; seq_cur = seq_cur->MBEDTLS_PRIVATE_V30_ONLY(next); lws_explicit_bzero(seq_prv, sizeof(*seq_cur)); lws_free(seq_prv); } name->MBEDTLS_PRIVATE_V30_ONLY(next) = NULL; return r; } /* Allocate and assign next pointer */ if (cur->MBEDTLS_PRIVATE_V30_ONLY(buf).MBEDTLS_PRIVATE_V30_ONLY(p)) { if (cur->MBEDTLS_PRIVATE_V30_ONLY(next)) return 1; cur->MBEDTLS_PRIVATE_V30_ONLY(next) = lws_zalloc(sizeof(*cur), __func__); if (!cur->MBEDTLS_PRIVATE_V30_ONLY(next)) return 1; cur = cur->MBEDTLS_PRIVATE_V30_ONLY(next); } buf = &(cur->MBEDTLS_PRIVATE_V30_ONLY(buf)); buf->MBEDTLS_PRIVATE_V30_ONLY(tag) = tag; buf->MBEDTLS_PRIVATE_V30_ONLY(p) = *p; buf->MBEDTLS_PRIVATE_V30_ONLY(len) = tag_len; *p += buf->MBEDTLS_PRIVATE_V30_ONLY(len); } /* Set final sequence entry's next pointer to NULL */ cur->MBEDTLS_PRIVATE_V30_ONLY(next) = NULL; return *p != end; } static int x509_get_akid(uint8_t **p, uint8_t *end, lws_mbedtls_x509_authority *akid) { size_t len = 0u; int r; r = mbedtls_asn1_get_tag(p, end, &len, MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE); if (r) return r; r = mbedtls_asn1_get_tag(p, end, &len, MBEDTLS_ASN1_CONTEXT_SPECIFIC); if (!r) { akid->keyIdentifier.MBEDTLS_PRIVATE_V30_ONLY(len) = len; akid->keyIdentifier.MBEDTLS_PRIVATE_V30_ONLY(p) = *p; akid->keyIdentifier.MBEDTLS_PRIVATE_V30_ONLY(tag) = MBEDTLS_ASN1_OCTET_STRING; *p += len; } if (*p < end) { /* Getting authorityCertIssuer using the required specific * class tag [1] */ r = mbedtls_asn1_get_tag(p, end, &len, MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 1 ); if (!r) { /* Getting directoryName using the required specific * class tag [4] */ r = mbedtls_asn1_get_tag(p, end, &len, MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 4); if (r) return(r); /* "end" also includes the CertSerialNumber field * so "len" shall be used */ r = lws_x509_get_general_names(p, (*p + len), &akid->authorityCertIssuer); } } if (*p < end) { r = mbedtls_asn1_get_tag(p, end, &len, MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_INTEGER ); if (r) return r; akid->authorityCertSerialNumber.MBEDTLS_PRIVATE_V30_ONLY(len) = len; akid->authorityCertSerialNumber.MBEDTLS_PRIVATE_V30_ONLY(p) = *p; akid->authorityCertSerialNumber.MBEDTLS_PRIVATE_V30_ONLY(tag) = MBEDTLS_ASN1_OCTET_STRING; *p += len; } return *p != end; } /* * Work around lack of this in mbedtls... we don't need to do sanity checks * sanity checks because they will be done at x509 validation time */ int lws_x509_get_crt_ext(mbedtls_x509_crt *crt, mbedtls_x509_buf *skid, lws_mbedtls_x509_authority *akid) { uint8_t *p = crt->MBEDTLS_PRIVATE_V30_ONLY(v3_ext).MBEDTLS_PRIVATE_V30_ONLY(p), *end_ext_data, *end_ext_octet; const uint8_t *end = p + crt->MBEDTLS_PRIVATE_V30_ONLY(v3_ext).MBEDTLS_PRIVATE_V30_ONLY(len); size_t len; int r = mbedtls_asn1_get_tag(&p, end, &len, MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE); if (r) return r; while (p < end) { mbedtls_x509_buf extn_oid = { 0, 0, NULL }; int is_critical = 0; /* DEFAULT FALSE */ int ext_type = 0; r = mbedtls_asn1_get_tag(&p, end, &len, MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE); if (r) return r; end_ext_data = p + len; /* Get extension ID */ r = mbedtls_asn1_get_tag(&p, end_ext_data, &extn_oid.MBEDTLS_PRIVATE_V30_ONLY(len), MBEDTLS_ASN1_OID); if (r) return r; extn_oid.MBEDTLS_PRIVATE_V30_ONLY(tag) = MBEDTLS_ASN1_OID; extn_oid.MBEDTLS_PRIVATE_V30_ONLY(p) = p; p += extn_oid.MBEDTLS_PRIVATE_V30_ONLY(len); /* Get optional critical */ r = mbedtls_asn1_get_bool(&p, end_ext_data, &is_critical); if (r && r != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG) return r; /* Data should be octet string type */ r = mbedtls_asn1_get_tag(&p, end_ext_data, &len, MBEDTLS_ASN1_OCTET_STRING); if (r) return r; end_ext_octet = p + len; if (end_ext_octet != end_ext_data) return 1; r = lws_mbedtls_oid_get_x509_ext_type(&extn_oid, &ext_type); if (r) { p = end_ext_octet; continue; } switch (ext_type) { case LWS_MBEDTLS_X509_EXT_SUBJECT_KEY_IDENTIFIER: /* Parse subject key identifier */ r = x509_get_skid(&p, end_ext_data, skid); if (r) return r; break; case LWS_MBEDTLS_X509_EXT_AUTHORITY_KEY_IDENTIFIER: /* Parse authority key identifier */ r = x509_get_akid(&p, end_ext_octet, akid); if (r) return r; break; default: p = end_ext_octet; } } return 0; } libwebsockets-4.3.5/lib/tls/mbedtls/mbedtls-server.c000066400000000000000000000445661476025525100225150ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include #include int lws_tls_server_client_cert_verify_config(struct lws_vhost *vh) { int verify_options = SSL_VERIFY_PEER; /* as a server, are we requiring clients to identify themselves? */ if (!lws_check_opt(vh->options, LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT)) { lwsl_notice("no client cert required\n"); return 0; } if (!lws_check_opt(vh->options, LWS_SERVER_OPTION_PEER_CERT_NOT_REQUIRED)) verify_options = SSL_VERIFY_FAIL_IF_NO_PEER_CERT; lwsl_notice("%s: vh %s requires client cert %d\n", __func__, vh->name, verify_options); SSL_CTX_set_verify(vh->tls.ssl_ctx, verify_options, NULL); return 0; } static int lws_mbedtls_sni_cb(void *arg, mbedtls_ssl_context *mbedtls_ctx, const unsigned char *servername, size_t len) { SSL *ssl = SSL_SSL_from_mbedtls_ssl_context(mbedtls_ctx); struct lws_context *context = (struct lws_context *)arg; struct lws_vhost *vhost, *vh; lwsl_notice("%s: %s\n", __func__, servername); /* * We can only get ssl accepted connections by using a vhost's ssl_ctx * find out which listening one took us and only match vhosts on the * same port. */ vh = context->vhost_list; while (vh) { if (!vh->being_destroyed && vh->tls.ssl_ctx == SSL_get_SSL_CTX(ssl)) break; vh = vh->vhost_next; } if (!vh) { assert(vh); /* can't match the incoming vh? */ return 0; } vhost = lws_select_vhost(context, vh->listen_port, (const char *)servername); if (!vhost) { lwsl_info("SNI: none: %s:%d\n", servername, vh->listen_port); return 0; } lwsl_info("SNI: Found: %s:%d at vhost '%s'\n", servername, vh->listen_port, vhost->name); if (!vhost->tls.ssl_ctx) { lwsl_err("%s: vhost %s matches SNI but no valid cert\n", __func__, vh->name); return 1; } /* select the ssl ctx from the selected vhost for this conn */ SSL_set_SSL_CTX(ssl, vhost->tls.ssl_ctx); return 0; } int lws_tls_server_certs_load(struct lws_vhost *vhost, struct lws *wsi, const char *cert, const char *private_key, const char *mem_cert, size_t mem_cert_len, const char *mem_privkey, size_t mem_privkey_len) { lws_filepos_t flen; uint8_t *p = NULL; long err; int n; if ((!cert || !private_key) && (!mem_cert || !mem_privkey)) { lwsl_notice("%s: no usable input\n", __func__); return 0; } n = (int)lws_tls_generic_cert_checks(vhost, cert, private_key); if (n == LWS_TLS_EXTANT_NO && (!mem_cert || !mem_privkey)) return 0; /* * we can't read the root-privs files. But if mem_cert is provided, * we should use that. */ if (n == LWS_TLS_EXTANT_NO) n = LWS_TLS_EXTANT_ALTERNATIVE; if (n == LWS_TLS_EXTANT_ALTERNATIVE && (!mem_cert || !mem_privkey)) return 1; /* no alternative */ if (n == LWS_TLS_EXTANT_ALTERNATIVE) { /* * Although we have prepared update certs, we no longer have * the rights to read our own cert + key we saved. * * If we were passed copies in memory buffers, use those * instead. * * The passed memory-buffer cert image is in DER, and the * memory-buffer private key image is PEM. */ cert = NULL; private_key = NULL; } if (lws_tls_alloc_pem_to_der_file(vhost->context, cert, mem_cert, mem_cert_len, &p, &flen)) { lwsl_err("couldn't find cert file %s\n", cert); return 1; } err = SSL_CTX_use_certificate_ASN1(vhost->tls.ssl_ctx, (int)flen, p); lws_free_set_NULL(p); if (!err) { lwsl_err("Problem loading cert\n"); return 1; } if (lws_tls_alloc_pem_to_der_file(vhost->context, private_key, (char *)mem_privkey, mem_privkey_len, &p, &flen)) { lwsl_err("couldn't find private key\n"); return 1; } err = SSL_CTX_use_PrivateKey_ASN1(0, vhost->tls.ssl_ctx, p, (long)flen); lws_free_set_NULL(p); if (!err) { lwsl_err("Problem loading key\n"); return 1; } vhost->tls.skipped_certs = 0; return 0; } int lws_tls_server_vhost_backend_init(const struct lws_context_creation_info *info, struct lws_vhost *vhost, struct lws *wsi) { const SSL_METHOD *method = TLS_server_method(); uint8_t *p; lws_filepos_t flen; int n; vhost->tls.ssl_ctx = SSL_CTX_new(method, &vhost->context->mcdc); /* create context */ if (!vhost->tls.ssl_ctx) { lwsl_err("problem creating ssl context\n"); return 1; } if (!vhost->tls.use_ssl || (!info->ssl_cert_filepath && !info->server_ssl_cert_mem)) return 0; if (info->ssl_ca_filepath) { lwsl_notice("%s: vh %s: loading CA filepath %s\n", __func__, vhost->name, info->ssl_ca_filepath); if (lws_tls_alloc_pem_to_der_file(vhost->context, info->ssl_ca_filepath, NULL, 0, &p, &flen)) { lwsl_err("couldn't find client CA file %s\n", info->ssl_ca_filepath); return 1; } if (SSL_CTX_add_client_CA_ASN1(vhost->tls.ssl_ctx, (int)flen, p) != 1) { lwsl_err("%s: SSL_CTX_add_client_CA_ASN1 unhappy\n", __func__); free(p); return 1; } free(p); } else { if (info->server_ssl_ca_mem && info->server_ssl_ca_mem_len && SSL_CTX_add_client_CA_ASN1(vhost->tls.ssl_ctx, (int)info->server_ssl_ca_mem_len, info->server_ssl_ca_mem) != 1) { lwsl_err("%s: mem SSL_CTX_add_client_CA_ASN1 unhappy\n", __func__); return 1; } lwsl_notice("%s: vh %s: mem CA OK\n", __func__, vhost->name); } n = lws_tls_server_certs_load(vhost, wsi, info->ssl_cert_filepath, info->ssl_private_key_filepath, info->server_ssl_cert_mem, info->server_ssl_cert_mem_len, info->server_ssl_private_key_mem, info->server_ssl_private_key_mem_len); if (n) return n; return 0; } int lws_tls_server_new_nonblocking(struct lws *wsi, lws_sockfd_type accept_fd) { errno = 0; wsi->tls.ssl = SSL_new(wsi->a.vhost->tls.ssl_ctx); if (wsi->tls.ssl == NULL) { lwsl_err("SSL_new failed: errno %d\n", errno); lws_tls_err_describe_clear(); return 1; } SSL_set_fd(wsi->tls.ssl, (int)accept_fd); if (wsi->a.vhost->tls.ssl_info_event_mask) SSL_set_info_callback(wsi->tls.ssl, lws_ssl_info_callback); SSL_set_sni_callback(wsi->tls.ssl, lws_mbedtls_sni_cb, wsi->a.context); return 0; } enum lws_ssl_capable_status lws_tls_server_abort_connection(struct lws *wsi) { if (wsi->tls.use_ssl) __lws_tls_shutdown(wsi); SSL_free(wsi->tls.ssl); return 0; } enum lws_ssl_capable_status lws_tls_server_accept(struct lws *wsi) { union lws_tls_cert_info_results ir; int m, n; n = SSL_accept(wsi->tls.ssl); wsi->skip_fallback = 1; if (n == 1) { if (strstr(wsi->a.vhost->name, ".invalid")) { lwsl_notice("%s: vhost has .invalid, " "rejecting accept\n", __func__); return LWS_SSL_CAPABLE_ERROR; } n = lws_tls_peer_cert_info(wsi, LWS_TLS_CERT_INFO_COMMON_NAME, &ir, sizeof(ir.ns.name)); if (!n) lwsl_notice("%s: client cert CN '%s'\n", __func__, ir.ns.name); else lwsl_info("%s: couldn't get client cert CN\n", __func__); return LWS_SSL_CAPABLE_DONE; } m = SSL_get_error(wsi->tls.ssl, n); lwsl_debug("%s: %s: accept SSL_get_error %d errno %d\n", __func__, lws_wsi_tag(wsi), m, errno); // mbedtls wrapper only if (m == SSL_ERROR_SYSCALL && errno == 11) return LWS_SSL_CAPABLE_MORE_SERVICE_READ; #if defined(__APPLE__) if (m == SSL_ERROR_SYSCALL && errno == 35) return LWS_SSL_CAPABLE_MORE_SERVICE_READ; #endif #if defined(WIN32) if (m == SSL_ERROR_SYSCALL && errno == 0) return LWS_SSL_CAPABLE_MORE_SERVICE_READ; #endif if (m == SSL_ERROR_SYSCALL || m == SSL_ERROR_SSL) return LWS_SSL_CAPABLE_ERROR; if (m == SSL_ERROR_WANT_READ || SSL_want_read(wsi->tls.ssl)) { if (lws_change_pollfd(wsi, 0, LWS_POLLIN)) { lwsl_info("%s: WANT_READ change_pollfd failed\n", __func__); return LWS_SSL_CAPABLE_ERROR; } lwsl_info("SSL_ERROR_WANT_READ\n"); return LWS_SSL_CAPABLE_MORE_SERVICE_READ; } if (m == SSL_ERROR_WANT_WRITE || SSL_want_write(wsi->tls.ssl)) { lwsl_debug("%s: WANT_WRITE\n", __func__); if (lws_change_pollfd(wsi, 0, LWS_POLLOUT)) { lwsl_info("%s: WANT_WRITE change_pollfd failed\n", __func__); return LWS_SSL_CAPABLE_ERROR; } return LWS_SSL_CAPABLE_MORE_SERVICE_WRITE; } return LWS_SSL_CAPABLE_ERROR; } #if defined(LWS_WITH_ACME) /* * mbedtls doesn't support SAN for cert creation. So we use a known-good * tls-sni-01 cert from OpenSSL that worked on Let's Encrypt, and just replace * the pubkey n part and the signature part. * * This will need redoing for tls-sni-02... */ static uint8_t ss_cert_leadin[] = { 0x30, 0x82, 0x05, 0x56, /* total length: LEN1 (+2 / +3) (correct for 513 + 512)*/ 0x30, 0x82, /* length: LEN2 (+6 / +7) (correct for 513) */ 0x03, 0x3e, /* addition: v3 cert (+5 bytes)*/ 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x01, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x3f, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x42, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0b, 0x73, 0x6f, 0x6d, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x31, 0x1a, 0x30, 0x18, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x2e, 0x61, 0x63, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x30, 0x1e, 0x17, 0x0d, /* from 2017-10-29 ... */ 0x31, 0x37, 0x31, 0x30, 0x32, 0x39, 0x31, 0x31, 0x34, 0x39, 0x34, 0x35, 0x5a, 0x17, 0x0d, /* thru 2049-10-29 we immediately discard the private key, no worries */ 0x34, 0x39, 0x31, 0x30, 0x32, 0x39, 0x31, 0x32, 0x34, 0x39, 0x34, 0x35, 0x5a, 0x30, 0x3f, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x42, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0b, 0x73, 0x6f, 0x6d, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x31, 0x1a, 0x30, 0x18, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x2e, 0x61, 0x63, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x30, 0x82, 0x02, 0x22, /* LEN3 (+C3 / C4) */ 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, /* LEN4 (+D6 / D7) */ 0x00, 0x30, 0x82, 0x02, 0x0a, /* LEN5 (+ DB / DC) */ 0x02, 0x82, //0x02, 0x01, /* length of n in bytes (including leading 00 if any) */ }, /* 1 + (keybits / 8) bytes N */ ss_cert_san_leadin[] = { /* e - fixed */ 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x5d, 0x30, 0x5b, 0x30, 0x59, 0x06, 0x03, 0x55, 0x1d, 0x11, 0x04, 0x52, 0x30, 0x50, /* <-- SAN length + 2 */ 0x82, 0x4e, /* <-- SAN length */ }, /* 78 bytes of SAN (tls-sni-01) 0x61, 0x64, 0x34, 0x31, 0x61, 0x66, 0x62, 0x65, 0x30, 0x63, 0x61, 0x34, 0x36, 0x34, 0x32, 0x66, 0x30, 0x61, 0x34, 0x34, 0x39, 0x64, 0x39, 0x63, 0x61, 0x37, 0x36, 0x65, 0x62, 0x61, 0x61, 0x62, 0x2e, 0x32, 0x38, 0x39, 0x34, 0x64, 0x34, 0x31, 0x36, 0x63, 0x39, 0x38, 0x33, 0x66, 0x31, 0x32, 0x65, 0x64, 0x37, 0x33, 0x31, 0x61, 0x33, 0x30, 0x66, 0x35, 0x63, 0x34, 0x34, 0x37, 0x37, 0x66, 0x65, 0x2e, 0x61, 0x63, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, */ /* end of LEN2 area */ ss_cert_sig_leadin[] = { /* it's saying that the signature is SHA256 + RSA */ 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, }; /* (keybits / 8) bytes signature to end of LEN1 area */ #define SAN_A_LENGTH 78 int lws_tls_acme_sni_cert_create(struct lws_vhost *vhost, const char *san_a, const char *san_b) { int buflen = 0x560; uint8_t *buf = lws_malloc((unsigned int)buflen, "tmp cert buf"), *p = buf, *pkey_asn1; struct lws_genrsa_ctx ctx; struct lws_gencrypto_keyelem el[LWS_GENCRYPTO_RSA_KEYEL_COUNT]; uint8_t digest[32]; struct lws_genhash_ctx hash_ctx; int pkey_asn1_len = 3 * 1024; int n, m, keybits = lws_plat_recommended_rsa_bits(), adj; if (!buf) return 1; n = lws_genrsa_new_keypair(vhost->context, &ctx, LGRSAM_PKCS1_1_5, &el[0], keybits); if (n < 0) { lws_genrsa_destroy_elements(&el[0]); goto bail1; } n = sizeof(ss_cert_leadin); memcpy(p, ss_cert_leadin, (unsigned int)n); p += n; adj = (0x0556 - 0x401) + (keybits / 4) + 1; buf[2] = (uint8_t)(adj >> 8); buf[3] = (uint8_t)(adj & 0xff); adj = (0x033e - 0x201) + (keybits / 8) + 1; buf[6] = (uint8_t)(adj >> 8); buf[7] = (uint8_t)(adj & 0xff); adj = (0x0222 - 0x201) + (keybits / 8) + 1; buf[0xc3] = (uint8_t)(adj >> 8); buf[0xc4] = (uint8_t)(adj & 0xff); adj = (0x020f - 0x201) + (keybits / 8) + 1; buf[0xd6] = (uint8_t)(adj >> 8); buf[0xd7] = (uint8_t)(adj & 0xff); adj = (0x020a - 0x201) + (keybits / 8) + 1; buf[0xdb] = (uint8_t)(adj >> 8); buf[0xdc] = (uint8_t)(adj & 0xff); *p++ = (uint8_t)(((keybits / 8) + 1) >> 8); *p++ = (uint8_t)(((keybits / 8) + 1) & 0xff); /* we need to drop 1 + (keybits / 8) bytes of n in here, 00 + key */ *p++ = 0x00; memcpy(p, el[LWS_GENCRYPTO_RSA_KEYEL_N].buf, el[LWS_GENCRYPTO_RSA_KEYEL_N].len); p += el[LWS_GENCRYPTO_RSA_KEYEL_N].len; memcpy(p, ss_cert_san_leadin, sizeof(ss_cert_san_leadin)); p += sizeof(ss_cert_san_leadin); /* drop in 78 bytes of san_a */ memcpy(p, san_a, SAN_A_LENGTH); p += SAN_A_LENGTH; memcpy(p, ss_cert_sig_leadin, sizeof(ss_cert_sig_leadin)); p[17] = (uint8_t)(((keybits / 8) + 1) >> 8); p[18] = (uint8_t)(((keybits / 8) + 1) & 0xff); p += sizeof(ss_cert_sig_leadin); /* hash the cert plaintext */ if (lws_genhash_init(&hash_ctx, LWS_GENHASH_TYPE_SHA256)) goto bail2; if (lws_genhash_update(&hash_ctx, buf, lws_ptr_diff_size_t(p, buf))) { lws_genhash_destroy(&hash_ctx, NULL); goto bail2; } if (lws_genhash_destroy(&hash_ctx, digest)) goto bail2; /* sign the hash */ n = lws_genrsa_hash_sign(&ctx, digest, LWS_GENHASH_TYPE_SHA256, p, (size_t)((size_t)buflen - lws_ptr_diff_size_t(p, buf))); if (n < 0) goto bail2; p += n; pkey_asn1 = lws_malloc((unsigned int)pkey_asn1_len, "mbed crt tmp"); if (!pkey_asn1) goto bail2; m = lws_genrsa_render_pkey_asn1(&ctx, 1, pkey_asn1, (size_t)pkey_asn1_len); if (m < 0) { lws_free(pkey_asn1); goto bail2; } // lwsl_hexdump_level(LLL_DEBUG, buf, lws_ptr_diff(p, buf)); n = SSL_CTX_use_certificate_ASN1(vhost->tls.ssl_ctx, lws_ptr_diff(p, buf), buf); if (n != 1) { lws_free(pkey_asn1); lwsl_err("%s: generated cert failed to load 0x%x\n", __func__, -n); } else { //lwsl_debug("private key\n"); //lwsl_hexdump_level(LLL_DEBUG, pkey_asn1, n); /* and to use our generated private key */ n = SSL_CTX_use_PrivateKey_ASN1(0, vhost->tls.ssl_ctx, pkey_asn1, m); lws_free(pkey_asn1); if (n != 1) { lwsl_err("%s: SSL_CTX_use_PrivateKey_ASN1 failed\n", __func__); } } lws_genrsa_destroy(&ctx); lws_genrsa_destroy_elements(&el[0]); lws_free(buf); return n != 1; bail2: lws_genrsa_destroy(&ctx); lws_genrsa_destroy_elements(&el[0]); bail1: lws_free(buf); return -1; } void lws_tls_acme_sni_cert_destroy(struct lws_vhost *vhost) { } #if defined(LWS_WITH_JOSE) static int _rngf(void *context, unsigned char *buf, size_t len) { if ((size_t)lws_get_random(context, buf, len) == len) return 0; return -1; } static const char *x5[] = { "C", "ST", "L", "O", "CN" }; /* * CSR is output formatted as b64url(DER) * Private key is output as a PEM in memory */ int lws_tls_acme_sni_csr_create(struct lws_context *context, const char *elements[], uint8_t *dcsr, size_t csr_len, char **privkey_pem, size_t *privkey_len) { mbedtls_x509write_csr csr; mbedtls_pk_context mpk; int buf_size = 4096, n; char subject[200], *p = subject, *end = p + sizeof(subject) - 1; uint8_t *buf = malloc((unsigned int)buf_size); /* malloc because given to user code */ if (!buf) return -1; mbedtls_x509write_csr_init(&csr); mbedtls_pk_init(&mpk); if (mbedtls_pk_setup(&mpk, mbedtls_pk_info_from_type(MBEDTLS_PK_RSA))) { lwsl_notice("%s: pk_setup failed\n", __func__); goto fail; } n = mbedtls_rsa_gen_key(mbedtls_pk_rsa(mpk), _rngf, context, (unsigned int)lws_plat_recommended_rsa_bits(), 65537); if (n) { lwsl_notice("%s: failed to generate keys\n", __func__); goto fail1; } /* subject must be formatted like "C=TW,O=warmcat,CN=myserver" */ for (n = 0; n < (int)LWS_ARRAY_SIZE(x5); n++) { if (p != subject) *p++ = ','; if (elements[n]) p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "%s=%s", x5[n], elements[n]); } if (mbedtls_x509write_csr_set_subject_name(&csr, subject)) goto fail1; mbedtls_x509write_csr_set_key(&csr, &mpk); mbedtls_x509write_csr_set_md_alg(&csr, MBEDTLS_MD_SHA256); /* * data is written at the end of the buffer! Use the * return value to determine where you should start * using the buffer */ n = mbedtls_x509write_csr_der(&csr, buf, (size_t)buf_size, _rngf, context); if (n < 0) { lwsl_notice("%s: write csr der failed\n", __func__); goto fail1; } /* we have it in DER, we need it in b64URL */ n = lws_jws_base64_enc((char *)(buf + buf_size) - n, (size_t)n, (char *)dcsr, csr_len); if (n < 0) goto fail1; /* * okay, the CSR is done, last we need the private key in PEM * re-use the DER CSR buf as the result buffer since we cn do it in * one step */ if (mbedtls_pk_write_key_pem(&mpk, buf, (size_t)buf_size)) { lwsl_notice("write key pem failed\n"); goto fail1; } *privkey_pem = (char *)buf; *privkey_len = strlen((const char *)buf); mbedtls_pk_free(&mpk); mbedtls_x509write_csr_free(&csr); return n; fail1: mbedtls_pk_free(&mpk); fail: mbedtls_x509write_csr_free(&csr); free(buf); return -1; } #endif #endif libwebsockets-4.3.5/lib/tls/mbedtls/mbedtls-session.c000066400000000000000000000202601476025525100226530ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" typedef struct lws_tls_session_cache_mbedtls { lws_dll2_t list; mbedtls_ssl_session session; lws_sorted_usec_list_t sul_ttl; /* name is overallocated here */ } lws_tls_scm_t; #define lwsl_tlssess lwsl_info static void __lws_tls_session_destroy(lws_tls_scm_t *ts) { lwsl_tlssess("%s: %s (%u)\n", __func__, (const char *)&ts[1], (unsigned int)(ts->list.owner->count - 1)); lws_sul_cancel(&ts->sul_ttl); mbedtls_ssl_session_free(&ts->session); lws_dll2_remove(&ts->list); /* vh lock */ lws_free(ts); } static lws_tls_scm_t * __lws_tls_session_lookup_by_name(struct lws_vhost *vh, const char *name) { lws_start_foreach_dll(struct lws_dll2 *, p, lws_dll2_get_head(&vh->tls_sessions)) { lws_tls_scm_t *ts = lws_container_of(p, lws_tls_scm_t, list); const char *ts_name = (const char *)&ts[1]; if (!strcmp(name, ts_name)) return ts; } lws_end_foreach_dll(p); return NULL; } /* * If possible, reuse an existing, cached session */ void lws_tls_reuse_session(struct lws *wsi) { char buf[LWS_SESSION_TAG_LEN]; mbedtls_ssl_context *msc; lws_tls_scm_t *ts; if (!wsi->a.vhost || wsi->a.vhost->options & LWS_SERVER_OPTION_DISABLE_TLS_SESSION_CACHE) return; lws_context_lock(wsi->a.context, __func__); /* -------------- cx { */ lws_vhost_lock(wsi->a.vhost); /* -------------- vh { */ if (lws_tls_session_tag_from_wsi(wsi, buf, sizeof(buf))) goto bail; ts = __lws_tls_session_lookup_by_name(wsi->a.vhost, buf); if (!ts) { lwsl_tlssess("%s: no existing session for %s\n", __func__, buf); goto bail; } lwsl_tlssess("%s: %s\n", __func__, (const char *)&ts[1]); wsi->tls_session_reused = 1; msc = SSL_mbedtls_ssl_context_from_SSL(wsi->tls.ssl); mbedtls_ssl_set_session(msc, &ts->session); /* keep our session list sorted in lru -> mru order */ lws_dll2_remove(&ts->list); lws_dll2_add_tail(&ts->list, &wsi->a.vhost->tls_sessions); bail: lws_vhost_unlock(wsi->a.vhost); /* } vh -------------- */ lws_context_unlock(wsi->a.context); /* } cx -------------- */ } int lws_tls_session_is_reused(struct lws *wsi) { #if defined(LWS_WITH_CLIENT) struct lws *nwsi = lws_get_network_wsi(wsi); if (!nwsi) return 0; return nwsi->tls_session_reused; #else return 0; #endif } static int lws_tls_session_destroy_dll(struct lws_dll2 *d, void *user) { lws_tls_scm_t *ts = lws_container_of(d, lws_tls_scm_t, list); __lws_tls_session_destroy(ts); return 0; } void lws_tls_session_vh_destroy(struct lws_vhost *vh) { lws_dll2_foreach_safe(&vh->tls_sessions, NULL, lws_tls_session_destroy_dll); } static void lws_tls_session_expiry_cb(lws_sorted_usec_list_t *sul) { lws_tls_scm_t *ts = lws_container_of(sul, lws_tls_scm_t, sul_ttl); struct lws_vhost *vh = lws_container_of(ts->list.owner, struct lws_vhost, tls_sessions); lws_context_lock(vh->context, __func__); /* -------------- cx { */ lws_vhost_lock(vh); /* -------------- vh { */ __lws_tls_session_destroy(ts); lws_vhost_unlock(vh); /* } vh -------------- */ lws_context_unlock(vh->context); /* } cx -------------- */ } /* * Called after SSL_accept on the wsi */ int lws_tls_session_new_mbedtls(struct lws *wsi) { char buf[LWS_SESSION_TAG_LEN]; mbedtls_ssl_context *msc; struct lws_vhost *vh; lws_tls_scm_t *ts; size_t nl; #if !defined(LWS_WITH_NO_LOGS) && defined(_DEBUG) const char *disposition = "reuse"; #endif vh = wsi->a.vhost; if (vh->options & LWS_SERVER_OPTION_DISABLE_TLS_SESSION_CACHE) return 0; if (lws_tls_session_tag_from_wsi(wsi, buf, sizeof(buf))) return 0; nl = strlen(buf); msc = SSL_mbedtls_ssl_context_from_SSL(wsi->tls.ssl); lws_context_lock(vh->context, __func__); /* -------------- cx { */ lws_vhost_lock(vh); /* -------------- vh { */ ts = __lws_tls_session_lookup_by_name(vh, buf); if (!ts) { /* * We have to make our own, new session */ if (vh->tls_sessions.count == vh->tls_session_cache_max) { /* * We have reached the vhost's session cache limit, * prune the LRU / head */ ts = lws_container_of(vh->tls_sessions.head, lws_tls_scm_t, list); lwsl_tlssess("%s: pruning oldest session (hit max %u)\n", __func__, (unsigned int)vh->tls_session_cache_max); lws_vhost_lock(vh); /* -------------- vh { */ __lws_tls_session_destroy(ts); lws_vhost_unlock(vh); /* } vh -------------- */ } ts = lws_malloc(sizeof(*ts) + nl + 1, __func__); if (!ts) goto bail; memset(ts, 0, sizeof(*ts)); memcpy(&ts[1], buf, nl + 1); if (mbedtls_ssl_get_session(msc, &ts->session)) { lws_free(ts); /* no joy for whatever reason */ goto bail; } lws_dll2_add_tail(&ts->list, &vh->tls_sessions); lws_sul_schedule(wsi->a.context, wsi->tsi, &ts->sul_ttl, lws_tls_session_expiry_cb, (int64_t)vh->tls.tls_session_cache_ttl * LWS_US_PER_SEC); #if !defined(LWS_WITH_NO_LOGS) && defined(_DEBUG) disposition = "new"; #endif } else { mbedtls_ssl_session_free(&ts->session); if (mbedtls_ssl_get_session(msc, &ts->session)) /* no joy for whatever reason */ goto bail; /* keep our session list sorted in lru -> mru order */ lws_dll2_remove(&ts->list); lws_dll2_add_tail(&ts->list, &vh->tls_sessions); } lws_vhost_unlock(vh); /* } vh -------------- */ lws_context_unlock(vh->context); /* } cx -------------- */ lwsl_tlssess("%s: %s: %s %s, (%s:%u)\n", __func__, wsi->lc.gutag, disposition, buf, vh->name, (unsigned int)vh->tls_sessions.count); /* * indicate we will hold on to the SSL_SESSION reference, and take * responsibility to call SSL_SESSION_free() on it ourselves */ return 1; bail: lws_vhost_unlock(vh); /* } vh -------------- */ lws_context_unlock(vh->context); /* } cx -------------- */ return 0; } #if defined(LWS_TLS_SYNTHESIZE_CB) /* * On openssl, there is an async cb coming when the server issues the session * information on the link, so we can pick it up and update the cache at the * right time. * * On mbedtls and some version at least of borning ssl, this cb is either not * part of the tls library apis or fails to arrive. */ void lws_sess_cache_synth_cb(lws_sorted_usec_list_t *sul) { struct lws_lws_tls *tls = lws_container_of(sul, struct lws_lws_tls, sul_cb_synth); struct lws *wsi = lws_container_of(tls, struct lws, tls); lws_tls_session_new_mbedtls(wsi); } #endif void lws_tls_session_cache(struct lws_vhost *vh, uint32_t ttl) { /* Default to 1hr max recommendation from RFC5246 F.1.4 */ vh->tls.tls_session_cache_ttl = !ttl ? 3600 : ttl; } int lws_tls_session_dump_save(struct lws_vhost *vh, const char *host, uint16_t port, lws_tls_sess_cb_t cb_save, void *opq) { /* there seems no serialization / deserialization helper in mbedtls */ lwsl_warn("%s: only supported on openssl atm\n", __func__); return 1; } int lws_tls_session_dump_load(struct lws_vhost *vh, const char *host, uint16_t port, lws_tls_sess_cb_t cb_load, void *opq) { /* there seems no serialization / deserialization helper in mbedtls */ lwsl_warn("%s: only supported on openssl atm\n", __func__); return 1; } libwebsockets-4.3.5/lib/tls/mbedtls/mbedtls-ssl.c000066400000000000000000000221451476025525100217750ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "private-lib-tls-mbedtls.h" void lws_ssl_destroy(struct lws_vhost *vhost) { if (!lws_check_opt(vhost->context->options, LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT)) return; if (vhost->tls.ssl_ctx) SSL_CTX_free(vhost->tls.ssl_ctx); if (!vhost->tls.user_supplied_ssl_ctx && vhost->tls.ssl_client_ctx) SSL_CTX_free(vhost->tls.ssl_client_ctx); if (vhost->tls.x509_client_CA) X509_free(vhost->tls.x509_client_CA); } int lws_ssl_capable_read(struct lws *wsi, unsigned char *buf, size_t len) { struct lws_context *context = wsi->a.context; struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; int n = 0, m; if (!wsi->tls.ssl) return lws_ssl_capable_read_no_ssl(wsi, buf, len); errno = 0; n = SSL_read(wsi->tls.ssl, buf, (int)len); #if defined(LWS_PLAT_FREERTOS) if (!n && errno == LWS_ENOTCONN) { lwsl_debug("%s: SSL_read ENOTCONN\n", lws_wsi_tag(wsi)); return LWS_SSL_CAPABLE_ERROR; } #endif lwsl_debug("%s: %s: SSL_read says %d\n", __func__, lws_wsi_tag(wsi), n); /* manpage: returning 0 means connection shut down */ if (!n) { wsi->socket_is_permanently_unusable = 1; return LWS_SSL_CAPABLE_ERROR; } if (n < 0) { m = SSL_get_error(wsi->tls.ssl, n); lwsl_debug("%s: %s: ssl err %d errno %d\n", __func__, lws_wsi_tag(wsi), m, errno); if (errno == LWS_ENOTCONN) /* If the socket isn't connected anymore, bail out. */ goto do_err1; #if defined(LWS_PLAT_FREERTOS) if (errno == LWS_ECONNABORTED) goto do_err1; #endif if (m == SSL_ERROR_ZERO_RETURN || m == SSL_ERROR_SYSCALL) goto do_err; if (m == SSL_ERROR_WANT_READ || SSL_want_read(wsi->tls.ssl)) { lwsl_debug("%s: WANT_READ\n", __func__); lwsl_debug("%s: LWS_SSL_CAPABLE_MORE_SERVICE\n", lws_wsi_tag(wsi)); return LWS_SSL_CAPABLE_MORE_SERVICE; } if (m == SSL_ERROR_WANT_WRITE || SSL_want_write(wsi->tls.ssl)) { lwsl_info("%s: WANT_WRITE\n", __func__); lwsl_debug("%s: LWS_SSL_CAPABLE_MORE_SERVICE\n", lws_wsi_tag(wsi)); wsi->tls_read_wanted_write = 1; lws_callback_on_writable(wsi); return LWS_SSL_CAPABLE_MORE_SERVICE; } do_err1: wsi->socket_is_permanently_unusable = 1; do_err: #if defined(LWS_WITH_SYS_METRICS) if (wsi->a.vhost) lws_metric_event(wsi->a.vhost->mt_traffic_rx, METRES_NOGO, 0); #endif return LWS_SSL_CAPABLE_ERROR; } #if defined(LWS_TLS_LOG_PLAINTEXT_RX) /* * If using mbedtls type tls library, this is the earliest point for all * paths to dump what was received as decrypted data from the tls tunnel */ lwsl_notice("%s: len %d\n", __func__, n); lwsl_hexdump_notice(buf, (size_t)n); #endif #if defined(LWS_WITH_SYS_METRICS) if (wsi->a.vhost) lws_metric_event(wsi->a.vhost->mt_traffic_rx, METRES_GO /* rx */, (u_mt_t)n); #endif /* * if it was our buffer that limited what we read, * check if SSL has additional data pending inside SSL buffers. * * Because these won't signal at the network layer with POLLIN * and if we don't realize, this data will sit there forever */ if (n != (int)len) goto bail; if (!wsi->tls.ssl) goto bail; if (SSL_pending(wsi->tls.ssl)) { if (lws_dll2_is_detached(&wsi->tls.dll_pending_tls)) lws_dll2_add_head(&wsi->tls.dll_pending_tls, &pt->tls.dll_pending_tls_owner); } else __lws_ssl_remove_wsi_from_buffered_list(wsi); return n; bail: lws_ssl_remove_wsi_from_buffered_list(wsi); return n; } int lws_ssl_pending(struct lws *wsi) { if (!wsi->tls.ssl) return 0; return SSL_pending(wsi->tls.ssl); } int lws_ssl_capable_write(struct lws *wsi, unsigned char *buf, size_t len) { int n, m; #if defined(LWS_TLS_LOG_PLAINTEXT_TX) /* * If using mbedtls type tls library, this is the last point for all * paths before sending data into the tls tunnel, where you can dump it * and see what is being sent. */ lwsl_notice("%s: len %d\n", __func__, (int)len); lwsl_hexdump_notice(buf, len); #endif if (!wsi->tls.ssl) return lws_ssl_capable_write_no_ssl(wsi, buf, len); n = SSL_write(wsi->tls.ssl, buf, (int)len); if (n > 0) { #if defined(LWS_WITH_SYS_METRICS) if (wsi->a.vhost) lws_metric_event(wsi->a.vhost->mt_traffic_tx, METRES_GO, (u_mt_t)n); #endif return n; } m = SSL_get_error(wsi->tls.ssl, n); if (m != SSL_ERROR_SYSCALL) { if (m == SSL_ERROR_WANT_READ || SSL_want_read(wsi->tls.ssl)) { lwsl_notice("%s: want read\n", __func__); return LWS_SSL_CAPABLE_MORE_SERVICE; } if (m == SSL_ERROR_WANT_WRITE || SSL_want_write(wsi->tls.ssl)) { lws_set_blocking_send(wsi); lwsl_debug("%s: want write\n", __func__); return LWS_SSL_CAPABLE_MORE_SERVICE; } } lwsl_debug("%s failed: %d\n",__func__, m); wsi->socket_is_permanently_unusable = 1; #if defined(LWS_WITH_SYS_METRICS) if (wsi->a.vhost) lws_metric_event(wsi->a.vhost->mt_traffic_tx, METRES_NOGO, (u_mt_t)n); #endif return LWS_SSL_CAPABLE_ERROR; } int openssl_SSL_CTX_private_data_index; void lws_ssl_info_callback(const SSL *ssl, int where, int ret) { struct lws *wsi; struct lws_context *context; struct lws_ssl_info si; context = (struct lws_context *)SSL_CTX_get_ex_data( SSL_get_SSL_CTX(ssl), openssl_SSL_CTX_private_data_index); if (!context) return; wsi = wsi_from_fd(context, SSL_get_fd(ssl)); if (!wsi) return; if (!(where & wsi->a.vhost->tls.ssl_info_event_mask)) return; si.where = where; si.ret = ret; if (user_callback_handle_rxflow(wsi->a.protocol->callback, wsi, LWS_CALLBACK_SSL_INFO, wsi->user_space, &si, 0)) lws_set_timeout(wsi, PENDING_TIMEOUT_KILLED_BY_SSL_INFO, -1); } int lws_ssl_close(struct lws *wsi) { lws_sockfd_type n; if (!wsi->tls.ssl) return 0; /* not handled */ #if defined (LWS_HAVE_SSL_SET_INFO_CALLBACK) /* kill ssl callbacks, becausse we will remove the fd from the * table linking it to the wsi */ if (wsi->a.vhost->tls.ssl_info_event_mask) SSL_set_info_callback(wsi->tls.ssl, NULL); #endif #if defined(LWS_TLS_SYNTHESIZE_CB) lws_sul_cancel(&wsi->tls.sul_cb_synth); /* * ... check the session in case it did not live long enough to get * the scheduled callback to sample it */ lws_sess_cache_synth_cb(&wsi->tls.sul_cb_synth); #endif n = SSL_get_fd(wsi->tls.ssl); if (!wsi->socket_is_permanently_unusable) SSL_shutdown(wsi->tls.ssl); compatible_close(n); SSL_free(wsi->tls.ssl); wsi->tls.ssl = NULL; lws_tls_restrict_return(wsi); return 1; /* handled */ } void lws_ssl_SSL_CTX_destroy(struct lws_vhost *vhost) { if (vhost->tls.ssl_ctx) SSL_CTX_free(vhost->tls.ssl_ctx); if (!vhost->tls.user_supplied_ssl_ctx && vhost->tls.ssl_client_ctx) SSL_CTX_free(vhost->tls.ssl_client_ctx); #if defined(LWS_WITH_ACME) lws_tls_acme_sni_cert_destroy(vhost); #endif } void lws_ssl_context_destroy(struct lws_context *context) { } lws_tls_ctx * lws_tls_ctx_from_wsi(struct lws *wsi) { if (!wsi->tls.ssl) return NULL; return SSL_get_SSL_CTX(wsi->tls.ssl); } enum lws_ssl_capable_status __lws_tls_shutdown(struct lws *wsi) { int n = SSL_shutdown(wsi->tls.ssl); lwsl_debug("SSL_shutdown=%d for fd %d\n", n, wsi->desc.sockfd); switch (n) { case 1: /* successful completion */ (void)shutdown(wsi->desc.sockfd, SHUT_WR); return LWS_SSL_CAPABLE_DONE; case 0: /* needs a retry */ __lws_change_pollfd(wsi, 0, LWS_POLLIN); return LWS_SSL_CAPABLE_MORE_SERVICE; default: /* fatal error, or WANT */ n = SSL_get_error(wsi->tls.ssl, n); if (n != SSL_ERROR_SYSCALL && n != SSL_ERROR_SSL) { if (SSL_want_read(wsi->tls.ssl)) { lwsl_debug("(wants read)\n"); __lws_change_pollfd(wsi, 0, LWS_POLLIN); return LWS_SSL_CAPABLE_MORE_SERVICE_READ; } if (SSL_want_write(wsi->tls.ssl)) { lwsl_debug("(wants write)\n"); __lws_change_pollfd(wsi, 0, LWS_POLLOUT); return LWS_SSL_CAPABLE_MORE_SERVICE_WRITE; } } return LWS_SSL_CAPABLE_ERROR; } } static int tops_fake_POLLIN_for_buffered_mbedtls(struct lws_context_per_thread *pt) { return lws_tls_fake_POLLIN_for_buffered(pt); } const struct lws_tls_ops tls_ops_mbedtls = { /* fake_POLLIN_for_buffered */ tops_fake_POLLIN_for_buffered_mbedtls, }; libwebsockets-4.3.5/lib/tls/mbedtls/mbedtls-tls.c000066400000000000000000000033041476025525100217720ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "private-lib-tls-mbedtls.h" void lws_tls_err_describe_clear(void) { } int lws_context_init_ssl_library(struct lws_context *cx, const struct lws_context_creation_info *info) { lwsl_info(" Compiled with MbedTLS support"); if (!lws_check_opt(info->options, LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT)) lwsl_info(" SSL disabled: no " "LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT"); return 0; } void lws_context_deinit_ssl_library(struct lws_context *context) { } libwebsockets-4.3.5/lib/tls/mbedtls/mbedtls-x509.c000066400000000000000000000352261476025525100217050ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "private-lib-tls-mbedtls.h" #include #if defined(LWS_PLAT_OPTEE) || defined(OPTEE_DEV_KIT) struct tm { int tm_sec; // seconds [0,61] int tm_min; // minutes [0,59] int tm_hour; // hour [0,23] int tm_mday; // day of month [1,31] int tm_mon; // month of year [0,11] int tm_year; // years since 1900 int tm_wday; // day of week [0,6] (Sunday = 0) int tm_yday; // day of year [0,365] int tm_isdst; // daylight savings flag }; time_t mktime(struct tm *t) { return (time_t)0; } #endif static time_t lws_tls_mbedtls_time_to_unix(mbedtls_x509_time *xtime) { struct tm t; if (!xtime || !xtime->MBEDTLS_PRIVATE_V30_ONLY(year) || xtime->MBEDTLS_PRIVATE_V30_ONLY(year) < 0) return (time_t)(long long)-1; memset(&t, 0, sizeof(t)); t.tm_year = xtime->MBEDTLS_PRIVATE_V30_ONLY(year) - 1900; t.tm_mon = xtime->MBEDTLS_PRIVATE_V30_ONLY(mon) - 1; /* mbedtls months are 1+, tm are 0+ */ t.tm_mday = xtime->MBEDTLS_PRIVATE_V30_ONLY(day) - 1; /* mbedtls days are 1+, tm are 0+ */ t.tm_hour = xtime->MBEDTLS_PRIVATE_V30_ONLY(hour); t.tm_min = xtime->MBEDTLS_PRIVATE_V30_ONLY(min); t.tm_sec = xtime->MBEDTLS_PRIVATE_V30_ONLY(sec); t.tm_isdst = -1; return mktime(&t); } static int lws_tls_mbedtls_get_x509_name(mbedtls_x509_name *name, union lws_tls_cert_info_results *buf, size_t len) { int r = -1; buf->ns.len = 0; while (name) { /* if (MBEDTLS_OID_CMP(type, &name->oid)) { name = name->next; continue; } */ lws_strnncpy(&buf->ns.name[buf->ns.len], (const char *)name->MBEDTLS_PRIVATE_V30_ONLY(val).MBEDTLS_PRIVATE_V30_ONLY(p), name->MBEDTLS_PRIVATE_V30_ONLY(val).MBEDTLS_PRIVATE_V30_ONLY(len), len - (size_t)buf->ns.len); buf->ns.len = (int)strlen(buf->ns.name); r = 0; name = name->MBEDTLS_PRIVATE_V30_ONLY(next); } return r; } int lws_tls_mbedtls_cert_info(mbedtls_x509_crt *x509, enum lws_tls_cert_info type, union lws_tls_cert_info_results *buf, size_t len) { mbedtls_x509_buf skid; lws_mbedtls_x509_authority akid; if (!x509) return -1; if (!len) len = sizeof(buf->ns.name); switch (type) { case LWS_TLS_CERT_INFO_VALIDITY_FROM: buf->time = lws_tls_mbedtls_time_to_unix(&x509->MBEDTLS_PRIVATE_V30_ONLY(valid_from)); if (buf->time == (time_t)(long long)-1) return -1; break; case LWS_TLS_CERT_INFO_VALIDITY_TO: buf->time = lws_tls_mbedtls_time_to_unix(&x509->MBEDTLS_PRIVATE_V30_ONLY(valid_to)); if (buf->time == (time_t)(long long)-1) return -1; break; case LWS_TLS_CERT_INFO_COMMON_NAME: return lws_tls_mbedtls_get_x509_name(&x509->MBEDTLS_PRIVATE_V30_ONLY(subject), buf, len); case LWS_TLS_CERT_INFO_ISSUER_NAME: return lws_tls_mbedtls_get_x509_name(&x509->MBEDTLS_PRIVATE_V30_ONLY(issuer), buf, len); case LWS_TLS_CERT_INFO_USAGE: buf->usage = x509->MBEDTLS_PRIVATE(key_usage); break; case LWS_TLS_CERT_INFO_OPAQUE_PUBLIC_KEY: { char *p = buf->ns.name; size_t r = len, u; switch (mbedtls_pk_get_type(&x509->MBEDTLS_PRIVATE_V30_ONLY(pk))) { case MBEDTLS_PK_RSA: { mbedtls_rsa_context *rsa = mbedtls_pk_rsa(x509->MBEDTLS_PRIVATE_V30_ONLY(pk)); if (mbedtls_mpi_write_string(&rsa->MBEDTLS_PRIVATE(N), 16, p, r, &u)) return -1; r -= u; p += u; if (mbedtls_mpi_write_string(&rsa->MBEDTLS_PRIVATE(E), 16, p, r, &u)) return -1; p += u; buf->ns.len = lws_ptr_diff(p, buf->ns.name); break; } case MBEDTLS_PK_ECKEY: { mbedtls_ecp_keypair *ecp = mbedtls_pk_ec(x509->MBEDTLS_PRIVATE_V30_ONLY(pk)); if (mbedtls_mpi_write_string(&ecp->MBEDTLS_PRIVATE(Q).MBEDTLS_PRIVATE(X), 16, p, r, &u)) return -1; r -= u; p += u; if (mbedtls_mpi_write_string(&ecp->MBEDTLS_PRIVATE(Q).MBEDTLS_PRIVATE(Y), 16, p, r, &u)) return -1; r -= u; p += u; if (mbedtls_mpi_write_string(&ecp->MBEDTLS_PRIVATE(Q).MBEDTLS_PRIVATE(Z), 16, p, r, &u)) return -1; p += u; buf->ns.len = lws_ptr_diff(p, buf->ns.name); break; } default: lwsl_notice("%s: x509 has unsupported pubkey type %d\n", __func__, mbedtls_pk_get_type(&x509->MBEDTLS_PRIVATE_V30_ONLY(pk))); return -1; } break; } case LWS_TLS_CERT_INFO_DER_RAW: buf->ns.len = (int)x509->MBEDTLS_PRIVATE_V30_ONLY(raw).MBEDTLS_PRIVATE_V30_ONLY(len); if (len < x509->MBEDTLS_PRIVATE_V30_ONLY(raw).MBEDTLS_PRIVATE_V30_ONLY(len)) /* * The buffer is too small and the attempt failed, but * the required object length is in buf->ns.len */ return -1; memcpy(buf->ns.name, x509->MBEDTLS_PRIVATE_V30_ONLY(raw).MBEDTLS_PRIVATE_V30_ONLY(p), x509->MBEDTLS_PRIVATE_V30_ONLY(raw).MBEDTLS_PRIVATE_V30_ONLY(len)); break; case LWS_TLS_CERT_INFO_AUTHORITY_KEY_ID: memset(&akid, 0, sizeof(akid)); memset(&skid, 0, sizeof(skid)); lws_x509_get_crt_ext(x509, &skid, &akid); if (akid.keyIdentifier.MBEDTLS_PRIVATE_V30_ONLY(tag) != MBEDTLS_ASN1_OCTET_STRING) return 1; buf->ns.len = (int)akid.keyIdentifier.MBEDTLS_PRIVATE_V30_ONLY(len); if (!akid.keyIdentifier.MBEDTLS_PRIVATE_V30_ONLY(p) || len < (size_t)buf->ns.len) return -1; memcpy(buf->ns.name, akid.keyIdentifier.MBEDTLS_PRIVATE_V30_ONLY(p), (size_t)buf->ns.len); break; case LWS_TLS_CERT_INFO_AUTHORITY_KEY_ID_ISSUER: { mbedtls_x509_sequence * ip; memset(&akid, 0, sizeof(akid)); memset(&skid, 0, sizeof(skid)); lws_x509_get_crt_ext(x509, &skid, &akid); ip = &akid.authorityCertIssuer; buf->ns.len = 0; while (ip) { if (akid.keyIdentifier.MBEDTLS_PRIVATE_V30_ONLY(tag) != MBEDTLS_ASN1_OCTET_STRING || !ip->MBEDTLS_PRIVATE_V30_ONLY(buf).MBEDTLS_PRIVATE_V30_ONLY(p) || ip->MBEDTLS_PRIVATE_V30_ONLY(buf).MBEDTLS_PRIVATE_V30_ONLY(len) < 9 || len < (size_t)ip->MBEDTLS_PRIVATE_V30_ONLY(buf).MBEDTLS_PRIVATE_V30_ONLY(len) - 9u) break; memcpy(buf->ns.name + buf->ns.len, ip->MBEDTLS_PRIVATE_V30_ONLY(buf).MBEDTLS_PRIVATE_V30_ONLY(p), (size_t)ip->MBEDTLS_PRIVATE_V30_ONLY(buf).MBEDTLS_PRIVATE_V30_ONLY(len) - 9); buf->ns.len = buf->ns.len + (int)ip->MBEDTLS_PRIVATE_V30_ONLY(buf).MBEDTLS_PRIVATE_V30_ONLY(len) - 9; ip = ip->MBEDTLS_PRIVATE_V30_ONLY(next); } break; } case LWS_TLS_CERT_INFO_AUTHORITY_KEY_ID_SERIAL: memset(&akid, 0, sizeof(akid)); memset(&skid, 0, sizeof(skid)); lws_x509_get_crt_ext(x509, &skid, &akid); if (akid.authorityCertSerialNumber.MBEDTLS_PRIVATE_V30_ONLY(tag) != MBEDTLS_ASN1_OCTET_STRING) return 1; buf->ns.len = (int)akid.authorityCertSerialNumber.MBEDTLS_PRIVATE_V30_ONLY(len); if (!akid.authorityCertSerialNumber.MBEDTLS_PRIVATE_V30_ONLY(p) || len < (size_t)buf->ns.len) return -1; memcpy(buf->ns.name, akid.authorityCertSerialNumber. MBEDTLS_PRIVATE_V30_ONLY(p), (size_t)buf->ns.len); break; case LWS_TLS_CERT_INFO_SUBJECT_KEY_ID: memset(&akid, 0, sizeof(akid)); memset(&skid, 0, sizeof(skid)); lws_x509_get_crt_ext(x509, &skid, &akid); if (skid.MBEDTLS_PRIVATE_V30_ONLY(tag) != MBEDTLS_ASN1_OCTET_STRING) return 1; buf->ns.len = (int)skid.MBEDTLS_PRIVATE_V30_ONLY(len); if (len < (size_t)buf->ns.len) return -1; memcpy(buf->ns.name, skid.MBEDTLS_PRIVATE_V30_ONLY(p), (size_t)buf->ns.len); break; default: return -1; } return 0; } #if defined(LWS_WITH_NETWORK) int lws_tls_vhost_cert_info(struct lws_vhost *vhost, enum lws_tls_cert_info type, union lws_tls_cert_info_results *buf, size_t len) { mbedtls_x509_crt *x509; x509 = ssl_ctx_get_mbedtls_x509_crt(vhost->tls.ssl_ctx); return lws_tls_mbedtls_cert_info(x509, type, buf, len); } int lws_tls_peer_cert_info(struct lws *wsi, enum lws_tls_cert_info type, union lws_tls_cert_info_results *buf, size_t len) { mbedtls_x509_crt *x509; wsi = lws_get_network_wsi(wsi); x509 = ssl_get_peer_mbedtls_x509_crt(wsi->tls.ssl); if (!x509) return -1; switch (type) { case LWS_TLS_CERT_INFO_VERIFIED: buf->verified = SSL_get_verify_result(wsi->tls.ssl) == X509_V_OK; return 0; default: return lws_tls_mbedtls_cert_info(x509, type, buf, len); } return -1; } #endif int lws_x509_info(struct lws_x509_cert *x509, enum lws_tls_cert_info type, union lws_tls_cert_info_results *buf, size_t len) { return lws_tls_mbedtls_cert_info(&x509->cert, type, buf, len); } int lws_x509_create(struct lws_x509_cert **x509) { *x509 = lws_malloc(sizeof(**x509), __func__); return !(*x509); } /* * Parse one DER-encoded or one or more concatenated PEM-encoded certificates * and add them to the chained list. */ int lws_x509_parse_from_pem(struct lws_x509_cert *x509, const void *pem, size_t len) { int ret; mbedtls_x509_crt_init(&x509->cert); ret = mbedtls_x509_crt_parse(&x509->cert, pem, len); if (ret) { if (ret > 0) mbedtls_x509_crt_free(&x509->cert); lwsl_err("%s: unable to parse PEM cert: -0x%x\n", __func__, -ret); return -1; } return 0; } int lws_x509_verify(struct lws_x509_cert *x509, struct lws_x509_cert *trusted, const char *common_name) { uint32_t flags = 0; int ret; ret = mbedtls_x509_crt_verify_with_profile(&x509->cert, &trusted->cert, NULL, &mbedtls_x509_crt_profile_next, common_name, &flags, NULL, NULL); if (ret) { lwsl_err("%s: unable to parse PEM cert: -0x%x\n", __func__, -ret); return -1; } return 0; } #if defined(LWS_WITH_JOSE) int lws_x509_public_to_jwk(struct lws_jwk *jwk, struct lws_x509_cert *x509, const char *curves, int rsa_min_bits) { int kt = (int)mbedtls_pk_get_type(&x509->cert.MBEDTLS_PRIVATE_V30_ONLY(pk)), n, count = 0, ret = -1; mbedtls_rsa_context *rsactx; mbedtls_ecp_keypair *ecpctx; mbedtls_mpi *mpi[LWS_GENCRYPTO_RSA_KEYEL_COUNT]; memset(jwk, 0, sizeof(*jwk)); switch (kt) { case MBEDTLS_PK_RSA: lwsl_notice("%s: RSA key\n", __func__); jwk->kty = LWS_GENCRYPTO_KTY_RSA; rsactx = mbedtls_pk_rsa(x509->cert.MBEDTLS_PRIVATE_V30_ONLY(pk)); mpi[LWS_GENCRYPTO_RSA_KEYEL_E] = &rsactx->MBEDTLS_PRIVATE(E); mpi[LWS_GENCRYPTO_RSA_KEYEL_N] = &rsactx->MBEDTLS_PRIVATE(N); mpi[LWS_GENCRYPTO_RSA_KEYEL_D] = &rsactx->MBEDTLS_PRIVATE(D); mpi[LWS_GENCRYPTO_RSA_KEYEL_P] = &rsactx->MBEDTLS_PRIVATE(P); mpi[LWS_GENCRYPTO_RSA_KEYEL_Q] = &rsactx->MBEDTLS_PRIVATE(Q); mpi[LWS_GENCRYPTO_RSA_KEYEL_DP] = &rsactx->MBEDTLS_PRIVATE(DP); mpi[LWS_GENCRYPTO_RSA_KEYEL_DQ] = &rsactx->MBEDTLS_PRIVATE(DQ); mpi[LWS_GENCRYPTO_RSA_KEYEL_QI] = &rsactx->MBEDTLS_PRIVATE(QP); count = LWS_GENCRYPTO_RSA_KEYEL_QI + 1; n = LWS_GENCRYPTO_RSA_KEYEL_E; break; case MBEDTLS_PK_ECKEY: lwsl_notice("%s: EC key\n", __func__); jwk->kty = LWS_GENCRYPTO_KTY_EC; ecpctx = mbedtls_pk_ec(x509->cert.MBEDTLS_PRIVATE_V30_ONLY(pk)); mpi[LWS_GENCRYPTO_EC_KEYEL_X] = &ecpctx->MBEDTLS_PRIVATE(Q).MBEDTLS_PRIVATE(X); mpi[LWS_GENCRYPTO_EC_KEYEL_D] = &ecpctx->MBEDTLS_PRIVATE(d); mpi[LWS_GENCRYPTO_EC_KEYEL_Y] = &ecpctx->MBEDTLS_PRIVATE(Q).MBEDTLS_PRIVATE(Y); if (lws_genec_confirm_curve_allowed_by_tls_id(curves, (int)ecpctx->MBEDTLS_PRIVATE(grp).id, jwk)) /* already logged */ goto bail; count = LWS_GENCRYPTO_EC_KEYEL_COUNT; n = LWS_GENCRYPTO_EC_KEYEL_X; break; default: lwsl_err("%s: key type %d not supported\n", __func__, kt); return -1; } for (; n < count; n++) { if (!mbedtls_mpi_size(mpi[n])) continue; jwk->e[n].buf = lws_malloc(mbedtls_mpi_size(mpi[n]), "certjwk"); if (!jwk->e[n].buf) goto bail; jwk->e[n].len = (uint32_t)mbedtls_mpi_size(mpi[n]); mbedtls_mpi_write_binary(mpi[n], jwk->e[n].buf, jwk->e[n].len); } ret = 0; bail: /* jwk destroy will clean up partials */ if (ret) lws_jwk_destroy(jwk); return ret; } int lws_x509_jwk_privkey_pem(struct lws_context *cx, struct lws_jwk *jwk, void *pem, size_t len, const char *passphrase) { mbedtls_rsa_context *rsactx; mbedtls_ecp_keypair *ecpctx; mbedtls_pk_context pk; mbedtls_mpi *mpi[LWS_GENCRYPTO_RSA_KEYEL_COUNT]; int n, ret = -1, count = 0; mbedtls_pk_init(&pk); n = 0; if (passphrase) n = (int)strlen(passphrase); n = mbedtls_pk_parse_key(&pk, pem, len, (uint8_t *)passphrase, (unsigned int)n #if defined(MBEDTLS_VERSION_NUMBER) && MBEDTLS_VERSION_NUMBER >= 0x03000000 , mbedtls_ctr_drbg_random, &cx->mcdc #endif ); if (n) { lwsl_err("%s: parse PEM key failed: -0x%x\n", __func__, -n); return -1; } /* the incoming private key type */ switch (mbedtls_pk_get_type(&pk)) { case MBEDTLS_PK_RSA: if (jwk->kty != LWS_GENCRYPTO_KTY_RSA) { lwsl_err("%s: RSA privkey, non-RSA jwk\n", __func__); goto bail; } rsactx = mbedtls_pk_rsa(pk); mpi[LWS_GENCRYPTO_RSA_KEYEL_D] = &rsactx->MBEDTLS_PRIVATE(D); mpi[LWS_GENCRYPTO_RSA_KEYEL_P] = &rsactx->MBEDTLS_PRIVATE(P); mpi[LWS_GENCRYPTO_RSA_KEYEL_Q] = &rsactx->MBEDTLS_PRIVATE(Q); n = LWS_GENCRYPTO_RSA_KEYEL_D; count = LWS_GENCRYPTO_RSA_KEYEL_Q + 1; break; case MBEDTLS_PK_ECKEY: if (jwk->kty != LWS_GENCRYPTO_KTY_EC) { lwsl_err("%s: EC privkey, non-EC jwk\n", __func__); goto bail; } ecpctx = mbedtls_pk_ec(pk); mpi[LWS_GENCRYPTO_EC_KEYEL_D] = &ecpctx->MBEDTLS_PRIVATE(d); n = LWS_GENCRYPTO_EC_KEYEL_D; count = n + 1; break; default: lwsl_err("%s: unusable key type %d\n", __func__, mbedtls_pk_get_type(&pk)); goto bail; } for (; n < count; n++) { if (!mbedtls_mpi_size(mpi[n])) { lwsl_err("%s: empty privkey\n", __func__); goto bail; } jwk->e[n].buf = lws_malloc(mbedtls_mpi_size(mpi[n]), "certjwk"); if (!jwk->e[n].buf) goto bail; jwk->e[n].len = (uint32_t)mbedtls_mpi_size(mpi[n]); mbedtls_mpi_write_binary(mpi[n], jwk->e[n].buf, jwk->e[n].len); } ret = 0; bail: mbedtls_pk_free(&pk); return ret; } #endif void lws_x509_destroy(struct lws_x509_cert **x509) { if (!*x509) return; mbedtls_x509_crt_free(&(*x509)->cert); lws_free_set_NULL(*x509); } libwebsockets-4.3.5/lib/tls/mbedtls/private-lib-tls-mbedtls.h000066400000000000000000000043731476025525100242220ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * gencrypto mbedtls-specific helper declarations */ #include #include struct lws_x509_cert { mbedtls_x509_crt cert; /* has a .next for linked-list / chain */ }; typedef struct lws_mbedtls_x509_authority { mbedtls_x509_buf keyIdentifier; mbedtls_x509_sequence authorityCertIssuer; mbedtls_x509_buf authorityCertSerialNumber; mbedtls_x509_buf raw; } lws_mbedtls_x509_authority; mbedtls_md_type_t lws_gencrypto_mbedtls_hash_to_MD_TYPE(enum lws_genhash_types hash_type); int lws_gencrypto_mbedtls_rngf(void *context, unsigned char *buf, size_t len); int lws_tls_session_new_mbedtls(struct lws *wsi); int lws_tls_mbedtls_cert_info(mbedtls_x509_crt *x509, enum lws_tls_cert_info type, union lws_tls_cert_info_results *buf, size_t len); int lws_x509_get_crt_ext(mbedtls_x509_crt *crt, mbedtls_x509_buf *skid, lws_mbedtls_x509_authority *akid); #if (MBEDTLS_VERSION_MAJOR == 3) && (MBEDTLS_VERSION_MINOR >= 5) int mbedtls_x509_get_name(unsigned char **p, const unsigned char *end, mbedtls_x509_name *cur); #endif libwebsockets-4.3.5/lib/tls/mbedtls/wrapper/000077500000000000000000000000001476025525100210545ustar00rootroot00000000000000libwebsockets-4.3.5/lib/tls/mbedtls/wrapper/include/000077500000000000000000000000001476025525100224775ustar00rootroot00000000000000libwebsockets-4.3.5/lib/tls/mbedtls/wrapper/include/internal/000077500000000000000000000000001476025525100243135ustar00rootroot00000000000000libwebsockets-4.3.5/lib/tls/mbedtls/wrapper/include/internal/ssl3.h000066400000000000000000000026471476025525100253610ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef _SSL3_H_ #define _SSL3_H_ #ifdef __cplusplus extern "C" { #endif # define SSL3_AD_CLOSE_NOTIFY 0 # define SSL3_AD_UNEXPECTED_MESSAGE 10/* fatal */ # define SSL3_AD_BAD_RECORD_MAC 20/* fatal */ # define SSL3_AD_DECOMPRESSION_FAILURE 30/* fatal */ # define SSL3_AD_HANDSHAKE_FAILURE 40/* fatal */ # define SSL3_AD_NO_CERTIFICATE 41 # define SSL3_AD_BAD_CERTIFICATE 42 # define SSL3_AD_UNSUPPORTED_CERTIFICATE 43 # define SSL3_AD_CERTIFICATE_REVOKED 44 # define SSL3_AD_CERTIFICATE_EXPIRED 45 # define SSL3_AD_CERTIFICATE_UNKNOWN 46 # define SSL3_AD_ILLEGAL_PARAMETER 47/* fatal */ # define SSL3_AL_WARNING 1 # define SSL3_AL_FATAL 2 #define SSL3_VERSION 0x0300 #ifdef __cplusplus } #endif #endif libwebsockets-4.3.5/lib/tls/mbedtls/wrapper/include/internal/ssl_cert.h000066400000000000000000000024431476025525100263050ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef _SSL_CERT_H_ #define _SSL_CERT_H_ #ifdef __cplusplus extern "C" { #endif #include "ssl_types.h" /** * @brief create a certification object include private key object according to input certification * * @param ic - input certification point * * @return certification object point */ CERT *__ssl_cert_new(CERT *ic, void *rngctx); /** * @brief create a certification object include private key object * * @param none * * @return certification object point */ CERT* ssl_cert_new(void *rngctx); /** * @brief free a certification object * * @param cert - certification object point * * @return none */ void ssl_cert_free(CERT *cert); #ifdef __cplusplus } #endif #endif libwebsockets-4.3.5/lib/tls/mbedtls/wrapper/include/internal/ssl_code.h000066400000000000000000000066511476025525100262670ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef _SSL_CODE_H_ #define _SSL_CODE_H_ #ifdef __cplusplus extern "C" { #endif #include "ssl3.h" #include "tls1.h" #include "x509_vfy.h" /* Used in SSL_set_shutdown()/SSL_get_shutdown(); */ # define SSL_SENT_SHUTDOWN 1 # define SSL_RECEIVED_SHUTDOWN 2 # define SSL_VERIFY_NONE 0x00 # define SSL_VERIFY_PEER 0x01 # define SSL_VERIFY_FAIL_IF_NO_PEER_CERT 0x02 # define SSL_VERIFY_CLIENT_ONCE 0x04 /* * The following 3 states are kept in ssl->rlayer.rstate when reads fail, you * should not need these */ # define SSL_ST_READ_HEADER 0xF0 # define SSL_ST_READ_BODY 0xF1 # define SSL_ST_READ_DONE 0xF2 # define SSL_NOTHING 1 # define SSL_WRITING 2 # define SSL_READING 3 # define SSL_X509_LOOKUP 4 # define SSL_ASYNC_PAUSED 5 # define SSL_ASYNC_NO_JOBS 6 # define SSL_ERROR_NONE 0 # define SSL_ERROR_SSL 1 # define SSL_ERROR_WANT_READ 2 # define SSL_ERROR_WANT_WRITE 3 # define SSL_ERROR_WANT_X509_LOOKUP 4 # define SSL_ERROR_SYSCALL 5/* look at error stack/return value/errno */ # define SSL_ERROR_ZERO_RETURN 6 # define SSL_ERROR_WANT_CONNECT 7 # define SSL_ERROR_WANT_ACCEPT 8 # define SSL_ERROR_WANT_ASYNC 9 # define SSL_ERROR_WANT_ASYNC_JOB 10 /* Message flow states */ typedef enum { /* No handshake in progress */ MSG_FLOW_UNINITED, /* A permanent error with this connection */ MSG_FLOW_ERROR, /* We are about to renegotiate */ MSG_FLOW_RENEGOTIATE, /* We are reading messages */ MSG_FLOW_READING, /* We are writing messages */ MSG_FLOW_WRITING, /* Handshake has finished */ MSG_FLOW_FINISHED } MSG_FLOW_STATE; /* SSL subsystem states */ typedef enum { TLS_ST_BEFORE, TLS_ST_OK, DTLS_ST_CR_HELLO_VERIFY_REQUEST, TLS_ST_CR_SRVR_HELLO, TLS_ST_CR_CERT, TLS_ST_CR_CERT_STATUS, TLS_ST_CR_KEY_EXCH, TLS_ST_CR_CERT_REQ, TLS_ST_CR_SRVR_DONE, TLS_ST_CR_SESSION_TICKET, TLS_ST_CR_CHANGE, TLS_ST_CR_FINISHED, TLS_ST_CW_CLNT_HELLO, TLS_ST_CW_CERT, TLS_ST_CW_KEY_EXCH, TLS_ST_CW_CERT_VRFY, TLS_ST_CW_CHANGE, TLS_ST_CW_NEXT_PROTO, TLS_ST_CW_FINISHED, TLS_ST_SW_HELLO_REQ, TLS_ST_SR_CLNT_HELLO, DTLS_ST_SW_HELLO_VERIFY_REQUEST, TLS_ST_SW_SRVR_HELLO, TLS_ST_SW_CERT, TLS_ST_SW_KEY_EXCH, TLS_ST_SW_CERT_REQ, TLS_ST_SW_SRVR_DONE, TLS_ST_SR_CERT, TLS_ST_SR_KEY_EXCH, TLS_ST_SR_CERT_VRFY, TLS_ST_SR_NEXT_PROTO, TLS_ST_SR_CHANGE, TLS_ST_SR_FINISHED, TLS_ST_SW_SESSION_TICKET, TLS_ST_SW_CERT_STATUS, TLS_ST_SW_CHANGE, TLS_ST_SW_FINISHED } OSSL_HANDSHAKE_STATE; #ifdef __cplusplus } #endif #endif libwebsockets-4.3.5/lib/tls/mbedtls/wrapper/include/internal/ssl_dbg.h000066400000000000000000000160621476025525100261060ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef _SSL_DEBUG_H_ #define _SSL_DEBUG_H_ #include "ssl_port.h" #ifdef __cplusplus extern "C" { #endif #ifdef CONFIG_OPENSSL_DEBUG_LEVEL #define SSL_DEBUG_LEVEL CONFIG_OPENSSL_DEBUG_LEVEL #else #define SSL_DEBUG_LEVEL 0 #endif #define SSL_DEBUG_ON (SSL_DEBUG_LEVEL + 1) #define SSL_DEBUG_OFF (SSL_DEBUG_LEVEL - 1) #ifdef CONFIG_OPENSSL_DEBUG #ifndef SSL_DEBUG_LOG #error "SSL_DEBUG_LOG is not defined" #endif #ifndef SSL_DEBUG_FL #define SSL_DEBUG_FL "\n" #endif #define SSL_SHOW_LOCATION() \ SSL_DEBUG_LOG("SSL assert : %s %d\n", \ __FILE__, __LINE__) #define SSL_DEBUG(level, fmt, ...) \ { \ if (level > SSL_DEBUG_LEVEL) { \ SSL_DEBUG_LOG(fmt SSL_DEBUG_FL, ##__VA_ARGS__); \ } \ } #else /* CONFIG_OPENSSL_DEBUG */ #define SSL_SHOW_LOCATION() #define SSL_DEBUG(level, fmt, ...) #endif /* CONFIG_OPENSSL_DEBUG */ /** * OpenSSL assert function * * if select "CONFIG_OPENSSL_ASSERT_DEBUG", SSL_ASSERT* will show error file name and line * if select "CONFIG_OPENSSL_ASSERT_EXIT", SSL_ASSERT* will just return error code. * if select "CONFIG_OPENSSL_ASSERT_DEBUG_EXIT" SSL_ASSERT* will show error file name and line, * then return error code. * if select "CONFIG_OPENSSL_ASSERT_DEBUG_BLOCK", SSL_ASSERT* will show error file name and line, * then block here with "while (1)" * * SSL_ASSERT1 may will return "-1", so function's return argument is integer. * SSL_ASSERT2 may will return "NULL", so function's return argument is a point. * SSL_ASSERT2 may will return nothing, so function's return argument is "void". */ #if defined(CONFIG_OPENSSL_ASSERT_DEBUG) #define SSL_ASSERT1(s) \ { \ if (!(s)) { \ SSL_SHOW_LOCATION(); \ } \ } #define SSL_ASSERT2(s) \ { \ if (!(s)) { \ SSL_SHOW_LOCATION(); \ } \ } #define SSL_ASSERT3(s) \ { \ if (!(s)) { \ SSL_SHOW_LOCATION(); \ } \ } #elif defined(CONFIG_OPENSSL_ASSERT_EXIT) #define SSL_ASSERT1(s) \ { \ if (!(s)) { \ return -1; \ } \ } #define SSL_ASSERT2(s) \ { \ if (!(s)) { \ return NULL; \ } \ } #define SSL_ASSERT3(s) \ { \ if (!(s)) { \ return ; \ } \ } #elif defined(CONFIG_OPENSSL_ASSERT_DEBUG_EXIT) #define SSL_ASSERT1(s) \ { \ if (!(s)) { \ SSL_SHOW_LOCATION(); \ return -1; \ } \ } #define SSL_ASSERT2(s) \ { \ if (!(s)) { \ SSL_SHOW_LOCATION(); \ return NULL; \ } \ } #define SSL_ASSERT3(s) \ { \ if (!(s)) { \ SSL_SHOW_LOCATION(); \ return ; \ } \ } #elif defined(CONFIG_OPENSSL_ASSERT_DEBUG_BLOCK) #define SSL_ASSERT1(s) \ { \ if (!(s)) { \ SSL_SHOW_LOCATION(); \ while (1); \ } \ } #define SSL_ASSERT2(s) \ { \ if (!(s)) { \ SSL_SHOW_LOCATION(); \ while (1); \ } \ } #define SSL_ASSERT3(s) \ { \ if (!(s)) { \ SSL_SHOW_LOCATION(); \ while (1); \ } \ } #else #define SSL_ASSERT1(s) #define SSL_ASSERT2(s) #define SSL_ASSERT3(s) #endif #define SSL_PLATFORM_DEBUG_LEVEL SSL_DEBUG_OFF #define SSL_PLATFORM_ERROR_LEVEL SSL_DEBUG_ON #define SSL_CERT_DEBUG_LEVEL SSL_DEBUG_OFF #define SSL_CERT_ERROR_LEVEL SSL_DEBUG_ON #define SSL_PKEY_DEBUG_LEVEL SSL_DEBUG_OFF #define SSL_PKEY_ERROR_LEVEL SSL_DEBUG_ON #define SSL_X509_DEBUG_LEVEL SSL_DEBUG_OFF #define SSL_X509_ERROR_LEVEL SSL_DEBUG_ON #define SSL_LIB_DEBUG_LEVEL SSL_DEBUG_OFF #define SSL_LIB_ERROR_LEVEL SSL_DEBUG_ON #define SSL_STACK_DEBUG_LEVEL SSL_DEBUG_OFF #define SSL_STACK_ERROR_LEVEL SSL_DEBUG_ON #ifdef __cplusplus } #endif #endif libwebsockets-4.3.5/lib/tls/mbedtls/wrapper/include/internal/ssl_lib.h000066400000000000000000000014421476025525100261140ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef _SSL_LIB_H_ #define _SSL_LIB_H_ #ifdef __cplusplus extern "C" { #endif #include "ssl_types.h" void _ssl_set_alpn_list(const SSL *ssl); #ifdef __cplusplus } #endif #endif libwebsockets-4.3.5/lib/tls/mbedtls/wrapper/include/internal/ssl_methods.h000066400000000000000000000061741476025525100270200ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef _SSL_METHODS_H_ #define _SSL_METHODS_H_ #include "ssl_types.h" #ifdef __cplusplus extern "C" { #endif /** * TLS method function implement */ #define IMPLEMENT_TLS_METHOD_FUNC(func_name, \ new, free, \ handshake, shutdown, clear, \ read, send, pending, \ set_fd, get_fd, \ set_bufflen, \ get_verify_result, \ get_state) \ static const SSL_METHOD_FUNC func_name LOCAL_ATRR = { \ new, \ free, \ handshake, \ shutdown, \ clear, \ read, \ send, \ pending, \ set_fd, \ get_fd, \ set_bufflen, \ get_verify_result, \ get_state \ }; #define IMPLEMENT_TLS_METHOD(ver, mode, fun, func_name) \ const SSL_METHOD* func_name(void) { \ static const SSL_METHOD func_name##_data LOCAL_ATRR = { \ ver, \ mode, \ &(fun), \ }; \ return &func_name##_data; \ } #define IMPLEMENT_SSL_METHOD(ver, mode, fun, func_name) \ const SSL_METHOD* func_name(void) { \ static const SSL_METHOD func_name##_data LOCAL_ATRR = { \ ver, \ mode, \ &(fun), \ }; \ return &func_name##_data; \ } #define IMPLEMENT_X509_METHOD(func_name, \ new, \ free, \ load, \ show_info) \ const X509_METHOD* func_name(void) { \ static const X509_METHOD func_name##_data LOCAL_ATRR = { \ new, \ free, \ load, \ show_info \ }; \ return &func_name##_data; \ } #define IMPLEMENT_PKEY_METHOD(func_name, \ new, \ free, \ load) \ const PKEY_METHOD* func_name(void) { \ static const PKEY_METHOD func_name##_data LOCAL_ATRR = { \ new, \ free, \ load \ }; \ return &func_name##_data; \ } /** * @brief get X509 object method * * @param none * * @return X509 object method point */ const X509_METHOD* X509_method(void); /** * @brief get private key object method * * @param none * * @return private key object method point */ const PKEY_METHOD* EVP_PKEY_method(void); #ifdef __cplusplus } #endif #endif libwebsockets-4.3.5/lib/tls/mbedtls/wrapper/include/internal/ssl_pkey.h000066400000000000000000000041561476025525100263230ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef _SSL_PKEY_H_ #define _SSL_PKEY_H_ #ifdef __cplusplus extern "C" { #endif #include "ssl_types.h" /** * @brief create a private key object according to input private key * * @param ipk - input private key point * * @return new private key object point */ EVP_PKEY* __EVP_PKEY_new(EVP_PKEY *ipk, void *rngctx); /** * @brief create a private key object * * @param none * * @return private key object point */ EVP_PKEY* EVP_PKEY_new(void *rngctx); /** * @brief load a character key context into system context. If '*a' is pointed to the * private key, then load key into it. Or create a new private key object * * @param type - private key type * @param a - a point pointed to a private key point * @param pp - a point pointed to the key context memory point * @param length - key bytes * * @return private key object point */ EVP_PKEY* d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp, long length, void *rngctx); /** * @brief free a private key object * * @param pkey - private key object point * * @return none */ void EVP_PKEY_free(EVP_PKEY *x); /** * @brief load private key into the SSL * * @param type - private key type * @param ssl - SSL point * @param len - data bytes * @param d - data point * * @return result * 0 : failed * 1 : OK */ int SSL_use_PrivateKey_ASN1(int type, SSL *ssl, const unsigned char *d, long len); #ifdef __cplusplus } #endif #endif libwebsockets-4.3.5/lib/tls/mbedtls/wrapper/include/internal/ssl_stack.h000066400000000000000000000016521476025525100264560ustar00rootroot00000000000000#ifndef _SSL_STACK_H_ #define _SSL_STACK_H_ #ifdef __cplusplus extern "C" { #endif #include "ssl_types.h" #define STACK_OF(type) struct stack_st_##type #define SKM_DEFINE_STACK_OF(t1, t2, t3) \ STACK_OF(t1); \ static ossl_inline STACK_OF(t1) *sk_##t1##_new_null(void) \ { \ return (STACK_OF(t1) *)OPENSSL_sk_new_null(); \ } \ #define DEFINE_STACK_OF(t) SKM_DEFINE_STACK_OF(t, t, t) /** * @brief create a openssl stack object * * @param c - stack function * * @return openssl stack object point */ OPENSSL_STACK* OPENSSL_sk_new(OPENSSL_sk_compfunc c); /** * @brief create a NULL function openssl stack object * * @param none * * @return openssl stack object point */ OPENSSL_STACK *OPENSSL_sk_new_null(void); /** * @brief free openssl stack object * * @param openssl stack object point * * @return none */ void OPENSSL_sk_free(OPENSSL_STACK *stack); #ifdef __cplusplus } #endif #endif libwebsockets-4.3.5/lib/tls/mbedtls/wrapper/include/internal/ssl_types.h000066400000000000000000000136261476025525100265210ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef _SSL_TYPES_H_ #define _SSL_TYPES_H_ #ifdef __cplusplus extern "C" { #endif //#include "private-lib-core.h" #include #if defined(LWS_PLAT_FREERTOS) /* AMAZON RTOS has its own setting via MTK_MBEDTLS_CONFIG_FILE */ #if !defined(LWS_AMAZON_RTOS) #undef MBEDTLS_CONFIG_FILE #define MBEDTLS_CONFIG_FILE #endif #endif #include "ssl_code.h" #include #include "private-jit-trust.h" typedef void SSL_CIPHER; typedef void X509_STORE_CTX; typedef void X509_STORE; typedef void RSA; typedef void STACK; typedef void BIO; #if defined(WIN32) || defined(_WIN32) #define ossl_inline __inline #else #define ossl_inline inline #endif #define SSL_METHOD_CALL(f, s, ...) s->method->func->ssl_##f(s, ##__VA_ARGS__) #define X509_METHOD_CALL(f, x, ...) x->method->x509_##f(x, ##__VA_ARGS__) #define EVP_PKEY_METHOD_CALL(f, k, ...) k->method->pkey_##f(k, ##__VA_ARGS__) typedef int (*OPENSSL_sk_compfunc)(const void *, const void *); struct stack_st; typedef struct stack_st OPENSSL_STACK; struct ssl_method_st; typedef struct ssl_method_st SSL_METHOD; struct ssl_method_func_st; typedef struct ssl_method_func_st SSL_METHOD_FUNC; struct record_layer_st; typedef struct record_layer_st RECORD_LAYER; struct ossl_statem_st; typedef struct ossl_statem_st OSSL_STATEM; struct ssl_session_st; typedef struct ssl_session_st SSL_SESSION; struct ssl_ctx_st; typedef struct ssl_ctx_st SSL_CTX; struct ssl_st; typedef struct ssl_st SSL; struct cert_st; typedef struct cert_st CERT; struct x509_st; typedef struct x509_st X509; struct X509_VERIFY_PARAM_st; typedef struct X509_VERIFY_PARAM_st X509_VERIFY_PARAM; struct evp_pkey_st; typedef struct evp_pkey_st EVP_PKEY; struct x509_method_st; typedef struct x509_method_st X509_METHOD; struct pkey_method_st; typedef struct pkey_method_st PKEY_METHOD; struct stack_st { char **data; int num_alloc; OPENSSL_sk_compfunc c; }; struct evp_pkey_st { void *pkey_pm; const PKEY_METHOD *method; }; struct x509_st { /* X509 certification platform private point */ void *x509_pm; const X509_METHOD *method; }; struct cert_st { int sec_level; X509 *x509; EVP_PKEY *pkey; }; struct ossl_statem_st { MSG_FLOW_STATE state; int hand_state; }; struct record_layer_st { int rstate; int read_ahead; }; struct ssl_session_st { long timeout; long time; X509 *peer; }; struct X509_VERIFY_PARAM_st { int depth; }; typedef int (*next_proto_cb)(SSL *ssl, const unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg); struct ssl_ctx_st { int version; int references; unsigned long options; const SSL_METHOD *method; CERT *cert; X509 *client_CA; const char **alpn_protos; next_proto_cb alpn_cb; int verify_mode; int (*default_verify_callback) (SSL *, mbedtls_x509_crt *); long session_timeout; int read_ahead; int read_buffer_len; X509_VERIFY_PARAM param; void *rngctx; }; struct ssl_st { /* protocol version(one of SSL3.0, TLS1.0, etc.) */ int version; unsigned long options; /* shut things down(0x01 : sent, 0x02 : received) */ int shutdown; CERT *cert; X509 *client_CA; SSL_CTX *ctx; const SSL_METHOD *method; const char **alpn_protos; RECORD_LAYER rlayer; /* where we are */ OSSL_STATEM statem; SSL_SESSION *session; int verify_mode; int (*verify_callback) (SSL *, mbedtls_x509_crt *); #if defined(LWS_WITH_TLS_JIT_TRUST) lws_tls_kid_chain_t kid_chain; #endif int rwstate; int interrupted_remaining_write; long verify_result; X509_VERIFY_PARAM param; int err; void (*info_callback) (const SSL *ssl, int type, int val); /* SSL low-level system arch point */ void *ssl_pm; }; struct ssl_method_st { /* protocol version(one of SSL3.0, TLS1.0, etc.) */ int version; /* SSL mode(client(0) , server(1), not known(-1)) */ int endpoint; const SSL_METHOD_FUNC *func; }; struct ssl_method_func_st { int (*ssl_new)(SSL *ssl); void (*ssl_free)(SSL *ssl); int (*ssl_handshake)(SSL *ssl); int (*ssl_shutdown)(SSL *ssl); int (*ssl_clear)(SSL *ssl); int (*ssl_read)(SSL *ssl, void *buffer, int len); int (*ssl_send)(SSL *ssl, const void *buffer, int len); int (*ssl_pending)(const SSL *ssl); void (*ssl_set_fd)(SSL *ssl, int fd, int mode); int (*ssl_get_fd)(const SSL *ssl, int mode); void (*ssl_set_bufflen)(SSL *ssl, int len); long (*ssl_get_verify_result)(const SSL *ssl); OSSL_HANDSHAKE_STATE (*ssl_get_state)(const SSL *ssl); }; struct x509_method_st { int (*x509_new)(X509 *x, X509 *m_x); void (*x509_free)(X509 *x); int (*x509_load)(X509 *x, const unsigned char *buf, int len); int (*x509_show_info)(X509 *x); }; struct pkey_method_st { int (*pkey_new)(EVP_PKEY *pkey, EVP_PKEY *m_pkey, void *rngctx); void (*pkey_free)(EVP_PKEY *pkey); int (*pkey_load)(EVP_PKEY *pkey, const unsigned char *buf, int len); }; #define OPENSSL_NPN_NEGOTIATED 1 int X509_STORE_CTX_get_error(X509_STORE_CTX *ctx); int X509_STORE_CTX_get_error_depth(X509_STORE_CTX *ctx); #ifdef __cplusplus } #endif #endif libwebsockets-4.3.5/lib/tls/mbedtls/wrapper/include/internal/ssl_x509.h000066400000000000000000000050431476025525100260540ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef _SSL_X509_H_ #define _SSL_X509_H_ #ifdef __cplusplus extern "C" { #endif #include "ssl_types.h" #include "ssl_stack.h" DEFINE_STACK_OF(X509_NAME) /** * @brief create a X509 certification object according to input X509 certification * * @param ix - input X509 certification point * * @return new X509 certification object point */ X509* __X509_new(X509 *ix); /** * @brief create a X509 certification object * * @param none * * @return X509 certification object point */ X509* X509_new(void); /** * @brief load a character certification context into system context. If '*cert' is pointed to the * certification, then load certification into it. Or create a new X509 certification object * * @param cert - a point pointed to X509 certification * @param buffer - a point pointed to the certification context memory point * @param length - certification bytes * * @return X509 certification object point */ X509* d2i_X509(X509 **cert, const unsigned char *buffer, long len); /** * @brief free a X509 certification object * * @param x - X509 certification object point * * @return none */ void X509_free(X509 *x); /** * @brief set SSL context client CA certification * * @param ctx - SSL context point * @param x - X509 certification point * * @return result * 0 : failed * 1 : OK */ int SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x); /** * @brief add CA client certification into the SSL * * @param ssl - SSL point * @param x - X509 certification point * * @return result * 0 : failed * 1 : OK */ int SSL_add_client_CA(SSL *ssl, X509 *x); /** * @brief load certification into the SSL * * @param ssl - SSL point * @param len - data bytes * @param d - data point * * @return result * 0 : failed * 1 : OK * */ int SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len); const char *X509_verify_cert_error_string(long n); #ifdef __cplusplus } #endif #endif libwebsockets-4.3.5/lib/tls/mbedtls/wrapper/include/internal/tls1.h000066400000000000000000000040511476025525100253470ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef _TLS1_H_ #define _TLS1_H_ #ifdef __cplusplus extern "C" { #endif # define TLS1_AD_DECRYPTION_FAILED 21 # define TLS1_AD_RECORD_OVERFLOW 22 # define TLS1_AD_UNKNOWN_CA 48/* fatal */ # define TLS1_AD_ACCESS_DENIED 49/* fatal */ # define TLS1_AD_DECODE_ERROR 50/* fatal */ # define TLS1_AD_DECRYPT_ERROR 51 # define TLS1_AD_EXPORT_RESTRICTION 60/* fatal */ # define TLS1_AD_PROTOCOL_VERSION 70/* fatal */ # define TLS1_AD_INSUFFICIENT_SECURITY 71/* fatal */ # define TLS1_AD_INTERNAL_ERROR 80/* fatal */ # define TLS1_AD_INAPPROPRIATE_FALLBACK 86/* fatal */ # define TLS1_AD_USER_CANCELLED 90 # define TLS1_AD_NO_RENEGOTIATION 100 /* codes 110-114 are from RFC3546 */ # define TLS1_AD_UNSUPPORTED_EXTENSION 110 # define TLS1_AD_CERTIFICATE_UNOBTAINABLE 111 # define TLS1_AD_UNRECOGNIZED_NAME 112 # define TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE 113 # define TLS1_AD_BAD_CERTIFICATE_HASH_VALUE 114 # define TLS1_AD_UNKNOWN_PSK_IDENTITY 115/* fatal */ # define TLS1_AD_NO_APPLICATION_PROTOCOL 120 /* fatal */ /* Special value for method supporting multiple versions */ #define TLS_ANY_VERSION 0x10000 #define TLS1_VERSION 0x0301 #define TLS1_1_VERSION 0x0302 #define TLS1_2_VERSION 0x0303 #define SSL_TLSEXT_ERR_OK 0 #define SSL_TLSEXT_ERR_NOACK 3 #ifdef __cplusplus } #endif #endif libwebsockets-4.3.5/lib/tls/mbedtls/wrapper/include/internal/x509_vfy.h000066400000000000000000000136671476025525100260720ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef _X509_VFY_H_ #define _X509_VFY_H_ #ifdef __cplusplus extern "C" { #endif #define X509_V_OK 0 #define X509_V_ERR_UNSPECIFIED 1 #define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT 2 #define X509_V_ERR_UNABLE_TO_GET_CRL 3 #define X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE 4 #define X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE 5 #define X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY 6 #define X509_V_ERR_CERT_SIGNATURE_FAILURE 7 #define X509_V_ERR_CRL_SIGNATURE_FAILURE 8 #define X509_V_ERR_CERT_NOT_YET_VALID 9 #define X509_V_ERR_CERT_HAS_EXPIRED 10 #define X509_V_ERR_CRL_NOT_YET_VALID 11 #define X509_V_ERR_CRL_HAS_EXPIRED 12 #define X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD 13 #define X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD 14 #define X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD 15 #define X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD 16 #define X509_V_ERR_OUT_OF_MEM 17 #define X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT 18 #define X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN 19 #define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY 20 #define X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE 21 #define X509_V_ERR_CERT_CHAIN_TOO_LONG 22 #define X509_V_ERR_CERT_REVOKED 23 #define X509_V_ERR_INVALID_CA 24 #define X509_V_ERR_PATH_LENGTH_EXCEEDED 25 #define X509_V_ERR_INVALID_PURPOSE 26 #define X509_V_ERR_CERT_UNTRUSTED 27 #define X509_V_ERR_CERT_REJECTED 28 /* These are 'informational' when looking for issuer cert */ #define X509_V_ERR_SUBJECT_ISSUER_MISMATCH 29 #define X509_V_ERR_AKID_SKID_MISMATCH 30 #define X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH 31 #define X509_V_ERR_KEYUSAGE_NO_CERTSIGN 32 #define X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER 33 #define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION 34 #define X509_V_ERR_KEYUSAGE_NO_CRL_SIGN 35 #define X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION 36 #define X509_V_ERR_INVALID_NON_CA 37 #define X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED 38 #define X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE 39 #define X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED 40 #define X509_V_ERR_INVALID_EXTENSION 41 #define X509_V_ERR_INVALID_POLICY_EXTENSION 42 #define X509_V_ERR_NO_EXPLICIT_POLICY 43 #define X509_V_ERR_DIFFERENT_CRL_SCOPE 44 #define X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE 45 #define X509_V_ERR_UNNESTED_RESOURCE 46 #define X509_V_ERR_PERMITTED_VIOLATION 47 #define X509_V_ERR_EXCLUDED_VIOLATION 48 #define X509_V_ERR_SUBTREE_MINMAX 49 /* The application is not happy */ #define X509_V_ERR_APPLICATION_VERIFICATION 50 #define X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE 51 #define X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX 52 #define X509_V_ERR_UNSUPPORTED_NAME_SYNTAX 53 #define X509_V_ERR_CRL_PATH_VALIDATION_ERROR 54 /* Another issuer check debug option */ #define X509_V_ERR_PATH_LOOP 55 /* Suite B mode algorithm violation */ #define X509_V_ERR_SUITE_B_INVALID_VERSION 56 #define X509_V_ERR_SUITE_B_INVALID_ALGORITHM 57 #define X509_V_ERR_SUITE_B_INVALID_CURVE 58 #define X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM 59 #define X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED 60 #define X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256 61 /* Host, email and IP check errors */ #define X509_V_ERR_HOSTNAME_MISMATCH 62 #define X509_V_ERR_EMAIL_MISMATCH 63 #define X509_V_ERR_IP_ADDRESS_MISMATCH 64 /* DANE TLSA errors */ #define X509_V_ERR_DANE_NO_MATCH 65 /* security level errors */ #define X509_V_ERR_EE_KEY_TOO_SMALL 66 #define X509_V_ERR_CA_KEY_TOO_SMALL 67 #define X509_V_ERR_CA_MD_TOO_WEAK 68 /* Caller error */ #define X509_V_ERR_INVALID_CALL 69 /* Issuer lookup error */ #define X509_V_ERR_STORE_LOOKUP 70 /* Certificate transparency */ #define X509_V_ERR_NO_VALID_SCTS 71 #define X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION 72 #ifdef __cplusplus } #endif #endif libwebsockets-4.3.5/lib/tls/mbedtls/wrapper/include/openssl/000077500000000000000000000000001476025525100241625ustar00rootroot00000000000000libwebsockets-4.3.5/lib/tls/mbedtls/wrapper/include/openssl/ssl.h000077500000000000000000001146421476025525100251470ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef _SSL_H_ #define _SSL_H_ #ifdef __cplusplus extern "C" { #endif #include #include "ssl_x509.h" #include "ssl_pkey.h" /* { */ #define SSL_CB_ALERT 0x4000 #define X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT (1 << 0) #define X509_CHECK_FLAG_NO_WILDCARDS (1 << 1) #define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS (1 << 2) #define X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS (1 << 3) #define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS (1 << 4) mbedtls_x509_crt * ssl_ctx_get_mbedtls_x509_crt(SSL_CTX *ssl_ctx); mbedtls_x509_crt * ssl_get_peer_mbedtls_x509_crt(SSL *ssl); int SSL_set_sni_callback(SSL *ssl, int(*cb)(void *, mbedtls_ssl_context *, const unsigned char *, size_t), void *param); void SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx); int SSL_CTX_add_client_CA_ASN1(SSL_CTX *ssl, int len, const unsigned char *d); SSL *SSL_SSL_from_mbedtls_ssl_context(mbedtls_ssl_context *msc); mbedtls_ssl_context *SSL_mbedtls_ssl_context_from_SSL(SSL *ssl); /** * @brief create a SSL context * * @param method - the SSL context method point * * @return the context point */ SSL_CTX* SSL_CTX_new(const SSL_METHOD *method, void *rngctx); /** * @brief free a SSL context * * @param method - the SSL context point * * @return none */ void SSL_CTX_free(SSL_CTX *ctx); /** * @brief create a SSL * * @param ctx - the SSL context point * * @return the SSL point */ SSL* SSL_new(SSL_CTX *ctx); /** * @brief free the SSL * * @param ssl - the SSL point * * @return none */ void SSL_free(SSL *ssl); /** * @brief connect to the remote SSL server * * @param ssl - the SSL point * * @return result * 1 : OK * -1 : failed */ int SSL_connect(SSL *ssl); /** * @brief accept the remote connection * * @param ssl - the SSL point * * @return result * 1 : OK * -1 : failed */ int SSL_accept(SSL *ssl); /** * @brief read data from to remote * * @param ssl - the SSL point which has been connected * @param buffer - the received data buffer point * @param len - the received data length * * @return result * > 0 : OK, and return received data bytes * = 0 : connection is closed * < 0 : an error catch */ int SSL_read(SSL *ssl, void *buffer, int len); /** * @brief send the data to remote * * @param ssl - the SSL point which has been connected * @param buffer - the send data buffer point * @param len - the send data length * * @return result * > 0 : OK, and return sent data bytes * = 0 : connection is closed * < 0 : an error catch */ int SSL_write(SSL *ssl, const void *buffer, int len); /** * @brief get the verifying result of the SSL certification * * @param ssl - the SSL point * * @return the result of verifying */ long SSL_get_verify_result(const SSL *ssl); /** * @brief shutdown the connection * * @param ssl - the SSL point * * @return result * 1 : OK * 0 : shutdown is not finished * -1 : an error catch */ int SSL_shutdown(SSL *ssl); /** * @brief bind the socket file description into the SSL * * @param ssl - the SSL point * @param fd - socket handle * * @return result * 1 : OK * 0 : failed */ int SSL_set_fd(SSL *ssl, int fd); /** * @brief These functions load the private key into the SSL_CTX or SSL object * * @param ctx - the SSL context point * @param pkey - private key object point * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey); /** * @brief These functions load the certification into the SSL_CTX or SSL object * * @param ctx - the SSL context point * @param pkey - certification object point * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x); /** * @brief create the target SSL context client method * * @param none * * @return the SSLV2.3 version SSL context client method */ const SSL_METHOD* SSLv23_client_method(void); /** * @brief create the target SSL context client method * * @param none * * @return the TLSV1.0 version SSL context client method */ const SSL_METHOD* TLSv1_client_method(void); /** * @brief create the target SSL context client method * * @param none * * @return the SSLV1.0 version SSL context client method */ const SSL_METHOD* SSLv3_client_method(void); /** * @brief create the target SSL context client method * * @param none * * @return the TLSV1.1 version SSL context client method */ const SSL_METHOD* TLSv1_1_client_method(void); /** * @brief create the target SSL context client method * * @param none * * @return the TLSV1.2 version SSL context client method */ const SSL_METHOD* TLSv1_2_client_method(void); /** * @brief create the target SSL context server method * * @param none * * @return the TLS any version SSL context client method */ const SSL_METHOD* TLS_client_method(void); /** * @brief create the target SSL context server method * * @param none * * @return the SSLV2.3 version SSL context server method */ const SSL_METHOD* SSLv23_server_method(void); /** * @brief create the target SSL context server method * * @param none * * @return the TLSV1.1 version SSL context server method */ const SSL_METHOD* TLSv1_1_server_method(void); /** * @brief create the target SSL context server method * * @param none * * @return the TLSV1.2 version SSL context server method */ const SSL_METHOD* TLSv1_2_server_method(void); /** * @brief create the target SSL context server method * * @param none * * @return the TLSV1.0 version SSL context server method */ const SSL_METHOD* TLSv1_server_method(void); /** * @brief create the target SSL context server method * * @param none * * @return the SSLV3.0 version SSL context server method */ const SSL_METHOD* SSLv3_server_method(void); /** * @brief create the target SSL context server method * * @param none * * @return the TLS any version SSL context server method */ const SSL_METHOD* TLS_server_method(void); /** * @brief set the SSL context ALPN select callback function * * @param ctx - SSL context point * @param cb - ALPN select callback function * @param arg - ALPN select callback function entry private data point * * @return none */ void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx, next_proto_cb cb, void *arg); void SSL_set_alpn_select_cb(SSL *ssl, void *arg); /** * @brief set the SSL context ALPN select protocol * * @param ctx - SSL context point * @param protos - ALPN protocol name * @param protos_len - ALPN protocol name bytes * * @return result * 0 : OK * 1 : failed */ int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos, unsigned int protos_len); /** * @brief set the SSL context next ALPN select callback function * * @param ctx - SSL context point * @param cb - ALPN select callback function * @param arg - ALPN select callback function entry private data point * * @return none */ void SSL_CTX_set_next_proto_select_cb(SSL_CTX *ctx, int (*cb) (SSL *ssl, unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg), void *arg); void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data, unsigned int *len); void _ssl_set_alpn_list(const SSL *ssl); /** * @brief get SSL error code * * @param ssl - SSL point * @param ret_code - SSL return code * * @return SSL error number */ int SSL_get_error(const SSL *ssl, int ret_code); /** * @brief clear the SSL error code * * @param none * * @return none */ void ERR_clear_error(void); /** * @brief get the current SSL error code * * @param none * * @return current SSL error number */ int ERR_get_error(void); /** * @brief register the SSL error strings * * @param none * * @return none */ void ERR_load_SSL_strings(void); /** * @brief initialize the SSL library * * @param none * * @return none */ void SSL_library_init(void); /** * @brief generates a human-readable string representing the error code e * and store it into the "ret" point memory * * @param e - error code * @param ret - memory point to store the string * * @return the result string point */ char *ERR_error_string(unsigned long e, char *ret); /** * @brief add the SSL context option * * @param ctx - SSL context point * @param opt - new SSL context option * * @return the SSL context option */ unsigned long SSL_CTX_set_options(SSL_CTX *ctx, unsigned long opt); /** * @brief add the SSL context mode * * @param ctx - SSL context point * @param mod - new SSL context mod * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_set_mode(SSL_CTX *ctx, int mod); /* } */ /** * @brief perform the SSL handshake * * @param ssl - SSL point * * @return result * 1 : OK * 0 : failed * -1 : a error catch */ int SSL_do_handshake(SSL *ssl); /** * @brief get the SSL current version * * @param ssl - SSL point * * @return the version string */ const char *SSL_get_version(const SSL *ssl); /** * @brief set the SSL context version * * @param ctx - SSL context point * @param meth - SSL method point * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth); /** * @brief get the bytes numbers which are to be read * * @param ssl - SSL point * * @return bytes number */ int SSL_pending(const SSL *ssl); /** * @brief check if SSL want nothing * * @param ssl - SSL point * * @return result * 0 : false * 1 : true */ int SSL_want_nothing(const SSL *ssl); /** * @brief check if SSL want to read * * @param ssl - SSL point * * @return result * 0 : false * 1 : true */ int SSL_want_read(const SSL *ssl); /** * @brief check if SSL want to write * * @param ssl - SSL point * * @return result * 0 : false * 1 : true */ int SSL_want_write(const SSL *ssl); /** * @brief get the SSL context current method * * @param ctx - SSL context point * * @return the SSL context current method */ const SSL_METHOD *SSL_CTX_get_ssl_method(SSL_CTX *ctx); /** * @brief get the SSL current method * * @param ssl - SSL point * * @return the SSL current method */ const SSL_METHOD *SSL_get_ssl_method(SSL *ssl); /** * @brief set the SSL method * * @param ssl - SSL point * @param meth - SSL method point * * @return result * 1 : OK * 0 : failed */ int SSL_set_ssl_method(SSL *ssl, const SSL_METHOD *method); /** * @brief add CA client certification into the SSL * * @param ssl - SSL point * @param x - CA certification point * * @return result * 1 : OK * 0 : failed */ int SSL_add_client_CA(SSL *ssl, X509 *x); /** * @brief add CA client certification into the SSL context * * @param ctx - SSL context point * @param x - CA certification point * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x); /** * @brief set the SSL CA certification list * * @param ssl - SSL point * @param name_list - CA certification list * * @return none */ void SSL_set_client_CA_list(SSL *ssl, STACK_OF(X509_NAME) *name_list); /** * @brief set the SSL context CA certification list * * @param ctx - SSL context point * @param name_list - CA certification list * * @return none */ void SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list); /** * @briefget the SSL CA certification list * * @param ssl - SSL point * * @return CA certification list */ STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *ssl); /** * @brief get the SSL context CA certification list * * @param ctx - SSL context point * * @return CA certification list */ STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *ctx); /** * @brief get the SSL certification point * * @param ssl - SSL point * * @return SSL certification point */ X509 *SSL_get_certificate(const SSL *ssl); /** * @brief get the SSL private key point * * @param ssl - SSL point * * @return SSL private key point */ EVP_PKEY *SSL_get_privatekey(const SSL *ssl); /** * @brief set the SSL information callback function * * @param ssl - SSL point * @param cb - information callback function * * @return none */ void SSL_set_info_callback(SSL *ssl, void (*cb) (const SSL *ssl, int type, int val)); /** * @brief get the SSL state * * @param ssl - SSL point * * @return SSL state */ OSSL_HANDSHAKE_STATE SSL_get_state(const SSL *ssl); /** * @brief set the SSL context read buffer length * * @param ctx - SSL context point * @param len - read buffer length * * @return none */ void SSL_CTX_set_default_read_buffer_len(SSL_CTX *ctx, size_t len); /** * @brief set the SSL read buffer length * * @param ssl - SSL point * @param len - read buffer length * * @return none */ void SSL_set_default_read_buffer_len(SSL *ssl, size_t len); /** * @brief set the SSL security level * * @param ssl - SSL point * @param level - security level * * @return none */ void SSL_set_security_level(SSL *ssl, int level); /** * @brief get the SSL security level * * @param ssl - SSL point * * @return security level */ int SSL_get_security_level(const SSL *ssl); /** * @brief get the SSL verifying mode of the SSL context * * @param ctx - SSL context point * * @return verifying mode */ int SSL_CTX_get_verify_mode(const SSL_CTX *ctx); /** * @brief get the SSL verifying depth of the SSL context * * @param ctx - SSL context point * * @return verifying depth */ int SSL_CTX_get_verify_depth(const SSL_CTX *ctx); /** * @brief set the SSL context verifying of the SSL context * * @param ctx - SSL context point * @param mode - verifying mode * @param verify_callback - verifying callback function * * @return none */ void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, int (*verify_callback)(SSL *, mbedtls_x509_crt *)); /** * @brief set the SSL verifying of the SSL context * * @param ctx - SSL point * @param mode - verifying mode * @param verify_callback - verifying callback function * * @return none */ void SSL_set_verify(SSL *s, int mode, int (*verify_callback)(SSL *, mbedtls_x509_crt *)); /** * @brief set the SSL verify depth of the SSL context * * @param ctx - SSL context point * @param depth - verifying depth * * @return none */ void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth); /** * @brief certification verifying callback function * * @param preverify_ok - verifying result * @param x509_ctx - X509 certification point * * @return verifying result */ int verify_callback(SSL *, mbedtls_x509_crt *); /** * @brief set the session timeout time * * @param ctx - SSL context point * @param t - new session timeout time * * @return old session timeout time */ long SSL_CTX_set_timeout(SSL_CTX *ctx, long t); /** * @brief get the session timeout time * * @param ctx - SSL context point * * @return current session timeout time */ long SSL_CTX_get_timeout(const SSL_CTX *ctx); /** * @brief set the SSL context cipher through the list string * * @param ctx - SSL context point * @param str - cipher controller list string * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str); /** * @brief set the SSL cipher through the list string * * @param ssl - SSL point * @param str - cipher controller list string * * @return result * 1 : OK * 0 : failed */ int SSL_set_cipher_list(SSL *ssl, const char *str); /** * @brief get the SSL cipher list string * * @param ssl - SSL point * * @return cipher controller list string */ const char *SSL_get_cipher_list(const SSL *ssl, int n); /** * @brief get the SSL cipher * * @param ssl - SSL point * * @return current cipher */ const SSL_CIPHER *SSL_get_current_cipher(const SSL *ssl); /** * @brief get the SSL cipher string * * @param ssl - SSL point * * @return cipher string */ const char *SSL_get_cipher(const SSL *ssl); /** * @brief get the SSL context object X509 certification storage * * @param ctx - SSL context point * * @return x509 certification storage */ X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *ctx); /** * @brief set the SSL context object X509 certification store * * @param ctx - SSL context point * @param store - X509 certification store * * @return none */ void SSL_CTX_set_cert_store(SSL_CTX *ctx, X509_STORE *store); /** * @brief get the SSL specifical statement * * @param ssl - SSL point * * @return specifical statement */ int SSL_want(const SSL *ssl); /** * @brief check if the SSL is SSL_X509_LOOKUP state * * @param ssl - SSL point * * @return result * 1 : OK * 0 : failed */ int SSL_want_x509_lookup(const SSL *ssl); /** * @brief reset the SSL * * @param ssl - SSL point * * @return result * 1 : OK * 0 : failed */ int SSL_clear(SSL *ssl); /** * @brief get the socket handle of the SSL * * @param ssl - SSL point * * @return result * >= 0 : yes, and return socket handle * < 0 : a error catch */ int SSL_get_fd(const SSL *ssl); /** * @brief get the read only socket handle of the SSL * * @param ssl - SSL point * * @return result * >= 0 : yes, and return socket handle * < 0 : a error catch */ int SSL_get_rfd(const SSL *ssl); /** * @brief get the write only socket handle of the SSL * * @param ssl - SSL point * * @return result * >= 0 : yes, and return socket handle * < 0 : a error catch */ int SSL_get_wfd(const SSL *ssl); /** * @brief set the SSL if we can read as many as data * * @param ssl - SSL point * @param yes - enable the function * * @return none */ void SSL_set_read_ahead(SSL *s, int yes); /** * @brief set the SSL context if we can read as many as data * * @param ctx - SSL context point * @param yes - enbale the function * * @return none */ void SSL_CTX_set_read_ahead(SSL_CTX *ctx, int yes); /** * @brief get the SSL ahead signal if we can read as many as data * * @param ssl - SSL point * * @return SSL context ahead signal */ int SSL_get_read_ahead(const SSL *ssl); /** * @brief get the SSL context ahead signal if we can read as many as data * * @param ctx - SSL context point * * @return SSL context ahead signal */ long SSL_CTX_get_read_ahead(SSL_CTX *ctx); /** * @brief check if some data can be read * * @param ssl - SSL point * * @return * 1 : there are bytes to be read * 0 : no data */ int SSL_has_pending(const SSL *ssl); /** * @brief load the X509 certification into SSL context * * @param ctx - SSL context point * @param x - X509 certification point * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x);//loads the certificate x into ctx /** * @brief load the ASN1 certification into SSL context * * @param ctx - SSL context point * @param len - certification length * @param d - data point * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, const unsigned char *d); /** * @brief load the certification file into SSL context * * @param ctx - SSL context point * @param file - certification file name * @param type - certification encoding type * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type); /** * @brief load the certification chain file into SSL context * * @param ctx - SSL context point * @param file - certification chain file name * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file); /** * @brief load the ASN1 private key into SSL context * * @param ctx - SSL context point * @param d - data point * @param len - private key length * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_use_PrivateKey_ASN1(int pk, SSL_CTX *ctx, const unsigned char *d, long len);//adds the private key of type pk stored at memory location d (length len) to ctx /** * @brief load the private key file into SSL context * * @param ctx - SSL context point * @param file - private key file name * @param type - private key encoding type * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type); /** * @brief load the RSA private key into SSL context * * @param ctx - SSL context point * @param x - RSA private key point * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa); /** * @brief load the RSA ASN1 private key into SSL context * * @param ctx - SSL context point * @param d - data point * @param len - RSA private key length * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, long len); /** * @brief load the RSA private key file into SSL context * * @param ctx - SSL context point * @param file - RSA private key file name * @param type - private key encoding type * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, int type); /** * @brief check if the private key and certification is matched * * @param ctx - SSL context point * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_check_private_key(const SSL_CTX *ctx); /** * @brief set the SSL context server information * * @param ctx - SSL context point * @param serverinfo - server information string * @param serverinfo_length - server information length * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_use_serverinfo(SSL_CTX *ctx, const unsigned char *serverinfo, size_t serverinfo_length); /** * @brief load the SSL context server infomation file into SSL context * * @param ctx - SSL context point * @param file - server information file * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file); /** * @brief SSL select next function * * @param out - point of output data point * @param outlen - output data length * @param in - input data * @param inlen - input data length * @param client - client data point * @param client_len -client data length * * @return NPN state * OPENSSL_NPN_UNSUPPORTED : not support * OPENSSL_NPN_NEGOTIATED : negotiated * OPENSSL_NPN_NO_OVERLAP : no overlap */ int SSL_select_next_proto(unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, const unsigned char *client, unsigned int client_len); /** * @brief load the extra certification chain into the SSL context * * @param ctx - SSL context point * @param x509 - X509 certification * * @return result * 1 : OK * 0 : failed */ long SSL_CTX_add_extra_chain_cert(SSL_CTX *ctx, X509 *); /** * @brief control the SSL context * * @param ctx - SSL context point * @param cmd - command * @param larg - parameter length * @param parg - parameter point * * @return result * 1 : OK * 0 : failed */ long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, char *parg); /** * @brief get the SSL context cipher * * @param ctx - SSL context point * * @return SSL context cipher */ STACK *SSL_CTX_get_ciphers(const SSL_CTX *ctx); /** * @brief check if the SSL context can read as many as data * * @param ctx - SSL context point * * @return result * 1 : OK * 0 : failed */ long SSL_CTX_get_default_read_ahead(SSL_CTX *ctx); /** * @brief get the SSL context extra data * * @param ctx - SSL context point * @param idx - index * * @return data point */ void *SSL_CTX_get_ex_data(const SSL_CTX *ctx, int idx); /** * @brief get the SSL context quiet shutdown option * * @param ctx - SSL context point * * @return quiet shutdown option */ int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx); /** * @brief load the SSL context CA file * * @param ctx - SSL context point * @param CAfile - CA certification file * @param CApath - CA certification file path * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, const char *CApath); /** * @brief add SSL context reference count by '1' * * @param ctx - SSL context point * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_up_ref(SSL_CTX *ctx); /** * @brief set SSL context application private data * * @param ctx - SSL context point * @param arg - private data * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_set_app_data(SSL_CTX *ctx, void *arg); /** * @brief set SSL context client certification callback function * * @param ctx - SSL context point * @param cb - callback function * * @return none */ void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, int (*cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey)); /** * @brief set the SSL context if we can read as many as data * * @param ctx - SSL context point * @param m - enable the fuction * * @return none */ void SSL_CTX_set_default_read_ahead(SSL_CTX *ctx, int m); /** * @brief set SSL context default verifying path * * @param ctx - SSL context point * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx); /** * @brief set SSL context default verifying directory * * @param ctx - SSL context point * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx); /** * @brief set SSL context default verifying file * * @param ctx - SSL context point * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_set_default_verify_file(SSL_CTX *ctx); /** * @brief set SSL context extra data * * @param ctx - SSL context point * @param idx - data index * @param arg - data point * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_set_ex_data(SSL_CTX *s, int idx, char *arg); /** * @brief clear the SSL context option bit of "op" * * @param ctx - SSL context point * @param op - option * * @return SSL context option */ unsigned long SSL_CTX_clear_options(SSL_CTX *ctx, unsigned long op); /** * @brief get the SSL context option * * @param ctx - SSL context point * @param op - option * * @return SSL context option */ unsigned long SSL_CTX_get_options(SSL_CTX *ctx); /** * @brief set the SSL context quiet shutdown mode * * @param ctx - SSL context point * @param mode - mode * * @return none */ void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode); /** * @brief get the SSL context X509 certification * * @param ctx - SSL context point * * @return X509 certification */ X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx); /** * @brief get the SSL context private key * * @param ctx - SSL context point * * @return private key */ EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx); /** * @brief set SSL context PSK identity hint * * @param ctx - SSL context point * @param hint - PSK identity hint * * @return result * 1 : OK * 0 : failed */ int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *hint); /** * @brief set SSL context PSK server callback function * * @param ctx - SSL context point * @param callback - callback function * * @return none */ void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, unsigned int (*callback)(SSL *ssl, const char *identity, unsigned char *psk, int max_psk_len)); /** * @brief get alert description string * * @param value - alert value * * @return alert description string */ const char *SSL_alert_desc_string(int value); /** * @brief get alert description long string * * @param value - alert value * * @return alert description long string */ const char *SSL_alert_desc_string_long(int value); /** * @brief get alert type string * * @param value - alert value * * @return alert type string */ const char *SSL_alert_type_string(int value); /** * @brief get alert type long string * * @param value - alert value * * @return alert type long string */ const char *SSL_alert_type_string_long(int value); /** * @brief get SSL context of the SSL * * @param ssl - SSL point * * @return SSL context */ SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl); /** * @brief get SSL application data * * @param ssl - SSL point * * @return application data */ char *SSL_get_app_data(SSL *ssl); /** * @brief get SSL cipher bits * * @param ssl - SSL point * @param alg_bits - algorithm bits * * @return strength bits */ int SSL_get_cipher_bits(const SSL *ssl, int *alg_bits); /** * @brief get SSL cipher name * * @param ssl - SSL point * * @return SSL cipher name */ char *SSL_get_cipher_name(const SSL *ssl); /** * @brief get SSL cipher version * * @param ssl - SSL point * * @return SSL cipher version */ char *SSL_get_cipher_version(const SSL *ssl); /** * @brief get SSL extra data * * @param ssl - SSL point * @param idx - data index * * @return extra data */ char *SSL_get_ex_data(const SSL *ssl, int idx); /** * @brief get index of the SSL extra data X509 storage context * * @param none * * @return data index */ int SSL_get_ex_data_X509_STORE_CTX_idx(void); /** * @brief get peer certification chain * * @param ssl - SSL point * * @return certification chain */ STACK *SSL_get_peer_cert_chain(const SSL *ssl); /** * @brief get peer certification * * @param ssl - SSL point * * @return certification */ X509 *SSL_get_peer_certificate(const SSL *ssl); /** * @brief get SSL quiet shutdown mode * * @param ssl - SSL point * * @return quiet shutdown mode */ int SSL_get_quiet_shutdown(const SSL *ssl); /** * @brief get SSL read only IO handle * * @param ssl - SSL point * * @return IO handle */ BIO *SSL_get_rbio(const SSL *ssl); /** * @brief get SSL shared ciphers * * @param ssl - SSL point * @param buf - buffer to store the ciphers * @param len - buffer len * * @return shared ciphers */ char *SSL_get_shared_ciphers(const SSL *ssl, char *buf, int len); /** * @brief get SSL shutdown mode * * @param ssl - SSL point * * @return shutdown mode */ int SSL_get_shutdown(const SSL *ssl); /** * @brief get SSL session time * * @param ssl - SSL point * * @return session time */ long SSL_get_time(const SSL *ssl); /** * @brief get SSL session timeout time * * @param ssl - SSL point * * @return session timeout time */ long SSL_get_timeout(const SSL *ssl); /** * @brief get SSL verifying mode * * @param ssl - SSL point * * @return verifying mode */ int SSL_get_verify_mode(const SSL *ssl); /** * @brief get SSL verify parameters * * @param ssl - SSL point * * @return verify parameters */ X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl); /** * @brief set expected hostname the peer cert CN should have * * @param param - verify parameters from SSL_get0_param() * * @param name - the expected hostname * * @param namelen - the length of the hostname, or 0 if NUL terminated * * @return verify parameters */ int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param, const char *name, size_t namelen); /** * @brief set parameters for X509 host verify action * * @param param -verify parameters from SSL_get0_param() * * @param flags - bitfield of X509_CHECK_FLAG_... parameters to set * * @return 1 for success, 0 for failure */ int X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param, unsigned long flags); /** * @brief clear parameters for X509 host verify action * * @param param -verify parameters from SSL_get0_param() * * @param flags - bitfield of X509_CHECK_FLAG_... parameters to clear * * @return 1 for success, 0 for failure */ int X509_VERIFY_PARAM_clear_hostflags(X509_VERIFY_PARAM *param, unsigned long flags); /** * @brief get SSL write only IO handle * * @param ssl - SSL point * * @return IO handle */ BIO *SSL_get_wbio(const SSL *ssl); /** * @brief load SSL client CA certification file * * @param file - file name * * @return certification loading object */ STACK *SSL_load_client_CA_file(const char *file); /** * @brief add SSL reference by '1' * * @param ssl - SSL point * * @return result * 1 : OK * 0 : failed */ int SSL_up_ref(SSL *ssl); /** * @brief read and put data into buf, but not clear the SSL low-level storage * * @param ssl - SSL point * @param buf - storage buffer point * @param num - data bytes * * @return result * > 0 : OK, and return read bytes * = 0 : connect is closed * < 0 : a error catch */ int SSL_peek(SSL *ssl, void *buf, int num); /** * @brief make SSL renegotiate * * @param ssl - SSL point * * @return result * 1 : OK * 0 : failed */ int SSL_renegotiate(SSL *ssl); /** * @brief get the state string where SSL is reading * * @param ssl - SSL point * * @return state string */ const char *SSL_rstate_string(SSL *ssl); /** * @brief get the statement long string where SSL is reading * * @param ssl - SSL point * * @return statement long string */ const char *SSL_rstate_string_long(SSL *ssl); /** * @brief set SSL accept statement * * @param ssl - SSL point * * @return none */ void SSL_set_accept_state(SSL *ssl); /** * @brief set SSL application data * * @param ssl - SSL point * @param arg - SSL application data point * * @return none */ void SSL_set_app_data(SSL *ssl, char *arg); /** * @brief set SSL BIO * * @param ssl - SSL point * @param rbio - read only IO * @param wbio - write only IO * * @return none */ void SSL_set_bio(SSL *ssl, BIO *rbio, BIO *wbio); /** * @brief clear SSL option * * @param ssl - SSL point * @param op - clear option * * @return SSL option */ unsigned long SSL_clear_options(SSL *ssl, unsigned long op); /** * @brief get SSL option * * @param ssl - SSL point * * @return SSL option */ unsigned long SSL_get_options(SSL *ssl); /** * @brief clear SSL option * * @param ssl - SSL point * @param op - setting option * * @return SSL option */ unsigned long SSL_set_options(SSL *ssl, unsigned long op); /** * @brief set SSL quiet shutdown mode * * @param ssl - SSL point * @param mode - quiet shutdown mode * * @return none */ void SSL_set_quiet_shutdown(SSL *ssl, int mode); /** * @brief set SSL shutdown mode * * @param ssl - SSL point * @param mode - shutdown mode * * @return none */ void SSL_set_shutdown(SSL *ssl, int mode); /** * @brief set SSL session time * * @param ssl - SSL point * @param t - session time * * @return session time */ long SSL_set_time(SSL *ssl, long t); /** * @brief set SSL session timeout time * * @param ssl - SSL point * @param t - session timeout time * * @return session timeout time */ long SSL_set_timeout(SSL *ssl, long t); /** * @brief get SSL statement string * * @param ssl - SSL point * * @return SSL statement string */ char *SSL_state_string(const SSL *ssl); /** * @brief get SSL statement long string * * @param ssl - SSL point * * @return SSL statement long string */ char *SSL_state_string_long(const SSL *ssl); /** * @brief get SSL renegotiation count * * @param ssl - SSL point * * @return renegotiation count */ long SSL_total_renegotiations(SSL *ssl); /** * @brief get SSL version * * @param ssl - SSL point * * @return SSL version */ int SSL_version(const SSL *ssl); /** * @brief set SSL PSK identity hint * * @param ssl - SSL point * @param hint - identity hint * * @return result * 1 : OK * 0 : failed */ int SSL_use_psk_identity_hint(SSL *ssl, const char *hint); /** * @brief get SSL PSK identity hint * * @param ssl - SSL point * * @return identity hint */ const char *SSL_get_psk_identity_hint(SSL *ssl); /** * @brief get SSL PSK identity * * @param ssl - SSL point * * @return identity */ const char *SSL_get_psk_identity(SSL *ssl); #ifdef __cplusplus } #endif #endif libwebsockets-4.3.5/lib/tls/mbedtls/wrapper/include/platform/000077500000000000000000000000001476025525100243235ustar00rootroot00000000000000libwebsockets-4.3.5/lib/tls/mbedtls/wrapper/include/platform/ssl_pm.h000066400000000000000000000032211476025525100257670ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef _SSL_PM_H_ #define _SSL_PM_H_ #ifdef __cplusplus extern "C" { #endif #include #include "ssl_types.h" #include "ssl_port.h" #define LOCAL_ATRR int ssl_pm_new(SSL *ssl); void ssl_pm_free(SSL *ssl); int ssl_pm_handshake(SSL *ssl); int ssl_pm_shutdown(SSL *ssl); int ssl_pm_clear(SSL *ssl); int ssl_pm_read(SSL *ssl, void *buffer, int len); int ssl_pm_send(SSL *ssl, const void *buffer, int len); int ssl_pm_pending(const SSL *ssl); void ssl_pm_set_fd(SSL *ssl, int fd, int mode); int ssl_pm_get_fd(const SSL *ssl, int mode); OSSL_HANDSHAKE_STATE ssl_pm_get_state(const SSL *ssl); void ssl_pm_set_bufflen(SSL *ssl, int len); int x509_pm_show_info(X509 *x); int x509_pm_new(X509 *x, X509 *m_x); void x509_pm_free(X509 *x); int x509_pm_load(X509 *x, const unsigned char *buffer, int len); int pkey_pm_new(EVP_PKEY *pk, EVP_PKEY *m_pk, void *rngctx); void pkey_pm_free(EVP_PKEY *pk); int pkey_pm_load(EVP_PKEY *pk, const unsigned char *buffer, int len); long ssl_pm_get_verify_result(const SSL *ssl); #ifdef __cplusplus } #endif #endif libwebsockets-4.3.5/lib/tls/mbedtls/wrapper/include/platform/ssl_port.h000066400000000000000000000021711476025525100263420ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef _SSL_PORT_H_ #define _SSL_PORT_H_ #ifdef __cplusplus extern "C" { #endif #include "string.h" #include "stdlib.h" #if defined(LWS_HAVE_MALLOC_H) #include "malloc.h" #endif void *ssl_mem_zalloc(size_t size); #define ssl_mem_malloc malloc #define ssl_mem_free free #define ssl_memcpy memcpy #define ssl_strlen strlen #define ssl_speed_up_enter() #define ssl_speed_up_exit() #define SSL_DEBUG_FL #define SSL_DEBUG_LOG(fmt, ...) ESP_LOGI("openssl", fmt, ##__VA_ARGS__) #ifdef __cplusplus } #endif #endif libwebsockets-4.3.5/lib/tls/mbedtls/wrapper/library/000077500000000000000000000000001476025525100225205ustar00rootroot00000000000000libwebsockets-4.3.5/lib/tls/mbedtls/wrapper/library/ssl_cert.c000066400000000000000000000037241476025525100245100ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include "private-lib-core.h" #include "ssl_cert.h" #include "ssl_pkey.h" #include "ssl_x509.h" #include "ssl_dbg.h" #include "ssl_port.h" /** * @brief create a certification object according to input certification */ CERT *__ssl_cert_new(CERT *ic, void *rngctx) { CERT *cert; X509 *ix; EVP_PKEY *ipk; cert = ssl_mem_zalloc(sizeof(CERT)); if (!cert) { SSL_DEBUG(SSL_CERT_ERROR_LEVEL, "no enough memory > (cert)"); goto no_mem; } if (ic) { ipk = ic->pkey; ix = ic->x509; } else { ipk = NULL; ix = NULL; } cert->pkey = __EVP_PKEY_new(ipk, rngctx); if (!cert->pkey) { SSL_DEBUG(SSL_CERT_ERROR_LEVEL, "__EVP_PKEY_new() return NULL"); goto pkey_err; } cert->x509 = __X509_new(ix); if (!cert->x509) { SSL_DEBUG(SSL_CERT_ERROR_LEVEL, "__X509_new() return NULL"); goto x509_err; } return cert; x509_err: EVP_PKEY_free(cert->pkey); pkey_err: ssl_mem_free(cert); no_mem: return NULL; } /** * @brief create a certification object include private key object */ CERT *ssl_cert_new(void *rngctx) { return __ssl_cert_new(NULL, rngctx); } /** * @brief free a certification object */ void ssl_cert_free(CERT *cert) { SSL_ASSERT3(cert); X509_free(cert->x509); EVP_PKEY_free(cert->pkey); ssl_mem_free(cert); } libwebsockets-4.3.5/lib/tls/mbedtls/wrapper/library/ssl_lib.c000066400000000000000000000535371476025525100243300ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include "private-lib-core.h" #include "ssl_lib.h" #include "ssl_pkey.h" #include "ssl_x509.h" #include "ssl_cert.h" #include "ssl_dbg.h" #include "ssl_port.h" char * lws_strncpy(char *dest, const char *src, size_t size); #define SSL_SEND_DATA_MAX_LENGTH 1460 /** * @brief create a new SSL session object */ static SSL_SESSION* SSL_SESSION_new(void) { SSL_SESSION *session; session = ssl_mem_zalloc(sizeof(SSL_SESSION)); if (!session) { SSL_DEBUG(SSL_LIB_ERROR_LEVEL, "no enough memory > (session)"); goto failed1; } session->peer = X509_new(); if (!session->peer) { SSL_DEBUG(SSL_LIB_ERROR_LEVEL, "X509_new() return NULL"); goto failed2; } return session; failed2: ssl_mem_free(session); failed1: return NULL; } /** * @brief free a new SSL session object */ static void SSL_SESSION_free(SSL_SESSION *session) { X509_free(session->peer); ssl_mem_free(session); } /** * @brief Discover whether the current connection is in the error state */ int ossl_statem_in_error(const SSL *ssl) { SSL_ASSERT1(ssl); if (ssl->statem.state == MSG_FLOW_ERROR) return 1; return 0; } /** * @brief get the SSL specifical statement */ int SSL_want(const SSL *ssl) { SSL_ASSERT1(ssl); return ssl->rwstate; } /** * @brief check if SSL want nothing */ int SSL_want_nothing(const SSL *ssl) { SSL_ASSERT1(ssl); if (ssl->err) return 1; return (SSL_want(ssl) == SSL_NOTHING); } /** * @brief check if SSL want to read */ int SSL_want_read(const SSL *ssl) { SSL_ASSERT1(ssl); if (ssl->err) return 0; return (SSL_want(ssl) == SSL_READING); } /** * @brief check if SSL want to write */ int SSL_want_write(const SSL *ssl) { SSL_ASSERT1(ssl); if (ssl->err) return 0; return (SSL_want(ssl) == SSL_WRITING); } /** * @brief check if SSL want to lookup X509 certification */ int SSL_want_x509_lookup(const SSL *ssl) { SSL_ASSERT1(ssl); return (SSL_want(ssl) == SSL_WRITING); } /** * @brief get SSL error code */ int SSL_get_error(const SSL *ssl, int ret_code) { int ret = SSL_ERROR_SYSCALL; SSL_ASSERT1(ssl); if (ret_code > 0) ret = SSL_ERROR_NONE; else if (ret_code < 0) { if (ssl->err == SSL_ERROR_WANT_READ || SSL_want_read(ssl)) ret = SSL_ERROR_WANT_READ; else if (ssl->err == SSL_ERROR_WANT_WRITE || SSL_want_write(ssl)) ret = SSL_ERROR_WANT_WRITE; else ret = SSL_ERROR_SYSCALL; //unknown } else // ret_code == 0 { if (ssl->shutdown & SSL_RECEIVED_SHUTDOWN) ret = SSL_ERROR_ZERO_RETURN; else ret = SSL_ERROR_SYSCALL; } return ret; } /** * @brief get the SSL state */ OSSL_HANDSHAKE_STATE SSL_get_state(const SSL *ssl) { OSSL_HANDSHAKE_STATE state; SSL_ASSERT1(ssl); state = SSL_METHOD_CALL(get_state, ssl); return state; } const char *mbedtls_client_preload_filepath; /** * @brief create a SSL context */ SSL_CTX* SSL_CTX_new(const SSL_METHOD *method, void *rngctx) { SSL_CTX *ctx; CERT *cert; X509 *client_ca; #if defined(LWS_HAVE_mbedtls_x509_crt_parse_file) int n; #endif if (!method) { SSL_DEBUG(SSL_LIB_ERROR_LEVEL, "no no_method"); return NULL; } client_ca = X509_new(); if (!client_ca) { SSL_DEBUG(SSL_LIB_ERROR_LEVEL, "X509_new() return NULL"); goto failed1; } cert = ssl_cert_new(rngctx); if (!cert) { SSL_DEBUG(SSL_LIB_ERROR_LEVEL, "ssl_cert_new() return NULL"); goto failed2; } ctx = (SSL_CTX *)ssl_mem_zalloc(sizeof(SSL_CTX)); if (!ctx) { SSL_DEBUG(SSL_LIB_ERROR_LEVEL, "no enough memory > (ctx)"); goto failed3; } ctx->method = method; ctx->client_CA = client_ca; ctx->cert = cert; ctx->rngctx = rngctx; ctx->version = method->version; #if defined(LWS_HAVE_mbedtls_x509_crt_parse_file) if (mbedtls_client_preload_filepath) { mbedtls_x509_crt **px = (mbedtls_x509_crt **)ctx->client_CA->x509_pm; *px = malloc(sizeof(**px)); mbedtls_x509_crt_init(*px); n = mbedtls_x509_crt_parse_file(*px, mbedtls_client_preload_filepath); if (n < 0) lwsl_err("%s: unable to load cert bundle 0x%x\n", __func__, -n); else lwsl_info("%s: loaded cert bundle %d\n", __func__, n); } #endif return ctx; failed3: ssl_cert_free(cert); failed2: X509_free(client_ca); failed1: return NULL; } /** * @brief free a SSL context */ void SSL_CTX_free(SSL_CTX* ctx) { SSL_ASSERT3(ctx); ssl_cert_free(ctx->cert); X509_free(ctx->client_CA); if (ctx->alpn_protos) { ssl_mem_free((void *)ctx->alpn_protos); ctx->alpn_protos = NULL; } ssl_mem_free(ctx); } /** * @brief set the SSL context version */ int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth) { SSL_ASSERT1(ctx); SSL_ASSERT1(meth); ctx->method = meth; ctx->version = meth->version; return 1; } /** * @brief get the SSL context current method */ const SSL_METHOD *SSL_CTX_get_ssl_method(SSL_CTX *ctx) { SSL_ASSERT2(ctx); return ctx->method; } /** * @brief create a SSL */ SSL *SSL_new(SSL_CTX *ctx) { int ret = 0; SSL *ssl; if (!ctx) { SSL_DEBUG(SSL_LIB_ERROR_LEVEL, "no ctx"); return NULL; } ssl = (SSL *)ssl_mem_zalloc(sizeof(SSL)); if (!ssl) { SSL_DEBUG(SSL_LIB_ERROR_LEVEL, "no enough memory > (ssl)"); goto failed1; } ssl->session = SSL_SESSION_new(); if (!ssl->session) { SSL_DEBUG(SSL_LIB_ERROR_LEVEL, "SSL_SESSION_new() return NULL"); goto failed2; } ssl->cert = __ssl_cert_new(ctx->cert, ctx->rngctx); if (!ssl->cert) { SSL_DEBUG(SSL_LIB_ERROR_LEVEL, "__ssl_cert_new() return NULL"); goto failed3; } ssl->client_CA = __X509_new(ctx->client_CA); if (!ssl->client_CA) { SSL_DEBUG(SSL_LIB_ERROR_LEVEL, "__X509_new() return NULL"); goto failed4; } ssl->ctx = ctx; ssl->method = ctx->method; ssl->version = ctx->version; ssl->options = ctx->options; ssl->verify_mode = ctx->verify_mode; ret = SSL_METHOD_CALL(new, ssl); if (ret) { SSL_DEBUG(SSL_LIB_ERROR_LEVEL, "SSL_METHOD_CALL(new) return %d", ret); goto failed5; } _ssl_set_alpn_list(ssl); ssl->rwstate = SSL_NOTHING; return ssl; failed5: X509_free(ssl->client_CA); failed4: ssl_cert_free(ssl->cert); failed3: SSL_SESSION_free(ssl->session); failed2: ssl_mem_free(ssl); failed1: return NULL; } /** * @brief free the SSL */ void SSL_free(SSL *ssl) { SSL_ASSERT3(ssl); SSL_METHOD_CALL(free, ssl); X509_free(ssl->client_CA); ssl_cert_free(ssl->cert); SSL_SESSION_free(ssl->session); if (ssl->alpn_protos) { ssl_mem_free((void *)ssl->alpn_protos); ssl->alpn_protos = NULL; } ssl_mem_free(ssl); } /** * @brief perform the SSL handshake */ int SSL_do_handshake(SSL *ssl) { int ret; SSL_ASSERT1(ssl); ret = SSL_METHOD_CALL(handshake, ssl); return ret; } /** * @brief connect to the remote SSL server */ int SSL_connect(SSL *ssl) { SSL_ASSERT1(ssl); return SSL_do_handshake(ssl); } /** * @brief accept the remote connection */ int SSL_accept(SSL *ssl) { SSL_ASSERT1(ssl); return SSL_do_handshake(ssl); } /** * @brief shutdown the connection */ int SSL_shutdown(SSL *ssl) { int ret; SSL_ASSERT1(ssl); if (SSL_get_state(ssl) != TLS_ST_OK) return 1; ret = SSL_METHOD_CALL(shutdown, ssl); return ret; } /** * @brief reset the SSL */ int SSL_clear(SSL *ssl) { int ret; SSL_ASSERT1(ssl); ret = SSL_shutdown(ssl); if (1 != ret) { SSL_DEBUG(SSL_LIB_ERROR_LEVEL, "SSL_shutdown return %d", ret); goto failed1; } SSL_METHOD_CALL(free, ssl); ret = SSL_METHOD_CALL(new, ssl); if (!ret) { SSL_DEBUG(SSL_LIB_ERROR_LEVEL, "SSL_METHOD_CALL(new) return %d", ret); goto failed1; } return 1; failed1: return ret; } /** * @brief read data from to remote */ int SSL_read(SSL *ssl, void *buffer, int len) { int ret; SSL_ASSERT1(ssl); SSL_ASSERT1(buffer); SSL_ASSERT1(len); ssl->rwstate = SSL_READING; ret = SSL_METHOD_CALL(read, ssl, buffer, len); if (ret == len) ssl->rwstate = SSL_NOTHING; return ret; } /** * @brief send the data to remote */ int SSL_write(SSL *ssl, const void *buffer, int len) { int ret; int send_bytes, bytes; const unsigned char *pbuf; SSL_ASSERT1(ssl); SSL_ASSERT1(buffer); SSL_ASSERT1(len); ssl->rwstate = SSL_WRITING; send_bytes = len; pbuf = (const unsigned char *)buffer; do { if (send_bytes > SSL_SEND_DATA_MAX_LENGTH) bytes = SSL_SEND_DATA_MAX_LENGTH; else bytes = send_bytes; if (ssl->interrupted_remaining_write) { bytes = ssl->interrupted_remaining_write; ssl->interrupted_remaining_write = 0; } ret = SSL_METHOD_CALL(send, ssl, pbuf, bytes); //printf("%s: ssl_pm said %d for %d requested (cum %d)\n", __func__, ret, bytes, len -send_bytes); /* the return is a NEGATIVE OpenSSL error code, or the length sent */ if (ret > 0) { pbuf += ret; send_bytes -= ret; } else ssl->interrupted_remaining_write = bytes; } while (ret > 0 && send_bytes && ret == bytes); if (ret >= 0) { ret = len - send_bytes; if (!ret) ssl->rwstate = SSL_NOTHING; } else { if (send_bytes == len) ret = -1; else ret = len - send_bytes; } return ret; } /** * @brief get SSL context of the SSL */ SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl) { SSL_ASSERT2(ssl); return ssl->ctx; } /** * @brief get the SSL current method */ const SSL_METHOD *SSL_get_ssl_method(SSL *ssl) { SSL_ASSERT2(ssl); return ssl->method; } /** * @brief set the SSL method */ int SSL_set_ssl_method(SSL *ssl, const SSL_METHOD *method) { int ret; SSL_ASSERT1(ssl); SSL_ASSERT1(method); if (ssl->version != method->version) { ret = SSL_shutdown(ssl); if (1 != ret) { SSL_DEBUG(SSL_LIB_ERROR_LEVEL, "SSL_shutdown return %d", ret); goto failed1; } SSL_METHOD_CALL(free, ssl); ssl->method = method; ret = SSL_METHOD_CALL(new, ssl); if (!ret) { SSL_DEBUG(SSL_LIB_ERROR_LEVEL, "SSL_METHOD_CALL(new) return %d", ret); goto failed1; } } else { ssl->method = method; } return 1; failed1: return ret; } /** * @brief get SSL shutdown mode */ int SSL_get_shutdown(const SSL *ssl) { SSL_ASSERT1(ssl); return ssl->shutdown; } /** * @brief set SSL shutdown mode */ void SSL_set_shutdown(SSL *ssl, int mode) { SSL_ASSERT3(ssl); ssl->shutdown = mode; } /** * @brief get the number of the bytes to be read */ int SSL_pending(const SSL *ssl) { int ret; SSL_ASSERT1(ssl); ret = SSL_METHOD_CALL(pending, ssl); return ret; } /** * @brief check if some data can be read */ int SSL_has_pending(const SSL *ssl) { int ret; SSL_ASSERT1(ssl); if (SSL_pending(ssl)) ret = 1; else ret = 0; return ret; } /** * @brief clear the SSL context option bit of "op" */ unsigned long SSL_CTX_clear_options(SSL_CTX *ctx, unsigned long op) { SSL_ASSERT1(ctx); return ctx->options &= ~op; } /** * @brief get the SSL context option */ unsigned long SSL_CTX_get_options(SSL_CTX *ctx) { SSL_ASSERT1(ctx); return ctx->options; } /** * @brief set the option of the SSL context */ unsigned long SSL_CTX_set_options(SSL_CTX *ctx, unsigned long opt) { SSL_ASSERT1(ctx); return ctx->options |= opt; } /** * @brief clear SSL option */ unsigned long SSL_clear_options(SSL *ssl, unsigned long op) { SSL_ASSERT1(ssl); return ssl->options & ~op; } /** * @brief get SSL option */ unsigned long SSL_get_options(SSL *ssl) { SSL_ASSERT1(ssl); return ssl->options; } /** * @brief clear SSL option */ unsigned long SSL_set_options(SSL *ssl, unsigned long op) { SSL_ASSERT1(ssl); return ssl->options |= op; } /** * @brief get the socket handle of the SSL */ int SSL_get_fd(const SSL *ssl) { int ret; SSL_ASSERT1(ssl); ret = SSL_METHOD_CALL(get_fd, ssl, 0); return ret; } /** * @brief get the read only socket handle of the SSL */ int SSL_get_rfd(const SSL *ssl) { int ret; SSL_ASSERT1(ssl); ret = SSL_METHOD_CALL(get_fd, ssl, 0); return ret; } /** * @brief get the write only socket handle of the SSL */ int SSL_get_wfd(const SSL *ssl) { int ret; SSL_ASSERT1(ssl); ret = SSL_METHOD_CALL(get_fd, ssl, 0); return ret; } /** * @brief bind the socket file description into the SSL */ int SSL_set_fd(SSL *ssl, int fd) { SSL_ASSERT1(ssl); SSL_ASSERT1(fd >= 0); SSL_METHOD_CALL(set_fd, ssl, fd, 0); return 1; } /** * @brief bind the read only socket file description into the SSL */ int SSL_set_rfd(SSL *ssl, int fd) { SSL_ASSERT1(ssl); SSL_ASSERT1(fd >= 0); SSL_METHOD_CALL(set_fd, ssl, fd, 0); return 1; } /** * @brief bind the write only socket file description into the SSL */ int SSL_set_wfd(SSL *ssl, int fd) { SSL_ASSERT1(ssl); SSL_ASSERT1(fd >= 0); SSL_METHOD_CALL(set_fd, ssl, fd, 0); return 1; } /** * @brief get SSL version */ int SSL_version(const SSL *ssl) { SSL_ASSERT1(ssl); return ssl->version; } /** * @brief get the SSL version string */ static const char* ssl_protocol_to_string(int version) { const char *str; if (version == TLS1_2_VERSION) str = "TLSv1.2"; else if (version == TLS1_1_VERSION) str = "TLSv1.1"; else if (version == TLS1_VERSION) str = "TLSv1"; else if (version == SSL3_VERSION) str = "SSLv3"; else str = "unknown"; return str; } /** * @brief get the SSL current version */ const char *SSL_get_version(const SSL *ssl) { SSL_ASSERT2(ssl); return ssl_protocol_to_string(SSL_version(ssl)); } /** * @brief get alert type string */ const char *SSL_alert_type_string(int value) { const char *str; switch (value >> 8) { case SSL3_AL_WARNING: str = "W"; break; case SSL3_AL_FATAL: str = "F"; break; default: str = "U"; break; } return str; } /** * @brief set the SSL context read buffer length */ void SSL_CTX_set_default_read_buffer_len(SSL_CTX *ctx, size_t len) { SSL_ASSERT3(ctx); ctx->read_buffer_len = (int)len; } /** * @brief set the SSL read buffer length */ void SSL_set_default_read_buffer_len(SSL *ssl, size_t len) { SSL_ASSERT3(ssl); SSL_ASSERT3(len); SSL_METHOD_CALL(set_bufflen, ssl, (int)len); } /** * @brief set the SSL information callback function */ void SSL_set_info_callback(SSL *ssl, void (*cb) (const SSL *ssl, int type, int val)) { SSL_ASSERT3(ssl); ssl->info_callback = cb; } /** * @brief add SSL context reference count by '1' */ int SSL_CTX_up_ref(SSL_CTX *ctx) { SSL_ASSERT1(ctx); /** * no support multi-thread SSL here */ ctx->references++; return 1; } /** * @brief set the SSL security level */ void SSL_set_security_level(SSL *ssl, int level) { SSL_ASSERT3(ssl); ssl->cert->sec_level = level; } /** * @brief get the SSL security level */ int SSL_get_security_level(const SSL *ssl) { SSL_ASSERT1(ssl); return ssl->cert->sec_level; } /** * @brief get the SSL verifying mode of the SSL context */ int SSL_CTX_get_verify_mode(const SSL_CTX *ctx) { SSL_ASSERT1(ctx); return ctx->verify_mode; } /** * @brief set the session timeout time */ long SSL_CTX_set_timeout(SSL_CTX *ctx, long t) { long l; SSL_ASSERT1(ctx); l = ctx->session_timeout; ctx->session_timeout = t; return l; } /** * @brief get the session timeout time */ long SSL_CTX_get_timeout(const SSL_CTX *ctx) { SSL_ASSERT1(ctx); return ctx->session_timeout; } /** * @brief set the SSL if we can read as many as data */ void SSL_set_read_ahead(SSL *ssl, int yes) { SSL_ASSERT3(ssl); ssl->rlayer.read_ahead = yes; } /** * @brief set the SSL context if we can read as many as data */ void SSL_CTX_set_read_ahead(SSL_CTX *ctx, int yes) { SSL_ASSERT3(ctx); ctx->read_ahead = yes; } /** * @brief get the SSL ahead signal if we can read as many as data */ int SSL_get_read_ahead(const SSL *ssl) { SSL_ASSERT1(ssl); return ssl->rlayer.read_ahead; } /** * @brief get the SSL context ahead signal if we can read as many as data */ long SSL_CTX_get_read_ahead(SSL_CTX *ctx) { SSL_ASSERT1(ctx); return ctx->read_ahead; } /** * @brief check if the SSL context can read as many as data */ long SSL_CTX_get_default_read_ahead(SSL_CTX *ctx) { SSL_ASSERT1(ctx); return ctx->read_ahead; } /** * @brief set SSL session time */ long SSL_set_time(SSL *ssl, long t) { SSL_ASSERT1(ssl); ssl->session->time = t; return t; } /** * @brief set SSL session timeout time */ long SSL_set_timeout(SSL *ssl, long t) { SSL_ASSERT1(ssl); ssl->session->timeout = t; return t; } /** * @brief get the verifying result of the SSL certification */ long SSL_get_verify_result(const SSL *ssl) { SSL_ASSERT1(ssl); return SSL_METHOD_CALL(get_verify_result, ssl); } /** * @brief get the SSL verifying depth of the SSL context */ int SSL_CTX_get_verify_depth(const SSL_CTX *ctx) { SSL_ASSERT1(ctx); return ctx->param.depth; } /** * @brief set the SSL verify depth of the SSL context */ void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth) { SSL_ASSERT3(ctx); ctx->param.depth = depth; } /** * @brief get the SSL verifying depth of the SSL */ int SSL_get_verify_depth(const SSL *ssl) { SSL_ASSERT1(ssl); return ssl->param.depth; } /** * @brief set the SSL verify depth of the SSL */ void SSL_set_verify_depth(SSL *ssl, int depth) { SSL_ASSERT3(ssl); ssl->param.depth = depth; } /** * @brief set the SSL context verifying of the SSL context */ void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, int (*verify_callback)(SSL *, mbedtls_x509_crt *)) { SSL_ASSERT3(ctx); ctx->verify_mode = mode; ctx->default_verify_callback = verify_callback; } /** * @brief set the SSL verifying of the SSL context */ void SSL_set_verify(SSL *ssl, int mode, int (*verify_callback)(SSL *, mbedtls_x509_crt *)) { SSL_ASSERT3(ssl); ssl->verify_mode = mode; ssl->verify_callback = verify_callback; } void ERR_error_string_n(unsigned long e, char *buf, size_t len) { lws_strncpy(buf, "unknown", len); } void ERR_free_strings(void) { } char *ERR_error_string(unsigned long e, char *buf) { if (!buf) return "unknown"; switch(e) { case X509_V_ERR_INVALID_CA: strcpy(buf, "CA is not trusted"); break; case X509_V_ERR_HOSTNAME_MISMATCH: strcpy(buf, "Hostname mismatch"); break; case X509_V_ERR_CA_KEY_TOO_SMALL: strcpy(buf, "CA key too small"); break; case X509_V_ERR_CA_MD_TOO_WEAK: strcpy(buf, "MD key too weak"); break; case X509_V_ERR_CERT_NOT_YET_VALID: strcpy(buf, "Cert from the future"); break; case X509_V_ERR_CERT_HAS_EXPIRED: strcpy(buf, "Cert expired"); break; default: strcpy(buf, "unknown"); break; } return buf; } void *SSL_CTX_get_ex_data(const SSL_CTX *ctx, int idx) { return NULL; } /* * Openssl wants the valid protocol names supplied like this: * * (unsigned char *)"\x02h2\x08http/1.1", 6 + 9 * * Mbedtls wants this: * * Pointer to a NULL-terminated list of supported protocols, in decreasing * preference order. The pointer to the list is recorded by the library for * later reference as required, so the lifetime of the table must be at least * as long as the lifetime of the SSL configuration structure. * * So accept the OpenSSL style and convert to mbedtls style */ static void _openssl_alpn_to_mbedtls(struct alpn_ctx *ac, char ***palpn_protos) { unsigned char *p = ac->data, *q; unsigned char len; char **alpn_protos; int count = 0; /* find out how many entries he gave us */ if (ac->len) { len = *p++; if (len) count++; while (p - ac->data < ac->len) { if (len--) { p++; continue; } len = *p++; if (!len) break; count++; } } if (!count) return; /* allocate space for count + 1 pointers and the data afterwards */ alpn_protos = ssl_mem_zalloc((unsigned int)(count + 1) * sizeof(char *) + ac->len + 1); if (!alpn_protos) return; *palpn_protos = alpn_protos; /* convert to mbedtls format */ q = (unsigned char *)alpn_protos + (unsigned int)(count + 1) * sizeof(char *); p = ac->data; count = 0; len = *p++; alpn_protos[count] = (char *)q; while (p - ac->data < ac->len) { if (len--) { *q++ = *p++; continue; } *q++ = '\0'; count++; len = *p++; alpn_protos[count] = (char *)q; if (!len) break; } if (!len) { *q++ = '\0'; count++; /* len = *p++; */ alpn_protos[count] = (char *)q; } alpn_protos[count] = NULL; /* last pointer ends list with NULL */ } void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx, next_proto_cb cb, void *arg) { struct alpn_ctx *ac = arg; ctx->alpn_cb = cb; _openssl_alpn_to_mbedtls(ac, (char ***)&ctx->alpn_protos); } void SSL_set_alpn_select_cb(SSL *ssl, void *arg) { struct alpn_ctx *ac = arg; _openssl_alpn_to_mbedtls(ac, (char ***)&ssl->alpn_protos); _ssl_set_alpn_list(ssl); } libwebsockets-4.3.5/lib/tls/mbedtls/wrapper/library/ssl_methods.c000066400000000000000000000052161476025525100252140ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include "private-lib-core.h" #include "ssl_methods.h" #include "ssl_pm.h" /** * TLS method function collection */ IMPLEMENT_TLS_METHOD_FUNC(TLS_method_func, ssl_pm_new, ssl_pm_free, ssl_pm_handshake, ssl_pm_shutdown, ssl_pm_clear, ssl_pm_read, ssl_pm_send, ssl_pm_pending, ssl_pm_set_fd, ssl_pm_get_fd, ssl_pm_set_bufflen, ssl_pm_get_verify_result, ssl_pm_get_state); /** * TLS or SSL client method collection */ IMPLEMENT_TLS_METHOD(TLS_ANY_VERSION, 0, TLS_method_func, TLS_client_method); IMPLEMENT_TLS_METHOD(TLS1_2_VERSION, 0, TLS_method_func, TLSv1_2_client_method); #if 0 IMPLEMENT_TLS_METHOD(TLS1_1_VERSION, 0, TLS_method_func, TLSv1_1_client_method); IMPLEMENT_TLS_METHOD(TLS1_VERSION, 0, TLS_method_func, TLSv1_client_method); IMPLEMENT_SSL_METHOD(SSL3_VERSION, 0, TLS_method_func, SSLv3_client_method); #endif /** * TLS or SSL server method collection */ IMPLEMENT_TLS_METHOD(TLS_ANY_VERSION, 1, TLS_method_func, TLS_server_method); IMPLEMENT_TLS_METHOD(TLS1_2_VERSION, 1, TLS_method_func, TLSv1_2_server_method); #if 0 IMPLEMENT_TLS_METHOD(TLS1_1_VERSION, 1, TLS_method_func, TLSv1_1_server_method); IMPLEMENT_TLS_METHOD(TLS1_VERSION, 0, TLS_method_func, TLSv1_server_method); IMPLEMENT_SSL_METHOD(SSL3_VERSION, 1, TLS_method_func, SSLv3_server_method); #endif /** * TLS or SSL method collection */ IMPLEMENT_TLS_METHOD(TLS_ANY_VERSION, -1, TLS_method_func, TLS_method); IMPLEMENT_SSL_METHOD(TLS1_2_VERSION, -1, TLS_method_func, TLSv1_2_method); #if 0 IMPLEMENT_SSL_METHOD(TLS1_1_VERSION, -1, TLS_method_func, TLSv1_1_method); IMPLEMENT_SSL_METHOD(TLS1_VERSION, -1, TLS_method_func, TLSv1_method); IMPLEMENT_SSL_METHOD(SSL3_VERSION, -1, TLS_method_func, SSLv3_method); #endif /** * @brief get X509 object method */ IMPLEMENT_X509_METHOD(X509_method, x509_pm_new, x509_pm_free, x509_pm_load, x509_pm_show_info); /** * @brief get private key object method */ IMPLEMENT_PKEY_METHOD(EVP_PKEY_method, pkey_pm_new, pkey_pm_free, pkey_pm_load); libwebsockets-4.3.5/lib/tls/mbedtls/wrapper/library/ssl_pkey.c000066400000000000000000000120261476025525100245160ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include "private-lib-core.h" #include "ssl_pkey.h" #include "ssl_methods.h" #include "ssl_dbg.h" #include "ssl_port.h" /** * @brief create a private key object according to input private key */ EVP_PKEY* __EVP_PKEY_new(EVP_PKEY *ipk, void *rngctx) { int ret; EVP_PKEY *pkey; pkey = ssl_mem_zalloc(sizeof(EVP_PKEY)); if (!pkey) { SSL_DEBUG(SSL_PKEY_ERROR_LEVEL, "no enough memory > (pkey)"); goto no_mem; } if (ipk) { pkey->method = ipk->method; } else { pkey->method = EVP_PKEY_method(); } ret = EVP_PKEY_METHOD_CALL(new, pkey, ipk, rngctx); if (ret) { SSL_DEBUG(SSL_PKEY_ERROR_LEVEL, "EVP_PKEY_METHOD_CALL(new) return %d", ret); goto failed; } return pkey; failed: ssl_mem_free(pkey); no_mem: return NULL; } /** * @brief create a private key object */ EVP_PKEY* EVP_PKEY_new(void *rngctx) { return __EVP_PKEY_new(NULL, rngctx); } /** * @brief free a private key object */ void EVP_PKEY_free(EVP_PKEY *pkey) { SSL_ASSERT3(pkey); EVP_PKEY_METHOD_CALL(free, pkey); ssl_mem_free(pkey); } /** * @brief load a character key context into system context. If '*a' is pointed to the * private key, then load key into it. Or create a new private key object */ EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp, long length, void *rngctx) { int m = 0; int ret; EVP_PKEY *pkey; SSL_ASSERT2(pp); SSL_ASSERT2(*pp); SSL_ASSERT2(length); if (a && *a) { pkey = *a; } else { pkey = EVP_PKEY_new(rngctx); if (!pkey) { SSL_DEBUG(SSL_PKEY_ERROR_LEVEL, "EVP_PKEY_new() return NULL"); goto failed1; } m = 1; } ret = EVP_PKEY_METHOD_CALL(load, pkey, *pp, (int)length); if (ret) { SSL_DEBUG(SSL_PKEY_ERROR_LEVEL, "EVP_PKEY_METHOD_CALL(load) return %d", ret); goto failed2; } if (a) *a = pkey; return pkey; failed2: if (m) EVP_PKEY_free(pkey); failed1: return NULL; } /** * @brief set the SSL context private key */ int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey) { SSL_ASSERT1(ctx); SSL_ASSERT1(pkey); if (ctx->cert->pkey == pkey) return 1; if (ctx->cert->pkey) EVP_PKEY_free(ctx->cert->pkey); ctx->cert->pkey = pkey; return 1; } /** * @brief set the SSL private key */ int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey) { SSL_ASSERT1(ssl); SSL_ASSERT1(pkey); if (ssl->cert->pkey == pkey) return 1; if (ssl->cert->pkey) EVP_PKEY_free(ssl->cert->pkey); ssl->cert->pkey = pkey; return 1; } /** * @brief load private key into the SSL context */ int SSL_CTX_use_PrivateKey_ASN1(int type, SSL_CTX *ctx, const unsigned char *d, long len) { int ret; EVP_PKEY *pk; pk = d2i_PrivateKey(0, NULL, &d, len, ctx->rngctx); if (!pk) { SSL_DEBUG(SSL_PKEY_ERROR_LEVEL, "d2i_PrivateKey() return NULL"); goto failed1; } ret = SSL_CTX_use_PrivateKey(ctx, pk); if (!ret) { SSL_DEBUG(SSL_PKEY_ERROR_LEVEL, "SSL_CTX_use_PrivateKey() return %d", ret); goto failed2; } return 1; failed2: EVP_PKEY_free(pk); failed1: return 0; } /** * @brief load private key into the SSL */ int SSL_use_PrivateKey_ASN1(int type, SSL *ssl, const unsigned char *d, long len) { int ret; EVP_PKEY *pk; pk = d2i_PrivateKey(0, NULL, &d, len, ssl->ctx->rngctx); if (!pk) { SSL_DEBUG(SSL_PKEY_ERROR_LEVEL, "d2i_PrivateKey() return NULL"); goto failed1; } ret = SSL_use_PrivateKey(ssl, pk); if (!ret) { SSL_DEBUG(SSL_PKEY_ERROR_LEVEL, "SSL_use_PrivateKey() return %d", ret); goto failed2; } return 1; failed2: EVP_PKEY_free(pk); failed1: return 0; } /** * @brief load the private key file into SSL context */ int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type) { return 0; } /** * @brief load the private key file into SSL */ int SSL_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type) { return 0; } /** * @brief load the RSA ASN1 private key into SSL context */ int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, long len) { return SSL_CTX_use_PrivateKey_ASN1(0, ctx, d, len); } libwebsockets-4.3.5/lib/tls/mbedtls/wrapper/library/ssl_stack.c000066400000000000000000000034061476025525100246550ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include "private-lib-core.h" #include "ssl_stack.h" #include "ssl_dbg.h" #include "ssl_port.h" #ifndef CONFIG_MIN_NODES #define MIN_NODES 4 #else #define MIN_NODES CONFIG_MIN_NODES #endif /** * @brief create a openssl stack object */ OPENSSL_STACK* OPENSSL_sk_new(OPENSSL_sk_compfunc c) { OPENSSL_STACK *stack; char **data; stack = ssl_mem_zalloc(sizeof(OPENSSL_STACK)); if (!stack) { SSL_DEBUG(SSL_STACK_ERROR_LEVEL, "no enough memory > (stack)"); goto no_mem1; } data = ssl_mem_zalloc(sizeof(*data) * MIN_NODES); if (!data) { SSL_DEBUG(SSL_STACK_ERROR_LEVEL, "no enough memory > (data)"); goto no_mem2; } stack->data = data; stack->num_alloc = MIN_NODES; stack->c = c; return stack; no_mem2: ssl_mem_free(stack); no_mem1: return NULL; } /** * @brief create a NULL function openssl stack object */ OPENSSL_STACK *OPENSSL_sk_new_null(void) { return OPENSSL_sk_new((OPENSSL_sk_compfunc)NULL); } /** * @brief free openssl stack object */ void OPENSSL_sk_free(OPENSSL_STACK *stack) { SSL_ASSERT3(stack); ssl_mem_free(stack->data); ssl_mem_free(stack); } libwebsockets-4.3.5/lib/tls/mbedtls/wrapper/library/ssl_x509.c000066400000000000000000000145121476025525100242550ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include "private-lib-core.h" #include "ssl_x509.h" #include "ssl_methods.h" #include "ssl_dbg.h" #include "ssl_port.h" #include /** * @brief show X509 certification information */ int __X509_show_info(X509 *x) { return X509_METHOD_CALL(show_info, x); } /** * @brief create a X509 certification object according to input X509 certification */ X509* __X509_new(X509 *ix) { int ret; X509 *x; x = ssl_mem_zalloc(sizeof(X509)); if (!x) { SSL_DEBUG(SSL_X509_ERROR_LEVEL, "no enough memory > (x)"); goto no_mem; } if (ix) x->method = ix->method; else x->method = X509_method(); ret = X509_METHOD_CALL(new, x, ix); if (ret) { SSL_DEBUG(SSL_PKEY_ERROR_LEVEL, "X509_METHOD_CALL(new) return %d", ret); goto failed; } return x; failed: ssl_mem_free(x); no_mem: return NULL; } /** * @brief create a X509 certification object */ X509* X509_new(void) { return __X509_new(NULL); } /** * @brief free a X509 certification object */ void X509_free(X509 *x) { SSL_ASSERT3(x); X509_METHOD_CALL(free, x); ssl_mem_free(x); }; /** * @brief load a character certification context into system context. If '*cert' is pointed to the * certification, then load certification into it. Or create a new X509 certification object */ X509* d2i_X509(X509 **cert, const unsigned char *buffer, long len) { int m = 0; int ret; X509 *x; SSL_ASSERT2(buffer); SSL_ASSERT2(len); if (cert && *cert) { x = *cert; } else { x = X509_new(); if (!x) { SSL_DEBUG(SSL_PKEY_ERROR_LEVEL, "X509_new() return NULL"); goto failed1; } m = 1; } ret = X509_METHOD_CALL(load, x, buffer, (int)len); if (ret) { SSL_DEBUG(SSL_PKEY_ERROR_LEVEL, "X509_METHOD_CALL(load) return %d", ret); goto failed2; } return x; failed2: if (m) X509_free(x); failed1: return NULL; } /** * @brief return SSL X509 verify parameters */ X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl) { return &ssl->param; } /** * @brief set X509 host verification flags */ int X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param, unsigned long flags) { /* flags not supported yet */ return 0; } /** * @brief clear X509 host verification flags */ int X509_VERIFY_PARAM_clear_hostflags(X509_VERIFY_PARAM *param, unsigned long flags) { /* flags not supported yet */ return 0; } /** * @brief set SSL context client CA certification */ int SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x) { SSL_ASSERT1(ctx); SSL_ASSERT1(x); assert(ctx); if (ctx->client_CA == x) return 1; X509_free(ctx->client_CA); ctx->client_CA = x; return 1; } /** * @brief add CA client certification into the SSL */ int SSL_CTX_add_client_CA_ASN1(SSL_CTX *ctx, int len, const unsigned char *d) { SSL_ASSERT1(ctx); if (!d2i_X509(&ctx->client_CA, d, len)) { SSL_DEBUG(SSL_PKEY_ERROR_LEVEL, "d2i_X509() return NULL"); return 0; } return 1; } /** * @brief add CA client certification into the SSL */ int SSL_add_client_CA(SSL *ssl, X509 *x) { SSL_ASSERT1(ssl); SSL_ASSERT1(x); if (ssl->client_CA == x) return 1; X509_free(ssl->client_CA); ssl->client_CA = x; return 1; } /** * @brief set the SSL context certification */ int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x) { SSL_ASSERT1(ctx); SSL_ASSERT1(x); if (ctx->cert->x509 == x) return 1; X509_free(ctx->cert->x509); ctx->cert->x509 = x; return 1; } /** * @brief set the SSL certification */ int SSL_use_certificate(SSL *ssl, X509 *x) { SSL_ASSERT1(ssl); SSL_ASSERT1(x); if (ssl->cert->x509 == x) return 1; X509_free(ssl->cert->x509); ssl->cert->x509 = x; return 1; } /** * @brief get the SSL certification point */ X509 *SSL_get_certificate(const SSL *ssl) { SSL_ASSERT2(ssl); return ssl->cert->x509; } /** * @brief load certification into the SSL context */ int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, const unsigned char *d) { int ret; X509 *x; x = d2i_X509(NULL, d, len); if (!x) { SSL_DEBUG(SSL_PKEY_ERROR_LEVEL, "d2i_X509() return NULL"); goto failed1; } ret = SSL_CTX_use_certificate(ctx, x); if (!ret) { SSL_DEBUG(SSL_PKEY_ERROR_LEVEL, "SSL_CTX_use_certificate() return %d", ret); goto failed2; } return 1; failed2: X509_free(x); failed1: return 0; } /** * @brief load certification into the SSL */ int SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len) { int ret; X509 *x; x = d2i_X509(NULL, d, len); if (!x) { SSL_DEBUG(SSL_PKEY_ERROR_LEVEL, "d2i_X509() return NULL"); goto failed1; } ret = SSL_use_certificate(ssl, x); if (!ret) { SSL_DEBUG(SSL_PKEY_ERROR_LEVEL, "SSL_use_certificate() return %d", ret); goto failed2; } return 1; failed2: X509_free(x); failed1: return 0; } /** * @brief load the certification file into SSL context */ int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type) { return 0; } /** * @brief load the certification file into SSL */ int SSL_use_certificate_file(SSL *ssl, const char *file, int type) { return 0; } /** * @brief get peer certification */ X509 *SSL_get_peer_certificate(const SSL *ssl) { SSL_ASSERT2(ssl); return ssl->session->peer; } int X509_STORE_CTX_get_error(X509_STORE_CTX *ctx) { return X509_V_ERR_UNSPECIFIED; } int X509_STORE_CTX_get_error_depth(X509_STORE_CTX *ctx) { return 0; } const char *X509_verify_cert_error_string(long n) { return "unknown"; } libwebsockets-4.3.5/lib/tls/mbedtls/wrapper/platform/000077500000000000000000000000001476025525100227005ustar00rootroot00000000000000libwebsockets-4.3.5/lib/tls/mbedtls/wrapper/platform/ssl_pm.c000077500000000000000000000647041476025525100243570ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include "private-lib-core.h" #include "ssl_pm.h" #include "ssl_port.h" #include "ssl_dbg.h" /* mbedtls include */ #include "mbedtls/platform.h" #if defined(LWS_HAVE_MBEDTLS_NET_SOCKETS) #include "mbedtls/net_sockets.h" #else #include "mbedtls/net.h" #endif #include "mbedtls/debug.h" #include "mbedtls/entropy.h" #include "mbedtls/ctr_drbg.h" #include "mbedtls/error.h" #define X509_INFO_STRING_LENGTH 8192 struct ssl_pm { /* local socket file description */ mbedtls_net_context fd; /* remote client socket file description */ mbedtls_net_context cl_fd; mbedtls_ssl_config conf; mbedtls_ctr_drbg_context ctr_drbg; mbedtls_ssl_context ssl; mbedtls_entropy_context entropy; SSL *owner; }; struct x509_pm { mbedtls_x509_crt *x509_crt; mbedtls_x509_crt *ex_crt; }; struct pkey_pm { mbedtls_pk_context *pkey; mbedtls_pk_context *ex_pkey; void *rngctx; }; unsigned int max_content_len; /*********************************************************************************************/ /************************************ SSL arch interface *************************************/ //#ifdef CONFIG_OPENSSL_LOWLEVEL_DEBUG /* mbedtls debug level */ #define MBEDTLS_DEBUG_LEVEL 4 /** * @brief mbedtls debug function */ static void ssl_platform_debug(void *ctx, int level, const char *file, int line, const char *str) { /* Shorten 'file' from the whole file path to just the filename This is a bit wasteful because the macros are compiled in with the full _FILE_ path in each case. */ // char *file_sep = rindex(file, '/'); // if(file_sep) // file = file_sep + 1; printf("%s:%d %s", file, line, str); } //#endif static int lws_mbedtls_f_vrfy(void *opaque, mbedtls_x509_crt *x509, int state, uint32_t *pflags) { struct ssl_pm *ssl_pm = (struct ssl_pm *)opaque; if (ssl_pm->owner->verify_callback) (ssl_pm->owner->verify_callback)(ssl_pm->owner, x509); return 0; } /** * @brief create SSL low-level object */ int ssl_pm_new(SSL *ssl) { struct ssl_pm *ssl_pm; int ret; const unsigned char pers[] = "OpenSSL PM"; size_t pers_len = sizeof(pers); int endpoint; int version; const SSL_METHOD *method = ssl->method; ssl_pm = ssl_mem_zalloc(sizeof(struct ssl_pm)); if (!ssl_pm) { SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "no enough memory > (ssl_pm)"); goto no_mem; } ssl_pm->owner = ssl; if (!ssl->ctx->read_buffer_len) ssl->ctx->read_buffer_len = 2048; max_content_len = (unsigned int)ssl->ctx->read_buffer_len; // printf("ssl->ctx->read_buffer_len = %d ++++++++++++++++++++\n", ssl->ctx->read_buffer_len); mbedtls_net_init(&ssl_pm->fd); mbedtls_net_init(&ssl_pm->cl_fd); mbedtls_ssl_config_init(&ssl_pm->conf); mbedtls_ctr_drbg_init(&ssl_pm->ctr_drbg); mbedtls_entropy_init(&ssl_pm->entropy); mbedtls_ssl_init(&ssl_pm->ssl); #if defined(LWS_HAVE_mbedtls_ssl_set_verify) mbedtls_ssl_set_verify(&ssl_pm->ssl, lws_mbedtls_f_vrfy, ssl_pm); #else mbedtls_ssl_conf_verify(&ssl_pm->conf, lws_mbedtls_f_vrfy, ssl_pm); #endif ret = mbedtls_ctr_drbg_seed(&ssl_pm->ctr_drbg, mbedtls_entropy_func, &ssl_pm->entropy, pers, pers_len); if (ret) { lwsl_notice("%s: mbedtls_ctr_drbg_seed() return -0x%x", __func__, -ret); //goto mbedtls_err1; } if (method->endpoint) { endpoint = MBEDTLS_SSL_IS_SERVER; } else { endpoint = MBEDTLS_SSL_IS_CLIENT; } ret = mbedtls_ssl_config_defaults(&ssl_pm->conf, endpoint, MBEDTLS_SSL_TRANSPORT_STREAM, MBEDTLS_SSL_PRESET_DEFAULT); if (ret) { lwsl_err("%s: mbedtls_ssl_config_defaults() return -0x%x", __func__, -ret); SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "mbedtls_ssl_config_defaults() return -0x%x", -ret); goto mbedtls_err2; } if (TLS_ANY_VERSION != ssl->version) { if (TLS1_2_VERSION == ssl->version) version = MBEDTLS_SSL_MINOR_VERSION_3; else if (TLS1_1_VERSION == ssl->version) version = 2; else version = 1; mbedtls_ssl_conf_max_version(&ssl_pm->conf, MBEDTLS_SSL_MAJOR_VERSION_3, version); mbedtls_ssl_conf_min_version(&ssl_pm->conf, MBEDTLS_SSL_MAJOR_VERSION_3, version); } else { mbedtls_ssl_conf_max_version(&ssl_pm->conf, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3); #if defined(MBEDTLS_SSL_PROTO_TLS1_2) mbedtls_ssl_conf_min_version(&ssl_pm->conf, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3); #else mbedtls_ssl_conf_min_version(&ssl_pm->conf, MBEDTLS_SSL_MAJOR_VERSION_3, 1); #endif } mbedtls_ssl_conf_rng(&ssl_pm->conf, mbedtls_ctr_drbg_random, &ssl_pm->ctr_drbg); //#ifdef CONFIG_OPENSSL_LOWLEVEL_DEBUG // mbedtls_debug_set_threshold(MBEDTLS_DEBUG_LEVEL); // mbedtls_ssl_conf_dbg(&ssl_pm->conf, ssl_platform_debug, NULL); //#else mbedtls_ssl_conf_dbg(&ssl_pm->conf, ssl_platform_debug, NULL); //#endif ret = mbedtls_ssl_setup(&ssl_pm->ssl, &ssl_pm->conf); if (ret) { lwsl_err("%s: mbedtls_ssl_setup() return -0x%x", __func__, -ret); SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "mbedtls_ssl_setup() return -0x%x", -ret); goto mbedtls_err2; } mbedtls_ssl_set_bio(&ssl_pm->ssl, &ssl_pm->fd, lws_plat_mbedtls_net_send, lws_plat_mbedtls_net_recv, NULL); ssl->ssl_pm = ssl_pm; return 0; mbedtls_err2: mbedtls_ssl_config_free(&ssl_pm->conf); mbedtls_ctr_drbg_free(&ssl_pm->ctr_drbg); //mbedtls_err1: mbedtls_entropy_free(&ssl_pm->entropy); ssl_mem_free(ssl_pm); no_mem: return -1; } /** * @brief free SSL low-level object */ void ssl_pm_free(SSL *ssl) { struct ssl_pm *ssl_pm = (struct ssl_pm *)ssl->ssl_pm; mbedtls_ctr_drbg_free(&ssl_pm->ctr_drbg); mbedtls_entropy_free(&ssl_pm->entropy); mbedtls_ssl_config_free(&ssl_pm->conf); mbedtls_ssl_free(&ssl_pm->ssl); ssl_mem_free(ssl_pm); ssl->ssl_pm = NULL; } /** * @brief reload SSL low-level certification object */ static int ssl_pm_reload_crt(SSL *ssl) { struct x509_pm *ca_pm = (struct x509_pm *)ssl->client_CA->x509_pm; struct ssl_pm *ssl_pm = ssl->ssl_pm; int ret = 0; int mode; struct pkey_pm *pkey_pm = (struct pkey_pm *)ssl->cert->pkey->pkey_pm; struct x509_pm *crt_pm = (struct x509_pm *)ssl->cert->x509->x509_pm; if (ssl->verify_mode == SSL_VERIFY_PEER) mode = MBEDTLS_SSL_VERIFY_REQUIRED; else if (ssl->verify_mode == SSL_VERIFY_FAIL_IF_NO_PEER_CERT) mode = MBEDTLS_SSL_VERIFY_OPTIONAL; else if (ssl->verify_mode == SSL_VERIFY_CLIENT_ONCE) mode = MBEDTLS_SSL_VERIFY_UNSET; else mode = MBEDTLS_SSL_VERIFY_NONE; mbedtls_ssl_conf_authmode(&ssl_pm->conf, mode); if (ca_pm->x509_crt) mbedtls_ssl_conf_ca_chain(&ssl_pm->conf, ca_pm->x509_crt, NULL); else if (ca_pm->ex_crt) mbedtls_ssl_conf_ca_chain(&ssl_pm->conf, ca_pm->ex_crt, NULL); if (crt_pm->x509_crt && pkey_pm->pkey) ret = mbedtls_ssl_conf_own_cert(&ssl_pm->conf, crt_pm->x509_crt, pkey_pm->pkey); else if (crt_pm->ex_crt && pkey_pm->ex_pkey) ret = mbedtls_ssl_conf_own_cert(&ssl_pm->conf, crt_pm->ex_crt, pkey_pm->ex_pkey); if (ret) { SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "mbedtls_ssl_conf_own_cert() return -0x%x", -ret); ret = -1; } return ret; } /* * Perform the mbedtls SSL handshake instead of mbedtls_ssl_handshake. * We can add debug here. */ static int mbedtls_handshake( mbedtls_ssl_context *ssl ) { int ret = 0; while (ssl->MBEDTLS_PRIVATE(state) != MBEDTLS_SSL_HANDSHAKE_OVER) { ret = mbedtls_ssl_handshake_step(ssl); lwsl_info("%s: ssl ret -%x state %d\n", __func__, -ret, ssl->MBEDTLS_PRIVATE(state)); if (ret != 0) break; } return ret; } #if !defined(LWS_PLAT_OPTEE) #include #endif int ssl_pm_handshake(SSL *ssl) { int ret; struct ssl_pm *ssl_pm = (struct ssl_pm *)ssl->ssl_pm; ssl->err = 0; errno = 0; ret = ssl_pm_reload_crt(ssl); if (ret) { printf("%s: cert reload failed\n", __func__); return 0; } if (ssl_pm->ssl.MBEDTLS_PRIVATE(state) != MBEDTLS_SSL_HANDSHAKE_OVER) { ssl_speed_up_enter(); /* mbedtls return codes * 0 = successful, or MBEDTLS_ERR_SSL_WANT_READ/WRITE * anything else = death */ ret = mbedtls_handshake(&ssl_pm->ssl); ssl_speed_up_exit(); } else ret = 0; /* * OpenSSL return codes: * 0 = did not complete, but may be retried * 1 = successfully completed * <0 = death */ if (ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE) { ssl->err = ret; SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "mbedtls_ssl_handshake() return -0x%x", -ret); return 0; /* OpenSSL: did not complete but may be retried */ } if (ret == 0) { /* successful */ struct x509_pm *x509_pm = (struct x509_pm *)ssl->session->peer->x509_pm; x509_pm->ex_crt = (mbedtls_x509_crt *)mbedtls_ssl_get_peer_cert(&ssl_pm->ssl); return 1; /* openssl successful */ } if (errno == 11) { lwsl_info("%s: ambiguous EAGAIN taken as WANT_READ\n", __func__); ssl->err = ret == MBEDTLS_ERR_SSL_WANT_READ; return 0; } lwsl_info("%s: mbedtls_ssl_handshake() returned -0x%x\n", __func__, -ret); /* it's had it */ ssl->err = SSL_ERROR_SYSCALL; return -1; /* openssl death */ } mbedtls_x509_crt * ssl_ctx_get_mbedtls_x509_crt(SSL_CTX *ssl_ctx) { struct x509_pm *x509_pm = (struct x509_pm *)ssl_ctx->cert->x509->x509_pm; if (!x509_pm) return NULL; return x509_pm->x509_crt; } mbedtls_x509_crt * ssl_get_peer_mbedtls_x509_crt(SSL *ssl) { struct x509_pm *x509_pm = (struct x509_pm *)ssl->session->peer->x509_pm; if (!x509_pm) return NULL; return x509_pm->ex_crt; } int ssl_pm_shutdown(SSL *ssl) { int ret; struct ssl_pm *ssl_pm = (struct ssl_pm *)ssl->ssl_pm; ret = mbedtls_ssl_close_notify(&ssl_pm->ssl); if (ret) { SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "mbedtls_ssl_close_notify() return -0x%x", -ret); if (ret == MBEDTLS_ERR_NET_CONN_RESET) ssl->err = SSL_ERROR_SYSCALL; ret = -1; /* OpenSSL: "Call SSL_get_error with the return value to find the reason */ } else { struct x509_pm *x509_pm = (struct x509_pm *)ssl->session->peer->x509_pm; x509_pm->ex_crt = NULL; ret = 1; /* OpenSSL: "The shutdown was successfully completed" ...0 means retry */ } return ret; } int ssl_pm_clear(SSL *ssl) { return ssl_pm_shutdown(ssl); } int ssl_pm_read(SSL *ssl, void *buffer, int len) { int ret; struct ssl_pm *ssl_pm = (struct ssl_pm *)ssl->ssl_pm; ret = mbedtls_ssl_read(&ssl_pm->ssl, buffer, (size_t)len); if (ret < 0) { // lwsl_notice("%s: mbedtls_ssl_read says -0x%x\n", __func__, -ret); SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "mbedtls_ssl_read() return -0x%x", -ret); if (ret == MBEDTLS_ERR_NET_CONN_RESET || #if defined(MBEDTLS_VERSION_NUMBER) && MBEDTLS_VERSION_NUMBER >= 0x03000000 ret <= MBEDTLS_ERR_SSL_HANDSHAKE_FAILURE) /* fatal errors */ #else ret <= MBEDTLS_ERR_SSL_NO_USABLE_CIPHERSUITE) /* fatal errors */ #endif ssl->err = SSL_ERROR_SYSCALL; switch (ret) { case MBEDTLS_ERR_NET_CONN_RESET: ssl->err = SSL_ERROR_SYSCALL; break; case MBEDTLS_ERR_SSL_WANT_WRITE: ssl->err = SSL_ERROR_WANT_WRITE; break; case MBEDTLS_ERR_SSL_WANT_READ: ssl->err = SSL_ERROR_WANT_READ; break; default: break; } ret = -1; } return ret; } /* * This returns -1, or the length sent. * If -1, then you need to find out if the error was * fatal or recoverable using SSL_get_error() */ int ssl_pm_send(SSL *ssl, const void *buffer, int len) { int ret; struct ssl_pm *ssl_pm = (struct ssl_pm *)ssl->ssl_pm; ret = mbedtls_ssl_write(&ssl_pm->ssl, buffer, (size_t)len); /* * We can get a positive number, which may be less than len... that * much was sent successfully and you can call again to send more. * * We can get a negative mbedtls error code... if WANT_WRITE or WANT_READ, * it's nonfatal and means it should be retried as-is. If something else, * it's fatal actually. * * If this function returns something other than a positive value or * MBEDTLS_ERR_SSL_WANT_READ/WRITE, the ssl context becomes unusable, and * you should either free it or call mbedtls_ssl_session_reset() on it * before re-using it for a new connection; the current connection must * be closed. * * When this function returns MBEDTLS_ERR_SSL_WANT_WRITE/READ, it must be * called later with the same arguments, until it returns a positive value. */ if (ret < 0) { SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "mbedtls_ssl_write() return -0x%x", -ret); switch (ret) { case MBEDTLS_ERR_NET_SEND_FAILED: case MBEDTLS_ERR_NET_CONN_RESET: ssl->err = SSL_ERROR_SYSCALL; break; case MBEDTLS_ERR_SSL_WANT_WRITE: ssl->err = SSL_ERROR_WANT_WRITE; break; case MBEDTLS_ERR_SSL_WANT_READ: ssl->err = SSL_ERROR_WANT_READ; break; default: break; } ret = -1; } return ret; } int ssl_pm_pending(const SSL *ssl) { struct ssl_pm *ssl_pm = (struct ssl_pm *)ssl->ssl_pm; return (int)mbedtls_ssl_get_bytes_avail(&ssl_pm->ssl); } void ssl_pm_set_fd(SSL *ssl, int fd, int mode) { struct ssl_pm *ssl_pm = (struct ssl_pm *)ssl->ssl_pm; ssl_pm->fd.MBEDTLS_PRIVATE_V30_ONLY(fd) = fd; } int ssl_pm_get_fd(const SSL *ssl, int mode) { struct ssl_pm *ssl_pm = (struct ssl_pm *)ssl->ssl_pm; return ssl_pm->fd.MBEDTLS_PRIVATE_V30_ONLY(fd); } OSSL_HANDSHAKE_STATE ssl_pm_get_state(const SSL *ssl) { OSSL_HANDSHAKE_STATE state; struct ssl_pm *ssl_pm = (struct ssl_pm *)ssl->ssl_pm; switch (ssl_pm->ssl.MBEDTLS_PRIVATE(state)) { case MBEDTLS_SSL_CLIENT_HELLO: state = TLS_ST_CW_CLNT_HELLO; break; case MBEDTLS_SSL_SERVER_HELLO: state = TLS_ST_SW_SRVR_HELLO; break; case MBEDTLS_SSL_SERVER_CERTIFICATE: state = TLS_ST_SW_CERT; break; case MBEDTLS_SSL_SERVER_HELLO_DONE: state = TLS_ST_SW_SRVR_DONE; break; case MBEDTLS_SSL_CLIENT_KEY_EXCHANGE: state = TLS_ST_CW_KEY_EXCH; break; case MBEDTLS_SSL_CLIENT_CHANGE_CIPHER_SPEC: state = TLS_ST_CW_CHANGE; break; case MBEDTLS_SSL_CLIENT_FINISHED: state = TLS_ST_CW_FINISHED; break; case MBEDTLS_SSL_SERVER_CHANGE_CIPHER_SPEC: state = TLS_ST_SW_CHANGE; break; case MBEDTLS_SSL_SERVER_FINISHED: state = TLS_ST_SW_FINISHED; break; case MBEDTLS_SSL_CLIENT_CERTIFICATE: state = TLS_ST_CW_CERT; break; case MBEDTLS_SSL_SERVER_KEY_EXCHANGE: state = TLS_ST_SR_KEY_EXCH; break; #if defined(LWS_HAVE_MBEDTLS_SSL_NEW_SESSION_TICKET) case MBEDTLS_SSL_NEW_SESSION_TICKET: #else case MBEDTLS_SSL_SERVER_NEW_SESSION_TICKET: #endif state = TLS_ST_SW_SESSION_TICKET; break; case MBEDTLS_SSL_SERVER_HELLO_VERIFY_REQUEST_SENT: state = TLS_ST_SW_CERT_REQ; break; case MBEDTLS_SSL_HANDSHAKE_OVER: state = TLS_ST_OK; break; default : state = TLS_ST_BEFORE; break; } return state; } int x509_pm_show_info(X509 *x) { #if 0 int ret; char *buf; mbedtls_x509_crt *x509_crt; struct x509_pm *x509_pm = x->x509_pm; if (x509_pm->x509_crt) x509_crt = x509_pm->x509_crt; else if (x509_pm->ex_crt) x509_crt = x509_pm->ex_crt; else x509_crt = NULL; if (!x509_crt) return -1; buf = ssl_mem_malloc(X509_INFO_STRING_LENGTH); if (!buf) { SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "no enough memory > (buf)"); goto no_mem; } ret = mbedtls_x509_crt_info(buf, X509_INFO_STRING_LENGTH - 1, "", x509_crt); if (ret <= 0) { SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "mbedtls_x509_crt_info() return -0x%x", -ret); goto mbedtls_err1; } buf[ret] = 0; ssl_mem_free(buf); SSL_DEBUG(SSL_DEBUG_ON, "%s", buf); return 0; mbedtls_err1: ssl_mem_free(buf); no_mem: return -1; #else return 0; #endif } int x509_pm_new(X509 *x, X509 *m_x) { struct x509_pm *x509_pm; x509_pm = ssl_mem_zalloc(sizeof(struct x509_pm)); if (!x509_pm) { SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "no enough memory > (x509_pm)"); goto failed1; } x->x509_pm = x509_pm; if (m_x) { struct x509_pm *m_x509_pm = (struct x509_pm *)m_x->x509_pm; x509_pm->ex_crt = m_x509_pm->x509_crt; } return 0; failed1: return -1; } void x509_pm_free(X509 *x) { struct x509_pm *x509_pm = (struct x509_pm *)x->x509_pm; if (x509_pm->x509_crt) { mbedtls_x509_crt_free(x509_pm->x509_crt); ssl_mem_free(x509_pm->x509_crt); x509_pm->x509_crt = NULL; } ssl_mem_free(x->x509_pm); x->x509_pm = NULL; } int x509_pm_load(X509 *x, const unsigned char *buffer, int len) { int ret; unsigned char *load_buf; struct x509_pm *x509_pm = (struct x509_pm *)x->x509_pm; if (!x509_pm->x509_crt) { x509_pm->x509_crt = ssl_mem_malloc(sizeof(mbedtls_x509_crt) + 80); if (!x509_pm->x509_crt) { SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "no enough memory > (x509_pm->x509_crt)"); goto no_mem; } mbedtls_x509_crt_init(x509_pm->x509_crt); } if (buffer[0] != 0x30) { load_buf = ssl_mem_malloc((unsigned int)len + 1); if (!load_buf) { SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "no enough memory > (load_buf)"); goto failed; } ssl_memcpy(load_buf, buffer, (unsigned int)len); load_buf[len] = '\0'; ret = mbedtls_x509_crt_parse(x509_pm->x509_crt, load_buf, (unsigned int)len + 1); ssl_mem_free(load_buf); } else ret = mbedtls_x509_crt_parse_der(x509_pm->x509_crt, buffer, (unsigned int)len); if (ret) { printf("mbedtls_x509_crt_parse return -0x%x", -ret); goto failed; } return 0; failed: mbedtls_x509_crt_free(x509_pm->x509_crt); ssl_mem_free(x509_pm->x509_crt); x509_pm->x509_crt = NULL; no_mem: return -1; } int pkey_pm_new(EVP_PKEY *pk, EVP_PKEY *m_pkey, void *rngctx) { struct pkey_pm *pkey_pm; pkey_pm = ssl_mem_zalloc(sizeof(struct pkey_pm)); if (!pkey_pm) return -1; pk->pkey_pm = pkey_pm; pkey_pm->rngctx = rngctx; if (m_pkey) { struct pkey_pm *m_pkey_pm = (struct pkey_pm *)m_pkey->pkey_pm; pkey_pm->ex_pkey = m_pkey_pm->pkey; } return 0; } void pkey_pm_free(EVP_PKEY *pk) { struct pkey_pm *pkey_pm = (struct pkey_pm *)pk->pkey_pm; if (pkey_pm->pkey) { mbedtls_pk_free(pkey_pm->pkey); ssl_mem_free(pkey_pm->pkey); pkey_pm->pkey = NULL; } ssl_mem_free(pk->pkey_pm); pk->pkey_pm = NULL; } int pkey_pm_load(EVP_PKEY *pk, const unsigned char *buffer, int len) { int ret; unsigned char *load_buf; struct pkey_pm *pkey_pm = (struct pkey_pm *)pk->pkey_pm; if (pkey_pm->pkey) mbedtls_pk_free(pkey_pm->pkey); if (!pkey_pm->pkey) { pkey_pm->pkey = ssl_mem_malloc(sizeof(mbedtls_pk_context)); if (!pkey_pm->pkey) { SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "no enough memory > (pkey_pm->pkey)"); goto no_mem; } } load_buf = ssl_mem_malloc((unsigned int)len + 1); if (!load_buf) { SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "no enough memory > (load_buf)"); goto failed; } ssl_memcpy(load_buf, buffer, (unsigned int)len); load_buf[len] = '\0'; mbedtls_pk_init(pkey_pm->pkey); #if defined(MBEDTLS_VERSION_NUMBER) && MBEDTLS_VERSION_NUMBER >= 0x03000000 #if defined(MBEDTLS_VERSION_NUMBER) && MBEDTLS_VERSION_NUMBER >= 0x03050000 ret = mbedtls_pk_parse_key(pkey_pm->pkey, load_buf, (unsigned int)len, NULL, 0, mbedtls_ctr_drbg_random, pkey_pm->rngctx); #else ret = mbedtls_pk_parse_key(pkey_pm->pkey, load_buf, (unsigned int)len + 1, NULL, 0, mbedtls_ctr_drbg_random, pkey_pm->rngctx); #endif #else ret = mbedtls_pk_parse_key(pkey_pm->pkey, load_buf, (unsigned int)len + 1, NULL, 0); #endif ssl_mem_free(load_buf); if (ret) { SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "mbedtls_pk_parse_key return -0x%x", -ret); goto failed; } return 0; failed: mbedtls_pk_free(pkey_pm->pkey); ssl_mem_free(pkey_pm->pkey); pkey_pm->pkey = NULL; no_mem: return -1; } void ssl_pm_set_bufflen(SSL *ssl, int len) { max_content_len = (unsigned int)len; } long ssl_pm_get_verify_result(const SSL *ssl) { uint32_t ret; long verify_result; struct ssl_pm *ssl_pm = (struct ssl_pm *)ssl->ssl_pm; ret = mbedtls_ssl_get_verify_result(&ssl_pm->ssl); if (!ret) return X509_V_OK; if (ret & MBEDTLS_X509_BADCERT_NOT_TRUSTED || (ret & MBEDTLS_X509_BADCRL_NOT_TRUSTED)) verify_result = X509_V_ERR_INVALID_CA; else if (ret & MBEDTLS_X509_BADCERT_CN_MISMATCH) verify_result = X509_V_ERR_HOSTNAME_MISMATCH; else if ((ret & MBEDTLS_X509_BADCERT_BAD_KEY) || (ret & MBEDTLS_X509_BADCRL_BAD_KEY)) verify_result = X509_V_ERR_CA_KEY_TOO_SMALL; else if ((ret & MBEDTLS_X509_BADCERT_BAD_MD) || (ret & MBEDTLS_X509_BADCRL_BAD_MD)) verify_result = X509_V_ERR_CA_MD_TOO_WEAK; else if ((ret & MBEDTLS_X509_BADCERT_FUTURE) || (ret & MBEDTLS_X509_BADCRL_FUTURE)) verify_result = X509_V_ERR_CERT_NOT_YET_VALID; else if ((ret & MBEDTLS_X509_BADCERT_EXPIRED) || (ret & MBEDTLS_X509_BADCRL_EXPIRED)) verify_result = X509_V_ERR_CERT_HAS_EXPIRED; else verify_result = X509_V_ERR_UNSPECIFIED; SSL_DEBUG(SSL_PLATFORM_ERROR_LEVEL, "mbedtls_ssl_get_verify_result() return 0x%x", ret); return verify_result; } /** * @brief set expected hostname on peer cert CN */ int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param, const char *name, size_t namelen) { SSL *ssl = (SSL *)((char *)param - offsetof(SSL, param)); struct ssl_pm *ssl_pm = (struct ssl_pm *)ssl->ssl_pm; char *name_cstr = NULL; if (namelen) { name_cstr = malloc(namelen + 1); if (!name_cstr) return 0; memcpy(name_cstr, name, namelen); name_cstr[namelen] = '\0'; name = name_cstr; } mbedtls_ssl_set_hostname(&ssl_pm->ssl, name); if (namelen) free(name_cstr); return 1; } void _ssl_set_alpn_list(const SSL *ssl) { #if defined(LWS_HAVE_mbedtls_ssl_conf_alpn_protocols) if (ssl->alpn_protos) { if (mbedtls_ssl_conf_alpn_protocols(&((struct ssl_pm *)(ssl->ssl_pm))->conf, ssl->alpn_protos)) fprintf(stderr, "mbedtls_ssl_conf_alpn_protocols failed\n"); return; } if (!ssl->ctx->alpn_protos) return; if (mbedtls_ssl_conf_alpn_protocols(&((struct ssl_pm *)(ssl->ssl_pm))->conf, ssl->ctx->alpn_protos)) fprintf(stderr, "mbedtls_ssl_conf_alpn_protocols failed\n"); #else fprintf(stderr, "mbedtls_ssl_conf_alpn_protocols absent\n"); #endif } void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data, unsigned int *len) { #if defined(LWS_HAVE_mbedtls_ssl_get_alpn_protocol) const char *alp = mbedtls_ssl_get_alpn_protocol(&((struct ssl_pm *)(ssl->ssl_pm))->ssl); *data = (const unsigned char *)alp; if (alp) *len = (unsigned int)strlen(alp); else *len = 0; #else fprintf(stderr, "mbedtls_ssl_conf_alpn_protocols absent\n"); *len = 0; #endif } int SSL_set_sni_callback(SSL *ssl, int(*cb)(void *, mbedtls_ssl_context *, const unsigned char *, size_t), void *param) { #if defined(LWS_HAVE_mbedtls_ssl_conf_sni) struct ssl_pm *ssl_pm = (struct ssl_pm *)ssl->ssl_pm; mbedtls_ssl_conf_sni(&ssl_pm->conf, cb, param); #endif return 0; } SSL *SSL_SSL_from_mbedtls_ssl_context(mbedtls_ssl_context *msc) { struct ssl_pm *ssl_pm = (struct ssl_pm *)((char *)msc - offsetof(struct ssl_pm, ssl)); return ssl_pm->owner; } mbedtls_ssl_context *SSL_mbedtls_ssl_context_from_SSL(SSL *ssl) { struct ssl_pm *ssl_pm = (struct ssl_pm *)ssl->ssl_pm; return &ssl_pm->ssl; } #include "ssl_cert.h" void SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx) { #if defined(LWS_HAVE_mbedtls_ssl_set_hs_authmode) || \ defined(LWS_HAVE_mbedtls_ssl_set_hs_ca_chain) || \ defined(LWS_HAVE_mbedtls_ssl_set_hs_own_cert) struct ssl_pm *ssl_pm = ssl->ssl_pm; #endif #if defined(LWS_HAVE_mbedtls_ssl_set_hs_own_cert) struct x509_pm *x509_pm; #endif #if defined(LWS_HAVE_mbedtls_ssl_set_hs_ca_chain) struct x509_pm *x509_pm_ca; #endif #if defined(LWS_HAVE_mbedtls_ssl_set_hs_own_cert) struct pkey_pm *pkey_pm; #endif #if defined(LWS_HAVE_mbedtls_ssl_set_hs_authmode) int mode; #endif #if defined(LWS_HAVE_mbedtls_ssl_set_hs_own_cert) if (!ctx->cert || !ctx->cert->x509) return; x509_pm = (struct x509_pm *)ctx->cert->x509->x509_pm; #endif #if defined(LWS_HAVE_mbedtls_ssl_set_hs_ca_chain) if (!ctx->client_CA) return; x509_pm_ca = (struct x509_pm *)ctx->client_CA->x509_pm; #endif #if defined(LWS_HAVE_mbedtls_ssl_set_hs_own_cert) if (!ctx->cert || !ctx->cert->pkey) return; pkey_pm = (struct pkey_pm *)ctx->cert->pkey->pkey_pm; #endif if (ssl->cert) ssl_cert_free(ssl->cert); ssl->ctx = ctx; ssl->cert = __ssl_cert_new(ctx->cert, ctx->rngctx); #if defined(LWS_HAVE_mbedtls_ssl_set_hs_authmode) if (ctx->verify_mode == SSL_VERIFY_PEER) mode = MBEDTLS_SSL_VERIFY_REQUIRED; else if (ctx->verify_mode == SSL_VERIFY_FAIL_IF_NO_PEER_CERT) mode = MBEDTLS_SSL_VERIFY_REQUIRED; else if (ctx->verify_mode == SSL_VERIFY_CLIENT_ONCE) mode = MBEDTLS_SSL_VERIFY_UNSET; else mode = MBEDTLS_SSL_VERIFY_NONE; #endif /* apply new ctx cert to ssl */ ssl->verify_mode = ctx->verify_mode; #if defined(LWS_HAVE_mbedtls_ssl_set_hs_ca_chain) mbedtls_ssl_set_hs_ca_chain(&ssl_pm->ssl, x509_pm_ca->x509_crt, NULL); #endif #if defined(LWS_HAVE_mbedtls_ssl_set_hs_own_cert) mbedtls_ssl_set_hs_own_cert(&ssl_pm->ssl, x509_pm->x509_crt, pkey_pm->pkey); #endif #if defined(LWS_HAVE_mbedtls_ssl_set_hs_authmode) mbedtls_ssl_set_hs_authmode(&ssl_pm->ssl, mode); #endif } libwebsockets-4.3.5/lib/tls/mbedtls/wrapper/platform/ssl_port.c000066400000000000000000000016731476025525100247200ustar00rootroot00000000000000// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include "ssl_port.h" /*********************************************************************************************/ /********************************* SSL general interface *************************************/ void *ssl_mem_zalloc(size_t size) { void *p = malloc(size); if (p) memset(p, 0, size); return p; } libwebsockets-4.3.5/lib/tls/openssl/000077500000000000000000000000001476025525100174255ustar00rootroot00000000000000libwebsockets-4.3.5/lib/tls/openssl/lws-genaes.c000066400000000000000000000231041476025525100216360ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * lws_genaes provides an AES abstraction api in lws that works the * same whether you are using openssl or mbedtls hash functions underneath. */ #include "private-lib-core.h" #if defined(LWS_WITH_JOSE) #include "private-lib-jose.h" #endif /* * Care: many openssl apis return 1 for success. These are translated to the * lws convention of 0 for success. */ int lws_genaes_create(struct lws_genaes_ctx *ctx, enum enum_aes_operation op, enum enum_aes_modes mode, struct lws_gencrypto_keyelem *el, enum enum_aes_padding padding, void *engine) { int n = 0; ctx->ctx = EVP_CIPHER_CTX_new(); if (!ctx->ctx) return -1; ctx->mode = mode; ctx->k = el; ctx->engine = engine; ctx->init = 0; ctx->op = op; ctx->padding = padding; switch (ctx->k->len) { case 128 / 8: switch (mode) { case LWS_GAESM_KW: #if defined(LWS_HAVE_EVP_aes_128_wrap) EVP_CIPHER_CTX_set_flags(ctx->ctx, EVP_CIPHER_CTX_FLAG_WRAP_ALLOW); ctx->cipher = EVP_aes_128_wrap(); break; #else lwsl_err("%s: your OpenSSL lacks AES wrap apis, update it\n", __func__); return -1; #endif case LWS_GAESM_CBC: ctx->cipher = EVP_aes_128_cbc(); break; #if defined(LWS_HAVE_EVP_aes_128_cfb128) case LWS_GAESM_CFB128: ctx->cipher = EVP_aes_128_cfb128(); break; #endif #if defined(LWS_HAVE_EVP_aes_128_cfb8) case LWS_GAESM_CFB8: ctx->cipher = EVP_aes_128_cfb8(); break; #endif #if defined(LWS_HAVE_EVP_aes_128_ctr) case LWS_GAESM_CTR: ctx->cipher = EVP_aes_128_ctr(); break; #endif #if defined(LWS_HAVE_EVP_aes_128_ecb) case LWS_GAESM_ECB: ctx->cipher = EVP_aes_128_ecb(); break; #endif #if defined(LWS_HAVE_EVP_aes_128_ofb) case LWS_GAESM_OFB: ctx->cipher = EVP_aes_128_ofb(); break; #endif #if defined(LWS_HAVE_EVP_aes_128_xts) case LWS_GAESM_XTS: lwsl_err("%s: AES XTS requires double-length key\n", __func__); break; #endif case LWS_GAESM_GCM: ctx->cipher = EVP_aes_128_gcm(); break; default: goto bail; } break; case 192 / 8: switch (mode) { case LWS_GAESM_KW: #if defined(LWS_HAVE_EVP_aes_128_wrap) EVP_CIPHER_CTX_set_flags(ctx->ctx, EVP_CIPHER_CTX_FLAG_WRAP_ALLOW); ctx->cipher = EVP_aes_192_wrap(); break; #else lwsl_err("%s: your OpenSSL lacks AES wrap apis, update it\n", __func__); return -1; #endif case LWS_GAESM_CBC: ctx->cipher = EVP_aes_192_cbc(); break; #if defined(LWS_HAVE_EVP_aes_192_cfb128) case LWS_GAESM_CFB128: ctx->cipher = EVP_aes_192_cfb128(); break; #endif #if defined(LWS_HAVE_EVP_aes_192_cfb8) case LWS_GAESM_CFB8: ctx->cipher = EVP_aes_192_cfb8(); break; #endif #if defined(LWS_HAVE_EVP_aes_128_ctr) case LWS_GAESM_CTR: ctx->cipher = EVP_aes_192_ctr(); break; #endif #if defined(LWS_HAVE_EVP_aes_128_ecb) case LWS_GAESM_ECB: ctx->cipher = EVP_aes_192_ecb(); break; #endif #if defined(LWS_HAVE_EVP_aes_128_ofb) case LWS_GAESM_OFB: ctx->cipher = EVP_aes_192_ofb(); break; #endif #if defined(LWS_HAVE_EVP_aes_128_xts) case LWS_GAESM_XTS: lwsl_err("%s: AES XTS 192 invalid\n", __func__); goto bail; #endif case LWS_GAESM_GCM: ctx->cipher = EVP_aes_192_gcm(); break; default: goto bail; } break; case 256 / 8: switch (mode) { case LWS_GAESM_KW: #if defined(LWS_HAVE_EVP_aes_128_wrap) EVP_CIPHER_CTX_set_flags(ctx->ctx, EVP_CIPHER_CTX_FLAG_WRAP_ALLOW); ctx->cipher = EVP_aes_256_wrap(); break; #else lwsl_err("%s: your OpenSSL lacks AES wrap apis, update it\n", __func__); return -1; #endif case LWS_GAESM_CBC: ctx->cipher = EVP_aes_256_cbc(); break; #if defined(LWS_HAVE_EVP_aes_256_cfb128) case LWS_GAESM_CFB128: ctx->cipher = EVP_aes_256_cfb128(); break; #endif #if defined(LWS_HAVE_EVP_aes_256_cfb8) case LWS_GAESM_CFB8: ctx->cipher = EVP_aes_256_cfb8(); break; #endif #if defined(LWS_HAVE_EVP_aes_128_ctr) case LWS_GAESM_CTR: ctx->cipher = EVP_aes_256_ctr(); break; #endif #if defined(LWS_HAVE_EVP_aes_128_ecb) case LWS_GAESM_ECB: ctx->cipher = EVP_aes_256_ecb(); break; #endif #if defined(LWS_HAVE_EVP_aes_128_ofb) case LWS_GAESM_OFB: ctx->cipher = EVP_aes_256_ofb(); break; #endif #if defined(LWS_HAVE_EVP_aes_128_xts) case LWS_GAESM_XTS: ctx->cipher = EVP_aes_128_xts(); break; #endif case LWS_GAESM_GCM: ctx->cipher = EVP_aes_256_gcm(); break; default: goto bail; } break; case 512 / 8: switch (mode) { #if defined(LWS_HAVE_EVP_aes_128_xts) case LWS_GAESM_XTS: ctx->cipher = EVP_aes_256_xts(); #endif break; default: goto bail; } break; default: lwsl_err("%s: unsupported AES size %d bits\n", __func__, ctx->k->len * 8); goto bail; } switch (ctx->op) { case LWS_GAESO_ENC: n = EVP_EncryptInit_ex(ctx->ctx, ctx->cipher, ctx->engine, NULL, NULL); EVP_CIPHER_CTX_set_padding(ctx->ctx, (int)padding); break; case LWS_GAESO_DEC: n = EVP_DecryptInit_ex(ctx->ctx, ctx->cipher, ctx->engine, NULL, NULL); EVP_CIPHER_CTX_set_padding(ctx->ctx, (int)padding); break; } if (!n) { lwsl_err("%s: cipher init failed (cipher %p)\n", __func__, ctx->cipher); lws_tls_err_describe_clear(); goto bail; } return 0; bail: EVP_CIPHER_CTX_free(ctx->ctx); ctx->ctx = NULL; return -1; } int lws_genaes_destroy(struct lws_genaes_ctx *ctx, unsigned char *tag, size_t tlen) { uint8_t buf[256]; int outl = sizeof(buf), n = 0; if (!ctx->ctx) return 0; if (ctx->init) { switch (ctx->op) { case LWS_GAESO_ENC: if (EVP_EncryptFinal_ex(ctx->ctx, buf, &outl) != 1) { lwsl_err("%s: enc final failed\n", __func__); n = -1; } if (ctx->mode == LWS_GAESM_GCM) { if (EVP_CIPHER_CTX_ctrl(ctx->ctx, EVP_CTRL_GCM_GET_TAG, ctx->taglen, tag) != 1) { lwsl_err("get tag ctrl failed\n"); //lws_tls_err_describe_clear(); n = 1; } } if (ctx->mode == LWS_GAESM_CBC) memcpy(tag, buf, (unsigned int)outl); break; case LWS_GAESO_DEC: if (EVP_DecryptFinal_ex(ctx->ctx, buf, &outl) != 1) { lwsl_err("%s: dec final failed\n", __func__); lws_tls_err_describe_clear(); n = -1; } break; } if (outl) lwsl_debug("%s: final len %d\n", __func__, outl); } ctx->k = NULL; EVP_CIPHER_CTX_free(ctx->ctx); ctx->ctx = NULL; return n; } int lws_genaes_crypt(struct lws_genaes_ctx *ctx, const uint8_t *in, size_t len, uint8_t *out, uint8_t *iv_or_nonce_ctr_or_data_unit_16, uint8_t *stream_block_16, size_t *nc_or_iv_off, int taglen) { int n = 0, outl, olen; if (!ctx->init) { EVP_CIPHER_CTX_set_key_length(ctx->ctx, (int)ctx->k->len); if (ctx->mode == LWS_GAESM_GCM) { n = EVP_CIPHER_CTX_ctrl(ctx->ctx, EVP_CTRL_GCM_SET_IVLEN, (int)*nc_or_iv_off, NULL); if (n != 1) { lwsl_err("%s: SET_IVLEN failed\n", __func__); return -1; } memcpy(ctx->tag, stream_block_16, (unsigned int)taglen); ctx->taglen = taglen; } switch (ctx->op) { case LWS_GAESO_ENC: n = EVP_EncryptInit_ex(ctx->ctx, NULL, NULL, ctx->k->buf, iv_or_nonce_ctr_or_data_unit_16); break; case LWS_GAESO_DEC: if (ctx->mode == LWS_GAESM_GCM) EVP_CIPHER_CTX_ctrl(ctx->ctx, EVP_CTRL_GCM_SET_TAG, ctx->taglen, ctx->tag); n = EVP_DecryptInit_ex(ctx->ctx, NULL, NULL, ctx->k->buf, iv_or_nonce_ctr_or_data_unit_16); break; } if (!n) { lws_tls_err_describe_clear(); lwsl_err("%s: init failed (cipher %p)\n", __func__, ctx->cipher); return -1; } ctx->init = 1; } if (ctx->mode == LWS_GAESM_GCM && !out) { /* AAD */ if (!len) return 0; switch (ctx->op) { case LWS_GAESO_ENC: n = EVP_EncryptUpdate(ctx->ctx, NULL, &olen, in, (int)len); break; case LWS_GAESO_DEC: n = EVP_DecryptUpdate(ctx->ctx, NULL, &olen, in, (int)len); break; default: return -1; } if (n != 1) { lwsl_err("%s: set AAD failed\n", __func__); lws_tls_err_describe_clear(); lwsl_hexdump_err(in, len); return -1; } return 0; } switch (ctx->op) { case LWS_GAESO_ENC: n = EVP_EncryptUpdate(ctx->ctx, out, &outl, in, (int)len); break; case LWS_GAESO_DEC: n = EVP_DecryptUpdate(ctx->ctx, out, &outl, in, (int)len); break; default: return -1; } // lwsl_notice("discarding outl %d\n", (int)outl); if (!n) { lwsl_notice("%s: update failed\n", __func__); lws_tls_err_describe_clear(); return -1; } return 0; } libwebsockets-4.3.5/lib/tls/openssl/lws-gencrypto.c000066400000000000000000000045351476025525100224150ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * lws-gencrypto openssl-specific common code */ #include "private-lib-core.h" #include "private-lib-tls-openssl.h" /* * Care: many openssl apis return 1 for success. These are translated to the * lws convention of 0 for success. */ int lws_gencrypto_openssl_hash_to_NID(enum lws_genhash_types hash_type) { int h = -1; switch (hash_type) { case LWS_GENHASH_TYPE_UNKNOWN: break; case LWS_GENHASH_TYPE_MD5: h = NID_md5; break; case LWS_GENHASH_TYPE_SHA1: h = NID_sha1; break; case LWS_GENHASH_TYPE_SHA256: h = NID_sha256; break; case LWS_GENHASH_TYPE_SHA384: h = NID_sha384; break; case LWS_GENHASH_TYPE_SHA512: h = NID_sha512; break; } return h; } const EVP_MD * lws_gencrypto_openssl_hash_to_EVP_MD(enum lws_genhash_types hash_type) { const EVP_MD *h = NULL; switch (hash_type) { case LWS_GENHASH_TYPE_UNKNOWN: break; case LWS_GENHASH_TYPE_MD5: h = EVP_md5(); break; case LWS_GENHASH_TYPE_SHA1: h = EVP_sha1(); break; case LWS_GENHASH_TYPE_SHA256: h = EVP_sha256(); break; case LWS_GENHASH_TYPE_SHA384: h = EVP_sha384(); break; case LWS_GENHASH_TYPE_SHA512: h = EVP_sha512(); break; } return h; } libwebsockets-4.3.5/lib/tls/openssl/lws-genec.c000066400000000000000000000417421476025525100214650ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * lws_genec provides an EC abstraction api in lws that works the * same whether you are using openssl or mbedtls crypto functions underneath. */ #include "private-lib-core.h" #include "private-lib-tls-openssl.h" #if !defined(OPENSSL_NO_EC) && defined(LWS_HAVE_EC_KEY_new_by_curve_name) && \ (OPENSSL_VERSION_NUMBER >= 0x30000000l) && \ !defined(LWS_SUPPRESS_DEPRECATED_API_WARNINGS) /* msvc doesn't have #warning... */ #error "You probably need LWS_SUPPRESS_DEPRECATED_API_WARNINGS" #endif #if defined(USE_WOLFSSL) #include "openssl/ecdh.h" #endif /* * Care: many openssl apis return 1 for success. These are translated to the * lws convention of 0 for success. */ #if defined(USE_WOLFSSL) EVP_PKEY * EVP_PKEY_CTX_get0_pkey(EVP_PKEY_CTX *p) { return p->pkey; } #endif #if !defined(LWS_HAVE_ECDSA_SIG_set0) static void ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps) { if (pr != NULL) *pr = sig->r; if (ps != NULL) *ps = sig->s; } static int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s) { if (r == NULL || s == NULL) return 0; BN_clear_free(sig->r); BN_clear_free(sig->s); sig->r = r; sig->s = s; return 1; } #endif #if !defined(LWS_HAVE_BN_bn2binpad) int BN_bn2binpad(const BIGNUM *a, unsigned char *to, int tolen) { int i; #if !defined(USE_WOLFSSL) BN_ULONG l; #endif #if !defined(LIBRESSL_VERSION_NUMBER) && !defined(USE_WOLFSSL) bn_check_top(a); #endif i = BN_num_bytes(a); /* Add leading zeroes if necessary */ if (tolen > i) { memset(to, 0, (size_t)(tolen - i)); to += tolen - i; } #if defined(USE_WOLFSSL) BN_bn2bin(a, to); #else while (i--) { l = a->d[i / BN_BYTES]; *(to++) = (unsigned char)(l >> (8 * (i % BN_BYTES))) & 0xff; } #endif return tolen; } #endif const struct lws_ec_curves lws_ec_curves[4] = { /* * These are the curves we are willing to use by default... * * The 3 recommended+ (P-256) and optional curves in RFC7518 7.6 * * Specific keys lengths from RFC8422 p20 */ { "P-256", NID_X9_62_prime256v1, 32 }, { "P-384", NID_secp384r1, 48 }, { "P-521", NID_secp521r1, 66 }, { NULL, 0, 0 } }; static int lws_genec_eckey_import(int nid, EVP_PKEY *pkey, const struct lws_gencrypto_keyelem *el) { EC_KEY *ec = EC_KEY_new_by_curve_name(nid); BIGNUM *bn_d, *bn_x, *bn_y; int n; if (!ec) return -1; /* * EC_KEY contains * * EC_GROUP * group * EC_POINT * pub_key * BIGNUM * priv_key (ie, d) */ bn_x = BN_bin2bn(el[LWS_GENCRYPTO_EC_KEYEL_X].buf, (int)el[LWS_GENCRYPTO_EC_KEYEL_X].len, NULL); if (!bn_x) { lwsl_err("%s: BN_bin2bn (x) fail\n", __func__); goto bail; } bn_y = BN_bin2bn(el[LWS_GENCRYPTO_EC_KEYEL_Y].buf, (int)el[LWS_GENCRYPTO_EC_KEYEL_Y].len, NULL); if (!bn_y) { lwsl_err("%s: BN_bin2bn (y) fail\n", __func__); goto bail1; } /* * EC_KEY_set_public_key_affine_coordinates sets the public key for * key based on its affine co-ordinates, i.e. it constructs an * EC_POINT object based on the supplied x and y values and sets * the public key to be this EC_POINT. It will also performs * certain sanity checks on the key to confirm that it is valid. */ #if defined(USE_WOLFSSL) n = wolfSSL_EC_POINT_set_affine_coordinates_GFp(ec->group, ec->pub_key, bn_x, bn_y, NULL); #else n = EC_KEY_set_public_key_affine_coordinates(ec, bn_x, bn_y); #endif BN_free(bn_x); BN_free(bn_y); if (n != 1) { lwsl_err("%s: EC_KEY_set_public_key_affine_coordinates fail:\n", __func__); lws_tls_err_describe_clear(); goto bail; } if (el[LWS_GENCRYPTO_EC_KEYEL_D].len) { bn_d = BN_bin2bn(el[LWS_GENCRYPTO_EC_KEYEL_D].buf, (int)el[LWS_GENCRYPTO_EC_KEYEL_D].len, NULL); if (!bn_d) { lwsl_err("%s: BN_bin2bn (d) fail\n", __func__); goto bail; } n = EC_KEY_set_private_key(ec, bn_d); BN_clear_free(bn_d); if (n != 1) { lwsl_err("%s: EC_KEY_set_private_key fail\n", __func__); goto bail; } } /* explicitly confirm the key pieces are consistent */ #if !defined(USE_WOLFSSL) if (EC_KEY_check_key(ec) != 1) { lwsl_err("%s: EC_KEY_set_private_key fail\n", __func__); goto bail; } #endif n = EVP_PKEY_assign_EC_KEY(pkey, ec); if (n != 1) { lwsl_err("%s: EVP_PKEY_set1_EC_KEY failed\n", __func__); return -1; } return 0; bail1: BN_free(bn_x); bail: EC_KEY_free(ec); return -1; } static int lws_genec_keypair_import(struct lws_genec_ctx *ctx, const struct lws_ec_curves *curve_table, EVP_PKEY_CTX **pctx, const struct lws_gencrypto_keyelem *el) { EVP_PKEY *pkey = NULL; const struct lws_ec_curves *curve; if (el[LWS_GENCRYPTO_EC_KEYEL_CRV].len < 4) return -2; curve = lws_genec_curve(curve_table, (char *)el[LWS_GENCRYPTO_EC_KEYEL_CRV].buf); if (!curve) return -3; if ((el[LWS_GENCRYPTO_EC_KEYEL_D].len && el[LWS_GENCRYPTO_EC_KEYEL_D].len != curve->key_bytes) || el[LWS_GENCRYPTO_EC_KEYEL_X].len != curve->key_bytes || el[LWS_GENCRYPTO_EC_KEYEL_Y].len != curve->key_bytes) return -4; ctx->has_private = !!el[LWS_GENCRYPTO_EC_KEYEL_D].len; pkey = EVP_PKEY_new(); if (!pkey) return -7; if (lws_genec_eckey_import(curve->tls_lib_nid, pkey, el)) { lwsl_err("%s: lws_genec_eckey_import fail\n", __func__); goto bail; } *pctx = EVP_PKEY_CTX_new(pkey, NULL); EVP_PKEY_free(pkey); pkey = NULL; if (!*pctx) goto bail; return 0; bail: if (pkey) EVP_PKEY_free(pkey); if (*pctx) { EVP_PKEY_CTX_free(*pctx); *pctx = NULL; } return -9; } int lws_genecdh_create(struct lws_genec_ctx *ctx, struct lws_context *context, const struct lws_ec_curves *curve_table) { ctx->context = context; ctx->ctx[0] = NULL; ctx->ctx[1] = NULL; ctx->curve_table = curve_table; ctx->genec_alg = LEGENEC_ECDH; return 0; } int lws_genecdsa_create(struct lws_genec_ctx *ctx, struct lws_context *context, const struct lws_ec_curves *curve_table) { ctx->context = context; ctx->ctx[0] = NULL; ctx->ctx[1] = NULL; ctx->curve_table = curve_table; ctx->genec_alg = LEGENEC_ECDSA; return 0; } int lws_genecdh_set_key(struct lws_genec_ctx *ctx, struct lws_gencrypto_keyelem *el, enum enum_lws_dh_side side) { if (ctx->genec_alg != LEGENEC_ECDH) return -1; return lws_genec_keypair_import(ctx, ctx->curve_table, &ctx->ctx[side], el); } int lws_genecdsa_set_key(struct lws_genec_ctx *ctx, const struct lws_gencrypto_keyelem *el) { if (ctx->genec_alg != LEGENEC_ECDSA) return -1; return lws_genec_keypair_import(ctx, ctx->curve_table, &ctx->ctx[0], el); } static void lws_genec_keypair_destroy(EVP_PKEY_CTX **pctx) { if (!*pctx) return; // lwsl_err("%p\n", EVP_PKEY_get1_EC_KEY(EVP_PKEY_CTX_get0_pkey(*pctx))); // EC_KEY_free(EVP_PKEY_get1_EC_KEY(EVP_PKEY_CTX_get0_pkey(*pctx))); EVP_PKEY_CTX_free(*pctx); *pctx = NULL; } void lws_genec_destroy(struct lws_genec_ctx *ctx) { if (ctx->ctx[0]) lws_genec_keypair_destroy(&ctx->ctx[0]); if (ctx->ctx[1]) lws_genec_keypair_destroy(&ctx->ctx[1]); } static int lws_genec_new_keypair(struct lws_genec_ctx *ctx, enum enum_lws_dh_side side, const char *curve_name, struct lws_gencrypto_keyelem *el) { const struct lws_ec_curves *curve; const EC_POINT *pubkey; EVP_PKEY *pkey = NULL; int ret = -29, n, m; BIGNUM *bn[3]; EC_KEY *ec; curve = lws_genec_curve(ctx->curve_table, curve_name); if (!curve) { lwsl_err("%s: curve '%s' not supported\n", __func__, curve_name); return -22; } ec = EC_KEY_new_by_curve_name(curve->tls_lib_nid); if (!ec) { lwsl_err("%s: unknown nid %d\n", __func__, curve->tls_lib_nid); return -23; } if (EC_KEY_generate_key(ec) != 1) { lwsl_err("%s: EC_KEY_generate_key failed\n", __func__); goto bail; } pkey = EVP_PKEY_new(); if (!pkey) goto bail; if (EVP_PKEY_set1_EC_KEY(pkey, ec) != 1) { lwsl_err("%s: EVP_PKEY_assign_EC_KEY failed\n", __func__); goto bail1; } ctx->ctx[side] = EVP_PKEY_CTX_new(pkey, NULL); if (!ctx->ctx[side]) { lwsl_err("%s: EVP_PKEY_CTX_new failed\n", __func__); goto bail1; } /* * we need to capture the individual element BIGNUMs into * lws_gencrypto_keyelem, so they can be serialized, used in jwk etc */ pubkey = EC_KEY_get0_public_key(ec); if (!pubkey) { lwsl_err("%s: EC_KEY_get0_public_key failed\n", __func__); goto bail1; } bn[0] = BN_new(); bn[1] = (BIGNUM *)EC_KEY_get0_private_key(ec); bn[2] = BN_new(); #if defined(LWS_HAVE_EC_POINT_get_affine_coordinates) if (EC_POINT_get_affine_coordinates(EC_KEY_get0_group(ec), #else if (EC_POINT_get_affine_coordinates_GFp(EC_KEY_get0_group(ec), #endif pubkey, bn[0], bn[2], NULL) != 1) { lwsl_err("%s: EC_POINT_get_affine_coordinates_GFp failed\n", __func__); goto bail2; } el[LWS_GENCRYPTO_EC_KEYEL_CRV].len = (uint32_t)strlen(curve_name) + 1; el[LWS_GENCRYPTO_EC_KEYEL_CRV].buf = lws_malloc(el[LWS_GENCRYPTO_EC_KEYEL_CRV].len, "ec"); if (!el[LWS_GENCRYPTO_EC_KEYEL_CRV].buf) { lwsl_err("%s: OOM\n", __func__); goto bail2; } strcpy((char *)el[LWS_GENCRYPTO_EC_KEYEL_CRV].buf, curve_name); for (n = LWS_GENCRYPTO_EC_KEYEL_X; n < LWS_GENCRYPTO_EC_KEYEL_COUNT; n++) { el[n].len = curve->key_bytes; el[n].buf = lws_malloc(curve->key_bytes, "ec"); if (!el[n].buf) goto bail2; m = BN_bn2binpad(bn[n - 1], el[n].buf, (int32_t)el[n].len); if ((uint32_t)m != el[n].len) goto bail2; } ctx->has_private = 1; ret = 0; bail2: BN_clear_free(bn[0]); BN_clear_free(bn[2]); bail1: EVP_PKEY_free(pkey); bail: EC_KEY_free(ec); return ret; } int lws_genecdh_new_keypair(struct lws_genec_ctx *ctx, enum enum_lws_dh_side side, const char *curve_name, struct lws_gencrypto_keyelem *el) { if (ctx->genec_alg != LEGENEC_ECDH) return -1; return lws_genec_new_keypair(ctx, side, curve_name, el); } int lws_genecdsa_new_keypair(struct lws_genec_ctx *ctx, const char *curve_name, struct lws_gencrypto_keyelem *el) { if (ctx->genec_alg != LEGENEC_ECDSA) return -1; return lws_genec_new_keypair(ctx, LDHS_OURS, curve_name, el); } #if 0 int lws_genecdsa_hash_sign(struct lws_genec_ctx *ctx, const uint8_t *in, enum lws_genhash_types hash_type, uint8_t *sig, size_t sig_len) { const EVP_MD *md = lws_gencrypto_openssl_hash_to_EVP_MD(hash_type); EVP_MD_CTX *mdctx = NULL; if (ctx->genec_alg != LEGENEC_ECDSA) return -1; if (!md) return -1; mdctx = EVP_MD_CTX_create(); if (!mdctx) goto bail; if (EVP_DigestSignInit(mdctx, NULL, md, NULL, EVP_PKEY_CTX_get0_pkey(ctx->ctx))) { lwsl_err("%s: EVP_DigestSignInit failed\n", __func__); goto bail; } if (EVP_DigestSignUpdate(mdctx, in, EVP_MD_size(md))) { lwsl_err("%s: EVP_DigestSignUpdate failed\n", __func__); goto bail; } if (EVP_DigestSignFinal(mdctx, sig, &sig_len)) { lwsl_err("%s: EVP_DigestSignFinal failed\n", __func__); goto bail; } EVP_MD_CTX_free(mdctx); return (int)sig_len; bail: if (mdctx) EVP_MD_CTX_free(mdctx); return -1; } #endif int lws_genecdsa_hash_sign_jws(struct lws_genec_ctx *ctx, const uint8_t *in, enum lws_genhash_types hash_type, int keybits, uint8_t *sig, size_t sig_len) { int ret = -1, n, keybytes = lws_gencrypto_bits_to_bytes(keybits); size_t hs = lws_genhash_size(hash_type); const BIGNUM *r = NULL, *s = NULL; ECDSA_SIG *ecdsasig; EC_KEY *eckey; if (ctx->genec_alg != LEGENEC_ECDSA) { lwsl_notice("%s: ctx alg %d\n", __func__, ctx->genec_alg); return -1; } if (!ctx->has_private) return -1; if ((int)sig_len != (int)(keybytes * 2)) { lwsl_notice("%s: sig buff %d < %d\n", __func__, (int)sig_len, (int)(hs * 2)); return -1; } eckey = EVP_PKEY_get1_EC_KEY(EVP_PKEY_CTX_get0_pkey(ctx->ctx[0])); /* * The ECDSA P-256 SHA-256 digital signature is generated as follows: * * 1. Generate a digital signature of the JWS Signing Input using ECDSA * P-256 SHA-256 with the desired private key. The output will be * the pair (R, S), where R and S are 256-bit unsigned integers. * * 2. Turn R and S into octet sequences in big-endian order, with each * array being be 32 octets long. The octet sequence * representations MUST NOT be shortened to omit any leading zero * octets contained in the values. * * 3. Concatenate the two octet sequences in the order R and then S. * (Note that many ECDSA implementations will directly produce this * concatenation as their output.) * * 4. The resulting 64-octet sequence is the JWS Signature value. */ ecdsasig = ECDSA_do_sign(in, (int)hs, eckey); EC_KEY_free(eckey); if (!ecdsasig) { lwsl_notice("%s: ECDSA_do_sign fail\n", __func__); goto bail; } ECDSA_SIG_get0(ecdsasig, &r, &s); /* * in the 521-bit case, we have to pad the last byte as it only * generates 65 bytes */ n = BN_bn2binpad(r, sig, keybytes); if (n != keybytes) { lwsl_notice("%s: bignum r fail %d %d\n", __func__, n, keybytes); goto bail; } n = BN_bn2binpad(s, sig + keybytes, keybytes); if (n != keybytes) { lwsl_notice("%s: bignum s fail %d %d\n", __func__, n, keybytes); goto bail; } ret = 0; bail: if (ecdsasig) ECDSA_SIG_free(ecdsasig); return ret; } /* in is the JWS Signing Input hash */ int lws_genecdsa_hash_sig_verify_jws(struct lws_genec_ctx *ctx, const uint8_t *in, enum lws_genhash_types hash_type, int keybits, const uint8_t *sig, size_t sig_len) { int ret = -1, n, hlen = (int)lws_genhash_size(hash_type), keybytes = lws_gencrypto_bits_to_bytes(keybits); ECDSA_SIG *ecsig = ECDSA_SIG_new(); BIGNUM *r = NULL, *s = NULL; EC_KEY *eckey; if (!ecsig) return -1; if (ctx->genec_alg != LEGENEC_ECDSA) goto bail; if ((int)sig_len != keybytes * 2) { lwsl_err("%s: sig buf size %d vs %d\n", __func__, (int)sig_len, keybytes * 2); goto bail; } /* * 1. The JWS Signature value MUST be a 64-octet sequence. If it is * not a 64-octet sequence, the validation has failed. * * 2. Split the 64-octet sequence into two 32-octet sequences. The * first octet sequence represents R and the second S. The values R * and S are represented as octet sequences using the Integer-to- * OctetString Conversion defined in Section 2.3.7 of SEC1 [SEC1] * (in big-endian octet order). * * 3. Submit the JWS Signing Input, R, S, and the public key (x, y) to * the ECDSA P-256 SHA-256 validator. */ r = BN_bin2bn(sig, keybytes, NULL); if (!r) { lwsl_err("%s: BN_bin2bn (r) fail\n", __func__); goto bail; } s = BN_bin2bn(sig + keybytes, keybytes, NULL); if (!s) { lwsl_err("%s: BN_bin2bn (s) fail\n", __func__); goto bail1; } if (ECDSA_SIG_set0(ecsig, r, s) != 1) { lwsl_err("%s: ECDSA_SIG_set0 fail\n", __func__); goto bail1; } eckey = EVP_PKEY_get1_EC_KEY(EVP_PKEY_CTX_get0_pkey(ctx->ctx[0])); n = ECDSA_do_verify(in, hlen, ecsig, eckey); EC_KEY_free(eckey); if (n != 1) { lwsl_err("%s: ECDSA_do_verify fail, hlen %d\n", __func__, (int)hlen); lws_tls_err_describe_clear(); goto bail; } ret = 0; goto bail; bail1: if (r) BN_free(r); if (s) BN_free(s); bail: ECDSA_SIG_free(ecsig); return ret; } int lws_genecdh_compute_shared_secret(struct lws_genec_ctx *ctx, uint8_t *ss, int *ss_len) { int len, ret = -1; EC_KEY *eckey[2]; if (!ctx->ctx[LDHS_OURS] || !ctx->ctx[LDHS_THEIRS]) { lwsl_err("%s: both sides must be set up\n", __func__); return -1; } eckey[LDHS_OURS] = EVP_PKEY_get1_EC_KEY( EVP_PKEY_CTX_get0_pkey(ctx->ctx[LDHS_OURS])); eckey[LDHS_THEIRS] = EVP_PKEY_get1_EC_KEY( EVP_PKEY_CTX_get0_pkey(ctx->ctx[LDHS_THEIRS])); len = (EC_GROUP_get_degree(EC_KEY_get0_group(eckey[LDHS_OURS])) + 7) / 8; if (len <= *ss_len) { #if defined(USE_WOLFSSL) *ss_len = wolfSSL_ECDH_compute_key( #else *ss_len = ECDH_compute_key( #endif ss, (unsigned int)len, EC_KEY_get0_public_key(eckey[LDHS_THEIRS]), eckey[LDHS_OURS], NULL); ret = -(*ss_len < 0); } EC_KEY_free(eckey[LDHS_OURS]); EC_KEY_free(eckey[LDHS_THEIRS]); return ret; } libwebsockets-4.3.5/lib/tls/openssl/lws-genhash.c000066400000000000000000000131661476025525100220200ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * lws_genhash provides a hash / hmac abstraction api in lws that works the * same whether you are using openssl or mbedtls hash functions underneath. */ #include #include #include /* * Care: many openssl apis return 1 for success. These are translated to the * lws convention of 0 for success. */ int lws_genhash_init(struct lws_genhash_ctx *ctx, enum lws_genhash_types type) { ctx->type = (uint8_t)type; ctx->mdctx = EVP_MD_CTX_create(); if (!ctx->mdctx) return 1; switch (ctx->type) { case LWS_GENHASH_TYPE_MD5: ctx->evp_type = EVP_md5(); break; case LWS_GENHASH_TYPE_SHA1: ctx->evp_type = EVP_sha1(); break; case LWS_GENHASH_TYPE_SHA256: ctx->evp_type = EVP_sha256(); break; case LWS_GENHASH_TYPE_SHA384: ctx->evp_type = EVP_sha384(); break; case LWS_GENHASH_TYPE_SHA512: ctx->evp_type = EVP_sha512(); break; default: return 1; } if (EVP_DigestInit_ex(ctx->mdctx, ctx->evp_type, NULL) != 1) { EVP_MD_CTX_destroy(ctx->mdctx); return 1; } return 0; } int lws_genhash_update(struct lws_genhash_ctx *ctx, const void *in, size_t len) { if (!len) return 0; return EVP_DigestUpdate(ctx->mdctx, in, len) != 1; } int lws_genhash_destroy(struct lws_genhash_ctx *ctx, void *result) { unsigned int len; int ret = 0; if (!ctx->mdctx) return 0; if (result) ret = EVP_DigestFinal_ex(ctx->mdctx, result, &len) != 1; (void)len; EVP_MD_CTX_destroy(ctx->mdctx); ctx->mdctx = NULL; return ret; } #if defined(LWS_HAVE_EVP_PKEY_new_raw_private_key) int lws_genhmac_init(struct lws_genhmac_ctx *ctx, enum lws_genhmac_types type, const uint8_t *key, size_t key_len) { ctx->ctx = EVP_MD_CTX_create(); if (!ctx->ctx) return -1; ctx->evp_type = 0; ctx->type = (uint8_t)type; switch (type) { case LWS_GENHMAC_TYPE_SHA256: ctx->evp_type = EVP_sha256(); break; case LWS_GENHMAC_TYPE_SHA384: ctx->evp_type = EVP_sha384(); break; case LWS_GENHMAC_TYPE_SHA512: ctx->evp_type = EVP_sha512(); break; default: lwsl_err("%s: unknown HMAC type %d\n", __func__, type); goto bail; } ctx->key = EVP_PKEY_new_raw_private_key(EVP_PKEY_HMAC, NULL, key, key_len); if (!ctx->key) goto bail; if (EVP_DigestSignInit(ctx->ctx, NULL, ctx->evp_type, NULL, ctx->key) != 1) goto bail1; return 0; bail1: EVP_PKEY_free(ctx->key); bail: EVP_MD_CTX_free(ctx->ctx); return -1; } int lws_genhmac_update(struct lws_genhmac_ctx *ctx, const void *in, size_t len) { if (EVP_DigestSignUpdate(ctx->ctx, in, len) != 1) return -1; return 0; } int lws_genhmac_destroy(struct lws_genhmac_ctx *ctx, void *result) { size_t size = (size_t)lws_genhmac_size(ctx->type); int n; n = EVP_DigestSignFinal(ctx->ctx, result, &size); EVP_MD_CTX_free(ctx->ctx); EVP_PKEY_free(ctx->key); if (n != 1) return -1; return 0; } #else int lws_genhmac_init(struct lws_genhmac_ctx *ctx, enum lws_genhmac_types type, const uint8_t *key, size_t key_len) { #if defined(LWS_HAVE_HMAC_CTX_new) ctx->ctx = HMAC_CTX_new(); if (!ctx->ctx) return -1; #else HMAC_CTX_init(&ctx->ctx); #endif ctx->evp_type = 0; ctx->type = (uint8_t)type; switch (type) { case LWS_GENHMAC_TYPE_SHA256: ctx->evp_type = EVP_sha256(); break; case LWS_GENHMAC_TYPE_SHA384: ctx->evp_type = EVP_sha384(); break; case LWS_GENHMAC_TYPE_SHA512: ctx->evp_type = EVP_sha512(); break; default: lwsl_err("%s: unknown HMAC type %d\n", __func__, type); goto bail; } #if defined(LWS_HAVE_HMAC_CTX_new) if (HMAC_Init_ex(ctx->ctx, key, (int)key_len, ctx->evp_type, NULL) != 1) #else if (HMAC_Init_ex(&ctx->ctx, key, (int)key_len, ctx->evp_type, NULL) != 1) #endif goto bail; return 0; bail: #if defined(LWS_HAVE_HMAC_CTX_new) HMAC_CTX_free(ctx->ctx); #endif return -1; } int lws_genhmac_update(struct lws_genhmac_ctx *ctx, const void *in, size_t len) { #if defined(LWS_HAVE_HMAC_CTX_new) #if defined(LIBRESSL_VERSION_NUMBER) if (HMAC_Update(ctx->ctx, in, len) != 1) #else if (HMAC_Update(ctx->ctx, in, (int)len) != 1) #endif #else /* HMAC_CTX_new */ if (HMAC_Update(&ctx->ctx, in, len) != 1) #endif return -1; return 0; } int lws_genhmac_destroy(struct lws_genhmac_ctx *ctx, void *result) { unsigned int size = (unsigned int)lws_genhmac_size(ctx->type); #if defined(LWS_HAVE_HMAC_CTX_new) int n = HMAC_Final(ctx->ctx, result, &size); HMAC_CTX_free(ctx->ctx); #else int n = HMAC_Final(&ctx->ctx, result, &size); #endif if (n != 1) return -1; return 0; } #endif libwebsockets-4.3.5/lib/tls/openssl/lws-genrsa.c000066400000000000000000000227231476025525100216610ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * lws_genrsa provides an RSA abstraction api in lws that works the * same whether you are using openssl or mbedtls crypto functions underneath. */ #include "private-lib-core.h" #include "private-lib-tls-openssl.h" /* * Care: many openssl apis return 1 for success. These are translated to the * lws convention of 0 for success. */ void lws_genrsa_destroy_elements(struct lws_gencrypto_keyelem *el) { lws_gencrypto_destroy_elements(el, LWS_GENCRYPTO_RSA_KEYEL_COUNT); } static int mode_map_crypt[] = { RSA_PKCS1_PADDING, RSA_PKCS1_OAEP_PADDING }, mode_map_sig[] = { RSA_PKCS1_PADDING, RSA_PKCS1_PSS_PADDING }; static int rsa_pkey_wrap(struct lws_genrsa_ctx *ctx, RSA *rsa) { EVP_PKEY *pkey; /* we have the RSA object filled up... wrap in a PKEY */ pkey = EVP_PKEY_new(); if (!pkey) return 1; /* bind the PKEY to the RSA key we just prepared */ if (EVP_PKEY_assign_RSA(pkey, rsa) != 1) { lwsl_err("%s: EVP_PKEY_assign_RSA_KEY failed\n", __func__); goto bail; } /* pepare our PKEY_CTX with the PKEY */ ctx->ctx = EVP_PKEY_CTX_new(pkey, NULL); EVP_PKEY_free(pkey); pkey = NULL; if (!ctx->ctx) goto bail; return 0; bail: if (pkey) EVP_PKEY_free(pkey); return 1; } int lws_genrsa_create(struct lws_genrsa_ctx *ctx, const struct lws_gencrypto_keyelem *el, struct lws_context *context, enum enum_genrsa_mode mode, enum lws_genhash_types oaep_hashid) { int n; memset(ctx, 0, sizeof(*ctx)); ctx->context = context; ctx->mode = mode; /* Step 1: * * convert the MPI for e and n to OpenSSL BIGNUMs */ for (n = 0; n < 5; n++) { ctx->bn[n] = BN_bin2bn(el[n].buf, (int)el[n].len, NULL); if (!ctx->bn[n]) { lwsl_notice("mpi load failed\n"); goto bail; } } /* Step 2: * * assemble the OpenSSL RSA from the BIGNUMs */ ctx->rsa = RSA_new(); if (!ctx->rsa) { lwsl_notice("Failed to create RSA\n"); goto bail; } #if defined(LWS_HAVE_RSA_SET0_KEY) && !defined(USE_WOLFSSL) if (RSA_set0_key(ctx->rsa, ctx->bn[LWS_GENCRYPTO_RSA_KEYEL_N], ctx->bn[LWS_GENCRYPTO_RSA_KEYEL_E], ctx->bn[LWS_GENCRYPTO_RSA_KEYEL_D]) != 1) { lwsl_notice("RSA_set0_key failed\n"); goto bail; } RSA_set0_factors(ctx->rsa, ctx->bn[LWS_GENCRYPTO_RSA_KEYEL_P], ctx->bn[LWS_GENCRYPTO_RSA_KEYEL_Q]); #else ctx->rsa->e = ctx->bn[LWS_GENCRYPTO_RSA_KEYEL_E]; ctx->rsa->n = ctx->bn[LWS_GENCRYPTO_RSA_KEYEL_N]; ctx->rsa->d = ctx->bn[LWS_GENCRYPTO_RSA_KEYEL_D]; ctx->rsa->p = ctx->bn[LWS_GENCRYPTO_RSA_KEYEL_P]; ctx->rsa->q = ctx->bn[LWS_GENCRYPTO_RSA_KEYEL_Q]; #endif if (!rsa_pkey_wrap(ctx, ctx->rsa)) return 0; bail: for (n = 0; n < 5; n++) if (ctx->bn[n]) { BN_clear_free(ctx->bn[n]); ctx->bn[n] = NULL; } if (ctx->rsa) { RSA_free(ctx->rsa); ctx->rsa = NULL; } return 1; } int lws_genrsa_new_keypair(struct lws_context *context, struct lws_genrsa_ctx *ctx, enum enum_genrsa_mode mode, struct lws_gencrypto_keyelem *el, int bits) { BIGNUM *bn; int n; memset(ctx, 0, sizeof(*ctx)); ctx->context = context; ctx->mode = mode; ctx->rsa = RSA_new(); if (!ctx->rsa) { lwsl_notice("Failed to create RSA\n"); return -1; } bn = BN_new(); if (!bn) goto cleanup_1; if (BN_set_word(bn, RSA_F4) != 1) { BN_free(bn); goto cleanup_1; } n = RSA_generate_key_ex(ctx->rsa, bits, bn, NULL); BN_clear_free(bn); if (n != 1) goto cleanup_1; #if defined(LWS_HAVE_RSA_SET0_KEY) && !defined(USE_WOLFSSL) { const BIGNUM *mpi[5]; RSA_get0_key(ctx->rsa, &mpi[LWS_GENCRYPTO_RSA_KEYEL_N], &mpi[LWS_GENCRYPTO_RSA_KEYEL_E], &mpi[LWS_GENCRYPTO_RSA_KEYEL_D]); RSA_get0_factors(ctx->rsa, &mpi[LWS_GENCRYPTO_RSA_KEYEL_P], &mpi[LWS_GENCRYPTO_RSA_KEYEL_Q]); #else { BIGNUM *mpi[5] = { ctx->rsa->e, ctx->rsa->n, ctx->rsa->d, ctx->rsa->p, ctx->rsa->q, }; #endif for (n = 0; n < 5; n++) if (BN_num_bytes(mpi[n])) { el[n].buf = lws_malloc( (unsigned int)BN_num_bytes(mpi[n]), "genrsakey"); if (!el[n].buf) goto cleanup; el[n].len = (unsigned int)BN_num_bytes(mpi[n]); BN_bn2bin(mpi[n], el[n].buf); } } if (!rsa_pkey_wrap(ctx, ctx->rsa)) return 0; cleanup: for (n = 0; n < LWS_GENCRYPTO_RSA_KEYEL_COUNT; n++) if (el[n].buf) lws_free_set_NULL(el[n].buf); cleanup_1: RSA_free(ctx->rsa); ctx->rsa = NULL; return -1; } /* * in_len must be less than RSA_size(rsa) - 11 for the PKCS #1 v1.5 * based padding modes */ int lws_genrsa_public_encrypt(struct lws_genrsa_ctx *ctx, const uint8_t *in, size_t in_len, uint8_t *out) { int n = RSA_public_encrypt((int)in_len, in, out, ctx->rsa, mode_map_crypt[ctx->mode]); if (n < 0) { lwsl_err("%s: RSA_public_encrypt failed\n", __func__); lws_tls_err_describe_clear(); return -1; } return n; } int lws_genrsa_private_encrypt(struct lws_genrsa_ctx *ctx, const uint8_t *in, size_t in_len, uint8_t *out) { int n = RSA_private_encrypt((int)in_len, in, out, ctx->rsa, mode_map_crypt[ctx->mode]); if (n < 0) { lwsl_err("%s: RSA_private_encrypt failed\n", __func__); lws_tls_err_describe_clear(); return -1; } return n; } int lws_genrsa_public_decrypt(struct lws_genrsa_ctx *ctx, const uint8_t *in, size_t in_len, uint8_t *out, size_t out_max) { int n = RSA_public_decrypt((int)in_len, in, out, ctx->rsa, mode_map_crypt[ctx->mode]); if (n < 0) { lwsl_err("%s: RSA_public_decrypt failed\n", __func__); return -1; } return n; } int lws_genrsa_private_decrypt(struct lws_genrsa_ctx *ctx, const uint8_t *in, size_t in_len, uint8_t *out, size_t out_max) { int n = RSA_private_decrypt((int)in_len, in, out, ctx->rsa, mode_map_crypt[ctx->mode]); if (n < 0) { lwsl_err("%s: RSA_private_decrypt failed\n", __func__); lws_tls_err_describe_clear(); return -1; } return n; } int lws_genrsa_hash_sig_verify(struct lws_genrsa_ctx *ctx, const uint8_t *in, enum lws_genhash_types hash_type, const uint8_t *sig, size_t sig_len) { int n = lws_gencrypto_openssl_hash_to_NID(hash_type), h = (int)lws_genhash_size(hash_type); const EVP_MD *md = NULL; if (n < 0) return -1; switch(ctx->mode) { case LGRSAM_PKCS1_1_5: n = RSA_verify(n, in, (unsigned int)h, (uint8_t *)sig, (unsigned int)sig_len, ctx->rsa); break; case LGRSAM_PKCS1_OAEP_PSS: md = lws_gencrypto_openssl_hash_to_EVP_MD(hash_type); if (!md) return -1; #if defined(LWS_HAVE_RSA_verify_pss_mgf1) n = RSA_verify_pss_mgf1(ctx->rsa, in, h, md, NULL, -1, (uint8_t *)sig, #else n = RSA_verify_PKCS1_PSS(ctx->rsa, in, md, (uint8_t *)sig, #endif (int)sig_len); break; default: return -1; } if (n != 1) { lwsl_notice("%s: fail\n", __func__); lws_tls_err_describe_clear(); return -1; } return 0; } int lws_genrsa_hash_sign(struct lws_genrsa_ctx *ctx, const uint8_t *in, enum lws_genhash_types hash_type, uint8_t *sig, size_t sig_len) { int n = lws_gencrypto_openssl_hash_to_NID(hash_type), h = (int)lws_genhash_size(hash_type); unsigned int used = 0; EVP_MD_CTX *mdctx = NULL; const EVP_MD *md = NULL; if (n < 0) return -1; switch(ctx->mode) { case LGRSAM_PKCS1_1_5: if (RSA_sign(n, in, (unsigned int)h, sig, &used, ctx->rsa) != 1) { lwsl_err("%s: RSA_sign failed\n", __func__); goto bail; } break; case LGRSAM_PKCS1_OAEP_PSS: md = lws_gencrypto_openssl_hash_to_EVP_MD(hash_type); if (!md) return -1; if (EVP_PKEY_CTX_set_rsa_padding(ctx->ctx, mode_map_sig[ctx->mode]) != 1) { lwsl_err("%s: set_rsa_padding failed\n", __func__); goto bail; } mdctx = EVP_MD_CTX_create(); if (!mdctx) goto bail; if (EVP_DigestSignInit(mdctx, NULL, md, NULL, #if defined(USE_WOLFSSL) ctx->ctx->pkey)) { #else EVP_PKEY_CTX_get0_pkey(ctx->ctx))) { #endif lwsl_err("%s: EVP_DigestSignInit failed\n", __func__); goto bail; } if (EVP_DigestSignUpdate(mdctx, in, (unsigned int)EVP_MD_size(md))) { lwsl_err("%s: EVP_DigestSignUpdate failed\n", __func__); goto bail; } if (EVP_DigestSignFinal(mdctx, sig, &sig_len)) { lwsl_err("%s: EVP_DigestSignFinal failed\n", __func__); goto bail; } EVP_MD_CTX_free(mdctx); used = (unsigned int)sig_len; break; default: return -1; } return (int)used; bail: if (mdctx) EVP_MD_CTX_free(mdctx); return -1; } void lws_genrsa_destroy(struct lws_genrsa_ctx *ctx) { if (!ctx->ctx) return; EVP_PKEY_CTX_free(ctx->ctx); ctx->ctx = NULL; ctx->rsa = NULL; } libwebsockets-4.3.5/lib/tls/openssl/openssl-client.c000066400000000000000000000743051476025525100225410ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "lws_config.h" #ifdef LWS_HAVE_X509_VERIFY_PARAM_set1_host /* Before glibc 2.10, strnlen required _GNU_SOURCE */ #if !defined(_GNU_SOURCE) #define _GNU_SOURCE #endif #endif #include #include "private-lib-core.h" #include "private-lib-tls-openssl.h" /* * Care: many openssl apis return 1 for success. These are translated to the * lws convention of 0 for success. */ int lws_openssl_describe_cipher(struct lws *wsi); extern int openssl_websocket_private_data_index, openssl_SSL_CTX_private_data_index; #if !defined(USE_WOLFSSL) #if 0 #if defined(LWS_WITH_TLS_JIT_TRUST) /* * Completion of sync or async JIT trust lookup */ int lws_tls_jit_trust_got_cert_cb(void *got_opaque, const uint8_t *der, size_t der_len) { X509 *x = d2i_X509(NULL, &der, (long)der_len); /** !!! this is not safe for async atm */ struct lws *wsi = (struct lws *)got_opaque; X509_STORE *xs; int ret = 0; if (!x) { lwsl_err("%s: failed\n", __func__); return 1; } xs = SSL_CTX_get_cert_store(SSL_get_SSL_CTX(wsi->tls.ssl)); if (xs) { if (X509_STORE_add_cert(xs, x) != 1) { lwsl_warn("%s: unable to set trusted CA\n", __func__); ret = 1; } else lwsl_notice("%s: added trusted CA to CTX for next time\n", __func__); } else lwsl_warn("%s: couldn't get cert store\n", __func__); X509_free(x); return ret; } #endif #endif static int OpenSSL_client_verify_callback(int preverify_ok, X509_STORE_CTX *x509_ctx) { SSL *ssl; int n, err = 0; struct lws *wsi; /* keep old behaviour accepting self-signed server certs */ if (!preverify_ok) { err = X509_STORE_CTX_get_error(x509_ctx); if (err != X509_V_OK) { ssl = X509_STORE_CTX_get_ex_data(x509_ctx, SSL_get_ex_data_X509_STORE_CTX_idx()); wsi = SSL_get_ex_data(ssl, openssl_websocket_private_data_index); if (!wsi) { lwsl_err("%s: can't get wsi from ssl privdata\n", __func__); return 0; } if ((err == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT || err == X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN) && wsi->tls.use_ssl & LCCSCF_ALLOW_SELFSIGNED) { lwsl_notice("accepting self-signed " "certificate (verify_callback)\n"); X509_STORE_CTX_set_error(x509_ctx, X509_V_OK); return 1; // ok } else if ((err == X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY || err == X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE) && wsi->tls.use_ssl & LCCSCF_ALLOW_INSECURE) { lwsl_notice("accepting non-trusted certificate\n"); X509_STORE_CTX_set_error(x509_ctx, X509_V_OK); return 1; /* ok */ } else if ((err == X509_V_ERR_CERT_NOT_YET_VALID || err == X509_V_ERR_CERT_HAS_EXPIRED) && wsi->tls.use_ssl & LCCSCF_ALLOW_EXPIRED) { if (err == X509_V_ERR_CERT_NOT_YET_VALID) lwsl_notice("accepting not yet valid " "certificate (verify_" "callback)\n"); else if (err == X509_V_ERR_CERT_HAS_EXPIRED) lwsl_notice("accepting expired " "certificate (verify_" "callback)\n"); X509_STORE_CTX_set_error(x509_ctx, X509_V_OK); return 1; // ok } } } ssl = X509_STORE_CTX_get_ex_data(x509_ctx, SSL_get_ex_data_X509_STORE_CTX_idx()); wsi = SSL_get_ex_data(ssl, openssl_websocket_private_data_index); if (!wsi) { lwsl_err("%s: can't get wsi from ssl privdata\n", __func__); return 0; } #if defined(LWS_WITH_TLS_JIT_TRUST) if (err == X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY) { union lws_tls_cert_info_results ci; STACK_OF(X509) *x509_stack; x509_stack = X509_STORE_CTX_get1_chain(x509_ctx); if (x509_stack) { for (n = 0; n < OPENSSL_sk_num((const OPENSSL_STACK *)x509_stack) && wsi->tls.kid_chain.count != LWS_ARRAY_SIZE(wsi->tls.kid_chain.akid); n++) { X509 *x509 = OPENSSL_sk_value((const OPENSSL_STACK *)x509_stack, n); if (!lws_tls_openssl_cert_info(x509, LWS_TLS_CERT_INFO_SUBJECT_KEY_ID, &ci, 0)) lws_tls_kid_copy(&ci, &wsi->tls.kid_chain.skid[ wsi->tls.kid_chain.count]); if (!lws_tls_openssl_cert_info(x509, LWS_TLS_CERT_INFO_AUTHORITY_KEY_ID, &ci, 0)) lws_tls_kid_copy(&ci, &wsi->tls.kid_chain.akid[ wsi->tls.kid_chain.count]); wsi->tls.kid_chain.count++; } sk_X509_pop_free(x509_stack, X509_free); } lws_tls_jit_trust_sort_kids(wsi, &wsi->tls.kid_chain); } #endif n = lws_get_context_protocol(wsi->a.context, 0).callback(wsi, LWS_CALLBACK_OPENSSL_PERFORM_SERVER_CERT_VERIFICATION, x509_ctx, ssl, (unsigned int)preverify_ok); /* keep old behaviour if something wrong with server certs */ /* if ssl error is overruled in callback and cert is ok, * X509_STORE_CTX_set_error(x509_ctx, X509_V_OK); must be set and * return value is 0 from callback */ if (!preverify_ok) { int err = X509_STORE_CTX_get_error(x509_ctx); if (err != X509_V_OK) { /* cert validation error was not handled in callback */ int depth = X509_STORE_CTX_get_error_depth(x509_ctx); const char *msg = X509_verify_cert_error_string(err); lws_strncpy(wsi->tls.err_helper, msg, sizeof(wsi->tls.err_helper)); lwsl_err("SSL error: %s (preverify_ok=%d;err=%d;" "depth=%d)\n", msg, preverify_ok, err, depth); #if defined(LWS_WITH_SYS_METRICS) { char buckname[64]; lws_snprintf(buckname, sizeof(buckname), "tls=\"%s\"", msg); lws_metrics_hist_bump_describe_wsi(wsi, lws_metrics_priv_to_pub(wsi->a.context->mth_conn_failures), buckname); } #endif return preverify_ok; // not ok } } /* * convert callback return code from 0 = OK to verify callback * return value 1 = OK */ return !n; } #endif int lws_ssl_client_bio_create(struct lws *wsi) { char hostname[128], *p; #if defined(LWS_HAVE_SSL_set_alpn_protos) && \ defined(LWS_HAVE_SSL_get0_alpn_selected) uint8_t openssl_alpn[40]; const char *alpn_comma = wsi->a.context->tls.alpn_default; int n; #endif if (wsi->stash) { lws_strncpy(hostname, wsi->stash->cis[CIS_HOST], sizeof(hostname)); #if defined(LWS_HAVE_SSL_set_alpn_protos) && \ defined(LWS_HAVE_SSL_get0_alpn_selected) alpn_comma = wsi->stash->cis[CIS_ALPN]; #endif } else { #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) if (lws_hdr_copy(wsi, hostname, sizeof(hostname), _WSI_TOKEN_CLIENT_HOST) <= 0) #endif { lwsl_err("%s: Unable to get hostname\n", __func__); return -1; } } /* * remove any :port part on the hostname... necessary for network * connection but typical certificates do not contain it */ p = hostname; while (*p) { if (*p == ':') { *p = '\0'; break; } p++; } wsi->tls.ssl = SSL_new(wsi->a.vhost->tls.ssl_client_ctx); if (!wsi->tls.ssl) { const char *es = ERR_error_string( #if defined(LWS_WITH_BORINGSSL) (uint32_t) #else (unsigned long) #endif lws_ssl_get_error(wsi, 0), NULL); lwsl_err("SSL_new failed: %s\n", es); lws_tls_err_describe_clear(); return -1; } #if defined(LWS_WITH_TLS_SESSIONS) if (!(wsi->a.vhost->options & LWS_SERVER_OPTION_DISABLE_TLS_SESSION_CACHE)) lws_tls_reuse_session(wsi); #endif #if defined (LWS_HAVE_SSL_SET_INFO_CALLBACK) if (wsi->a.vhost->tls.ssl_info_event_mask) SSL_set_info_callback(wsi->tls.ssl, lws_ssl_info_callback); #endif #if defined(LWS_HAVE_X509_VERIFY_PARAM_set1_host) if (!(wsi->tls.use_ssl & LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK)) { #if !defined(USE_WOLFSSL) X509_VERIFY_PARAM *param = SSL_get0_param(wsi->tls.ssl); /* Enable automatic hostname checks */ X509_VERIFY_PARAM_set_hostflags(param, X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS); /* Handle the case where the hostname is an IP address */ if (!X509_VERIFY_PARAM_set1_ip_asc(param, hostname)) X509_VERIFY_PARAM_set1_host(param, hostname, strnlen(hostname, sizeof(hostname))); #endif } #else if (!(wsi->tls.use_ssl & LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK)) { lwsl_err("%s: your tls lib is too old to have " "X509_VERIFY_PARAM_set1_host, failing all client tls\n", __func__); return -1; } #endif #if !defined(USE_WOLFSSL) #ifndef USE_OLD_CYASSL /* OpenSSL_client_verify_callback will be called @ SSL_connect() */ SSL_set_verify(wsi->tls.ssl, SSL_VERIFY_PEER, OpenSSL_client_verify_callback); #endif #endif #if !defined(USE_WOLFSSL) SSL_set_mode(wsi->tls.ssl, SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER); #endif /* * use server name indication (SNI), if supported, * when establishing connection */ #ifdef USE_WOLFSSL #ifdef USE_OLD_CYASSL #ifdef CYASSL_SNI_HOST_NAME CyaSSL_UseSNI(wsi->tls.ssl, CYASSL_SNI_HOST_NAME, hostname, strlen(hostname)); #endif #else #if defined(WOLFSSL_SNI_HOST_NAME) || defined(HAVE_SNI) wolfSSL_UseSNI(wsi->tls.ssl, WOLFSSL_SNI_HOST_NAME, hostname, (unsigned short)strlen(hostname)); #endif #endif #else #ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME SSL_set_tlsext_host_name(wsi->tls.ssl, hostname); #endif #endif #ifdef USE_WOLFSSL /* * wolfSSL/CyaSSL does certificate verification differently * from OpenSSL. * If we should ignore the certificate, we need to set * this before SSL_new and SSL_connect is called. * Otherwise the connect will simply fail with error code -155 */ #ifdef USE_OLD_CYASSL if (wsi->tls.use_ssl & LCCSCF_ALLOW_SELFSIGNED) CyaSSL_set_verify(wsi->tls.ssl, SSL_VERIFY_NONE, NULL); #else if (wsi->tls.use_ssl & LCCSCF_ALLOW_SELFSIGNED) wolfSSL_set_verify(wsi->tls.ssl, SSL_VERIFY_NONE, NULL); #endif #endif /* USE_WOLFSSL */ wsi->tls.client_bio = BIO_new_socket((int)(lws_intptr_t)wsi->desc.sockfd, BIO_NOCLOSE); SSL_set_bio(wsi->tls.ssl, wsi->tls.client_bio, wsi->tls.client_bio); #ifdef USE_WOLFSSL #ifdef USE_OLD_CYASSL CyaSSL_set_using_nonblock(wsi->tls.ssl, 1); #else wolfSSL_set_using_nonblock(wsi->tls.ssl, 1); #endif #else BIO_set_nbio(wsi->tls.client_bio, 1); /* nonblocking */ #endif #if defined(LWS_HAVE_SSL_set_alpn_protos) && \ defined(LWS_HAVE_SSL_get0_alpn_selected) if (wsi->a.vhost->tls.alpn) alpn_comma = wsi->a.vhost->tls.alpn; if (wsi->stash) alpn_comma = wsi->stash->cis[CIS_ALPN]; #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) if (lws_hdr_copy(wsi, hostname, sizeof(hostname), _WSI_TOKEN_CLIENT_ALPN) > 0) alpn_comma = hostname; #endif lwsl_info("%s client conn using alpn list '%s'\n", wsi->role_ops->name, alpn_comma); n = lws_alpn_comma_to_openssl(alpn_comma, openssl_alpn, sizeof(openssl_alpn) - 1); SSL_set_alpn_protos(wsi->tls.ssl, openssl_alpn, (unsigned int)n); #endif SSL_set_ex_data(wsi->tls.ssl, openssl_websocket_private_data_index, wsi); if (wsi->sys_tls_client_cert) { lws_system_blob_t *b = lws_system_get_blob(wsi->a.context, LWS_SYSBLOB_TYPE_CLIENT_CERT_DER, wsi->sys_tls_client_cert - 1); const uint8_t *data; size_t size; if (!b) goto no_client_cert; /* * Set up the per-connection client cert */ size = lws_system_blob_get_size(b); if (!size) goto no_client_cert; if (lws_system_blob_get_single_ptr(b, &data)) goto no_client_cert; if (SSL_use_certificate_ASN1(wsi->tls.ssl, #if defined(USE_WOLFSSL) (unsigned char *) #endif data, #if defined(LWS_WITH_BORINGSSL) (size_t) #else (int) #endif size) != 1) { lwsl_err("%s: use_certificate failed\n", __func__); lws_tls_err_describe_clear(); goto no_client_cert; } b = lws_system_get_blob(wsi->a.context, LWS_SYSBLOB_TYPE_CLIENT_KEY_DER, wsi->sys_tls_client_cert - 1); if (!b) goto no_client_cert; size = lws_system_blob_get_size(b); if (!size) goto no_client_cert; if (lws_system_blob_get_single_ptr(b, &data)) goto no_client_cert; if (SSL_use_PrivateKey_ASN1(EVP_PKEY_RSA, wsi->tls.ssl, #if defined(USE_WOLFSSL) (unsigned char *) #endif data, #if defined(LWS_WITH_BORINGSSL) (size_t) #else (int) #endif size) != 1 && SSL_use_PrivateKey_ASN1(EVP_PKEY_EC, wsi->tls.ssl, #if defined(USE_WOLFSSL) (unsigned char *) #endif data, #if defined(LWS_WITH_BORINGSSL) (size_t) #else (int) #endif size) != 1) { lwsl_err("%s: use_privkey failed\n", __func__); lws_tls_err_describe_clear(); goto no_client_cert; } if (SSL_check_private_key(wsi->tls.ssl) != 1) { lwsl_err("Private SSL key doesn't match cert\n"); lws_tls_err_describe_clear(); return 1; } lwsl_notice("%s: set system client cert %u\n", __func__, wsi->sys_tls_client_cert - 1); } return 0; no_client_cert: lwsl_err("%s: unable to set up system client cert %d\n", __func__, wsi->sys_tls_client_cert - 1); return 1; } enum lws_ssl_capable_status lws_tls_client_connect(struct lws *wsi, char *errbuf, size_t elen) { #if defined(LWS_HAVE_SSL_set_alpn_protos) && \ defined(LWS_HAVE_SSL_get0_alpn_selected) const unsigned char *prot; char a[32]; unsigned int len; #endif int m, n, en; unsigned long l; #if defined(LWS_WITH_TLS_SESSIONS) && defined(LWS_HAVE_SSL_SESSION_set_time) SSL_SESSION *sess; #endif errno = 0; ERR_clear_error(); wsi->tls.err_helper[0] = '\0'; n = SSL_connect(wsi->tls.ssl); en = errno; m = lws_ssl_get_error(wsi, n); if (m == SSL_ERROR_SYSCALL #if defined(WIN32) && en #endif ) { #if defined(WIN32) || (_LWS_ENABLED_LOGS & LLL_INFO) lwsl_info("%s: n %d, m %d, errno %d\n", __func__, n, m, en); #endif lws_snprintf(errbuf, elen, "connect SYSCALL %d", en); return LWS_SSL_CAPABLE_ERROR; } if (m == SSL_ERROR_SSL) { l = ERR_get_error(); n = lws_snprintf(errbuf, elen, "tls: %s", wsi->tls.err_helper); if (!wsi->tls.err_helper[0]) ERR_error_string_n((unsigned int)l, errbuf + n, (elen - (unsigned int)n)); return LWS_SSL_CAPABLE_ERROR; } #if defined(LWS_WITH_TLS_SESSIONS) if (SSL_session_reused(wsi->tls.ssl)) { #if defined(LWS_HAVE_SSL_SESSION_set_time) sess = SSL_get_session(wsi->tls.ssl); if (sess) /* should always be true */ #if defined(OPENSSL_IS_BORINGSSL) SSL_SESSION_set_time(sess, (uint64_t)time(NULL)); /* extend session lifetime */ #else SSL_SESSION_set_time(sess, (long)time(NULL)); /* extend session lifetime */ #endif #endif } #endif if (m == SSL_ERROR_WANT_READ || SSL_want_read(wsi->tls.ssl)) return LWS_SSL_CAPABLE_MORE_SERVICE_READ; if (m == SSL_ERROR_WANT_WRITE || SSL_want_write(wsi->tls.ssl)) return LWS_SSL_CAPABLE_MORE_SERVICE_WRITE; if (n == 1 || m == SSL_ERROR_SYSCALL) { #if defined(LWS_HAVE_SSL_set_alpn_protos) && \ defined(LWS_HAVE_SSL_get0_alpn_selected) SSL_get0_alpn_selected(wsi->tls.ssl, &prot, &len); if (len >= sizeof(a)) len = sizeof(a) - 1; memcpy(a, (const char *)prot, len); a[len] = '\0'; lws_role_call_alpn_negotiated(wsi, (const char *)a); #endif #if defined(LWS_TLS_SYNTHESIZE_CB) lws_sul_schedule(wsi->a.context, wsi->tsi, &wsi->tls.sul_cb_synth, lws_sess_cache_synth_cb, 500 * LWS_US_PER_MS); #endif lwsl_info("client connect OK\n"); lws_openssl_describe_cipher(wsi); return LWS_SSL_CAPABLE_DONE; } if (!n) /* we don't know what he wants, but he says to retry */ return LWS_SSL_CAPABLE_MORE_SERVICE; lws_snprintf(errbuf, elen, "connect unk %d", m); return LWS_SSL_CAPABLE_ERROR; } int lws_tls_client_confirm_peer_cert(struct lws *wsi, char *ebuf, size_t ebuf_len) { #if !defined(USE_WOLFSSL) struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; char *p = (char *)&pt->serv_buf[0]; const char *es, *type = ""; unsigned int avoid = 0; char *sb = p; long n; errno = 0; ERR_clear_error(); n = SSL_get_verify_result(wsi->tls.ssl); switch (n) { case X509_V_OK: return 0; case X509_V_ERR_HOSTNAME_MISMATCH: type = "tls=hostname"; avoid = LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK; break; case X509_V_ERR_INVALID_CA: case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: case X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN: type = "tls=invalidca"; avoid = LCCSCF_ALLOW_SELFSIGNED; break; case X509_V_ERR_CERT_NOT_YET_VALID: type = "tls=notyetvalid"; avoid = LCCSCF_ALLOW_EXPIRED; break; case X509_V_ERR_CERT_HAS_EXPIRED: type = "tls=expired"; avoid = LCCSCF_ALLOW_EXPIRED; break; } lwsl_info("%s: cert problem: %s\n", __func__, type); #if defined(LWS_WITH_SYS_METRICS) lws_metrics_hist_bump_describe_wsi(wsi, lws_metrics_priv_to_pub(wsi->a.context->mth_conn_failures), type); #endif if (wsi->tls.use_ssl & avoid) { lwsl_info("%s: allowing anyway\n", __func__); return 0; } es = ERR_error_string( #if defined(LWS_WITH_BORINGSSL) (uint32_t) #else (unsigned long) #endif n, sb); lws_snprintf(ebuf, ebuf_len, "server's cert didn't look good, %s X509_V_ERR = %ld: %s\n", type, n, es); lwsl_info("%s\n", ebuf); lws_tls_err_describe_clear(); return -1; #else /* USE_WOLFSSL */ return 0; #endif } int lws_tls_client_vhost_extra_cert_mem(struct lws_vhost *vh, const uint8_t *der, size_t der_len) { X509_STORE *st; #if defined(USE_WOLFSSL) X509 *x = d2i_X509(NULL, &der, (int)der_len); #else X509 *x = d2i_X509(NULL, &der, (long)der_len); #endif int n; if (!x) { lwsl_err("%s: Failed to load DER\n", __func__); lws_tls_err_describe_clear(); return 1; } st = SSL_CTX_get_cert_store(vh->tls.ssl_client_ctx); if (!st) { lwsl_err("%s: failed to get cert store\n", __func__); X509_free(x); return 1; } n = X509_STORE_add_cert(st, x); if (n != 1) lwsl_err("%s: failed to add cert\n", __func__); X509_free(x); return n != 1; } int lws_tls_client_create_vhost_context(struct lws_vhost *vh, const struct lws_context_creation_info *info, const char *cipher_list, const char *ca_filepath, const void *ca_mem, unsigned int ca_mem_len, const char *cert_filepath, const void *cert_mem, unsigned int cert_mem_len, const char *private_key_filepath, const void *key_mem, unsigned int key_mem_len ) { struct lws_tls_client_reuse *tcr; X509_STORE *x509_store; unsigned long error; SSL_METHOD *method; EVP_MD_CTX *mdctx; unsigned int len; uint8_t hash[32]; X509 *client_CA; char c; int n; /* basic openssl init already happened in context init */ /* choose the most recent spin of the api */ #if defined(LWS_HAVE_TLS_CLIENT_METHOD) method = (SSL_METHOD *)TLS_client_method(); #elif defined(LWS_HAVE_TLSV1_2_CLIENT_METHOD) method = (SSL_METHOD *)TLSv1_2_client_method(); #else method = (SSL_METHOD *)SSLv23_client_method(); #endif if (!method) { const char *es; error = ERR_get_error(); es = ERR_error_string( #if defined(LWS_WITH_BORINGSSL) (uint32_t) #else (unsigned long) #endif error, (char *)vh->context->pt[0].serv_buf); lwsl_err("problem creating ssl method %lu: %s\n", error, es); return 1; } /* * OpenSSL client contexts are quite expensive, because they bring in * the system certificate bundle for each one. So if you have multiple * vhosts, each with a client context, it can add up to several * megabytes of heap. In the case the client contexts are configured * identically, they could perfectly well have shared just the one. * * For that reason, use a hash to fingerprint the context configuration * and prefer to reuse an existing one with the same fingerprint if * possible. */ mdctx = EVP_MD_CTX_create(); if (!mdctx) return 1; if (EVP_DigestInit_ex(mdctx, EVP_sha256(), NULL) != 1) { EVP_MD_CTX_destroy(mdctx); return 1; } if (info->ssl_client_options_set) EVP_DigestUpdate(mdctx, &info->ssl_client_options_set, sizeof(info->ssl_client_options_set)); #if (OPENSSL_VERSION_NUMBER >= 0x009080df) && !defined(USE_WOLFSSL) if (info->ssl_client_options_clear) EVP_DigestUpdate(mdctx, &info->ssl_client_options_clear, sizeof(info->ssl_client_options_clear)); #endif if (cipher_list) EVP_DigestUpdate(mdctx, cipher_list, strlen(cipher_list)); #if defined(LWS_HAVE_SSL_CTX_set_ciphersuites) if (info->client_tls_1_3_plus_cipher_list) EVP_DigestUpdate(mdctx, info->client_tls_1_3_plus_cipher_list, strlen(info->client_tls_1_3_plus_cipher_list)); #endif if (!lws_check_opt(vh->options, LWS_SERVER_OPTION_DISABLE_OS_CA_CERTS)) { c = 1; EVP_DigestUpdate(mdctx, &c, 1); } if (ca_filepath) EVP_DigestUpdate(mdctx, ca_filepath, strlen(ca_filepath)); if (cert_filepath) EVP_DigestUpdate(mdctx, cert_filepath, strlen(cert_filepath)); if (private_key_filepath) EVP_DigestUpdate(mdctx, private_key_filepath, strlen(private_key_filepath)); if (ca_mem && ca_mem_len) EVP_DigestUpdate(mdctx, ca_mem, ca_mem_len); if (cert_mem && cert_mem_len) EVP_DigestUpdate(mdctx, cert_mem, cert_mem_len); len = sizeof(hash); EVP_DigestFinal_ex(mdctx, hash, &len); EVP_MD_CTX_destroy(mdctx); /* look for existing client context with same config already */ lws_start_foreach_dll_safe(struct lws_dll2 *, p, tp, lws_dll2_get_head(&vh->context->tls.cc_owner)) { tcr = lws_container_of(p, struct lws_tls_client_reuse, cc_list); if (!memcmp(hash, tcr->hash, len)) { /* it's a match */ tcr->refcount++; vh->tls.ssl_client_ctx = tcr->ssl_client_ctx; vh->tls.tcr = tcr; lwsl_info("%s: vh %s: reusing client ctx %d: use %d\n", __func__, vh->name, tcr->index, tcr->refcount); return 0; } } lws_end_foreach_dll_safe(p, tp); /* no existing one the same... create new client SSL_CTX */ errno = 0; ERR_clear_error(); vh->tls.ssl_client_ctx = SSL_CTX_new(method); if (!vh->tls.ssl_client_ctx) { const char *es; error = ERR_get_error(); es = ERR_error_string( #if defined(LWS_WITH_BORINGSSL) (uint32_t) #else (unsigned long) #endif error, (char *)vh->context->pt[0].serv_buf); lwsl_err("problem creating ssl context %lu: %s\n", error, es); return 1; } SSL_CTX_set_ex_data(vh->tls.ssl_client_ctx, openssl_SSL_CTX_private_data_index, (char *)vh->context); lws_plat_vhost_tls_client_ctx_init(vh); tcr = lws_zalloc(sizeof(*tcr), "client ctx tcr"); if (!tcr) { SSL_CTX_free(vh->tls.ssl_client_ctx); return 1; } tcr->ssl_client_ctx = vh->tls.ssl_client_ctx; tcr->refcount = 1; memcpy(tcr->hash, hash, len); tcr->index = vh->context->tls.count_client_contexts++; lws_dll2_add_head(&tcr->cc_list, &vh->context->tls.cc_owner); lwsl_info("%s: vh %s: created new client ctx %d\n", __func__, vh->name, tcr->index); /* bind the tcr to the client context */ vh->tls.tcr = tcr; #if defined(LWS_WITH_TLS_SESSIONS) vh->tls_session_cache_max = info->tls_session_cache_max ? info->tls_session_cache_max : 10; lws_tls_session_cache(vh, info->tls_session_timeout); #endif #ifdef SSL_OP_NO_COMPRESSION SSL_CTX_set_options(vh->tls.ssl_client_ctx, SSL_OP_NO_COMPRESSION); #endif SSL_CTX_set_options(vh->tls.ssl_client_ctx, SSL_OP_CIPHER_SERVER_PREFERENCE); SSL_CTX_set_mode(vh->tls.ssl_client_ctx, SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER | SSL_MODE_RELEASE_BUFFERS); #if !defined(USE_WOLFSSL) #if defined(LWS_WITH_BORINGSSL) uint32_t #else #if (OPENSSL_VERSION_NUMBER >= 0x10003000l) && \ !defined(LIBRESSL_VERSION_NUMBER) /* not documented by openssl */ unsigned long #else long #endif #endif #else long #endif ssl_client_options_set_value = #if !defined(USE_WOLFSSL) #if defined(LWS_WITH_BORINGSSL) (uint32_t) #else #if (OPENSSL_VERSION_NUMBER >= 0x10003000l) && \ !defined(LIBRESSL_VERSION_NUMBER) /* not documented by openssl */ (unsigned long) #else (long) #endif #endif #endif info->ssl_client_options_set; if (info->ssl_client_options_set) SSL_CTX_set_options(vh->tls.ssl_client_ctx, ssl_client_options_set_value); #if (OPENSSL_VERSION_NUMBER >= 0x009080df) && !defined(USE_WOLFSSL) /* SSL_clear_options introduced in 0.9.8m */ #if defined(LWS_WITH_BORINGSSL) uint32_t #else #if (OPENSSL_VERSION_NUMBER >= 0x10003000l) && \ !defined(LIBRESSL_VERSION_NUMBER) /* not documented by openssl */ unsigned long #else long #endif #endif ssl_client_options_clear_value = #if defined(LWS_WITH_BORINGSSL) (uint32_t) #else #if (OPENSSL_VERSION_NUMBER >= 0x10003000l) && \ !defined(LIBRESSL_VERSION_NUMBER) /* not documented by openssl */ (unsigned long) #else (long) #endif #endif info->ssl_client_options_clear; if (info->ssl_client_options_clear) SSL_CTX_clear_options(vh->tls.ssl_client_ctx, ssl_client_options_clear_value); #endif if (cipher_list) SSL_CTX_set_cipher_list(vh->tls.ssl_client_ctx, cipher_list); #if defined(LWS_HAVE_SSL_CTX_set_ciphersuites) if (info->client_tls_1_3_plus_cipher_list) SSL_CTX_set_ciphersuites(vh->tls.ssl_client_ctx, info->client_tls_1_3_plus_cipher_list); #endif #ifdef LWS_SSL_CLIENT_USE_OS_CA_CERTS if (!lws_check_opt(vh->options, LWS_SERVER_OPTION_DISABLE_OS_CA_CERTS)) /* loads OS default CA certs */ SSL_CTX_set_default_verify_paths(vh->tls.ssl_client_ctx); #endif /* openssl init for cert verification (for client sockets) */ if (!ca_filepath && (!ca_mem || !ca_mem_len)) { #if defined(LWS_HAVE_SSL_CTX_load_verify_dir) if (!SSL_CTX_load_verify_dir( vh->tls.ssl_client_ctx, LWS_OPENSSL_CLIENT_CERTS)) #else if (!SSL_CTX_load_verify_locations( vh->tls.ssl_client_ctx, NULL, LWS_OPENSSL_CLIENT_CERTS)) #endif lwsl_err("Unable to load SSL Client certs from %s " "(set by LWS_OPENSSL_CLIENT_CERTS) -- " "client ssl isn't going to work\n", LWS_OPENSSL_CLIENT_CERTS); } else if (ca_filepath) { #if defined(LWS_HAVE_SSL_CTX_load_verify_file) if (!SSL_CTX_load_verify_file( vh->tls.ssl_client_ctx, ca_filepath)) { #else if (!SSL_CTX_load_verify_locations( vh->tls.ssl_client_ctx, ca_filepath, NULL)) { #endif lwsl_err( "Unable to load SSL Client certs " "file from %s -- client ssl isn't " "going to work\n", ca_filepath); lws_tls_err_describe_clear(); } else lwsl_info("loaded ssl_ca_filepath\n"); } else { lws_filepos_t amount = 0; const uint8_t *up; uint8_t *up1; if (lws_tls_alloc_pem_to_der_file(vh->context, NULL, ca_mem, ca_mem_len, &up1, &amount)) { lwsl_err("%s: Unable to decode x.509 mem\n", __func__); lwsl_hexdump_notice(ca_mem, ca_mem_len); return 1; } up = up1; #if defined(USE_WOLFSSL) client_CA = d2i_X509(NULL, &up, (int)amount); #else client_CA = d2i_X509(NULL, &up, (long)amount); #endif if (!client_CA) { lwsl_err("%s: d2i_X509 failed\n", __func__); lwsl_hexdump_notice(up1, (size_t)amount); lws_tls_err_describe_clear(); } else { x509_store = X509_STORE_new(); if (!X509_STORE_add_cert(x509_store, client_CA)) { X509_STORE_free(x509_store); lwsl_err("Unable to load SSL Client certs from " "ssl_ca_mem -- client ssl isn't going to " "work\n"); lws_tls_err_describe_clear(); } else { /* it doesn't increment x509_store ref counter */ SSL_CTX_set_cert_store(vh->tls.ssl_client_ctx, x509_store); lwsl_info("loaded ssl_ca_mem\n"); } } if (client_CA) X509_free(client_CA); lws_free(up1); // lws_tls_client_vhost_extra_cert_mem(vh, ca_mem, ca_mem_len); } /* * callback allowing user code to load extra verification certs * helping the client to verify server identity */ /* support for client-side certificate authentication */ if (cert_filepath) { if (lws_tls_use_any_upgrade_check_extant(cert_filepath) != LWS_TLS_EXTANT_YES && (info->options & LWS_SERVER_OPTION_IGNORE_MISSING_CERT)) return 0; lwsl_notice("%s: doing cert filepath %s\n", __func__, cert_filepath); n = SSL_CTX_use_certificate_chain_file(vh->tls.ssl_client_ctx, cert_filepath); if (n < 1) { lwsl_err("problem %d getting cert '%s'\n", n, cert_filepath); lws_tls_err_describe_clear(); return 1; } lwsl_info("Loaded client cert %s\n", cert_filepath); } else if (cert_mem && cert_mem_len) { lws_filepos_t flen; uint8_t *p; if (lws_tls_alloc_pem_to_der_file(vh->context, NULL, cert_mem, cert_mem_len, &p, &flen)) { lwsl_err("%s: couldn't read cert file\n", __func__); return 1; } n = SSL_CTX_use_certificate_ASN1(vh->tls.ssl_client_ctx, #if defined(LWS_WITH_BORINGSSL) (size_t) #else (int) #endif flen, p); if (n < 1) { lwsl_err("%s: problem interpreting client cert\n", __func__); lws_tls_err_describe_clear(); } lws_free_set_NULL(p); if (n != 1) return 1; } if (private_key_filepath) { lwsl_info("%s: using private key filepath\n", __func__); lws_ssl_bind_passphrase(vh->tls.ssl_client_ctx, 1, info); /* set the private key from KeyFile */ if (SSL_CTX_use_PrivateKey_file(vh->tls.ssl_client_ctx, private_key_filepath, SSL_FILETYPE_PEM) != 1) { lwsl_err("use_PrivateKey_file '%s'\n", private_key_filepath); lws_tls_err_describe_clear(); return 1; } lwsl_info("Loaded client cert private key %s\n", private_key_filepath); /* verify private key */ if (!SSL_CTX_check_private_key(vh->tls.ssl_client_ctx)) { lwsl_err("Private SSL key doesn't match cert\n"); return 1; } } else if (key_mem && key_mem_len) { lws_filepos_t flen; uint8_t *p; if (lws_tls_alloc_pem_to_der_file(vh->context, NULL, key_mem, key_mem_len, &p, &flen)) { lwsl_err("%s: couldn't use mem cert\n", __func__); return 1; } n = SSL_CTX_use_PrivateKey_ASN1(EVP_PKEY_RSA, vh->tls.ssl_client_ctx, p, #if defined(LWS_WITH_BORINGSSL) (size_t) #else (long)(lws_intptr_t) #endif flen); if (n != 1) n = SSL_CTX_use_PrivateKey_ASN1(EVP_PKEY_EC, vh->tls.ssl_client_ctx, p, #if defined(LWS_WITH_BORINGSSL) (size_t) #else (long)(lws_intptr_t) #endif flen); lws_free_set_NULL(p); if (n != 1) { lwsl_err("%s: unable to use key_mem\n", __func__); return 1; } } return 0; } libwebsockets-4.3.5/lib/tls/openssl/openssl-server.c000066400000000000000000000666001476025525100225700ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" /* * Care: many openssl apis return 1 for success. These are translated to the * lws convention of 0 for success. */ extern int openssl_websocket_private_data_index, openssl_SSL_CTX_private_data_index; int lws_openssl_describe_cipher(struct lws *wsi); static int OpenSSL_verify_callback(int preverify_ok, X509_STORE_CTX *x509_ctx) { SSL *ssl; int n; struct lws *wsi; union lws_tls_cert_info_results ir; X509 *topcert = X509_STORE_CTX_get_current_cert(x509_ctx); ssl = X509_STORE_CTX_get_ex_data(x509_ctx, SSL_get_ex_data_X509_STORE_CTX_idx()); /* * !!! nasty openssl requires the index to come as a library-scope * static */ wsi = SSL_get_ex_data(ssl, openssl_websocket_private_data_index); n = lws_tls_openssl_cert_info(topcert, LWS_TLS_CERT_INFO_COMMON_NAME, &ir, sizeof(ir.ns.name)); if (!n) lwsl_info("%s: client cert CN '%s'\n", __func__, ir.ns.name); else lwsl_info("%s: couldn't get client cert CN\n", __func__); n = wsi->a.vhost->protocols[0].callback(wsi, LWS_CALLBACK_OPENSSL_PERFORM_CLIENT_CERT_VERIFICATION, x509_ctx, ssl, (unsigned int)preverify_ok); /* convert return code from 0 = OK to 1 = OK */ return !n; } int lws_tls_server_client_cert_verify_config(struct lws_vhost *vh) { int verify_options = SSL_VERIFY_PEER; /* as a server, are we requiring clients to identify themselves? */ if (!lws_check_opt(vh->options, LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT)) return 0; if (!lws_check_opt(vh->options, LWS_SERVER_OPTION_PEER_CERT_NOT_REQUIRED)) verify_options |= SSL_VERIFY_FAIL_IF_NO_PEER_CERT; SSL_CTX_set_session_id_context(vh->tls.ssl_ctx, (uint8_t *)vh->context, sizeof(void *)); /* absolutely require the client cert */ SSL_CTX_set_verify(vh->tls.ssl_ctx, verify_options, OpenSSL_verify_callback); return 0; } #if defined(SSL_TLSEXT_ERR_NOACK) && !defined(OPENSSL_NO_TLSEXT) static int lws_ssl_server_name_cb(SSL *ssl, int *ad, void *arg) { struct lws_context *context = (struct lws_context *)arg; struct lws_vhost *vhost, *vh; const char *servername; if (!ssl) return SSL_TLSEXT_ERR_NOACK; /* * We can only get ssl accepted connections by using a vhost's ssl_ctx * find out which listening one took us and only match vhosts on the * same port. */ vh = context->vhost_list; while (vh) { if (!vh->being_destroyed && vh->tls.ssl_ctx == SSL_get_SSL_CTX(ssl)) break; vh = vh->vhost_next; } if (!vh) { assert(vh); /* can't match the incoming vh? */ return SSL_TLSEXT_ERR_OK; } servername = SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name); if (!servername) { /* the client doesn't know what hostname it wants */ lwsl_info("SNI: Unknown ServerName\n"); return SSL_TLSEXT_ERR_OK; } vhost = lws_select_vhost(context, vh->listen_port, servername); if (!vhost) { lwsl_info("SNI: none: %s:%d\n", servername, vh->listen_port); return SSL_TLSEXT_ERR_OK; } lwsl_info("SNI: Found: %s:%d\n", servername, vh->listen_port); /* select the ssl ctx from the selected vhost for this conn */ SSL_set_SSL_CTX(ssl, vhost->tls.ssl_ctx); return SSL_TLSEXT_ERR_OK; } #endif /* * this may now get called after the vhost creation, when certs become * available. */ int lws_tls_server_certs_load(struct lws_vhost *vhost, struct lws *wsi, const char *cert, const char *private_key, const char *mem_cert, size_t mem_cert_len, const char *mem_privkey, size_t mem_privkey_len) { #if !defined(OPENSSL_NO_EC) && defined(LWS_HAVE_EC_KEY_new_by_curve_name) && \ ((OPENSSL_VERSION_NUMBER < 0x30000000l) || \ defined(LWS_SUPPRESS_DEPRECATED_API_WARNINGS)) const char *ecdh_curve = "prime256v1"; #if !defined(LWS_WITH_BORINGSSL) && defined(LWS_HAVE_SSL_EXTRA_CHAIN_CERTS) STACK_OF(X509) *extra_certs = NULL; #endif EC_KEY *ecdh, *EC_key = NULL; EVP_PKEY *pkey; X509 *x = NULL; int ecdh_nid; int KeyType; #endif unsigned long error; lws_filepos_t flen; uint8_t *p; #if OPENSSL_VERSION_NUMBER >= 0x10100000L int ret; #endif int n = (int)lws_tls_generic_cert_checks(vhost, cert, private_key), m; if (!cert && !private_key) n = LWS_TLS_EXTANT_ALTERNATIVE; if (n == LWS_TLS_EXTANT_NO && (!mem_cert || !mem_privkey)) return 0; if (n == LWS_TLS_EXTANT_NO) n = LWS_TLS_EXTANT_ALTERNATIVE; if (n == LWS_TLS_EXTANT_ALTERNATIVE && (!mem_cert || !mem_privkey)) return 1; /* no alternative */ if (n == LWS_TLS_EXTANT_ALTERNATIVE) { #if OPENSSL_VERSION_NUMBER >= 0x10100000L /* * Although we have prepared update certs, we no longer have * the rights to read our own cert + key we saved. * * If we were passed copies in memory buffers, use those * in favour of the filepaths we normally want. */ cert = NULL; private_key = NULL; } /* * use the multi-cert interface for backwards compatibility in the * both simple files case */ if (n != LWS_TLS_EXTANT_ALTERNATIVE && cert) { /* set the local certificate from CertFile */ m = SSL_CTX_use_certificate_chain_file(vhost->tls.ssl_ctx, cert); if (m != 1) { const char *s; error = ERR_get_error(); s = ERR_error_string( #if defined(LWS_WITH_BORINGSSL) (uint32_t) #endif error, (char *)vhost->context->pt[0].serv_buf); lwsl_err("problem getting cert '%s' %lu: %s\n", cert, error, s); return 1; } if (!private_key) { lwsl_err("ssl private key not set\n"); return 1; } else { /* set the private key from KeyFile */ if (SSL_CTX_use_PrivateKey_file(vhost->tls.ssl_ctx, private_key, SSL_FILETYPE_PEM) != 1) { const char *s; error = ERR_get_error(); s = ERR_error_string( #if defined(LWS_WITH_BORINGSSL) (uint32_t) #endif error, (char *)vhost->context->pt[0].serv_buf); lwsl_err("ssl problem getting key '%s' %lu: %s\n", private_key, error, s); return 1; } } return 0; } /* otherwise allow for DER or PEM, file or memory image */ if (lws_tls_alloc_pem_to_der_file(vhost->context, cert, mem_cert, mem_cert_len, &p, &flen)) { lwsl_err("%s: couldn't read cert file\n", __func__); return 1; } #if !defined(USE_WOLFSSL) ret = SSL_CTX_use_certificate_ASN1(vhost->tls.ssl_ctx, #if defined(LWS_WITH_BORINGSSL) (size_t) #else (int) #endif flen, p); #else ret = wolfSSL_CTX_use_certificate_buffer(vhost->tls.ssl_ctx, (uint8_t *)p, (int)flen, WOLFSSL_FILETYPE_ASN1); #endif lws_free_set_NULL(p); if (ret != 1) { lwsl_err("%s: Problem loading cert\n", __func__); return 1; } if (lws_tls_alloc_pem_to_der_file(vhost->context, private_key, mem_privkey, mem_privkey_len, &p, &flen)) { lwsl_notice("unable to convert memory privkey\n"); return 1; } #if !defined(USE_WOLFSSL) ret = SSL_CTX_use_PrivateKey_ASN1(EVP_PKEY_RSA, vhost->tls.ssl_ctx, p, #if defined(LWS_WITH_BORINGSSL) (size_t) #else (long)(long long) #endif flen); if (ret != 1) { ret = SSL_CTX_use_PrivateKey_ASN1(EVP_PKEY_EC, vhost->tls.ssl_ctx, p, #if defined(LWS_WITH_BORINGSSL) (size_t) #else (long)(long long) #endif flen); } #else ret = wolfSSL_CTX_use_PrivateKey_buffer(vhost->tls.ssl_ctx, p, (long) flen, WOLFSSL_FILETYPE_ASN1); #endif lws_free_set_NULL(p); if (ret != 1) { lwsl_notice("unable to use memory privkey\n"); return 1; } #else /* * Although we have prepared update certs, we no longer have * the rights to read our own cert + key we saved. * * If we were passed copies in memory buffers, use those * instead. * * The passed memory-buffer cert image is in DER, and the * memory-buffer private key image is PEM. */ #ifndef USE_WOLFSSL if (lws_tls_alloc_pem_to_der_file(vhost->context, cert, mem_cert, mem_cert_len, &p, &flen)) { lwsl_err("%s: couldn't convert pem to der\n", __func__); return 1; } if (SSL_CTX_use_certificate_ASN1(vhost->tls.ssl_ctx, (int)flen, (uint8_t *)p) != 1) { #else if (wolfSSL_CTX_use_certificate_buffer(vhost->tls.ssl_ctx, (uint8_t *)mem_cert, (int)mem_cert_len, WOLFSSL_FILETYPE_ASN1) != 1) { #endif lwsl_err("Problem loading update cert\n"); return 1; } if (lws_tls_alloc_pem_to_der_file(vhost->context, NULL, mem_privkey, mem_privkey_len, &p, &flen)) { lwsl_notice("unable to convert memory privkey\n"); return 1; } #ifndef USE_WOLFSSL if (SSL_CTX_use_PrivateKey_ASN1(EVP_PKEY_RSA, vhost->tls.ssl_ctx, p, (long)(long long)flen) != 1) { #else if (wolfSSL_CTX_use_PrivateKey_buffer(vhost->tls.ssl_ctx, p, (long)flen, WOLFSSL_FILETYPE_ASN1) != 1) { #endif lwsl_notice("unable to use memory privkey\n"); return 1; } goto check_key; } /* set the local certificate from CertFile */ m = SSL_CTX_use_certificate_chain_file(vhost->tls.ssl_ctx, cert); if (m != 1) { error = ERR_get_error(); lwsl_err("problem getting cert '%s' %lu: %s\n", cert, error, ERR_error_string(error, (char *)vhost->context->pt[0].serv_buf)); return 1; } if (n == LWS_TLS_EXTANT_ALTERNATIVE || !private_key) { lwsl_err("ssl private key not set\n"); return 1; } else { /* set the private key from KeyFile */ if (SSL_CTX_use_PrivateKey_file(vhost->tls.ssl_ctx, private_key, SSL_FILETYPE_PEM) != 1) { error = ERR_get_error(); lwsl_err("ssl problem getting key '%s' %lu: %s\n", private_key, error, ERR_error_string(error, (char *)vhost->context->pt[0].serv_buf)); return 1; } } check_key: #endif /* verify private key */ if (!SSL_CTX_check_private_key(vhost->tls.ssl_ctx)) { lwsl_err("Private SSL key doesn't match cert\n"); return 1; } #if !defined(OPENSSL_NO_EC) && defined(LWS_HAVE_EC_KEY_new_by_curve_name) && \ ((OPENSSL_VERSION_NUMBER < 0x30000000l) || \ defined(LWS_SUPPRESS_DEPRECATED_API_WARNINGS)) if (vhost->tls.ecdh_curve[0]) ecdh_curve = vhost->tls.ecdh_curve; ecdh_nid = OBJ_sn2nid(ecdh_curve); if (NID_undef == ecdh_nid) { lwsl_err("SSL: Unknown curve name '%s'", ecdh_curve); return 1; } ecdh = EC_KEY_new_by_curve_name(ecdh_nid); if (NULL == ecdh) { lwsl_err("SSL: Unable to create curve '%s'", ecdh_curve); return 1; } SSL_CTX_set_tmp_ecdh(vhost->tls.ssl_ctx, ecdh); EC_KEY_free(ecdh); SSL_CTX_set_options(vhost->tls.ssl_ctx, SSL_OP_SINGLE_ECDH_USE); lwsl_notice(" SSL ECDH curve '%s'\n", ecdh_curve); if (lws_check_opt(vhost->context->options, LWS_SERVER_OPTION_SSL_ECDH)) lwsl_notice(" Using ECDH certificate support\n"); /* Get X509 certificate from ssl context */ #if !defined(LWS_WITH_BORINGSSL) && !defined(USE_WOLFSSL) #if !defined(LWS_HAVE_SSL_EXTRA_CHAIN_CERTS) x = sk_X509_value(vhost->tls.ssl_ctx->extra_certs, 0); #else SSL_CTX_get_extra_chain_certs_only(vhost->tls.ssl_ctx, &extra_certs); if (extra_certs) x = sk_X509_value(extra_certs, 0); else lwsl_info("%s: no extra certs\n", __func__); #endif if (!x) { //lwsl_err("%s: x is NULL\n", __func__); goto post_ecdh; } #else return 0; #endif /* !boringssl */ /* Get the public key from certificate */ pkey = X509_get_pubkey(x); if (!pkey) { lwsl_err("%s: pkey is NULL\n", __func__); return 1; } /* Get the key type */ KeyType = EVP_PKEY_type(EVP_PKEY_id(pkey)); if (EVP_PKEY_EC != KeyType) { lwsl_notice("Key type is not EC\n"); return 0; } /* Get the key */ EC_key = EVP_PKEY_get1_EC_KEY(pkey); /* Set ECDH parameter */ if (!EC_key) { lwsl_err("%s: ECDH key is NULL \n", __func__); return 1; } SSL_CTX_set_tmp_ecdh(vhost->tls.ssl_ctx, EC_key); EC_KEY_free(EC_key); #if !defined(OPENSSL_NO_EC) && !defined(LWS_WITH_BORINGSSL) && !defined(USE_WOLFSSL) post_ecdh: #endif vhost->tls.skipped_certs = 0; #else lwsl_notice(" OpenSSL doesn't support ECDH\n"); #endif return 0; } int lws_tls_server_vhost_backend_init(const struct lws_context_creation_info *info, struct lws_vhost *vhost, struct lws *wsi) { unsigned long error; SSL_METHOD *method = (SSL_METHOD *)SSLv23_server_method(); if (!method) { const char *s; error = ERR_get_error(); s = ERR_error_string( #if defined(LWS_WITH_BORINGSSL) (uint32_t) #endif error, (char *)vhost->context->pt[0].serv_buf); lwsl_err("problem creating ssl method %lu: %s\n", error, s); return 1; } vhost->tls.ssl_ctx = SSL_CTX_new(method); /* create context */ if (!vhost->tls.ssl_ctx) { const char *s; error = ERR_get_error(); s = ERR_error_string( #if defined(LWS_WITH_BORINGSSL) (uint32_t) #endif error, (char *)vhost->context->pt[0].serv_buf); lwsl_err("problem creating ssl context %lu: %s\n", error, s); return 1; } SSL_CTX_set_ex_data(vhost->tls.ssl_ctx, openssl_SSL_CTX_private_data_index, (char *)vhost->context); /* Disable SSLv2 and SSLv3 */ SSL_CTX_set_options(vhost->tls.ssl_ctx, SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3); #ifdef SSL_OP_NO_COMPRESSION SSL_CTX_set_options(vhost->tls.ssl_ctx, SSL_OP_NO_COMPRESSION); #endif SSL_CTX_set_options(vhost->tls.ssl_ctx, SSL_OP_SINGLE_DH_USE); SSL_CTX_set_options(vhost->tls.ssl_ctx, SSL_OP_CIPHER_SERVER_PREFERENCE); if (info->ssl_cipher_list) SSL_CTX_set_cipher_list(vhost->tls.ssl_ctx, info->ssl_cipher_list); #if defined(LWS_HAVE_SSL_CTX_set_ciphersuites) if (info->tls1_3_plus_cipher_list) SSL_CTX_set_ciphersuites(vhost->tls.ssl_ctx, info->tls1_3_plus_cipher_list); #endif #if !defined(OPENSSL_NO_TLSEXT) SSL_CTX_set_tlsext_servername_callback(vhost->tls.ssl_ctx, lws_ssl_server_name_cb); SSL_CTX_set_tlsext_servername_arg(vhost->tls.ssl_ctx, vhost->context); #endif if (info->ssl_ca_filepath && #if defined(LWS_HAVE_SSL_CTX_load_verify_file) !SSL_CTX_load_verify_file(vhost->tls.ssl_ctx, info->ssl_ca_filepath)) { #else !SSL_CTX_load_verify_locations(vhost->tls.ssl_ctx, info->ssl_ca_filepath, NULL)) { #endif lwsl_err("%s: SSL_CTX_load_verify_locations unhappy\n", __func__); } #if defined(USE_WOLFSSL) long #else #if defined(LWS_WITH_BORINGSSL) uint32_t #else #if (OPENSSL_VERSION_NUMBER >= 0x10003000l) && !defined(LIBRESSL_VERSION_NUMBER) /* not documented by openssl */ unsigned long #else long #endif #endif #endif ssl_options_set_value = #if defined(USE_WOLFSSL) (long) #else #if defined(LWS_WITH_BORINGSSL) (uint32_t) #else #if (OPENSSL_VERSION_NUMBER >= 0x10003000l) && !defined(LIBRESSL_VERSION_NUMBER) /* not documented by openssl */ (unsigned long) #else (long) #endif #endif #endif info->ssl_options_set; if (info->ssl_options_set) SSL_CTX_set_options(vhost->tls.ssl_ctx, ssl_options_set_value); #if (OPENSSL_VERSION_NUMBER >= 0x009080df) && !defined(USE_WOLFSSL) /* SSL_clear_options introduced in 0.9.8m */ #if defined(LWS_WITH_BORINGSSL) uint32_t #else #if (OPENSSL_VERSION_NUMBER >= 0x10003000l) && !defined(LIBRESSL_VERSION_NUMBER)/* not documented by openssl */ unsigned long #else long #endif #endif ssl_options_clear_value = #if defined(LWS_WITH_BORINGSSL) (uint32_t) #else #if (OPENSSL_VERSION_NUMBER >= 0x10003000l) && !defined(LIBRESSL_VERSION_NUMBER)/* not documented by openssl */ (unsigned long) #else (long) #endif #endif info->ssl_options_clear; if (info->ssl_options_clear) { SSL_CTX_clear_options(vhost->tls.ssl_ctx, ssl_options_clear_value); } lwsl_info(" SSL options 0x%lX\n", (unsigned long)SSL_CTX_get_options(vhost->tls.ssl_ctx)); #endif if (!vhost->tls.use_ssl || (!info->ssl_cert_filepath && !info->server_ssl_cert_mem)) return 0; lws_ssl_bind_passphrase(vhost->tls.ssl_ctx, 0, info); return lws_tls_server_certs_load(vhost, wsi, info->ssl_cert_filepath, info->ssl_private_key_filepath, info->server_ssl_cert_mem, info->server_ssl_cert_mem_len, info->server_ssl_private_key_mem, info->server_ssl_private_key_mem_len); } int lws_tls_server_new_nonblocking(struct lws *wsi, lws_sockfd_type accept_fd) { #if !defined(USE_WOLFSSL) BIO *bio; #endif errno = 0; ERR_clear_error(); wsi->tls.ssl = SSL_new(wsi->a.vhost->tls.ssl_ctx); if (wsi->tls.ssl == NULL) { lwsl_err("SSL_new failed: %d (errno %d)\n", lws_ssl_get_error(wsi, 0), errno); lws_tls_err_describe_clear(); return 1; } SSL_set_ex_data(wsi->tls.ssl, openssl_websocket_private_data_index, wsi); SSL_set_fd(wsi->tls.ssl, (int)(lws_intptr_t)accept_fd); #ifdef USE_WOLFSSL #ifdef USE_OLD_CYASSL CyaSSL_set_using_nonblock(wsi->tls.ssl, 1); #else wolfSSL_set_using_nonblock(wsi->tls.ssl, 1); #endif #else SSL_set_mode(wsi->tls.ssl, SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER | SSL_MODE_RELEASE_BUFFERS); bio = SSL_get_rbio(wsi->tls.ssl); if (bio) BIO_set_nbio(bio, 1); /* nonblocking */ else lwsl_notice("NULL rbio\n"); bio = SSL_get_wbio(wsi->tls.ssl); if (bio) BIO_set_nbio(bio, 1); /* nonblocking */ else lwsl_notice("NULL rbio\n"); #endif #if defined (LWS_HAVE_SSL_SET_INFO_CALLBACK) if (wsi->a.vhost->tls.ssl_info_event_mask) SSL_set_info_callback(wsi->tls.ssl, lws_ssl_info_callback); #endif return 0; } enum lws_ssl_capable_status lws_tls_server_abort_connection(struct lws *wsi) { if (wsi->tls.use_ssl) SSL_shutdown(wsi->tls.ssl); SSL_free(wsi->tls.ssl); return LWS_SSL_CAPABLE_DONE; } enum lws_ssl_capable_status lws_tls_server_accept(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; union lws_tls_cert_info_results ir; int m, n; errno = 0; ERR_clear_error(); n = SSL_accept(wsi->tls.ssl); wsi->skip_fallback = 1; if (n == 1) { n = lws_tls_peer_cert_info(wsi, LWS_TLS_CERT_INFO_COMMON_NAME, &ir, sizeof(ir.ns.name)); if (!n) lwsl_notice("%s: client cert CN '%s'\n", __func__, ir.ns.name); else lwsl_info("%s: no client cert CN\n", __func__); lws_openssl_describe_cipher(wsi); if (SSL_pending(wsi->tls.ssl) && lws_dll2_is_detached(&wsi->tls.dll_pending_tls)) lws_dll2_add_head(&wsi->tls.dll_pending_tls, &pt->tls.dll_pending_tls_owner); return LWS_SSL_CAPABLE_DONE; } m = lws_ssl_get_error(wsi, n); lws_tls_err_describe_clear(); if (m == SSL_ERROR_SYSCALL || m == SSL_ERROR_SSL) return LWS_SSL_CAPABLE_ERROR; if (m == SSL_ERROR_WANT_READ || (m != SSL_ERROR_ZERO_RETURN && SSL_want_read(wsi->tls.ssl))) { if (lws_change_pollfd(wsi, 0, LWS_POLLIN)) { lwsl_info("%s: WANT_READ change_pollfd failed\n", __func__); return LWS_SSL_CAPABLE_ERROR; } lwsl_info("SSL_ERROR_WANT_READ: m %d\n", m); return LWS_SSL_CAPABLE_MORE_SERVICE_READ; } if (m == SSL_ERROR_WANT_WRITE || SSL_want_write(wsi->tls.ssl)) { lwsl_debug("%s: WANT_WRITE\n", __func__); if (lws_change_pollfd(wsi, 0, LWS_POLLOUT)) { lwsl_info("%s: WANT_WRITE change_pollfd failed\n", __func__); return LWS_SSL_CAPABLE_ERROR; } return LWS_SSL_CAPABLE_MORE_SERVICE_WRITE; } return LWS_SSL_CAPABLE_ERROR; } #if defined(LWS_WITH_ACME) static int lws_tls_openssl_rsa_new_key(RSA **rsa, int bits) { BIGNUM *bn = BN_new(); int n; if (!bn) return 1; if (BN_set_word(bn, RSA_F4) != 1) { BN_free(bn); return 1; } *rsa = RSA_new(); if (!*rsa) { BN_free(bn); return 1; } n = RSA_generate_key_ex(*rsa, bits, bn, NULL); BN_free(bn); if (n == 1) return 0; RSA_free(*rsa); *rsa = NULL; return 1; } struct lws_tls_ss_pieces { X509 *x509; EVP_PKEY *pkey; RSA *rsa; }; int lws_tls_acme_sni_cert_create(struct lws_vhost *vhost, const char *san_a, const char *san_b) { GENERAL_NAMES *gens = sk_GENERAL_NAME_new_null(); GENERAL_NAME *gen = NULL; ASN1_IA5STRING *ia5 = NULL; X509_NAME *name; if (!gens) return 1; vhost->tls.ss = lws_zalloc(sizeof(*vhost->tls.ss), "sni cert"); if (!vhost->tls.ss) { GENERAL_NAMES_free(gens); return 1; } vhost->tls.ss->x509 = X509_new(); if (!vhost->tls.ss->x509) goto bail; ASN1_INTEGER_set(X509_get_serialNumber(vhost->tls.ss->x509), 1); X509_gmtime_adj(X509_get_notBefore(vhost->tls.ss->x509), 0); X509_gmtime_adj(X509_get_notAfter(vhost->tls.ss->x509), 3600); vhost->tls.ss->pkey = EVP_PKEY_new(); if (!vhost->tls.ss->pkey) goto bail0; if (lws_tls_openssl_rsa_new_key(&vhost->tls.ss->rsa, 4096)) goto bail1; if (!EVP_PKEY_assign_RSA(vhost->tls.ss->pkey, vhost->tls.ss->rsa)) goto bail2; X509_set_pubkey(vhost->tls.ss->x509, vhost->tls.ss->pkey); name = X509_get_subject_name(vhost->tls.ss->x509); X509_NAME_add_entry_by_txt(name, "C", MBSTRING_ASC, (unsigned char *)"GB", -1, -1, 0); X509_NAME_add_entry_by_txt(name, "O", MBSTRING_ASC, (unsigned char *)"somecompany", -1, -1, 0); if (X509_NAME_add_entry_by_txt(name, "CN", MBSTRING_UTF8, (unsigned char *)"temp.acme.invalid", -1, -1, 0) != 1) { lwsl_notice("failed to add CN\n"); goto bail2; } X509_set_issuer_name(vhost->tls.ss->x509, name); /* add the SAN payloads */ gen = GENERAL_NAME_new(); ia5 = ASN1_IA5STRING_new(); if (!ASN1_STRING_set(ia5, san_a, -1)) { lwsl_notice("failed to set ia5\n"); GENERAL_NAME_free(gen); goto bail2; } GENERAL_NAME_set0_value(gen, GEN_DNS, ia5); sk_GENERAL_NAME_push(gens, gen); if (X509_add1_ext_i2d(vhost->tls.ss->x509, NID_subject_alt_name, gens, 0, X509V3_ADD_APPEND) != 1) goto bail2; GENERAL_NAMES_free(gens); if (san_b && san_b[0]) { gens = sk_GENERAL_NAME_new_null(); gen = GENERAL_NAME_new(); ia5 = ASN1_IA5STRING_new(); if (!ASN1_STRING_set(ia5, san_a, -1)) { lwsl_notice("failed to set ia5\n"); GENERAL_NAME_free(gen); goto bail2; } GENERAL_NAME_set0_value(gen, GEN_DNS, ia5); sk_GENERAL_NAME_push(gens, gen); if (X509_add1_ext_i2d(vhost->tls.ss->x509, NID_subject_alt_name, gens, 0, X509V3_ADD_APPEND) != 1) goto bail2; GENERAL_NAMES_free(gens); } /* sign it with our private key */ if (!X509_sign(vhost->tls.ss->x509, vhost->tls.ss->pkey, EVP_sha256())) goto bail2; #if 0 {/* useful to take a sample of a working cert for mbedtls to crib */ FILE *fp = fopen("/tmp/acme-temp-cert", "w+"); i2d_X509_fp(fp, vhost->tls.ss->x509); fclose(fp); } #endif /* tell the vhost to use our crafted certificate */ SSL_CTX_use_certificate(vhost->tls.ssl_ctx, vhost->tls.ss->x509); /* and to use our generated private key */ SSL_CTX_use_PrivateKey(vhost->tls.ssl_ctx, vhost->tls.ss->pkey); return 0; bail2: RSA_free(vhost->tls.ss->rsa); bail1: EVP_PKEY_free(vhost->tls.ss->pkey); bail0: X509_free(vhost->tls.ss->x509); bail: lws_free(vhost->tls.ss); GENERAL_NAMES_free(gens); return 1; } void lws_tls_acme_sni_cert_destroy(struct lws_vhost *vhost) { if (!vhost->tls.ss) return; EVP_PKEY_free(vhost->tls.ss->pkey); X509_free(vhost->tls.ss->x509); lws_free_set_NULL(vhost->tls.ss); } static int lws_tls_openssl_add_nid(X509_NAME *name, int nid, const char *value) { X509_NAME_ENTRY *e; int n; if (!value || value[0] == '\0') value = "none"; e = X509_NAME_ENTRY_create_by_NID(NULL, nid, MBSTRING_ASC, (unsigned char *)value, -1); if (!e) return 1; n = X509_NAME_add_entry(name, e, -1, 0); X509_NAME_ENTRY_free(e); return n != 1; } static int nid_list[] = { NID_countryName, /* LWS_TLS_REQ_ELEMENT_COUNTRY */ NID_stateOrProvinceName, /* LWS_TLS_REQ_ELEMENT_STATE */ NID_localityName, /* LWS_TLS_REQ_ELEMENT_LOCALITY */ NID_organizationName, /* LWS_TLS_REQ_ELEMENT_ORGANIZATION */ NID_commonName, /* LWS_TLS_REQ_ELEMENT_COMMON_NAME */ NID_subject_alt_name, /* LWS_TLS_REQ_ELEMENT_SUBJECT_ALT_NAME */ NID_pkcs9_emailAddress, /* LWS_TLS_REQ_ELEMENT_EMAIL */ }; int lws_tls_acme_sni_csr_create(struct lws_context *context, const char *elements[], uint8_t *csr, size_t csr_len, char **privkey_pem, size_t *privkey_len) { uint8_t *csr_in = csr; RSA *rsakey; X509_REQ *req; X509_NAME *subj; EVP_PKEY *pkey; char *p, *end; BIO *bio; long bio_len; int n, ret = -1; if (lws_tls_openssl_rsa_new_key(&rsakey, 4096)) return -1; pkey = EVP_PKEY_new(); if (!pkey) goto bail0; if (!EVP_PKEY_set1_RSA(pkey, rsakey)) goto bail1; req = X509_REQ_new(); if (!req) goto bail1; X509_REQ_set_pubkey(req, pkey); subj = X509_NAME_new(); if (!subj) goto bail2; for (n = 0; n < LWS_TLS_REQ_ELEMENT_COUNT; n++) if (elements[n] && lws_tls_openssl_add_nid(subj, nid_list[n], elements[n])) { lwsl_notice("%s: failed to add element %d\n", __func__, n); goto bail3; } if (X509_REQ_set_subject_name(req, subj) != 1) goto bail3; if (elements[LWS_TLS_REQ_ELEMENT_SUBJECT_ALT_NAME]) { STACK_OF(X509_EXTENSION) *exts; X509_EXTENSION *ext; char san[256]; exts = sk_X509_EXTENSION_new_null(); if (!exts) goto bail3; lws_snprintf(san, sizeof(san), "DNS:%s,DNS:%s", elements[LWS_TLS_REQ_ELEMENT_COMMON_NAME], elements[LWS_TLS_REQ_ELEMENT_SUBJECT_ALT_NAME]); ext = X509V3_EXT_conf_nid(NULL, NULL, NID_subject_alt_name, san); if (!ext) { sk_X509_EXTENSION_pop_free(exts, X509_EXTENSION_free); goto bail3; } sk_X509_EXTENSION_push(exts, ext); if (!X509_REQ_add_extensions(req, exts)) { sk_X509_EXTENSION_pop_free(exts, X509_EXTENSION_free); goto bail3; } sk_X509_EXTENSION_pop_free(exts, X509_EXTENSION_free); } if (!X509_REQ_sign(req, pkey, EVP_sha256())) goto bail3; /* * issue the CSR as PEM to a BIO, and translate to b64urlenc without * headers, trailers, or whitespace */ bio = BIO_new(BIO_s_mem()); if (!bio) goto bail3; if (PEM_write_bio_X509_REQ(bio, req) != 1) { BIO_free(bio); goto bail3; } bio_len = BIO_get_mem_data(bio, &p); end = p + bio_len; /* strip the header line */ while (p < end && *p != '\n') p++; while (p < end && csr_len) { if (*p == '\n') { p++; continue; } if (*p == '-') break; if (*p == '+') *csr++ = '-'; else if (*p == '/') *csr++ = '_'; else *csr++ = (uint8_t)*p; p++; csr_len--; } BIO_free(bio); if (!csr_len) { lwsl_notice("%s: need %ld for CSR\n", __func__, bio_len); goto bail3; } /* * Also return the private key as a PEM in memory * (platform may not have a filesystem) */ bio = BIO_new(BIO_s_mem()); if (!bio) goto bail3; if (PEM_write_bio_PrivateKey(bio, pkey, NULL, NULL, 0, 0, NULL) != 1) { BIO_free(bio); goto bail3; } bio_len = BIO_get_mem_data(bio, &p); *privkey_pem = malloc((unsigned long)bio_len); /* malloc so user code can own / free */ *privkey_len = (size_t)bio_len; if (!*privkey_pem) { lwsl_notice("%s: need %ld for private key\n", __func__, bio_len); BIO_free(bio); goto bail3; } memcpy(*privkey_pem, p, (unsigned int)(int)(long long)bio_len); BIO_free(bio); ret = lws_ptr_diff(csr, csr_in); bail3: X509_NAME_free(subj); bail2: X509_REQ_free(req); bail1: EVP_PKEY_free(pkey); bail0: RSA_free(rsakey); return ret; } #endif libwebsockets-4.3.5/lib/tls/openssl/openssl-session.c000066400000000000000000000302471476025525100227430ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2022 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" typedef struct lws_tls_session_cache_openssl { lws_dll2_t list; SSL_SESSION *session; lws_sorted_usec_list_t sul_ttl; /* name is overallocated here */ } lws_tls_sco_t; #define tlssess_loglevel LLL_INFO #if (_LWS_ENABLED_LOGS & tlssess_loglevel) #define lwsl_tlssess(...) _lws_log(tlssess_loglevel, __VA_ARGS__) #else #define lwsl_tlssess(...) #endif static void __lws_tls_session_destroy(lws_tls_sco_t *ts) { lwsl_tlssess("%s: %s (%u)\n", __func__, (const char *)&ts[1], ts->list.owner->count - 1); lws_sul_cancel(&ts->sul_ttl); SSL_SESSION_free(ts->session); lws_dll2_remove(&ts->list); /* vh lock */ lws_free(ts); } static lws_tls_sco_t * __lws_tls_session_lookup_by_name(struct lws_vhost *vh, const char *name) { lws_start_foreach_dll(struct lws_dll2 *, p, lws_dll2_get_head(&vh->tls_sessions)) { lws_tls_sco_t *ts = lws_container_of(p, lws_tls_sco_t, list); const char *ts_name = (const char *)&ts[1]; if (!strcmp(name, ts_name)) return ts; } lws_end_foreach_dll(p); return NULL; } /* * If possible, reuse an existing, cached session */ void lws_tls_reuse_session(struct lws *wsi) { char tag[LWS_SESSION_TAG_LEN]; lws_tls_sco_t *ts; if (!wsi->a.vhost || wsi->a.vhost->options & LWS_SERVER_OPTION_DISABLE_TLS_SESSION_CACHE) return; lws_context_lock(wsi->a.context, __func__); /* -------------- cx { */ lws_vhost_lock(wsi->a.vhost); /* -------------- vh { */ if (lws_tls_session_tag_from_wsi(wsi, tag, sizeof(tag))) goto bail; ts = __lws_tls_session_lookup_by_name(wsi->a.vhost, tag); if (!ts) { lwsl_tlssess("%s: no existing session for %s\n", __func__, tag); goto bail; } lwsl_tlssess("%s: %s\n", __func__, (const char *)&ts[1]); if (!SSL_set_session(wsi->tls.ssl, ts->session)) { lwsl_err("%s: session not set for %s\n", __func__, tag); goto bail; } #if !defined(USE_WOLFSSL) /* extend session lifetime */ SSL_SESSION_set_time(ts->session, #if defined(OPENSSL_IS_BORINGSSL) (unsigned long) #else (long) #endif time(NULL)); #endif /* keep our session list sorted in lru -> mru order */ lws_dll2_remove(&ts->list); lws_dll2_add_tail(&ts->list, &wsi->a.vhost->tls_sessions); bail: lws_vhost_unlock(wsi->a.vhost); /* } vh -------------- */ lws_context_unlock(wsi->a.context); /* } cx -------------- */ } int lws_tls_session_is_reused(struct lws *wsi) { #if defined(LWS_WITH_CLIENT) struct lws *nwsi = lws_get_network_wsi(wsi); if (!nwsi || !nwsi->tls.ssl) return 0; return (int)SSL_session_reused(nwsi->tls.ssl); #else return 0; #endif } static int lws_tls_session_destroy_dll(struct lws_dll2 *d, void *user) { lws_tls_sco_t *ts = lws_container_of(d, lws_tls_sco_t, list); __lws_tls_session_destroy(ts); return 0; } void lws_tls_session_vh_destroy(struct lws_vhost *vh) { lws_dll2_foreach_safe(&vh->tls_sessions, NULL, lws_tls_session_destroy_dll); } static void lws_tls_session_expiry_cb(lws_sorted_usec_list_t *sul) { lws_tls_sco_t *ts = lws_container_of(sul, lws_tls_sco_t, sul_ttl); struct lws_vhost *vh = lws_container_of(ts->list.owner, struct lws_vhost, tls_sessions); lws_context_lock(vh->context, __func__); /* -------------- cx { */ lws_vhost_lock(vh); /* -------------- vh { */ __lws_tls_session_destroy(ts); lws_vhost_unlock(vh); /* } vh -------------- */ lws_context_unlock(vh->context); /* } cx -------------- */ } static lws_tls_sco_t * lws_tls_session_add_entry(struct lws_vhost *vh, const char *tag) { lws_tls_sco_t *ts; size_t nl = strlen(tag); if (vh->tls_sessions.count == (vh->tls_session_cache_max ? vh->tls_session_cache_max : 10)) { /* * We have reached the vhost's session cache limit, * prune the LRU / head */ ts = lws_container_of(vh->tls_sessions.head, lws_tls_sco_t, list); if (ts) { /* centos 7 ... */ lwsl_tlssess("%s: pruning oldest session\n", __func__); lws_vhost_lock(vh); /* -------------- vh { */ __lws_tls_session_destroy(ts); lws_vhost_unlock(vh); /* } vh -------------- */ } } ts = lws_malloc(sizeof(*ts) + nl + 1, __func__); if (!ts) return NULL; memset(ts, 0, sizeof(*ts)); memcpy(&ts[1], tag, nl + 1); lws_dll2_add_tail(&ts->list, &vh->tls_sessions); return ts; } static int lws_tls_session_new_cb(SSL *ssl, SSL_SESSION *sess) { struct lws *wsi = (struct lws *)SSL_get_ex_data(ssl, openssl_websocket_private_data_index); char tag[LWS_SESSION_TAG_LEN]; struct lws_vhost *vh; lws_tls_sco_t *ts; long ttl; #if (_LWS_ENABLED_LOGS & tlssess_loglevel) const char *disposition = "reuse"; #endif if (!wsi) { lwsl_warn("%s: can't get wsi from ssl privdata\n", __func__); return 0; } vh = wsi->a.vhost; if (vh->options & LWS_SERVER_OPTION_DISABLE_TLS_SESSION_CACHE) return 0; if (lws_tls_session_tag_from_wsi(wsi, tag, sizeof(tag))) return 0; /* api return is long, although we only support setting * default (300s) or max uint32_t */ ttl = SSL_SESSION_get_timeout(sess); lws_context_lock(vh->context, __func__); /* -------------- cx { */ lws_vhost_lock(vh); /* -------------- vh { */ ts = __lws_tls_session_lookup_by_name(vh, tag); if (!ts) { ts = lws_tls_session_add_entry(vh, tag); if (!ts) goto bail; lws_sul_schedule(wsi->a.context, wsi->tsi, &ts->sul_ttl, lws_tls_session_expiry_cb, ttl * LWS_US_PER_SEC); #if (_LWS_ENABLED_LOGS & tlssess_loglevel) disposition = "new"; #endif /* * We don't have to do a SSL_SESSION_up_ref() here, because * we will return from this callback indicating that we kept the * ref */ } else { /* * Give up our refcount on the session we are about to replace * with a newer one */ SSL_SESSION_free(ts->session); /* keep our session list sorted in lru -> mru order */ lws_dll2_remove(&ts->list); lws_dll2_add_tail(&ts->list, &vh->tls_sessions); } ts->session = sess; lws_vhost_unlock(vh); /* } vh -------------- */ lws_context_unlock(vh->context); /* } cx -------------- */ lwsl_tlssess("%s: %p: %s: %s %s, ttl %lds (%s:%u)\n", __func__, sess, wsi->lc.gutag, disposition, tag, ttl, vh->name, vh->tls_sessions.count); /* * indicate we will hold on to the SSL_SESSION reference, and take * responsibility to call SSL_SESSION_free() on it ourselves */ return 1; bail: lws_vhost_unlock(vh); /* } vh -------------- */ lws_context_unlock(vh->context); /* } cx -------------- */ return 0; } #if defined(LWS_TLS_SYNTHESIZE_CB) /* * On openssl, there is an async cb coming when the server issues the session * information on the link, so we can pick it up and update the cache at the * right time. * * On mbedtls and some version at least of borning ssl, this cb is either not * part of the tls library apis or fails to arrive. * * This synthetic cb is called instead for those build cases, scheduled for * +500ms after the tls negotiation completed. */ void lws_sess_cache_synth_cb(lws_sorted_usec_list_t *sul) { struct lws_lws_tls *tls = lws_container_of(sul, struct lws_lws_tls, sul_cb_synth); struct lws *wsi = lws_container_of(tls, struct lws, tls); SSL_SESSION *sess; if (lws_tls_session_is_reused(wsi)) return; sess = SSL_get1_session(tls->ssl); if (!sess) return; if (!SSL_SESSION_is_resumable(sess) || /* not worth caching, or... */ !lws_tls_session_new_cb(tls->ssl, sess)) { /* ...cb didn't keep it */ /* * For now the policy if no session message after the wait, * is just let it be. Typically the session info is sent * early. */ SSL_SESSION_free(sess); } } #endif void lws_tls_session_cache(struct lws_vhost *vh, uint32_t ttl) { long cmode; if (vh->options & LWS_SERVER_OPTION_DISABLE_TLS_SESSION_CACHE) return; cmode = SSL_CTX_get_session_cache_mode(vh->tls.ssl_client_ctx); SSL_CTX_set_session_cache_mode(vh->tls.ssl_client_ctx, (int)(cmode | SSL_SESS_CACHE_CLIENT)); SSL_CTX_sess_set_new_cb(vh->tls.ssl_client_ctx, lws_tls_session_new_cb); if (!ttl) return; #if defined(OPENSSL_IS_BORINGSSL) SSL_CTX_set_timeout(vh->tls.ssl_client_ctx, ttl); #else SSL_CTX_set_timeout(vh->tls.ssl_client_ctx, (long)ttl); #endif } int lws_tls_session_dump_save(struct lws_vhost *vh, const char *host, uint16_t port, lws_tls_sess_cb_t cb_save, void *opq) { struct lws_tls_session_dump d; lws_tls_sco_t *ts; int ret = 1, bl; void *v; if (vh->options & LWS_SERVER_OPTION_DISABLE_TLS_SESSION_CACHE) return 1; lws_tls_session_tag_discrete(vh->name, host, port, d.tag, sizeof(d.tag)); lws_context_lock(vh->context, __func__); /* -------------- cx { */ lws_vhost_lock(vh); /* -------------- vh { */ ts = __lws_tls_session_lookup_by_name(vh, d.tag); if (!ts) goto bail; /* We have a ref on the session, exit via bail to clean it... */ bl = i2d_SSL_SESSION(ts->session, NULL); if (!bl) goto bail; d.blob_len = (size_t)bl; v = d.blob = lws_malloc(d.blob_len, __func__); if (d.blob) { /* this advances d.blob by the blob size ;-) */ i2d_SSL_SESSION(ts->session, (uint8_t **)&d.blob); d.opaque = opq; d.blob = v; if (cb_save(vh->context, &d)) lwsl_notice("%s: save failed\n", __func__); else ret = 0; lws_free(v); } bail: lws_vhost_unlock(vh); /* } vh -------------- */ lws_context_unlock(vh->context); /* } cx -------------- */ return ret; } int lws_tls_session_dump_load(struct lws_vhost *vh, const char *host, uint16_t port, lws_tls_sess_cb_t cb_load, void *opq) { struct lws_tls_session_dump d; lws_tls_sco_t *ts; SSL_SESSION *sess = NULL; /* allow it to "bail" early */ void *v; if (vh->options & LWS_SERVER_OPTION_DISABLE_TLS_SESSION_CACHE) return 1; d.opaque = opq; lws_tls_session_tag_discrete(vh->name, host, port, d.tag, sizeof(d.tag)); lws_context_lock(vh->context, __func__); /* -------------- cx { */ lws_vhost_lock(vh); /* -------------- vh { */ ts = __lws_tls_session_lookup_by_name(vh, d.tag); if (ts) { /* * Since we are getting this out of cold storage, we should * not replace any existing session since it is likely newer */ lwsl_notice("%s: session already exists for %s\n", __func__, d.tag); goto bail1; } if (cb_load(vh->context, &d)) { lwsl_warn("%s: load failed\n", __func__); goto bail1; } /* the callback has allocated the blob and set d.blob / d.blob_len */ v = d.blob; /* this advances d.blob by the blob size ;-) */ sess = d2i_SSL_SESSION(NULL, (const uint8_t **)&d.blob, (long)d.blob_len); free(v); /* user code will have used malloc() */ if (!sess) { lwsl_warn("%s: d2i_SSL_SESSION failed\n", __func__); goto bail; } lws_vhost_lock(vh); /* -------------- vh { */ ts = lws_tls_session_add_entry(vh, d.tag); lws_vhost_unlock(vh); /* } vh -------------- */ if (!ts) { lwsl_warn("%s: unable to add cache entry\n", __func__); goto bail; } ts->session = sess; lwsl_tlssess("%s: session loaded OK\n", __func__); lws_vhost_unlock(vh); /* } vh -------------- */ lws_context_unlock(vh->context); /* } cx -------------- */ return 0; bail: SSL_SESSION_free(sess); bail1: lws_vhost_unlock(vh); /* } vh -------------- */ lws_context_unlock(vh->context); /* } cx -------------- */ return 1; } libwebsockets-4.3.5/lib/tls/openssl/openssl-ssl.c000066400000000000000000000353711476025525100220640ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "private-lib-tls-openssl.h" int openssl_websocket_private_data_index, openssl_SSL_CTX_private_data_index; /* * Care: many openssl apis return 1 for success. These are translated to the * lws convention of 0 for success. */ int lws_openssl_describe_cipher(struct lws *wsi) { #if !defined(LWS_WITH_NO_LOGS) && !defined(USE_WOLFSSL) int np = -1; SSL *s = wsi->tls.ssl; SSL_get_cipher_bits(s, &np); lwsl_info("%s: %s: %s, %s, %d bits, %s\n", __func__, lws_wsi_tag(wsi), SSL_get_cipher_name(s), SSL_get_cipher(s), np, SSL_get_cipher_version(s)); #endif return 0; } int lws_ssl_get_error(struct lws *wsi, int n) { int m; if (!wsi->tls.ssl) return 99; m = SSL_get_error(wsi->tls.ssl, n); lwsl_debug("%s: %p %d -> %d (errno %d)\n", __func__, wsi->tls.ssl, n, m, LWS_ERRNO); // assert (LWS_ERRNO != 9); return m; } #if defined(LWS_WITH_SERVER) static int lws_context_init_ssl_pem_passwd_cb(char *buf, int size, int rwflag, void *userdata) { struct lws_context_creation_info * info = (struct lws_context_creation_info *)userdata; strncpy(buf, info->ssl_private_key_password, (unsigned int)size); buf[size - 1] = '\0'; return (int)strlen(buf); } #endif #if defined(LWS_WITH_CLIENT) static int lws_context_init_ssl_pem_passwd_client_cb(char *buf, int size, int rwflag, void *userdata) { struct lws_context_creation_info * info = (struct lws_context_creation_info *)userdata; const char *p = info->ssl_private_key_password; if (info->client_ssl_private_key_password) p = info->client_ssl_private_key_password; strncpy(buf, p, (unsigned int)size); buf[size - 1] = '\0'; return (int)strlen(buf); } #endif void lws_ssl_bind_passphrase(SSL_CTX *ssl_ctx, int is_client, const struct lws_context_creation_info *info) { if ( #if defined(LWS_WITH_SERVER) !info->ssl_private_key_password #endif #if defined(LWS_WITH_SERVER) && defined(LWS_WITH_CLIENT) && #endif #if defined(LWS_WITH_CLIENT) !info->client_ssl_private_key_password #endif ) return; /* * password provided, set ssl callback and user data * for checking password which will be trigered during * SSL_CTX_use_PrivateKey_file function */ SSL_CTX_set_default_passwd_cb_userdata(ssl_ctx, (void *)info); SSL_CTX_set_default_passwd_cb(ssl_ctx, is_client ? #if defined(LWS_WITH_CLIENT) lws_context_init_ssl_pem_passwd_client_cb: #else NULL: #endif #if defined(LWS_WITH_SERVER) lws_context_init_ssl_pem_passwd_cb #else NULL #endif ); } #if defined(LWS_WITH_CLIENT) static void lws_ssl_destroy_client_ctx(struct lws_vhost *vhost) { if (vhost->tls.user_supplied_ssl_ctx || !vhost->tls.ssl_client_ctx) return; if (vhost->tls.tcr && --vhost->tls.tcr->refcount) return; SSL_CTX_free(vhost->tls.ssl_client_ctx); vhost->tls.ssl_client_ctx = NULL; vhost->context->tls.count_client_contexts--; if (vhost->tls.tcr) { lws_dll2_remove(&vhost->tls.tcr->cc_list); lws_free(vhost->tls.tcr); vhost->tls.tcr = NULL; } } #endif void lws_ssl_destroy(struct lws_vhost *vhost) { if (!lws_check_opt(vhost->context->options, LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT)) return; if (vhost->tls.ssl_ctx) SSL_CTX_free(vhost->tls.ssl_ctx); #if defined(LWS_WITH_CLIENT) lws_ssl_destroy_client_ctx(vhost); #endif // after 1.1.0 no need #if (OPENSSL_VERSION_NUMBER < 0x10100000) // <= 1.0.1f = old api, 1.0.1g+ = new api #if (OPENSSL_VERSION_NUMBER <= 0x1000106f) || defined(USE_WOLFSSL) ERR_remove_state(0); #else #if OPENSSL_VERSION_NUMBER >= 0x1010005f && \ !defined(LIBRESSL_VERSION_NUMBER) && \ !defined(OPENSSL_IS_BORINGSSL) ERR_remove_thread_state(); #else ERR_remove_thread_state(NULL); #endif #endif /* not needed after 1.1.0 */ #if (OPENSSL_VERSION_NUMBER >= 0x10002000) && \ (OPENSSL_VERSION_NUMBER <= 0x10100000) SSL_COMP_free_compression_methods(); #endif ERR_free_strings(); EVP_cleanup(); CRYPTO_cleanup_all_ex_data(); #endif } int lws_ssl_capable_read(struct lws *wsi, unsigned char *buf, size_t len) { struct lws_context *context = wsi->a.context; struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; int n = 0, m; if (!wsi->tls.ssl) return lws_ssl_capable_read_no_ssl(wsi, buf, len); #ifndef WIN32 errno = 0; #else WSASetLastError(0); #endif ERR_clear_error(); n = SSL_read(wsi->tls.ssl, buf, (int)(ssize_t)len); #if defined(LWS_PLAT_FREERTOS) if (!n && errno == LWS_ENOTCONN) { lwsl_debug("%s: SSL_read ENOTCONN\n", lws_wsi_tag(wsi)); return LWS_SSL_CAPABLE_ERROR; } #endif lwsl_debug("%s: SSL_read says %d\n", lws_wsi_tag(wsi), n); /* manpage: returning 0 means connection shut down * * 2018-09-10: https://github.com/openssl/openssl/issues/1903 * * So, in summary, if you get a 0 or -1 return from SSL_read() / * SSL_write(), you should call SSL_get_error(): * * - If you get back SSL_ERROR_RETURN_ZERO then you know the connection * has been cleanly shutdown by the peer. To fully close the * connection you may choose to call SSL_shutdown() to send a * close_notify back. * * - If you get back SSL_ERROR_SSL then some kind of internal or * protocol error has occurred. More details will be on the SSL error * queue. You can also call SSL_get_shutdown(). If this indicates a * state of SSL_RECEIVED_SHUTDOWN then you know a fatal alert has * been received from the peer (if it had been a close_notify then * SSL_get_error() would have returned SSL_ERROR_RETURN_ZERO). * SSL_ERROR_SSL is considered fatal - you should not call * SSL_shutdown() in this case. * * - If you get back SSL_ERROR_SYSCALL then some kind of fatal (i.e. * non-retryable) error has occurred in a system call. */ if (n <= 0) { m = lws_ssl_get_error(wsi, n); lwsl_debug("%s: ssl err %d errno %d\n", lws_wsi_tag(wsi), m, LWS_ERRNO); if (m == SSL_ERROR_ZERO_RETURN) /* cleanly shut down */ goto do_err; if (m == SSL_ERROR_SSL) lws_tls_err_describe_clear(); /* hm not retryable.. could be 0 size pkt or error */ if (m == SSL_ERROR_SSL || m == SSL_ERROR_SYSCALL || LWS_ERRNO == LWS_ENOTCONN) { /* unclean, eg closed conn */ wsi->socket_is_permanently_unusable = 1; do_err: #if defined(LWS_WITH_SYS_METRICS) if (wsi->a.vhost) lws_metric_event(wsi->a.vhost->mt_traffic_rx, METRES_NOGO, 0); #endif return LWS_SSL_CAPABLE_ERROR; } /* retryable? */ if (SSL_want_read(wsi->tls.ssl)) { lwsl_debug("%s: WANT_READ\n", __func__); lwsl_debug("%s: LWS_SSL_CAPABLE_MORE_SERVICE\n", lws_wsi_tag(wsi)); return LWS_SSL_CAPABLE_MORE_SERVICE; } if (SSL_want_write(wsi->tls.ssl)) { lwsl_info("%s: WANT_WRITE\n", __func__); lwsl_debug("%s: LWS_SSL_CAPABLE_MORE_SERVICE\n", lws_wsi_tag(wsi)); wsi->tls_read_wanted_write = 1; lws_callback_on_writable(wsi); return LWS_SSL_CAPABLE_MORE_SERVICE; } /* keep on trucking it seems */ } #if defined(LWS_TLS_LOG_PLAINTEXT_RX) /* * If using openssl type tls library, this is the earliest point for all * paths to dump what was received as decrypted data from the tls tunnel */ lwsl_notice("%s: len %d\n", __func__, n); lwsl_hexdump_notice(buf, (unsigned int)n); #endif #if defined(LWS_WITH_SYS_METRICS) if (wsi->a.vhost) lws_metric_event(wsi->a.vhost->mt_traffic_rx, METRES_GO, (u_mt_t)n); #endif /* * if it was our buffer that limited what we read, * check if SSL has additional data pending inside SSL buffers. * * Because these won't signal at the network layer with POLLIN * and if we don't realize, this data will sit there forever */ if (n != (int)(ssize_t)len) goto bail; if (!wsi->tls.ssl) goto bail; if (SSL_pending(wsi->tls.ssl)) { if (lws_dll2_is_detached(&wsi->tls.dll_pending_tls)) lws_dll2_add_head(&wsi->tls.dll_pending_tls, &pt->tls.dll_pending_tls_owner); } else __lws_ssl_remove_wsi_from_buffered_list(wsi); return n; bail: lws_ssl_remove_wsi_from_buffered_list(wsi); return n; } int lws_ssl_pending(struct lws *wsi) { if (!wsi->tls.ssl) return 0; return SSL_pending(wsi->tls.ssl); } int lws_ssl_capable_write(struct lws *wsi, unsigned char *buf, size_t len) { int n, m; #if defined(LWS_TLS_LOG_PLAINTEXT_TX) /* * If using OpenSSL type tls library, this is the last point for all * paths before sending data into the tls tunnel, where you can dump it * and see what is being sent. */ lwsl_notice("%s: len %u\n", __func__, (unsigned int)len); lwsl_hexdump_notice(buf, len); #endif if (!wsi->tls.ssl) return lws_ssl_capable_write_no_ssl(wsi, buf, len); errno = 0; ERR_clear_error(); n = SSL_write(wsi->tls.ssl, buf, (int)(ssize_t)len); if (n > 0) { #if defined(LWS_WITH_SYS_METRICS) if (wsi->a.vhost) lws_metric_event(wsi->a.vhost->mt_traffic_tx, METRES_GO, (u_mt_t)n); #endif return n; } m = lws_ssl_get_error(wsi, n); if (m != SSL_ERROR_SYSCALL) { if (m == SSL_ERROR_WANT_READ || SSL_want_read(wsi->tls.ssl)) { lwsl_notice("%s: want read\n", __func__); return LWS_SSL_CAPABLE_MORE_SERVICE; } if (m == SSL_ERROR_WANT_WRITE || SSL_want_write(wsi->tls.ssl)) { lws_set_blocking_send(wsi); lwsl_debug("%s: want write\n", __func__); return LWS_SSL_CAPABLE_MORE_SERVICE; } } lwsl_debug("%s failed: %s\n",__func__, ERR_error_string((unsigned int)m, NULL)); lws_tls_err_describe_clear(); wsi->socket_is_permanently_unusable = 1; #if defined(LWS_WITH_SYS_METRICS) if (wsi->a.vhost) lws_metric_event(wsi->a.vhost->mt_traffic_tx, METRES_NOGO, 0); #endif return LWS_SSL_CAPABLE_ERROR; } void lws_ssl_info_callback(const SSL *ssl, int where, int ret) { struct lws *wsi; struct lws_context *context; struct lws_ssl_info si; int fd; #ifndef USE_WOLFSSL context = (struct lws_context *)SSL_CTX_get_ex_data( SSL_get_SSL_CTX(ssl), openssl_SSL_CTX_private_data_index); #else context = (struct lws_context *)SSL_CTX_get_ex_data( SSL_get_SSL_CTX((SSL*) ssl), openssl_SSL_CTX_private_data_index); #endif if (!context) return; fd = SSL_get_fd(ssl); if (fd < 0 || (fd - lws_plat_socket_offset()) < 0) return; wsi = wsi_from_fd(context, fd); if (!wsi) return; if (!(where & wsi->a.vhost->tls.ssl_info_event_mask)) return; si.where = where; si.ret = ret; if (user_callback_handle_rxflow(wsi->a.protocol->callback, wsi, LWS_CALLBACK_SSL_INFO, wsi->user_space, &si, 0)) lws_set_timeout(wsi, PENDING_TIMEOUT_KILLED_BY_SSL_INFO, -1); } int lws_ssl_close(struct lws *wsi) { lws_sockfd_type n; if (!wsi->tls.ssl) return 0; /* not handled */ #if defined (LWS_HAVE_SSL_SET_INFO_CALLBACK) /* kill ssl callbacks, because we will remove the fd from the * table linking it to the wsi */ if (wsi->a.vhost->tls.ssl_info_event_mask) SSL_set_info_callback(wsi->tls.ssl, NULL); #endif #if defined(LWS_TLS_SYNTHESIZE_CB) lws_sul_cancel(&wsi->tls.sul_cb_synth); /* * ... check the session in case it did not live long enough to get * the scheduled callback to sample it */ lws_sess_cache_synth_cb(&wsi->tls.sul_cb_synth); #endif n = SSL_get_fd(wsi->tls.ssl); if (!wsi->socket_is_permanently_unusable) SSL_shutdown(wsi->tls.ssl); compatible_close(n); SSL_free(wsi->tls.ssl); wsi->tls.ssl = NULL; lws_tls_restrict_return(wsi); // lwsl_notice("%s: ssl restr %d, simul %d\n", __func__, // wsi->a.context->simultaneous_ssl_restriction, // wsi->a.context->simultaneous_ssl); return 1; /* handled */ } void lws_ssl_SSL_CTX_destroy(struct lws_vhost *vhost) { if (vhost->tls.ssl_ctx) SSL_CTX_free(vhost->tls.ssl_ctx); #if defined(LWS_WITH_CLIENT) lws_ssl_destroy_client_ctx(vhost); #endif #if defined(LWS_WITH_ACME) lws_tls_acme_sni_cert_destroy(vhost); #endif } void lws_ssl_context_destroy(struct lws_context *context) { // after 1.1.0 no need #if (OPENSSL_VERSION_NUMBER < 0x10100000) // <= 1.0.1f = old api, 1.0.1g+ = new api #if (OPENSSL_VERSION_NUMBER <= 0x1000106f) || defined(USE_WOLFSSL) ERR_remove_state(0); #else #if OPENSSL_VERSION_NUMBER >= 0x1010005f && \ !defined(LIBRESSL_VERSION_NUMBER) && \ !defined(OPENSSL_IS_BORINGSSL) ERR_remove_thread_state(); #else ERR_remove_thread_state(NULL); #endif #endif // after 1.1.0 no need #if (OPENSSL_VERSION_NUMBER >= 0x10002000) && (OPENSSL_VERSION_NUMBER <= 0x10100000) SSL_COMP_free_compression_methods(); #endif ERR_free_strings(); EVP_cleanup(); CRYPTO_cleanup_all_ex_data(); #endif } lws_tls_ctx * lws_tls_ctx_from_wsi(struct lws *wsi) { if (!wsi->tls.ssl) return NULL; return SSL_get_SSL_CTX(wsi->tls.ssl); } enum lws_ssl_capable_status __lws_tls_shutdown(struct lws *wsi) { int n; #ifndef WIN32 errno = 0; #else WSASetLastError(0); #endif ERR_clear_error(); n = SSL_shutdown(wsi->tls.ssl); lwsl_debug("SSL_shutdown=%d for fd %d\n", n, wsi->desc.sockfd); switch (n) { case 1: /* successful completion */ n = shutdown(wsi->desc.sockfd, SHUT_WR); return LWS_SSL_CAPABLE_DONE; case 0: /* needs a retry */ __lws_change_pollfd(wsi, 0, LWS_POLLIN); return LWS_SSL_CAPABLE_MORE_SERVICE; default: /* fatal error, or WANT */ n = SSL_get_error(wsi->tls.ssl, n); if (n != SSL_ERROR_SYSCALL && n != SSL_ERROR_SSL) { if (SSL_want_read(wsi->tls.ssl)) { lwsl_debug("(wants read)\n"); __lws_change_pollfd(wsi, 0, LWS_POLLIN); return LWS_SSL_CAPABLE_MORE_SERVICE_READ; } if (SSL_want_write(wsi->tls.ssl)) { lwsl_debug("(wants write)\n"); __lws_change_pollfd(wsi, 0, LWS_POLLOUT); return LWS_SSL_CAPABLE_MORE_SERVICE_WRITE; } } return LWS_SSL_CAPABLE_ERROR; } } static int tops_fake_POLLIN_for_buffered_openssl(struct lws_context_per_thread *pt) { return lws_tls_fake_POLLIN_for_buffered(pt); } const struct lws_tls_ops tls_ops_openssl = { /* fake_POLLIN_for_buffered */ tops_fake_POLLIN_for_buffered_openssl, }; libwebsockets-4.3.5/lib/tls/openssl/openssl-tls.c000066400000000000000000000106301476025525100220540ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "private-lib-tls-openssl.h" extern int openssl_websocket_private_data_index, openssl_SSL_CTX_private_data_index; #if defined(LWS_WITH_NETWORK) static char openssl_ex_indexes_acquired; #endif void lws_tls_err_describe_clear(void) { char buf[160]; unsigned long l; do { l = ERR_get_error(); if (!l) break; ERR_error_string_n( #if defined(LWS_WITH_BORINGSSL) (uint32_t) #endif l, buf, sizeof(buf)); lwsl_info(" openssl error: %s\n", buf); } while (l); lwsl_info("\n"); } #if LWS_MAX_SMP != 1 static pthread_mutex_t *openssl_mutexes = NULL; static void lws_openssl_lock_callback(int mode, int type, const char *file, int line) { (void)file; (void)line; if (mode & CRYPTO_LOCK) pthread_mutex_lock(&openssl_mutexes[type]); else pthread_mutex_unlock(&openssl_mutexes[type]); } static unsigned long lws_openssl_thread_id(void) { #ifdef __PTW32_H return (unsigned long)(intptr_t)(pthread_self()).p; #else return (unsigned long)pthread_self(); #endif } #endif int lws_context_init_ssl_library(struct lws_context *cx, const struct lws_context_creation_info *info) { #ifdef USE_WOLFSSL #ifdef USE_OLD_CYASSL lwsl_cx_info(cx, " Compiled with CyaSSL support"); #else lwsl_cx_info(cx, " Compiled with wolfSSL support"); #endif #else #if defined(LWS_WITH_BORINGSSL) lwsl_cx_info(cx, " Compiled with BoringSSL support"); #else lwsl_cx_info(cx, " Compiled with OpenSSL support"); #endif #endif if (!lws_check_opt(info->options, LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT)) { if (!info->provided_client_ssl_ctx) lwsl_cx_info(cx, " SSL disabled: no " "LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT"); return 0; } /* basic openssl init */ lwsl_cx_info(cx, "Doing SSL library init"); #if OPENSSL_VERSION_NUMBER < 0x10100000L SSL_library_init(); OpenSSL_add_all_algorithms(); SSL_load_error_strings(); #else OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL); #endif #if defined(LWS_WITH_NETWORK) if (!openssl_ex_indexes_acquired) { openssl_websocket_private_data_index = SSL_get_ex_new_index(0, "lws", NULL, NULL, NULL); openssl_SSL_CTX_private_data_index = SSL_CTX_get_ex_new_index(0, NULL, NULL, NULL, NULL); openssl_ex_indexes_acquired = 1; } #endif #if LWS_MAX_SMP != 1 { int n; openssl_mutexes = (pthread_mutex_t *) OPENSSL_malloc((size_t)((unsigned long)CRYPTO_num_locks() * (unsigned long)sizeof(openssl_mutexes[0]))); for (n = 0; n < CRYPTO_num_locks(); n++) pthread_mutex_init(&openssl_mutexes[n], NULL); /* * These "functions" disappeared in later OpenSSL which is * already threadsafe. */ (void)lws_openssl_thread_id; (void)lws_openssl_lock_callback; CRYPTO_set_id_callback(lws_openssl_thread_id); CRYPTO_set_locking_callback(lws_openssl_lock_callback); } #endif return 0; } void lws_context_deinit_ssl_library(struct lws_context *context) { #if LWS_MAX_SMP != 1 int n; if (!lws_check_opt(context->options, LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT)) return; CRYPTO_set_locking_callback(NULL); if (openssl_mutexes) { for (n = 0; n < CRYPTO_num_locks(); n++) pthread_mutex_destroy(&openssl_mutexes[n]); OPENSSL_free(openssl_mutexes); openssl_mutexes = NULL; } #endif } libwebsockets-4.3.5/lib/tls/openssl/openssl-x509.c000066400000000000000000000472521476025525100217710ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #define WIN32_LEAN_AND_MEAN #include "private-lib-core.h" #include "private-lib-tls-openssl.h" #if !defined(LWS_PLAT_OPTEE) static int dec(char c) { return c - '0'; } #endif static time_t lws_tls_openssl_asn1time_to_unix(ASN1_TIME *as) { #if !defined(LWS_PLAT_OPTEE) const char *p = (const char *)as->data; struct tm t; /* [YY]YYMMDDHHMMSSZ */ memset(&t, 0, sizeof(t)); if (strlen(p) == 13) { t.tm_year = (dec(p[0]) * 10) + dec(p[1]); if (t.tm_year < 50) /* RFC5280: 13 char dates will break after 2049 */ t.tm_year += 100; /* struct tm year is -1900, this gives 2000..2049 */ p += 2; } else { t.tm_year = ((dec(p[0]) * 1000) + (dec(p[1]) * 100) + (dec(p[2]) * 10) + dec(p[3])) - 1900; /* struct tm year is -1900 */ p += 4; } t.tm_mon = (dec(p[0]) * 10) + dec(p[1]) - 1; p += 2; t.tm_mday = (dec(p[0]) * 10) + dec(p[1]) - 1; p += 2; t.tm_hour = (dec(p[0]) * 10) + dec(p[1]); p += 2; t.tm_min = (dec(p[0]) * 10) + dec(p[1]); p += 2; t.tm_sec = (dec(p[0]) * 10) + dec(p[1]); t.tm_isdst = 0; return mktime(&t); #else return (time_t)-1; #endif } #if defined(USE_WOLFSSL) #define AUTHORITY_KEYID WOLFSSL_AUTHORITY_KEYID #endif int lws_tls_openssl_cert_info(X509 *x509, enum lws_tls_cert_info type, union lws_tls_cert_info_results *buf, size_t len) { #ifndef USE_WOLFSSL const unsigned char *dp; ASN1_OCTET_STRING *val; AUTHORITY_KEYID *akid; X509_EXTENSION *ext; int tag, xclass, r = 1; long xlen, loc; #endif X509_NAME *xn; #if !defined(LWS_PLAT_OPTEE) char *p; #endif buf->ns.len = 0; if (!x509) return -1; if (!len) len = sizeof(buf->ns.name); #if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(X509_get_notBefore) #define X509_get_notBefore(x) X509_getm_notBefore(x) #define X509_get_notAfter(x) X509_getm_notAfter(x) #endif switch (type) { case LWS_TLS_CERT_INFO_VALIDITY_FROM: buf->time = lws_tls_openssl_asn1time_to_unix( X509_get_notBefore(x509)); if (buf->time == (time_t)-1) return -1; break; case LWS_TLS_CERT_INFO_VALIDITY_TO: buf->time = lws_tls_openssl_asn1time_to_unix( X509_get_notAfter(x509)); if (buf->time == (time_t)-1) return -1; break; case LWS_TLS_CERT_INFO_COMMON_NAME: #if defined(LWS_PLAT_OPTEE) return -1; #else xn = X509_get_subject_name(x509); if (!xn) return -1; X509_NAME_oneline(xn, buf->ns.name, (int)len - 2); p = strstr(buf->ns.name, "/CN="); if (p) memmove(buf->ns.name, p + 4, strlen(p + 4) + 1); buf->ns.len = (int)strlen(buf->ns.name); return 0; #endif case LWS_TLS_CERT_INFO_ISSUER_NAME: xn = X509_get_issuer_name(x509); if (!xn) return -1; X509_NAME_oneline(xn, buf->ns.name, (int)len - 1); buf->ns.len = (int)strlen(buf->ns.name); return 0; case LWS_TLS_CERT_INFO_USAGE: #if defined(LWS_HAVE_X509_get_key_usage) buf->usage = X509_get_key_usage(x509); break; #else return -1; #endif case LWS_TLS_CERT_INFO_OPAQUE_PUBLIC_KEY: { #ifndef USE_WOLFSSL size_t klen = (unsigned int)i2d_X509_PUBKEY(X509_get_X509_PUBKEY(x509), NULL); uint8_t *tmp, *ptmp; if (!klen || klen > len) return -1; tmp = (uint8_t *)OPENSSL_malloc(klen); if (!tmp) return -1; ptmp = tmp; if (i2d_X509_PUBKEY( X509_get_X509_PUBKEY(x509), &ptmp) != (int)klen || !ptmp || lws_ptr_diff(ptmp, tmp) != (int)klen) { lwsl_info("%s: cert public key extraction failed\n", __func__); if (ptmp) OPENSSL_free(tmp); return -1; } buf->ns.len = (int)klen; memcpy(buf->ns.name, tmp, klen); OPENSSL_free(tmp); #endif return 0; } case LWS_TLS_CERT_INFO_DER_RAW: { int der_len = i2d_X509(x509, NULL); uint8_t *tmp = (uint8_t *)buf->ns.name; buf->ns.len = der_len < 0 ? 0 : der_len; if (der_len < 0 || (size_t)der_len > len) return -1; der_len = i2d_X509(x509, &tmp); if (der_len < 0) return -1; return 0; } #ifndef USE_WOLFSSL case LWS_TLS_CERT_INFO_AUTHORITY_KEY_ID: loc = X509_get_ext_by_NID(x509, NID_authority_key_identifier, -1); if (loc < 0) return 1; ext = X509_get_ext(x509, (int)loc); if (!ext) return 1; #ifndef USE_WOLFSSL akid = (AUTHORITY_KEYID *)X509V3_EXT_d2i(ext); #else akid = (AUTHORITY_KEYID *)wolfSSL_X509V3_EXT_d2i(ext); #endif if (!akid || !akid->keyid) return 1; val = akid->keyid; dp = (const unsigned char *)val->data; xlen = val->length; buf->ns.len = (int)xlen; if (len < (size_t)buf->ns.len) return -1; memcpy(buf->ns.name, dp, (size_t)buf->ns.len); AUTHORITY_KEYID_free(akid); break; case LWS_TLS_CERT_INFO_AUTHORITY_KEY_ID_ISSUER: loc = X509_get_ext_by_NID(x509, NID_authority_key_identifier, -1); if (loc < 0) return 1; ext = X509_get_ext(x509, (int)loc); if (!ext) return 1; #ifndef USE_WOLFSSL akid = (AUTHORITY_KEYID *)X509V3_EXT_d2i(ext); #else akid = (AUTHORITY_KEYID *)wolfSSL_X509V3_EXT_d2i(ext); #endif if (!akid || !akid->issuer) return 1; #if defined(LWS_HAVE_OPENSSL_STACK) { const X509V3_EXT_METHOD* method = X509V3_EXT_get(ext); STACK_OF(CONF_VALUE) *cv; int j; cv = i2v_GENERAL_NAMES((X509V3_EXT_METHOD*)method, akid->issuer, NULL); if (!cv) goto bail_ak; for (j = 0; j < OPENSSL_sk_num((const OPENSSL_STACK *)&cv); j++) { CONF_VALUE *nval = OPENSSL_sk_value((const OPENSSL_STACK *)&cv, j); size_t ln = (nval->name ? strlen(nval->name) : 0), lv = (nval->value ? strlen(nval->value) : 0), l = ln + lv; if (len > l) { if (nval->name) memcpy(buf->ns.name + buf->ns.len, nval->name, ln); if (nval->value) memcpy(buf->ns.name + buf->ns.len + ln, nval->value, lv); buf->ns.len = (int)((size_t)buf->ns.len + l); len -= l; buf->ns.name[buf->ns.len] = '\0'; r = 0; } } } bail_ak: #endif AUTHORITY_KEYID_free(akid); return r; case LWS_TLS_CERT_INFO_AUTHORITY_KEY_ID_SERIAL: loc = X509_get_ext_by_NID(x509, NID_authority_key_identifier, -1); if (loc < 0) return 1; ext = X509_get_ext(x509, (int)loc); if (!ext) return 1; akid = (AUTHORITY_KEYID *)X509V3_EXT_d2i(ext); if (!akid || !akid->serial) return 1; #if 0 // need to handle blobs, and ASN1_INTEGER_get_uint64 not // available on older openssl { uint64_t res; if (ASN1_INTEGER_get_uint64(&res, akid->serial) != 1) break; buf->ns.len = lws_snprintf(buf->ns.name, len, "%llu", (unsigned long long)res); } #endif break; case LWS_TLS_CERT_INFO_SUBJECT_KEY_ID: loc = X509_get_ext_by_NID(x509, NID_subject_key_identifier, -1); if (loc < 0) return 1; ext = X509_get_ext(x509, (int)loc); if (!ext) return 1; val = X509_EXTENSION_get_data(ext); if (!val) return 1; #if defined(USE_WOLFSSL) return 1; #else dp = (const unsigned char *)val->data; if (ASN1_get_object(&dp, &xlen, &tag, &xclass, val->length) & 0x80) return -1; if (tag != V_ASN1_OCTET_STRING) { lwsl_notice("not octet string %d\n", (int)tag); return 1; } #endif buf->ns.len = (int)xlen; if (len < (size_t)buf->ns.len) return -1; memcpy(buf->ns.name, dp, (size_t)buf->ns.len); break; #endif default: return -1; } return 0; } int lws_x509_info(struct lws_x509_cert *x509, enum lws_tls_cert_info type, union lws_tls_cert_info_results *buf, size_t len) { return lws_tls_openssl_cert_info(x509->cert, type, buf, len); } #if defined(LWS_WITH_NETWORK) int lws_tls_vhost_cert_info(struct lws_vhost *vhost, enum lws_tls_cert_info type, union lws_tls_cert_info_results *buf, size_t len) { #if defined(LWS_HAVE_SSL_CTX_get0_certificate) X509 *x509 = SSL_CTX_get0_certificate(vhost->tls.ssl_ctx); return lws_tls_openssl_cert_info(x509, type, buf, len); #else lwsl_notice("openssl is too old to support %s\n", __func__); return -1; #endif } int lws_tls_peer_cert_info(struct lws *wsi, enum lws_tls_cert_info type, union lws_tls_cert_info_results *buf, size_t len) { int rc = 0; X509 *x509; wsi = lws_get_network_wsi(wsi); x509 = SSL_get_peer_certificate(wsi->tls.ssl); if (!x509) { lwsl_debug("no peer cert\n"); return -1; } switch (type) { case LWS_TLS_CERT_INFO_VERIFIED: buf->verified = SSL_get_verify_result(wsi->tls.ssl) == X509_V_OK; break; default: rc = lws_tls_openssl_cert_info(x509, type, buf, len); } X509_free(x509); return rc; } #endif int lws_x509_create(struct lws_x509_cert **x509) { *x509 = lws_malloc(sizeof(**x509), __func__); if (*x509) (*x509)->cert = NULL; return !(*x509); } int lws_x509_parse_from_pem(struct lws_x509_cert *x509, const void *pem, size_t len) { BIO* bio = BIO_new(BIO_s_mem()); BIO_write(bio, pem, (int)len); x509->cert = PEM_read_bio_X509(bio, NULL, NULL, NULL); BIO_free(bio); if (!x509->cert) { lwsl_err("%s: unable to parse PEM cert\n", __func__); lws_tls_err_describe_clear(); return -1; } return 0; } int lws_x509_verify(struct lws_x509_cert *x509, struct lws_x509_cert *trusted, const char *common_name) { char c[32], *p; int ret; if (common_name) { X509_NAME *xn = X509_get_subject_name(x509->cert); if (!xn) return -1; X509_NAME_oneline(xn, c, (int)sizeof(c) - 2); p = strstr(c, "/CN="); if (p) p = p + 4; else p = c; if (strcmp(p, common_name)) { lwsl_err("%s: common name mismatch\n", __func__); return -1; } } ret = X509_check_issued(trusted->cert, x509->cert); if (ret != X509_V_OK) { lwsl_err("%s: unable to verify cert relationship\n", __func__); lws_tls_err_describe_clear(); return -1; } return 0; } #if defined(LWS_WITH_JOSE) int lws_x509_public_to_jwk(struct lws_jwk *jwk, struct lws_x509_cert *x509, const char *curves, int rsa_min_bits) { int id, n, ret = -1, count; ASN1_OBJECT *obj = NULL; const EC_POINT *ecpoint; const EC_GROUP *ecgroup; EC_KEY *ecpub = NULL; X509_PUBKEY *pubkey; RSA *rsapub = NULL; BIGNUM *mpi[4]; EVP_PKEY *pkey; memset(jwk, 0, sizeof(*jwk)); pubkey = X509_get_X509_PUBKEY(x509->cert); if (!pubkey) { lwsl_err("%s: missing pubkey alg in cert\n", __func__); goto bail; } if (X509_PUBKEY_get0_param(&obj, NULL, NULL, NULL, pubkey) != 1) { lwsl_err("%s: missing pubkey alg in cert\n", __func__); goto bail; } id = OBJ_obj2nid(obj); if (id == NID_undef) { lwsl_err("%s: missing pubkey alg in cert\n", __func__); goto bail; } lwsl_debug("%s: key type %d \"%s\"\n", __func__, id, OBJ_nid2ln(id)); pkey = X509_get_pubkey(x509->cert); if (!pkey) { lwsl_notice("%s: unable to extract pubkey", __func__); goto bail; } switch (id) { case NID_X9_62_id_ecPublicKey: lwsl_debug("%s: EC key\n", __func__); jwk->kty = LWS_GENCRYPTO_KTY_EC; if (!curves) { lwsl_err("%s: ec curves not allowed\n", __func__); goto bail1; } ecpub = EVP_PKEY_get1_EC_KEY(pkey); if (!ecpub) { lwsl_notice("%s: missing EC pubkey\n", __func__); goto bail1; } ecpoint = EC_KEY_get0_public_key(ecpub); if (!ecpoint) { lwsl_err("%s: EC_KEY_get0_public_key failed\n", __func__); goto bail2; } ecgroup = EC_KEY_get0_group(ecpub); if (!ecgroup) { lwsl_err("%s: EC_KEY_get0_group failed\n", __func__); goto bail2; } /* validate the curve against ones we allow */ if (lws_genec_confirm_curve_allowed_by_tls_id(curves, EC_GROUP_get_curve_name(ecgroup), jwk)) /* already logged */ goto bail2; mpi[LWS_GENCRYPTO_EC_KEYEL_CRV] = NULL; mpi[LWS_GENCRYPTO_EC_KEYEL_X] = BN_new(); /* X */ mpi[LWS_GENCRYPTO_EC_KEYEL_D] = NULL; mpi[LWS_GENCRYPTO_EC_KEYEL_Y] = BN_new(); /* Y */ #if defined(LWS_HAVE_EC_POINT_get_affine_coordinates) if (EC_POINT_get_affine_coordinates(ecgroup, ecpoint, #else if (EC_POINT_get_affine_coordinates_GFp(ecgroup, ecpoint, #endif mpi[LWS_GENCRYPTO_EC_KEYEL_X], mpi[LWS_GENCRYPTO_EC_KEYEL_Y], NULL) != 1) { BN_clear_free(mpi[LWS_GENCRYPTO_EC_KEYEL_X]); BN_clear_free(mpi[LWS_GENCRYPTO_EC_KEYEL_Y]); lwsl_err("%s: EC_POINT_get_aff failed\n", __func__); goto bail2; } count = LWS_GENCRYPTO_EC_KEYEL_COUNT; n = LWS_GENCRYPTO_EC_KEYEL_X; break; case NID_rsaEncryption: lwsl_debug("%s: rsa key\n", __func__); jwk->kty = LWS_GENCRYPTO_KTY_RSA; rsapub = EVP_PKEY_get1_RSA(pkey); if (!rsapub) { lwsl_notice("%s: missing RSA pubkey\n", __func__); goto bail1; } if ((size_t)RSA_size(rsapub) * 8 < (size_t)rsa_min_bits) { lwsl_err("%s: key bits %d less than minimum %d\n", __func__, RSA_size(rsapub) * 8, rsa_min_bits); goto bail2; } #if defined(LWS_HAVE_RSA_SET0_KEY) /* we don't need d... but the api wants to write it */ RSA_get0_key(rsapub, (const BIGNUM **)&mpi[LWS_GENCRYPTO_RSA_KEYEL_N], (const BIGNUM **)&mpi[LWS_GENCRYPTO_RSA_KEYEL_E], (const BIGNUM **)&mpi[LWS_GENCRYPTO_RSA_KEYEL_D]); #else mpi[LWS_GENCRYPTO_RSA_KEYEL_E] = rsapub->e; mpi[LWS_GENCRYPTO_RSA_KEYEL_N] = rsapub->n; mpi[LWS_GENCRYPTO_RSA_KEYEL_D] = NULL; #endif count = LWS_GENCRYPTO_RSA_KEYEL_D; n = LWS_GENCRYPTO_RSA_KEYEL_E; break; default: lwsl_err("%s: unknown NID\n", __func__); goto bail2; } for (; n < count; n++) { if (!mpi[n]) continue; jwk->e[n].len = (unsigned int)BN_num_bytes(mpi[n]); jwk->e[n].buf = lws_malloc(jwk->e[n].len, "certkeyimp"); if (!jwk->e[n].buf) { if (id == NID_X9_62_id_ecPublicKey) { BN_clear_free(mpi[LWS_GENCRYPTO_EC_KEYEL_X]); BN_clear_free(mpi[LWS_GENCRYPTO_EC_KEYEL_Y]); } goto bail2; } BN_bn2bin(mpi[n], jwk->e[n].buf); } if (id == NID_X9_62_id_ecPublicKey) { BN_clear_free(mpi[LWS_GENCRYPTO_EC_KEYEL_X]); BN_clear_free(mpi[LWS_GENCRYPTO_EC_KEYEL_Y]); } ret = 0; bail2: if (id == NID_X9_62_id_ecPublicKey) EC_KEY_free(ecpub); else RSA_free(rsapub); bail1: EVP_PKEY_free(pkey); bail: /* jwk destroy will clean any partial state */ if (ret) lws_jwk_destroy(jwk); return ret; } static int lws_x509_jwk_privkey_pem_pp_cb(char *buf, int size, int rwflag, void *u) { const char *pp = (const char *)u; size_t n = strlen(pp); if ((int)n > size - 1) return -1; memcpy(buf, pp, n + 1); return (int)n; } int lws_x509_jwk_privkey_pem(struct lws_context *cx, struct lws_jwk *jwk, void *pem, size_t len, const char *passphrase) { BIO* bio = BIO_new(BIO_s_mem()); BIGNUM *mpi, *dummy[6]; EVP_PKEY *pkey = NULL; EC_KEY *ecpriv = NULL; RSA *rsapriv = NULL; const BIGNUM *cmpi; int n, m, ret = -1; BIO_write(bio, pem, (int)len); PEM_read_bio_PrivateKey(bio, &pkey, lws_x509_jwk_privkey_pem_pp_cb, (void *)passphrase); BIO_free(bio); lws_explicit_bzero((void *)pem, len); if (!pkey) { lwsl_err("%s: unable to parse PEM privkey\n", __func__); lws_tls_err_describe_clear(); return -1; } /* confirm the key type matches the existing jwk situation */ switch (jwk->kty) { case LWS_GENCRYPTO_KTY_EC: if (EVP_PKEY_type(EVP_PKEY_id(pkey)) != EVP_PKEY_EC) { lwsl_err("%s: jwk is EC but privkey isn't\n", __func__); goto bail; } ecpriv = EVP_PKEY_get1_EC_KEY(pkey); if (!ecpriv) { lwsl_notice("%s: missing EC key\n", __func__); goto bail; } cmpi = EC_KEY_get0_private_key(ecpriv); /* quick size check first */ n = BN_num_bytes(cmpi); if (jwk->e[LWS_GENCRYPTO_EC_KEYEL_Y].len != (uint32_t)n) { lwsl_err("%s: jwk key size doesn't match\n", __func__); goto bail1; } /* TODO.. check public curve / group + point */ jwk->e[LWS_GENCRYPTO_EC_KEYEL_D].len = (unsigned int)n; jwk->e[LWS_GENCRYPTO_EC_KEYEL_D].buf = lws_malloc((unsigned int)n, "ec"); if (!jwk->e[LWS_GENCRYPTO_EC_KEYEL_D].buf) goto bail1; m = BN_bn2binpad(cmpi, jwk->e[LWS_GENCRYPTO_EC_KEYEL_D].buf, (int32_t)jwk->e[LWS_GENCRYPTO_EC_KEYEL_D].len); if ((unsigned int)m != (unsigned int)BN_num_bytes(cmpi)) goto bail1; break; case LWS_GENCRYPTO_KTY_RSA: if (EVP_PKEY_type(EVP_PKEY_id(pkey)) != EVP_PKEY_RSA) { lwsl_err("%s: RSA jwk, non-RSA privkey\n", __func__); goto bail; } rsapriv = EVP_PKEY_get1_RSA(pkey); if (!rsapriv) { lwsl_notice("%s: missing RSA key\n", __func__); goto bail; } #if defined(LWS_HAVE_RSA_SET0_KEY) && !defined(USE_WOLFSSL) RSA_get0_key(rsapriv, (const BIGNUM **)&dummy[0], /* n */ (const BIGNUM **)&dummy[1], /* e */ (const BIGNUM **)&mpi); /* d */ RSA_get0_factors(rsapriv, (const BIGNUM **)&dummy[4], /* p */ (const BIGNUM **)&dummy[5]); /* q */ #else dummy[0] = rsapriv->n; dummy[1] = rsapriv->e; dummy[4] = rsapriv->p; dummy[5] = rsapriv->q; mpi = rsapriv->d; #endif /* quick size check first */ n = BN_num_bytes(mpi); if (jwk->e[LWS_GENCRYPTO_RSA_KEYEL_N].len != (uint32_t)n) { lwsl_err("%s: jwk key size doesn't match\n", __func__); goto bail1; } /* then check that n & e match what we got from the cert */ dummy[2] = BN_bin2bn(jwk->e[LWS_GENCRYPTO_RSA_KEYEL_N].buf, (int32_t)jwk->e[LWS_GENCRYPTO_RSA_KEYEL_N].len, NULL); dummy[3] = BN_bin2bn(jwk->e[LWS_GENCRYPTO_RSA_KEYEL_E].buf, (int32_t)jwk->e[LWS_GENCRYPTO_RSA_KEYEL_E].len, NULL); m = BN_cmp(dummy[2], dummy[0]) | BN_cmp(dummy[3], dummy[1]); BN_clear_free(dummy[2]); BN_clear_free(dummy[3]); if (m) { lwsl_err("%s: privkey doesn't match jwk pubkey\n", __func__); goto bail1; } /* accept d from the PEM privkey into the JWK */ jwk->e[LWS_GENCRYPTO_RSA_KEYEL_D].len = (unsigned int)n; jwk->e[LWS_GENCRYPTO_RSA_KEYEL_D].buf = lws_malloc((unsigned int)n, "privjk"); if (!jwk->e[LWS_GENCRYPTO_RSA_KEYEL_D].buf) goto bail1; BN_bn2bin(mpi, jwk->e[LWS_GENCRYPTO_RSA_KEYEL_D].buf); /* accept p and q from the PEM privkey into the JWK */ jwk->e[LWS_GENCRYPTO_RSA_KEYEL_P].len = (unsigned int)BN_num_bytes(dummy[4]); jwk->e[LWS_GENCRYPTO_RSA_KEYEL_P].buf = lws_malloc((unsigned int)n, "privjk"); if (!jwk->e[LWS_GENCRYPTO_RSA_KEYEL_P].buf) { lws_free_set_NULL(jwk->e[LWS_GENCRYPTO_RSA_KEYEL_D].buf); goto bail1; } BN_bn2bin(dummy[4], jwk->e[LWS_GENCRYPTO_RSA_KEYEL_P].buf); jwk->e[LWS_GENCRYPTO_RSA_KEYEL_Q].len = (unsigned int)BN_num_bytes(dummy[5]); jwk->e[LWS_GENCRYPTO_RSA_KEYEL_Q].buf = lws_malloc((unsigned int)n, "privjk"); if (!jwk->e[LWS_GENCRYPTO_RSA_KEYEL_Q].buf) { lws_free_set_NULL(jwk->e[LWS_GENCRYPTO_RSA_KEYEL_D].buf); lws_free_set_NULL(jwk->e[LWS_GENCRYPTO_RSA_KEYEL_P].buf); goto bail1; } BN_bn2bin(dummy[5], jwk->e[LWS_GENCRYPTO_RSA_KEYEL_Q].buf); break; default: lwsl_err("%s: JWK has unknown kty %d\n", __func__, jwk->kty); return -1; } ret = 0; bail1: if (jwk->kty == LWS_GENCRYPTO_KTY_EC) EC_KEY_free(ecpriv); else RSA_free(rsapriv); bail: EVP_PKEY_free(pkey); return ret; } #endif void lws_x509_destroy(struct lws_x509_cert **x509) { if (!*x509) return; if ((*x509)->cert) { X509_free((*x509)->cert); (*x509)->cert = NULL; } lws_free_set_NULL(*x509); } libwebsockets-4.3.5/lib/tls/openssl/private-lib-tls-openssl.h000066400000000000000000000041741476025525100243030ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * gencrypto openssl-specific helper declarations */ #if !defined(__LWS_PRIVATE_LIB_TLS_OPENSSL_H__) #define __LWS_PRIVATE_LIB_TLS_OPENSSL_H__ /* * one of these per different client context * cc_owner is in lws_context.lws_context_tls */ struct lws_tls_client_reuse { lws_tls_ctx *ssl_client_ctx; uint8_t hash[32]; struct lws_dll2 cc_list; int refcount; int index; }; typedef int (*next_proto_cb)(SSL *, const unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg); struct lws_x509_cert { X509 *cert; /* X509 is opaque, this has to be a pointer */ }; int lws_gencrypto_openssl_hash_to_NID(enum lws_genhash_types hash_type); const EVP_MD * lws_gencrypto_openssl_hash_to_EVP_MD(enum lws_genhash_types hash_type); #if !defined(LWS_HAVE_BN_bn2binpad) int BN_bn2binpad(const BIGNUM *a, unsigned char *to, int tolen); #endif #endif libwebsockets-4.3.5/lib/tls/private-jit-trust.h000066400000000000000000000113431476025525100215320ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * This is included from private-lib-core.h if LWS_WITH_TLS * * First-party trusted certs are handled outside of JIT Trust, eg, in SS policy. * JIT Trust is used to validate arbitrary connections on demand, without * needing a complete set of CAs in memory. * * Instantiated CA X509s are bound to dedicated SSL_CTX in their own dynamic * vhosts for client connections to use, these are lazily culled when they have * no remaining active connections using them. * * - check jit trust cache to see if hostname has vhost already * - if so, use it * - if not, check jit trust cache to see if we know the trusted kids list, * - attempt connection * - remote or local trust blob / store */ #if !defined(__LWS_TLS_PRIVATE_JIT_TRUST_H__) #define __LWS_TLS_PRIVATE_JIT_TRUST_H__ /* * Refer to ./READMEs/README.jit-trust.md for blob layout specification */ #define LWS_JIT_TRUST_MAGIC_BE 0x54424c42 enum { LJT_OFS_32_COUNT_CERTS = 6, LJT_OFS_32_DERLEN = 0x0c, LJT_OFS_32_SKIDLEN = 0x10, LJT_OFS_32_SKID = 0x14, LJT_OFS_END = 0x18, LJT_OFS_DER = 0x1c, }; typedef struct { uint8_t kid[20]; uint8_t kid_len; } lws_tls_kid_t; typedef struct { lws_tls_kid_t akid[4]; lws_tls_kid_t skid[4]; uint8_t count; } lws_tls_kid_chain_t; /* * This is used to manage ongoing jit trust lookups for a specific host. It * collects results and any trusted DER certs until all of them have arrived, * then caches the hostname -> trusted SKIDs mapping, and creates a vhost + * SSL_CTX trusting the certs named after the trusted SKIDs. * * The cert copies and this inflight object are then freed. * * JIT Trust lookups may be async, there may be multiple lookups fired at one * time, and these mappings are not actually related to a wsi lifetime, so these * separate inflight tracking objects are needed. * * These objects only live until all the AKID lookups for the host that created * them complete. */ typedef struct { lws_dll2_t list; lws_tls_kid_t kid[2]; /* SKID of the der if any */ uint8_t *der[2]; /* temp allocated */ int ders; uint32_t tag; /* xor'd from start of SKIDs that * that contributed certs, so we * can name the vhost in a way that * can be regenerated no matter * the order of SKID results */ short der_len[2]; char refcount; /* expected results left */ /* hostname overcommitted */ } lws_tls_jit_inflight_t; /* * These are the items in the jit trust cache, the cache tag is the hostname * and it resolves to one of these if present. It describes 1 - 3 SKIDs * of trusted CAs needed to validate that host, and a 32-bit tag that is * the first 4 bytes of each valid SKID xor'd together, so you can find any * existing vhost that already has the required trust (independent of the * order they are checked in due to commutative xor). */ typedef struct { lws_tls_kid_t skids[3]; int count_skids; uint32_t xor_tag; } lws_tls_jit_cache_item_t; union lws_tls_cert_info_results; void lws_tls_kid_copy(union lws_tls_cert_info_results *ci, lws_tls_kid_t *kid); int lws_tls_kid_cmp(const lws_tls_kid_t *a, const lws_tls_kid_t *b); int lws_tls_jit_trust_sort_kids(struct lws *wsi, lws_tls_kid_chain_t *ch); void lws_tls_jit_trust_inflight_destroy(lws_tls_jit_inflight_t *inf); void lws_tls_jit_trust_inflight_destroy_all(struct lws_context *cx); int lws_tls_jit_trust_vhost_bind(struct lws_context *cx, const char *address, struct lws_vhost **pvh); void lws_tls_jit_trust_vh_start_grace(struct lws_vhost *vh); #endif libwebsockets-4.3.5/lib/tls/private-lib-tls.h000066400000000000000000000161261476025525100211370ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * This is included from private-lib-core.h if LWS_WITH_TLS */ #if !defined(__LWS_TLS_PRIVATE_H__) #define __LWS_TLS_PRIVATE_H__ #if defined(LWS_WITH_TLS) #include "private-jit-trust.h" #if defined(USE_WOLFSSL) #if defined(USE_OLD_CYASSL) #if defined(_WIN32) #include #include #else #include #endif #include #include #else #if defined(_WIN32) #include #include #else #include #endif #include #include #define OPENSSL_NO_TLSEXT #endif /* not USE_OLD_CYASSL */ #else /* WOLFSSL */ #if defined(LWS_PLAT_FREERTOS) #define OPENSSL_NO_TLSEXT #if !defined(LWS_AMAZON_RTOS) /* AMAZON RTOS has its own setting via MTK_MBEDTLS_CONFIG_FILE */ #undef MBEDTLS_CONFIG_FILE #define MBEDTLS_CONFIG_FILE #endif #include #include #include #include #include "ssl.h" /* wrapper !!!! */ #else /* not esp32 */ #if defined(LWS_WITH_MBEDTLS) #include #include #include #include #include #include #include #if defined(LWS_AMAZON_LINUX) #include "ssl.h" /* wrapper !!!! */ #else #include "openssl/ssl.h" /* wrapper !!!! */ #endif #else #include #include #include #include #include #include #include #include #ifdef LWS_HAVE_OPENSSL_ECDH_H #include #endif #if !defined(LWS_HAVE_EVP_MD_CTX_free) && !defined(USE_WOLFSSL) #define EVP_MD_CTX_free EVP_MD_CTX_destroy #endif #include #endif /* not mbedtls */ #if defined(OPENSSL_VERSION_NUMBER) #if (OPENSSL_VERSION_NUMBER < 0x0009080afL) /* * later openssl defines this to negate the presence of tlsext... but it was * only introduced at 0.9.8j. Earlier versions don't know it exists so don't * define it... making it look like the feature exists... */ #define OPENSSL_NO_TLSEXT #endif #endif #endif /* not ESP32 */ #endif /* not USE_WOLFSSL */ #endif /* LWS_WITH_TLS */ enum lws_tls_extant { LWS_TLS_EXTANT_NO, LWS_TLS_EXTANT_YES, LWS_TLS_EXTANT_ALTERNATIVE }; #if defined(LWS_WITH_TLS) #if defined(LWS_WITH_TLS_SESSIONS) && defined(LWS_WITH_CLIENT) && \ (defined(LWS_WITH_MBEDTLS) || defined(OPENSSL_IS_BORINGSSL)) #define LWS_TLS_SYNTHESIZE_CB 1 #endif int lws_tls_restrict_borrow(struct lws *wsi); void lws_tls_restrict_return(struct lws *wsi); void lws_tls_restrict_return_handshake(struct lws *wsi); typedef SSL lws_tls_conn; typedef SSL_CTX lws_tls_ctx; typedef BIO lws_tls_bio; typedef X509 lws_tls_x509; #if defined(LWS_WITH_NETWORK) #include "private-network.h" #endif int lws_context_init_ssl_library(struct lws_context *cx, const struct lws_context_creation_info *info); void lws_context_deinit_ssl_library(struct lws_context *context); #define LWS_SSL_ENABLED(vh) (vh && vh->tls.use_ssl) extern const struct lws_tls_ops tls_ops_openssl, tls_ops_mbedtls; struct lws_ec_valid_curves { int id; const char *jwa_name; /* list terminates with NULL jwa_name */ }; enum lws_tls_extant lws_tls_use_any_upgrade_check_extant(const char *name); extern int openssl_websocket_private_data_index; void lws_tls_err_describe_clear(void); int lws_tls_openssl_cert_info(X509 *x509, enum lws_tls_cert_info type, union lws_tls_cert_info_results *buf, size_t len); int lws_tls_check_all_cert_lifetimes(struct lws_context *context); int lws_tls_alloc_pem_to_der_file(struct lws_context *context, const char *filename, const char *inbuf, lws_filepos_t inlen, uint8_t **buf, lws_filepos_t *amount); int lws_gencrypto_bits_to_bytes(int bits); void lws_gencrypto_destroy_elements(struct lws_gencrypto_keyelem *el, int m); /* genec */ struct lws_gencrypto_keyelem; struct lws_ec_curves; extern const struct lws_ec_curves lws_ec_curves[4]; const struct lws_ec_curves * lws_genec_curve(const struct lws_ec_curves *table, const char *name); LWS_VISIBLE void lws_genec_destroy_elements(struct lws_gencrypto_keyelem *el); int lws_gencrypto_mbedtls_rngf(void *context, unsigned char *buf, size_t len); int lws_genec_confirm_curve_allowed_by_tls_id(const char *allowed, int id, struct lws_jwk *jwk); void lws_tls_reuse_session(struct lws *wsi); void lws_tls_session_cache(struct lws_vhost *vh, uint32_t ttl); int lws_tls_session_name_from_wsi(struct lws *wsi, char *buf, size_t len); /** * lws_tls_session_name_discrete() - form an lws session tag name from pieces * * \param vhname: name of the vhost * \param host: name of the host we are connecting to, like warmcat.com * \param port: the port we connected to * \param buf: the destination buffer for the tag * \param len: the max available size of the destination buffer * * Creates a tag string representing a specific host, for use with serializing * sessions made with the host. */ void lws_tls_session_tag_discrete(const char *vhname, const char *host, uint16_t port, char *buf, size_t len); /** * lws_tls_session_name_from_wsi() - form an lws session tag name from a client wsi * * \param wsi: the wsi whose vhost, host and port we should use for the tag * \param buf: the destination buffer for the tag * \param len: the max available size of the destination buffer * * Creates a tag string representing a specific host, for use with serializing * sessions made with the host. */ int lws_tls_session_tag_from_wsi(struct lws *wsi, char *buf, size_t len); #else /* ! WITH_TLS */ #define lws_tls_restrict_borrow(xxx) (0) #define lws_tls_restrict_return(xxx) #endif #endif libwebsockets-4.3.5/lib/tls/private-network.h000066400000000000000000000140751476025525100212630ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * This is included from private-lib-core.h if LWS_WITH_TLS */ struct lws_context_per_thread; struct lws_tls_ops { int (*fake_POLLIN_for_buffered)(struct lws_context_per_thread *pt); }; struct lws_context_tls { char alpn_discovered[32]; const char *alpn_default; time_t last_cert_check_s; struct lws_dll2_owner cc_owner; int count_client_contexts; }; struct lws_pt_tls { struct lws_dll2_owner dll_pending_tls_owner; }; struct lws_tls_ss_pieces; struct alpn_ctx { uint8_t data[23]; uint8_t len; }; struct lws_vhost_tls { lws_tls_ctx *ssl_ctx; lws_tls_ctx *ssl_client_ctx; struct lws_tls_client_reuse *tcr; const char *alpn; struct lws_tls_ss_pieces *ss; /* for acme tls certs */ char *alloc_cert_path; char *key_path; #if defined(LWS_WITH_MBEDTLS) lws_tls_x509 *x509_client_CA; #endif char ecdh_curve[16]; struct alpn_ctx alpn_ctx; int use_ssl; int allow_non_ssl_on_ssl_port; int ssl_info_event_mask; #if defined(LWS_WITH_MBEDTLS) uint32_t tls_session_cache_ttl; #endif unsigned int user_supplied_ssl_ctx:1; unsigned int skipped_certs:1; }; struct lws_lws_tls { lws_tls_conn *ssl; lws_tls_bio *client_bio; #if defined(LWS_TLS_SYNTHESIZE_CB) lws_sorted_usec_list_t sul_cb_synth; #endif #if !defined(LWS_WITH_MBEDTLS) && defined(LWS_WITH_TLS_JIT_TRUST) /* mbedtls has this in the wrapper, since no wsi ptr at validation */ lws_tls_kid_chain_t kid_chain; #endif struct lws_dll2 dll_pending_tls; char err_helper[32]; unsigned int use_ssl; unsigned int redirect_to_https:1; }; void lws_context_init_alpn(struct lws_vhost *vhost); int LWS_WARN_UNUSED_RESULT lws_ssl_capable_read(struct lws *wsi, unsigned char *buf, size_t len); int LWS_WARN_UNUSED_RESULT lws_ssl_capable_write(struct lws *wsi, unsigned char *buf, size_t len); int LWS_WARN_UNUSED_RESULT lws_ssl_pending(struct lws *wsi); int LWS_WARN_UNUSED_RESULT lws_server_socket_service_ssl(struct lws *new_wsi, lws_sockfd_type accept_fd, char is_pollin); void lws_sess_cache_synth_cb(lws_sorted_usec_list_t *sul); int lws_ssl_close(struct lws *wsi); void lws_ssl_SSL_CTX_destroy(struct lws_vhost *vhost); void lws_ssl_context_destroy(struct lws_context *context); void __lws_ssl_remove_wsi_from_buffered_list(struct lws *wsi); LWS_VISIBLE void lws_ssl_remove_wsi_from_buffered_list(struct lws *wsi); int lws_ssl_client_bio_create(struct lws *wsi); int lws_ssl_client_connect2(struct lws *wsi, char *errbuf, size_t len); int lws_tls_fake_POLLIN_for_buffered(struct lws_context_per_thread *pt); int lws_gate_accepts(struct lws_context *context, int on); void lws_ssl_bind_passphrase(lws_tls_ctx *ssl_ctx, int is_client, const struct lws_context_creation_info *info); void lws_ssl_info_callback(const lws_tls_conn *ssl, int where, int ret); int lws_tls_server_certs_load(struct lws_vhost *vhost, struct lws *wsi, const char *cert, const char *private_key, const char *mem_cert, size_t len_mem_cert, const char *mem_privkey, size_t mem_privkey_len); enum lws_tls_extant lws_tls_generic_cert_checks(struct lws_vhost *vhost, const char *cert, const char *private_key); #if defined(LWS_WITH_SERVER) int lws_context_init_server_ssl(const struct lws_context_creation_info *info, struct lws_vhost *vhost); void lws_tls_acme_sni_cert_destroy(struct lws_vhost *vhost); #else #define lws_context_init_server_ssl(_a, _b) (0) #define lws_tls_acme_sni_cert_destroy(_a) #endif void lws_ssl_destroy(struct lws_vhost *vhost); /* * lws_tls_ abstract backend implementations */ int lws_tls_server_client_cert_verify_config(struct lws_vhost *vh); int lws_tls_server_vhost_backend_init(const struct lws_context_creation_info *info, struct lws_vhost *vhost, struct lws *wsi); int lws_tls_server_new_nonblocking(struct lws *wsi, lws_sockfd_type accept_fd); enum lws_ssl_capable_status lws_tls_server_accept(struct lws *wsi); enum lws_ssl_capable_status lws_tls_server_abort_connection(struct lws *wsi); enum lws_ssl_capable_status __lws_tls_shutdown(struct lws *wsi); enum lws_ssl_capable_status lws_tls_client_connect(struct lws *wsi, char *errbuf, size_t len); int lws_tls_client_confirm_peer_cert(struct lws *wsi, char *ebuf, size_t ebuf_len); int lws_tls_client_create_vhost_context(struct lws_vhost *vh, const struct lws_context_creation_info *info, const char *cipher_list, const char *ca_filepath, const void *ca_mem, unsigned int ca_mem_len, const char *cert_filepath, const void *cert_mem, unsigned int cert_mem_len, const char *private_key_filepath, const void *key_mem, unsigned int key_mem_len); lws_tls_ctx * lws_tls_ctx_from_wsi(struct lws *wsi); int lws_ssl_get_error(struct lws *wsi, int n); int lws_context_init_client_ssl(const struct lws_context_creation_info *info, struct lws_vhost *vhost); void lws_ssl_info_callback(const lws_tls_conn *ssl, int where, int ret); int lws_tls_fake_POLLIN_for_buffered(struct lws_context_per_thread *pt); libwebsockets-4.3.5/lib/tls/tls-client.c000066400000000000000000000154271476025525100201750ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" static int lws_ssl_client_connect1(struct lws *wsi, char *errbuf, size_t len) { int n; n = lws_tls_client_connect(wsi, errbuf, len); switch (n) { case LWS_SSL_CAPABLE_ERROR: lws_tls_restrict_return_handshake(wsi); return -1; case LWS_SSL_CAPABLE_DONE: lws_tls_restrict_return_handshake(wsi); lws_metrics_caliper_report(wsi->cal_conn, METRES_GO); #if defined(LWS_WITH_CONMON) wsi->conmon.ciu_tls = (lws_conmon_interval_us_t) (lws_now_usecs() - wsi->conmon_datum); #endif return 1; /* connected */ case LWS_SSL_CAPABLE_MORE_SERVICE_WRITE: lws_callback_on_writable(wsi); /* fallthru */ case LWS_SSL_CAPABLE_MORE_SERVICE: case LWS_SSL_CAPABLE_MORE_SERVICE_READ: lwsi_set_state(wsi, LRS_WAITING_SSL); break; } return 0; /* retry */ } int lws_ssl_client_connect2(struct lws *wsi, char *errbuf, size_t len) { int n; if (lwsi_state(wsi) == LRS_WAITING_SSL) { n = lws_tls_client_connect(wsi, errbuf, len); lwsl_debug("%s: SSL_connect says %d\n", __func__, n); switch (n) { case LWS_SSL_CAPABLE_ERROR: lws_tls_restrict_return_handshake(wsi); if (lws_tls_client_confirm_peer_cert(wsi, errbuf, len)) { lws_metrics_caliper_report(wsi->cal_conn, METRES_NOGO); return -1; } // lws_snprintf(errbuf, len, "client connect failed"); return -1; case LWS_SSL_CAPABLE_DONE: break; /* connected */ case LWS_SSL_CAPABLE_MORE_SERVICE_WRITE: lws_callback_on_writable(wsi); /* fallthru */ case LWS_SSL_CAPABLE_MORE_SERVICE_READ: lwsi_set_state(wsi, LRS_WAITING_SSL); /* fallthru */ case LWS_SSL_CAPABLE_MORE_SERVICE: return 0; /* retry */ } } lws_tls_restrict_return_handshake(wsi); if (lws_tls_client_confirm_peer_cert(wsi, errbuf, len)) { lws_metrics_caliper_report(wsi->cal_conn, METRES_NOGO); return -1; } lws_metrics_caliper_report(wsi->cal_conn, METRES_GO); #if defined(LWS_WITH_CONMON) wsi->conmon.ciu_tls = (lws_conmon_interval_us_t) (lws_now_usecs() - wsi->conmon_datum); #endif return 1; /* connected */ } int lws_context_init_client_ssl(const struct lws_context_creation_info *info, struct lws_vhost *vhost) { const char *private_key_filepath = info->ssl_private_key_filepath; const char *cert_filepath = info->ssl_cert_filepath; const char *ca_filepath = info->ssl_ca_filepath; const char *cipher_list = info->ssl_cipher_list; lws_fakewsi_def_plwsa(&vhost->context->pt[0]); lws_fakewsi_prep_plwsa_ctx(vhost->context); if (vhost->options & LWS_SERVER_OPTION_ADOPT_APPLY_LISTEN_ACCEPT_CONFIG) return 0; if (vhost->tls.ssl_ctx) { cert_filepath = NULL; private_key_filepath = NULL; ca_filepath = NULL; } /* * for backwards-compatibility default to using ssl_... members, but * if the newer client-specific ones are given, use those */ if (info->client_ssl_cipher_list) cipher_list = info->client_ssl_cipher_list; if (info->client_ssl_cert_filepath) cert_filepath = info->client_ssl_cert_filepath; if (info->client_ssl_private_key_filepath) private_key_filepath = info->client_ssl_private_key_filepath; if (info->client_ssl_ca_filepath) ca_filepath = info->client_ssl_ca_filepath; if (vhost->tls.ssl_client_ctx) return 0; #if !defined(LWS_WITH_MBEDTLS) if (info->provided_client_ssl_ctx) { /* use the provided OpenSSL context if given one */ vhost->tls.ssl_client_ctx = info->provided_client_ssl_ctx; /* nothing for lib to delete */ vhost->tls.user_supplied_ssl_ctx = 1; return 0; } #endif if (!lws_check_opt(info->options, LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT)) return 0; if (lws_tls_client_create_vhost_context(vhost, info, cipher_list, ca_filepath, info->client_ssl_ca_mem, info->client_ssl_ca_mem_len, cert_filepath, info->client_ssl_cert_mem, info->client_ssl_cert_mem_len, private_key_filepath, info->client_ssl_key_mem, info->client_ssl_key_mem_len )) return 1; lwsl_info("created client ssl context for %s\n", vhost->name); /* * give him a fake wsi with context set, so he can use * lws_get_context() in the callback */ plwsa->vhost = vhost; /* not a real bound wsi */ vhost->protocols[0].callback((struct lws *)plwsa, LWS_CALLBACK_OPENSSL_LOAD_EXTRA_CLIENT_VERIFY_CERTS, vhost->tls.ssl_client_ctx, NULL, 0); return 0; } int lws_client_create_tls(struct lws *wsi, const char **pcce, int do_c1) { /* we can retry this... just cook the SSL BIO the first time */ if (wsi->tls.use_ssl & LCCSCF_USE_SSL) { int n; if (!wsi->tls.ssl) { #if defined(LWS_WITH_TLS) if (!wsi->transaction_from_pipeline_queue && lws_tls_restrict_borrow(wsi)) { *pcce = "tls restriction limit"; return CCTLS_RETURN_ERROR; } #endif if (lws_ssl_client_bio_create(wsi) < 0) { *pcce = "bio_create failed"; return CCTLS_RETURN_ERROR; } } if (!do_c1) return CCTLS_RETURN_DONE; lws_metrics_caliper_report(wsi->cal_conn, METRES_GO); lws_metrics_caliper_bind(wsi->cal_conn, wsi->a.context->mt_conn_tls); #if defined(LWS_WITH_CONMON) wsi->conmon_datum = lws_now_usecs(); #endif n = lws_ssl_client_connect1(wsi, (char *)wsi->a.context->pt[(int)wsi->tsi].serv_buf, wsi->a.context->pt_serv_buf_size); lwsl_debug("%s: lws_ssl_client_connect1: %d\n", __func__, n); if (!n) return CCTLS_RETURN_RETRY; /* caller should return 0 */ if (n < 0) { *pcce = (const char *)wsi->a.context->pt[(int)wsi->tsi].serv_buf; lws_metrics_caliper_report(wsi->cal_conn, METRES_NOGO); return CCTLS_RETURN_ERROR; } /* ...connect1 already handled caliper if SSL_accept done */ lws_tls_server_conn_alpn(wsi); } else wsi->tls.ssl = NULL; return CCTLS_RETURN_DONE; /* OK */ } libwebsockets-4.3.5/lib/tls/tls-jit-trust.c000066400000000000000000000433111476025525100206550ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" void lws_tls_kid_copy(union lws_tls_cert_info_results *ci, lws_tls_kid_t *kid) { /* * KIDs all seem to be 20 bytes / SHA1 or less. If we get one that * is bigger, treat only the first 20 bytes as significant. */ if ((size_t)ci->ns.len > sizeof(kid->kid)) kid->kid_len = sizeof(kid->kid); else kid->kid_len = (uint8_t)ci->ns.len; memcpy(kid->kid, ci->ns.name, kid->kid_len); } void lws_tls_kid_copy_kid(lws_tls_kid_t *kid, const lws_tls_kid_t *src) { int klen = sizeof(kid->kid); if (src->kid_len < klen) klen = src->kid_len; kid->kid_len = (uint8_t)klen; memcpy(kid->kid, src->kid, (size_t)klen); } int lws_tls_kid_cmp(const lws_tls_kid_t *a, const lws_tls_kid_t *b) { if (a->kid_len != b->kid_len) return 1; return memcmp(a->kid, b->kid, a->kid_len); } /* * We have the SKID and AKID for every peer cert captured, but they may be * in any order, and eg, falsely have sent the root CA, or an attacker may * send unresolveable self-referencing loops of KIDs. * * Let's sort them into the SKID -> AKID hierarchy, so the last entry is the * server cert and the first entry is the highest parent that the server sent. * Normally the top one will be an intermediate, and its AKID is the ID of the * root CA cert we would need to trust to validate the chain. * * It's not unknown the server is misconfigured to also send the root CA, if so * the top slot's AKID is empty and we should look for its SKID in the trust * blob. * * If we return 0, we succeeded and the AKID of ch[0] is the SKID we want to see * try to import from the trust blob. * * If we return nonzero, we can't identify what we want and should abandon the * connection. */ int lws_tls_jit_trust_sort_kids(struct lws *wsi, lws_tls_kid_chain_t *ch) { size_t hl; lws_tls_jit_inflight_t *inf; int n, m, sanity = 10; const char *host = wsi->cli_hostname_copy; char more = 1; lwsl_info("%s\n", __func__); if (!host) { if (wsi->stash && wsi->stash->cis[CIS_HOST]) host = wsi->stash->cis[CIS_HOST]; #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) else host = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_PEER_ADDRESS); } #endif if (!host) return 1; hl = strlen(host); /* something to work with? */ if (!ch->count) return 1; /* do we need to sort? */ if (ch->count > 1) { /* okie... */ while (more) { if (!sanity--) /* let's not get fooled into spinning */ return 1; more = 0; for (n = 0; n < ch->count - 1; n++) { if (!lws_tls_kid_cmp(&ch->skid[n], &ch->akid[n + 1])) /* next belongs with this one */ continue; /* * next doesn't belong with this one, let's * try to figure out where this one does belong * then */ for (m = 0; m < ch->count; m++) { if (n == m) continue; if (!lws_tls_kid_cmp(&ch->skid[n], &ch->akid[m])) { lws_tls_kid_t t; /* * m references us, so we * need to go one step above m, * swap m and n */ more = 1; t = ch->akid[m]; ch->akid[m] = ch->akid[n]; ch->akid[n] = t; t = ch->skid[m]; ch->skid[m] = ch->skid[n]; ch->skid[n] = t; break; } } if (more) break; } } /* then we should be sorted */ } for (n = 0; n < ch->count; n++) { lwsl_info("%s: AKID[%d]\n", __func__, n); lwsl_hexdump_info(ch->akid[n].kid, ch->akid[n].kid_len); lwsl_info("%s: SKID[%d]\n", __func__, n); lwsl_hexdump_info(ch->skid[n].kid, ch->skid[n].kid_len); } /* to go further, user must provide a lookup helper */ if (!wsi->a.context->system_ops || !wsi->a.context->system_ops->jit_trust_query) return 1; /* * If there's already a pending lookup for this host, let's bail and * just wait for that to complete (since it will be done async if we * can see it) */ lws_start_foreach_dll(struct lws_dll2 *, d, wsi->a.context->jit_inflight.head) { inf = lws_container_of(d, lws_tls_jit_inflight_t, list); if (!strcmp((const char *)&inf[1], host)) /* already being handled */ return 1; } lws_end_foreach_dll(d); /* * No... let's make an inflight entry for this host, then */ inf = lws_zalloc(sizeof(*inf) + hl + 1, __func__); if (!inf) return 1; memcpy(&inf[1], host, hl + 1); inf->refcount = (char)ch->count; lws_dll2_add_tail(&inf->list, &wsi->a.context->jit_inflight); /* * ...kid_chain[0] AKID should indicate the right CA SKID that we want. * * Because of cross-signing, we check all of them and accept we may get * multiple (the inflight accepts up to 2) CAs needed. */ for (n = 0; n < ch->count; n++) wsi->a.context->system_ops->jit_trust_query(wsi->a.context, ch->akid[n].kid, (size_t)ch->akid[n].kid_len, (void *)inf); return 0; } static void tag_to_vh_name(char *result, size_t max, uint32_t tag) { lws_snprintf(result, max, "jitt-%08X", tag); } int lws_tls_jit_trust_vhost_bind(struct lws_context *cx, const char *address, struct lws_vhost **pvh) { lws_tls_jit_cache_item_t *ci, jci; lws_tls_jit_inflight_t *inf; char vhtag[32]; size_t size; int n; if (lws_cache_item_get(cx->trust_cache, address, (const void **)&ci, &size)) /* * There's no cached info, we have to start from scratch on * this one */ return 1; /* gotten cache item may be evicted by jit_trust_query */ jci = *ci; /* * We have some trust cache information for this host already, it tells * us the trusted CA SKIDs we found before, and the xor tag used to name * the vhost configured for these trust CAs in its SSL_CTX. * * Let's check first if the correct prepared vhost already exists, if * so, we can just bind to that and go. */ tag_to_vh_name(vhtag, sizeof(vhtag), jci.xor_tag); *pvh = lws_get_vhost_by_name(cx, vhtag); if (*pvh) { lwsl_info("%s: %s -> existing %s\n", __func__, address, vhtag); /* hit, let's just use that then */ return 0; } /* * ... so, we know the SKIDs of the missing CAs, but we don't have the * DERs for them, and so no configured vhost trusting them yet. We have * had the DERs at some point, but we can't afford to cache them, so * we will have to get them again. * * Let's make an inflight for this, it will create the vhost when it * completes. If syncrhronous, then it will complete before we leave * here, otherwise it will have a life of its own until all the * queries use the cb to succeed or fail. */ size = strlen(address); inf = lws_zalloc(sizeof(*inf) + size + 1, __func__); if (!inf) return 1; memcpy(&inf[1], address, size + 1); inf->refcount = (char)jci.count_skids; lws_dll2_add_tail(&inf->list, &cx->jit_inflight); /* * ...kid_chain[0] AKID should indicate the right CA SKID that we want. * * Because of cross-signing, we check all of them and accept we may get * multiple (we can handle 3) CAs needed. */ for (n = 0; n < jci.count_skids; n++) cx->system_ops->jit_trust_query(cx, jci.skids[n].kid, (size_t)jci.skids[n].kid_len, (void *)inf); /* ... in case synchronous and it already finished the queries */ *pvh = lws_get_vhost_by_name(cx, vhtag); if (*pvh) { /* hit, let's just use that then */ lwsl_info("%s: bind to created vhost %s\n", __func__, vhtag); return 0; } else lwsl_err("%s: unable to bind to %s\n", __func__, vhtag); /* right now, nothing to offer */ return 1; } void lws_tls_jit_trust_inflight_destroy(lws_tls_jit_inflight_t *inf) { int n; for (n = 0; n < inf->ders; n++) lws_free_set_NULL(inf->der[n]); lws_dll2_remove(&inf->list); lws_free(inf); } static int inflight_destroy(struct lws_dll2 *d, void *user) { lws_tls_jit_inflight_t *inf; inf = lws_container_of(d, lws_tls_jit_inflight_t, list); lws_tls_jit_trust_inflight_destroy(inf); return 0; } void lws_tls_jit_trust_inflight_destroy_all(struct lws_context *cx) { lws_dll2_foreach_safe(&cx->jit_inflight, cx, inflight_destroy); } static void unref_vh_grace_cb(lws_sorted_usec_list_t *sul) { struct lws_vhost *vh = lws_container_of(sul, struct lws_vhost, sul_unref); lwsl_info("%s: %s\n", __func__, vh->lc.gutag); lws_vhost_destroy(vh); } void lws_tls_jit_trust_vh_start_grace(struct lws_vhost *vh) { lwsl_info("%s: %s: unused, grace %dms\n", __func__, vh->lc.gutag, vh->context->vh_idle_grace_ms); lws_sul_schedule(vh->context, 0, &vh->sul_unref, unref_vh_grace_cb, (lws_usec_t)vh->context->vh_idle_grace_ms * LWS_US_PER_MS); } #if defined(_DEBUG) static void lws_tls_jit_trust_cert_info(const uint8_t *der, size_t der_len) { struct lws_x509_cert *x; union lws_tls_cert_info_results *u; char p = 0, buf[192 + sizeof(*u)]; if (lws_x509_create(&x)) return; if (!lws_x509_parse_from_pem(x, der, der_len)) { u = (union lws_tls_cert_info_results *)buf; if (!lws_x509_info(x, LWS_TLS_CERT_INFO_ISSUER_NAME, u, 192)) { lwsl_info("ISS: %s\n", u->ns.name); p = 1; } if (!lws_x509_info(x, LWS_TLS_CERT_INFO_COMMON_NAME, u, 192)) { lwsl_info("CN: %s\n", u->ns.name); p = 1; } if (!p) { lwsl_err("%s: unable to get any info\n", __func__); lwsl_hexdump_err(der, der_len); } } else lwsl_err("%s: unable to load DER\n", __func__); lws_x509_destroy(&x); } #endif /* * This processes the JIT Trust lookup results independent of the tls backend. */ int lws_tls_jit_trust_got_cert_cb(struct lws_context *cx, void *got_opaque, const uint8_t *skid, size_t skid_len, const uint8_t *der, size_t der_len) { lws_tls_jit_inflight_t *inf = (lws_tls_jit_inflight_t *)got_opaque; struct lws_context_creation_info info; lws_tls_jit_cache_item_t jci; struct lws_vhost *v; char vhtag[20]; char hit = 0; int n; /* * Before anything else, check the inf is still valid. In the low * probability but possible case it was reallocated to be a different * inflight, that may cause different CA certs to apply to a connection, * but since mbedtls will then validate the server cert using the wrong * trusted CA, it will just cause temporary conn fail. */ lws_start_foreach_dll(struct lws_dll2 *, e, cx->jit_inflight.head) { lws_tls_jit_inflight_t *i = lws_container_of(e, lws_tls_jit_inflight_t, list); if (i == inf) { hit = 1; break; } } lws_end_foreach_dll(e); if (!hit) /* inf has already gone */ return 1; inf->refcount--; if (skid_len >= 4) inf->tag ^= *((uint32_t *)skid); if (der && inf->ders < (int)LWS_ARRAY_SIZE(inf->der) && inf->refcount) { /* * We have a trusted CA, but more results coming... stash it * in heap. */ inf->kid[inf->ders].kid_len = (uint8_t)((skid_len > (uint8_t)sizeof(inf->kid[inf->ders].kid)) ? sizeof(inf->kid[inf->ders].kid) : skid_len); memcpy(inf->kid[inf->ders].kid, skid, inf->kid[inf->ders].kid_len); inf->der[inf->ders] = lws_malloc(der_len, __func__); if (!inf->der[inf->ders]) return 1; memcpy(inf->der[inf->ders], der, der_len); inf->der_len[inf->ders] = (short)der_len; inf->ders++; return 0; } /* * We accept up to three valid CA, and then end the inflight early. * Any further pending results are dropped, since we got all we could * use. Up to two valid CA would be held in the inflight and the other * provided in the params. * * If we did not already fill up the inflight, keep waiting for any * others expected */ if (inf->refcount && inf->ders < (int)LWS_ARRAY_SIZE(inf->der)) return 0; if (!der && !inf->ders) { lwsl_warn("%s: no trusted CA certs matching\n", __func__); goto destroy_inf; } tag_to_vh_name(vhtag, sizeof(vhtag), inf->tag); /* * We have got at least one CA, it's all the CAs we're going to get, * or that we can handle. So we have to process and drop the inf. * * First let's make a cache entry with a shortish ttl, mapping the * hostname we were trying to connect to, to the SKIDs that actually * had trust results. This may come in handy later when we want to * connect to the same host again, but any vhost from before has been * removed... we can just ask for the specific CAs to regenerate the * vhost, without having to first fail the connection attempt to get the * server cert. * * The cache entry can be evicted at any time, so it is selfcontained. * If it's also lost, we start over with the initial failing connection * to figure out what we need to make it work. */ memset(&jci, 0, sizeof(jci)); jci.xor_tag = inf->tag; /* copy the SKIDs from the inflight and params into the cache item */ for (n = 0; n < (int)LWS_ARRAY_SIZE(inf->der); n++) if (inf->kid[n].kid_len) lws_tls_kid_copy_kid(&jci.skids[jci.count_skids++], &inf->kid[n]); if (skid_len) { if (skid_len > sizeof(inf->kid[0].kid)) skid_len = sizeof(inf->kid[0].kid); jci.skids[jci.count_skids].kid_len = (uint8_t)skid_len; memcpy(jci.skids[jci.count_skids++].kid, skid, skid_len); } lwsl_info("%s: adding cache mapping %s -> %s\n", __func__, (const char *)&inf[1], vhtag); if (lws_cache_write_through(cx->trust_cache, (const char *)&inf[1], (const uint8_t *)&jci, sizeof(jci), lws_now_usecs() + (3600ll *LWS_US_PER_SEC), NULL)) lwsl_warn("%s: add to cache failed\n", __func__); /* is there already a vhost for this commutative-xor SKID trust? */ if (lws_get_vhost_by_name(cx, vhtag)) { lwsl_info("%s: tag vhost %s already exists, skipping\n", __func__, vhtag); goto destroy_inf; } /* * We only end up here when we attempted a connection to this hostname. * * We have the identified CA trust DER(s) to hand, let's create the * necessary vhost + prepared SSL_CTX for it to use on the retry, it * will be used straight away if the retry comes before the idle vhost * timeout. * * We also use this path in the case we have the cache entry but no * matching vhost already existing, to create one. */ memset(&info, 0, sizeof(info)); info.vhost_name = vhtag; info.port = CONTEXT_PORT_NO_LISTEN; info.options = cx->options; /* * We have to create the vhost with the first valid trusted DER... * if we have a params one, use that so the rest are all from inflight */ if (der) { info.client_ssl_ca_mem = der; info.client_ssl_ca_mem_len = (unsigned int)der_len; n = 0; } else { info.client_ssl_ca_mem = inf->der[0]; info.client_ssl_ca_mem_len = (unsigned int)inf->der_len[0]; n = 1; } #if defined(_DEBUG) lws_tls_jit_trust_cert_info(info.client_ssl_ca_mem, info.client_ssl_ca_mem_len); #endif info.protocols = cx->protocols_copy; v = lws_create_vhost(cx, &info); if (!v) lwsl_err("%s: failed to create vh %s\n", __func__, vhtag); v->grace_after_unref = 1; lws_tls_jit_trust_vh_start_grace(v); /* * Do we need to add more trusted certs from inflight? */ while (n < inf->ders) { #if defined(_DEBUG) lws_tls_jit_trust_cert_info(inf->der[n], (size_t)inf->der_len[n]); #endif if (lws_tls_client_vhost_extra_cert_mem(v, inf->der[n], (size_t)inf->der_len[n])) lwsl_err("%s: add extra cert failed\n", __func__); n++; } lwsl_info("%s: created jitt %s -> vh %s\n", __func__, (const char *)&inf[1], vhtag); destroy_inf: lws_tls_jit_trust_inflight_destroy(inf); return 0; } /* * Refer to ./READMEs/README.jit-trust.md for blob layout specification */ int lws_tls_jit_trust_blob_queury_skid(const void *_blob, size_t blen, const uint8_t *skid, size_t skid_len, const uint8_t **prpder, size_t *prder_len) { const uint8_t *pskidlen, *pskids, *pder, *blob = (uint8_t *)_blob; const uint16_t *pderlen; int certs; /* sanity check blob length and magic */ if (blen < 32768 || lws_ser_ru32be(blob) != LWS_JIT_TRUST_MAGIC_BE || lws_ser_ru32be(blob + LJT_OFS_END) != blen) { lwsl_err("%s: blob not sane\n", __func__); return -1; } if (!skid_len) return 1; /* point into the various sub-tables */ certs = (int)lws_ser_ru16be(blob + LJT_OFS_32_COUNT_CERTS); pderlen = (uint16_t *)(blob + lws_ser_ru32be(blob + LJT_OFS_32_DERLEN)); pskidlen = blob + lws_ser_ru32be(blob + LJT_OFS_32_SKIDLEN); pskids = blob + lws_ser_ru32be(blob + LJT_OFS_32_SKID); pder = blob + LJT_OFS_DER; /* check each cert SKID in turn, return the DER if found */ while (certs--) { /* paranoia / sanity */ assert(pskids < blob + blen); assert(pder < blob + blen); assert(pskidlen < blob + blen); assert((uint8_t *)pderlen < blob + blen); /* we will accept to match on truncated SKIDs */ if (*pskidlen >= skid_len && !memcmp(skid, pskids, skid_len)) { /* * We found a trusted CA cert of the right SKID */ *prpder = pder; *prder_len = lws_ser_ru16be((uint8_t *)pderlen); return 0; } pder += lws_ser_ru16be((uint8_t *)pderlen); pskids += *pskidlen; pderlen++; pskidlen++; } return 1; } libwebsockets-4.3.5/lib/tls/tls-network.c000066400000000000000000000155321476025525100204050ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" /* * fakes POLLIN on all tls guys with buffered rx * * returns nonzero if any tls guys had POLLIN faked */ int lws_tls_fake_POLLIN_for_buffered(struct lws_context_per_thread *pt) { int ret = 0; lws_start_foreach_dll_safe(struct lws_dll2 *, p, p1, lws_dll2_get_head(&pt->tls.dll_pending_tls_owner)) { struct lws *wsi = lws_container_of(p, struct lws, tls.dll_pending_tls); if (wsi->position_in_fds_table >= 0) { pt->fds[wsi->position_in_fds_table].revents = (short) (pt->fds[wsi->position_in_fds_table].revents | (pt->fds[wsi->position_in_fds_table].events & LWS_POLLIN)); ret |= pt->fds[wsi->position_in_fds_table].revents & LWS_POLLIN; } } lws_end_foreach_dll_safe(p, p1); return !!ret; } void __lws_ssl_remove_wsi_from_buffered_list(struct lws *wsi) { lws_dll2_remove(&wsi->tls.dll_pending_tls); } void lws_ssl_remove_wsi_from_buffered_list(struct lws *wsi) { struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; lws_pt_lock(pt, __func__); __lws_ssl_remove_wsi_from_buffered_list(wsi); lws_pt_unlock(pt); } #if defined(LWS_WITH_SERVER) int lws_tls_check_cert_lifetime(struct lws_vhost *v) { time_t now = (time_t)lws_now_secs(), life = 0; struct lws_acme_cert_aging_args caa; union lws_tls_cert_info_results ir; int n; if (v->tls.ssl_ctx && !v->tls.skipped_certs) { if (now < 1542933698) /* Nov 23 2018 00:42 UTC */ /* our clock is wrong and we can't judge the certs */ return -1; n = lws_tls_vhost_cert_info(v, LWS_TLS_CERT_INFO_VALIDITY_TO, &ir, 0); if (n) return 1; life = (ir.time - now) / (24 * 3600); lwsl_vhost_notice(v, " vhost %s: cert expiry: %dd", v->name, (int)life); } else lwsl_vhost_info(v, " vhost %s: no cert", v->name); memset(&caa, 0, sizeof(caa)); caa.vh = v; lws_broadcast(&v->context->pt[0], LWS_CALLBACK_VHOST_CERT_AGING, (void *)&caa, (size_t)(ssize_t)life); return 0; } int lws_tls_check_all_cert_lifetimes(struct lws_context *context) { struct lws_vhost *v = context->vhost_list; while (v) { if (lws_tls_check_cert_lifetime(v) < 0) return -1; v = v->vhost_next; } return 0; } /* * LWS_TLS_EXTANT_NO : skip adding the cert * LWS_TLS_EXTANT_YES : use the cert and private key paths normally * LWS_TLS_EXTANT_ALTERNATIVE: normal paths not usable, try alternate if poss */ enum lws_tls_extant lws_tls_generic_cert_checks(struct lws_vhost *vhost, const char *cert, const char *private_key) { int n, m; /* * The user code can choose to either pass the cert and * key filepaths using the info members like this, or it can * leave them NULL; force the vhost SSL_CTX init using the info * options flag LWS_SERVER_OPTION_CREATE_VHOST_SSL_CTX; and * set up the cert himself using the user callback * LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS, which * happened just above and has the vhost SSL_CTX * in the user * parameter. */ if (!cert || !private_key) return LWS_TLS_EXTANT_NO; n = (int)lws_tls_use_any_upgrade_check_extant(cert); if (n == LWS_TLS_EXTANT_ALTERNATIVE) return LWS_TLS_EXTANT_ALTERNATIVE; m = (int)lws_tls_use_any_upgrade_check_extant(private_key); if (m == LWS_TLS_EXTANT_ALTERNATIVE) return LWS_TLS_EXTANT_ALTERNATIVE; if ((n == LWS_TLS_EXTANT_NO || m == LWS_TLS_EXTANT_NO) && (vhost->options & LWS_SERVER_OPTION_IGNORE_MISSING_CERT)) { lwsl_vhost_notice(vhost, "Ignoring missing %s or %s", cert, private_key); vhost->tls.skipped_certs = 1; return LWS_TLS_EXTANT_NO; } /* * the cert + key exist */ return LWS_TLS_EXTANT_YES; } /* * update the cert for every vhost using the given path */ int lws_tls_cert_updated(struct lws_context *context, const char *certpath, const char *keypath, const char *mem_cert, size_t len_mem_cert, const char *mem_privkey, size_t len_mem_privkey) { struct lws wsi; wsi.a.context = context; lws_start_foreach_ll(struct lws_vhost *, v, context->vhost_list) { wsi.a.vhost = v; /* not a real bound wsi */ if (v->tls.alloc_cert_path && v->tls.key_path && !strcmp(v->tls.alloc_cert_path, certpath) && !strcmp(v->tls.key_path, keypath)) { lws_tls_server_certs_load(v, &wsi, certpath, keypath, mem_cert, len_mem_cert, mem_privkey, len_mem_privkey); if (v->tls.skipped_certs) lwsl_vhost_notice(v, "vhost %s: cert unset", v->name); } } lws_end_foreach_ll(v, vhost_next); return 0; } int lws_gate_accepts(struct lws_context *context, int on) { struct lws_vhost *v = context->vhost_list; lwsl_notice("%s: on = %d\n", __func__, on); if (context->tls_gate_accepts == (char)on) return 0; context->tls_gate_accepts = (char)on; while (v) { lws_start_foreach_dll(struct lws_dll2 *, d, lws_dll2_get_head(&v->listen_wsi)) { struct lws *wsi = lws_container_of(d, struct lws, listen_list); if (v->tls.use_ssl && lws_change_pollfd(wsi, on ? LWS_POLLIN : 0, on ? 0 : LWS_POLLIN)) lwsl_cx_notice(context, "Unable to set POLLIN %d", on); } lws_end_foreach_dll(d); v = v->vhost_next; } return 0; } #endif /* comma-separated alpn list, like "h2,http/1.1" to openssl alpn format */ int lws_alpn_comma_to_openssl(const char *comma, uint8_t *os, int len) { uint8_t *oos = os, *plen = NULL; if (!comma) return 0; while (*comma && len > 2) { if (!plen && *comma == ' ') { comma++; continue; } if (!plen) { plen = os++; len--; } if (*comma == ',') { *plen = (uint8_t)lws_ptr_diff(os, plen + 1); plen = NULL; comma++; } else { *os++ = (uint8_t)*comma++; len--; } } if (plen) *plen = (uint8_t)lws_ptr_diff(os, plen + 1); *os = 0; return lws_ptr_diff(os, oos); } libwebsockets-4.3.5/lib/tls/tls-server.c000066400000000000000000000247631476025525100202300ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #if defined(LWS_WITH_SERVER) static void lws_sul_tls_cb(lws_sorted_usec_list_t *sul) { struct lws_context_per_thread *pt = lws_container_of(sul, struct lws_context_per_thread, sul_tls); lws_tls_check_all_cert_lifetimes(pt->context); __lws_sul_insert_us(&pt->pt_sul_owner[LWSSULLI_MISS_IF_SUSPENDED], &pt->sul_tls, (lws_usec_t)24 * 3600 * LWS_US_PER_SEC); } int lws_context_init_server_ssl(const struct lws_context_creation_info *info, struct lws_vhost *vhost) { struct lws_context *context = vhost->context; lws_fakewsi_def_plwsa(&vhost->context->pt[0]); lws_fakewsi_prep_plwsa_ctx(vhost->context); if (!lws_check_opt(info->options, LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT)) { vhost->tls.use_ssl = 0; return 0; } /* * If he is giving a server cert, take it as a sign he wants to use * it on this vhost. User code can leave the cert filepath NULL and * set the LWS_SERVER_OPTION_CREATE_VHOST_SSL_CTX option itself, in * which case he's expected to set up the cert himself at * LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS, which * provides the vhost SSL_CTX * in the user parameter. */ if (info->ssl_cert_filepath || info->server_ssl_cert_mem) vhost->options |= LWS_SERVER_OPTION_CREATE_VHOST_SSL_CTX; if (info->port != CONTEXT_PORT_NO_LISTEN) { vhost->tls.use_ssl = lws_check_opt(vhost->options, LWS_SERVER_OPTION_CREATE_VHOST_SSL_CTX); if (vhost->tls.use_ssl && info->ssl_cipher_list) lwsl_notice(" SSL ciphers: '%s'\n", info->ssl_cipher_list); lwsl_notice(" Vhost '%s' using %sTLS mode\n", vhost->name, vhost->tls.use_ssl ? "" : "non-"); } /* * give him a fake wsi with context + vhost set, so he can use * lws_get_context() in the callback */ plwsa->vhost = vhost; /* not a real bound wsi */ /* * as a server, if we are requiring clients to identify themselves * then set the backend up for it */ if (lws_check_opt(info->options, LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT)) /* Normally SSL listener rejects non-ssl, optionally allow */ vhost->tls.allow_non_ssl_on_ssl_port = 1; /* * give user code a chance to load certs into the server * allowing it to verify incoming client certs */ if (vhost->tls.use_ssl) { if (lws_tls_server_vhost_backend_init(info, vhost, (struct lws *)plwsa)) return -1; lws_tls_server_client_cert_verify_config(vhost); if (vhost->protocols[0].callback((struct lws *)plwsa, LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS, vhost->tls.ssl_ctx, vhost, 0)) return -1; } if (vhost->tls.use_ssl) lws_context_init_alpn(vhost); /* check certs in a few seconds (after protocol init) and then once a day */ context->pt[0].sul_tls.cb = lws_sul_tls_cb; __lws_sul_insert_us(&context->pt[0].pt_sul_owner[LWSSULLI_MISS_IF_SUSPENDED], &context->pt[0].sul_tls, (lws_usec_t)5 * LWS_US_PER_SEC); return 0; } #endif int lws_server_socket_service_ssl(struct lws *wsi, lws_sockfd_type accept_fd, char from_pollin) { struct lws_context *context = wsi->a.context; struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; struct lws_vhost *vh; ssize_t s; int n; if (!LWS_SSL_ENABLED(wsi->a.vhost)) return 0; switch (lwsi_state(wsi)) { case LRS_SSL_INIT: if (wsi->tls.ssl) lwsl_err("%s: leaking ssl\n", __func__); if (accept_fd == LWS_SOCK_INVALID) assert(0); if (lws_tls_restrict_borrow(wsi)) { lwsl_err("%s: failed on ssl restriction\n", __func__); return 1; } if (lws_tls_server_new_nonblocking(wsi, accept_fd)) { lwsl_err("%s: failed on lws_tls_server_new_nonblocking\n", __func__); if (accept_fd != LWS_SOCK_INVALID) compatible_close(accept_fd); lws_tls_restrict_return(wsi); goto fail; } /* * we are not accepted yet, but we need to enter ourselves * as a live connection. That way we can retry when more * pieces come if we're not sorted yet */ lwsi_set_state(wsi, LRS_SSL_ACK_PENDING); lws_pt_lock(pt, __func__); if (__insert_wsi_socket_into_fds(context, wsi)) { lwsl_err("%s: failed to insert into fds\n", __func__); goto fail; } lws_pt_unlock(pt); lws_set_timeout(wsi, PENDING_TIMEOUT_SSL_ACCEPT, (int)context->timeout_secs); lwsl_debug("inserted SSL accept into fds, trying SSL_accept\n"); /* fallthru */ case LRS_SSL_ACK_PENDING: if (lws_change_pollfd(wsi, LWS_POLLOUT, 0)) { lwsl_err("%s: lws_change_pollfd failed\n", __func__); goto fail; } if (wsi->a.vhost->tls.allow_non_ssl_on_ssl_port && !wsi->skip_fallback) { /* * We came here by POLLIN, so there is supposed to be * something to read... */ s = recv(wsi->desc.sockfd, (char *)pt->serv_buf, context->pt_serv_buf_size, MSG_PEEK); /* * We have LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT.. * this just means don't hang up on him because of no * tls hello... what happens next is driven by * additional option flags: * * none: fail the connection * * LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS: * Destroy the TLS, issue a redirect using plaintext * http (this may not be accepted by a client that * has visited the site before and received an STS * header). * * LWS_SERVER_OPTION_ALLOW_HTTP_ON_HTTPS_LISTENER: * Destroy the TLS, continue and serve normally * using http * * LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG: * Destroy the TLS, apply whatever role and protocol * were told in the vhost info struct * .listen_accept_role / .listen_accept_protocol and * continue with that */ if (s >= 1 && pt->serv_buf[0] >= ' ') { /* * TLS content-type for Handshake is 0x16, and * for ChangeCipherSpec Record, it's 0x14 * * A non-ssl session will start with the HTTP * method in ASCII. If we see it's not a legit * SSL handshake kill the SSL for this * connection and try to handle as a HTTP * connection upgrade directly. */ wsi->tls.use_ssl = 0; lws_tls_server_abort_connection(wsi); /* * care... this creates wsi with no ssl when ssl * is enabled and normally mandatory */ wsi->tls.ssl = NULL; if (lws_check_opt(wsi->a.vhost->options, LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS)) { lwsl_info("%s: redirecting from http " "to https\n", __func__); wsi->tls.redirect_to_https = 1; goto notls_accepted; } if (lws_check_opt(wsi->a.vhost->options, LWS_SERVER_OPTION_ALLOW_HTTP_ON_HTTPS_LISTENER)) { lwsl_info("%s: allowing unencrypted " "http service on tls port\n", __func__); goto notls_accepted; } if (lws_check_opt(wsi->a.vhost->options, LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG)) { if (lws_http_to_fallback(wsi, NULL, 0)) goto fail; lwsl_info("%s: allowing non-tls " "fallback\n", __func__); goto notls_accepted; } lwsl_notice("%s: client did not send a valid " "tls hello (default vhost %s)\n", __func__, wsi->a.vhost->name); goto fail; } if (!s) { /* * POLLIN but nothing to read is supposed to * mean the connection is gone, we should * fail out... * */ lwsl_debug("%s: PEEKed 0 (from_pollin %d)\n", __func__, from_pollin); if (!from_pollin) /* * If this wasn't actually info from a * pollin let it go around again until * either data came or we still get told * zero length peek AND POLLIN */ goto punt; /* * treat as remote closed */ goto fail; } if (s < 0 && (LWS_ERRNO == LWS_EAGAIN || LWS_ERRNO == LWS_EWOULDBLOCK)) { punt: /* * well, we get no way to know ssl or not * so go around again waiting for something * to come and give us a hint, or timeout the * connection. */ if (lws_change_pollfd(wsi, 0, LWS_POLLIN)) { lwsl_err("%s: change_pollfd failed\n", __func__); return -1; } lwsl_info("SSL_ERROR_WANT_READ\n"); return 0; } } /* normal SSL connection processing path */ errno = 0; n = lws_tls_server_accept(wsi); lwsl_info("SSL_accept says %d\n", n); switch (n) { case LWS_SSL_CAPABLE_DONE: lws_tls_restrict_return_handshake(wsi); break; case LWS_SSL_CAPABLE_ERROR: lws_tls_restrict_return_handshake(wsi); lwsl_info("%s: SSL_accept failed socket %u: %d\n", __func__, wsi->desc.sockfd, n); wsi->socket_is_permanently_unusable = 1; goto fail; default: /* MORE_SERVICE */ return 0; } /* adapt our vhost to match the SNI SSL_CTX that was chosen */ vh = context->vhost_list; while (vh) { if (!vh->being_destroyed && wsi->tls.ssl && vh->tls.ssl_ctx == lws_tls_ctx_from_wsi(wsi)) { lwsl_info("setting wsi to vh %s\n", vh->name); lws_vhost_bind_wsi(vh, wsi); break; } vh = vh->vhost_next; } /* OK, we are accepted... give him some time to negotiate */ lws_set_timeout(wsi, PENDING_TIMEOUT_ESTABLISH_WITH_SERVER, (int)context->timeout_secs); lwsi_set_state(wsi, LRS_ESTABLISHED); if (lws_tls_server_conn_alpn(wsi)) { lwsl_warn("%s: fail on alpn\n", __func__); goto fail; } lwsl_debug("accepted new SSL conn\n"); break; default: break; } return 0; notls_accepted: lwsi_set_state(wsi, LRS_ESTABLISHED); return 0; fail: return 1; } libwebsockets-4.3.5/lib/tls/tls-sessions.c000066400000000000000000000037031476025525100205570ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2021 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" void lws_tls_session_tag_discrete(const char *vhname, const char *host, uint16_t port, char *buf, size_t len) { /* * We have to include the vhost name in the session tag, since * different vhosts may make connections to the same endpoint using * different client certs. */ lws_snprintf(buf, len, "%s_%s_%u", vhname, host, (unsigned int)port); } int lws_tls_session_tag_from_wsi(struct lws *wsi, char *buf, size_t len) { const char *host; if (!wsi) return 1; if (!wsi->stash) return 1; host = wsi->stash->cis[CIS_HOST]; if (!host) host = wsi->stash->cis[CIS_ADDRESS]; if (!host) return 1; lws_tls_session_tag_discrete(wsi->a.vhost->name, host, wsi->c_port, buf, len); return 0; } libwebsockets-4.3.5/lib/tls/tls.c000066400000000000000000000305571476025525100167220ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" #include "private-lib-tls.h" #if defined(LWS_WITH_NETWORK) #if defined(LWS_WITH_MBEDTLS) || (defined(OPENSSL_VERSION_NUMBER) && \ OPENSSL_VERSION_NUMBER >= 0x10002000L) static int alpn_cb(SSL *s, const unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg) { #if !defined(LWS_WITH_MBEDTLS) struct alpn_ctx *alpn_ctx = (struct alpn_ctx *)arg; if (SSL_select_next_proto((unsigned char **)out, outlen, alpn_ctx->data, alpn_ctx->len, in, inlen) != OPENSSL_NPN_NEGOTIATED) return SSL_TLSEXT_ERR_NOACK; #endif return SSL_TLSEXT_ERR_OK; } #endif int lws_tls_restrict_borrow(struct lws *wsi) { struct lws_context *cx = wsi->a.context; if (cx->simultaneous_ssl_restriction && cx->simultaneous_ssl >= cx->simultaneous_ssl_restriction) { lwsl_notice("%s: tls connection limit %d\n", __func__, cx->simultaneous_ssl); return 1; } if (cx->simultaneous_ssl_handshake_restriction && cx->simultaneous_ssl_handshake >= cx->simultaneous_ssl_handshake_restriction) { lwsl_notice("%s: tls handshake limit %d\n", __func__, cx->simultaneous_ssl); return 1; } cx->simultaneous_ssl++; cx->simultaneous_ssl_handshake++; wsi->tls_borrowed_hs = 1; wsi->tls_borrowed = 1; lwsl_info("%s: %d -> %d\n", __func__, cx->simultaneous_ssl - 1, cx->simultaneous_ssl); assert(!cx->simultaneous_ssl_restriction || cx->simultaneous_ssl <= cx->simultaneous_ssl_restriction); assert(!cx->simultaneous_ssl_handshake_restriction || cx->simultaneous_ssl_handshake <= cx->simultaneous_ssl_handshake_restriction); #if defined(LWS_WITH_SERVER) lws_gate_accepts(cx, (cx->simultaneous_ssl_restriction && cx->simultaneous_ssl == cx->simultaneous_ssl_restriction) || (cx->simultaneous_ssl_handshake_restriction && cx->simultaneous_ssl_handshake == cx->simultaneous_ssl_handshake_restriction)); #endif return 0; } static void _lws_tls_restrict_return(struct lws *wsi) { #if defined(LWS_WITH_SERVER) struct lws_context *cx = wsi->a.context; assert(cx->simultaneous_ssl_handshake >= 0); assert(cx->simultaneous_ssl >= 0); lws_gate_accepts(cx, (cx->simultaneous_ssl_restriction && cx->simultaneous_ssl == cx->simultaneous_ssl_restriction) || (cx->simultaneous_ssl_handshake_restriction && cx->simultaneous_ssl_handshake == cx->simultaneous_ssl_handshake_restriction)); #endif } void lws_tls_restrict_return_handshake(struct lws *wsi) { struct lws_context *cx = wsi->a.context; /* we're just returning the hs part */ if (!wsi->tls_borrowed_hs) return; wsi->tls_borrowed_hs = 0; /* return it one time per wsi */ cx->simultaneous_ssl_handshake--; lwsl_info("%s: %d -> %d\n", __func__, cx->simultaneous_ssl_handshake + 1, cx->simultaneous_ssl_handshake); _lws_tls_restrict_return(wsi); } void lws_tls_restrict_return(struct lws *wsi) { struct lws_context *cx = wsi->a.context; if (!wsi->tls_borrowed) return; wsi->tls_borrowed = 0; cx->simultaneous_ssl--; lwsl_info("%s: %d -> %d\n", __func__, cx->simultaneous_ssl + 1, cx->simultaneous_ssl); /* We're returning everything, even if hs didn't complete */ if (wsi->tls_borrowed_hs) lws_tls_restrict_return_handshake(wsi); else _lws_tls_restrict_return(wsi); } void lws_context_init_alpn(struct lws_vhost *vhost) { #if defined(LWS_WITH_MBEDTLS) || (defined(OPENSSL_VERSION_NUMBER) && \ OPENSSL_VERSION_NUMBER >= 0x10002000L) const char *alpn_comma = vhost->context->tls.alpn_default; if (vhost->tls.alpn) alpn_comma = vhost->tls.alpn; lwsl_info(" Server '%s' advertising ALPN: %s\n", vhost->name, alpn_comma); vhost->tls.alpn_ctx.len = (uint8_t)lws_alpn_comma_to_openssl(alpn_comma, vhost->tls.alpn_ctx.data, sizeof(vhost->tls.alpn_ctx.data) - 1); SSL_CTX_set_alpn_select_cb(vhost->tls.ssl_ctx, alpn_cb, &vhost->tls.alpn_ctx); #else lwsl_err(" HTTP2 / ALPN configured " "but not supported by OpenSSL 0x%lx\n", OPENSSL_VERSION_NUMBER); #endif // OPENSSL_VERSION_NUMBER >= 0x10002000L } int lws_tls_server_conn_alpn(struct lws *wsi) { #if defined(LWS_WITH_MBEDTLS) || (defined(OPENSSL_VERSION_NUMBER) && \ OPENSSL_VERSION_NUMBER >= 0x10002000L) const unsigned char *name = NULL; char cstr[10]; unsigned len; lwsl_info("%s\n", __func__); if (!wsi->tls.ssl) { lwsl_err("%s: non-ssl\n", __func__); return 0; } SSL_get0_alpn_selected(wsi->tls.ssl, &name, &len); if (!len) { lwsl_info("no ALPN upgrade\n"); return 0; } if (len > sizeof(cstr) - 1) len = sizeof(cstr) - 1; memcpy(cstr, name, len); cstr[len] = '\0'; lwsl_info("%s: negotiated '%s' using ALPN\n", __func__, cstr); wsi->tls.use_ssl |= LCCSCF_USE_SSL; return lws_role_call_alpn_negotiated(wsi, (const char *)cstr); #else lwsl_err("%s: openssl too old\n", __func__); #endif // OPENSSL_VERSION_NUMBER >= 0x10002000L return 0; } #endif #if !defined(LWS_PLAT_OPTEE) && !defined(OPTEE_DEV_KIT) #if defined(LWS_PLAT_FREERTOS) && !defined(LWS_AMAZON_RTOS) int alloc_file(struct lws_context *context, const char *filename, uint8_t **buf, lws_filepos_t *amount) { nvs_handle nvh; size_t s; int n = 0; ESP_ERROR_CHECK(nvs_open("lws-station", NVS_READWRITE, &nvh)); if (nvs_get_blob(nvh, filename, NULL, &s) != ESP_OK) { n = 1; goto bail; } *buf = lws_malloc(s + 1, "alloc_file"); if (!*buf) { n = 2; goto bail; } if (nvs_get_blob(nvh, filename, (char *)*buf, &s) != ESP_OK) { lws_free(*buf); n = 1; goto bail; } *amount = s; (*buf)[s] = '\0'; lwsl_notice("%s: nvs: read %s, %d bytes\n", __func__, filename, (int)s); bail: nvs_close(nvh); return n; } #else int alloc_file(struct lws_context *context, const char *filename, uint8_t **buf, lws_filepos_t *amount) { FILE *f; size_t s; ssize_t m; int n = 0; f = fopen(filename, "rb"); if (f == NULL) { n = 1; goto bail; } if (fseek(f, 0, SEEK_END) != 0) { n = 1; goto bail; } m = (ssize_t)ftell(f); if (m == -1l) { n = 1; goto bail; } s = (size_t)m; if (fseek(f, 0, SEEK_SET) != 0) { n = 1; goto bail; } *buf = lws_malloc(s + 1, "alloc_file"); if (!*buf) { n = 2; goto bail; } if (fread(*buf, s, 1, f) != 1) { lws_free(*buf); n = 1; goto bail; } *amount = s; bail: if (f) fclose(f); return n; } #endif /* * filename: NULL means use buffer inbuf length inlen directly, otherwise * load the file "filename" into an allocated buffer. * * Allocates a separate DER output buffer if inbuf / inlen are the input, * since the * * Contents may be PEM or DER: returns with buf pointing to DER and amount * set to the DER length. */ int lws_tls_alloc_pem_to_der_file(struct lws_context *context, const char *filename, const char *inbuf, lws_filepos_t inlen, uint8_t **buf, lws_filepos_t *amount) { uint8_t *pem = NULL, *p, *end, *opem; lws_filepos_t len; uint8_t *q; int n; if (filename) { n = alloc_file(context, filename, (uint8_t **)&pem, &len); if (n) return n; } else { pem = (uint8_t *)inbuf; len = inlen; } opem = p = pem; end = p + len; if (strncmp((char *)p, "-----", 5)) { /* take it as being already DER */ pem = lws_malloc((size_t)inlen, "alloc_der"); if (!pem) return 1; memcpy(pem, inbuf, (size_t)inlen); *buf = pem; *amount = inlen; return 0; } /* PEM -> DER */ if (!filename) { /* we don't know if it's in const memory... alloc the output */ pem = lws_malloc(((size_t)inlen * 3) / 4, "alloc_der"); if (!pem) { lwsl_err("a\n"); return 1; } } /* else overwrite the allocated, b64 input with decoded DER */ /* trim the first line */ p += 5; while (p < end && *p != '\n' && *p != '-') p++; if (*p != '-') { goto bail; } while (p < end && *p != '\n') p++; if (p >= end) { goto bail; } p++; /* trim the last line */ q = (uint8_t *)end - 2; while (q > opem && *q != '\n') q--; if (*q != '\n') goto bail; /* we can't write into the input buffer for mem, since it may be in RO * const segment */ if (filename) *q = '\0'; n = lws_ptr_diff(q, p); if (n == -1) /* coverity */ goto bail; *amount = (unsigned int)lws_b64_decode_string_len((char *)p, n, (char *)pem, (int)(long long)len); *buf = (uint8_t *)pem; return 0; bail: lws_free((uint8_t *)pem); return 4; } #endif #if !defined(LWS_PLAT_FREERTOS) && !defined(LWS_PLAT_OPTEE) && !defined(OPTEE_DEV_KIT) static int lws_tls_extant(const char *name) { /* it exists if we can open it... */ int fd = open(name, O_RDONLY); char buf[1]; ssize_t n; if (fd < 0) return 1; /* and we can read at least one byte out of it */ n = read(fd, buf, 1); close(fd); return n != 1; } #endif /* * Returns 0 if the filepath "name" exists and can be read from. * * In addition, if "name".upd exists, backup "name" to "name.old.1" * and rename "name".upd to "name" before reporting its existence. * * There are four situations and three results possible: * * 1) LWS_TLS_EXTANT_NO: There are no certs at all (we are waiting for them to * be provisioned). We also feel like this if we need privs we don't have * any more to look in the directory. * * 2) There are provisioned certs written (xxx.upd) and we still have root * privs... in this case we rename any existing cert to have a backup name * and move the upd cert into place with the correct name. This then becomes * situation 4 for the caller. * * 3) LWS_TLS_EXTANT_ALTERNATIVE: There are provisioned certs written (xxx.upd) * but we no longer have the privs needed to read or rename them. In this * case, indicate that the caller should use temp copies if any we do have * rights to access. This is normal after we have updated the cert. * * But if we dropped privs, we can't detect the provisioned xxx.upd cert + * key, because we can't see in the dir. So we have to upgrade NO to * ALTERNATIVE when we actually have the in-memory alternative. * * 4) LWS_TLS_EXTANT_YES: The certs are present with the correct name and we * have the rights to read them. */ enum lws_tls_extant lws_tls_use_any_upgrade_check_extant(const char *name) { #if !defined(LWS_PLAT_OPTEE) && !defined(LWS_AMAZON_RTOS) int n; #if !defined(LWS_PLAT_FREERTOS) char buf[256]; lws_snprintf(buf, sizeof(buf) - 1, "%s.upd", name); if (!lws_tls_extant(buf)) { /* ah there is an updated file... how about the desired file? */ if (!lws_tls_extant(name)) { /* rename the desired file */ for (n = 0; n < 50; n++) { lws_snprintf(buf, sizeof(buf) - 1, "%s.old.%d", name, n); if (!rename(name, buf)) break; } if (n == 50) { lwsl_notice("unable to rename %s\n", name); return LWS_TLS_EXTANT_ALTERNATIVE; } lws_snprintf(buf, sizeof(buf) - 1, "%s.upd", name); } /* desired file is out of the way, rename the updated file */ if (rename(buf, name)) { lwsl_notice("unable to rename %s to %s\n", buf, name); return LWS_TLS_EXTANT_ALTERNATIVE; } } if (lws_tls_extant(name)) return LWS_TLS_EXTANT_NO; #else nvs_handle nvh; size_t s = 8192; if (nvs_open("lws-station", NVS_READWRITE, &nvh)) { lwsl_notice("%s: can't open nvs\n", __func__); return LWS_TLS_EXTANT_NO; } n = nvs_get_blob(nvh, name, NULL, &s); nvs_close(nvh); if (n) return LWS_TLS_EXTANT_NO; #endif #endif return LWS_TLS_EXTANT_YES; } libwebsockets-4.3.5/libwebsockets.dox000066400000000000000000000353551476025525100177610ustar00rootroot00000000000000# Doxyfile 1.8.11 #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = "libwebsockets" PROJECT_NUMBER = PROJECT_BRIEF = "Lightweight C library for HTML5 websockets" PROJECT_LOGO = "./test-apps/libwebsockets.org-logo.svg" OUTPUT_DIRECTORY = "doc" CREATE_SUBDIRS = NO ALLOW_UNICODE_NAMES = NO OUTPUT_LANGUAGE = English BRIEF_MEMBER_DESC = YES REPEAT_BRIEF = YES ABBREVIATE_BRIEF = ALWAYS_DETAILED_SEC = NO INLINE_INHERITED_MEMB = NO FULL_PATH_NAMES = YES STRIP_FROM_PATH = STRIP_FROM_INC_PATH = SHORT_NAMES = NO JAVADOC_AUTOBRIEF = NO QT_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = NO INHERIT_DOCS = YES SEPARATE_MEMBER_PAGES = NO TAB_SIZE = 8 ALIASES = OPTIMIZE_OUTPUT_FOR_C = YES OPTIMIZE_OUTPUT_JAVA = NO OPTIMIZE_FOR_FORTRAN = NO OPTIMIZE_OUTPUT_VHDL = NO EXTENSION_MAPPING = MARKDOWN_SUPPORT = YES AUTOLINK_SUPPORT = YES BUILTIN_STL_SUPPORT = NO CPP_CLI_SUPPORT = NO SIP_SUPPORT = NO IDL_PROPERTY_SUPPORT = YES DISTRIBUTE_GROUP_DOC = NO GROUP_NESTED_COMPOUNDS = NO SUBGROUPING = YES INLINE_GROUPED_CLASSES = NO INLINE_SIMPLE_STRUCTS = NO TYPEDEF_HIDES_STRUCT = NO LOOKUP_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- EXTRACT_ALL = NO EXTRACT_PRIVATE = NO EXTRACT_PACKAGE = NO EXTRACT_STATIC = NO EXTRACT_LOCAL_CLASSES = YES EXTRACT_LOCAL_METHODS = NO EXTRACT_ANON_NSPACES = NO HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = NO HIDE_FRIEND_COMPOUNDS = NO HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = NO CASE_SENSE_NAMES = YES HIDE_SCOPE_NAMES = NO HIDE_COMPOUND_REFERENCE= NO SHOW_INCLUDE_FILES = YES SHOW_GROUPED_MEMB_INC = YES FORCE_LOCAL_INCLUDES = NO INLINE_INFO = YES SORT_MEMBER_DOCS = YES SORT_BRIEF_DOCS = NO SORT_MEMBERS_CTORS_1ST = NO SORT_GROUP_NAMES = YES SORT_BY_SCOPE_NAME = NO STRICT_PROTO_MATCHING = YES GENERATE_TODOLIST = YES GENERATE_TESTLIST = YES GENERATE_BUGLIST = YES GENERATE_DEPRECATEDLIST= YES ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 30 SHOW_USED_FILES = YES SHOW_FILES = YES SHOW_NAMESPACES = YES FILE_VERSION_FILTER = LAYOUT_FILE = CITE_BIB_FILES = #--------------------------------------------------------------------------- # Configuration options related to warning and progress messages #--------------------------------------------------------------------------- QUIET = NO WARNINGS = YES WARN_IF_UNDOCUMENTED = NO WARN_IF_DOC_ERROR = YES WARN_NO_PARAMDOC = NO WARN_AS_ERROR = NO WARN_FORMAT = "$file:$line: $text" WARN_LOGFILE = #--------------------------------------------------------------------------- # Configuration options related to the input files #--------------------------------------------------------------------------- INPUT = include/libwebsockets.h \ include/libwebsockets/lws-adopt.h \ include/libwebsockets/lws-async-dns.h \ include/libwebsockets/lws-bb-i2c.h \ include/libwebsockets/lws-bb-spi.h \ include/libwebsockets/lws-button.h \ include/libwebsockets/lws-callbacks.h \ include/libwebsockets/lws-cgi.h \ include/libwebsockets/lws-client.h \ include/libwebsockets/lws-context-vhost.h \ include/libwebsockets/lws-dbus.h \ include/libwebsockets/lws-detailed-latency.h \ include/libwebsockets/lws-diskcache.h \ include/libwebsockets/lws-display.h \ include/libwebsockets/lws-dll2.h \ include/libwebsockets/lws-dsh.h \ include/libwebsockets/lws-eventlib-exports.h \ include/libwebsockets/lws-freertos.h \ include/libwebsockets/lws-fts.h \ include/libwebsockets/lws-genaes.h \ include/libwebsockets/lws-gencrypto.h \ include/libwebsockets/lws-genec.h \ include/libwebsockets/lws-genhash.h \ include/libwebsockets/lws-genrsa.h \ include/libwebsockets/lws-gpio.h \ include/libwebsockets/lws-http.h \ include/libwebsockets/lws-i2c.h \ include/libwebsockets/lws-ili9341-spi.h \ include/libwebsockets/lws-jose.h \ include/libwebsockets/lws-jwe.h \ include/libwebsockets/lws-jwk.h \ include/libwebsockets/lws-jws.h \ include/libwebsockets/lws-led.h \ include/libwebsockets/lws-lejp.h \ include/libwebsockets/lws-logs.h \ include/libwebsockets/lws-lwsac.h \ include/libwebsockets/lws-misc.h \ include/libwebsockets/lws-mqtt.h \ include/libwebsockets/lws-netdev.h \ include/libwebsockets/lws-network-helper.h \ include/libwebsockets/lws-protocols-plugins.h \ include/libwebsockets/lws-purify.h \ include/libwebsockets/lws-pwm.h \ include/libwebsockets/lws-retry.h \ include/libwebsockets/lws-ring.h \ include/libwebsockets/lws-secure-streams-client.h \ include/libwebsockets/lws-secure-streams.h \ include/libwebsockets/lws-secure-streams-policy.h \ include/libwebsockets/lws-sequencer.h \ include/libwebsockets/lws-service.h \ include/libwebsockets/lws-settings.h \ include/libwebsockets/lws-sha1-base64.h \ include/libwebsockets/lws-smd.h \ include/libwebsockets/lws-spa.h \ include/libwebsockets/lws-spi.h \ include/libwebsockets/lws-ssd1306-i2c.h \ include/libwebsockets/lws-state.h \ include/libwebsockets/lws-stats.h \ include/libwebsockets/lws-struct.h \ include/libwebsockets/lws-system.h \ include/libwebsockets/lws-test-sequencer.h \ include/libwebsockets/lws-threadpool.h \ include/libwebsockets/lws-timeout-timer.h \ include/libwebsockets/lws-tokenize.h \ include/libwebsockets/lws-vfs.h \ include/libwebsockets/lws-write.h \ include/libwebsockets/lws-writeable.h \ include/libwebsockets/lws-ws-close.h \ include/libwebsockets/lws-ws-ext.h \ include/libwebsockets/lws-ws-state.h \ include/libwebsockets/lws-x509.h \ plugins/ssh-base/include/lws-plugin-ssh.h \ ./READMEs/mainpage.md \ ./READMEs/README.async-dns.md \ ./READMEs/README.build.md \ ./READMEs/README.ci.md \ ./READMEs/README.coding.md \ ./READMEs/README.content-security-policy.md \ ./READMEs/README.contributing.md \ ./READMEs/README.crypto-apis.md \ ./READMEs/README.detailed-latency.md \ ./READMEs/README.esp32.md \ ./READMEs/README.h2-long-poll.md \ ./READMEs/README.http-fallback.md \ ./READMEs/README.lws_dll.md \ ./READMEs/README.lws_sequencer.md \ ./READMEs/README.lws_struct.md \ ./READMEs/README.lws_sul.md \ ./READMEs/README.lwsws.md \ ./READMEs/README-plugin-sshd-base.md \ ./READMEs/README.plugin-acme.md \ ./READMEs/README.porting.md \ ./READMEs/README.problems.md \ ./READMEs/README.release-policy.md \ ./READMEs/README.test-apps.md \ ./READMEs/README.unix-domain-reverse-proxy.md \ ./READMEs/README.vulnerability-reporting.md \ ./doc-assets INPUT_ENCODING = UTF-8 FILE_PATTERNS = lib/*.c *.md *.png include/*.h RECURSIVE = NO EXCLUDE = EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = EXCLUDE_SYMBOLS = EXAMPLE_PATH = EXAMPLE_PATTERNS = EXAMPLE_RECURSIVE = NO IMAGE_PATH = doc-assets INPUT_FILTER = FILTER_PATTERNS = FILTER_SOURCE_FILES = NO FILTER_SOURCE_PATTERNS = USE_MDFILE_AS_MAINPAGE = mainpage.md #--------------------------------------------------------------------------- # Configuration options related to source browsing #--------------------------------------------------------------------------- SOURCE_BROWSER = NO INLINE_SOURCES = YES STRIP_CODE_COMMENTS = YES REFERENCED_BY_RELATION = NO REFERENCES_RELATION = NO REFERENCES_LINK_SOURCE = YES SOURCE_TOOLTIPS = YES USE_HTAGS = NO VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- ALPHABETICAL_INDEX = YES COLS_IN_ALPHA_INDEX = 5 IGNORE_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the HTML output #--------------------------------------------------------------------------- GENERATE_HTML = YES HTML_OUTPUT = html HTML_FILE_EXTENSION = .html HTML_HEADER = HTML_FOOTER = HTML_STYLESHEET = HTML_EXTRA_STYLESHEET = scripts/dox-extra.css HTML_EXTRA_FILES = HTML_COLORSTYLE_HUE = 220 HTML_COLORSTYLE_SAT = 100 HTML_COLORSTYLE_GAMMA = 80 HTML_TIMESTAMP = NO HTML_DYNAMIC_SECTIONS = NO HTML_INDEX_NUM_ENTRIES = 100 GENERATE_DOCSET = NO DOCSET_FEEDNAME = "Doxygen generated docs" DOCSET_BUNDLE_ID = org.doxygen.Project DOCSET_PUBLISHER_ID = org.doxygen.Publisher DOCSET_PUBLISHER_NAME = Publisher GENERATE_HTMLHELP = NO CHM_FILE = HHC_LOCATION = GENERATE_CHI = NO CHM_INDEX_ENCODING = BINARY_TOC = NO TOC_EXPAND = NO GENERATE_QHP = NO QCH_FILE = QHP_NAMESPACE = org.doxygen.Project QHP_VIRTUAL_FOLDER = doc QHP_CUST_FILTER_NAME = QHP_CUST_FILTER_ATTRS = QHP_SECT_FILTER_ATTRS = QHG_LOCATION = GENERATE_ECLIPSEHELP = NO ECLIPSE_DOC_ID = org.doxygen.Project DISABLE_INDEX = NO GENERATE_TREEVIEW = YES ENUM_VALUES_PER_LINE = 4 TREEVIEW_WIDTH = 250 EXT_LINKS_IN_WINDOW = NO FORMULA_FONTSIZE = 10 FORMULA_TRANSPARENT = YES USE_MATHJAX = NO MATHJAX_FORMAT = HTML-CSS MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest MATHJAX_EXTENSIONS = MATHJAX_CODEFILE = SEARCHENGINE = NO SERVER_BASED_SEARCH = NO EXTERNAL_SEARCH = NO SEARCHENGINE_URL = SEARCHDATA_FILE = searchdata.xml EXTERNAL_SEARCH_ID = EXTRA_SEARCH_MAPPINGS = #--------------------------------------------------------------------------- # Configuration options related to the LaTeX output #--------------------------------------------------------------------------- GENERATE_LATEX = NO LATEX_OUTPUT = latex LATEX_CMD_NAME = latex MAKEINDEX_CMD_NAME = makeindex COMPACT_LATEX = NO PAPER_TYPE = a4 EXTRA_PACKAGES = LATEX_HEADER = LATEX_FOOTER = LATEX_EXTRA_STYLESHEET = LATEX_EXTRA_FILES = PDF_HYPERLINKS = YES USE_PDFLATEX = YES LATEX_BATCHMODE = NO LATEX_HIDE_INDICES = NO LATEX_SOURCE_CODE = NO LATEX_BIB_STYLE = plain LATEX_TIMESTAMP = NO #--------------------------------------------------------------------------- # Configuration options related to the RTF output #--------------------------------------------------------------------------- GENERATE_RTF = NO RTF_OUTPUT = rtf COMPACT_RTF = NO RTF_HYPERLINKS = NO RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = RTF_SOURCE_CODE = NO #--------------------------------------------------------------------------- # Configuration options related to the man page output #--------------------------------------------------------------------------- GENERATE_MAN = NO MAN_OUTPUT = man MAN_EXTENSION = .3 MAN_SUBDIR = MAN_LINKS = NO #--------------------------------------------------------------------------- # Configuration options related to the XML output #--------------------------------------------------------------------------- GENERATE_XML = NO XML_OUTPUT = xml XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # Configuration options related to the DOCBOOK output #--------------------------------------------------------------------------- GENERATE_DOCBOOK = NO DOCBOOK_OUTPUT = docbook DOCBOOK_PROGRAMLISTING = NO #--------------------------------------------------------------------------- # Configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # Configuration options related to the Perl module output #--------------------------------------------------------------------------- GENERATE_PERLMOD = NO PERLMOD_LATEX = NO PERLMOD_PRETTY = YES PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- ENABLE_PREPROCESSING = YES MACRO_EXPANSION = NO EXPAND_ONLY_PREDEF = NO SEARCH_INCLUDES = YES INCLUDE_PATH = ./include INCLUDE_FILE_PATTERNS = PREDEFINED = EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration options related to external references #--------------------------------------------------------------------------- TAGFILES = GENERATE_TAGFILE = ALLEXTERNALS = NO EXTERNAL_GROUPS = YES EXTERNAL_PAGES = YES #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- CLASS_DIAGRAMS = YES DIA_PATH = HIDE_UNDOC_RELATIONS = YES HAVE_DOT = NO DOT_NUM_THREADS = 0 DOT_FONTNAME = Helvetica DOT_FONTSIZE = 10 DOT_FONTPATH = CLASS_GRAPH = YES COLLABORATION_GRAPH = YES GROUP_GRAPHS = YES UML_LOOK = NO UML_LIMIT_NUM_FIELDS = 10 TEMPLATE_RELATIONS = NO INCLUDE_GRAPH = YES INCLUDED_BY_GRAPH = YES CALL_GRAPH = NO CALLER_GRAPH = NO GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES DOT_IMAGE_FORMAT = png INTERACTIVE_SVG = NO DOT_PATH = DOTFILE_DIRS = MSCFILE_DIRS = DIAFILE_DIRS = PLANTUML_JAR_PATH = PLANTUML_INCLUDE_PATH = DOT_GRAPH_MAX_NODES = 50 MAX_DOT_GRAPH_DEPTH = 0 DOT_TRANSPARENT = NO DOT_MULTI_TARGETS = NO GENERATE_LEGEND = YES DOT_CLEANUP = YES libwebsockets-4.3.5/lwsws/000077500000000000000000000000001476025525100155515ustar00rootroot00000000000000libwebsockets-4.3.5/lwsws/CMakeLists.txt000066400000000000000000000044651476025525100203220ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # if (LWS_WITH_LWSWS) list(APPEND LWSWS_SRCS "main.c" ) if (WIN32) list(APPEND LWSWS_SRCS ${WIN32_HELPERS_PATH}/getopt.c ${WIN32_HELPERS_PATH}/getopt_long.c ${WIN32_HELPERS_PATH}/gettimeofday.c ) list(APPEND LWSWS_HDR ${WIN32_HELPERS_PATH}/getopt.h ${WIN32_HELPERS_PATH}/gettimeofday.h ) endif(WIN32) source_group("Headers Private" FILES ${LWSWS_HDR}) source_group("Sources" FILES ${LWSWS_SRCS}) add_executable(lwsws ${LWSWS_SRCS} ${LWSWS_HDR}) if (LWS_WITH_SHARED) target_link_libraries(lwsws websockets_shared ${LIB_LIST_AT_END}) add_dependencies(lwsws websockets_shared) else() target_link_libraries(lwsws websockets ${LIB_LIST_AT_END}) add_dependencies(lwsws websockets) endif() target_include_directories(lwsws PRIVATE "${LWS_LIB_INCLUDES}" ${LWS_LIB_BUILD_INC_PATHS}) # Set test app specific defines. set_property(TARGET lwsws PROPERTY COMPILE_DEFINITIONS INSTALL_DATADIR="${CMAKE_INSTALL_PREFIX}/share" ) install(TARGETS lwsws RUNTIME DESTINATION "${LWS_INSTALL_BIN_DIR}" COMPONENT lwsws ) target_compile_definitions(lwsws PRIVATE LWS_BUILDING_SHARED) endif (LWS_WITH_LWSWS) libwebsockets-4.3.5/lwsws/etc-logrotate.d-lwsws000066400000000000000000000003021476025525100216370ustar00rootroot00000000000000/var/log/lwsws/*log { copytruncate missingok notifempty delaycompress postrotate /bin/systemctl reload lwsws.service > /dev/null 2>/dev/null || true endscript } libwebsockets-4.3.5/lwsws/etc-lwsws-conf-EXAMPLE000066400000000000000000000004511476025525100214400ustar00rootroot00000000000000# these are the server global settings # stuff related to vhosts should go in one # file per vhost in ../conf.d/ { "global": { "uid": "48", "gid": "48", "interface": "eth0", "count-threads": "1", "server-string": "lwsws", "ws-pingpong-secs": "200", "init-ssl": "yes" } } libwebsockets-4.3.5/lwsws/etc-lwsws-conf.d-localhost-EXAMPLE000066400000000000000000000031541476025525100236530ustar00rootroot00000000000000{ "vhosts": [ { "name": "localhost", "port": "7681", # by default, bind to all interfaces, but you can restrict it # "interface": "lo", # "host-ssl-key": "/etc/pki/tls/private/libwebsockets.org.key", # "host-ssl-cert": "/etc/pki/tls/certs/libwebsockets.org.crt", # "host-ssl-ca": "/etc/pki/tls/certs/libwebsockets.org.cer", "access-log": "/var/log/lwsws/test-access-log", # "sts": "on", "mounts": [{ "mountpoint": "/", "origin": "file://_lws_ddir_/libwebsockets-test-server", "default": "test.html", "cache-max-age": "60", "cache-reuse": "1", "cache-revalidate": "1", "cache-intermediaries": "0" }, { "mountpoint": "/server-status", "origin": "file://_lws_ddir_/libwebsockets-test-server/server-status", "default": "server-status.html" }, { "mountpoint": "/testcgi", "origin": "cgi://_lws_ddir_/libwebsockets-test-server/lws-cgi-test.sh" }, { "mountpoint": "/formtest", "origin": "callback://protocol-post-demo" }], # which protocols are enabled for this vhost, and optional # vhost-specific config options for the protocol # "ws-protocols": [{ "lws-meta": { "status": "ok" }, "dumb-increment-protocol": { "status": "ok" }, "lws-mirror-protocol": { "status": "ok" }, "lws-status": { "status": "ok" }, "protocol-post-demo": { "status": "ok" }, "lws-server-status": { "status": "ok", "update-ms": "5000" } }] } ] } libwebsockets-4.3.5/lwsws/main.c000066400000000000000000000177571476025525100166620ustar00rootroot00000000000000/* * libwebsockets web server application * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * The test apps are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. */ #include "lws_config.h" #include #include #if defined(LWS_HAS_GETOPT_LONG) || defined(WIN32) #include #endif #include #include #include #include #include #ifndef _WIN32 #include #include #include #include #include #else #include #include "gettimeofday.h" #include int fork(void) { fprintf(stderr, "Sorry Windows doesn't support fork().\n"); return 0; } #endif #include #include #if defined(LWS_HAVE_MALLOC_TRIM) #include #endif static struct lws_context *context; static lws_sorted_usec_list_t sul_lwsws; static char config_dir[128], default_plugin_path = 1; static int opts = 0, do_reload = 1; static uv_loop_t loop; static uv_signal_t signal_outer[2]; static int pids[32]; void lwsl_emit_stderr(int level, const char *line); #define LWSWS_CONFIG_STRING_SIZE (64 * 1024) static const struct lws_extension exts[] = { #if !defined(LWS_WITHOUT_EXTENSIONS) { "permessage-deflate", lws_extension_callback_pm_deflate, "permessage-deflate" }, #endif { NULL, NULL, NULL /* terminator */ } }; #if defined(LWS_WITH_PLUGINS) static const char * const plugin_dirs[] = { INSTALL_DATADIR"/libwebsockets-test-server/plugins/", NULL }; #endif #if defined(LWS_HAS_GETOPT_LONG) || defined(WIN32) static struct option options[] = { { "help", no_argument, NULL, 'h' }, { "debug", required_argument, NULL, 'd' }, { "configdir", required_argument, NULL, 'c' }, { "no-default-plugins", no_argument, NULL, 'n' }, { NULL, 0, 0, 0 } }; #endif void signal_cb(uv_signal_t *watcher, int signum) { switch (watcher->signum) { case SIGTERM: case SIGINT: break; case SIGHUP: if (lws_context_is_deprecated(context)) return; lwsl_notice("Dropping listen sockets\n"); lws_context_deprecate(context, NULL); return; default: signal(SIGABRT, SIG_DFL); abort(); break; } lwsl_err("Signal %d caught\n", watcher->signum); uv_signal_stop(watcher); uv_signal_stop(&signal_outer[1]); lws_context_destroy(context); } static void lwsws_min(lws_sorted_usec_list_t *sul) { lwsl_debug("%s\n", __func__); #if defined(LWS_HAVE_MALLOC_TRIM) malloc_trim(4 * 1024); #endif lws_sul_schedule(context, 0, &sul_lwsws, lwsws_min, 60 * LWS_US_PER_SEC); } static int context_creation(void) { int cs_len = LWSWS_CONFIG_STRING_SIZE - 1; struct lws_context_creation_info info; char *cs, *config_strings; void *foreign_loops[1]; cs = config_strings = malloc(LWSWS_CONFIG_STRING_SIZE); if (!config_strings) { lwsl_err("Unable to allocate config strings heap\n"); return -1; } memset(&info, 0, sizeof(info)); info.external_baggage_free_on_destroy = config_strings; info.pt_serv_buf_size = 8192; info.options = (uint64_t)((uint64_t)opts | LWS_SERVER_OPTION_VALIDATE_UTF8 | LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_LIBUV); #if defined(LWS_WITH_PLUGINS) if (default_plugin_path) info.plugin_dirs = plugin_dirs; #endif lwsl_notice("Using config dir: \"%s\"\n", config_dir); /* * first go through the config for creating the outer context */ if (lwsws_get_config_globals(&info, config_dir, &cs, &cs_len)) goto init_failed; foreign_loops[0] = &loop; info.foreign_loops = foreign_loops; info.pcontext = &context; context = lws_create_context(&info); if (context == NULL) { lwsl_err("libwebsocket init failed\n"); goto init_failed; } /* * then create the vhosts... protocols are entirely coming from * plugins, so we leave it NULL */ info.extensions = exts; if (lwsws_get_config_vhosts(context, &info, config_dir, &cs, &cs_len)) return 1; lws_sul_schedule(context, 0, &sul_lwsws, lwsws_min, 60 * LWS_US_PER_SEC); return 0; init_failed: free(config_strings); return 1; } /* * root-level sighup handler */ static void reload_handler(int signum) { #ifndef _WIN32 int m; switch (signum) { case SIGHUP: /* reload */ fprintf(stderr, "root process receives reload\n"); if (!do_reload) { fprintf(stderr, "passing HUP to child processes\n"); for (m = 0; m < (int)LWS_ARRAY_SIZE(pids); m++) if (pids[m]) kill(pids[m], SIGHUP); sleep(1); } do_reload = 1; break; case SIGINT: case SIGTERM: case SIGKILL: fprintf(stderr, "parent process waiting 2s...\n"); sleep(2); /* give children a chance to deal with the signal */ fprintf(stderr, "killing service processes\n"); for (m = 0; m < (int)LWS_ARRAY_SIZE(pids); m++) if (pids[m]) kill(pids[m], SIGTERM); exit(0); } #else // kill() implementation needed for WIN32 #endif } int main(int argc, char **argv) { int n = 0, budget = 100, debug_level = 1024 + 7; #ifndef _WIN32 int m; int status;//, syslog_options = LOG_PID | LOG_PERROR; #endif strcpy(config_dir, "/etc/lwsws"); while (n >= 0) { #if defined(LWS_HAS_GETOPT_LONG) || defined(WIN32) n = getopt_long(argc, argv, "hd:c:n", options, NULL); #else n = getopt(argc, argv, "hd:c:n"); #endif if (n < 0) continue; switch (n) { case 'd': debug_level = atoi(optarg); break; case 'n': default_plugin_path = 0; break; case 'c': lws_strncpy(config_dir, optarg, sizeof(config_dir)); break; case 'h': fprintf(stderr, "Usage: lwsws [-c ] " "[-d ] [--help] " "[-n]\n"); exit(1); } } #ifndef _WIN32 /* * We leave our original process up permanently, because that * suits systemd. * * Otherwise we get into problems when reload spawns new processes and * the original one dies randomly. */ signal(SIGHUP, reload_handler); signal(SIGINT, reload_handler); fprintf(stderr, "Root process is %u\n", (unsigned int)getpid()); while (1) { if (do_reload) { do_reload = 0; n = fork(); if (n == 0) /* new */ break; /* old */ if (n > 0) for (m = 0; m < (int)LWS_ARRAY_SIZE(pids); m++) if (!pids[m]) { pids[m] = n; break; } } #ifndef _WIN32 sleep(2); n = waitpid(-1, &status, WNOHANG); if (n > 0) for (m = 0; m < (int)LWS_ARRAY_SIZE(pids); m++) if (pids[m] == n) { pids[m] = 0; break; } #else // !!! implemenation needed #endif } #endif /* child process */ lws_set_log_level(debug_level, lwsl_emit_stderr_notimestamp); lwsl_notice("lwsws libwebsockets web server - license CC0 + MIT\n"); lwsl_notice("(C) Copyright 2010-2020 Andy Green \n"); #if (UV_VERSION_MAJOR > 0) // Travis... uv_loop_init(&loop); #else fprintf(stderr, "Your libuv is too old!\n"); return 0; #endif uv_signal_init(&loop, &signal_outer[0]); uv_signal_start(&signal_outer[0], signal_cb, SIGINT); uv_signal_init(&loop, &signal_outer[1]); uv_signal_start(&signal_outer[1], signal_cb, SIGHUP); if (context_creation()) { lwsl_err("Context creation failed\n"); return 1; } lws_service(context, 0); lwsl_err("%s: closing\n", __func__); for (n = 0; n < 2; n++) { uv_signal_stop(&signal_outer[n]); uv_close((uv_handle_t *)&signal_outer[n], NULL); } /* cancel the per-minute sul */ lws_sul_cancel(&sul_lwsws); lws_context_destroy(context); (void)budget; #if (UV_VERSION_MAJOR > 0) // Travis... while ((n = uv_loop_close(&loop)) && --budget) uv_run(&loop, UV_RUN_ONCE); #endif fprintf(stderr, "lwsws exited cleanly: %d\n", n); #ifndef _WIN32 closelog(); #endif context = NULL; return 0; } libwebsockets-4.3.5/lwsws/usr-lib-systemd-system-lwsws.service000066400000000000000000000003301476025525100246710ustar00rootroot00000000000000[Unit] Description=Libwebsockets Web Server After=syslog.target [Service] ExecStart=/usr/local/bin/lwsws ExecReload=/usr/bin/kill -HUP $MAINPID ExecStop=/usr/bin/killall lwsws [Install] WantedBy=multi-user.target libwebsockets-4.3.5/minimal-examples-lowlevel/000077500000000000000000000000001476025525100214635ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples-lowlevel/raw/000077500000000000000000000000001476025525100222545ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples-lowlevel/raw/minimal-raw-client/000077500000000000000000000000001476025525100257455ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples-lowlevel/raw/minimal-raw-client/CMakeLists.txt000066400000000000000000000012031476025525100305010ustar00rootroot00000000000000project(lws-minimal-raw-client C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-raw-client) set(SRCS main.c) set(requirements 1) require_lws_config(LWS_WITH_CLIENT 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples-lowlevel/raw/minimal-raw-client/main.c000066400000000000000000000116071476025525100270420ustar00rootroot00000000000000/* * lws-minimal-raw-client * * Written in 2010-2022 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates connecting a "raw" client connection */ #include #include #include #if !defined(WIN32) #include #include #include #include #include #endif #include #include #include #if !defined(WIN32) #include #endif #include #include static struct lws *raw_wsi, *stdin_wsi; static uint8_t buf[LWS_PRE + 4096]; static int waiting, interrupted; static struct lws_context *context; static int us_wait_after_input_close = LWS_USEC_PER_SEC / 10; static const char *server = "libwebsockets.org", *port = "443"; static int callback_raw_test(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { const char *cp = (const char *)in; switch (reason) { /* callbacks related to file descriptor */ case LWS_CALLBACK_RAW_ADOPT_FILE: lwsl_user("LWS_CALLBACK_RAW_ADOPT_FILE\n"); break; case LWS_CALLBACK_RAW_CLOSE_FILE: lwsl_user("LWS_CALLBACK_RAW_CLOSE_FILE\n"); /* stdin close, wait 1s then close the raw skt */ stdin_wsi = NULL; /* invalid now we close */ if (raw_wsi) lws_set_timer_usecs(raw_wsi, us_wait_after_input_close); else { interrupted = 1; lws_cancel_service(context); } break; case LWS_CALLBACK_RAW_RX_FILE: lwsl_user("LWS_CALLBACK_RAW_RX_FILE\n"); waiting = (int)read(0, buf, sizeof(buf)); lwsl_notice("raw file read %d\n", waiting); if (waiting < 0) return -1; if (raw_wsi) lws_callback_on_writable(raw_wsi); lws_rx_flow_control(wsi, 0); break; /* callbacks related to raw socket descriptor */ case LWS_CALLBACK_RAW_ADOPT: lwsl_user("LWS_CALLBACK_RAW_ADOPT\n"); lws_callback_on_writable(wsi); break; case LWS_CALLBACK_RAW_CONNECTED: lwsl_user("LWS_CALLBACK_RAW_CONNECTED\n"); break; case LWS_CALLBACK_RAW_CLOSE: lwsl_user("LWS_CALLBACK_RAW_CLOSE\n"); /* * If the socket to the remote server closed, we must close * and drop any remaining stdin */ interrupted = 1; lws_cancel_service(context); /* our pointer to this wsi is invalid now we close */ raw_wsi = NULL; break; case LWS_CALLBACK_RAW_RX: lwsl_user("LWS_CALLBACK_RAW_RX (%d)\n", (int)len); while (len--) putchar(*cp++); fflush(stdout); break; case LWS_CALLBACK_RAW_WRITEABLE: lwsl_user("LWS_CALLBACK_RAW_WRITEABLE\n"); // lwsl_hexdump_info(buf, waiting); if (!waiting) break; if (stdin_wsi) lws_rx_flow_control(stdin_wsi, 1); if (lws_write(wsi, buf, (unsigned int)waiting, LWS_WRITE_RAW) != waiting) { lwsl_notice("%s: raw skt write failed\n", __func__); return -1; } break; case LWS_CALLBACK_TIMER: lwsl_user("LWS_CALLBACK_TIMER\n"); interrupted = 1; lws_cancel_service(context); return -1; default: break; } return 0; } static struct lws_protocols protocols[] = { { "raw-test", callback_raw_test, 0, 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; static int system_notify_cb(lws_state_manager_t *mgr, lws_state_notify_link_t *link, int current, int target) { struct lws_client_connect_info i; if (current != LWS_SYSTATE_OPERATIONAL || target != LWS_SYSTATE_OPERATIONAL) return 0; memset(&i, 0, sizeof i); i.context = context; i.method = "RAW"; i.ssl_connection = LCCSCF_USE_SSL; i.alpn = "http/1.1"; i.address = server; i.host = server; i.port = atoi(port); i.local_protocol_name = "raw-test"; waiting = lws_snprintf((char *)buf, sizeof(buf), "GET / HTTP/1.1\xaHost: libwebsockets.org\xa\xa"); if (!lws_client_connect_via_info(&i)) { lwsl_err("Client creation failed\n"); interrupted = 1; } return 0; } void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; lws_state_notify_link_t notifier = { { NULL, NULL, NULL }, system_notify_cb, "app" }; lws_state_notify_link_t *na[] = { ¬ifier, NULL }; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal raw client\n"); memset(&info, 0, sizeof info); info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.port = CONTEXT_PORT_NO_LISTEN_SERVER; info.protocols = protocols; info.register_notifier_list = na; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lwsl_user("%s: destroying context\n", __func__); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/000077500000000000000000000000001476025525100176345ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/CMakeLists.txt000066400000000000000000000037721476025525100224050ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. MACRO(SUBDIRLIST result curdir) FILE(GLOB children RELATIVE ${curdir} ${curdir}/*) SET(dirlist "") FOREACH(child ${children}) IF (IS_DIRECTORY ${curdir}/${child}) LIST(APPEND dirlist ${child}) ENDIF() ENDFOREACH() SET(${result} ${dirlist}) ENDMACRO() include_directories(${LWS_LIB_BUILD_INC_PATHS}) link_libraries(${LIB_LIST_AT_END}) SUBDIRLIST(SUBDIRS "${PROJECT_SOURCE_DIR}/minimal-examples") FOREACH(subdir ${SUBDIRS}) SUBDIRLIST(SUBDIRS2 "${PROJECT_SOURCE_DIR}/minimal-examples/${subdir}") FOREACH(subdir2 ${SUBDIRS2}) if (EXISTS "${PROJECT_SOURCE_DIR}/minimal-examples/${subdir}/${subdir2}/CMakeLists.txt") message("Processing ${PROJECT_SOURCE_DIR}/minimal-examples/${subdir}/${subdir2}") add_subdirectory("${PROJECT_SOURCE_DIR}/minimal-examples/${subdir}/${subdir2}") endif() ENDFOREACH() ENDFOREACH() libwebsockets-4.3.5/minimal-examples/README.md000066400000000000000000000077641476025525100211310ustar00rootroot00000000000000|name|demonstrates| ---|--- client-server|Minimal examples providing client and server connections simultaneously crypto|Minimal examples related to using lws crypto apis dbus-server|Minimal examples showing how to integrate DBUS into lws event loop http-client|Minimal examples providing an http client http-server|Minimal examples providing an http server raw|Minimal examples related to adopting raw file or socket descriptors into the event loop secure-streams|Minimal examples related to the Secure Streams client api ws-client|Minimal examples providing a ws client ws-server|Minimal examples providing a ws server (and an http server) ## FAQ ### Getting started Build and install lws itself first (note that after installing lws on \*nix, you need to run `ldconfig` one time so the OS can learn about the new library. Lws installs in `/usr/local` by default, Debian / Ubuntu ldconfig knows to look there already, but Fedora / CentOS need you to add the line `/usr/local/lib` to `/etc/ld.so.conf` and run ldconfig) Then start with the simplest: `http-server/minimal-http-server` ### Why are most of the sources split into a main C file file and a protocol file? Lws supports three ways to implement the protocol callback code: - you can just add it all in the same source file - you can separate it as these examples do, and #include it into the main sources - you can build it as a standalone plugin that is discovered and loaded at runtime. The way these examples are structured, you can easily also build the protocol callback as a plugin just with a different CMakeLists.txt... see https://github.com/warmcat/libwebsockets/tree/master/plugin-standalone for an example. ### Why would we want the protocol as a plugin? You will notice a lot of the main C code is the same boilerplate repeated for each example. The actual interesting part is in the protocol callback only. Lws provides (-DLWS_WITH_LWSWS=1) a generic lightweight server app called 'lwsws' that can be configured by JSON. Combined with your protocol as a plugin, it means you don't actually have to make a special server "app" part, you can just use lwsws and pass per-vhost configuration from JSON into your protocol. (Of course in some cases you have an existing app you are bolting lws on to, then you don't care about this for that particular case). Because lwsws has no dependency on whatever your plugin does, it can mix and match different protocols randomly without needing any code changes. It reduces the size of the task to just writing the code you care about in your protocol handler, and nothing else to write or maintain. Lwsws supports advanced features like reload, where it starts a new server instance with changed config or different plugins, while keeping the old instance around until the last connection to it closes. ### I get why there is a pss, but why is there a vhd? The pss is instantiated per-connection. But there are almost always other variables that have a lifetime longer than a single connection. You could make these variables "filescope" one-time globals, but that means your protocol cannot instantiate multiple times. Lws supports vhosts (virtual hosts), for example both https://warmcat.com and https://libwebsockets are running on the same lwsws instance on the same server and same IP... each of these is a separate vhost. Your protocol may be enabled on multiple vhosts, each of these vhosts provides a different vhd specific to the protocol instance on that vhost. For example many of the samples keep a linked-list head to a list of live pss in the vhd... that means it's cleanly a list of pss opened **on that vhost**. If another vhost has the protocol enabled, connections to that will point to a different vhd, and the linked-list head on that vhd will only list connections to his vhost. The example "ws-server/minimal-ws-server-threads" demonstrates how to deliver external configuration data to a specific vhost + protocol combination using code. In lwsws, this is simply a matter of setting the desired JSON config. libwebsockets-4.3.5/minimal-examples/abstract/000077500000000000000000000000001476025525100214375ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/abstract/protocols/000077500000000000000000000000001476025525100234635ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/abstract/protocols/smtp-client/000077500000000000000000000000001476025525100257225ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/abstract/protocols/smtp-client/CMakeLists.txt000066400000000000000000000012051476025525100304600ustar00rootroot00000000000000project(lws-api-test-smtp_client C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-api-test-smtp_client) set(SRCS main.c) set(requirements 1) require_lws_config(LWS_WITH_SMTP 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/abstract/protocols/smtp-client/README.md000066400000000000000000000012251476025525100272010ustar00rootroot00000000000000# lws api test smtp client Demonstrates how to send email through your local MTA ## build Requires lws was built with `-DLWS_WITH_SMTP=1` at cmake. ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -r |Send the test email to this email address ``` $ ./lws-api-test-smtp_client -r andy@warmcat.com [2019/04/17 05:12:06:5293] USER: LWS API selftest: SMTP client [2019/04/17 05:12:06:5635] NOTICE: LGSSMTP_IDLE: connecting to 127.0.0.1:25 [2019/04/17 05:12:06:6238] NOTICE: email_sent_or_failed: sent OK [2019/04/17 05:12:06:6394] USER: Completed: PASS ``` libwebsockets-4.3.5/minimal-examples/abstract/protocols/smtp-client/main.c000066400000000000000000000052401476025525100270130ustar00rootroot00000000000000/* * lws-api-test-smtp_client * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include #include static int interrupted, result = 1; static const char *recip; static void sigint_handler(int sig) { interrupted = 1; } static int done_cb(struct lws_smtp_email *email, void *buf, size_t len) { /* you could examine email->data here */ if (buf) { char dotstar[96]; lws_strnncpy(dotstar, (const char *)buf, len, sizeof(dotstar)); lwsl_notice("%s: %s\n", __func__, dotstar); } else lwsl_notice("%s:\n", __func__); /* destroy any allocations in email */ free((char *)email->payload); result = 0; interrupted = 1; return 0; } int main(int argc, const char **argv) { int n = 1, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; struct lws_context_creation_info info; lws_smtp_sequencer_args_t ss_args; struct lws_context *context; lws_smtp_sequencer_t *sseq; lws_smtp_email_t *email; struct lws_vhost *vh; char payload[2048]; const char *p; /* the normal lws init */ signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); p = lws_cmdline_option(argc, argv, "-r"); if (!p) { lwsl_err("-r is required\n"); return 1; } recip = p; lws_set_log_level(logs, NULL); lwsl_user("LWS API selftest: SMTP client\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = CONTEXT_PORT_NO_LISTEN; info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } vh = lws_create_vhost(context, &info); if (!vh) { lwsl_err("Failed to create first vhost\n"); goto bail1; } memset(&ss_args, 0, sizeof(ss_args)); ss_args.helo = "lws-abs-smtp-test"; ss_args.vhost = vh; sseq = lws_smtp_sequencer_create(&ss_args); if (!sseq) { lwsl_err("%s: smtp sequencer create failed\n", __func__); goto bail1; } /* attach an email to it */ n = lws_snprintf(payload, sizeof(payload), "From: noreply@example.com\n" "To: %s\n" "Subject: Test email for lws smtp-client\n" "\n" "Hello this was an api test for lws smtp-client\n" "\r\n.\r\n", recip); if (lws_smtpc_add_email(sseq, payload, n, "testserver", "andy@warmcat.com", recip, NULL, done_cb)) { lwsl_err("%s: failed to add email\n", __func__); goto bail1; } /* the usual lws event loop */ while (n >= 0 && !interrupted) n = lws_service(context, 0); bail1: lwsl_user("Completed: %s\n", result ? "FAIL" : "PASS"); lws_context_destroy(context); return result; } libwebsockets-4.3.5/minimal-examples/api-tests/000077500000000000000000000000001476025525100215455ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/api-tests/README.md000066400000000000000000000007021476025525100230230ustar00rootroot00000000000000These are buildable test apps that run in CI to confirm correct api operation. |name|tests| ---|--- api-test-lwsac|LWS Allocated Chunks api api-test-lws_struct-json|Selftests for lws_struct JSON serialization and deserialization api-test-lws_tokenize|Generic secure string tokenizer api api-test-fts|LWS Full-text Search api api-test-gencrypto|LWS Generic Crypto apis api-test-jose|LWS JOSE apis api-test-smtp_client|SMTP client for sending emails libwebsockets-4.3.5/minimal-examples/api-tests/api-test-async-dns/000077500000000000000000000000001476025525100251705ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/api-tests/api-test-async-dns/CMakeLists.txt000066400000000000000000000015321476025525100277310ustar00rootroot00000000000000project(lws-api-test-async-dns C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) set(SAMP lws-api-test-async-dns) set(SRCS main.c) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) require_lws_config(LWS_WITH_SYS_ASYNC_DNS 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) add_test(NAME api-test-async-dns COMMAND lws-api-test-async-dns) set_tests_properties(api-test-async-dns PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/api-tests/api-test-async-dns TIMEOUT 60) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/api-tests/api-test-async-dns/main.c000066400000000000000000000213111476025525100262560ustar00rootroot00000000000000/* * lws-api-test-async-dns * * Written in 2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This api test confirms various kinds of async dns apis */ #include #include static int interrupted, dtest, ok, fail, _exp = 26; struct lws_context *context; /* * These are used to test the apis to parse and print ipv4 / ipv6 literal * address strings for various cases. * * Expected error cases are not used to test the ip data -> string api. */ static const struct ipparser_tests { const char *test; int rlen; const char *emit_test; int emit_len; uint8_t b[16]; } ipt[] = { { "2001:db8:85a3:0:0:8a2e:370:7334", 16, "2001:db8:85a3::8a2e:370:7334", 28, { 0x20, 0x01, 0x0d, 0xb8, 0x85, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x2e, 0x03, 0x70, 0x73, 0x34 } }, { "2001:db8:85a3::8a2e:370:7334", 16, "2001:db8:85a3::8a2e:370:7334", 28, { 0x20, 0x01, 0x0d, 0xb8, 0x85, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x2e, 0x03, 0x70, 0x73, 0x34 } }, { "::1", 16, "::1", 3, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 } }, { "::", 16, "::", 2, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, { "::ffff:192.0.2.128", 16, "::ffff:192.0.2.128", 18, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x00, 0x02, 0x80 } }, { "cats", -1, "", 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 } }, { "onevalid.bogus.warmcat.com", -1, "", 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 } }, { "1.cat.dog.com", -1, "", 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 } }, { ":::1", -8, "", 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 } }, { "0:0::0:1", 16, "::1", 3, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 } }, { "1.2.3.4", 4, "1.2.3.4", 7, { 1, 2, 3, 4 } }, }; static const struct async_dns_tests { const char *dns_name; int recordtype; int addrlen; uint8_t ads[16]; } adt[] = { { "warmcat.com", LWS_ADNS_RECORD_A, 4, { 46, 105, 127, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } }, { "libwebsockets.org", LWS_ADNS_RECORD_A, 4, { 46, 105, 127, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } }, { "doesntexist", LWS_ADNS_RECORD_A, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } }, { "localhost", LWS_ADNS_RECORD_A, 4, { 127, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } }, { "ipv4only.warmcat.com", LWS_ADNS_RECORD_A, 4, { 46, 105, 127, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } }, { "onevalid.bogus.warmcat.com", LWS_ADNS_RECORD_A, 4, { 46, 105, 127, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } }, #if defined(LWS_WITH_IPV6) { "warmcat.com", LWS_ADNS_RECORD_AAAA, 16, /* check ipv6 */ { 0x20, 0x01, 0x41, 0xd0, 0x00, 0x02, 0xee, 0x93, 0, 0, 0, 0, 0, 0, 0, 1, } }, { "ipv6only.warmcat.com", LWS_ADNS_RECORD_AAAA, 16, /* check ipv6 */ { 0x20, 0x01, 0x41, 0xd0, 0x00, 0x02, 0xee, 0x93, 0, 0, 0, 0, 0, 0, 0, 1, } }, #endif }; static lws_sorted_usec_list_t sul; struct lws * cb1(struct lws *wsi_unused, const char *ads, const struct addrinfo *a, int n, void *opaque); static void next_test_cb(lws_sorted_usec_list_t *sul) { int m; lwsl_notice("%s: querying %s\n", __func__, adt[dtest].dns_name); m = lws_async_dns_query(context, 0, adt[dtest].dns_name, (adns_query_type_t)adt[dtest].recordtype, cb1, NULL, context); if (m != LADNS_RET_CONTINUING && m != LADNS_RET_FOUND && m != LADNS_RET_FAILED_WSI_CLOSED) { lwsl_err("%s: adns 1: %s failed: %d\n", __func__, adt[dtest].dns_name, m); interrupted = 1; } } struct lws * cb1(struct lws *wsi_unused, const char *ads, const struct addrinfo *a, int n, void *opaque) { const struct addrinfo *ac = a; int ctr = 0, alen; uint8_t *addr; char buf[64]; dtest++; if (!ac) lwsl_warn("%s: no results\n", __func__); /* dump the results */ while (ac) { if (ac->ai_family == AF_INET) { addr = (uint8_t *)&(((struct sockaddr_in *) ac->ai_addr)->sin_addr.s_addr); alen = 4; } else { addr = (uint8_t *)&(((struct sockaddr_in6 *) ac->ai_addr)->sin6_addr.s6_addr); alen = 16; } strcpy(buf, "unknown"); lws_write_numeric_address(addr, alen, buf, sizeof(buf)); lwsl_warn("%s: %d: %s %d %s\n", __func__, ctr++, ads, alen, buf); ac = ac->ai_next; } ac = a; while (ac) { if (ac->ai_family == AF_INET) { addr = (uint8_t *)&(((struct sockaddr_in *) ac->ai_addr)->sin_addr.s_addr); alen = 4; } else { #if defined(LWS_WITH_IPV6) addr = (uint8_t *)&(((struct sockaddr_in6 *) ac->ai_addr)->sin6_addr.s6_addr); alen = 16; #else goto again; #endif } if (alen == adt[dtest - 1].addrlen && !memcmp(adt[dtest - 1].ads, addr, (unsigned int)alen)) { ok++; goto next; } #if !defined(LWS_WITH_IPV6) again: #endif ac = ac->ai_next; } /* testing for NXDOMAIN? */ if (!a && !adt[dtest - 1].addrlen) { ok++; goto next; } lwsl_err("%s: dns test %d: no match\n", __func__, dtest); fail++; next: lws_async_dns_freeaddrinfo(&a); if (dtest == (int)LWS_ARRAY_SIZE(adt)) interrupted = 1; else lws_sul_schedule(context, 0, &sul, next_test_cb, 1); return NULL; } static lws_sorted_usec_list_t sul_l; struct lws * cb_loop(struct lws *wsi_unused, const char *ads, const struct addrinfo *a, int n, void *opaque) { if (!a) { lwsl_err("%s: no results\n", __func__); return NULL; } lwsl_notice("%s: addrinfo %p\n", __func__, a);\ lws_async_dns_freeaddrinfo(&a); return NULL; } static void sul_retry_l(struct lws_sorted_usec_list *sul) { int m; lwsl_user("%s: starting new query\n", __func__); m = lws_async_dns_query(context, 0, "warmcat.com", (adns_query_type_t)LWS_ADNS_RECORD_A, cb_loop, NULL, context); switch (m) { case LADNS_RET_FAILED_WSI_CLOSED: lwsl_warn("%s: LADNS_RET_FAILED_WSI_CLOSED " "(== from cache / success in this test)\n", __func__); break; case LADNS_RET_NXDOMAIN: lwsl_warn("%s: LADNS_RET_NXDOMAIN\n", __func__); break; case LADNS_RET_TIMEDOUT: lwsl_warn("%s: LADNS_RET_TIMEDOUT\n", __func__); break; case LADNS_RET_FAILED: lwsl_warn("%s: LADNS_RET_FAILED\n", __func__); break; case LADNS_RET_FOUND: lwsl_warn("%s: LADNS_RET_FOUND\n", __func__); break; case LADNS_RET_CONTINUING: lwsl_warn("%s: LADNS_RET_CONTINUING\n", __func__); break; } lws_sul_schedule(context, 0, &sul_l, sul_retry_l, 5 * LWS_US_PER_SEC); } void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { int n = 1, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; struct lws_context_creation_info info; const char *p; /* the normal lws init */ signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS API selftest: Async DNS\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = CONTEXT_PORT_NO_LISTEN; info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } if (lws_cmdline_option(argc, argv, "-l")) { lws_sul_schedule(context, 0, &sul_l, sul_retry_l, LWS_US_PER_SEC); goto evloop; } /* ip address parser tests */ for (n = 0; n < (int)LWS_ARRAY_SIZE(ipt); n++) { uint8_t u[16]; int m = lws_parse_numeric_address(ipt[n].test, u, sizeof(u)); if (m != ipt[n].rlen) { lwsl_err("%s: fail %s ret %d\n", __func__, ipt[n].test, m); fail++; continue; } if (m > 0) { if (memcmp(ipt[n].b, u, (unsigned int)m)) { lwsl_err("%s: fail %s compare\n", __func__, ipt[n].test); lwsl_hexdump_notice(u, (unsigned int)m); fail++; continue; } } ok++; } /* ip address formatter tests */ for (n = 0; n < (int)LWS_ARRAY_SIZE(ipt); n++) { char buf[64]; int m; /* don't attempt to reverse the ones that are meant to fail */ if (ipt[n].rlen < 0) continue; m = lws_write_numeric_address(ipt[n].b, ipt[n].rlen, buf, sizeof(buf)); if (m != ipt[n].emit_len) { lwsl_err("%s: fail %s ret %d\n", __func__, ipt[n].emit_test, m); fail++; continue; } if (m > 0) { if (strcmp(ipt[n].emit_test, buf)) { lwsl_err("%s: fail %s compare\n", __func__, ipt[n].test); lwsl_hexdump_notice(buf, (unsigned int)m); fail++; continue; } } ok++; } #if !defined(LWS_WITH_IPV6) _exp -= 2; #endif /* kick off the async dns tests */ lws_sul_schedule(context, 0, &sul, next_test_cb, 1); evloop: /* the usual lws event loop */ n = 1; while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); if (fail || ok != _exp) lwsl_user("Completed: PASS: %d / %d, FAIL: %d\n", ok, _exp, fail); else lwsl_user("Completed: ALL PASS: %d / %d\n", ok, _exp); return !(ok == _exp && !fail); } libwebsockets-4.3.5/minimal-examples/api-tests/api-test-cose/000077500000000000000000000000001476025525100242225ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/api-tests/api-test-cose/CMakeLists.txt000066400000000000000000000015051476025525100267630ustar00rootroot00000000000000project(lws-api-test-cose C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-api-test-cose) set(SRCS main.c keys.c sign.c) set(requirements 1) require_lws_config(LWS_WITH_COSE 1 requirements) require_lws_config(LWS_WITH_CBOR 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (NOT (LWS_WITH_MBEDTLS AND NOT LWS_HAVE_mbedtls_internal_aes_encrypt)) add_test(NAME api-test-cose COMMAND lws-api-test-cose) endif() if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/api-tests/api-test-cose/README.md000066400000000000000000000005421476025525100255020ustar00rootroot00000000000000# lws api test lwsac Demonstrates how to use and performs selftests for lwsac ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 ``` $ ./lws-api-test-lwsac [2018/10/09 09:14:17:4834] USER: LWS API selftest: lwsac [2018/10/09 09:14:17:4835] USER: Completed: PASS ``` libwebsockets-4.3.5/minimal-examples/api-tests/api-test-cose/keys.c000066400000000000000000000652431476025525100253530ustar00rootroot00000000000000/* * lws-api-test-jose - RFC8152 cose_key tests * * Written in 2010-2021 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * Raw key CBOR created from descriptions at * * https://github.com/cose-wg/Examples/blob/master/KeySet.txt */ #include #include #include static int key_import_cb(struct lws_cose_key *s, void *user) { lwsl_notice("%s: key type %lld\n", __func__, (long long)s->kty); return 0; } static const uint8_t cose_key1[] = { 0xa6, 0x01, 0x02, 0x02, 0x62, 0x31, 0x31, 0x20, 0x01, 0x21, 0x58, 0x20, 0xba, 0xc5, 0xb1, 0x1c, 0xad, 0x8f, 0x99, 0xf9, 0xc7, 0x2b, 0x05, 0xcf, 0x4b, 0x9e, 0x26, 0xd2, 0x44, 0xdc, 0x18, 0x9f, 0x74, 0x52, 0x28, 0x25, 0x5a, 0x21, 0x9a, 0x86, 0xd6, 0xa0, 0x9e, 0xff, 0x22, 0x58, 0x20, 0x20, 0x13, 0x8b, 0xf8, 0x2d, 0xc1, 0xb6, 0xd5, 0x62, 0xbe, 0x0f, 0xa5, 0x4a, 0xb7, 0x80, 0x4a, 0x3a, 0x64, 0xb6, 0xd7, 0x2c, 0xcf, 0xed, 0x6b, 0x6f, 0xb6, 0xed, 0x28, 0xbb, 0xfc, 0x11, 0x7e, 0x23, 0x58, 0x20, 0x57, 0xc9, 0x20, 0x77, 0x66, 0x41, 0x46, 0xe8, 0x76, 0x76, 0x0c, 0x95, 0x20, 0xd0, 0x54, 0xaa, 0x93, 0xc3, 0xaf, 0xb0, 0x4e, 0x30, 0x67, 0x05, 0xdb, 0x60, 0x90, 0x30, 0x85, 0x07, 0xb4, 0xd3 }, cose_key2[] = { 0xa6, 0x01, 0x02, 0x02, 0x78, 0x24, 0x6d, 0x65, 0x72, 0x69, 0x61, 0x64, 0x6f, 0x63, 0x2e, 0x62, 0x72, 0x61, 0x6e, 0x64, 0x79, 0x62, 0x75, 0x63, 0x6b, 0x40, 0x62, 0x75, 0x63, 0x6b, 0x6c, 0x61, 0x6e, 0x64, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x01, 0x21, 0x58, 0x20, 0x65, 0xed, 0xa5, 0xa1, 0x25, 0x77, 0xc2, 0xba, 0xe8, 0x29, 0x43, 0x7f, 0xe3, 0x38, 0x70, 0x1a, 0x10, 0xaa, 0xa3, 0x75, 0xe1, 0xbb, 0x5b, 0x5d, 0xe1, 0x08, 0xde, 0x43, 0x9c, 0x08, 0x55, 0x1d, 0x22, 0x58, 0x20, 0x1e, 0x52, 0xed, 0x75, 0x70, 0x11, 0x63, 0xf7, 0xf9, 0xe4, 0x0d, 0xdf, 0x9f, 0x34, 0x1b, 0x3d, 0xc9, 0xba, 0x86, 0x0a, 0xf7, 0xe0, 0xca, 0x7c, 0xa7, 0xe9, 0xee, 0xcd, 0x00, 0x84, 0xd1, 0x9c, 0x23, 0x58, 0x20, 0xaf, 0xf9, 0x07, 0xc9, 0x9f, 0x9a, 0xd3, 0xaa, 0xe6, 0xc4, 0xcd, 0xf2, 0x11, 0x22, 0xbc, 0xe2, 0xbd, 0x68, 0xb5, 0x28, 0x3e, 0x69, 0x07, 0x15, 0x4a, 0xd9, 0x11, 0x84, 0x0f, 0xa2, 0x08, 0xcf }, cose_key3[] = { 0xa3, 0x01, 0x04, 0x02, 0x6a, 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x20, 0x58, 0x20, 0x84, 0x9b, 0x57, 0x21, 0x9d, 0xae, 0x48, 0xde, 0x64, 0x6d, 0x07, 0xdb, 0xb5, 0x33, 0x56, 0x6e, 0x97, 0x66, 0x86, 0x45, 0x7c, 0x14, 0x91, 0xbe, 0x3a, 0x76, 0xdc, 0xea, 0x6c, 0x42, 0x71, 0x88 }, cose_key4[] = { 0xa6, 0x01, 0x02, 0x02, 0x78, 0x1e, 0x62, 0x69, 0x6c, 0x62, 0x6f, 0x2e, 0x62, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x73, 0x40, 0x68, 0x6f, 0x62, 0x62, 0x69, 0x74, 0x6f, 0x6e, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x03, 0x21, 0x58, 0x42, 0x00, 0x72, 0x99, 0x2c, 0xb3, 0xac, 0x08, 0xec, 0xf3, 0xe5, 0xc6, 0x3d, 0xed, 0xec, 0x0d, 0x51, 0xa8, 0xc1, 0xf7, 0x9e, 0xf2, 0xf8, 0x2f, 0x94, 0xf3, 0xc7, 0x37, 0xbf, 0x5d, 0xe7, 0x98, 0x66, 0x71, 0xea, 0xc6, 0x25, 0xfe, 0x82, 0x57, 0xbb, 0xd0, 0x39, 0x46, 0x44, 0xca, 0xaa, 0x3a, 0xaf, 0x8f, 0x27, 0xa4, 0x58, 0x5f, 0xbb, 0xca, 0xd0, 0xf2, 0x45, 0x76, 0x20, 0x08, 0x5e, 0x5c, 0x8f, 0x42, 0xad, 0x22, 0x58, 0x42, 0x01, 0xdc, 0xa6, 0x94, 0x7b, 0xce, 0x88, 0xbc, 0x57, 0x90, 0x48, 0x5a, 0xc9, 0x74, 0x27, 0x34, 0x2b, 0xc3, 0x5f, 0x88, 0x7d, 0x86, 0xd6, 0x5a, 0x08, 0x93, 0x77, 0xe2, 0x47, 0xe6, 0x0b, 0xaa, 0x55, 0xe4, 0xe8, 0x50, 0x1e, 0x2a, 0xda, 0x57, 0x24, 0xac, 0x51, 0xd6, 0x90, 0x90, 0x08, 0x03, 0x3e, 0xbc, 0x10, 0xac, 0x99, 0x9b, 0x9d, 0x7f, 0x5c, 0xc2, 0x51, 0x9f, 0x3f, 0xe1, 0xea, 0x1d, 0x94, 0x75, 0x23, 0x58, 0x42, 0x00, 0x08, 0x51, 0x38, 0xdd, 0xab, 0xf5, 0xca, 0x97, 0x5f, 0x58, 0x60, 0xf9, 0x1a, 0x08, 0xe9, 0x1d, 0x6d, 0x5f, 0x9a, 0x76, 0xad, 0x40, 0x18, 0x76, 0x6a, 0x47, 0x66, 0x80, 0xb5, 0x5c, 0xd3, 0x39, 0xe8, 0xab, 0x6c, 0x72, 0xb5, 0xfa, 0xcd, 0xb2, 0xa2, 0xa5, 0x0a, 0xc2, 0x5b, 0xd0, 0x86, 0x64, 0x7d, 0xd3, 0xe2, 0xe6, 0xe9, 0x9e, 0x84, 0xca, 0x2c, 0x36, 0x09, 0xfd, 0xf1, 0x77, 0xfe, 0xb2, 0x6d }, cose_key5[] = { 0xa3, 0x01, 0x04, 0x02, 0x6b, 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x32, 0x20, 0x50, 0x84, 0x9b, 0x57, 0x86, 0x45, 0x7c, 0x14, 0x91, 0xbe, 0x3a, 0x76, 0xdc, 0xea, 0x6c, 0x42, 0x71 }, cose_key6[] = { 0xa6, 0x01, 0x02, 0x02, 0x78, 0x21, 0x70, 0x65, 0x72, 0x65, 0x67, 0x72, 0x69, 0x6e, 0x2e, 0x74, 0x6f, 0x6f, 0x6b, 0x40, 0x74, 0x75, 0x63, 0x6b, 0x62, 0x6f, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x01, 0x21, 0x58, 0x20, 0x98, 0xf5, 0x0a, 0x4f, 0xf6, 0xc0, 0x58, 0x61, 0xc8, 0x86, 0x0d, 0x13, 0xa6, 0x38, 0xea, 0x56, 0xc3, 0xf5, 0xad, 0x75, 0x90, 0xbb, 0xfb, 0xf0, 0x54, 0xe1, 0xc7, 0xb4, 0xd9, 0x1d, 0x62, 0x80, 0x22, 0x58, 0x20, 0xf0, 0x14, 0x00, 0xb0, 0x89, 0x86, 0x78, 0x04, 0xb8, 0xe9, 0xfc, 0x96, 0xc3, 0x93, 0x21, 0x61, 0xf1, 0x93, 0x4f, 0x42, 0x23, 0x06, 0x91, 0x70, 0xd9, 0x24, 0xb7, 0xe0, 0x3b, 0xf8, 0x22, 0xbb, 0x23, 0x58, 0x20, 0x02, 0xd1, 0xf7, 0xe6, 0xf2, 0x6c, 0x43, 0xd4, 0x86, 0x8d, 0x87, 0xce, 0xb2, 0x35, 0x31, 0x61, 0x74, 0x0a, 0xac, 0xf1, 0xf7, 0x16, 0x36, 0x47, 0x98, 0x4b, 0x52, 0x2a, 0x84, 0x8d, 0xf1, 0xc3 }, cose_key7[] = { 0xa3, 0x01, 0x04, 0x02, 0x58, 0x24, 0x30, 0x31, 0x38, 0x63, 0x30, 0x61, 0x65, 0x35, 0x2d, 0x34, 0x64, 0x39, 0x62, 0x2d, 0x34, 0x37, 0x31, 0x62, 0x2d, 0x62, 0x66, 0x64, 0x36, 0x2d, 0x65, 0x65, 0x66, 0x33, 0x31, 0x34, 0x62, 0x63, 0x37, 0x30, 0x33, 0x37, 0x20, 0x58, 0x20, 0x84, 0x9b, 0x57, 0x21, 0x9d, 0xae, 0x48, 0xde, 0x64, 0x6d, 0x07, 0xdb, 0xb5, 0x33, 0x56, 0x6e, 0x97, 0x66, 0x86, 0x45, 0x7c, 0x14, 0x91, 0xbe, 0x3a, 0x76, 0xdc, 0xea, 0x6c, 0x42, 0x71, 0x88 }, cose_key8[] = { /* kid "sec-48" for hmac 384 */ 0xa3, 0x01, 0x04, 0x02, 0x66, 0x73, 0x65, 0x63, 0x2d, 0x34, 0x38, 0x20, 0x58, 0x30, 0x84, 0x9b, 0x57, 0x21, 0x9d, 0xae, 0x48, 0xde, 0x64, 0x6d, 0x07, 0xdb, 0xb5, 0x33, 0x56, 0x6e, 0x97, 0x66, 0x86, 0x45, 0x7c, 0x14, 0x91, 0xbe, 0x3a, 0x76, 0xdc, 0xea, 0x6c, 0x42, 0x71, 0x88, 0x00, 0x11, 0x22, 0x33, 0x77, 0x88, 0x99, 0xaa, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28 }, cose_key9[] = { /* kid "sec-64" for hmac 512 */ 0xa3, 0x01, 0x04, 0x02, 0x46, 0x73, 0x65, 0x63, 0x2d, 0x36, 0x34, 0x20, 0x58, 0x40, 0x84, 0x9b, 0x57, 0x21, 0x9d, 0xae, 0x48, 0xde, 0x64, 0x6d, 0x07, 0xdb, 0xb5, 0x33, 0x56, 0x6e, 0x97, 0x66, 0x86, 0x45, 0x7c, 0x14, 0x91, 0xbe, 0x3a, 0x76, 0xdc, 0xea, 0x6c, 0x42, 0x71, 0x88, 0x00, 0x11, 0x22, 0x33, 0x77, 0x88, 0x99, 0xaa, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xa0, 0xb1, 0xb2, 0xb3, 0xb4, }, cose_key10[] = { /* kid "11" (again) ed22519 OKP key */ 0xa5, 0x01, 0x01, 0x02, 0x42, 0x31, 0x31, 0x20, 0x06, 0x21, 0x58, 0x20, 0xd7, 0x5a, 0x98, 0x01, 0x82, 0xb1, 0x0a, 0xb7, 0xd5, 0x4b, 0xfe, 0xd3, 0xc9, 0x64, 0x07, 0x3a, 0x0e, 0xe1, 0x72, 0xf3, 0xda, 0xa6, 0x23, 0x25, 0xaf, 0x02, 0x1a, 0x68, 0xf7, 0x07, 0x51, 0x1a, 0x23, 0x58, 0x20, 0x9d, 0x61, 0xb1, 0x9d, 0xef, 0xfd, 0x5a, 0x60, 0xba, 0x84, 0x4a, 0xf4, 0x92, 0xec, 0x2c, 0xc4, 0x44, 0x49, 0xc5, 0x69, 0x7b, 0x32, 0x69, 0x19, 0x70, 0x3b, 0xac, 0x03, 0x1c, 0xae, 0x7f, 0x60 }, cose_key_set1[] = { 0x89, 0xa6, 0x01, 0x02, 0x02, 0x42, 0x31, 0x31, 0x20, 0x01, 0x21, 0x58, 0x20, 0xba, 0xc5, 0xb1, 0x1c, 0xad, 0x8f, 0x99, 0xf9, 0xc7, 0x2b, 0x05, 0xcf, 0x4b, 0x9e, 0x26, 0xd2, 0x44, 0xdc, 0x18, 0x9f, 0x74, 0x52, 0x28, 0x25, 0x5a, 0x21, 0x9a, 0x86, 0xd6, 0xa0, 0x9e, 0xff, 0x22, 0x58, 0x20, 0x20, 0x13, 0x8b, 0xf8, 0x2d, 0xc1, 0xb6, 0xd5, 0x62, 0xbe, 0x0f, 0xa5, 0x4a, 0xb7, 0x80, 0x4a, 0x3a, 0x64, 0xb6, 0xd7, 0x2c, 0xcf, 0xed, 0x6b, 0x6f, 0xb6, 0xed, 0x28, 0xbb, 0xfc, 0x11, 0x7e, 0x23, 0x58, 0x20, 0x57, 0xc9, 0x20, 0x77, 0x66, 0x41, 0x46, 0xe8, 0x76, 0x76, 0x0c, 0x95, 0x20, 0xd0, 0x54, 0xaa, 0x93, 0xc3, 0xaf, 0xb0, 0x4e, 0x30, 0x67, 0x05, 0xdb, 0x60, 0x90, 0x30, 0x85, 0x07, 0xb4, 0xd3, 0xa6, 0x01, 0x02, 0x02, 0x58, 0x24, 0x6d, 0x65, 0x72, 0x69, 0x61, 0x64, 0x6f, 0x63, 0x2e, 0x62, 0x72, 0x61, 0x6e, 0x64, 0x79, 0x62, 0x75, 0x63, 0x6b, 0x40, 0x62, 0x75, 0x63, 0x6b, 0x6c, 0x61, 0x6e, 0x64, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x01, 0x21, 0x58, 0x20, 0x65, 0xed, 0xa5, 0xa1, 0x25, 0x77, 0xc2, 0xba, 0xe8, 0x29, 0x43, 0x7f, 0xe3, 0x38, 0x70, 0x1a, 0x10, 0xaa, 0xa3, 0x75, 0xe1, 0xbb, 0x5b, 0x5d, 0xe1, 0x08, 0xde, 0x43, 0x9c, 0x08, 0x55, 0x1d, 0x22, 0x58, 0x20, 0x1e, 0x52, 0xed, 0x75, 0x70, 0x11, 0x63, 0xf7, 0xf9, 0xe4, 0x0d, 0xdf, 0x9f, 0x34, 0x1b, 0x3d, 0xc9, 0xba, 0x86, 0x0a, 0xf7, 0xe0, 0xca, 0x7c, 0xa7, 0xe9, 0xee, 0xcd, 0x00, 0x84, 0xd1, 0x9c, 0x23, 0x58, 0x20, 0xaf, 0xf9, 0x07, 0xc9, 0x9f, 0x9a, 0xd3, 0xaa, 0xe6, 0xc4, 0xcd, 0xf2, 0x11, 0x22, 0xbc, 0xe2, 0xbd, 0x68, 0xb5, 0x28, 0x3e, 0x69, 0x07, 0x15, 0x4a, 0xd9, 0x11, 0x84, 0x0f, 0xa2, 0x08, 0xcf, 0xa3, 0x01, 0x04, 0x02, 0x4a, 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x20, 0x58, 0x20, 0x84, 0x9b, 0x57, 0x21, 0x9d, 0xae, 0x48, 0xde, 0x64, 0x6d, 0x07, 0xdb, 0xb5, 0x33, 0x56, 0x6e, 0x97, 0x66, 0x86, 0x45, 0x7c, 0x14, 0x91, 0xbe, 0x3a, 0x76, 0xdc, 0xea, 0x6c, 0x42, 0x71, 0x88, 0xa6, 0x01, 0x02, 0x02, 0x58, 0x1e, 0x62, 0x69, 0x6c, 0x62, 0x6f, 0x2e, 0x62, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x73, 0x40, 0x68, 0x6f, 0x62, 0x62, 0x69, 0x74, 0x6f, 0x6e, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x03, 0x21, 0x58, 0x42, 0x00, 0x72, 0x99, 0x2c, 0xb3, 0xac, 0x08, 0xec, 0xf3, 0xe5, 0xc6, 0x3d, 0xed, 0xec, 0x0d, 0x51, 0xa8, 0xc1, 0xf7, 0x9e, 0xf2, 0xf8, 0x2f, 0x94, 0xf3, 0xc7, 0x37, 0xbf, 0x5d, 0xe7, 0x98, 0x66, 0x71, 0xea, 0xc6, 0x25, 0xfe, 0x82, 0x57, 0xbb, 0xd0, 0x39, 0x46, 0x44, 0xca, 0xaa, 0x3a, 0xaf, 0x8f, 0x27, 0xa4, 0x58, 0x5f, 0xbb, 0xca, 0xd0, 0xf2, 0x45, 0x76, 0x20, 0x08, 0x5e, 0x5c, 0x8f, 0x42, 0xad, 0x22, 0x58, 0x42, 0x01, 0xdc, 0xa6, 0x94, 0x7b, 0xce, 0x88, 0xbc, 0x57, 0x90, 0x48, 0x5a, 0xc9, 0x74, 0x27, 0x34, 0x2b, 0xc3, 0x5f, 0x88, 0x7d, 0x86, 0xd6, 0x5a, 0x08, 0x93, 0x77, 0xe2, 0x47, 0xe6, 0x0b, 0xaa, 0x55, 0xe4, 0xe8, 0x50, 0x1e, 0x2a, 0xda, 0x57, 0x24, 0xac, 0x51, 0xd6, 0x90, 0x90, 0x08, 0x03, 0x3e, 0xbc, 0x10, 0xac, 0x99, 0x9b, 0x9d, 0x7f, 0x5c, 0xc2, 0x51, 0x9f, 0x3f, 0xe1, 0xea, 0x1d, 0x94, 0x75, 0x23, 0x58, 0x42, 0x00, 0x08, 0x51, 0x38, 0xdd, 0xab, 0xf5, 0xca, 0x97, 0x5f, 0x58, 0x60, 0xf9, 0x1a, 0x08, 0xe9, 0x1d, 0x6d, 0x5f, 0x9a, 0x76, 0xad, 0x40, 0x18, 0x76, 0x6a, 0x47, 0x66, 0x80, 0xb5, 0x5c, 0xd3, 0x39, 0xe8, 0xab, 0x6c, 0x72, 0xb5, 0xfa, 0xcd, 0xb2, 0xa2, 0xa5, 0x0a, 0xc2, 0x5b, 0xd0, 0x86, 0x64, 0x7d, 0xd3, 0xe2, 0xe6, 0xe9, 0x9e, 0x84, 0xca, 0x2c, 0x36, 0x09, 0xfd, 0xf1, 0x77, 0xfe, 0xb2, 0x6d, 0xa3, 0x01, 0x04, 0x02, 0x4b, 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x32, 0x20, 0x50, 0x84, 0x9b, 0x57, 0x86, 0x45, 0x7c, 0x14, 0x91, 0xbe, 0x3a, 0x76, 0xdc, 0xea, 0x6c, 0x42, 0x71, 0xa6, 0x01, 0x02, 0x02, 0x58, 0x21, 0x70, 0x65, 0x72, 0x65, 0x67, 0x72, 0x69, 0x6e, 0x2e, 0x74, 0x6f, 0x6f, 0x6b, 0x40, 0x74, 0x75, 0x63, 0x6b, 0x62, 0x6f, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x01, 0x21, 0x58, 0x20, 0x98, 0xf5, 0x0a, 0x4f, 0xf6, 0xc0, 0x58, 0x61, 0xc8, 0x86, 0x0d, 0x13, 0xa6, 0x38, 0xea, 0x56, 0xc3, 0xf5, 0xad, 0x75, 0x90, 0xbb, 0xfb, 0xf0, 0x54, 0xe1, 0xc7, 0xb4, 0xd9, 0x1d, 0x62, 0x80, 0x22, 0x58, 0x20, 0xf0, 0x14, 0x00, 0xb0, 0x89, 0x86, 0x78, 0x04, 0xb8, 0xe9, 0xfc, 0x96, 0xc3, 0x93, 0x21, 0x61, 0xf1, 0x93, 0x4f, 0x42, 0x23, 0x06, 0x91, 0x70, 0xd9, 0x24, 0xb7, 0xe0, 0x3b, 0xf8, 0x22, 0xbb, 0x23, 0x58, 0x20, 0x02, 0xd1, 0xf7, 0xe6, 0xf2, 0x6c, 0x43, 0xd4, 0x86, 0x8d, 0x87, 0xce, 0xb2, 0x35, 0x31, 0x61, 0x74, 0x0a, 0xac, 0xf1, 0xf7, 0x16, 0x36, 0x47, 0x98, 0x4b, 0x52, 0x2a, 0x84, 0x8d, 0xf1, 0xc3, 0xa3, 0x01, 0x04, 0x02, 0x58, 0x24, 0x30, 0x31, 0x38, 0x63, 0x30, 0x61, 0x65, 0x35, 0x2d, 0x34, 0x64, 0x39, 0x62, 0x2d, 0x34, 0x37, 0x31, 0x62, 0x2d, 0x62, 0x66, 0x64, 0x36, 0x2d, 0x65, 0x65, 0x66, 0x33, 0x31, 0x34, 0x62, 0x63, 0x37, 0x30, 0x33, 0x37, 0x04, 0x58, 0x20, 0x84, 0x9b, 0x57, 0x21, 0x9d, 0xae, 0x48, 0xde, 0x64, 0x6d, 0x07, 0xdb, 0xb5, 0x33, 0x56, 0x6e, 0x97, 0x66, 0x86, 0x45, 0x7c, 0x14, 0x91, 0xbe, 0x3a, 0x76, 0xdc, 0xea, 0x6c, 0x42, 0x71, 0x88, /* kid "sec-48" for hmac 384 */ 0xa3, 0x01, 0x04, 0x02, 0x46, 0x73, 0x65, 0x63, 0x2d, 0x34, 0x38, 0x20, 0x58, 0x30, 0x84, 0x9b, 0x57, 0x21, 0x9d, 0xae, 0x48, 0xde, 0x64, 0x6d, 0x07, 0xdb, 0xb5, 0x33, 0x56, 0x6e, 0x97, 0x66, 0x86, 0x45, 0x7c, 0x14, 0x91, 0xbe, 0x3a, 0x76, 0xdc, 0xea, 0x6c, 0x42, 0x71, 0x88, 0x00, 0x11, 0x22, 0x33, 0x77, 0x88, 0x99, 0xaa, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, /* kid "sec-64" for hmac 512 */ 0xa3, 0x01, 0x04, 0x02, 0x46, 0x73, 0x65, 0x63, 0x2d, 0x36, 0x34, 0x20, 0x58, 0x40, 0x84, 0x9b, 0x57, 0x21, 0x9d, 0xae, 0x48, 0xde, 0x64, 0x6d, 0x07, 0xdb, 0xb5, 0x33, 0x56, 0x6e, 0x97, 0x66, 0x86, 0x45, 0x7c, 0x14, 0x91, 0xbe, 0x3a, 0x76, 0xdc, 0xea, 0x6c, 0x42, 0x71, 0x88, 0x00, 0x11, 0x22, 0x33, 0x77, 0x88, 0x99, 0xaa, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xa0, 0xb1, 0xb2, 0xb3, 0xb4, } ; struct keyinfo { const uint8_t *set; size_t len; }; struct keyinfo keyset1 = { cose_key_set1, sizeof(cose_key_set1) }, key3 = { cose_key3, sizeof(cose_key3) }, key8 = { cose_key8, sizeof(cose_key8) }, key9 = { cose_key9, sizeof(cose_key9) }, key10 = { cose_key10, sizeof(cose_key10) } ; /* key pieces */ static const uint8_t key1_x[] = { 0xba, 0xc5, 0xb1, 0x1c, 0xad, 0x8f, 0x99, 0xf9, 0xc7, 0x2b, 0x05, 0xcf, 0x4b, 0x9e, 0x26, 0xd2, 0x44, 0xdc, 0x18, 0x9f, 0x74, 0x52, 0x28, 0x25, 0x5a, 0x21, 0x9a, 0x86, 0xd6, 0xa0, 0x9e, 0xff }, key1_y[] = { 0x20, 0x13, 0x8b, 0xf8, 0x2d, 0xc1, 0xb6, 0xd5, 0x62, 0xbe, 0x0f, 0xa5, 0x4a, 0xb7, 0x80, 0x4a, 0x3a, 0x64, 0xb6, 0xd7, 0x2c, 0xcf, 0xed, 0x6b, 0x6f, 0xb6, 0xed, 0x28, 0xbb, 0xfc, 0x11, 0x7e }, key1_d[] = { 0x57, 0xc9, 0x20, 0x77, 0x66, 0x41, 0x46, 0xe8, 0x76, 0x76, 0x0c, 0x95, 0x20, 0xd0, 0x54, 0xaa, 0x93, 0xc3, 0xaf, 0xb0, 0x4e, 0x30, 0x67, 0x05, 0xdb, 0x60, 0x90, 0x30, 0x85, 0x07, 0xb4, 0xd3 }, key2_x[] = { 0x65, 0xed, 0xa5, 0xa1, 0x25, 0x77, 0xc2, 0xba, 0xe8, 0x29, 0x43, 0x7f, 0xe3, 0x38, 0x70, 0x1a, 0x10, 0xaa, 0xa3, 0x75, 0xe1, 0xbb, 0x5b, 0x5d, 0xe1, 0x08, 0xde, 0x43, 0x9c, 0x08, 0x55, 0x1d }, key2_y[] = { 0x1e, 0x52, 0xed, 0x75, 0x70, 0x11, 0x63, 0xf7, 0xf9, 0xe4, 0x0d, 0xdf, 0x9f, 0x34, 0x1b, 0x3d, 0xc9, 0xba, 0x86, 0x0a, 0xf7, 0xe0, 0xca, 0x7c, 0xa7, 0xe9, 0xee, 0xcd, 0x00, 0x84, 0xd1, 0x9c }, key2_d[] = { 0xaf, 0xf9, 0x07, 0xc9, 0x9f, 0x9a, 0xd3, 0xaa, 0xe6, 0xc4, 0xcd, 0xf2, 0x11, 0x22, 0xbc, 0xe2, 0xbd, 0x68, 0xb5, 0x28, 0x3e, 0x69, 0x07, 0x15, 0x4a, 0xd9, 0x11, 0x84, 0x0f, 0xa2, 0x08, 0xcf }, key3_k[] = { 0x84, 0x9b, 0x57, 0x21, 0x9d, 0xae, 0x48, 0xde, 0x64, 0x6d, 0x07, 0xdb, 0xb5, 0x33, 0x56, 0x6e, 0x97, 0x66, 0x86, 0x45, 0x7c, 0x14, 0x91, 0xbe, 0x3a, 0x76, 0xdc, 0xea, 0x6c, 0x42, 0x71, 0x88 }, key4_x[] = { 0x00, 0x72, 0x99, 0x2c, 0xb3, 0xac, 0x08, 0xec, 0xf3, 0xe5, 0xc6, 0x3d, 0xed, 0xec, 0x0d, 0x51, 0xa8, 0xc1, 0xf7, 0x9e, 0xf2, 0xf8, 0x2f, 0x94, 0xf3, 0xc7, 0x37, 0xbf, 0x5d, 0xe7, 0x98, 0x66, 0x71, 0xea, 0xc6, 0x25, 0xfe, 0x82, 0x57, 0xbb, 0xd0, 0x39, 0x46, 0x44, 0xca, 0xaa, 0x3a, 0xaf, 0x8f, 0x27, 0xa4, 0x58, 0x5f, 0xbb, 0xca, 0xd0, 0xf2, 0x45, 0x76, 0x20, 0x08, 0x5e, 0x5c, 0x8f, 0x42, 0xad }, key4_y[] = { 0x01, 0xdc, 0xa6, 0x94, 0x7b, 0xce, 0x88, 0xbc, 0x57, 0x90, 0x48, 0x5a, 0xc9, 0x74, 0x27, 0x34, 0x2b, 0xc3, 0x5f, 0x88, 0x7d, 0x86, 0xd6, 0x5a, 0x08, 0x93, 0x77, 0xe2, 0x47, 0xe6, 0x0b, 0xaa, 0x55, 0xe4, 0xe8, 0x50, 0x1e, 0x2a, 0xda, 0x57, 0x24, 0xac, 0x51, 0xd6, 0x90, 0x90, 0x08, 0x03, 0x3e, 0xbc, 0x10, 0xac, 0x99, 0x9b, 0x9d, 0x7f, 0x5c, 0xc2, 0x51, 0x9f, 0x3f, 0xe1, 0xea, 0x1d, 0x94, 0x75 }, key4_d[] = { 0x00, 0x08, 0x51, 0x38, 0xdd, 0xab, 0xf5, 0xca, 0x97, 0x5f, 0x58, 0x60, 0xf9, 0x1a, 0x08, 0xe9, 0x1d, 0x6d, 0x5f, 0x9a, 0x76, 0xad, 0x40, 0x18, 0x76, 0x6a, 0x47, 0x66, 0x80, 0xb5, 0x5c, 0xd3, 0x39, 0xe8, 0xab, 0x6c, 0x72, 0xb5, 0xfa, 0xcd, 0xb2, 0xa2, 0xa5, 0x0a, 0xc2, 0x5b, 0xd0, 0x86, 0x64, 0x7d, 0xd3, 0xe2, 0xe6, 0xe9, 0x9e, 0x84, 0xca, 0x2c, 0x36, 0x09, 0xfd, 0xf1, 0x77, 0xfe, 0xb2, 0x6d }, key5_k[] = { 0x84, 0x9b, 0x57, 0x86, 0x45, 0x7c, 0x14, 0x91, 0xbe, 0x3a, 0x76, 0xdc, 0xea, 0x6c, 0x42, 0x71 }, key6_x[] = { 0x98, 0xf5, 0x0a, 0x4f, 0xf6, 0xc0, 0x58, 0x61, 0xc8, 0x86, 0x0d, 0x13, 0xa6, 0x38, 0xea, 0x56, 0xc3, 0xf5, 0xad, 0x75, 0x90, 0xbb, 0xfb, 0xf0, 0x54, 0xe1, 0xc7, 0xb4, 0xd9, 0x1d, 0x62, 0x80 }, key6_y[] = { 0xf0, 0x14, 0x00, 0xb0, 0x89, 0x86, 0x78, 0x04, 0xb8, 0xe9, 0xfc, 0x96, 0xc3, 0x93, 0x21, 0x61, 0xf1, 0x93, 0x4f, 0x42, 0x23, 0x06, 0x91, 0x70, 0xd9, 0x24, 0xb7, 0xe0, 0x3b, 0xf8, 0x22, 0xbb }, key6_d[] = { 0x02, 0xd1, 0xf7, 0xe6, 0xf2, 0x6c, 0x43, 0xd4, 0x86, 0x8d, 0x87, 0xce, 0xb2, 0x35, 0x31, 0x61, 0x74, 0x0a, 0xac, 0xf1, 0xf7, 0x16, 0x36, 0x47, 0x98, 0x4b, 0x52, 0x2a, 0x84, 0x8d, 0xf1, 0xc3 }, key7_k[] = { 0x84, 0x9b, 0x57, 0x21, 0x9d, 0xae, 0x48, 0xde, 0x64, 0x6d, 0x07, 0xdb, 0xb5, 0x33, 0x56, 0x6e, 0x97, 0x66, 0x86, 0x45, 0x7c, 0x14, 0x91, 0xbe, 0x3a, 0x76, 0xdc, 0xea, 0x6c, 0x42, 0x71, 0x88 }, key8_k[] = { 0x84, 0x9b, 0x57, 0x21, 0x9d, 0xae, 0x48, 0xde, 0x64, 0x6d, 0x07, 0xdb, 0xb5, 0x33, 0x56, 0x6e, 0x97, 0x66, 0x86, 0x45, 0x7c, 0x14, 0x91, 0xbe, 0x3a, 0x76, 0xdc, 0xea, 0x6c, 0x42, 0x71, 0x88, 0x00, 0x11, 0x22, 0x33, 0x77, 0x88, 0x99, 0xaa, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28 }, key9_k[] = { 0x84, 0x9b, 0x57, 0x21, 0x9d, 0xae, 0x48, 0xde, 0x64, 0x6d, 0x07, 0xdb, 0xb5, 0x33, 0x56, 0x6e, 0x97, 0x66, 0x86, 0x45, 0x7c, 0x14, 0x91, 0xbe, 0x3a, 0x76, 0xdc, 0xea, 0x6c, 0x42, 0x71, 0x88, 0x00, 0x11, 0x22, 0x33, 0x77, 0x88, 0x99, 0xaa, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xa0, 0xb1, 0xb2, 0xb3, 0xb4 } #if 0 , key10_x[] = { 0xd7, 0x5a, 0x98, 0x01, 0x82, 0xb1, 0x0a, 0xb7, 0xd5, 0x4b, 0xfe, 0xd3, 0xc9, 0x64, 0x07, 0x3a, 0x0e, 0xe1, 0x72, 0xf3, 0xda, 0xa6, 0x23, 0x25, 0xaf, 0x02, 0x1a, 0x68, 0xf7, 0x07, 0x51, 0x1a }, key10_d[] = { 0x9d, 0x61, 0xb1, 0x9d, 0xef, 0xfd, 0x5a, 0x60, 0xba, 0x84, 0x4a, 0xf4, 0x92, 0xec, 0x2c, 0xc4, 0x44, 0x49, 0xc5, 0x69, 0x7b, 0x32, 0x69, 0x19, 0x70, 0x3b, 0xac, 0x03, 0x1c, 0xae, 0x7f, 0x60 } #endif ; int test_cose_keys(struct lws_context *context) { struct lws_cose_key *ck; lws_dll2_owner_t set; lws_lec_pctx_t wc; uint8_t buf[4096]; int n; #if 0 { int fd = open("set1.cks", LWS_O_CREAT | LWS_O_TRUNC | LWS_O_WRONLY, 0600); if (fd >= 0) { write(fd, cose_key_set1, sizeof(cose_key_set1)); close(fd); } } #endif #if 0 lws_lec_pctx_t wx; uint8_t dump[8192]; lws_lec_init(&wx, buf, sizeof(buf)); if (lws_lec_printf(&wx, "{%d:%d, %d:%.*b, %d:%d, %d:%.*b, %d:%.*b}", LWSCOSE_WKK_KTY, LWSCOSE_WKKTV_OKP, LWSCOSE_WKK_KID, 2, "11", LWSCOSE_WKOKP_CRV, LWSCOSE_WKEC_ED25519, LWSCOSE_WKECKP_X, (int)sizeof(key10_x), key10_x, // LWSCOSE_WKECKP_Y, (int)sizeof(key6_y), key6_y, LWSCOSE_WKECKP_D, (int)sizeof(key10_d), key10_d) != LWS_LECPCTX_RET_FINISHED) return 1; lws_hex_from_byte_array(buf, wx.used, (char *)dump, sizeof(dump)); puts((const char *)dump); #endif #if 0 lws_lec_pctx_t wx; uint8_t dump[8192]; lws_lec_init(&wx, buf, sizeof(buf)); if (lws_lec_printf(&wx, "{%d:%d, %d:%.*b, %d:%.*b}", LWSCOSE_WKK_KTY, LWSCOSE_WKKTV_SYMMETRIC, LWSCOSE_WKK_KID, 6, "sec-64", -1, (int)sizeof(key9_k), key9_k) != LWS_LECPCTX_RET_FINISHED) return 1; lws_hex_from_byte_array(buf, wx.used, (char *)dump, sizeof(dump)); puts((const char *)dump); #endif /* key1 import */ lwsl_user("%s: key 1 import\n", __func__); ck = lws_cose_key_import(NULL, key_import_cb, NULL, cose_key1, sizeof(cose_key1)); if (!ck) return 1; if (ck->kty != LWSCOSE_WKKTV_EC2 || ck->gencrypto_kty != LWS_GENCRYPTO_KTY_EC || ck->e[LWS_GENCRYPTO_EC_KEYEL_X].len != sizeof(key1_x) || ck->e[LWS_GENCRYPTO_EC_KEYEL_Y].len != sizeof(key1_y) || ck->e[LWS_GENCRYPTO_EC_KEYEL_D].len != sizeof(key1_d) || memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_X].buf, key1_x, sizeof(key1_x)) || memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_Y].buf, key1_y, sizeof(key1_y)) || memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_D].buf, key1_d, sizeof(key1_d))) goto bail; // lws_cose_key_dump(ck); /* key 1 export */ lwsl_user("%s: key 1 export\n", __func__); lws_lec_init(&wc, buf, sizeof(buf)); n = (int)lws_cose_key_export(ck, &wc, LWSJWKF_EXPORT_PRIVATE); lws_cose_key_destroy(&ck); if (n != LWS_LECPCTX_RET_FINISHED) goto bail; // lwsl_hexdump_notice(buf, wc.used); /* key2 import */ lwsl_user("%s: key 2 import\n", __func__); ck = lws_cose_key_import(NULL, NULL, NULL, cose_key2, sizeof(cose_key2)); if (!ck) return 1; if (ck->kty != LWSCOSE_WKKTV_EC2 || ck->gencrypto_kty != LWS_GENCRYPTO_KTY_EC || ck->e[LWS_GENCRYPTO_EC_KEYEL_X].len != sizeof(key2_x) || ck->e[LWS_GENCRYPTO_EC_KEYEL_Y].len != sizeof(key2_y) || ck->e[LWS_GENCRYPTO_EC_KEYEL_D].len != sizeof(key2_d) || memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_X].buf, key2_x, sizeof(key2_x)) || memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_Y].buf, key2_y, sizeof(key2_y)) || memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_D].buf, key2_d, sizeof(key2_d))) goto bail; lws_cose_key_destroy(&ck); /* key3 import */ lwsl_user("%s: key 3 import\n", __func__); ck = lws_cose_key_import(NULL, NULL, NULL, cose_key3, sizeof(cose_key3)); if (!ck) { lwsl_err("%s: key 3 import failed\n", __func__); goto bail; } if (ck->kty != LWSCOSE_WKKTV_SYMMETRIC || ck->gencrypto_kty != LWS_GENCRYPTO_KTY_OCT || ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].len != sizeof(key3_k) || memcmp(ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].buf, key3_k, sizeof(key3_k))) { lwsl_err("%s: key 3 checks failed %d %d %d\n", __func__, (int)ck->kty, (int)ck->gencrypto_kty, (int)ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].len); goto bail; } lws_cose_key_destroy(&ck); /* key4 import */ lwsl_user("%s: key 4 import\n", __func__); ck = lws_cose_key_import(NULL, NULL, NULL, cose_key4, sizeof(cose_key4)); if (!ck) return 1; if (ck->kty != LWSCOSE_WKKTV_EC2 || ck->gencrypto_kty != LWS_GENCRYPTO_KTY_EC || ck->e[LWS_GENCRYPTO_EC_KEYEL_X].len != sizeof(key4_x) || ck->e[LWS_GENCRYPTO_EC_KEYEL_Y].len != sizeof(key4_y) || ck->e[LWS_GENCRYPTO_EC_KEYEL_D].len != sizeof(key4_d) || memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_X].buf, key4_x, sizeof(key4_x)) || memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_Y].buf, key4_y, sizeof(key4_y)) || memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_D].buf, key4_d, sizeof(key4_d))) goto bail; lws_cose_key_destroy(&ck); /* key5 import */ lwsl_user("%s: key 5 import\n", __func__); ck = lws_cose_key_import(NULL, NULL, NULL, cose_key5, sizeof(cose_key5)); if (!ck) return 1; if (ck->kty != LWSCOSE_WKKTV_SYMMETRIC || ck->gencrypto_kty != LWS_GENCRYPTO_KTY_OCT || ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].len != sizeof(key5_k) || memcmp(ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].buf, key5_k, sizeof(key5_k))) goto bail; lws_cose_key_destroy(&ck); /* key6 import */ lwsl_user("%s: key 6 import\n", __func__); ck = lws_cose_key_import(NULL, NULL, NULL, cose_key6, sizeof(cose_key6)); if (!ck) return 1; if (ck->kty != LWSCOSE_WKKTV_EC2 || ck->gencrypto_kty != LWS_GENCRYPTO_KTY_EC || ck->e[LWS_GENCRYPTO_EC_KEYEL_X].len != sizeof(key6_x) || ck->e[LWS_GENCRYPTO_EC_KEYEL_Y].len != sizeof(key6_y) || ck->e[LWS_GENCRYPTO_EC_KEYEL_D].len != sizeof(key6_d) || memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_X].buf, key6_x, sizeof(key6_x)) || memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_Y].buf, key6_y, sizeof(key6_y)) || memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_D].buf, key6_d, sizeof(key6_d))) goto bail; lws_cose_key_destroy(&ck); /* key7 import */ lwsl_user("%s: key 7 import\n", __func__); ck = lws_cose_key_import(NULL, NULL, NULL, cose_key7, sizeof(cose_key7)); if (!ck) return 1; if (ck->kty != LWSCOSE_WKKTV_SYMMETRIC || ck->gencrypto_kty != LWS_GENCRYPTO_KTY_OCT || ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].len != sizeof(key7_k) || memcmp(ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].buf, key7_k, sizeof(key7_k))) goto bail; lws_cose_key_destroy(&ck); /* key8 import */ lwsl_user("%s: key 8 import\n", __func__); ck = lws_cose_key_import(NULL, NULL, NULL, cose_key8, sizeof(cose_key8)); if (!ck) return 1; if (ck->kty != LWSCOSE_WKKTV_SYMMETRIC || ck->gencrypto_kty != LWS_GENCRYPTO_KTY_OCT || ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].len != sizeof(key8_k) || memcmp(ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].buf, key8_k, sizeof(key8_k))) goto bail; lws_cose_key_destroy(&ck); /* key9 import */ lwsl_user("%s: key 9 import\n", __func__); ck = lws_cose_key_import(NULL, NULL, NULL, cose_key9, sizeof(cose_key9)); if (!ck) { lwsl_err("%s: cose9 import fail\n", __func__); goto bail; } if (ck->kty != LWSCOSE_WKKTV_SYMMETRIC || ck->gencrypto_kty != LWS_GENCRYPTO_KTY_OCT || ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].len != sizeof(key9_k) || memcmp(ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].buf, key9_k, sizeof(key9_k))) { lwsl_notice("%s: key9 check fails\n", __func__); goto bail; } lws_cose_key_destroy(&ck); /* key set 1 */ lwsl_user("%s: key_set1\n", __func__); lws_dll2_owner_clear(&set); ck = lws_cose_key_import(&set, NULL, NULL, cose_key_set1, sizeof(cose_key_set1)); if (!ck) return 1; lws_cose_key_set_destroy(&set); /* generate */ ck = lws_cose_key_generate(context, LWSCOSE_WKKTV_EC2, (1 << LWSCOSE_WKKO_SIGN) | (1 << LWSCOSE_WKKO_VERIFY) | (1 << LWSCOSE_WKKO_ENCRYPT) | (1 << LWSCOSE_WKKO_DECRYPT), 0, "P-256", (const uint8_t *)"the-keyid", 9); if (!ck) return 1; // lws_cose_key_dump(ck); lws_cose_key_destroy(&ck); return 0; bail: lwsl_err("%s: selftest failed ++++++++++++++++++++\n", __func__); return 1; } libwebsockets-4.3.5/minimal-examples/api-tests/api-test-cose/main.c000066400000000000000000000021211476025525100253060ustar00rootroot00000000000000/* * lws-api-test-cose * * Written in 2010-2021 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include int test_cose_keys(struct lws_context *context); int test_cose_sign(struct lws_context *context); int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int result = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS COSE api tests\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ #if defined(LWS_WITH_NETWORK) info.port = CONTEXT_PORT_NO_LISTEN; #endif info.options = 0; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } result |= test_cose_keys(context); result |= test_cose_sign(context); lwsl_user("Completed: %s\n", result ? "FAIL" : "PASS"); lws_context_destroy(context); return result; } libwebsockets-4.3.5/minimal-examples/api-tests/api-test-cose/sign.c000066400000000000000000001324571476025525100253420ustar00rootroot00000000000000/* * lws-api-test-jose - RFC8152 cose_sign tests * * Written in 2010-2021 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * Raw key CBOR created from descriptions at * * https://github.com/cose-wg/Examples/blob/master/KeySet.txt */ #include #include #include static const uint8_t sign1_pass_01[] = { /* * https://github.com/cose-wg/Examples/blob/master/ * sign1-tests/sign-pass-01.json */ 0xd2, 0x84, 0x41, 0xa0, 0xa2, 0x01, 0x26, 0x04, 0x42, 0x31, 0x31, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x58, 0x40, 0x87, 0xdb, 0x0d, 0x2e, 0x55, 0x71, 0x84, 0x3b, 0x78, 0xac, 0x33, 0xec, 0xb2, 0x83, 0x0d, 0xf7, 0xb6, 0xe0, 0xa4, 0xd5, 0xb7, 0x37, 0x6d, 0xe3, 0x36, 0xb2, 0x3c, 0x59, 0x1c, 0x90, 0xc4, 0x25, 0x31, 0x7e, 0x56, 0x12, 0x7f, 0xbe, 0x04, 0x37, 0x00, 0x97, 0xce, 0x34, 0x70, 0x87, 0xb2, 0x33, 0xbf, 0x72, 0x2b, 0x64, 0x07, 0x2b, 0xeb, 0x44, 0x86, 0xbd, 0xa4, 0x03, 0x1d, 0x27, 0x24, 0x4f }, sign1_pass_02[] = { 0xd2, 0x84, 0x43, 0xa1, 0x01, 0x26, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x58, 0x40, 0x10, 0x72, 0x9c, 0xd7, 0x11, 0xcb, 0x38, 0x13, 0xd8, 0xd8, 0xe9, 0x44, 0xa8, 0xda, 0x71, 0x11, 0xe7, 0xb2, 0x58, 0xc9, 0xbd, 0xca, 0x61, 0x35, 0xf7, 0xae, 0x1a, 0xdb, 0xee, 0x95, 0x09, 0x89, 0x12, 0x67, 0x83, 0x7e, 0x1e, 0x33, 0xbd, 0x36, 0xc1, 0x50, 0x32, 0x6a, 0xe6, 0x27, 0x55, 0xc6, 0xbd, 0x8e, 0x54, 0x0c, 0x3e, 0x8f, 0x92, 0xd7, 0xd2, 0x25, 0xe8, 0xdb, 0x72, 0xb8, 0x82, 0x0b }, sign1_pass_02_ext[] = { 0x11, 0xaa, 0x22, 0xbb, 0x33, 0xcc, 0x44, 0xdd, 0x55, 0x00, 0x66, 0x99 }, sign1_pass_03[] = { 0x84, 0x43, 0xa1, 0x01, 0x26, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x58, 0x40, 0x8e, 0xb3, 0x3e, 0x4c, 0xa3, 0x1d, 0x1c, 0x46, 0x5a, 0xb0, 0x5a, 0xac, 0x34, 0xcc, 0x6b, 0x23, 0xd5, 0x8f, 0xef, 0x5c, 0x08, 0x31, 0x06, 0xc4, 0xd2, 0x5a, 0x91, 0xae, 0xf0, 0xb0, 0x11, 0x7e, 0x2a, 0xf9, 0xa2, 0x91, 0xaa, 0x32, 0xe1, 0x4a, 0xb8, 0x34, 0xdc, 0x56, 0xed, 0x2a, 0x22, 0x34, 0x44, 0x54, 0x7e, 0x01, 0xf1, 0x1d, 0x3b, 0x09, 0x16, 0xe5, 0xa4, 0xc3, 0x45, 0xca, 0xcb, 0x36 }, sign1_fail_01[] = { 0xd9, 0x03, 0xe6, 0x84, 0x43, 0xa1, 0x01, 0x26, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x58, 0x40, 0x8e, 0xb3, 0x3e, 0x4c, 0xa3, 0x1d, 0x1c, 0x46, 0x5a, 0xb0, 0x5a, 0xac, 0x34, 0xcc, 0x6b, 0x23, 0xd5, 0x8f, 0xef, 0x5c, 0x08, 0x31, 0x06, 0xc4, 0xd2, 0x5a, 0x91, 0xae, 0xf0, 0xb0, 0x11, 0x7e, 0x2a, 0xf9, 0xa2, 0x91, 0xaa, 0x32, 0xe1, 0x4a, 0xb8, 0x34, 0xdc, 0x56, 0xed, 0x2a, 0x22, 0x34, 0x44, 0x54, 0x7e, 0x01, 0xf1, 0x1d, 0x3b, 0x09, 0x16, 0xe5, 0xa4, 0xc3, 0x45, 0xca, 0xcb, 0x36 }, sign1_fail_02[] = { 0xd2, 0x84, 0x43, 0xa1, 0x01, 0x26, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2f, 0x58, 0x40, 0x8e, 0xb3, 0x3e, 0x4c, 0xa3, 0x1d, 0x1c, 0x46, 0x5a, 0xb0, 0x5a, 0xac, 0x34, 0xcc, 0x6b, 0x23, 0xd5, 0x8f, 0xef, 0x5c, 0x08, 0x31, 0x06, 0xc4, 0xd2, 0x5a, 0x91, 0xae, 0xf0, 0xb0, 0x11, 0x7e, 0x2a, 0xf9, 0xa2, 0x91, 0xaa, 0x32, 0xe1, 0x4a, 0xb8, 0x34, 0xdc, 0x56, 0xed, 0x2a, 0x22, 0x34, 0x44, 0x54, 0x7e, 0x01, 0xf1, 0x1d, 0x3b, 0x09, 0x16, 0xe5, 0xa4, 0xc3, 0x45, 0xca, 0xcb, 0x36 }, sign1_fail_03[] = { 0xd2, 0x84, 0x45, 0xa1, 0x01, 0x39, 0x03, 0xe6, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x58, 0x40, 0x8e, 0xb3, 0x3e, 0x4c, 0xa3, 0x1d, 0x1c, 0x46, 0x5a, 0xb0, 0x5a, 0xac, 0x34, 0xcc, 0x6b, 0x23, 0xd5, 0x8f, 0xef, 0x5c, 0x08, 0x31, 0x06, 0xc4, 0xd2, 0x5a, 0x91, 0xae, 0xf0, 0xb0, 0x11, 0x7e, 0x2a, 0xf9, 0xa2, 0x91, 0xaa, 0x32, 0xe1, 0x4a, 0xb8, 0x34, 0xdc, 0x56, 0xed, 0x2a, 0x22, 0x34, 0x44, 0x54, 0x7e, 0x01, 0xf1, 0x1d, 0x3b, 0x09, 0x16, 0xe5, 0xa4, 0xc3, 0x45, 0xca, 0xcb, 0x36 }, sign1_fail_04[] = { 0xd2, 0x84, 0x4a, 0xa1, 0x01, 0x67, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x58, 0x40, 0x8e, 0xb3, 0x3e, 0x4c, 0xa3, 0x1d, 0x1c, 0x46, 0x5a, 0xb0, 0x5a, 0xac, 0x34, 0xcc, 0x6b, 0x23, 0xd5, 0x8f, 0xef, 0x5c, 0x08, 0x31, 0x06, 0xc4, 0xd2, 0x5a, 0x91, 0xae, 0xf0, 0xb0, 0x11, 0x7e, 0x2a, 0xf9, 0xa2, 0x91, 0xaa, 0x32, 0xe1, 0x4a, 0xb8, 0x34, 0xdc, 0x56, 0xed, 0x2a, 0x22, 0x34, 0x44, 0x54, 0x7e, 0x01, 0xf1, 0x1d, 0x3b, 0x09, 0x16, 0xe5, 0xa4, 0xc3, 0x45, 0xca, 0xcb, 0x36 }, /* sign1/fail05 is missing upstream */ sign1_fail_06[] = { 0xd2, 0x84, 0x45, 0xa2, 0x01, 0x26, 0x03, 0x00, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x58, 0x40, 0x8e, 0xb3, 0x3e, 0x4c, 0xa3, 0x1d, 0x1c, 0x46, 0x5a, 0xb0, 0x5a, 0xac, 0x34, 0xcc, 0x6b, 0x23, 0xd5, 0x8f, 0xef, 0x5c, 0x08, 0x31, 0x06, 0xc4, 0xd2, 0x5a, 0x91, 0xae, 0xf0, 0xb0, 0x11, 0x7e, 0x2a, 0xf9, 0xa2, 0x91, 0xaa, 0x32, 0xe1, 0x4a, 0xb8, 0x34, 0xdc, 0x56, 0xed, 0x2a, 0x22, 0x34, 0x44, 0x54, 0x7e, 0x01, 0xf1, 0x1d, 0x3b, 0x09, 0x16, 0xe5, 0xa4, 0xc3, 0x45, 0xca, 0xcb, 0x36 }, sign1_fail_07[] = { 0xd2, 0x84, 0x43, 0xa1, 0x01, 0x26, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x58, 0x40, 0x65, 0x20, 0xbb, 0xaf, 0x20, 0x81, 0xd7, 0xe0, 0xed, 0x0f, 0x95, 0xf7, 0x6e, 0xb0, 0x73, 0x3d, 0x66, 0x70, 0x05, 0xf7, 0x46, 0x7c, 0xec, 0x4b, 0x87, 0xb9, 0x38, 0x1a, 0x6b, 0xa1, 0xed, 0xe8, 0xe0, 0x0d, 0xf2, 0x9f, 0x32, 0xa3, 0x72, 0x30, 0xf3, 0x9a, 0x84, 0x2a, 0x54, 0x82, 0x1f, 0xdd, 0x22, 0x30, 0x92, 0x81, 0x9d, 0x77, 0x28, 0xef, 0xb9, 0xd3, 0xa0, 0x08, 0x0b, 0x75, 0x38, 0x0b }, sign_pass_01[] = { 0xd8, 0x62, 0x84, 0x41, 0xa0, 0xa0, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x81, 0x83, 0x43, 0xa1, 0x01, 0x26, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0xe2, 0xae, 0xaf, 0xd4, 0x0d, 0x69, 0xd1, 0x9d, 0xfe, 0x6e, 0x52, 0x07, 0x7c, 0x5d, 0x7f, 0xf4, 0xe4, 0x08, 0x28, 0x2c, 0xbe, 0xfb, 0x5d, 0x06, 0xcb, 0xf4, 0x14, 0xaf, 0x2e, 0x19, 0xd9, 0x82, 0xac, 0x45, 0xac, 0x98, 0xb8, 0x54, 0x4c, 0x90, 0x8b, 0x45, 0x07, 0xde, 0x1e, 0x90, 0xb7, 0x17, 0xc3, 0xd3, 0x48, 0x16, 0xfe, 0x92, 0x6a, 0x2b, 0x98, 0xf5, 0x3a, 0xfd, 0x2f, 0xa0, 0xf3, 0x0a }, sign_pass_02[] = { 0xd8, 0x62, 0x84, 0x40, 0xa0, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x81, 0x83, 0x43, 0xa1, 0x01, 0x26, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0xcb, 0xb8, 0xda, 0xd9, 0xbe, 0xaf, 0xb8, 0x90, 0xe1, 0xa4, 0x14, 0x12, 0x4d, 0x8b, 0xfb, 0xc2, 0x6b, 0xed, 0xf2, 0xa9, 0x4f, 0xcb, 0x5a, 0x88, 0x24, 0x32, 0xbf, 0xf6, 0xd6, 0x3e, 0x15, 0xf5, 0x74, 0xee, 0xb2, 0xab, 0x51, 0xd8, 0x3f, 0xa2, 0xcb, 0xf6, 0x26, 0x72, 0xeb, 0xf4, 0xc7, 0xd9, 0x93, 0xb0, 0xf4, 0xc2, 0x44, 0x76, 0x47, 0xd8, 0x31, 0xba, 0x57, 0xcc, 0xa8, 0x6b, 0x93, 0x0a }, sign_pass_03[] = { 0x84, 0x40, 0xa0, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x81, 0x83, 0x43, 0xa1, 0x01, 0x26, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0xe2, 0xae, 0xaf, 0xd4, 0x0d, 0x69, 0xd1, 0x9d, 0xfe, 0x6e, 0x52, 0x07, 0x7c, 0x5d, 0x7f, 0xf4, 0xe4, 0x08, 0x28, 0x2c, 0xbe, 0xfb, 0x5d, 0x06, 0xcb, 0xf4, 0x14, 0xaf, 0x2e, 0x19, 0xd9, 0x82, 0xac, 0x45, 0xac, 0x98, 0xb8, 0x54, 0x4c, 0x90, 0x8b, 0x45, 0x07, 0xde, 0x1e, 0x90, 0xb7, 0x17, 0xc3, 0xd3, 0x48, 0x16, 0xfe, 0x92, 0x6a, 0x2b, 0x98, 0xf5, 0x3a, 0xfd, 0x2f, 0xa0, 0xf3, 0x0a }, sign_fail_01[] = { 0xd9, 0x03, 0xe6, 0x84, 0x40, 0xa0, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x81, 0x83, 0x43, 0xa1, 0x01, 0x26, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0xe2, 0xae, 0xaf, 0xd4, 0x0d, 0x69, 0xd1, 0x9d, 0xfe, 0x6e, 0x52, 0x07, 0x7c, 0x5d, 0x7f, 0xf4, 0xe4, 0x08, 0x28, 0x2c, 0xbe, 0xfb, 0x5d, 0x06, 0xcb, 0xf4, 0x14, 0xaf, 0x2e, 0x19, 0xd9, 0x82, 0xac, 0x45, 0xac, 0x98, 0xb8, 0x54, 0x4c, 0x90, 0x8b, 0x45, 0x07, 0xde, 0x1e, 0x90, 0xb7, 0x17, 0xc3, 0xd3, 0x48, 0x16, 0xfe, 0x92, 0x6a, 0x2b, 0x98, 0xf5, 0x3a, 0xfd, 0x2f, 0xa0, 0xf3, 0x0a }, sign_fail_02[] = { 0xd8, 0x62, 0x84, 0x40, 0xa0, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x81, 0x83, 0x43, 0xa1, 0x01, 0x26, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0xe2, 0xae, 0xaf, 0xd4, 0x0d, 0x69, 0xd1, 0x9d, 0xfe, 0x6e, 0x52, 0x07, 0x7c, 0x5d, 0x7f, 0xf4, 0xe4, 0x08, 0x28, 0x2c, 0xbe, 0xfb, 0x5d, 0x06, 0xcb, 0xf4, 0x14, 0xaf, 0x2e, 0x19, 0xd9, 0x82, 0xac, 0x45, 0xac, 0x98, 0xb8, 0x54, 0x4c, 0x90, 0x8b, 0x45, 0x07, 0xde, 0x1e, 0x90, 0xb7, 0x17, 0xc3, 0xd3, 0x48, 0x16, 0xfe, 0x92, 0x6a, 0x2b, 0x98, 0xf5, 0x3a, 0xfd, 0x2f, 0xa0, 0xf3, 0x0b }, sign_fail_03[] = { 0xd8, 0x62, 0x84, 0x40, 0xa0, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x81, 0x83, 0x45, 0xa1, 0x01, 0x39, 0x03, 0xe6, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0xe2, 0xae, 0xaf, 0xd4, 0x0d, 0x69, 0xd1, 0x9d, 0xfe, 0x6e, 0x52, 0x07, 0x7c, 0x5d, 0x7f, 0xf4, 0xe4, 0x08, 0x28, 0x2c, 0xbe, 0xfb, 0x5d, 0x06, 0xcb, 0xf4, 0x14, 0xaf, 0x2e, 0x19, 0xd9, 0x82, 0xac, 0x45, 0xac, 0x98, 0xb8, 0x54, 0x4c, 0x90, 0x8b, 0x45, 0x07, 0xde, 0x1e, 0x90, 0xb7, 0x17, 0xc3, 0xd3, 0x48, 0x16, 0xfe, 0x92, 0x6a, 0x2b, 0x98, 0xf5, 0x3a, 0xfd, 0x2f, 0xa0, 0xf3, 0x0a }, sign_fail_04[] = { 0xd8, 0x62, 0x84, 0x40, 0xa0, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x81, 0x83, 0x4a, 0xa1, 0x01, 0x67, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0xe2, 0xae, 0xaf, 0xd4, 0x0d, 0x69, 0xd1, 0x9d, 0xfe, 0x6e, 0x52, 0x07, 0x7c, 0x5d, 0x7f, 0xf4, 0xe4, 0x08, 0x28, 0x2c, 0xbe, 0xfb, 0x5d, 0x06, 0xcb, 0xf4, 0x14, 0xaf, 0x2e, 0x19, 0xd9, 0x82, 0xac, 0x45, 0xac, 0x98, 0xb8, 0x54, 0x4c, 0x90, 0x8b, 0x45, 0x07, 0xde, 0x1e, 0x90, 0xb7, 0x17, 0xc3, 0xd3, 0x48, 0x16, 0xfe, 0x92, 0x6a, 0x2b, 0x98, 0xf5, 0x3a, 0xfd, 0x2f, 0xa0, 0xf3, 0x0a }, /* fail 5 missing upstream */ sign_fail_06[] = { 0xd8, 0x62, 0x84, 0x43, 0xa1, 0x03, 0x00, 0xa0, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x81, 0x83, 0x43, 0xa1, 0x01, 0x26, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0xe2, 0xae, 0xaf, 0xd4, 0x0d, 0x69, 0xd1, 0x9d, 0xfe, 0x6e, 0x52, 0x07, 0x7c, 0x5d, 0x7f, 0xf4, 0xe4, 0x08, 0x28, 0x2c, 0xbe, 0xfb, 0x5d, 0x06, 0xcb, 0xf4, 0x14, 0xaf, 0x2e, 0x19, 0xd9, 0x82, 0xac, 0x45, 0xac, 0x98, 0xb8, 0x54, 0x4c, 0x90, 0x8b, 0x45, 0x07, 0xde, 0x1e, 0x90, 0xb7, 0x17, 0xc3, 0xd3, 0x48, 0x16, 0xfe, 0x92, 0x6a, 0x2b, 0x98, 0xf5, 0x3a, 0xfd, 0x2f, 0xa0, 0xf3, 0x0a }, sign_fail_07[] = { 0xd8, 0x62, 0x84, 0x41, 0xa0, 0xa0, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x81, 0x83, 0x43, 0xa1, 0x01, 0x26, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0xd7, 0x1c, 0x05, 0xdb, 0x52, 0xc9, 0xce, 0x7f, 0x1b, 0xf5, 0xaa, 0xc0, 0x13, 0x34, 0xbb, 0xea, 0xca, 0xc1, 0xd8, 0x6a, 0x23, 0x03, 0xe6, 0xee, 0xaa, 0x89, 0x26, 0x6f, 0x45, 0xc0, 0x1e, 0xd6, 0x02, 0xca, 0x64, 0x9e, 0xaf, 0x79, 0x0d, 0x8b, 0xc9, 0x9d, 0x24, 0x58, 0x45, 0x7c, 0xa6, 0xa8, 0x72, 0x06, 0x19, 0x40, 0xe7, 0xaf, 0xbe, 0x48, 0xe2, 0x89, 0xdf, 0xac, 0x14, 0x6a, 0xe2, 0x58 }, sign_hmac_01[] = { 0xd8, 0x61, 0x85, 0x43, 0xa1, 0x01, 0x05, 0xa0, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x58, 0x20, 0x2b, 0xdc, 0xc8, 0x9f, 0x05, 0x82, 0x16, 0xb8, 0xa2, 0x08, 0xdd, 0xc6, 0xd8, 0xb5, 0x4a, 0xa9, 0x1f, 0x48, 0xbd, 0x63, 0x48, 0x49, 0x86, 0x56, 0x51, 0x05, 0xc9, 0xad, 0x5a, 0x66, 0x82, 0xf6, 0x81, 0x83, 0x40, 0xa2, 0x01, 0x25, 0x04, 0x4a, 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x40 }, sign_hmac_02[] = { 0xd8, 0x61, 0x85, 0x43, 0xa1, 0x01, 0x06, 0xa0, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x58, 0x30, 0xb3, 0x09, 0x7f, 0x70, 0x00, 0x9a, 0x11, 0x50, 0x74, 0x09, 0x59, 0x8a, 0x83, 0xe1, 0x5b, 0xbb, 0xbf, 0x19, 0x82, 0xdc, 0xe2, 0x8e, 0x5a, 0xb6, 0xd5, 0xa6, 0xaf, 0xf6, 0x89, 0x7b, 0xd2, 0x4b, 0xb8, 0xb7, 0x47, 0x96, 0x22, 0xc9, 0x40, 0x1b, 0x24, 0x09, 0x0d, 0x45, 0x82, 0x06, 0xd5, 0x87, 0x81, 0x83, 0x40, 0xa2, 0x01, 0x25, 0x04, 0x46, 0x73, 0x65, 0x63, 0x2d, 0x34, 0x38, 0x40 }, sign_hmac_03[] = { 0xd8, 0x61, 0x85, 0x43, 0xa1, 0x01, 0x07, 0xa0, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x58, 0x40, 0xcd, 0x28, 0xa6, 0xb3, 0xcf, 0xbb, 0xbf, 0x21, 0x48, 0x51, 0xb9, 0x06, 0xe0, 0x50, 0x05, 0x6c, 0xb4, 0x38, 0xa8, 0xb8, 0x89, 0x05, 0xb8, 0xb7, 0x46, 0x19, 0x77, 0x02, 0x27, 0x11, 0xa9, 0xd8, 0xac, 0x5d, 0xbc, 0x54, 0xe2, 0x9a, 0x56, 0xd9, 0x26, 0x04, 0x6b, 0x40, 0xfc, 0x26, 0x07, 0xc2, 0x5b, 0x34, 0x44, 0x54, 0xaa, 0x5f, 0x68, 0xde, 0x09, 0xa3, 0xe5, 0x25, 0xd3, 0x86, 0x5a, 0x05, 0x81, 0x83, 0x40, 0xa2, 0x01, 0x25, 0x04, 0x46, 0x73, 0x65, 0x63, 0x2d, 0x36, 0x34, 0x40 }, sign_hmac_04[] = { 0xd8, 0x61, 0x85, 0x43, 0xa1, 0x01, 0x05, 0xa0, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x58, 0x20, 0x2b, 0xdc, 0xc8, 0x9f, 0x05, 0x82, 0x16, 0xb8, 0xa2, 0x08, 0xdd, 0xc6, 0xd8, 0xb5, 0x4a, 0xa9, 0x1f, 0x48, 0xbd, 0x63, 0x48, 0x49, 0x86, 0x56, 0x51, 0x05, 0xc9, 0xad, 0x5a, 0x66, 0x82, 0xf7, 0x81, 0x83, 0x40, 0xa2, 0x01, 0x25, 0x04, 0x4a, 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x40 }, sign_hmac_05[] = { 0xd8, 0x61, 0x85, 0x43, 0xa1, 0x01, 0x04, 0xa0, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x48, 0x6f, 0x35, 0xca, 0xb7, 0x79, 0xf7, 0x78, 0x33, 0x81, 0x83, 0x40, 0xa2, 0x01, 0x25, 0x04, 0x4a, 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x40 }, enc_hmac_01[] = { 0xd1, 0x84, 0x43, 0xa1, 0x01, 0x05, 0xa0, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x58, 0x20, 0xa1, 0xa8, 0x48, 0xd3, 0x47, 0x1f, 0x9d, 0x61, 0xee, 0x49, 0x01, 0x8d, 0x24, 0x4c, 0x82, 0x47, 0x72, 0xf2, 0x23, 0xad, 0x4f, 0x93, 0x52, 0x93, 0xf1, 0x78, 0x9f, 0xc3, 0xa0, 0x8d, 0x8c, 0x58 }, enc_hmac_02[] = { 0xd1, 0x84, 0x43, 0xa1, 0x01, 0x06, 0xa0, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x58, 0x30, 0x99, 0x8d, 0x26, 0xc6, 0x45, 0x9a, 0xae, 0xec, 0xf4, 0x4e, 0xd2, 0x0c, 0xe0, 0x0c, 0x8c, 0xce, 0xdf, 0x0a, 0x1f, 0x3d, 0x22, 0xa9, 0x2f, 0xc0, 0x5d, 0xb0, 0x8c, 0x5a, 0xeb, 0x1c, 0xb5, 0x94, 0xca, 0xaf, 0x5a, 0x5c, 0x5e, 0x2e, 0x9d, 0x01, 0xcc, 0xe7, 0xe7, 0x7a, 0x93, 0xaa, 0x8c, 0x62 }, enc_hmac_03[] = { 0xd1, 0x84, 0x43, 0xa1, 0x01, 0x07, 0xa0, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x58, 0x40, 0x4a, 0x55, 0x5b, 0xf9, 0x71, 0xf7, 0xc1, 0x89, 0x1d, 0x9d, 0xdf, 0x30, 0x4a, 0x1a, 0x13, 0x2e, 0x2d, 0x6f, 0x81, 0x74, 0x49, 0x47, 0x4d, 0x81, 0x3e, 0x6d, 0x04, 0xd6, 0x59, 0x62, 0xbe, 0xd8, 0xbb, 0xa7, 0x0c, 0x17, 0xe1, 0xf5, 0x30, 0x8f, 0xa3, 0x99, 0x62, 0x95, 0x9a, 0x4b, 0x9b, 0x8d, 0x7d, 0xa8, 0xe6, 0xd8, 0x49, 0xb2, 0x09, 0xdc, 0xd3, 0xe9, 0x8c, 0xc0, 0xf1, 0x1e, 0xdd, 0xf2 }, enc_hmac_04[] = { 0xd1, 0x84, 0x43, 0xa1, 0x01, 0x05, 0xa0, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x58, 0x20, 0xa1, 0xa8, 0x48, 0xd3, 0x47, 0x1f, 0x9d, 0x61, 0xee, 0x49, 0x01, 0x8d, 0x24, 0x4c, 0x82, 0x47, 0x72, 0xf2, 0x23, 0xad, 0x4f, 0x93, 0x52, 0x93, 0xf1, 0x78, 0x9f, 0xc3, 0xa0, 0x8d, 0x8c, 0x59 }, enc_hmac_05[] = { 0xd1, 0x84, 0x43, 0xa1, 0x01, 0x04, 0xa0, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x48, 0x11, 0xf9, 0xe3, 0x57, 0x97, 0x5f, 0xb8, 0x49 } #if 0 , countersign_sign_01[] = { 0xd8, 0x62, 0x84, 0x43, 0xa1, 0x03, 0x00, 0xa0, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x81, 0x83, 0x43, 0xa1, 0x01, 0x27, 0xa2, 0x07, 0x83, 0x43, 0xa1, 0x01, 0x27, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0x8e, 0x1b, 0xe2, 0xf9, 0x45, 0x3d, 0x26, 0x48, 0x12, 0xe5, 0x90, 0x49, 0x91, 0x32, 0xbe, 0xf3, 0xfb, 0xf9, 0xee, 0x9d, 0xb2, 0x7c, 0x2c, 0x16, 0x87, 0x88, 0xe3, 0xb7, 0xeb, 0xe5, 0x06, 0xc0, 0x4f, 0xd3, 0xd1, 0x9f, 0xaa, 0x9f, 0x51, 0x23, 0x2a, 0xf5, 0xc9, 0x59, 0xe4, 0xef, 0x47, 0x92, 0x88, 0x34, 0x64, 0x7f, 0x56, 0xdf, 0xbe, 0x93, 0x91, 0x12, 0x88, 0x4d, 0x08, 0xef, 0x25, 0x05, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0x77, 0xf3, 0xea, 0xcd, 0x11, 0x85, 0x2c, 0x4b, 0xf9, 0xcb, 0x1d, 0x72, 0xfa, 0xbe, 0x6b, 0x26, 0xfb, 0xa1, 0xd7, 0x60, 0x92, 0xb2, 0xb5, 0xb7, 0xec, 0x83, 0xb8, 0x35, 0x57, 0x65, 0x22, 0x64, 0xe6, 0x96, 0x90, 0xdb, 0xc1, 0x17, 0x2d, 0xdc, 0x0b, 0xf8, 0x84, 0x11, 0xc0, 0xd2, 0x5a, 0x50, 0x7f, 0xdb, 0x24, 0x7a, 0x20, 0xc4, 0x0d, 0x5e, 0x24, 0x5f, 0xab, 0xd3, 0xfc, 0x9e, 0xc1, 0x06 } #endif ; extern const struct { const uint8_t *set; size_t len; } keyset1, key3, key8, key9, key10; static int xcb(lws_cose_sig_ext_pay_t *x) { x->ext = sign1_pass_02_ext; x->xl = sizeof(sign1_pass_02_ext); return LCOSESIGEXTCB_RET_FINISHED; } int test_cose_sign(struct lws_context *context) { struct lws_cose_validate_context *cps; lws_cose_validate_create_info_t info; lws_cose_validate_res_t *res; lws_dll2_owner_t set; lws_dll2_owner_t *o; int n; memset(&info, 0, sizeof(info)); info.cx = context; info.keyset = &set; #if 1 { int fd = open("sign_hmac01.sig", LWS_O_CREAT | LWS_O_TRUNC | LWS_O_WRONLY, 0600); if (fd >= 0) { write(fd, sign_hmac_01, sizeof(sign_hmac_01)); close(fd); } } #endif /* * valid sign1 we have key for */ lwsl_user("%s: sign1/sign-pass-01\n", __func__); lws_dll2_owner_clear(&set); if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { lwsl_notice("%s: key import fail\n", __func__); return 1; } info.sigtype = SIGTYPE_SINGLE; cps = lws_cose_validate_create(&info); if (!cps) { lwsl_notice("%s: sign_val_create fail\n", __func__); goto bail; } n = lws_cose_validate_chunk(cps, sign1_pass_01, sizeof(sign1_pass_01), NULL); if (n) { lwsl_notice("%s: sign_val_chunk failed\n", __func__); goto bail1; } o = lws_cose_validate_results(cps); if (o->count != 1) goto bail1; res = lws_container_of(o->head, lws_cose_validate_res_t, list); if (res->result) goto bail1; lws_cose_validate_destroy(&cps); lws_cose_key_set_destroy(&set); /* * valid sign1 but empty key set, so can't judge it */ lwsl_user("%s: sign1/sign-pass-01 - no key\n", __func__); lws_dll2_owner_clear(&set); info.sigtype = SIGTYPE_SINGLE; cps = lws_cose_validate_create(&info); if (!cps) { lwsl_notice("%s: sign_val_create fail\n", __func__); goto bail; } n = lws_cose_validate_chunk(cps, sign1_pass_01, sizeof(sign1_pass_01), NULL); if (n) { lwsl_notice("%s: sign_val_chunk failed\n", __func__); goto bail1; } o = lws_cose_validate_results(cps); if (o->count != 1) goto bail1; res = lws_container_of(o->head, lws_cose_validate_res_t, list); if (!res->result) goto bail1; lws_cose_validate_destroy(&cps); lws_cose_key_set_destroy(&set); /* * valid sign1 */ lwsl_user("%s: sign1/sign-pass-02\n", __func__); lws_dll2_owner_clear(&set); if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { lwsl_notice("%s: key import fail\n", __func__); return 1; } info.sigtype = SIGTYPE_SINGLE; info.ext_cb = xcb; info.ext_len = sizeof(sign1_pass_02_ext); cps = lws_cose_validate_create(&info); if (!cps) { lwsl_notice("%s: sign_val_create fail\n", __func__); goto bail; } n = lws_cose_validate_chunk(cps, sign1_pass_02, sizeof(sign1_pass_02), NULL); if (n) { lwsl_notice("%s: sign_val_chunk failed\n", __func__); goto bail1; } o = lws_cose_validate_results(cps); if (o->count != 1) goto bail1; res = lws_container_of(o->head, lws_cose_validate_res_t, list); if (res->result) goto bail1; lws_cose_validate_destroy(&cps); lws_cose_key_set_destroy(&set); /* * valid sign1 without enclosing tag */ lwsl_user("%s: sign1/sign-pass-03\n", __func__); lws_dll2_owner_clear(&set); if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { lwsl_notice("%s: key import fail\n", __func__); return 1; } info.sigtype = SIGTYPE_SINGLE; info.ext_cb = NULL; info.ext_len = 0; cps = lws_cose_validate_create(&info); if (!cps) { lwsl_notice("%s: sign_val_create fail\n", __func__); goto bail; } n = lws_cose_validate_chunk(cps, sign1_pass_03, sizeof(sign1_pass_03), NULL); if (n) { lwsl_notice("%s: sign_val_chunk failed\n", __func__); goto bail1; } o = lws_cose_validate_results(cps); if (o->count != 1) goto bail1; res = lws_container_of(o->head, lws_cose_validate_res_t, list); if (res->result) goto bail1; lws_cose_validate_destroy(&cps); lws_cose_key_set_destroy(&set); /* * sign1 with wrong tag */ lwsl_user("%s: sign1/sign-fail-01\n", __func__); lws_dll2_owner_clear(&set); if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { lwsl_notice("%s: key import fail\n", __func__); return 1; } info.sigtype = SIGTYPE_SINGLE; cps = lws_cose_validate_create(&info); if (!cps) { lwsl_notice("%s: sign_val_create fail\n", __func__); goto bail; } n = lws_cose_validate_chunk(cps, sign1_fail_01, sizeof(sign1_fail_01), NULL); if (!n) { lwsl_notice("%s: sign_val_chunk should have failed\n", __func__); goto bail1; } lws_cose_validate_destroy(&cps); lws_cose_key_set_destroy(&set); /* * invalid sign1, signature tampered */ lwsl_user("%s: sign1/sign-fail-02\n", __func__); lws_dll2_owner_clear(&set); if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { lwsl_notice("%s: key import fail\n", __func__); return 1; } info.sigtype = SIGTYPE_SINGLE; cps = lws_cose_validate_create(&info); if (!cps) { lwsl_notice("%s: sign_val_create fail\n", __func__); goto bail; } n = lws_cose_validate_chunk(cps, sign1_fail_02, sizeof(sign1_fail_02), NULL); if (n) { lwsl_notice("%s: sign_val_chunk failed\n", __func__); goto bail1; } o = lws_cose_validate_results(cps); if (o->count != 1) goto bail1; res = lws_container_of(o->head, lws_cose_validate_res_t, list); if (!res->result) /* validation result must be fail */ goto bail1; lws_cose_validate_destroy(&cps); lws_cose_key_set_destroy(&set); /* * invalid sign1, alg tampered */ lwsl_user("%s: sign1/sign-fail-03\n", __func__); lws_dll2_owner_clear(&set); if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { lwsl_notice("%s: key import fail\n", __func__); return 1; } info.sigtype = SIGTYPE_SINGLE; cps = lws_cose_validate_create(&info); if (!cps) { lwsl_notice("%s: sign_val_create fail\n", __func__); goto bail; } n = lws_cose_validate_chunk(cps, sign1_fail_03, sizeof(sign1_fail_03), NULL); if (n) { lwsl_notice("%s: sign_val_chunk failed\n", __func__); goto bail1; } o = lws_cose_validate_results(cps); if (o->count != 1) goto bail1; res = lws_container_of(o->head, lws_cose_validate_res_t, list); if (!res->result) /* validation result must be fail */ goto bail1; lws_cose_validate_destroy(&cps); lws_cose_key_set_destroy(&set); /* * invalid sign1, alg sign tampered */ lwsl_user("%s: sign1/sign-fail-04\n", __func__); lws_dll2_owner_clear(&set); if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { lwsl_notice("%s: key import fail\n", __func__); return 1; } info.sigtype = SIGTYPE_SINGLE; cps = lws_cose_validate_create(&info); if (!cps) { lwsl_notice("%s: sign_val_create fail\n", __func__); goto bail; } n = lws_cose_validate_chunk(cps, sign1_fail_04, sizeof(sign1_fail_04), NULL); if (n) { lwsl_notice("%s: sign_val_chunk failed\n", __func__); goto bail1; } o = lws_cose_validate_results(cps); if (o->count != 1) goto bail1; res = lws_container_of(o->head, lws_cose_validate_res_t, list); if (!res->result) /* validation result must be fail */ goto bail1; lws_cose_validate_destroy(&cps); lws_cose_key_set_destroy(&set); /* * invalid sign1, protected attributes tampered */ lwsl_user("%s: sign1/sign-fail-06\n", __func__); lws_dll2_owner_clear(&set); if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { lwsl_notice("%s: key import fail\n", __func__); return 1; } info.sigtype = SIGTYPE_SINGLE; cps = lws_cose_validate_create(&info); if (!cps) { lwsl_notice("%s: sign_val_create fail\n", __func__); goto bail; } n = lws_cose_validate_chunk(cps, sign1_fail_06, sizeof(sign1_fail_06), NULL); if (n) { lwsl_notice("%s: sign_val_chunk failed\n", __func__); goto bail1; } o = lws_cose_validate_results(cps); if (o->count != 1) goto bail1; res = lws_container_of(o->head, lws_cose_validate_res_t, list); if (!res->result) /* validation result must be fail */ goto bail1; lws_cose_validate_destroy(&cps); lws_cose_key_set_destroy(&set); /* * invalid sign1, protected attribute removed */ lwsl_user("%s: sign1/sign-fail-07\n", __func__); lws_dll2_owner_clear(&set); if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { lwsl_notice("%s: key import fail\n", __func__); return 1; } info.sigtype = SIGTYPE_SINGLE; cps = lws_cose_validate_create(&info); if (!cps) { lwsl_notice("%s: sign_val_create fail\n", __func__); goto bail; } n = lws_cose_validate_chunk(cps, sign1_fail_07, sizeof(sign1_fail_07), NULL); if (n) { lwsl_notice("%s: sign_val_chunk failed\n", __func__); goto bail1; } o = lws_cose_validate_results(cps); if (o->count != 1) goto bail1; res = lws_container_of(o->head, lws_cose_validate_res_t, list); if (!res->result) /* validation result must be fail */ goto bail1; lws_cose_validate_destroy(&cps); lws_cose_key_set_destroy(&set); /* * valid sign we have key for */ lwsl_user("%s: sign/sign-pass-01\n", __func__); lws_dll2_owner_clear(&set); if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { lwsl_notice("%s: key import fail\n", __func__); return 1; } info.sigtype = SIGTYPE_MULTI; cps = lws_cose_validate_create(&info); if (!cps) { lwsl_notice("%s: sign_val_create fail\n", __func__); goto bail; } n = lws_cose_validate_chunk(cps, sign_pass_01, sizeof(sign_pass_01), NULL); if (n) { lwsl_notice("%s: sign_val_chunk failed\n", __func__); goto bail1; } o = lws_cose_validate_results(cps); if (o->count != 1) { lwsl_notice("%s: results: %d\n", __func__, o->count); goto bail1; } res = lws_container_of(o->head, lws_cose_validate_res_t, list); if (res->result) goto bail1; lws_cose_validate_destroy(&cps); lws_cose_key_set_destroy(&set); /* * valid sign we have key for */ lwsl_user("%s: sign/sign-pass-02\n", __func__); lws_dll2_owner_clear(&set); if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { lwsl_notice("%s: key import fail\n", __func__); return 1; } info.sigtype = SIGTYPE_MULTI; info.ext_cb = xcb; info.ext_len = sizeof(sign1_pass_02_ext); cps = lws_cose_validate_create(&info); if (!cps) { lwsl_notice("%s: sign_val_create fail\n", __func__); goto bail; } n = lws_cose_validate_chunk(cps, sign_pass_02, sizeof(sign_pass_02), NULL); if (n) { lwsl_notice("%s: sign_val_chunk failed\n", __func__); goto bail1; } o = lws_cose_validate_results(cps); if (o->count != 1) { lwsl_notice("%s: results: %d\n", __func__, o->count); goto bail1; } res = lws_container_of(o->head, lws_cose_validate_res_t, list); if (res->result) goto bail1; lws_cose_validate_destroy(&cps); lws_cose_key_set_destroy(&set); /* * valid sign we have key for */ lwsl_user("%s: sign/sign-pass-03\n", __func__); lws_dll2_owner_clear(&set); if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { lwsl_notice("%s: key import fail\n", __func__); return 1; } info.sigtype = SIGTYPE_MULTI; info.ext_cb = NULL; info.ext_len = 0; cps = lws_cose_validate_create(&info); if (!cps) { lwsl_notice("%s: sign_val_create fail\n", __func__); goto bail; } n = lws_cose_validate_chunk(cps, sign_pass_03, sizeof(sign_pass_03), NULL); if (n) { lwsl_notice("%s: sign_val_chunk failed\n", __func__); goto bail1; } o = lws_cose_validate_results(cps); if (o->count != 1) { lwsl_notice("%s: results: %d\n", __func__, o->count); goto bail1; } res = lws_container_of(o->head, lws_cose_validate_res_t, list); if (res->result) goto bail1; lws_cose_validate_destroy(&cps); lws_cose_key_set_destroy(&set); /* * wrong cbor tag */ lwsl_user("%s: sign/sign-fail-01\n", __func__); lws_dll2_owner_clear(&set); if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { lwsl_notice("%s: key import fail\n", __func__); return 1; } info.sigtype = SIGTYPE_MULTI; cps = lws_cose_validate_create(&info); if (!cps) { lwsl_notice("%s: sign_val_create fail\n", __func__); goto bail; } n = lws_cose_validate_chunk(cps, sign_fail_01, sizeof(sign_fail_01), NULL); if (!n) { lwsl_notice("%s: sign_val_chunk should fail\n", __func__); goto bail1; } lws_cose_validate_destroy(&cps); lws_cose_key_set_destroy(&set); /* * tampered signature */ lwsl_user("%s: sign/sign-fail-02\n", __func__); lws_dll2_owner_clear(&set); if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { lwsl_notice("%s: key import fail\n", __func__); return 1; } info.sigtype = SIGTYPE_MULTI; cps = lws_cose_validate_create(&info); if (!cps) { lwsl_notice("%s: sign_val_create fail\n", __func__); goto bail; } n = lws_cose_validate_chunk(cps, sign_fail_02, sizeof(sign_fail_02), NULL); if (n) { lwsl_notice("%s: sign_val_chunk failed\n", __func__); goto bail1; } o = lws_cose_validate_results(cps); if (o->count != 1) { lwsl_notice("%s: results: %d\n", __func__, o->count); goto bail1; } res = lws_container_of(o->head, lws_cose_validate_res_t, list); if (!res->result) goto bail1; lws_cose_validate_destroy(&cps); lws_cose_key_set_destroy(&set); /* * tampered sign alg -999 */ lwsl_user("%s: sign/sign-fail-03\n", __func__); lws_dll2_owner_clear(&set); if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { lwsl_notice("%s: key import fail\n", __func__); return 1; } info.sigtype = SIGTYPE_MULTI; cps = lws_cose_validate_create(&info); if (!cps) { lwsl_notice("%s: sign_val_create fail\n", __func__); goto bail; } n = lws_cose_validate_chunk(cps, sign_fail_03, sizeof(sign_fail_03), NULL); if (n) { lwsl_notice("%s: sign_val_chunk failed\n", __func__); goto bail1; } o = lws_cose_validate_results(cps); if (o->count != 1) { lwsl_notice("%s: results: %d\n", __func__, o->count); goto bail1; } lws_cose_validate_destroy(&cps); lws_cose_key_set_destroy(&set); /* * tampered sign alg 0 */ lwsl_user("%s: sign/sign-fail-04\n", __func__); lws_dll2_owner_clear(&set); if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { lwsl_notice("%s: key import fail\n", __func__); return 1; } info.sigtype = SIGTYPE_MULTI; cps = lws_cose_validate_create(&info); if (!cps) { lwsl_notice("%s: sign_val_create fail\n", __func__); goto bail; } n = lws_cose_validate_chunk(cps, sign_fail_04, sizeof(sign_fail_04), NULL); if (n) { lwsl_notice("%s: sign_val_chunk failed\n", __func__); goto bail1; } o = lws_cose_validate_results(cps); if (o->count != 1) { lwsl_notice("%s: results: %d\n", __func__, o->count); goto bail1; } lws_cose_validate_destroy(&cps); lws_cose_key_set_destroy(&set); /* * add protected attribute */ lwsl_user("%s: sign/sign-fail-06\n", __func__); lws_dll2_owner_clear(&set); if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { lwsl_notice("%s: key import fail\n", __func__); return 1; } info.sigtype = SIGTYPE_MULTI; cps = lws_cose_validate_create(&info); if (!cps) { lwsl_notice("%s: sign_val_create fail\n", __func__); goto bail; } n = lws_cose_validate_chunk(cps, sign_fail_06, sizeof(sign_fail_06), NULL); if (n) { lwsl_notice("%s: sign_val_chunk failed\n", __func__); goto bail1; } o = lws_cose_validate_results(cps); if (o->count != 1) { lwsl_notice("%s: results: %d\n", __func__, o->count); goto bail1; } res = lws_container_of(o->head, lws_cose_validate_res_t, list); if (!res->result) goto bail1; lws_cose_validate_destroy(&cps); lws_cose_key_set_destroy(&set); /* * remove protected attribute */ lwsl_user("%s: sign/sign-fail-07\n", __func__); lws_dll2_owner_clear(&set); if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { lwsl_notice("%s: key import fail\n", __func__); return 1; } info.sigtype = SIGTYPE_MULTI; cps = lws_cose_validate_create(&info); if (!cps) { lwsl_notice("%s: sign_val_create fail\n", __func__); goto bail; } n = lws_cose_validate_chunk(cps, sign_fail_07, sizeof(sign_fail_07), NULL); if (n) { lwsl_notice("%s: sign_val_chunk failed\n", __func__); goto bail1; } o = lws_cose_validate_results(cps); if (o->count != 1) { lwsl_notice("%s: results: %d\n", __func__, o->count); goto bail1; } res = lws_container_of(o->head, lws_cose_validate_res_t, list); if (!res->result) goto bail1; lws_cose_validate_destroy(&cps); lws_cose_key_set_destroy(&set); /* * valid HMAC sign we have key for */ lwsl_user("%s: hmac-examples/hmac-01\n", __func__); lws_dll2_owner_clear(&set); if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { lwsl_notice("%s: key import fail\n", __func__); return 1; } info.sigtype = SIGTYPE_MAC; cps = lws_cose_validate_create(&info); if (!cps) { lwsl_notice("%s: sign_val_create fail\n", __func__); goto bail; } n = lws_cose_validate_chunk(cps, sign_hmac_01, sizeof(sign_hmac_01), NULL); if (n) { lwsl_notice("%s: sign_val_chunk failed\n", __func__); goto bail1; } o = lws_cose_validate_results(cps); if (o->count != 1) { lwsl_err("%s: count %d\n", __func__, o->count); goto bail1; } res = lws_container_of(o->head, lws_cose_validate_res_t, list); if (res->result) { lwsl_err("%s: result is fail\n", __func__); goto bail1; } lws_cose_validate_destroy(&cps); lws_cose_key_set_destroy(&set); /* * valid HMAC sign we have key for */ lwsl_user("%s: hmac-examples/hmac-02\n", __func__); lws_dll2_owner_clear(&set); if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { lwsl_notice("%s: key import fail\n", __func__); return 1; } info.sigtype = SIGTYPE_MAC; cps = lws_cose_validate_create(&info); if (!cps) { lwsl_notice("%s: sign_val_create fail\n", __func__); goto bail; } n = lws_cose_validate_chunk(cps, sign_hmac_02, sizeof(sign_hmac_02), NULL); if (n) { lwsl_notice("%s: sign_val_chunk failed\n", __func__); goto bail1; } o = lws_cose_validate_results(cps); if (o->count != 1) { lwsl_err("%s: count %d\n", __func__, o->count); goto bail1; } res = lws_container_of(o->head, lws_cose_validate_res_t, list); if (res->result) { lwsl_err("%s: result is fail\n", __func__); goto bail1; } lws_cose_validate_destroy(&cps); lws_cose_key_set_destroy(&set); /* * valid HMAC sign we have key for */ lwsl_user("%s: hmac-examples/hmac-03\n", __func__); lws_dll2_owner_clear(&set); if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { lwsl_notice("%s: key import fail\n", __func__); return 1; } info.sigtype = SIGTYPE_MAC; cps = lws_cose_validate_create(&info); if (!cps) { lwsl_notice("%s: sign_val_create fail\n", __func__); goto bail; } n = lws_cose_validate_chunk(cps, sign_hmac_03, sizeof(sign_hmac_03), NULL); if (n) { lwsl_notice("%s: sign_val_chunk failed\n", __func__); goto bail1; } o = lws_cose_validate_results(cps); if (o->count != 1) { lwsl_err("%s: count %d\n", __func__, o->count); goto bail1; } res = lws_container_of(o->head, lws_cose_validate_res_t, list); if (res->result) { lwsl_err("%s: result is fail\n", __func__); goto bail1; } lws_cose_validate_destroy(&cps); lws_cose_key_set_destroy(&set); /* * invalid HMAC sign we have key for */ lwsl_user("%s: hmac-examples/hmac-04 fail mac tag\n", __func__); lws_dll2_owner_clear(&set); if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { lwsl_notice("%s: key import fail\n", __func__); return 1; } info.sigtype = SIGTYPE_MAC; cps = lws_cose_validate_create(&info); if (!cps) { lwsl_notice("%s: sign_val_create fail\n", __func__); goto bail; } n = lws_cose_validate_chunk(cps, sign_hmac_04, sizeof(sign_hmac_04), NULL); if (n) { lwsl_notice("%s: sign_val_chunk failed\n", __func__); goto bail1; } o = lws_cose_validate_results(cps); if (o->count != 1) { lwsl_err("%s: count %d\n", __func__, o->count); goto bail1; } res = lws_container_of(o->head, lws_cose_validate_res_t, list); if (!res->result) { lwsl_err("%s: result is wrongly succeeding\n", __func__); goto bail1; } lws_cose_validate_destroy(&cps); lws_cose_key_set_destroy(&set); /* * valid HMAC sign we have key for HS256/64 */ lwsl_user("%s: hmac-examples/hmac-05\n", __func__); lws_dll2_owner_clear(&set); if (!lws_cose_key_import(&set, NULL, NULL, keyset1.set, keyset1.len)) { lwsl_notice("%s: key import fail\n", __func__); return 1; } info.sigtype = SIGTYPE_MAC; cps = lws_cose_validate_create(&info); if (!cps) { lwsl_notice("%s: sign_val_create fail\n", __func__); goto bail; } n = lws_cose_validate_chunk(cps, sign_hmac_05, sizeof(sign_hmac_05), NULL); if (n) { lwsl_notice("%s: sign_val_chunk failed\n", __func__); goto bail1; } o = lws_cose_validate_results(cps); if (o->count != 1) { lwsl_err("%s: count %d\n", __func__, o->count); goto bail1; } res = lws_container_of(o->head, lws_cose_validate_res_t, list); if (res->result) { lwsl_err("%s: result is fail\n", __func__); goto bail1; } lws_cose_validate_destroy(&cps); lws_cose_key_set_destroy(&set); /* * valid HMAC sign with implicit HS256 key */ lwsl_user("%s: hmac-examples/enc-01\n", __func__); lws_dll2_owner_clear(&set); if (!lws_cose_key_import(&set, NULL, NULL, key3.set, key3.len)) { lwsl_notice("%s: key import fail\n", __func__); return 1; } info.sigtype = SIGTYPE_MAC0; cps = lws_cose_validate_create(&info); if (!cps) { lwsl_notice("%s: sign_val_create fail\n", __func__); goto bail; } n = lws_cose_validate_chunk(cps, enc_hmac_01, sizeof(enc_hmac_01), NULL); if (n) { lwsl_notice("%s: sign_val_chunk failed\n", __func__); goto bail1; } o = lws_cose_validate_results(cps); if (o->count != 1) { lwsl_err("%s: count %d\n", __func__, o->count); goto bail1; } res = lws_container_of(o->head, lws_cose_validate_res_t, list); if (res->result) { lwsl_err("%s: result is fail\n", __func__); goto bail1; } lws_cose_validate_destroy(&cps); lws_cose_key_set_destroy(&set); /* * valid HMAC sign with implicit HS384 key */ lwsl_user("%s: hmac-examples/enc-02\n", __func__); lws_dll2_owner_clear(&set); if (!lws_cose_key_import(&set, NULL, NULL, key8.set, key8.len)) { lwsl_notice("%s: key import fail\n", __func__); return 1; } info.sigtype = SIGTYPE_MAC0; cps = lws_cose_validate_create(&info); if (!cps) { lwsl_notice("%s: sign_val_create fail\n", __func__); goto bail; } n = lws_cose_validate_chunk(cps, enc_hmac_02, sizeof(enc_hmac_02), NULL); if (n) { lwsl_notice("%s: sign_val_chunk failed\n", __func__); goto bail1; } o = lws_cose_validate_results(cps); if (o->count != 1) { lwsl_err("%s: count %d\n", __func__, o->count); goto bail1; } res = lws_container_of(o->head, lws_cose_validate_res_t, list); if (res->result) { lwsl_err("%s: result is fail\n", __func__); goto bail1; } lws_cose_validate_destroy(&cps); lws_cose_key_set_destroy(&set); /* * valid HMAC sign with implicit HS512 key */ lwsl_user("%s: hmac-examples/enc-03\n", __func__); lws_dll2_owner_clear(&set); if (!lws_cose_key_import(&set, NULL, NULL, key9.set, key9.len)) { lwsl_notice("%s: key import fail\n", __func__); return 1; } info.sigtype = SIGTYPE_MAC0; cps = lws_cose_validate_create(&info); if (!cps) { lwsl_notice("%s: sign_val_create fail\n", __func__); goto bail; } n = lws_cose_validate_chunk(cps, enc_hmac_03, sizeof(enc_hmac_03), NULL); if (n) { lwsl_notice("%s: sign_val_chunk failed\n", __func__); goto bail1; } o = lws_cose_validate_results(cps); if (o->count != 1) { lwsl_err("%s: count %d\n", __func__, o->count); goto bail1; } res = lws_container_of(o->head, lws_cose_validate_res_t, list); if (res->result) { lwsl_err("%s: result is fail\n", __func__); goto bail1; } lws_cose_validate_destroy(&cps); lws_cose_key_set_destroy(&set); /* * invalid HMAC sign with implicit HS256 key, tampered hmac tag */ lwsl_user("%s: hmac-examples/enc-04\n", __func__); lws_dll2_owner_clear(&set); if (!lws_cose_key_import(&set, NULL, NULL, key3.set, key3.len)) { lwsl_notice("%s: key import fail\n", __func__); return 1; } info.sigtype = SIGTYPE_MAC0; cps = lws_cose_validate_create(&info); if (!cps) { lwsl_notice("%s: sign_val_create fail\n", __func__); goto bail; } n = lws_cose_validate_chunk(cps, enc_hmac_04, sizeof(enc_hmac_04), NULL); if (n) { lwsl_notice("%s: sign_val_chunk failed\n", __func__); goto bail1; } o = lws_cose_validate_results(cps); if (o->count != 1) { lwsl_err("%s: count %d\n", __func__, o->count); goto bail1; } res = lws_container_of(o->head, lws_cose_validate_res_t, list); if (!res->result) { lwsl_err("%s: result wrongly succeeds\n", __func__); goto bail1; } lws_cose_validate_destroy(&cps); lws_cose_key_set_destroy(&set); /* * valid HMAC sign with implicit HS256 key, HS256/64 */ lwsl_user("%s: hmac-examples/enc-05\n", __func__); lws_dll2_owner_clear(&set); if (!lws_cose_key_import(&set, NULL, NULL, key3.set, key3.len)) { lwsl_notice("%s: key import fail\n", __func__); return 1; } info.sigtype = SIGTYPE_MAC0; cps = lws_cose_validate_create(&info); if (!cps) { lwsl_notice("%s: sign_val_create fail\n", __func__); goto bail; } n = lws_cose_validate_chunk(cps, enc_hmac_05, sizeof(enc_hmac_05), NULL); if (n) { lwsl_notice("%s: sign_val_chunk failed\n", __func__); goto bail1; } o = lws_cose_validate_results(cps); if (o->count != 1) { lwsl_err("%s: count %d\n", __func__, o->count); goto bail1; } res = lws_container_of(o->head, lws_cose_validate_res_t, list); if (res->result) { lwsl_err("%s: result is fail\n", __func__); goto bail1; } lws_cose_validate_destroy(&cps); lws_cose_key_set_destroy(&set); #if 0 /* * valid Ed25519 signature with countersignature from same key + alg */ lwsl_user("%s: countersign/sign-01\n", __func__); lws_dll2_owner_clear(&set); if (!lws_cose_key_import(&set, NULL, NULL, key10.set, key10.len)) { lwsl_notice("%s: key import fail\n", __func__); return 1; } info.sigtype = SIGTYPE_COUNTERSIGNED; cps = lws_cose_validate_create(&info); if (!cps) { lwsl_notice("%s: sign_val_create fail\n", __func__); goto bail; } n = lws_cose_validate_chunk(cps, countersign_sign_01, sizeof(countersign_sign_01), NULL); if (n) { lwsl_notice("%s: sign_val_chunk failed\n", __func__); goto bail1; } o = lws_cose_validate_results(cps); if (o->count != 1) { lwsl_err("%s: result count %d\n", __func__, o->count); goto bail1; } res = lws_container_of(o->head, lws_cose_validate_res_t, list); if (res->result) { lwsl_err("%s: result is fail\n", __func__); goto bail1; } lws_cose_validate_destroy(&cps); lws_cose_key_set_destroy(&set); #endif return 0; bail1: lws_cose_validate_destroy(&cps); bail: lws_cose_key_set_destroy(&set); return 1; } libwebsockets-4.3.5/minimal-examples/api-tests/api-test-dhcpc/000077500000000000000000000000001476025525100243525ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/api-tests/api-test-dhcpc/CMakeLists.txt000066400000000000000000000012041476025525100271070ustar00rootroot00000000000000project(lws-api-test-dhcpc C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-api-test-dhcpc) set(SRCS main.c) set(requirements 1) require_lws_config(LWS_WITH_SYS_DHCP_CLIENT 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/api-tests/api-test-dhcpc/README.md000066400000000000000000000011621476025525100256310ustar00rootroot00000000000000# api test dhcpc The application confirms it can set DHCP on the given interface ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -i |Network interface name to set by DHCP, eg, eth0 or wlo1 ``` $ ./lws-api-test-dhcpc -i wlo1 [2019/10/06 14:56:41:7683] U: LWS API selftest: Async DNS [2019/10/06 14:56:42:4461] U: main: requesting DHCP for wlo1 [2019/10/06 14:56:42:5207] N: callback_dhcpc: DHCP configured wlo1 [2019/10/06 14:56:42:5246] U: lws_dhcpc_cb: dhcp set OK [2019/10/06 14:56:42:5999] U: Completed: ALL PASS: 1 / 1 ``` libwebsockets-4.3.5/minimal-examples/api-tests/api-test-dhcpc/main.c000066400000000000000000000042341476025525100254450ustar00rootroot00000000000000/* * lws-api-test-dhcpc * * Written in 2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include #include static int interrupted, ok, fail, exp = 1; struct lws_context *context; const char *nif; static const char * const sa46_names[] = { "LWSDH_SA46_IP", "LWSDH_SA46_DNS_SRV_1", "LWSDH_SA46_DNS_SRV_2", "LWSDH_SA46_DNS_SRV_3", "LWSDH_SA46_DNS_SRV_4", "LWSDH_SA46_IPV4_ROUTER", "LWSDH_SA46_NTP_SERVER", "LWSDH_SA46_DHCP_SERVER", }; static int lws_dhcpc_cb(void *opaque, lws_dhcpc_ifstate_t *is) { unsigned int n; char buf[64]; lwsl_user("%s: dhcp set OK\n", __func__); for (n = 0; n < LWS_ARRAY_SIZE(sa46_names); n++) { lws_sa46_write_numeric_address(&is->sa46[n], buf, sizeof(buf)); lwsl_notice("%s: %s: %s\n", __func__, sa46_names[n], buf); } ok = 1; interrupted = 1; return 0; } void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; #if !defined(__COVERITY__) const char *p; #endif int n = 1; signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ lws_cmdline_option_handle_builtin(argc, argv, &info); lwsl_user("LWS API selftest: DHCP Client\n"); info.port = CONTEXT_PORT_NO_LISTEN; info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; #if !defined(__COVERITY__) if ((p = lws_cmdline_option(argc, argv, "-i"))) nif = p; #endif context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } if (nif) { lwsl_user("%s: requesting DHCP for %s\n", __func__, nif); lws_dhcpc_request(context, nif, AF_INET, lws_dhcpc_cb, NULL); } else { lwsl_err("%s: use -i to select if\n", __func__); interrupted = 1; } /* the usual lws event loop */ n = 1; while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); if (fail || ok != exp) lwsl_user("Completed: PASS: %d / %d, FAIL: %d\n", ok, exp, fail); else lwsl_user("Completed: ALL PASS: %d / %d\n", ok, exp); return !(ok == exp && !fail); } libwebsockets-4.3.5/minimal-examples/api-tests/api-test-fts/000077500000000000000000000000001476025525100240655ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/api-tests/api-test-fts/CMakeLists.txt000066400000000000000000000011641476025525100266270ustar00rootroot00000000000000project(lws-api-test-fts C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-api-test-fts) set(SRCS main.c) set(requirements 1) require_lws_config(LWS_WITH_FTS 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/api-tests/api-test-fts/README.md000066400000000000000000000043431476025525100253500ustar00rootroot00000000000000# lws api test fts Demonstrates how to create indexes and perform full-text searches. ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -c / --createindex|Create an index file, instead of searching -i / --index |Use this file as the index The two modes are: - create an index: `--createindex inputfile [inputfile...]` ``` $ ./lws-api-test-fts -c ./the-picture-of-dorian-gray.txt [2018/10/15 07:14:15:1175] USER: LWS API selftest: full-text search [2018/10/15 07:14:15:1531] NOTICE: lws_fts_serialize: index 1 files (0MiB) cpu time 32ms, alloc: 1024KiB + 1024KiB, serialize: 3ms, file: 325KiB ``` - perform search[es]: `searchterm [searchterm...]` ``` $ ./lws-api-test-fts b [2018/10/15 07:15:44:1442] USER: LWS API selftest: full-text search [2018/10/15 07:15:44:1442] NOTICE: lws_fts_search: 'b' Matched: 3 instances, 8 children, 0ms [2018/10/15 07:15:44:1443] NOTICE: lws_fts_results_dump: AC b: 3 agg hits [2018/10/15 07:15:44:1443] NOTICE: lws_fts_results_dump: AC be: 472 agg hits [2018/10/15 07:15:44:1443] NOTICE: lws_fts_results_dump: AC bee: 3 agg hits [2018/10/15 07:15:44:1443] NOTICE: lws_fts_results_dump: AC been: 236 agg hits [2018/10/15 07:15:44:1443] NOTICE: lws_fts_results_dump: AC beaut: 1 agg hits [2018/10/15 07:15:44:1443] NOTICE: lws_fts_results_dump: AC beauty: 55 agg hits [2018/10/15 07:15:44:1443] NOTICE: lws_fts_results_dump: AC because: 40 agg hits [2018/10/15 07:15:44:1443] NOTICE: lws_fts_results_dump: AC believe: 49 agg hits [2018/10/15 07:15:44:1443] NOTICE: lws_fts_results_dump: AC better: 54 agg hits [2018/10/15 07:15:44:1443] NOTICE: lws_fts_results_dump: AC before: 75 agg hits [2018/10/15 07:15:44:1443] NOTICE: lws_fts_results_dump: AC beg: 5 agg hits [2018/10/15 07:15:44:1443] NOTICE: lws_fts_results_dump: AC began: 44 agg hits [2018/10/15 07:15:44:1443] NOTICE: lws_fts_results_dump: AC but: 401 agg hits [2018/10/15 07:15:44:1443] NOTICE: lws_fts_results_dump: AC basil: 158 agg hits [2018/10/15 07:15:44:1443] NOTICE: lws_fts_results_dump: AC broke: 22 agg hits [2018/10/15 07:15:44:1444] NOTICE: lws_fts_results_dump: AC by: 242 agg hits [2018/10/15 07:15:44:1444] NOTICE: lws_fts_results_dump: AC boy: 36 agg hits ``` libwebsockets-4.3.5/minimal-examples/api-tests/api-test-fts/canned-1.txt000066400000000000000000000007641476025525100262230ustar00rootroot00000000000000API selftest: full-text search AC be: 472 agg hits AC but: 401 agg hits AC by: 242 agg hits AC been: 236 agg hits AC basil: 158 agg hits AC before: 75 agg hits AC beauty: 55 agg hits AC better: 54 agg hits AC believe: 49 agg hits AC began: 44 agg hits AC because: 40 agg hits AC boy: 36 agg hits AC book: 31 agg hits AC body: 28 agg hits AC both: 26 agg hits AC broke: 22 agg hits AC beg: 5 agg hits AC bore: 5 agg hits AC b: 3 agg hits AC bee: 3 agg hits AC beaut: 1 agg hits no filepath results libwebsockets-4.3.5/minimal-examples/api-tests/api-test-fts/canned-2.txt000066400000000000000000000006671476025525100262260ustar00rootroot00000000000000API selftest: full-text search no autocomplete results ../minimal-examples/api-tests/api-test-fts/the-picture-of-dorian-gray.txt: (8904 lines) 32 hits 360 17482 393 18984 562 28820 837 42903 1640 82057 2037 102214 2091 105019 2145 107351 2725 137188 2808 141127 2977 149971 3429 173810 4417 229186 4431 230058 4656 241181 4708 244372 ../minimal-examples/api-tests/api-test-fts/les-mis-utf8.txt: (14399 lines) 3 hits 14106 14313 14396 libwebsockets-4.3.5/minimal-examples/api-tests/api-test-fts/les-mis-utf8.txt000066400000000000000000025534131476025525100271000ustar00rootroot00000000000000The Project Gutenberg EBook of Les misĆ©rables Tome I, by Victor Hugo This eBook is for the use of anyone anywhere at no cost and with almost no restrictions whatsoever. You may copy it, give it away or re-use it under the terms of the Project Gutenberg License included with this eBook or online at www.gutenberg.org Title: Les misĆ©rables Tome I Fantine Author: Victor Hugo Release Date: January 10, 2006 [EBook #17489] [Date last updated: July 28, 2010] Language: French *** START OF THIS PROJECT GUTENBERG EBOOK LES MISƉRABLES TOME I *** Produced by www.ebooksgratuits.com and Chuck Greif Victor Hugo LES MISƉRABLES Tome I--FANTINE (1862) TABLE DES MATIƈRES Livre premier--Un juste Chapitre I Monsieur Myriel Chapitre II Monsieur Myriel devient monseigneur Bienvenu Chapitre III ƀ bon Ć©vĆŖque dur Ć©vĆŖchĆ© Chapitre IV Les oeuvres semblables aux paroles Chapitre V Que monseigneur Bienvenu faisait durer trop longtemps ses soutanes Chapitre VI Par qui il faisait garder sa maison Chapitre VII Cravatte Chapitre VIII Philosophie aprĆØs boire Chapitre IX Le frĆØre racontĆ© par la soeur Chapitre X L'Ć©vĆŖque en prĆ©sence d'une lumiĆØre inconnue Chapitre XI Une restriction Chapitre XII Solitude de monseigneur Bienvenu Chapitre XIII Ce qu'il croyait Chapitre XIV Ce qu'il pensait Livre deuxiĆØme--La chute Chapitre I Le soir d'un jour de marche Chapitre II La prudence conseillĆ©e Ć  la sagesse Chapitre III HĆ©roĆÆsme de l'obĆ©issance passive Chapitre IV DĆ©tails sur les fromageries de Pontarlier Chapitre V TranquillitĆ© Chapitre VI Jean Valjean Chapitre VII Le dedans du dĆ©sespoir Chapitre VIII L'onde et l'ombre Chapitre IX Nouveaux griefs Chapitre X L'homme rĆ©veillĆ© Chapitre XI Ce qu'il fait Chapitre XII L'Ć©vĆŖque travaille Chapitre XIII Petit-Gervais Livre troisiĆØme--En l'annĆ©e 1817 Chapitre I L'annĆ©e 1817 Chapitre II Double quatuor Chapitre III Quatre Ć  quatre Chapitre IV TholomyĆØs est si joyeux qu'il chante une chanson espagnole Chapitre V Chez Bombarda Chapitre VI Chapitre où l'on s'adore Chapitre VII Sagesse de TholomyĆØs Chapitre VIII Mort d'un cheval Chapitre IX Fin joyeuse de la joie Livre quatriĆØme--Confier, c'est quelquefois livrer Chapitre I Une mĆØre qui en rencontre une autre Chapitre II PremiĆØre esquisse de deux figures louches Chapitre III L'Alouette Livre cinquiĆØme--La descente Chapitre I Histoire d'un progrĆØs dans les verroteries noires Chapitre II M. Madeleine Chapitre III Sommes dĆ©posĆ©es chez Laffitte Chapitre IV M. Madeleine en deuil Chapitre V Vagues Ć©clairs Ć  l'horizon Chapitre VI Le pĆØre Fauchelevent Chapitre VII Fauchelevent devient jardinier Ć  Paris Chapitre VIII Madame Victurnien dĆ©pense trente-cinq francs pour la morale Chapitre IX SuccĆØs de Madame Victurnien Chapitre X Suite du succĆØs Chapitre XI _Christus nos liberavit_ Chapitre XII Le dĆ©soeuvrement de M. Bamatabois Chapitre XIII Solution de quelques questions de police municipale Livre sixiĆØme--Javert Chapitre I Commencement du repos Chapitre II Comment Jean peut devenir Champ Livre septiĆØme--L'affaire Champmathieu Chapitre I La soeur Simplice Chapitre II PerspicacitĆ© de maĆ®tre Scaufflaire Chapitre III Une tempĆŖte sous un crĆ¢ne Chapitre IV Formes que prend la souffrance pendant le sommeil Chapitre V BĆ¢tons dans les roues Chapitre VI La soeur Simplice mise Ć  l'Ć©preuve Chapitre VII Le voyageur arrivĆ© prend ses prĆ©cautions pour repartir Chapitre VIII EntrĆ©e de faveur Chapitre IX Un lieu où des convictions sont en train de se former Chapitre X Le systĆØme de dĆ©nĆ©gations Chapitre XI Champmathieu de plus en plus Ć©tonnĆ© Livre huitiĆØme--Contre-coup Chapitre I Dans quel miroir M. Madeleine regarde ses cheveux Chapitre II Fantine heureuse Chapitre III Javert content Chapitre IV L'autoritĆ© reprend ses droits Chapitre V Tombeau convenable Livre premier--Un juste Chapitre I Monsieur Myriel En 1815, M. Charles-FranƧois-Bienvenu Myriel Ć©tait Ć©vĆŖque de Digne. C'Ć©tait un vieillard d'environ soixante-quinze ans; il occupait le siĆØge de Digne depuis 1806. Quoique ce dĆ©tail ne touche en aucune maniĆØre au fond mĆŖme de ce que nous avons Ć  raconter, il n'est peut-ĆŖtre pas inutile, ne fĆ»t-ce que pour ĆŖtre exact en tout, d'indiquer ici les bruits et les propos qui avaient couru sur son compte au moment où il Ć©tait arrivĆ© dans le diocĆØse. Vrai ou faux, ce qu'on dit des hommes tient souvent autant de place dans leur vie et surtout dans leur destinĆ©e que ce qu'ils font. M. Myriel Ć©tait fils d'un conseiller au parlement d'Aix; noblesse de robe. On contait de lui que son pĆØre, le rĆ©servant pour hĆ©riter de sa charge, l'avait mariĆ© de fort bonne heure, Ć  dix-huit ou vingt ans, suivant un usage assez rĆ©pandu dans les familles parlementaires. Charles Myriel, nonobstant ce mariage, avait, disait-on, beaucoup fait parler de lui. Il Ć©tait bien fait de sa personne, quoique d'assez petite taille, Ć©lĆ©gant, gracieux, spirituel; toute la premiĆØre partie de sa vie avait Ć©tĆ© donnĆ©e au monde et aux galanteries. La rĆ©volution survint, les Ć©vĆ©nements se prĆ©cipitĆØrent, les familles parlementaires dĆ©cimĆ©es, chassĆ©es, traquĆ©es, se dispersĆØrent. M. Charles Myriel, dĆØs les premiers jours de la rĆ©volution, Ć©migra en Italie. Sa femme y mourut d'une maladie de poitrine dont elle Ć©tait atteinte depuis longtemps. Ils n'avaient point d'enfants. Que se passa-t-il ensuite dans la destinĆ©e de M. Myriel? L'Ć©croulement de l'ancienne sociĆ©tĆ© franƧaise, la chute de sa propre famille, les tragiques spectacles de 93, plus effrayants encore peut-ĆŖtre pour les Ć©migrĆ©s qui les voyaient de loin avec le grossissement de l'Ć©pouvante, firent-ils germer en lui des idĆ©es de renoncement et de solitude? Fut-il, au milieu d'une de ces distractions et de ces affections qui occupaient sa vie, subitement atteint d'un de ces coups mystĆ©rieux et terribles qui viennent quelquefois renverser, en le frappant au coeur, l'homme que les catastrophes publiques n'Ć©branleraient pas en le frappant dans son existence et dans sa fortune? Nul n'aurait pu le dire; tout ce qu'on savait, c'est que, lorsqu'il revint d'Italie, il Ć©tait prĆŖtre. En 1804, M. Myriel Ć©tait curĆ© de Brignolles. Il Ć©tait dĆ©jĆ  vieux, et vivait dans une retraite profonde. Vers l'Ć©poque du couronnement, une petite affaire de sa cure, on ne sait plus trop quoi, l'amena Ć  Paris. Entre autres personnes puissantes, il alla solliciter pour ses paroissiens M. le cardinal Fesch. Un jour que l'empereur Ć©tait venu faire visite Ć  son oncle, le digne curĆ©, qui attendait dans l'antichambre, se trouva sur le passage de sa majestĆ©. NapolĆ©on, se voyant regardĆ© avec une certaine curiositĆ© par ce vieillard, se retourna, et dit brusquement: --Quel est ce bonhomme qui me regarde? --Sire, dit M. Myriel, vous regardez un bonhomme, et moi je regarde un grand homme. Chacun de nous peut profiter. L'empereur, le soir mĆŖme, demanda au cardinal le nom de ce curĆ©, et quelque temps aprĆØs M. Myriel fut tout surpris d'apprendre qu'il Ć©tait nommĆ© Ć©vĆŖque de Digne. Qu'y avait-il de vrai, du reste, dans les rĆ©cits qu'on faisait sur la premiĆØre partie de la vie de M. Myriel? Personne ne le savait. Peu de familles avaient connu la famille Myriel avant la rĆ©volution. M. Myriel devait subir le sort de tout nouveau venu dans une petite ville où il y a beaucoup de bouches qui parlent et fort peu de tĆŖtes qui pensent. Il devait le subir, quoiqu'il fĆ»t Ć©vĆŖque et parce qu'il Ć©tait Ć©vĆŖque. Mais, aprĆØs tout, les propos auxquels on mĆŖlait son nom n'Ć©taient peut-ĆŖtre que des propos; du bruit, des mots, des paroles; moins que des paroles, des _palabres_, comme dit l'Ć©nergique langue du midi. Quoi qu'il en fĆ»t, aprĆØs neuf ans d'Ć©piscopat et de rĆ©sidence Ć  Digne, tous ces racontages, sujets de conversation qui occupent dans le premier moment les petites villes et les petites gens, Ć©taient tombĆ©s dans un oubli profond. Personne n'eĆ»t osĆ© en parler, personne n'eĆ»t mĆŖme osĆ© s'en souvenir. M. Myriel Ć©tait arrivĆ© Ć  Digne accompagnĆ© d'une vieille fille, mademoiselle Baptistine, qui Ć©tait sa soeur et qui avait dix ans de moins que lui. Ils avaient pour tout domestique une servante du mĆŖme Ć¢ge que mademoiselle Baptistine, et appelĆ©e madame Magloire, laquelle, aprĆØs avoir Ć©tĆ© _la servante de M. le CurĆ©_, prenait maintenant le double titre de femme de chambre de mademoiselle et femme de charge de monseigneur. Mademoiselle Baptistine Ć©tait une personne longue, pĆ¢le, mince, douce; elle rĆ©alisait l'idĆ©al de ce qu'exprime le mot Ā«respectableĀ»; car il semble qu'il soit nĆ©cessaire qu'une femme soit mĆØre pour ĆŖtre vĆ©nĆ©rable. Elle n'avait jamais Ć©tĆ© jolie; toute sa vie, qui n'avait Ć©tĆ© qu'une suite de saintes oeuvres, avait fini par mettre sur elle une sorte de blancheur et de clartĆ©; et, en vieillissant, elle avait gagnĆ© ce qu'on pourrait appeler la beautĆ© de la bontĆ©. Ce qui avait Ć©tĆ© de la maigreur dans sa jeunesse Ć©tait devenu, dans sa maturitĆ©, de la transparence; et cette diaphanĆ©itĆ© laissait voir l'ange. C'Ć©tait une Ć¢me plus encore que ce n'Ć©tait une vierge. Sa personne semblait faite d'ombre; Ć  peine assez de corps pour qu'il y eĆ»t lĆ  un sexe; un peu de matiĆØre contenant une lueur; de grands yeux toujours baissĆ©s; un prĆ©texte pour qu'une Ć¢me reste sur la terre. Madame Magloire Ć©tait une petite vieille, blanche, grasse, replĆØte, affairĆ©e, toujours haletante, Ć  cause de son activitĆ© d'abord, ensuite Ć  cause d'un asthme. ƀ son arrivĆ©e, on installa M. Myriel en son palais Ć©piscopal avec les honneurs voulus par les dĆ©crets impĆ©riaux qui classent l'Ć©vĆŖque immĆ©diatement aprĆØs le marĆ©chal de camp. Le maire et le prĆ©sident lui firent la premiĆØre visite, et lui de son cĆ“tĆ© fit la premiĆØre visite au gĆ©nĆ©ral et au prĆ©fet. L'installation terminĆ©e, la ville attendit son Ć©vĆŖque Ć  l'oeuvre. Chapitre II Monsieur Myriel devient monseigneur Bienvenu Le palais Ć©piscopal de Digne Ć©tait attenant Ć  l'hĆ“pital. Le palais Ć©piscopal Ć©tait un vaste et bel hĆ“tel bĆ¢ti en pierre au commencement du siĆØcle dernier par monseigneur Henri Puget, docteur en thĆ©ologie de la facultĆ© de Paris, abbĆ© de Simore, lequel Ć©tait Ć©vĆŖque de Digne en 1712. Ce palais Ć©tait un vrai logis seigneurial. Tout y avait grand air, les appartements de l'Ć©vĆŖque, les salons, les chambres, la cour d'honneur, fort large, avec promenoirs Ć  arcades, selon l'ancienne mode florentine, les jardins plantĆ©s de magnifiques arbres. Dans la salle Ć  manger, longue et superbe galerie qui Ć©tait au rez-de-chaussĆ©e et s'ouvrait sur les jardins, monseigneur Henri Puget avait donnĆ© Ć  manger en cĆ©rĆ©monie le 29 juillet 1714 Ć  messeigneurs Charles BrĆ»lart de Genlis, archevĆŖque-prince d'Embrun, Antoine de Mesgrigny, capucin, Ć©vĆŖque de Grasse, Philippe de VendĆ“me, grand prieur de France, abbĆ© de Saint-HonorĆ© de LĆ©rins, FranƧois de Berton de Grillon, Ć©vĆŖque-baron de Vence, CĆ©sar de Sabran de Forcalquier, Ć©vĆŖque-seigneur de GlandĆØve, et Jean Soanen, prĆŖtre de l'oratoire, prĆ©dicateur ordinaire du roi, Ć©vĆŖque-seigneur de Senez. Les portraits de ces sept rĆ©vĆ©rends personnages dĆ©coraient cette salle, et cette date mĆ©morable, 29 juillet 1714, y Ć©tait gravĆ©e en lettres d'or sur une table de marbre blanc. L'hĆ“pital Ć©tait une maison Ć©troite et basse Ć  un seul Ć©tage avec un petit jardin. Trois jours aprĆØs son arrivĆ©e, l'Ć©vĆŖque visita l'hĆ“pital. La visite terminĆ©e, il fit prier le directeur de vouloir bien venir jusque chez lui. --Monsieur le directeur de l'hĆ“pital, lui dit-il, combien en ce moment avez-vous de malades? --Vingt-six, monseigneur. --C'est ce que j'avais comptĆ©, dit l'Ć©vĆŖque. --Les lits, reprit le directeur, sont bien serrĆ©s les uns contre les autres. --C'est ce que j'avais remarquĆ©. --Les salles ne sont que des chambres, et l'air s'y renouvelle difficilement. --C'est ce qui me semble. --Et puis, quand il y a un rayon de soleil, le jardin est bien petit pour les convalescents. --C'est ce que je me disais. --Dans les Ć©pidĆ©mies, nous avons eu cette annĆ©e le typhus, nous avons eu une suette militaire il y a deux ans, cent malades quelquefois; nous ne savons que faire. --C'est la pensĆ©e qui m'Ć©tait venue. --Que voulez-vous, monseigneur? dit le directeur, il faut se rĆ©signer. Cette conversation avait lieu dans la salle Ć  manger-galerie du rez-de-chaussĆ©e. L'Ć©vĆŖque garda un moment le silence, puis il se tourna brusquement vers le directeur de l'hĆ“pital: --Monsieur, dit-il, combien pensez-vous qu'il tiendrait de lits rien que dans cette salle? --La salle Ć  manger de monseigneur! s'Ć©cria le directeur stupĆ©fait. L'Ć©vĆŖque parcourait la salle du regard et semblait y faire avec les yeux des mesures et des calculs. --Il y tiendrait bien vingt lits! dit-il, comme se parlant Ć  lui-mĆŖme. Puis Ć©levant la voix: --Tenez, monsieur le directeur de l'hĆ“pital, je vais vous dire. Il y a Ć©videmment une erreur. Vous ĆŖtes vingt-six personnes dans cinq ou six petites chambres. Nous sommes trois ici, et nous avons place pour soixante. Il y a erreur, je vous dis. Vous avez mon logis, et j'ai le vĆ“tre. Rendez-moi ma maison. C'est ici chez vous. Le lendemain, les vingt-six pauvres Ć©taient installĆ©s dans le palais de l'Ć©vĆŖque et l'Ć©vĆŖque Ć©tait Ć  l'hĆ“pital. M. Myriel n'avait point de bien, sa famille ayant Ć©tĆ© ruinĆ©e par la rĆ©volution. Sa soeur touchait une rente viagĆØre de cinq cents francs qui, au presbytĆØre, suffisait Ć  sa dĆ©pense personnelle. M. Myriel recevait de l'Ć©tat comme Ć©vĆŖque un traitement de quinze mille francs. Le jour mĆŖme où il vint se loger dans la maison de l'hĆ“pital, M. Myriel dĆ©termina l'emploi de cette somme une fois pour toutes de la maniĆØre suivante. Nous transcrivons ici une note Ć©crite de sa main. _Note pour rĆ©gler les dĆ©penses de ma maison._ _Pour le petit sĆ©minaire: quinze cents livres_ _CongrĆ©gation de la mission: cent livres_ _Pour les lazaristes de Montdidier: cent livres_ _SĆ©minaire des missions Ć©trangĆØres Ć  Paris: deux cents livres_ _CongrĆ©gation du Saint-Esprit: cent cinquante livres_ _Ɖtablissements religieux de la Terre-Sainte: cent livres_ _SociĆ©tĆ©s de charitĆ© maternelle: trois cents livres_ _En sus, pour celle d'Arles: cinquante livres_ _OEuvre pour l'amĆ©lioration des prisons: quatre cents livres_ _OEuvre pour le soulagement et la dĆ©livrance des prisonniers: cinq cents livres_ _Pour libĆ©rer des pĆØres de famille prisonniers pour dettes: mille livres_ _SupplĆ©ment au traitement des pauvres maĆ®tres d'Ć©cole du diocĆØse: deux mille livres_ _Grenier d'abondance des Hautes-Alpes: cent livres_ _CongrĆ©gation des dames de Digne, de Manosque et de Sisteron, pour l'enseignement gratuit des filles indigentes: quinze cents livres_ _Pour les pauvres: six mille livres_ _Ma dĆ©pense personnelle: mille livres_ Total: _quinze mille livres_ Pendant tout le temps qu'il occupa le siĆØge de Digne, M. Myriel ne changea presque rien Ć  cet arrangement. Il appelait cela, comme on voit, _avoir rĆ©glĆ© les dĆ©penses de sa maison_. Cet arrangement fut acceptĆ© avec une soumission absolue par mademoiselle Baptistine. Pour cette sainte fille, M. de Digne Ć©tait tout Ć  la fois son frĆØre et son Ć©vĆŖque, son ami selon la nature et son supĆ©rieur selon l'Ć©glise. Elle l'aimait et elle le vĆ©nĆ©rait tout simplement. Quand il parlait, elle s'inclinait; quand il agissait, elle adhĆ©rait. La servante seule, madame Magloire, murmura un peu. M. l'Ć©vĆŖque, on l'a pu remarquer, ne s'Ć©tait rĆ©servĆ© que mille livres, ce qui, joint Ć  la pension de mademoiselle Baptistine, faisait quinze cents francs par an. Avec ces quinze cents francs, ces deux vieilles femmes et ce vieillard vivaient. Et quand un curĆ© de village venait Ć  Digne, M. l'Ć©vĆŖque trouvait encore moyen de le traiter, grĆ¢ce Ć  la sĆ©vĆØre Ć©conomie de madame Magloire et Ć  l'intelligente administration de mademoiselle Baptistine. Un jour--il Ć©tait Ć  Digne depuis environ trois mois--l'Ć©vĆŖque dit: --Avec tout cela je suis bien gĆŖnĆ©! --Je le crois bien! s'Ć©cria madame Magloire, Monseigneur n'a seulement pas rĆ©clamĆ© la rente que le dĆ©partement lui doit pour ses frais de carrosse en ville et de tournĆ©es dans le diocĆØse. Pour les Ć©vĆŖques d'autrefois c'Ć©tait l'usage. --Tiens! dit l'Ć©vĆŖque, vous avez raison, madame Magloire. Il fit sa rĆ©clamation. Quelque temps aprĆØs, le conseil gĆ©nĆ©ral, prenant cette demande en considĆ©ration, lui vota une somme annuelle de trois mille francs, sous cette rubrique: _Allocation Ć  M. l'Ć©vĆŖque pour frais de carrosse, frais de poste et frais de tournĆ©es pastorales_. Cela fit beaucoup crier la bourgeoisie locale, et, Ć  cette occasion, un sĆ©nateur de l'empire, ancien membre du conseil des cinq-cents favorable au dix-huit brumaire et pourvu prĆØs de la ville de Digne d'une sĆ©natorerie magnifique, Ć©crivit au ministre des cultes, M. Bigot de PrĆ©ameneu, un petit billet irritĆ© et confidentiel dont nous extrayons ces lignes authentiques: Ā«--Des frais de carrosse? pourquoi faire dans une ville de moins de quatre mille habitants? Des frais de poste et de tournĆ©es? Ć  quoi bon ces tournĆ©es d'abord? ensuite comment courir la poste dans un pays de montagnes? Il n'y a pas de routes. On ne va qu'Ć  cheval. Le pont mĆŖme de la Durance Ć  ChĆ¢teau-Arnoux peut Ć  peine porter des charrettes Ć  boeufs. Ces prĆŖtres sont tous ainsi. Avides et avares. Celui-ci a fait le bon apĆ“tre en arrivant. Maintenant il fait comme les autres. Il lui faut carrosse et chaise de poste. Il lui faut du luxe comme aux anciens Ć©vĆŖques. Oh! toute cette prĆŖtraille! Monsieur le comte, les choses n'iront bien que lorsque l'empereur nous aura dĆ©livrĆ©s des calotins. ƀ bas le pape! (les affaires se brouillaient avec Rome). Quant Ć  moi, je suis pour CĆ©sar tout seul. Etc., etc.Ā» La chose, en revanche, rĆ©jouit fort madame Magloire. --Bon, dit-elle Ć  mademoiselle Baptistine, Monseigneur a commencĆ© par les autres, mais il a bien fallu qu'il finĆ®t par lui-mĆŖme. Il a rĆ©glĆ© toutes ses charitĆ©s. VoilĆ  trois mille livres pour nous. Enfin! Le soir mĆŖme, l'Ć©vĆŖque Ć©crivit et remit Ć  sa soeur une note ainsi conƧue: _Frais de carrosse et de tournĆ©es._ _Pour donner du bouillon de viande aux malades de l'hĆ“pital: quinze cents livres_ _Pour la sociĆ©tĆ© de charitĆ© maternelle d'Aix: deux cent cinquante livres_ _Pour la sociĆ©tĆ© de charitĆ© maternelle de Draguignan: deux cent cinquante livres_ _Pour les enfants trouvĆ©s: cinq cents livres_ _Pour les orphelins: cinq cents livres_ Total: _trois mille livres_ Tel Ć©tait le budget de M. Myriel. Quant au casuel Ć©piscopal, rachats de bans, dispenses, ondoiements, prĆ©dications, bĆ©nĆ©dictions d'Ć©glises ou de chapelles, mariages, etc., l'Ć©vĆŖque le percevait sur les riches avec d'autant plus d'Ć¢pretĆ© qu'il le donnait aux pauvres. Au bout de peu de temps, les offrandes d'argent affluĆØrent. Ceux qui ont et ceux qui manquent frappaient Ć  la porte de M. Myriel, les uns venant chercher l'aumĆ“ne que les autres venaient y dĆ©poser. L'Ć©vĆŖque, en moins d'un an, devint le trĆ©sorier de tous les bienfaits et le caissier de toutes les dĆ©tresses. Des sommes considĆ©rables passaient par ses mains; mais rien ne put faire qu'il changeĆ¢t quelque chose Ć  son genre de vie et qu'il ajoutĆ¢t le moindre superflu Ć  son nĆ©cessaire. Loin de lĆ . Comme il y a toujours encore plus de misĆØre en bas que de fraternitĆ© en haut, tout Ć©tait donnĆ©, pour ainsi dire, avant d'ĆŖtre reƧu; c'Ć©tait comme de l'eau sur une terre sĆØche; il avait beau recevoir de l'argent, il n'en avait jamais. Alors il se dĆ©pouillait. L'usage Ć©tant que les Ć©vĆŖques Ć©noncent leurs noms de baptĆŖme en tĆŖte de leurs mandements et de leurs lettres pastorales, les pauvres gens du pays avaient choisi, avec une sorte d'instinct affectueux, dans les noms et prĆ©noms de l'Ć©vĆŖque, celui qui leur prĆ©sentait un sens, et ils ne l'appelaient que monseigneur Bienvenu. Nous ferons comme eux, et nous le nommerons ainsi dans l'occasion. Du reste, cette appellation lui plaisait. --J'aime ce nom-lĆ , disait-il. Bienvenu corrige monseigneur. Nous ne prĆ©tendons pas que le portrait que nous faisons ici soit vraisemblable; nous nous bornons Ć  dire qu'il est ressemblant. Chapitre III ƀ bon Ć©vĆŖque dur Ć©vĆŖchĆ© M. l'Ć©vĆŖque, pour avoir converti son carrosse en aumĆ“nes, n'en faisait pas moins ses tournĆ©es. C'est un diocĆØse fatigant que celui de Digne. Il a fort peu de plaines, beaucoup de montagnes, presque pas de routes, on l'a vu tout Ć  l'heure; trente-deux cures, quarante et un vicariats et deux cent quatre-vingt-cinq succursales. Visiter tout cela, c'est une affaire. M. l'Ć©vĆŖque en venait Ć  bout. Il allait Ć  pied quand c'Ć©tait dans le voisinage, en carriole dans la plaine, en cacolet dans la montagne. Les deux vieilles femmes l'accompagnaient. Quand le trajet Ć©tait trop pĆ©nible pour elles, il allait seul. Un jour, il arriva Ć  Senez, qui est une ancienne ville Ć©piscopale, montĆ© sur un Ć¢ne. Sa bourse, fort Ć  sec dans ce moment, ne lui avait pas permis d'autre Ć©quipage. Le maire de la ville vint le recevoir Ć  la porte de l'Ć©vĆŖchĆ© et le regardait descendre de son Ć¢ne avec des yeux scandalisĆ©s. Quelques bourgeois riaient autour de lui. --Monsieur le maire, dit l'Ć©vĆŖque, et messieurs les bourgeois, je vois ce qui vous scandalise; vous trouvez que c'est bien de l'orgueil Ć  un pauvre prĆŖtre de monter une monture qui a Ć©tĆ© celle de JĆ©sus-Christ. Je l'ai fait par nĆ©cessitĆ©, je vous assure, non par vanitĆ©. Dans ses tournĆ©es, il Ć©tait indulgent et doux, et prĆŖchait moins qu'il ne causait. Il ne mettait aucune vertu sur un plateau inaccessible. Il n'allait jamais chercher bien loin ses raisonnements et ses modĆØles. Aux habitants d'un pays il citait l'exemple du pays voisin. Dans les cantons où l'on Ć©tait dur pour les nĆ©cessiteux, il disait: --Voyez les gens de BrianƧon. Ils ont donnĆ© aux indigents, aux veuves et aux orphelins le droit de faire faucher leurs prairies trois jours avant tous les autres. Ils leur rebĆ¢tissent gratuitement leurs maisons quand elles sont en ruines. Aussi est-ce un pays bĆ©ni de Dieu. Durant tout un siĆØcle de cent ans, il n'y a pas eu un meurtrier. Dans les villages Ć¢pres au gain et Ć  la moisson, il disait: --Voyez ceux d'Embrun. Si un pĆØre de famille, au temps de la rĆ©colte, a ses fils au service Ć  l'armĆ©e et ses filles en service Ć  la ville, et qu'il soit malade et empĆŖchĆ©, le curĆ© le recommande au prĆ“ne; et le dimanche, aprĆØs la messe, tous les gens du village, hommes, femmes, enfants, vont dans le champ du pauvre homme lui faire sa moisson, et lui rapportent paille et grain dans son grenier. Aux familles divisĆ©es par des questions d'argent et d'hĆ©ritage, il disait: --Voyez les montagnards de Devoluy, pays si sauvage qu'on n'y entend pas le rossignol une fois en cinquante ans. Eh bien, quand le pĆØre meurt dans une famille, les garƧons s'en vont chercher fortune, et laissent le bien aux filles, afin qu'elles puissent trouver des maris. Aux cantons qui ont le goĆ»t des procĆØs et où les fermiers se ruinent en papier timbrĆ©, il disait: --Voyez ces bons paysans de la vallĆ©e de Queyras. Ils sont lĆ  trois mille Ć¢mes. Mon Dieu! c'est comme une petite rĆ©publique. On n'y connaĆ®t ni le juge, ni l'huissier. Le maire fait tout. Il rĆ©partit l'impĆ“t, taxe chacun en conscience, juge les querelles gratis, partage les patrimoines sans honoraires, rend des sentences sans frais; et on lui obĆ©it, parce que c'est un homme juste parmi des hommes simples. Aux villages où il ne trouvait pas de maĆ®tre d'Ć©cole, il citait encore ceux de Queyras: --Savez-vous comment ils font? disait-il. Comme un petit pays de douze ou quinze feux ne peut pas toujours nourrir un magister, ils ont des maĆ®tres d'Ć©cole payĆ©s par toute la vallĆ©e qui parcourent les villages, passant huit jours dans celui-ci, dix dans celui-lĆ , et enseignant. Ces magisters vont aux foires, où je les ai vus. On les reconnaĆ®t Ć  des plumes Ć  Ć©crire qu'ils portent dans la ganse de leur chapeau. Ceux qui n'enseignent qu'Ć  lire ont une plume, ceux qui enseignent la lecture et le calcul ont deux plumes; ceux qui enseignent la lecture, le calcul et le latin ont trois plumes. Ceux-lĆ  sont de grands savants. Mais quelle honte d'ĆŖtre ignorants! Faites comme les gens de Queyras. Il parlait ainsi, gravement et paternellement, Ć  dĆ©faut d'exemples inventant des paraboles, allant droit au but, avec peu de phrases et beaucoup d'images, ce qui Ć©tait l'Ć©loquence mĆŖme de JĆ©sus-Christ, convaincu et persuadant. Chapitre IV Les oeuvres semblables aux paroles Sa conversation Ć©tait affable et gaie. Il se mettait Ć  la portĆ©e des deux vieilles femmes qui passaient leur vie prĆØs de lui; quand il riait, c'Ć©tait le rire d'un Ć©colier. Madame Magloire l'appelait volontiers _Votre Grandeur_. Un jour, il se leva de son fauteuil et alla Ć  sa bibliothĆØque chercher un livre. Ce livre Ć©tait sur un des rayons d'en haut. Comme l'Ć©vĆŖque Ć©tait d'assez petite taille, il ne put y atteindre. --Madame Magloire, dit-il, apportez-moi une chaise. Ma grandeur ne va pas jusqu'Ć  cette planche. Une de ses parentes Ć©loignĆ©es, madame la comtesse de LĆ“, laissait rarement Ć©chapper une occasion d'Ć©numĆ©rer en sa prĆ©sence ce qu'elle appelait Ā«les espĆ©rancesĀ» de ses trois fils. Elle avait plusieurs ascendants fort vieux et proches de la mort dont ses fils Ć©taient naturellement les hĆ©ritiers. Le plus jeune des trois avait Ć  recueillir d'une grand'tante cent bonnes mille livres de rentes; le deuxiĆØme Ć©tait substituĆ© au titre de duc de son oncle; l'aĆ®nĆ© devait succĆ©der Ć  la pairie de son aĆÆeul. L'Ć©vĆŖque Ć©coutait habituellement en silence ces innocents et pardonnables Ć©talages maternels. Une fois pourtant, il paraissait plus rĆŖveur que de coutume, tandis que madame de LĆ“ renouvelait le dĆ©tail de toutes ces successions et de toutes ces Ā«espĆ©rancesĀ». Elle s'interrompit avec quelque impatience: --Mon Dieu, mon cousin! mais Ć  quoi songez-vous donc? --Je songe, dit l'Ć©vĆŖque, Ć  quelque chose de singulier qui est, je crois, dans saint Augustin: Ā«Mettez votre espĆ©rance dans celui auquel on ne succĆØde point.Ā» Une autre fois, recevant une lettre de faire-part du dĆ©cĆØs d'un gentilhomme du pays, où s'Ć©talaient en une longue page, outre les dignitĆ©s du dĆ©funt, toutes les qualifications fĆ©odales et nobiliaires de tous ses parents: --Quel bon dos a la mort! s'Ć©cria-t-il. Quelle admirable charge de titres on lui fait allĆØgrement porter, et comme il faut que les hommes aient de l'esprit pour employer ainsi la tombe Ć  la vanitĆ©! Il avait dans l'occasion une raillerie douce qui contenait presque toujours un sens sĆ©rieux. Pendant un carĆŖme, un jeune vicaire vint Ć  Digne et prĆŖcha dans la cathĆ©drale. Il fut assez Ć©loquent. Le sujet de son sermon Ć©tait la charitĆ©. Il invita les riches Ć  donner aux indigents, afin d'Ć©viter l'enfer qu'il peignit le plus effroyable qu'il put et de gagner le paradis qu'il fit dĆ©sirable et charmant. Il y avait dans l'auditoire un riche marchand retirĆ©, un peu usurier, nommĆ© M. GĆ©borand, lequel avait gagnĆ© un demi-million Ć  fabriquer de gros draps, des serges, des cadis et des gasquets. De sa vie M. GĆ©borand n'avait fait l'aumĆ“ne Ć  un malheureux. ƀ partir de ce sermon, on remarqua qu'il donnait tous les dimanches un sou aux vieilles mendiantes du portail de la cathĆ©drale. Elles Ć©taient six Ć  se partager cela. Un jour, l'Ć©vĆŖque le vit faisant sa charitĆ© et dit Ć  sa soeur avec un sourire: --VoilĆ  monsieur GĆ©borand qui achĆØte pour un sou de paradis. Quand il s'agissait de charitĆ©, il ne se rebutait pas, mĆŖme devant un refus, et il trouvait alors des mots qui faisaient rĆ©flĆ©chir. Une fois, il quĆŖtait pour les pauvres dans un salon de la ville. Il y avait lĆ  le marquis de Champtercier, vieux, riche, avare, lequel trouvait moyen d'ĆŖtre tout ensemble ultra-royaliste et ultra-voltairien. Cette variĆ©tĆ© a existĆ©. L'Ć©vĆŖque, arrivĆ© Ć  lui, lui toucha le bras. --Monsieur le marquis, il faut que vous me donniez quelque chose. Le marquis se retourna et rĆ©pondit sĆØchement: --Monseigneur, j'ai mes pauvres. --Donnez-les-moi, dit l'Ć©vĆŖque. Un jour, dans la cathĆ©drale, il fit ce sermon. Ā«Mes trĆØs chers frĆØres, mes bons amis, il y a en France treize cent vingt mille maisons de paysans qui n'ont que trois ouvertures, dix-huit cent dix-sept mille qui ont deux ouvertures, la porte et une fenĆŖtre, et enfin trois cent quarante-six mille cabanes qui n'ont qu'une ouverture, la porte. Et cela, Ć  cause d'une chose qu'on appelle l'impĆ“t des portes et fenĆŖtres. Mettez-moi de pauvres familles, des vieilles femmes, des petits enfants, dans ces logis-lĆ , et voyez les fiĆØvres et les maladies. HĆ©las! Dieu donne l'air aux hommes, la loi le leur vend. Je n'accuse pas la loi, mais je bĆ©nis Dieu. Dans l'IsĆØre, dans le Var, dans les deux Alpes, les hautes et les basses, les paysans n'ont pas mĆŖme de brouettes, ils transportent les engrais Ć  dos d'hommes; ils n'ont pas de chandelles, et ils brĆ»lent des bĆ¢tons rĆ©sineux et des bouts de corde trempĆ©s dans la poix rĆ©sine. C'est comme cela dans tout le pays haut du DauphinĆ©. Ils font le pain pour six mois, ils le font cuire avec de la bouse de vache sĆ©chĆ©e. L'hiver, ils cassent ce pain Ć  coups de hache et ils le font tremper dans l'eau vingt-quatre heures pour pouvoir le manger.--Mes frĆØres, ayez pitiĆ©! voyez comme on souffre autour de vous.Ā» NĆ© provenƧal, il s'Ć©tait facilement familiarisĆ© avec tous les patois du midi. Il disait: Ā«_Eh bĆ©! moussu, sĆØs sagĆ©?_Ā» comme dans le bas Languedoc. Ā«_OntĆ© anaras passa?_Ā» comme dans les basses Alpes. Ā«_Puerte un bouen moutou embe un bouen froumage grase_Ā», comme dans le haut DauphinĆ©. Ceci plaisait au peuple, et n'avait pas peu contribuĆ© Ć  lui donner accĆØs prĆØs de tous les esprits. Il Ć©tait dans la chaumiĆØre et dans la montagne comme chez lui. Il savait dire les choses les plus grandes dans les idiomes les plus vulgaires. Parlant toutes les langues, il entrait dans toutes les Ć¢mes. Du reste, il Ć©tait le mĆŖme pour les gens du monde et pour les gens du peuple. Il ne condamnait rien hĆ¢tivement, et sans tenir compte des circonstances environnantes. Il disait: --Voyons le chemin par où la faute a passĆ©. Ɖtant, comme il se qualifiait lui-mĆŖme en souriant, un _ex-pĆ©cheur_, il n'avait aucun des escarpements du rigorisme, et il professait assez haut, et sans le froncement de sourcil des vertueux fĆ©roces, une doctrine qu'on pourrait rĆ©sumer Ć  peu prĆØs ainsi: Ā«L'homme a sur lui la chair qui est tout Ć  la fois son fardeau et sa tentation. Il la traĆ®ne et lui cĆØde. Ā«Il doit la surveiller, la contenir, la rĆ©primer, et ne lui obĆ©ir qu'Ć  la derniĆØre extrĆ©mitĆ©. Dans cette obĆ©issance-lĆ , il peut encore y avoir de la faute; mais la faute, ainsi faite, est vĆ©nielle. C'est une chute, mais une chute sur les genoux, qui peut s'achever en priĆØre. «Être un saint, c'est l'exception; ĆŖtre un juste, c'est la rĆØgle. Errez, dĆ©faillez, pĆ©chez, mais soyez des justes. Ā«Le moins de pĆ©chĆ© possible, c'est la loi de l'homme. Pas de pĆ©chĆ© du tout est le rĆŖve de l'ange. Tout ce qui est terrestre est soumis au pĆ©chĆ©. Le pĆ©chĆ© est une gravitation.Ā» Quand il voyait tout le monde crier bien fort et s'indigner bien vite: --Oh! oh! disait-il en souriant, il y a apparence que ceci est un gros crime que tout le monde commet. VoilĆ  les hypocrisies effarĆ©es qui se dĆ©pĆŖchent de protester et de se mettre Ć  couvert. Il Ć©tait indulgent pour les femmes et les pauvres sur qui pĆØse le poids de la sociĆ©tĆ© humaine. Il disait: --Les fautes des femmes, des enfants, des serviteurs, des faibles, des indigents et des ignorants sont la faute des maris, des pĆØres, des maĆ®tres, des forts, des riches et des savants. Il disait encore: --ƀ ceux qui ignorent, enseignez-leur le plus de choses que vous pourrez; la sociĆ©tĆ© est coupable de ne pas donner l'instruction gratis; elle rĆ©pond de la nuit qu'elle produit. Cette Ć¢me est pleine d'ombre, le pĆ©chĆ© s'y commet. Le coupable n'est pas celui qui y fait le pĆ©chĆ©, mais celui qui y a fait l'ombre. Comme on voit, il avait une maniĆØre Ć©trange et Ć  lui de juger les choses. Je soupƧonne qu'il avait pris cela dans l'Ć©vangile. Il entendit un jour conter dans un salon un procĆØs criminel qu'on instruisait et qu'on allait juger. Un misĆ©rable homme, par amour pour une femme et pour l'enfant qu'il avait d'elle, Ć  bout de ressources, avait fait de la fausse monnaie. La fausse monnaie Ć©tait encore punie de mort Ć  cette Ć©poque. La femme avait Ć©tĆ© arrĆŖtĆ©e Ć©mettant la premiĆØre piĆØce fausse fabriquĆ©e par l'homme. On la tenait, mais on n'avait de preuves que contre elle. Elle seule pouvait charger son amant et le perdre en avouant. Elle nia. On insista. Elle s'obstina Ć  nier. Sur ce, le procureur du roi avait eu une idĆ©e. Il avait supposĆ© une infidĆ©litĆ© de l'amant, et Ć©tait parvenu, avec des fragments de lettres savamment prĆ©sentĆ©s, Ć  persuader Ć  la malheureuse qu'elle avait une rivale et que cet homme la trompait. Alors, exaspĆ©rĆ©e de jalousie, elle avait dĆ©noncĆ© son amant, tout avouĆ©, tout prouvĆ©. L'homme Ć©tait perdu. Il allait ĆŖtre prochainement jugĆ© Ć  Aix avec sa complice. On racontait le fait, et chacun s'extasiait sur l'habiletĆ© du magistrat. En mettant la jalousie en jeu, il avait fait jaillir la vĆ©ritĆ© par la colĆØre, il avait fait sortir la justice de la vengeance. L'Ć©vĆŖque Ć©coutait tout cela en silence. Quand ce fut fini, il demanda: --Où jugera-t-on cet homme et cette femme? --ƀ la cour d'assises. Il reprit: --Et où jugera-t-on monsieur le procureur du roi? Il arriva Ć  Digne une aventure tragique. Un homme fut condamnĆ© Ć  mort pour meurtre. C'Ć©tait un malheureux pas tout Ć  fait lettrĆ©, pas tout Ć  fait ignorant, qui avait Ć©tĆ© bateleur dans les foires et Ć©crivain public. Le procĆØs occupa beaucoup la ville. La veille du jour fixĆ© pour l'exĆ©cution du condamnĆ©, l'aumĆ“nier de la prison tomba malade. Il fallait un prĆŖtre pour assister le patient Ć  ses derniers moments. On alla chercher le curĆ©. Il paraĆ®t qu'il refusa en disant: Cela ne me regarde pas. Je n'ai que faire de cette corvĆ©e et de ce saltimbanque; moi aussi, je suis malade; d'ailleurs ce n'est pas lĆ  ma place. On rapporta cette rĆ©ponse Ć  l'Ć©vĆŖque qui dit: --Monsieur le curĆ© a raison. Ce n'est pas sa place, c'est la mienne. Il alla sur-le-champ Ć  la prison, il descendit au cabanon du Ā«saltimbanqueĀ», il l'appela par son nom, lui prit la main et lui parla. Il passa toute la journĆ©e et toute la nuit prĆØs de lui, oubliant la nourriture et le sommeil, priant Dieu pour l'Ć¢me du condamnĆ© et priant le condamnĆ© pour la sienne propre. Il lui dit les meilleures vĆ©ritĆ©s qui sont les plus simples. Il fut pĆØre, frĆØre, ami; Ć©vĆŖque pour bĆ©nir seulement. Il lui enseigna tout, en le rassurant et en le consolant. Cet homme allait mourir dĆ©sespĆ©rĆ©. La mort Ć©tait pour lui comme un abĆ®me. Debout et frĆ©missant sur ce seuil lugubre, il reculait avec horreur. Il n'Ć©tait pas assez ignorant pour ĆŖtre absolument indiffĆ©rent. Sa condamnation, secousse profonde, avait en quelque sorte rompu ƧƠ et lĆ  autour de lui cette cloison qui nous sĆ©pare du mystĆØre des choses et que nous appelons la vie. Il regardait sans cesse au dehors de ce monde par ces brĆØches fatales, et ne voyait que des tĆ©nĆØbres. L'Ć©vĆŖque lui fit voir une clartĆ©. Le lendemain, quand on vint chercher le malheureux, l'Ć©vĆŖque Ć©tait lĆ . Il le suivit. Il se montra aux yeux de la foule en camail violet et avec sa croix Ć©piscopale au cou, cĆ“te Ć  cĆ“te avec ce misĆ©rable liĆ© de cordes. Il monta sur la charrette avec lui, il monta sur l'Ć©chafaud avec lui. Le patient, si morne et si accablĆ© la veille, Ć©tait rayonnant. Il sentait que son Ć¢me Ć©tait rĆ©conciliĆ©e et il espĆ©rait Dieu. L'Ć©vĆŖque l'embrassa, et, au moment où le couteau allait tomber, il lui dit: --Celui que l'homme tue, Dieu le ressuscite; celui que les frĆØres chassent retrouve le PĆØre. Priez, croyez, entrez dans la vie! le PĆØre est lĆ . Quand il redescendit de l'Ć©chafaud, il avait quelque chose dans son regard qui fit ranger le peuple. On ne savait ce qui Ć©tait le plus admirable de sa pĆ¢leur ou de sa sĆ©rĆ©nitĆ©. En rentrant Ć  cet humble logis qu'il appelait en souriant son palais, il dit Ć  sa soeur: --Je viens d'officier pontificalement. Comme les choses les plus sublimes sont souvent aussi les choses les moins comprises, il y eut dans la ville des gens qui dirent, en commentant cette conduite de l'Ć©vĆŖque: Ā«C'est de l'affectation.Ā» Ceci ne fut du reste qu'un propos de salons. Le peuple, qui n'entend pas malice aux actions saintes, fut attendri et admira. Quant Ć  l'Ć©vĆŖque, avoir vu la guillotine fut pour lui un choc, et il fut longtemps Ć  s'en remettre. L'Ć©chafaud, en effet, quand il est lĆ , dressĆ© et debout, a quelque chose qui hallucine. On peut avoir une certaine indiffĆ©rence sur la peine de mort, ne point se prononcer, dire oui et non, tant qu'on n'a pas vu de ses yeux une guillotine; mais si l'on en rencontre une, la secousse est violente, il faut se dĆ©cider et prendre parti pour ou contre. Les uns admirent, comme de Maistre; les autres exĆØcrent, comme Beccaria. La guillotine est la concrĆ©tion de la loi; elle se nomme _vindicte;_ elle n'est pas neutre, et ne vous permet pas de rester neutre. Qui l'aperƧoit frissonne du plus mystĆ©rieux des frissons. Toutes les questions sociales dressent autour de ce couperet leur point d'interrogation. L'Ć©chafaud est vision. L'Ć©chafaud n'est pas une charpente, l'Ć©chafaud n'est pas une machine, l'Ć©chafaud n'est pas une mĆ©canique inerte faite de bois, de fer et de cordes. Il semble que ce soit une sorte d'ĆŖtre qui a je ne sais quelle sombre initiative; on dirait que cette charpente voit, que cette machine entend, que cette mĆ©canique comprend, que ce bois, ce fer et ces cordes veulent. Dans la rĆŖverie affreuse où sa prĆ©sence jette l'Ć¢me, l'Ć©chafaud apparaĆ®t terrible et se mĆŖlant de ce qu'il fait. L'Ć©chafaud est le complice du bourreau; il dĆ©vore; il mange de la chair, il boit du sang. L'Ć©chafaud est une sorte de monstre fabriquĆ© par le juge et par le charpentier, un spectre qui semble vivre d'une espĆØce de vie Ć©pouvantable faite de toute la mort qu'il a donnĆ©e. Aussi l'impression fut-elle horrible et profonde; le lendemain de l'exĆ©cution et beaucoup de jours encore aprĆØs, l'Ć©vĆŖque parut accablĆ©. La sĆ©rĆ©nitĆ© presque violente du moment funĆØbre avait disparu: le fantĆ“me de la justice sociale l'obsĆ©dait. Lui qui d'ordinaire revenait de toutes ses actions avec une satisfaction si rayonnante, il semblait qu'il se fĆ®t un reproche. Par moments, il se parlait Ć  lui-mĆŖme, et bĆ©gayait Ć  demi-voix des monologues lugubres. En voici un que sa soeur entendit un soir et recueillit: --Je ne croyais pas que cela fĆ»t si monstrueux. C'est un tort de s'absorber dans la loi divine au point de ne plus s'apercevoir de la loi humaine. La mort n'appartient qu'Ć  Dieu. De quel droit les hommes touchent-ils Ć  cette chose inconnue? Avec le temps ces impressions s'attĆ©nuĆØrent, et probablement s'effacĆØrent. Cependant on remarqua que l'Ć©vĆŖque Ć©vitait dĆ©sormais de passer sur la place des exĆ©cutions. On pouvait appeler M. Myriel Ć  toute heure au chevet des malades et des mourants. Il n'ignorait pas que lĆ  Ć©tait son plus grand devoir et son plus grand travail. Les familles veuves ou orphelines n'avaient pas besoin de le demander, il arrivait de lui-mĆŖme. Il savait s'asseoir et se taire de longues heures auprĆØs de l'homme qui avait perdu la femme qu'il aimait, de la mĆØre qui avait perdu son enfant. Comme il savait le moment de se taire, il savait aussi le moment de parler. Ɣ admirable consolateur! il ne cherchait pas Ć  effacer la douleur par l'oubli, mais Ć  l'agrandir et Ć  la dignifier par l'espĆ©rance. Il disait: --Prenez garde Ć  la faƧon dont vous vous tournez vers les morts. Ne songez pas Ć  ce qui pourrit. Regardez fixement. Vous apercevrez la lueur vivante de votre mort bien-aimĆ© au fond du ciel. Il savait que la croyance est saine. Il cherchait Ć  conseiller et Ć  calmer l'homme dĆ©sespĆ©rĆ© en lui indiquant du doigt l'homme rĆ©signĆ©, et Ć  transformer la douleur qui regarde une fosse en lui montrant la douleur qui regarde une Ć©toile. Chapitre V Que monseigneur Bienvenu faisait durer trop longtemps ses soutanes La vie intĆ©rieure de M. Myriel Ć©tait pleine des mĆŖmes pensĆ©es que sa vie publique. Pour qui eĆ»t pu la voir de prĆØs, c'eĆ»t Ć©tĆ© un spectacle grave et charmant que cette pauvretĆ© volontaire dans laquelle vivait M. l'Ć©vĆŖque de Digne. Comme tous les vieillards et comme la plupart des penseurs, il dormait peu. Ce court sommeil Ć©tait profond. Le matin il se recueillait pendant une heure, puis il disait sa messe, soit Ć  la cathĆ©drale, soit dans son oratoire. Sa messe dite, il dĆ©jeunait d'un pain de seigle trempĆ© dans le lait de ses vaches. Puis il travaillait. Un Ć©vĆŖque est un homme fort occupĆ©; il faut qu'il reƧoive tous les jours le secrĆ©taire de l'Ć©vĆŖchĆ©, qui est d'ordinaire un chanoine, presque tous les jours ses grands vicaires. Il a des congrĆ©gations Ć  contrĆ“ler, des privilĆØges Ć  donner, toute une librairie ecclĆ©siastique Ć  examiner, paroissiens, catĆ©chismes diocĆ©sains, livres d'heures, etc., des mandements Ć  Ć©crire, des prĆ©dications Ć  autoriser, des curĆ©s et des maires Ć  mettre d'accord, une correspondance clĆ©ricale, une correspondance administrative, d'un cĆ“tĆ© l'Ć©tat, de l'autre le Saint-SiĆØge, mille affaires. Le temps que lui laissaient ces mille affaires, ses offices et son brĆ©viaire, il le donnait d'abord aux nĆ©cessiteux, aux malades et aux affligĆ©s; le temps que les affligĆ©s, les malades et les nĆ©cessiteux lui laissaient, il le donnait au travail. TantĆ“t il bĆŖchait la terre dans son jardin, tantĆ“t il lisait et Ć©crivait. Il n'avait qu'un mot pour ces deux sortes de travail; il appelait cela _jardiner_. --L'esprit est un jardin, disait-il. ƀ midi, il dĆ®nait. Le dĆ®ner ressemblait au dĆ©jeuner. Vers deux heures, quand le temps Ć©tait beau, il sortait et se promenait Ć  pied dans la campagne ou dans la ville, entrant souvent dans les masures. On le voyait cheminer seul, tout Ć  ses pensĆ©es, l'oeil baissĆ©, appuyĆ© sur sa longue canne, vĆŖtu de sa douillette violette ouatĆ©e et bien chaude, chaussĆ© de bas violets dans de gros souliers, et coiffĆ© de son chapeau plat qui laissait passer par ses trois cornes trois glands d'or Ć  graine d'Ć©pinards. C'Ć©tait une fĆŖte partout où il paraissait. On eĆ»t dit que son passage avait quelque chose de rĆ©chauffant et de lumineux. Les enfants et les vieillards venaient sur le seuil des portes pour l'Ć©vĆŖque comme pour le soleil. Il bĆ©nissait et on le bĆ©nissait. On montrait sa maison Ć  quiconque avait besoin de quelque chose. ƇƠ et lĆ , il s'arrĆŖtait, parlait aux petits garƧons et aux petites filles et souriait aux mĆØres. Il visitait les pauvres tant qu'il avait de l'argent; quand il n'en avait plus, il visitait les riches. Comme il faisait durer ses soutanes beaucoup de temps, et qu'il ne voulait pas qu'on s'en aperƧƻt, il ne sortait jamais dans la ville autrement qu'avec sa douillette violette. Cela le gĆŖnait un peu en Ć©tĆ©. Le soir Ć  huit heures et demie il soupait avec sa soeur, madame Magloire debout derriĆØre eux et les servant Ć  table. Rien de plus frugal que ce repas. Si pourtant l'Ć©vĆŖque avait un de ses curĆ©s Ć  souper, madame Magloire en profitait pour servir Ć  Monseigneur quelque excellent poisson des lacs ou quelque fin gibier de la montagne. Tout curĆ© Ć©tait un prĆ©texte Ć  bon repas; l'Ć©vĆŖque se laissait faire. Hors de lĆ , son ordinaire ne se composait guĆØre que de lĆ©gumes cuits dans l'eau et de soupe Ć  l'huile. Aussi disait-on dans la ville: --Quand l'Ć©vĆŖque fait pas chĆØre de curĆ©, il fait chĆØre de trappiste. AprĆØs son souper, il causait pendant une demi-heure avec mademoiselle Baptistine et madame Magloire; puis il rentrait dans sa chambre et se remettait Ć  Ć©crire, tantĆ“t sur des feuilles volantes, tantĆ“t sur la marge de quelque in-folio. Il Ć©tait lettrĆ© et quelque peu savant. Il a laissĆ© cinq ou six manuscrits assez curieux; entre autres une dissertation sur le verset de la GenĆØse: _Au commencement l'esprit de Dieu flottait sur les eaux_. Il confronte avec ce verset trois textes: la version arabe qui dit: _Les vents de Dieu soufflaient;_ Flavius JosĆØphe qui dit: _Un vent d'en haut se prĆ©cipitait sur la terre_, et enfin la paraphrase chaldaĆÆque d'Onkelos qui porte: _Un vent venant de Dieu soufflait sur la face des eaux_. Dans une autre dissertation, il examine les oeuvres thĆ©ologiques de Hugo, Ć©vĆŖque de PtolĆ©maĆÆs, arriĆØre-grand-oncle de celui qui Ć©crit ce livre, et il Ć©tablit qu'il faut attribuer Ć  cet Ć©vĆŖque les divers opuscules publiĆ©s, au siĆØcle dernier, sous le pseudonyme de Barleycourt. Parfois au milieu d'une lecture, quel que fĆ»t le livre qu'il eĆ»t entre les mains, il tombait tout Ć  coup dans une mĆ©ditation profonde, d'où il ne sortait que pour Ć©crire quelques lignes sur les pages mĆŖmes du volume. Ces lignes souvent n'ont aucun rapport avec le livre qui les contient. Nous avons sous les yeux une note Ć©crite par lui sur une des marges d'un in-quarto intitulĆ©: _Correspondance du lord Germain avec les gĆ©nĆ©raux Clinton, Cornwallis et les amiraux de la station de l'AmĆ©rique. ƀ Versailles, chez PoinƧot, libraire, et Ć  Paris, chez Pissot, libraire, quai des Augustins_. Voici cette note: «Ô vous qui ĆŖtes! Ā«L'EcclĆ©siaste vous nomme Toute-Puissance, les MacchabĆ©es vous nomment CrĆ©ateur, l'ƉpĆ®tre aux ƉphĆ©siens vous nomme LibertĆ©, Baruch vous nomme ImmensitĆ©, les Psaumes vous nomment Sagesse et VĆ©ritĆ©, Jean vous nomme LumiĆØre, les Rois vous nomment Seigneur, l'Exode vous appelle Providence, le LĆ©vitique SaintetĆ©, Esdras Justice, la crĆ©ation vous nomme Dieu, l'homme vous nomme PĆØre; mais Salomon vous nomme MisĆ©ricorde, et c'est lĆ  le plus beau de tous vos noms.Ā» Vers neuf heures du soir, les deux femmes se retiraient et montaient Ć  leurs chambres au premier, le laissant jusqu'au matin seul au rez-de-chaussĆ©e. Ici il est nĆ©cessaire que nous donnions une idĆ©e exacte du logis de M. l'Ć©vĆŖque de Digne. Chapitre VI Par qui il faisait garder sa maison La maison qu'il habitait se composait, nous l'avons dit, d'un rez-de-chaussĆ©e et d'un seul Ć©tage: trois piĆØces au rez-de-chaussĆ©e, trois chambres au premier, au-dessus un grenier. DerriĆØre la maison, un jardin d'un quart d'arpent. Les deux femmes occupaient le premier. L'Ć©vĆŖque logeait en bas. La premiĆØre piĆØce, qui s'ouvrait sur la rue, lui servait de salle Ć  manger, la deuxiĆØme de chambre Ć  coucher, et la troisiĆØme d'oratoire. On ne pouvait sortir de cet oratoire sans passer par la chambre Ć  coucher, et sortir de la chambre Ć  coucher sans passer par la salle Ć  manger. Dans l'oratoire, au fond, il y avait une alcĆ“ve fermĆ©e, avec un lit pour les cas d'hospitalitĆ©. M. l'Ć©vĆŖque offrait ce lit aux curĆ©s de campagne que des affaires ou les besoins de leur paroisse amenaient Ć  Digne. La pharmacie de l'hĆ“pital, petit bĆ¢timent ajoutĆ© Ć  la maison et pris sur le jardin, avait Ć©tĆ© transformĆ©e en cuisine et en cellier. Il y avait en outre dans le jardin une Ć©table qui Ć©tait l'ancienne cuisine de l'hospice et où l'Ć©vĆŖque entretenait deux vaches. Quelle que fĆ»t la quantitĆ© de lait qu'elles lui donnassent, il en envoyait invariablement tous les matins la moitiĆ© aux malades de l'hĆ“pital.--Je paye ma dĆ®me, disait-il. Sa chambre Ć©tait assez grande et assez difficile Ć  chauffer dans la mauvaise saison. Comme le bois est trĆØs cher Ć  Digne, il avait imaginĆ© de faire faire dans l'Ć©table Ć  vaches un compartiment fermĆ© d'une cloison en planches. C'Ć©tait lĆ  qu'il passait ses soirĆ©es dans les grands froids. Il appelait cela son _salon d'hiver_. Il n'y avait dans ce salon d'hiver, comme dans la salle Ć  manger, d'autres meubles qu'une table de bois blanc, carrĆ©e, et quatre chaises de paille. La salle Ć  manger Ć©tait ornĆ©e en outre d'un vieux buffet peint en rose Ć  la dĆ©trempe. Du buffet pareil, convenablement habillĆ© de napperons blancs et de fausses dentelles, l'Ć©vĆŖque avait fait l'autel qui dĆ©corait son oratoire. Ses pĆ©nitentes riches et les saintes femmes de Digne s'Ć©taient souvent cotisĆ©es pour faire les frais d'un bel autel neuf Ć  l'oratoire de monseigneur; il avait chaque fois pris l'argent et l'avait donnĆ© aux pauvres. --Le plus beau des autels, disait-il, c'est l'Ć¢me d'un malheureux consolĆ© qui remercie Dieu. Il avait dans son oratoire deux chaises prie-Dieu en paille, et un fauteuil Ć  bras Ć©galement en paille dans sa chambre Ć  coucher. Quand par hasard il recevait sept ou huit personnes Ć  la fois, le prĆ©fet, ou le gĆ©nĆ©ral, ou l'Ć©tat-major du rĆ©giment en garnison, ou quelques Ć©lĆØves du petit sĆ©minaire, on Ć©tait obligĆ© d'aller chercher dans l'Ć©table les chaises du salon d'hiver, dans l'oratoire les prie-Dieu, et le fauteuil dans la chambre Ć  coucher; de cette faƧon, on pouvait rĆ©unir jusqu'Ć  onze siĆØges pour les visiteurs. ƀ chaque nouvelle visite on dĆ©meublait une piĆØce. Il arrivait parfois qu'on Ć©tait douze; alors l'Ć©vĆŖque dissimulait l'embarras de la situation en se tenant debout devant la cheminĆ©e si c'Ć©tait l'hiver, ou en proposant un tour dans le jardin si c'Ć©tait l'Ć©tĆ©. Il y avait bien encore dans l'alcĆ“ve fermĆ©e une chaise, mais elle Ć©tait Ć  demi dĆ©paillĆ©e et ne portait que sur trois pieds, ce qui faisait qu'elle ne pouvait servir qu'appuyĆ©e contre le mur. Mademoiselle Baptistine avait bien aussi dans sa chambre une trĆØs grande bergĆØre en bois jadis dorĆ© et revĆŖtue de pĆ©kin Ć  fleurs, mais on avait Ć©tĆ© obligĆ© de monter cette bergĆØre au premier par la fenĆŖtre, l'escalier Ć©tant trop Ć©troit; elle ne pouvait donc pas compter parmi les en-cas du mobilier. L'ambition de mademoiselle Baptistine eĆ»t Ć©tĆ© de pouvoir acheter un meuble de salon en velours d'Utrecht jaune Ć  rosaces et en acajou Ć  cou de cygne, avec canapĆ©. Mais cela eĆ»t coĆ»tĆ© au moins cinq cents francs, et, ayant vu qu'elle n'avait rĆ©ussi Ć  Ć©conomiser pour cet objet que quarante-deux francs dix sous en cinq ans, elle avait fini par y renoncer. D'ailleurs qui est-ce qui atteint son idĆ©al? Rien de plus simple Ć  se figurer que la chambre Ć  coucher de l'Ć©vĆŖque. Une porte-fenĆŖtre donnant sur le jardin, vis-Ć -vis le lit; un lit d'hĆ“pital, en fer avec baldaquin de serge verte; dans l'ombre du lit, derriĆØre un rideau, les ustensiles de toilette trahissant encore les anciennes habitudes Ć©lĆ©gantes de l'homme du monde; deux portes, l'une prĆØs de la cheminĆ©e, donnant dans l'oratoire; l'autre, prĆØs de la bibliothĆØque, donnant dans la salle Ć  manger; la bibliothĆØque, grande armoire vitrĆ©e pleine de livres; la cheminĆ©e, de bois peint en marbre, habituellement sans feu; dans la cheminĆ©e, une paire de chenets en fer ornĆ©s de deux vases Ć  guirlandes et cannelures jadis argentĆ©s Ć  l'argent hachĆ©, ce qui Ć©tait un genre de luxe Ć©piscopal; au-dessus, Ć  l'endroit où d'ordinaire on met la glace, un crucifix de cuivre dĆ©sargentĆ© fixĆ© sur un velours noir rĆ¢pĆ© dans un cadre de bois dĆ©dorĆ©. PrĆØs de la porte-fenĆŖtre, une grande table avec un encrier, chargĆ©e de papiers confus et de gros volumes. Devant la table, le fauteuil de paille. Devant le lit, un prie-Dieu, empruntĆ© Ć  l'oratoire. Deux portraits dans des cadres ovales Ć©taient accrochĆ©s au mur des deux cĆ“tĆ©s du lit. De petites inscriptions dorĆ©es sur le fond neutre de la toile Ć  cĆ“tĆ© des figures indiquaient que les portraits reprĆ©sentaient, l'un, l'abbĆ© de Chaliot, Ć©vĆŖque de Saint-Claude, l'autre, l'abbĆ© Tourteau, vicaire gĆ©nĆ©ral d'Agde, abbĆ© de Grand-Champ, ordre de CĆ®teaux, diocĆØse de Chartres. L'Ć©vĆŖque, en succĆ©dant dans cette chambre aux malades de l'hĆ“pital, y avait trouvĆ© ces portraits et les y avait laissĆ©s. C'Ć©taient des prĆŖtres, probablement des donateurs: deux motifs pour qu'il les respectĆ¢t. Tout ce qu'il savait de ces deux personnages, c'est qu'ils avaient Ć©tĆ© nommĆ©s par le roi, l'un Ć  son Ć©vĆŖchĆ©, l'autre Ć  son bĆ©nĆ©fice, le mĆŖme jour, le 27 avril 1785. Madame Magloire ayant dĆ©crochĆ© les tableaux pour en secouer la poussiĆØre, l'Ć©vĆŖque avait trouvĆ© cette particularitĆ© Ć©crite d'une encre blanchĆ¢tre sur un petit carrĆ© de papier jauni par le temps, collĆ© avec quatre pains Ć  cacheter derriĆØre le portrait de l'abbĆ© de Grand-Champ. Il avait Ć  sa fenĆŖtre un antique rideau de grosse Ć©toffe de laine qui finit par devenir tellement vieux que, pour Ć©viter la dĆ©pense d'un neuf, madame Magloire fut obligĆ©e de faire une grande couture au beau milieu. Cette couture dessinait une croix. L'Ć©vĆŖque le faisait souvent remarquer. --Comme cela fait bien! disait-il. Toutes les chambres de la maison, au rez-de-chaussĆ©e ainsi qu'au premier, sans exception, Ć©taient blanchies au lait de chaux, ce qui est une mode de caserne et d'hĆ“pital. Cependant, dans les derniĆØres annĆ©es, madame Magloire retrouva, comme on le verra plus loin, sous le papier badigeonnĆ©, des peintures qui ornaient l'appartement de mademoiselle Baptistine. Avant d'ĆŖtre l'hĆ“pital, cette maison avait Ć©tĆ© le parloir aux bourgeois. De lĆ  cette dĆ©coration. Les chambres Ć©taient pavĆ©es de briques rouges qu'on lavait toutes les semaines, avec des nattes de paille tressĆ©e devant tous les lits. Du reste, ce logis, tenu par deux femmes, Ć©tait du haut en bas d'une propretĆ© exquise. C'Ć©tait le seul luxe que l'Ć©vĆŖque permit. Il disait: --Cela ne prend rien aux pauvres. Il faut convenir cependant qu'il lui restait de ce qu'il avait possĆ©dĆ© jadis six couverts d'argent et une grande cuiller Ć  soupe que madame Magloire regardait tous les jours avec bonheur reluire splendidement sur la grosse nappe de toile blanche. Et comme nous peignons ici l'Ć©vĆŖque de Digne tel qu'il Ć©tait, nous devons ajouter qu'il lui Ć©tait arrivĆ© plus d'une fois de dire: --Je renoncerais difficilement Ć  manger dans de l'argenterie. Il faut ajouter Ć  cette argenterie deux gros flambeaux d'argent massif qui lui venaient de l'hĆ©ritage d'une grand'tante. Ces flambeaux portaient deux bougies de cire et figuraient habituellement sur la cheminĆ©e de l'Ć©vĆŖque. Quand il avait quelqu'un Ć  dĆ®ner, madame Magloire allumait les deux bougies et mettait les deux flambeaux sur la table. Il y avait dans la chambre mĆŖme de l'Ć©vĆŖque, Ć  la tĆŖte de son lit, un petit placard dans lequel madame Magloire serrait chaque soir les six couverts d'argent et la grande cuiller. Il faut dire qu'on n'en Ć“tait jamais la clef. Le jardin, un peu gĆ¢tĆ© par les constructions assez laides dont nous avons parlĆ©, se composait de quatre allĆ©es en croix rayonnant autour d'un puisard; une autre allĆ©e faisait tout le tour du jardin et cheminait le long du mur blanc dont il Ć©tait enclos. Ces allĆ©es laissaient entre elles quatre carrĆ©s bordĆ©s de buis. Dans trois, madame Magloire cultivait des lĆ©gumes; dans le quatriĆØme, l'Ć©vĆŖque avait mis des fleurs. Il y avait ƧƠ et lĆ  quelques arbres fruitiers. Une fois madame Magloire lui avait dit avec une sorte de malice douce: --Monseigneur, vous qui tirez parti de tout, voilĆ  pourtant un carrĆ© inutile. Il vaudrait mieux avoir lĆ  des salades que des bouquets. --Madame Magloire, rĆ©pondit l'Ć©vĆŖque, vous vous trompez. Le beau est aussi utile que l'utile. Il ajouta aprĆØs un silence: --Plus peut-ĆŖtre. Ce carrĆ©, composĆ© de trois ou quatre plates-bandes, occupait M. l'Ć©vĆŖque presque autant que ses livres. Il y passait volontiers une heure ou deux, coupant, sarclant, et piquant ƧƠ et lĆ  des trous en terre où il mettait des graines. Il n'Ć©tait pas aussi hostile aux insectes qu'un jardinier l'eĆ»t voulu. Du reste, aucune prĆ©tention Ć  la botanique; il ignorait les groupes et le solidisme; il ne cherchait pas le moins du monde Ć  dĆ©cider entre Tournefort et la mĆ©thode naturelle; il ne prenait parti ni pour les utricules contre les cotylĆ©dons, ni pour Jussieu contre LinnĆ©. Il n'Ć©tudiait pas les plantes; il aimait les fleurs. Il respectait beaucoup les savants, il respectait encore plus les ignorants, et, sans jamais manquer Ć  ces deux respects, il arrosait ses plates-bandes chaque soir d'Ć©tĆ© avec un arrosoir de fer-blanc peint en vert. La maison n'avait pas une porte qui fermĆ¢t Ć  clef. La porte de la salle Ć  manger qui, nous l'avons dit, donnait de plain-pied sur la place de la cathĆ©drale, Ć©tait jadis armĆ©e de serrures et de verrous comme une porte de prison. L'Ć©vĆŖque avait fait Ć“ter toutes ces ferrures, et cette porte, la nuit comme le jour, n'Ć©tait fermĆ©e qu'au loquet. Le premier passant venu, Ć  quelque heure que ce fĆ»t, n'avait qu'Ć  la pousser. Dans les commencements, les deux femmes avaient Ć©tĆ© fort tourmentĆ©es de cette porte jamais close; mais M. de Digne leur avait dit: --Faites mettre des verrous Ć  vos chambres, si cela vous plaĆ®t. Elles avaient fini par partager sa confiance ou du moins par faire comme si elles la partageaient. Madame Magloire seule avait de temps en temps des frayeurs. Pour ce qui est de l'Ć©vĆŖque, on peut trouver sa pensĆ©e expliquĆ©e ou du moins indiquĆ©e dans ces trois lignes Ć©crites par lui sur la marge d'une bible: Ā«Voici la nuance: la porte du mĆ©decin ne doit jamais ĆŖtre fermĆ©e; la porte du prĆŖtre doit toujours ĆŖtre ouverte.Ā» Sur un autre livre, intitulĆ© _Philosophie de la science mĆ©dicale_, il avait Ć©crit cette autre note: Ā«Est-ce que je ne suis pas mĆ©decin comme eux? Moi aussi j'ai mes malades; d'abord j'ai les leurs, qu'ils appellent les malades; et puis j'ai les miens, que j'appelle les malheureux.Ā» Ailleurs encore il avait Ć©crit: Ā«Ne demandez pas son nom Ć  qui vous demande un gĆ®te. C'est surtout celui-lĆ  que son nom embarrasse qui a besoin d'asile.Ā» Il advint qu'un digne curĆ©, je ne sais plus si c'Ć©tait le curĆ© de Couloubroux ou le curĆ© de Pompierry, s'avisa de lui demander un jour, probablement Ć  l'instigation de madame Magloire, si Monseigneur Ć©tait bien sĆ»r de ne pas commettre jusqu'Ć  un certain point une imprudence en laissant jour et nuit sa porte ouverte Ć  la disposition de qui voulait entrer, et s'il ne craignait pas enfin qu'il n'arrivĆ¢t quelque malheur dans une maison si peu gardĆ©e. L'Ć©vĆŖque lui toucha l'Ć©paule avec une gravitĆ© douce et lui dit:--_Nisi Dominus custodierit domum, in vanum vigilant qui custodiunt eam_. Puis il parla d'autre chose. Il disait assez volontiers: --Il y a la bravoure du prĆŖtre comme il y a la bravoure du colonel de dragons. Seulement, ajoutait-il, la nĆ“tre doit ĆŖtre tranquille. Chapitre VII Cravatte Ici se place naturellement un fait que nous ne devons pas omettre, car il est de ceux qui font le mieux voir quel homme c'Ć©tait que M. l'Ć©vĆŖque de Digne. AprĆØs la destruction de la bande de Gaspard BĆØs qui avait infestĆ© les gorges d'Ollioules, un de ses lieutenants, Cravatte, se rĆ©fugia dans la montagne. Il se cacha quelque temps avec ses bandits, reste de la troupe de Gaspard BĆØs, dans le comtĆ© de Nice, puis gagna le PiĆ©mont, et tout Ć  coup reparut en France, du cĆ“tĆ© de Barcelonnette. On le vit Ć  Jauziers d'abord, puis aux Tuiles. Il se cacha dans les cavernes du Joug-de-l'Aigle, et de lĆ  il descendait vers les hameaux et les villages par les ravins de l'Ubaye et de l'Ubayette. Il osa mĆŖme pousser jusqu'Ć  Embrun, pĆ©nĆ©tra une nuit dans la cathĆ©drale et dĆ©valisa la sacristie. Ses brigandages dĆ©solaient le pays. On mit la gendarmerie Ć  ses trousses, mais en vain. Il Ć©chappait toujours; quelquefois il rĆ©sistait de vive force. C'Ć©tait un hardi misĆ©rable. Au milieu de toute cette terreur, l'Ć©vĆŖque arriva. Il faisait sa tournĆ©e. Au Chastelar, le maire vint le trouver et l'engagea Ć  rebrousser chemin. Cravatte tenait la montagne jusqu'Ć  l'Arche, et au-delĆ . Il y avait danger, mĆŖme avec une escorte. C'Ć©tait exposer inutilement trois ou quatre malheureux gendarmes. --Aussi, dit l'Ć©vĆŖque, je compte aller sans escorte. --Y pensez-vous, monseigneur? s'Ć©cria le maire. --J'y pense tellement, que je refuse absolument les gendarmes et que je vais partir dans une heure. --Partir? --Partir. --Seul? --Seul. --Monseigneur! vous ne ferez pas cela. --Il y a lĆ , dans la montagne, reprit l'Ć©vĆŖque, une humble petite commune grande comme Ƨa, que je n'ai pas vue depuis trois ans. Ce sont mes bons amis. De doux et honnĆŖtes bergers. Ils possĆØdent une chĆØvre sur trente qu'ils gardent. Ils font de fort jolis cordons de laine de diverses couleurs, et ils jouent des airs de montagne sur de petites flĆ»tes Ć  six trous. Ils ont besoin qu'on leur parle de temps en temps du bon Dieu. Que diraient-ils d'un Ć©vĆŖque qui a peur? Que diraient-ils si je n'y allais pas? --Mais, monseigneur, les brigands! Si vous rencontrez les brigands! --Tiens, dit l'Ć©vĆŖque, j'y songe. Vous avez raison. Je puis les rencontrer. Eux aussi doivent avoir besoin qu'on leur parle du bon Dieu. --Monseigneur! mais c'est une bande! c'est un troupeau de loups! --Monsieur le maire, c'est peut-ĆŖtre prĆ©cisĆ©ment de ce troupeau que JĆ©sus me fait le pasteur. Qui sait les voies de la Providence? --Monseigneur, ils vous dĆ©valiseront. --Je n'ai rien. --Ils vous tueront. --Un vieux bonhomme de prĆŖtre qui passe en marmottant ses momeries? Bah! Ć  quoi bon? --Ah! mon Dieu! si vous alliez les rencontrer! --Je leur demanderai l'aumĆ“ne pour mes pauvres. --Monseigneur, n'y allez pas, au nom du ciel! vous exposez votre vie. --Monsieur le maire, dit l'Ć©vĆŖque, n'est-ce dĆ©cidĆ©ment que cela? Je ne suis pas en ce monde pour garder ma vie, mais pour garder les Ć¢mes. Il fallut le laisser faire. Il partit, accompagnĆ© seulement d'un enfant qui s'offrit Ć  lui servir de guide. Son obstination fit bruit dans le pays, et effraya trĆØs fort. Il ne voulut emmener ni sa soeur ni madame Magloire. Il traversa la montagne Ć  mulet, ne rencontra personne, et arriva sain et sauf chez ses Ā«bons amisĀ» les bergers. Il y resta quinze jours, prĆŖchant, administrant, enseignant, moralisant. Lorsqu'il fut proche de son dĆ©part, il rĆ©solut de chanter pontificalement un _Te Deum_. Il en parla au curĆ©. Mais comment faire? pas d'ornements Ć©piscopaux. On ne pouvait mettre Ć  sa disposition qu'une chĆ©tive sacristie de village avec quelques vieilles chasubles de damas usĆ© ornĆ©es de galons faux. --Bah! dit l'Ć©vĆŖque. Monsieur le curĆ©, annonƧons toujours au prĆ“ne notre _Te Deum_. Cela s'arrangera. On chercha dans les Ć©glises d'alentour. Toutes les magnificences de ces humbles paroisses rĆ©unies n'auraient pas suffi Ć  vĆŖtir convenablement un chantre de cathĆ©drale. Comme on Ć©tait dans cet embarras, une grande caisse fut apportĆ©e et dĆ©posĆ©e au presbytĆØre pour M. l'Ć©vĆŖque par deux cavaliers inconnus qui repartirent sur-le-champ. On ouvrit la caisse; elle contenait une chape de drap d'or, une mitre ornĆ©e de diamants, une croix archiĆ©piscopale, une crosse magnifique, tous les vĆŖtements pontificaux volĆ©s un mois auparavant au trĆ©sor de Notre-Dame d'Embrun. Dans la caisse, il y avait un papier sur lequel Ć©taient Ć©crits ces mots: _Cravatte Ć  monseigneur Bienvenu_. --Quand je disais que cela s'arrangerait! dit l'Ć©vĆŖque. Puis il ajouta en souriant: --ƀ qui se contente d'un surplis de curĆ©, Dieu envoie une chape d'archevĆŖque. --Monseigneur, murmura le curĆ© en hochant la tĆŖte avec un sourire, Dieu, ou le diable. L'Ć©vĆŖque regarda fixement le curĆ© et reprit avec autoritĆ©: --Dieu! Quand il revint au Chastelar, et tout le long de la route, on venait le regarder par curiositĆ©. Il retrouva au presbytĆØre du Chastelar mademoiselle Baptistine et madame Magloire qui l'attendaient, et il dit Ć  sa soeur: --Eh bien, avais-je raison? Le pauvre prĆŖtre est allĆ© chez ces pauvres montagnards les mains vides, il en revient les mains pleines. J'Ć©tais parti n'emportant que ma confiance en Dieu; je rapporte le trĆ©sor d'une cathĆ©drale. Le soir, avant de se coucher, il dit encore: --Ne craignons jamais les voleurs ni les meurtriers. Ce sont lĆ  les dangers du dehors, les petits dangers. Craignons-nous nous-mĆŖmes. Les prĆ©jugĆ©s, voilĆ  les voleurs; les vices, voilĆ  les meurtriers. Les grands dangers sont au dedans de nous. Qu'importe ce qui menace notre tĆŖte ou notre bourse! Ne songeons qu'Ć  ce qui menace notre Ć¢me. Puis se tournant vers sa soeur: --Ma soeur, de la part du prĆŖtre jamais de prĆ©caution contre le prochain. Ce que le prochain fait, Dieu le permet. Bornons-nous Ć  prier Dieu quand nous croyons qu'un danger arrive sur nous. Prions-le, non pour nous, mais pour que notre frĆØre ne tombe pas en faute Ć  notre occasion. Du reste, les Ć©vĆ©nements Ć©taient rares dans son existence. Nous racontons ceux que nous savons; mais d'ordinaire il passait sa vie Ć  faire toujours les mĆŖmes choses aux mĆŖmes moments. Un mois de son annĆ©e ressemblait Ć  une heure de sa journĆ©e. Quant Ć  ce que devint Ā«le trĆ©sorĀ» de la cathĆ©drale d'Embrun, on nous embarrasserait de nous interroger lĆ -dessus. C'Ć©taient lĆ  de bien belles choses, et bien tentantes, et bien bonnes Ć  voler au profit des malheureux. VolĆ©es, elles l'Ć©taient dĆ©jĆ  d'ailleurs. La moitiĆ© de l'aventure Ć©tait accomplie; il ne restait plus qu'Ć  changer la direction du vol, et qu'Ć  lui faire faire un petit bout de chemin du cĆ“tĆ© des pauvres. Nous n'affirmons rien du reste Ć  ce sujet. Seulement on a trouvĆ© dans les papiers de l'Ć©vĆŖque une note assez obscure qui se rapporte peut-ĆŖtre Ć  cette affaire, et qui est ainsi conƧue: _La question est de savoir si cela doit faire retour Ć  la cathĆ©drale ou Ć  l'hĆ“pital_. Chapitre VIII Philosophie aprĆØs boire Le sĆ©nateur dont il a Ć©tĆ© parlĆ© plus haut Ć©tait un homme entendu qui avait fait son chemin avec une rectitude inattentive Ć  toutes ces rencontres qui font obstacle et qu'on nomme conscience, foi jurĆ©e, justice, devoir; il avait marchĆ© droit Ć  son but et sans broncher une seule fois dans la ligne de son avancement et de son intĆ©rĆŖt. C'Ć©tait un ancien procureur, attendri par le succĆØs, pas mĆ©chant homme du tout, rendant tous les petits services qu'il pouvait Ć  ses fils, Ć  ses gendres, Ć  ses parents, mĆŖme Ć  des amis; ayant sagement pris de la vie les bons cĆ“tĆ©s, les bonnes occasions, les bonnes aubaines. Le reste lui semblait assez bĆŖte. Il Ć©tait spirituel, et juste assez lettrĆ© pour se croire un disciple d'Ɖpicure en n'Ć©tant peut-ĆŖtre qu'un produit de Pigault-Lebrun. Il riait volontiers, et agrĆ©ablement, des choses infinies et Ć©ternelles, et des Ā«billevesĆ©es du bonhomme Ć©vĆŖqueĀ». Il en riait quelquefois, avec une aimable autoritĆ©, devant M. Myriel lui-mĆŖme, qui Ć©coutait. ƀ je ne sais plus quelle cĆ©rĆ©monie demi-officielle, le comte*** (ce sĆ©nateur) et M. Myriel durent dĆ®ner chez le prĆ©fet. Au dessert, le sĆ©nateur, un peu Ć©gayĆ©, quoique toujours digne, s'Ć©cria: --Parbleu, monsieur l'Ć©vĆŖque, causons. Un sĆ©nateur et un Ć©vĆŖque se regardent difficilement sans cligner de l'oeil. Nous sommes deux augures. Je vais vous faire un aveu. J'ai ma philosophie. --Et vous avez raison, rĆ©pondit l'Ć©vĆŖque. Comme on fait sa philosophie on se couche. Vous ĆŖtes sur le lit de pourpre, monsieur le sĆ©nateur. Le sĆ©nateur, encouragĆ©, reprit: --Soyons bons enfants. --Bons diables mĆŖme, dit l'Ć©vĆŖque. --Je vous dĆ©clare, reprit le sĆ©nateur, que le marquis d'Argens, Pyrrhon, Hobbes et M. Naigeon ne sont pas des maroufles. J'ai dans ma bibliothĆØque tous mes philosophes dorĆ©s sur tranche. --Comme vous-mĆŖme, monsieur le comte, interrompit l'Ć©vĆŖque. Le sĆ©nateur poursuivit: --Je hais Diderot; c'est un idĆ©ologue, un dĆ©clamateur et un rĆ©volutionnaire, au fond croyant en Dieu, et plus bigot que Voltaire. Voltaire s'est moquĆ© de Needham, et il a eu tort; car les anguilles de Needham prouvent que Dieu est inutile. Une goutte de vinaigre dans une cuillerĆ©e de pĆ¢te de farine supplĆ©e le _fiat lux_. Supposez la goutte plus grosse et la cuillerĆ©e plus grande, vous avez le monde. L'homme, c'est l'anguille. Alors Ć  quoi bon le PĆØre Ć©ternel? Monsieur l'Ć©vĆŖque, l'hypothĆØse JĆ©hovah me fatigue. Elle n'est bonne qu'Ć  produire des gens maigres qui songent creux. ƀ bas ce grand Tout qui me tracasse! Vive ZĆ©ro qui me laisse tranquille! De vous Ć  moi, et pour vider mon sac, et pour me confesser Ć  mon pasteur comme il convient, je vous avoue que j'ai du bon sens. Je ne suis pas fou de votre JĆ©sus qui prĆŖche Ć  tout bout de champ le renoncement et le sacrifice. Conseil d'avare Ć  des gueux. Renoncement! pourquoi? Sacrifice! Ć  quoi? Je ne vois pas qu'un loup s'immole au bonheur d'un autre loup. Restons donc dans la nature. Nous sommes au sommet; ayons la philosophie supĆ©rieure. Que sert d'ĆŖtre en haut, si l'on ne voit pas plus loin que le bout du nez des autres? Vivons gaĆ®ment. La vie, c'est tout. Que l'homme ait un autre avenir, ailleurs, lĆ -haut, lĆ -bas, quelque part, je n'en crois pas un traĆ®tre mot. Ah! l'on me recommande le sacrifice et le renoncement, je dois prendre garde Ć  tout ce que je fais, il faut que je me casse la tĆŖte sur le bien et le mal, sur le juste et l'injuste, sur le _fas_ et le _nefas_. Pourquoi? parce que j'aurai Ć  rendre compte de mes actions. Quand? aprĆØs ma mort. Quel bon rĆŖve! AprĆØs ma mort, bien fin qui me pincera. Faites donc saisir une poignĆ©e de cendre par une main d'ombre. Disons le vrai, nous qui sommes des initiĆ©s et qui avons levĆ© la jupe d'Isis: il n'y a ni bien, ni mal; il y a de la vĆ©gĆ©tation. Cherchons le rĆ©el. Creusons tout Ć  fait. Allons au fond, que diable! Il faut flairer la vĆ©ritĆ©, fouiller sous terre, et la saisir. Alors elle vous donne des joies exquises. Alors vous devenez fort, et vous riez. Je suis carrĆ© par la base, moi. Monsieur l'Ć©vĆŖque, l'immortalitĆ© de l'homme est un Ć©coute-s'il-pleut. Oh! la charmante promesse! Fiez-vous-y. Le bon billet qu'a Adam! On est Ć¢me, on sera ange, on aura des ailes bleues aux omoplates. Aidez-moi donc, n'est-ce pas Tertullien qui dit que les bienheureux iront d'un astre Ć  l'autre? Soit. On sera les sauterelles des Ć©toiles. Et puis, on verra Dieu. Ta ta ta. Fadaises que tous ces paradis. Dieu est une sonnette monstre. Je ne dirais point cela dans le _Moniteur_, parbleu! mais je le chuchote entre amis. _Inter pocula_. Sacrifier la terre au paradis, c'est lĆ¢cher la proie pour l'ombre. Être dupe de l'infini! pas si bĆŖte. Je suis nĆ©ant. Je m'appelle monsieur le comte NĆ©ant, sĆ©nateur. Ɖtais-je avant ma naissance? Non. Serai-je aprĆØs ma mort? Non. Que suis-je? un peu de poussiĆØre agrĆ©gĆ©e par un organisme. Qu'ai-je Ć  faire sur cette terre? J'ai le choix. Souffrir ou jouir. Où me mĆØnera la souffrance? Au nĆ©ant. Mais j'aurai souffert. Où me mĆØnera la jouissance? Au nĆ©ant. Mais j'aurai joui. Mon choix est fait. Il faut ĆŖtre mangeant ou mangĆ©. Je mange. Mieux vaut ĆŖtre la dent que l'herbe. Telle est ma sagesse. AprĆØs quoi, va comme je te pousse, le fossoyeur est lĆ , le PanthĆ©on pour nous autres, tout tombe dans le grand trou. Fin. _Finis_. Liquidation totale. Ceci est l'endroit de l'Ć©vanouissement. La mort est morte, croyez-moi. Qu'il y ait lĆ  quelqu'un qui ait quelque chose Ć  me dire, je ris d'y songer. Invention de nourrices. Croquemitaine pour les enfants, JĆ©hovah pour les hommes. Non, notre lendemain est de la nuit. DerriĆØre la tombe, il n'y a plus que des nĆ©ants Ć©gaux. Vous avez Ć©tĆ© Sardanapale, vous avez Ć©tĆ© Vincent de Paul, cela fait le mĆŖme rien. VoilĆ  le vrai. Donc vivez, par-dessus tout. Usez de votre moi pendant que vous le tenez. En vĆ©ritĆ©, je vous le dis, monsieur l'Ć©vĆŖque, j'ai ma philosophie, et j'ai mes philosophes. Je ne me laisse pas enguirlander par des balivernes. AprĆØs Ƨa, il faut bien quelque chose Ć  ceux qui sont en bas, aux va-nu-pieds, aux gagne-petit, aux misĆ©rables. On leur donne Ć  gober les lĆ©gendes, les chimĆØres, l'Ć¢me, l'immortalitĆ©, le paradis, les Ć©toiles. Ils mĆ¢chent cela. Ils le mettent sur leur pain sec. Qui n'a rien a le bon Dieu. C'est bien le moins. Je n'y fais point obstacle, mais je garde pour moi monsieur Naigeon. Le bon Dieu est bon pour le peuple. L'Ć©vĆŖque battit des mains. --VoilĆ  parler! s'Ć©cria-t-il. L'excellente chose, et vraiment merveilleuse, que ce matĆ©rialisme-lĆ ! Ne l'a pas qui veut. Ah! quand on l'a, on n'est plus dupe; on ne se laisse pas bĆŖtement exiler comme Caton, ni lapider comme Ɖtienne, ni brĆ»ler vif comme Jeanne d'Arc. Ceux qui ont rĆ©ussi Ć  se procurer ce matĆ©rialisme admirable ont la joie de se sentir irresponsables, et de penser qu'ils peuvent dĆ©vorer tout, sans inquiĆ©tude, les places, les sinĆ©cures, les dignitĆ©s, le pouvoir bien ou mal acquis, les palinodies lucratives, les trahisons utiles, les savoureuses capitulations de conscience, et qu'ils entreront dans la tombe, leur digestion faite. Comme c'est agrĆ©able! Je ne dis pas cela pour vous, monsieur le sĆ©nateur. Cependant il m'est impossible de ne point vous fĆ©liciter. Vous autres grands seigneurs, vous avez, vous le dites, une philosophie Ć  vous et pour vous, exquise, raffinĆ©e, accessible aux riches seuls, bonne Ć  toutes les sauces, assaisonnant admirablement les voluptĆ©s de la vie. Cette philosophie est prise dans les profondeurs et dĆ©terrĆ©e par des chercheurs spĆ©ciaux. Mais vous ĆŖtes bons princes, et vous ne trouvez pas mauvais que la croyance au bon Dieu soit la philosophie du peuple, Ć  peu prĆØs comme l'oie aux marrons est la dinde aux truffes du pauvre. Chapitre IX Le frĆØre racontĆ© par la soeur Pour donner une idĆ©e du mĆ©nage intĆ©rieur de M. l'Ć©vĆŖque de Digne et de la faƧon dont ces deux saintes filles subordonnaient leurs actions, leurs pensĆ©es, mĆŖme leurs instincts de femmes aisĆ©ment effrayĆ©es, aux habitudes et aux intentions de l'Ć©vĆŖque, sans qu'il eĆ»t mĆŖme Ć  prendre la peine de parler pour les exprimer, nous ne pouvons mieux faire que de transcrire ici une lettre de mademoiselle Baptistine Ć  madame la vicomtesse de Boischevron, son amie d'enfance. Cette lettre est entre nos mains. Ā«Digne, 16 dĆ©cembre 18.... Ā«Ma bonne madame, pas un jour ne se passe sans que nous parlions de vous. C'est assez notre habitude, mais il y a une raison de plus. Figurez-vous qu'en lavant et Ć©poussetant les plafonds et les murs, madame Magloire a fait des dĆ©couvertes; maintenant nos deux chambres tapissĆ©es de vieux papier blanchi Ć  la chaux ne dĆ©pareraient pas un chĆ¢teau dans le genre du vĆ“tre. Madame Magloire a dĆ©chirĆ© tout le papier. Il y avait des choses dessous. Mon salon, où il n'y a pas de meubles, et dont nous nous servons pour Ć©tendre le linge aprĆØs les lessives, a quinze pieds de haut, dix-huit de large carrĆ©s, un plafond peint anciennement avec dorure, des solives comme chez vous. C'Ć©tait recouvert d'une toile, du temps que c'Ć©tait l'hĆ“pital. Enfin des boiseries du temps de nos grand'mĆØres. Mais c'est ma chambre qu'il faut voir. Madame Magloire a dĆ©couvert, sous au moins dix papiers collĆ©s dessus, des peintures, sans ĆŖtre bonnes, qui peuvent se supporter. C'est TĆ©lĆ©maque reƧu chevalier par Minerve, c'est lui encore dans les jardins. Le nom m'Ć©chappe. Enfin où les dames romaines se rendaient une seule nuit. Que vous dirai-je? j'ai des romains, des romaines (_ici un mot illisible_), et toute la suite. Madame Magloire a dĆ©barbouillĆ© tout cela, et cet Ć©tĆ© elle va rĆ©parer quelques petites avaries, revenir le tout, et ma chambre sera un vrai musĆ©e. Elle a trouvĆ© aussi dans un coin du grenier deux consoles en bois, genre ancien. On demandait deux Ć©cus de six livres pour les redorer, mais il vaut bien mieux donner cela aux pauvres; d'ailleurs c'est fort laid, et j'aimerais mieux une table ronde en acajou. Ā«Je suis toujours bien heureuse. Mon frĆØre est si bon. Il donne tout ce qu'il a aux indigents et aux malades. Nous sommes trĆØs gĆŖnĆ©s. Le pays est dur l'hiver, et il faut bien faire quelque chose pour ceux qui manquent. Nous sommes Ć  peu prĆØs chauffĆ©s et Ć©clairĆ©s. Vous voyez que ce sont de grandes douceurs. Ā«Mon frĆØre a ses habitudes Ć  lui. Quand il cause, il dit qu'un Ć©vĆŖque doit ĆŖtre ainsi. Figurez-vous que la porte de la maison n'est jamais fermĆ©e. Entre qui veut, et l'on est tout de suite chez mon frĆØre. Il ne craint rien, mĆŖme la nuit. C'est lĆ  sa bravoure Ć  lui, comme il dit. Ā«Il ne veut pas que je craigne pour lui, ni que madame Magloire craigne. Il s'expose Ć  tous les dangers, et il ne veut mĆŖme pas que nous ayons l'air de nous en apercevoir. Il faut savoir le comprendre. Ā«Il sort par la pluie, il marche dans l'eau, il voyage en hiver. Il n'a pas peur de la nuit, des routes suspectes ni des rencontres. Ā«L'an dernier, il est allĆ© tout seul dans un pays de voleurs. Il n'a pas voulu nous emmener. Il est restĆ© quinze jours absent. ƀ son retour, il n'avait rien eu, on le croyait mort, et il se portait bien, et il a dit: "VoilĆ  comme on m'a volĆ©!" Et il a ouvert une malle pleine de tous les bijoux de la cathĆ©drale d'Embrun, que les voleurs lui avaient donnĆ©s. Ā«Cette fois-lĆ , en revenant, comme j'Ć©tais allĆ©e Ć  sa rencontre Ć  deux lieues avec d'autres de ses amis, je n'ai pu m'empĆŖcher de le gronder un peu, en ayant soin de ne parler que pendant que la voiture faisait du bruit, afin que personne autre ne pĆ»t entendre. Ā«Dans les premiers temps, je me disais: il n'y a pas de dangers qui l'arrĆŖtent, il est terrible. ƀ prĆ©sent j'ai fini par m'y accoutumer. Je fais signe Ć  madame Magloire pour qu'elle ne le contrarie pas. Il se risque comme il veut. Moi j'emmĆØne madame Magloire, je rentre dans ma chambre, je prie pour lui, et je m'endors. Je suis tranquille, parce que je sais bien que s'il lui arrivait malheur, ce serait ma fin. Je m'en irais au bon Dieu avec mon frĆØre et mon Ć©vĆŖque. Madame Magloire a eu plus de peine que moi Ć  s'habituer Ć  ce qu'elle appelait ses imprudences. Mais Ć  prĆ©sent le pli est pris. Nous prions toutes les deux, nous avons peur ensemble, et nous nous endormons. Le diable entrerait dans la maison qu'on le laisserait faire. AprĆØs tout, que craignons-nous dans cette maison? Il y a toujours quelqu'un avec nous, qui est le plus fort. Le diable peut y passer, mais le bon Dieu l'habite. Ā«VoilĆ  qui me suffit. Mon frĆØre n'a plus mĆŖme besoin de me dire un mot maintenant. Je le comprends sans qu'il parle, et nous nous abandonnons Ć  la Providence. Ā«VoilĆ  comme il faut ĆŖtre avec un homme qui a du grand dans l'esprit. Ā«J'ai questionnĆ© mon frĆØre pour le renseignement que vous me demandez sur la famille de Faux. Vous savez comme il sait tout et comme il a des souvenirs, car il est toujours trĆØs bon royaliste. C'est de vrai une trĆØs ancienne famille normande de la gĆ©nĆ©ralitĆ© de Caen. Il y a cinq cents ans d'un Raoul de Faux, d'un Jean de Faux et d'un Thomas de Faux, qui Ć©taient des gentilshommes, dont un seigneur de Rochefort. Le dernier Ć©tait Guy-Ɖtienne-Alexandre, et Ć©tait maĆ®tre de camp, et quelque chose dans les chevaux-lĆ©gers de Bretagne. Sa fille Marie-Louise a Ć©pousĆ© Adrien-Charles de Gramont, fils du duc Louis de Gramont, pair de France, colonel des gardes franƧaises et lieutenant gĆ©nĆ©ral des armĆ©es. On Ć©crit Faux, Fauq et Faoucq. Ā«Bonne madame, recommandez-nous aux priĆØres de votre saint parent, M. le cardinal. Quant Ć  votre chĆØre Sylvanie, elle a bien fait de ne pas prendre les courts instants qu'elle passe prĆØs de vous pour m'Ć©crire. Elle se porte bien, travaille selon vos dĆ©sirs, m'aime toujours. C'est tout ce que je veux. Son souvenir par vous m'est arrivĆ©. Je m'en trouve heureuse. Ma santĆ© n'est pas trop mauvaise, et cependant je maigris tous les jours davantage. Adieu, le papier me manque et me force de vous quitter. Mille bonnes choses. Ā«Baptistine. Ā«P. S. Madame votre belle-soeur est toujours ici avec sa jeune famille. Votre petit-neveu est charmant. Savez-vous qu'il a cinq ans bientĆ“t! Hier il a vu passer un cheval auquel on avait mis des genouillĆØres, et il disait: "Qu'est-ce qu'il a donc aux genoux?" Il est si gentil, cet enfant! Son petit frĆØre traĆ®ne un vieux balai dans l'appartement comme une voiture, et dit: "Hu!" Ā»Comme on le voit par cette lettre, ces deux femmes savaient se plier aux faƧons d'ĆŖtre de l'Ć©vĆŖque avec ce gĆ©nie particulier de la femme qui comprend l'homme mieux que l'homme ne se comprend. L'Ć©vĆŖque de Digne, sous cet air doux et candide qui ne se dĆ©mentait jamais, faisait parfois des choses grandes, hardies et magnifiques, sans paraĆ®tre mĆŖme s'en douter. Elles en tremblaient, mais elles le laissaient faire. Quelquefois madame Magloire essayait une remontrance avant; jamais pendant ni aprĆØs. Jamais on ne le troublait, ne fĆ»t-ce que par un signe, dans une action commencĆ©e. ƀ de certains moments, sans qu'il eĆ»t besoin de le dire, lorsqu'il n'en avait peut-ĆŖtre pas lui-mĆŖme conscience, tant sa simplicitĆ© Ć©tait parfaite, elles sentaient vaguement qu'il agissait comme Ć©vĆŖque; alors elles n'Ć©taient plus que deux ombres dans la maison. Elles le servaient passivement, et, si c'Ć©tait obĆ©ir que de disparaĆ®tre, elles disparaissaient. Elles savaient, avec une admirable dĆ©licatesse d'instinct, que certaines sollicitudes peuvent gĆŖner. Aussi, mĆŖme le croyant en pĆ©ril, elles comprenaient, je ne dis pas sa pensĆ©e, mais sa nature, jusqu'au point de ne plus veiller sur lui. Elles le confiaient Ć  Dieu. D'ailleurs Baptistine disait, comme on vient de le lire, que la fin de son frĆØre serait la sienne. Madame Magloire ne le disait pas, mais elle le savait. Chapitre X L'Ć©vĆŖque en prĆ©sence d'une lumiĆØre inconnue ƀ une Ć©poque un peu postĆ©rieure Ć  la date de la lettre citĆ©e dans les pages prĆ©cĆ©dentes, il fit une chose, Ć  en croire toute la ville, plus risquĆ©e encore que sa promenade Ć  travers les montagnes des bandits. Il y avait prĆØs de Digne, dans la campagne, un homme qui vivait solitaire. Cet homme, disons tout de suite le gros mot, Ć©tait un ancien conventionnel. Il se nommait G. On parlait du conventionnel G. dans le petit monde de Digne avec une sorte d'horreur. Un conventionnel, vous figurez-vous cela? Cela existait du temps qu'on se tutoyait et qu'on disait: citoyen. Cet homme Ć©tait Ć  peu prĆØs un monstre. Il n'avait pas votĆ© la mort du roi, mais presque. C'Ć©tait un quasi-rĆ©gicide. Il avait Ć©tĆ© terrible. Comment, au retour des princes lĆ©gitimes, n'avait-on pas traduit cet homme-lĆ  devant une cour prĆ©vĆ“tale? On ne lui eĆ»t pas coupĆ© la tĆŖte, si vous voulez, il faut de la clĆ©mence, soit; mais un bon bannissement Ć  vie. Un exemple enfin! etc., etc. C'Ć©tait un athĆ©e d'ailleurs, comme tous ces gens-lĆ .--CommĆ©rages des oies sur le vautour. Ɖtait-ce du reste un vautour que G.? Oui, si l'on en jugeait par ce qu'il y avait de farouche dans sa solitude. N'ayant pas votĆ© la mort du roi, il n'avait pas Ć©tĆ© compris dans les dĆ©crets d'exil et avait pu rester en France. Il habitait, Ć  trois quarts d'heure de la ville, loin de tout hameau, loin de tout chemin, on ne sait quel repli perdu d'un vallon trĆØs sauvage. Il avait lĆ , disait-on, une espĆØce de champ, un trou, un repaire. Pas de voisins; pas mĆŖme de passants. Depuis qu'il demeurait dans ce vallon, le sentier qui y conduisait avait disparu sous l'herbe. On parlait de cet endroit-lĆ  comme de la maison du bourreau. Pourtant l'Ć©vĆŖque songeait, et de temps en temps regardait l'horizon Ć  l'endroit où un bouquet d'arbres marquait le vallon du vieux conventionnel, et il disait: --Il y a lĆ  une Ć¢me qui est seule. Et au fond de sa pensĆ©e il ajoutait: Ā«Je lui dois ma visite.Ā» Mais, avouons-le, cette idĆ©e, au premier abord naturelle, lui apparaissait, aprĆØs un moment de rĆ©flexion, comme Ć©trange et impossible, et presque repoussante. Car, au fond, il partageait l'impression gĆ©nĆ©rale, et le conventionnel lui inspirait, sans qu'il s'en rendĆ®t clairement compte, ce sentiment qui est comme la frontiĆØre de la haine et qu'exprime si bien le mot Ć©loignement. Toutefois, la gale de la brebis doit-elle faire reculer le pasteur? Non. Mais quelle brebis! Le bon Ć©vĆŖque Ć©tait perplexe. Quelquefois il allait de ce cĆ“tĆ©-lĆ , puis il revenait. Un jour enfin le bruit se rĆ©pandit dans la ville qu'une faƧon de jeune pĆ¢tre qui servait le conventionnel G. dans sa bauge Ć©tait venu chercher un mĆ©decin; que le vieux scĆ©lĆ©rat se mourait, que la paralysie le gagnait, et qu'il ne passerait pas la nuit. --Dieu merci! ajoutaient quelques-uns. L'Ć©vĆŖque prit son bĆ¢ton, mit son pardessus Ć  cause de sa soutane un peu trop usĆ©e, comme nous l'avons dit, et aussi Ć  cause du vent du soir qui ne devait pas tarder Ć  souffler, et partit. Le soleil dĆ©clinait et touchait presque Ć  l'horizon, quand l'Ć©vĆŖque arriva Ć  l'endroit excommuniĆ©. Il reconnut avec un certain battement de coeur qu'il Ć©tait prĆØs de la taniĆØre. Il enjamba un fossĆ©, franchit une haie, leva un Ć©chalier, entra dans un courtil dĆ©labrĆ©, fit quelques pas assez hardiment, et tout Ć  coup, au fond de la friche, derriĆØre une haute broussaille, il aperƧut la caverne. C'Ć©tait une cabane toute basse, indigente, petite et propre, avec une treille clouĆ©e Ć  la faƧade. Devant la porte, dans une vieille chaise Ć  roulettes, fauteuil du paysan, il y avait un homme en cheveux blancs qui souriait au soleil. PrĆØs du vieillard assis se tenait debout un jeune garƧon, le petit pĆ¢tre. Il tendait au vieillard une jatte de lait. Pendant que l'Ć©vĆŖque regardait, le vieillard Ć©leva la voix: --Merci, dit-il, je n'ai plus besoin de rien. Et son sourire quitta le soleil pour s'arrĆŖter sur l'enfant. L'Ć©vĆŖque s'avanƧa. Au bruit qu'il fit en marchant, le vieux homme assis tourna la tĆŖte, et son visage exprima toute la quantitĆ© de surprise qu'on peut avoir aprĆØs une longue vie. --Depuis que je suis ici, dit-il, voilĆ  la premiĆØre fois qu'on entre chez moi. Qui ĆŖtes-vous, monsieur? L'Ć©vĆŖque rĆ©pondit: --Je me nomme Bienvenu Myriel. --Bienvenu Myriel! j'ai entendu prononcer ce nom. Est-ce que c'est vous que le peuple appelle monseigneur Bienvenu? --C'est moi. Le vieillard reprit avec un demi-sourire: --En ce cas, vous ĆŖtes mon Ć©vĆŖque? --Un peu. --Entrez, monsieur. Le conventionnel tendit la main Ć  l'Ć©vĆŖque, mais l'Ć©vĆŖque ne la prit pas. L'Ć©vĆŖque se borna Ć  dire: --Je suis satisfait de voir qu'on m'avait trompĆ©. Vous ne me semblez, certes, pas malade. --Monsieur, rĆ©pondit le vieillard, je vais guĆ©rir. Il fit une pause et dit: --Je mourrai dans trois heures. Puis il reprit: --Je suis un peu mĆ©decin; je sais de quelle faƧon la derniĆØre heure vient. Hier, je n'avais que les pieds froids; aujourd'hui, le froid a gagnĆ© les genoux; maintenant je le sens qui monte jusqu'Ć  la ceinture; quand il sera au coeur, je m'arrĆŖterai. Le soleil est beau, n'est-ce pas? je me suis fait rouler dehors pour jeter un dernier coup d'oeil sur les choses, vous pouvez me parler, cela ne me fatigue point. Vous faites bien de venir regarder un homme qui va mourir. Il est bon que ce moment-lĆ  ait des tĆ©moins. On a des manies; j'aurais voulu aller jusqu'Ć  l'aube. Mais je sais que j'en ai Ć  peine pour trois heures. Il fera nuit. Au fait, qu'importe! Finir est une affaire simple. On n'a pas besoin du matin pour cela. Soit. Je mourrai Ć  la belle Ć©toile. Le vieillard se tourna vers le pĆ¢tre. --Toi, va te coucher. Tu as veillĆ© l'autre nuit. Tu es fatiguĆ©. L'enfant rentra dans la cabane. Le vieillard le suivit des yeux et ajouta comme se parlant Ć  lui-mĆŖme: --Pendant qu'il dormira, je mourrai. Les deux sommeils peuvent faire bon voisinage. L'Ć©vĆŖque n'Ć©tait pas Ć©mu comme il semble qu'il aurait pu l'ĆŖtre. Il ne croyait pas sentir Dieu dans cette faƧon de mourir. Disons tout, car les petites contradictions des grands coeurs veulent ĆŖtre indiquĆ©es comme le reste, lui qui, dans l'occasion, riait si volontiers de Sa Grandeur, il Ć©tait quelque peu choquĆ© de ne pas ĆŖtre appelĆ© monseigneur, et il Ć©tait presque tentĆ© de rĆ©pliquer: citoyen. Il lui vint une vellĆ©itĆ© de familiaritĆ© bourrue, assez ordinaire aux mĆ©decins et aux prĆŖtres, mais qui ne lui Ć©tait pas habituelle, Ć  lui. Cet homme, aprĆØs tout, ce conventionnel, ce reprĆ©sentant du peuple, avait Ć©tĆ© un puissant de la terre; pour la premiĆØre fois de sa vie peut-ĆŖtre, l'Ć©vĆŖque se sentit en humeur de sĆ©vĆ©ritĆ©. Le conventionnel cependant le considĆ©rait avec une cordialitĆ© modeste, où l'on eĆ»t pu dĆ©mĆŖler l'humilitĆ© qui sied quand on est si prĆØs de sa mise en poussiĆØre. L'Ć©vĆŖque, de son cĆ“tĆ©, quoiqu'il se gardĆ¢t ordinairement de la curiositĆ©, laquelle, selon lui, Ć©tait contiguĆ« Ć  l'offense, ne pouvait s'empĆŖcher d'examiner le conventionnel avec une attention qui, n'ayant pas sa source dans la sympathie, lui eĆ»t Ć©tĆ© probablement reprochĆ©e par sa conscience vis-Ć -vis de tout autre homme. Un conventionnel lui faisait un peu l'effet d'ĆŖtre hors la loi, mĆŖme hors la loi de charitĆ©. G., calme, le buste presque droit, la voix vibrante, Ć©tait un de ces grands octogĆ©naires qui font l'Ć©tonnement du physiologiste. La rĆ©volution a eu beaucoup de ces hommes proportionnĆ©s Ć  l'Ć©poque. On sentait dans ce vieillard l'homme Ć  l'Ć©preuve. Si prĆØs de sa fin, il avait conservĆ© tous les gestes de la santĆ©. Il y avait dans son coup d'oeil clair, dans son accent ferme, dans son robuste mouvement d'Ć©paules, de quoi dĆ©concerter la mort. AzraĆ«l, l'ange mahomĆ©tan du sĆ©pulcre, eĆ»t rebroussĆ© chemin et eĆ»t cru se tromper de porte. G. semblait mourir parce qu'il le voulait bien. Il y avait de la libertĆ© dans son agonie. Les jambes seulement Ć©taient immobiles. Les tĆ©nĆØbres le tenaient par lĆ . Les pieds Ć©taient morts et froids, et la tĆŖte vivait de toute la puissance de la vie et paraissait en pleine lumiĆØre. G., en ce grave moment, ressemblait Ć  ce roi du conte oriental, chair par en haut, marbre par en bas. Une pierre Ć©tait lĆ . L'Ć©vĆŖque s'y assit. L'exorde fut _ex abrupto_. --Je vous fĆ©licite, dit-il du ton dont on rĆ©primande. Vous n'avez toujours pas votĆ© la mort du roi. Le conventionnel ne parut pas remarquer le sous-entendu amer cachĆ© dans ce mot: toujours. Il rĆ©pondit. Tout sourire avait disparu de sa face. --Ne me fĆ©licitez pas trop, monsieur; j'ai votĆ© la fin du tyran. C'Ć©tait l'accent austĆØre en prĆ©sence de l'accent sĆ©vĆØre. --Que voulez-vous dire? reprit l'Ć©vĆŖque. --Je veux dire que l'homme a un tyran, l'ignorance. J'ai votĆ© la fin de ce tyran-lĆ . Ce tyran-lĆ  a engendrĆ© la royautĆ© qui est l'autoritĆ© prise dans le faux, tandis que la science est l'autoritĆ© prise dans le vrai. L'homme ne doit ĆŖtre gouvernĆ© que par la science. --Et la conscience, ajouta l'Ć©vĆŖque. --C'est la mĆŖme chose. La conscience, c'est la quantitĆ© de science innĆ©e que nous avons en nous. Monseigneur Bienvenu Ć©coutait, un peu Ć©tonnĆ©, ce langage trĆØs nouveau pour lui. Le conventionnel poursuivit: --Quant Ć  Louis XVI, j'ai dit non. Je ne me crois pas le droit de tuer un homme; mais je me sens le devoir d'exterminer le mal. J'ai votĆ© la fin du tyran. C'est-Ć -dire la fin de la prostitution pour la femme, la fin de l'esclavage pour l'homme, la fin de la nuit pour l'enfant. En votant la rĆ©publique, j'ai votĆ© cela. J'ai votĆ© la fraternitĆ©, la concorde, l'aurore! J'ai aidĆ© Ć  la chute des prĆ©jugĆ©s et des erreurs. Les Ć©croulements des erreurs et des prĆ©jugĆ©s font de la lumiĆØre. Nous avons fait tomber le vieux monde, nous autres, et le vieux monde, vase des misĆØres, en se renversant sur le genre humain, est devenu une urne de joie. --Joie mĆŖlĆ©e, dit l'Ć©vĆŖque. --Vous pourriez dire joie troublĆ©e, et aujourd'hui, aprĆØs ce fatal retour du passĆ© qu'on nomme 1814, joie disparue. HĆ©las, l'oeuvre a Ć©tĆ© incomplĆØte, j'en conviens; nous avons dĆ©moli l'ancien rĆ©gime dans les faits, nous n'avons pu entiĆØrement le supprimer dans les idĆ©es. DĆ©truire les abus, cela ne suffit pas; il faut modifier les moeurs. Le moulin n'y est plus, le vent y est encore. --Vous avez dĆ©moli. DĆ©molir peut ĆŖtre utile; mais je me dĆ©fie d'une dĆ©molition compliquĆ©e de colĆØre. --Le droit a sa colĆØre, monsieur l'Ć©vĆŖque, et la colĆØre du droit est un Ć©lĆ©ment du progrĆØs. N'importe, et quoi qu'on en dise, la rĆ©volution franƧaise est le plus puissant pas du genre humain depuis l'avĆØnement du Christ. IncomplĆØte, soit; mais sublime. Elle a dĆ©gagĆ© toutes les inconnues sociales. Elle a adouci les esprits; elle a calmĆ©, apaisĆ©, Ć©clairĆ©; elle a fait couler sur la terre des flots de civilisation. Elle a Ć©tĆ© bonne. La rĆ©volution franƧaise, c'est le sacre de l'humanitĆ©. L'Ć©vĆŖque ne put s'empĆŖcher de murmurer: --Oui? 93! Le conventionnel se dressa sur sa chaise avec une solennitĆ© presque lugubre, et, autant qu'un mourant peut s'Ć©crier, il s'Ć©cria: --Ah! vous y voilĆ ! 93! J'attendais ce mot-lĆ . Un nuage s'est formĆ© pendant quinze cents ans. Au bout de quinze siĆØcles, il a crevĆ©. Vous faites le procĆØs au coup de tonnerre. L'Ć©vĆŖque sentit, sans se l'avouer peut-ĆŖtre, que quelque chose en lui Ć©tait atteint. Pourtant il fit bonne contenance. Il rĆ©pondit: --Le juge parle au nom de la justice; le prĆŖtre parle au nom de la pitiĆ©, qui n'est autre chose qu'une justice plus Ć©levĆ©e. Un coup de tonnerre ne doit pas se tromper. Et il ajouta en regardant fixement le conventionnel. --Louis XVII? Le conventionnel Ć©tendit la main et saisit le bras de l'Ć©vĆŖque: --Louis XVII! Voyons, sur qui pleurez-vous? Est-ce sur l'enfant innocent? alors, soit. Je pleure avec vous. Est-ce sur l'enfant royal? je demande Ć  rĆ©flĆ©chir. Pour moi, le frĆØre de Cartouche, enfant innocent, pendu sous les aisselles en place de GrĆØve jusqu'Ć  ce que mort s'ensuive, pour le seul crime d'avoir Ć©tĆ© le frĆØre de Cartouche, n'est pas moins douloureux que le petit-fils de Louis XV, enfant innocent, martyrisĆ© dans la tour du Temple pour le seul crime d'avoir Ć©tĆ© le petit-fils de Louis XV. --Monsieur, dit l'Ć©vĆŖque, je n'aime pas ces rapprochements de noms. --Cartouche? Louis XV? pour lequel des deux rĆ©clamez-vous? Il y eut un moment de silence. L'Ć©vĆŖque regrettait presque d'ĆŖtre venu, et pourtant il se sentait vaguement et Ć©trangement Ć©branlĆ©. Le conventionnel reprit: --Ah! monsieur le prĆŖtre, vous n'aimez pas les cruditĆ©s du vrai. Christ les aimait, lui. Il prenait une verge et il Ć©poussetait le temple. Son fouet plein d'Ć©clairs Ć©tait un rude diseur de vĆ©ritĆ©s. Quand il s'Ć©criait: _Sinite parvulos_..., il ne distinguait pas entre les petits enfants. Il ne se fĆ»t pas gĆŖnĆ© de rapprocher le dauphin de Barabbas du dauphin d'HĆ©rode. Monsieur, l'innocence est sa couronne Ć  elle-mĆŖme. L'innocence n'a que faire d'ĆŖtre altesse. Elle est aussi auguste dĆ©guenillĆ©e que fleurdelysĆ©e. --C'est vrai, dit l'Ć©vĆŖque Ć  voix basse. --J'insiste, continua le conventionnel G. Vous m'avez nommĆ© Louis XVII. Entendons-nous. Pleurons-nous sur tous les innocents, sur tous les martyrs, sur tous les enfants, sur ceux d'en bas comme sur ceux d'en haut? J'en suis. Mais alors, je vous l'ai dit, il faut remonter plus haut que 93, et c'est avant Louis XVII qu'il faut commencer nos larmes. Je pleurerai sur les enfants des rois avec vous, pourvu que vous pleuriez avec moi sur les petits du peuple. --Je pleure sur tous, dit l'Ć©vĆŖque. --Ɖgalement! s'Ć©cria G., et si la balance doit pencher, que ce soit du cĆ“tĆ© du peuple. Il y a plus longtemps qu'il souffre. Il y eut encore un silence. Ce fut le conventionnel qui le rompit. Il se souleva sur un coude, prit entre son pouce et son index repliĆ© un peu de sa joue, comme on fait machinalement lorsqu'on interroge et qu'on juge, et interpella l'Ć©vĆŖque avec un regard plein de toutes les Ć©nergies de l'agonie. Ce fut presque une explosion. --Oui, monsieur, il y a longtemps que le peuple souffre. Et puis, tenez, ce n'est pas tout cela, que venez-vous me questionner et me parler de Louis XVII? Je ne vous connais pas, moi. Depuis que je suis dans ce pays, j'ai vĆ©cu dans cet enclos, seul, ne mettant pas les pieds dehors, ne vient personne que cet enfant qui m'aide. Votre nom est, il est vrai, arrivĆ© confusĆ©ment jusqu'Ć  moi, et, je dois le dire, pas trĆØs mal prononcĆ©; mais cela ne signifie rien; les gens habiles ont tant de maniĆØres d'en faire accroire Ć  ce brave bonhomme de peuple. ƀ propos, je n'ai pas entendu le bruit de votre voiture, vous l'aurez sans doute laissĆ©e derriĆØre le taillis, lĆ -bas, Ć  l'embranchement de la route. Je ne vous connais pas, vous dis-je. Vous m'avez dit que vous Ć©tiez l'Ć©vĆŖque, mais cela ne me renseigne point sur votre personne morale. En somme, je vous rĆ©pĆØte ma question. Qui ĆŖtes-vous? Vous ĆŖtes un Ć©vĆŖque, c'est-Ć -dire un prince de l'Ć©glise, un de ces hommes dorĆ©s, armoriĆ©s, rentĆ©s, qui ont de grosses prĆ©bendes--l'Ć©vĆŖchĆ© de Digne, quinze mille francs de fixe, dix mille francs de casuel, total, vingt-cinq mille francs--, qui ont des cuisines, qui ont des livrĆ©es, qui font bonne chĆØre, qui mangent des poules d'eau le vendredi, qui se pavanent, laquais devant, laquais derriĆØre, en berline de gala, et qui ont des palais, et qui roulent carrosse au nom de JĆ©sus-Christ qui allait pieds nus! Vous ĆŖtes un prĆ©lat; rentes, palais, chevaux, valets, bonne table, toutes les sensualitĆ©s de la vie, vous avez cela comme les autres, et comme les autres vous en jouissez, c'est bien, mais cela en dit trop ou pas assez; cela ne m'Ć©claire pas sur votre valeur intrinsĆØque et essentielle, Ć  vous qui venez avec la prĆ©tention probable de m'apporter de la sagesse. ƀ qui est-ce que je parle? Qui ĆŖtes-vous? L'Ć©vĆŖque baissa la tĆŖte et rĆ©pondit: --_Vermis sum_. --Un ver de terre en carrosse! grommela le conventionnel. C'Ć©tait le tour du conventionnel d'ĆŖtre hautain, et de l'Ć©vĆŖque d'ĆŖtre humble. L'Ć©vĆŖque reprit avec douceur. --Monsieur, soit. Mais expliquez-moi en quoi mon carrosse, qui est lĆ  Ć  deux pas derriĆØre les arbres, en quoi ma bonne table et les poules d'eau que je mange le vendredi, en quoi mes vingt-cinq mille livres de rentes, en quoi mon palais et mes laquais prouvent que la pitiĆ© n'est pas une vertu, que la clĆ©mence n'est pas un devoir, et que 93 n'a pas Ć©tĆ© inexorable. Le conventionnel passa la main sur son front comme pour en Ć©carter un nuage. --Avant de vous rĆ©pondre, dit-il, je vous prie de me pardonner. Je viens d'avoir un tort, monsieur. Vous ĆŖtes chez moi, vous ĆŖtes mon hĆ“te. Je vous dois courtoisie. Vous discutez mes idĆ©es, il sied que je me borne Ć  combattre vos raisonnements. Vos richesses et vos jouissances sont des avantages que j'ai contre vous dans le dĆ©bat, mais il est de bon goĆ»t de ne pas m'en servir. Je vous promets de ne plus en user. --Je vous remercie, dit l'Ć©vĆŖque. G. reprit: --Revenons Ć  l'explication que vous me demandiez. Où en Ć©tions-nous? Que me disiez-vous? que 93 a Ć©tĆ© inexorable? --Inexorable, oui, dit l'Ć©vĆŖque. Que pensez-vous de Marat battant des mains Ć  la guillotine? --Que pensez-vous de Bossuet chantant le _Te Deum_ sur les dragonnades? La rĆ©ponse Ć©tait dure, mais elle allait au but avec la rigiditĆ© d'une pointe d'acier. L'Ć©vĆŖque en tressaillit; il ne lui vint aucune riposte, mais il Ć©tait froissĆ© de cette faƧon de nommer Bossuet. Les meilleurs esprits ont leurs fĆ©tiches, et parfois se sentent vaguement meurtris des manques de respect de la logique. Le conventionnel commenƧait Ć  haleter; l'asthme de l'agonie, qui se mĆŖle aux derniers souffles, lui entrecoupait la voix; cependant il avait encore une parfaite luciditĆ© d'Ć¢me dans les yeux. Il continua: --Disons encore quelques mots ƧƠ et lĆ , je veux bien. En dehors de la rĆ©volution qui, prise dans son ensemble, est une immense affirmation humaine, 93, hĆ©las! est une rĆ©plique. Vous le trouvez inexorable, mais toute la monarchie, monsieur? Carrier est un bandit; mais quel nom donnez-vous Ć  Montrevel? Fouquier-Tinville est un gueux, mais quel est votre avis sur Lamoignon-BĆ¢ville? Maillard est affreux, mais Saulx-Tavannes, s'il vous plaĆ®t? Le pĆØre DuchĆŖne est fĆ©roce, mais quelle Ć©pithĆØte m'accorderez-vous pour le pĆØre Letellier? Jourdan-Coupe-TĆŖte est un monstre, mais moindre que M. le marquis de Louvois. Monsieur, monsieur, je plains Marie-Antoinette, archiduchesse et reine, mais je plains aussi cette pauvre femme huguenote qui, en 1685, sous Louis le Grand, monsieur, allaitant son enfant, fut liĆ©e, nue jusqu'Ć  la ceinture, Ć  un poteau, l'enfant tenu Ć  distance; le sein se gonflait de lait et le coeur d'angoisse. Le petit, affamĆ© et pĆ¢le, voyait ce sein, agonisait et criait, et le bourreau disait Ć  la femme, mĆØre et nourrice: Ā«Abjure!Ā» lui donnant Ć  choisir entre la mort de son enfant et la mort de sa conscience. Que dites-vous de ce supplice de Tantale accommodĆ© Ć  une mĆØre? Monsieur, retenez bien ceci: la rĆ©volution franƧaise a eu ses raisons. Sa colĆØre sera absoute par l'avenir. Son rĆ©sultat, c'est le monde meilleur. De ses coups les plus terribles, il sort une caresse pour le genre humain. J'abrĆØge. Je m'arrĆŖte, j'ai trop beau jeu. D'ailleurs je me meurs. Et, cessant de regarder l'Ć©vĆŖque, le conventionnel acheva sa pensĆ©e en ces quelques mots tranquilles: --Oui, les brutalitĆ©s du progrĆØs s'appellent rĆ©volutions. Quand elles sont finies, on reconnaĆ®t ceci: que le genre humain a Ć©tĆ© rudoyĆ©, mais qu'il a marchĆ©. Le conventionnel ne se doutait pas qu'il venait d'emporter successivement l'un aprĆØs l'autre tous les retranchements intĆ©rieurs de l'Ć©vĆŖque. Il en restait un pourtant, et de ce retranchement, suprĆŖme ressource de la rĆ©sistance de monseigneur Bienvenu, sortit cette parole où reparut presque toute la rudesse du commencement: --Le progrĆØs doit croire en Dieu. Le bien ne peut pas avoir de serviteur impie. C'est un mauvais conducteur du genre humain que celui qui est athĆ©e. Le vieux reprĆ©sentant du peuple ne rĆ©pondit pas. Il eut un tremblement. Il regarda le ciel, et une larme germa lentement dans ce regard. Quand la paupiĆØre fut pleine, la larme coula le long de sa joue livide, et il dit presque en bĆ©gayant, bas et se parlant Ć  lui-mĆŖme, l'oeil perdu dans les profondeurs: --O toi! Ć“ idĆ©al! toi seul existes! L'Ć©vĆŖque eut une sorte d'inexprimable commotion. AprĆØs un silence, le vieillard leva un doigt vers le ciel, et dit: --L'infini est. Il est lĆ . Si l'infini n'avait pas de moi, le moi serait sa borne; il ne serait pas infini; en d'autres termes, il ne serait pas. Or il est. Donc il a un moi. Ce moi de l'infini, c'est Dieu. Le mourant avait prononcĆ© ces derniĆØres paroles d'une voix haute et avec le frĆ©missement de l'extase, comme s'il voyait quelqu'un. Quand il eut parlĆ©, ses yeux se fermĆØrent. L'effort l'avait Ć©puisĆ©. Il Ć©tait Ć©vident qu'il venait de vivre en une minute les quelques heures qui lui restaient. Ce qu'il venait de dire l'avait approchĆ© de celui qui est dans la mort. L'instant suprĆŖme arrivait. L'Ć©vĆŖque le comprit, le moment pressait, c'Ć©tait comme prĆŖtre qu'il Ć©tait venu; de l'extrĆŖme froideur, il Ć©tait passĆ© par degrĆ©s Ć  l'Ć©motion extrĆŖme; il regarda ces yeux fermĆ©s, il prit cette vieille main ridĆ©e et glacĆ©e, et se pencha vers le moribond: --Cette heure est celle de Dieu. Ne trouvez-vous pas qu'il serait regrettable que nous nous fussions rencontrĆ©s en vain? Le conventionnel rouvrit les yeux. Une gravitĆ© où il y avait de l'ombre s'empreignit sur son visage. --Monsieur l'Ć©vĆŖque, dit-il, avec une lenteur qui venait peut-ĆŖtre plus encore de la dignitĆ© de l'Ć¢me que de la dĆ©faillance des forces, j'ai passĆ© ma vie dans la mĆ©ditation, l'Ć©tude et la contemplation. J'avais soixante ans quand mon pays m'a appelĆ©, et m'a ordonnĆ© de me mĆŖler de ses affaires. J'ai obĆ©i. Il y avait des abus, je les ai combattus; il y avait des tyrannies, je les ai dĆ©truites; il y avait des droits et des principes, je les ai proclamĆ©s et confessĆ©s. Le territoire Ć©tait envahi, je l'ai dĆ©fendu; la France Ć©tait menacĆ©e, j'ai offert ma poitrine. Je n'Ć©tais pas riche; je suis pauvre. J'ai Ć©tĆ© l'un des maĆ®tres de l'Ɖtat, les caves du TrĆ©sor Ć©taient encombrĆ©es d'espĆØces au point qu'on Ć©tait forcĆ© d'Ć©tanƧonner les murs, prĆŖts Ć  se fendre sous le poids de l'or et de l'argent, je dĆ®nais rue de l'Arbre-Sec Ć  vingt-deux sous par tĆŖte. J'ai secouru les opprimĆ©s, j'ai soulagĆ© les souffrants. J'ai dĆ©chirĆ© la nappe de l'autel, c'est vrai; mais c'Ć©tait pour panser les blessures de la patrie. J'ai toujours soutenu la marche en avant du genre humain vers la lumiĆØre, et j'ai rĆ©sistĆ© quelquefois au progrĆØs sans pitiĆ©. J'ai, dans l'occasion, protĆ©gĆ© mes propres adversaires, vous autres. Et il y a Ć  Peteghem en Flandre, Ć  l'endroit mĆŖme où les rois mĆ©rovingiens avaient leur palais d'Ć©tĆ©, un couvent d'urbanistes, l'abbaye de Sainte-Claire en Beaulieu, que j'ai sauvĆ© en 1793. J'ai fait mon devoir selon mes forces, et le bien que j'ai pu. AprĆØs quoi j'ai Ć©tĆ© chassĆ©, traquĆ©, poursuivi, persĆ©cutĆ©, noirci, raillĆ©, conspuĆ©, maudit, proscrit. Depuis bien des annĆ©es dĆ©jĆ , avec mes cheveux blancs, je sens que beaucoup de gens se croient sur moi le droit de mĆ©pris, j'ai pour la pauvre foule ignorante visage de damnĆ©, et j'accepte, ne haĆÆssant personne, l'isolement de la haine. Maintenant, j'ai quatre-vingt-six ans; je vais mourir. Qu'est-ce que vous venez me demander? --Votre bĆ©nĆ©diction, dit l'Ć©vĆŖque. Et il s'agenouilla. Quand l'Ć©vĆŖque releva la tĆŖte, la face du conventionnel Ć©tait devenue auguste. Il venait d'expirer. L'Ć©vĆŖque rentra chez lui profondĆ©ment absorbĆ© dans on ne sait quelles pensĆ©es. Il passa toute la nuit en priĆØre. Le lendemain, quelques braves curieux essayĆØrent de lui parler du conventionnel G.; il se borna Ć  montrer le ciel. ƀ partir de ce moment, il redoubla de tendresse et de fraternitĆ© pour les petits et les souffrants. Toute allusion Ć  ce Ā«vieux scĆ©lĆ©rat de G.Ā» le faisait tomber dans une prĆ©occupation singuliĆØre. Personne ne pourrait dire que le passage de cet esprit devant le sien et le reflet de cette grande conscience sur la sienne ne fĆ»t pas pour quelque chose dans son approche de la perfection. Cette Ā«visite pastoraleĀ» fut naturellement une occasion de bourdonnement pour les petites coteries locales: --Ɖtait-ce la place d'un Ć©vĆŖque que le chevet d'un tel mourant? Il n'y avait Ć©videmment pas de conversion Ć  attendre. Tous ces rĆ©volutionnaires sont relaps. Alors pourquoi y aller? Qu'a-t-il Ć©tĆ© regarder lĆ ? Il fallait donc qu'il fĆ»t bien curieux d'un emportement d'Ć¢me par le diable. Un jour, une douairiĆØre, de la variĆ©tĆ© impertinente qui se croit spirituelle, lui adressa cette saillie: --Monseigneur, on demande quand Votre Grandeur aura le bonnet rouge. --Oh! oh! voilĆ  une grosse couleur, rĆ©pondit l'Ć©vĆŖque. Heureusement que ceux qui la mĆ©prisent dans un bonnet la vĆ©nĆØrent dans un chapeau. Chapitre XI Une restriction On risquerait fort de se tromper si l'on concluait de lĆ  que monseigneur Bienvenu fĆ»t Ā«un Ć©vĆŖque philosopheĀ» ou Ā«un curĆ© patrioteĀ». Sa rencontre, ce qu'on pourrait presque appeler sa conjonction avec le conventionnel G., lui laissa une sorte d'Ć©tonnement qui le rendit plus doux encore. VoilĆ  tout. Quoique monseigneur Bienvenu n'ait Ć©tĆ© rien moins qu'un homme politique, c'est peut-ĆŖtre ici le lieu d'indiquer, trĆØs briĆØvement, quelle fut son attitude dans les Ć©vĆ©nements d'alors, en supposant que monseigneur Bienvenu ait jamais songĆ© Ć  avoir une attitude. Remontons donc en arriĆØre de quelques annĆ©es. Quelque temps aprĆØs l'Ć©lĆ©vation de M. Myriel Ć  l'Ć©piscopat, l'empereur l'avait fait baron de l'empire, en mĆŖme temps que plusieurs autres Ć©vĆŖques. L'arrestation du pape eut lieu, comme on sait, dans la nuit du 5 au 6 juillet 1809; Ć  cette occasion, M. Myriel fut appelĆ© par NapolĆ©on au synode des Ć©vĆŖques de France et d'Italie convoquĆ© Ć  Paris. Ce synode se tint Ć  Notre-Dame et s'assembla pour la premiĆØre fois le 15 juin 1811 sous la prĆ©sidence de M. le cardinal Fesch. M. Myriel fut du nombre des quatre-vingt-quinze Ć©vĆŖques qui s'y rendirent. Mais il n'assista qu'Ć  une sĆ©ance et Ć  trois ou quatre confĆ©rences particuliĆØres. ƉvĆŖque d'un diocĆØse montagnard, vivant si prĆØs de la nature, dans la rusticitĆ© et le dĆ©nuement, il paraĆ®t qu'il apportait parmi ces personnages Ć©minents des idĆ©es qui changeaient la tempĆ©rature de l'assemblĆ©e. Il revint bien vite Ć  Digne. On le questionna sur ce prompt retour, il rĆ©pondit: --Je les gĆŖnais. L'air du dehors leur venait par moi. Je leur faisais l'effet d'une porte ouverte. Une autre fois il dit: --Que voulez-vous? ces messeigneurs-lĆ  sont des princes. Moi, je ne suis qu'un pauvre Ć©vĆŖque paysan. Le fait est qu'il avait dĆ©plu. Entre autres choses Ć©tranges, il lui serait Ć©chappĆ© de dire, un soir qu'il se trouvait chez un de ses collĆØgues les plus qualifiĆ©s: --Les belles pendules! les beaux tapis! les belles livrĆ©es! Ce doit ĆŖtre bien importun! Oh! que je ne voudrais pas avoir tout ce superflu-lĆ  Ć  me crier sans cesse aux oreilles: Il y a des gens qui ont faim! il y a des gens qui ont froid! il y a des pauvres! il y a des pauvres! Disons-le en passant, ce ne serait pas une haine intelligente que la haine du luxe. Cette haine impliquerait la haine des arts. Cependant, chez les gens d'Ć©glise, en dehors de la reprĆ©sentation et des cĆ©rĆ©monies, le luxe est un tort. Il semble rĆ©vĆ©ler des habitudes peu rĆ©ellement charitables. Un prĆŖtre opulent est un contre-sens. Le prĆŖtre doit se tenir prĆØs des pauvres. Or peut-on toucher sans cesse, et nuit et jour, Ć  toutes les dĆ©tresses, Ć  toutes les infortunes, Ć  toutes les indigences, sans avoir soi-mĆŖme sur soi un peu de cette sainte misĆØre, comme la poussiĆØre du travail? Se figure-t-on un homme qui est prĆØs d'un brasier, et qui n'a pas chaud? Se figure-t-on un ouvrier qui travaille sans cesse Ć  une fournaise, et qui n'a ni un cheveu brĆ»lĆ©, ni un ongle noirci, ni une goutte de sueur, ni un grain de cendre au visage? La premiĆØre preuve de la charitĆ© chez le prĆŖtre, chez l'Ć©vĆŖque surtout, c'est la pauvretĆ©. C'Ć©tait lĆ  sans doute ce que pensait M. l'Ć©vĆŖque de Digne. Il ne faudrait pas croire d'ailleurs qu'il partageait sur certains points dĆ©licats ce que nous appellerions Ā«les idĆ©es du siĆØcleĀ». Il se mĆŖlait peu aux querelles thĆ©ologiques du moment et se taisait sur les questions où sont compromis l'Ɖglise et l'Ɖtat; mais si on l'eĆ»t beaucoup pressĆ©, il paraĆ®t qu'on l'eĆ»t trouvĆ© plutĆ“t ultramontain que gallican. Comme nous faisons un portrait et que nous ne voulons rien cacher, nous sommes forcĆ© d'ajouter qu'il fut glacial pour NapolĆ©on dĆ©clinant. ƀ partir de 1813, il adhĆ©ra ou il applaudit Ć  toutes les manifestations hostiles. Il refusa de le voir Ć  son passage au retour de l'Ć®le d'Elbe, et s'abstint d'ordonner dans son diocĆØse les priĆØres publiques pour l'empereur pendant les Cent-Jours. Outre sa soeur, mademoiselle Baptistine, il avait deux frĆØres: l'un gĆ©nĆ©ral, l'autre prĆ©fet. Il Ć©crivait assez souvent Ć  tous les deux. Il tint quelque temps rigueur au premier, parce qu'ayant un commandement en Provence, Ć  l'Ć©poque du dĆ©barquement de Cannes, le gĆ©nĆ©ral s'Ć©tait mis Ć  la tĆŖte de douze cents hommes et avait poursuivi l'empereur comme quelqu'un qui veut le laisser Ć©chapper. Sa correspondance resta plus affectueuse pour l'autre frĆØre, l'ancien prĆ©fet, brave et digne homme qui vivait retirĆ© Ć  Paris, rue Cassette. Monseigneur Bienvenu eut donc, aussi lui, son heure d'esprit de parti, son heure d'amertume, son nuage. L'ombre des passions du moment traversa ce doux et grand esprit occupĆ© des choses Ć©ternelles. Certes, un pareil homme eĆ»t mĆ©ritĆ© de n'avoir pas d'opinions politiques. Qu'on ne se mĆ©prenne pas sur notre pensĆ©e, nous ne confondons point ce qu'on appelle Ā«opinions politiquesĀ» avec la grande aspiration au progrĆØs, avec la sublime foi patriotique, dĆ©mocratique et humaine, qui, de nos jours, doit ĆŖtre le fond mĆŖme de toute intelligence gĆ©nĆ©reuse. Sans approfondir des questions qui ne touchent qu'indirectement au sujet de ce livre, nous disons simplement ceci: Il eĆ»t Ć©tĆ© beau que monseigneur Bienvenu n'eĆ»t pas Ć©tĆ© royaliste et que son regard ne se fĆ»t pas dĆ©tournĆ© un seul instant de cette contemplation sereine où l'on voit rayonner distinctement, au-dessus du va-et-vient orageux des choses humaines, ces trois pures lumiĆØres, la VĆ©ritĆ©, la Justice, la CharitĆ©. Tout en convenant que ce n'Ć©tait point pour une fonction politique que Dieu avait crƩƩ monseigneur Bienvenu, nous eussions compris et admirĆ© la protestation au nom du droit et de la libertĆ©, l'opposition fiĆØre, la rĆ©sistance pĆ©rilleuse et juste Ć  NapolĆ©on tout-puissant. Mais ce qui nous plaĆ®t vis-Ć -vis de ceux qui montent nous plaĆ®t moins vis-Ć -vis de ceux qui tombent. Nous n'aimons le combat que tant qu'il y a danger; et, dans tous les cas, les combattants de la premiĆØre heure ont seuls le droit d'ĆŖtre les exterminateurs de la derniĆØre. Qui n'a pas Ć©tĆ© accusateur opiniĆ¢tre pendant la prospĆ©ritĆ© doit se taire devant l'Ć©croulement. Le dĆ©nonciateur du succĆØs est le seul lĆ©gitime justicier de la chute. Quant Ć  nous, lorsque la Providence s'en mĆŖle et frappe, nous la laissons faire. 1812 commence Ć  nous dĆ©sarmer. En 1813, la lĆ¢che rupture de silence de ce corps lĆ©gislatif taciturne enhardi par les catastrophes n'avait que de quoi indigner, et c'Ć©tait un tort d'applaudir; en 1814, devant ces marĆ©chaux trahissant, devant ce sĆ©nat passant d'une fange Ć  l'autre, insultant aprĆØs avoir divinisĆ©, devant cette idolĆ¢trie lĆ¢chant pied et crachant sur l'idole, c'Ć©tait un devoir de dĆ©tourner la tĆŖte; en 1815, comme les suprĆŖmes dĆ©sastres Ć©taient dans l'air, comme la France avait le frisson de leur approche sinistre, comme on pouvait vaguement distinguer Waterloo ouvert devant NapolĆ©on, la douloureuse acclamation de l'armĆ©e et du peuple au condamnĆ© du destin n'avait rien de risible, et, toute rĆ©serve faite sur le despote, un coeur comme l'Ć©vĆŖque de Digne n'eĆ»t peut-ĆŖtre pas dĆ» mĆ©connaĆ®tre ce qu'avait d'auguste et de touchant, au bord de l'abĆ®me, l'Ć©troit embrassement d'une grande nation et d'un grand homme. ƀ cela prĆØs, il Ć©tait et il fut, en toute chose, juste, vrai, Ć©quitable, intelligent, humble et digne; bienfaisant, et bienveillant, ce qui est une autre bienfaisance. C'Ć©tait un prĆŖtre, un sage, et un homme. MĆŖme, il faut le dire, dans cette opinion politique que nous venons de lui reprocher et que nous sommes disposĆ© Ć  juger presque sĆ©vĆØrement, il Ć©tait tolĆ©rant et facile, peut-ĆŖtre plus que nous qui parlons ici.--Le portier de la maison de ville avait Ć©tĆ© placĆ© lĆ  par l'empereur. C'Ć©tait un vieux sous-officier de la vieille garde, lĆ©gionnaire d'Austerlitz, bonapartiste comme l'aigle. Il Ć©chappait dans l'occasion Ć  ce pauvre diable de ces paroles peu rĆ©flĆ©chies que la loi d'alors qualifiait _propos sĆ©ditieux_. Depuis que le profil impĆ©rial avait disparu de la lĆ©gion d'honneur, il ne s'habillait jamais _dans l'ordonnance_, comme il disait, afin de ne pas ĆŖtre forcĆ© de porter sa croix. Il avait Ć“tĆ© lui-mĆŖme dĆ©votement l'effigie impĆ©riale de la croix que NapolĆ©on lui avait donnĆ©e, cela faisait un trou, et il n'avait rien voulu mettre Ć  la place. Ā«PlutĆ“t mourir, disait-il, que de porter sur mon coeur les trois crapauds!Ā» Il raillait volontiers tout haut Louis XVIII. Ā«Vieux goutteux Ć  guĆŖtres d'anglais!Ā» disait-il, Ā«qu'il s'en aille en Prusse avec son salsifis!Ā» Heureux de rĆ©unir dans la mĆŖme imprĆ©cation les deux choses qu'il dĆ©testait le plus, la Prusse et l'Angleterre. Il en fit tant qu'il perdit sa place. Le voilĆ  sans pain sur le pavĆ© avec femme et enfants. L'Ć©vĆŖque le fit venir, le gronda doucement, et le nomma suisse de la cathĆ©drale. M. Myriel Ć©tait dans le diocĆØse le vrai pasteur, l'ami de tous. En neuf ans, Ć  force de saintes actions et de douces maniĆØres, monseigneur Bienvenu avait rempli la ville de Digne d'une sorte de vĆ©nĆ©ration tendre et filiale. Sa conduite mĆŖme envers NapolĆ©on avait Ć©tĆ© acceptĆ©e et comme tacitement pardonnĆ©e par le peuple, bon troupeau faible, qui adorait son empereur, mais qui aimait son Ć©vĆŖque. Chapitre XII Solitude de monseigneur Bienvenu Il y a presque toujours autour d'un Ć©vĆŖque une escouade de petits abbĆ©s comme autour d'un gĆ©nĆ©ral une volĆ©e de jeunes officiers. C'est lĆ  ce que ce charmant saint FranƧois de Sales appelle quelque part Ā«les prĆŖtres blancs-becsĀ». Toute carriĆØre a ses aspirants qui font cortĆØge aux arrivĆ©s. Pas une puissance qui n'ait son entourage; pas une fortune qui n'ait sa cour. Les chercheurs d'avenir tourbillonnent autour du prĆ©sent splendide. Toute mĆ©tropole a son Ć©tat-major. Tout Ć©vĆŖque un peu influent a prĆØs de lui sa patrouille de chĆ©rubins sĆ©minaristes, qui fait la ronde et maintient le bon ordre dans le palais Ć©piscopal, et qui monte la garde autour du sourire de monseigneur. AgrĆ©er Ć  un Ć©vĆŖque, c'est le pied Ć  l'Ć©trier pour un sous-diacre. Il faut bien faire son chemin; l'apostolat ne dĆ©daigne pas le canonicat. De mĆŖme qu'il y a ailleurs les gros bonnets, il y a dans l'Ć©glise les grosses mitres. Ce sont les Ć©vĆŖques bien en cour, riches, rentĆ©s, habiles, acceptĆ©s du monde, sachant prier, sans doute, mais sachant aussi solliciter, peu scrupuleux de faire faire antichambre en leur personne Ć  tout un diocĆØse, traits d'union entre la sacristie et la diplomatie, plutĆ“t abbĆ©s que prĆŖtres, plutĆ“t prĆ©lats qu'Ć©vĆŖques. Heureux qui les approche! Gens en crĆ©dit qu'ils sont, ils font pleuvoir autour d'eux, sur les empressĆ©s et les favorisĆ©s, et sur toute cette jeunesse qui sait plaire, les grasses paroisses, les prĆ©bendes, les archidiaconats, les aumĆ“neries et les fonctions cathĆ©drales, en attendant les dignitĆ©s Ć©piscopales. En avanƧant eux-mĆŖmes, ils font progresser leurs satellites; c'est tout un systĆØme solaire en marche. Leur rayonnement empourpre leur suite. Leur prospĆ©ritĆ© s'Ć©miette sur la cantonade en bonnes petites promotions. Plus grand diocĆØse au patron, plus grosse cure au favori. Et puis Rome est lĆ . Un Ć©vĆŖque qui sait devenir archevĆŖque, un archevĆŖque qui sait devenir cardinal, vous emmĆØne comme conclaviste, vous entrez dans la rote, vous avez le pallium, vous voilĆ  auditeur, vous voilĆ  camĆ©rier, vous voilĆ  monsignor, et de la Grandeur Ć  Imminence il n'y a qu'un pas, et entre Imminence et la SaintetĆ© il n'y a que la fumĆ©e d'un scrutin. Toute calotte peut rĆŖver la tiare. Le prĆŖtre est de nos jours le seul homme qui puisse rĆ©guliĆØrement devenir roi; et quel roi! le roi suprĆŖme. Aussi quelle pĆ©piniĆØre d'aspirations qu'un sĆ©minaire! Que d'enfants de choeur rougissants, que de jeunes abbĆ©s ont sur la tĆŖte le pot au lait de Perrette! Comme l'ambition s'intitule aisĆ©ment vocation, qui sait? de bonne foi peut-ĆŖtre et se trompant elle-mĆŖme, bĆ©ate qu'elle est! Monseigneur Bienvenu, humble, pauvre, particulier, n'Ć©tait pas comptĆ© parmi les grosses mitres. Cela Ć©tait visible Ć  l'absence complĆØte de jeunes prĆŖtres autour de lui. On a vu qu'Ć  Paris Ā«il n'avait pas prisĀ». Pas un avenir ne songeait Ć  se greffer sur ce vieillard solitaire. Pas une ambition en herbe ne faisait la folie de verdir Ć  son ombre. Ses chanoines et ses grands vicaires Ć©taient de bons vieux hommes, un peu peuple comme lui, murĆ©s comme lui dans ce diocĆØse sans issue sur le cardinafat, et qui ressemblaient Ć  leur Ć©vĆŖque, avec cette diffĆ©rence qu'eux Ć©taient finis, et que lui Ć©tait achevĆ©. On sentait si bien l'impossibilitĆ© de croĆ®tre prĆØs de monseigneur Bienvenu qu'Ć  peine sortis du sĆ©minaire, les jeunes gens ordonnĆ©s par lui se faisaient recommander aux archevĆŖques d'Aix ou d'Auch, et s'en allaient bien vite. Car enfin, nous le rĆ©pĆ©tons, on veut ĆŖtre poussĆ©. Un saint qui vit dans un excĆØs d'abnĆ©gation est un voisinage dangereux; il pourrait bien vous communiquer par contagion une pauvretĆ© incurable, l'ankylose des articulations utiles Ć  l'avancement, et, en somme, plus de renoncement que vous n'en voulez; et l'on fuit cette vertu galeuse. De lĆ  l'isolement de monseigneur Bienvenu. Nous vivons dans une sociĆ©tĆ© sombre. RĆ©ussir, voilĆ  l'enseignement qui tombe goutte Ć  goutte de la corruption en surplomb. Soit dit en passant, c'est une chose assez hideuse que le succĆØs. Sa fausse ressemblance avec le mĆ©rite trompe les hommes. Pour la foule, la rĆ©ussite a presque le mĆŖme profil que la suprĆ©matie. Le succĆØs, ce mĆ©nechme du talent, a une dupe: l'histoire. JuvĆ©nal et Tacite seuls en bougonnent. De nos jours, une philosophie Ć  peu prĆØs officielle est entrĆ©e en domesticitĆ© chez lui, porte la livrĆ©e du succĆØs, et fait le service de son antichambre. RĆ©ussissez: thĆ©orie. ProspĆ©ritĆ© suppose CapacitĆ©. Gagnez Ć  la loterie, vous voilĆ  un habile homme. Qui triomphe est vĆ©nĆ©rĆ©. Naissez coiffĆ©, tout est lĆ . Ayez de la chance, vous aurez le reste; soyez heureux, on vous croira grand. En dehors des cinq ou six exceptions immenses qui font l'Ć©clat d'un siĆØcle, l'admiration contemporaine n'est guĆØre que myopie. Dorure est or. Être le premier venu, cela ne gĆ¢te rien, pourvu qu'on soit le parvenu. Le vulgaire est un vieux Narcisse qui s'adore lui-mĆŖme et qui applaudit le vulgaire. Cette facultĆ© Ć©norme par laquelle on est MoĆÆse, Eschyle, Dante, Michel-Ange ou NapolĆ©on, la multitude la dĆ©cerne d'emblĆ©e et par acclamation Ć  quiconque atteint son but dans quoi que ce soit. Qu'un notaire se transfigure en dĆ©putĆ©, qu'un faux Corneille fasse _Tiridate_, qu'un eunuque parvienne Ć  possĆ©der un harem, qu'un Prud'homme militaire gagne par accident la bataille dĆ©cisive d'une Ć©poque, qu'un apothicaire invente les semelles de carton pour l'armĆ©e de Sambre-et-Meuse et se construise, avec ce carton vendu pour du cuir, quatre cent mille livres de rente, qu'un porte-balle Ć©pouse l'usure et la fasse accoucher de sept ou huit millions dont il est le pĆØre et dont elle est la mĆØre, qu'un prĆ©dicateur devienne Ć©vĆŖque par le nasillement, qu'un intendant de bonne maison soit si riche en sortant de service qu'on le fasse ministre des finances, les hommes appellent cela GĆ©nie, de mĆŖme qu'ils appellent BeautĆ© la figure de Mousqueton et MajestĆ© l'encolure de Claude. Ils confondent avec les constellations de l'abĆ®me les Ć©toiles que font dans la vase molle du bourbier les pattes des canards. Chapitre XIII Ce qu'il croyait Au point de vue de l'orthodoxie, nous n'avons point Ć  sonder M. l'Ć©vĆŖque de Digne. Devant une telle Ć¢me, nous ne nous sentons en humeur que de respect. La conscience du juste doit ĆŖtre crue sur parole. D'ailleurs, de certaines natures Ć©tant donnĆ©es, nous admettons le dĆ©veloppement possible de toutes les beautĆ©s de la vertu humaine dans une croyance diffĆ©rente de la nĆ“tre. Que pensait-il de ce dogme-ci ou de ce mystĆØre-lĆ ? Ces secrets du for intĆ©rieur ne sont connus que de la tombe où les Ć¢mes entrent nues. Ce dont nous sommes certain, c'est que jamais les difficultĆ©s de foi ne se rĆ©solvaient pour lui en hypocrisie. Aucune pourriture n'est possible au diamant. Il croyait le plus qu'il pouvait. _Credo in Patrem_, s'Ć©criait-il souvent. Puisant d'ailleurs dans les bonnes oeuvres cette quantitĆ© de satisfaction qui suffit Ć  la conscience, et qui vous dit tout bas: Ā«Tu es avec Dieu.Ā» Ce que nous croyons devoir noter, c'est que, en dehors, pour ainsi dire, et au-delĆ  de sa foi, l'Ć©vĆŖque avait un excĆØs d'amour. C'est par lĆ , _quia multum amavit_, qu'il Ć©tait jugĆ© vulnĆ©rable par les Ā«hommes sĆ©rieuxĀ», les Ā«personnes gravesĀ» et les Ā«gens raisonnablesĀ»; locutions favorites de notre triste monde où l'Ć©goĆÆsme reƧoit le mot d'ordre du pĆ©dantisme. Qu'Ć©tait-ce que cet excĆØs d'amour? C'Ć©tait une bienveillance sereine, dĆ©bordant les hommes, comme nous l'avons indiquĆ© dĆ©jĆ , et, dans l'occasion, s'Ć©tendant jusqu'aux choses. Il vivait sans dĆ©dain. Il Ć©tait indulgent pour la crĆ©ation de Dieu. Tout homme, mĆŖme le meilleur, a en lui une duretĆ© irrĆ©flĆ©chie qu'il tient en rĆ©serve pour l'animal. L'Ć©vĆŖque de Digne n'avait point cette duretĆ©-lĆ , particuliĆØre Ć  beaucoup de prĆŖtres pourtant. Il n'allait pas jusqu'au bramine, mais il semblait avoir mĆ©ditĆ© cette parole de l'EcclĆ©siaste: Ā«Sait-on où va l'Ć¢me des animaux?Ā» Les laideurs de l'aspect, les difformitĆ©s de l'instinct, ne le troublaient pas et ne l'indignaient pas. Il en Ć©tait Ć©mu, presque attendri. Il semblait que, pensif, il en allĆ¢t chercher, au-delĆ  de la vie apparente, la cause, l'explication ou l'excuse. Il semblait par moments demander Ć  Dieu des commutations. Il examinait sans colĆØre, et avec l'oeil du linguiste qui dĆ©chiffre un palimpseste, la quantitĆ© de chaos qui est encore dans la nature. Cette rĆŖverie faisait parfois sortir de lui des mots Ć©tranges. Un matin, il Ć©tait dans son jardin; il se croyait seul, mais sa soeur marchait derriĆØre lui sans qu'il la vĆ®t; tout Ć  coup, il s'arrĆŖta, et il regarda quelque chose Ć  terre; c'Ć©tait une grosse araignĆ©e, noire, velue, horrible. Sa soeur l'entendit qui disait: --Pauvre bĆŖte! ce n'est pas sa faute. Pourquoi ne pas dire ces enfantillages presque divins de la bontĆ©? PuĆ©rilitĆ©s, soit; mais ces puĆ©rilitĆ©s sublimes ont Ć©tĆ© celles de saint FranƧois d'Assise et de Marc-AurĆØle. Un jour il se donna une entorse pour n'avoir pas voulu Ć©craser une fourmi. Ainsi vivait cet homme juste. Quelquefois, il s'endormait dans son jardin, et alors il n'Ć©tait rien de plus vĆ©nĆ©rable. Monseigneur Bienvenu avait Ć©tĆ© jadis, Ć  en croire les rĆ©cits sur sa jeunesse et mĆŖme sur sa virilitĆ©, un homme passionnĆ©, peut-ĆŖtre violent. Sa mansuĆ©tude universelle Ć©tait moins un instinct de nature que le rĆ©sultat d'une grande conviction filtrĆ©e dans son coeur Ć  travers la vie et lentement tombĆ©e en lui, pensĆ©e Ć  pensĆ©e; car, dans un caractĆØre comme dans un rocher, il peut y avoir des trous de gouttes d'eau. Ces creusements-lĆ  sont ineffaƧables; ces formations-lĆ  sont indestructibles. En 1815, nous croyons l'avoir dit, il atteignit soixante-quinze ans, mais il n'en paraissait pas avoir plus de soixante. Il n'Ć©tait pas grand; il avait quelque embonpoint, et, pour le combattre, il faisait volontiers de longues marches Ć  pied, il avait le pas ferme et n'Ć©tait que fort peu courbĆ©, dĆ©tail d'où nous ne prĆ©tendons rien conclure; GrĆ©goire XVI, Ć  quatre-vingts ans, se tenait droit et souriant, ce qui ne l'empĆŖchait pas d'ĆŖtre un mauvais Ć©vĆŖque. Monseigneur Bienvenu avait ce que le peuple appelle Ā«une belle tĆŖteĀ», mais si aimable qu'on oubliait qu'elle Ć©tait belle. Quand il causait avec cette santĆ© enfantine qui Ć©tait une de ses grĆ¢ces, et dont nous avons dĆ©jĆ  parlĆ©, on se sentait Ć  l'aise prĆØs de lui, il semblait que de toute sa personne il sortĆ®t de la joie. Son teint colorĆ© et frais, toutes ses dents bien blanches qu'il avait conservĆ©es et que son rire faisait voir, lui donnaient cet air ouvert et facile qui fait dire d'un homme: Ā«C'est un bon enfantĀ», et d'un vieillard: Ā«C'est un bonhommeĀ». C'Ć©tait, on s'en souvient, l'effet qu'il avait fait Ć  NapolĆ©on. Au premier abord, et pour qui le voyait pour la premiĆØre fois, ce n'Ć©tait guĆØre qu'un bonhomme en effet. Mais si l'on restait quelques heures prĆØs de lui, et pour peu qu'on le vĆ®t pensif, le bonhomme se transfigurait peu Ć  peu et prenait je ne sais quoi d'imposant; son front large et sĆ©rieux, auguste par les cheveux blancs, devenait auguste aussi par la mĆ©ditation; la majestĆ© se dĆ©gageait de cette bontĆ©, sans que la bontĆ© cessĆ¢t de rayonner; on Ć©prouvait quelque chose de l'Ć©motion qu'on aurait si l'on voyait un ange souriant ouvrir lentement ses ailes sans cesser de sourire. Le respect, un respect inexprimable, vous pĆ©nĆ©trait par degrĆ©s et vous montait au coeur, et l'on sentait qu'on avait devant soi une de ces Ć¢mes fortes, Ć©prouvĆ©es et indulgentes, où la pensĆ©e est si grande qu'elle ne peut plus ĆŖtre que douce. Comme on l'a vu, la priĆØre, la cĆ©lĆ©bration des offices religieux, l'aumĆ“ne, la consolation aux affligĆ©s, la culture d'un coin de terre, la fraternitĆ©, la frugalitĆ©, l'hospitalitĆ©, le renoncement, la confiance, l'Ć©tude, le travail remplissaient chacune des journĆ©es de sa vie. _Remplissaient_ est bien le mot, et certes cette journĆ©e de l'Ć©vĆŖque Ć©tait bien pleine jusqu'aux bords de bonnes pensĆ©es, de bonnes paroles et de bonnes actions. Cependant elle n'Ć©tait pas complĆØte si le temps froid ou pluvieux l'empĆŖchait d'aller passer, le soir, quand les deux femmes s'Ć©taient retirĆ©es, une heure ou deux dans son jardin avant de s'endormir. Il semblait que ce fĆ»t une sorte de rite pour lui de se prĆ©parer au sommeil par la mĆ©ditation en prĆ©sence des grands spectacles du ciel nocturne. Quelquefois, Ć  une heure mĆŖme assez avancĆ©e de la nuit, si les deux vieilles filles ne dormaient pas, elles l'entendaient marcher lentement dans les allĆ©es. Il Ć©tait lĆ , seul avec lui-mĆŖme, recueilli, paisible, adorant, comparant la sĆ©rĆ©nitĆ© de son coeur Ć  la sĆ©rĆ©nitĆ© de l'Ć©ther, Ć©mu dans les tĆ©nĆØbres par les splendeurs visibles des constellations et les splendeurs invisibles de Dieu, ouvrant son Ć¢me aux pensĆ©es qui tombent de l'inconnu. Dans ces moments-lĆ , offrant son coeur Ć  l'heure où les fleurs nocturnes offrent leur parfum, allumĆ© comme une lampe au centre de la nuit Ć©toilĆ©e, se rĆ©pandant en extase au milieu du rayonnement universel de la crĆ©ation, il n'eĆ»t pu peut-ĆŖtre dire lui-mĆŖme ce qui se passait dans son esprit, il sentait quelque chose s'envoler hors de lui et quelque chose descendre en lui. MystĆ©rieux Ć©changes des gouffres de l'Ć¢me avec les gouffres de l'univers! Il songeait Ć  la grandeur et Ć  la prĆ©sence de Dieu; Ć  l'Ć©ternitĆ© future, Ć©trange mystĆØre; Ć  l'Ć©ternitĆ© passĆ©e, mystĆØre plus Ć©trange encore; Ć  tous les infinis qui s'enfonƧaient sous ses yeux dans tous les sens; et, sans chercher Ć  comprendre l'incomprĆ©hensible, il le regardait. Il n'Ć©tudiait pas Dieu, il s'en Ć©blouissait. Il considĆ©rait ces magnifiques rencontres des atomes qui donnent des aspects Ć  la matiĆØre, rĆ©vĆØlent les forces en les constatant, crĆ©ent les individualitĆ©s dans l'unitĆ©, les proportions dans l'Ć©tendue, l'innombrable dans l'infini, et par la lumiĆØre produisent la beautĆ©. Ces rencontres se nouent et se dĆ©nouent sans cesse; de lĆ  la vie et la mort. Il s'asseyait sur un banc de bois adossĆ© Ć  une treille dĆ©crĆ©pite, et il regardait les astres Ć  travers les silhouettes chĆ©tives et rachitiques de ses arbres fruitiers. Ce quart d'arpent, si pauvrement plantĆ©, si encombrĆ© de masures et de hangars, lui Ć©tait cher et lui suffisait. Que fallait-il de plus Ć  ce vieillard, qui partageait le loisir de sa vie, où il y avait si peu de loisir, entre le jardinage le jour et la contemplation la nuit? Cet Ć©troit enclos, ayant les cieux pour plafond, n'Ć©tait-ce pas assez pour pouvoir adorer Dieu tour Ć  tour dans ses oeuvres les plus charmantes et dans ses oeuvres les plus sublimes? N'est-ce pas lĆ  tout, en effet, et que dĆ©sirer au-delĆ ? Un petit jardin pour se promener, et l'immensitĆ© pour rĆŖver. ƀ ses pieds ce qu'on peut cultiver et cueillir; sur sa tĆŖte ce qu'on peut Ć©tudier et mĆ©diter; quelques fleurs sur la terre et toutes les Ć©toiles dans le ciel. Chapitre XIV Ce qu'il pensait Un dernier mot. Comme cette nature de dĆ©tails pourrait, particuliĆØrement au moment où nous sommes, et pour nous servir d'une expression actuellement Ć  la mode, donner Ć  l'Ć©vĆŖque de Digne une certaine physionomie Ā«panthĆ©isteĀ», et faire croire, soit Ć  son blĆ¢me, soit Ć  sa louange, qu'il y avait en lui une de ces philosophies personnelles, propres Ć  notre siĆØcle, qui germent quelquefois dans les esprits solitaires et s'y construisent et y grandissent jusqu'Ć  y remplacer les religions, nous insistons sur ceci que pas un de ceux qui ont connu monseigneur Bienvenu ne se fĆ»t cru autorisĆ© Ć  penser rien de pareil. Ce qui Ć©clairait cet homme, c'Ć©tait le coeur. Sa sagesse Ć©tait faite de la lumiĆØre qui vient de lĆ . Point de systĆØmes, beaucoup d'oeuvres. Les spĆ©culations abstruses contiennent du vertige; rien n'indique qu'il hasardĆ¢t son esprit dans les apocalypses. L'apĆ“tre peut ĆŖtre hardi, mais l'Ć©vĆŖque doit ĆŖtre timide. Il se fĆ»t probablement fait scrupule de sonder trop avant de certains problĆØmes rĆ©servĆ©s en quelque sorte aux grands esprits terribles. Il y a de l'horreur sacrĆ©e sous les porches de l'Ć©nigme; ces ouvertures sombres sont lĆ  bĆ©antes, mais quelque chose vous dit, Ć  vous passant de la vie, qu'on n'entre pas. Malheur Ć  qui y pĆ©nĆØtre! Les gĆ©nies, dans les profondeurs inouĆÆes de l'abstraction et de la spĆ©culation pure, situĆ©s pour ainsi dire au-dessus des dogmes, proposent leurs idĆ©es Ć  Dieu. Leur priĆØre offre audacieusement la discussion. Leur adoration interroge. Ceci est la religion directe, pleine d'anxiĆ©tĆ© et de responsabilitĆ© pour qui en tente les escarpements. La mĆ©ditation humaine n'a point de limite. ƀ ses risques et pĆ©rils, elle analyse et creuse son propre Ć©blouissement. On pourrait presque dire que, par une sorte de rĆ©action splendide, elle en Ć©blouit la nature; le mystĆ©rieux monde qui nous entoure rend ce qu'il reƧoit, il est probable que les contemplateurs sont contemplĆ©s. Quoi qu'il en soit, il y a sur la terre des hommes--sont-ce des hommes?--qui aperƧoivent distinctement au fond des horizons du rĆŖve les hauteurs de l'absolu, et qui ont la vision terrible de la montagne infinie. Monseigneur Bienvenu n'Ć©tait point de ces hommes-lĆ , monseigneur Bienvenu n'Ć©tait pas un gĆ©nie. Il eĆ»t redoutĆ© ces sublimitĆ©s d'où quelques-uns, trĆØs grands mĆŖme, comme Swedenborg et Pascal, ont glissĆ© dans la dĆ©mence. Certes, ces puissantes rĆŖveries ont leur utilitĆ© morale, et par ces routes ardues on s'approche de la perfection idĆ©ale. Lui, il prenait le sentier qui abrĆØge: l'Ć©vangile. Il n'essayait point de faire faire Ć  sa chasuble les plis du manteau d'Ɖlie, il ne projetait aucun rayon d'avenir sur le roulis tĆ©nĆ©breux des Ć©vĆ©nements, il ne cherchait pas Ć  condenser en flamme la lueur des choses, il n'avait rien du prophĆØte et rien du mage. Cette Ć¢me simple aimait, voilĆ  tout. Qu'il dilatĆ¢t la priĆØre jusqu'Ć  une aspiration surhumaine, cela est probable; mais on ne peut pas plus prier trop qu'aimer trop; et, si c'Ć©tait une hĆ©rĆ©sie de prier au-delĆ  des textes, sainte ThĆ©rĆØse et saint JĆ©rĆ“me seraient des hĆ©rĆ©tiques. Il se penchait sur ce qui gĆ©mit et sur ce qui expie. L'univers lui apparaissait comme une immense maladie; il sentait partout de la fiĆØvre, il auscultait partout de la souffrance, et, sans chercher Ć  deviner l'Ć©nigme, il tĆ¢chait de panser la plaie. Le redoutable spectacle des choses crƩƩes dĆ©veloppait en lui l'attendrissement; il n'Ć©tait occupĆ© qu'Ć  trouver pour lui-mĆŖme et Ć  inspirer aux autres la meilleure maniĆØre de plaindre et de soulager. Ce qui existe Ć©tait pour ce bon et rare prĆŖtre un sujet permanent de tristesse cherchant Ć  consoler. Il y a des hommes qui travaillent Ć  l'extraction de l'or; lui, il travaillait Ć  l'extraction de la pitiĆ©. L'universelle misĆØre Ć©tait sa mine. La douleur partout n'Ć©tait qu'une occasion de bontĆ© toujours. _Aimez-vous les uns les autres;_ il dĆ©clarait cela complet, ne souhaitait rien de plus, et c'Ć©tait lĆ  toute sa doctrine. Un jour, cet homme qui se croyait Ā«philosopheĀ», ce sĆ©nateur, dĆ©jĆ  nommĆ©, dit Ć  l'Ć©vĆŖque: --Mais voyez donc le spectacle du monde; guerre de tous contre tous; le plus fort a le plus d'esprit. Votre _aimez-vous les uns les autres_ est une bĆŖtise. --Eh bien, rĆ©pondit monseigneur Bienvenu sans disputer, si c'est une bĆŖtise, l'Ć¢me doit s'y enfermer comme la perle dans l'huĆ®tre. Il s'y enfermait donc, il y vivait, il s'en satisfaisait absolument, laissant de cĆ“tĆ© les questions prodigieuses qui attirent et qui Ć©pouvantent, les perspectives insondables de l'abstraction, les prĆ©cipices de la mĆ©taphysique, toutes ces profondeurs convergentes, pour l'apĆ“tre Ć  Dieu, pour l'athĆ©e au nĆ©ant: la destinĆ©e, le bien et le mal, la guerre de l'ĆŖtre contre l'ĆŖtre, la conscience de l'homme, le somnambulisme pensif de l'animal, la transformation par la mort, la rĆ©capitulation d'existences que contient le tombeau, la greffe incomprĆ©hensible des amours successifs sur le moi persistant, l'essence, la substance, le Nil et l'Ens, l'Ć¢me, la nature, la libertĆ©, la nĆ©cessitĆ©; problĆØmes Ć  pic, Ć©paisseurs sinistres, où se penchent les gigantesques archanges de l'esprit humain; formidables abĆ®mes que LucrĆØce, Manou, saint Paul et Dante contemplent avec cet oeil fulgurant qui semble, en regardant fixement l'infini, y faire Ć©clore des Ć©toiles. Monseigneur Bienvenu Ć©tait simplement un homme qui constatait du dehors les questions mystĆ©rieuses sans les scruter, sans les agiter, et sans en troubler son propre esprit, et qui avait dans l'Ć¢me le grave respect de l'ombre. Livre deuxiĆØme--La chute Chapitre I Le soir d'un jour de marche Dans les premiers jours du mois d'octobre 1815, une heure environ avant le coucher du soleil, un homme qui voyageait Ć  pied entrait dans la petite ville de Digne. Les rares habitants qui se trouvaient en ce moment Ć  leurs fenĆŖtres ou sur le seuil de leurs maisons regardaient ce voyageur avec une sorte d'inquiĆ©tude. Il Ć©tait difficile de rencontrer un passant d'un aspect plus misĆ©rable. C'Ć©tait un homme de moyenne taille, trapu et robuste, dans la force de l'Ć¢ge. Il pouvait avoir quarante-six ou quarante-huit ans. Une casquette Ć  visiĆØre de cuir rabattue cachait en partie son visage, brĆ»lĆ© par le soleil et le hĆ¢le, et ruisselant de sueur. Sa chemise de grosse toile jaune, rattachĆ©e au col par une petite ancre d'argent, laissait voir sa poitrine velue; il avait une cravate tordue en corde, un pantalon de coutil bleu, usĆ© et rĆ¢pĆ©, blanc Ć  un genou, trouĆ© Ć  l'autre, une vieille blouse grise en haillons, rapiĆ©cĆ©e Ć  l'un des coudes d'un morceau de drap vert cousu avec de la ficelle, sur le dos un sac de soldat fort plein, bien bouclĆ© et tout neuf, Ć  la main un Ć©norme bĆ¢ton noueux, les pieds sans bas dans des souliers ferrĆ©s, la tĆŖte tondue et la barbe longue. La sueur, la chaleur, le voyage Ć  pied, la poussiĆØre, ajoutaient je ne sais quoi de sordide Ć  cet ensemble dĆ©labrĆ©. Les cheveux Ć©taient ras, et pourtant hĆ©rissĆ©s; car ils commenƧaient Ć  pousser un peu, et semblaient n'avoir pas Ć©tĆ© coupĆ©s depuis quelque temps. Personne ne le connaissait. Ce n'Ć©tait Ć©videmment qu'un passant. D'où venait-il? Du midi. Des bords de la mer peut-ĆŖtre. Car il faisait son entrĆ©e dans Digne par la mĆŖme rue qui, sept mois auparavant, avait vu passer l'empereur NapolĆ©on allant de Cannes Ć  Paris. Cet homme avait dĆ» marcher tout le jour. Il paraissait trĆØs fatiguĆ©. Des femmes de l'ancien bourg qui est au bas de la ville l'avaient vu s'arrĆŖter sous les arbres du boulevard Gassendi et boire Ć  la fontaine qui est Ć  l'extrĆ©mitĆ© de la promenade. Il fallait qu'il eĆ»t bien soif, car des enfants qui le suivaient le virent encore s'arrĆŖter, et boire, deux cents pas plus loin, Ć  la fontaine de la place du marchĆ©. ArrivĆ© au coin de la rue Poichevert, il tourna Ć  gauche et se dirigea vers la mairie. Il y entra, puis sortit un quart d'heure aprĆØs. Un gendarme Ć©tait assis prĆØs de la porte sur le banc de pierre où le gĆ©nĆ©ral Drouot monta le 4 mars pour lire Ć  la foule effarĆ©e des habitants de Digne la proclamation du golfe Juan. L'homme Ć“ta sa casquette et salua humblement le gendarme. Le gendarme, sans rĆ©pondre Ć  son salut, le regarda avec attention, le suivit quelque temps des yeux, puis entra dans la maison de ville. Il y avait alors Ć  Digne une belle auberge Ć  l'enseigne de _la Croix-de-Colbas_. Cette auberge avait pour hĆ“telier un nommĆ© Jacquin Labarre, homme considĆ©rĆ© dans la ville pour sa parentĆ© avec un autre Labarre, qui tenait Ć  Grenoble l'auberge des _Trois-Dauphins_ et qui avait servi dans les guides. Lors du dĆ©barquement de l'empereur, beaucoup de bruits avaient couru dans le pays sur cette auberge des _Trois-Dauphins_. On contait que le gĆ©nĆ©ral Bertrand, dĆ©guisĆ© en charretier, y avait fait de frĆ©quents voyages au mois de janvier, et qu'il y avait distribuĆ© des croix d'honneur Ć  des soldats et des poignĆ©es de napolĆ©ons Ć  des bourgeois. La rĆ©alitĆ© est que l'empereur, entrĆ© dans Grenoble, avait refusĆ© de s'installer Ć  l'hĆ“tel de la prĆ©fecture; il avait remerciĆ© le maire en disant: _Je vais chez un brave homme que je connais_, et il Ć©tait allĆ© aux _Trois-Dauphins_. Cette gloire du Labarre des _Trois-Dauphins_ se reflĆ©tait Ć  vingt-cinq lieues de distance jusque sur le Labarre de la _Croix-de-Colbas_. On disait de lui dans la ville: _C'est le cousin de celui de Grenoble_. L'homme se dirigea vers cette auberge, qui Ć©tait la meilleure du pays. Il entra dans la cuisine, laquelle s'ouvrait de plain-pied sur la rue. Tous les fourneaux Ć©taient allumĆ©s; un grand feu flambait gaĆ®ment dans la cheminĆ©e. L'hĆ“te, qui Ć©tait en mĆŖme temps le chef, allait de l'Ć¢tre aux casseroles, fort occupĆ© et surveillant un excellent dĆ®ner destinĆ© Ć  des rouliers qu'on entendait rire et parler Ć  grand bruit dans une salle voisine. Quiconque a voyagĆ© sait que personne ne fait meilleure chĆØre que les rouliers. Une marmotte grasse, flanquĆ©e de perdrix blanches et de coqs de bruyĆØre, tournait sur une longue broche devant le feu; sur les fourneaux cuisaient deux grosses carpes du lac de Lauzet et une truite du lac d'Alloz. L'hĆ“te, entendant la porte s'ouvrir et entrer un nouveau venu, dit sans lever les yeux de ses fourneaux: --Que veut monsieur? --Manger et coucher, dit l'homme. --Rien de plus facile, reprit l'hĆ“te. En ce moment il tourna la tĆŖte, embrassa d'un coup d'oeil tout l'ensemble du voyageur, et ajouta: --... en payant. L'homme tira une grosse bourse de cuir de la poche de sa blouse et rĆ©pondit: --J'ai de l'argent. --En ce cas on est Ć  vous, dit l'hĆ“te. L'homme remit sa bourse en poche, se dĆ©chargea de son sac, le posa Ć  terre prĆØs de la porte, garda son bĆ¢ton Ć  la main, et alla s'asseoir sur une escabelle basse prĆØs du feu. Digne est dans la montagne. Les soirĆ©es d'octobre y sont froides. Cependant, tout en allant et venant, l'homme considĆ©rait le voyageur. --DĆ®ne-t-on bientĆ“t? dit l'homme. --Tout Ć  l'heure, dit l'hĆ“te. Pendant que le nouveau venu se chauffait, le dos tournĆ©, le digne aubergiste Jacquin Labarre tira un crayon de sa poche, puis il dĆ©chira le coin d'un vieux journal qui traĆ®nait sur une petite table prĆØs de la fenĆŖtre. Sur la marge blanche il Ć©crivit une ligne ou deux, plia sans cacheter et remit ce chiffon de papier Ć  un enfant qui paraissait lui servir tout Ć  la fois de marmiton et de laquais. L'aubergiste dit un mot Ć  l'oreille du marmiton, et l'enfant partit en courant dans la direction de la mairie. Le voyageur n'avait rien vu de tout cela. Il demanda encore une fois: --DĆ®ne-t-on bientĆ“t? --Tout Ć  l'heure, dit l'hĆ“te. L'enfant revint. Il rapportait le papier. L'hĆ“te le dĆ©plia avec empressement, comme quelqu'un qui attend une rĆ©ponse. Il parut lire attentivement, puis hocha la tĆŖte, et resta un moment pensif. Enfin il fit un pas vers le voyageur qui semblait plongĆ© dans des rĆ©flexions peu sereines. --Monsieur, dit-il, je ne puis vous recevoir. L'homme se dressa Ć  demi sur son sĆ©ant. --Comment! Avez-vous peur que je ne paye pas? Voulez-vous que je paye d'avance? J'ai de l'argent, vous dis-je. --Ce n'est pas cela. --Quoi donc? --Vous avez de l'argent.... --Oui, dit l'homme. --Et moi, dit l'hĆ“te, je n'ai pas de chambre. L'homme reprit tranquillement: --Mettez-moi Ć  l'Ć©curie. --Je ne puis. --Pourquoi? --Les chevaux prennent toute la place. --Eh bien, repartit l'homme, un coin dans le grenier. Une botte de paille. Nous verrons cela aprĆØs dĆ®ner. --Je ne puis vous donner Ć  dĆ®ner. Cette dĆ©claration, faite d'un ton mesurĆ©, mais ferme, parut grave Ć  l'Ć©tranger. Il se leva. --Ah bah! mais je meurs de faim, moi. J'ai marchĆ© dĆØs le soleil levĆ©. J'ai fait douze lieues. Je paye. Je veux manger. --Je n'ai rien, dit l'hĆ“te. L'homme Ć©clata de rire et se tourna vers la cheminĆ©e et les fourneaux. --Rien! et tout cela? --Tout cela m'est retenu. --Par qui? --Par ces messieurs les rouliers. --Combien sont-ils? --Douze. --Il y a lĆ  Ć  manger pour vingt. --Ils ont tout retenu et tout payĆ© d'avance. L'homme se rassit et dit sans hausser la voix: --Je suis Ć  l'auberge, j'ai faim, et je reste. L'hĆ“te alors se pencha Ć  son oreille, et lui dit d'un accent qui le fit tressaillir: --Allez-vous en. Le voyageur Ć©tait courbĆ© en cet instant et poussait quelques braises dans le feu avec le bout ferrĆ© de son bĆ¢ton, il se retourna vivement, et, comme il ouvrait la bouche pour rĆ©pliquer, l'hĆ“te le regarda fixement et ajouta toujours Ć  voix basse: --Tenez, assez de paroles comme cela. Voulez-vous que je vous dise votre nom? Vous vous appelez Jean Valjean. Maintenant voulez-vous que je vous dise qui vous ĆŖtes? En vous voyant entrer, je me suis doutĆ© de quelque chose, j'ai envoyĆ© Ć  la mairie, et voici ce qu'on m'a rĆ©pondu. Savez-vous lire? En parlant ainsi il tendait Ć  l'Ć©tranger, tout dĆ©pliĆ©, le papier qui venait de voyager de l'auberge Ć  la mairie, et de la mairie Ć  l'auberge. L'homme y jeta un regard. L'aubergiste reprit aprĆØs un silence: --J'ai l'habitude d'ĆŖtre poli avec tout le monde. Allez-vous-en. L'homme baissa la tĆŖte, ramassa le sac qu'il avait dĆ©posĆ© Ć  terre, et s'en alla. Il prit la grande rue. Il marchait devant lui au hasard, rasant de prĆØs les maisons, comme un homme humiliĆ© et triste. Il ne se retourna pas une seule fois. S'il s'Ć©tait retournĆ©, il aurait vu l'aubergiste de la _Croix-de-Colbas_ sur le seuil de sa porte, entourĆ© de tous les voyageurs de son auberge et de tous les passants de la rue, parlant vivement et le dĆ©signant du doigt, et, aux regards de dĆ©fiance et d'effroi du groupe, il aurait devinĆ© qu'avant peu son arrivĆ©e serait l'Ć©vĆ©nement de toute la ville. Il ne vit rien de tout cela. Les gens accablĆ©s ne regardent pas derriĆØre eux. Ils ne savent que trop que le mauvais sort les suit. Il chemina ainsi quelque temps, marchant toujours, allant Ć  l'aventure par des rues qu'il ne connaissait pas, oubliant la fatigue, comme cela arrive dans la tristesse. Tout Ć  coup il sentit vivement la faim. La nuit approchait. Il regarda autour de lui pour voir s'il ne dĆ©couvrirait pas quelque gĆ®te. La belle hĆ“tellerie s'Ć©tait fermĆ©e pour lui; il cherchait quelque cabaret bien humble, quelque bouge bien pauvre. PrĆ©cisĆ©ment une lumiĆØre s'allumait au bout de la rue; une branche de pin, pendue Ć  une potence en fer, se dessinait sur le ciel blanc du crĆ©puscule. Il y alla. C'Ć©tait en effet un cabaret. Le cabaret qui est dans la rue de Chaffaut. Le voyageur s'arrĆŖta un moment, et regarda par la vitre l'intĆ©rieur de la salle basse du cabaret, Ć©clairĆ©e par une petite lampe sur une table et par un grand feu dans la cheminĆ©e. Quelques hommes y buvaient. L'hĆ“te se chauffait. La flamme faisait bruire une marmite de fer accrochĆ©e Ć  la crĆ©maillĆØre. On entre dans ce cabaret, qui est aussi une espĆØce d'auberge, par deux portes. L'une donne sur la rue, l'autre s'ouvre sur une petite cour pleine de fumier. Le voyageur n'osa pas entrer par la porte de la rue. Il se glissa dans la cour, s'arrĆŖta encore, puis leva timidement le loquet et poussa la porte. --Qui va lĆ ? dit le maĆ®tre. --Quelqu'un qui voudrait souper et coucher. --C'est bon. Ici on soupe et on couche. Il entra. Tous les gens qui buvaient se retournĆØrent. La lampe l'Ć©clairait d'un cĆ“tĆ©, le feu de l'autre. On l'examina quelque temps pendant qu'il dĆ©faisait son sac. L'hĆ“te lui dit: --VoilĆ  du feu. Le souper cuit dans la marmite. Venez vous chauffer, camarade. Il alla s'asseoir prĆØs de l'Ć¢tre. Il allongea devant le feu ses pieds meurtris par la fatigue; une bonne odeur sortait de la marmite. Tout ce qu'on pouvait distinguer de son visage sous sa casquette baissĆ©e prit une vague apparence de bien-ĆŖtre mĆŖlĆ©e Ć  cet autre aspect si poignant que donne l'habitude de la souffrance. C'Ć©tait d'ailleurs un profil ferme, Ć©nergique et triste. Cette physionomie Ć©tait Ć©trangement composĆ©e; elle commenƧait par paraĆ®tre humble et finissait par sembler sĆ©vĆØre. L'oeil luisait sous les sourcils comme un feu sous une broussaille. Cependant un des hommes attablĆ©s Ć©tait un poissonnier qui, avant d'entrer au cabaret de la rue de Chaffaut, Ć©tait allĆ© mettre son cheval Ć  l'Ć©curie chez Labarre. Le hasard faisait que le matin mĆŖme il avait rencontrĆ© cet Ć©tranger de mauvaise mine, cheminant entre Bras dasse et... j'ai oubliĆ© le nom. (Je crois que c'est Escoublon). Or, en le rencontrant, l'homme, qui paraissait dĆ©jĆ  trĆØs fatiguĆ©, lui avait demandĆ© de le prendre en croupe; Ć  quoi le poissonnier n'avait rĆ©pondu qu'en doublant le pas. Ce poissonnier faisait partie, une demi-heure auparavant, du groupe qui entourait Jacquin Labarre, et lui-mĆŖme avait racontĆ© sa dĆ©sagrĆ©able rencontre du matin aux gens de _la Croix-de-Colbas_. Il fit de sa place au cabaretier un signe imperceptible. Le cabaretier vint Ć  lui. Ils Ć©changĆØrent quelques paroles Ć  voix basse. L'homme Ć©tait retombĆ© dans ses rĆ©flexions. Le cabaretier revint Ć  la cheminĆ©e, posa brusquement sa main sur l'Ć©paule de l'homme, et lui dit: --Tu vas t'en aller d'ici. L'Ć©tranger se retourna et rĆ©pondit avec douceur. --Ah! vous savez? --Oui. --On m'a renvoyĆ© de l'autre auberge. --Et l'on te chasse de celle-ci. --Où voulez-vous que j'aille? --Ailleurs. L'homme prit son bĆ¢ton et son sac, et s'en alla. Comme il sortait, quelques enfants, qui l'avaient suivi depuis _la Croix-de-Colbas_ et qui semblaient l'attendre, lui jetĆØrent des pierres. Il revint sur ses pas avec colĆØre et les menaƧa de son bĆ¢ton; les enfants se dispersĆØrent comme une volĆ©e d'oiseaux. Il passa devant la prison. ƀ la porte pendait une chaĆ®ne de fer attachĆ©e Ć  une cloche. Il sonna. Un guichet s'ouvrit. --Monsieur le guichetier, dit-il en Ć“tant respectueusement sa casquette, voudriez-vous bien m'ouvrir et me loger pour cette nuit? Une voix rĆ©pondit: --Une prison n'est pas une auberge. Faites-vous arrĆŖter. On vous ouvrira. Le guichet se referma. Il entra dans une petite rue où il y a beaucoup de jardins. Quelques-uns ne sont enclos que de haies, ce qui Ć©gaye la rue. Parmi ces jardins et ces haies, il vit une petite maison d'un seul Ć©tage dont la fenĆŖtre Ć©tait Ć©clairĆ©e. Il regarda par cette vitre comme il avait fait pour le cabaret. C'Ć©tait une grande chambre blanchie Ć  la chaux, avec un lit drapĆ© d'indienne imprimĆ©e, et un berceau dans un coin, quelques chaises de bois et un fusil Ć  deux coups accrochĆ© au mur. Une table Ć©tait servie au milieu de la chambre. Une lampe de cuivre Ć©clairait la nappe de grosse toile blanche, le broc d'Ć©tain luisant comme l'argent et plein de vin et la soupiĆØre brune qui fumait. ƀ cette table Ć©tait assis un homme d'une quarantaine d'annĆ©es, Ć  la figure joyeuse et ouverte, qui faisait sauter un petit enfant sur ses genoux. PrĆØs de lui, une femme toute jeune allaitait un autre enfant. Le pĆØre riait, l'enfant riait, la mĆØre souriait. L'Ć©tranger resta un moment rĆŖveur devant ce spectacle doux et calmant. Que se passait-il en lui? Lui seul eĆ»t pu le dire. Il est probable qu'il pensa que cette maison joyeuse serait hospitaliĆØre, et que lĆ  où il voyait tant de bonheur il trouverait peut-ĆŖtre un peu de pitiĆ©. Il frappa au carreau un petit coup trĆØs faible. On n'entendit pas. Il frappa un second coup. Il entendit la femme qui disait: --Mon homme, il me semble qu'on frappe. --Non, rĆ©pondit le mari. Il frappa un troisiĆØme coup. Le mari se leva, prit la lampe, et alla Ć  la porte qu'il ouvrit. C'Ć©tait un homme de haute taille, demi-paysan, demi-artisan. Il portait un vaste tablier de cuir qui montait jusqu'Ć  son Ć©paule gauche, et dans lequel faisaient ventre un marteau, un mouchoir rouge, une poire Ć  poudre, toutes sortes d'objets que la ceinture retenait comme dans une poche. Il renversait la tĆŖte en arriĆØre; sa chemise largement ouverte et rabattue montrait son cou de taureau, blanc et nu. Il avait d'Ć©pais sourcils, d'Ć©normes favoris noirs, les yeux Ć  fleur de tĆŖte, le bas du visage en museau, et sur tout cela cet air d'ĆŖtre chez soi qui est une chose inexprimable. --Monsieur, dit le voyageur, pardon. En payant, pourriez-vous me donner une assiettĆ©e de soupe et un coin pour dormir dans ce hangar qui est lĆ  dans ce jardin? Dites, pourriez-vous? En payant? --Qui ĆŖtes-vous? demanda le maĆ®tre du logis. L'homme rĆ©pondit: --J'arrive de Puy-Moisson. J'ai marchĆ© toute la journĆ©e. J'ai fait douze lieues. Pourriez-vous? En payant? --Je ne refuserais pas, dit le paysan, de loger quelqu'un de bien qui payerait. Mais pourquoi n'allez-vous pas Ć  l'auberge. --Il n'y a pas de place. --Bah! pas possible. Ce n'est pas jour de foire ni de marchĆ©. Êtes-vous allĆ© chez Labarre? --Oui. --Eh bien? Le voyageur rĆ©pondit avec embarras: --Je ne sais pas, il ne m'a pas reƧu. --Êtes-vous allĆ© chez chose, de la rue de Chaffaut? L'embarras de l'Ć©tranger croissait. Il balbutia: --Il ne m'a pas reƧu non plus. Le visage du paysan prit une expression de dĆ©fiance, il regarda le nouveau venu de la tĆŖte aux pieds, et tout Ć  coup il s'Ć©cria avec une sorte de frĆ©missement: --Est-ce que vous seriez l'homme?... Il jeta un nouveau coup d'oeil sur l'Ć©tranger, fit trois pas en arriĆØre, posa la lampe sur la table et dĆ©crocha son fusil du mur. Cependant aux paroles du paysan: _Est-ce que vous seriez l'homme?..._ la femme s'Ć©tait levĆ©e, avait pris ses deux enfants dans ses bras et s'Ć©tait rĆ©fugiĆ©e prĆ©cipitamment derriĆØre son mari, regardant l'Ć©tranger avec Ć©pouvante, la gorge nue, les yeux effarĆ©s, en murmurant tout bas:_ Tso-maraude_. Tout cela se fit en moins de temps qu'il ne faut pour se le figurer. AprĆØs avoir examinĆ© quelques instants l'homme comme on examine une vipĆØre, le maĆ®tre du logis revint Ć  la porte et dit: --Va-t'en. --Par grĆ¢ce, reprit l'homme, un verre d'eau. --Un coup de fusil! dit le paysan. Puis il referma la porte violemment, et l'homme l'entendit tirer deux gros verrous. Un moment aprĆØs, la fenĆŖtre se ferma au volet, et un bruit de barre de fer qu'on posait parvint au dehors. La nuit continuait de tomber. Le vent froid des Alpes soufflait. ƀ la lueur du jour expirant, l'Ć©tranger aperƧut dans un des jardins qui bordent la rue une sorte de hutte qui lui parut maƧonnĆ©e en mottes de gazon. Il franchit rĆ©solument une barriĆØre de bois et se trouva dans le jardin. Il s'approcha de la hutte; elle avait pour porte une Ć©troite ouverture trĆØs basse et elle ressemblait Ć  ces constructions que les cantonniers se bĆ¢tissent au bord des routes. Il pensa sans doute que c'Ć©tait en effet le logis d'un cantonnier; il souffrait du froid et de la faim; il s'Ć©tait rĆ©signĆ© Ć  la faim, mais c'Ć©tait du moins lĆ  un abri contre le froid. Ces sortes de logis ne sont habituellement pas occupĆ©s la nuit. Il se coucha Ć  plat ventre et se glissa dans la hutte. Il y faisait chaud, et il y trouva un assez bon lit de paille. Il resta un moment Ć©tendu sur ce lit, sans pouvoir faire un mouvement tant il Ć©tait fatiguĆ©. Puis, comme son sac sur son dos le gĆŖnait et que c'Ć©tait d'ailleurs un oreiller tout trouvĆ©, il se mit Ć  dĆ©boucler une des courroies. En ce moment un grondement farouche se fit entendre. Il leva les yeux. La tĆŖte d'un dogue Ć©norme se dessinait dans l'ombre Ć  l'ouverture de la hutte. C'Ć©tait la niche d'un chien. Il Ć©tait lui-mĆŖme vigoureux et redoutable; il s'arma de son bĆ¢ton, il se fit de son sac un bouclier, et sortit de la niche comme il put, non sans Ć©largir les dĆ©chirures de ses haillons. Il sortit Ć©galement du jardin, mais Ć  reculons, obligĆ©, pour tenir le dogue en respect, d'avoir recours Ć  cette manoeuvre du bĆ¢ton que les maĆ®tres en ce genre d'escrime appellent _la rose couverte_. Quand il eut, non sans peine, repassĆ© la barriĆØre et qu'il se retrouva dans la rue, seul, sans gĆ®te, sans toit, sans abri, chassĆ© mĆŖme de ce lit de paille et de cette niche misĆ©rable, il se laissa tomber plutĆ“t qu'il ne s'assit sur une pierre, et il paraĆ®t qu'un passant qui traversait l'entendit s'Ć©crier: --Je ne suis pas mĆŖme un chien! BientĆ“t il se releva et se remit Ć  marcher. Il sortit de la ville, espĆ©rant trouver quelque arbre ou quelque meule dans les champs, et s'y abriter. Il chemina ainsi quelque temps, la tĆŖte toujours baissĆ©e. Quand il se sentit loin de toute habitation humaine, il leva les yeux et chercha autour de lui. Il Ć©tait dans un champ; il avait devant lui une de ces collines basses couvertes de chaume coupĆ© ras, qui aprĆØs la moisson ressemblent Ć  des tĆŖtes tondues. L'horizon Ć©tait tout noir; ce n'Ć©tait pas seulement le sombre de la nuit; c'Ć©taient des nuages trĆØs bas qui semblaient s'appuyer sur la colline mĆŖme et qui montaient, emplissant tout le ciel. Cependant, comme la lune allait se lever et qu'il flottait encore au zĆ©nith un reste de clartĆ© crĆ©pusculaire, ces nuages formaient au haut du ciel une sorte de voĆ»te blanchĆ¢tre d'où tombait sur la terre une lueur. La terre Ć©tait donc plus Ć©clairĆ©e que le ciel, ce qui est un effet particuliĆØrement sinistre, et la colline, d'un pauvre et chĆ©tif contour, se dessinait vague et blafarde sur l'horizon tĆ©nĆ©breux. Tout cet ensemble Ć©tait hideux, petit, lugubre et bornĆ©. Rien dans le champ ni sur la colline qu'un arbre difforme qui se tordait en frissonnant Ć  quelques pas du voyageur. Cet homme Ć©tait Ć©videmment trĆØs loin d'avoir de ces dĆ©licates habitudes d'intelligence et d'esprit qui font qu'on est sensible aux aspects mystĆ©rieux des choses; cependant il y avait dans ce ciel, dans cette colline, dans cette plaine et dans cet arbre, quelque chose de si profondĆ©ment dĆ©solĆ© qu'aprĆØs un moment d'immobilitĆ© et de rĆŖverie, il rebroussa chemin brusquement. Il y a des instants où la nature semble hostile. Il revint sur ses pas. Les portes de Digne Ć©taient fermĆ©es. Digne, qui a soutenu des siĆØges dans les guerres de religion, Ć©tait encore entourĆ©e en 1815 de vieilles murailles flanquĆ©es de tours carrĆ©es qu'on a dĆ©molies depuis. Il passa par une brĆØche et rentra dans la ville. Il pouvait ĆŖtre huit heures du soir. Comme il ne connaissait pas les rues, il recommenƧa sa promenade Ć  l'aventure. Il parvint ainsi Ć  la prĆ©fecture, puis au sĆ©minaire. En passant sur la place de la cathĆ©drale, il montra le poing Ć  l'Ć©glise. Il y a au coin de cette place une imprimerie. C'est lĆ  que furent imprimĆ©es pour la premiĆØre fois les proclamations de l'empereur et de la garde impĆ©riale Ć  l'armĆ©e, apportĆ©es de l'Ć®le d'Elbe et dictĆ©es par NapolĆ©on lui-mĆŖme. ƉpuisĆ© de fatigue et n'espĆ©rant plus rien, il se coucha sur le banc de pierre qui est Ć  la porte de cette imprimerie. Une vieille femme sortait de l'Ć©glise en ce moment. Elle vit cet homme Ć©tendu dans l'ombre. --Que faites-vous lĆ , mon ami? dit-elle. Il rĆ©pondit durement et avec colĆØre: --Vous le voyez, bonne femme, je me couche. La bonne femme, bien digne de ce nom en effet, Ć©tait madame la marquise de R. --Sur ce banc? reprit-elle. --J'ai eu pendant dix-neuf ans un matelas de bois, dit l'homme, j'ai aujourd'hui un matelas de pierre. --Vous avez Ć©tĆ© soldat? --Oui, bonne femme. Soldat. --Pourquoi n'allez-vous pas Ć  l'auberge? --Parce que je n'ai pas d'argent. --HĆ©las, dit madame de R., je n'ai dans ma bourse que quatre sous. --Donnez toujours. L'homme prit les quatre sous. Madame de R. continua: --Vous ne pouvez vous loger avec si peu dans une auberge. Avez-vous essayĆ© pourtant? Il est impossible que vous passiez ainsi la nuit. Vous avez sans doute froid et faim. On aurait pu vous loger par charitĆ©. --J'ai frappĆ© Ć  toutes les portes. --Eh bien? --Partout on m'a chassĆ©. La Ā«bonne femmeĀ» toucha le bras de l'homme et lui montra de l'autre cĆ“tĆ© de la place une petite maison basse Ć  cĆ“tĆ© de l'Ć©vĆŖchĆ©. --Vous avez, reprit-elle, frappĆ© Ć  toutes les portes? --Oui. --Avez-vous frappĆ© Ć  celle-lĆ ? --Non. --Frappez-y. Chapitre II La prudence conseillĆ©e Ć  la sagesse Ce soir-lĆ , M. l'Ć©vĆŖque de Digne, aprĆØs sa promenade en ville, Ć©tait restĆ© assez tard enfermĆ© dans sa chambre. Il s'occupait d'un grand travail sur les _Devoirs_, lequel est malheureusement demeurĆ© inachevĆ©. Il dĆ©pouillait soigneusement tout ce que les PĆØres et les Docteurs ont dit sur cette grave matiĆØre. Son livre Ć©tait divisĆ© en deux parties; premiĆØrement les devoirs de tous, deuxiĆØmement les devoirs de chacun, selon la classe Ć  laquelle il appartient. Les devoirs de tous sont les grands devoirs. Il y en a quatre. Saint Matthieu les indique: devoirs envers Dieu (Matth., VI), devoirs envers soi-mĆŖme (Matth., V, 29, 30), devoirs envers le prochain (Matth., VII, 12), devoirs envers les crĆ©atures (Matth., VI, 20, 25). Pour les autres devoirs, l'Ć©vĆŖque les avait trouvĆ©s indiquĆ©s et prescrits ailleurs; aux souverains et aux sujets, dans l'ƉpĆ®tre aux Romains; aux magistrats, aux Ć©pouses, aux mĆØres et aux jeunes hommes, par saint Pierre; aux maris, aux pĆØres, aux enfants et aux serviteurs, dans l'ƉpĆ®tre aux ƉphĆ©siens; aux fidĆØles, dans l'ƉpĆ®tre aux HĆ©breux; aux vierges, dans l'ƉpĆ®tre aux Corinthiens. Il faisait laborieusement de toutes ces prescriptions un ensemble harmonieux qu'il voulait prĆ©senter aux Ć¢mes. Il travaillait encore Ć  huit heures, Ć©crivant assez incommodĆ©ment sur de petits carrĆ©s de papier avec un gros livre ouvert sur ses genoux, quand madame Magloire entra, selon son habitude, pour prendre l'argenterie dans le placard prĆØs du lit. Un moment aprĆØs, l'Ć©vĆŖque, sentant que le couvert Ć©tait mis et que sa soeur l'attendait peut-ĆŖtre, ferma son livre, se leva de sa table et entra dans la salle Ć  manger. La salle Ć  manger Ć©tait une piĆØce oblongue Ć  cheminĆ©e, avec porte sur la rue (nous l'avons dit), et fenĆŖtre sur le jardin. Madame Magloire achevait en effet de mettre le couvert. Tout en vaquant au service, elle causait avec mademoiselle Baptistine. Une lampe Ć©tait sur la table; la table Ć©tait prĆØs de la cheminĆ©e. Un assez bon feu Ć©tait allumĆ©. On peut se figurer facilement ces deux femmes qui avaient toutes deux passĆ© soixante ans: madame Magloire petite, grasse, vive; mademoiselle Baptistine, douce, mince, frĆŖle, un peu plus grande que son frĆØre, vĆŖtue d'une robe de soie puce, couleur Ć  la mode en 1806, qu'elle avait achetĆ©e alors Ć  Paris et qui lui durait encore. Pour emprunter des locutions vulgaires qui ont le mĆ©rite de dire avec un seul mot une idĆ©e qu'une page suffirait Ć  peine Ć  exprimer, madame Magloire avait l'air d'une _paysanne_ et mademoiselle Baptistine d'une _dame_. Madame Magloire avait un bonnet blanc Ć  tuyaux, au cou une jeannette d'or, le seul bijou de femme qu'il y eĆ»t dans la maison, un fichu trĆØs blanc sortant de la robe de bure noire Ć  manches larges et courtes, un tablier de toile de coton Ć  carreaux rouges et verts, nouĆ© Ć  la ceinture d'un ruban vert, avec piĆØce d'estomac pareille rattachĆ©e par deux Ć©pingles aux deux coins d'en haut, aux pieds de gros souliers et des bas jaunes comme les femmes de Marseille. La robe de mademoiselle Baptistine Ć©tait coupĆ©e sur les patrons de 1806, taille courte, fourreau Ć©troit, manches Ć  Ć©paulettes, avec pattes et boutons. Elle cachait ses cheveux gris sous une perruque frisĆ©e dite Ć  _l'enfant_. Madame Magloire avait l'air intelligent, vif et bon; les deux angles de sa bouche inĆ©galement relevĆ©s et la lĆØvre supĆ©rieure plus grosse que la lĆØvre infĆ©rieure lui donnaient quelque chose de bourru et d'impĆ©rieux. Tant que monseigneur se taisait, elle lui parlait rĆ©solument avec un mĆ©lange de respect et de libertĆ©; mais dĆØs que monseigneur parlait, on a vu cela, elle obĆ©issait passivement comme mademoiselle. Mademoiselle Baptistine ne parlait mĆŖme pas. Elle se bornait Ć  obĆ©ir et Ć  complaire. MĆŖme quand elle Ć©tait jeune, elle n'Ć©tait pas jolie, elle avait de gros yeux bleus Ć  fleur de tĆŖte et le nez long et busquĆ©; mais tout son visage, toute sa personne, nous l'avons dit en commenƧant, respiraient une ineffable bontĆ©. Elle avait toujours Ć©tĆ© prĆ©destinĆ©e Ć  la mansuĆ©tude; mais la foi, la charitĆ©, l'espĆ©rance, ces trois vertus qui chauffent doucement l'Ć¢me, avaient Ć©levĆ© peu Ć  peu cette mansuĆ©tude jusqu'Ć  la saintetĆ©. La nature n'en avait fait qu'une brebis, la religion en avait fait un ange. Pauvre sainte fille! doux souvenir disparu! Mademoiselle Baptistine a depuis racontĆ© tant de fois ce qui s'Ć©tait passĆ© Ć  l'Ć©vĆŖchĆ© cette soirĆ©e-lĆ , que plusieurs personnes qui vivent encore s'en rappellent les moindres dĆ©tails. Au moment où M. l'Ć©vĆŖque entra, madame Magloire parlait avec quelque vivacitĆ©. Elle entretenait _mademoiselle_ d'un sujet qui lui Ć©tait familier et auquel l'Ć©vĆŖque Ć©tait accoutumĆ©. Il s'agissait du loquet de la porte d'entrĆ©e. Il paraĆ®t que, tout en allant faire quelques provisions pour le souper, madame Magloire avait entendu dire des choses en divers lieux. On parlait d'un rĆ“deur de mauvaise mine; qu'un vagabond suspect serait arrivĆ©, qu'il devait ĆŖtre quelque part dans la ville, et qu'il se pourrait qu'il y eĆ»t de mĆ©chantes rencontres pour ceux qui s'aviseraient de rentrer tard chez eux cette nuit-lĆ . Que la police Ć©tait bien mal faite du reste, attendu que M. le prĆ©fet et M. le maire ne s'aimaient pas, et cherchaient Ć  se nuire en faisant arriver des Ć©vĆ©nements. Que c'Ć©tait donc aux gens sages Ć  faire la police eux-mĆŖmes et Ć  se bien garder, et qu'il faudrait avoir soin de dĆ»ment clore, verrouiller et barricader sa maison, _et de bien fermer ses portes_. Madame Magloire appuya sur ce dernier mot; mais l'Ć©vĆŖque venait de sa chambre où il avait eu assez froid, il s'Ć©tait assis devant la cheminĆ©e et se chauffait, et puis il pensait Ć  autre chose. Il ne releva pas le mot Ć  effet que madame Magloire venait de laisser tomber. Elle le rĆ©pĆ©ta. Alors, mademoiselle Baptistine, voulant satisfaire madame Magloire sans dĆ©plaire Ć  son frĆØre, se hasarda Ć  dire timidement: --Mon frĆØre, entendez-vous ce que dit madame Magloire? --J'en ai entendu vaguement quelque chose, rĆ©pondit l'Ć©vĆŖque. Puis tournant Ć  demi sa chaise, mettant ses deux mains sur ses genoux, et levant vers la vieille servante son visage cordial et facilement joyeux, que le feu Ć©clairait d'en bas: --Voyons. Qu'y a-t-il? qu'y a-t-il? Nous sommes donc dans quelque gros danger? Alors madame Magloire recommenƧa toute l'histoire, en l'exagĆ©rant quelque peu, sans s'en douter. Il paraĆ®trait qu'un bohĆ©mien, un va-nu-pieds, une espĆØce de mendiant dangereux serait en ce moment dans la ville. Il s'Ć©tait prĆ©sentĆ© pour loger chez Jacquin Labarre qui n'avait pas voulu le recevoir. On l'avait vu arriver par le boulevard Gassendi et rĆ“der dans les rues Ć  la brume. Un homme de sac et de corde avec une figure terrible. --Vraiment? dit l'Ć©vĆŖque. Ce consentement Ć  l'interroger encouragea madame Magloire; cela lui semblait indiquer que l'Ć©vĆŖque n'Ć©tait pas loin de s'alarmer; elle poursuivit triomphante: --Oui, monseigneur. C'est comme cela. Il y aura quelque malheur cette nuit dans la ville. Tout le monde le dit. Avec cela que la police est si mal faite (rĆ©pĆ©tition inutile). Vivre dans un pays de montagnes, et n'avoir pas mĆŖme de lanternes la nuit dans les rues! On sort. Des fours, quoi! Et je dis, monseigneur, et mademoiselle que voilĆ  dit comme moi.... --Moi, interrompit la soeur, je ne dis rien. Ce que mon frĆØre fait est bien fait. Madame Magloire continua comme s'il n'y avait pas eu de protestation: --Nous disons que cette maison-ci n'est pas sĆ»re du tout; que, si monseigneur le permet, je vais aller dire Ć  Paulin Musebois, le serrurier, qu'il vienne remettre les anciens verrous de la porte; on les a lĆ , c'est une minute; et je dis qu'il faut des verrous, monseigneur, ne serait-ce que pour cette nuit; car je dis qu'une porte qui s'ouvre du dehors avec un loquet, par le premier passant venu, rien n'est plus terrible; avec cela que monseigneur a l'habitude de toujours dire d'entrer, et que d'ailleurs, mĆŖme au milieu de la nuit, Ć“ mon Dieu! on n'a pas besoin d'en demander la permission.... En ce moment, on frappa Ć  la porte un coup assez violent. --Entrez, dit l'Ć©vĆŖque. Chapitre III HĆ©roĆÆsme de l'obĆ©issance passive La porte s'ouvrit. Elle s'ouvrit vivement, toute grande, comme si quelqu'un la poussait avec Ć©nergie et rĆ©solution. Un homme entra. Cet homme, nous le connaissons dĆ©jĆ . C'est le voyageur que nous avons vu tout Ć  l'heure errer cherchant un gĆ®te. Il entra, fit un pas, et s'arrĆŖta, laissant la porte ouverte derriĆØre lui. Il avait son sac sur l'Ć©paule, son bĆ¢ton Ć  la main, une expression rude, hardie, fatiguĆ©e et violente dans les yeux. Le feu de la cheminĆ©e l'Ć©clairait. Il Ć©tait hideux. C'Ć©tait une sinistre apparition. Madame Magloire n'eut pas mĆŖme la force de jeter un cri. Elle tressaillit, et resta bĆ©ante. Mademoiselle Baptistine se retourna, aperƧut l'homme qui entrait et se dressa Ć  demi d'effarement, puis, ramenant peu Ć  peu sa tĆŖte vers la cheminĆ©e, elle se mit Ć  regarder son frĆØre et son visage redevint profondĆ©ment calme et serein. L'Ć©vĆŖque fixait sur l'homme un oeil tranquille. Comme il ouvrait la bouche, sans doute pour demander au nouveau venu ce qu'il dĆ©sirait, l'homme appuya ses deux mains Ć  la fois sur son bĆ¢ton, promena ses yeux tour Ć  tour sur le vieillard et les femmes, et, sans attendre que l'Ć©vĆŖque parlĆ¢t, dit d'une voix haute: --Voici. Je m'appelle Jean Valjean. Je suis un galĆ©rien. J'ai passĆ© dix-neuf ans au bagne. Je suis libĆ©rĆ© depuis quatre jours et en route pour Pontarlier qui est ma destination. Quatre jours et que je marche depuis Toulon. Aujourd'hui, j'ai fait douze lieues Ć  pied. Ce soir, en arrivant dans ce pays, j'ai Ć©tĆ© dans une auberge, on m'a renvoyĆ© Ć  cause de mon passeport jaune que j'avais montrĆ© Ć  la mairie. Il avait fallu. J'ai Ć©tĆ© Ć  une autre auberge. On m'a dit: Va-t-en! Chez l'un, chez l'autre. Personne n'a voulu de moi. J'ai Ć©tĆ© Ć  la prison, le guichetier n'a pas ouvert. J'ai Ć©tĆ© dans la niche d'un chien. Ce chien m'a mordu et m'a chassĆ©, comme s'il avait Ć©tĆ© un homme. On aurait dit qu'il savait qui j'Ć©tais. Je m'en suis allĆ© dans les champs pour coucher Ć  la belle Ć©toile. Il n'y avait pas d'Ć©toile. J'ai pensĆ© qu'il pleuvrait, et qu'il n'y avait pas de bon Dieu pour empĆŖcher de pleuvoir, et je suis rentrĆ© dans la ville pour y trouver le renfoncement d'une porte. LĆ , dans la place, j'allais me coucher sur une pierre. Une bonne femme m'a montrĆ© votre maison et m'a dit: Ā«Frappe lĆ Ā». J'ai frappĆ©. Qu'est-ce que c'est ici? Êtes-vous une auberge? J'ai de l'argent. Ma masse. Cent neuf francs quinze sous que j'ai gagnĆ©s au bagne par mon travail en dix-neuf ans. Je payerai. Qu'est-ce que cela me fait? J'ai de l'argent. Je suis trĆØs fatiguĆ©, douze lieues Ć  pied, j'ai bien faim. Voulez-vous que je reste? --Madame Magloire, dit l'Ć©vĆŖque, vous mettrez un couvert de plus. L'homme fit trois pas et s'approcha de la lampe qui Ć©tait sur la table. --Tenez, reprit-il, comme s'il n'avait pas bien compris, ce n'est pas Ƨa. Avez-vous entendu? Je suis un galĆ©rien. Un forƧat. Je viens des galĆØres. Il tira de sa poche une grande feuille de papier jaune qu'il dĆ©plia. --VoilĆ  mon passeport. Jaune, comme vous voyez. Cela sert Ć  me faire chasser de partout où je suis. Voulez-vous lire? Je sais lire, moi. J'ai appris au bagne. Il y a une Ć©cole pour ceux qui veulent. Tenez, voilĆ  ce qu'on a mis sur le passeport: Ā«Jean Valjean, forƧat libĆ©rĆ©, natif de...--cela vous est Ć©gal...--Est restĆ© dix-neuf ans au bagne. Cinq ans pour vol avec effraction. Quatorze ans pour avoir tentĆ© de s'Ć©vader quatre fois. Cet homme est trĆØs dangereux.Ā»--VoilĆ ! Tout le monde m'a jetĆ© dehors. Voulez-vous me recevoir, vous? Est-ce une auberge? Voulez-vous me donner Ć  manger et Ć  coucher? Avez-vous une Ć©curie? --Madame Magloire, dit l'Ć©vĆŖque, vous mettrez des draps blancs au lit de l'alcĆ“ve. Nous avons dĆ©jĆ  expliquĆ© de quelle nature Ć©tait l'obĆ©issance des deux femmes. Madame Magloire sortit pour exĆ©cuter ces ordres. L'Ć©vĆŖque se tourna vers l'homme. --Monsieur, asseyez-vous et chauffez-vous. Nous allons souper dans un instant, et l'on fera votre lit pendant que vous souperez. Ici l'homme comprit tout Ć  fait. L'expression de son visage, jusqu'alors sombre et dure, s'empreignit de stupĆ©faction, de doute, de joie, et devint extraordinaire. Il se mit Ć  balbutier comme un homme fou: --Vrai? quoi? vous me gardez? vous ne me chassez pas! un forƧat! Vous m'appelez monsieur! vous ne me tutoyez pas! Va-t-en, chien! qu'on me dit toujours. Je croyais bien que vous me chasseriez. Aussi j'avais dit tout de suite qui je suis. Oh! la brave femme qui m'a enseignĆ© ici! Je vais souper! un lit! Un lit avec des matelas et des draps! comme tout le monde! il y a dix-neuf ans que je n'ai couchĆ© dans un lit! Vous voulez bien que je ne m'en aille pas! Vous ĆŖtes de dignes gens! D'ailleurs j'ai de l'argent. Je payerai bien. Pardon, monsieur l'aubergiste, comment vous appelez-vous? Je payerai tout ce qu'on voudra. Vous ĆŖtes un brave homme. Vous ĆŖtes aubergiste, n'est-ce pas? --Je suis, dit l'Ć©vĆŖque, un prĆŖtre qui demeure ici. --Un prĆŖtre! reprit l'homme. Oh! un brave homme de prĆŖtre! Alors vous ne me demandez pas d'argent? Le curĆ©, n'est-ce pas? le curĆ© de cette grande Ć©glise? Tiens! c'est vrai, que je suis bĆŖte! je n'avais pas vu votre calotte! Tout en parlant, il avait dĆ©posĆ© son sac et son bĆ¢ton dans un coin, puis remis son passeport dans sa poche, et il s'Ć©tait assis. Mademoiselle Baptistine le considĆ©rait avec douceur. Il continua: --Vous ĆŖtes humain, monsieur le curĆ©. Vous n'avez pas de mĆ©pris. C'est bien bon un bon prĆŖtre. Alors vous n'avez pas besoin que je paye? --Non, dit l'Ć©vĆŖque, gardez votre argent. Combien avez-vous? ne m'avez-vous pas dit cent neuf francs? --Quinze sous, ajouta l'homme. --Cent neuf francs quinze sous. Et combien de temps avez-vous mis Ć  gagner cela? --Dix-neuf ans. --Dix-neuf ans! L'Ć©vĆŖque soupira profondĆ©ment. L'homme poursuivit: --J'ai encore tout mon argent. Depuis quatre jours je n'ai dĆ©pensĆ© que vingt-cinq sous que j'ai gagnĆ©s en aidant Ć  dĆ©charger des voitures Ć  Grasse. Puisque vous ĆŖtes abbĆ©, je vais vous dire, nous avions un aumĆ“nier au bagne. Et puis un jour j'ai vu un Ć©vĆŖque. Monseigneur, qu'on appelle. C'Ć©tait l'Ć©vĆŖque de la Majore, Ć  Marseille. C'est le curĆ© qui est sur les curĆ©s. Vous savez, pardon, je dis mal cela, mais pour moi, c'est si loin!--Vous comprenez, nous autres! Il a dit la messe au milieu du bagne, sur un autel, il avait une chose pointue, en or, sur la tĆŖte. Au grand jour de midi, cela brillait. Nous Ć©tions en rang. Des trois cĆ“tĆ©s. Avec les canons, mĆØche allumĆ©e, en face de nous. Nous ne voyions pas bien. Il a parlĆ©, mais il Ć©tait trop au fond, nous n'entendions pas. VoilĆ  ce que c'est qu'un Ć©vĆŖque. Pendant qu'il parlait, l'Ć©vĆŖque Ć©tait allĆ© pousser la porte qui Ć©tait restĆ©e toute grande ouverte. Madame Magloire rentra. Elle apportait un couvert qu'elle mit sur la table. --Madame Magloire, dit l'Ć©vĆŖque, mettez ce couvert le plus prĆØs possible du feu. Et se tournant vers son hĆ“te: --Le vent de nuit est dur dans les Alpes. Vous devez avoir froid, monsieur? Chaque fois qu'il disait ce mot monsieur, avec sa voix doucement grave et de si bonne compagnie, le visage de l'homme s'illuminait. Monsieur Ć  un forƧat, c'est un verre d'eau Ć  un naufragĆ© de la MĆ©duse. L'ignominie a soif de considĆ©ration. --Voici, reprit l'Ć©vĆŖque, une lampe qui Ć©claire bien mal. Madame Magloire comprit, et elle alla chercher sur la cheminĆ©e de la chambre Ć  coucher de monseigneur les deux chandeliers d'argent qu'elle posa sur la table tout allumĆ©s. --Monsieur le curĆ©, dit l'homme, vous ĆŖtes bon. Vous ne me mĆ©prisez pas. Vous me recevez chez vous. Vous allumez vos cierges pour moi. Je ne vous ai pourtant pas cachĆ© d'où je viens et que je suis un homme malheureux. L'Ć©vĆŖque, assis prĆØs de lui, lui toucha doucement la main. --Vous pouviez ne pas me dire qui vous Ć©tiez. Ce n'est pas ici ma maison, c'est la maison de JĆ©sus-Christ. Cette porte ne demande pas Ć  celui qui entre s'il a un nom, mais s'il a une douleur. Vous souffrez; vous avez faim et soif; soyez le bienvenu. Et ne me remerciez pas, ne me dites pas que je vous reƧois chez moi. Personne n'est ici chez soi, exceptĆ© celui qui a besoin d'un asile. Je vous le dis Ć  vous qui passez, vous ĆŖtes ici chez vous plus que moi-mĆŖme. Tout ce qui est ici est Ć  vous. Qu'ai-je besoin de savoir votre nom? D'ailleurs, avant que vous me le disiez, vous en avez un que je savais. L'homme ouvrit des yeux Ć©tonnĆ©s. --Vrai? vous saviez comment je m'appelle? --Oui, rĆ©pondit l'Ć©vĆŖque, vous vous appelez mon frĆØre. --Tenez, monsieur le curĆ©! s'Ć©cria l'homme, j'avais bien faim en entrant ici; mais vous ĆŖtes si bon qu'Ć  prĆ©sent je ne sais plus ce que j'ai; cela m'a passĆ©. L'Ć©vĆŖque le regarda et lui dit: --Vous avez bien souffert? --Oh! la casaque rouge, le boulet au pied, une planche pour dormir, le chaud, le froid, le travail, la chiourme, les coups de bĆ¢ton! La double chaĆ®ne pour rien. Le cachot pour un mot. MĆŖme malade au lit, la chaĆ®ne. Les chiens, les chiens sont plus heureux! Dix-neuf ans! J'en ai quarante-six. ƀ prĆ©sent, le passeport jaune! VoilĆ . --Oui, reprit l'Ć©vĆŖque, vous sortez d'un lieu de tristesse. Ɖcoutez. Il y aura plus de joie au ciel pour le visage en larmes d'un pĆ©cheur repentant que pour la robe blanche de cent justes. Si vous sortez de ce lieu douloureux avec des pensĆ©es de haine et de colĆØre contre les hommes, vous ĆŖtes digne de pitiĆ©; si vous en sortez avec des pensĆ©es de bienveillance, de douceur et de paix, vous valez mieux qu'aucun de nous. Cependant madame Magloire avait servi le souper. Une soupe faite avec de l'eau, de l'huile, du pain et du sel, un peu de lard, un morceau de viande de mouton, des figues, un fromage frais, et un gros pain de seigle. Elle avait d'elle-mĆŖme ajoutĆ© Ć  l'ordinaire de M. l'Ć©vĆŖque une bouteille de vieux vin de Mauves. Le visage de l'Ć©vĆŖque prit tout Ć  coup cette expression de gaĆ®tĆ© propre aux natures hospitaliĆØres: --ƀ table! dit-il vivement. Comme il en avait coutume lorsque quelque Ć©tranger soupait avec lui, il fit asseoir l'homme Ć  sa droite. Mademoiselle Baptistine, parfaitement paisible et naturelle, prit place Ć  sa gauche. L'Ć©vĆŖque dit le bĆ©nĆ©dicitĆ©, puis servit lui-mĆŖme la soupe, selon son habitude. L'homme se mit Ć  manger avidement. Tout Ć  coup l'Ć©vĆŖque dit: --Mais il me semble qu'il manque quelque chose sur cette table. Madame Magloire en effet n'avait mis que les trois couverts absolument nĆ©cessaires. Or c'Ć©tait l'usage de la maison, quand l'Ć©vĆŖque avait quelqu'un Ć  souper, de disposer sur la nappe les six couverts d'argent, Ć©talage innocent. Ce gracieux semblant de luxe Ć©tait une sorte d'enfantillage plein de charme dans cette maison douce et sĆ©vĆØre qui Ć©levait la pauvretĆ© jusqu'Ć  la dignitĆ©. Madame Magloire comprit l'observation, sortit sans dire un mot, et un moment aprĆØs les trois couverts rĆ©clamĆ©s par l'Ć©vĆŖque brillaient sur la nappe, symĆ©triquement arrangĆ©s devant chacun des trois convives. Chapitre IV DĆ©tails sur les fromageries de Pontarlier Maintenant, pour donner une idĆ©e de ce qui se passa Ć  cette table, nous ne saurions mieux faire que de transcrire ici un passage d'une lettre de mademoiselle Baptistine Ć  madame de Boischevron, où la conversation du forƧat et de l'Ć©vĆŖque est racontĆ©e avec une minutie naĆÆve: * * * * * Ā«...Cet homme ne faisait aucune attention Ć  personne. Il mangeait avec une voracitĆ© d'affamĆ©. Cependant, aprĆØs la soupe, il a dit: Ā«--Monsieur le curĆ© du bon Dieu, tout ceci est encore bien trop bon pour moi, mais je dois dire que les rouliers qui n'ont pas voulu me laisser manger avec eux font meilleure chĆØre que vous. Ā«Entre nous, l'observation m'a un peu choquĆ©e. Mon frĆØre a rĆ©pondu: Ā«--Ils ont plus de fatigue que moi. Ā«--Non, a repris cet homme, ils ont plus d'argent. Vous ĆŖtes pauvre. Je vois bien. Vous n'ĆŖtes peut-ĆŖtre pas mĆŖme curĆ©. Êtes-vous curĆ© seulement? Ah! par exemple, si le bon Dieu Ć©tait juste, vous devriez bien ĆŖtre curĆ©. Ā«--Le bon Dieu est plus que juste, a dit mon frĆØre. Ā«Un moment aprĆØs il a ajoutĆ©: Ā«--Monsieur Jean Valjean, c'est Ć  Pontarlier que vous allez? Ā«--Avec itinĆ©raire obligĆ©. Ā«Je crois bien que c'est comme cela que l'homme a dit. Puis il a continuĆ©: Ā«--Il faut que je sois en route demain Ć  la pointe du jour. Il fait dur voyager. Si les nuits sont froides, les journĆ©es sont chaudes. Ā«--Vous allez lĆ , a repris mon frĆØre, dans un bon pays. ƀ la rĆ©volution, ma famille a Ć©tĆ© ruinĆ©e, je me suis rĆ©fugiĆ© en Franche-ComtĆ© d'abord, et j'y ai vĆ©cu quelque temps du travail de mes bras. J'avais de la bonne volontĆ©. J'ai trouvĆ© Ć  m'y occuper. On n'a qu'Ć  choisir. Il y a des papeteries, des tanneries, des distilleries, des huileries, des fabriques d'horlogerie en grand, des fabriques d'acier, des fabriques de cuivre, au moins vingt usines de fer, dont quatre Ć  Lods, Ć  ChĆ¢tillon, Ć  Audincourt et Ć  Beure qui sont trĆØs considĆ©rables.... Ā«Je crois ne pas me tromper et que ce sont bien lĆ  les noms que mon frĆØre a citĆ©s, puis il s'est interrompu et m'a adressĆ© la parole: Ā«--ChĆØre soeur, n'avons-nous pas des parents dans ce pays-lĆ ? Ā«J'ai rĆ©pondu: Ā«--Nous en avions, entre autres M. de Lucenet qui Ć©tait capitaine des portes Ć  Pontarlier dans l'ancien rĆ©gime. Ā«--Oui, a repris mon frĆØre, mais en 93 on n'avait plus de parents, on n'avait que ses bras. J'ai travaillĆ©. Ils ont dans le pays de Pontarlier, où vous allez, monsieur Valjean, une industrie toute patriarcale et toute charmante, ma soeur. Ce sont leurs fromageries qu'ils appellent fruitiĆØres. Ā«Alors mon frĆØre, tout en faisant manger cet homme, lui a expliquĆ© trĆØs en dĆ©tail ce que c'Ć©taient que les fruitiĆØres de Pontarlier;--qu'on en distinguait deux sortes:--les _grosses granges_, qui sont aux riches, et où il y a quarante ou cinquante vaches, lesquelles produisent sept Ć  huit milliers de fromages par Ć©tĆ©; les _fruitiĆØres d'association_, qui sont aux pauvres; ce sont les paysans de la moyenne montagne qui mettent leurs vaches en commun et partagent les produits.--Ils prennent Ć  leurs gages un fromager qu'ils appellent le grurin;--le grurin reƧoit le lait des associĆ©s trois fois par jour et marque les quantitĆ©s sur une taille double;--c'est vers la fin d'avril que le travail des fromageries commence; c'est vers la mi-juin que les fromagers conduisent leurs vaches dans la montagne. Ā«L'homme se ranimait tout en mangeant. Mon frĆØre lui faisait boire de ce bon vin de Mauves dont il ne boit pas lui-mĆŖme parce qu'il dit que c'est du vin cher. Mon frĆØre lui disait tous ces dĆ©tails avec cette gaĆ®tĆ© aisĆ©e que vous lui connaissez, entremĆŖlant ses paroles de faƧons gracieuses pour moi. Il est beaucoup revenu sur ce bon Ć©tat de grurin, comme s'il eĆ»t souhaitĆ© que cet homme comprĆ®t, sans le lui conseiller directement et durement, que ce serait un asile pour lui. Une chose m'a frappĆ©e. Cet homme Ć©tait ce que je vous ai dit. Eh bien! mon frĆØre, pendant tout le souper, ni de toute la soirĆ©e, Ć  l'exception de quelques paroles sur JĆ©sus quand il est entrĆ©, n'a pas dit un mot qui pĆ»t rappeler Ć  cet homme qui il Ć©tait ni apprendre Ć  cet homme qui Ć©tait mon frĆØre. C'Ć©tait bien une occasion en apparence de faire un peu de sermon et d'appuyer l'Ć©vĆŖque sur le galĆ©rien pour laisser la marque du passage. Il eĆ»t paru peut-ĆŖtre Ć  un autre que c'Ć©tait le cas, ayant ce malheureux sous la main, de lui nourrir l'Ć¢me en mĆŖme temps que le corps et de lui faire quelque reproche assaisonnĆ© de morale et de conseil, ou bien un peu de commisĆ©ration avec exhortation de se mieux conduire Ć  l'avenir. Mon frĆØre ne lui a mĆŖme pas demandĆ© de quel pays il Ć©tait, ni son histoire. Car dans son histoire il y a sa faute, et mon frĆØre semblait Ć©viter tout ce qui pouvait l'en faire souvenir. C'est au point qu'Ć  un certain moment, comme mon frĆØre parlait des montagnards de Pontarlier, qui ont _un doux travail prĆØs du ciel et qui_, ajoutait-il, _sont heureux parce qu'ils sont innocents_, il s'est arrĆŖtĆ© court, craignant qu'il n'y eĆ»t dans ce mot qui lui Ć©chappait quelque chose qui pĆ»t froisser l'homme. ƀ force d'y rĆ©flĆ©chir, je crois avoir compris ce qui se passait dans le coeur de mon frĆØre. Il pensait sans doute que cet homme, qui s'appelle Jean Valjean, n'avait que trop sa misĆØre prĆ©sente Ć  l'esprit, que le mieux Ć©tait de l'en distraire, et de lui faire croire, ne fĆ»t-ce qu'un moment, qu'il Ć©tait une personne comme une autre, en Ć©tant pour lui tout ordinaire. N'est-ce pas lĆ  en effet bien entendre la charitĆ©? N'y a-t-il pas, bonne madame, quelque chose de vraiment Ć©vangĆ©lique dans cette dĆ©licatesse qui s'abstient de sermon, de morale et d'allusion, et la meilleure pitiĆ©, quand un homme a un point douloureux, n'est-ce pas de n'y point toucher du tout? Il m'a semblĆ© que ce pouvait ĆŖtre lĆ  la pensĆ©e intĆ©rieure de mon frĆØre. Dans tous les cas, ce que je puis dire, c'est que, s'il a eu toutes ces idĆ©es, il n'en a rien marquĆ©, mĆŖme pour moi; il a Ć©tĆ© d'un bout Ć  l'autre le mĆŖme homme que tous les soirs, et il a soupĆ© avec ce Jean Valjean du mĆŖme air et de la mĆŖme faƧon qu'il aurait soupĆ© avec M. GĆ©dĆ©on Le PrĆ©vost ou avec M. le curĆ© de la paroisse. Ā«Vers la fin, comme nous Ć©tions aux figues, on a cognĆ© Ć  la porte. C'Ć©tait la mĆØre Gerbaud avec son petit dans ses bras. Mon frĆØre a baisĆ© l'enfant au front, et m'a empruntĆ© quinze sous que j'avais sur moi pour les donner Ć  la mĆØre Gerbaud. L'homme pendant ce temps-lĆ  ne faisait pas grande attention. Il ne parlait plus et paraissait trĆØs fatiguĆ©. La pauvre vieille Gerbaud partie, mon frĆØre a dit les grĆ¢ces, puis il s'est tournĆ© vers cet homme, et il lui a dit: Vous devez avoir bien besoin de votre lit. Madame Magloire a enlevĆ© le couvert bien vite. J'ai compris qu'il fallait nous retirer pour laisser dormir ce voyageur, et nous sommes montĆ©es toutes les deux. J'ai cependant envoyĆ© madame Magloire un instant aprĆØs porter sur le lit de cet homme une peau de chevreuil de la ForĆŖt-Noire qui est dans ma chambre. Les nuits sont glaciales, et cela tient chaud. C'est dommage que cette peau soit vieille; tout le poil s'en va. Mon frĆØre l'a achetĆ©e du temps qu'il Ć©tait en Allemagne, Ć  Tottlingen, prĆØs des sources du Danube, ainsi que le petit couteau Ć  manche d'ivoire dont je me sers Ć  table. Ā«Madame Magloire est remontĆ©e presque tout de suite, nous nous sommes mises Ć  prier Dieu dans le salon où l'on Ć©tend le linge, et puis nous sommes rentrĆ©es chacune dans notre chambre sans nous rien dire.Ā» Chapitre V TranquillitĆ© AprĆØs avoir donnĆ© le bonsoir Ć  sa soeur, monseigneur Bienvenu prit sur la table un des deux flambeaux d'argent, remit l'autre Ć  son hĆ“te, et lui dit: --Monsieur, je vais vous conduire Ć  votre chambre. L'homme le suivit. Comme on a pu le remarquer dans ce qui a Ć©tĆ© dit plus haut, le logis Ć©tait distribuĆ© de telle sorte que, pour passer dans l'oratoire où Ć©tait l'alcĆ“ve ou pour en sortir, il fallait traverser la chambre Ć  coucher de l'Ć©vĆŖque. Au moment où ils traversaient cette chambre, madame Magloire serrait l'argenterie dans le placard qui Ć©tait au chevet du lit. C'Ć©tait le dernier soin qu'elle prenait chaque soir avant de s'aller coucher. L'Ć©vĆŖque installa son hĆ“te dans l'alcĆ“ve. Un lit blanc et frais y Ć©tait dressĆ©. L'homme posa le flambeau sur une petite table. --Allons, dit l'Ć©vĆŖque, faites une bonne nuit. Demain matin, avant de partir, vous boirez une tasse de lait de nos vaches tout chaud. --Merci, monsieur l'abbĆ©, dit l'homme. ƀ peine eut-il prononcĆ© ces paroles pleines de paix que, tout Ć  coup et sans transition, il eut un mouvement Ć©trange et qui eĆ»t glacĆ© d'Ć©pouvante les deux saintes filles si elles en eussent Ć©tĆ© tĆ©moins. Aujourd'hui mĆŖme il nous est difficile de nous rendre compte de ce qui le poussait en ce moment. Voulait-il donner un avertissement ou jeter une menace? ObĆ©issait-il simplement Ć  une sorte d'impulsion instinctive et obscure pour lui-mĆŖme? Il se tourna brusquement vers le vieillard, croisa les bras, et, fixant sur son hĆ“te un regard sauvage, il s'Ć©cria d'une voix rauque: --Ah ƧƠ! dĆ©cidĆ©ment! vous me logez chez vous prĆØs de vous comme cela! Il s'interrompit et ajouta avec un rire où il y avait quelque chose de monstrueux: --Avez-vous bien fait toutes vos rĆ©flexions? Qui est-ce qui vous dit que je n'ai pas assassinĆ©? L'Ć©vĆŖque leva les yeux vers le plafond et rĆ©pondit: --Cela regarde le bon Dieu. Puis, gravement et remuant les lĆØvres comme quelqu'un qui prie ou qui se parle Ć  lui-mĆŖme, il dressa les deux doigts de sa main droite et bĆ©nit l'homme qui ne se courba pas, et, sans tourner la tĆŖte et sans regarder derriĆØre lui, il rentra dans sa chambre. Quand l'alcĆ“ve Ć©tait habitĆ©e, un grand rideau de serge tirĆ© de part en part dans l'oratoire cachait l'autel. L'Ć©vĆŖque s'agenouilla en passant devant ce rideau et fit une courte priĆØre. Un moment aprĆØs, il Ć©tait dans son jardin, marchant, rĆŖvant, contemplant, l'Ć¢me et la pensĆ©e tout entiĆØres Ć  ces grandes choses mystĆ©rieuses que Dieu montre la nuit aux yeux qui restent ouverts. Quant Ć  l'homme, il Ć©tait vraiment si fatiguĆ© qu'il n'avait mĆŖme pas profitĆ© de ces bons draps blancs. Il avait soufflĆ© sa bougie avec sa narine Ć  la maniĆØre des forƧats et s'Ć©tait laissĆ© tomber tout habillĆ© sur le lit, où il s'Ć©tait tout de suite profondĆ©ment endormi. Minuit sonnait comme l'Ć©vĆŖque rentrait de son jardin dans son appartement. Quelques minutes aprĆØs, tout dormait dans la petite maison. Chapitre VI Jean Valjean Vers le milieu de la nuit, Jean Valjean se rĆ©veilla. Jean Valjean Ć©tait d'une pauvre famille de paysans de la Brie. Dans son enfance, il n'avait pas appris Ć  lire. Quand il eut l'Ć¢ge d'homme, il Ć©tait Ć©mondeur Ć  Faverolles. Sa mĆØre s'appelait Jeanne Mathieu; son pĆØre s'appelait Jean Valjean, ou Vlajean, sobriquet probablement, et contraction de _VoilĆ  Jean_. Jean Valjean Ć©tait d'un caractĆØre pensif sans ĆŖtre triste, ce qui est le propre des natures affectueuses. Somme toute, pourtant, c'Ć©tait quelque chose d'assez endormi et d'assez insignifiant, en apparence du moins, que Jean Valjean. Il avait perdu en trĆØs bas Ć¢ge son pĆØre et sa mĆØre. Sa mĆØre Ć©tait morte d'une fiĆØvre de lait mal soignĆ©e. Son pĆØre, Ć©mondeur comme lui, s'Ć©tait tuĆ© en tombant d'un arbre. Il n'Ć©tait restĆ© Ć  Jean Valjean qu'une soeur plus Ć¢gĆ©e que lui, veuve, avec sept enfants, filles et garƧons. Cette soeur avait Ć©levĆ© Jean Valjean, et tant qu'elle eut son mari elle logea et nourrit son jeune frĆØre. Le mari mourut. L'aĆ®nĆ© des sept enfants avait huit ans, le dernier un an. Jean Valjean venait d'atteindre, lui, sa vingt-cinquiĆØme annĆ©e. Il remplaƧa le pĆØre, et soutint Ć  son tour sa soeur qui l'avait Ć©levĆ©. Cela se fit simplement, comme un devoir, mĆŖme avec quelque chose de bourru de la part de Jean Valjean. Sa jeunesse se dĆ©pensait ainsi dans un travail rude et mal payĆ©. On ne lui avait jamais connu de Ā«bonne amieĀ» dans le pays. Il n'avait pas eu le temps d'ĆŖtre amoureux. Le soir il rentrait fatiguĆ© et mangeait sa soupe sans dire un mot. Sa soeur, mĆØre Jeanne, pendant qu'il mangeait, lui prenait souvent dans son Ć©cuelle le meilleur de son repas, le morceau de viande, la tranche de lard le coeur de chou, pour le donner Ć  quelqu'un de ses enfants; lui, mangeant toujours, penchĆ© sur la table, presque la tĆŖte dans sa soupe, ses longs cheveux tombant autour de son Ć©cuelle et cachant ses yeux, avait l'air de ne rien voir et laissait faire. Il y avait Ć  Faverolles, pas loin de la chaumiĆØre Valjean, de l'autre cĆ“tĆ© de la ruelle, une fermiĆØre appelĆ©e Marie-Claude; les enfants Valjean, habituellement affamĆ©s, allaient quelquefois emprunter au nom de leur mĆØre une pinte de lait Ć  Marie-Claude, qu'ils buvaient derriĆØre une haie ou dans quelque coin d'allĆ©e, s'arrachant le pot, et si hĆ¢tivement que les petites filles s'en rĆ©pandaient sur leur tablier et dans leur goulotte. La mĆØre, si elle eĆ»t su cette maraude, eĆ»t sĆ©vĆØrement corrigĆ© les dĆ©linquants. Jean Valjean, brusque et bougon, payait en arriĆØre de la mĆØre la pinte de lait Ć  Marie-Claude, et les enfants n'Ć©taient pas punis. Il gagnait dans la saison de l'Ć©mondage vingt-quatre sous par jour, puis il se louait comme moissonneur, comme manoeuvre, comme garƧon de ferme bouvier, comme homme de peine. Il faisait ce qu'il pouvait. Sa soeur travaillait de son cĆ“tĆ©, mais que faire avec sept petits enfants? C'Ć©tait un triste groupe que la misĆØre enveloppa et Ć©treignit peu Ć  peu. Il arriva qu'un hiver fut rude. Jean n'eut pas d'ouvrage. La famille n'eut pas de pain. Pas de pain. ƀ la lettre. Sept enfants! Un dimanche soir, Maubert Isabeau, boulanger sur la place de l'Ɖglise, Ć  Faverolles, se disposait Ć  se coucher, lorsqu'il entendit un coup violent dans la devanture grillĆ©e et vitrĆ©e de sa boutique. Il arriva Ć  temps pour voir un bras passĆ© Ć  travers un trou fait d'un coup de poing dans la grille et dans la vitre. Le bras saisit un pain et l'emporta. Isabeau sortit en hĆ¢te; le voleur s'enfuyait Ć  toutes jambes; Isabeau courut aprĆØs lui et l'arrĆŖta. Le voleur avait jetĆ© le pain, mais il avait encore le bras ensanglantĆ©. C'Ć©tait Jean Valjean. Ceci se passait en 1795. Jean Valjean fut traduit devant les tribunaux du temps Ā«pour vol avec effraction la nuit dans une maison habitĆ©eĀ». Il avait un fusil dont il se servait mieux que tireur au monde, il Ć©tait quelque peu braconnier; ce qui lui nuisit. Il y a contre les braconniers un prĆ©jugĆ© lĆ©gitime. Le braconnier, de mĆŖme que le contrebandier, cĆ“toie de fort prĆØs le brigand. Pourtant, disons-le en passant, il y a encore un abĆ®me entre ces races d'hommes et le hideux assassin des villes. Le braconnier vit dans la forĆŖt; le contrebandier vit dans la montagne ou sur la mer. Les villes font des hommes fĆ©roces parce qu'elles font des hommes corrompus. La montagne, la mer, la forĆŖt, font des hommes sauvages. Elles dĆ©veloppent le cĆ“tĆ© farouche, mais souvent sans dĆ©truire le cĆ“tĆ© humain. Jean Valjean fut dĆ©clarĆ© coupable. Les termes du code Ć©taient formels. Il y a dans notre civilisation des heures redoutables; ce sont les moments où la pĆ©nalitĆ© prononce un naufrage. Quelle minute funĆØbre que celle où la sociĆ©tĆ© s'Ć©loigne et consomme l'irrĆ©parable abandon d'un ĆŖtre pensant! Jean Valjean fut condamnĆ© Ć  cinq ans de galĆØres. Le 22 avril 1796, on cria dans Paris la victoire de Montenotte remportĆ©e par le gĆ©nĆ©ral en chef de l'annĆ©e d'Italie, que le message du Directoire aux Cinq-Cents, du 2 florĆ©al an IV, appelle Buona-Parte; ce mĆŖme jour une grande chaĆ®ne fut ferrĆ©e Ć  BicĆŖtre. Jean Valjean fit partie de cette chaĆ®ne. Un ancien guichetier de la prison, qui a prĆØs de quatre-vingt-dix ans aujourd'hui, se souvient encore parfaitement de ce malheureux qui fut ferrĆ© Ć  l'extrĆ©mitĆ© du quatriĆØme cordon dans l'angle nord de la cour. Il Ć©tait assis Ć  terre comme tous les autres. Il paraissait ne rien comprendre Ć  sa position, sinon qu'elle Ć©tait horrible. Il est probable qu'il y dĆ©mĆŖlait aussi, Ć  travers les vagues idĆ©es d'un pauvre homme ignorant de tout, quelque chose d'excessif. Pendant qu'on rivait Ć  grands coups de marteau derriĆØre sa tĆŖte le boulon de son carcan, il pleurait, les larmes l'Ć©touffaient, elles l'empĆŖchaient de parler, il parvenait seulement Ć  dire de temps en temps: _J'Ć©tais Ć©mondeur Ć  Faverolles_. Puis, tout en sanglotant, il Ć©levait sa main droite et l'abaissait graduellement sept fois comme s'il touchait successivement sept tĆŖtes inĆ©gales, et par ce geste on devinait que la chose quelconque qu'il avait faite, il l'avait faite pour vĆŖtir et nourrir sept petits enfants. Il partit pour Toulon. Il y arriva aprĆØs un voyage de vingt-sept jours, sur une charrette, la chaĆ®ne au cou. ƀ Toulon, il fut revĆŖtu de la casaque rouge. Tout s'effaƧa de ce qui avait Ć©tĆ© sa vie, jusqu'Ć  son nom; il ne fut mĆŖme plus Jean Valjean; il fut le numĆ©ro 24601. Que devint la soeur? que devinrent les sept enfants? Qui est-ce qui s'occupe de cela? Que devient la poignĆ©e de feuilles du jeune arbre sciĆ© par le pied? C'est toujours la mĆŖme histoire. Ces pauvres ĆŖtres vivants, ces crĆ©atures de Dieu, sans appui dĆ©sormais, sans guide, sans asile, s'en allĆØrent au hasard, qui sait mĆŖme? chacun de leur cĆ“tĆ© peut-ĆŖtre, et s'enfoncĆØrent peu Ć  peu dans cette froide brume où s'engloutissent les destinĆ©es solitaires, moines tĆ©nĆØbres où disparaissent successivement tant de tĆŖtes infortunĆ©es dans la sombre marche du genre humain. Ils quittĆØrent le pays. Le clocher de ce qui avait Ć©tĆ© leur village les oublia; la borne de ce qui avait Ć©tĆ© leur champ les oublia; aprĆØs quelques annĆ©es de sĆ©jour au bagne, Jean Valjean lui-mĆŖme les oublia. Dans ce coeur où il y avait eu une plaie, il y eut une cicatrice. VoilĆ  tout. ƀ peine, pendant tout le temps qu'il passa Ć  Toulon, entendit-il parler une seule fois de sa soeur. C'Ć©tait, je crois, vers la fin de la quatriĆØme annĆ©e de sa captivitĆ©. Je ne sais plus par quelle voie ce renseignement lui parvint. Quelqu'un, qui les avait connus au pays, avait vu sa soeur. Elle Ć©tait Ć  Paris. Elle habitait une pauvre rue prĆØs de Saint-Sulpice, la rue du Geindre. Elle n'avait plus avec elle qu'un enfant, un petit garƧon, le dernier. Où Ć©taient les six autres? Elle ne le savait peut-ĆŖtre pas elle-mĆŖme. Tous les matins elle allait Ć  une imprimerie rue du Sabot, n° 3, où elle Ć©tait plieuse et brocheuse. Il fallait ĆŖtre lĆ  Ć  six heures du matin, bien avant le jour l'hiver. Dans la maison de l'imprimerie il y avait une Ć©cole, elle menait Ć  cette Ć©cole son petit garƧon qui avait sept ans. Seulement, comme elle entrait Ć  l'imprimerie Ć  six heures et que l'Ć©cole n'ouvrait qu'Ć  sept, il fallait que l'enfant attendĆ®t, dans la cour, que l'Ć©cole ouvrit, une heure; l'hiver, une heure de nuit, en plein air. On ne voulait pas que l'enfant entrĆ¢t dans l'imprimerie, parce qu'il gĆŖnait, disait-on. Les ouvriers voyaient le matin en passant ce pauvre petit ĆŖtre assis sur le pavĆ©, tombant de sommeil, et souvent endormi dans l'ombre, accroupi et pliĆ© sur son panier. Quand il pleuvait, une vieille femme, la portiĆØre, en avait pitiĆ©; elle le recueillait dans son bouge où il n'y avait qu'un grabat, un rouet et deux chaises de bois, et le petit dormait lĆ  dans un coin, se serrant contre le chat pour avoir moins froid. ƀ sept heures, l'Ć©cole ouvrait et il y entrait. VoilĆ  ce qu'on dit Ć  Jean Valjean. On l'en entretint un jour, ce fut un moment, un Ć©clair, comme une fenĆŖtre brusquement ouverte sur la destinĆ©e de ces ĆŖtres qu'il avait aimĆ©s, puis tout se referma; il n'en entendit plus parler, et ce fut pour jamais. Plus rien n'arriva d'eux Ć  lui; jamais il ne les revit, jamais il ne les rencontra, et, dans la suite de cette douloureuse histoire, on ne les retrouvera plus. Vers la fin de cette quatriĆØme annĆ©e, le tour d'Ć©vasion de Jean Valjean arriva. Ses camarades l'aidĆØrent comme cela se fait dans ce triste lieu. Il s'Ć©vada. Il erra deux jours en libertĆ© dans les champs; si c'est ĆŖtre libre que d'ĆŖtre traquĆ©; de tourner la tĆŖte Ć  chaque instant; de tressaillir au moindre bruit; d'avoir peur de tout, du toit qui fume, de l'homme qui passe, du chien qui aboie, du cheval qui galope, de l'heure qui sonne, du jour parce qu'on voit, de la nuit parce qu'on ne voit pas, de la route, du sentier, du buisson, du sommeil. Le soir du second jour, il fut repris. Il n'avait ni mangĆ© ni dormi depuis trente-six heures. Le tribunal maritime le condamna pour ce dĆ©lit Ć  une prolongation de trois ans, ce qui lui fit huit ans. La sixiĆØme annĆ©e, ce fut encore son tour de s'Ć©vader; il en usa, mais il ne put consommer sa fuite. Il avait manquĆ© Ć  l'appel. On tira le coup de canon, et Ć  la nuit les gens de ronde le trouvĆØrent cachĆ© sous la quille d'un vaisseau en construction; il rĆ©sista aux gardes-chiourme qui le saisirent. Ɖvasion et rĆ©bellion. Ce fait prĆ©vu par le code spĆ©cial fut puni d'une aggravation de cinq ans, dont deux ans de double chaĆ®ne. Treize ans. La dixiĆØme annĆ©e, son tour revint, il en profita encore. Il ne rĆ©ussit pas mieux. Trois ans pour cette nouvelle tentative. Seize ans. Enfin, ce fut, je crois, pendant la treiziĆØme annĆ©e qu'il essaya une derniĆØre fois et ne rĆ©ussit qu'Ć  se faire reprendre aprĆØs quatre heures d'absence. Trois ans pour ces quatre heures. Dix-neuf ans. En octobre 1815 il fut libĆ©rĆ©; il Ć©tait entrĆ© lĆ  en 1796 pour avoir cassĆ© un carreau et pris un pain. Place pour une courte parenthĆØse. C'est la seconde fois que, dans ses Ć©tudes sur la question pĆ©nale et sur la damnation par la loi, l'auteur de ce livre rencontre le vol d'un pain, comme point de dĆ©part du dĆ©sastre d'une destinĆ©e. Claude Gueux avait volĆ© un pain; Jean Valjean avait volĆ© un pain. Une statistique anglaise constate qu'Ć  Londres quatre vols sur cinq ont pour cause immĆ©diate la faim. Jean Valjean Ć©tait entrĆ© au bagne sanglotant et frĆ©missant; il en sortit impassible. Il y Ć©tait entrĆ© dĆ©sespĆ©rĆ©; il en sortit sombre. Que s'Ć©tait-il passĆ© dans cette Ć¢me? Chapitre VII Le dedans du dĆ©sespoir Essayons de le dire. Il faut bien que la sociĆ©tĆ© regarde ces choses puisque c'est elle qui les fait. C'Ć©tait, nous l'avons dit, un ignorant; mais ce n'Ć©tait pas un imbĆ©cile. La lumiĆØre naturelle Ć©tait allumĆ©e en lui. Le malheur, qui a aussi sa clartĆ©, augmenta le peu de jour qu'il y avait dans cet esprit. Sous le bĆ¢ton, sous la chaĆ®ne, au cachot, Ć  la fatigue, sous l'ardent soleil du bagne, sur le lit de planches des forƧats, il se replia en sa conscience et rĆ©flĆ©chit. Il se constitua tribunal. Il commenƧa par se juger lui-mĆŖme. Il reconnut qu'il n'Ć©tait pas un innocent injustement puni. Il s'avoua qu'il avait commis une action extrĆŖme et blĆ¢mable; qu'on ne lui eĆ»t peut-ĆŖtre pas refusĆ© ce pain s'il l'avait demandĆ©; que dans tous les cas il eĆ»t mieux valu l'attendre, soit de la pitiĆ©, soit du travail; que ce n'est pas tout Ć  fait une raison sans rĆ©plique de dire: peut-on attendre quand on a faim? que d'abord il est trĆØs rare qu'on meure littĆ©ralement de faim; ensuite que, malheureusement ou heureusement, l'homme est ainsi fait qu'il peut souffrir longtemps et beaucoup, moralement et physiquement, sans mourir; qu'il fallait donc de la patience; que cela eĆ»t mieux valu mĆŖme pour ces pauvres petits enfants; que c'Ć©tait un acte de folie, Ć  lui, malheureux homme chĆ©tif, de prendre violemment au collet la sociĆ©tĆ© tout entiĆØre et de se figurer qu'on sort de la misĆØre par le vol; que c'Ć©tait, dans tous les cas, une mauvaise porte pour sortir de la misĆØre que celle par où l'on entre dans l'infamie; enfin qu'il avait eu tort. Puis il se demanda: S'il Ć©tait le seul qui avait eu tort dans sa fatale histoire? Si d'abord ce n'Ć©tait pas une chose grave qu'il eĆ»t, lui travailleur, manquĆ© de travail, lui laborieux, manquĆ© de pain. Si, ensuite, la faute commise et avouĆ©e, le chĆ¢timent n'avait pas Ć©tĆ© fĆ©roce et outrĆ©. S'il n'y avait pas plus d'abus de la part de la loi dans la peine qu'il n'y avait eu d'abus de la part du coupable dans la faute. S'il n'y avait pas excĆØs de poids dans un des plateaux de la balance, celui où est l'expiation. Si la surcharge de la peine n'Ć©tait point l'effacement du dĆ©lit, et n'arrivait pas Ć  ce rĆ©sultat: de retourner la situation, de remplacer la faute du dĆ©linquant par la faute de la rĆ©pression, de faire du coupable la victime et du dĆ©biteur le crĆ©ancier, et de mettre dĆ©finitivement le droit du cĆ“tĆ© de celui-lĆ  mĆŖme qui l'avait violĆ©. Si cette peine, compliquĆ©e des aggravations successives pour les tentatives d'Ć©vasion, ne finissait pas par ĆŖtre une sorte d'attentat du plus fort sur le plus faible, un crime de la sociĆ©tĆ© sur l'individu, un crime qui recommenƧait tous les jours, un crime qui durait dix-neuf ans. Il se demanda si la sociĆ©tĆ© humaine pouvait avoir le droit de faire Ć©galement subir Ć  ses membres, dans un cas son imprĆ©voyance dĆ©raisonnable, et dans l'autre cas sa prĆ©voyance impitoyable, et de saisir Ć  jamais un pauvre homme entre un dĆ©faut et un excĆØs, dĆ©faut de travail, excĆØs de chĆ¢timent. S'il n'Ć©tait pas exorbitant que la sociĆ©tĆ© traitĆ¢t ainsi prĆ©cisĆ©ment ses membres les plus mal dotĆ©s dans la rĆ©partition de biens que fait le hasard, et par consĆ©quent les plus dignes de mĆ©nagements. Ces questions faites et rĆ©solues, il jugea la sociĆ©tĆ© et la condamna. Il la condamna sans haine. Il la fit responsable du sort qu'il subissait, et se dit qu'il n'hĆ©siterait peut-ĆŖtre pas Ć  lui en demander compte un jour. Il se dĆ©clara Ć  lui-mĆŖme qu'il n'y avait pas Ć©quilibre entre le dommage qu'il avait causĆ© et le dommage qu'on lui causait; il conclut enfin que son chĆ¢timent n'Ć©tait pas, Ć  la vĆ©ritĆ©, une injustice, mais qu'Ć  coup sĆ»r c'Ć©tait une iniquitĆ©. La colĆØre peut ĆŖtre folle et absurde; on peut ĆŖtre irritĆ© Ć  tort; on n'est indignĆ© que lorsqu'on a raison au fond par quelque cĆ“tĆ©. Jean Valjean se sentait indignĆ©. Et puis, la sociĆ©tĆ© humaine ne lui avait fait que du mal. Jamais il n'avait vu d'elle que ce visage courroucĆ© qu'elle appelle sa justice et qu'elle montre Ć  ceux qu'elle frappe. Les hommes ne l'avaient touchĆ© que pour le meurtrir. Tout contact avec eux lui avait Ć©tĆ© un coup. Jamais, depuis son enfance, depuis sa mĆØre, depuis sa soeur, jamais il n'avait rencontrĆ© une parole amie et un regard bienveillant. De souffrance en souffrance il arriva peu Ć  peu Ć  cette conviction que la vie Ć©tait une guerre; et que dans cette guerre il Ć©tait le vaincu. Il n'avait d'autre arme que sa haine. Il rĆ©solut de l'aiguiser au bagne et de l'emporter en s'en allant. Il y avait Ć  Toulon une Ć©cole pour la chiourme tenue par des frĆØres ignorantins où l'on enseignait le plus nĆ©cessaire Ć  ceux de ces malheureux qui avaient de la bonne volontĆ©. Il fut du nombre des hommes de bonne volontĆ©. Il alla Ć  l'Ć©cole Ć  quarante ans, et apprit Ć  lire, Ć  Ć©crire, Ć  compter. Il sentit que fortifier son intelligence, c'Ć©tait fortifier sa haine. Dans certains cas, l'instruction et la lumiĆØre peuvent servir de rallonge au mal. Cela est triste Ć  dire, aprĆØs avoir jugĆ© la sociĆ©tĆ© qui avait fait son malheur, il jugea la providence qui avait fait la sociĆ©tĆ©. Il la condamna aussi. Ainsi, pendant ces dix-neuf ans de torture et d'esclavage, cette Ć¢me monta et tomba en mĆŖme temps. Il y entra de la lumiĆØre d'un cĆ“tĆ© et des tĆ©nĆØbres de l'autre. Jean Valjean n'Ć©tait pas, on l'a vu, d'une nature mauvaise. Il Ć©tait encore bon lorsqu'il arriva au bagne. Il y condamna la sociĆ©tĆ© et sentit qu'il devenait mĆ©chant, il y condamna la providence et sentit qu'il devenait impie. Ici il est difficile de ne pas mĆ©diter un instant. La nature humaine se transforme-t-elle ainsi de fond en comble et tout Ć  fait? L'homme crƩƩ bon par Dieu peut-il ĆŖtre fait mĆ©chant par l'homme? L'Ć¢me peut-elle ĆŖtre refaite tout d'une piĆØce par la destinĆ©e, et devenir mauvaise, la destinĆ©e Ć©tant mauvaise? Le coeur peut-il devenir difforme et contracter des laideurs et des infirmitĆ©s incurables sous la pression d'un malheur disproportionnĆ©, comme la colonne vertĆ©brale sous une voĆ»te trop basse? N'y a-t-il pas dans toute Ć¢me humaine, n'y avait-il pas dans l'Ć¢me de Jean Valjean en particulier, une premiĆØre Ć©tincelle, un Ć©lĆ©ment divin, incorruptible dans ce monde, immortel dans l'autre, que le bien peut dĆ©velopper, attiser, allumer, enflammer et faire rayonner splendidement, et que le mal ne peut jamais entiĆØrement Ć©teindre? Questions graves et obscures, Ć  la derniĆØre desquelles tout physiologiste eĆ»t probablement rĆ©pondu non, et sans hĆ©siter, s'il eĆ»t vu Ć  Toulon, aux heures de repos qui Ć©taient pour Jean Valjean des heures de rĆŖverie, assis, les bras croisĆ©s, sur la barre de quelque cabestan, le bout de sa chaĆ®ne enfoncĆ© dans sa poche pour l'empĆŖcher de traĆ®ner, ce galĆ©rien morne, sĆ©rieux, silencieux et pensif, paria des lois qui regardait l'homme avec colĆØre, damnĆ© de la civilisation qui regardait le ciel avec sĆ©vĆ©ritĆ©. Certes, et nous ne voulons pas le dissimuler, le physiologiste observateur eĆ»t vu lĆ  une misĆØre irrĆ©mĆ©diable, il eĆ»t plaint peut-ĆŖtre ce malade du fait de la loi, mais il n'eĆ»t pas mĆŖme essayĆ© de traitement; il eĆ»t dĆ©tournĆ© le regard des cavernes qu'il aurait entrevues dans cette Ć¢me; et, comme Dante de la porte de l'enfer, il eĆ»t effacĆ© de cette existence le mot que le doigt de Dieu Ć©crit pourtant sur le front de tout homme: _EspĆ©rance_! Cet Ć©tat de son Ć¢me que nous avons tentĆ© d'analyser Ć©tait-il aussi parfaitement clair pour Jean Valjean que nous avons essayĆ© de le rendre pour ceux qui nous lisent? Jean Valjean voyait-il distinctement, aprĆØs leur formation, et avait-il vu distinctement, Ć  mesure qu'ils se formaient, tous les Ć©lĆ©ments dont se composait sa misĆØre morale? Cet homme rude et illettrĆ© s'Ć©tait-il bien nettement rendu compte de la succession d'idĆ©es par laquelle il Ć©tait, degrĆ© Ć  degrĆ©, montĆ© et descendu jusqu'aux lugubres aspects qui Ć©taient depuis tant d'annĆ©es dĆ©jĆ  l'horizon intĆ©rieur de son esprit? Avait-il bien conscience de tout ce qui s'Ć©tait passĆ© en lui et de tout ce qui s'y remuait? C'est ce que nous n'oserions dire; c'est mĆŖme ce que nous ne croyons pas. Il y avait trop d'ignorance dans Jean Valjean pour que, mĆŖme aprĆØs tant de malheur, il n'y restĆ¢t pas beaucoup de vague. Par moments il ne savait pas mĆŖme bien au juste ce qu'il Ć©prouvait. Jean Valjean Ć©tait dans les tĆ©nĆØbres; il souffrait dans les tĆ©nĆØbres; il haĆÆssait dans les tĆ©nĆØbres; on eĆ»t pu dire qu'il haĆÆssait devant lui. Il vivait habituellement dans cette ombre, tĆ¢tonnant comme un aveugle et comme un rĆŖveur. Seulement, par intervalles, il lui venait tout Ć  coup, de lui-mĆŖme ou du dehors, une secousse de colĆØre, un surcroĆ®t de souffrance, un pĆ¢le et rapide Ć©clair qui illuminait toute son Ć¢me, et faisait brusquement apparaĆ®tre partout autour de lui, en avant et en arriĆØre, aux lueurs d'une lumiĆØre affreuse, les hideux prĆ©cipices et les sombres perspectives de sa destinĆ©e. L'Ć©clair passĆ©, la nuit retombait, et où Ć©tait-il? il ne le savait plus. Le propre des peines de cette nature, dans lesquelles domine ce qui est impitoyable, c'est-Ć -dire ce qui est abrutissant, c'est de transformer peu Ć  peu, par une sorte de transfiguration stupide, un homme en une bĆŖte fauve. Quelquefois en une bĆŖte fĆ©roce. Les tentatives d'Ć©vasion de Jean Valjean, successives et obstinĆ©es, suffiraient Ć  prouver cet Ć©trange travail fait par la loi sur l'Ć¢me humaine. Jean Valjean eĆ»t renouvelĆ© ces tentatives, si parfaitement inutiles et folles, autant de fois que l'occasion s'en fĆ»t prĆ©sentĆ©e, sans songer un instant au rĆ©sultat, ni aux expĆ©riences dĆ©jĆ  faites. Il s'Ć©chappait impĆ©tueusement comme le loup qui trouve la cage ouverte. L'instinct lui disait: sauve-toi! Le raisonnement lui eĆ»t dit: reste! Mais, devant une tentation si violente, le raisonnement avait disparu; il n'y avait plus que l'instinct. La bĆŖte seule agissait. Quand il Ć©tait repris, les nouvelles sĆ©vĆ©ritĆ©s qu'on lui infligeait ne servaient qu'Ć  l'effarer davantage. Un dĆ©tail que nous ne devons pas omettre, c'est qu'il Ć©tait d'une force physique dont n'approchait pas un des habitants du bagne. ƀ la fatigue, pour filer un cĆ¢ble, pour virer un cabestan, Jean Valjean valait quatre hommes. Il soulevait et soutenait parfois d'Ć©normes poids sur son dos, et remplaƧait dans l'occasion cet instrument qu'on appelle cric et qu'on appelait jadis orgueil, d'où a pris nom, soit dit en passant, la rue Montorgueil prĆØs des halles de Paris. Ses camarades l'avaient surnommĆ© Jean-le-Cric. Une fois, comme on rĆ©parait le balcon de l'hĆ“tel de ville de Toulon, une des admirables cariatides de Puget qui soutiennent ce balcon se descella et faillit tomber. Jean Valjean, qui se trouvait lĆ , soutint de l'Ć©paule la cariatide et donna le temps aux ouvriers d'arriver. Sa souplesse dĆ©passait encore sa vigueur. Certains forƧats, rĆŖveurs perpĆ©tuels d'Ć©vasions, finissent par faire de la force et de l'adresse combinĆ©es une vĆ©ritable science. C'est la science des muscles. Toute une statique mystĆ©rieuse est quotidiennement pratiquĆ©e par les prisonniers, ces Ć©ternels envieux des mouches et des oiseaux. Gravir une verticale, et trouver des points d'appui lĆ  où l'on voit Ć  peine une saillie, Ć©tait un jeu pour Jean Valjean. Ɖtant donnĆ© un angle de mur, avec la tension de son dos et de ses jarrets, avec ses coudes et ses talons emboĆ®tĆ©s dans les aspĆ©ritĆ©s de la pierre, il se hissait comme magiquement Ć  un troisiĆØme Ć©tage. Quelquefois il montait ainsi jusqu'au toit du bagne. Il parlait peu. Il ne riait pas. Il fallait quelque Ć©motion extrĆŖme pour lui arracher, une ou deux fois l'an, ce lugubre rire du forƧat qui est comme un Ć©cho du rire du dĆ©mon. ƀ le voir, il semblait occupĆ© Ć  regarder continuellement quelque chose de terrible. Il Ć©tait absorbĆ© en effet. ƀ travers les perceptions maladives d'une nature incomplĆØte et d'une intelligence accablĆ©e, il sentait confusĆ©ment qu'une chose monstrueuse Ć©tait sur lui. Dans cette pĆ©nombre obscure et blafarde où il rampait, chaque fois qu'il tournait le cou et qu'il essayait d'Ć©lever son regard, il voyait, avec une terreur mĆŖlĆ©e de rage, s'Ć©chafauder, s'Ć©tager et monter Ć  perte de vue au-dessus de lui, avec des escarpements horribles, une sorte d'entassement effrayant de choses, de lois, de prĆ©jugĆ©s, d'hommes et de faits, dont les contours lui Ć©chappaient, dont la masse l'Ć©pouvantait, et qui n'Ć©tait autre chose que cette prodigieuse pyramide que nous appelons la civilisation. Il distinguait ƧƠ et lĆ  dans cet ensemble fourmillant et difforme, tantĆ“t prĆØs de lui, tantĆ“t loin et sur des plateaux inaccessibles, quelque groupe, quelque dĆ©tail vivement Ć©clairĆ©, ici l'argousin et son bĆ¢ton, ici le gendarme et son sabre, lĆ -bas l'archevĆŖque mitrĆ©, tout en haut, dans une sorte de soleil, l'empereur couronnĆ© et Ć©blouissant. Il lui semblait que ces splendeurs lointaines, loin de dissiper sa nuit, la rendaient plus funĆØbre et plus noire. Tout cela, lois, prĆ©jugĆ©s, faits, hommes, choses, allait et venait au-dessus de lui, selon le mouvement compliquĆ© et mystĆ©rieux que Dieu imprime Ć  la civilisation, marchant sur lui et l'Ć©crasant avec je ne sais quoi de paisible dans la cruautĆ© et d'inexorable dans l'indiffĆ©rence. Ƃmes tombĆ©es au fond de l'infortune possible, malheureux hommes perdus au plus bas de ces limbes où l'on ne regarde plus, les rĆ©prouvĆ©s de la loi sentent peser de tout son poids sur leur tĆŖte cette sociĆ©tĆ© humaine, si formidable pour qui est dehors, si effroyable pour qui est dessous. Dans cette situation, Jean Valjean songeait, et quelle pouvait ĆŖtre la nature de sa rĆŖverie? Si le grain de mil sous la meule avait des pensĆ©es, il penserait sans doute ce que pensait Jean Valjean. Toutes ces choses, rĆ©alitĆ©s pleines de spectres, fantasmagories pleines de rĆ©alitĆ©s, avaient fini par lui crĆ©er une sorte d'Ć©tat intĆ©rieur presque inexprimable. Par moments, au milieu de son travail du bagne, il s'arrĆŖtait. Il se mettait Ć  penser. Sa raison, Ć  la fois plus mĆ»re et plus troublĆ©e qu'autrefois, se rĆ©voltait. Tout ce qui lui Ć©tait arrivĆ© lui paraissait absurde; tout ce qui l'entourait lui paraissait impossible. Il se disait: c'est un rĆŖve. Il regardait l'argousin debout Ć  quelques pas de lui; l'argousin lui semblait un fantĆ“me; tout Ć  coup le fantĆ“me lui donnait un coup de bĆ¢ton. La nature visible existait Ć  peine pour lui. Il serait presque vrai de dire qu'il n'y avait point pour Jean Valjean de soleil, ni de beaux jours d'Ć©tĆ©, ni de ciel rayonnant, ni de fraĆ®ches aubes d'avril. Je ne sais quel jour de soupirail Ć©clairait habituellement son Ć¢me. Pour rĆ©sumer, en terminant, ce qui peut ĆŖtre rĆ©sumĆ© et traduit en rĆ©sultats positifs dans tout ce que nous venons d'indiquer, nous nous bornerons Ć  constater qu'en dix-neuf ans, Jean Valjean, l'inoffensif Ć©mondeur de Faverolles, le redoutable galĆ©rien de Toulon, Ć©tait devenu capable, grĆ¢ce Ć  la maniĆØre dont le bagne l'avait faƧonnĆ©, de deux espĆØces de mauvaises actions: premiĆØrement, d'une mauvaise action rapide, irrĆ©flĆ©chie, pleine d'Ć©tourdissement, toute d'instinct, sorte de reprĆ©saille pour le mal souffert; deuxiĆØmement, d'une mauvaise action grave, sĆ©rieuse, dĆ©battue en conscience et mĆ©ditĆ©e avec les idĆ©es fausses que peut donner un pareil malheur. Ses prĆ©mĆ©ditations passaient par les trois phases successives que les natures d'une certaine trempe peuvent seules parcourir, raisonnement, volontĆ©, obstination. Il avait pour mobiles l'indignation habituelle, l'amertume de l'Ć¢me, le profond sentiment des iniquitĆ©s subies, la rĆ©action, mĆŖme contre les bons, les innocents et les justes, s'il y en a. Le point de dĆ©part comme le point d'arrivĆ©e de toutes ses pensĆ©es Ć©tait la haine de la loi humaine; cette haine qui, si elle n'est arrĆŖtĆ©e dans son dĆ©veloppement par quelque incident providentiel, devient, dans un temps donnĆ©, la haine de la sociĆ©tĆ©, puis la haine du genre humain, puis la haine de la crĆ©ation, et se traduit par un vague et incessant et brutal dĆ©sir de nuire, n'importe Ć  qui, Ć  un ĆŖtre vivant quelconque. Comme on voit, ce n'Ć©tait pas sans raison que le passeport qualifiait Jean Valjean d'_homme trĆØs dangereux_. D'annĆ©e en annĆ©e, cette Ć¢me s'Ć©tait dessĆ©chĆ©e de plus en plus, lentement, mais fatalement. ƀ coeur sec, oeil sec. ƀ sa sortie du bagne, il y avait dix-neuf ans qu'il n'avait versĆ© une larme. Chapitre VIII L'onde et l'ombre Un homme Ć  la mer! Qu'importe! le navire ne s'arrĆŖte pas. Le vent souffle, ce sombre navire-lĆ  a une route qu'il est forcĆ© de continuer. Il passe. L'homme disparaĆ®t, puis reparaĆ®t, il plonge et remonte Ć  la surface, il appelle, il tend les bras, on ne l'entend pas; le navire, frissonnant sous l'ouragan, est tout Ć  sa manoeuvre, les matelots et les passagers ne voient mĆŖme plus l'homme submergĆ©; sa misĆ©rable tĆŖte n'est qu'un point dans l'Ć©normitĆ© des vagues. Il jette des cris dĆ©sespĆ©rĆ©s dans les profondeurs. Quel spectre que cette voile qui s'en va! Il la regarde, il la regarde frĆ©nĆ©tiquement. Elle s'Ć©loigne, elle blĆŖmit, elle dĆ©croĆ®t. Il Ć©tait lĆ  tout Ć  l'heure, il Ć©tait de l'Ć©quipage, il allait et venait sur le pont avec les autres, il avait sa part de respiration et de soleil, il Ć©tait un vivant. Maintenant, que s'est-il donc passĆ©? Il a glissĆ©, il est tombĆ©, c'est fini. Il est dans l'eau monstrueuse. Il n'a plus sous les pieds que de la fuite et de l'Ć©croulement. Les flots dĆ©chirĆ©s et dĆ©chiquetĆ©s par le vent l'environnent hideusement, les roulis de l'abĆ®me l'emportent, tous les haillons de l'eau s'agitent autour de sa tĆŖte, une populace de vagues crache sur lui, de confuses ouvertures le dĆ©vorent Ć  demi; chaque fois qu'il enfonce, il entrevoit des prĆ©cipices pleins de nuit; d'affreuses vĆ©gĆ©tations inconnues le saisissent, lui nouent les pieds, le tirent Ć  elles; il sent qu'il devient abĆ®me, il fait partie de l'Ć©cume, les flots se le jettent de l'un Ć  l'autre, il boit l'amertume, l'ocĆ©an lĆ¢che s'acharne Ć  le noyer, l'Ć©normitĆ© joue avec son agonie. Il semble que toute cette eau soit de la haine. Il lutte pourtant, il essaie de se dĆ©fendre, il essaie de se soutenir, il fait effort, il nage. Lui, cette pauvre force tout de suite Ć©puisĆ©e, il combat l'inĆ©puisable. Où donc est le navire? LĆ -bas. ƀ peine visible dans les pĆ¢les tĆ©nĆØbres de l'horizon. Les rafales soufflent; toutes les Ć©cumes l'accablent. Il lĆØve les yeux et ne voit que les lividitĆ©s des nuages. Il assiste, agonisant, Ć  l'immense dĆ©mence de la mer. Il est suppliciĆ© par cette folie. Il entend des bruits Ć©trangers Ć  l'homme qui semblent venir d'au delĆ  de la terre et d'on ne sait quel dehors effrayant. Il y a des oiseaux dans les nuĆ©es, de mĆŖme qu'il y a des anges au-dessus des dĆ©tresses humaines, mais que peuvent-ils pour lui? Cela vole, chante et plane, et lui, il rĆ¢le. Il se sent enseveli Ć  la fois par ces deux infinis, l'ocĆ©an et le ciel; l'un est une tombe, l'autre est un linceul. La nuit descend, voilĆ  des heures qu'il nage, ses forces sont Ć  bout; ce navire, cette chose lointaine où il y avait des hommes, s'est effacĆ©; il est seul dans le formidable gouffre crĆ©pusculaire, il enfonce, il se roidit, il se tord, il sent au-dessous de lui les vagues monstres de l'invisible; il appelle. Il n'y a plus d'hommes. Où est Dieu? Il appelle. Quelqu'un! quelqu'un! Il appelle toujours. Rien Ć  l'horizon. Rien au ciel. Il implore l'Ć©tendue, la vague, l'algue, l'Ć©cueil; cela est sourd. Il supplie la tempĆŖte; la tempĆŖte imperturbable n'obĆ©it qu'Ć  l'infini. Autour de lui, l'obscuritĆ©, la brume, la solitude, le tumulte orageux et inconscient, le plissement indĆ©fini des eaux farouches. En lui l'horreur et la fatigue. Sous lui la chute. Pas de point d'appui. Il songe aux aventures tĆ©nĆ©breuses du cadavre dans l'ombre illimitĆ©e. Le froid sans fond le paralyse. Ses mains se crispent et se ferment et prennent du nĆ©ant. Vents, nuĆ©es, tourbillons, souffles, Ć©toiles inutiles! Que faire? Le dĆ©sespĆ©rĆ© s'abandonne, qui est las prend le parti de mourir, il se laisse faire, il se laisse aller, il lĆ¢che prise, et le voilĆ  qui roule Ć  jamais dans les profondeurs lugubres de l'engloutissement. Ɣ marche implacable des sociĆ©tĆ©s humaines! Pertes d'hommes et d'Ć¢mes chemin faisant! OcĆ©an où tombe tout ce que laisse tomber la loi! Disparition sinistre du secours! Ć“ mort morale! La mer, c'est l'inexorable nuit sociale où la pĆ©nalitĆ© jette ses damnĆ©s. La mer, c'est l'immense misĆØre. L'Ć¢me, Ć  vau-l'eau dans ce gouffre, peut devenir un cadavre. Qui la ressuscitera? Chapitre IX Nouveaux griefs Quand vint l'heure de la sortie du bagne, quand Jean Valjean entendit Ć  son oreille ce mot Ć©trange: _tu es libre_! le moment fut invraisemblable et inouĆÆ, un rayon de vive lumiĆØre, un rayon de la vraie lumiĆØre des vivants pĆ©nĆ©tra subitement en lui. Mais ce rayon ne tarda point Ć  pĆ¢lir. Jean Valjean avait Ć©tĆ© Ć©bloui de l'idĆ©e de la libertĆ©. Il avait cru Ć  une vie nouvelle. Il vit bien vite ce que c'Ć©tait qu'une libertĆ© Ć  laquelle on donne un passeport jaune. Et autour de cela bien des amertumes. Il avait calculĆ© que sa masse, pendant son sĆ©jour au bagne, aurait dĆ» s'Ć©lever Ć  cent soixante et onze francs. Il est juste d'ajouter qu'il avait oubliĆ© de faire entrer dans ses calculs le repos forcĆ© des dimanches et fĆŖtes qui, pour dix-neuf ans, entraĆ®nait une diminution de vingt-quatre francs environ. Quoi qu'il en fĆ»t, cette masse avait Ć©tĆ© rĆ©duite, par diverses retenues locales, Ć  la somme de cent neuf francs quinze sous, qui lui avait Ć©tĆ© comptĆ©e Ć  sa sortie. Il n'y avait rien compris, et se croyait lĆ©sĆ©. Disons le mot, volĆ©. Le lendemain de sa libĆ©ration, Ć  Grasse, il vit devant la porte d'une distillerie de fleurs d'oranger des hommes qui dĆ©chargeaient des ballots. Il offrit ses services. La besogne pressait, on les accepta. Il se mit Ć  l'ouvrage. Il Ć©tait intelligent, robuste et adroit; il faisait de son mieux; le maĆ®tre paraissait content. Pendant qu'il travaillait, un gendarme passa, le remarqua, et lui demanda ses papiers. Il fallut montrer le passeport jaune. Cela fait, Jean Valjean reprit son travail. Un peu auparavant, il avait questionnĆ© l'un des ouvriers sur ce qu'ils gagnaient Ć  cette besogne par jour; on lui avait rĆ©pondu: _trente sous_. Le soir venu, comme il Ć©tait forcĆ© de repartir le lendemain matin, il se prĆ©senta devant le maĆ®tre de la distillerie et le pria de le payer. Le maĆ®tre ne profĆ©ra pas une parole, et lui remit vingt-cinq sous. Il rĆ©clama. On lui rĆ©pondit: cela est assez bon pour toi. Il insista. Le maĆ®tre le regarda entre les deux yeux et lui dit: _Gare le bloc_. LĆ  encore il se considĆ©ra comme volĆ©. La sociĆ©tĆ©, l'Ć©tat, en lui diminuant sa masse, l'avait volĆ© en grand. Maintenant, c'Ć©tait le tour de l'individu qui le volait en petit. LibĆ©ration n'est pas dĆ©livrance. On sort du bagne, mais non de la condamnation. VoilĆ  ce qui lui Ć©tait arrivĆ© Ć  Grasse. On a vu de quelle faƧon il avait Ć©tĆ© accueilli Ć  Digne. Chapitre X L'homme rĆ©veillĆ© Donc, comme deux heures du matin sonnaient Ć  l'horloge de la cathĆ©drale, Jean Valjean se rĆ©veilla. Ce qui le rĆ©veilla, c'est que le lit Ć©tait trop bon. Il y avait vingt ans bientĆ“t qu'il n'avait couchĆ© dans un lit, et quoiqu'il ne se fĆ»t pas dĆ©shabillĆ©, la sensation Ć©tait trop nouvelle pour ne pas troubler son sommeil. Il avait dormi plus de quatre heures. Sa fatigue Ć©tait passĆ©e. Il Ć©tait accoutumĆ© Ć  ne pas donner beaucoup d'heures au repos. Il ouvrit les yeux et regarda un moment dans l'obscuritĆ© autour de lui, puis il les referma pour se rendormir. Quand beaucoup de sensations diverses ont agitĆ© la journĆ©e, quand des choses prĆ©occupent l'esprit, on s'endort, mais on ne se rendort pas. Le sommeil vient plus aisĆ©ment qu'il ne revient. C'est ce qui arriva Ć  Jean Valjean. Il ne put se rendormir, et il se mit Ć  penser. Il Ć©tait dans un de ces moments où les idĆ©es qu'on a dans l'esprit sont troubles. Il avait une sorte de va-et-vient obscur dans le cerveau. Ses souvenirs anciens et ses souvenirs immĆ©diats y flottaient pĆŖle-mĆŖle et s'y croisaient confusĆ©ment, perdant leurs formes, se grossissant dĆ©mesurĆ©ment, puis disparaissant tout Ć  coup comme dans une eau fangeuse et agitĆ©e. Beaucoup de pensĆ©es lui venaient, mais il y en avait une qui se reprĆ©sentait continuellement et qui chassait toutes les autres. Cette pensĆ©e, nous allons la dire tout de suite:--Il avait remarquĆ© les six couverts d'argent et la grande cuiller que madame Magloire avait posĆ©s sur la table. Ces six couverts d'argent l'obsĆ©daient.--Ils Ć©taient lĆ .--ƀ quelques pas.--ƀ l'instant où il avait traversĆ© la chambre d'Ć  cĆ“tĆ© pour venir dans celle où il Ć©tait, la vieille servante les mettait dans un petit placard Ć  la tĆŖte du lit.--Il avait bien remarquĆ© ce placard.--ƀ droite, en entrant par la salle Ć  manger.--Ils Ć©taient massifs.--Et de vieille argenterie.--Avec la grande cuiller, on en tirerait au moins deux cents francs.--Le double de ce qu'il avait gagnĆ© en dix-neuf ans.--Il est vrai qu'il eĆ»t gagnĆ© davantage si l'_administration_ ne l'avait pas _volĆ©_. Son esprit oscilla toute une grande heure dans des fluctuations auxquelles se mĆŖlait bien quelque lutte. Trois heures sonnĆØrent. Il rouvrit les yeux, se dressa brusquement sur son sĆ©ant, Ć©tendit le bras et tĆ¢ta son havresac qu'il avait jetĆ© dans le coin de l'alcĆ“ve, puis il laissa pendre ses jambes et poser ses pieds Ć  terre, et se trouva, presque sans savoir comment, assis sur son lit. Il resta un certain temps rĆŖveur dans cette attitude qui eĆ»t eu quelque chose de sinistre pour quelqu'un qui l'eĆ»t aperƧu ainsi dans cette ombre, seul Ć©veillĆ© dans la maison endormie. Tout Ć  coup il se baissa, Ć“ta ses souliers et les posa doucement sur la natte prĆØs du lit, puis il reprit sa posture de rĆŖverie et redevint immobile. Au milieu de cette mĆ©ditation hideuse, les idĆ©es que nous venons d'indiquer remuaient sans relĆ¢che son cerveau, entraient, sortaient, rentraient, faisaient sur lui une sorte de pesĆ©e; et puis il songeait aussi, sans savoir pourquoi, et avec cette obstination machinale de la rĆŖverie, Ć  un forƧat nommĆ© Brevet qu'il avait connu au bagne, et dont le pantalon n'Ć©tait retenu que par une seule bretelle de coton tricotĆ©. Le dessin en damier de cette bretelle lui revenait sans cesse Ć  l'esprit. Il demeurait dans cette situation, et y fĆ»t peut-ĆŖtre restĆ© indĆ©finiment jusqu'au lever du jour, si l'horloge n'eĆ»t sonnĆ© un coup--le quart ou la demie. Il sembla que ce coup lui eĆ»t dit: allons! Il se leva debout, hĆ©sita encore un moment, et Ć©couta; tout se taisait dans la maison; alors il marcha droit et Ć  petits pas vers la fenĆŖtre qu'il entrevoyait. La nuit n'Ć©tait pas trĆØs obscure; c'Ć©tait une pleine lune sur laquelle couraient de larges nuĆ©es chassĆ©es par le vent. Cela faisait au dehors des alternatives d'ombre et de clartĆ©, des Ć©clipses, puis des Ć©claircies, et au dedans une sorte de crĆ©puscule. Ce crĆ©puscule, suffisant pour qu'on pĆ»t se guider, intermittent Ć  cause des nuages, ressemblait Ć  l'espĆØce de lividitĆ© qui tombe d'un soupirail de cave devant lequel vont et viennent des passants. ArrivĆ© Ć  la fenĆŖtre, Jean Valjean l'examina. Elle Ć©tait sans barreaux, donnait sur le jardin et n'Ć©tait fermĆ©e, selon la mode du pays, que d'une petite clavette. Il l'ouvrit, mais, comme un air froid et vif entra brusquement dans la chambre, il la referma tout de suite. Il regarda le jardin de ce regard attentif qui Ć©tudie plus encore qu'il ne regarde. Le jardin Ć©tait enclos d'un mur blanc assez bas, facile Ć  escalader. Au fond, au-delĆ , il distingua des tĆŖtes d'arbres Ć©galement espacĆ©es, ce qui indiquait que ce mur sĆ©parait le jardin d'une avenue ou d'une ruelle plantĆ©e. Ce coup d'oeil jetĆ©, il fit le mouvement d'un homme dĆ©terminĆ©, marcha Ć  son alcĆ“ve, prit son havresac, l'ouvrit, le fouilla, en tira quelque chose qu'il posa sur le lit, mit ses souliers dans une des poches, referma le tout, chargea le sac sur ses Ć©paules, se couvrit de sa casquette dont il baissa la visiĆØre sur ses yeux, chercha son bĆ¢ton en tĆ¢tonnant, et l'alla poser dans l'angle de la fenĆŖtre, puis revint au lit et saisit rĆ©solument l'objet qu'il y avait dĆ©posĆ©. Cela ressemblait Ć  une barre de fer courte, aiguisĆ©e comme un Ć©pieu Ć  l'une de ses extrĆ©mitĆ©s. Il eĆ»t Ć©tĆ© difficile de distinguer dans les tĆ©nĆØbres pour quel emploi avait pu ĆŖtre faƧonnĆ© ce morceau de fer. C'Ć©tait peut-ĆŖtre un levier? C'Ć©tait peut-ĆŖtre une massue? Au jour on eĆ»t pu reconnaĆ®tre que ce n'Ć©tait autre chose qu'un chandelier de mineur. On employait alors quelquefois les forƧats Ć  extraire de la roche des hautes collines qui environnent Toulon, et il n'Ć©tait pas rare qu'ils eussent Ć  leur disposition des outils de mineur. Les chandeliers des mineurs sont en fer massif, terminĆ©s Ć  leur extrĆ©mitĆ© infĆ©rieure par une pointe au moyen de laquelle on les enfonce dans le rocher. Il prit ce chandelier dans sa main droite, et retenant son haleine, assourdissant son pas, il se dirigea vers la porte de la chambre voisine, celle de l'Ć©vĆŖque, comme on sait. ArrivĆ© Ć  cette porte, il la trouva entrebĆ¢illĆ©e. L'Ć©vĆŖque ne l'avait point fermĆ©e. Chapitre XI Ce qu'il fait Jean Valjean Ć©couta. Aucun bruit. Il poussa la porte. Il la poussa du bout du doigt, lĆ©gĆØrement, avec cette douceur furtive et inquiĆØte d'un chat qui veut entrer. La porte cĆ©da Ć  la pression et fit un mouvement imperceptible et silencieux qui Ć©largit un peu l'ouverture. Il attendit un moment, puis poussa la porte une seconde fois, plus hardiment. Elle continua de cĆ©der en silence. L'ouverture Ć©tait assez grande maintenant pour qu'il pĆ»t passer. Mais il y avait prĆØs de la porte une petite table qui faisait avec elle un angle gĆŖnant et qui barrait l'entrĆ©e. Jean Valjean reconnut la difficultĆ©. Il fallait Ć  toute force que l'ouverture fĆ»t encore Ć©largie. Il prit son parti, et poussa une troisiĆØme fois la porte, plus Ć©nergiquement que les deux premiĆØres. Cette fois il y eut un gond mal huilĆ© qui jeta tout Ć  coup dans cette obscuritĆ© un cri rauque et prolongĆ©. Jean Valjean tressaillit. Le bruit de ce gond sonna dans son oreille avec quelque chose d'Ć©clatant et de formidable comme le clairon du jugement dernier. Dans les grossissements fantastiques de la premiĆØre minute, il se figura presque que ce gond venait de s'animer et de prendre tout Ć  coup une vie terrible, et qu'il aboyait comme un chien pour avertir tout le monde et rĆ©veiller les gens endormis. Il s'arrĆŖta, frissonnant, Ć©perdu, et retomba de la pointe du pied sur le talon. Il entendait ses artĆØres battre dans ses tempes comme deux marteaux de forge, et il lui semblait que son souffle sortait de sa poitrine avec le bruit du vent qui sort d'une caverne. Il lui paraissait impossible que l'horrible clameur de ce gond irritĆ© n'eĆ»t pas Ć©branlĆ© toute la maison comme une secousse de tremblement de terre; la porte, poussĆ©e par lui, avait pris l'alarme et avait appelĆ©; le vieillard allait se lever, les deux vieilles femmes allaient crier, on viendrait Ć  l'aide; avant un quart d'heure, la ville serait en rumeur et la gendarmerie sur pied. Un moment il se crut perdu. Il demeura où il Ć©tait, pĆ©trifiĆ© comme la statue de sel, n'osant faire un mouvement. Quelques minutes s'Ć©coulĆØrent. La porte s'Ć©tait ouverte toute grande. Il se hasarda Ć  regarder dans la chambre. Rien n'y avait bougĆ©. Il prĆŖta l'oreille. Rien ne remuait dans la maison. Le bruit du gond rouillĆ© n'avait Ć©veillĆ© personne. Ce premier danger Ć©tait passĆ©, mais il y avait encore en lui un affreux tumulte. Il ne recula pas pourtant. MĆŖme quand il s'Ć©tait cru perdu, il n'avait pas reculĆ©. Il ne songea plus qu'Ć  finir vite. Il fit un pas et entra dans la chambre. Cette chambre Ć©tait dans un calme parfait. On y distinguait ƧƠ et lĆ  des formes confuses et vagues qui, au jour, Ć©taient des papiers Ć©pars sur une table, des in-folio ouverts, des volumes empilĆ©s sur un tabouret, un fauteuil chargĆ© de vĆŖtements, un prie-Dieu, et qui Ć  cette heure n'Ć©taient plus que des coins tĆ©nĆ©breux et des places blanchĆ¢tres. Jean Valjean avanƧa avec prĆ©caution en Ć©vitant de se heurter aux meubles. Il entendait au fond de la chambre la respiration Ć©gale et tranquille de l'Ć©vĆŖque endormi. Il s'arrĆŖta tout Ć  coup. Il Ć©tait prĆØs du lit. Il y Ć©tait arrivĆ© plus tĆ“t qu'il n'aurait cru. La nature mĆŖle quelquefois ses effets et ses spectacles Ć  nos actions avec une espĆØce d'Ć -propos sombre et intelligent, comme si elle voulait nous faire rĆ©flĆ©chir. Depuis prĆØs d'une demi-heure un grand nuage couvrait le ciel. Au moment où Jean Valjean s'arrĆŖta en face du lit, ce nuage se dĆ©chira, comme s'il l'eĆ»t fait exprĆØs, et un rayon de lune, traversant la longue fenĆŖtre, vint Ć©clairer subitement le visage pĆ¢le de l'Ć©vĆŖque. Il dormait paisiblement. Il Ć©tait presque vĆŖtu dans son lit, Ć  cause des nuits froides des Basses-Alpes, d'un vĆŖtement de laine brune qui lui couvrait les bras jusqu'aux poignets. Sa tĆŖte Ć©tait renversĆ©e sur l'oreiller dans l'attitude abandonnĆ©e du repos; il laissait pendre hors du lit sa main ornĆ©e de l'anneau pastoral et d'où Ć©taient tombĆ©es tant de bonnes oeuvres et de saintes actions. Toute sa face s'illuminait d'une vague expression de satisfaction, d'espĆ©rance et de bĆ©atitude. C'Ć©tait plus qu'un sourire et presque un rayonnement. Il y avait sur son front l'inexprimable rĆ©verbĆ©ration d'une lumiĆØre qu'on ne voyait pas. L'Ć¢me des justes pendant le sommeil contemple un ciel mystĆ©rieux. Un reflet de ce ciel Ć©tait sur l'Ć©vĆŖque. C'Ć©tait en mĆŖme temps une transparence lumineuse, car ce ciel Ć©tait au dedans de lui. Ce ciel, c'Ć©tait sa conscience. Au moment où le rayon de lune vint se superposer, pour ainsi dire, Ć  cette clartĆ© intĆ©rieure, l'Ć©vĆŖque endormi apparut comme dans une gloire. Cela pourtant resta doux et voilĆ© d'un demi-jour ineffable. Cette lune dans le ciel, cette nature assoupie, ce jardin sans un frisson, cette maison si calme, l'heure, le moment, le silence, ajoutaient je ne sais quoi de solennel et d'indicible au vĆ©nĆ©rable repos de ce sage, et enveloppaient d'une sorte d'aurĆ©ole majestueuse et sereine ces cheveux blancs et ces yeux fermĆ©s, cette figure où tout Ć©tait espĆ©rance et où tout Ć©tait confiance, cette tĆŖte de vieillard et ce sommeil d'enfant. Il y avait presque de la divinitĆ© dans cet homme ainsi auguste Ć  son insu. Jean Valjean, lui, Ć©tait dans l'ombre, son chandelier de fer Ć  la main, debout, immobile, effarĆ© de ce vieillard lumineux. Jamais il n'avait rien vu de pareil. Cette confiance l'Ć©pouvantait. Le monde moral n'a pas de plus grand spectacle que celui-lĆ : une conscience troublĆ©e et inquiĆØte, parvenue au bord d'une mauvaise action, et contemplant le sommeil d'un juste. Ce sommeil, dans cet isolement, et avec un voisin tel que lui, avait quelque chose de sublime qu'il sentait vaguement, mais impĆ©rieusement. Nul n'eĆ»t pu dire ce qui se passait en lui, pas mĆŖme lui. Pour essayer de s'en rendre compte, il faut rĆŖver ce qu'il y a de plus violent en prĆ©sence de ce qu'il y a de plus doux. Sur son visage mĆŖme on n'eĆ»t rien pu distinguer avec certitude. C'Ć©tait une sorte d'Ć©tonnement hagard. Il regardait cela. VoilĆ  tout. Mais quelle Ć©tait sa pensĆ©e? Il eĆ»t Ć©tĆ© impossible de le deviner. Ce qui Ć©tait Ć©vident, c'est qu'il Ć©tait Ć©mu et bouleversĆ©. Mais de quelle nature Ć©tait cette Ć©motion? Son oeil ne se dĆ©tachait pas du vieillard. La seule chose qui se dĆ©gageĆ¢t clairement de son attitude et de sa physionomie, c'Ć©tait une Ć©trange indĆ©cision. On eĆ»t dit qu'il hĆ©sitait entre les deux abĆ®mes, celui où l'on se perd et celui où l'on se sauve. Il semblait prĆŖt Ć  briser ce crĆ¢ne ou Ć  baiser cette main. Au bout de quelques instants, son bras gauche se leva lentement vers son front, et il Ć“ta sa casquette, puis son bras retomba avec la mĆŖme lenteur, et Jean Valjean rentra dans sa contemplation, sa casquette dans la main gauche, sa massue dans la main droite, ses cheveux hĆ©rissĆ©s sur sa tĆŖte farouche. L'Ć©vĆŖque continuait de dormir dans une paix profonde sous ce regard effrayant. Un reflet de lune faisait confusĆ©ment visible au-dessus de la cheminĆ©e le crucifix qui semblait leur ouvrir les bras Ć  tous les deux, avec une bĆ©nĆ©diction pour l'un et un pardon pour l'autre. Tout Ć  coup Jean Valjean remit sa casquette sur son front, puis marcha rapidement, le long du lit, sans regarder l'Ć©vĆŖque, droit au placard qu'il entrevoyait prĆØs du chevet; il leva le chandelier de fer comme pour forcer la serrure; la clef y Ć©tait; il l'ouvrit; la premiĆØre chose qui lui apparut fut le panier d'argenterie; il le prit, traversa la chambre Ć  grands pas sans prĆ©caution et sans s'occuper du bruit, gagna la porte, rentra dans l'oratoire, ouvrit la fenĆŖtre, saisit un bĆ¢ton, enjamba l'appui du rez-de-chaussĆ©e, mit l'argenterie dans son sac, jeta le panier, franchit le jardin, sauta par-dessus le mur comme un tigre, et s'enfuit. Chapitre XII L'Ć©vĆŖque travaille Le lendemain, au soleil levant, monseigneur Bienvenu se promenait dans son jardin. Madame Magloire accourut vers lui toute bouleversĆ©e. --Monseigneur, monseigneur, cria-t-elle, votre grandeur sait-elle où est le panier d'argenterie? --Oui, dit l'Ć©vĆŖque. --JĆ©sus-Dieu soit bĆ©ni! reprit-elle. Je ne savais ce qu'il Ć©tait devenu. L'Ć©vĆŖque venait de ramasser le panier dans une plate-bande. Il le prĆ©senta Ć  madame Magloire. --Le voilĆ . --Eh bien? dit-elle. Rien dedans! et l'argenterie? --Ah! repartit l'Ć©vĆŖque. C'est donc l'argenterie qui vous occupe? Je ne sais où elle est. --Grand bon Dieu! elle est volĆ©e! C'est l'homme d'hier soir qui l'a volĆ©e! En un clin d'oeil, avec toute sa vivacitĆ© de vieille alerte, madame Magloire courut Ć  l'oratoire, entra dans l'alcĆ“ve et revint vers l'Ć©vĆŖque. L'Ć©vĆŖque venait de se baisser et considĆ©rait en soupirant un plant de cochlĆ©aria des Guillons que le panier avait brisĆ© en tombant Ć  travers la plate-bande. Il se redressa au cri de madame Magloire. --Monseigneur, l'homme est parti! l'argenterie est volĆ©e! Tout en poussant cette exclamation, ses yeux tombaient sur un angle du jardin où l'on voyait des traces d'escalade. Le chevron du mur avait Ć©tĆ© arrachĆ©. --Tenez! c'est par lĆ  qu'il s'en est allĆ©. Il a sautĆ© dans la ruelle Cochefilet! Ah! l'abomination! Il nous a volĆ© notre argenterie! L'Ć©vĆŖque resta un moment silencieux, puis leva son oeil sĆ©rieux, et dit Ć  madame Magloire avec douceur: --Et d'abord, cette argenterie Ć©tait-elle Ć  nous? Madame Magloire resta interdite. Il y eut encore un silence, puis l'Ć©vĆŖque continua: --Madame Magloire, je dĆ©tenais Ć  tort et depuis longtemps cette argenterie. Elle Ć©tait aux pauvres. Qu'Ć©tait-ce que cet homme? Un pauvre Ć©videmment. --HĆ©las JĆ©sus! repartit madame Magloire. Ce n'est pas pour moi ni pour mademoiselle. Cela nous est bien Ć©gal. Mais c'est pour monseigneur. Dans quoi monseigneur va-t-il manger maintenant? L'Ć©vĆŖque la regarda d'un air Ć©tonnĆ©. --Ah ƧƠ mais! est-ce qu'il n'y a pas des couverts d'Ć©tain? Madame Magloire haussa les Ć©paules. --L'Ć©tain a une odeur. --Alors, des couverts de fer. Madame Magloire fit une grimace significative. --Le fer a un goĆ»t. --Eh bien, dit l'Ć©vĆŖque, des couverts de bois. Quelques instants aprĆØs, il dĆ©jeunait Ć  cette mĆŖme table où Jean Valjean s'Ć©tait assis la veille. Tout en dĆ©jeunant, monseigneur Bienvenu faisait gaĆ®ment remarquer Ć  sa soeur qui ne disait rien et Ć  madame Magloire qui grommelait sourdement qu'il n'est nullement besoin d'une cuiller ni d'une fourchette, mĆŖme en bois, pour tremper un morceau de pain dans une tasse de lait. --Aussi a-t-on idĆ©e! disait madame Magloire toute seule en allant et venant, recevoir un homme comme cela! et le loger Ć  cĆ“tĆ© de soi! et quel bonheur encore qu'il n'ait fait que voler! Ah mon Dieu! cela fait frĆ©mir quand on songe! Comme le frĆØre et la soeur allaient se lever de table, on frappa Ć  la porte. --Entrez, dit l'Ć©vĆŖque. La porte s'ouvrit. Un groupe Ć©trange et violent apparut sur le seuil. Trois hommes en tenaient un quatriĆØme au collet. Les trois hommes Ć©taient des gendarmes; l'autre Ć©tait Jean Valjean. Un brigadier de gendarmerie, qui semblait conduire le groupe, Ć©tait prĆØs de la porte. Il entra et s'avanƧa vers l'Ć©vĆŖque en faisant le salut militaire. --Monseigneur... dit-il. ƀ ce mot Jean Valjean, qui Ć©tait morne et semblait abattu, releva la tĆŖte d'un air stupĆ©fait. --Monseigneur! murmura-t-il. Ce n'est donc pas le curĆ©?... --Silence! dit un gendarme. C'est monseigneur l'Ć©vĆŖque. Cependant monseigneur Bienvenu s'Ć©tait approchĆ© aussi vivement que son grand Ć¢ge le lui permettait. --Ah! vous voilĆ ! s'Ć©cria-t-il en regardant Jean Valjean. Je suis aise de vous voir. Et bien mais! je vous avais donnĆ© les chandeliers aussi, qui sont en argent comme le reste et dont vous pourrez bien avoir deux cents francs. Pourquoi ne les avez-vous pas emportĆ©s avec vos couverts? Jean Valjean ouvrit les yeux et regarda le vĆ©nĆ©rable Ć©vĆŖque avec une expression qu'aucune langue humaine ne pourrait rendre. --Monseigneur, dit le brigadier de gendarmerie, ce que cet homme disait Ć©tait donc vrai? Nous l'avons rencontrĆ©. Il allait comme quelqu'un qui s'en va. Nous l'avons arrĆŖtĆ© pour voir. Il avait cette argenterie.... --Et il vous a dit, interrompit l'Ć©vĆŖque en souriant, qu'elle lui avait Ć©tĆ© donnĆ©e par un vieux bonhomme de prĆŖtre chez lequel il avait passĆ© la nuit? Je vois la chose. Et vous l'avez ramenĆ© ici? C'est une mĆ©prise. --Comme cela, reprit le brigadier, nous pouvons le laisser aller? --Sans doute, rĆ©pondit l'Ć©vĆŖque. Les gendarmes lĆ¢chĆØrent Jean Valjean qui recula. --Est-ce que c'est vrai qu'on me laisse? dit-il d'une voix presque inarticulĆ©e et comme s'il parlait dans le sommeil. --Oui, on te laisse, tu n'entends donc pas? dit un gendarme. --Mon ami, reprit l'Ć©vĆŖque, avant de vous en aller, voici vos chandeliers. Prenez-les. Il alla Ć  la cheminĆ©e, prit les deux flambeaux d'argent et les apporta Ć  Jean Valjean. Les deux femmes le regardaient faire sans un mot, sans un geste, sans un regard qui pĆ»t dĆ©ranger l'Ć©vĆŖque. Jean Valjean tremblait de tous ses membres. Il prit les deux chandeliers machinalement et d'un air Ć©garĆ©. --Maintenant, dit l'Ć©vĆŖque, allez en paix. --ƀ propos, quand vous reviendrez, mon ami, il est inutile de passer par le jardin. Vous pourrez toujours entrer et sortir par la porte de la rue. Elle n'est fermĆ©e qu'au loquet jour et nuit. Puis se tournant vers la gendarmerie: --Messieurs, vous pouvez vous retirer. Les gendarmes s'Ć©loignĆØrent. Jean Valjean Ć©tait comme un homme qui va s'Ć©vanouir. L'Ć©vĆŖque s'approcha de lui, et lui dit Ć  voix basse: --N'oubliez pas, n'oubliez jamais que vous m'avez promis d'employer cet argent Ć  devenir honnĆŖte homme. Jean Valjean, qui n'avait aucun souvenir d'avoir rien promis, resta interdit. L'Ć©vĆŖque avait appuyĆ© sur ces paroles en les prononƧant. Il reprit avec une sorte de solennitĆ©: --Jean Valjean, mon frĆØre, vous n'appartenez plus au mal, mais au bien. C'est votre Ć¢me que je vous achĆØte; je la retire aux pensĆ©es noires et Ć  l'esprit de perdition, et je la donne Ć  Dieu. Chapitre XIII Petit-Gervais Jean Valjean sortit de la ville comme s'il s'Ć©chappait. Il se mit Ć  marcher en toute hĆ¢te dans les champs, prenant les chemins et les sentiers qui se prĆ©sentaient sans s'apercevoir qu'il revenait Ć  chaque instant sur ses pas. Il erra ainsi toute la matinĆ©e, n'ayant pas mangĆ© et n'ayant pas faim. Il Ć©tait en proie Ć  une foule de sensations nouvelles. Il se sentait une sorte de colĆØre; il ne savait contre qui. Il n'eĆ»t pu dire s'il Ć©tait touchĆ© ou humiliĆ©. Il lui venait par moments un attendrissement Ć©trange qu'il combattait et auquel il opposait l'endurcissement de ses vingt derniĆØres annĆ©es. Cet Ć©tat le fatiguait. Il voyait avec inquiĆ©tude s'Ć©branler au dedans de lui l'espĆØce de calme affreux que l'injustice de son malheur lui avait donnĆ©. Il se demandait qu'est-ce qui remplacerait cela. Parfois il eĆ»t vraiment mieux aimĆ© ĆŖtre en prison avec les gendarmes, et que les choses ne se fussent point passĆ©es ainsi; cela l'eĆ»t moins agitĆ©. Bien que la saison fut assez avancĆ©e, il y avait encore ƧƠ et lĆ  dans les haies quelques fleurs tardives dont l'odeur, qu'il traversait en marchant, lui rappelait des souvenirs d'enfance. Ces souvenirs lui Ć©taient presque insupportables, tant il y avait longtemps qu'ils ne lui Ć©taient apparus. Des pensĆ©es inexprimables s'amoncelĆØrent ainsi en lui toute la journĆ©e. Comme le soleil dĆ©clinait au couchant, allongeant sur le sol l'ombre du moindre caillou, Jean Valjean Ć©tait assis derriĆØre un buisson dans une grande plaine rousse absolument dĆ©serte. Il n'y avait Ć  l'horizon que les Alpes. Pas mĆŖme le clocher d'un village lointain. Jean Valjean pouvait ĆŖtre Ć  trois lieues de Digne. Un sentier qui coupait la plaine passait Ć  quelques pas du buisson. Au milieu de cette mĆ©ditation qui n'eĆ»t pas peu contribuĆ© Ć  rendre ses haillons effrayants pour quelqu'un qui l'eĆ»t rencontrĆ©, il entendit un bruit joyeux. Il tourna la tĆŖte, et vit venir par le sentier un petit savoyard d'une dizaine d'annĆ©es qui chantait, sa vielle au flanc et sa boĆ®te Ć  marmotte sur le dos; un de ces doux et gais enfants qui vont de pays en pays, laissant voir leurs genoux par les trous de leur pantalon. Tout en chantant l'enfant interrompait de temps en temps sa marche et jouait aux osselets avec quelques piĆØces de monnaie qu'il avait dans sa main, toute sa fortune probablement. Parmi cette monnaie il y avait une piĆØce de quarante sous. L'enfant s'arrĆŖta Ć  cĆ“tĆ© du buisson sans voir Jean Valjean et fit sauter sa poignĆ©e de sous que jusque-lĆ  il avait reƧue avec assez d'adresse tout entiĆØre sur le dos de sa main. Cette fois la piĆØce de quarante sous lui Ć©chappa, et vint rouler vers la broussaille jusqu'Ć  Jean Valjean. Jean Valjean posa le pied dessus. Cependant l'enfant avait suivi sa piĆØce du regard, et l'avait vu. Il ne s'Ć©tonna point et marcha droit Ć  l'homme. C'Ć©tait un lieu absolument solitaire. Aussi loin que le regard pouvait s'Ć©tendre, il n'y avait personne dans la plaine ni dans le sentier. On n'entendait que les petits cris faibles d'une nuĆ©e d'oiseaux de passage qui traversaient le ciel Ć  une hauteur immense. L'enfant tournait le dos au soleil qui lui mettait des fils d'or dans les cheveux et qui empourprait d'une lueur sanglante la face sauvage de Jean Valjean. --Monsieur, dit le petit savoyard, avec cette confiance de l'enfance qui se compose d'ignorance et d'innocence,--ma piĆØce? --Comment t'appelles-tu? dit Jean Valjean. --Petit-Gervais, monsieur. --Va-t'en, dit Jean Valjean. --Monsieur, reprit l'enfant, rendez-moi ma piĆØce. Jean Valjean baissa la tĆŖte et ne rĆ©pondit pas. L'enfant recommenƧa: --Ma piĆØce, monsieur! L'oeil de Jean Valjean resta fixĆ© Ć  terre. --Ma piĆØce! cria l'enfant, ma piĆØce blanche! mon argent! Il semblait que Jean Valjean n'entendit point. L'enfant le prit au collet de sa blouse et le secoua. Et en mĆŖme temps il faisait effort pour dĆ©ranger le gros soulier ferrĆ© posĆ© sur son trĆ©sor. --Je veux ma piĆØce! ma piĆØce de quarante sous! L'enfant pleurait. La tĆŖte de Jean Valjean se releva. Il Ć©tait toujours assis. Ses yeux Ć©taient troubles. Il considĆ©ra l'enfant avec une sorte d'Ć©tonnement, puis il Ć©tendit la main vers son bĆ¢ton et cria d'une voix terrible: --Qui est lĆ ? --Moi, monsieur, rĆ©pondit l'enfant. Petit-Gervais! moi! moi! Rendez-moi mes quarante sous, s'il vous plaĆ®t! Ɣtez votre pied, monsieur, s'il vous plaĆ®t! Puis irritĆ©, quoique tout petit, et devenant presque menaƧant: --Ah, ƧƠ, Ć“terez-vous votre pied? Ɣtez donc votre pied, voyons. --Ah! c'est encore toi! dit Jean Valjean, et se dressant brusquement tout debout, le pied toujours sur la piĆØce d'argent, il ajouta:--Veux-tu bien te sauver! L'enfant effarĆ© le regarda, puis commenƧa Ć  trembler de la tĆŖte aux pieds, et, aprĆØs quelques secondes de stupeur, se mit Ć  s'enfuir en courant de toutes ses forces sans oser tourner le cou ni jeter un cri. Cependant Ć  une certaine distance l'essoufflement le forƧa de s'arrĆŖter, et Jean Valjean, Ć  travers sa rĆŖverie, l'entendit qui sanglotait. Au bout de quelques instants l'enfant avait disparu. Le soleil s'Ć©tait couchĆ©. L'ombre se faisait autour de Jean Valjean. Il n'avait pas mangĆ© de la journĆ©e; il est probable qu'il avait la fiĆØvre. Il Ć©tait restĆ© debout, et n'avait pas changĆ© d'attitude depuis que l'enfant s'Ć©tait enfui. Son souffle soulevait sa poitrine Ć  des intervalles longs et inĆ©gaux. Son regard, arrĆŖtĆ© Ć  dix ou douze pas devant lui, semblait Ć©tudier avec une attention profonde la forme d'un vieux tesson de faĆÆence bleue tombĆ© dans l'herbe. Tout Ć  coup il tressaillit; il venait de sentir le froid du soir. Il raffermit sa casquette sur son front, chercha machinalement Ć  croiser et Ć  boutonner sa blouse, fit un pas, et se baissa pour reprendre Ć  terre son bĆ¢ton. En ce moment il aperƧut la piĆØce de quarante sous que son pied avait Ć  demi enfoncĆ©e dans la terre et qui brillait parmi les cailloux. Ce fut comme une commotion galvanique. Qu'est-ce que c'est que Ƨa? dit-il entre ses dents. Il recula de trois pas, puis s'arrĆŖta, sans pouvoir dĆ©tacher son regard de ce point que son pied avait foulĆ© l'instant d'auparavant, comme si cette chose qui luisait lĆ  dans l'obscuritĆ© eĆ»t Ć©tĆ© un oeil ouvert fixĆ© sur lui. Au bout de quelques minutes, il s'Ć©lanƧa convulsivement vers la piĆØce d'argent, la saisit, et, se redressant, se mit Ć  regarder au loin dans la plaine, jetant Ć  la fois ses yeux vers tous les points de l'horizon, debout et frissonnant comme une bĆŖte fauve effarĆ©e qui cherche un asile. Il ne vit rien. La nuit tombait, la plaine Ć©tait froide et vague, de grandes brumes violettes montaient dans la clartĆ© crĆ©pusculaire. Il dit: Ā«Ah!Ā» et se mit Ć  marcher rapidement dans une certaine direction, du cĆ“tĆ© où l'enfant avait disparu. AprĆØs une centaine de pas, il s'arrĆŖta, regarda, et ne vit rien. Alors il cria de toute sa force: Ā«Petit-Gervais! Petit-Gervais!Ā» Il se tut, et attendit. Rien ne rĆ©pondit. La campagne Ć©tait dĆ©serte et morne. Il Ć©tait environnĆ© de l'Ć©tendue. Il n'y avait rien autour de lui qu'une ombre où se perdait son regard et un silence où sa voix se perdait. Une bise glaciale soufflait, et donnait aux choses autour de lui une sorte de vie lugubre. Des arbrisseaux secouaient leurs petits bras maigres avec une furie incroyable. On eĆ»t dit qu'ils menaƧaient et poursuivaient quelqu'un. Il recommenƧa Ć  marcher, puis il se mit Ć  courir, et de temps en temps il s'arrĆŖtait, et criait dans cette solitude, avec une voix qui Ć©tait ce qu'on pouvait entendre de plus formidable et de plus dĆ©solĆ©: Ā«Petit-Gervais! Petit-Gervais!Ā» Certes, si l'enfant l'eĆ»t entendu, il eĆ»t eu peur et se fĆ»t bien gardĆ© de se montrer. Mais l'enfant Ć©tait sans doute dĆ©jĆ  bien loin. Il rencontra un prĆŖtre qui Ć©tait Ć  cheval. Il alla Ć  lui et lui dit: --Monsieur le curĆ©, avez-vous vu passer un enfant? --Non, dit le prĆŖtre. --Un nommĆ© Petit-Gervais? --Je n'ai vu personne. Il tira deux piĆØces de cinq francs de sa sacoche et les remit au prĆŖtre. --Monsieur le curĆ©, voici pour vos pauvres.--Monsieur le curĆ©, c'est un petit d'environ dix ans qui a une marmotte, je crois, et une vielle. Il allait. Un de ces savoyards, vous savez? --Je ne l'ai point vu. --Petit-Gervais? il n'est point des villages d'ici? pouvez-vous me dire? --Si c'est comme vous dites, mon ami, c'est un petit enfant Ć©tranger. Cela passe dans le pays. On ne les connaĆ®t pas. Jean Valjean prit violemment deux autres Ć©cus de cinq francs qu'il donna au prĆŖtre. --Pour vos pauvres, dit-il. Puis il ajouta avec Ć©garement: --Monsieur l'abbĆ©, faites-moi arrĆŖter. Je suis un voleur. Le prĆŖtre piqua des deux et s'enfuit trĆØs effrayĆ©. Jean Valjean se remit Ć  courir dans la direction qu'il avait d'abord prise. Il fit de la sorte un assez long chemin, regardant, appelant, criant, mais il ne rencontra plus personne. Deux ou trois fois il courut dans la plaine vers quelque chose qui lui faisait l'effet d'un ĆŖtre couchĆ© ou accroupi; ce n'Ć©taient que des broussailles ou des roches Ć  fleur de terre. Enfin, Ć  un endroit où trois sentiers se croisaient, il s'arrĆŖta. La lune s'Ć©tait levĆ©e. Il promena sa vue au loin et appela une derniĆØre fois: Ā«Petit-Gervais! Petit-Gervais! Petit-Gervais!Ā» Son cri s'Ć©teignit dans la brume, sans mĆŖme Ć©veiller un Ć©cho. Il murmura encore: Ā«Petit-Gervais!Ā» mais d'une voix faible et presque inarticulĆ©e. Ce fut lĆ  son dernier effort; ses jarrets flĆ©chirent brusquement sous lui comme si une puissance invisible l'accablait tout Ć  coup du poids de sa mauvaise conscience; il tomba Ć©puisĆ© sur une grosse pierre, les poings dans ses cheveux et le visage dans ses genoux, et il cria: Ā«Je suis un misĆ©rable!Ā» Alors son coeur creva et il se mit Ć  pleurer. C'Ć©tait la premiĆØre fois qu'il pleurait depuis dix-neuf ans. Quand Jean Valjean Ć©tait sorti de chez l'Ć©vĆŖque, on l'a vu, il Ć©tait hors de tout ce qui avait Ć©tĆ© sa pensĆ©e jusque-lĆ . Il ne pouvait se rendre compte de ce qui se passait en lui. Il se raidissait contre l'action angĆ©lique et contre les douces paroles du vieillard. Ā«Vous m'avez promis de devenir honnĆŖte homme. Je vous achĆØte votre Ć¢me. Je la retire Ć  l'esprit de perversitĆ© et je la donne au bon Dieu.Ā» Cela lui revenait sans cesse. Il opposait Ć  cette indulgence cĆ©leste l'orgueil, qui est en nous comme la forteresse du mal. Il sentait indistinctement que le pardon de ce prĆŖtre Ć©tait le plus grand assaut et la plus formidable attaque dont il eĆ»t encore Ć©tĆ© Ć©branlĆ©; que son endurcissement serait dĆ©finitif s'il rĆ©sistait Ć  cette clĆ©mence; que, s'il cĆ©dait, il faudrait renoncer Ć  cette haine dont les actions des autres hommes avaient rempli son Ć¢me pendant tant d'annĆ©es, et qui lui plaisait; que cette fois il fallait vaincre ou ĆŖtre vaincu, et que la lutte, une lutte colossale et dĆ©cisive, Ć©tait engagĆ©e entre sa mĆ©chancetĆ© Ć  lui et la bontĆ© de cet homme. En prĆ©sence de toutes ces lueurs, il allait comme un homme ivre. Pendant qu'il marchait ainsi, les yeux hagards, avait-il une perception distincte de ce qui pourrait rĆ©sulter pour lui de son aventure Ć  Digne? Entendait-il tous ces bourdonnements mystĆ©rieux qui avertissent ou importunent l'esprit Ć  de certains moments de la vie? Une voix lui disait-elle Ć  l'oreille qu'il venait de traverser l'heure solennelle de sa destinĆ©e, qu'il n'y avait plus de milieu pour lui, que si dĆ©sormais il n'Ć©tait pas le meilleur des hommes il en serait le pire, qu'il fallait pour ainsi dire que maintenant il montĆ¢t plus haut que l'Ć©vĆŖque ou retombĆ¢t plus bas que le galĆ©rien, que s'il voulait devenir bon il fallait qu'il devĆ®nt ange; que s'il voulait rester mĆ©chant il fallait qu'il devĆ®nt monstre? Ici encore il faut se faire ces questions que nous nous sommes dĆ©jĆ  faites ailleurs, recueillait-il confusĆ©ment quelque ombre de tout ceci dans sa pensĆ©e? Certes, le malheur, nous l'avons dit, fait l'Ć©ducation de l'intelligence; cependant il est douteux que Jean Valjean fĆ»t en Ć©tat de dĆ©mĆŖler tout ce que nous indiquons ici. Si ces idĆ©es lui arrivaient, il les entrevoyait plutĆ“t qu'il ne les voyait, et elles ne rĆ©ussissaient qu'Ć  le jeter dans un trouble insupportable et presque douloureux. Au sortir de cette chose difforme et noire qu'on appelle le bagne, l'Ć©vĆŖque lui avait fait mal Ć  l'Ć¢me comme une clartĆ© trop vive lui eĆ»t fait mal aux yeux en sortant des tĆ©nĆØbres. La vie future, la vie possible qui s'offrait dĆ©sormais Ć  lui toute pure et toute rayonnante le remplissait de frĆ©missements et d'anxiĆ©tĆ©. Il ne savait vraiment plus où il en Ć©tait. Comme une chouette qui verrait brusquement se lever le soleil, le forƧat avait Ć©tĆ© Ć©bloui et comme aveuglĆ© par la vertu. Ce qui Ć©tait certain, ce dont il ne se doutait pas, c'est qu'il n'Ć©tait dĆ©jĆ  plus le mĆŖme homme, c'est que tout Ć©tait changĆ© en lui, c'est qu'il n'Ć©tait plus en son pouvoir de faire que l'Ć©vĆŖque ne lui eĆ»t pas parlĆ© et ne l'eĆ»t pas touchĆ©. Dans cette situation d'esprit, il avait rencontrĆ© Petit-Gervais et lui avait volĆ© ses quarante sous. Pourquoi? Il n'eĆ»t assurĆ©ment pu l'expliquer; Ć©tait-ce un dernier effet et comme un suprĆŖme effort des mauvaises pensĆ©es qu'il avait apportĆ©es du bagne, un reste d'impulsion, un rĆ©sultat de ce qu'on appelle en statique la _force acquise_? C'Ć©tait cela, et c'Ć©tait aussi peut-ĆŖtre moins encore que cela. Disons-le simplement, ce n'Ć©tait pas lui qui avait volĆ©, ce n'Ć©tait pas l'homme, c'Ć©tait la bĆŖte qui, par habitude et par instinct, avait stupidement posĆ© le pied sur cet argent, pendant que l'intelligence se dĆ©battait au milieu de tant d'obsessions inouĆÆes et nouvelles. Quand l'intelligence se rĆ©veilla et vit cette action de la brute, Jean Valjean recula avec angoisse et poussa un cri d'Ć©pouvante. C'est que, phĆ©nomĆØne Ć©trange et qui n'Ć©tait possible que dans la situation où il Ć©tait, en volant cet argent Ć  cet enfant, il avait fait une chose dont il n'Ć©tait dĆ©jĆ  plus capable. Quoi qu'il en soit, cette derniĆØre mauvaise action eut sur lui un effet dĆ©cisif; elle traversa brusquement ce chaos qu'il avait dans l'intelligence et le dissipa, mit d'un cĆ“tĆ© les Ć©paisseurs obscures et de l'autre la lumiĆØre, et agit sur son Ć¢me, dans l'Ć©tat où elle se trouvait, comme de certains rĆ©actifs chimiques agissent sur un mĆ©lange trouble en prĆ©cipitant un Ć©lĆ©ment et en clarifiant l'autre. Tout d'abord, avant mĆŖme de s'examiner et de rĆ©flĆ©chir, Ć©perdu, comme quelqu'un qui cherche Ć  se sauver, il tĆ¢cha de retrouver l'enfant pour lui rendre son argent, puis, quand il reconnut que cela Ć©tait inutile et impossible, il s'arrĆŖta dĆ©sespĆ©rĆ©. Au moment où il s'Ć©cria: Ā«je suis un misĆ©rable!Ā» il venait de s'apercevoir tel qu'il Ć©tait, et il Ć©tait dĆ©jĆ  Ć  ce point sĆ©parĆ© de lui-mĆŖme, qu'il lui semblait qu'il n'Ć©tait plus qu'un fantĆ“me, et qu'il avait lĆ  devant lui, en chair et en os, le bĆ¢ton Ć  la main, la blouse sur les reins, son sac rempli d'objets volĆ©s sur le dos, avec son visage rĆ©solu et morne, avec sa pensĆ©e pleine de projets abominables, le hideux galĆ©rien Jean Valjean. L'excĆØs du malheur, nous l'avons remarquĆ©, l'avait fait en quelque sorte visionnaire. Ceci fut donc comme une vision. Il vit vĆ©ritablement ce Jean Valjean, cette face sinistre devant lui. Il fut presque au moment de se demander qui Ć©tait cet homme, et il en eut horreur. Son cerveau Ć©tait dans un de ces moments violents et pourtant affreusement calmes où la rĆŖverie est si profonde qu'elle absorbe la rĆ©alitĆ©. On ne voit plus les objets qu'on a autour de soi, et l'on voit comme en dehors de soi les figures qu'on a dans l'esprit. Il se contempla donc, pour ainsi dire, face Ć  face, et en mĆŖme temps, Ć  travers cette hallucination, il voyait dans une profondeur mystĆ©rieuse une sorte de lumiĆØre qu'il prit d'abord pour un flambeau. En regardant avec plus d'attention cette lumiĆØre qui apparaissait Ć  sa conscience, il reconnut qu'elle avait la forme humaine, et que ce flambeau Ć©tait l'Ć©vĆŖque. Sa conscience considĆ©ra tour Ć  tour ces deux hommes ainsi placĆ©s devant elle, l'Ć©vĆŖque et Jean Valjean. Il n'avait pas fallu moins que le premier pour dĆ©tremper le second. Par un de ces effets singuliers qui sont propres Ć  ces sortes d'extases, Ć  mesure que sa rĆŖverie se prolongeait, l'Ć©vĆŖque grandissait et resplendissait Ć  ses yeux, Jean Valjean s'amoindrissait et s'effaƧait. ƀ un certain moment il ne fut plus qu'une ombre. Tout Ć  coup il disparut. L'Ć©vĆŖque seul Ć©tait restĆ©. Il remplissait toute l'Ć¢me de ce misĆ©rable d'un rayonnement magnifique. Jean Valjean pleura longtemps. Il pleura Ć  chaudes larmes, il pleura Ć  sanglots, avec plus de faiblesse qu'une femme, avec plus d'effroi qu'un enfant. Pendant qu'il pleurait, le jour se faisait de plus en plus dans son cerveau, un jour extraordinaire, un jour ravissant et terrible Ć  la fois. Sa vie passĆ©e, sa premiĆØre faute, sa longue expiation, son abrutissement extĆ©rieur, son endurcissement intĆ©rieur, sa mise en libertĆ© rĆ©jouie par tant de plans de vengeance, ce qui lui Ć©tait arrivĆ© chez l'Ć©vĆŖque, la derniĆØre chose qu'il avait faite, ce vol de quarante sous Ć  un enfant, crime d'autant plus lĆ¢che et d'autant plus monstrueux qu'il venait aprĆØs le pardon de l'Ć©vĆŖque, tout cela lui revint et lui apparut, clairement, mais dans une clartĆ© qu'il n'avait jamais vue jusque-lĆ . Il regarda sa vie, et elle lui parut horrible; son Ć¢me, et elle lui parut affreuse. Cependant un jour doux Ć©tait sur cette vie et sur cette Ć¢me. Il lui semblait qu'il voyait Satan Ć  la lumiĆØre du paradis. Combien d'heures pleura-t-il ainsi? que fit-il aprĆØs avoir pleurĆ©? où alla-t-il? on ne l'a jamais su. Il paraĆ®t seulement avĆ©rĆ© que, dans cette mĆŖme nuit, le voiturier qui faisait Ć  cette Ć©poque le service de Grenoble et qui arrivait Ć  Digne vers trois heures du matin, vit en traversant la rue de l'Ć©vĆŖchĆ© un homme dans l'attitude de la priĆØre, Ć  genoux sur le pavĆ©, dans l'ombre, devant la porte de monseigneur Bienvenu. Livre troisiĆØme--En l'annĆ©e 1817 Chapitre I L'annĆ©e 1817 1817 est l'annĆ©e que Louis XVIII, avec un certain aplomb royal qui ne manquait pas de fiertĆ©, qualifiait la vingt-deuxiĆØme de son rĆØgne. C'est l'annĆ©e où M. BruguiĆØre de Sorsum Ć©tait cĆ©lĆØbre. Toutes les boutiques des perruquiers, espĆ©rant la poudre et le retour de l'oiseau royal, Ć©taient badigeonnĆ©es d'azur et fleurdelysĆ©es. C'Ć©tait le temps candide où le comte Lynch siĆ©geait tous les dimanches comme marguillier au banc d'oeuvre de Saint-Germain-des-PrĆ©s en habit de pair de France, avec son cordon rouge et son long nez, et cette majestĆ© de profil particuliĆØre Ć  un homme qui a fait une action d'Ć©clat. L'action d'Ć©clat commise par M. Lynch Ć©tait ceci: avoir, Ć©tant maire de Bordeaux, le 12 mars 1814, donnĆ© la ville un peu trop tĆ“t Ć  M. le duc d'AngoulĆŖme. De lĆ  sa pairie. En 1817, la mode engloutissait les petits garƧons de quatre Ć  six ans sous de vastes casquettes en cuir maroquinĆ© Ć  oreillons assez ressemblantes Ć  des mitres d'esquimaux. L'armĆ©e franƧaise Ć©tait vĆŖtue de blanc, Ć  l'autrichienne; les rĆ©giments s'appelaient lĆ©gions; au lieu de chiffres ils portaient les noms des dĆ©partements. NapolĆ©on Ć©tait Ć  Sainte-HĆ©lĆØne, et, comme l'Angleterre lui refusait du drap vert, il faisait retourner ses vieux habits. En 1817, Pellegrini chantait, mademoiselle Bigottini dansait; Potier rĆ©gnait; Odry n'existait pas encore. Madame Saqui succĆ©dait Ć  Forioso. Il y avait encore des Prussiens en France. M. Delalot Ć©tait un personnage. La lĆ©gitimitĆ© venait de s'affirmer en coupant le poing, puis la tĆŖte, Ć  Pleignier, Ć  Carbonneau et Ć  Tolleron. Le prince de Talleyrand, grand chambellan, et l'abbĆ© Louis, ministre dĆ©signĆ© des finances, se regardaient en riant du rire de deux augures; tous deux avaient cĆ©lĆ©brĆ©, le 14 juillet 1790, la messe de la FĆ©dĆ©ration au Champ de Mars; Talleyrand l'avait dite comme Ć©vĆŖque, Louis l'avait servie comme diacre. En 1817, dans les contre-allĆ©es de ce mĆŖme Champ de Mars, on apercevait de gros cylindres de bois, gisant sous la pluie, pourrissant dans l'herbe, peints en bleu avec des traces d'aigles et d'abeilles dĆ©dorĆ©es. C'Ć©taient les colonnes qui, deux ans auparavant, avaient soutenu l'estrade de l'empereur au Champ-de-Mai. Elles Ć©taient noircies ƧƠ et lĆ  de la brĆ»lure du bivouac des Autrichiens baraquĆ©s prĆØs du Gros-Caillou. Deux ou trois de ces colonnes avaient disparu dans les feux de ces bivouacs et avaient chauffĆ© les larges mains des _kaiserlicks_. Le Champ de Mai avait eu cela de remarquable qu'il avait Ć©tĆ© tenu au mois de juin et au Champ de Mars. En cette annĆ©e 1817, deux choses Ć©taient populaires: le Voltaire-Touquet et la tabatiĆØre Ć  la Charte. L'Ć©motion parisienne la plus rĆ©cente Ć©tait le crime de Dautun qui avait jetĆ© la tĆŖte de son frĆØre dans le bassin du MarchĆ©-aux-Fleurs. On commenƧait Ć  faire au ministĆØre de la marine une enquĆŖte sur cette fatale frĆ©gate de la MĆ©duse qui devait couvrir de honte Chaumareix et de gloire GĆ©ricault. Le colonel Selves allait en Ɖgypte pour y devenir Soliman pacha. Le palais des Thermes, rue de la Harpe, servait de boutique Ć  un tonnelier. On voyait encore sur la plate-forme de la tour octogone de l'hĆ“tel de Cluny la petite logette en planches qui avait servi d'observatoire Ć  Messier, astronome de la marine sous Louis XVI. La duchesse de Duras lisait Ć  trois ou quatre amis, dans son boudoir meublĆ© d'X en satin bleu ciel, _Ourika_ inĆ©dite. On grattait les N au Louvre. Le pont d'Austerlitz abdiquait et s'intitulait pont du Jardin du Roi, double Ć©nigme qui dĆ©guisait Ć  la fois le pont d'Austerlitz et le jardin des Plantes. Louis XVIII, prĆ©occupĆ©, tout en annotant du coin de l'ongle Horace, des hĆ©ros qui se font empereurs et des sabotiers qui se font dauphins, avait deux soucis: NapolĆ©on et Mathurin Bruneau. L'acadĆ©mie franƧaise donnait pour sujet de prix: _Le bonheur que procure l'Ć©tude_. M. Bellart Ć©tait officiellement Ć©loquent. On voyait germer Ć  son ombre ce futur avocat gĆ©nĆ©ral de BroĆØ, promis aux sarcasmes de Paul-Louis Courier. Il y avait un faux Chateaubriand appelĆ© Marchangy, en attendant qu'il y eut un faux Marchangy appelĆ© d'Arlincourt. _Claire d'Albe_ et _Malek-Adel_ Ć©taient des chefs-d'oeuvre; madame Cottin Ć©tait dĆ©clarĆ©e le premier Ć©crivain de l'Ć©poque. L'institut laissait rayer de sa liste l'acadĆ©micien NapolĆ©on Bonaparte. Une ordonnance royale Ć©rigeait AngoulĆŖme en Ć©cole de marine, car, le duc d'AngoulĆŖme Ć©tant grand amiral, il Ć©tait Ć©vident que la ville d'AngoulĆŖme avait de droit toutes les qualitĆ©s d'un port de mer, sans quoi le principe monarchique eĆ»t Ć©tĆ© entamĆ©. On agitait en conseil des ministres la question de savoir si l'on devait tolĆ©rer les vignettes reprĆ©sentant des voltiges qui assaisonnaient les affiches de Franconi et qui attroupaient les polissons des rues. M. PaĆ«r, auteur de l'_Agnese_, bonhomme Ć  la face carrĆ©e qui avait une verrue sur la joue, dirigeait les petits concerts intimes de la marquise de Sassenaye, rue de la Ville-l'ƉvĆŖque. Toutes les jeunes filles chantaient _l'Ermite de Saint-Avelle_, paroles d'Edmond GĆ©raud. _Le Nain jaune_ se transformait en _Miroir_. Le cafĆ© Lemblin tenait pour l'empereur contre le cafĆ© Valois qui tenait pour les Bourbons. On venait de marier Ć  une princesse de Sicile M. le duc de Berry, dĆ©jĆ  regardĆ© du fond de l'ombre par Louvel. Il y avait un an que madame de StaĆ«l Ć©tait morte. Les gardes du corps sifflaient mademoiselle Mars. Les grands journaux Ć©taient tout petits. Le format Ć©tait restreint, mais la libertĆ© Ć©tait grande. _Le Constitutionnel_ Ć©tait constitutionnel. _La Minerve_ appelait Chateaubriand _Chateaubriant_. Ce _t_ faisait beaucoup rire les bourgeois aux dĆ©pens du grand Ć©crivain. Dans des journaux vendus, des journalistes prostituĆ©s insultaient les proscrits de 1815; David n'avait plus de talent, Arnault n'avait plus d'esprit, Carnot n'avait plus de probitĆ©; Soult n'avait gagnĆ© aucune bataille; il est vrai que NapolĆ©on n'avait plus de gĆ©nie. Personne n'ignore qu'il est assez rare que les lettres adressĆ©es par la poste Ć  un exilĆ© lui parviennent, les polices se faisant un religieux devoir de les intercepter. Le fait n'est point nouveau; Descartes, banni, s'en plaignait. Or, David ayant, dans un journal belge, montrĆ© quelque humeur de ne pas recevoir les lettres qu'on lui Ć©crivait, ceci paraissait plaisant aux feuilles royalistes qui bafouaient Ć  cette occasion le proscrit. Dire: _les rĆ©gicides_, ou dire: _les votants_, dire: _les ennemis_, ou dire: _les alliĆ©s_, dire: _NapolĆ©on_, ou dire: _Buonaparte_, cela sĆ©parait deux hommes plus qu'un abĆ®me. Tous les gens de bons sens convenaient que l'ĆØre des rĆ©volutions Ć©tait Ć  jamais fermĆ©e par le roi Louis XVIII, surnommĆ© Ā«l'immortel auteur de la charteĀ». Au terre-plein du Pont-Neuf, on sculptait le mot _Redivivus_, sur le piĆ©destal qui attendait la statue de Henri IV. M. Piet Ć©bauchait, rue ThĆ©rĆØse, n° 4, son conciliabule pour consolider la monarchie. Les chefs de la droite disaient dans les conjonctures graves: Ā«Il faut Ć©crire Ć  BacotĀ». MM. Canuel, O'Mahony et de Chappedelaine esquissaient, un peu approuvĆ©s de Monsieur, ce qui devait ĆŖtre plus tard Ā«la conspiration du bord de l'eauĀ». L'Ɖpingle Noire complotait de son cĆ“tĆ©. Delaverderie s'abouchait avec Trogoff. M. Decazes, esprit dans une certaine mesure libĆ©ral, dominait. Chateaubriand, debout tous les matins devant sa fenĆŖtre du n° 27 de la rue Saint-Dominique, en pantalon Ć  pieds et en pantoufles, ses cheveux gris coiffĆ©s d'un madras, les yeux fixĆ©s sur un miroir, une trousse complĆØte de chirurgien dentiste ouverte devant lui, se curait les dents, qu'il avait charmantes, tout en dictant des variantes de _la Monarchie selon la Charte_ Ć  M. Pilorge, son secrĆ©taire. La critique faisant autoritĆ© prĆ©fĆ©rait Lafon Ć  Talma. M. de FĆ©letz signait A.; M. Hoffmann signait Z. Charles Nodier Ć©crivait _ThĆ©rĆØse Aubert_. Le divorce Ć©tait aboli. Les lycĆ©es s'appelaient collĆØges. Les collĆ©giens, ornĆ©s au collet d'une fleur de lys d'or, s'y gourmaient Ć  propos du roi de Rome. La contre-police du chĆ¢teau dĆ©nonƧait Ć  son altesse royale Madame le portrait, partout exposĆ©, de M. le duc d'OrlĆ©ans, lequel avait meilleure mine en uniforme de colonel gĆ©nĆ©ral des houzards que M. le duc de Berry en uniforme de colonel gĆ©nĆ©ral des dragons; grave inconvĆ©nient. La ville de Paris faisait redorer Ć  ses frais le dĆ“me des Invalides. Les hommes sĆ©rieux se demandaient ce que ferait, dans telle ou telle occasion, M. de Trinquelague; M. Clausel de Montals se sĆ©parait, sur divers points, de M. Clausel de Coussergues; M. de Salaberry n'Ć©tait pas content. Le comĆ©dien Picard, qui Ć©tait de l'AcadĆ©mie dont le comĆ©dien MoliĆØre n'avait pu ĆŖtre, faisait jouer _les deux Philibert_ Ć  l'OdĆ©on, sur le fronton duquel l'arrachement des lettres laissait encore lire distinctement: THƉƂTRE DE L'IMPƉRATRICE. On prenait parti pour ou contre Cugnet de Montarlot. Fabvier Ć©tait factieux; Bavoux Ć©tait rĆ©volutionnaire. Le libraire PĆ©licier publiait une Ć©dition de Voltaire, sous ce titre: _OEuvres de Voltaire_, de l'AcadĆ©mie franƧaise. Ā«Cela fait venir les acheteursĀ», disait cet Ć©diteur naĆÆf. L'opinion gĆ©nĆ©rale Ć©tait que M. Charles Loyson, serait le gĆ©nie du siĆØcle; l'envie commenƧait Ć  le mordre, signe de gloire; et l'on faisait sur lui ce vers: _MĆŖme quand Loyson vole, on sent qu'il a des pattes._ Le cardinal Fesch refusant de se dĆ©mettre, M. de Pins, archevĆŖque d'Amasie, administrait le diocĆØse de Lyon. La querelle de la vallĆ©e des Dappes commenƧait entre la Suisse et la France par un mĆ©moire du capitaine Dufour, depuis gĆ©nĆ©ral. Saint-Simon, ignorĆ©, Ć©chafaudait son rĆŖve sublime. Il y avait Ć  l'acadĆ©mie des sciences un Fourier cĆ©lĆØbre que la postĆ©ritĆ© a oubliĆ© et dans je ne sais quel grenier un Fourier obscur dont l'avenir se souviendra. Lord Byron commenƧait Ć  poindre; une note d'un poĆØme de Millevoye l'annonƧait Ć  la France en ces termes: _un certain lord Baron_. David d'Angers s'essayait Ć  pĆ©trir le marbre. L'abbĆ© Caron parlait avec Ć©loge, en petit comitĆ© de sĆ©minaristes, dans le cul-de-sac des Feuillantines, d'un prĆŖtre inconnu nommĆ© FĆ©licitĆ© Robert qui a Ć©tĆ© plus tard Lamennais. Une chose qui fumait et clapotait sur la Seine avec le bruit d'un chien qui nage allait et venait sous les fenĆŖtres des Tuileries, du pont Royal au pont Louis XV c'Ć©tait une mĆ©canique bonne Ć  pas grand'chose, une espĆØce de joujou, une rĆŖverie d'inventeur songe-creux, une utopie: un bateau Ć  vapeur. Les Parisiens regardaient cette inutilitĆ© avec indiffĆ©rence. M. de Vaublanc, rĆ©formateur de l'Institut par coup d'Ɖtat, ordonnance et fournĆ©e, auteur distinguĆ© de plusieurs acadĆ©miciens, aprĆØs en avoir fait, ne pouvait parvenir Ć  l'ĆŖtre. Le faubourg Saint-Germain et la pavillon Marsan souhaitaient pour prĆ©fet de police M. Delaveau, Ć  cause de sa dĆ©votion. Dupuytren et RĆ©camier se prenaient de querelle Ć  l'amphithéâtre de l'Ɖcole de mĆ©decine et se menaƧaient du poing Ć  propos de la divinitĆ© de JĆ©sus-Christ. Cuvier, un oeil sur la GenĆØse et l'autre sur la nature, s'efforƧait de plaire Ć  la rĆ©action bigote en mettant les fossiles d'accord avec les textes et en faisant flatter MoĆÆse par les mastodontes. M. FranƧois de NeufchĆ¢teau, louable cultivateur de la mĆ©moire de Parmentier, faisait mille efforts pour que _pomme de terre_ fĆ»t prononcĆ©e _parmentiĆØre_, et n'y rĆ©ussissait point. L'abbĆ© GrĆ©goire, ancien Ć©vĆŖque, ancien conventionnel, ancien sĆ©nateur, Ć©tait passĆ© dans la polĆ©mique royaliste Ć  l'Ć©tat Ā«d'infĆ¢me GrĆ©goireĀ». Cette locution que nous venons d'employer: _passer Ć  l'Ć©tat de_, Ć©tait dĆ©noncĆ©e comme nĆ©ologisme par M. Royer-Collard. On pouvait distinguer encore Ć  sa blancheur, sous la troisiĆØme arche du pont d'IĆ©na, la pierre neuve avec laquelle, deux ans auparavant, on avait bouchĆ© le trou de mine pratiquĆ© par Blücher pour faire sauter le pont. La justice appelait Ć  sa barre un homme qui, en voyant entrer le comte d'Artois Ć  Notre-Dame, avait dit tout haut: _Sapristi! je regrette le temps où je voyais Bonaparte et Talma entrer bras dessus bras dessous au Bal-Sauvage_. Propos sĆ©ditieux. Six mois de prison. Des traĆ®tres se montraient dĆ©boutonnĆ©s; des hommes qui avaient passĆ© Ć  l'ennemi la veille d'une bataille ne cachaient rien de la rĆ©compense et marchaient impudiquement en plein soleil dans le cynisme des richesses et des dignitĆ©s; des dĆ©serteurs de Ligny et des Quatre-Bras, dans le dĆ©braillĆ© de leur turpitude payĆ©e, Ć©talaient leur dĆ©vouement monarchique tout nu; oubliant ce qui est Ć©crit en Angleterre sur la muraille intĆ©rieure des water-closets publics: _Please adjust your dress before leaving_. VoilĆ , pĆŖle-mĆŖle, ce qui surnage confusĆ©ment de l'annĆ©e 1817, oubliĆ©e aujourd'hui. L'histoire nĆ©glige presque toutes ces particularitĆ©s, et ne peut faire autrement; l'infini l'envahirait. Pourtant ces dĆ©tails, qu'on appelle Ć  tort petits--il n'y a ni petits faits dans l'humanitĆ©, ni petites feuilles dans la vĆ©gĆ©tation--sont utiles. C'est de la physionomie des annĆ©es que se compose la figure des siĆØcles. En cette annĆ©e 1817, quatre jeunes Parisiens firent Ā«une bonne farceĀ». Chapitre II Double quatuor Ces Parisiens Ć©taient l'un de Toulouse, l'autre de Limoges, le troisiĆØme de Cahors et le quatriĆØme de Montauban; mais ils Ć©taient Ć©tudiants, et qui dit Ć©tudiant dit parisien; Ć©tudier Ć  Paris, c'est naĆ®tre Ć  Paris. Ces jeunes gens Ć©taient insignifiants; tout le monde a vu ces figures-lĆ ; quatre Ć©chantillons du premier venu; ni bons ni mauvais, ni savants ni ignorants, ni des gĆ©nies ni des imbĆ©ciles; beaux de ce charmant avril qu'on appelle vingt ans. C'Ć©taient quatre Oscars quelconques, car Ć  cette Ć©poque les Arthurs n'existaient pas encore. _BrĆ»lez pour lui les parfums d'Arabie_, s'Ć©criait la romance, _Oscar s'avance, Oscar, je vais le voir!_ On sortait d'Ossian, l'Ć©lĆ©gance Ć©tait scandinave et calĆ©donienne, le genre anglais pur ne devait prĆ©valoir que plus tard, et le premier des Arthurs, Wellington, venait Ć  peine de gagner la bataille de Waterloo. Ces Oscars s'appelaient l'un FĆ©lix TholomyĆØs, de Toulouse; l'autre Listolier, de Cahors; l'autre Fameuil, de Limoges; le dernier Blachevelle, de Montauban. Naturellement chacun avait sa maĆ®tresse. Blachevelle aimait Favourite, ainsi nommĆ©e parce qu'elle Ć©tait allĆ©e en Angleterre; Listolier adorait Dahlia, qui avait pris pour nom de guerre un nom de fleur; Fameuil idolĆ¢trait ZĆ©phine, abrĆ©gĆ© de JosĆ©phine; TholomyĆØs avait Fantine, dite la Blonde Ć  cause de ses beaux cheveux couleur de soleil. Favourite, Dahlia, ZĆ©phine et Fantine Ć©taient quatre ravissantes filles, parfumĆ©es et radieuses, encore un peu ouvriĆØres, n'ayant pas tout Ć  fait quittĆ© leur aiguille, dĆ©rangĆ©es par les amourettes, mais ayant sur le visage un reste de la sĆ©rĆ©nitĆ© du travail et dans l'Ć¢me cette fleur d'honnĆŖtetĆ© qui dans la femme survit Ć  la premiĆØre chute. Il y avait une des quatre qu'on appelait la jeune, parce qu'elle Ć©tait la cadette; et une qu'on appelait la vieille. La vieille avait vingt-trois ans. Pour ne rien celer, les trois premiĆØres Ć©taient plus expĆ©rimentĆ©es, plus insouciantes et plus envolĆ©es dans le bruit de la vie que Fantine la Blonde, qui en Ć©tait Ć  sa premiĆØre illusion. Dahlia, ZĆ©phine, et surtout Favourite, n'en auraient pu dire autant. Il y avait dĆ©jĆ  plus d'un Ć©pisode Ć  leur roman Ć  peine commencĆ©, et l'amoureux, qui s'appelait Adolphe au premier chapitre, se trouvait ĆŖtre Alphonse au second, et Gustave au troisiĆØme. PauvretĆ© et coquetterie sont deux conseillĆØres fatales, l'une gronde, l'autre flatte; et les belles filles du peuple les ont toutes les deux qui leur parlent bas Ć  l'oreille, chacune de son cĆ“tĆ©. Ces Ć¢mes mal gardĆ©es Ć©coutent. De lĆ  les chutes qu'elles font et les pierres qu'on leur jette. On les accable avec la splendeur de tout ce qui est immaculĆ© et inaccessible. HĆ©las! si la _Yungfrau_ avait faim? Favourite, ayant Ć©tĆ© en Angleterre, avait pour admiratrices ZĆ©phine et Dahlia. Elle avait eu de trĆØs bonne heure un chez-soi. Son pĆØre Ć©tait un vieux professeur de mathĆ©matiques brutal et qui gasconnait; point mariĆ©, courant le cachet malgrĆ© l'Ć¢ge. Ce professeur, Ć©tant jeune, avait vu un jour la robe d'une femme de chambre s'accrocher Ć  un garde-cendre; il Ć©tait tombĆ© amoureux de cet accident. Il en Ć©tait rĆ©sultĆ© Favourite. Elle rencontrait de temps en temps son pĆØre, qui la saluait. Un matin, une vieille femme Ć  l'air bĆ©guin Ć©tait entrĆ©e chez elle et lui avait dit: --Vous ne me connaissez pas, mademoiselle? --Non. --Je suis ta mĆØre. Puis la vieille avait ouvert le buffet, bu et mangĆ©, fait apporter un matelas qu'elle avait, et s'Ć©tait installĆ©e. Cette mĆØre, grognon et dĆ©vote, ne parlait jamais Ć  Favourite, restait des heures sans souffler mot, dĆ©jeunait, dĆ®nait et soupait comme quatre, et descendait faire salon chez le portier, où elle disait du mal de sa fille. Ce qui avait entraĆ®nĆ© Dahlia vers Listolier, vers d'autres peut-ĆŖtre, vers l'oisivetĆ©, c'Ć©tait d'avoir de trop jolis ongles roses. Comment faire travailler ces ongles-lĆ ? Qui veut rester vertueuse ne doit pas avoir pitiĆ© de ses mains. Quant Ć  ZĆ©phine, elle avait conquis Fameuil par sa petite maniĆØre mutine et caressante de dire: Ā«Oui, monsieurĀ». Les jeunes gens Ć©tant camarades, les jeunes filles Ć©taient amies. Ces amours-lĆ  sont toujours doublĆ©s de ces amitiĆ©s-lĆ . Sage et philosophe, c'est deux; et ce qui le prouve, c'est que, toutes rĆ©serves faites sur ces petits mĆ©nages irrĆ©guliers, Favourite, ZĆ©phine et Dahlia Ć©taient des filles philosophes, et Fantine une fille sage. Sage, dira-t-on? et TholomyĆØs? Salomon rĆ©pondrait que l'amour fait partie de la sagesse. Nous nous bornons Ć  dire que l'amour de Fantine Ć©tait un premier amour, un amour unique, un amour fidĆØle. Elle Ć©tait la seule des quatre qui ne fĆ»t tutoyĆ©e que par un seul. Fantine Ć©tait un de ces ĆŖtres comme il en Ć©clĆ“t, pour ainsi dire, au fond du peuple. Sortie des plus insondables Ć©paisseurs de l'ombre sociale, elle avait au front le signe de l'anonyme et de l'inconnu. Elle Ć©tait nĆ©e Ć  Montreuil-sur-mer. De quels parents? Qui pourrait le dire? On ne lui avait jamais connu ni pĆØre ni mĆØre. Elle se nommait Fantine. Pourquoi Fantine? On ne lui avait jamais connu d'autre nom. ƀ l'Ć©poque de sa naissance, le Directoire existait encore. Point de nom de famille, elle n'avait pas de famille; point de nom de baptĆŖme, l'Ć©glise n'Ć©tait plus lĆ . Elle s'appela comme il plut au premier passant qui la rencontra toute petite, allant pieds nus dans la rue. Elle reƧut un nom comme elle recevait l'eau des nuĆ©es sur son front quand il pleuvait. On l'appela la petite Fantine. Personne n'en savait davantage. Cette crĆ©ature humaine Ć©tait venue dans la vie comme cela. ƀ dix ans, Fantine quitta la ville et s'alla mettre en service chez des fermiers des environs. ƀ quinze ans, elle vint Ć  Paris "chercher fortune". Fantine Ć©tait belle et resta pure le plus longtemps qu'elle put. C'Ć©tait une jolie blonde avec de belles dents. Elle avait de l'or et des perles pour dot, mais son or Ć©tait sur sa tĆŖte et ses perles Ć©taient dans sa bouche. Elle travailla pour vivre; puis, toujours pour vivre, car le coeur a sa faim aussi, elle aima. Elle aima TholomyĆØs. Amourette pour lui, passion pour elle. Les rues du quartier latin, qu'emplit le fourmillement des Ć©tudiants et des grisettes, virent le commencement de ce songe. Fantine, dans ces dĆ©dales de la colline du PanthĆ©on, où tant d'aventures se nouent et se dĆ©nouent, avait fui longtemps TholomyĆØs, mais de faƧon Ć  le rencontrer toujours. Il y a une maniĆØre d'Ć©viter qui ressemble Ć  chercher. Bref, l'Ć©glogue eut lieu. Blachevelle, Listolier et Fameuil formaient une sorte de groupe dont TholomyĆØs Ć©tait la tĆŖte. C'Ć©tait lui qui avait l'esprit. TholomyĆØs Ć©tait l'antique Ć©tudiant vieux; il Ć©tait riche; il avait quatre mille francs de rente; quatre mille francs de rente, splendide scandale sur la montagne Sainte-GeneviĆØve. TholomyĆØs Ć©tait un viveur de trente ans, mal conservĆ©. Il Ć©tait ridĆ© et Ć©dentĆ©; et il Ć©bauchait une calvitie dont il disait lui-mĆŖme sans tristesse: _crĆ¢ne Ć  trente ans, genou Ć  quarante_. Il digĆ©rait mĆ©diocrement, et il lui Ć©tait venu un larmoiement Ć  un oeil. Mais Ć  mesure que sa jeunesse s'Ć©teignait, il allumait sa gaĆ®tĆ©; il remplaƧait ses dents par des lazzis, ses cheveux par la joie, sa santĆ© par l'ironie, et son oeil qui pleurait riait sans cesse. Il Ć©tait dĆ©labrĆ©, mais tout en fleurs. Sa jeunesse, pliant bagage bien avant l'Ć¢ge, battait en retraite en bon ordre, Ć©clatait de rire, et l'on n'y voyait que du feu. Il avait eu une piĆØce refusĆ©e au Vaudeville. Il faisait ƧƠ et lĆ  des vers quelconques. En outre, il doutait supĆ©rieurement de toute chose, grande force aux yeux des faibles. Donc, Ć©tant ironique et chauve, il Ć©tait le chef. _Iron_ est un mot anglais qui veut dire fer. Serait-ce de lĆ  que viendrait ironie? Un jour TholomyĆØs prit Ć  part les trois autres, fĆ®t un geste d'oracle, et leur dit: --Il y a bientĆ“t un an que Fantine, Dahlia, ZĆ©phine et Favourite nous demandent de leur faire une surprise. Nous la leur avons promise solennellement. Elles nous en parlent toujours, Ć  moi surtout. De mĆŖme qu'Ć  Naples les vieilles femmes crient Ć  saint Janvier: _Faccia gialluta, fa o miracolo_. Face jaune, fais ton miracle! nos belles me disent sans cesse: Ā«TholomyĆØs, quand accoucheras-tu de ta surprise?Ā» En mĆŖme temps nos parents nous Ć©crivent. Scie des deux cĆ“tĆ©s. Le moment me semble venu. Causons. Sur ce, TholomyĆØs baissa la voix, et articula mystĆ©rieusement quelque chose de si gai qu'un vaste et enthousiaste ricanement sortit des quatre bouches Ć  la fois et que Blachevelle s'Ć©cria: --Ƈa, c'est une idĆ©e! Un estaminet plein de fumĆ©e se prĆ©senta, ils y entrĆØrent, et le reste de leur confĆ©rence se perdit dans l'ombre. Le rĆ©sultat de ces tĆ©nĆØbres fut une Ć©blouissante partie de plaisir qui eut lieu le dimanche suivant, les quatre jeunes gens invitant les quatre jeunes filles. Chapitre III Quatre Ć  quatre Ce qu'Ć©tait une partie de campagne d'Ć©tudiants et de grisettes, il y a quarante-cinq ans, on se le reprĆ©sente malaisĆ©ment aujourd'hui. Paris n'a plus les mĆŖmes environs; la figure de ce qu'on pourrait appeler la vie circumparisienne a complĆØtement changĆ© depuis un demi-siĆØcle; où il y avait le coucou, il y a le wagon; où il y avait la patache, il y a le bateau Ć  vapeur; on dit aujourd'hui FĆ©camp comme on disait Saint-Cloud. Le Paris de 1862 est une ville qui a la France pour banlieue. Les quatre couples accomplirent consciencieusement toutes les folies champĆŖtres possibles alors. On entrait dans les vacances, et c'Ć©tait une chaude et claire journĆ©e d'Ć©tĆ©. La veille, Favourite, la seule qui sĆ»t Ć©crire, avait Ć©crit ceci Ć  TholomyĆØs au nom des quatre: Ā«C'est un bonne heure de sortir de bonheur.Ā» C'est pourquoi ils se levĆØrent Ć  cinq heures du matin. Puis ils allĆØrent Ć  Saint-Cloud par le coche, regardĆØrent la cascade Ć  sec, et s'Ć©criĆØrent: Ā«Cela doit ĆŖtre bien beau quand il y a de l'eau!Ā» dĆ©jeunĆØrent Ć  la _TĆŖte-Noire_, où Castaing n'avait pas encore passĆ©, se payĆØrent une partie de bagues au quinconce du grand bassin, montĆØrent Ć  la lanterne de DiogĆØne, jouĆØrent des macarons Ć  la roulette du pont de SĆØvres, cueillirent des bouquets Ć  Puteaux, achetĆØrent des mirlitons Ć  Neuilly, mangĆØrent partout des chaussons de pommes, furent parfaitement heureux. Les jeunes filles bruissaient et bavardaient comme des fauvettes Ć©chappĆ©es. C'Ć©tait un dĆ©lire. Elles donnaient par moments de petites tapes aux jeunes gens. Ivresse matinale de la vie! Adorables annĆ©es! L'aile des libellules frissonne. Oh! qui que vous soyez, vous souvenez-vous? Avez-vous marchĆ© dans les broussailles, en Ć©cartant les branches Ć  cause de la tĆŖte charmante qui vient derriĆØre vous? Avez-vous glissĆ© en riant sur quelque talus mouillĆ© par la pluie avec une femme aimĆ©e qui vous retient par la main et qui s'Ć©crie: Ā«Ah! mes brodequins tout neufs! dans quel Ć©tat ils sont!Ā» Disons tout de suite que cette joyeuse contrariĆ©tĆ©, une ondĆ©e, manqua Ć  cette compagnie de belle humeur, quoique Favourite eĆ»t dit en partant, avec un accent magistral et maternel: _Les limaces se promĆØnent dans les sentiers. Signe de pluie, mes enfants_. Toutes quatre Ć©taient follement jolies. Un bon vieux poĆØte classique, alors en renom, un bonhomme qui avait une ƉlĆ©onore, M. le chevalier de LabouĆÆsse, errant ce jour-lĆ  sous les marronniers de Saint-Cloud, les vit passer vers dix heures du matin; il s'Ć©cria: _Il y en a une de trop_, songeant aux GrĆ¢ces. Favourite, l'amie de Blachevelle, celle de vingt-trois ans, la vieille, courait en avant sous les grandes branches vertes, sautait les fossĆ©s, enjambait Ć©perdument les buissons, et prĆ©sidait cette gaĆ®tĆ© avec une verve de jeune faunesse. ZĆ©phine et Dahlia, que le hasard avait faites belles de faƧon qu'elles se faisaient valoir en se rapprochant et se complĆ©taient, ne se quittaient point, par instinct de coquetterie plus encore que par amitiĆ©, et, appuyĆ©es l'une Ć  l'autre, prenaient des poses anglaises; les premiers _keepsakes_ venaient de paraĆ®tre, la mĆ©lancolie pointait pour les femmes, comme, plus tard, le byronisme pour les hommes, et les cheveux du sexe tendre commenƧaient Ć  s'Ć©plorer. ZĆ©phine et Dahlia Ć©taient coiffĆ©es en rouleaux. Listolier et Fameuil, engagĆ©s dans une discussion sur leurs professeurs, expliquaient Ć  Fantine la diffĆ©rence qu'il y avait entre M. Delvincourt et M. Blondeau. Blachevelle semblait avoir Ć©tĆ© crƩƩ expressĆ©ment pour porter sur son bras le dimanche le chĆ¢le-ternaux boiteux de Favourite. TholomyĆØs suivait, dominant le groupe. Il Ć©tait trĆØs gai, mais on sentait en lui le gouvernement; il y avait de la dictature dans sa jovialitĆ©; son ornement principal Ć©tait un pantalon jambes-d'Ć©lĆ©phant, en nankin, avec sous-pieds de tresse de cuivre; il avait un puissant rotin de deux cents francs Ć  la main, et, comme il se permettait tout, une chose Ć©trange appelĆ©e cigare, Ć  la bouche. Rien n'Ć©tant sacrĆ© pour lui, il fumait. --Ce TholomyĆØs est Ć©tonnant, disaient les autres avec vĆ©nĆ©ration. Quels pantalons! quelle Ć©nergie! Quant Ć  Fantine, c'Ć©tait la joie. Ses dents splendides avaient Ć©videmment reƧu de Dieu une fonction, le rire. Elle portait Ć  sa main plus volontiers que sur sa tĆŖte son petit chapeau de paille cousue, aux longues brides blanches. Ses Ć©pais cheveux blonds, enclins Ć  flotter et facilement dĆ©nouĆ©s et qu'il fallait rattacher sans cesse, semblaient faits pour la fuite de GalatĆ©e sous les saules. Ses lĆØvres roses babillaient avec enchantement. Les coins de sa bouche voluptueusement relevĆ©s, comme aux mascarons antiques d'Ɖrigone, avaient l'air d'encourager les audaces; mais ses longs cils pleins d'ombre s'abaissaient discrĆØtement sur ce brouhaha du bas du visage comme pour mettre le holĆ . Toute sa toilette avait on ne sait quoi de chantant et de flambant. Elle avait une robe de barĆØge mauve, de petits souliers-cothurnes mordorĆ©s dont les rubans traƧaient des X sur son fin bas blanc Ć  jour, et cette espĆØce de spencer en mousseline, invention marseillaise, dont le nom, canezou, corruption du mot _quinze aoĆ»t_ prononcĆ© Ć  la CanebiĆØre, signifie beau temps, chaleur et midi. Les trois autres, moins timides, nous l'avons dit, Ć©taient dĆ©colletĆ©es tout net, ce qui, l'Ć©tĆ©, sous des chapeaux couverts de fleurs, a beaucoup de grĆ¢ce et d'agacerie; mais, Ć  cĆ“tĆ© de ces ajustements hardis, le canezou de la blonde Fantine, avec ses transparences, ses indiscrĆ©tions et ses rĆ©ticences, cachant et montrant Ć  la fois, semblait une trouvaille provocante de la dĆ©cence, et la fameuse cour d'amour, prĆ©sidĆ©e par la vicomtesse de Cette aux yeux vert de mer, eĆ»t peut-ĆŖtre donnĆ© le prix de la coquetterie Ć  ce canezou qui concourait pour la chastetĆ©. Le plus naĆÆf est quelquefois le plus savant. Cela arrive. Ɖclatante de face, dĆ©licate de profil, les yeux d'un bleu profond, les paupiĆØres grasses, les pieds cambrĆ©s et petits, les poignets et les chevilles admirablement emboĆ®tĆ©s, la peau blanche laissant voir ƧƠ et lĆ  les arborescences azurĆ©es des veines, la joue puĆ©rile et franche, le cou robuste des Junons Ć©ginĆ©tiques, la nuque forte et souple, les Ć©paules modelĆ©es comme par Coustou, ayant au centre une voluptueuse fossette visible Ć  travers la mousseline; une gaĆ®tĆ© glacĆ©e de rĆŖverie; sculpturale et exquise; telle Ć©tait Fantine; et l'on devinait sous ces chiffons une statue, et dans cette statue une Ć¢me. Fantine Ć©tait belle, sans trop le savoir. Les rares songeurs, prĆŖtres mystĆ©rieux du beau, qui confrontent silencieusement toute chose Ć  la perfection, eussent entrevu en cette petite ouvriĆØre, Ć  travers la transparence de la grĆ¢ce parisienne, l'antique euphonie sacrĆ©e. Cette fille de l'ombre avait de la race. Elle Ć©tait belle sous les deux espĆØces, qui sont le style et le rythme. Le style est la forme de l'idĆ©al; le rythme en est le mouvement. Nous avons dit que Fantine Ć©tait la joie, Fantine Ć©tait aussi la pudeur. Pour un observateur qui l'eĆ»t Ć©tudiĆ©e attentivement, ce qui se dĆ©gageait d'elle, Ć  travers toute cette ivresse de l'Ć¢ge, de la saison et de l'amourette, c'Ć©tait une invincible expression de retenue et de modestie. Elle restait un peu Ć©tonnĆ©e. Ce chaste Ć©tonnement-lĆ  est la nuance qui sĆ©pare PsychĆ© de VĆ©nus. Fantine avait les longs doigts blancs et fins de la vestale qui remue les cendres du feu sacrĆ© avec une Ć©pingle d'or. Quoiqu'elle n'eĆ»t rien refusĆ©, on ne le verra que trop, Ć  TholomyĆØs, son visage, au repos, Ć©tait souverainement virginal; une sorte de dignitĆ© sĆ©rieuse et presque austĆØre l'envahissait soudainement Ć  de certaines heures, et rien n'Ć©tait singulier et troublant comme de voir la gaĆ®tĆ© s'y Ć©teindre si vite et le recueillement y succĆ©der sans transition Ć  l'Ć©panouissement. Cette gravitĆ© subite, parfois sĆ©vĆØrement accentuĆ©e, ressemblait au dĆ©dain d'une dĆ©esse. Son front, son nez et son menton offraient cet Ć©quilibre de ligne, trĆØs distinct de l'Ć©quilibre de proportion, et d'où rĆ©sulte l'harmonie du visage; dans l'intervalle si caractĆ©ristique qui sĆ©pare la base du nez de la lĆØvre supĆ©rieure, elle avait ce pli imperceptible et charmant, signe mystĆ©rieux de la chastetĆ© qui rendit Barberousse amoureux d'une Diane trouvĆ©e dans les fouilles d'IcĆ“ne. L'amour est une faute; soit. Fantine Ć©tait l'innocence surnageant sur la faute. Chapitre IV TholomyĆØs est si joyeux qu'il chante une chanson espagnole Cette journĆ©e-lĆ  Ć©tait d'un bout Ć  l'autre faite d'aurore. Toute la nature semblait avoir congĆ©, et rire. Les parterres de Saint-Cloud embaumaient; le souffle de la Seine remuait vaguement les feuilles; les branches gesticulaient dans le vent; les abeilles mettaient les jasmins au pillage; toute une bohĆØme de papillons s'Ć©battait dans les achillĆ©es, les trĆØfles et les folles avoines; il y avait dans l'auguste parc du roi de France un tas de vagabonds, les oiseaux. Les quatre joyeux couples, mĆŖlĆ©s au soleil, aux champs, aux fleurs, aux arbres, resplendissaient. Et, dans cette communautĆ© de paradis, parlant, chantant, courant, dansant, chassant aux papillons, cueillant des liserons, mouillant leurs bas Ć  jour roses dans les hautes herbes, fraĆ®ches, folles, point mĆ©chantes, toutes recevaient un peu ƧƠ et lĆ  les baisers de tous, exceptĆ© Fantine, enfermĆ©e dans sa vague rĆ©sistance rĆŖveuse et farouche, et qui aimait. --Toi, lui disait Favourite, tu as toujours l'air chose. Ce sont lĆ  les joies. Ces passages de couples heureux sont un appel profond Ć  la vie et Ć  la nature, et font sortir de tout la caresse et la lumiĆØre. Il y avait une fois une fĆ©e qui fit les prairies et les arbres exprĆØs pour les amoureux. De lĆ  cette Ć©ternelle Ć©cole buissonniĆØre des amants qui recommence sans cesse et qui durera tant qu'il y aura des buissons et des Ć©coliers. De lĆ  la popularitĆ© du printemps parmi les penseurs. Le patricien et le gagne-petit, le duc et pair et le robin, les gens de la cour et les gens de la ville, comme on parlait autrefois, tous sont sujets de cette fĆ©e. On rit, on se cherche, il y a dans l'air une clartĆ© d'apothĆ©ose, quelle transfiguration que d'aimer! Les clercs de notaire sont des dieux. Et les petits cris, les poursuites dans l'herbe, les tailles prises au vol, ces jargons qui sont des mĆ©lodies, ces adorations qui Ć©clatent dans la faƧon de dire une syllabe, ces cerises arrachĆ©es d'une bouche Ć  l'autre, tout cela flamboie et passe dans des gloires cĆ©lestes. Les belles filles font un doux gaspillage d'elles-mĆŖmes. On croit que cela ne finira jamais. Les philosophes, les poĆØtes, les peintres regardent ces extases et ne savent qu'en faire, tant cela les Ć©blouit. Le dĆ©part pour CythĆØre! s'Ć©crie Watteau; Lancret, le peintre de la roture, contemple ses bourgeois envolĆ©s dans le bleu; Diderot tend les bras Ć  toutes ces amourettes, et d'UrfĆ© y mĆŖle des druides. AprĆØs le dĆ©jeuner les quatre couples Ć©taient allĆ©s voir, dans ce qu'on appelait alors le carrĆ© du roi, une plante nouvellement arrivĆ©e de l'Inde, dont le nom nous Ć©chappe en ce moment, et qui Ć  cette Ć©poque attirait tout Paris Ć  Saint-Cloud; c'Ć©tait un bizarre et charmant arbrisseau haut sur tige, dont les innombrables branches fines comme des fils, Ć©bouriffĆ©es, sans feuilles, Ć©taient couvertes d'un million de petites rosettes blanches; ce qui faisait que l'arbuste avait l'air d'une chevelure pouilleuse de fleurs. Il y avait toujours foule Ć  l'admirer. L'arbuste vu, TholomyĆØs s'Ć©tait Ć©criĆ©: Ā«J'offre des Ć¢nes!Ā» et, prix fait avec un Ć¢nier, ils Ć©taient revenus par Vanves et Issy. ƀ Issy, incident. Le parc, Bien National possĆ©dĆ© Ć  cette Ć©poque par le munitionnaire Bourguin, Ć©tait d'aventure tout grand ouvert. Ils avaient franchi la grille, visitĆ© l'anachorĆØte mannequin dans sa grotte, essayĆ© les petits effets mystĆ©rieux du fameux cabinet des miroirs, lascif traquenard digne d'un satyre devenu millionnaire ou de Turcaret mĆ©tamorphosĆ© en Priape. Ils avaient robustement secouĆ© le grand filet balanƧoire attachĆ© aux deux chĆ¢taigniers cĆ©lĆ©brĆ©s par l'abbĆ© de Bernis. Tout en y balanƧant ces belles l'une aprĆØs l'autre, ce qui faisait, parmi les rires universels, des plis de jupe envolĆ©e où Greuze eĆ»t trouvĆ© son compte, le toulousain TholomyĆØs, quelque peu espagnol, Toulouse est cousine de Tolosa, chantait, sur une mĆ©lopĆ©e mĆ©lancolique, la vieille chanson _gallega_ probablement inspirĆ©e par quelque belle fille lancĆ©e Ć  toute volĆ©e sur une corde entre deux arbres: _Soy de Badajoz._ _Amor me llama._ _Toda mi alma_ _Es en mi ojos_ _Porque enseƱas_ _ƀ tus piernas._ Fantine seule refusa de se balancer. --Je n'aime pas qu'on ait du genre comme Ƨa, murmura assez aigrement Favourite. Les Ć¢nes quittĆ©s, joie nouvelle; on passa la Seine en bateau, et de Passy, Ć  pied, ils gagnĆØrent la barriĆØre de l'Ɖtoile. Ils Ć©taient, on s'en souvient, debout depuis cinq heures du matin; mais, bah! _il n'y a pas de lassitude le dimanche_, disait Favourite; _le dimanche, la fatigue ne travaille pas_. Vers trois heures les quatre couples, effarĆ©s de bonheur, dĆ©gringolaient aux montagnes russes, Ć©difice singulier qui occupait alors les hauteurs Beaujon et dont on apercevait la ligne serpentante au-dessus des arbres des Champs-ƉlysĆ©es. De temps en temps Favourite s'Ć©criait: --Et la surprise? je demande la surprise. --Patience, rĆ©pondait TholomyĆØs. Chapitre V Chez Bombarda Les montagnes russes Ć©puisĆ©es, on avait songĆ© au dĆ®ner; et le radieux huitain, enfin un peu las, s'Ć©tait Ć©chouĆ© au cabaret Bombarda, succursale qu'avait Ć©tablie aux Champs-ƉlysĆ©es ce fameux restaurateur Bombarda, dont on voyait alors l'enseigne rue de Rivoli Ć  cĆ“tĆ© du passage Delorme. Une chambre grande, mais laide, avec alcĆ“ve et lit au fond (vu la plĆ©nitude du cabaret le dimanche, il avait fallu accepter ce gĆ®te); deux fenĆŖtres d'où l'on pouvait contempler, Ć  travers les ormes, le quai et la riviĆØre; un magnifique rayon d'aoĆ»t effleurant les fenĆŖtres; deux tables; sur l'une une triomphante montagne de bouquets mĆŖlĆ©s Ć  des chapeaux d'hommes et de femmes; Ć  l'autre les quatre couples attablĆ©s autour d'un joyeux encombrement de plats, d'assiettes, de verres et de bouteilles; des cruchons de biĆØre mĆŖlĆ©s Ć  des flacons de vin; peu d'ordre sur la table, quelque dĆ©sordre dessous; _Ils faisaient sous la table_ _Un bruit, un trique-trac de pieds Ć©pouvantable_ dit MoliĆØre. VoilĆ  où en Ć©tait vers quatre heures et demie du soir la bergerade commencĆ©e Ć  cinq heures du matin. Le soleil dĆ©clinait, l'appĆ©tit s'Ć©teignait. Les Champs-ƉlysĆ©es, pleins de soleil et de foule, n'Ć©taient que lumiĆØre et poussiĆØre, deux choses dont se compose la gloire. Les chevaux de Marly, ces marbres hennissants, se cabraient dans un nuage d'or. Les carrosses allaient et venaient. Un escadron de magnifiques gardes du corps, clairon en tĆŖte, descendait l'avenue de Neuilly; le drapeau blanc, vaguement rose au soleil couchant, flottait sur le dĆ“me des Tuileries. La place de la Concorde, redevenue alors place Louis XV, regorgeait de promeneurs contents. Beaucoup portaient la fleur de lys d'argent suspendue au ruban blanc moirĆ© qui, en 1817, n'avait pas encore tout Ć  fait disparu des boutonniĆØres. ƇƠ et lĆ  au milieu des passants faisant cercle et applaudissant, des rondes de petites filles jetaient au vent une bourrĆ©e bourbonienne alors cĆ©lĆØbre, destinĆ©e Ć  foudroyer les Cent-Jours, et qui avait pour ritournelle: _Rendez-nous notre pĆØre de Gand,_ _Rendez-nous notre pĆØre._ Des tas de faubouriens endimanchĆ©s, parfois mĆŖme fleurdelysĆ©s comme les bourgeois, Ć©pars dans le grand carrĆ© et dans le carrĆ© Marigny, jouaient aux bagues et tournaient sur les chevaux de bois; d'autres buvaient; quelques-uns, apprentis imprimeurs, avaient des bonnets de papier; on entendait leurs rires. Tout Ć©tait radieux. C'Ć©tait un temps de paix incontestable et de profonde sĆ©curitĆ© royaliste; c'Ć©tait l'Ć©poque où un rapport intime et spĆ©cial du prĆ©fet de police AnglĆØs au roi sur les faubourgs de Paris se terminait par ces lignes: Ā«Tout bien considĆ©rĆ©, sire, il n'y a rien Ć  craindre de ces gens-lĆ . Ils sont insouciants et indolents comme des chats. Le bas peuple des provinces est remuant, celui de Paris ne l'est pas. Ce sont tous petits hommes. Sire, il en faudrait deux bout Ć  bout pour faire un de vos grenadiers. Il n'y a point de crainte du cĆ“tĆ© de la populace de la capitale. Il est remarquable que la taille a encore dĆ©cru dans cette population depuis cinquante ans; et le peuple des faubourgs de Paris est plus petit qu'avant la rĆ©volution. Il n'est point dangereux. En somme, c'est de la canaille bonne.Ā» Qu'un chat puisse se changer en lion, les prĆ©fets de police ne le croient pas possible; cela est pourtant, et c'est lĆ  le miracle du peuple de Paris. Le chat d'ailleurs, si mĆ©prisĆ© du comte AnglĆØs, avait l'estime des rĆ©publiques antiques; il incarnait Ć  leurs yeux la libertĆ©, et, comme pour servir de pendant Ć  la Minerve aptĆØre du PirĆ©e, il y avait sur la place publique de Corinthe le colosse de bronze d'un chat. La police naĆÆve de la restauration voyait trop Ā«en beauĀ» le peuple de Paris. Ce n'est point, autant qu'on le croit, de la Ā«canaille bonneĀ». Le Parisien est au FranƧais ce que l'AthĆ©nien Ć©tait au Grec; personne ne dort mieux que lui, personne n'est plus franchement frivole et paresseux que lui, personne mieux que lui n'a l'air d'oublier; qu'on ne s'y fie pas pourtant; il est propre Ć  toute sorte de nonchalance, mais, quand il y a de la gloire au bout, il est admirable Ć  toute espĆØce de furie. Donnez-lui une pique, il fera le 10 aoĆ»t; donnez-lui un fusil, vous aurez Austerlitz. Il est le point d'appui de NapolĆ©on et la ressource de Danton. S'agit-il de la patrie? il s'enrĆ“le; s'agit-il de la libertĆ©? il dĆ©pave. Gare! ses cheveux pleins de colĆØre sont Ć©piques; sa blouse se drape en chlamyde. Prenez garde. De la premiĆØre rue Greneta venue, il fera des fourches caudines. Si l'heure sonne, ce faubourien va grandir, ce petit homme va se lever, et il regardera d'une faƧon terrible, et son souffle deviendra tempĆŖte, et il sortira de cette pauvre poitrine grĆŖle assez de vent pour dĆ©ranger les plis des Alpes. C'est grĆ¢ce au faubourien de Paris que la rĆ©volution, mĆŖlĆ©e aux armĆ©es, conquiert l'Europe. Il chante, c'est sa joie. Proportionnez sa chanson Ć  sa nature, et vous verrez! Tant qu'il n'a pour refrain que la Carmagnole, il ne renverse que Louis XVI; faites-lui chanter la Marseillaise, il dĆ©livrera le monde. Cette note Ć©crite en marge du rapport AnglĆØs, nous revenons Ć  nos quatre couples. Le dĆ®ner, comme nous l'avons dit, s'achevait. Chapitre VI Chapitre où l'on s'adore Propos de table et propos d'amour; les uns sont aussi insaisissables que les autres; les propos d'amour sont des nuĆ©es, les propos de table sont des fumĆ©es. Fameuil et Dahlia fredonnaient; TholomyĆØs buvait; ZĆ©phine riait, Fantine souriait. Listolier soufflait dans une trompette de bois achetĆ©e Ć  Saint-Cloud. Favourite regardait tendrement Blachevelle et disait: --Blachevelle, je t'adore. Ceci amena une question de Blachevelle: --Qu'est-ce que tu ferais, Favourite, si je cessais de t'aimer? --Moi! s'Ć©cria Favourite. Ah! ne dis pas cela, mĆŖme pour rire! Si tu cessais de m'aimer, je te sauterais aprĆØs, je te grifferais, je te gratignerais, je te jetterais de l'eau, je te ferais arrĆŖter. Blachevelle sourit avec la fatuitĆ© voluptueuse d'un homme chatouillĆ© Ć  l'amour-propre. Favourite reprit: --Oui, je crierais Ć  la garde! Ah! je me gĆŖnerais par exemple! Canaille! Blachevelle, extasiĆ©, se renversa sur sa chaise et ferma orgueilleusement les deux yeux. Dahlia, tout en mangeant, dit bas Ć  Favourite dans le brouhaha: --Tu l'idolĆ¢tres donc bien, ton Blachevelle? --Moi, je le dĆ©teste, rĆ©pondit Favourite du mĆŖme ton en ressaisissant sa fourchette. Il est avare. J'aime le petit d'en face de chez moi. Il est trĆØs bien, ce jeune homme-lĆ , le connais-tu? On voit qu'il a le genre d'ĆŖtre acteur. J'aime les acteurs. SitĆ“t qu'il rentre, sa mĆØre dit: Ā«Ah! mon Dieu! ma tranquillitĆ© est perdue. Le voilĆ  qui va crier. Mais, mon ami, tu me casses la tĆŖte!Ā» Parce qu'il va dans la maison, dans des greniers Ć  rats, dans des trous noirs, si haut qu'il peut monter,--et chanter, et dĆ©clamer, est-ce que je sais, moi? qu'on l'entend d'en bas! Il gagne dĆ©jĆ  vingt sous par jour chez un avouĆ© Ć  Ć©crire de la chicane. Il est fils d'un ancien chantre de Saint-Jacques-du-Haut-Pas. Ah! il est trĆØs bien. Il m'idolĆ¢tre tant qu'un jour qu'il me voyait faire de la pĆ¢te pour des crĆŖpes, il m'a dit: _Mamselle, faites des beignets de vos gants et je les mangerai_. Il n'y a que les artistes pour dire des choses comme Ƨa. Ah! il est trĆØs bien. Je suis en train d'ĆŖtre insensĆ©e de ce petit-lĆ . C'est Ć©gal, je dis Ć  Blachevelle que je l'adore. Comme je mens! Hein? comme je mens! Favourite fit une pause, et continua: --Dahlia, vois-tu, je suis triste. Il n'a fait que pleuvoir tout l'Ć©tĆ©, le vent m'agace, le vent ne dĆ©colĆØre pas, Blachevelle est trĆØs pingre, c'est Ć  peine s'il y a des petits pois au marchĆ©, on ne sait que manger, j'ai le spleen, comme disent les Anglais, le beurre est si cher! et puis, vois, c'est une horreur, nous dĆ®nons dans un endroit où il y a un lit, Ƨa me dĆ©goĆ»te de la vie. Chapitre VII Sagesse de TholomyĆØs Cependant, tandis que quelques-uns chantaient, les autres causaient tumultueusement, et tous ensemble; ce n'Ć©tait plus que du bruit. TholomyĆØs intervint: --Ne parlons point au hasard ni trop vite, s'Ć©cria-t-il. MĆ©ditons si nous voulons ĆŖtre Ć©blouissants. Trop d'improvisation vide bĆŖtement l'esprit. BiĆØre qui coule n'amasse point de mousse. Messieurs, pas de hĆ¢te. MĆŖlons la majestĆ© Ć  la ripaille; mangeons avec recueillement; festinons lentement. Ne nous pressons pas. Voyez le printemps; s'il se dĆ©pĆŖche, il est flambĆ©, c'est-Ć -dire gelĆ©. L'excĆØs de zĆØle perd les pĆŖchers et les abricotiers. L'excĆØs de zĆØle tue la grĆ¢ce et la joie des bons dĆ®ners. Pas de zĆØle, messieurs! Grimod de la ReyniĆØre est de l'avis de Talleyrand. Une sourde rĆ©bellion gronda dans le groupe. --TholomyĆØs, laisse-nous tranquilles, dit Blachevelle. --ƀ bas le tyran! dit Fameuil. --Bombarda, Bombance et Bamboche! cria Listolier. --Le dimanche existe, reprit Fameuil. --Nous sommes sobres, ajouta Listolier. --TholomyĆØs, fit Blachevelle, contemple mon calme. --Tu en es le marquis, rĆ©pondit TholomyĆØs. Ce mĆ©diocre jeu de mots fit l'effet d'une pierre dans une mare. Le marquis de Montcalm Ć©tait un royaliste alors cĆ©lĆØbre. Toutes les grenouilles se turent. --Amis, s'Ć©cria TholomyĆØs, de l'accent d'un homme qui ressaisit l'empire, remettez-vous. Il ne faut pas que trop de stupeur accueille ce calembour tombĆ© du ciel. Tout ce qui tombe de la sorte n'est pas nĆ©cessairement digne d'enthousiasme et de respect. Le calembour est la fiente de l'esprit qui vole. Le lazzi tombe n'importe où; et l'esprit, aprĆØs la ponte d'une bĆŖtise, s'enfonce dans l'azur. Une tache blanchĆ¢tre qui s'aplatit sur le rocher n'empĆŖche pas le condor de planer. Loin de moi l'insulte au calembour! Je l'honore dans la proportion de ses mĆ©rites; rien de plus. Tout ce qu'il y a de plus auguste, de plus sublime et de plus charmant dans l'humanitĆ©, et peut-ĆŖtre hors de l'humanitĆ©, a fait des jeux de mots. JĆ©sus-Christ a fait un calembour sur saint Pierre, MoĆÆse sur Isaac, Eschyle sur Polynice, ClĆ©opĆ¢tre sur Octave. Et notez que ce calembour de ClĆ©opĆ¢tre a prĆ©cĆ©dĆ© la bataille d'Actium, et que, sans lui, personne ne se souviendrait de la ville de Toryne, nom grec qui signifie cuiller Ć  pot. Cela concĆ©dĆ©, je reviens Ć  mon exhortation. Mes frĆØres, je le rĆ©pĆØte, pas de zĆØle, pas de tohu-bohu, pas d'excĆØs, mĆŖme en pointes, gaĆ®tĆ©s, liesses et jeux de mots. Ɖcoutez-moi, j'ai la prudence d'Amphiaraüs et la calvitie de CĆ©sar. Il faut une limite, mĆŖme aux rĆ©bus. _Est modus in rebus_. Il faut une limite, mĆŖme aux dĆ®ners. Vous aimez les chaussons aux pommes, mesdames, n'en abusez pas. Il faut, mĆŖme en chaussons, du bon sens et de l'art. La gloutonnerie chĆ¢tie le glouton. Gula punit Gulax. L'indigestion est chargĆ©e par le bon Dieu de faire de la morale aux estomacs. Et, retenez ceci: chacune de nos passions, mĆŖme l'amour, a un estomac qu'il ne faut pas trop remplir. En toute chose il faut Ć©crire Ć  temps le mot _finis_, il faut se contenir, quand cela devient urgent, tirer le verrou sur son appĆ©tit, mettre au violon sa fantaisie et se mener soi-mĆŖme au poste. Le sage est celui qui sait Ć  un moment donnĆ© opĆ©rer sa propre arrestation. Ayez quelque confiance en moi. Parce que j'ai fait un peu mon droit, Ć  ce que me disent mes examens, parce que je sais la diffĆ©rence qu'il y a entre la question mue et la question pendante, parce que j'ai soutenu une thĆØse en latin sur la maniĆØre dont on donnait la torture Ć  Rome au temps où Munatius Demens Ć©tait questeur du Parricide, parce que je vais ĆŖtre docteur, Ć  ce qu'il paraĆ®t, il ne s'ensuit pas de toute nĆ©cessitĆ© que je sois un imbĆ©cile. Je vous recommande la modĆ©ration dans vos dĆ©sirs. Vrai comme je m'appelle FĆ©lix TholomyĆØs, je parle bien. Heureux celui qui, lorsque l'heure a sonnĆ©, prend un parti hĆ©roĆÆque, et abdique comme Sylla, ou OrigĆØne! Favourite Ć©coutait avec une attention profonde. --FĆ©lix! dit-elle, quel joli mot! j'aime ce nom-lĆ . C'est en latin. Ƈa veut dire Prosper. TholomyĆØs poursuivit: --Quirites, gentlemen, Caballeros, mes amis! voulez-vous ne sentir aucun aiguillon et vous passer de lit nuptial et braver l'amour? Rien de plus simple. Voici la recette: la limonade, l'exercice outrĆ©, le travail forcĆ©, Ć©reintez-vous, traĆ®nez des blocs, ne dormez pas, veillez, gorgez-vous de boissons nitreuses et de tisanes de nymphaeas, savourez des Ć©mulsions de pavots et d'agnuscastus, assaisonnez-moi cela d'une diĆØte sĆ©vĆØre, crevez de faim, et joignez-y les bains froids, les ceintures d'herbes, l'application d'une plaque de plomb, les lotions avec la liqueur de Saturne et les fomentations avec l'oxycrat. --J'aime mieux une femme, dit Listolier. --La femme! reprit TholomyĆØs, mĆ©fiez-vous-en. Malheur Ć  celui qui se livre au coeur changeant de la femme! La femme est perfide et tortueuse. Elle dĆ©teste le serpent par jalousie de mĆ©tier. Le serpent, c'est la boutique en face. --TholomyĆØs, cria Blachevelle, tu es ivre! --Pardieu! dit TholomyĆØs. --Alors sois gai, reprit Blachevelle. Et, remplissant son verre, il se leva: --Gloire au vin! _Nunc te, Bacche, canam_! Pardon, mesdemoiselles, c'est de l'espagnol. Et la preuve, seƱoras, la voici: tel peuple, telle futaille. L'arrobe de Castille contient seize litres, le cantaro d'Alicante douze, l'almude des Canaries vingt-cinq, le cuartin des BalĆ©ares vingt-six, la botte du czar Pierre trente. Vive ce czar qui Ć©tait grand, et vive sa botte qui Ć©tait plus grande encore! Mesdames, un conseil d'ami: trompez-vous de voisin, si bon vous semble. Le propre de l'amour, c'est d'errer. L'amourette n'est pas faite pour s'accroupir et s'abrutir comme une servante anglaise qui a le calus du scrobage aux genoux. Elle n'est pas faite pour cela, elle erre gaĆ®ment, la douce amourette! On a dit: l'erreur est humaine; moi je dis: l'erreur est amoureuse. Mesdames, je vous idolĆ¢tre toutes. Ɣ ZĆ©phine, Ć“ JosĆ©phine, figure plus que chiffonnĆ©e, vous seriez charmante, si vous n'Ć©tiez de travers. Vous avez l'air d'un joli visage sur lequel, par mĆ©garde, on s'est assis. Quant Ć  Favourite, Ć“ nymphes et muses! un jour que Blachevelle passait le ruisseau de la rue GuĆ©rin-Boisseau, il vit une belle fille aux bas blancs et bien tirĆ©s qui montrait ses jambes. Ce prologue lui plut, et Blachevelle aima. Celle qu'il aima Ć©tait Favourite. Ɣ Favourite, tu as des lĆØvres ioniennes. Il y avait un peintre grec, appelĆ© Euphorion, qu'on avait surnommĆ© le peintre des lĆØvres. Ce Grec seul eĆ»t Ć©tĆ© digne de peindre ta bouche! Ɖcoute! avant toi, il n'y avait pas de crĆ©ature digne de ce nom. Tu es faite pour recevoir la pomme comme VĆ©nus ou pour la manger comme ƈve. La beautĆ© commence Ć  toi. Je viens de parler d'ƈve, c'est toi qui l'as crƩƩe. Tu mĆ©rites le brevet d'invention de la jolie femme. Ɣ Favourite, je cesse de vous tutoyer, parce que je passe de la poĆ©sie Ć  la prose. Vous parliez de mon nom tout Ć  l'heure. Cela m'a attendri; mais, qui que nous soyons, mĆ©fions-nous des noms. Ils peuvent se tromper. Je me nomme FĆ©lix et ne suis pas heureux. Les mots sont des menteurs. N'acceptons pas aveuglĆ©ment les indications qu'ils nous donnent. Ce serait une erreur d'Ć©crire Ć  LiĆØge pour avoir des bouchons et Ć  Pau pour avoir des gants. Miss Dahlia, Ć  votre place, je m'appellerais Rosa. Il faut que la fleur sente bon et que la femme ait de l'esprit. Je ne dis rien de Fantine, c'est une songeuse, une rĆŖveuse, une pensive, une sensitive; c'est un fantĆ“me ayant la forme d'une nymphe et la pudeur d'une nonne, qui se fourvoie dans la vie de grisette, mais qui se rĆ©fugie dans les illusions, et qui chante, et qui prie, et qui regarde l'azur sans trop savoir ce qu'elle voit ni ce qu'elle fait, et qui, les yeux au ciel, erre dans un jardin où il y a plus d'oiseaux qu'il n'en existe! Ɣ Fantine, sache ceci: moi TholomyĆØs, je suis une illusion; mais elle ne m'entend mĆŖme pas, la blonde fille des chimĆØres! Du reste, tout en elle est fraĆ®cheur, suavitĆ©, jeunesse, douce clartĆ© matinale. Ɣ Fantine, fille digne de vous appeler marguerite ou perle, vous ĆŖtes une femme du plus bel orient. Mesdames, un deuxiĆØme conseil: ne vous mariez point; le mariage est une greffe; cela prend bien ou mal; fuyez ce risque. Mais, bah! qu'est-ce que je chante lĆ ? Je perds mes paroles. Les filles sont incurables sur l'Ć©pousaille; et tout ce que nous pouvons dire, nous autres sages, n'empĆŖchera point les giletiĆØres et les piqueuses de bottines de rĆŖver des maris enrichis de diamants. Enfin, soit; mais, belles, retenez ceci: vous mangez trop de sucre. Vous n'avez qu'un tort, Ć“ femmes, c'est de grignoter du sucre. Ɣ sexe rongeur, tes jolies petites dents blanches adorent le sucre. Or, Ć©coutez bien, le sucre est un sel. Tout sel est dessĆ©chant. Le sucre est le plus dessĆ©chant de tous les sels. Il pompe Ć  travers les veines les liquides du sang; de lĆ  la coagulation, puis la solidification du sang; de lĆ  les tubercules dans le poumon; de lĆ  la mort. Et c'est pourquoi le diabĆØte confine Ć  la phthisie. Donc ne croquez pas de sucre, et vous vivrez! Je me tourne vers les hommes. Messieurs, faites des conquĆŖtes. Pillez-vous les uns aux autres sans remords vos bien-aimĆ©es. Chassez-croisez. En amour, il n'y a pas d'amis. Partout où il y a une jolie femme l'hostilitĆ© est ouverte. Pas de quartier, guerre Ć  outrance! Une jolie femme est un casus belli; une jolie femme est un flagrant dĆ©lit. Toutes les invasions de l'histoire sont dĆ©terminĆ©es par des cotillons. La femme est le droit de l'homme. Romulus a enlevĆ© les Sabines, Guillaume a enlevĆ© les Saxonnes, CĆ©sar a enlevĆ© les Romaines. L'homme qui n'est pas aimĆ© plane comme un vautour sur les amantes d'autrui; et quant Ć  moi, Ć  tous ces infortunĆ©s qui sont veufs, je jette la proclamation sublime de Bonaparte Ć  l'armĆ©e d'Italie: Ā«Soldats, vous manquez de tout. L'ennemi en a.Ā» TholomyĆØs s'interrompit. --Souffle, TholomyĆØs, dit Blachevelle. En mĆŖme temps, Blachevelle, appuyĆ© de Listolier et de Fameuil, entonna sur un air de complainte une de ces chansons d'atelier composĆ©es des premiers mots venus, rimĆ©es richement et pas du tout, vides de sens comme le geste de l'arbre et le bruit du vent, qui naissent de la vapeur des pipes et se dissipent et s'envolent avec elle. Voici par quel couplet le groupe donna la rĆ©plique Ć  la harangue de TholomyĆØs: Les pĆØres dindons donnĆØrent de l'argent Ć  un agent pour que mons Clermont-Tonnerre fĆ»t fait pape Ć  la Saint-Jean; Mais Clermont ne put pas ĆŖtre fait pape, n'Ć©tant pas prĆŖtre. Alors leur agent rageant leur rapporta leur argent. Ceci n'Ć©tait pas fait pour calmer l'improvisation de TholomyĆØs; il vida son verre, le remplit, et recommenƧa. --ƀ bas la sagesse! oubliez tout ce que j'ai dit. Ne soyons ni prudes, ni prudents, ni prud'hommes. Je porte un toast Ć  l'allĆ©gresse; soyons allĆØgres! ComplĆ©tons notre cours de droit par la folie et la nourriture. Indigestion et digeste. Que Justinien soit le mĆ¢le et que Ripaille soit la femelle! Joie dans les profondeurs! Vis, Ć“ crĆ©ation! Le monde est un gros diamant! Je suis heureux. Les oiseaux sont Ć©tonnants. Quelle fĆŖte partout! Le rossignol est un Elleviou gratis. ƉtĆ©, je te salue. Ɣ Luxembourg, Ć“ GĆ©orgiques de la rue Madame et de l'allĆ©e de l'Observatoire! Ɣ pioupious rĆŖveurs! Ć“ toutes ces bonnes charmantes qui, tout en gardant des enfants, s'amusent Ć  en Ć©baucher! Les pampas de l'AmĆ©rique me plairaient, si je n'avais les arcades de l'OdĆ©on. Mon Ć¢me s'envole dans les forĆŖts vierges et dans les savanes. Tout est beau. Les mouches bourdonnent dans les rayons. Le soleil a Ć©ternuĆ© le colibri. Embrasse-moi, Fantine! Il se trompa, et embrassa Favourite. Chapitre VIII Mort d'un cheval --On dĆ®ne mieux chez Edon que chez Bombarda, s'Ć©cria ZĆ©phine. --Je prĆ©fĆØre Bombarda Ć  Edon, dĆ©clara Blachevelle. Il a plus de luxe. C'est plus asiatique. Voyez la salle d'en bas. Il y a des glaces sur les murs. --J'en aime mieux dans mon assiette, dit Favourite. Blachevelle insista: --Regardez les couteaux. Les manches sont en argent chez Bombarda, et en os chez Edon. Or, l'argent est plus prĆ©cieux que l'os. --ExceptĆ© pour ceux qui ont un menton d'argent, observa TholomyĆØs. Il regardait en cet instant-lĆ  le dĆ“me des Invalides, visible des fenĆŖtres de Bombarda. Il y eut une pause. --TholomyĆØs, cria Fameuil, tout Ć  l'heure, Listolier et moi, nous avions une discussion. --Une discussion est bonne, rĆ©pondit TholomyĆØs, une querelle vaut mieux. --Nous disputions philosophie. --Soit. --Lequel prĆ©fĆØres-tu de Descartes ou de Spinosa? --DĆ©saugiers, dit TholomyĆØs. Cet arrĆŖt rendu, il but et reprit: --Je consens Ć  vivre. Tout n'est pas fini sur la terre, puisqu'on peut encore dĆ©raisonner. J'en rends grĆ¢ces aux dieux immortels. On ment, mais on rit. On affirme, mais on doute. L'inattendu jaillit du syllogisme. C'est beau. Il est encore ici-bas des humains qui savent joyeusement ouvrir et fermer la boĆ®te Ć  surprises du paradoxe. Ceci, mesdames, que vous buvez d'un air tranquille, est du vin de MadĆØre, sachez-le, du cru de Coural das Freiras qui est Ć  trois cent dix-sept toises au-dessus du niveau de la mer! Attention en buvant! trois cent dix-sept toises! et monsieur Bombarda, le magnifique restaurateur, vous donne ces trois cent dix-sept toises pour quatre francs cinquante centimes! Fameuil interrompit de nouveau: --TholomyĆØs, tes opinions font loi. Quel est ton auteur favori? --Ber.... --Quin? --Non. Choux. Et TholomyĆØs poursuivit: --Honneur Ć  Bombarda! il Ć©galerait Munophis d'Elephanta s'il pouvait me cueillir une almĆ©e, et ThygĆ©lion de ChĆ©ronĆ©e s'il pouvait m'apporter une hĆ©taĆÆre! car, Ć“ mesdames, il y avait des Bombarda en GrĆØce et en Ɖgypte. C'est ApulĆ©e qui nous l'apprend. HĆ©las! toujours les mĆŖmes choses et rien de nouveau. Plus rien d'inĆ©dit dans la crĆ©ation du crĆ©ateur! _Nil sub sole novum_, dit Salomon; _amor omnibus idem_, dit Virgile; et Carabine monte avec Carabin dans la galiote de Saint-Cloud, comme Aspasie s'embarquait avec PĆ©riclĆØs sur la flotte de Samos. Un dernier mot. Savez-vous ce que c'Ć©tait qu'Aspasie, mesdames? Quoiqu'elle vĆ©cĆ»t dans un temps où les femmes n'avaient pas encore d'Ć¢me, c'Ć©tait une Ć¢me; une Ć¢me d'une nuance rose et pourpre, plus embrasĆ©e que le feu, plus franche que l'aurore. Aspasie Ć©tait une crĆ©ature en qui se touchaient les deux extrĆŖmes de la femme; c'Ć©tait la prostituĆ©e dĆ©esse. Socrate, plus Manon Lescaut. Aspasie fut crƩƩe pour le cas où il faudrait une catin Ć  PromĆ©thĆ©e. TholomyĆØs, lancĆ©, se serait difficilement arrĆŖtĆ©, si un cheval ne se fĆ»t abattu sur le quai en cet instant-lĆ  mĆŖme. Du choc, la charrette et l'orateur restĆØrent court. C'Ć©tait une jument beauceronne, vieille et maigre et digne de l'Ć©quarrisseur, qui traĆ®nait une charrette fort lourde. Parvenue devant Bombarda, la bĆŖte, Ć©puisĆ©e et accablĆ©e, avait refusĆ© d'aller plus loin. Cet incident avait fait de la foule. ƀ peine le charretier, jurant et indignĆ©, avait-il eu le temps de prononcer avec l'Ć©nergie convenable le mot sacramentel: _mĆ¢tin_! appuyĆ© d'un implacable coup de fouet, que la haridelle Ć©tait tombĆ©e pour ne plus se relever. Au brouhaha des passants, les gais auditeurs de TholomyĆØs tournĆØrent la tĆŖte, et TholomyĆØs en profita pour clore son allocution par cette strophe mĆ©lancolique: _Elle Ć©tait de ce monde où coucous et carrosses_ _Ont le mĆŖme destin,_ _Et, rosse, elle a vĆ©cu ce que vivent les rosses,_ _L'espace d'un: mĆ¢tin!_ --Pauvre cheval, soupira Fantine. Et Dahlia s'Ć©cria: --VoilĆ  Fantine qui va se mettre Ć  plaindre les chevaux! Peut-on ĆŖtre fichue bĆŖte comme Ƨa! En ce moment, Favourite, croisant les bras et renversant la tĆŖte en arriĆØre, regarda rĆ©solĆ»ment TholomyĆØs et dit: --Ah ƧƠ! et la surprise? --Justement. L'instant est arrivĆ©, rĆ©pondit TholomyĆØs. Messieurs, l'heure de la surprise a sonnĆ©. Mesdames, attendez-nous un moment. --Cela commence par un baiser, dit Blachevelle. --Sur le front, ajouta TholomyĆØs. Chacun dĆ©posa gravement un baiser sur le front de sa maĆ®tresse; puis ils se dirigĆØrent vers la porte tous les quatre Ć  la file, en mettant leur doigt sur la bouche. Favourite battit des mains Ć  leur sortie. --C'est dĆ©jĆ  amusant, dit-elle. --Ne soyez pas trop longtemps, murmura Fantine. Nous vous attendons. Chapitre IX Fin joyeuse de la joie Les jeunes filles, restĆ©es seules, s'accoudĆØrent deux Ć  deux sur l'appui des fenĆŖtres, jasant, penchant leur tĆŖte et se parlant d'une croisĆ©e Ć  l'autre. Elles virent les jeunes gens sortir du cabaret Bombarda bras dessus bras dessous; ils se retournĆØrent, leur firent des signes en riant, et disparurent dans cette poudreuse cohue du dimanche qui envahit hebdomadairement les Champs-ƉlysĆ©es. --Ne soyez pas longtemps! cria Fantine. --Que vont-ils nous rapporter? dit ZĆ©phine. --Pour sĆ»r ce sera joli, dit Dahlia. --Moi, reprit Favourite, je veux que ce soit en or. Elles furent bientĆ“t distraites par le mouvement du bord de l'eau qu'elles distinguaient dans les branches des grands arbres et qui les divertissait fort. C'Ć©tait l'heure du dĆ©part des malles-poste et des diligences. Presque toutes les messageries du midi et de l'ouest passaient alors par les Champs-ƉlysĆ©es. La plupart suivaient le quai et sortaient par la barriĆØre de Passy. De minute en minute, quelque grosse voiture peinte en jaune et en noir, pesamment chargĆ©e, bruyamment attelĆ©e, difforme Ć  force de malles, de bĆ¢ches et de valises, pleine de tĆŖtes tout de suite disparues, broyant la chaussĆ©e, changeant tous les pavĆ©s en briquets, se ruait Ć  travers la foule avec toutes les Ć©tincelles d'une forge, de la poussiĆØre pour fumĆ©e, et un air de furie. Ce vacarme rĆ©jouissait les jeunes filles. Favourite s'exclamait: --Quel tapage! on dirait des tas de chaĆ®nes qui s'envolent. Il arriva une fois qu'une de ces voitures qu'on distinguait difficilement dans l'Ć©paisseur des ormes, s'arrĆŖta un moment, puis repartit au galop. Cela Ć©tonna Fantine. --C'est particulier! dit-elle. Je croyais que la diligence ne s'arrĆŖtait jamais. Favourite haussa les Ć©paules. --Cette Fantine est surprenante. Je viens la voir par curiositĆ©. Elle s'Ć©blouit des choses les plus simples. Une supposition; je suis un voyageur, je dis Ć  la diligence: je vais en avant, vous me prendrez sur le quai en passant. La diligence passe, me voit, s'arrĆŖte, et me prend. Cela se fait tous les jours. Tu ne connais pas la vie, ma chĆØre. Un certain temps s'Ć©coula ainsi. Tout Ć  coup Favourite eut le mouvement de quelqu'un qui se rĆ©veille. --Eh bien, fit-elle, et la surprise? --ƀ propos, oui, reprit Dahlia, la fameuse surprise? --Ils sont bien longtemps! dit Fantine. Comme Fantine achevait ce soupir, le garƧon qui avait servi le dĆ®ner entra. Il tenait Ć  la main quelque chose qui ressemblait Ć  une lettre. --Qu'est-ce que cela? demanda Favourite. Le garƧon rĆ©pondit: --C'est un papier que ces messieurs ont laissĆ© pour ces dames. --Pourquoi ne l'avoir pas apportĆ© tout de suite? --Parce que ces messieurs, reprit le garƧon, ont commandĆ© de ne le remettre Ć  ces dames qu'au bout d'une heure. Favourite arracha le papier des mains du garƧon. C'Ć©tait une lettre en effet. --Tiens! dit-elle. Il n'y a pas d'adresse. Mais voici ce qui est Ć©crit dessus: Ceci est la surprise. Elle dĆ©cacheta vivement la lettre, l'ouvrit et lut (elle savait lire): «Ô nos amantes! Ā«Sachez que nous avons des parents. Des parents, vous ne connaissez pas beaucoup Ƨa. Ƈa s'appelle des pĆØres et mĆØres dans le code civil, puĆ©ril et honnĆŖte. Or, ces parents gĆ©missent, ces vieillards nous rĆ©clament, ces bons hommes et ces bonnes femmes nous appellent enfants prodigues, ils souhaitent nos retours, et nous offrent de tuer des veaux. Nous leur obĆ©issons, Ć©tant vertueux. ƀ l'heure où vous lirez ceci, cinq chevaux fougueux nous rapporteront Ć  nos papas et Ć  nos mamans. Nous fichons le camp, comme dit Bossuet. Nous partons, nous sommes partis. Nous fuyons dans les bras de Laffitte et sur les ailes de Caillard. La diligence de Toulouse nous arrache Ć  l'abĆ®me, et l'abĆ®me c'est vous, Ć“ nos belles petites! Nous rentrons dans la sociĆ©tĆ©, dans le devoir et dans l'ordre, au grand trot, Ć  raison de trois lieues Ć  l'heure. Il importe Ć  la patrie que nous soyons, comme tout le monde, prĆ©fets, pĆØres de famille, gardes champĆŖtres et conseillers d'Ɖtat. VĆ©nĆ©rez-nous. Nous nous sacrifions. Pleurez-nous rapidement et remplacez-nous vite. Si cette lettre vous dĆ©chire, rendez-le-lui. Adieu. Ā«Pendant prĆØs de deux ans, nous vous avons rendues heureuses. Ne nous en gardez pas rancune. Ā«SignĆ©: Blachevelle. Ā«Fameuil. Ā«Listolier. Ā«FĆ©lix TholomyĆØs Ā«Post-scriptum. Le dĆ®ner est payĆ©.Ā» Les quatre jeunes filles se regardĆØrent. Favourite rompit la premiĆØre le silence. --Eh bien! s'Ć©cria-t-elle, c'est tout de mĆŖme une bonne farce. --C'est trĆØs drĆ“le, dit ZĆ©phine. --Ce doit ĆŖtre Blachevelle qui a eu cette idĆ©e-lĆ , reprit Favourite. Ƈa me rend amoureuse de lui. SitĆ“t parti, sitĆ“t aimĆ©. VoilĆ  l'histoire. --Non, dit Dahlia, c'est une idĆ©e Ć  TholomyĆØs. Ƈa se reconnaĆ®t. --En ce cas, reprit Favourite, mort Ć  Blachevelle et vive TholomyĆØs! --Vive TholomyĆØs! criĆØrent Dahlia et ZĆ©phine. Et elles Ć©clatĆØrent de rire. Fantine rit comme les autres. Une heure aprĆØs, quand elle fut rentrĆ©e dans sa chambre, elle pleura. C'Ć©tait, nous l'avons dit, son premier amour; elle s'Ć©tait donnĆ©e Ć  ce TholomyĆØs comme Ć  un mari, et la pauvre fille avait un enfant. Livre quatriĆØme--Confier, c'est quelquefois livrer Chapitre I Une mĆØre qui en rencontre une autre Il y avait, dans le premier quart de ce siĆØcle, Ć  Montfermeil, prĆØs de Paris, une faƧon de gargote qui n'existe plus aujourd'hui. Cette gargote Ć©tait tenue par des gens appelĆ©s ThĆ©nardier, mari et femme. Elle Ć©tait situĆ©e dans la ruelle du Boulanger. On voyait au-dessus de la porte une planche clouĆ©e Ć  plat sur le mur. Sur cette planche Ć©tait peint quelque chose qui ressemblait Ć  un homme portant sur son dos un autre homme, lequel avait de grosses Ć©paulettes de gĆ©nĆ©ral dorĆ©es avec de larges Ć©toiles argentĆ©es; des taches rouges figuraient du sang; le reste du tableau Ć©tait de la fumĆ©e et reprĆ©sentait probablement une bataille. Au bas on lisait cette inscription: _Au Sergent de Waterloo._ Rien n'est plus ordinaire qu'un tombereau ou une charrette Ć  la porte d'une auberge. Cependant le vĆ©hicule ou, pour mieux dire, le fragment de vĆ©hicule qui encombrait la rue devant la gargote du Sergent de Waterloo, un soir du printemps de 1818, eĆ»t certainement attirĆ© par sa masse l'attention d'un peintre qui eĆ»t passĆ© lĆ . C'Ć©tait l'avant-train d'un de ces fardiers, usitĆ©s dans les pays de forĆŖts, et qui servent Ć  charrier des madriers et des troncs d'arbres. Cet avant-train se composait d'un massif essieu de fer Ć  pivot où s'emboĆ®tait un lourd timon, et que supportaient deux roues dĆ©mesurĆ©es. Tout cet ensemble Ć©tait trapu, Ć©crasant et difforme. On eĆ»t dit l'affĆ»t d'un canon gĆ©ant. Les orniĆØres avaient donnĆ© aux roues, aux jantes, aux moyeux, Ć  l'essieu et au timon, une couche de vase, hideux badigeonnage jaunĆ¢tre assez semblable Ć  celui dont on orne volontiers les cathĆ©drales. Le bois disparaissait sous la boue et le fer sous la rouille. Sous l'essieu pendait en draperie une grosse chaĆ®ne digne de Goliath forƧat. Cette chaĆ®ne faisait songer, non aux poutres qu'elle avait fonction de transporter, mais aux mastodontes et aux mammons qu'elle eĆ»t pu atteler; elle avait un air de bagne, mais de bagne cyclopĆ©en et surhumain, et elle semblait dĆ©tachĆ©e de quelque monstre. HomĆØre y eĆ»t liĆ© PolyphĆØme et Shakespeare Caliban. Pourquoi cet avant-train de fardier Ć©tait-il Ć  cette place dans la rue? D'abord, pour encombrer la rue; ensuite pour achever de se rouiller. Il y a dans le vieil ordre social une foule d'institutions qu'on trouve de la sorte sur son passage en plein air et qui n'ont pas pour ĆŖtre lĆ  d'autres raisons. Le centre de la chaĆ®ne pendait sous l'essieu assez prĆØs de terre, et sur la courbure, comme sur la corde d'une balanƧoire, Ć©taient assises et groupĆ©es, ce soir-lĆ , dans un entrelacement exquis, deux petites filles, l'une d'environ deux ans et demi, l'autre de dix-huit mois, la plus petite dans les bras de la plus grande. Un mouchoir savamment nouĆ© les empĆŖchait de tomber. Une mĆØre avait vu cette effroyable chaĆ®ne, et avait dit: Tiens! voilĆ  un joujou pour mes enfants. Les deux enfants, du reste gracieusement attifĆ©es, et avec quelque recherche, rayonnaient; on eĆ»t dit deux roses dans de la ferraille; leurs yeux Ć©taient un triomphe; leurs fraĆ®ches joues riaient. L'une Ć©tait chĆ¢tain, l'autre Ć©tait brune. Leurs naĆÆfs visages Ć©taient deux Ć©tonnements ravis; un buisson fleuri qui Ć©tait prĆØs de lĆ  envoyait aux passants des parfums qui semblaient venir d'elles; celle de dix-huit mois montrait son gentil ventre nu avec cette chaste indĆ©cence de la petitesse. Au-dessus et autour de ces deux tĆŖtes dĆ©licates, pĆ©tries dans le bonheur et trempĆ©es dans la lumiĆØre, le gigantesque avant-train, noir de rouille, presque terrible, tout enchevĆŖtrĆ© de courbes et d'angles farouches, s'arrondissait comme un porche de caverne. ƀ quelques pas, accroupie sur le seuil de l'auberge, la mĆØre, femme d'un aspect peu avenant du reste, mais touchante en ce moment-lĆ , balanƧait les deux enfants au moyen d'une longue ficelle, les couvant des yeux de peur d'accident avec cette expression animale et cĆ©leste propre Ć  la maternitĆ©; Ć  chaque va-et-vient, les hideux anneaux jetaient un bruit strident qui ressemblait Ć  un cri de colĆØre; les petites filles s'extasiaient, le soleil couchant se mĆŖlait Ć  cette joie, et rien n'Ć©tait charmant comme ce caprice du hasard, qui avait fait d'une chaĆ®ne de titans une escarpolette de chĆ©rubins. Tout en berƧant ses deux petites, la mĆØre chantonnait d'une voix fausse une romance alors cĆ©lĆØbre: _Il le faut, disait un guerrier._ Sa chanson et la contemplation de ses filles l'empĆŖchaient d'entendre et de voir ce qui se passait dans la rue. Cependant quelqu'un s'Ć©tait approchĆ© d'elle, comme elle commenƧait le premier couplet de la romance, et tout Ć  coup elle entendit une voix qui disait trĆØs prĆØs de son oreille: --Vous avez lĆ  deux jolis enfants, madame, rĆ©pondit la mĆØre, continuant sa romance: _ƀ la belle et tendre Imogine._ rĆ©pondit la mĆØre, continuant sa romance, puis elle tourna la tĆŖte. Une femme Ć©tait devant elle, Ć  quelques pas. Cette femme, elle aussi, avait un enfant qu'elle portait dans ses bras. Elle portait en outre un assez gros sac de nuit qui semblait fort lourd. L'enfant de cette femme Ć©tait un des plus divins ĆŖtres qu'on pĆ»t voir. C'Ć©tait une fille de deux Ć  trois ans. Elle eĆ»t pu jouter avec les deux autres pour la coquetterie de l'ajustement; elle avait un bavolet de linge fin, des rubans Ć  sa brassiĆØre et de la valenciennes Ć  son bonnet. Le pli de sa jupe relevĆ©e laissait voir sa cuisse blanche, potelĆ©e et ferme. Elle Ć©tait admirablement rose et bien portante. La belle petite donnait envie de mordre dans les pommes de ses joues. On ne pouvait rien dire de ses yeux, sinon qu'ils devaient ĆŖtre trĆØs grands et qu'ils avaient des cils magnifiques. Elle dormait. Elle dormait de ce sommeil d'absolue confiance propre Ć  son Ć¢ge. Les bras des mĆØres sont faits de tendresse; les enfants y dorment profondĆ©ment. Quant Ć  la mĆØre, l'aspect en Ć©tait pauvre et triste. Elle avait la mise d'une ouvriĆØre qui tend Ć  redevenir paysanne. Elle Ć©tait jeune. Ɖtait-elle belle? peut-ĆŖtre; mais avec cette mise il n'y paraissait pas. Ses cheveux, d'où s'Ć©chappait une mĆØche blonde, semblaient fort Ć©pais, mais disparaissaient sĆ©vĆØrement sous une coiffe de bĆ©guine, laide, serrĆ©e, Ć©troite, et nouĆ©e au menton. Le rire montre les belles dents quand on en a; mais elle ne riait point. Ses yeux ne semblaient pas ĆŖtre secs depuis trĆØs longtemps. Elle Ć©tait pĆ¢le; elle avait l'air trĆØs lasse et un peu malade; elle regardait sa fille endormie dans ses bras avec cet air particulier d'une mĆØre qui a nourri son enfant. Un large mouchoir bleu, comme ceux où se mouchent les invalides, pliĆ© en fichu, masquait lourdement sa taille. Elle avait les mains hĆ¢lĆ©es et toutes piquĆ©es de taches de rousseur, l'index durci et dĆ©chiquetĆ© par l'aiguille, une Mante brune de laine bourrue, une robe de toile et de gros souliers. C'Ć©tait Fantine. C'Ć©tait Fantine. Difficile Ć  reconnaĆ®tre. Pourtant, Ć  l'examiner attentivement, elle avait toujours sa beautĆ©. Un pli triste, qui ressemblait Ć  un commencement d'ironie, ridait sa joue droite. Quant Ć  sa toilette, cette aĆ©rienne toilette de mousseline et de rubans qui semblait faite avec de la gaĆ®tĆ©, de la folie et de la musique, pleine de grelots et parfumĆ©e de lilas, elle s'Ć©tait Ć©vanouie comme ces beaux givres Ć©clatants qu'on prend pour des diamants au soleil; ils fondent et laissent la branche toute noire. Dix mois s'Ć©taient Ć©coulĆ©s depuis Ā«la bonne farceĀ». Que s'Ć©tait-il passĆ© pendant ces dix mois? on le devine. AprĆØs l'abandon, la gĆŖne. Fantine avait tout de suite perdu de vue Favourite, ZĆ©phine et Dahlia; le lien, brisĆ© du cĆ“tĆ© des hommes, s'Ć©tait dĆ©fait du cĆ“tĆ© des femmes; on les eĆ»t bien Ć©tonnĆ©es, quinze jours aprĆØs, si on leur eĆ»t dit qu'elles Ć©taient amies; cela n'avait plus de raison d'ĆŖtre. Fantine Ć©tait restĆ©e seule. Le pĆØre de son enfant parti,--hĆ©las! ces ruptures-lĆ  sont irrĆ©vocables,--elle se trouva absolument isolĆ©e, avec l'habitude du travail de moins et le goĆ»t du plaisir de plus. EntraĆ®nĆ©e par sa liaison avec TholomyĆØs Ć  dĆ©daigner le petit mĆ©tier qu'elle savait, elle avait nĆ©gligĆ© ses dĆ©bouchĆ©s; ils s'Ć©taient fermĆ©s. Nulle ressource. Fantine savait Ć  peine lire et ne savait pas Ć©crire; on lui avait seulement appris dans son enfance Ć  signer son nom; elle avait fait Ć©crire par un Ć©crivain public une lettre Ć  TholomyĆØs, puis une seconde, puis une troisiĆØme. TholomyĆØs n'avait rĆ©pondu Ć  aucune. Un jour, Fantine entendit des commĆØres dire en regardant sa fille: --Est-ce qu'on prend ces enfants-lĆ  au sĆ©rieux? on hausse les Ć©paules de ces enfants-lĆ ! Alors elle songea Ć  TholomyĆØs qui haussait les Ć©paules de son enfant et qui ne prenait pas cet ĆŖtre innocent au sĆ©rieux; et son coeur devint sombre Ć  l'endroit de cet homme. Quel parti prendre pourtant? Elle ne savait plus Ć  qui s'adresser. Elle avait commis une faute, mais le fond de sa nature, on s'en souvient, Ć©tait pudeur et vertu. Elle sentit vaguement qu'elle Ć©tait Ć  la veille de tomber dans la dĆ©tresse, et de glisser dans le pire. Il fallait du courage; elle en eut, et se roidit. L'idĆ©e lui vint de retourner dans sa ville natale, Ć  Montreuil-sur-mer. LĆ  quelqu'un peut-ĆŖtre la connaĆ®trait et lui donnerait du travail. Oui; mais il faudrait cacher sa faute. Et elle entrevoyait confusĆ©ment la nĆ©cessitĆ© possible d'une sĆ©paration plus douloureuse encore que la premiĆØre. Son coeur se serra, mais elle prit sa rĆ©solution. Fantine, on le verra, avait la farouche bravoure de la vie. Elle avait dĆ©jĆ  vaillamment renoncĆ© Ć  la parure, s'Ć©tait vĆŖtue de toile, et avait mis toute sa soie, tous ses chiffons, tous ses rubans et toutes ses dentelles sur sa fille, seule vanitĆ© qui lui restĆ¢t, et sainte celle-lĆ . Elle vendit tout ce qu'elle avait, ce qui lui produisit deux cents francs; ses petites dettes payĆ©es, elle n'eut plus que quatre-vingts francs environ. ƀ vingt-deux ans, par une belle matinĆ©e de printemps, elle quittait Paris, emportant son enfant sur son dos. Quelqu'un qui les eĆ»t vues passer toutes les deux eĆ»t pitiĆ©. Cette femme n'avait au monde que cet enfant, et cet enfant n'avait au monde que cette femme. Fantine avait nourri sa fille; cela lui avait fatiguĆ© la poitrine, et elle toussait un peu. Nous n'aurons plus occasion de parler de M. FĆ©lix TholomyĆØs. Bornons-nous Ć  dire que, vingt ans plus tard, sous le roi Louis-Philippe, c'Ć©tait un gros avouĆ© de province, influent et riche, Ć©lecteur sage et jurĆ© trĆØs sĆ©vĆØre; toujours homme de plaisir. Vers le milieu du jour, aprĆØs avoir, pour se reposer, cheminĆ© de temps en temps, moyennant trois ou quatre sous par lieue, dans ce qu'on appelait alors les Petites Voitures des Environs de Paris, Fantine se trouvait Ć  Montfermeil, dans la ruelle du Boulanger. Comme elle passait devant l'auberge ThĆ©nardier, les deux petites filles, enchantĆ©es sur leur escarpolette monstre, avaient Ć©tĆ© pour elle une sorte d'Ć©blouissement, et elle s'Ć©tait arrĆŖtĆ©e devant cette vision de joie. Il y a des charmes. Ces deux petites filles en furent un pour cette mĆØre. Elle les considĆ©rait, toute Ć©mue. La prĆ©sence des anges est une annonce de paradis. Elle crut voir au dessus de cette auberge le mystĆ©rieux ICI de la providence. Ces deux petites Ć©taient si Ć©videmment heureuses! Elle les regardait, elle les admirait, tellement attendrie qu'au moment où la mĆØre reprenait haleine entre deux vers de sa chanson, elle ne put s'empĆŖcher de lui dire ce mot qu'on vient de lire: --Vous avez lĆ  deux jolis enfants, madame. Les crĆ©atures les plus fĆ©roces sont dĆ©sarmĆ©es par la caresse Ć  leurs petits. La mĆØre leva la tĆŖte et remercia, et fit asseoir la passante sur le banc de la porte, elle-mĆŖme Ć©tant sur le seuil. Les deux femmes causĆØrent. --Je m'appelle madame ThĆ©nardier, dit la mĆØre des deux petites. Nous tenons cette auberge. Puis, toujours Ć  sa romance, elle reprit entre ses dents: _Il le faut, je suis chevalier,_ _Et je pars pour la Palestine._ Cette madame ThĆ©nardier Ć©tait une femme rousse, charnue, anguleuse; le type femme-Ć -soldat dans toute sa disgrĆ¢ce. Et, chose bizarre, avec un air penchĆ© qu'elle devait Ć  des lectures romanesques. C'Ć©tait une minaudiĆØre hommasse. De vieux romans qui se sont Ć©raillĆ©s sur des imaginations de gargotiĆØres ont de ces effets-lĆ . Elle Ć©tait jeune encore; elle avait Ć  peine trente ans. Si cette femme, qui Ć©tait accroupie, se fĆ»t tenue droite, peut-ĆŖtre sa haute taille et sa carrure de colosse ambulant propre aux foires, eussent-elles dĆØs l'abord effarouchĆ© la voyageuse, troublĆ© sa confiance, et fait Ć©vanouir ce que nous avons Ć  raconter. Une personne qui est assise au lieu d'ĆŖtre debout, les destinĆ©es tiennent Ć  cela. La voyageuse raconta son histoire, un peu modifiĆ©e: Qu'elle Ć©tait ouvriĆØre; que son mari Ć©tait mort; que le travail lui manquait Ć  Paris, et qu'elle allait en chercher ailleurs; dans son pays; qu'elle avait quittĆ© Paris, le matin mĆŖme, Ć  pied; que, comme elle portait son enfant, se sentant fatiguĆ©e, et ayant rencontrĆ© la voiture de Villemomble, elle y Ć©tait montĆ©e; que de Villemomble elle Ć©tait venue Ć  Montfermeil Ć  pied, que la petite avait un peu marchĆ©, mais pas beaucoup, c'est si jeune, et qu'il avait fallu la prendre, et que le bijou s'Ć©tait endormi. Et sur ce mot elle donna Ć  sa fille un baiser passionnĆ© qui la rĆ©veilla. L'enfant ouvrit les yeux, de grands yeux bleus comme ceux de sa mĆØre, et regarda, quoi? rien, tout, avec cet air sĆ©rieux et quelquefois sĆ©vĆØre des petits enfants, qui est un mystĆØre de leur lumineuse innocence devant nos crĆ©puscules de vertus. On dirait qu'ils se sentent anges et qu'ils nous savent hommes. Puis l'enfant se mit Ć  rire, et, quoique la mĆØre la retint, glissa Ć  terre avec l'indomptable Ć©nergie d'un petit ĆŖtre qui veut courir. Tout Ć  coup elle aperƧut les deux autres sur leur balanƧoire, s'arrĆŖta court, et tira la langue, signe d'admiration. La mĆØre ThĆ©nardier dĆ©tacha ses filles, les fit descendre de l'escarpolette, et dit: --Amusez-vous toutes les trois. Ces Ć¢ges-lĆ  s'apprivoisent vite, et au bout d'une minute les petites ThĆ©nardier jouaient avec la nouvelle venue Ć  faire des trous dans la terre, plaisir immense. Cette nouvelle venue Ć©tait trĆØs gaie; la bontĆ© de la mĆØre est Ć©crite dans la gaĆ®tĆ© du marmot; elle avait pris un brin de bois qui lui servait de pelle, et elle creusait Ć©nergiquement une fosse bonne pour une mouche. Ce que fait le fossoyeur devient riant, fait par l'enfant. Les deux femmes continuaient de causer. --Comment s'appelle votre mioche? --Cosette. Cosette, lisez Euphrasie. La petite se nommait Euphrasie. Mais d'Euphrasie la mĆØre avait fait Cosette, par ce doux et gracieux instinct des mĆØres et du peuple qui change Josefa en Pepita et FranƧoise en Sillette. C'est lĆ  un genre de dĆ©rivĆ©s qui dĆ©range et dĆ©concerte toute la science des Ć©tymologistes. Nous avons connu une grand'mĆØre qui avait rĆ©ussi Ć  faire de ThĆ©odore, Gnon. --Quel Ć¢ge a-t-elle? --Elle va sur trois ans. --C'est comme mon aĆ®nĆ©e. Cependant les trois petites filles Ć©taient groupĆ©es dans une posture d'anxiĆ©tĆ© profonde et de bĆ©atitude; un Ć©vĆ©nement avait lieu; un gros ver venait de sortir de terre; et elles avaient peur, et elles Ć©taient en extase. Leurs fronts radieux se touchaient; on eĆ»t dit trois tĆŖtes dans une aurĆ©ole. --Les enfants, s'Ć©cria la mĆØre ThĆ©nardier, comme Ƨa se connaĆ®t tout de suite! les voilĆ  qu'on jurerait trois soeurs! Ce mot fut l'Ć©tincelle qu'attendait probablement l'autre mĆØre. Elle saisit la main de la ThĆ©nardier, la regarda fixement, et lui dit: --Voulez-vous me garder mon enfant? La ThĆ©nardier eut un de ces mouvements surpris qui ne sont ni le consentement ni le refus. La mĆØre de Cosette poursuivit: --Voyez-vous, je ne peux pas emmener ma fille au pays. L'ouvrage ne le permet pas. Avec un enfant, on ne trouve pas Ć  se placer. Ils sont si ridicules dans ce pays-lĆ . C'est le bon Dieu qui m'a fait passer devant votre auberge. Quand j'ai vu vos petites si jolies et si propres et si contentes, cela m'a bouleversĆ©e. J'ai dit: voilĆ  une bonne mĆØre. C'est Ƨa; Ƨa fera trois soeurs. Et puis, je ne serai pas longtemps Ć  revenir. Voulez-vous me garder mon enfant? --Il faudrait voir, dit la ThĆ©nardier. --Je donnerais six francs par mois. Ici une voix d'homme cria du fond de la gargote: --Pas Ć  moins de sept francs. Et six mois payĆ©s d'avance. --Six fois sept quarante-deux, dit la ThĆ©nardier. --Je les donnerai, dit la mĆØre. --Et quinze francs en dehors pour les premiers frais, ajouta la voix d'homme. --Total cinquante-sept francs, dit la madame ThĆ©nardier. Et Ć  travers ces chiffres, elle chantonnait vaguement: _Il le faut, disait un guerrier._ --Je les donnerai, dit la mĆØre, j'ai quatre-vingts francs. Il me restera de quoi aller au pays. En allant Ć  pied. Je gagnerai de l'argent lĆ -bas, et dĆØs que j'en aurai un peu, je reviendrai chercher l'amour. La voix d'homme reprit: --La petite a un trousseau? --C'est mon mari, dit la ThĆ©nardier. --Sans doute elle a un trousseau, le pauvre trĆ©sor. J'ai bien vu que c'Ć©tait votre mari. Et un beau trousseau encore! un trousseau insensĆ©. Tout par douzaines; et des robes de soie comme une dame. Il est lĆ  dans mon sac de nuit. --Il faudra le donner, repartit la voix d'homme. --Je crois bien que je le donnerai! dit la mĆØre. Ce serait cela qui serait drĆ“le si je laissais ma fille toute nue! La face du maĆ®tre apparut. --C'est bon, dit-il. Le marchĆ© fut conclu. La mĆØre passa la nuit Ć  l'auberge, donna son argent et laissa son enfant, renoua son sac de nuit dĆ©gonflĆ© du trousseau et lĆ©ger dĆ©sormais, et partit le lendemain matin, comptant revenir bientĆ“t. On arrange tranquillement ces dĆ©parts-lĆ , mais ce sont des dĆ©sespoirs. Une voisine des ThĆ©nardier rencontra cette mĆØre comme elle s'en allait, et s'en revint en disant: --Je viens de voir une femme qui pleure dans la rue, que c'est un dĆ©chirement. Quand la mĆØre de Cosette fut partie, l'homme dit Ć  la femme: --Cela va me payer mon effet de cent dix francs qui Ć©choit demain. Il me manquait cinquante francs. Sais-tu que j'aurais eu l'huissier et un protĆŖt? Tu as fait lĆ  une bonne souriciĆØre avec tes petites. --Sans m'en douter, dit la femme. Chapitre II PremiĆØre esquisse de deux figures louches La souris prise Ć©tait bien chĆ©tive; mais le chat se rĆ©jouit mĆŖme d'une souris maigre. Qu'Ć©tait-ce que les ThĆ©nardier? Disons-en un mot dĆØs Ć  prĆ©sent. Nous complĆ©terons le croquis plus tard. Ces ĆŖtres appartenaient Ć  cette classe bĆ¢tarde composĆ©e de gens grossiers parvenus et de gens intelligents dĆ©chus, qui est entre la classe dite moyenne et la classe dite infĆ©rieure, et qui combine quelques-uns des dĆ©fauts de la seconde avec presque tous les vices de la premiĆØre, sans avoir le gĆ©nĆ©reux Ć©lan de l'ouvrier ni l'ordre honnĆŖte du bourgeois. C'Ć©taient de ces natures naines qui, si quelque feu sombre les chauffe par hasard, deviennent facilement monstrueuses. Il y avait dans la femme le fond d'une brute et dans l'homme l'Ć©toffe d'un gueux. Tous deux Ć©taient au plus haut degrĆ© susceptibles de l'espĆØce de hideux progrĆØs qui se fait dans le sens du mal. Il existe des Ć¢mes Ć©crevisses reculant continuellement vers les tĆ©nĆØbres, rĆ©trogradant dans la vie plutĆ“t qu'elles n'y avancent, employant l'expĆ©rience Ć  augmenter leur difformitĆ©, empirant sans cesse, et s'empreignant de plus en plus d'une noirceur croissante. Cet homme et cette femme Ć©taient de ces Ć¢mes-lĆ . Le ThĆ©nardier particuliĆØrement Ć©tait gĆŖnant pour le physionomiste. On n'a qu'Ć  regarder certains hommes pour s'en dĆ©fier, on les sent tĆ©nĆ©breux Ć  leurs deux extrĆ©mitĆ©s. Ils sont inquiets derriĆØre eux et menaƧants devant eux. Il y a en eux de l'inconnu. On ne peut pas plus rĆ©pondre de ce qu'ils ont fait que de ce qu'ils feront. L'ombre qu'ils ont dans le regard les dĆ©nonce. Rien qu'en les entendant dire un mot ou qu'en les voyant faire un geste on entrevoit de sombres secrets dans leur passĆ© et de sombres mystĆØres dans leur avenir. Ce ThĆ©nardier, s'il fallait l'en croire, avait Ć©tĆ© soldat; sergent, disait-il; il avait fait probablement la campagne de 1815, et s'Ć©tait mĆŖme comportĆ© assez bravement, Ć  ce qu'il paraĆ®t. Nous verrons plus tard ce qu'il en Ć©tait. L'enseigne de son cabaret Ć©tait une allusion Ć  l'un de ses faits d'armes. Il l'avait peinte lui-mĆŖme, car il savait faire un peu de tout; mal. C'Ć©tait l'Ć©poque où l'antique roman classique, qui, aprĆØs avoir Ć©tĆ© _ClĆ©lie_, n'Ć©tait plus que _LodoĆÆska_, toujours noble, mais de plus en plus vulgaire, tombĆ© de mademoiselle de ScudĆ©ri Ć  madame BarthĆ©lemy-Hadot, et de madame de Lafayette Ć  madame Bournon-Malarme, incendiait l'Ć¢me aimante des portiĆØres de Paris et ravageait mĆŖme un peu la banlieue. Madame ThĆ©nardier Ć©tait juste assez intelligente pour lire ces espĆØces de livres. Elle s'en nourrissait. Elle y noyait ce qu'elle avait de cervelle; cela lui avait donnĆ©, tant qu'elle avait Ć©tĆ© trĆØs jeune, et mĆŖme un peu plus tard, une sorte d'attitude pensive prĆØs de son mari, coquin d'une certaine profondeur, ruffian lettrĆ© Ć  la grammaire prĆØs, grossier et fin en mĆŖme temps, mais, en fait de sentimentalisme, lisant Pigault-Lebrun, et pour Ā«tout ce qui touche le sexeĀ», comme il disait dans son jargon, butor correct et sans mĆ©lange. Sa femme avait quelque douze ou quinze ans de moins que lui. Plus tard, quand les cheveux romanesquement pleureurs commencĆØrent Ć  grisonner, quand la MĆ©gĆØre se dĆ©gagea de la PamĆ©la, la ThĆ©nardier ne fut plus qu'une grosse mĆ©chante femme ayant savourĆ© des romans bĆŖtes. Or on ne lit pas impunĆ©ment des niaiseries. Il en rĆ©sulta que sa fille aĆ®nĆ©e se nomma Eponine. Quant Ć  la cadette, la pauvre petite faillit se nommer Gulnare; elle dut Ć  je ne sais quelle heureuse diversion faite par un roman de Ducray-Duminil, de ne s'appeler qu'Azelma. Au reste, pour le dire en passant, tout n'est pas ridicule et superficiel dans cette curieuse Ć©poque Ć  laquelle nous faisons ici allusion, et qu'on pourrait appeler l'anarchie des noms de baptĆŖme. ƀ cĆ“tĆ© de l'Ć©lĆ©ment romanesque, que nous venons d'indiquer, il y a le symptĆ“me social. Il n'est pas rare aujourd'hui que le garƧon bouvier se nomme Arthur, Alfred ou Alphonse, et que le vicomte--s'il y a encore des vicomtes--se nomme Thomas, Pierre ou Jacques. Ce dĆ©placement qui met le nom «élĆ©gantĀ» sur le plĆ©bĆ©ien et le nom campagnard sur l'aristocrate n'est autre chose qu'un remous d'Ć©galitĆ©. L'irrĆ©sistible pĆ©nĆ©tration du souffle nouveau est lĆ  comme en tout. Sous cette discordance apparente, il y a une chose grande et profonde: la rĆ©volution franƧaise. Chapitre III L'Alouette Il ne suffit pas d'ĆŖtre mĆ©chant pour prospĆ©rer. La gargote allait mal. GrĆ¢ce aux cinquante-sept francs de la voyageuse, ThĆ©nardier avait pu Ć©viter un protĆŖt et faire honneur Ć  sa signature. Le mois suivant ils eurent encore besoin d'argent; la femme porta Ć  Paris et engagea au Mont-de-PiĆ©tĆ© le trousseau de Cosette pour une somme de soixante francs. DĆØs que cette somme fut dĆ©pensĆ©e, les ThĆ©nardier s'accoutumĆØrent Ć  ne plus voir dans la petite fille qu'un enfant qu'ils avaient chez eux par charitĆ©, et la traitĆØrent en consĆ©quence. Comme elle n'avait plus de trousseau, on l'habilla des vieilles jupes et des vieilles chemises des petites ThĆ©nardier, c'est-Ć -dire de haillons. On la nourrit des restes de tout le monde, un peu mieux que le chien et un peu plus mal que le chat. Le chat et le chien Ć©taient du reste ses commensaux habituels; Cosette mangeait avec eux sous la table dans une Ć©cuelle de bois pareille Ć  la leur. La mĆØre qui s'Ć©tait fixĆ©e, comme on le verra plus tard, Ć  Montreuil-sur-mer, Ć©crivait, ou, pour mieux dire, faisait Ć©crire tous les mois afin d'avoir des nouvelles de son enfant. Les ThĆ©nardier rĆ©pondaient invariablement: Cosette est Ć  merveille. Les six premiers mois rĆ©volus, la mĆØre envoya sept francs pour le septiĆØme mois, et continua assez exactement ses envois de mois en mois. L'annĆ©e n'Ć©tait pas finie que le ThĆ©nardier dit: --Une belle grĆ¢ce qu'elle nous fait lĆ ! que veut-elle que nous fassions avec ses sept francs? Et il Ć©crivit pour exiger douze francs. La mĆØre, Ć  laquelle ils persuadaient que son enfant Ć©tait heureuse "et venait bien", se soumit et envoya les douze francs. Certaines natures ne peuvent aimer d'un cĆ“tĆ© sans haĆÆr de l'autre. La mĆØre ThĆ©nardier aimait passionnĆ©ment ses deux filles Ć  elle, ce qui fit qu'elle dĆ©testa l'Ć©trangĆØre. Il est triste de songer que l'amour d'une mĆØre peut avoir de vilains aspects. Si peu de place que Cosette tĆ®nt chez elle, il lui semblait que cela Ć©tait pris aux siens, et que cette petite diminuait l'air que ses filles respiraient. Cette femme, comme beaucoup de femmes de sa sorte, avait une somme de caresses et une somme de coups et d'injures Ć  dĆ©penser chaque jour. Si elle n'avait pas eu Cosette, il est certain que ses filles, tout idolĆ¢trĆ©es qu'elles Ć©taient, auraient tout reƧu; mais l'Ć©trangĆØre leur rendit le service de dĆ©tourner les coups sur elle. Ses filles n'eurent que les caresses. Cosette ne faisait pas un mouvement qui ne fĆ®t pleuvoir sur sa tĆŖte une grĆŖle de chĆ¢timents violents et immĆ©ritĆ©s. Doux ĆŖtre faible qui ne devait rien comprendre Ć  ce monde ni Ć  Dieu, sans cesse punie, grondĆ©e, rudoyĆ©e, battue et voyant Ć  cĆ“tĆ© d'elle deux petites crĆ©atures comme elle, qui vivaient dans un rayon d'aurore! La ThĆ©nardier Ć©tant mĆ©chante pour Cosette, Ɖponine et Azelma furent mĆ©chantes. Les enfants, Ć  cet Ć¢ge, ne sont que des exemplaires de la mĆØre. Le format est plus petit, voilĆ  tout. Une annĆ©e s'Ć©coula, puis une autre. On disait dans le village: --Ces ThĆ©nardier sont de braves gens. Ils ne sont pas riches, et ils Ć©lĆØvent un pauvre enfant qu'on leur a abandonnĆ© chez eux! On croyait Cosette oubliĆ©e par sa mĆØre. Cependant le ThĆ©nardier, ayant appris par on ne sait quelles voies obscures que l'enfant Ć©tait probablement bĆ¢tard et que la mĆØre ne pouvait l'avouer, exigea quinze francs par mois, disant que Ā«la crĆ©atureĀ» grandissait et Ā«_mangeait_Ā», et menaƧant de la renvoyer. Ā«Quelle ne m'embĆŖte pas! s'Ć©criait-il, je lui bombarde son mioche tout au beau milieu de ses cachotteries. Il me faut de l'augmentation.Ā» La mĆØre paya les quinze francs. D'annĆ©e en annĆ©e, l'enfant grandit, et sa misĆØre aussi. Tant que Cosette fut toute petite, elle fut le souffre-douleur des deux autres enfants; dĆØs qu'elle se mit Ć  se dĆ©velopper un peu, c'est-Ć -dire avant mĆŖme qu'elle eĆ»t cinq ans, elle devint la servante de la maison. Cinq ans, dira-t-on, c'est invraisemblable. HĆ©las, c'est vrai. La souffrance sociale commence Ć  tout Ć¢ge. N'avons-nous pas vu, rĆ©cemment, le procĆØs d'un nommĆ© Dumolard, orphelin devenu bandit, qui, dĆØs l'Ć¢ge de cinq ans, disent les documents officiels, Ć©tant seul au monde Ā«travaillait pour vivre, et volait.Ā» On fit faire Ć  Cosette les commissions, balayer les chambres, la cour, la rue, laver la vaisselle, porter mĆŖme des fardeaux. Les ThĆ©nardier se crurent d'autant plus autorisĆ©s Ć  agir ainsi que la mĆØre qui Ć©tait toujours Ć  Montreuil-sur-mer commenƧa Ć  mal payer. Quelques mois restĆØrent en souffrance. Si cette mĆØre fĆ»t revenue Ć  Montfermeil au bout de ces trois annĆ©es, elle n'eĆ»t point reconnu son enfant. Cosette, si jolie et si fraĆ®che Ć  son arrivĆ©e dans cette maison, Ć©tait maintenant maigre et blĆŖme. Elle avait je ne sais quelle allure inquiĆØte. Sournoise! disaient les ThĆ©nardier. L'injustice l'avait faite hargneuse et la misĆØre l'avait rendue laide. Il ne lui restait plus que ses beaux yeux qui faisaient peine, parce que, grands comme ils Ć©taient, il semblait qu'on y vĆ®t une plus grande quantitĆ© de tristesse. C'Ć©tait une chose navrante de voir, l'hiver, ce pauvre enfant, qui n'avait pas encore six ans, grelottant sous de vieilles loques de toile trouĆ©es, balayer la rue avant le jour avec un Ć©norme balai dans ses petites mains rouges et une larme dans ses grands yeux. Dans le pays on l'appelait l'Alouette. Le peuple, qui aime les figures, s'Ć©tait plu Ć  nommer de ce nom ce petit ĆŖtre pas plus gros qu'un oiseau, tremblant, effarouchĆ© et frissonnant, Ć©veillĆ© le premier chaque matin dans la maison et dans le village, toujours dans la rue ou dans les champs avant l'aube. Seulement la pauvre Alouette ne chantait jamais. Livre cinquiĆØme--La descente Chapitre I Histoire d'un progrĆØs dans les verroteries noires Cette mĆØre cependant qui, au dire des gens de Montfermeil, semblait avoir abandonnĆ© son enfant, que devenait-elle? où Ć©tait-elle? que faisait-elle? AprĆØs avoir laissĆ© sa petite Cosette aux ThĆ©nardier, elle avait continuĆ© son chemin et Ć©tait arrivĆ©e Ć  Montreuil-sur-mer. C'Ć©tait, on se le rappelle, en 1818. Fantine avait quittĆ© sa province depuis une dizaine d'annĆ©es. Montreuil-sur-mer avait changĆ© d'aspect. Tandis que Fantine descendait lentement de misĆØre en misĆØre, sa ville natale avait prospĆ©rĆ©. Depuis deux ans environ, il s'y Ć©tait accompli un de ces faits industriels qui sont les grands Ć©vĆ©nements des petits pays. Ce dĆ©tail importe, et nous croyons utile de le dĆ©velopper; nous dirions presque, de le souligner. De temps immĆ©morial, Montreuil-sur-mer avait pour industrie spĆ©ciale l'imitation des jais anglais et des verroteries noires d'Allemagne. Cette industrie avait toujours vĆ©gĆ©tĆ©, Ć  cause de la chertĆ© des matiĆØres premiĆØres qui rĆ©agissait sur la main-d'oeuvre. Au moment où Fantine revint Ć  Montreuil-sur-mer, une transformation inouĆÆe s'Ć©tait opĆ©rĆ©e dans cette production des Ā«articles noirsĀ». Vers la fin de 1815, un homme, un inconnu, Ć©tait venu s'Ć©tablir dans la ville et avait eu l'idĆ©e de substituer, dans cette fabrication, la gomme laque Ć  la rĆ©sine et, pour les bracelets en particulier, les coulants en tĆ“le simplement rapprochĆ©e aux coulants en tĆ“le soudĆ©e. Ce tout petit changement avait Ć©tĆ© une rĆ©volution. Ce tout petit changement en effet avait prodigieusement rĆ©duit le prix de la matiĆØre premiĆØre, ce qui avait permis, premiĆØrement, d'Ć©lever le prix de la main-d'oeuvre, bienfait pour le pays; deuxiĆØmement, d'amĆ©liorer la fabrication, avantage pour le consommateur; troisiĆØmement, de vendre Ć  meilleur marchĆ© tout en triplant le bĆ©nĆ©fice, profit pour le manufacturier. Ainsi pour une idĆ©e trois rĆ©sultats. En moins de trois ans, l'auteur de ce procĆ©dĆ© Ć©tait devenu riche, ce qui est bien, et avait tout fait riche autour de lui, ce qui est mieux. Il Ć©tait Ć©tranger au dĆ©partement. De son origine, on ne savait rien; de ses commencements, peu de chose. On contait qu'il Ć©tait venu dans la ville avec fort peu d'argent, quelques centaines de francs tout au plus. C'est de ce mince capital, mis au service d'une idĆ©e ingĆ©nieuse, fĆ©condĆ© par l'ordre et par la pensĆ©e, qu'il avait tirĆ© sa fortune et la fortune de tout ce pays. ƀ son arrivĆ©e Ć  Montreuil-sur-mer, il n'avait que les vĆŖtements, la tournure et le langage d'un ouvrier. Il paraĆ®t que, le jour mĆŖme où il faisait obscurĆ©ment son entrĆ©e dans la petite ville de Montreuil-sur-mer, Ć  la tombĆ©e d'un soir de dĆ©cembre, le sac au dos et le bĆ¢ton d'Ć©pine Ć  la main, un gros incendie venait d'Ć©clater Ć  la maison commune. Cet homme s'Ć©tait jetĆ© dans le feu, et avait sauvĆ©, au pĆ©ril de sa vie, deux enfants qui se trouvaient ĆŖtre ceux du capitaine de gendarmerie; ce qui fait qu'on n'avait pas songĆ© Ć  lui demander son passeport. Depuis lors, on avait su son nom. Il s'appelait le _pĆØre Madeleine_. Chapitre II M. Madeleine C'Ć©tait un homme d'environ cinquante ans, qui avait l'air prĆ©occupĆ© et qui Ć©tait bon. VoilĆ  tout ce qu'on en pouvait dire. GrĆ¢ce aux progrĆØs rapides de cette industrie qu'il avait si admirablement remaniĆ©e, Montreuil-sur-mer Ć©tait devenu un centre d'affaires considĆ©rable. L'Espagne, qui consomme beaucoup de jais noir, y commandait chaque annĆ©e des achats immenses. Montreuil-sur-mer, pour ce commerce, faisait presque concurrence Ć  Londres et Ć  Berlin. Les bĆ©nĆ©fices du pĆØre Madeleine Ć©taient tels que, dĆØs la deuxiĆØme annĆ©e, il avait pu bĆ¢tir une grande fabrique dans laquelle il y avait deux vastes ateliers, l'un pour les hommes, l'autre pour les femmes. Quiconque avait faim pouvait s'y prĆ©senter, et Ć©tait sĆ»r de trouver lĆ  de l'emploi et du pain. Le pĆØre Madeleine demandait aux hommes de la bonne volontĆ©, aux femmes des moeurs pures, Ć  tous de la probitĆ©. Il avait divisĆ© les ateliers afin de sĆ©parer les sexes et que les filles et les femmes pussent rester sages. Sur ce point, il Ć©tait inflexible. C'Ć©tait le seul où il fĆ»t en quelque sorte intolĆ©rant. Il Ć©tait d'autant plus fondĆ© Ć  cette sĆ©vĆ©ritĆ© que, Montreuil-sur-mer Ć©tant une ville de garnison, les occasions de corruption abondaient. Du reste sa venue avait Ć©tĆ© un bienfait, et sa prĆ©sence Ć©tait une providence. Avant l'arrivĆ©e du pĆØre Madeleine, tout languissait dans le pays; maintenant tout y vivait de la vie saine du travail. Une forte circulation Ć©chauffait tout et pĆ©nĆ©trait partout. Le chĆ“mage et la misĆØre Ć©taient inconnus. Il n'y avait pas de poche si obscure où il n'y eĆ»t un peu d'argent, pas de logis si pauvre où il n'y eĆ»t un peu de joie. Le pĆØre Madeleine employait tout le monde. Il n'exigeait qu'une chose: soyez honnĆŖte homme! soyez honnĆŖte fille! Comme nous l'avons dit, au milieu de cette activitĆ© dont il Ć©tait la cause et le pivot, le pĆØre Madeleine faisait sa fortune, mais, chose assez singuliĆØre dans un simple homme de commerce, il ne paraissait point que ce fĆ»t lĆ  son principal souci. Il semblait qu'il songeĆ¢t beaucoup aux autres et peu Ć  lui. En 1820, on lui connaissait une somme de six cent trente mille francs placĆ©e Ć  son nom chez Laffitte; mais avant de se rĆ©server ces six cent trente mille francs, il avait dĆ©pensĆ© plus d'un million pour la ville et pour les pauvres. L'hĆ“pital Ć©tait mal dotĆ©; il y avait fondĆ© dix lits. Montreuil-sur-mer est divisĆ© en ville haute et ville basse. La ville basse, qu'il habitait, n'avait qu'une Ć©cole, mĆ©chante masure qui tombait en ruine; il en avait construit deux, une pour les filles, l'autre pour les garƧons. Il allouait de ses deniers aux deux instituteurs une indemnitĆ© double de leur maigre traitement officiel, et un jour, Ć  quelqu'un qui s'en Ć©tonnait, il dit: Ā«Les deux premiers fonctionnaires de l'Ć©tat, c'est la nourrice et le maĆ®tre d'Ć©cole.Ā» Il avait crƩƩ Ć  ses frais une salle d'asile, chose alors presque inconnue en France, et une caisse de secours pour les ouvriers vieux et infirmes. Sa manufacture Ć©tant un centre, un nouveau quartier où il y avait bon nombre de familles indigentes avait rapidement surgi autour de lui; il y avait Ć©tabli une pharmacie gratuite. Dans les premiers temps, quand on le vit commencer, les bonnes Ć¢mes dirent: C'est un gaillard qui veut s'enrichir. Quand on le vit enrichir le pays avant de s'enrichir lui-mĆŖme, les mĆŖmes bonnes Ć¢mes dirent: C'est un ambitieux. Cela semblait d'autant plus probable que cet homme Ć©tait religieux, et mĆŖme pratiquait dans une certaine mesure, chose fort bien vue Ć  cette Ć©poque. Il allait rĆ©guliĆØrement entendre une basse messe tous les dimanches. Le dĆ©putĆ© local, qui flairait partout des concurrences, ne tarda pas Ć  s'inquiĆ©ter de cette religion. Ce dĆ©putĆ©, qui avait Ć©tĆ© membre du corps lĆ©gislatif de l'empire, partageait les idĆ©es religieuses d'un pĆØre de l'oratoire connu sous le nom de FouchĆ©, duc d'Otrante, dont il avait Ć©tĆ© la crĆ©ature et l'ami. ƀ huis clos il riait de Dieu doucement. Mais quand il vit le riche manufacturier Madeleine aller Ć  la basse messe de sept heures, il entrevit un candidat possible, et rĆ©solut de le dĆ©passer; il prit un confesseur jĆ©suite et alla Ć  la grand'messe et Ć  vĆŖpres. L'ambition en ce temps-lĆ  Ć©tait, dans l'acception directe du mot, une course au clocher. Les pauvres profitĆØrent de cette terreur comme le bon Dieu, car l'honorable dĆ©putĆ© fonda aussi deux lits Ć  l'hĆ“pital; ce qui fit douze. Cependant en 1819 le bruit se rĆ©pandit un matin dans la ville que, sur la prĆ©sentation de M. le prĆ©fet, et en considĆ©ration des services rendus au pays, le pĆØre Madeleine allait ĆŖtre nommĆ© par le roi maire de Montreuil-sur-mer. Ceux qui avaient dĆ©clarĆ© ce nouveau venu Ā«un ambitieuxĀ», saisirent avec transport cette occasion que tous les hommes souhaitent de s'Ć©crier: Ā«LĆ ! qu'est-ce que nous avions dit?Ā» Tout Montreuil-sur-mer fut en rumeur. Le bruit Ć©tait fondĆ©. Quelques jours aprĆØs, la nomination parut dans _le Moniteur_. Le lendemain, le pĆØre Madeleine refusa. Dans cette mĆŖme annĆ©e 1819, les produits du nouveau procĆ©dĆ© inventĆ© par Madeleine figurĆØrent Ć  l'exposition de l'industrie; sur le rapport du jury, le roi nomma l'inventeur chevalier de la LĆ©gion d'honneur. Nouvelle rumeur dans la petite ville. Eh bien! c'est la croix qu'il voulait! Le pĆØre Madeleine refusa la croix. DĆ©cidĆ©ment cet homme Ć©tait une Ć©nigme. Les bonnes Ć¢mes se tirĆØrent d'affaire en disant: AprĆØs tout, c'est une espĆØce d'aventurier. On l'a vu, le pays lui devait beaucoup, les pauvres lui devaient tout; il Ć©tait si utile qu'il avait bien fallu qu'on finĆ®t par l'honorer, et il Ć©tait si doux qu'il avait bien fallu qu'on finĆ®t par l'aimer; ses ouvriers en particulier l'adoraient, et il portait cette adoration avec une sorte de gravitĆ© mĆ©lancolique. Quand il fut constatĆ© riche, Ā«les personnes de la sociĆ©té» le saluĆØrent, et on l'appela dans la ville monsieur Madeleine; ses ouvriers et les enfants continuĆØrent de l'appeler _le pĆØre Madeleine_, et c'Ć©tait la chose qui le faisait le mieux sourire. ƀ mesure qu'il montait, les invitations pleuvaient sur lui. Ā«La sociĆ©té» le rĆ©clamait. Les petits salons guindĆ©s de Montreuil-sur-mer qui, bien entendu, se fussent dans les premiers temps fermĆ©s Ć  l'artisan, s'ouvrirent Ć  deux battants au millionnaire. On lui fit mille avances. Il refusa. Cette fois encore les bonnes Ć¢mes ne furent point empĆŖchĆ©es. --C'est un homme ignorant et de basse Ć©ducation. On ne sait d'où cela sort. Il ne saurait pas se tenir dans le monde. Il n'est pas du tout prouvĆ© qu'il sache lire. Quand on l'avait vu gagner de l'argent, on avait dit: c'est un marchand. Quand on l'avait vu semer son argent, on avait dit: c'est un ambitieux. Quand on l'avait vu repousser les honneurs, on avait dit: c'est un aventurier. Quand on le vit repousser le monde, on dit: c'est une brute. En 1820, cinq ans aprĆØs son arrivĆ©e Ć  Montreuil-sur-mer, les services qu'il avait rendus au pays Ć©taient si Ć©clatants, le voeu de la contrĆ©e fut tellement unanime, que le roi le nomma de nouveau maire de la ville. Il refusa encore, mais le prĆ©fet rĆ©sista Ć  son refus, tous les notables vinrent le prier, le peuple en pleine rue le suppliait, l'insistance fut si vive qu'il finit par accepter. On remarqua que ce qui parut surtout le dĆ©terminer, ce fut l'apostrophe presque irritĆ©e d'une vieille femme du peuple qui lui cria du seuil de sa porte avec humeur: _Un bon maire, c'est utile. Est-ce qu'on recule devant du bien qu'on peut faire?_ Ce fut lĆ  la troisiĆØme phase de son ascension. Le pĆØre Madeleine Ć©tait devenu monsieur Madeleine, monsieur Madeleine devint monsieur le maire. Chapitre III Sommes dĆ©posĆ©es chez Laffitte Du reste, il Ć©tait demeurĆ© aussi simple que le premier jour. Il avait les cheveux gris, l'oeil sĆ©rieux, le teint hĆ¢lĆ© d'un ouvrier, le visage pensif d'un philosophe. Il portait habituellement un chapeau Ć  bords larges et une longue redingote de gros drap, boutonnĆ©e jusqu'au menton. Il remplissait ses fonctions de maire, mais hors de lĆ  il vivait solitaire. Il parlait Ć  peu de monde. Il se dĆ©robait aux politesses, saluait de cĆ“tĆ©, s'esquivait vite, souriait pour se dispenser de causer, donnait pour se dispenser de sourire. Les femmes disaient de lui: Quel bon ours! Son plaisir Ć©tait de se promener dans les champs. Il prenait ses repas toujours seul, avec un livre ouvert devant lui où il lisait. Il avait une petite bibliothĆØque bien faite. Il aimait les livres; les livres sont des amis froids et sĆ»rs. ƀ mesure que le loisir lui venait avec la fortune, il semblait qu'il en profitĆ¢t pour cultiver son esprit. Depuis qu'il Ć©tait Ć  Montreuil-sur-mer, on remarquait que d'annĆ©e en annĆ©e son langage devenait plus poli, plus choisi et plus doux. Il emportait volontiers un fusil dans ses promenades, mais il s'en servait rarement. Quand cela lui arrivait par aventure, il avait un tir infaillible qui effrayait. Jamais il ne tuait un animal inoffensif. Jamais il ne tirait un petit oiseau. Quoiqu'il ne fĆ»t plus jeune, on contait qu'il Ć©tait d'une force prodigieuse. Il offrait un coup de main Ć  qui en avait besoin, relevait un cheval, poussait Ć  une roue embourbĆ©e, arrĆŖtait par les cornes un taureau Ć©chappĆ©. Il avait toujours ses poches pleines de monnaie en sortant et vides en rentrant. Quand il passait dans un village, les marmots dĆ©guenillĆ©s couraient joyeusement aprĆØs lui et l'entouraient comme une nuĆ©e de moucherons. On croyait deviner qu'il avait dĆ» vivre jadis de la vie des champs, car il avait toutes sortes de secrets utiles qu'il enseignait aux paysans. Il leur apprenait Ć  dĆ©truire la teigne des blĆ©s en aspergeant le grenier et en inondant les fentes du plancher d'une dissolution de sel commun, et Ć  chasser les charanƧons en suspendant partout, aux murs et aux toits, dans les hĆ©berges et dans les maisons, de l'orviot en fleur. Il avait des "recettes" pour extirper d'un champ la luzette, la nielle, la vesce, la gaverolle, la queue-de-renard, toutes les herbes parasites qui mangent le blĆ©. Il dĆ©fendait une lapiniĆØre contre les rats rien qu'avec l'odeur d'un petit cochon de Barbarie qu'il y mettait. Un jour il voyait des gens du pays trĆØs occupĆ©s Ć  arracher des orties. Il regarda ce tas de plantes dĆ©racinĆ©es et dĆ©jĆ  dessĆ©chĆ©es, et dit: --C'est mort. Cela serait pourtant bon si l'on savait s'en servir. Quand l'ortie est jeune, la feuille est un lĆ©gume excellent; quand elle vieillit, elle a des filaments et des fibres comme le chanvre et le lin. La toile d'ortie vaut la toile de chanvre. HachĆ©e, l'ortie est bonne pour la volaille; broyĆ©e, elle est bonne pour les bĆŖtes Ć  cornes. La graine de l'ortie mĆŖlĆ©e au fourrage donne du luisant au poil des animaux; la racine mĆŖlĆ©e au sel produit une belle couleur jaune. C'est du reste un excellent foin qu'on peut faucher deux fois. Et que faut-il Ć  l'ortie? Peu de terre, nul soin, nulle culture. Seulement la graine tombe Ć  mesure qu'elle mĆ»rit, et est difficile Ć  rĆ©colter. VoilĆ  tout. Avec quelque peine qu'on prendrait, l'ortie serait utile; on la nĆ©glige, elle devient nuisible. Alors on la tue. Que d'hommes ressemblent Ć  l'ortie! Il ajouta aprĆØs un silence: --Mes amis, retenez ceci, il n'y a ni mauvaises herbes ni mauvais hommes. Il n'y a que de mauvais cultivateurs. Les enfants l'aimaient encore parce qu'il savait faire de charmants petits ouvrages avec de la paille et des noix de coco. Quand il voyait la porte d'une Ć©glise tendue de noir, il entrait; il recherchait un enterrement comme d'autres recherchent un baptĆŖme. Le veuvage et le malheur d'autrui l'attiraient Ć  cause de sa grande douceur; il se mĆŖlait aux amis en deuil, aux familles vĆŖtues de noir, aux prĆŖtres gĆ©missant autour d'un cercueil. Il semblait donner volontiers pour texte Ć  ses pensĆ©es ces psalmodies funĆØbres pleines de la vision d'un autre monde. L'oeil au ciel, il Ć©coutait, avec une sorte d'aspiration vers tous les mystĆØres de l'infini, ces voix tristes qui chantent sur le bord de l'abĆ®me obscur de la mort. Il faisait une foule de bonnes actions en se cachant comme on se cache pour les mauvaises. Il pĆ©nĆ©trait Ć  la dĆ©robĆ©e, le soir, dans les maisons; il montait furtivement des escaliers. Un pauvre diable, en rentrant dans son galetas, trouvait que sa porte avait Ć©tĆ© ouverte, quelquefois mĆŖme forcĆ©e, dans son absence. Le pauvre homme se rĆ©criait: quelque malfaiteur est venu! Il entrait, et la premiĆØre chose qu'il voyait, c'Ć©tait une piĆØce d'or oubliĆ©e sur un meuble. "Le malfaiteur" qui Ć©tait venu, c'Ć©tait le pĆØre Madeleine. Il Ć©tait affable et triste. Le peuple disait: Ā«VoilĆ  un homme riche qui n'a pas l'air fier. VoilĆ  un homme heureux qui n'a pas l'air content.Ā» Quelques-uns prĆ©tendaient que c'Ć©tait un personnage mystĆ©rieux, et affirmaient qu'on n'entrait jamais dans sa chambre, laquelle Ć©tait une vraie cellule d'anachorĆØte meublĆ©e de sabliers ailĆ©s et enjolivĆ©e de tibias en croix et de tĆŖtes de mort. Cela se disait beaucoup, si bien que quelques jeunes femmes Ć©lĆ©gantes et malignes de Montreuil-sur-mer vinrent chez lui un jour, et lui demandĆØrent: --Monsieur le maire, montrez-nous donc votre chambre. On dit que c'est une grotte. Il sourit, et les introduisit sur-le-champ dans cette Ā«grotteĀ». Elles furent bien punies de leur curiositĆ©. C'Ć©tait une chambre garnie tout bonnement de meubles d'acajou assez laids comme tous les meubles de ce genre et tapissĆ©e de papier Ć  douze sous. Elles n'y purent rien remarquer que deux flambeaux de forme vieillie qui Ć©taient sur la cheminĆ©e et qui avaient l'air d'ĆŖtre en argent, Ā«car ils Ć©taient contrĆ“lĆ©sĀ». Observation pleine de l'esprit des petites villes. On n'en continua pas moins de dire que personne ne pĆ©nĆ©trait dans cette chambre et que c'Ć©tait une caverne d'ermite, un rĆŖvoir, un trou, un tombeau. On se chuchotait aussi qu'il avait des sommes Ā«immensesĀ» dĆ©posĆ©es chez Laffitte, avec cette particularitĆ© qu'elles Ć©taient toujours Ć  sa disposition immĆ©diate, de telle sorte, ajoutait-on, que M. Madeleine pourrait arriver un matin chez Laffitte, signer un reƧu et emporter ses deux ou trois millions en dix minutes. Dans la rĆ©alitĆ© ces Ā«deux ou trois millionsĀ» se rĆ©duisaient, nous l'avons dit, Ć  six cent trente ou quarante mille francs. Chapitre IV M. Madeleine en deuil Au commencement de 1821, les journaux annoncĆØrent la mort de M. Myriel, Ć©vĆŖque de Digne, Ā«surnommĆ© _monseigneur Bienvenu_Ā», et trĆ©passĆ© en odeur de saintetĆ© Ć  l'Ć¢ge de quatre-vingt-deux ans. L'Ć©vĆŖque de Digne, pour ajouter ici un dĆ©tail que les journaux omirent, Ć©tait, quand il mourut, depuis plusieurs annĆ©es aveugle, et content d'ĆŖtre aveugle, sa soeur Ć©tant prĆØs de lui. Disons-le en passant, ĆŖtre aveugle et ĆŖtre aimĆ©, c'est en effet, sur cette terre où rien n'est complet, une des formes les plus Ć©trangement exquises du bonheur. Avoir continuellement Ć  ses cĆ“tĆ©s une femme, une fille, une soeur, un ĆŖtre charmant, qui est lĆ  parce que vous avez besoin d'elle et parce qu'elle ne peut se passer de vous, se savoir indispensable Ć  qui nous est nĆ©cessaire, pouvoir incessamment mesurer son affection Ć  la quantitĆ© de prĆ©sence qu'elle nous donne, et se dire: puisqu'elle me consacre tout son temps, c'est que j'ai tout son coeur; voir la pensĆ©e Ć  dĆ©faut de la figure, constater la fidĆ©litĆ© d'un ĆŖtre dans l'Ć©clipse du monde, percevoir le frĆ“lement d'une robe comme un bruit d'ailes, l'entendre aller et venir, sortir, rentrer, parler, chanter, et songer qu'on est le centre de ces pas, de cette parole, de ce chant, manifester Ć  chaque minute sa propre attraction, se sentir d'autant plus puissant qu'on est plus infirme, devenir dans l'obscuritĆ©, et par l'obscuritĆ©, l'astre autour duquel gravite cet ange, peu de fĆ©licitĆ©s Ć©galent celle-lĆ . Le suprĆŖme bonheur de la vie, c'est la conviction qu'on est aimĆ©; aimĆ© pour soi-mĆŖme, disons mieux, aimĆ© malgrĆ© soi-mĆŖme; cette conviction, l'aveugle l'a. Dans cette dĆ©tresse, ĆŖtre servi, c'est ĆŖtre caressĆ©. Lui manque-t-il quelque chose? Non. Ce n'est point perdre la lumiĆØre qu'avoir l'amour. Et quel amour! un amour entiĆØrement fait de vertu. Il n'y a point de cĆ©citĆ© où il y a certitude. L'Ć¢me Ć  tĆ¢tons cherche l'Ć¢me, et la trouve. Et cette Ć¢me trouvĆ©e et prouvĆ©e est une femme. Une main vous soutient, c'est la sienne; une bouche effleure votre front, c'est sa bouche; vous entendez une respiration tout prĆØs de vous, c'est elle. Tout avoir d'elle, depuis son culte jusqu'Ć  sa pitiĆ©, n'ĆŖtre jamais quittĆ©, avoir cette douce faiblesse qui vous secourt, s'appuyer sur ce roseau inĆ©branlable, toucher de ses mains la providence et pouvoir la prendre dans ses bras, Dieu palpable, quel ravissement! Le coeur, cette cĆ©leste fleur obscure, entre dans un Ć©panouissement mystĆ©rieux. On ne donnerait pas cette ombre pour toute la clartĆ©. L'Ć¢me ange est lĆ , sans cesse lĆ ; si elle s'Ć©loigne, c'est pour revenir; elle s'efface comme le rĆŖve et reparaĆ®t comme la rĆ©alitĆ©. On sent de la chaleur qui approche, la voilĆ . On dĆ©borde de sĆ©rĆ©nitĆ©, de gaĆ®tĆ© et d'extase; on est un rayonnement dans la nuit. Et mille petits soins. Des riens qui sont Ć©normes dans ce vide. Les plus ineffables accents de la voix fĆ©minine employĆ©s Ć  vous bercer, et supplĆ©ant pour vous Ć  l'univers Ć©vanoui. On est caressĆ© avec de l'Ć¢me. On ne voit rien, mais on se sent adorĆ©. C'est un paradis de tĆ©nĆØbres. C'est de ce paradis que monseigneur Bienvenu Ć©tait passĆ© Ć  l'autre. L'annonce de sa mort fut reproduite par le journal local de Montreuil-sur-mer. M. Madeleine parut le lendemain tout en noir avec un crĆŖpe Ć  son chapeau. On remarqua dans la ville ce deuil, et l'on jasa. Cela parut une lueur sur l'origine de M. Madeleine. On en conclut qu'il avait quelque alliance avec le vĆ©nĆ©rable Ć©vĆŖque. _Il drape pour l'Ć©vĆŖque de Digne_, dirent les salons; cela rehaussa fort M. Madeleine, et lui donna subitement et d'emblĆ©e une certaine considĆ©ration dans le monde noble de Montreuil-sur-mer. Le microscopique faubourg Saint-Germain de l'endroit songea Ć  faire cesser la quarantaine de M. Madeleine, parent probable d'un Ć©vĆŖque. M. Madeleine s'aperƧut de l'avancement qu'il obtenait Ć  plus de rĆ©vĆ©rences des vieilles femmes et Ć  plus de sourires des jeunes. Un soir, une doyenne de ce petit grand monde-lĆ , curieuse par droit d'anciennetĆ©, se hasarda Ć  lui demander: --Monsieur le maire est sans doute cousin du feu Ć©vĆŖque de Digne? Il dit: --Non, madame. --Mais, reprit la douairiĆØre, vous en portez le deuil? Il rĆ©pondit: --C'est que dans ma jeunesse j'ai Ć©tĆ© laquais dans sa famille. Une remarque qu'on faisait encore, c'est que, chaque fois qu'il passait dans la ville un jeune savoyard courant le pays et cherchant des cheminĆ©es Ć  ramoner, M. le maire le faisait appeler, lui demandait son nom, et lui donnait de l'argent. Les petits savoyards se le disaient, et il en passait beaucoup. Chapitre V Vagues Ć©clairs Ć  l'horizon Peu Ć  peu, et avec le temps, toutes les oppositions Ć©taient tombĆ©es. Il y avait eu d'abord contre M. Madeleine, sorte de loi que subissent toujours ceux qui s'Ć©lĆØvent, des noirceurs et des calomnies, puis ce ne fut plus que des mĆ©chancetĆ©s, puis ce ne fut que des malices, puis cela s'Ć©vanouit tout Ć  fait; le respect devint complet, unanime, cordial, et il arriva un moment, vers 1821, où ce mot: monsieur le maire, fut prononcĆ© Ć  Montreuil-sur-mer presque du mĆŖme accent que ce mot: monseigneur l'Ć©vĆŖque, Ć©tait prononcĆ© Ć  Digne en 1815. On venait de dix lieues Ć  la ronde consulter M. Madeleine. Il terminait les diffĆ©rends, il empĆŖchait les procĆØs, il rĆ©conciliait les ennemis. Chacun le prenait pour juge de son bon droit. Il semblait qu'il eĆ»t pour Ć¢me le livre de la loi naturelle. Ce fut comme une contagion de vĆ©nĆ©ration qui, en six ou sept ans et de proche en proche, gagna tout le pays. Un seul homme, dans la ville et dans l'arrondissement, se dĆ©roba absolument Ć  cette contagion, et, quoi que fĆ®t le pĆØre Madeleine, y demeura rebelle, comme si une sorte d'instinct, incorruptible et imperturbable, l'Ć©veillait et l'inquiĆ©tait. Il semblerait en effet qu'il existe dans certains hommes un vĆ©ritable instinct bestial, pur et intĆØgre comme tout instinct, qui crĆ©e les antipathies et les sympathies, qui sĆ©pare fatalement une nature d'une autre nature, qui n'hĆ©site pas, qui ne se trouble, ne se tait et ne se dĆ©ment jamais, clair dans son obscuritĆ©, infaillible, impĆ©rieux, rĆ©fractaire Ć  tous les conseils de l'intelligence et Ć  tous les dissolvants de la raison, et qui, de quelque faƧon que les destinĆ©es soient faites, avertit secrĆØtement l'homme-chien de la prĆ©sence de l'homme-chat, et l'homme-renard de la prĆ©sence de l'homme-lion. Souvent, quand M. Madeleine passait dans une rue, calme, affectueux, entourĆ© des bĆ©nĆ©dictions de tous, il arrivait qu'un homme de haute taille, vĆŖtu d'une redingote gris de fer, armĆ© d'une grosse canne et coiffĆ© d'un chapeau rabattu, se retournait brusquement derriĆØre lui, et le suivait des yeux jusqu'Ć  ce qu'il eĆ»t disparu, croisant les bras, secouant lentement la tĆŖte, et haussant sa lĆØvre supĆ©rieure avec sa lĆØvre infĆ©rieure jusqu'Ć  son nez, sorte de grimace significative qui pourrait se traduire par: Ā«Mais qu'est-ce que c'est que cet homme-lĆ ?--Pour sĆ»r je l'ai vu quelque part.--En tout cas, je ne suis toujours pas sa dupe.Ā» Ce personnage, grave d'une gravitĆ© presque menaƧante, Ć©tait de ceux qui, mĆŖme rapidement entrevus, prĆ©occupent l'observateur. Il se nommait Javert, et il Ć©tait de la police. Il remplissait Ć  Montreuil-sur-mer les fonctions pĆ©nibles, mais utiles, d'inspecteur. Il n'avait pas vu les commencements de Madeleine. Javert devait le poste qu'il occupait Ć  la protection de M. Chabouillet, le secrĆ©taire du ministre d'Ɖtat, comte AnglĆØs, alors prĆ©fet de police Ć  Paris. Quand Javert Ć©tait arrivĆ© Ć  Montreuil-sur-mer, la fortune du grand manufacturier Ć©tait dĆ©jĆ  faite, et le pĆØre Madeleine Ć©tait devenu monsieur Madeleine. Certains officiers de police ont une physionomie Ć  part et qui se complique d'un air de bassesse mĆŖlĆ© Ć  un air d'autoritĆ©. Javert avait cette physionomie, moins la bassesse. Dans notre conviction, si les Ć¢mes Ć©taient visibles aux yeux, on verrait distinctement cette chose Ć©trange que chacun des individus de l'espĆØce humaine correspond Ć  quelqu'une des espĆØces de la crĆ©ation animale; et l'on pourrait reconnaĆ®tre aisĆ©ment cette vĆ©ritĆ© Ć  peine entrevue par le penseur, que, depuis l'huĆ®tre jusqu'Ć  l'aigle, depuis le porc jusqu'au tigre, tous les animaux sont dans l'homme et que chacun d'eux est dans un homme. Quelquefois mĆŖme plusieurs d'entre eux Ć  la fois. Les animaux ne sont autre chose que les figures de nos vertus et de nos vices, errantes devant nos yeux, les fantĆ“mes visibles de nos Ć¢mes. Dieu nous les montre pour nous faire rĆ©flĆ©chir. Seulement, comme les animaux ne sont que des ombres, Dieu ne les a point faits Ć©ducables dans le sens complet du mot; Ć  quoi bon? Au contraire, nos Ć¢mes Ć©tant des rĆ©alitĆ©s et ayant une fin qui leur est propre, Dieu leur a donnĆ© l'intelligence, c'est-Ć -dire l'Ć©ducation possible. L'Ć©ducation sociale bien faite peut toujours tirer d'une Ć¢me, quelle qu'elle soit, l'utilitĆ© qu'elle contient. Ceci soit dit, bien entendu, au point de vue restreint de la vie terrestre apparente, et sans prĆ©juger la question profonde de la personnalitĆ© antĆ©rieure et ultĆ©rieure des ĆŖtres qui ne sont pas l'homme. Le moi visible n'autorise en aucune faƧon le penseur Ć  nier le moi latent. Cette rĆ©serve faite, passons. Maintenant, si l'on admet un moment avec nous que dans tout homme il y a une des espĆØces animales de la crĆ©ation, il nous sera facile de dire ce que c'Ć©tait que l'officier de paix Javert. Les paysans asturiens sont convaincus que dans toute portĆ©e de louve il y a un chien, lequel est tuĆ© par la mĆØre, sans quoi en grandissant il dĆ©vorerait les autres petits. Donnez une face humaine Ć  ce chien fils d'une louve, et ce sera Javert. Javert Ć©tait nĆ© dans une prison d'une tireuse de cartes dont le mari Ć©tait aux galĆØres. En grandissant, il pensa qu'il Ć©tait en dehors de la sociĆ©tĆ© et dĆ©sespĆ©ra d'y rentrer jamais. Il remarqua que la sociĆ©tĆ© maintient irrĆ©missiblement en dehors d'elle deux classes d'hommes, ceux qui l'attaquent et ceux qui la gardent; il n'avait le choix qu'entre ces deux classes; en mĆŖme temps il se sentait je ne sais quel fond de rigiditĆ©, de rĆ©gularitĆ© et de probitĆ©, compliquĆ© d'une inexprimable haine pour cette race de bohĆØmes dont il Ć©tait. Il entra dans la police. Il y rĆ©ussit. ƀ quarante ans il Ć©tait inspecteur. Il avait dans sa jeunesse Ć©tĆ© employĆ© dans les chiourmes du midi. Avant d'aller plus loin, entendons-nous sur ce mot face humaine que nous appliquions tout Ć  l'heure Ć  Javert. La face humaine de Javert consistait en un nez camard, avec deux profondes narines vers lesquelles montaient sur ses deux joues d'Ć©normes favoris. On se sentait mal Ć  l'aise la premiĆØre fois qu'on voyait ces deux forĆŖts et ces deux cavernes. Quand Javert riait, ce qui Ć©tait rare et terrible, ses lĆØvres minces s'Ć©cartaient, et laissaient voir, non seulement ses dents, mais ses gencives, et il se faisait autour de son nez un plissement Ć©patĆ© et sauvage comme sur un mufle de bĆŖte fauve. Javert sĆ©rieux Ć©tait un dogue; lorsqu'il riait, c'Ć©tait un tigre. Du reste, peu de crĆ¢ne, beaucoup de mĆ¢choire, les cheveux cachant le front et tombant sur les sourcils, entre les deux yeux un froncement central permanent comme une Ć©toile de colĆØre, le regard obscur, la bouche pincĆ©e et redoutable, l'air du commandement fĆ©roce. Cet homme Ć©tait composĆ© de deux sentiments trĆØs simples, et relativement trĆØs bons, mais qu'il faisait presque mauvais Ć  force de les exagĆ©rer: le respect de l'autoritĆ©, la haine de la rĆ©bellion; et Ć  ses yeux le vol, le meurtre, tous les crimes, n'Ć©taient que des formes de la rĆ©bellion. Il enveloppait dans une sorte de foi aveugle et profonde tout ce qui a une fonction dans l'Ɖtat, depuis le premier ministre jusqu'au garde champĆŖtre. Il couvrait de mĆ©pris, d'aversion et de dĆ©goĆ»t tout ce qui avait franchi une fois le seuil lĆ©gal du mal. Il Ć©tait absolu et n'admettait pas d'exceptions. D'une part il disait: --Le fonctionnaire ne peut se tromper; le magistrat n'a jamais tort. D'autre part il disait: --Ceux-ci sont irrĆ©mĆ©diablement perdus. Rien de bon n'en peut sortir. Il partageait pleinement l'opinion de ces esprits extrĆŖmes qui attribuent Ć  la loi humaine je ne sais quel pouvoir de faire ou, si l'on veut, de constater des damnĆ©s, et qui mettent un Styx au bas de la sociĆ©tĆ©. Il Ć©tait stoĆÆque, sĆ©rieux, austĆØre; rĆŖveur triste; humble et hautain comme les fanatiques. Son regard Ć©tait une vrille. Cela Ć©tait froid et cela perƧait. Toute sa vie tenait dans ces deux mots: veiller et surveiller. Il avait introduit la ligne droite dans ce qu'il y a de plus tortueux au monde; il avait la conscience de son utilitĆ©, la religion de ses fonctions, et il Ć©tait espion comme on est prĆŖtre. Malheur Ć  qui tombait sous sa main! Il eĆ»t arrĆŖtĆ© son pĆØre s'Ć©vadant du bagne et dĆ©noncĆ© sa mĆØre en rupture de ban. Et il l'eĆ»t fait avec cette sorte de satisfaction intĆ©rieure que donne la vertu. Avec cela une vie de privations, l'isolement, l'abnĆ©gation, la chastetĆ©, jamais une distraction. C'Ć©tait le devoir implacable, la police comprise comme les Spartiates comprenaient Sparte, un guet impitoyable, une honnĆŖtetĆ© farouche, un mouchard marmorĆ©en, Brutus dans Vidocq. Toute la personne de Javert exprimait l'homme qui Ć©pie et qui se dĆ©robe. L'Ć©cole mystique de Joseph de Maistre, laquelle Ć  cette Ć©poque assaisonnait de haute cosmogonie ce qu'on appelait les journaux ultras, n'eĆ»t pas manquĆ© de dire que Javert Ć©tait un symbole. On ne voyait pas son front qui disparaissait sous son chapeau, on ne voyait pas ses yeux qui se perdaient sous ses sourcils, on ne voyait pas son menton qui plongeait dans sa cravate, on ne voyait pas ses mains qui rentraient dans ses manches, on ne voyait pas sa canne qu'il portait sous sa redingote. Mais l'occasion venue, on voyait tout Ć  coup sortir de toute cette ombre, comme d'une embuscade, un front anguleux et Ć©troit, un regard funeste, un menton menaƧant, des mains Ć©normes; et un gourdin monstrueux. ƀ ses moments de loisir, qui Ć©taient peu frĆ©quents, tout en haĆÆssant les livres, il lisait; ce qui fait qu'il n'Ć©tait pas complĆØtement illettrĆ©. Cela se reconnaissait Ć  quelque emphase dans la parole. Il n'avait aucun vice, nous l'avons dit. Quand il Ć©tait content de lui, il s'accordait une prise de tabac. Il tenait Ć  l'humanitĆ© par lĆ . On comprendra sans peine que Javert Ć©tait l'effroi de toute cette classe que la statistique annuelle du ministĆØre de la justice dĆ©signe sous la rubrique: _Gens sans aveu_. Le nom de Javert prononcĆ© les mettait en dĆ©route; la face de Javert apparaissant les pĆ©trifiait. Tel Ć©tait cet homme formidable. Javert Ć©tait comme un oeil toujours fixĆ© sur M. Madeleine. Oeil plein de soupƧon et de conjectures. M. Madeleine avait fini par s'en apercevoir, mais il sembla que cela fĆ»t insignifiant pour lui. Il ne fit pas mĆŖme une question Ć  Javert, il ne le cherchait ni ne l'Ć©vitait, et il portait, sans paraĆ®tre y faire attention, ce regard gĆŖnant et presque pesant. Il traitait Javert comme tout le monde, avec aisance et bontĆ©. ƀ quelques paroles Ć©chappĆ©es Ć  Javert, on devinait qu'il avait recherchĆ© secrĆØtement, avec cette curiositĆ© qui tient Ć  la race et où il entre autant d'instinct que de volontĆ©, toutes les traces antĆ©rieures que le pĆØre Madeleine avait pu laisser ailleurs. Il paraissait savoir, et il disait parfois Ć  mots couverts, que quelqu'un avait pris certaines informations dans un certain pays sur une certaine famille disparue. Une fois il lui arriva de dire, se parlant Ć  lui-mĆŖme: --Je crois que je le tiens! Puis il resta trois jours pensif sans prononcer une parole. Il paraĆ®t que le fil qu'il croyait tenir s'Ć©tait rompu. Du reste, et ceci est le correctif nĆ©cessaire Ć  ce que le sens de certains mots pourrait prĆ©senter de trop absolu, il ne peut y avoir rien de vraiment infaillible dans une crĆ©ature humaine, et le propre de l'instinct est prĆ©cisĆ©ment de pouvoir ĆŖtre troublĆ©, dĆ©pistĆ© et dĆ©routĆ©. Sans quoi il serait supĆ©rieur Ć  l'intelligence, et la bĆŖte se trouverait avoir une meilleure lumiĆØre que l'homme. Javert Ć©tait Ć©videmment quelque peu dĆ©concertĆ© par le complet naturel et la tranquillitĆ© de M. Madeleine. Un jour pourtant son Ć©trange maniĆØre d'ĆŖtre parut faire impression sur M. Madeleine. Voici Ć  quelle occasion. Chapitre VI Le pĆØre Fauchelevent M. Madeleine passait un matin dans une ruelle non pavĆ©e de Montreuil-sur-mer. Il entendit du bruit et vit un groupe Ć  quelque distance. Il y alla. Un vieux homme, nommĆ© le pĆØre Fauchelevent, venait de tomber sous sa charrette dont le cheval s'Ć©tait abattu. Ce Fauchelevent Ć©tait un des rares ennemis qu'eĆ»t encore M. Madeleine Ć  cette Ć©poque. Lorsque Madeleine Ć©tait arrivĆ© dans le pays, Fauchelevent, ancien tabellion et paysan presque lettrĆ©, avait un commerce qui commenƧait Ć  aller mal. Fauchelevent avait vu ce simple ouvrier qui s'enrichissait, tandis que lui, maĆ®tre, se ruinait. Cela l'avait rempli de jalousie, et il avait fait ce qu'il avait pu en toute occasion pour nuire Ć  Madeleine. Puis la faillite Ć©tait venue, et, vieux, n'ayant plus Ć  lui qu'une charrette et un cheval, sans famille et sans enfants du reste, pour vivre il s'Ć©tait fait charretier. Le cheval avait les deux cuisses cassĆ©es et ne pouvait se relever. Le vieillard Ć©tait engagĆ© entre les roues. La chute avait Ć©tĆ© tellement malheureuse que toute la voiture pesait sur sa poitrine. La charrette Ć©tait assez lourdement chargĆ©e. Le pĆØre Fauchelevent poussait des rĆ¢les lamentables. On avait essayĆ© de le tirer, mais en vain. Un effort dĆ©sordonnĆ©, une aide maladroite, une secousse Ć  faux pouvaient l'achever. Il Ć©tait impossible de le dĆ©gager autrement qu'en soulevant la voiture par-dessous. Javert, qui Ć©tait survenu au moment de l'accident, avait envoyĆ© chercher un cric. M. Madeleine arriva. On s'Ć©carta avec respect. --ƀ l'aide! criait le vieux Fauchelevent. Qui est-ce qui est bon enfant pour sauver le vieux? M. Madeleine se tourna vers les assistants: --A-t-on un cric? --On en est allĆ© quĆ©rir un, rĆ©pondit un paysan. --Dans combien de temps l'aura-t-on? --On est allĆ© au plus prĆØs, au lieu Flachot, où il y a un marĆ©chal; mais c'est Ć©gal, il faudra bien un bon quart d'heure. --Un quart d'heure! s'Ć©cria Madeleine. Il avait plu la veille, le sol Ć©tait dĆ©trempĆ©, la charrette s'enfonƧait dans la terre Ć  chaque instant et comprimait de plus en plus la poitrine du vieux charretier. Il Ć©tait Ć©vident qu'avant cinq minutes il aurait les cĆ“tes brisĆ©es. --Il est impossible d'attendre un quart d'heure, dit Madeleine aux paysans qui regardaient. --Il faut bien! --Mais il ne sera plus temps! Vous ne voyez donc pas que la charrette s'enfonce? --Dame! --Ɖcoutez, reprit Madeleine, il y a encore assez de place sous la voiture pour qu'un homme s'y glisse et la soulĆØve avec son dos. Rien qu'une demi-minute, et l'on tirera le pauvre homme. Y a-t-il ici quelqu'un qui ait des reins et du coeur? Cinq louis d'or Ć  gagner! Personne ne bougea dans le groupe. --Dix louis, dit Madeleine. Les assistants baissaient les yeux. Un d'eux murmura: --Il faudrait ĆŖtre diablement fort. Et puis, on risque de se faire Ć©craser! --Allons! recommenƧa Madeleine, vingt louis! MĆŖme silence. --Ce n'est pas la bonne volontĆ© qui leur manque, dit une voix. M. Madeleine se retourna, et reconnut Javert. Il ne l'avait pas aperƧu en arrivant. Javert continua: --C'est la force. Il faudrait ĆŖtre un terrible homme pour faire la chose de lever une voiture comme cela sur son dos. Puis, regardant fixement M. Madeleine, il poursuivit en appuyant sur chacun des mots qu'il prononƧait: --Monsieur Madeleine, je n'ai jamais connu qu'un seul homme capable de faire ce que vous demandez lĆ . Madeleine tressaillit. Javert ajouta avec un air d'indiffĆ©rence, mais sans quitter des yeux Madeleine: --C'Ć©tait un forƧat. --Ah! dit Madeleine. --Du bagne de Toulon. Madeleine devint pĆ¢le. Cependant la charrette continuait Ć  s'enfoncer lentement. Le pĆØre Fauchelevent rĆ¢lait et hurlait: --J'Ć©touffe! Ƈa me brise les cĆ“tes! Un cric! quelque chose! Ah! Madeleine regarda autour de lui: --Il n'y a donc personne qui veuille gagner vingt louis et sauver la vie Ć  ce pauvre vieux? Aucun des assistants ne remua. Javert reprit: --Je n'ai jamais connu qu'un homme qui pĆ»t remplacer un cric. C'Ć©tait ce forƧat. --Ah! voilĆ  que Ƨa m'Ć©crase! cria le vieillard. Madeleine leva la tĆŖte, rencontra l'oeil de faucon de Javert toujours attachĆ© sur lui, regarda les paysans immobiles, et sourit tristement. Puis, sans dire une parole, il tomba Ć  genoux, et avant mĆŖme que la foule eĆ»t eu le temps de jeter un cri, il Ć©tait sous la voiture. Il y eut un affreux moment d'attente et de silence. On vit Madeleine presque Ć  plat ventre sous ce poids effrayant essayer deux fois en vain de rapprocher ses coudes de ses genoux. On lui cria: --PĆØre Madeleine! retirez-vous de lĆ ! Le vieux Fauchelevent lui-mĆŖme lui dit: --Monsieur Madeleine! allez-vous-en! C'est qu'il faut que je meure, voyez-vous! Laissez-moi! Vous allez vous faire Ć©craser aussi! Madeleine ne rĆ©pondit pas. Les assistants haletaient. Les roues avaient continuĆ© de s'enfoncer, et il Ć©tait dĆ©jĆ  devenu presque impossible que Madeleine sortĆ®t de dessous la voiture. Tout Ć  coup on vit l'Ć©norme masse s'Ć©branler, la charrette se soulevait lentement, les roues sortaient Ć  demi de l'orniĆØre. On entendit une voix Ć©touffĆ©e qui criait: --DĆ©pĆŖchez-vous! aidez! C'Ć©tait Madeleine qui venait de faire un dernier effort. Ils se prĆ©cipitĆØrent. Le dĆ©vouement d'un seul avait donnĆ© de la force et du courage Ć  tous. La charrette fut enlevĆ©e par vingt bras. Le vieux Fauchelevent Ć©tait sauvĆ©. Madeleine se releva. Il Ć©tait blĆŖme, quoique ruisselant de sueur. Ses habits Ć©taient dĆ©chirĆ©s et couverts de boue. Tous pleuraient. Le vieillard lui baisait les genoux et l'appelait le bon Dieu. Lui, il avait sur le visage je ne sais quelle expression de souffrance heureuse et cĆ©leste, et il fixait son oeil tranquille sur Javert qui le regardait toujours. Chapitre VII Fauchelevent devient jardinier Ć  Paris Fauchelevent s'Ć©tait dĆ©mis la rotule dans sa chute. Le pĆØre Madeleine le fit transporter dans une infirmerie qu'il avait Ć©tablie pour ses ouvriers dans le bĆ¢timent mĆŖme de sa fabrique et qui Ć©tait desservie par deux soeurs de charitĆ©. Le lendemain matin, le vieillard trouva un billet de mille francs sur sa table de nuit, avec ce mot de la main du pĆØre Madeleine: _Je vous achĆØte votre charrette et votre cheval_. La charrette Ć©tait brisĆ©e et le cheval Ć©tait mort. Fauchelevent guĆ©rit, mais son genou resta ankylosĆ©. M. Madeleine, par les recommandations des soeurs et de son curĆ©, fit placer le bonhomme comme jardinier dans un couvent de femmes du quartier Saint-Antoine Ć  Paris. Quelque temps aprĆØs, M. Madeleine fut nommĆ© maire. La premiĆØre fois que Javert vit M. Madeleine revĆŖtu de l'Ć©charpe qui lui donnait toute autoritĆ© sur la ville, il Ć©prouva cette sorte de frĆ©missement qu'Ć©prouverait un dogue qui flairerait un loup sous les habits de son maĆ®tre. ƀ partir de ce moment, il l'Ć©vita le plus qu'il put. Quand les besoins du service l'exigeaient impĆ©rieusement et qu'il ne pouvait faire autrement que de se trouver avec M. le maire, il lui parlait avec un respect profond. Cette prospĆ©ritĆ© crƩƩe Ć  Montreuil-sur-mer par le pĆØre Madeleine avait, outre les signes visibles que nous avons indiquĆ©s, un autre symptĆ“me qui, pour n'ĆŖtre pas visible, n'Ć©tait pas moins significatif. Ceci ne trompe jamais. Quand la population souffre, quand le travail manque, quand le commerce est nul, le contribuable rĆ©siste Ć  l'impĆ“t par pĆ©nurie, Ć©puise et dĆ©passe les dĆ©lais, et l'Ć©tat dĆ©pense beaucoup d'argent en frais de contrainte et de rentrĆ©e. Quand le travail abonde, quand le pays est heureux et riche, l'impĆ“t se paye aisĆ©ment et coĆ»te peu Ć  l'Ć©tat. On peut dire que la misĆØre et la richesse publiques ont un thermomĆØtre infaillible, les frais de perception de l'impĆ“t. En sept ans, les frais de perception de l'impĆ“t s'Ć©taient rĆ©duits des trois quarts dans l'arrondissement de Montreuil-sur-mer, ce qui faisait frĆ©quemment citer cet arrondissement entre tous par M. de VillĆØle, alors ministre des finances. Telle Ć©tait la situation du pays, lorsque Fantine y revint. Personne ne se souvenait plus d'elle. Heureusement la porte de la fabrique de M. Madeleine Ć©tait comme un visage ami. Elle s'y prĆ©senta, et fut admise dans l'atelier des femmes. Le mĆ©tier Ć©tait tout nouveau pour Fantine, elle n'y pouvait ĆŖtre bien adroite, elle ne tirait donc de sa journĆ©e de travail que peu de chose, mais enfin cela suffisait, le problĆØme Ć©tait rĆ©solu, elle gagnait sa vie. Chapitre VIII Madame Victurnien dĆ©pense trente-cinq francs pour la morale Quand Fantine vit qu'elle vivait, elle eut un moment de joie. Vivre honnĆŖtement de son travail, quelle grĆ¢ce du ciel! Le goĆ»t du travail lui revint vraiment. Elle acheta un miroir, se rĆ©jouit d'y regarder sa jeunesse, ses beaux cheveux et ses belles dents, oublia beaucoup de choses, ne songea plus qu'Ć  sa Cosette et Ć  l'avenir possible, et fut presque heureuse. Elle loua une petite chambre et la meubla Ć  crĆ©dit sur son travail futur; reste de ses habitudes de dĆ©sordre. Ne pouvant pas dire qu'elle Ć©tait mariĆ©e, elle s'Ć©tait bien gardĆ©e, comme nous l'avons dĆ©jĆ  fait entrevoir, de parler de sa petite fille. En ces commencements, on l'a vu, elle payait exactement les ThĆ©nardier. Comme elle ne savait que signer, elle Ć©tait obligĆ©e de leur Ć©crire par un Ć©crivain public. Elle Ć©crivait souvent. Cela fut remarquĆ©. On commenƧa Ć  dire tout bas dans l'atelier des femmes que Fantine «écrivait des lettresĀ» et qu'Ā«elle avait des alluresĀ». Il n'y a rien de tel pour Ć©pier les actions des gens que ceux qu'elles ne regardent pas.--Pourquoi ce monsieur ne vient-il jamais qu'Ć  la brune? pourquoi monsieur un tel n'accroche-t-il jamais sa clef au clou le jeudi? pourquoi prend-il toujours les petites rues? pourquoi madame descend-elle toujours de son fiacre avant d'arriver Ć  la maison? pourquoi envoie-t-elle acheter un cahier de papier Ć  lettres, quand elle en a Ā«plein sa papeterie?Ā» etc., etc.--Il existe des ĆŖtres qui, pour connaĆ®tre le mot de ces Ć©nigmes, lesquelles leur sont du reste parfaitement indiffĆ©rentes, dĆ©pensent plus d'argent, prodiguent plus de temps, se donnent plus de peine qu'il n'en faudrait pour dix bonnes actions; et cela, gratuitement, pour le plaisir, sans ĆŖtre payĆ©s de la curiositĆ© autrement que par la curiositĆ©. Ils suivront celui-ci ou celle-lĆ  des jours entiers, feront faction des heures Ć  des coins de rue, sous des portes d'allĆ©es, la nuit, par le froid et par la pluie, corrompront des commissionnaires, griseront des cochers de fiacre et des laquais, achĆØteront une femme de chambre, feront acquisition d'un portier. Pourquoi? pour rien. Pur acharnement de voir, de savoir et de pĆ©nĆ©trer. Pure dĆ©mangeaison de dire. Et souvent ces secrets connus, ces mystĆØres publiĆ©s, ces Ć©nigmes Ć©clairĆ©es du grand jour, entraĆ®nent des catastrophes, des duels, des faillites, des familles ruinĆ©es, des existences brisĆ©es, Ć  la grande joie de ceux qui ont Ā«tout dĆ©couvertĀ» sans intĆ©rĆŖt et par pur instinct. Chose triste. Certaines personnes sont mĆ©chantes uniquement par besoin de parler. Leur conversation, causerie dans le salon, bavardage dans l'antichambre, est comme ces cheminĆ©es qui usent vite le bois; il leur faut beaucoup de combustible; et le combustible, c'est le prochain. On observa donc Fantine. Avec cela, plus d'une Ć©tait jalouse de ses cheveux blonds et de ses dents blanches. On constata que dans l'atelier, au milieu des autres, elle se dĆ©tournait souvent pour essuyer une larme. C'Ć©taient les moments où elle songeait Ć  son enfant; peut-ĆŖtre aussi Ć  l'homme qu'elle avait aimĆ©. C'est un douloureux labeur que la rupture des sombres attaches du passĆ©. On constata qu'elle Ć©crivait, au moins deux fois par mois, toujours Ć  la mĆŖme adresse, et qu'elle affranchissait la lettre. On parvint Ć  se procurer l'adresse: _Monsieur, Monsieur ThĆ©nardier, aubergiste, Ć  Montfermeil_. On fit jaser au cabaret l'Ć©crivain public, vieux bonhomme qui ne pouvait pas emplir son estomac de vin rouge sans vider sa poche aux secrets. Bref, on sut que Fantine avait un enfant. Ā«Ce devait ĆŖtre une espĆØce de fille.Ā» Il se trouva une commĆØre qui fit le voyage de Montfermeil, parla aux ThĆ©nardier, et dit Ć  son retour: Ā«Pour mes trente-cinq francs, j'en ai eu le coeur net. J'ai vu l'enfant!Ā» La commĆØre qui fit cela Ć©tait une gorgone appelĆ©e madame Victurnien, gardienne et portiĆØre de la vertu de tout le monde. Madame Victurnien avait cinquante-six ans, et doublait le masque de la laideur du masque de la vieillesse. Voix chevrotante, esprit capricant. Cette vieille femme avait Ć©tĆ© jeune, chose Ć©tonnante. Dans sa jeunesse, en plein 93, elle avait Ć©pousĆ© un moine Ć©chappĆ© du cloĆ®tre en bonnet rouge et passĆ© des bernardins aux jacobins. Elle Ć©tait sĆØche, rĆŖche, revĆŖche, pointue, Ć©pineuse, presque venimeuse; tout en se souvenant de son moine dont elle Ć©tait veuve, et qui l'avait fort domptĆ©e et pliĆ©e. C'Ć©tait une ortie où l'on voyait le froissement du froc. ƀ la restauration, elle s'Ć©tait faite bigote, et si Ć©nergiquement que les prĆŖtres lui avaient pardonnĆ© son moine. Elle avait un petit bien qu'elle lĆ©guait bruyamment Ć  une communautĆ© religieuse. Elle Ć©tait fort bien vue Ć  l'Ć©vĆŖchĆ© d'Arras. Cette madame Victurnien donc alla Ć  Montfermeil, et revint en disant: Ā«J'ai vu l'enfantĀ». Tout cela prit du temps. Fantine Ć©tait depuis plus d'un an Ć  la fabrique, lorsqu'un matin la surveillante de l'atelier lui remit, de la part de M. le maire, cinquante francs, en lui disant qu'elle ne faisait plus partie de l'atelier et en l'engageant, de la part de M. le maire, Ć  quitter le pays. C'Ć©tait prĆ©cisĆ©ment dans ce mĆŖme mois que les ThĆ©nardier, aprĆØs avoir demandĆ© douze francs au lieu de six, venaient d'exiger quinze francs au lieu de douze. Fantine fut atterrĆ©e. Elle ne pouvait s'en aller du pays, elle devait son loyer et ses meubles. Cinquante francs ne suffisaient pas pour acquitter cette dette. Elle balbutia quelques mots suppliants. La surveillante lui signifia qu'elle eĆ»t Ć  sortir sur-le-champ de l'atelier. Fantine n'Ć©tait du reste qu'une ouvriĆØre mĆ©diocre. AccablĆ©e de honte plus encore que de dĆ©sespoir, elle quitta l'atelier et rentra dans sa chambre. Sa faute Ć©tait donc maintenant connue de tous! Elle ne se sentit plus la force de dire un mot. On lui conseilla de voir M. le maire; elle n'osa pas. M. le maire lui donnait cinquante francs, parce qu'il Ć©tait bon, et la chassait, parce qu'il Ć©tait juste. Elle plia sous cet arrĆŖt. Chapitre IX SuccĆØs de Madame Victurnien La veuve du moine fut donc bonne Ć  quelque chose. Du reste, M. Madeleine n'avait rien su de tout cela. Ce sont lĆ  de ces combinaisons d'Ć©vĆ©nements dont la vie est pleine. M. Madeleine avait pour habitude de n'entrer presque jamais dans l'atelier des femmes. Il avait mis Ć  la tĆŖte de cet atelier une vieille fille, que le curĆ© lui avait donnĆ©e, et il avait toute confiance dans cette surveillante, personne vraiment respectable, ferme, Ć©quitable, intĆØgre, remplie de la charitĆ© qui consiste Ć  donner, mais n'ayant pas au mĆŖme degrĆ© la charitĆ© qui consiste Ć  comprendre et Ć  pardonner. M. Madeleine se remettait de tout sur elle. Les meilleurs hommes sont souvent forcĆ©s de dĆ©lĆ©guer leur autoritĆ©. C'est dans cette pleine puissance et avec la conviction qu'elle faisait bien, que la surveillante avait instruit le procĆØs, jugĆ©, condamnĆ© et exĆ©cutĆ© Fantine. Quant aux cinquante francs, elle les avait donnĆ©s sur une somme que M. Madeleine lui confiait pour aumĆ“nes et secours aux ouvriĆØres et dont elle ne rendait pas compte. Fantine s'offrit comme servante dans le pays; elle alla d'une maison Ć  l'autre. Personne ne voulut d'elle. Elle n'avait pu quitter la ville. Le marchand fripier auquel elle devait ses meubles, quels meubles! lui avait dit: Ā«Si vous vous en allez, je vous fais arrĆŖter comme voleuse.Ā» Le propriĆ©taire auquel elle devait son loyer, lui avait dit: Ā«Vous ĆŖtes jeune et jolie, vous pouvez payer.Ā» Elle partagea les cinquante francs entre le propriĆ©taire et le fripier, rendit au marchand les trois quarts de son mobilier, ne garda que le nĆ©cessaire, et se trouva sans travail, sans Ć©tat, n'ayant plus que son lit, et devant encore environ cent francs. Elle se mit Ć  coudre de grosses chemises pour les soldats de la garnison, et gagnait douze sous par jour. Sa fille lui en coĆ»tait dix. C'est en ce moment qu'elle commenƧa Ć  mal payer les ThĆ©nardier. Cependant une vieille femme qui lui allumait sa chandelle quand elle rentrait le soir, lui enseigna l'art de vivre dans la misĆØre. DerriĆØre vivre de peu, il y a vivre de rien. Ce sont deux chambres; la premiĆØre est obscure, la seconde est noire. Fantine apprit comment on se passe tout Ć  fait de feu en hiver, comment on renonce Ć  un oiseau qui vous mange un liard de millet tous les deux jours, comment on fait de son jupon sa couverture et de sa couverture son jupon, comment on mĆ©nage sa chandelle en prenant son repas Ć  la lumiĆØre de la fenĆŖtre d'en face. On ne sait pas tout ce que certains ĆŖtres faibles, qui ont vieilli dans le dĆ©nĆ»ment et l'honnĆŖtetĆ©, savent tirer d'un sou. Cela finit par ĆŖtre un talent. Fantine acquit ce sublime talent et reprit un peu de courage. ƀ cette Ć©poque, elle disait Ć  une voisine: --Bah! je me dis: en ne dormant que cinq heures et en travaillant tout le reste Ć  mes coutures, je parviendrai bien toujours Ć  gagner Ć  peu prĆØs du pain. Et puis, quand on est triste, on mange moins. Eh bien! des souffrances, des inquiĆ©tudes, un peu de pain d'un cĆ“tĆ©, des chagrins de l'autre, tout cela me nourrira. Dans cette dĆ©tresse, avoir sa petite fille eĆ»t Ć©tĆ© un Ć©trange bonheur. Elle songea Ć  la faire venir. Mais quoi! lui faire partager son dĆ©nĆ»ment! Et puis, elle devait aux ThĆ©nardier! comment s'acquitter? Et le voyage! comment le payer? La vieille qui lui avait donnĆ© ce qu'on pourrait appeler des leƧons de vie indigente Ć©tait une sainte fille nommĆ©e Marguerite, dĆ©vote de la bonne dĆ©votion, pauvre, et charitable pour les pauvres et mĆŖme pour les riches, sachant tout juste assez Ć©crire pour signer _Margueritte_, et croyant en Dieu, ce qui est la science. Il y a beaucoup de ces vertus-lĆ  en bas; un jour elles seront en haut. Cette vie a un lendemain. Dans les premiers temps, Fantine avait Ć©tĆ© si honteuse qu'elle n'avait pas osĆ© sortir. Quand elle Ć©tait dans la rue, elle devinait qu'on se retournait derriĆØre elle et qu'on la montrait du doigt; tout le monde la regardait et personne ne la saluait; le mĆ©pris Ć¢cre et froid des passants lui pĆ©nĆ©trait dans la chair et dans l'Ć¢me comme une bise. Dans les petites villes, il semble qu'une malheureuse soit nue sous les sarcasmes et la curiositĆ© de tous. ƀ Paris, du moins, personne ne vous connaĆ®t, et cette obscuritĆ© est un vĆŖtement. Oh! comme elle eĆ»t souhaitĆ© venir Ć  Paris! Impossible. Il fallut bien s'accoutumer Ć  la dĆ©considĆ©ration, comme elle s'Ć©tait accoutumĆ©e Ć  l'indigence. Peu Ć  peu elle en prit son parti. AprĆØs deux ou trois mois elle secoua la honte et se remit Ć  sortir comme si de rien n'Ć©tait. --Cela m'est bien Ć©gal, dit-elle. Elle alla et vint, la tĆŖte haute, avec un sourire amer, et sentit qu'elle devenait effrontĆ©e. Madame Victurnien quelquefois la voyait passer de sa fenĆŖtre, remarquait la dĆ©tresse de Ā«cette crĆ©atureĀ», grĆ¢ce Ć  elle "remise Ć  sa place", et se fĆ©licitait. Les mĆ©chants ont un bonheur noir. L'excĆØs du travail fatiguait Fantine, et la petite toux sĆØche qu'elle avait augmenta. Elle disait quelquefois Ć  sa voisine Marguerite: Ā«TĆ¢tez donc comme mes mains sont chaudes.Ā» Cependant le matin, quand elle peignait avec un vieux peigne cassĆ© ses beaux cheveux qui ruisselaient comme de la soie floche, elle avait une minute de coquetterie heureuse. Chapitre X Suite du succĆØs Elle avait Ć©tĆ© congĆ©diĆ©e vers la fin de l'hiver; l'Ć©tĆ© se passa, mais l'hiver revint. Jours courts, moins de travail. L'hiver, point de chaleur, point de lumiĆØre, point de midi, le soir touche au matin, brouillard, crĆ©puscule, la fenĆŖtre est grise, on n'y voit pas clair. Le ciel est un soupirail. Toute la journĆ©e est une cave. Le soleil a l'air d'un pauvre. L'affreuse saison! L'hiver change en pierre l'eau du ciel et le coeur de l'homme. Ses crĆ©anciers la harcelaient. Fantine gagnait trop peu. Ses dettes avaient grossi. Les ThĆ©nardier, mal payĆ©s, lui Ć©crivaient Ć  chaque instant des lettres dont le contenu la dĆ©solait et dont le port la ruinait. Un jour ils lui Ć©crivirent que sa petite Cosette Ć©tait toute nue par le froid qu'il faisait, qu'elle avait besoin d'une jupe de laine, et qu'il fallait au moins que la mĆØre envoyĆ¢t dix francs pour cela. Elle reƧut la lettre, et la froissa dans ses mains tout le jour. Le soir elle entra chez un barbier qui habitait le coin de la rue, et dĆ©fit son peigne. Ses admirables cheveux blonds lui tombĆØrent jusqu'aux reins. --Les beaux cheveux! s'Ć©cria le barbier. --Combien m'en donneriez-vous? dit-elle. --Dix francs. --Coupez-les. Elle acheta une jupe de tricot et l'envoya aux ThĆ©nardier. Cette jupe fit les ThĆ©nardier furieux. C'Ć©tait de l'argent qu'ils voulaient. Ils donnĆØrent la jupe Ć  Eponine. La pauvre Alouette continua de frissonner. Fantine pensa: Ā«Mon enfant n'a plus froid. Je l'ai habillĆ©e de mes cheveux.Ā» Elle mettait de petits bonnets ronds qui cachaient sa tĆŖte tondue et avec lesquels elle Ć©tait encore jolie. Un travail tĆ©nĆ©breux se faisait dans le coeur de Fantine. Quand elle vit qu'elle ne pouvait plus se coiffer, elle commenƧa Ć  tout prendre en haine autour d'elle. Elle avait longtemps partagĆ© la vĆ©nĆ©ration de tous pour le pĆØre Madeleine; cependant, Ć  force de se rĆ©pĆ©ter que c'Ć©tait lui qui l'avait chassĆ©e, et qu'il Ć©tait la cause de son malheur, elle en vint Ć  le haĆÆr lui aussi, lui surtout. Quand elle passait devant la fabrique aux heures où les ouvriers sont sur la porte, elle affectait de rire et de chanter. Une vieille ouvriĆØre qui la vit une fois chanter et rire de cette faƧon dit: --VoilĆ  une fille qui finira mal. Elle prit un amant, le premier venu, un homme qu'elle n'aimait pas, par bravade, avec la rage dans le coeur. C'Ć©tait un misĆ©rable, une espĆØce de musicien mendiant, un oisif gueux, qui la battait, et qui la quitta comme elle l'avait pris, avec dĆ©goĆ»t. Elle adorait son enfant. Plus elle descendait, plus tout devenait sombre autour d'elle plus ce doux petit ange rayonnait dans le fond de son Ć¢me. Elle disait. Quand je serai riche, j'aurai ma Cosette avec moi; et elle riait. La toux ne la quittait pas, et elle avait des sueurs dans le dos. Un jour elle reƧut des ThĆ©nardier une lettre ainsi conƧue: Ā«Cosette est malade d'une maladie qui est dans le pays. Une fiĆØvre miliaire, qu'ils appellent. Il faut des drogues chĆØres. Cela nous ruine et nous ne pouvons plus payer. Si vous ne nous envoyez pas quarante francs avant huit jours, la petite est morte.Ā» Elle se mit Ć  rire aux Ć©clats, et elle dit Ć  sa vieille voisine: --Ah! ils sont bons! quarante francs! que Ƨa! Ƨa fait deux napolĆ©ons! Où veulent-ils que je les prenne? Sont-ils bĆŖtes, ces paysans! Cependant elle alla dans l'escalier prĆØs d'une lucarne et relut la lettre. Puis elle descendit l'escalier et sortit en courant et en sautant, riant toujours. Quelqu'un qui la rencontra lui dit: --Qu'est-ce que vous avez donc Ć  ĆŖtre si gaie? Elle rĆ©pondit: --C'est une bonne bĆŖtise que viennent de m'Ć©crire des gens de la campagne. Ils me demandent quarante francs. Paysans, va! Comme elle passait sur la place, elle vit beaucoup de monde qui entourait une voiture de forme bizarre sur l'impĆ©riale de laquelle pĆ©rorait tout debout un homme vĆŖtu de rouge. C'Ć©tait un bateleur dentiste en tournĆ©e, qui offrait au public des rĆ¢teliers complets, des opiats, des poudres et des Ć©lixirs. Fantine se mĆŖla au groupe et se mit Ć  rire comme les autres de cette harangue où il y avait de l'argot pour la canaille et du jargon pour les gens comme il faut. L'arracheur de dents vit cette belle fille qui riait, et s'Ć©cria tout Ć  coup: --Vous avez de jolies dents, la fille qui riez lĆ . Si vous voulez me vendre vos deux palettes, je vous donne de chaque un napolĆ©on d'or. --Qu'est-ce que c'est que Ƨa, mes palettes? demanda Fantine. --Les palettes, reprit le professeur dentiste, c'est les dents de devant, les deux d'en haut. --Quelle horreur! s'Ć©cria Fantine. --Deux napolĆ©ons! grommela une vieille Ć©dentĆ©e qui Ć©tait lĆ . Qu'en voilĆ  une qui est heureuse! Fantine s'enfuit, et se boucha les oreilles pour ne pas entendre la voix enrouĆ©e de l'homme qui lui criait: RĆ©flĆ©chissez, la belle! deux napolĆ©ons, Ƨa peut servir. Si le coeur vous en dit, venez ce soir Ć  l'auberge du _Tillac d'argent_, vous m'y trouverez. Fantine rentra, elle Ć©tait furieuse et conta la chose Ć  sa bonne voisine Marguerite: --Comprenez-vous cela? ne voilĆ -t-il pas un abominable homme? comment laisse-t-on des gens comme cela aller dans le pays! M'arracher mes deux dents de devant! mais je serais horrible! Les cheveux repoussent, mais les dents! Ah! le monstre d'homme! j'aimerais mieux me jeter d'un cinquiĆØme la tĆŖte la premiĆØre sur le pavĆ©! Il m'a dit qu'il serait ce soir au _Tillac d'argent_. --Et qu'est-ce qu'il offrait? demanda Marguerite. --Deux napolĆ©ons. --Cela fait quarante francs. --Oui, dit Fantine, cela fait quarante francs. Elle resta pensive, et se mit Ć  son ouvrage. Au bout d'un quart d'heure, elle quitta sa couture et alla relire la lettre des ThĆ©nardier sur l'escalier. En rentrant, elle dit Ć  Marguerite qui travaillait prĆØs d'elle: --Qu'est-ce que c'est donc que cela, une fiĆØvre miliaire? Savez-vous? --Oui, rĆ©pondit la vieille fille, c'est une maladie. --Ƈa a donc besoin de beaucoup de drogues? --Oh! des drogues terribles. --Où Ƨa vous prend-il? --C'est une maladie qu'on a comme Ƨa. --Cela attaque donc les enfants? --Surtout les enfants. --Est-ce qu'on en meurt? --TrĆØs bien, dit Marguerite. Fantine sortit et alla encore une fois relire la lettre sur l'escalier. Le soir elle descendit, et on la vit qui se dirigeait du cĆ“tĆ© de la rue de Paris où sont les auberges. Le lendemain matin, comme Marguerite entrait dans la chambre de Fantine avant le jour, car elles travaillaient toujours ensemble et de cette faƧon n'allumaient qu'une chandelle pour deux, elle trouva Fantine assise sur son lit, pĆ¢le, glacĆ©e. Elle ne s'Ć©tait pas couchĆ©e. Son bonnet Ć©tait tombĆ© sur ses genoux. La chandelle avait brĆ»lĆ© toute la nuit et Ć©tait presque entiĆØrement consumĆ©e. Marguerite s'arrĆŖta sur le seuil, pĆ©trifiĆ©e de cet Ć©norme dĆ©sordre, et s'Ć©cria: --Seigneur! la chandelle qui est toute brĆ»lĆ©e! il s'est passĆ© des Ć©vĆ©nements! Puis elle regarda Fantine qui tournait vers elle sa tĆŖte sans cheveux. Fantine depuis la veille avait vieilli de dix ans. --JĆ©sus! fit Marguerite, qu'est-ce que vous avez, Fantine? --Je n'ai rien, rĆ©pondit Fantine. Au contraire. Mon enfant ne mourra pas de cette affreuse maladie, faute de secours. Je suis contente. En parlant ainsi, elle montrait Ć  la vieille fille deux napolĆ©ons qui brillaient sur la table. --Ah, JĆ©sus Dieu! dit Marguerite. Mais c'est une fortune! Où avez-vous eu ces louis d'or? --Je les ai eus, rĆ©pondit Fantine. En mĆŖme temps elle sourit. La chandelle Ć©clairait son visage. C'Ć©tait un sourire sanglant. Une salive rougeĆ¢tre lui souillait le coin des lĆØvres, et elle avait un trou noir dans la bouche. Les deux dents Ć©taient arrachĆ©es. Elle envoya les quarante francs Ć  Montfermeil. Du reste c'Ć©tait une ruse des ThĆ©nardier pour avoir de l'argent. Cosette n'Ć©tait pas malade. Fantine jeta son miroir par la fenĆŖtre. Depuis longtemps elle avait quittĆ© sa cellule du second pour une mansarde fermĆ©e d'un loquet sous le toit; un de ces galetas dont le plafond fait angle avec le plancher et vous heurte Ć  chaque instant la tĆŖte. Le pauvre ne peut aller au fond de sa chambre comme au fond de sa destinĆ©e qu'en se courbant de plus en plus. Elle n'avait plus de lit, il lui restait une loque qu'elle appelait sa couverture, un matelas Ć  terre et une chaise dĆ©paillĆ©e. Un petit rosier qu'elle avait s'Ć©tait dĆ©ssĆ©chĆ© dans un coin, oubliĆ©. Dans l'autre coin, il y avait un pot Ć  beurre Ć  mettre l'eau, qui gelait l'hiver, et où les diffĆ©rents niveaux de l'eau restaient longtemps marquĆ©s par des cercles de glace. Elle avait perdu la honte, elle perdit la coquetterie. Dernier signe. Elle sortait avec des bonnets sales. Soit faute de temps, soit indiffĆ©rence, elle ne raccommodait plus son linge. ƀ mesure que les talons s'usaient, elle tirait ses bas dans ses souliers. Cela se voyait Ć  de certains plis perpendiculaires. Elle rapiƩƧait son corset, vieux et usĆ©, avec des morceaux de calicot qui se dĆ©chiraient au moindre mouvement. Les gens auxquels elle devait, lui faisaient Ā«des scĆØnesĀ», et ne lui laissaient aucun repos. Elle les trouvait dans la rue, elle les retrouvait dans son escalier. Elle passait des nuits Ć  pleurer et Ć  songer. Elle avait les yeux trĆØs brillants, et elle sentait une douleur fixe dans l'Ć©paule, vers le haut de l'omoplate gauche. Elle toussait beaucoup. Elle haĆÆssait profondĆ©ment le pĆØre Madeleine, et ne se plaignait pas. Elle cousait dix-sept heures par jour; mais un entrepreneur du travail des prisons, qui faisait travailler les prisonniĆØres au rabais, fit tout Ć  coup baisser les prix, ce qui rĆ©duisit la journĆ©e des ouvriĆØres libres Ć  neuf sous. Dix-sept heures de travail, et neuf sous par jour! Ses crĆ©anciers Ć©taient plus impitoyables que jamais. Le fripier, qui avait repris presque tous les meubles, lui disait sans cesse: Quand me payeras-tu, coquine? Que voulait-on d'elle, bon Dieu! Elle se sentait traquĆ©e et il se dĆ©veloppait en elle quelque chose de la bĆŖte farouche. Vers le mĆŖme temps, le ThĆ©nardier lui Ć©crivit que dĆ©cidĆ©ment il avait attendu avec beaucoup trop de bontĆ©, et qu'il lui fallait cent francs, tout de suite; sinon qu'il mettrait Ć  la porte la petite Cosette, toute convalescente de sa grande maladie, par le froid, par les chemins, et qu'elle deviendrait ce qu'elle pourrait, et qu'elle crĆØverait, si elle voulait. Ā«Cent francs, songea Fantine! Mais où y a-t-il un Ć©tat Ć  gagner cent sous par jour?Ā» --Allons! dit-elle, vendons le reste. L'infortunĆ©e se fit fille publique. Chapitre XI _Christus nos liberavit_ Qu'est-ce que c'est que cette histoire de Fantine? C'est la sociĆ©tĆ© achetant une esclave. ƀ qui? ƀ la misĆØre. ƀ la faim, au froid, Ć  l'isolement, Ć  l'abandon, au dĆ©nĆ»ment. MarchĆ© douloureux. Une Ć¢me pour un morceau de pain. La misĆØre offre, la sociĆ©tĆ© accepte. La sainte loi de JĆ©sus-Christ gouverne notre civilisation, mais elle ne la pĆ©nĆØtre pas encore. On dit que l'esclavage a disparu de la civilisation europĆ©enne. C'est une erreur. Il existe toujours, mais il ne pĆØse plus que sur la femme, et il s'appelle prostitution. Il pĆØse sur la femme, c'est-Ć -dire sur la grĆ¢ce, sur la faiblesse, sur la beautĆ©, sur la maternitĆ©. Ceci n'est pas une des moindres hontes de l'homme. Au point de ce douloureux drame où nous sommes arrivĆ©s, il ne reste plus rien Ć  Fantine de ce qu'elle a Ć©tĆ© autrefois. Elle est devenue marbre en devenant boue. Qui la touche a froid. Elle passe, elle vous subit et elle vous ignore; elle est la figure dĆ©shonorĆ©e et sĆ©vĆØre. La vie et l'ordre social lui ont dit leur dernier mot. Il lui est arrivĆ© tout ce qui lui arrivera. Elle a tout ressenti, tout supportĆ©, tout Ć©prouvĆ©, tout souffert, tout perdu, tout pleurĆ©. Elle est rĆ©signĆ©e de cette rĆ©signation qui ressemble Ć  l'indiffĆ©rence comme la mort ressemble au sommeil. Elle n'Ć©vite plus rien. Elle ne craint plus rien. Tombe sur elle toute la nuĆ©e et passe sur elle tout l'ocĆ©an! que lui importe! c'est une Ć©ponge imbibĆ©e. Elle le croit du moins, mais c'est une erreur de s'imaginer qu'on Ć©puise le sort et qu'on touche le fond de quoi que ce soit. HĆ©las! qu'est-ce que toutes ces destinĆ©es ainsi poussĆ©es pĆŖle-mĆŖle? où vont-elles? pourquoi sont-elles ainsi? Celui qui sait cela voit toute l'ombre. Il est seul. Il s'appelle Dieu. Chapitre XII Le dĆ©soeuvrement de M. Bamatabois Il y a dans toutes les petites villes, et il y avait Ć  Montreuil-sur-mer en particulier, une classe de jeunes gens qui grignotent quinze cents livres de rente en province du mĆŖme air dont leurs pareils dĆ©vorent Ć  Paris deux cent mille francs par an. Ce sont des ĆŖtres de la grande espĆØce neutre; hongres, parasites, nuls, qui ont un peu de terre, un peu de sottise et un peu d'esprit, qui seraient des rustres dans un salon et se croient des gentilshommes au cabaret, qui disent: mes prĆ©s, mes bois, mes paysans, sifflent les actrices du théâtre pour prouver qu'ils sont gens de goĆ»t, querellent les officiers de la garnison pour montrer qu'ils sont gens de guerre, chassent, fument, bĆ¢illent, boivent, sentent le tabac, jouent au billard, regardent les voyageurs descendre de diligence, vivent au cafĆ©, dĆ®nent Ć  l'auberge, ont un chien qui mange les os sous la table et une maĆ®tresse qui pose les plats dessus, tiennent Ć  un sou, exagĆØrent les modes, admirent la tragĆ©die, mĆ©prisent les femmes, usent leurs vieilles bottes, copient Londres Ć  travers Paris et Paris Ć  travers Pont-Ć -Mousson, vieillissent hĆ©bĆ©tĆ©s, ne travaillent pas, ne servent Ć  rien et ne nuisent pas Ć  grand'chose. M. FĆ©lix TholomyĆØs, restĆ© dans sa province et n'ayant jamais vu Paris, serait un de ces hommes-lĆ . S'ils Ć©taient plus riches, on dirait: ce sont des Ć©lĆ©gants; s'ils Ć©taient plus pauvres, on dirait: ce sont des fainĆ©ants. Ce sont tout simplement des dĆ©soeuvrĆ©s. Parmi ces dĆ©soeuvrĆ©s, il y a des ennuyeux, des ennuyĆ©s, des rĆŖvasseurs, et quelques drĆ“les. Dans ce temps-lĆ , un Ć©lĆ©gant se composait d'un grand col, d'une grande cravate, d'une montre Ć  breloques, de trois gilets superposĆ©s de couleurs diffĆ©rentes, le bleu et le rouge en dedans, d'un habit couleur olive Ć  taille courte, Ć  queue de morue, Ć  double rangĆ©e de boutons d'argent serrĆ©s les uns contre les autres et montant jusque sur l'Ć©paule, et d'un pantalon olive plus clair, ornĆ© sur les deux coutures d'un nombre de cĆ“tes indĆ©terminĆ©, mais toujours impair, variant de une Ć  onze, limite qui n'Ć©tait jamais franchie. Ajoutez Ć  cela des souliers-bottes avec de petits fers au talon, un chapeau Ć  haute forme et Ć  bords Ć©troits, des cheveux en touffe, une Ć©norme canne, et une conversation rehaussĆ©e des calembours de Potier. Sur le tout des Ć©perons et des moustaches. ƀ cette Ć©poque, des moustaches voulaient dire bourgeois et des Ć©perons voulaient dire piĆ©ton. L'Ć©lĆ©gant de province portait les Ć©perons plus longs et les moustaches plus farouches. C'Ć©tait le temps de la lutte des rĆ©publiques de l'AmĆ©rique mĆ©ridionale contre le roi d'Espagne, de Bolivar contre Morillo. Les chapeaux Ć  petits bords Ć©taient royalistes et se nommaient des morillos; les libĆ©raux portaient des chapeaux Ć  larges bords qui s'appelaient des bolivars. Huit ou dix mois donc aprĆØs ce qui a Ć©tĆ© racontĆ© dans les pages prĆ©cĆ©dentes, vers les premiers jours de janvier 1823, un soir qu'il avait neigĆ©, un de ces Ć©lĆ©gants, un de ces dĆ©soeuvrĆ©s, un "bien pensant", car il avait un morillo, de plus chaudement enveloppĆ© d'un de ces grands manteaux qui complĆ©taient dans les temps froids le costume Ć  la mode, se divertissait Ć  harceler une crĆ©ature qui rĆ“dait en robe de bal et toute dĆ©colletĆ©e avec des fleurs sur la tĆŖte devant la vitre du cafĆ© des officiers. Cet Ć©lĆ©gant fumait, car c'Ć©tait dĆ©cidĆ©ment la mode. Chaque fois que cette femme passait devant lui, il lui jetait, avec une bouffĆ©e de la fumĆ©e de son cigare, quelque apostrophe qu'il croyait spirituelle et gaie, comme:--Que tu es laide!--Veux-tu te cacher!--Tu n'as pas de dents! etc., etc.--Ce monsieur s'appelait monsieur Bamatabois. La femme, triste spectre parĆ© qui allait et venait sur la neige, ne lui rĆ©pondait pas, ne le regardait mĆŖme pas, et n'en accomplissait pas moins en silence et avec une rĆ©gularitĆ© sombre sa promenade qui la ramenait de cinq minutes en cinq minutes sous le sarcasme, comme le soldat condamnĆ© qui revient sous les verges. Ce peu d'effet piqua sans doute l'oisif qui, profitant d'un moment où elle se retournait, s'avanƧa derriĆØre elle Ć  pas de loup et en Ć©touffant son rire, se baissa, prit sur le pavĆ© une poignĆ©e de neige et la lui plongea brusquement dans le dos entre ses deux Ć©paules nues. La fille poussa un rugissement, se tourna, bondit comme une panthĆØre, et se rua sur l'homme, lui enfonƧant ses ongles dans le visage, avec les plus effroyables paroles qui puissent tomber du corps de garde dans le ruisseau. Ces injures, vomies d'une voix enrouĆ©e par l'eau-de-vie, sortaient hideusement d'une bouche Ć  laquelle manquaient en effet les deux dents de devant. C'Ć©tait la Fantine. Au bruit que cela fit, les officiers sortirent en foule du cafĆ©, les passants s'amassĆØrent, et il se forma un grand cercle riant, huant et applaudissant, autour de ce tourbillon composĆ© de deux ĆŖtres où l'on avait peine Ć  reconnaĆ®tre un homme et une femme, l'homme se dĆ©battant, son chapeau Ć  terre, la femme frappant des pieds et des poings, dĆ©coiffĆ©e, hurlant, sans dents et sans cheveux, livide de colĆØre, horrible. Tout Ć  coup un homme de haute taille sortit vivement de la foule, saisit la femme Ć  son corsage de satin couvert de boue, et lui dit: Suis-moi! La femme leva la tĆŖte; sa voix furieuse s'Ć©teignit subitement. Ses yeux Ć©taient vitreux, de livide elle Ć©tait devenue pĆ¢le, et elle tremblait d'un tremblement de terreur. Elle avait reconnu Javert. L'Ć©lĆ©gant avait profitĆ© de l'incident pour s'esquiver. Chapitre XIII Solution de quelques questions de police municipale Javert Ć©carta les assistants, rompit le cercle et se mit Ć  marcher Ć  grands pas vers le bureau de police qui est Ć  l'extrĆ©mitĆ© de la place, traĆ®nant aprĆØs lui la misĆ©rable. Elle se laissait faire machinalement. Ni lui ni elle ne disaient un mot. La nuĆ©e des spectateurs, au paroxysme de la joie, suivait avec des quolibets. La suprĆŖme misĆØre, occasion d'obscĆ©nitĆ©s. ArrivĆ© au bureau de police qui Ć©tait une salle basse chauffĆ©e par un poĆŖle et gardĆ©e par un poste, avec une porte vitrĆ©e et grillĆ©e sur la rue, Javert ouvrit la porte, entra avec Fantine, et referma la porte derriĆØre lui, au grand dĆ©sappointement des curieux qui se haussĆØrent sur la pointe du pied et allongĆØrent le cou devant la vitre trouble du corps de garde, cherchant Ć  voir. La curiositĆ© est une gourmandise. Voir, c'est dĆ©vorer. En entrant, la Fantine alla tomber dans un coin, immobile et muette, accroupie comme une chienne qui a peur. Le sergent du poste apporta une chandelle allumĆ©e sur une table. Javert s'assit, tira de sa poche une feuille de papier timbrĆ© et se mit Ć  Ć©crire. Ces classes de femmes sont entiĆØrement remises par nos lois Ć  la discrĆ©tion de la police. Elle en fait ce qu'elle veut, les punit comme bon lui semble, et confisque Ć  son grĆ© ces deux tristes choses qu'elles appellent leur industrie et leur libertĆ©. Javert Ć©tait impassible; son visage sĆ©rieux ne trahissait aucune Ć©motion. Pourtant il Ć©tait gravement et profondĆ©ment prĆ©occupĆ©. C'Ć©tait un de ces moments où il exerƧait sans contrĆ“le, mais avec tous les scrupules d'une conscience sĆ©vĆØre, son redoutable pouvoir discrĆ©tionnaire. En cet instant, il le sentait, son escabeau d'agent de police Ć©tait un tribunal. Il jugeait. Il jugeait, et il condamnait. Il appelait tout ce qu'il pouvait avoir d'idĆ©es dans l'esprit autour de la grande chose qu'il faisait. Plus il examinait le fait de cette fille, plus il se sentait rĆ©voltĆ©. Il Ć©tait Ć©vident qu'il venait de voir commettre un crime. Il venait de voir, lĆ  dans la rue, la sociĆ©tĆ©, reprĆ©sentĆ©e par un propriĆ©taire-Ć©lecteur, insultĆ©e et attaquĆ©e par une crĆ©ature en dehors de tout. Une prostituĆ©e avait attentĆ© Ć  un bourgeois. Il avait vu cela, lui Javert. Il Ć©crivait en silence. Quand il eut fini, il signa, plia le papier et dit au sergent du poste, en le lui remettant: --Prenez trois hommes, et menez cette fille au bloc. Puis se tournant vers la Fantine: --Tu en as pour six mois. La malheureuse tressaillit. --Six mois! six mois de prison! Six mois Ć  gagner sept sous par jour! Mais que deviendra Cosette? ma fille! ma fille! Mais je dois encore plus de cent francs aux ThĆ©nardier, monsieur l'inspecteur, savez-vous cela? Elle se traĆ®na sur la dalle mouillĆ©e par les bottes boueuses de tous ces hommes, sans se lever, joignant les mains, faisant de grands pas avec ses genoux. --Monsieur Javert, dit-elle, je vous demande grĆ¢ce. Je vous assure que je n'ai pas eu tort. Si vous aviez vu le commencement, vous auriez vu! je vous jure le bon Dieu que je n'ai pas eu tort. C'est ce monsieur le bourgeois que je ne connais pas qui m'a mis de la neige dans le dos. Est-ce qu'on a le droit de nous mettre de la neige dans le dos quand nous passons comme cela tranquillement sans faire de mal Ć  personne? Cela m'a saisie. Je suis un peu malade, voyez-vous! Et puis il y avait dĆ©jĆ  un peu de temps qu'il me disait des raisons. Tu es laide! tu n'as pas de dents! Je le sais bien que je n'ai plus mes dents. Je ne faisais rien, moi; je disais: c'est un monsieur qui s'amuse. J'Ć©tais honnĆŖte avec lui, je ne lui parlais pas. C'est Ć  cet instant-lĆ  qu'il m'a mis de la neige. Monsieur Javert, mon bon monsieur l'inspecteur! est-ce qu'il n'y a personne lĆ  qui ait vu pour vous dire que c'est bien vrai? J'ai peut-ĆŖtre eu tort de me fĆ¢cher. Vous savez, dans le premier moment, on n'est pas maĆ®tre. On a des vivacitĆ©s. Et puis, quelque chose de si froid qu'on vous met dans le dos Ć  l'heure que vous ne vous y attendez pas! J'ai eu tort d'abĆ®mer le chapeau de ce monsieur. Pourquoi s'est-il en allĆ©? Je lui demanderais pardon. Oh! mon Dieu, cela me serait bien Ć©gal de lui demander pardon. Faites-moi grĆ¢ce pour aujourd'hui cette fois, monsieur Javert. Tenez, vous ne savez pas Ƨa, dans les prisons on ne gagne que sept sous, ce n'est pas la faute du gouvernement, mais on gagne sept sous, et figurez-vous que j'ai cent francs Ć  payer, ou autrement on me renverra ma petite. Ɣ mon Dieu! je ne peux pas l'avoir avec moi. C'est si vilain ce que je fais! Ɣ ma Cosette, Ć“ mon petit ange de la bonne sainte Vierge, qu'est-ce qu'elle deviendra, pauvre loup! Je vais vous dire, c'est les ThĆ©nardier, des aubergistes, des paysans, Ƨa n'a pas de raisonnement. Il leur faut de l'argent. Ne me mettez pas en prison! Voyez-vous, c'est une petite qu'on mettrait Ć  mĆŖme sur la grande route, va comme tu pourras, en plein coeur d'hiver, il faut avoir pitiĆ© de cette chose-lĆ , mon bon monsieur Javert. Si c'Ć©tait plus grand, Ƨa gagnerait sa vie, mais Ƨa ne peut pas, Ć  ces Ć¢ges-lĆ . Je ne suis pas une mauvaise femme au fond. Ce n'est pas la lĆ¢chetĆ© et la gourmandise qui ont fait de moi Ƨa. J'ai bu de l'eau-de-vie, c'est par misĆØre. Je ne l'aime pas, mais cela Ć©tourdit. Quand j'Ć©tais plus heureuse, on n'aurait eu qu'Ć  regarder dans mes armoires, on aurait bien vu que je n'Ć©tais pas une femme coquette qui a du dĆ©sordre. J'avais du linge, beaucoup de linge. Ayez pitiĆ© de moi, monsieur Javert! Elle parlait ainsi, brisĆ©e en deux, secouĆ©e par les sanglots, aveuglĆ©e par les larmes, la gorge nue, se tordant les mains, toussant d'une toux sĆØche et courte, balbutiant tout doucement avec la voix de l'agonie. La grande douleur est un rayon divin et terrible qui transfigure les misĆ©rables. ƀ ce moment-lĆ , la Fantine Ć©tait redevenue belle. ƀ de certains instants, elle s'arrĆŖtait et baisait tendrement le bas de la redingote du mouchard. Elle eĆ»t attendri un coeur de granit, mais on n'attendrit pas un coeur de bois. --Allons! dit Javert, je t'ai Ć©coutĆ©e. As-tu bien tout dit? Marche Ć  prĆ©sent! Tu as tes six mois; _le PĆØre Ć©ternel en personne n'y pourrait plus rien_. ƀ cette solennelle parole, Le PĆØre Ć©ternel en personne n'y pourrait plus rien, elle comprit que l'arrĆŖt Ć©tait prononcĆ©. Elle s'affaissa sur elle-mĆŖme en murmurant: --GrĆ¢ce! Javert tourna le dos. Les soldats la saisirent par les bras. Depuis quelques minutes, un homme Ć©tait entrĆ© sans qu'on eĆ»t pris garde Ć  lui. Il avait refermĆ© la porte, s'y Ć©tait adossĆ©, et avait entendu les priĆØres dĆ©sespĆ©rĆ©es de la Fantine. Au moment où les soldats mirent la main sur la malheureuse, qui ne voulait pas se lever, il fit un pas, sortit de l'ombre, et dit: --Un instant, s'il vous plaĆ®t! Javert leva les yeux et reconnut M. Madeleine. Il Ć“ta son chapeau, et saluant avec une sorte de gaucherie fĆ¢chĆ©e: --Pardon, monsieur le maire.... Ce mot, monsieur le maire, fit sur la Fantine un effet Ć©trange. Elle se dressa debout tout d'une piĆØce comme un spectre qui sort de terre, repoussa les soldats des deux bras, marcha droit Ć  M. Madeleine avant qu'on eĆ»t pu la retenir, et le regardant fixement, l'air Ć©garĆ©, elle cria: --Ah! c'est donc toi qui es monsieur le maire! Puis elle Ć©clata de rire et lui cracha au visage. M. Madeleine s'essuya le visage, et dit: --Inspecteur Javert, mettez cette femme en libertĆ©. Javert se sentit au moment de devenir fou. Il Ć©prouvait en cet instant, coup sur coup, et presque mĆŖlĆ©es ensemble, les plus violentes Ć©motions qu'il eĆ»t ressenties de sa vie. Voir une fille publique cracher au visage d'un maire, cela Ć©tait une chose si monstrueuse que, dans ses suppositions les plus effroyables, il eĆ»t regardĆ© comme un sacrilĆØge de le croire possible. D'un autre cĆ“tĆ©, dans le fond de sa pensĆ©e, il faisait confusĆ©ment un rapprochement hideux entre ce qu'Ć©tait cette femme et ce que pouvait ĆŖtre ce maire, et alors il entrevoyait avec horreur je ne sais quoi de tout simple dans ce prodigieux attentat. Mais quand il vit ce maire, ce magistrat, s'essuyer tranquillement le visage et dire: _mettez cette femme en libertĆ©_, il eut comme un Ć©blouissement de stupeur; la pensĆ©e et la parole lui manquĆØrent Ć©galement; la somme de l'Ć©tonnement possible Ć©tait dĆ©passĆ©e pour lui. Il resta muet. Ce mot n'avait pas portĆ© un coup moins Ć©trange Ć  la Fantine. Elle leva son bras nu et se cramponna Ć  la clef du poĆŖle comme une personne qui chancelle. Cependant elle regardait tout autour d'elle et elle se mit Ć  parler Ć  voix basse, comme si elle se parlait Ć  elle-mĆŖme. --En libertĆ©! qu'on me laisse aller! que je n'aille pas en prison six mois! Qui est-ce qui a dit cela? Il n'est pas possible qu'on ait dit cela. J'ai mal entendu. Ƈa ne peut pas ĆŖtre ce monstre de maire! Est-ce que c'est vous, mon bon monsieur Javert, qui avez dit qu'on me mette en libertĆ©? Oh! voyez-vous! je vais vous dire et vous me laisserez aller. Ce monstre de maire, ce vieux gredin de maire, c'est lui qui est cause de tout. Figurez-vous, monsieur Javert, qu'il m'a chassĆ©e! Ć  cause d'un tas de gueuses qui tiennent des propos dans l'atelier. Si ce n'est pas lĆ  une horreur! renvoyer une pauvre fille qui fait honnĆŖtement son ouvrage! Alors je n'ai plus gagnĆ© assez, et tout le malheur est venu. D'abord il y a une amĆ©lioration que ces messieurs de la police devraient bien faire, ce serait d'empĆŖcher les entrepreneurs des prisons de faire du tort aux pauvres gens. Je vais vous expliquer cela, voyez-vous. Vous gagnez douze sous dans les chemises, cela tombe Ć  neuf sous, il n'y a plus moyen de vivre. Il faut donc devenir ce qu'on peut. Moi, j'avais ma petite Cosette, j'ai bien Ć©tĆ© forcĆ©e de devenir une mauvaise femme. Vous comprenez Ć  prĆ©sent, que c'est ce gueux de maire qui a tout fait le mal. AprĆØs cela, j'ai piĆ©tinĆ© le chapeau de ce monsieur bourgeois devant le cafĆ© des officiers. Mais lui, il m'avait perdu toute ma robe avec sa neige. Nous autres, nous n'avons qu'une robe de soie, pour le soir. Voyez-vous, je n'ai jamais fait de mal exprĆØs, vrai, monsieur Javert, et je vois partout des femmes bien plus mĆ©chantes que moi qui sont bien plus heureuses. Ɣ monsieur Javert, c'est vous qui avez dit qu'on me mette dehors, n'est-ce pas? Prenez des informations, parlez Ć  mon propriĆ©taire, maintenant je paye mon terme, on vous dira bien que je suis honnĆŖte. Ah! mon Dieu, je vous demande pardon, j'ai touchĆ©, sans faire attention, Ć  la clef du poĆŖle, et cela fait fumer. M. Madeleine l'Ć©coutait avec une attention profonde. Pendant qu'elle parlait, il avait fouillĆ© dans son gilet, en avait tirĆ© sa bourse et l'avait ouverte. Elle Ć©tait vide. Il l'avait remise dans sa poche. Il dit Ć  la Fantine: --Combien avez-vous dit que vous deviez? La Fantine, qui ne regardait que Javert, se retourna de son cĆ“tĆ©: --Est-ce que je te parle Ć  toi! Puis s'adressant aux soldats: --Dites donc, vous autres, avez-vous vu comme je te vous lui ai crachĆ© Ć  la figure? Ah! vieux scĆ©lĆ©rat de maire, tu viens ici pour me faire peur, mais je n'ai pas peur de toi. J'ai peur de monsieur Javert. J'ai peur de mon bon monsieur Javert! En parlant ainsi elle se retourna vers l'inspecteur: --Avec Ƨa, voyez-vous, monsieur l'inspecteur, il faut ĆŖtre juste. Je comprends que vous ĆŖtes juste, monsieur l'inspecteur. Au fait, c'est tout simple, un homme qui joue Ć  mettre un peu de neige dans le dos d'une femme, Ƨa les faisait rire, les officiers, il faut bien qu'on se divertisse Ć  quelque chose, nous autres nous sommes lĆ  pour qu'on s'amuse, quoi! Et puis, vous, vous venez, vous ĆŖtes bien forcĆ© de mettre l'ordre, vous emmenez la femme qui a tort, mais en y rĆ©flĆ©chissant, comme vous ĆŖtes bon, vous dites qu'on me mette en libertĆ©, c'est pour la petite, parce que six mois en prison, cela m'empĆŖcherait de nourrir mon enfant. Seulement n'y reviens plus, coquine! Oh! je n'y reviendrai plus, monsieur Javert! on me fera tout ce qu'on voudra maintenant, je ne bougerai plus. Seulement, aujourd'hui, voyez-vous, j'ai criĆ© parce que cela m'a fait mal, je ne m'attendais pas du tout Ć  cette neige de ce monsieur, et puis, je vous ai dit, je ne me porte pas trĆØs bien, je tousse, j'ai lĆ  dans l'estomac comme une boule qui me brĆ»le, que le mĆ©decin me dit: soignez-vous. Tenez, tĆ¢tez, donnez votre main, n'ayez pas peur, c'est ici. Elle ne pleurait plus, sa voix Ć©tait caressante, elle appuyait sur sa gorge blanche et dĆ©licate la grosse main rude de Javert, et elle le regardait en souriant. Tout Ć  coup elle rajusta vivement le dĆ©sordre de ses vĆŖtements, fit retomber les plis de sa robe qui en se traĆ®nant s'Ć©tait relevĆ©e presque Ć  la hauteur du genou, et marcha vers la porte en disant Ć  demi-voix aux soldats avec un signe de tĆŖte amical: --Les enfants, monsieur l'inspecteur a dit qu'on me lĆ¢che, je m'en vas. Elle mit la main sur le loquet. Un pas de plus, elle Ć©tait dans la rue. Javert jusqu'Ć  cet instant Ć©tait restĆ© debout, immobile, l'oeil fixĆ© Ć  terre, posĆ© de travers au milieu de cette scĆØne comme une statue dĆ©rangĆ©e qui attend qu'on la mette quelque part. Le bruit que fit le loquet le rĆ©veilla. Il releva la tĆŖte avec une expression d'autoritĆ© souveraine, expression toujours d'autant plus effrayante que le pouvoir se trouve placĆ© plus bas, fĆ©roce chez la bĆŖte fauve, atroce chez l'homme de rien. --Sergent, cria-t-il, vous ne voyez pas que cette drĆ“lesse s'en va! Qui est-ce qui vous a dit de la laisser aller? --Moi, dit Madeleine. La Fantine Ć  la voix de Javert avait tremblĆ© et lĆ¢chĆ© le loquet comme un voleur pris lĆ¢che l'objet volĆ©. ƀ la voix de Madeleine, elle se retourna, et Ć  partir de ce moment, sans qu'elle prononçât un mot, sans qu'elle osĆ¢t mĆŖme laisser sortir son souffle librement, son regard alla tour Ć  tour de Madeleine Ć  Javert et de Javert Ć  Madeleine, selon que c'Ć©tait l'un ou l'autre qui parlait. Il Ć©tait Ć©vident qu'il fallait que Javert eĆ»t Ć©tĆ©, comme on dit, Ā«jetĆ© hors des gondsĀ» pour qu'il se fĆ»t permis d'apostropher le sergent comme il l'avait fait, aprĆØs l'invitation du maire de mettre Fantine en libertĆ©. En Ć©tait-il venu Ć  oublier la prĆ©sence de monsieur le maire? Avait-il fini par se dĆ©clarer Ć  lui-mĆŖme qu'il Ć©tait impossible qu'une Ā«autorité» eĆ»t donnĆ© un pareil ordre, et que bien certainement monsieur le maire avait dĆ» dire sans le vouloir une chose pour une autre? Ou bien, devant les Ć©normitĆ©s dont il Ć©tait tĆ©moin depuis deux heures, se disait-il qu'il fallait revenir aux suprĆŖmes rĆ©solutions, qu'il Ć©tait nĆ©cessaire que le petit se fit grand, que le mouchard se transformĆ¢t en magistrat, que l'homme de police devĆ®nt homme de justice, et qu'en cette extrĆ©mitĆ© prodigieuse l'ordre, la loi, la morale, le gouvernement, la sociĆ©tĆ© tout entiĆØre, se personnifiaient en lui Javert? Quoi qu'il en soit, quand M. Madeleine eut dit ce moi qu'on vient d'entendre, on vit l'inspecteur de police Javert se tourner vers monsieur le maire, pĆ¢le, froid, les lĆØvres bleues, le regard dĆ©sespĆ©rĆ©, tout le corps agitĆ© d'un tremblement imperceptible, et, chose inouĆÆe, lui dire, l'oeil baissĆ©, mais la voix ferme: --Monsieur le maire, cela ne se peut pas. --Comment? dit M. Madeleine. --Cette malheureuse a insultĆ© un bourgeois. --Inspecteur Javert, repartit M. Madeleine avec un accent conciliant et calme, Ć©coutez. Vous ĆŖtes un honnĆŖte homme, et je ne fais nulle difficultĆ© de m'expliquer avec vous. Voici le vrai. Je passais sur la place comme vous emmeniez cette femme, il y avait encore des groupes, je me suis informĆ©, j'ai tout su, c'est le bourgeois qui a eu tort et qui, en bonne police, eĆ»t dĆ» ĆŖtre arrĆŖtĆ©. Javert reprit: --Cette misĆ©rable vient d'insulter monsieur le maire. --Ceci me regarde, dit M. Madeleine. Mon injure est Ć  moi peut-ĆŖtre. J'en puis faire ce que je veux. --Je demande pardon Ć  monsieur le maire. Son injure n'est pas Ć  lui, elle est Ć  la justice. --Inspecteur Javert, rĆ©pliqua M. Madeleine, la premiĆØre justice, c'est la conscience. J'ai entendu cette femme. Je sais ce que je fais. --Et moi, monsieur le maire, je ne sais pas ce que je vois. --Alors contentez-vous d'obĆ©ir. --J'obĆ©is Ć  mon devoir. Mon devoir veut que cette femme fasse six mois de prison. M. Madeleine rĆ©pondit avec douceur: --Ɖcoutez bien ceci. Elle n'en fera pas un jour. ƀ cette parole dĆ©cisive, Javert osa regarder le maire fixement, et lui dit, mais avec un son de voix toujours profondĆ©ment respectueux: --Je suis au dĆ©sespoir de rĆ©sister Ć  monsieur le maire, c'est la premiĆØre fois de ma vie, mais il daignera me permettre de lui faire observer que je suis dans la limite de mes attributions. Je reste, puisque monsieur le maire le veut, dans le fait du bourgeois. J'Ć©tais lĆ . C'est cette fille qui s'est jetĆ©e sur monsieur Bamatabois, qui est Ć©lecteur et propriĆ©taire de cette belle maison Ć  balcon qui fait le coin de l'esplanade, Ć  trois Ć©tages et toute en pierre de taille. Enfin, il y a des choses dans ce monde! Quoi qu'il en soit, monsieur le maire, cela, c'est un fait de police de la rue qui me regarde, et je retiens la femme Fantine. Alors M. Madeleine croisa les bras et dit avec une voix sĆ©vĆØre que personne dans la ville n'avait encore entendue: --Le fait dont vous parlez est un fait de police municipale. Aux termes des articles neuf, onze, quinze et soixante-six du code d'instruction criminelle, j'en suis juge. J'ordonne que cette femme soit mise en libertĆ©. Javert voulut tenter un dernier effort. --Mais, monsieur le maire.... --Je vous rappelle, Ć  vous, l'article quatre-vingt-un de la loi du 13 dĆ©cembre 1799 sur la dĆ©tention arbitraire. --Monsieur le maire, permettez.... --Plus un mot. --Pourtant.... --Sortez, dit M. Madeleine. Javert reƧut le coup, debout, de face, et en pleine poitrine comme un soldat russe. Il salua jusqu'Ć  terre monsieur le maire, et sortit. Fantine se rangea de la porte et le regarda avec stupeur passer devant elle. Cependant elle aussi Ć©tait en proie Ć  un bouleversement Ć©trange. Elle venait de se voir en quelque sorte disputĆ©e par deux puissances opposĆ©es. Elle avait vu lutter devant ses yeux deux hommes tenant dans leurs mains sa libertĆ©, sa vie, son Ć¢me, son enfant; l'un de ces hommes la tirait du cĆ“tĆ© de l'ombre, l'autre la ramenait vers la lumiĆØre. Dans cette lutte, entrevue Ć  travers les grossissements de l'Ć©pouvante, ces deux hommes lui Ć©taient apparus comme deux gĆ©ants; l'un parlait comme son dĆ©mon, l'autre parlait comme son bon ange. L'ange avait vaincu le dĆ©mon, et, chose qui la faisait frissonner de la tĆŖte aux pieds, cet ange, ce libĆ©rateur, c'Ć©tait prĆ©cisĆ©ment l'homme qu'elle abhorrait, ce maire qu'elle avait si longtemps considĆ©rĆ© comme l'auteur de tous ses maux, ce Madeleine! et au moment mĆŖme où elle venait de l'insulter d'une faƧon hideuse, il la sauvait! S'Ć©tait-elle donc trompĆ©e? Devait-elle donc changer toute son Ć¢me?... Elle ne savait, elle tremblait. Elle Ć©coutait Ć©perdue, elle regardait effarĆ©e, et Ć  chaque parole que disait M. Madeleine, elle sentait fondre et s'Ć©crouler en elle les affreuses tĆ©nĆØbres de la haine et naĆ®tre dans son coeur je ne sais quoi de rĆ©chauffant et d'ineffable qui Ć©tait de la joie, de la confiance et de l'amour. Quand Javert fut sorti, M. Madeleine se tourna vers elle, et lui dit avec une voix lente, ayant peine Ć  parler comme un homme sĆ©rieux qui ne veut pas pleurer: --Je vous ai entendue. Je ne savais rien de ce que vous avez dit. Je crois que c'est vrai, et je sens que c'est vrai. J'ignorais mĆŖme que vous eussiez quittĆ© mes ateliers. Pourquoi ne vous ĆŖtes-vous pas adressĆ©e Ć  moi? Mais voici: je payerai vos dettes, je ferai venir votre enfant, ou vous irez la rejoindre. Vous vivrez ici, Ć  Paris, où vous voudrez. Je me charge de votre enfant et de vous. Vous ne travaillerez plus, si vous voulez. Je vous donnerai tout l'argent qu'il vous faudra. Vous redeviendrez honnĆŖte en redevenant heureuse. Et mĆŖme, Ć©coutez, je vous le dĆ©clare dĆØs Ć  prĆ©sent, si tout est comme vous le dites, et je n'en doute pas, vous n'avez jamais cessĆ© d'ĆŖtre vertueuse et sainte devant Dieu. Oh! pauvre femme! C'en Ć©tait plus que la pauvre Fantine n'en pouvait supporter. Avoir Cosette! sortir de cette vie infĆ¢me! vivre libre, riche, heureuse, honnĆŖte, avec Cosette! voir brusquement s'Ć©panouir au milieu de sa misĆØre toutes ces rĆ©alitĆ©s du paradis! Elle regarda comme hĆ©bĆ©tĆ©e cet homme qui lui parlait, et ne put que jeter deux ou trois sanglots: oh! oh! oh! Ses jarrets pliĆØrent, elle se mit Ć  genoux devant M. Madeleine, et, avant qu'il eĆ»t pu l'en empĆŖcher, il sentit qu'elle lui prenait la main et que ses lĆØvres s'y posaient. Puis elle s'Ć©vanouit. Livre sixiĆØme--Javert Chapitre I Commencement du repos M. Madeleine fit transporter la Fantine Ć  cette infirmerie qu'il avait dans sa propre maison. Il la confia aux soeurs qui la mirent au lit. Une fiĆØvre ardente Ć©tait survenue. Elle passa une partie de la nuit Ć  dĆ©lirer et Ć  parler haut. Cependant elle finit par s'endormir. Le lendemain vers midi Fantine se rĆ©veilla, elle entendit une respiration tout prĆØs de son lit, elle Ć©carta son rideau et vit M. Madeleine debout qui regardait quelque chose au-dessus de sa tĆŖte. Ce regard Ć©tait plein de pitiĆ© et d'angoisse et suppliait. Elle en suivit la direction et vit qu'il s'adressait Ć  un crucifix clouĆ© au mur. M. Madeleine Ć©tait dĆ©sormais transfigurĆ© aux yeux de Fantine. Il lui paraissait enveloppĆ© de lumiĆØre. Il Ć©tait absorbĆ© dans une sorte de priĆØre. Elle le considĆ©ra longtemps sans oser l'interrompre. Enfin elle lui dit timidement: --Que faites-vous donc lĆ ? M. Madeleine Ć©tait Ć  cette place depuis une heure. Il attendait que Fantine se rĆ©veillĆ¢t. Il lui prit la main, lui tĆ¢ta le pouls, et rĆ©pondit: --Comment ĆŖtes-vous? --Bien, j'ai dormi, dit-elle, je crois que je vais mieux. Ce ne sera rien. Lui reprit, rĆ©pondant Ć  la question qu'elle lui avait adressĆ©e d'abord, comme s'il ne faisait que de l'entendre: --Je priais le martyr qui est lĆ -haut. Et il ajouta dans sa pensĆ©e: Ā«Pour la martyre qui est ici-bas.Ā» M. Madeleine avait passĆ© la nuit et la matinĆ©e Ć  s'informer. Il savait tout maintenant. Il connaissait dans tous ses poignants dĆ©tails l'histoire de Fantine. Il continua: --Vous avez bien souffert, pauvre mĆØre. Oh! ne vous plaignez pas, vous avez Ć  prĆ©sent la dot des Ć©lus. C'est de cette faƧon que les hommes font des anges. Ce n'est point leur faute; ils ne savent pas s'y prendre autrement. Voyez-vous, cet enfer dont vous sortez est la premiĆØre forme du ciel. Il fallait commencer par lĆ . Il soupira profondĆ©ment. Elle cependant lui souriait avec ce sublime sourire auquel il manquait deux dents. Javert dans cette mĆŖme nuit avait Ć©crit une lettre. Il remit lui-mĆŖme cette lettre le lendemain matin au bureau de poste de Montreuil-sur-mer. Elle Ć©tait pour Paris, et la suscription portait: ƀ _monsieur Chabouillet, secrĆ©taire de monsieur le prĆ©fet de police_. Comme l'affaire du corps de garde s'Ć©tait Ć©bruitĆ©e, la directrice du bureau de poste et quelques autres personnes qui virent la lettre avant le dĆ©part et qui reconnurent l'Ć©criture de Javert sur l'adresse, pensĆØrent que c'Ć©tait sa dĆ©mission qu'il envoyait. M. Madeleine se hĆ¢ta d'Ć©crire aux ThĆ©nardier. Fantine leur devait cent vingt francs. Il leur envoya trois cents francs en leur disant de se payer sur cette somme, et d'amener tout de suite l'enfant Ć  Montreuil-sur-mer où sa mĆØre malade la rĆ©clamait. Ceci Ć©blouit le ThĆ©nardier. --Diable! dit-il Ć  sa femme, ne lĆ¢chons pas l'enfant. VoilĆ  que cette mauviette va devenir une vache Ć  lait. Je devine. Quelque jocrisse se sera amourachĆ© de la mĆØre. Il riposta par un mĆ©moire de cinq cents et quelques francs fort bien fait. Dans ce mĆ©moire figuraient pour plus de trois cents francs deux notes incontestables, l'une d'un mĆ©decin, l'autre d'un apothicaire, lesquels avaient soignĆ© et mĆ©dicamentĆ© dans deux longues maladies Ɖponine et Azelma. Cosette, nous l'avons dit, n'avait pas Ć©tĆ© malade. Ce fut l'affaire d'une toute petite substitution de noms. ThĆ©nardier mit au bas du mĆ©moire: _reƧu Ć  compte trois cents francs_. M. Madeleine envoya tout de suite trois cents autres francs et Ć©crivit: DĆ©pĆŖchez-vous d'amener Cosette. --Christi! dit le ThĆ©nardier, ne lĆ¢chons pas l'enfant. Cependant Fantine ne se rĆ©tablissait point. Elle Ć©tait toujours Ć  l'infirmerie. Les soeurs n'avaient d'abord reƧu et soignĆ© Ā«cette filleĀ» qu'avec rĆ©pugnance. Qui a vu les bas-reliefs de Reims se souvient du gonflement de la lĆØvre infĆ©rieure des vierges sages regardant les vierges folles. Cet antique mĆ©pris des vestales pour les ambulaĆÆes est un des plus profonds instincts de la dignitĆ© fĆ©minine; les soeurs l'avaient Ć©prouvĆ©, avec le redoublement qu'ajoute la religion. Mais, en peu de jours, Fantine les avait dĆ©sarmĆ©es. Elle avait toutes sortes de paroles humbles et douces, et la mĆØre qui Ć©tait en elle attendrissait. Un jour les soeurs l'entendirent qui disait Ć  travers la fiĆØvre: --J'ai Ć©tĆ© une pĆ©cheresse, mais quand j'aurai mon enfant prĆØs de moi, cela voudra dire que Dieu m'a pardonnĆ©. Pendant que j'Ć©tais dans le mal, je n'aurais pas voulu avoir ma Cosette avec moi, je n'aurais pas pu supporter ses yeux Ć©tonnĆ©s et tristes. C'Ć©tait pour elle pourtant que je faisais le mal, et c'est ce qui fait que Dieu me pardonne. Je sentirai la bĆ©nĆ©diction du bon Dieu quand Cosette sera ici. Je la regarderai, cela me fera du bien de voir cette innocente. Elle ne sait rien du tout. C'est un ange, voyez-vous, mes soeurs. ƀ cet Ć¢ge-lĆ , les ailes, Ƨa n'est pas encore tombĆ©. M. Madeleine l'allait voir deux fois par jour, et chaque fois elle lui demandait: --Verrai-je bientĆ“t ma Cosette? Il lui rĆ©pondait: --Peut-ĆŖtre demain matin. D'un moment Ć  l'autre elle arrivera, je l'attends. Et le visage pĆ¢le de la mĆØre rayonnait. --Oh! disait-elle, comme je vais ĆŖtre heureuse! Nous venons de dire qu'elle ne se rĆ©tablissait pas. Au contraire, son Ć©tat semblait s'aggraver de semaine en semaine. Cette poignĆ©e de neige appliquĆ©e Ć  nu sur la peau entre les deux omoplates avait dĆ©terminĆ© une suppression subite de transpiration Ć  la suite de laquelle la maladie qu'elle couvait depuis plusieurs annĆ©es finit par se dĆ©clarer violemment. On commenƧait alors Ć  suivre pour l'Ć©tude et le traitement des maladies de poitrine les belles indications de Laennec. Le mĆ©decin ausculta Fantine et hocha la tĆŖte. M. Madeleine dit au mĆ©decin: --Eh bien? --N'a-t-elle pas un enfant qu'elle dĆ©sire voir? dit le mĆ©decin. --Oui. --Eh bien, hĆ¢tez-vous de le faire venir. M. Madeleine eut un tressaillement. Fantine lui demanda: --Qu'a dit le mĆ©decin? M. Madeleine s'efforƧa de sourire. --Il a dit de faire venir bien vite votre enfant. Que cela vous rendra la santĆ©. --Oh! reprit-elle, il a raison! Mais qu'est-ce qu'ils ont donc ces ThĆ©nardier Ć  me garder ma Cosette! Oh! elle va venir. Voici enfin que je vois le bonheur tout prĆØs de moi! Le ThĆ©nardier cependant ne Ā«lĆ¢chait pas l'enfantĀ» et donnait cent mauvaises raisons. Cosette Ć©tait un peu souffrante pour se mettre en route l'hiver. Et puis il y avait un reste de petites dettes criardes dans le pays dont il rassemblait les factures, etc., etc. --J'enverrai quelqu'un chercher Cosette, dit le pĆØre Madeleine. S'il le faut, j'irai moi-mĆŖme. Il Ć©crivit sous la dictĆ©e de Fantine cette lettre qu'il lui fit signer: Ā«Monsieur ThĆ©nardier, Ā«Vous remettrez Cosette Ć  la personne. Ā«On vous payera toutes les petites choses. Ā«J'ai l'honneur de vous saluer avec considĆ©ration. Ā«Fantine.Ā» Sur ces entrefaites, il survint un grave incident. Nous avons beau tailler de notre mieux le bloc mystĆ©rieux dont notre vie est faite, la veine noire de la destinĆ©e y reparaĆ®t toujours. Chapitre II Comment Jean peut devenir Champ Un matin, M. Madeleine Ć©tait dans son cabinet, occupĆ© Ć  rĆ©gler d'avance quelques affaires pressantes de la mairie pour le cas où il se dĆ©ciderait Ć  ce voyage de Montfermeil, lorsqu'on vint lui dire que l'inspecteur de police Javert demandait Ć  lui parler. En entendant prononcer ce nom, M. Madeleine ne put se dĆ©fendre d'une impression dĆ©sagrĆ©able. Depuis l'aventure du bureau de police, Javert l'avait plus que jamais Ć©vitĆ©, et M. Madeleine ne l'avait point revu. --Faites entrer, dit-il. Javert entra. M. Madeleine Ć©tait restĆ© assis prĆØs de la cheminĆ©e, une plume Ć  la main, l'oeil sur un dossier qu'il feuilletait et qu'il annotait, et qui contenait des procĆØs-verbaux de contraventions Ć  la police de la voirie. Il ne se dĆ©rangea point pour Javert. Il ne pouvait s'empĆŖcher de songer Ć  la pauvre Fantine, et il lui convenait d'ĆŖtre glacial. Javert salua respectueusement M. le maire qui lui tournait le dos. M. le maire ne le regarda pas et continua d'annoter son dossier. Javert fit deux ou trois pas dans le cabinet, et s'arrĆŖta sans rompre le silence. Un physionomiste qui eĆ»t Ć©tĆ© familier avec la nature de Javert, qui eĆ»t Ć©tudiĆ© depuis longtemps ce sauvage au service de la civilisation, ce composĆ© bizarre du Romain, du Spartiate, du moine et du caporal, cet espion incapable d'un mensonge, ce mouchard vierge, un physionomiste qui eĆ»t su sa secrĆØte et ancienne aversion pour M. Madeleine, son conflit avec le maire au sujet de la Fantine, et qui eĆ»t considĆ©rĆ© Javert en ce moment, se fĆ»t dit: que s'est-il passĆ©? Il Ć©tait Ć©vident, pour qui eĆ»t connu cette conscience droite, claire, sincĆØre, probe, austĆØre et fĆ©roce, que Javert sortait de quelque grand Ć©vĆ©nement intĆ©rieur. Javert n'avait rien dans l'Ć¢me qu'il ne l'eĆ»t aussi sur le visage. Il Ć©tait, comme les gens violents, sujet aux revirements brusques. Jamais sa physionomie n'avait Ć©tĆ© plus Ć©trange et plus inattendue. En entrant, il s'Ć©tait inclinĆ© devant M. Madeleine avec un regard où il n'y avait ni rancune, ni colĆØre, ni dĆ©fiance, il s'Ć©tait arrĆŖtĆ© Ć  quelques pas derriĆØre le fauteuil du maire; et maintenant il se tenait lĆ , debout, dans une attitude presque disciplinaire, avec la rudesse naĆÆve et froide d'un homme qui n'a jamais Ć©tĆ© doux et qui a toujours Ć©tĆ© patient; il attendait, sans dire un mot, sans faire un mouvement, dans une humilitĆ© vraie et dans une rĆ©signation tranquille, qu'il plĆ»t Ć  monsieur le maire de se retourner, calme, sĆ©rieux, le chapeau Ć  la main, les yeux baissĆ©s, avec une expression qui tenait le milieu entre le soldat devant son officier et le coupable devant son juge. Tous les sentiments comme tous les souvenirs qu'on eĆ»t pu lui supposer avaient disparu. Il n'y avait plus rien sur ce visage impĆ©nĆ©trable et simple comme le granit, qu'une morne tristesse. Toute sa personne respirait l'abaissement et la fermetĆ©, et je ne sais quel accablement courageux. Enfin M. le maire posa sa plume et se tourna Ć  demi. --Eh bien! qu'est-ce? qu'y a-t-il, Javert? Javert demeura un instant silencieux comme s'il se recueillait, puis Ć©leva la voix avec une sorte de solennitĆ© triste qui n'excluait pourtant pas la simplicitĆ©: --Il y a, monsieur le maire, qu'un acte coupable a Ć©tĆ© commis. --Quel acte? --Un agent infĆ©rieur de l'autoritĆ© a manquĆ© de respect Ć  un magistrat de la faƧon la plus grave. Je viens, comme c'est mon devoir, porter le fait Ć  votre connaissance. --Quel est cet agent? demanda M. Madeleine. --Moi, dit Javert. --Vous? --Moi. --Et quel est le magistrat qui aurait Ć  se plaindre de l'agent? --Vous, monsieur le maire. M. Madeleine se dressa sur son fauteuil. Javert poursuivit, l'air sĆ©vĆØre et les yeux toujours baissĆ©s: --Monsieur le maire, je viens vous prier de vouloir bien provoquer prĆØs de l'autoritĆ© ma destitution. M. Madeleine stupĆ©fait ouvrit la bouche. Javert l'interrompit. --Vous direz, j'aurais pu donner ma dĆ©mission, mais cela ne suffit pas. Donner sa dĆ©mission, c'est honorable. J'ai failli, je dois ĆŖtre puni. Il faut que je sois chassĆ©. Et aprĆØs une pause, il ajouta: --Monsieur le maire, vous avez Ć©tĆ© sĆ©vĆØre pour moi l'autre jour injustement. Soyez-le aujourd'hui justement. --Ah ƧƠ! pourquoi? s'Ć©cria M. Madeleine. Quel est ce galimatias? qu'est-ce que cela veut dire? où y a-t-il un acte coupable commis contre moi par vous? qu'est-ce que vous m'avez fait? quels torts avez-vous envers moi? Vous vous accusez, vous voulez ĆŖtre remplacĆ©.... --ChassĆ©, dit Javert. --ChassĆ©, soit. C'est fort bien. Je ne comprends pas. --Vous allez comprendre, monsieur le maire. Javert soupira du fond de sa poitrine et reprit toujours froidement et tristement: --Monsieur le maire, il y a six semaines, Ć  la suite de cette scĆØne pour cette fille, j'Ć©tais furieux, je vous ai dĆ©noncĆ©. --DĆ©noncĆ©! --ƀ la prĆ©fecture de police de Paris. M. Madeleine, qui ne riait pas beaucoup plus souvent que Javert, se mit Ć  rire. --Comme maire ayant empiĆ©tĆ© sur la police? --Comme ancien forƧat. Le maire devint livide. Javert, qui n'avait pas levĆ© les yeux, continua: --Je le croyais. Depuis longtemps j'avais des idĆ©es. Une ressemblance, des renseignements que vous avez fait prendre Ć  Faverolles, votre force des reins, l'aventure du vieux Fauchelevent, votre adresse au tir, votre jambe qui traĆ®ne un peu, est-ce que je sais, moi? des bĆŖtises! mais enfin je vous prenais pour un nommĆ© Jean Valjean. --Un nommĆ©?... Comment dites-vous ce nom-lĆ ? --Jean Valjean. C'est un forƧat que j'avais vu il y a vingt ans quand j'Ć©tais adjudant-garde-chiourme Ć  Toulon. En sortant du bagne, ce Jean Valjean avait, Ć  ce qu'il paraĆ®t, volĆ© chez un Ć©vĆŖque, puis il avait commis un autre vol Ć  main armĆ©e, dans un chemin public, sur un petit savoyard. Depuis huit ans il s'Ć©tait dĆ©robĆ©, on ne sait comment, et on le cherchait. Moi je m'Ć©tais figurĆ©... Enfin, j'ai fait cette chose! La colĆØre m'a dĆ©cidĆ©, je vous ai dĆ©noncĆ© Ć  la prĆ©fecture. M. Madeleine, qui avait ressaisi le dossier depuis quelques instants, reprit avec un accent de parfaite indiffĆ©rence: --Et que vous a-t-on rĆ©pondu? --Que j'Ć©tais fou. --Eh bien? --Eh bien, on avait raison. --C'est heureux que vous le reconnaissiez! --Il faut bien, puisque le vĆ©ritable Jean Valjean est trouvĆ©. La feuille que tenait M. Madeleine lui Ć©chappa des mains, il leva la tĆŖte, regarda fixement Javert, et dit avec un accent inexprimable: --Ah! Javert poursuivit: --VoilĆ  ce que c'est, monsieur le maire. Il paraĆ®t qu'il y avait dans le pays, du cĆ“tĆ© d'Ailly-le-Haut-Clocher, une espĆØce de bonhomme qu'on appelait le pĆØre Champmathieu. C'Ć©tait trĆØs misĆ©rable. On n'y faisait pas attention. Ces gens-lĆ , on ne sait pas de quoi cela vit. DerniĆØrement, cet automne, le pĆØre Champmathieu a Ć©tĆ© arrĆŖtĆ© pour un vol de pommes Ć  cidre, commis chez...--enfin n'importe! Il y a eu vol, mur escaladĆ©, branches de l'arbre cassĆ©es. On a arrĆŖtĆ© mon Champmathieu. Il avait encore la branche de pommier Ć  la main. On coffre le drĆ“le. Jusqu'ici ce n'est pas beaucoup plus qu'une affaire correctionnelle. Mais voici qui est de la providence. La geĆ“le Ć©tant en mauvais Ć©tat, monsieur le juge d'instruction trouve Ć  propos de faire transfĆ©rer Champmathieu Ć  Arras où est la prison dĆ©partementale. Dans cette prison d'Arras, il y a un ancien forƧat nommĆ© Brevet qui est dĆ©tenu pour je ne sais quoi et qu'on a fait guichetier de chambrĆ©e parce qu'il se conduit bien. Monsieur le maire, Champmathieu n'est pas plus tĆ“t dĆ©barquĆ© que voilĆ  Brevet qui s'Ć©crie: Ā«Eh mais! je connais cet homme-lĆ . C'est un fagot. Regardez-moi donc, bonhomme! Vous ĆŖtes Jean Valjean!--Jean Valjean! qui Ƨa Jean Valjean? Le Champmathieu joue l'Ć©tonnĆ©.--Ne fais donc pas le sinvre, dit Brevet. Tu es Jean Valjean! Tu as Ć©tĆ© au bagne de Toulon. Il y a vingt ans. Nous y Ć©tions ensemble.--Le Champmathieu nie. Parbleu! vous comprenez. On approfondit. On me fouille cette aventure-lĆ . Voici ce qu'on trouve: ce Champmathieu, il y a une trentaine d'annĆ©es, a Ć©tĆ© ouvrier Ć©mondeur d'arbres dans plusieurs pays, notamment Ć  Faverolles. LĆ  on perd sa trace. Longtemps aprĆØs, on le revoit en Auvergne, puis Ć  Paris, où il dit avoir Ć©tĆ© charron et avoir eu une fille blanchisseuse, mais cela n'est pas prouvĆ©; enfin dans ce pays-ci. Or, avant d'aller au bagne pour vol qualifiĆ©, qu'Ć©tait Jean Valjean? Ć©mondeur. Où? Ć  Faverolles. Autre fait. Ce Valjean s'appelait de son nom de baptĆŖme Jean et sa mĆØre se nommait de son nom de famille Mathieu. Quoi de plus naturel que de penser qu'en sortant du bagne il aura pris le nom de sa mĆØre pour se cacher et se sera fait appeler Jean Mathieu? Il va en Auvergne. De _Jean_ la prononciation du pays fait _Chan_, on l'appelle Chan Mathieu. Notre homme se laisse faire et le voilĆ  transformĆ© en Champmathieu. Vous me suivez, n'est-ce pas? On s'informe Ć  Faverolles. La famille de Jean Valjean n'y est plus. On ne sait plus où elle est. Vous savez, dans ces classes-lĆ , il y a souvent de ces Ć©vanouissements d'une famille. On cherche, on ne trouve plus rien. Ces gens-lĆ , quand ce n'est pas de la boue, c'est de la poussiĆØre. Et puis, comme le commencement de ces histoires date de trente ans, il n'y a plus personne Ć  Faverolles qui ait connu Jean Valjean. On s'informe Ć  Toulon. Avec Brevet, il n'y a plus que deux forƧats qui aient vu Jean Valjean. Ce sont les condamnĆ©s Ć  vie Cochepaille et Chenildieu. On les extrait du bagne et on les fait venir. On les confronte au prĆ©tendu Champmathieu. Ils n'hĆ©sitent pas. Pour eux comme pour Brevet, c'est Jean Valjean. MĆŖme Ć¢ge, il a cinquante-quatre ans, mĆŖme taille, mĆŖme air, mĆŖme homme enfin, c'est lui. C'est en ce moment-lĆ  mĆŖme que j'envoyais ma dĆ©nonciation Ć  la prĆ©fecture de Paris. On me rĆ©pond que je perds l'esprit et que Jean Valjean est Ć  Arras au pouvoir de la justice. Vous concevez si cela m'Ć©tonne, moi qui croyais tenir ici ce mĆŖme Jean Valjean! J'Ć©cris Ć  monsieur le juge d'instruction. Il me fait venir, on m'amĆØne le Champmathieu.... --Eh bien? interrompit M. Madeleine. Javert rĆ©pondit avec son visage incorruptible et triste: --Monsieur le maire, la vĆ©ritĆ© est la vĆ©ritĆ©. J'en suis fĆ¢chĆ©, mais c'est cet homme-lĆ  qui est Jean Valjean. Moi aussi je l'ai reconnu. M. Madeleine reprit d'une voix trĆØs basse: --Vous ĆŖtes sĆ»r? Javert se mit Ć  rire de ce rire douloureux qui Ć©chappe Ć  une conviction profonde: --Oh, sĆ»r! Il demeura un moment pensif, prenant machinalement des pincĆ©es de poudre de bois dans la sĆ©bille Ć  sĆ©cher l'encre qui Ć©tait sur la table, et il ajouta: --Et mĆŖme, maintenant que je vois le vrai Jean Valjean, je ne comprends pas comment j'ai pu croire autre chose. Je vous demande pardon, monsieur le maire. En adressant cette parole suppliante et grave Ć  celui qui, six semaines auparavant, l'avait humiliĆ© en plein corps de garde et lui avait dit: Ā«sortez!Ā» Javert, cet homme hautain, Ć©tait Ć  son insu plein de simplicitĆ© et de dignitĆ©. M. Madeleine ne rĆ©pondit Ć  sa priĆØre que par cette question brusque: --Et que dit cet homme? --Ah, dame! monsieur le maire, l'affaire est mauvaise. Si c'est Jean Valjean, il y a rĆ©cidive. Enjamber un mur, casser une branche, chiper des pommes, pour un enfant, c'est une polissonnerie; pour un homme, c'est un dĆ©lit; pour un forƧat, c'est un crime. Escalade et vol, tout y est. Ce n'est plus la police correctionnelle, c'est la cour d'assises. Ce n'est plus quelques jours de prison, ce sont les galĆØres Ć  perpĆ©tuitĆ©. Et puis, il y a l'affaire du petit savoyard que j'espĆØre bien qui reviendra. Diable! il y a de quoi se dĆ©battre, n'est-ce pas? Oui, pour un autre que Jean Valjean. Mais Jean Valjean est un sournois. C'est encore lĆ  que je le reconnais. Un autre sentirait que cela chauffe; il se dĆ©mĆØnerait, il crierait, la bouilloire chante devant le feu, il ne voudrait pas ĆŖtre Jean Valjean, et caetera. Lui, il n'a pas l'air de comprendre, il dit: Je suis Champmathieu, je ne sors pas de lĆ ! Il a l'air Ć©tonnĆ©, il fait la brute, c'est bien mieux. Oh! le drĆ“le est habile. Mais c'est Ć©gal, les preuves sont lĆ . Il est reconnu par quatre personnes, le vieux coquin sera condamnĆ©. C'est portĆ© aux assises, Ć  Arras. Je vais y aller pour tĆ©moigner. Je suis citĆ©. M. Madeleine s'Ć©tait remis Ć  son bureau, avait ressaisi son dossier, et le feuilletait tranquillement, lisant et Ć©crivant tour Ć  tour comme un homme affairĆ©. Il se tourna vers Javert: --Assez, Javert. Au fait, tous ces dĆ©tails m'intĆ©ressent fort peu. Nous perdons notre temps, et nous avons des affaires pressĆ©es. Javert, vous allez vous rendre sur-le-champ chez la bonne femme Buseaupied qui vend des herbes lĆ -bas au coin de la rue Saint-Saulve. Vous lui direz de dĆ©poser sa plainte contre le charretier Pierre Chesnelong. Cet homme est un brutal qui a failli Ć©craser cette femme et son enfant. Il faut qu'il soit puni. Vous irez ensuite chez M. Charcellay, rue Montre-de-Champigny. Il se plaint qu'il y a une gouttiĆØre de la maison voisine qui verse l'eau de la pluie chez lui, et qui affouille les fondations de sa maison. AprĆØs vous constaterez des contraventions de police qu'on me signale rue Guibourg chez la veuve Doris, et rue du Garraud-Blanc chez madame RenĆ©e Le BossĆ©, et vous dresserez procĆØs-verbal. Mais je vous donne lĆ  beaucoup de besogne. N'allez-vous pas ĆŖtre absent? ne m'avez-vous pas dit que vous alliez Ć  Arras pour cette affaire dans huit ou dix jours?... --Plus tĆ“t que cela, monsieur le maire. --Quel jour donc? --Mais je croyais avoir dit Ć  monsieur le maire que cela se jugeait demain et que je partais par la diligence cette nuit. M. Madeleine fit un mouvement imperceptible. --Et combien de temps durera l'affaire? --Un jour tout au plus. L'arrĆŖt sera prononcĆ© au plus tard demain dans la nuit. Mais je n'attendrai pas l'arrĆŖt, qui ne peut manquer. SitĆ“t ma dĆ©position faite, je reviendrai ici. --C'est bon, dit M. Madeleine. Et il congĆ©dia Javert d'un signe de main. Javert ne s'en alla pas. --Pardon, monsieur le maire, dit-il. --Qu'est-ce encore? demanda M. Madeleine. --Monsieur le maire, il me reste une chose Ć  vous rappeler. --Laquelle? --C'est que je dois ĆŖtre destituĆ©. M. Madeleine se leva. --Javert, vous ĆŖtes un homme d'honneur, et je vous estime. Vous vous exagĆ©rez votre faute. Ceci d'ailleurs est encore une offense qui me concerne. Javert, vous ĆŖtes digne de monter et non de descendre. J'entends que vous gardiez votre place. Javert regarda M. Madeleine avec sa prunelle candide au fond de laquelle il semblait qu'on vit cette conscience peu Ć©clairĆ©e, mais rigide et chaste, et il dit d'une voix tranquille: --Monsieur le maire, je ne puis vous accorder cela. --Je vous rĆ©pĆØte, rĆ©pliqua M. Madeleine, que la chose me regarde. Mais Javert, attentif Ć  sa seule pensĆ©e, continua: --Quant Ć  exagĆ©rer, je n'exagĆØre point. Voici comment je raisonne. Je vous ai soupƧonnĆ© injustement. Cela, ce n'est rien. C'est notre droit Ć  nous autres de soupƧonner, quoiqu'il y ait pourtant abus Ć  soupƧonner au-dessus de soi. Mais, sans preuves, dans un accĆØs de colĆØre, dans le but de me venger, je vous ai dĆ©noncĆ© comme forƧat, vous, un homme respectable, un maire, un magistrat! ceci est grave. TrĆØs grave. J'ai offensĆ© l'autoritĆ© dans votre personne, moi, agent de l'autoritĆ©! Si l'un de mes subordonnĆ©s avait fait ce que j'ai fait, je l'aurais dĆ©clarĆ© indigne du service, et chassĆ©. Eh bien? Tenez, monsieur le maire, encore un mot. J'ai souvent Ć©tĆ© sĆ©vĆØre dans ma vie. Pour les autres. C'Ć©tait juste. Je faisais bien. Maintenant, si je n'Ć©tais pas sĆ©vĆØre pour moi, tout ce que j'ai fait de juste deviendrait injuste. Est-ce que je dois m'Ć©pargner plus que les autres? Non. Quoi! je n'aurais Ć©tĆ© bon qu'Ć  chĆ¢tier autrui, et pas moi! mais je serais un misĆ©rable! mais ceux qui disent: ce gueux de Javert! auraient raison! Monsieur le maire, je ne souhaite pas que vous me traitiez avec bontĆ©, votre bontĆ© m'a fait faire assez de mauvais sang quand elle Ć©tait pour les autres. Je n'en veux pas pour moi. La bontĆ© qui consiste Ć  donner raison Ć  la fille publique contre le bourgeois, Ć  l'agent de police contre le maire, Ć  celui qui est en bas contre celui qui est en haut, c'est ce que j'appelle de la mauvaise bontĆ©. C'est avec cette bontĆ©-lĆ  que la sociĆ©tĆ© se dĆ©sorganise. Mon Dieu! c'est bien facile d'ĆŖtre bon, le malaisĆ© c'est d'ĆŖtre juste. Allez! si vous aviez Ć©tĆ© ce que je croyais, je n'aurais pas Ć©tĆ© bon pour vous, moi! vous auriez vu! Monsieur le maire, je dois me traiter comme je traiterais tout autre. Quand je rĆ©primais des malfaiteurs, quand je sĆ©vissais sur des gredins, je me suis souvent dit Ć  moi-mĆŖme: toi, si tu bronches, si jamais je te prends en faute, sois tranquille!--J'ai bronchĆ©, je me prends en faute, tant pis! Allons, renvoyĆ©, cassĆ©, chassĆ©! c'est bon. J'ai des bras, je travaillerai Ć  la terre, cela m'est Ć©gal. Monsieur le maire, le bien du service veut un exemple. Je demande simplement la destitution de l'inspecteur Javert. Tout cela Ć©tait prononcĆ© d'un accent humble, fier, dĆ©sespĆ©rĆ© et convaincu qui donnait je ne sais quelle grandeur bizarre Ć  cet Ć©trange honnĆŖte homme. --Nous verrons, fit M. Madeleine. Et il lui tendit la main. Javert recula, et dit d'un ton farouche: --Pardon, monsieur le maire, mais cela ne doit pas ĆŖtre. Un maire ne donne pas la main Ć  un mouchard. Il ajouta entre ses dents: --Mouchard, oui; du moment où j'ai mĆ©dusĆ© de la police, je ne suis plus qu'un mouchard. Puis il salua profondĆ©ment, et se dirigea vers la porte. LĆ  il se retourna, et, les yeux toujours baissĆ©s: --Monsieur le maire, dit-il, je continuerai le service jusqu'Ć  ce que je sois remplacĆ©. Il sortit. M. Madeleine resta rĆŖveur, Ć©coutant ce pas ferme et assurĆ© qui s'Ć©loignait sur le pavĆ© du corridor. Livre septiĆØme--L'affaire Champmathieu Chapitre I La soeur Simplice Les incidents qu'on va lire n'ont pas tous Ć©tĆ© connus Ć  Montreuil-sur-mer, mais le peu qui en a percĆ© a laissĆ© dans cette ville un tel souvenir, que ce serait une grave lacune dans ce livre si nous ne les racontions dans leurs moindres dĆ©tails. Dans ces dĆ©tails, le lecteur rencontrera deux ou trois circonstances invraisemblables que nous maintenons par respect pour la vĆ©ritĆ©. Dans l'aprĆØs-midi qui suivit la visite de Javert, M. Madeleine alla voir la Fantine comme d'habitude. Avant de pĆ©nĆ©trer prĆØs de Fantine, il fit demander la soeur Simplice. Les deux religieuses qui faisaient le service de l'infirmerie, dames lazaristes comme toutes les soeurs de charitĆ©, s'appelaient soeur PerpĆ©tue et soeur Simplice. La soeur PerpĆ©tue Ć©tait la premiĆØre villageoise venue, grossiĆØrement soeur de charitĆ©, entrĆ©e chez Dieu comme on entre en place. Elle Ć©tait religieuse comme on est cuisiniĆØre. Ce type n'est point trĆØs rare. Les ordres monastiques acceptent volontiers cette lourde poterie paysanne, aisĆ©ment faƧonnĆ©e en capucin ou en ursuline. Ces rusticitĆ©s s'utilisent pour les grosses besognes de la dĆ©votion. La transition d'un bouvier Ć  un carme n'a rien de heurtĆ©; l'un devient l'autre sans grand travail; le fond commun d'ignorance du village et du cloĆ®tre est une prĆ©paration toute faite, et met tout de suite le campagnard de plain-pied avec le moine. Un peu d'ampleur au sarrau, et voilĆ  un froc. La soeur PerpĆ©tue Ć©tait une forte religieuse, de Marines, prĆØs Pontoise, patoisant, psalmodiant, bougonnant, sucrant la tisane selon le bigotisme ou l'hypocrisie du grabataire, brusquant les malades, bourrue avec les mourants, leur jetant presque Dieu au visage, lapidant l'agonie avec des priĆØres en colĆØre, hardie, honnĆŖte et rougeaude. La soeur Simplice Ć©tait blanche d'une blancheur de cire. PrĆØs de soeur PerpĆ©tue, c'Ć©tait le cierge Ć  cĆ“tĆ© de la chandelle. Vincent de Paul a divinement fixĆ© la figure de la soeur de charitĆ© dans ces admirables paroles où il mĆŖle tant de libertĆ© Ć  tant de servitude: Ā«Elles n'auront pour monastĆØre que la maison des malades, pour cellule qu'une chambre de louage, pour chapelle que l'Ć©glise de leur paroisse, pour cloĆ®tre que les rues de la ville ou les salles des hĆ“pitaux, pour clĆ“ture que l'obĆ©issance, pour grille que la crainte de Dieu, pour voile que la modestie.Ā» Cet idĆ©al Ć©tait vivant dans la soeur Simplice. Personne n'eĆ»t pu dire l'Ć¢ge de la soeur Simplice; elle n'avait jamais Ć©tĆ© jeune et semblait ne devoir jamais ĆŖtre vieille. C'Ć©tait une personne--nous n'osons dire une femme--calme, austĆØre, de bonne compagnie, froide, et qui n'avait jamais menti. Elle Ć©tait si douce qu'elle paraissait fragile; plus solide d'ailleurs que le granit. Elle touchait aux malheureux avec de charmants doigts fins et purs. Il y avait, pour ainsi dire, du silence dans sa parole; elle parlait juste le nĆ©cessaire, et elle avait un son de voix qui eĆ»t tout Ć  la fois Ć©difiĆ© un confessionnal et enchantĆ© un salon. Cette dĆ©licatesse s'accommodait de la robe de bure, trouvant Ć  ce rude contact un rappel continuel du ciel et de Dieu. Insistons sur un dĆ©tail. N'avoir jamais menti, n'avoir jamais dit, pour un intĆ©rĆŖt quelconque, mĆŖme indiffĆ©remment, une chose qui ne fĆ»t la vĆ©ritĆ©, la sainte vĆ©ritĆ©, c'Ć©tait le trait distinctif de la soeur Simplice; c'Ć©tait l'accent de sa vertu. Elle Ć©tait presque cĆ©lĆØbre dans la congrĆ©gation pour cette vĆ©racitĆ© imperturbable. L'abbĆ© Sicard parle de la soeur Simplice dans une lettre au sourd-muet Massieu. Si sincĆØres, si loyaux et si purs que nous soyons, nous avons tous sur notre candeur au moins la fĆŖlure du petit mensonge innocent. Elle, point. Petit mensonge, mensonge innocent, est-ce que cela existe? Mentir, c'est l'absolu du mal. Peu mentir n'est pas possible; celui qui ment, ment tout le mensonge; mentir, c'est la face mĆŖme du dĆ©mon; Satan a deux noms, il s'appelle Satan et il s'appelle Mensonge. VoilĆ  ce qu'elle pensait. Et comme elle pensait, elle pratiquait. Il en rĆ©sultait cette blancheur dont nous avons parlĆ©, blancheur qui couvrait de son rayonnement mĆŖme ses lĆØvres et ses yeux. Son sourire Ć©tait blanc, son regard Ć©tait blanc. Il n'y avait pas une toile d'araignĆ©e, pas un grain de poussiĆØre Ć  la vitre de cette conscience. En entrant dans l'obĆ©dience de saint Vincent de Paul, elle avait pris le nom de Simplice par choix spĆ©cial. Simplice de Sicile, on le sait, est cette sainte qui aima mieux se laisser arracher les deux seins que de rĆ©pondre, Ć©tant nĆ©e Ć  Syracuse, qu'elle Ć©tait nĆ©e Ć  SĆ©geste, mensonge qui la sauvait. Cette patronne convenait Ć  cette Ć¢me. La soeur Simplice, en entrant dans l'ordre, avait deux dĆ©fauts dont elle s'Ć©tait peu Ć  peu corrigĆ©e; elle avait eu le goĆ»t des friandises et elle avait aimĆ© Ć  recevoir des lettres. Elle ne lisait jamais qu'un livre de priĆØres en gros caractĆØres et en latin. Elle ne comprenait pas le latin, mais elle comprenait le livre. La pieuse fille avait pris en affection Fantine, y sentant probablement de la vertu latente, et s'Ć©tait dĆ©vouĆ©e Ć  la soigner presque exclusivement. M. Madeleine emmena Ć  part la soeur Simplice et lui recommanda Fantine avec un accent singulier dont la soeur se souvint plus tard. En quittant la soeur, il s'approcha de Fantine. Fantine attendait chaque jour l'apparition de M. Madeleine comme on attend un rayon de chaleur et de joie. Elle disait aux soeurs: --Je ne vis que lorsque monsieur le maire est lĆ . Elle avait ce jour-lĆ  beaucoup de fiĆØvre. DĆØs qu'elle vit M. Madeleine, elle lui demanda: --Et Cosette? Il rĆ©pondit en souriant: --BientĆ“t. M. Madeleine fut avec Fantine comme Ć  l'ordinaire. Seulement il resta une heure au lieu d'une demi-heure, au grand contentement de Fantine. Il fĆ®t mille instances Ć  tout le monde pour que rien ne manquĆ¢t Ć  la malade. On remarqua qu'il y eut un moment où son visage devint trĆØs sombre. Mais cela s'expliqua quand on sut que le mĆ©decin s'Ć©tait penchĆ© Ć  son oreille et lui avait dit: --Elle baisse beaucoup. Puis il rentra Ć  la mairie, et le garƧon de bureau le vit examiner avec attention une carte routiĆØre de France qui Ć©tait suspendue dans son cabinet. Il Ć©crivit quelques chiffres au crayon sur un papier. Chapitre II PerspicacitĆ© de maĆ®tre Scaufflaire De la mairie il se rendit au bout de la ville chez un Flamand, maĆ®tre ScaufflaĆ«r, francisĆ© Scaufflaire, qui louait des chevaux et des Ā«cabriolets Ć  volonté». Pour aller chez ce Scaufflaire, le plus court Ć©tait de prendre une rue peu frĆ©quentĆ©e où Ć©tait le presbytĆØre de la paroisse que M. Madeleine habitait. Le curĆ© Ć©tait, disait-on, un homme digne et respectable, et de bon conseil. ƀ l'instant où M. Madeleine arriva devant le presbytĆØre, il n'y avait dans la rue qu'un passant, et ce passant remarqua ceci: M. le maire, aprĆØs avoir dĆ©passĆ© la maison curiale, s'arrĆŖta, demeura immobile, puis revint sur ses pas et rebroussa chemin jusqu'Ć  la porte du presbytĆØre, qui Ć©tait une porte bĆ¢tarde avec marteau de fer. Il mit vivement la main au marteau, et le souleva; puis il s'arrĆŖta de nouveau, et resta court, et comme pensif, et, aprĆØs quelques secondes, au lieu de laisser bruyamment retomber le marteau, il le reposa doucement et reprit son chemin avec une sorte de hĆ¢te qu'il n'avait pas auparavant. M. Madeleine trouva maĆ®tre Scaufflaire chez lui occupĆ© Ć  repiquer un harnais. --MaĆ®tre Scaufflaire, demanda-t-il, avez-vous un bon cheval? --Monsieur le maire, dit le Flamand, tous mes chevaux sont bons. Qu'entendez-vous par un bon cheval? --J'entends un cheval qui puisse faire vingt lieues en un jour. --Diable! fit le Flamand, vingt lieues! --Oui. --AttelĆ© Ć  un cabriolet? --Oui. --Et combien de temps se reposera-t-il aprĆØs la course? --Il faut qu'il puisse au besoin repartir le lendemain. --Pour refaire le mĆŖme trajet? --Oui. --Diable! diable! et c'est vingt lieues? M. Madeleine tira de sa poche le papier où il avait crayonnĆ© des chiffres. Il les montra au Flamand. C'Ć©taient les chiffres 5, 6, 8-1/2. --Vous voyez, dit-il. Total, dix-neuf et demi, autant dire vingt lieues. --Monsieur le maire, reprit le Flamand, j'ai votre affaire. Mon petit cheval blanc. Vous avez dĆ» le voir passer quelquefois. C'est une petite bĆŖte du bas Boulonnais. C'est plein de feu. On a voulu d'abord en faire un cheval de selle. Bah! il ruait, il flanquait tout le monde par terre. On le croyait vicieux, on ne savait qu'en faire. Je l'ai achetĆ©. Je l'ai mis au cabriolet. Monsieur, c'est cela qu'il voulait; il est doux comme une fille, il va le vent. Ah! par exemple, il ne faudrait pas lui monter sur le dos. Ce n'est pas son idĆ©e d'ĆŖtre cheval de selle. Chacun a son ambition. Tirer, oui, porter, non; il faut croire qu'il s'est dit Ƨa. --Et il fera la course? --Vos vingt lieues. Toujours au grand trot, et en moins de huit heures. Mais voici Ć  quelles conditions. --Dites. --PremiĆØrement, vous le ferez souffler une heure Ć  moitiĆ© chemin; il mangera, et on sera lĆ  pendant qu'il mangera pour empĆŖcher le garƧon de l'auberge de lui voler son avoine; car j'ai remarquĆ© que dans les auberges l'avoine est plus souvent bue par les garƧons d'Ć©curie que mangĆ©e par les chevaux. --On sera lĆ . --DeuxiĆØmement.... Est-ce pour monsieur le maire le cabriolet? --Oui. --Monsieur le maire sait conduire? --Oui. --Eh bien, monsieur le maire voyagera seul et sans bagage afin de ne point charger le cheval. --Convenu. --Mais monsieur le maire, n'ayant personne avec lui, sera obligĆ© de prendre la peine de surveiller lui-mĆŖme l'avoine. --C'est dit. --Il me faudra trente francs par jour. Les jours de repos payĆ©s. Pas un liard de moins, et la nourriture de la bĆŖte Ć  la charge de monsieur le maire. M. Madeleine tira trois napolĆ©ons de sa bourse et les mit sur la table. --VoilĆ  deux jours d'avance. --QuatriĆØmement, pour une course pareille sur cabriolet serait trop lourd et fatiguerait le cheval. Il faudrait que monsieur le maire consentĆ®t Ć  voyager dans un petit tilbury que j'ai. --J'y consens. --C'est lĆ©ger, mais c'est dĆ©couvert. --Cela m'est Ć©gal. --Monsieur le maire a-t-il rĆ©flĆ©chi que nous sommes en hiver?... M. Madeleine ne rĆ©pondit pas. Le Flamand reprit: --Qu'il fait trĆØs froid? M. Madeleine garda le silence. MaĆ®tre Scaufflaire continua: --Qu'il peut pleuvoir? M. Madeleine leva la tĆŖte et dit: --Le tilbury et le cheval seront devant ma porte demain Ć  quatre heures et demie du matin. --C'est entendu, monsieur le maire, rĆ©pondit Scaufflaire, puis, grattant avec l'ongle de son pouce une tache qui Ć©tait dans le bois de la table, il reprit de cet air insouciant que les Flamands savent si bien mĆŖler Ć  leur finesse: --Mais voilĆ  que j'y songe Ć  prĆ©sent! monsieur le maire ne me dit pas où il va. Où est-ce que va monsieur le maire? Il ne songeait pas Ć  autre chose depuis le commencement de la conversation, mais il ne savait pourquoi il n'avait pas osĆ© faire cette question. --Votre cheval a-t-il de bonnes jambes de devant? dit M. Madeleine. --Oui, monsieur le maire. Vous le soutiendrez un peu dans les descentes. Y a-t-il beaucoup de descentes d'ici où vous allez? --N'oubliez pas d'ĆŖtre Ć  ma porte Ć  quatre heures et demie du matin, trĆØs prĆ©cises, rĆ©pondit M. Madeleine; et il sortit. Le Flamand resta Ā«tout bĆŖteĀ», comme il disait lui-mĆŖme quelque temps aprĆØs. Monsieur le maire Ć©tait sorti depuis deux ou trois minutes, lorsque la porte se rouvrit; c'Ć©tait M. le maire. Il avait toujours le mĆŖme air impassible et prĆ©occupĆ©. --Monsieur Scaufflaire, dit-il, Ć  quelle somme estimez-vous le cheval et le tilbury que vous me louerez, l'un portant l'autre? --L'un traĆ®nant l'autre, monsieur le maire, dit le Flamand avec un gros rire. --Soit. Eh bien! --Est-ce que monsieur le maire veut me les acheter? --Non, mais Ć  tout Ć©vĆ©nement, je veux vous les garantir. ƀ mon retour vous me rendrez la somme. Combien estimez-vous cabriolet et cheval? --ƀ cinq cents francs, monsieur le maire. --Les voici. M. Madeleine posa un billet de banque sur la table, puis sortit et cette fois ne rentra plus. MaĆ®tre Scaufflaire regretta affreusement de n'avoir point dit mille francs. Du reste le cheval et le tilbury, en bloc, valaient cent Ć©cus. Le Flamand appela sa femme, et lui conta la chose. Où diable monsieur le maire peut-il aller? Ils tinrent conseil. --Il va Ć  Paris, dit la femme. --Je ne crois pas, dit le mari. M. Madeleine avait oubliĆ© sur la cheminĆ©e le papier où il avait tracĆ© des chiffres. Le Flamand le prit et l'Ć©tudia. --Cinq, six, huit et demi? cela doit marquer des relais de poste. Il se tourna vers sa femme. --J'ai trouvĆ©. --Comment? --Il y a cinq lieues d'ici Ć  Hesdin, six de Hesdin Ć  Saint-Pol, huit et demie de Saint-Pol Ć  Arras. Il va Ć  Arras. Cependant M. Madeleine Ć©tait rentrĆ© chez lui. Pour revenir de chez maĆ®tre Scaufflaire, il avait pris le plus long, comme si la porte du presbytĆØre avait Ć©tĆ© pour lui une tentation, et qu'il eĆ»t voulu l'Ć©viter. Il Ć©tait montĆ© dans sa chambre et s'y Ć©tait enfermĆ©, ce qui n'avait rien que de simple, car il se couchait volontiers de bonne heure. Pourtant la concierge de la fabrique, qui Ć©tait en mĆŖme temps l'unique servante de M. Madeleine, observa que sa lumiĆØre s'Ć©teignit Ć  huit heures et demie, et elle le dit au caissier qui rentrait, en ajoutant: --Est-ce que monsieur le maire est malade? je lui ai trouvĆ© l'air un peu singulier. Ce caissier habitait une chambre situĆ©e prĆ©cisĆ©ment au-dessous de la chambre de M. Madeleine. Il ne prit point garde aux paroles de la portiĆØre, se coucha et s'endormit. Vers minuit, il se rĆ©veilla brusquement; il avait entendu Ć  travers son sommeil un bruit au-dessus de sa tĆŖte. Il Ć©couta. C'Ć©tait un pas qui allait et venait, comme si l'on marchait dans la chambre en haut. Il Ć©couta plus attentivement, et reconnut le pas de M. Madeleine. Cela lui parut Ć©trange; habituellement aucun bruit ne se faisait dans la chambre de M. Madeleine avant l'heure de son lever. Un moment aprĆØs le caissier entendit quelque chose qui ressemblait Ć  une armoire qu'on ouvre et qu'on referme. Puis on dĆ©rangea un meuble, il y eut un silence, et le pas recommenƧa. Le caissier se dressa sur son sĆ©ant, s'Ć©veilla tout Ć  fait, regarda, et Ć  travers les vitres de sa croisĆ©e aperƧut sur le mur d'en face la rĆ©verbĆ©ration rougeĆ¢tre d'une fenĆŖtre Ć©clairĆ©e. ƀ la direction des rayons, ce ne pouvait ĆŖtre que la fenĆŖtre de la chambre de M. Madeleine. La rĆ©verbĆ©ration tremblait comme si elle venait plutĆ“t d'un feu allumĆ© que d'une lumiĆØre. L'ombre des chĆ¢ssis vitrĆ©s ne s'y dessinait pas, ce qui indiquait que la fenĆŖtre Ć©tait toute grande ouverte. Par le froid qu'il faisait, cette fenĆŖtre ouverte Ć©tait surprenante. Le caissier se rendormit. Une heure ou deux aprĆØs, il se rĆ©veilla encore. Le mĆŖme pas, lent et rĆ©gulier, allait et venait toujours au-dessus de sa tĆŖte. La rĆ©verbĆ©ration se dessinait toujours sur le mur, mais elle Ć©tait maintenant pĆ¢le et paisible comme le reflet d'une lampe ou d'une bougie. La fenĆŖtre Ć©tait toujours ouverte. Voici ce qui se passait dans la chambre de M. Madeleine. Chapitre III Une tempĆŖte sous un crĆ¢ne Le lecteur a sans doute devinĆ© que M. Madeleine n'est autre que Jean Valjean. Nous avons dĆ©jĆ  regardĆ© dans les profondeurs de cette conscience; le moment est venu d'y regarder encore. Nous ne le faisons pas sans Ć©motion et sans tremblement. Il n'existe rien de plus terrifiant que cette sorte de contemplation. L'oeil de l'esprit ne peut trouver nulle part plus d'Ć©blouissements ni plus de tĆ©nĆØbres que dans l'homme; il ne peut se fixer sur aucune chose qui soit plus redoutable, plus compliquĆ©e, plus mystĆ©rieuse et plus infinie. Il y a un spectacle plus grand que la mer, c'est le ciel; il y a un spectacle plus grand que le ciel, c'est l'intĆ©rieur de l'Ć¢me. Faire le poĆØme de la conscience humaine, ne fĆ»t-ce qu'Ć  propos d'un seul homme, ne fĆ»t-ce qu'Ć  propos du plus infime des hommes, ce serait fondre toutes les Ć©popĆ©es dans une Ć©popĆ©e supĆ©rieure et dĆ©finitive. La conscience, c'est le chaos des chimĆØres, des convoitises et des tentatives, la fournaise des rĆŖves, l'antre des idĆ©es dont on a honte; c'est le pandĆ©monium des sophismes, c'est le champ de bataille des passions. ƀ de certaines heures, pĆ©nĆ©trez Ć  travers la face livide d'un ĆŖtre humain qui rĆ©flĆ©chit, et regardez derriĆØre, regardez dans cette Ć¢me, regardez dans cette obscuritĆ©. Il y a lĆ , sous le silence extĆ©rieur, des combats de gĆ©ants comme dans HomĆØre, des mĆŖlĆ©es de dragons et d'hydres et des nuĆ©es de fantĆ“mes comme dans Milton, des spirales visionnaires comme chez Dante. Chose sombre que cet infini que tout homme porte en soi et auquel il mesure avec dĆ©sespoir les volontĆ©s de son cerveau et les actions de sa vie! Alighieri rencontra un jour une sinistre porte devant laquelle il hĆ©sita. En voici une aussi devant nous, au seuil de laquelle nous hĆ©sitons. Entrons pourtant. Nous n'avons que peu de chose Ć  ajouter Ć  ce que le lecteur connaĆ®t dĆ©jĆ  de ce qui Ć©tait arrivĆ© Ć  Jean Valjean depuis l'aventure de Petit-Gervais. ƀ partir de ce moment, on l'a vu, il fut un autre homme. Ce que l'Ć©vĆŖque avait voulu faire de lui, il l'exĆ©cuta. Ce fut plus qu'une transformation, ce fut une transfiguration. Il rĆ©ussit Ć  disparaĆ®tre, vendit l'argenterie de l'Ć©vĆŖque, ne gardant que les flambeaux, comme souvenir, se glissa de ville en ville, traversa la France, vint Ć  Montreuil-sur-mer, eut l'idĆ©e que nous avons dite, accomplit ce que nous avons racontĆ©, parvint Ć  se faire insaisissable et inaccessible, et dĆ©sormais, Ć©tabli Ć  Montreuil-sur-mer, heureux de sentir sa conscience attristĆ©e par son passĆ© et la premiĆØre moitiĆ© de son existence dĆ©mentie par la derniĆØre, il vĆ©cut paisible, rassurĆ© et espĆ©rant, n'ayant plus que deux pensĆ©es: cacher son nom, et sanctifier sa vie; Ć©chapper aux hommes, et revenir Ć  Dieu. Ces deux pensĆ©es Ć©taient si Ć©troitement mĆŖlĆ©es dans son esprit qu'elles n'en formaient qu'une seule; elles Ć©taient toutes deux Ć©galement absorbantes et impĆ©rieuses, et dominaient ses moindres actions. D'ordinaire elles Ć©taient d'accord pour rĆ©gler la conduite de sa vie; elles le tournaient vers l'ombre; elles le faisaient bienveillant et simple; elles lui conseillaient les mĆŖmes choses. Quelquefois cependant il y avait conflit entre elles. Dans ce cas-lĆ , on s'en souvient, l'homme que tout le pays de Montreuil-sur-mer appelait M. Madeleine ne balanƧait pas Ć  sacrifier la premiĆØre Ć  la seconde, sa sĆ©curitĆ© Ć  sa vertu. Ainsi, en dĆ©pit de toute rĆ©serve et de toute prudence, il avait gardĆ© les chandeliers de l'Ć©vĆŖque, portĆ© son deuil, appelĆ© et interrogĆ© tous les petits savoyards qui passaient, pris des renseignements sur les familles de Faverolles, et sauvĆ© la vie au vieux Fauchelevent, malgrĆ© les inquiĆ©tantes insinuations de Javert. Il semblait, nous l'avons dĆ©jĆ  remarquĆ©, qu'il pensĆ¢t, Ć  l'exemple de tous ceux qui ont Ć©tĆ© sages, saints et justes, que son premier devoir n'Ć©tait pas envers lui. Toutefois, il faut le dire, jamais rien de pareil ne s'Ć©tait encore prĆ©sentĆ©. Jamais les deux idĆ©es qui gouvernaient le malheureux homme dont nous racontons les souffrances n'avaient engagĆ© une lutte si sĆ©rieuse. Il le comprit confusĆ©ment, mais profondĆ©ment, dĆØs les premiĆØres paroles que prononƧa Javert, en entrant dans son cabinet. Au moment où fut si Ć©trangement articulĆ© ce nom qu'il avait enseveli sous tant d'Ć©paisseurs, il fut saisi de stupeur et comme enivrĆ© par la sinistre bizarrerie de sa destinĆ©e, et, Ć  travers cette stupeur, il eut ce tressaillement qui prĆ©cĆØde les grandes secousses; il se courba comme un chĆŖne Ć  l'approche d'un orage, comme un soldat Ć  l'approche d'un assaut. Il sentit venir sur sa tĆŖte des ombres pleines de foudres et d'Ć©clairs. Tout en Ć©coutant parler Javert, il eut une premiĆØre pensĆ©e d'aller, de courir, de se dĆ©noncer, de tirer ce Champmathieu de prison et de s'y mettre; cela fut douloureux et poignant comme une incision dans la chair vive, puis cela passa, et il se dit: Ā«Voyons! voyons!Ā» Il rĆ©prima ce premier mouvement gĆ©nĆ©reux et recula devant l'hĆ©roĆÆsme. Sans doute, il serait beau qu'aprĆØs les saintes paroles de l'Ć©vĆŖque, aprĆØs tant d'annĆ©es de repentir et d'abnĆ©gation, au milieu d'une pĆ©nitence admirablement commencĆ©e, cet homme, mĆŖme en prĆ©sence d'une si terrible conjoncture, n'eĆ»t pas bronchĆ© un instant et eĆ»t continuĆ© de marcher du mĆŖme pas vers ce prĆ©cipice ouvert au fond duquel Ć©tait le ciel; cela serait beau, mais cela ne fut pas ainsi. Il faut bien que nous rendions compte des choses qui s'accomplissaient dans cette Ć¢me, et nous ne pouvons dire que ce qui y Ć©tait. Ce qui l'emporta tout d'abord, ce fut l'instinct de la conservation; il rallia en hĆ¢te ses idĆ©es, Ć©touffa ses Ć©motions, considĆ©ra la prĆ©sence de Javert, ce grand pĆ©ril, ajourna toute rĆ©solution avec la fermetĆ© de l'Ć©pouvante, s'Ć©tourdit sur ce qu'il y avait Ć  faire, et reprit son calme comme un lutteur ramasse son bouclier. Le reste de la journĆ©e il fut dans cet Ć©tat, un tourbillon au dedans, une tranquillitĆ© profonde au dehors; il ne prit que ce qu'on pourrait appeler Ā«les mesures conservatoiresĀ». Tout Ć©tait encore confus et se heurtait dans son cerveau; le trouble y Ć©tait tel qu'il ne voyait distinctement la forme d'aucune idĆ©e; et lui-mĆŖme n'aurait pu rien dire de lui-mĆŖme, si ce n'est qu'il venait de recevoir un grand coup. Il se rendit comme d'habitude prĆØs du lit de douleur de Fantine et prolongea sa visite, par un instinct de bontĆ©, se disant qu'il fallait agir ainsi et la bien recommander aux soeurs pour le cas où il arriverait qu'il eĆ»t Ć  s'absenter. Il sentit vaguement qu'il faudrait peut-ĆŖtre aller Ć  Arras, et, sans ĆŖtre le moins du monde dĆ©cidĆ© Ć  ce voyage, il se dit qu'Ć  l'abri de tout soupƧon comme il l'Ć©tait, il n'y avait point d'inconvĆ©nient Ć  ĆŖtre tĆ©moin de ce qui se passerait, et il retint le tilbury de Scaufflaire, afin d'ĆŖtre prĆ©parĆ© Ć  tout Ć©vĆ©nement. Il dĆ®na avec assez d'appĆ©tit. RentrĆ© dans sa chambre il se recueillit. Il examina la situation et la trouva inouĆÆe; tellement inouĆÆe qu'au milieu de sa rĆŖverie, par je ne sais quelle impulsion d'anxiĆ©tĆ© presque inexplicable, il se leva de sa chaise et ferma sa porte au verrou. Il craignait qu'il n'entrĆ¢t encore quelque chose. Il se barricadait contre le possible. Un moment aprĆØs il souffla sa lumiĆØre. Elle le gĆŖnait. Il lui semblait qu'on pouvait le voir. Qui, on? HĆ©las! ce qu'il voulait mettre Ć  la porte Ć©tait entrĆ© ce qu'il voulait aveugler, le regardait. Sa conscience. Sa conscience, c'est-Ć -dire Dieu. Pourtant, dans le premier moment, il se fit illusion; il eut un sentiment de sĆ»retĆ© et de solitude; le verrou tirĆ©, il se crut imprenable; la chandelle Ć©teinte, il se sentit invisible. Alors il prit possession de lui-mĆŖme; il posa ses coudes sur la table, appuya la tĆŖte sur sa main, et se mit Ć  songer dans les tĆ©nĆØbres. --Où en suis-je?--Est-ce que je ne rĆŖve pas? Que m'a-t-on dit?--Est-il bien vrai que j'aie vu ce Javert et qu'il m'ait parlĆ© ainsi?--Que peut ĆŖtre ce Champmathieu?--Il me ressemble donc?--Est-ce possible?--Quand je pense qu'hier j'Ć©tais si tranquille et si loin de me douter de rien!--Qu'est-ce que je faisais donc hier Ć  pareille heure?--Qu'y a-t-il dans cet incident?--Comment se dĆ©nouera-t-il?--Que faire? VoilĆ  dans quelle tourmente il Ć©tait. Son cerveau avait perdu la force de retenir ses idĆ©es, elles passaient comme des ondes, et il prenait son front dans ses deux mains pour les arrĆŖter. De ce tumulte qui bouleversait sa volontĆ© et sa raison, et dont il cherchait Ć  tirer une Ć©vidence et une rĆ©solution, rien ne se dĆ©gageait que l'angoisse. Sa tĆŖte Ć©tait brĆ»lante. Il alla Ć  la fenĆŖtre et l'ouvrit toute grande. Il n'y avait pas d'Ć©toiles au ciel. Il revint s'asseoir prĆØs de la table. La premiĆØre heure s'Ć©coula ainsi. Peu Ć  peu cependant des linĆ©aments vagues commencĆØrent Ć  se former et Ć  se fixer dans sa mĆ©ditation, et il put entrevoir avec la prĆ©cision de la rĆ©alitĆ©, non l'ensemble de la situation, mais quelques dĆ©tails. Il commenƧa par reconnaĆ®tre que, si extraordinaire et si critique que fĆ»t cette situation, il en Ć©tait tout Ć  fait le maĆ®tre. Sa stupeur ne fit que s'en accroĆ®tre. IndĆ©pendamment du but sĆ©vĆØre et religieux que se proposaient ses actions, tout ce qu'il avait fait jusqu'Ć  ce jour n'Ć©tait autre chose qu'un trou qu'il creusait pour y enfouir son nom. Ce qu'il avait toujours le plus redoutĆ©, dans ses heures de repli sur lui-mĆŖme, dans ses nuits d'insomnie, c'Ć©tait d'entendre jamais prononcer ce nom; il se disait que ce serait lĆ  pour lui la fin de tout; que le jour où ce nom reparaĆ®trait, il ferait Ć©vanouir autour de lui sa vie nouvelle, et qui sait mĆŖme peut-ĆŖtre? au dedans de lui sa nouvelle Ć¢me. Il frĆ©missait de la seule pensĆ©e que c'Ć©tait possible. Certes, si quelqu'un lui eĆ»t dit en ces moments-lĆ  qu'une heure viendrait où ce nom retentirait Ć  son oreille, où ce hideux mot, Jean Valjean, sortirait tout Ć  coup de la nuit et se dresserait devant lui, où cette lumiĆØre formidable faite pour dissiper le mystĆØre dont il s'enveloppait resplendirait subitement sur sa tĆŖte; et que ce nom ne le menacerait pas, que cette lumiĆØre ne produirait qu'une obscuritĆ© plus Ć©paisse, que ce voile dĆ©chirĆ© accroĆ®trait le mystĆØre; que ce tremblement de terre consoliderait son Ć©difice, que ce prodigieux incident n'aurait d'autre rĆ©sultat, si bon lui semblait, Ć  lui, que de rendre son existence Ć  la fois plus claire et plus impĆ©nĆ©trable, et que, de sa confrontation avec le fantĆ“me de Jean Valjean, le bon et digne bourgeois monsieur Madeleine sortirait plus honorĆ©, plus paisible et plus respectĆ© que jamais,--si quelqu'un lui eĆ»t dit cela, il eĆ»t hochĆ© la tĆŖte et regardĆ© ces paroles comme insensĆ©es. Eh bien! tout cela venait prĆ©cisĆ©ment d'arriver, tout cet entassement de l'impossible Ć©tait un fait, et Dieu avait permis que ces choses folles devinssent des choses rĆ©elles! Sa rĆŖverie continuait de s'Ć©claircir. Il se rendait de plus en plus compte de sa position. Il lui semblait qu'il venait de s'Ć©veiller de je ne sais quel sommeil, et qu'il se trouvait glissant sur une pente au milieu de la nuit, debout, frissonnant, reculant en vain, sur le bord extrĆŖme d'un abĆ®me. Il entrevoyait distinctement dans l'ombre un inconnu, un Ć©tranger, que la destinĆ©e prenait pour lui et poussait dans le gouffre Ć  sa place. Il fallait, pour que le gouffre se refermĆ¢t, que quelqu'un y tombĆ¢t, lui ou l'autre. Il n'avait qu'Ć  laisser faire. La clartĆ© devint complĆØte, et il s'avoua ceci:--Que sa place Ć©tait vide aux galĆØres, qu'il avait beau faire, qu'elle l'y attendait toujours, que le vol de Petit-Gervais l'y ramenait, que cette place vide l'attendrait et l'attirerait jusqu'Ć  ce qu'il y fĆ»t, que cela Ć©tait inĆ©vitable et fatal.--Et puis il se dit:--Qu'en ce moment il avait un remplaƧant, qu'il paraissait qu'un nommĆ© Champmathieu avait cette mauvaise chance, et que, quant Ć  lui, prĆ©sent dĆ©sormais au bagne dans la personne de ce Champmathieu, prĆ©sent dans la sociĆ©tĆ© sous le nom de M. Madeleine, il n'avait plus rien Ć  redouter, pourvu qu'il n'empĆŖchĆ¢t pas les hommes de sceller sur la tĆŖte de ce Champmathieu cette pierre de l'infamie qui, comme la pierre du sĆ©pulcre, tombe une fois et ne se relĆØve jamais. Tout cela Ć©tait si violent et si Ć©trange qu'il se fit soudain en lui cette espĆØce de mouvement indescriptible qu'aucun homme n'Ć©prouve plus de deux ou trois fois dans sa vie, sorte de convulsion de la conscience qui remue tout ce que le coeur a de douteux, qui se compose d'ironie, de joie et de dĆ©sespoir, et qu'on pourrait appeler un Ć©clat de rire intĆ©rieur. Il ralluma brusquement sa bougie. --Eh bien quoi! se dit-il, de quoi est-ce que j'ai peur? qu'est-ce que j'ai Ć  songer comme cela? Me voilĆ  sauvĆ©. Tout est fini. Je n'avais plus qu'une porte entr'ouverte par laquelle mon passĆ© pouvait faire irruption dans ma vie; cette porte, la voilĆ  murĆ©e! Ć  jamais! Ce Javert qui me trouble depuis si longtemps, ce redoutable instinct qui semblait m'avoir devinĆ©, qui m'avait devinĆ©, pardieu! et qui me suivait partout, cet affreux chien de chasse toujours en arrĆŖt sur moi, le voilĆ  dĆ©routĆ©, occupĆ© ailleurs, absolument dĆ©pistĆ©! Il est satisfait dĆ©sormais, il me laissera tranquille, il tient son Jean Valjean! Qui sait mĆŖme, il est probable qu'il voudra quitter la ville! Et tout cela s'est fait sans moi! Et je n'y suis pour rien! Ah ƧƠ, mais! qu'est-ce qu'il y a de malheureux dans ceci? Des gens qui me verraient, parole d'honneur! croiraient qu'il m'est arrivĆ© une catastrophe! AprĆØs tout, s'il y a du mal pour quelqu'un, ce n'est aucunement de ma faute. C'est la providence qui a tout fait. C'est qu'elle veut cela apparemment! Ai-je le droit de dĆ©ranger ce qu'elle arrange? Qu'est-ce que je demande Ć  prĆ©sent? De quoi est-ce que je vais me mĆŖler? Cela ne me regarde pas. Comment! je ne suis pas content! Mais qu'est-ce qu'il me faut donc? Le but auquel j'aspire depuis tant d'annĆ©es, le songe de mes nuits, l'objet de mes priĆØres au ciel, la sĆ©curitĆ©, je l'atteins! C'est Dieu qui le veut. Je n'ai rien Ć  faire contre la volontĆ© de Dieu. Et pourquoi Dieu le veut-il? Pour que je continue ce que j'ai commencĆ©, pour que je fasse le bien, pour que je sois un jour un grand et encourageant exemple, pour qu'il soit dit qu'il y a eu enfin un peu de bonheur attachĆ© Ć  cette pĆ©nitence que j'ai subie et Ć  cette vertu où je suis revenu! Vraiment je ne comprends pas pourquoi j'ai eu peur tantĆ“t d'entrer chez ce brave curĆ© et de tout lui raconter comme Ć  un confesseur, et de lui demander conseil, c'est Ć©videmment lĆ  ce qu'il m'aurait dit. C'est dĆ©cidĆ©, laissons aller les choses! laissons faire le bon Dieu! Il se parlait ainsi dans les profondeurs de sa conscience, penchĆ© sur ce qu'on pourrait appeler son propre abĆ®me. Il se leva de sa chaise, et se mit Ć  marcher dans la chambre.--Allons, dit-il, n'y pensons plus. VoilĆ  une rĆ©solution prise!--Mais il ne sentit aucune joie. Au contraire. On n'empĆŖche pas plus la pensĆ©e de revenir Ć  une idĆ©e que la mer de revenir Ć  un rivage. Pour le matelot, cela s'appelle la marĆ©e; pour le coupable, cela s'appelle le remords. Dieu soulĆØve l'Ć¢me comme l'ocĆ©an. Au bout de peu d'instants, il eut beau faire, il reprit ce sombre dialogue dans lequel c'Ć©tait lui qui parlait et lui qui Ć©coutait, disant ce qu'il eĆ»t voulu taire, Ć©coutant ce qu'il n'eĆ»t pas voulu entendre, cĆ©dant Ć  cette puissance mystĆ©rieuse qui lui disait: pense! comme elle disait il y a deux mille ans Ć  un autre condamnĆ©, marche! Avant d'aller plus loin et pour ĆŖtre pleinement compris, insistons sur une observation nĆ©cessaire. Il est certain qu'on se parle Ć  soi-mĆŖme, il n'est pas un ĆŖtre pensant qui ne l'ait Ć©prouvĆ©. On peut dire mĆŖme que le verbe n'est jamais un plus magnifique mystĆØre que lorsqu'il va, dans l'intĆ©rieur d'un homme, de la pensĆ©e Ć  la conscience et qu'il retourne de la conscience Ć  la pensĆ©e. C'est dans ce sens seulement qu'il faut entendre les mots souvent employĆ©s dans ce chapitre, il dit, il s'Ć©cria. On se dit, on se parle, on s'Ć©crie en soi-mĆŖme, sans que le silence extĆ©rieur soit rompu. Il y a un grand tumulte; tout parle en nous, exceptĆ© la bouche. Les rĆ©alitĆ©s de l'Ć¢me, pour n'ĆŖtre point visibles et palpables, n'en sont pas moins des rĆ©alitĆ©s. Il se demanda donc où il en Ć©tait. Il s'interrogea sur cette Ā«rĆ©solution priseĀ». Il se confessa Ć  lui-mĆŖme que tout ce qu'il venait d'arranger dans son esprit Ć©tait monstrueux, que Ā«laisser aller les choses, laisser faire le bon DieuĀ», c'Ć©tait tout simplement horrible. Laisser s'accomplir cette mĆ©prise de la destinĆ©e et des hommes, ne pas l'empĆŖcher, s'y prĆŖter par son silence, ne rien faire enfin, c'Ć©tait faire tout! c'Ć©tait le dernier degrĆ© de l'indignitĆ© hypocrite! c'Ć©tait un crime bas, lĆ¢che, sournois, abject, hideux! Pour la premiĆØre fois depuis huit annĆ©es, le malheureux homme venait de sentir la saveur amĆØre d'une mauvaise pensĆ©e et d'une mauvaise action. Il la recracha avec dĆ©goĆ»t. Il continua de se questionner. Il se demanda sĆ©vĆØrement ce qu'il avait entendu par ceci: "Mon but est atteint!" Il se dĆ©clara que sa vie avait un but en effet. Mais quel but? cacher son nom? tromper la police? Ɖtait-ce pour une chose si petite qu'il avait fait tout ce qu'il avait fait? Est-ce qu'il n'avait pas un autre but, qui Ć©tait le grand, qui Ć©tait le vrai? Sauver, non sa personne, mais son Ć¢me. Redevenir honnĆŖte et bon. Être un juste! est-ce que ce n'Ć©tait pas lĆ  surtout, lĆ  uniquement, ce qu'il avait toujours voulu, ce que l'Ć©vĆŖque lui avait ordonnĆ©?--Fermer la porte Ć  son passĆ©? Mais il ne la fermait pas, grand Dieu! il la rouvrait en faisant une action infĆ¢me! mais il redevenait un voleur, et le plus odieux des voleurs! il volait Ć  un autre son existence, sa vie, sa paix, sa place au soleil! il devenait un assassin! il tuait, il tuait moralement un misĆ©rable homme, il lui infligeait cette affreuse mort vivante, cette mort Ć  ciel ouvert, qu'on appelle le bagne! Au contraire, se livrer, sauver cet homme frappĆ© d'une si lugubre erreur, reprendre son nom, redevenir par devoir le forƧat Jean Valjean, c'Ć©tait lĆ  vraiment achever sa rĆ©surrection, et fermer Ć  jamais l'enfer d'où il sortait! Y retomber en apparence, c'Ć©tait en sortir en rĆ©alitĆ©! Il fallait faire cela! il n'avait rien fait s'il ne faisait pas cela! toute sa vie Ć©tait inutile, toute sa pĆ©nitence Ć©tait perdue, et il n'y avait plus qu'Ć  dire: Ć  quoi bon? Il sentait que l'Ć©vĆŖque Ć©tait lĆ , que l'Ć©vĆŖque Ć©tait d'autant plus prĆ©sent qu'il Ć©tait mort, que l'Ć©vĆŖque le regardait fixement, que dĆ©sormais le maire Madeleine avec toutes ses vertus lui serait abominable, et que le galĆ©rien Jean Valjean serait admirable et pur devant lui. Que les hommes voyaient son masque, mais que l'Ć©vĆŖque voyait sa face. Que les hommes voyaient sa vie, mais que l'Ć©vĆŖque voyait sa conscience. Il fallait donc aller Ć  Arras, dĆ©livrer le faux Jean Valjean, dĆ©noncer le vĆ©ritable! HĆ©las! c'Ć©tait lĆ  le plus grand des sacrifices, la plus poignante des victoires, le dernier pas Ć  franchir; mais il le fallait. Douloureuse destinĆ©e! il n'entrerait dans la saintetĆ© aux yeux de Dieu que s'il rentrait dans l'infamie aux yeux des hommes! --Eh bien, dit-il, prenons ce parti! faisons notre devoir! sauvons cet homme! Il prononƧa ces paroles Ć  haute voix, sans s'apercevoir qu'il parlait tout haut. Il prit ses livres, les vĆ©rifia et les mit en ordre. Il jeta au feu une liasse de crĆ©ances qu'il avait sur de petits commerƧants gĆŖnĆ©s. Il Ć©crivit une lettre qu'il cacheta et sur l'enveloppe de laquelle on aurait pu lire, s'il y avait eu quelqu'un dans sa chambre en cet instant: _ƀ Monsieur Laffitte, banquier, rue d'Artois, Ć  Paris_. Il tira d'un secrĆ©taire un portefeuille qui contenait quelques billets de banque et le passeport dont il s'Ć©tait servi cette mĆŖme annĆ©e pour aller aux Ć©lections. Qui l'eĆ»t vu pendant qu'il accomplissait ces divers actes auxquels se mĆŖlait une mĆ©ditation si grave, ne se fĆ»t pas doutĆ© de ce qui se passait en lui. Seulement par moments ses lĆØvres remuaient; dans d'autres instants il relevait la tĆŖte et fixait son regard sur un point quelconque de la muraille, comme s'il y avait prĆ©cisĆ©ment lĆ  quelque chose qu'il voulait Ć©claircir ou interroger. La lettre Ć  M. Laffitte terminĆ©e, il la mit dans sa poche ainsi que le portefeuille, et recommenƧa Ć  marcher. Sa rĆŖverie n'avait point dĆ©viĆ©. Il continuait de voir clairement son devoir Ć©crit en lettres lumineuses qui flamboyaient devant ses yeux et se dĆ©plaƧaient avec son regard:--_Va! nomme-toi! dĆ©nonce-toi!_ Il voyait de mĆŖme, et comme si elles se fussent mues devant lui avec des formes sensibles, les deux idĆ©es qui avaient Ć©tĆ© jusque-lĆ  la double rĆØgle de sa vie: cacher son nom, sanctifier son Ć¢me. Pour la premiĆØre fois, elles lui apparaissaient absolument distinctes, et il voyait la diffĆ©rence qui les sĆ©parait. Il reconnaissait que l'une de ces idĆ©es Ć©tait nĆ©cessairement bonne, tandis que l'autre pouvait devenir mauvaise; que celle-lĆ  Ć©tait le dĆ©vouement et que celle-ci Ć©tait la personnalitĆ©; que l'une disait: le _prochain_, et que l'autre disait: _moi_; que l'une venait de la lumiĆØre et que l'autre venait de la nuit. Elles se combattaient, il les voyait se combattre. ƀ mesure qu'il songeait, elles avaient grandi devant l'oeil de son esprit; elles avaient maintenant des statures colossales; et il lui semblait qu'il voyait lutter au dedans de lui-mĆŖme, dans cet infini dont nous parlions tout Ć  l'heure, au milieu des obscuritĆ©s et des lueurs, une dĆ©esse et une gĆ©ante. Il Ć©tait plein d'Ć©pouvante, mais il lui semblait que la bonne pensĆ©e l'emportait. Il sentait qu'il touchait Ć  l'autre moment dĆ©cisif de sa conscience et de sa destinĆ©e; que l'Ć©vĆŖque avait marquĆ© la premiĆØre phase de sa vie nouvelle, et que ce Champmathieu en marquait la seconde. AprĆØs la grande crise, la grande Ć©preuve. Cependant la fiĆØvre, un instant apaisĆ©e, lui revenait peu Ć  peu. Mille pensĆ©es le traversaient, mais elles continuaient de le fortifier dans sa rĆ©solution. Un moment il s'Ć©tait dit:--qu'il prenait peut-ĆŖtre la chose trop vivement, qu'aprĆØs tout ce Champmathieu n'Ć©tait pas intĆ©ressant, qu'en somme il avait volĆ©. Il se rĆ©pondit:--Si cet homme a en effet volĆ© quelques pommes, c'est un mois de prison. Il y a loin de lĆ  aux galĆØres. Et qui sait mĆŖme? a-t-il volĆ©? est-ce prouvĆ©? Le nom de Jean Valjean l'accable et semble dispenser de preuves. Les procureurs du roi n'agissent-ils pas habituellement ainsi? On le croit voleur, parce qu'on le sait forƧat. Dans un autre instant, cette idĆ©e lui vint que, lorsqu'il se serait dĆ©noncĆ©, peut-ĆŖtre on considĆ©rerait l'hĆ©roĆÆsme de son action, et sa vie honnĆŖte depuis sept ans, et ce qu'il avait fait pour le pays, et qu'on lui ferait grĆ¢ce. Mais cette supposition s'Ć©vanouit bien vite, et il sourit amĆØrement en songeant que le vol des quarante sous Ć  Petit-Gervais le faisait rĆ©cidiviste, que cette affaire reparaĆ®trait certainement et, aux termes prĆ©cis de la loi, le ferait passible des travaux forcĆ©s Ć  perpĆ©tuitĆ©. Il se dĆ©tourna de toute illusion, se dĆ©tacha de plus en plus de la terre et chercha la consolation et la force ailleurs. Il se dit qu'il fallait faire son devoir; que peut-ĆŖtre mĆŖme ne serait-il pas plus malheureux aprĆØs avoir fait son devoir qu'aprĆØs l'avoir Ć©ludĆ©; que s'il _laissait faire_, s'il restait Ć  Montreuil-sur-mer, sa considĆ©ration, sa bonne renommĆ©e, ses bonnes oeuvres, la dĆ©fĆ©rence, la vĆ©nĆ©ration, sa charitĆ©, sa richesse, sa popularitĆ©, sa vertu, seraient assaisonnĆ©es d'un crime; et quel goĆ»t auraient toutes ces choses saintes liĆ©es Ć  cette chose hideuse! tandis que, s'il accomplissait son sacrifice, au bagne, au poteau, au carcan, au bonnet vert, au travail sans relĆ¢che, Ć  la honte sans pitiĆ©, il se mĆŖlerait une idĆ©e cĆ©leste! Enfin il se dit qu'il y avait nĆ©cessitĆ©, que sa destinĆ©e Ć©tait ainsi faite, qu'il n'Ć©tait pas maĆ®tre de dĆ©ranger les arrangements d'en haut, que dans tous les cas il fallait choisir: ou la vertu au dehors et l'abomination au dedans, ou la saintetĆ© au dedans et l'infamie au dehors. ƀ remuer tant d'idĆ©es lugubres, son courage ne dĆ©faillait pas, mais son cerveau se fatiguait. Il commenƧait Ć  penser malgrĆ© lui Ć  d'autres choses, Ć  des choses indiffĆ©rentes. Ses artĆØres battaient violemment dans ses tempes. Il allait et venait toujours. Minuit sonna d'abord Ć  la paroisse, puis Ć  la maison de ville. Il compta les douze coups aux deux horloges, et il compara le son des deux cloches. Il se rappela Ć  cette occasion que quelques jours auparavant il avait vu chez un marchand de ferrailles une vieille cloche Ć  vendre sur laquelle ce nom Ć©tait Ć©crit: _Antoine Albin de Romainville_. Il avait froid. Il alluma un peu de feu. Il ne songea pas Ć  fermer la fenĆŖtre. Cependant il Ć©tait retombĆ© dans sa stupeur. Il lui fallait faire un assez grand effort pour se rappeler Ć  quoi il songeait avant que minuit sonnĆ¢t. Il y parvint enfin. --Ah! oui, se dit-il, j'avais pris la rĆ©solution de me dĆ©noncer. Et puis tout Ć  coup il pensa Ć  la Fantine. --Tiens! dit-il, et cette pauvre femme! Ici une crise nouvelle se dĆ©clara. Fantine, apparaissant brusquement dans sa rĆŖverie, y fut comme un rayon d'une lumiĆØre inattendue. Il lui sembla que tout changeait d'aspect autour de lui, il s'Ć©cria: --Ah ƧƠ, mais! jusqu'ici je n'ai considĆ©rĆ© que moi! je n'ai eu Ć©gard qu'Ć  ma convenance! Il me convient de me taire ou de me dĆ©noncer,--cacher ma personne ou sauver mon Ć¢me,--ĆŖtre un magistrat mĆ©prisable et respectĆ© ou un galĆ©rien infĆ¢me et vĆ©nĆ©rable, c'est moi, c'est toujours moi, ce n'est que moi! Mais, mon Dieu, c'est de l'Ć©goĆÆsme tout cela! Ce sont des formes diverses de l'Ć©goĆÆsme, mais c'est de l'Ć©goĆÆsme! Si je songeais un peu aux autres? La premiĆØre saintetĆ© est de penser Ć  autrui. Voyons, examinons. Moi exceptĆ©, moi effacĆ©, moi oubliĆ©, qu'arrivera-t-il de tout ceci?--Si je me dĆ©nonce? on me prend. On lĆ¢che ce Champmathieu, on me remet aux galĆØres, c'est bien. Et puis? Que se passe-t-il ici? Ah! ici, il y a un pays, une ville, des fabriques, une industrie, des ouvriers, des hommes, des femmes, des vieux grands-pĆØres, des enfants, des pauvres gens! J'ai crƩƩ tout ceci, je fais vivre tout cela; partout où il y a une cheminĆ©e qui fume, c'est moi qui ai mis le tison dans le feu et la viande dans la marmite; j'ai fait l'aisance, la circulation, le crĆ©dit; avant moi il n'y avait rien; j'ai relevĆ©, vivifiĆ©, animĆ©, fĆ©condĆ©, stimulĆ©, enrichi tout le pays; moi de moins, c'est l'Ć¢me de moins. Je m'Ć“te, tout meurt.--Et cette femme qui a tant souffert, qui a tant de mĆ©rites dans sa chute, dont j'ai causĆ© sans le vouloir tout le malheur! Et cet enfant que je voulais aller chercher, que j'ai promis Ć  la mĆØre! Est-ce que je ne dois pas aussi quelque chose Ć  cette femme, en rĆ©paration du mal que je lui ai fait? Si je disparais, qu'arrive-t-il? La mĆØre meurt. L'enfant devient ce qu'il peut. VoilĆ  ce qui se passe, si je me dĆ©nonce.--Si je ne me dĆ©nonce pas? Voyons, si je ne me dĆ©nonce pas? AprĆØs s'ĆŖtre fait cette question, il s'arrĆŖta; il eut comme un moment d'hĆ©sitation et de tremblement; mais ce moment dura peu, et il se rĆ©pondit avec calme: --Eh bien, cet homme va aux galĆØres, c'est vrai, mais, que diable! il a volĆ©! J'ai beau me dire qu'il n'a pas volĆ©, il a volĆ©! Moi, je reste ici, je continue. Dans dix ans j'aurai gagnĆ© dix millions, je les rĆ©pands dans le pays, je n'ai rien Ć  moi, qu'est-ce que cela me fait? Ce n'est pas pour moi ce que je fais! La prospĆ©ritĆ© de tous va croissant, les industries s'Ć©veillent et s'excitent, les manufactures et les usines se multiplient, les familles, cent familles, mille familles! sont heureuses; la contrĆ©e se peuple; il naĆ®t des villages où il n'y a que des fermes, il naĆ®t des fermes où il n'y a rien; la misĆØre disparaĆ®t, et avec la misĆØre disparaissent la dĆ©bauche, la prostitution, le vol, le meurtre, tous les vices, tous les crimes! Et cette pauvre mĆØre Ć©lĆØve son enfant! et voilĆ  tout un pays riche et honnĆŖte! Ah ƧƠ, j'Ć©tais fou, j'Ć©tais absurde, qu'est-ce que je parlais donc de me dĆ©noncer? Il faut faire attention, vraiment, et ne rien prĆ©cipiter. Quoi! parce qu'il m'aura plu de faire le grand et le gĆ©nĆ©reux,--c'est du mĆ©lodrame, aprĆØs tout!--parce que je n'aurai songĆ© qu'Ć  moi, qu'Ć  moi seul, quoi! pour sauver d'une punition peut-ĆŖtre un peu exagĆ©rĆ©e, mais juste au fond, on ne sait qui, un voleur, un drĆ“le Ć©videmment, il faudra que tout un pays pĆ©risse! il faudra qu'une pauvre femme crĆØve Ć  l'hĆ“pital! qu'une pauvre petite fille crĆØve sur le pavĆ©! comme des chiens! Ah! mais c'est abominable! Sans mĆŖme que la mĆØre ait revu son enfant! sans que l'enfant ait presque connu sa mĆØre! Et tout Ƨa pour ce vieux gredin de voleur de pommes qui, Ć  coup sĆ»r, a mĆ©ritĆ© les galĆØres pour autre chose, si ce n'est pour cela! Beaux scrupules qui sauvent un coupable et qui sacrifient des innocents, qui sauvent un vieux vagabond, lequel n'a plus que quelques annĆ©es Ć  vivre au bout du compte et ne sera guĆØre plus malheureux au bagne que dans sa masure, et qui sacrifient toute une population, mĆØres, femmes, enfants! Cette pauvre petite Cosette qui n'a que moi au monde et qui est sans doute en ce moment toute bleue de froid dans le bouge de ces ThĆ©nardier! VoilĆ  encore des canailles ceux-lĆ ! Et je manquerais Ć  mes devoirs envers tous ces pauvres ĆŖtres! Et je m'en irais me dĆ©noncer! Et je ferais cette inepte sottise! Mettons tout au pis. Supposons qu'il y ait une mauvaise action pour moi dans ceci et que ma conscience me la reproche un jour, accepter, pour le bien d'autrui, ces reproches qui ne chargent que moi, cette mauvaise action qui ne compromet que mon Ć¢me, c'est lĆ  qu'est le dĆ©vouement, c'est lĆ  qu'est la vertu. Il se leva, il se remit Ć  marcher. Cette fois il lui semblait qu'il Ć©tait content. On ne trouve les diamants que dans les tĆ©nĆØbres de la terre; on ne trouve les vĆ©ritĆ©s que dans les profondeurs de la pensĆ©e. Il lui semblait qu'aprĆØs ĆŖtre descendu dans ces profondeurs, aprĆØs avoir longtemps tĆ¢tonnĆ© au plus noir de ces tĆ©nĆØbres, il venait enfin de trouver un de ces diamants, une de ces vĆ©ritĆ©s, et qu'il la tenait dans sa main; et il s'Ć©blouissait Ć  la regarder. --Oui, pensa-t-il, c'est cela. Je suis dans le vrai. J'ai la solution. Il faut finir par s'en tenir Ć  quelque chose. Mon parti est pris. Laissons faire! Ne vacillons plus, ne reculons plus. Ceci est dans l'intĆ©rĆŖt de tous, non dans le mien. Je suis Madeleine, je reste Madeleine. Malheur Ć  celui qui est Jean Valjean! Ce n'est plus moi. Je ne connais pas cet homme, je ne sais plus ce que c'est, s'il se trouve que quelqu'un est Jean Valjean Ć  cette heure, qu'il s'arrange! cela ne me regarde pas. C'est un nom de fatalitĆ© qui flotte dans la nuit, s'il s'arrĆŖte et s'abat sur une tĆŖte, tant pis pour elle! Il se regarda dans le petit miroir qui Ć©tait sur sa cheminĆ©e, et dit: --Tiens! cela m'a soulagĆ© de prendre une rĆ©solution! Je suis tout autre Ć  prĆ©sent. Il marcha encore quelques pas, puis il s'arrĆŖta court: --Allons! dit-il, il ne faut hĆ©siter devant aucune des consĆ©quences de la rĆ©solution prise. Il y a encore des fils qui m'attachent Ć  ce Jean Valjean. Il faut les briser! Il y a ici, dans cette chambre mĆŖme, des objets qui m'accuseraient, des choses muettes qui seraient des tĆ©moins, c'est dit, il faut que tout cela disparaisse. Il fouilla dans sa poche, en tira sa bourse, l'ouvrit, et y prit une petite clef. Il introduisit cette clef dans une serrure dont on voyait Ć  peine le trou, perdu qu'il Ć©tait dans les nuances les plus sombres du dessin qui couvrait le papier collĆ© sur le mur. Une cachette s'ouvrit, une espĆØce de fausse armoire mĆ©nagĆ©e entre l'angle de la muraille et le manteau de la cheminĆ©e. Il n'y avait dans cette cachette que quelques guenilles, un sarrau de toile bleue, un vieux pantalon, un vieux havresac, et un gros bĆ¢ton d'Ć©pine ferrĆ© aux deux bouts. Ceux qui avaient vu Jean Valjean Ć  l'Ć©poque où il traversait Digne, en octobre 1815, eussent aisĆ©ment reconnu toutes les piĆØces de ce misĆ©rable accoutrement. Il les avait conservĆ©es comme il avait conservĆ© les chandeliers d'argent, pour se rappeler toujours son point de dĆ©part. Seulement il cachait ceci qui venait du bagne, et il laissait voir les flambeaux qui venaient de l'Ć©vĆŖque. Il jeta un regard furtif vers la porte, comme s'il eĆ»t craint qu'elle ne s'ouvrĆ®t malgrĆ© le verrou qui la fermait; puis d'un mouvement vif et brusque et d'une seule brassĆ©e, sans mĆŖme donner un coup d'oeil Ć  ces choses qu'il avait si religieusement et si pĆ©rilleusement gardĆ©es pendant tant d'annĆ©es, il prit tout, haillons, bĆ¢ton, havresac, et jeta tout au feu. Il referma la fausse armoire, et, redoublant de prĆ©cautions, dĆ©sormais inutiles puisqu'elle Ć©tait vide, en cacha la porte derriĆØre un gros meuble qu'il y poussa. Au bout de quelques secondes, la chambre et le mur d'en face furent Ć©clairĆ©s d'une grande rĆ©verbĆ©ration rouge et tremblante. Tout brĆ»lait. Le bĆ¢ton d'Ć©pine pĆ©tillait et jetait des Ć©tincelles jusqu'au milieu de la chambre. Le havresac, en se consumant avec d'affreux chiffons qu'il contenait, avait mis Ć  nu quelque chose qui brillait dans la cendre. En se penchant, on eĆ»t aisĆ©ment reconnu une piĆØce d'argent. Sans doute la piĆØce de quarante sous volĆ©e au petit savoyard. Lui ne regardait pas le feu et marchait, allant et venant toujours du mĆŖme pas. Tout Ć  coup ses yeux tombĆØrent sur les deux flambeaux d'argent que la rĆ©verbĆ©ration faisait reluire vaguement sur la cheminĆ©e. --Tiens! pensa-t-il, tout Jean Valjean est encore lĆ -dedans. Il faut aussi dĆ©truire cela. Il prit les deux flambeaux. Il y avait assez de feu pour qu'on pĆ»t les dĆ©former promptement et en faire une sorte de lingot mĆ©connaissable. Il se pencha sur le foyer et s'y chauffa un instant. Il eut un vrai bien-ĆŖtre.--La bonne chaleur! dit-il. Il remua le brasier avec un des deux chandeliers. Une minute de plus, et ils Ć©taient dans le feu. En ce moment il lui sembla qu'il entendait une voix qui criait au dedans de lui: --Jean Valjean! Jean Valjean! Ses cheveux se dressĆØrent, il devint comme un homme qui Ć©coute une chose terrible. --Oui, c'est cela, achĆØve! disait la voix. ComplĆØte ce que tu fais! dĆ©truis ces flambeaux! anĆ©antis ce souvenir! oublie l'Ć©vĆŖque! oublie tout! perds ce Champmathieu! va, c'est bien. Applaudis-toi! Ainsi, c'est convenu, c'est rĆ©solu, c'est dit, voilĆ  un homme, voilĆ  un vieillard qui ne sait ce qu'on lui veut, qui n'a rien fait peut-ĆŖtre, un innocent, dont ton nom fait tout le malheur, sur qui ton nom pĆØse comme un crime, qui va ĆŖtre pris pour toi, qui va ĆŖtre condamnĆ©, qui va finir ses jours dans l'abjection et dans l'horreur! c'est bien. Sois honnĆŖte homme, toi. Reste monsieur le maire, reste honorable et honorĆ©, enrichis la ville, nourris des indigents, Ć©lĆØve des orphelins, vis heureux, vertueux et admirĆ©, et pendant ce temps-lĆ , pendant que tu seras ici dans la joie et dans la lumiĆØre, il y aura quelqu'un qui aura ta casaque rouge, qui portera ton nom dans l'ignominie et qui traĆ®nera ta chaĆ®ne au bagne! Oui, c'est bien arrangĆ© ainsi! Ah! misĆ©rable! La sueur lui coulait du front. Il attachait sur les flambeaux un oeil hagard. Cependant ce qui parlait en lui n'avait pas fini. La voix continuait: --Jean Valjean! il y aura autour de toi beaucoup de voix qui feront un grand bruit, qui parleront bien haut, et qui te bĆ©niront, et une seule que personne n'entendra et qui te maudira dans les tĆ©nĆØbres. Eh bien! Ć©coute, infĆ¢me! toutes ces bĆ©nĆ©dictions retomberont avant d'arriver au ciel, et il n'y aura que la malĆ©diction qui montera jusqu'Ć  Dieu! Cette voix, d'abord toute faible et qui s'Ć©tait Ć©levĆ©e du plus obscur de sa conscience, Ć©tait devenue par degrĆ©s Ć©clatante et formidable, et il l'entendait maintenant Ć  son oreille. Il lui semblait qu'elle Ć©tait sortie de lui-mĆŖme et qu'elle parlait Ć  prĆ©sent en dehors de lui. Il crut entendre les derniĆØres paroles si distinctement qu'il regarda dans la chambre avec une sorte de terreur. --Y a-t-il quelqu'un ici? demanda-t-il Ć  haute voix, et tout Ć©garĆ©. Puis il reprit avec un rire qui ressemblait au rire d'un idiot: --Que je suis bĆŖte! il ne peut y avoir personne. Il y avait quelqu'un; mais celui qui y Ć©tait n'Ć©tait pas de ceux que l'oeil humain peut voir. Il posa les flambeaux sur la cheminĆ©e. Alors il reprit cette marche monotone et lugubre qui troublait dans ses rĆŖves et rĆ©veillait en sursaut l'homme endormi au-dessous de lui. Cette marche le soulageait et l'enivrait en mĆŖme temps. Il semble que parfois dans les occasions suprĆŖmes on se remue pour demander conseil Ć  tout ce qu'on peut rencontrer en se dĆ©plaƧant. Au bout de quelques instants il ne savait plus où il en Ć©tait. Il reculait maintenant avec une Ć©gale Ć©pouvante devant les deux rĆ©solutions qu'il avait prises tour Ć  tour. Les deux idĆ©es qui le conseillaient lui paraissaient aussi funestes l'une que l'autre.--Quelle fatalitĆ©! quelle rencontre que ce Champmathieu pris pour lui! Être prĆ©cipitĆ© justement par le moyen que la providence paraissait d'abord avoir employĆ© pour l'affermir! Il y eut un moment où il considĆ©ra l'avenir. Se dĆ©noncer, grand Dieu! se livrer! Il envisagea avec un immense dĆ©sespoir tout ce qu'il faudrait quitter, tout ce qu'il faudrait reprendre. Il faudrait donc dire adieu Ć  cette existence si bonne, si pure, si radieuse, Ć  ce respect de tous, Ć  l'honneur, Ć  la libertĆ©! Il n'irait plus se promener dans les champs, il n'entendrait plus chanter les oiseaux au mois de mai, il ne ferait plus l'aumĆ“ne aux petits enfants! Il ne sentirait plus la douceur des regards de reconnaissance et d'amour fixĆ©s sur lui! Il quitterait cette maison qu'il avait bĆ¢tie, cette chambre, cette petite chambre! Tout lui paraissait charmant Ć  cette heure. Il ne lirait plus dans ces livres, il n'Ć©crirait plus sur cette petite table de bois blanc! Sa vieille portiĆØre, la seule servante qu'il eĆ»t, ne lui monterait plus son cafĆ© le matin. Grand Dieu! au lieu de cela, la chiourme, le carcan, la veste rouge, la chaĆ®ne au pied, la fatigue, le cachot, le lit de camp, toutes ces horreurs connues! ƀ son Ć¢ge, aprĆØs avoir Ć©tĆ© ce qu'il Ć©tait! Si encore il Ć©tait jeune! Mais, vieux, ĆŖtre tutoyĆ© par le premier venu, ĆŖtre fouillĆ© par le garde-chiourme, recevoir le coup de bĆ¢ton de l'argousin! avoir les pieds nus dans des souliers ferrĆ©s! tendre matin et soir sa jambe au marteau du rondier qui visite la manille! subir la curiositĆ© des Ć©trangers auxquels on dirait: _Celui-lĆ , c'est le fameux Jean Valjean, qui a Ć©tĆ© maire Ć  Montreuil-sur-mer_! Le soir, ruisselant de sueur, accablĆ© de lassitude, le bonnet vert sur les yeux, remonter deux Ć  deux, sous le fouet du sergent, l'escalier-Ć©chelle du bagne flottant! Oh! quelle misĆØre! La destinĆ©e peut-elle donc ĆŖtre mĆ©chante comme un ĆŖtre intelligent et devenir monstrueuse comme le coeur humain! Et, quoi qu'il fĆ®t, il retombait toujours sur ce poignant dilemme qui Ć©tait au fond de sa rĆŖverie:--rester dans le paradis, et y devenir dĆ©mon! rentrer dans l'enfer, et y devenir ange! Que faire, grand Dieu! que faire? La tourmente dont il Ć©tait sorti avec tant de peine se dĆ©chaĆ®na de nouveau en lui. Ses idĆ©es recommencĆØrent Ć  se mĆŖler. Elles prirent ce je ne sais quoi de stupĆ©fiĆ© et de machinal qui est propre au dĆ©sespoir. Ce nom de Romainville lui revenait sans cesse Ć  l'esprit avec deux vers d'une chanson qu'il avait entendue autrefois. Il songeait que Romainville est un petit bois prĆØs Paris où les jeunes gens amoureux vont cueillir des lilas au mois d'avril. Il chancelait au dehors comme au dedans. Il marchait comme un petit enfant qu'on laisse aller seul. ƀ de certains moments, luttant contre sa lassitude, il faisait effort pour ressaisir son intelligence. Il tĆ¢chait de se poser une derniĆØre fois, et dĆ©finitivement, le problĆØme sur lequel il Ć©tait en quelque sorte tombĆ© d'Ć©puisement. Faut-il se dĆ©noncer? Faut-il se taire?--Il ne rĆ©ussissait Ć  rien voir de distinct. Les vagues aspects de tous les raisonnements Ć©bauchĆ©s par sa rĆŖverie tremblaient et se dissipaient l'un aprĆØs l'autre en fumĆ©e. Seulement il sentait que, Ć  quelque parti qu'il s'arrĆŖtĆ¢t, nĆ©cessairement, et sans qu'il fĆ»t possible d'y Ć©chapper, quelque chose de lui allait mourir; qu'il entrait dans un sĆ©pulcre Ć  droite comme Ć  gauche; qu'il accomplissait une agonie, l'agonie de son bonheur ou l'agonie de sa vertu. HĆ©las! toutes ses irrĆ©solutions l'avaient repris. Il n'Ć©tait pas plus avancĆ© qu'au commencement. Ainsi se dĆ©battait sous l'angoisse cette malheureuse Ć¢me. Dix-huit cents ans avant cet homme infortunĆ©, l'ĆŖtre mystĆ©rieux, en qui se rĆ©sument toutes les saintetĆ©s et toutes les souffrances de l'humanitĆ©, avait aussi lui, pendant que les oliviers frĆ©missaient au vent farouche de l'infini, longtemps Ć©cartĆ© de la main l'effrayant calice qui lui apparaissait ruisselant d'ombre et dĆ©bordant de tĆ©nĆØbres dans des profondeurs pleines d'Ć©toiles. Chapitre IV Formes que prend la souffrance pendant le sommeil Trois heures du matin venaient de sonner, et il y avait cinq heures qu'il marchait ainsi, presque sans interruption lorsqu'il se laissa tomber sur sa chaise. Il s'y endormit et fit un rĆŖve. Ce rĆŖve, comme la plupart des rĆŖves, ne se rapportait Ć  la situation que par je ne sais quoi de funeste et de poignant, mais il lui fit impression. Ce cauchemar le frappa tellement que plus tard il l'a Ć©crit. C'est un des papiers Ć©crits de sa main qu'il a laissĆ©s. Nous croyons devoir transcrire ici cette chose textuellement. Quel que soit ce rĆŖve, l'histoire de cette nuit serait incomplĆØte si nous l'omettions. C'est la sombre aventure d'une Ć¢me malade. Le voici. Sur l'enveloppe nous trouvons cette ligne Ć©crite: _Le rĆŖve que j'ai eu cette nuit-lĆ ._ Ā«J'Ć©tais dans une campagne. Une grande campagne triste où il n'y avait pas d'herbe. Il ne me semblait pas qu'il fĆ®t jour ni qu'il fĆ®t nuit. Ā«Je me promenais avec mon frĆØre, le frĆØre de mes annĆ©es d'enfance, ce frĆØre auquel je dois dire que je ne pense jamais et dont je ne me souviens presque plus. Ā«Nous causions, et nous rencontrions des passants. Nous parlions d'une voisine que nous avions eue autrefois, et qui, depuis qu'elle demeurait sur la rue, travaillait la fenĆŖtre toujours ouverte. Tout en causant, nous avions froid Ć  cause de cette fenĆŖtre ouverte. Ā«Il n'y avait pas d'arbres dans la campagne. Ā«Nous vĆ®mes un homme qui passa prĆØs de nous. C'Ć©tait un homme tout nu, couleur de cendre, montĆ© sur un cheval couleur de terre. L'homme n'avait pas de cheveux; on voyait son crĆ¢ne et des veines sur son crĆ¢ne. Il tenait Ć  la main une baguette qui Ć©tait souple comme un sarment de vigne et lourde comme du fer. Ce cavalier passa et ne nous dit rien. Ā«Mon frĆØre me dit: Prenons par le chemin creux. Ā«Il y avait un chemin creux où l'on ne voyait pas une broussaille ni un brin de mousse. Tout Ć©tait couleur de terre, mĆŖme le ciel. Au bout de quelques pas, on ne me rĆ©pondit plus quand je parlais. Je m'aperƧus que mon frĆØre n'Ć©tait plus avec moi. Ā«J'entrai dans un village que je vis. Je songeai que ce devait ĆŖtre lĆ  Romainville (pourquoi Romainville?). Ā«La premiĆØre rue où j'entrai Ć©tait dĆ©serte. J'entrai dans une seconde rue. DerriĆØre l'angle que faisaient les deux rues, il y avait un homme debout contre le mur. Je dis Ć  cet homme:--Quel est ce pays? où suis-je? L'homme ne rĆ©pondit pas. Je vis la porte d'une maison ouverte, j'y entrai. Ā«La premiĆØre chambre Ć©tait dĆ©serte. J'entrai dans la seconde. DerriĆØre la porte de cette chambre, il y avait un homme debout contre le mur. Je demandai Ć  cet homme:--ƀ qui est cette maison? où suis-je? L'homme ne rĆ©pondit pas. La maison avait un jardin. Ā«Je sortis de la maison et j'entrai dans le jardin. Le jardin Ć©tait dĆ©sert. DerriĆØre le premier arbre, je trouvai un homme qui se tenait debout. Je dis Ć  cet homme:--Quel est ce jardin? où suis-je? L'homme ne rĆ©pondit pas. Ā«J'errai dans le village, et je m'aperƧus que c'Ć©tait une ville. Toutes les rues Ć©taient dĆ©sertes, toutes les portes Ć©taient ouvertes. Aucun ĆŖtre vivant ne passait dans les rues, ne marchait dans les chambres ou ne se promenait dans les jardins. Mais il y avait derriĆØre chaque angle de mur, derriĆØre chaque porte, derriĆØre chaque arbre, un homme debout qui se taisait. On n'en voyait jamais qu'un Ć  la fois. Ces hommes me regardaient passer. Ā«Je sortis de la ville et je me mis Ć  marcher dans les champs. Ā«Au bout de quelque temps, je me retournai, et je vis une grande foule qui venait derriĆØre moi. Je reconnus tous les hommes que j'avais vus dans la ville. Ils avaient des tĆŖtes Ć©tranges. Ils ne semblaient pas se hĆ¢ter, et cependant ils marchaient plus vite que moi. Ils ne faisaient aucun bruit en marchant. En un instant, cette foule me rejoignit et m'entoura. Les visages de ces hommes Ć©taient couleur de terre. Ā«Alors le premier que j'avais vu et questionnĆ© en entrant dans la ville me dit:--Où allez-vous? Est-ce que vous ne savez pas que vous ĆŖtes mort depuis longtemps? Ā«J'ouvris la bouche pour rĆ©pondre, et je m'aperƧus qu'il n'y avait personne autour de moi.Ā» Il se rĆ©veilla. Il Ć©tait glacĆ©. Un vent qui Ć©tait froid comme le vent du matin faisait tourner dans leurs gonds les chĆ¢ssis de la croisĆ©e restĆ©e ouverte. Le feu s'Ć©tait Ć©teint. La bougie touchait Ć  sa fin. Il Ć©tait encore nuit noire. Il se leva, il alla Ć  la fenĆŖtre. Il n'y avait toujours pas d'Ć©toiles au ciel. De sa fenĆŖtre on voyait la cour de la maison et la rue. Un bruit sec et dur qui rĆ©sonna tout Ć  coup sur le sol lui fit baisser les yeux. Il vit au-dessous de lui deux Ć©toiles rouges dont les rayons s'allongeaient et se raccourcissaient bizarrement dans l'ombre. Comme sa pensĆ©e Ć©tait encore Ć  demi submergĆ©e dans la brume des rĆŖves.--tiens! songea-t-il, il n'y en a pas dans le ciel. Elles sont sur la terre maintenant. Cependant ce trouble se dissipa, un second bruit pareil au premier acheva de le rĆ©veiller; il regarda, et il reconnut que ces deux Ć©toiles Ć©taient les lanternes d'une voiture. ƀ la clartĆ© qu'elles jetaient, il put distinguer la forme de cette voiture. C'Ć©tait un tilbury attelĆ© d'un petit cheval blanc. Le bruit qu'il avait entendu, c'Ć©taient les coups de pied du cheval sur le pavĆ©. --Qu'est-ce que c'est que cette voiture? se dit-il. Qui est-ce qui vient donc si matin? En ce moment on frappa un petit coup Ć  la porte de sa chambre. Il frissonna de la tĆŖte aux pieds, et cria d'une voix terrible: --Qui est lĆ ? Quelqu'un rĆ©pondit: --Moi, monsieur le maire. Il reconnut la voix de la vieille femme, sa portiĆØre. --Eh bien, reprit-il, qu'est-ce que c'est? --Monsieur le maire, il est tout Ć  l'heure cinq heures du matin. --Qu'est-ce que cela me fait? --Monsieur le maire, c'est le cabriolet. --Quel cabriolet? --Le tilbury. --Quel tilbury? --Est-ce que monsieur le maire n'a pas fait demander un tilbury? --Non, dit-il. --Le cocher dit qu'il vient chercher monsieur le maire. --Quel cocher? --Le cocher de M. Scaufflaire. --M. Scaufflaire? Ce nom le fit tressaillir comme si un Ć©clair lui eĆ»t passĆ© devant la face. --Ah! oui! reprit-il, M. Scaufflaire. Si la vieille femme l'eĆ»t pu voir en ce moment, elle eĆ»t Ć©tĆ© Ć©pouvantĆ©e. Il se fit un assez long silence. Il examinait d'un air stupide la flamme de la bougie et prenait autour de la mĆØche de la cire brĆ»lante qu'il roulait dans ses doigts. La vieille attendait. Elle se hasarda pourtant Ć  Ć©lever encore la voix: --Monsieur le maire, que faut-il que je rĆ©ponde? --Dites que c'est bien, et que je descends. Chapitre V BĆ¢tons dans les roues Le service des postes d'Arras Ć  Montreuil-sur-mer se faisait encore Ć  cette Ć©poque par de petites malles du temps de l'empire. Ces malles Ć©taient des cabriolets Ć  deux roues, tapissĆ©s de cuir fauve au dedans, suspendus sur des ressorts Ć  pompe, et n'ayant que deux places, l'une pour le courrier, l'autre pour le voyageur. Les roues Ć©taient armĆ©es de ces longs moyeux offensifs qui tiennent les autres voitures Ć  distance et qu'on voit encore sur les routes d'Allemagne. Le coffre aux dĆ©pĆŖches, immense boĆ®te oblongue, Ć©tait placĆ© derriĆØre le cabriolet et faisait corps avec lui. Ce coffre Ć©tait peint en noir et le cabriolet en jaune. Ces voitures, auxquelles rien ne ressemble aujourd'hui, avaient je ne sais quoi de difforme et de bossu, et, quand on les voyait passer de loin et ramper dans quelque route Ć  l'horizon, elles ressemblaient Ć  ces insectes qu'on appelle, je crois, termites, et qui, avec un petit corsage, traĆ®nent un gros arriĆØre-train. Elles allaient, du reste, fort vite. La malle partie d'Arras toutes les nuits Ć  une heure, aprĆØs le passage du courrier de Paris, arrivait Ć  Montreuil-sur-mer un peu avant cinq heures du matin. Cette nuit-lĆ , la malle qui descendait Ć  Montreuil-sur-mer par la route de Hesdin accrocha, au tournant d'une rue, au moment où elle entrait dans la ville, un petit tilbury attelĆ© d'un cheval blanc, qui venait en sens inverse et dans lequel il n'y avait qu'une personne, un homme enveloppĆ© d'un manteau. La roue du tilbury reƧut un choc assez rude. Le courrier cria Ć  cet homme d'arrĆŖter, mais le voyageur n'Ć©couta pas, et continua sa route au grand trot. --VoilĆ  un homme diablement pressĆ©! dit le courrier. L'homme qui se hĆ¢tait ainsi, c'est celui que nous venons de voir se dĆ©battre dans des convulsions dignes Ć  coup sĆ»r de pitiĆ©. Où allait-il? Il n'eĆ»t pu le dire. Pourquoi se hĆ¢tait-il? Il ne savait. Il allait au hasard devant lui. Où? ƀ Arras sans doute; mais il allait peut-ĆŖtre ailleurs aussi. Par moments il le sentait, et il tressaillait. Il s'enfonƧait dans cette nuit comme dans un gouffre. Quelque chose le poussait, quelque chose l'attirait. Ce qui se passait en lui, personne ne pourrait le dire, tous le comprendront. Quel homme n'est entrĆ©, au moins une fois en sa vie, dans cette obscure caverne de l'inconnu? Du reste il n'avait rien rĆ©solu, rien dĆ©cidĆ©, rien arrĆŖtĆ©, rien fait. Aucun des actes de sa conscience n'avait Ć©tĆ© dĆ©finitif. Il Ć©tait plus que jamais comme au premier moment. Pourquoi allait-il Ć  Arras? Il se rĆ©pĆ©tait ce qu'il s'Ć©tait dĆ©jĆ  dit en retenant le cabriolet de Scaufflaire,--que, quel que dĆ»t ĆŖtre le rĆ©sultat, il n'y avait aucun inconvĆ©nient Ć  voir de ses yeux, Ć  juger les choses par lui-mĆŖme;--que cela mĆŖme Ć©tait prudent, qu'il fallait savoir ce qui se passerait; qu'on ne pouvait rien dĆ©cider sans avoir observĆ© et scrutĆ©;--que de loin on se faisait des montagnes de tout; qu'au bout du compte, lorsqu'il aurait vu ce Champmathieu, quelque misĆ©rable, sa conscience serait probablement fort soulagĆ©e de le laisser aller au bagne Ć  sa place;--qu'Ć  la vĆ©ritĆ© il y aurait lĆ  Javert, et ce Brevet, ce Chenildieu, ce Cochepaille, anciens forƧats qui l'avaient connu; mais qu'Ć  coup sĆ»r ils ne le reconnaĆ®traient pas;--bah! quelle idĆ©e!--que Javert en Ć©tait Ć  cent lieues;--que toutes les conjectures et toutes les suppositions Ć©taient fixĆ©es sur ce Champmathieu, et que rien n'est entĆŖtĆ© comme les suppositions et les conjectures;--qu'il n'y avait donc aucun danger. Que sans doute c'Ć©tait un moment noir, mais qu'il en sortirait;--qu'aprĆØs tout il tenait sa destinĆ©e, si mauvaise qu'elle voulĆ»t ĆŖtre, dans sa main;--qu'il en Ć©tait le maĆ®tre. Il se cramponnait Ć  cette pensĆ©e. Au fond, pour tout dire, il eĆ»t mieux aimĆ© ne point aller Ć  Arras. Cependant il y allait. Tout en songeant, il fouettait le cheval, lequel trottait de ce bon trot rĆ©glĆ© et sĆ»r qui fait deux lieues et demie Ć  l'heure. ƀ mesure que le cabriolet avanƧait, il sentait quelque chose en lui qui reculait. Au point du jour il Ć©tait en rase campagne; la ville de Montreuil-sur-mer Ć©tait assez loin derriĆØre lui. Il regarda l'horizon blanchir; il regarda, sans les voir, passer devant ses yeux toutes les froides figures d'une aube d'hiver. Le matin a ses spectres comme le soir. Il ne les voyait pas, mais, Ć  son insu, et par une sorte de pĆ©nĆ©tration presque physique, ces noires silhouettes d'arbres et de collines ajoutaient Ć  l'Ć©tat violent de son Ć¢me je ne sais quoi de morne et de sinistre. Chaque fois qu'il passait devant une de ces maisons isolĆ©es qui cĆ“toient parfois les routes, il se disait: il y a pourtant lĆ -dedans des gens qui dorment! Le trot du cheval, les grelots du harnais, les roues sur le pavĆ©, faisaient un bruit doux et monotone. Ces choses-lĆ  sont charmantes quand on est joyeux et lugubres quand on est triste. Il Ć©tait grand jour lorsqu'il arriva Ć  Hesdin. Il s'arrĆŖta devant une auberge pour laisser souffler le cheval et lui faire donner l'avoine. Ce cheval Ć©tait, comme l'avait dit Scaufflaire, de cette petite race du Boulonnais qui a trop de tĆŖte, trop de ventre et pas assez d'encolure, mais qui a le poitrail ouvert, la croupe large, la jambe sĆØche et fine et le pied solide; race laide, mais robuste et saine. L'excellente bĆŖte avait fait cinq lieues en deux heures et n'avait pas une goutte de sueur sur la croupe. Il n'Ć©tait pas descendu du tilbury. Le garƧon d'Ć©curie qui apportait l'avoine se baissa tout Ć  coup et examina la roue de gauche. --Allez-vous loin comme cela? dit cet homme. Il rĆ©pondit, presque sans sortir de sa rĆŖverie: --Pourquoi? --Venez-vous de loin? reprit le garƧon. --De cinq lieues d'ici. --Ah! --Pourquoi dites-vous: ah? Le garƧon se pencha de nouveau, resta un moment silencieux, l'oeil fixĆ© sur la roue, puis se redressa en disant: --C'est que voilĆ  une roue qui vient de faire cinq lieues, c'est possible, mais qui Ć  coup sĆ»r ne fera pas maintenant un quart de lieue. Il sauta Ć  bas du tilbury. --Que dites-vous lĆ , mon ami? --Je dis que c'est un miracle que vous ayez fait cinq lieues sans rouler, vous et votre cheval, dans quelque fossĆ© de la grande route. Regardez plutĆ“t. La roue en effet Ć©tait gravement endommagĆ©e. Le choc de la malle-poste avait fendu deux rayons et labourĆ© le moyeu dont l'Ć©crou ne tenait plus. --Mon ami, dit-il au garƧon d'Ć©curie, il y a un charron ici? --Sans doute, monsieur. --Rendez-moi le service de l'aller chercher. --Il est lĆ , Ć  deux pas. HĆ©! maĆ®tre Bourgaillard! MaĆ®tre Bourgaillard, le charron, Ć©tait sur le seuil de sa porte. Il vint examiner la roue et fit la grimace d'un chirurgien qui considĆØre une jambe cassĆ©e. --Pouvez-vous raccommoder cette roue sur-le-champ? --Oui, monsieur. --Quand pourrai-je repartir? --Demain. --Demain! --Il y a une grande journĆ©e d'ouvrage. Est-ce que monsieur est pressĆ©? --TrĆØs pressĆ©. Il faut que je reparte dans une heure au plus tard. --Impossible, monsieur. --Je payerai tout ce qu'on voudra. --Impossible. --Eh bien! dans deux heures. --Impossible pour aujourd'hui. Il faut refaire deux rais et un moyeu. Monsieur ne pourra repartir avant demain. --L'affaire que j'ai ne peut attendre Ć  demain. Si, au lieu de raccommoder cette roue, on la remplaƧait? --Comment cela? --Vous ĆŖtes charron? --Sans doute, monsieur. --Est-ce que vous n'auriez pas une roue Ć  me vendre? Je pourrais repartir tout de suite. --Une roue de rechange? --Oui. --Je n'ai pas une roue toute faite pour votre cabriolet. Deux roues font la paire. Deux roues ne vont pas ensemble au hasard. --En ce cas, vendez-moi une paire de roues. --Monsieur, toutes les roues ne vont pas Ć  tous les essieux. --Essayez toujours. --C'est inutile, monsieur. Je n'ai Ć  vendre que des roues de charrette. Nous sommes un petit pays ici. --Auriez-vous un cabriolet Ć  me louer? Le maĆ®tre charron, du premier coup d'oeil, avait reconnu que le tilbury Ć©tait une voiture de louage. Il haussa les Ć©paules. --Vous les arrangez bien, les cabriolets qu'on vous loue! j'en aurais un que je ne vous le louerais pas. --Eh bien, Ć  me vendre? --Je n'en ai pas. --Quoi! pas une carriole? Je ne suis pas difficile, comme vous voyez. --Nous sommes un petit pays. J'ai bien lĆ  sous la remise, ajouta le charron, une vieille calĆØche qui est Ć  un bourgeois de la ville qui me l'a donnĆ©e en garde et qui s'en sert tous les trente-six du mois. Je vous la louerais bien, qu'est-ce que cela me fait? mais il ne faudrait pas que le bourgeois la vĆ®t passer; et puis, c'est une calĆØche, il faudrait deux chevaux. --Je prendrai des chevaux de poste. --Où va monsieur? --ƀ Arras. --Et monsieur veut arriver aujourd'hui? --Mais oui. --En prenant des chevaux de poste? --Pourquoi pas? --Est-il Ć©gal Ć  monsieur d'arriver cette nuit Ć  quatre heures du matin? --Non certes. --C'est que, voyez-vous bien, il y a une chose Ć  dire, en prenant des chevaux de poste.... --Monsieur a son passeport? --Oui. --Eh bien, en prenant des chevaux de poste, monsieur n'arrivera pas Ć  Arras avant demain. Nous sommes un chemin de traverse. Les relais sont mal servis, les chevaux sont aux champs. C'est la saison des grandes charrues qui commence, il faut de forts attelages, et l'on prend les chevaux partout, Ć  la poste comme ailleurs. Monsieur attendra au moins trois ou quatre heures Ć  chaque relais. Et puis on va au pas. Il y a beaucoup de cĆ“tes Ć  monter. --Allons, j'irai Ć  cheval. DĆ©telez le cabriolet. On me vendra bien une selle dans le pays. --Sans doute. Mais ce cheval-ci endure-t-il la selle? --C'est vrai, vous m'y faites penser. Il ne l'endure pas. --Alors.... --Mais je trouverai bien dans le village un cheval Ć  louer? --Un cheval pour aller Ć  Arras d'une traite! --Oui. --Il faudrait un cheval comme on n'en a pas dans nos endroits. Il faudrait l'acheter d'abord, car on ne vous connaĆ®t pas. Mais ni Ć  vendre ni Ć  louer, ni pour cinq cents francs, ni pour mille, vous ne le trouveriez pas! --Comment faire? --Le mieux, lĆ , en honnĆŖte homme, c'est que je raccommode la roue et que vous remettiez votre voyage Ć  demain. --Demain il sera trop tard. --Dame! --N'y a-t-il pas la malle-poste qui va Ć  Arras? Quand passe-t-elle? --La nuit prochaine. Les deux malles font le service la nuit, celle qui monte comme celle qui descend. --Comment! il vous faut une journĆ©e pour raccommoder cette roue? --Une journĆ©e, et une bonne! --En mettant deux ouvriers? --En en mettant dix! --Si on liait les rayons avec des cordes? --Les rayons, oui; le moyeu, non. Et puis la jante aussi est en mauvais Ć©tat. --Y a-t-il un loueur de voitures dans la ville? --Non. --Y a-t-il un autre charron? Le garƧon d'Ć©curie et le maĆ®tre charron rĆ©pondirent en mĆŖme temps en hochant la tĆŖte. --Non. Il sentit une immense joie. Il Ć©tait Ć©vident que la providence s'en mĆŖlait. C'Ć©tait elle qui avait brisĆ© la roue du tilbury et qui l'arrĆŖtait en route. Il ne s'Ć©tait pas rendu Ć  cette espĆØce de premiĆØre sommation; il venait de faire tous les efforts possibles pour continuer son voyage; il avait loyalement et scrupuleusement Ć©puisĆ© tous les moyens; il n'avait reculĆ© ni devant la saison, ni devant la fatigue, ni devant la dĆ©pense; il n'avait rien Ć  se reprocher. S'il n'allait pas plus loin, cela ne le regardait plus. Ce n'Ć©tait plus sa faute, c'Ć©tait, non le fait de sa conscience, mais le fait de la providence. Il respira. Il respira librement et Ć  pleine poitrine pour la premiĆØre fois depuis la visite de Javert. Il lui semblait que le poignet de fer qui lui serrait le coeur depuis vingt heures venait de le lĆ¢cher. Il lui paraissait que maintenant Dieu Ć©tait pour lui, et se dĆ©clarait. Il se dit qu'il avait fait tout ce qu'il pouvait, et qu'Ć  prĆ©sent il n'avait qu'Ć  revenir sur ses pas, tranquillement. Si sa conversation avec le charron eĆ»t eu lieu dans une chambre de l'auberge, elle n'eĆ»t point eu de tĆ©moins, personne ne l'eĆ»t entendue, les choses en fussent restĆ©es lĆ , et il est probable que nous n'aurions eu Ć  raconter aucun des Ć©vĆ©nements qu'on va lire; mais cette conversation s'Ć©tait faite dans la rue. Tout colloque dans la rue produit inĆ©vitablement un cercle. Il y a toujours des gens qui ne demandent qu'Ć  ĆŖtre spectateurs. Pendant qu'il questionnait le charron, quelques allants et venants s'Ć©taient arrĆŖtĆ©s autour d'eux. AprĆØs avoir Ć©coutĆ© pendant quelques minutes, un jeune garƧon, auquel personne n'avait pris garde, s'Ć©tait dĆ©tachĆ© du groupe en courant. Au moment où le voyageur, aprĆØs la dĆ©libĆ©ration intĆ©rieure que nous venons d'indiquer, prenait la rĆ©solution de rebrousser chemin, cet enfant revenait. Il Ć©tait accompagnĆ© d'une vieille femme. --Monsieur, dit la femme, mon garƧon me dit que vous avez envie de louer un cabriolet. Cette simple parole, prononcĆ©e par une vieille femme que conduisait un enfant, lui fit ruisseler la sueur dans les reins. Il crut voir la main qui l'avait lĆ¢chĆ© reparaĆ®tre dans l'ombre derriĆØre lui, toute prĆŖte Ć  le reprendre. Il rĆ©pondit: --Oui, bonne femme, je cherche un cabriolet Ć  louer. Et il se hĆ¢ta d'ajouter: --Mais il n'y en a pas dans le pays. --Si fait, dit la vieille. --Où Ƨa donc? reprit le charron. --Chez moi, rĆ©pliqua la vieille. Il tressaillit. La main fatale l'avait ressaisi. La vieille avait en effet sous un hangar une faƧon de carriole en osier. Le charron et le garƧon d'auberge, dĆ©solĆ©s que le voyageur leur Ć©chappĆ¢t, intervinrent. --C'Ć©tait une affreuse guimbarde,--cela Ć©tait posĆ© Ć  cru sur l'essieu,--il est vrai que les banquettes Ć©taient suspendues Ć  l'intĆ©rieur avec des laniĆØres de cuir,--il pleuvait dedans,--les roues Ć©taient rouillĆ©es et rongĆ©es d'humiditĆ©,--cela n'irait pas beaucoup plus loin que le tilbury,--une vraie patache!--Ce monsieur aurait bien tort de s'y embarquer,--etc., etc. Tout cela Ć©tait vrai, mais cette guimbarde, cette patache, cette chose, quelle qu'elle fĆ»t, roulait sur ses deux roues et pouvait aller Ć  Arras. Il paya ce qu'on voulut, laissa le tilbury Ć  rĆ©parer chez le charron pour l'y retrouver Ć  son retour, fit atteler le cheval blanc Ć  la carriole, y monta, et reprit la route qu'il suivait depuis le matin. Au moment où la carriole s'Ć©branla, il s'avoua qu'il avait eu l'instant d'auparavant une certaine joie de songer qu'il n'irait point où il allait. Il examina cette joie avec une sorte de colĆØre et la trouva absurde. Pourquoi de la joie Ć  revenir en arriĆØre? AprĆØs tout, il faisait ce voyage librement. Personne ne l'y forƧait. Et, certainement, rien n'arriverait que ce qu'il voudrait bien. Comme il sortait de Hesdin, il entendit une voix qui lui criait: arrĆŖtez! arrĆŖtez! Il arrĆŖta la carriole d'un mouvement vif dans lequel il y avait encore je ne sais quoi de fĆ©brile et de convulsif qui ressemblait Ć  de l'espĆ©rance. C'Ć©tait le petit garƧon de la vieille. --Monsieur, dit-il, c'est moi qui vous ai procurĆ© la carriole. --Eh bien! --Vous ne m'avez rien donnĆ©. Lui qui donnait Ć  tous et si facilement, il trouva cette prĆ©tention exorbitante et presque odieuse. --Ah! c'est toi, drĆ“le? dit-il, tu n'auras rien! Il fouetta le cheval et repartit au grand trot. Il avait perdu beaucoup de temps Ć  Hesdin, il eĆ»t voulu le rattraper. Le petit cheval Ć©tait courageux et tirait comme deux; mais on Ć©tait au mois de fĆ©vrier, il avait plu, les routes Ć©taient mauvaises. Et puis, ce n'Ć©tait plus le tilbury. La carriole Ć©tait dure et trĆØs lourde. Avec cela force montĆ©es. Il mit prĆØs de quatre heures pour aller de Hesdin Ć  Saint-Pol. Quatre heures pour cinq lieues. ƀ Saint-Pol il dĆ©tela Ć  la premiĆØre auberge venue, et fit mener le cheval Ć  l'Ć©curie. Comme il l'avait promis Ć  Scaufflaire, il se tint prĆØs du rĆ¢telier pendant que le cheval mangeait. Il songeait Ć  des choses tristes et confuses. La femme de l'aubergiste entre dans l'Ć©curie. --Est-ce que monsieur ne veut pas dĆ©jeuner? --Tiens, c'est vrai, dit-il, j'ai mĆŖme bon appĆ©tit. Il suivit cette femme qui avait une figure fraĆ®che et rĆ©jouie. Elle le conduisit dans une salle basse où il y avait des tables ayant pour nappes des toiles cirĆ©es. --DĆ©pĆŖchez-vous, reprit-il, il faut que je reparte. Je suis pressĆ©. Une grosse servante flamande mit son couvert en toute hĆ¢te. Il regardait cette fille avec un sentiment de bien-ĆŖtre. --C'est lĆ  ce que j'avais, pensa-t-il. Je n'avais pas dĆ©jeunĆ©. On le servit. Il se jeta sur le pain, mordit une bouchĆ©e, puis le reposa lentement sur la table et n'y toucha plus. Un routier mangeait Ć  une autre table. Il dit Ć  cet homme: --Pourquoi leur pain est-il donc si amer? Le routier Ć©tait allemand et n'entendit pas. Il retourna dans l'Ć©curie prĆØs du cheval. Une heure aprĆØs, il avait quittĆ© Saint-Pol et se dirigeait vers Tinques qui n'est qu'Ć  cinq lieues d'Arras. Que faisait-il pendant ce trajet? ƀ quoi pensait-il? Comme le matin, il regardait passer les arbres, les toits de chaume, les champs cultivĆ©s, et les Ć©vanouissements du paysage qui se disloque Ć  chaque coude du chemin. C'est lĆ  une contemplation qui suffit quelquefois Ć  l'Ć¢me et qui la dispense presque de penser. Voir mille objets pour la premiĆØre et pour la derniĆØre fois, quoi de plus mĆ©lancolique et de plus profond! Voyager, c'est naĆ®tre et mourir Ć  chaque instant. Peut-ĆŖtre, dans la rĆ©gion la plus vague de son esprit, faisait-il des rapprochements entre ces horizons changeants et l'existence humaine. Toutes les choses de la vie sont perpĆ©tuellement en fuite devant nous. Les obscurcissements et les clartĆ©s s'entremĆŖlent: aprĆØs un Ć©blouissement, une Ć©clipse; on regarde, on se hĆ¢te, on tend les mains pour saisir ce qui passe; chaque Ć©vĆ©nement est un tournant de la route; et tout Ć  coup on est vieux. On sent comme une secousse, tout est noir, on distingue une porte obscure, ce sombre cheval de la vie qui vous traĆ®nait s'arrĆŖte, et l'on voit quelqu'un de voilĆ© et d'inconnu qui le dĆ©telle dans les tĆ©nĆØbres. Le crĆ©puscule tombait au moment où des enfants qui sortaient de l'Ć©cole regardĆØrent ce voyageur entrer dans Tinques. Il est vrai qu'on Ć©tait encore aux jours courts de l'annĆ©e. Il ne s'arrĆŖta pas Ć  Tinques. Comme il dĆ©bouchait du village, un cantonnier qui empierrait la route dressa la tĆŖte et dit: --VoilĆ  un cheval bien fatiguĆ©. La pauvre bĆŖte en effet n'allait plus qu'au pas. --Est-ce que vous allez Ć  Arras? ajouta le cantonnier. --Oui. --Si vous allez de ce train, vous n'y arriverez pas de bonne heure. Il arrĆŖta le cheval et demanda au cantonnier: --Combien y a-t-il encore d'ici Ć  Arras? --PrĆØs de sept grandes lieues. --Comment cela? le livre de poste ne marque que cinq lieues et un quart. --Ah! reprit le cantonnier, vous ne savez donc pas que la route est en rĆ©paration? Vous allez la trouver coupĆ©e Ć  un quart d'heure d'ici. Pas moyen d'aller plus loin. --Vraiment. --Vous prendrez Ć  gauche, le chemin qui va Ć  Carency, vous passerez la riviĆØre; et, quand vous serez Ć  Camblin, vous tournerez Ć  droite; c'est la route de Mont-Saint-Ɖloy qui va Ć  Arras. --Mais voilĆ  la nuit, je me perdrai. --Vous n'ĆŖtes pas du pays? --Non. --Avec Ƨa, c'est tout chemins de traverse. Tenez, Monsieur, reprit le cantonnier, voulez-vous que je vous donne un conseil? Votre cheval est las, rentrez dans Tinques. Il y a une bonne auberge. Couchez-y. Vous irez demain Ć  Arras. --Il faut que j'y sois ce soir. --C'est diffĆ©rent. Alors allez tout de mĆŖme Ć  cette auberge et prenez-y un cheval de renfort. Le garƧon du cheval vous guidera dans la traverse. Il suivit le conseil du cantonnier, rebroussa chemin, et une demi-heure aprĆØs il repassait au mĆŖme endroit, mais au grand trot, avec un bon cheval de renfort. Un garƧon d'Ć©curie qui s'intitulait postillon Ć©tait assis sur le brancard de la carriole. Cependant il sentait qu'il perdait du temps. Il faisait tout Ć  fait nuit. Ils s'engagĆØrent dans la traverse. La route devint affreuse. La carriole tombait d'une orniĆØre dans l'autre. Il dit au postillon: --Toujours au trot, et double pourboire. Dans un cahot le palonnier cassa. --Monsieur, dit le postillon, voilĆ  le palonnier cassĆ©, je ne sais plus comment atteler mon cheval, cette route-ci est bien mauvaise la nuit; si vous vouliez revenir coucher Ć  Tinques, nous pourrions ĆŖtre demain matin de bonne heure Ć  Arras. Il rĆ©pondit: --As-tu un bout de corde et un couteau? --Oui, monsieur. Il coupa une branche d'arbre et en fit un palonnier. Ce fut encore une perte de vingt minutes; mais ils repartirent au galop. La plaine Ć©tait tĆ©nĆ©breuse. Des brouillards bas, courts et noirs rampaient sur les collines et s'en arrachaient comme des fumĆ©es. Il y avait des lueurs blanchĆ¢tres dans les nuages. Un grand vent qui venait de la mer faisait dans tous les coins de l'horizon le bruit de quelqu'un qui remue des meubles. Tout ce qu'on entrevoyait avait des attitudes de terreur. Que de choses frissonnent sous ces vastes souffles de la nuit! Le froid le pĆ©nĆ©trait. Il n'avait pas mangĆ© depuis la veille. Il se rappelait vaguement son autre course nocturne dans la grande plaine aux environs de Digne. Il y avait huit ans; et cela lui semblait hier. Une heure sonna Ć  quelque clocher lointain. Il demanda au garƧon: --Quelle est cette heure? --Sept heures, monsieur. Nous serons Ć  Arras Ć  huit. Nous n'avons plus que trois lieues. En ce moment il fit pour la premiĆØre fois cette rĆ©flexion--en trouvant Ć©trange qu'elle ne lui fĆ»t pas venue plus tĆ“t--que c'Ć©tait peut-ĆŖtre inutile, toute la peine qu'il prenait; qu'il ne savait seulement pas l'heure du procĆØs; qu'il aurait dĆ» au moins s'en informer; qu'il Ć©tait extravagant d'aller ainsi devant soi sans savoir si cela servirait Ć  quelque chose.--Puis il Ć©baucha quelques calculs dans son esprit:--qu'ordinairement les sĆ©ances des cours d'assises commenƧaient Ć  neuf heures du matin;--que cela ne devait pas ĆŖtre long, cette affaire-lĆ ;--que le vol de pommes, ce serait trĆØs court;--qu'il n'y aurait plus ensuite qu'une question d'identitĆ©;--quatre ou cinq dĆ©positions, peu de chose Ć  dire pour les avocats;--qu'il allait arriver lorsque tout serait fini! Le postillon fouettait les chevaux. Ils avaient passĆ© la riviĆØre et laissĆ© derriĆØre eux Mont-Saint-Ɖloy. La nuit devenait de plus en plus profonde. Chapitre VI La soeur Simplice mise Ć  l'Ć©preuve Cependant, en ce moment-lĆ  mĆŖme, Fantine Ć©tait dans la joie. Elle avait passĆ© une trĆØs mauvaise nuit. Toux affreuse, redoublement de fiĆØvre; elle avait eu des songes. Le matin, Ć  la visite du mĆ©decin, elle dĆ©lirait. Il avait eu l'air alarmĆ© et avait recommandĆ© qu'on le prĆ©vĆ®nt dĆØs que M. Madeleine viendrait. Toute la matinĆ©e elle fut morne, parla peu, et fit des plis Ć  ses draps en murmurant Ć  voix basse des calculs qui avaient l'air d'ĆŖtre des calculs de distances. Ses yeux Ć©taient caves et fixes. Ils paraissaient presque Ć©teints, et puis, par moments, ils se rallumaient et resplendissaient comme des Ć©toiles. Il semble qu'aux approches d'une certaine heure sombre, la clartĆ© du ciel emplisse ceux que quitte la clartĆ© de la terre. Chaque fois que la soeur Simplice lui demandait comment elle se trouvait, elle rĆ©pondait invariablement: --Bien. Je voudrais voir monsieur Madeleine. Quelques mois auparavant, Ć  ce moment où Fantine venait de perdre sa derniĆØre pudeur, sa derniĆØre honte et sa derniĆØre joie, elle Ć©tait l'ombre d'elle-mĆŖme; maintenant elle en Ć©tait le spectre. Le mal physique avait complĆ©tĆ© l'oeuvre du mal moral. Cette crĆ©ature de vingt-cinq ans avait le front ridĆ©, les joues flasques, les narines pincĆ©es, les dents dĆ©chaussĆ©es, le teint plombĆ©, le cou osseux, les clavicules saillantes, les membres chĆ©tifs, la peau terreuse, et ses cheveux blonds poussaient mĆŖlĆ©s de cheveux gris. HĆ©las! comme la maladie improvise la vieillesse! ƀ midi, le mĆ©decin revint, il fit quelques prescriptions, s'informa si M. le maire avait paru Ć  l'infirmerie, et branla la tĆŖte. M. Madeleine venait d'habitude Ć  trois heures voir la malade. Comme l'exactitude Ć©tait de la bontĆ©, il Ć©tait exact. Vers deux heures et demie, Fantine commenƧa Ć  s'agiter. Dans l'espace de vingt minutes, elle demanda plus de dix fois Ć  la religieuse: --Ma soeur, quelle heure est-il? Trois heures sonnĆØrent. Au troisiĆØme coup, Fantine se dressa sur son sĆ©ant, elle qui d'ordinaire pouvait Ć  peine remuer dans son lit; elle joignit dans une sorte d'Ć©treinte convulsive ses deux mains dĆ©charnĆ©es et jaunes, et la religieuse entendit sortir de sa poitrine un de ces soupirs profonds qui semblent soulever un accablement. Puis Fantine se tourna et regarda la porte. Personne n'entra; la porte ne s'ouvrit point. Elle resta ainsi un quart d'heure, l'oeil attachĆ© sur la porte, immobile et comme retenant son haleine. La soeur n'osait lui parler. L'Ć©glise sonna trois heures un quart. Fantine se laissa retomber sur l'oreiller. Elle ne dit rien et se remit Ć  faire des plis Ć  son drap. La demi-heure passa, puis l'heure. Personne ne vint. Chaque fois que l'horloge sonnait, Fantine se dressait et regardait du cĆ“tĆ© de la porte, puis elle retombait. On voyait clairement sa pensĆ©e, mais elle ne prononƧait aucun nom, elle ne se plaignait pas, elle n'accusait pas. Seulement elle toussait d'une faƧon lugubre. On eĆ»t dit que quelque chose d'obscur s'abaissait sur elle. Elle Ć©tait livide et avait les lĆØvres bleues. Elle souriait par moments. Cinq heures sonnĆØrent. Alors la soeur l'entendit qui disait trĆØs bas et doucement: --Mais puisque je m'en vais demain, il a tort de ne pas venir aujourd'hui! La soeur Simplice elle-mĆŖme Ć©tait surprise du retard de M. Madeleine. Cependant Fantine regardait le ciel de son lit. Elle avait l'air de chercher Ć  se rappeler quelque chose. Tout Ć  coup elle se mit Ć  chanter d'une voix faible comme un souffle. La religieuse Ć©couta. Voici ce que Fantine chantait: _Nous achĆØterons de bien belles choses_ _En nous promenant le long des faubourgs._ _Les bleuets sont bleus, les roses sont roses,_ _Les bleuets sont bleus, j'aime mes amours._ _La vierge Marie auprĆØs de mon poĆŖle_ _Est venue hier en manteau brodĆ©,_ _Et m'a dit:--Voici, cachĆ© sous mon voile,_ _Le petit qu'un jour tu m'as demandĆ©._ _Courez Ć  la ville, ayez de la toile,_ _Achetez du fil, achetez un dĆ©._ _Nous achĆØterons de bien belles choses_ _En nous promenant le long des faubourgs._ _Bonne sainte Vierge, auprĆØs de mon poĆŖle_ _J'ai mis un berceau de rubans ornĆ©_ _Dieu me donnerait sa plus belle Ć©toile,_ _J'aime mieux l'enfant que tu m'as donnĆ©._ --_Madame, que faire avec cette toile?_ --_Faites un trousseau pour mon nouveau-nĆ©._ _Les bleuets sont bleus, les roses sont roses,_ _Les bleuets sont bleus, j'aime mes amours._ --_Lavez cette toile._ --_Où?_--_Dans la riviĆØre._ _Faites-en, sans rien gĆ¢ter ni salir,_ _Une belle jupe avec sa brassiĆØre_ _Que je veux broder et de fleurs emplir._ --_L'enfant n'est plus lĆ , madame, qu'en faire?_ --_Faites-en un drap pour m'ensevelir._ _Nous achĆØterons de bien belles choses_ _En nous promenant le long des faubourgs._ _Les bleuets sont bleus, les roses sont roses,_ _Les bleuets sont bleus, j'aime mes amours._ Cette chanson Ć©tait une vieille romance de berceuse avec laquelle autrefois elle endormait sa petite Cosette, et qui ne s'Ć©tait pas offerte Ć  son esprit depuis cinq ans qu'elle n'avait plus son enfant. Elle chantait cela d'une voix si triste et sur un air si doux que c'Ć©tait Ć  faire pleurer, mĆŖme une religieuse. La soeur, habituĆ©e aux choses austĆØres, sentit une larme lui venir. L'horloge sonna six heures. Fantine ne parut pas entendre. Elle semblait ne plus faire attention Ć  aucune chose autour d'elle. La soeur Simplice envoya une fille de service s'informer prĆØs de la portiĆØre de la fabrique si M. le maire Ć©tait rentrĆ© et s'il ne monterait pas bientĆ“t Ć  l'infirmerie. La fille revint au bout de quelques minutes. Fantine Ć©tait toujours immobile et paraissait attentive Ć  des idĆ©es qu'elle avait. La servante raconta trĆØs bas Ć  la soeur Simplice que M. le maire Ć©tait parti le matin mĆŖme avant six heures dans un petit tilbury attelĆ© d'un cheval blanc, par le froid qu'il faisait, qu'il Ć©tait parti seul, pas mĆŖme de cocher, qu'on ne savait pas le chemin qu'il avait pris, que des personnes disaient l'avoir vu tourner par la route d'Arras, que d'autres assuraient l'avoir rencontrĆ© sur la route de Paris. Qu'en s'en allant il avait Ć©tĆ© comme Ć  l'ordinaire trĆØs doux, et qu'il avait seulement dit Ć  la portiĆØre qu'on ne l'attendĆ®t pas cette nuit. Pendant que les deux femmes, le dos tournĆ© au lit de la Fantine, chuchotaient, la soeur questionnant, la servante conjecturant, la Fantine, avec cette vivacitĆ© fĆ©brile de certaines maladies organiques qui mĆŖle les mouvements libres de la santĆ© Ć  l'effrayante maigreur de la mort, s'Ć©tait mise Ć  genoux sur son lit, ses deux poings crispĆ©s appuyĆ©s sur le traversin, et, la tĆŖte passĆ©e par l'intervalle des rideaux, elle Ć©coutait. Tout Ć  coup elle cria: --Vous parlez lĆ  de monsieur Madeleine! pourquoi parlez-vous tout bas? Qu'est-ce qu'il fait? Pourquoi ne vient-il pas? Sa voix Ć©tait si brusque et si rauque que les deux femmes crurent entendre une voix d'homme; elles se retournĆØrent effrayĆ©es. --RĆ©pondez donc! cria Fantine. La servante balbutia: --La portiĆØre m'a dit qu'il ne pourrait pas venir aujourd'hui. --Mon enfant, dit la soeur, tenez-vous tranquille, recouchez-vous. Fantine, sans changer d'attitude, reprit d'une voix haute et avec un accent tout Ć  la fois impĆ©rieux et dĆ©chirant: --Il ne pourra venir? Pourquoi cela? Vous savez la raison. Vous la chuchotiez lĆ  entre vous. Je veux la savoir. La servante se hĆ¢ta de dire Ć  l'oreille de la religieuse: --RĆ©pondez qu'il est occupĆ© au conseil municipal. La soeur Simplice rougit lĆ©gĆØrement; c'Ć©tait un mensonge que la servante lui proposait. D'un autre cĆ“tĆ© il lui semblait bien que dire la vĆ©ritĆ© Ć  la malade ce serait sans doute lui porter un coup terrible et que cela Ć©tait grave dans l'Ć©tat où Ć©tait Fantine. Cette rougeur dura peu. La soeur leva sur Fantine son oeil calme et triste, et dit: --Monsieur le maire est parti. Fantine se redressa et s'assit sur ses talons. Ses yeux Ć©tincelĆØrent. Une joie inouĆÆe rayonna sur cette physionomie douloureuse. --Parti! s'Ć©cria-t-elle. Il est allĆ© chercher Cosette! Puis elle tendit ses deux mains vers le ciel et tout son visage devint ineffable. Ses lĆØvres remuaient; elle priait Ć  voix basse. Quand sa priĆØre fut finie: --Ma soeur, dit-elle, je veux bien me recoucher, je vais faire tout ce qu'on voudra; tout Ć  l'heure j'ai Ć©tĆ© mĆ©chante, je vous demande pardon d'avoir parlĆ© si haut, c'est trĆØs mal de parler haut, je le sais bien, ma bonne soeur, mais voyez-vous, je suis trĆØs contente. Le bon Dieu est bon, monsieur Madeleine est bon, figurez-vous qu'il est allĆ© chercher ma petite Cosette Ć  Montfermeil. Elle se recoucha, aida la religieuse Ć  arranger l'oreiller et baisa une petite croix d'argent qu'elle avait au cou et que la soeur Simplice lui avait donnĆ©e. --Mon enfant, dit la soeur, tĆ¢chez de reposer maintenant, et ne parlez plus. Fantine prit dans ses mains moites la main de la soeur, qui souffrait de lui sentir cette sueur. --Il est parti ce matin pour aller Ć  Paris. Au fait il n'a pas mĆŖme besoin de passer par Paris. Montfermeil, c'est un peu Ć  gauche en venant. Vous rappelez-vous comme il me disait hier quand je lui parlais de Cosette: bientĆ“t, bientĆ“t? C'est une surprise qu'il veut me faire. Vous savez? il m'avait fait signer une lettre pour la reprendre aux ThĆ©nardier. Ils n'auront rien Ć  dire, pas vrai? Ils rendront Cosette. Puisqu'ils sont payĆ©s. Les autoritĆ©s ne souffriraient pas qu'on garde un enfant quand on est payĆ©. Ma soeur, ne me faites pas signe qu'il ne faut pas que je parle. Je suis extrĆŖmement heureuse, je vais trĆØs bien, je n'ai plus de mal du tout, je vais revoir Cosette, j'ai mĆŖme trĆØs faim. Il y a prĆØs de cinq ans que je ne l'ai vue. Vous ne vous figurez pas, vous, comme cela vous tient, les enfants! Et puis elle sera si gentille, vous verrez! Si vous saviez, elle a de si jolis petits doigts roses! D'abord elle aura de trĆØs belles mains. ƀ un an, elle avait des mains ridicules. Ainsi!--Elle doit ĆŖtre grande Ć  prĆ©sent. Cela vous a sept ans. C'est une demoiselle. Je l'appelle Cosette, mais elle s'appelle Euphrasie. Tenez, ce matin, je regardais de la poussiĆØre qui Ć©tait sur la cheminĆ©e et j'avais bien l'idĆ©e comme cela que je reverrais bientĆ“t Cosette. Mon Dieu! comme on a tort d'ĆŖtre des annĆ©es sans voir ses enfants! on devrait bien rĆ©flĆ©chir que la vie n'est pas Ć©ternelle! Oh! comme il est bon d'ĆŖtre parti, monsieur le maire! C'est vrai Ƨa, qu'il fait bien froid? avait-il son manteau au moins? Il sera ici demain, n'est-ce pas? Ce sera demain fĆŖte. Demain matin, ma soeur, vous me ferez penser Ć  mettre mon petit bonnet qui a de la dentelle. Montfermeil, c'est un pays. J'ai fait cette route-lĆ , Ć  pied, dans le temps. Il y a eu bien loin pour moi. Mais les diligences vont trĆØs vite! Il sera ici demain avec Cosette. Combien y a-t-il d'ici Montfermeil? La soeur, qui n'avait aucune idĆ©e des distances, rĆ©pondit: --Oh! je crois bien qu'il pourra ĆŖtre ici demain. --Demain! demain! dit Fantine, je verrai Cosette demain! Voyez-vous, bonne soeur du bon Dieu, je ne suis plus malade. Je suis folle. Je danserais, si on voulait. Quelqu'un qui l'eĆ»t vue un quart d'heure auparavant n'y eĆ»t rien compris. Elle Ć©tait maintenant toute rose, elle parlait d'une voix vive et naturelle, toute sa figure n'Ć©tait qu'un sourire. Par moments elle riait en se parlant tout bas. Joie de mĆØre, c'est presque joie d'enfant. --Eh bien, reprit la religieuse, vous voilĆ  heureuse, obĆ©issez-moi, ne parlez plus. Fantine posa sa tĆŖte sur l'oreiller et dit Ć  demi-voix: --Oui, recouche-toi, sois sage puisque tu vas avoir ton enfant. Elle a raison, soeur Simplice. Tous ceux qui sont ici ont raison. Et puis, sans bouger, sans remuer la tĆŖte, elle se mit Ć  regarder partout avec ses yeux tout grands ouverts et un air joyeux, et elle ne dit plus rien. La soeur referma ses rideaux, espĆ©rant qu'elle s'assoupirait. Entre sept et huit heures le mĆ©decin vint. N'entendant aucun bruit, il crut que Fantine dormait, entra doucement et s'approcha du lit sur la pointe du pied. Il entrouvrit les rideaux, et Ć  la lueur de la veilleuse il vit les grands yeux calmes de Fantine qui le regardaient. Elle lui dit: --Monsieur, n'est-ce pas, on me laissera la coucher Ć  cĆ“tĆ© de moi dans un petit lit? Le mĆ©decin crut qu'elle dĆ©lirait. Elle ajouta: --Regardez plutĆ“t, il y a juste de la place. Le mĆ©decin prit Ć  part la soeur Simplice qui lui expliqua la chose, que M. Madeleine Ć©tait absent pour un jour ou deux, et que, dans le doute, on n'avait pas cru devoir dĆ©tromper la malade qui croyait monsieur le maire parti pour Montfermeil; qu'il Ć©tait possible en somme qu'elle eĆ»t devinĆ© juste. Le mĆ©decin approuva. Il se rapprocha du lit de Fantine, qui reprit: --C'est que, voyez-vous, le matin, quand elle s'Ć©veillera, je lui dirai bonjour Ć  ce pauvre chat, et la nuit, moi qui ne dors pas, je l'entendrai dormir. Sa petite respiration si douce, cela me fera du bien. --Donnez-moi votre main, dit le mĆ©decin. Elle tendit son bras, et s'Ć©cria en riant. --Ah! tiens! au fait, c'est vrai, vous ne savez pas c'est que je suis guĆ©rie. Cosette arrive demain. Le mĆ©decin fut surpris. Elle Ć©tait mieux. L'oppression Ć©tait moindre. Le pouls avait repris de la force. Une sorte de vie survenue tout Ć  coup ranimait ce pauvre ĆŖtre Ć©puisĆ©. --Monsieur le docteur, reprit-elle, la soeur vous a-t-elle dit que monsieur le maire Ć©tait allĆ© chercher le chiffon? Le mĆ©decin recommanda le silence et qu'on Ć©vitĆ¢t toute Ć©motion pĆ©nible. Il prescrivit une infusion de quinquina pur, et, pour le cas où la fiĆØvre reprendrait dans la nuit, une potion calmante. En s'en allant, il dit Ć  la soeur: --Cela va mieux. Si le bonheur voulait qu'en effet monsieur le maire arrivĆ¢t demain avec l'enfant, qui sait? il y a des crises si Ć©tonnantes, on a vu de grandes joies arrĆŖter court des maladies; je sais bien que celle-ci est une maladie organique, et bien avancĆ©e, mais c'est un tel mystĆØre que tout cela! Nous la sauverions peut-ĆŖtre. Chapitre VII Le voyageur arrivĆ© prend ses prĆ©cautions pour repartir. Il Ć©tait prĆØs de huit heures du soir quand la carriole que nous avons laissĆ©e en route entra sous la porte cochĆØre de l'hĆ“tel de la Poste Ć  Arras. L'homme que nous avons suivi jusqu'Ć  ce moment en descendit, rĆ©pondit d'un air distrait aux empressements des gens de l'auberge, renvoya le cheval de renfort, et conduisit lui-mĆŖme le petit cheval blanc Ć  l'Ć©curie; puis il poussa la porte d'une salle de billard qui Ć©tait au rez-de-chaussĆ©e, s'y assit, et s'accouda sur une table. Il avait mis quatorze heures Ć  ce trajet qu'il comptait faire en six. Il se rendait la justice que ce n'Ć©tait pas sa faute; mais au fond il n'en Ć©tait pas fĆ¢chĆ©. La maĆ®tresse de l'hĆ“tel entra. --Monsieur couche-t-il? monsieur soupe-t-il? Il fit un signe de tĆŖte nĆ©gatif. --Le garƧon d'Ć©curie dit que le cheval de monsieur est bien fatiguĆ©! Ici il rompit le silence. --Est-ce que le cheval ne pourra pas repartir demain matin? --Oh! monsieur! il lui faut au moins deux jours de repos. Il demanda: --N'est-ce pas ici le bureau de poste? --Oui, monsieur. L'hĆ“tesse le mena Ć  ce bureau; il montra son passeport et s'informa s'il y avait moyen de revenir cette nuit mĆŖme Ć  Montreuil-sur-mer par la malle; la place Ć  cĆ“tĆ© du courrier Ć©tait justement vacante; il la retint et la paya. --Monsieur, dit le buraliste, ne manquez pas d'ĆŖtre ici pour partir Ć  une heure prĆ©cise du matin. Cela fait, il sortit de l'hĆ“tel et se mit Ć  marcher dans la ville. Il ne connaissait pas Arras, les rues Ć©taient obscures, et il allait au hasard. Cependant il semblait s'obstiner Ć  ne pas demander son chemin aux passants. Il traversa la petite riviĆØre Crinchon et se trouva dans un dĆ©dale de ruelles Ć©troites où il se perdit. Un bourgeois cheminait avec un falot. AprĆØs quelque hĆ©sitation, il prit le parti de s'adresser Ć  ce bourgeois, non sans avoir d'abord regardĆ© devant et derriĆØre lui, comme s'il craignait que quelqu'un n'entendit la question qu'il allait faire. --Monsieur, dit-il, le palais de justice, s'il vous plaĆ®t? --Vous n'ĆŖtes pas de la ville, monsieur? rĆ©pondit le bourgeois qui Ć©tait un assez vieux homme, eh bien, suivez-moi. Je vais prĆ©cisĆ©ment du cĆ“tĆ© du palais de justice, c'est-Ć -dire du cĆ“tĆ© de l'hĆ“tel de la prĆ©fecture. Car on rĆ©pare en ce moment le palais, et provisoirement les tribunaux ont leurs audiences Ć  la prĆ©fecture. --Est-ce lĆ , demanda-t-il, qu'on tient les assises? --Sans doute, monsieur. Voyez-vous, ce qui est la prĆ©fecture aujourd'hui Ć©tait l'Ć©vĆŖchĆ© avant la rĆ©volution. Monsieur de ConziĆ©, qui Ć©tait Ć©vĆŖque en quatre-vingt-deux, y a fait bĆ¢tir une grande salle. C'est dans cette grande salle qu'on juge. Chemin faisant, le bourgeois lui dit: --Si c'est un procĆØs que monsieur veut voir, il est un peu tard. Ordinairement les sĆ©ances finissent Ć  six heures. Cependant, comme ils arrivaient sur la grande place, le bourgeois lui montra quatre longues fenĆŖtres Ć©clairĆ©es sur la faƧade d'un vaste bĆ¢timent tĆ©nĆ©breux. --Ma foi, monsieur, vous arrivez Ć  temps, vous avez du bonheur. Voyez-vous ces quatre fenĆŖtres? c'est la cour d'assises. Il y a de la lumiĆØre. Donc ce n'est pas fini. L'affaire aura traĆ®nĆ© en longueur et on fait une audience du soir. Vous vous intĆ©ressez Ć  cette affaire? Est-ce que c'est un procĆØs criminel? Est-ce que vous ĆŖtes tĆ©moin? Il rĆ©pondit: --Je ne viens pour aucune affaire, j'ai seulement Ć  parler Ć  un avocat. --C'est diffĆ©rent, dit le bourgeois. Tenez, monsieur, voici la porte. Où est le factionnaire. Vous n'aurez qu'Ć  monter le grand escalier. Il se conforma aux indications du bourgeois, et, quelques minutes aprĆØs, il Ć©tait dans une salle où il y avait beaucoup de monde et où des groupes mĆŖlĆ©s d'avocats en robe chuchotaient ƧƠ et lĆ . C'est toujours une chose qui serre le coeur de voir ces attroupements d'hommes vĆŖtus de noir qui murmurent entre eux Ć  voix basse sur le seuil des chambres de justice. Il est rare que la charitĆ© et la pitiĆ© sortent de toutes ces paroles. Ce qui en sort le plus souvent, ce sont des condamnations faites d'avance. Tous ces groupes semblent Ć  l'observateur qui passe et qui rĆŖve autant de ruches sombres où des espĆØces d'esprits bourdonnants construisent en commun toutes sortes d'Ć©difices tĆ©nĆ©breux. Cette salle, spacieuse et Ć©clairĆ©e d'une seule lampe, Ć©tait une ancienne antichambre de l'Ć©vĆŖchĆ© et servait de salle des pas perdus. Une porte Ć  deux battants, fermĆ©e en ce moment, la sĆ©parait de la grande chambre où siĆ©geait la cour d'assises. L'obscuritĆ© Ć©tait telle qu'il ne craignit pas de s'adresser au premier avocat qu'il rencontra. --Monsieur, dit-il, où en est-on? --C'est fini, dit l'avocat. --Fini! Ce mot fut rĆ©pĆ©tĆ© d'un tel accent que l'avocat se retourna. --Pardon, monsieur, vous ĆŖtes peut-ĆŖtre un parent? --Non. Je ne connais personne ici. Et y a-t-il eu condamnation? --Sans doute. Cela n'Ć©tait guĆØre possible autrement. --Aux travaux forcĆ©s?... --ƀ perpĆ©tuitĆ©. Il reprit d'une voix tellement faible qu'on l'entendait Ć  peine: --L'identitĆ© a donc Ć©tĆ© constatĆ©e? --Quelle identitĆ©? rĆ©pondit l'avocat. Il n'y avait pas d'identitĆ© Ć  constater. L'affaire Ć©tait simple. Cette femme avait tuĆ© son enfant, l'infanticide a Ć©tĆ© prouvĆ©, le jury a Ć©cartĆ© la prĆ©mĆ©ditation, on l'a condamnĆ©e Ć  vie. --C'est donc une femme? dit-il. --Mais sĆ»rement. La fille Limosin. De quoi me parlez-vous donc? --De rien. Mais puisque c'est fini, comment se fait-il que la salle soit encore Ć©clairĆ©e? --C'est pour l'autre affaire qu'on a commencĆ©e il y a Ć  peu prĆØs deux heures. --Quelle autre affaire? --Oh! celle-lĆ  est claire aussi. C'est une espĆØce de gueux, un rĆ©cidiviste, un galĆ©rien, qui a volĆ©. Je ne sais plus trop son nom. En voilĆ  un qui vous a une mine de bandit. Rien que pour avoir cette figure-lĆ , je l'enverrais aux galĆØres. --Monsieur, demanda-t-il, y a-t-il moyen de pĆ©nĆ©trer dans la salle? --Je ne crois vraiment pas. Il y a beaucoup de foule. Cependant l'audience est suspendue. Il y a des gens qui sont sortis, et, Ć  la reprise de l'audience, vous pourrez essayer. --Par où entre-t-on? --Par cette grande porte. L'avocat le quitta. En quelques instants, il avait Ć©prouvĆ©, presque en mĆŖme temps, presque mĆŖlĆ©es, toutes les Ć©motions possibles. Les paroles de cet indiffĆ©rent lui avaient tour Ć  tour traversĆ© le coeur comme des aiguilles de glace et comme des lames de feu. Quand il vit que rien n'Ć©tait terminĆ©, il respira; mais il n'eĆ»t pu dire si ce qu'il ressentait Ć©tait du contentement ou de la douleur. Il s'approcha de plusieurs groupes et il Ć©couta ce qu'on disait. Le rĆ“le de la session Ć©tant trĆØs chargĆ©, le prĆ©sident avait indiquĆ© pour ce mĆŖme jour deux affaires simples et courtes. On avait commencĆ© par l'infanticide, et maintenant on en Ć©tait au forƧat, au rĆ©cidiviste, au "cheval de retour". Cet homme avait volĆ© des pommes, mais cela ne paraissait pas bien prouvĆ©; ce qui Ć©tait prouvĆ©, c'est qu'il avait Ć©tĆ© dĆ©jĆ  aux galĆØres Ć  Toulon. C'est ce qui faisait son affaire mauvaise. Du reste, l'interrogatoire de l'homme Ć©tait terminĆ© et les dĆ©positions des tĆ©moins; mais il y avait encore les plaidoiries de l'avocat et le rĆ©quisitoire du ministĆØre public; cela ne devait guĆØre finir avant minuit. L'homme serait probablement condamnĆ©; l'avocat gĆ©nĆ©ral Ć©tait trĆØs bon--et ne manquait pas ses accusĆ©s--c'Ć©tait un garƧon d'esprit qui faisait des vers. Un huissier se tenait debout prĆØs de la porte qui communiquait avec la salle des assises. Il demanda Ć  cet huissier: --Monsieur, la porte va-t-elle bientĆ“t s'ouvrir? --Elle ne s'ouvrira pas, dit l'huissier. --Comment! on ne l'ouvrira pas Ć  la reprise de l'audience? est-ce que l'audience n'est pas suspendue? --L'audience vient d'ĆŖtre reprise, rĆ©pondit l'huissier, mais la porte ne se rouvrira pas. --Pourquoi? --Parce que la salle est pleine. --Quoi? il n'y a plus une place? --Plus une seule. La porte est fermĆ©e. Personne ne peut plus entrer. L'huissier ajouta aprĆØs un silence: --Il y a bien encore deux ou trois places derriĆØre monsieur le prĆ©sident, mais monsieur le prĆ©sident n'y admet que les fonctionnaires publics. Cela dit, l'huissier lui tourna le dos. Il se retira la tĆŖte baissĆ©e, traversa l'antichambre et redescendit l'escalier lentement, comme hĆ©sitant Ć  chaque marche. Il est probable qu'il tenait conseil avec lui-mĆŖme. Le violent combat qui se livrait en lui depuis la veille n'Ć©tait pas fini; et, Ć  chaque instant, il en traversait quelque nouvelle pĆ©ripĆ©tie. ArrivĆ© sur le palier de l'escalier, il s'adossa Ć  la rampe et croisa les bras. Tout Ć  coup il ouvrit sa redingote, prit son portefeuille, en tira un crayon, dĆ©chira une feuille, et Ć©crivit rapidement sur cette feuille Ć  la lueur du rĆ©verbĆØre cette ligne:--_M. Madeleine, maire de Montreuil-sur-mer_. Puis il remonta l'escalier Ć  grands pas, fendit la foule, marcha droit Ć  l'huissier, lui remit le papier, et lui dit avec autoritĆ©: --Portez ceci Ć  monsieur le prĆ©sident. L'huissier prit le papier, y jeta un coup d'oeil et obĆ©it. Chapitre VIII EntrĆ©e de faveur Sans qu'il s'en doutĆ¢t, le maire de Montreuil-sur-mer avait une sorte de cĆ©lĆ©britĆ©. Depuis sept ans que sa rĆ©putation de vertu remplissait tout le bas Boulonnais, elle avait fini par franchir les limites d'un petit pays et s'Ć©tait rĆ©pandue dans les deux ou trois dĆ©partements voisins. Outre le service considĆ©rable qu'il avait rendu au chef-lieu en y restaurant l'industrie des verroteries noires, il n'Ć©tait pas une des cent quarante et une communes de l'arrondissement de Montreuil-sur-mer qui ne lui dĆ»t quelque bienfait. Il avait su mĆŖme au besoin aider et fĆ©conder les industries des autres arrondissements. C'est ainsi qu'il avait dans l'occasion soutenu de son crĆ©dit et de ses fonds la fabrique de tulle de Boulogne, la filature de lin Ć  la mĆ©canique de FrĆ©vent et la manufacture hydraulique de toiles de Boubers-sur-Canche. Partout on prononƧait avec vĆ©nĆ©ration le nom de M. Madeleine. Arras et Douai enviaient son maire Ć  l'heureuse petite ville de Montreuil-sur-mer. Le conseiller Ć  la cour royale de Douai, qui prĆ©sidait cette session des assises Ć  Arras, connaissait comme tout le monde ce nom si profondĆ©ment et si universellement honorĆ©. Quand l'huissier, ouvrant discrĆØtement la porte qui communiquait de la chambre du conseil Ć  l'audience, se pencha derriĆØre le fauteuil du prĆ©sident et lui remit le papier où Ć©tait Ć©crite la ligne qu'on vient de lire, en ajoutant: _Ce monsieur dĆ©sire assister Ć  l'audience_, le prĆ©sident fit un vif mouvement de dĆ©fĆ©rence, saisit une plume, Ć©crivit quelques mots au bas du papier, et le rendit Ć  l'huissier en lui disant: Faites entrer. L'homme malheureux dont nous racontons l'histoire Ć©tait restĆ© prĆØs de la porte de la salle Ć  la mĆŖme place et dans la mĆŖme attitude où l'huissier l'avait quittĆ©. Il entendit, Ć  travers sa rĆŖverie, quelqu'un qui lui disait: Monsieur veut-il bien me faire l'honneur de me suivre? C'Ć©tait ce mĆŖme huissier qui lui avait tournĆ© le dos l'instant d'auparavant et qui maintenant le saluait jusqu'Ć  terre. L'huissier en mĆŖme temps lui remit le papier. Il le dĆ©plia, et, comme il se rencontrait qu'il Ć©tait prĆØs de la lampe, il put lire: Ā«Le prĆ©sident de la cour d'assises prĆ©sente son respect Ć  M. Madeleine.Ā» Il froissa le papier entre ses mains, comme si ces quelques mots eussent eu pour lui un arriĆØre-goĆ»t Ć©trange et amer. Il suivit l'huissier. Quelques minutes aprĆØs, il se trouvait seul dans une espĆØce de cabinet lambrissĆ©, d'un aspect sĆ©vĆØre, Ć©clairĆ© par deux bougies posĆ©es sur une table Ć  tapis vert. Il avait encore dans l'oreille les derniĆØres paroles de l'huissier qui venait de le quitter--Ā«Monsieur, vous voici dans la chambre du conseil; vous n'avez qu'Ć  tourner le bouton de cuivre de cette porte, et vous vous trouverez dans l'audience derriĆØre le fauteuil de monsieur le prĆ©sident.Ā»--Ces paroles se mĆŖlaient dans sa pensĆ©e Ć  un souvenir vague de corridors Ć©troits et d'escaliers noirs qu'il venait de parcourir. L'huissier l'avait laissĆ© seul. Le moment suprĆŖme Ć©tait arrivĆ©. Il cherchait Ć  se recueillir sans pouvoir y parvenir. C'est surtout aux heures où l'on aurait le plus besoin de les rattacher aux rĆ©alitĆ©s poignantes de la vie que tous les fils de la pensĆ©e se rompent dans le cerveau. Il Ć©tait dans l'endroit mĆŖme où les juges dĆ©libĆØrent et condamnent. Il regardait avec une tranquillitĆ© stupide cette chambre paisible et redoutable où tant d'existences avaient Ć©tĆ© brisĆ©es, où son nom allait retentir tout Ć  l'heure, et que sa destinĆ©e traversait en ce moment. Il regardait la muraille, puis il se regardait lui-mĆŖme, s'Ć©tonnant que ce fĆ»t cette chambre et que ce fĆ»t lui. Il n'avait pas mangĆ© depuis plus de vingt-quatre heures, il Ć©tait brisĆ© par les cahots de la carriole, mais il ne le sentait pas; il lui semblait qu'il ne sentait rien. Il s'approcha d'un cadre noir qui Ć©tait accrochĆ© au mur et qui contenait sous verre une vieille lettre autographe de Jean-Nicolas Pache, maire de Paris et ministre, datĆ©e, sans doute par erreur, du _9 juin an II_, et dans laquelle Pache envoyait Ć  la commune la liste des ministres et des dĆ©putĆ©s tenus en arrestation chez eux. Un tĆ©moin qui l'eĆ»t pu voir et qui l'eĆ»t observĆ© en cet instant eĆ»t sans doute imaginĆ© Fantine et Cosette. Tout en rĆŖvant, il se retourna, et ses yeux rencontrĆØrent le bouton de cuivre de la porte qui le sĆ©parait de la salle des assises. Il avait presque oubliĆ© cette porte. Son regard, d'abord calme, s'y arrĆŖta, resta attachĆ© Ć  ce bouton de cuivre, puis devint effarĆ© et fixe, et s'empreignit peu Ć  peu d'Ć©pouvante. Des gouttes de sueur lui sortaient d'entre les cheveux et ruisselaient sur ses tempes. ƀ un certain moment, il fit avec une sorte d'autoritĆ© mĆŖlĆ©e de rĆ©bellion ce geste indescriptible qui veut dire et qui dit si bien: _Pardieu! qui est-ce qui m'y force?_ Puis il se tourna vivement, vit devant lui la porte par laquelle il Ć©tait entrĆ©, y alla, l'ouvrit, et sortit. Il n'Ć©tait plus dans cette chambre, il Ć©tait dehors, dans un corridor, un corridor long, Ć©troit, coupĆ© de degrĆ©s et de guichets, faisant toutes sortes d'angles, Ć©clairĆ© ƧƠ et lĆ  de rĆ©verbĆØres pareils Ć  des veilleuses de malades, le corridor par où il Ć©tait venu. Il respira, il Ć©couta; aucun bruit derriĆØre lui, aucun bruit devant lui; il se mit Ć  fuir comme si on le poursuivait. Quand il eut doublĆ© plusieurs des coudes de ce couloir, il Ć©couta encore. C'Ć©tait toujours le mĆŖme silence et la mĆŖme ombre autour de lui. Il Ć©tait essoufflĆ©, il chancelait, il s'appuya au mur. La pierre Ć©tait froide, sa sueur Ć©tait glacĆ©e sur son front, il se redressa en frissonnant. Alors, lĆ , seul, debout dans cette obscuritĆ©, tremblant de froid et d'autre chose peut-ĆŖtre, il songea. Il avait songĆ© toute la nuit, il avait songĆ© toute la journĆ©e; il n'entendait plus en lui qu'une voix qui disait: hĆ©las! Un quart d'heure s'Ć©coula ainsi. Enfin, il pencha la tĆŖte, soupira avec angoisse, laissa pendre ses bras, et revint sur ses pas. Il marchait lentement et comme accablĆ©. Il semblait que quelqu'un l'eĆ»t atteint dans sa fuite et le ramenĆ¢t. Il rentra dans la chambre du conseil. La premiĆØre chose qu'il aperƧut, ce fut la gĆ¢chette de la porte. Cette gĆ¢chette, ronde et en cuivre poli, resplendissait pour lui comme une effroyable Ć©toile. Il la regardait comme une brebis regarderait l'oeil d'un tigre. Ses yeux ne pouvaient s'en dĆ©tacher. De temps en temps il faisait un pas et se rapprochait de la porte. S'il eĆ»t Ć©coutĆ©, il eĆ»t entendu, comme une sorte de murmure confus, le bruit de la salle voisine; mais il n'Ć©coutait pas, et il n'entendait pas. Tout Ć  coup, sans qu'il sĆ»t lui-mĆŖme comment, il se trouva prĆØs de la porte. Il saisit convulsivement le bouton; la porte s'ouvrit. Il Ć©tait dans la salle d'audience. Chapitre IX Un lieu où des convictions sont en train de se former Il fit un pas, referma machinalement la porte derriĆØre lui, et resta debout, considĆ©rant ce qu'il voyait. C'Ć©tait une assez vaste enceinte Ć  peine Ć©clairĆ©e, tantĆ“t pleine de rumeur, tantĆ“t pleine de silence, où tout l'appareil d'un procĆØs criminel se dĆ©veloppait avec sa gravitĆ© mesquine et lugubre au milieu de la foule. ƀ un bout de la salle, celui où il se trouvait, des juges Ć  l'air distrait, en robe usĆ©e, se rongeant les ongles ou fermant les paupiĆØres; Ć  l'autre bout, une foule en haillons; des avocats dans toutes sortes d'attitudes; des soldats au visage honnĆŖte et dur; de vieilles boiseries tachĆ©es, un plafond sale, des tables couvertes d'une serge plutĆ“t jaune que verte, des portes noircies par les mains; Ć  des clous plantĆ©s dans le lambris, des quinquets d'estaminet donnant plus de fumĆ©e que de clartĆ©; sur les tables, des chandelles dans des chandeliers de cuivre; l'obscuritĆ©, la laideur, la tristesse; et de tout cela se dĆ©gageait une impression austĆØre et auguste, car on y sentait cette grande chose humaine qu'on appelle la loi et cette grande chose divine qu'on appelle la justice. Personne dans cette foule ne fit attention Ć  lui. Tous les regards convergeaient vers un point unique, un banc de bois adossĆ© Ć  une petite porte, le long de la muraille, Ć  gauche du prĆ©sident. Sur ce banc, que plusieurs chandelles Ć©clairaient, il y avait un homme entre deux gendarmes. Cet homme, c'Ć©tait l'homme. Il ne le chercha pas, il le vit. Ses yeux allĆØrent lĆ  naturellement, comme s'ils avaient su d'avance où Ć©tait cette figure. Il crut se voir lui-mĆŖme, vieilli, non pas sans doute absolument semblable de visage, mais tout pareil d'attitude et d'aspect, avec ces cheveux hĆ©rissĆ©s, avec cette prunelle fauve et inquiĆØte, avec cette blouse, tel qu'il Ć©tait le jour où il entrait Ć  Digne, plein de haine et cachant dans son Ć¢me ce hideux trĆ©sor de pensĆ©es affreuses qu'il avait mis dix-neuf ans Ć  ramasser sur le pavĆ© du bagne. Il se dit avec un frĆ©missement: --Mon Dieu! est-ce que je redeviendrai ainsi? Cet ĆŖtre paraissait au moins soixante ans. Il avait je ne sais quoi de rude, de stupide et d'effarouchĆ©. Au bruit de la porte, on s'Ć©tait rangĆ© pour lui faire place, le prĆ©sident avait tournĆ© la tĆŖte, et comprenant que le personnage qui venait d'entrer Ć©tait M. le maire de Montreuil-sur-mer, il l'avait saluĆ©. L'avocat gĆ©nĆ©ral, qui avait vu M. Madeleine Ć  Montreuil-sur-mer où des opĆ©rations de son ministĆØre l'avaient plus d'une fois appelĆ©, le reconnut, et salua Ć©galement. Lui s'en aperƧut Ć  peine. Il Ć©tait en proie Ć  une sorte d'hallucination; il regardait. Des juges, un greffier, des gendarmes, une foule de tĆŖtes cruellement curieuses, il avait dĆ©jĆ  vu cela une fois, autrefois, il y avait vingt-sept ans. Ces choses funestes, il les retrouvait; elles Ć©taient lĆ , elles remuaient, elles existaient. Ce n'Ć©tait plus un effort de sa mĆ©moire, un mirage de sa pensĆ©e, c'Ć©taient de vrais gendarmes et de vrais juges, une vraie foule et de vrais hommes en chair et en os. C'en Ć©tait fait, il voyait reparaĆ®tre et revivre autour de lui, avec tout ce que la rĆ©alitĆ© a de formidable, les aspects monstrueux de son passĆ©. Tout cela Ć©tait bĆ©ant devant lui. Il en eut horreur, il ferma les yeux, et s'Ć©cria au plus profond de son Ć¢me: jamais! Et par un jeu tragique de la destinĆ©e qui faisait trembler toutes ses idĆ©es et le rendait presque fou, c'Ć©tait un autre lui-mĆŖme qui Ć©tait lĆ ! Cet homme qu'on jugeait, tous l'appelaient Jean Valjean! Il avait sous les yeux, vision inouĆÆe, une sorte de reprĆ©sentation du moment le plus horrible de sa vie, jouĆ©e par son fantĆ“me. Tout y Ć©tait, c'Ć©tait le mĆŖme appareil, la mĆŖme heure de nuit, presque les mĆŖmes faces de juges, de soldats et de spectateurs. Seulement, au-dessus de la tĆŖte du prĆ©sident, il y avait un crucifix, chose qui manquait aux tribunaux du temps de sa condamnation. Quand on l'avait jugĆ©, Dieu Ć©tait absent. Une chaise Ć©tait derriĆØre lui; il s'y laissa tomber, terrifiĆ© de l'idĆ©e qu'on pouvait le voir. Quand il fut assis, il profita d'une pile de cartons qui Ć©tait sur le bureau des juges pour dĆ©rober son visage Ć  toute la salle. Il pouvait maintenant voir sans ĆŖtre vu. Peu Ć  peu il se remit. Il rentra pleinement dans le sentiment du rĆ©el; il arriva Ć  cette phase de calme où l'on peut Ć©couter. M. Bamatabois Ć©tait au nombre des jurĆ©s. Il chercha Javert, mais il ne le vit pas. Le banc des tĆ©moins lui Ć©tait cachĆ© par la table du greffier. Et puis, nous venons de le dire, la salle Ć©tait Ć  peine Ć©clairĆ©e. Au moment où il Ć©tait entrĆ©, l'avocat de l'accusĆ© achevait sa plaidoirie. L'attention de tous Ć©tait excitĆ©e au plus haut point; l'affaire durait depuis trois heures. Depuis trois heures, cette foule regardait plier peu Ć  peu sous le poids d'une vraisemblance terrible un homme, un inconnu, une espĆØce d'ĆŖtre misĆ©rable, profondĆ©ment stupide ou profondĆ©ment habile. Cet homme, on le sait dĆ©jĆ , Ć©tait un vagabond qui avait Ć©tĆ© trouvĆ© dans un champ, emportant une branche chargĆ©e de pommes mĆ»res, cassĆ©e Ć  un pommier dans un clos voisin, appelĆ© le clos Pierron. Qui Ć©tait cet homme? Une enquĆŖte avait eu lieu; des tĆ©moins venaient d'ĆŖtre entendus, ils avaient Ć©tĆ© unanimes, des lumiĆØres avaient jailli de tout le dĆ©bat. L'accusation disait: --Nous ne tenons pas seulement un voleur de fruits, un maraudeur; nous tenons lĆ , dans notre main, un bandit, un relaps en rupture de ban, un ancien forƧat, un scĆ©lĆ©rat des plus dangereux, un malfaiteur appelĆ© Jean Valjean que la justice recherche depuis longtemps, et qui, il y a huit ans, en sortant du bagne de Toulon, a commis un vol de grand chemin Ć  main armĆ©e sur la personne d'un enfant savoyard appelĆ© Petit-Gervais, crime prĆ©vu par l'article 383 du code pĆ©nal, pour lequel nous nous rĆ©servons de le poursuivre ultĆ©rieurement, quand l'identitĆ© sera judiciairement acquise. Il vient de commettre un nouveau vol. C'est un cas de rĆ©cidive. Condamnez-le pour le fait nouveau; il sera jugĆ© plus tard pour le fait ancien. Devant cette accusation, devant l'unanimitĆ© des tĆ©moins, l'accusĆ© paraissait surtout Ć©tonnĆ©. Il faisait des gestes et des signes qui voulaient dire non, ou bien il considĆ©rait le plafond. Il parlait avec peine, rĆ©pondait avec embarras, mais de la tĆŖte aux pieds toute sa personne niait. Il Ć©tait comme un idiot en prĆ©sence de toutes ces intelligences rangĆ©es en bataille autour de lui, et comme un Ć©tranger au milieu de cette sociĆ©tĆ© qui le saisissait. Cependant il y allait pour lui de l'avenir le plus menaƧant, la vraisemblance croissait Ć  chaque minute, et toute cette foule regardait avec plus d'anxiĆ©tĆ© que lui-mĆŖme cette sentence pleine de calamitĆ©s qui penchait sur lui de plus en plus. Une Ć©ventualitĆ© laissait mĆŖme entrevoir, outre le bagne, la peine de mort possible, si l'identitĆ© Ć©tait reconnue et si l'affaire Petit-Gervais se terminait plus tard par une condamnation. Qu'Ć©tait-ce que cet homme? De quelle nature Ć©tait son apathie? Etait-ce imbĆ©cillitĆ© ou ruse? Comprenait-il trop, ou ne comprenait-il pas du tout? Questions qui divisaient la foule et semblaient partager le jury. Il y avait dans ce procĆØs ce qui effraye et ce qui intrigue; le drame n'Ć©tait pas seulement sombre, il Ć©tait obscur. Le dĆ©fenseur avait assez bien plaidĆ©, dans cette langue de province qui a longtemps constituĆ© l'Ć©loquence du barreau et dont usaient jadis tous les avocats, aussi bien Ć  Paris qu'Ć  Romorantin ou Ć  Montbrison, et qui aujourd'hui, Ć©tant devenue classique, n'est plus guĆØre parlĆ©e que par les orateurs officiels du parquet, auxquels elle convient par sa sonoritĆ© grave et son allure majestueuse; langue où un mari s'appelle un Ć©poux, une femme, une Ć©pouse, Paris, le centre des arts et de la civilisation, le roi, le monarque, monseigneur l'Ć©vĆŖque, un saint pontife, l'avocat gĆ©nĆ©ral, l'Ć©loquent interprĆØte de la vindicte, la plaidoirie, les accents qu'on vient d'entendre, le siĆØcle de Louis XIV, le grand siĆØcle, un théâtre, le temple de MelpomĆØne, la famille rĆ©gnante, l'auguste sang de nos rois, un concert, une solennitĆ© musicale, monsieur le gĆ©nĆ©ral commandant le dĆ©partement, l'illustre guerrier qui, etc., les Ć©lĆØves du sĆ©minaire, ces tendres lĆ©vites, les erreurs imputĆ©es aux journaux, l'imposture qui distille son venin dans les colonnes de ces organes, etc., etc.--L'avocat donc avait commencĆ© par s'expliquer sur le vol des pommes,--chose malaisĆ©e en beau style; mais BĆ©nigne Bossuet lui-mĆŖme a Ć©tĆ© obligĆ© de faire allusion Ć  une poule en pleine oraison funĆØbre, et il s'en est tirĆ© avec pompe. L'avocat avait Ć©tabli que le vol de pommes n'Ć©tait pas matĆ©riellement prouvĆ©.--Son client, qu'en sa qualitĆ© de dĆ©fenseur, il persistait Ć  appeler Champmathieu, n'avait Ć©tĆ© vu de personne escaladant le mur ou cassant la branche. On l'avait arrĆŖtĆ© nanti de cette branche (que l'avocat appelait plus volontiers rameau); mais il disait l'avoir trouvĆ©e Ć  terre et ramassĆ©e. Où Ć©tait la preuve du contraire?--Sans doute cette branche avait Ć©tĆ© cassĆ©e et dĆ©robĆ©e aprĆØs escalade, puis jetĆ©e lĆ  par le maraudeur alarmĆ©; sans doute il y avait un voleur. Mais qu'est-ce qui prouvait que ce voleur Ć©tait Champmathieu? Une seule chose. Sa qualitĆ© d'ancien forƧat. L'avocat ne niait pas que cette qualitĆ© ne parĆ»t malheureusement bien constatĆ©e; l'accusĆ© avait rĆ©sidĆ© Ć  Faverolles; l'accusĆ© y avait Ć©tĆ© Ć©mondeur; le nom de Champmathieu pouvait bien avoir pour origine Jean Mathieu; tout cela Ć©tait vrai; enfin quatre tĆ©moins reconnaissaient sans hĆ©siter et positivement Champmathieu pour ĆŖtre le galĆ©rien Jean Valjean; Ć  ces indications, Ć  ces tĆ©moignages, l'avocat ne pouvait opposer que la dĆ©nĆ©gation de son client, dĆ©nĆ©gation intĆ©ressĆ©e; mais en supposant qu'il fĆ»t le forƧat Jean Valjean, cela prouvait-il qu'il fĆ»t le voleur des pommes? C'Ć©tait une prĆ©somption, tout au plus; non une preuve. L'accusĆ©, cela Ć©tait vrai, et le dĆ©fenseur Ā«dans sa bonne foiĀ» devait en convenir, avait adoptĆ© Ā«un mauvais systĆØme de dĆ©fenseĀ»--Il s'obstinait Ć  nier tout, le vol et sa qualitĆ© de forƧat. Un aveu sur ce dernier point eĆ»t mieux valu, Ć  coup sĆ»r, et lui eĆ»t conciliĆ© l'indulgence de ses juges; l'avocat le lui avait conseillĆ©; mais l'accusĆ© s'y Ć©tait refusĆ© obstinĆ©ment, croyant sans doute sauver tout en n'avouant rien. C'Ć©tait un tort; mais ne fallait-il pas considĆ©rer la briĆØvetĆ© de cette intelligence? Cet homme Ć©tait visiblement stupide. Un long malheur au bagne, une longue misĆØre hors du bagne, l'avaient abruti, etc., etc. Il se dĆ©fendait mal, Ć©tait-ce une raison pour le condamner? Quant Ć  l'affaire Petit-Gervais, l'avocat n'avait pas Ć  la discuter, elle n'Ć©tait point dans la cause. L'avocat concluait en suppliant le jury et la cour, si l'identitĆ© de Jean Valjean leur paraissait Ć©vidente, de lui appliquer les peines de police qui s'adressent au condamnĆ© en rupture de ban, et non le chĆ¢timent Ć©pouvantable qui frappe le forƧat rĆ©cidiviste. L'avocat gĆ©nĆ©ral rĆ©pliqua au dĆ©fenseur. Il fut violent et fleuri, comme sont habituellement les avocats gĆ©nĆ©raux. Il fĆ©licita le dĆ©fenseur de sa Ā«loyauté», et profita habilement de cette loyautĆ©. Il atteignit l'accusĆ© par toutes les concessions que l'avocat avait faites. L'avocat semblait accorder que l'accusĆ© Ć©tait Jean Valjean. Il en prit acte. Cet homme Ć©tait donc Jean Valjean. Ceci Ć©tait acquis Ć  l'accusation et ne pouvait plus se contester. Ici, par une habile antonomase, remontant aux sources et aux causes de la criminalitĆ©, l'avocat gĆ©nĆ©ral tonna contre l'immoralitĆ© de l'Ć©cole romantique, alors Ć  son aurore sous le nom d'Ć©cole satanique que lui avaient dĆ©cernĆ© les critiques de l'Oriflamme et de la Quotidienne, il attribua, non sans vraisemblance, Ć  l'influence de cette littĆ©rature perverse le dĆ©lit de Champmathieu, ou pour mieux dire, de Jean Valjean. Ces considĆ©rations Ć©puisĆ©es, il passa Ć  Jean Valjean lui-mĆŖme. Qu'Ć©tait-ce que Jean Valjean? Description de Jean Valjean. Un monstre vomi, etc. Le modĆØle de ces sortes de descriptions est dans le rĆ©cit de ThĆ©ramĆØne, lequel n'est pas utile Ć  la tragĆ©die, mais rend tous les jours de grands services Ć  l'Ć©loquence judiciaire. L'auditoire et les jurĆ©s Ā«frĆ©mirentĀ». La description achevĆ©e, l'avocat gĆ©nĆ©ral reprit, dans un mouvement oratoire fait pour exciter au plus haut point le lendemain matin l'enthousiasme du Journal de la PrĆ©fecture: Et c'est un pareil homme, etc., etc., etc., vagabond, mendiant, sans moyens d'existence, etc., etc.,--accoutumĆ© par sa vie passĆ©e aux actions coupables et peu corrigĆ© par son sĆ©jour au bagne, comme le prouve le crime commis sur Petit-Gervais, etc., etc.,--c'est un homme pareil qui, trouvĆ© sur la voie publique en flagrant dĆ©lit de vol, Ć  quelques pas d'un mur escaladĆ©, tenant encore Ć  la main l'objet volĆ©, nie le flagrant dĆ©lit, le vol, l'escalade, nie tout, nie jusqu'Ć  son nom, nie jusqu'Ć  son identitĆ©! Outre cent autres preuves sur lesquelles nous ne revenons pas, quatre tĆ©moins le reconnaissent, Javert, l'intĆØgre inspecteur de police Javert, et trois de ses anciens compagnons d'ignominie, les forƧats Brevet, Chenildieu et Cochepaille. Qu'oppose-t-il Ć  cette unanimitĆ© foudroyante? Il nie. Quel endurcissement! Vous ferez justice, messieurs les jurĆ©s, etc., etc. Pendant que l'avocat gĆ©nĆ©ral parlait, l'accusĆ© Ć©coutait, la bouche ouverte, avec une sorte d'Ć©tonnement où il entrait bien quelque admiration. Il Ć©tait Ć©videmment surpris qu'un homme pĆ»t parler comme cela. De temps en temps, aux moments les plus «énergiquesĀ» du rĆ©quisitoire, dans ces instants où l'Ć©loquence, qui ne peut se contenir, dĆ©borde dans un flux d'Ć©pithĆØtes flĆ©trissantes et enveloppe l'accusĆ© comme un orage, il remuait lentement la tĆŖte de droite Ć  gauche et de gauche Ć  droite, sorte de protestation triste et muette dont il se contentait depuis le commencement des dĆ©bats. Deux ou trois fois les spectateurs placĆ©s le plus prĆØs de lui l'entendirent dire Ć  demi-voix: --VoilĆ  ce que c'est, de n'avoir pas demandĆ© Ć  M. Baloup! L'avocat gĆ©nĆ©ral fit remarquer au jury cette attitude hĆ©bĆ©tĆ©e, calculĆ©e Ć©videmment, qui dĆ©notait, non l'imbĆ©cillitĆ©, mais l'adresse, la ruse, l'habitude de tromper la justice, et qui mettait dans tout son jour Ā«la profonde perversité» de cet homme. Il termina en faisant ses rĆ©serves pour l'affaire Petit-Gervais, et en rĆ©clamant une condamnation sĆ©vĆØre. C'Ć©tait, pour l'instant, on s'en souvient, les travaux forcĆ©s Ć  perpĆ©tuitĆ©. Le dĆ©fenseur se leva, commenƧa par complimenter Ā«monsieur l'avocat gĆ©nĆ©ralĀ» sur son Ā«admirable paroleĀ», puis rĆ©pliqua comme il put, mais il faiblissait; le terrain Ć©videmment se dĆ©robait sous lui. Chapitre X Le systĆØme de dĆ©nĆ©gations L'instant de clore les dĆ©bats Ć©tait venu. Le prĆ©sident fit lever l'accusĆ© et lui adressa la question d'usage: --Avez-vous quelque chose Ć  ajouter Ć  votre dĆ©fense? L'homme, debout, roulant dans ses mains un affreux bonnet qu'il avait, sembla ne pas entendre. Le prĆ©sident rĆ©pĆ©ta la question. Cette fois l'homme entendit. Il parut comprendre, il fit le mouvement de quelqu'un qui se rĆ©veille, promena ses yeux autour de lui, regarda le public, les gendarmes, son avocat, les jurĆ©s, la cour, posa son poing monstrueux sur le rebord de la boiserie placĆ©e devant son banc, regarda encore, et tout Ć  coup, fixant sont regard sur l'avocat gĆ©nĆ©ral, il se mit Ć  parler. Ce fut comme une Ć©ruption. Il sembla, Ć  la faƧon dont les paroles s'Ć©chappaient de sa bouche, incohĆ©rentes, impĆ©tueuses, heurtĆ©es, pĆŖle-mĆŖle, qu'elles s'y pressaient toutes Ć  la fois pour sortir en mĆŖme temps. Il dit: --J'ai Ć  dire Ƨa. Que j'ai Ć©tĆ© charron Ć  Paris, mĆŖme que c'Ć©tait chez monsieur Baloup. C'est un Ć©tat dur. Dans la chose de charron, on travaille toujours en plein air, dans des cours, sous des hangars chez les bons maĆ®tres, jamais dans des ateliers fermĆ©s, parce qu'il faut des espaces, voyez-vous. L'hiver, on a si froid qu'on se bat les bras pour se rĆ©chauffer; mais les maĆ®tres ne veulent pas, ils disent que cela perd du temps. Manier du fer quand il y a de la glace entre les pavĆ©s, c'est rude. Ƈa vous use vite un homme. On est vieux tout jeune dans cet Ć©tat-lĆ . ƀ quarante ans, un homme est fini. Moi, j'en avais cinquante-trois, j'avais bien du mal. Et puis c'est si mĆ©chant les ouvriers! Quand un bonhomme n'est plus jeune, on vous l'appelle pour tout vieux serin, vieille bĆŖte! Je ne gagnais plus que trente sous par jour, on me payait le moins cher qu'on pouvait, les maĆ®tres profitaient de mon Ć¢ge. Avec Ƨa, j'avais ma fille qui Ć©tait blanchisseuse Ć  la riviĆØre. Elle gagnait un peu de son cĆ“tĆ©. ƀ nous deux, cela allait. Elle avait de la peine aussi. Toute la journĆ©e dans un baquet jusqu'Ć  mi-corps, Ć  la pluie, Ć  la neige, avec le vent qui vous coupe la figure; quand il gĆØle, c'est tout de mĆŖme, il faut laver; il y a des personnes qui n'ont pas beaucoup de linge et qui attendent aprĆØs; si on ne lavait pas, on perdrait des pratiques. Les planches sont mal jointes et il vous tombe des gouttes d'eau partout. On a ses jupes toutes mouillĆ©es, dessus et dessous. Ƈa pĆ©nĆØtre. Elle a aussi travaillĆ© au lavoir des Enfants-Rouges, où l'eau arrive par des robinets. On n'est pas dans le baquet. On lave devant soi au robinet et on rince derriĆØre soi dans le bassin. Comme c'est fermĆ©, on a moins froid au corps. Mais il y a une buĆ©e d'eau chaude qui est terrible et qui vous perd les yeux. Elle revenait Ć  sept heures du soir, et se couchait bien vite; elle Ć©tait si fatiguĆ©e. Son mari la battait. Elle est morte. Nous n'avons pas Ć©tĆ© bien heureux. C'Ć©tait une brave fille qui n'allait pas au bal, qui Ć©tait bien tranquille. Je me rappelle un mardi gras où elle Ć©tait couchĆ©e Ć  huit heures. VoilĆ . Je dis vrai. Vous n'avez qu'Ć  demander. Ah, bien oui, demander! que je suis bĆŖte! Paris, c'est un gouffre. Qui est-ce qui connaĆ®t le pĆØre Champmathieu? Pourtant je vous dis monsieur Baloup. Voyez chez monsieur Baloup. AprĆØs Ƨa, je ne sais pas ce qu'on me veut. L'homme se tut, et resta debout. Il avait dit ces choses d'une voix haute, rapide, rauque, dure et enrouĆ©e, avec une sorte de naĆÆvetĆ© irritĆ©e et sauvage. Une fois il s'Ć©tait interrompu pour saluer quelqu'un dans la foule. Les espĆØces d'affirmations qu'il semblait jeter au hasard devant lui, lui venaient comme des hoquets, et il ajoutait Ć  chacune d'elles le geste d'un bĆ»cheron qui fend du bois. Quand il eut fini, l'auditoire Ć©clata de rire. Il regarda le public, et voyant qu'on riait, et ne comprenant pas, il se mit Ć  rire lui-mĆŖme. Cela Ć©tait sinistre. Le prĆ©sident, homme attentif et bienveillant, Ć©leva la voix. Il rappela Ć  Ā«messieurs les jurĆ©sĀ» que Ā«le sieur Baloup, l'ancien maĆ®tre charron chez lequel l'accusĆ© disait avoir servi, avait Ć©tĆ© inutilement citĆ©. Il Ć©tait en faillite, et n'avait pu ĆŖtre retrouvĆ©.Ā» Puis se tournant vers l'accusĆ©, il l'engagea Ć  Ć©couter ce qu'il allait lui dire et ajouta: --Vous ĆŖtes dans une situation où il faut rĆ©flĆ©chir. Les prĆ©somptions les plus graves pĆØsent sur vous et peuvent entraĆ®ner des consĆ©quences capitales. AccusĆ©, dans votre intĆ©rĆŖt, je vous interpelle une derniĆØre fois, expliquez-vous clairement sur ces deux faits:--PremiĆØrement, avez-vous, oui ou non, franchi le mur du clos Pierron, cassĆ© la branche et volĆ© les pommes, c'est-Ć -dire commis le crime de vol avec escalade? DeuxiĆØmement, oui ou non, ĆŖtes-vous le forƧat libĆ©rĆ© Jean Valjean? L'accusĆ© secoua la tĆŖte d'un air capable, comme un homme qui a bien compris et qui sait ce qu'il va rĆ©pondre. Il ouvrit la bouche, se tourna vers le prĆ©sident et dit: --D'abord.... Puis il regarda son bonnet, il regarda le plafond, et se tut. --AccusĆ©, reprit l'avocat gĆ©nĆ©ral d'une voix sĆ©vĆØre, faites attention. Vous ne rĆ©pondez Ć  rien de ce qu'on vous demande. Votre trouble vous condamne. Il est Ć©vident que vous ne vous appelez pas Champmathieu, que vous ĆŖtes le forƧat Jean Valjean cachĆ© d'abord sous le nom de Jean Mathieu qui Ć©tait le nom de sa mĆØre, que vous ĆŖtes allĆ© en Auvergne, que vous ĆŖtes nĆ© Ć  Faverolles où vous avez Ć©tĆ© Ć©mondeur. Il est Ć©vident que vous avez volĆ© avec escalade des pommes mĆ»res dans le clos Pierron. Messieurs les jurĆ©s apprĆ©cieront. L'accusĆ© avait fini par se rasseoir; il se leva brusquement quand l'avocat gĆ©nĆ©ral eut fini, et s'Ć©cria: --Vous ĆŖtes trĆØs mĆ©chant, vous! VoilĆ  ce que je voulais dire. Je ne trouvais pas d'abord. Je n'ai rien volĆ©. Je suis un homme qui ne mange pas tous les jours. Je venais d'Ailly, je marchais dans le pays aprĆØs une ondĆ©e qui avait fait la campagne toute jaune, mĆŖme que les mares dĆ©bordaient et qu'il ne sortait plus des sables que de petits brins d'herbe au bord de la route, j'ai trouvĆ© une branche cassĆ©e par terre où il y avait des pommes, j'ai ramassĆ© la branche sans savoir qu'elle me ferait arriver de la peine. Il y a trois mois que je suis en prison et qu'on me trimballe. AprĆØs Ƨa, je ne peux pas dire, on parle contre moi, on me dit: rĆ©pondez! le gendarme, qui est bon enfant, me pousse le coude et me dit tout bas: rĆ©ponds donc. Je ne sais pas expliquer, moi, je n'ai pas fait les Ć©tudes, je suis un pauvre homme. VoilĆ  ce qu'on a tort de ne pas voir. Je n'ai pas volĆ©, j'ai ramassĆ© par terre des choses qu'il y avait. Vous dites Jean Valjean, Jean Mathieu! Je ne connais pas ces personnes-lĆ . C'est des villageois. J'ai travaillĆ© chez monsieur Baloup, boulevard de l'HĆ“pital. Je m'appelle Champmathieu. Vous ĆŖtes bien malins de me dire où je suis nĆ©. Moi, je l'ignore. Tout le monde n'a pas des maisons pour y venir au monde. Ce serait trop commode. Je crois que mon pĆØre et ma mĆØre Ć©taient des gens qui allaient sur les routes. Je ne sais pas d'ailleurs. Quand j'Ć©tais enfant, on m'appelait Petit, maintenant, on m'appelle Vieux. VoilĆ  mes noms de baptĆŖme. Prenez Ƨa comme vous voudrez. J'ai Ć©tĆ© en Auvergne, j'ai Ć©tĆ© Ć  Faverolles, pardi! Eh bien? est-ce qu'on ne peut pas avoir Ć©tĆ© en Auvergne et avoir Ć©tĆ© Ć  Faverolles sans avoir Ć©tĆ© aux galĆØres? Je vous dis que je n'ai pas volĆ©, et que je suis le pĆØre Champmathieu. J'ai Ć©tĆ© chez monsieur Baloup, j'ai Ć©tĆ© domiciliĆ©. Vous m'ennuyez avec vos bĆŖtises Ć  la fin! Pourquoi donc est-ce que le monde est aprĆØs moi comme des acharnĆ©s! L'avocat gĆ©nĆ©ral Ć©tait demeurĆ© debout; il s'adressa au prĆ©sident: --Monsieur le prĆ©sident, en prĆ©sence des dĆ©nĆ©gations confuses, mais fort habiles de l'accusĆ©, qui voudrait bien se faire passer pour idiot, mais qui n'y parviendra pas--nous l'en prĆ©venons--nous requĆ©rons qu'il vous plaise et qu'il plaise Ć  la cour appeler de nouveau dans cette enceinte les condamnĆ©s Brevet, Cochepaille et Chenildieu et l'inspecteur de police Javert, et les interpeller une derniĆØre fois sur l'identitĆ© de l'accusĆ© avec le forƧat Jean Valjean. --Je fais remarquer Ć  monsieur l'avocat gĆ©nĆ©ral, dit le prĆ©sident, que l'inspecteur de police Javert, rappelĆ© par ses fonctions au chef-lieu d'un arrondissement voisin, a quittĆ© l'audience et mĆŖme la ville, aussitĆ“t sa dĆ©position faite. Nous lui en avons accordĆ© l'autorisation, avec l'agrĆ©ment de monsieur l'avocat gĆ©nĆ©ral et du dĆ©fenseur de l'accusĆ©. --C'est juste, monsieur le prĆ©sident, reprit l'avocat gĆ©nĆ©ral. En l'absence du sieur Javert, je crois devoir rappeler Ć  messieurs les jurĆ©s ce qu'il a dit ici-mĆŖme, il y a peu d'heures. Javert est un homme estimĆ© qui honore par sa rigoureuse et stricte probitĆ© des fonctions infĆ©rieures, mais importantes. Voici en quels termes il a dĆ©posĆ©:--Ā«Je n'ai pas mĆŖme besoin des prĆ©somptions morales et des preuves matĆ©rielles qui dĆ©mentent les dĆ©nĆ©gations de l'accusĆ©. Je le reconnais parfaitement. Cet homme ne s'appelle pas Champmathieu; c'est un ancien forƧat trĆØs mĆ©chant et trĆØs redoutĆ© nommĆ© Jean Valjean. On ne l'a libĆ©rĆ© Ć  l'expiration de sa peine qu'avec un extrĆŖme regret. Il a subi dix-neuf ans de travaux forcĆ©s pour vol qualifiĆ©. Il avait cinq ou six fois tentĆ© de s'Ć©vader. Outre le vol Petit-Gervais et le vol Pierron, je le soupƧonne encore d'un vol commis chez sa grandeur le dĆ©funt Ć©vĆŖque de Digne. Je l'ai souvent vu, Ć  l'Ć©poque où j'Ć©tais adjudant garde-chiourme au bagne de Toulon. Je rĆ©pĆØte que je le reconnais parfaitement.Ā» Cette dĆ©claration si prĆ©cise parut produire une vive impression sur le public et le jury. L'avocat gĆ©nĆ©ral termina en insistant pour qu'Ć  dĆ©faut de Javert, les trois tĆ©moins Brevet, Chenildieu et Cochepaille fussent entendus de nouveau et interpellĆ©s solennellement. Le prĆ©sident transmit un ordre Ć  un huissier, et un moment aprĆØs la porte de la chambre des tĆ©moins s'ouvrit. L'huissier, accompagnĆ© d'un gendarme prĆŖt Ć  lui prĆŖter main-forte, introduisit le condamnĆ© Brevet. L'auditoire Ć©tait en suspens et toutes les poitrines palpitaient comme si elles n'eussent eu qu'une seule Ć¢me. L'ancien forƧat Brevet portait la veste noire et grise des maisons centrales. Brevet Ć©tait un personnage d'une soixantaine d'annĆ©es qui avait une espĆØce de figure d'homme d'affaires et l'air d'un coquin. Cela va quelquefois ensemble. Il Ć©tait devenu, dans la prison où de nouveaux mĆ©faits l'avaient ramenĆ©, quelque chose comme guichetier. C'Ć©tait un homme dont les chefs disaient: Il cherche Ć  se rendre utile. Les aumĆ“niers portaient bon tĆ©moignage de ses habitudes religieuses. Il ne faut pas oublier que ceci se passait sous la restauration. --Brevet, dit le prĆ©sident, vous avez subi une condamnation infamante et vous ne pouvez prĆŖter serment.... Brevet baissa les yeux. --Cependant, reprit le prĆ©sident, mĆŖme dans l'homme que la loi a dĆ©gradĆ©, il peut rester, quand la pitiĆ© divine le permet, un sentiment d'honneur et d'Ć©quitĆ©. C'est Ć  ce sentiment que je fais appel Ć  cette heure dĆ©cisive. S'il existe encore en vous, et je l'espĆØre, rĆ©flĆ©chissez avant de me rĆ©pondre, considĆ©rez d'une part cet homme qu'un mot de vous peut perdre, d'autre part la justice qu'un mot de vous peut Ć©clairer. L'instant est solennel, et il est toujours temps de vous rĆ©tracter, si vous croyez vous ĆŖtre trompĆ©.--AccusĆ©, levez-vous. --Brevet, regardez bien l'accusĆ©, recueillez vos souvenirs, et dites-nous, en votre Ć¢me et conscience, si vous persistez Ć  reconnaĆ®tre cet homme pour votre ancien camarade de bagne Jean Valjean. Brevet regarda l'accusĆ©, puis se retourna vers la cour. --Oui, monsieur le prĆ©sident. C'est moi qui l'ai reconnu le premier et je persiste. Cet homme est Jean Valjean. EntrĆ© Ć  Toulon en 1796 et sorti en 1815. Je suis sorti l'an d'aprĆØs. Il a l'air d'une brute maintenant, alors ce serait que l'Ć¢ge l'a abruti; au bagne il Ć©tait sournois. Je le reconnais positivement. --Allez vous asseoir, dit le prĆ©sident. AccusĆ©, restez debout. On introduisit Chenildieu, forƧat Ć  vie, comme l'indiquaient sa casaque rouge et son bonnet vert. Il subissait sa peine au bagne de Toulon, d'où on l'avait extrait pour cette affaire. C'Ć©tait un petit homme d'environ cinquante ans, vif, ridĆ©, chĆ©tif, jaune, effrontĆ©, fiĆ©vreux, qui avait dans tous ses membres et dans toute sa personne une sorte de faiblesse maladive et dans le regard une force immense. Ses compagnons du bagne l'avaient surnommĆ© Je-nie-Dieu. Le prĆ©sident lui adressa Ć  peu prĆØs les mĆŖmes paroles qu'Ć  Brevet. Au moment où il lui rappela que son infamie lui Ć“tait le droit de prĆŖter serment, Chenildieu leva la tĆŖte et regarda la foule en face. Le prĆ©sident l'invita Ć  se recueillir et lui demanda, comme Ć  Brevet, s'il persistait Ć  reconnaĆ®tre l'accusĆ©. Chenildieu Ć©clata de rire. --Pardine! si je le reconnais! nous avons Ć©tĆ© cinq ans attachĆ©s Ć  la mĆŖme chaĆ®ne. Tu boudes donc, mon vieux? --Allez vous asseoir, dit le prĆ©sident. L'huissier amena Cochepaille. Cet autre condamnĆ© Ć  perpĆ©tuitĆ©, venu du bagne et vĆŖtu de rouge comme Chenildieu, Ć©tait un paysan de Lourdes et un demi-ours des PyrĆ©nĆ©es. Il avait gardĆ© des troupeaux dans la montagne, et de pĆ¢tre il avait glissĆ© brigand. Cochepaille n'Ć©tait pas moins sauvage et paraissait plus stupide encore que l'accusĆ©. C'Ć©tait un de ces malheureux hommes que la nature a Ć©bauchĆ©s en bĆŖtes fauves et que la sociĆ©tĆ© termine en galĆ©riens. Le prĆ©sident essaya de le remuer par quelques paroles pathĆ©tiques et graves et lui demanda, comme aux deux autres, s'il persistait, sans hĆ©sitation et sans trouble, Ć  reconnaĆ®tre l'homme debout devant lui. --C'est Jean Valjean, dit Cochepaille. MĆŖme qu'on l'appelait Jean-le-Cric, tant il Ć©tait fort. Chacune des affirmations de ces trois hommes, Ć©videmment sincĆØres et de bonne foi, avait soulevĆ© dans l'auditoire un murmure de fĆ¢cheux augure pour l'accusĆ©, murmure qui croissait et se prolongeait plus longtemps chaque fois qu'une dĆ©claration nouvelle venait s'ajouter Ć  la prĆ©cĆ©dente. L'accusĆ©, lui, les avait Ć©coutĆ©es avec ce visage Ć©tonnĆ© qui, selon l'accusation, Ć©tait son principal moyen de dĆ©fense. ƀ la premiĆØre, les gendarmes ses voisins l'avaient entendu grommeler entre ses dents: Ah bien! en voilĆ  un! AprĆØs la seconde il dit un peu plus haut, d'un air presque satisfait: Bon! ƀ la troisiĆØme il s'Ć©cria: Fameux! Le prĆ©sident l'interpella. --AccusĆ©, vous avez entendu. Qu'avez-vous Ć  dire? Il rĆ©pondit: --Je dis--Fameux! Une rumeur Ć©clata dans le public et gagna presque le jury. Il Ć©tait Ć©vident que l'homme Ć©tait perdu. --Huissiers, dit le prĆ©sident, faites faire silence. Je vais clore les dĆ©bats. En ce moment un mouvement se fit tout Ć  cĆ“tĆ© du prĆ©sident. On entendit une voix qui criait: --Brevet, Chenildieu, Cochepaille! regardez de ce cĆ“tĆ©-ci. Tous ceux qui entendirent cette voix se sentirent glacĆ©s, tant elle Ć©tait lamentable et terrible. Les yeux se tournĆØrent vers le point d'où elle venait. Un homme, placĆ© parmi les spectateurs privilĆ©giĆ©s qui Ć©taient assis derriĆØre la cour, venait de se lever, avait poussĆ© la porte Ć  hauteur d'appui qui sĆ©parait le tribunal du prĆ©toire, et Ć©tait debout au milieu de la salle. Le prĆ©sident, l'avocat gĆ©nĆ©ral, M. Bamatabois, vingt personnes, le reconnurent, et s'Ć©criĆØrent Ć  la fois: --Monsieur Madeleine! Chapitre XI Champmathieu de plus en plus Ć©tonnĆ© C'Ć©tait lui en effet. La lampe du greffier Ć©clairait son visage. Il tenait son chapeau Ć  la main, il n'y avait aucun dĆ©sordre dans ses vĆŖtements, sa redingote Ć©tait boutonnĆ©e avec soin. Il Ć©tait trĆØs pĆ¢le et il tremblait lĆ©gĆØrement. Ses cheveux, gris encore au moment de son arrivĆ©e Ć  Arras, Ć©taient maintenant tout Ć  fait blancs. Ils avaient blanchi depuis une heure qu'il Ć©tait lĆ . Toutes les tĆŖtes se dressĆØrent. La sensation fut indescriptible. Il y eut dans l'auditoire un instant d'hĆ©sitation. La voix avait Ć©tĆ© si poignante, l'homme qui Ć©tait lĆ  paraissait si calme, qu'au premier abord on ne comprit pas. On se demanda qui avait criĆ©. On ne pouvait croire que ce fĆ»t cet homme tranquille qui eĆ»t jetĆ© ce cri effrayant. Cette indĆ©cision ne dura que quelques secondes. Avant mĆŖme que le prĆ©sident et l'avocat gĆ©nĆ©ral eussent pu dire un mot, avant que les gendarmes et les huissiers eussent pu faire un geste, l'homme que tous appelaient encore en ce moment M. Madeleine s'Ć©tait avancĆ© vers les tĆ©moins Cochepaille, Brevet et Chenildieu. --Vous ne me reconnaissez pas? dit-il. Tous trois demeurĆØrent interdits et indiquĆØrent par un signe de tĆŖte qu'ils ne le connaissaient point. Cochepaille intimidĆ© fit le salut militaire. M. Madeleine se tourna vers les jurĆ©s et vers la cour et dit d'une voix douce: --Messieurs les jurĆ©s, faites relĆ¢cher l'accusĆ©. Monsieur le prĆ©sident, faites-moi arrĆŖter. L'homme que vous cherchez, ce n'est pas lui, c'est moi. Je suis Jean Valjean. Pas une bouche ne respirait. ƀ la premiĆØre commotion de l'Ć©tonnement avait succĆ©dĆ© un silence de sĆ©pulcre. On sentait dans la salle cette espĆØce de terreur religieuse qui saisit la foule lorsque quelque chose de grand s'accomplit. Cependant le visage du prĆ©sident s'Ć©tait empreint de sympathie et de tristesse; il avait Ć©changĆ© un signe rapide avec l'avocat et quelques paroles Ć  voix basse avec les conseillers assesseurs. Il s'adressa au public, et demanda avec un accent qui fut compris de tous: --Y a-t-il un mĆ©decin ici? L'avocat gĆ©nĆ©ral prit la parole: --Messieurs les jurĆ©s, l'incident si Ć©trange et si inattendu qui trouble l'audience ne nous inspire, ainsi qu'Ć  vous, qu'un sentiment que nous n'avons pas besoin d'exprimer. Vous connaissez tous, au moins de rĆ©putation, l'honorable M. Madeleine, maire de Montreuil-sur-mer. S'il y a un mĆ©decin dans l'auditoire, nous nous joignons Ć  monsieur le prĆ©sident pour le prier de vouloir bien assister monsieur Madeleine et le reconduire Ć  sa demeure. M. Madeleine ne laissa point achever l'avocat gĆ©nĆ©ral. Il l'interrompit d'un accent plein de mansuĆ©tude et d'autoritĆ©. Voici les paroles qu'il prononƧa; les voici littĆ©ralement, telles qu'elles furent Ć©crites immĆ©diatement aprĆØs l'audience par un des tĆ©moins de cette scĆØne; telles qu'elles sont encore dans l'oreille de ceux qui les ont entendues, il y a prĆØs de quarante ans aujourd'hui. --Je vous remercie, monsieur l'avocat gĆ©nĆ©ral, mais je ne suis pas fou. Vous allez voir. Vous Ć©tiez sur le point de commettre une grande erreur, lĆ¢chez cet homme, j'accomplis un devoir, je suis ce malheureux condamnĆ©. Je suis le seul qui voie clair ici, et je vous dis la vĆ©ritĆ©. Ce que je fais en ce moment, Dieu, qui est lĆ -haut, le regarde, et cela suffit. Vous pouvez me prendre, puisque me voilĆ . J'avais pourtant fait de mon mieux. Je me suis cachĆ© sous un nom; je suis devenu riche, je suis devenu maire; j'ai voulu rentrer parmi les honnĆŖtes gens. Il paraĆ®t que cela ne se peut pas. Enfin, il y a bien des choses que je ne puis pas dire, je ne vais pas vous raconter ma vie, un jour on saura. J'ai volĆ© monseigneur l'Ć©vĆŖque, cela est vrai; j'ai volĆ© Petit-Gervais, cela est vrai. On a eu raison de vous dire que Jean Valjean Ć©tait un malheureux trĆØs mĆ©chant. Toute la faute n'est peut-ĆŖtre pas Ć  lui. Ɖcoutez, messieurs les juges, un homme aussi abaissĆ© que moi n'a pas de remontrance Ć  faire Ć  la providence ni de conseil Ć  donner Ć  la sociĆ©tĆ©; mais, voyez-vous, l'infamie d'où j'avais essayĆ© de sortir est une chose nuisible. Les galĆØres font le galĆ©rien. Recueillez cela, si vous voulez. Avant le bagne, j'Ć©tais un pauvre paysan trĆØs peu intelligent, une espĆØce d'idiot; le bagne m'a changĆ©. J'Ć©tais stupide, je suis devenu mĆ©chant; j'Ć©tais bĆ»che, je suis devenu tison. Plus tard l'indulgence et la bontĆ© m'ont sauvĆ©, comme la sĆ©vĆ©ritĆ© m'avait perdu. Mais, pardon, vous ne pouvez pas comprendre ce que je dis lĆ . Vous trouverez chez moi, dans les cendres de la cheminĆ©e, la piĆØce de quarante sous que j'ai volĆ©e il y a sept ans Ć  Petit-Gervais. Je n'ai plus rien Ć  ajouter. Prenez-moi. Mon Dieu! monsieur l'avocat gĆ©nĆ©ral remue la tĆŖte, vous dites: M. Madeleine est devenu fou, vous ne me croyez pas! VoilĆ  qui est affligeant. N'allez point condamner cet homme au moins! Quoi! ceux-ci ne me reconnaissent pas! Je voudrais que Javert fĆ»t ici. Il me reconnaĆ®trait, lui! Rien ne pourrait rendre ce qu'il y avait de mĆ©lancolie bienveillante et sombre dans l'accent qui accompagnait ces paroles. Il se tourna vers les trois forƧats: --Eh bien, je vous reconnais, moi! Brevet! vous rappelez-vous?... Il s'interrompit, hĆ©sita un moment, et dit: --Te rappelles-tu ces bretelles en tricot Ć  damier que tu avais au bagne? Brevet eut comme une secousse de surprise et le regarda de la tĆŖte aux pieds d'un air effrayĆ©. Lui continua: --Chenildieu, qui te surnommais toi-mĆŖme Je-nie-Dieu, tu as toute l'Ć©paule droite brĆ»lĆ©e profondĆ©ment, parce que tu t'es couchĆ© un jour l'Ć©paule sur un rĆ©chaud plein de braise, pour effacer les trois lettres T. F. P., qu'on y voit toujours cependant. RĆ©ponds, est-ce vrai? --C'est vrai, dit Chenildieu. Il s'adressa Ć  Cochepaille: --Cochepaille, tu as prĆØs de la saignĆ©e du bras gauche une date gravĆ©e en lettres bleues avec de la poudre brĆ»lĆ©e. Cette date, c'est celle du dĆ©barquement de l'empereur Ć  Cannes, _1er mars 1815_. RelĆØve ta manche. Cochepaille releva sa manche, tous les regards se penchĆØrent autour de lui sur son bras nu. Un gendarme approcha une lampe; la date y Ć©tait. Le malheureux homme se tourna vers l'auditoire et vers les juges avec un sourire dont ceux qui l'ont vu sont encore navrĆ©s lorsqu'ils y songent. C'Ć©tait le sourire du triomphe, c'Ć©tait aussi le sourire du dĆ©sespoir. --Vous voyez bien, dit-il, que je suis Jean Valjean. Il n'y avait plus dans cette enceinte ni juges, ni accusateurs, ni gendarmes; il n'y avait que des yeux fixes et des coeurs Ć©mus. Personne ne se rappelait plus le rĆ“le que chacun pouvait avoir Ć  jouer; l'avocat gĆ©nĆ©ral oubliait qu'il Ć©tait lĆ  pour requĆ©rir, le prĆ©sident qu'il Ć©tait lĆ  pour prĆ©sider, le dĆ©fenseur qu'il Ć©tait lĆ  pour dĆ©fendre. Chose frappante, aucune question ne fut faite, aucune autoritĆ© n'intervint. Le propre des spectacles sublimes, c'est de prendre toutes les Ć¢mes et de faire de tous les tĆ©moins des spectateurs. Aucun peut-ĆŖtre ne se rendait compte de ce qu'il Ć©prouvait; aucun, sans doute, ne se disait qu'il voyait resplendir lĆ  une grande lumiĆØre; tous intĆ©rieurement se sentaient Ć©blouis. Il Ć©tait Ć©vident qu'on avait sous les yeux Jean Valjean. Cela rayonnait. L'apparition de cet homme avait suffi pour remplir de clartĆ© cette aventure si obscure le moment d'auparavant. Sans qu'il fĆ»t besoin d'aucune explication dĆ©sormais, toute cette foule, comme par une sorte de rĆ©vĆ©lation Ć©lectrique, comprit tout de suite et d'un seul coup d'oeil cette simple et magnifique histoire d'un homme qui se livrait pour qu'un autre homme ne fĆ»t pas condamnĆ© Ć  sa place. Les dĆ©tails, les hĆ©sitations, les petites rĆ©sistances possibles se perdirent dans ce vaste fait lumineux. Impression qui passa vite, mais qui dans l'instant fut irrĆ©sistible. --Je ne veux pas dĆ©ranger davantage l'audience, reprit Jean Valjean. Je m'en vais, puisqu'on ne m'arrĆŖte pas. J'ai plusieurs choses Ć  faire. Monsieur l'avocat gĆ©nĆ©ral sait qui je suis, il sait où je vais, il me fera arrĆŖter quand il voudra. Il se dirigea vers la porte de sortie. Pas une voix ne s'Ć©leva, pas un bras ne s'Ć©tendit pour l'empĆŖcher. Tous s'Ć©cartĆØrent. Il avait en ce moment ce je ne sais quoi de divin qui fait que les multitudes reculent et se rangent devant un homme. Il traversa la foule Ć  pas lents. On n'a jamais su qui ouvrit la porte, mais il est certain que la porte se trouva ouverte lorsqu'il y parvint. ArrivĆ© lĆ , il se retourna et dit: --Monsieur l'avocat gĆ©nĆ©ral, je reste Ć  votre disposition. Puis il s'adressa Ć  l'auditoire: --Vous tous, tous ceux qui sont ici, vous me trouvez digne de pitiĆ©, n'est-ce pas? Mon Dieu! quand je pense Ć  ce que j'ai Ć©tĆ© sur le point de faire, je me trouve digne d'envie. Cependant j'aurais mieux aimĆ© que tout ceci n'arrivĆ¢t pas. Il sortit, et la porte se referma comme elle avait Ć©tĆ© ouverte, car ceux qui font de certaines choses souveraines sont toujours sĆ»rs d'ĆŖtre servis par quelqu'un dans la foule. Moins d'une heure aprĆØs, le verdict du jury dĆ©chargeait de toute accusation le nommĆ© Champmathieu; et Champmathieu, mis en libertĆ© immĆ©diatement, s'en allait stupĆ©fait, croyant tous les hommes fous et ne comprenant rien Ć  cette vision. Livre huitiĆØme--Contre-coup Chapitre I Dans quel miroir M. Madeleine regarde ses cheveux Le jour commenƧait Ć  poindre. Fantine avait eu une nuit de fiĆØvre et d'insomnie, pleine d'ailleurs d'images heureuses; au matin, elle s'endormit. La soeur Simplice qui l'avait veillĆ©e profita de ce sommeil pour aller prĆ©parer une nouvelle potion de quinquina. La digne soeur Ć©tait depuis quelques instants dans le laboratoire de l'infirmerie, penchĆ©e sur ses drogues et sur ses fioles et regardant de trĆØs prĆØs Ć  cause de cette brume que le crĆ©puscule rĆ©pand sur les objets. Tout Ć  coup elle tourna la tĆŖte et fit un lĆ©ger cri. M. Madeleine Ć©tait devant elle. Il venait d'entrer silencieusement. --C'est vous, monsieur le maire! s'Ć©cria-t-elle. Il rĆ©pondit, Ć  voix basse: --Comment va cette pauvre femme? --Pas mal en ce moment. Mais nous avons Ć©tĆ© bien inquiets, allez! Elle lui expliqua ce qui s'Ć©tait passĆ©, que Fantine Ć©tait bien mal la veille et que maintenant elle Ć©tait mieux, parce qu'elle croyait que monsieur le maire Ć©tait allĆ© chercher son enfant Ć  Montfermeil. La soeur n'osa pas interroger monsieur le maire, mais elle vit bien Ć  son air que ce n'Ć©tait point de lĆ  qu'il venait. --Tout cela est bien, dit-il, vous avez eu raison de ne pas la dĆ©tromper. --Oui, reprit la soeur, mais maintenant, monsieur le maire, qu'elle va vous voir et qu'elle ne verra pas son enfant, que lui dirons-nous? Il resta un moment rĆŖveur. --Dieu nous inspirera, dit-il. --On ne pourrait cependant pas mentir, murmura la soeur Ć  demi-voix. Le plein jour s'Ć©tait fait dans la chambre. Il Ć©clairait en face le visage de M. Madeleine. Le hasard fit que la soeur leva les yeux. --Mon Dieu, monsieur! s'Ć©cria-t-elle, que vous est-il donc arrivĆ©? vos cheveux sont tout blancs! --Blancs! dit-il. La soeur Simplice n'avait point de miroir; elle fouilla dans une trousse et en tira une petite glace dont se servait le mĆ©decin de l'infirmerie pour constater qu'un malade Ć©tait mort et ne respirait plus. M. Madeleine prit la glace, y considĆ©ra ses cheveux, et dit: --Tiens! Il prononƧa ce mot avec indiffĆ©rence et comme s'il pensait Ć  autre chose. La soeur se sentit glacĆ©e par je ne sais quoi d'inconnu qu'elle entrevoyait dans tout ceci. Il demanda: --Puis-je la voir? --Est-ce que monsieur le maire ne lui fera pas revenir son enfant? dit la soeur, osant Ć  peine hasarder une question. --Sans doute, mais il faut au moins deux ou trois jours. --Si elle ne voyait pas monsieur le maire d'ici lĆ , reprit timidement la soeur, elle ne saurait pas que monsieur le maire est de retour, il serait aisĆ© de lui faire prendre patience, et quand l'enfant arriverait elle penserait tout naturellement que monsieur le maire est arrivĆ© avec l'enfant. On n'aurait pas de mensonge Ć  faire. M. Madeleine parut rĆ©flĆ©chir quelques instants, puis il dit avec sa gravitĆ© calme: --Non, ma soeur, il faut que je la voie. Je suis peut-ĆŖtre pressĆ©. La religieuse ne sembla pas remarquer ce mot Ā«peut-ĆŖtreĀ», qui donnait un sens obscur et singulier aux paroles de M. le maire. Elle rĆ©pondit en baissant les yeux et la voix respectueusement: --En ce cas, elle repose, mais monsieur le maire peut entrer. Il fit quelques observations sur une porte qui fermait mal, et dont le bruit pouvait rĆ©veiller la malade, puis il entra dans la chambre de Fantine, s'approcha du lit et entrouvrit les rideaux. Elle dormait. Son souffle sortait de sa poitrine avec ce bruit tragique qui est propre Ć  ces maladies, et qui navre les pauvres mĆØres lorsqu'elles veillent la nuit prĆØs de leur enfant condamnĆ© et endormi. Mais cette respiration pĆ©nible troublait Ć  peine une sorte de sĆ©rĆ©nitĆ© ineffable, rĆ©pandue sur son visage, qui la transfigurait dans son sommeil. Sa pĆ¢leur Ć©tait devenue de la blancheur; ses joues Ć©taient vermeilles. Ses longs cils blonds, la seule beautĆ© qui lui fĆ»t restĆ©e de sa virginitĆ© et de sa jeunesse, palpitaient tout en demeurant clos et baissĆ©s. Toute sa personne tremblait de je ne sais quel dĆ©ploiement d'ailes prĆŖtes Ć  s'entrouvrir et Ć  l'emporter, qu'on sentait frĆ©mir, mais qu'on ne voyait pas. ƀ la voir ainsi, on n'eĆ»t jamais pu croire que c'Ć©tait lĆ  une malade presque dĆ©sespĆ©rĆ©e. Elle ressemblait plutĆ“t Ć  ce qui va s'envoler qu'Ć  ce qui va mourir. La branche, lorsqu'une main s'approche pour dĆ©tacher la fleur, frissonne, et semble Ć  la fois se dĆ©rober et s'offrir. Le corps humain a quelque chose de ce tressaillement, quand arrive l'instant où les doigts mystĆ©rieux de la mort vont cueillir l'Ć¢me. M. Madeleine resta quelque temps immobile prĆØs de ce lit, regardant tour Ć  tour la malade et le crucifix, comme il faisait deux mois auparavant, le jour où il Ć©tait venu pour la premiĆØre fois la voir dans cet asile. Ils Ć©taient encore lĆ  tous les deux dans la mĆŖme attitude, elle dormant, lui priant; seulement maintenant, depuis ces deux mois Ć©coulĆ©s, elle avait des cheveux gris et lui des cheveux blancs. La soeur n'Ć©tait pas entrĆ©e avec lui. Il se tenait prĆØs de ce lit, debout, le doigt sur la bouche, comme s'il y eĆ»t eu dans la chambre quelqu'un Ć  faire taire. Elle ouvrit les yeux, le vit, et dit paisiblement, avec un sourire: --Et Cosette? Chapitre II Fantine heureuse Elle n'eut pas un mouvement de surprise, ni un mouvement de joie; elle Ć©tait la joie mĆŖme. Cette simple question: Ā«Et Cosette?Ā» fut faite avec une foi si profonde, avec tant de certitude, avec une absence si complĆØte d'inquiĆ©tude et de doute, qu'il ne trouva pas une parole. Elle continua: --Je savais que vous Ć©tiez lĆ . Je dormais, mais je vous voyais. Il y a longtemps que je vous vois. Je vous ai suivi des yeux toute la nuit. Vous Ć©tiez dans une gloire et vous aviez autour de vous toutes sortes de figures cĆ©lestes. Il leva son regard vers le crucifix. --Mais, reprit-elle, dites-moi donc où est Cosette? Pourquoi ne l'avoir pas mise sur mon lit pour le moment où je m'Ć©veillerais? Il rĆ©pondit machinalement quelque chose qu'il n'a jamais pu se rappeler plus tard. Heureusement le mĆ©decin, averti, Ć©tait survenu. Il vint en aide Ć  M. Madeleine. --Mon enfant, dit le mĆ©decin, calmez-vous. Votre enfant est lĆ . Les yeux de Fantine s'illuminĆØrent et couvrirent de clartĆ© tout son visage. Elle joignit les mains avec une expression qui contenait tout ce que la priĆØre peut avoir Ć  la fois de plus violent et de plus doux. --Oh! s'Ć©cria-t-elle, apportez-la-moi! Touchante illusion de mĆØre! Cosette Ć©tait toujours pour elle le petit enfant qu'on apporte. --Pas encore, reprit le mĆ©decin, pas en ce moment. Vous avez un reste de fiĆØvre. La vue de votre enfant vous agiterait et vous ferait du mal. Il faut d'abord vous guĆ©rir. Elle l'interrompit impĆ©tueusement. --Mais je suis guĆ©rie! je vous dis que je suis guĆ©rie! Est-il Ć¢ne, ce mĆ©decin! Ah ƧƠ! je veux voir mon enfant, moi! --Vous voyez, dit le mĆ©decin, comme vous vous emportez. Tant que vous serez ainsi, je m'opposerai Ć  ce que vous ayez votre enfant. Il ne suffit pas de la voir, il faut vivre pour elle. Quand vous serez raisonnable, je vous l'amĆØnerai moi-mĆŖme. La pauvre mĆØre courba la tĆŖte. --Monsieur le mĆ©decin, je vous demande pardon, je vous demande vraiment bien pardon. Autrefois, je n'aurais pas parlĆ© comme je viens de faire, il m'est arrivĆ© tant de malheurs que quelquefois je ne sais plus ce que je dis. Je comprends, vous craignez l'Ć©motion, j'attendrai tant que vous voudrez, mais je vous jure que cela ne m'aurait pas fait de mal de voir ma fille. Je la vois, je ne la quitte pas des yeux depuis hier au soir. Savez-vous? on me l'apporterait maintenant que je me mettrais Ć  lui parler doucement. VoilĆ  tout. Est-ce que ce n'est pas bien naturel que j'aie envie de voir mon enfant qu'on a Ć©tĆ© me chercher exprĆØs Ć  Montfermeil? Je ne suis pas en colĆØre. Je sais bien que je vais ĆŖtre heureuse. Toute la nuit j'ai vu des choses blanches et des personnes qui me souriaient. Quand monsieur le mĆ©decin voudra, il m'apportera ma Cosette. Je n'ai plus de fiĆØvre, puisque je suis guĆ©rie; je sens bien que je n'ai plus rien du tout; mais je vais faire comme si j'Ć©tais malade et ne pas bouger pour faire plaisir aux dames d'ici. Quand on verra que je suis bien tranquille, on dira: il faut lui donner son enfant. M. Madeleine s'Ć©tait assis sur une chaise qui Ć©tait Ć  cĆ“tĆ© du lit. Elle se tourna vers lui; elle faisait visiblement effort pour paraĆ®tre calme et Ā«bien sageĀ», comme elle disait dans cet affaiblissement de la maladie qui ressemble Ć  l'enfance, afin que, la voyant si paisible, on ne fĆ®t pas difficultĆ© de lui amener Cosette. Cependant, tout en se contenant, elle ne pouvait s'empĆŖcher d'adresser Ć  M. Madeleine mille questions. --Avez-vous fait un bon voyage, monsieur le maire? Oh! comme vous ĆŖtes bon d'avoir Ć©tĆ© me la chercher! Dites-moi seulement comment elle est. A-t-elle bien supportĆ© la route? HĆ©las! elle ne me reconnaĆ®tra pas! Depuis le temps, elle m'a oubliĆ©e, pauvre chou! Les enfants, cela n'a pas de mĆ©moire. C'est comme des oiseaux. Aujourd'hui cela voit une chose et demain une autre, et cela ne pense plus Ć  rien. Avait-elle du linge blanc seulement? Ces ThĆ©nardier la tenaient-ils proprement? Comment la nourrissait-on? Oh! comme j'ai souffert, si vous saviez! de me faire toutes ces questions-lĆ  dans le temps de ma misĆØre! Maintenant, c'est passĆ©. Je suis joyeuse. Oh! que je voudrais donc la voir! Monsieur le maire, l'avez-vous trouvĆ©e jolie? N'est-ce pas qu'elle est belle, ma fille? Vous devez avoir eu bien froid dans cette diligence! Est-ce qu'on ne pourrait pas l'amener rien qu'un petit moment? On la remporterait tout de suite aprĆØs. Dites! vous qui ĆŖtes le maĆ®tre, si vous vouliez! Il lui prit la main: --Cosette est belle, dit-il, Cosette se porte bien, vous la verrez bientĆ“t, mais apaisez-vous. Vous parlez trop vivement, et puis vous sortez vos bras du lit, et cela vous fait tousser. En effet, des quintes de toux interrompaient Fantine presque Ć  chaque mot. Fantine ne murmura pas, elle craignait d'avoir compromis par quelques plaintes trop passionnĆ©es la confiance qu'elle voulait inspirer, et elle se mit Ć  dire des paroles indiffĆ©rentes. --C'est assez joli, Montfermeil, n'est-ce-pas? L'Ć©tĆ©, on va y faire des parties de plaisir. Ces ThĆ©nardier font-ils de bonnes affaires? Il ne passe pas grand monde dans leur pays. C'est une espĆØce de gargote que cette auberge-lĆ . M. Madeleine lui tenait toujours la main, il la considĆ©rait avec anxiĆ©tĆ©; il Ć©tait Ć©vident qu'il Ć©tait venu pour lui dire des choses devant lesquelles sa pensĆ©e hĆ©sitait maintenant. Le mĆ©decin, sa visite faite, s'Ć©tait retirĆ©. La soeur Simplice Ć©tait seule restĆ©e auprĆØs d'eux. Cependant, au milieu de ce silence, Fantine s'Ć©cria: --Je l'entends! mon Dieu! je l'entends! Elle Ć©tendit le bras pour qu'on se tĆ»t autour d'elle, retint son souffle, et se mit Ć  Ć©couter avec ravissement. Il y avait un enfant qui jouait dans la cour; l'enfant de la portiĆØre ou d'une ouvriĆØre quelconque. C'est lĆ  un de ces hasards qu'on retrouve toujours et qui semblent faire partie de la mystĆ©rieuse mise en scĆØne des Ć©vĆ©nements lugubres. L'enfant, c'Ć©tait une petite fille, allait, venait, courait pour se rĆ©chauffer, riait et chantait Ć  haute voix. HĆ©las! Ć  quoi les jeux des enfants ne se mĆŖlent-ils pas! C'Ć©tait cette petite fille que Fantine entendait chanter. --Oh! reprit-elle, c'est ma Cosette! je reconnais sa voix! L'enfant s'Ć©loigna comme il Ć©tait venu, la voix s'Ć©teignit, Fantine Ć©couta encore quelque temps, puis son visage s'assombrit, et M. Madeleine l'entendit qui disait Ć  voix basse: --Comme ce mĆ©decin est mĆ©chant de ne pas me laisser voir ma fille! Il a une mauvaise figure, cet homme-lĆ ! Cependant le fond riant de ses idĆ©es revint. Elle continua de se parler Ć  elle-mĆŖme, la tĆŖte sur l'oreiller. --Comme nous allons ĆŖtre heureuses! Nous aurons un petit jardin, d'abord! M. Madeleine me l'a promis. Ma fille jouera dans le jardin. Elle doit savoir ses lettres maintenant. Je la ferai Ć©peler. Elle courra dans l'herbe aprĆØs les papillons. Je la regarderai. Et puis elle fera sa premiĆØre communion. Ah ƧƠ! quand fera-t-elle sa premiĆØre communion? Elle se mit Ć  compter sur ses doigts. --... Un, deux, trois, quatre... elle a sept ans. Dans cinq ans. Elle aura un voile blanc, des bas Ć  jour, elle aura l'air d'une petite femme. Ɣ ma bonne soeur, vous ne savez pas comme je suis bĆŖte, voilĆ  que je pense Ć  la premiĆØre communion de ma fille! Et elle se mit Ć  rire. Il avait quittĆ© la main de Fantine. Il Ć©coutait ces paroles comme on Ć©coute un vent qui souffle, les yeux Ć  terre, l'esprit plongĆ© dans des rĆ©flexions sans fond. Tout Ć  coup elle cessa de parler, cela lui fit lever machinalement la tĆŖte. Fantine Ć©tait devenue effrayante. Elle ne parlait plus, elle ne respirait plus; elle s'Ć©tait soulevĆ©e Ć  demi sur son sĆ©ant, son Ć©paule maigre sortait de sa chemise, son visage, radieux le moment d'auparavant, Ć©tait blĆŖme, et elle paraissait fixer sur quelque chose de formidable, devant elle, Ć  l'autre extrĆ©mitĆ© de la chambre, son oeil agrandi par la terreur. --Mon Dieu! s'Ć©cria-t-il. Qu'avez-vous, Fantine? Elle ne rĆ©pondit pas, elle ne quitta point des yeux l'objet quelconque qu'elle semblait voir, elle lui toucha le bras d'une main et de l'autre lui fit signe de regarder derriĆØre lui. Il se retourna, et vit Javert. Chapitre III Javert content Voici ce qui s'Ć©tait passĆ©. Minuit et demi venait de sonner, quand M. Madeleine Ć©tait sorti de la salle des assises d'Arras. Il Ć©tait rentrĆ© Ć  son auberge juste Ć  temps pour repartir par la malle-poste où l'on se rappelle qu'il avait retenu sa place. Un peu avant six heures du matin, il Ć©tait arrivĆ© Ć  Montreuil-sur-mer, et son premier soin avait Ć©tĆ© de jeter Ć  la poste sa lettre Ć  M. Laffitte, puis d'entrer Ć  l'infirmerie et de voir Fantine. Cependant, Ć  peine avait-il quittĆ© la salle d'audience de la cour d'assises, que l'avocat gĆ©nĆ©ral, revenu du premier saisissement, avait pris la parole pour dĆ©plorer l'acte de folie de l'honorable maire de Montreuil-sur-mer, dĆ©clarer que ses convictions n'Ć©taient en rien modifiĆ©es par cet incident bizarre qui s'Ć©claircirait plus tard, et requĆ©rir, en attendant, la condamnation de ce Champmathieu, Ć©videmment le vrai Jean Valjean. La persistance de l'avocat gĆ©nĆ©ral Ć©tait visiblement en contradiction avec le sentiment de tous, du public, de la cour et du jury. Le dĆ©fenseur avait eu peu de peine Ć  rĆ©futer cette harangue et Ć  Ć©tablir que, par suite des rĆ©vĆ©lations de M. Madeleine, c'est-Ć -dire du vrai Jean Valjean, la face de l'affaire Ć©tait bouleversĆ©e de fond en comble, et que le jury n'avait plus devant les yeux qu'un innocent. L'avocat avait tirĆ© de lĆ  quelques Ć©piphonĆØmes, malheureusement peu neufs, sur les erreurs judiciaires, etc., etc., le prĆ©sident dans son rĆ©sumĆ© s'Ć©tait joint au dĆ©fenseur, et le jury en quelques minutes avait mis hors de cause Champmathieu. Cependant il fallait un Jean Valjean Ć  l'avocat gĆ©nĆ©ral, et, n'ayant plus Champmathieu, il prit Madeleine. ImmĆ©diatement aprĆØs la mise en libertĆ© de Champmathieu, l'avocat gĆ©nĆ©ral s'enferma avec le prĆ©sident. Ils confĆ©rĆØrent Ā«de la nĆ©cessitĆ© de se saisir de la personne de M. le maire de Montreuil-sur-merĀ». Cette phrase, où il y a beaucoup de _de_, est de M. l'avocat gĆ©nĆ©ral, entiĆØrement Ć©crite de sa main sur la minute de son rapport au procureur gĆ©nĆ©ral. La premiĆØre Ć©motion passĆ©e, le prĆ©sident fit peu d'objections. Il fallait bien que justice eĆ»t son cours. Et puis, pour tout dire, quoique le prĆ©sident fĆ»t homme bon et assez intelligent, il Ć©tait en mĆŖme temps fort royaliste et presque ardent, et il avait Ć©tĆ© choquĆ© que le maire de Montreuil-sur-mer, en parlant du dĆ©barquement Ć  Cannes, eĆ»t dit l'_empereur_ et non _Buonaparte_. L'ordre d'arrestation fut donc expĆ©diĆ©. L'avocat gĆ©nĆ©ral l'envoya Ć  Montreuil-sur-mer par un exprĆØs, Ć  franc Ć©trier, et en chargea l'inspecteur de police Javert. On sait que Javert Ć©tait revenu Ć  Montreuil-sur-mer immĆ©diatement aprĆØs avoir fait sa dĆ©position. Javert se levait au moment où l'exprĆØs lui remit l'ordre d'arrestation et le mandat d'amener. L'exprĆØs Ć©tait lui-mĆŖme un homme de police fort entendu qui, en deux mots, mit Javert au fait de ce qui Ć©tait arrivĆ© Ć  Arras. L'ordre d'arrestation, signĆ© de l'avocat gĆ©nĆ©ral, Ć©tait ainsi conƧu:--L'inspecteur Javert apprĆ©hendera au corps le sieur Madeleine, maire de Montreuil-sur-mer, qui, dans l'audience de ce jour, a Ć©tĆ© reconnu pour ĆŖtre le forƧat libĆ©rĆ© Jean Valjean. Quelqu'un qui n'eĆ»t pas connu Javert et qui l'eĆ»t vu au moment où il pĆ©nĆ©tra dans l'antichambre de l'infirmerie n'eĆ»t pu rien deviner de ce qui se passait, et lui eĆ»t trouvĆ© l'air le plus ordinaire du monde. Il Ć©tait froid, calme, grave, avait ses cheveux gris parfaitement lissĆ©s sur les tempes et venait de monter l'escalier avec sa lenteur habituelle. Quelqu'un qui l'eĆ»t connu Ć  fond et qui l'eĆ»t examinĆ© attentivement eĆ»t frĆ©mi. La boucle de son col de cuir, au lieu d'ĆŖtre sur sa nuque, Ć©tait sur son oreille gauche. Ceci rĆ©vĆ©lait une agitation inouĆÆe. Javert Ć©tait un caractĆØre complet, ne laissant faire de pli ni Ć  son devoir, ni Ć  son uniforme; mĆ©thodique avec les scĆ©lĆ©rats, rigide avec les boutons de son habit. Pour qu'il eĆ»t mal mis la boucle de son col, il fallait qu'il y eĆ»t en lui une de ces Ć©motions qu'on pourrait appeler des tremblements de terre intĆ©rieurs. Il Ć©tait venu simplement, avait requis un caporal et quatre soldats au poste voisin, avait laissĆ© les soldats dans la cour, et s'Ć©tait fait indiquer la chambre de Fantine par la portiĆØre sans dĆ©fiance, accoutumĆ©e qu'elle Ć©tait Ć  voir des gens armĆ©s demander monsieur le maire. ArrivĆ© Ć  la chambre de Fantine, Javert tourna la clef, poussa la porte avec une douceur de garde-malade ou de mouchard, et entra. ƀ proprement parler, il n'entra pas. Il se tint debout dans la porte entrebĆ¢illĆ©e, le chapeau sur la tĆŖte, la main gauche dans sa redingote fermĆ©e jusqu'au menton. Dans le pli du coude on pouvait voir le pommeau de plomb de son Ć©norme canne, laquelle disparaissait derriĆØre lui. Il resta ainsi prĆØs d'une minute sans qu'on s'aperƧƻt de sa prĆ©sence. Tout Ć  coup Fantine leva les yeux, le vit, et fit retourner M. Madeleine. ƀ l'instant où le regard de Madeleine rencontra le regard de Javert, Javert, sans bouger, sans remuer, sans approcher, devint Ć©pouvantable. Aucun sentiment humain ne rĆ©ussit Ć  ĆŖtre effroyable comme la joie. Ce fut le visage d'un dĆ©mon qui vient de retrouver son damnĆ©. La certitude de tenir enfin Jean Valjean fit apparaĆ®tre sur sa physionomie tout ce qu'il avait dans l'Ć¢me. Le fond remuĆ© monta Ć  la surface. L'humiliation d'avoir un peu perdu la piste et de s'ĆŖtre mĆ©pris quelques minutes sur ce Champmathieu, s'effaƧait sous l'orgueil d'avoir si bien devinĆ© d'abord et d'avoir eu si longtemps un instinct juste. Le contentement de Javert Ć©clata dans son attitude souveraine. La difformitĆ© du triomphe s'Ć©panouit sur ce front Ć©troit. Ce fut tout le dĆ©ploiement d'horreur que peut donner une figure satisfaite. Javert en ce moment Ć©tait au ciel. Sans qu'il s'en rendit nettement compte, mais pourtant avec une intuition confuse de sa nĆ©cessitĆ© et de son succĆØs, il personnifiait, lui Javert, la justice, la lumiĆØre et la vĆ©ritĆ© dans leur fonction cĆ©leste d'Ć©crasement du mal. Il avait derriĆØre lui et autour de lui, Ć  une profondeur infinie, l'autoritĆ©, la raison, la chose jugĆ©e, la conscience lĆ©gale, la vindicte publique, toutes les Ć©toiles; il protĆ©geait l'ordre, il faisait sortir de la loi la foudre, il vengeait la sociĆ©tĆ©, il prĆŖtait main-forte Ć  l'absolu; il se dressait dans une gloire; il y avait dans sa victoire un reste de dĆ©fi et de combat; debout, altier, Ć©clatant, il Ć©talait en plein azur la bestialitĆ© surhumaine d'un archange fĆ©roce; l'ombre redoutable de l'action qu'il accomplissait faisait visible Ć  son poing crispĆ© le vague flamboiement de l'Ć©pĆ©e sociale; heureux et indignĆ©, il tenait sous son talon le crime, le vice, la rĆ©bellion, la perdition, l'enfer, il rayonnait, il exterminait, il souriait et il y avait une incontestable grandeur dans ce saint Michel monstrueux. Javert, effroyable, n'avait rien d'ignoble. La probitĆ©, la sincĆ©ritĆ©, la candeur, la conviction, l'idĆ©e du devoir, sont des choses qui, en se trompant, peuvent devenir hideuses, mais qui, mĆŖme hideuses, restent grandes; leur majestĆ©, propre Ć  la conscience humaine, persiste dans l'horreur. Ce sont des vertus qui ont un vice, l'erreur. L'impitoyable joie honnĆŖte d'un fanatique en pleine atrocitĆ© conserve on ne sait quel rayonnement lugubrement vĆ©nĆ©rable. Sans qu'il s'en doutĆ¢t, Javert, dans son bonheur formidable, Ć©tait Ć  plaindre comme tout ignorant qui triomphe. Rien n'Ć©tait poignant et terrible comme cette figure où se montrait ce qu'on pourrait appeler tout le mauvais du bon. Chapitre IV L'autoritĆ© reprend ses droits La Fantine n'avait point vu Javert depuis le jour où M. le maire l'avait arrachĆ©e Ć  cet homme. Son cerveau malade ne se rendit compte de rien, seulement elle ne douta pas qu'il ne revint la chercher. Elle ne put supporter cette figure affreuse, elle se sentit expirer, elle cacha son visage de ses deux mains et cria avec angoisse: --Monsieur Madeleine, sauvez-moi! Jean Valjean--nous ne le nommerons plus dĆ©sormais autrement--s'Ć©tait levĆ©. Il dit Ć  Fantine de sa voix la plus douce et la plus calme: --Soyez tranquille. Ce n'est pas pour vous qu'il vient. Puis il s'adressa Ć  Javert et lui dit: --Je sais ce que vous voulez. Javert rĆ©pondit: --Allons, vite! Il y eut dans l'inflexion qui accompagna ces deux mots je ne sais quoi de fauve et de frĆ©nĆ©tique. Javert ne dit pas: Ā«Allons, vite!Ā» il dit: Ā«Allonouaite!Ā» Aucune orthographe ne pourrait rendre l'accent dont cela fut prononcĆ©; ce n'Ć©tait plus une parole humaine, c'Ć©tait un rugissement. Il ne fit point comme d'habitude; il n'entra point en matiĆØre; il n'exhiba point de mandat d'amener. Pour lui, Jean Valjean Ć©tait une sorte de combattant mystĆ©rieux et insaisissable, un lutteur tĆ©nĆ©breux qu'il Ć©treignait depuis cinq ans sans pouvoir le renverser. Cette arrestation n'Ć©tait pas un commencement, mais une fin. Il se borna Ć  dire: Ā«Allons, vite!Ā» En parlant ainsi, il ne fit point un pas; il lanƧa sur Jean Valjean ce regard qu'il jetait comme un crampon, et avec lequel il avait coutume de tirer violemment les misĆ©rables Ć  lui. C'Ć©tait ce regard que la Fantine avait senti pĆ©nĆ©trer jusque dans la moelle de ses os deux mois auparavant. Au cri de Javert, Fantine avait rouvert les yeux. Mais M. le maire Ć©tait lĆ . Que pouvait-elle craindre? Javert avanƧa au milieu de la chambre et cria: --Ah ƧƠ! viendras-tu? La malheureuse regarda autour d'elle. Il n'y avait personne que la religieuse et monsieur le maire. ƀ qui pouvait s'adresser ce tutoiement abject? elle seulement. Elle frissonna. Alors elle vit une chose inouĆÆe, tellement inouĆÆe que jamais rien de pareil ne lui Ć©tait apparu dans les plus noirs dĆ©lires de la fiĆØvre. Elle vit le mouchard Javert saisir au collet monsieur le maire; elle vit monsieur le maire courber la tĆŖte. Il lui sembla que le monde s'Ć©vanouissait. Javert, en effet, avait pris Jean Valjean au collet. --Monsieur le maire! cria Fantine. Javert Ć©clata de rire, de cet affreux rire qui lui dĆ©chaussait toutes les dents. --Il n'y a plus de monsieur le maire ici! Jean Valjean n'essaya pas de dĆ©ranger la main qui tenait le col de sa redingote. Il dit: --Javert.... Javert l'interrompit: --Appelle-moi monsieur l'inspecteur. --Monsieur, reprit Jean Valjean, je voudrais vous dire un mot en particulier. --Tout haut! parle tout haut! rĆ©pondit Javert; on me parle tout haut Ć  moi! Jean Valjean continua en baissant la voix: --C'est une priĆØre que j'ai Ć  vous faire.... --Je te dis de parler tout haut. --Mais cela ne doit ĆŖtre entendu que de vous seul.... --Qu'est-ce que cela me fait? je n'Ć©coute pas! Jean Valjean se tourna vers lui et lui dit rapidement et trĆØs bas: --Accordez-moi trois jours! trois jours pour aller chercher l'enfant de cette malheureuse femme! Je payerai ce qu'il faudra. Vous m'accompagnerez si vous voulez. --Tu veux rire! cria Javert. Ah ƧƠ! je ne te croyais pas bĆŖte! Tu me demandes trois jours pour t'en aller! Tu dis que c'est pour aller chercher l'enfant de cette fille! Ah! ah! c'est bon! voilĆ  qui est bon! Fantine eut un tremblement. --Mon enfant! s'Ć©cria-t-elle, aller chercher mon enfant! Elle n'est donc pas ici! Ma soeur, rĆ©pondez-moi, où est Cosette? Je veux mon enfant! Monsieur Madeleine! monsieur le maire! Javert frappa du pied. --VoilĆ  l'autre, Ć  prĆ©sent! Te tairas-tu, drĆ“lesse! Gredin de pays où les galĆ©riens sont magistrats et où les filles publiques sont soignĆ©es comme des comtesses! Ah mais! tout Ƨa va changer; il Ć©tait temps! Il regarda fixement Fantine et ajouta en reprenant Ć  poignĆ©e la cravate, la chemise et le collet de Jean Valjean: --Je te dis qu'il n'y a point de monsieur Madeleine et qu'il n'y a point de monsieur le maire. Il y a un voleur, il y a un brigand, il y a un forƧat appelĆ© Jean Valjean! c'est lui que je tiens! voilĆ  ce qu'il y a! Fantine se dressa en sursaut, appuyĆ©e sur ses bras roides et sur ses deux mains, elle regarda Jean Valjean, elle regarda Javert, elle regarda la religieuse, elle ouvrit la bouche comme pour parler, un rĆ¢le sortit du fond de sa gorge, ses dents claquĆØrent, elle Ć©tendit les bras avec angoisse, ouvrant convulsivement les mains, et cherchant autour d'elle comme quelqu'un qui se noie, puis elle s'affaissa subitement sur l'oreiller. Sa tĆŖte heurta le chevet du lit et vint retomber sur sa poitrine, la bouche bĆ©ante, les yeux ouverts et Ć©teints. Elle Ć©tait morte. Jean Valjean posa sa main sur la main de Javert qui le tenait, et l'ouvrit comme il eĆ»t ouvert la main d'un enfant, puis il dit Ć  Javert: --Vous avez tuĆ© cette femme. --Finirons-nous! cria Javert furieux. Je ne suis pas ici pour entendre des raisons. Ɖconomisons tout Ƨa. La garde est en bas. Marchons tout de suite, ou les poucettes! Il y avait dans un coin de la chambre un vieux lit en fer en assez mauvais Ć©tat qui servait de lit de camp aux soeurs quand elles veillaient. Jean Valjean alla Ć  ce lit, disloqua en un clin d'oeil le chevet dĆ©jĆ  fort dĆ©labrĆ©, chose facile Ć  des muscles comme les siens, saisit Ć  poigne-main la maĆ®tresse-tringle, et considĆ©ra Javert. Javert recula vers la porte. Jean Valjean, sa barre de fer au poing, marcha lentement vers le lit de Fantine. Quand il y fut parvenu, il se retourna, et dit Ć  Javert d'une voix qu'on entendait Ć  peine: --Je ne vous conseille pas de me dĆ©ranger en ce moment. Ce qui est certain, c'est que Javert tremblait. Il eut l'idĆ©e d'aller appeler la garde, mais Jean Valjean pouvait profiter de cette minute pour s'Ć©vader. Il resta donc, saisit sa canne par le petit bout, et s'adossa au chambranle de la porte sans quitter du regard Jean Valjean. Jean Valjean posa son coude sur la pomme du chevet du lit et son front sur sa main, et se mit Ć  contempler Fantine immobile et Ć©tendue. Il demeura ainsi, absorbĆ©, muet, et ne songeant Ć©videmment plus Ć  aucune chose de cette vie. Il n'y avait plus rien sur son visage et dans son attitude qu'une inexprimable pitiĆ©. AprĆØs quelques instants de cette rĆŖverie, il se pencha vers Fantine et lui parla Ć  voix basse. Que lui dit-il? Que pouvait dire cet homme qui Ć©tait rĆ©prouvĆ© Ć  cette femme qui Ć©tait morte? Qu'Ć©tait-ce que ces paroles? Personne sur la terre ne les a entendues. La morte les entendit-elle? Il y a des illusions touchantes qui sont peut-ĆŖtre des rĆ©alitĆ©s sublimes. Ce qui est hors de doute, c'est que la soeur Simplice, unique tĆ©moin de la chose qui se passait, a souvent racontĆ© qu'au moment où Jean Valjean parla Ć  l'oreille de Fantine, elle vit distinctement poindre un ineffable sourire sur ces lĆØvres pĆ¢les et dans ces prunelles vagues, pleines de l'Ć©tonnement du tombeau. Jean Valjean prit dans ses deux mains la tĆŖte de Fantine et l'arrangea sur l'oreiller comme une mĆØre eĆ»t fait pour son enfant, il lui rattacha le cordon de sa chemise et rentra ses cheveux sous son bonnet. Cela fait, il lui ferma les yeux. La face de Fantine en cet instant semblait Ć©trangement Ć©clairĆ©e. La mort, c'est l'entrĆ©e dans la grande lueur. La main de Fantine pendait hors du lit. Jean Valjean s'agenouilla devant cette main, la souleva doucement, et la baisa. Puis il se redressa, et, se tournant vers Javert: --Maintenant, dit-il, je suis Ć  vous. Chapitre V Tombeau convenable Javert dĆ©posa Jean Valjean Ć  la prison de la ville. L'arrestation de M. Madeleine produisit Ć  Montreuil-sur-mer une sensation, ou pour mieux dire une commotion extraordinaire. Nous sommes triste de ne pouvoir dissimuler que sur ce seul mot: _c'Ć©tait un galĆ©rien_, tout le monde Ć  peu prĆØs l'abandonna. En moins de deux heures tout le bien qu'il avait fait fut oubliĆ©, et ce ne fut plus Ā«qu'un galĆ©rienĀ». Il est juste de dire qu'on ne connaissait pas encore les dĆ©tails de l'Ć©vĆ©nement d'Arras. Toute la journĆ©e on entendait dans toutes les parties de la ville des conversations comme celle-ci: --Vous ne savez pas? c'Ć©tait un forƧat libĆ©rĆ©! Qui Ƨa?--Le maire.--Bah! M. Madeleine?--Oui. Vraiment?--Il ne s'appelait pas Madeleine, il a un affreux nom, BĆ©jean, Bojean, Boujean.--Ah, mon Dieu!--Il est arrĆŖtĆ©.--ArrĆŖtĆ©!--En prison Ć  la prison de la ville, en attendant qu'on le transfĆØre.--Qu'on le transfĆØre! On va le transfĆ©rer! Où va-t-on le transfĆ©rer?--Il va passer aux assises pour un vol de grand chemin qu'il a fait autrefois.--Eh bien! je m'en doutais. Cet homme Ć©tait trop bon, trop parfait, trop confit. Il refusait la croix, il donnait des sous Ć  tous les petits drĆ“les qu'il rencontrait. J'ai toujours pensĆ© qu'il y avait lĆ -dessous quelque mauvaise histoire. Ā«Les salonsĀ» surtout abondĆØrent dans ce sens. Une vieille dame, abonnĆ©e au _Drapeau blanc_, fit cette rĆ©flexion dont il est presque impossible de sonder la profondeur: --Je n'en suis pas fĆ¢chĆ©e. Cela apprendra aux buonapartistes! C'est ainsi que ce fantĆ“me qui s'Ć©tait appelĆ© M. Madeleine se dissipa Ć  Montreuil-sur-mer. Trois ou quatre personnes seulement dans toute la ville restĆØrent fidĆØles Ć  cette mĆ©moire. La vieille portiĆØre qui l'avait servi fut du nombre. Le soir de ce mĆŖme jour, cette digne vieille Ć©tait assise dans sa loge, encore tout effarĆ©e et rĆ©flĆ©chissant tristement. La fabrique avait Ć©tĆ© fermĆ©e toute la journĆ©e, la porte cochĆØre Ć©tait verrouillĆ©e, la rue Ć©tait dĆ©serte. Il n'y avait dans la maison que deux religieuses, soeur PerpĆ©tue et soeur Simplice, qui veillaient prĆØs du corps de Fantine. Vers l'heure où M. Madeleine avait coutume de rentrer, la brave portiĆØre se leva machinalement, prit la clef de la chambre de M. Madeleine dans un tiroir et le bougeoir dont il se servait tous les soirs pour monter chez lui, puis elle accrocha la clef au clou où il la prenait d'habitude, et plaƧa le bougeoir Ć  cĆ“tĆ©, comme si elle l'attendait. Ensuite elle se rassit sur sa chaise et se remit Ć  songer. La pauvre bonne vieille avait fait tout cela sans en avoir conscience. Ce ne fut qu'au bout de plus de deux heures qu'elle sortit de sa rĆŖverie et s'Ć©cria: Ā«Tiens! mon bon Dieu JĆ©sus! moi qui ai mis sa clef au clou!Ā» En ce moment la vitre de la loge s'ouvrit, une main passa par l'ouverture, saisit la clef et le bougeoir et alluma la bougie Ć  la chandelle qui brĆ»lait. La portiĆØre leva les yeux et resta bĆ©ante, avec un cri dans le gosier qu'elle retint. Elle connaissait cette main, ce bras, cette manche de redingote. C'Ć©tait M. Madeleine. Elle fut quelques secondes avant de pouvoir parler, saisie, comme elle le disait elle-mĆŖme plus tard en racontant son aventure. --Mon Dieu, monsieur le maire, s'Ć©cria-t-elle enfin, je vous croyais.... Elle s'arrĆŖta, la fin de sa phrase eĆ»t manquĆ© de respect au commencement. Jean Valjean Ć©tait toujours pour elle monsieur le maire. Il acheva sa pensĆ©e. --En prison, dit-il. J'y Ć©tais. J'ai brisĆ© un barreau d'une fenĆŖtre, je me suis laissĆ© tomber du haut d'un toit, et me voici. Je monte Ć  ma chambre, allez me chercher la soeur Simplice. Elle est sans doute prĆØs de cette pauvre femme. La vieille obĆ©it en toute hĆ¢te. Il ne lui fit aucune recommandation; il Ć©tait bien sĆ»r qu'elle le garderait mieux qu'il ne se garderait lui-mĆŖme. On n'a jamais su comment il avait rĆ©ussi Ć  pĆ©nĆ©trer dans la cour sans faire ouvrir la porte cochĆØre. Il avait, et portait toujours sur lui, un passe-partout qui ouvrait une petite porte latĆ©rale; mais on avait dĆ» le fouiller et lui prendre son passe-partout. Ce point n'a pas Ć©tĆ© Ć©clairci. Il monta l'escalier qui conduisait Ć  sa chambre. ArrivĆ© en haut, il laissa son bougeoir sur les derniĆØres marches de l'escalier, ouvrit sa porte avec peu de bruit, et alla fermer Ć  tĆ¢tons sa fenĆŖtre et son volet, puis il revint prendre sa bougie et rentra dans sa chambre. La prĆ©caution Ć©tait utile; on se souvient que sa fenĆŖtre pouvait ĆŖtre aperƧue de la rue. Il jeta un coup d'oeil autour de lui, sur sa table, sur sa chaise, sur son lit qui n'avait pas Ć©tĆ© dĆ©fait depuis trois jours. Il ne restait aucune trace du dĆ©sordre de l'avant-derniĆØre nuit. La portiĆØre avait Ā«fait la chambreĀ». Seulement elle avait ramassĆ© dans les cendres et posĆ© proprement sur la table les deux bouts du bĆ¢ton ferrĆ© et la piĆØce de quarante sous noircie par le feu. Il prit une feuille de papier sur laquelle il Ć©crivit: _Voici les deux bouts de mon bĆ¢ton ferrĆ© et la piĆØce de quarante sous volĆ©e Ć  Petit-Gervais dont j'ai parlĆ© Ć  la cour d'assises_, et il posa sur cette feuille la piĆØce d'argent et les deux morceaux de fer, de faƧon que ce fĆ»t la premiĆØre chose qu'on aperƧƻt en entrant dans la chambre. Il tira d'une armoire une vieille chemise Ć  lui qu'il dĆ©chira. Cela fit quelques morceaux de toile dans lesquels il emballa les deux flambeaux d'argent. Du reste il n'avait ni hĆ¢te ni agitation, et, tout en emballant les chandeliers de l'Ć©vĆŖque, il mordait dans un morceau de pain noir. Il est probable que c'Ć©tait le pain de la prison qu'il avait emportĆ© en s'Ć©vadant. Ceci a Ć©tĆ© constatĆ© par les miettes de pain qui furent trouvĆ©es sur le carreau de la chambre, lorsque la justice plus tard fit une perquisition. On frappa deux petits coups Ć  la porte. --Entrez, dit-il. C'Ć©tait la soeur Simplice. Elle Ć©tait pĆ¢le, elle avait les yeux rouges, la chandelle qu'elle tenait vacillait dans sa main. Les violences de la destinĆ©e ont cela de particulier que, si perfectionnĆ©s ou si refroidis que nous soyons, elles nous tirent du fond des entrailles la nature humaine et la forcent de reparaĆ®tre au dehors. Dans les Ć©motions de cette journĆ©e, la religieuse Ć©tait redevenue femme. Elle avait pleurĆ©, et elle tremblait. Jean Valjean venait d'Ć©crire quelques lignes sur un papier qu'il tendit Ć  la religieuse en disant: --Ma soeur, vous remettrez ceci Ć  monsieur le curĆ©. Le papier Ć©tait dĆ©pliĆ©. Elle y jeta les yeux. --Vous pouvez lire, dit-il. Elle lut.--Ā«Je prie monsieur le curĆ© de veiller sur tout ce que je laisse ici. Il voudra bien payer lĆ -dessus les frais de mon procĆØs et l'enterrement de la femme qui est morte aujourd'hui. Le reste sera aux pauvres.Ā» La soeur voulut parler, mais elle put Ć  peine balbutier quelques sons inarticulĆ©s. Elle parvint cependant Ć  dire: --Est-ce que monsieur le maire ne dĆ©sire pas revoir une derniĆØre fois cette pauvre malheureuse? --Non, dit-il, on est Ć  ma poursuite, on n'aurait qu'Ć  m'arrĆŖter dans sa chambre, cela la troublerait. Il achevait Ć  peine qu'un grand bruit se fit dans l'escalier. Ils entendirent un tumulte de pas qui montaient, et la vieille portiĆØre qui disait de sa voix la plus haute et la plus perƧante: --Mon bon monsieur, je vous jure le bon Dieu qu'il n'est entrĆ© personne ici de toute la journĆ©e ni de toute la soirĆ©e, que mĆŖme je n'ai pas quittĆ© ma porte! Un homme rĆ©pondit: --Cependant il y a de la lumiĆØre dans cette chambre. Ils reconnurent la voix de Javert. La chambre Ć©tait disposĆ©e de faƧon que la porte en s'ouvrant masquait l'angle du mur Ć  droite. Jean Valjean souffla la bougie et se mit dans cet angle. La soeur Simplice tomba Ć  genoux prĆØs de la table. La porte s'ouvrit. Javert entra. On entendait le chuchotement de plusieurs hommes et les protestations de la portiĆØre dans le corridor. La religieuse ne leva pas les yeux. Elle priait. La chandelle Ć©tait sur la cheminĆ©e et ne donnait que peu de clartĆ©. Javert aperƧut la soeur et s'arrĆŖta interdit. On se rappelle que le fond mĆŖme de Javert, son Ć©lĆ©ment, son milieu respirable, c'Ć©tait la vĆ©nĆ©ration de toute autoritĆ©. Il Ć©tait tout d'une piĆØce et n'admettait ni objection, ni restriction. Pour lui, bien entendu, l'autoritĆ© ecclĆ©siastique Ć©tait la premiĆØre de toutes. Il Ć©tait religieux, superficiel et correct sur ce point comme sur tous. ƀ ses yeux un prĆŖtre Ć©tait un esprit qui ne se trompe pas, une religieuse Ć©tait une crĆ©ature qui ne pĆØche pas. C'Ć©taient des Ć¢mes murĆ©es Ć  ce monde avec une seule porte qui ne s'ouvrait jamais que pour laisser sortir la vĆ©ritĆ©. En apercevant la soeur, son premier mouvement fut de se retirer. Cependant il y avait aussi un autre devoir qui le tenait, et qui le poussait impĆ©rieusement en sens inverse. Son second mouvement fut de rester, et de hasarder au moins une question. C'Ć©tait cette soeur Simplice qui n'avait menti de sa vie. Javert le savait, et la vĆ©nĆ©rait particuliĆØrement Ć  cause de cela. --Ma soeur, dit-il, ĆŖtes-vous seule dans cette chambre? Il y eut un moment affreux pendant lequel la pauvre portiĆØre se sentit dĆ©faillir. La soeur leva les yeux et rĆ©pondit: --Oui. --Ainsi, reprit Javert, excusez-moi si j'insiste, c'est mon devoir, vous n'avez pas vu ce soir une personne, un homme. Il s'est Ć©vadĆ©, nous le cherchons, ce nommĆ© Jean Valjean, vous ne l'avez pas vu? La soeur rĆ©pondit: --Non. Elle mentit. Elle mentit deux fois de suite, coup sur coup, sans hĆ©siter, rapidement, comme on se dĆ©voue. --Pardon, dit Javert, et il se retira en saluant profondĆ©ment. Ɣ sainte fille! vous n'ĆŖtes plus de ce monde depuis beaucoup d'annĆ©es; vous avez rejoint dans la lumiĆØre vos soeurs les vierges et vos frĆØres les anges; que ce mensonge vous soit comptĆ© dans le paradis! L'affirmation de la soeur fut pour Javert quelque chose de si dĆ©cisif qu'il ne remarqua mĆŖme pas la singularitĆ© de cette bougie qu'on venait de souffler et qui fumait sur la table. Une heure aprĆØs, un homme, marchant Ć  travers les arbres et les brumes, s'Ć©loignait rapidement de Montreuil-sur-mer dans la direction de Paris. Cet homme Ć©tait Jean Valjean. Il a Ć©tĆ© Ć©tabli, par le tĆ©moignage de deux ou trois rouliers qui l'avaient rencontrĆ©, qu'il portait un paquet et qu'il Ć©tait vĆŖtu d'une blouse. Où avait-il pris cette blouse? On ne l'a jamais su. Cependant un vieux ouvrier Ć©tait mort quelques jours auparavant Ć  l'infirmerie de la fabrique, ne laissant que sa blouse. C'Ć©tait peut-ĆŖtre celle-lĆ . Un dernier mot sur Fantine. Nous avons tous une mĆØre, la terre. On rendit Fantine Ć  cette mĆØre. Le curĆ© crut bien faire, et fit bien peut-ĆŖtre, en rĆ©servant, sur ce que Jean Valjean avait laissĆ©, le plus d'argent possible aux pauvres. AprĆØs tout, de qui s'agissait-il? d'un forƧat et d'une fille publique. C'est pourquoi il simplifia l'enterrement de Fantine, et le rĆ©duisit Ć  ce strict nĆ©cessaire qu'on appelle la fosse commune. Fantine fut donc enterrĆ©e dans ce coin gratis du cimetiĆØre qui est Ć  tous et Ć  personne, et où l'on perd les pauvres. Heureusement Dieu sait où retrouver l'Ć¢me. On coucha Fantine dans les tĆ©nĆØbres parmi les premiers os venus; elle subit la promiscuitĆ© des cendres. Elle fut jetĆ©e Ć  la fosse publique. Sa tombe ressembla Ć  son lit. End of the Project Gutenberg EBook of Les misĆ©rables Tome I, by Victor Hugo *** END OF THIS PROJECT GUTENBERG EBOOK LES MISƉRABLES TOME I *** ***** This file should be named 17489-8.txt or 17489-8.zip ***** This and all associated files of various formats will be found in: http://www.gutenberg.org/1/7/4/8/17489/ Produced by www.ebooksgratuits.com and Chuck Greif Updated editions will replace the previous one--the old editions will be renamed. Creating the works from public domain print editions means that no one owns a United States copyright in these works, so the Foundation (and you!) can copy and distribute it in the United States without permission and without paying copyright royalties. Special rules, set forth in the General Terms of Use part of this license, apply to copying and distributing Project Gutenberg-tm electronic works to protect the PROJECT GUTENBERG-tm concept and trademark. Project Gutenberg is a registered trademark, and may not be used if you charge for the eBooks, unless you receive specific permission. If you do not charge anything for copies of this eBook, complying with the rules is very easy. You may use this eBook for nearly any purpose such as creation of derivative works, reports, performances and research. They may be modified and printed and given away--you may do practically ANYTHING with public domain eBooks. Redistribution is subject to the trademark license, especially commercial redistribution. *** START: FULL LICENSE *** THE FULL PROJECT GUTENBERG LICENSE PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK To protect the Project Gutenberg-tm mission of promoting the free distribution of electronic works, by using or distributing this work (or any other work associated in any way with the phrase "Project Gutenberg"), you agree to comply with all the terms of the Full Project Gutenberg-tm License (available with this file or online at http://gutenberg.org/license). Section 1. General Terms of Use and Redistributing Project Gutenberg-tm electronic works 1.A. By reading or using any part of this Project Gutenberg-tm electronic work, you indicate that you have read, understand, agree to and accept all the terms of this license and intellectual property (trademark/copyright) agreement. If you do not agree to abide by all the terms of this agreement, you must cease using and return or destroy all copies of Project Gutenberg-tm electronic works in your possession. If you paid a fee for obtaining a copy of or access to a Project Gutenberg-tm electronic work and you do not agree to be bound by the terms of this agreement, you may obtain a refund from the person or entity to whom you paid the fee as set forth in paragraph 1.E.8. 1.B. "Project Gutenberg" is a registered trademark. It may only be used on or associated in any way with an electronic work by people who agree to be bound by the terms of this agreement. There are a few things that you can do with most Project Gutenberg-tm electronic works even without complying with the full terms of this agreement. See paragraph 1.C below. There are a lot of things you can do with Project Gutenberg-tm electronic works if you follow the terms of this agreement and help preserve free future access to Project Gutenberg-tm electronic works. See paragraph 1.E below. 1.C. The Project Gutenberg Literary Archive Foundation ("the Foundation" or PGLAF), owns a compilation copyright in the collection of Project Gutenberg-tm electronic works. Nearly all the individual works in the collection are in the public domain in the United States. If an individual work is in the public domain in the United States and you are located in the United States, we do not claim a right to prevent you from copying, distributing, performing, displaying or creating derivative works based on the work as long as all references to Project Gutenberg are removed. Of course, we hope that you will support the Project Gutenberg-tm mission of promoting free access to electronic works by freely sharing Project Gutenberg-tm works in compliance with the terms of this agreement for keeping the Project Gutenberg-tm name associated with the work. You can easily comply with the terms of this agreement by keeping this work in the same format with its attached full Project Gutenberg-tm License when you share it without charge with others. 1.D. The copyright laws of the place where you are located also govern what you can do with this work. Copyright laws in most countries are in a constant state of change. If you are outside the United States, check the laws of your country in addition to the terms of this agreement before downloading, copying, displaying, performing, distributing or creating derivative works based on this work or any other Project Gutenberg-tm work. The Foundation makes no representations concerning the copyright status of any work in any country outside the United States. 1.E. Unless you have removed all references to Project Gutenberg: 1.E.1. The following sentence, with active links to, or other immediate access to, the full Project Gutenberg-tm License must appear prominently whenever any copy of a Project Gutenberg-tm work (any work on which the phrase "Project Gutenberg" appears, or with which the phrase "Project Gutenberg" is associated) is accessed, displayed, performed, viewed, copied or distributed: This eBook is for the use of anyone anywhere at no cost and with almost no restrictions whatsoever. You may copy it, give it away or re-use it under the terms of the Project Gutenberg License included with this eBook or online at www.gutenberg.org 1.E.2. If an individual Project Gutenberg-tm electronic work is derived from the public domain (does not contain a notice indicating that it is posted with permission of the copyright holder), the work can be copied and distributed to anyone in the United States without paying any fees or charges. If you are redistributing or providing access to a work with the phrase "Project Gutenberg" associated with or appearing on the work, you must comply either with the requirements of paragraphs 1.E.1 through 1.E.7 or obtain permission for the use of the work and the Project Gutenberg-tm trademark as set forth in paragraphs 1.E.8 or 1.E.9. 1.E.3. If an individual Project Gutenberg-tm electronic work is posted with the permission of the copyright holder, your use and distribution must comply with both paragraphs 1.E.1 through 1.E.7 and any additional terms imposed by the copyright holder. Additional terms will be linked to the Project Gutenberg-tm License for all works posted with the permission of the copyright holder found at the beginning of this work. 1.E.4. Do not unlink or detach or remove the full Project Gutenberg-tm License terms from this work, or any files containing a part of this work or any other work associated with Project Gutenberg-tm. 1.E.5. Do not copy, display, perform, distribute or redistribute this electronic work, or any part of this electronic work, without prominently displaying the sentence set forth in paragraph 1.E.1 with active links or immediate access to the full terms of the Project Gutenberg-tm License. 1.E.6. You may convert to and distribute this work in any binary, compressed, marked up, nonproprietary or proprietary form, including any word processing or hypertext form. However, if you provide access to or distribute copies of a Project Gutenberg-tm work in a format other than "Plain Vanilla ASCII" or other format used in the official version posted on the official Project Gutenberg-tm web site (www.gutenberg.org), you must, at no additional cost, fee or expense to the user, provide a copy, a means of exporting a copy, or a means of obtaining a copy upon request, of the work in its original "Plain Vanilla ASCII" or other form. Any alternate format must include the full Project Gutenberg-tm License as specified in paragraph 1.E.1. 1.E.7. Do not charge a fee for access to, viewing, displaying, performing, copying or distributing any Project Gutenberg-tm works unless you comply with paragraph 1.E.8 or 1.E.9. 1.E.8. You may charge a reasonable fee for copies of or providing access to or distributing Project Gutenberg-tm electronic works provided that - You pay a royalty fee of 20% of the gross profits you derive from the use of Project Gutenberg-tm works calculated using the method you already use to calculate your applicable taxes. The fee is owed to the owner of the Project Gutenberg-tm trademark, but he has agreed to donate royalties under this paragraph to the Project Gutenberg Literary Archive Foundation. Royalty payments must be paid within 60 days following each date on which you prepare (or are legally required to prepare) your periodic tax returns. Royalty payments should be clearly marked as such and sent to the Project Gutenberg Literary Archive Foundation at the address specified in Section 4, "Information about donations to the Project Gutenberg Literary Archive Foundation." - You provide a full refund of any money paid by a user who notifies you in writing (or by e-mail) within 30 days of receipt that s/he does not agree to the terms of the full Project Gutenberg-tm License. You must require such a user to return or destroy all copies of the works possessed in a physical medium and discontinue all use of and all access to other copies of Project Gutenberg-tm works. - You provide, in accordance with paragraph 1.F.3, a full refund of any money paid for a work or a replacement copy, if a defect in the electronic work is discovered and reported to you within 90 days of receipt of the work. - You comply with all other terms of this agreement for free distribution of Project Gutenberg-tm works. 1.E.9. If you wish to charge a fee or distribute a Project Gutenberg-tm electronic work or group of works on different terms than are set forth in this agreement, you must obtain permission in writing from both the Project Gutenberg Literary Archive Foundation and Michael Hart, the owner of the Project Gutenberg-tm trademark. Contact the Foundation as set forth in Section 3 below. 1.F. 1.F.1. Project Gutenberg volunteers and employees expend considerable effort to identify, do copyright research on, transcribe and proofread public domain works in creating the Project Gutenberg-tm collection. Despite these efforts, Project Gutenberg-tm electronic works, and the medium on which they may be stored, may contain "Defects," such as, but not limited to, incomplete, inaccurate or corrupt data, transcription errors, a copyright or other intellectual property infringement, a defective or damaged disk or other medium, a computer virus, or computer codes that damage or cannot be read by your equipment. 1.F.2. LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for the "Right of Replacement or Refund" described in paragraph 1.F.3, the Project Gutenberg Literary Archive Foundation, the owner of the Project Gutenberg-tm trademark, and any other party distributing a Project Gutenberg-tm electronic work under this agreement, disclaim all liability to you for damages, costs and expenses, including legal fees. YOU AGREE THAT YOU HAVE NO REMEDIES FOR NEGLIGENCE, STRICT LIABILITY, BREACH OF WARRANTY OR BREACH OF CONTRACT EXCEPT THOSE PROVIDED IN PARAGRAPH F3. YOU AGREE THAT THE FOUNDATION, THE TRADEMARK OWNER, AND ANY DISTRIBUTOR UNDER THIS AGREEMENT WILL NOT BE LIABLE TO YOU FOR ACTUAL, DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE OR INCIDENTAL DAMAGES EVEN IF YOU GIVE NOTICE OF THE POSSIBILITY OF SUCH DAMAGE. 1.F.3. LIMITED RIGHT OF REPLACEMENT OR REFUND - If you discover a defect in this electronic work within 90 days of receiving it, you can receive a refund of the money (if any) you paid for it by sending a written explanation to the person you received the work from. If you received the work on a physical medium, you must return the medium with your written explanation. The person or entity that provided you with the defective work may elect to provide a replacement copy in lieu of a refund. If you received the work electronically, the person or entity providing it to you may choose to give you a second opportunity to receive the work electronically in lieu of a refund. If the second copy is also defective, you may demand a refund in writing without further opportunities to fix the problem. 1.F.4. Except for the limited right of replacement or refund set forth in paragraph 1.F.3, this work is provided to you 'AS-IS', WITH NO OTHER WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTIBILITY OR FITNESS FOR ANY PURPOSE. 1.F.5. Some states do not allow disclaimers of certain implied warranties or the exclusion or limitation of certain types of damages. If any disclaimer or limitation set forth in this agreement violates the law of the state applicable to this agreement, the agreement shall be interpreted to make the maximum disclaimer or limitation permitted by the applicable state law. The invalidity or unenforceability of any provision of this agreement shall not void the remaining provisions. 1.F.6. INDEMNITY - You agree to indemnify and hold the Foundation, the trademark owner, any agent or employee of the Foundation, anyone providing copies of Project Gutenberg-tm electronic works in accordance with this agreement, and any volunteers associated with the production, promotion and distribution of Project Gutenberg-tm electronic works, harmless from all liability, costs and expenses, including legal fees, that arise directly or indirectly from any of the following which you do or cause to occur: (a) distribution of this or any Project Gutenberg-tm work, (b) alteration, modification, or additions or deletions to any Project Gutenberg-tm work, and (c) any Defect you cause. Section 2. Information about the Mission of Project Gutenberg-tm Project Gutenberg-tm is synonymous with the free distribution of electronic works in formats readable by the widest variety of computers including obsolete, old, middle-aged and new computers. It exists because of the efforts of hundreds of volunteers and donations from people in all walks of life. Volunteers and financial support to provide volunteers with the assistance they need, is critical to reaching Project Gutenberg-tm's goals and ensuring that the Project Gutenberg-tm collection will remain freely available for generations to come. In 2001, the Project Gutenberg Literary Archive Foundation was created to provide a secure and permanent future for Project Gutenberg-tm and future generations. To learn more about the Project Gutenberg Literary Archive Foundation and how your efforts and donations can help, see Sections 3 and 4 and the Foundation web page at http://www.pglaf.org. Section 3. Information about the Project Gutenberg Literary Archive Foundation The Project Gutenberg Literary Archive Foundation is a non profit 501(c)(3) educational corporation organized under the laws of the state of Mississippi and granted tax exempt status by the Internal Revenue Service. The Foundation's EIN or federal tax identification number is 64-6221541. Its 501(c)(3) letter is posted at http://pglaf.org/fundraising. Contributions to the Project Gutenberg Literary Archive Foundation are tax deductible to the full extent permitted by U.S. federal laws and your state's laws. The Foundation's principal office is located at 4557 Melan Dr. S. Fairbanks, AK, 99712., but its volunteers and employees are scattered throughout numerous locations. Its business office is located at 809 North 1500 West, Salt Lake City, UT 84116, (801) 596-1887, email business@pglaf.org. Email contact links and up to date contact information can be found at the Foundation's web site and official page at http://pglaf.org For additional contact information: Dr. Gregory B. Newby Chief Executive and Director gbnewby@pglaf.org Section 4. Information about Donations to the Project Gutenberg Literary Archive Foundation Project Gutenberg-tm depends upon and cannot survive without wide spread public support and donations to carry out its mission of increasing the number of public domain and licensed works that can be freely distributed in machine readable form accessible by the widest array of equipment including outdated equipment. Many small donations ($1 to $5,000) are particularly important to maintaining tax exempt status with the IRS. The Foundation is committed to complying with the laws regulating charities and charitable donations in all 50 states of the United States. Compliance requirements are not uniform and it takes a considerable effort, much paperwork and many fees to meet and keep up with these requirements. We do not solicit donations in locations where we have not received written confirmation of compliance. To SEND DONATIONS or determine the status of compliance for any particular state visit http://pglaf.org While we cannot and do not solicit contributions from states where we have not met the solicitation requirements, we know of no prohibition against accepting unsolicited donations from donors in such states who approach us with offers to donate. International donations are gratefully accepted, but we cannot make any statements concerning tax treatment of donations received from outside the United States. U.S. laws alone swamp our small staff. Please check the Project Gutenberg Web pages for current donation methods and addresses. Donations are accepted in a number of other ways including checks, online payments and credit card donations. To donate, please visit: http://pglaf.org/donate Section 5. General Information About Project Gutenberg-tm electronic works. Professor Michael S. Hart is the originator of the Project Gutenberg-tm concept of a library of electronic works that could be freely shared with anyone. For thirty years, he produced and distributed Project Gutenberg-tm eBooks with only a loose network of volunteer support. Project Gutenberg-tm eBooks are often created from several printed editions, all of which are confirmed as Public Domain in the U.S. unless a copyright notice is included. Thus, we do not necessarily keep eBooks in compliance with any particular paper edition. Most people start at our Web site which has the main PG search facility: http://www.gutenberg.org This Web site includes information about Project Gutenberg-tm, including how to make donations to the Project Gutenberg Literary Archive Foundation, how to help produce our new eBooks, and how to subscribe to our email newsletter to hear about new eBooks. *** END: FULL LICENSE *** libwebsockets-4.3.5/minimal-examples/api-tests/api-test-fts/main.c000066400000000000000000000110761476025525100251620ustar00rootroot00000000000000/* * lws-api-test-fts - lws full-text search api test * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include #if defined(LWS_HAS_GETOPT_LONG) || defined(WIN32) #include #endif #include #if defined(LWS_HAS_GETOPT_LONG) || defined(WIN32) static struct option options[] = { { "help", no_argument, NULL, 'h' }, { "createindex", no_argument, NULL, 'c' }, { "index", required_argument, NULL, 'i' }, { "debug", required_argument, NULL, 'd' }, { "file", required_argument, NULL, 'f' }, { "lines", required_argument, NULL, 'l' }, { NULL, 0, 0, 0 } }; #endif static const char *index_filepath = "/tmp/lws-fts-test-index"; static char filepath[256]; int main(int argc, char **argv) { int n, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; int fd, fi, ft, createindex = 0, flags = LWSFTS_F_QUERY_AUTOCOMPLETE; struct lws_fts_search_params params; struct lws_fts_result *result; struct lws_fts_file *jtf; struct lws_fts *t; char buf[16384]; do { #if defined(LWS_HAS_GETOPT_LONG) || defined(WIN32) n = getopt_long(argc, argv, "hd:i:cfl", options, NULL); #else n = getopt(argc, argv, "hd:i:cfl"); #endif if (n < 0) continue; switch (n) { case 'i': strncpy(filepath, optarg, sizeof(filepath) - 1); filepath[sizeof(filepath) - 1] = '\0'; index_filepath = filepath; break; case 'd': logs = atoi(optarg); break; case 'c': createindex = 1; break; case 'f': flags &= ~LWSFTS_F_QUERY_AUTOCOMPLETE; flags |= LWSFTS_F_QUERY_FILES; break; case 'l': flags |= LWSFTS_F_QUERY_FILES | LWSFTS_F_QUERY_FILE_LINES; break; case 'h': fprintf(stderr, "Usage: %s [--createindex]" "[--index=] " "[-d ] file1 file2 \n", argv[0]); exit(1); } } while (n >= 0); lws_set_log_level(logs, NULL); lwsl_user("LWS API selftest: full-text search\n"); if (createindex) { lwsl_notice("Creating index\n"); /* * create an index by shifting through argv and indexing each * file given there into a single combined index */ ft = open(index_filepath, O_CREAT | O_WRONLY | O_TRUNC, 0600); if (ft < 0) { lwsl_err("%s: can't open index %s\n", __func__, index_filepath); goto bail; } t = lws_fts_create(ft); if (!t) { lwsl_err("%s: Unable to allocate trie\n", __func__); goto bail1; } while (optind < argc) { fi = lws_fts_file_index(t, argv[optind], (int)strlen(argv[optind]), 1); if (fi < 0) { lwsl_err("%s: Failed to get file idx for %s\n", __func__, argv[optind]); goto bail1; } fd = open(argv[optind], O_RDONLY); if (fd < 0) { lwsl_err("unable to open %s for read\n", argv[optind]); goto bail; } do { int n = (int)read(fd, buf, sizeof(buf)); if (n <= 0) break; if (lws_fts_fill(t, (uint32_t)fi, buf, (size_t)n)) { lwsl_err("%s: lws_fts_fill failed\n", __func__); close(fd); goto bail; } } while (1); close(fd); optind++; } if (lws_fts_serialize(t)) { lwsl_err("%s: serialize failed\n", __func__); goto bail; } lws_fts_destroy(&t); close(ft); return 0; } /* * shift through argv searching for each token */ jtf = lws_fts_open(index_filepath); if (!jtf) goto bail; while (optind < argc) { struct lws_fts_result_autocomplete *ac; struct lws_fts_result_filepath *fp; uint32_t *l, n; memset(¶ms, 0, sizeof(params)); params.needle = argv[optind]; params.flags = flags; params.max_autocomplete = 20; params.max_files = 20; result = lws_fts_search(jtf, ¶ms); if (!result) { lwsl_err("%s: search failed\n", __func__); lws_fts_close(jtf); goto bail; } ac = result->autocomplete_head; fp = result->filepath_head; if (!ac) lwsl_notice("%s: no autocomplete results\n", __func__); while (ac) { lwsl_notice("%s: AC %s: %d agg hits\n", __func__, ((char *)(ac + 1)), ac->instances); ac = ac->next; } if (!fp) lwsl_notice("%s: no filepath results\n", __func__); while (fp) { lwsl_notice("%s: %s: (%d lines) %d hits \n", __func__, (((char *)(fp + 1)) + fp->matches_length), fp->lines_in_file, fp->matches); if (fp->matches_length) { l = (uint32_t *)(fp + 1); n = 0; while ((int)n++ < fp->matches) lwsl_notice(" %d\n", *l++); } fp = fp->next; } lwsac_free(¶ms.results_head); optind++; } lws_fts_close(jtf); return 0; bail1: close(ft); bail: lwsl_user("FAILED\n"); return 1; } libwebsockets-4.3.5/minimal-examples/api-tests/api-test-fts/the-picture-of-dorian-gray.txt000066400000000000000000016063731476025525100317130ustar00rootroot00000000000000The Project Gutenberg EBook of The Picture of Dorian Gray, by Oscar Wilde This eBook is for the use of anyone anywhere at no cost and with almost no restrictions whatsoever. You may copy it, give it away or re-use it under the terms of the Project Gutenberg License included with this eBook or online at www.gutenberg.net Title: The Picture of Dorian Gray Author: Oscar Wilde Release Date: June 9, 2008 [EBook #174] [This file last updated on July 2, 2011] [This file last updated on July 23, 2014] Language: English *** START OF THIS PROJECT GUTENBERG EBOOK THE PICTURE OF DORIAN GRAY *** Produced by Judith Boss. HTML version by Al Haines. The Picture of Dorian Gray by Oscar Wilde THE PREFACE The artist is the creator of beautiful things. To reveal art and conceal the artist is art's aim. The critic is he who can translate into another manner or a new material his impression of beautiful things. The highest as the lowest form of criticism is a mode of autobiography. Those who find ugly meanings in beautiful things are corrupt without being charming. This is a fault. Those who find beautiful meanings in beautiful things are the cultivated. For these there is hope. They are the elect to whom beautiful things mean only beauty. There is no such thing as a moral or an immoral book. Books are well written, or badly written. That is all. The nineteenth century dislike of realism is the rage of Caliban seeing his own face in a glass. The nineteenth century dislike of romanticism is the rage of Caliban not seeing his own face in a glass. The moral life of man forms part of the subject-matter of the artist, but the morality of art consists in the perfect use of an imperfect medium. No artist desires to prove anything. Even things that are true can be proved. No artist has ethical sympathies. An ethical sympathy in an artist is an unpardonable mannerism of style. No artist is ever morbid. The artist can express everything. Thought and language are to the artist instruments of an art. Vice and virtue are to the artist materials for an art. From the point of view of form, the type of all the arts is the art of the musician. From the point of view of feeling, the actor's craft is the type. All art is at once surface and symbol. Those who go beneath the surface do so at their peril. Those who read the symbol do so at their peril. It is the spectator, and not life, that art really mirrors. Diversity of opinion about a work of art shows that the work is new, complex, and vital. When critics disagree, the artist is in accord with himself. We can forgive a man for making a useful thing as long as he does not admire it. The only excuse for making a useless thing is that one admires it intensely. All art is quite useless. OSCAR WILDE CHAPTER 1 The studio was filled with the rich odour of roses, and when the light summer wind stirred amidst the trees of the garden, there came through the open door the heavy scent of the lilac, or the more delicate perfume of the pink-flowering thorn. From the corner of the divan of Persian saddle-bags on which he was lying, smoking, as was his custom, innumerable cigarettes, Lord Henry Wotton could just catch the gleam of the honey-sweet and honey-coloured blossoms of a laburnum, whose tremulous branches seemed hardly able to bear the burden of a beauty so flamelike as theirs; and now and then the fantastic shadows of birds in flight flitted across the long tussore-silk curtains that were stretched in front of the huge window, producing a kind of momentary Japanese effect, and making him think of those pallid, jade-faced painters of Tokyo who, through the medium of an art that is necessarily immobile, seek to convey the sense of swiftness and motion. The sullen murmur of the bees shouldering their way through the long unmown grass, or circling with monotonous insistence round the dusty gilt horns of the straggling woodbine, seemed to make the stillness more oppressive. The dim roar of London was like the bourdon note of a distant organ. In the centre of the room, clamped to an upright easel, stood the full-length portrait of a young man of extraordinary personal beauty, and in front of it, some little distance away, was sitting the artist himself, Basil Hallward, whose sudden disappearance some years ago caused, at the time, such public excitement and gave rise to so many strange conjectures. As the painter looked at the gracious and comely form he had so skilfully mirrored in his art, a smile of pleasure passed across his face, and seemed about to linger there. But he suddenly started up, and closing his eyes, placed his fingers upon the lids, as though he sought to imprison within his brain some curious dream from which he feared he might awake. "It is your best work, Basil, the best thing you have ever done," said Lord Henry languidly. "You must certainly send it next year to the Grosvenor. The Academy is too large and too vulgar. Whenever I have gone there, there have been either so many people that I have not been able to see the pictures, which was dreadful, or so many pictures that I have not been able to see the people, which was worse. The Grosvenor is really the only place." "I don't think I shall send it anywhere," he answered, tossing his head back in that odd way that used to make his friends laugh at him at Oxford. "No, I won't send it anywhere." Lord Henry elevated his eyebrows and looked at him in amazement through the thin blue wreaths of smoke that curled up in such fanciful whorls from his heavy, opium-tainted cigarette. "Not send it anywhere? My dear fellow, why? Have you any reason? What odd chaps you painters are! You do anything in the world to gain a reputation. As soon as you have one, you seem to want to throw it away. It is silly of you, for there is only one thing in the world worse than being talked about, and that is not being talked about. A portrait like this would set you far above all the young men in England, and make the old men quite jealous, if old men are ever capable of any emotion." "I know you will laugh at me," he replied, "but I really can't exhibit it. I have put too much of myself into it." Lord Henry stretched himself out on the divan and laughed. "Yes, I knew you would; but it is quite true, all the same." "Too much of yourself in it! Upon my word, Basil, I didn't know you were so vain; and I really can't see any resemblance between you, with your rugged strong face and your coal-black hair, and this young Adonis, who looks as if he was made out of ivory and rose-leaves. Why, my dear Basil, he is a Narcissus, and you--well, of course you have an intellectual expression and all that. But beauty, real beauty, ends where an intellectual expression begins. Intellect is in itself a mode of exaggeration, and destroys the harmony of any face. The moment one sits down to think, one becomes all nose, or all forehead, or something horrid. Look at the successful men in any of the learned professions. How perfectly hideous they are! Except, of course, in the Church. But then in the Church they don't think. A bishop keeps on saying at the age of eighty what he was told to say when he was a boy of eighteen, and as a natural consequence he always looks absolutely delightful. Your mysterious young friend, whose name you have never told me, but whose picture really fascinates me, never thinks. I feel quite sure of that. He is some brainless beautiful creature who should be always here in winter when we have no flowers to look at, and always here in summer when we want something to chill our intelligence. Don't flatter yourself, Basil: you are not in the least like him." "You don't understand me, Harry," answered the artist. "Of course I am not like him. I know that perfectly well. Indeed, I should be sorry to look like him. You shrug your shoulders? I am telling you the truth. There is a fatality about all physical and intellectual distinction, the sort of fatality that seems to dog through history the faltering steps of kings. It is better not to be different from one's fellows. The ugly and the stupid have the best of it in this world. They can sit at their ease and gape at the play. If they know nothing of victory, they are at least spared the knowledge of defeat. They live as we all should live--undisturbed, indifferent, and without disquiet. They neither bring ruin upon others, nor ever receive it from alien hands. Your rank and wealth, Harry; my brains, such as they are--my art, whatever it may be worth; Dorian Gray's good looks--we shall all suffer for what the gods have given us, suffer terribly." "Dorian Gray? Is that his name?" asked Lord Henry, walking across the studio towards Basil Hallward. "Yes, that is his name. I didn't intend to tell it to you." "But why not?" "Oh, I can't explain. When I like people immensely, I never tell their names to any one. It is like surrendering a part of them. I have grown to love secrecy. It seems to be the one thing that can make modern life mysterious or marvellous to us. The commonest thing is delightful if one only hides it. When I leave town now I never tell my people where I am going. If I did, I would lose all my pleasure. It is a silly habit, I dare say, but somehow it seems to bring a great deal of romance into one's life. I suppose you think me awfully foolish about it?" "Not at all," answered Lord Henry, "not at all, my dear Basil. You seem to forget that I am married, and the one charm of marriage is that it makes a life of deception absolutely necessary for both parties. I never know where my wife is, and my wife never knows what I am doing. When we meet--we do meet occasionally, when we dine out together, or go down to the Duke's--we tell each other the most absurd stories with the most serious faces. My wife is very good at it--much better, in fact, than I am. She never gets confused over her dates, and I always do. But when she does find me out, she makes no row at all. I sometimes wish she would; but she merely laughs at me." "I hate the way you talk about your married life, Harry," said Basil Hallward, strolling towards the door that led into the garden. "I believe that you are really a very good husband, but that you are thoroughly ashamed of your own virtues. You are an extraordinary fellow. You never say a moral thing, and you never do a wrong thing. Your cynicism is simply a pose." "Being natural is simply a pose, and the most irritating pose I know," cried Lord Henry, laughing; and the two young men went out into the garden together and ensconced themselves on a long bamboo seat that stood in the shade of a tall laurel bush. The sunlight slipped over the polished leaves. In the grass, white daisies were tremulous. After a pause, Lord Henry pulled out his watch. "I am afraid I must be going, Basil," he murmured, "and before I go, I insist on your answering a question I put to you some time ago." "What is that?" said the painter, keeping his eyes fixed on the ground. "You know quite well." "I do not, Harry." "Well, I will tell you what it is. I want you to explain to me why you won't exhibit Dorian Gray's picture. I want the real reason." "I told you the real reason." "No, you did not. You said it was because there was too much of yourself in it. Now, that is childish." "Harry," said Basil Hallward, looking him straight in the face, "every portrait that is painted with feeling is a portrait of the artist, not of the sitter. The sitter is merely the accident, the occasion. It is not he who is revealed by the painter; it is rather the painter who, on the coloured canvas, reveals himself. The reason I will not exhibit this picture is that I am afraid that I have shown in it the secret of my own soul." Lord Henry laughed. "And what is that?" he asked. "I will tell you," said Hallward; but an expression of perplexity came over his face. "I am all expectation, Basil," continued his companion, glancing at him. "Oh, there is really very little to tell, Harry," answered the painter; "and I am afraid you will hardly understand it. Perhaps you will hardly believe it." Lord Henry smiled, and leaning down, plucked a pink-petalled daisy from the grass and examined it. "I am quite sure I shall understand it," he replied, gazing intently at the little golden, white-feathered disk, "and as for believing things, I can believe anything, provided that it is quite incredible." The wind shook some blossoms from the trees, and the heavy lilac-blooms, with their clustering stars, moved to and fro in the languid air. A grasshopper began to chirrup by the wall, and like a blue thread a long thin dragon-fly floated past on its brown gauze wings. Lord Henry felt as if he could hear Basil Hallward's heart beating, and wondered what was coming. "The story is simply this," said the painter after some time. "Two months ago I went to a crush at Lady Brandon's. You know we poor artists have to show ourselves in society from time to time, just to remind the public that we are not savages. With an evening coat and a white tie, as you told me once, anybody, even a stock-broker, can gain a reputation for being civilized. Well, after I had been in the room about ten minutes, talking to huge overdressed dowagers and tedious academicians, I suddenly became conscious that some one was looking at me. I turned half-way round and saw Dorian Gray for the first time. When our eyes met, I felt that I was growing pale. A curious sensation of terror came over me. I knew that I had come face to face with some one whose mere personality was so fascinating that, if I allowed it to do so, it would absorb my whole nature, my whole soul, my very art itself. I did not want any external influence in my life. You know yourself, Harry, how independent I am by nature. I have always been my own master; had at least always been so, till I met Dorian Gray. Then--but I don't know how to explain it to you. Something seemed to tell me that I was on the verge of a terrible crisis in my life. I had a strange feeling that fate had in store for me exquisite joys and exquisite sorrows. I grew afraid and turned to quit the room. It was not conscience that made me do so: it was a sort of cowardice. I take no credit to myself for trying to escape." "Conscience and cowardice are really the same things, Basil. Conscience is the trade-name of the firm. That is all." "I don't believe that, Harry, and I don't believe you do either. However, whatever was my motive--and it may have been pride, for I used to be very proud--I certainly struggled to the door. There, of course, I stumbled against Lady Brandon. 'You are not going to run away so soon, Mr. Hallward?' she screamed out. You know her curiously shrill voice?" "Yes; she is a peacock in everything but beauty," said Lord Henry, pulling the daisy to bits with his long nervous fingers. "I could not get rid of her. She brought me up to royalties, and people with stars and garters, and elderly ladies with gigantic tiaras and parrot noses. She spoke of me as her dearest friend. I had only met her once before, but she took it into her head to lionize me. I believe some picture of mine had made a great success at the time, at least had been chattered about in the penny newspapers, which is the nineteenth-century standard of immortality. Suddenly I found myself face to face with the young man whose personality had so strangely stirred me. We were quite close, almost touching. Our eyes met again. It was reckless of me, but I asked Lady Brandon to introduce me to him. Perhaps it was not so reckless, after all. It was simply inevitable. We would have spoken to each other without any introduction. I am sure of that. Dorian told me so afterwards. He, too, felt that we were destined to know each other." "And how did Lady Brandon describe this wonderful young man?" asked his companion. "I know she goes in for giving a rapid _precis_ of all her guests. I remember her bringing me up to a truculent and red-faced old gentleman covered all over with orders and ribbons, and hissing into my ear, in a tragic whisper which must have been perfectly audible to everybody in the room, the most astounding details. I simply fled. I like to find out people for myself. But Lady Brandon treats her guests exactly as an auctioneer treats his goods. She either explains them entirely away, or tells one everything about them except what one wants to know." "Poor Lady Brandon! You are hard on her, Harry!" said Hallward listlessly. "My dear fellow, she tried to found a _salon_, and only succeeded in opening a restaurant. How could I admire her? But tell me, what did she say about Mr. Dorian Gray?" "Oh, something like, 'Charming boy--poor dear mother and I absolutely inseparable. Quite forget what he does--afraid he--doesn't do anything--oh, yes, plays the piano--or is it the violin, dear Mr. Gray?' Neither of us could help laughing, and we became friends at once." "Laughter is not at all a bad beginning for a friendship, and it is far the best ending for one," said the young lord, plucking another daisy. Hallward shook his head. "You don't understand what friendship is, Harry," he murmured--"or what enmity is, for that matter. You like every one; that is to say, you are indifferent to every one." "How horribly unjust of you!" cried Lord Henry, tilting his hat back and looking up at the little clouds that, like ravelled skeins of glossy white silk, were drifting across the hollowed turquoise of the summer sky. "Yes; horribly unjust of you. I make a great difference between people. I choose my friends for their good looks, my acquaintances for their good characters, and my enemies for their good intellects. A man cannot be too careful in the choice of his enemies. I have not got one who is a fool. They are all men of some intellectual power, and consequently they all appreciate me. Is that very vain of me? I think it is rather vain." "I should think it was, Harry. But according to your category I must be merely an acquaintance." "My dear old Basil, you are much more than an acquaintance." "And much less than a friend. A sort of brother, I suppose?" "Oh, brothers! I don't care for brothers. My elder brother won't die, and my younger brothers seem never to do anything else." "Harry!" exclaimed Hallward, frowning. "My dear fellow, I am not quite serious. But I can't help detesting my relations. I suppose it comes from the fact that none of us can stand other people having the same faults as ourselves. I quite sympathize with the rage of the English democracy against what they call the vices of the upper orders. The masses feel that drunkenness, stupidity, and immorality should be their own special property, and that if any one of us makes an ass of himself, he is poaching on their preserves. When poor Southwark got into the divorce court, their indignation was quite magnificent. And yet I don't suppose that ten per cent of the proletariat live correctly." "I don't agree with a single word that you have said, and, what is more, Harry, I feel sure you don't either." Lord Henry stroked his pointed brown beard and tapped the toe of his patent-leather boot with a tasselled ebony cane. "How English you are Basil! That is the second time you have made that observation. If one puts forward an idea to a true Englishman--always a rash thing to do--he never dreams of considering whether the idea is right or wrong. The only thing he considers of any importance is whether one believes it oneself. Now, the value of an idea has nothing whatsoever to do with the sincerity of the man who expresses it. Indeed, the probabilities are that the more insincere the man is, the more purely intellectual will the idea be, as in that case it will not be coloured by either his wants, his desires, or his prejudices. However, I don't propose to discuss politics, sociology, or metaphysics with you. I like persons better than principles, and I like persons with no principles better than anything else in the world. Tell me more about Mr. Dorian Gray. How often do you see him?" "Every day. I couldn't be happy if I didn't see him every day. He is absolutely necessary to me." "How extraordinary! I thought you would never care for anything but your art." "He is all my art to me now," said the painter gravely. "I sometimes think, Harry, that there are only two eras of any importance in the world's history. The first is the appearance of a new medium for art, and the second is the appearance of a new personality for art also. What the invention of oil-painting was to the Venetians, the face of Antinous was to late Greek sculpture, and the face of Dorian Gray will some day be to me. It is not merely that I paint from him, draw from him, sketch from him. Of course, I have done all that. But he is much more to me than a model or a sitter. I won't tell you that I am dissatisfied with what I have done of him, or that his beauty is such that art cannot express it. There is nothing that art cannot express, and I know that the work I have done, since I met Dorian Gray, is good work, is the best work of my life. But in some curious way--I wonder will you understand me?--his personality has suggested to me an entirely new manner in art, an entirely new mode of style. I see things differently, I think of them differently. I can now recreate life in a way that was hidden from me before. 'A dream of form in days of thought'--who is it who says that? I forget; but it is what Dorian Gray has been to me. The merely visible presence of this lad--for he seems to me little more than a lad, though he is really over twenty--his merely visible presence--ah! I wonder can you realize all that that means? Unconsciously he defines for me the lines of a fresh school, a school that is to have in it all the passion of the romantic spirit, all the perfection of the spirit that is Greek. The harmony of soul and body--how much that is! We in our madness have separated the two, and have invented a realism that is vulgar, an ideality that is void. Harry! if you only knew what Dorian Gray is to me! You remember that landscape of mine, for which Agnew offered me such a huge price but which I would not part with? It is one of the best things I have ever done. And why is it so? Because, while I was painting it, Dorian Gray sat beside me. Some subtle influence passed from him to me, and for the first time in my life I saw in the plain woodland the wonder I had always looked for and always missed." "Basil, this is extraordinary! I must see Dorian Gray." Hallward got up from the seat and walked up and down the garden. After some time he came back. "Harry," he said, "Dorian Gray is to me simply a motive in art. You might see nothing in him. I see everything in him. He is never more present in my work than when no image of him is there. He is a suggestion, as I have said, of a new manner. I find him in the curves of certain lines, in the loveliness and subtleties of certain colours. That is all." "Then why won't you exhibit his portrait?" asked Lord Henry. "Because, without intending it, I have put into it some expression of all this curious artistic idolatry, of which, of course, I have never cared to speak to him. He knows nothing about it. He shall never know anything about it. But the world might guess it, and I will not bare my soul to their shallow prying eyes. My heart shall never be put under their microscope. There is too much of myself in the thing, Harry--too much of myself!" "Poets are not so scrupulous as you are. They know how useful passion is for publication. Nowadays a broken heart will run to many editions." "I hate them for it," cried Hallward. "An artist should create beautiful things, but should put nothing of his own life into them. We live in an age when men treat art as if it were meant to be a form of autobiography. We have lost the abstract sense of beauty. Some day I will show the world what it is; and for that reason the world shall never see my portrait of Dorian Gray." "I think you are wrong, Basil, but I won't argue with you. It is only the intellectually lost who ever argue. Tell me, is Dorian Gray very fond of you?" The painter considered for a few moments. "He likes me," he answered after a pause; "I know he likes me. Of course I flatter him dreadfully. I find a strange pleasure in saying things to him that I know I shall be sorry for having said. As a rule, he is charming to me, and we sit in the studio and talk of a thousand things. Now and then, however, he is horribly thoughtless, and seems to take a real delight in giving me pain. Then I feel, Harry, that I have given away my whole soul to some one who treats it as if it were a flower to put in his coat, a bit of decoration to charm his vanity, an ornament for a summer's day." "Days in summer, Basil, are apt to linger," murmured Lord Henry. "Perhaps you will tire sooner than he will. It is a sad thing to think of, but there is no doubt that genius lasts longer than beauty. That accounts for the fact that we all take such pains to over-educate ourselves. In the wild struggle for existence, we want to have something that endures, and so we fill our minds with rubbish and facts, in the silly hope of keeping our place. The thoroughly well-informed man--that is the modern ideal. And the mind of the thoroughly well-informed man is a dreadful thing. It is like a _bric-a-brac_ shop, all monsters and dust, with everything priced above its proper value. I think you will tire first, all the same. Some day you will look at your friend, and he will seem to you to be a little out of drawing, or you won't like his tone of colour, or something. You will bitterly reproach him in your own heart, and seriously think that he has behaved very badly to you. The next time he calls, you will be perfectly cold and indifferent. It will be a great pity, for it will alter you. What you have told me is quite a romance, a romance of art one might call it, and the worst of having a romance of any kind is that it leaves one so unromantic." "Harry, don't talk like that. As long as I live, the personality of Dorian Gray will dominate me. You can't feel what I feel. You change too often." "Ah, my dear Basil, that is exactly why I can feel it. Those who are faithful know only the trivial side of love: it is the faithless who know love's tragedies." And Lord Henry struck a light on a dainty silver case and began to smoke a cigarette with a self-conscious and satisfied air, as if he had summed up the world in a phrase. There was a rustle of chirruping sparrows in the green lacquer leaves of the ivy, and the blue cloud-shadows chased themselves across the grass like swallows. How pleasant it was in the garden! And how delightful other people's emotions were!--much more delightful than their ideas, it seemed to him. One's own soul, and the passions of one's friends--those were the fascinating things in life. He pictured to himself with silent amusement the tedious luncheon that he had missed by staying so long with Basil Hallward. Had he gone to his aunt's, he would have been sure to have met Lord Goodbody there, and the whole conversation would have been about the feeding of the poor and the necessity for model lodging-houses. Each class would have preached the importance of those virtues, for whose exercise there was no necessity in their own lives. The rich would have spoken on the value of thrift, and the idle grown eloquent over the dignity of labour. It was charming to have escaped all that! As he thought of his aunt, an idea seemed to strike him. He turned to Hallward and said, "My dear fellow, I have just remembered." "Remembered what, Harry?" "Where I heard the name of Dorian Gray." "Where was it?" asked Hallward, with a slight frown. "Don't look so angry, Basil. It was at my aunt, Lady Agatha's. She told me she had discovered a wonderful young man who was going to help her in the East End, and that his name was Dorian Gray. I am bound to state that she never told me he was good-looking. Women have no appreciation of good looks; at least, good women have not. She said that he was very earnest and had a beautiful nature. I at once pictured to myself a creature with spectacles and lank hair, horribly freckled, and tramping about on huge feet. I wish I had known it was your friend." "I am very glad you didn't, Harry." "Why?" "I don't want you to meet him." "You don't want me to meet him?" "No." "Mr. Dorian Gray is in the studio, sir," said the butler, coming into the garden. "You must introduce me now," cried Lord Henry, laughing. The painter turned to his servant, who stood blinking in the sunlight. "Ask Mr. Gray to wait, Parker: I shall be in in a few moments." The man bowed and went up the walk. Then he looked at Lord Henry. "Dorian Gray is my dearest friend," he said. "He has a simple and a beautiful nature. Your aunt was quite right in what she said of him. Don't spoil him. Don't try to influence him. Your influence would be bad. The world is wide, and has many marvellous people in it. Don't take away from me the one person who gives to my art whatever charm it possesses: my life as an artist depends on him. Mind, Harry, I trust you." He spoke very slowly, and the words seemed wrung out of him almost against his will. "What nonsense you talk!" said Lord Henry, smiling, and taking Hallward by the arm, he almost led him into the house. CHAPTER 2 As they entered they saw Dorian Gray. He was seated at the piano, with his back to them, turning over the pages of a volume of Schumann's "Forest Scenes." "You must lend me these, Basil," he cried. "I want to learn them. They are perfectly charming." "That entirely depends on how you sit to-day, Dorian." "Oh, I am tired of sitting, and I don't want a life-sized portrait of myself," answered the lad, swinging round on the music-stool in a wilful, petulant manner. When he caught sight of Lord Henry, a faint blush coloured his cheeks for a moment, and he started up. "I beg your pardon, Basil, but I didn't know you had any one with you." "This is Lord Henry Wotton, Dorian, an old Oxford friend of mine. I have just been telling him what a capital sitter you were, and now you have spoiled everything." "You have not spoiled my pleasure in meeting you, Mr. Gray," said Lord Henry, stepping forward and extending his hand. "My aunt has often spoken to me about you. You are one of her favourites, and, I am afraid, one of her victims also." "I am in Lady Agatha's black books at present," answered Dorian with a funny look of penitence. "I promised to go to a club in Whitechapel with her last Tuesday, and I really forgot all about it. We were to have played a duet together--three duets, I believe. I don't know what she will say to me. I am far too frightened to call." "Oh, I will make your peace with my aunt. She is quite devoted to you. And I don't think it really matters about your not being there. The audience probably thought it was a duet. When Aunt Agatha sits down to the piano, she makes quite enough noise for two people." "That is very horrid to her, and not very nice to me," answered Dorian, laughing. Lord Henry looked at him. Yes, he was certainly wonderfully handsome, with his finely curved scarlet lips, his frank blue eyes, his crisp gold hair. There was something in his face that made one trust him at once. All the candour of youth was there, as well as all youth's passionate purity. One felt that he had kept himself unspotted from the world. No wonder Basil Hallward worshipped him. "You are too charming to go in for philanthropy, Mr. Gray--far too charming." And Lord Henry flung himself down on the divan and opened his cigarette-case. The painter had been busy mixing his colours and getting his brushes ready. He was looking worried, and when he heard Lord Henry's last remark, he glanced at him, hesitated for a moment, and then said, "Harry, I want to finish this picture to-day. Would you think it awfully rude of me if I asked you to go away?" Lord Henry smiled and looked at Dorian Gray. "Am I to go, Mr. Gray?" he asked. "Oh, please don't, Lord Henry. I see that Basil is in one of his sulky moods, and I can't bear him when he sulks. Besides, I want you to tell me why I should not go in for philanthropy." "I don't know that I shall tell you that, Mr. Gray. It is so tedious a subject that one would have to talk seriously about it. But I certainly shall not run away, now that you have asked me to stop. You don't really mind, Basil, do you? You have often told me that you liked your sitters to have some one to chat to." Hallward bit his lip. "If Dorian wishes it, of course you must stay. Dorian's whims are laws to everybody, except himself." Lord Henry took up his hat and gloves. "You are very pressing, Basil, but I am afraid I must go. I have promised to meet a man at the Orleans. Good-bye, Mr. Gray. Come and see me some afternoon in Curzon Street. I am nearly always at home at five o'clock. Write to me when you are coming. I should be sorry to miss you." "Basil," cried Dorian Gray, "if Lord Henry Wotton goes, I shall go, too. You never open your lips while you are painting, and it is horribly dull standing on a platform and trying to look pleasant. Ask him to stay. I insist upon it." "Stay, Harry, to oblige Dorian, and to oblige me," said Hallward, gazing intently at his picture. "It is quite true, I never talk when I am working, and never listen either, and it must be dreadfully tedious for my unfortunate sitters. I beg you to stay." "But what about my man at the Orleans?" The painter laughed. "I don't think there will be any difficulty about that. Sit down again, Harry. And now, Dorian, get up on the platform, and don't move about too much, or pay any attention to what Lord Henry says. He has a very bad influence over all his friends, with the single exception of myself." Dorian Gray stepped up on the dais with the air of a young Greek martyr, and made a little _moue_ of discontent to Lord Henry, to whom he had rather taken a fancy. He was so unlike Basil. They made a delightful contrast. And he had such a beautiful voice. After a few moments he said to him, "Have you really a very bad influence, Lord Henry? As bad as Basil says?" "There is no such thing as a good influence, Mr. Gray. All influence is immoral--immoral from the scientific point of view." "Why?" "Because to influence a person is to give him one's own soul. He does not think his natural thoughts, or burn with his natural passions. His virtues are not real to him. His sins, if there are such things as sins, are borrowed. He becomes an echo of some one else's music, an actor of a part that has not been written for him. The aim of life is self-development. To realize one's nature perfectly--that is what each of us is here for. People are afraid of themselves, nowadays. They have forgotten the highest of all duties, the duty that one owes to one's self. Of course, they are charitable. They feed the hungry and clothe the beggar. But their own souls starve, and are naked. Courage has gone out of our race. Perhaps we never really had it. The terror of society, which is the basis of morals, the terror of God, which is the secret of religion--these are the two things that govern us. And yet--" "Just turn your head a little more to the right, Dorian, like a good boy," said the painter, deep in his work and conscious only that a look had come into the lad's face that he had never seen there before. "And yet," continued Lord Henry, in his low, musical voice, and with that graceful wave of the hand that was always so characteristic of him, and that he had even in his Eton days, "I believe that if one man were to live out his life fully and completely, were to give form to every feeling, expression to every thought, reality to every dream--I believe that the world would gain such a fresh impulse of joy that we would forget all the maladies of mediaevalism, and return to the Hellenic ideal--to something finer, richer than the Hellenic ideal, it may be. But the bravest man amongst us is afraid of himself. The mutilation of the savage has its tragic survival in the self-denial that mars our lives. We are punished for our refusals. Every impulse that we strive to strangle broods in the mind and poisons us. The body sins once, and has done with its sin, for action is a mode of purification. Nothing remains then but the recollection of a pleasure, or the luxury of a regret. The only way to get rid of a temptation is to yield to it. Resist it, and your soul grows sick with longing for the things it has forbidden to itself, with desire for what its monstrous laws have made monstrous and unlawful. It has been said that the great events of the world take place in the brain. It is in the brain, and the brain only, that the great sins of the world take place also. You, Mr. Gray, you yourself, with your rose-red youth and your rose-white boyhood, you have had passions that have made you afraid, thoughts that have filled you with terror, day-dreams and sleeping dreams whose mere memory might stain your cheek with shame--" "Stop!" faltered Dorian Gray, "stop! you bewilder me. I don't know what to say. There is some answer to you, but I cannot find it. Don't speak. Let me think. Or, rather, let me try not to think." For nearly ten minutes he stood there, motionless, with parted lips and eyes strangely bright. He was dimly conscious that entirely fresh influences were at work within him. Yet they seemed to him to have come really from himself. The few words that Basil's friend had said to him--words spoken by chance, no doubt, and with wilful paradox in them--had touched some secret chord that had never been touched before, but that he felt was now vibrating and throbbing to curious pulses. Music had stirred him like that. Music had troubled him many times. But music was not articulate. It was not a new world, but rather another chaos, that it created in us. Words! Mere words! How terrible they were! How clear, and vivid, and cruel! One could not escape from them. And yet what a subtle magic there was in them! They seemed to be able to give a plastic form to formless things, and to have a music of their own as sweet as that of viol or of lute. Mere words! Was there anything so real as words? Yes; there had been things in his boyhood that he had not understood. He understood them now. Life suddenly became fiery-coloured to him. It seemed to him that he had been walking in fire. Why had he not known it? With his subtle smile, Lord Henry watched him. He knew the precise psychological moment when to say nothing. He felt intensely interested. He was amazed at the sudden impression that his words had produced, and, remembering a book that he had read when he was sixteen, a book which had revealed to him much that he had not known before, he wondered whether Dorian Gray was passing through a similar experience. He had merely shot an arrow into the air. Had it hit the mark? How fascinating the lad was! Hallward painted away with that marvellous bold touch of his, that had the true refinement and perfect delicacy that in art, at any rate comes only from strength. He was unconscious of the silence. "Basil, I am tired of standing," cried Dorian Gray suddenly. "I must go out and sit in the garden. The air is stifling here." "My dear fellow, I am so sorry. When I am painting, I can't think of anything else. But you never sat better. You were perfectly still. And I have caught the effect I wanted--the half-parted lips and the bright look in the eyes. I don't know what Harry has been saying to you, but he has certainly made you have the most wonderful expression. I suppose he has been paying you compliments. You mustn't believe a word that he says." "He has certainly not been paying me compliments. Perhaps that is the reason that I don't believe anything he has told me." "You know you believe it all," said Lord Henry, looking at him with his dreamy languorous eyes. "I will go out to the garden with you. It is horribly hot in the studio. Basil, let us have something iced to drink, something with strawberries in it." "Certainly, Harry. Just touch the bell, and when Parker comes I will tell him what you want. I have got to work up this background, so I will join you later on. Don't keep Dorian too long. I have never been in better form for painting than I am to-day. This is going to be my masterpiece. It is my masterpiece as it stands." Lord Henry went out to the garden and found Dorian Gray burying his face in the great cool lilac-blossoms, feverishly drinking in their perfume as if it had been wine. He came close to him and put his hand upon his shoulder. "You are quite right to do that," he murmured. "Nothing can cure the soul but the senses, just as nothing can cure the senses but the soul." The lad started and drew back. He was bareheaded, and the leaves had tossed his rebellious curls and tangled all their gilded threads. There was a look of fear in his eyes, such as people have when they are suddenly awakened. His finely chiselled nostrils quivered, and some hidden nerve shook the scarlet of his lips and left them trembling. "Yes," continued Lord Henry, "that is one of the great secrets of life--to cure the soul by means of the senses, and the senses by means of the soul. You are a wonderful creation. You know more than you think you know, just as you know less than you want to know." Dorian Gray frowned and turned his head away. He could not help liking the tall, graceful young man who was standing by him. His romantic, olive-coloured face and worn expression interested him. There was something in his low languid voice that was absolutely fascinating. His cool, white, flowerlike hands, even, had a curious charm. They moved, as he spoke, like music, and seemed to have a language of their own. But he felt afraid of him, and ashamed of being afraid. Why had it been left for a stranger to reveal him to himself? He had known Basil Hallward for months, but the friendship between them had never altered him. Suddenly there had come some one across his life who seemed to have disclosed to him life's mystery. And, yet, what was there to be afraid of? He was not a schoolboy or a girl. It was absurd to be frightened. "Let us go and sit in the shade," said Lord Henry. "Parker has brought out the drinks, and if you stay any longer in this glare, you will be quite spoiled, and Basil will never paint you again. You really must not allow yourself to become sunburnt. It would be unbecoming." "What can it matter?" cried Dorian Gray, laughing, as he sat down on the seat at the end of the garden. "It should matter everything to you, Mr. Gray." "Why?" "Because you have the most marvellous youth, and youth is the one thing worth having." "I don't feel that, Lord Henry." "No, you don't feel it now. Some day, when you are old and wrinkled and ugly, when thought has seared your forehead with its lines, and passion branded your lips with its hideous fires, you will feel it, you will feel it terribly. Now, wherever you go, you charm the world. Will it always be so? ... You have a wonderfully beautiful face, Mr. Gray. Don't frown. You have. And beauty is a form of genius--is higher, indeed, than genius, as it needs no explanation. It is of the great facts of the world, like sunlight, or spring-time, or the reflection in dark waters of that silver shell we call the moon. It cannot be questioned. It has its divine right of sovereignty. It makes princes of those who have it. You smile? Ah! when you have lost it you won't smile.... People say sometimes that beauty is only superficial. That may be so, but at least it is not so superficial as thought is. To me, beauty is the wonder of wonders. It is only shallow people who do not judge by appearances. The true mystery of the world is the visible, not the invisible.... Yes, Mr. Gray, the gods have been good to you. But what the gods give they quickly take away. You have only a few years in which to live really, perfectly, and fully. When your youth goes, your beauty will go with it, and then you will suddenly discover that there are no triumphs left for you, or have to content yourself with those mean triumphs that the memory of your past will make more bitter than defeats. Every month as it wanes brings you nearer to something dreadful. Time is jealous of you, and wars against your lilies and your roses. You will become sallow, and hollow-cheeked, and dull-eyed. You will suffer horribly.... Ah! realize your youth while you have it. Don't squander the gold of your days, listening to the tedious, trying to improve the hopeless failure, or giving away your life to the ignorant, the common, and the vulgar. These are the sickly aims, the false ideals, of our age. Live! Live the wonderful life that is in you! Let nothing be lost upon you. Be always searching for new sensations. Be afraid of nothing.... A new Hedonism--that is what our century wants. You might be its visible symbol. With your personality there is nothing you could not do. The world belongs to you for a season.... The moment I met you I saw that you were quite unconscious of what you really are, of what you really might be. There was so much in you that charmed me that I felt I must tell you something about yourself. I thought how tragic it would be if you were wasted. For there is such a little time that your youth will last--such a little time. The common hill-flowers wither, but they blossom again. The laburnum will be as yellow next June as it is now. In a month there will be purple stars on the clematis, and year after year the green night of its leaves will hold its purple stars. But we never get back our youth. The pulse of joy that beats in us at twenty becomes sluggish. Our limbs fail, our senses rot. We degenerate into hideous puppets, haunted by the memory of the passions of which we were too much afraid, and the exquisite temptations that we had not the courage to yield to. Youth! Youth! There is absolutely nothing in the world but youth!" Dorian Gray listened, open-eyed and wondering. The spray of lilac fell from his hand upon the gravel. A furry bee came and buzzed round it for a moment. Then it began to scramble all over the oval stellated globe of the tiny blossoms. He watched it with that strange interest in trivial things that we try to develop when things of high import make us afraid, or when we are stirred by some new emotion for which we cannot find expression, or when some thought that terrifies us lays sudden siege to the brain and calls on us to yield. After a time the bee flew away. He saw it creeping into the stained trumpet of a Tyrian convolvulus. The flower seemed to quiver, and then swayed gently to and fro. Suddenly the painter appeared at the door of the studio and made staccato signs for them to come in. They turned to each other and smiled. "I am waiting," he cried. "Do come in. The light is quite perfect, and you can bring your drinks." They rose up and sauntered down the walk together. Two green-and-white butterflies fluttered past them, and in the pear-tree at the corner of the garden a thrush began to sing. "You are glad you have met me, Mr. Gray," said Lord Henry, looking at him. "Yes, I am glad now. I wonder shall I always be glad?" "Always! That is a dreadful word. It makes me shudder when I hear it. Women are so fond of using it. They spoil every romance by trying to make it last for ever. It is a meaningless word, too. The only difference between a caprice and a lifelong passion is that the caprice lasts a little longer." As they entered the studio, Dorian Gray put his hand upon Lord Henry's arm. "In that case, let our friendship be a caprice," he murmured, flushing at his own boldness, then stepped up on the platform and resumed his pose. Lord Henry flung himself into a large wicker arm-chair and watched him. The sweep and dash of the brush on the canvas made the only sound that broke the stillness, except when, now and then, Hallward stepped back to look at his work from a distance. In the slanting beams that streamed through the open doorway the dust danced and was golden. The heavy scent of the roses seemed to brood over everything. After about a quarter of an hour Hallward stopped painting, looked for a long time at Dorian Gray, and then for a long time at the picture, biting the end of one of his huge brushes and frowning. "It is quite finished," he cried at last, and stooping down he wrote his name in long vermilion letters on the left-hand corner of the canvas. Lord Henry came over and examined the picture. It was certainly a wonderful work of art, and a wonderful likeness as well. "My dear fellow, I congratulate you most warmly," he said. "It is the finest portrait of modern times. Mr. Gray, come over and look at yourself." The lad started, as if awakened from some dream. "Is it really finished?" he murmured, stepping down from the platform. "Quite finished," said the painter. "And you have sat splendidly to-day. I am awfully obliged to you." "That is entirely due to me," broke in Lord Henry. "Isn't it, Mr. Gray?" Dorian made no answer, but passed listlessly in front of his picture and turned towards it. When he saw it he drew back, and his cheeks flushed for a moment with pleasure. A look of joy came into his eyes, as if he had recognized himself for the first time. He stood there motionless and in wonder, dimly conscious that Hallward was speaking to him, but not catching the meaning of his words. The sense of his own beauty came on him like a revelation. He had never felt it before. Basil Hallward's compliments had seemed to him to be merely the charming exaggeration of friendship. He had listened to them, laughed at them, forgotten them. They had not influenced his nature. Then had come Lord Henry Wotton with his strange panegyric on youth, his terrible warning of its brevity. That had stirred him at the time, and now, as he stood gazing at the shadow of his own loveliness, the full reality of the description flashed across him. Yes, there would be a day when his face would be wrinkled and wizen, his eyes dim and colourless, the grace of his figure broken and deformed. The scarlet would pass away from his lips and the gold steal from his hair. The life that was to make his soul would mar his body. He would become dreadful, hideous, and uncouth. As he thought of it, a sharp pang of pain struck through him like a knife and made each delicate fibre of his nature quiver. His eyes deepened into amethyst, and across them came a mist of tears. He felt as if a hand of ice had been laid upon his heart. "Don't you like it?" cried Hallward at last, stung a little by the lad's silence, not understanding what it meant. "Of course he likes it," said Lord Henry. "Who wouldn't like it? It is one of the greatest things in modern art. I will give you anything you like to ask for it. I must have it." "It is not my property, Harry." "Whose property is it?" "Dorian's, of course," answered the painter. "He is a very lucky fellow." "How sad it is!" murmured Dorian Gray with his eyes still fixed upon his own portrait. "How sad it is! I shall grow old, and horrible, and dreadful. But this picture will remain always young. It will never be older than this particular day of June.... If it were only the other way! If it were I who was to be always young, and the picture that was to grow old! For that--for that--I would give everything! Yes, there is nothing in the whole world I would not give! I would give my soul for that!" "You would hardly care for such an arrangement, Basil," cried Lord Henry, laughing. "It would be rather hard lines on your work." "I should object very strongly, Harry," said Hallward. Dorian Gray turned and looked at him. "I believe you would, Basil. You like your art better than your friends. I am no more to you than a green bronze figure. Hardly as much, I dare say." The painter stared in amazement. It was so unlike Dorian to speak like that. What had happened? He seemed quite angry. His face was flushed and his cheeks burning. "Yes," he continued, "I am less to you than your ivory Hermes or your silver Faun. You will like them always. How long will you like me? Till I have my first wrinkle, I suppose. I know, now, that when one loses one's good looks, whatever they may be, one loses everything. Your picture has taught me that. Lord Henry Wotton is perfectly right. Youth is the only thing worth having. When I find that I am growing old, I shall kill myself." Hallward turned pale and caught his hand. "Dorian! Dorian!" he cried, "don't talk like that. I have never had such a friend as you, and I shall never have such another. You are not jealous of material things, are you?--you who are finer than any of them!" "I am jealous of everything whose beauty does not die. I am jealous of the portrait you have painted of me. Why should it keep what I must lose? Every moment that passes takes something from me and gives something to it. Oh, if it were only the other way! If the picture could change, and I could be always what I am now! Why did you paint it? It will mock me some day--mock me horribly!" The hot tears welled into his eyes; he tore his hand away and, flinging himself on the divan, he buried his face in the cushions, as though he was praying. "This is your doing, Harry," said the painter bitterly. Lord Henry shrugged his shoulders. "It is the real Dorian Gray--that is all." "It is not." "If it is not, what have I to do with it?" "You should have gone away when I asked you," he muttered. "I stayed when you asked me," was Lord Henry's answer. "Harry, I can't quarrel with my two best friends at once, but between you both you have made me hate the finest piece of work I have ever done, and I will destroy it. What is it but canvas and colour? I will not let it come across our three lives and mar them." Dorian Gray lifted his golden head from the pillow, and with pallid face and tear-stained eyes, looked at him as he walked over to the deal painting-table that was set beneath the high curtained window. What was he doing there? His fingers were straying about among the litter of tin tubes and dry brushes, seeking for something. Yes, it was for the long palette-knife, with its thin blade of lithe steel. He had found it at last. He was going to rip up the canvas. With a stifled sob the lad leaped from the couch, and, rushing over to Hallward, tore the knife out of his hand, and flung it to the end of the studio. "Don't, Basil, don't!" he cried. "It would be murder!" "I am glad you appreciate my work at last, Dorian," said the painter coldly when he had recovered from his surprise. "I never thought you would." "Appreciate it? I am in love with it, Basil. It is part of myself. I feel that." "Well, as soon as you are dry, you shall be varnished, and framed, and sent home. Then you can do what you like with yourself." And he walked across the room and rang the bell for tea. "You will have tea, of course, Dorian? And so will you, Harry? Or do you object to such simple pleasures?" "I adore simple pleasures," said Lord Henry. "They are the last refuge of the complex. But I don't like scenes, except on the stage. What absurd fellows you are, both of you! I wonder who it was defined man as a rational animal. It was the most premature definition ever given. Man is many things, but he is not rational. I am glad he is not, after all--though I wish you chaps would not squabble over the picture. You had much better let me have it, Basil. This silly boy doesn't really want it, and I really do." "If you let any one have it but me, Basil, I shall never forgive you!" cried Dorian Gray; "and I don't allow people to call me a silly boy." "You know the picture is yours, Dorian. I gave it to you before it existed." "And you know you have been a little silly, Mr. Gray, and that you don't really object to being reminded that you are extremely young." "I should have objected very strongly this morning, Lord Henry." "Ah! this morning! You have lived since then." There came a knock at the door, and the butler entered with a laden tea-tray and set it down upon a small Japanese table. There was a rattle of cups and saucers and the hissing of a fluted Georgian urn. Two globe-shaped china dishes were brought in by a page. Dorian Gray went over and poured out the tea. The two men sauntered languidly to the table and examined what was under the covers. "Let us go to the theatre to-night," said Lord Henry. "There is sure to be something on, somewhere. I have promised to dine at White's, but it is only with an old friend, so I can send him a wire to say that I am ill, or that I am prevented from coming in consequence of a subsequent engagement. I think that would be a rather nice excuse: it would have all the surprise of candour." "It is such a bore putting on one's dress-clothes," muttered Hallward. "And, when one has them on, they are so horrid." "Yes," answered Lord Henry dreamily, "the costume of the nineteenth century is detestable. It is so sombre, so depressing. Sin is the only real colour-element left in modern life." "You really must not say things like that before Dorian, Harry." "Before which Dorian? The one who is pouring out tea for us, or the one in the picture?" "Before either." "I should like to come to the theatre with you, Lord Henry," said the lad. "Then you shall come; and you will come, too, Basil, won't you?" "I can't, really. I would sooner not. I have a lot of work to do." "Well, then, you and I will go alone, Mr. Gray." "I should like that awfully." The painter bit his lip and walked over, cup in hand, to the picture. "I shall stay with the real Dorian," he said, sadly. "Is it the real Dorian?" cried the original of the portrait, strolling across to him. "Am I really like that?" "Yes; you are just like that." "How wonderful, Basil!" "At least you are like it in appearance. But it will never alter," sighed Hallward. "That is something." "What a fuss people make about fidelity!" exclaimed Lord Henry. "Why, even in love it is purely a question for physiology. It has nothing to do with our own will. Young men want to be faithful, and are not; old men want to be faithless, and cannot: that is all one can say." "Don't go to the theatre to-night, Dorian," said Hallward. "Stop and dine with me." "I can't, Basil." "Why?" "Because I have promised Lord Henry Wotton to go with him." "He won't like you the better for keeping your promises. He always breaks his own. I beg you not to go." Dorian Gray laughed and shook his head. "I entreat you." The lad hesitated, and looked over at Lord Henry, who was watching them from the tea-table with an amused smile. "I must go, Basil," he answered. "Very well," said Hallward, and he went over and laid down his cup on the tray. "It is rather late, and, as you have to dress, you had better lose no time. Good-bye, Harry. Good-bye, Dorian. Come and see me soon. Come to-morrow." "Certainly." "You won't forget?" "No, of course not," cried Dorian. "And ... Harry!" "Yes, Basil?" "Remember what I asked you, when we were in the garden this morning." "I have forgotten it." "I trust you." "I wish I could trust myself," said Lord Henry, laughing. "Come, Mr. Gray, my hansom is outside, and I can drop you at your own place. Good-bye, Basil. It has been a most interesting afternoon." As the door closed behind them, the painter flung himself down on a sofa, and a look of pain came into his face. CHAPTER 3 At half-past twelve next day Lord Henry Wotton strolled from Curzon Street over to the Albany to call on his uncle, Lord Fermor, a genial if somewhat rough-mannered old bachelor, whom the outside world called selfish because it derived no particular benefit from him, but who was considered generous by Society as he fed the people who amused him. His father had been our ambassador at Madrid when Isabella was young and Prim unthought of, but had retired from the diplomatic service in a capricious moment of annoyance on not being offered the Embassy at Paris, a post to which he considered that he was fully entitled by reason of his birth, his indolence, the good English of his dispatches, and his inordinate passion for pleasure. The son, who had been his father's secretary, had resigned along with his chief, somewhat foolishly as was thought at the time, and on succeeding some months later to the title, had set himself to the serious study of the great aristocratic art of doing absolutely nothing. He had two large town houses, but preferred to live in chambers as it was less trouble, and took most of his meals at his club. He paid some attention to the management of his collieries in the Midland counties, excusing himself for this taint of industry on the ground that the one advantage of having coal was that it enabled a gentleman to afford the decency of burning wood on his own hearth. In politics he was a Tory, except when the Tories were in office, during which period he roundly abused them for being a pack of Radicals. He was a hero to his valet, who bullied him, and a terror to most of his relations, whom he bullied in turn. Only England could have produced him, and he always said that the country was going to the dogs. His principles were out of date, but there was a good deal to be said for his prejudices. When Lord Henry entered the room, he found his uncle sitting in a rough shooting-coat, smoking a cheroot and grumbling over _The Times_. "Well, Harry," said the old gentleman, "what brings you out so early? I thought you dandies never got up till two, and were not visible till five." "Pure family affection, I assure you, Uncle George. I want to get something out of you." "Money, I suppose," said Lord Fermor, making a wry face. "Well, sit down and tell me all about it. Young people, nowadays, imagine that money is everything." "Yes," murmured Lord Henry, settling his button-hole in his coat; "and when they grow older they know it. But I don't want money. It is only people who pay their bills who want that, Uncle George, and I never pay mine. Credit is the capital of a younger son, and one lives charmingly upon it. Besides, I always deal with Dartmoor's tradesmen, and consequently they never bother me. What I want is information: not useful information, of course; useless information." "Well, I can tell you anything that is in an English Blue Book, Harry, although those fellows nowadays write a lot of nonsense. When I was in the Diplomatic, things were much better. But I hear they let them in now by examination. What can you expect? Examinations, sir, are pure humbug from beginning to end. If a man is a gentleman, he knows quite enough, and if he is not a gentleman, whatever he knows is bad for him." "Mr. Dorian Gray does not belong to Blue Books, Uncle George," said Lord Henry languidly. "Mr. Dorian Gray? Who is he?" asked Lord Fermor, knitting his bushy white eyebrows. "That is what I have come to learn, Uncle George. Or rather, I know who he is. He is the last Lord Kelso's grandson. His mother was a Devereux, Lady Margaret Devereux. I want you to tell me about his mother. What was she like? Whom did she marry? You have known nearly everybody in your time, so you might have known her. I am very much interested in Mr. Gray at present. I have only just met him." "Kelso's grandson!" echoed the old gentleman. "Kelso's grandson! ... Of course.... I knew his mother intimately. I believe I was at her christening. She was an extraordinarily beautiful girl, Margaret Devereux, and made all the men frantic by running away with a penniless young fellow--a mere nobody, sir, a subaltern in a foot regiment, or something of that kind. Certainly. I remember the whole thing as if it happened yesterday. The poor chap was killed in a duel at Spa a few months after the marriage. There was an ugly story about it. They said Kelso got some rascally adventurer, some Belgian brute, to insult his son-in-law in public--paid him, sir, to do it, paid him--and that the fellow spitted his man as if he had been a pigeon. The thing was hushed up, but, egad, Kelso ate his chop alone at the club for some time afterwards. He brought his daughter back with him, I was told, and she never spoke to him again. Oh, yes; it was a bad business. The girl died, too, died within a year. So she left a son, did she? I had forgotten that. What sort of boy is he? If he is like his mother, he must be a good-looking chap." "He is very good-looking," assented Lord Henry. "I hope he will fall into proper hands," continued the old man. "He should have a pot of money waiting for him if Kelso did the right thing by him. His mother had money, too. All the Selby property came to her, through her grandfather. Her grandfather hated Kelso, thought him a mean dog. He was, too. Came to Madrid once when I was there. Egad, I was ashamed of him. The Queen used to ask me about the English noble who was always quarrelling with the cabmen about their fares. They made quite a story of it. I didn't dare show my face at Court for a month. I hope he treated his grandson better than he did the jarvies." "I don't know," answered Lord Henry. "I fancy that the boy will be well off. He is not of age yet. He has Selby, I know. He told me so. And ... his mother was very beautiful?" "Margaret Devereux was one of the loveliest creatures I ever saw, Harry. What on earth induced her to behave as she did, I never could understand. She could have married anybody she chose. Carlington was mad after her. She was romantic, though. All the women of that family were. The men were a poor lot, but, egad! the women were wonderful. Carlington went on his knees to her. Told me so himself. She laughed at him, and there wasn't a girl in London at the time who wasn't after him. And by the way, Harry, talking about silly marriages, what is this humbug your father tells me about Dartmoor wanting to marry an American? Ain't English girls good enough for him?" "It is rather fashionable to marry Americans just now, Uncle George." "I'll back English women against the world, Harry," said Lord Fermor, striking the table with his fist. "The betting is on the Americans." "They don't last, I am told," muttered his uncle. "A long engagement exhausts them, but they are capital at a steeplechase. They take things flying. I don't think Dartmoor has a chance." "Who are her people?" grumbled the old gentleman. "Has she got any?" Lord Henry shook his head. "American girls are as clever at concealing their parents, as English women are at concealing their past," he said, rising to go. "They are pork-packers, I suppose?" "I hope so, Uncle George, for Dartmoor's sake. I am told that pork-packing is the most lucrative profession in America, after politics." "Is she pretty?" "She behaves as if she was beautiful. Most American women do. It is the secret of their charm." "Why can't these American women stay in their own country? They are always telling us that it is the paradise for women." "It is. That is the reason why, like Eve, they are so excessively anxious to get out of it," said Lord Henry. "Good-bye, Uncle George. I shall be late for lunch, if I stop any longer. Thanks for giving me the information I wanted. I always like to know everything about my new friends, and nothing about my old ones." "Where are you lunching, Harry?" "At Aunt Agatha's. I have asked myself and Mr. Gray. He is her latest _protege_." "Humph! tell your Aunt Agatha, Harry, not to bother me any more with her charity appeals. I am sick of them. Why, the good woman thinks that I have nothing to do but to write cheques for her silly fads." "All right, Uncle George, I'll tell her, but it won't have any effect. Philanthropic people lose all sense of humanity. It is their distinguishing characteristic." The old gentleman growled approvingly and rang the bell for his servant. Lord Henry passed up the low arcade into Burlington Street and turned his steps in the direction of Berkeley Square. So that was the story of Dorian Gray's parentage. Crudely as it had been told to him, it had yet stirred him by its suggestion of a strange, almost modern romance. A beautiful woman risking everything for a mad passion. A few wild weeks of happiness cut short by a hideous, treacherous crime. Months of voiceless agony, and then a child born in pain. The mother snatched away by death, the boy left to solitude and the tyranny of an old and loveless man. Yes; it was an interesting background. It posed the lad, made him more perfect, as it were. Behind every exquisite thing that existed, there was something tragic. Worlds had to be in travail, that the meanest flower might blow.... And how charming he had been at dinner the night before, as with startled eyes and lips parted in frightened pleasure he had sat opposite to him at the club, the red candleshades staining to a richer rose the wakening wonder of his face. Talking to him was like playing upon an exquisite violin. He answered to every touch and thrill of the bow.... There was something terribly enthralling in the exercise of influence. No other activity was like it. To project one's soul into some gracious form, and let it tarry there for a moment; to hear one's own intellectual views echoed back to one with all the added music of passion and youth; to convey one's temperament into another as though it were a subtle fluid or a strange perfume: there was a real joy in that--perhaps the most satisfying joy left to us in an age so limited and vulgar as our own, an age grossly carnal in its pleasures, and grossly common in its aims.... He was a marvellous type, too, this lad, whom by so curious a chance he had met in Basil's studio, or could be fashioned into a marvellous type, at any rate. Grace was his, and the white purity of boyhood, and beauty such as old Greek marbles kept for us. There was nothing that one could not do with him. He could be made a Titan or a toy. What a pity it was that such beauty was destined to fade! ... And Basil? From a psychological point of view, how interesting he was! The new manner in art, the fresh mode of looking at life, suggested so strangely by the merely visible presence of one who was unconscious of it all; the silent spirit that dwelt in dim woodland, and walked unseen in open field, suddenly showing herself, Dryadlike and not afraid, because in his soul who sought for her there had been wakened that wonderful vision to which alone are wonderful things revealed; the mere shapes and patterns of things becoming, as it were, refined, and gaining a kind of symbolical value, as though they were themselves patterns of some other and more perfect form whose shadow they made real: how strange it all was! He remembered something like it in history. Was it not Plato, that artist in thought, who had first analyzed it? Was it not Buonarotti who had carved it in the coloured marbles of a sonnet-sequence? But in our own century it was strange.... Yes; he would try to be to Dorian Gray what, without knowing it, the lad was to the painter who had fashioned the wonderful portrait. He would seek to dominate him--had already, indeed, half done so. He would make that wonderful spirit his own. There was something fascinating in this son of love and death. Suddenly he stopped and glanced up at the houses. He found that he had passed his aunt's some distance, and, smiling to himself, turned back. When he entered the somewhat sombre hall, the butler told him that they had gone in to lunch. He gave one of the footmen his hat and stick and passed into the dining-room. "Late as usual, Harry," cried his aunt, shaking her head at him. He invented a facile excuse, and having taken the vacant seat next to her, looked round to see who was there. Dorian bowed to him shyly from the end of the table, a flush of pleasure stealing into his cheek. Opposite was the Duchess of Harley, a lady of admirable good-nature and good temper, much liked by every one who knew her, and of those ample architectural proportions that in women who are not duchesses are described by contemporary historians as stoutness. Next to her sat, on her right, Sir Thomas Burdon, a Radical member of Parliament, who followed his leader in public life and in private life followed the best cooks, dining with the Tories and thinking with the Liberals, in accordance with a wise and well-known rule. The post on her left was occupied by Mr. Erskine of Treadley, an old gentleman of considerable charm and culture, who had fallen, however, into bad habits of silence, having, as he explained once to Lady Agatha, said everything that he had to say before he was thirty. His own neighbour was Mrs. Vandeleur, one of his aunt's oldest friends, a perfect saint amongst women, but so dreadfully dowdy that she reminded one of a badly bound hymn-book. Fortunately for him she had on the other side Lord Faudel, a most intelligent middle-aged mediocrity, as bald as a ministerial statement in the House of Commons, with whom she was conversing in that intensely earnest manner which is the one unpardonable error, as he remarked once himself, that all really good people fall into, and from which none of them ever quite escape. "We are talking about poor Dartmoor, Lord Henry," cried the duchess, nodding pleasantly to him across the table. "Do you think he will really marry this fascinating young person?" "I believe she has made up her mind to propose to him, Duchess." "How dreadful!" exclaimed Lady Agatha. "Really, some one should interfere." "I am told, on excellent authority, that her father keeps an American dry-goods store," said Sir Thomas Burdon, looking supercilious. "My uncle has already suggested pork-packing, Sir Thomas." "Dry-goods! What are American dry-goods?" asked the duchess, raising her large hands in wonder and accentuating the verb. "American novels," answered Lord Henry, helping himself to some quail. The duchess looked puzzled. "Don't mind him, my dear," whispered Lady Agatha. "He never means anything that he says." "When America was discovered," said the Radical member--and he began to give some wearisome facts. Like all people who try to exhaust a subject, he exhausted his listeners. The duchess sighed and exercised her privilege of interruption. "I wish to goodness it never had been discovered at all!" she exclaimed. "Really, our girls have no chance nowadays. It is most unfair." "Perhaps, after all, America never has been discovered," said Mr. Erskine; "I myself would say that it had merely been detected." "Oh! but I have seen specimens of the inhabitants," answered the duchess vaguely. "I must confess that most of them are extremely pretty. And they dress well, too. They get all their dresses in Paris. I wish I could afford to do the same." "They say that when good Americans die they go to Paris," chuckled Sir Thomas, who had a large wardrobe of Humour's cast-off clothes. "Really! And where do bad Americans go to when they die?" inquired the duchess. "They go to America," murmured Lord Henry. Sir Thomas frowned. "I am afraid that your nephew is prejudiced against that great country," he said to Lady Agatha. "I have travelled all over it in cars provided by the directors, who, in such matters, are extremely civil. I assure you that it is an education to visit it." "But must we really see Chicago in order to be educated?" asked Mr. Erskine plaintively. "I don't feel up to the journey." Sir Thomas waved his hand. "Mr. Erskine of Treadley has the world on his shelves. We practical men like to see things, not to read about them. The Americans are an extremely interesting people. They are absolutely reasonable. I think that is their distinguishing characteristic. Yes, Mr. Erskine, an absolutely reasonable people. I assure you there is no nonsense about the Americans." "How dreadful!" cried Lord Henry. "I can stand brute force, but brute reason is quite unbearable. There is something unfair about its use. It is hitting below the intellect." "I do not understand you," said Sir Thomas, growing rather red. "I do, Lord Henry," murmured Mr. Erskine, with a smile. "Paradoxes are all very well in their way...." rejoined the baronet. "Was that a paradox?" asked Mr. Erskine. "I did not think so. Perhaps it was. Well, the way of paradoxes is the way of truth. To test reality we must see it on the tight rope. When the verities become acrobats, we can judge them." "Dear me!" said Lady Agatha, "how you men argue! I am sure I never can make out what you are talking about. Oh! Harry, I am quite vexed with you. Why do you try to persuade our nice Mr. Dorian Gray to give up the East End? I assure you he would be quite invaluable. They would love his playing." "I want him to play to me," cried Lord Henry, smiling, and he looked down the table and caught a bright answering glance. "But they are so unhappy in Whitechapel," continued Lady Agatha. "I can sympathize with everything except suffering," said Lord Henry, shrugging his shoulders. "I cannot sympathize with that. It is too ugly, too horrible, too distressing. There is something terribly morbid in the modern sympathy with pain. One should sympathize with the colour, the beauty, the joy of life. The less said about life's sores, the better." "Still, the East End is a very important problem," remarked Sir Thomas with a grave shake of the head. "Quite so," answered the young lord. "It is the problem of slavery, and we try to solve it by amusing the slaves." The politician looked at him keenly. "What change do you propose, then?" he asked. Lord Henry laughed. "I don't desire to change anything in England except the weather," he answered. "I am quite content with philosophic contemplation. But, as the nineteenth century has gone bankrupt through an over-expenditure of sympathy, I would suggest that we should appeal to science to put us straight. The advantage of the emotions is that they lead us astray, and the advantage of science is that it is not emotional." "But we have such grave responsibilities," ventured Mrs. Vandeleur timidly. "Terribly grave," echoed Lady Agatha. Lord Henry looked over at Mr. Erskine. "Humanity takes itself too seriously. It is the world's original sin. If the caveman had known how to laugh, history would have been different." "You are really very comforting," warbled the duchess. "I have always felt rather guilty when I came to see your dear aunt, for I take no interest at all in the East End. For the future I shall be able to look her in the face without a blush." "A blush is very becoming, Duchess," remarked Lord Henry. "Only when one is young," she answered. "When an old woman like myself blushes, it is a very bad sign. Ah! Lord Henry, I wish you would tell me how to become young again." He thought for a moment. "Can you remember any great error that you committed in your early days, Duchess?" he asked, looking at her across the table. "A great many, I fear," she cried. "Then commit them over again," he said gravely. "To get back one's youth, one has merely to repeat one's follies." "A delightful theory!" she exclaimed. "I must put it into practice." "A dangerous theory!" came from Sir Thomas's tight lips. Lady Agatha shook her head, but could not help being amused. Mr. Erskine listened. "Yes," he continued, "that is one of the great secrets of life. Nowadays most people die of a sort of creeping common sense, and discover when it is too late that the only things one never regrets are one's mistakes." A laugh ran round the table. He played with the idea and grew wilful; tossed it into the air and transformed it; let it escape and recaptured it; made it iridescent with fancy and winged it with paradox. The praise of folly, as he went on, soared into a philosophy, and philosophy herself became young, and catching the mad music of pleasure, wearing, one might fancy, her wine-stained robe and wreath of ivy, danced like a Bacchante over the hills of life, and mocked the slow Silenus for being sober. Facts fled before her like frightened forest things. Her white feet trod the huge press at which wise Omar sits, till the seething grape-juice rose round her bare limbs in waves of purple bubbles, or crawled in red foam over the vat's black, dripping, sloping sides. It was an extraordinary improvisation. He felt that the eyes of Dorian Gray were fixed on him, and the consciousness that amongst his audience there was one whose temperament he wished to fascinate seemed to give his wit keenness and to lend colour to his imagination. He was brilliant, fantastic, irresponsible. He charmed his listeners out of themselves, and they followed his pipe, laughing. Dorian Gray never took his gaze off him, but sat like one under a spell, smiles chasing each other over his lips and wonder growing grave in his darkening eyes. At last, liveried in the costume of the age, reality entered the room in the shape of a servant to tell the duchess that her carriage was waiting. She wrung her hands in mock despair. "How annoying!" she cried. "I must go. I have to call for my husband at the club, to take him to some absurd meeting at Willis's Rooms, where he is going to be in the chair. If I am late he is sure to be furious, and I couldn't have a scene in this bonnet. It is far too fragile. A harsh word would ruin it. No, I must go, dear Agatha. Good-bye, Lord Henry, you are quite delightful and dreadfully demoralizing. I am sure I don't know what to say about your views. You must come and dine with us some night. Tuesday? Are you disengaged Tuesday?" "For you I would throw over anybody, Duchess," said Lord Henry with a bow. "Ah! that is very nice, and very wrong of you," she cried; "so mind you come"; and she swept out of the room, followed by Lady Agatha and the other ladies. When Lord Henry had sat down again, Mr. Erskine moved round, and taking a chair close to him, placed his hand upon his arm. "You talk books away," he said; "why don't you write one?" "I am too fond of reading books to care to write them, Mr. Erskine. I should like to write a novel certainly, a novel that would be as lovely as a Persian carpet and as unreal. But there is no literary public in England for anything except newspapers, primers, and encyclopaedias. Of all people in the world the English have the least sense of the beauty of literature." "I fear you are right," answered Mr. Erskine. "I myself used to have literary ambitions, but I gave them up long ago. And now, my dear young friend, if you will allow me to call you so, may I ask if you really meant all that you said to us at lunch?" "I quite forget what I said," smiled Lord Henry. "Was it all very bad?" "Very bad indeed. In fact I consider you extremely dangerous, and if anything happens to our good duchess, we shall all look on you as being primarily responsible. But I should like to talk to you about life. The generation into which I was born was tedious. Some day, when you are tired of London, come down to Treadley and expound to me your philosophy of pleasure over some admirable Burgundy I am fortunate enough to possess." "I shall be charmed. A visit to Treadley would be a great privilege. It has a perfect host, and a perfect library." "You will complete it," answered the old gentleman with a courteous bow. "And now I must bid good-bye to your excellent aunt. I am due at the Athenaeum. It is the hour when we sleep there." "All of you, Mr. Erskine?" "Forty of us, in forty arm-chairs. We are practising for an English Academy of Letters." Lord Henry laughed and rose. "I am going to the park," he cried. As he was passing out of the door, Dorian Gray touched him on the arm. "Let me come with you," he murmured. "But I thought you had promised Basil Hallward to go and see him," answered Lord Henry. "I would sooner come with you; yes, I feel I must come with you. Do let me. And you will promise to talk to me all the time? No one talks so wonderfully as you do." "Ah! I have talked quite enough for to-day," said Lord Henry, smiling. "All I want now is to look at life. You may come and look at it with me, if you care to." CHAPTER 4 One afternoon, a month later, Dorian Gray was reclining in a luxurious arm-chair, in the little library of Lord Henry's house in Mayfair. It was, in its way, a very charming room, with its high panelled wainscoting of olive-stained oak, its cream-coloured frieze and ceiling of raised plasterwork, and its brickdust felt carpet strewn with silk, long-fringed Persian rugs. On a tiny satinwood table stood a statuette by Clodion, and beside it lay a copy of Les Cent Nouvelles, bound for Margaret of Valois by Clovis Eve and powdered with the gilt daisies that Queen had selected for her device. Some large blue china jars and parrot-tulips were ranged on the mantelshelf, and through the small leaded panes of the window streamed the apricot-coloured light of a summer day in London. Lord Henry had not yet come in. He was always late on principle, his principle being that punctuality is the thief of time. So the lad was looking rather sulky, as with listless fingers he turned over the pages of an elaborately illustrated edition of Manon Lescaut that he had found in one of the book-cases. The formal monotonous ticking of the Louis Quatorze clock annoyed him. Once or twice he thought of going away. At last he heard a step outside, and the door opened. "How late you are, Harry!" he murmured. "I am afraid it is not Harry, Mr. Gray," answered a shrill voice. He glanced quickly round and rose to his feet. "I beg your pardon. I thought--" "You thought it was my husband. It is only his wife. You must let me introduce myself. I know you quite well by your photographs. I think my husband has got seventeen of them." "Not seventeen, Lady Henry?" "Well, eighteen, then. And I saw you with him the other night at the opera." She laughed nervously as she spoke, and watched him with her vague forget-me-not eyes. She was a curious woman, whose dresses always looked as if they had been designed in a rage and put on in a tempest. She was usually in love with somebody, and, as her passion was never returned, she had kept all her illusions. She tried to look picturesque, but only succeeded in being untidy. Her name was Victoria, and she had a perfect mania for going to church. "That was at Lohengrin, Lady Henry, I think?" "Yes; it was at dear Lohengrin. I like Wagner's music better than anybody's. It is so loud that one can talk the whole time without other people hearing what one says. That is a great advantage, don't you think so, Mr. Gray?" The same nervous staccato laugh broke from her thin lips, and her fingers began to play with a long tortoise-shell paper-knife. Dorian smiled and shook his head: "I am afraid I don't think so, Lady Henry. I never talk during music--at least, during good music. If one hears bad music, it is one's duty to drown it in conversation." "Ah! that is one of Harry's views, isn't it, Mr. Gray? I always hear Harry's views from his friends. It is the only way I get to know of them. But you must not think I don't like good music. I adore it, but I am afraid of it. It makes me too romantic. I have simply worshipped pianists--two at a time, sometimes, Harry tells me. I don't know what it is about them. Perhaps it is that they are foreigners. They all are, ain't they? Even those that are born in England become foreigners after a time, don't they? It is so clever of them, and such a compliment to art. Makes it quite cosmopolitan, doesn't it? You have never been to any of my parties, have you, Mr. Gray? You must come. I can't afford orchids, but I spare no expense in foreigners. They make one's rooms look so picturesque. But here is Harry! Harry, I came in to look for you, to ask you something--I forget what it was--and I found Mr. Gray here. We have had such a pleasant chat about music. We have quite the same ideas. No; I think our ideas are quite different. But he has been most pleasant. I am so glad I've seen him." "I am charmed, my love, quite charmed," said Lord Henry, elevating his dark, crescent-shaped eyebrows and looking at them both with an amused smile. "So sorry I am late, Dorian. I went to look after a piece of old brocade in Wardour Street and had to bargain for hours for it. Nowadays people know the price of everything and the value of nothing." "I am afraid I must be going," exclaimed Lady Henry, breaking an awkward silence with her silly sudden laugh. "I have promised to drive with the duchess. Good-bye, Mr. Gray. Good-bye, Harry. You are dining out, I suppose? So am I. Perhaps I shall see you at Lady Thornbury's." "I dare say, my dear," said Lord Henry, shutting the door behind her as, looking like a bird of paradise that had been out all night in the rain, she flitted out of the room, leaving a faint odour of frangipanni. Then he lit a cigarette and flung himself down on the sofa. "Never marry a woman with straw-coloured hair, Dorian," he said after a few puffs. "Why, Harry?" "Because they are so sentimental." "But I like sentimental people." "Never marry at all, Dorian. Men marry because they are tired; women, because they are curious: both are disappointed." "I don't think I am likely to marry, Harry. I am too much in love. That is one of your aphorisms. I am putting it into practice, as I do everything that you say." "Who are you in love with?" asked Lord Henry after a pause. "With an actress," said Dorian Gray, blushing. Lord Henry shrugged his shoulders. "That is a rather commonplace _debut_." "You would not say so if you saw her, Harry." "Who is she?" "Her name is Sibyl Vane." "Never heard of her." "No one has. People will some day, however. She is a genius." "My dear boy, no woman is a genius. Women are a decorative sex. They never have anything to say, but they say it charmingly. Women represent the triumph of matter over mind, just as men represent the triumph of mind over morals." "Harry, how can you?" "My dear Dorian, it is quite true. I am analysing women at present, so I ought to know. The subject is not so abstruse as I thought it was. I find that, ultimately, there are only two kinds of women, the plain and the coloured. The plain women are very useful. If you want to gain a reputation for respectability, you have merely to take them down to supper. The other women are very charming. They commit one mistake, however. They paint in order to try and look young. Our grandmothers painted in order to try and talk brilliantly. _Rouge_ and _esprit_ used to go together. That is all over now. As long as a woman can look ten years younger than her own daughter, she is perfectly satisfied. As for conversation, there are only five women in London worth talking to, and two of these can't be admitted into decent society. However, tell me about your genius. How long have you known her?" "Ah! Harry, your views terrify me." "Never mind that. How long have you known her?" "About three weeks." "And where did you come across her?" "I will tell you, Harry, but you mustn't be unsympathetic about it. After all, it never would have happened if I had not met you. You filled me with a wild desire to know everything about life. For days after I met you, something seemed to throb in my veins. As I lounged in the park, or strolled down Piccadilly, I used to look at every one who passed me and wonder, with a mad curiosity, what sort of lives they led. Some of them fascinated me. Others filled me with terror. There was an exquisite poison in the air. I had a passion for sensations.... Well, one evening about seven o'clock, I determined to go out in search of some adventure. I felt that this grey monstrous London of ours, with its myriads of people, its sordid sinners, and its splendid sins, as you once phrased it, must have something in store for me. I fancied a thousand things. The mere danger gave me a sense of delight. I remembered what you had said to me on that wonderful evening when we first dined together, about the search for beauty being the real secret of life. I don't know what I expected, but I went out and wandered eastward, soon losing my way in a labyrinth of grimy streets and black grassless squares. About half-past eight I passed by an absurd little theatre, with great flaring gas-jets and gaudy play-bills. A hideous Jew, in the most amazing waistcoat I ever beheld in my life, was standing at the entrance, smoking a vile cigar. He had greasy ringlets, and an enormous diamond blazed in the centre of a soiled shirt. 'Have a box, my Lord?' he said, when he saw me, and he took off his hat with an air of gorgeous servility. There was something about him, Harry, that amused me. He was such a monster. You will laugh at me, I know, but I really went in and paid a whole guinea for the stage-box. To the present day I can't make out why I did so; and yet if I hadn't--my dear Harry, if I hadn't--I should have missed the greatest romance of my life. I see you are laughing. It is horrid of you!" "I am not laughing, Dorian; at least I am not laughing at you. But you should not say the greatest romance of your life. You should say the first romance of your life. You will always be loved, and you will always be in love with love. A _grande passion_ is the privilege of people who have nothing to do. That is the one use of the idle classes of a country. Don't be afraid. There are exquisite things in store for you. This is merely the beginning." "Do you think my nature so shallow?" cried Dorian Gray angrily. "No; I think your nature so deep." "How do you mean?" "My dear boy, the people who love only once in their lives are really the shallow people. What they call their loyalty, and their fidelity, I call either the lethargy of custom or their lack of imagination. Faithfulness is to the emotional life what consistency is to the life of the intellect--simply a confession of failure. Faithfulness! I must analyse it some day. The passion for property is in it. There are many things that we would throw away if we were not afraid that others might pick them up. But I don't want to interrupt you. Go on with your story." "Well, I found myself seated in a horrid little private box, with a vulgar drop-scene staring me in the face. I looked out from behind the curtain and surveyed the house. It was a tawdry affair, all Cupids and cornucopias, like a third-rate wedding-cake. The gallery and pit were fairly full, but the two rows of dingy stalls were quite empty, and there was hardly a person in what I suppose they called the dress-circle. Women went about with oranges and ginger-beer, and there was a terrible consumption of nuts going on." "It must have been just like the palmy days of the British drama." "Just like, I should fancy, and very depressing. I began to wonder what on earth I should do when I caught sight of the play-bill. What do you think the play was, Harry?" "I should think 'The Idiot Boy', or 'Dumb but Innocent'. Our fathers used to like that sort of piece, I believe. The longer I live, Dorian, the more keenly I feel that whatever was good enough for our fathers is not good enough for us. In art, as in politics, _les grandperes ont toujours tort_." "This play was good enough for us, Harry. It was Romeo and Juliet. I must admit that I was rather annoyed at the idea of seeing Shakespeare done in such a wretched hole of a place. Still, I felt interested, in a sort of way. At any rate, I determined to wait for the first act. There was a dreadful orchestra, presided over by a young Hebrew who sat at a cracked piano, that nearly drove me away, but at last the drop-scene was drawn up and the play began. Romeo was a stout elderly gentleman, with corked eyebrows, a husky tragedy voice, and a figure like a beer-barrel. Mercutio was almost as bad. He was played by the low-comedian, who had introduced gags of his own and was on most friendly terms with the pit. They were both as grotesque as the scenery, and that looked as if it had come out of a country-booth. But Juliet! Harry, imagine a girl, hardly seventeen years of age, with a little, flowerlike face, a small Greek head with plaited coils of dark-brown hair, eyes that were violet wells of passion, lips that were like the petals of a rose. She was the loveliest thing I had ever seen in my life. You said to me once that pathos left you unmoved, but that beauty, mere beauty, could fill your eyes with tears. I tell you, Harry, I could hardly see this girl for the mist of tears that came across me. And her voice--I never heard such a voice. It was very low at first, with deep mellow notes that seemed to fall singly upon one's ear. Then it became a little louder, and sounded like a flute or a distant hautboy. In the garden-scene it had all the tremulous ecstasy that one hears just before dawn when nightingales are singing. There were moments, later on, when it had the wild passion of violins. You know how a voice can stir one. Your voice and the voice of Sibyl Vane are two things that I shall never forget. When I close my eyes, I hear them, and each of them says something different. I don't know which to follow. Why should I not love her? Harry, I do love her. She is everything to me in life. Night after night I go to see her play. One evening she is Rosalind, and the next evening she is Imogen. I have seen her die in the gloom of an Italian tomb, sucking the poison from her lover's lips. I have watched her wandering through the forest of Arden, disguised as a pretty boy in hose and doublet and dainty cap. She has been mad, and has come into the presence of a guilty king, and given him rue to wear and bitter herbs to taste of. She has been innocent, and the black hands of jealousy have crushed her reedlike throat. I have seen her in every age and in every costume. Ordinary women never appeal to one's imagination. They are limited to their century. No glamour ever transfigures them. One knows their minds as easily as one knows their bonnets. One can always find them. There is no mystery in any of them. They ride in the park in the morning and chatter at tea-parties in the afternoon. They have their stereotyped smile and their fashionable manner. They are quite obvious. But an actress! How different an actress is! Harry! why didn't you tell me that the only thing worth loving is an actress?" "Because I have loved so many of them, Dorian." "Oh, yes, horrid people with dyed hair and painted faces." "Don't run down dyed hair and painted faces. There is an extraordinary charm in them, sometimes," said Lord Henry. "I wish now I had not told you about Sibyl Vane." "You could not have helped telling me, Dorian. All through your life you will tell me everything you do." "Yes, Harry, I believe that is true. I cannot help telling you things. You have a curious influence over me. If I ever did a crime, I would come and confess it to you. You would understand me." "People like you--the wilful sunbeams of life--don't commit crimes, Dorian. But I am much obliged for the compliment, all the same. And now tell me--reach me the matches, like a good boy--thanks--what are your actual relations with Sibyl Vane?" Dorian Gray leaped to his feet, with flushed cheeks and burning eyes. "Harry! Sibyl Vane is sacred!" "It is only the sacred things that are worth touching, Dorian," said Lord Henry, with a strange touch of pathos in his voice. "But why should you be annoyed? I suppose she will belong to you some day. When one is in love, one always begins by deceiving one's self, and one always ends by deceiving others. That is what the world calls a romance. You know her, at any rate, I suppose?" "Of course I know her. On the first night I was at the theatre, the horrid old Jew came round to the box after the performance was over and offered to take me behind the scenes and introduce me to her. I was furious with him, and told him that Juliet had been dead for hundreds of years and that her body was lying in a marble tomb in Verona. I think, from his blank look of amazement, that he was under the impression that I had taken too much champagne, or something." "I am not surprised." "Then he asked me if I wrote for any of the newspapers. I told him I never even read them. He seemed terribly disappointed at that, and confided to me that all the dramatic critics were in a conspiracy against him, and that they were every one of them to be bought." "I should not wonder if he was quite right there. But, on the other hand, judging from their appearance, most of them cannot be at all expensive." "Well, he seemed to think they were beyond his means," laughed Dorian. "By this time, however, the lights were being put out in the theatre, and I had to go. He wanted me to try some cigars that he strongly recommended. I declined. The next night, of course, I arrived at the place again. When he saw me, he made me a low bow and assured me that I was a munificent patron of art. He was a most offensive brute, though he had an extraordinary passion for Shakespeare. He told me once, with an air of pride, that his five bankruptcies were entirely due to 'The Bard,' as he insisted on calling him. He seemed to think it a distinction." "It was a distinction, my dear Dorian--a great distinction. Most people become bankrupt through having invested too heavily in the prose of life. To have ruined one's self over poetry is an honour. But when did you first speak to Miss Sibyl Vane?" "The third night. She had been playing Rosalind. I could not help going round. I had thrown her some flowers, and she had looked at me--at least I fancied that she had. The old Jew was persistent. He seemed determined to take me behind, so I consented. It was curious my not wanting to know her, wasn't it?" "No; I don't think so." "My dear Harry, why?" "I will tell you some other time. Now I want to know about the girl." "Sibyl? Oh, she was so shy and so gentle. There is something of a child about her. Her eyes opened wide in exquisite wonder when I told her what I thought of her performance, and she seemed quite unconscious of her power. I think we were both rather nervous. The old Jew stood grinning at the doorway of the dusty greenroom, making elaborate speeches about us both, while we stood looking at each other like children. He would insist on calling me 'My Lord,' so I had to assure Sibyl that I was not anything of the kind. She said quite simply to me, 'You look more like a prince. I must call you Prince Charming.'" "Upon my word, Dorian, Miss Sibyl knows how to pay compliments." "You don't understand her, Harry. She regarded me merely as a person in a play. She knows nothing of life. She lives with her mother, a faded tired woman who played Lady Capulet in a sort of magenta dressing-wrapper on the first night, and looks as if she had seen better days." "I know that look. It depresses me," murmured Lord Henry, examining his rings. "The Jew wanted to tell me her history, but I said it did not interest me." "You were quite right. There is always something infinitely mean about other people's tragedies." "Sibyl is the only thing I care about. What is it to me where she came from? From her little head to her little feet, she is absolutely and entirely divine. Every night of my life I go to see her act, and every night she is more marvellous." "That is the reason, I suppose, that you never dine with me now. I thought you must have some curious romance on hand. You have; but it is not quite what I expected." "My dear Harry, we either lunch or sup together every day, and I have been to the opera with you several times," said Dorian, opening his blue eyes in wonder. "You always come dreadfully late." "Well, I can't help going to see Sibyl play," he cried, "even if it is only for a single act. I get hungry for her presence; and when I think of the wonderful soul that is hidden away in that little ivory body, I am filled with awe." "You can dine with me to-night, Dorian, can't you?" He shook his head. "To-night she is Imogen," he answered, "and to-morrow night she will be Juliet." "When is she Sibyl Vane?" "Never." "I congratulate you." "How horrid you are! She is all the great heroines of the world in one. She is more than an individual. You laugh, but I tell you she has genius. I love her, and I must make her love me. You, who know all the secrets of life, tell me how to charm Sibyl Vane to love me! I want to make Romeo jealous. I want the dead lovers of the world to hear our laughter and grow sad. I want a breath of our passion to stir their dust into consciousness, to wake their ashes into pain. My God, Harry, how I worship her!" He was walking up and down the room as he spoke. Hectic spots of red burned on his cheeks. He was terribly excited. Lord Henry watched him with a subtle sense of pleasure. How different he was now from the shy frightened boy he had met in Basil Hallward's studio! His nature had developed like a flower, had borne blossoms of scarlet flame. Out of its secret hiding-place had crept his soul, and desire had come to meet it on the way. "And what do you propose to do?" said Lord Henry at last. "I want you and Basil to come with me some night and see her act. I have not the slightest fear of the result. You are certain to acknowledge her genius. Then we must get her out of the Jew's hands. She is bound to him for three years--at least for two years and eight months--from the present time. I shall have to pay him something, of course. When all that is settled, I shall take a West End theatre and bring her out properly. She will make the world as mad as she has made me." "That would be impossible, my dear boy." "Yes, she will. She has not merely art, consummate art-instinct, in her, but she has personality also; and you have often told me that it is personalities, not principles, that move the age." "Well, what night shall we go?" "Let me see. To-day is Tuesday. Let us fix to-morrow. She plays Juliet to-morrow." "All right. The Bristol at eight o'clock; and I will get Basil." "Not eight, Harry, please. Half-past six. We must be there before the curtain rises. You must see her in the first act, where she meets Romeo." "Half-past six! What an hour! It will be like having a meat-tea, or reading an English novel. It must be seven. No gentleman dines before seven. Shall you see Basil between this and then? Or shall I write to him?" "Dear Basil! I have not laid eyes on him for a week. It is rather horrid of me, as he has sent me my portrait in the most wonderful frame, specially designed by himself, and, though I am a little jealous of the picture for being a whole month younger than I am, I must admit that I delight in it. Perhaps you had better write to him. I don't want to see him alone. He says things that annoy me. He gives me good advice." Lord Henry smiled. "People are very fond of giving away what they need most themselves. It is what I call the depth of generosity." "Oh, Basil is the best of fellows, but he seems to me to be just a bit of a Philistine. Since I have known you, Harry, I have discovered that." "Basil, my dear boy, puts everything that is charming in him into his work. The consequence is that he has nothing left for life but his prejudices, his principles, and his common sense. The only artists I have ever known who are personally delightful are bad artists. Good artists exist simply in what they make, and consequently are perfectly uninteresting in what they are. A great poet, a really great poet, is the most unpoetical of all creatures. But inferior poets are absolutely fascinating. The worse their rhymes are, the more picturesque they look. The mere fact of having published a book of second-rate sonnets makes a man quite irresistible. He lives the poetry that he cannot write. The others write the poetry that they dare not realize." "I wonder is that really so, Harry?" said Dorian Gray, putting some perfume on his handkerchief out of a large, gold-topped bottle that stood on the table. "It must be, if you say it. And now I am off. Imogen is waiting for me. Don't forget about to-morrow. Good-bye." As he left the room, Lord Henry's heavy eyelids drooped, and he began to think. Certainly few people had ever interested him so much as Dorian Gray, and yet the lad's mad adoration of some one else caused him not the slightest pang of annoyance or jealousy. He was pleased by it. It made him a more interesting study. He had been always enthralled by the methods of natural science, but the ordinary subject-matter of that science had seemed to him trivial and of no import. And so he had begun by vivisecting himself, as he had ended by vivisecting others. Human life--that appeared to him the one thing worth investigating. Compared to it there was nothing else of any value. It was true that as one watched life in its curious crucible of pain and pleasure, one could not wear over one's face a mask of glass, nor keep the sulphurous fumes from troubling the brain and making the imagination turbid with monstrous fancies and misshapen dreams. There were poisons so subtle that to know their properties one had to sicken of them. There were maladies so strange that one had to pass through them if one sought to understand their nature. And, yet, what a great reward one received! How wonderful the whole world became to one! To note the curious hard logic of passion, and the emotional coloured life of the intellect--to observe where they met, and where they separated, at what point they were in unison, and at what point they were at discord--there was a delight in that! What matter what the cost was? One could never pay too high a price for any sensation. He was conscious--and the thought brought a gleam of pleasure into his brown agate eyes--that it was through certain words of his, musical words said with musical utterance, that Dorian Gray's soul had turned to this white girl and bowed in worship before her. To a large extent the lad was his own creation. He had made him premature. That was something. Ordinary people waited till life disclosed to them its secrets, but to the few, to the elect, the mysteries of life were revealed before the veil was drawn away. Sometimes this was the effect of art, and chiefly of the art of literature, which dealt immediately with the passions and the intellect. But now and then a complex personality took the place and assumed the office of art, was indeed, in its way, a real work of art, life having its elaborate masterpieces, just as poetry has, or sculpture, or painting. Yes, the lad was premature. He was gathering his harvest while it was yet spring. The pulse and passion of youth were in him, but he was becoming self-conscious. It was delightful to watch him. With his beautiful face, and his beautiful soul, he was a thing to wonder at. It was no matter how it all ended, or was destined to end. He was like one of those gracious figures in a pageant or a play, whose joys seem to be remote from one, but whose sorrows stir one's sense of beauty, and whose wounds are like red roses. Soul and body, body and soul--how mysterious they were! There was animalism in the soul, and the body had its moments of spirituality. The senses could refine, and the intellect could degrade. Who could say where the fleshly impulse ceased, or the psychical impulse began? How shallow were the arbitrary definitions of ordinary psychologists! And yet how difficult to decide between the claims of the various schools! Was the soul a shadow seated in the house of sin? Or was the body really in the soul, as Giordano Bruno thought? The separation of spirit from matter was a mystery, and the union of spirit with matter was a mystery also. He began to wonder whether we could ever make psychology so absolute a science that each little spring of life would be revealed to us. As it was, we always misunderstood ourselves and rarely understood others. Experience was of no ethical value. It was merely the name men gave to their mistakes. Moralists had, as a rule, regarded it as a mode of warning, had claimed for it a certain ethical efficacy in the formation of character, had praised it as something that taught us what to follow and showed us what to avoid. But there was no motive power in experience. It was as little of an active cause as conscience itself. All that it really demonstrated was that our future would be the same as our past, and that the sin we had done once, and with loathing, we would do many times, and with joy. It was clear to him that the experimental method was the only method by which one could arrive at any scientific analysis of the passions; and certainly Dorian Gray was a subject made to his hand, and seemed to promise rich and fruitful results. His sudden mad love for Sibyl Vane was a psychological phenomenon of no small interest. There was no doubt that curiosity had much to do with it, curiosity and the desire for new experiences, yet it was not a simple, but rather a very complex passion. What there was in it of the purely sensuous instinct of boyhood had been transformed by the workings of the imagination, changed into something that seemed to the lad himself to be remote from sense, and was for that very reason all the more dangerous. It was the passions about whose origin we deceived ourselves that tyrannized most strongly over us. Our weakest motives were those of whose nature we were conscious. It often happened that when we thought we were experimenting on others we were really experimenting on ourselves. While Lord Henry sat dreaming on these things, a knock came to the door, and his valet entered and reminded him it was time to dress for dinner. He got up and looked out into the street. The sunset had smitten into scarlet gold the upper windows of the houses opposite. The panes glowed like plates of heated metal. The sky above was like a faded rose. He thought of his friend's young fiery-coloured life and wondered how it was all going to end. When he arrived home, about half-past twelve o'clock, he saw a telegram lying on the hall table. He opened it and found it was from Dorian Gray. It was to tell him that he was engaged to be married to Sibyl Vane. CHAPTER 5 "Mother, Mother, I am so happy!" whispered the girl, burying her face in the lap of the faded, tired-looking woman who, with back turned to the shrill intrusive light, was sitting in the one arm-chair that their dingy sitting-room contained. "I am so happy!" she repeated, "and you must be happy, too!" Mrs. Vane winced and put her thin, bismuth-whitened hands on her daughter's head. "Happy!" she echoed, "I am only happy, Sibyl, when I see you act. You must not think of anything but your acting. Mr. Isaacs has been very good to us, and we owe him money." The girl looked up and pouted. "Money, Mother?" she cried, "what does money matter? Love is more than money." "Mr. Isaacs has advanced us fifty pounds to pay off our debts and to get a proper outfit for James. You must not forget that, Sibyl. Fifty pounds is a very large sum. Mr. Isaacs has been most considerate." "He is not a gentleman, Mother, and I hate the way he talks to me," said the girl, rising to her feet and going over to the window. "I don't know how we could manage without him," answered the elder woman querulously. Sibyl Vane tossed her head and laughed. "We don't want him any more, Mother. Prince Charming rules life for us now." Then she paused. A rose shook in her blood and shadowed her cheeks. Quick breath parted the petals of her lips. They trembled. Some southern wind of passion swept over her and stirred the dainty folds of her dress. "I love him," she said simply. "Foolish child! foolish child!" was the parrot-phrase flung in answer. The waving of crooked, false-jewelled fingers gave grotesqueness to the words. The girl laughed again. The joy of a caged bird was in her voice. Her eyes caught the melody and echoed it in radiance, then closed for a moment, as though to hide their secret. When they opened, the mist of a dream had passed across them. Thin-lipped wisdom spoke at her from the worn chair, hinted at prudence, quoted from that book of cowardice whose author apes the name of common sense. She did not listen. She was free in her prison of passion. Her prince, Prince Charming, was with her. She had called on memory to remake him. She had sent her soul to search for him, and it had brought him back. His kiss burned again upon her mouth. Her eyelids were warm with his breath. Then wisdom altered its method and spoke of espial and discovery. This young man might be rich. If so, marriage should be thought of. Against the shell of her ear broke the waves of worldly cunning. The arrows of craft shot by her. She saw the thin lips moving, and smiled. Suddenly she felt the need to speak. The wordy silence troubled her. "Mother, Mother," she cried, "why does he love me so much? I know why I love him. I love him because he is like what love himself should be. But what does he see in me? I am not worthy of him. And yet--why, I cannot tell--though I feel so much beneath him, I don't feel humble. I feel proud, terribly proud. Mother, did you love my father as I love Prince Charming?" The elder woman grew pale beneath the coarse powder that daubed her cheeks, and her dry lips twitched with a spasm of pain. Sybil rushed to her, flung her arms round her neck, and kissed her. "Forgive me, Mother. I know it pains you to talk about our father. But it only pains you because you loved him so much. Don't look so sad. I am as happy to-day as you were twenty years ago. Ah! let me be happy for ever!" "My child, you are far too young to think of falling in love. Besides, what do you know of this young man? You don't even know his name. The whole thing is most inconvenient, and really, when James is going away to Australia, and I have so much to think of, I must say that you should have shown more consideration. However, as I said before, if he is rich ..." "Ah! Mother, Mother, let me be happy!" Mrs. Vane glanced at her, and with one of those false theatrical gestures that so often become a mode of second nature to a stage-player, clasped her in her arms. At this moment, the door opened and a young lad with rough brown hair came into the room. He was thick-set of figure, and his hands and feet were large and somewhat clumsy in movement. He was not so finely bred as his sister. One would hardly have guessed the close relationship that existed between them. Mrs. Vane fixed her eyes on him and intensified her smile. She mentally elevated her son to the dignity of an audience. She felt sure that the _tableau_ was interesting. "You might keep some of your kisses for me, Sibyl, I think," said the lad with a good-natured grumble. "Ah! but you don't like being kissed, Jim," she cried. "You are a dreadful old bear." And she ran across the room and hugged him. James Vane looked into his sister's face with tenderness. "I want you to come out with me for a walk, Sibyl. I don't suppose I shall ever see this horrid London again. I am sure I don't want to." "My son, don't say such dreadful things," murmured Mrs. Vane, taking up a tawdry theatrical dress, with a sigh, and beginning to patch it. She felt a little disappointed that he had not joined the group. It would have increased the theatrical picturesqueness of the situation. "Why not, Mother? I mean it." "You pain me, my son. I trust you will return from Australia in a position of affluence. I believe there is no society of any kind in the Colonies--nothing that I would call society--so when you have made your fortune, you must come back and assert yourself in London." "Society!" muttered the lad. "I don't want to know anything about that. I should like to make some money to take you and Sibyl off the stage. I hate it." "Oh, Jim!" said Sibyl, laughing, "how unkind of you! But are you really going for a walk with me? That will be nice! I was afraid you were going to say good-bye to some of your friends--to Tom Hardy, who gave you that hideous pipe, or Ned Langton, who makes fun of you for smoking it. It is very sweet of you to let me have your last afternoon. Where shall we go? Let us go to the park." "I am too shabby," he answered, frowning. "Only swell people go to the park." "Nonsense, Jim," she whispered, stroking the sleeve of his coat. He hesitated for a moment. "Very well," he said at last, "but don't be too long dressing." She danced out of the door. One could hear her singing as she ran upstairs. Her little feet pattered overhead. He walked up and down the room two or three times. Then he turned to the still figure in the chair. "Mother, are my things ready?" he asked. "Quite ready, James," she answered, keeping her eyes on her work. For some months past she had felt ill at ease when she was alone with this rough stern son of hers. Her shallow secret nature was troubled when their eyes met. She used to wonder if he suspected anything. The silence, for he made no other observation, became intolerable to her. She began to complain. Women defend themselves by attacking, just as they attack by sudden and strange surrenders. "I hope you will be contented, James, with your sea-faring life," she said. "You must remember that it is your own choice. You might have entered a solicitor's office. Solicitors are a very respectable class, and in the country often dine with the best families." "I hate offices, and I hate clerks," he replied. "But you are quite right. I have chosen my own life. All I say is, watch over Sibyl. Don't let her come to any harm. Mother, you must watch over her." "James, you really talk very strangely. Of course I watch over Sibyl." "I hear a gentleman comes every night to the theatre and goes behind to talk to her. Is that right? What about that?" "You are speaking about things you don't understand, James. In the profession we are accustomed to receive a great deal of most gratifying attention. I myself used to receive many bouquets at one time. That was when acting was really understood. As for Sibyl, I do not know at present whether her attachment is serious or not. But there is no doubt that the young man in question is a perfect gentleman. He is always most polite to me. Besides, he has the appearance of being rich, and the flowers he sends are lovely." "You don't know his name, though," said the lad harshly. "No," answered his mother with a placid expression in her face. "He has not yet revealed his real name. I think it is quite romantic of him. He is probably a member of the aristocracy." James Vane bit his lip. "Watch over Sibyl, Mother," he cried, "watch over her." "My son, you distress me very much. Sibyl is always under my special care. Of course, if this gentleman is wealthy, there is no reason why she should not contract an alliance with him. I trust he is one of the aristocracy. He has all the appearance of it, I must say. It might be a most brilliant marriage for Sibyl. They would make a charming couple. His good looks are really quite remarkable; everybody notices them." The lad muttered something to himself and drummed on the window-pane with his coarse fingers. He had just turned round to say something when the door opened and Sibyl ran in. "How serious you both are!" she cried. "What is the matter?" "Nothing," he answered. "I suppose one must be serious sometimes. Good-bye, Mother; I will have my dinner at five o'clock. Everything is packed, except my shirts, so you need not trouble." "Good-bye, my son," she answered with a bow of strained stateliness. She was extremely annoyed at the tone he had adopted with her, and there was something in his look that had made her feel afraid. "Kiss me, Mother," said the girl. Her flowerlike lips touched the withered cheek and warmed its frost. "My child! my child!" cried Mrs. Vane, looking up to the ceiling in search of an imaginary gallery. "Come, Sibyl," said her brother impatiently. He hated his mother's affectations. They went out into the flickering, wind-blown sunlight and strolled down the dreary Euston Road. The passersby glanced in wonder at the sullen heavy youth who, in coarse, ill-fitting clothes, was in the company of such a graceful, refined-looking girl. He was like a common gardener walking with a rose. Jim frowned from time to time when he caught the inquisitive glance of some stranger. He had that dislike of being stared at, which comes on geniuses late in life and never leaves the commonplace. Sibyl, however, was quite unconscious of the effect she was producing. Her love was trembling in laughter on her lips. She was thinking of Prince Charming, and, that she might think of him all the more, she did not talk of him, but prattled on about the ship in which Jim was going to sail, about the gold he was certain to find, about the wonderful heiress whose life he was to save from the wicked, red-shirted bushrangers. For he was not to remain a sailor, or a supercargo, or whatever he was going to be. Oh, no! A sailor's existence was dreadful. Fancy being cooped up in a horrid ship, with the hoarse, hump-backed waves trying to get in, and a black wind blowing the masts down and tearing the sails into long screaming ribands! He was to leave the vessel at Melbourne, bid a polite good-bye to the captain, and go off at once to the gold-fields. Before a week was over he was to come across a large nugget of pure gold, the largest nugget that had ever been discovered, and bring it down to the coast in a waggon guarded by six mounted policemen. The bushrangers were to attack them three times, and be defeated with immense slaughter. Or, no. He was not to go to the gold-fields at all. They were horrid places, where men got intoxicated, and shot each other in bar-rooms, and used bad language. He was to be a nice sheep-farmer, and one evening, as he was riding home, he was to see the beautiful heiress being carried off by a robber on a black horse, and give chase, and rescue her. Of course, she would fall in love with him, and he with her, and they would get married, and come home, and live in an immense house in London. Yes, there were delightful things in store for him. But he must be very good, and not lose his temper, or spend his money foolishly. She was only a year older than he was, but she knew so much more of life. He must be sure, also, to write to her by every mail, and to say his prayers each night before he went to sleep. God was very good, and would watch over him. She would pray for him, too, and in a few years he would come back quite rich and happy. The lad listened sulkily to her and made no answer. He was heart-sick at leaving home. Yet it was not this alone that made him gloomy and morose. Inexperienced though he was, he had still a strong sense of the danger of Sibyl's position. This young dandy who was making love to her could mean her no good. He was a gentleman, and he hated him for that, hated him through some curious race-instinct for which he could not account, and which for that reason was all the more dominant within him. He was conscious also of the shallowness and vanity of his mother's nature, and in that saw infinite peril for Sibyl and Sibyl's happiness. Children begin by loving their parents; as they grow older they judge them; sometimes they forgive them. His mother! He had something on his mind to ask of her, something that he had brooded on for many months of silence. A chance phrase that he had heard at the theatre, a whispered sneer that had reached his ears one night as he waited at the stage-door, had set loose a train of horrible thoughts. He remembered it as if it had been the lash of a hunting-crop across his face. His brows knit together into a wedge-like furrow, and with a twitch of pain he bit his underlip. "You are not listening to a word I am saying, Jim," cried Sibyl, "and I am making the most delightful plans for your future. Do say something." "What do you want me to say?" "Oh! that you will be a good boy and not forget us," she answered, smiling at him. He shrugged his shoulders. "You are more likely to forget me than I am to forget you, Sibyl." She flushed. "What do you mean, Jim?" she asked. "You have a new friend, I hear. Who is he? Why have you not told me about him? He means you no good." "Stop, Jim!" she exclaimed. "You must not say anything against him. I love him." "Why, you don't even know his name," answered the lad. "Who is he? I have a right to know." "He is called Prince Charming. Don't you like the name. Oh! you silly boy! you should never forget it. If you only saw him, you would think him the most wonderful person in the world. Some day you will meet him--when you come back from Australia. You will like him so much. Everybody likes him, and I ... love him. I wish you could come to the theatre to-night. He is going to be there, and I am to play Juliet. Oh! how I shall play it! Fancy, Jim, to be in love and play Juliet! To have him sitting there! To play for his delight! I am afraid I may frighten the company, frighten or enthrall them. To be in love is to surpass one's self. Poor dreadful Mr. Isaacs will be shouting 'genius' to his loafers at the bar. He has preached me as a dogma; to-night he will announce me as a revelation. I feel it. And it is all his, his only, Prince Charming, my wonderful lover, my god of graces. But I am poor beside him. Poor? What does that matter? When poverty creeps in at the door, love flies in through the window. Our proverbs want rewriting. They were made in winter, and it is summer now; spring-time for me, I think, a very dance of blossoms in blue skies." "He is a gentleman," said the lad sullenly. "A prince!" she cried musically. "What more do you want?" "He wants to enslave you." "I shudder at the thought of being free." "I want you to beware of him." "To see him is to worship him; to know him is to trust him." "Sibyl, you are mad about him." She laughed and took his arm. "You dear old Jim, you talk as if you were a hundred. Some day you will be in love yourself. Then you will know what it is. Don't look so sulky. Surely you should be glad to think that, though you are going away, you leave me happier than I have ever been before. Life has been hard for us both, terribly hard and difficult. But it will be different now. You are going to a new world, and I have found one. Here are two chairs; let us sit down and see the smart people go by." They took their seats amidst a crowd of watchers. The tulip-beds across the road flamed like throbbing rings of fire. A white dust--tremulous cloud of orris-root it seemed--hung in the panting air. The brightly coloured parasols danced and dipped like monstrous butterflies. She made her brother talk of himself, his hopes, his prospects. He spoke slowly and with effort. They passed words to each other as players at a game pass counters. Sibyl felt oppressed. She could not communicate her joy. A faint smile curving that sullen mouth was all the echo she could win. After some time she became silent. Suddenly she caught a glimpse of golden hair and laughing lips, and in an open carriage with two ladies Dorian Gray drove past. She started to her feet. "There he is!" she cried. "Who?" said Jim Vane. "Prince Charming," she answered, looking after the victoria. He jumped up and seized her roughly by the arm. "Show him to me. Which is he? Point him out. I must see him!" he exclaimed; but at that moment the Duke of Berwick's four-in-hand came between, and when it had left the space clear, the carriage had swept out of the park. "He is gone," murmured Sibyl sadly. "I wish you had seen him." "I wish I had, for as sure as there is a God in heaven, if he ever does you any wrong, I shall kill him." She looked at him in horror. He repeated his words. They cut the air like a dagger. The people round began to gape. A lady standing close to her tittered. "Come away, Jim; come away," she whispered. He followed her doggedly as she passed through the crowd. He felt glad at what he had said. When they reached the Achilles Statue, she turned round. There was pity in her eyes that became laughter on her lips. She shook her head at him. "You are foolish, Jim, utterly foolish; a bad-tempered boy, that is all. How can you say such horrible things? You don't know what you are talking about. You are simply jealous and unkind. Ah! I wish you would fall in love. Love makes people good, and what you said was wicked." "I am sixteen," he answered, "and I know what I am about. Mother is no help to you. She doesn't understand how to look after you. I wish now that I was not going to Australia at all. I have a great mind to chuck the whole thing up. I would, if my articles hadn't been signed." "Oh, don't be so serious, Jim. You are like one of the heroes of those silly melodramas Mother used to be so fond of acting in. I am not going to quarrel with you. I have seen him, and oh! to see him is perfect happiness. We won't quarrel. I know you would never harm any one I love, would you?" "Not as long as you love him, I suppose," was the sullen answer. "I shall love him for ever!" she cried. "And he?" "For ever, too!" "He had better." She shrank from him. Then she laughed and put her hand on his arm. He was merely a boy. At the Marble Arch they hailed an omnibus, which left them close to their shabby home in the Euston Road. It was after five o'clock, and Sibyl had to lie down for a couple of hours before acting. Jim insisted that she should do so. He said that he would sooner part with her when their mother was not present. She would be sure to make a scene, and he detested scenes of every kind. In Sybil's own room they parted. There was jealousy in the lad's heart, and a fierce murderous hatred of the stranger who, as it seemed to him, had come between them. Yet, when her arms were flung round his neck, and her fingers strayed through his hair, he softened and kissed her with real affection. There were tears in his eyes as he went downstairs. His mother was waiting for him below. She grumbled at his unpunctuality, as he entered. He made no answer, but sat down to his meagre meal. The flies buzzed round the table and crawled over the stained cloth. Through the rumble of omnibuses, and the clatter of street-cabs, he could hear the droning voice devouring each minute that was left to him. After some time, he thrust away his plate and put his head in his hands. He felt that he had a right to know. It should have been told to him before, if it was as he suspected. Leaden with fear, his mother watched him. Words dropped mechanically from her lips. A tattered lace handkerchief twitched in her fingers. When the clock struck six, he got up and went to the door. Then he turned back and looked at her. Their eyes met. In hers he saw a wild appeal for mercy. It enraged him. "Mother, I have something to ask you," he said. Her eyes wandered vaguely about the room. She made no answer. "Tell me the truth. I have a right to know. Were you married to my father?" She heaved a deep sigh. It was a sigh of relief. The terrible moment, the moment that night and day, for weeks and months, she had dreaded, had come at last, and yet she felt no terror. Indeed, in some measure it was a disappointment to her. The vulgar directness of the question called for a direct answer. The situation had not been gradually led up to. It was crude. It reminded her of a bad rehearsal. "No," she answered, wondering at the harsh simplicity of life. "My father was a scoundrel then!" cried the lad, clenching his fists. She shook her head. "I knew he was not free. We loved each other very much. If he had lived, he would have made provision for us. Don't speak against him, my son. He was your father, and a gentleman. Indeed, he was highly connected." An oath broke from his lips. "I don't care for myself," he exclaimed, "but don't let Sibyl.... It is a gentleman, isn't it, who is in love with her, or says he is? Highly connected, too, I suppose." For a moment a hideous sense of humiliation came over the woman. Her head drooped. She wiped her eyes with shaking hands. "Sibyl has a mother," she murmured; "I had none." The lad was touched. He went towards her, and stooping down, he kissed her. "I am sorry if I have pained you by asking about my father," he said, "but I could not help it. I must go now. Good-bye. Don't forget that you will have only one child now to look after, and believe me that if this man wrongs my sister, I will find out who he is, track him down, and kill him like a dog. I swear it." The exaggerated folly of the threat, the passionate gesture that accompanied it, the mad melodramatic words, made life seem more vivid to her. She was familiar with the atmosphere. She breathed more freely, and for the first time for many months she really admired her son. She would have liked to have continued the scene on the same emotional scale, but he cut her short. Trunks had to be carried down and mufflers looked for. The lodging-house drudge bustled in and out. There was the bargaining with the cabman. The moment was lost in vulgar details. It was with a renewed feeling of disappointment that she waved the tattered lace handkerchief from the window, as her son drove away. She was conscious that a great opportunity had been wasted. She consoled herself by telling Sibyl how desolate she felt her life would be, now that she had only one child to look after. She remembered the phrase. It had pleased her. Of the threat she said nothing. It was vividly and dramatically expressed. She felt that they would all laugh at it some day. CHAPTER 6 "I suppose you have heard the news, Basil?" said Lord Henry that evening as Hallward was shown into a little private room at the Bristol where dinner had been laid for three. "No, Harry," answered the artist, giving his hat and coat to the bowing waiter. "What is it? Nothing about politics, I hope! They don't interest me. There is hardly a single person in the House of Commons worth painting, though many of them would be the better for a little whitewashing." "Dorian Gray is engaged to be married," said Lord Henry, watching him as he spoke. Hallward started and then frowned. "Dorian engaged to be married!" he cried. "Impossible!" "It is perfectly true." "To whom?" "To some little actress or other." "I can't believe it. Dorian is far too sensible." "Dorian is far too wise not to do foolish things now and then, my dear Basil." "Marriage is hardly a thing that one can do now and then, Harry." "Except in America," rejoined Lord Henry languidly. "But I didn't say he was married. I said he was engaged to be married. There is a great difference. I have a distinct remembrance of being married, but I have no recollection at all of being engaged. I am inclined to think that I never was engaged." "But think of Dorian's birth, and position, and wealth. It would be absurd for him to marry so much beneath him." "If you want to make him marry this girl, tell him that, Basil. He is sure to do it, then. Whenever a man does a thoroughly stupid thing, it is always from the noblest motives." "I hope the girl is good, Harry. I don't want to see Dorian tied to some vile creature, who might degrade his nature and ruin his intellect." "Oh, she is better than good--she is beautiful," murmured Lord Henry, sipping a glass of vermouth and orange-bitters. "Dorian says she is beautiful, and he is not often wrong about things of that kind. Your portrait of him has quickened his appreciation of the personal appearance of other people. It has had that excellent effect, amongst others. We are to see her to-night, if that boy doesn't forget his appointment." "Are you serious?" "Quite serious, Basil. I should be miserable if I thought I should ever be more serious than I am at the present moment." "But do you approve of it, Harry?" asked the painter, walking up and down the room and biting his lip. "You can't approve of it, possibly. It is some silly infatuation." "I never approve, or disapprove, of anything now. It is an absurd attitude to take towards life. We are not sent into the world to air our moral prejudices. I never take any notice of what common people say, and I never interfere with what charming people do. If a personality fascinates me, whatever mode of expression that personality selects is absolutely delightful to me. Dorian Gray falls in love with a beautiful girl who acts Juliet, and proposes to marry her. Why not? If he wedded Messalina, he would be none the less interesting. You know I am not a champion of marriage. The real drawback to marriage is that it makes one unselfish. And unselfish people are colourless. They lack individuality. Still, there are certain temperaments that marriage makes more complex. They retain their egotism, and add to it many other egos. They are forced to have more than one life. They become more highly organized, and to be highly organized is, I should fancy, the object of man's existence. Besides, every experience is of value, and whatever one may say against marriage, it is certainly an experience. I hope that Dorian Gray will make this girl his wife, passionately adore her for six months, and then suddenly become fascinated by some one else. He would be a wonderful study." "You don't mean a single word of all that, Harry; you know you don't. If Dorian Gray's life were spoiled, no one would be sorrier than yourself. You are much better than you pretend to be." Lord Henry laughed. "The reason we all like to think so well of others is that we are all afraid for ourselves. The basis of optimism is sheer terror. We think that we are generous because we credit our neighbour with the possession of those virtues that are likely to be a benefit to us. We praise the banker that we may overdraw our account, and find good qualities in the highwayman in the hope that he may spare our pockets. I mean everything that I have said. I have the greatest contempt for optimism. As for a spoiled life, no life is spoiled but one whose growth is arrested. If you want to mar a nature, you have merely to reform it. As for marriage, of course that would be silly, but there are other and more interesting bonds between men and women. I will certainly encourage them. They have the charm of being fashionable. But here is Dorian himself. He will tell you more than I can." "My dear Harry, my dear Basil, you must both congratulate me!" said the lad, throwing off his evening cape with its satin-lined wings and shaking each of his friends by the hand in turn. "I have never been so happy. Of course, it is sudden--all really delightful things are. And yet it seems to me to be the one thing I have been looking for all my life." He was flushed with excitement and pleasure, and looked extraordinarily handsome. "I hope you will always be very happy, Dorian," said Hallward, "but I don't quite forgive you for not having let me know of your engagement. You let Harry know." "And I don't forgive you for being late for dinner," broke in Lord Henry, putting his hand on the lad's shoulder and smiling as he spoke. "Come, let us sit down and try what the new _chef_ here is like, and then you will tell us how it all came about." "There is really not much to tell," cried Dorian as they took their seats at the small round table. "What happened was simply this. After I left you yesterday evening, Harry, I dressed, had some dinner at that little Italian restaurant in Rupert Street you introduced me to, and went down at eight o'clock to the theatre. Sibyl was playing Rosalind. Of course, the scenery was dreadful and the Orlando absurd. But Sibyl! You should have seen her! When she came on in her boy's clothes, she was perfectly wonderful. She wore a moss-coloured velvet jerkin with cinnamon sleeves, slim, brown, cross-gartered hose, a dainty little green cap with a hawk's feather caught in a jewel, and a hooded cloak lined with dull red. She had never seemed to me more exquisite. She had all the delicate grace of that Tanagra figurine that you have in your studio, Basil. Her hair clustered round her face like dark leaves round a pale rose. As for her acting--well, you shall see her to-night. She is simply a born artist. I sat in the dingy box absolutely enthralled. I forgot that I was in London and in the nineteenth century. I was away with my love in a forest that no man had ever seen. After the performance was over, I went behind and spoke to her. As we were sitting together, suddenly there came into her eyes a look that I had never seen there before. My lips moved towards hers. We kissed each other. I can't describe to you what I felt at that moment. It seemed to me that all my life had been narrowed to one perfect point of rose-coloured joy. She trembled all over and shook like a white narcissus. Then she flung herself on her knees and kissed my hands. I feel that I should not tell you all this, but I can't help it. Of course, our engagement is a dead secret. She has not even told her own mother. I don't know what my guardians will say. Lord Radley is sure to be furious. I don't care. I shall be of age in less than a year, and then I can do what I like. I have been right, Basil, haven't I, to take my love out of poetry and to find my wife in Shakespeare's plays? Lips that Shakespeare taught to speak have whispered their secret in my ear. I have had the arms of Rosalind around me, and kissed Juliet on the mouth." "Yes, Dorian, I suppose you were right," said Hallward slowly. "Have you seen her to-day?" asked Lord Henry. Dorian Gray shook his head. "I left her in the forest of Arden; I shall find her in an orchard in Verona." Lord Henry sipped his champagne in a meditative manner. "At what particular point did you mention the word marriage, Dorian? And what did she say in answer? Perhaps you forgot all about it." "My dear Harry, I did not treat it as a business transaction, and I did not make any formal proposal. I told her that I loved her, and she said she was not worthy to be my wife. Not worthy! Why, the whole world is nothing to me compared with her." "Women are wonderfully practical," murmured Lord Henry, "much more practical than we are. In situations of that kind we often forget to say anything about marriage, and they always remind us." Hallward laid his hand upon his arm. "Don't, Harry. You have annoyed Dorian. He is not like other men. He would never bring misery upon any one. His nature is too fine for that." Lord Henry looked across the table. "Dorian is never annoyed with me," he answered. "I asked the question for the best reason possible, for the only reason, indeed, that excuses one for asking any question--simple curiosity. I have a theory that it is always the women who propose to us, and not we who propose to the women. Except, of course, in middle-class life. But then the middle classes are not modern." Dorian Gray laughed, and tossed his head. "You are quite incorrigible, Harry; but I don't mind. It is impossible to be angry with you. When you see Sibyl Vane, you will feel that the man who could wrong her would be a beast, a beast without a heart. I cannot understand how any one can wish to shame the thing he loves. I love Sibyl Vane. I want to place her on a pedestal of gold and to see the world worship the woman who is mine. What is marriage? An irrevocable vow. You mock at it for that. Ah! don't mock. It is an irrevocable vow that I want to take. Her trust makes me faithful, her belief makes me good. When I am with her, I regret all that you have taught me. I become different from what you have known me to be. I am changed, and the mere touch of Sibyl Vane's hand makes me forget you and all your wrong, fascinating, poisonous, delightful theories." "And those are ...?" asked Lord Henry, helping himself to some salad. "Oh, your theories about life, your theories about love, your theories about pleasure. All your theories, in fact, Harry." "Pleasure is the only thing worth having a theory about," he answered in his slow melodious voice. "But I am afraid I cannot claim my theory as my own. It belongs to Nature, not to me. Pleasure is Nature's test, her sign of approval. When we are happy, we are always good, but when we are good, we are not always happy." "Ah! but what do you mean by good?" cried Basil Hallward. "Yes," echoed Dorian, leaning back in his chair and looking at Lord Henry over the heavy clusters of purple-lipped irises that stood in the centre of the table, "what do you mean by good, Harry?" "To be good is to be in harmony with one's self," he replied, touching the thin stem of his glass with his pale, fine-pointed fingers. "Discord is to be forced to be in harmony with others. One's own life--that is the important thing. As for the lives of one's neighbours, if one wishes to be a prig or a Puritan, one can flaunt one's moral views about them, but they are not one's concern. Besides, individualism has really the higher aim. Modern morality consists in accepting the standard of one's age. I consider that for any man of culture to accept the standard of his age is a form of the grossest immorality." "But, surely, if one lives merely for one's self, Harry, one pays a terrible price for doing so?" suggested the painter. "Yes, we are overcharged for everything nowadays. I should fancy that the real tragedy of the poor is that they can afford nothing but self-denial. Beautiful sins, like beautiful things, are the privilege of the rich." "One has to pay in other ways but money." "What sort of ways, Basil?" "Oh! I should fancy in remorse, in suffering, in ... well, in the consciousness of degradation." Lord Henry shrugged his shoulders. "My dear fellow, mediaeval art is charming, but mediaeval emotions are out of date. One can use them in fiction, of course. But then the only things that one can use in fiction are the things that one has ceased to use in fact. Believe me, no civilized man ever regrets a pleasure, and no uncivilized man ever knows what a pleasure is." "I know what pleasure is," cried Dorian Gray. "It is to adore some one." "That is certainly better than being adored," he answered, toying with some fruits. "Being adored is a nuisance. Women treat us just as humanity treats its gods. They worship us, and are always bothering us to do something for them." "I should have said that whatever they ask for they had first given to us," murmured the lad gravely. "They create love in our natures. They have a right to demand it back." "That is quite true, Dorian," cried Hallward. "Nothing is ever quite true," said Lord Henry. "This is," interrupted Dorian. "You must admit, Harry, that women give to men the very gold of their lives." "Possibly," he sighed, "but they invariably want it back in such very small change. That is the worry. Women, as some witty Frenchman once put it, inspire us with the desire to do masterpieces and always prevent us from carrying them out." "Harry, you are dreadful! I don't know why I like you so much." "You will always like me, Dorian," he replied. "Will you have some coffee, you fellows? Waiter, bring coffee, and _fine-champagne_, and some cigarettes. No, don't mind the cigarettes--I have some. Basil, I can't allow you to smoke cigars. You must have a cigarette. A cigarette is the perfect type of a perfect pleasure. It is exquisite, and it leaves one unsatisfied. What more can one want? Yes, Dorian, you will always be fond of me. I represent to you all the sins you have never had the courage to commit." "What nonsense you talk, Harry!" cried the lad, taking a light from a fire-breathing silver dragon that the waiter had placed on the table. "Let us go down to the theatre. When Sibyl comes on the stage you will have a new ideal of life. She will represent something to you that you have never known." "I have known everything," said Lord Henry, with a tired look in his eyes, "but I am always ready for a new emotion. I am afraid, however, that, for me at any rate, there is no such thing. Still, your wonderful girl may thrill me. I love acting. It is so much more real than life. Let us go. Dorian, you will come with me. I am so sorry, Basil, but there is only room for two in the brougham. You must follow us in a hansom." They got up and put on their coats, sipping their coffee standing. The painter was silent and preoccupied. There was a gloom over him. He could not bear this marriage, and yet it seemed to him to be better than many other things that might have happened. After a few minutes, they all passed downstairs. He drove off by himself, as had been arranged, and watched the flashing lights of the little brougham in front of him. A strange sense of loss came over him. He felt that Dorian Gray would never again be to him all that he had been in the past. Life had come between them.... His eyes darkened, and the crowded flaring streets became blurred to his eyes. When the cab drew up at the theatre, it seemed to him that he had grown years older. CHAPTER 7 For some reason or other, the house was crowded that night, and the fat Jew manager who met them at the door was beaming from ear to ear with an oily tremulous smile. He escorted them to their box with a sort of pompous humility, waving his fat jewelled hands and talking at the top of his voice. Dorian Gray loathed him more than ever. He felt as if he had come to look for Miranda and had been met by Caliban. Lord Henry, upon the other hand, rather liked him. At least he declared he did, and insisted on shaking him by the hand and assuring him that he was proud to meet a man who had discovered a real genius and gone bankrupt over a poet. Hallward amused himself with watching the faces in the pit. The heat was terribly oppressive, and the huge sunlight flamed like a monstrous dahlia with petals of yellow fire. The youths in the gallery had taken off their coats and waistcoats and hung them over the side. They talked to each other across the theatre and shared their oranges with the tawdry girls who sat beside them. Some women were laughing in the pit. Their voices were horribly shrill and discordant. The sound of the popping of corks came from the bar. "What a place to find one's divinity in!" said Lord Henry. "Yes!" answered Dorian Gray. "It was here I found her, and she is divine beyond all living things. When she acts, you will forget everything. These common rough people, with their coarse faces and brutal gestures, become quite different when she is on the stage. They sit silently and watch her. They weep and laugh as she wills them to do. She makes them as responsive as a violin. She spiritualizes them, and one feels that they are of the same flesh and blood as one's self." "The same flesh and blood as one's self! Oh, I hope not!" exclaimed Lord Henry, who was scanning the occupants of the gallery through his opera-glass. "Don't pay any attention to him, Dorian," said the painter. "I understand what you mean, and I believe in this girl. Any one you love must be marvellous, and any girl who has the effect you describe must be fine and noble. To spiritualize one's age--that is something worth doing. If this girl can give a soul to those who have lived without one, if she can create the sense of beauty in people whose lives have been sordid and ugly, if she can strip them of their selfishness and lend them tears for sorrows that are not their own, she is worthy of all your adoration, worthy of the adoration of the world. This marriage is quite right. I did not think so at first, but I admit it now. The gods made Sibyl Vane for you. Without her you would have been incomplete." "Thanks, Basil," answered Dorian Gray, pressing his hand. "I knew that you would understand me. Harry is so cynical, he terrifies me. But here is the orchestra. It is quite dreadful, but it only lasts for about five minutes. Then the curtain rises, and you will see the girl to whom I am going to give all my life, to whom I have given everything that is good in me." A quarter of an hour afterwards, amidst an extraordinary turmoil of applause, Sibyl Vane stepped on to the stage. Yes, she was certainly lovely to look at--one of the loveliest creatures, Lord Henry thought, that he had ever seen. There was something of the fawn in her shy grace and startled eyes. A faint blush, like the shadow of a rose in a mirror of silver, came to her cheeks as she glanced at the crowded enthusiastic house. She stepped back a few paces and her lips seemed to tremble. Basil Hallward leaped to his feet and began to applaud. Motionless, and as one in a dream, sat Dorian Gray, gazing at her. Lord Henry peered through his glasses, murmuring, "Charming! charming!" The scene was the hall of Capulet's house, and Romeo in his pilgrim's dress had entered with Mercutio and his other friends. The band, such as it was, struck up a few bars of music, and the dance began. Through the crowd of ungainly, shabbily dressed actors, Sibyl Vane moved like a creature from a finer world. Her body swayed, while she danced, as a plant sways in the water. The curves of her throat were the curves of a white lily. Her hands seemed to be made of cool ivory. Yet she was curiously listless. She showed no sign of joy when her eyes rested on Romeo. The few words she had to speak-- Good pilgrim, you do wrong your hand too much, Which mannerly devotion shows in this; For saints have hands that pilgrims' hands do touch, And palm to palm is holy palmers' kiss-- with the brief dialogue that follows, were spoken in a thoroughly artificial manner. The voice was exquisite, but from the point of view of tone it was absolutely false. It was wrong in colour. It took away all the life from the verse. It made the passion unreal. Dorian Gray grew pale as he watched her. He was puzzled and anxious. Neither of his friends dared to say anything to him. She seemed to them to be absolutely incompetent. They were horribly disappointed. Yet they felt that the true test of any Juliet is the balcony scene of the second act. They waited for that. If she failed there, there was nothing in her. She looked charming as she came out in the moonlight. That could not be denied. But the staginess of her acting was unbearable, and grew worse as she went on. Her gestures became absurdly artificial. She overemphasized everything that she had to say. The beautiful passage-- Thou knowest the mask of night is on my face, Else would a maiden blush bepaint my cheek For that which thou hast heard me speak to-night-- was declaimed with the painful precision of a schoolgirl who has been taught to recite by some second-rate professor of elocution. When she leaned over the balcony and came to those wonderful lines-- Although I joy in thee, I have no joy of this contract to-night: It is too rash, too unadvised, too sudden; Too like the lightning, which doth cease to be Ere one can say, "It lightens." Sweet, good-night! This bud of love by summer's ripening breath May prove a beauteous flower when next we meet-- she spoke the words as though they conveyed no meaning to her. It was not nervousness. Indeed, so far from being nervous, she was absolutely self-contained. It was simply bad art. She was a complete failure. Even the common uneducated audience of the pit and gallery lost their interest in the play. They got restless, and began to talk loudly and to whistle. The Jew manager, who was standing at the back of the dress-circle, stamped and swore with rage. The only person unmoved was the girl herself. When the second act was over, there came a storm of hisses, and Lord Henry got up from his chair and put on his coat. "She is quite beautiful, Dorian," he said, "but she can't act. Let us go." "I am going to see the play through," answered the lad, in a hard bitter voice. "I am awfully sorry that I have made you waste an evening, Harry. I apologize to you both." "My dear Dorian, I should think Miss Vane was ill," interrupted Hallward. "We will come some other night." "I wish she were ill," he rejoined. "But she seems to me to be simply callous and cold. She has entirely altered. Last night she was a great artist. This evening she is merely a commonplace mediocre actress." "Don't talk like that about any one you love, Dorian. Love is a more wonderful thing than art." "They are both simply forms of imitation," remarked Lord Henry. "But do let us go. Dorian, you must not stay here any longer. It is not good for one's morals to see bad acting. Besides, I don't suppose you will want your wife to act, so what does it matter if she plays Juliet like a wooden doll? She is very lovely, and if she knows as little about life as she does about acting, she will be a delightful experience. There are only two kinds of people who are really fascinating--people who know absolutely everything, and people who know absolutely nothing. Good heavens, my dear boy, don't look so tragic! The secret of remaining young is never to have an emotion that is unbecoming. Come to the club with Basil and myself. We will smoke cigarettes and drink to the beauty of Sibyl Vane. She is beautiful. What more can you want?" "Go away, Harry," cried the lad. "I want to be alone. Basil, you must go. Ah! can't you see that my heart is breaking?" The hot tears came to his eyes. His lips trembled, and rushing to the back of the box, he leaned up against the wall, hiding his face in his hands. "Let us go, Basil," said Lord Henry with a strange tenderness in his voice, and the two young men passed out together. A few moments afterwards the footlights flared up and the curtain rose on the third act. Dorian Gray went back to his seat. He looked pale, and proud, and indifferent. The play dragged on, and seemed interminable. Half of the audience went out, tramping in heavy boots and laughing. The whole thing was a _fiasco_. The last act was played to almost empty benches. The curtain went down on a titter and some groans. As soon as it was over, Dorian Gray rushed behind the scenes into the greenroom. The girl was standing there alone, with a look of triumph on her face. Her eyes were lit with an exquisite fire. There was a radiance about her. Her parted lips were smiling over some secret of their own. When he entered, she looked at him, and an expression of infinite joy came over her. "How badly I acted to-night, Dorian!" she cried. "Horribly!" he answered, gazing at her in amazement. "Horribly! It was dreadful. Are you ill? You have no idea what it was. You have no idea what I suffered." The girl smiled. "Dorian," she answered, lingering over his name with long-drawn music in her voice, as though it were sweeter than honey to the red petals of her mouth. "Dorian, you should have understood. But you understand now, don't you?" "Understand what?" he asked, angrily. "Why I was so bad to-night. Why I shall always be bad. Why I shall never act well again." He shrugged his shoulders. "You are ill, I suppose. When you are ill you shouldn't act. You make yourself ridiculous. My friends were bored. I was bored." She seemed not to listen to him. She was transfigured with joy. An ecstasy of happiness dominated her. "Dorian, Dorian," she cried, "before I knew you, acting was the one reality of my life. It was only in the theatre that I lived. I thought that it was all true. I was Rosalind one night and Portia the other. The joy of Beatrice was my joy, and the sorrows of Cordelia were mine also. I believed in everything. The common people who acted with me seemed to me to be godlike. The painted scenes were my world. I knew nothing but shadows, and I thought them real. You came--oh, my beautiful love!--and you freed my soul from prison. You taught me what reality really is. To-night, for the first time in my life, I saw through the hollowness, the sham, the silliness of the empty pageant in which I had always played. To-night, for the first time, I became conscious that the Romeo was hideous, and old, and painted, that the moonlight in the orchard was false, that the scenery was vulgar, and that the words I had to speak were unreal, were not my words, were not what I wanted to say. You had brought me something higher, something of which all art is but a reflection. You had made me understand what love really is. My love! My love! Prince Charming! Prince of life! I have grown sick of shadows. You are more to me than all art can ever be. What have I to do with the puppets of a play? When I came on to-night, I could not understand how it was that everything had gone from me. I thought that I was going to be wonderful. I found that I could do nothing. Suddenly it dawned on my soul what it all meant. The knowledge was exquisite to me. I heard them hissing, and I smiled. What could they know of love such as ours? Take me away, Dorian--take me away with you, where we can be quite alone. I hate the stage. I might mimic a passion that I do not feel, but I cannot mimic one that burns me like fire. Oh, Dorian, Dorian, you understand now what it signifies? Even if I could do it, it would be profanation for me to play at being in love. You have made me see that." He flung himself down on the sofa and turned away his face. "You have killed my love," he muttered. She looked at him in wonder and laughed. He made no answer. She came across to him, and with her little fingers stroked his hair. She knelt down and pressed his hands to her lips. He drew them away, and a shudder ran through him. Then he leaped up and went to the door. "Yes," he cried, "you have killed my love. You used to stir my imagination. Now you don't even stir my curiosity. You simply produce no effect. I loved you because you were marvellous, because you had genius and intellect, because you realized the dreams of great poets and gave shape and substance to the shadows of art. You have thrown it all away. You are shallow and stupid. My God! how mad I was to love you! What a fool I have been! You are nothing to me now. I will never see you again. I will never think of you. I will never mention your name. You don't know what you were to me, once. Why, once ... Oh, I can't bear to think of it! I wish I had never laid eyes upon you! You have spoiled the romance of my life. How little you can know of love, if you say it mars your art! Without your art, you are nothing. I would have made you famous, splendid, magnificent. The world would have worshipped you, and you would have borne my name. What are you now? A third-rate actress with a pretty face." The girl grew white, and trembled. She clenched her hands together, and her voice seemed to catch in her throat. "You are not serious, Dorian?" she murmured. "You are acting." "Acting! I leave that to you. You do it so well," he answered bitterly. She rose from her knees and, with a piteous expression of pain in her face, came across the room to him. She put her hand upon his arm and looked into his eyes. He thrust her back. "Don't touch me!" he cried. A low moan broke from her, and she flung herself at his feet and lay there like a trampled flower. "Dorian, Dorian, don't leave me!" she whispered. "I am so sorry I didn't act well. I was thinking of you all the time. But I will try--indeed, I will try. It came so suddenly across me, my love for you. I think I should never have known it if you had not kissed me--if we had not kissed each other. Kiss me again, my love. Don't go away from me. I couldn't bear it. Oh! don't go away from me. My brother ... No; never mind. He didn't mean it. He was in jest.... But you, oh! can't you forgive me for to-night? I will work so hard and try to improve. Don't be cruel to me, because I love you better than anything in the world. After all, it is only once that I have not pleased you. But you are quite right, Dorian. I should have shown myself more of an artist. It was foolish of me, and yet I couldn't help it. Oh, don't leave me, don't leave me." A fit of passionate sobbing choked her. She crouched on the floor like a wounded thing, and Dorian Gray, with his beautiful eyes, looked down at her, and his chiselled lips curled in exquisite disdain. There is always something ridiculous about the emotions of people whom one has ceased to love. Sibyl Vane seemed to him to be absurdly melodramatic. Her tears and sobs annoyed him. "I am going," he said at last in his calm clear voice. "I don't wish to be unkind, but I can't see you again. You have disappointed me." She wept silently, and made no answer, but crept nearer. Her little hands stretched blindly out, and appeared to be seeking for him. He turned on his heel and left the room. In a few moments he was out of the theatre. Where he went to he hardly knew. He remembered wandering through dimly lit streets, past gaunt, black-shadowed archways and evil-looking houses. Women with hoarse voices and harsh laughter had called after him. Drunkards had reeled by, cursing and chattering to themselves like monstrous apes. He had seen grotesque children huddled upon door-steps, and heard shrieks and oaths from gloomy courts. As the dawn was just breaking, he found himself close to Covent Garden. The darkness lifted, and, flushed with faint fires, the sky hollowed itself into a perfect pearl. Huge carts filled with nodding lilies rumbled slowly down the polished empty street. The air was heavy with the perfume of the flowers, and their beauty seemed to bring him an anodyne for his pain. He followed into the market and watched the men unloading their waggons. A white-smocked carter offered him some cherries. He thanked him, wondered why he refused to accept any money for them, and began to eat them listlessly. They had been plucked at midnight, and the coldness of the moon had entered into them. A long line of boys carrying crates of striped tulips, and of yellow and red roses, defiled in front of him, threading their way through the huge, jade-green piles of vegetables. Under the portico, with its grey, sun-bleached pillars, loitered a troop of draggled bareheaded girls, waiting for the auction to be over. Others crowded round the swinging doors of the coffee-house in the piazza. The heavy cart-horses slipped and stamped upon the rough stones, shaking their bells and trappings. Some of the drivers were lying asleep on a pile of sacks. Iris-necked and pink-footed, the pigeons ran about picking up seeds. After a little while, he hailed a hansom and drove home. For a few moments he loitered upon the doorstep, looking round at the silent square, with its blank, close-shuttered windows and its staring blinds. The sky was pure opal now, and the roofs of the houses glistened like silver against it. From some chimney opposite a thin wreath of smoke was rising. It curled, a violet riband, through the nacre-coloured air. In the huge gilt Venetian lantern, spoil of some Doge's barge, that hung from the ceiling of the great, oak-panelled hall of entrance, lights were still burning from three flickering jets: thin blue petals of flame they seemed, rimmed with white fire. He turned them out and, having thrown his hat and cape on the table, passed through the library towards the door of his bedroom, a large octagonal chamber on the ground floor that, in his new-born feeling for luxury, he had just had decorated for himself and hung with some curious Renaissance tapestries that had been discovered stored in a disused attic at Selby Royal. As he was turning the handle of the door, his eye fell upon the portrait Basil Hallward had painted of him. He started back as if in surprise. Then he went on into his own room, looking somewhat puzzled. After he had taken the button-hole out of his coat, he seemed to hesitate. Finally, he came back, went over to the picture, and examined it. In the dim arrested light that struggled through the cream-coloured silk blinds, the face appeared to him to be a little changed. The expression looked different. One would have said that there was a touch of cruelty in the mouth. It was certainly strange. He turned round and, walking to the window, drew up the blind. The bright dawn flooded the room and swept the fantastic shadows into dusky corners, where they lay shuddering. But the strange expression that he had noticed in the face of the portrait seemed to linger there, to be more intensified even. The quivering ardent sunlight showed him the lines of cruelty round the mouth as clearly as if he had been looking into a mirror after he had done some dreadful thing. He winced and, taking up from the table an oval glass framed in ivory Cupids, one of Lord Henry's many presents to him, glanced hurriedly into its polished depths. No line like that warped his red lips. What did it mean? He rubbed his eyes, and came close to the picture, and examined it again. There were no signs of any change when he looked into the actual painting, and yet there was no doubt that the whole expression had altered. It was not a mere fancy of his own. The thing was horribly apparent. He threw himself into a chair and began to think. Suddenly there flashed across his mind what he had said in Basil Hallward's studio the day the picture had been finished. Yes, he remembered it perfectly. He had uttered a mad wish that he himself might remain young, and the portrait grow old; that his own beauty might be untarnished, and the face on the canvas bear the burden of his passions and his sins; that the painted image might be seared with the lines of suffering and thought, and that he might keep all the delicate bloom and loveliness of his then just conscious boyhood. Surely his wish had not been fulfilled? Such things were impossible. It seemed monstrous even to think of them. And, yet, there was the picture before him, with the touch of cruelty in the mouth. Cruelty! Had he been cruel? It was the girl's fault, not his. He had dreamed of her as a great artist, had given his love to her because he had thought her great. Then she had disappointed him. She had been shallow and unworthy. And, yet, a feeling of infinite regret came over him, as he thought of her lying at his feet sobbing like a little child. He remembered with what callousness he had watched her. Why had he been made like that? Why had such a soul been given to him? But he had suffered also. During the three terrible hours that the play had lasted, he had lived centuries of pain, aeon upon aeon of torture. His life was well worth hers. She had marred him for a moment, if he had wounded her for an age. Besides, women were better suited to bear sorrow than men. They lived on their emotions. They only thought of their emotions. When they took lovers, it was merely to have some one with whom they could have scenes. Lord Henry had told him that, and Lord Henry knew what women were. Why should he trouble about Sibyl Vane? She was nothing to him now. But the picture? What was he to say of that? It held the secret of his life, and told his story. It had taught him to love his own beauty. Would it teach him to loathe his own soul? Would he ever look at it again? No; it was merely an illusion wrought on the troubled senses. The horrible night that he had passed had left phantoms behind it. Suddenly there had fallen upon his brain that tiny scarlet speck that makes men mad. The picture had not changed. It was folly to think so. Yet it was watching him, with its beautiful marred face and its cruel smile. Its bright hair gleamed in the early sunlight. Its blue eyes met his own. A sense of infinite pity, not for himself, but for the painted image of himself, came over him. It had altered already, and would alter more. Its gold would wither into grey. Its red and white roses would die. For every sin that he committed, a stain would fleck and wreck its fairness. But he would not sin. The picture, changed or unchanged, would be to him the visible emblem of conscience. He would resist temptation. He would not see Lord Henry any more--would not, at any rate, listen to those subtle poisonous theories that in Basil Hallward's garden had first stirred within him the passion for impossible things. He would go back to Sibyl Vane, make her amends, marry her, try to love her again. Yes, it was his duty to do so. She must have suffered more than he had. Poor child! He had been selfish and cruel to her. The fascination that she had exercised over him would return. They would be happy together. His life with her would be beautiful and pure. He got up from his chair and drew a large screen right in front of the portrait, shuddering as he glanced at it. "How horrible!" he murmured to himself, and he walked across to the window and opened it. When he stepped out on to the grass, he drew a deep breath. The fresh morning air seemed to drive away all his sombre passions. He thought only of Sibyl. A faint echo of his love came back to him. He repeated her name over and over again. The birds that were singing in the dew-drenched garden seemed to be telling the flowers about her. CHAPTER 8 It was long past noon when he awoke. His valet had crept several times on tiptoe into the room to see if he was stirring, and had wondered what made his young master sleep so late. Finally his bell sounded, and Victor came in softly with a cup of tea, and a pile of letters, on a small tray of old Sevres china, and drew back the olive-satin curtains, with their shimmering blue lining, that hung in front of the three tall windows. "Monsieur has well slept this morning," he said, smiling. "What o'clock is it, Victor?" asked Dorian Gray drowsily. "One hour and a quarter, Monsieur." How late it was! He sat up, and having sipped some tea, turned over his letters. One of them was from Lord Henry, and had been brought by hand that morning. He hesitated for a moment, and then put it aside. The others he opened listlessly. They contained the usual collection of cards, invitations to dinner, tickets for private views, programmes of charity concerts, and the like that are showered on fashionable young men every morning during the season. There was a rather heavy bill for a chased silver Louis-Quinze toilet-set that he had not yet had the courage to send on to his guardians, who were extremely old-fashioned people and did not realize that we live in an age when unnecessary things are our only necessities; and there were several very courteously worded communications from Jermyn Street money-lenders offering to advance any sum of money at a moment's notice and at the most reasonable rates of interest. After about ten minutes he got up, and throwing on an elaborate dressing-gown of silk-embroidered cashmere wool, passed into the onyx-paved bathroom. The cool water refreshed him after his long sleep. He seemed to have forgotten all that he had gone through. A dim sense of having taken part in some strange tragedy came to him once or twice, but there was the unreality of a dream about it. As soon as he was dressed, he went into the library and sat down to a light French breakfast that had been laid out for him on a small round table close to the open window. It was an exquisite day. The warm air seemed laden with spices. A bee flew in and buzzed round the blue-dragon bowl that, filled with sulphur-yellow roses, stood before him. He felt perfectly happy. Suddenly his eye fell on the screen that he had placed in front of the portrait, and he started. "Too cold for Monsieur?" asked his valet, putting an omelette on the table. "I shut the window?" Dorian shook his head. "I am not cold," he murmured. Was it all true? Had the portrait really changed? Or had it been simply his own imagination that had made him see a look of evil where there had been a look of joy? Surely a painted canvas could not alter? The thing was absurd. It would serve as a tale to tell Basil some day. It would make him smile. And, yet, how vivid was his recollection of the whole thing! First in the dim twilight, and then in the bright dawn, he had seen the touch of cruelty round the warped lips. He almost dreaded his valet leaving the room. He knew that when he was alone he would have to examine the portrait. He was afraid of certainty. When the coffee and cigarettes had been brought and the man turned to go, he felt a wild desire to tell him to remain. As the door was closing behind him, he called him back. The man stood waiting for his orders. Dorian looked at him for a moment. "I am not at home to any one, Victor," he said with a sigh. The man bowed and retired. Then he rose from the table, lit a cigarette, and flung himself down on a luxuriously cushioned couch that stood facing the screen. The screen was an old one, of gilt Spanish leather, stamped and wrought with a rather florid Louis-Quatorze pattern. He scanned it curiously, wondering if ever before it had concealed the secret of a man's life. Should he move it aside, after all? Why not let it stay there? What was the use of knowing? If the thing was true, it was terrible. If it was not true, why trouble about it? But what if, by some fate or deadlier chance, eyes other than his spied behind and saw the horrible change? What should he do if Basil Hallward came and asked to look at his own picture? Basil would be sure to do that. No; the thing had to be examined, and at once. Anything would be better than this dreadful state of doubt. He got up and locked both doors. At least he would be alone when he looked upon the mask of his shame. Then he drew the screen aside and saw himself face to face. It was perfectly true. The portrait had altered. As he often remembered afterwards, and always with no small wonder, he found himself at first gazing at the portrait with a feeling of almost scientific interest. That such a change should have taken place was incredible to him. And yet it was a fact. Was there some subtle affinity between the chemical atoms that shaped themselves into form and colour on the canvas and the soul that was within him? Could it be that what that soul thought, they realized?--that what it dreamed, they made true? Or was there some other, more terrible reason? He shuddered, and felt afraid, and, going back to the couch, lay there, gazing at the picture in sickened horror. One thing, however, he felt that it had done for him. It had made him conscious how unjust, how cruel, he had been to Sibyl Vane. It was not too late to make reparation for that. She could still be his wife. His unreal and selfish love would yield to some higher influence, would be transformed into some nobler passion, and the portrait that Basil Hallward had painted of him would be a guide to him through life, would be to him what holiness is to some, and conscience to others, and the fear of God to us all. There were opiates for remorse, drugs that could lull the moral sense to sleep. But here was a visible symbol of the degradation of sin. Here was an ever-present sign of the ruin men brought upon their souls. Three o'clock struck, and four, and the half-hour rang its double chime, but Dorian Gray did not stir. He was trying to gather up the scarlet threads of life and to weave them into a pattern; to find his way through the sanguine labyrinth of passion through which he was wandering. He did not know what to do, or what to think. Finally, he went over to the table and wrote a passionate letter to the girl he had loved, imploring her forgiveness and accusing himself of madness. He covered page after page with wild words of sorrow and wilder words of pain. There is a luxury in self-reproach. When we blame ourselves, we feel that no one else has a right to blame us. It is the confession, not the priest, that gives us absolution. When Dorian had finished the letter, he felt that he had been forgiven. Suddenly there came a knock to the door, and he heard Lord Henry's voice outside. "My dear boy, I must see you. Let me in at once. I can't bear your shutting yourself up like this." He made no answer at first, but remained quite still. The knocking still continued and grew louder. Yes, it was better to let Lord Henry in, and to explain to him the new life he was going to lead, to quarrel with him if it became necessary to quarrel, to part if parting was inevitable. He jumped up, drew the screen hastily across the picture, and unlocked the door. "I am so sorry for it all, Dorian," said Lord Henry as he entered. "But you must not think too much about it." "Do you mean about Sibyl Vane?" asked the lad. "Yes, of course," answered Lord Henry, sinking into a chair and slowly pulling off his yellow gloves. "It is dreadful, from one point of view, but it was not your fault. Tell me, did you go behind and see her, after the play was over?" "Yes." "I felt sure you had. Did you make a scene with her?" "I was brutal, Harry--perfectly brutal. But it is all right now. I am not sorry for anything that has happened. It has taught me to know myself better." "Ah, Dorian, I am so glad you take it in that way! I was afraid I would find you plunged in remorse and tearing that nice curly hair of yours." "I have got through all that," said Dorian, shaking his head and smiling. "I am perfectly happy now. I know what conscience is, to begin with. It is not what you told me it was. It is the divinest thing in us. Don't sneer at it, Harry, any more--at least not before me. I want to be good. I can't bear the idea of my soul being hideous." "A very charming artistic basis for ethics, Dorian! I congratulate you on it. But how are you going to begin?" "By marrying Sibyl Vane." "Marrying Sibyl Vane!" cried Lord Henry, standing up and looking at him in perplexed amazement. "But, my dear Dorian--" "Yes, Harry, I know what you are going to say. Something dreadful about marriage. Don't say it. Don't ever say things of that kind to me again. Two days ago I asked Sibyl to marry me. I am not going to break my word to her. She is to be my wife." "Your wife! Dorian! ... Didn't you get my letter? I wrote to you this morning, and sent the note down by my own man." "Your letter? Oh, yes, I remember. I have not read it yet, Harry. I was afraid there might be something in it that I wouldn't like. You cut life to pieces with your epigrams." "You know nothing then?" "What do you mean?" Lord Henry walked across the room, and sitting down by Dorian Gray, took both his hands in his own and held them tightly. "Dorian," he said, "my letter--don't be frightened--was to tell you that Sibyl Vane is dead." A cry of pain broke from the lad's lips, and he leaped to his feet, tearing his hands away from Lord Henry's grasp. "Dead! Sibyl dead! It is not true! It is a horrible lie! How dare you say it?" "It is quite true, Dorian," said Lord Henry, gravely. "It is in all the morning papers. I wrote down to you to ask you not to see any one till I came. There will have to be an inquest, of course, and you must not be mixed up in it. Things like that make a man fashionable in Paris. But in London people are so prejudiced. Here, one should never make one's _debut_ with a scandal. One should reserve that to give an interest to one's old age. I suppose they don't know your name at the theatre? If they don't, it is all right. Did any one see you going round to her room? That is an important point." Dorian did not answer for a few moments. He was dazed with horror. Finally he stammered, in a stifled voice, "Harry, did you say an inquest? What did you mean by that? Did Sibyl--? Oh, Harry, I can't bear it! But be quick. Tell me everything at once." "I have no doubt it was not an accident, Dorian, though it must be put in that way to the public. It seems that as she was leaving the theatre with her mother, about half-past twelve or so, she said she had forgotten something upstairs. They waited some time for her, but she did not come down again. They ultimately found her lying dead on the floor of her dressing-room. She had swallowed something by mistake, some dreadful thing they use at theatres. I don't know what it was, but it had either prussic acid or white lead in it. I should fancy it was prussic acid, as she seems to have died instantaneously." "Harry, Harry, it is terrible!" cried the lad. "Yes; it is very tragic, of course, but you must not get yourself mixed up in it. I see by _The Standard_ that she was seventeen. I should have thought she was almost younger than that. She looked such a child, and seemed to know so little about acting. Dorian, you mustn't let this thing get on your nerves. You must come and dine with me, and afterwards we will look in at the opera. It is a Patti night, and everybody will be there. You can come to my sister's box. She has got some smart women with her." "So I have murdered Sibyl Vane," said Dorian Gray, half to himself, "murdered her as surely as if I had cut her little throat with a knife. Yet the roses are not less lovely for all that. The birds sing just as happily in my garden. And to-night I am to dine with you, and then go on to the opera, and sup somewhere, I suppose, afterwards. How extraordinarily dramatic life is! If I had read all this in a book, Harry, I think I would have wept over it. Somehow, now that it has happened actually, and to me, it seems far too wonderful for tears. Here is the first passionate love-letter I have ever written in my life. Strange, that my first passionate love-letter should have been addressed to a dead girl. Can they feel, I wonder, those white silent people we call the dead? Sibyl! Can she feel, or know, or listen? Oh, Harry, how I loved her once! It seems years ago to me now. She was everything to me. Then came that dreadful night--was it really only last night?--when she played so badly, and my heart almost broke. She explained it all to me. It was terribly pathetic. But I was not moved a bit. I thought her shallow. Suddenly something happened that made me afraid. I can't tell you what it was, but it was terrible. I said I would go back to her. I felt I had done wrong. And now she is dead. My God! My God! Harry, what shall I do? You don't know the danger I am in, and there is nothing to keep me straight. She would have done that for me. She had no right to kill herself. It was selfish of her." "My dear Dorian," answered Lord Henry, taking a cigarette from his case and producing a gold-latten matchbox, "the only way a woman can ever reform a man is by boring him so completely that he loses all possible interest in life. If you had married this girl, you would have been wretched. Of course, you would have treated her kindly. One can always be kind to people about whom one cares nothing. But she would have soon found out that you were absolutely indifferent to her. And when a woman finds that out about her husband, she either becomes dreadfully dowdy, or wears very smart bonnets that some other woman's husband has to pay for. I say nothing about the social mistake, which would have been abject--which, of course, I would not have allowed--but I assure you that in any case the whole thing would have been an absolute failure." "I suppose it would," muttered the lad, walking up and down the room and looking horribly pale. "But I thought it was my duty. It is not my fault that this terrible tragedy has prevented my doing what was right. I remember your saying once that there is a fatality about good resolutions--that they are always made too late. Mine certainly were." "Good resolutions are useless attempts to interfere with scientific laws. Their origin is pure vanity. Their result is absolutely _nil_. They give us, now and then, some of those luxurious sterile emotions that have a certain charm for the weak. That is all that can be said for them. They are simply cheques that men draw on a bank where they have no account." "Harry," cried Dorian Gray, coming over and sitting down beside him, "why is it that I cannot feel this tragedy as much as I want to? I don't think I am heartless. Do you?" "You have done too many foolish things during the last fortnight to be entitled to give yourself that name, Dorian," answered Lord Henry with his sweet melancholy smile. The lad frowned. "I don't like that explanation, Harry," he rejoined, "but I am glad you don't think I am heartless. I am nothing of the kind. I know I am not. And yet I must admit that this thing that has happened does not affect me as it should. It seems to me to be simply like a wonderful ending to a wonderful play. It has all the terrible beauty of a Greek tragedy, a tragedy in which I took a great part, but by which I have not been wounded." "It is an interesting question," said Lord Henry, who found an exquisite pleasure in playing on the lad's unconscious egotism, "an extremely interesting question. I fancy that the true explanation is this: It often happens that the real tragedies of life occur in such an inartistic manner that they hurt us by their crude violence, their absolute incoherence, their absurd want of meaning, their entire lack of style. They affect us just as vulgarity affects us. They give us an impression of sheer brute force, and we revolt against that. Sometimes, however, a tragedy that possesses artistic elements of beauty crosses our lives. If these elements of beauty are real, the whole thing simply appeals to our sense of dramatic effect. Suddenly we find that we are no longer the actors, but the spectators of the play. Or rather we are both. We watch ourselves, and the mere wonder of the spectacle enthralls us. In the present case, what is it that has really happened? Some one has killed herself for love of you. I wish that I had ever had such an experience. It would have made me in love with love for the rest of my life. The people who have adored me--there have not been very many, but there have been some--have always insisted on living on, long after I had ceased to care for them, or they to care for me. They have become stout and tedious, and when I meet them, they go in at once for reminiscences. That awful memory of woman! What a fearful thing it is! And what an utter intellectual stagnation it reveals! One should absorb the colour of life, but one should never remember its details. Details are always vulgar." "I must sow poppies in my garden," sighed Dorian. "There is no necessity," rejoined his companion. "Life has always poppies in her hands. Of course, now and then things linger. I once wore nothing but violets all through one season, as a form of artistic mourning for a romance that would not die. Ultimately, however, it did die. I forget what killed it. I think it was her proposing to sacrifice the whole world for me. That is always a dreadful moment. It fills one with the terror of eternity. Well--would you believe it?--a week ago, at Lady Hampshire's, I found myself seated at dinner next the lady in question, and she insisted on going over the whole thing again, and digging up the past, and raking up the future. I had buried my romance in a bed of asphodel. She dragged it out again and assured me that I had spoiled her life. I am bound to state that she ate an enormous dinner, so I did not feel any anxiety. But what a lack of taste she showed! The one charm of the past is that it is the past. But women never know when the curtain has fallen. They always want a sixth act, and as soon as the interest of the play is entirely over, they propose to continue it. If they were allowed their own way, every comedy would have a tragic ending, and every tragedy would culminate in a farce. They are charmingly artificial, but they have no sense of art. You are more fortunate than I am. I assure you, Dorian, that not one of the women I have known would have done for me what Sibyl Vane did for you. Ordinary women always console themselves. Some of them do it by going in for sentimental colours. Never trust a woman who wears mauve, whatever her age may be, or a woman over thirty-five who is fond of pink ribbons. It always means that they have a history. Others find a great consolation in suddenly discovering the good qualities of their husbands. They flaunt their conjugal felicity in one's face, as if it were the most fascinating of sins. Religion consoles some. Its mysteries have all the charm of a flirtation, a woman once told me, and I can quite understand it. Besides, nothing makes one so vain as being told that one is a sinner. Conscience makes egotists of us all. Yes; there is really no end to the consolations that women find in modern life. Indeed, I have not mentioned the most important one." "What is that, Harry?" said the lad listlessly. "Oh, the obvious consolation. Taking some one else's admirer when one loses one's own. In good society that always whitewashes a woman. But really, Dorian, how different Sibyl Vane must have been from all the women one meets! There is something to me quite beautiful about her death. I am glad I am living in a century when such wonders happen. They make one believe in the reality of the things we all play with, such as romance, passion, and love." "I was terribly cruel to her. You forget that." "I am afraid that women appreciate cruelty, downright cruelty, more than anything else. They have wonderfully primitive instincts. We have emancipated them, but they remain slaves looking for their masters, all the same. They love being dominated. I am sure you were splendid. I have never seen you really and absolutely angry, but I can fancy how delightful you looked. And, after all, you said something to me the day before yesterday that seemed to me at the time to be merely fanciful, but that I see now was absolutely true, and it holds the key to everything." "What was that, Harry?" "You said to me that Sibyl Vane represented to you all the heroines of romance--that she was Desdemona one night, and Ophelia the other; that if she died as Juliet, she came to life as Imogen." "She will never come to life again now," muttered the lad, burying his face in his hands. "No, she will never come to life. She has played her last part. But you must think of that lonely death in the tawdry dressing-room simply as a strange lurid fragment from some Jacobean tragedy, as a wonderful scene from Webster, or Ford, or Cyril Tourneur. The girl never really lived, and so she has never really died. To you at least she was always a dream, a phantom that flitted through Shakespeare's plays and left them lovelier for its presence, a reed through which Shakespeare's music sounded richer and more full of joy. The moment she touched actual life, she marred it, and it marred her, and so she passed away. Mourn for Ophelia, if you like. Put ashes on your head because Cordelia was strangled. Cry out against Heaven because the daughter of Brabantio died. But don't waste your tears over Sibyl Vane. She was less real than they are." There was a silence. The evening darkened in the room. Noiselessly, and with silver feet, the shadows crept in from the garden. The colours faded wearily out of things. After some time Dorian Gray looked up. "You have explained me to myself, Harry," he murmured with something of a sigh of relief. "I felt all that you have said, but somehow I was afraid of it, and I could not express it to myself. How well you know me! But we will not talk again of what has happened. It has been a marvellous experience. That is all. I wonder if life has still in store for me anything as marvellous." "Life has everything in store for you, Dorian. There is nothing that you, with your extraordinary good looks, will not be able to do." "But suppose, Harry, I became haggard, and old, and wrinkled? What then?" "Ah, then," said Lord Henry, rising to go, "then, my dear Dorian, you would have to fight for your victories. As it is, they are brought to you. No, you must keep your good looks. We live in an age that reads too much to be wise, and that thinks too much to be beautiful. We cannot spare you. And now you had better dress and drive down to the club. We are rather late, as it is." "I think I shall join you at the opera, Harry. I feel too tired to eat anything. What is the number of your sister's box?" "Twenty-seven, I believe. It is on the grand tier. You will see her name on the door. But I am sorry you won't come and dine." "I don't feel up to it," said Dorian listlessly. "But I am awfully obliged to you for all that you have said to me. You are certainly my best friend. No one has ever understood me as you have." "We are only at the beginning of our friendship, Dorian," answered Lord Henry, shaking him by the hand. "Good-bye. I shall see you before nine-thirty, I hope. Remember, Patti is singing." As he closed the door behind him, Dorian Gray touched the bell, and in a few minutes Victor appeared with the lamps and drew the blinds down. He waited impatiently for him to go. The man seemed to take an interminable time over everything. As soon as he had left, he rushed to the screen and drew it back. No; there was no further change in the picture. It had received the news of Sibyl Vane's death before he had known of it himself. It was conscious of the events of life as they occurred. The vicious cruelty that marred the fine lines of the mouth had, no doubt, appeared at the very moment that the girl had drunk the poison, whatever it was. Or was it indifferent to results? Did it merely take cognizance of what passed within the soul? He wondered, and hoped that some day he would see the change taking place before his very eyes, shuddering as he hoped it. Poor Sibyl! What a romance it had all been! She had often mimicked death on the stage. Then Death himself had touched her and taken her with him. How had she played that dreadful last scene? Had she cursed him, as she died? No; she had died for love of him, and love would always be a sacrament to him now. She had atoned for everything by the sacrifice she had made of her life. He would not think any more of what she had made him go through, on that horrible night at the theatre. When he thought of her, it would be as a wonderful tragic figure sent on to the world's stage to show the supreme reality of love. A wonderful tragic figure? Tears came to his eyes as he remembered her childlike look, and winsome fanciful ways, and shy tremulous grace. He brushed them away hastily and looked again at the picture. He felt that the time had really come for making his choice. Or had his choice already been made? Yes, life had decided that for him--life, and his own infinite curiosity about life. Eternal youth, infinite passion, pleasures subtle and secret, wild joys and wilder sins--he was to have all these things. The portrait was to bear the burden of his shame: that was all. A feeling of pain crept over him as he thought of the desecration that was in store for the fair face on the canvas. Once, in boyish mockery of Narcissus, he had kissed, or feigned to kiss, those painted lips that now smiled so cruelly at him. Morning after morning he had sat before the portrait wondering at its beauty, almost enamoured of it, as it seemed to him at times. Was it to alter now with every mood to which he yielded? Was it to become a monstrous and loathsome thing, to be hidden away in a locked room, to be shut out from the sunlight that had so often touched to brighter gold the waving wonder of its hair? The pity of it! the pity of it! For a moment, he thought of praying that the horrible sympathy that existed between him and the picture might cease. It had changed in answer to a prayer; perhaps in answer to a prayer it might remain unchanged. And yet, who, that knew anything about life, would surrender the chance of remaining always young, however fantastic that chance might be, or with what fateful consequences it might be fraught? Besides, was it really under his control? Had it indeed been prayer that had produced the substitution? Might there not be some curious scientific reason for it all? If thought could exercise its influence upon a living organism, might not thought exercise an influence upon dead and inorganic things? Nay, without thought or conscious desire, might not things external to ourselves vibrate in unison with our moods and passions, atom calling to atom in secret love or strange affinity? But the reason was of no importance. He would never again tempt by a prayer any terrible power. If the picture was to alter, it was to alter. That was all. Why inquire too closely into it? For there would be a real pleasure in watching it. He would be able to follow his mind into its secret places. This portrait would be to him the most magical of mirrors. As it had revealed to him his own body, so it would reveal to him his own soul. And when winter came upon it, he would still be standing where spring trembles on the verge of summer. When the blood crept from its face, and left behind a pallid mask of chalk with leaden eyes, he would keep the glamour of boyhood. Not one blossom of his loveliness would ever fade. Not one pulse of his life would ever weaken. Like the gods of the Greeks, he would be strong, and fleet, and joyous. What did it matter what happened to the coloured image on the canvas? He would be safe. That was everything. He drew the screen back into its former place in front of the picture, smiling as he did so, and passed into his bedroom, where his valet was already waiting for him. An hour later he was at the opera, and Lord Henry was leaning over his chair. CHAPTER 9 As he was sitting at breakfast next morning, Basil Hallward was shown into the room. "I am so glad I have found you, Dorian," he said gravely. "I called last night, and they told me you were at the opera. Of course, I knew that was impossible. But I wish you had left word where you had really gone to. I passed a dreadful evening, half afraid that one tragedy might be followed by another. I think you might have telegraphed for me when you heard of it first. I read of it quite by chance in a late edition of _The Globe_ that I picked up at the club. I came here at once and was miserable at not finding you. I can't tell you how heart-broken I am about the whole thing. I know what you must suffer. But where were you? Did you go down and see the girl's mother? For a moment I thought of following you there. They gave the address in the paper. Somewhere in the Euston Road, isn't it? But I was afraid of intruding upon a sorrow that I could not lighten. Poor woman! What a state she must be in! And her only child, too! What did she say about it all?" "My dear Basil, how do I know?" murmured Dorian Gray, sipping some pale-yellow wine from a delicate, gold-beaded bubble of Venetian glass and looking dreadfully bored. "I was at the opera. You should have come on there. I met Lady Gwendolen, Harry's sister, for the first time. We were in her box. She is perfectly charming; and Patti sang divinely. Don't talk about horrid subjects. If one doesn't talk about a thing, it has never happened. It is simply expression, as Harry says, that gives reality to things. I may mention that she was not the woman's only child. There is a son, a charming fellow, I believe. But he is not on the stage. He is a sailor, or something. And now, tell me about yourself and what you are painting." "You went to the opera?" said Hallward, speaking very slowly and with a strained touch of pain in his voice. "You went to the opera while Sibyl Vane was lying dead in some sordid lodging? You can talk to me of other women being charming, and of Patti singing divinely, before the girl you loved has even the quiet of a grave to sleep in? Why, man, there are horrors in store for that little white body of hers!" "Stop, Basil! I won't hear it!" cried Dorian, leaping to his feet. "You must not tell me about things. What is done is done. What is past is past." "You call yesterday the past?" "What has the actual lapse of time got to do with it? It is only shallow people who require years to get rid of an emotion. A man who is master of himself can end a sorrow as easily as he can invent a pleasure. I don't want to be at the mercy of my emotions. I want to use them, to enjoy them, and to dominate them." "Dorian, this is horrible! Something has changed you completely. You look exactly the same wonderful boy who, day after day, used to come down to my studio to sit for his picture. But you were simple, natural, and affectionate then. You were the most unspoiled creature in the whole world. Now, I don't know what has come over you. You talk as if you had no heart, no pity in you. It is all Harry's influence. I see that." The lad flushed up and, going to the window, looked out for a few moments on the green, flickering, sun-lashed garden. "I owe a great deal to Harry, Basil," he said at last, "more than I owe to you. You only taught me to be vain." "Well, I am punished for that, Dorian--or shall be some day." "I don't know what you mean, Basil," he exclaimed, turning round. "I don't know what you want. What do you want?" "I want the Dorian Gray I used to paint," said the artist sadly. "Basil," said the lad, going over to him and putting his hand on his shoulder, "you have come too late. Yesterday, when I heard that Sibyl Vane had killed herself--" "Killed herself! Good heavens! is there no doubt about that?" cried Hallward, looking up at him with an expression of horror. "My dear Basil! Surely you don't think it was a vulgar accident? Of course she killed herself." The elder man buried his face in his hands. "How fearful," he muttered, and a shudder ran through him. "No," said Dorian Gray, "there is nothing fearful about it. It is one of the great romantic tragedies of the age. As a rule, people who act lead the most commonplace lives. They are good husbands, or faithful wives, or something tedious. You know what I mean--middle-class virtue and all that kind of thing. How different Sibyl was! She lived her finest tragedy. She was always a heroine. The last night she played--the night you saw her--she acted badly because she had known the reality of love. When she knew its unreality, she died, as Juliet might have died. She passed again into the sphere of art. There is something of the martyr about her. Her death has all the pathetic uselessness of martyrdom, all its wasted beauty. But, as I was saying, you must not think I have not suffered. If you had come in yesterday at a particular moment--about half-past five, perhaps, or a quarter to six--you would have found me in tears. Even Harry, who was here, who brought me the news, in fact, had no idea what I was going through. I suffered immensely. Then it passed away. I cannot repeat an emotion. No one can, except sentimentalists. And you are awfully unjust, Basil. You come down here to console me. That is charming of you. You find me consoled, and you are furious. How like a sympathetic person! You remind me of a story Harry told me about a certain philanthropist who spent twenty years of his life in trying to get some grievance redressed, or some unjust law altered--I forget exactly what it was. Finally he succeeded, and nothing could exceed his disappointment. He had absolutely nothing to do, almost died of _ennui_, and became a confirmed misanthrope. And besides, my dear old Basil, if you really want to console me, teach me rather to forget what has happened, or to see it from a proper artistic point of view. Was it not Gautier who used to write about _la consolation des arts_? I remember picking up a little vellum-covered book in your studio one day and chancing on that delightful phrase. Well, I am not like that young man you told me of when we were down at Marlow together, the young man who used to say that yellow satin could console one for all the miseries of life. I love beautiful things that one can touch and handle. Old brocades, green bronzes, lacquer-work, carved ivories, exquisite surroundings, luxury, pomp--there is much to be got from all these. But the artistic temperament that they create, or at any rate reveal, is still more to me. To become the spectator of one's own life, as Harry says, is to escape the suffering of life. I know you are surprised at my talking to you like this. You have not realized how I have developed. I was a schoolboy when you knew me. I am a man now. I have new passions, new thoughts, new ideas. I am different, but you must not like me less. I am changed, but you must always be my friend. Of course, I am very fond of Harry. But I know that you are better than he is. You are not stronger--you are too much afraid of life--but you are better. And how happy we used to be together! Don't leave me, Basil, and don't quarrel with me. I am what I am. There is nothing more to be said." The painter felt strangely moved. The lad was infinitely dear to him, and his personality had been the great turning point in his art. He could not bear the idea of reproaching him any more. After all, his indifference was probably merely a mood that would pass away. There was so much in him that was good, so much in him that was noble. "Well, Dorian," he said at length, with a sad smile, "I won't speak to you again about this horrible thing, after to-day. I only trust your name won't be mentioned in connection with it. The inquest is to take place this afternoon. Have they summoned you?" Dorian shook his head, and a look of annoyance passed over his face at the mention of the word "inquest." There was something so crude and vulgar about everything of the kind. "They don't know my name," he answered. "But surely she did?" "Only my Christian name, and that I am quite sure she never mentioned to any one. She told me once that they were all rather curious to learn who I was, and that she invariably told them my name was Prince Charming. It was pretty of her. You must do me a drawing of Sibyl, Basil. I should like to have something more of her than the memory of a few kisses and some broken pathetic words." "I will try and do something, Dorian, if it would please you. But you must come and sit to me yourself again. I can't get on without you." "I can never sit to you again, Basil. It is impossible!" he exclaimed, starting back. The painter stared at him. "My dear boy, what nonsense!" he cried. "Do you mean to say you don't like what I did of you? Where is it? Why have you pulled the screen in front of it? Let me look at it. It is the best thing I have ever done. Do take the screen away, Dorian. It is simply disgraceful of your servant hiding my work like that. I felt the room looked different as I came in." "My servant has nothing to do with it, Basil. You don't imagine I let him arrange my room for me? He settles my flowers for me sometimes--that is all. No; I did it myself. The light was too strong on the portrait." "Too strong! Surely not, my dear fellow? It is an admirable place for it. Let me see it." And Hallward walked towards the corner of the room. A cry of terror broke from Dorian Gray's lips, and he rushed between the painter and the screen. "Basil," he said, looking very pale, "you must not look at it. I don't wish you to." "Not look at my own work! You are not serious. Why shouldn't I look at it?" exclaimed Hallward, laughing. "If you try to look at it, Basil, on my word of honour I will never speak to you again as long as I live. I am quite serious. I don't offer any explanation, and you are not to ask for any. But, remember, if you touch this screen, everything is over between us." Hallward was thunderstruck. He looked at Dorian Gray in absolute amazement. He had never seen him like this before. The lad was actually pallid with rage. His hands were clenched, and the pupils of his eyes were like disks of blue fire. He was trembling all over. "Dorian!" "Don't speak!" "But what is the matter? Of course I won't look at it if you don't want me to," he said, rather coldly, turning on his heel and going over towards the window. "But, really, it seems rather absurd that I shouldn't see my own work, especially as I am going to exhibit it in Paris in the autumn. I shall probably have to give it another coat of varnish before that, so I must see it some day, and why not to-day?" "To exhibit it! You want to exhibit it?" exclaimed Dorian Gray, a strange sense of terror creeping over him. Was the world going to be shown his secret? Were people to gape at the mystery of his life? That was impossible. Something--he did not know what--had to be done at once. "Yes; I don't suppose you will object to that. Georges Petit is going to collect all my best pictures for a special exhibition in the Rue de Seze, which will open the first week in October. The portrait will only be away a month. I should think you could easily spare it for that time. In fact, you are sure to be out of town. And if you keep it always behind a screen, you can't care much about it." Dorian Gray passed his hand over his forehead. There were beads of perspiration there. He felt that he was on the brink of a horrible danger. "You told me a month ago that you would never exhibit it," he cried. "Why have you changed your mind? You people who go in for being consistent have just as many moods as others have. The only difference is that your moods are rather meaningless. You can't have forgotten that you assured me most solemnly that nothing in the world would induce you to send it to any exhibition. You told Harry exactly the same thing." He stopped suddenly, and a gleam of light came into his eyes. He remembered that Lord Henry had said to him once, half seriously and half in jest, "If you want to have a strange quarter of an hour, get Basil to tell you why he won't exhibit your picture. He told me why he wouldn't, and it was a revelation to me." Yes, perhaps Basil, too, had his secret. He would ask him and try. "Basil," he said, coming over quite close and looking him straight in the face, "we have each of us a secret. Let me know yours, and I shall tell you mine. What was your reason for refusing to exhibit my picture?" The painter shuddered in spite of himself. "Dorian, if I told you, you might like me less than you do, and you would certainly laugh at me. I could not bear your doing either of those two things. If you wish me never to look at your picture again, I am content. I have always you to look at. If you wish the best work I have ever done to be hidden from the world, I am satisfied. Your friendship is dearer to me than any fame or reputation." "No, Basil, you must tell me," insisted Dorian Gray. "I think I have a right to know." His feeling of terror had passed away, and curiosity had taken its place. He was determined to find out Basil Hallward's mystery. "Let us sit down, Dorian," said the painter, looking troubled. "Let us sit down. And just answer me one question. Have you noticed in the picture something curious?--something that probably at first did not strike you, but that revealed itself to you suddenly?" "Basil!" cried the lad, clutching the arms of his chair with trembling hands and gazing at him with wild startled eyes. "I see you did. Don't speak. Wait till you hear what I have to say. Dorian, from the moment I met you, your personality had the most extraordinary influence over me. I was dominated, soul, brain, and power, by you. You became to me the visible incarnation of that unseen ideal whose memory haunts us artists like an exquisite dream. I worshipped you. I grew jealous of every one to whom you spoke. I wanted to have you all to myself. I was only happy when I was with you. When you were away from me, you were still present in my art.... Of course, I never let you know anything about this. It would have been impossible. You would not have understood it. I hardly understood it myself. I only knew that I had seen perfection face to face, and that the world had become wonderful to my eyes--too wonderful, perhaps, for in such mad worships there is peril, the peril of losing them, no less than the peril of keeping them.... Weeks and weeks went on, and I grew more and more absorbed in you. Then came a new development. I had drawn you as Paris in dainty armour, and as Adonis with huntsman's cloak and polished boar-spear. Crowned with heavy lotus-blossoms you had sat on the prow of Adrian's barge, gazing across the green turbid Nile. You had leaned over the still pool of some Greek woodland and seen in the water's silent silver the marvel of your own face. And it had all been what art should be--unconscious, ideal, and remote. One day, a fatal day I sometimes think, I determined to paint a wonderful portrait of you as you actually are, not in the costume of dead ages, but in your own dress and in your own time. Whether it was the realism of the method, or the mere wonder of your own personality, thus directly presented to me without mist or veil, I cannot tell. But I know that as I worked at it, every flake and film of colour seemed to me to reveal my secret. I grew afraid that others would know of my idolatry. I felt, Dorian, that I had told too much, that I had put too much of myself into it. Then it was that I resolved never to allow the picture to be exhibited. You were a little annoyed; but then you did not realize all that it meant to me. Harry, to whom I talked about it, laughed at me. But I did not mind that. When the picture was finished, and I sat alone with it, I felt that I was right.... Well, after a few days the thing left my studio, and as soon as I had got rid of the intolerable fascination of its presence, it seemed to me that I had been foolish in imagining that I had seen anything in it, more than that you were extremely good-looking and that I could paint. Even now I cannot help feeling that it is a mistake to think that the passion one feels in creation is ever really shown in the work one creates. Art is always more abstract than we fancy. Form and colour tell us of form and colour--that is all. It often seems to me that art conceals the artist far more completely than it ever reveals him. And so when I got this offer from Paris, I determined to make your portrait the principal thing in my exhibition. It never occurred to me that you would refuse. I see now that you were right. The picture cannot be shown. You must not be angry with me, Dorian, for what I have told you. As I said to Harry, once, you are made to be worshipped." Dorian Gray drew a long breath. The colour came back to his cheeks, and a smile played about his lips. The peril was over. He was safe for the time. Yet he could not help feeling infinite pity for the painter who had just made this strange confession to him, and wondered if he himself would ever be so dominated by the personality of a friend. Lord Henry had the charm of being very dangerous. But that was all. He was too clever and too cynical to be really fond of. Would there ever be some one who would fill him with a strange idolatry? Was that one of the things that life had in store? "It is extraordinary to me, Dorian," said Hallward, "that you should have seen this in the portrait. Did you really see it?" "I saw something in it," he answered, "something that seemed to me very curious." "Well, you don't mind my looking at the thing now?" Dorian shook his head. "You must not ask me that, Basil. I could not possibly let you stand in front of that picture." "You will some day, surely?" "Never." "Well, perhaps you are right. And now good-bye, Dorian. You have been the one person in my life who has really influenced my art. Whatever I have done that is good, I owe to you. Ah! you don't know what it cost me to tell you all that I have told you." "My dear Basil," said Dorian, "what have you told me? Simply that you felt that you admired me too much. That is not even a compliment." "It was not intended as a compliment. It was a confession. Now that I have made it, something seems to have gone out of me. Perhaps one should never put one's worship into words." "It was a very disappointing confession." "Why, what did you expect, Dorian? You didn't see anything else in the picture, did you? There was nothing else to see?" "No; there was nothing else to see. Why do you ask? But you mustn't talk about worship. It is foolish. You and I are friends, Basil, and we must always remain so." "You have got Harry," said the painter sadly. "Oh, Harry!" cried the lad, with a ripple of laughter. "Harry spends his days in saying what is incredible and his evenings in doing what is improbable. Just the sort of life I would like to lead. But still I don't think I would go to Harry if I were in trouble. I would sooner go to you, Basil." "You will sit to me again?" "Impossible!" "You spoil my life as an artist by refusing, Dorian. No man comes across two ideal things. Few come across one." "I can't explain it to you, Basil, but I must never sit to you again. There is something fatal about a portrait. It has a life of its own. I will come and have tea with you. That will be just as pleasant." "Pleasanter for you, I am afraid," murmured Hallward regretfully. "And now good-bye. I am sorry you won't let me look at the picture once again. But that can't be helped. I quite understand what you feel about it." As he left the room, Dorian Gray smiled to himself. Poor Basil! How little he knew of the true reason! And how strange it was that, instead of having been forced to reveal his own secret, he had succeeded, almost by chance, in wresting a secret from his friend! How much that strange confession explained to him! The painter's absurd fits of jealousy, his wild devotion, his extravagant panegyrics, his curious reticences--he understood them all now, and he felt sorry. There seemed to him to be something tragic in a friendship so coloured by romance. He sighed and touched the bell. The portrait must be hidden away at all costs. He could not run such a risk of discovery again. It had been mad of him to have allowed the thing to remain, even for an hour, in a room to which any of his friends had access. CHAPTER 10 When his servant entered, he looked at him steadfastly and wondered if he had thought of peering behind the screen. The man was quite impassive and waited for his orders. Dorian lit a cigarette and walked over to the glass and glanced into it. He could see the reflection of Victor's face perfectly. It was like a placid mask of servility. There was nothing to be afraid of, there. Yet he thought it best to be on his guard. Speaking very slowly, he told him to tell the house-keeper that he wanted to see her, and then to go to the frame-maker and ask him to send two of his men round at once. It seemed to him that as the man left the room his eyes wandered in the direction of the screen. Or was that merely his own fancy? After a few moments, in her black silk dress, with old-fashioned thread mittens on her wrinkled hands, Mrs. Leaf bustled into the library. He asked her for the key of the schoolroom. "The old schoolroom, Mr. Dorian?" she exclaimed. "Why, it is full of dust. I must get it arranged and put straight before you go into it. It is not fit for you to see, sir. It is not, indeed." "I don't want it put straight, Leaf. I only want the key." "Well, sir, you'll be covered with cobwebs if you go into it. Why, it hasn't been opened for nearly five years--not since his lordship died." He winced at the mention of his grandfather. He had hateful memories of him. "That does not matter," he answered. "I simply want to see the place--that is all. Give me the key." "And here is the key, sir," said the old lady, going over the contents of her bunch with tremulously uncertain hands. "Here is the key. I'll have it off the bunch in a moment. But you don't think of living up there, sir, and you so comfortable here?" "No, no," he cried petulantly. "Thank you, Leaf. That will do." She lingered for a few moments, and was garrulous over some detail of the household. He sighed and told her to manage things as she thought best. She left the room, wreathed in smiles. As the door closed, Dorian put the key in his pocket and looked round the room. His eye fell on a large, purple satin coverlet heavily embroidered with gold, a splendid piece of late seventeenth-century Venetian work that his grandfather had found in a convent near Bologna. Yes, that would serve to wrap the dreadful thing in. It had perhaps served often as a pall for the dead. Now it was to hide something that had a corruption of its own, worse than the corruption of death itself--something that would breed horrors and yet would never die. What the worm was to the corpse, his sins would be to the painted image on the canvas. They would mar its beauty and eat away its grace. They would defile it and make it shameful. And yet the thing would still live on. It would be always alive. He shuddered, and for a moment he regretted that he had not told Basil the true reason why he had wished to hide the picture away. Basil would have helped him to resist Lord Henry's influence, and the still more poisonous influences that came from his own temperament. The love that he bore him--for it was really love--had nothing in it that was not noble and intellectual. It was not that mere physical admiration of beauty that is born of the senses and that dies when the senses tire. It was such love as Michelangelo had known, and Montaigne, and Winckelmann, and Shakespeare himself. Yes, Basil could have saved him. But it was too late now. The past could always be annihilated. Regret, denial, or forgetfulness could do that. But the future was inevitable. There were passions in him that would find their terrible outlet, dreams that would make the shadow of their evil real. He took up from the couch the great purple-and-gold texture that covered it, and, holding it in his hands, passed behind the screen. Was the face on the canvas viler than before? It seemed to him that it was unchanged, and yet his loathing of it was intensified. Gold hair, blue eyes, and rose-red lips--they all were there. It was simply the expression that had altered. That was horrible in its cruelty. Compared to what he saw in it of censure or rebuke, how shallow Basil's reproaches about Sibyl Vane had been!--how shallow, and of what little account! His own soul was looking out at him from the canvas and calling him to judgement. A look of pain came across him, and he flung the rich pall over the picture. As he did so, a knock came to the door. He passed out as his servant entered. "The persons are here, Monsieur." He felt that the man must be got rid of at once. He must not be allowed to know where the picture was being taken to. There was something sly about him, and he had thoughtful, treacherous eyes. Sitting down at the writing-table he scribbled a note to Lord Henry, asking him to send him round something to read and reminding him that they were to meet at eight-fifteen that evening. "Wait for an answer," he said, handing it to him, "and show the men in here." In two or three minutes there was another knock, and Mr. Hubbard himself, the celebrated frame-maker of South Audley Street, came in with a somewhat rough-looking young assistant. Mr. Hubbard was a florid, red-whiskered little man, whose admiration for art was considerably tempered by the inveterate impecuniosity of most of the artists who dealt with him. As a rule, he never left his shop. He waited for people to come to him. But he always made an exception in favour of Dorian Gray. There was something about Dorian that charmed everybody. It was a pleasure even to see him. "What can I do for you, Mr. Gray?" he said, rubbing his fat freckled hands. "I thought I would do myself the honour of coming round in person. I have just got a beauty of a frame, sir. Picked it up at a sale. Old Florentine. Came from Fonthill, I believe. Admirably suited for a religious subject, Mr. Gray." "I am so sorry you have given yourself the trouble of coming round, Mr. Hubbard. I shall certainly drop in and look at the frame--though I don't go in much at present for religious art--but to-day I only want a picture carried to the top of the house for me. It is rather heavy, so I thought I would ask you to lend me a couple of your men." "No trouble at all, Mr. Gray. I am delighted to be of any service to you. Which is the work of art, sir?" "This," replied Dorian, moving the screen back. "Can you move it, covering and all, just as it is? I don't want it to get scratched going upstairs." "There will be no difficulty, sir," said the genial frame-maker, beginning, with the aid of his assistant, to unhook the picture from the long brass chains by which it was suspended. "And, now, where shall we carry it to, Mr. Gray?" "I will show you the way, Mr. Hubbard, if you will kindly follow me. Or perhaps you had better go in front. I am afraid it is right at the top of the house. We will go up by the front staircase, as it is wider." He held the door open for them, and they passed out into the hall and began the ascent. The elaborate character of the frame had made the picture extremely bulky, and now and then, in spite of the obsequious protests of Mr. Hubbard, who had the true tradesman's spirited dislike of seeing a gentleman doing anything useful, Dorian put his hand to it so as to help them. "Something of a load to carry, sir," gasped the little man when they reached the top landing. And he wiped his shiny forehead. "I am afraid it is rather heavy," murmured Dorian as he unlocked the door that opened into the room that was to keep for him the curious secret of his life and hide his soul from the eyes of men. He had not entered the place for more than four years--not, indeed, since he had used it first as a play-room when he was a child, and then as a study when he grew somewhat older. It was a large, well-proportioned room, which had been specially built by the last Lord Kelso for the use of the little grandson whom, for his strange likeness to his mother, and also for other reasons, he had always hated and desired to keep at a distance. It appeared to Dorian to have but little changed. There was the huge Italian _cassone_, with its fantastically painted panels and its tarnished gilt mouldings, in which he had so often hidden himself as a boy. There the satinwood book-case filled with his dog-eared schoolbooks. On the wall behind it was hanging the same ragged Flemish tapestry where a faded king and queen were playing chess in a garden, while a company of hawkers rode by, carrying hooded birds on their gauntleted wrists. How well he remembered it all! Every moment of his lonely childhood came back to him as he looked round. He recalled the stainless purity of his boyish life, and it seemed horrible to him that it was here the fatal portrait was to be hidden away. How little he had thought, in those dead days, of all that was in store for him! But there was no other place in the house so secure from prying eyes as this. He had the key, and no one else could enter it. Beneath its purple pall, the face painted on the canvas could grow bestial, sodden, and unclean. What did it matter? No one could see it. He himself would not see it. Why should he watch the hideous corruption of his soul? He kept his youth--that was enough. And, besides, might not his nature grow finer, after all? There was no reason that the future should be so full of shame. Some love might come across his life, and purify him, and shield him from those sins that seemed to be already stirring in spirit and in flesh--those curious unpictured sins whose very mystery lent them their subtlety and their charm. Perhaps, some day, the cruel look would have passed away from the scarlet sensitive mouth, and he might show to the world Basil Hallward's masterpiece. No; that was impossible. Hour by hour, and week by week, the thing upon the canvas was growing old. It might escape the hideousness of sin, but the hideousness of age was in store for it. The cheeks would become hollow or flaccid. Yellow crow's feet would creep round the fading eyes and make them horrible. The hair would lose its brightness, the mouth would gape or droop, would be foolish or gross, as the mouths of old men are. There would be the wrinkled throat, the cold, blue-veined hands, the twisted body, that he remembered in the grandfather who had been so stern to him in his boyhood. The picture had to be concealed. There was no help for it. "Bring it in, Mr. Hubbard, please," he said, wearily, turning round. "I am sorry I kept you so long. I was thinking of something else." "Always glad to have a rest, Mr. Gray," answered the frame-maker, who was still gasping for breath. "Where shall we put it, sir?" "Oh, anywhere. Here: this will do. I don't want to have it hung up. Just lean it against the wall. Thanks." "Might one look at the work of art, sir?" Dorian started. "It would not interest you, Mr. Hubbard," he said, keeping his eye on the man. He felt ready to leap upon him and fling him to the ground if he dared to lift the gorgeous hanging that concealed the secret of his life. "I shan't trouble you any more now. I am much obliged for your kindness in coming round." "Not at all, not at all, Mr. Gray. Ever ready to do anything for you, sir." And Mr. Hubbard tramped downstairs, followed by the assistant, who glanced back at Dorian with a look of shy wonder in his rough uncomely face. He had never seen any one so marvellous. When the sound of their footsteps had died away, Dorian locked the door and put the key in his pocket. He felt safe now. No one would ever look upon the horrible thing. No eye but his would ever see his shame. On reaching the library, he found that it was just after five o'clock and that the tea had been already brought up. On a little table of dark perfumed wood thickly incrusted with nacre, a present from Lady Radley, his guardian's wife, a pretty professional invalid who had spent the preceding winter in Cairo, was lying a note from Lord Henry, and beside it was a book bound in yellow paper, the cover slightly torn and the edges soiled. A copy of the third edition of _The St. James's Gazette_ had been placed on the tea-tray. It was evident that Victor had returned. He wondered if he had met the men in the hall as they were leaving the house and had wormed out of them what they had been doing. He would be sure to miss the picture--had no doubt missed it already, while he had been laying the tea-things. The screen had not been set back, and a blank space was visible on the wall. Perhaps some night he might find him creeping upstairs and trying to force the door of the room. It was a horrible thing to have a spy in one's house. He had heard of rich men who had been blackmailed all their lives by some servant who had read a letter, or overheard a conversation, or picked up a card with an address, or found beneath a pillow a withered flower or a shred of crumpled lace. He sighed, and having poured himself out some tea, opened Lord Henry's note. It was simply to say that he sent him round the evening paper, and a book that might interest him, and that he would be at the club at eight-fifteen. He opened _The St. James's_ languidly, and looked through it. A red pencil-mark on the fifth page caught his eye. It drew attention to the following paragraph: INQUEST ON AN ACTRESS.--An inquest was held this morning at the Bell Tavern, Hoxton Road, by Mr. Danby, the District Coroner, on the body of Sibyl Vane, a young actress recently engaged at the Royal Theatre, Holborn. A verdict of death by misadventure was returned. Considerable sympathy was expressed for the mother of the deceased, who was greatly affected during the giving of her own evidence, and that of Dr. Birrell, who had made the post-mortem examination of the deceased. He frowned, and tearing the paper in two, went across the room and flung the pieces away. How ugly it all was! And how horribly real ugliness made things! He felt a little annoyed with Lord Henry for having sent him the report. And it was certainly stupid of him to have marked it with red pencil. Victor might have read it. The man knew more than enough English for that. Perhaps he had read it and had begun to suspect something. And, yet, what did it matter? What had Dorian Gray to do with Sibyl Vane's death? There was nothing to fear. Dorian Gray had not killed her. His eye fell on the yellow book that Lord Henry had sent him. What was it, he wondered. He went towards the little, pearl-coloured octagonal stand that had always looked to him like the work of some strange Egyptian bees that wrought in silver, and taking up the volume, flung himself into an arm-chair and began to turn over the leaves. After a few minutes he became absorbed. It was the strangest book that he had ever read. It seemed to him that in exquisite raiment, and to the delicate sound of flutes, the sins of the world were passing in dumb show before him. Things that he had dimly dreamed of were suddenly made real to him. Things of which he had never dreamed were gradually revealed. It was a novel without a plot and with only one character, being, indeed, simply a psychological study of a certain young Parisian who spent his life trying to realize in the nineteenth century all the passions and modes of thought that belonged to every century except his own, and to sum up, as it were, in himself the various moods through which the world-spirit had ever passed, loving for their mere artificiality those renunciations that men have unwisely called virtue, as much as those natural rebellions that wise men still call sin. The style in which it was written was that curious jewelled style, vivid and obscure at once, full of _argot_ and of archaisms, of technical expressions and of elaborate paraphrases, that characterizes the work of some of the finest artists of the French school of _Symbolistes_. There were in it metaphors as monstrous as orchids and as subtle in colour. The life of the senses was described in the terms of mystical philosophy. One hardly knew at times whether one was reading the spiritual ecstasies of some mediaeval saint or the morbid confessions of a modern sinner. It was a poisonous book. The heavy odour of incense seemed to cling about its pages and to trouble the brain. The mere cadence of the sentences, the subtle monotony of their music, so full as it was of complex refrains and movements elaborately repeated, produced in the mind of the lad, as he passed from chapter to chapter, a form of reverie, a malady of dreaming, that made him unconscious of the falling day and creeping shadows. Cloudless, and pierced by one solitary star, a copper-green sky gleamed through the windows. He read on by its wan light till he could read no more. Then, after his valet had reminded him several times of the lateness of the hour, he got up, and going into the next room, placed the book on the little Florentine table that always stood at his bedside and began to dress for dinner. It was almost nine o'clock before he reached the club, where he found Lord Henry sitting alone, in the morning-room, looking very much bored. "I am so sorry, Harry," he cried, "but really it is entirely your fault. That book you sent me so fascinated me that I forgot how the time was going." "Yes, I thought you would like it," replied his host, rising from his chair. "I didn't say I liked it, Harry. I said it fascinated me. There is a great difference." "Ah, you have discovered that?" murmured Lord Henry. And they passed into the dining-room. CHAPTER 11 For years, Dorian Gray could not free himself from the influence of this book. Or perhaps it would be more accurate to say that he never sought to free himself from it. He procured from Paris no less than nine large-paper copies of the first edition, and had them bound in different colours, so that they might suit his various moods and the changing fancies of a nature over which he seemed, at times, to have almost entirely lost control. The hero, the wonderful young Parisian in whom the romantic and the scientific temperaments were so strangely blended, became to him a kind of prefiguring type of himself. And, indeed, the whole book seemed to him to contain the story of his own life, written before he had lived it. In one point he was more fortunate than the novel's fantastic hero. He never knew--never, indeed, had any cause to know--that somewhat grotesque dread of mirrors, and polished metal surfaces, and still water which came upon the young Parisian so early in his life, and was occasioned by the sudden decay of a beau that had once, apparently, been so remarkable. It was with an almost cruel joy--and perhaps in nearly every joy, as certainly in every pleasure, cruelty has its place--that he used to read the latter part of the book, with its really tragic, if somewhat overemphasized, account of the sorrow and despair of one who had himself lost what in others, and the world, he had most dearly valued. For the wonderful beauty that had so fascinated Basil Hallward, and many others besides him, seemed never to leave him. Even those who had heard the most evil things against him--and from time to time strange rumours about his mode of life crept through London and became the chatter of the clubs--could not believe anything to his dishonour when they saw him. He had always the look of one who had kept himself unspotted from the world. Men who talked grossly became silent when Dorian Gray entered the room. There was something in the purity of his face that rebuked them. His mere presence seemed to recall to them the memory of the innocence that they had tarnished. They wondered how one so charming and graceful as he was could have escaped the stain of an age that was at once sordid and sensual. Often, on returning home from one of those mysterious and prolonged absences that gave rise to such strange conjecture among those who were his friends, or thought that they were so, he himself would creep upstairs to the locked room, open the door with the key that never left him now, and stand, with a mirror, in front of the portrait that Basil Hallward had painted of him, looking now at the evil and aging face on the canvas, and now at the fair young face that laughed back at him from the polished glass. The very sharpness of the contrast used to quicken his sense of pleasure. He grew more and more enamoured of his own beauty, more and more interested in the corruption of his own soul. He would examine with minute care, and sometimes with a monstrous and terrible delight, the hideous lines that seared the wrinkling forehead or crawled around the heavy sensual mouth, wondering sometimes which were the more horrible, the signs of sin or the signs of age. He would place his white hands beside the coarse bloated hands of the picture, and smile. He mocked the misshapen body and the failing limbs. There were moments, indeed, at night, when, lying sleepless in his own delicately scented chamber, or in the sordid room of the little ill-famed tavern near the docks which, under an assumed name and in disguise, it was his habit to frequent, he would think of the ruin he had brought upon his soul with a pity that was all the more poignant because it was purely selfish. But moments such as these were rare. That curiosity about life which Lord Henry had first stirred in him, as they sat together in the garden of their friend, seemed to increase with gratification. The more he knew, the more he desired to know. He had mad hungers that grew more ravenous as he fed them. Yet he was not really reckless, at any rate in his relations to society. Once or twice every month during the winter, and on each Wednesday evening while the season lasted, he would throw open to the world his beautiful house and have the most celebrated musicians of the day to charm his guests with the wonders of their art. His little dinners, in the settling of which Lord Henry always assisted him, were noted as much for the careful selection and placing of those invited, as for the exquisite taste shown in the decoration of the table, with its subtle symphonic arrangements of exotic flowers, and embroidered cloths, and antique plate of gold and silver. Indeed, there were many, especially among the very young men, who saw, or fancied that they saw, in Dorian Gray the true realization of a type of which they had often dreamed in Eton or Oxford days, a type that was to combine something of the real culture of the scholar with all the grace and distinction and perfect manner of a citizen of the world. To them he seemed to be of the company of those whom Dante describes as having sought to "make themselves perfect by the worship of beauty." Like Gautier, he was one for whom "the visible world existed." And, certainly, to him life itself was the first, the greatest, of the arts, and for it all the other arts seemed to be but a preparation. Fashion, by which what is really fantastic becomes for a moment universal, and dandyism, which, in its own way, is an attempt to assert the absolute modernity of beauty, had, of course, their fascination for him. His mode of dressing, and the particular styles that from time to time he affected, had their marked influence on the young exquisites of the Mayfair balls and Pall Mall club windows, who copied him in everything that he did, and tried to reproduce the accidental charm of his graceful, though to him only half-serious, fopperies. For, while he was but too ready to accept the position that was almost immediately offered to him on his coming of age, and found, indeed, a subtle pleasure in the thought that he might really become to the London of his own day what to imperial Neronian Rome the author of the Satyricon once had been, yet in his inmost heart he desired to be something more than a mere _arbiter elegantiarum_, to be consulted on the wearing of a jewel, or the knotting of a necktie, or the conduct of a cane. He sought to elaborate some new scheme of life that would have its reasoned philosophy and its ordered principles, and find in the spiritualizing of the senses its highest realization. The worship of the senses has often, and with much justice, been decried, men feeling a natural instinct of terror about passions and sensations that seem stronger than themselves, and that they are conscious of sharing with the less highly organized forms of existence. But it appeared to Dorian Gray that the true nature of the senses had never been understood, and that they had remained savage and animal merely because the world had sought to starve them into submission or to kill them by pain, instead of aiming at making them elements of a new spirituality, of which a fine instinct for beauty was to be the dominant characteristic. As he looked back upon man moving through history, he was haunted by a feeling of loss. So much had been surrendered! and to such little purpose! There had been mad wilful rejections, monstrous forms of self-torture and self-denial, whose origin was fear and whose result was a degradation infinitely more terrible than that fancied degradation from which, in their ignorance, they had sought to escape; Nature, in her wonderful irony, driving out the anchorite to feed with the wild animals of the desert and giving to the hermit the beasts of the field as his companions. Yes: there was to be, as Lord Henry had prophesied, a new Hedonism that was to recreate life and to save it from that harsh uncomely puritanism that is having, in our own day, its curious revival. It was to have its service of the intellect, certainly, yet it was never to accept any theory or system that would involve the sacrifice of any mode of passionate experience. Its aim, indeed, was to be experience itself, and not the fruits of experience, sweet or bitter as they might be. Of the asceticism that deadens the senses, as of the vulgar profligacy that dulls them, it was to know nothing. But it was to teach man to concentrate himself upon the moments of a life that is itself but a moment. There are few of us who have not sometimes wakened before dawn, either after one of those dreamless nights that make us almost enamoured of death, or one of those nights of horror and misshapen joy, when through the chambers of the brain sweep phantoms more terrible than reality itself, and instinct with that vivid life that lurks in all grotesques, and that lends to Gothic art its enduring vitality, this art being, one might fancy, especially the art of those whose minds have been troubled with the malady of reverie. Gradually white fingers creep through the curtains, and they appear to tremble. In black fantastic shapes, dumb shadows crawl into the corners of the room and crouch there. Outside, there is the stirring of birds among the leaves, or the sound of men going forth to their work, or the sigh and sob of the wind coming down from the hills and wandering round the silent house, as though it feared to wake the sleepers and yet must needs call forth sleep from her purple cave. Veil after veil of thin dusky gauze is lifted, and by degrees the forms and colours of things are restored to them, and we watch the dawn remaking the world in its antique pattern. The wan mirrors get back their mimic life. The flameless tapers stand where we had left them, and beside them lies the half-cut book that we had been studying, or the wired flower that we had worn at the ball, or the letter that we had been afraid to read, or that we had read too often. Nothing seems to us changed. Out of the unreal shadows of the night comes back the real life that we had known. We have to resume it where we had left off, and there steals over us a terrible sense of the necessity for the continuance of energy in the same wearisome round of stereotyped habits, or a wild longing, it may be, that our eyelids might open some morning upon a world that had been refashioned anew in the darkness for our pleasure, a world in which things would have fresh shapes and colours, and be changed, or have other secrets, a world in which the past would have little or no place, or survive, at any rate, in no conscious form of obligation or regret, the remembrance even of joy having its bitterness and the memories of pleasure their pain. It was the creation of such worlds as these that seemed to Dorian Gray to be the true object, or amongst the true objects, of life; and in his search for sensations that would be at once new and delightful, and possess that element of strangeness that is so essential to romance, he would often adopt certain modes of thought that he knew to be really alien to his nature, abandon himself to their subtle influences, and then, having, as it were, caught their colour and satisfied his intellectual curiosity, leave them with that curious indifference that is not incompatible with a real ardour of temperament, and that, indeed, according to certain modern psychologists, is often a condition of it. It was rumoured of him once that he was about to join the Roman Catholic communion, and certainly the Roman ritual had always a great attraction for him. The daily sacrifice, more awful really than all the sacrifices of the antique world, stirred him as much by its superb rejection of the evidence of the senses as by the primitive simplicity of its elements and the eternal pathos of the human tragedy that it sought to symbolize. He loved to kneel down on the cold marble pavement and watch the priest, in his stiff flowered dalmatic, slowly and with white hands moving aside the veil of the tabernacle, or raising aloft the jewelled, lantern-shaped monstrance with that pallid wafer that at times, one would fain think, is indeed the "_panis caelestis_," the bread of angels, or, robed in the garments of the Passion of Christ, breaking the Host into the chalice and smiting his breast for his sins. The fuming censers that the grave boys, in their lace and scarlet, tossed into the air like great gilt flowers had their subtle fascination for him. As he passed out, he used to look with wonder at the black confessionals and long to sit in the dim shadow of one of them and listen to men and women whispering through the worn grating the true story of their lives. But he never fell into the error of arresting his intellectual development by any formal acceptance of creed or system, or of mistaking, for a house in which to live, an inn that is but suitable for the sojourn of a night, or for a few hours of a night in which there are no stars and the moon is in travail. Mysticism, with its marvellous power of making common things strange to us, and the subtle antinomianism that always seems to accompany it, moved him for a season; and for a season he inclined to the materialistic doctrines of the _Darwinismus_ movement in Germany, and found a curious pleasure in tracing the thoughts and passions of men to some pearly cell in the brain, or some white nerve in the body, delighting in the conception of the absolute dependence of the spirit on certain physical conditions, morbid or healthy, normal or diseased. Yet, as has been said of him before, no theory of life seemed to him to be of any importance compared with life itself. He felt keenly conscious of how barren all intellectual speculation is when separated from action and experiment. He knew that the senses, no less than the soul, have their spiritual mysteries to reveal. And so he would now study perfumes and the secrets of their manufacture, distilling heavily scented oils and burning odorous gums from the East. He saw that there was no mood of the mind that had not its counterpart in the sensuous life, and set himself to discover their true relations, wondering what there was in frankincense that made one mystical, and in ambergris that stirred one's passions, and in violets that woke the memory of dead romances, and in musk that troubled the brain, and in champak that stained the imagination; and seeking often to elaborate a real psychology of perfumes, and to estimate the several influences of sweet-smelling roots and scented, pollen-laden flowers; of aromatic balms and of dark and fragrant woods; of spikenard, that sickens; of hovenia, that makes men mad; and of aloes, that are said to be able to expel melancholy from the soul. At another time he devoted himself entirely to music, and in a long latticed room, with a vermilion-and-gold ceiling and walls of olive-green lacquer, he used to give curious concerts in which mad gipsies tore wild music from little zithers, or grave, yellow-shawled Tunisians plucked at the strained strings of monstrous lutes, while grinning Negroes beat monotonously upon copper drums and, crouching upon scarlet mats, slim turbaned Indians blew through long pipes of reed or brass and charmed--or feigned to charm--great hooded snakes and horrible horned adders. The harsh intervals and shrill discords of barbaric music stirred him at times when Schubert's grace, and Chopin's beautiful sorrows, and the mighty harmonies of Beethoven himself, fell unheeded on his ear. He collected together from all parts of the world the strangest instruments that could be found, either in the tombs of dead nations or among the few savage tribes that have survived contact with Western civilizations, and loved to touch and try them. He had the mysterious _juruparis_ of the Rio Negro Indians, that women are not allowed to look at and that even youths may not see till they have been subjected to fasting and scourging, and the earthen jars of the Peruvians that have the shrill cries of birds, and flutes of human bones such as Alfonso de Ovalle heard in Chile, and the sonorous green jaspers that are found near Cuzco and give forth a note of singular sweetness. He had painted gourds filled with pebbles that rattled when they were shaken; the long _clarin_ of the Mexicans, into which the performer does not blow, but through which he inhales the air; the harsh _ture_ of the Amazon tribes, that is sounded by the sentinels who sit all day long in high trees, and can be heard, it is said, at a distance of three leagues; the _teponaztli_, that has two vibrating tongues of wood and is beaten with sticks that are smeared with an elastic gum obtained from the milky juice of plants; the _yotl_-bells of the Aztecs, that are hung in clusters like grapes; and a huge cylindrical drum, covered with the skins of great serpents, like the one that Bernal Diaz saw when he went with Cortes into the Mexican temple, and of whose doleful sound he has left us so vivid a description. The fantastic character of these instruments fascinated him, and he felt a curious delight in the thought that art, like Nature, has her monsters, things of bestial shape and with hideous voices. Yet, after some time, he wearied of them, and would sit in his box at the opera, either alone or with Lord Henry, listening in rapt pleasure to "Tannhauser" and seeing in the prelude to that great work of art a presentation of the tragedy of his own soul. On one occasion he took up the study of jewels, and appeared at a costume ball as Anne de Joyeuse, Admiral of France, in a dress covered with five hundred and sixty pearls. This taste enthralled him for years, and, indeed, may be said never to have left him. He would often spend a whole day settling and resettling in their cases the various stones that he had collected, such as the olive-green chrysoberyl that turns red by lamplight, the cymophane with its wirelike line of silver, the pistachio-coloured peridot, rose-pink and wine-yellow topazes, carbuncles of fiery scarlet with tremulous, four-rayed stars, flame-red cinnamon-stones, orange and violet spinels, and amethysts with their alternate layers of ruby and sapphire. He loved the red gold of the sunstone, and the moonstone's pearly whiteness, and the broken rainbow of the milky opal. He procured from Amsterdam three emeralds of extraordinary size and richness of colour, and had a turquoise _de la vieille roche_ that was the envy of all the connoisseurs. He discovered wonderful stories, also, about jewels. In Alphonso's Clericalis Disciplina a serpent was mentioned with eyes of real jacinth, and in the romantic history of Alexander, the Conqueror of Emathia was said to have found in the vale of Jordan snakes "with collars of real emeralds growing on their backs." There was a gem in the brain of the dragon, Philostratus told us, and "by the exhibition of golden letters and a scarlet robe" the monster could be thrown into a magical sleep and slain. According to the great alchemist, Pierre de Boniface, the diamond rendered a man invisible, and the agate of India made him eloquent. The cornelian appeased anger, and the hyacinth provoked sleep, and the amethyst drove away the fumes of wine. The garnet cast out demons, and the hydropicus deprived the moon of her colour. The selenite waxed and waned with the moon, and the meloceus, that discovers thieves, could be affected only by the blood of kids. Leonardus Camillus had seen a white stone taken from the brain of a newly killed toad, that was a certain antidote against poison. The bezoar, that was found in the heart of the Arabian deer, was a charm that could cure the plague. In the nests of Arabian birds was the aspilates, that, according to Democritus, kept the wearer from any danger by fire. The King of Ceilan rode through his city with a large ruby in his hand, as the ceremony of his coronation. The gates of the palace of John the Priest were "made of sardius, with the horn of the horned snake inwrought, so that no man might bring poison within." Over the gable were "two golden apples, in which were two carbuncles," so that the gold might shine by day and the carbuncles by night. In Lodge's strange romance 'A Margarite of America', it was stated that in the chamber of the queen one could behold "all the chaste ladies of the world, inchased out of silver, looking through fair mirrours of chrysolites, carbuncles, sapphires, and greene emeraults." Marco Polo had seen the inhabitants of Zipangu place rose-coloured pearls in the mouths of the dead. A sea-monster had been enamoured of the pearl that the diver brought to King Perozes, and had slain the thief, and mourned for seven moons over its loss. When the Huns lured the king into the great pit, he flung it away--Procopius tells the story--nor was it ever found again, though the Emperor Anastasius offered five hundred-weight of gold pieces for it. The King of Malabar had shown to a certain Venetian a rosary of three hundred and four pearls, one for every god that he worshipped. When the Duke de Valentinois, son of Alexander VI, visited Louis XII of France, his horse was loaded with gold leaves, according to Brantome, and his cap had double rows of rubies that threw out a great light. Charles of England had ridden in stirrups hung with four hundred and twenty-one diamonds. Richard II had a coat, valued at thirty thousand marks, which was covered with balas rubies. Hall described Henry VIII, on his way to the Tower previous to his coronation, as wearing "a jacket of raised gold, the placard embroidered with diamonds and other rich stones, and a great bauderike about his neck of large balasses." The favourites of James I wore ear-rings of emeralds set in gold filigrane. Edward II gave to Piers Gaveston a suit of red-gold armour studded with jacinths, a collar of gold roses set with turquoise-stones, and a skull-cap _parseme_ with pearls. Henry II wore jewelled gloves reaching to the elbow, and had a hawk-glove sewn with twelve rubies and fifty-two great orients. The ducal hat of Charles the Rash, the last Duke of Burgundy of his race, was hung with pear-shaped pearls and studded with sapphires. How exquisite life had once been! How gorgeous in its pomp and decoration! Even to read of the luxury of the dead was wonderful. Then he turned his attention to embroideries and to the tapestries that performed the office of frescoes in the chill rooms of the northern nations of Europe. As he investigated the subject--and he always had an extraordinary faculty of becoming absolutely absorbed for the moment in whatever he took up--he was almost saddened by the reflection of the ruin that time brought on beautiful and wonderful things. He, at any rate, had escaped that. Summer followed summer, and the yellow jonquils bloomed and died many times, and nights of horror repeated the story of their shame, but he was unchanged. No winter marred his face or stained his flowerlike bloom. How different it was with material things! Where had they passed to? Where was the great crocus-coloured robe, on which the gods fought against the giants, that had been worked by brown girls for the pleasure of Athena? Where the huge velarium that Nero had stretched across the Colosseum at Rome, that Titan sail of purple on which was represented the starry sky, and Apollo driving a chariot drawn by white, gilt-reined steeds? He longed to see the curious table-napkins wrought for the Priest of the Sun, on which were displayed all the dainties and viands that could be wanted for a feast; the mortuary cloth of King Chilperic, with its three hundred golden bees; the fantastic robes that excited the indignation of the Bishop of Pontus and were figured with "lions, panthers, bears, dogs, forests, rocks, hunters--all, in fact, that a painter can copy from nature"; and the coat that Charles of Orleans once wore, on the sleeves of which were embroidered the verses of a song beginning "_Madame, je suis tout joyeux_," the musical accompaniment of the words being wrought in gold thread, and each note, of square shape in those days, formed with four pearls. He read of the room that was prepared at the palace at Rheims for the use of Queen Joan of Burgundy and was decorated with "thirteen hundred and twenty-one parrots, made in broidery, and blazoned with the king's arms, and five hundred and sixty-one butterflies, whose wings were similarly ornamented with the arms of the queen, the whole worked in gold." Catherine de Medicis had a mourning-bed made for her of black velvet powdered with crescents and suns. Its curtains were of damask, with leafy wreaths and garlands, figured upon a gold and silver ground, and fringed along the edges with broideries of pearls, and it stood in a room hung with rows of the queen's devices in cut black velvet upon cloth of silver. Louis XIV had gold embroidered caryatides fifteen feet high in his apartment. The state bed of Sobieski, King of Poland, was made of Smyrna gold brocade embroidered in turquoises with verses from the Koran. Its supports were of silver gilt, beautifully chased, and profusely set with enamelled and jewelled medallions. It had been taken from the Turkish camp before Vienna, and the standard of Mohammed had stood beneath the tremulous gilt of its canopy. And so, for a whole year, he sought to accumulate the most exquisite specimens that he could find of textile and embroidered work, getting the dainty Delhi muslins, finely wrought with gold-thread palmates and stitched over with iridescent beetles' wings; the Dacca gauzes, that from their transparency are known in the East as "woven air," and "running water," and "evening dew"; strange figured cloths from Java; elaborate yellow Chinese hangings; books bound in tawny satins or fair blue silks and wrought with _fleurs-de-lis_, birds and images; veils of _lacis_ worked in Hungary point; Sicilian brocades and stiff Spanish velvets; Georgian work, with its gilt coins, and Japanese _Foukousas_, with their green-toned golds and their marvellously plumaged birds. He had a special passion, also, for ecclesiastical vestments, as indeed he had for everything connected with the service of the Church. In the long cedar chests that lined the west gallery of his house, he had stored away many rare and beautiful specimens of what is really the raiment of the Bride of Christ, who must wear purple and jewels and fine linen that she may hide the pallid macerated body that is worn by the suffering that she seeks for and wounded by self-inflicted pain. He possessed a gorgeous cope of crimson silk and gold-thread damask, figured with a repeating pattern of golden pomegranates set in six-petalled formal blossoms, beyond which on either side was the pine-apple device wrought in seed-pearls. The orphreys were divided into panels representing scenes from the life of the Virgin, and the coronation of the Virgin was figured in coloured silks upon the hood. This was Italian work of the fifteenth century. Another cope was of green velvet, embroidered with heart-shaped groups of acanthus-leaves, from which spread long-stemmed white blossoms, the details of which were picked out with silver thread and coloured crystals. The morse bore a seraph's head in gold-thread raised work. The orphreys were woven in a diaper of red and gold silk, and were starred with medallions of many saints and martyrs, among whom was St. Sebastian. He had chasubles, also, of amber-coloured silk, and blue silk and gold brocade, and yellow silk damask and cloth of gold, figured with representations of the Passion and Crucifixion of Christ, and embroidered with lions and peacocks and other emblems; dalmatics of white satin and pink silk damask, decorated with tulips and dolphins and _fleurs-de-lis_; altar frontals of crimson velvet and blue linen; and many corporals, chalice-veils, and sudaria. In the mystic offices to which such things were put, there was something that quickened his imagination. For these treasures, and everything that he collected in his lovely house, were to be to him means of forgetfulness, modes by which he could escape, for a season, from the fear that seemed to him at times to be almost too great to be borne. Upon the walls of the lonely locked room where he had spent so much of his boyhood, he had hung with his own hands the terrible portrait whose changing features showed him the real degradation of his life, and in front of it had draped the purple-and-gold pall as a curtain. For weeks he would not go there, would forget the hideous painted thing, and get back his light heart, his wonderful joyousness, his passionate absorption in mere existence. Then, suddenly, some night he would creep out of the house, go down to dreadful places near Blue Gate Fields, and stay there, day after day, until he was driven away. On his return he would sit in front of the picture, sometimes loathing it and himself, but filled, at other times, with that pride of individualism that is half the fascination of sin, and smiling with secret pleasure at the misshapen shadow that had to bear the burden that should have been his own. After a few years he could not endure to be long out of England, and gave up the villa that he had shared at Trouville with Lord Henry, as well as the little white walled-in house at Algiers where they had more than once spent the winter. He hated to be separated from the picture that was such a part of his life, and was also afraid that during his absence some one might gain access to the room, in spite of the elaborate bars that he had caused to be placed upon the door. He was quite conscious that this would tell them nothing. It was true that the portrait still preserved, under all the foulness and ugliness of the face, its marked likeness to himself; but what could they learn from that? He would laugh at any one who tried to taunt him. He had not painted it. What was it to him how vile and full of shame it looked? Even if he told them, would they believe it? Yet he was afraid. Sometimes when he was down at his great house in Nottinghamshire, entertaining the fashionable young men of his own rank who were his chief companions, and astounding the county by the wanton luxury and gorgeous splendour of his mode of life, he would suddenly leave his guests and rush back to town to see that the door had not been tampered with and that the picture was still there. What if it should be stolen? The mere thought made him cold with horror. Surely the world would know his secret then. Perhaps the world already suspected it. For, while he fascinated many, there were not a few who distrusted him. He was very nearly blackballed at a West End club of which his birth and social position fully entitled him to become a member, and it was said that on one occasion, when he was brought by a friend into the smoking-room of the Churchill, the Duke of Berwick and another gentleman got up in a marked manner and went out. Curious stories became current about him after he had passed his twenty-fifth year. It was rumoured that he had been seen brawling with foreign sailors in a low den in the distant parts of Whitechapel, and that he consorted with thieves and coiners and knew the mysteries of their trade. His extraordinary absences became notorious, and, when he used to reappear again in society, men would whisper to each other in corners, or pass him with a sneer, or look at him with cold searching eyes, as though they were determined to discover his secret. Of such insolences and attempted slights he, of course, took no notice, and in the opinion of most people his frank debonair manner, his charming boyish smile, and the infinite grace of that wonderful youth that seemed never to leave him, were in themselves a sufficient answer to the calumnies, for so they termed them, that were circulated about him. It was remarked, however, that some of those who had been most intimate with him appeared, after a time, to shun him. Women who had wildly adored him, and for his sake had braved all social censure and set convention at defiance, were seen to grow pallid with shame or horror if Dorian Gray entered the room. Yet these whispered scandals only increased in the eyes of many his strange and dangerous charm. His great wealth was a certain element of security. Society--civilized society, at least--is never very ready to believe anything to the detriment of those who are both rich and fascinating. It feels instinctively that manners are of more importance than morals, and, in its opinion, the highest respectability is of much less value than the possession of a good _chef_. And, after all, it is a very poor consolation to be told that the man who has given one a bad dinner, or poor wine, is irreproachable in his private life. Even the cardinal virtues cannot atone for half-cold _entrees_, as Lord Henry remarked once, in a discussion on the subject, and there is possibly a good deal to be said for his view. For the canons of good society are, or should be, the same as the canons of art. Form is absolutely essential to it. It should have the dignity of a ceremony, as well as its unreality, and should combine the insincere character of a romantic play with the wit and beauty that make such plays delightful to us. Is insincerity such a terrible thing? I think not. It is merely a method by which we can multiply our personalities. Such, at any rate, was Dorian Gray's opinion. He used to wonder at the shallow psychology of those who conceive the ego in man as a thing simple, permanent, reliable, and of one essence. To him, man was a being with myriad lives and myriad sensations, a complex multiform creature that bore within itself strange legacies of thought and passion, and whose very flesh was tainted with the monstrous maladies of the dead. He loved to stroll through the gaunt cold picture-gallery of his country house and look at the various portraits of those whose blood flowed in his veins. Here was Philip Herbert, described by Francis Osborne, in his Memoires on the Reigns of Queen Elizabeth and King James, as one who was "caressed by the Court for his handsome face, which kept him not long company." Was it young Herbert's life that he sometimes led? Had some strange poisonous germ crept from body to body till it had reached his own? Was it some dim sense of that ruined grace that had made him so suddenly, and almost without cause, give utterance, in Basil Hallward's studio, to the mad prayer that had so changed his life? Here, in gold-embroidered red doublet, jewelled surcoat, and gilt-edged ruff and wristbands, stood Sir Anthony Sherard, with his silver-and-black armour piled at his feet. What had this man's legacy been? Had the lover of Giovanna of Naples bequeathed him some inheritance of sin and shame? Were his own actions merely the dreams that the dead man had not dared to realize? Here, from the fading canvas, smiled Lady Elizabeth Devereux, in her gauze hood, pearl stomacher, and pink slashed sleeves. A flower was in her right hand, and her left clasped an enamelled collar of white and damask roses. On a table by her side lay a mandolin and an apple. There were large green rosettes upon her little pointed shoes. He knew her life, and the strange stories that were told about her lovers. Had he something of her temperament in him? These oval, heavy-lidded eyes seemed to look curiously at him. What of George Willoughby, with his powdered hair and fantastic patches? How evil he looked! The face was saturnine and swarthy, and the sensual lips seemed to be twisted with disdain. Delicate lace ruffles fell over the lean yellow hands that were so overladen with rings. He had been a macaroni of the eighteenth century, and the friend, in his youth, of Lord Ferrars. What of the second Lord Beckenham, the companion of the Prince Regent in his wildest days, and one of the witnesses at the secret marriage with Mrs. Fitzherbert? How proud and handsome he was, with his chestnut curls and insolent pose! What passions had he bequeathed? The world had looked upon him as infamous. He had led the orgies at Carlton House. The star of the Garter glittered upon his breast. Beside him hung the portrait of his wife, a pallid, thin-lipped woman in black. Her blood, also, stirred within him. How curious it all seemed! And his mother with her Lady Hamilton face and her moist, wine-dashed lips--he knew what he had got from her. He had got from her his beauty, and his passion for the beauty of others. She laughed at him in her loose Bacchante dress. There were vine leaves in her hair. The purple spilled from the cup she was holding. The carnations of the painting had withered, but the eyes were still wonderful in their depth and brilliancy of colour. They seemed to follow him wherever he went. Yet one had ancestors in literature as well as in one's own race, nearer perhaps in type and temperament, many of them, and certainly with an influence of which one was more absolutely conscious. There were times when it appeared to Dorian Gray that the whole of history was merely the record of his own life, not as he had lived it in act and circumstance, but as his imagination had created it for him, as it had been in his brain and in his passions. He felt that he had known them all, those strange terrible figures that had passed across the stage of the world and made sin so marvellous and evil so full of subtlety. It seemed to him that in some mysterious way their lives had been his own. The hero of the wonderful novel that had so influenced his life had himself known this curious fancy. In the seventh chapter he tells how, crowned with laurel, lest lightning might strike him, he had sat, as Tiberius, in a garden at Capri, reading the shameful books of Elephantis, while dwarfs and peacocks strutted round him and the flute-player mocked the swinger of the censer; and, as Caligula, had caroused with the green-shirted jockeys in their stables and supped in an ivory manger with a jewel-frontleted horse; and, as Domitian, had wandered through a corridor lined with marble mirrors, looking round with haggard eyes for the reflection of the dagger that was to end his days, and sick with that ennui, that terrible _taedium vitae_, that comes on those to whom life denies nothing; and had peered through a clear emerald at the red shambles of the circus and then, in a litter of pearl and purple drawn by silver-shod mules, been carried through the Street of Pomegranates to a House of Gold and heard men cry on Nero Caesar as he passed by; and, as Elagabalus, had painted his face with colours, and plied the distaff among the women, and brought the Moon from Carthage and given her in mystic marriage to the Sun. Over and over again Dorian used to read this fantastic chapter, and the two chapters immediately following, in which, as in some curious tapestries or cunningly wrought enamels, were pictured the awful and beautiful forms of those whom vice and blood and weariness had made monstrous or mad: Filippo, Duke of Milan, who slew his wife and painted her lips with a scarlet poison that her lover might suck death from the dead thing he fondled; Pietro Barbi, the Venetian, known as Paul the Second, who sought in his vanity to assume the title of Formosus, and whose tiara, valued at two hundred thousand florins, was bought at the price of a terrible sin; Gian Maria Visconti, who used hounds to chase living men and whose murdered body was covered with roses by a harlot who had loved him; the Borgia on his white horse, with Fratricide riding beside him and his mantle stained with the blood of Perotto; Pietro Riario, the young Cardinal Archbishop of Florence, child and minion of Sixtus IV, whose beauty was equalled only by his debauchery, and who received Leonora of Aragon in a pavilion of white and crimson silk, filled with nymphs and centaurs, and gilded a boy that he might serve at the feast as Ganymede or Hylas; Ezzelin, whose melancholy could be cured only by the spectacle of death, and who had a passion for red blood, as other men have for red wine--the son of the Fiend, as was reported, and one who had cheated his father at dice when gambling with him for his own soul; Giambattista Cibo, who in mockery took the name of Innocent and into whose torpid veins the blood of three lads was infused by a Jewish doctor; Sigismondo Malatesta, the lover of Isotta and the lord of Rimini, whose effigy was burned at Rome as the enemy of God and man, who strangled Polyssena with a napkin, and gave poison to Ginevra d'Este in a cup of emerald, and in honour of a shameful passion built a pagan church for Christian worship; Charles VI, who had so wildly adored his brother's wife that a leper had warned him of the insanity that was coming on him, and who, when his brain had sickened and grown strange, could only be soothed by Saracen cards painted with the images of love and death and madness; and, in his trimmed jerkin and jewelled cap and acanthuslike curls, Grifonetto Baglioni, who slew Astorre with his bride, and Simonetto with his page, and whose comeliness was such that, as he lay dying in the yellow piazza of Perugia, those who had hated him could not choose but weep, and Atalanta, who had cursed him, blessed him. There was a horrible fascination in them all. He saw them at night, and they troubled his imagination in the day. The Renaissance knew of strange manners of poisoning--poisoning by a helmet and a lighted torch, by an embroidered glove and a jewelled fan, by a gilded pomander and by an amber chain. Dorian Gray had been poisoned by a book. There were moments when he looked on evil simply as a mode through which he could realize his conception of the beautiful. CHAPTER 12 It was on the ninth of November, the eve of his own thirty-eighth birthday, as he often remembered afterwards. He was walking home about eleven o'clock from Lord Henry's, where he had been dining, and was wrapped in heavy furs, as the night was cold and foggy. At the corner of Grosvenor Square and South Audley Street, a man passed him in the mist, walking very fast and with the collar of his grey ulster turned up. He had a bag in his hand. Dorian recognized him. It was Basil Hallward. A strange sense of fear, for which he could not account, came over him. He made no sign of recognition and went on quickly in the direction of his own house. But Hallward had seen him. Dorian heard him first stopping on the pavement and then hurrying after him. In a few moments, his hand was on his arm. "Dorian! What an extraordinary piece of luck! I have been waiting for you in your library ever since nine o'clock. Finally I took pity on your tired servant and told him to go to bed, as he let me out. I am off to Paris by the midnight train, and I particularly wanted to see you before I left. I thought it was you, or rather your fur coat, as you passed me. But I wasn't quite sure. Didn't you recognize me?" "In this fog, my dear Basil? Why, I can't even recognize Grosvenor Square. I believe my house is somewhere about here, but I don't feel at all certain about it. I am sorry you are going away, as I have not seen you for ages. But I suppose you will be back soon?" "No: I am going to be out of England for six months. I intend to take a studio in Paris and shut myself up till I have finished a great picture I have in my head. However, it wasn't about myself I wanted to talk. Here we are at your door. Let me come in for a moment. I have something to say to you." "I shall be charmed. But won't you miss your train?" said Dorian Gray languidly as he passed up the steps and opened the door with his latch-key. The lamplight struggled out through the fog, and Hallward looked at his watch. "I have heaps of time," he answered. "The train doesn't go till twelve-fifteen, and it is only just eleven. In fact, I was on my way to the club to look for you, when I met you. You see, I shan't have any delay about luggage, as I have sent on my heavy things. All I have with me is in this bag, and I can easily get to Victoria in twenty minutes." Dorian looked at him and smiled. "What a way for a fashionable painter to travel! A Gladstone bag and an ulster! Come in, or the fog will get into the house. And mind you don't talk about anything serious. Nothing is serious nowadays. At least nothing should be." Hallward shook his head, as he entered, and followed Dorian into the library. There was a bright wood fire blazing in the large open hearth. The lamps were lit, and an open Dutch silver spirit-case stood, with some siphons of soda-water and large cut-glass tumblers, on a little marqueterie table. "You see your servant made me quite at home, Dorian. He gave me everything I wanted, including your best gold-tipped cigarettes. He is a most hospitable creature. I like him much better than the Frenchman you used to have. What has become of the Frenchman, by the bye?" Dorian shrugged his shoulders. "I believe he married Lady Radley's maid, and has established her in Paris as an English dressmaker. Anglomania is very fashionable over there now, I hear. It seems silly of the French, doesn't it? But--do you know?--he was not at all a bad servant. I never liked him, but I had nothing to complain about. One often imagines things that are quite absurd. He was really very devoted to me and seemed quite sorry when he went away. Have another brandy-and-soda? Or would you like hock-and-seltzer? I always take hock-and-seltzer myself. There is sure to be some in the next room." "Thanks, I won't have anything more," said the painter, taking his cap and coat off and throwing them on the bag that he had placed in the corner. "And now, my dear fellow, I want to speak to you seriously. Don't frown like that. You make it so much more difficult for me." "What is it all about?" cried Dorian in his petulant way, flinging himself down on the sofa. "I hope it is not about myself. I am tired of myself to-night. I should like to be somebody else." "It is about yourself," answered Hallward in his grave deep voice, "and I must say it to you. I shall only keep you half an hour." Dorian sighed and lit a cigarette. "Half an hour!" he murmured. "It is not much to ask of you, Dorian, and it is entirely for your own sake that I am speaking. I think it right that you should know that the most dreadful things are being said against you in London." "I don't wish to know anything about them. I love scandals about other people, but scandals about myself don't interest me. They have not got the charm of novelty." "They must interest you, Dorian. Every gentleman is interested in his good name. You don't want people to talk of you as something vile and degraded. Of course, you have your position, and your wealth, and all that kind of thing. But position and wealth are not everything. Mind you, I don't believe these rumours at all. At least, I can't believe them when I see you. Sin is a thing that writes itself across a man's face. It cannot be concealed. People talk sometimes of secret vices. There are no such things. If a wretched man has a vice, it shows itself in the lines of his mouth, the droop of his eyelids, the moulding of his hands even. Somebody--I won't mention his name, but you know him--came to me last year to have his portrait done. I had never seen him before, and had never heard anything about him at the time, though I have heard a good deal since. He offered an extravagant price. I refused him. There was something in the shape of his fingers that I hated. I know now that I was quite right in what I fancied about him. His life is dreadful. But you, Dorian, with your pure, bright, innocent face, and your marvellous untroubled youth--I can't believe anything against you. And yet I see you very seldom, and you never come down to the studio now, and when I am away from you, and I hear all these hideous things that people are whispering about you, I don't know what to say. Why is it, Dorian, that a man like the Duke of Berwick leaves the room of a club when you enter it? Why is it that so many gentlemen in London will neither go to your house or invite you to theirs? You used to be a friend of Lord Staveley. I met him at dinner last week. Your name happened to come up in conversation, in connection with the miniatures you have lent to the exhibition at the Dudley. Staveley curled his lip and said that you might have the most artistic tastes, but that you were a man whom no pure-minded girl should be allowed to know, and whom no chaste woman should sit in the same room with. I reminded him that I was a friend of yours, and asked him what he meant. He told me. He told me right out before everybody. It was horrible! Why is your friendship so fatal to young men? There was that wretched boy in the Guards who committed suicide. You were his great friend. There was Sir Henry Ashton, who had to leave England with a tarnished name. You and he were inseparable. What about Adrian Singleton and his dreadful end? What about Lord Kent's only son and his career? I met his father yesterday in St. James's Street. He seemed broken with shame and sorrow. What about the young Duke of Perth? What sort of life has he got now? What gentleman would associate with him?" "Stop, Basil. You are talking about things of which you know nothing," said Dorian Gray, biting his lip, and with a note of infinite contempt in his voice. "You ask me why Berwick leaves a room when I enter it. It is because I know everything about his life, not because he knows anything about mine. With such blood as he has in his veins, how could his record be clean? You ask me about Henry Ashton and young Perth. Did I teach the one his vices, and the other his debauchery? If Kent's silly son takes his wife from the streets, what is that to me? If Adrian Singleton writes his friend's name across a bill, am I his keeper? I know how people chatter in England. The middle classes air their moral prejudices over their gross dinner-tables, and whisper about what they call the profligacies of their betters in order to try and pretend that they are in smart society and on intimate terms with the people they slander. In this country, it is enough for a man to have distinction and brains for every common tongue to wag against him. And what sort of lives do these people, who pose as being moral, lead themselves? My dear fellow, you forget that we are in the native land of the hypocrite." "Dorian," cried Hallward, "that is not the question. England is bad enough I know, and English society is all wrong. That is the reason why I want you to be fine. You have not been fine. One has a right to judge of a man by the effect he has over his friends. Yours seem to lose all sense of honour, of goodness, of purity. You have filled them with a madness for pleasure. They have gone down into the depths. You led them there. Yes: you led them there, and yet you can smile, as you are smiling now. And there is worse behind. I know you and Harry are inseparable. Surely for that reason, if for none other, you should not have made his sister's name a by-word." "Take care, Basil. You go too far." "I must speak, and you must listen. You shall listen. When you met Lady Gwendolen, not a breath of scandal had ever touched her. Is there a single decent woman in London now who would drive with her in the park? Why, even her children are not allowed to live with her. Then there are other stories--stories that you have been seen creeping at dawn out of dreadful houses and slinking in disguise into the foulest dens in London. Are they true? Can they be true? When I first heard them, I laughed. I hear them now, and they make me shudder. What about your country-house and the life that is led there? Dorian, you don't know what is said about you. I won't tell you that I don't want to preach to you. I remember Harry saying once that every man who turned himself into an amateur curate for the moment always began by saying that, and then proceeded to break his word. I do want to preach to you. I want you to lead such a life as will make the world respect you. I want you to have a clean name and a fair record. I want you to get rid of the dreadful people you associate with. Don't shrug your shoulders like that. Don't be so indifferent. You have a wonderful influence. Let it be for good, not for evil. They say that you corrupt every one with whom you become intimate, and that it is quite sufficient for you to enter a house for shame of some kind to follow after. I don't know whether it is so or not. How should I know? But it is said of you. I am told things that it seems impossible to doubt. Lord Gloucester was one of my greatest friends at Oxford. He showed me a letter that his wife had written to him when she was dying alone in her villa at Mentone. Your name was implicated in the most terrible confession I ever read. I told him that it was absurd--that I knew you thoroughly and that you were incapable of anything of the kind. Know you? I wonder do I know you? Before I could answer that, I should have to see your soul." "To see my soul!" muttered Dorian Gray, starting up from the sofa and turning almost white from fear. "Yes," answered Hallward gravely, and with deep-toned sorrow in his voice, "to see your soul. But only God can do that." A bitter laugh of mockery broke from the lips of the younger man. "You shall see it yourself, to-night!" he cried, seizing a lamp from the table. "Come: it is your own handiwork. Why shouldn't you look at it? You can tell the world all about it afterwards, if you choose. Nobody would believe you. If they did believe you, they would like me all the better for it. I know the age better than you do, though you will prate about it so tediously. Come, I tell you. You have chattered enough about corruption. Now you shall look on it face to face." There was the madness of pride in every word he uttered. He stamped his foot upon the ground in his boyish insolent manner. He felt a terrible joy at the thought that some one else was to share his secret, and that the man who had painted the portrait that was the origin of all his shame was to be burdened for the rest of his life with the hideous memory of what he had done. "Yes," he continued, coming closer to him and looking steadfastly into his stern eyes, "I shall show you my soul. You shall see the thing that you fancy only God can see." Hallward started back. "This is blasphemy, Dorian!" he cried. "You must not say things like that. They are horrible, and they don't mean anything." "You think so?" He laughed again. "I know so. As for what I said to you to-night, I said it for your good. You know I have been always a stanch friend to you." "Don't touch me. Finish what you have to say." A twisted flash of pain shot across the painter's face. He paused for a moment, and a wild feeling of pity came over him. After all, what right had he to pry into the life of Dorian Gray? If he had done a tithe of what was rumoured about him, how much he must have suffered! Then he straightened himself up, and walked over to the fire-place, and stood there, looking at the burning logs with their frostlike ashes and their throbbing cores of flame. "I am waiting, Basil," said the young man in a hard clear voice. He turned round. "What I have to say is this," he cried. "You must give me some answer to these horrible charges that are made against you. If you tell me that they are absolutely untrue from beginning to end, I shall believe you. Deny them, Dorian, deny them! Can't you see what I am going through? My God! don't tell me that you are bad, and corrupt, and shameful." Dorian Gray smiled. There was a curl of contempt in his lips. "Come upstairs, Basil," he said quietly. "I keep a diary of my life from day to day, and it never leaves the room in which it is written. I shall show it to you if you come with me." "I shall come with you, Dorian, if you wish it. I see I have missed my train. That makes no matter. I can go to-morrow. But don't ask me to read anything to-night. All I want is a plain answer to my question." "That shall be given to you upstairs. I could not give it here. You will not have to read long." CHAPTER 13 He passed out of the room and began the ascent, Basil Hallward following close behind. They walked softly, as men do instinctively at night. The lamp cast fantastic shadows on the wall and staircase. A rising wind made some of the windows rattle. When they reached the top landing, Dorian set the lamp down on the floor, and taking out the key, turned it in the lock. "You insist on knowing, Basil?" he asked in a low voice. "Yes." "I am delighted," he answered, smiling. Then he added, somewhat harshly, "You are the one man in the world who is entitled to know everything about me. You have had more to do with my life than you think"; and, taking up the lamp, he opened the door and went in. A cold current of air passed them, and the light shot up for a moment in a flame of murky orange. He shuddered. "Shut the door behind you," he whispered, as he placed the lamp on the table. Hallward glanced round him with a puzzled expression. The room looked as if it had not been lived in for years. A faded Flemish tapestry, a curtained picture, an old Italian _cassone_, and an almost empty book-case--that was all that it seemed to contain, besides a chair and a table. As Dorian Gray was lighting a half-burned candle that was standing on the mantelshelf, he saw that the whole place was covered with dust and that the carpet was in holes. A mouse ran scuffling behind the wainscoting. There was a damp odour of mildew. "So you think that it is only God who sees the soul, Basil? Draw that curtain back, and you will see mine." The voice that spoke was cold and cruel. "You are mad, Dorian, or playing a part," muttered Hallward, frowning. "You won't? Then I must do it myself," said the young man, and he tore the curtain from its rod and flung it on the ground. An exclamation of horror broke from the painter's lips as he saw in the dim light the hideous face on the canvas grinning at him. There was something in its expression that filled him with disgust and loathing. Good heavens! it was Dorian Gray's own face that he was looking at! The horror, whatever it was, had not yet entirely spoiled that marvellous beauty. There was still some gold in the thinning hair and some scarlet on the sensual mouth. The sodden eyes had kept something of the loveliness of their blue, the noble curves had not yet completely passed away from chiselled nostrils and from plastic throat. Yes, it was Dorian himself. But who had done it? He seemed to recognize his own brushwork, and the frame was his own design. The idea was monstrous, yet he felt afraid. He seized the lighted candle, and held it to the picture. In the left-hand corner was his own name, traced in long letters of bright vermilion. It was some foul parody, some infamous ignoble satire. He had never done that. Still, it was his own picture. He knew it, and he felt as if his blood had changed in a moment from fire to sluggish ice. His own picture! What did it mean? Why had it altered? He turned and looked at Dorian Gray with the eyes of a sick man. His mouth twitched, and his parched tongue seemed unable to articulate. He passed his hand across his forehead. It was dank with clammy sweat. The young man was leaning against the mantelshelf, watching him with that strange expression that one sees on the faces of those who are absorbed in a play when some great artist is acting. There was neither real sorrow in it nor real joy. There was simply the passion of the spectator, with perhaps a flicker of triumph in his eyes. He had taken the flower out of his coat, and was smelling it, or pretending to do so. "What does this mean?" cried Hallward, at last. His own voice sounded shrill and curious in his ears. "Years ago, when I was a boy," said Dorian Gray, crushing the flower in his hand, "you met me, flattered me, and taught me to be vain of my good looks. One day you introduced me to a friend of yours, who explained to me the wonder of youth, and you finished a portrait of me that revealed to me the wonder of beauty. In a mad moment that, even now, I don't know whether I regret or not, I made a wish, perhaps you would call it a prayer...." "I remember it! Oh, how well I remember it! No! the thing is impossible. The room is damp. Mildew has got into the canvas. The paints I used had some wretched mineral poison in them. I tell you the thing is impossible." "Ah, what is impossible?" murmured the young man, going over to the window and leaning his forehead against the cold, mist-stained glass. "You told me you had destroyed it." "I was wrong. It has destroyed me." "I don't believe it is my picture." "Can't you see your ideal in it?" said Dorian bitterly. "My ideal, as you call it..." "As you called it." "There was nothing evil in it, nothing shameful. You were to me such an ideal as I shall never meet again. This is the face of a satyr." "It is the face of my soul." "Christ! what a thing I must have worshipped! It has the eyes of a devil." "Each of us has heaven and hell in him, Basil," cried Dorian with a wild gesture of despair. Hallward turned again to the portrait and gazed at it. "My God! If it is true," he exclaimed, "and this is what you have done with your life, why, you must be worse even than those who talk against you fancy you to be!" He held the light up again to the canvas and examined it. The surface seemed to be quite undisturbed and as he had left it. It was from within, apparently, that the foulness and horror had come. Through some strange quickening of inner life the leprosies of sin were slowly eating the thing away. The rotting of a corpse in a watery grave was not so fearful. His hand shook, and the candle fell from its socket on the floor and lay there sputtering. He placed his foot on it and put it out. Then he flung himself into the rickety chair that was standing by the table and buried his face in his hands. "Good God, Dorian, what a lesson! What an awful lesson!" There was no answer, but he could hear the young man sobbing at the window. "Pray, Dorian, pray," he murmured. "What is it that one was taught to say in one's boyhood? 'Lead us not into temptation. Forgive us our sins. Wash away our iniquities.' Let us say that together. The prayer of your pride has been answered. The prayer of your repentance will be answered also. I worshipped you too much. I am punished for it. You worshipped yourself too much. We are both punished." Dorian Gray turned slowly around and looked at him with tear-dimmed eyes. "It is too late, Basil," he faltered. "It is never too late, Dorian. Let us kneel down and try if we cannot remember a prayer. Isn't there a verse somewhere, 'Though your sins be as scarlet, yet I will make them as white as snow'?" "Those words mean nothing to me now." "Hush! Don't say that. You have done enough evil in your life. My God! Don't you see that accursed thing leering at us?" Dorian Gray glanced at the picture, and suddenly an uncontrollable feeling of hatred for Basil Hallward came over him, as though it had been suggested to him by the image on the canvas, whispered into his ear by those grinning lips. The mad passions of a hunted animal stirred within him, and he loathed the man who was seated at the table, more than in his whole life he had ever loathed anything. He glanced wildly around. Something glimmered on the top of the painted chest that faced him. His eye fell on it. He knew what it was. It was a knife that he had brought up, some days before, to cut a piece of cord, and had forgotten to take away with him. He moved slowly towards it, passing Hallward as he did so. As soon as he got behind him, he seized it and turned round. Hallward stirred in his chair as if he was going to rise. He rushed at him and dug the knife into the great vein that is behind the ear, crushing the man's head down on the table and stabbing again and again. There was a stifled groan and the horrible sound of some one choking with blood. Three times the outstretched arms shot up convulsively, waving grotesque, stiff-fingered hands in the air. He stabbed him twice more, but the man did not move. Something began to trickle on the floor. He waited for a moment, still pressing the head down. Then he threw the knife on the table, and listened. He could hear nothing, but the drip, drip on the threadbare carpet. He opened the door and went out on the landing. The house was absolutely quiet. No one was about. For a few seconds he stood bending over the balustrade and peering down into the black seething well of darkness. Then he took out the key and returned to the room, locking himself in as he did so. The thing was still seated in the chair, straining over the table with bowed head, and humped back, and long fantastic arms. Had it not been for the red jagged tear in the neck and the clotted black pool that was slowly widening on the table, one would have said that the man was simply asleep. How quickly it had all been done! He felt strangely calm, and walking over to the window, opened it and stepped out on the balcony. The wind had blown the fog away, and the sky was like a monstrous peacock's tail, starred with myriads of golden eyes. He looked down and saw the policeman going his rounds and flashing the long beam of his lantern on the doors of the silent houses. The crimson spot of a prowling hansom gleamed at the corner and then vanished. A woman in a fluttering shawl was creeping slowly by the railings, staggering as she went. Now and then she stopped and peered back. Once, she began to sing in a hoarse voice. The policeman strolled over and said something to her. She stumbled away, laughing. A bitter blast swept across the square. The gas-lamps flickered and became blue, and the leafless trees shook their black iron branches to and fro. He shivered and went back, closing the window behind him. Having reached the door, he turned the key and opened it. He did not even glance at the murdered man. He felt that the secret of the whole thing was not to realize the situation. The friend who had painted the fatal portrait to which all his misery had been due had gone out of his life. That was enough. Then he remembered the lamp. It was a rather curious one of Moorish workmanship, made of dull silver inlaid with arabesques of burnished steel, and studded with coarse turquoises. Perhaps it might be missed by his servant, and questions would be asked. He hesitated for a moment, then he turned back and took it from the table. He could not help seeing the dead thing. How still it was! How horribly white the long hands looked! It was like a dreadful wax image. Having locked the door behind him, he crept quietly downstairs. The woodwork creaked and seemed to cry out as if in pain. He stopped several times and waited. No: everything was still. It was merely the sound of his own footsteps. When he reached the library, he saw the bag and coat in the corner. They must be hidden away somewhere. He unlocked a secret press that was in the wainscoting, a press in which he kept his own curious disguises, and put them into it. He could easily burn them afterwards. Then he pulled out his watch. It was twenty minutes to two. He sat down and began to think. Every year--every month, almost--men were strangled in England for what he had done. There had been a madness of murder in the air. Some red star had come too close to the earth.... And yet, what evidence was there against him? Basil Hallward had left the house at eleven. No one had seen him come in again. Most of the servants were at Selby Royal. His valet had gone to bed.... Paris! Yes. It was to Paris that Basil had gone, and by the midnight train, as he had intended. With his curious reserved habits, it would be months before any suspicions would be roused. Months! Everything could be destroyed long before then. A sudden thought struck him. He put on his fur coat and hat and went out into the hall. There he paused, hearing the slow heavy tread of the policeman on the pavement outside and seeing the flash of the bull's-eye reflected in the window. He waited and held his breath. After a few moments he drew back the latch and slipped out, shutting the door very gently behind him. Then he began ringing the bell. In about five minutes his valet appeared, half-dressed and looking very drowsy. "I am sorry to have had to wake you up, Francis," he said, stepping in; "but I had forgotten my latch-key. What time is it?" "Ten minutes past two, sir," answered the man, looking at the clock and blinking. "Ten minutes past two? How horribly late! You must wake me at nine to-morrow. I have some work to do." "All right, sir." "Did any one call this evening?" "Mr. Hallward, sir. He stayed here till eleven, and then he went away to catch his train." "Oh! I am sorry I didn't see him. Did he leave any message?" "No, sir, except that he would write to you from Paris, if he did not find you at the club." "That will do, Francis. Don't forget to call me at nine to-morrow." "No, sir." The man shambled down the passage in his slippers. Dorian Gray threw his hat and coat upon the table and passed into the library. For a quarter of an hour he walked up and down the room, biting his lip and thinking. Then he took down the Blue Book from one of the shelves and began to turn over the leaves. "Alan Campbell, 152, Hertford Street, Mayfair." Yes; that was the man he wanted. CHAPTER 14 At nine o'clock the next morning his servant came in with a cup of chocolate on a tray and opened the shutters. Dorian was sleeping quite peacefully, lying on his right side, with one hand underneath his cheek. He looked like a boy who had been tired out with play, or study. The man had to touch him twice on the shoulder before he woke, and as he opened his eyes a faint smile passed across his lips, as though he had been lost in some delightful dream. Yet he had not dreamed at all. His night had been untroubled by any images of pleasure or of pain. But youth smiles without any reason. It is one of its chiefest charms. He turned round, and leaning upon his elbow, began to sip his chocolate. The mellow November sun came streaming into the room. The sky was bright, and there was a genial warmth in the air. It was almost like a morning in May. Gradually the events of the preceding night crept with silent, blood-stained feet into his brain and reconstructed themselves there with terrible distinctness. He winced at the memory of all that he had suffered, and for a moment the same curious feeling of loathing for Basil Hallward that had made him kill him as he sat in the chair came back to him, and he grew cold with passion. The dead man was still sitting there, too, and in the sunlight now. How horrible that was! Such hideous things were for the darkness, not for the day. He felt that if he brooded on what he had gone through he would sicken or grow mad. There were sins whose fascination was more in the memory than in the doing of them, strange triumphs that gratified the pride more than the passions, and gave to the intellect a quickened sense of joy, greater than any joy they brought, or could ever bring, to the senses. But this was not one of them. It was a thing to be driven out of the mind, to be drugged with poppies, to be strangled lest it might strangle one itself. When the half-hour struck, he passed his hand across his forehead, and then got up hastily and dressed himself with even more than his usual care, giving a good deal of attention to the choice of his necktie and scarf-pin and changing his rings more than once. He spent a long time also over breakfast, tasting the various dishes, talking to his valet about some new liveries that he was thinking of getting made for the servants at Selby, and going through his correspondence. At some of the letters, he smiled. Three of them bored him. One he read several times over and then tore up with a slight look of annoyance in his face. "That awful thing, a woman's memory!" as Lord Henry had once said. After he had drunk his cup of black coffee, he wiped his lips slowly with a napkin, motioned to his servant to wait, and going over to the table, sat down and wrote two letters. One he put in his pocket, the other he handed to the valet. "Take this round to 152, Hertford Street, Francis, and if Mr. Campbell is out of town, get his address." As soon as he was alone, he lit a cigarette and began sketching upon a piece of paper, drawing first flowers and bits of architecture, and then human faces. Suddenly he remarked that every face that he drew seemed to have a fantastic likeness to Basil Hallward. He frowned, and getting up, went over to the book-case and took out a volume at hazard. He was determined that he would not think about what had happened until it became absolutely necessary that he should do so. When he had stretched himself on the sofa, he looked at the title-page of the book. It was Gautier's Emaux et Camees, Charpentier's Japanese-paper edition, with the Jacquemart etching. The binding was of citron-green leather, with a design of gilt trellis-work and dotted pomegranates. It had been given to him by Adrian Singleton. As he turned over the pages, his eye fell on the poem about the hand of Lacenaire, the cold yellow hand "_du supplice encore mal lavee_," with its downy red hairs and its "_doigts de faune_." He glanced at his own white taper fingers, shuddering slightly in spite of himself, and passed on, till he came to those lovely stanzas upon Venice: Sur une gamme chromatique, Le sein de perles ruisselant, La Venus de l'Adriatique Sort de l'eau son corps rose et blanc. Les domes, sur l'azur des ondes Suivant la phrase au pur contour, S'enflent comme des gorges rondes Que souleve un soupir d'amour. L'esquif aborde et me depose, Jetant son amarre au pilier, Devant une facade rose, Sur le marbre d'un escalier. How exquisite they were! As one read them, one seemed to be floating down the green water-ways of the pink and pearl city, seated in a black gondola with silver prow and trailing curtains. The mere lines looked to him like those straight lines of turquoise-blue that follow one as one pushes out to the Lido. The sudden flashes of colour reminded him of the gleam of the opal-and-iris-throated birds that flutter round the tall honeycombed Campanile, or stalk, with such stately grace, through the dim, dust-stained arcades. Leaning back with half-closed eyes, he kept saying over and over to himself: "Devant une facade rose, Sur le marbre d'un escalier." The whole of Venice was in those two lines. He remembered the autumn that he had passed there, and a wonderful love that had stirred him to mad delightful follies. There was romance in every place. But Venice, like Oxford, had kept the background for romance, and, to the true romantic, background was everything, or almost everything. Basil had been with him part of the time, and had gone wild over Tintoret. Poor Basil! What a horrible way for a man to die! He sighed, and took up the volume again, and tried to forget. He read of the swallows that fly in and out of the little _cafe_ at Smyrna where the Hadjis sit counting their amber beads and the turbaned merchants smoke their long tasselled pipes and talk gravely to each other; he read of the Obelisk in the Place de la Concorde that weeps tears of granite in its lonely sunless exile and longs to be back by the hot, lotus-covered Nile, where there are Sphinxes, and rose-red ibises, and white vultures with gilded claws, and crocodiles with small beryl eyes that crawl over the green steaming mud; he began to brood over those verses which, drawing music from kiss-stained marble, tell of that curious statue that Gautier compares to a contralto voice, the "_monstre charmant_" that couches in the porphyry-room of the Louvre. But after a time the book fell from his hand. He grew nervous, and a horrible fit of terror came over him. What if Alan Campbell should be out of England? Days would elapse before he could come back. Perhaps he might refuse to come. What could he do then? Every moment was of vital importance. They had been great friends once, five years before--almost inseparable, indeed. Then the intimacy had come suddenly to an end. When they met in society now, it was only Dorian Gray who smiled: Alan Campbell never did. He was an extremely clever young man, though he had no real appreciation of the visible arts, and whatever little sense of the beauty of poetry he possessed he had gained entirely from Dorian. His dominant intellectual passion was for science. At Cambridge he had spent a great deal of his time working in the laboratory, and had taken a good class in the Natural Science Tripos of his year. Indeed, he was still devoted to the study of chemistry, and had a laboratory of his own in which he used to shut himself up all day long, greatly to the annoyance of his mother, who had set her heart on his standing for Parliament and had a vague idea that a chemist was a person who made up prescriptions. He was an excellent musician, however, as well, and played both the violin and the piano better than most amateurs. In fact, it was music that had first brought him and Dorian Gray together--music and that indefinable attraction that Dorian seemed to be able to exercise whenever he wished--and, indeed, exercised often without being conscious of it. They had met at Lady Berkshire's the night that Rubinstein played there, and after that used to be always seen together at the opera and wherever good music was going on. For eighteen months their intimacy lasted. Campbell was always either at Selby Royal or in Grosvenor Square. To him, as to many others, Dorian Gray was the type of everything that is wonderful and fascinating in life. Whether or not a quarrel had taken place between them no one ever knew. But suddenly people remarked that they scarcely spoke when they met and that Campbell seemed always to go away early from any party at which Dorian Gray was present. He had changed, too--was strangely melancholy at times, appeared almost to dislike hearing music, and would never himself play, giving as his excuse, when he was called upon, that he was so absorbed in science that he had no time left in which to practise. And this was certainly true. Every day he seemed to become more interested in biology, and his name appeared once or twice in some of the scientific reviews in connection with certain curious experiments. This was the man Dorian Gray was waiting for. Every second he kept glancing at the clock. As the minutes went by he became horribly agitated. At last he got up and began to pace up and down the room, looking like a beautiful caged thing. He took long stealthy strides. His hands were curiously cold. The suspense became unbearable. Time seemed to him to be crawling with feet of lead, while he by monstrous winds was being swept towards the jagged edge of some black cleft of precipice. He knew what was waiting for him there; saw it, indeed, and, shuddering, crushed with dank hands his burning lids as though he would have robbed the very brain of sight and driven the eyeballs back into their cave. It was useless. The brain had its own food on which it battened, and the imagination, made grotesque by terror, twisted and distorted as a living thing by pain, danced like some foul puppet on a stand and grinned through moving masks. Then, suddenly, time stopped for him. Yes: that blind, slow-breathing thing crawled no more, and horrible thoughts, time being dead, raced nimbly on in front, and dragged a hideous future from its grave, and showed it to him. He stared at it. Its very horror made him stone. At last the door opened and his servant entered. He turned glazed eyes upon him. "Mr. Campbell, sir," said the man. A sigh of relief broke from his parched lips, and the colour came back to his cheeks. "Ask him to come in at once, Francis." He felt that he was himself again. His mood of cowardice had passed away. The man bowed and retired. In a few moments, Alan Campbell walked in, looking very stern and rather pale, his pallor being intensified by his coal-black hair and dark eyebrows. "Alan! This is kind of you. I thank you for coming." "I had intended never to enter your house again, Gray. But you said it was a matter of life and death." His voice was hard and cold. He spoke with slow deliberation. There was a look of contempt in the steady searching gaze that he turned on Dorian. He kept his hands in the pockets of his Astrakhan coat, and seemed not to have noticed the gesture with which he had been greeted. "Yes: it is a matter of life and death, Alan, and to more than one person. Sit down." Campbell took a chair by the table, and Dorian sat opposite to him. The two men's eyes met. In Dorian's there was infinite pity. He knew that what he was going to do was dreadful. After a strained moment of silence, he leaned across and said, very quietly, but watching the effect of each word upon the face of him he had sent for, "Alan, in a locked room at the top of this house, a room to which nobody but myself has access, a dead man is seated at a table. He has been dead ten hours now. Don't stir, and don't look at me like that. Who the man is, why he died, how he died, are matters that do not concern you. What you have to do is this--" "Stop, Gray. I don't want to know anything further. Whether what you have told me is true or not true doesn't concern me. I entirely decline to be mixed up in your life. Keep your horrible secrets to yourself. They don't interest me any more." "Alan, they will have to interest you. This one will have to interest you. I am awfully sorry for you, Alan. But I can't help myself. You are the one man who is able to save me. I am forced to bring you into the matter. I have no option. Alan, you are scientific. You know about chemistry and things of that kind. You have made experiments. What you have got to do is to destroy the thing that is upstairs--to destroy it so that not a vestige of it will be left. Nobody saw this person come into the house. Indeed, at the present moment he is supposed to be in Paris. He will not be missed for months. When he is missed, there must be no trace of him found here. You, Alan, you must change him, and everything that belongs to him, into a handful of ashes that I may scatter in the air." "You are mad, Dorian." "Ah! I was waiting for you to call me Dorian." "You are mad, I tell you--mad to imagine that I would raise a finger to help you, mad to make this monstrous confession. I will have nothing to do with this matter, whatever it is. Do you think I am going to peril my reputation for you? What is it to me what devil's work you are up to?" "It was suicide, Alan." "I am glad of that. But who drove him to it? You, I should fancy." "Do you still refuse to do this for me?" "Of course I refuse. I will have absolutely nothing to do with it. I don't care what shame comes on you. You deserve it all. I should not be sorry to see you disgraced, publicly disgraced. How dare you ask me, of all men in the world, to mix myself up in this horror? I should have thought you knew more about people's characters. Your friend Lord Henry Wotton can't have taught you much about psychology, whatever else he has taught you. Nothing will induce me to stir a step to help you. You have come to the wrong man. Go to some of your friends. Don't come to me." "Alan, it was murder. I killed him. You don't know what he had made me suffer. Whatever my life is, he had more to do with the making or the marring of it than poor Harry has had. He may not have intended it, the result was the same." "Murder! Good God, Dorian, is that what you have come to? I shall not inform upon you. It is not my business. Besides, without my stirring in the matter, you are certain to be arrested. Nobody ever commits a crime without doing something stupid. But I will have nothing to do with it." "You must have something to do with it. Wait, wait a moment; listen to me. Only listen, Alan. All I ask of you is to perform a certain scientific experiment. You go to hospitals and dead-houses, and the horrors that you do there don't affect you. If in some hideous dissecting-room or fetid laboratory you found this man lying on a leaden table with red gutters scooped out in it for the blood to flow through, you would simply look upon him as an admirable subject. You would not turn a hair. You would not believe that you were doing anything wrong. On the contrary, you would probably feel that you were benefiting the human race, or increasing the sum of knowledge in the world, or gratifying intellectual curiosity, or something of that kind. What I want you to do is merely what you have often done before. Indeed, to destroy a body must be far less horrible than what you are accustomed to work at. And, remember, it is the only piece of evidence against me. If it is discovered, I am lost; and it is sure to be discovered unless you help me." "I have no desire to help you. You forget that. I am simply indifferent to the whole thing. It has nothing to do with me." "Alan, I entreat you. Think of the position I am in. Just before you came I almost fainted with terror. You may know terror yourself some day. No! don't think of that. Look at the matter purely from the scientific point of view. You don't inquire where the dead things on which you experiment come from. Don't inquire now. I have told you too much as it is. But I beg of you to do this. We were friends once, Alan." "Don't speak about those days, Dorian--they are dead." "The dead linger sometimes. The man upstairs will not go away. He is sitting at the table with bowed head and outstretched arms. Alan! Alan! If you don't come to my assistance, I am ruined. Why, they will hang me, Alan! Don't you understand? They will hang me for what I have done." "There is no good in prolonging this scene. I absolutely refuse to do anything in the matter. It is insane of you to ask me." "You refuse?" "Yes." "I entreat you, Alan." "It is useless." The same look of pity came into Dorian Gray's eyes. Then he stretched out his hand, took a piece of paper, and wrote something on it. He read it over twice, folded it carefully, and pushed it across the table. Having done this, he got up and went over to the window. Campbell looked at him in surprise, and then took up the paper, and opened it. As he read it, his face became ghastly pale and he fell back in his chair. A horrible sense of sickness came over him. He felt as if his heart was beating itself to death in some empty hollow. After two or three minutes of terrible silence, Dorian turned round and came and stood behind him, putting his hand upon his shoulder. "I am so sorry for you, Alan," he murmured, "but you leave me no alternative. I have a letter written already. Here it is. You see the address. If you don't help me, I must send it. If you don't help me, I will send it. You know what the result will be. But you are going to help me. It is impossible for you to refuse now. I tried to spare you. You will do me the justice to admit that. You were stern, harsh, offensive. You treated me as no man has ever dared to treat me--no living man, at any rate. I bore it all. Now it is for me to dictate terms." Campbell buried his face in his hands, and a shudder passed through him. "Yes, it is my turn to dictate terms, Alan. You know what they are. The thing is quite simple. Come, don't work yourself into this fever. The thing has to be done. Face it, and do it." A groan broke from Campbell's lips and he shivered all over. The ticking of the clock on the mantelpiece seemed to him to be dividing time into separate atoms of agony, each of which was too terrible to be borne. He felt as if an iron ring was being slowly tightened round his forehead, as if the disgrace with which he was threatened had already come upon him. The hand upon his shoulder weighed like a hand of lead. It was intolerable. It seemed to crush him. "Come, Alan, you must decide at once." "I cannot do it," he said, mechanically, as though words could alter things. "You must. You have no choice. Don't delay." He hesitated a moment. "Is there a fire in the room upstairs?" "Yes, there is a gas-fire with asbestos." "I shall have to go home and get some things from the laboratory." "No, Alan, you must not leave the house. Write out on a sheet of notepaper what you want and my servant will take a cab and bring the things back to you." Campbell scrawled a few lines, blotted them, and addressed an envelope to his assistant. Dorian took the note up and read it carefully. Then he rang the bell and gave it to his valet, with orders to return as soon as possible and to bring the things with him. As the hall door shut, Campbell started nervously, and having got up from the chair, went over to the chimney-piece. He was shivering with a kind of ague. For nearly twenty minutes, neither of the men spoke. A fly buzzed noisily about the room, and the ticking of the clock was like the beat of a hammer. As the chime struck one, Campbell turned round, and looking at Dorian Gray, saw that his eyes were filled with tears. There was something in the purity and refinement of that sad face that seemed to enrage him. "You are infamous, absolutely infamous!" he muttered. "Hush, Alan. You have saved my life," said Dorian. "Your life? Good heavens! what a life that is! You have gone from corruption to corruption, and now you have culminated in crime. In doing what I am going to do--what you force me to do--it is not of your life that I am thinking." "Ah, Alan," murmured Dorian with a sigh, "I wish you had a thousandth part of the pity for me that I have for you." He turned away as he spoke and stood looking out at the garden. Campbell made no answer. After about ten minutes a knock came to the door, and the servant entered, carrying a large mahogany chest of chemicals, with a long coil of steel and platinum wire and two rather curiously shaped iron clamps. "Shall I leave the things here, sir?" he asked Campbell. "Yes," said Dorian. "And I am afraid, Francis, that I have another errand for you. What is the name of the man at Richmond who supplies Selby with orchids?" "Harden, sir." "Yes--Harden. You must go down to Richmond at once, see Harden personally, and tell him to send twice as many orchids as I ordered, and to have as few white ones as possible. In fact, I don't want any white ones. It is a lovely day, Francis, and Richmond is a very pretty place--otherwise I wouldn't bother you about it." "No trouble, sir. At what time shall I be back?" Dorian looked at Campbell. "How long will your experiment take, Alan?" he said in a calm indifferent voice. The presence of a third person in the room seemed to give him extraordinary courage. Campbell frowned and bit his lip. "It will take about five hours," he answered. "It will be time enough, then, if you are back at half-past seven, Francis. Or stay: just leave my things out for dressing. You can have the evening to yourself. I am not dining at home, so I shall not want you." "Thank you, sir," said the man, leaving the room. "Now, Alan, there is not a moment to be lost. How heavy this chest is! I'll take it for you. You bring the other things." He spoke rapidly and in an authoritative manner. Campbell felt dominated by him. They left the room together. When they reached the top landing, Dorian took out the key and turned it in the lock. Then he stopped, and a troubled look came into his eyes. He shuddered. "I don't think I can go in, Alan," he murmured. "It is nothing to me. I don't require you," said Campbell coldly. Dorian half opened the door. As he did so, he saw the face of his portrait leering in the sunlight. On the floor in front of it the torn curtain was lying. He remembered that the night before he had forgotten, for the first time in his life, to hide the fatal canvas, and was about to rush forward, when he drew back with a shudder. What was that loathsome red dew that gleamed, wet and glistening, on one of the hands, as though the canvas had sweated blood? How horrible it was!--more horrible, it seemed to him for the moment, than the silent thing that he knew was stretched across the table, the thing whose grotesque misshapen shadow on the spotted carpet showed him that it had not stirred, but was still there, as he had left it. He heaved a deep breath, opened the door a little wider, and with half-closed eyes and averted head, walked quickly in, determined that he would not look even once upon the dead man. Then, stooping down and taking up the gold-and-purple hanging, he flung it right over the picture. There he stopped, feeling afraid to turn round, and his eyes fixed themselves on the intricacies of the pattern before him. He heard Campbell bringing in the heavy chest, and the irons, and the other things that he had required for his dreadful work. He began to wonder if he and Basil Hallward had ever met, and, if so, what they had thought of each other. "Leave me now," said a stern voice behind him. He turned and hurried out, just conscious that the dead man had been thrust back into the chair and that Campbell was gazing into a glistening yellow face. As he was going downstairs, he heard the key being turned in the lock. It was long after seven when Campbell came back into the library. He was pale, but absolutely calm. "I have done what you asked me to do," he muttered. "And now, good-bye. Let us never see each other again." "You have saved me from ruin, Alan. I cannot forget that," said Dorian simply. As soon as Campbell had left, he went upstairs. There was a horrible smell of nitric acid in the room. But the thing that had been sitting at the table was gone. CHAPTER 15 That evening, at eight-thirty, exquisitely dressed and wearing a large button-hole of Parma violets, Dorian Gray was ushered into Lady Narborough's drawing-room by bowing servants. His forehead was throbbing with maddened nerves, and he felt wildly excited, but his manner as he bent over his hostess's hand was as easy and graceful as ever. Perhaps one never seems so much at one's ease as when one has to play a part. Certainly no one looking at Dorian Gray that night could have believed that he had passed through a tragedy as horrible as any tragedy of our age. Those finely shaped fingers could never have clutched a knife for sin, nor those smiling lips have cried out on God and goodness. He himself could not help wondering at the calm of his demeanour, and for a moment felt keenly the terrible pleasure of a double life. It was a small party, got up rather in a hurry by Lady Narborough, who was a very clever woman with what Lord Henry used to describe as the remains of really remarkable ugliness. She had proved an excellent wife to one of our most tedious ambassadors, and having buried her husband properly in a marble mausoleum, which she had herself designed, and married off her daughters to some rich, rather elderly men, she devoted herself now to the pleasures of French fiction, French cookery, and French _esprit_ when she could get it. Dorian was one of her especial favourites, and she always told him that she was extremely glad she had not met him in early life. "I know, my dear, I should have fallen madly in love with you," she used to say, "and thrown my bonnet right over the mills for your sake. It is most fortunate that you were not thought of at the time. As it was, our bonnets were so unbecoming, and the mills were so occupied in trying to raise the wind, that I never had even a flirtation with anybody. However, that was all Narborough's fault. He was dreadfully short-sighted, and there is no pleasure in taking in a husband who never sees anything." Her guests this evening were rather tedious. The fact was, as she explained to Dorian, behind a very shabby fan, one of her married daughters had come up quite suddenly to stay with her, and, to make matters worse, had actually brought her husband with her. "I think it is most unkind of her, my dear," she whispered. "Of course I go and stay with them every summer after I come from Homburg, but then an old woman like me must have fresh air sometimes, and besides, I really wake them up. You don't know what an existence they lead down there. It is pure unadulterated country life. They get up early, because they have so much to do, and go to bed early, because they have so little to think about. There has not been a scandal in the neighbourhood since the time of Queen Elizabeth, and consequently they all fall asleep after dinner. You shan't sit next either of them. You shall sit by me and amuse me." Dorian murmured a graceful compliment and looked round the room. Yes: it was certainly a tedious party. Two of the people he had never seen before, and the others consisted of Ernest Harrowden, one of those middle-aged mediocrities so common in London clubs who have no enemies, but are thoroughly disliked by their friends; Lady Ruxton, an overdressed woman of forty-seven, with a hooked nose, who was always trying to get herself compromised, but was so peculiarly plain that to her great disappointment no one would ever believe anything against her; Mrs. Erlynne, a pushing nobody, with a delightful lisp and Venetian-red hair; Lady Alice Chapman, his hostess's daughter, a dowdy dull girl, with one of those characteristic British faces that, once seen, are never remembered; and her husband, a red-cheeked, white-whiskered creature who, like so many of his class, was under the impression that inordinate joviality can atone for an entire lack of ideas. He was rather sorry he had come, till Lady Narborough, looking at the great ormolu gilt clock that sprawled in gaudy curves on the mauve-draped mantelshelf, exclaimed: "How horrid of Henry Wotton to be so late! I sent round to him this morning on chance and he promised faithfully not to disappoint me." It was some consolation that Harry was to be there, and when the door opened and he heard his slow musical voice lending charm to some insincere apology, he ceased to feel bored. But at dinner he could not eat anything. Plate after plate went away untasted. Lady Narborough kept scolding him for what she called "an insult to poor Adolphe, who invented the _menu_ specially for you," and now and then Lord Henry looked across at him, wondering at his silence and abstracted manner. From time to time the butler filled his glass with champagne. He drank eagerly, and his thirst seemed to increase. "Dorian," said Lord Henry at last, as the _chaud-froid_ was being handed round, "what is the matter with you to-night? You are quite out of sorts." "I believe he is in love," cried Lady Narborough, "and that he is afraid to tell me for fear I should be jealous. He is quite right. I certainly should." "Dear Lady Narborough," murmured Dorian, smiling, "I have not been in love for a whole week--not, in fact, since Madame de Ferrol left town." "How you men can fall in love with that woman!" exclaimed the old lady. "I really cannot understand it." "It is simply because she remembers you when you were a little girl, Lady Narborough," said Lord Henry. "She is the one link between us and your short frocks." "She does not remember my short frocks at all, Lord Henry. But I remember her very well at Vienna thirty years ago, and how _decolletee_ she was then." "She is still _decolletee_," he answered, taking an olive in his long fingers; "and when she is in a very smart gown she looks like an _edition de luxe_ of a bad French novel. She is really wonderful, and full of surprises. Her capacity for family affection is extraordinary. When her third husband died, her hair turned quite gold from grief." "How can you, Harry!" cried Dorian. "It is a most romantic explanation," laughed the hostess. "But her third husband, Lord Henry! You don't mean to say Ferrol is the fourth?" "Certainly, Lady Narborough." "I don't believe a word of it." "Well, ask Mr. Gray. He is one of her most intimate friends." "Is it true, Mr. Gray?" "She assures me so, Lady Narborough," said Dorian. "I asked her whether, like Marguerite de Navarre, she had their hearts embalmed and hung at her girdle. She told me she didn't, because none of them had had any hearts at all." "Four husbands! Upon my word that is _trop de zele_." "_Trop d'audace_, I tell her," said Dorian. "Oh! she is audacious enough for anything, my dear. And what is Ferrol like? I don't know him." "The husbands of very beautiful women belong to the criminal classes," said Lord Henry, sipping his wine. Lady Narborough hit him with her fan. "Lord Henry, I am not at all surprised that the world says that you are extremely wicked." "But what world says that?" asked Lord Henry, elevating his eyebrows. "It can only be the next world. This world and I are on excellent terms." "Everybody I know says you are very wicked," cried the old lady, shaking her head. Lord Henry looked serious for some moments. "It is perfectly monstrous," he said, at last, "the way people go about nowadays saying things against one behind one's back that are absolutely and entirely true." "Isn't he incorrigible?" cried Dorian, leaning forward in his chair. "I hope so," said his hostess, laughing. "But really, if you all worship Madame de Ferrol in this ridiculous way, I shall have to marry again so as to be in the fashion." "You will never marry again, Lady Narborough," broke in Lord Henry. "You were far too happy. When a woman marries again, it is because she detested her first husband. When a man marries again, it is because he adored his first wife. Women try their luck; men risk theirs." "Narborough wasn't perfect," cried the old lady. "If he had been, you would not have loved him, my dear lady," was the rejoinder. "Women love us for our defects. If we have enough of them, they will forgive us everything, even our intellects. You will never ask me to dinner again after saying this, I am afraid, Lady Narborough, but it is quite true." "Of course it is true, Lord Henry. If we women did not love you for your defects, where would you all be? Not one of you would ever be married. You would be a set of unfortunate bachelors. Not, however, that that would alter you much. Nowadays all the married men live like bachelors, and all the bachelors like married men." "_Fin de siecle_," murmured Lord Henry. "_Fin du globe_," answered his hostess. "I wish it were _fin du globe_," said Dorian with a sigh. "Life is a great disappointment." "Ah, my dear," cried Lady Narborough, putting on her gloves, "don't tell me that you have exhausted life. When a man says that one knows that life has exhausted him. Lord Henry is very wicked, and I sometimes wish that I had been; but you are made to be good--you look so good. I must find you a nice wife. Lord Henry, don't you think that Mr. Gray should get married?" "I am always telling him so, Lady Narborough," said Lord Henry with a bow. "Well, we must look out for a suitable match for him. I shall go through Debrett carefully to-night and draw out a list of all the eligible young ladies." "With their ages, Lady Narborough?" asked Dorian. "Of course, with their ages, slightly edited. But nothing must be done in a hurry. I want it to be what _The Morning Post_ calls a suitable alliance, and I want you both to be happy." "What nonsense people talk about happy marriages!" exclaimed Lord Henry. "A man can be happy with any woman, as long as he does not love her." "Ah! what a cynic you are!" cried the old lady, pushing back her chair and nodding to Lady Ruxton. "You must come and dine with me soon again. You are really an admirable tonic, much better than what Sir Andrew prescribes for me. You must tell me what people you would like to meet, though. I want it to be a delightful gathering." "I like men who have a future and women who have a past," he answered. "Or do you think that would make it a petticoat party?" "I fear so," she said, laughing, as she stood up. "A thousand pardons, my dear Lady Ruxton," she added, "I didn't see you hadn't finished your cigarette." "Never mind, Lady Narborough. I smoke a great deal too much. I am going to limit myself, for the future." "Pray don't, Lady Ruxton," said Lord Henry. "Moderation is a fatal thing. Enough is as bad as a meal. More than enough is as good as a feast." Lady Ruxton glanced at him curiously. "You must come and explain that to me some afternoon, Lord Henry. It sounds a fascinating theory," she murmured, as she swept out of the room. "Now, mind you don't stay too long over your politics and scandal," cried Lady Narborough from the door. "If you do, we are sure to squabble upstairs." The men laughed, and Mr. Chapman got up solemnly from the foot of the table and came up to the top. Dorian Gray changed his seat and went and sat by Lord Henry. Mr. Chapman began to talk in a loud voice about the situation in the House of Commons. He guffawed at his adversaries. The word _doctrinaire_--word full of terror to the British mind--reappeared from time to time between his explosions. An alliterative prefix served as an ornament of oratory. He hoisted the Union Jack on the pinnacles of thought. The inherited stupidity of the race--sound English common sense he jovially termed it--was shown to be the proper bulwark for society. A smile curved Lord Henry's lips, and he turned round and looked at Dorian. "Are you better, my dear fellow?" he asked. "You seemed rather out of sorts at dinner." "I am quite well, Harry. I am tired. That is all." "You were charming last night. The little duchess is quite devoted to you. She tells me she is going down to Selby." "She has promised to come on the twentieth." "Is Monmouth to be there, too?" "Oh, yes, Harry." "He bores me dreadfully, almost as much as he bores her. She is very clever, too clever for a woman. She lacks the indefinable charm of weakness. It is the feet of clay that make the gold of the image precious. Her feet are very pretty, but they are not feet of clay. White porcelain feet, if you like. They have been through the fire, and what fire does not destroy, it hardens. She has had experiences." "How long has she been married?" asked Dorian. "An eternity, she tells me. I believe, according to the peerage, it is ten years, but ten years with Monmouth must have been like eternity, with time thrown in. Who else is coming?" "Oh, the Willoughbys, Lord Rugby and his wife, our hostess, Geoffrey Clouston, the usual set. I have asked Lord Grotrian." "I like him," said Lord Henry. "A great many people don't, but I find him charming. He atones for being occasionally somewhat overdressed by being always absolutely over-educated. He is a very modern type." "I don't know if he will be able to come, Harry. He may have to go to Monte Carlo with his father." "Ah! what a nuisance people's people are! Try and make him come. By the way, Dorian, you ran off very early last night. You left before eleven. What did you do afterwards? Did you go straight home?" Dorian glanced at him hurriedly and frowned. "No, Harry," he said at last, "I did not get home till nearly three." "Did you go to the club?" "Yes," he answered. Then he bit his lip. "No, I don't mean that. I didn't go to the club. I walked about. I forget what I did.... How inquisitive you are, Harry! You always want to know what one has been doing. I always want to forget what I have been doing. I came in at half-past two, if you wish to know the exact time. I had left my latch-key at home, and my servant had to let me in. If you want any corroborative evidence on the subject, you can ask him." Lord Henry shrugged his shoulders. "My dear fellow, as if I cared! Let us go up to the drawing-room. No sherry, thank you, Mr. Chapman. Something has happened to you, Dorian. Tell me what it is. You are not yourself to-night." "Don't mind me, Harry. I am irritable, and out of temper. I shall come round and see you to-morrow, or next day. Make my excuses to Lady Narborough. I shan't go upstairs. I shall go home. I must go home." "All right, Dorian. I dare say I shall see you to-morrow at tea-time. The duchess is coming." "I will try to be there, Harry," he said, leaving the room. As he drove back to his own house, he was conscious that the sense of terror he thought he had strangled had come back to him. Lord Henry's casual questioning had made him lose his nerve for the moment, and he wanted his nerve still. Things that were dangerous had to be destroyed. He winced. He hated the idea of even touching them. Yet it had to be done. He realized that, and when he had locked the door of his library, he opened the secret press into which he had thrust Basil Hallward's coat and bag. A huge fire was blazing. He piled another log on it. The smell of the singeing clothes and burning leather was horrible. It took him three-quarters of an hour to consume everything. At the end he felt faint and sick, and having lit some Algerian pastilles in a pierced copper brazier, he bathed his hands and forehead with a cool musk-scented vinegar. Suddenly he started. His eyes grew strangely bright, and he gnawed nervously at his underlip. Between two of the windows stood a large Florentine cabinet, made out of ebony and inlaid with ivory and blue lapis. He watched it as though it were a thing that could fascinate and make afraid, as though it held something that he longed for and yet almost loathed. His breath quickened. A mad craving came over him. He lit a cigarette and then threw it away. His eyelids drooped till the long fringed lashes almost touched his cheek. But he still watched the cabinet. At last he got up from the sofa on which he had been lying, went over to it, and having unlocked it, touched some hidden spring. A triangular drawer passed slowly out. His fingers moved instinctively towards it, dipped in, and closed on something. It was a small Chinese box of black and gold-dust lacquer, elaborately wrought, the sides patterned with curved waves, and the silken cords hung with round crystals and tasselled in plaited metal threads. He opened it. Inside was a green paste, waxy in lustre, the odour curiously heavy and persistent. He hesitated for some moments, with a strangely immobile smile upon his face. Then shivering, though the atmosphere of the room was terribly hot, he drew himself up and glanced at the clock. It was twenty minutes to twelve. He put the box back, shutting the cabinet doors as he did so, and went into his bedroom. As midnight was striking bronze blows upon the dusky air, Dorian Gray, dressed commonly, and with a muffler wrapped round his throat, crept quietly out of his house. In Bond Street he found a hansom with a good horse. He hailed it and in a low voice gave the driver an address. The man shook his head. "It is too far for me," he muttered. "Here is a sovereign for you," said Dorian. "You shall have another if you drive fast." "All right, sir," answered the man, "you will be there in an hour," and after his fare had got in he turned his horse round and drove rapidly towards the river. CHAPTER 16 A cold rain began to fall, and the blurred street-lamps looked ghastly in the dripping mist. The public-houses were just closing, and dim men and women were clustering in broken groups round their doors. From some of the bars came the sound of horrible laughter. In others, drunkards brawled and screamed. Lying back in the hansom, with his hat pulled over his forehead, Dorian Gray watched with listless eyes the sordid shame of the great city, and now and then he repeated to himself the words that Lord Henry had said to him on the first day they had met, "To cure the soul by means of the senses, and the senses by means of the soul." Yes, that was the secret. He had often tried it, and would try it again now. There were opium dens where one could buy oblivion, dens of horror where the memory of old sins could be destroyed by the madness of sins that were new. The moon hung low in the sky like a yellow skull. From time to time a huge misshapen cloud stretched a long arm across and hid it. The gas-lamps grew fewer, and the streets more narrow and gloomy. Once the man lost his way and had to drive back half a mile. A steam rose from the horse as it splashed up the puddles. The sidewindows of the hansom were clogged with a grey-flannel mist. "To cure the soul by means of the senses, and the senses by means of the soul!" How the words rang in his ears! His soul, certainly, was sick to death. Was it true that the senses could cure it? Innocent blood had been spilled. What could atone for that? Ah! for that there was no atonement; but though forgiveness was impossible, forgetfulness was possible still, and he was determined to forget, to stamp the thing out, to crush it as one would crush the adder that had stung one. Indeed, what right had Basil to have spoken to him as he had done? Who had made him a judge over others? He had said things that were dreadful, horrible, not to be endured. On and on plodded the hansom, going slower, it seemed to him, at each step. He thrust up the trap and called to the man to drive faster. The hideous hunger for opium began to gnaw at him. His throat burned and his delicate hands twitched nervously together. He struck at the horse madly with his stick. The driver laughed and whipped up. He laughed in answer, and the man was silent. The way seemed interminable, and the streets like the black web of some sprawling spider. The monotony became unbearable, and as the mist thickened, he felt afraid. Then they passed by lonely brickfields. The fog was lighter here, and he could see the strange, bottle-shaped kilns with their orange, fanlike tongues of fire. A dog barked as they went by, and far away in the darkness some wandering sea-gull screamed. The horse stumbled in a rut, then swerved aside and broke into a gallop. After some time they left the clay road and rattled again over rough-paven streets. Most of the windows were dark, but now and then fantastic shadows were silhouetted against some lamplit blind. He watched them curiously. They moved like monstrous marionettes and made gestures like live things. He hated them. A dull rage was in his heart. As they turned a corner, a woman yelled something at them from an open door, and two men ran after the hansom for about a hundred yards. The driver beat at them with his whip. It is said that passion makes one think in a circle. Certainly with hideous iteration the bitten lips of Dorian Gray shaped and reshaped those subtle words that dealt with soul and sense, till he had found in them the full expression, as it were, of his mood, and justified, by intellectual approval, passions that without such justification would still have dominated his temper. From cell to cell of his brain crept the one thought; and the wild desire to live, most terrible of all man's appetites, quickened into force each trembling nerve and fibre. Ugliness that had once been hateful to him because it made things real, became dear to him now for that very reason. Ugliness was the one reality. The coarse brawl, the loathsome den, the crude violence of disordered life, the very vileness of thief and outcast, were more vivid, in their intense actuality of impression, than all the gracious shapes of art, the dreamy shadows of song. They were what he needed for forgetfulness. In three days he would be free. Suddenly the man drew up with a jerk at the top of a dark lane. Over the low roofs and jagged chimney-stacks of the houses rose the black masts of ships. Wreaths of white mist clung like ghostly sails to the yards. "Somewhere about here, sir, ain't it?" he asked huskily through the trap. Dorian started and peered round. "This will do," he answered, and having got out hastily and given the driver the extra fare he had promised him, he walked quickly in the direction of the quay. Here and there a lantern gleamed at the stern of some huge merchantman. The light shook and splintered in the puddles. A red glare came from an outward-bound steamer that was coaling. The slimy pavement looked like a wet mackintosh. He hurried on towards the left, glancing back now and then to see if he was being followed. In about seven or eight minutes he reached a small shabby house that was wedged in between two gaunt factories. In one of the top-windows stood a lamp. He stopped and gave a peculiar knock. After a little time he heard steps in the passage and the chain being unhooked. The door opened quietly, and he went in without saying a word to the squat misshapen figure that flattened itself into the shadow as he passed. At the end of the hall hung a tattered green curtain that swayed and shook in the gusty wind which had followed him in from the street. He dragged it aside and entered a long low room which looked as if it had once been a third-rate dancing-saloon. Shrill flaring gas-jets, dulled and distorted in the fly-blown mirrors that faced them, were ranged round the walls. Greasy reflectors of ribbed tin backed them, making quivering disks of light. The floor was covered with ochre-coloured sawdust, trampled here and there into mud, and stained with dark rings of spilled liquor. Some Malays were crouching by a little charcoal stove, playing with bone counters and showing their white teeth as they chattered. In one corner, with his head buried in his arms, a sailor sprawled over a table, and by the tawdrily painted bar that ran across one complete side stood two haggard women, mocking an old man who was brushing the sleeves of his coat with an expression of disgust. "He thinks he's got red ants on him," laughed one of them, as Dorian passed by. The man looked at her in terror and began to whimper. At the end of the room there was a little staircase, leading to a darkened chamber. As Dorian hurried up its three rickety steps, the heavy odour of opium met him. He heaved a deep breath, and his nostrils quivered with pleasure. When he entered, a young man with smooth yellow hair, who was bending over a lamp lighting a long thin pipe, looked up at him and nodded in a hesitating manner. "You here, Adrian?" muttered Dorian. "Where else should I be?" he answered, listlessly. "None of the chaps will speak to me now." "I thought you had left England." "Darlington is not going to do anything. My brother paid the bill at last. George doesn't speak to me either.... I don't care," he added with a sigh. "As long as one has this stuff, one doesn't want friends. I think I have had too many friends." Dorian winced and looked round at the grotesque things that lay in such fantastic postures on the ragged mattresses. The twisted limbs, the gaping mouths, the staring lustreless eyes, fascinated him. He knew in what strange heavens they were suffering, and what dull hells were teaching them the secret of some new joy. They were better off than he was. He was prisoned in thought. Memory, like a horrible malady, was eating his soul away. From time to time he seemed to see the eyes of Basil Hallward looking at him. Yet he felt he could not stay. The presence of Adrian Singleton troubled him. He wanted to be where no one would know who he was. He wanted to escape from himself. "I am going on to the other place," he said after a pause. "On the wharf?" "Yes." "That mad-cat is sure to be there. They won't have her in this place now." Dorian shrugged his shoulders. "I am sick of women who love one. Women who hate one are much more interesting. Besides, the stuff is better." "Much the same." "I like it better. Come and have something to drink. I must have something." "I don't want anything," murmured the young man. "Never mind." Adrian Singleton rose up wearily and followed Dorian to the bar. A half-caste, in a ragged turban and a shabby ulster, grinned a hideous greeting as he thrust a bottle of brandy and two tumblers in front of them. The women sidled up and began to chatter. Dorian turned his back on them and said something in a low voice to Adrian Singleton. A crooked smile, like a Malay crease, writhed across the face of one of the women. "We are very proud to-night," she sneered. "For God's sake don't talk to me," cried Dorian, stamping his foot on the ground. "What do you want? Money? Here it is. Don't ever talk to me again." Two red sparks flashed for a moment in the woman's sodden eyes, then flickered out and left them dull and glazed. She tossed her head and raked the coins off the counter with greedy fingers. Her companion watched her enviously. "It's no use," sighed Adrian Singleton. "I don't care to go back. What does it matter? I am quite happy here." "You will write to me if you want anything, won't you?" said Dorian, after a pause. "Perhaps." "Good night, then." "Good night," answered the young man, passing up the steps and wiping his parched mouth with a handkerchief. Dorian walked to the door with a look of pain in his face. As he drew the curtain aside, a hideous laugh broke from the painted lips of the woman who had taken his money. "There goes the devil's bargain!" she hiccoughed, in a hoarse voice. "Curse you!" he answered, "don't call me that." She snapped her fingers. "Prince Charming is what you like to be called, ain't it?" she yelled after him. The drowsy sailor leaped to his feet as she spoke, and looked wildly round. The sound of the shutting of the hall door fell on his ear. He rushed out as if in pursuit. Dorian Gray hurried along the quay through the drizzling rain. His meeting with Adrian Singleton had strangely moved him, and he wondered if the ruin of that young life was really to be laid at his door, as Basil Hallward had said to him with such infamy of insult. He bit his lip, and for a few seconds his eyes grew sad. Yet, after all, what did it matter to him? One's days were too brief to take the burden of another's errors on one's shoulders. Each man lived his own life and paid his own price for living it. The only pity was one had to pay so often for a single fault. One had to pay over and over again, indeed. In her dealings with man, destiny never closed her accounts. There are moments, psychologists tell us, when the passion for sin, or for what the world calls sin, so dominates a nature that every fibre of the body, as every cell of the brain, seems to be instinct with fearful impulses. Men and women at such moments lose the freedom of their will. They move to their terrible end as automatons move. Choice is taken from them, and conscience is either killed, or, if it lives at all, lives but to give rebellion its fascination and disobedience its charm. For all sins, as theologians weary not of reminding us, are sins of disobedience. When that high spirit, that morning star of evil, fell from heaven, it was as a rebel that he fell. Callous, concentrated on evil, with stained mind, and soul hungry for rebellion, Dorian Gray hastened on, quickening his step as he went, but as he darted aside into a dim archway, that had served him often as a short cut to the ill-famed place where he was going, he felt himself suddenly seized from behind, and before he had time to defend himself, he was thrust back against the wall, with a brutal hand round his throat. He struggled madly for life, and by a terrible effort wrenched the tightening fingers away. In a second he heard the click of a revolver, and saw the gleam of a polished barrel, pointing straight at his head, and the dusky form of a short, thick-set man facing him. "What do you want?" he gasped. "Keep quiet," said the man. "If you stir, I shoot you." "You are mad. What have I done to you?" "You wrecked the life of Sibyl Vane," was the answer, "and Sibyl Vane was my sister. She killed herself. I know it. Her death is at your door. I swore I would kill you in return. For years I have sought you. I had no clue, no trace. The two people who could have described you were dead. I knew nothing of you but the pet name she used to call you. I heard it to-night by chance. Make your peace with God, for to-night you are going to die." Dorian Gray grew sick with fear. "I never knew her," he stammered. "I never heard of her. You are mad." "You had better confess your sin, for as sure as I am James Vane, you are going to die." There was a horrible moment. Dorian did not know what to say or do. "Down on your knees!" growled the man. "I give you one minute to make your peace--no more. I go on board to-night for India, and I must do my job first. One minute. That's all." Dorian's arms fell to his side. Paralysed with terror, he did not know what to do. Suddenly a wild hope flashed across his brain. "Stop," he cried. "How long ago is it since your sister died? Quick, tell me!" "Eighteen years," said the man. "Why do you ask me? What do years matter?" "Eighteen years," laughed Dorian Gray, with a touch of triumph in his voice. "Eighteen years! Set me under the lamp and look at my face!" James Vane hesitated for a moment, not understanding what was meant. Then he seized Dorian Gray and dragged him from the archway. Dim and wavering as was the wind-blown light, yet it served to show him the hideous error, as it seemed, into which he had fallen, for the face of the man he had sought to kill had all the bloom of boyhood, all the unstained purity of youth. He seemed little more than a lad of twenty summers, hardly older, if older indeed at all, than his sister had been when they had parted so many years ago. It was obvious that this was not the man who had destroyed her life. He loosened his hold and reeled back. "My God! my God!" he cried, "and I would have murdered you!" Dorian Gray drew a long breath. "You have been on the brink of committing a terrible crime, my man," he said, looking at him sternly. "Let this be a warning to you not to take vengeance into your own hands." "Forgive me, sir," muttered James Vane. "I was deceived. A chance word I heard in that damned den set me on the wrong track." "You had better go home and put that pistol away, or you may get into trouble," said Dorian, turning on his heel and going slowly down the street. James Vane stood on the pavement in horror. He was trembling from head to foot. After a little while, a black shadow that had been creeping along the dripping wall moved out into the light and came close to him with stealthy footsteps. He felt a hand laid on his arm and looked round with a start. It was one of the women who had been drinking at the bar. "Why didn't you kill him?" she hissed out, putting haggard face quite close to his. "I knew you were following him when you rushed out from Daly's. You fool! You should have killed him. He has lots of money, and he's as bad as bad." "He is not the man I am looking for," he answered, "and I want no man's money. I want a man's life. The man whose life I want must be nearly forty now. This one is little more than a boy. Thank God, I have not got his blood upon my hands." The woman gave a bitter laugh. "Little more than a boy!" she sneered. "Why, man, it's nigh on eighteen years since Prince Charming made me what I am." "You lie!" cried James Vane. She raised her hand up to heaven. "Before God I am telling the truth," she cried. "Before God?" "Strike me dumb if it ain't so. He is the worst one that comes here. They say he has sold himself to the devil for a pretty face. It's nigh on eighteen years since I met him. He hasn't changed much since then. I have, though," she added, with a sickly leer. "You swear this?" "I swear it," came in hoarse echo from her flat mouth. "But don't give me away to him," she whined; "I am afraid of him. Let me have some money for my night's lodging." He broke from her with an oath and rushed to the corner of the street, but Dorian Gray had disappeared. When he looked back, the woman had vanished also. CHAPTER 17 A week later Dorian Gray was sitting in the conservatory at Selby Royal, talking to the pretty Duchess of Monmouth, who with her husband, a jaded-looking man of sixty, was amongst his guests. It was tea-time, and the mellow light of the huge, lace-covered lamp that stood on the table lit up the delicate china and hammered silver of the service at which the duchess was presiding. Her white hands were moving daintily among the cups, and her full red lips were smiling at something that Dorian had whispered to her. Lord Henry was lying back in a silk-draped wicker chair, looking at them. On a peach-coloured divan sat Lady Narborough, pretending to listen to the duke's description of the last Brazilian beetle that he had added to his collection. Three young men in elaborate smoking-suits were handing tea-cakes to some of the women. The house-party consisted of twelve people, and there were more expected to arrive on the next day. "What are you two talking about?" said Lord Henry, strolling over to the table and putting his cup down. "I hope Dorian has told you about my plan for rechristening everything, Gladys. It is a delightful idea." "But I don't want to be rechristened, Harry," rejoined the duchess, looking up at him with her wonderful eyes. "I am quite satisfied with my own name, and I am sure Mr. Gray should be satisfied with his." "My dear Gladys, I would not alter either name for the world. They are both perfect. I was thinking chiefly of flowers. Yesterday I cut an orchid, for my button-hole. It was a marvellous spotted thing, as effective as the seven deadly sins. In a thoughtless moment I asked one of the gardeners what it was called. He told me it was a fine specimen of _Robinsoniana_, or something dreadful of that kind. It is a sad truth, but we have lost the faculty of giving lovely names to things. Names are everything. I never quarrel with actions. My one quarrel is with words. That is the reason I hate vulgar realism in literature. The man who could call a spade a spade should be compelled to use one. It is the only thing he is fit for." "Then what should we call you, Harry?" she asked. "His name is Prince Paradox," said Dorian. "I recognize him in a flash," exclaimed the duchess. "I won't hear of it," laughed Lord Henry, sinking into a chair. "From a label there is no escape! I refuse the title." "Royalties may not abdicate," fell as a warning from pretty lips. "You wish me to defend my throne, then?" "Yes." "I give the truths of to-morrow." "I prefer the mistakes of to-day," she answered. "You disarm me, Gladys," he cried, catching the wilfulness of her mood. "Of your shield, Harry, not of your spear." "I never tilt against beauty," he said, with a wave of his hand. "That is your error, Harry, believe me. You value beauty far too much." "How can you say that? I admit that I think that it is better to be beautiful than to be good. But on the other hand, no one is more ready than I am to acknowledge that it is better to be good than to be ugly." "Ugliness is one of the seven deadly sins, then?" cried the duchess. "What becomes of your simile about the orchid?" "Ugliness is one of the seven deadly virtues, Gladys. You, as a good Tory, must not underrate them. Beer, the Bible, and the seven deadly virtues have made our England what she is." "You don't like your country, then?" she asked. "I live in it." "That you may censure it the better." "Would you have me take the verdict of Europe on it?" he inquired. "What do they say of us?" "That Tartuffe has emigrated to England and opened a shop." "Is that yours, Harry?" "I give it to you." "I could not use it. It is too true." "You need not be afraid. Our countrymen never recognize a description." "They are practical." "They are more cunning than practical. When they make up their ledger, they balance stupidity by wealth, and vice by hypocrisy." "Still, we have done great things." "Great things have been thrust on us, Gladys." "We have carried their burden." "Only as far as the Stock Exchange." She shook her head. "I believe in the race," she cried. "It represents the survival of the pushing." "It has development." "Decay fascinates me more." "What of art?" she asked. "It is a malady." "Love?" "An illusion." "Religion?" "The fashionable substitute for belief." "You are a sceptic." "Never! Scepticism is the beginning of faith." "What are you?" "To define is to limit." "Give me a clue." "Threads snap. You would lose your way in the labyrinth." "You bewilder me. Let us talk of some one else." "Our host is a delightful topic. Years ago he was christened Prince Charming." "Ah! don't remind me of that," cried Dorian Gray. "Our host is rather horrid this evening," answered the duchess, colouring. "I believe he thinks that Monmouth married me on purely scientific principles as the best specimen he could find of a modern butterfly." "Well, I hope he won't stick pins into you, Duchess," laughed Dorian. "Oh! my maid does that already, Mr. Gray, when she is annoyed with me." "And what does she get annoyed with you about, Duchess?" "For the most trivial things, Mr. Gray, I assure you. Usually because I come in at ten minutes to nine and tell her that I must be dressed by half-past eight." "How unreasonable of her! You should give her warning." "I daren't, Mr. Gray. Why, she invents hats for me. You remember the one I wore at Lady Hilstone's garden-party? You don't, but it is nice of you to pretend that you do. Well, she made it out of nothing. All good hats are made out of nothing." "Like all good reputations, Gladys," interrupted Lord Henry. "Every effect that one produces gives one an enemy. To be popular one must be a mediocrity." "Not with women," said the duchess, shaking her head; "and women rule the world. I assure you we can't bear mediocrities. We women, as some one says, love with our ears, just as you men love with your eyes, if you ever love at all." "It seems to me that we never do anything else," murmured Dorian. "Ah! then, you never really love, Mr. Gray," answered the duchess with mock sadness. "My dear Gladys!" cried Lord Henry. "How can you say that? Romance lives by repetition, and repetition converts an appetite into an art. Besides, each time that one loves is the only time one has ever loved. Difference of object does not alter singleness of passion. It merely intensifies it. We can have in life but one great experience at best, and the secret of life is to reproduce that experience as often as possible." "Even when one has been wounded by it, Harry?" asked the duchess after a pause. "Especially when one has been wounded by it," answered Lord Henry. The duchess turned and looked at Dorian Gray with a curious expression in her eyes. "What do you say to that, Mr. Gray?" she inquired. Dorian hesitated for a moment. Then he threw his head back and laughed. "I always agree with Harry, Duchess." "Even when he is wrong?" "Harry is never wrong, Duchess." "And does his philosophy make you happy?" "I have never searched for happiness. Who wants happiness? I have searched for pleasure." "And found it, Mr. Gray?" "Often. Too often." The duchess sighed. "I am searching for peace," she said, "and if I don't go and dress, I shall have none this evening." "Let me get you some orchids, Duchess," cried Dorian, starting to his feet and walking down the conservatory. "You are flirting disgracefully with him," said Lord Henry to his cousin. "You had better take care. He is very fascinating." "If he were not, there would be no battle." "Greek meets Greek, then?" "I am on the side of the Trojans. They fought for a woman." "They were defeated." "There are worse things than capture," she answered. "You gallop with a loose rein." "Pace gives life," was the _riposte_. "I shall write it in my diary to-night." "What?" "That a burnt child loves the fire." "I am not even singed. My wings are untouched." "You use them for everything, except flight." "Courage has passed from men to women. It is a new experience for us." "You have a rival." "Who?" He laughed. "Lady Narborough," he whispered. "She perfectly adores him." "You fill me with apprehension. The appeal to antiquity is fatal to us who are romanticists." "Romanticists! You have all the methods of science." "Men have educated us." "But not explained you." "Describe us as a sex," was her challenge. "Sphinxes without secrets." She looked at him, smiling. "How long Mr. Gray is!" she said. "Let us go and help him. I have not yet told him the colour of my frock." "Ah! you must suit your frock to his flowers, Gladys." "That would be a premature surrender." "Romantic art begins with its climax." "I must keep an opportunity for retreat." "In the Parthian manner?" "They found safety in the desert. I could not do that." "Women are not always allowed a choice," he answered, but hardly had he finished the sentence before from the far end of the conservatory came a stifled groan, followed by the dull sound of a heavy fall. Everybody started up. The duchess stood motionless in horror. And with fear in his eyes, Lord Henry rushed through the flapping palms to find Dorian Gray lying face downwards on the tiled floor in a deathlike swoon. He was carried at once into the blue drawing-room and laid upon one of the sofas. After a short time, he came to himself and looked round with a dazed expression. "What has happened?" he asked. "Oh! I remember. Am I safe here, Harry?" He began to tremble. "My dear Dorian," answered Lord Henry, "you merely fainted. That was all. You must have overtired yourself. You had better not come down to dinner. I will take your place." "No, I will come down," he said, struggling to his feet. "I would rather come down. I must not be alone." He went to his room and dressed. There was a wild recklessness of gaiety in his manner as he sat at table, but now and then a thrill of terror ran through him when he remembered that, pressed against the window of the conservatory, like a white handkerchief, he had seen the face of James Vane watching him. CHAPTER 18 The next day he did not leave the house, and, indeed, spent most of the time in his own room, sick with a wild terror of dying, and yet indifferent to life itself. The consciousness of being hunted, snared, tracked down, had begun to dominate him. If the tapestry did but tremble in the wind, he shook. The dead leaves that were blown against the leaded panes seemed to him like his own wasted resolutions and wild regrets. When he closed his eyes, he saw again the sailor's face peering through the mist-stained glass, and horror seemed once more to lay its hand upon his heart. But perhaps it had been only his fancy that had called vengeance out of the night and set the hideous shapes of punishment before him. Actual life was chaos, but there was something terribly logical in the imagination. It was the imagination that set remorse to dog the feet of sin. It was the imagination that made each crime bear its misshapen brood. In the common world of fact the wicked were not punished, nor the good rewarded. Success was given to the strong, failure thrust upon the weak. That was all. Besides, had any stranger been prowling round the house, he would have been seen by the servants or the keepers. Had any foot-marks been found on the flower-beds, the gardeners would have reported it. Yes, it had been merely fancy. Sibyl Vane's brother had not come back to kill him. He had sailed away in his ship to founder in some winter sea. From him, at any rate, he was safe. Why, the man did not know who he was, could not know who he was. The mask of youth had saved him. And yet if it had been merely an illusion, how terrible it was to think that conscience could raise such fearful phantoms, and give them visible form, and make them move before one! What sort of life would his be if, day and night, shadows of his crime were to peer at him from silent corners, to mock him from secret places, to whisper in his ear as he sat at the feast, to wake him with icy fingers as he lay asleep! As the thought crept through his brain, he grew pale with terror, and the air seemed to him to have become suddenly colder. Oh! in what a wild hour of madness he had killed his friend! How ghastly the mere memory of the scene! He saw it all again. Each hideous detail came back to him with added horror. Out of the black cave of time, terrible and swathed in scarlet, rose the image of his sin. When Lord Henry came in at six o'clock, he found him crying as one whose heart will break. It was not till the third day that he ventured to go out. There was something in the clear, pine-scented air of that winter morning that seemed to bring him back his joyousness and his ardour for life. But it was not merely the physical conditions of environment that had caused the change. His own nature had revolted against the excess of anguish that had sought to maim and mar the perfection of its calm. With subtle and finely wrought temperaments it is always so. Their strong passions must either bruise or bend. They either slay the man, or themselves die. Shallow sorrows and shallow loves live on. The loves and sorrows that are great are destroyed by their own plenitude. Besides, he had convinced himself that he had been the victim of a terror-stricken imagination, and looked back now on his fears with something of pity and not a little of contempt. After breakfast, he walked with the duchess for an hour in the garden and then drove across the park to join the shooting-party. The crisp frost lay like salt upon the grass. The sky was an inverted cup of blue metal. A thin film of ice bordered the flat, reed-grown lake. At the corner of the pine-wood he caught sight of Sir Geoffrey Clouston, the duchess's brother, jerking two spent cartridges out of his gun. He jumped from the cart, and having told the groom to take the mare home, made his way towards his guest through the withered bracken and rough undergrowth. "Have you had good sport, Geoffrey?" he asked. "Not very good, Dorian. I think most of the birds have gone to the open. I dare say it will be better after lunch, when we get to new ground." Dorian strolled along by his side. The keen aromatic air, the brown and red lights that glimmered in the wood, the hoarse cries of the beaters ringing out from time to time, and the sharp snaps of the guns that followed, fascinated him and filled him with a sense of delightful freedom. He was dominated by the carelessness of happiness, by the high indifference of joy. Suddenly from a lumpy tussock of old grass some twenty yards in front of them, with black-tipped ears erect and long hinder limbs throwing it forward, started a hare. It bolted for a thicket of alders. Sir Geoffrey put his gun to his shoulder, but there was something in the animal's grace of movement that strangely charmed Dorian Gray, and he cried out at once, "Don't shoot it, Geoffrey. Let it live." "What nonsense, Dorian!" laughed his companion, and as the hare bounded into the thicket, he fired. There were two cries heard, the cry of a hare in pain, which is dreadful, the cry of a man in agony, which is worse. "Good heavens! I have hit a beater!" exclaimed Sir Geoffrey. "What an ass the man was to get in front of the guns! Stop shooting there!" he called out at the top of his voice. "A man is hurt." The head-keeper came running up with a stick in his hand. "Where, sir? Where is he?" he shouted. At the same time, the firing ceased along the line. "Here," answered Sir Geoffrey angrily, hurrying towards the thicket. "Why on earth don't you keep your men back? Spoiled my shooting for the day." Dorian watched them as they plunged into the alder-clump, brushing the lithe swinging branches aside. In a few moments they emerged, dragging a body after them into the sunlight. He turned away in horror. It seemed to him that misfortune followed wherever he went. He heard Sir Geoffrey ask if the man was really dead, and the affirmative answer of the keeper. The wood seemed to him to have become suddenly alive with faces. There was the trampling of myriad feet and the low buzz of voices. A great copper-breasted pheasant came beating through the boughs overhead. After a few moments--that were to him, in his perturbed state, like endless hours of pain--he felt a hand laid on his shoulder. He started and looked round. "Dorian," said Lord Henry, "I had better tell them that the shooting is stopped for to-day. It would not look well to go on." "I wish it were stopped for ever, Harry," he answered bitterly. "The whole thing is hideous and cruel. Is the man ...?" He could not finish the sentence. "I am afraid so," rejoined Lord Henry. "He got the whole charge of shot in his chest. He must have died almost instantaneously. Come; let us go home." They walked side by side in the direction of the avenue for nearly fifty yards without speaking. Then Dorian looked at Lord Henry and said, with a heavy sigh, "It is a bad omen, Harry, a very bad omen." "What is?" asked Lord Henry. "Oh! this accident, I suppose. My dear fellow, it can't be helped. It was the man's own fault. Why did he get in front of the guns? Besides, it is nothing to us. It is rather awkward for Geoffrey, of course. It does not do to pepper beaters. It makes people think that one is a wild shot. And Geoffrey is not; he shoots very straight. But there is no use talking about the matter." Dorian shook his head. "It is a bad omen, Harry. I feel as if something horrible were going to happen to some of us. To myself, perhaps," he added, passing his hand over his eyes, with a gesture of pain. The elder man laughed. "The only horrible thing in the world is _ennui_, Dorian. That is the one sin for which there is no forgiveness. But we are not likely to suffer from it unless these fellows keep chattering about this thing at dinner. I must tell them that the subject is to be tabooed. As for omens, there is no such thing as an omen. Destiny does not send us heralds. She is too wise or too cruel for that. Besides, what on earth could happen to you, Dorian? You have everything in the world that a man can want. There is no one who would not be delighted to change places with you." "There is no one with whom I would not change places, Harry. Don't laugh like that. I am telling you the truth. The wretched peasant who has just died is better off than I am. I have no terror of death. It is the coming of death that terrifies me. Its monstrous wings seem to wheel in the leaden air around me. Good heavens! don't you see a man moving behind the trees there, watching me, waiting for me?" Lord Henry looked in the direction in which the trembling gloved hand was pointing. "Yes," he said, smiling, "I see the gardener waiting for you. I suppose he wants to ask you what flowers you wish to have on the table to-night. How absurdly nervous you are, my dear fellow! You must come and see my doctor, when we get back to town." Dorian heaved a sigh of relief as he saw the gardener approaching. The man touched his hat, glanced for a moment at Lord Henry in a hesitating manner, and then produced a letter, which he handed to his master. "Her Grace told me to wait for an answer," he murmured. Dorian put the letter into his pocket. "Tell her Grace that I am coming in," he said, coldly. The man turned round and went rapidly in the direction of the house. "How fond women are of doing dangerous things!" laughed Lord Henry. "It is one of the qualities in them that I admire most. A woman will flirt with anybody in the world as long as other people are looking on." "How fond you are of saying dangerous things, Harry! In the present instance, you are quite astray. I like the duchess very much, but I don't love her." "And the duchess loves you very much, but she likes you less, so you are excellently matched." "You are talking scandal, Harry, and there is never any basis for scandal." "The basis of every scandal is an immoral certainty," said Lord Henry, lighting a cigarette. "You would sacrifice anybody, Harry, for the sake of an epigram." "The world goes to the altar of its own accord," was the answer. "I wish I could love," cried Dorian Gray with a deep note of pathos in his voice. "But I seem to have lost the passion and forgotten the desire. I am too much concentrated on myself. My own personality has become a burden to me. I want to escape, to go away, to forget. It was silly of me to come down here at all. I think I shall send a wire to Harvey to have the yacht got ready. On a yacht one is safe." "Safe from what, Dorian? You are in some trouble. Why not tell me what it is? You know I would help you." "I can't tell you, Harry," he answered sadly. "And I dare say it is only a fancy of mine. This unfortunate accident has upset me. I have a horrible presentiment that something of the kind may happen to me." "What nonsense!" "I hope it is, but I can't help feeling it. Ah! here is the duchess, looking like Artemis in a tailor-made gown. You see we have come back, Duchess." "I have heard all about it, Mr. Gray," she answered. "Poor Geoffrey is terribly upset. And it seems that you asked him not to shoot the hare. How curious!" "Yes, it was very curious. I don't know what made me say it. Some whim, I suppose. It looked the loveliest of little live things. But I am sorry they told you about the man. It is a hideous subject." "It is an annoying subject," broke in Lord Henry. "It has no psychological value at all. Now if Geoffrey had done the thing on purpose, how interesting he would be! I should like to know some one who had committed a real murder." "How horrid of you, Harry!" cried the duchess. "Isn't it, Mr. Gray? Harry, Mr. Gray is ill again. He is going to faint." Dorian drew himself up with an effort and smiled. "It is nothing, Duchess," he murmured; "my nerves are dreadfully out of order. That is all. I am afraid I walked too far this morning. I didn't hear what Harry said. Was it very bad? You must tell me some other time. I think I must go and lie down. You will excuse me, won't you?" They had reached the great flight of steps that led from the conservatory on to the terrace. As the glass door closed behind Dorian, Lord Henry turned and looked at the duchess with his slumberous eyes. "Are you very much in love with him?" he asked. She did not answer for some time, but stood gazing at the landscape. "I wish I knew," she said at last. He shook his head. "Knowledge would be fatal. It is the uncertainty that charms one. A mist makes things wonderful." "One may lose one's way." "All ways end at the same point, my dear Gladys." "What is that?" "Disillusion." "It was my _debut_ in life," she sighed. "It came to you crowned." "I am tired of strawberry leaves." "They become you." "Only in public." "You would miss them," said Lord Henry. "I will not part with a petal." "Monmouth has ears." "Old age is dull of hearing." "Has he never been jealous?" "I wish he had been." He glanced about as if in search of something. "What are you looking for?" she inquired. "The button from your foil," he answered. "You have dropped it." She laughed. "I have still the mask." "It makes your eyes lovelier," was his reply. She laughed again. Her teeth showed like white seeds in a scarlet fruit. Upstairs, in his own room, Dorian Gray was lying on a sofa, with terror in every tingling fibre of his body. Life had suddenly become too hideous a burden for him to bear. The dreadful death of the unlucky beater, shot in the thicket like a wild animal, had seemed to him to pre-figure death for himself also. He had nearly swooned at what Lord Henry had said in a chance mood of cynical jesting. At five o'clock he rang his bell for his servant and gave him orders to pack his things for the night-express to town, and to have the brougham at the door by eight-thirty. He was determined not to sleep another night at Selby Royal. It was an ill-omened place. Death walked there in the sunlight. The grass of the forest had been spotted with blood. Then he wrote a note to Lord Henry, telling him that he was going up to town to consult his doctor and asking him to entertain his guests in his absence. As he was putting it into the envelope, a knock came to the door, and his valet informed him that the head-keeper wished to see him. He frowned and bit his lip. "Send him in," he muttered, after some moments' hesitation. As soon as the man entered, Dorian pulled his chequebook out of a drawer and spread it out before him. "I suppose you have come about the unfortunate accident of this morning, Thornton?" he said, taking up a pen. "Yes, sir," answered the gamekeeper. "Was the poor fellow married? Had he any people dependent on him?" asked Dorian, looking bored. "If so, I should not like them to be left in want, and will send them any sum of money you may think necessary." "We don't know who he is, sir. That is what I took the liberty of coming to you about." "Don't know who he is?" said Dorian, listlessly. "What do you mean? Wasn't he one of your men?" "No, sir. Never saw him before. Seems like a sailor, sir." The pen dropped from Dorian Gray's hand, and he felt as if his heart had suddenly stopped beating. "A sailor?" he cried out. "Did you say a sailor?" "Yes, sir. He looks as if he had been a sort of sailor; tattooed on both arms, and that kind of thing." "Was there anything found on him?" said Dorian, leaning forward and looking at the man with startled eyes. "Anything that would tell his name?" "Some money, sir--not much, and a six-shooter. There was no name of any kind. A decent-looking man, sir, but rough-like. A sort of sailor we think." Dorian started to his feet. A terrible hope fluttered past him. He clutched at it madly. "Where is the body?" he exclaimed. "Quick! I must see it at once." "It is in an empty stable in the Home Farm, sir. The folk don't like to have that sort of thing in their houses. They say a corpse brings bad luck." "The Home Farm! Go there at once and meet me. Tell one of the grooms to bring my horse round. No. Never mind. I'll go to the stables myself. It will save time." In less than a quarter of an hour, Dorian Gray was galloping down the long avenue as hard as he could go. The trees seemed to sweep past him in spectral procession, and wild shadows to fling themselves across his path. Once the mare swerved at a white gate-post and nearly threw him. He lashed her across the neck with his crop. She cleft the dusky air like an arrow. The stones flew from her hoofs. At last he reached the Home Farm. Two men were loitering in the yard. He leaped from the saddle and threw the reins to one of them. In the farthest stable a light was glimmering. Something seemed to tell him that the body was there, and he hurried to the door and put his hand upon the latch. There he paused for a moment, feeling that he was on the brink of a discovery that would either make or mar his life. Then he thrust the door open and entered. On a heap of sacking in the far corner was lying the dead body of a man dressed in a coarse shirt and a pair of blue trousers. A spotted handkerchief had been placed over the face. A coarse candle, stuck in a bottle, sputtered beside it. Dorian Gray shuddered. He felt that his could not be the hand to take the handkerchief away, and called out to one of the farm-servants to come to him. "Take that thing off the face. I wish to see it," he said, clutching at the door-post for support. When the farm-servant had done so, he stepped forward. A cry of joy broke from his lips. The man who had been shot in the thicket was James Vane. He stood there for some minutes looking at the dead body. As he rode home, his eyes were full of tears, for he knew he was safe. CHAPTER 19 "There is no use your telling me that you are going to be good," cried Lord Henry, dipping his white fingers into a red copper bowl filled with rose-water. "You are quite perfect. Pray, don't change." Dorian Gray shook his head. "No, Harry, I have done too many dreadful things in my life. I am not going to do any more. I began my good actions yesterday." "Where were you yesterday?" "In the country, Harry. I was staying at a little inn by myself." "My dear boy," said Lord Henry, smiling, "anybody can be good in the country. There are no temptations there. That is the reason why people who live out of town are so absolutely uncivilized. Civilization is not by any means an easy thing to attain to. There are only two ways by which man can reach it. One is by being cultured, the other by being corrupt. Country people have no opportunity of being either, so they stagnate." "Culture and corruption," echoed Dorian. "I have known something of both. It seems terrible to me now that they should ever be found together. For I have a new ideal, Harry. I am going to alter. I think I have altered." "You have not yet told me what your good action was. Or did you say you had done more than one?" asked his companion as he spilled into his plate a little crimson pyramid of seeded strawberries and, through a perforated, shell-shaped spoon, snowed white sugar upon them. "I can tell you, Harry. It is not a story I could tell to any one else. I spared somebody. It sounds vain, but you understand what I mean. She was quite beautiful and wonderfully like Sibyl Vane. I think it was that which first attracted me to her. You remember Sibyl, don't you? How long ago that seems! Well, Hetty was not one of our own class, of course. She was simply a girl in a village. But I really loved her. I am quite sure that I loved her. All during this wonderful May that we have been having, I used to run down and see her two or three times a week. Yesterday she met me in a little orchard. The apple-blossoms kept tumbling down on her hair, and she was laughing. We were to have gone away together this morning at dawn. Suddenly I determined to leave her as flowerlike as I had found her." "I should think the novelty of the emotion must have given you a thrill of real pleasure, Dorian," interrupted Lord Henry. "But I can finish your idyll for you. You gave her good advice and broke her heart. That was the beginning of your reformation." "Harry, you are horrible! You mustn't say these dreadful things. Hetty's heart is not broken. Of course, she cried and all that. But there is no disgrace upon her. She can live, like Perdita, in her garden of mint and marigold." "And weep over a faithless Florizel," said Lord Henry, laughing, as he leaned back in his chair. "My dear Dorian, you have the most curiously boyish moods. Do you think this girl will ever be really content now with any one of her own rank? I suppose she will be married some day to a rough carter or a grinning ploughman. Well, the fact of having met you, and loved you, will teach her to despise her husband, and she will be wretched. From a moral point of view, I cannot say that I think much of your great renunciation. Even as a beginning, it is poor. Besides, how do you know that Hetty isn't floating at the present moment in some starlit mill-pond, with lovely water-lilies round her, like Ophelia?" "I can't bear this, Harry! You mock at everything, and then suggest the most serious tragedies. I am sorry I told you now. I don't care what you say to me. I know I was right in acting as I did. Poor Hetty! As I rode past the farm this morning, I saw her white face at the window, like a spray of jasmine. Don't let us talk about it any more, and don't try to persuade me that the first good action I have done for years, the first little bit of self-sacrifice I have ever known, is really a sort of sin. I want to be better. I am going to be better. Tell me something about yourself. What is going on in town? I have not been to the club for days." "The people are still discussing poor Basil's disappearance." "I should have thought they had got tired of that by this time," said Dorian, pouring himself out some wine and frowning slightly. "My dear boy, they have only been talking about it for six weeks, and the British public are really not equal to the mental strain of having more than one topic every three months. They have been very fortunate lately, however. They have had my own divorce-case and Alan Campbell's suicide. Now they have got the mysterious disappearance of an artist. Scotland Yard still insists that the man in the grey ulster who left for Paris by the midnight train on the ninth of November was poor Basil, and the French police declare that Basil never arrived in Paris at all. I suppose in about a fortnight we shall be told that he has been seen in San Francisco. It is an odd thing, but every one who disappears is said to be seen at San Francisco. It must be a delightful city, and possess all the attractions of the next world." "What do you think has happened to Basil?" asked Dorian, holding up his Burgundy against the light and wondering how it was that he could discuss the matter so calmly. "I have not the slightest idea. If Basil chooses to hide himself, it is no business of mine. If he is dead, I don't want to think about him. Death is the only thing that ever terrifies me. I hate it." "Why?" said the younger man wearily. "Because," said Lord Henry, passing beneath his nostrils the gilt trellis of an open vinaigrette box, "one can survive everything nowadays except that. Death and vulgarity are the only two facts in the nineteenth century that one cannot explain away. Let us have our coffee in the music-room, Dorian. You must play Chopin to me. The man with whom my wife ran away played Chopin exquisitely. Poor Victoria! I was very fond of her. The house is rather lonely without her. Of course, married life is merely a habit, a bad habit. But then one regrets the loss even of one's worst habits. Perhaps one regrets them the most. They are such an essential part of one's personality." Dorian said nothing, but rose from the table, and passing into the next room, sat down to the piano and let his fingers stray across the white and black ivory of the keys. After the coffee had been brought in, he stopped, and looking over at Lord Henry, said, "Harry, did it ever occur to you that Basil was murdered?" Lord Henry yawned. "Basil was very popular, and always wore a Waterbury watch. Why should he have been murdered? He was not clever enough to have enemies. Of course, he had a wonderful genius for painting. But a man can paint like Velasquez and yet be as dull as possible. Basil was really rather dull. He only interested me once, and that was when he told me, years ago, that he had a wild adoration for you and that you were the dominant motive of his art." "I was very fond of Basil," said Dorian with a note of sadness in his voice. "But don't people say that he was murdered?" "Oh, some of the papers do. It does not seem to me to be at all probable. I know there are dreadful places in Paris, but Basil was not the sort of man to have gone to them. He had no curiosity. It was his chief defect." "What would you say, Harry, if I told you that I had murdered Basil?" said the younger man. He watched him intently after he had spoken. "I would say, my dear fellow, that you were posing for a character that doesn't suit you. All crime is vulgar, just as all vulgarity is crime. It is not in you, Dorian, to commit a murder. I am sorry if I hurt your vanity by saying so, but I assure you it is true. Crime belongs exclusively to the lower orders. I don't blame them in the smallest degree. I should fancy that crime was to them what art is to us, simply a method of procuring extraordinary sensations." "A method of procuring sensations? Do you think, then, that a man who has once committed a murder could possibly do the same crime again? Don't tell me that." "Oh! anything becomes a pleasure if one does it too often," cried Lord Henry, laughing. "That is one of the most important secrets of life. I should fancy, however, that murder is always a mistake. One should never do anything that one cannot talk about after dinner. But let us pass from poor Basil. I wish I could believe that he had come to such a really romantic end as you suggest, but I can't. I dare say he fell into the Seine off an omnibus and that the conductor hushed up the scandal. Yes: I should fancy that was his end. I see him lying now on his back under those dull-green waters, with the heavy barges floating over him and long weeds catching in his hair. Do you know, I don't think he would have done much more good work. During the last ten years his painting had gone off very much." Dorian heaved a sigh, and Lord Henry strolled across the room and began to stroke the head of a curious Java parrot, a large, grey-plumaged bird with pink crest and tail, that was balancing itself upon a bamboo perch. As his pointed fingers touched it, it dropped the white scurf of crinkled lids over black, glasslike eyes and began to sway backwards and forwards. "Yes," he continued, turning round and taking his handkerchief out of his pocket; "his painting had quite gone off. It seemed to me to have lost something. It had lost an ideal. When you and he ceased to be great friends, he ceased to be a great artist. What was it separated you? I suppose he bored you. If so, he never forgave you. It's a habit bores have. By the way, what has become of that wonderful portrait he did of you? I don't think I have ever seen it since he finished it. Oh! I remember your telling me years ago that you had sent it down to Selby, and that it had got mislaid or stolen on the way. You never got it back? What a pity! it was really a masterpiece. I remember I wanted to buy it. I wish I had now. It belonged to Basil's best period. Since then, his work was that curious mixture of bad painting and good intentions that always entitles a man to be called a representative British artist. Did you advertise for it? You should." "I forget," said Dorian. "I suppose I did. But I never really liked it. I am sorry I sat for it. The memory of the thing is hateful to me. Why do you talk of it? It used to remind me of those curious lines in some play--Hamlet, I think--how do they run?-- "Like the painting of a sorrow, A face without a heart." Yes: that is what it was like." Lord Henry laughed. "If a man treats life artistically, his brain is his heart," he answered, sinking into an arm-chair. Dorian Gray shook his head and struck some soft chords on the piano. "'Like the painting of a sorrow,'" he repeated, "'a face without a heart.'" The elder man lay back and looked at him with half-closed eyes. "By the way, Dorian," he said after a pause, "'what does it profit a man if he gain the whole world and lose--how does the quotation run?--his own soul'?" The music jarred, and Dorian Gray started and stared at his friend. "Why do you ask me that, Harry?" "My dear fellow," said Lord Henry, elevating his eyebrows in surprise, "I asked you because I thought you might be able to give me an answer. That is all. I was going through the park last Sunday, and close by the Marble Arch there stood a little crowd of shabby-looking people listening to some vulgar street-preacher. As I passed by, I heard the man yelling out that question to his audience. It struck me as being rather dramatic. London is very rich in curious effects of that kind. A wet Sunday, an uncouth Christian in a mackintosh, a ring of sickly white faces under a broken roof of dripping umbrellas, and a wonderful phrase flung into the air by shrill hysterical lips--it was really very good in its way, quite a suggestion. I thought of telling the prophet that art had a soul, but that man had not. I am afraid, however, he would not have understood me." "Don't, Harry. The soul is a terrible reality. It can be bought, and sold, and bartered away. It can be poisoned, or made perfect. There is a soul in each one of us. I know it." "Do you feel quite sure of that, Dorian?" "Quite sure." "Ah! then it must be an illusion. The things one feels absolutely certain about are never true. That is the fatality of faith, and the lesson of romance. How grave you are! Don't be so serious. What have you or I to do with the superstitions of our age? No: we have given up our belief in the soul. Play me something. Play me a nocturne, Dorian, and, as you play, tell me, in a low voice, how you have kept your youth. You must have some secret. I am only ten years older than you are, and I am wrinkled, and worn, and yellow. You are really wonderful, Dorian. You have never looked more charming than you do to-night. You remind me of the day I saw you first. You were rather cheeky, very shy, and absolutely extraordinary. You have changed, of course, but not in appearance. I wish you would tell me your secret. To get back my youth I would do anything in the world, except take exercise, get up early, or be respectable. Youth! There is nothing like it. It's absurd to talk of the ignorance of youth. The only people to whose opinions I listen now with any respect are people much younger than myself. They seem in front of me. Life has revealed to them her latest wonder. As for the aged, I always contradict the aged. I do it on principle. If you ask them their opinion on something that happened yesterday, they solemnly give you the opinions current in 1820, when people wore high stocks, believed in everything, and knew absolutely nothing. How lovely that thing you are playing is! I wonder, did Chopin write it at Majorca, with the sea weeping round the villa and the salt spray dashing against the panes? It is marvellously romantic. What a blessing it is that there is one art left to us that is not imitative! Don't stop. I want music to-night. It seems to me that you are the young Apollo and that I am Marsyas listening to you. I have sorrows, Dorian, of my own, that even you know nothing of. The tragedy of old age is not that one is old, but that one is young. I am amazed sometimes at my own sincerity. Ah, Dorian, how happy you are! What an exquisite life you have had! You have drunk deeply of everything. You have crushed the grapes against your palate. Nothing has been hidden from you. And it has all been to you no more than the sound of music. It has not marred you. You are still the same." "I am not the same, Harry." "Yes, you are the same. I wonder what the rest of your life will be. Don't spoil it by renunciations. At present you are a perfect type. Don't make yourself incomplete. You are quite flawless now. You need not shake your head: you know you are. Besides, Dorian, don't deceive yourself. Life is not governed by will or intention. Life is a question of nerves, and fibres, and slowly built-up cells in which thought hides itself and passion has its dreams. You may fancy yourself safe and think yourself strong. But a chance tone of colour in a room or a morning sky, a particular perfume that you had once loved and that brings subtle memories with it, a line from a forgotten poem that you had come across again, a cadence from a piece of music that you had ceased to play--I tell you, Dorian, that it is on things like these that our lives depend. Browning writes about that somewhere; but our own senses will imagine them for us. There are moments when the odour of _lilas blanc_ passes suddenly across me, and I have to live the strangest month of my life over again. I wish I could change places with you, Dorian. The world has cried out against us both, but it has always worshipped you. It always will worship you. You are the type of what the age is searching for, and what it is afraid it has found. I am so glad that you have never done anything, never carved a statue, or painted a picture, or produced anything outside of yourself! Life has been your art. You have set yourself to music. Your days are your sonnets." Dorian rose up from the piano and passed his hand through his hair. "Yes, life has been exquisite," he murmured, "but I am not going to have the same life, Harry. And you must not say these extravagant things to me. You don't know everything about me. I think that if you did, even you would turn from me. You laugh. Don't laugh." "Why have you stopped playing, Dorian? Go back and give me the nocturne over again. Look at that great, honey-coloured moon that hangs in the dusky air. She is waiting for you to charm her, and if you play she will come closer to the earth. You won't? Let us go to the club, then. It has been a charming evening, and we must end it charmingly. There is some one at White's who wants immensely to know you--young Lord Poole, Bournemouth's eldest son. He has already copied your neckties, and has begged me to introduce him to you. He is quite delightful and rather reminds me of you." "I hope not," said Dorian with a sad look in his eyes. "But I am tired to-night, Harry. I shan't go to the club. It is nearly eleven, and I want to go to bed early." "Do stay. You have never played so well as to-night. There was something in your touch that was wonderful. It had more expression than I had ever heard from it before." "It is because I am going to be good," he answered, smiling. "I am a little changed already." "You cannot change to me, Dorian," said Lord Henry. "You and I will always be friends." "Yet you poisoned me with a book once. I should not forgive that. Harry, promise me that you will never lend that book to any one. It does harm." "My dear boy, you are really beginning to moralize. You will soon be going about like the converted, and the revivalist, warning people against all the sins of which you have grown tired. You are much too delightful to do that. Besides, it is no use. You and I are what we are, and will be what we will be. As for being poisoned by a book, there is no such thing as that. Art has no influence upon action. It annihilates the desire to act. It is superbly sterile. The books that the world calls immoral are books that show the world its own shame. That is all. But we won't discuss literature. Come round to-morrow. I am going to ride at eleven. We might go together, and I will take you to lunch afterwards with Lady Branksome. She is a charming woman, and wants to consult you about some tapestries she is thinking of buying. Mind you come. Or shall we lunch with our little duchess? She says she never sees you now. Perhaps you are tired of Gladys? I thought you would be. Her clever tongue gets on one's nerves. Well, in any case, be here at eleven." "Must I really come, Harry?" "Certainly. The park is quite lovely now. I don't think there have been such lilacs since the year I met you." "Very well. I shall be here at eleven," said Dorian. "Good night, Harry." As he reached the door, he hesitated for a moment, as if he had something more to say. Then he sighed and went out. CHAPTER 20 It was a lovely night, so warm that he threw his coat over his arm and did not even put his silk scarf round his throat. As he strolled home, smoking his cigarette, two young men in evening dress passed him. He heard one of them whisper to the other, "That is Dorian Gray." He remembered how pleased he used to be when he was pointed out, or stared at, or talked about. He was tired of hearing his own name now. Half the charm of the little village where he had been so often lately was that no one knew who he was. He had often told the girl whom he had lured to love him that he was poor, and she had believed him. He had told her once that he was wicked, and she had laughed at him and answered that wicked people were always very old and very ugly. What a laugh she had!--just like a thrush singing. And how pretty she had been in her cotton dresses and her large hats! She knew nothing, but she had everything that he had lost. When he reached home, he found his servant waiting up for him. He sent him to bed, and threw himself down on the sofa in the library, and began to think over some of the things that Lord Henry had said to him. Was it really true that one could never change? He felt a wild longing for the unstained purity of his boyhood--his rose-white boyhood, as Lord Henry had once called it. He knew that he had tarnished himself, filled his mind with corruption and given horror to his fancy; that he had been an evil influence to others, and had experienced a terrible joy in being so; and that of the lives that had crossed his own, it had been the fairest and the most full of promise that he had brought to shame. But was it all irretrievable? Was there no hope for him? Ah! in what a monstrous moment of pride and passion he had prayed that the portrait should bear the burden of his days, and he keep the unsullied splendour of eternal youth! All his failure had been due to that. Better for him that each sin of his life had brought its sure swift penalty along with it. There was purification in punishment. Not "Forgive us our sins" but "Smite us for our iniquities" should be the prayer of man to a most just God. The curiously carved mirror that Lord Henry had given to him, so many years ago now, was standing on the table, and the white-limbed Cupids laughed round it as of old. He took it up, as he had done on that night of horror when he had first noted the change in the fatal picture, and with wild, tear-dimmed eyes looked into its polished shield. Once, some one who had terribly loved him had written to him a mad letter, ending with these idolatrous words: "The world is changed because you are made of ivory and gold. The curves of your lips rewrite history." The phrases came back to his memory, and he repeated them over and over to himself. Then he loathed his own beauty, and flinging the mirror on the floor, crushed it into silver splinters beneath his heel. It was his beauty that had ruined him, his beauty and the youth that he had prayed for. But for those two things, his life might have been free from stain. His beauty had been to him but a mask, his youth but a mockery. What was youth at best? A green, an unripe time, a time of shallow moods, and sickly thoughts. Why had he worn its livery? Youth had spoiled him. It was better not to think of the past. Nothing could alter that. It was of himself, and of his own future, that he had to think. James Vane was hidden in a nameless grave in Selby churchyard. Alan Campbell had shot himself one night in his laboratory, but had not revealed the secret that he had been forced to know. The excitement, such as it was, over Basil Hallward's disappearance would soon pass away. It was already waning. He was perfectly safe there. Nor, indeed, was it the death of Basil Hallward that weighed most upon his mind. It was the living death of his own soul that troubled him. Basil had painted the portrait that had marred his life. He could not forgive him that. It was the portrait that had done everything. Basil had said things to him that were unbearable, and that he had yet borne with patience. The murder had been simply the madness of a moment. As for Alan Campbell, his suicide had been his own act. He had chosen to do it. It was nothing to him. A new life! That was what he wanted. That was what he was waiting for. Surely he had begun it already. He had spared one innocent thing, at any rate. He would never again tempt innocence. He would be good. As he thought of Hetty Merton, he began to wonder if the portrait in the locked room had changed. Surely it was not still so horrible as it had been? Perhaps if his life became pure, he would be able to expel every sign of evil passion from the face. Perhaps the signs of evil had already gone away. He would go and look. He took the lamp from the table and crept upstairs. As he unbarred the door, a smile of joy flitted across his strangely young-looking face and lingered for a moment about his lips. Yes, he would be good, and the hideous thing that he had hidden away would no longer be a terror to him. He felt as if the load had been lifted from him already. He went in quietly, locking the door behind him, as was his custom, and dragged the purple hanging from the portrait. A cry of pain and indignation broke from him. He could see no change, save that in the eyes there was a look of cunning and in the mouth the curved wrinkle of the hypocrite. The thing was still loathsome--more loathsome, if possible, than before--and the scarlet dew that spotted the hand seemed brighter, and more like blood newly spilled. Then he trembled. Had it been merely vanity that had made him do his one good deed? Or the desire for a new sensation, as Lord Henry had hinted, with his mocking laugh? Or that passion to act a part that sometimes makes us do things finer than we are ourselves? Or, perhaps, all these? And why was the red stain larger than it had been? It seemed to have crept like a horrible disease over the wrinkled fingers. There was blood on the painted feet, as though the thing had dripped--blood even on the hand that had not held the knife. Confess? Did it mean that he was to confess? To give himself up and be put to death? He laughed. He felt that the idea was monstrous. Besides, even if he did confess, who would believe him? There was no trace of the murdered man anywhere. Everything belonging to him had been destroyed. He himself had burned what had been below-stairs. The world would simply say that he was mad. They would shut him up if he persisted in his story.... Yet it was his duty to confess, to suffer public shame, and to make public atonement. There was a God who called upon men to tell their sins to earth as well as to heaven. Nothing that he could do would cleanse him till he had told his own sin. His sin? He shrugged his shoulders. The death of Basil Hallward seemed very little to him. He was thinking of Hetty Merton. For it was an unjust mirror, this mirror of his soul that he was looking at. Vanity? Curiosity? Hypocrisy? Had there been nothing more in his renunciation than that? There had been something more. At least he thought so. But who could tell? ... No. There had been nothing more. Through vanity he had spared her. In hypocrisy he had worn the mask of goodness. For curiosity's sake he had tried the denial of self. He recognized that now. But this murder--was it to dog him all his life? Was he always to be burdened by his past? Was he really to confess? Never. There was only one bit of evidence left against him. The picture itself--that was evidence. He would destroy it. Why had he kept it so long? Once it had given him pleasure to watch it changing and growing old. Of late he had felt no such pleasure. It had kept him awake at night. When he had been away, he had been filled with terror lest other eyes should look upon it. It had brought melancholy across his passions. Its mere memory had marred many moments of joy. It had been like conscience to him. Yes, it had been conscience. He would destroy it. He looked round and saw the knife that had stabbed Basil Hallward. He had cleaned it many times, till there was no stain left upon it. It was bright, and glistened. As it had killed the painter, so it would kill the painter's work, and all that that meant. It would kill the past, and when that was dead, he would be free. It would kill this monstrous soul-life, and without its hideous warnings, he would be at peace. He seized the thing, and stabbed the picture with it. There was a cry heard, and a crash. The cry was so horrible in its agony that the frightened servants woke and crept out of their rooms. Two gentlemen, who were passing in the square below, stopped and looked up at the great house. They walked on till they met a policeman and brought him back. The man rang the bell several times, but there was no answer. Except for a light in one of the top windows, the house was all dark. After a time, he went away and stood in an adjoining portico and watched. "Whose house is that, Constable?" asked the elder of the two gentlemen. "Mr. Dorian Gray's, sir," answered the policeman. They looked at each other, as they walked away, and sneered. One of them was Sir Henry Ashton's uncle. Inside, in the servants' part of the house, the half-clad domestics were talking in low whispers to each other. Old Mrs. Leaf was crying and wringing her hands. Francis was as pale as death. After about a quarter of an hour, he got the coachman and one of the footmen and crept upstairs. They knocked, but there was no reply. They called out. Everything was still. Finally, after vainly trying to force the door, they got on the roof and dropped down on to the balcony. The windows yielded easily--their bolts were old. When they entered, they found hanging upon the wall a splendid portrait of their master as they had last seen him, in all the wonder of his exquisite youth and beauty. Lying on the floor was a dead man, in evening dress, with a knife in his heart. He was withered, wrinkled, and loathsome of visage. It was not till they had examined the rings that they recognized who it was. End of Project Gutenberg's The Picture of Dorian Gray, by Oscar Wilde *** END OF THIS PROJECT GUTENBERG EBOOK THE PICTURE OF DORIAN GRAY *** ***** This file should be named 174.txt or 174.zip ***** This and all associated files of various formats will be found in: http://www.gutenberg.org/1/7/174/ Produced by Judith Boss. HTML version by Al Haines. Updated editions will replace the previous one--the old editions will be renamed. Creating the works from public domain print editions means that no one owns a United States copyright in these works, so the Foundation (and you!) can copy and distribute it in the United States without permission and without paying copyright royalties. Special rules, set forth in the General Terms of Use part of this license, apply to copying and distributing Project Gutenberg-tm electronic works to protect the PROJECT GUTENBERG-tm concept and trademark. Project Gutenberg is a registered trademark, and may not be used if you charge for the eBooks, unless you receive specific permission. If you do not charge anything for copies of this eBook, complying with the rules is very easy. You may use this eBook for nearly any purpose such as creation of derivative works, reports, performances and research. They may be modified and printed and given away--you may do practically ANYTHING with public domain eBooks. Redistribution is subject to the trademark license, especially commercial redistribution. *** START: FULL LICENSE *** THE FULL PROJECT GUTENBERG LICENSE PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK To protect the Project Gutenberg-tm mission of promoting the free distribution of electronic works, by using or distributing this work (or any other work associated in any way with the phrase "Project Gutenberg"), you agree to comply with all the terms of the Full Project Gutenberg-tm License (available with this file or online at http://gutenberg.net/license). Section 1. General Terms of Use and Redistributing Project Gutenberg-tm electronic works 1.A. By reading or using any part of this Project Gutenberg-tm electronic work, you indicate that you have read, understand, agree to and accept all the terms of this license and intellectual property (trademark/copyright) agreement. If you do not agree to abide by all the terms of this agreement, you must cease using and return or destroy all copies of Project Gutenberg-tm electronic works in your possession. If you paid a fee for obtaining a copy of or access to a Project Gutenberg-tm electronic work and you do not agree to be bound by the terms of this agreement, you may obtain a refund from the person or entity to whom you paid the fee as set forth in paragraph 1.E.8. 1.B. "Project Gutenberg" is a registered trademark. It may only be used on or associated in any way with an electronic work by people who agree to be bound by the terms of this agreement. There are a few things that you can do with most Project Gutenberg-tm electronic works even without complying with the full terms of this agreement. See paragraph 1.C below. There are a lot of things you can do with Project Gutenberg-tm electronic works if you follow the terms of this agreement and help preserve free future access to Project Gutenberg-tm electronic works. See paragraph 1.E below. 1.C. The Project Gutenberg Literary Archive Foundation ("the Foundation" or PGLAF), owns a compilation copyright in the collection of Project Gutenberg-tm electronic works. Nearly all the individual works in the collection are in the public domain in the United States. If an individual work is in the public domain in the United States and you are located in the United States, we do not claim a right to prevent you from copying, distributing, performing, displaying or creating derivative works based on the work as long as all references to Project Gutenberg are removed. Of course, we hope that you will support the Project Gutenberg-tm mission of promoting free access to electronic works by freely sharing Project Gutenberg-tm works in compliance with the terms of this agreement for keeping the Project Gutenberg-tm name associated with the work. You can easily comply with the terms of this agreement by keeping this work in the same format with its attached full Project Gutenberg-tm License when you share it without charge with others. 1.D. The copyright laws of the place where you are located also govern what you can do with this work. Copyright laws in most countries are in a constant state of change. If you are outside the United States, check the laws of your country in addition to the terms of this agreement before downloading, copying, displaying, performing, distributing or creating derivative works based on this work or any other Project Gutenberg-tm work. The Foundation makes no representations concerning the copyright status of any work in any country outside the United States. 1.E. Unless you have removed all references to Project Gutenberg: 1.E.1. The following sentence, with active links to, or other immediate access to, the full Project Gutenberg-tm License must appear prominently whenever any copy of a Project Gutenberg-tm work (any work on which the phrase "Project Gutenberg" appears, or with which the phrase "Project Gutenberg" is associated) is accessed, displayed, performed, viewed, copied or distributed: This eBook is for the use of anyone anywhere at no cost and with almost no restrictions whatsoever. You may copy it, give it away or re-use it under the terms of the Project Gutenberg License included with this eBook or online at www.gutenberg.net 1.E.2. If an individual Project Gutenberg-tm electronic work is derived from the public domain (does not contain a notice indicating that it is posted with permission of the copyright holder), the work can be copied and distributed to anyone in the United States without paying any fees or charges. If you are redistributing or providing access to a work with the phrase "Project Gutenberg" associated with or appearing on the work, you must comply either with the requirements of paragraphs 1.E.1 through 1.E.7 or obtain permission for the use of the work and the Project Gutenberg-tm trademark as set forth in paragraphs 1.E.8 or 1.E.9. 1.E.3. If an individual Project Gutenberg-tm electronic work is posted with the permission of the copyright holder, your use and distribution must comply with both paragraphs 1.E.1 through 1.E.7 and any additional terms imposed by the copyright holder. Additional terms will be linked to the Project Gutenberg-tm License for all works posted with the permission of the copyright holder found at the beginning of this work. 1.E.4. Do not unlink or detach or remove the full Project Gutenberg-tm License terms from this work, or any files containing a part of this work or any other work associated with Project Gutenberg-tm. 1.E.5. Do not copy, display, perform, distribute or redistribute this electronic work, or any part of this electronic work, without prominently displaying the sentence set forth in paragraph 1.E.1 with active links or immediate access to the full terms of the Project Gutenberg-tm License. 1.E.6. You may convert to and distribute this work in any binary, compressed, marked up, nonproprietary or proprietary form, including any word processing or hypertext form. However, if you provide access to or distribute copies of a Project Gutenberg-tm work in a format other than "Plain Vanilla ASCII" or other format used in the official version posted on the official Project Gutenberg-tm web site (www.gutenberg.net), you must, at no additional cost, fee or expense to the user, provide a copy, a means of exporting a copy, or a means of obtaining a copy upon request, of the work in its original "Plain Vanilla ASCII" or other form. Any alternate format must include the full Project Gutenberg-tm License as specified in paragraph 1.E.1. 1.E.7. Do not charge a fee for access to, viewing, displaying, performing, copying or distributing any Project Gutenberg-tm works unless you comply with paragraph 1.E.8 or 1.E.9. 1.E.8. You may charge a reasonable fee for copies of or providing access to or distributing Project Gutenberg-tm electronic works provided that - You pay a royalty fee of 20% of the gross profits you derive from the use of Project Gutenberg-tm works calculated using the method you already use to calculate your applicable taxes. The fee is owed to the owner of the Project Gutenberg-tm trademark, but he has agreed to donate royalties under this paragraph to the Project Gutenberg Literary Archive Foundation. Royalty payments must be paid within 60 days following each date on which you prepare (or are legally required to prepare) your periodic tax returns. Royalty payments should be clearly marked as such and sent to the Project Gutenberg Literary Archive Foundation at the address specified in Section 4, "Information about donations to the Project Gutenberg Literary Archive Foundation." - You provide a full refund of any money paid by a user who notifies you in writing (or by e-mail) within 30 days of receipt that s/he does not agree to the terms of the full Project Gutenberg-tm License. You must require such a user to return or destroy all copies of the works possessed in a physical medium and discontinue all use of and all access to other copies of Project Gutenberg-tm works. - You provide, in accordance with paragraph 1.F.3, a full refund of any money paid for a work or a replacement copy, if a defect in the electronic work is discovered and reported to you within 90 days of receipt of the work. - You comply with all other terms of this agreement for free distribution of Project Gutenberg-tm works. 1.E.9. If you wish to charge a fee or distribute a Project Gutenberg-tm electronic work or group of works on different terms than are set forth in this agreement, you must obtain permission in writing from both the Project Gutenberg Literary Archive Foundation and Michael Hart, the owner of the Project Gutenberg-tm trademark. Contact the Foundation as set forth in Section 3 below. 1.F. 1.F.1. Project Gutenberg volunteers and employees expend considerable effort to identify, do copyright research on, transcribe and proofread public domain works in creating the Project Gutenberg-tm collection. Despite these efforts, Project Gutenberg-tm electronic works, and the medium on which they may be stored, may contain "Defects," such as, but not limited to, incomplete, inaccurate or corrupt data, transcription errors, a copyright or other intellectual property infringement, a defective or damaged disk or other medium, a computer virus, or computer codes that damage or cannot be read by your equipment. 1.F.2. LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for the "Right of Replacement or Refund" described in paragraph 1.F.3, the Project Gutenberg Literary Archive Foundation, the owner of the Project Gutenberg-tm trademark, and any other party distributing a Project Gutenberg-tm electronic work under this agreement, disclaim all liability to you for damages, costs and expenses, including legal fees. YOU AGREE THAT YOU HAVE NO REMEDIES FOR NEGLIGENCE, STRICT LIABILITY, BREACH OF WARRANTY OR BREACH OF CONTRACT EXCEPT THOSE PROVIDED IN PARAGRAPH F3. YOU AGREE THAT THE FOUNDATION, THE TRADEMARK OWNER, AND ANY DISTRIBUTOR UNDER THIS AGREEMENT WILL NOT BE LIABLE TO YOU FOR ACTUAL, DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE OR INCIDENTAL DAMAGES EVEN IF YOU GIVE NOTICE OF THE POSSIBILITY OF SUCH DAMAGE. 1.F.3. LIMITED RIGHT OF REPLACEMENT OR REFUND - If you discover a defect in this electronic work within 90 days of receiving it, you can receive a refund of the money (if any) you paid for it by sending a written explanation to the person you received the work from. If you received the work on a physical medium, you must return the medium with your written explanation. The person or entity that provided you with the defective work may elect to provide a replacement copy in lieu of a refund. If you received the work electronically, the person or entity providing it to you may choose to give you a second opportunity to receive the work electronically in lieu of a refund. If the second copy is also defective, you may demand a refund in writing without further opportunities to fix the problem. 1.F.4. Except for the limited right of replacement or refund set forth in paragraph 1.F.3, this work is provided to you 'AS-IS' WITH NO OTHER WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTIBILITY OR FITNESS FOR ANY PURPOSE. 1.F.5. Some states do not allow disclaimers of certain implied warranties or the exclusion or limitation of certain types of damages. If any disclaimer or limitation set forth in this agreement violates the law of the state applicable to this agreement, the agreement shall be interpreted to make the maximum disclaimer or limitation permitted by the applicable state law. The invalidity or unenforceability of any provision of this agreement shall not void the remaining provisions. 1.F.6. INDEMNITY - You agree to indemnify and hold the Foundation, the trademark owner, any agent or employee of the Foundation, anyone providing copies of Project Gutenberg-tm electronic works in accordance with this agreement, and any volunteers associated with the production, promotion and distribution of Project Gutenberg-tm electronic works, harmless from all liability, costs and expenses, including legal fees, that arise directly or indirectly from any of the following which you do or cause to occur: (a) distribution of this or any Project Gutenberg-tm work, (b) alteration, modification, or additions or deletions to any Project Gutenberg-tm work, and (c) any Defect you cause. Section 2. Information about the Mission of Project Gutenberg-tm Project Gutenberg-tm is synonymous with the free distribution of electronic works in formats readable by the widest variety of computers including obsolete, old, middle-aged and new computers. It exists because of the efforts of hundreds of volunteers and donations from people in all walks of life. Volunteers and financial support to provide volunteers with the assistance they need, is critical to reaching Project Gutenberg-tm's goals and ensuring that the Project Gutenberg-tm collection will remain freely available for generations to come. In 2001, the Project Gutenberg Literary Archive Foundation was created to provide a secure and permanent future for Project Gutenberg-tm and future generations. To learn more about the Project Gutenberg Literary Archive Foundation and how your efforts and donations can help, see Sections 3 and 4 and the Foundation web page at http://www.pglaf.org. Section 3. Information about the Project Gutenberg Literary Archive Foundation The Project Gutenberg Literary Archive Foundation is a non profit 501(c)(3) educational corporation organized under the laws of the state of Mississippi and granted tax exempt status by the Internal Revenue Service. The Foundation's EIN or federal tax identification number is 64-6221541. Its 501(c)(3) letter is posted at http://pglaf.org/fundraising. Contributions to the Project Gutenberg Literary Archive Foundation are tax deductible to the full extent permitted by U.S. federal laws and your state's laws. The Foundation's principal office is located at 4557 Melan Dr. S. Fairbanks, AK, 99712., but its volunteers and employees are scattered throughout numerous locations. Its business office is located at 809 North 1500 West, Salt Lake City, UT 84116, (801) 596-1887, email business@pglaf.org. Email contact links and up to date contact information can be found at the Foundation's web site and official page at http://pglaf.org For additional contact information: Dr. Gregory B. Newby Chief Executive and Director gbnewby@pglaf.org Section 4. Information about Donations to the Project Gutenberg Literary Archive Foundation Project Gutenberg-tm depends upon and cannot survive without wide spread public support and donations to carry out its mission of increasing the number of public domain and licensed works that can be freely distributed in machine readable form accessible by the widest array of equipment including outdated equipment. Many small donations ($1 to $5,000) are particularly important to maintaining tax exempt status with the IRS. The Foundation is committed to complying with the laws regulating charities and charitable donations in all 50 states of the United States. Compliance requirements are not uniform and it takes a considerable effort, much paperwork and many fees to meet and keep up with these requirements. We do not solicit donations in locations where we have not received written confirmation of compliance. To SEND DONATIONS or determine the status of compliance for any particular state visit http://pglaf.org While we cannot and do not solicit contributions from states where we have not met the solicitation requirements, we know of no prohibition against accepting unsolicited donations from donors in such states who approach us with offers to donate. International donations are gratefully accepted, but we cannot make any statements concerning tax treatment of donations received from outside the United States. U.S. laws alone swamp our small staff. Please check the Project Gutenberg Web pages for current donation methods and addresses. Donations are accepted in a number of other ways including including checks, online payments and credit card donations. To donate, please visit: http://pglaf.org/donate Section 5. General Information About Project Gutenberg-tm electronic works. Professor Michael S. Hart is the originator of the Project Gutenberg-tm concept of a library of electronic works that could be freely shared with anyone. For thirty years, he produced and distributed Project Gutenberg-tm eBooks with only a loose network of volunteer support. Project Gutenberg-tm eBooks are often created from several printed editions, all of which are confirmed as Public Domain in the U.S. unless a copyright notice is included. Thus, we do not necessarily keep eBooks in compliance with any particular paper edition. Most people start at our Web site which has the main PG search facility: http://www.gutenberg.net This Web site includes information about Project Gutenberg-tm, including how to make donations to the Project Gutenberg Literary Archive Foundation, how to help produce our new eBooks, and how to subscribe to our email newsletter to hear about new eBooks. libwebsockets-4.3.5/minimal-examples/api-tests/api-test-gencrypto/000077500000000000000000000000001476025525100253035ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/api-tests/api-test-gencrypto/CMakeLists.txt000066400000000000000000000015031476025525100300420ustar00rootroot00000000000000project(lws-api-test-gencrypto C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-api-test-gencrypto) set(SRCS main.c lws-genaes.c lws-genec.c) set(requirements 1) require_lws_config(LWS_WITH_GENCRYPTO 1 requirements) require_lws_config(LWS_WITH_JOSE 1 requirements) require_lws_config(USE_WOLFSSL 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) add_test(NAME api-test-gencrypto COMMAND lws-api-test-gencrypto) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/api-tests/api-test-gencrypto/README.md000066400000000000000000000012441476025525100265630ustar00rootroot00000000000000# lws api test gencrypto Demonstrates how to use and performs selftests for Generic Crypto, which works the same whether the tls backend is OpenSSL or mbedTLS ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 ``` $ ./lws-api-test-gencrypto [2018/12/05 08:30:27:1342] USER: LWS gencrypto apis tests [2018/12/05 08:30:27:1343] NOTICE: Creating Vhost 'default' (serving disabled), 1 protocols, IPv6 off [2018/12/05 08:30:27:1343] NOTICE: created client ssl context for default [2018/12/05 08:30:27:1344] NOTICE: test_genaes: selftest OK [2018/12/05 08:30:27:1344] USER: Completed: PASS ``` libwebsockets-4.3.5/minimal-examples/api-tests/api-test-gencrypto/lws-genaes.c000066400000000000000000000530331476025525100275200ustar00rootroot00000000000000/* * lws-api-test-gencrypto - lws-genaes * * Written in 2010-2018 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include #if (defined(LWS_WITH_MBEDTLS) && (!defined(MBEDTLS_CONFIG_H) || defined(MBEDTLS_CIPHER_MODE_CBC))) || \ (!defined(LWS_WITH_MBEDTLS) && defined(LWS_HAVE_EVP_aes_128_cbc)) static const uint8_t /* * produced with (plaintext.txt contains "test plaintext\0\0") * * openssl enc -aes256 \ * -K "0123456789abcdeffedcba98765432100123456789abcdeffedcba9876543210" \ * -iv "0123456789abcdeffedcba9876543210" * -in plaintext.txt -out out.enc * */ *cbc256 = (uint8_t *)"test plaintext\0\0", cbc256_enc[] = { 0x2b, 0x5d, 0xb2, 0xa8, 0x5a, 0x5a, 0xf4, 0x2e, 0xf7, 0xf9, 0xc5, 0x3c, 0x73, 0xef, 0x40, 0x88, }, cbc256_iv[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, }, cbc256_key[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, } ; static int test_genaes_cbc(void) { struct lws_genaes_ctx ctx; struct lws_gencrypto_keyelem e; uint8_t res[32], res1[32]; /* * As part of a jwk, these are allocated. But here we just use one as * a wrapper on a static binary key. */ e.buf = (uint8_t *)cbc256_key; e.len = sizeof(cbc256_key); if (lws_genaes_create(&ctx, LWS_GAESO_ENC, LWS_GAESM_CBC, &e, 0, NULL)) { lwsl_err("%s: lws_genaes_create failed\n", __func__); return 1; } if (lws_genaes_crypt(&ctx, cbc256, 16, res, (uint8_t *)cbc256_iv, NULL, NULL, 0)) { lwsl_err("%s: lws_genaes_crypt failed\n", __func__); goto bail; } if (lws_genaes_destroy(&ctx, NULL, 0)) { lwsl_err("%s: lws_genaes_destroy enc failed\n", __func__); return -1; } if (lws_timingsafe_bcmp(cbc256_enc, res, 16)) { lwsl_err("%s: lws_genaes_crypt encoding mismatch\n", __func__); lwsl_hexdump_notice(res, 16); return -1; } if (lws_genaes_create(&ctx, LWS_GAESO_DEC, LWS_GAESM_CBC, &e, 0, NULL)) { lwsl_err("%s: lws_genaes_create dec failed\n", __func__); return -1; } if (lws_genaes_crypt(&ctx, res, 16, res1, (uint8_t *)cbc256_iv, NULL, NULL, 0)) { lwsl_err("%s: lws_genaes_crypt dec failed\n", __func__); goto bail; } if (lws_genaes_destroy(&ctx, NULL, 0)) { lwsl_err("%s: lws_genaes_destroy dec failed\n", __func__); lwsl_hexdump_notice(res1, 16); return -1; } if (lws_timingsafe_bcmp(cbc256, res1, 16)) { lwsl_err("%s: lws_genaes_crypt decoding mismatch\n", __func__); lwsl_hexdump_notice(res, 16); return -1; } return 0; bail: lws_genaes_destroy(&ctx, NULL, 0); return -1; } #endif #if (defined(LWS_WITH_MBEDTLS) && (!defined(MBEDTLS_CONFIG_H) || defined(MBEDTLS_CIPHER_MODE_CFB))) || \ (!defined(LWS_WITH_MBEDTLS) && defined(LWS_HAVE_EVP_aes_128_cfb128)) static const uint8_t /* * produced with (plaintext.txt contains "test plaintext\0\0") * * openssl enc -aes-128-cfb \ * -K "0123456789abcdeffedcba9876543210" \ * -iv "0123456789abcdeffedcba9876543210" * -in plaintext.txt -out out.enc * */ *cfb128 = (uint8_t *)"test plaintext\0\0", cfb128_enc[] = { 0xd2, 0x11, 0x86, 0xd7, 0xa9, 0x55, 0x59, 0x04, 0x4f, 0x63, 0x7c, 0xb9, 0xc6, 0xa1, 0xc9, 0x71 }, cfb128_iv[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, }, cfb128_key[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, }; static int test_genaes_cfb128(void) { struct lws_genaes_ctx ctx; struct lws_gencrypto_keyelem e; uint8_t res[32], res1[32]; size_t iv_off = 0; e.buf = (uint8_t *)cfb128_key; e.len = sizeof(cfb128_key); if (lws_genaes_create(&ctx, LWS_GAESO_ENC, LWS_GAESM_CFB128, &e, 0, NULL)) { lwsl_err("%s: lws_genaes_create failed\n", __func__); return 1; } if (lws_genaes_crypt(&ctx, cfb128, 16, res, (uint8_t *)cfb128_iv, NULL, &iv_off, 0)) { lwsl_err("%s: lws_genaes_crypt failed\n", __func__); goto bail; } if (lws_genaes_destroy(&ctx, NULL, 0)) { lwsl_err("%s: lws_genaes_destroy failed\n", __func__); return -1; } if (lws_timingsafe_bcmp(cfb128_enc, res, 16)) { lwsl_err("%s: lws_genaes_crypt encoding mismatch\n", __func__); lwsl_hexdump_notice(res, 16); return -1; } iv_off = 0; if (lws_genaes_create(&ctx, LWS_GAESO_DEC, LWS_GAESM_CFB128, &e, 0, NULL)) { lwsl_err("%s: lws_genaes_create dec failed\n", __func__); return -1; } if (lws_genaes_crypt(&ctx, res, 16, res1, (uint8_t *)cfb128_iv, NULL, &iv_off, 0)) { lwsl_err("%s: lws_genaes_crypt dec failed\n", __func__); goto bail; } if (lws_genaes_destroy(&ctx, NULL, 0)) { lwsl_err("%s: lws_genaes_destroy failed\n", __func__); return -1; } if (lws_timingsafe_bcmp(cfb128, res1, 16)) { lwsl_err("%s: lws_genaes_crypt decoding mismatch\n", __func__); lwsl_hexdump_notice(res1, 16); return -1; } return 0; bail: lws_genaes_destroy(&ctx, NULL, 0); return -1; } #endif #if (defined(LWS_WITH_MBEDTLS) && (!defined(MBEDTLS_CONFIG_H) || defined(MBEDTLS_CIPHER_MODE_CFB))) || \ (!defined(LWS_WITH_MBEDTLS) && defined(LWS_HAVE_EVP_aes_128_cfb8)) static const uint8_t /* * produced with (plaintext.txt contains "test plaintext\0\0") * * openssl enc -aes-128-cfb8 \ * -K "0123456789abcdeffedcba9876543210" \ * -iv "0123456789abcdeffedcba9876543210" * -in plaintext.txt -out out.enc * */ *cfb8 = (uint8_t *)"test plaintext\0\0", cfb8_enc[] = { 0xd2, 0x91, 0x06, 0x2d, 0x1b, 0x1e, 0x9b, 0x39, 0xa6, 0x65, 0x8e, 0xbe, 0x68, 0x32, 0x3d, 0xab }, cfb8_iv[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, }, cfb8_key[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, }; static int test_genaes_cfb8(void) { struct lws_genaes_ctx ctx; struct lws_gencrypto_keyelem e; uint8_t res[32], res1[32]; e.buf = (uint8_t *)cfb8_key; e.len = sizeof(cfb8_key); if (lws_genaes_create(&ctx, LWS_GAESO_ENC, LWS_GAESM_CFB8, &e, 0, NULL)) { lwsl_err("%s: lws_genaes_create failed\n", __func__); return 1; } if (lws_genaes_crypt(&ctx, cfb8, 16, res, (uint8_t *)cfb8_iv, NULL, NULL, 0)) { lwsl_err("%s: lws_genaes_crypt failed\n", __func__); goto bail; } if (lws_genaes_destroy(&ctx, NULL, 0)) { lwsl_err("%s: lws_genaes_destroy failed\n", __func__); return -1; } if (lws_timingsafe_bcmp(cfb8_enc, res, 16)) { lwsl_err("%s: lws_genaes_crypt encoding mismatch\n", __func__); lwsl_hexdump_notice(res, 16); return -1; } if (lws_genaes_create(&ctx, LWS_GAESO_DEC, LWS_GAESM_CFB8, &e, 0, NULL)) { lwsl_err("%s: lws_genaes_create dec failed\n", __func__); return -1; } if (lws_genaes_crypt(&ctx, res, 16, res1, (uint8_t *)cfb8_iv, NULL, NULL, 0)) { lwsl_err("%s: lws_genaes_crypt dec failed\n", __func__); goto bail; } if (lws_genaes_destroy(&ctx, NULL, 0)) { lwsl_err("%s: lws_genaes_destroy failed\n", __func__); return -1; } if (lws_timingsafe_bcmp(cfb8, res1, 16)) { lwsl_err("%s: lws_genaes_crypt decoding mismatch\n", __func__); lwsl_hexdump_notice(res1, 16); return -1; } return 0; bail: lws_genaes_destroy(&ctx, NULL, 0); return -1; } #endif #if (defined(LWS_WITH_MBEDTLS) && (!defined(MBEDTLS_CONFIG_H) || defined(MBEDTLS_CIPHER_MODE_CTR))) || \ (!defined(LWS_WITH_MBEDTLS) && defined(LWS_HAVE_EVP_aes_128_ctr)) static const uint8_t /* * produced with (plaintext.txt contains "test plaintext\0\0") * * openssl enc -aes-128-ctr \ * -K "0123456789abcdeffedcba9876543210" \ * -iv "0123456789abcdeffedcba9876543210" * -in plaintext.txt -out out.enc * */ *ctr = (uint8_t *)"test plaintext\0\0", ctr_enc[] = { 0xd2, 0x11, 0x86, 0xd7, 0xa9, 0x55, 0x59, 0x04, 0x4f, 0x63, 0x7c, 0xb9, 0xc6, 0xa1, 0xc9, 0x71 }, ctr_iv[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, }, ctr_key[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, }; static int test_genaes_ctr(void) { uint8_t nonce_counter[16], sb[16]; struct lws_genaes_ctx ctx; struct lws_gencrypto_keyelem e; uint8_t res[32], res1[32]; size_t nc_off = 0; e.buf = (uint8_t *)ctr_key; e.len = sizeof(ctr_key); memset(sb, 0, sizeof(nonce_counter)); memcpy(nonce_counter, ctr_iv, sizeof(ctr_iv)); if (lws_genaes_create(&ctx, LWS_GAESO_ENC, LWS_GAESM_CTR, &e, 0, NULL)) { lwsl_err("%s: lws_genaes_create failed\n", __func__); return 1; } if (lws_genaes_crypt(&ctx, ctr, 16, res, nonce_counter, sb, &nc_off, 0)) { lwsl_err("%s: lws_genaes_crypt failed\n", __func__); goto bail; } if (lws_genaes_destroy(&ctx, NULL, 0)) { lwsl_err("%s: lws_genaes_destroy failed\n", __func__); return -1; } if (lws_timingsafe_bcmp(ctr_enc, res, 16)) { lwsl_err("%s: lws_genaes_crypt encoding mismatch\n", __func__); lwsl_hexdump_notice(res, 16); return -1; } nc_off = 0; memset(sb , 0, sizeof(nonce_counter)); memcpy(nonce_counter, ctr_iv, sizeof(ctr_iv)); if (lws_genaes_create(&ctx, LWS_GAESO_DEC, LWS_GAESM_CTR, &e, 0, NULL)) { lwsl_err("%s: lws_genaes_create dec failed\n", __func__); return -1; } if (lws_genaes_crypt(&ctx, res, 16, res1, nonce_counter, sb, &nc_off, 0)) { lwsl_err("%s: lws_genaes_crypt dec failed\n", __func__); goto bail; } if (lws_genaes_destroy(&ctx, NULL, 0)) { lwsl_err("%s: lws_genaes_destroy failed\n", __func__); return -1; } if (lws_timingsafe_bcmp(ctr, res1, 16)) { lwsl_err("%s: lws_genaes_crypt decoding mismatch\n", __func__); lwsl_hexdump_notice(res1, 16); return -1; } lws_explicit_bzero(sb, sizeof(sb)); return 0; bail: lws_genaes_destroy(&ctx, NULL, 0); return -1; } #endif #if (defined(LWS_WITH_MBEDTLS)) || \ (!defined(LWS_WITH_MBEDTLS) && defined(LWS_HAVE_EVP_aes_128_ecb)) static const uint8_t /* * produced with (plaintext.txt contains "test plaintext\0\0") * * openssl enc -aes-128-ecb \ * -K "0123456789abcdeffedcba9876543210" \ * -in plaintext.txt -out out.enc * */ *ecb = (uint8_t *)"test plaintext\0\0", ecb_enc[] = { 0xf3, 0xe5, 0x6c, 0x80, 0x3a, 0xf1, 0xc4, 0xa0, 0x7e, 0xdf, 0x86, 0x0f, 0x6d, 0xca, 0x5d, 0x36, 0x17, 0x22, 0x37, 0x42, 0x47, 0x41, 0x67, 0x7d, 0x99, 0x25, 0x02, 0x6b, 0x6b, 0x8f, 0x9c, 0x7f }, ecb_key[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, }; static int test_genaes_ecb(void) { struct lws_genaes_ctx ctx; struct lws_gencrypto_keyelem e; uint8_t res[32], res1[32]; /* * As part of a jwk, these are allocated. But here we just use one as * a wrapper on a static binary key. */ e.buf = (uint8_t *)ecb_key; e.len = sizeof(ecb_key); if (lws_genaes_create(&ctx, LWS_GAESO_ENC, LWS_GAESM_ECB, &e, 0, NULL)) { lwsl_err("%s: lws_genaes_create failed\n", __func__); return 1; } if (lws_genaes_crypt(&ctx, ecb, 16, res, NULL, NULL, NULL, 0)) { lwsl_err("%s: lws_genaes_crypt failed\n", __func__); goto bail; } if (lws_genaes_destroy(&ctx, NULL, 0)) { lwsl_err("%s: lws_genaes_destroy failed\n", __func__); return -1; } if (lws_timingsafe_bcmp(ecb_enc, res, 16)) { lwsl_err("%s: lws_genaes_crypt encoding mismatch\n", __func__); lwsl_hexdump_notice(res, 16); return -1; } if (lws_genaes_create(&ctx, LWS_GAESO_DEC, LWS_GAESM_ECB, &e, 0, NULL)) { lwsl_err("%s: lws_genaes_create dec failed\n", __func__); return -1; } if (lws_genaes_crypt(&ctx, res, 16, res1, NULL, NULL, NULL, 0)) { lwsl_err("%s: lws_genaes_crypt dec failed\n", __func__); goto bail; } if (lws_genaes_destroy(&ctx, NULL, 0)) { lwsl_err("%s: lws_genaes_destroy failed\n", __func__); return -1; } if (lws_timingsafe_bcmp(ecb, res1, 16)) { lwsl_err("%s: lws_genaes_crypt decoding mismatch\n", __func__); lwsl_hexdump_notice(res, 16); return -1; } return 0; bail: lws_genaes_destroy(&ctx, NULL, 0); return -1; } #endif #if (defined(LWS_WITH_MBEDTLS) && (!defined(MBEDTLS_CONFIG_H) || defined(MBEDTLS_CIPHER_MODE_OFB))) || \ (!defined(LWS_WITH_MBEDTLS) && defined(LWS_HAVE_EVP_aes_128_ofb)) static const uint8_t /* * produced with (plaintext.txt contains "test plaintext\0\0") * * openssl enc -aes-128-ofb \ * -K "0123456789abcdeffedcba98765432100123456789abcdeffedcba9876543210" \ * -iv "0123456789abcdeffedcba9876543210" * -in plaintext.txt -out out.enc * */ *ofb = (uint8_t *)"test plaintext\0\0", ofb_enc[] = { /* !!! ugh... openssl app produces this... */ // 0xd2, 0x11, 0x86, 0xd7, 0xa9, 0x55, 0x59, 0x04, // 0x4f, 0x63, 0x7c, 0xb9, 0xc6, 0xa1, 0xc9, 0x71, /* but both OpenSSL and mbedTLS produce this */ 0x11, 0x33, 0x6D, 0xFC, 0x88, 0x4C, 0x28, 0xBA, 0xD0, 0xF2, 0x6C, 0xBC, 0xDE, 0x4A, 0x56, 0x20 }, ofb_iv[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, }, ofb_key[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, } ; static int test_genaes_ofb(void) { struct lws_genaes_ctx ctx; struct lws_gencrypto_keyelem e; uint8_t res[32], res1[32]; size_t iv_off = 0; e.buf = (uint8_t *)ofb_key; e.len = sizeof(ofb_key); if (lws_genaes_create(&ctx, LWS_GAESO_ENC, LWS_GAESM_OFB, &e, 0, NULL)) { lwsl_err("%s: lws_genaes_create failed\n", __func__); return 1; } if (lws_genaes_crypt(&ctx, ofb, 16, res, (uint8_t *)ofb_iv, NULL, &iv_off, 0)) { lwsl_err("%s: lws_genaes_crypt failed\n", __func__); goto bail; } if (lws_genaes_destroy(&ctx, NULL, 0)) { lwsl_err("%s: lws_genaes_destroy failed\n", __func__); return -1; } if (lws_timingsafe_bcmp(ofb_enc, res, 16)) { lwsl_err("%s: lws_genaes_crypt encoding mismatch\n", __func__); lwsl_hexdump_notice(res, 16); return -1; } iv_off = 0; if (lws_genaes_create(&ctx, LWS_GAESO_DEC, LWS_GAESM_OFB, &e, 0, NULL)) { lwsl_err("%s: lws_genaes_create dec failed\n", __func__); return -1; } if (lws_genaes_crypt(&ctx, res, 16, res1, (uint8_t *)ofb_iv, NULL, &iv_off, 0)) { lwsl_err("%s: lws_genaes_crypt dec failed\n", __func__); goto bail; } if (lws_genaes_destroy(&ctx, NULL, 0)) { lwsl_err("%s: lws_genaes_destroy failed\n", __func__); return -1; } if (lws_timingsafe_bcmp(ofb, res1, 16)) { lwsl_err("%s: lws_genaes_crypt decoding mismatch\n", __func__); lwsl_hexdump_notice(res, 16); return -1; } return 0; bail: lws_genaes_destroy(&ctx, NULL, 0); return -1; } #endif #if (defined(LWS_WITH_MBEDTLS) && (!defined(MBEDTLS_CONFIG_H) || defined(MBEDTLS_CIPHER_MODE_XTS))) || \ (!defined(LWS_WITH_MBEDTLS) && defined(LWS_HAVE_EVP_aes_128_xts)) static const uint8_t /* * Fedora openssl tool doesn't support xts... this data produced * by testing on mbedtls + OpenSSL and getting the same result * * NOTICE that xts requires a double-length key... OpenSSL now checks * the key for duplication so we use a random key */ *xts = (uint8_t *)"test plaintext\0\0", xts_enc[] = { 0x87, 0x83, 0x20, 0x8B, 0x15, 0x89, 0xA1, 0x13, 0xDC, 0xEA, 0x82, 0xB6, 0xFF, 0x8D, 0x76, 0x3A }, xts_key[] = { 0xa4, 0xd6, 0xa2, 0x1a, 0x3b, 0x34, 0x34, 0x43, 0x9a, 0xe2, 0x6a, 0x01, 0x1c, 0x73, 0x80, 0x3b, 0xdd, 0xf6, 0xd4, 0x37, 0x5e, 0x0e, 0x1c, 0x72, 0x8e, 0xe5, 0x18, 0x69, 0xfd, 0x08, 0x40, 0x2b, 0x98, 0xf9, 0x75, 0xa8, 0x36, 0xd5, 0x0f, 0xa2, 0x20, 0x04, 0x43, 0xa7, 0x3a, 0xa6, 0x4a, 0xdc, 0xe9, 0x54, 0x50, 0xfa, 0x38, 0xad, 0x6d, 0x96, 0x5f, 0x31, 0x9e, 0xcd, 0x33, 0x08, 0xa0, 0x44 } ; static int test_genaes_xts(void) { struct lws_genaes_ctx ctx; struct lws_gencrypto_keyelem e; uint8_t res[32], res1[32], data_unit[16]; memset(data_unit, 0, sizeof(data_unit)); e.buf = (uint8_t *)xts_key; e.len = sizeof(xts_key); if (lws_genaes_create(&ctx, LWS_GAESO_ENC, LWS_GAESM_XTS, &e, 0, NULL)) { lwsl_err("%s: lws_genaes_create failed\n", __func__); return 1; } if (lws_genaes_crypt(&ctx, xts, 16, res, data_unit, NULL, NULL, 0)) { lwsl_err("%s: lws_genaes_crypt failed\n", __func__); goto bail; } if (lws_genaes_destroy(&ctx, NULL, 0)) { lwsl_err("%s: lws_genaes_destroy failed\n", __func__); return -1; } if (lws_timingsafe_bcmp(xts_enc, res, 16)) { lwsl_err("%s: lws_genaes_crypt encoding mismatch\n", __func__); lwsl_hexdump_notice(res, 16); return -1; } if (lws_genaes_create(&ctx, LWS_GAESO_DEC, LWS_GAESM_XTS, &e, 0, NULL)) { lwsl_err("%s: lws_genaes_create dec failed\n", __func__); return -1; } if (lws_genaes_crypt(&ctx, res, 16, res1, data_unit, NULL, NULL, 0)) { lwsl_err("%s: lws_genaes_crypt dec failed\n", __func__); goto bail; } if (lws_genaes_destroy(&ctx, NULL, 0)) { lwsl_err("%s: lws_genaes_destroy failed\n", __func__); return -1; } if (lws_timingsafe_bcmp(xts, res1, 16)) { lwsl_err("%s: lws_genaes_crypt decoding mismatch\n", __func__); lwsl_hexdump_notice(res, 16); return -1; } return 0; bail: lws_genaes_destroy(&ctx, NULL, 0); return -1; } #endif static const uint8_t /* * https://csrc.nist.gov/CSRC/media/Projects/ * Cryptographic-Algorithm-Validation-Program/ * documents/mac/gcmtestvectors.zip */ gcm_ct[] = { 0xf7, 0x26, 0x44, 0x13, 0xa8, 0x4c, 0x0e, 0x7c, 0xd5, 0x36, 0x86, 0x7e, 0xb9, 0xf2, 0x17, 0x36 }, gcm_iv[] = { 0x99, 0xaa, 0x3e, 0x68, 0xed, 0x81, 0x73, 0xa0, 0xee, 0xd0, 0x66, 0x84 }, gcm_key[] = { 0xee, 0xbc, 0x1f, 0x57, 0x48, 0x7f, 0x51, 0x92, 0x1c, 0x04, 0x65, 0x66, 0x5f, 0x8a, 0xe6, 0xd1, 0x65, 0x8b, 0xb2, 0x6d, 0xe6, 0xf8, 0xa0, 0x69, 0xa3, 0x52, 0x02, 0x93, 0xa5, 0x72, 0x07, 0x8f }, gcm_pt[] = { 0xf5, 0x6e, 0x87, 0x05, 0x5b, 0xc3, 0x2d, 0x0e, 0xeb, 0x31, 0xb2, 0xea, 0xcc, 0x2b, 0xf2, 0xa5 }, gcm_aad[] = { 0x4d, 0x23, 0xc3, 0xce, 0xc3, 0x34, 0xb4, 0x9b, 0xdb, 0x37, 0x0c, 0x43, 0x7f, 0xec, 0x78, 0xde }, gcm_tag[] = { 0x67, 0xba, 0x05, 0x10, 0x26, 0x2a, 0xe4, 0x87, 0xd7, 0x37, 0xee, 0x62, 0x98, 0xf7, 0x7e, 0x0c }; static int test_genaes_gcm(void) { uint8_t res[sizeof(gcm_ct)], tag[sizeof(gcm_tag)]; struct lws_genaes_ctx ctx; struct lws_gencrypto_keyelem e; size_t iv_off = 0; e.buf = (uint8_t *)gcm_key; e.len = sizeof(gcm_key); /* Encrypt */ if (lws_genaes_create(&ctx, LWS_GAESO_ENC, LWS_GAESM_GCM, &e, 0, NULL)) { lwsl_err("%s: lws_genaes_create failed\n", __func__); return 1; } /* first we set the iv and aad */ iv_off = sizeof(gcm_iv); if (lws_genaes_crypt(&ctx, gcm_aad, sizeof(gcm_aad), NULL, (uint8_t *)gcm_iv, (uint8_t *)gcm_tag, &iv_off, sizeof(gcm_tag))) { lwsl_err("%s: lws_genaes_crypt 1 failed\n", __func__); goto bail; } if (lws_genaes_crypt(&ctx, gcm_pt, sizeof(gcm_pt), res, NULL, NULL, NULL, 0)) { lwsl_err("%s: lws_genaes_crypt 2 failed\n", __func__); goto bail; } if (lws_genaes_destroy(&ctx, tag, sizeof(tag))) { lwsl_err("%s: lws_genaes_destroy enc failed\n", __func__); return -1; } if (lws_timingsafe_bcmp(gcm_ct, res, sizeof(gcm_ct))) { lwsl_err("%s: lws_genaes_crypt encoding mismatch\n", __func__); lwsl_hexdump_notice(res, sizeof(gcm_ct)); return -1; } /* Decrypt */ if (lws_genaes_create(&ctx, LWS_GAESO_DEC, LWS_GAESM_GCM, &e, 0, NULL)) { lwsl_err("%s: lws_genaes_create failed\n", __func__); return 1; } iv_off = sizeof(gcm_iv); /* initial call sets iv + aad + tag */ if (lws_genaes_crypt(&ctx, gcm_aad, sizeof(gcm_aad), NULL, (uint8_t *)gcm_iv, (uint8_t *)gcm_tag, &iv_off, sizeof(gcm_tag))) { lwsl_err("%s: lws_genaes_crypt 1 failed\n", __func__); goto bail; } if (lws_genaes_crypt(&ctx, gcm_ct, sizeof(gcm_ct), res, NULL, NULL, NULL, 0)) { lwsl_err("%s: lws_genaes_crypt 2 failed\n", __func__); goto bail; } if (lws_genaes_destroy(&ctx, tag, sizeof(tag))) { lwsl_err("%s: lws_genaes_destroy dec failed\n", __func__); return -1; } if (lws_timingsafe_bcmp(gcm_pt, res, sizeof(gcm_pt))) { lwsl_err("%s: lws_genaes_crypt decoding mismatch\n", __func__); lwsl_hexdump_notice(res, sizeof(gcm_ct)); return -1; } return 0; bail: lws_genaes_destroy(&ctx, NULL, 0); return -1; } int test_genaes(struct lws_context *context) { #if (defined(LWS_WITH_MBEDTLS) && (!defined(MBEDTLS_CONFIG_H) || defined(MBEDTLS_CIPHER_MODE_CBC))) || \ (!defined(LWS_WITH_MBEDTLS) && defined(LWS_HAVE_EVP_aes_128_cbc)) if (test_genaes_cbc()) goto bail; #endif #if (defined(LWS_WITH_MBEDTLS) && (!defined(MBEDTLS_CONFIG_H) || defined(MBEDTLS_CIPHER_MODE_CFB))) || \ (!defined(LWS_WITH_MBEDTLS) && defined(LWS_HAVE_EVP_aes_128_cfb128)) if (test_genaes_cfb128()) goto bail; #endif #if (defined(LWS_WITH_MBEDTLS) && (!defined(MBEDTLS_CONFIG_H) || defined(MBEDTLS_CIPHER_MODE_CFB))) || \ (!defined(LWS_WITH_MBEDTLS) && defined(LWS_HAVE_EVP_aes_128_cfb8)) if (test_genaes_cfb8()) goto bail; #endif #if (defined(LWS_WITH_MBEDTLS) && (!defined(MBEDTLS_CONFIG_H) || defined(MBEDTLS_CIPHER_MODE_CTR))) || \ (!defined(LWS_WITH_MBEDTLS) && defined(LWS_HAVE_EVP_aes_128_ctr)) if (test_genaes_ctr()) goto bail; #endif #if (defined(LWS_WITH_MBEDTLS)) || \ (!defined(LWS_WITH_MBEDTLS) && defined(LWS_HAVE_EVP_aes_128_ecb)) if (test_genaes_ecb()) goto bail; #endif #if (defined(LWS_WITH_MBEDTLS) && (!defined(MBEDTLS_CONFIG_H) || defined(MBEDTLS_CIPHER_MODE_OFB))) || \ (!defined(LWS_WITH_MBEDTLS) && defined(LWS_HAVE_EVP_aes_128_ofb)) if (test_genaes_ofb()) goto bail; #endif #if (defined(LWS_WITH_MBEDTLS) && (!defined(MBEDTLS_CONFIG_H) || defined(MBEDTLS_CIPHER_MODE_XTS))) || \ (!defined(LWS_WITH_MBEDTLS) && defined(LWS_HAVE_EVP_aes_128_xts)) if (test_genaes_xts()) goto bail; #endif if (test_genaes_gcm()) goto bail; /* end */ lwsl_notice("%s: selftest OK\n", __func__); return 0; bail: lwsl_err("%s: selftest failed ++++++++++++++++++++\n", __func__); return 1; } libwebsockets-4.3.5/minimal-examples/api-tests/api-test-gencrypto/lws-genec.c000066400000000000000000000054611476025525100273410ustar00rootroot00000000000000/* * lws-api-test-gencrypto - lws-genec * * Written in 2010-2018 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include static const uint8_t *jwk_ec1 = (uint8_t *) "{\"kty\":\"EC\"," "\"crv\":\"P-256\"," "\"x\":\"MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4\"," "\"y\":\"4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM\"," "\"d\":\"870MB6gfuTJ4HtUnUvYMyJpr5eUZNP4Bk43bVdj3eAE\"," "\"use\":\"enc\"," "\"kid\":\"rfc7517-A.2-example private key\"}" ; static int test_genec1(struct lws_context *context) { struct lws_genec_ctx ctx; struct lws_jwk jwk; struct lws_gencrypto_keyelem el[LWS_GENCRYPTO_EC_KEYEL_COUNT]; //uint8_t res[32], res1[32]; int n; memset(el, 0, sizeof(el)); if (lws_genecdh_create(&ctx, context, NULL)) return 1; /* let's create a new key */ if (lws_genecdh_new_keypair(&ctx, LDHS_OURS, "P-256", el)) { lwsl_err("%s: lws_genec_new_keypair failed\n", __func__); return 1; } lws_genec_dump(el); lws_genec_destroy_elements(el); lws_genec_destroy(&ctx); if (lws_jwk_import(&jwk, NULL, NULL, (char *)jwk_ec1, strlen((char *)jwk_ec1)) < 0) { lwsl_notice("Failed to decode JWK test key\n"); return 1; } lws_jwk_dump(&jwk); if (jwk.kty != LWS_GENCRYPTO_KTY_EC) { lws_jwk_destroy(&jwk); lwsl_err("%s: jwk is not an EC key\n", __func__); return 1; } if (lws_genecdh_create(&ctx, context, NULL)) return 1; n = lws_genecdh_set_key(&ctx, jwk.e, LDHS_OURS); if (n) { lws_jwk_destroy(&jwk); lwsl_err("%s: lws_genec_create failed: %d\n", __func__, n); return 1; } #if 0 if (lws_genec_crypt(&ctx, cbc256, 16, res, (uint8_t *)cbc256_iv, NULL, NULL)) { lwsl_err("%s: lws_genec_crypt failed\n", __func__); goto bail; } if (lws_timingsafe_bcmp(cbc256_enc, res, 16)) { lwsl_err("%s: lws_genec_crypt encoding mismatch\n", __func__); lwsl_hexdump_notice(res, 16); goto bail; } lws_genec_destroy(&ctx); if (lws_genec_create(&ctx, LWS_GAESO_DEC, LWS_GAESM_CBC, &e, NULL)) { lwsl_err("%s: lws_genec_create dec failed\n", __func__); return -1; } if (lws_genec_crypt(&ctx, res, 16, res1, (uint8_t *)cbc256_iv, NULL, NULL)) { lwsl_err("%s: lws_genec_crypt dec failed\n", __func__); goto bail; } if (lws_timingsafe_bcmp(cbc256, res1, 16)) { lwsl_err("%s: lws_genec_crypt decoding mismatch\n", __func__); lwsl_hexdump_notice(res, 16); goto bail; } #endif lws_genec_destroy(&ctx); lws_jwk_destroy(&jwk); return 0; //bail: // lws_genec_destroy(&ctx); // return -1; } int test_genec(struct lws_context *context) { if (test_genec1(context)) goto bail; /* end */ lwsl_notice("%s: selftest OK\n", __func__); return 0; bail: lwsl_err("%s: selftest failed ++++++++++++++++++++\n", __func__); return 1; } libwebsockets-4.3.5/minimal-examples/api-tests/api-test-gencrypto/main.c000066400000000000000000000021611476025525100263730ustar00rootroot00000000000000/* * lws-api-test-gencrypto * * Written in 2010-2018 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include int test_genaes(struct lws_context *context); int test_genec(struct lws_context *context); int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int result = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS gencrypto apis tests\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ #if defined(LWS_WITH_NETWORK) info.port = CONTEXT_PORT_NO_LISTEN; #endif info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } result |= test_genaes(context); result |= test_genec(context); lwsl_user("Completed: %s\n", result ? "FAIL" : "PASS"); lws_context_destroy(context); return result; } libwebsockets-4.3.5/minimal-examples/api-tests/api-test-jose/000077500000000000000000000000001476025525100242315ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/api-tests/api-test-jose/CMakeLists.txt000066400000000000000000000014301476025525100267670ustar00rootroot00000000000000project(lws-api-test-jose C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-api-test-jose) set(SRCS main.c jwk.c jws.c jwe.c) set(requirements 1) require_lws_config(LWS_WITH_JOSE 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (NOT (LWS_WITH_MBEDTLS AND NOT LWS_HAVE_mbedtls_internal_aes_encrypt)) add_test(NAME api-test-jose COMMAND lws-api-test-jose) endif() if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/api-tests/api-test-jose/README.md000066400000000000000000000005421476025525100255110ustar00rootroot00000000000000# lws api test lwsac Demonstrates how to use and performs selftests for lwsac ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 ``` $ ./lws-api-test-lwsac [2018/10/09 09:14:17:4834] USER: LWS API selftest: lwsac [2018/10/09 09:14:17:4835] USER: Completed: PASS ``` libwebsockets-4.3.5/minimal-examples/api-tests/api-test-jose/jwe.c000066400000000000000000002341451476025525100251730ustar00rootroot00000000000000/* * lws-api-test-jose - RFC7516 jwe tests * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include /* * These are the inputs and outputs from the worked example in RFC7516 * Appendix A.1 {"alg":"RSA-OAEP","enc":"A256GCM"} */ static char *ex_a1_ptext = "The true sign of intelligence is not knowledge but imagination.", *ex_a1_compact = "eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkEyNTZHQ00ifQ." "OKOawDo13gRp2ojaHV7LFpZcgV7T6DVZKTyKOMTYUmKoTCVJRgckCL9kiMT03JGe" "ipsEdY3mx_etLbbWSrFr05kLzcSr4qKAq7YN7e9jwQRb23nfa6c9d-StnImGyFDb" "Sv04uVuxIp5Zms1gNxKKK2Da14B8S4rzVRltdYwam_lDp5XnZAYpQdb76FdIKLaV" "mqgfwX7XWRxv2322i-vDxRfqNzo_tETKzpVLzfiwQyeyPGLBIO56YJ7eObdv0je8" "1860ppamavo35UgoRdbYaBcoh9QcfylQr66oc6vFWXRcZ_ZT2LawVCWTIy3brGPi" "6UklfCpIMfIjf7iGdXKHzg." "48V1_ALb6US04U3b." "5eym8TW_c8SuK0ltJ3rpYIzOeDQz7TALvtu6UG9oMo4vpzs9tX_EFShS8iB7j6ji" "SdiwkIr3ajwQzaBtQD_A." "XFBoMYUZodetZdvTiFvSkQ", *ex_a1_jwk_json = "{\"kty\":\"RSA\"," "\"n\":\"oahUIoWw0K0usKNuOR6H4wkf4oBUXHTxRvgb48E-BVvxkeDNjbC4he8rUW" "cJoZmds2h7M70imEVhRU5djINXtqllXI4DFqcI1DgjT9LewND8MW2Krf3S" "psk_ZkoFnilakGygTwpZ3uesH-PFABNIUYpOiN15dsQRkgr0vEhxN92i2a" "sbOenSZeyaxziK72UwxrrKoExv6kc5twXTq4h-QChLOln0_mtUZwfsRaMS" "tPs6mS6XrgxnxbWhojf663tuEQueGC-FCMfra36C9knDFGzKsNa7LZK2dj" "YgyD3JR_MB_4NUJW_TqOQtwHYbxevoJArm-L5StowjzGy-_bq6Gw\"," "\"e\":\"AQAB\"," "\"d\":\"kLdtIj6GbDks_ApCSTYQtelcNttlKiOyPzMrXHeI-yk1F7-kpDxY4-WY5N" "WV5KntaEeXS1j82E375xxhWMHXyvjYecPT9fpwR_M9gV8n9Hrh2anTpTD9" "3Dt62ypW3yDsJzBnTnrYu1iwWRgBKrEYY46qAZIrA2xAwnm2X7uGR1hghk" "qDp0Vqj3kbSCz1XyfCs6_LehBwtxHIyh8Ripy40p24moOAbgxVw3rxT_vl" "t3UVe4WO3JkJOzlpUf-KTVI2Ptgm-dARxTEtE-id-4OJr0h-K-VFs3VSnd" "VTIznSxfyrj8ILL6MG_Uv8YAu7VILSB3lOW085-4qE3DzgrTjgyQ\"," "\"p\":\"1r52Xk46c-LsfB5P442p7atdPUrxQSy4mti_tZI3Mgf2EuFVbUoDBvaRQ-" "SWxkbkmoEzL7JXroSBjSrK3YIQgYdMgyAEPTPjXv_hI2_1eTSPVZfzL0lf" "fNn03IXqWF5MDFuoUYE0hzb2vhrlN_rKrbfDIwUbTrjjgieRbwC6Cl0\"," "\"q\":\"wLb35x7hmQWZsWJmB_vle87ihgZ19S8lBEROLIsZG4ayZVe9Hi9gDVCOBm" "UDdaDYVTSNx_8Fyw1YYa9XGrGnDew00J28cRUoeBB_jKI1oma0Orv1T9aX" "IWxKwd4gvxFImOWr3QRL9KEBRzk2RatUBnmDZJTIAfwTs0g68UZHvtc\"," "\"dp\":\"ZK-YwE7diUh0qR1tR7w8WHtolDx3MZ_OTowiFvgfeQ3SiresXjm9gZ5KL" "hMXvo-uz-KUJWDxS5pFQ_M0evdo1dKiRTjVw_x4NyqyXPM5nULPkcpU827" "rnpZzAJKpdhWAgqrXGKAECQH0Xt4taznjnd_zVpAmZZq60WPMBMfKcuE\"," "\"dq\":\"Dq0gfgJ1DdFGXiLvQEZnuKEN0UUmsJBxkjydc3j4ZYdBiMRAy86x0vHCj" "ywcMlYYg4yoC4YZa9hNVcsjqA3FeiL19rk8g6Qn29Tt0cj8qqyFpz9vNDB" "UfCAiJVeESOjJDZPYHdHY8v1b-o-Z2X5tvLx-TCekf7oxyeKDUqKWjis\"," "\"qi\":\"VIMpMYbPf47dT1w_zDUXfPimsSegnMOA1zTaX7aGk_8urY6R8-ZW1FxU7" "AlWAyLWybqq6t16VFd7hQd0y6flUK4SlOydB61gwanOsXGOAOv82cHq0E3" "eL4HrtZkUuKvnPrMnsUUFlfUdybVzxyjz9JF_XyaY14ardLSjf4L_FNY\"" "}" ; static int test_jwe_a1(struct lws_context *context) { struct lws_jwe jwe; char temp[2048], compact[2048]; int n, ret = -1, temp_len = sizeof(temp); lws_jwe_init(&jwe, context); if (lws_jwk_import(&jwe.jwk, NULL, NULL, ex_a1_jwk_json, strlen(ex_a1_jwk_json)) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } /* converts a compact serialization to jws b64 + decoded maps */ if (lws_jws_compact_decode(ex_a1_compact, (int)strlen(ex_a1_compact), &jwe.jws.map, &jwe.jws.map_b64, temp, &temp_len) != 5) { lwsl_err("%s: lws_jws_compact_decode failed\n", __func__); goto bail; } n = lws_jwe_auth_and_decrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_auth_and_decrypt failed\n", __func__); goto bail; } /* allowing for trailing padding, confirm the plaintext */ if (jwe.jws.map.len[LJWE_CTXT] < strlen(ex_a1_ptext) || lws_timingsafe_bcmp(jwe.jws.map.buf[LJWE_CTXT], ex_a1_ptext, (uint32_t)strlen(ex_a1_ptext))) { lwsl_err("%s: plaintext AES decrypt wrong\n", __func__); lwsl_hexdump_notice(ex_a1_ptext, strlen(ex_a1_ptext)); lwsl_hexdump_notice(jwe.jws.map.buf[LJWE_CTXT], jwe.jws.map.len[LJWE_CTXT]); goto bail; } /* * Canned decrypt worked properly... let's also try encoding the * plaintext ourselves and decoding that... */ lws_jwe_destroy(&jwe); temp_len = sizeof(temp); lws_jwe_init(&jwe, context); if (lws_jwk_import(&jwe.jwk, NULL, NULL, ex_a1_jwk_json, strlen(ex_a1_jwk_json)) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } if (lws_gencrypto_jwe_alg_to_definition("RSA-OAEP", &jwe.jose.alg)) { lwsl_err("Unknown cipher alg \"RSA-OAEP\"\n"); goto bail; } if (lws_gencrypto_jwe_enc_to_definition("A256GCM", &jwe.jose.enc_alg)) { lwsl_err("Unknown payload enc alg \"A256GCM\"\n"); goto bail; } /* we require a JOSE-formatted header to do the encryption */ jwe.jws.map.buf[LJWS_JOSE] = temp; jwe.jws.map.len[LJWS_JOSE] = (uint32_t)lws_snprintf(temp, (unsigned int)temp_len, "{\"alg\":\"%s\",\"enc\":\"%s\"}", "RSA-OAEP", "A256GCM"); temp_len -= (int)jwe.jws.map.len[LJWS_JOSE]; /* * dup the plaintext into the ciphertext element, it will be * encrypted in-place to a ciphertext of the same length */ if (lws_jws_dup_element(&jwe.jws.map, LJWE_CTXT, lws_concat_temp(temp, temp_len), &temp_len, ex_a1_ptext, strlen(ex_a1_ptext), 0)) { lwsl_notice("%s: Not enough temp space for ptext\n", __func__); goto bail; } /* CEK size is determined by hash / hmac size */ n = lws_gencrypto_bits_to_bytes(jwe.jose.enc_alg->keybits_fixed); if (lws_jws_randomize_element(context, &jwe.jws.map, LJWE_EKEY, lws_concat_temp(temp, temp_len), &temp_len, (unsigned int)n, LWS_JWE_LIMIT_KEY_ELEMENT_BYTES)) { lwsl_err("Problem getting random\n"); goto bail; } n = lws_jwe_encrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_encrypt failed\n", __func__); goto bail; } n = lws_jwe_render_compact(&jwe, compact, sizeof(compact)); if (n < 0) { lwsl_err("%s: lws_jwe_render_compact failed: %d\n", __func__, n); goto bail; } // puts(compact); /* * Okay... what happens when we try to decode what we created? */ lws_jwe_destroy(&jwe); lws_jwe_init(&jwe, context); temp_len = sizeof(temp); /* converts a compact serialization to jws b64 + decoded maps */ if (lws_jws_compact_decode(compact, (int)strlen(compact), &jwe.jws.map, &jwe.jws.map_b64, temp, &temp_len) != 5) { lwsl_err("%s: lws_jws_compact_decode failed\n", __func__); goto bail; } if (lws_jwk_import(&jwe.jwk, NULL, NULL, ex_a1_jwk_json, strlen(ex_a1_jwk_json)) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } n = lws_jwe_auth_and_decrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: generated lws_jwe_auth_and_decrypt failed\n", __func__); goto bail; } ret = 0; bail: lws_jwe_destroy(&jwe); if (ret) lwsl_err("%s: selftest failed +++++++++++++++++++\n", __func__); else lwsl_notice("%s: selftest OK\n", __func__); return ret; } /* A.2. Example JWE using RSAES-PKCS1-v1_5 and AES_128_CBC_HMAC_SHA_256 * * This example encrypts the plaintext "Live long and prosper." to the * recipient using RSAES-PKCS1-v1_5 for key encryption and * AES_128_CBC_HMAC_SHA_256 for content encryption. */ /* "Live long and prosper." */ static uint8_t ex_a2_ptext[] = { 76, 105, 118, 101, 32, 108, 111, 110, 103, 32, 97, 110, 100, 32, 112, 114, 111, 115, 112, 101, 114, 46 }, *lws_jwe_ex_a2_jwk_json = (uint8_t *) "{" "\"kty\":\"RSA\"," "\"n\":\"sXchDaQebHnPiGvyDOAT4saGEUetSyo9MKLOoWFsueri23bOdgWp4Dy1Wl" "UzewbgBHod5pcM9H95GQRV3JDXboIRROSBigeC5yjU1hGzHHyXss8UDpre" "cbAYxknTcQkhslANGRUZmdTOQ5qTRsLAt6BTYuyvVRdhS8exSZEy_c4gs_" "7svlJJQ4H9_NxsiIoLwAEk7-Q3UXERGYw_75IDrGA84-lA_-Ct4eTlXHBI" "Y2EaV7t7LjJaynVJCpkv4LKjTTAumiGUIuQhrNhZLuF_RJLqHpM2kgWFLU" "7-VTdL1VbC2tejvcI2BlMkEpk1BzBZI0KQB0GaDWFLN-aEAw3vRw\"," "\"e\":\"AQAB\"," "\"d\":\"VFCWOqXr8nvZNyaaJLXdnNPXZKRaWCjkU5Q2egQQpTBMwhprMzWzpR8Sxq" "1OPThh_J6MUD8Z35wky9b8eEO0pwNS8xlh1lOFRRBoNqDIKVOku0aZb-ry" "nq8cxjDTLZQ6Fz7jSjR1Klop-YKaUHc9GsEofQqYruPhzSA-QgajZGPbE_" "0ZaVDJHfyd7UUBUKunFMScbflYAAOYJqVIVwaYR5zWEEceUjNnTNo_CVSj" "-VvXLO5VZfCUAVLgW4dpf1SrtZjSt34YLsRarSb127reG_DUwg9Ch-Kyvj" "T1SkHgUWRVGcyly7uvVGRSDwsXypdrNinPA4jlhoNdizK2zF2CWQ\"," "\"p\":\"9gY2w6I6S6L0juEKsbeDAwpd9WMfgqFoeA9vEyEUuk4kLwBKcoe1x4HG68" "ik918hdDSE9vDQSccA3xXHOAFOPJ8R9EeIAbTi1VwBYnbTp87X-xcPWlEP" "krdoUKW60tgs1aNd_Nnc9LEVVPMS390zbFxt8TN_biaBgelNgbC95sM\"," "\"q\":\"uKlCKvKv_ZJMVcdIs5vVSU_6cPtYI1ljWytExV_skstvRSNi9r66jdd9-y" "BhVfuG4shsp2j7rGnIio901RBeHo6TPKWVVykPu1iYhQXw1jIABfw-MVsN" "-3bQ76WLdt2SDxsHs7q7zPyUyHXmps7ycZ5c72wGkUwNOjYelmkiNS0\"," "\"dp\":\"w0kZbV63cVRvVX6yk3C8cMxo2qCM4Y8nsq1lmMSYhG4EcL6FWbX5h9yuv" "ngs4iLEFk6eALoUS4vIWEwcL4txw9LsWH_zKI-hwoReoP77cOdSL4AVcra" "Hawlkpyd2TWjE5evgbhWtOxnZee3cXJBkAi64Ik6jZxbvk-RR3pEhnCs\"," "\"dq\":\"o_8V14SezckO6CNLKs_btPdFiO9_kC1DsuUTd2LAfIIVeMZ7jn1Gus_Ff" "7B7IVx3p5KuBGOVF8L-qifLb6nQnLysgHDh132NDioZkhH7mI7hPG-PYE_" "odApKdnqECHWw0J-F0JWnUd6D2B_1TvF9mXA2Qx-iGYn8OVV1Bsmp6qU\"," "\"qi\":\"eNho5yRBEBxhGBtQRww9QirZsB66TrfFReG_CcteI1aCneT0ELGhYlRlC" "tUkTRclIfuEPmNsNDPbLoLqqCVznFbvdB7x-Tl-m0l_eFTj2KiqwGqE9PZ" "B9nNTwMVvH3VRRSLWACvPnSiwP8N5Usy-WRXS-V7TbpxIhvepTfE0NNo\"" "}", *ex_a2_compact = (uint8_t *) "eyJhbGciOiJSU0ExXzUiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0" "." "UGhIOguC7IuEvf_NPVaXsGMoLOmwvc1GyqlIKOK1nN94nHPoltGRhWhw7Zx0-kFm" "1NJn8LE9XShH59_i8J0PH5ZZyNfGy2xGdULU7sHNF6Gp2vPLgNZ__deLKxGHZ7Pc" "HALUzoOegEI-8E66jX2E4zyJKx-YxzZIItRzC5hlRirb6Y5Cl_p-ko3YvkkysZIF" "NPccxRU7qve1WYPxqbb2Yw8kZqa2rMWI5ng8OtvzlV7elprCbuPhcCdZ6XDP0_F8" "rkXds2vE4X-ncOIM8hAYHHi29NX0mcKiRaD0-D-ljQTP-cFPgwCp6X-nZZd9OHBv" "-B3oWh2TbqmScqXMR4gp_A" "." "AxY8DCtDaGlsbGljb3RoZQ" "." "KDlTtXchhZTGufMYmOYGS4HffxPSUrfmqCHXaI9wOGY" "." "9hH0vgRfYgPnAHOd8stkvw" ; static int test_jwe_a2(struct lws_context *context) { struct lws_jwe jwe; char temp[2048]; int n, ret = -1, temp_len = sizeof(temp); lws_jwe_init(&jwe, context); if (lws_jwk_import(&jwe.jwk, NULL, NULL, (char *)lws_jwe_ex_a2_jwk_json, strlen((char *)lws_jwe_ex_a2_jwk_json)) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } /* converts a compact serialization to jws b64 + decoded maps */ if (lws_jws_compact_decode((const char *)ex_a2_compact, (int)strlen((char *)ex_a2_compact), &jwe.jws.map, &jwe.jws.map_b64, (char *)temp, &temp_len) != 5) { lwsl_err("%s: lws_jws_compact_decode failed\n", __func__); goto bail; } n = lws_jwe_auth_and_decrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_auth_and_decrypt failed\n", __func__); goto bail; } /* allowing for trailing padding, confirm the plaintext */ if (jwe.jws.map.len[LJWE_CTXT] < sizeof(ex_a2_ptext) || lws_timingsafe_bcmp(jwe.jws.map.buf[LJWE_CTXT], ex_a2_ptext, sizeof(ex_a2_ptext))) { lwsl_err("%s: plaintext AES decrypt wrong\n", __func__); lwsl_hexdump_notice(ex_a2_ptext, sizeof(ex_a2_ptext)); lwsl_hexdump_notice(jwe.jws.map.buf[LJWE_CTXT], jwe.jws.map.len[LJWE_CTXT]); goto bail; } ret = 0; bail: lws_jwe_destroy(&jwe); if (ret) lwsl_err("%s: selftest failed +++++++++++++++++++\n", __func__); else lwsl_notice("%s: selftest OK\n", __func__); return ret; } /* JWE creation using RSAES-PKCS1-v1_5 and AES_128_CBC_HMAC_SHA_256 * * This example encrypts a different, larger plaintext using the jwk key from * the test above, and AES_128_CBC_HMAC_SHA_256 for content encryption. */ static const char *rsa256a128_jose = "{ \"alg\":\"RSA1_5\",\"enc\":\"A128CBC-HS256\"}"; static uint8_t /* plaintext is 1024 bytes from /dev/urandom */ ra_ptext_1024[] = { 0xfe, 0xc6, 0x4f, 0x3e, 0x4a, 0x19, 0xe9, 0xd7, 0xc2, 0x13, 0xe7, 0xc5, 0x78, 0x6e, 0x71, 0xf6, 0x6e, 0xdd, 0x04, 0xaf, 0xaa, 0x4e, 0xa8, 0xad, 0xd8, 0xe0, 0xb3, 0x32, 0x97, 0x43, 0x7c, 0xd8, 0xd1, 0x5f, 0x56, 0xac, 0x70, 0xaf, 0x7d, 0x0b, 0x40, 0xa1, 0x96, 0x71, 0x7c, 0xc4, 0x4a, 0x37, 0x0b, 0xa6, 0x06, 0xb3, 0x8c, 0x87, 0xee, 0xb6, 0x15, 0xfe, 0xaa, 0x60, 0x7e, 0x7f, 0xdc, 0xb0, 0xff, 0x96, 0x4b, 0x30, 0x60, 0xcf, 0xc6, 0x5d, 0x09, 0x6a, 0x6f, 0x66, 0x0c, 0x5f, 0xb0, 0x6f, 0x61, 0xa6, 0x26, 0x02, 0xbd, 0x46, 0xda, 0xa3, 0x73, 0x19, 0x17, 0xff, 0xe0, 0x5f, 0x30, 0x72, 0x7d, 0x17, 0xd8, 0xb2, 0xbe, 0x84, 0x3e, 0x4d, 0x76, 0xbd, 0x62, 0x5d, 0x63, 0xfe, 0x11, 0x32, 0x11, 0x41, 0xdc, 0xed, 0x96, 0xfd, 0x31, 0x38, 0x6a, 0x84, 0x55, 0x7a, 0x33, 0x3f, 0x37, 0xc3, 0x37, 0x7b, 0xc1, 0xb7, 0x89, 0x00, 0x39, 0xa6, 0x94, 0x91, 0xb7, 0x19, 0x6b, 0x1d, 0x99, 0xeb, 0xf6, 0x10, 0xb9, 0xd2, 0xcd, 0x15, 0x0d, 0xbc, 0x24, 0x34, 0x9a, 0x52, 0x64, 0x21, 0x72, 0x1e, 0x9a, 0x00, 0xf2, 0xcf, 0xf1, 0x7d, 0x1a, 0x12, 0x8d, 0x39, 0xbc, 0xf9, 0x09, 0xfd, 0xd9, 0x22, 0x27, 0x28, 0xe1, 0x3a, 0x0b, 0x82, 0xba, 0x9a, 0xe5, 0x9d, 0xa8, 0x12, 0x6e, 0xf5, 0x4b, 0xc7, 0x2b, 0x9c, 0xdc, 0xfe, 0xf3, 0xe8, 0x74, 0x65, 0x3d, 0xe0, 0xaa, 0x64, 0xf3, 0x43, 0xa4, 0x88, 0xa8, 0xbe, 0x60, 0xdb, 0xfd, 0x2d, 0x3b, 0x84, 0x82, 0x8f, 0x4d, 0xbb, 0xe4, 0xa9, 0x59, 0xe3, 0x6c, 0x52, 0x45, 0xe4, 0x34, 0xdb, 0x28, 0x0e, 0x4a, 0x44, 0xb6, 0x9a, 0x25, 0x9b, 0x3b, 0xae, 0xe1, 0x12, 0x1d, 0x1c, 0x66, 0x7d, 0xb9, 0x5b, 0x5f, 0xc2, 0x4a, 0xaa, 0xd2, 0xe9, 0x65, 0xe2, 0x85, 0x6f, 0xf6, 0x67, 0x66, 0x8e, 0x0b, 0xd2, 0x60, 0xf8, 0x43, 0x60, 0x04, 0x9b, 0xa9, 0x3a, 0x6a, 0x3c, 0x02, 0x3c, 0x08, 0x9d, 0x60, 0x1c, 0xc4, 0x27, 0x3e, 0xff, 0xd0, 0x70, 0x94, 0x43, 0x3e, 0x9e, 0x69, 0x19, 0x22, 0xf0, 0xec, 0x26, 0x2d, 0xa5, 0x71, 0xf3, 0x92, 0x61, 0x95, 0xce, 0xc3, 0xc0, 0xa0, 0xc3, 0x98, 0x22, 0xdd, 0x32, 0x3c, 0x48, 0xcb, 0xd1, 0x61, 0xa0, 0xaa, 0x9a, 0x7e, 0x5a, 0xfa, 0x26, 0x46, 0x49, 0xfc, 0x9c, 0xaa, 0x21, 0x06, 0x45, 0xf1, 0xa0, 0xc9, 0xef, 0x6b, 0x89, 0xf2, 0x01, 0x20, 0x54, 0xfa, 0x0a, 0x23, 0xff, 0xbd, 0x64, 0x35, 0x94, 0xfd, 0x35, 0x70, 0x52, 0x94, 0x66, 0xc5, 0xd0, 0x27, 0xc1, 0x8f, 0x6d, 0xc4, 0xa3, 0x34, 0xc2, 0xea, 0xf0, 0xb3, 0x0d, 0x6c, 0x13, 0xb5, 0xc9, 0x6e, 0x5c, 0xeb, 0x8b, 0x7b, 0xf5, 0x21, 0x4c, 0xe3, 0xb7, 0x73, 0x6d, 0x07, 0xaa, 0x44, 0xc4, 0xba, 0xc5, 0xa5, 0x0e, 0x75, 0x28, 0xb7, 0x50, 0x22, 0x54, 0xa7, 0xe1, 0x2e, 0xfd, 0x20, 0xcd, 0xa4, 0x31, 0xa3, 0xb2, 0x73, 0x98, 0x7c, 0x3c, 0x8f, 0xa3, 0x40, 0x8a, 0xaf, 0x31, 0xfa, 0xf9, 0x70, 0x4d, 0x83, 0x10, 0xc4, 0xa0, 0x9c, 0xd6, 0xa3, 0xd5, 0x07, 0xaf, 0xaf, 0x35, 0x15, 0xd0, 0x84, 0x09, 0x20, 0x36, 0x88, 0xac, 0x6f, 0x16, 0x5e, 0x03, 0xa9, 0xfc, 0xb3, 0x2d, 0x01, 0x57, 0xb3, 0xed, 0x4b, 0x55, 0x2b, 0xbc, 0x92, 0x87, 0x3e, 0x27, 0xc4, 0x2c, 0x44, 0xac, 0x05, 0x5f, 0x26, 0xe7, 0xe9, 0xb0, 0x2d, 0x6b, 0x3c, 0x8c, 0xd2, 0xb4, 0x3c, 0xb4, 0x86, 0xfe, 0x68, 0x99, 0x2a, 0x42, 0xac, 0xa4, 0xb3, 0x89, 0x61, 0xb3, 0xd1, 0xdf, 0x9b, 0x58, 0xc7, 0x81, 0x62, 0x87, 0x26, 0x52, 0x51, 0xe7, 0x7d, 0x7c, 0x37, 0x14, 0xe5, 0x19, 0x28, 0x34, 0x3e, 0x95, 0x17, 0x36, 0x12, 0xf9, 0x5e, 0xc1, 0x3c, 0x9c, 0x28, 0x70, 0x06, 0xdf, 0xc4, 0x6d, 0x25, 0x04, 0x46, 0xe0, 0x95, 0xf0, 0xc8, 0x57, 0x48, 0x27, 0x26, 0xf3, 0xf7, 0x19, 0xbe, 0xea, 0xb4, 0xd4, 0x64, 0xaf, 0x67, 0x7c, 0xf5, 0xa9, 0xfb, 0x85, 0x4a, 0x43, 0x9c, 0x62, 0x06, 0x5e, 0x28, 0x2a, 0x7b, 0x1e, 0xb3, 0x07, 0xe7, 0x19, 0x32, 0xa4, 0x4e, 0xb4, 0xce, 0xe0, 0x92, 0x56, 0xf5, 0x10, 0xcb, 0x56, 0x34, 0x4b, 0x0d, 0xe1, 0xd3, 0x6d, 0xfe, 0xf0, 0x44, 0xf7, 0x22, 0x1d, 0x5e, 0x6b, 0xa7, 0xa5, 0x83, 0x2e, 0xeb, 0x14, 0xf2, 0xd7, 0x27, 0x5a, 0x2a, 0xd2, 0x55, 0x35, 0xe6, 0x7e, 0xd9, 0x3b, 0xac, 0x4e, 0x5a, 0x22, 0x46, 0xd5, 0x7b, 0x57, 0x9c, 0x58, 0xfe, 0xd0, 0xda, 0xbf, 0x7d, 0xe9, 0x8c, 0xb7, 0xba, 0x88, 0xf1, 0xc3, 0x82, 0x53, 0xc3, 0x66, 0x20, 0x51, 0x12, 0xd3, 0xf9, 0xaf, 0xe9, 0xcb, 0xc1, 0x7a, 0xe6, 0x22, 0x44, 0xa5, 0xdf, 0x18, 0xb3, 0x6e, 0x6c, 0xba, 0xf3, 0xc6, 0x24, 0x5a, 0x1c, 0x67, 0xa6, 0xa5, 0xb4, 0xb1, 0x35, 0xdf, 0x5a, 0x60, 0x5c, 0x0b, 0x66, 0xd3, 0x1f, 0x4e, 0x7c, 0xcb, 0x93, 0x7e, 0x2f, 0x6d, 0xbd, 0xce, 0x26, 0x52, 0x44, 0xee, 0xbb, 0xd8, 0x8f, 0xf2, 0x67, 0x38, 0x0d, 0x3b, 0xaa, 0x21, 0x73, 0xf8, 0x3b, 0x54, 0x9d, 0x4e, 0x5e, 0xf1, 0xa2, 0x18, 0x5a, 0xf1, 0x6c, 0x32, 0xbf, 0x0a, 0x73, 0x14, 0x48, 0x4f, 0x56, 0xc0, 0x87, 0x6d, 0x3b, 0x16, 0xcc, 0x3f, 0x44, 0x19, 0x85, 0x22, 0x43, 0x5f, 0x8c, 0x29, 0xbd, 0xa0, 0xce, 0x84, 0xd9, 0x4a, 0xcf, 0x00, 0x6b, 0x37, 0x35, 0xe0, 0xb3, 0xc9, 0xd1, 0x58, 0xd1, 0x1b, 0xc3, 0x6f, 0xe3, 0x50, 0xdb, 0xa6, 0x5e, 0x03, 0x18, 0xe5, 0xe2, 0xc1, 0x97, 0xd5, 0xf8, 0x42, 0x6f, 0xe6, 0x61, 0x80, 0xc9, 0x7c, 0xc6, 0x83, 0xf0, 0xad, 0x70, 0x13, 0x0e, 0x26, 0x75, 0xc0, 0x12, 0x23, 0x14, 0xef, 0x1f, 0xdf, 0xfd, 0x47, 0x99, 0x9f, 0x22, 0xf3, 0x57, 0x21, 0xdc, 0x38, 0xe4, 0x79, 0x87, 0x5b, 0x67, 0x66, 0xdd, 0x0b, 0xe0, 0xae, 0xb5, 0x97, 0xd8, 0xa6, 0x5d, 0x02, 0xcf, 0x6b, 0x84, 0x19, 0xc1, 0xbb, 0x25, 0xd2, 0x10, 0xb9, 0x63, 0xeb, 0x4b, 0x27, 0x8d, 0x05, 0x31, 0xce, 0x3b, 0x0c, 0x5f, 0xd4, 0x83, 0x47, 0xa4, 0x8b, 0xc4, 0x76, 0x33, 0x74, 0x1a, 0x07, 0xf8, 0x18, 0x82, 0x1c, 0x8e, 0x01, 0x75, 0x78, 0xea, 0xd9, 0x72, 0x61, 0x71, 0xa9, 0x09, 0x44, 0x7b, 0x0f, 0x12, 0xcf, 0x4c, 0x76, 0x7b, 0x69, 0xc8, 0x64, 0x98, 0x60, 0x45, 0xb6, 0xc7, 0x6b, 0xd8, 0x43, 0x99, 0x08, 0xc9, 0xd3, 0x6f, 0x01, 0x4f, 0x57, 0x6f, 0x49, 0x4f, 0x4f, 0x72, 0xa4, 0xa2, 0x45, 0xe1, 0x0e, 0xf2, 0x08, 0x3e, 0x67, 0xc3, 0x83, 0x5b, 0xb1, 0x24, 0xc0, 0xe0, 0x3a, 0xf5, 0x1f, 0xf2, 0x06, 0x4b, 0xa7, 0x6f, 0xd2, 0xb2, 0x81, 0x96, 0x91, 0x42, 0xb1, 0x53, 0x65, 0x3a, 0x12, 0xcd, 0x33, 0xb3, 0x7e, 0x79, 0xc0, 0x46, 0xf6, 0xd8, 0x4a, 0x22, 0x35, 0xb8, 0x3f, 0xe4, 0x08, 0x88, 0x49, 0x3c, 0x73, 0x9a, 0x44, 0xe3, 0x3b, 0xcc, 0xc4, 0xae, 0x7c, 0xbe, 0xfd, 0xa6, 0x4a, 0xd4, 0x26, 0x52, 0x58, 0x81, 0x30, 0x66, 0x44, 0x54, 0xc8, 0xe4, 0x7c, 0x5b, 0x63, 0x06, 0x60, 0x94, 0x62, 0xe5, 0x47, 0x45, 0xfb, 0x58, 0xf5, 0x6a, 0x7c, 0xb2, 0x35, 0x08, 0x03, 0x15, 0x68, 0xb3, 0x13, 0xa5, 0xbd, 0xf2, 0x1e, 0x2e, 0x1c, 0x8f, 0xc6, 0xc7, 0xd1, 0xa9, 0x64, 0x37, 0x2b, 0x23, 0xfa, 0x7e, 0x56, 0x22, 0xf0, 0x8a, 0xbd, 0xeb, 0x04 }, r256a128_cek[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f } ; static int test_jwe_ra_ptext_1024(struct lws_context *context, char *jwk_txt, int jwk_len) { char temp[4096], compact[4096]; struct lws_jwe jwe; int n, ret = -1, temp_len = sizeof(temp); lws_jwe_init(&jwe, context); /* reuse the rsa private key from the JWE Appendix 2 test above */ if (lws_jwk_import(&jwe.jwk, NULL, NULL, jwk_txt, (unsigned int)jwk_len) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } /* dup the plaintext, it will be replaced in-situ by the ciphertext */ if (lws_jws_dup_element(&jwe.jws.map, LJWE_CTXT, lws_concat_temp(temp, temp_len), &temp_len, ra_ptext_1024, sizeof(ra_ptext_1024), lws_gencrypto_padded_length(LWS_AES_CBC_BLOCKLEN, sizeof(ra_ptext_1024)))) { lwsl_notice("%s: Not enough temp space for ptext\n", __func__); goto bail; } /* dup the cek, since it will be replaced by the encrypted key */ if (lws_jws_dup_element(&jwe.jws.map, LJWE_EKEY, lws_concat_temp(temp, temp_len), &temp_len, r256a128_cek, sizeof(r256a128_cek), LWS_JWE_LIMIT_KEY_ELEMENT_BYTES)) { lwsl_notice("%s: Not enough temp space for EKEY\n", __func__); goto bail; } jwe.jws.map.buf[LJWE_JOSE] = rsa256a128_jose; jwe.jws.map.len[LJWE_JOSE] = (uint32_t)strlen(rsa256a128_jose); n = lws_jwe_parse_jose(&jwe.jose, jwe.jws.map.buf[LJWE_JOSE], (int)jwe.jws.map.len[LJWE_JOSE], lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: JOSE parse failed\n", __func__); goto bail; } n = lws_jwe_encrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_encrypt failed\n", __func__); goto bail; } n = lws_jwe_render_compact(&jwe, compact, sizeof(compact)); if (n < 0) { lwsl_err("%s: lws_jwe_render_compact failed: %d\n", __func__, n); goto bail; } // puts(compact); lws_jwe_destroy(&jwe); lws_jwe_init(&jwe, context); temp_len = sizeof(temp); /* now we created the encrypted version, see if we can decrypt it */ if (lws_jwk_import(&jwe.jwk, NULL, NULL, jwk_txt, (unsigned int)jwk_len) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } if (lws_jws_compact_decode(compact, n, &jwe.jws.map, &jwe.jws.map_b64, temp, &temp_len) != 5) { lwsl_err("%s: failed to parse generated compact\n", __func__); goto bail; } n = lws_jwe_auth_and_decrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_auth_and_decrypt failed\n", __func__); goto bail; } /* allowing for trailing padding, confirm the plaintext */ if (jwe.jws.map.len[LJWE_CTXT] < sizeof(ra_ptext_1024) || lws_timingsafe_bcmp(jwe.jws.map.buf[LJWE_CTXT], ra_ptext_1024, sizeof(ra_ptext_1024))) { lwsl_err("%s: plaintext AES decrypt wrong\n", __func__); lwsl_hexdump_notice(ra_ptext_1024, sizeof(ra_ptext_1024)); lwsl_hexdump_notice(jwe.jws.map.buf[LJWE_CTXT], jwe.jws.map.len[LJWE_CTXT]); goto bail; } ret = 0; bail: lws_jwe_destroy(&jwe); if (ret) lwsl_err("%s: selftest failed +++++++++++++++++++\n", __func__); else lwsl_notice("%s: selftest OK\n", __func__); return ret; } static const char *rsa256a192_jose = "{ \"alg\":\"RSA1_5\",\"enc\":\"A192CBC-HS384\"}"; static const uint8_t r256a192_cek[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f } ; static int test_jwe_r256a192_ptext(struct lws_context *context, char *jwk_txt, int jwk_len) { struct lws_jwe jwe; char temp[4096], compact[4096]; int n, ret = -1, temp_len = sizeof(temp); lws_jwe_init(&jwe, context); /* reuse the rsa private key from the JWE Appendix 2 test above */ if (lws_jwk_import(&jwe.jwk, NULL, NULL, jwk_txt, (unsigned int)jwk_len) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } /* * dup the plaintext into the ciphertext element, it will be * encrypted in-place to a ciphertext of the same length + padding */ if (lws_jws_dup_element(&jwe.jws.map, LJWE_CTXT, lws_concat_temp(temp, temp_len), &temp_len, ra_ptext_1024, sizeof(ra_ptext_1024), lws_gencrypto_padded_length(LWS_AES_CBC_BLOCKLEN, sizeof(ra_ptext_1024)))) { lwsl_notice("%s: Not enough temp space for ptext\n", __func__); goto bail; } /* copy the cek, since it will be replaced by the encrypted key */ if (lws_jws_dup_element(&jwe.jws.map, LJWE_EKEY, lws_concat_temp(temp, temp_len), &temp_len, r256a192_cek, sizeof(r256a192_cek), LWS_JWE_LIMIT_KEY_ELEMENT_BYTES)) { lwsl_err("Problem getting random\n"); goto bail; } jwe.jws.map.buf[LJWE_JOSE] = rsa256a192_jose; jwe.jws.map.len[LJWE_JOSE] = (uint32_t)strlen(rsa256a192_jose); n = lws_jwe_parse_jose(&jwe.jose, jwe.jws.map.buf[LJWE_JOSE], (int)jwe.jws.map.len[LJWE_JOSE], lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: JOSE parse failed\n", __func__); goto bail; } n = lws_jwe_encrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_encrypt failed\n", __func__); goto bail; } n = lws_jwe_render_compact(&jwe, compact, sizeof(compact)); if (n < 0) { lwsl_err("%s: lws_jwe_render_compact failed: %d\n", __func__, n); goto bail; } // puts(compact); /* now we created the encrypted version, see if we can decrypt it */ lws_jwe_destroy(&jwe); lws_jwe_init(&jwe, context); if (lws_jwk_import(&jwe.jwk, NULL, NULL, jwk_txt, (unsigned int)jwk_len) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } if (lws_jws_compact_decode(compact, n, &jwe.jws.map, &jwe.jws.map_b64, temp, &temp_len) != 5) { lwsl_err("%s: failed to parse generated compact\n", __func__); goto bail; } n = lws_jwe_auth_and_decrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_auth_and_decrypt failed\n", __func__); goto bail; } /* allowing for trailing padding, confirm the plaintext */ if (jwe.jws.map.len[LJWE_CTXT] < sizeof(ra_ptext_1024) || lws_timingsafe_bcmp(jwe.jws.map.buf[LJWE_CTXT], ra_ptext_1024, sizeof(ra_ptext_1024))) { lwsl_err("%s: plaintext AES decrypt wrong\n", __func__); lwsl_hexdump_notice(ra_ptext_1024, sizeof(ra_ptext_1024)); lwsl_hexdump_notice(jwe.jws.map.buf[LJWE_CTXT], jwe.jws.map.len[LJWE_CTXT]); goto bail; } ret = 0; bail: lws_jwe_destroy(&jwe); if (ret) lwsl_err("%s: selftest failed +++++++++++++++++++\n", __func__); else lwsl_notice("%s: selftest OK\n", __func__); return ret; } static const char *rsa256a256_jose = "{ \"alg\":\"RSA1_5\",\"enc\":\"A256CBC-HS512\"}"; static const uint8_t r256a256_cek[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f } ; static int test_jwe_r256a256_ptext(struct lws_context *context, char *jwk_txt, int jwk_len) { struct lws_jwe jwe; char temp[4096], compact[4096]; int n, ret = -1, temp_len = sizeof(temp); lws_jwe_init(&jwe, context); /* reuse the rsa private key from the JWE Appendix 2 test above */ if (lws_jwk_import(&jwe.jwk, NULL, NULL, jwk_txt, (unsigned int)jwk_len) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } /* * dup the plaintext into the ciphertext element, it will be * encrypted in-place to a ciphertext of the same length + padding */ if (lws_jws_dup_element(&jwe.jws.map, LJWE_CTXT, lws_concat_temp(temp, temp_len), &temp_len, ra_ptext_1024, sizeof(ra_ptext_1024), lws_gencrypto_padded_length(LWS_AES_CBC_BLOCKLEN, sizeof(ra_ptext_1024)))) { lwsl_notice("%s: Not enough temp space for ptext\n", __func__); goto bail; } /* copy the cek, since it will be replaced by the encrypted key */ if (lws_jws_dup_element(&jwe.jws.map, LJWE_EKEY, lws_concat_temp(temp, temp_len), &temp_len, r256a256_cek, sizeof(r256a256_cek), LWS_JWE_LIMIT_KEY_ELEMENT_BYTES)) { lwsl_err("Problem getting random\n"); goto bail; } jwe.jws.map.buf[LJWE_JOSE] = rsa256a256_jose; jwe.jws.map.len[LJWE_JOSE] = (uint32_t)strlen(rsa256a256_jose); n = lws_jwe_parse_jose(&jwe.jose, rsa256a256_jose, (int)strlen(rsa256a256_jose), lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: JOSE parse failed\n", __func__); goto bail; } n = lws_jwe_encrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_encrypt failed\n", __func__); goto bail; } n = lws_jwe_render_compact(&jwe, compact, sizeof(compact)); if (n < 0) { lwsl_err("%s: lws_jwe_render_compact failed: %d\n", __func__, n); goto bail; } // puts(compact); /* now we created the encrypted version, see if we can decrypt it */ lws_jwe_destroy(&jwe); lws_jwe_init(&jwe, context); if (lws_jwk_import(&jwe.jwk, NULL, NULL, jwk_txt, (unsigned int)jwk_len) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } if (lws_jws_compact_decode(compact, n, &jwe.jws.map, &jwe.jws.map_b64, temp, &temp_len) != 5) { lwsl_err("%s: failed to parse generated compact\n", __func__); goto bail; } n = lws_jwe_auth_and_decrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_auth_and_decrypt failed\n", __func__); goto bail; } /* allowing for trailing padding, confirm the plaintext */ if (jwe.jws.map.len[LJWE_CTXT] < sizeof(ra_ptext_1024) || lws_timingsafe_bcmp(jwe.jws.map.buf[LJWE_CTXT], ra_ptext_1024, sizeof(ra_ptext_1024))) { lwsl_err("%s: plaintext AES decrypt wrong\n", __func__); lwsl_hexdump_notice(ra_ptext_1024, sizeof(ra_ptext_1024)); lwsl_hexdump_notice(jwe.jws.map.buf[LJWE_CTXT], jwe.jws.map.len[LJWE_CTXT]); goto bail; } ret = 0; bail: lws_jwe_destroy(&jwe); if (ret) lwsl_err("%s: selftest failed +++++++++++++++++++\n", __func__); else lwsl_notice("%s: selftest OK\n", __func__); return ret; } /* produced by running the minimal example `lws-crypto-jwk -t RSA -b 2048 -c` */ static const char *rsa_key_2048 = "{" "\"e\":\"AQAB\"," "\"kty\":\"RSA\"," "\"n\":\"lBJdvUq-9_8hlcduIWuBjRb0tGzzAvS4foqoNCO7g-rOXMdeAcmq" "aSzWTbkaGIc3L1I4-Q3TOZtxn2UhuDlShZRIhM6JCQuUVNVAF3TD7oXxHtZ" "LJ7y_BqCUlrAmW31lu-nVmhY2G3xW26yXWUsDbCxz0hfLbVnXRSvVKLzYWm" "_yyrFyEWfxB8peDocvKGh879z_aPCKE3PDOEl2AsgzYfpnWCLytkgnrTeL6" "qY8HXxvvV-Jw-XMaRiwH0VldpIjs4DaoN35Kj1Ex7QOZznTkbYtMIqse8bR" "LoR8Irkxbc5ncUAuX1KSV6lpPtelsA3RtEjJ4NHV-5eEABiYh8_CFQ\"," "\"d\":\"DDpguQ9RVQFMoJC5z2hlkvq91kvsXPv2Y9Dcki256xYlg55H7Pre" "p__hahrABR2Jg6QVJhArt5ABjUnDQ_JL69HH6VvLD6RVVBTQ-FRBZ_3HYKY" "Oynx5BA7tJm1BRatF5FkBCvq27i8nAc4vfjAb22o9CFvEW3FLaKAgOCncQ3" "Tnbz9CddH89n7DXw4kBFI8q5ugF_aRIg5-i42W_hQinLaBhZ_zhAuE-nvlt" "ZnhDal8cX3T60lNoUrDOlirqEOXKO3gXCHpm3csZ6nabHYD1UCyHOmi2RsR" "pzjaiqjXdPbwPzQoh2DcYpavNrf1mtHiqTwLZDTJIRHWHufJzHf-sw\"," "\"p\":\"ySeC3FtvzduDEL-FX4JqbRN06PdBhUmosCkymmbBjriuLNpkGkG-" "1ex7r-M8neUBZbctmDdih6cpLZ8hjZv3eEDZ4b5Z2LqZnja4QvVoWLUs4Fb" "NN_PxJCR5H28uUfT6ThxqT0Nb2enb8Dyp0Qxvd7eJUeYz6jOt7pEK-ErTB4" "M\"," "\"q\":\"vHG2Pd6QUH7vFZjJtXwmlVnrz5tdJvUPQvz7ggeM69cqhf4vLajz" "sqP9GhJr7bEkp6vKVdZGmfEdiFRD8cssIZq651oAO5Wr7zZd2mR_hG9jZx7" "8Davfuxr4SZNN-bmoxO6dbDi-X2c7fvMI2YeJwL4groNKyiosdUYILTrYRI" "c\"," "\"dp\":\"h5Gqf2rcokgEQGBjuigCJDtNuskRjoxDNV6-rRL99nt_X9lcR9n" "xjOnRvowOyXeTBoN7JjCFpllBxm6ORYtNMO28KomIsimo6NmGPBJ7XfXVJe" "k6bDBrX-l4_HeJJ1FM9SHvgDYsjGQxh-rKpIqWAYBf-yOD758e5T85vndnX" "JM\"," "\"dq\":\"K9LiB-dfdmjenw4mMp-JtYfw8Bn4gtvQzcpZjzbETgB-8iRXwm2" "dJvk-HjcUhHWCyb-I0YeAacKKFK9MEconHDWIq87haPn4vyvMjcJ7aUgiPN" "QW1_MVl8TA4xNvudi0Z__5-jYEB9nRG0fX0gbUQU-19_-uf-9o4WkE88fQj" "bc\"," "\"qi\":\"LEkTRqmomn9UiASeRfAKw-Z5q7cye9CSL4luSexFvA3Du7Oin-s" "L9a7F3nJN4CuYzhtNMxQ0hM7k6ExzhDhXDlNRHxnNEDt81-CFRV98v7GVWV" "SH1KnaKf9wgegxSSm-x536ki2SI8EN4k4qkqRF0iLVHZK7CgnWMbtt6tnpp" "3k\"" "}"; /* produced by running the minimal example `lws-crypto-jwk -t RSA -b 4096 -c` */ static const char *rsa_key_4096 = "{" "\"e\":\"AQAB\"," "\"kty\":\"RSA\"," "\"n\":\"uiLBz1SUgd4eQ0okg6tlPdk9QUhTsqXmiJXygWVFgzT45E5_Rfkq" "vZ2fwAqQ8DvxkDTUWiKpeXMpPRNWG5GxuBuq9n7xdA1vn1eQi8LoekB28dg" "3MwMfozVSKCzyxG1f81xPE5x3EMVhCcx6hshhlMEHkzNNhE07d-oRO87ZC0" "z_5L3Vh03uJBXaDKVlsgHAazoHLhn6G4odqv-ro54T6Nx1eEtyTnMmFY5ND" "V4rN0SjQvSefbZZtsrtby8Z0JmeyvynmDwOINj7FpmPmpFLoWGXntc2yxPP" "8SHnqfT9ESh94fxCMxRhDNohgpegRHyiYwj3M5ZYY6reCZYfOQONSWmc8yp" "NBMJqj4LuJ2bTMGAFS17ZP4ZZWm5RP9ax100Dgk0yxP1UrybG5dCfJRQvHC" "ncxG_aL6cSQu2o4fXqlJsNHxk3FjHtV_CMZ3tqvGTvwrs4yxvKwKv6r3fRh" "KL01bGOePzp9THkHW2-lzVj6kUwnxBdHGZE6fcAnczOdp8ZIEdV1w6ThimC" "m3Bw_TIyl3tkuxRWXpc_d6Q4iiSVKGKCvUvfAlESpTA4tIhQkij-T9FEoj2" "WE2H1D35AKmjcfLCh6yszu8cmDNedn862pwnawE2RvRFAyuI113fLQeCbCz" "tQ1JHuD8cnQt0hpGzReTa5UJ8OEOGIlyXNdWZyTpk\"," "\"d\":\"G2ZW582AT-6xvz-IiP5fuJ9EMloygeuEeEo0aMJO3X3cfoUknJkN" "ZtyvYa5cgBSe3la8hKkyD9_5K9WvGP9VLTAbdk4g_m-k5QyXiU9PeAGJ0Nd" "-Zqq4y0Zj2eil8u7Tz0fhFxay-zvG6VGZnsIcBTD2C7_jUwyoaqJA17A_CH" "gU-ifMqS56VgMGdlKZmf7Cg7ZGzM1DoS6vZ9bbfgoczaw4OZVHlg9Cxa0NI" "CDi1S-sJcTLGN_RLISKN5H0J54ZfzF6fUEn5kNykLTZrAvj2XV7g4UUOogn" "1cvjJYRcBVzTzQKcfxbqo2DvymDGFZbQM6pj80rYJ5HFPh2EapjggPN8hXp" "NlTNDEvC84QFv0lo2E-0nVWQqcyHtXd431O1JH2h5X822zKjXxkaztQSCj9" "YP7AdAeoxIaWOa3aO1vcwURH2WWaNV-_KXVkPJNzfo9-bGYwblMw_RIqIkN" "BDayTb8rBuQHTCE_tSEHgoSnkityGpr8j_vgA-Fa-SqmdqUlbklVpwA_Mq_" "UH7RCaqe91dWxRhS_7c85tFMRFCKOcaRXkwxEpP2LD1AYe8yvVQlr0Se8_d" "RefuQcC-BECwMW-TCgR3VxAuL7ExNTYe4bhBD8WYXsHP7wDXWX2Q4v7IRzj" "cfVIdpTNYuWEd69PvXBCuy75hmDniSmS3Xps3ItGU\"," "\"p\":\"961BtLSIZkHO7Vu1KfaA3urcwGpISKJiTSB5Nh6npxJr9mSjzv_f" "e8VoxCX6CWGY0SEeQNUQ6ceTnAAxkSHtZJQGed598jBtxIexAWEE7oc9s9d" "b0cWu4QWIVZYXrcOTEWmK1kWN4PXmnnQknrWQF49adn81BaOXqoL-tahe7f" "faXzXe0RXuohK543ZKbuuHQ2TxqFG7CZpXiH_qn1Syao32u0V3iDFpmmCUV" "h9O2JCzfo8sAosTrnQwC0pXz3Nvr_9Cnk6bMluJoMrwB1Ywg_DPQ1WvpYHO" "URezEOqVC8Y3zrko199TMX2COKGNFgutVpnzxs2_h0PyINUmwrY4zQ\"," "\"q\":\"wGQRaxy_gBafbrVJy4f32O0a2FQHzmS--WgHhoteDoF6ZAajLcV0" "GEvb-AVmFER1Wii62BFaFJOYQIegELvnBFFzD6oHJRX7bM4m36G8J_TC1o9" "T1IFnxOpaoFDf4JWf2k7DCXClGg_zueyOD8fj8F6j2nqpOfytuLmikHcWMc" "dGTHTCRtQmvOk3pm0uk2qR0cQb5L3Ocv45tCKr55tMc6Zx3DKkMt1kmUwd2" "HFfk_0WM6R7q4LNGIjwl8dwiERppLKA8xao9i3jOOdFEfAD-Zqv8H-32cyH" "Mg6Guo4tPNAYSzcsz8nbEYPtKVVm-PDuM2cx0iaKnS8BIK2XTbzc_Q\"," "\"dp\":\"ZXLWIwp_hEMYWyjhP9r0VlqlKTtfeEDrOuQ-Qei0iz6EclwurK8" "p_yyRCSb1D7qmOaLzHWMollllINUDeIsJDdWEAY8cz4L-sy1RV1tCBeHnaC" "6iMX5jb1Aw072y3T3qk4tDjxjWUHroh6bTCR8dckkJqNfaBAFKMlGNuyLIH" "3kSPUV3ivUM1d4NvhnJyz02HmjOgz9W-Uv65rJei_zJR9P2aCbAG00CEHXW" "zJ_uT86VdxV11WTaHu8Abt94sER8Tv6jbuyLrUjJSs9VGew32xNcEhya4ZQ" "VyimG8zri6fu7CDXXgPS8wtzB5ihl_c2ypnJQ4_GKrgEqwEAOrFqvUQ\"," "\"dq\":\"uzlmngcm8R6S3qi7fL7_2fG7uyPjSN5P3uR21l8QFCu6kFbJO8S" "4muBP20hds4F_dlLGqXgRYo7TjpCtmztQsKoWv_ql41hGCfeAawa41WViqm" "xmlxmrgzzRHsw1YhgZrNgTAz_E290EQT3Mbd0HnCZtbDMMNisIYAj_A3lwd" "tbHOaYyXb0dSZ_nkSUVO05tQ2aGAo8Xtl5ih0NqaQR_XNhwW2pI0lsTB__D" "15tU-O5FSdJaq2ip8KNrBzmF8IYrDKTNykKWAKRdSEX_uFoLdD8t0mxn3SM" "luffa8vdjXJfh3GiASmHUt3HcPOooQEAufoWBPVJWeGqCvWtRH8yYfQ\"," "\"qi\":\"h-e9es5J49OUF48gSXUI8cynZ8ydv5cThXc1deV3mil_7_7Hg8E" "jV3gAErO4l-irHJplFmHFZvU1ud4zs1gtBt5TA-EeeepYOHMSssWDvDK3WI" "zsM6C3vcNTSkT-ihaSFmPWHCVwJ1R3auWfeI2In3at0jd4t-OK-cCcGZXb7" "90-EnyyDcdFTU9WfwVSOJffRGjoUYX8DexavClv7CBzPhpdUzGoeyarNaG4" "z9MI8Q8txHyHgc_D70lZUum1cj0bZwgEj6yDzOPzSgUmICFJiLDDj93oPaI" "v-5CQ_Ckju7icexc_kuuYTKBOLTj_vfaURnV3KCHul2UljUYOxkfeNQ\"" "}"; static const char *rsa_key_4096_no_optional = "{" "\"e\":\"AQAB\"," "\"kty\":\"RSA\"," "\"n\":\"uiLBz1SUgd4eQ0okg6tlPdk9QUhTsqXmiJXygWVFgzT45E5_Rfkq" "vZ2fwAqQ8DvxkDTUWiKpeXMpPRNWG5GxuBuq9n7xdA1vn1eQi8LoekB28dg" "3MwMfozVSKCzyxG1f81xPE5x3EMVhCcx6hshhlMEHkzNNhE07d-oRO87ZC0" "z_5L3Vh03uJBXaDKVlsgHAazoHLhn6G4odqv-ro54T6Nx1eEtyTnMmFY5ND" "V4rN0SjQvSefbZZtsrtby8Z0JmeyvynmDwOINj7FpmPmpFLoWGXntc2yxPP" "8SHnqfT9ESh94fxCMxRhDNohgpegRHyiYwj3M5ZYY6reCZYfOQONSWmc8yp" "NBMJqj4LuJ2bTMGAFS17ZP4ZZWm5RP9ax100Dgk0yxP1UrybG5dCfJRQvHC" "ncxG_aL6cSQu2o4fXqlJsNHxk3FjHtV_CMZ3tqvGTvwrs4yxvKwKv6r3fRh" "KL01bGOePzp9THkHW2-lzVj6kUwnxBdHGZE6fcAnczOdp8ZIEdV1w6ThimC" "m3Bw_TIyl3tkuxRWXpc_d6Q4iiSVKGKCvUvfAlESpTA4tIhQkij-T9FEoj2" "WE2H1D35AKmjcfLCh6yszu8cmDNedn862pwnawE2RvRFAyuI113fLQeCbCz" "tQ1JHuD8cnQt0hpGzReTa5UJ8OEOGIlyXNdWZyTpk\"," "\"d\":\"G2ZW582AT-6xvz-IiP5fuJ9EMloygeuEeEo0aMJO3X3cfoUknJkN" "ZtyvYa5cgBSe3la8hKkyD9_5K9WvGP9VLTAbdk4g_m-k5QyXiU9PeAGJ0Nd" "-Zqq4y0Zj2eil8u7Tz0fhFxay-zvG6VGZnsIcBTD2C7_jUwyoaqJA17A_CH" "gU-ifMqS56VgMGdlKZmf7Cg7ZGzM1DoS6vZ9bbfgoczaw4OZVHlg9Cxa0NI" "CDi1S-sJcTLGN_RLISKN5H0J54ZfzF6fUEn5kNykLTZrAvj2XV7g4UUOogn" "1cvjJYRcBVzTzQKcfxbqo2DvymDGFZbQM6pj80rYJ5HFPh2EapjggPN8hXp" "NlTNDEvC84QFv0lo2E-0nVWQqcyHtXd431O1JH2h5X822zKjXxkaztQSCj9" "YP7AdAeoxIaWOa3aO1vcwURH2WWaNV-_KXVkPJNzfo9-bGYwblMw_RIqIkN" "BDayTb8rBuQHTCE_tSEHgoSnkityGpr8j_vgA-Fa-SqmdqUlbklVpwA_Mq_" "UH7RCaqe91dWxRhS_7c85tFMRFCKOcaRXkwxEpP2LD1AYe8yvVQlr0Se8_d" "RefuQcC-BECwMW-TCgR3VxAuL7ExNTYe4bhBD8WYXsHP7wDXWX2Q4v7IRzj" "cfVIdpTNYuWEd69PvXBCuy75hmDniSmS3Xps3ItGU\"," "\"p\":\"961BtLSIZkHO7Vu1KfaA3urcwGpISKJiTSB5Nh6npxJr9mSjzv_f" "e8VoxCX6CWGY0SEeQNUQ6ceTnAAxkSHtZJQGed598jBtxIexAWEE7oc9s9d" "b0cWu4QWIVZYXrcOTEWmK1kWN4PXmnnQknrWQF49adn81BaOXqoL-tahe7f" "faXzXe0RXuohK543ZKbuuHQ2TxqFG7CZpXiH_qn1Syao32u0V3iDFpmmCUV" "h9O2JCzfo8sAosTrnQwC0pXz3Nvr_9Cnk6bMluJoMrwB1Ywg_DPQ1WvpYHO" "URezEOqVC8Y3zrko199TMX2COKGNFgutVpnzxs2_h0PyINUmwrY4zQ\"," "\"q\":\"wGQRaxy_gBafbrVJy4f32O0a2FQHzmS--WgHhoteDoF6ZAajLcV0" "GEvb-AVmFER1Wii62BFaFJOYQIegELvnBFFzD6oHJRX7bM4m36G8J_TC1o9" "T1IFnxOpaoFDf4JWf2k7DCXClGg_zueyOD8fj8F6j2nqpOfytuLmikHcWMc" "dGTHTCRtQmvOk3pm0uk2qR0cQb5L3Ocv45tCKr55tMc6Zx3DKkMt1kmUwd2" "HFfk_0WM6R7q4LNGIjwl8dwiERppLKA8xao9i3jOOdFEfAD-Zqv8H-32cyH" "Mg6Guo4tPNAYSzcsz8nbEYPtKVVm-PDuM2cx0iaKnS8BIK2XTbzc_Q\"" "}"; /* This is a compact JWE containing the plaintext ra_ptext_1024 for the key * lws_jwe_ex_a2_jwk_json... produced by test test above running on OpenSSL. */ static char *jwe_compact_rsa_cbc_openssl = "eyJhbGciOiJSU0ExXzUiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0." "HgQBfAg2IUpExcs74-gtuSOciw6rxh2cc4x9MVRWDZKSvMqoBYKAxl6ebSxGTReHhbvhv2Rm8stKq" "OIROhWzTNGTQPnSRMzAm9x6ms39hAIGh1KCEZ47MRYkCN7hElfDVtczOCX3ZRsG9_qYEmzcY1aJ-4" "_LS3yeP0HfqKBmcfvjVLw-KqcUuHp5YXsZEvt28nA9uBlCN0ROWy_2Fs-zlQj8pDMWo5pZrffKTUX" "gUh_UJ9eC3qNyXtQSqUH-5vDeHPhxNnIJOsmJ5ZUAjxXPm-RJZRC9THg0DzGRZn9IqfP9qcanbcZ8" "iow7gjFh1EPp3MKlpZqDKbLLei1WZvz2_A." "q4STtyu4yxZfH1HNDYlYcA." "_uRfuwWO22_auSqXHORw_e_Q6PmbpC0sv0tefVKsj3Zqnh2qUBlj10kiWBMWoMMjqsClBO0nUoup4" "c7i1YSqxlCHliXru3athv_EYtg5qvC-z2co9NiFABHCHmBDrhj7CuKN5gqFDt1EbYMLwWtU3gOnQy" "dvnzfFcQs4_jKi6tRpQzbobrkkZ2p7Y_ltjA1Wmwqrp9O8DGSRnvcomqzGHcshuyxTkjLDzD8TSMR" "S1kp-miy5eDGAcp-ymWiUKN7gswy5FPjPQYzgs7Vc0n0R1ljepRHJiHaP61z_DKWXrCE6RqAVqnaw" "TjjVOXXKKF9pz9W7pZL8diLZ0Ueev6xk8wzRRsUChM5toQNzFLXsnzSDQSzfSKpRnLjYvosiEegyx" "RrwtQwEcNCXRj0aGxG6e_W79JdUJoi4blpTtrAVn_pk7SgRiU3aly1vso5tV_0kvMOcS6Hn38mqRQ" "PQxbdIpohi8C7FFabluZqGoiji8ZTM3v-2ib2vrBFj1YvoyPG1HXJsABINzo0xOkrMFNfN_oQrCSM" "Ij49N86GXmYOnu5jtZeSMXZIR2BAXnu0upXMsvtSjU8D-LJJChy0XNYoyuJar5P3YhDStdTfmn0z-" "XLwaIHWc1L9-rmW9CZey3HxCLKEnr7-FjXsXqzAArsFqn1X_sVR5HRHng5ioc7sUaRoC1S_k0XPVC" "qCjZvkbRry2cp2313DNwjl8SK-iZA0fVUZVPM7_eZfpEgB3bBTyamtAaqQeES6lcVEtpg176Mlh64" "3JCAjroJPP4eqAA3JHnDgwlO-XhlLPTNNQ5FMLBC_dp41A-H3HFlbQUR6jX3k_H4Ggqtit50EIye3" "nnKb3emFn9KVyeZCYaBecYbicEIMKW7sWLbcE_cDGqkHZcMGTOQKRiLp-xwyEu89oDGAcGBYpmC_f" "iQ2qyFfe6tQK_5nPZbtW2mudiYZ-d0YIURSTp58S_n6w3wLDUEcuZtv-nhCaFVy8oUbAztkBIK6pu" "VamKhHVLkCtOGIdNJYbLKAedhK1lQVPbrvfcSDPPkhxSx9AjKqhKA3ZPMA_UXQb6p9c33tgi_MdZX" "-jRGXwGKWBCrv4UjttFLV-a5U7NgxQIIjwfAoutXtYardFw2d5nTJRqBrw06PSqaLzQi616_b-U0g" "6bWxrFObIWrKODkGfQcXPXIQxW_4Vh6gR2GaHSi_A_5SGH0zsBtYxisbKXLK2HiZJOXBew4-am6c0" "R1jBh7QtOWpwrYWt0d_xxrWtKezeEp3FkrFkwWCgY9dT1uV8tKUuxeeGqshkrXifT4axttpkbi-qA" "eG_C6J-H29CPqScclD-A5LIg7k-KmA9hsWrXttAvoCSawNj1tv9JHq0jgP1yZytDW1DkWdCBY0au5" "4." "qqYQEaGx-lUHoO43fOXvKQ" ; static int test_jwe_r256a128_jwe_openssl(struct lws_context *context) { struct lws_jwe jwe; char temp[2048]; int n, ret = -1, temp_len = sizeof(temp); lws_jwe_init(&jwe, context); if (lws_jwk_import(&jwe.jwk, NULL, NULL, (char *)lws_jwe_ex_a2_jwk_json, strlen((char *)lws_jwe_ex_a2_jwk_json)) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } /* converts a compact serialization to jws b64 + decoded maps */ if (lws_jws_compact_decode((const char *)jwe_compact_rsa_cbc_openssl, (int)strlen((char *)jwe_compact_rsa_cbc_openssl), &jwe.jws.map, &jwe.jws.map_b64, temp, &temp_len) != 5) { lwsl_err("%s: lws_jws_compact_decode failed\n", __func__); goto bail; } n = lws_jwe_auth_and_decrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_auth_and_decrypt failed\n", __func__); goto bail; } /* allowing for trailing padding, confirm the plaintext */ if (jwe.jws.map.len[LJWE_CTXT] < sizeof(ra_ptext_1024) || lws_timingsafe_bcmp(jwe.jws.map.buf[LJWE_CTXT], ra_ptext_1024, sizeof(ra_ptext_1024))) { lwsl_err("%s: plaintext RSA/AES decrypt wrong\n", __func__); lwsl_hexdump_notice(ra_ptext_1024, sizeof(ra_ptext_1024)); lwsl_hexdump_notice(jwe.jws.map.buf[LJWE_CTXT], jwe.jws.map.len[LJWE_CTXT]); goto bail; } ret = 0; bail: lws_jwe_destroy(&jwe); if (ret) lwsl_err("%s: selftest failed +++++++++++++++++++\n", __func__); else lwsl_notice("%s: selftest OK\n", __func__); return ret; } /* This is a compact JWE containing the plaintext ra_ptext_1024 for the key * lws_jwe_ex_a2_jwk_json... produced by test test above running on mbedTLS. */ static char *jwe_compact_rsa_cbc_mbedtls = "eyJhbGciOiJSU0ExXzUiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0.Ptg-RZjEhY1dWg7T" "v72rqRoHXBeory9ePCC5cfASTz8BH7IdSLQcPeBWHQsmd13TXPjo-dxnmkWkx9AyKdvy" "K0A6oCnsP7KfbGzPwTy5eadpaaDZ3UyXIGmusLgiXGgDZ4d13voirbRQV9nQTPsagG_k" "FGRI5dKzenG2WcbUhKG-uCmypzYqjNM3LqUzdH42jjjHFOBkmK_sWSZL7Uxqq8s08hkO" "aXeUQyeM7Z8wm1bsZAvIfGri5LMcBS8P70AyENchlchZpTeACIOWk19ddLPUt-ruEcm0" "zZV7Gjap7uG06a0m3VyR3vMpKkXnBHQxko-RICU2PDmELVXg0pZWTw.-VaaDaUiynH_t" "sh2HqKISQ.vVE8j1TQinb4anJk0ArV9ccYdlUIO20vnMa7b-JGfQ7CFi_WVt6xNaqytB" "QqiTHLtAxBDIV4m9Kwid-8Kcx7BmRqu-memxHztBSvBNOYWVPTxy5I2ORGLNEbPVrFYp" "c2nm3TnHfr-_2fuw6_HEnyqv_c6ZyzU0-lHZ1pE5Cs-lrjnj4ibNcK6XHhrO3nxUjPMZ" "rO-2B_tZwCxzKsFAqD_XGROvNGWXEgxgIr09MyuwKJnw2oZ0xOF_d3FVYjK5XMONgWPo" "lyDmbP_XLSIUXbHmLxpDB5NPLN8SKRHbMV3_qw5rFRlak2C_XlR58P-Im1PQ8gMg7lgE" "IFz2DrqF4sJA5TYbQG5KCdas0SfONlP1V692dufH5D30RGsiWNSrhiyDmUNC0SeB8VqA" "bmc02pPGgzZHxa5-_xIHKm4h6fmnZFScjliBQ5W6smxQ6m2Kby0MkOdqlRYFn8qLYLmF" "vmVNe_Q5-iLNobx-hyyeeExRXfzNOY0HHEKw67ipBWwqA0JGIggCWAFa0fpA-Wt7sNl_" "gPy96nbwuXIuRoC3wuboUlDp9k2F1vC7VY6R9jdRk1VXT_O3liBIiUIRhZiqZZ75H2RV" "pLYXGrvL5G9THdRcbsg3XUt-kF4vvGQAdNmPdRmuIG1DfGDmOZnXfrG8ckTvxoKBXdQZ" "gfwfAQFgeHjltiWZTCSBV4464sn2qLZ1MP3Ku9bOjb72RCpIF60Cqssb8gTQyXQf48ZR" "OBd242Q7Ae6PePmb_TcnG3jOguNUgmhj8iTU7QUz0uJWpJjMRPJ8vK8SnYEguGHer4qT" "EocdMzRTTZB-Pr4-Ey0Hm0zeiFvjU0Qy6crjna6SKrgms4VAJT9LiicTYFPsmFBFQ0L1" "BVDiZ3NTBIv_ajvzRpBNZ0IxEH5t6W3OY0223xUF3cq8c9HhwIxMf9a2-PmZ3mVWIRnU" "nGegoVkzd2l6el8aw57v5KKYas4-EkovHntCZZ_hkZ1uHtezKq0EvjnT5xGWjPFjOZnh" "veiozAsaMSSyTny6mcI-hjvcgd--7qlqWpt_BEkp9XVkP2k7eHLM9v4rL6hhk_n6yK3w" "qKi0xDboxU5xjuBiGKb-E8um1MUEjuLqZanKSBsgU-Vwvw0gx1r-MG6BSlrgUlT2if5k" "-Wfs6iVdpK7x1zZSsetp3NEjT4DUrfmp_E_CTXhOEP0AgzpQ4Ukx5bFN3gm5gyBZw1E8" "q20Hs01OBcMJ9wenLEQVMvO_IEIkRNBMWEgoZ148As14LNOgdh1UBrF6W4pAUjYvA3WG" "Zp7uG9ooDB1RF2aaeBqoLJflqIegsvsfaNNBDJ-U6i_jLG1FSlttEhJVdXll0gMSYlXD" "O3BBil4eiUPfiksfOmsbwoIxc-3yPTivU3DPM.O_IaktJRbdV66zfhD0LQmw" ; static int test_jwe_r256a128_jwe_mbedtls(struct lws_context *context) { struct lws_jwe jwe; char temp[2048]; int n, ret = -1, temp_len = sizeof(temp); lws_jwe_init(&jwe, context); if (lws_jwk_import(&jwe.jwk, NULL, NULL, (char *)lws_jwe_ex_a2_jwk_json, strlen((char *)lws_jwe_ex_a2_jwk_json)) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } /* converts a compact serialization to jws b64 + decoded maps */ if (lws_jws_compact_decode((const char *)jwe_compact_rsa_cbc_mbedtls, (int)strlen((char *)jwe_compact_rsa_cbc_mbedtls), &jwe.jws.map, &jwe.jws.map_b64, temp, &temp_len) != 5) { lwsl_err("%s: lws_jws_compact_decode failed\n", __func__); goto bail; } n = lws_jwe_auth_and_decrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_auth_and_decrypt failed\n", __func__); goto bail; } /* allowing for trailing padding, confirm the plaintext */ if (jwe.jws.map.len[LJWE_CTXT] < sizeof(ra_ptext_1024) || lws_timingsafe_bcmp(jwe.jws.map.buf[LJWE_CTXT], ra_ptext_1024, sizeof(ra_ptext_1024))) { lwsl_err("%s: plaintext RSA/AES decrypt wrong\n", __func__); lwsl_hexdump_notice(ra_ptext_1024, sizeof(ra_ptext_1024)); lwsl_hexdump_notice(jwe.jws.map.buf[LJWE_CTXT], jwe.jws.map.len[LJWE_CTXT]); goto bail; } ret = 0; bail: lws_jwe_destroy(&jwe); if (ret) lwsl_err("%s: selftest failed +++++++++++++++++++\n", __func__); else lwsl_notice("%s: selftest OK\n", __func__); return ret; } /* A.3. Example JWE Using AES Key Wrap and AES_128_CBC_HMAC_SHA_256 * * This example encrypts the plaintext "Live long and prosper." to the * recipient using AES Key Wrap for key encryption and * AES_128_CBC_HMAC_SHA_256 for content encryption. */ /* "Live long and prosper." */ static uint8_t ex_a3_ptext[] = { 76, 105, 118, 101, 32, 108, 111, 110, 103, 32, 97, 110, 100, 32, 112, 114, 111, 115, 112, 101, 114, 46 }, *ex_a3_compact = (uint8_t *) "eyJhbGciOiJBMTI4S1ciLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0" "." "6KB707dM9YTIgHtLvtgWQ8mKwboJW3of9locizkDTHzBC2IlrT1oOQ" "." "AxY8DCtDaGlsbGljb3RoZQ" "." "KDlTtXchhZTGufMYmOYGS4HffxPSUrfmqCHXaI9wOGY" "." "U0m_YmjN04DJvceFICbCVQ", *ex_a3_key = (uint8_t *) "{\"kty\":\"oct\"," "\"k\":\"GawgguFyGrWKav7AX4VKUg\"" "}" ; static int test_jwe_a3(struct lws_context *context) { struct lws_jwe jwe; char temp[2048]; int n, ret = -1, temp_len = sizeof(temp); lws_jwe_init(&jwe, context); if (lws_jwk_import(&jwe.jwk, NULL, NULL, (char *)ex_a3_key, strlen((char *)ex_a3_key)) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } /* converts a compact serialization to jws b64 + decoded maps */ if (lws_jws_compact_decode((const char *)ex_a3_compact, (int)strlen((char *)ex_a3_compact), &jwe.jws.map, &jwe.jws.map_b64, temp, &temp_len) != 5) { lwsl_err("%s: lws_jws_compact_decode failed\n", __func__); goto bail; } n = lws_jwe_auth_and_decrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_auth_and_decrypt failed\n", __func__); goto bail; } /* allowing for trailing padding, confirm the plaintext */ if (jwe.jws.map.len[LJWE_CTXT] < sizeof(ex_a3_ptext) || lws_timingsafe_bcmp(jwe.jws.map.buf[LJWE_CTXT], ex_a3_ptext, sizeof(ex_a3_ptext))) { lwsl_err("%s: plaintext AES decrypt wrong\n", __func__); lwsl_hexdump_notice(ex_a3_ptext, sizeof(ex_a3_ptext)); lwsl_hexdump_notice(jwe.jws.map.buf[LJWE_CTXT], jwe.jws.map.len[LJWE_CTXT]); goto bail; } ret = 0; bail: lws_jwe_destroy(&jwe); if (ret) lwsl_err("%s: selftest failed +++++++++++++++++++\n", __func__); else lwsl_notice("%s: selftest OK\n", __func__); return ret; } /* JWA B.2. Test Cases for AES_192_CBC_HMAC_SHA_384 * * Unfortunately JWA just gives this test case as hex literals, not * inside a JWE. So we have to prepare the inputs "by hand". */ static uint8_t jwa_b2_ptext[] = { 0x41, 0x20, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x74, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x61, 0x6c, 0x6c, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x65, 0x6d, 0x79, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x69, 0x65, 0x6e, 0x63, 0x65 }, jwa_b2_rawkey[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, }, jwa_b2_iv[] = { 0x1a, 0xf3, 0x8c, 0x2d, 0xc2, 0xb9, 0x6f, 0xfd, 0xd8, 0x66, 0x94, 0x09, 0x23, 0x41, 0xbc, 0x04 }, jwa_b2_e[] = { 0xea, 0x65, 0xda, 0x6b, 0x59, 0xe6, 0x1e, 0xdb, 0x41, 0x9b, 0xe6, 0x2d, 0x19, 0x71, 0x2a, 0xe5, 0xd3, 0x03, 0xee, 0xb5, 0x00, 0x52, 0xd0, 0xdf, 0xd6, 0x69, 0x7f, 0x77, 0x22, 0x4c, 0x8e, 0xdb, 0x00, 0x0d, 0x27, 0x9b, 0xdc, 0x14, 0xc1, 0x07, 0x26, 0x54, 0xbd, 0x30, 0x94, 0x42, 0x30, 0xc6, 0x57, 0xbe, 0xd4, 0xca, 0x0c, 0x9f, 0x4a, 0x84, 0x66, 0xf2, 0x2b, 0x22, 0x6d, 0x17, 0x46, 0x21, 0x4b, 0xf8, 0xcf, 0xc2, 0x40, 0x0a, 0xdd, 0x9f, 0x51, 0x26, 0xe4, 0x79, 0x66, 0x3f, 0xc9, 0x0b, 0x3b, 0xed, 0x78, 0x7a, 0x2f, 0x0f, 0xfc, 0xbf, 0x39, 0x04, 0xbe, 0x2a, 0x64, 0x1d, 0x5c, 0x21, 0x05, 0xbf, 0xe5, 0x91, 0xba, 0xe2, 0x3b, 0x1d, 0x74, 0x49, 0xe5, 0x32, 0xee, 0xf6, 0x0a, 0x9a, 0xc8, 0xbb, 0x6c, 0x6b, 0x01, 0xd3, 0x5d, 0x49, 0x78, 0x7b, 0xcd, 0x57, 0xef, 0x48, 0x49, 0x27, 0xf2, 0x80, 0xad, 0xc9, 0x1a, 0xc0, 0xc4, 0xe7, 0x9c, 0x7b, 0x11, 0xef, 0xc6, 0x00, 0x54, 0xe3 }, jwa_b2_a[] = { /* "The second principle of Auguste Kerckhoffs" */ 0x54, 0x68, 0x65, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x41, 0x75, 0x67, 0x75, 0x73, 0x74, 0x65, 0x20, 0x4b, 0x65, 0x72, 0x63, 0x6b, 0x68, 0x6f, 0x66, 0x66, 0x73 }, jwa_b2_tag[] = { 0x84, 0x90, 0xac, 0x0e, 0x58, 0x94, 0x9b, 0xfe, 0x51, 0x87, 0x5d, 0x73, 0x3f, 0x93, 0xac, 0x20, 0x75, 0x16, 0x80, 0x39, 0xcc, 0xc7, 0x33, 0xd7 } ; static int test_jwa_b2(struct lws_context *context) { struct lws_jwe jwe; int n, ret = -1; char buf[2048]; lws_jwe_init(&jwe, context); /* * normally all this is interpreted from the JWE blob. But we don't * have JWE test vectors for AES_256_CBC_HMAC_SHA_512, just a standalone * one. So we have to create it all by hand. * * See test_jwe_a3 above for a more normal usage pattern. */ lws_jwk_dup_oct(&jwe.jwk, jwa_b2_rawkey, sizeof(jwa_b2_rawkey)); memcpy(buf, jwa_b2_e, sizeof(jwa_b2_e)); jwe.jws.map.buf[LJWE_IV] = (char *)jwa_b2_iv; jwe.jws.map.len[LJWE_IV] = sizeof(jwa_b2_iv); jwe.jws.map.buf[LJWE_CTXT] = buf; jwe.jws.map.len[LJWE_CTXT] = sizeof(jwa_b2_e); jwe.jws.map.buf[LJWE_ATAG] = (char *)jwa_b2_tag; jwe.jws.map.len[LJWE_ATAG] = sizeof(jwa_b2_tag); /* * Normally this comes from the JOSE header. But this test vector * doesn't have one... so... */ if (lws_gencrypto_jwe_alg_to_definition("A128KW", &jwe.jose.alg)) goto bail; if (lws_gencrypto_jwe_enc_to_definition("A192CBC-HS384", &jwe.jose.enc_alg)) goto bail; n = lws_jwe_auth_and_decrypt_cbc_hs(&jwe, jwa_b2_rawkey, jwa_b2_a, sizeof(jwa_b2_a)); if (n < 0) { lwsl_err("%s: lws_jwe_a_cbc_hs_decrypt failed\n", __func__); goto bail; } /* allowing for trailing padding, confirm the plaintext */ if (jwe.jws.map.len[LJWE_CTXT] < sizeof(jwa_b2_ptext) || lws_timingsafe_bcmp(jwe.jws.map.buf[LJWE_CTXT],jwa_b2_ptext, sizeof(jwa_b2_ptext))) { lwsl_err("%s: plaintext AES decrypt wrong\n", __func__); lwsl_hexdump_notice(jwa_b2_ptext, sizeof(jwa_b2_ptext)); lwsl_hexdump_notice(jwe.jws.map.buf[LJWE_CTXT], jwe.jws.map.len[LJWE_CTXT]); goto bail; } ret = 0; bail: lws_jwe_destroy(&jwe); if (ret) lwsl_err("%s: selftest failed +++++++++++++++++++\n", __func__); else lwsl_notice("%s: selftest OK\n", __func__); return ret; } /* JWA B.3. Test Cases for AES_256_CBC_HMAC_SHA_512 * * Unfortunately JWA just gives this test case as hex literals, not * inside a JWE. So we have to prepare the inputs "by hand". */ static uint8_t jwa_b3_ptext[] = { 0x41, 0x20, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x74, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x61, 0x6c, 0x6c, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x65, 0x6d, 0x79, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x69, 0x65, 0x6e, 0x63, 0x65 }, jwa_b3_rawkey[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f }, jwa_b3_iv[] = { 0x1a, 0xf3, 0x8c, 0x2d, 0xc2, 0xb9, 0x6f, 0xfd, 0xd8, 0x66, 0x94, 0x09, 0x23, 0x41, 0xbc, 0x04 }, jwa_b3_e[] = { 0x4a, 0xff, 0xaa, 0xad, 0xb7, 0x8c, 0x31, 0xc5, 0xda, 0x4b, 0x1b, 0x59, 0x0d, 0x10, 0xff, 0xbd, 0x3d, 0xd8, 0xd5, 0xd3, 0x02, 0x42, 0x35, 0x26, 0x91, 0x2d, 0xa0, 0x37, 0xec, 0xbc, 0xc7, 0xbd, 0x82, 0x2c, 0x30, 0x1d, 0xd6, 0x7c, 0x37, 0x3b, 0xcc, 0xb5, 0x84, 0xad, 0x3e, 0x92, 0x79, 0xc2, 0xe6, 0xd1, 0x2a, 0x13, 0x74, 0xb7, 0x7f, 0x07, 0x75, 0x53, 0xdf, 0x82, 0x94, 0x10, 0x44, 0x6b, 0x36, 0xeb, 0xd9, 0x70, 0x66, 0x29, 0x6a, 0xe6, 0x42, 0x7e, 0xa7, 0x5c, 0x2e, 0x08, 0x46, 0xa1, 0x1a, 0x09, 0xcc, 0xf5, 0x37, 0x0d, 0xc8, 0x0b, 0xfe, 0xcb, 0xad, 0x28, 0xc7, 0x3f, 0x09, 0xb3, 0xa3, 0xb7, 0x5e, 0x66, 0x2a, 0x25, 0x94, 0x41, 0x0a, 0xe4, 0x96, 0xb2, 0xe2, 0xe6, 0x60, 0x9e, 0x31, 0xe6, 0xe0, 0x2c, 0xc8, 0x37, 0xf0, 0x53, 0xd2, 0x1f, 0x37, 0xff, 0x4f, 0x51, 0x95, 0x0b, 0xbe, 0x26, 0x38, 0xd0, 0x9d, 0xd7, 0xa4, 0x93, 0x09, 0x30, 0x80, 0x6d, 0x07, 0x03, 0xb1, 0xf6, }, jwa_b3_a[] = { /* "The second principle of Auguste Kerckhoffs" */ 0x54, 0x68, 0x65, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x41, 0x75, 0x67, 0x75, 0x73, 0x74, 0x65, 0x20, 0x4b, 0x65, 0x72, 0x63, 0x6b, 0x68, 0x6f, 0x66, 0x66, 0x73 }, jws_b3_tag[] = { 0x4d, 0xd3, 0xb4, 0xc0, 0x88, 0xa7, 0xf4, 0x5c, 0x21, 0x68, 0x39, 0x64, 0x5b, 0x20, 0x12, 0xbf, 0x2e, 0x62, 0x69, 0xa8, 0xc5, 0x6a, 0x81, 0x6d, 0xbc, 0x1b, 0x26, 0x77, 0x61, 0x95, 0x5b, 0xc5 } ; static int test_jwa_b3(struct lws_context *context) { struct lws_jwe jwe; char buf[2048]; int n, ret = -1; lws_jwe_init(&jwe, context); /* * normally all this is interpreted from the JWE blob. But we don't * have JWE test vectors for AES_256_CBC_HMAC_SHA_512, just a standalone * one. So we have to create it all by hand. * * See test_jwe_a3 above for a more normal usage pattern. */ lws_jwk_dup_oct(&jwe.jwk, jwa_b3_rawkey, sizeof(jwa_b3_rawkey)); memcpy(buf, jwa_b3_e, sizeof(jwa_b3_e)); jwe.jws.map.buf[LJWE_IV] = (char *)jwa_b3_iv; jwe.jws.map.len[LJWE_IV] = sizeof(jwa_b3_iv); jwe.jws.map.buf[LJWE_CTXT] = buf; jwe.jws.map.len[LJWE_CTXT] = sizeof(jwa_b3_e); jwe.jws.map.buf[LJWE_ATAG] = (char *)jws_b3_tag; jwe.jws.map.len[LJWE_ATAG] = sizeof(jws_b3_tag); /* * Normally this comes from the JOSE header. But this test vector * doesn't feature one... */ if (lws_gencrypto_jwe_alg_to_definition("A128KW", &jwe.jose.alg)) goto bail; if (lws_gencrypto_jwe_enc_to_definition("A256CBC-HS512", &jwe.jose.enc_alg)) goto bail; n = lws_jwe_auth_and_decrypt_cbc_hs(&jwe, jwa_b3_rawkey, jwa_b3_a, sizeof(jwa_b3_a)); if (n < 0) { lwsl_err("%s: lws_jwe_a_cbc_hs_decrypt failed\n", __func__); goto bail; } /* allowing for trailing padding, confirm the plaintext */ if (jwe.jws.map.len[LJWE_CTXT] < sizeof(jwa_b3_ptext) || lws_timingsafe_bcmp(jwe.jws.map.buf[LJWE_CTXT],jwa_b3_ptext, sizeof(jwa_b3_ptext))) { lwsl_err("%s: plaintext AES decrypt wrong\n", __func__); lwsl_hexdump_notice(jwa_b3_ptext, sizeof(jwa_b3_ptext)); lwsl_hexdump_notice(jwe.jws.map.buf[LJWE_CTXT], jwe.jws.map.len[LJWE_CTXT]); goto bail; } ret = 0; bail: lws_jwe_destroy(&jwe); if (ret) lwsl_err("%s: selftest failed ++++++++++++++++++++\n", __func__); else lwsl_notice("%s: selftest OK\n", __func__); return ret; } /* JWA C. Example ECDH-ES Key Agreement Computation * * This example uses ECDH-ES Key Agreement and the Concat KDF to derive * the CEK in the manner described in Section 4.6. In this example, the * ECDH-ES Direct Key Agreement mode ("alg" value "ECDH-ES") is used to * produce an agreed-upon key for AES GCM with a 128-bit key ("enc" * value "A128GCM"). * * In this example, a producer Alice is encrypting content to a consumer * Bob. The producer (Alice) generates an ephemeral key for the key * agreement computation. * * JWA Appendix C where this comes from ONLY goes as far as to confirm the * direct derived key, it doesn't do any AES128-GCM. */ static const char *ex_jwa_c_jose = "{\"alg\":\"ECDH-ES\"," "\"enc\":\"A128GCM\"," "\"apu\":\"QWxpY2U\"," /* b64u("Alice") */ "\"apv\":\"Qm9i\"," /* b64u("Bob") */ "\"epk\":" /* public part of A's ephemeral key */ "{\"kty\":\"EC\"," "\"crv\":\"P-256\"," "\"x\":\"gI0GAILBdu7T53akrFmMyGcsF3n5dO7MmwNBHKW5SV0\"," "\"y\":\"SLW_xSffzlPWrHEVI30DHM_4egVwt3NQqeUD7nMFpps\"" "}" "}" ; static uint8_t ex_jwa_c_z[] = { 158, 86, 217, 29, 129, 113, 53, 211, 114, 131, 66, 131, 191, 132, 38, 156, 251, 49, 110, 163, 218, 128, 106, 72, 246, 218, 167, 121, 140, 254, 144, 196 }, ex_jwa_c_derived_key[] = { 86, 170, 141, 234, 248, 35, 109, 32, 92, 34, 40, 205, 113, 167, 16, 26 }; static int test_jwa_c(struct lws_context *context) { struct lws_jwe jwe; char temp[2048], *p; int ret = -1, temp_len = sizeof(temp); lws_jwe_init(&jwe, context); /* * again the JWA Appendix C test vectors are not in the form of a * complete JWE, but just the JWE JOSE header, so we must fake up the * pieces and perform just the (normally internal) key agreement step * for this test. * * See test_jwe_a3 above for a more normal usage pattern. */ if (lws_jwe_parse_jose(&jwe.jose, ex_jwa_c_jose, (int)strlen(ex_jwa_c_jose), temp, &temp_len) < 0) { lwsl_err("%s: JOSE parse failed\n", __func__); goto bail; } /* * The ephemeral key has been parsed into a jwk "jwe.jose.jwk_ephemeral" * * In this example, the ECDH-ES Direct Key Agreement mode ("alg" value * "ECDH-ES") is used to produce an agreed-upon key for AES GCM with a * 128-bit key ("enc" value "A128GCM"). */ p = lws_concat_temp(temp, temp_len); if (lws_jwa_concat_kdf(&jwe, 1, (uint8_t *)p, ex_jwa_c_z, sizeof(ex_jwa_c_z))) { lwsl_err("%s: lws_jwa_concat_kdf failed\n", __func__); goto bail; } /* allowing for trailing padding, confirm the plaintext */ if (lws_timingsafe_bcmp(p, ex_jwa_c_derived_key, sizeof(ex_jwa_c_derived_key))) { lwsl_err("%s: ECDH-ES direct derived key wrong\n", __func__); lwsl_hexdump_notice(ex_jwa_c_derived_key, sizeof(ex_jwa_c_derived_key)); lwsl_hexdump_notice(p, sizeof(ex_jwa_c_derived_key)); goto bail; } ret = 0; bail: lws_jwe_destroy(&jwe); if (ret) lwsl_err("%s: selftest failed +++++++++++++++++++\n", __func__); else lwsl_notice("%s: selftest OK\n", __func__); return ret; } /* * ECDH-ES Homebrew Encryption test */ static const char /* peer key */ *ecdhes_t1_peer_p256_public_key = /* as below but with d removed */ "{" "\"crv\":\"P-256\"," "\"kty\":\"EC\"," "\"x\":\"ySlIGttmXG80WPjDO01QaXg7oAzW3NE-a-GF0NDGk_E\"," "\"y\":\"i08k5z4ppqgtnLK8lh5qw4qp2FhxPdGjovgilajluuw\"" "}", *ecdhes_t1_peer_p256_private_key = /* created by ./lws-crypto-jwk -t EC */ "{" "\"crv\":\"P-256\"," "\"d\":\"ldszv0_cGFMkjxaPspGCP6X0NAaVCVeK48oH4RzT2T0\"," "\"kty\":\"EC\"," "\"x\":\"ySlIGttmXG80WPjDO01QaXg7oAzW3NE-a-GF0NDGk_E\"," "\"y\":\"i08k5z4ppqgtnLK8lh5qw4qp2FhxPdGjovgilajluuw\"" "}", *ecdhes_t1_peer_p384_public_key = /* as below but with d removed */ "{\"crv\":\"P-384\"," "\"kty\":\"EC\"," "\"x\":\"injKcygDoG1AuP044ct88r_2DNinHr1CGqy4q2Sy5yo034Y" "7yQ5_NT-lEUXrzlIW\"," "\"y\":\"y52QaJLhVm-ts8xa1jL8GkmwGm_dX6xV1PSq4s3pbwx2Hu9" "X29z5WYcTPFOCPtwJ\"}", *ecdhes_t1_peer_p384_private_key = /* created by ./lws-crypto-jwk -t EC -v "P-384" */ "{\"crv\":\"P-384\"," "\"d\":\"jYGze6ZwZxrflVx_I2lYWNf9GkfbeQNRwQCdtZhBlb85lk-" "SAvaZuNiRUs_eWmPQ\"," "\"kty\":\"EC\"," "\"x\":\"injKcygDoG1AuP044ct88r_2DNinHr1CGqy4q2Sy5yo034Y" "7yQ5_NT-lEUXrzlIW\"," "\"y\":\"y52QaJLhVm-ts8xa1jL8GkmwGm_dX6xV1PSq4s3pbwx2Hu9" "X29z5WYcTPFOCPtwJ\"}", *ecdhes_t1_peer_p521_public_key = /* as below but with d removed */ "{\"crv\":\"P-521\"," "\"kty\":\"EC\"," "\"x\":\"AYe0gAkPzzjeQW5Ek9tVrWdfi0u6k7LVUru-b2x7V9EM3d" "L4SbQiS1p2j2gmZ2a6aDoKDRU_2E4u9EQrlswlty-g\"," "\"y\":\"AEAIIRkVL0WhtDlDSM7dciBtL1dOo5UPiW7ixIOv5K75Mo" "uFNWO7cFmcxaCOn9459ex0giVyptmX_956C_DWabG6\"}", *ecdhes_t1_peer_p521_private_key = /* created by ./lws-crypto-jwk -t EC -v "P-521" */ "{\"crv\":\"P-521\"," "\"d\":\"AUer7_-qJtQtDWN6CMeGB20rzTa648kpsfidTOu3lnn6__" "yOXkMj1yTYUBjVOnUjGHiTU1rCGsw4CyF-1nDRe7SM\"," "\"kty\":\"EC\"," "\"x\":\"AYe0gAkPzzjeQW5Ek9tVrWdfi0u6k7LVUru-b2x7V9EM3d" "L4SbQiS1p2j2gmZ2a6aDoKDRU_2E4u9EQrlswlty-g\"," "\"y\":\"AEAIIRkVL0WhtDlDSM7dciBtL1dOo5UPiW7ixIOv5K75Mo" "uFNWO7cFmcxaCOn9459ex0giVyptmX_956C_DWabG6\"}", *ecdhes_t1_jose_hdr_es_128 = "{\"alg\":\"ECDH-ES\",\"enc\":\"A128CBC-HS256\"}", *ecdhes_t1_jose_hdr_es_192 = "{\"alg\":\"ECDH-ES\",\"enc\":\"A192CBC-HS384\"}", *ecdhes_t1_jose_hdr_es_256 = "{\"alg\":\"ECDH-ES\",\"enc\":\"A256CBC-HS512\"}", *ecdhes_t1_jose_hdr_esakw128_128 = "{\"alg\":\"ECDH-ES+A128KW\",\"enc\":\"A128CBC-HS256\"}", *ecdhes_t1_jose_hdr_esakw192_192 = "{\"alg\":\"ECDH-ES+A192KW\",\"enc\":\"A192CBC-HS384\"}", *ecdhes_t1_jose_hdr_esakw256_256 = "{\"alg\":\"ECDH-ES+A256KW\",\"enc\":\"A256CBC-HS512\"}", *ecdhes_t1_plaintext = "This test plaintext is exactly 64 bytes long when unencrypted..." ; static int test_ecdhes_t1(struct lws_context *context, const char *jose_hdr, const char *peer_pubkey, const char *peer_privkey) { char temp[3072], compact[2048]; int n, ret = -1, temp_len = sizeof(temp); struct lws_jwe jwe; lws_jwe_init(&jwe, context); /* read and interpret our canned JOSE header, setting the algorithm */ if (lws_jws_dup_element(&jwe.jws.map, LJWS_JOSE, lws_concat_temp(temp, temp_len), &temp_len, jose_hdr, strlen(jose_hdr), 0)) goto bail; if (lws_jwe_parse_jose(&jwe.jose, jose_hdr, (int)strlen(jose_hdr), temp, &temp_len) < 0) { lwsl_err("%s: JOSE parse failed\n", __func__); goto bail; } /* for ecdh-es encryption, we need the peer's pubkey */ if (lws_jwk_import(&jwe.jwk, NULL, NULL, (char *)peer_pubkey, strlen((char *)peer_pubkey)) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } /* * dup the plaintext into the ciphertext element, it will be * encrypted in-place to a ciphertext of the same length + padding */ if (lws_jws_dup_element(&jwe.jws.map, LJWE_CTXT, lws_concat_temp(temp, temp_len), &temp_len, ecdhes_t1_plaintext, strlen(ecdhes_t1_plaintext), lws_gencrypto_padded_length(LWS_AES_CBC_BLOCKLEN, strlen(ecdhes_t1_plaintext)))) { lwsl_notice("%s: Not enough temp space for ptext\n", __func__); goto bail; } /* * perform the actual encryption */ n = lws_jwe_encrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_encrypt failed\n", __func__); goto bail; } /* * format for output */ n = lws_jwe_render_flattened(&jwe, compact, sizeof(compact)); if (n < 0) { lwsl_err("%s: lws_jwe_render_compact failed: %d\n", __func__, n); goto bail; } // puts(compact); n = lws_jwe_render_compact(&jwe, compact, sizeof(compact)); if (n < 0) { lwsl_err("%s: lws_jwe_render_compact failed: %d\n", __func__, n); goto bail; } // puts(compact); /* okay, let's try to decrypt the whole thing, as the recipient * getting the compact. jws->jwk needs to be our private key. */ lws_jwe_destroy(&jwe); temp_len = sizeof(temp); lws_jwe_init(&jwe, context); if (lws_jwk_import(&jwe.jwk, NULL, NULL, (char *)peer_privkey, strlen((char *)peer_privkey)) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } /* converts a compact serialization to jws b64 + decoded maps */ if (lws_jws_compact_decode(compact, (int)strlen(compact), &jwe.jws.map, &jwe.jws.map_b64, temp, &temp_len) != 5) { lwsl_err("%s: lws_jws_compact_decode failed\n", __func__); goto bail; } n = lws_jwe_auth_and_decrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_auth_and_decrypt failed\n", __func__); goto bail; } ret = 0; bail: lws_jwe_destroy(&jwe); if (ret) lwsl_err("%s: %s selftest failed +++++++++++++++++++\n", __func__, jose_hdr); else lwsl_notice("%s: %s selftest OK\n", __func__, jose_hdr); return ret; } /* AES Key Wrap and AES_XXX_CBC_HMAC_SHA_YYY variations * * These were created using the node-jose node.js package */ static const char *akw_ptext = "plaintext0123456", *akw_ct_128_128 = "eyJhbGciOiJBMTI4S1ciLCJlbmMiOiJBMTI4Q0JDLUhTMjU2Ii" "wia2lkIjoiLTRXTEpQNWNrYUxBUFFFNXkwYXhLT0JUSTlFTngxUXBCa0toNkdOY2loOC" "J9.h6oNSEgz3LwIMndEkPEa8H7_5zy0hh8TaU_1yWoNtu4Dh_WJpEgx9g.j7TYjj8wB0" "RS6rclTWYmqw.zm3tPzuWhXoD7IsAWbA0xz-AJXvE9gydWPRBTaO40sQ.Okf7ttWDLPM" "wIj1kUyUO_A", *akw_ct_128_192 = "eyJhbGciOiJBMTI4S1ciLCJlbmMiOiJBMTkyQ0JDLUhTMzg0Ii" "wia2lkIjoiLTRXTEpQNWNrYUxBUFFFNXkwYXhLT0JUSTlFTngxUXBCa0toNkdOY2loOC" "J9.XkRTu4nP3b0KZxXjkjdHEnbf6AWZUmFvpsqZLuLxKcrONqDUsnYasnVuo6U0QKRUm" "cyBRtSPGW4.MzNxxoOp8JR2AHoLNve-vw.rdxgo6InRAxk3afG02_75l58u5m6KYHd3h" "LH16ksnZE.v7BLKaRZIwhUPhhBRTd8yPwH0xa1fOft", *akw_ct_128_256 = "eyJhbGciOiJBMTI4S1ciLCJlbmMiOiJBMjU2Q0JDLUhTNTEyIi" "wia2lkIjoiLTRXTEpQNWNrYUxBUFFFNXkwYXhLT0JUSTlFTngxUXBCa0toNkdOY2loOC" "J9.mueR-8XzXs2RyvzzvghpIpGS1mGl7vkSjJDF5zqhH8-ektBpCXSd7R7MS5nh2-Xf_" "8XDym1gn1QEQh5bDI3GPESnSN1TJR-h.g6plL_5L2BD8wcjZS7X79A.UTndfTFhGFaVZ" "vWqPkV7dN00gckesd_7UylosVDqjwU.-rgi0jkYuCZDMwUVLxN6e6x8fXw2U0u4-vL8u" "Kb__S8", *akw_ct_192_128 = "eyJhbGciOiJBMTkyS1ciLCJlbmMiOiJBMTI4Q0JDLUhTMjU2Ii" "wia2lkIjoiai10RWp2Q2JyNVlUZWtKUXlES3kyQXh5cjBWeUlUWXk4S3IycjB0cy1USS" "J9.mEURnj2NvPa3TU0uR8mcm2cMd33Y6iYYZ_LFrYS_Gz49gcdxZpdk1Q.v3csq81X9o" "mI-bcp6i-FTQ.EgroRqmqNfeH7XC9msLap1IGcqvc09SlnI4PO6RQqS0.hDi57mXD3vX" "dx2r4Kwnv9w", *akw_ct_192_192 = "eyJhbGciOiJBMTkyS1ciLCJlbmMiOiJBMTkyQ0JDLUhTMzg0Ii" "wia2lkIjoiai10RWp2Q2JyNVlUZWtKUXlES3kyQXh5cjBWeUlUWXk4S3IycjB0cy1USS" "J9.QHgtusQdP7Zvw9tsCZNkJyEmzg6KUaaIyTb2BXB0ng9mxSUIQ7y_6oqasYKBUJgBn" "Koru-3CXOE.ZZXcGY35mmlAb4-IgA5XlQ.AuG2GRPeYJ80_4XoYAUgXbVY65ZQ689Grn" "x8RCNQdfc.UjfgDr4z3PGQBdftWT2gqx1Egfd9PUR4", *akw_ct_192_256 = "eyJhbGciOiJBMTkyS1ciLCJlbmMiOiJBMjU2Q0JDLUhTNTEyIi" "wia2lkIjoiai10RWp2Q2JyNVlUZWtKUXlES3kyQXh5cjBWeUlUWXk4S3IycjB0cy1USS" "J9.G6DziymYyU3-6unIa-Oz-0lksH05OJFDZKkFuShMuoazEMZ5ZH2S_65qD-pjpf8aN" "2thOVOYT0mdtgFM0ARUfx8ZLhRFCcn1.yEKK4eARZIo9WtGVcQmgDQ.ovan2NXDmt_Ka" "SsVJmhIMQqVz6meqz1oExfVcY8vdzA.R3T4lQIKX5cc2Ktv42e9u5PR--v_w2uK7F4Wp" "Sr5SQ8", *akw_ct_256_128 = "eyJhbGciOiJBMjU2S1ciLCJlbmMiOiJBMTI4Q0JDLUhTMjU2Ii" "wia2lkIjoiSDVwSzRRUU81U0tHbDA3UXhIdk9YMzVqS2FJbzA2NXVLdWRubVZFZVpJYy" "J9.ZLWrz5CE7Iav2db37VL9ZABeaRVrV9af-7-46Loc9M2D0SPSNtsxpg.ktk-VU8-5b" "XRvW_A6IqDjQ.xZVIglOhadDBHUYuxPx6Wr_YzOo0qCDH24xVe58qP9Q.pO_tME930wO" "u5fNJ8ubGrw", *akw_ct_256_192 = "eyJhbGciOiJBMjU2S1ciLCJlbmMiOiJBMTkyQ0JDLUhTMzg0Ii" "wia2lkIjoiSDVwSzRRUU81U0tHbDA3UXhIdk9YMzVqS2FJbzA2NXVLdWRubVZFZVpJYy" "J9.fcblAVZ7VOXtyhymqxDBr-zgvId18p3AURNbhH5FmAvKNuUVU37xPkz6BrFopLP0J" "jqXaTyyg1s.fprTe2e0esH2w7EnLEgBZQ.g1BI0U1aKSM_JBEp9jC4BxBaFXVG5BW4nl" "bhX1MDeLo.XOLanrIkitLLDRONnfM05avahl_lJ_UY", *akw_ct_256_256 = "eyJhbGciOiJBMjU2S1ciLCJlbmMiOiJBMjU2Q0JDLUhTNTEyIi" "wia2lkIjoiSDVwSzRRUU81U0tHbDA3UXhIdk9YMzVqS2FJbzA2NXVLdWRubVZFZVpJYy" "J9.SpizfgtzQLJCCnYnUmNfiMMTyL8iIDi8OyUDrO00KJtfwJdNAcs-NuYQkLKx6PlDJ" "IGjucT4-IuA8k_Oc752kq1BzTHMZ-Mo.go-e8xpQoCmLD5RBQw7ruA.WqkEdM6T1_z5F" "C-8eGQfGjos7cHPy1ecZk1Ep-TYgXo.bZVHhIpe2PbjguQlK_afkYDlVmEtRAe3LUJUX" "4STOtU", *akw_key_128 = "{\"k\":\"JjVJVh8JsXvKf9qgHHWWBA\",\"kty\":\"oct\"}", *akw_key_192 = "{\"k\":\"BYF6urCMDRMKFXXRxXrDSVtW71AUZghj\",\"kty\":\"oct\"}", *akw_key_256 = "{\"k\":\"cSHyZXGEfnlgKud21cM6tAxRyXnK6xbWRTsyLUegTMk\",\"kty\":\"oct\"}" ; static int test_akw_decrypt(struct lws_context *context, const char *test_name, const char *ciphertext, const char *key) { struct lws_jwe jwe; char temp[2048]; int n, ret = -1, temp_len = sizeof(temp); lws_jwe_init(&jwe, context); if (lws_jwk_import(&jwe.jwk, NULL, NULL, key, strlen(key)) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } /* converts a compact serialization to jws b64 + decoded maps */ if (lws_jws_compact_decode(ciphertext, (int)strlen(ciphertext), &jwe.jws.map, &jwe.jws.map_b64, temp, &temp_len) != 5) { lwsl_err("%s: lws_jws_compact_decode failed\n", __func__); goto bail; } n = lws_jwe_auth_and_decrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_auth_and_decrypt failed\n", __func__); goto bail; } /* allowing for trailing padding, confirm the plaintext */ if (jwe.jws.map.len[LJWE_CTXT] < strlen(akw_ptext) || lws_timingsafe_bcmp(jwe.jws.map.buf[LJWE_CTXT], akw_ptext, (uint32_t)strlen(akw_ptext))) { lwsl_err("%s: plaintext AES decrypt wrong\n", __func__); lwsl_hexdump_notice(akw_ptext, strlen(akw_ptext)); lwsl_hexdump_notice(jwe.jws.map.buf[LJWE_CTXT], jwe.jws.map.len[LJWE_CTXT]); goto bail; } ret = 0; bail: lws_jwe_destroy(&jwe); if (ret) lwsl_err("%s: selftest %s failed +++++++++++++++++++\n", __func__, test_name); else lwsl_notice("%s: selftest %s OK\n", __func__, test_name); return ret; } static int test_akw_encrypt(struct lws_context *context, const char *test_name, const char *alg, const char *enc, const char *ciphertext, const char *key, char *compact, int compact_len) { struct lws_jwe jwe; char temp[4096]; int ret = -1, n, temp_len = sizeof(temp); lws_jwe_init(&jwe, context); if (lws_jwk_import(&jwe.jwk, NULL, NULL, key, strlen(key)) < 0) { lwsl_notice("%s: Failed to decode JWK test key\n", __func__); goto bail; } if (lws_gencrypto_jwe_alg_to_definition(alg, &jwe.jose.alg)) { lwsl_err("Unknown cipher alg %s\n", alg); goto bail; } if (lws_gencrypto_jwe_enc_to_definition(enc, &jwe.jose.enc_alg)) { lwsl_err("Unknown payload enc alg %s\n", enc); goto bail; } /* we require a JOSE-formatted header to do the encryption */ jwe.jws.map.buf[LJWS_JOSE] = temp; jwe.jws.map.len[LJWS_JOSE] = (uint32_t)lws_snprintf(temp, (unsigned int)temp_len, "{\"alg\":\"%s\", \"enc\":\"%s\"}", alg, enc); temp_len -= (int)jwe.jws.map.len[LJWS_JOSE]; /* * dup the plaintext into the ciphertext element, it will be * encrypted in-place to a ciphertext of the same length + padding */ if (lws_jws_dup_element(&jwe.jws.map, LJWE_CTXT, lws_concat_temp(temp, temp_len), &temp_len, akw_ptext, strlen(akw_ptext), lws_gencrypto_padded_length(LWS_AES_CBC_BLOCKLEN, strlen(akw_ptext)))) { lwsl_notice("%s: Not enough temp space for ptext\n", __func__); goto bail; } /* CEK size is determined by hash / hmac size */ n = lws_gencrypto_bits_to_bytes(jwe.jose.enc_alg->keybits_fixed); if (lws_jws_randomize_element(context, &jwe.jws.map, LJWE_EKEY, lws_concat_temp(temp, temp_len), &temp_len, (unsigned int)n, LWS_JWE_LIMIT_KEY_ELEMENT_BYTES)) { lwsl_err("Problem getting random\n"); goto bail; } n = lws_jwe_encrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_encrypt failed\n", __func__); goto bail; } n = lws_jwe_render_compact(&jwe, compact, (unsigned int)compact_len); if (n < 0) { lwsl_err("%s: lws_jwe_render_compact failed: %d\n", __func__, n); goto bail; } ret = 0; bail: lws_jwe_destroy(&jwe); if (ret) lwsl_err("%s: selftest %s failed +++++++++++++++++++\n", __func__, test_name); else lwsl_notice("%s: selftest %s OK\n", __func__, test_name); return ret; } /* * Check we can handle multi-recipient JWE */ static char *complete = "{" "\"protected\":" "\"eyJlbmMiOiJBMTI4Q0JDLUhTMjU2In0\"," "\"unprotected\":" "{\"jku\":\"https://server.example.com/keys.jwks\"}," "\"recipients\":[" "{\"header\":" "{\"alg\":\"RSA1_5\",\"kid\":\"2011-04-29\"}," "\"encrypted_key\":" "\"UGhIOguC7IuEvf_NPVaXsGMoLOmwvc1GyqlIKOK1nN94nHPoltGRhWhw7Zx0-" "kFm1NJn8LE9XShH59_i8J0PH5ZZyNfGy2xGdULU7sHNF6Gp2vPLgNZ__deLKx" "GHZ7PcHALUzoOegEI-8E66jX2E4zyJKx-YxzZIItRzC5hlRirb6Y5Cl_p-ko3" "YvkkysZIFNPccxRU7qve1WYPxqbb2Yw8kZqa2rMWI5ng8OtvzlV7elprCbuPh" "cCdZ6XDP0_F8rkXds2vE4X-ncOIM8hAYHHi29NX0mcKiRaD0-D-ljQTP-cFPg" "wCp6X-nZZd9OHBv-B3oWh2TbqmScqXMR4gp_A\"}," "{\"header\":" "{\"alg\":\"A128KW\",\"kid\":\"7\"}," "\"encrypted_key\":" "\"6KB707dM9YTIgHtLvtgWQ8mKwboJW3of9locizkDTHzBC2IlrT1oOQ\"}]," "\"iv\":" "\"AxY8DCtDaGlsbGljb3RoZQ\"," "\"ciphertext\":" "\"KDlTtXchhZTGufMYmOYGS4HffxPSUrfmqCHXaI9wOGY\"," "\"tag\":" "\"Mz-VPPyU4RlcuYv1IwIvzw\"" "}\"" ; static int test_jwe_json_complete(struct lws_context *context) { struct lws_jwe jwe; char temp[4096]; int ret = -1, temp_len = sizeof(temp); lws_jwe_init(&jwe, context); if (lws_jwe_parse_jose(&jwe.jose, complete, (int)strlen(complete), temp, &temp_len) < 0) { lwsl_err("%s: JOSE parse failed\n", __func__); goto bail; } if (jwe.jose.recipients != 2) { lwsl_err("%s: wrong recipients count %d\n", __func__, jwe.jose.recipients); goto bail; } ret = 0; bail: lws_jwe_destroy(&jwe); if (ret) lwsl_err("%s: selftest failed +++++++++++++++++++\n", __func__); else lwsl_notice("%s: selftest OK\n", __func__); return ret; } int test_jwe(struct lws_context *context) { char compact[4096]; int n = 0; n |= test_jwe_json_complete(context); n |= test_ecdhes_t1(context, ecdhes_t1_jose_hdr_es_128, ecdhes_t1_peer_p256_public_key, ecdhes_t1_peer_p256_private_key); n |= test_ecdhes_t1(context, ecdhes_t1_jose_hdr_es_192, ecdhes_t1_peer_p384_public_key, ecdhes_t1_peer_p384_private_key); n |= test_ecdhes_t1(context, ecdhes_t1_jose_hdr_es_256, ecdhes_t1_peer_p521_public_key, ecdhes_t1_peer_p521_private_key); n |= test_ecdhes_t1(context, ecdhes_t1_jose_hdr_esakw128_128, ecdhes_t1_peer_p256_public_key, ecdhes_t1_peer_p256_private_key); n |= test_ecdhes_t1(context, ecdhes_t1_jose_hdr_esakw192_192, ecdhes_t1_peer_p384_public_key, ecdhes_t1_peer_p384_private_key); n |= test_ecdhes_t1(context, ecdhes_t1_jose_hdr_esakw256_256, ecdhes_t1_peer_p521_public_key, ecdhes_t1_peer_p521_private_key); n |= test_jwe_a1(context); n |= test_jwe_a2(context); n |= test_jwe_ra_ptext_1024(context, (char *)lws_jwe_ex_a2_jwk_json, (int)strlen((char *)lws_jwe_ex_a2_jwk_json)); n |= test_jwe_r256a192_ptext(context, (char *)lws_jwe_ex_a2_jwk_json, (int)strlen((char *)lws_jwe_ex_a2_jwk_json)); n |= test_jwe_r256a256_ptext(context, (char *)lws_jwe_ex_a2_jwk_json, (int)strlen((char *)lws_jwe_ex_a2_jwk_json)); n |= test_jwe_ra_ptext_1024(context, (char *)rsa_key_2048, (int)strlen((char *)rsa_key_2048)); n |= test_jwe_r256a192_ptext(context, (char *)rsa_key_2048, (int)strlen((char *)rsa_key_2048)); n |= test_jwe_r256a256_ptext(context, (char *)rsa_key_2048, (int)strlen((char *)rsa_key_2048)); n |= test_jwe_ra_ptext_1024(context, (char *)rsa_key_4096, (int)strlen((char *)rsa_key_4096)); n |= test_jwe_r256a192_ptext(context, (char *)rsa_key_4096, (int)strlen((char *)rsa_key_4096)); n |= test_jwe_r256a256_ptext(context, (char *)rsa_key_4096, (int)strlen((char *)rsa_key_4096)); n |= test_jwe_ra_ptext_1024(context, (char *)rsa_key_4096_no_optional, (int)strlen((char *)rsa_key_4096_no_optional)); n |= test_jwe_r256a192_ptext(context, (char *)rsa_key_4096_no_optional, (int)strlen((char *)rsa_key_4096_no_optional)); n |= test_jwe_r256a256_ptext(context, (char *)rsa_key_4096_no_optional, (int)strlen((char *)rsa_key_4096_no_optional)); /* AESKW decrypt all variations */ n |= test_akw_decrypt(context, "d-a128kw_128", akw_ct_128_128, akw_key_128); n |= test_akw_decrypt(context, "d-a128kw_192", akw_ct_128_192, akw_key_128); n |= test_akw_decrypt(context, "d-a128kw_256", akw_ct_128_256, akw_key_128); n |= test_akw_decrypt(context, "d-a192kw_128", akw_ct_192_128, akw_key_192); n |= test_akw_decrypt(context, "d-a192kw_192", akw_ct_192_192, akw_key_192); n |= test_akw_decrypt(context, "d-a192kw_256", akw_ct_192_256, akw_key_192); n |= test_akw_decrypt(context, "d-a256kw_128", akw_ct_256_128, akw_key_256); n |= test_akw_decrypt(context, "d-a256kw_192", akw_ct_256_192, akw_key_256); n |= test_akw_decrypt(context, "d-a256kw_256", akw_ct_256_256, akw_key_256); /* AESKW encrypt then confirm decrypt */ if (!test_akw_encrypt(context, "ed-128kw_128", "A128KW", "A128CBC-HS256", akw_ptext, akw_key_128, compact, sizeof(compact))) n |= test_akw_decrypt(context, "ed-128kw_128", compact, akw_key_128); else n = -1; if (!test_akw_encrypt(context, "ed-128kw_192", "A128KW", "A192CBC-HS384", akw_ptext, akw_key_128, compact, sizeof(compact))) n |= test_akw_decrypt(context, "ed-128kw_192", compact, akw_key_128); else n = -1; if (!test_akw_encrypt(context, "ed-128kw_256", "A128KW", "A256CBC-HS512", akw_ptext, akw_key_128, compact, sizeof(compact))) n |= test_akw_decrypt(context, "ed-128kw_256", compact, akw_key_128); else n = -1; if (!test_akw_encrypt(context, "ed-192kw_128", "A192KW", "A128CBC-HS256", akw_ptext, akw_key_192, compact, sizeof(compact))) n |= test_akw_decrypt(context, "ed-192kw_128", compact, akw_key_192); else n = -1; if (!test_akw_encrypt(context, "ed-192kw_192", "A192KW", "A192CBC-HS384", akw_ptext, akw_key_192, compact, sizeof(compact))) n |= test_akw_decrypt(context, "ed-192kw_192", compact, akw_key_192); else n = -1; if (!test_akw_encrypt(context, "ed-192kw_256", "A192KW", "A256CBC-HS512", akw_ptext, akw_key_192, compact, sizeof(compact))) n |= test_akw_decrypt(context, "ed-192kw_256", compact, akw_key_192); else n = -1; if (!test_akw_encrypt(context, "ed-256kw_128", "A256KW", "A128CBC-HS256", akw_ptext, akw_key_256, compact, sizeof(compact))) n |= test_akw_decrypt(context, "ed-256kw_128", compact, akw_key_256); else n = -1; if (!test_akw_encrypt(context, "ed-256kw_192", "A256KW", "A192CBC-HS384", akw_ptext, akw_key_256, compact, sizeof(compact))) n |= test_akw_decrypt(context, "ed-256kw_192", compact, akw_key_256); else n = -1; if (!test_akw_encrypt(context, "ed-256kw_256", "A256KW", "A256CBC-HS512", akw_ptext, akw_key_256, compact, sizeof(compact))) n |= test_akw_decrypt(context, "ed-256kw_256", compact, akw_key_256); else n = -1; n |= test_jwe_r256a128_jwe_openssl(context); n |= test_jwe_r256a128_jwe_mbedtls(context); n |= test_jwe_a3(context); n |= test_jwa_b2(context); n |= test_jwa_b3(context); n |= test_jwa_c(context); return n; } libwebsockets-4.3.5/minimal-examples/api-tests/api-test-jose/jwk.c000066400000000000000000000411471476025525100251770ustar00rootroot00000000000000/* * lws-api-test-jose - RFC7517 jwk tests * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include static uint8_t *lws_jwe_ex_a1_jwk_json = (uint8_t *) /* EC + RSA public keys */ "{\"keys\":" "[" "{\"kty\":\"EC\"," "\"crv\":\"P-256\"," "\"x\":\"MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4\"," "\"y\":\"4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM\"," "\"use\":\"enc\"," "\"kid\":\"1\"}," "{\"kty\":\"RSA\"," "\"n\": \"0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx" "4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMs" "tn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2" "QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbI" "SD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqb" "w0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw\"," "\"e\":\"AQAB\"," "\"alg\":\"RS256\"," "\"kid\":\"2011-04-29\"}" "]" "}", *lws_jwe_ex_a2_jwk_json = (uint8_t *) /* EC + RSA private keys */ "{\"keys\":" "[" "{\"kty\":\"EC\"," "\"crv\":\"P-256\"," "\"x\":\"MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4\"," "\"y\":\"4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM\"," "\"d\":\"870MB6gfuTJ4HtUnUvYMyJpr5eUZNP4Bk43bVdj3eAE\"," "\"use\":\"enc\"," "\"kid\":\"1\"}," "{\"kty\":\"RSA\"," "\"n\":\"0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx4" "cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMst" "n64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2Q" "vzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbIS" "D08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqbw" "0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw\"," "\"e\":\"AQAB\"," "\"d\":\"X4cTteJY_gn4FYPsXB8rdXix5vwsg1FLN5E3EaG6RJoVH-HLLKD9" "M7dx5oo7GURknchnrRweUkC7hT5fJLM0WbFAKNLWY2vv7B6NqXSzUvxT0_YSfqij" "wp3RTzlBaCxWp4doFk5N2o8Gy_nHNKroADIkJ46pRUohsXywbReAdYaMwFs9tv8d" "_cPVY3i07a3t8MN6TNwm0dSawm9v47UiCl3Sk5ZiG7xojPLu4sbg1U2jx4IBTNBz" "nbJSzFHK66jT8bgkuqsk0GjskDJk19Z4qwjwbsnn4j2WBii3RL-Us2lGVkY8fkFz" "me1z0HbIkfz0Y6mqnOYtqc0X4jfcKoAC8Q\"," "\"p\":\"83i-7IvMGXoMXCskv73TKr8637FiO7Z27zv8oj6pbWUQyLPQBQxtPV" "nwD20R-60eTDmD2ujnMt5PoqMrm8RfmNhVWDtjjMmCMjOpSXicFHj7XOuVIYQyqV" "WlWEh6dN36GVZYk93N8Bc9vY41xy8B9RzzOGVQzXvNEvn7O0nVbfs\"," "\"q\":\"3dfOR9cuYq-0S-mkFLzgItgMEfFzB2q3hWehMuG0oCuqnb3vobLyum" "qjVZQO1dIrdwgTnCdpYzBcOfW5r370AFXjiWft_NGEiovonizhKpo9VVS78TzFgx" "kIdrecRezsZ-1kYd_s1qDbxtkDEgfAITAG9LUnADun4vIcb6yelxk\"," "\"dp\":\"G4sPXkc6Ya9y8oJW9_ILj4xuppu0lzi_H7VTkS8xj5SdX3coE0oim" "YwxIi2emTAue0UOa5dpgFGyBJ4c8tQ2VF402XRugKDTP8akYhFo5tAA77Qe_Nmtu" "YZc3C3m3I24G2GvR5sSDxUyAN2zq8Lfn9EUms6rY3Ob8YeiKkTiBj0\"," "\"dq\":\"s9lAH9fggBsoFR8Oac2R_E2gw282rT2kGOAhvIllETE1efrA6huUU" "vMfBcMpn8lqeW6vzznYY5SSQF7pMdC_agI3nG8Ibp1BUb0JUiraRNqUfLhcQb_d9" "GF4Dh7e74WbRsobRonujTYN1xCaP6TO61jvWrX-L18txXw494Q_cgk\"," "\"qi\":\"GyM_p6JrXySiz1toFgKbWV-JdI3jQ4ypu9rbMWx3rQJBfmt0FoYzg" "UIZEVFEcOqwemRN81zoDAaa-Bk0KWNGDjJHZDdDmFhW3AN7lI-puxk_mHZGJ11rx" "yR8O55XLSe3SPmRfKwZI6yU24ZxvQKFYItdldUKGzO6Ia6zTKhAVRU\"," "\"alg\":\"RS256\"," "\"kid\":\"2011-04-29\"}" "]" "}", *lws_jwe_ex_a3_jwk_json = (uint8_t *) /* oct symmetric keys */ "{\"keys\":" "[" "{\"kty\":\"oct\"," "\"alg\":\"A128KW\"," "\"k\":\"GawgguFyGrWKav7AX4VKUg\"}," "{\"kty\":\"oct\"," "\"k\":\"AyM1SysPpbyDfgZld3umj1qzKObwVMkoqQ-EstJQLr_T-1qS0gZH75" "aKtMN3Yj0iPS4hcgUuTwjAzZr1Z9CAow\"," "\"kid\":\"HMAC key used in JWS spec Appendix A.1 example\"}" "]" "}", *lws_jwe_ex_b_jwk_json = (uint8_t *) /* x5c example (no parent JSON) */ "{\"kty\":\"RSA\"," "\"use\":\"sig\"," "\"kid\":\"1b94c\"," "\"n\":\"vrjOfz9Ccdgx5nQudyhdoR17V-IubWMeOZCwX_jj0hgAsz2J_pqYW08" "PLbK_PdiVGKPrqzmDIsLI7sA25VEnHU1uCLNwBuUiCO11_-7dYbsr4iJmG0Q" "u2j8DsVyT1azpJC_NG84Ty5KKthuCaPod7iI7w0LK9orSMhBEwwZDCxTWq4a" "YWAchc8t-emd9qOvWtVMDC2BXksRngh6X5bUYLy6AyHKvj-nUy1wgzjYQDwH" "MTplCoLtU-o-8SNnZ1tmRoGE9uJkBLdh5gFENabWnU5m1ZqZPdwS-qo-meMv" "VfJb6jJVWRpl2SUtCnYG2C32qvbWbjZ_jBPD5eunqsIo1vQ\"," "\"e\":\"AQAB\"," "\"x5c\":" "[\"MIIDQjCCAiqgAwIBAgIGATz/FuLiMA0GCSqGSIb3DQEBBQUAMGIxCzAJB" "gNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UEBxMGRGVudmVyMRwwGgYD" "VQQKExNQaW5nIElkZW50aXR5IENvcnAuMRcwFQYDVQQDEw5CcmlhbiBDYW1" "wYmVsbDAeFw0xMzAyMjEyMzI5MTVaFw0xODA4MTQyMjI5MTVaMGIxCzAJBg" "NVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UEBxMGRGVudmVyMRwwGgYDV" "QQKExNQaW5nIElkZW50aXR5IENvcnAuMRcwFQYDVQQDEw5CcmlhbiBDYW1w" "YmVsbDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL64zn8/QnH" "YMeZ0LncoXaEde1fiLm1jHjmQsF/449IYALM9if6amFtPDy2yvz3YlRij66" "s5gyLCyO7ANuVRJx1NbgizcAblIgjtdf/u3WG7K+IiZhtELto/A7Fck9Ws6" "SQvzRvOE8uSirYbgmj6He4iO8NCyvaK0jIQRMMGQwsU1quGmFgHIXPLfnpn" "fajr1rVTAwtgV5LEZ4Iel+W1GC8ugMhyr4/p1MtcIM42EA8BzE6ZQqC7VPq" "PvEjZ2dbZkaBhPbiZAS3YeYBRDWm1p1OZtWamT3cEvqqPpnjL1XyW+oyVVk" "aZdklLQp2Btgt9qr21m42f4wTw+Xrp6rCKNb0CAwEAATANBgkqhkiG9w0BA" "QUFAAOCAQEAh8zGlfSlcI0o3rYDPBB07aXNswb4ECNIKG0CETTUxmXl9KUL" "+9gGlqCz5iWLOgWsnrcKcY0vXPG9J1r9AqBNTqNgHq2G03X09266X5CpOe1" "zFo+Owb1zxtp3PehFdfQJ610CDLEaS9V9Rqp17hCyybEpOGVwe8fnk+fbEL" "2Bo3UPGrpsHzUoaGpDftmWssZkhpBJKVMJyf/RuP2SmmaIzmnw9JiSlYhzo" "4tpzd5rFXhjRbg4zW9C+2qok+2+qDM1iJ684gPHMIY8aLWrdgQTxkumGmTq" "gawR+N5MDtdPTEQ0XfIBc2cJEUyMTY5MPvACWpkA6SdS4xSvdXK3IVfOWA==\"]" "}", *lws_jwe_ex_c1_jwk_json = (uint8_t *) /* RSA enc private key (no parent JSON) */ "{" "\"kty\":\"RSA\"," "\"kid\":\"juliet@capulet.lit\"," "\"use\":\"enc\"," "\"n\":\"t6Q8PWSi1dkJj9hTP8hNYFlvadM7DflW9mWepOJhJ66w7nyoK1gPNqFMSQRy" "O125Gp-TEkodhWr0iujjHVx7BcV0llS4w5ACGgPrcAd6ZcSR0-Iqom-QFcNP" "8Sjg086MwoqQU_LYywlAGZ21WSdS_PERyGFiNnj3QQlO8Yns5jCtLCRwLHL0" "Pb1fEv45AuRIuUfVcPySBWYnDyGxvjYGDSM-AqWS9zIQ2ZilgT-GqUmipg0X" "OC0Cc20rgLe2ymLHjpHciCKVAbY5-L32-lSeZO-Os6U15_aXrk9Gw8cPUaX1" "_I8sLGuSiVdt3C_Fn2PZ3Z8i744FPFGGcG1qs2Wz-Q\"," "\"e\":\"AQAB\"," "\"d\":\"GRtbIQmhOZtyszfgKdg4u_N-R_mZGU_9k7JQ_jn1DnfTuMdSNprTeaSTyWfS" "NkuaAwnOEbIQVy1IQbWVV25NY3ybc_IhUJtfri7bAXYEReWaCl3hdlPKXy9U" "vqPYGR0kIXTQRqns-dVJ7jahlI7LyckrpTmrM8dWBo4_PMaenNnPiQgO0xnu" "ToxutRZJfJvG4Ox4ka3GORQd9CsCZ2vsUDmsXOfUENOyMqADC6p1M3h33tsu" "rY15k9qMSpG9OX_IJAXmxzAh_tWiZOwk2K4yxH9tS3Lq1yX8C1EWmeRDkK2a" "hecG85-oLKQt5VEpWHKmjOi_gJSdSgqcN96X52esAQ\"," "\"p\":\"2rnSOV4hKSN8sS4CgcQHFbs08XboFDqKum3sc4h3GRxrTmQdl1ZK9uw-PIHf" "QP0FkxXVrx-WE-ZEbrqivH_2iCLUS7wAl6XvARt1KkIaUxPPSYB9yk31s0Q8" "UK96E3_OrADAYtAJs-M3JxCLfNgqh56HDnETTQhH3rCT5T3yJws\"," "\"q\":\"1u_RiFDP7LBYh3N4GXLT9OpSKYP0uQZyiaZwBtOCBNJgQxaj10RWjsZu0c6I" "edis4S7B_coSKB0Kj9PaPaBzg-IySRvvcQuPamQu66riMhjVtG6TlV8CLCYK" "rYl52ziqK0E_ym2QnkwsUX7eYTB7LbAHRK9GqocDE5B0f808I4s\"," "\"dp\":\"KkMTWqBUefVwZ2_Dbj1pPQqyHSHjj90L5x_MOzqYAJMcLMZtbUtwKqvVDq3" "tbEo3ZIcohbDtt6SbfmWzggabpQxNxuBpoOOf_a_HgMXK_lhqigI4y_kqS1w" "Y52IwjUn5rgRrJ-yYo1h41KR-vz2pYhEAeYrhttWtxVqLCRViD6c\"," "\"dq\":\"AvfS0-gRxvn0bwJoMSnFxYcK1WnuEjQFluMGfwGitQBWtfZ1Er7t1xDkbN9" "GQTB9yqpDoYaN06H7CFtrkxhJIBQaj6nkF5KKS3TQtQ5qCzkOkmxIe3KRbBy" "mXxkb5qwUpX5ELD5xFc6FeiafWYY63TmmEAu_lRFCOJ3xDea-ots\"," "\"qi\":\"lSQi-w9CpyUReMErP1RsBLk7wNtOvs5EQpPqmuMvqW57NBUczScEoPwmUqq" "abu9V0-Py4dQ57_bapoKRu1R90bvuFnU63SHWEFglZQvJDMeAvmj4sm-Fp0o" "Yu_neotgQ0hzbI5gry7ajdYy9-2lNx_76aBZoOUu9HCJ-UsfSOI8\"" "}" /*, lws_jwe_ex_c1_plaintext[] = { 123, 34, 107, 116, 121, 34, 58, 34, 82, 83, 65, 34, 44, 34, 107, 105, 100, 34, 58, 34, 106, 117, 108, 105, 101, 116, 64, 99, 97, 112, 117, 108, 101, 116, 46, 108, 105, 116, 34, 44, 34, 117, 115, 101, 34, 58, 34, 101, 110, 99, 34, 44, 34, 110, 34, 58, 34, 116, 54, 81, 56, 80, 87, 83, 105, 49, 100, 107, 74, 106, 57, 104, 84, 80, 56, 104, 78, 89, 70, 108, 118, 97, 100, 77, 55, 68, 102, 108, 87, 57, 109, 87, 101, 112, 79, 74, 104, 74, 54, 54, 119, 55, 110, 121, 111, 75, 49, 103, 80, 78, 113, 70, 77, 83, 81, 82, 121, 79, 49, 50, 53, 71, 112, 45, 84, 69, 107, 111, 100, 104, 87, 114, 48, 105, 117, 106, 106, 72, 86, 120, 55, 66, 99, 86, 48, 108, 108, 83, 52, 119, 53, 65, 67, 71, 103, 80, 114, 99, 65, 100, 54, 90, 99, 83, 82, 48, 45, 73, 113, 111, 109, 45, 81, 70, 99, 78, 80, 56, 83, 106, 103, 48, 56, 54, 77, 119, 111, 113, 81, 85, 95, 76, 89, 121, 119, 108, 65, 71, 90, 50, 49, 87, 83, 100, 83, 95, 80, 69, 82, 121, 71, 70, 105, 78, 110, 106, 51, 81, 81, 108, 79, 56, 89, 110, 115, 53, 106, 67, 116, 76, 67, 82, 119, 76, 72, 76, 48, 80, 98, 49, 102, 69, 118, 52, 53, 65, 117, 82, 73, 117, 85, 102, 86, 99, 80, 121, 83, 66, 87, 89, 110, 68, 121, 71, 120, 118, 106, 89, 71, 68, 83, 77, 45, 65, 113, 87, 83, 57, 122, 73, 81, 50, 90, 105, 108, 103, 84, 45, 71, 113, 85, 109, 105, 112, 103, 48, 88, 79, 67, 48, 67, 99, 50, 48, 114, 103, 76, 101, 50, 121, 109, 76, 72, 106, 112, 72, 99, 105, 67, 75, 86, 65, 98, 89, 53, 45, 76, 51, 50, 45, 108, 83, 101, 90, 79, 45, 79, 115, 54, 85, 49, 53, 95, 97, 88, 114, 107, 57, 71, 119, 56, 99, 80, 85, 97, 88, 49, 95, 73, 56, 115, 76, 71, 117, 83, 105, 86, 100, 116, 51, 67, 95, 70, 110, 50, 80, 90, 51, 90, 56, 105, 55, 52, 52, 70, 80, 70, 71, 71, 99, 71, 49, 113, 115, 50, 87, 122, 45, 81, 34, 44, 34, 101, 34, 58, 34, 65, 81, 65, 66, 34, 44, 34, 100, 34, 58, 34, 71, 82, 116, 98, 73, 81, 109, 104, 79, 90, 116, 121, 115, 122, 102, 103, 75, 100, 103, 52, 117, 95, 78, 45, 82, 95, 109, 90, 71, 85, 95, 57, 107, 55, 74, 81, 95, 106, 110, 49, 68, 110, 102, 84, 117, 77, 100, 83, 78, 112, 114, 84, 101, 97, 83, 84, 121, 87, 102, 83, 78, 107, 117, 97, 65, 119, 110, 79, 69, 98, 73, 81, 86, 121, 49, 73, 81, 98, 87, 86, 86, 50, 53, 78, 89, 51, 121, 98, 99, 95, 73, 104, 85, 74, 116, 102, 114, 105, 55, 98, 65, 88, 89, 69, 82, 101, 87, 97, 67, 108, 51, 104, 100, 108, 80, 75, 88, 121, 57, 85, 118, 113, 80, 89, 71, 82, 48, 107, 73, 88, 84, 81, 82, 113, 110, 115, 45, 100, 86, 74, 55, 106, 97, 104, 108, 73, 55, 76, 121, 99, 107, 114, 112, 84, 109, 114, 77, 56, 100, 87, 66, 111, 52, 95, 80, 77, 97, 101, 110, 78, 110, 80, 105, 81, 103, 79, 48, 120, 110, 117, 84, 111, 120, 117, 116, 82, 90, 74, 102, 74, 118, 71, 52, 79, 120, 52, 107, 97, 51, 71, 79, 82, 81, 100, 57, 67, 115, 67, 90, 50, 118, 115, 85, 68, 109, 115, 88, 79, 102, 85, 69, 78, 79, 121, 77, 113, 65, 68, 67, 54, 112, 49, 77, 51, 104, 51, 51, 116, 115, 117, 114, 89, 49, 53, 107, 57, 113, 77, 83, 112, 71, 57, 79, 88, 95, 73, 74, 65, 88, 109, 120, 122, 65, 104, 95, 116, 87, 105, 90, 79, 119, 107, 50, 75, 52, 121, 120, 72, 57, 116, 83, 51, 76, 113, 49, 121, 88, 56, 67, 49, 69, 87, 109, 101, 82, 68, 107, 75, 50, 97, 104, 101, 99, 71, 56, 53, 45, 111, 76, 75, 81, 116, 53, 86, 69, 112, 87, 72, 75, 109, 106, 79, 105, 95, 103, 74, 83, 100, 83, 103, 113, 99, 78, 57, 54, 88, 53, 50, 101, 115, 65, 81, 34, 44, 34, 112, 34, 58, 34, 50, 114, 110, 83, 79, 86, 52, 104, 75, 83, 78, 56, 115, 83, 52, 67, 103, 99, 81, 72, 70, 98, 115, 48, 56, 88, 98, 111, 70, 68, 113, 75, 117, 109, 51, 115, 99, 52, 104, 51, 71, 82, 120, 114, 84, 109, 81, 100, 108, 49, 90, 75, 57, 117, 119, 45, 80, 73, 72, 102, 81, 80, 48, 70, 107, 120, 88, 86, 114, 120, 45, 87, 69, 45, 90, 69, 98, 114, 113, 105, 118, 72, 95, 50, 105, 67, 76, 85, 83, 55, 119, 65, 108, 54, 88, 118, 65, 82, 116, 49, 75, 107, 73, 97, 85, 120, 80, 80, 83, 89, 66, 57, 121, 107, 51, 49, 115, 48, 81, 56, 85, 75, 57, 54, 69, 51, 95, 79, 114, 65, 68, 65, 89, 116, 65, 74, 115, 45, 77, 51, 74, 120, 67, 76, 102, 78, 103, 113, 104, 53, 54, 72, 68, 110, 69, 84, 84, 81, 104, 72, 51, 114, 67, 84, 53, 84, 51, 121, 74, 119, 115, 34, 44, 34, 113, 34, 58, 34, 49, 117, 95, 82, 105, 70, 68, 80, 55, 76, 66, 89, 104, 51, 78, 52, 71, 88, 76, 84, 57, 79, 112, 83, 75, 89, 80, 48, 117, 81, 90, 121, 105, 97, 90, 119, 66, 116, 79, 67, 66, 78, 74, 103, 81, 120, 97, 106, 49, 48, 82, 87, 106, 115, 90, 117, 48, 99, 54, 73, 101, 100, 105, 115, 52, 83, 55, 66, 95, 99, 111, 83, 75, 66, 48, 75, 106, 57, 80, 97, 80, 97, 66, 122, 103, 45, 73, 121, 83, 82, 118, 118, 99, 81, 117, 80, 97, 109, 81, 117, 54, 54, 114, 105, 77, 104, 106, 86, 116, 71, 54, 84, 108, 86, 56, 67, 76, 67, 89, 75, 114, 89, 108, 53, 50, 122, 105, 113, 75, 48, 69, 95, 121, 109, 50, 81, 110, 107, 119, 115, 85, 88, 55, 101, 89, 84, 66, 55, 76, 98, 65, 72, 82, 75, 57, 71, 113, 111, 99, 68, 69, 53, 66, 48, 102, 56, 48, 56, 73, 52, 115, 34, 44, 34, 100, 112, 34, 58, 34, 75, 107, 77, 84, 87, 113, 66, 85, 101, 102, 86, 119, 90, 50, 95, 68, 98, 106, 49, 112, 80, 81, 113, 121, 72, 83, 72, 106, 106, 57, 48, 76, 53, 120, 95, 77, 79, 122, 113, 89, 65, 74, 77, 99, 76, 77, 90, 116, 98, 85, 116, 119, 75, 113, 118, 86, 68, 113, 51, 116, 98, 69, 111, 51, 90, 73, 99, 111, 104, 98, 68, 116, 116, 54, 83, 98, 102, 109, 87, 122, 103, 103, 97, 98, 112, 81, 120, 78, 120, 117, 66, 112, 111, 79, 79, 102, 95, 97, 95, 72, 103, 77, 88, 75, 95, 108, 104, 113, 105, 103, 73, 52, 121, 95, 107, 113, 83, 49, 119, 89, 53, 50, 73, 119, 106, 85, 110, 53, 114, 103, 82, 114, 74, 45, 121, 89, 111, 49, 104, 52, 49, 75, 82, 45, 118, 122, 50, 112, 89, 104, 69, 65, 101, 89, 114, 104, 116, 116, 87, 116, 120, 86, 113, 76, 67, 82, 86, 105, 68, 54, 99, 34, 44, 34, 100, 113, 34, 58, 34, 65, 118, 102, 83, 48, 45, 103, 82, 120, 118, 110, 48, 98, 119, 74, 111, 77, 83, 110, 70, 120, 89, 99, 75, 49, 87, 110, 117, 69, 106, 81, 70, 108, 117, 77, 71, 102, 119, 71, 105, 116, 81, 66, 87, 116, 102, 90, 49, 69, 114, 55, 116, 49, 120, 68, 107, 98, 78, 57, 71, 81, 84, 66, 57, 121, 113, 112, 68, 111, 89, 97, 78, 48, 54, 72, 55, 67, 70, 116, 114, 107, 120, 104, 74, 73, 66, 81, 97, 106, 54, 110, 107, 70, 53, 75, 75, 83, 51, 84, 81, 116, 81, 53, 113, 67, 122, 107, 79, 107, 109, 120, 73, 101, 51, 75, 82, 98, 66, 121, 109, 88, 120, 107, 98, 53, 113, 119, 85, 112, 88, 53, 69, 76, 68, 53, 120, 70, 99, 54, 70, 101, 105, 97, 102, 87, 89, 89, 54, 51, 84, 109, 109, 69, 65, 117, 95, 108, 82, 70, 67, 79, 74, 51, 120, 68, 101, 97, 45, 111, 116, 115, 34, 44, 34, 113, 105, 34, 58, 34, 108, 83, 81, 105, 45, 119, 57, 67, 112, 121, 85, 82, 101, 77, 69, 114, 80, 49, 82, 115, 66, 76, 107, 55, 119, 78, 116, 79, 118, 115, 53, 69, 81, 112, 80, 113, 109, 117, 77, 118, 113, 87, 53, 55, 78, 66, 85, 99, 122, 83, 99, 69, 111, 80, 119, 109, 85, 113, 113, 97, 98, 117, 57, 86, 48, 45, 80, 121, 52, 100, 81, 53, 55, 95, 98, 97, 112, 111, 75, 82, 117, 49, 82, 57, 48, 98, 118, 117, 70, 110, 85, 54, 51, 83, 72, 87, 69, 70, 103, 108, 90, 81, 118, 74, 68, 77, 101, 65, 118, 109, 106, 52, 115, 109, 45, 70, 112, 48, 111, 89, 117, 95, 110, 101, 111, 116, 103, 81, 48, 104, 122, 98, 73, 53, 103, 114, 121, 55, 97, 106, 100, 89, 121, 57, 45, 50, 108, 78, 120, 95, 55, 54, 97, 66, 90, 111, 79, 85, 117, 57, 72, 67, 74, 45, 85, 115, 102, 83, 79, 73, 56, 34, 125 } */ ; static int key_import_callback(struct lws_jwk *s, void *user) { lwsl_notice("%s: key type %d\n", __func__, s->kty); return 0; } int test_jwk(struct lws_context *context) { struct lws_jwk jwk; /* Test 1: A.1: Example public keys */ if (lws_jwk_import(&jwk, key_import_callback, NULL, (char *)lws_jwe_ex_a1_jwk_json, strlen((char *)lws_jwe_ex_a1_jwk_json)) < 0) { lwsl_notice("Failed to decode JWK test key\n"); goto bail1; } lws_jwk_destroy(&jwk); /* Test 1: A.2: Example private keys */ if (lws_jwk_import(&jwk, key_import_callback, NULL, (char *)lws_jwe_ex_a2_jwk_json, strlen((char *)lws_jwe_ex_a2_jwk_json)) < 0) { lwsl_notice("Failed at A.2\n"); goto bail1; } lws_jwk_destroy(&jwk); /* Test 1: A.3: Example symmetric keys */ if (lws_jwk_import(&jwk, key_import_callback, NULL, (char *)lws_jwe_ex_a3_jwk_json, strlen((char *)lws_jwe_ex_a3_jwk_json)) < 0) { lwsl_notice("Failed at A.3\n"); goto bail1; } lws_jwk_destroy(&jwk); /* Test 1: B: Example x509 cert chain (no parent JSON) */ if (lws_jwk_import(&jwk, NULL, NULL, (char *)lws_jwe_ex_b_jwk_json, strlen((char *)lws_jwe_ex_b_jwk_json)) < 0) { lwsl_notice("Failed at B\n"); goto bail1; } lws_jwk_destroy(&jwk); /* Test 1: C.1: Example private key (no parent JSON) */ if (lws_jwk_import(&jwk, NULL, NULL, (char *)lws_jwe_ex_c1_jwk_json, strlen((char *)lws_jwe_ex_c1_jwk_json)) < 0) { lwsl_notice("Failed at B\n"); goto bail1; } lws_jwk_destroy(&jwk); /* end */ lwsl_notice("%s: selftest OK\n", __func__); return 0; //bail: // lws_jwk_destroy(&jwk); bail1: lwsl_err("%s: selftest failed ++++++++++++++++++++\n", __func__); return 1; } libwebsockets-4.3.5/minimal-examples/api-tests/api-test-jose/jws.c000066400000000000000000000746471476025525100252220ustar00rootroot00000000000000/* * lws-api-test-jose - RFC7515 jws tests * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include /* * JSON Web Signature is defined in RFC7515 * * https://tools.ietf.org/html/rfc7515 * * It's basically a way to wrap some JSON with a JSON "header" describing the * crypto, and a signature, all in a BASE64 wrapper with elided terminating '='. * * The signature stays with the content, it serves a different purpose than eg * a TLS tunnel to transfer it. * */ /* for none, the compact serialization format is b64u(jose hdr).b64u(payload) */ static const char *none_cser = "eyJhbGciOiJub25lIn0" "." "eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFt" "cGxlLmNvbS9pc19yb290Ijp0cnVlfQ", *none_jose = "{\"alg\":\"none\"}", *none_payload = "{\"iss\":\"joe\",\r\n \"exp\":1300819380,\r\n" " \"http://example.com/is_root\":true}"; int test_jws_none(struct lws_context *context) { struct lws_jws_map map; struct lws_jose jose; char temp[2048]; int n, temp_len = sizeof(temp), ret = -1; lws_jose_init(&jose); /* A.5 Unsecured JSON "none" RFC7515 worked example */ /* decode the b64.b64[.b64] compact serialization blocks */ n = lws_jws_compact_decode(none_cser, (int)strlen(none_cser), &map, NULL, temp, &temp_len); if (n != 2) { lwsl_err("%s: concat_map failed\n", __func__); goto bail; } /* confirm the decoded JOSE header is exactly what we expect */ if (strncmp(none_jose, map.buf[LJWS_JOSE], map.len[LJWS_JOSE])) { lwsl_err("%s: jose b64 decode wrong\n", __func__); goto bail; } /* parse the JOSE header */ if (lws_jws_parse_jose(&jose, map.buf[LJWS_JOSE], (int)map.len[LJWS_JOSE], (char *)lws_concat_temp(temp, temp_len), &temp_len) < 0 || !jose.alg) { lwsl_err("%s: JOSE parse failed\n", __func__); goto bail; } /* confirm we used the "none" alg as expected from JOSE hdr */ if (strcmp(jose.alg->alg, "none")) { lwsl_err("%s: JOSE header has wrong alg\n", __func__); goto bail; } /* confirm the payload is literally what we expect */ if (strncmp(none_payload, map.buf[LJWS_PYLD], map.len[LJWS_PYLD])) { lwsl_err("%s: payload b64 decode wrong\n", __func__); goto bail; } /* end */ ret = 0; bail: lws_jose_destroy(&jose); if (ret) lwsl_err("%s: selftest failed ++++++++++++++++++++\n", __func__); else lwsl_notice("%s: selftest OK\n", __func__); return ret; } static const char *test1 = "{\"typ\":\"JWT\",\r\n \"alg\":\"HS256\"}", *test1_enc = "eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9", *test2 = "{\"iss\":\"joe\",\r\n \"exp\":1300819380,\r\n" " \"http://example.com/is_root\":true}", *test2_enc = "eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQ" "ogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ", *key_jwk = "{\"kty\":\"oct\",\r\n" " \"k\":\"AyM1SysPpbyDfgZld3umj1qzKObwVMkoqQ-EstJQ" "Lr_T-1qS0gZH75aKtMN3Yj0iPS4hcgUuTwjAzZr1Z9CAow\"}", *hash_enc = "dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk" ; int test_jws_HS256(struct lws_context *context) { char buf[2048], temp[256], *p = buf, *end = buf + sizeof(buf) - 1, *enc_ptr; uint8_t digest[LWS_GENHASH_LARGEST]; struct lws_jws_map map; int temp_len = sizeof(temp); struct lws_genhmac_ctx ctx; struct lws_jose jose; struct lws_jwk jwk; struct lws_jws jws; int n; lws_jose_init(&jose); lws_jws_init(&jws, &jwk, context); /* Test 1: SHA256 on RFC7515 worked example */ /* parse the JOSE header */ if (lws_jws_parse_jose(&jose, test1, (int)strlen(test1), temp, &temp_len) < 0 || !jose.alg) { lwsl_err("%s: JOSE parse failed\n", __func__); goto bail; } /* confirm we used the "none" alg as expected from JOSE hdr */ if (strcmp(jose.alg->alg, "HS256")) { lwsl_err("%s: JOSE header has wrong alg\n", __func__); goto bail; } /* 1.1: import the JWK oct key */ if (lws_jwk_import(&jwk, NULL, NULL, key_jwk, strlen(key_jwk)) < 0) { lwsl_notice("Failed to decode JWK test key\n"); return -1; } if (jwk.kty != LWS_GENCRYPTO_KTY_OCT) { lwsl_err("%s: unexpected kty %d\n", __func__, jwk.kty); return -1; } /* 1.2: create JWS known hdr + known payload */ n = lws_jws_encode_section(test1, strlen(test1), 1, &p, end); if (n < 0) { goto bail; } if (strcmp(buf, test1_enc)) goto bail; enc_ptr = p + 1; /* + 1 skips the . */ n = lws_jws_encode_section(test2, strlen(test2), 0, &p, end); if (n < 0) { goto bail; } if (strcmp(enc_ptr, test2_enc)) goto bail; /* 1.3: use HMAC SHA-256 with known key on the hdr . payload */ if (lws_genhmac_init(&ctx, jose.alg->hmac_type, jwk.e[LWS_GENCRYPTO_OCT_KEYEL_K].buf, jwk.e[LWS_GENCRYPTO_OCT_KEYEL_K].len)) goto bail; if (lws_genhmac_update(&ctx, (uint8_t *)buf, lws_ptr_diff_size_t(p, buf))) goto bail_destroy_hmac; lws_genhmac_destroy(&ctx, digest); /* 1.4: append a base64 encode of the computed HMAC digest */ enc_ptr = p + 1; /* + 1 skips the . */ n = lws_jws_encode_section((const char *)digest, 32, 0, &p, end); if (n < 0) goto bail; if (strcmp(enc_ptr, hash_enc)) { /* check against known B64URL hash */ lwsl_err("%s: b64 enc of computed HMAC mismatches '%s' '%s'\n", __func__, enc_ptr, hash_enc); goto bail; } /* 1.5: Check we can agree the signature matches the payload */ if (lws_jws_sig_confirm_compact_b64(buf, lws_ptr_diff_size_t(p, buf), &map, &jwk, context, lws_concat_temp(temp, temp_len), &temp_len) < 0) { lwsl_notice("%s: confirm sig failed\n", __func__); goto bail; } lws_jws_destroy(&jws); lws_jwk_destroy(&jwk); lws_jose_destroy(&jose); /* end */ lwsl_notice("%s: selftest OK\n", __func__); return 0; bail_destroy_hmac: lws_genhmac_destroy(&ctx, NULL); bail: lws_jws_destroy(&jws); lws_jwk_destroy(&jwk); lws_jose_destroy(&jose); lwsl_err("%s: selftest failed ++++++++++++++++++++\n", __func__); return 1; } static const char /* the key from worked example in RFC7515 A-2, as a JWK */ *rfc7515_rsa_key = "{\"kty\":\"RSA\"," " \"n\":\"ofgWCuLjybRlzo0tZWJjNiuSfb4p4fAkd_wWJcyQoTbji9k0l8W26mPddx" "HmfHQp-Vaw-4qPCJrcS2mJPMEzP1Pt0Bm4d4QlL-yRT-SFd2lZS-pCgNMs" "D1W_YpRPEwOWvG6b32690r2jZ47soMZo9wGzjb_7OMg0LOL-bSf63kpaSH" "SXndS5z5rexMdbBYUsLA9e-KXBdQOS-UTo7WTBEMa2R2CapHg665xsmtdV" "MTBQY4uDZlxvb3qCo5ZwKh9kG4LT6_I5IhlJH7aGhyxXFvUK-DWNmoudF8" "NAco9_h9iaGNj8q2ethFkMLs91kzk2PAcDTW9gb54h4FRWyuXpoQ\"," "\"e\":\"AQAB\"," "\"d\":\"Eq5xpGnNCivDflJsRQBXHx1hdR1k6Ulwe2JZD50LpXyWPEAeP88vLNO97I" "jlA7_GQ5sLKMgvfTeXZx9SE-7YwVol2NXOoAJe46sui395IW_GO-pWJ1O0" "BkTGoVEn2bKVRUCgu-GjBVaYLU6f3l9kJfFNS3E0QbVdxzubSu3Mkqzjkn" "439X0M_V51gfpRLI9JYanrC4D4qAdGcopV_0ZHHzQlBjudU2QvXt4ehNYT" "CBr6XCLQUShb1juUO1ZdiYoFaFQT5Tw8bGUl_x_jTj3ccPDVZFD9pIuhLh" "BOneufuBiB4cS98l2SR_RQyGWSeWjnczT0QU91p1DhOVRuOopznQ\"," "\"p\":\"4BzEEOtIpmVdVEZNCqS7baC4crd0pqnRH_5IB3jw3bcxGn6QLvnEtfdUdi" "YrqBdss1l58BQ3KhooKeQTa9AB0Hw_Py5PJdTJNPY8cQn7ouZ2KKDcmnPG" "BY5t7yLc1QlQ5xHdwW1VhvKn-nXqhJTBgIPgtldC-KDV5z-y2XDwGUc\"," "\"q\":\"uQPEfgmVtjL0Uyyx88GZFF1fOunH3-7cepKmtH4pxhtCoHqpWmT8YAmZxa" "ewHgHAjLYsp1ZSe7zFYHj7C6ul7TjeLQeZD_YwD66t62wDmpe_HlB-TnBA" "-njbglfIsRLtXlnDzQkv5dTltRJ11BKBBypeeF6689rjcJIDEz9RWdc\"," "\"dp\":\"BwKfV3Akq5_MFZDFZCnW-wzl-CCo83WoZvnLQwCTeDv8uzluRSnm71I3Q" "CLdhrqE2e9YkxvuxdBfpT_PI7Yz-FOKnu1R6HsJeDCjn12Sk3vmAktV2zb" "34MCdy7cpdTh_YVr7tss2u6vneTwrA86rZtu5Mbr1C1XsmvkxHQAdYo0\"," "\"dq\":\"h_96-mK1R_7glhsum81dZxjTnYynPbZpHziZjeeHcXYsXaaMwkOlODsWa" "7I9xXDoRwbKgB719rrmI2oKr6N3Do9U0ajaHF-NKJnwgjMd2w9cjz3_-ky" "NlxAr2v4IKhGNpmM5iIgOS1VZnOZ68m6_pbLBSp3nssTdlqvd0tIiTHU\"," "\"qi\":\"IYd7DHOhrWvxkwPQsRM2tOgrjbcrfvtQJipd-DlcxyVuuM9sQLdgjVk2o" "y26F0EmpScGLq2MowX7fhd_QJQ3ydy5cY7YIBi87w93IKLEdfnbJtoOPLU" "W0ITrJReOgo1cq9SbsxYawBgfp_gh6A5603k2-ZQwVK0JKSHuLFkuQ3U\"" "}", *rfc7515_rsa_a1 = /* the signed worked example in RFC7515 A-1 */ "eyJhbGciOiJSUzI1NiJ9" ".eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFt" "cGxlLmNvbS9pc19yb290Ijp0cnVlfQ" ".cC4hiUPoj9Eetdgtv3hF80EGrhuB__dzERat0XF9g2VtQgr9PJbu3XOiZj5RZmh7" "AAuHIm4Bh-0Qc_lF5YKt_O8W2Fp5jujGbds9uJdbF9CUAr7t1dnZcAcQjbKBYNX4" "BAynRFdiuB--f_nZLgrnbyTyWzO75vRK5h6xBArLIARNPvkSjtQBMHlb1L07Qe7K" "0GarZRmB_eSN9383LcOLn6_dO--xi12jzDwusC-eOkHWEsqtFZESc6BfI7noOPqv" "hJ1phCnvWh6IeYI2w9QOYEUipUTI8np6LbgGY9Fs98rqVt5AXLIhWkWywlVmtVrB" "p0igcN_IoypGlUPQGe77Rw" ; int test_jws_RS256(struct lws_context *context) { struct lws_jws_map map; struct lws_jose jose; struct lws_jwk jwk; struct lws_jws jws; char temp[2048], *in; int n, l, temp_len = sizeof(temp); lws_jose_init(&jose); lws_jws_init(&jws, &jwk, context); /* Test 2: RS256 on RFC7515 worked example */ if (lws_gencrypto_jws_alg_to_definition("RS256", &jose.alg)) { lwsl_err("%s: RS256 not supported\n", __func__); goto bail; } /* 2.1: import the jwk */ if (lws_jwk_import(&jwk, NULL, NULL, rfc7515_rsa_key, strlen(rfc7515_rsa_key))) { lwsl_notice("%s: 2.2: Failed to read JWK key\n", __func__); goto bail2; } if (jwk.kty != LWS_GENCRYPTO_KTY_RSA) { lwsl_err("%s: 2.2: kty: %d instead of RSA\n", __func__, jwk.kty); goto bail; } /* 2.2: check the signature on the test packet from RFC7515 A-1 */ if (lws_jws_sig_confirm_compact_b64(rfc7515_rsa_a1, strlen(rfc7515_rsa_a1), &map, &jwk, context, temp, &temp_len) < 0) { lwsl_notice("%s: 2.2: confirm rsa sig failed\n", __func__); goto bail; } if (lws_jws_b64_compact_map(rfc7515_rsa_a1, (int)strlen(rfc7515_rsa_a1), &jws.map_b64) != 3) { lwsl_notice("%s: lws_jws_b64_compact_map failed\n", __func__); goto bail; } /* 2.3: generate our own signature for a copy of the test packet */ in = lws_concat_temp(temp, temp_len); l = (int)strlen(rfc7515_rsa_a1); if (temp_len < l + 1) goto bail; memcpy(in, rfc7515_rsa_a1, (unsigned int)l + 1); temp_len -= l + 1; if (lws_jws_b64_compact_map(in, l, &jws.map_b64) != 3) { lwsl_notice("%s: lws_jws_b64_compact_map failed\n", __func__); goto bail; } /* overwrite the copy of the known b64 sig (it's all placed inside temp) */ n = lws_jws_sign_from_b64(&jose, &jws, (char *)jws.map_b64.buf[LJWS_SIG], jws.map_b64.len[LJWS_SIG] + 8); if (n < 0) { lwsl_err("%s: failed signing test packet\n", __func__); goto bail; } jws.map_b64.len[LJWS_SIG] = (unsigned int)n; /* 2.4: confirm our signature can be verified */ in[l] = '\0'; if (lws_jws_sig_confirm_compact_b64(in, (unsigned int)l, &map, &jwk, context, lws_concat_temp(temp, temp_len), &temp_len) < 0) { lwsl_notice("%s: 2.2: confirm rsa sig failed\n", __func__); goto bail; } lws_jwk_destroy(&jwk); /* end */ lwsl_notice("%s: selftest OK\n", __func__); return 0; bail: lws_jwk_destroy(&jwk); bail2: lws_jws_destroy(&jws); lwsl_err("%s: selftest failed ++++++++++++++++++++\n", __func__); return 1; } static const char *es256_jose = "{\"alg\":\"ES256\"}", *es256_payload = "{\"iss\":\"joe\",\r\n \"exp\":1300819380,\r\n" " \"http://example.com/is_root\":true}", *es256_cser = "eyJhbGciOiJFUzI1NiJ9" "." "eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFt" "cGxlLmNvbS9pc19yb290Ijp0cnVlfQ" "." "DtEhU3ljbEg8L38VWAfUAqOyKAM6-Xx-F4GawxaepmXFCgfTjDxw5djxLa8ISlSA" "pmWQxfKTUJqPP3-Kg6NU1Q", *es256_jwk = "{" "\"kty\":\"EC\"," "\"crv\":\"P-256\"," "\"x\":\"f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU\"," "\"y\":\"x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0\"," "\"d\":\"jpsQnnGQmL-YBIffH1136cspYG6-0iY7X1fCE9-E9LI\"" "}" #if 0 , rfc7515_ec_a3_R[] = { 14, 209, 33, 83, 121, 99, 108, 72, 60, 47, 127, 21, 88, 7, 212, 2, 163, 178, 40, 3, 58, 249, 124, 126, 23, 129, 154, 195, 22, 158, 166, 101 }, rfc7515_ec_a3_S[] = { 197, 10, 7, 211, 140, 60, 112, 229, 216, 241, 45, 175, 8, 74, 84, 128, 166, 101, 144, 197, 242, 147, 80, 154, 143, 63, 127, 138, 131, 163, 84, 213 } #endif ; int test_jws_ES256(struct lws_context *context) { uint8_t digest[LWS_GENHASH_LARGEST]; struct lws_genhash_ctx hash_ctx; struct lws_jws_map map; struct lws_jose jose; struct lws_jwk jwk; struct lws_jws jws; char temp[2048], *p; int ret = -1, l, n, temp_len = sizeof(temp); /* A.3 "ES256" RFC7515 worked example - verify */ lws_jose_init(&jose); /* decode the b64.b64[.b64] compact serialization blocks */ if (lws_jws_compact_decode(es256_cser, (int)strlen(es256_cser), &jws.map, &jws.map_b64, temp, &temp_len) != 3) { lwsl_err("%s: concat_map failed\n", __func__); goto bail; } /* confirm the decoded JOSE header is exactly what we expect */ if (jws.map.len[LJWS_JOSE] != strlen(es256_jose) || strncmp(es256_jose, jws.map.buf[LJWS_JOSE], jws.map.len[LJWS_JOSE])) { lwsl_err("%s: jose b64 decode wrong\n", __func__); goto bail; } /* confirm the decoded payload is exactly what we expect */ if (jws.map.len[LJWS_PYLD] != strlen(es256_payload) || strncmp(es256_payload, jws.map.buf[LJWS_PYLD], jws.map.len[LJWS_PYLD])) { lwsl_err("%s: payload b64 decode wrong\n", __func__); goto bail; } /* parse the JOSE header */ if (lws_jws_parse_jose(&jose, jws.map.buf[LJWS_JOSE], (int)jws.map.len[LJWS_JOSE], (char *)lws_concat_temp(temp, temp_len), &temp_len) < 0) { lwsl_err("%s: JOSE parse failed\n", __func__); goto bail; } /* confirm we used "ES256" alg we expect from the JOSE hdr */ if (strcmp(jose.alg->alg, "ES256")) { lwsl_err("%s: JOSE header has wrong alg\n", __func__); goto bail; } jws.jwk = &jwk; jws.context = context; /* import the ES256 jwk */ if (lws_jwk_import(&jwk, NULL, NULL, es256_jwk, strlen(es256_jwk))) { lwsl_notice("%s: Failed to read JWK key\n", __func__); goto bail; } /* sanity */ if (jwk.kty != LWS_GENCRYPTO_KTY_EC) { lwsl_err("%s: kty: %d instead of EC\n", __func__, jwk.kty); goto bail1; } if (lws_jws_sig_confirm(&jws.map_b64, &jws.map, &jwk, context) < 0) { lwsl_notice("%s: confirm EC sig failed\n", __func__); goto bail1; } /* A.3 "ES256" RFC7515 worked example - sign */ l = (int)strlen(es256_cser); if (temp_len < l + 1) goto bail1; p = lws_concat_temp(temp, temp_len); memcpy(p, es256_cser, (unsigned int)l + 1); temp_len -= l + 1; /* scan the b64 compact serialization string to map the blocks */ if (lws_jws_b64_compact_map(p, l, &jws.map_b64) != 3) goto bail1; /* create the hash of the protected b64 part */ if (lws_genhash_init(&hash_ctx, jose.alg->hash_type) || lws_genhash_update(&hash_ctx, jws.map_b64.buf[LJWS_JOSE], jws.map_b64.len[LJWS_JOSE]) || lws_genhash_update(&hash_ctx, ".", 1) || lws_genhash_update(&hash_ctx, jws.map_b64.buf[LJWS_PYLD], jws.map_b64.len[LJWS_PYLD]) || lws_genhash_destroy(&hash_ctx, digest)) { lws_genhash_destroy(&hash_ctx, NULL); goto bail1; } lwsl_hexdump(jws.map_b64.buf[LJWS_SIG], jws.map_b64.len[LJWS_SIG]); /* overwrite the copy of the known b64 sig (it's placed inside buf) */ n = lws_jws_sign_from_b64(&jose, &jws, (char *)jws.map_b64.buf[LJWS_SIG], jws.map_b64.len[LJWS_SIG] + 8); if (n < 0) { lwsl_err("%s: failed signing test packet\n", __func__); goto bail1; } jws.map_b64.len[LJWS_SIG] = (unsigned int)n; lwsl_hexdump(jws.map_b64.buf[LJWS_SIG], jws.map_b64.len[LJWS_SIG]); /* 2.4: confirm our generated signature can be verified */ // lwsl_err("p %p, l %d\n", p, (int)l); p[l] = '\0'; if (lws_jws_sig_confirm_compact_b64(p, (unsigned int)l, &map, &jwk, context, lws_concat_temp(temp, temp_len), &temp_len) < 0) { lwsl_notice("%s: confirm our EC sig failed\n", __func__); goto bail1; } /* end */ ret = 0; bail1: lws_jwk_destroy(&jwk); lws_jose_destroy(&jose); bail: lwsl_notice("%s: selftest %s\n", __func__, ret ? "FAIL" : "OK"); return ret; } static const char *es512_jose = "{\"alg\":\"ES512\"}", *es512_payload = "Payload", *es512_cser = "eyJhbGciOiJFUzUxMiJ9" "." "UGF5bG9hZA" "." "AdwMgeerwtHoh-l192l60hp9wAHZFVJbLfD_UxMi70cwnZOYaRI1bKPWROc-mZZq" "wqT2SI-KGDKB34XO0aw_7XdtAG8GaSwFKdCAPZgoXD2YBJZCPEX3xKpRwcdOO8Kp" "EHwJjyqOgzDO7iKvU8vcnwNrmxYbSW9ERBXukOXolLzeO_Jn", *es512_jwk = "{" "\"kty\":\"EC\"," "\"crv\":\"P-521\"," "\"x\":\"AekpBQ8ST8a8VcfVOTNl353vSrDCLLJXmPk06wTjxrrjcBpXp5EOnYG_" "NjFZ6OvLFV1jSfS9tsz4qUxcWceqwQGk\"," "\"y\":\"ADSmRA43Z1DSNx_RvcLI87cdL07l6jQyyBXMoxVg_l2Th-x3S1WDhjDl" "y79ajL4Kkd0AZMaZmh9ubmf63e3kyMj2\"," "\"d\":\"AY5pb7A0UFiB3RELSD64fTLOSV_jazdF7fLYyuTw8lOfRhWg6Y6rUrPA" "xerEzgdRhajnu0ferB0d53vM9mE15j2C\"" "}" ; int test_jws_ES512(struct lws_context *context) { uint8_t digest[LWS_GENHASH_LARGEST]; struct lws_genhash_ctx hash_ctx; struct lws_jws_map map; struct lws_jose jose; struct lws_jwk jwk; struct lws_jws jws; char temp[2048], *p; int ret = -1, l, n, temp_len = sizeof(temp); /* A.4 "ES512" RFC7515 worked example - verify */ lws_jose_init(&jose); /* decode the b64.b64[.b64] compact serialization blocks */ if (lws_jws_compact_decode(es512_cser, (int)strlen(es512_cser), &jws.map, &jws.map_b64, temp, &temp_len) != 3) { lwsl_err("%s: concat_map failed\n", __func__); goto bail; } /* confirm the decoded JOSE header is exactly what we expect */ if (jws.map.len[LJWS_JOSE] != strlen(es512_jose) || strncmp(es512_jose, jws.map.buf[LJWS_JOSE], jws.map.len[LJWS_JOSE])) { lwsl_err("%s: jose b64 decode wrong\n", __func__); goto bail; } /* confirm the decoded payload is exactly what we expect */ if (jws.map.len[LJWS_PYLD] != strlen(es512_payload) || strncmp(es512_payload, jws.map.buf[LJWS_PYLD], jws.map.len[LJWS_PYLD])) { lwsl_err("%s: payload b64 decode wrong\n", __func__); goto bail; } /* parse the JOSE header */ if (lws_jws_parse_jose(&jose, jws.map.buf[LJWS_JOSE], (int)jws.map.len[LJWS_JOSE], lws_concat_temp(temp, temp_len), &temp_len) < 0) { lwsl_err("%s: JOSE parse failed\n", __func__); goto bail; } /* confirm we used "es512" alg we expect from the JOSE hdr */ if (strcmp(jose.alg->alg, "ES512")) { lwsl_err("%s: JOSE header has wrong alg\n", __func__); goto bail; } jws.jwk = &jwk; jws.context = context; /* import the es512 jwk */ if (lws_jwk_import(&jwk, NULL, NULL, es512_jwk, strlen(es512_jwk))) { lwsl_notice("%s: Failed to read JWK key\n", __func__); goto bail; } /* sanity */ if (jwk.kty != LWS_GENCRYPTO_KTY_EC) { lwsl_err("%s: kty: %d instead of EC\n", __func__, jwk.kty); goto bail1; } if (lws_jws_sig_confirm(&jws.map_b64, &jws.map, &jwk, context) < 0) { lwsl_notice("%s: confirm EC sig failed\n", __func__); goto bail1; } /* A.3 "es512" RFC7515 worked example - sign */ l = (int)strlen(es512_cser); if (temp_len < l) goto bail1; p = lws_concat_temp(temp, temp_len); memcpy(p, es512_cser, (unsigned int)l + 1); temp_len -= (l + 1); /* scan the b64 compact serialization string to map the blocks */ if (lws_jws_b64_compact_map(p, l, &jws.map_b64) != 3) goto bail1; /* create the hash of the protected b64 part */ if (lws_genhash_init(&hash_ctx, jose.alg->hash_type) || lws_genhash_update(&hash_ctx, jws.map_b64.buf[LJWS_JOSE], jws.map_b64.len[LJWS_JOSE]) || lws_genhash_update(&hash_ctx, ".", 1) || lws_genhash_update(&hash_ctx, jws.map_b64.buf[LJWS_PYLD], jws.map_b64.len[LJWS_PYLD]) || lws_genhash_destroy(&hash_ctx, digest)) { lws_genhash_destroy(&hash_ctx, NULL); goto bail1; } /* overwrite the copy of the known b64 sig (it's placed inside buf) */ n = lws_jws_sign_from_b64(&jose, &jws, (char *)jws.map_b64.buf[LJWS_SIG], 1024); if (n < 0) { lwsl_err("%s: failed signing test packet\n", __func__); goto bail1; } jws.map_b64.len[LJWS_SIG] = (unsigned int)n; /* 2.4: confirm our generated signature can be verified */ p[l] = '\0'; if (lws_jws_sig_confirm_compact_b64(p, (unsigned int)l, &map, &jwk, context, lws_concat_temp(temp, temp_len), &temp_len) < 0) { lwsl_notice("%s: confirm our ECDSA sig failed\n", __func__); goto bail1; } /* jwt test */ { unsigned long long ull = lws_now_secs(); char buf[8192]; size_t cml = 2048, cml2 = 2048; if (lws_jwt_sign_compact(context, &jwk, "ES512", (char *)buf, &cml2, (char *)buf + 2048, 4096, "{\"iss\":\"warmcat.com\",\"aud\":" "\"https://libwebsockets.org/sai\"," "\"iat\":%llu," "\"nbf\":%llu," "\"exp\":%llu," "\"sub\":\"manage\"}", ull, ull - 60, ull + (30 * 24 * 3600) )) { lwsl_err("%s: failed to create JWT\n", __func__); goto bail1; } lwsl_notice("%s: jwt test '%s'\n", __func__, buf); if (lws_jwt_signed_validate(context, &jwk, "ES512", (const char *)buf, cml2, (char *)buf + 2048, 2048, (char *)buf + 4096, &cml)) { lwsl_err("%s: failed to parse JWT\n", __func__); goto bail1; } lwsl_notice("%s: jwt valid, payload '%s'\n", __func__, buf + 4096); } /* end */ ret = 0; bail1: lws_jwk_destroy(&jwk); lws_jose_destroy(&jose); bail: lwsl_notice("%s: selftest %s\n", __func__, ret ? "FAIL" : "OK"); return ret; } static char rsa_cert[] = "-----BEGIN CERTIFICATE-----\n" "MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD\n" "VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb\n" "MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx\n" "HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3\n" "WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl\n" "d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0\n" "cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA\n" "aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW\n" "aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8\n" "Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek\n" "LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH\n" "KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6\n" "jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ\n" "Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz\n" "TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK\n" "Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0\n" "nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo\n" "GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p\n" "sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU\n" "9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar\n" "jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow\n" "YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA\n" "xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P\n" "wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34\n" "H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv\n" "xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk\n" "ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g\n" "1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA\n" "AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg\n" "mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s\n" "8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX\n" "e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE=\n" "-----END CERTIFICATE-----\n", rsa_key[] = "-----BEGIN PRIVATE KEY-----\n" "MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ\n" "PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK\n" "nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ\n" "toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU\n" "0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT\n" "J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS\n" "Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN\n" "uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9\n" "fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn\n" "zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au\n" "ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB\n" "QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f\n" "qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+\n" "vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9\n" "fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A\n" "Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT\n" "G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/\n" "HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8\n" "YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl\n" "xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs\n" "esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw\n" "zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz\n" "mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw\n" "au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77\n" "40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5\n" "YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH\n" "PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj\n" "W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR\n" "naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6\n" "2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m\n" "39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79\n" "J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC\n" "R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp\n" "Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh\n" "BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE\n" "fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ\n" "x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI\n" "UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM\n" "OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L\n" "65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A\n" "aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5\n" "SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S\n" "me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I\n" "G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK\n" "TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY\n" "56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2\n" "gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr\n" "Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E\n" "NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs\n" "fBrpEY1IATtPq1taBZZogRqI3rOkkPk=\n" "-----END PRIVATE KEY-----\n"; int test_jwt_RS256(struct lws_context *context) { struct lws_jwk jwk; struct lws_x509_cert *pub = NULL; int ret = -1; int ret_encode; char sha1_fingerprint[30]; uint8_t sha1sum[20]; char der_buf[LWS_ARRAY_SIZE(rsa_cert)]; union lws_tls_cert_info_results *der_info = (union lws_tls_cert_info_results *)der_buf; if (lws_x509_create(&pub)) { lwsl_err("%s: failed to create x509 public key\n", __func__); goto bail; } if (lws_x509_parse_from_pem(pub, rsa_cert, LWS_ARRAY_SIZE(rsa_cert))) { lwsl_err("%s: failed to parse x509 public key\n", __func__); goto bail; } if (lws_x509_public_to_jwk(&jwk, pub, NULL, 2048)) { lwsl_err("%s: failed to copy public key to jwk\n", __func__); goto bail; } if (lws_x509_jwk_privkey_pem(context, &jwk, (char *)rsa_key, LWS_ARRAY_SIZE(rsa_key), NULL)) { lwsl_err("%s: failed to copy private key to jwk\n", __func__); goto bail; } if (lws_x509_info(pub, LWS_TLS_CERT_INFO_DER_RAW, der_info, LWS_ARRAY_SIZE(der_buf) - sizeof(*der_info) + sizeof(der_info->ns.name)) || der_info->ns.len <= 0) { lwsl_err("%s: failed to parse x509 public key\n", __func__); goto bail; } if (!lws_SHA1((unsigned char *)der_info->ns.name, (size_t)der_info->ns.len, sha1sum)) { lwsl_err("%s: sha1sum of public key failed\n", __func__); goto bail; } ret_encode = lws_b64_encode_string_url((char *)sha1sum, LWS_ARRAY_SIZE(sha1sum), sha1_fingerprint, LWS_ARRAY_SIZE(sha1_fingerprint)); if (ret_encode < 0) { lwsl_err("%s: failed to encode sha1sum to base64url\n", __func__); goto bail; } while (sha1_fingerprint[--ret_encode] == '=') sha1_fingerprint[ret_encode] = '\0'; lwsl_notice("%s: cert fingerprint '%s'\n", __func__, sha1_fingerprint); /* now produce jwt with some additional header fields */ { unsigned long long ull = lws_now_secs(); char buf[8192]; size_t cml = 2048, cml2 = 2048; const char hdr_fmt[] = "{\"alg\":\"RS256\", \"typ\":\"JWT\", \"x5t\":\"%s\"}"; char jose_hdr[LWS_ARRAY_SIZE(hdr_fmt) + LWS_ARRAY_SIZE(sha1_fingerprint)]; struct lws_jwt_sign_info info = { .alg = NULL, .jose_hdr = jose_hdr, .jose_hdr_len = (size_t)lws_snprintf(jose_hdr, LWS_ARRAY_SIZE(jose_hdr), hdr_fmt, sha1_fingerprint), .out = buf, .out_len = &cml2, .temp = buf + cml2, .tl = 4096 }; lwsl_notice("%s: jose_hdr of len %zu: '%s'\n", __func__, info.jose_hdr_len, info.jose_hdr); if (lws_jwt_sign_via_info(context, &jwk, &info, "{\"iss\":\"warmcat.com\",\"aud\":" "\"https://libwebsockets.org/sai\"," "\"iat\":%llu," "\"nbf\":%llu," "\"exp\":%llu," "\"sub\":\"manage\"}", ull, ull - 60, ull + (30 * 24 * 3600) )) { lwsl_err("%s: failed to create JWT\n", __func__); goto bail1; } lwsl_notice("%s: jwt test '%s'\n", __func__, buf); if (lws_jwt_signed_validate(context, &jwk, "RS256", (const char *)buf, cml2, (char *)buf + 2048, 2048, (char *)buf + 4096, &cml)) { lwsl_err("%s: failed to parse JWT\n", __func__); goto bail1; } lwsl_notice("%s: jwt valid, payload '%s'\n", __func__, buf + 4096); } /* end */ ret = 0; bail1: lws_jwk_destroy(&jwk); lws_x509_destroy(&pub); bail: lwsl_notice("%s: selftest %s\n", __func__, ret ? "FAIL" : "OK"); return ret; } int test_jws(struct lws_context *context) { int n = 0; n |= test_jws_none(context); n |= test_jws_HS256(context); n |= test_jws_RS256(context); n |= test_jws_ES256(context); n |= test_jws_ES512(context); n |= test_jwt_RS256(context); return n; } libwebsockets-4.3.5/minimal-examples/api-tests/api-test-jose/main.c000066400000000000000000000023341476025525100253230ustar00rootroot00000000000000/* * lws-api-test-jose * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include int test_jwk(struct lws_context *context); int test_jws(struct lws_context *context); int test_jwe(struct lws_context *context); int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int result = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS JOSE api tests\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ #if defined(LWS_WITH_NETWORK) info.port = CONTEXT_PORT_NO_LISTEN; #endif info.options = 0; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } result |= test_jwk(context); lwsl_notice("%d\n", result); result |= test_jws(context); lwsl_notice("%d\n", result); result |= test_jwe(context); lwsl_notice("%d\n", result); lwsl_user("Completed: %s\n", result ? "FAIL" : "PASS"); lws_context_destroy(context); return result; } libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lecp/000077500000000000000000000000001476025525100242145ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lecp/CMakeLists.txt000066400000000000000000000012411476025525100267520ustar00rootroot00000000000000project(lws-api-test-lecp C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(requirements 1) require_lws_config(LWS_WITH_CBOR 1 requirements) if (requirements) add_executable(${PROJECT_NAME} main.c) add_test(NAME api-test-lecp COMMAND lws-api-test-lecp) if (websockets_shared) target_link_libraries(${PROJECT_NAME} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${PROJECT_NAME} websockets_shared) else() target_link_libraries(${PROJECT_NAME} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lecp/README.md000066400000000000000000000057671476025525100255120ustar00rootroot00000000000000# lws api test lws_struct JSON Demonstrates how to use and performs selftests for lws_struct JSON serialization and deserialization ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 ``` $ ./lws-api-test-lws_struct-json [2019/03/30 22:09:09:2529] USER: LWS API selftest: lws_struct JSON [2019/03/30 22:09:09:2625] NOTICE: main: ++++++++++++++++ test 1 [2019/03/30 22:09:09:2812] NOTICE: builder.hostname = 'learn', timeout = 1800, targets (2) [2019/03/30 22:09:09:2822] NOTICE: target.name 'target1' (target 0x543a830) [2019/03/30 22:09:09:2824] NOTICE: target.name 'target2' (target 0x543a860) [2019/03/30 22:09:09:2826] NOTICE: main: .... strarting serialization of test 1 [2019/03/30 22:09:09:2899] NOTICE: ser says 1 {"schema":"com-warmcat-sai-builder","hostname":"learn","nspawn_timeout":1800,"targets":[{"name":"target1"},{"name":"target2"}]} [2019/03/30 22:09:09:2929] NOTICE: main: ++++++++++++++++ test 2 [2019/03/30 22:09:09:2932] NOTICE: builder.hostname = 'learn', timeout = 0, targets (3) [2019/03/30 22:09:09:2932] NOTICE: target.name 'target1' (target 0x543b060) [2019/03/30 22:09:09:2933] NOTICE: target.name 'target2' (target 0x543b090) [2019/03/30 22:09:09:2933] NOTICE: target.name 'target3' (target 0x543b0c0) [2019/03/30 22:09:09:2934] NOTICE: main: .... strarting serialization of test 2 [2019/03/30 22:09:09:2935] NOTICE: ser says 1 {"schema":"com-warmcat-sai-builder","hostname":"learn","nspawn_timeout":0,"targets":[{"name":"target1"},{"name":"target2"},{"name":"target3"}]} [2019/03/30 22:09:09:2940] NOTICE: main: ++++++++++++++++ test 3 [2019/03/30 22:09:09:2959] NOTICE: builder.hostname = 'learn', timeout = 1800, targets (2) [2019/03/30 22:09:09:2960] NOTICE: target.name 'target1' (target 0x543b450) [2019/03/30 22:09:09:2961] NOTICE: child 0x543b480, target.child.somename 'abc' [2019/03/30 22:09:09:2961] NOTICE: target.name 'target2' (target 0x543b490) [2019/03/30 22:09:09:2962] NOTICE: main: .... strarting serialization of test 3 [2019/03/30 22:09:09:2969] NOTICE: ser says 1 {"schema":"com-warmcat-sai-builder","hostname":"learn","nspawn_timeout":1800,"targets":[{"name":"target1","child":{"somename":"abc"}},{"name":"target2"}]} [2019/03/30 22:09:09:2970] NOTICE: main: ++++++++++++++++ test 4 [2019/03/30 22:09:09:2971] NOTICE: builder.hostname = 'learn', timeout = 1800, targets (0) [2019/03/30 22:09:09:2971] NOTICE: main: .... strarting serialization of test 4 [2019/03/30 22:09:09:2973] NOTICE: ser says 1 {"schema":"com-warmcat-sai-builder","hostname":"learn","nspawn_timeout":1800} [2019/03/30 22:09:09:2974] NOTICE: main: ++++++++++++++++ test 5 [2019/03/30 22:09:09:2978] NOTICE: builder.hostname = '', timeout = 0, targets (0) [2019/03/30 22:09:09:2979] NOTICE: main: .... strarting serialization of test 5 [2019/03/30 22:09:09:2980] NOTICE: ser says 1 {"schema":"com-warmcat-sai-builder","hostname":"","nspawn_timeout":0} [2019/03/30 22:09:09:2982] USER: Completed: PASS ``` libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lecp/main.c000066400000000000000000005410211476025525100253070ustar00rootroot00000000000000/* * lws-api-test-lecp * * Written in 2010-2021 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * unit tests for lecp */ #include #if defined(LWS_WITH_CBOR_FLOAT) #include #endif #define VERBOSE #if defined(VERBOSE) static const char * const reason_names[] = { "LECPCB_CONSTRUCTED", "LECPCB_DESTRUCTED", "LECPCB_START", "LECPCB_COMPLETE", "LECPCB_FAILED", "LECPCB_PAIR_NAME", "LECPCB_VAL_TRUE", "LECPCB_VAL_FALSE", "LECPCB_VAL_NULL", "LECPCB_VAL_NUM_INT", "LECPCB_VAL_RESERVED", /* float in lejp */ "LECPCB_VAL_STR_START", "LECPCB_VAL_STR_CHUNK", "LECPCB_VAL_STR_END", "LECPCB_ARRAY_START", "LECPCB_ARRAY_END", "LECPCB_OBJECT_START", "LECPCB_OBJECT_END", "LECPCB_TAG_START", "LECPCB_TAG_END", "LECPCB_VAL_NUM_UINT", "LECPCB_VAL_UNDEFINED", "LECPCB_VAL_FLOAT16", "LECPCB_VAL_FLOAT32", "LECPCB_VAL_FLOAT64", "LECPCB_VAL_SIMPLE", "LECPCB_VAL_BLOB_START", "LECPCB_VAL_BLOB_CHUNK", "LECPCB_VAL_BLOB_END", "LECPCB_ARRAY_ITEM_START", "LECPCB_ARRAY_ITEM_END", "LECPCB_LITERAL_CBOR" }; #endif /* * Based on the official CBOR test vectors from here * * https://github.com/cbor/test-vectors/blob/master/appendix_a.json */ static const uint8_t test1[] = { 0x00 }, test2[] = { 0x01 }, test3[] = { 0x0a }, test4[] = { 0x17 }, test5[] = { 0x18, 0x18 }, test6[] = { 0x18, 0x19 }, test7[] = { 0x18, 0x64 }, test8[] = { 0x19, 0x03, 0xe8 }, test9[] = { 0x1a, 0x00, 0x0f, 0x42, 0x40 }, test10[] = { 0x1b, 0x00, 0x00, 0x00, 0xe8, 0xd4, 0xa5, 0x10, 0x00 }, test11[] = { 0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, test12[] = { 0xc2, 0x49, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, test13[] = { 0x3b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, test14[] = { 0xc3, 0x49, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, test15[] = { 0x20 }, test16[] = { 0x29 }, test17[] = { 0x38, 0x63 }, test18[] = { 0x39, 0x03, 0xe7 }, test19[] = { 0xf9, 0x00, 0x00 }, test20[] = { 0xf9, 0x80, 0x00 }, test21[] = { 0xf9, 0x3c, 0x00 }, test22[] = { 0xfb, 0x3f, 0xf1, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9a }, test23[] = { 0xf9, 0x3e, 0x00 }, test24[] = { 0xf9, 0x7b, 0xff }, test25[] = { 0xfa, 0x47, 0xc3, 0x50, 0x00 }, test26[] = { 0xfa, 0x7f, 0x7f, 0xff, 0xff }, test27[] = { 0xfb, 0x7e, 0x37, 0xe4, 0x3c, 0x88, 0x00, 0x75, 0x9c }, test28[] = { 0xf9, 0x00, 0x01 }, test29[] = { 0xf9, 0x04, 0x00 }, test30[] = { 0xf9, 0xc4, 0x00 }, test31[] = { 0xfb, 0xc0, 0x10, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66 }, test32[] = { 0xf9, 0x7c, 0x00 }, test33[] = { 0xf9, 0x7e, 0x00 }, test34[] = { 0xf9, 0xfc, 0x00 }, test35[] = { 0xfa, 0x7f, 0x80, 0x00, 0x00 }, test36[] = { 0xfa, 0x7f, 0xc0, 0x00, 0x00 }, test37[] = { 0xfa, 0xff, 0x80, 0x00, 0x00 }, test38[] = { 0xfb, 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, test39[] = { 0xfb, 0x7f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, test40[] = { 0xfb, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, test41[] = { 0xf4 }, test42[] = { 0xf5 }, test43[] = { 0xf6 }, test44[] = { 0xf7 }, test45[] = { 0xf0 }, test46[] = { 0xf8, 0x18 }, test47[] = { 0xf8, 0xff }, test48[] = { 0xc0, 0x74, 0x32, 0x30, 0x31, 0x33, 0x2d, 0x30, 0x33, 0x2d, 0x32, 0x31, 0x54, 0x32, 0x30, 0x3a, 0x30, 0x34, 0x3a, 0x30, 0x30, 0x5a }, test49[] = { 0xc1, 0x1a, 0x51, 0x4b, 0x67, 0xb0 }, test50[] = { 0xc1, 0xfb, 0x41, 0xd4, 0x52, 0xd9, 0xec, 0x20, 0x00, 0x00 }, test51[] = { 0xd7, 0x44, 0x01, 0x02, 0x03, 0x04 }, test52[] = { 0xd8, 0x18, 0x45, 0x64, 0x49, 0x45, 0x54, 0x46 }, test53[] = { 0xd8, 0x20, 0x76, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d }, test54[] = { 0x40 }, test55[] = { 0x44, 0x01, 0x02, 0x03, 0x04 }, test56[] = { 0x60 }, test57[] = { 0x61, 0x61 }, test58[] = { 0x64, 0x49, 0x45, 0x54, 0x46 }, test59[] = { 0x62, 0x22, 0x5c }, test60[] = { 0x62, 0xc3, 0xbc }, test61[] = { 0x63, 0xe6, 0xb0, 0xb4 }, test62[] = { 0x64, 0xf0, 0x90, 0x85, 0x91 }, test63[] = { 0x80 }, test64[] = { 0x83, 0x01, 0x02, 0x03 }, test65[] = { 0x83, 0x01, 0x82, 0x02, 0x03, 0x82, 0x04, 0x05 }, test66[] = { 0x98, 0x19, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x18, 0x18, 0x19 }, test67[] = { 0xa0 }, test68[] = { 0xa2, 0x01, 0x02, 0x03, 0x04 }, test69[] = { 0xa2, 0x61, 0x61, 0x01, 0x61, 0x62, 0x82, 0x02, 0x03 }, test70[] = { 0x82, 0x61, 0x61, 0xa1, 0x61, 0x62, 0x61, 0x63 }, test71[] = { 0xa5, 0x61, 0x61, 0x61, 0x41, 0x61, 0x62, 0x61, 0x42, 0x61, 0x63, 0x61, 0x43, 0x61, 0x64, 0x61, 0x44, 0x61, 0x65, 0x61, 0x45 }, test72[] = { 0x5f, 0x42, 0x01, 0x02, 0x43, 0x03, 0x04, 0x05, 0xff }, test73[] = { 0x7f, 0x65, 0x73, 0x74, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x67, 0xff }, test74[] = { 0x9f, 0xff }, test75[] = { 0x9f, 0x01, 0x82, 0x02, 0x03, 0x9f, 0x04, 0x05, 0xff, 0xff }, test76[] = { 0x9f, 0x01, 0x82, 0x02, 0x03, 0x82, 0x04, 0x05, 0xff }, test77[] = { 0x83, 0x01, 0x82, 0x02, 0x03, 0x9f, 0x04, 0x05, 0xff }, test78[] = { 0x83, 0x01, 0x9f, 0x02, 0x03, 0xff, 0x82, 0x04, 0x05 }, test79[] = { 0x9f, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x18, 0x18, 0x19, 0xff }, test80[] = { 0xbf, 0x61, 0x61, 0x01, 0x61, 0x62, 0x9f, 0x02, 0x03, 0xff, 0xff }, test81[] = { 0x82, 0x61, 0x61, 0xbf, 0x61, 0x62, 0x61, 0x63, 0xff }, test82[] = { 0xbf, 0x63, 0x46, 0x75, 0x6e, 0xf5, 0x63, 0x41, 0x6d, 0x74, 0x21, 0xff }, /* some random COSE examples * * COSE hmac-01 test vector */ test83[] = { 0xD8, 0x61, 0x85, 0x43, 0xA1, 0x01, 0x05, 0xA0, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2E, 0x58, 0x20, 0x2B, 0xDC, 0xC8, 0x9F, 0x05, 0x82, 0x16, 0xB8, 0xA2, 0x08, 0xDD, 0xC6, 0xD8, 0xB5, 0x4A, 0xA9, 0x1F, 0x48, 0xBD, 0x63, 0x48, 0x49, 0x86, 0x56, 0x51, 0x05, 0xC9, 0xAD, 0x5A, 0x66, 0x82, 0xF6, 0x81, 0x83, 0x40, 0xA2, 0x01, 0x25, 0x04, 0x4A, 0x6F, 0x75, 0x72, 0x2D, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x40 }, /* * COSE hmac-02 test vector */ test84[] = { 0xD8, 0x61, 0x85, 0x43, 0xA1, 0x01, 0x06, 0xA0, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2E, 0x58, 0x30, 0xB3, 0x09, 0x7F, 0x70, 0x00, 0x9A, 0x11, 0x50, 0x74, 0x09, 0x59, 0x8A, 0x83, 0xE1, 0x5B, 0xBB, 0xBF, 0x19, 0x82, 0xDC, 0xE2, 0x8E, 0x5A, 0xB6, 0xD5, 0xA6, 0xAF, 0xF6, 0x89, 0x7B, 0xD2, 0x4B, 0xB8, 0xB7, 0x47, 0x96, 0x22, 0xC9, 0x40, 0x1B, 0x24, 0x09, 0x0D, 0x45, 0x82, 0x06, 0xD5, 0x87, 0x81, 0x83, 0x40, 0xA2, 0x01, 0x25, 0x04, 0x46, 0x73, 0x65, 0x63, 0x2D, 0x34, 0x38, 0x40 }, test85[] = { 0xD8, 0x61, 0x85, 0x43, 0xA1, 0x01, 0x07, 0xA0, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2E, 0x58, 0x40, 0xCD, 0x28, 0xA6, 0xB3, 0xCF, 0xBB, 0xBF, 0x21, 0x48, 0x51, 0xB9, 0x06, 0xE0, 0x50, 0x05, 0x6C, 0xB4, 0x38, 0xA8, 0xB8, 0x89, 0x05, 0xB8, 0xB7, 0x46, 0x19, 0x77, 0x02, 0x27, 0x11, 0xA9, 0xD8, 0xAC, 0x5D, 0xBC, 0x54, 0xE2, 0x9A, 0x56, 0xD9, 0x26, 0x04, 0x6B, 0x40, 0xFC, 0x26, 0x07, 0xC2, 0x5B, 0x34, 0x44, 0x54, 0xAA, 0x5F, 0x68, 0xDE, 0x09, 0xA3, 0xE5, 0x25, 0xD3, 0x86, 0x5A, 0x05, 0x81, 0x83, 0x40, 0xA2, 0x01, 0x25, 0x04, 0x46, 0x73, 0x65, 0x63, 0x2D, 0x36, 0x34, 0x40 }, test86[] = { 0xD8, 0x61, 0x85, 0x43, 0xA1, 0x01, 0x05, 0xA0, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2E, 0x58, 0x20, 0x2B, 0xDC, 0xC8, 0x9F, 0x05, 0x82, 0x16, 0xB8, 0xA2, 0x08, 0xDD, 0xC6, 0xD8, 0xB5, 0x4A, 0xA9, 0x1F, 0x48, 0xBD, 0x63, 0x48, 0x49, 0x86, 0x56, 0x51, 0x05, 0xC9, 0xAD, 0x5A, 0x66, 0x82, 0xF7, 0x81, 0x83, 0x40, 0xA2, 0x01, 0x25, 0x04, 0x4A, 0x6F, 0x75, 0x72, 0x2D, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x40 }, test87[] = { 0xD8, 0x61, 0x85, 0x43, 0xA1, 0x01, 0x04, 0xA0, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2E, 0x48, 0x6F, 0x35, 0xCA, 0xB7, 0x79, 0xF7, 0x78, 0x33, 0x81, 0x83, 0x40, 0xA2, 0x01, 0x25, 0x04, 0x4A, 0x6F, 0x75, 0x72, 0x2D, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x40 /* COSE HMAX Enc 01 vector */ }, test88[] = { 0xD1, 0x84, 0x43, 0xA1, 0x01, 0x05, 0xA0, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2E, 0x58, 0x20, 0xA1, 0xA8, 0x48, 0xD3, 0x47, 0x1F, 0x9D, 0x61, 0xEE, 0x49, 0x01, 0x8D, 0x24, 0x4C, 0x82, 0x47, 0x72, 0xF2, 0x23, 0xAD, 0x4F, 0x93, 0x52, 0x93, 0xF1, 0x78, 0x9F, 0xC3, 0xA0, 0x8D, 0x8C, 0x58 }, test89[] = { 0xD1, 0x84, 0x43, 0xA1, 0x01, 0x06, 0xA0, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2E, 0x58, 0x30, 0x99, 0x8D, 0x26, 0xC6, 0x45, 0x9A, 0xAE, 0xEC, 0xF4, 0x4E, 0xD2, 0x0C, 0xE0, 0x0C, 0x8C, 0xCE, 0xDF, 0x0A, 0x1F, 0x3D, 0x22, 0xA9, 0x2F, 0xC0, 0x5D, 0xB0, 0x8C, 0x5A, 0xEB, 0x1C, 0xB5, 0x94, 0xCA, 0xAF, 0x5A, 0x5C, 0x5E, 0x2E, 0x9D, 0x01, 0xCC, 0xE7, 0xE7, 0x7A, 0x93, 0xAA, 0x8C, 0x62 }, test90[] = { 0xD1, 0x84, 0x43, 0xA1, 0x01, 0x07, 0xA0, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2E, 0x58, 0x40, 0x4A, 0x55, 0x5B, 0xF9, 0x71, 0xF7, 0xC1, 0x89, 0x1D, 0x9D, 0xDF, 0x30, 0x4A, 0x1A, 0x13, 0x2E, 0x2D, 0x6F, 0x81, 0x74, 0x49, 0x47, 0x4D, 0x81, 0x3E, 0x6D, 0x04, 0xD6, 0x59, 0x62, 0xBE, 0xD8, 0xBB, 0xA7, 0x0C, 0x17, 0xE1, 0xF5, 0x30, 0x8F, 0xA3, 0x99, 0x62, 0x95, 0x9A, 0x4B, 0x9B, 0x8D, 0x7D, 0xA8, 0xE6, 0xD8, 0x49, 0xB2, 0x09, 0xDC, 0xD3, 0xE9, 0x8C, 0xC0, 0xF1, 0x1E, 0xDD, 0xF2 }, test91[] = { 0xD1, 0x84, 0x43, 0xA1, 0x01, 0x05, 0xA0, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2E, 0x58, 0x20, 0xA1, 0xA8, 0x48, 0xD3, 0x47, 0x1F, 0x9D, 0x61, 0xEE, 0x49, 0x01, 0x8D, 0x24, 0x4C, 0x82, 0x47, 0x72, 0xF2, 0x23, 0xAD, 0x4F, 0x93, 0x52, 0x93, 0xF1, 0x78, 0x9F, 0xC3, 0xA0, 0x8D, 0x8C, 0x59 }, test92[] = { 0xD1, 0x84, 0x43, 0xA1, 0x01, 0x04, 0xA0, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2E, 0x48, 0x11, 0xF9, 0xE3, 0x57, 0x97, 0x5F, 0xB8, 0x49 /* * COSE countersign encrypt-01 */ }, test93[] = { 0xd0, 0x83, 0x43, 0xa1, 0x01, 0x01, 0xa2, 0x05, 0x4c, 0x02, 0xd1, 0xf7, 0xe6, 0xf2, 0x6c, 0x43, 0xd4, 0x86, 0x8d, 0x87, 0xce, 0x07, 0x83, 0x43, 0xa1, 0x01, 0x27, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0xe1, 0x04, 0x39, 0x15, 0x4c, 0xc7, 0x5c, 0x7a, 0x3a, 0x53, 0x91, 0x49, 0x1f, 0x88, 0x65, 0x1e, 0x02, 0x92, 0xfd, 0x0f, 0xe0, 0xe0, 0x2c, 0xf7, 0x40, 0x54, 0x7e, 0xaf, 0x66, 0x77, 0xb4, 0xa4, 0x04, 0x0b, 0x8e, 0xca, 0x16, 0xdb, 0x59, 0x28, 0x81, 0x26, 0x2f, 0x77, 0xb1, 0x4c, 0x1a, 0x08, 0x6c, 0x02, 0x26, 0x8b, 0x17, 0x17, 0x1c, 0xa1, 0x6b, 0xe4, 0xb8, 0x59, 0x5f, 0x8c, 0x0a, 0x08, 0x58, 0x24, 0x60, 0x97, 0x3a, 0x94, 0xbb, 0x28, 0x98, 0x00, 0x9e, 0xe5, 0x2e, 0xcf, 0xd9, 0xab, 0x1d, 0xd2, 0x58, 0x67, 0x37, 0x4b, 0x16, 0x2e, 0x2c, 0x03, 0x56, 0x8b, 0x41, 0xf5, 0x7c, 0x3c, 0xc1, 0x6f, 0x91, 0x66, 0x25, 0x0a /* * COSE countersign encrypt-02 */ }, test94[] = { 0xd0, 0x83, 0x43, 0xa1, 0x01, 0x01, 0xa2, 0x05, 0x4c, 0x02, 0xd1, 0xf7, 0xe6, 0xf2, 0x6c, 0x43, 0xd4, 0x86, 0x8d, 0x87, 0xce, 0x07, 0x82, 0x83, 0x43, 0xa1, 0x01, 0x27, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0xe1, 0x04, 0x39, 0x15, 0x4c, 0xc7, 0x5c, 0x7a, 0x3a, 0x53, 0x91, 0x49, 0x1f, 0x88, 0x65, 0x1e, 0x02, 0x92, 0xfd, 0x0f, 0xe0, 0xe0, 0x2c, 0xf7, 0x40, 0x54, 0x7e, 0xaf, 0x66, 0x77, 0xb4, 0xa4, 0x04, 0x0b, 0x8e, 0xca, 0x16, 0xdb, 0x59, 0x28, 0x81, 0x26, 0x2f, 0x77, 0xb1, 0x4c, 0x1a, 0x08, 0x6c, 0x02, 0x26, 0x8b, 0x17, 0x17, 0x1c, 0xa1, 0x6b, 0xe4, 0xb8, 0x59, 0x5f, 0x8c, 0x0a, 0x08, 0x83, 0x43, 0xa1, 0x01, 0x26, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0xfc, 0xa9, 0x8e, 0xca, 0xc8, 0x0b, 0x5f, 0xeb, 0x3a, 0xc7, 0xc1, 0x08, 0xb2, 0xb7, 0x91, 0x10, 0xde, 0x88, 0x86, 0x7b, 0xc0, 0x42, 0x6f, 0xc8, 0x3c, 0x53, 0xcc, 0xd6, 0x78, 0x96, 0x94, 0xed, 0xc5, 0xfe, 0xe3, 0xc4, 0x0d, 0xe8, 0xe7, 0xb4, 0x4f, 0xe8, 0xaa, 0xd3, 0x67, 0xe0, 0x95, 0xc8, 0xfc, 0x31, 0xb7, 0x9e, 0xe6, 0x66, 0xdf, 0x9c, 0xf9, 0x09, 0x06, 0xeb, 0x43, 0x75, 0x6c, 0x73, 0x58, 0x24, 0x60, 0x97, 0x3a, 0x94, 0xbb, 0x28, 0x98, 0x00, 0x9e, 0xe5, 0x2e, 0xcf, 0xd9, 0xab, 0x1d, 0xd2, 0x58, 0x67, 0x37, 0x4b, 0x16, 0x2e, 0x2c, 0x03, 0x56, 0x8b, 0x41, 0xf5, 0x7c, 0x3c, 0xc1, 0x6f, 0x91, 0x66, 0x25, 0x0a /* * COSE countersign enveloped-01 */ }, test95[] = { 0xd8, 0x60, 0x84, 0x43, 0xa1, 0x01, 0x01, 0xa2, 0x05, 0x4c, 0x02, 0xd1, 0xf7, 0xe6, 0xf2, 0x6c, 0x43, 0xd4, 0x86, 0x8d, 0x87, 0xce, 0x07, 0x83, 0x43, 0xa1, 0x01, 0x27, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0x9a, 0x8e, 0xed, 0xe3, 0xb3, 0xcb, 0x83, 0x7b, 0xa0, 0x0d, 0xf0, 0x8f, 0xa2, 0x1b, 0x12, 0x8b, 0x2d, 0x6d, 0x91, 0x62, 0xa4, 0x29, 0x0a, 0x58, 0x2d, 0x9f, 0x19, 0xbd, 0x0f, 0xb5, 0x02, 0xf0, 0xf9, 0x2b, 0x9b, 0xf4, 0x53, 0xa4, 0x05, 0x40, 0x1f, 0x8b, 0x70, 0x55, 0xef, 0x4e, 0x95, 0x8d, 0xf7, 0xf4, 0xfb, 0xd7, 0xcf, 0xb4, 0xa0, 0xc9, 0x71, 0x60, 0xf9, 0x47, 0x2b, 0x0a, 0xa1, 0x04, 0x58, 0x24, 0x60, 0x97, 0x3a, 0x94, 0xbb, 0x28, 0x98, 0x00, 0x9e, 0xe5, 0x2e, 0xcf, 0xd9, 0xab, 0x1d, 0xd2, 0x58, 0x67, 0x37, 0x4b, 0x35, 0x81, 0xf2, 0xc8, 0x00, 0x39, 0x82, 0x63, 0x50, 0xb9, 0x7a, 0xe2, 0x30, 0x0e, 0x42, 0xfc, 0x81, 0x83, 0x40, 0xa2, 0x01, 0x25, 0x04, 0x4a, 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x40 }, test96[] = { 0xd8, 0x60, 0x84, 0x43, 0xa1, 0x01, 0x01, 0xa2, 0x05, 0x4c, 0x02, 0xd1, 0xf7, 0xe6, 0xf2, 0x6c, 0x43, 0xd4, 0x86, 0x8d, 0x87, 0xce, 0x07, 0x82, 0x83, 0x43, 0xa1, 0x01, 0x27, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0x9a, 0x8e, 0xed, 0xe3, 0xb3, 0xcb, 0x83, 0x7b, 0xa0, 0x0d, 0xf0, 0x8f, 0xa2, 0x1b, 0x12, 0x8b, 0x2d, 0x6d, 0x91, 0x62, 0xa4, 0x29, 0x0a, 0x58, 0x2d, 0x9f, 0x19, 0xbd, 0x0f, 0xb5, 0x02, 0xf0, 0xf9, 0x2b, 0x9b, 0xf4, 0x53, 0xa4, 0x05, 0x40, 0x1f, 0x8b, 0x70, 0x55, 0xef, 0x4e, 0x95, 0x8d, 0xf7, 0xf4, 0xfb, 0xd7, 0xcf, 0xb4, 0xa0, 0xc9, 0x71, 0x60, 0xf9, 0x47, 0x2b, 0x0a, 0xa1, 0x04, 0x83, 0x43, 0xa1, 0x01, 0x26, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0x24, 0x27, 0xcb, 0x37, 0x56, 0x85, 0x0f, 0xbb, 0x79, 0x05, 0x18, 0x07, 0xc8, 0xb2, 0x3d, 0x2e, 0x6d, 0x16, 0xa3, 0x22, 0x4f, 0x99, 0x01, 0xb4, 0x73, 0x99, 0xcf, 0xc7, 0xe3, 0xfa, 0xc4, 0xcc, 0x62, 0x1d, 0xbb, 0xeb, 0x02, 0x02, 0xa6, 0xd8, 0xbb, 0x25, 0x69, 0x5c, 0x9d, 0xcc, 0x9c, 0x47, 0x49, 0x20, 0xff, 0x57, 0x60, 0x6d, 0x76, 0x4d, 0xea, 0x19, 0x2f, 0xc8, 0x67, 0x41, 0x16, 0xf2, 0x58, 0x24, 0x60, 0x97, 0x3a, 0x94, 0xbb, 0x28, 0x98, 0x00, 0x9e, 0xe5, 0x2e, 0xcf, 0xd9, 0xab, 0x1d, 0xd2, 0x58, 0x67, 0x37, 0x4b, 0x35, 0x81, 0xf2, 0xc8, 0x00, 0x39, 0x82, 0x63, 0x50, 0xb9, 0x7a, 0xe2, 0x30, 0x0e, 0x42, 0xfc, 0x81, 0x83, 0x40, 0xa2, 0x01, 0x25, 0x04, 0x4a, 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x40 }, test97[] = { 0xd8, 0x60, 0x84, 0x43, 0xa1, 0x01, 0x01, 0xa1, 0x05, 0x4c, 0x02, 0xd1, 0xf7, 0xe6, 0xf2, 0x6c, 0x43, 0xd4, 0x86, 0x8d, 0x87, 0xce, 0x58, 0x24, 0x60, 0x97, 0x3a, 0x94, 0xbb, 0x28, 0x98, 0x00, 0x9e, 0xe5, 0x2e, 0xcf, 0xd9, 0xab, 0x1d, 0xd2, 0x58, 0x67, 0x37, 0x4b, 0x35, 0x81, 0xf2, 0xc8, 0x00, 0x39, 0x82, 0x63, 0x50, 0xb9, 0x7a, 0xe2, 0x30, 0x0e, 0x42, 0xfc, 0x81, 0x83, 0x40, 0xa3, 0x01, 0x25, 0x04, 0x4a, 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x07, 0x83, 0x43, 0xa1, 0x01, 0x27, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0xcc, 0xb1, 0xf3, 0xfe, 0xdf, 0xce, 0xa7, 0x2b, 0x9c, 0x86, 0x79, 0x63, 0xe2, 0x52, 0xb6, 0x65, 0x8a, 0xd0, 0x7f, 0x3f, 0x5f, 0x15, 0xa3, 0x26, 0xa3, 0xf5, 0x72, 0x54, 0xcc, 0xb8, 0xd4, 0x8d, 0x60, 0x02, 0x1d, 0x2f, 0x1f, 0x8a, 0x80, 0x3b, 0x84, 0x4b, 0x78, 0x72, 0x16, 0x6c, 0x6d, 0x45, 0x90, 0x25, 0xd2, 0x1c, 0x8c, 0x84, 0x62, 0xa2, 0x44, 0xba, 0x19, 0x60, 0x4e, 0xc4, 0xd5, 0x0b, 0x40 }, test98[] = { 0xd8, 0x61, 0x85, 0x43, 0xa1, 0x01, 0x05, 0xa1, 0x07, 0x83, 0x43, 0xa1, 0x01, 0x27, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0xb4, 0x92, 0x4b, 0x18, 0xeb, 0x4e, 0x04, 0x73, 0x13, 0xc7, 0x07, 0xb0, 0xed, 0xa4, 0xab, 0x84, 0x43, 0x45, 0xf2, 0xc4, 0x49, 0x87, 0xd6, 0xf9, 0xeb, 0xcc, 0x77, 0x7e, 0xfd, 0x40, 0x78, 0xcc, 0x0f, 0x4c, 0x10, 0x8d, 0xef, 0x95, 0x9f, 0x78, 0xf1, 0xed, 0xb2, 0x76, 0x54, 0x25, 0x78, 0x5f, 0xcd, 0x17, 0xd5, 0x12, 0xbe, 0x31, 0xee, 0xb6, 0x6b, 0xef, 0xf1, 0xe8, 0xfc, 0x27, 0x47, 0x07, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x58, 0x20, 0x2b, 0xdc, 0xc8, 0x9f, 0x05, 0x82, 0x16, 0xb8, 0xa2, 0x08, 0xdd, 0xc6, 0xd8, 0xb5, 0x4a, 0xa9, 0x1f, 0x48, 0xbd, 0x63, 0x48, 0x49, 0x86, 0x56, 0x51, 0x05, 0xc9, 0xad, 0x5a, 0x66, 0x82, 0xf6, 0x81, 0x83, 0x40, 0xa2, 0x01, 0x25, 0x04, 0x4a, 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x40 }, test99[] = { 0xd8, 0x61, 0x85, 0x43, 0xa1, 0x01, 0x05, 0xa1, 0x07, 0x82, 0x83, 0x43, 0xa1, 0x01, 0x27, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0xb4, 0x92, 0x4b, 0x18, 0xeb, 0x4e, 0x04, 0x73, 0x13, 0xc7, 0x07, 0xb0, 0xed, 0xa4, 0xab, 0x84, 0x43, 0x45, 0xf2, 0xc4, 0x49, 0x87, 0xd6, 0xf9, 0xeb, 0xcc, 0x77, 0x7e, 0xfd, 0x40, 0x78, 0xcc, 0x0f, 0x4c, 0x10, 0x8d, 0xef, 0x95, 0x9f, 0x78, 0xf1, 0xed, 0xb2, 0x76, 0x54, 0x25, 0x78, 0x5f, 0xcd, 0x17, 0xd5, 0x12, 0xbe, 0x31, 0xee, 0xb6, 0x6b, 0xef, 0xf1, 0xe8, 0xfc, 0x27, 0x47, 0x07, 0x83, 0x43, 0xa1, 0x01, 0x26, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0x6a, 0xcd, 0x94, 0xd3, 0xcc, 0xf7, 0x1d, 0x19, 0x2e, 0x85, 0x28, 0x36, 0x0b, 0xa7, 0xe3, 0x46, 0xda, 0xc4, 0x64, 0xe9, 0xed, 0xca, 0x4c, 0xfe, 0xb6, 0xce, 0xb6, 0xbd, 0xe7, 0xba, 0xec, 0x9f, 0xf2, 0x6c, 0xa6, 0xbd, 0xf7, 0x3d, 0x0b, 0xe4, 0x1e, 0x36, 0x12, 0x9d, 0xcf, 0xf7, 0x51, 0xdd, 0x2b, 0x5a, 0xd5, 0xce, 0x11, 0x6e, 0x8a, 0x96, 0x3a, 0x27, 0x38, 0xa2, 0x99, 0x47, 0x7a, 0x68, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x58, 0x20, 0x2b, 0xdc, 0xc8, 0x9f, 0x05, 0x82, 0x16, 0xb8, 0xa2, 0x08, 0xdd, 0xc6, 0xd8, 0xb5, 0x4a, 0xa9, 0x1f, 0x48, 0xbd, 0x63, 0x48, 0x49, 0x86, 0x56, 0x51, 0x05, 0xc9, 0xad, 0x5a, 0x66, 0x82, 0xf6, 0x81, 0x83, 0x40, 0xa2, 0x01, 0x25, 0x04, 0x4a, 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x40 }, test100[] = { 0xd1, 0x84, 0x43, 0xa1, 0x01, 0x05, 0xa1, 0x07, 0x83, 0x43, 0xa1, 0x01, 0x27, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0xb4, 0x92, 0x4b, 0x18, 0xeb, 0x4e, 0x04, 0x73, 0x13, 0xc7, 0x07, 0xb0, 0xed, 0xa4, 0xab, 0x84, 0x43, 0x45, 0xf2, 0xc4, 0x49, 0x87, 0xd6, 0xf9, 0xeb, 0xcc, 0x77, 0x7e, 0xfd, 0x40, 0x78, 0xcc, 0x0f, 0x4c, 0x10, 0x8d, 0xef, 0x95, 0x9f, 0x78, 0xf1, 0xed, 0xb2, 0x76, 0x54, 0x25, 0x78, 0x5f, 0xcd, 0x17, 0xd5, 0x12, 0xbe, 0x31, 0xee, 0xb6, 0x6b, 0xef, 0xf1, 0xe8, 0xfc, 0x27, 0x47, 0x07, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x58, 0x20, 0xa1, 0xa8, 0x48, 0xd3, 0x47, 0x1f, 0x9d, 0x61, 0xee, 0x49, 0x01, 0x8d, 0x24, 0x4c, 0x82, 0x47, 0x72, 0xf2, 0x23, 0xad, 0x4f, 0x93, 0x52, 0x93, 0xf1, 0x78, 0x9f, 0xc3, 0xa0, 0x8d, 0x8c, 0x58 }, test101[] = { /* mac-02 */ 0xd8, 0x61, 0x85, 0x43, 0xa1, 0x01, 0x05, 0xa1, 0x07, 0x82, 0x83, 0x43, 0xa1, 0x01, 0x27, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0xb4, 0x92, 0x4b, 0x18, 0xeb, 0x4e, 0x04, 0x73, 0x13, 0xc7, 0x07, 0xb0, 0xed, 0xa4, 0xab, 0x84, 0x43, 0x45, 0xf2, 0xc4, 0x49, 0x87, 0xd6, 0xf9, 0xeb, 0xcc, 0x77, 0x7e, 0xfd, 0x40, 0x78, 0xcc, 0x0f, 0x4c, 0x10, 0x8d, 0xef, 0x95, 0x9f, 0x78, 0xf1, 0xed, 0xb2, 0x76, 0x54, 0x25, 0x78, 0x5f, 0xcd, 0x17, 0xd5, 0x12, 0xbe, 0x31, 0xee, 0xb6, 0x6b, 0xef, 0xf1, 0xe8, 0xfc, 0x27, 0x47, 0x07, 0x83, 0x43, 0xa1, 0x01, 0x26, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0x6a, 0xcd, 0x94, 0xd3, 0xcc, 0xf7, 0x1d, 0x19, 0x2e, 0x85, 0x28, 0x36, 0x0b, 0xa7, 0xe3, 0x46, 0xda, 0xc4, 0x64, 0xe9, 0xed, 0xca, 0x4c, 0xfe, 0xb6, 0xce, 0xb6, 0xbd, 0xe7, 0xba, 0xec, 0x9f, 0xf2, 0x6c, 0xa6, 0xbd, 0xf7, 0x3d, 0x0b, 0xe4, 0x1e, 0x36, 0x12, 0x9d, 0xcf, 0xf7, 0x51, 0xdd, 0x2b, 0x5a, 0xd5, 0xce, 0x11, 0x6e, 0x8a, 0x96, 0x3a, 0x27, 0x38, 0xa2, 0x99, 0x47, 0x7a, 0x68, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x58, 0x20, 0x2b, 0xdc, 0xc8, 0x9f, 0x05, 0x82, 0x16, 0xb8, 0xa2, 0x08, 0xdd, 0xc6, 0xd8, 0xb5, 0x4a, 0xa9, 0x1f, 0x48, 0xbd, 0x63, 0x48, 0x49, 0x86, 0x56, 0x51, 0x05, 0xc9, 0xad, 0x5a, 0x66, 0x82, 0xf6, 0x81, 0x83, 0x40, 0xa2, 0x01, 0x25, 0x04, 0x4a, 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x40 }, test102[] = { /* mac0-01 */ 0xd1, 0x84, 0x43, 0xa1, 0x01, 0x05, 0xa1, 0x07, 0x83, 0x43, 0xa1, 0x01, 0x27, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0xb4, 0x92, 0x4b, 0x18, 0xeb, 0x4e, 0x04, 0x73, 0x13, 0xc7, 0x07, 0xb0, 0xed, 0xa4, 0xab, 0x84, 0x43, 0x45, 0xf2, 0xc4, 0x49, 0x87, 0xd6, 0xf9, 0xeb, 0xcc, 0x77, 0x7e, 0xfd, 0x40, 0x78, 0xcc, 0x0f, 0x4c, 0x10, 0x8d, 0xef, 0x95, 0x9f, 0x78, 0xf1, 0xed, 0xb2, 0x76, 0x54, 0x25, 0x78, 0x5f, 0xcd, 0x17, 0xd5, 0x12, 0xbe, 0x31, 0xee, 0xb6, 0x6b, 0xef, 0xf1, 0xe8, 0xfc, 0x27, 0x47, 0x07, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x58, 0x20, 0xa1, 0xa8, 0x48, 0xd3, 0x47, 0x1f, 0x9d, 0x61, 0xee, 0x49, 0x01, 0x8d, 0x24, 0x4c, 0x82, 0x47, 0x72, 0xf2, 0x23, 0xad, 0x4f, 0x93, 0x52, 0x93, 0xf1, 0x78, 0x9f, 0xc3, 0xa0, 0x8d, 0x8c, 0x58 }, test103[] = { /* mac0-02 */ 0xd1, 0x84, 0x43, 0xa1, 0x01, 0x05, 0xa1, 0x07, 0x82, 0x83, 0x43, 0xa1, 0x01, 0x27, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0xb4, 0x92, 0x4b, 0x18, 0xeb, 0x4e, 0x04, 0x73, 0x13, 0xc7, 0x07, 0xb0, 0xed, 0xa4, 0xab, 0x84, 0x43, 0x45, 0xf2, 0xc4, 0x49, 0x87, 0xd6, 0xf9, 0xeb, 0xcc, 0x77, 0x7e, 0xfd, 0x40, 0x78, 0xcc, 0x0f, 0x4c, 0x10, 0x8d, 0xef, 0x95, 0x9f, 0x78, 0xf1, 0xed, 0xb2, 0x76, 0x54, 0x25, 0x78, 0x5f, 0xcd, 0x17, 0xd5, 0x12, 0xbe, 0x31, 0xee, 0xb6, 0x6b, 0xef, 0xf1, 0xe8, 0xfc, 0x27, 0x47, 0x07, 0x83, 0x43, 0xa1, 0x01, 0x26, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0x6a, 0xcd, 0x94, 0xd3, 0xcc, 0xf7, 0x1d, 0x19, 0x2e, 0x85, 0x28, 0x36, 0x0b, 0xa7, 0xe3, 0x46, 0xda, 0xc4, 0x64, 0xe9, 0xed, 0xca, 0x4c, 0xfe, 0xb6, 0xce, 0xb6, 0xbd, 0xe7, 0xba, 0xec, 0x9f, 0xf2, 0x6c, 0xa6, 0xbd, 0xf7, 0x3d, 0x0b, 0xe4, 0x1e, 0x36, 0x12, 0x9d, 0xcf, 0xf7, 0x51, 0xdd, 0x2b, 0x5a, 0xd5, 0xce, 0x11, 0x6e, 0x8a, 0x96, 0x3a, 0x27, 0x38, 0xa2, 0x99, 0x47, 0x7a, 0x68, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x58, 0x20, 0xa1, 0xa8, 0x48, 0xd3, 0x47, 0x1f, 0x9d, 0x61, 0xee, 0x49, 0x01, 0x8d, 0x24, 0x4c, 0x82, 0x47, 0x72, 0xf2, 0x23, 0xad, 0x4f, 0x93, 0x52, 0x93, 0xf1, 0x78, 0x9f, 0xc3, 0xa0, 0x8d, 0x8c, 0x58 }, test104[] = { /* signed-01 */ 0xd8, 0x62, 0x84, 0x43, 0xa1, 0x03, 0x00, 0xa0, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x81, 0x83, 0x43, 0xa1, 0x01, 0x27, 0xa2, 0x07, 0x83, 0x43, 0xa1, 0x01, 0x27, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0x8e, 0x1b, 0xe2, 0xf9, 0x45, 0x3d, 0x26, 0x48, 0x12, 0xe5, 0x90, 0x49, 0x91, 0x32, 0xbe, 0xf3, 0xfb, 0xf9, 0xee, 0x9d, 0xb2, 0x7c, 0x2c, 0x16, 0x87, 0x88, 0xe3, 0xb7, 0xeb, 0xe5, 0x06, 0xc0, 0x4f, 0xd3, 0xd1, 0x9f, 0xaa, 0x9f, 0x51, 0x23, 0x2a, 0xf5, 0xc9, 0x59, 0xe4, 0xef, 0x47, 0x92, 0x88, 0x34, 0x64, 0x7f, 0x56, 0xdf, 0xbe, 0x93, 0x91, 0x12, 0x88, 0x4d, 0x08, 0xef, 0x25, 0x05, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0x77, 0xf3, 0xea, 0xcd, 0x11, 0x85, 0x2c, 0x4b, 0xf9, 0xcb, 0x1d, 0x72, 0xfa, 0xbe, 0x6b, 0x26, 0xfb, 0xa1, 0xd7, 0x60, 0x92, 0xb2, 0xb5, 0xb7, 0xec, 0x83, 0xb8, 0x35, 0x57, 0x65, 0x22, 0x64, 0xe6, 0x96, 0x90, 0xdb, 0xc1, 0x17, 0x2d, 0xdc, 0x0b, 0xf8, 0x84, 0x11, 0xc0, 0xd2, 0x5a, 0x50, 0x7f, 0xdb, 0x24, 0x7a, 0x20, 0xc4, 0x0d, 0x5e, 0x24, 0x5f, 0xab, 0xd3, 0xfc, 0x9e, 0xc1, 0x06 }, test105[] = { /* signed-02 */ 0xd8, 0x62, 0x84, 0x43, 0xa1, 0x03, 0x00, 0xa0, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x81, 0x83, 0x43, 0xa1, 0x01, 0x27, 0xa2, 0x07, 0x82, 0x83, 0x43, 0xa1, 0x01, 0x27, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0x8e, 0x1b, 0xe2, 0xf9, 0x45, 0x3d, 0x26, 0x48, 0x12, 0xe5, 0x90, 0x49, 0x91, 0x32, 0xbe, 0xf3, 0xfb, 0xf9, 0xee, 0x9d, 0xb2, 0x7c, 0x2c, 0x16, 0x87, 0x88, 0xe3, 0xb7, 0xeb, 0xe5, 0x06, 0xc0, 0x4f, 0xd3, 0xd1, 0x9f, 0xaa, 0x9f, 0x51, 0x23, 0x2a, 0xf5, 0xc9, 0x59, 0xe4, 0xef, 0x47, 0x92, 0x88, 0x34, 0x64, 0x7f, 0x56, 0xdf, 0xbe, 0x93, 0x91, 0x12, 0x88, 0x4d, 0x08, 0xef, 0x25, 0x05, 0x83, 0x43, 0xa1, 0x01, 0x26, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0xaf, 0x04, 0x9b, 0x80, 0xd5, 0x2c, 0x36, 0x69, 0xb2, 0x99, 0x70, 0xc1, 0x33, 0x54, 0x37, 0x54, 0xf9, 0xcc, 0x60, 0x8c, 0xe4, 0x11, 0x23, 0xae, 0x1c, 0x82, 0x7e, 0x36, 0xb3, 0x8c, 0xb8, 0x25, 0x98, 0x7f, 0x01, 0xf2, 0x2b, 0xb8, 0xab, 0x13, 0xe9, 0xc6, 0x62, 0x26, 0xee, 0x23, 0x17, 0x8f, 0xfa, 0x00, 0xa4, 0xfc, 0x22, 0x05, 0x93, 0xb6, 0xe5, 0xac, 0x38, 0x96, 0x00, 0x71, 0xc9, 0xc8, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0x77, 0xf3, 0xea, 0xcd, 0x11, 0x85, 0x2c, 0x4b, 0xf9, 0xcb, 0x1d, 0x72, 0xfa, 0xbe, 0x6b, 0x26, 0xfb, 0xa1, 0xd7, 0x60, 0x92, 0xb2, 0xb5, 0xb7, 0xec, 0x83, 0xb8, 0x35, 0x57, 0x65, 0x22, 0x64, 0xe6, 0x96, 0x90, 0xdb, 0xc1, 0x17, 0x2d, 0xdc, 0x0b, 0xf8, 0x84, 0x11, 0xc0, 0xd2, 0x5a, 0x50, 0x7f, 0xdb, 0x24, 0x7a, 0x20, 0xc4, 0x0d, 0x5e, 0x24, 0x5f, 0xab, 0xd3, 0xfc, 0x9e, 0xc1, 0x06 }, test106[] = { /* signed-03 */ 0xd8, 0x62, 0x84, 0x43, 0xa1, 0x03, 0x00, 0xa1, 0x07, 0x83, 0x43, 0xa1, 0x01, 0x27, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0xb7, 0xca, 0xcb, 0xa2, 0x85, 0xc4, 0xcd, 0x3e, 0xd2, 0xf0, 0x14, 0x6f, 0x41, 0x98, 0x86, 0x14, 0x4c, 0xa6, 0x38, 0xd0, 0x87, 0xde, 0x12, 0x3d, 0x40, 0x01, 0x67, 0x30, 0x8a, 0xce, 0xab, 0xc4, 0xb5, 0xe5, 0xc6, 0xa4, 0x0c, 0x0d, 0xe0, 0xb7, 0x11, 0x67, 0xa3, 0x91, 0x75, 0xea, 0x56, 0xc1, 0xfe, 0x96, 0xc8, 0x9e, 0x5e, 0x7d, 0x30, 0xda, 0xf2, 0x43, 0x8a, 0x45, 0x61, 0x59, 0xa2, 0x0a, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x81, 0x83, 0x43, 0xa1, 0x01, 0x27, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0x77, 0xf3, 0xea, 0xcd, 0x11, 0x85, 0x2c, 0x4b, 0xf9, 0xcb, 0x1d, 0x72, 0xfa, 0xbe, 0x6b, 0x26, 0xfb, 0xa1, 0xd7, 0x60, 0x92, 0xb2, 0xb5, 0xb7, 0xec, 0x83, 0xb8, 0x35, 0x57, 0x65, 0x22, 0x64, 0xe6, 0x96, 0x90, 0xdb, 0xc1, 0x17, 0x2d, 0xdc, 0x0b, 0xf8, 0x84, 0x11, 0xc0, 0xd2, 0x5a, 0x50, 0x7f, 0xdb, 0x24, 0x7a, 0x20, 0xc4, 0x0d, 0x5e, 0x24, 0x5f, 0xab, 0xd3, 0xfc, 0x9e, 0xc1, 0x06 }, test107[] = { /* signed1-01 */ 0xd2, 0x84, 0x45, 0xa2, 0x01, 0x27, 0x03, 0x00, 0xa2, 0x07, 0x83, 0x43, 0xa1, 0x01, 0x27, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0x6d, 0xae, 0xd1, 0x58, 0xaf, 0xe4, 0x03, 0x2e, 0x8d, 0xd4, 0x77, 0xd3, 0xd2, 0xb7, 0xf6, 0x67, 0xe7, 0x95, 0x7a, 0xa8, 0x30, 0x2b, 0xb5, 0xe5, 0x68, 0xb4, 0xdc, 0xbc, 0xce, 0x3c, 0xf0, 0xed, 0x5a, 0x90, 0xf8, 0x31, 0x35, 0x1c, 0x85, 0xd6, 0x15, 0x5a, 0x42, 0xa1, 0x7c, 0xa1, 0xf2, 0x5f, 0x50, 0x1c, 0xc1, 0x3f, 0x67, 0x10, 0x8a, 0xe5, 0x3b, 0xda, 0x92, 0xdb, 0x88, 0x27, 0x2e, 0x00, 0x04, 0x42, 0x31, 0x31, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x58, 0x40, 0x71, 0x42, 0xfd, 0x2f, 0xf9, 0x6d, 0x56, 0xdb, 0x85, 0xbe, 0xe9, 0x05, 0xa7, 0x6b, 0xa1, 0xd0, 0xb7, 0x32, 0x1a, 0x95, 0xc8, 0xc4, 0xd3, 0x60, 0x7c, 0x57, 0x81, 0x93, 0x2b, 0x7a, 0xfb, 0x87, 0x11, 0x49, 0x7d, 0xfa, 0x75, 0x1b, 0xf4, 0x0b, 0x58, 0xb3, 0xbc, 0xc3, 0x23, 0x00, 0xb1, 0x48, 0x7f, 0x3d, 0xb3, 0x40, 0x85, 0xee, 0xf0, 0x13, 0xbf, 0x08, 0xf4, 0xa4, 0x4d, 0x6f, 0xef, 0x0d }, test108[] = { /* signed1-02 */ 0xd2, 0x84, 0x45, 0xa2, 0x01, 0x27, 0x03, 0x00, 0xa2, 0x07, 0x82, 0x83, 0x43, 0xa1, 0x01, 0x27, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0x6d, 0xae, 0xd1, 0x58, 0xaf, 0xe4, 0x03, 0x2e, 0x8d, 0xd4, 0x77, 0xd3, 0xd2, 0xb7, 0xf6, 0x67, 0xe7, 0x95, 0x7a, 0xa8, 0x30, 0x2b, 0xb5, 0xe5, 0x68, 0xb4, 0xdc, 0xbc, 0xce, 0x3c, 0xf0, 0xed, 0x5a, 0x90, 0xf8, 0x31, 0x35, 0x1c, 0x85, 0xd6, 0x15, 0x5a, 0x42, 0xa1, 0x7c, 0xa1, 0xf2, 0x5f, 0x50, 0x1c, 0xc1, 0x3f, 0x67, 0x10, 0x8a, 0xe5, 0x3b, 0xda, 0x92, 0xdb, 0x88, 0x27, 0x2e, 0x00, 0x83, 0x43, 0xa1, 0x01, 0x26, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0x93, 0x48, 0x7d, 0x09, 0x25, 0x6a, 0x3e, 0xf4, 0x96, 0x37, 0x19, 0xba, 0x5c, 0xf1, 0x01, 0xac, 0xe2, 0xfc, 0x13, 0xd6, 0x31, 0x4b, 0x49, 0x58, 0x21, 0x71, 0xff, 0xa4, 0xa1, 0x31, 0x4d, 0xc9, 0x3e, 0x4a, 0x4a, 0xdf, 0xa4, 0x2a, 0x79, 0xe3, 0x1b, 0x35, 0xd7, 0x30, 0x43, 0x58, 0x58, 0x5b, 0x41, 0x79, 0x96, 0x78, 0xce, 0x00, 0xca, 0x47, 0xc3, 0xe0, 0x23, 0x86, 0x39, 0x23, 0xf8, 0xc8, 0x04, 0x42, 0x31, 0x31, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x58, 0x40, 0x71, 0x42, 0xfd, 0x2f, 0xf9, 0x6d, 0x56, 0xdb, 0x85, 0xbe, 0xe9, 0x05, 0xa7, 0x6b, 0xa1, 0xd0, 0xb7, 0x32, 0x1a, 0x95, 0xc8, 0xc4, 0xd3, 0x60, 0x7c, 0x57, 0x81, 0x93, 0x2b, 0x7a, 0xfb, 0x87, 0x11, 0x49, 0x7d, 0xfa, 0x75, 0x1b, 0xf4, 0x0b, 0x58, 0xb3, 0xbc, 0xc3, 0x23, 0x00, 0xb1, 0x48, 0x7f, 0x3d, 0xb3, 0x40, 0x85, 0xee, 0xf0, 0x13, 0xbf, 0x08, 0xf4, 0xa4, 0x4d, 0x6f, 0xef, 0x0d }; ; struct seq { char reason; struct lecp_item item; const uint8_t *buf; size_t buf_len; }; static const uint8_t bm12[] = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, bm48[] = { 0x32, 0x30, 0x31, 0x33, 0x2D, 0x30, 0x33, 0x2D, 0x32, 0x31, 0x54, 0x32, 0x30, 0x3A, 0x30, 0x34, 0x3A, 0x30, 0x30, 0x5A }, bm51[] = { 0x01, 0x02, 0x03, 0x04 }, bm52[] = { 0x64, 0x49, 0x45, 0x54, 0x46 }, bm53[] = { 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x65, 0x78, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x2E, 0x63, 0x6F, 0x6D }, bm57[] = { 0x61 }, bm58[] = { 0x49, 0x45, 0x54, 0x46 }, bm59[] = { 0x22, 0x5C }, bm60[] = { 0xc3, 0xbc }, bm61[] = { 0xe6, 0xb0, 0xb4 }, bm62[] = { 0xF0, 0x90, 0x85, 0x91 }, bm72a[] = { 0x01, 0x02 }, bm72b[] = { 0x03, 0x04, 0x05 }, bm83a[] = { 0xa1, 0x01, 0x05 }, bm83b[] = { 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2E }, bm83c[] = { 0x2B, 0xDC, 0xC8, 0x9F, 0x05, 0x82, 0x16, 0xB8, 0xA2, 0x08, 0xDD, 0xC6, 0xD8, 0xB5, 0x4A, 0xA9, 0x1F, 0x48, 0xBD, 0x63, 0x48, 0x49, 0x86, 0x56, 0x51, 0x05, 0xC9, 0xAD, 0x5A, 0x66, 0x82, 0xF6 }, bm83d[] = { 0x6F, 0x75, 0x72, 0x2D, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74 }, bm84a[] = { 0xa1, 0x01, 0x06 }, bm84b[] = { 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2E }, bm84c[] = { 0xB3, 0x09, 0x7F, 0x70, 0x00, 0x9A, 0x11, 0x50, 0x74, 0x09, 0x59, 0x8A, 0x83, 0xE1, 0x5B, 0xBB, 0xBF, 0x19, 0x82, 0xDC, 0xE2, 0x8E, 0x5A, 0xB6, 0xD5, 0xA6, 0xAF, 0xF6, 0x89, 0x7B, 0xD2, 0x4B, 0xB8, 0xB7, 0x47, 0x96, 0x22, 0xC9, 0x40, 0x1B, 0x24, 0x09, 0x0D, 0x45, 0x82, 0x06, 0xD5, 0x87 }, bm84d[] = { 0x73, 0x65, 0x63, 0x2D, 0x34, 0x38 }, bm85a[] = { 0xa1, 0x01, 0x07 }, bm85b[] = { 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2E }, bm85c[] = { 0xCD, 0x28, 0xA6, 0xB3, 0xCF, 0xBB, 0xBF, 0x21, 0x48, 0x51, 0xB9, 0x06, 0xE0, 0x50, 0x05, 0x6C, 0xB4, 0x38, 0xA8, 0xB8, 0x89, 0x05, 0xB8, 0xB7, 0x46, 0x19, 0x77, 0x02, 0x27, 0x11, 0xA9, 0xD8, 0xAC, 0x5D, 0xBC, 0x54, 0xE2, 0x9A, 0x56, 0xD9, 0x26, 0x04, 0x6B, 0x40, 0xFC, 0x26, 0x07, 0xC2, 0x5B, 0x34, 0x44, 0x54, 0xAA, 0x5F, 0x68, 0xDE, 0x09, 0xA3, 0xE5, 0x25, 0xD3, 0x86, 0x5A, 0x05 }, bm85d[] = { 0x73, 0x65, 0x63, 0x2D, 0x36, 0x34 }, bm86a[] = { 0xa1, 0x01, 0x05 }, bm86b[] = { 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2E }, bm86c[] = { 0x2B, 0xDC, 0xC8, 0x9F, 0x05, 0x82, 0x16, 0xB8, 0xA2, 0x08, 0xDD, 0xC6, 0xD8, 0xB5, 0x4A, 0xA9, 0x1F, 0x48, 0xBD, 0x63, 0x48, 0x49, 0x86, 0x56, 0x51, 0x05, 0xC9, 0xAD, 0x5A, 0x66, 0x82, 0xF7 }, bm86d[] = { 0x6F, 0x75, 0x72, 0x2D, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74 }, bm87a[] = { 0xa1, 0x01, 0x04 }, bm87b[] = { 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2E }, bm87c[] = { 0x6F, 0x35, 0xCA, 0xB7, 0x79, 0xF7, 0x78, 0x33 }, bm87d[] = { 0x6F, 0x75, 0x72, 0x2D, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74 }, bm88a[] = { 0xa1, 0x01, 0x05 }, bm88b[] = { 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2E }, bm88c[] = { 0xA1, 0xA8, 0x48, 0xD3, 0x47, 0x1F, 0x9D, 0x61, 0xEE, 0x49, 0x01, 0x8D, 0x24, 0x4C, 0x82, 0x47, 0x72, 0xF2, 0x23, 0xAD, 0x4F, 0x93, 0x52, 0x93, 0xF1, 0x78, 0x9F, 0xC3, 0xA0, 0x8D, 0x8C, 0x58 }, bm89a[] = { 0xa1, 0x01, 0x06 }, bm89b[] = { 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2E }, bm89c[] = { 0x99, 0x8D, 0x26, 0xC6, 0x45, 0x9A, 0xAE, 0xEC, 0xF4, 0x4E, 0xD2, 0x0C, 0xE0, 0x0C, 0x8C, 0xCE, 0xDF, 0x0A, 0x1F, 0x3D, 0x22, 0xA9, 0x2F, 0xC0, 0x5D, 0xB0, 0x8C, 0x5A, 0xEB, 0x1C, 0xB5, 0x94, 0xCA, 0xAF, 0x5A, 0x5C, 0x5E, 0x2E, 0x9D, 0x01, 0xCC, 0xE7, 0xE7, 0x7A, 0x93, 0xAA, 0x8C, 0x62 }, bm90a[] = { 0xa1, 0x01, 0x07 }, bm90b[] = { 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2E }, bm90c[] = { 0x4A, 0x55, 0x5B, 0xF9, 0x71, 0xF7, 0xC1, 0x89, 0x1D, 0x9D, 0xDF, 0x30, 0x4A, 0x1A, 0x13, 0x2E, 0x2D, 0x6F, 0x81, 0x74, 0x49, 0x47, 0x4D, 0x81, 0x3E, 0x6D, 0x04, 0xD6, 0x59, 0x62, 0xBE, 0xD8, 0xBB, 0xA7, 0x0C, 0x17, 0xE1, 0xF5, 0x30, 0x8F, 0xA3, 0x99, 0x62, 0x95, 0x9A, 0x4B, 0x9B, 0x8D, 0x7D, 0xA8, 0xE6, 0xD8, 0x49, 0xB2, 0x09, 0xDC, 0xD3, 0xE9, 0x8C, 0xC0, 0xF1, 0x1E, 0xDD, 0xF2 }, bm91a[] = { 0xa1, 0x01, 0x05 }, bm91b[] = { 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2E }, bm91c[] = { 0xA1, 0xA8, 0x48, 0xD3, 0x47, 0x1F, 0x9D, 0x61, 0xEE, 0x49, 0x01, 0x8D, 0x24, 0x4C, 0x82, 0x47, 0x72, 0xF2, 0x23, 0xAD, 0x4F, 0x93, 0x52, 0x93, 0xF1, 0x78, 0x9F, 0xC3, 0xA0, 0x8D, 0x8C, 0x59 }, bm92a[] = { 0xa1, 0x01, 0x04 }, bm92b[] = { 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2E }, bm92c[] = { 0x11, 0xF9, 0xE3, 0x57, 0x97, 0x5F, 0xB8, 0x49 }, bm93a[] = { 0xa1, 0x01, 0x01 }, bm93b[] = { 0x02, 0xd1, 0xf7, 0xe6, 0xf2, 0x6c, 0x43, 0xd4, 0x86, 0x8d, 0x87, 0xce }, bm93c[] = { 0xa1, 0x01, 0x27 }, bm93d[] = { 0x31, 0x31 }, bm93e[] = { 0xe1, 0x04, 0x39, 0x15, 0x4c, 0xc7, 0x5c, 0x7a, 0x3a, 0x53, 0x91, 0x49, 0x1f, 0x88, 0x65, 0x1e, 0x02, 0x92, 0xfd, 0x0f, 0xe0, 0xe0, 0x2c, 0xf7, 0x40, 0x54, 0x7e, 0xaf, 0x66, 0x77, 0xb4, 0xa4, 0x04, 0x0b, 0x8e, 0xca, 0x16, 0xdb, 0x59, 0x28, 0x81, 0x26, 0x2f, 0x77, 0xb1, 0x4c, 0x1a, 0x08, 0x6c, 0x02, 0x26, 0x8b, 0x17, 0x17, 0x1c, 0xa1, 0x6b, 0xe4, 0xb8, 0x59, 0x5f, 0x8c, 0x0a, 0x08 }, bm93f[] = { 0x60, 0x97, 0x3a, 0x94, 0xbb, 0x28, 0x98, 0x00, 0x9e, 0xe5, 0x2e, 0xcf, 0xd9, 0xab, 0x1d, 0xd2, 0x58, 0x67, 0x37, 0x4b, 0x16, 0x2e, 0x2c, 0x03, 0x56, 0x8b, 0x41, 0xf5, 0x7c, 0x3c, 0xc1, 0x6f, 0x91, 0x66, 0x25, 0x0a }, bm94a[] = { 0xa1, 0x01, 0x01 }, bm94b[] = { 0x02, 0xd1, 0xf7, 0xe6, 0xf2, 0x6c, 0x43, 0xd4, 0x86, 0x8d, 0x87, 0xce }, bm94c[] = { 0xa1, 0x01, 0x27 }, bm94d[] = { 0x31, 0x31 }, bm94e[] = { 0xe1, 0x04, 0x39, 0x15, 0x4c, 0xc7, 0x5c, 0x7a, 0x3a, 0x53, 0x91, 0x49, 0x1f, 0x88, 0x65, 0x1e, 0x02, 0x92, 0xfd, 0x0f, 0xe0, 0xe0, 0x2c, 0xf7, 0x40, 0x54, 0x7e, 0xaf, 0x66, 0x77, 0xb4, 0xa4, 0x04, 0x0b, 0x8e, 0xca, 0x16, 0xdb, 0x59, 0x28, 0x81, 0x26, 0x2f, 0x77, 0xb1, 0x4c, 0x1a, 0x08, 0x6c, 0x02, 0x26, 0x8b, 0x17, 0x17, 0x1c, 0xa1, 0x6b, 0xe4, 0xb8, 0x59, 0x5f, 0x8c, 0x0a, 0x08 }, bm94f[] = { 0xa1, 0x01, 0x26 }, bm94g[] = { 0x31, 0x31 }, bm94h[] = { 0xfc, 0xa9, 0x8e, 0xca, 0xc8, 0x0b, 0x5f, 0xeb, 0x3a, 0xc7, 0xc1, 0x08, 0xb2, 0xb7, 0x91, 0x10, 0xde, 0x88, 0x86, 0x7b, 0xc0, 0x42, 0x6f, 0xc8, 0x3c, 0x53, 0xcc, 0xd6, 0x78, 0x96, 0x94, 0xed, 0xc5, 0xfe, 0xe3, 0xc4, 0x0d, 0xe8, 0xe7, 0xb4, 0x4f, 0xe8, 0xaa, 0xd3, 0x67, 0xe0, 0x95, 0xc8, 0xfc, 0x31, 0xb7, 0x9e, 0xe6, 0x66, 0xdf, 0x9c, 0xf9, 0x09, 0x06, 0xeb, 0x43, 0x75, 0x6c, 0x73 }, bm94i[] = { 0x60, 0x97, 0x3a, 0x94, 0xbb, 0x28, 0x98, 0x00, 0x9e, 0xe5, 0x2e, 0xcf, 0xd9, 0xab, 0x1d, 0xd2, 0x58, 0x67, 0x37, 0x4b, 0x16, 0x2e, 0x2c, 0x03, 0x56, 0x8b, 0x41, 0xf5, 0x7c, 0x3c, 0xc1, 0x6f, 0x91, 0x66, 0x25, 0x0a }, bm95a[] = { 0xa1, 0x01, 0x01 }, bm95b[] = { 0x02, 0xd1, 0xf7, 0xe6, 0xf2, 0x6c, 0x43, 0xd4, 0x86, 0x8d, 0x87, 0xce }, bm95c[] = { 0xa1, 0x01, 0x27 }, bm95d[] = { 0x31, 0x31 }, bm95e[] = { 0x9a, 0x8e, 0xed, 0xe3, 0xb3, 0xcb, 0x83, 0x7b, 0xa0, 0x0d, 0xf0, 0x8f, 0xa2, 0x1b, 0x12, 0x8b, 0x2d, 0x6d, 0x91, 0x62, 0xa4, 0x29, 0x0a, 0x58, 0x2d, 0x9f, 0x19, 0xbd, 0x0f, 0xb5, 0x02, 0xf0, 0xf9, 0x2b, 0x9b, 0xf4, 0x53, 0xa4, 0x05, 0x40, 0x1f, 0x8b, 0x70, 0x55, 0xef, 0x4e, 0x95, 0x8d, 0xf7, 0xf4, 0xfb, 0xd7, 0xcf, 0xb4, 0xa0, 0xc9, 0x71, 0x60, 0xf9, 0x47, 0x2b, 0x0a, 0xa1, 0x04 }, bm95f[] = { 0x60, 0x97, 0x3a, 0x94, 0xbb, 0x28, 0x98, 0x00, 0x9e, 0xe5, 0x2e, 0xcf, 0xd9, 0xab, 0x1d, 0xd2, 0x58, 0x67, 0x37, 0x4b, 0x35, 0x81, 0xf2, 0xc8, 0x00, 0x39, 0x82, 0x63, 0x50, 0xb9, 0x7a, 0xe2, 0x30, 0x0E, 0x42, 0xFC }, bm95g[] = { 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74 }, bm96a[] = { 0xa1, 0x01, 0x01 }, bm96b[] = { 0x02, 0xd1, 0xf7, 0xe6, 0xf2, 0x6c, 0x43, 0xd4, 0x86, 0x8d, 0x87, 0xce }, bm96c[] = { 0xa1, 0x01, 0x27 }, bm96d[] = { 0x31, 0x31 }, bm96e[] = { 0x9a, 0x8e, 0xed, 0xe3, 0xb3, 0xcb, 0x83, 0x7b, 0xa0, 0x0d, 0xf0, 0x8f, 0xa2, 0x1b, 0x12, 0x8b, 0x2d, 0x6d, 0x91, 0x62, 0xa4, 0x29, 0x0a, 0x58, 0x2d, 0x9f, 0x19, 0xbd, 0x0f, 0xb5, 0x02, 0xf0, 0xf9, 0x2b, 0x9b, 0xf4, 0x53, 0xa4, 0x05, 0x40, 0x1f, 0x8b, 0x70, 0x55, 0xef, 0x4e, 0x95, 0x8d, 0xf7, 0xf4, 0xfb, 0xd7, 0xcf, 0xb4, 0xa0, 0xc9, 0x71, 0x60, 0xf9, 0x47, 0x2b, 0x0a, 0xa1, 0x04 }, bm96f[] = { 0xa1, 0x01, 0x26 }, bm96g[] = { 0x31, 0x31 }, bm96h[] = { 0x24, 0x27, 0xcb, 0x37, 0x56, 0x85, 0x0f, 0xbb, 0x79, 0x05, 0x18, 0x07, 0xc8, 0xb2, 0x3d, 0x2e, 0x6d, 0x16, 0xa3, 0x22, 0x4f, 0x99, 0x01, 0xb4, 0x73, 0x99, 0xcf, 0xc7, 0xe3, 0xfa, 0xc4, 0xcc, 0x62, 0x1d, 0xbb, 0xeb, 0x02, 0x02, 0xa6, 0xd8, 0xbb, 0x25, 0x69, 0x5c, 0x9d, 0xcc, 0x9c, 0x47, 0x49, 0x20, 0xff, 0x57, 0x60, 0x6d, 0x76, 0x4d, 0xea, 0x19, 0x2f, 0xc8, 0x67, 0x41, 0x16, 0xf2 }, bm96i[] = { 0x60, 0x97, 0x3a, 0x94, 0xbb, 0x28, 0x98, 0x00, 0x9e, 0xe5, 0x2e, 0xcf, 0xd9, 0xab, 0x1d, 0xd2, 0x58, 0x67, 0x37, 0x4b, 0x35, 0x81, 0xf2, 0xc8, 0x00, 0x39, 0x82, 0x63, 0x50, 0xb9, 0x7a, 0xe2, 0x30, 0x0e, 0x42, 0xfc }, bm96j[] = { 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74 }, bm97a[] = { 0xa1, 0x01, 0x01 }, bm97b[] = { 0x02, 0xd1, 0xf7, 0xe6, 0xf2, 0x6c, 0x43, 0xd4, 0x86, 0x8d, 0x87, 0xce }, bm97c[] = { 0x60, 0x97, 0x3a, 0x94, 0xbb, 0x28, 0x98, 0x00, 0x9e, 0xe5, 0x2e, 0xcf, 0xd9, 0xab, 0x1d, 0xd2, 0x58, 0x67, 0x37, 0x4b, 0x35, 0x81, 0xf2, 0xc8, 0x00, 0x39, 0x82, 0x63, 0x50, 0xb9, 0x7a, 0xe2, 0x30, 0x0e, 0x42, 0xfc }, bm97d[] = { 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74 }, bm97e[] = { 0xa1, 0x01, 0x27 }, bm97f[] = { 0x31, 0x31 }, bm97g[] = { 0xcc, 0xb1, 0xf3, 0xfe, 0xdf, 0xce, 0xa7, 0x2b, 0x9c, 0x86, 0x79, 0x63, 0xe2, 0x52, 0xb6, 0x65, 0x8a, 0xd0, 0x7f, 0x3f, 0x5f, 0x15, 0xa3, 0x26, 0xa3, 0xf5, 0x72, 0x54, 0xcc, 0xb8, 0xd4, 0x8d, 0x60, 0x02, 0x1d, 0x2f, 0x1f, 0x8a, 0x80, 0x3b, 0x84, 0x4b, 0x78, 0x72, 0x16, 0x6c, 0x6d, 0x45, 0x90, 0x25, 0xd2, 0x1c, 0x8c, 0x84, 0x62, 0xa2, 0x44, 0xba, 0x19, 0x60, 0x4e, 0xc4, 0xd5, 0x0b }, bm98a[] = { 0xa1, 0x01, 0x05 }, bm98b[] = { 0xa1, 0x01, 0x27 }, bm98c[] = { 0x31, 0x31 }, bm98d[] = { 0xb4, 0x92, 0x4b, 0x18, 0xeb, 0x4e, 0x04, 0x73, 0x13, 0xc7, 0x07, 0xb0, 0xed, 0xa4, 0xab, 0x84, 0x43, 0x45, 0xf2, 0xc4, 0x49, 0x87, 0xd6, 0xf9, 0xeb, 0xcc, 0x77, 0x7e, 0xfd, 0x40, 0x78, 0xcc, 0x0f, 0x4c, 0x10, 0x8d, 0xef, 0x95, 0x9f, 0x78, 0xf1, 0xed, 0xb2, 0x76, 0x54, 0x25, 0x78, 0x5f, 0xcd, 0x17, 0xd5, 0x12, 0xbe, 0x31, 0xee, 0xb6, 0x6b, 0xef, 0xf1, 0xe8, 0xfc, 0x27, 0x47, 0x07 }, bm98e[] = { 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e }, bm98f[] = { 0x2b, 0xdc, 0xc8, 0x9f, 0x05, 0x82, 0x16, 0xb8, 0xa2, 0x08, 0xdd, 0xc6, 0xd8, 0xb5, 0x4a, 0xa9, 0x1f, 0x48, 0xbd, 0x63, 0x48, 0x49, 0x86, 0x56, 0x51, 0x05, 0xc9, 0xad, 0x5a, 0x66, 0x82, 0xf6 }, bm98g[] = { 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74 }, bm99a[] = { 0xa1, 0x01, 0x05 }, bm99b[] = { 0xa1, 0x01, 0x27 }, bm99c[] = { 0x31, 0x31 }, bm99d[] = { 0xb4, 0x92, 0x4b, 0x18, 0xeb, 0x4e, 0x04, 0x73, 0x13, 0xc7, 0x07, 0xb0, 0xed, 0xa4, 0xab, 0x84, 0x43, 0x45, 0xf2, 0xc4, 0x49, 0x87, 0xd6, 0xf9, 0xeb, 0xcc, 0x77, 0x7e, 0xfd, 0x40, 0x78, 0xcc, 0x0f, 0x4c, 0x10, 0x8d, 0xef, 0x95, 0x9f, 0x78, 0xf1, 0xed, 0xb2, 0x76, 0x54, 0x25, 0x78, 0x5f, 0xcd, 0x17, 0xd5, 0x12, 0xbe, 0x31, 0xee, 0xb6, 0x6b, 0xef, 0xf1, 0xe8, 0xfc, 0x27, 0x47, 0x07 }, bm99e[] = { 0xa1, 0x01, 0x26 }, bm99f[] = { 0x31, 0x31 }, bm99g[] = { 0x6a, 0xcd, 0x94, 0xd3, 0xcc, 0xf7, 0x1d, 0x19, 0x2e, 0x85, 0x28, 0x36, 0x0b, 0xa7, 0xe3, 0x46, 0xda, 0xc4, 0x64, 0xe9, 0xed, 0xca, 0x4c, 0xfe, 0xb6, 0xce, 0xb6, 0xbd, 0xe7, 0xba, 0xec, 0x9f, 0xf2, 0x6c, 0xa6, 0xbd, 0xf7, 0x3d, 0x0b, 0xe4, 0x1e, 0x36, 0x12, 0x9d, 0xcf, 0xf7, 0x51, 0xdd, 0x2b, 0x5a, 0xd5, 0xce, 0x11, 0x6e, 0x8a, 0x96, 0x3a, 0x27, 0x38, 0xa2, 0x99, 0x47, 0x7a, 0x68 }, bm99h[] = { 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e }, bm99i[] = { 0x2b, 0xdc, 0xc8, 0x9f, 0x05, 0x82, 0x16, 0xb8, 0xa2, 0x08, 0xdd, 0xc6, 0xd8, 0xb5, 0x4a, 0xa9, 0x1f, 0x48, 0xbd, 0x63, 0x48, 0x49, 0x86, 0x56, 0x51, 0x05, 0xc9, 0xad, 0x5a, 0x66, 0x82, 0xf6 }, bm99j[] = { 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74 }, bm100a[] = { 0xa1, 0x01, 0x05 }, bm100b[] = { 0xa1, 0x01, 0x27 }, bm100c[] = { 0x31, 0x31 }, bm100d[] = { 0xb4, 0x92, 0x4b, 0x18, 0xeb, 0x4e, 0x04, 0x73, 0x13, 0xc7, 0x07, 0xb0, 0xed, 0xa4, 0xab, 0x84, 0x43, 0x45, 0xf2, 0xc4, 0x49, 0x87, 0xd6, 0xf9, 0xeb, 0xcc, 0x77, 0x7e, 0xfd, 0x40, 0x78, 0xcc, 0x0f, 0x4c, 0x10, 0x8d, 0xef, 0x95, 0x9f, 0x78, 0xf1, 0xed, 0xb2, 0x76, 0x54, 0x25, 0x78, 0x5f, 0xcd, 0x17, 0xd5, 0x12, 0xbe, 0x31, 0xee, 0xb6, 0x6b, 0xef, 0xf1, 0xe8, 0xfc, 0x27, 0x47, 0x07 }, bm100e[] = { 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e }, bm100f[] = { 0xa1, 0xa8, 0x48, 0xd3, 0x47, 0x1f, 0x9d, 0x61, 0xee, 0x49, 0x01, 0x8d, 0x24, 0x4c, 0x82, 0x47, 0x72, 0xf2, 0x23, 0xad, 0x4f, 0x93, 0x52, 0x93, 0xf1, 0x78, 0x9f, 0xc3, 0xa0, 0x8d, 0x8c, 0x58 }, bm101a[] = { 0xa1, 0x01, 0x05 }, bm101b[] = { 0xa1, 0x01, 0x27 }, bm101c[] = { 0x31, 0x31 }, bm101d[] = { 0xb4, 0x92, 0x4b, 0x18, 0xeb, 0x4e, 0x04, 0x73, 0x13, 0xc7, 0x07, 0xb0, 0xed, 0xa4, 0xab, 0x84, 0x43, 0x45, 0xf2, 0xc4, 0x49, 0x87, 0xd6, 0xf9, 0xeb, 0xcc, 0x77, 0x7e, 0xfd, 0x40, 0x78, 0xcc, 0x0f, 0x4c, 0x10, 0x8d, 0xef, 0x95, 0x9f, 0x78, 0xf1, 0xed, 0xb2, 0x76, 0x54, 0x25, 0x78, 0x5f, 0xcd, 0x17, 0xd5, 0x12, 0xbe, 0x31, 0xee, 0xb6, 0x6b, 0xef, 0xf1, 0xe8, 0xfc, 0x27, 0x47, 0x07 }, bm101e[] = { 0xa1, 0x01, 0x26 }, bm101f[] = { 0x31, 0x31 }, bm101g[] = { 0x6a, 0xcd, 0x94, 0xd3, 0xcc, 0xf7, 0x1d, 0x19, 0x2e, 0x85, 0x28, 0x36, 0x0b, 0xa7, 0xe3, 0x46, 0xda, 0xc4, 0x64, 0xe9, 0xed, 0xca, 0x4c, 0xfe, 0xb6, 0xce, 0xb6, 0xbd, 0xe7, 0xba, 0xec, 0x9f, 0xf2, 0x6c, 0xa6, 0xbd, 0xf7, 0x3d, 0x0b, 0xe4, 0x1e, 0x36, 0x12, 0x9d, 0xcf, 0xf7, 0x51, 0xdd, 0x2b, 0x5a, 0xd5, 0xce, 0x11, 0x6e, 0x8a, 0x96, 0x3a, 0x27, 0x38, 0xa2, 0x99, 0x47, 0x7a, 0x68 }, bm101h[] = { 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e }, bm101i[] = { 0x2b, 0xdc, 0xc8, 0x9f, 0x05, 0x82, 0x16, 0xb8, 0xa2, 0x08, 0xdd, 0xc6, 0xd8, 0xb5, 0x4a, 0xa9, 0x1f, 0x48, 0xbd, 0x63, 0x48, 0x49, 0x86, 0x56, 0x51, 0x05, 0xc9, 0xad, 0x5a, 0x66, 0x82, 0xf6 }, bm101j[] = { 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74 }, bm102a[] = { /* mac0-01 */ 0xa1, 0x01, 0x05 }, bm102b[] = { 0xa1, 0x01, 0x27 }, bm102c[] = { 0x31, 0x31 }, bm102d[] = { 0xb4, 0x92, 0x4b, 0x18, 0xeb, 0x4e, 0x04, 0x73, 0x13, 0xc7, 0x07, 0xb0, 0xed, 0xa4, 0xab, 0x84, 0x43, 0x45, 0xf2, 0xc4, 0x49, 0x87, 0xd6, 0xf9, 0xeb, 0xcc, 0x77, 0x7e, 0xfd, 0x40, 0x78, 0xcc, 0x0f, 0x4c, 0x10, 0x8d, 0xef, 0x95, 0x9f, 0x78, 0xf1, 0xed, 0xb2, 0x76, 0x54, 0x25, 0x78, 0x5f, 0xcd, 0x17, 0xd5, 0x12, 0xbe, 0x31, 0xee, 0xb6, 0x6b, 0xef, 0xf1, 0xe8, 0xfc, 0x27, 0x47, 0x07 }, bm102e[] = { 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e }, bm102f[] = { 0xa1, 0xa8, 0x48, 0xd3, 0x47, 0x1f, 0x9d, 0x61, 0xee, 0x49, 0x01, 0x8d, 0x24, 0x4c, 0x82, 0x47, 0x72, 0xf2, 0x23, 0xad, 0x4f, 0x93, 0x52, 0x93, 0xf1, 0x78, 0x9f, 0xc3, 0xa0, 0x8d, 0x8c, 0x58 }, bm103a[] = { 0xa1, 0x01, 0x05 }, bm103b[] = { 0xa1, 0x01, 0x27 }, bm103c[] = { 0x31, 0x31 }, bm103d[] = { 0xb4, 0x92, 0x4b, 0x18, 0xeb, 0x4e, 0x04, 0x73, 0x13, 0xc7, 0x07, 0xb0, 0xed, 0xa4, 0xab, 0x84, 0x43, 0x45, 0xf2, 0xc4, 0x49, 0x87, 0xd6, 0xf9, 0xeb, 0xcc, 0x77, 0x7e, 0xfd, 0x40, 0x78, 0xcc, 0x0f, 0x4c, 0x10, 0x8d, 0xef, 0x95, 0x9f, 0x78, 0xf1, 0xed, 0xb2, 0x76, 0x54, 0x25, 0x78, 0x5f, 0xcd, 0x17, 0xd5, 0x12, 0xbe, 0x31, 0xee, 0xb6, 0x6b, 0xef, 0xf1, 0xe8, 0xfc, 0x27, 0x47, 0x07 }, bm103e[] = { 0xa1, 0x01, 0x26 }, bm103f[] = { 0x31, 0x31 }, bm103g[] = { 0x6a, 0xcd, 0x94, 0xd3, 0xcc, 0xf7, 0x1d, 0x19, 0x2e, 0x85, 0x28, 0x36, 0x0b, 0xa7, 0xe3, 0x46, 0xda, 0xc4, 0x64, 0xe9, 0xed, 0xca, 0x4c, 0xfe, 0xb6, 0xce, 0xb6, 0xbd, 0xe7, 0xba, 0xec, 0x9f, 0xf2, 0x6c, 0xa6, 0xbd, 0xf7, 0x3d, 0x0b, 0xe4, 0x1e, 0x36, 0x12, 0x9d, 0xcf, 0xf7, 0x51, 0xdd, 0x2b, 0x5a, 0xd5, 0xce, 0x11, 0x6e, 0x8a, 0x96, 0x3a, 0x27, 0x38, 0xa2, 0x99, 0x47, 0x7a, 0x68 }, bm103h[] = { 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e }, bm103i[] = { 0xa1, 0xa8, 0x48, 0xd3, 0x47, 0x1f, 0x9d, 0x61, 0xee, 0x49, 0x01, 0x8d, 0x24, 0x4c, 0x82, 0x47, 0x72, 0xf2, 0x23, 0xad, 0x4f, 0x93, 0x52, 0x93, 0xf1, 0x78, 0x9f, 0xc3, 0xa0, 0x8d, 0x8c, 0x58 }, bm104a[] = { 0xa1, 0x03, 0x00 }, bm104b[] = { 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e }, bm104c[] = { 0xa1, 0x01, 0x27 }, bm104d[] = { 0xa1, 0x01, 0x27 }, bm104e[] = { 0x31, 0x31 }, bm104f[] = { 0x8e, 0x1b, 0xe2, 0xf9, 0x45, 0x3d, 0x26, 0x48, 0x12, 0xe5, 0x90, 0x49, 0x91, 0x32, 0xbe, 0xf3, 0xfb, 0xf9, 0xee, 0x9d, 0xb2, 0x7c, 0x2c, 0x16, 0x87, 0x88, 0xe3, 0xb7, 0xeb, 0xe5, 0x06, 0xc0, 0x4f, 0xd3, 0xd1, 0x9f, 0xaa, 0x9f, 0x51, 0x23, 0x2a, 0xf5, 0xc9, 0x59, 0xe4, 0xef, 0x47, 0x92, 0x88, 0x34, 0x64, 0x7f, 0x56, 0xdf, 0xbe, 0x93, 0x91, 0x12, 0x88, 0x4d, 0x08, 0xef, 0x25, 0x05 }, bm104g[] = { 0x31, 0x31 }, bm104h[] = { 0x77, 0xf3, 0xea, 0xcd, 0x11, 0x85, 0x2c, 0x4b, 0xf9, 0xcb, 0x1d, 0x72, 0xfa, 0xbe, 0x6b, 0x26, 0xfb, 0xa1, 0xd7, 0x60, 0x92, 0xb2, 0xb5, 0xb7, 0xec, 0x83, 0xb8, 0x35, 0x57, 0x65, 0x22, 0x64, 0xe6, 0x96, 0x90, 0xdb, 0xc1, 0x17, 0x2d, 0xdc, 0x0b, 0xf8, 0x84, 0x11, 0xc0, 0xd2, 0x5a, 0x50, 0x7f, 0xdb, 0x24, 0x7a, 0x20, 0xc4, 0x0d, 0x5e, 0x24, 0x5f, 0xab, 0xd3, 0xfc, 0x9e, 0xc1, 0x06 }, bm105a[] = { 0xa1, 0x03, 0x00 }, bm105b[] = { 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e }, bm105c[] = { 0xa1, 0x01, 0x27 }, bm105d[] = { 0xa1, 0x01, 0x27 }, bm105e[] = { 0x31, 0x31 }, bm105f[] = { 0x8e, 0x1b, 0xe2, 0xf9, 0x45, 0x3d, 0x26, 0x48, 0x12, 0xe5, 0x90, 0x49, 0x91, 0x32, 0xbe, 0xf3, 0xfb, 0xf9, 0xee, 0x9d, 0xb2, 0x7c, 0x2c, 0x16, 0x87, 0x88, 0xe3, 0xb7, 0xeb, 0xe5, 0x06, 0xc0, 0x4f, 0xd3, 0xd1, 0x9f, 0xaa, 0x9f, 0x51, 0x23, 0x2a, 0xf5, 0xc9, 0x59, 0xe4, 0xef, 0x47, 0x92, 0x88, 0x34, 0x64, 0x7f, 0x56, 0xdf, 0xbe, 0x93, 0x91, 0x12, 0x88, 0x4d, 0x08, 0xef, 0x25, 0x05 }, bm105g[] = { 0xa1, 0x01, 0x26 }, bm105h[] = { 0x31, 0x31 }, bm105i[] = { 0xaf, 0x04, 0x9b, 0x80, 0xd5, 0x2c, 0x36, 0x69, 0xb2, 0x99, 0x70, 0xc1, 0x33, 0x54, 0x37, 0x54, 0xf9, 0xcc, 0x60, 0x8c, 0xe4, 0x11, 0x23, 0xae, 0x1c, 0x82, 0x7e, 0x36, 0xb3, 0x8c, 0xb8, 0x25, 0x98, 0x7f, 0x01, 0xf2, 0x2b, 0xb8, 0xab, 0x13, 0xe9, 0xc6, 0x62, 0x26, 0xee, 0x23, 0x17, 0x8f, 0xfa, 0x00, 0xa4, 0xfc, 0x22, 0x05, 0x93, 0xb6, 0xe5, 0xac, 0x38, 0x96, 0x00, 0x71, 0xc9, 0xc8 }, bm105j[] = { 0x31, 0x31 }, bm105k[] = { 0x77, 0xf3, 0xea, 0xcd, 0x11, 0x85, 0x2c, 0x4b, 0xf9, 0xcb, 0x1d, 0x72, 0xfa, 0xbe, 0x6b, 0x26, 0xfb, 0xa1, 0xd7, 0x60, 0x92, 0xb2, 0xb5, 0xb7, 0xec, 0x83, 0xb8, 0x35, 0x57, 0x65, 0x22, 0x64, 0xe6, 0x96, 0x90, 0xdb, 0xc1, 0x17, 0x2d, 0xdc, 0x0b, 0xf8, 0x84, 0x11, 0xc0, 0xd2, 0x5a, 0x50, 0x7f, 0xdb, 0x24, 0x7a, 0x20, 0xc4, 0x0d, 0x5e, 0x24, 0x5f, 0xab, 0xd3, 0xfc, 0x9e, 0xc1, 0x06 }, bm106a[] = { 0xa1, 0x03, 0x00 }, bm106b[] = { 0xa1, 0x01, 0x27 }, bm106c[] = { 0x31, 0x31 }, bm106d[] = { 0xb7, 0xca, 0xcb, 0xa2, 0x85, 0xc4, 0xcd, 0x3e, 0xd2, 0xf0, 0x14, 0x6f, 0x41, 0x98, 0x86, 0x14, 0x4c, 0xa6, 0x38, 0xd0, 0x87, 0xde, 0x12, 0x3d, 0x40, 0x01, 0x67, 0x30, 0x8a, 0xce, 0xab, 0xc4, 0xb5, 0xe5, 0xc6, 0xa4, 0x0c, 0x0d, 0xe0, 0xb7, 0x11, 0x67, 0xa3, 0x91, 0x75, 0xea, 0x56, 0xc1, 0xfe, 0x96, 0xc8, 0x9e, 0x5e, 0x7d, 0x30, 0xda, 0xf2, 0x43, 0x8a, 0x45, 0x61, 0x59, 0xa2, 0x0a }, bm106e[] = { 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e }, bm106f[] = { 0xa1, 0x01, 0x27 }, bm106g[] = { 0x31, 0x31 }, bm106h[] = { 0x77, 0xf3, 0xea, 0xcd, 0x11, 0x85, 0x2c, 0x4b, 0xf9, 0xcb, 0x1d, 0x72, 0xfa, 0xbe, 0x6b, 0x26, 0xfb, 0xa1, 0xd7, 0x60, 0x92, 0xb2, 0xb5, 0xb7, 0xec, 0x83, 0xb8, 0x35, 0x57, 0x65, 0x22, 0x64, 0xe6, 0x96, 0x90, 0xdb, 0xc1, 0x17, 0x2d, 0xdc, 0x0b, 0xf8, 0x84, 0x11, 0xc0, 0xd2, 0x5a, 0x50, 0x7f, 0xdb, 0x24, 0x7a, 0x20, 0xc4, 0x0d, 0x5e, 0x24, 0x5f, 0xab, 0xd3, 0xfc, 0x9e, 0xc1, 0x06 }, bm107a[] = { 0xa2, 0x01, 0x27, 0x03, 0x00 }, bm107b[] = { 0xa1, 0x01, 0x27, }, bm107c[] = { 0x31, 0x31 }, bm107d[] = { 0x6d, 0xae, 0xd1, 0x58, 0xaf, 0xe4, 0x03, 0x2e, 0x8d, 0xd4, 0x77, 0xd3, 0xd2, 0xb7, 0xf6, 0x67, 0xe7, 0x95, 0x7a, 0xa8, 0x30, 0x2b, 0xb5, 0xe5, 0x68, 0xb4, 0xdc, 0xbc, 0xce, 0x3c, 0xf0, 0xed, 0x5a, 0x90, 0xf8, 0x31, 0x35, 0x1c, 0x85, 0xd6, 0x15, 0x5a, 0x42, 0xa1, 0x7c, 0xa1, 0xf2, 0x5f, 0x50, 0x1c, 0xc1, 0x3f, 0x67, 0x10, 0x8a, 0xe5, 0x3b, 0xda, 0x92, 0xdb, 0x88, 0x27, 0x2e, 0x00 }, bm107e[] = { 0x31, 0x31 }, bm107f[] = { 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e }, bm107g[] = { 0x71, 0x42, 0xfd, 0x2f, 0xf9, 0x6d, 0x56, 0xdb, 0x85, 0xbe, 0xe9, 0x05, 0xa7, 0x6b, 0xa1, 0xd0, 0xb7, 0x32, 0x1a, 0x95, 0xc8, 0xc4, 0xd3, 0x60, 0x7c, 0x57, 0x81, 0x93, 0x2b, 0x7a, 0xfb, 0x87, 0x11, 0x49, 0x7d, 0xfa, 0x75, 0x1b, 0xf4, 0x0b, 0x58, 0xb3, 0xbc, 0xc3, 0x23, 0x00, 0xb1, 0x48, 0x7f, 0x3d, 0xb3, 0x40, 0x85, 0xee, 0xf0, 0x13, 0xbf, 0x08, 0xf4, 0xa4, 0x4d, 0x6f, 0xef, 0x0d }, bm108a[] = { 0xa2, 0x01, 0x27, 0x03, 0x00 }, bm108b[] = { 0xa1, 0x01, 0x27 }, bm108c[] = { 0x31, 0x31 }, bm108d[] = { 0x6d, 0xae, 0xd1, 0x58, 0xaf, 0xe4, 0x03, 0x2e, 0x8d, 0xd4, 0x77, 0xd3, 0xd2, 0xb7, 0xf6, 0x67, 0xe7, 0x95, 0x7a, 0xa8, 0x30, 0x2b, 0xb5, 0xe5, 0x68, 0xb4, 0xdc, 0xbc, 0xce, 0x3c, 0xf0, 0xed, 0x5a, 0x90, 0xf8, 0x31, 0x35, 0x1c, 0x85, 0xd6, 0x15, 0x5a, 0x42, 0xa1, 0x7c, 0xa1, 0xf2, 0x5f, 0x50, 0x1c, 0xc1, 0x3f, 0x67, 0x10, 0x8a, 0xe5, 0x3b, 0xda, 0x92, 0xdb, 0x88, 0x27, 0x2e, 0x00 }, bm108e[] = { 0xa1, 0x01, 0x26 }, bm108f[] = { 0x31, 0x31 }, bm108g[] = { 0x93, 0x48, 0x7d, 0x09, 0x25, 0x6a, 0x3e, 0xf4, 0x96, 0x37, 0x19, 0xba, 0x5c, 0xf1, 0x01, 0xac, 0xe2, 0xfc, 0x13, 0xd6, 0x31, 0x4b, 0x49, 0x58, 0x21, 0x71, 0xff, 0xa4, 0xa1, 0x31, 0x4d, 0xc9, 0x3e, 0x4a, 0x4a, 0xdf, 0xa4, 0x2a, 0x79, 0xe3, 0x1b, 0x35, 0xd7, 0x30, 0x43, 0x58, 0x58, 0x5b, 0x41, 0x79, 0x96, 0x78, 0xce, 0x00, 0xca, 0x47, 0xc3, 0xe0, 0x23, 0x86, 0x39, 0x23, 0xf8, 0xc8 }, bm108h[] = { 0x31, 0x31 }, bm108i[] = { 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e }, bm108j[] = { 0x71, 0x42, 0xfd, 0x2f, 0xf9, 0x6d, 0x56, 0xdb, 0x85, 0xbe, 0xe9, 0x05, 0xa7, 0x6b, 0xa1, 0xd0, 0xb7, 0x32, 0x1a, 0x95, 0xc8, 0xc4, 0xd3, 0x60, 0x7c, 0x57, 0x81, 0x93, 0x2b, 0x7a, 0xfb, 0x87, 0x11, 0x49, 0x7d, 0xfa, 0x75, 0x1b, 0xf4, 0x0b, 0x58, 0xb3, 0xbc, 0xc3, 0x23, 0x00, 0xb1, 0x48, 0x7f, 0x3d, 0xb3, 0x40, 0x85, 0xee, 0xf0, 0x13, 0xbf, 0x08, 0xf4, 0xa4, 0x4d, 0x6f, 0xef, 0x0d }; static const struct seq seq1[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 0 } }, { .reason = LECPCB_DESTRUCTED }, }, seq2[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 1 } }, { .reason = LECPCB_DESTRUCTED }, }, seq3[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 10 } }, { .reason = LECPCB_DESTRUCTED }, }, seq4[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 23 } }, { .reason = LECPCB_DESTRUCTED }, }, seq5[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 24 } }, { .reason = LECPCB_DESTRUCTED }, }, seq6[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 25 } }, { .reason = LECPCB_DESTRUCTED }, }, seq7[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 100 } }, { .reason = LECPCB_DESTRUCTED }, }, seq8[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 1000 } }, { .reason = LECPCB_DESTRUCTED }, }, seq9[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 1000000 } }, { .reason = LECPCB_DESTRUCTED }, }, seq10[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 1000000000000 } }, { .reason = LECPCB_DESTRUCTED }, }, seq11[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 18446744073709551615ull } }, { .reason = LECPCB_DESTRUCTED }, }, seq12[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 0 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm12, .buf_len = sizeof(bm12)}, { .reason = LECPCB_TAG_END }, { .reason = LECPCB_DESTRUCTED }, }, seq13[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_NUM_INT, .item = { .u.i64 = 0ull } }, { .reason = LECPCB_DESTRUCTED }, }, seq14[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 3 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm12, .buf_len = sizeof(bm12)}, { .reason = LECPCB_TAG_END }, { .reason = LECPCB_DESTRUCTED }, }, seq15[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_NUM_INT, .item = { .u.i64 = -1ll } }, { .reason = LECPCB_DESTRUCTED }, }, seq16[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_NUM_INT, .item = { .u.i64 = -10ll } }, { .reason = LECPCB_DESTRUCTED }, }, seq17[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_NUM_INT, .item = { .u.i64 = -100ll } }, { .reason = LECPCB_DESTRUCTED }, }, seq18[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_NUM_INT, .item = { .u.i64 = -1000ll } }, { .reason = LECPCB_DESTRUCTED }, }, seq19[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_FLOAT16, .item = { .u.hf = 0 } }, { .reason = LECPCB_DESTRUCTED }, }, seq20[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_FLOAT16, .item = { .u.hf = 0x8000 } }, { .reason = LECPCB_DESTRUCTED }, }, seq21[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_FLOAT16, .item = { .u.hf = 0x3c00 } }, { .reason = LECPCB_DESTRUCTED }, }, seq22[] = { { .reason = LECPCB_CONSTRUCTED }, #if defined(LWS_WITH_CBOR_FLOAT) { .reason = LECPCB_VAL_FLOAT64, .item = { .u.d = 1.1 } }, #else { .reason = LECPCB_VAL_FLOAT64, .item = { .u.u64 = 0x3ff199999999999aull } }, #endif { .reason = LECPCB_DESTRUCTED }, }, seq23[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_FLOAT16, .item = { .u.hf = 0x3e00 } }, { .reason = LECPCB_DESTRUCTED }, }, seq24[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_FLOAT16, .item = { .u.hf = 0x7bff } }, { .reason = LECPCB_DESTRUCTED }, }, seq25[] = { { .reason = LECPCB_CONSTRUCTED }, #if defined(LWS_WITH_CBOR_FLOAT) { .reason = LECPCB_VAL_FLOAT32, .item = { .u.f = 100000.0 } }, #else { .reason = LECPCB_VAL_FLOAT32, .item = { .u.f = 0x47c35000 } }, #endif { .reason = LECPCB_DESTRUCTED }, }, seq26[] = { { .reason = LECPCB_CONSTRUCTED }, #if defined(LWS_WITH_CBOR_FLOAT) { .reason = LECPCB_VAL_FLOAT32, .item = { .u.f = 3.4028234663852886e+38 } }, #else { .reason = LECPCB_VAL_FLOAT32, .item = { .u.f = 0x7f7fffff } }, #endif { .reason = LECPCB_DESTRUCTED }, }, seq27[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_FLOAT64, .item = { .u.u64 = 0x7e37e43c8800759cull } }, { .reason = LECPCB_DESTRUCTED }, }, seq28[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_FLOAT16, .item = { .u.hf = 0x0001 } }, { .reason = LECPCB_DESTRUCTED }, }, seq29[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_FLOAT16, .item = { .u.hf = 0x0400 } }, { .reason = LECPCB_DESTRUCTED }, }, seq30[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_FLOAT16, .item = { .u.hf = 0xc400 } }, { .reason = LECPCB_DESTRUCTED }, }, seq31[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_FLOAT64, .item = { .u.u64 = 0xc010666666666666ull } }, { .reason = LECPCB_DESTRUCTED }, }, seq32[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_FLOAT16, .item = { .u.hf = 0x7c00 } }, { .reason = LECPCB_DESTRUCTED }, }, seq33[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_FLOAT16, .item = { .u.hf = 0x7e00 } }, { .reason = LECPCB_DESTRUCTED }, }, seq34[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_FLOAT16, .item = { .u.hf = 0xfc00 } }, { .reason = LECPCB_DESTRUCTED }, }, seq35[] = { { .reason = LECPCB_CONSTRUCTED }, #if defined(LWS_WITH_CBOR_FLOAT) { .reason = LECPCB_VAL_FLOAT32, .item = { .u.u32 = 0x7f800000 } }, #else { .reason = LECPCB_VAL_FLOAT32, .item = { .u.f = 0x7f800000 } }, #endif { .reason = LECPCB_DESTRUCTED }, }, seq36[] = { { .reason = LECPCB_CONSTRUCTED }, #if defined(LWS_WITH_CBOR_FLOAT) { .reason = LECPCB_VAL_FLOAT32, .item = { .u.f = NAN } }, #else { .reason = LECPCB_VAL_FLOAT32, .item = { .u.f = 0x7fc00000 } }, #endif { .reason = LECPCB_DESTRUCTED }, }, seq37[] = { { .reason = LECPCB_CONSTRUCTED }, #if defined(LWS_WITH_CBOR_FLOAT) { .reason = LECPCB_VAL_FLOAT32, .item = { .u.u32 = 0xff800000 } }, #else { .reason = LECPCB_VAL_FLOAT32, .item = { .u.f = 0xff800000 } }, #endif { .reason = LECPCB_DESTRUCTED }, }, seq38[] = { { .reason = LECPCB_CONSTRUCTED }, #if defined(LWS_WITH_CBOR_FLOAT) { .reason = LECPCB_VAL_FLOAT64, .item = { .u.u64 = 0x7ff0000000000000ull } }, #else { .reason = LECPCB_VAL_FLOAT64, .item = { .u.u64 = 0x7ff0000000000000ull } }, #endif { .reason = LECPCB_DESTRUCTED }, }, seq39[] = { { .reason = LECPCB_CONSTRUCTED }, #if defined(LWS_WITH_CBOR_FLOAT) { .reason = LECPCB_VAL_FLOAT64, .item = { .u.u64 = 0x7ff8000000000000ull } }, #else { .reason = LECPCB_VAL_FLOAT64, .item = { .u.u64 = 0x7ff8000000000000ull } }, #endif { .reason = LECPCB_DESTRUCTED }, }, seq40[] = { { .reason = LECPCB_CONSTRUCTED }, #if defined(LWS_WITH_CBOR_FLOAT) { .reason = LECPCB_VAL_FLOAT64, .item = { .u.u64 = 0xfff0000000000000ull } }, #else { .reason = LECPCB_VAL_FLOAT64, .item = { .u.u64 = 0xfff0000000000000ull } }, #endif { .reason = LECPCB_DESTRUCTED }, }, seq41[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_FALSE }, { .reason = LECPCB_DESTRUCTED }, }, seq42[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_TRUE }, { .reason = LECPCB_DESTRUCTED }, }, seq43[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_NULL }, { .reason = LECPCB_DESTRUCTED }, }, seq44[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_UNDEFINED }, { .reason = LECPCB_DESTRUCTED }, }, seq45[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_SIMPLE, .item = { .u.u64 = 16 } }, { .reason = LECPCB_DESTRUCTED }, }, seq46[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_FAILED }, /* example disallowed by RFC! */ { .reason = LECPCB_DESTRUCTED }, }, seq47[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_SIMPLE, .item = { .u.u64 = 255 } }, { .reason = LECPCB_DESTRUCTED }, }, seq48[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 0 } }, { .reason = LECPCB_VAL_STR_START, }, { .reason = LECPCB_VAL_STR_END, .buf = bm48, .buf_len = sizeof(bm48)}, { .reason = LECPCB_TAG_END }, { .reason = LECPCB_DESTRUCTED }, }, seq49[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 1 } }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 1363896240 } }, { .reason = LECPCB_TAG_END }, { .reason = LECPCB_DESTRUCTED }, }, seq50[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 1 } }, { .reason = LECPCB_VAL_FLOAT64, .item = { .u.u64 = 0x41d452d9ec200000ull } }, { .reason = LECPCB_TAG_END }, { .reason = LECPCB_DESTRUCTED }, }, seq51[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 23 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm51, .buf_len = sizeof(bm51)}, { .reason = LECPCB_TAG_END }, { .reason = LECPCB_DESTRUCTED }, }, seq52[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 24 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm52, .buf_len = sizeof(bm52)}, { .reason = LECPCB_TAG_END }, { .reason = LECPCB_DESTRUCTED }, }, seq53[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 32 } }, { .reason = LECPCB_VAL_STR_START, }, { .reason = LECPCB_VAL_STR_END, .buf = bm53, .buf_len = sizeof(bm53)}, { .reason = LECPCB_TAG_END }, { .reason = LECPCB_DESTRUCTED }, }, seq54[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm53, .buf_len = 0}, { .reason = LECPCB_DESTRUCTED }, }, seq55[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm51, .buf_len = sizeof(bm51)}, { .reason = LECPCB_DESTRUCTED }, }, seq56[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_STR_START, }, { .reason = LECPCB_VAL_STR_END, .buf = bm53, .buf_len = 0}, { .reason = LECPCB_DESTRUCTED }, }, seq57[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_STR_START, }, { .reason = LECPCB_VAL_STR_END, .buf = bm57, .buf_len = sizeof(bm57)}, { .reason = LECPCB_DESTRUCTED }, }, seq58[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_STR_START, }, { .reason = LECPCB_VAL_STR_END, .buf = bm58, .buf_len = sizeof(bm58)}, { .reason = LECPCB_DESTRUCTED }, }, seq59[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_STR_START, }, { .reason = LECPCB_VAL_STR_END, .buf = bm59, .buf_len = sizeof(bm59)}, { .reason = LECPCB_DESTRUCTED }, }, seq60[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_STR_START, }, { .reason = LECPCB_VAL_STR_END, .buf = bm60, .buf_len = sizeof(bm60)}, { .reason = LECPCB_DESTRUCTED }, }, seq61[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_STR_START, }, { .reason = LECPCB_VAL_STR_END, .buf = bm61, .buf_len = sizeof(bm61)}, { .reason = LECPCB_DESTRUCTED }, }, seq62[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_STR_START, }, { .reason = LECPCB_VAL_STR_END, .buf = bm62, .buf_len = sizeof(bm62)}, { .reason = LECPCB_DESTRUCTED }, }, seq63[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_END }, { .reason = LECPCB_DESTRUCTED }, }, seq64[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 1 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 2 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 3 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END }, { .reason = LECPCB_DESTRUCTED }, }, seq65[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 1 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 2 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 3 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 5 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END }, { .reason = LECPCB_DESTRUCTED }, }, seq66[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 1 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 2 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 3 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 5 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 6 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 7 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 8 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 9 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 10 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 11 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 12 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 13 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 14 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 15 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 16 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 17 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 18 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 19 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 20 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 21 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 22 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 23 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 24 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 25 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END }, { .reason = LECPCB_DESTRUCTED }, }, seq67[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_DESTRUCTED }, }, seq68[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 1 } }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 2 } }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 3 } }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_DESTRUCTED }, }, seq69[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_STR_START, }, { .reason = LECPCB_VAL_STR_END, .buf = (const uint8_t *)"a", .buf_len = 1}, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 1 } }, { .reason = LECPCB_VAL_STR_START, }, { .reason = LECPCB_VAL_STR_END, .buf = (const uint8_t *)"b", .buf_len = 1}, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 2 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 3 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_DESTRUCTED }, }, seq70[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_STR_START, }, { .reason = LECPCB_VAL_STR_END, .buf = (const uint8_t *)"a", .buf_len = 1}, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_STR_START, }, { .reason = LECPCB_VAL_STR_END, .buf = (const uint8_t *)"b", .buf_len = 1}, { .reason = LECPCB_VAL_STR_START, }, { .reason = LECPCB_VAL_STR_END, .buf = (const uint8_t *)"c", .buf_len = 1}, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_DESTRUCTED }, }, seq71[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_STR_START, }, { .reason = LECPCB_VAL_STR_END, .buf = (const uint8_t *)"a", .buf_len = 1}, { .reason = LECPCB_VAL_STR_START, }, { .reason = LECPCB_VAL_STR_END, .buf = (const uint8_t *)"A", .buf_len = 1}, { .reason = LECPCB_VAL_STR_START, }, { .reason = LECPCB_VAL_STR_END, .buf = (const uint8_t *)"b", .buf_len = 1}, { .reason = LECPCB_VAL_STR_START, }, { .reason = LECPCB_VAL_STR_END, .buf = (const uint8_t *)"B", .buf_len = 1}, { .reason = LECPCB_VAL_STR_START, }, { .reason = LECPCB_VAL_STR_END, .buf = (const uint8_t *)"c", .buf_len = 1}, { .reason = LECPCB_VAL_STR_START, }, { .reason = LECPCB_VAL_STR_END, .buf = (const uint8_t *)"C", .buf_len = 1}, { .reason = LECPCB_VAL_STR_START, }, { .reason = LECPCB_VAL_STR_END, .buf = (const uint8_t *)"d", .buf_len = 1}, { .reason = LECPCB_VAL_STR_START, }, { .reason = LECPCB_VAL_STR_END, .buf = (const uint8_t *)"D", .buf_len = 1}, { .reason = LECPCB_VAL_STR_START, }, { .reason = LECPCB_VAL_STR_END, .buf = (const uint8_t *)"e", .buf_len = 1}, { .reason = LECPCB_VAL_STR_START, }, { .reason = LECPCB_VAL_STR_END, .buf = (const uint8_t *)"E", .buf_len = 1}, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_DESTRUCTED }, }, seq72[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_CHUNK, .buf = bm72a, .buf_len = sizeof(bm72a)}, { .reason = LECPCB_VAL_BLOB_CHUNK, .buf = bm72b, .buf_len = sizeof(bm72b)}, { .reason = LECPCB_VAL_BLOB_END, }, { .reason = LECPCB_DESTRUCTED }, }, seq73[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_VAL_STR_START, }, { .reason = LECPCB_VAL_STR_CHUNK, .buf = (const uint8_t *)"stream", .buf_len = 5}, { .reason = LECPCB_VAL_STR_CHUNK, .buf = (const uint8_t *)"ming", .buf_len = 4}, { .reason = LECPCB_VAL_STR_END, }, { .reason = LECPCB_DESTRUCTED }, }, seq74[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_END }, { .reason = LECPCB_DESTRUCTED }, }, seq75[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 1 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 2 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 3 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 5 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END }, { .reason = LECPCB_DESTRUCTED }, }, seq76[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 1 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 2 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 3 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 5 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END }, { .reason = LECPCB_DESTRUCTED }, }, seq77[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 1 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 2 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 3 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 5 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END }, { .reason = LECPCB_DESTRUCTED }, }, seq78[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 1 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 2 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 3 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 5 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END }, { .reason = LECPCB_DESTRUCTED }, }, seq79[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 1 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 2 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 3 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 5 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 6 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 7 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 8 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 9 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 10 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 11 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 12 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 13 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 14 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 15 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 16 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 17 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 18 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 19 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 20 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 21 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 22 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 23 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 24 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 25 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END }, { .reason = LECPCB_DESTRUCTED }, }, seq80[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_STR_START, }, { .reason = LECPCB_VAL_STR_END, .buf = (const uint8_t *)"a", .buf_len = 1}, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 1 } }, { .reason = LECPCB_VAL_STR_START, }, { .reason = LECPCB_VAL_STR_END, .buf = (const uint8_t *)"b", .buf_len = 1}, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 2 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 3 } }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_DESTRUCTED }, }, seq81[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_STR_START, }, { .reason = LECPCB_VAL_STR_END, .buf = (const uint8_t *)"a", .buf_len = 1}, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_STR_START, }, { .reason = LECPCB_VAL_STR_END, .buf = (const uint8_t *)"b", .buf_len = 1}, { .reason = LECPCB_VAL_STR_START, }, { .reason = LECPCB_VAL_STR_END, .buf = (const uint8_t *)"c", .buf_len = 1}, { .reason = LECPCB_OBJECT_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END }, { .reason = LECPCB_DESTRUCTED }, }, seq82[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_STR_START, }, { .reason = LECPCB_VAL_STR_END, .buf = (const uint8_t *)"Fun", .buf_len = 3}, { .reason = LECPCB_VAL_TRUE }, { .reason = LECPCB_VAL_STR_START, }, { .reason = LECPCB_VAL_STR_END, .buf = (const uint8_t *)"Amt", .buf_len = 3}, { .reason = LECPCB_VAL_NUM_INT, .item = { .u.i64 = (int64_t)-2ll } }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_DESTRUCTED }, }, seq83[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 97 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm83a, .buf_len = sizeof(bm83a) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm83b, .buf_len = sizeof(bm83b) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm83c, .buf_len = sizeof(bm83c) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm83a, .buf_len = 0 }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 1 } }, { .reason = LECPCB_VAL_NUM_INT, .item = { .u.i64 = -6 } }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm83d, .buf_len = sizeof(bm83d) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm83a, .buf_len = 0 }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_TAG_END, }, { .reason = LECPCB_DESTRUCTED }, }, seq84[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 97 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm84a, .buf_len = sizeof(bm84a) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm84b, .buf_len = sizeof(bm84b) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm84c, .buf_len = sizeof(bm84c) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm84a, .buf_len = 0 }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 1 } }, { .reason = LECPCB_VAL_NUM_INT, .item = { .u.i64 = -6 } }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm84d, .buf_len = sizeof(bm84d) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm84a, .buf_len = 0 }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_TAG_END, }, { .reason = LECPCB_DESTRUCTED }, }, seq85[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 97 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm85a, .buf_len = sizeof(bm85a) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm85b, .buf_len = sizeof(bm85b) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm85c, .buf_len = sizeof(bm85c) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm85a, .buf_len = 0 }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 1 } }, { .reason = LECPCB_VAL_NUM_INT, .item = { .u.i64 = -6 } }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm85d, .buf_len = sizeof(bm85d) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm85a, .buf_len = 0 }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_TAG_END, }, { .reason = LECPCB_DESTRUCTED }, }, seq86[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 97 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm86a, .buf_len = sizeof(bm86a) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm86b, .buf_len = sizeof(bm86b) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm86c, .buf_len = sizeof(bm86c) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm86a, .buf_len = 0 }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 1 } }, { .reason = LECPCB_VAL_NUM_INT, .item = { .u.i64 = -6 } }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm86d, .buf_len = sizeof(bm86d) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm86a, .buf_len = 0 }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_TAG_END, }, { .reason = LECPCB_DESTRUCTED }, }, seq87[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 97 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm87a, .buf_len = sizeof(bm87a) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm87b, .buf_len = sizeof(bm87b) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm87c, .buf_len = sizeof(bm87c) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm87a, .buf_len = 0 }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 1 } }, { .reason = LECPCB_VAL_NUM_INT, .item = { .u.i64 = -6 } }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm87d, .buf_len = sizeof(bm87d) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm87a, .buf_len = 0 }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_TAG_END, }, { .reason = LECPCB_DESTRUCTED }, }, seq88[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 17 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm88a, .buf_len = sizeof(bm88a) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm88b, .buf_len = sizeof(bm88b) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm88c, .buf_len = sizeof(bm88c) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_TAG_END, }, { .reason = LECPCB_DESTRUCTED }, }, seq89[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 17 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm89a, .buf_len = sizeof(bm89a) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm89b, .buf_len = sizeof(bm89b) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm89c, .buf_len = sizeof(bm89c) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_TAG_END, }, { .reason = LECPCB_DESTRUCTED }, }, seq90[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 17 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm90a, .buf_len = sizeof(bm90a) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm90b, .buf_len = sizeof(bm90b) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm90c, .buf_len = sizeof(bm90c) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_TAG_END, }, { .reason = LECPCB_DESTRUCTED }, }, seq91[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 17 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm91a, .buf_len = sizeof(bm91a) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm91b, .buf_len = sizeof(bm91b) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm91c, .buf_len = sizeof(bm91c) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_TAG_END, }, { .reason = LECPCB_DESTRUCTED }, }, seq92[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 17 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm92a, .buf_len = sizeof(bm92a) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm92b, .buf_len = sizeof(bm92b) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm92c, .buf_len = sizeof(bm92c) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_TAG_END, }, { .reason = LECPCB_DESTRUCTED }, }, seq93[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 16 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm93a, .buf_len = sizeof(bm93a) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 5 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm93b, .buf_len = sizeof(bm93b) }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 7 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm93c, .buf_len = sizeof(bm93c) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm93d, .buf_len = sizeof(bm93d) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm93e, .buf_len = sizeof(bm93e) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm93f, .buf_len = sizeof(bm93f) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_TAG_END, }, { .reason = LECPCB_DESTRUCTED }, }, seq94[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 16 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm94a, .buf_len = sizeof(bm94a) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 5 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm94b, .buf_len = sizeof(bm94b) }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 7 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm94c, .buf_len = sizeof(bm94c) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm94d, .buf_len = sizeof(bm94d) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm94e, .buf_len = sizeof(bm94e) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm94f, .buf_len = sizeof(bm94f) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm94g, .buf_len = sizeof(bm94g) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm94h, .buf_len = sizeof(bm94h) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm94i, .buf_len = sizeof(bm94i) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_TAG_END, }, { .reason = LECPCB_DESTRUCTED }, }, seq95[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 96 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm95a, .buf_len = sizeof(bm95a) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 5 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm95b, .buf_len = sizeof(bm95b) }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 7 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm95c, .buf_len = sizeof(bm95c) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm95d, .buf_len = sizeof(bm95d) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm95e, .buf_len = sizeof(bm95e) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm95f, .buf_len = sizeof(bm95f) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm95f, .buf_len = 0 }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 1 } }, { .reason = LECPCB_VAL_NUM_INT, .item = { .u.i64 = -6 } }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm95g, .buf_len = sizeof(bm95g) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm95f, .buf_len = 0 }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_TAG_END, }, { .reason = LECPCB_DESTRUCTED }, }, seq96[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 96 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm96a, .buf_len = sizeof(bm96a) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 5 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm96b, .buf_len = sizeof(bm96b) }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 7 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm96c, .buf_len = sizeof(bm96c) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm96d, .buf_len = sizeof(bm96d) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm96e, .buf_len = sizeof(bm96e) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm96f, .buf_len = sizeof(bm96f) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm96g, .buf_len = sizeof(bm96g) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm96h, .buf_len = sizeof(bm96h) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm96i, .buf_len = sizeof(bm96i) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm96f, .buf_len = 0 }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 1 } }, { .reason = LECPCB_VAL_NUM_INT, .item = { .u.i64 = -6 } }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm96j, .buf_len = sizeof(bm96j) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm96f, .buf_len = 0 }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_TAG_END, }, { .reason = LECPCB_DESTRUCTED }, }, seq97[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 96 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm97a, .buf_len = sizeof(bm97a) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 5 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm97b, .buf_len = sizeof(bm97b) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm97c, .buf_len = sizeof(bm97c) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm97f, .buf_len = 0 }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 1 } }, { .reason = LECPCB_VAL_NUM_INT, .item = { .u.i64 = -6 } }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm97d, .buf_len = sizeof(bm97d) }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 7 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm97e, .buf_len = sizeof(bm97e) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm97f, .buf_len = sizeof(bm97f) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm97g, .buf_len = sizeof(bm97g) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm97e, .buf_len = 0 }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_TAG_END, }, { .reason = LECPCB_DESTRUCTED }, }, seq98[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 97 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm98a, .buf_len = sizeof(bm98a) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 7 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm98b, .buf_len = sizeof(bm98b) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm98c, .buf_len = sizeof(bm98c) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm98d, .buf_len = sizeof(bm98d) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm98e, .buf_len = sizeof(bm98e) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm98f, .buf_len = sizeof(bm98f) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm98e, .buf_len = 0 }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 1 } }, { .reason = LECPCB_VAL_NUM_INT, .item = { .u.i64 = -6 } }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm98g, .buf_len = sizeof(bm98g) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm98e, .buf_len = 0 }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_TAG_END, }, { .reason = LECPCB_DESTRUCTED }, }, seq99[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 97 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm99a, .buf_len = sizeof(bm99a) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 7 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm99b, .buf_len = sizeof(bm99b) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm99c, .buf_len = sizeof(bm99c) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm99d, .buf_len = sizeof(bm99d) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm99e, .buf_len = sizeof(bm99e) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm99f, .buf_len = sizeof(bm99f) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm99g, .buf_len = sizeof(bm99g) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm99h, .buf_len = sizeof(bm99h) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm99i, .buf_len = sizeof(bm99i) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm99a, .buf_len = 0 }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 1 } }, { .reason = LECPCB_VAL_NUM_INT, .item = { .u.i64 = -6 } }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm99j, .buf_len = sizeof(bm99j) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm98e, .buf_len = 0 }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_TAG_END, }, { .reason = LECPCB_DESTRUCTED }, }, seq100[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 17 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm100a, .buf_len = sizeof(bm100a) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 7 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm100b, .buf_len = sizeof(bm100b) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm100c, .buf_len = sizeof(bm100c) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm100d, .buf_len = sizeof(bm100d) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm100e, .buf_len = sizeof(bm100e) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm100f, .buf_len = sizeof(bm100f) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_TAG_END, }, { .reason = LECPCB_DESTRUCTED }, }, seq101[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 17 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm101a, .buf_len = sizeof(bm101a) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 7 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm101b, .buf_len = sizeof(bm101b) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm101c, .buf_len = sizeof(bm101c) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm101d, .buf_len = sizeof(bm101d) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm101e, .buf_len = sizeof(bm101e) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm101f, .buf_len = sizeof(bm101f) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm101g, .buf_len = sizeof(bm101g) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm101h, .buf_len = sizeof(bm101h) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm101i, .buf_len = sizeof(bm101i) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm101j, .buf_len = 0 }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 1 } }, { .reason = LECPCB_VAL_NUM_INT, .item = { .u.i64 = -6 } }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm101j, .buf_len = sizeof(bm101j) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm101j, .buf_len = 0 }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_TAG_END, }, { .reason = LECPCB_DESTRUCTED }, }, seq102[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 17 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm102a, .buf_len = sizeof(bm102a) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 7 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm102b, .buf_len = sizeof(bm102b) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm102c, .buf_len = sizeof(bm102c) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm102d, .buf_len = sizeof(bm102d) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm102e, .buf_len = sizeof(bm102e) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm102f, .buf_len = sizeof(bm102f) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_TAG_END, }, { .reason = LECPCB_DESTRUCTED }, }, seq103[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 17 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm103a, .buf_len = sizeof(bm103a) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 7 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm103b, .buf_len = sizeof(bm103b) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm103c, .buf_len = sizeof(bm103c) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm103d, .buf_len = sizeof(bm103d) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm103e, .buf_len = sizeof(bm103e) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm103f, .buf_len = sizeof(bm103f) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm103g, .buf_len = sizeof(bm103g) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm103h, .buf_len = sizeof(bm103h) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm103i, .buf_len = sizeof(bm103i) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_TAG_END, }, { .reason = LECPCB_DESTRUCTED }, }, seq104[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 98 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm104a, .buf_len = sizeof(bm104a) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm104b, .buf_len = sizeof(bm104b) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm104c, .buf_len = sizeof(bm104c) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 7 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm104d, .buf_len = sizeof(bm104d) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm104e, .buf_len = sizeof(bm104e) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm104f, .buf_len = sizeof(bm104f) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm104g, .buf_len = sizeof(bm104g) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm104h, .buf_len = sizeof(bm104h) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_TAG_END, }, { .reason = LECPCB_DESTRUCTED }, }, seq105[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 98 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm105a, .buf_len = sizeof(bm105a) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_OBJECT_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm105b, .buf_len = sizeof(bm105b) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm105c, .buf_len = sizeof(bm105c) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 7 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm105d, .buf_len = sizeof(bm105d) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm105e, .buf_len = sizeof(bm105e) }, { .reason = LECPCB_OBJECT_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm105f, .buf_len = sizeof(bm105f) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm105g, .buf_len = sizeof(bm105g) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm105h, .buf_len = sizeof(bm105h) }, { .reason = LECPCB_OBJECT_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm105i, .buf_len = sizeof(bm105i) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm105j, .buf_len = sizeof(bm105j) }, { .reason = LECPCB_OBJECT_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm105k, .buf_len = sizeof(bm105k) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_TAG_END, }, { .reason = LECPCB_DESTRUCTED }, }, seq106[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 98 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm106a, .buf_len = sizeof(bm106a) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 7 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm106b, .buf_len = sizeof(bm106b) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm106c, .buf_len = sizeof(bm106c) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm106d, .buf_len = sizeof(bm106d) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm106e, .buf_len = sizeof(bm106e) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm106f, .buf_len = sizeof(bm106f) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm106g, .buf_len = sizeof(bm106g) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm106h, .buf_len = sizeof(bm106h) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_TAG_END, }, { .reason = LECPCB_DESTRUCTED }, }, seq107[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 17 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm107a, .buf_len = sizeof(bm107a) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 7 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm107b, .buf_len = sizeof(bm107b) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm107c, .buf_len = sizeof(bm107c) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm107d, .buf_len = sizeof(bm107d) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm107e, .buf_len = sizeof(bm107e) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm107f, .buf_len = sizeof(bm107f) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm107g, .buf_len = sizeof(bm107g) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_TAG_END, }, { .reason = LECPCB_DESTRUCTED }, }, seq108[] = { { .reason = LECPCB_CONSTRUCTED }, { .reason = LECPCB_TAG_START, .item = { .u.u64 = 18 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm108a, .buf_len = sizeof(bm108a) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 7 } }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm108b, .buf_len = sizeof(bm108b) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm108c, .buf_len = sizeof(bm108c) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm108d, .buf_len = sizeof(bm108d) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_ARRAY_START, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm108e, .buf_len = sizeof(bm108e) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_OBJECT_START, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm108f, .buf_len = sizeof(bm108f) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm108g, .buf_len = sizeof(bm108g) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_VAL_NUM_UINT, .item = { .u.u64 = 4 } }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm108h, .buf_len = sizeof(bm108h) }, { .reason = LECPCB_OBJECT_END }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm108i, .buf_len = sizeof(bm108i) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_ITEM_START, }, { .reason = LECPCB_VAL_BLOB_START, }, { .reason = LECPCB_VAL_BLOB_END, .buf = bm108j, .buf_len = sizeof(bm108j) }, { .reason = LECPCB_ARRAY_ITEM_END, }, { .reason = LECPCB_ARRAY_END, }, { .reason = LECPCB_TAG_END, }, { .reason = LECPCB_DESTRUCTED }, }; struct cbort { const uint8_t *b; size_t blen; const struct seq *seq; size_t seq_size; }; static const struct cbort cbor_tests[] = { { .b = test1, .blen = sizeof(test1), .seq = seq1, .seq_size = LWS_ARRAY_SIZE(seq1) }, { .b = test2, .blen = sizeof(test2), .seq = seq2, .seq_size = LWS_ARRAY_SIZE(seq2) }, { .b = test3, .blen = sizeof(test3), .seq = seq3, .seq_size = LWS_ARRAY_SIZE(seq3) }, { .b = test4, .blen = sizeof(test4), .seq = seq4, .seq_size = LWS_ARRAY_SIZE(seq4) }, { .b = test5, .blen = sizeof(test5), .seq = seq5, .seq_size = LWS_ARRAY_SIZE(seq5) }, { .b = test6, .blen = sizeof(test6), .seq = seq6, .seq_size = LWS_ARRAY_SIZE(seq6) }, { .b = test7, .blen = sizeof(test7), .seq = seq7, .seq_size = LWS_ARRAY_SIZE(seq7) }, { .b = test8, .blen = sizeof(test8), .seq = seq8, .seq_size = LWS_ARRAY_SIZE(seq8) }, { .b = test9, .blen = sizeof(test9), .seq = seq9, .seq_size = LWS_ARRAY_SIZE(seq9) }, { .b = test10, .blen = sizeof(test10), .seq = seq10, .seq_size = LWS_ARRAY_SIZE(seq10) }, { .b = test11, .blen = sizeof(test11), .seq = seq11, .seq_size = LWS_ARRAY_SIZE(seq11) }, { .b = test12, .blen = sizeof(test12), .seq = seq12, .seq_size = LWS_ARRAY_SIZE(seq12) }, { .b = test13, .blen = sizeof(test13), .seq = seq13, .seq_size = LWS_ARRAY_SIZE(seq13) }, { .b = test14, .blen = sizeof(test14), .seq = seq14, .seq_size = LWS_ARRAY_SIZE(seq14) }, { .b = test15, .blen = sizeof(test15), .seq = seq15, .seq_size = LWS_ARRAY_SIZE(seq15) }, { .b = test16, .blen = sizeof(test16), .seq = seq16, .seq_size = LWS_ARRAY_SIZE(seq16) }, { .b = test17, .blen = sizeof(test17), .seq = seq17, .seq_size = LWS_ARRAY_SIZE(seq17) }, { .b = test18, .blen = sizeof(test18), .seq = seq18, .seq_size = LWS_ARRAY_SIZE(seq18) }, { .b = test19, .blen = sizeof(test19), .seq = seq19, .seq_size = LWS_ARRAY_SIZE(seq19) }, { .b = test20, .blen = sizeof(test20), .seq = seq20, .seq_size = LWS_ARRAY_SIZE(seq20) }, { .b = test21, .blen = sizeof(test21), .seq = seq21, .seq_size = LWS_ARRAY_SIZE(seq21) }, { .b = test22, .blen = sizeof(test22), .seq = seq22, .seq_size = LWS_ARRAY_SIZE(seq22) }, { .b = test23, .blen = sizeof(test23), .seq = seq23, .seq_size = LWS_ARRAY_SIZE(seq23) }, { .b = test24, .blen = sizeof(test24), .seq = seq24, .seq_size = LWS_ARRAY_SIZE(seq24) }, { .b = test25, .blen = sizeof(test25), .seq = seq25, .seq_size = LWS_ARRAY_SIZE(seq25) }, { .b = test26, .blen = sizeof(test26), .seq = seq26, .seq_size = LWS_ARRAY_SIZE(seq26) }, { .b = test27, .blen = sizeof(test27), .seq = seq27, .seq_size = LWS_ARRAY_SIZE(seq27) }, { .b = test28, .blen = sizeof(test28), .seq = seq28, .seq_size = LWS_ARRAY_SIZE(seq28) }, { .b = test29, .blen = sizeof(test29), .seq = seq29, .seq_size = LWS_ARRAY_SIZE(seq29) }, { .b = test30, .blen = sizeof(test30), .seq = seq30, .seq_size = LWS_ARRAY_SIZE(seq30) }, { .b = test31, .blen = sizeof(test31), .seq = seq31, .seq_size = LWS_ARRAY_SIZE(seq31) }, { .b = test32, .blen = sizeof(test32), .seq = seq32, .seq_size = LWS_ARRAY_SIZE(seq32) }, { .b = test33, .blen = sizeof(test33), .seq = seq33, .seq_size = LWS_ARRAY_SIZE(seq33) }, { .b = test34, .blen = sizeof(test34), .seq = seq34, .seq_size = LWS_ARRAY_SIZE(seq34) }, { .b = test35, .blen = sizeof(test35), .seq = seq35, .seq_size = LWS_ARRAY_SIZE(seq35) }, { .b = test36, .blen = sizeof(test36), .seq = seq36, .seq_size = LWS_ARRAY_SIZE(seq36) }, { .b = test37, .blen = sizeof(test37), .seq = seq37, .seq_size = LWS_ARRAY_SIZE(seq37) }, { .b = test38, .blen = sizeof(test38), .seq = seq38, .seq_size = LWS_ARRAY_SIZE(seq38) }, { .b = test39, .blen = sizeof(test39), .seq = seq39, .seq_size = LWS_ARRAY_SIZE(seq39) }, { .b = test40, .blen = sizeof(test40), .seq = seq40, .seq_size = LWS_ARRAY_SIZE(seq40) }, { .b = test41, .blen = sizeof(test41), .seq = seq41, .seq_size = LWS_ARRAY_SIZE(seq41) }, { .b = test42, .blen = sizeof(test42), .seq = seq42, .seq_size = LWS_ARRAY_SIZE(seq42) }, { .b = test43, .blen = sizeof(test43), .seq = seq43, .seq_size = LWS_ARRAY_SIZE(seq43) }, { .b = test44, .blen = sizeof(test44), .seq = seq44, .seq_size = LWS_ARRAY_SIZE(seq44) }, { .b = test45, .blen = sizeof(test45), .seq = seq45, .seq_size = LWS_ARRAY_SIZE(seq45) }, { .b = test46, .blen = sizeof(test46), .seq = seq46, .seq_size = LWS_ARRAY_SIZE(seq46) }, { .b = test47, .blen = sizeof(test47), .seq = seq47, .seq_size = LWS_ARRAY_SIZE(seq47) }, { .b = test48, .blen = sizeof(test48), .seq = seq48, .seq_size = LWS_ARRAY_SIZE(seq48) }, { .b = test49, .blen = sizeof(test49), .seq = seq49, .seq_size = LWS_ARRAY_SIZE(seq49) }, { .b = test50, .blen = sizeof(test50), .seq = seq50, .seq_size = LWS_ARRAY_SIZE(seq50) }, { .b = test51, .blen = sizeof(test51), .seq = seq51, .seq_size = LWS_ARRAY_SIZE(seq51) }, { .b = test52, .blen = sizeof(test52), .seq = seq52, .seq_size = LWS_ARRAY_SIZE(seq52) }, { .b = test53, .blen = sizeof(test53), .seq = seq53, .seq_size = LWS_ARRAY_SIZE(seq53) }, { .b = test54, .blen = sizeof(test54), .seq = seq54, .seq_size = LWS_ARRAY_SIZE(seq54) }, { .b = test55, .blen = sizeof(test55), .seq = seq55, .seq_size = LWS_ARRAY_SIZE(seq55) }, { .b = test56, .blen = sizeof(test56), .seq = seq56, .seq_size = LWS_ARRAY_SIZE(seq56) }, { .b = test57, .blen = sizeof(test57), .seq = seq57, .seq_size = LWS_ARRAY_SIZE(seq57) }, { .b = test58, .blen = sizeof(test58), .seq = seq58, .seq_size = LWS_ARRAY_SIZE(seq58) }, { .b = test59, .blen = sizeof(test59), .seq = seq59, .seq_size = LWS_ARRAY_SIZE(seq59) }, { .b = test60, .blen = sizeof(test60), .seq = seq60, .seq_size = LWS_ARRAY_SIZE(seq60) }, { .b = test61, .blen = sizeof(test61), .seq = seq61, .seq_size = LWS_ARRAY_SIZE(seq61) }, { .b = test62, .blen = sizeof(test62), .seq = seq62, .seq_size = LWS_ARRAY_SIZE(seq62) }, { .b = test63, .blen = sizeof(test63), .seq = seq63, .seq_size = LWS_ARRAY_SIZE(seq63) }, { .b = test64, .blen = sizeof(test64), .seq = seq64, .seq_size = LWS_ARRAY_SIZE(seq64) }, { .b = test65, .blen = sizeof(test65), .seq = seq65, .seq_size = LWS_ARRAY_SIZE(seq65) }, { .b = test66, .blen = sizeof(test66), .seq = seq66, .seq_size = LWS_ARRAY_SIZE(seq66) }, { .b = test67, .blen = sizeof(test67), .seq = seq67, .seq_size = LWS_ARRAY_SIZE(seq67) }, { .b = test68, .blen = sizeof(test68), .seq = seq68, .seq_size = LWS_ARRAY_SIZE(seq68) }, { .b = test69, .blen = sizeof(test69), .seq = seq69, .seq_size = LWS_ARRAY_SIZE(seq69) }, { .b = test70, .blen = sizeof(test70), .seq = seq70, .seq_size = LWS_ARRAY_SIZE(seq70) }, { .b = test71, .blen = sizeof(test71), .seq = seq71, .seq_size = LWS_ARRAY_SIZE(seq71) }, { .b = test72, .blen = sizeof(test72), .seq = seq72, .seq_size = LWS_ARRAY_SIZE(seq72) }, { .b = test73, .blen = sizeof(test73), .seq = seq73, .seq_size = LWS_ARRAY_SIZE(seq73) }, { .b = test74, .blen = sizeof(test74), .seq = seq74, .seq_size = LWS_ARRAY_SIZE(seq74) }, { .b = test75, .blen = sizeof(test75), .seq = seq75, .seq_size = LWS_ARRAY_SIZE(seq75) }, { .b = test76, .blen = sizeof(test76), .seq = seq76, .seq_size = LWS_ARRAY_SIZE(seq76) }, { .b = test77, .blen = sizeof(test77), .seq = seq77, .seq_size = LWS_ARRAY_SIZE(seq77) }, { .b = test78, .blen = sizeof(test78), .seq = seq78, .seq_size = LWS_ARRAY_SIZE(seq78) }, { .b = test79, .blen = sizeof(test79), .seq = seq79, .seq_size = LWS_ARRAY_SIZE(seq79) }, { .b = test80, .blen = sizeof(test80), .seq = seq80, .seq_size = LWS_ARRAY_SIZE(seq80) }, { .b = test81, .blen = sizeof(test81), .seq = seq81, .seq_size = LWS_ARRAY_SIZE(seq81) }, { .b = test82, .blen = sizeof(test82), .seq = seq82, .seq_size = LWS_ARRAY_SIZE(seq82) }, /* COSE-dervied test vectors */ { .b = test83, .blen = sizeof(test83), .seq = seq83, .seq_size = LWS_ARRAY_SIZE(seq83) }, { .b = test84, .blen = sizeof(test84), .seq = seq84, .seq_size = LWS_ARRAY_SIZE(seq84) }, { .b = test85, .blen = sizeof(test85), .seq = seq85, .seq_size = LWS_ARRAY_SIZE(seq85) }, { .b = test86, .blen = sizeof(test86), .seq = seq86, .seq_size = LWS_ARRAY_SIZE(seq86) }, { .b = test87, .blen = sizeof(test87), .seq = seq87, .seq_size = LWS_ARRAY_SIZE(seq87) }, { .b = test88, .blen = sizeof(test88), .seq = seq88, .seq_size = LWS_ARRAY_SIZE(seq88) }, { .b = test89, .blen = sizeof(test89), .seq = seq89, .seq_size = LWS_ARRAY_SIZE(seq89) }, { .b = test90, .blen = sizeof(test90), .seq = seq90, .seq_size = LWS_ARRAY_SIZE(seq90) }, { .b = test91, .blen = sizeof(test91), .seq = seq91, .seq_size = LWS_ARRAY_SIZE(seq91) }, { .b = test92, .blen = sizeof(test92), .seq = seq92, .seq_size = LWS_ARRAY_SIZE(seq92) }, { .b = test93, .blen = sizeof(test93), .seq = seq93, .seq_size = LWS_ARRAY_SIZE(seq93) }, { .b = test94, .blen = sizeof(test94), .seq = seq94, .seq_size = LWS_ARRAY_SIZE(seq94) }, { .b = test95, .blen = sizeof(test95), .seq = seq95, .seq_size = LWS_ARRAY_SIZE(seq95) }, { .b = test96, .blen = sizeof(test96), .seq = seq96, .seq_size = LWS_ARRAY_SIZE(seq96) }, { .b = test97, .blen = sizeof(test97), .seq = seq97, .seq_size = LWS_ARRAY_SIZE(seq97) }, { .b = test98, .blen = sizeof(test98), .seq = seq98, .seq_size = LWS_ARRAY_SIZE(seq98) }, { .b = test99, .blen = sizeof(test99), .seq = seq99, .seq_size = LWS_ARRAY_SIZE(seq99) }, { .b = test100, .blen = sizeof(test100), .seq = seq100, .seq_size = LWS_ARRAY_SIZE(seq100) }, { .b = test101, .blen = sizeof(test101), .seq = seq101, .seq_size = LWS_ARRAY_SIZE(seq101) }, { .b = test102, .blen = sizeof(test102), .seq = seq102, .seq_size = LWS_ARRAY_SIZE(seq102) }, { .b = test103, .blen = sizeof(test103), .seq = seq103, .seq_size = LWS_ARRAY_SIZE(seq103) }, { .b = test104, .blen = sizeof(test104), .seq = seq104, .seq_size = LWS_ARRAY_SIZE(seq104) }, { .b = test105, .blen = sizeof(test105), .seq = seq105, .seq_size = LWS_ARRAY_SIZE(seq105) }, { .b = test106, .blen = sizeof(test106), .seq = seq106, .seq_size = LWS_ARRAY_SIZE(seq106) }, { .b = test107, .blen = sizeof(test107), .seq = seq107, .seq_size = LWS_ARRAY_SIZE(seq107) }, { .b = test108, .blen = sizeof(test108), .seq = seq108, .seq_size = LWS_ARRAY_SIZE(seq108) }, }; static const uint8_t w1[] = { 0x65, 0x68, 0x65, 0x6C, 0x6C, 0x6F }, w2[] = { 0xc2 }, w3[] = { 0x82, 0x63, 0x61, 0x62, 0x63, 0x63, 0x64, 0x65, 0x66 }, w4[] = { 0xA2, 0x63, 0x67, 0x68, 0x69, 0x01, 0x63, 0x6A, 0x6B, 0x6C, 0x02 }, w5[] = { 0xD8, 0x7B, 0xA2, 0x63, 0x67, 0x68, 0x69, 0x01, 0x63, 0x6A, 0x6B, 0x6C, 0x02 }, w6[] = { 0xCC, 0xA2, 0x63, 0x67, 0x68, 0x69, 0x01, 0x63, 0x6A, 0x6B, 0x6C, 0x82, 0x61, 0x61, 0x61, 0x62 }, w7[] = { 0x20, }, w8[] = { 0x0c, }, w13[] = { 0x18, 0x34 }, w14[] = { 0x19, 0x12, 0x34 }, w15[] = { 0x1a, 0x12, 0x34, 0x56, 0x78 }, w16[] = { 0x1b, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0 }, w17[] = { 0x65, 0x68, 0x65, 0x6C, 0x6C, 0x6F }, w18[] = { 0x25 }, w19[] = { 0xd8, 0x7b, 0x58, 0xb7, 0xd8, 0x62, 0x84, 0x43, 0xa1, 0x03, 0x00, 0xa1, 0x07, 0x83, 0x43, 0xa1, 0x01, 0x27, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0xb7, 0xca, 0xcb, 0xa2, 0x85, 0xc4, 0xcd, 0x3e, 0xd2, 0xf0, 0x14, 0x6f, 0x41, 0x98, 0x86, 0x14, 0x4c, 0xa6, 0x38, 0xd0, 0x87, 0xde, 0x12, 0x3d, 0x40, 0x01, 0x67, 0x30, 0x8a, 0xce, 0xab, 0xc4, 0xb5, 0xe5, 0xc6, 0xa4, 0x0c, 0x0d, 0xe0, }, w19a[] = { 0xb7, 0x11, 0x67, 0xa3, 0x91, 0x75, 0xea, 0x56, 0xc1, 0xfe, 0x96, 0xc8, 0x9e, 0x5e, 0x7d, 0x30, 0xda, 0xf2, 0x43, 0x8a, 0x45, 0x61, 0x59, 0xa2, 0x0a, 0x54, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x81, 0x83, 0x43, 0xa1, 0x01, 0x27, 0xa1, 0x04, 0x42, 0x31, 0x31, 0x58, 0x40, 0x77, 0xf3, 0xea, 0xcd, 0x11,}, w19b[] = { 0x85, 0x2c, 0x4b, 0xf9, 0xcb, 0x1d, 0x72, 0xfa, 0xbe, 0x6b, 0x26, 0xfb, 0xa1, 0xd7, 0x60, 0x92, 0xb2, 0xb5, 0xb7, 0xec, 0x83, 0xb8, 0x35, 0x57, 0x65, 0x22, 0x64, 0xe6, 0x96, 0x90, 0xdb, 0xc1, 0x17, 0x2d, 0xdc, 0x0b, 0xf8, 0x84, 0x11, 0xc0, 0xd2, 0x5a, 0x50, 0x7f, 0xdb, 0x24, 0x7a, 0x20, 0xc4, 0x0d, 0x5e, 0x24, 0x5f, 0xab, 0xd3, 0xfc, 0x9e, 0xc1, 0x06 }, w22[] = { 0xD8, 0x7B, 0x19, 0x01, 0xC8 }, w24[] = { 0xDB, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xED, 0xF0, 0x19, 0x01, 0xC8}, w25[] = { 0xF9, 0x3C, 0x00 }, w26[] = { 0xF9, 0x3E, 0x00 }, w27[] = { 0xFB, 0x3F, 0xF1, 0xF7, 0xCE, 0xD9, 0x16, 0x87, 0x2B }, w28[] = { 0xA2, 0x61, 0x61, 0x01, 0x61, 0x62, 0x82, 0x02, 0x03 }, w29[] = { 0x7F, 0x65, 0x68, 0x65, 0x6C, 0x6C, 0x6F, 0xFF }, w30[] = { 0xA2, 0x63, 0x67, 0x68, 0x69, 0x18, 0x7B, 0x63, 0x6A, 0x6B, 0x6C, 0x02 }, w31[] = { 0x82, 0x18, 0x81, 0x19, 0x04, 0x00 }, w32[] = { 0xA2, 0x63, 0x67, 0x68, 0x69, 0x38, 0x7A, 0x63, 0x6A, 0x6B, 0x6C, 0x02 }, w33[] = { 0x82, 0x38, 0x80, 0x39, 0x03, 0xFF } ; static const char * const tok[] = { "something", }; struct priv { const struct cbort *cbt; size_t idx; }; static int pass; static signed char test_cb(struct lecp_ctx *ctx, char reason) { struct priv *priv = (struct priv *)ctx->user; size_t i = priv->idx++; #if defined(VERBOSE) lwsl_notice("%s: %s, ctx->path %s\n", __func__, reason_names[(int)reason & 0x1f], ctx->path); #endif // if (ctx->npos) // lwsl_hexdump_notice(ctx->buf, ctx->npos); if (!priv->cbt->seq) return 0; if (i >= priv->cbt->seq_size) { lwsl_warn("%s: unexpected parse states\n", __func__); return 1; } if (priv->cbt->seq[i].reason != reason) { lwsl_warn("%s: reason mismatch\n", __func__); return 1; } if (priv->cbt->seq[i].buf && (priv->cbt->seq[i].buf_len != ctx->npos || memcmp(priv->cbt->seq[i].buf, ctx->buf, ctx->npos))) { lwsl_warn("%s: buf mismatch\n", __func__); lwsl_hexdump_notice(ctx->buf, (size_t)ctx->npos); return 1; } switch (reason) { case LECPCB_VAL_SIMPLE: case LECPCB_VAL_NUM_UINT: case LECPCB_VAL_NUM_INT: if (ctx->item.u.u64 != priv->cbt->seq[i].item.u.u64) { lwsl_warn("%s: number mismatch %llu %llu\n", __func__, (unsigned long long)ctx->item.u.u64, (unsigned long long)priv->cbt->seq[i].item.u.u64); return 1; } break; case LECPCB_VAL_FLOAT16: if (ctx->item.u.hf != priv->cbt->seq[i].item.u.hf) { lwsl_warn("%s: number mismatch %llu %llu\n", __func__, (unsigned long long)ctx->item.u.hf, (unsigned long long)priv->cbt->seq[i].item.u.hf); return 1; } break; case LECPCB_VAL_FLOAT32: #if defined(LWS_WITH_CBOR_FLOAT) if (!isfinite(ctx->item.u.f) && !isfinite(priv->cbt->seq[i].item.u.f)) break; if (isnan(ctx->item.u.f) && isnan(priv->cbt->seq[i].item.u.f)) break; #endif if (ctx->item.u.f != priv->cbt->seq[i].item.u.f) { #if defined(LWS_WITH_CBOR_FLOAT) lwsl_warn("%s: number mismatch %f %f\n", __func__, ctx->item.u.f, priv->cbt->seq[i].item.u.f); #else lwsl_warn("%s: f32 number mismatch %llu %llu\n", __func__, (unsigned long long)ctx->item.u.f, (unsigned long long)priv->cbt->seq[i].item.u.f); #endif return 1; } break; case LECPCB_VAL_FLOAT64: #if defined(LWS_WITH_CBOR_FLOAT) if (!isfinite(ctx->item.u.d) && !isfinite(priv->cbt->seq[i].item.u.d)) break; if (isnan(ctx->item.u.d) && isnan(priv->cbt->seq[i].item.u.d)) break; #endif if (ctx->item.u.d != priv->cbt->seq[i].item.u.d) { #if defined(LWS_WITH_CBOR_FLOAT) lwsl_warn("%s: f64 number mismatch %f %f\n", __func__, ctx->item.u.d, priv->cbt->seq[i].item.u.d); #else lwsl_warn("%s: number mismatch %llu %llu\n", __func__, (unsigned long long)ctx->item.u.d, (unsigned long long)priv->cbt->seq[i].item.u.d); #endif return 1; } break; case LECPCB_DESTRUCTED: pass++; break; } return 0; } int main(int argc, const char **argv) { int n, m, e = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE, expected = (int)LWS_ARRAY_SIZE(cbor_tests) + 33 /* <-- how many write tests */; struct lecp_ctx ctx; const char *p; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS API selftest: LECP CBOR parser\n"); for (m = 0; m < (int)LWS_ARRAY_SIZE(cbor_tests); m++) { struct priv priv; priv.cbt = &cbor_tests[m]; priv.idx = 0; lwsl_notice("%s: ++++++++++++++++ test %d\n", __func__, m + 1); lecp_construct(&ctx, test_cb, &priv, tok, LWS_ARRAY_SIZE(tok)); lwsl_hexdump_info(cbor_tests[m].b, cbor_tests[m].blen); #if 0 { char fn[128]; int fd; lws_snprintf(fn, sizeof(fn), "/tmp/cbor-%d", m + 1); fd = open(fn, LWS_O_CREAT | LWS_O_TRUNC | LWS_O_WRONLY, 0600); if (fd != -1) { write(fd, cbor_tests[m].b, cbor_tests[m].blen); close(fd); } } #endif n = lecp_parse(&ctx, cbor_tests[m].b, cbor_tests[m].blen); lecp_destruct(&ctx); if (n < 0 && m + 1 != 46 /* expected to fail */) { lwsl_err("%s: test %d: CBOR decode failed %d '%s'\n", __func__, m + 1, n, lecp_error_to_string(n)); e++; } } { lws_lec_pctx_t ctx; uint8_t buf[64]; lws_lec_init(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "'hello'") != LWS_LECPCTX_RET_FINISHED || ctx.used != sizeof(w1) || memcmp(w1, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; lws_lec_setbuf(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "2()") != LWS_LECPCTX_RET_FINISHED || ctx.used != sizeof(w2) || memcmp(w2, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; lws_lec_setbuf(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "['abc','def']") != LWS_LECPCTX_RET_FINISHED || ctx.used != sizeof(w3) || memcmp(w3, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; lwsl_user("%s: test4\n", __func__); lws_lec_setbuf(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "{'ghi':1,'jkl':2}") != LWS_LECPCTX_RET_FINISHED || ctx.used != sizeof(w4) || memcmp(w4, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; lwsl_user("%s: test5\n", __func__); lws_lec_setbuf(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "123({'ghi':1,'jkl':2})") != LWS_LECPCTX_RET_FINISHED || ctx.used != sizeof(w5) || memcmp(w5, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; lwsl_user("%s: test6\n", __func__); lws_lec_setbuf(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "12({'ghi':1,'jkl':['a', 'b']})") != LWS_LECPCTX_RET_FINISHED || ctx.used != sizeof(w6) || memcmp(w6, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; lwsl_user("%s: test7\n", __func__); lws_lec_setbuf(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "%d", -1) != LWS_LECPCTX_RET_FINISHED || ctx.used != sizeof(w7) || memcmp(w7, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; lwsl_user("%s: test8\n", __func__); lws_lec_setbuf(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "%ld", -1l) != LWS_LECPCTX_RET_FINISHED || ctx.used != sizeof(w7) || memcmp(w7, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; lwsl_user("%s: test9\n", __func__); lws_lec_setbuf(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "%lld", -1ll) != LWS_LECPCTX_RET_FINISHED || ctx.used != sizeof(w7) || memcmp(w7, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; lwsl_user("%s: test10\n", __func__); lws_lec_setbuf(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "%u", 12) != LWS_LECPCTX_RET_FINISHED || ctx.used != sizeof(w8) || memcmp(w8, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; lwsl_user("%s: test11\n", __func__); lws_lec_setbuf(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "%ld", 12l) != LWS_LECPCTX_RET_FINISHED || ctx.used != sizeof(w8) || memcmp(w8, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; lwsl_user("%s: test12\n", __func__); lws_lec_setbuf(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "%lld", 12ll) != LWS_LECPCTX_RET_FINISHED || ctx.used != sizeof(w8) || memcmp(w8, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; lwsl_user("%s: test13\n", __func__); lws_lec_setbuf(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "%u", 0x34u) != LWS_LECPCTX_RET_FINISHED || ctx.used != sizeof(w13) || memcmp(w13, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; lwsl_user("%s: test14\n", __func__); lws_lec_setbuf(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "%ld", 0x1234ul) != LWS_LECPCTX_RET_FINISHED || ctx.used != sizeof(w14) || memcmp(w14, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; lwsl_user("%s: test15\n", __func__); lws_lec_setbuf(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "%lld", 0x12345678ull) != LWS_LECPCTX_RET_FINISHED || ctx.used != sizeof(w15) || memcmp(w15, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; lwsl_user("%s: test16\n", __func__); lws_lec_setbuf(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "%lld", 0x123456789abcdef0ull) != LWS_LECPCTX_RET_FINISHED || ctx.used != sizeof(w16) || memcmp(w16, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; lwsl_user("%s: test17\n", __func__); lws_lec_setbuf(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "%s", "hello") != LWS_LECPCTX_RET_FINISHED || ctx.used != sizeof(w17) || memcmp(w17, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; lwsl_user("%s: test18\n", __func__); lws_lec_setbuf(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "-6") != LWS_LECPCTX_RET_FINISHED || ctx.used != sizeof(w18) || memcmp(w18, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; /* * A big binary blob is going to get emitted in 3 output * buffers, by calling it two more times while still handling * the same format object, format objects before that which * were completed are skipped on the subsequent calls */ lwsl_user("%s: test19\n", __func__); lws_lec_setbuf(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "123(%.*b)", (int)sizeof(test106), test106) != LWS_LECPCTX_RET_AGAIN || ctx.used != sizeof(w19) || memcmp(w19, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; lwsl_user("%s: test20\n", __func__); lws_lec_setbuf(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "123(%.*b)", (int)sizeof(test106), test106) != LWS_LECPCTX_RET_AGAIN || ctx.used != sizeof(w19a) || memcmp(w19a, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; lwsl_user("%s: test21\n", __func__); lws_lec_setbuf(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "123(%.*b)", (int)sizeof(test106), test106) != LWS_LECPCTX_RET_FINISHED || ctx.used != sizeof(w19b) || memcmp(w19b, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; lwsl_user("%s: test22\n", __func__); lws_lec_setbuf(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "%t(456)", 123) != LWS_LECPCTX_RET_FINISHED || ctx.used != sizeof(w22) || memcmp(w22, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; lwsl_user("%s: test23\n", __func__); lws_lec_setbuf(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "%lt(456)", 123ul) != LWS_LECPCTX_RET_FINISHED || ctx.used != sizeof(w22) || memcmp(w22, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; lwsl_user("%s: test24\n", __func__); lws_lec_setbuf(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "%llt(456)", 0x123456789abcedf0ull) != LWS_LECPCTX_RET_FINISHED || ctx.used != sizeof(w24) || memcmp(w24, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; lwsl_user("%s: test25\n", __func__); lws_lec_setbuf(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "%f", 1.0) != LWS_LECPCTX_RET_FINISHED || ctx.used != sizeof(w25) || memcmp(w25, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; lwsl_user("%s: test26\n", __func__); lws_lec_setbuf(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "%f", 1.5) != LWS_LECPCTX_RET_FINISHED || ctx.used != sizeof(w26) || memcmp(w26, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; lwsl_user("%s: test27\n", __func__); lws_lec_setbuf(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "%f", 1.123) != LWS_LECPCTX_RET_FINISHED || ctx.used != sizeof(w27) || memcmp(w27, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; { int args[3] = { 1, 2, 3 }; lwsl_user("%s: test28\n", __func__); lws_lec_setbuf(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "{'a':%d,'b':[%d,%d]}", args[0], args[1], args[2]) != LWS_LECPCTX_RET_FINISHED || ctx.used != sizeof(w28) || memcmp(w28, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; } lwsl_user("%s: test29\n", __func__); lws_lec_setbuf(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "") != LWS_LECPCTX_RET_FINISHED || ctx.used != sizeof(w29) || memcmp(w29, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; lwsl_user("%s: test30\n", __func__); lws_lec_setbuf(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "{'ghi':123,'jkl':2}") != LWS_LECPCTX_RET_FINISHED || ctx.used != sizeof(w30) || memcmp(w30, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; lwsl_user("%s: test31\n", __func__); lws_lec_setbuf(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "[129,1024]") != LWS_LECPCTX_RET_FINISHED || ctx.used != sizeof(w31) || memcmp(w31, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; lwsl_user("%s: test32\n", __func__); lws_lec_setbuf(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "{'ghi':-123,'jkl':2}") != LWS_LECPCTX_RET_FINISHED || ctx.used != sizeof(w32) || memcmp(w32, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; lwsl_user("%s: test33\n", __func__); lws_lec_setbuf(&ctx, buf, sizeof(buf)); if (lws_lec_printf(&ctx, "[-129,-1024]") != LWS_LECPCTX_RET_FINISHED || ctx.used != sizeof(w33) || memcmp(w33, buf, ctx.used)) { lwsl_hexdump_notice(ctx.start, ctx.used); e++; } else pass++; } if (e) goto bail; if (pass != expected) goto bail; lwsl_user("Completed: PASS %d / %d\n", pass, expected); return 0; bail: lwsl_user("Completed: FAIL, passed %d / %d (e %d)\n", pass, expected, e); return 1; } libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lejp/000077500000000000000000000000001476025525100242235ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lejp/CMakeLists.txt000066400000000000000000000012411476025525100267610ustar00rootroot00000000000000project(lws-api-test-lejp C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(requirements 1) require_lws_config(LWS_WITH_LEJP 1 requirements) if (requirements) add_executable(${PROJECT_NAME} main.c) add_test(NAME api-test-lejp COMMAND lws-api-test-lejp) if (websockets_shared) target_link_libraries(${PROJECT_NAME} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${PROJECT_NAME} websockets_shared) else() target_link_libraries(${PROJECT_NAME} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lejp/main.c000066400000000000000000000146571476025525100253300ustar00rootroot00000000000000/* * lws-api-test-lejp * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * sanity tests for lejp */ #include /* * in this example, the JSON is for one "builder" object, which may specify * a child list "targets" of zero or more "target" objects. */ static const char * const json_tests[] = { "{" /* test 1 */ "\"schema\":\"com-warmcat-sai-builder\"," "\"hostname\":\"learn\"," "\"nspawn_timeout\":1800," "\"targets\":[" "{" "\"name\":\"target1\"," "\"someflag\":true" "}," "{" "\"name\":\"target2\"," "\"someflag\":false" "}" "]" "}", "{" /* test 2 */ "\"schema\":\"com-warmcat-sai-builder\"," "\"hostname\":\"learn\"," "\"targets\":[" "{" "\"name\":\"target1\"" "}," "{" "\"name\":\"target2\"" "}," "{" "\"name\":\"target3\"" "}" "]" "}", "{" /* test 3 */ "\"schema\":\"com-warmcat-sai-builder\"," "\"hostname\":\"learn\"," "\"nspawn_timeout\":1800," "\"targets\":[" "{" "\"name\":\"target1\"," "\"unrecognized\":\"xyz\"," "\"child\": {" "\"somename\": \"abc\"," "\"junk\": { \"x\": \"y\" }" "}" "}," "{" "\"name\":\"target2\"" "}" "]" "}", "{" /* test 4 */ "\"schema\":\"com-warmcat-sai-builder\"," "\"hostname\":\"learn\"," "\"nspawn_timeout\":1800" "}", "{" /* test 5 */ "\"schema\":\"com-warmcat-sai-builder\"" "}", "{" /* test 6 ... check huge strings into smaller fixed char array */ "\"schema\":\"com-warmcat-sai-builder\"," "\"hostname\":\"" "PYvtan6kqppjnS0KpYTCaiOLsJkc7XecAr1kcE0aCIciewYB+JcLG82mO1Vb1mJtjDwUjBxy2I6A" "zefzoWUWmqZbsv4MXR55j9bKlyz1liiSX63iO0x6JAwACMtE2MkgcLwR86TSWAD9D1QKIWqg5RJ/" "CRuVsW0DKAUMD52ql4JmPFuJpJgTq28z6PhYNzN3yI3bmQt6bzhA+A/xAsFzSBnb3MHYWzGMprr5" "3FAP1ISo5Ec9i+2ehV40sG6Q470sH3PGQZ0YRPO7Sh/SyrSQ/scONmxRc3AcXl7X/CSs417ii+CV" "8sq3ZgcxKNB7tNfN7idNx3upZ00G2BZy9jSy03cLKKLNaNUt0TQsxXbH55uDHzSEeZWvxJgT6zB1" "NoMhdC02w+oXim94M6z6COCnqT3rgkGk8PHMry9Bkh4yVpRmzIRfMmln/lEhdZgxky2+g5hhlSIG" "JYDCrdynD9kCfvfy6KGOpNIi1X+mhbbWn4lnL9ZKihL/RrfOV+oV4R26IDq+KqUiJBENeo8/GXkG" "LUH/87iPyzXKEMavr6fkrK0vTGto8yEYxmOyaVz8phG5rwf4jJgmYNoMbGo8gWvhqO7UAGy2g7MW" "v+B/t1eZZ+1euLsNrWAsFJiFbQKgdFfQT3RjB14iU8knlQ8usoy+pXssY2ddGJGVcGC21oZvstK9" "eu1eRZftda/wP+N5unT1Hw7kCoVzqxHieiYt47EGIOaaQ7XjZDK6qPN6O/grHnvJZm2vBkxuXgsY" "VkRQ7AuTWIecphqFsq7Wbc1YNbMW47SVU5zMD0WaCqbaaI0t4uIzRvPlD8cpiiTzFTrEHlIBTf8/" "uZjjEGGLhJR1jPqA9D1Ej3ChV+ye6F9JTUMlozRMsGuF8U4btDzH5xdnmvRS4Ar6LKEtAXGkj2yu" "yJln+v4RIWj2xOGPJovOqiXwi0FyM61f8U8gj0OiNA2/QlvrqQVDF7sMXgjvaE7iQt5vMETteZlx" "+z3f+jTFM/aon511W4+ZkRD+6AHwucvM9BEC\"" "}", "{" /* test 7 ... check huge strings into char * */ "\"schema\":\"com-warmcat-sai-builder\"," "\"targets\":[" "{" "\"name\":\"" "PYvtan6kqppjnS0KpYTCaiOLsJkc7XecAr1kcE0aCIciewYB+JcLG82mO1Vb1mJtjDwUjBxy2I6A" "zefzoWUWmqZbsv4MXR55j9bKlyz1liiSX63iO0x6JAwACMtE2MkgcLwR86TSWAD9D1QKIWqg5RJ/" "CRuVsW0DKAUMD52ql4JmPFuJpJgTq28z6PhYNzN3yI3bmQt6bzhA+A/xAsFzSBnb3MHYWzGMprr5" "3FAP1ISo5Ec9i+2ehV40sG6Q470sH3PGQZ0YRPO7Sh/SyrSQ/scONmxRc3AcXl7X/CSs417ii+CV" "8sq3ZgcxKNB7tNfN7idNx3upZ00G2BZy9jSy03cLKKLNaNUt0TQsxXbH55uDHzSEeZWvxJgT6zB1" "NoMhdC02w+oXim94M6z6COCnqT3rgkGk8PHMry9Bkh4yVpRmzIRfMmln/lEhdZgxky2+g5hhlSIG" "JYDCrdynD9kCfvfy6KGOpNIi1X+mhbbWn4lnL9ZKihL/RrfOV+oV4R26IDq+KqUiJBENeo8/GXkG" "LUH/87iPyzXKEMavr6fkrK0vTGto8yEYxmOyaVz8phG5rwf4jJgmYNoMbGo8gWvhqO7UAGy2g7MW" "v+B/t1eZZ+1euLsNrWAsFJiFbQKgdFfQT3RjB14iU8knlQ8usoy+pXssY2ddGJGVcGC21oZvstK9" "eu1eRZftda/wP+N5unT1Hw7kCoVzqxHieiYt47EGIOaaQ7XjZDK6qPN6O/grHnvJZm2vBkxuXgsY" "VkRQ7AuTWIecphqFsq7Wbc1YNbMW47SVU5zMD0WaCqbaaI0t4uIzRvPlD8cpiiTzFTrEHlIBTf8/" "uZjjEGGLhJR1jPqA9D1Ej3ChV+ye6F9JTUMlozRMsGuF8U4btDzH5xdnmvRS4Ar6LKEtAXGkj2yu" "yJln+v4RIWj2xOGPJovOqiXwi0FyM61f8U8gj0OiNA2/QlvrqQVDF7sMXgjvaE7iQt5vMETteZlx" "+z3f+jTFM/aon511W4+ZkRD+6AHwucvM9BEC\"}]}" "}", "{" /* test 8 the "other" schema */ "\"schema\":\"com-warmcat-sai-logs\"," "\"task_uuid\":\"97fc90052506af8b3eb43b87aaa6fb76feab32bc128ede479a8a6b961e801f06\"," "\"timestamp\": 170366786103,\"channel\":3, \"len\":20, " "\"log\": \"PnNhaWI+IE5TU1RBVEVfSU5JVAo=\"}\x0a" "ntu-xenial-amd64\"},{\"name\":\"linux-ubuntu-bionic-amd64\"},{\"name\":\"linux-fedora-32-x86_64\"}]}\",", "{" /* test 9, empty object */ "\"a\":123,\"b\":{}" "}", "{" /* SHOULD_FAIL: test 10, missing open */ "\"a\":123,\"b\":}" "}", "{" /* test 13: float vs int */ "\"a\": 1, \"b\": 1.0, \"c\": 1e-3, \"d\": 1e3" "}" }; static const char * const tok[] = { "something", }; static signed char test_cb(struct lejp_ctx *ctx, char reason) { lwsl_info("%s: ctx->path %s, buf %s\n", __func__, ctx->path, ctx->buf); return 0; } /* authz JSON parsing */ int main(int argc, const char **argv) { int n, m, e = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; struct lejp_ctx ctx; const char *p; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS API selftest: lws_struct JSON\n"); for (m = 0; m < (int)LWS_ARRAY_SIZE(json_tests); m++) { lwsl_info("%s: ++++++++++++++++ test %d\n", __func__, m + 1); lejp_construct(&ctx, test_cb, NULL, tok, LWS_ARRAY_SIZE(tok)); lwsl_hexdump_info(json_tests[m], strlen(json_tests[m])); if (m == 7) n = lejp_parse(&ctx, (uint8_t *)json_tests[m], 0xc8); else n = lejp_parse(&ctx, (uint8_t *)json_tests[m], (int)strlen(json_tests[m])); lwsl_info("n = %d\n", n); if (n < 0 && m != 9) { lwsl_err("%s: test %d: JSON decode failed '%s'\n", __func__, m + 1, lejp_error_to_string(n)); e++; } if (n >= 0 && m == 9) { lwsl_err("%s: test %d: JSON decode should have failed '%s'\n", __func__, m + 1, lejp_error_to_string(n)); e++; } } { const char *cs; size_t cslen; cs = lws_json_simple_find("{\"blah\":123,\"ext\":{\"authorized\":1}}", 35, "\"ext\":", &cslen); if (!cs) { lwsl_err("%s: simple_find failed\n", __func__); e++; } else { if (lws_json_simple_strcmp(cs, cslen, "\"authorized\":", "1")) e++; } cs = lws_json_simple_find("{\"blah\":123,\"auth_user\":\"andy@warmcat.com\",\"thing\":\"yeah\"}", 57, "\"auth_user\":", &cslen); if (cslen != 16) { lwsl_err("%s: wrong string len %d isolated\n", __func__, (int)cslen); e++; } } if (e) goto bail; lwsl_user("Completed: PASS\n"); return 0; bail: lwsl_user("Completed: FAIL\n"); return 1; } libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lws_cache/000077500000000000000000000000001476025525100252215ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lws_cache/CMakeLists.txt000066400000000000000000000011331476025525100277570ustar00rootroot00000000000000project(lws-api-test-lws_cache C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-api-test-lws_cache) set(SRCS main.c) add_executable(${SAMP} ${SRCS}) add_test(NAME api-test-lws_cache COMMAND lws-api-test-lws_cache) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lws_cache/README.md000066400000000000000000000005421476025525100265010ustar00rootroot00000000000000# lws api test lwsac Demonstrates how to use and performs selftests for lwsac ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 ``` $ ./lws-api-test-lwsac [2018/10/09 09:14:17:4834] USER: LWS API selftest: lwsac [2018/10/09 09:14:17:4835] USER: Completed: PASS ``` libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lws_cache/main.c000066400000000000000000000267461476025525100263300ustar00rootroot00000000000000/* * lws-api-test-lws_cache * * Written in 2010-2021 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include static struct lws_context *cx; static int tests, fail; static int test_just_l1(void) { struct lws_cache_creation_info ci; struct lws_cache_ttl_lru *l1; int ret = 1; size_t size; char *po; lwsl_user("%s\n", __func__); tests++; /* just create a heap cache "L1" */ memset(&ci, 0, sizeof(ci)); ci.cx = cx; ci.ops = &lws_cache_ops_heap; ci.name = "L1"; l1 = lws_cache_create(&ci); if (!l1) goto cdone; /* add two items, a has 1s expiry and b has 2s */ if (lws_cache_write_through(l1, "a", (const uint8_t *)"is_a", 5, lws_now_usecs() + LWS_US_PER_SEC, NULL)) goto cdone; if (lws_cache_write_through(l1, "b", (const uint8_t *)"is_b", 5, lws_now_usecs() + LWS_US_PER_SEC * 2, NULL)) goto cdone; /* check they exist as intended */ if (lws_cache_item_get(l1, "a", (const void **)&po, &size) || size != 5 || strcmp(po, "is_a")) goto cdone; if (lws_cache_item_get(l1, "b", (const void **)&po, &size) || size != 5 || strcmp(po, "is_b")) goto cdone; /* wait for 1.2s to pass, working the event loop by hand */ lws_cancel_service(cx); if (lws_service(cx, 0) < 0) goto cdone; #if defined(WIN32) Sleep(1200); #else /* netbsd cares about < 1M */ usleep(999999); usleep(200001); #endif lws_cancel_service(cx); if (lws_service(cx, 0) < 0) goto cdone; lws_cancel_service(cx); if (lws_service(cx, 0) < 0) goto cdone; /* a only had 1s lifetime, he should be gone */ if (!lws_cache_item_get(l1, "a", (const void **)&po, &size)) { lwsl_err("%s: cache: a still exists after expiry\n", __func__); fail++; goto cdone; } /* that's ok then */ ret = 0; cdone: lws_cache_destroy(&l1); if (ret) lwsl_warn("%s: fail\n", __func__); return ret; } static int test_just_l1_limits(void) { struct lws_cache_creation_info ci; struct lws_cache_ttl_lru *l1; int ret = 1; size_t size; char *po; lwsl_user("%s\n", __func__); tests++; /* just create a heap cache "L1" */ memset(&ci, 0, sizeof(ci)); ci.cx = cx; ci.ops = &lws_cache_ops_heap; ci.name = "L1_lim"; ci.max_items = 1; /* ie, adding a second item destroys the first */ l1 = lws_cache_create(&ci); if (!l1) goto cdone; /* add two items, a has 1s expiry and b has 2s */ if (lws_cache_write_through(l1, "a", (const uint8_t *)"is_a", 5, lws_now_usecs() + LWS_US_PER_SEC, NULL)) goto cdone; if (lws_cache_write_through(l1, "b", (const uint8_t *)"is_b", 5, lws_now_usecs() + LWS_US_PER_SEC * 2, NULL)) goto cdone; /* only b should exit, since we limit to cache to just one entry */ if (!lws_cache_item_get(l1, "a", (const void **)&po, &size)) goto cdone; if (lws_cache_item_get(l1, "b", (const void **)&po, &size) || size != 5 || strcmp(po, "is_b")) goto cdone; /* that's ok then */ ret = 0; cdone: lws_cache_destroy(&l1); if (ret) lwsl_warn("%s: fail\n", __func__); return ret; } #if defined(LWS_WITH_CACHE_NSCOOKIEJAR) static const char *cookie1 = "host.com\tFALSE\t/\tTRUE\t4000000000\tmycookie\tmycookievalue", *tag_cookie1 = "host.com|/|mycookie", *cookie2 = "host.com\tFALSE\t/xxx\tTRUE\t4000000000\tmycookie\tmyxxxcookievalue", *tag_cookie2 = "host.com|/xxx|mycookie", *cookie3 = "host.com\tFALSE\t/\tTRUE\t4000000000\textra\tcookie3value", *tag_cookie3 = "host.com|/|extra", *cookie4 = "host.com\tFALSE\t/yyy\tTRUE\t4000000000\tnewcookie\tnewcookievalue", *tag_cookie4 = "host.com|/yyy|newcookie" ; static int test_nsc1(void) { struct lws_cache_creation_info ci; struct lws_cache_ttl_lru *l1 = NULL, *nsc; lws_cache_results_t cr; int n, ret = 1; size_t size; char *po; lwsl_user("%s\n", __func__); tests++; /* First create a netscape cookie cache object */ memset(&ci, 0, sizeof(ci)); ci.cx = cx; ci.ops = &lws_cache_ops_nscookiejar; ci.name = "NSC"; ci.u.nscookiejar.filepath = "./cookies.txt"; nsc = lws_cache_create(&ci); if (!nsc) goto cdone; /* Then a heap cache "L1" as a child of nsc */ ci.ops = &lws_cache_ops_heap; ci.name = "L1"; ci.parent = nsc; l1 = lws_cache_create(&ci); if (!l1) goto cdone; lws_cache_debug_dump(nsc); lws_cache_debug_dump(l1); lwsl_user("%s: add cookies to L1\n", __func__); /* add three cookies */ if (lws_cache_write_through(l1, tag_cookie1, (const uint8_t *)cookie1, strlen(cookie1), lws_now_usecs() + LWS_US_PER_SEC, NULL)) { lwsl_err("%s: write1 failed\n", __func__); goto cdone; } lws_cache_debug_dump(nsc); lws_cache_debug_dump(l1); if (lws_cache_write_through(l1, tag_cookie2, (const uint8_t *)cookie2, strlen(cookie2), lws_now_usecs() + LWS_US_PER_SEC * 2, NULL)) { lwsl_err("%s: write2 failed\n", __func__); goto cdone; } lws_cache_debug_dump(nsc); lws_cache_debug_dump(l1); if (lws_cache_write_through(l1, tag_cookie3, (const uint8_t *)cookie3, strlen(cookie3), lws_now_usecs() + LWS_US_PER_SEC * 2, NULL)) { lwsl_err("%s: write3 failed\n", __func__); goto cdone; } lws_cache_debug_dump(nsc); lws_cache_debug_dump(l1); lwsl_user("%s: check cookies in L1\n", __func__); /* confirm that the cookies are individually in L1 */ if (lws_cache_item_get(l1, tag_cookie1, (const void **)&po, &size) || size != strlen(cookie1) || memcmp(po, cookie1, size)) { lwsl_err("%s: L1 '%s' missing, size %llu, po %s\n", __func__, tag_cookie1, (unsigned long long)size, po); goto cdone; } if (lws_cache_item_get(l1, tag_cookie2, (const void **)&po, &size) || size != strlen(cookie2) || memcmp(po, cookie2, size)) { lwsl_err("%s: L1 '%s' missing\n", __func__, tag_cookie2); goto cdone; } if (lws_cache_item_get(l1, tag_cookie3, (const void **)&po, &size) || size != strlen(cookie3) || memcmp(po, cookie3, size)) { lwsl_err("%s: L1 '%s' missing\n", __func__, tag_cookie3); goto cdone; } /* confirm that the cookies are individually in L2 / NSC... normally * we don't do this but check via L1 so we can get it from there if * present. But as a unit test, we want to make sure it's in L2 / NSC */ lwsl_user("%s: check cookies written thru to NSC\n", __func__); if (lws_cache_item_get(nsc, tag_cookie1, (const void **)&po, &size) || size != strlen(cookie1) || memcmp(po, cookie1, size)) { lwsl_err("%s: NSC '%s' missing, size %llu, po %s\n", __func__, tag_cookie1, (unsigned long long)size, po); goto cdone; } if (lws_cache_item_get(nsc, tag_cookie2, (const void **)&po, &size) || size != strlen(cookie2) || memcmp(po, cookie2, size)) { lwsl_err("%s: NSC '%s' missing\n", __func__, tag_cookie2); goto cdone; } if (lws_cache_item_get(nsc, tag_cookie3, (const void **)&po, &size) || size != strlen(cookie3) || memcmp(po, cookie3, size)) { lwsl_err("%s: NSC '%s' missing\n", __func__, tag_cookie3); goto cdone; } /* let's do a lookup with no results */ lwsl_user("%s: nonexistant get must not pass\n", __func__); if (!lws_cache_item_get(l1, "x.com|y|z", (const void **)&po, &size)) { lwsl_err("%s: nonexistant found size %llu, po %s\n", __func__, (unsigned long long)size, po); goto cdone; } /* * let's try some url paths and check we get the right results set... * for / and any cookie, we expect only c1 and c3 to be listed */ lwsl_user("%s: wildcard lookup 1\n", __func__); n = lws_cache_lookup(l1, "host.com|/|*", (const void **)&cr.ptr, &cr.size); if (n) { lwsl_err("%s: lookup failed %d\n", __func__, n); goto cdone; } lwsl_hexdump_notice(cr.ptr, size); if (cr.size != 53) goto cdone; while (!lws_cache_results_walk(&cr)) lwsl_notice(" %s (%d)\n", (const char *)cr.tag, (int)cr.payload_len); /* * for /xxx and any cookie, we expect all 3 listed */ lwsl_user("%s: wildcard lookup 2\n", __func__); n = lws_cache_lookup(l1, "host.com|/xxx|*", (const void **)&cr.ptr, &cr.size); if (n) { lwsl_err("%s: lookup failed %d\n", __func__, n); goto cdone; } if (cr.size != 84) goto cdone; while (!lws_cache_results_walk(&cr)) lwsl_notice(" %s (%d)\n", (const char *)cr.tag, (int)cr.payload_len); /* * for /yyyy and any cookie, we expect only c1 and c3 */ lwsl_user("%s: wildcard lookup 3\n", __func__); n = lws_cache_lookup(l1, "host.com|/yyyy|*", (const void **)&cr.ptr, &cr.size); if (n) { lwsl_err("%s: lookup failed %d\n", __func__, n); goto cdone; } if (cr.size != 53) goto cdone; while (!lws_cache_results_walk(&cr)) lwsl_notice(" %s (%d)\n", (const char *)cr.tag, (int)cr.payload_len); /* * repeat the above test, results should come from cache */ lwsl_user("%s: wildcard lookup 4\n", __func__); n = lws_cache_lookup(l1, "host.com|/yyyy|*", (const void **)&cr.ptr, &cr.size); if (n) { lwsl_err("%s: lookup failed %d\n", __func__, n); goto cdone; } if (cr.size != 53) goto cdone; while (!lws_cache_results_walk(&cr)) lwsl_notice(" %s (%d)\n", (const char *)cr.tag, (int)cr.payload_len); /* now let's try deleting cookie 1 */ if (lws_cache_item_remove(l1, tag_cookie1)) goto cdone; lws_cache_debug_dump(nsc); lws_cache_debug_dump(l1); /* with c1 gone, we should only get c3 */ lwsl_user("%s: wildcard lookup 5\n", __func__); n = lws_cache_lookup(l1, "host.com|/|*", (const void **)&cr.ptr, &cr.size); if (n) { lwsl_err("%s: lookup failed %d\n", __func__, n); goto cdone; } if (cr.size != 25) goto cdone; while (!lws_cache_results_walk(&cr)) lwsl_notice(" %s (%d)\n", (const char *)cr.tag, (int)cr.payload_len); /* * let's add a fourth cookie (third in cache now we deleted one) */ if (lws_cache_write_through(l1, tag_cookie4, (const uint8_t *)cookie4, strlen(cookie4), lws_now_usecs() + LWS_US_PER_SEC * 2, NULL)) { lwsl_err("%s: write4 failed\n", __func__); goto cdone; } /* * for /yy and any cookie, we expect only c3 */ lwsl_user("%s: wildcard lookup 6\n", __func__); n = lws_cache_lookup(l1, "host.com|/yy|*", (const void **)&cr.ptr, &cr.size); if (n) { lwsl_err("%s: lookup failed %d\n", __func__, n); goto cdone; } if (cr.size != 25) goto cdone; while (!lws_cache_results_walk(&cr)) lwsl_notice(" %s (%d)\n", (const char *)cr.tag, (int)cr.payload_len); /* * for /yyy and any cookie, we expect c3 and c4 */ lwsl_user("%s: wildcard lookup 7\n", __func__); n = lws_cache_lookup(l1, "host.com|/yyy|*", (const void **)&cr.ptr, &cr.size); if (n) { lwsl_err("%s: lookup failed %d\n", __func__, n); goto cdone; } if (cr.size != 57) goto cdone; while (!lws_cache_results_walk(&cr)) lwsl_notice(" %s (%d)\n", (const char *)cr.tag, (int)cr.payload_len); /* that's ok then */ lwsl_user("%s: done\n", __func__); ret = 0; cdone: lws_cache_destroy(&nsc); lws_cache_destroy(&l1); if (ret) lwsl_warn("%s: fail\n", __func__); return ret; } #endif int main(int argc, const char **argv) { struct lws_context_creation_info info; memset(&info, 0, sizeof info); lws_cmdline_option_handle_builtin(argc, argv, &info); info.fd_limit_per_thread = 1 + 6 + 1; info.port = CONTEXT_PORT_NO_LISTEN; lwsl_user("LWS API selftest: lws_cache\n"); cx = lws_create_context(&info); if (!cx) { lwsl_err("lws init failed\n"); return 1; } if (test_just_l1()) fail++; if (test_just_l1_limits()) fail++; #if defined(LWS_WITH_CACHE_NSCOOKIEJAR) if (test_nsc1()) fail++; #endif lws_context_destroy(cx); if (tests && !fail) lwsl_user("Completed: PASS\n"); else lwsl_err("Completed: FAIL %d / %d\n", fail, tests); return 0; } libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lws_cache/text1.txt000066400000000000000000000001701476025525100270250ustar00rootroot00000000000000# Netscape HTTP Cookie File host.com FALSE / FALSE 1234 mycookie value host.com FALSE /xxx FALSE 1234 mycookie valuexxx libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lws_dsh/000077500000000000000000000000001476025525100247345ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lws_dsh/CMakeLists.txt000066400000000000000000000013631476025525100274770ustar00rootroot00000000000000project(lws-api-test-lws_dsh C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-api-test-lws_dsh) set(SRCS main.c) set(requirements 1) require_lws_config(LWS_WITH_NETWORK 1 requirements) require_lws_config(LWS_WITH_LWS_DSH 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) add_test(NAME api-test-lws_dsh COMMAND lws-api-test-lws_dsh) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lws_dsh/README.md000066400000000000000000000005521476025525100262150ustar00rootroot00000000000000# lws api test lws_dsh Demonstrates how to use and performs selftests for lws_dsh ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 ``` $ ./lws-api-test-lws_dsh [2018/10/09 09:14:17:4834] USER: LWS API selftest: lws_dsh [2018/10/09 09:14:17:4835] USER: Completed: PASS ``` libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lws_dsh/main.c000066400000000000000000000153611476025525100260320ustar00rootroot00000000000000/* * lws-api-test-lws_dsh * * Written in 2010-2021 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include int test1(void) { struct lws_dsh *dsh; size_t size; void *a1; /* * test 1: single dsh, alloc 2 kinds and free everything back to a * single free obj */ dsh = lws_dsh_create(NULL, 16384, 2); if (!dsh) { lwsl_err("%s: Failed to create dsh\n", __func__); return 1; } if (lws_dsh_alloc_tail(dsh, 0, "hello", 5, NULL, 0)) { lwsl_err("%s: Failed to alloc 1\n", __func__); goto bail; } if (lws_dsh_alloc_tail(dsh, 1, "some other string", 17, NULL, 0)) { lwsl_err("%s: Failed to alloc 2\n", __func__); goto bail; } if (lws_dsh_alloc_tail(dsh, 0, "hello again", 11, NULL, 0)) { lwsl_err("%s: Failed to alloc 3\n", __func__); goto bail; } if (lws_dsh_get_head(dsh, 1, &a1, &size)) { lwsl_err("%s: no head 1\n", __func__); goto bail; } if (size != 17 || memcmp(a1, "some other string", 17)) { lwsl_err("%s: test 1 mismatch\n", __func__); goto bail; } lws_dsh_free(&a1); if (lws_dsh_get_head(dsh, 0, &a1, &size)) { lwsl_err("%s: no head 2\n", __func__); goto bail; } if (size != 5 || memcmp(a1, "hello", 5)) { lwsl_err("%s: test 2 mismatch\n", __func__); goto bail; } lws_dsh_free(&a1); if (lws_dsh_get_head(dsh, 0, &a1, &size)) { lwsl_err("%s: no head 3\n", __func__); goto bail; } if (size != 11 || memcmp(a1, "hello again", 11)) { lwsl_err("%s: test 3 mismatch\n", __func__); goto bail; } lws_dsh_free(&a1); lws_dsh_destroy(&dsh); return 0; bail: lws_dsh_destroy(&dsh); return 1; } int test3(void) { struct lws_dsh *dsh, *dsh2; lws_dll2_owner_t owner; uint8_t blob[4096]; memset(blob, 0, sizeof(blob)); /* * test 3: multiple dsh, umeetable allocation request */ lws_dll2_owner_clear(&owner); dsh = lws_dsh_create(&owner, 4096, 2); if (!dsh) { lwsl_err("%s: Failed to create dsh1\n", __func__); return 1; } dsh2 = lws_dsh_create(&owner, 4096, 2); if (!dsh2) { lwsl_err("%s: Failed to create dsh2\n", __func__); goto bail; } if (lws_dsh_alloc_tail(dsh, 0, blob, 4000, NULL, 0)) { lwsl_err("%s: Failed to alloc 1\n", __func__); goto bail2; } if (lws_dsh_alloc_tail(dsh2, 0, "hello", 5, NULL, 0)) { lwsl_err("%s: Failed to alloc 2\n", __func__); goto bail2; } /* * There's just no room for this, we expect it to fail */ if (!lws_dsh_alloc_tail(dsh, 0, blob, 5000, NULL, 0)) { lwsl_err("%s: Didn't fail to alloc as expected\n", __func__); goto bail2; } if (lws_dsh_alloc_tail(dsh2, 0, "hello again", 11, NULL, 0)) { lwsl_err("%s: Failed to alloc 4\n", __func__); goto bail2; } lws_dsh_destroy(&dsh2); lws_dsh_destroy(&dsh); return 0; bail2: lws_dsh_destroy(&dsh2); bail: lws_dsh_destroy(&dsh); return 1; } int test4(void) { uint8_t blob[4096]; struct lws_dsh *dsh; size_t size; void *a1; memset(blob, 0, sizeof(blob)); /* * test 4: use up whole free list, then recover and alloc something * else */ dsh = lws_dsh_create(NULL, 4096, 2); if (!dsh) { lwsl_err("%s: Failed to create dsh\n", __func__); return 1; } if (lws_dsh_alloc_tail(dsh, 0, blob, 4000, NULL, 0)) { lwsl_err("%s: Failed to alloc 1\n", __func__); goto bail; } if (lws_dsh_get_head(dsh, 0, &a1, &size)) { lwsl_err("%s: no head 1\n", __func__); goto bail; } if (size != 4000) { lwsl_err("%s: test 1 mismatch\n", __func__); goto bail; } lws_dsh_free(&a1); if (lws_dsh_alloc_tail(dsh, 0, "some other string", 17, NULL, 0)) { lwsl_err("%s: Failed to alloc 2\n", __func__); goto bail; } if (lws_dsh_alloc_tail(dsh, 0, "hello again", 11, NULL, 0)) { lwsl_err("%s: Failed to alloc 3\n", __func__); goto bail; } if (lws_dsh_get_head(dsh, 0, &a1, &size)) { lwsl_err("%s: no head 1\n", __func__); goto bail; } if (size != 17 || memcmp(a1, "some other string", 17)) { lwsl_err("%s: test 1 mismatch\n", __func__); goto bail; } lws_dsh_free(&a1); if (lws_dsh_get_head(dsh, 0, &a1, &size)) { lwsl_err("%s: no head 2\n", __func__); goto bail; } if (size != 11 || memcmp(a1, "hello again", 11)) { lwsl_err("%s: test 2 mismatch (%zu)\n", __func__, size); goto bail; } lws_dsh_free(&a1); lws_dsh_destroy(&dsh); return 0; bail: lws_dsh_destroy(&dsh); return 1; } int test5(void) { struct lws_dsh *dsh; unsigned int budget; uint8_t blob[4096]; lws_xos_t xos; size_t size; void *a1; memset(blob, 0, sizeof(blob)); lws_xos_init(&xos, 0x123456789abcdef0ull); budget = (unsigned int)(lws_xos(&xos) % 4000) + 4000; lwsl_notice("%s: budget %u\n", __func__, budget); /* * test 5: PRNG-based spamming and erratic bidi draining */ dsh = lws_dsh_create(NULL, 409600, 2); if (!dsh) { lwsl_err("%s: Failed to create dsh\n", __func__); return 1; } do { if (lws_xos_percent(&xos, 60)) { /* kind 0 is going to try to write */ size = (size_t)((lws_xos(&xos) & 127) + 1); if (!lws_dsh_alloc_tail(dsh, 0, blob, size, NULL, 0)) lwsl_notice("%s: kind 0 alloc %d\n", __func__, (int)size); } if (lws_xos_percent(&xos, 80)) { /* kind 1 is going to try to write */ size = (size_t)((lws_xos(&xos) & 127) + 1); if (!lws_dsh_alloc_tail(dsh, 1, blob, size, NULL, 0)) lwsl_notice("%s: kind 1 alloc %d\n", __func__, (int)size); } if (lws_xos_percent(&xos, 40)) { /* kind 0 is going to try to read */ while (!lws_dsh_get_head(dsh, 0, &a1, &size)) { lwsl_notice("%s: kind 0 read %d\n", __func__, (int)size); lws_dsh_free(&a1); } } if (lws_xos_percent(&xos, 30)) { /* kind 1 is going to try to read */ while (!lws_dsh_get_head(dsh, 1, &a1, &size)) { lwsl_notice("%s: kind 1 read %d\n", __func__, (int)size); lws_dsh_free(&a1); } } } while (budget--); while (!lws_dsh_get_head(dsh, 0, &a1, &size)) { lwsl_notice("%s: kind 0 read %d\n", __func__, (int)size); lws_dsh_free(&a1); } while (!lws_dsh_get_head(dsh, 1, &a1, &size)) { lwsl_notice("%s: kind 1 read %d\n", __func__, (int)size); lws_dsh_free(&a1); } #if defined(_DEBUG) lws_dsh_describe(dsh, "test dsh end state"); #endif lws_dsh_destroy(&dsh); return 0; } int main(int argc, const char **argv) { int logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; int ret = 0, n; const char *p; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS API selftest: lws_dsh\n"); n = test1(); lwsl_user("%s: test1: %d\n", __func__, n); ret |= n; n = test3(); lwsl_user("%s: test3: %d\n", __func__, n); ret |= n; n = test4(); lwsl_user("%s: test4: %d\n", __func__, n); ret |= n; n = test5(); lwsl_user("%s: test5: %d\n", __func__, n); ret |= n; lwsl_user("Completed: %s\n", ret ? "FAIL" : "PASS"); return ret; } libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lws_map/000077500000000000000000000000001476025525100247335ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lws_map/CMakeLists.txt000066400000000000000000000010551476025525100274740ustar00rootroot00000000000000project(lws-api-test-lws_map C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) add_executable(${PROJECT_NAME} main.c) add_test(NAME api-test-lws_map COMMAND lws-api-test-lws_map) if (websockets_shared) target_link_libraries(${PROJECT_NAME} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${PROJECT_NAME} websockets_shared) else() target_link_libraries(${PROJECT_NAME} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lws_map/main.c000066400000000000000000000117121476025525100260250ustar00rootroot00000000000000/* * lws-api-test-lws_map * * Written in 2010-2021 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * unit tests for lws_map */ #include typedef struct lws_map_item lws_map_item_t; /* custom key and comparator for test 3 */ typedef struct mykey { int key; } mykey_t; static int compare_mykey_t(const lws_map_key_t key1, size_t kl1, const lws_map_value_t key2, size_t kl2) { const mykey_t *m1 = (mykey_t *)key1, *m2 = (mykey_t *)key2; return m1->key != m2->key; } int main(int argc, const char **argv) { int e = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE, expected = 4, pass = 0; mykey_t k1 = { .key = 123 }, k2 = { .key = 234 }, k3 = { .key = 999 }; struct lwsac *ac = NULL; lws_map_item_t *item; lws_map_info_t info; lws_map_t *map; const char *p; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS API selftest: lws_map\n"); /* Test 1: string keys */ lwsl_user("%s: test1\n", __func__); memset(&info, 0, sizeof(info)); map = lws_map_create(&info); if (!map) { e++; goto end_t1; } if (!lws_map_item_create_ks(map, "abc", (lws_map_value_t)"def", 3)) { e++; goto end_t1; } if (!lws_map_item_create_ks(map, "123", (lws_map_value_t)"4567", 4)) { e++; goto end_t1; } item = lws_map_item_lookup_ks(map, "abc"); if (!item) { e++; goto end_t1; } if (lws_map_item_value_len(item) != 3 || memcmp(lws_map_item_value(item), "def", 3)) { e++; goto end_t1; } item = lws_map_item_lookup_ks(map, "123"); if (!item) { e++; goto end_t1; } if (lws_map_item_value_len(item) != 4 || memcmp(lws_map_item_value(item), "4567", 4)) { e++; goto end_t1; } item = lws_map_item_lookup_ks(map, "nope"); if (item) { e++; goto end_t1; } pass++; end_t1: lws_map_destroy(&map); /* Test 2: Use lwsac item allocators */ lwsl_user("%s: test2\n", __func__); memset(&info, 0, sizeof(info)); info._alloc = lws_map_alloc_lwsac; info._free = lws_map_free_lwsac; info.opaque = (void *)∾ map = lws_map_create(&info); if (!map) { e++; goto end_t2; } if (!lws_map_item_create_ks(map, "abc", "def", 3)) { e++; goto end_t2; } if (!lws_map_item_create_ks(map, "123", "4567", 4)) { e++; goto end_t2; } item = lws_map_item_lookup_ks(map, "abc"); if (!item) { e++; goto end_t2; } if (lws_map_item_value_len(item) != 3 || memcmp(lws_map_item_value(item), "def", 3)) { e++; goto end_t2; } item = lws_map_item_lookup_ks(map, "123"); if (!item) { e++; goto end_t2; } if (lws_map_item_value_len(item) != 4 || memcmp(lws_map_item_value(item), "4567", 4)) { e++; goto end_t2; } item = lws_map_item_lookup_ks(map, "nope"); if (item) { e++; goto end_t2; } pass++; end_t2: lws_map_destroy(&map); lwsac_free(&ac); /* Test 3: custom key object and comparator */ lwsl_user("%s: test3\n", __func__); memset(&info, 0, sizeof(info)); info._compare = compare_mykey_t; map = lws_map_create(&info); if (!map) { e++; goto end_t3; } if (!lws_map_item_create(map, (lws_map_key_t)&k1, sizeof(k1), (lws_map_value_t)"def", 3)) { lwsl_err("%s: t3; a\n", __func__); e++; goto end_t3; } if (!lws_map_item_create(map, (lws_map_key_t)&k2, sizeof(k2), (lws_map_value_t)"4567", 4)) { lwsl_err("%s: t3; b\n", __func__); e++; goto end_t3; } item = lws_map_item_lookup(map, (lws_map_key_t)&k1, sizeof(k1)); if (!item) { lwsl_err("%s: t3; c\n", __func__); e++; goto end_t3; } if (lws_map_item_value_len(item) != 3 || memcmp(lws_map_item_value(item), "def", 3)) { lwsl_err("%s: t3; d\n", __func__); e++; goto end_t3; } item = lws_map_item_lookup(map, (lws_map_key_t)&k2, sizeof(k2)); if (!item) { lwsl_err("%s: t3; e\n", __func__); e++; goto end_t3; } if (lws_map_item_value_len(item) != 4 || memcmp(lws_map_item_value(item), "4567", 4)) { lwsl_err("%s: t3; f\n", __func__); e++; goto end_t3; } item = lws_map_item_lookup(map, (lws_map_key_t)&k3, sizeof(k3)); if (item) { lwsl_err("%s: t3; g\n", __func__); e++; goto end_t3; } pass++; end_t3: lws_map_destroy(&map); /* Test 4: same key items */ lwsl_user("%s: test4\n", __func__); memset(&info, 0, sizeof(info)); map = lws_map_create(&info); if (!map) { e++; goto end_t4; } if (!lws_map_item_create_ks(map, "abc", (lws_map_value_t)"def", 3)) { e++; goto end_t4; } if (!lws_map_item_create_ks(map, "abc", (lws_map_value_t)"4567", 4)) { e++; goto end_t4; } item = lws_map_item_lookup_ks(map, "abc"); if (!item) { e++; goto end_t4; } if (lws_map_item_value_len(item) != 4 || memcmp(lws_map_item_value(item), "4567", 4)) { e++; goto end_t4; } pass++; end_t4: lws_map_destroy(&map); if (e) goto bail; lwsl_user("Completed: PASS %d / %d\n", pass, expected); return 0; bail: lwsl_user("Completed: FAIL, passed %d / %d (e %d)\n", pass, expected, e); return 1; } libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lws_sequencer/000077500000000000000000000000001476025525100261505ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lws_sequencer/CMakeLists.txt000066400000000000000000000013601476025525100307100ustar00rootroot00000000000000project(lws-api-test-lws_sequencer C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-api-test-lws_sequencer) set(SRCS main.c) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) require_lws_config(LWS_WITH_SEQUENCER 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lws_sequencer/libwebsockets.org.cer000066400000000000000000000036241476025525100322760ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ 0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ 3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lws_sequencer/main.c000066400000000000000000000223661476025525100272510ustar00rootroot00000000000000/* * lws-api-test-lws_sequencer * * Written in 2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This api test uses the lws_sequencer api to make five http client requests * to libwebsockets.org in sequence, from inside the event loop. The fourth * fourth http client request is directed to port 22 where it stalls * triggering the lws_sequencer timeout flow. The fifth is given a nonexistant * dns name and is expected to fail. */ #include #include static int interrupted, test_good = 0; enum { SEQ1, SEQ2, SEQ3_404, SEQ4_TIMEOUT, /* we expect to timeout */ SEQ5_BAD_ADDRESS /* we expect the connection to fail */ }; /* * This is the user defined struct whose space is allocated along with the * sequencer when that is created. * * You'd put everything your sequencer needs to do its job in here. */ struct myseq { struct lws_vhost *vhost; struct lws *cwsi; /* client wsi for current step if any */ int state; /* which test we're on */ int http_resp; }; /* sequencer messages specific to this sequencer */ enum { SEQ_MSG_CLIENT_FAILED = LWSSEQ_USER_BASE, SEQ_MSG_CLIENT_DONE, }; /* this is the sequence of GETs we will do */ static const char *url_paths[] = { "https://libwebsockets.org/index.html", "https://libwebsockets.org/lws.css", "https://libwebsockets.org/404.html", "https://libwebsockets.org:22", /* this causes us to time out */ "https://doesntexist.invalid/" /* fail early in connect */ }; static void sigint_handler(int sig) { interrupted = 1; } /* * This is the sequencer-aware http protocol handler. It monitors the client * http action and queues messages for the sequencer when something definitive * happens. */ static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct myseq *s = (struct myseq *)user; int seq_msg = SEQ_MSG_CLIENT_FAILED; switch (reason) { /* because we are protocols[0] ... */ case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_notice("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); goto notify; case LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: if (!s) return 1; s->http_resp = (int)lws_http_client_http_response(wsi); lwsl_info("Connected with server response: %d\n", s->http_resp); break; /* chunks of chunked content, with header removed */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ: lwsl_info("RECEIVE_CLIENT_HTTP_READ: read %d\n", (int)len); #if 0 /* enable to dump the html */ { const char *p = in; while (len--) if (*p < 0x7f) putchar(*p++); else putchar('.'); } #endif return 0; /* don't passthru */ /* uninterpreted http content */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP: { char buffer[1024 + LWS_PRE]; char *px = buffer + LWS_PRE; int lenx = sizeof(buffer) - LWS_PRE; if (lws_http_client_read(wsi, &px, &lenx) < 0) return -1; } return 0; /* don't passthru */ case LWS_CALLBACK_COMPLETED_CLIENT_HTTP: lwsl_notice("LWS_CALLBACK_COMPLETED_CLIENT_HTTP: wsi %p\n", wsi); if (!s) return 1; /* * We got a definitive transaction completion */ seq_msg = SEQ_MSG_CLIENT_DONE; goto notify; case LWS_CALLBACK_CLOSED_CLIENT_HTTP: lwsl_info("LWS_CALLBACK_CLOSED_CLIENT_HTTP\n"); if (!s) return 1; lwsl_user("%s: wsi %p: seq failed at CLOSED_CLIENT_HTTP\n", __func__, wsi); goto notify; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); notify: /* * We only inform the sequencer of a definitive outcome for our step. * * So once we have informed it, we detach ourselves from the sequencer * and the sequencer from ourselves. Wsi may want to live on but after * we got our result and moved on to the next test or completed, the * sequencer doesn't want to hear from it again. */ if (!s) return 1; lws_set_wsi_user(wsi, NULL); s->cwsi = NULL; lws_seq_queue_event(lws_seq_from_user(s), seq_msg, NULL, NULL); return 0; } static const struct lws_protocols protocols[] = { { "seq-test-http", callback_http, 0, 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; static int sequencer_start_client(struct myseq *s) { struct lws_client_connect_info i; const char *prot, *path1; char uri[128], path[128]; int n; lws_strncpy(uri, url_paths[s->state], sizeof(uri)); memset(&i, 0, sizeof i); i.context = lws_seq_get_context(lws_seq_from_user(s)); if (lws_parse_uri(uri, &prot, &i.address, &i.port, &path1)) { lwsl_err("%s: uri error %s\n", __func__, uri); } if (!strcmp(prot, "https")) i.ssl_connection = LCCSCF_USE_SSL; path[0] = '/'; n = 1; if (path1[0] == '/') n = 0; lws_strncpy(&path[n], path1, sizeof(path) - 1); i.path = path; i.host = i.address; i.origin = i.address; i.method = "GET"; i.vhost = s->vhost; i.userdata = s; i.protocol = protocols[0].name; i.local_protocol_name = protocols[0].name; i.pwsi = &s->cwsi; if (!lws_client_connect_via_info(&i)) { lwsl_notice("%s: connecting to %s://%s:%d%s failed\n", __func__, prot, i.address, i.port, path); /* we couldn't even get started with the client connection */ lws_seq_queue_event(lws_seq_from_user(s), (lws_seq_events_t)SEQ_MSG_CLIENT_FAILED, NULL, NULL); return 1; } lws_seq_timeout_us(lws_seq_from_user(s), 3 * LWS_US_PER_SEC); lwsl_notice("%s: wsi %p: connecting to %s://%s:%d%s\n", __func__, s->cwsi, prot, i.address, i.port, path); return 0; } /* * The sequencer callback handles queued sequencer messages in the order they * were queued. The messages are presented from the event loop thread context * even if they were queued from a different thread. */ static lws_seq_cb_return_t sequencer_cb(struct lws_sequencer *seq, void *user, int event, void *data, void *aux) { struct myseq *s = (struct myseq *)user; switch ((int)event) { case LWSSEQ_CREATED: /* our sequencer just got started */ s->state = SEQ1; /* first thing we'll do is the first url */ goto step; case LWSSEQ_DESTROYED: /* * This sequencer is about to be destroyed. If we have any * other assets in play, detach them from us. */ if (s->cwsi) lws_set_wsi_user(s->cwsi, NULL); interrupted = 1; break; case LWSSEQ_TIMED_OUT: /* current step timed out */ if (s->state == SEQ4_TIMEOUT) { lwsl_user("%s: test %d got expected timeout\n", __func__, s->state); goto done; } lwsl_user("%s: seq timed out at step %d\n", __func__, s->state); return LWSSEQ_RET_DESTROY; case SEQ_MSG_CLIENT_FAILED: if (s->state == SEQ5_BAD_ADDRESS) { /* * in this specific case, we expect to fail */ lwsl_user("%s: test %d failed as expected\n", __func__, s->state); goto done; } lwsl_user("%s: seq failed at step %d\n", __func__, s->state); return LWSSEQ_RET_DESTROY; case SEQ_MSG_CLIENT_DONE: if (s->state >= SEQ4_TIMEOUT) { /* * In these specific cases, done would be a failure, * we expected to timeout or fail */ lwsl_user("%s: seq failed at step %d\n", __func__, s->state); return LWSSEQ_RET_DESTROY; } lwsl_user("%s: seq done step %d (resp %d)\n", __func__, s->state, s->http_resp); done: lws_seq_timeout_us(lws_seq_from_user(s), LWSSEQTO_NONE); s->state++; if (s->state == LWS_ARRAY_SIZE(url_paths)) { /* the sequence has completed */ lwsl_user("%s: sequence completed OK\n", __func__); test_good = 1; return LWSSEQ_RET_DESTROY; } step: sequencer_start_client(s); break; default: break; } return LWSSEQ_RET_CONTINUE; } int main(int argc, const char **argv) { int n = 1, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; struct lws_context_creation_info info; struct lws_context *context; struct lws_sequencer *seq; struct lws_vhost *vh; lws_seq_info_t i; struct myseq *s; const char *p; /* the normal lws init */ signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS API selftest: lws_sequencer\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = CONTEXT_PORT_NO_LISTEN; info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_EXPLICIT_VHOSTS; info.protocols = protocols; #if defined(LWS_WITH_MBEDTLS) || defined(USE_WOLFSSL) /* * OpenSSL uses the system trust store. mbedTLS has to be told which * CA to trust explicitly. */ info.client_ssl_ca_filepath = "./libwebsockets.org.cer"; #endif context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } vh = lws_create_vhost(context, &info); if (!vh) { lwsl_err("Failed to create first vhost\n"); goto bail1; } /* * Create the sequencer... when the event loop starts, it will * receive the LWSSEQ_CREATED callback */ memset(&i, 0, sizeof(i)); i.context = context; i.user_size = sizeof(struct myseq); i.puser = (void **)&s; i.cb = sequencer_cb; i.name = "seq"; seq = lws_seq_create(&i); if (!seq) { lwsl_err("%s: unable to create sequencer\n", __func__); goto bail1; } s->vhost = vh; /* the usual lws event loop */ while (n >= 0 && !interrupted) n = lws_service(context, 0); bail1: lwsl_user("Completed: %s\n", !test_good ? "FAIL" : "PASS"); lws_context_destroy(context); return !test_good; } libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lws_smd/000077500000000000000000000000001476025525100247415ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lws_smd/CMakeLists.txt000066400000000000000000000017461476025525100275110ustar00rootroot00000000000000project(lws-api-test-lws_smd C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(requirements 1) require_pthreads(requirements) require_lws_config(LWS_WITH_SYS_SMD 1 requirements) require_lws_config(LWS_WITH_SYS_STATE 1 requirements) if (requirements) add_executable(${PROJECT_NAME} main.c) add_test(NAME api-test-lws_smd COMMAND lws-api-test-lws_smd -d1151) set_tests_properties(api-test-lws_smd PROPERTIES RUN_SERIAL TRUE WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/api-tests/api-test-lws_smd TIMEOUT 60) if (websockets_shared) target_link_libraries(${PROJECT_NAME} websockets_shared ${PTHREAD_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${PROJECT_NAME} websockets_shared) else() target_link_libraries(${PROJECT_NAME} websockets ${PTHREAD_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lws_smd/main.c000066400000000000000000000167361476025525100260460ustar00rootroot00000000000000/* * lws-api-test-lws_smd * * Written in 2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This api test confirms lws_smd System Message Distribution */ #include #define HAVE_STRUCT_TIMESPEC #include #include static int interrupted, ok, fail, _exp = 111; static unsigned int how_many_msg = 100, usec_interval = 1000; static lws_sorted_usec_list_t sul, sul_initial_drain; struct lws_context *context; static pthread_t thread_spam; static void timeout_cb(lws_sorted_usec_list_t *sul) { /* We should have completed the test before this fires */ lwsl_notice("%s: test period finished\n", __func__); interrupted = 1; lws_cancel_service(context); } static int smd_cb1int(void *opaque, lws_smd_class_t _class, lws_usec_t timestamp, void *buf, size_t len) { #if 0 lwsl_notice("%s: ts %llu, len %d\n", __func__, (unsigned long long)timestamp, (int)len); lwsl_hexdump_notice(buf, len); #endif ok++; return 0; } static int smd_cb2int(void *opaque, lws_smd_class_t _class, lws_usec_t timestamp, void *buf, size_t len) { #if 0 lwsl_notice("%s: ts %llu, len %d\n", __func__, (unsigned long long)timestamp, (int)len); lwsl_hexdump_notice(buf, len); #endif ok++; return 0; } /* * This is used in an smd participant that is deregistered before the message * can be delivered, it should never see any message */ static int smd_cb3int(void *opaque, lws_smd_class_t _class, lws_usec_t timestamp, void *buf, size_t len) { lwsl_err("%s: Countermanded ts %llu, len %d\n", __func__, (unsigned long long)timestamp, (int)len); lwsl_hexdump_err(buf, len); fail++; return 0; } static void * _thread_spam(void *d) { #if defined(WIN32) unsigned int mypid = 0; #else unsigned int mypid = (unsigned int)getpid(); #endif unsigned int n = 0, atm = 0; while (n++ < how_many_msg) { atm++; if (lws_smd_msg_printf(context, LWSSMDCL_SYSTEM_STATE, "{\"s\":\"state\"," "\"pid\":%u," "\"msg\":%d}", mypid, (unsigned int)n)) { lwsl_err("%s: send attempt %d failed\n", __func__, atm); n--; fail++; if (fail >= 3) { interrupted = 1; lws_cancel_service(context); break; } } #if defined(WIN32) Sleep(3); #else usleep(usec_interval); #endif } #if !defined(WIN32) pthread_exit(NULL); #endif return NULL; } void sigint_handler(int sig) { interrupted = 1; } static void drained_cb(lws_sorted_usec_list_t *sul) { /* * spawn the test thread, it's going to spam 100 messages at 3ms * intervals... check we got everything */ if (pthread_create(&thread_spam, NULL, _thread_spam, NULL)) lwsl_err("%s: failed to create the spamming thread\n", __func__); } static int system_notify_cb(lws_state_manager_t *mgr, lws_state_notify_link_t *link, int current, int target) { // struct lws_context *context = mgr->parent; int n; if (current != LWS_SYSTATE_OPERATIONAL || target != LWS_SYSTATE_OPERATIONAL) return 0; /* * Overflow the message queue too see if it handles it well, both * as overflowing and in recovery. These are all still going into the * smd buffer dll2, since we don't break for the event loop to have a * chance to deliver them. */ n = 0; while (n++ < 100) if (lws_smd_msg_printf(context, LWSSMDCL_SYSTEM_STATE, "{\"s\":\"state\",\"test\":\"overflow\"}")) break; lwsl_notice("%s: overflow test added %d messages\n", __func__, n); if (n == 100) { lwsl_err("%s: didn't overflow\n", __func__); interrupted = 1; return 1; } /* * So we have some normal messages from earlier and now the rest of the * smd buffer filled with junk overflow messages. Before we start the * actual spamming test from another thread, we need to return to the * event loop so these can be cleared first. */ lws_sul_schedule(context, 0, &sul_initial_drain, drained_cb, 5 * LWS_US_PER_MS); lwsl_info("%s: operational\n", __func__); return 0; } int main(int argc, const char **argv) { lws_state_notify_link_t notifier = { { NULL, NULL, NULL }, system_notify_cb, "app" }; lws_state_notify_link_t *na[] = { ¬ifier, NULL }; int logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; struct lws_context_creation_info info; struct lws_smd_peer *userreg; const char *p; void *retval; /* the normal lws init */ signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); if ((p = lws_cmdline_option(argc, argv, "--count"))) how_many_msg = (unsigned int)atol(p); if ((p = lws_cmdline_option(argc, argv, "--interval"))) usec_interval = (unsigned int)atol(p); lws_set_log_level(logs, NULL); lwsl_user("LWS API selftest: lws_smd: %u msgs at %uus interval\n", how_many_msg, usec_interval); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = CONTEXT_PORT_NO_LISTEN; info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.register_notifier_list = na; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } /* game over after this long */ lws_sul_schedule(context, 0, &sul, timeout_cb, (how_many_msg * (usec_interval + 1000)) + (4 * LWS_US_PER_SEC)); /* register a messaging participant to hear INTERACTION class */ if (!lws_smd_register(context, NULL, 0, LWSSMDCL_INTERACTION, smd_cb1int)) { lwsl_err("%s: smd register 1 failed\n", __func__); goto bail; } /* register a messaging participant to hear SYSTEM_STATE class */ if (!lws_smd_register(context, NULL, 0, LWSSMDCL_SYSTEM_STATE, smd_cb2int)) { lwsl_err("%s: smd register 2 failed\n", __func__); goto bail; } /* temporarily register a messaging participant to hear a user class */ userreg = lws_smd_register(context, NULL, 0, 1 << LWSSMDCL_USER_BASE_BITNUM, smd_cb3int); if (!userreg) { lwsl_err("%s: smd register userclass failed\n", __func__); goto bail; } /* * The event loop isn't started yet, so these smd messages are getting * buffered. Later we will deliberately overrun the buffer and wait * for that to be cleared before the spam thread test. */ /* generate an INTERACTION class message */ if (lws_smd_msg_printf(context, LWSSMDCL_INTERACTION, "{\"s\":\"interaction\"}")) { lwsl_err("%s: problem sending smd\n", __func__); goto bail; } /* generate a SYSTEM_STATE class message */ if (lws_smd_msg_printf(context, LWSSMDCL_SYSTEM_STATE, "{\"s\":\"state\"}")) { lwsl_err("%s: problem sending smd\n", __func__); goto bail; } /* no participant listens for this class, so it should be skipped */ if (lws_smd_msg_printf(context, LWSSMDCL_NETWORK, "{\"s\":\"network\"}")) { lwsl_err("%s: problem sending smd\n", __func__); goto bail; } /* generate a user class message... */ if (lws_smd_msg_printf(context, 1 << LWSSMDCL_USER_BASE_BITNUM, "{\"s\":\"userclass\"}")) { lwsl_err("%s: problem sending smd\n", __func__); goto bail; } /* * ... and screw that user class message up by deregistering the only * handler before it can deliver it... it should not get delivered * and cleanly discarded */ lws_smd_unregister(userreg); /* the usual lws event loop */ while (!interrupted && lws_service(context, 0) >= 0) ; pthread_join(thread_spam, &retval); bail: lws_context_destroy(context); if (fail || ok >= _exp) lwsl_user("Completed: PASS: %d / %d, FAIL: %d\n", ok, _exp, fail); else lwsl_user("Completed: ALL PASS: %d / %d\n", ok, _exp); return !(ok >= _exp && !fail); } libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lws_struct-json/000077500000000000000000000000001476025525100264515ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lws_struct-json/CMakeLists.txt000066400000000000000000000013531476025525100312130ustar00rootroot00000000000000project(lws-api-test-lws_struct-json C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-api-test-lws_struct-json) set(SRCS main.c test2.c) set(requirements 1) require_lws_config(LWS_WITH_STRUCT_JSON 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) add_test(NAME api-test-lws_struct-json COMMAND lws-api-test-lws_struct-json) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lws_struct-json/README.md000066400000000000000000000223151476025525100277330ustar00rootroot00000000000000# lws api test lws_struct JSON Demonstrates how to use and performs selftests for lws_struct JSON serialization and deserialization ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 ``` $ ./lws-api-test-lws_struct-json [2020/05/21 16:36:57:0808] U: LWS API selftest: lws_struct JSON [2020/05/21 16:36:57:1188] N: main: ++++++++++++++++ test 1 [2020/05/21 16:36:57:1291] N: lws_struct_schema_only_lejp_cb: child map ofs_clist 0 [2020/05/21 16:36:57:1387] N: lws_struct_default_lejp_cb: created 'targets' object size 48 [2020/05/21 16:36:57:1429] N: lws_struct_default_lejp_cb: created 'targets' object size 48 [2020/05/21 16:36:57:1467] N: builder.hostname = 'learn', timeout = 1800, targets (2) [2020/05/21 16:36:57:1490] N: target.name 'target1' (target 0x509fe30) [2020/05/21 16:36:57:1495] N: target.name 'target2' (target 0x509fe68) [2020/05/21 16:36:57:1500] N: main: .... strarting serialization of test 1 {"schema":"com-warmcat-sai-builder","hostname":"learn","nspawn_timeout":1800,"targets":[{"name":"target1","someflag":true},{"name":"target2","someflag":false}]} [2020/05/21 16:36:57:1648] N: main: ++++++++++++++++ test 2 [2020/05/21 16:36:57:1649] N: lws_struct_schema_only_lejp_cb: child map ofs_clist 0 [2020/05/21 16:36:57:1650] N: lws_struct_default_lejp_cb: created 'targets' object size 48 [2020/05/21 16:36:57:1651] N: lws_struct_default_lejp_cb: created 'targets' object size 48 [2020/05/21 16:36:57:1652] N: lws_struct_default_lejp_cb: created 'targets' object size 48 [2020/05/21 16:36:57:1653] N: builder.hostname = 'learn', timeout = 0, targets (3) [2020/05/21 16:36:57:1653] N: target.name 'target1' (target 0x50a0660) [2020/05/21 16:36:57:1654] N: target.name 'target2' (target 0x50a0698) [2020/05/21 16:36:57:1655] N: target.name 'target3' (target 0x50a06d0) [2020/05/21 16:36:57:1655] N: main: .... strarting serialization of test 2 {"schema":"com-warmcat-sai-builder","hostname":"learn","nspawn_timeout":0,"targets":[{"name":"target1","someflag":false},{"name":"target2","someflag":false},{"name":"target3","someflag":false}]} [2020/05/21 16:36:57:1662] N: main: ++++++++++++++++ test 3 [2020/05/21 16:36:57:1663] N: lws_struct_schema_only_lejp_cb: child map ofs_clist 0 [2020/05/21 16:36:57:1664] N: lws_struct_default_lejp_cb: created 'targets' object size 48 [2020/05/21 16:36:57:1671] N: lws_struct_default_lejp_cb: created 'child' object size 8 [2020/05/21 16:36:57:1685] N: lws_struct_default_lejp_cb: created 'targets' object size 48 [2020/05/21 16:36:57:1685] N: builder.hostname = 'learn', timeout = 1800, targets (2) [2020/05/21 16:36:57:1686] N: target.name 'target1' (target 0x50a0a50) [2020/05/21 16:36:57:1687] N: child 0x50a0a88, target.child.somename 'abc' [2020/05/21 16:36:57:1688] N: target.name 'target2' (target 0x50a0a98) [2020/05/21 16:36:57:1688] N: main: .... strarting serialization of test 3 {"schema":"com-warmcat-sai-builder","hostname":"learn","nspawn_timeout":1800,"targets":[{"name":"target1","someflag":false,"child":{"somename":"abc"}},{"name":"target2","someflag":false}]} [2020/05/21 16:36:57:1697] N: main: ++++++++++++++++ test 4 [2020/05/21 16:36:57:1698] N: lws_struct_schema_only_lejp_cb: child map ofs_clist 0 [2020/05/21 16:36:57:1699] N: builder.hostname = 'learn', timeout = 1800, targets (0) [2020/05/21 16:36:57:1699] N: main: .... strarting serialization of test 4 {"schema":"com-warmcat-sai-builder","hostname":"learn","nspawn_timeout":1800} [2020/05/21 16:36:57:1701] N: main: ++++++++++++++++ test 5 [2020/05/21 16:36:57:1702] N: lws_struct_schema_only_lejp_cb: child map ofs_clist 0 [2020/05/21 16:36:57:1707] N: builder.hostname = '', timeout = 0, targets (0) [2020/05/21 16:36:57:1708] N: main: .... strarting serialization of test 5 {"schema":"com-warmcat-sai-builder","hostname":"","nspawn_timeout":0} [2020/05/21 16:36:57:1709] N: main: ++++++++++++++++ test 6 [2020/05/21 16:36:57:1710] N: lws_struct_schema_only_lejp_cb: child map ofs_clist 0 [2020/05/21 16:36:57:1730] N: builder.hostname = 'PYvtan6kqppjnS0KpYTCaiOLsJkc7Xe', timeout = 0, targets (0) [2020/05/21 16:36:57:1731] N: main: .... strarting serialization of test 6 {"schema":"com-warmcat-sai-builder","hostname":"PYvtan6kqppjnS0KpYTCaiOLsJkc7Xe","nspawn_timeout":0} [2020/05/21 16:36:57:1732] N: main: ++++++++++++++++ test 7 [2020/05/21 16:36:57:1732] N: lws_struct_schema_only_lejp_cb: child map ofs_clist 0 [2020/05/21 16:36:57:1733] N: lws_struct_default_lejp_cb: created 'targets' object size 48 [2020/05/21 16:36:57:1739] N: builder.hostname = '', timeout = 0, targets (1) [2020/05/21 16:36:57:1751] N: target.name 'PYvtan6kqppjnS0KpYTCaiOLsJkc7XecAr1kcE0aCIciewYB+JcLG82mO1Vb1mJtjDwUjBxy2I6AzefzoWUWmqZbsv4MXR55j9bKlyz1liiSX63iO0x6JAwACMtE2MkgcLwR86TSWAD9D1QKIWqg5RJ/CRuVsW0DKAUMD52ql4JmPFuJpJgTq28z6PhYNzN3yI3bmQt6bzhA+A/xAsFzSBnb3MHYWzGMprr53FAP1ISo5Ec9i+2ehV40sG6Q470sH3PGQZ0YRPO7Sh/SyrSQ/scONmxRc3AcXl7X/CSs417ii+CV8sq3ZgcxKNB7tNfN7idNx3upZ00G2BZy9jSy03cLKKLNaNUt0TQsxXbH55uDHzSEeZWvxJgT6zB1NoMhdC02w+oXim94M6z6COCnqT3rgkGk8PHMry9Bkh4yVpRmzIRfMmln/lEhdZgxky2+g5hhlSIGJYDCrdynD9kCfvfy6KGOpNIi1X+mhbbWn4lnL9ZKihL/RrfOV+oV4R26IDq+KqUiJBENeo8/GXkGLUH/87iPyzXKEMavr6fkrK0vTGto8yEYxmOyaVz8phG5rwf4jJgmYNoMbGo8gWvhqO7UAGy2g7MWv+B/t1eZZ+1euLsNrWAsFJiFbQKgdFfQT3RjB14iU8knlQ8usoy+pXssY2ddGJGVcGC21oZvstK9eu1eRZftda/wP+N5unT1Hw7kCoVzqxHieiYt47EGIOaaQ7XjZDK6qPN6O/grHnvJZm2vBkxuXgsYVkRQ7AuTWIecphqFsq7Wbc1YNbMW47SVU5zMD0WaCqbaaI0t4uIzRvPlD8cpiiTzFTrEHlIBTf8/uZjjEGGLhJR1jPqA9D1Ej3ChV+ye6F9JTUMlozRMsGuF8U4btDzH5xdnmvRS4Ar6LKEtAXGkj2yuyJln+v4RIWj2xOGPJovOqiXwi0FyM61f8U8gj0OiNA2/QlvrqQVDF7sMXgjvaE7iQt5vMETteZlx+z3f+jTFM/aon5... [2020/05/21 16:36:57:1752] N: main: .... strarting serialization of test 7 {"schema":"com-warmcat-sai-builder","hostname":"","nspawn_timeout":0,"targets":[{"name":"PYvtan6kqppjnS0KpYTCaiOLsJkc7XecAr1kcE0aCIciewYB+JcLG82mO1Vb1mJtjDwUjBxy2I6AzefzoWUWmqZbsv4MXR55j9bKlyz1liiSX63iO0x6JAwACMtE2MkgcLwR86TSWAD9D1QKIWqg5RJ/CRuVsW0DKAUMD52ql4JmPFuJpJgTq28z6PhYNzN3yI3bmQt6bzhA+A/xAsFzSBnb3MHYWzGMprr53FAP1ISo5Ec9i+2ehV40sG6Q470sH3PGQZ0YRPO7Sh/SyrSQ/scONmxRc3AcXl7X/CSs417ii+CV8sq3ZgcxKNB7tNfN7idNx3upZ00G2BZy9jSy03cLKKLNaNUt0TQsxXbH55uDHzSEeZWvxJgT6zB1NoMhdC02w+oXim94M6z6COCnqT3rgkGk8PHMry9Bkh4yVpRmzIRfMmln/lEhdZgxky2+g5hhlSIGJYDCrdynD9kCfvfy6KGOpNIi1X+mhbbWn4lnL9ZKihL/RrfOV+oV4R26IDq+KqUiJBENeo8/GXkGLUH/87iPyzXKEMavr6fkrK0vTGto8yEYxmOyaVz8phG5rwf4jJgmYNoMbGo8gWvhqO7UAGy2g7MWv+B/t1eZZ+1euLsNrWAsFJiFbQKgdFfQT3RjB14iU8knlQ8usoy+pXssY2ddGJGVcGC21oZvstK9eu1eRZftda/wP+N5unT1Hw7kCoVzqxHieiYt47EGIOaaQ7XjZDK6qPN6O/grHnvJZm2vBkxuXgsYVkRQ7AuTWIecphqFsq7Wbc1YNbMW47SVU5zMD0WaCqbaaI0t4uIzRvPlD8cpiiTzFTrEHlIBTf8/uZjjEGGLhJR1jPqA9D1Ej3ChV+ye6F9JTUMlozRMsGuF8U4btDzH5xdnmvRS4Ar6LKEtAXGkj2yuyJln+v4RIWj2xOGPJovOqiXwi0FyM61f8U8gj0OiNA2/QlvrqQVDF7sMXgjvaE7iQt5vMETteZlx+z3f+jTFM/aon511W4+ZkRD+6AHwucvM9BEC","someflag":false}]} [2020/05/21 16:36:57:1756] N: main: ++++++++++++++++ test 8 [2020/05/21 16:36:57:1758] N: lws_struct_schema_only_lejp_cb: child map ofs_clist 0 [2020/05/21 16:36:57:1761] N: other.name = 'somename' [2020/05/21 16:36:57:1763] N: main: .... strarting serialization of test 8 {"schema":"com-warmcat-sai-other","name":"somename"} {"schema":"meta.schema","t":{"name":"mytargetname","someflag":false},"e":{"hostname":"myhostname","nspawn_timeout":0}} [2020/05/21 16:36:57:1785] N: Test set 2 [2020/05/21 16:36:57:1791] N: lws_struct_schema_only_lejp_cb: child map ofs_clist 0 [2020/05/21 16:36:57:1795] N: Test set 2: 6: 071ab46ab4296e5de674c628fec17c55088254679f7714ad991f8c4873dca [2020/05/21 16:36:57:1801] N: test2: start [2020/05/21 16:36:57:1811] N: lws_struct_schema_only_lejp_cb: child map ofs_clist 0 [2020/05/21 16:36:57:1815] N: lws_struct_default_lejp_cb: created 'config' object size 80 [2020/05/21 16:36:57:1819] N: lws_struct_default_lejp_cb: created 'creds' object size 16 [2020/05/21 16:36:57:1833] N: lws_struct_default_lejp_cb: created 'config' object size 80 [2020/05/21 16:36:57:1834] N: lws_struct_default_lejp_cb: created 'creds' object size 16 [2020/05/21 16:36:57:1837] N: test2: lejp_parse 0 [2020/05/21 16:36:57:1841] N: t2_configs_dump: number of configs: 2 [2020/05/21 16:36:57:1844] N: t2_config_dump: id1 '(null)' [2020/05/21 16:36:57:1846] N: t2_config_dump: arg1 'val1' [2020/05/21 16:36:57:1848] N: t2_config_dump: ssid '"nw2"' [2020/05/21 16:36:57:1850] N: t2_config_dump: freq 0 [2020/05/21 16:36:57:1852] N: t2_config_dump: arg2 0 [2020/05/21 16:36:57:1854] N: t2_config_dump: priority 1 [2020/05/21 16:36:57:1856] N: t2_config_dump: key1: "xxxxxxxxx", key2: (null) [2020/05/21 16:36:57:1857] N: t2_config_dump: id1 '(null)' [2020/05/21 16:36:57:1858] N: t2_config_dump: arg1 'val2' [2020/05/21 16:36:57:1858] N: t2_config_dump: ssid '"nw1"' [2020/05/21 16:36:57:1859] N: t2_config_dump: freq 11 [2020/05/21 16:36:57:1859] N: t2_config_dump: arg2 1420887242594 [2020/05/21 16:36:57:1860] N: t2_config_dump: priority 3 [2020/05/21 16:36:57:1860] N: t2_config_dump: key1: "xxxxxxxxxxxxx", key2: (null) {"config":[{"creds":{"key1":"\u0022xxxxxxxxx\u0022"},"arg1":"val1","ssid":"\u0022nw2\u0022","frequency":0,"arg2":0,"priority":1},{"creds":{"key1":"\u0022xxxxxxxxxxxxx\u0022"},"arg1":"val2","ssid":"\u0022nw1\u0022","frequency":11,"arg2":1420887242594,"priority":3}]} [2020/05/21 16:36:57:1880] U: Completed: PASS ``` libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lws_struct-json/main.c000066400000000000000000000544361476025525100275550ustar00rootroot00000000000000/* * lws-api-test-lws_struct-json * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * lws_struct apis are used to serialize and deserialize your C structs and * linked-lists in a standardized way that's very modest on memory but * convenient and easy to maintain. * * The API test shows how to serialize and deserialize a struct with a linked- * list of child structs in JSON using lws_struct APIs. */ #include typedef struct { lws_dll2_t list; struct gpiod_line *line; const char *name; const char *wire; int chip_idx; int offset; int safe; } sai_jig_gpio_t; typedef struct { lws_dll2_t list; sai_jig_gpio_t *gpio; /* null = wait ms */ const char *gpio_name; int value; } sai_jig_seq_item_t; typedef struct { lws_dll2_t list; lws_dll2_owner_t seq_owner; const char *name; } sai_jig_sequence_t; typedef struct { lws_dll2_t list; lws_dll2_owner_t gpio_owner; lws_dll2_owner_t seq_owner; lws_sorted_usec_list_t sul; /* next step in ongoing seq */ sai_jig_seq_item_t *current; /* next seq step */ const char *name; struct lws *wsi; } sai_jig_target_t; typedef struct { lws_dll2_owner_t target_owner; struct gpiod_chip *chip[16]; struct lwsac *ac_conf; int port; const char *iface; struct lws_context *ctx; } sai_jig_t; /* * We read the JSON config using lws_struct... instrument the related structures */ static const lws_struct_map_t lsm_sai_jig_gpio[] = { LSM_UNSIGNED (sai_jig_gpio_t, chip_idx, "chip_idx"), LSM_UNSIGNED (sai_jig_gpio_t, offset, "offset"), LSM_UNSIGNED (sai_jig_gpio_t, safe, "safe"), LSM_STRING_PTR (sai_jig_gpio_t, name, "name"), LSM_STRING_PTR (sai_jig_gpio_t, wire, "wire"), }; static const lws_struct_map_t lsm_sai_jig_seq_item[] = { LSM_STRING_PTR (sai_jig_seq_item_t, gpio_name, "gpio_name"), LSM_UNSIGNED (sai_jig_seq_item_t, value, "value"), }; static const lws_struct_map_t lsm_sai_jig_sequence[] = { LSM_STRING_PTR (sai_jig_sequence_t, name, "name"), LSM_LIST (sai_jig_sequence_t, seq_owner, sai_jig_seq_item_t, list, NULL, lsm_sai_jig_seq_item, "seq"), }; static const lws_struct_map_t lsm_sai_jig_target[] = { LSM_STRING_PTR (sai_jig_target_t, name, "name"), LSM_LIST (sai_jig_target_t, gpio_owner, sai_jig_gpio_t, list, NULL, lsm_sai_jig_gpio, "gpios"), LSM_LIST (sai_jig_target_t, seq_owner, sai_jig_sequence_t, list, NULL, lsm_sai_jig_sequence, "sequences"), }; static const lws_struct_map_t lsm_sai_jig[] = { LSM_STRING_PTR (sai_jig_t, iface, "iface"), LSM_UNSIGNED (sai_jig_t, port, "port"), LSM_LIST (sai_jig_t, target_owner, sai_jig_target_t, list, NULL, lsm_sai_jig_target, "targets"), }; static const lws_struct_map_t lsm_jig_schema[] = { LSM_SCHEMA (sai_jig_t, NULL, lsm_sai_jig, "sai-jig"), }; static const char * const jig_conf = "{" "\"schema\": \"sai-jig\"," "\"port\": 44000," "\"targets\": [" "{" "\"name\": \"linkit-7697-1\"," "\"gpios\": [" "{" "\"chip_index\": 0," "\"name\": \"nReset\"," "\"offset\": 17," "\"wire\": \"RST\"," "\"safe\": 0" "}, {" "\"name\": \"usr\"," "\"chip_index\": 0," "\"offset\": 22," "\"wire\": \"P6\"," "\"safe\": 0" "}" "], \"sequences\": [" "{" "\"name\": \"reset\"," "\"seq\": [" "{ \"gpio_name\": \"nReset\", \"value\": 0 }," "{ \"gpio_name\": \"usr\", \"value\": 0 }," "{ \"value\": 300 }," "{ \"gpio_name\": \"nReset\", \"value\": 1 }" "]" "}, {" "\"name\": \"flash\"," "\"seq\": [" "{ \"gpio_name\": \"nReset\", \"value\": 0 }," "{ \"gpio_name\": \"usr\", \"value\": 1 }," "{ \"value\": 300 }," "{ \"gpio_name\": \"nReset\", \"value\": 1 }," "{ \"value\": 100 }," "{ \"gpio_name\": \"usr\", \"value\": 0 }" "]" "}" "]" "}" "]" "}"; extern int test2(void); /* * in this example, the JSON is for one "builder" object, which may specify * a child list "targets" of zero or more "target" objects. */ static const char * const json_tests[] = { "{" /* test 1 */ "\"schema\":\"com-warmcat-sai-builder\"," "\"hostname\":\"learn\"," "\"nspawn_timeout\":1800," "\"targets\":[" "{" "\"name\":\"target1\"," "\"someflag\":true" "}," "{" "\"name\":\"target2\"," "\"someflag\":false" "}" "]" "}", "{" /* test 2 */ "\"schema\":\"com-warmcat-sai-builder\"," "\"hostname\":\"learn\"," "\"targets\":[" "{" "\"name\":\"target1\"" "}," "{" "\"name\":\"target2\"" "}," "{" "\"name\":\"target3\"" "}" "]" "}", "{" /* test 3 */ "\"schema\":\"com-warmcat-sai-builder\"," "\"hostname\":\"learn\"," "\"nspawn_timeout\":1800," "\"targets\":[" "{" "\"name\":\"target1\"," "\"unrecognized\":\"xyz\"," "\"child\": {" "\"somename\": \"abc\"," "\"junk\": { \"x\": \"y\" }" "}" "}," "{" "\"name\":\"target2\"" "}" "]" "}", "{" /* test 4 */ "\"schema\":\"com-warmcat-sai-builder\"," "\"hostname\":\"learn\"," "\"nspawn_timeout\":1800" "}", "{" /* test 5 */ "\"schema\":\"com-warmcat-sai-builder\"" "}", "{" /* test 6 ... check huge strings into smaller fixed char array */ "\"schema\":\"com-warmcat-sai-builder\"," "\"hostname\":\"" "PYvtan6kqppjnS0KpYTCaiOLsJkc7XecAr1kcE0aCIciewYB+JcLG82mO1Vb1mJtjDwUjBxy2I6A" "zefzoWUWmqZbsv4MXR55j9bKlyz1liiSX63iO0x6JAwACMtE2MkgcLwR86TSWAD9D1QKIWqg5RJ/" "CRuVsW0DKAUMD52ql4JmPFuJpJgTq28z6PhYNzN3yI3bmQt6bzhA+A/xAsFzSBnb3MHYWzGMprr5" "3FAP1ISo5Ec9i+2ehV40sG6Q470sH3PGQZ0YRPO7Sh/SyrSQ/scONmxRc3AcXl7X/CSs417ii+CV" "8sq3ZgcxKNB7tNfN7idNx3upZ00G2BZy9jSy03cLKKLNaNUt0TQsxXbH55uDHzSEeZWvxJgT6zB1" "NoMhdC02w+oXim94M6z6COCnqT3rgkGk8PHMry9Bkh4yVpRmzIRfMmln/lEhdZgxky2+g5hhlSIG" "JYDCrdynD9kCfvfy6KGOpNIi1X+mhbbWn4lnL9ZKihL/RrfOV+oV4R26IDq+KqUiJBENeo8/GXkG" "LUH/87iPyzXKEMavr6fkrK0vTGto8yEYxmOyaVz8phG5rwf4jJgmYNoMbGo8gWvhqO7UAGy2g7MW" "v+B/t1eZZ+1euLsNrWAsFJiFbQKgdFfQT3RjB14iU8knlQ8usoy+pXssY2ddGJGVcGC21oZvstK9" "eu1eRZftda/wP+N5unT1Hw7kCoVzqxHieiYt47EGIOaaQ7XjZDK6qPN6O/grHnvJZm2vBkxuXgsY" "VkRQ7AuTWIecphqFsq7Wbc1YNbMW47SVU5zMD0WaCqbaaI0t4uIzRvPlD8cpiiTzFTrEHlIBTf8/" "uZjjEGGLhJR1jPqA9D1Ej3ChV+ye6F9JTUMlozRMsGuF8U4btDzH5xdnmvRS4Ar6LKEtAXGkj2yu" "yJln+v4RIWj2xOGPJovOqiXwi0FyM61f8U8gj0OiNA2/QlvrqQVDF7sMXgjvaE7iQt5vMETteZlx" "+z3f+jTFM/aon511W4+ZkRD+6AHwucvM9BEC\"" "}", "{" /* test 7 ... check huge strings into char * */ "\"schema\":\"com-warmcat-sai-builder\"," "\"targets\":[" "{" "\"name\":\"" "PYvtan6kqppjnS0KpYTCaiOLsJkc7XecAr1kcE0aCIciewYB+JcLG82mO1Vb1mJtjDwUjBxy2I6A" "zefzoWUWmqZbsv4MXR55j9bKlyz1liiSX63iO0x6JAwACMtE2MkgcLwR86TSWAD9D1QKIWqg5RJ/" "CRuVsW0DKAUMD52ql4JmPFuJpJgTq28z6PhYNzN3yI3bmQt6bzhA+A/xAsFzSBnb3MHYWzGMprr5" "3FAP1ISo5Ec9i+2ehV40sG6Q470sH3PGQZ0YRPO7Sh/SyrSQ/scONmxRc3AcXl7X/CSs417ii+CV" "8sq3ZgcxKNB7tNfN7idNx3upZ00G2BZy9jSy03cLKKLNaNUt0TQsxXbH55uDHzSEeZWvxJgT6zB1" "NoMhdC02w+oXim94M6z6COCnqT3rgkGk8PHMry9Bkh4yVpRmzIRfMmln/lEhdZgxky2+g5hhlSIG" "JYDCrdynD9kCfvfy6KGOpNIi1X+mhbbWn4lnL9ZKihL/RrfOV+oV4R26IDq+KqUiJBENeo8/GXkG" "LUH/87iPyzXKEMavr6fkrK0vTGto8yEYxmOyaVz8phG5rwf4jJgmYNoMbGo8gWvhqO7UAGy2g7MW" "v+B/t1eZZ+1euLsNrWAsFJiFbQKgdFfQT3RjB14iU8knlQ8usoy+pXssY2ddGJGVcGC21oZvstK9" "eu1eRZftda/wP+N5unT1Hw7kCoVzqxHieiYt47EGIOaaQ7XjZDK6qPN6O/grHnvJZm2vBkxuXgsY" "VkRQ7AuTWIecphqFsq7Wbc1YNbMW47SVU5zMD0WaCqbaaI0t4uIzRvPlD8cpiiTzFTrEHlIBTf8/" "uZjjEGGLhJR1jPqA9D1Ej3ChV+ye6F9JTUMlozRMsGuF8U4btDzH5xdnmvRS4Ar6LKEtAXGkj2yu" "yJln+v4RIWj2xOGPJovOqiXwi0FyM61f8U8gj0OiNA2/QlvrqQVDF7sMXgjvaE7iQt5vMETteZlx" "+z3f+jTFM/aon511W4+ZkRD+6AHwucvM9BEC\"}]}" "}", "{" /* test 8 the "other" schema */ "\"schema\":\"com-warmcat-sai-other\"," "\"name\":\"somename\"" "}", }; /* * These are the expected outputs for each test, without pretty formatting. * * There are some differences to do with missing elements being rendered with * default values. */ static const char * const json_expected[] = { "{\"schema\":\"com-warmcat-sai-builder\",\"hostname\":\"learn\"," "\"nspawn_timeout\":1800,\"targets\":[{\"name\":\"target1\",\"someflag\":true}," "{\"name\":\"target2\",\"someflag\":false}]}", "{\"schema\":\"com-warmcat-sai-builder\",\"hostname\":\"learn\"," "\"nspawn_timeout\":0,\"targets\":[{\"name\":\"target1\",\"someflag\":false}," "{\"name\":\"target2\",\"someflag\":false},{\"name\":\"target3\",\"someflag\":false}]}", "{\"schema\":\"com-warmcat-sai-builder\",\"hostname\":\"learn\"," "\"nspawn_timeout\":1800,\"targets\":[{\"name\":\"target1\",\"someflag\":false," "\"child\":{\"somename\":\"abc\"}},{\"name\":\"target2\",\"someflag\":false}]}", "{\"schema\":\"com-warmcat-sai-builder\"," "\"hostname\":\"learn\",\"nspawn_timeout\":1800}", "{\"schema\":\"com-warmcat-sai-builder\",\"hostname\":\"\"," "\"nspawn_timeout\":0}", "{\"schema\":\"com-warmcat-sai-builder\",\"hostname\":" "\"PYvtan6kqppjnS0KpYTCaiOLsJkc7Xe\"," "\"nspawn_timeout\":0}", "{\"schema\":\"com-warmcat-sai-builder\",\"hostname\":\"\"," "\"nspawn_timeout\":0,\"targets\":[{\"name\":\"PYvtan6kqppjnS0KpYTC" "aiOLsJkc7XecAr1kcE0aCIciewYB+JcLG82mO1Vb1mJtjDwUjBxy2I6Azefz" "oWUWmqZbsv4MXR55j9bKlyz1liiSX63iO0x6JAwACMtE2MkgcLwR86TSWAD9" "D1QKIWqg5RJ/CRuVsW0DKAUMD52ql4JmPFuJpJgTq28z6PhYNzN3yI3bmQt6" "bzhA+A/xAsFzSBnb3MHYWzGMprr53FAP1ISo5Ec9i+2ehV40sG6Q470sH3PG" "QZ0YRPO7Sh/SyrSQ/scONmxRc3AcXl7X/CSs417ii+CV8sq3ZgcxKNB7tNfN" "7idNx3upZ00G2BZy9jSy03cLKKLNaNUt0TQsxXbH55uDHzSEeZWvxJgT6zB1" "NoMhdC02w+oXim94M6z6COCnqT3rgkGk8PHMry9Bkh4yVpRmzIRfMmln/lEh" "dZgxky2+g5hhlSIGJYDCrdynD9kCfvfy6KGOpNIi1X+mhbbWn4lnL9ZKihL/" "RrfOV+oV4R26IDq+KqUiJBENeo8/GXkGLUH/87iPyzXKEMavr6fkrK0vTGto" "8yEYxmOyaVz8phG5rwf4jJgmYNoMbGo8gWvhqO7UAGy2g7MWv+B/t1eZZ+1e" "uLsNrWAsFJiFbQKgdFfQT3RjB14iU8knlQ8usoy+pXssY2ddGJGVcGC21oZv" "stK9eu1eRZftda/wP+N5unT1Hw7kCoVzqxHieiYt47EGIOaaQ7XjZDK6qPN6" "O/grHnvJZm2vBkxuXgsYVkRQ7AuTWIecphqFsq7Wbc1YNbMW47SVU5zMD0Wa" "CqbaaI0t4uIzRvPlD8cpiiTzFTrEHlIBTf8/uZjjEGGLhJR1jPqA9D1Ej3Ch" "V+ye6F9JTUMlozRMsGuF8U4btDzH5xdnmvRS4Ar6LKEtAXGkj2yuyJln+v4R" "IWj2xOGPJovOqiXwi0FyM61f8U8gj0OiNA2/QlvrqQVDF7sMXgjvaE7iQt5v" "METteZlx+z3f+jTFM/aon511W4+ZkRD+6AHwucvM9BEC\"" ",\"someflag\":false}]}", "{\"schema\":\"com-warmcat-sai-other\",\"name\":\"somename\"}" }; /* * These annotate the members in the struct that will be serialized and * deserialized with type and size information, as well as the name to use * in the serialization format. * * Struct members that aren't annotated like this won't be serialized and * when the struct is created during deserialiation, the will be set to 0 * or NULL. */ /* child object */ typedef struct sai_child { const char * somename; } sai_child_t; lws_struct_map_t lsm_child[] = { /* describes serializable members */ LSM_STRING_PTR (sai_child_t, somename, "somename"), }; /* target object */ typedef struct sai_target { struct lws_dll2 target_list; sai_child_t * child; const char * name; char someflag; } sai_target_t; static const lws_struct_map_t lsm_target[] = { LSM_STRING_PTR (sai_target_t, name, "name"), LSM_BOOLEAN (sai_target_t, someflag, "someflag"), LSM_CHILD_PTR (sai_target_t, child, sai_child_t, NULL, lsm_child, "child"), }; /* the first kind of struct / schema we can receive */ /* builder object */ typedef struct sai_builder { struct lws_dll2_owner targets; char hostname[32]; unsigned int nspawn_timeout; } sai_builder_t; static const lws_struct_map_t lsm_builder[] = { LSM_CARRAY (sai_builder_t, hostname, "hostname"), LSM_UNSIGNED (sai_builder_t, nspawn_timeout, "nspawn_timeout"), LSM_LIST (sai_builder_t, targets, sai_target_t, target_list, NULL, lsm_target, "targets"), }; /* * the second kind of struct / schema we can receive */ typedef struct sai_other { char name[32]; } sai_other_t; static const lws_struct_map_t lsm_other[] = { LSM_CARRAY (sai_other_t, name, "name"), }; /* * meta composed pointers test * * We serialize a struct that consists of members that point to other objects, * we expect this kind of thing * * { * "schema": "meta", * "t": { ... }, * "e": { ...} * } */ typedef struct meta { sai_target_t *t; sai_builder_t *b; } meta_t; static const lws_struct_map_t lsm_meta[] = { LSM_CHILD_PTR (meta_t, t, sai_target_t, NULL, lsm_target, "t"), LSM_CHILD_PTR (meta_t, b, sai_child_t, NULL, lsm_builder, "e"), }; static const lws_struct_map_t lsm_schema_meta[] = { LSM_SCHEMA (meta_t, NULL, lsm_meta, "meta.schema"), }; /* * Schema table * * Before we can understand the serialization top level format, we must read * the schema, use the table below to create the right toplevel object for the * schema name, and select the correct map tables to interpret the rest of the * serialization. * * In this example there are two completely separate structs / schemas possible * to receive, and we disambiguate and create the correct one using the schema * JSON node. * * Therefore the schema table below is the starting point for the JSON * deserialization. */ static const lws_struct_map_t lsm_schema_map[] = { LSM_SCHEMA (sai_builder_t, NULL, lsm_builder, "com-warmcat-sai-builder"), LSM_SCHEMA (sai_other_t, NULL, lsm_other, "com-warmcat-sai-other"), }; typedef struct sai_cancel { char task_uuid[65]; } sai_cancel_t; const lws_struct_map_t lsm_task_cancel[] = { LSM_CARRAY (sai_cancel_t, task_uuid, "uuid"), }; static const lws_struct_map_t t2_map[] = { LSM_SCHEMA (sai_cancel_t, NULL, lsm_task_cancel, "com.warmcat.sai.taskinfo"), LSM_SCHEMA (sai_cancel_t, NULL, lsm_task_cancel, "com.warmcat.sai.eventinfo"), LSM_SCHEMA (sai_cancel_t, NULL, lsm_task_cancel, /* shares struct */ "com.warmcat.sai.taskreset"), LSM_SCHEMA (sai_cancel_t, NULL, lsm_task_cancel, /* shares struct */ "com.warmcat.sai.eventreset"), LSM_SCHEMA (sai_cancel_t, NULL, lsm_task_cancel, /* shares struct */ "com.warmcat.sai.eventdelete"), LSM_SCHEMA (sai_cancel_t, NULL, lsm_task_cancel, "com.warmcat.sai.taskcan"), }; static const char *t2 = "{\"schema\":\"com.warmcat.sai.taskcan\"," "\"uuid\": \"071ab46ab4296e5de674c628fec17c55088254679f7714ad991f8c4873dca\"}\x01\x02\xff\xff\xff\xff"; typedef struct xlws_wifi_creds { lws_dll2_t list; char ssid[33]; char passphrase[64]; int alg; char bssid[6]; } xlws_wifi_creds_t; typedef struct xlws_netdevs { lws_dll2_owner_t owner_creds; } xlws_netdevs_t; static const lws_struct_map_t lsm_wifi_creds[] = { LSM_CARRAY (xlws_wifi_creds_t, ssid, "ssid"), LSM_CARRAY (xlws_wifi_creds_t, passphrase, "passphrase"), LSM_UNSIGNED (xlws_wifi_creds_t, alg, "alg"), LSM_STRING_PTR (xlws_wifi_creds_t, bssid, "bssid"), }; static const lws_struct_map_t lsm_netdev_credentials[] = { LSM_LIST (xlws_netdevs_t, owner_creds, xlws_wifi_creds_t, list, NULL, lsm_wifi_creds, "credentials"), }; static const lws_struct_map_t lsm_netdev_schema[] = { LSM_SCHEMA (xlws_netdevs_t, NULL, lsm_netdev_credentials, "com.warmcat.sai.taskinfo"), }; static int show_target(struct lws_dll2 *d, void *user) { sai_target_t *t = lws_container_of(d, sai_target_t, target_list); lwsl_notice(" target.name '%s' (target %p)\n", t->name, t); if (t->child) lwsl_notice(" child %p, target.child.somename '%s'\n", t->child, t->child->somename); return 0; } int main(int argc, const char **argv) { int n, m, e = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; #if 1 lws_struct_serialize_t *ser; uint8_t buf[4096]; size_t written; #endif struct lejp_ctx ctx; lws_struct_args_t a; sai_builder_t *b, mb; sai_target_t mt; sai_other_t *o; const char *p; meta_t meta; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS API selftest: lws_struct JSON\n"); for (m = 0; m < (int)LWS_ARRAY_SIZE(json_tests); m++) { /* 1. deserialize the canned JSON into structs */ lwsl_notice("%s: ++++++++++++++++ test %d\n", __func__, m + 1); memset(&a, 0, sizeof(a)); a.map_st[0] = lsm_schema_map; a.map_entries_st[0] = LWS_ARRAY_SIZE(lsm_schema_map); a.ac_block_size = 512; lws_struct_json_init_parse(&ctx, NULL, &a); n = lejp_parse(&ctx, (uint8_t *)json_tests[m], (int)strlen(json_tests[m])); if (n < 0) { lwsl_err("%s: notification JSON decode failed '%s'\n", __func__, lejp_error_to_string(n)); e++; goto done; } lwsac_info(a.ac); if (m + 1 != 8) { b = a.dest; if (!b) { lwsl_err("%s: didn't produce any output\n", __func__); e++; goto done; } if (a.top_schema_index) { lwsl_err("%s: wrong top_schema_index\n", __func__); e++; goto done; } lwsl_notice("builder.hostname = '%s', timeout = %d, targets (%d)\n", b->hostname, b->nspawn_timeout, b->targets.count); lws_dll2_foreach_safe(&b->targets, NULL, show_target); } else { o = a.dest; if (!o) { lwsl_err("%s: didn't produce any output\n", __func__); e++; goto done; } if (a.top_schema_index != 1) { lwsl_err("%s: wrong top_schema_index\n", __func__); e++; goto done; } lwsl_notice("other.name = '%s'\n", o->name); } /* 2. serialize the structs into JSON and confirm */ lwsl_notice("%s: .... strarting serialization of test %d\n", __func__, m + 1); if (m + 1 != 8) { ser = lws_struct_json_serialize_create(lsm_schema_map, LWS_ARRAY_SIZE(lsm_schema_map), 0//LSSERJ_FLAG_PRETTY , b); } else { ser = lws_struct_json_serialize_create(&lsm_schema_map[1], 1, 0//LSSERJ_FLAG_PRETTY , o); } if (!ser) { lwsl_err("%s: unable to init serialization\n", __func__); goto bail; } do { n = (int)lws_struct_json_serialize(ser, buf, sizeof(buf), &written); switch (n) { case LSJS_RESULT_FINISH: puts((const char *)buf); break; case LSJS_RESULT_CONTINUE: case LSJS_RESULT_ERROR: goto bail; } } while(n == LSJS_RESULT_CONTINUE); if (strcmp(json_expected[m], (char *)buf)) { lwsl_err("%s: test %d: expected %s\n", __func__, m + 1, json_expected[m]); e++; goto done; } lws_struct_json_serialize_destroy(&ser); done: lwsac_free(&a.ac); } if (e) goto bail; /* ad-hoc tests */ memset(&meta, 0, sizeof(meta)); memset(&mb, 0, sizeof(mb)); memset(&mt, 0, sizeof(mt)); meta.t = &mt; meta.b = &mb; meta.t->name = "mytargetname"; lws_strncpy(meta.b->hostname, "myhostname", sizeof(meta.b->hostname)); ser = lws_struct_json_serialize_create(lsm_schema_meta, 1, 0, &meta); if (!ser) { lwsl_err("%s: failed to create json\n", __func__); } do { n = (int)lws_struct_json_serialize(ser, buf, sizeof(buf), &written); switch (n) { case LSJS_RESULT_CONTINUE: case LSJS_RESULT_FINISH: puts((const char *)buf); if (strcmp((const char *)buf, "{\"schema\":\"meta.schema\"," "\"t\":{\"name\":\"mytargetname\"," "\"someflag\":false}," "\"e\":{\"hostname\":\"myhostname\"," "\"nspawn_timeout\":0}}")) { lwsl_err("%s: meta test fail\n", __func__); goto bail; } break; case LSJS_RESULT_ERROR: goto bail; } } while(n == LSJS_RESULT_CONTINUE); lws_struct_json_serialize_destroy(&ser); lwsl_notice("Test set 2\n"); memset(&a, 0, sizeof(a)); a.map_st[0] = t2_map; a.map_entries_st[0] = LWS_ARRAY_SIZE(t2_map); a.ac_block_size = 128; lws_struct_json_init_parse(&ctx, NULL, &a); m = lejp_parse(&ctx, (uint8_t *)t2, (int)strlen(t2)); if (m < 0 || !a.dest) { lwsl_notice("%s: notification JSON decode failed '%s'\n", __func__, lejp_error_to_string(m)); goto bail; } lwsl_notice("Test set 2: %d: %s\n", m, ((sai_cancel_t *)a.dest)->task_uuid); lwsac_free(&a.ac); if (test2()) goto bail; { lws_struct_serialize_t *js; xlws_wifi_creds_t creds; xlws_netdevs_t netdevs; unsigned char *buf; size_t w; int n; memset(&creds, 0, sizeof(creds)); memset(&netdevs, 0, sizeof(netdevs)); lws_strncpy(creds.ssid, "xxx", sizeof(creds.ssid)); lws_strncpy(creds.passphrase, "yyy", sizeof(creds.passphrase)); lws_dll2_add_tail(&creds.list, &netdevs.owner_creds); buf = malloc(2048); /* length should be computed */ js = lws_struct_json_serialize_create(lsm_netdev_schema, LWS_ARRAY_SIZE(lsm_netdev_schema), 0, &netdevs); if (!js) goto bail; n = (int)lws_struct_json_serialize(js, buf, 2048, &w); lws_struct_json_serialize_destroy(&js); if (n != LSJS_RESULT_FINISH) goto bail; if (strcmp("{\"schema\":\"com.warmcat.sai.taskinfo\",\"credentials\":[{\"ssid\":\"xxx\",\"passphrase\":\"yyy\",\"alg\":0}]}", (const char *)buf)) { puts((const char *)buf); goto bail; } free(buf); } { struct x { lws_dll2_t list; const char *sz; }; struct x x1, x2, *xp; lws_dll2_owner_t o; lws_dll2_owner_clear(&o); memset(&x1, 0, sizeof(x1)); memset(&x2, 0, sizeof(x2)); x1.sz = "nope"; x2.sz = "yes"; lws_dll2_add_tail(&x1.list, &o); lws_dll2_add_tail(&x2.list, &o); xp = lws_dll2_search_sz_pl(&o, "yes", 3, struct x, list, sz); if (xp != &x2) { lwsl_err("%s: 1 xp %p\n", __func__, xp); goto bail; } xp = lws_dll2_search_sz_pl(&o, "nope", 4, struct x, list, sz); if (xp != &x1) { lwsl_err("%s: 2 xp %p\n", __func__, xp); goto bail; } xp = lws_dll2_search_sz_pl(&o, "wrong", 4, struct x, list, sz); if (xp) { lwsl_err("%s: 3 xp %p\n", __func__, xp); goto bail; } } { lws_struct_args_t a; struct lejp_ctx ctx; int m; memset(&a, 0, sizeof(a)); a.map_st[0] = lsm_jig_schema; a.map_entries_st[0] = LWS_ARRAY_SIZE(lsm_jig_schema); a.ac_block_size = 512; lws_struct_json_init_parse(&ctx, NULL, &a); m = lejp_parse(&ctx, (uint8_t *)jig_conf, (int)strlen(jig_conf)); if (m < 0 || !a.dest) { lwsl_err("%s: line %d: JSON decode failed '%s'\n", __func__, ctx.line, lejp_error_to_string(m)); goto bail; } } lwsl_user("Completed: PASS\n"); return 0; bail: lwsl_user("Completed: FAIL\n"); return 1; } libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lws_struct-json/test2.c000066400000000000000000000135501476025525100276620ustar00rootroot00000000000000/* * lws-api-test-lws_struct-json * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * lws_struct apis are used to serialize and deserialize your C structs and * linked-lists in a standardized way that's very modest on memory but * convenient and easy to maintain. * * This second test file shows a worked example for how to express a schema * and both consume JSON -> struct and struct -> JSON for it. */ #include static const char * const test2_json = "{" "\"config\":[" "{" "\"id1\":" "null," "\"creds\":{" "\"key1\":" "\"\\\"xxxxxxxxx\\\"\"," "\"key2\":" "null" "}," "\"frequency\":" "0," "\"arg1\":" "\"val1\"," "\"arg2\":" "0," "\"priority\":" "1," "\"ssid\":" "\"\\\"nw2\\\"\"" "}, {" "\"id2\":" "null," "\"creds\": {" "\"key1\":" "\"\\\"xxxxxxxxxxxxx\\\"\"," "\"key2\":" "null" "}," "\"frequency\":" "11," "\"arg1\":" "\"val2\"," "\"arg2\":" "1420887242594," "\"priority\":" "3," "\"ssid\":" "\"\\\"nw1\\\"\"" "}" "]" "}"; static const char * const test2_json_expected = "{\"config\":[{\"creds\":{\"key1\":\"\\u0022xxxxxxxxx\\u0022\"}," "\"arg1\":\"val1\",\"ssid\":\"\\u0022nw2\\u0022\"," "\"frequency\":0,\"arg2\":0,\"priority\":1}," "{\"creds\":{\"key1\":\"\\u0022xxxxxxxxxxxxx\\u0022\"}," "\"arg1\":\"val2\",\"ssid\":\"\\u0022nw1\\u0022\"," "\"frequency\":11,\"arg2\":1420887242594,\"priority\":3}]}" ; /* * level 3: Credentials object */ typedef struct t2_cred { const char *key1; const char *key2; } t2_cred_t; static const lws_struct_map_t lsm_t2_cred[] = { LSM_STRING_PTR (t2_cred_t, key1, "key1"), LSM_STRING_PTR (t2_cred_t, key2, "key2"), }; /* * level 2: Configuration object, containing a child credentials object */ typedef struct t2_config { lws_dll2_t list; t2_cred_t *creds; const char *id1; const char *arg1; const char *ssid; unsigned int frequency; unsigned long long arg2; unsigned int priority; } t2_config_t; static const lws_struct_map_t lsm_t2_config[] = { LSM_CHILD_PTR (t2_config_t, creds, /* the child pointer member */ t2_cred_t, /* the child type */ NULL, lsm_t2_cred, /* map object for item type */ "creds"), /* outer json object name */ LSM_STRING_PTR (t2_config_t, id1, "id1"), LSM_STRING_PTR (t2_config_t, arg1, "arg1"), LSM_STRING_PTR (t2_config_t, ssid, "ssid"), LSM_UNSIGNED (t2_config_t, frequency, "frequency"), LSM_UNSIGNED (t2_config_t, arg2, "arg2"), LSM_UNSIGNED (t2_config_t, priority, "priority"), }; /* * level 1: list-of-configurations object */ typedef struct t2_configs { lws_dll2_owner_t configs; } t2_configs_t; static const lws_struct_map_t lsm_t2_configs[] = { LSM_LIST (t2_configs_t, configs, /* the list owner type/member */ t2_config_t, list, /* the list item type/member */ NULL, lsm_t2_config, /* map object for item type */ "config"), /* outer json object name */ }; /* * For parsing, this lists the kind of object we expect to parse so the struct * can be allocated polymorphically. * * Lws uses an explicit "schema" member so the type is known unambiguously. If * in the incoming JSON the first member is not "schema", it will scan the * maps listed here and instantiate the first object that has a member of that * name. */ static const lws_struct_map_t lsm_schema[] = { LSM_SCHEMA (t2_configs_t, NULL, lsm_t2_configs, "t2"), /* other schemata that might need parsing... */ }; static int t2_config_dump(struct lws_dll2 *d, void *user) { #if !defined(LWS_WITH_NO_LOGS) t2_config_t *c = lws_container_of(d, t2_config_t, list); lwsl_notice("%s: id1 '%s'\n", __func__, c->id1); lwsl_notice("%s: arg1 '%s'\n", __func__, c->arg1); lwsl_notice("%s: ssid '%s'\n", __func__, c->ssid); lwsl_notice("%s: freq %d\n", __func__, c->frequency); lwsl_notice("%s: arg2 %llu\n", __func__, c->arg2); lwsl_notice("%s: priority %d\n", __func__, c->priority); lwsl_notice("%s: key1: %s, key2: %s\n", __func__, c->creds->key1, c->creds->key2); #endif return 0; } static int t2_configs_dump(t2_configs_t *t2cs) { lwsl_notice("%s: number of configs: %d\n", __func__, t2cs->configs.count); lws_dll2_foreach_safe(&t2cs->configs, NULL, t2_config_dump); return 0; } int test2(void) { lws_struct_serialize_t *ser; struct lejp_ctx ctx; lws_struct_args_t a; t2_configs_t *top; uint8_t buf[4096]; size_t written; int n, bad = 1; lwsl_notice("%s: start \n", __func__); memset(&a, 0, sizeof(a)); a.map_st[0] = lsm_schema; a.map_entries_st[0] = LWS_ARRAY_SIZE(lsm_schema); a.ac_block_size = 512; lws_struct_json_init_parse(&ctx, NULL, &a); n = lejp_parse(&ctx, (uint8_t *)test2_json, (int)strlen(test2_json)); lwsl_notice("%s: lejp_parse %d\n", __func__, n); if (n < 0) { lwsl_err("%s: test2 JSON decode failed '%s'\n", __func__, lejp_error_to_string(n)); goto bail; } lwsac_info(a.ac); top = (t2_configs_t *)a.dest; /* the top level object */ if (!top) { lwsl_err("%s: no top level object\n", __func__); goto bail; } t2_configs_dump(top); /* 2. Let's reserialize the top level object and see what comes out */ ser = lws_struct_json_serialize_create(&lsm_schema[0], 1, LSSERJ_FLAG_OMIT_SCHEMA, top); if (!ser) { lwsl_err("%s: unable to init serialization\n", __func__); goto bail; } do { n = (int)lws_struct_json_serialize(ser, buf, sizeof(buf), &written); switch (n) { case LSJS_RESULT_FINISH: puts((const char *)buf); break; case LSJS_RESULT_CONTINUE: case LSJS_RESULT_ERROR: goto bail; } } while (n == LSJS_RESULT_CONTINUE); if (strcmp(test2_json_expected, (char *)buf)) { lwsl_err("%s: expected %s\n", __func__, test2_json_expected); goto bail; } lws_struct_json_serialize_destroy(&ser); bad = 0; bail: lwsac_free(&a.ac); return bad; } libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lws_struct_sqlite/000077500000000000000000000000001476025525100270635ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lws_struct_sqlite/CMakeLists.txt000066400000000000000000000013761476025525100316320ustar00rootroot00000000000000project(lws-api-test-lws_struct-sqlite C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-api-test-lws_struct-sqlite) set(SRCS main.c) set(requirements 1) require_lws_config(LWS_WITH_STRUCT_SQLITE3 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) add_test(NAME api-test-lws_struct_sqlite COMMAND lws-api-test-lws_struct-sqlite) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared sqlite3 ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets sqlite3 ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lws_struct_sqlite/README.md000066400000000000000000000010221476025525100303350ustar00rootroot00000000000000# lws api test lws_struct SQLITE Demonstrates how to use and performs selftests for lws_struct SQLITE serialization and deserialization ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 ``` $ ./lws-api-test-lws_struct-sqlite [2020/02/22 09:55:05:4335] U: LWS API selftest: lws_struct SQLite [2020/02/22 09:55:05:5579] N: lws_struct_sq3_open: created _lws_apitest.sq3 owned by 0:0 mode 0600 [2020/02/22 09:55:05:9206] U: Completed: PASS ``` libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lws_struct_sqlite/main.c000066400000000000000000000133201476025525100301520ustar00rootroot00000000000000/* * lws-api-test-lws_struct-sqlite * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * lws_struct apis are used to serialize and deserialize your C structs and * linked-lists in a standardized way that's very modest on memory but * convenient and easy to maintain. * * The API test shows how to serialize and deserialize a struct with a linked- * list of child structs in JSON using lws_struct APIs. */ #include typedef struct teststruct { lws_dll2_t list; /* not directly serialized */ char str1[32]; const char *str2; uint8_t u8; uint16_t u16; uint32_t u32; uint64_t u64; int32_t s32; } teststruct_t; /* * These are the members that we will serialize and deserialize, not every * member in the struct (eg, the dll2 list member) */ static const lws_struct_map_t lsm_teststruct[] = { LSM_CARRAY (teststruct_t, str1, "str1"), LSM_STRING_PTR (teststruct_t, str2, "str2"), LSM_UNSIGNED (teststruct_t, u8, "u8"), LSM_UNSIGNED (teststruct_t, u16, "u16"), LSM_UNSIGNED (teststruct_t, u32, "u32"), LSM_UNSIGNED (teststruct_t, u64, "u64"), LSM_SIGNED (teststruct_t, s32, "s32"), }; static const lws_struct_map_t lsm_schema_apitest[] = { LSM_SCHEMA_DLL2 (teststruct_t, list, NULL, lsm_teststruct, "apitest") }; static const char *test_string = "No one would have believed in the last years of the nineteenth " "century that this world was being watched keenly and closely by " "intelligences greater than man's and yet as mortal as his own; that as " "men busied themselves about their various concerns they were " "scrutinised and studied, perhaps almost as narrowly as a man with a " "microscope might scrutinise the transient creatures that swarm and " "multiply in a drop of water. With infinite complacency men went to " "and fro over this globe about their little affairs, serene in their " "assurance of their empire over matter. It is possible that the " "infusoria under the microscope do the same. No one gave a thought to " "the older worlds of space as sources of human danger, or thought of " "them only to dismiss the idea of life upon them as impossible or " "improbable. It is curious to recall some of the mental habits of " "those departed days. At most terrestrial men fancied there might be " "other men upon Mars, perhaps inferior to themselves and ready to " "welcome a missionary enterprise. Yet across the gulf of space, minds " "that are to our minds as ours are to those of the beasts that perish, " "intellects vast and cool and unsympathetic, regarded this earth with " "envious eyes, and slowly and surely drew their plans against us. And " "early in the twentieth century came the great disillusionment. "; int main(int argc, const char **argv) { int e = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; struct lws_context_creation_info info; struct lws_context *context; struct lwsac *ac = NULL; lws_dll2_owner_t resown; teststruct_t ts, *pts; const char *p; sqlite3 *db; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS API selftest: lws_struct SQLite\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ #if defined(LWS_WITH_NETWORK) info.port = CONTEXT_PORT_NO_LISTEN; #endif context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } unlink("_lws_apitest.sq3"); if (lws_struct_sq3_open(context, "_lws_apitest.sq3", 1, &db)) { lwsl_err("%s: failed to open table\n", __func__); goto bail; } /* 1. populate the struct */ memset(&ts, 0, sizeof(ts)); lws_strncpy(ts.str1, "hello", sizeof(ts.str1)); ts.str2 = test_string; ts.u8 = 1; ts.u16 = 512, ts.u32 = 0x55aa1234; /* 1437209140, */ ts.u64 = 0x34abcdef01ull; ts.s32 = -1; /* add our struct to the dll2 owner list */ lws_dll2_owner_clear(&resown); lws_dll2_add_head(&ts.list, &resown); /* gratuitously create the table */ if (lws_struct_sq3_create_table(db, lsm_schema_apitest)) { lwsl_err("%s: Create table failed\n", __func__); e++; goto done; } /* serialize the items on the dll2 owner */ if (lws_struct_sq3_serialize(db, lsm_schema_apitest, &resown, 0)) { lwsl_err("%s: Serialize failed\n", __func__); e++; goto done; } /* resown should be cleared by deserialize, ac is already NULL */ lws_dll2_owner_clear(&resown); /* make sure old resown data is gone */ if (lws_struct_sq3_deserialize(db, NULL, NULL, lsm_schema_apitest, &resown, &ac, 0, 1)) { lwsl_err("%s: Deserialize failed\n", __func__); e++; goto done; } /* we should have 1 entry in resown now (created into the ac) */ if (resown.count != 1) { lwsl_err("%s: Expected 1 result got %d\n", __func__, resown.count); e++; goto done; } /* * Convert the pointer to the embedded lws_dll2 into a pointer * to the actual struct with the correct type */ pts = lws_container_of(lws_dll2_get_head(&resown), teststruct_t, list); if (strcmp(pts->str1, "hello") || strcmp(pts->str2, test_string) || pts->u8 != 1 || pts->u16 != 512 || pts->u32 != 0x55aa1234 || pts->u64 != 0x34abcdef01ull || pts->s32 != -1) { lwsl_err("%s: unexpected deser values: %s\n", __func__, pts->str1); lwsl_err("%s: %s\n", __func__, pts->str2); lwsl_err("%s: %u %u %u 0x%llx %d\n", __func__, pts->u8, pts->u16, pts->u32, (unsigned long long)pts->u64, pts->s32); e++; goto done; } done: lwsac_free(&ac); lws_struct_sq3_close(&db); if (e) goto bail; lws_context_destroy(context); lwsl_user("Completed: PASS\n"); return 0; bail: lws_context_destroy(context); lwsl_user("Completed: FAIL\n"); return 1; } libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lws_tokenize/000077500000000000000000000000001476025525100260065ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lws_tokenize/CMakeLists.txt000066400000000000000000000011571476025525100305520ustar00rootroot00000000000000project(lws-api-test-lws_tokenize C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-api-test-lws_tokenize) set(SRCS main.c) add_executable(${SAMP} ${SRCS}) add_test(NAME api-test-lws_tokenize COMMAND lws-api-test-lws_tokenize) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lws_tokenize/README.md000066400000000000000000000015651476025525100272740ustar00rootroot00000000000000# lws api test lws_tokenize Performs selftests for lws_tokenize ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -s "input string"|String to tokenize -f 15|LWS_TOKENIZE_F_ flag values to apply to processing of -s ``` $ ./lws-api-test-lws_tokenize [2018/10/09 09:14:17:4834] USER: LWS API selftest: lws_tokenize [2018/10/09 09:14:17:4835] USER: Completed: PASS: 6, FAIL: 0 ``` If the `-s string` option is given, the string is tokenized on stdout in the format used to produce the tests in the sources ``` $ ./lws-api-test-lws_tokenize -s "hello: 1234,256" [2018/10/09 09:14:17:4834] USER: LWS API selftest: lws_tokenize { LWS_TOKZE_TOKEN_NAME_COLON, "hello", 5 } { LWS_TOKZE_INTEGER, "1234", 4 } { LWS_TOKZE_DELIMITER, ",", 1 } { LWS_TOKZE_INTEGER, "256", 3 } { LWS_TOKZE_ENDED, "", 0 } ``` libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lws_tokenize/main.c000066400000000000000000000477631476025525100271170ustar00rootroot00000000000000/* * lws-api-test-lws_tokenize * * Written in 2010-2021 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws. * * To keep it simple, it serves stuff from the subdirectory * "./mount-origin" of the directory it was started in. * You can change that by changing mount.origin below. */ #include #include #include struct expected { lws_tokenize_elem e; const char *value; size_t len; }; struct tests { const char *string; struct expected *exp; int count; int flags; }; struct expected expected1[] = { { LWS_TOKZE_TOKEN, "protocol-1", 10 }, { LWS_TOKZE_DELIMITER, ",", 1}, { LWS_TOKZE_TOKEN, "protocol_2", 10 }, { LWS_TOKZE_DELIMITER, ",", 1}, { LWS_TOKZE_TOKEN, "protocol3", 9 }, { LWS_TOKZE_ENDED, NULL, 0 }, }, expected2[] = { { LWS_TOKZE_TOKEN_NAME_COLON, "Accept-Language", 15 }, { LWS_TOKZE_TOKEN, "fr-CH", 5 }, { LWS_TOKZE_DELIMITER, ",", 1 }, { LWS_TOKZE_TOKEN, "fr", 2 }, { LWS_TOKZE_DELIMITER, ";", 1}, { LWS_TOKZE_TOKEN_NAME_EQUALS, "q", 1 }, { LWS_TOKZE_FLOAT, "0.9", 3 }, { LWS_TOKZE_DELIMITER, ",", 1 }, { LWS_TOKZE_TOKEN, "en", 2 }, { LWS_TOKZE_DELIMITER, ";", 1}, { LWS_TOKZE_TOKEN_NAME_EQUALS, "q", 1 }, { LWS_TOKZE_FLOAT, "0.8", 3 }, { LWS_TOKZE_DELIMITER, ",", 1 }, { LWS_TOKZE_TOKEN, "de", 2 }, { LWS_TOKZE_DELIMITER, ";", 1}, { LWS_TOKZE_TOKEN_NAME_EQUALS, "q", 1 }, { LWS_TOKZE_FLOAT, "0.7", 3 }, { LWS_TOKZE_DELIMITER, ",", 1 }, { LWS_TOKZE_DELIMITER, "*", 1 }, { LWS_TOKZE_DELIMITER, ";", 1 }, { LWS_TOKZE_TOKEN_NAME_EQUALS, "q", 1 }, { LWS_TOKZE_FLOAT, "0.5", 3 }, { LWS_TOKZE_ENDED, NULL, 0 }, }, expected3[] = { { LWS_TOKZE_TOKEN_NAME_EQUALS, "quoted", 6 }, { LWS_TOKZE_QUOTED_STRING, "things:", 7 }, { LWS_TOKZE_DELIMITER, ",", 1 }, { LWS_TOKZE_INTEGER, "1234", 4 }, { LWS_TOKZE_ENDED, NULL, 0 }, }, expected4[] = { { LWS_TOKZE_ERR_COMMA_LIST, ",", 1 }, }, expected5[] = { { LWS_TOKZE_TOKEN, "brokenlist2", 11 }, { LWS_TOKZE_DELIMITER, ",", 1 }, { LWS_TOKZE_ERR_COMMA_LIST, ",", 1 }, }, expected6[] = { { LWS_TOKZE_TOKEN, "brokenlist3", 11 }, { LWS_TOKZE_DELIMITER, ",", 1 }, { LWS_TOKZE_ERR_COMMA_LIST, ",", 1 }, }, expected7[] = { { LWS_TOKZE_TOKEN, "fr", 2 }, { LWS_TOKZE_DELIMITER, "-", 1 }, { LWS_TOKZE_TOKEN, "CH", 2 }, { LWS_TOKZE_DELIMITER, ",", 1 }, { LWS_TOKZE_TOKEN, "fr", 2 }, { LWS_TOKZE_DELIMITER, ";", 1 }, { LWS_TOKZE_TOKEN_NAME_EQUALS, "q", 1 }, { LWS_TOKZE_FLOAT, "0.9", 3 }, { LWS_TOKZE_DELIMITER, ",", 1 }, { LWS_TOKZE_TOKEN, "en", 2 }, { LWS_TOKZE_DELIMITER, ";", 1 }, { LWS_TOKZE_TOKEN_NAME_EQUALS, "q", 1 }, { LWS_TOKZE_FLOAT, "0.8", 3 }, { LWS_TOKZE_DELIMITER, ",", 1 }, { LWS_TOKZE_TOKEN, "de", 2 }, { LWS_TOKZE_DELIMITER, ";", 1 }, { LWS_TOKZE_TOKEN_NAME_EQUALS, "q", 1 }, { LWS_TOKZE_FLOAT, "0.7", 3 }, { LWS_TOKZE_DELIMITER, ",", 1 }, { LWS_TOKZE_TOKEN, "*", 1 }, { LWS_TOKZE_DELIMITER, ";", 1 }, { LWS_TOKZE_TOKEN_NAME_EQUALS, "q", 1 }, { LWS_TOKZE_FLOAT, "0.5", 3 }, { LWS_TOKZE_ENDED, "", 0 }, }, expected8[] = { { LWS_TOKZE_TOKEN, "ĪŸį½Ļ‡į½¶", 10 }, { LWS_TOKZE_TOKEN, "ταὐτὰ", 12 }, { LWS_TOKZE_TOKEN, "Ļ€Ī±Ļį½·ĻƒĻ„Ī±Ļ„Ī±į½·", 22 }, { LWS_TOKZE_TOKEN, "μοι", 6 }, { LWS_TOKZE_TOKEN, "γιγνώσκειν", 21 }, { LWS_TOKZE_DELIMITER, ",", 1 }, { LWS_TOKZE_TOKEN, "ὦ", 3 }, { LWS_TOKZE_TOKEN, "ἄνΓρες", 13 }, { LWS_TOKZE_TOKEN, "᾿Αθηναῖοι", 20 }, { LWS_TOKZE_DELIMITER, ",", 1 }, { LWS_TOKZE_TOKEN, "greek", 5 }, { LWS_TOKZE_ENDED, "", 0 }, }, expected9[] = { /* * because the tokenizer scans ahead for = aggregation, * it finds the broken utf8 before reporting the token */ { LWS_TOKZE_ERR_BROKEN_UTF8, "", 0 }, }, expected10[] = { { LWS_TOKZE_TOKEN, "badutf8-2", 9 }, { LWS_TOKZE_TOKEN, "퟿", 3 }, { LWS_TOKZE_DELIMITER, ",", 1 }, { LWS_TOKZE_ERR_BROKEN_UTF8, "", 0 }, }, expected11[] = { { LWS_TOKZE_TOKEN, "1.myserver", 10 }, { LWS_TOKZE_DELIMITER, ".", 1 }, { LWS_TOKZE_TOKEN, "com", 3 }, { LWS_TOKZE_ENDED, "", 0 }, }, expected12[] = { { LWS_TOKZE_TOKEN, "1.myserver.com", 14 }, { LWS_TOKZE_ENDED, "", 0 }, }, expected13[] = { { LWS_TOKZE_TOKEN, "1.myserver.com", 14 }, { LWS_TOKZE_ENDED, "", 0 }, }, expected14[] = { { LWS_TOKZE_INTEGER, "1", 1 }, { LWS_TOKZE_DELIMITER, ".", 1 }, { LWS_TOKZE_TOKEN, "myserver", 8 }, { LWS_TOKZE_DELIMITER, ".", 1 }, { LWS_TOKZE_TOKEN, "com", 3 }, { LWS_TOKZE_ENDED, "", 0 }, }, expected15[] = { { LWS_TOKZE_TOKEN, "close", 5 }, { LWS_TOKZE_DELIMITER, ",", 1 }, { LWS_TOKZE_TOKEN, "Upgrade", 7 }, { LWS_TOKZE_ENDED, "", 0 }, }, expected16[] = { { LWS_TOKZE_TOKEN_NAME_EQUALS, "a", 1 }, { LWS_TOKZE_TOKEN, "5", 1 }, { LWS_TOKZE_ENDED, "", 0 }, }, expected17[] = { { LWS_TOKZE_TOKEN, "hello", 5 }, { LWS_TOKZE_ENDED, "", 0 }, }, expected18[] = { { LWS_TOKZE_TOKEN, "x=y", 3 }, { LWS_TOKZE_ENDED, "", 0 }, } ; struct tests tests[] = { { " protocol-1, protocol_2\t,\tprotocol3\n", expected1, LWS_ARRAY_SIZE(expected1), LWS_TOKENIZE_F_MINUS_NONTERM | LWS_TOKENIZE_F_AGG_COLON }, { "Accept-Language: fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5", expected2, LWS_ARRAY_SIZE(expected2), LWS_TOKENIZE_F_MINUS_NONTERM | LWS_TOKENIZE_F_AGG_COLON }, { "quoted = \"things:\", 1234", expected3, LWS_ARRAY_SIZE(expected3), LWS_TOKENIZE_F_MINUS_NONTERM | LWS_TOKENIZE_F_AGG_COLON }, { ", brokenlist1", expected4, LWS_ARRAY_SIZE(expected4), LWS_TOKENIZE_F_COMMA_SEP_LIST }, { "brokenlist2,,", expected5, LWS_ARRAY_SIZE(expected5), LWS_TOKENIZE_F_COMMA_SEP_LIST }, { "brokenlist3,", expected6, LWS_ARRAY_SIZE(expected6), LWS_TOKENIZE_F_COMMA_SEP_LIST }, { "fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5", expected7, LWS_ARRAY_SIZE(expected7), LWS_TOKENIZE_F_ASTERISK_NONTERM | LWS_TOKENIZE_F_RFC7230_DELIMS }, { " ĪŸį½Ļ‡į½¶ ταὐτὰ Ļ€Ī±Ļį½·ĻƒĻ„Ī±Ļ„Ī±į½· μοι γιγνώσκειν, ὦ ἄνΓρες ᾿Αθηναῖοι, greek", expected8, LWS_ARRAY_SIZE(expected8), LWS_TOKENIZE_F_RFC7230_DELIMS }, { "badutf8-1 \x80...", expected9, LWS_ARRAY_SIZE(expected9), LWS_TOKENIZE_F_MINUS_NONTERM | LWS_TOKENIZE_F_RFC7230_DELIMS }, { "badutf8-2 \xed\x9f\xbf,\x80...", expected10, LWS_ARRAY_SIZE(expected10), LWS_TOKENIZE_F_MINUS_NONTERM | LWS_TOKENIZE_F_RFC7230_DELIMS }, { "1.myserver.com", expected11, LWS_ARRAY_SIZE(expected11), 0 }, { "1.myserver.com", expected12, LWS_ARRAY_SIZE(expected12), LWS_TOKENIZE_F_DOT_NONTERM }, { "1.myserver.com", expected13, LWS_ARRAY_SIZE(expected13), LWS_TOKENIZE_F_DOT_NONTERM | LWS_TOKENIZE_F_NO_FLOATS }, { "1.myserver.com", expected14, LWS_ARRAY_SIZE(expected14), LWS_TOKENIZE_F_NO_FLOATS }, { "close, Upgrade", expected15, LWS_ARRAY_SIZE(expected15), LWS_TOKENIZE_F_COMMA_SEP_LIST }, { "a=5", expected16, LWS_ARRAY_SIZE(expected16), LWS_TOKENIZE_F_NO_INTEGERS }, { "# comment1\r\nhello #comment2\r\n#comment3", expected17, LWS_ARRAY_SIZE(expected17), LWS_TOKENIZE_F_HASH_COMMENT }, { "x=y", expected18, LWS_ARRAY_SIZE(expected18), LWS_TOKENIZE_F_EQUALS_NONTERM } }; /* * add LWS_TOKZE_ERRS to the element index (which may be negative by that * amount) to index this array */ static const char *element_names[] = { "LWS_TOKZE_ERR_BROKEN_UTF8", "LWS_TOKZE_ERR_UNTERM_STRING", "LWS_TOKZE_ERR_MALFORMED_FLOAT", "LWS_TOKZE_ERR_NUM_ON_LHS", "LWS_TOKZE_ERR_COMMA_LIST", "LWS_TOKZE_ENDED", "LWS_TOKZE_DELIMITER", "LWS_TOKZE_TOKEN", "LWS_TOKZE_INTEGER", "LWS_TOKZE_FLOAT", "LWS_TOKZE_TOKEN_NAME_EQUALS", "LWS_TOKZE_TOKEN_NAME_COLON", "LWS_TOKZE_QUOTED_STRING", }; int exp_cb1(void *priv, const char *name, char *out, size_t *pos, size_t olen, size_t *exp_ofs) { const char *replace = NULL; size_t total, budget; if (!strcmp(name, "test")) { replace = "replacement_string"; total = strlen(replace); goto expand; } return LSTRX_FATAL_NAME_UNKNOWN; expand: budget = olen - *pos; total -= *exp_ofs; if (total < budget) budget = total; if (out) memcpy(out + *pos, replace + (*exp_ofs), budget); *exp_ofs += budget; *pos += budget; if (budget == total) return LSTRX_DONE; return LSTRX_FILLED_OUT; } static const char *exp_inp1 = "this-is-a-${test}-for-strexp"; int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *cx; struct lws_tokenize ts; lws_tokenize_elem e; const char *p; int n, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; int fail = 0, ok = 0, flags = 0; char dotstar[512]; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS API selftest: lws_tokenize\n"); if ((p = lws_cmdline_option(argc, argv, "-f"))) flags = atoi(p); memset(&info, 0, sizeof info); info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_H2_JUST_FIX_WINDOW_UPDATE_OVERFLOW; /* * since we know this lws context is only ever going to be used with * one client wsis / fds / sockets at a time, let lws know it doesn't * have to use the default allocations for fd tables up to ulimit -n. * It will just allocate for 1 internal and 1 (+ 1 http2 nwsi) that we * will use. */ info.fd_limit_per_thread = 1 + 1 + 1; #if 0 #if defined(LWS_WITH_MBEDTLS) || defined(USE_WOLFSSL) /* * OpenSSL uses the system trust store. mbedTLS has to be told which * CA to trust explicitly. */ info.client_ssl_ca_filepath = "./warmcat.com.cer"; #endif #endif #if 0 n = open("./warmcat.com.cer", O_RDONLY); if (n >= 0) { info.client_ssl_ca_mem_len = read(n, memcert, sizeof(memcert)); info.client_ssl_ca_mem = memcert; close(n); n = 0; memcert[info.client_ssl_ca_mem_len++] = '\0'; } #endif cx = lws_create_context(&info); /* lws_strexp */ { size_t in_len, used_in, used_out; lws_strexp_t exp; char obuf[128]; const char *p; obuf[0] = '\0'; lws_strexp_init(&exp, NULL, exp_cb1, obuf, sizeof(obuf)); n = lws_strexp_expand(&exp, exp_inp1, 28, &used_in, &used_out); if (n != LSTRX_DONE || used_in != 28 || strcmp(obuf, "this-is-a-replacement_string-for-strexp")) { lwsl_notice("%s: obuf %s\n", __func__, obuf); lwsl_err("%s: lws_strexp test 1 failed: %d\n", __func__, n); return 1; } /* as above, but don't generate output, just find the length */ lws_strexp_init(&exp, NULL, exp_cb1, NULL, (size_t)-1); n = lws_strexp_expand(&exp, exp_inp1, 28, &used_in, &used_out); if (n != LSTRX_DONE || used_in != 28 || used_out != 39) { lwsl_err("%s: lws_strexp test 2 failed: %d, used_out: %d\n", __func__, n, (int)used_out); return 1; } p = exp_inp1; in_len = strlen(p); memset(obuf, 0, sizeof(obuf)); lws_strexp_init(&exp, NULL, exp_cb1, obuf, 16); n = lws_strexp_expand(&exp, p, in_len, &used_in, &used_out); if (n != LSTRX_FILLED_OUT || used_in != 16 || used_out != 16) { lwsl_err("a\n"); return 1; } p += used_in; in_len -= used_in; memset(obuf, 0, sizeof(obuf)); lws_strexp_reset_out(&exp, obuf, 16); n = lws_strexp_expand(&exp, p, in_len, &used_in, &used_out); if (n != LSTRX_FILLED_OUT || used_in != 5 || used_out != 16) { lwsl_err("b: n %d, used_in %d, used_out %d\n", n, (int)used_in, (int)used_out); return 2; } p += used_in; in_len -= used_in; memset(obuf, 0, sizeof(obuf)); lws_strexp_reset_out(&exp, obuf, 16); n = lws_strexp_expand(&exp, p, in_len, &used_in, &used_out); if (n != LSTRX_DONE || used_in != 7 || used_out != 7) { lwsl_err("c: n %d, used_in %d, used_out %d\n", n, (int)used_in, (int)used_out); return 2; } } /* sanity check lws_strnncpy() */ lws_strnncpy(dotstar, "12345678", 4, sizeof(dotstar)); if (strcmp(dotstar, "1234")) { lwsl_err("%s: lws_strnncpy check failed\n", __func__); return 1; } lws_strnncpy(dotstar, "12345678", 8, 6); if (strcmp(dotstar, "12345")) { lwsl_err("%s: lws_strnncpy check failed\n", __func__); return 1; } /* sanity check lws_nstrstr() */ { static const char *t1 = "abc123456"; const char *mcp; mcp = lws_nstrstr(t1, strlen(t1), "abc", 3); if (mcp != t1) { lwsl_err("%s: lws_nstrstr 1 failed\n", __func__); return 1; } mcp = lws_nstrstr(t1, strlen(t1), "def", 3); if (mcp != NULL) { lwsl_err("%s: lws_nstrstr 2 failed\n", __func__); return 1; } mcp = lws_nstrstr(t1, strlen(t1), "456", 3); if (mcp != t1 + 6) { lwsl_err("%s: lws_nstrstr 3 failed: %p\n", __func__, mcp); return 1; } mcp = lws_nstrstr(t1, strlen(t1), "1", 1); if (mcp != t1 + 3) { lwsl_err("%s: lws_nstrstr 4 failed\n", __func__); return 1; } mcp = lws_nstrstr(t1, strlen(t1), "abc1234567", 10); if (mcp != NULL) { lwsl_err("%s: lws_nstrstr 5 failed\n", __func__); return 1; } } /* sanity check lws_json_simple_find() */ { static const char *t1 = "{\"myname1\":true," "\"myname2\":\"string\", " "\"myname3\": 123}"; size_t alen; const char *mcp; mcp = lws_json_simple_find(t1, strlen(t1), "\"myname1\":", &alen); if (mcp != t1 + 11 || alen != 4) { lwsl_err("%s: lws_json_simple_find 1 failed: (%d) %s\n", __func__, (int)alen, mcp); return 1; } mcp = lws_json_simple_find(t1, strlen(t1), "\"myname2\":", &alen); if (mcp != t1 + 27 || alen != 6) { lwsl_err("%s: lws_json_simple_find 2 failed\n", __func__); return 1; } mcp = lws_json_simple_find(t1, strlen(t1), "\"myname3\":", &alen); if (mcp != t1 + 47 || alen != 3) { lwsl_err("%s: lws_json_simple_find 3 failed\n", __func__); return 1; } mcp = lws_json_simple_find(t1, strlen(t1), "\"nope\":", &alen); if (mcp != NULL) { lwsl_err("%s: lws_json_simple_find 4 failed\n", __func__); return 1; } } p = lws_cmdline_option(argc, argv, "-s"); for (n = 0; n < (int)LWS_ARRAY_SIZE(tests); n++) { int m = 0, in_fail = fail; struct expected *exp = tests[n].exp; memset(&ts, 0, sizeof(ts)); ts.start = tests[n].string; ts.len = strlen(ts.start); ts.flags = (uint16_t)tests[n].flags; do { e = lws_tokenize(&ts); lws_strnncpy(dotstar, ts.token, ts.token_len, sizeof(dotstar)); lwsl_info("{ %s, \"%s\", %d }\n", element_names[e + LWS_TOKZE_ERRS], dotstar, (int)ts.token_len); if (m == (int)tests[n].count) { lwsl_notice("fail: expected end earlier\n"); fail++; break; } if (e != exp->e) { lwsl_notice("fail... tok %s vs expected %s\n", element_names[e + LWS_TOKZE_ERRS], element_names[exp->e + LWS_TOKZE_ERRS]); fail++; break; } if (e > 0 && (ts.token_len != exp->len || memcmp(exp->value, ts.token, exp->len))) { lws_strnncpy(dotstar, ts.token, ts.token_len, sizeof(dotstar)); lwsl_notice("fail token mismatch %d %d %s\n", (int)ts.token_len, (int)exp->len, dotstar); fail++; break; } m++; exp++; } while (e > 0); if (fail == in_fail) ok++; } if (p) { ts.start = p; ts.len = strlen(p); ts.flags = (uint16_t)flags; printf("\t{\n\t\t\"%s\",\n" "\t\texpected%d, LWS_ARRAY_SIZE(expected%d),\n\t\t", p, (int)LWS_ARRAY_SIZE(tests) + 1, (int)LWS_ARRAY_SIZE(tests) + 1); if (!flags) printf("0\n\t},\n"); else { if (flags & LWS_TOKENIZE_F_MINUS_NONTERM) printf("LWS_TOKENIZE_F_MINUS_NONTERM"); if (flags & LWS_TOKENIZE_F_AGG_COLON) { if (flags & 1) printf(" | "); printf("LWS_TOKENIZE_F_AGG_COLON"); } if (flags & LWS_TOKENIZE_F_COMMA_SEP_LIST) { if (flags & 3) printf(" | "); printf("LWS_TOKENIZE_F_COMMA_SEP_LIST"); } if (flags & LWS_TOKENIZE_F_RFC7230_DELIMS) { if (flags & 7) printf(" | "); printf("LWS_TOKENIZE_F_RFC7230_DELIMS"); } if (flags & LWS_TOKENIZE_F_DOT_NONTERM) { if (flags & 15) printf(" | "); printf("LWS_TOKENIZE_F_DOT_NONTERM"); } if (flags & LWS_TOKENIZE_F_NO_FLOATS) { if (flags & 31) printf(" | "); printf("LWS_TOKENIZE_F_NO_FLOATS"); } printf("\n\t},\n"); } printf("\texpected%d[] = {\n", (int)LWS_ARRAY_SIZE(tests) + 1); do { e = lws_tokenize(&ts); lws_strnncpy(dotstar, ts.token, ts.token_len, sizeof(dotstar)); printf("\t\t{ %s, \"%s\", %d },\n", element_names[e + LWS_TOKZE_ERRS], dotstar, (int)ts.token_len); } while (e > 0); printf("\t}\n"); } #if defined(LWS_ROLE_H1) || defined(LWS_ROLE_H2) { time_t t; if (lws_http_date_parse_unix("Tue, 15 Nov 1994 08:12:31 GMT", 29, &t)) { lwsl_err("%s: date parse failed\n", __func__); fail++; } else { /* lwsl_notice("%s: %llu\n", __func__, (unsigned long long)t); */ if (t != (time_t)784887151) { lwsl_err("%s: date parse wrong\n", __func__); fail++; } else { char s[30]; if (lws_http_date_render_from_unix(s, sizeof(s), &t)) { lwsl_err("%s: failed date render\n", __func__); fail++; } else { if (!strcmp(s, "Tue, 15 Nov 1994 08:12:31 GMT")) { lwsl_err("%s: date render wrong\n", __func__); fail++; } } } } } #endif { char buf[24]; int m; m = lws_humanize(buf, sizeof(buf), 0, humanize_schema_si); if (m != 1 || strcmp(buf, "0")) { lwsl_user("%s: humanize 1 fail '%s' (%d)\n", __func__, buf, m); fail++; } m = lws_humanize(buf, sizeof(buf), 2, humanize_schema_si); if (m != 1 || strcmp(buf, "2")) { lwsl_user("%s: humanize 2 fail '%s' (%d)\n", __func__, buf, m); fail++; } m = lws_humanize(buf, sizeof(buf), 999, humanize_schema_si); if (m != 3 || strcmp(buf, "999")) { lwsl_user("%s: humanize 3 fail '%s' (%d)\n", __func__, buf, m); fail++; } m = lws_humanize(buf, sizeof(buf), 1000, humanize_schema_si); if (m != 4 || strcmp(buf, "1000")) { lwsl_user("%s: humanize 4 fail '%s' (%d)\n", __func__, buf, m); fail++; } m = lws_humanize(buf, sizeof(buf), 1024, humanize_schema_si); if (m != 7 || strcmp(buf, "1.000Ki")) { lwsl_user("%s: humanize 5 fail '%s' (%d)\n", __func__, buf, m); fail++; } } if (lws_strcmp_wildcard("allied", 6, "allied", 6)) { lwsl_user("%s: wc 1 fail\n", __func__); fail++; } if (lws_strcmp_wildcard("a*", 2, "allied", 6)) { lwsl_user("%s: wc 2 fail\n", __func__); fail++; } if (lws_strcmp_wildcard("all*", 4, "allied", 6)) { lwsl_user("%s: wc 3 fail\n", __func__); fail++; } if (lws_strcmp_wildcard("all*d", 5, "allied", 6)) { lwsl_user("%s: wc 4 fail\n", __func__); fail++; } if (!lws_strcmp_wildcard("b*", 2, "allied", 6)) { lwsl_user("%s: wc 5 fail\n", __func__); fail++; } if (!lws_strcmp_wildcard("b*ed", 4, "allied", 6)) { lwsl_user("%s: wc 6 fail\n", __func__); fail++; } if (!lws_strcmp_wildcard("allie", 5, "allied", 6)) { lwsl_user("%s: wc 7 fail\n", __func__); fail++; } if (lws_strcmp_wildcard("allie*", 6, "allied", 6)) { lwsl_user("%s: wc 8 fail\n", __func__); fail++; } if (lws_strcmp_wildcard("*llie*", 6, "allied", 6)) { lwsl_user("%s: wc 9 fail\n", __func__); fail++; } if (lws_strcmp_wildcard("*llied", 6, "allied", 6)) { lwsl_user("%s: wc 10 fail\n", __func__); fail++; } if (!lws_strcmp_wildcard("*llie", 5, "allied", 6)) { lwsl_user("%s: wc 11 fail\n", __func__); fail++; } if (!lws_strcmp_wildcard("*nope", 5, "allied", 6)) { lwsl_user("%s: wc 12 fail\n", __func__); fail++; } if (lws_strcmp_wildcard("*li*", 4, "allied", 6)) { lwsl_user("%s: wc 13 fail\n", __func__); fail++; } if (lws_strcmp_wildcard("*", 1, "allied", 6)) { lwsl_user("%s: wc 14 fail\n", __func__); fail++; } if (lws_strcmp_wildcard("*abc*d", 6, "xxabyyabcdd", 11)) { lwsl_user("%s: wc 15 fail\n", __func__); fail++; } if (lws_strcmp_wildcard("ssproxy.n.cn.*", 14, "ssproxy.n.cn.failures", 21)) { lwsl_user("%s: wc 16 fail\n", __func__); fail++; } lwsl_user("Completed: PASS: %d, FAIL: %d\n", ok, fail); lws_context_destroy(cx); return !(ok && !fail); } libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lwsac/000077500000000000000000000000001476025525100244025ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lwsac/CMakeLists.txt000066400000000000000000000011131476025525100271360ustar00rootroot00000000000000project(lws-api-test-lwsac C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-api-test-lwsac) set(SRCS main.c) add_executable(${SAMP} ${SRCS}) add_test(NAME api-test-lwsac COMMAND lws-api-test-lwsac) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lwsac/README.md000066400000000000000000000005421476025525100256620ustar00rootroot00000000000000# lws api test lwsac Demonstrates how to use and performs selftests for lwsac ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 ``` $ ./lws-api-test-lwsac [2018/10/09 09:14:17:4834] USER: LWS API selftest: lwsac [2018/10/09 09:14:17:4835] USER: Completed: PASS ``` libwebsockets-4.3.5/minimal-examples/api-tests/api-test-lwsac/main.c000066400000000000000000000033571476025525100255020ustar00rootroot00000000000000/* * lws-api-test-lwsac * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include struct mytest { int payload; /* notice doesn't have to be at start of struct */ lws_list_ptr list_next; /* a struct can appear on multiple lists too... */ }; /* converts a ptr to struct mytest .list_next to a ptr to struct mytest */ #define list_to_mytest(p) lws_list_ptr_container(p, struct mytest, list_next) int main(int argc, const char **argv) { int n, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE, acc; lws_list_ptr list_head = NULL, iter; struct lwsac *lwsac = NULL; struct mytest *m; const char *p; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS API selftest: lwsac\n"); /* * 1) allocate and create 1000 struct mytest in a linked-list */ for (n = 0; n < 1000; n++) { m = lwsac_use(&lwsac, sizeof(*m), 0); if (!m) return -1; m->payload = n; lws_list_ptr_insert(&list_head, &m->list_next, NULL); } /* * 2) report some debug info about the lwsac state... those 1000 * allocations actually only required 4 mallocs */ lwsac_info(lwsac); /* 3) iterate the list, accumulating the payloads */ acc = 0; iter = list_head; while (iter) { m = list_to_mytest(iter); acc += m->payload; lws_list_ptr_advance(iter); } if (acc != 499500) { lwsl_err("%s: FAIL acc %d\n", __func__, acc); return 1; } /* * 4) deallocate everything (lwsac is also set to NULL). It just * deallocates the 4 mallocs, everything in there is gone accordingly */ lwsac_free(&lwsac); lwsl_user("Completed: PASS\n"); return 0; } libwebsockets-4.3.5/minimal-examples/api-tests/api-test-secure-streams/000077500000000000000000000000001476025525100262335ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/api-tests/api-test-secure-streams/CMakeLists.txt000066400000000000000000000017771476025525100310070ustar00rootroot00000000000000project(lws-api-test-secure-streams C) cmake_minimum_required(VERSION 2.8.12) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(requirements 1) require_lws_config(LWS_WITH_SECURE_STREAMS 1 requirements) require_lws_config(LWS_WITH_TLS 1 requirements) require_lws_config(LWS_WITH_SYS_STATE 1 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY 0 requirements) if (requirements) add_executable(${PROJECT_NAME} main.c) if (LWS_CTEST_INTERNET_AVAILABLE) add_test(NAME api-test-secure-streams COMMAND ${PROJECT_NAME}) set_tests_properties(api-test-secure-streams PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/api-tests/api-test-secure-streams TIMEOUT 20) endif() if (websockets_shared) target_link_libraries(${PROJECT_NAME} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${PROJECT_NAME} websockets_shared) else() target_link_libraries(${PROJECT_NAME} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/api-tests/api-test-secure-streams/README.md000066400000000000000000000004531476025525100275140ustar00rootroot00000000000000# lws api test Secure Streams Performs some tests against httpbin.org server to check Secure Streams client performance ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 ``` $ ./lws-api-test-secure-streams ``` libwebsockets-4.3.5/minimal-examples/api-tests/api-test-secure-streams/main.c000066400000000000000000000230701476025525100273250ustar00rootroot00000000000000/* * lws-api-test-secure-streams * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * Let's exercise some basic SS / h1 functionality against httpbin.org */ #include #include #include static int interrupted, bad = 1; static lws_state_notify_link_t nl; static struct lws_context *context; static const char * const default_ss_policy = "{" "\"release\":" "\"01234567\"," "\"product\":" "\"myproduct\"," "\"schema-version\":" "1," #if defined(VIA_LOCALHOST_SOCKS) "\"via-socks5\":" "\"127.0.0.1:1080\"," #endif "\"retry\": [" /* named backoff / retry strategies */ "{\"default\": {" "\"backoff\": [" "1000," "2000," "3000," "5000," "10000" "]," "\"conceal\":" "5," "\"jitterpc\":" "20," "\"svalidping\":" "30," "\"svalidhup\":" "35" "}}" "]," "\"certs\": [" /* named individual certificates in BASE64 DER */ /* * Let's Encrypt certs for warmcat.com / libwebsockets.org * * We fetch the real policy from there using SS and switch to * using that. */ "{\"amz_root_ca1\": \"" "MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF" "ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6" "b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL" "MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv" "b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj" "ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM" "9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw" "IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6" "VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L" "93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm" "jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC" "AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA" "A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI" "U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs" "N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv" "o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU" "5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy" "rqXRfboQnoZsG4q5WTP468SQvvG5" "\"}" "]," "\"trust_stores\": [" /* named cert chains */ "{" "\"name\": \"amz\"," "\"stack\": [" "\"amz_root_ca1\"" "]" "}" "]," "\"s\": [" /* * "fetch_policy" decides from where the real policy * will be fetched, if present. Otherwise the initial * policy is treated as the whole, hardcoded, policy. */ "{\"httpbin_get\": {" "\"endpoint\":" "\"httpbin.org\"," "\"port\":" "443," "\"protocol\":" "\"h1\"," "\"http_method\":" "\"GET\"," "\"http_url\":" "\"/get\"," "\"tls\":" "true," "\"opportunistic\":" "true," "\"retry\":" "\"default\"," "\"tls_trust_store\":" "\"amz\"" "}}," "{\"httpbin_get404\": {" "\"endpoint\":" "\"httpbin.org\"," "\"port\":" "443," "\"protocol\":" "\"h1\"," "\"http_method\":" "\"GET\"," "\"http_url\":" "\"/status/404\"," "\"tls\":" "true," "\"opportunistic\":" "true," "\"retry\":" "\"default\"," "\"tls_trust_store\":" "\"amz\"" "}}," "{\"httpbin_post\": {" "\"endpoint\":" "\"httpbin.org\"," "\"port\":" "443," "\"protocol\":" "\"h1\"," "\"http_method\":" "\"POST\"," "\"http_url\":" "\"/post\"," "\"tls\":" "true," "\"opportunistic\":" "true," "\"retry\":" "\"default\"," "\"tls_trust_store\":" "\"amz\"" "}}" "}" "]}" ; typedef struct atss { const lws_ss_info_t *ssi; size_t send; char expect_nack; } atss_t; static const atss_t *next_test; typedef struct myss { struct lws_ss_handle *ss; void *opaque_data; /* ... application specific state ... */ lws_sorted_usec_list_t sul; size_t payload; size_t sent; char seen_eom; char ended_well; } myss_t; /* secure streams payload interface */ static lws_ss_state_return_t myss_rx(void *userobj, const uint8_t *buf, size_t len, int flags) { myss_t *m = (myss_t *)userobj; lwsl_hexdump_info(buf, len); m->payload += len; if (!(flags & LWSSS_FLAG_EOM)) m->seen_eom = 1; return 0; } static lws_ss_state_return_t myss_tx_get(void *userobj, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len, int *flags) { return 1; /* nothing to send */ } static lws_ss_state_return_t myss_tx_post(void *userobj, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len, int *flags) { myss_t *m = (myss_t *)userobj; size_t budget = (next_test->send - m->sent); if (!budget) return 1; if (*len < budget) budget = *len; if (!m->sent) *flags |= LWSSS_FLAG_SOM; memset(buf, 0x55, budget); *len = budget; m->sent += budget; if (m->sent != next_test->send) return lws_ss_request_tx(m->ss); *flags |= LWSSS_FLAG_EOM; return LWSSSSRET_OK; } static lws_ss_state_return_t myss_state(void *userobj, void *sh, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { myss_t *m = (myss_t *)userobj; lws_ss_state_return_t r; lwsl_notice("%s: %s, ord 0x%x\n", __func__, lws_ss_state_name((int)state), (unsigned int)ack); switch (state) { case LWSSSCS_CREATING: r = lws_ss_client_connect(m->ss); if (r) return r; if (next_test->send) return lws_ss_request_tx_len(m->ss, (unsigned long)next_test->send); break; case LWSSSCS_ALL_RETRIES_FAILED: lwsl_notice("%s: Connection failed\n", __func__); interrupted = 1; break; case LWSSSCS_QOS_NACK_REMOTE: if (next_test->expect_nack) goto happy; lwsl_notice("%s: remote NACK\n", __func__); interrupted = 1; break; case LWSSSCS_QOS_ACK_REMOTE: /* * To be satisfied, we want to see the ACK_REMOTE indicating * that the transaction went through; that we had the payload * EOM; and that we saw at least 200 + posted bytes response */ if (!m->seen_eom || m->payload < 200 + next_test->send) { lwsl_warn("%s: ACK_REMOTE but eom %d, payload %d\n", __func__, m->seen_eom, (int)m->payload); interrupted = 1; return -1; } happy: /* when we disconnect, we can go happily */ m->ended_well = 1; if (!(++next_test)->ssi) { lwsl_notice("%s: completed all tests\n", __func__); bad = 0; interrupted = 1; break; } if (lws_ss_create(context, 0, next_test->ssi, NULL, NULL, NULL, NULL)) { lwsl_err("%s: failed to create secure stream\n", __func__); return -1; } break; case LWSSSCS_DISCONNECTED: if (!m->ended_well) { lwsl_warn("%s: DISCONNECTED without good end\n", __func__); interrupted = 1; } break; default: break; } return LWSSSSRET_OK; } static const lws_ss_info_t ssi_get = { .handle_offset = offsetof(myss_t, ss), .opaque_user_data_offset = offsetof(myss_t, opaque_data), .rx = myss_rx, .tx = myss_tx_get, .state = myss_state, .user_alloc = sizeof(myss_t), .streamtype = "httpbin_get" }, ssi_get404 = { .handle_offset = offsetof(myss_t, ss), .opaque_user_data_offset = offsetof(myss_t, opaque_data), .rx = myss_rx, .tx = myss_tx_get, .state = myss_state, .user_alloc = sizeof(myss_t), .streamtype = "httpbin_get404" }, ssi_post = { .handle_offset = offsetof(myss_t, ss), .opaque_user_data_offset = offsetof(myss_t, opaque_data), .rx = myss_rx, .tx = myss_tx_post, .state = myss_state, .user_alloc = sizeof(myss_t), .streamtype = "httpbin_post" }; static const atss_t test_list[] = { { .ssi = &ssi_get }, { .ssi = &ssi_get404, .expect_nack = 1 }, { .ssi = &ssi_post, .send = 4096 }, { .ssi = NULL } }; static int app_system_state_nf(lws_state_manager_t *mgr, lws_state_notify_link_t *link, int current, int target) { struct lws_context *context = lws_system_context_from_system_mgr(mgr); /* * For the things we care about, let's notice if we are trying to get * past them when we haven't solved them yet, and make the system * state wait while we trigger the dependent action. */ switch (target) { case LWS_SYSTATE_OPERATIONAL: if (current == LWS_SYSTATE_OPERATIONAL) { next_test = &test_list[0]; if (lws_ss_create(context, 0, next_test->ssi, NULL, NULL, NULL, NULL)) { lwsl_err("%s: failed to create secure stream\n", __func__); return -1; } } break; } return 0; } static lws_state_notify_link_t * const app_notifier_list[] = { &nl, NULL }; static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; int n = 0; signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); lws_cmdline_option_handle_builtin(argc, argv, &info); lwsl_user("LWS secure streams test client [-d]\n"); /* these options are mutually exclusive if given */ info.fd_limit_per_thread = 1 + 6 + 1; info.port = CONTEXT_PORT_NO_LISTEN; info.pss_policies_json = default_ss_policy; info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_H2_JUST_FIX_WINDOW_UPDATE_OVERFLOW; /* integrate us with lws system state management when context created */ nl.name = "app"; nl.notify_cb = app_system_state_nf; info.register_notifier_list = app_notifier_list; /* create the context */ context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } /* the event loop */ while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); lwsl_user("Completed: %s\n", bad ? "failed" : "OK"); return bad; } libwebsockets-4.3.5/minimal-examples/api-tests/api-test-smtp_client/000077500000000000000000000000001476025525100256125ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/api-tests/api-test-smtp_client/CMakeLists.txt000066400000000000000000000012111476025525100303450ustar00rootroot00000000000000project(lws-unit-tests-smtp-client C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-unit-tests-smtp-client) set(SRCS main.c) set(requirements 1) require_lws_config(LWS_WITH_SMTP 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/api-tests/api-test-smtp_client/README.md000066400000000000000000000026761476025525100271040ustar00rootroot00000000000000# lws api test smtp client Performs unit tests on the lws SMTP client abstract protocol implementation. The first test "sends mail to a server" (actually is prompted by test vectors that look like a server) and the second test confirm it can handle rejection by the "server" cleanly. ## build Requires lws was built with `-DLWS_WITH_SMTP=1` at cmake. ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -r |Send the test email to this email address ``` $ ./lws-api-test-smtp_client [2019/06/28 21:56:41:0711] USER: LWS API selftest: SMTP client unit tests [2019/06/28 21:56:41:1114] NOTICE: test_sequencer_cb: test-seq: created [2019/06/28 21:56:41:1259] NOTICE: unit_test_sequencer_cb: unit-test-seq: created [2019/06/28 21:56:41:1272] NOTICE: lws_atcut_client_conn: smtp: test 'sending': start [2019/06/28 21:56:41:1441] NOTICE: unit_test_sequencer_cb: unit-test-seq: created [2019/06/28 21:56:41:1442] NOTICE: lws_atcut_client_conn: smtp: test 'rejected': start [2019/06/28 21:56:41:1453] NOTICE: lws_smtp_client_abs_rx: bad response from server: 500 (state 4) 500 Service Unavailable [2019/06/28 21:56:41:1467] USER: test_sequencer_cb: sequence completed OK [2019/06/28 21:56:41:1474] USER: main: 2 tests 0 fail [2019/06/28 21:56:41:1476] USER: test 0: PASS [2019/06/28 21:56:41:1478] USER: test 1: PASS [2019/06/28 21:56:41:1480] USER: Completed: PASS ``` libwebsockets-4.3.5/minimal-examples/api-tests/api-test-smtp_client/main.c000066400000000000000000000133541476025525100267100ustar00rootroot00000000000000/* * lws-unit-tests-smtp-client * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This performs unit tests for the SMTP client abstract protocol */ #include #include static int interrupted, results[10], count_tests, count_passes; static int email_sent_or_failed(struct lws_smtp_email *email, void *buf, size_t len) { free(email); return 0; } /* * The test helper calls this on the instance it created to prepare it for * the test. In our case, we need to queue up a test email to send on the * smtp client abstract protocol. */ static int smtp_test_instance_init(lws_abs_t *instance) { lws_smtp_email_t *email = (lws_smtp_email_t *) malloc(sizeof(*email) + 2048); if (!email) return 1; /* attach an email to it */ memset(email, 0, sizeof(*email)); email->data = NULL /* email specific user data */; email->email_from = "noreply@warmcat.com"; email->email_to = "andy@warmcat.com"; email->payload = (void *)&email[1]; lws_snprintf((char *)email->payload, 2048, "From: noreply@example.com\n" "To: %s\n" "Subject: Test email for lws smtp-client\n" "\n" "Hello this was an api test for lws smtp-client\n" "\r\n.\r\n", "andy@warmcat.com"); email->done = email_sent_or_failed; if (lws_smtpc_add_email(instance, email)) { lwsl_err("%s: failed to add email\n", __func__); return 1; } return 0; } /* * from https://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol * * test vector sent to protocol * test vector received from protocol */ static lws_unit_test_packet_t test_send1[] = { { "220 smtp.example.com ESMTP Postfix", smtp_test_instance_init, 34, LWS_AUT_EXPECT_RX }, { "HELO lws-test-client\x0a", NULL, 21, LWS_AUT_EXPECT_TX }, { "250 smtp.example.com, I am glad to meet you", NULL, 43, LWS_AUT_EXPECT_RX }, { "MAIL FROM: \x0a", NULL, 33, LWS_AUT_EXPECT_TX }, { "250 Ok", NULL, 6, LWS_AUT_EXPECT_RX }, { "RCPT TO: \x0a", NULL, 28, LWS_AUT_EXPECT_TX }, { "250 Ok", NULL, 6, LWS_AUT_EXPECT_RX }, { "DATA\x0a", NULL, 5, LWS_AUT_EXPECT_TX }, { "354 End data with .\x0a", NULL, 35, LWS_AUT_EXPECT_RX }, { "From: noreply@example.com\n" "To: andy@warmcat.com\n" "Subject: Test email for lws smtp-client\n" "\n" "Hello this was an api test for lws smtp-client\n" "\r\n.\r\n", NULL, 27 + 21 + 39 + 1 + 47 + 5, LWS_AUT_EXPECT_TX }, { "250 Ok: queued as 12345\x0a", NULL, 23, LWS_AUT_EXPECT_RX }, { "quit\x0a", NULL, 5, LWS_AUT_EXPECT_TX }, { "221 Bye\x0a", NULL, 7, LWS_AUT_EXPECT_RX | LWS_AUT_EXPECT_LOCAL_CLOSE | LWS_AUT_EXPECT_DO_REMOTE_CLOSE | LWS_AUT_EXPECT_TEST_END }, { /* sentinel */ } }; static lws_unit_test_packet_t test_send2[] = { { "220 smtp.example.com ESMTP Postfix", smtp_test_instance_init, 34, LWS_AUT_EXPECT_RX }, { "HELO lws-test-client\x0a", NULL, 21, LWS_AUT_EXPECT_TX }, { "250 smtp.example.com, I am glad to meet you", NULL, 43, LWS_AUT_EXPECT_RX }, { "MAIL FROM: \x0a", NULL, 33, LWS_AUT_EXPECT_TX }, { "500 Service Unavailable", NULL, 23, LWS_AUT_EXPECT_RX | LWS_AUT_EXPECT_DO_REMOTE_CLOSE | LWS_AUT_EXPECT_TEST_END }, { /* sentinel */ } }; static lws_unit_test_t tests[] = { { "sending", test_send1, 3 }, { "rejected", test_send2, 3 }, { } /* sentinel */ }; static void sigint_handler(int sig) { interrupted = 1; } /* * set the HELO our SMTP client will use */ static const lws_token_map_t smtp_ap_tokens[] = { { .u = { .value = "lws-test-client" }, .name_index = LTMI_PSMTP_V_HELO, }, { /* sentinel */ } }; void tests_completion_cb(const void *cb_user) { interrupted = 1; } int main(int argc, const char **argv) { int n = 1, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; struct lws_context_creation_info info; lws_test_sequencer_args_t args; struct lws_context *context; lws_abs_t *abs = NULL; struct lws_vhost *vh; const char *p; /* the normal lws init */ signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS API selftest: SMTP client unit tests\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = CONTEXT_PORT_NO_LISTEN; info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } vh = lws_create_vhost(context, &info); if (!vh) { lwsl_err("Failed to create first vhost\n"); goto bail1; } /* create the abs used to create connections */ abs = lws_abstract_alloc(vh, NULL, "smtp.unit_test", &smtp_ap_tokens[0], NULL); if (!abs) goto bail1; /* configure the test sequencer */ args.abs = abs; args.tests = tests; args.results = results; args.results_max = LWS_ARRAY_SIZE(results); args.count_tests = &count_tests; args.count_passes = &count_passes; args.cb = tests_completion_cb; args.cb_user = NULL; if (lws_abs_unit_test_sequencer(&args)) { lwsl_err("%s: failed to create test sequencer\n", __func__); goto bail1; } /* the usual lws event loop */ while (n >= 0 && !interrupted) n = lws_service(context, 0); /* describe the overall test results */ lwsl_user("%s: %d tests %d fail\n", __func__, count_tests, count_tests - count_passes); for (n = 0; n < count_tests; n++) lwsl_user(" test %d: %s\n", n, lws_unit_test_result_name(results[n])); bail1: lwsl_user("Completed: %s\n", !count_tests || count_passes != count_tests ? "FAIL" : "PASS"); lws_context_destroy(context); lws_abstract_free(&abs); return !count_tests || count_passes != count_tests; } libwebsockets-4.3.5/minimal-examples/client-server/000077500000000000000000000000001476025525100224165ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/client-server/README.md000066400000000000000000000004441476025525100236770ustar00rootroot00000000000000|name|demonstrates| ---|--- minimal-ws-proxy|Serves an index.html over http that connects back to the ws server, and maintains a ws client connection of its own at the same time to https://libwebsockets.org dumb-increment-protocol to feed a ringbuffer that is sent to all connected browsers. libwebsockets-4.3.5/minimal-examples/client-server/minimal-ws-proxy/000077500000000000000000000000001476025525100256525ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/client-server/minimal-ws-proxy/CMakeLists.txt000066400000000000000000000013541476025525100304150ustar00rootroot00000000000000project(lws-minimal-ws-proxy C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-ws-proxy) set(SRCS minimal-ws-proxy.c) set(requirements 1) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif()libwebsockets-4.3.5/minimal-examples/client-server/minimal-ws-proxy/README.md000066400000000000000000000025171476025525100271360ustar00rootroot00000000000000# lws minimal ws proxy ## Build ``` $ cmake . && make ``` ## Description This is the same as minimal-ws-server-ring, but with the inclusion of a ws client connection to https://libwebsockets.org using the dumb-increment protocol feeding the ringbuffer. Each client that connect to this server receives the content that had arrived on the client connection feeding the ringbuffer proxied to their browser window over a ws connection. ## Usage ``` $ ./lws-minimal-ws-proxy [2018/03/14 17:50:10:6938] USER: LWS minimal ws proxy | visit http://localhost:7681 [2018/03/14 17:50:10:6955] NOTICE: Creating Vhost 'default' port 7681, 2 protocols, IPv6 off [2018/03/14 17:50:10:6955] NOTICE: Using non-SSL mode [2018/03/14 17:50:10:7035] NOTICE: created client ssl context for default [2018/03/14 17:50:11:7047] NOTICE: binding to lws-minimal-proxy [2018/03/14 17:50:11:7047] NOTICE: lws_client_connect_2: 0x872e60: address libwebsockets.org [2018/03/14 17:50:12:3282] NOTICE: lws_client_connect_2: 0x872e60: address libwebsockets.org [2018/03/14 17:50:13:8195] USER: callback_minimal: established ``` Visit http://localhost:7681 on multiple browser windows Data received on the remote wss connection is copied to all open browser windows. A ringbuffer holds up to 8 lines of text in the server, and the browser shows the last 20 lines of received text. libwebsockets-4.3.5/minimal-examples/client-server/minimal-ws-proxy/minimal-ws-proxy.c000066400000000000000000000053751476025525100312640ustar00rootroot00000000000000/* * lws-minimal-ws-proxy * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws, * with an added websocket proxy distributing what is received on a * dumb-increment wss connection to https://libwebsockets.org to all * browsers connected to this server. * * To keep it simple, it serves stuff in the subdirectory "./mount-origin" of * the directory it was started in. * You can change that by changing mount.origin. */ #include #include #include #define LWS_PLUGIN_STATIC #include "protocol_lws_minimal.c" static struct lws_protocols protocols[] = { { "http", lws_callback_http_dummy, 0, 0, 0, NULL, 0}, LWS_PLUGIN_PROTOCOL_MINIMAL, LWS_PROTOCOL_LIST_TERM }; static int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws proxy | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; info.port = 7681; info.mounts = &mount; info.protocols = protocols; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/client-server/minimal-ws-proxy/mount-origin/000077500000000000000000000000001476025525100303015ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/client-server/minimal-ws-proxy/mount-origin/example.js000066400000000000000000000025261476025525100322770ustar00rootroot00000000000000var head = 0, tail = 0, ring = new Array(); function get_appropriate_ws_url(extra_url) { var pcol; var u = document.URL; /* * We open the websocket encrypted if this page came on an * https:// url itself, otherwise unencrypted */ if (u.substring(0, 5) === "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) === "http") u = u.substr(7); } u = u.split("/"); /* + "/xxx" bit is for IE10 workaround */ return pcol + u[0] + "/" + extra_url; } function new_ws(urlpath, protocol) { return new WebSocket(urlpath, protocol); } document.addEventListener("DOMContentLoaded", function() { var ws = new_ws(get_appropriate_ws_url(""), "lws-minimal-proxy"); try { ws.onopen = function() { document.getElementById("r").disabled = 0; }; ws.onmessage =function got_packet(msg) { var n, s = ""; ring[head] = msg.data + "\n"; head = (head + 1) % 20; if (tail === head) tail = (tail + 1) % 20; n = tail; do { s = s + ring[n]; n = (n + 1) % 20; } while (n !== head); document.getElementById("r").value = s; document.getElementById("r").scrollTop = document.getElementById("r").scrollHeight; }; ws.onclose = function(){ document.getElementById("r").disabled = 1; }; } catch(exception) { alert("

    Error " + exception); } }, false); libwebsockets-4.3.5/minimal-examples/client-server/minimal-ws-proxy/mount-origin/favicon.ico000066400000000000000000000025761476025525100324340ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-4.3.5/minimal-examples/client-server/minimal-ws-proxy/mount-origin/index.html000066400000000000000000000010561476025525100323000ustar00rootroot00000000000000
    Minimal ws server proxy example.
    The server makes a dumb-increment-protocol wss connection
    to libwebsockets.org. It proxies what it was sent to
    all browsers open on this page.
    The textarea show the last 20 lines received.


    libwebsockets.org-logo.svg000066400000000000000000000226061476025525100353350ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/client-server/minimal-ws-proxy/mount-origin image/svg+xml libwebsockets-4.3.5/minimal-examples/client-server/minimal-ws-proxy/mount-origin/strict-csp.svg000066400000000000000000000302361476025525100331210ustar00rootroot00000000000000 libwebsockets-4.3.5/minimal-examples/client-server/minimal-ws-proxy/protocol_lws_minimal.c000066400000000000000000000137371476025525100322650ustar00rootroot00000000000000/* * ws protocol handler plugin for "lws-minimal" * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This version uses an lws_ring ringbuffer to cache up to 8 messages at a time, * so it's not so easy to lose messages. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include #include /* one of these created for each message */ struct msg { void *payload; /* is malloc'd */ size_t len; }; /* one of these is created for each client connecting to us */ struct per_session_data__minimal { struct per_session_data__minimal *pss_list; struct lws *wsi; uint32_t tail; }; /* one of these is created for each vhost our protocol is used with */ struct per_vhost_data__minimal { struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; lws_sorted_usec_list_t sul; struct per_session_data__minimal *pss_list; /* linked-list of live pss*/ struct lws_ring *ring; /* ringbuffer holding unsent messages */ struct lws_client_connect_info i; struct lws *client_wsi; }; /* destroys the message when everyone has had a copy of it */ static void __minimal_destroy_message(void *_msg) { struct msg *msg = _msg; free(msg->payload); msg->payload = NULL; msg->len = 0; } static void sul_connect_attempt(struct lws_sorted_usec_list *sul) { struct per_vhost_data__minimal *vhd = lws_container_of(sul, struct per_vhost_data__minimal, sul); vhd->i.context = vhd->context; vhd->i.port = 443; vhd->i.address = "libwebsockets.org"; vhd->i.path = "/"; vhd->i.host = vhd->i.address; vhd->i.origin = vhd->i.address; vhd->i.ssl_connection = 1; vhd->i.protocol = "dumb-increment-protocol"; vhd->i.local_protocol_name = "lws-minimal-proxy"; vhd->i.pwsi = &vhd->client_wsi; if (!lws_client_connect_via_info(&vhd->i)) lws_sul_schedule(vhd->context, 0, &vhd->sul, sul_connect_attempt, 10 * LWS_US_PER_SEC); } static int callback_minimal(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__minimal *pss = (struct per_session_data__minimal *)user; struct per_vhost_data__minimal *vhd = (struct per_vhost_data__minimal *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); const struct msg *pmsg; struct msg amsg; int m; switch (reason) { /* --- protocol lifecycle callbacks --- */ case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__minimal)); vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); vhd->ring = lws_ring_create(sizeof(struct msg), 8, __minimal_destroy_message); if (!vhd->ring) return 1; sul_connect_attempt(&vhd->sul); break; case LWS_CALLBACK_PROTOCOL_DESTROY: lws_ring_destroy(vhd->ring); lws_sul_cancel(&vhd->sul); break; /* --- serving callbacks --- */ case LWS_CALLBACK_ESTABLISHED: /* add ourselves to the list of live pss held in the vhd */ lws_ll_fwd_insert(pss, pss_list, vhd->pss_list); pss->tail = lws_ring_get_oldest_tail(vhd->ring); pss->wsi = wsi; break; case LWS_CALLBACK_CLOSED: /* remove our closing pss from the list of live pss */ lws_ll_fwd_remove(struct per_session_data__minimal, pss_list, pss, vhd->pss_list); break; case LWS_CALLBACK_SERVER_WRITEABLE: pmsg = lws_ring_get_element(vhd->ring, &pss->tail); if (!pmsg) break; /* notice we allowed for LWS_PRE in the payload already */ m = lws_write(wsi, ((unsigned char *)pmsg->payload) + LWS_PRE, pmsg->len, LWS_WRITE_TEXT); if (m < (int)pmsg->len) { lwsl_err("ERROR %d writing to ws socket\n", m); return -1; } lws_ring_consume_and_update_oldest_tail( vhd->ring, /* lws_ring object */ struct per_session_data__minimal, /* type of objects with tails */ &pss->tail, /* tail of guy doing the consuming */ 1, /* number of payload objects being consumed */ vhd->pss_list, /* head of list of objects with tails */ tail, /* member name of tail in objects with tails */ pss_list /* member name of next object in objects with tails */ ); /* more to do? */ if (lws_ring_get_element(vhd->ring, &pss->tail)) /* come back as soon as we can write more */ lws_callback_on_writable(pss->wsi); break; /* --- client callbacks --- */ case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); vhd->client_wsi = NULL; lws_sul_schedule(vhd->context, 0, &vhd->sul, sul_connect_attempt, LWS_US_PER_SEC); break; case LWS_CALLBACK_CLIENT_ESTABLISHED: lwsl_user("%s: established\n", __func__); break; case LWS_CALLBACK_CLIENT_RECEIVE: /* if no clients, just drop incoming */ if (!vhd->pss_list) break; if (!lws_ring_get_count_free_elements(vhd->ring)) { lwsl_user("dropping!\n"); break; } amsg.len = len; /* notice we over-allocate by LWS_PRE */ amsg.payload = malloc(LWS_PRE + len); if (!amsg.payload) { lwsl_user("OOM: dropping\n"); break; } memcpy((char *)amsg.payload + LWS_PRE, in, len); if (!lws_ring_insert(vhd->ring, &amsg, 1)) { __minimal_destroy_message(&amsg); lwsl_user("dropping!\n"); break; } /* * let everybody know we want to write something on them * as soon as they are ready */ lws_start_foreach_llp(struct per_session_data__minimal **, ppss, vhd->pss_list) { lws_callback_on_writable((*ppss)->wsi); } lws_end_foreach_llp(ppss, pss_list); break; case LWS_CALLBACK_CLIENT_CLOSED: vhd->client_wsi = NULL; lws_sul_schedule(vhd->context, 0, &vhd->sul, sul_connect_attempt, LWS_US_PER_SEC); break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_MINIMAL \ { \ "lws-minimal-proxy", \ callback_minimal, \ sizeof(struct per_session_data__minimal), \ 128, \ 0, NULL, 0 \ } libwebsockets-4.3.5/minimal-examples/crypto/000077500000000000000000000000001476025525100211545ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/crypto/README.md000066400000000000000000000003451476025525100224350ustar00rootroot00000000000000|name|tests| ---|--- minimal-crypto-jwe|Examples for lws RFC7516 JWE apis minimal-crypto-jwk|Examples for lws RFC7517 JWK apis minimal-crypto-jws|Examples for lws RFC7515 JWS apis minimal-crypto-x509|Examples for lws X.509 apis libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-cose-key/000077500000000000000000000000001476025525100256355ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-cose-key/CMakeLists.txt000066400000000000000000000035361476025525100304040ustar00rootroot00000000000000project(lws-crypto-cose-key C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-crypto-cose-key) set(SRCS main.c) set(requirements 1) require_lws_config(LWS_WITH_COSE 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) add_test(NAME crypto-cose-key-1 COMMAND lws-crypto-cose-key --stdin set1.cks ) add_test(NAME crypto-cose-key-2 COMMAND lws-crypto-cose-key --kty EC2 --curve P-256 --kid ctest-256 --stdout ctest-ec-256.key) add_test(NAME crypto-cose-key-3 COMMAND lws-crypto-cose-key --kty EC2 --curve P-384 --kid ctest-384 --stdout ctest-ec-384.key) add_test(NAME crypto-cose-key-4 COMMAND lws-crypto-cose-key --kty EC2 --curve P-521 --kid ctest-512 --stdout ctest-ec-512.key) add_test(NAME crypto-cose-key-5 COMMAND lws-crypto-cose-key --kty SYMMETRIC --bits 256 --stdout ctest-sym-256.key) add_test(NAME crypto-cose-key-6 COMMAND lws-crypto-cose-key --kty RSA --bits 2048 --stdout ctest-rsa-2048.key) add_test(NAME crypto-cose-key-7 COMMAND lws-crypto-cose-key --stdin ctest-rsa-2048.key) set_tests_properties(crypto-cose-key-1 crypto-cose-key-2 crypto-cose-key-3 crypto-cose-key-4 crypto-cose-key-5 crypto-cose-key-6 crypto-cose-key-7 PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/crypto/minimal-crypto-cose-key TIMEOUT 5) set_tests_properties(crypto-cose-key-7 PROPERTIES DEPENDS crypto-cose-key-6) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-cose-key/README.md000066400000000000000000000113531476025525100271170ustar00rootroot00000000000000# lws minimal example for cose_key Demonstrates how to create and dump cose_keys. ## Dump key or key_set Pipe a cose_key or cose_key_set into stdin to get a textual dump of all the keys inside. You can optionally use --kid kid or --kid-hex HEXSTRING to dump one key from a set. ``` $ cat set1.cks | ./bin/lws-crypto-cose-key $ cat set1.cks | ./bin/lws-crypto-cose-key --kid 11 ``` ## Create keys Stdin is not used, give parameters for the kty and kid etc to create a new key on stdout (which can be redirected to a file). ``` $ ./bin/lws-crypto-cose-key --kty EC2 --curve P-521 --kid sec512 >ec512.key ``` ## build ``` $ cmake . && make ``` ## usage |Option|Meaning| |---|---| |--kty type|Key type, one of OKP, EC2, RSA or SYMMETRIC| |-k \|One or a set of cose_keys| |--kid string|Specifies the key ID to use as a string| |--kid-hex HEXSTRING|Specifies the key ID to use as a hex blob| |--curve curve|For EC type key creation, specify the curve| |--stdin filepath|Makes tool fetch from filepath instead of stdin (useful for CI)| |--stdout filepath|Makes tool write to filepath instead of stdout (useful for CI)| HEXSTRING above means a string like `1a2b3c` ## Examples ### cose_key dumping ``` $ cat set1.cks | ./bin/lws-crypto-cose-key [2021/07/30 10:14:31:0420] U: LWS cose-key example tool -k keyset [-s alg-name kid ] [2021/07/30 10:14:31:0780] N: lws_create_context: LWS: 4.2.99-v4.2.0-134-g8433c8b459, NET CLI SRV H1 H2 WS ConMon IPV6-on [2021/07/30 10:14:31:0892] N: ++ [wsi|0|pipe] (1) [2021/07/30 10:14:31:0926] N: ++ [vh|0|netlink] (1) [2021/07/30 10:14:31:0977] N: ++ [vh|1|default||-1] (2) [2021/07/30 10:14:31:1057] N: main: importing Cose key #1 kty: EC2 kid: 11 kty: P-256 x: bac5b11cad8f99f9c72b05cf4b9e26d244dc189f745228255a219a86d6a09eff d: 57c92077664146e876760c9520d054aa93c3afb04e306705db6090308507b4d3 y: 20138bf82dc1b6d562be0fa54ab7804a3a64b6d72ccfed6b6fb6ed28bbfc117e Cose key #2 kty: EC2 kid: meriadoc.brandybuck@buckland.example kty: P-256 x: 65eda5a12577c2bae829437fe338701a10aaa375e1bb5b5de108de439c08551d d: aff907c99f9ad3aae6c4cdf21122bce2bd68b5283e6907154ad911840fa208cf y: 1e52ed75701163f7f9e40ddf9f341b3dc9ba860af7e0ca7ca7e9eecd0084d19c Cose key #3 kty: SYMMETRIC kid: our-secret k: 849b57219dae48de646d07dbb533566e976686457c1491be3a76dcea6c427188 Cose key #4 kty: EC2 kid: bilbo.baggins@hobbiton.example kty: P-521 x: 0072992cb3ac08ecf3e5c63dedec0d51a8c1f79ef2f82f94f3c737bf5de7986671eac625fe8257bbd0394644caaa3aaf8f27a4585fbbcad0f2457620085e5c8f42ad d: 00085138ddabf5ca975f5860f91a08e91d6d5f9a76ad4018766a476680b55cd339e8ab6c72b5facdb2a2a50ac25bd086647dd3e2e6e99e84ca2c3609fdf177feb26d y: 01dca6947bce88bc5790485ac97427342bc35f887d86d65a089377e247e60baa55e4e8501e2ada5724ac51d6909008033ebc10ac999b9d7f5cc2519f3fe1ea1d9475 Cose key #5 kty: SYMMETRIC kid: our-secret2 k: 849b5786457c1491be3a76dcea6c4271 Cose key #6 kty: EC2 kid: peregrin.took@tuckborough.example kty: P-256 x: 98f50a4ff6c05861c8860d13a638ea56c3f5ad7590bbfbf054e1c7b4d91d6280 d: 02d1f7e6f26c43d4868d87ceb2353161740aacf1f7163647984b522a848df1c3 y: f01400b089867804b8e9fc96c3932161f1934f4223069170d924b7e03bf822bb Cose key #7 kty: SYMMETRIC kid: 018c0ae5-4d9b-471b-bfd6-eef314bc7037 use: 849b57219dae48de646d07dbb533566e976686457c1491be3a76dcea6c427188 Cose key #8 kty: SYMMETRIC kid: sec-48 k: 849b57219dae48de646d07dbb533566e976686457c1491be3a76dcea6c42718800112233778899aa2122232425262728 Cose key #9 kty: SYMMETRIC kid: sec-64 k: 849b57219dae48de646d07dbb533566e976686457c1491be3a76dcea6c42718800112233778899aa2122232425262728aabbccddeeffa5a6a7a8a9a0b1b2b3b4 Cose key #10 kty: EC2 kid: sec384 kty: P-384 x: ea2866349fe3a2f9ad4d6bfe7c30c527436e901c5fb22210b67b2150574ffcd0b1dd8c43d5d1e3d5cb849ecec202117c d: 4d46a58480d43d5454307edcf501e098ef7c0186cc6b56b41dfd13fe4b9b1ab1425851cf5b23e6636ed18f5bbdde1896 y: 4c3d245515a688ef25ff68034089ca4f10a01bef51cc57309f12919c3d484142368795c6f2a5d30af650b4e12d0133e4 Cose key #11 kty: EC2 kid: sec512 kty: P-521 x: 003b81ed66d8a2194b42f29ecb2c9ae48199be695924804a8407194ed0e172f39693f870f32463e2d36950034a21901487c5a0c43a1713a818fb89fa8a5b3b2dc181 d: 013e0f06ce394ac14a3df3953fc560679ad0dee14779ef0d475787451fca71e3b4b827b6f7cedcf00e23c716fb829b5419234ba5c92c33e0bc94351fe97be21f2b82 y: 004b9b6b0adf41913b5d700cf43bfe0ee8b79eb58fc308509e574fcb910b3fd5a2ad585affc6776f7fc9d4ff48f5923fe900660ecc6e3720f89c1363eecfffb38b5b [2021/07/30 10:14:31:1430] N: -- [wsi|0|pipe] (0) 52.763ms [2021/07/30 10:14:31:1441] N: -- [vh|0|netlink] (1) 51.437ms [2021/07/30 10:14:31:1491] N: -- [vh|1|default||-1] (0) 51.591ms [2021/07/30 10:14:31:1536] N: main: PASS ``` ### cose_key creation ``` $ ./bin/lws-crypto-cose-key --kty EC2 --curve P-521 --kid sec512 >ec512.key ``` libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-cose-key/main.c000066400000000000000000000151601476025525100267300ustar00rootroot00000000000000/* * lws-minimal-crypto-cose-key * * Written in 2010-2021 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include #include #include #include #include static int fdin = 0, fdout = 1; static const char *meta_names[] = { "kty", "kid", "use", "key_ops", "base_iv", "alg" }; static const char *oct_names[] = { "k" }; static const char *rsa_names[] = { "e", "n", "d", "p", "q", "dp", "dq", "qi", "other", "ri", "di", "ti" }; static const char *ec_names[] = { "crv", "x", "d", "y", }; static void cose_key_dump(const struct lws_cose_key *ck) { const char **enames; char hex[2048], dump[3072]; int elems; size_t l; int n; (void)enames; (void)meta_names; switch (ck->gencrypto_kty) { case LWS_GENCRYPTO_KTY_OCT: elems = LWS_GENCRYPTO_OCT_KEYEL_COUNT; enames = oct_names; break; case LWS_GENCRYPTO_KTY_RSA: elems = LWS_GENCRYPTO_RSA_KEYEL_COUNT; enames = rsa_names; break; case LWS_GENCRYPTO_KTY_EC: elems = LWS_GENCRYPTO_EC_KEYEL_COUNT; enames = ec_names; break; default: lwsl_err("%s: jwk %p: unknown type\n", __func__, ck); return; } for (n = 0; n < LWS_COUNT_COSE_KEY_ELEMENTS; n++) { if (ck->meta[n].buf) { if (n < 2) { l = (size_t)lws_snprintf(dump, sizeof(dump), " %s: %.*s\n", meta_names[n], (int)ck->meta[n].len, ck->meta[n].buf); write(fdout, dump, l); } else { l = (size_t)lws_snprintf(dump, sizeof(dump), " %s: ", meta_names[n]); write(fdout, dump, l); lws_hex_from_byte_array(ck->meta[n].buf, ck->meta[n].len, hex, sizeof(hex)); write(fdout, hex, strlen(hex)); write(fdout, "\n", 1); } } } for (n = 0; n < elems; n++) { if (ck->e[n].buf) { if (!n && ck->gencrypto_kty == LWS_GENCRYPTO_KTY_EC) { l = (size_t)lws_snprintf(dump, sizeof(dump), " %s: %.*s\n", enames[n], (int)ck->e[n].len, ck->e[n].buf); write(fdout, dump, l); } else { l = (size_t)lws_snprintf(dump, sizeof(dump), " %s: ", enames[n]); write(fdout, dump, l); lws_hex_from_byte_array(ck->e[n].buf, ck->e[n].len, hex, sizeof(hex)); write(fdout, hex, strlen(hex)); write(fdout, "\n", 1); } } } } int main(int argc, const char **argv) { uint8_t *kid = NULL, ktmp[4096], set_temp[32 * 1024], temp[256]; int result = 1, bits = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; struct lws_context_creation_info info; size_t kid_len = 0, stp = 0; struct lws_context *context; lws_cose_key_t *ck = NULL; cose_param_t cose_kty = 0; lws_dll2_owner_t set; const char *p, *crv; lws_lec_pctx_t lec; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS cose-key example tool -k keyset [-s alg-name kid ]\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ #if defined(LWS_WITH_NETWORK) info.port = CONTEXT_PORT_NO_LISTEN; #endif context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } if ((p = lws_cmdline_option(argc, argv, "--stdin"))) { fdin = open(p, LWS_O_RDONLY, 0); if (fdin < 0) { lwsl_err("%s: unable to open stdin file\n", __func__); return 1; } } if ((p = lws_cmdline_option(argc, argv, "--stdout"))) { fdout = open(p, LWS_O_WRONLY | LWS_O_CREAT | LWS_O_TRUNC, 0600); if (fdout < 0) { lwsl_err("%s: unable to open stdout file\n", __func__); goto bail_early; } } if ((p = lws_cmdline_option(argc, argv, "--kid"))) { kid = (uint8_t *)p; kid_len = strlen(p); //lwsl_hexdump_notice(kid, kid_len); } if ((p = lws_cmdline_option(argc, argv, "--kid-hex"))) { kid_len = (size_t)lws_hex_to_byte_array(p, ktmp, sizeof(ktmp)); kid = (uint8_t *)ktmp; } /* * If we have some stdin queued up, we understand we are dumping * an existing cose_key or key_set from stdin */ if (!fdin) { struct timeval timeout; fd_set fds; FD_ZERO(&fds); FD_SET(0, &fds); timeout.tv_sec = 0; timeout.tv_usec = 1000; if (select(fdin + 1, &fds, NULL, NULL, &timeout) < 0) goto no_stdin; if (!FD_ISSET(0, &fds)) goto no_stdin; } do { int n = (int)read(fdin, temp, sizeof(temp)); if (n < 0) goto bail; if (!n) { int kc = 0; if (!stp) /* there was no stdin */ break; lwsl_notice("%s: importing\n", __func__); lws_dll2_owner_clear(&set); ck = lws_cose_key_import(&set, NULL, NULL, set_temp, stp); if (!ck) { lwsl_err("%s: import failed\n", __func__); goto bail; } lws_start_foreach_dll(struct lws_dll2 *, p, lws_dll2_get_head(&set)) { lws_cose_key_t *ck = lws_container_of(p, lws_cose_key_t, list); struct lws_gencrypto_keyelem *ke = &ck->meta[COSEKEY_META_KID]; kc++; if (!kid_len || (ke->len && ke->len == (uint32_t)kid_len && !memcmp(ke->buf, kid, kid_len))) { printf("Cose key #%d\n", kc); cose_key_dump(ck); } } lws_end_foreach_dll(p); lws_cose_key_set_destroy(&set); result = 0; goto bail; } if (stp + (size_t)n > sizeof(set_temp)) { lwsl_err("%s: stdin bigger than our buffer\n", __func__); goto bail; } memcpy(set_temp + stp, temp, (size_t)n); stp += (size_t)n; } while (1); no_stdin: /* * */ p = lws_cmdline_option(argc, argv, "--kty"); if (!p) { lwsl_err("%s: use --kty OKP|EC2|RSA|SYMMETRIC\n", __func__); goto bail; } if (!strcmp(p, "OKP")) cose_kty = LWSCOSE_WKKTV_OKP; if (!strcmp(p, "EC2")) cose_kty = LWSCOSE_WKKTV_EC2; if (!strcmp(p, "RSA")) cose_kty = LWSCOSE_WKKTV_RSA; if (!strcmp(p, "SYMMETRIC") || !strcmp(p, "SYM")) cose_kty = LWSCOSE_WKKTV_SYMMETRIC; if (!cose_kty) { lwsl_err("%s: use --kty OKP|EC2|RSA|SYMMETRIC\n", __func__); goto bail; } crv = NULL; if (cose_kty == LWSCOSE_WKKTV_OKP || cose_kty == LWSCOSE_WKKTV_EC2) { crv = lws_cmdline_option(argc, argv, "--curve"); if (!crv) { lwsl_err("%s: use --curve P-256 etc\n", __func__); goto bail; } } p = lws_cmdline_option(argc, argv, "--bits"); if (p) bits = atoi(p); ck = lws_cose_key_generate(context, cose_kty, 0, bits, crv, kid, kid_len); if (!ck) goto bail; lws_lec_init(&lec, ktmp, sizeof(ktmp)); lws_cose_key_export(ck, &lec, LWSJWKF_EXPORT_PRIVATE); write(fdout, ktmp, lec.used); lws_cose_key_destroy(&ck); result = 0; bail: lws_context_destroy(context); if (result) lwsl_err("%s: FAIL: %d\n", __func__, result); else lwsl_notice("%s: PASS\n", __func__); bail_early: if (fdin > 0) close(fdin); if (fdout != 1 && fdout >= 0) close(fdout); return result; } libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-cose-key/set1.cks000066400000000000000000000024761476025525100272240ustar00rootroot00000000000000‹¦B11 !X ŗÅ±­™łĒ+ĻKž&ŅDÜŸtR(%Z!š†Ö ž’"X ‹ų-Į¶Õb¾„J·€J:d¶×,Ļķko¶ķ(»ü~#X WÉ wfAFčvv • ŠTŖ“ĆưN0gŪ`0…“Ó¦X$meriadoc.brandybuck@buckland.example !X eķ„”%wĀŗč)Cć8pŖ£uį»[]įŽCœU"X Rķupc÷łä ߟ4=Éŗ† ÷ąŹ|§éīĶ„Ńœ#X ÆłɟšÓŖęÄĶņ"¼ā½hµ(>iJŁ„¢Ļ£Jour-secret X „›W!®HŽdmŪµ3Vn—f†E|‘¾:vÜźlBqˆ¦Xbilbo.baggins@hobbiton.example !XBr™,³¬ģóåĘ=ķģ QØĮ÷žņų/”óĒ7æ]ē˜fqźĘ%ž‚W»Š9FDŹŖ:Ə'¤X_»ŹŠņEv ^\B­"XBܦ”{Έ¼WHZÉt'4+Ć_ˆ}†ÖZ“wāGę ŖUäčP*ŚW$¬Q֐>¼¬™›\ĀQŸ?įź”u#XBQ8Ż«õŹ—_X`łém_šv­@vjGf€µ\Ó9č«lrµśĶ²¢„ Ā[Іd}Óāę鞄Ź,6 żńwž²m£Kour-secret2 P„›W†E|‘¾:vÜźlBq¦X!peregrin.took@tuckborough.example !X ˜õ OöĄXaȆ ¦8źVĆõ­u»ūšTįĒ“Łb€"X 𰉆xøéü–Ć“!ań“OB#‘pŁ$·ą;ų"»#X Ń÷ęņlCŌ†‡Ī²51at ¬ń÷6G˜KR*„ńĆ£X$018c0ae5-4d9b-471b-bfd6-eef314bc7037X „›W!®HŽdmŪµ3Vn—f†E|‘¾:vÜźlBqˆ£Fsec-48 X0„›W!®HŽdmŪµ3Vn—f†E|‘¾:vÜźlBqˆ"3wˆ™Ŗ!"#$%&'(£Fsec-64 X@„›W!®HŽdmŪµ3Vn—f†E|‘¾:vÜźlBqˆ"3wˆ™Ŗ!"#$%&'(Ŗ»ĢŻī’„¦§Ø© ±²³“¦ Fsec384!X0ź(f4Ÿć¢ł­Mkž|0Å'Cn_²"¶{!PWOüб݌CÕŃćÕĖ„žĪĀ|#X0MF„„€Ō=TT0~Üõą˜ļ|†ĢkV“żžK›±BXQĻ[#ęcnя[½Ž–"X0L=$U¦ˆļ%’h@‰ŹO ļQĢW0Ÿ‘œ=HAB6‡•Ęņ„Ó öP“į-3ä¦ Fsec512!XBéĻ œRP›Ęž…pé(0Nū7†ĀĀ§ŗOwą}^ˆ±3¼s|Y ‚ü*$”ÄĻ8!zĀoĄ1O»’U±#XB9*,k“™N8?éųė<ŗćȔ‡Ūµ†›H …ĆĮ££ėm„QŒwå3Įŗ¦8ķʵĘ·ž«x­ Ć#”’"XBī 5ń’”×n°”„es1ī‰*ĆYę‘"äēĶ.øaN ģ’PYU°{µ÷ˆŽ_%Jó»6ē¢Ó†—.¾/¹j=libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-cose-key/sign1_pass01.sig000066400000000000000000000001421476025525100305460ustar00rootroot00000000000000Ņ„A ¢&B11TThis is the content.X@‡Ū .Uq„;x¬3첃 ÷¶ą¤Õ·7mć6²’×Ņ%čŪrø‚ libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-cose-key/sign1_pass03.sig000066400000000000000000000001411476025525100305470ustar00rootroot00000000000000„C”&”B11TThis is the content.X@޳>L£FZ°Z¬4Ģk#Տļ\1ÄŅZ‘®š°~*ł¢‘Ŗ2įJø4ÜVķ*"4DT~ń; å¤ĆEŹĖ6libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-cose-key/sign_pass01.sig000066400000000000000000000001501476025525100304640ustar00rootroot00000000000000Ųb„A  TThis is the content.ƒC”&”B11X@ā®ÆŌ iѝžnR|]ōä(,¾ū]ĖōÆ.Ł‚¬E¬˜øTL‹Eސ·ĆÓHž’j+˜õ:ż/ ó libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-cose-key/sign_pass02.sig000066400000000000000000000001471476025525100304730ustar00rootroot00000000000000Ųb„@ TThis is the content.ƒC”&”B11X@ĖøŚŁ¾Æøį¤M‹ūĀkķņ©OĖZˆ$2æöÖ>õtQŲ?¢Ėö&rėōĒŁ“°ōĀDvGŲ1ŗWĢØk“ libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-cose-key/sign_pass03.sig000066400000000000000000000001451476025525100304720ustar00rootroot00000000000000„@ TThis is the content.ƒC”&”B11X@ā®ÆŌ iѝžnR|]ōä(,¾ū]ĖōÆ.Ł‚¬E¬˜øTL‹Eސ·ĆÓHž’j+˜õ:ż/ ó libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-cose-sign/000077500000000000000000000000001476025525100260055ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-cose-sign/CMakeLists.txt000066400000000000000000000150531476025525100305510ustar00rootroot00000000000000project(lws-crypto-cose-sign C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-crypto-cose-sign) set(SRCS main.c) set(requirements 1) require_lws_config(LWS_WITH_COSE 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) # EC signing add_test(NAME crypto-cose-sign-1 COMMAND lws-crypto-cose-sign -s -k set1.cks --kid 11 --alg ES256 --cose-sign --stdin payload.txt --stdout ctest-sig-es256.sig) add_test(NAME crypto-cose-sign-2 COMMAND lws-crypto-cose-sign -s -k set1.cks --kid sec384 --alg ES384 --cose-sign --stdin payload.txt --stdout ctest-sig-es384.sig) add_test(NAME crypto-cose-sign-3 COMMAND lws-crypto-cose-sign -s -k set1.cks --kid sec512 --alg ES512 --cose-sign --stdin payload.txt --stdout ctest-sig-es512.sig) # EC validation add_test(NAME crypto-cose-sign-4 COMMAND lws-crypto-cose-sign -k set1.cks --stdout r1.txt --stdin ctest-sig-es256.sig) set_tests_properties(crypto-cose-sign-4 PROPERTIES DEPENDS crypto-cose-sign-1) add_test(NAME crypto-cose-sign-5 COMMAND lws-crypto-cose-sign -k set1.cks --stdout r2.txt --stdin ctest-sig-es384.sig) set_tests_properties(crypto-cose-sign-5 PROPERTIES DEPENDS crypto-cose-sign-2) add_test(NAME crypto-cose-sign-6 COMMAND lws-crypto-cose-sign -k set1.cks --cose-sign --stdout r3.txt --stdin ctest-sig-es512.sig) set_tests_properties(crypto-cose-sign-6 PROPERTIES DEPENDS crypto-cose-sign-3) # RSA 4096 signing add_test(NAME crypto-cose-sign-7 COMMAND lws-crypto-cose-sign -s -k rsa-4096.ck --alg RS512 --cose-sign --stdin payload.txt --stdout ctest-sig-rs512.sig) # RSA 4096 validation add_test(NAME crypto-cose-sign-8 COMMAND lws-crypto-cose-sign -k rsa-4096.ck --cose-sign --stdout r8.txt --stdin ctest-sig-rs512.sig) set_tests_properties(crypto-cose-sign-8 PROPERTIES DEPENDS crypto-cose-sign-7) # HMAC signing, cose-mac # add_test(NAME crypto-cose-sign-9 # COMMAND lws-crypto-cose-sign -s -k set1.cks --kid our-secret # --alg HS256 --cose-mac # --stdin payload.txt # --stdout ctest-sig-hmac256.sig) # add_test(NAME crypto-cose-sign-10 # COMMAND lws-crypto-cose-sign -s -k set1.cks --kid sec-48 # --alg HS384 --cose-mac # --stdin payload.txt # --stdout ctest-sig-hmac384.sig) # add_test(NAME crypto-cose-sign-11 # COMMAND lws-crypto-cose-sign -s -k set1.cks --kid sec-64 # --alg HS512 --cose-mac # --stdin payload.txt # --stdout ctest-sig-hmac512.sig) # add_test(NAME crypto-cose-sign-12 # COMMAND lws-crypto-cose-sign -s -k set1.cks --kid our-secret # --alg HS256_64 --cose-mac # --stdin payload.txt # --stdout ctest-sig-hmac256_64.sig) # HMAC validation, cose-mac # add_test(NAME crypto-cose-sign-13 # COMMAND lws-crypto-cose-sign -k set1.cks # --stdout r1.txt # --stdin ctest-sig-hmac256.sig) # set_tests_properties(crypto-cose-sign-13 # PROPERTIES DEPENDS crypto-cose-sign-9) # # add_test(NAME crypto-cose-sign-14 # COMMAND lws-crypto-cose-sign -k set1.cks # --stdout r2.txt # --stdin ctest-sig-hmac384.sig) # set_tests_properties(crypto-cose-sign-14 # PROPERTIES DEPENDS crypto-cose-sign-10) # # add_test(NAME crypto-cose-sign-15 # COMMAND lws-crypto-cose-sign -k set1.cks # --stdout r3.txt # --stdin ctest-sig-hmac512.sig) # set_tests_properties(crypto-cose-sign-15 # PROPERTIES DEPENDS crypto-cose-sign-11) # # add_test(NAME crypto-cose-sign-16 # COMMAND lws-crypto-cose-sign -k set1.cks # --stdout r4.txt # --stdin ctest-sig-hmac256_64.sig) # set_tests_properties(crypto-cose-sign-16 # PROPERTIES DEPENDS crypto-cose-sign-12) # HMAC signing, cose-mac0 add_test(NAME crypto-cose-sign-17 COMMAND lws-crypto-cose-sign -s -k set1.cks --kid our-secret --alg HS256 --cose-mac0 --stdin payload.txt --stdout ctest-sig-hmac0256.sig) add_test(NAME crypto-cose-sign-18 COMMAND lws-crypto-cose-sign -s -k set1.cks --kid sec-48 --alg HS384 --cose-mac0 --stdin payload.txt --stdout ctest-sig-hmac0384.sig) add_test(NAME crypto-cose-sign-19 COMMAND lws-crypto-cose-sign -s -k set1.cks --kid sec-64 --alg HS512 --cose-mac0 --stdin payload.txt --stdout ctest-sig-hmac0512.sig) add_test(NAME crypto-cose-sign-20 COMMAND lws-crypto-cose-sign -s -k set1.cks --kid our-secret --alg HS256_64 --cose-mac0 --stdin payload.txt --stdout ctest-sig-hmac0256_64.sig) # HMAC validation, cose-mac0 add_test(NAME crypto-cose-sign-21 COMMAND lws-crypto-cose-sign -k set1.cks --stdout r1.txt --stdin ctest-sig-hmac0256.sig) set_tests_properties(crypto-cose-sign-21 PROPERTIES DEPENDS crypto-cose-sign-17) add_test(NAME crypto-cose-sign-22 COMMAND lws-crypto-cose-sign -k set1.cks --stdout r2.txt --stdin ctest-sig-hmac0384.sig) set_tests_properties(crypto-cose-sign-22 PROPERTIES DEPENDS crypto-cose-sign-18) add_test(NAME crypto-cose-sign-23 COMMAND lws-crypto-cose-sign -k set1.cks --stdout r3.txt --stdin ctest-sig-hmac0512.sig) set_tests_properties(crypto-cose-sign-23 PROPERTIES DEPENDS crypto-cose-sign-19) add_test(NAME crypto-cose-sign-24 COMMAND lws-crypto-cose-sign -k set1.cks --stdout r4.txt --stdin ctest-sig-hmac0256_64.sig) set_tests_properties(crypto-cose-sign-24 PROPERTIES DEPENDS crypto-cose-sign-20) set_tests_properties(crypto-cose-sign-1 crypto-cose-sign-2 crypto-cose-sign-3 crypto-cose-sign-4 crypto-cose-sign-5 crypto-cose-sign-6 crypto-cose-sign-7 crypto-cose-sign-8 # crypto-cose-sign-9 # crypto-cose-sign-10 # crypto-cose-sign-11 # crypto-cose-sign-12 # crypto-cose-sign-13 # crypto-cose-sign-14 # crypto-cose-sign-15 # crypto-cose-sign-16 crypto-cose-sign-17 crypto-cose-sign-18 crypto-cose-sign-19 crypto-cose-sign-20 crypto-cose-sign-21 crypto-cose-sign-22 crypto-cose-sign-23 crypto-cose-sign-24 PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/crypto/minimal-crypto-cose-sign TIMEOUT 5) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-cose-sign/README.md000066400000000000000000000100351476025525100272630ustar00rootroot00000000000000# lws minimal example for cose_sign Demonstrates how to sign and verify using cose_sign and cose_key, providing a commandline tool for signing and verifying stdin. ## build ``` $ cmake . && make ``` ## usage |Option|Sig|Val|Meaning| |---|---|---|---| |-s|o|||Select signing mode (stdin is payload)| |-k |o|o|One or a set of cose_keys| |--kid string|o|mac0|Specifies the key ID to use as a string| |--kid-hex HEXSTRING|o|mac0|Specifies the key ID to use as a hex blob| |--cose-sign|o|if no tag|Sets cose-sign mode| |--cose-sign1|o|if no tag|Sets cose-sign1 mode| |--cose-mac|o|if no tag|Sets cose-sign1 mode| |--cose-mac0|o|if no tag|Sets cose-sign1 mode| |--extra HEXSTRING|o|o|Optional extra payload data| HEXSTRING above means a string like `1a2b3c` Stdin is either the plaintext (if signing) or cose_sign (if verifying). For convenience, a keyset from the COSE RFC is provided in `minimal-examples/crypto/minimal-crypto-cose-sign/set1.cks`. Six example cose_sign1 and cose_sign are also provided in that directory signed with keys from the provided keyset. ## Examples ### Validation The RFC8152 sign1_pass01.sig is a cose_sign1 that contains the ES256 alg parameter along with a kid hint that it was signed with the key with kid "11" from the RFC8152 key set. So we just need to provide the signature and the key set and lws can sort it out. ``` $ cat sign1_pass01.sig | ./lws-crypto-cose-sign -k set1.cks [2021/07/26 05:41:29:1663] N: lws_create_context: LWS: 4.2.99-v4.2.0-133-g300f3f3250, NET CLI SRV H1 H2 WS ConMon IPV6-on [2021/07/26 05:41:29:3892] N: results count 1 [2021/07/26 05:41:29:3901] N: result: 0 (alg ES256, kid 3131) [2021/07/26 05:41:29:4168] N: main: PASS ``` Notice how the validation just delivers a results list and leaves it to the user code to iterate it, and confirm that it's happy with the result, the alg used, and the kid that was used. RFC8152 sign1_pass02.sig is similar but contains extra application data in the signature, that must be given at validation too. ``` $cat sign1_pass02.sig | ./lws-crypto-cose-sign -k set1.cks --extra 11aa22bb33cc44dd55006699 [2021/07/26 05:55:50:9103] N: lws_create_context: LWS: 4.2.99-v4.2.0-133-g300f3f3250, NET CLI SRV H1 H2 WS ConMon IPV6-on [2021/07/26 05:55:50:9381] N: 12 [2021/07/26 05:55:51:0924] N: [2021/07/26 05:55:51:0939] N: 0000: 11 AA 22 BB 33 CC 44 DD 55 00 66 99 ..".3.D.U.f. [2021/07/26 05:55:51:0943] N: [2021/07/26 05:55:51:1368] N: results count 1 [2021/07/26 05:55:51:1377] N: result: 0 (alg ES256, kid 3131) [2021/07/26 05:55:51:1657] N: main: PASS ``` ### Signing Generate a cose-sign1 using ES256 and the key set key with id "11" for the payload given on stdin ``` $ echo -n "This is the content." |\ ./bin/lws-crypto-cose-sign -s -k set1.cks \ --kid 11 --alg ES256 > ./test.sig 00000000 d2 84 43 a1 01 26 a1 04 42 31 31 54 54 68 69 73 |..C..&..B11TThis| 00000010 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 2e | is the content.| 00000020 58 40 b9 a8 85 09 17 7f 01 f6 78 5d 39 62 d0 44 |X@........x]9b.D| 00000030 08 0b fa b4 b4 5b 17 80 c2 e3 ba a3 af 33 6f e6 |.....[.......3o.| 00000040 44 09 13 1f cf 4f 17 5c 62 9f 8d 29 29 1c ab 28 |D....O.\b..))..(| 00000050 b2 f4 e6 af f9 62 ea 69 52 90 07 0e 2c 40 72 d3 |.....b.iR...,@r.| 00000060 12 cf |..| ``` Same as above, but force it to use cose-sign layout ``` $ echo -n "This is the content." |\ ./bin/lws-crypto-cose-sign -s -k set1.cks \ --kid 11 --alg ES256 --cose-sign > ./test.sig 00000000 d8 62 84 40 40 54 54 68 69 73 20 69 73 20 74 68 |.b.@@TThis is th| 00000010 65 20 63 6f 6e 74 65 6e 74 2e 81 83 a1 01 26 a1 |e content.....&.| 00000020 04 42 31 31 58 40 37 5d 93 48 20 b0 d0 75 16 41 |.B11X@7].H ..u.A| 00000030 db 95 95 5b 39 7d 6d 92 6e 52 c9 78 96 d8 a2 9b |...[9}m.nR.x....| 00000040 62 62 89 9e e5 26 31 63 4b 90 d1 37 86 ca 82 a2 |bb...&1cK..7....| 00000050 28 9a d2 82 a7 6d 24 23 cd de 58 91 47 98 bb 11 |(....m$#..X.G...| 00000060 e4 b9 08 18 48 65 |....He| ``` libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-cose-sign/main.c000066400000000000000000000203421476025525100270760ustar00rootroot00000000000000/* * lws-minimal-crypto-cose-sign * * Written in 2010-2021 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include #include #include static int fdin = 0, fdout = 1; static uint8_t extra[4096]; static size_t ext_len; int _alloc_file(struct lws_context *context, const char *filename, uint8_t **buf, size_t *amount) { FILE *f; size_t s; ssize_t m; int n = 0; f = fopen(filename, "rb"); if (f == NULL) { n = 1; goto bail; } if (fseek(f, 0, SEEK_END) != 0) { n = 1; goto bail; } m = ftell(f); if (m == -1l) { n = 1; goto bail; } s = (size_t)m; if (fseek(f, 0, SEEK_SET) != 0) { n = 1; goto bail; } *buf = malloc(s + 1); if (!*buf) { n = 2; goto bail; } if (fread(*buf, s, 1, f) != 1) { free(*buf); n = 1; goto bail; } *amount = s; bail: if (f) fclose(f); return n; } static int extra_cb(lws_cose_sig_ext_pay_t *x) { x->ext = extra; x->xl = ext_len; // lwsl_hexdump_notice(extra, ext_len); return 0; } int pay_cb(struct lws_cose_validate_context *cps, void *opaque, const uint8_t *paychunk, size_t paychunk_len) { write(fdout, paychunk, paychunk_len); return 0; } int main(int argc, const char **argv) { uint8_t *ks, temp[256], *kid = NULL, ktmp[4096], sbuf[512]; int n, m, sign = 0, result = 1, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; enum lws_cose_sig_types sigtype = SIGTYPE_UNKNOWN; struct lws_cose_validate_context *cps = NULL; struct lws_cose_sign_context *csc = NULL; const struct lws_gencrypto_keyelem *ke; struct lws_context_creation_info info; lws_cose_validate_create_info_t vi; struct lws_buflist *paybuf = NULL; lws_cose_sign_create_info_t i; struct lws_context *context; size_t ks_len, kid_len = 0; lws_cose_key_t *ck = NULL; lws_dll2_owner_t *o, set; lws_lec_pctx_t lec; cose_param_t alg; const char *p; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS cose-sign example tool -k keyset [-s alg-name kid ]\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ #if defined(LWS_WITH_NETWORK) info.port = CONTEXT_PORT_NO_LISTEN; #endif context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } if ((p = lws_cmdline_option(argc, argv, "--stdin"))) { fdin = open(p, LWS_O_RDONLY, 0); if (fdin < 0) { lwsl_err("%s: unable to open stdin file\n", __func__); return 1; } } if ((p = lws_cmdline_option(argc, argv, "--stdout"))) { fdout = open(p, LWS_O_WRONLY | LWS_O_CREAT | LWS_O_TRUNC, 0600); if (fdout < 0) { lwsl_err("%s: unable to open stdout file\n", __func__); goto bail_early; } } /* * If no tag, you can tell it the signature type, otherwise it will * use the tag to select the right type without these */ if (lws_cmdline_option(argc, argv, "--cose-sign")) sigtype = SIGTYPE_MULTI; if (lws_cmdline_option(argc, argv, "--cose-sign1")) sigtype = SIGTYPE_SINGLE; if (lws_cmdline_option(argc, argv, "--cose-mac")) sigtype = SIGTYPE_MAC; if (lws_cmdline_option(argc, argv, "--cose-mac0")) sigtype = SIGTYPE_MAC0; /* if signing, set the ciphers */ if (lws_cmdline_option(argc, argv, "-s")) sign = 1; if ((p = lws_cmdline_option(argc, argv, "--kid"))) { kid = (uint8_t *)p; kid_len = strlen(p); //lwsl_hexdump_notice(kid, kid_len); } if ((p = lws_cmdline_option(argc, argv, "--kid-hex"))) { kid_len = (size_t)lws_hex_to_byte_array(p, ktmp, sizeof(ktmp)); kid = (uint8_t *)ktmp; } if ((p = lws_cmdline_option(argc, argv, "--extra"))) { ext_len = (size_t)lws_hex_to_byte_array(p, extra, sizeof(extra)); lwsl_notice("%llu\n", (unsigned long long)ext_len); if (ext_len == (size_t)-1ll) ext_len = 0; } /* grab the key */ if (!(p = lws_cmdline_option(argc, argv, "-k"))) { lwsl_err("-k is required\n"); goto bail; } if (_alloc_file(context, p, &ks, &ks_len)) { lwsl_err("%s: unable to load %s\n", __func__, p); goto bail; } lws_dll2_owner_clear(&set); if (!lws_cose_key_import(&set, NULL, NULL, ks, ks_len)) { lwsl_notice("%s: key import fail\n", __func__); free(ks); goto bail2; } free(ks); if (!fdin) { struct timeval timeout; fd_set fds; FD_ZERO(&fds); FD_SET(0, &fds); timeout.tv_sec = 0; timeout.tv_usec = 1000; if (select(fdin + 1, &fds, NULL, NULL, &timeout) < 0 || !FD_ISSET(0, &fds)) { lwsl_err("%s: pass cose_sign or plaintext " "on stdin or --stdin\n", __func__); goto bail2; } } if (sign) { uint8_t *ppay; size_t s; p = lws_cmdline_option(argc, argv, "--alg"); if (!p) { lwsl_err("%s: need to specify alg (eg, ES256) " "when signing\n", __func__); goto bail2; } alg = lws_cose_name_to_alg(p); lws_lec_init(&lec, sbuf, sizeof(sbuf)); memset(&i, 0, sizeof(i)); i.cx = context; i.keyset = &set; i.lec = &lec; i.flags = LCSC_FL_ADD_CBOR_TAG | LCSC_FL_ADD_CBOR_PREFER_MAC0; i.sigtype = sigtype; /* * Unfortunately, with COSE we must know the payload length * before we have seen the payload. It's illegal to use * indeterminite lengths inside COSE objects. */ do { n = (int)read(fdin, temp, sizeof(temp)); if (n < 0) goto bail3; if (!n) break; s = (size_t)n; if (lws_buflist_append_segment(&paybuf, temp, s) < 0) goto bail3; i.inline_payload_len += s; } while (1); // lwsl_notice("%s: inline_payload_len %llu\n", __func__, // (unsigned long long)i.inline_payload_len); csc = lws_cose_sign_create(&i); if (!csc) goto bail2; ck = lws_cose_key_from_set(&set, kid, kid_len); if (!ck) goto bail2; if (lws_cose_sign_add(csc, alg, ck)) goto bail2; do { s = lws_buflist_next_segment_len(&paybuf, &ppay); if (!s) break; do { m = (int)lws_cose_sign_payload_chunk(csc, ppay, s); if (lec.used) { // lwsl_hexdump_err(sbuf, lec.used); write(fdout, sbuf, lec.used); lws_lec_setbuf(&lec, sbuf, sizeof(sbuf)); } } while (m == LCOSESIGEXTCB_RET_AGAIN); if (m == LWS_LECPCTX_RET_FAIL) goto bail2; if (lec.used) { write(fdout, sbuf, lec.used); lws_lec_setbuf(&lec, sbuf, sizeof(sbuf)); } lws_buflist_use_segment(&paybuf, s); } while(1); } else { memset(&vi, 0, sizeof(vi)); vi.cx = context; vi.keyset = &set; vi.sigtype = sigtype; vi.ext_cb = extra_cb; vi.ext_opaque = extra; vi.ext_len = ext_len; vi.pay_cb = pay_cb; cps = lws_cose_validate_create(&vi); if (!cps) { lwsl_notice("%s: sign_val_create fail\n", __func__); goto bail; } do { n = (int)read(fdin, temp, sizeof(temp)); if (n < 0) goto bail3; if (!n) break; n = lws_cose_validate_chunk(cps, temp, (size_t)n, NULL); if (n && n != LECP_CONTINUE) { lwsl_err("%s: chunk validation failed: %d\n", __func__, n); goto bail2; } } while (1); } bail3: result = 0; if (!sign) { char buf[2048]; int os; o = lws_cose_validate_results(cps); if (!o) result = 1; else { os = lws_snprintf(buf, sizeof(buf), "\nresults count %d\n", o->count); write(fdout, buf, (size_t)os); if (!o->count) result = 1; } lws_start_foreach_dll_safe(struct lws_dll2 *, p, tp, lws_dll2_get_head(o)) { lws_cose_validate_res_t *res = lws_container_of(p, lws_cose_validate_res_t, list); char khr[256]; khr[0] = '\0'; if (res->cose_key) { ke = &res->cose_key->meta[COSEKEY_META_KID]; if (ke && ke->buf) lws_hex_from_byte_array(ke->buf, ke->len, khr, sizeof(khr)); } os = lws_snprintf(buf, sizeof(buf), " result: %d (alg %s, kid %s)\n", res->result, lws_cose_alg_to_name(res->cose_alg), khr); write(fdout, buf, (size_t)os); result |= res->result; } lws_end_foreach_dll_safe(p, tp); } bail2: if (!sign) lws_cose_validate_destroy(&cps); else { lws_buflist_destroy_all_segments(&paybuf); lws_cose_sign_destroy(&csc); } //bail1: lws_cose_key_set_destroy(&set); bail: lws_context_destroy(context); if (result) lwsl_err("%s: FAIL: %d\n", __func__, result); else lwsl_notice("%s: PASS\n", __func__); bail_early: if (fdin > 0) close(fdin); if (fdout != 1 && fdout >= 0) close(fdout); return result; } libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-cose-sign/payload.txt000066400000000000000000000000201476025525100301670ustar00rootroot00000000000000The Test Payloadlibwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-cose-sign/rsa-4096.ck000066400000000000000000000030411476025525100275070ustar00rootroot00000000000000§Grsa4096!C Yų~grVˆZ:Yp¦YŁÕß3Ū:PŌrjTś”æz½±n–ʰ`7„ĖIi±€- ђ1 ¤»ś ,°Oč\ńÅ/lÓMV³':ĄŒƒ6ZöūkgZ„=-ØūƑ;³ŅĪĢ2N>śµĪ &½ĮåķʦģU%vpEƜÄKŽČģ‰*RėÄ ł«„sA¹ĶĢĮį"[šü†6š×„Å[…īŲ9«H¾ö’SŪYŻ~sU"”š Ń]*ōYMmć>Ń[ˆ†īxŻ,YAšj„pÆnn£ß •N“.zęėK‰Ų ‡Ŗ)½éć͉Ąu‰~n7c¹dQą{~©¤%A²Šöž”{!Ÿīóņp²VG†7<% ‡‰'0ߣx2“Amh[°Ū“Ń1ōpB’ųn‡ é^;–Ū8ū.ņ_?uՖž>Œvd_/°ķ³#¾ń~#RĢŗ&šń ¦x®›ŖŪ9œĮņjæĻ#'ehŌ…~ą cs%§šļšw]¾CśMō«*;1“ŸšįTl‚{ۚ’Ó—’6»Ÿ"YŽĮˆn1ó3ęB.ŹŅß׊\ī*ųX“Jeūw ńäœT^Ÿ& ėQ—@ŌΌK"'&f_e  Xģ\pݧõTNŻ¢AÜ-+*E’ń¼h)Ö"—óW`+\ļ¢ŹœuÆU"AtīčĪśą³ÉRр°žóĢōšhĢĒ€=GŲ`‚kŽjÜ(Ž„5˜¢.āJż?Øbć? Éń#ć©Zū‚_ųƒé« E¦öóv+¾vāĀ®#Nń@ū-śPĀ܎œ;üL3uŻ*§æYĦ£$6Z™äĖ8Št«±żƒ šq=Ž’,ŗ·­ėV„NkŚDŠdćń‹3§Gõ`aøÆÕΆ'¢\R,ŽEųį WŠlŚʁõ#õĻY^Z[™E½‚¾—~ü&AĢkēRž773—Ļʃ²Åį—‹l)/ų2¹V²?£įåĄ¹®’ķ¢—"ĮÅCg‘ŁøA¦éŽQ?Faüc8÷ŅĮņ^Ń]ā1Ź)¾M–nžćōš™ósŃoŠ2ņ÷0ūißź&ń+|s?œłųæ]ՍŽxŁöxŽ Ąļö²Uż !Ļ5MåØ@£dTTa Ē ¾°>•µ] hN$ģ ¢¤Ļj±©'‚Wm·Ÿ>z× ŪśŲ-¤m¬m¾7&iļ-ŚĪ+vÄF3 ?ŲbŒz¦Ķ$ŲM…žŸ°¹—,ǜ ģĄ0.(½cn69†E£bžŌw‹5‡!:Ļq[³{€“Lå\0³_a$YłŪź5ķĖgĄč@Š-9 <˜ķplj pØĒįMPŠśēŚ`&‹ū¦¹ ėH¦70E€Ÿ ˜¦čßwŽ*½ųøĢöŹuW©ĘüfSł8™dkn6ófaŅ«jæ­ņȕ“d:żŒAkWŗY”Ä:KԈ†[Ó7&+(R|¤H“×ö§€ęčśWĪżL•bŽŽa–ÜÓļŌÕn}YąN.PXQąÆ+‚nŖ.\Χ* aZś;Q w-ł9“© ƒąLłŁßŒ^n޽uiJŁ„¢Ļ£Jour-secret X „›W!®HŽdmŪµ3Vn—f†E|‘¾:vÜźlBqˆ¦Xbilbo.baggins@hobbiton.example !XBr™,³¬ģóåĘ=ķģ QØĮ÷žņų/”óĒ7æ]ē˜fqźĘ%ž‚W»Š9FDŹŖ:Ə'¤X_»ŹŠņEv ^\B­"XBܦ”{Έ¼WHZÉt'4+Ć_ˆ}†ÖZ“wāGę ŖUäčP*ŚW$¬Q֐>¼¬™›\ĀQŸ?įź”u#XBQ8Ż«õŹ—_X`łém_šv­@vjGf€µ\Ó9č«lrµśĶ²¢„ Ā[Іd}Óāę鞄Ź,6 żńwž²m£Kour-secret2 P„›W†E|‘¾:vÜźlBq¦X!peregrin.took@tuckborough.example !X ˜õ OöĄXaȆ ¦8źVĆõ­u»ūšTįĒ“Łb€"X 𰉆xøéü–Ć“!ań“OB#‘pŁ$·ą;ų"»#X Ń÷ęņlCŌ†‡Ī²51at ¬ń÷6G˜KR*„ńĆ£X$018c0ae5-4d9b-471b-bfd6-eef314bc7037X „›W!®HŽdmŪµ3Vn—f†E|‘¾:vÜźlBqˆ£Fsec-48 X0„›W!®HŽdmŪµ3Vn—f†E|‘¾:vÜźlBqˆ"3wˆ™Ŗ!"#$%&'(£Fsec-64 X@„›W!®HŽdmŪµ3Vn—f†E|‘¾:vÜźlBqˆ"3wˆ™Ŗ!"#$%&'(Ŗ»ĢŻī’„¦§Ø© ±²³“¦ Fsec384!X0ź(f4Ÿć¢ł­Mkž|0Å'Cn_²"¶{!PWOüб݌CÕŃćÕĖ„žĪĀ|#X0MF„„€Ō=TT0~Üõą˜ļ|†ĢkV“żžK›±BXQĻ[#ęcnя[½Ž–"X0L=$U¦ˆļ%’h@‰ŹO ļQĢW0Ÿ‘œ=HAB6‡•Ęņ„Ó öP“į-3ä¦ Fsec512!XBéĻ œRP›Ęž…pé(0Nū7†ĀĀ§ŗOwą}^ˆ±3¼s|Y ‚ü*$”ÄĻ8!zĀoĄ1O»’U±#XB9*,k“™N8?éųė<ŗćȔ‡Ūµ†›H …ĆĮ££ėm„QŒwå3Įŗ¦8ķʵĘ·ž«x­ Ć#”’"XBī 5ń’”×n°”„es1ī‰*ĆYę‘"äēĶ.øaN ģ’PYU°{µ÷ˆŽ_%Jó»6ē¢Ó†—.¾/¹j=libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-cose-sign/sign-rsa4096.sig000066400000000000000000000010461476025525100305600ustar00rootroot00000000000000Ųb„@@Ltest payloadƒ”9”Grsa4096YŒ–­pąĄt `,TXŠš{å…Ćfa]fK‰@YĪ./~3|޾*ę RE?©.”¾¬ŗv­ģ#M6ŲF¼¢š³ł– Š,CŽxĻz°ļŠN ø#;¶ž Ģ Ǥ­osīvģ™]¼‹:i¬œ«Ż’UM«ōšŠ+¢±`Źö…ŁĻŖŽ oš*ńéK•ĖH¬*ŸģŅ104i¤µ€õׁܿÅd„LšŅūż5żoÉüæ6-ÖC!Y:“Ņ„?: dsVŖO½dh_3sEitOÓ}1ŗ¢FŻDkA`¬Ōņ+!{¤·Ÿ`æD-iTyÕ©Ņ Ė|ĄøżfE”Ü#Ń-Ź9ķ²[+9ėžžvōīĪ])õQ lŌŠ·O ī±7ĮB/Õ¶ HƄ›Ü­zŃNiŚ!¼äuž¦9#5Uuį E†7ńKoł³£åÆž\s%Ųå‚2!`źÜ\Uør c? Ėģdøš]«@µŒóō˜ó&s›–“īĶ)^?†ąŅłzˆć„Tß[a{PäöŚWėö¼äEo7¹ń÷²lSae ß i4„;w'škbĪĮ[·5źµkæ}ĀśSZY7n1¢å'č{`ŗ‹J7ŽŠa;s]Ū×_LÅgŲqŸ EŖ³C–Į†libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-cose-sign/sign1_pass01.sig000066400000000000000000000001421476025525100307160ustar00rootroot00000000000000Ņ„A ¢&B11TThis is the content.X@‡Ū .Uq„;x¬3첃 ÷¶ą¤Õ·7mć6²’×Ņ%čŪrø‚ libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-cose-sign/sign1_pass03.sig000066400000000000000000000001411476025525100307170ustar00rootroot00000000000000„C”&”B11TThis is the content.X@޳>L£FZ°Z¬4Ģk#Տļ\1ÄŅZ‘®š°~*ł¢‘Ŗ2įJø4ÜVķ*"4DT~ń; å¤ĆEŹĖ6libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-cose-sign/sign_pass01.sig000066400000000000000000000001501476025525100306340ustar00rootroot00000000000000Ųb„A  TThis is the content.ƒC”&”B11X@ā®ÆŌ iѝžnR|]ōä(,¾ū]ĖōÆ.Ł‚¬E¬˜øTL‹Eސ·ĆÓHž’j+˜õ:ż/ ó libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-cose-sign/sign_pass02.sig000066400000000000000000000001471476025525100306430ustar00rootroot00000000000000Ųb„@ TThis is the content.ƒC”&”B11X@ĖøŚŁ¾Æøį¤M‹ūĀkķņ©OĖZˆ$2æöÖ>õtQŲ?¢Ėö&rėōĒŁ“°ōĀDvGŲ1ŗWĢØk“ libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-cose-sign/sign_pass03.sig000066400000000000000000000001451476025525100306420ustar00rootroot00000000000000„@ TThis is the content.ƒC”&”B11X@ā®ÆŌ iѝžnR|]ōä(,¾ū]ĖōÆ.Ł‚¬E¬˜øTL‹Eސ·ĆÓHž’j+˜õ:ż/ ó libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-jwe/000077500000000000000000000000001476025525100247035ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-jwe/CMakeLists.txt000066400000000000000000000011611476025525100274420ustar00rootroot00000000000000project(lws-crypto-jwe C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-crypto-jwe) set(SRCS main.c) set(requirements 1) require_lws_config(LWS_WITH_JOSE 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-jwe/README.md000066400000000000000000000057061476025525100261720ustar00rootroot00000000000000# lws minimal example for JWE Demonstrates how to encrypt and decrypt using JWE and JWK, providing a commandline tool for creating encrypted JWE and decoding them. ## build ``` $ cmake . && make ``` ## usage Stdin is either the plaintext (if encrypting) or JWE (if decrypting). Stdout is either the JWE (if encrypting) or plaintext (if decrypting). You must pass a private or public key JWK file in the -k option if encrypting, and must pass a private key JWK file in the -k option if decrypting. To be clear, for asymmetric keys the public part of the key is required to encrypt, and the private part required to decrypt. For convenience, a pair of public and private keys are provided, `key-rsa-4096.private` and `key-rsa-4096.pub`, these were produced with just ``` $ lws-crypto-jwk -t RSA -b 4096 --public key-rsa-4096.pub >key-rsa-4096.private ``` Similar keys for EC modes may be produced with ``` $ lws-crypto-jwk -t EC -v P-256 --public key-ecdh-p-256.pub >key-ecdh-p-256.private ``` and for AES ("octet") symmetric keys ``` $ lws-crypto-jwk -t OCT -b 128 >key-aes-128.private ``` JWEs produced with openssl and mbedtls backends are completely interchangeable. Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -e " "|Encrypt (default is decrypt), eg, -e "RSA1_5 A128CBC-HS256". For decrypt, the cipher information comes from the input JWE. -k |JWK file to encrypt or decrypt with -c|Format the JWE as a linebroken C string -f|Output flattened representation (instead of compact by default) ``` $ echo -n "plaintext0123456" | ./lws-crypto-jwe -k key-rsa-4096.private -e "RSA1_5 A128CBC-HS256" [2018/12/19 16:20:25:6519] USER: LWS JWE example tool [2018/12/19 16:20:25:6749] NOTICE: Creating Vhost 'default' (serving disabled), 1 protocols, IPv6 off eyJhbGciOiJSU0ExXzUiLCAiZW5jIjoiQTEyOENCQy1IUzI1NiJ9.ivFr7qzx-pQ4V_edbjpdvR9OwWL9KmojPE2rXQM52oLtW0BtnxZu2_ezqhsAelyIcaworgfobs3u4bslXHMFbeJJjPb5xD0fBDe64OYXZH1NpUGTMJh9Ka4CrJ2B3xhxe7EByGAuGqmluqE0Yezj7rhSw7vlr5JAwuOJ8FaGa8aZ8ldki5G5h_S2Furlbjdcw3Rrxk7mCoMHcLoqzfZtggMPwGAMFogCqcwUo7oSLbBeGaa6hpMbfSysugseWdr8TzObQKPM52k6iVAlGwRaOg_qdLMgZiYRhHA6nFKTQd7XBbNY6qAS8sPuj7Zz344tF3RSfJ0zX_telG71sOtVv5fMpeDU-eCdpOWlCBfu6J6FQfAFu6SJryM4ajGOif09CwFI5qUQ33SOfQfS_M3nqSyd6Vu5M4lsDrb5wK7_XX5gqUwvI9wicf_8WWR-CQomRF-JvEASnA2SIf8QqYfa8R2rP9q6Md4vwO4EZrtxIsMDPsH-4ZEFu7vDjyy09QfIWWsnEb8-UgpVXensgt2m_2bZ76r1VB8-0nZLMwMyEhaH2wra9vX2FWao5UkmNJ7ht300f4_V6QzMFoePpwCvsufWBW6jcQLB-frCWe6uitWaZHEB4LxmNPKzQSz4QwwTKhpF1jNn8Xh1-w1m-2h0gj-oe-S8QBwPveqhPI1p2fI.snuhUTXHNu5mJ6dEPQqg6g.yl36qC4o0GE4nrquQ2YyCg.Vf0MoT7_kUrZdCNWXhq1DQ ``` Notice the logging is on stderr, and the output alone on stdout. You can also pipe the output of the encrypt action directly into the decrypt action, eg ``` $ echo -n "plaintext0123456" | \ ./lws-crypto-jwe -k key-rsa-4096.pub -e "RSA1_5 A128CBC-HS256" | \ ./lws-crypto-jwe -k key-rsa-4096.private ``` prints the plaintext on stdout. libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-jwe/key-rsa-4096.private000066400000000000000000000061541476025525100302600ustar00rootroot00000000000000{"d":"XcSl3ulvs4OGomu9thRPVQGOstim0PY7CibP_bnCmzjvmGmzb8J4q5AUmJCnZT5TesOzXuXhyG95CxQWsakd9GWHSAinV1QQSLsahaezPULRG1qmo37JqKb9noKkvXguh5XU5np8HjeoeeEkF_XqtCdEo0wHijEjTL9RZar98jmyAmlizoHIY9NnECavs4DZB27onU61B61vGpw-y4xhC9jlZSIwRqIMDzeTcSv8fRKcVYR80ozm2_KwWMpue27rS2EfTQUtsMXuYmnvMAf_DHqA0tNWyD1gpUWYHvlyBh5xnYrWPuXxQBRNesImQdRQl5VMMsuvdtY-uZfIVUdN5CcsB0acronx4UsmVg-Qz-jd1NVW4koZQM9uA4oWiMZg4FEUTQ-UWelHCldg-PYLAazsItmaHPF9LcAPkLkI8jaVS33v-DhSeXHW3Pg3sibtnPhouiSvD84zMtzu1gjFT7vtapMynBeZouqeWYT-BFeu2wzppJcW1YxTQ_Ai80VJSFY__Huw-9r1MOHmDRcEW7x9W97UezWDjrh5Shhh4C6SMYbaf7ouACzFu1i_r8Q06JqKA7aY8i5izKlKA0We9tQKlTF8Fgsneu9gpxFglvZsd1ersiA-MkuP9qTBQpyAf3kJ6HS9GrQUju6r3DExdWDjdvM5Grt8QD7Zkv-qXeE","dp":"M-LFs3T2GI1JxD5LJt2GgV4cMDKbiPKBddLukfG0duUxNp0-6x2LZ0ptxrlHrhxBMMmvCg4GEaujrZdaYWCar6xCnlnkVlOELz4yZ3JBSpS86thJw03xuE7lyeR7usFY4CpSqUQGI_YveITuFeoh4YjwdKDuqPhOpDI-34ptgU93dlBRS9nnQFTiVoUdP4bhGTKOpULTiLgPXHQxQR5rfiGVD9AIwqHvMdBQ0hxQBKEt37PbRWK_eTzMslHZGWNfbg8ipwJxisvHyUn0c1X3Uelw8BRyvNVCNovNDeCj-R7kFkMvriMd_sqGVy1Go46WZ2wMkUJHkvmYk0gDlhnTGQ","dq":"qO89nQEJfdkaDtGGyD-sQE2Mm8p_PIPSpCmgMfpl8zgSOb4P9iqXBgpHyS7w10uY_UHt8KW6pY7ozy0y4Gu_f4Wk_rcXiYYdbuIhlFl0_nLI2mfFPGxr1xC64zfjjEaBr4zIJr_YzhvTpjZFtIdSAH5VG5Tv-2yUtCC2DnKnU2kzEkgUeSI6LHOEVhXqup7C0Kjiv9FJsLR0hiqwH4oLziqH7EVqVDvJI3yL1lhqoLKjAu1ogTDgH7hzSrqVhttnpwL8rDcgbtY6Q8C2csdN3Jt1ucgtGy-Yzgqf_QIULP3CRlqzDTvHrMe2A9cNAQ4dNsCbNAjW_MxxGKKWuWXAMQ","e":"AQAB","kid":"my kid","kty":"RSA","n":"2_YjG_D1sOWJxs6cohikupHf5WJfWSFfSCrnNZ7WR7AyTLnKZAF4VKyimMeJTLYYwCAXMDD5XmkF8VluI4O-hASUIJ7F9eDg3vO7nPwtkWa9lkqt-QyQZ_PjiOGpwetBLzrsaXsC9PvdVzrKXnjeNPsmmbC_Fx2cUn4H_9H_WfXi01VR75XFTBtxTrDY7hmpZHuFCFUOMCW9siTZRk9339Y6ORBznBs4jFbkGI1Pmc3op0o5f8S1gus9L81W5uyUrxfd-CkmJ6eWE8I36cfzI6irN2bhVhR_NXERUtS0QOEeJYlRJXqfYkxTMVlsXPl6zbYt__ZYLC6ZiUTCc6K2KmfGh7fihWbao4dyQW3Mq4kClhpIT0O01Y0r7sR1j4jTnFNqbmtPSl9lEMrfiUHfOLqRJo3qizQ-b6HLCDty1otFz8Q8gg0rD3copQ_zFrcTGwJGAv2Absraj7kp9EJXBqneCJ3dlRO8rzx7KB9Dsj-ygh3kZaubkPCeT1v4l_VUY2iGnK4vzIGKM7j56DQ97ZAi1Bb0y6GYSbrWB2_z0DKJu0fiU-NscbKplR68vgppUM6_iogrk48JEZg_kkTymniqbT3g7J_WeoZSx1Uu8ZHI3ysIFfUtFscOa2SJGlj1ds-lfk6Oqac_I8ahRqQeyVAEisZPmYIGSJajbJopJ4s","p":"_V4CwEjRd8Hv9-ncqGdB_vtReTIuHSWQzSx4al15J3VxvPFI2kxicNeQKyq3OAVT2kmCmUP3ETgCdwuKIgw_QbEc8qNxtS_KpM_KsuTe9a5jrQKpt8ctYhzELZfr_sy9UzUGJzr8glLjJ1IDX4x6_JAqYB_NhttP6bzgu5Dt-DKtRPNO1qZtfhrLIgmltpC2M6-AlAv-dyHSHck2VJIL84Hwk4FulozEYxop0dKuZdfM5Z1dZM8-ICo62O0zUKzoWxKmQcB9_gDZsxYaO6xZ9BLmaW6-WcPSEI6YDnPk8ptnk_Kbyc4kPW4Z3ASczxjaewBmfl2_lwkqkndFVptAeQ","q":"3j9DR6ZpKC3WrshSrxXFYAuT19Rlf6qQ_9uD_Fq7dIpTjCZdl01695Qx7UmujKoetutL3RMCpeRdZR-gCLVh8aMxpMuIc5fHC6HbhsdF-I7GoqO0DEJ6coS3n5Ey4EXL5uoLh4C3l67wBKfLmPW28bxxG2QAP59jncWXkrBQm_qbS5Qon8r7wj0tejG_tGdsPjhsFc9KdnkkBucT6MiEVpzpdwDlsn7bHpMsyPlNyc0fj5qYmRB-DN7rv5varaisBaVT0mLQdwKjBDVqNVnU2m5azPhY-2txvihHaI5_cLIsLLaqKMbB17UxGumuT_o8S03_h8-1syO3Ay87y9pPIw","qi":"JY2uUek6wPrp4fPcInX_5WdNlhyghcGVEvlqxs9iOEUeCtUc6d42n9tgiImMu605dQaigvNaH5y1pwDpLlmxUk0nOUVxqo9mv0Uw8WNXB88FyDb0fPbewLpn4Fskb8Umv6_OymJ1W814DRG-jq3sI5DsB7AjtqJQ22nP2Vs1bIrx5fUxuScwrMsWSrrjAx4Kr8-5eeSDqE-_c7DPZ_zSPYDoHaMeR2pZfNAq3mEbxp8jMukzh77rYZ3ffQEA6AyxFSCSCrxVozhP4ypQ0jAkXVWOlj4nuV6briIqlL3ZboydwsIolRwaPSgH6-bw03XS6Hb9DA0KHJKLun94N9n5kw","use":"enc"} libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-jwe/key-rsa-4096.pub000066400000000000000000000013321476025525100273650ustar00rootroot00000000000000{"e":"AQAB","kid":"my kid","kty":"RSA","n":"2_YjG_D1sOWJxs6cohikupHf5WJfWSFfSCrnNZ7WR7AyTLnKZAF4VKyimMeJTLYYwCAXMDD5XmkF8VluI4O-hASUIJ7F9eDg3vO7nPwtkWa9lkqt-QyQZ_PjiOGpwetBLzrsaXsC9PvdVzrKXnjeNPsmmbC_Fx2cUn4H_9H_WfXi01VR75XFTBtxTrDY7hmpZHuFCFUOMCW9siTZRk9339Y6ORBznBs4jFbkGI1Pmc3op0o5f8S1gus9L81W5uyUrxfd-CkmJ6eWE8I36cfzI6irN2bhVhR_NXERUtS0QOEeJYlRJXqfYkxTMVlsXPl6zbYt__ZYLC6ZiUTCc6K2KmfGh7fihWbao4dyQW3Mq4kClhpIT0O01Y0r7sR1j4jTnFNqbmtPSl9lEMrfiUHfOLqRJo3qizQ-b6HLCDty1otFz8Q8gg0rD3copQ_zFrcTGwJGAv2Absraj7kp9EJXBqneCJ3dlRO8rzx7KB9Dsj-ygh3kZaubkPCeT1v4l_VUY2iGnK4vzIGKM7j56DQ97ZAi1Bb0y6GYSbrWB2_z0DKJu0fiU-NscbKplR68vgppUM6_iogrk48JEZg_kkTymniqbT3g7J_WeoZSx1Uu8ZHI3ysIFfUtFscOa2SJGlj1ds-lfk6Oqac_I8ahRqQeyVAEisZPmYIGSJajbJopJ4s"} libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-jwe/main.c000066400000000000000000000141231476025525100257740ustar00rootroot00000000000000/* * lws-crypto-jwe * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include #include #include /* * handles escapes and line wrapping suitable for use * defining a C char array ( -c option ) */ static void format_c(const char *key) { const char *k = key; int seq = 0; while (*k) { if (*k == '{') { putchar('\"'); putchar('{'); putchar('\"'); putchar('\n'); putchar('\t'); putchar('\"'); k++; seq = 0; continue; } if (*k == '}') { putchar('\"'); putchar('\n'); putchar('\"'); putchar('}'); putchar('\"'); putchar('\n'); k++; seq = 0; continue; } if (*k == '\"') { putchar('\\'); putchar('\"'); seq += 2; k++; continue; } if (*k == ',') { putchar(','); putchar('\"'); putchar('\n'); putchar('\t'); putchar('\"'); k++; seq = 0; continue; } putchar(*k); seq++; if (seq >= 60) { putchar('\"'); putchar('\n'); putchar('\t'); putchar(' '); putchar('\"'); seq = 1; } k++; } } #define MAX_SIZE (4 * 1024 * 1024) char temp[MAX_SIZE], compact[MAX_SIZE]; int main(int argc, const char **argv) { int n, enc = 0, result = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; char *in; struct lws_context_creation_info info; int temp_len = sizeof(temp); struct lws_context *context; struct lws_jwe jwe; const char *p; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS JWE example tool\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ #if defined(LWS_WITH_NETWORK) info.port = CONTEXT_PORT_NO_LISTEN; #endif info.options = 0; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } lws_jwe_init(&jwe, context); /* if encrypting, set the ciphers */ if ((p = lws_cmdline_option(argc, argv, "-e"))) { char *sp = strchr(p, ' '); if (!sp) { lwsl_err("format: -e \" " "\", eg, " "-e \"RSA1_5 A128CBC-HS256\"\n"); return 1; } *sp = '\0'; if (lws_gencrypto_jwe_alg_to_definition(p, &jwe.jose.alg)) { lwsl_err("Unknown cipher alg %s\n", p); return 1; } if (lws_gencrypto_jwe_enc_to_definition(sp + 1, &jwe.jose.enc_alg)) { lwsl_err("Unknown payload enc alg %s\n", sp + 1); return 1; } /* create JOSE header, also needed for output */ if (lws_jws_alloc_element(&jwe.jws.map, LJWS_JOSE, lws_concat_temp(temp, temp_len), &temp_len, strlen(p) + strlen(sp + 1) + 32, 0)) { lwsl_err("%s: temp space too small\n", __func__); return 1; } jwe.jws.map.len[LJWS_JOSE] = (uint32_t)lws_snprintf( (char *)jwe.jws.map.buf[LJWS_JOSE], (unsigned int)temp_len, "{\"alg\":\"%s\",\"enc\":\"%s\"}", p, sp + 1); enc = 1; } in = lws_concat_temp(temp, temp_len); n = (int)read(0, in, (unsigned int)temp_len); if (n < 0) { lwsl_err("Problem reading from stdin\n"); return 1; } /* account for padding as well */ temp_len -= (int)lws_gencrypto_padded_length(LWS_AES_CBC_BLOCKLEN, (unsigned int)n); /* grab the key */ if ((p = lws_cmdline_option(argc, argv, "-k"))) { if (lws_jwk_load(&jwe.jwk, p, NULL, NULL)) { lwsl_err("%s: problem loading JWK %s\n", __func__, p); return 1; } } else { lwsl_err("-k is required\n"); return 1; } if (enc) { /* point CTXT to the plaintext we read from stdin */ jwe.jws.map.buf[LJWE_CTXT] = in; jwe.jws.map.len[LJWE_CTXT] = (uint32_t)n; /* * Create a random CEK and set EKEY to it * CEK size is determined by hash / hmac size */ n = lws_gencrypto_bits_to_bytes(jwe.jose.enc_alg->keybits_fixed); if (lws_jws_randomize_element(context, &jwe.jws.map, LJWE_EKEY, lws_concat_temp(temp, temp_len), &temp_len, (unsigned int)n, LWS_JWE_LIMIT_KEY_ELEMENT_BYTES)) { lwsl_err("Problem getting random\n"); goto bail1; } /* perform the encryption of the CEK and the plaintext */ n = lws_jwe_encrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_encrypt failed\n", __func__); goto bail1; } if (lws_cmdline_option(argc, argv, "-f")) /* output the JWE in flattened form */ n = lws_jwe_render_flattened(&jwe, compact, sizeof(compact)); else /* output the JWE in compact form */ n = lws_jwe_render_compact(&jwe, compact, sizeof(compact)); if (n < 0) { lwsl_err("%s: lws_jwe_render failed: %d\n", __func__, n); goto bail1; } if (lws_cmdline_option(argc, argv, "-c")) format_c(compact); else if (write(1, compact, #if defined(WIN32) (unsigned int) #endif strlen(compact)) < 0) { lwsl_err("Write stdout failed\n"); goto bail1; } } else { if (lws_cmdline_option(argc, argv, "-f")) { if (lws_jwe_json_parse(&jwe, (uint8_t *)in, n, lws_concat_temp(temp, temp_len), &temp_len)) { lwsl_err("%s: lws_jwe_json_parse failed\n", __func__); goto bail1; } } else /* * converts a compact serialization to b64 + decoded maps * held in jws */ if (lws_jws_compact_decode(in, n, &jwe.jws.map, &jwe.jws.map_b64, lws_concat_temp(temp, temp_len), &temp_len) != 5) { lwsl_err("%s: lws_jws_compact_decode failed\n", __func__); goto bail1; } /* * Do the crypto according to what we parsed into the jose * (information on the ciphers) and the jws (plaintext and * signature info) */ n = lws_jwe_auth_and_decrypt(&jwe, lws_concat_temp(temp, temp_len), &temp_len); if (n < 0) { lwsl_err("%s: lws_jwe_auth_and_decrypt failed\n", __func__); goto bail1; } /* if it's valid, dump the plaintext and return 0 */ if (write(1, jwe.jws.map.buf[LJWE_CTXT], jwe.jws.map.len[LJWE_CTXT]) < 0) { lwsl_err("Write stdout failed\n"); goto bail1; } } result = 0; bail1: lws_jwe_destroy(&jwe); lws_context_destroy(context); return result; } libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-jwk/000077500000000000000000000000001476025525100247115ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-jwk/CMakeLists.txt000066400000000000000000000011611476025525100274500ustar00rootroot00000000000000project(lws-crypto-jwk C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-crypto-jwk) set(SRCS main.c) set(requirements 1) require_lws_config(LWS_WITH_JOSE 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-jwk/README.md000066400000000000000000000042001476025525100261640ustar00rootroot00000000000000# lws minimal example for JWK Demonstrates how to generate and format any kind of supported new random JWK keys. The full private key is output to stdout, a version of the key with the private part removed and some metadata adapted can be saved to a file at the same time using `--public `. In the public form, `key_ops` and `use` elements are adjusted to remove activities that require a private key. Key elements are output in strict RFC7638 lexicographic order as required by some applications. Keys produced with openssl and mbedtls backends are completely interchangeable. ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -t |RSA, OCT or EC -b |For RSA and OCT, key size in bits -v |For EC keys, the curve, eg, "P-384"... this implies the key bits --kid "ID string"|Key identity string --use "use[ use]"|Key use restriction (mutually exclusive with --key-ops): sig, enc --alg |Specify the algorithm the key is designed for, eg "RSA1_5" --key-ops "op[ op]"|Key valid operations (mutually exclusive with --use): sign, verify, encrypt, decrypt, wrapKey, unwrapKey, deriveKey, deriveBits -c|Format the jwk as a linebroken C string --public |Only output the full, private key, not the public version first For legibility the example uses -c, however this ``` $ ./lws-crypto-jwk -t EC -v P-256 --key-ops "sign verify" --public mykey.pub [2018/12/18 20:19:29:6972] USER: LWS JWK example [2018/12/18 20:19:29:7200] NOTICE: Creating Vhost 'default' (serving disabled), 1 protocols, IPv6 off [2018/12/18 20:19:29:7251] NOTICE: lws_jwk_generate: generating ECDSA key on curve P-256 {"crv":"P-256","d":"eMKM_S4BTL2aiebZLqvxglufV2YX4b3_32DesgEUOaM","key_ops":["sign","verify"],"kty":"EC","x":"OWauiGGtJ60ZegtqlwETQlmO1exTZdWbT2VbUs4a1hg","y":"g_eNOlqPecbguVQArL6Fd4T5xZthBgipNCBypXubPos"} ``` The output in `mykey.pub` is: ``` {"crv":"P-256","key_ops":["verify"],"kty":"EC","x":"OWauiGGtJ60ZegtqlwETQlmO1exTZdWbT2VbUs4a1hg","y":"g_eNOlqPecbguVQArL6Fd4T5xZthBgipNCBypXubPos"} ``` Notice the logging goes out on stderr, the key data goes on stdout. libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-jwk/main.c000066400000000000000000000076041476025525100260100ustar00rootroot00000000000000/* * lws-crypto-jwk * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include #include #include /* * handles escapes and line wrapping suitable for use * defining a C char array ( -c option ) */ static int format_c(int fd, const char *key) { const char *k = key; int seq = 0; while (*k) { if (*k == '{') { if (write(fd, "\"{\"\n\t\"", 6) < 6) return -1; k++; seq = 0; continue; } if (*k == '}') { if (write(fd, "\"\n\"}\"\n", 6) < 6) return -1; k++; seq = 0; continue; } if (*k == '\"') { if (write(fd, "\\\"", 2) < 2) return -1; seq += 2; k++; continue; } if (*k == ',') { if (write(fd, ",\"\n\t\"", 5) < 5) return -1; k++; seq = 0; continue; } if (write(fd, k, 1) < 1) return -1; seq++; if (seq >= 60) { if (write(fd, "\"\n\t \"", 5) < 5) return -1; seq = 1; } k++; } return 0; } int main(int argc, const char **argv) { int result = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; enum lws_gencrypto_kty kty = LWS_GENCRYPTO_KTY_RSA; struct lws_context_creation_info info; const char *curve = "P-256", *p; struct lws_context *context; struct lws_jwk jwk; int bits = 4096; char key[32768]; int vl = sizeof(key); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS JWK example\n"); if ((p = lws_cmdline_option(argc, argv, "-b"))) bits = atoi(p); if ((p = lws_cmdline_option(argc, argv, "-t"))) { if (!strcmp(p, "RSA")) kty = LWS_GENCRYPTO_KTY_RSA; else if (!strcmp(p, "OCT")) kty = LWS_GENCRYPTO_KTY_OCT; else if (!strcmp(p, "EC")) kty = LWS_GENCRYPTO_KTY_EC; else { lwsl_err("Unknown key type (must be " "OCT, RSA or EC)\n"); return 1; } } memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ #if defined(LWS_WITH_NETWORK) info.port = CONTEXT_PORT_NO_LISTEN; #endif info.options = 0; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } if ((p = lws_cmdline_option(argc, argv, "-v"))) curve = p; if (lws_jwk_generate(context, &jwk, kty, bits, curve)) { lwsl_err("lws_jwk_generate failed\n"); return 1; } if ((p = lws_cmdline_option(argc, argv, "--kid"))) lws_jwk_strdup_meta(&jwk, JWK_META_KID, p, (int)strlen(p)); if ((p = lws_cmdline_option(argc, argv, "--use"))) lws_jwk_strdup_meta(&jwk, JWK_META_USE, p, (int)strlen(p)); if ((p = lws_cmdline_option(argc, argv, "--alg"))) lws_jwk_strdup_meta(&jwk, JWK_META_ALG, p, (int)strlen(p)); if ((p = lws_cmdline_option(argc, argv, "--key-ops"))) lws_jwk_strdup_meta(&jwk, JWK_META_KEY_OPS, p, (int)strlen(p)); if ((p = lws_cmdline_option(argc, argv, "--public")) && kty != LWS_GENCRYPTO_KTY_OCT) { int fd; /* public version */ if (lws_jwk_export(&jwk, 0, key, &vl) < 0) { lwsl_err("lws_jwk_export failed\n"); return 1; } fd = open(p, LWS_O_CREAT | LWS_O_TRUNC | LWS_O_WRONLY, 0600); if (fd < 0) { lwsl_err("Can't open public key file %s\n", p); return 1; } if (lws_cmdline_option(argc, argv, "-c")) format_c(fd, key); else { if (write(fd, key, #if defined(WIN32) (unsigned int) #endif strlen(key)) < 0) { lwsl_err("Write public failed\n"); return 1; } } close(fd); } /* private version */ if (lws_jwk_export(&jwk, LWSJWKF_EXPORT_PRIVATE, key, &vl) < 0) { lwsl_err("lws_jwk_export failed\n"); return 1; } if (lws_cmdline_option(argc, argv, "-c")) { if (format_c(1, key) < 0) return 1; } else if (write(1, key, #if defined(WIN32) (unsigned int) #endif strlen(key)) < 0) { lwsl_err("Write stdout failed\n"); return 1; } lws_jwk_destroy(&jwk); lws_context_destroy(context); return result; } libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-jws/000077500000000000000000000000001476025525100247215ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-jws/CMakeLists.txt000066400000000000000000000011621476025525100274610ustar00rootroot00000000000000project(lws-crypto-jws C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-crypto-jws) set(SRCS main.c) set(requirements 1) require_lws_config(LWS_WITH_JOSE 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-jws/README.md000066400000000000000000000055021476025525100262020ustar00rootroot00000000000000# lws minimal example for JWS Demonstrates how to sign and verify using compact JWS and JWK, providing a commandline tool for signing and verifying stdin. ## build ``` $ cmake . && make ``` ## usage Stdin is either the plaintext (if signing) or compact JWS (if verifying). Stdout is either the JWE (if encrypting) or plaintext (if decrypting). You must pass a private or public key JWK file in the -k option if encrypting, and must pass a private key JWK file in the -k option if decrypting. To be clear, for asymmetric keys the public part of the key is required to encrypt, and the private part required to decrypt. For convenience, a pair of public and private keys are provided, `key-rsa-4096.private` and `key-rsa-4096.pub`, these were produced with just ``` $ lws-crypto-jwk -t RSA -b 4096 --public key-rsa-4096.pub >key-rsa-4096.private ``` Similar keys for EC modes may be produced with ``` $ lws-crypto-jwk -t EC -v P-256 --public key-ecdh-p-256.pub >key-ecdh-p-256.private ``` JWSs produced with openssl and mbedtls backends are completely interchangeable. Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -s ""|Sign (default is verify), eg, -e "ES256". For verify, the cipher information comes from the input JWS. -k |JWK file to sign or verify with... sign requires the key has its private part -c|Format the JWE as a linebroken C string -f|Output flattened representation (instead of compact by default) ``` $ echo -n "plaintext0123456" | ./lws-crypto-jws -s "ES256" -k ec-p256.private [2018/12/19 16:20:25:6519] USER: LWS JWE example tool [2018/12/19 16:20:25:6749] NOTICE: Creating Vhost 'default' (serving disabled), 1 protocols, IPv6 off eyJhbGciOiJSU0ExXzUiLCAiZW5jIjoiQTEyOENCQy1IUzI1NiJ9.ivFr7qzx-pQ4V_edbjpdvR9OwWL9KmojPE2rXQM52oLtW0BtnxZu2_ezqhsAelyIcaworgfobs3u4bslXHMFbeJJjPb5xD0fBDe64OYXZH1NpUGTMJh9Ka4CrJ2B3xhxe7EByGAuGqmluqE0Yezj7rhSw7vlr5JAwuOJ8FaGa8aZ8ldki5G5h_S2Furlbjdcw3Rrxk7mCoMHcLoqzfZtggMPwGAMFogCqcwUo7oSLbBeGaa6hpMbfSysugseWdr8TzObQKPM52k6iVAlGwRaOg_qdLMgZiYRhHA6nFKTQd7XBbNY6qAS8sPuj7Zz344tF3RSfJ0zX_telG71sOtVv5fMpeDU-eCdpOWlCBfu6J6FQfAFu6SJryM4ajGOif09CwFI5qUQ33SOfQfS_M3nqSyd6Vu5M4lsDrb5wK7_XX5gqUwvI9wicf_8WWR-CQomRF-JvEASnA2SIf8QqYfa8R2rP9q6Md4vwO4EZrtxIsMDPsH-4ZEFu7vDjyy09QfIWWsnEb8-UgpVXensgt2m_2bZ76r1VB8-0nZLMwMyEhaH2wra9vX2FWao5UkmNJ7ht300f4_V6QzMFoePpwCvsufWBW6jcQLB-frCWe6uitWaZHEB4LxmNPKzQSz4QwwTKhpF1jNn8Xh1-w1m-2h0gj-oe-S8QBwPveqhPI1p2fI.snuhUTXHNu5mJ6dEPQqg6g.yl36qC4o0GE4nrquQ2YyCg.Vf0MoT7_kUrZdCNWXhq1DQ ``` Notice the logging is on stderr, and the output alone on stdout. When signing, the compact representation of the JWS is output on stdout. When verifying, if the signature is valid the plaintext is output on stdout and the tool exits with a 0 exit code. Otherwise nothing is output on stdout and it exits with a nonzero exit code. libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-jws/main.c000066400000000000000000000126051476025525100260150ustar00rootroot00000000000000/* * lws-crypto-jws * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include #include #include #define MAX_SIZE (4 * 1024 * 1024) char temp[MAX_SIZE], compact[MAX_SIZE]; int main(int argc, const char **argv) { int n, sign = 0, result = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; char *in; struct lws_context_creation_info info; struct lws_jws_map map; int temp_len = sizeof(temp); struct lws_context *context; struct lws_jose jose; struct lws_jwk jwk; struct lws_jws jws; const char *p; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS JWS example tool\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ #if defined(LWS_WITH_NETWORK) info.port = CONTEXT_PORT_NO_LISTEN; #endif info.options = 0; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } lws_jose_init(&jose); lws_jws_init(&jws, &jwk, context); /* if signing, set the ciphers */ if ((p = lws_cmdline_option(argc, argv, "-s"))) { if (lws_gencrypto_jws_alg_to_definition(p, &jose.alg)) { lwsl_err("format: -s \"\", eg, " "-e \"RS256\"\n"); return 1; } /* create JOSE header, also needed for output */ if (lws_jws_alloc_element(&jws.map, LJWS_JOSE, lws_concat_temp(temp, temp_len), &temp_len, strlen(p) + 10, 0)) { lwsl_err("%s: temp space too small\n", __func__); return 1; } jws.map.len[LJWS_JOSE] = (uint32_t) lws_snprintf((char *)jws.map.buf[LJWS_JOSE], (unsigned int)temp_len, "{\"alg\":\"%s\"}", p); sign = 1; } in = lws_concat_temp(temp, temp_len); n = (int)read(0, in, (unsigned int)temp_len); if (n < 0) { lwsl_err("Problem reading from stdin\n"); return 1; } temp_len -= n; /* grab the key */ if ((p = lws_cmdline_option(argc, argv, "-k"))) { if (lws_jwk_load(&jwk, p, NULL, NULL)) { lwsl_err("%s: problem loading JWK %s\n", __func__, p); return 1; } } else { lwsl_err("-k is required\n"); return 1; } if (sign) { /* add the plaintext from stdin to the map and a b64 version */ jws.map.buf[LJWS_PYLD] = in; jws.map.len[LJWS_PYLD] = (unsigned int)n; if (lws_jws_encode_b64_element(&jws.map_b64, LJWS_PYLD, lws_concat_temp(temp, temp_len), &temp_len, jws.map.buf[LJWS_PYLD], jws.map.len[LJWS_PYLD])) goto bail1; /* add the b64 JOSE header to the b64 map */ if (lws_jws_encode_b64_element(&jws.map_b64, LJWS_JOSE, lws_concat_temp(temp, temp_len), &temp_len, jws.map.buf[LJWS_JOSE], jws.map.len[LJWS_JOSE])) goto bail1; /* prepare the space for the b64 signature in the map */ if (lws_jws_alloc_element(&jws.map_b64, LJWS_SIG, lws_concat_temp(temp, temp_len), &temp_len, (unsigned int)lws_base64_size( LWS_JWE_LIMIT_KEY_ELEMENT_BYTES), 0)) { lwsl_err("%s: temp space too small\n", __func__); goto bail1; } /* sign the plaintext */ n = lws_jws_sign_from_b64(&jose, &jws, (char *)jws.map_b64.buf[LJWS_SIG], jws.map_b64.len[LJWS_SIG]); if (n < 0) { lwsl_err("%s: failed signing test packet\n", __func__); goto bail1; } /* set the actual b64 signature size */ jws.map_b64.len[LJWS_SIG] = (uint32_t)n; if (lws_cmdline_option(argc, argv, "-f")) /* create the flattened representation */ n = lws_jws_write_flattened_json(&jws, compact, sizeof(compact)); else /* create the compact JWS representation */ n = lws_jws_write_compact(&jws, compact, sizeof(compact)); if (n < 0) { lwsl_notice("%s: write_compact failed\n", __func__); goto bail1; } /* dump the compact JWS representation on stdout */ if (write(1, compact, #if defined(WIN32) (unsigned int) #endif strlen(compact)) < 0) { lwsl_err("Write stdout failed\n"); goto bail1; } } else { /* perform the verify directly on the compact representation */ if (lws_cmdline_option(argc, argv, "-f")) { if (lws_jws_sig_confirm_json(in, (unsigned int)n, &jws, &jwk, context, lws_concat_temp(temp, temp_len), &temp_len) < 0) { lwsl_notice("%s: confirm rsa sig failed\n", __func__); lwsl_hexdump_notice(jws.map.buf[LJWS_JOSE], jws.map.len[LJWS_JOSE]); lwsl_hexdump_notice(jws.map.buf[LJWS_PYLD], jws.map.len[LJWS_PYLD]); lwsl_hexdump_notice(jws.map.buf[LJWS_SIG], jws.map.len[LJWS_SIG]); lwsl_hexdump_notice(jws.map_b64.buf[LJWS_JOSE], jws.map_b64.len[LJWS_JOSE]); lwsl_hexdump_notice(jws.map_b64.buf[LJWS_PYLD], jws.map_b64.len[LJWS_PYLD]); lwsl_hexdump_notice(jws.map_b64.buf[LJWS_SIG], jws.map_b64.len[LJWS_SIG]); goto bail1; } } else { if (lws_jws_sig_confirm_compact_b64(in, lws_concat_used(temp, (unsigned int)temp_len), &map, &jwk, context, lws_concat_temp(temp, temp_len), &temp_len) < 0) { lwsl_notice("%s: confirm rsa sig failed\n", __func__); goto bail1; } } lwsl_notice("VALID\n"); /* dump the verifed plaintext and return 0 */ if (write(1, jws.map.buf[LJWS_PYLD], jws.map.len[LJWS_PYLD]) < 0) { lwsl_err("Write stdout failed\n"); goto bail1; } } result = 0; bail1: lws_jws_destroy(&jws); lws_jwk_destroy(&jwk); lws_context_destroy(context); return result; } libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-x509/000077500000000000000000000000001476025525100246235ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-x509/CMakeLists.txt000066400000000000000000000011641476025525100273650ustar00rootroot00000000000000project(lws-crypto-x509 C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-crypto-x509) set(SRCS main.c) set(requirements 1) require_lws_config(LWS_WITH_JOSE 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-x509/README.md000066400000000000000000000052461476025525100261110ustar00rootroot00000000000000# lws minimal example for X509 The example shows how to: - confirm one PEM cert or chain (-c) was signed by a trusted PEM cert (-t) - convert a certificate public key to JWK - convert a certificate public key and its private key PEM to a private JWK The examples work for EC and RSA certs and on mbedtls and OpenSSL the same. Notice the logging is on stderr, and only the JWK is output on stdout. ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -c |Required PEM Certificate(s) to operate on... may be multiple concatednated PEM -t |Single PEM trusted certificate -p |Optional private key matching certificate given in -c. If given, only the private JWK is printed to stdout Example for confirming trust relationship. Notice the PEM in -c must contain not only the final certificate but also the certificates for any intermediate CAs. ``` $ ./lws-crypto-x509 -c ec-cert.pem -t ca-cert.pem [2019/01/02 20:31:13:2031] USER: LWS X509 api example [2019/01/02 20:31:13:2032] NOTICE: Creating Vhost 'default' (serving disabled), 1 protocols, IPv6 off [2019/01/02 20:31:13:2043] NOTICE: main: certs loaded OK [2019/01/02 20:31:13:2043] NOTICE: main: verified OK <<<<====== [2019/01/02 20:31:13:2045] NOTICE: Cert Public JWK {"crv":"P-521","kty":"EC","x":"_uRNBbIbm0zhk8v6ujvQX9924264ZkqJhit0qamAoCegzuJbLf434kN7_aFEt6u-QWUu6-N1R8t6OlvrLo2jrNY","y":"AU-29XpNyB7e5e3s5t0ylzGEnF601A8A7Tx8m8xxngARZX_bn22itGJ3Y57BTcclPMoG80KjWAMnRVtrKqrD_aGD"} [2019/01/02 20:31:13:2045] NOTICE: main: OK ``` Example creating JWKs for public and public + private cert + PEM keys: ``` $ ./lws-crypto-x509 -c ec-cert.pem -p ec-key.pem [2019/01/02 20:14:43:4966] USER: LWS X509 api example [2019/01/02 20:14:43:5225] NOTICE: Creating Vhost 'default' (serving disabled), 1 protocols, IPv6 off [2019/01/02 20:14:43:5707] NOTICE: lws_x509_public_to_jwk: EC key [2019/01/02 20:24:59:9514] USER: LWS X509 api example [2019/01/02 20:24:59:9741] NOTICE: Creating Vhost 'default' (serving disabled), 1 protocols, IPv6 off [2019/01/02 20:25:00:1261] NOTICE: lws_x509_public_to_jwk: key type 408 "id-ecPublicKey" [2019/01/02 20:25:00:1269] NOTICE: lws_x509_public_to_jwk: EC key [2019/01/02 20:25:00:2097] NOTICE: Cert + Key Private JWK {"crv":"P-521","d":"AU3iQSKfPskMTW4ZncrYLhipUYzLYty2XhemTQ_nSuUB1vB76jHmOYUTRXFBLkVCW8cQYyMa5dMa3Bvv-cdvH0IB","kty":"EC","x":"_uRNBbIbm0zhk8v6ujvQX9924264ZkqJhit0qamAoCegzuJbLf434kN7_aFEt6u-QWUu6-N1R8t6OlvrLo2jrNY","y":"AU-29XpNyB7e5e3s5t0ylzGEnF601A8A7Tx8m8xxngARZX_bn22itGJ3Y57BTcclPMoG80KjWAMnRVtrKqrD_aGD"} [2019/01/02 20:25:00:2207] NOTICE: main: OK ``` libwebsockets-4.3.5/minimal-examples/crypto/minimal-crypto-x509/main.c000066400000000000000000000110411476025525100257100ustar00rootroot00000000000000/* * lws-crypto-x509 * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include #include #include #include static int read_pem(const char *filename, char *pembuf, int pembuf_len) { int n, fd = open(filename, LWS_O_RDONLY); if (fd == -1) return -1; n = (int)read(fd, pembuf, (unsigned int)pembuf_len - 1); close(fd); pembuf[n++] = '\0'; return n; } static int read_pem_c509_cert(struct lws_x509_cert **x509, const char *filename, char *pembuf, int pembuf_len) { int n; n = read_pem(filename, pembuf, pembuf_len); if (n < 0) return -1; if (lws_x509_create(x509)) { lwsl_err("%s: failed to create x509\n", __func__); return -1; } if (lws_x509_parse_from_pem(*x509, pembuf, (unsigned int)n) < 0) { lwsl_err("%s: unable to parse PEM %s\n", __func__, filename); lws_x509_destroy(x509); return -1; } return 0; } int main(int argc, const char **argv) { int n, result = 1, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; struct lws_x509_cert *x509 = NULL, *x509_trusted = NULL; struct lws_context_creation_info info; struct lws_context *context; struct lws_jwk jwk; char pembuf[6144]; const char *p; memset(&jwk, 0, sizeof(jwk)); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS X509 api example\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ #if defined(LWS_WITH_NETWORK) info.port = CONTEXT_PORT_NO_LISTEN; #endif info.options = 0; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } p = lws_cmdline_option(argc, argv, "-c"); if (!p) { lwsl_err("%s: missing -c \n", __func__); goto bail; } if (read_pem_c509_cert(&x509, p, pembuf, sizeof(pembuf))) { lwsl_err("%s: unable to read \"%s\": errno %d\n", __func__, p, errno); goto bail; } p = lws_cmdline_option(argc, argv, "-t"); if (p) { if (read_pem_c509_cert(&x509_trusted, p, pembuf, sizeof(pembuf))) { lwsl_err("%s: unable to read \"%s\": errno %d\n", __func__, p, errno); goto bail1; } lwsl_notice("%s: certs loaded OK\n", __func__); if (lws_x509_verify(x509, x509_trusted, NULL)) { lwsl_err("%s: verify failed\n", __func__); goto bail2; } lwsl_notice("%s: verified OK\n", __func__); } if (x509_trusted) { /* show the trusted cert public key as a JWK */ if (lws_x509_public_to_jwk(&jwk, x509_trusted, "P-256,P-384,P-521", 4096)) { lwsl_err("%s: unable to get trusted cert pubkey as JWK\n", __func__); goto bail2; } if ((p = lws_cmdline_option(argc, argv, "--alg"))) lws_jwk_strdup_meta(&jwk, JWK_META_ALG, p, (int)strlen(p)); lwsl_info("JWK version of trusted cert:\n"); lws_jwk_dump(&jwk); lws_jwk_destroy(&jwk); } /* get the cert public key as a JWK */ if (lws_x509_public_to_jwk(&jwk, x509, "P-256,P-384,P-521", 4096)) { lwsl_err("%s: unable to get cert pubkey as JWK\n", __func__); goto bail3; } lwsl_info("JWK version of cert:\n"); if ((p = lws_cmdline_option(argc, argv, "--alg"))) lws_jwk_strdup_meta(&jwk, JWK_META_ALG, p, (int)strlen(p)); lws_jwk_dump(&jwk); /* only print public if he doesn't provide private */ if (!lws_cmdline_option(argc, argv, "-p")) { lwsl_notice("Issuing Cert Public JWK on stdout\n"); n = sizeof(pembuf); if (lws_jwk_export(&jwk, 0, pembuf, &n)) puts(pembuf); } /* if we know where the cert private key is, add that to the cert JWK */ p = lws_cmdline_option(argc, argv, "-p"); if (p) { n = read_pem(p, pembuf, sizeof(pembuf)); if (n < 0) { lwsl_err("%s: unable read privkey %s\n", __func__, p); goto bail3; } if (lws_x509_jwk_privkey_pem(context, &jwk, pembuf, (unsigned int)n, NULL)) { lwsl_err("%s: unable to parse privkey %s\n", __func__, p); goto bail3; } if ((p = lws_cmdline_option(argc, argv, "--alg"))) lws_jwk_strdup_meta(&jwk, JWK_META_ALG, p, (int)strlen(p)); lwsl_info("JWK version of cert + privkey:\n"); lws_jwk_dump(&jwk); lwsl_notice("Issuing Cert + Private JWK on stdout\n"); n = sizeof(pembuf); if (lws_jwk_export(&jwk, LWSJWKF_EXPORT_PRIVATE, pembuf, &n)) puts(pembuf); } result = 0; bail3: lws_jwk_destroy(&jwk); bail2: lws_x509_destroy(&x509_trusted); bail1: lws_x509_destroy(&x509); bail: lws_context_destroy(context); if (result) lwsl_err("%s: failed\n", __func__); else lwsl_notice("%s: OK\n", __func__); return result; } libwebsockets-4.3.5/minimal-examples/dbus-client/000077500000000000000000000000001476025525100220455ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/dbus-client/README.md000066400000000000000000000003171476025525100233250ustar00rootroot00000000000000|Example|Demonstrates| ---|--- minimal-dbus-client|Shows how to connect to a DBusServer dbus server like minimal-dbus-server minimal-dbus-ws-proxy-testclient|A test client for use with minimal-dbus-ws-proxy libwebsockets-4.3.5/minimal-examples/dbus-client/minimal-dbus-client/000077500000000000000000000000001476025525100257025ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/dbus-client/minimal-dbus-client/CMakeLists.txt000066400000000000000000000021161476025525100304420ustar00rootroot00000000000000project(lws-minimal-dbus-client C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(CheckLibraryExists) include(LwsCheckRequirements) set(SAMP lws-minimal-dbus-client) set(SRCS minimal-dbus-client.c) set(requirements 1) require_lws_config(LWS_ROLE_DBUS 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) if (NOT MSVC AND NOT WIN32 AND requirements) add_executable(${SAMP} ${SRCS}) if (NOT LWS_PLAT_FREERTOS) find_package(PkgConfig QUIET) pkg_check_modules(PC_DBUS1 dbus-1 QUIET) list(APPEND LWS_DBUS_INCLUDE1 ${PC_DBUS1_INCLUDE_DIRS}) list(APPEND LWS_DBUS_LIB "${PC_DBUS1_LIBRARIES};dl") endif() if (LWS_DBUS_INCLUDE1) include_directories("${LWS_DBUS_INCLUDE1}") endif() if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared ${LWS_DBUS_LIB}) else() target_link_libraries(${SAMP} websockets ${LWS_DBUS_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/dbus-client/minimal-dbus-client/README.md000066400000000000000000000025441476025525100271660ustar00rootroot00000000000000# lws minimal dbus client This demonstrates nonblocking, asynchronous dbus method calls as the client. ## build Using libdbus requires additional non-default include paths setting, same as is necessary for lws build described in ./lib/roles/dbus/README.md CMake can guess one path and the library name usually, see the README above for details of how to override for custom libdbus and cross build. Fedora example: ``` $ cmake .. -DLWS_DBUS_INCLUDE2="/usr/lib64/dbus-1.0/include" $ make ``` Ubuntu example: ``` $ cmake .. -DLWS_DBUS_INCLUDE2="/usr/lib/x86_64-linux-gnu/dbus-1.0/include" $ make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 The minimal client connects to the minimal dbus server example, which is expected to be listening on its default abstract unix domain socket path. It call the server Echo method with "Hello!" and returns to the event loop. When the reply comes, it prints the returned message. Afterwards it just sits there receiving unsolicited messages from the server example, until closed by the user. ``` $ ./lws-minimal-dbus-client ctx [2018/10/05 06:08:31:4901] NOTICE: pending_call_notify [2018/10/05 06:08:31:4929] USER: pending_call_notify: received 'Hello!' ^C[2018/10/05 06:09:22:4409] NOTICE: destroy_dbus_client_conn [2018/10/05 06:09:22:4691] NOTICE: Exiting cleanly ... ``` libwebsockets-4.3.5/minimal-examples/dbus-client/minimal-dbus-client/minimal-dbus-client.c000066400000000000000000000137721476025525100317150ustar00rootroot00000000000000/* * lws-minimal-dbus-client * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal session dbus server that uses the lws event loop, * making it possible to integrate it with other lws features. */ #include #include #include #include #include #include #include #include static struct lws_dbus_ctx *dbus_ctx; static struct lws_context *context; static int interrupted; #define THIS_INTERFACE "org.libwebsockets.test" #define THIS_OBJECT "/org/libwebsockets/test" #define THIS_BUSNAME "org.libwebsockets.test" #define THIS_LISTEN_PATH "unix:abstract=org.libwebsockets.test" static DBusHandlerResult client_message_handler(DBusConnection *conn, DBusMessage *message, void *data) { const char *str; lwsl_info("%s: Got D-Bus request: %s.%s on %s\n", __func__, dbus_message_get_interface(message), dbus_message_get_member(message), dbus_message_get_path(message)); if (!dbus_message_get_args(message, NULL, DBUS_TYPE_STRING, &str, DBUS_TYPE_INVALID)) return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; lwsl_notice("%s: '%s'\n", __func__, str); return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; } static void destroy_dbus_client_conn(struct lws_dbus_ctx *ctx) { if (!ctx || !ctx->conn) return; lwsl_notice("%s\n", __func__); dbus_connection_remove_filter(ctx->conn, client_message_handler, ctx); dbus_connection_close(ctx->conn); dbus_connection_unref(ctx->conn); free(ctx); } /* * This callback is coming when lws has noticed the fd took a POLLHUP. The * ctx has effectively gone out of scope before this, and the connection can * be cleaned up and the ctx freed. */ static void cb_closing(struct lws_dbus_ctx *ctx) { lwsl_err("%s: closing\n", __func__); if (ctx == dbus_ctx) dbus_ctx = NULL; destroy_dbus_client_conn(ctx); } static struct lws_dbus_ctx * create_dbus_client_conn(struct lws_vhost *vh, int tsi, const char *ads) { struct lws_dbus_ctx *ctx; DBusError err; ctx = malloc(sizeof(*ctx)); if (!ctx) return NULL; memset(ctx, 0, sizeof(*ctx)); ctx->vh = vh; ctx->tsi = tsi; dbus_error_init(&err); /* connect to the daemon bus */ ctx->conn = dbus_connection_open_private(ads, &err); if (!ctx->conn) { lwsl_err("%s: Failed to connect: %s\n", __func__, err.message); goto fail; } dbus_connection_set_exit_on_disconnect(ctx->conn, 0); if (!dbus_connection_add_filter(ctx->conn, client_message_handler, ctx, NULL)) { lwsl_err("%s: Failed to add filter\n", __func__); goto fail; } /* * This is the part that binds the connection to lws watcher and * timeout handling provided by lws */ if (lws_dbus_connection_setup(ctx, ctx->conn, cb_closing)) { lwsl_err("%s: connection bind to lws failed\n", __func__); goto fail; } lwsl_notice("%s: created OK\n", __func__); return ctx; fail: dbus_error_free(&err); free(ctx); return NULL; } void sigint_handler(int sig) { interrupted = 1; } /* * This gets called if we timed out waiting for the server reply, or the * reply arrived. */ static void pending_call_notify(DBusPendingCall *pending, void *data) { // struct lws_dbus_ctx *ctx = (struct lws_dbus_ctx *)data; const char *payload; DBusMessage *msg; if (!dbus_pending_call_get_completed(pending)) { lwsl_err("%s: timed out waiting for reply\n", __func__); goto bail; } msg = dbus_pending_call_steal_reply(pending); if (!msg) goto bail; if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &payload, DBUS_TYPE_INVALID)) { goto bail1; } lwsl_user("%s: received '%s'\n", __func__, payload); bail1: dbus_message_unref(msg); bail: dbus_pending_call_unref(pending); } static int remote_method_call(struct lws_dbus_ctx *ctx) { DBusMessage *msg; const char *payload = "Hello!"; int ret = 1; msg = dbus_message_new_method_call( /* dest */ THIS_BUSNAME, /* object-path */ THIS_OBJECT, /* interface */ THIS_INTERFACE, /* method */ "Echo"); if (!msg) return 1; if (!dbus_message_append_args(msg, DBUS_TYPE_STRING, &payload, DBUS_TYPE_INVALID)) goto bail; if (!dbus_connection_send_with_reply(ctx->conn, msg, &ctx->pc, DBUS_TIMEOUT_USE_DEFAULT)) { lwsl_err("%s: unable to send\n", __func__); goto bail; } dbus_pending_call_set_notify(ctx->pc, pending_call_notify, ctx, NULL); ret = 0; bail: dbus_message_unref(msg); return ret; } int main(int argc, const char **argv) { struct lws_vhost *vh; struct lws_context_creation_info info; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */ /* | LLL_THREAD */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal DBUS client\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } vh = lws_create_vhost(context, &info); if (!vh) goto bail; dbus_ctx = create_dbus_client_conn(vh, 0, THIS_LISTEN_PATH); if (!dbus_ctx) goto bail1; if (remote_method_call(dbus_ctx)) goto bail2; /* lws event loop (default poll one) */ while (n >= 0 && !interrupted) n = lws_service(context, 0); bail2: destroy_dbus_client_conn(dbus_ctx); bail1: /* this is required for valgrind-cleanliness */ dbus_shutdown(); lws_context_destroy(context); lwsl_notice("Exiting cleanly\n"); return 0; bail: lwsl_err("%s: failed to start\n", __func__); lws_context_destroy(context); return 1; } libwebsockets-4.3.5/minimal-examples/dbus-client/minimal-dbus-ws-proxy-testclient/000077500000000000000000000000001476025525100304105ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/dbus-client/minimal-dbus-ws-proxy-testclient/CMakeLists.txt000066400000000000000000000021661476025525100331550ustar00rootroot00000000000000project(lws-minimal-dbus-ws-proxy-testclient C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(CheckLibraryExists) include(LwsCheckRequirements) set(requirements 1) require_lws_config(LWS_ROLE_DBUS 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) if (NOT MSVC AND NOT WIN32 AND requirements) add_executable(${PROJECT_NAME} minimal-dbus-ws-proxy-testclient.c) if (NOT LWS_PLAT_FREERTOS) find_package(PkgConfig QUIET) pkg_check_modules(PC_DBUS1 dbus-1 QUIET) list(APPEND LWS_DBUS_INCLUDE1 ${PC_DBUS1_INCLUDE_DIRS}) list(APPEND LWS_DBUS_LIB "${PC_DBUS1_LIBRARIES};dl") endif() if (LWS_DBUS_INCLUDE1) include_directories("${LWS_DBUS_INCLUDE1}") endif() message("project ${PROJECT_NAME}") if (websockets_shared) target_link_libraries(${PROJECT_NAME} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${PROJECT_NAME} websockets_shared ${LWS_DBUS_LIB}) else() target_link_libraries(${PROJECT_NAME} websockets ${LWS_DBUS_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/dbus-client/minimal-dbus-ws-proxy-testclient/README.md000066400000000000000000000037571476025525100317030ustar00rootroot00000000000000# lws minimal dbus ws proxy testclient This is a test client used to test `./minimal-examples/dbus-server/minimal-dbus-ws-proxy` It asks the minimal dbus ws proxy application to connect to libwebsockets.org over the mirror protocol. And it proxies back the ASCII packets used to communicate the mirror sample drawing vectors over dbus to this test client if you draw on the [mirror example app](https://libwebsockets.org/testserver/) in a browser. ## build Using libdbus requires additional non-default include paths setting, same as is necessary for lws build described in ./lib/roles/dbus/README.md CMake can guess one path and the library name usually, see the README above for details of how to override for custom libdbus and cross build. Fedora example: ``` $ cmake .. -DLWS_DBUS_INCLUDE2="/usr/lib64/dbus-1.0/include" $ make ``` Ubuntu example: ``` $ cmake .. -DLWS_DBUS_INCLUDE2="/usr/lib/x86_64-linux-gnu/dbus-1.0/include" $ make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 This connects to the minimal-dbus-ws-proxy example running in another terminal. ``` $ ./lws-minimal-dbus-ws-proxy-testclient [2018/10/05 14:17:16:6286] USER: LWS minimal DBUS ws proxy testclient [2018/10/05 14:17:16:6538] NOTICE: Creating Vhost 'default' port 0, 1 protocols, IPv6 off [2018/10/05 14:17:16:6617] USER: create_dbus_client_conn: connecting to 'unix:abstract=org.libwebsockets.wsclientproxy' [2018/10/05 14:17:16:7189] NOTICE: create_dbus_client_conn: created OK [2018/10/05 14:17:16:7429] USER: remote_method_call: requesting proxy connection wss://libwebsockets.org/ lws-mirror-protocol [2018/10/05 14:17:17:0387] USER: pending_call_notify: received 'Connecting' [2018/10/05 14:17:18:7475] NOTICE: client_message_handler: (type 7) 'ws client connection established' [2018/10/05 14:17:21:2028] NOTICE: client_message_handler: (type 6) 'd #000000 323 63 323 67;' [2018/10/05 14:17:21:2197] NOTICE: client_message_handler: (type 6) 'd #000000 323 67 327 73;' ... ``` minimal-dbus-ws-proxy-testclient.c000066400000000000000000000243371476025525100370510ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/dbus-client/minimal-dbus-ws-proxy-testclient/* * lws-minimal-dbus-ws-proxy-testclient * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This acts as a test client over DBUS, opening a session with * minimal-dbus-ws-proxy and sending and receiving data on the libwebsockets * mirror demo page. */ #include #include #include #include #include #include #include #include /* * These are the various states our connection can be in, both with regards * to the direct connection to the proxy, and the state of the onward ws * connection the proxy opens at our request. */ enum lws_dbus_client_state { LDCS_NOTHING, /* no connection yet */ LDCS_CONN, /* conn to proxy */ LDCS_CONN_WAITING_ONWARD, /* conn to proxy, awaiting proxied conn */ LDCS_CONN_ONWARD, /* conn to proxy and onward conn OK */ LDCS_CONN_CLOSED, /* conn to proxy but onward conn closed */ LDCS_CLOSED, /* connection to proxy is closed */ }; /* * our expanded dbus context */ struct lws_dbus_ctx_wsproxy_client { struct lws_dbus_ctx ctx; lws_sorted_usec_list_t sul; enum lws_dbus_client_state state; }; static struct lws_dbus_ctx_wsproxy_client *dbus_ctx; static struct lws_context *context; static int interrupted, autoexit_budget = -1, count_rx, count_tx; #define THIS_INTERFACE "org.libwebsockets.wsclientproxy" #define THIS_OBJECT "/org/libwebsockets/wsclientproxy" #define THIS_BUSNAME "org.libwebsockets.wsclientproxy" #define THIS_LISTEN_PATH "unix:abstract=org.libwebsockets.wsclientproxy" static void state_transition(struct lws_dbus_ctx_wsproxy_client *dcwc, enum lws_dbus_client_state state) { lwsl_notice("%s: %p: from state %d -> %d\n", __func__, dcwc,dcwc->state, state); dcwc->state = state; } static DBusHandlerResult filter(DBusConnection *conn, DBusMessage *message, void *data) { struct lws_dbus_ctx_wsproxy_client *dcwc = (struct lws_dbus_ctx_wsproxy_client *)data; const char *str; if (!dbus_message_get_args(message, NULL, DBUS_TYPE_STRING, &str, DBUS_TYPE_INVALID)) return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; /* received ws data */ if (dbus_message_is_signal(message, THIS_INTERFACE, "Receive")) { lwsl_user("%s: Received '%s'\n", __func__, str); count_rx++; } /* proxy ws connection failed */ if (dbus_message_is_signal(message, THIS_INTERFACE, "Status") && !strcmp(str, "ws client connection error")) state_transition(dcwc, LDCS_CONN_CLOSED); /* proxy ws connection succeeded */ if (dbus_message_is_signal(message, THIS_INTERFACE, "Status") && !strcmp(str, "ws client connection established")) state_transition(dcwc, LDCS_CONN_ONWARD); /* proxy ws connection has closed */ if (dbus_message_is_signal(message, THIS_INTERFACE, "Status") && !strcmp(str, "ws client connection closed")) state_transition(dcwc, LDCS_CONN_CLOSED); return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; } static void destroy_dbus_client_conn(struct lws_dbus_ctx_wsproxy_client **pdcwc) { struct lws_dbus_ctx_wsproxy_client *dcwc = *pdcwc; if (!dcwc || !dcwc->ctx.conn) return; lwsl_notice("%s\n", __func__); dbus_connection_remove_filter(dcwc->ctx.conn, filter, &dcwc->ctx); dbus_connection_close(dcwc->ctx.conn); dbus_connection_unref(dcwc->ctx.conn); free(dcwc); *pdcwc = NULL; } /* * This callback is coming when lws has noticed the fd took a POLLHUP. The * ctx has effectively gone out of scope before this, and the connection can * be cleaned up and the ctx freed. */ static void cb_closing(struct lws_dbus_ctx *ctx) { struct lws_dbus_ctx_wsproxy_client *dcwc = (struct lws_dbus_ctx_wsproxy_client *)ctx; lwsl_err("%s: closing\n", __func__); if (dcwc == dbus_ctx) dbus_ctx = NULL; destroy_dbus_client_conn(&dcwc); interrupted = 1; } static struct lws_dbus_ctx_wsproxy_client * create_dbus_client_conn(struct lws_vhost *vh, int tsi, const char *ads) { struct lws_dbus_ctx_wsproxy_client *dcwc; DBusError e; dcwc = malloc(sizeof(*dcwc)); if (!dcwc) return NULL; memset(dcwc, 0, sizeof(*dcwc)); dcwc->state = LDCS_NOTHING; dcwc->ctx.vh = vh; dcwc->ctx.tsi = tsi; dbus_error_init(&e); lwsl_user("%s: connecting to '%s'\n", __func__, ads); #if 1 /* connect to our daemon bus */ dcwc->ctx.conn = dbus_connection_open_private(ads, &e); if (!dcwc->ctx.conn) { lwsl_err("%s: Failed to connect: %s\n", __func__, e.message); goto fail; } #else /* connect to the SYSTEM bus */ dcwc->ctx.conn = dbus_bus_get(DBUS_BUS_SYSTEM, &e); if (!dcwc->ctx.conn) { lwsl_err("%s: Failed to get a session DBus connection: %s\n", __func__, e.message); goto fail; } #endif dbus_connection_set_exit_on_disconnect(dcwc->ctx.conn, 0); if (!dbus_connection_add_filter(dcwc->ctx.conn, filter, &dcwc->ctx, NULL)) { lwsl_err("%s: Failed to add filter\n", __func__); goto fail; } /* * This is the part that binds the connection to lws watcher and * timeout handling provided by lws */ if (lws_dbus_connection_setup(&dcwc->ctx, dcwc->ctx.conn, cb_closing)) { lwsl_err("%s: connection bind to lws failed\n", __func__); goto fail; } state_transition(dcwc, LDCS_CONN); lwsl_notice("%s: created OK\n", __func__); return dcwc; fail: dbus_error_free(&e); free(dcwc); return NULL; } void sigint_handler(int sig) { interrupted = 1; } /* * This gets called if we timed out waiting for the dbus server reply, or the * reply arrived. */ static void pending_call_notify(DBusPendingCall *pending, void *data) { const char *payload; DBusMessage *msg; if (!dbus_pending_call_get_completed(pending)) { lwsl_err("%s: timed out waiting for reply\n", __func__); goto bail; } msg = dbus_pending_call_steal_reply(pending); if (!msg) goto bail; if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &payload, DBUS_TYPE_INVALID)) { goto bail1; } lwsl_user("%s: received '%s'\n", __func__, payload); bail1: dbus_message_unref(msg); bail: dbus_pending_call_unref(pending); } static int remote_method_call(struct lws_dbus_ctx_wsproxy_client *dcwc) { char _uri[96]; const char *subprotocol = "lws-mirror-protocol", *uri = _uri; DBusMessage *msg; int ret = 1; /* * make our own private mirror session... because others may run this * at the same time against libwebsockets.org... as happened 2019-03-14 * and broke travis tests :-) */ lws_snprintf(_uri, sizeof(_uri), "wss://libwebsockets.org/?mirror=dbt-%d", (int)getpid()); msg = dbus_message_new_method_call( /* dest */ THIS_BUSNAME, /* object-path */ THIS_OBJECT, /* interface */ THIS_INTERFACE, /* method */ "Connect"); if (!msg) return 1; if (!dbus_message_append_args(msg, DBUS_TYPE_STRING, &uri, DBUS_TYPE_STRING, &subprotocol, DBUS_TYPE_INVALID)) goto bail; lwsl_user("%s: requesting proxy connection %s %s\n", __func__, uri, subprotocol); if (!dbus_connection_send_with_reply(dcwc->ctx.conn, msg, &dcwc->ctx.pc, DBUS_TIMEOUT_USE_DEFAULT)) { lwsl_err("%s: unable to send\n", __func__); goto bail; } dbus_pending_call_set_notify(dcwc->ctx.pc, pending_call_notify, &dcwc->ctx, NULL); state_transition(dcwc, LDCS_CONN_WAITING_ONWARD); ret = 0; bail: dbus_message_unref(msg); return ret; } static void sul_timer(struct lws_sorted_usec_list *sul) { char payload[64]; const char *ws_pkt = payload; DBusMessage *msg; if (!dbus_ctx || dbus_ctx->state != LDCS_CONN_ONWARD) goto again; if (autoexit_budget > 0) { if (!--autoexit_budget) { lwsl_notice("reached autoexit budget\n"); interrupted = 1; return; } } msg = dbus_message_new_method_call(THIS_BUSNAME, THIS_OBJECT, THIS_INTERFACE, "Send"); if (!msg) goto again; lws_snprintf(payload, sizeof(payload), "d #%06X %d %d %d %d;", rand() & 0xffffff, rand() % 480, rand() % 300, rand() % 480, rand() % 300); if (!dbus_message_append_args(msg, DBUS_TYPE_STRING, &ws_pkt, DBUS_TYPE_INVALID)) { dbus_message_unref(msg); goto again; } if (!dbus_connection_send_with_reply(dbus_ctx->ctx.conn, msg, &dbus_ctx->ctx.pc, DBUS_TIMEOUT_USE_DEFAULT)) { lwsl_err("%s: unable to send\n", __func__); dbus_message_unref(msg); goto again; } dbus_message_unref(msg); dbus_pending_call_set_notify(dbus_ctx->ctx.pc, pending_call_notify, &dbus_ctx->ctx, NULL); count_tx++; again: lws_sul_schedule(context, 0, &dbus_ctx->sul, sul_timer, 2 * LWS_US_PER_SEC); } int main(int argc, const char **argv) { struct lws_vhost *vh; struct lws_context_creation_info info; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */ /* | LLL_THREAD */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); if ((p = lws_cmdline_option(argc, argv, "-x"))) autoexit_budget = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal DBUS ws proxy testclient\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } info.options |= LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; vh = lws_create_vhost(context, &info); if (!vh) goto bail; dbus_ctx = create_dbus_client_conn(vh, 0, THIS_LISTEN_PATH); if (!dbus_ctx) goto bail1; lws_sul_schedule(context, 0, &dbus_ctx->sul, sul_timer, LWS_US_PER_SEC); if (remote_method_call(dbus_ctx)) goto bail2; /* lws event loop (default poll one) */ while (n >= 0 && !interrupted) n = lws_service(context, 0); bail2: destroy_dbus_client_conn(&dbus_ctx); bail1: /* this is required for valgrind-cleanliness */ dbus_shutdown(); lws_context_destroy(context); lwsl_notice("Exiting cleanly, rx: %d, tx: %d\n", count_rx, count_tx); return 0; bail: lwsl_err("%s: failed to start\n", __func__); lws_context_destroy(context); return 1; } libwebsockets-4.3.5/minimal-examples/dbus-server/000077500000000000000000000000001476025525100220755ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/dbus-server/README.md000066400000000000000000000002541476025525100233550ustar00rootroot00000000000000|Example|Demonstrates| ---|--- minimal-dbus-server|Shows how to run a DBUS session server using lws event loop minimal-dbus-ws-proxy|Control ws client connections via DBUS libwebsockets-4.3.5/minimal-examples/dbus-server/minimal-dbus-server/000077500000000000000000000000001476025525100257625ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/dbus-server/minimal-dbus-server/CMakeLists.txt000066400000000000000000000020771476025525100305300ustar00rootroot00000000000000project(lws-minimal-dbus-server C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(CheckLibraryExists) include(LwsCheckRequirements) set(SAMP lws-minimal-dbus-server) set(SRCS main.c) set(requirements 1) require_lws_config(LWS_ROLE_DBUS 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) if (NOT MSVC AND NOT WIN32 AND requirements) add_executable(${SAMP} ${SRCS}) if (NOT LWS_PLAT_FREERTOS) find_package(PkgConfig QUIET) pkg_check_modules(PC_DBUS1 dbus-1 QUIET) list(APPEND LWS_DBUS_INCLUDE1 ${PC_DBUS1_INCLUDE_DIRS}) list(APPEND LWS_DBUS_LIB "${PC_DBUS1_LIBRARIES};dl") endif() if (LWS_DBUS_INCLUDE1) include_directories("${LWS_DBUS_INCLUDE1}") endif() if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared ${LWS_DBUS_LIB}) else() target_link_libraries(${SAMP} websockets ${LWS_DBUS_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/dbus-server/minimal-dbus-server/README.md000066400000000000000000000051651476025525100272500ustar00rootroot00000000000000# lws minimal dbus server ## build Using libdbus requires additional non-default include paths setting, same as is necessary for lws build described in ./lib/roles/dbus/README.md CMake can guess one path and the library name usually, see the README above for details of how to override for custom libdbus and cross build. Fedora example: ``` $ cmake .. -DLWS_DBUS_INCLUDE2="/usr/lib64/dbus-1.0/include" $ make ``` Ubuntu example: ``` $ cmake .. -DLWS_DBUS_INCLUDE2="/usr/lib/x86_64-linux-gnu/dbus-1.0/include" $ make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 --session | Bind to session bus instead of creating private abstract unix socket By default the minimal server listens using its own abstract unix socket at `unix:abstract=org.libwebsockets.test`. You can also run it instead as a participant on the session bus, without its own unix socket, by giving `--session`. ### Examples using the default private abstract unix socket ``` $ ./lws-minimal-dbus-server [2018/10/03 07:08:02:6448] USER: LWS minimal dbus server [2018/10/03 07:08:02:6693] NOTICE: Creating Vhost 'default' port 0, 1 protocols, IPv6 off ... ``` You can communicate with the dbus server over its private abstract socket using, eg ``` $ gdbus introspect --address unix:abstract=org.libwebsockets.test --dest org.libwebsockets.test --object-path /org/libwebsockets/test node /org/example/TestObject { interface org.freedesktop.DBus.Introspectable { methods: Introspect(out s data); signals: properties: }; interface org.freedesktop.DBus.Properties { methods: Get(in s interface, ... ``` ``` $ gdbus call --address unix:abstract=org.libwebsockets.test --dest org.libwebsockets.test --object-path /org/libwebsockets/test --method org.libwebsockets.test.Echo HELLO ('HELLO',) ``` ### Examples using the DBUS session bus ``` $ ./lws-minimal-dbus-server --session [2018/10/03 07:08:02:6448] USER: LWS minimal dbus server [2018/10/03 07:08:02:6693] NOTICE: Creating Vhost 'default' port 0, 1 protocols, IPv6 off ... ``` You can communicate with the dbus server over the session bus using, eg ``` $ gdbus introspect --session --dest org.libwebsockets.test --object-path /org/libwebsockets/test node /org/example/TestObject { interface org.freedesktop.DBus.Introspectable { methods: Introspect(out s data); signals: properties: }; interface org.freedesktop.DBus.Properties { methods: Get(in s interface, ... ``` ``` $ gdbus call --session --dest org.libwebsockets.test --object-path /org/libwebsockets/test --method org.libwebsockets.test.Echo HELLO ('HELLO',) ``` libwebsockets-4.3.5/minimal-examples/dbus-server/minimal-dbus-server/main.c000066400000000000000000000322001476025525100270470ustar00rootroot00000000000000/* * lws-minimal-dbus-server * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal session dbus server that uses the lws event loop, * making it possible to integrate it with other lws features. * * The dbus server parts are based on "Sample code illustrating basic use of * D-BUS" (presumed Public Domain) here: * * https://github.com/fbuihuu/samples-dbus/blob/master/dbus-server.c */ #include #include #include #include #include #include #include #include static struct lws_context *context; static const char *version = "0.1"; static int interrupted; static struct lws_dbus_ctx dbus_ctx, ctx_listener; static char session; #define THIS_INTERFACE "org.libwebsockets.test" #define THIS_OBJECT "/org/libwebsockets/test" #define THIS_BUSNAME "org.libwebsockets.test" #define THIS_LISTEN_PATH "unix:abstract=org.libwebsockets.test" static const char * server_introspection_xml = DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE "\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " " " \n" "\n"; static DBusHandlerResult dmh_introspect(DBusConnection *c, DBusMessage *m, DBusMessage **reply, void *d) { dbus_message_append_args(*reply, DBUS_TYPE_STRING, &server_introspection_xml, DBUS_TYPE_INVALID); return DBUS_HANDLER_RESULT_HANDLED; } static DBusHandlerResult dmh_get(DBusConnection *c, DBusMessage *m, DBusMessage **reply, void *d) { const char *interface, *property; DBusError err; dbus_error_init(&err); if (!dbus_message_get_args(m, &err, DBUS_TYPE_STRING, &interface, DBUS_TYPE_STRING, &property, DBUS_TYPE_INVALID)) { dbus_message_unref(*reply); *reply = dbus_message_new_error(m, err.name, err.message); dbus_error_free(&err); return DBUS_HANDLER_RESULT_HANDLED; } if (strcmp(property, "Version")) /* Unknown property */ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; dbus_message_append_args(*reply, DBUS_TYPE_STRING, &version, DBUS_TYPE_INVALID); return DBUS_HANDLER_RESULT_HANDLED; } static DBusHandlerResult dmh_getall(DBusConnection *c, DBusMessage *m, DBusMessage **reply, void *d) { DBusMessageIter arr, di, iter, va; const char *property = "Version"; dbus_message_iter_init_append(*reply, &iter); dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "{sv}", &arr); /* Append all properties name/value pairs */ dbus_message_iter_open_container(&arr, DBUS_TYPE_DICT_ENTRY, NULL, &di); dbus_message_iter_append_basic(&di, DBUS_TYPE_STRING, &property); dbus_message_iter_open_container(&di, DBUS_TYPE_VARIANT, "s", &va); dbus_message_iter_append_basic(&va, DBUS_TYPE_STRING, &version); dbus_message_iter_close_container(&di, &va); dbus_message_iter_close_container(&arr, &di); dbus_message_iter_close_container(&iter, &arr); return DBUS_HANDLER_RESULT_HANDLED; } static DBusHandlerResult dmh_ping(DBusConnection *c, DBusMessage *m, DBusMessage **reply, void *d) { const char *pong = "Pong"; dbus_message_append_args(*reply, DBUS_TYPE_STRING, &pong, DBUS_TYPE_INVALID); return DBUS_HANDLER_RESULT_HANDLED; } static DBusHandlerResult dmh_echo(DBusConnection *c, DBusMessage *m, DBusMessage **reply, void *d) { const char *msg; DBusError err; dbus_error_init(&err); if (!dbus_message_get_args(m, &err, DBUS_TYPE_STRING, &msg, DBUS_TYPE_INVALID)) { dbus_message_unref(*reply); *reply = dbus_message_new_error(m, err.name, err.message); dbus_error_free(&err); return DBUS_HANDLER_RESULT_HANDLED; } dbus_message_append_args(*reply, DBUS_TYPE_STRING, &msg, DBUS_TYPE_INVALID); return DBUS_HANDLER_RESULT_HANDLED; } static DBusHandlerResult dmh_emit_signal(DBusConnection *c, DBusMessage *m, DBusMessage **reply, void *d) { DBusMessage *r = dbus_message_new_signal(THIS_OBJECT, THIS_INTERFACE, "OnEmitSignal"); if (!r) return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; if (!dbus_connection_send(c, r, NULL)) return DBUS_HANDLER_RESULT_NEED_MEMORY; /* and send the original empty reply after */ return DBUS_HANDLER_RESULT_HANDLED; } static DBusHandlerResult dmh_emit_quit(DBusConnection *c, DBusMessage *m, DBusMessage **reply, void *d) { interrupted = 1; return DBUS_HANDLER_RESULT_HANDLED; } struct lws_dbus_methods { const char *inter; const char *call; lws_dbus_message_handler handler; } meths[] = { { DBUS_INTERFACE_INTROSPECTABLE, "Introspect", dmh_introspect }, { DBUS_INTERFACE_PROPERTIES, "Get", dmh_get }, { DBUS_INTERFACE_PROPERTIES, "GetAll", dmh_getall }, { THIS_INTERFACE, "Ping", dmh_ping }, { THIS_INTERFACE, "Echo", dmh_echo }, { THIS_INTERFACE, "EmitSignal", dmh_emit_signal }, { THIS_INTERFACE, "Quit", dmh_emit_quit }, }; static DBusHandlerResult server_message_handler(DBusConnection *conn, DBusMessage *message, void *data) { struct lws_dbus_methods *mp = meths; DBusHandlerResult result; DBusMessage *reply = NULL; size_t n; lwsl_info("%s: Got D-Bus request: %s.%s on %s\n", __func__, dbus_message_get_interface(message), dbus_message_get_member(message), dbus_message_get_path(message)); for (n = 0; n < LWS_ARRAY_SIZE(meths); n++) { if (dbus_message_is_method_call(message, mp->inter, mp->call)) { reply = dbus_message_new_method_return(message); if (!reply) return DBUS_HANDLER_RESULT_NEED_MEMORY; result = mp->handler(conn, message, &reply, data); if (result == DBUS_HANDLER_RESULT_HANDLED && !dbus_connection_send(conn, reply, NULL)) result = DBUS_HANDLER_RESULT_NEED_MEMORY; dbus_message_unref(reply); return result; } mp++; } return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; } static const DBusObjectPathVTable server_vtable = { .message_function = server_message_handler }; static void destroy_dbus_server_conn(struct lws_dbus_ctx *ctx) { if (!ctx->conn) return; lwsl_notice("%s\n", __func__); dbus_connection_unregister_object_path(ctx->conn, THIS_OBJECT); lws_dll2_remove(&ctx->next); dbus_connection_unref(ctx->conn); } static void cb_closing(struct lws_dbus_ctx *ctx) { lwsl_err("%s: closing\n", __func__); destroy_dbus_server_conn(ctx); free(ctx); } static void new_conn(DBusServer *server, DBusConnection *conn, void *data) { struct lws_dbus_ctx *conn_ctx, *ctx = (struct lws_dbus_ctx *)data; lwsl_notice("%s: vh %s\n", __func__, lws_get_vhost_name(ctx->vh)); conn_ctx = malloc(sizeof(*conn_ctx)); if (!conn_ctx) return; memset(conn_ctx, 0, sizeof(*conn_ctx)); conn_ctx->tsi = ctx->tsi; conn_ctx->vh = ctx->vh; conn_ctx->conn = conn; if (lws_dbus_connection_setup(conn_ctx, conn, cb_closing)) { lwsl_err("%s: connection bind to lws failed\n", __func__); goto bail; } if (!dbus_connection_register_object_path(conn, THIS_OBJECT, &server_vtable, conn_ctx)) { lwsl_err("%s: Failed to register object path\n", __func__); goto bail; } lws_dll2_add_head(&conn_ctx->next, &ctx->owner); /* we take on responsibility for explicit close / unref with this... */ dbus_connection_ref(conn); return; bail: free(conn_ctx); } static int create_dbus_listener(const char *ads) { DBusError e; dbus_error_init(&e); if (!lws_dbus_server_listen(&ctx_listener, ads, &e, new_conn)) { lwsl_err("%s: failed\n", __func__); dbus_error_free(&e); return 1; } return 0; } static int create_dbus_server_conn(struct lws_dbus_ctx *ctx, DBusBusType type) { DBusError err; int rv; dbus_error_init(&err); /* connect to the daemon bus */ ctx->conn = dbus_bus_get(type, &err); if (!ctx->conn) { lwsl_err("%s: Failed to get a session DBus connection: %s\n", __func__, err.message); goto fail; } /* * by default dbus will call exit() when this connection closes... * we have to shut down other things cleanly, so disable that */ dbus_connection_set_exit_on_disconnect(ctx->conn, 0); rv = dbus_bus_request_name(ctx->conn, THIS_BUSNAME, DBUS_NAME_FLAG_REPLACE_EXISTING, &err); if (rv != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) { lwsl_err("%s: Failed to request name on bus: %s\n", __func__, err.message); goto fail; } if (!dbus_connection_register_object_path(ctx->conn, THIS_OBJECT, &server_vtable, NULL)) { lwsl_err("%s: Failed to register object path for TestObject\n", __func__); dbus_bus_release_name(ctx->conn, THIS_BUSNAME, &err); goto fail; } /* * This is the part that binds the connection to lws watcher and * timeout handling provided by lws */ if (lws_dbus_connection_setup(ctx, ctx->conn, cb_closing)) { lwsl_err("%s: connection bind to lws failed\n", __func__); goto fail; } lwsl_notice("%s: created OK\n", __func__); return 0; fail: dbus_error_free(&err); return 1; } /* * Cleanly release the connection */ static void destroy_dbus_server_listener(struct lws_dbus_ctx *ctx) { dbus_server_disconnect(ctx->dbs); lws_start_foreach_dll_safe(struct lws_dll2 *, rdt, nx, ctx->owner.head) { struct lws_dbus_ctx *r = lws_container_of(rdt, struct lws_dbus_ctx, next); dbus_connection_close(r->conn); dbus_connection_unref(r->conn); free(r); } lws_end_foreach_dll_safe(rdt, nx); dbus_server_unref(ctx->dbs); } /* * DBUS can send messages outside the usual client-initiated RPC concept. * * You can receive them using a message filter. */ static void spam_connected_clients(struct lws_dbus_ctx *ctx) { /* send connected clients an unsolicited message */ lws_start_foreach_dll_safe(struct lws_dll2 *, rdt, nx, ctx->owner.head) { struct lws_dbus_ctx *r = lws_container_of(rdt, struct lws_dbus_ctx, next); DBusMessage *msg; const char *payload = "Unsolicited message"; msg = dbus_message_new(DBUS_NUM_MESSAGE_TYPES + 1); if (!msg) { lwsl_err("%s: new message failed\n", __func__); } dbus_message_append_args(msg, DBUS_TYPE_STRING, &payload, DBUS_TYPE_INVALID); if (!dbus_connection_send(r->conn, msg, NULL)) { lwsl_err("%s: unable to send\n", __func__); } lwsl_notice("%s\n", __func__); dbus_message_unref(msg); } lws_end_foreach_dll_safe(rdt, nx); } void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */ /* | LLL_THREAD */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal DBUS server\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } info.options |= LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; dbus_ctx.tsi = 0; ctx_listener.tsi = 0; ctx_listener.vh = dbus_ctx.vh = lws_create_vhost(context, &info); if (!dbus_ctx.vh) goto bail; session = !!lws_cmdline_option(argc, argv, "--session"); if (session) { /* create the dbus connection, loosely bound to our lws vhost */ if (create_dbus_server_conn(&dbus_ctx, DBUS_BUS_SESSION)) goto bail; } else { if (create_dbus_listener(THIS_LISTEN_PATH)) { lwsl_err("%s: create_dbus_listener failed\n", __func__); goto bail; } } /* lws event loop (default poll one) */ while (n >= 0 && !interrupted) { if (!session) spam_connected_clients(&ctx_listener); n = lws_service(context, 0); } if (session) destroy_dbus_server_conn(&dbus_ctx); else destroy_dbus_server_listener(&ctx_listener); /* this is required for valgrind-cleanliness */ dbus_shutdown(); lws_context_destroy(context); lwsl_notice("Exiting cleanly\n"); return 0; bail: lwsl_err("%s: failed to start\n", __func__); lws_context_destroy(context); return 1; } libwebsockets-4.3.5/minimal-examples/dbus-server/minimal-dbus-ws-proxy/000077500000000000000000000000001476025525100262645ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/dbus-server/minimal-dbus-ws-proxy/CMakeLists.txt000066400000000000000000000022451476025525100310270ustar00rootroot00000000000000project(lws-minimal-dbus-ws-proxy C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(CheckLibraryExists) include(LwsCheckRequirements) set(SAMP lws-minimal-dbus-ws-proxy) set(SRCS main.c) set(requirements 1) require_lws_config(LWS_ROLE_DBUS 1 requirements) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) if (NOT MSVC AND NOT WIN32 AND requirements) add_executable(${SAMP} ${SRCS}) if (NOT LWS_PLAT_FREERTOS) find_package(PkgConfig QUIET) pkg_check_modules(PC_DBUS1 dbus-1 QUIET) list(APPEND LWS_DBUS_INCLUDE1 ${PC_DBUS1_INCLUDE_DIRS}) list(APPEND LWS_DBUS_LIB "${PC_DBUS1_LIBRARIES};dl") endif() if (LWS_DBUS_INCLUDE1) include_directories("${LWS_DBUS_INCLUDE1}") endif() if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared ${LWS_DBUS_LIB}) else() target_link_libraries(${SAMP} websockets ${LWS_DBUS_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/dbus-server/minimal-dbus-ws-proxy/README.md000066400000000000000000000101751476025525100275470ustar00rootroot00000000000000# lws minimal dbus ws proxy This is an application which presents a DBUS server on one side, and a websocket client proxy on the other. You connect to it over DBUS, send a Connect method on its interface giving a URI and a ws subprotocol name. It replies with a string "Connecting" if all is well. Connection progress (including close) is then provided using type 7 messages sent back to the dbus client. Payload from the ws connection is provided using type 6 messages sent back to the dbus client. ## build Using libdbus requires additional non-default include paths setting, same as is necessary for lws build described in ./lib/roles/dbus/README.md CMake can guess one path and the library name usually, see the README above for details of how to override for custom libdbus and cross build. Fedora example: ``` $ cmake .. -DLWS_DBUS_INCLUDE2="/usr/lib64/dbus-1.0/include" $ make ``` Ubuntu example: ``` $ cmake .. -DLWS_DBUS_INCLUDE2="/usr/lib/x86_64-linux-gnu/dbus-1.0/include" $ make ``` ## Configuration The dbus-ws-proxy server tries to register its actual bus name with the SYSTEM bus in DBUS. If it fails, eg because of insufficient permissions on the user, then it continues without that and starts its own daemon normally. The main dbus daemon must be told how to accept these registrations if that's what you want. A config file is provided that tells dbus to allow the well-known busname for this daemon to be registered, but only by root. ``` $ sudo cp org.libwebsockets.wsclientproxy.conf /etc/dbus-1/system.d $ sudo systemctl restart dbus ``` ## usage Run the dbus-ws-proxy server, then start lws-minimal-dbus-ws-proxy-testclient in another terminal. This test app sends a random line drawing message to the mirror example on https://libwebsockets.org/testserver every couple of seconds, and displays any received messages (such as its own sends mirrored back, or anything drawn in the canvas in a browser). ``` $ sudo ./lws-minimal-dbus-ws-proxy-testclient [2018/10/07 10:05:29:2084] USER: LWS minimal DBUS ws proxy testclient [2018/10/07 10:05:29:2345] NOTICE: Creating Vhost 'default' port 0, 1 protocols, IPv6 off [2018/10/07 10:05:29:2424] USER: create_dbus_client_conn: connecting to 'unix:abstract=org.libwebsockets.wsclientproxy' [2018/10/07 10:05:29:2997] NOTICE: state_transition: 0x5679720: from state 0 -> 1 [2018/10/07 10:05:29:2999] NOTICE: create_dbus_client_conn: created OK [2018/10/07 10:05:29:3232] USER: remote_method_call: requesting proxy connection wss://libwebsockets.org/ lws-mirror-protocol [2018/10/07 10:05:29:3450] NOTICE: state_transition: 0x5679720: from state 1 -> 2 [2018/10/07 10:05:29:5972] USER: pending_call_notify: received 'Connecting' [2018/10/07 10:05:31:3387] NOTICE: state_transition: 0x5679720: from state 2 -> 3 [2018/10/07 10:05:33:6672] USER: filter: Received 'd #B0DC51 115 177 166 283;' [2018/10/07 10:05:35:9723] USER: filter: Received 'd #E87CCD 9 192 106 235;' [2018/10/07 10:05:38:2784] USER: filter: Received 'd #E2A9E3 379 290 427 62;' [2018/10/07 10:05:39:5833] USER: filter: Received 'd #B127F8 52 126 60 226;' [2018/10/07 10:05:41:8908] USER: filter: Received 'd #0E0F76 429 267 8 11;' ... ``` ## ws proxy DBUS details ### Fixed details Item|Value ---|--- Address|unix:abstract=org.libwebsockets.wsclientproxy Interface|org.libwebsockets.wsclientproxy Bus Name|org.libwebsockets.wsclientproxy Object path|/org/libwebsockets/wsclientproxy ### Interface Methods Method|Arguments|Returns ---|---|--- Connect|s: ws URI, s: ws subprotocol name|"Bad Uri", "Connecting" or "Failed" Send|s: payload|Empty message if no problem, or error message When Connecting, the actual connection happens asynchronously if the initial connection attempt doesn't fail immediately. If it's continuing in the background, the reply will have been "Connecting". ### Signals Signal Name|Argument|Meaning ---|---|--- Receive|s: payload|Received data from the ws link Status|s: status|See table below Status String|Meaning ---|--- "ws client connection error"|The ws connection attempt ended with a fatal error "ws client connection established"|The ws connection attempt succeeded "ws client connection closed"|The ws connection has closed libwebsockets-4.3.5/minimal-examples/dbus-server/minimal-dbus-ws-proxy/main.c000066400000000000000000000051521476025525100273570ustar00rootroot00000000000000/* * lws-minimal-dbus-ws-proxy * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal session dbus server that uses the lws event loop, * and allows proxying ws client connections via DBUS. */ #include #include #include #include #include #include #include #include #define LWS_PLUGIN_STATIC #include "protocol_lws_minimal_dbus_ws_proxy.c" static int interrupted; static struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_MINIMAL_DBUS_WSPROXY, LWS_PROTOCOL_LIST_TERM }; /* * we pass the dbus address to connect to proxy with from outside the * protocol plugin... eg if built as a plugin for lwsws, you would instead * set this pvo in the lwsws JSON config. */ static const struct lws_protocol_vhost_options pvo_ads = { NULL, NULL, "ads", /* pvo name */ (void *)"unix:abstract=org.libwebsockets.wsclientproxy" /* pvo value */ }; static const struct lws_protocol_vhost_options pvo = { NULL, /* "next" pvo linked-list */ &pvo_ads, /* "child" pvo linked-list */ "lws-minimal-dbus-wsproxy", /* protocol name we belong to on this vhost */ "" /* ignored */ }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { static struct lws_context *context; struct lws_context_creation_info info; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */ /* | LLL_THREAD */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS DBUS ws client proxy\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; info.port = CONTEXT_PORT_NO_LISTEN; info.protocols = protocols; info.pvo = &pvo; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } /* lws event loop (default poll one) */ while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); lwsl_notice("Exiting cleanly\n"); return 0; } org.libwebsockets.wsclientproxy.conf000066400000000000000000000007631476025525100354410ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/dbus-server/minimal-dbus-ws-proxy protocol_lws_minimal_dbus_ws_proxy.c000066400000000000000000000512601476025525100356000ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/dbus-server/minimal-dbus-ws-proxy/* * ws protocol handler plugin for dbus ws proxy * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This proxies outgoing ws client connections on DBUS. So a DBUS client can * reach out and get remote WS payloads in both directions. * * DEVELOPER NOTE * * Two worlds, dbus and ws, collide in this file. * * There main thing keeping it sane is both worlds are running in the same * thread and on the same event loop. Although things may happen completely * asynchronously in both worlds, the logical reaction to those events are * serialized in a single event loop doing one thing at a time. * * So while you are servicing an event in the ws world, you can be certain the * logical state of any related dbus thing cannot change underneath you, until * you return back to the event loop, and vice versa. So other-world objects * can't be freed, other-world handles can't close etc while you are servicing * in your world. * * Since all bets are off what happens next, and in which world, after you * return back to the event loop though, an additional rule is needed: worlds * must not allocate in objects owned by the other world. They must generate * their own objects in their world and use those for allocations and state. * * For example in the dbus-world there is a struct lws_dbus_ctx_wsproxy with * various state, but he is subject to deletion by events in dbus-world. If * the ws-world stored things there, they are subject to going out of scope * at the whim of the dbus connection without the ws world hearing about it and * cleanly deallocaing them. So the ws world must keep his own pss that remains * in scope until the ws link closes for allocations from ws-world. * * In this application there's a point of contact between the worlds, a ring * buffer allocated in ws world when the ws connection is established, and * deallocated when the ws connection is closed. The DBUS world needs to put * things in this ringbuffer. But the way lws_ring works, when the message * allocated in DBUS world is queued on the ringbuffer, the ringbuffer itself * takes responsibility for deallocation. So there is no problem. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #include #endif #include #include #include /* * dbus accepted connections create these larger context structs that start * with the lws dbus context */ struct vhd_dbus_proxy; struct msg { void *payload; /* is malloc'd */ size_t len; char binary; char first; char final; }; struct pss_dbus_proxy { struct lws_ring *ring_out; uint32_t ring_out_tail; }; struct lws_dbus_ctx_wsproxy { struct lws_dbus_ctx ctx; struct lws *cwsi; struct vhd_dbus_proxy *vhd; struct pss_dbus_proxy *pss; }; struct vhd_dbus_proxy { struct lws_context *context; struct lws_vhost *vhost; /* * Because the listener ctx is composed in the vhd, we can always get a * pointer to the outer vhd from a pointer to ctx_listener inside. */ struct lws_dbus_ctx ctx_listener; struct lws_dbus_ctx_wsproxy dctx; const char *dbus_listen_ads; }; #define THIS_INTERFACE "org.libwebsockets.wsclientproxy" #define THIS_OBJECT "/org/libwebsockets/wsclientproxy" #define THIS_BUSNAME "org.libwebsockets.wsclientproxy" static const char *version = "0.1"; static const char *server_introspection_xml = DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE "\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " " " \n" " " " \n" "\n"; static void destroy_message(void *_msg) { struct msg *msg = _msg; free(msg->payload); msg->payload = NULL; msg->len = 0; } /* * DBUS WORLD */ static DBusHandlerResult dmh_introspect(DBusConnection *c, DBusMessage *m, DBusMessage **reply, void *d) { dbus_message_append_args(*reply, DBUS_TYPE_STRING, &server_introspection_xml, DBUS_TYPE_INVALID); return DBUS_HANDLER_RESULT_HANDLED; } static DBusHandlerResult dmh_get(DBusConnection *c, DBusMessage *m, DBusMessage **reply, void *d) { const char *interface, *property; DBusError err; dbus_error_init(&err); if (!dbus_message_get_args(m, &err, DBUS_TYPE_STRING, &interface, DBUS_TYPE_STRING, &property, DBUS_TYPE_INVALID)) { dbus_message_unref(*reply); *reply = dbus_message_new_error(m, err.name, err.message); dbus_error_free(&err); return DBUS_HANDLER_RESULT_HANDLED; } if (strcmp(property, "Version")) /* Unknown property */ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; dbus_message_append_args(*reply, DBUS_TYPE_STRING, &version, DBUS_TYPE_INVALID); return DBUS_HANDLER_RESULT_HANDLED; } static DBusHandlerResult dmh_getall(DBusConnection *c, DBusMessage *m, DBusMessage **reply, void *d) { DBusMessageIter arr, di, iter, va; const char *property = "Version"; dbus_message_iter_init_append(*reply, &iter); dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "{sv}", &arr); /* Append all properties name/value pairs */ dbus_message_iter_open_container(&arr, DBUS_TYPE_DICT_ENTRY, NULL, &di); dbus_message_iter_append_basic(&di, DBUS_TYPE_STRING, &property); dbus_message_iter_open_container(&di, DBUS_TYPE_VARIANT, "s", &va); dbus_message_iter_append_basic(&va, DBUS_TYPE_STRING, &version); dbus_message_iter_close_container(&di, &va); dbus_message_iter_close_container(&arr, &di); dbus_message_iter_close_container(&iter, &arr); return DBUS_HANDLER_RESULT_HANDLED; } static DBusHandlerResult dmh_connect(DBusConnection *c, DBusMessage *m, DBusMessage **reply, void *d) { struct lws_dbus_ctx_wsproxy *wspctx = (struct lws_dbus_ctx_wsproxy *)d; const char *prot = "", *ads = "", *path = "", *baduri = "Bad Uri", *connecting = "Connecting", *failed = "Failed", **pp; struct lws_client_connect_info i; char host[128], uri_copy[512]; const char *uri, *subprotocol; DBusError err; int port = 0; dbus_error_init(&err); if (!dbus_message_get_args(m, &err, DBUS_TYPE_STRING, &uri, DBUS_TYPE_STRING, &subprotocol, DBUS_TYPE_INVALID)) { dbus_message_unref(*reply); *reply = dbus_message_new_error(m, err.name, err.message); dbus_error_free(&err); return DBUS_HANDLER_RESULT_HANDLED; } strncpy(uri_copy, uri, sizeof(uri_copy) - 1); uri_copy[sizeof(uri_copy) - 1] = '\0'; if (lws_parse_uri(uri_copy, &prot, &ads, &port, &path)) { pp = &baduri; goto send_reply; } lws_snprintf(host, sizeof(host), "%s:%u", ads, port); memset(&i, 0, sizeof(i)); assert(wspctx); assert(wspctx->vhd); i.context = wspctx->vhd->context; i.port = port; i.address = ads; i.path = path; i.host = host; i.origin = host; i.ssl_connection = !strcmp(prot, "https") || !strcmp(prot, "wss"); i.vhost = wspctx->ctx.vh; i.protocol = subprotocol; i.local_protocol_name = "lws-minimal-dbus-wsproxy"; i.pwsi = &wspctx->cwsi; lwsl_user("%s: connecting to %s://%s:%d%s\n", __func__, prot, i.address, i.port, i.path); if (!lws_client_connect_via_info(&i)) { lwsl_notice("%s: client connect failed\n", __func__); pp = &failed; goto send_reply; } lws_set_opaque_parent_data(wspctx->cwsi, wspctx); lwsl_notice("%s: client connecting...\n", __func__); pp = &connecting; send_reply: dbus_message_append_args(*reply, DBUS_TYPE_STRING, pp, DBUS_TYPE_INVALID); return DBUS_HANDLER_RESULT_HANDLED; } static int issue_dbus_signal(struct lws *wsi, const char *signame, const char *string) { struct lws_dbus_ctx_wsproxy *wspctx = lws_get_opaque_parent_data(wsi); DBusMessage *m; if (!wspctx) return 1; m = dbus_message_new_signal(THIS_OBJECT, THIS_INTERFACE, signame); if (!m) { lwsl_err("%s: new signal failed\n", __func__); return 1; } dbus_message_append_args(m, DBUS_TYPE_STRING, &string, DBUS_TYPE_INVALID); if (!dbus_connection_send(wspctx->ctx.conn, m, NULL)) lwsl_err("%s: unable to send\n", __func__); dbus_message_unref(m); return 0; } static DBusHandlerResult dmh_send(DBusConnection *c, DBusMessage *m, DBusMessage **reply, void *d) { struct lws_dbus_ctx_wsproxy *wspctx = (struct lws_dbus_ctx_wsproxy *)d; const char *payload; struct msg amsg; DBusError err; dbus_error_init(&err); if (!wspctx->cwsi || !wspctx->pss) { dbus_message_unref(*reply); *reply = dbus_message_new_error(m, "Send Fail", "No ws conn"); return DBUS_HANDLER_RESULT_HANDLED; } if (!dbus_message_get_args(m, &err, DBUS_TYPE_STRING, &payload, DBUS_TYPE_INVALID)) { dbus_message_unref(*reply); *reply = dbus_message_new_error(m, err.name, err.message); dbus_error_free(&err); return DBUS_HANDLER_RESULT_HANDLED; } /* * we allocate on the ringbuffer in ws world, but responsibility for * freeing it is understood by lws_ring. */ amsg.len = strlen(payload); /* notice we over-allocate by LWS_PRE */ amsg.payload = malloc(LWS_PRE + amsg.len); if (!amsg.payload) { lwsl_user("OOM: dropping\n"); dbus_message_unref(*reply); *reply = dbus_message_new_error(m, "Send Fail", "OOM"); return DBUS_HANDLER_RESULT_HANDLED; } amsg.binary = 0; amsg.first = 1; amsg.final = 1; memcpy((char *)amsg.payload + LWS_PRE, payload, amsg.len); if (!lws_ring_insert(wspctx->pss->ring_out, &amsg, 1)) { destroy_message(&amsg); lwsl_user("Ring Full!\n"); dbus_message_unref(*reply); *reply = dbus_message_new_error(m, "Send Fail", "Ring full"); return DBUS_HANDLER_RESULT_HANDLED; } if (wspctx->cwsi) lws_callback_on_writable(wspctx->cwsi); return DBUS_HANDLER_RESULT_HANDLED; } struct lws_dbus_methods { const char *inter; const char *call; lws_dbus_message_handler handler; } meths[] = { { DBUS_INTERFACE_INTROSPECTABLE, "Introspect", dmh_introspect }, { DBUS_INTERFACE_PROPERTIES, "Get", dmh_get }, { DBUS_INTERFACE_PROPERTIES, "GetAll", dmh_getall }, { THIS_INTERFACE, "Connect", dmh_connect }, { THIS_INTERFACE, "Send", dmh_send }, }; static DBusHandlerResult server_message_handler(DBusConnection *conn, DBusMessage *message, void *data) { struct lws_dbus_methods *mp = meths; DBusMessage *reply = NULL; DBusHandlerResult result; size_t n; assert(data); lwsl_info("%s: Got D-Bus request: %s.%s on %s\n", __func__, dbus_message_get_interface(message), dbus_message_get_member(message), dbus_message_get_path(message)); for (n = 0; n < LWS_ARRAY_SIZE(meths); n++) { if (dbus_message_is_method_call(message, mp->inter, mp->call)) { reply = dbus_message_new_method_return(message); if (!reply) return DBUS_HANDLER_RESULT_NEED_MEMORY; result = mp->handler(conn, message, &reply, data); if (result == DBUS_HANDLER_RESULT_HANDLED && !dbus_connection_send(conn, reply, NULL)) result = DBUS_HANDLER_RESULT_NEED_MEMORY; dbus_message_unref(reply); return result; } mp++; } return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; } static const DBusObjectPathVTable vtable = { .message_function = server_message_handler }; static void destroy_dbus_server_conn(struct lws_dbus_ctx_wsproxy *wsctx) { if (!wsctx->ctx.conn) return; lwsl_notice("%s\n", __func__); dbus_connection_unregister_object_path(wsctx->ctx.conn, THIS_OBJECT); lws_dll2_remove(&wsctx->ctx.next); dbus_connection_unref(wsctx->ctx.conn); } /* * This is the client dbus side going away. We need to stop the associated * client ws part and make sure it can't dereference us now we are gone. */ static void cb_closing(struct lws_dbus_ctx *ctx) { struct lws_dbus_ctx_wsproxy *wspctx = (struct lws_dbus_ctx_wsproxy *)ctx; lwsl_err("%s: closing\n", __func__); /* * We have to take care that the associated proxy wsi knows our * dbus ctx is going out of scope after we return from here. * * We do it by setting its pointer to our dbus ctx to NULL. */ if (wspctx->cwsi) { lws_set_opaque_parent_data(wspctx->cwsi, NULL); lws_set_timeout(wspctx->cwsi, PENDING_TIMEOUT_KILLED_BY_PROXY_CLIENT_CLOSE, LWS_TO_KILL_ASYNC); } destroy_dbus_server_conn(wspctx); free(wspctx); } static void new_conn(DBusServer *server, DBusConnection *conn, void *d) { struct lws_dbus_ctx_wsproxy *conn_wspctx, /* the new conn context */ /* the listener context */ *wspctx = (struct lws_dbus_ctx_wsproxy *)d; struct vhd_dbus_proxy *vhd = lws_container_of(d, struct vhd_dbus_proxy, ctx_listener); assert(vhd->vhost == wspctx->ctx.vh); lwsl_notice("%s\n", __func__); conn_wspctx = malloc(sizeof(*conn_wspctx)); if (!conn_wspctx) return; memset(conn_wspctx, 0, sizeof(*conn_wspctx)); conn_wspctx->ctx.tsi = wspctx->ctx.tsi; conn_wspctx->ctx.vh = wspctx->ctx.vh; conn_wspctx->ctx.conn = conn; conn_wspctx->vhd = vhd; /* let accepted connections also know the vhd */ assert(conn_wspctx->vhd); if (lws_dbus_connection_setup(&conn_wspctx->ctx, conn, cb_closing)) { lwsl_err("%s: connection bind to lws failed\n", __func__); goto bail; } if (!dbus_connection_register_object_path(conn, THIS_OBJECT, &vtable, conn_wspctx)) { lwsl_err("%s: Failed to register object path\n", __func__); goto bail; } lws_dll2_add_head(&conn_wspctx->ctx.next, &wspctx->ctx.owner); /* we take on responsibility for explicit close / unref with this... */ dbus_connection_ref(conn); return; bail: free(conn_wspctx); } static int create_dbus_listener(struct vhd_dbus_proxy *vhd, int tsi) { DBusError e; dbus_error_init(&e); #if 0 vhd->dctx.ctx.tsi = tsi; vhd->dctx.ctx.vh = vhd->vhost; vhd->dctx.ctx.next.prev = NULL; vhd->dctx.ctx.next.next = NULL; vhd->dctx.vhd = vhd; vhd->dctx.cwsi = NULL; /* connect to the SYSTEM bus */ vhd->dctx.ctx.conn = dbus_bus_get(DBUS_BUS_SYSTEM, &e); if (!vhd->dctx.ctx.conn) { lwsl_notice("%s: Failed to get a session DBus connection: '%s'" ", continuing with daemon listener only\n", __func__, e.message); dbus_error_free(&e); dbus_error_init(&e); goto daemon; } /* * by default dbus will call exit() when this connection closes... * we have to shut down other things cleanly, so disable that */ dbus_connection_set_exit_on_disconnect(vhd->dctx.ctx.conn, 0); if (dbus_bus_request_name(vhd->dctx.ctx.conn, THIS_BUSNAME, DBUS_NAME_FLAG_REPLACE_EXISTING, &e) != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) { lwsl_notice("%s: Failed to request name on bus: '%s'," " continuing with daemon listener only\n", __func__, e.message); dbus_connection_unref(vhd->dctx.ctx.conn); vhd->dctx.ctx.conn = NULL; dbus_error_free(&e); dbus_error_init(&e); goto daemon; } if (!dbus_connection_register_object_path(vhd->dctx.ctx.conn, THIS_OBJECT, &vtable, &vhd->dctx)) { lwsl_err("%s: Failed to register object path\n", __func__); goto fail; } /* * This is the part that binds the connection to lws watcher and * timeout handling provided by lws */ if (lws_dbus_connection_setup(&vhd->dctx.ctx, vhd->dctx.ctx.conn, cb_closing)) { lwsl_err("%s: connection bind to lws failed\n", __func__); goto fail; } daemon: #endif vhd->ctx_listener.vh = vhd->vhost; vhd->ctx_listener.tsi = tsi; if (!lws_dbus_server_listen(&vhd->ctx_listener, vhd->dbus_listen_ads, &e, new_conn)) { lwsl_err("%s: failed\n", __func__); dbus_error_free(&e); return 1; } lwsl_notice("%s: created DBUS listener on %s\n", __func__, vhd->dbus_listen_ads); return 0; #if 0 fail: dbus_error_free(&e); return 1; #endif } static void destroy_dbus_server_listener(struct vhd_dbus_proxy *vhd) { dbus_server_disconnect(vhd->ctx_listener.dbs); lws_start_foreach_dll_safe(struct lws_dll2 *, rdt, nx, vhd->ctx_listener.owner.head) { struct lws_dbus_ctx *r = lws_container_of(rdt, struct lws_dbus_ctx, next); dbus_connection_close(r->conn); dbus_connection_unref(r->conn); free(r); } lws_end_foreach_dll_safe(rdt, nx); if (vhd->dctx.ctx.conn) dbus_connection_unref(vhd->dctx.ctx.conn); dbus_server_unref(vhd->ctx_listener.dbs); } /* * WS WORLD */ static int callback_minimal_dbus_wsproxy(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct pss_dbus_proxy *pss = (struct pss_dbus_proxy *)user; struct vhd_dbus_proxy *vhd = (struct vhd_dbus_proxy *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); struct lws_dbus_ctx_wsproxy *wspctx; const struct msg *pmsg; int flags, m; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(*vhd)); if (!vhd) return -1; vhd->context = lws_get_context(wsi); vhd->vhost = lws_get_vhost(wsi); if (lws_pvo_get_str(in, "ads", &vhd->dbus_listen_ads)) { lwsl_err("%s: pvo 'ads' must be set\n", __func__); return -1; } if (create_dbus_listener(vhd, 0)) { lwsl_err("%s: create_dbus_listener failed\n", __func__); return -1; } break; case LWS_CALLBACK_PROTOCOL_DESTROY: destroy_dbus_server_listener(vhd); /* this is required for valgrind-cleanliness */ dbus_shutdown(); break; case LWS_CALLBACK_CLIENT_ESTABLISHED: lwsl_user("LWS_CALLBACK_CLIENT_ESTABLISHED\n"); /* * create the send ringbuffer now the ws connection is * established. */ wspctx = lws_get_opaque_parent_data(wsi); if (!wspctx) break; wspctx->pss = pss; pss->ring_out_tail = 0; pss->ring_out = lws_ring_create(sizeof(struct msg), 8, destroy_message); if (!pss->ring_out) { lwsl_err("OOM\n"); return -1; } issue_dbus_signal(wsi, "Status", "ws client connection established"); break; case LWS_CALLBACK_CLIENT_WRITEABLE: lwsl_user("LWS_CALLBACK_CLIENT_WRITEABLE:\n"); pmsg = lws_ring_get_element(pss->ring_out, &pss->ring_out_tail); if (!pmsg) { lwsl_user(" (nothing in ring)\n"); break; } flags = lws_write_ws_flags( pmsg->binary ? LWS_WRITE_BINARY : LWS_WRITE_TEXT, pmsg->first, pmsg->final); /* notice we allowed for LWS_PRE in the payload already */ m = lws_write(wsi, ((unsigned char *)pmsg->payload) + LWS_PRE, pmsg->len, flags); if (m < (int)pmsg->len) { lwsl_err("ERROR %d writing to ws socket\n", m); return -1; } lwsl_user(" wrote %d: flags: 0x%x first: %d final %d\n", m, flags, pmsg->first, pmsg->final); lws_ring_consume_single_tail(pss->ring_out, &pss->ring_out_tail, 1); /* more to do for us? */ if (lws_ring_get_element(pss->ring_out, &pss->ring_out_tail)) /* come back as soon as we can write more */ lws_callback_on_writable(wsi); break; case LWS_CALLBACK_CLIENT_RECEIVE: lwsl_user("LWS_CALLBACK_CLIENT_RECEIVE: %4d " "(rpp %5d, first %d, last %d, bin %d)\n", (int)len, (int)lws_remaining_packet_payload(wsi), lws_is_first_fragment(wsi), lws_is_final_fragment(wsi), lws_frame_is_binary(wsi)); { char strbuf[256]; size_t l = len; if (l > sizeof(strbuf) - 1u) l = sizeof(strbuf) - 1u; memcpy(strbuf, in, l); strbuf[l] = '\0'; issue_dbus_signal(wsi, "Receive", strbuf); } break; case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); issue_dbus_signal(wsi, "Status", "ws client connection error"); break; case LWS_CALLBACK_CLIENT_CLOSED: lwsl_err("LWS_CALLBACK_CLIENT_CLOSED ()\n"); issue_dbus_signal(wsi, "Status", "ws client connection closed"); /* destroy any ringbuffer and pending messages */ lws_ring_destroy(pss->ring_out); wspctx = lws_get_opaque_parent_data(wsi); if (!wspctx) break; /* * the wspctx cannot refer to its child wsi any longer, it is * about to go out of scope. */ wspctx->cwsi = NULL; wspctx->pss = NULL; break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_MINIMAL_DBUS_WSPROXY \ { \ "lws-minimal-dbus-wsproxy", \ callback_minimal_dbus_wsproxy, \ sizeof(struct pss_dbus_proxy), \ 1024, \ 0, NULL, 0 \ } libwebsockets-4.3.5/minimal-examples/embedded/000077500000000000000000000000001476025525100213655ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/embedded/esp32/000077500000000000000000000000001476025525100223215ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-c3dev/000077500000000000000000000000001476025525100241125ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-c3dev/CMakeLists.txt000066400000000000000000000021251476025525100266520ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) if (ESP_PLATFORM) include($ENV{IDF_PATH}/tools/cmake/project.cmake) project(lws-minimal-esp32) enable_testing() target_link_libraries(lws-minimal-esp32.elf websockets) option(LWS_WITH_DRIVERS "With generic drivers for gpio, i2c, display etc" ON) set(LWS_WITH_DRIVERS ON) option(LWS_WITH_SECURE_STREAMS "With secure streams" ON) set(LWS_WITH_SECURE_STREAMS ON) option(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY "static ssp" OFF) set(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY OFF) option(LWS_WITH_LWSAC "With lwsac" ON) set(LWS_WITH_LWSAC ON) option(LWS_WITH_STRUCT_JSON "With lws_struct JSON" ON) set(LWS_WITH_STRUCT_JSON ON) option(LWS_WITH_SYS_NTPCLIENT "With ntpclient" ON) set(LWS_WITH_SYS_NTPCLIENT ON) add_subdirectory(libwebsockets) add_test(NAME flashing COMMAND idf.py flash) set_tests_properties(flashing PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} TIMEOUT 120) add_test(NAME boot COMMAND /usr/local/bin/sai-expect) set_tests_properties(boot PROPERTIES DEPENDS flashing TIMEOUT 20) endif() libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-c3dev/lws-button.c000066400000000000000000000337751476025525100264130ustar00rootroot00000000000000/* * Generic GPIO / irq buttons * * Copyright (C) 2019 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "private-lib-core.h" typedef enum lws_button_classify_states { LBCS_IDLE, /* nothing happening */ LBCS_MIN_DOWN_QUALIFY, LBCS_ASSESS_DOWN_HOLD, LBCS_UP_SETTLE1, LBCS_WAIT_DOUBLECLICK, LBCS_MIN_DOWN_QUALIFY2, LBCS_WAIT_UP, LBCS_UP_SETTLE2, } lws_button_classify_states_t; /* * This is the opaque, allocated, non-const, dynamic footprint of the * button controller */ typedef struct lws_button_state { #if defined(LWS_PLAT_TIMER_TYPE) LWS_PLAT_TIMER_TYPE timer; /* bh timer */ LWS_PLAT_TIMER_TYPE timer_mon; /* monitor timer */ #endif const lws_button_controller_t *controller; struct lws_context *ctx; short mon_refcount; lws_button_idx_t enable_bitmap; lws_button_idx_t state_bitmap; uint16_t mon_timer_count; /* incremented each time the mon timer cb happens */ /* lws_button_each_t per button overallocated after this */ } lws_button_state_t; typedef struct lws_button_each { lws_button_state_t *bcs; uint16_t mon_timer_comp; uint8_t state; /**^ lws_button_classify_states_t */ uint8_t isr_pending; } lws_button_each_t; #if defined(LWS_PLAT_TIMER_START) static const lws_button_regime_t default_regime = { .ms_min_down = 20, .ms_min_down_longpress = 300, .ms_up_settle = 20, .ms_doubleclick_grace = 120, .flags = LWSBTNRGMFLAG_CLASSIFY_DOUBLECLICK }; #endif /* * This is happening in interrupt context, we have to schedule a bottom half to * do the foreground lws_smd queueing, using, eg, a platform timer. * * All the buttons point here and use one timer per button controller. An * interrupt here means, "something happened to one or more buttons" */ #if defined(LWS_PLAT_TIMER_START) void lws_button_irq_cb_t(void *arg) { lws_button_each_t *each = (lws_button_each_t *)arg; each->isr_pending = 1; LWS_PLAT_TIMER_START(each->bcs->timer); } #endif /* * This is the bottom-half scheduled via a timer set in the ISR. From here * we are allowed to hold mutexes etc. We are coming here because any button * interrupt arrived, we have to try to figure out which events have happened. */ #if defined(LWS_PLAT_TIMER_CB) static LWS_PLAT_TIMER_CB(lws_button_bh, th) { lws_button_state_t *bcs = LWS_PLAT_TIMER_CB_GET_OPAQUE(th); const lws_button_controller_t *bc = bcs->controller; lws_button_each_t *each = (lws_button_each_t *)&bcs[1]; size_t n; /* * The ISR and bottom-half is shared by all the buttons. Each gpio * IRQ has an individual opaque ptr pointing to the corresponding * button's dynamic lws_button_each_t, the ISR marks the button's * each->isr_pending and schedules this bottom half. * * So now the bh timer has fired and something to do, we need to go * through all the buttons that have isr_pending set and service their * state. Intermediate states should start / bump the refcount on the * mon timer. That's refcounted so it only runs when a button down. */ for (n = 0; n < bc->count_buttons; n++) { if (!each[n].isr_pending) continue; /* * Hide what we're about to do from the delicate eyes of the * IRQ controller... */ bc->gpio_ops->irq_mode(bc->button_map[n].gpio, LWSGGPIO_IRQ_NONE, NULL, NULL); each[n].isr_pending = 0; /* * Force the network around the switch to the * active level briefly */ bc->gpio_ops->set(bc->button_map[n].gpio, !!(bc->active_state_bitmap & (1 << n))); bc->gpio_ops->mode(bc->button_map[n].gpio, LWSGGPIO_FL_WRITE); if (each[n].state == LBCS_IDLE) { /* * If this is the first sign something happening on this * button, make sure the monitor timer is running to * classify it over time */ each[n].state = LBCS_MIN_DOWN_QUALIFY; each[n].mon_timer_comp = bcs->mon_timer_count; if (!bcs->mon_refcount++) { #if defined(LWS_PLAT_TIMER_START) // lwsl_notice("%s: starting mon timer\n", __func__); LWS_PLAT_TIMER_START(bcs->timer_mon); #endif } } /* * Just for a us or two inbetween here, we're driving it to the * level we were informed by the interrupt it had enetered, to * force to charge on the actual and parasitic network around * the switch to a deterministic-ish state. * * If the switch remains in that state, well, it makes no * difference; if it was a pre-contact and the charge on the * network was left indeterminate, this will dispose it to act * consistently in the short term until the pullup / pulldown * has time to act on it or the switch comes and forces the * network charge state itself. */ bc->gpio_ops->mode(bc->button_map[n].gpio, LWSGGPIO_FL_READ); /* * We could do a better job manipulating the irq mode according * to the switch state. But if an interrupt comes and we have * done that, we can't tell if it's from before or after the * mode change... ie, we don't know what the interrupt was * telling us. We can't trust the gpio state if we read it now * to be related to what the irq from some time before was * trying to tell us. So always set it back to the same mode * and accept the limitation. */ bc->gpio_ops->irq_mode(bc->button_map[n].gpio, bc->active_state_bitmap & (1 << n) ? LWSGGPIO_IRQ_RISING : LWSGGPIO_IRQ_FALLING, lws_button_irq_cb_t, &each[n]); } } #endif #if defined(LWS_PLAT_TIMER_CB) static LWS_PLAT_TIMER_CB(lws_button_mon, th) { lws_button_state_t *bcs = LWS_PLAT_TIMER_CB_GET_OPAQUE(th); lws_button_each_t *each = (lws_button_each_t *)&bcs[1]; const lws_button_controller_t *bc = bcs->controller; const lws_button_regime_t *regime; const char *event_name; int comp_age_ms; char active; size_t n; bcs->mon_timer_count++; for (n = 0; n < bc->count_buttons; n++) { if (each[n].state == LBCS_IDLE) continue; if (bc->button_map[n].regime) regime = bc->button_map[n].regime; else regime = &default_regime; comp_age_ms = (bcs->mon_timer_count - each[n].mon_timer_comp) * LWS_BUTTON_MON_TIMER_MS; active = bc->gpio_ops->read(bc->button_map[n].gpio) ^ (!(bc->active_state_bitmap & (1 << n))); // lwsl_notice("%d\n", each[n].state); switch (each[n].state) { case LBCS_MIN_DOWN_QUALIFY: /* * We're trying to figure out if the initial down event * is a glitch, or if it meets the criteria for being * treated as the definitive start of some kind of click * action. To get past this, he has to be solidly down * for the time mentioned in the applied regime (at * least when we sample it). * * Significant bounce at the start will abort this try, * but if it's really down there will be a subsequent * solid down period... it will simply restart this flow * from a new interrupt and pass the filter then. * * The "brief drive on edge" strategy considerably * reduces inconsistencies here. But physical bounce * will continue to be observed. */ if (!active) { /* We ignore stuff for a bit after discard */ each[n].mon_timer_comp = bcs->mon_timer_count; each[n].state = LBCS_UP_SETTLE2; continue; } if (comp_age_ms >= regime->ms_min_down) { /* We made it through the initial regime filter, * the next step is wait and see if this down * event evolves into a single/double click or * we can call it as a long-click */ each[n].state = LBCS_ASSESS_DOWN_HOLD; break; } break; case LBCS_ASSESS_DOWN_HOLD: /* * How long is he going to hold it? If he holds it * past the long-click threshold, we can call it as a * long-click and do the up processing afterwards. */ if (comp_age_ms >= regime->ms_min_down_longpress) { /* call it as a longclick */ event_name = "longclick"; each[n].state = LBCS_WAIT_UP; goto classify; } if (!active) { /* * He didn't hold it past the long-click * threshold... we could end up classifying it * as either a click or a double-click then. * * If double-clicks are not allowed to be * classified, then we can already classify it * as a single-click. */ if (!(regime->flags & LWSBTNRGMFLAG_CLASSIFY_DOUBLECLICK)) goto classify_single; /* * Just wait for the up settle time then start * looking for a second down. */ each[n].mon_timer_comp = bcs->mon_timer_count; each[n].state = LBCS_UP_SETTLE1; } break; case LBCS_UP_SETTLE1: if (comp_age_ms > regime->ms_up_settle) /* * Just block anything for the up settle time */ each[n].state = LBCS_WAIT_DOUBLECLICK; break; case LBCS_WAIT_DOUBLECLICK: if (active) { /* * He has gone down again inside the regime's * doubleclick grace period... he's going down * the double-click path */ each[n].mon_timer_comp = bcs->mon_timer_count; each[n].state = LBCS_MIN_DOWN_QUALIFY2; break; } if (comp_age_ms >= regime->ms_doubleclick_grace) { /* * The grace period expired, the second click * was either not forthcoming at all, or coming * quick enough to count: we classify it as a * single-click */ goto classify_single; } break; case LBCS_MIN_DOWN_QUALIFY2: if (!active) { classify_single: /* * He went up again too quickly, classify it * as a single-click. It could be bounce in * which case you might want to increase * the ms_up_settle in the regime */ event_name = "click"; each[n].mon_timer_comp = bcs->mon_timer_count; each[n].state = LBCS_UP_SETTLE2; goto classify; } if (comp_age_ms >= regime->ms_min_down) { /* * It's a double-click */ event_name = "doubleclick"; each[n].state = LBCS_WAIT_UP; goto classify; } break; case LBCS_WAIT_UP: if (!active) { each[n].mon_timer_comp = bcs->mon_timer_count; each[n].state = LBCS_UP_SETTLE2; } break; case LBCS_UP_SETTLE2: if (comp_age_ms < regime->ms_up_settle) break; each[n].state = LBCS_IDLE; if (!(--bcs->mon_refcount)) { #if defined(LWS_PLAT_TIMER_STOP) LWS_PLAT_TIMER_STOP(bcs->timer_mon); #endif } break; } continue; classify: lws_smd_msg_printf(bcs->ctx, LWSSMDCL_INTERACTION, "{\"btn\":\"%s/%s\", \"s\":\"%s\"}", bc->smd_bc_name, bc->button_map[n].smd_interaction_name, event_name); } } #endif struct lws_button_state * lws_button_controller_create(struct lws_context *ctx, const lws_button_controller_t *controller) { lws_button_state_t *bcs = lws_zalloc(sizeof(lws_button_state_t) + (controller->count_buttons * sizeof(lws_button_each_t)), __func__); lws_button_each_t *each = (lws_button_each_t *)&bcs[1]; size_t n; if (!bcs) return NULL; bcs->controller = controller; bcs->ctx = ctx; for (n = 0; n < controller->count_buttons; n++) each[n].bcs = bcs; #if defined(LWS_PLAT_TIMER_CREATE) /* this only runs inbetween a gpio ISR and the bottom half */ bcs->timer = LWS_PLAT_TIMER_CREATE("bcst", 1, 0, bcs, (TimerCallbackFunction_t)lws_button_bh); if (!bcs->timer) return NULL; /* this only runs when a button activity is being classified */ bcs->timer_mon = LWS_PLAT_TIMER_CREATE("bcmon", LWS_BUTTON_MON_TIMER_MS, 1, bcs, (TimerCallbackFunction_t)lws_button_mon); if (!bcs->timer_mon) return NULL; #endif return bcs; } void lws_button_controller_destroy(struct lws_button_state *bcs) { /* disable them all */ lws_button_enable(bcs, 0, 0); #if defined(LWS_PLAT_TIMER_DELETE) LWS_PLAT_TIMER_DELETE(&bcs->timer); LWS_PLAT_TIMER_DELETE(&bcs->timer_mon); #endif lws_free(bcs); } lws_button_idx_t lws_button_get_bit(struct lws_button_state *bcs, const char *name) { const lws_button_controller_t *bc = bcs->controller; int n; for (n = 0; n < bc->count_buttons; n++) if (!strcmp(name, bc->button_map[n].smd_interaction_name)) return 1 << n; return 0; /* not found */ } void lws_button_enable(lws_button_state_t *bcs, lws_button_idx_t _reset, lws_button_idx_t _set) { lws_button_idx_t u = (bcs->enable_bitmap & (~_reset)) | _set; const lws_button_controller_t *bc = bcs->controller; #if defined(LWS_PLAT_TIMER_START) lws_button_each_t *each = (lws_button_each_t *)&bcs[1]; #endif int n; for (n = 0; n < bcs->controller->count_buttons; n++) { if (!(bcs->enable_bitmap & (1 << n)) && (u & (1 << n))) { /* set as input with pullup or pulldown appropriately */ bc->gpio_ops->mode(bc->button_map[n].gpio, LWSGGPIO_FL_READ | ((bc->active_state_bitmap & (1 << n)) ? LWSGGPIO_FL_PULLDOWN : LWSGGPIO_FL_PULLUP)); #if defined(LWS_PLAT_TIMER_START) /* * This one is becoming enabled... the opaque for the * ISR is the indvidual lws_button_each_t, they all * point to the same ISR */ bc->gpio_ops->irq_mode(bc->button_map[n].gpio, bc->active_state_bitmap & (1 << n) ? LWSGGPIO_IRQ_RISING : LWSGGPIO_IRQ_FALLING, lws_button_irq_cb_t, &each[n]); #endif } if ((bcs->enable_bitmap & (1 << n)) && !(u & (1 << n))) /* this one is becoming disabled */ bc->gpio_ops->irq_mode(bc->button_map[n].gpio, LWSGGPIO_IRQ_NONE, NULL, NULL); } bcs->enable_bitmap = u; } libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-c3dev/main/000077500000000000000000000000001476025525100250365ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-c3dev/main/CMakeLists.txt000066400000000000000000000004751476025525100276040ustar00rootroot00000000000000idf_component_register(SRCS lws-minimal-esp32.c devices.c INCLUDE_DIRS "../libwebsockets/include;${IDF_PATH}/components/spi_flash/include;${IDF_PATH}/components/nvs_flash/include;${IDF_PATH}/components/mdns/include") target_link_libraries(${COMPONENT_LIB} websockets) include_directories(../build/libwebsockets) libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-c3dev/main/bb-i2c.c000066400000000000000000000036151476025525100262450ustar00rootroot00000000000000/* * lws generic bitbang i2c * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include "bb-i2c.h" int lws_bb_i2c_start(lws_i2c_ops_t *octx) { lws_bb_i2c_t *ctx = (lws_bb_i2c_t *)octx; ctx->gpio->set(ctx->sda, 1); ctx->gpio->set(ctx->scl, 1); ctx->delay(); if (!ctx->gpio->read(ctx->sda)) return 1; ctx->gpio->set(ctx->sda, 0); ctx->delay(); ctx->gpio->set(ctx->scl, 0); return 0; } void lws_bb_i2c_stop(lws_i2c_ops_t *octx) { lws_bb_i2c_t *ctx = (lws_bb_i2c_t *)octx; ctx->gpio->set(ctx->sda, 0); ctx->gpio->set(ctx->scl, 1); ctx->delay(); while (!ctx->gpio->read(ctx->scl)) ; ctx->gpio->set(ctx->sda, 1); ctx->delay(); } int lws_bb_i2c_write(lws_i2c_ops_t *octx, uint8_t data) { lws_bb_i2c_t *ctx = (lws_bb_i2c_t *)octx; int n; for (n = 0; n < 8; n++) { ctx->gpio->set(ctx->sda, !!(data & (1 << 7))); ctx->delay(); ctx->gpio->set(ctx->scl, 1); ctx->delay(); data <<= 1; ctx->gpio->set(ctx->scl, 0); } ctx->gpio->set(ctx->sda, 1); ctx->delay(); ctx->gpio->set(ctx->scl, 1); ctx->delay(); n = ctx->gpio->read(ctx->sda); ctx->gpio->set(ctx->scl, 0); ctx->delay(); return !!n; /* 0 = ACKED = OK */ } int lws_bb_i2c_read(lws_i2c_ops_t *octx) { lws_bb_i2c_t *ctx = (lws_bb_i2c_t *)octx; int n, r = 0; ctx->gpio->set(ctx->sda, 1); for (n = 7; n <= 0; n--) { ctx->gpio->set(ctx->scl, 0); ctx->delay(); ctx->gpio->set(ctx->scl, 1); ctx->delay(); if (ctx->gpio->read(ctx->sda)) r |= 1 << n; } ctx->gpio->set(ctx->scl, 0); return r; } void lws_bb_i2c_set_ack(lws_i2c_ops_t *octx, int ack) { lws_bb_i2c_t *ctx = (lws_bb_i2c_t *)octx; ctx->gpio->set(ctx->scl, 0); ctx->gpio->set(ctx->sda, !!ack); ctx->delay(); ctx->gpio->set(ctx->scl, 1); ctx->delay(); ctx->gpio->set(ctx->scl, 0); ctx->delay(); ctx->gpio->set(ctx->sda, 1); } libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-c3dev/main/bb-i2c.h000066400000000000000000000016671476025525100262570ustar00rootroot00000000000000/* * lws-minimal-esp32 * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include #include #include "i2c.h" #include "gpio-esp32.h" typedef struct lws_bb_i2c { lws_i2c_ops_t bb_ops; /* init to lws_bb_i2c_ops */ /* implementation-specific members */ _lws_plat_gpio_t scl; _lws_plat_gpio_t sda; const lws_gpio_ops_t *gpio; void (*delay)(void); } lws_bb_i2c_t; #define lws_bb_i2c_ops \ { \ .start = lws_bb_i2c_start, \ .stop = lws_bb_i2c_stop, \ .write = lws_bb_i2c_write, \ .read = lws_bb_i2c_read, \ .set_ack = lws_bb_i2c_set_ack, \ } int lws_bb_i2c_start(lws_i2c_ops_t *octx); void lws_bb_i2c_stop(lws_i2c_ops_t *octx); int lws_bb_i2c_write(lws_i2c_ops_t *octx, uint8_t data); int lws_bb_i2c_read(lws_i2c_ops_t *octx); void lws_bb_i2c_set_ack(lws_i2c_ops_t *octx, int ack); libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-c3dev/main/component.mk000066400000000000000000000002221476025525100273650ustar00rootroot00000000000000# # "main" pseudo-component makefile. # # (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.) libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-c3dev/main/devices.c000066400000000000000000000074451476025525100266360ustar00rootroot00000000000000/* * devices for ESP32 C3 dev board * * Written in 2010-2021 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #define LWIP_PROVIDE_ERRNO 1 #define _ESP_PLATFORM_ERRNO_H_ #include #include "sdkconfig.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include #include struct lws_led_state *lls; lws_display_state_t lds; struct lws_button_state *bcs; lws_netdev_instance_wifi_t *wnd; /* * Button controller */ static const lws_button_map_t bcm[] = { { .gpio = GPIO_NUM_0, .smd_interaction_name = "user" }, }; static const lws_button_controller_t bc = { .smd_bc_name = "bc", .gpio_ops = &lws_gpio_plat, .button_map = &bcm[0], .active_state_bitmap = 0, .count_buttons = LWS_ARRAY_SIZE(bcm), }; /* * pwm controller */ static const lws_pwm_map_t pwm_map[] = { { .gpio = GPIO_NUM_8, .index = 0, .active_level = 1 } }; static const lws_pwm_ops_t pwm_ops = { lws_pwm_plat_ops, .pwm_map = &pwm_map[0], .count_pwm_map = LWS_ARRAY_SIZE(pwm_map) }; #if 0 static const lws_display_ssd1306_t disp = { .disp = { lws_display_ssd1306_ops, .w = 128, .h = 64 }, .i2c = (lws_i2c_ops_t *)&li2c, .gpio = &lws_gpio_plat, .reset_gpio = GPIO_NUM_16, .i2c7_address = SSD1306_I2C7_ADS1 }; #endif /* * led controller */ static const lws_led_gpio_map_t lgm[] = { { .name = "alert", .gpio = GPIO_NUM_8, .pwm_ops = &pwm_ops, /* managed by pwm */ .active_level = 1, }, }; static const lws_led_gpio_controller_t lgc = { .led_ops = lws_led_gpio_ops, .gpio_ops = &lws_gpio_plat, .led_map = &lgm[0], .count_leds = LWS_ARRAY_SIZE(lgm) }; /* * Settings stored in platform nv */ static const lws_settings_ops_t sett = { lws_settings_ops_plat }; /* * Wifi */ static const lws_netdev_ops_t wifi_ops = { lws_netdev_wifi_plat_ops }; int init_plat_devices(struct lws_context *ctx) { lws_settings_instance_t *si; lws_netdevs_t *netdevs = lws_netdevs_from_ctx(ctx); si = lws_settings_init(&sett, (void *)"nvs"); if (!si) { lwsl_err("%s: failed to create settings instance\n", __func__); return 1; } netdevs->si = si; #if 0 /* * This is a temp hack to bootstrap the settings to contain the test * AP ssid and passphrase for one time, so the settings can be stored * while there's no UI atm */ { lws_wifi_creds_t creds; memset(&creds, 0, sizeof(creds)); lws_strncpy(creds.ssid, "xxx", sizeof(creds.ssid)); lws_strncpy(creds.passphrase, "xxx", sizeof(creds.passphrase)); lws_dll2_add_tail(&creds.list, &netdevs->owner_creds); if (lws_netdev_credentials_settings_set(netdevs)) { lwsl_err("%s: failed to write bootstrap creds\n", __func__); return 1; } } #endif /* create the wifi network device and configure it */ wnd = (lws_netdev_instance_wifi_t *) wifi_ops.create(ctx, &wifi_ops, "wl0", NULL); if (!wnd) { lwsl_err("%s: failed to create wifi object\n", __func__); return 1; } wnd->flags |= LNDIW_MODE_STA; if (wifi_ops.configure(&wnd->inst, NULL)) { lwsl_err("%s: failed to configure wifi object\n", __func__); return 1; } wifi_ops.up(&wnd->inst); esp_wifi_set_mode(WIFI_MODE_STA); lws_netdev_wifi_scan_plat(&wnd->inst); lls = lgc.led_ops.create(&lgc.led_ops); if (!lls) { lwsl_err("%s: could not create led\n", __func__); return 1; } /* pwm init must go after the led controller init */ // pwm_ops.init(&pwm_ops); bcs = lws_button_controller_create(ctx, &bc); if (!bcs) { lwsl_err("%s: could not create buttons\n", __func__); return 1; } lws_button_enable(bcs, 0, lws_button_get_bit(bcs, "user")); // lws_led_transition(lls, "alert", &lws_pwmseq_static_off, // &lws_pwmseq_static_on); lwsl_notice("%s: exiting device init\n", __func__); return 0; } libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-c3dev/main/gpio-esp32.c000066400000000000000000000014561476025525100271000ustar00rootroot00000000000000#include #include "gpio-esp32.h" static void lws_gpio_esp32_mode_write(_lws_plat_gpio_t gpio) { gpio_reset_pin(gpio); gpio_set_pull_mode(gpio, GPIO_PULLUP_ONLY); gpio_set_direction(gpio, GPIO_MODE_INPUT_OUTPUT); gpio_set_level(gpio, 1); } static void lws_gpio_esp32_mode_read(_lws_plat_gpio_t gpio) { gpio_set_pull_mode(gpio, GPIO_PULLUP_ONLY); gpio_set_direction(gpio, GPIO_MODE_INPUT); gpio_set_level(gpio, 1); } static int lws_gpio_esp32_read(_lws_plat_gpio_t gpio) { return gpio_get_level(gpio); } static void lws_gpio_esp32_set(_lws_plat_gpio_t gpio, int val) { gpio_set_level(gpio, val); } const lws_gpio_ops_t lws_gpio_esp32 = { .mode_write = lws_gpio_esp32_mode_write, .mode_read = lws_gpio_esp32_mode_read, .read = lws_gpio_esp32_read, .set = lws_gpio_esp32_set, }; libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-c3dev/main/gpio-esp32.h000066400000000000000000000004721476025525100271020ustar00rootroot00000000000000/* * lws generic gpio - esp32 platform wrapper * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ typedef int _lws_plat_gpio_t; #include "gpio.h" extern const lws_gpio_ops_t lws_gpio_esp32; libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-c3dev/main/gpio.h000066400000000000000000000012741476025525100261510ustar00rootroot00000000000000/* * lws genric gpio * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * You should typedef _lws_plat_gpio_t to int or whatever before * including this. It's better to wrap this in a platform-specific * include that does that and then include the platform-specific * include in your code. */ #if !defined(__LWS_GPIO_H__) #define __LWS_GPIO_H__ typedef struct lws_gpio_ops { void (*mode_write)(_lws_plat_gpio_t gpio); void (*mode_read)(_lws_plat_gpio_t gpio); int (*read)(_lws_plat_gpio_t gpio); void (*set)(_lws_plat_gpio_t gpio, int val); } lws_gpio_ops_t; #endif libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-c3dev/main/i2c.c000066400000000000000000000006701476025525100256620ustar00rootroot00000000000000#include "i2c.h" int lws_i2c_command(lws_i2c_ops_t *ctx, uint8_t ads, uint8_t c) { if (ctx->start(ctx)) return 1; if (ctx->write(ctx, ads << 1)) { ctx->stop(ctx); return 1; } ctx->write(ctx, 0); ctx->write(ctx, c); ctx->stop(ctx); return 0; } int lws_i2c_command_list(lws_i2c_ops_t *ctx, uint8_t ads, const uint8_t *buf, size_t len) { while (len--) if (lws_i2c_command(ctx, ads, *buf++)) return 1; return 0; } libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-c3dev/main/i2c.h000066400000000000000000000016001476025525100256610ustar00rootroot00000000000000/* * Generic i2c ops * * These ops always appear first in an implementation-specific * object, so the generic ops can be cast to the implementation- * specific object in the handlers. * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #if !defined(__LWS_I2C_H__) #define __LWS_I2C_H__ #include #include typedef struct lws_i2c_ops { int (*start)(struct lws_i2c_ops *ctx); void (*stop)(struct lws_i2c_ops *ctx); int (*write)(struct lws_i2c_ops *ctx, uint8_t data); int (*read)(struct lws_i2c_ops *ctx); void (*set_ack)(struct lws_i2c_ops *octx, int ack); } lws_i2c_ops_t; int lws_i2c_command(lws_i2c_ops_t *ctx, uint8_t ads, uint8_t c); int lws_i2c_command_list(lws_i2c_ops_t *ctx, uint8_t ads, const uint8_t *buf, size_t len); #endif libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-c3dev/main/lws-minimal-esp32.c000066400000000000000000000103521476025525100303660ustar00rootroot00000000000000/* * lws-minimal-esp32 * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * Based on espressif Public Domain sample */ #define LWIP_PROVIDE_ERRNO 1 #define _ESP_PLATFORM_ERRNO_H_ #include #include "sdkconfig.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include #include struct lws_context *context; extern struct lws_led_state *lls; extern lws_display_state_t lds; extern lws_netdev_instance_wifi_t *wnd; extern int init_plat_devices(struct lws_context *); #include "policy.h" static uint8_t flip; typedef struct myss { struct lws_ss_handle *ss; void *opaque_data; /* ... application specific state ... */ size_t amount; } myss_t; static int myss_rx(void *userobj, const uint8_t *buf, size_t len, int flags) { myss_t *m = (myss_t *)userobj; lwsl_user("%s: len %d, flags: %d\n", __func__, (int)len, flags); // lwsl_hexdump_info(buf, len); m->amount += len; if (flags & LWSSS_FLAG_EOM) { /* * If we received the whole message, for our example it means * we are done. */ lwsl_notice("%s: received %u bytes\n", __func__, (unsigned int)m->amount); /* * In CI, we use sai-expect to look for this * string for success */ lwsl_notice("Completed: PASS\n"); } return 0; } static int myss_state(void *userobj, void *sh, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { myss_t *m = (myss_t *)userobj; lwsl_user("%s: %s, ord 0x%x\n", __func__, lws_ss_state_name(state), (unsigned int)ack); switch (state) { case LWSSSCS_CREATING: if (lws_ss_client_connect(m->ss)) lwsl_err("%s: connection failed\n", __func__); break; default: break; } return 0; } static const lws_ss_info_t ssi = { .handle_offset = offsetof(myss_t, ss), .opaque_user_data_offset = offsetof(myss_t, opaque_data), .rx = myss_rx, .state = myss_state, .user_alloc = sizeof(myss_t), .streamtype = "test_stream", }; static const lws_led_sequence_def_t *seqs[] = { &lws_pwmseq_static_on, &lws_pwmseq_static_off, &lws_pwmseq_sine_endless_slow, &lws_pwmseq_sine_endless_fast, }; static int smd_cb(void *opaque, lws_smd_class_t _class, lws_usec_t timestamp, void *buf, size_t len) { if (!lws_json_simple_strcmp(buf, len, "\"src\":", "bc/user") && !lws_json_simple_strcmp(buf, len, "\"event\":", "click")) { lws_led_transition(lls, "alert", seqs[flip & 3], &lws_pwmseq_linear_wipe); flip++; } lwsl_hexdump_notice(buf, len); if ((_class & LWSSMDCL_SYSTEM_STATE) && !lws_json_simple_strcmp(buf, len, "\"state\":", "OPERATIONAL")) { /* create the secure stream */ lwsl_notice("%s: creating test secure stream\n", __func__); if (lws_ss_create(context, 0, &ssi, NULL, NULL, NULL, NULL)) { lwsl_err("%s: failed to create secure stream\n", __func__); return -1; } } if (_class & LWSSMDCL_INTERACTION) /* * Any kind of user interaction brings the display back up and * resets the dimming / blanking timers */ lws_display_state_active(&lds); return 0; } void app_main(void) { struct lws_context_creation_info *info; lws_set_log_level(1024 | 7, NULL); lws_netdev_plat_init(); lws_netdev_plat_wifi_init(); info = malloc(sizeof(*info)); if (!info) goto spin; memset(info, 0, sizeof(*info)); lwsl_notice("LWS test for ESP32-C3 Dev Board\n"); info->pss_policies_json = ss_policy; info->options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info->port = CONTEXT_PORT_NO_LISTEN; info->early_smd_cb = smd_cb; info->early_smd_class_filter = LWSSMDCL_INTERACTION | LWSSMDCL_SYSTEM_STATE | LWSSMDCL_NETWORK; context = lws_create_context(info); if (!context) { lwsl_err("lws init failed\n"); return; } /* * We don't need this after context creation... things it pointed to * still need to exist though since the context copied the pointers. */ free(info); /* devices and init are in devices.c */ if (init_plat_devices(context)) goto spin; /* the lws event loop */ do { taskYIELD(); } while (lws_service(context, 0) >= 0); spin: vTaskDelay(10); taskYIELD(); goto spin; } libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-c3dev/main/policy.h000066400000000000000000000134601476025525100265120ustar00rootroot00000000000000 static const char * const ss_policy = "{" "\"release\":" "\"01234567\"," "\"product\":" "\"myproduct\"," "\"schema-version\":" "1," "\"retry\": [" /* named backoff / retry strategies */ "{\"default\": {" "\"backoff\": [" "1000," "2000," "3000," "5000," "10000" "]," "\"conceal\":" "25," "\"jitterpc\":" "20," "\"svalidping\":" "30," "\"svalidhup\":" "35" "}}" "]," "\"certs\": [" /* named individual certificates in BASE64 DER */ /* * Let's Encrypt certs for warmcat.com / libwebsockets.org * * We fetch the real policy from there using SS and switch to * using that. */ "{\"isrg_root_x1\": \"" /* ISRG ROOT X1 */ "MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw" "TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh" "cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4" "WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu" "ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY" "MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc" "h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+" "0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U" "A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW" "T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH" "B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC" "B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv" "KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn" "OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn" "jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw" "qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI" "rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV" "HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq" "hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL" "ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ" "3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK" "NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5" "ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur" "TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC" "jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc" "oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq" "4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA" "mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d" "emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=" "\"}," "{\"LEX3_isrg_root_x1\": \"" /* LE X3 signed by ISRG X1 root */ "MIIFjTCCA3WgAwIBAgIRANOxciY0IzLc9AUoUSrsnGowDQYJKoZIhvcNAQELBQAw" "TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh" "cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTYxMDA2MTU0MzU1" "WhcNMjExMDA2MTU0MzU1WjBKMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg" "RW5jcnlwdDEjMCEGA1UEAxMaTGV0J3MgRW5jcnlwdCBBdXRob3JpdHkgWDMwggEi" "MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCc0wzwWuUuR7dyXTeDs2hjMOrX" "NSYZJeG9vjXxcJIvt7hLQQWrqZ41CFjssSrEaIcLo+N15Obzp2JxunmBYB/XkZqf" "89B4Z3HIaQ6Vkc/+5pnpYDxIzH7KTXcSJJ1HG1rrueweNwAcnKx7pwXqzkrrvUHl" "Npi5y/1tPJZo3yMqQpAMhnRnyH+lmrhSYRQTP2XpgofL2/oOVvaGifOFP5eGr7Dc" "Gu9rDZUWfcQroGWymQQ2dYBrrErzG5BJeC+ilk8qICUpBMZ0wNAxzY8xOJUWuqgz" "uEPxsR/DMH+ieTETPS02+OP88jNquTkxxa/EjQ0dZBYzqvqEKbbUC8DYfcOTAgMB" "AAGjggFnMIIBYzAOBgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIBADBU" "BgNVHSAETTBLMAgGBmeBDAECATA/BgsrBgEEAYLfEwEBATAwMC4GCCsGAQUFBwIB" "FiJodHRwOi8vY3BzLnJvb3QteDEubGV0c2VuY3J5cHQub3JnMB0GA1UdDgQWBBSo" "SmpjBH3duubRObemRWXv86jsoTAzBgNVHR8ELDAqMCigJqAkhiJodHRwOi8vY3Js" "LnJvb3QteDEubGV0c2VuY3J5cHQub3JnMHIGCCsGAQUFBwEBBGYwZDAwBggrBgEF" "BQcwAYYkaHR0cDovL29jc3Aucm9vdC14MS5sZXRzZW5jcnlwdC5vcmcvMDAGCCsG" "AQUFBzAChiRodHRwOi8vY2VydC5yb290LXgxLmxldHNlbmNyeXB0Lm9yZy8wHwYD" "VR0jBBgwFoAUebRZ5nu25eQBc4AIiMgaWPbpm24wDQYJKoZIhvcNAQELBQADggIB" "ABnPdSA0LTqmRf/Q1eaM2jLonG4bQdEnqOJQ8nCqxOeTRrToEKtwT++36gTSlBGx" "A/5dut82jJQ2jxN8RI8L9QFXrWi4xXnA2EqA10yjHiR6H9cj6MFiOnb5In1eWsRM" "UM2v3e9tNsCAgBukPHAg1lQh07rvFKm/Bz9BCjaxorALINUfZ9DD64j2igLIxle2" "DPxW8dI/F2loHMjXZjqG8RkqZUdoxtID5+90FgsGIfkMpqgRS05f4zPbCEHqCXl1" "eO5HyELTgcVlLXXQDgAWnRzut1hFJeczY1tjQQno6f6s+nMydLN26WuU4s3UYvOu" "OsUxRlJu7TSRHqDC3lSE5XggVkzdaPkuKGQbGpny+01/47hfXXNB7HntWNZ6N2Vw" "p7G6OfY+YQrZwIaQmhrIqJZuigsrbe3W+gdn5ykE9+Ky0VgVUsfxo52mwFYs1JKY" "2PGDuWx8M6DlS6qQkvHaRUo0FMd8TsSlbF0/v965qGFKhSDeQoMpYnwcmQilRh/0" "ayLThlHLN81gSkJjVrPI0Y8xCVPB4twb1PFUd2fPM3sA1tJ83sZ5v8vgFv2yofKR" "PB0t6JzUA81mSqM3kxl5e+IZwhYAyO0OTg3/fs8HqGTNKd9BqoUwSRBzp06JMg5b" "rUCGwbCUDI0mxadJ3Bz4WxR6fyNpBK2yAinWEsikxqEt" "\"}" "]," "\"trust_stores\": [" /* named cert chains */ "{" "\"name\": \"le_via_isrg\"," "\"stack\": [" "\"isrg_root_x1\"," "\"LEX3_isrg_root_x1\"" "]" "}" "]," "\"s\": [" "{\"test_stream\": {" "\"endpoint\":" "\"warmcat.com\"," "\"port\":" "443," "\"protocol\":" "\"h2\"," "\"http_method\":" "\"GET\"," "\"http_url\":" "\"index.html\"," "\"tls\":" "true," "\"opportunistic\":" "true," "\"retry\":" "\"default\"," "\"tls_trust_store\":" "\"le_via_isrg\"" "}},{" /* * "captive_portal_detect" describes * what to do in order to check if the path to * the Internet is being interrupted by a * captive portal. */ "\"captive_portal_detect\": {" "\"endpoint\":" "\"connectivitycheck.android.com\"," "\"http_url\":" "\"generate_204\"," "\"port\":" "80," "\"protocol\":" "\"h1\"," "\"http_method\":" "\"GET\"," "\"opportunistic\":" "true," "\"http_expect\":" "204," "\"http_fail_redirect\": true" "}}" "]}" ; libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-c3dev/partitions.csv000066400000000000000000000003021476025525100270160ustar00rootroot00000000000000# ESP-IDF Partition Table # Name, Type, SubType, Offset, Size, Flags nvs, data, nvs, 0x9000, 0x6000, phy_init, data, phy, 0xf000, 0x1000, factory, app, factory, 0x10000, 2M, libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-c3dev/private-lib-plat-freertos.h000066400000000000000000000073341476025525100312750ustar00rootroot00000000000000 /* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * Included from lib/private-lib-core.h if LWS_PLAT_FREERTOS */ #if !defined(LWS_ESP_PLATFORM) #define SOMAXCONN 3 #endif #if defined(LWS_AMAZON_RTOS) int open(const char *path, int oflag, ...); #else #include #endif #include #include #include #include #include #include #ifndef __cplusplus #include #endif #include #if defined(LWS_AMAZON_RTOS) const char * gai_strerror(int); #else #include #endif #if defined(LWS_AMAZON_RTOS) #include "FreeRTOS.h" #if defined(LWS_WITH_SYS_ASYNC_DNS) #include "FreeRTOS_IP.h" #endif #include "timers.h" #include #else #include "freertos/timers.h" #include #include #include #endif #if defined(LWS_WITH_ESP32) #include "lwip/apps/sntp.h" #include #endif typedef SemaphoreHandle_t lws_mutex_t; #define lws_mutex_init(x) x = xSemaphoreCreateMutex() #define lws_mutex_destroy(x) vSemaphoreDelete(x) #define lws_mutex_lock(x) xSemaphoreTake(x, portMAX_DELAY) #define lws_mutex_unlock(x) xSemaphoreGive(x) #include #if defined(LWS_BUILTIN_GETIFADDRS) #include "./misc/getifaddrs.h" #endif #define LWS_ERRNO errno #define LWS_EAGAIN EAGAIN #define LWS_EALREADY EALREADY #define LWS_EINPROGRESS EINPROGRESS #define LWS_EINTR EINTR #define LWS_EISCONN EISCONN #define LWS_ENOTCONN ENOTCONN #define LWS_EWOULDBLOCK EWOULDBLOCK #define LWS_EADDRINUSE EADDRINUSE #define lws_set_blocking_send(wsi) #ifndef LWS_NO_FORK #ifdef LWS_HAVE_SYS_PRCTL_H #include #endif #endif #if !defined(MSG_NOSIGNAL) #define MSG_NOSIGNAL 0 #endif #define compatible_close(x) close(x) #define lws_plat_socket_offset() LWIP_SOCKET_OFFSET #define wsi_from_fd(A,B) A->lws_lookup[B - lws_plat_socket_offset()] struct lws_context; struct lws; int insert_wsi(const struct lws_context *context, struct lws *wsi); #define delete_from_fd(A,B) A->lws_lookup[B - lws_plat_socket_offset()] = 0 #define LWS_PLAT_TIMER_TYPE TimerHandle_t #define LWS_PLAT_TIMER_CB(name, var) void name(TimerHandle_t var) #define LWS_PLAT_TIMER_CB_GET_OPAQUE(x) pvTimerGetTimerID(x) #define LWS_PLAT_TIMER_CREATE(name, interval, repeat, opaque, cb) \ xTimerCreate(name, pdMS_TO_TICKS(interval) ? pdMS_TO_TICKS(interval) : 1, \ repeat ? pdTRUE : 0, opaque, cb) #define LWS_PLAT_TIMER_DELETE(ptr) xTimerDelete(ptr, 0) #define LWS_PLAT_TIMER_START(ptr) xTimerStart(ptr, 0) #define LWS_PLAT_TIMER_STOP(ptr) xTimerStop(ptr, 0) libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-c3dev/sdkconfig000066400000000000000000001103201476025525100260010ustar00rootroot00000000000000# # Automatically generated file. DO NOT EDIT. # Espressif IoT Development Framework (ESP-IDF) Project Configuration # CONFIG_IDF_CMAKE=y CONFIG_IDF_TARGET_ARCH_RISCV=y CONFIG_IDF_TARGET="esp32c3" CONFIG_IDF_TARGET_ESP32C3=y CONFIG_IDF_FIRMWARE_CHIP_ID=0x0005 # # SDK tool configuration # CONFIG_SDK_TOOLPREFIX="riscv32-esp-elf-" # CONFIG_SDK_TOOLCHAIN_SUPPORTS_TIME_WIDE_64_BITS is not set # end of SDK tool configuration # # Build type # CONFIG_APP_BUILD_TYPE_APP_2NDBOOT=y # CONFIG_APP_BUILD_TYPE_ELF_RAM is not set CONFIG_APP_BUILD_GENERATE_BINARIES=y CONFIG_APP_BUILD_BOOTLOADER=y CONFIG_APP_BUILD_USE_FLASH_SECTIONS=y # end of Build type # # Application manager # CONFIG_APP_COMPILE_TIME_DATE=y # CONFIG_APP_EXCLUDE_PROJECT_VER_VAR is not set # CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR is not set # CONFIG_APP_PROJECT_VER_FROM_CONFIG is not set CONFIG_APP_RETRIEVE_LEN_ELF_SHA=16 # end of Application manager # # Bootloader config # CONFIG_BOOTLOADER_OFFSET_IN_FLASH=0x0 CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y # CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG is not set # CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_PERF is not set # CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_NONE is not set # CONFIG_BOOTLOADER_LOG_LEVEL_NONE is not set # CONFIG_BOOTLOADER_LOG_LEVEL_ERROR is not set # CONFIG_BOOTLOADER_LOG_LEVEL_WARN is not set CONFIG_BOOTLOADER_LOG_LEVEL_INFO=y # CONFIG_BOOTLOADER_LOG_LEVEL_DEBUG is not set # CONFIG_BOOTLOADER_LOG_LEVEL_VERBOSE is not set CONFIG_BOOTLOADER_LOG_LEVEL=3 CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_9V=y # CONFIG_BOOTLOADER_FACTORY_RESET is not set # CONFIG_BOOTLOADER_APP_TEST is not set CONFIG_BOOTLOADER_WDT_ENABLE=y # CONFIG_BOOTLOADER_WDT_DISABLE_IN_USER_CODE is not set CONFIG_BOOTLOADER_WDT_TIME_MS=9000 # CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE is not set # CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP is not set # CONFIG_BOOTLOADER_SKIP_VALIDATE_ON_POWER_ON is not set # CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS is not set CONFIG_BOOTLOADER_RESERVE_RTC_SIZE=0 # CONFIG_BOOTLOADER_CUSTOM_RESERVE_RTC is not set CONFIG_BOOTLOADER_FLASH_XMC_SUPPORT=y # end of Bootloader config # # Security features # CONFIG_SECURE_BOOT_SUPPORTS_RSA=y CONFIG_SECURE_TARGET_HAS_SECURE_ROM_DL_MODE=y # CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT is not set # CONFIG_SECURE_BOOT is not set # CONFIG_SECURE_FLASH_ENC_ENABLED is not set # end of Security features # # Boot ROM Behavior # CONFIG_BOOT_ROM_LOG_ALWAYS_ON=y # CONFIG_BOOT_ROM_LOG_ALWAYS_OFF is not set # CONFIG_BOOT_ROM_LOG_ON_GPIO_HIGH is not set # CONFIG_BOOT_ROM_LOG_ON_GPIO_LOW is not set # end of Boot ROM Behavior # # Serial flasher config # CONFIG_ESPTOOLPY_BAUD_OTHER_VAL=115200 # CONFIG_ESPTOOLPY_NO_STUB is not set # CONFIG_ESPTOOLPY_FLASHMODE_QIO is not set # CONFIG_ESPTOOLPY_FLASHMODE_QOUT is not set CONFIG_ESPTOOLPY_FLASHMODE_DIO=y # CONFIG_ESPTOOLPY_FLASHMODE_DOUT is not set CONFIG_ESPTOOLPY_FLASHMODE="dio" CONFIG_ESPTOOLPY_FLASHFREQ_80M=y # CONFIG_ESPTOOLPY_FLASHFREQ_40M is not set # CONFIG_ESPTOOLPY_FLASHFREQ_26M is not set # CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set CONFIG_ESPTOOLPY_FLASHFREQ="80m" # CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set CONFIG_ESPTOOLPY_FLASHSIZE_2MB=y # CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set # CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set # CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set CONFIG_ESPTOOLPY_FLASHSIZE="2MB" CONFIG_ESPTOOLPY_FLASHSIZE_DETECT=y CONFIG_ESPTOOLPY_BEFORE_RESET=y # CONFIG_ESPTOOLPY_BEFORE_NORESET is not set CONFIG_ESPTOOLPY_BEFORE="default_reset" CONFIG_ESPTOOLPY_AFTER_RESET=y # CONFIG_ESPTOOLPY_AFTER_NORESET is not set CONFIG_ESPTOOLPY_AFTER="hard_reset" # CONFIG_ESPTOOLPY_MONITOR_BAUD_CONSOLE is not set # CONFIG_ESPTOOLPY_MONITOR_BAUD_9600B is not set # CONFIG_ESPTOOLPY_MONITOR_BAUD_57600B is not set CONFIG_ESPTOOLPY_MONITOR_BAUD_115200B=y # CONFIG_ESPTOOLPY_MONITOR_BAUD_230400B is not set # CONFIG_ESPTOOLPY_MONITOR_BAUD_921600B is not set # CONFIG_ESPTOOLPY_MONITOR_BAUD_2MB is not set # CONFIG_ESPTOOLPY_MONITOR_BAUD_OTHER is not set CONFIG_ESPTOOLPY_MONITOR_BAUD_OTHER_VAL=115200 CONFIG_ESPTOOLPY_MONITOR_BAUD=115200 # end of Serial flasher config # # Partition Table # # CONFIG_PARTITION_TABLE_SINGLE_APP is not set CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE=y # CONFIG_PARTITION_TABLE_TWO_OTA is not set # CONFIG_PARTITION_TABLE_CUSTOM is not set CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv" CONFIG_PARTITION_TABLE_FILENAME="partitions_singleapp_large.csv" CONFIG_PARTITION_TABLE_OFFSET=0x8000 CONFIG_PARTITION_TABLE_MD5=y # end of Partition Table # # Compiler options # CONFIG_COMPILER_OPTIMIZATION_DEFAULT=y # CONFIG_COMPILER_OPTIMIZATION_SIZE is not set # CONFIG_COMPILER_OPTIMIZATION_PERF is not set # CONFIG_COMPILER_OPTIMIZATION_NONE is not set CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y # CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set # CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE is not set CONFIG_COMPILER_OPTIMIZATION_ASSERTION_LEVEL=2 # CONFIG_COMPILER_OPTIMIZATION_CHECKS_SILENT is not set CONFIG_COMPILER_HIDE_PATHS_MACROS=y # CONFIG_COMPILER_CXX_EXCEPTIONS is not set # CONFIG_COMPILER_CXX_RTTI is not set CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y # CONFIG_COMPILER_STACK_CHECK_MODE_NORM is not set # CONFIG_COMPILER_STACK_CHECK_MODE_STRONG is not set # CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set # CONFIG_COMPILER_WARN_WRITE_STRINGS is not set # CONFIG_COMPILER_DISABLE_GCC8_WARNINGS is not set # CONFIG_COMPILER_DUMP_RTL_FILES is not set # end of Compiler options # # Component config # # # Application Level Tracing # # CONFIG_APPTRACE_DEST_JTAG is not set CONFIG_APPTRACE_DEST_NONE=y CONFIG_APPTRACE_LOCK_ENABLE=y # end of Application Level Tracing # # ESP-ASIO # # CONFIG_ASIO_SSL_SUPPORT is not set # end of ESP-ASIO # # Bluetooth # # CONFIG_BT_ENABLED is not set CONFIG_BTDM_CTRL_BR_EDR_SCO_DATA_PATH_EFF=0 CONFIG_BTDM_CTRL_PCM_ROLE_EFF=0 CONFIG_BTDM_CTRL_PCM_POLAR_EFF=0 CONFIG_BTDM_CTRL_BLE_MAX_CONN_EFF=0 CONFIG_BTDM_CTRL_BR_EDR_MAX_ACL_CONN_EFF=0 CONFIG_BTDM_CTRL_BR_EDR_MAX_SYNC_CONN_EFF=0 CONFIG_BTDM_CTRL_PINNED_TO_CORE=0 CONFIG_BTDM_BLE_SLEEP_CLOCK_ACCURACY_INDEX_EFF=1 CONFIG_BT_CTRL_MODE_EFF=1 CONFIG_BT_CTRL_BLE_MAX_ACT=10 CONFIG_BT_CTRL_BLE_MAX_ACT_EFF=10 CONFIG_BT_CTRL_BLE_STATIC_ACL_TX_BUF_NB=0 CONFIG_BT_CTRL_PINNED_TO_CORE=0 CONFIG_BT_CTRL_HCI_TL=1 CONFIG_BT_CTRL_ADV_DUP_FILT_MAX=30 CONFIG_BT_CTRL_HW_CCA_EFF=0 CONFIG_BT_CTRL_DFT_TX_POWER_LEVEL_EFF=0 CONFIG_BT_CTRL_BLE_ADV_REPORT_FLOW_CTRL_SUPP=y CONFIG_BT_CTRL_BLE_ADV_REPORT_FLOW_CTRL_NUM=100 CONFIG_BT_CTRL_BLE_ADV_REPORT_DISCARD_THRSHOLD=20 CONFIG_BT_CTRL_BLE_SCAN_DUPL=y CONFIG_BT_CTRL_SCAN_DUPL_TYPE=0 CONFIG_BT_CTRL_SCAN_DUPL_CACHE_SIZE=100 CONFIG_BT_CTRL_COEX_PHY_CODED_TX_RX_TLIM_EFF=0 CONFIG_BT_CTRL_SLEEP_MODE_EFF=0 CONFIG_BT_CTRL_SLEEP_CLOCK_EFF=0 CONFIG_BT_CTRL_HCI_TL_EFF=1 CONFIG_BT_RESERVE_DRAM=0 CONFIG_BT_NIMBLE_ENABLE_CONN_REATTEMPT=y CONFIG_BT_NIMBLE_USE_ESP_TIMER=y # end of Bluetooth # # CoAP Configuration # CONFIG_COAP_MBEDTLS_PSK=y # CONFIG_COAP_MBEDTLS_PKI is not set # CONFIG_COAP_MBEDTLS_DEBUG is not set CONFIG_COAP_LOG_DEFAULT_LEVEL=0 # end of CoAP Configuration # # Driver configurations # # # ADC configuration # # CONFIG_ADC_FORCE_XPD_FSM is not set CONFIG_ADC_DISABLE_DAC=y # end of ADC configuration # # SPI configuration # # CONFIG_SPI_MASTER_IN_IRAM is not set CONFIG_SPI_MASTER_ISR_IN_IRAM=y # CONFIG_SPI_SLAVE_IN_IRAM is not set CONFIG_SPI_SLAVE_ISR_IN_IRAM=y # end of SPI configuration # # TWAI configuration # # CONFIG_TWAI_ISR_IN_IRAM is not set # end of TWAI configuration # # UART configuration # # CONFIG_UART_ISR_IN_IRAM is not set # end of UART configuration # end of Driver configurations # # eFuse Bit Manager # # CONFIG_EFUSE_CUSTOM_TABLE is not set # CONFIG_EFUSE_VIRTUAL is not set CONFIG_EFUSE_MAX_BLK_LEN=256 # end of eFuse Bit Manager # # ESP-TLS # CONFIG_ESP_TLS_USING_MBEDTLS=y CONFIG_ESP_TLS_USE_DS_PERIPHERAL=y # CONFIG_ESP_TLS_SERVER is not set # CONFIG_ESP_TLS_PSK_VERIFICATION is not set # CONFIG_ESP_TLS_INSECURE is not set # end of ESP-TLS # # ESP32C3-Specific # # CONFIG_ESP32C3_DEFAULT_CPU_FREQ_80 is not set CONFIG_ESP32C3_DEFAULT_CPU_FREQ_160=y CONFIG_ESP32C3_DEFAULT_CPU_FREQ_MHZ=160 # CONFIG_ESP32C3_REV_MIN_0 is not set # CONFIG_ESP32C3_REV_MIN_1 is not set # CONFIG_ESP32C3_REV_MIN_2 is not set CONFIG_ESP32C3_REV_MIN_3=y CONFIG_ESP32C3_REV_MIN=3 CONFIG_ESP32C3_DEBUG_OCDAWARE=y # CONFIG_ESP32C3_DEBUG_STUBS_ENABLE is not set CONFIG_ESP32C3_BROWNOUT_DET=y CONFIG_ESP32C3_BROWNOUT_DET_LVL_SEL_7=y # CONFIG_ESP32C3_BROWNOUT_DET_LVL_SEL_6 is not set # CONFIG_ESP32C3_BROWNOUT_DET_LVL_SEL_5 is not set # CONFIG_ESP32C3_BROWNOUT_DET_LVL_SEL_4 is not set # CONFIG_ESP32C3_BROWNOUT_DET_LVL_SEL_3 is not set # CONFIG_ESP32C3_BROWNOUT_DET_LVL_SEL_2 is not set CONFIG_ESP32C3_BROWNOUT_DET_LVL=7 CONFIG_ESP32C3_TIME_SYSCALL_USE_RTC_SYSTIMER=y # CONFIG_ESP32C3_TIME_SYSCALL_USE_RTC is not set # CONFIG_ESP32C3_TIME_SYSCALL_USE_SYSTIMER is not set # CONFIG_ESP32C3_TIME_SYSCALL_USE_NONE is not set CONFIG_ESP32C3_RTC_CLK_SRC_INT_RC=y # CONFIG_ESP32C3_RTC_CLK_SRC_EXT_CRYS is not set # CONFIG_ESP32C3_RTC_CLK_SRC_EXT_OSC is not set # CONFIG_ESP32C3_RTC_CLK_SRC_INT_8MD256 is not set CONFIG_ESP32C3_RTC_CLK_CAL_CYCLES=1024 # CONFIG_ESP32C3_NO_BLOBS is not set CONFIG_ESP32C3_LIGHTSLEEP_GPIO_RESET_WORKAROUND=y # end of ESP32C3-Specific # # ADC-Calibration # # end of ADC-Calibration # # Common ESP-related # CONFIG_ESP_ERR_TO_NAME_LOOKUP=y # end of Common ESP-related # # Ethernet # CONFIG_ETH_ENABLED=y CONFIG_ETH_USE_SPI_ETHERNET=y # CONFIG_ETH_SPI_ETHERNET_DM9051 is not set # CONFIG_ETH_SPI_ETHERNET_W5500 is not set # CONFIG_ETH_SPI_ETHERNET_KSZ8851SNL is not set # CONFIG_ETH_USE_OPENETH is not set # end of Ethernet # # Event Loop Library # # CONFIG_ESP_EVENT_LOOP_PROFILING is not set CONFIG_ESP_EVENT_POST_FROM_ISR=y CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR=y # end of Event Loop Library # # GDB Stub # # end of GDB Stub # # ESP HTTP client # CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS=y # CONFIG_ESP_HTTP_CLIENT_ENABLE_BASIC_AUTH is not set CONFIG_ESP_HTTP_CLIENT_ENABLE_DIGEST_AUTH=y # end of ESP HTTP client # # HTTP Server # CONFIG_HTTPD_MAX_REQ_HDR_LEN=512 CONFIG_HTTPD_MAX_URI_LEN=512 CONFIG_HTTPD_ERR_RESP_NO_DELAY=y CONFIG_HTTPD_PURGE_BUF_LEN=32 # CONFIG_HTTPD_LOG_PURGE_DATA is not set # CONFIG_HTTPD_WS_SUPPORT is not set # end of HTTP Server # # ESP HTTPS OTA # # CONFIG_OTA_ALLOW_HTTP is not set # end of ESP HTTPS OTA # # ESP HTTPS server # # CONFIG_ESP_HTTPS_SERVER_ENABLE is not set # end of ESP HTTPS server # # Hardware Settings # # # MAC Config # CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_STA=y CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_AP=y CONFIG_ESP_MAC_ADDR_UNIVERSE_BT=y CONFIG_ESP_MAC_ADDR_UNIVERSE_ETH=y # CONFIG_ESP32C3_UNIVERSAL_MAC_ADDRESSES_TWO is not set CONFIG_ESP32C3_UNIVERSAL_MAC_ADDRESSES_FOUR=y CONFIG_ESP32C3_UNIVERSAL_MAC_ADDRESSES=4 # end of MAC Config # # Sleep Config # CONFIG_ESP_SLEEP_POWER_DOWN_FLASH=y # end of Sleep Config # end of Hardware Settings # # IPC (Inter-Processor Call) # CONFIG_ESP_IPC_TASK_STACK_SIZE=1024 # end of IPC (Inter-Processor Call) # # LCD and Touch Panel # # # LCD Peripheral Configuration # CONFIG_LCD_PERIPH_CLK_SRC_PLL160M=y # CONFIG_LCD_PERIPH_CLK_SRC_XTAL is not set CONFIG_LCD_PANEL_IO_FORMAT_BUF_SIZE=32 # end of LCD Peripheral Configuration # end of LCD and Touch Panel # # ESP NETIF Adapter # CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL=120 CONFIG_ESP_NETIF_TCPIP_LWIP=y # CONFIG_ESP_NETIF_LOOPBACK is not set CONFIG_ESP_NETIF_TCPIP_ADAPTER_COMPATIBLE_LAYER=y # end of ESP NETIF Adapter # # PHY # CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y # CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 CONFIG_ESP32_PHY_MAX_TX_POWER=20 # end of PHY # # Power Management # # CONFIG_PM_ENABLE is not set CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP=y # end of Power Management # # ESP System Settings # # CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT is not set CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y # CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set # CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set # CONFIG_ESP_SYSTEM_GDBSTUB_RUNTIME is not set CONFIG_ESP_SYSTEM_SINGLE_CORE_MODE=y CONFIG_ESP_SYSTEM_RTC_FAST_MEM_AS_HEAP_DEPCHECK=y CONFIG_ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP=y # CONFIG_ESP_SYSTEM_USE_EH_FRAME is not set # # Memory protection # CONFIG_ESP_SYSTEM_MEMPROT_FEATURE=y CONFIG_ESP_SYSTEM_MEMPROT_FEATURE_LOCK=y # end of Memory protection CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE=32 CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=3304 CONFIG_ESP_MAIN_TASK_STACK_SIZE=7584 CONFIG_ESP_MAIN_TASK_AFFINITY_CPU0=y # CONFIG_ESP_MAIN_TASK_AFFINITY_NO_AFFINITY is not set CONFIG_ESP_MAIN_TASK_AFFINITY=0x0 CONFIG_ESP_MINIMAL_SHARED_STACK_SIZE=3048 CONFIG_ESP_CONSOLE_UART_DEFAULT=y # CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG is not set # CONFIG_ESP_CONSOLE_UART_CUSTOM is not set # CONFIG_ESP_CONSOLE_NONE is not set CONFIG_ESP_CONSOLE_UART=y CONFIG_ESP_CONSOLE_UART_NUM=0 CONFIG_ESP_CONSOLE_UART_BAUDRATE=115200 CONFIG_ESP_INT_WDT=y CONFIG_ESP_INT_WDT_TIMEOUT_MS=300 CONFIG_ESP_TASK_WDT=y # CONFIG_ESP_TASK_WDT_PANIC is not set CONFIG_ESP_TASK_WDT_TIMEOUT_S=5 CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=y # CONFIG_ESP_PANIC_HANDLER_IRAM is not set # end of ESP System Settings # # High resolution timer (esp_timer) # # CONFIG_ESP_TIMER_PROFILING is not set CONFIG_ESP_TIME_FUNCS_USE_RTC_TIMER=y CONFIG_ESP_TIME_FUNCS_USE_ESP_TIMER=y CONFIG_ESP_TIMER_TASK_STACK_SIZE=3584 CONFIG_ESP_TIMER_INTERRUPT_LEVEL=1 # CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD is not set CONFIG_ESP_TIMER_IMPL_SYSTIMER=y # end of High resolution timer (esp_timer) # # Wi-Fi # CONFIG_ESP32_WIFI_ENABLED=y CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10 CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=32 # CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1 CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32 # CONFIG_ESP32_WIFI_CSI_ENABLED is not set CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y CONFIG_ESP32_WIFI_TX_BA_WIN=6 CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y CONFIG_ESP32_WIFI_RX_BA_WIN=6 CONFIG_ESP32_WIFI_NVS_ENABLED=y CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752 CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32 CONFIG_ESP32_WIFI_IRAM_OPT=y CONFIG_ESP32_WIFI_RX_IRAM_OPT=y CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE=y # CONFIG_ESP_WIFI_SLP_IRAM_OPT is not set # CONFIG_ESP_WIFI_FTM_ENABLE is not set # CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE is not set # end of Wi-Fi # # Core dump # # CONFIG_ESP_COREDUMP_ENABLE_TO_FLASH is not set # CONFIG_ESP_COREDUMP_ENABLE_TO_UART is not set CONFIG_ESP_COREDUMP_ENABLE_TO_NONE=y # end of Core dump # # FAT Filesystem support # # CONFIG_FATFS_CODEPAGE_DYNAMIC is not set CONFIG_FATFS_CODEPAGE_437=y # CONFIG_FATFS_CODEPAGE_720 is not set # CONFIG_FATFS_CODEPAGE_737 is not set # CONFIG_FATFS_CODEPAGE_771 is not set # CONFIG_FATFS_CODEPAGE_775 is not set # CONFIG_FATFS_CODEPAGE_850 is not set # CONFIG_FATFS_CODEPAGE_852 is not set # CONFIG_FATFS_CODEPAGE_855 is not set # CONFIG_FATFS_CODEPAGE_857 is not set # CONFIG_FATFS_CODEPAGE_860 is not set # CONFIG_FATFS_CODEPAGE_861 is not set # CONFIG_FATFS_CODEPAGE_862 is not set # CONFIG_FATFS_CODEPAGE_863 is not set # CONFIG_FATFS_CODEPAGE_864 is not set # CONFIG_FATFS_CODEPAGE_865 is not set # CONFIG_FATFS_CODEPAGE_866 is not set # CONFIG_FATFS_CODEPAGE_869 is not set # CONFIG_FATFS_CODEPAGE_932 is not set # CONFIG_FATFS_CODEPAGE_936 is not set # CONFIG_FATFS_CODEPAGE_949 is not set # CONFIG_FATFS_CODEPAGE_950 is not set CONFIG_FATFS_CODEPAGE=437 CONFIG_FATFS_LFN_NONE=y # CONFIG_FATFS_LFN_HEAP is not set # CONFIG_FATFS_LFN_STACK is not set CONFIG_FATFS_FS_LOCK=0 CONFIG_FATFS_TIMEOUT_MS=10000 CONFIG_FATFS_PER_FILE_CACHE=y # CONFIG_FATFS_USE_FASTSEEK is not set # end of FAT Filesystem support # # Modbus configuration # CONFIG_FMB_COMM_MODE_TCP_EN=y CONFIG_FMB_TCP_PORT_DEFAULT=502 CONFIG_FMB_TCP_PORT_MAX_CONN=5 CONFIG_FMB_TCP_CONNECTION_TOUT_SEC=20 CONFIG_FMB_COMM_MODE_RTU_EN=y CONFIG_FMB_COMM_MODE_ASCII_EN=y CONFIG_FMB_MASTER_TIMEOUT_MS_RESPOND=150 CONFIG_FMB_MASTER_DELAY_MS_CONVERT=200 CONFIG_FMB_QUEUE_LENGTH=20 CONFIG_FMB_PORT_TASK_STACK_SIZE=4096 CONFIG_FMB_SERIAL_BUF_SIZE=256 CONFIG_FMB_SERIAL_ASCII_BITS_PER_SYMB=8 CONFIG_FMB_SERIAL_ASCII_TIMEOUT_RESPOND_MS=1000 CONFIG_FMB_PORT_TASK_PRIO=10 CONFIG_FMB_PORT_TASK_AFFINITY=0x7FFFFFFF CONFIG_FMB_CONTROLLER_SLAVE_ID_SUPPORT=y CONFIG_FMB_CONTROLLER_SLAVE_ID=0x00112233 CONFIG_FMB_CONTROLLER_NOTIFY_TIMEOUT=20 CONFIG_FMB_CONTROLLER_NOTIFY_QUEUE_SIZE=20 CONFIG_FMB_CONTROLLER_STACK_SIZE=4096 CONFIG_FMB_EVENT_QUEUE_TIMEOUT=20 # CONFIG_FMB_TIMER_PORT_ENABLED is not set CONFIG_FMB_TIMER_GROUP=0 CONFIG_FMB_TIMER_INDEX=0 CONFIG_FMB_MASTER_TIMER_GROUP=0 CONFIG_FMB_MASTER_TIMER_INDEX=0 # CONFIG_FMB_TIMER_ISR_IN_IRAM is not set # end of Modbus configuration # # FreeRTOS # CONFIG_FREERTOS_UNICORE=y CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF CONFIG_FREERTOS_TICK_SUPPORT_SYSTIMER=y CONFIG_FREERTOS_CORETIMER_SYSTIMER_LVL1=y # CONFIG_FREERTOS_CORETIMER_SYSTIMER_LVL3 is not set CONFIG_FREERTOS_SYSTICK_USES_SYSTIMER=y CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y CONFIG_FREERTOS_HZ=100 CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION=y # CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set # CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y # CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 CONFIG_FREERTOS_ASSERT_FAIL_ABORT=y # CONFIG_FREERTOS_ASSERT_FAIL_PRINT_CONTINUE is not set # CONFIG_FREERTOS_ASSERT_DISABLE is not set CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1536 CONFIG_FREERTOS_ISR_STACKSIZE=1536 # CONFIG_FREERTOS_LEGACY_HOOKS is not set CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16 CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y # CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP is not set CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 # CONFIG_FREERTOS_USE_TRACE_FACILITY is not set # CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER=y CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y # CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set # CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH is not set CONFIG_FREERTOS_DEBUG_OCDAWARE=y # end of FreeRTOS # # Hardware Abstraction Layer (HAL) and Low Level (LL) # CONFIG_HAL_ASSERTION_EQUALS_SYSTEM=y # CONFIG_HAL_ASSERTION_DISABLE is not set # CONFIG_HAL_ASSERTION_SILIENT is not set # CONFIG_HAL_ASSERTION_ENABLE is not set CONFIG_HAL_DEFAULT_ASSERTION_LEVEL=2 # end of Hardware Abstraction Layer (HAL) and Low Level (LL) # # Heap memory debugging # CONFIG_HEAP_POISONING_DISABLED=y # CONFIG_HEAP_POISONING_LIGHT is not set # CONFIG_HEAP_POISONING_COMPREHENSIVE is not set CONFIG_HEAP_TRACING_OFF=y # CONFIG_HEAP_TRACING_STANDALONE is not set # CONFIG_HEAP_TRACING_TOHOST is not set # CONFIG_HEAP_ABORT_WHEN_ALLOCATION_FAILS is not set # end of Heap memory debugging # # jsmn # # CONFIG_JSMN_PARENT_LINKS is not set # CONFIG_JSMN_STRICT is not set # end of jsmn # # libsodium # # end of libsodium # # Log output # # CONFIG_LOG_DEFAULT_LEVEL_NONE is not set # CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set # CONFIG_LOG_DEFAULT_LEVEL_WARN is not set CONFIG_LOG_DEFAULT_LEVEL_INFO=y # CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set # CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set CONFIG_LOG_DEFAULT_LEVEL=3 CONFIG_LOG_MAXIMUM_EQUALS_DEFAULT=y # CONFIG_LOG_MAXIMUM_LEVEL_DEBUG is not set # CONFIG_LOG_MAXIMUM_LEVEL_VERBOSE is not set CONFIG_LOG_MAXIMUM_LEVEL=3 CONFIG_LOG_COLORS=y CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y # CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM is not set # end of Log output # # LWIP # CONFIG_LWIP_LOCAL_HOSTNAME="espressif" # CONFIG_LWIP_NETIF_API is not set CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y # CONFIG_LWIP_L2_TO_L3_COPY is not set # CONFIG_LWIP_IRAM_OPTIMIZATION is not set CONFIG_LWIP_TIMERS_ONDEMAND=y CONFIG_LWIP_MAX_SOCKETS=10 # CONFIG_LWIP_USE_ONLY_LWIP_SELECT is not set # CONFIG_LWIP_SO_LINGER is not set CONFIG_LWIP_SO_REUSE=y CONFIG_LWIP_SO_REUSE_RXTOALL=y # CONFIG_LWIP_SO_RCVBUF is not set # CONFIG_LWIP_NETBUF_RECVINFO is not set CONFIG_LWIP_IP4_FRAG=y CONFIG_LWIP_IP6_FRAG=y # CONFIG_LWIP_IP4_REASSEMBLY is not set # CONFIG_LWIP_IP6_REASSEMBLY is not set # CONFIG_LWIP_IP_FORWARD is not set # CONFIG_LWIP_STATS is not set # CONFIG_LWIP_ETHARP_TRUST_IP_MAC is not set CONFIG_LWIP_ESP_GRATUITOUS_ARP=y CONFIG_LWIP_GARP_TMR_INTERVAL=60 CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32 CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y # CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set # CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set # # DHCP server # CONFIG_LWIP_DHCPS=y CONFIG_LWIP_DHCPS_LEASE_UNIT=60 CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8 # end of DHCP server # CONFIG_LWIP_AUTOIP is not set CONFIG_LWIP_IPV6=y # CONFIG_LWIP_IPV6_AUTOCONFIG is not set CONFIG_LWIP_IPV6_NUM_ADDRESSES=3 # CONFIG_LWIP_IPV6_FORWARD is not set CONFIG_LWIP_IPV6_RDNSS_MAX_DNS_SERVERS=0 # CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set CONFIG_LWIP_NETIF_LOOPBACK=y CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 # # TCP # CONFIG_LWIP_MAX_ACTIVE_TCP=16 CONFIG_LWIP_MAX_LISTENING_TCP=16 CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y CONFIG_LWIP_TCP_MAXRTX=12 CONFIG_LWIP_TCP_SYNMAXRTX=12 CONFIG_LWIP_TCP_MSS=1440 CONFIG_LWIP_TCP_TMR_INTERVAL=250 CONFIG_LWIP_TCP_MSL=60000 CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744 CONFIG_LWIP_TCP_WND_DEFAULT=5744 CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 CONFIG_LWIP_TCP_QUEUE_OOSEQ=y # CONFIG_LWIP_TCP_SACK_OUT is not set # CONFIG_LWIP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES is not set CONFIG_LWIP_TCP_OVERSIZE_MSS=y # CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set # CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set CONFIG_LWIP_TCP_RTO_TIME=1500 # end of TCP # # UDP # CONFIG_LWIP_MAX_UDP_PCBS=16 CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 # end of UDP # # Checksums # # CONFIG_LWIP_CHECKSUM_CHECK_IP is not set # CONFIG_LWIP_CHECKSUM_CHECK_UDP is not set CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y # end of Checksums CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072 CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY=y # CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU0 is not set CONFIG_LWIP_TCPIP_TASK_AFFINITY=0x7FFFFFFF # CONFIG_LWIP_PPP_SUPPORT is not set CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3 CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 # CONFIG_LWIP_SLIP_SUPPORT is not set # # ICMP # CONFIG_LWIP_ICMP=y # CONFIG_LWIP_MULTICAST_PING is not set # CONFIG_LWIP_BROADCAST_PING is not set # end of ICMP # # LWIP RAW API # CONFIG_LWIP_MAX_RAW_PCBS=16 # end of LWIP RAW API # # SNTP # CONFIG_LWIP_DHCP_MAX_NTP_SERVERS=1 CONFIG_LWIP_SNTP_UPDATE_DELAY=3600000 # end of SNTP CONFIG_LWIP_ESP_LWIP_ASSERT=y # # Hooks # # CONFIG_LWIP_HOOK_TCP_ISN_NONE is not set CONFIG_LWIP_HOOK_TCP_ISN_DEFAULT=y # CONFIG_LWIP_HOOK_TCP_ISN_CUSTOM is not set CONFIG_LWIP_HOOK_IP6_ROUTE_NONE=y # CONFIG_LWIP_HOOK_IP6_ROUTE_DEFAULT is not set # CONFIG_LWIP_HOOK_IP6_ROUTE_CUSTOM is not set CONFIG_LWIP_HOOK_ND6_GET_GW_NONE=y # CONFIG_LWIP_HOOK_ND6_GET_GW_DEFAULT is not set # CONFIG_LWIP_HOOK_ND6_GET_GW_CUSTOM is not set CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_NONE=y # CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_DEFAULT is not set # CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_CUSTOM is not set # end of Hooks # CONFIG_LWIP_DEBUG is not set # end of LWIP # # mbedTLS # CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC=y # CONFIG_MBEDTLS_DEFAULT_MEM_ALLOC is not set # CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC is not set CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=y CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN=16384 CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096 # CONFIG_MBEDTLS_DYNAMIC_BUFFER is not set # CONFIG_MBEDTLS_DEBUG is not set # # Certificate Bundle # CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL=y # CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_CMN is not set # CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_NONE is not set # CONFIG_MBEDTLS_CUSTOM_CERTIFICATE_BUNDLE is not set # end of Certificate Bundle # CONFIG_MBEDTLS_ECP_RESTARTABLE is not set # CONFIG_MBEDTLS_CMAC_C is not set CONFIG_MBEDTLS_HARDWARE_AES=y CONFIG_MBEDTLS_AES_USE_INTERRUPT=y CONFIG_MBEDTLS_HARDWARE_MPI=y CONFIG_MBEDTLS_HARDWARE_SHA=y CONFIG_MBEDTLS_ROM_MD5=y # CONFIG_MBEDTLS_ATCA_HW_ECDSA_SIGN is not set # CONFIG_MBEDTLS_ATCA_HW_ECDSA_VERIFY is not set CONFIG_MBEDTLS_HAVE_TIME=y # CONFIG_MBEDTLS_HAVE_TIME_DATE is not set CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=y CONFIG_MBEDTLS_SHA512_C=y CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT=y # CONFIG_MBEDTLS_TLS_SERVER_ONLY is not set # CONFIG_MBEDTLS_TLS_CLIENT_ONLY is not set # CONFIG_MBEDTLS_TLS_DISABLED is not set CONFIG_MBEDTLS_TLS_SERVER=y CONFIG_MBEDTLS_TLS_CLIENT=y CONFIG_MBEDTLS_TLS_ENABLED=y # # TLS Key Exchange Methods # # CONFIG_MBEDTLS_PSK_MODES is not set CONFIG_MBEDTLS_KEY_EXCHANGE_RSA=y CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_RSA=y CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE=y CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA=y CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA=y CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA=y CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA=y # end of TLS Key Exchange Methods CONFIG_MBEDTLS_SSL_RENEGOTIATION=y # CONFIG_MBEDTLS_SSL_PROTO_SSL3 is not set CONFIG_MBEDTLS_SSL_PROTO_TLS1=y CONFIG_MBEDTLS_SSL_PROTO_TLS1_1=y CONFIG_MBEDTLS_SSL_PROTO_TLS1_2=y # CONFIG_MBEDTLS_SSL_PROTO_GMTSSL1_1 is not set # CONFIG_MBEDTLS_SSL_PROTO_DTLS is not set CONFIG_MBEDTLS_SSL_ALPN=y CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS=y CONFIG_MBEDTLS_X509_CHECK_KEY_USAGE=y CONFIG_MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE=y CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS=y # # Symmetric Ciphers # CONFIG_MBEDTLS_AES_C=y # CONFIG_MBEDTLS_CAMELLIA_C is not set # CONFIG_MBEDTLS_DES_C is not set CONFIG_MBEDTLS_RC4_DISABLED=y # CONFIG_MBEDTLS_RC4_ENABLED_NO_DEFAULT is not set # CONFIG_MBEDTLS_RC4_ENABLED is not set # CONFIG_MBEDTLS_BLOWFISH_C is not set # CONFIG_MBEDTLS_XTEA_C is not set CONFIG_MBEDTLS_CCM_C=y CONFIG_MBEDTLS_GCM_C=y # CONFIG_MBEDTLS_NIST_KW_C is not set # end of Symmetric Ciphers # CONFIG_MBEDTLS_RIPEMD160_C is not set # # Certificates # CONFIG_MBEDTLS_PEM_PARSE_C=y CONFIG_MBEDTLS_PEM_WRITE_C=y CONFIG_MBEDTLS_X509_CRL_PARSE_C=y CONFIG_MBEDTLS_X509_CSR_PARSE_C=y # end of Certificates CONFIG_MBEDTLS_ECP_C=y CONFIG_MBEDTLS_ECDH_C=y CONFIG_MBEDTLS_ECDSA_C=y # CONFIG_MBEDTLS_ECJPAKE_C is not set CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=y CONFIG_MBEDTLS_ECP_NIST_OPTIM=y # CONFIG_MBEDTLS_POLY1305_C is not set # CONFIG_MBEDTLS_CHACHA20_C is not set # CONFIG_MBEDTLS_HKDF_C is not set # CONFIG_MBEDTLS_THREADING_C is not set CONFIG_MBEDTLS_LARGE_KEY_SOFTWARE_MPI=y # CONFIG_MBEDTLS_SECURITY_RISKS is not set # end of mbedTLS # # mDNS # CONFIG_MDNS_MAX_SERVICES=10 CONFIG_MDNS_TASK_PRIORITY=1 CONFIG_MDNS_TASK_STACK_SIZE=4096 # CONFIG_MDNS_TASK_AFFINITY_NO_AFFINITY is not set CONFIG_MDNS_TASK_AFFINITY_CPU0=y CONFIG_MDNS_TASK_AFFINITY=0x0 CONFIG_MDNS_SERVICE_ADD_TIMEOUT_MS=2000 # CONFIG_MDNS_STRICT_MODE is not set CONFIG_MDNS_TIMER_PERIOD_MS=100 # CONFIG_MDNS_NETWORKING_SOCKET is not set # end of mDNS # # ESP-MQTT Configurations # CONFIG_MQTT_PROTOCOL_311=y CONFIG_MQTT_TRANSPORT_SSL=y CONFIG_MQTT_TRANSPORT_WEBSOCKET=y CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE=y # CONFIG_MQTT_MSG_ID_INCREMENTAL is not set # CONFIG_MQTT_SKIP_PUBLISH_IF_DISCONNECTED is not set # CONFIG_MQTT_REPORT_DELETED_MESSAGES is not set # CONFIG_MQTT_USE_CUSTOM_CONFIG is not set # CONFIG_MQTT_TASK_CORE_SELECTION_ENABLED is not set # CONFIG_MQTT_CUSTOM_OUTBOX is not set # end of ESP-MQTT Configurations # # Newlib # CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y # CONFIG_NEWLIB_STDOUT_LINE_ENDING_LF is not set # CONFIG_NEWLIB_STDOUT_LINE_ENDING_CR is not set # CONFIG_NEWLIB_STDIN_LINE_ENDING_CRLF is not set # CONFIG_NEWLIB_STDIN_LINE_ENDING_LF is not set CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y # CONFIG_NEWLIB_NANO_FORMAT is not set # end of Newlib # # NVS # # end of NVS # # OpenSSL # # CONFIG_OPENSSL_DEBUG is not set CONFIG_OPENSSL_ERROR_STACK=y # CONFIG_OPENSSL_ASSERT_DO_NOTHING is not set CONFIG_OPENSSL_ASSERT_EXIT=y # end of OpenSSL # # OpenThread # # CONFIG_OPENTHREAD_ENABLED is not set # end of OpenThread # # PThreads # CONFIG_PTHREAD_TASK_PRIO_DEFAULT=5 CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 CONFIG_PTHREAD_STACK_MIN=768 CONFIG_PTHREAD_TASK_CORE_DEFAULT=-1 CONFIG_PTHREAD_TASK_NAME_DEFAULT="pthread" # end of PThreads # # SPI Flash driver # # CONFIG_SPI_FLASH_VERIFY_WRITE is not set # CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y # CONFIG_SPI_FLASH_ROM_IMPL is not set CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS=y # CONFIG_SPI_FLASH_DANGEROUS_WRITE_FAILS is not set # CONFIG_SPI_FLASH_DANGEROUS_WRITE_ALLOWED is not set # CONFIG_SPI_FLASH_USE_LEGACY_IMPL is not set # CONFIG_SPI_FLASH_SHARE_SPI1_BUS is not set # CONFIG_SPI_FLASH_BYPASS_BLOCK_ERASE is not set CONFIG_SPI_FLASH_YIELD_DURING_ERASE=y CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS=20 CONFIG_SPI_FLASH_ERASE_YIELD_TICKS=1 # CONFIG_SPI_FLASH_AUTO_SUSPEND is not set CONFIG_SPI_FLASH_WRITE_CHUNK_SIZE=8192 # CONFIG_SPI_FLASH_SIZE_OVERRIDE is not set # CONFIG_SPI_FLASH_CHECK_ERASE_TIMEOUT_DISABLED is not set # CONFIG_SPI_FLASH_OVERRIDE_CHIP_DRIVER_LIST is not set # # Auto-detect flash chips # CONFIG_SPI_FLASH_SUPPORT_ISSI_CHIP=y CONFIG_SPI_FLASH_SUPPORT_MXIC_CHIP=y CONFIG_SPI_FLASH_SUPPORT_GD_CHIP=y CONFIG_SPI_FLASH_SUPPORT_WINBOND_CHIP=y CONFIG_SPI_FLASH_SUPPORT_BOYA_CHIP=y # end of Auto-detect flash chips CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE=y # end of SPI Flash driver # # SPIFFS Configuration # CONFIG_SPIFFS_MAX_PARTITIONS=3 # # SPIFFS Cache Configuration # CONFIG_SPIFFS_CACHE=y CONFIG_SPIFFS_CACHE_WR=y # CONFIG_SPIFFS_CACHE_STATS is not set # end of SPIFFS Cache Configuration CONFIG_SPIFFS_PAGE_CHECK=y CONFIG_SPIFFS_GC_MAX_RUNS=10 # CONFIG_SPIFFS_GC_STATS is not set CONFIG_SPIFFS_PAGE_SIZE=256 CONFIG_SPIFFS_OBJ_NAME_LEN=32 # CONFIG_SPIFFS_FOLLOW_SYMLINKS is not set CONFIG_SPIFFS_USE_MAGIC=y CONFIG_SPIFFS_USE_MAGIC_LENGTH=y CONFIG_SPIFFS_META_LENGTH=4 CONFIG_SPIFFS_USE_MTIME=y # # Debug Configuration # # CONFIG_SPIFFS_DBG is not set # CONFIG_SPIFFS_API_DBG is not set # CONFIG_SPIFFS_GC_DBG is not set # CONFIG_SPIFFS_CACHE_DBG is not set # CONFIG_SPIFFS_CHECK_DBG is not set # CONFIG_SPIFFS_TEST_VISUALISATION is not set # end of Debug Configuration # end of SPIFFS Configuration # # TCP Transport # # # Websocket # CONFIG_WS_TRANSPORT=y CONFIG_WS_BUFFER_SIZE=1024 # end of Websocket # end of TCP Transport # # Unity unit testing library # CONFIG_UNITY_ENABLE_FLOAT=y CONFIG_UNITY_ENABLE_DOUBLE=y # CONFIG_UNITY_ENABLE_64BIT is not set # CONFIG_UNITY_ENABLE_COLOR is not set CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER=y # CONFIG_UNITY_ENABLE_FIXTURE is not set # CONFIG_UNITY_ENABLE_BACKTRACE_ON_FAIL is not set # end of Unity unit testing library # # Virtual file system # CONFIG_VFS_SUPPORT_IO=y CONFIG_VFS_SUPPORT_DIR=y CONFIG_VFS_SUPPORT_SELECT=y CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT=y CONFIG_VFS_SUPPORT_TERMIOS=y # # Host File System I/O (Semihosting) # CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS=1 CONFIG_VFS_SEMIHOSTFS_HOST_PATH_MAX_LEN=128 # end of Host File System I/O (Semihosting) # end of Virtual file system # # Wear Levelling # # CONFIG_WL_SECTOR_SIZE_512 is not set CONFIG_WL_SECTOR_SIZE_4096=y CONFIG_WL_SECTOR_SIZE=4096 # end of Wear Levelling # # Wi-Fi Provisioning Manager # CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES=16 CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT=30 # end of Wi-Fi Provisioning Manager # # Supplicant # CONFIG_WPA_MBEDTLS_CRYPTO=y # CONFIG_WPA_WAPI_PSK is not set # CONFIG_WPA_DEBUG_PRINT is not set # CONFIG_WPA_TESTING_OPTIONS is not set # CONFIG_WPA_WPS_STRICT is not set # CONFIG_WPA_11KV_SUPPORT is not set # end of Supplicant # end of Component config # # Compatibility options # # CONFIG_LEGACY_INCLUDE_COMMON_HEADERS is not set # end of Compatibility options # Deprecated options for backward compatibility CONFIG_TOOLPREFIX="riscv32-esp-elf-" # CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set # CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set # CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set CONFIG_LOG_BOOTLOADER_LEVEL_INFO=y # CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set # CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set CONFIG_LOG_BOOTLOADER_LEVEL=3 # CONFIG_APP_ROLLBACK_ENABLE is not set # CONFIG_FLASH_ENCRYPTION_ENABLED is not set # CONFIG_FLASHMODE_QIO is not set # CONFIG_FLASHMODE_QOUT is not set CONFIG_FLASHMODE_DIO=y # CONFIG_FLASHMODE_DOUT is not set # CONFIG_MONITOR_BAUD_9600B is not set # CONFIG_MONITOR_BAUD_57600B is not set CONFIG_MONITOR_BAUD_115200B=y # CONFIG_MONITOR_BAUD_230400B is not set # CONFIG_MONITOR_BAUD_921600B is not set # CONFIG_MONITOR_BAUD_2MB is not set # CONFIG_MONITOR_BAUD_OTHER is not set CONFIG_MONITOR_BAUD_OTHER_VAL=115200 CONFIG_MONITOR_BAUD=115200 CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG=y # CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE is not set CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y # CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set # CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set CONFIG_OPTIMIZATION_ASSERTION_LEVEL=2 # CONFIG_CXX_EXCEPTIONS is not set CONFIG_STACK_CHECK_NONE=y # CONFIG_STACK_CHECK_NORM is not set # CONFIG_STACK_CHECK_STRONG is not set # CONFIG_STACK_CHECK_ALL is not set # CONFIG_WARN_WRITE_STRINGS is not set # CONFIG_DISABLE_GCC8_WARNINGS is not set # CONFIG_ESP32_APPTRACE_DEST_TRAX is not set CONFIG_ESP32_APPTRACE_DEST_NONE=y CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y CONFIG_BTDM_CONTROLLER_BLE_MAX_CONN_EFF=0 CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_ACL_CONN_EFF=0 CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_SYNC_CONN_EFF=0 CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE=0 CONFIG_ADC2_DISABLE_DAC=y # CONFIG_EVENT_LOOP_PROFILING is not set CONFIG_POST_EVENTS_FROM_ISR=y CONFIG_POST_EVENTS_FROM_IRAM_ISR=y CONFIG_ESP_SYSTEM_PD_FLASH=y CONFIG_IPC_TASK_STACK_SIZE=1024 CONFIG_ESP_SYSTEM_PM_POWER_DOWN_CPU=y # CONFIG_ESP32S2_PANIC_PRINT_HALT is not set CONFIG_ESP32S2_PANIC_PRINT_REBOOT=y # CONFIG_ESP32S2_PANIC_SILENT_REBOOT is not set # CONFIG_ESP32S2_PANIC_GDBSTUB is not set CONFIG_ESP32S2_ALLOW_RTC_FAST_MEM_AS_HEAP=y CONFIG_ESP32H2_MEMPROT_FEATURE=y CONFIG_ESP32H2_MEMPROT_FEATURE_LOCK=y CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=3304 CONFIG_MAIN_TASK_STACK_SIZE=7584 CONFIG_CONSOLE_UART_DEFAULT=y # CONFIG_CONSOLE_UART_CUSTOM is not set # CONFIG_ESP_CONSOLE_UART_NONE is not set CONFIG_CONSOLE_UART=y CONFIG_CONSOLE_UART_NUM=0 CONFIG_CONSOLE_UART_BAUDRATE=115200 CONFIG_INT_WDT=y CONFIG_INT_WDT_TIMEOUT_MS=300 CONFIG_TASK_WDT=y # CONFIG_TASK_WDT_PANIC is not set CONFIG_TASK_WDT_TIMEOUT_S=5 CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=y CONFIG_TIMER_TASK_STACK_SIZE=3584 # CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set # CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y CONFIG_MB_MASTER_TIMEOUT_MS_RESPOND=150 CONFIG_MB_MASTER_DELAY_MS_CONVERT=200 CONFIG_MB_QUEUE_LENGTH=20 CONFIG_MB_SERIAL_TASK_STACK_SIZE=4096 CONFIG_MB_SERIAL_BUF_SIZE=256 CONFIG_MB_SERIAL_TASK_PRIO=10 CONFIG_MB_CONTROLLER_SLAVE_ID_SUPPORT=y CONFIG_MB_CONTROLLER_SLAVE_ID=0x00112233 CONFIG_MB_CONTROLLER_NOTIFY_TIMEOUT=20 CONFIG_MB_CONTROLLER_NOTIFY_QUEUE_SIZE=20 CONFIG_MB_CONTROLLER_STACK_SIZE=4096 CONFIG_MB_EVENT_QUEUE_TIMEOUT=20 # CONFIG_MB_TIMER_PORT_ENABLED is not set CONFIG_MB_TIMER_GROUP=0 CONFIG_MB_TIMER_INDEX=0 # CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK is not set CONFIG_TIMER_TASK_PRIORITY=1 CONFIG_TIMER_TASK_STACK_DEPTH=2048 CONFIG_TIMER_QUEUE_LENGTH=10 # CONFIG_L2_TO_L3_COPY is not set # CONFIG_USE_ONLY_LWIP_SELECT is not set CONFIG_ESP_GRATUITOUS_ARP=y CONFIG_GARP_TMR_INTERVAL=60 CONFIG_TCPIP_RECVMBOX_SIZE=32 CONFIG_TCP_MAXRTX=12 CONFIG_TCP_SYNMAXRTX=12 CONFIG_TCP_MSS=1440 CONFIG_TCP_MSL=60000 CONFIG_TCP_SND_BUF_DEFAULT=5744 CONFIG_TCP_WND_DEFAULT=5744 CONFIG_TCP_RECVMBOX_SIZE=6 CONFIG_TCP_QUEUE_OOSEQ=y # CONFIG_ESP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES is not set CONFIG_TCP_OVERSIZE_MSS=y # CONFIG_TCP_OVERSIZE_QUARTER_MSS is not set # CONFIG_TCP_OVERSIZE_DISABLE is not set CONFIG_UDP_RECVMBOX_SIZE=6 CONFIG_TCPIP_TASK_STACK_SIZE=3072 CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY=y # CONFIG_TCPIP_TASK_AFFINITY_CPU0 is not set CONFIG_TCPIP_TASK_AFFINITY=0x7FFFFFFF # CONFIG_PPP_SUPPORT is not set CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT=5 CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 CONFIG_ESP32_PTHREAD_STACK_MIN=768 CONFIG_ESP32_PTHREAD_TASK_CORE_DEFAULT=-1 CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT="pthread" CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS=y # CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_FAILS is not set # CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ALLOWED is not set CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT=y CONFIG_SUPPORT_TERMIOS=y CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS=1 CONFIG_SEMIHOSTFS_HOST_PATH_MAX_LEN=128 # End of deprecated options libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-c3dev/sdkconfig.h000066400000000000000000000471101476025525100262350ustar00rootroot00000000000000/* * Automatically generated file. DO NOT EDIT. * Espressif IoT Development Framework (ESP-IDF) Configuration Header */ #pragma once #define CONFIG_IDF_CMAKE 1 #define CONFIG_IDF_TARGET "esp32" #define CONFIG_IDF_TARGET_ESP32 1 #define CONFIG_IDF_FIRMWARE_CHIP_ID 0x0000 #define CONFIG_SDK_TOOLPREFIX "xtensa-esp32-elf-" #define CONFIG_APP_BUILD_TYPE_APP_2NDBOOT 1 #define CONFIG_APP_BUILD_GENERATE_BINARIES 1 #define CONFIG_APP_BUILD_BOOTLOADER 1 #define CONFIG_APP_BUILD_USE_FLASH_SECTIONS 1 #define CONFIG_APP_COMPILE_TIME_DATE 1 #define CONFIG_APP_RETRIEVE_LEN_ELF_SHA 16 #define CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE 1 #define CONFIG_BOOTLOADER_LOG_LEVEL_INFO 1 #define CONFIG_BOOTLOADER_LOG_LEVEL 3 #define CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_9V 1 #define CONFIG_BOOTLOADER_WDT_ENABLE 1 #define CONFIG_BOOTLOADER_WDT_TIME_MS 9000 #define CONFIG_BOOTLOADER_RESERVE_RTC_SIZE 0x0 #define CONFIG_ESPTOOLPY_BAUD_OTHER_VAL 115200 #define CONFIG_ESPTOOLPY_FLASHMODE_DIO 1 #define CONFIG_ESPTOOLPY_FLASHMODE "dio" #define CONFIG_ESPTOOLPY_FLASHFREQ_26M 1 #define CONFIG_ESPTOOLPY_FLASHFREQ "26m" #define CONFIG_ESPTOOLPY_FLASHSIZE_2MB 1 #define CONFIG_ESPTOOLPY_FLASHSIZE "2MB" #define CONFIG_ESPTOOLPY_FLASHSIZE_DETECT 1 #define CONFIG_ESPTOOLPY_BEFORE_RESET 1 #define CONFIG_ESPTOOLPY_BEFORE "default_reset" #define CONFIG_ESPTOOLPY_AFTER_RESET 1 #define CONFIG_ESPTOOLPY_AFTER "hard_reset" #define CONFIG_ESPTOOLPY_MONITOR_BAUD_115200B 1 #define CONFIG_ESPTOOLPY_MONITOR_BAUD_OTHER_VAL 115200 #define CONFIG_ESPTOOLPY_MONITOR_BAUD 115200 #define CONFIG_PARTITION_TABLE_CUSTOM 1 #define CONFIG_PARTITION_TABLE_CUSTOM_FILENAME "partitions.csv" #define CONFIG_PARTITION_TABLE_FILENAME "partitions_singleapp.csv" #define CONFIG_PARTITION_TABLE_OFFSET 0x8000 #define CONFIG_PARTITION_TABLE_MD5 1 #define CONFIG_COMPILER_OPTIMIZATION_DEFAULT 1 #define CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE 1 #define CONFIG_COMPILER_STACK_CHECK_MODE_NONE 1 #define CONFIG_APPTRACE_DEST_NONE 1 #define CONFIG_APPTRACE_LOCK_ENABLE 1 #define CONFIG_BTDM_CTRL_BR_EDR_SCO_DATA_PATH_EFF 0 #define CONFIG_BTDM_CTRL_BLE_MAX_CONN_EFF 0 #define CONFIG_BTDM_CTRL_BR_EDR_MAX_ACL_CONN_EFF 0 #define CONFIG_BTDM_CTRL_BR_EDR_MAX_SYNC_CONN_EFF 0 #define CONFIG_BTDM_CTRL_PINNED_TO_CORE 0 #define CONFIG_BTDM_BLE_SLEEP_CLOCK_ACCURACY_INDEX_EFF 1 #define CONFIG_BT_RESERVE_DRAM 0x0 #define CONFIG_COAP_MBEDTLS_PSK 1 #define CONFIG_COAP_LOG_DEFAULT_LEVEL 0 #define CONFIG_ADC_DISABLE_DAC 1 #define CONFIG_SPI_MASTER_ISR_IN_IRAM 1 #define CONFIG_SPI_SLAVE_ISR_IN_IRAM 1 #define CONFIG_EFUSE_CODE_SCHEME_COMPAT_3_4 1 #define CONFIG_EFUSE_MAX_BLK_LEN 192 #define CONFIG_ESP_TLS_USING_MBEDTLS 1 #define CONFIG_ESP32_REV_MIN_0 1 #define CONFIG_ESP32_REV_MIN 0 #define CONFIG_ESP32_DPORT_WORKAROUND 1 #define CONFIG_ESP32_DEFAULT_CPU_FREQ_160 1 #define CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ 160 #define CONFIG_ESP32_TRACEMEM_RESERVE_DRAM 0x0 #define CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_FOUR 1 #define CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES 4 #define CONFIG_ESP32_ULP_COPROC_RESERVE_MEM 0 #define CONFIG_ESP32_DEBUG_OCDAWARE 1 #define CONFIG_ESP32_BROWNOUT_DET 1 #define CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_0 1 #define CONFIG_ESP32_BROWNOUT_DET_LVL 0 #define CONFIG_ESP32_REDUCE_PHY_TX_POWER 1 #define CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1 1 #define CONFIG_ESP32_RTC_CLK_SRC_INT_RC 1 #define CONFIG_ESP32_RTC_CLK_CAL_CYCLES 1024 #define CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY 2000 #define CONFIG_ESP32_XTAL_FREQ_26 1 #define CONFIG_ESP32_XTAL_FREQ 26 #define CONFIG_ESP32_DPORT_DIS_INTERRUPT_LVL 5 #define CONFIG_ADC_CAL_EFUSE_TP_ENABLE 1 #define CONFIG_ADC_CAL_EFUSE_VREF_ENABLE 1 #define CONFIG_ADC_CAL_LUT_ENABLE 1 #define CONFIG_ESP_ERR_TO_NAME_LOOKUP 1 #define CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE 32 #define CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE 2304 #define CONFIG_ESP_MAIN_TASK_STACK_SIZE 6584 #define CONFIG_ESP_IPC_TASK_STACK_SIZE 1024 #define CONFIG_ESP_IPC_USES_CALLERS_PRIORITY 1 #define CONFIG_ESP_MINIMAL_SHARED_STACK_SIZE 2048 #define CONFIG_ESP_CONSOLE_UART_DEFAULT 1 #define CONFIG_ESP_CONSOLE_UART_NUM 0 #define CONFIG_ESP_CONSOLE_UART_TX_GPIO 1 #define CONFIG_ESP_CONSOLE_UART_RX_GPIO 3 #define CONFIG_ESP_CONSOLE_UART_BAUDRATE 115200 #define CONFIG_ESP_INT_WDT 1 #define CONFIG_ESP_INT_WDT_TIMEOUT_MS 300 #define CONFIG_ESP_INT_WDT_CHECK_CPU1 1 #define CONFIG_ESP_TASK_WDT 1 #define CONFIG_ESP_TASK_WDT_TIMEOUT_S 5 #define CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0 1 #define CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1 1 #define CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_STA 1 #define CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_AP 1 #define CONFIG_ESP_MAC_ADDR_UNIVERSE_BT 1 #define CONFIG_ESP_MAC_ADDR_UNIVERSE_ETH 1 #define CONFIG_ETH_ENABLED 1 #define CONFIG_ETH_USE_ESP32_EMAC 1 #define CONFIG_ETH_PHY_INTERFACE_RMII 1 #define CONFIG_ETH_RMII_CLK_INPUT 1 #define CONFIG_ETH_RMII_CLK_IN_GPIO 0 #define CONFIG_ETH_DMA_BUFFER_SIZE 512 #define CONFIG_ETH_DMA_RX_BUFFER_NUM 10 #define CONFIG_ETH_DMA_TX_BUFFER_NUM 10 #define CONFIG_ETH_USE_SPI_ETHERNET 1 #define CONFIG_ESP_EVENT_POST_FROM_ISR 1 #define CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR 1 #define CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS 1 #define CONFIG_HTTPD_MAX_REQ_HDR_LEN 512 #define CONFIG_HTTPD_MAX_URI_LEN 512 #define CONFIG_HTTPD_ERR_RESP_NO_DELAY 1 #define CONFIG_HTTPD_PURGE_BUF_LEN 32 #define CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL 120 #define CONFIG_ESP_NETIF_TCPIP_LWIP 1 #define CONFIG_ESP_NETIF_TCPIP_ADAPTER_COMPATIBLE_LAYER 1 #define CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT 1 #define CONFIG_ESP_TIMER_TASK_STACK_SIZE 3584 #define CONFIG_ESP_TIMER_IMPL_TG0_LAC 1 #define CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM 10 #define CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM 32 #define CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER 1 #define CONFIG_ESP32_WIFI_TX_BUFFER_TYPE 1 #define CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM 32 #define CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED 1 #define CONFIG_ESP32_WIFI_TX_BA_WIN 6 #define CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED 1 #define CONFIG_ESP32_WIFI_RX_BA_WIN 6 #define CONFIG_ESP32_WIFI_NVS_ENABLED 1 #define CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0 1 #define CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN 752 #define CONFIG_ESP32_WIFI_MGMT_SBUF_NUM 32 #define CONFIG_ESP32_WIFI_IRAM_OPT 1 #define CONFIG_ESP32_WIFI_RX_IRAM_OPT 1 #define CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE 1 #define CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE 1 #define CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER 20 #define CONFIG_ESP32_PHY_MAX_TX_POWER 20 #define CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE 1 #define CONFIG_FATFS_CODEPAGE_437 1 #define CONFIG_FATFS_CODEPAGE 437 #define CONFIG_FATFS_LFN_NONE 1 #define CONFIG_FATFS_FS_LOCK 0 #define CONFIG_FATFS_TIMEOUT_MS 10000 #define CONFIG_FATFS_PER_FILE_CACHE 1 #define CONFIG_FMB_COMM_MODE_RTU_EN 1 #define CONFIG_FMB_COMM_MODE_ASCII_EN 1 #define CONFIG_FMB_MASTER_TIMEOUT_MS_RESPOND 150 #define CONFIG_FMB_MASTER_DELAY_MS_CONVERT 200 #define CONFIG_FMB_QUEUE_LENGTH 20 #define CONFIG_FMB_SERIAL_TASK_STACK_SIZE 2048 #define CONFIG_FMB_SERIAL_BUF_SIZE 256 #define CONFIG_FMB_SERIAL_ASCII_BITS_PER_SYMB 8 #define CONFIG_FMB_SERIAL_ASCII_TIMEOUT_RESPOND_MS 1000 #define CONFIG_FMB_SERIAL_TASK_PRIO 10 #define CONFIG_FMB_CONTROLLER_NOTIFY_TIMEOUT 20 #define CONFIG_FMB_CONTROLLER_NOTIFY_QUEUE_SIZE 20 #define CONFIG_FMB_CONTROLLER_STACK_SIZE 4096 #define CONFIG_FMB_EVENT_QUEUE_TIMEOUT 20 #define CONFIG_FMB_TIMER_PORT_ENABLED 1 #define CONFIG_FMB_TIMER_GROUP 0 #define CONFIG_FMB_TIMER_INDEX 0 #define CONFIG_FREERTOS_NO_AFFINITY 0x7FFFFFFF #define CONFIG_FREERTOS_CORETIMER_0 1 #define CONFIG_FREERTOS_HZ 100 #define CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION 1 #define CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY 1 #define CONFIG_FREERTOS_INTERRUPT_BACKTRACE 1 #define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1 #define CONFIG_FREERTOS_ASSERT_FAIL_ABORT 1 #define CONFIG_FREERTOS_IDLE_TASK_STACKSIZE 1536 #define CONFIG_FREERTOS_ISR_STACKSIZE 1536 #define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 16 #define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1 #define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048 #define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10 #define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0 #define CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER 1 #define CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER 1 #define CONFIG_FREERTOS_DEBUG_OCDAWARE 1 #define CONFIG_HEAP_POISONING_DISABLED 1 #define CONFIG_HEAP_TRACING_OFF 1 #define CONFIG_LOG_DEFAULT_LEVEL_INFO 1 #define CONFIG_LOG_DEFAULT_LEVEL 3 #define CONFIG_LOG_COLORS 1 #define CONFIG_LOG_TIMESTAMP_SOURCE_RTOS 1 #define CONFIG_LWIP_LOCAL_HOSTNAME "espressif" #define CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES 1 #define CONFIG_LWIP_TIMERS_ONDEMAND 1 #define CONFIG_LWIP_MAX_SOCKETS 10 #define CONFIG_LWIP_SO_REUSE 1 #define CONFIG_LWIP_SO_REUSE_RXTOALL 1 #define CONFIG_LWIP_IP_FRAG 1 #define CONFIG_LWIP_ESP_GRATUITOUS_ARP 1 #define CONFIG_LWIP_GARP_TMR_INTERVAL 60 #define CONFIG_LWIP_TCPIP_RECVMBOX_SIZE 32 #define CONFIG_LWIP_DHCP_DOES_ARP_CHECK 1 #define CONFIG_LWIP_DHCPS_LEASE_UNIT 60 #define CONFIG_LWIP_DHCPS_MAX_STATION_NUM 8 #define CONFIG_LWIP_NETIF_LOOPBACK 1 #define CONFIG_LWIP_LOOPBACK_MAX_PBUFS 8 #define CONFIG_LWIP_MAX_ACTIVE_TCP 16 #define CONFIG_LWIP_MAX_LISTENING_TCP 16 #define CONFIG_LWIP_TCP_MAXRTX 12 #define CONFIG_LWIP_TCP_SYNMAXRTX 6 #define CONFIG_LWIP_TCP_MSS 1440 #define CONFIG_LWIP_TCP_TMR_INTERVAL 250 #define CONFIG_LWIP_TCP_MSL 60000 #define CONFIG_LWIP_TCP_SND_BUF_DEFAULT 5744 #define CONFIG_LWIP_TCP_WND_DEFAULT 5744 #define CONFIG_LWIP_TCP_RECVMBOX_SIZE 6 #define CONFIG_LWIP_TCP_QUEUE_OOSEQ 1 #define CONFIG_LWIP_TCP_OVERSIZE_MSS 1 #define CONFIG_LWIP_MAX_UDP_PCBS 16 #define CONFIG_LWIP_UDP_RECVMBOX_SIZE 6 #define CONFIG_LWIP_TCPIP_TASK_STACK_SIZE 3072 #define CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY 1 #define CONFIG_LWIP_TCPIP_TASK_AFFINITY 0x7FFFFFFF #define CONFIG_LWIP_MAX_RAW_PCBS 16 #define CONFIG_LWIP_DHCP_MAX_NTP_SERVERS 1 #define CONFIG_LWIP_SNTP_UPDATE_DELAY 3600000 #define CONFIG_LWIP_ESP_LWIP_ASSERT 1 #define CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC 1 #define CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN 1 #define CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN 16384 #define CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN 4096 #define CONFIG_MBEDTLS_CERTIFICATE_BUNDLE 1 #define CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL 1 #define CONFIG_MBEDTLS_HARDWARE_AES 1 #define CONFIG_MBEDTLS_HARDWARE_MPI 1 #define CONFIG_MBEDTLS_HARDWARE_SHA 1 #define CONFIG_MBEDTLS_HAVE_TIME 1 #define CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT 1 #define CONFIG_MBEDTLS_TLS_SERVER 1 #define CONFIG_MBEDTLS_TLS_CLIENT 1 #define CONFIG_MBEDTLS_TLS_ENABLED 1 #define CONFIG_MBEDTLS_PSK_MODES 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_PSK 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_PSK 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_PSK 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_RSA_PSK 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_RSA 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_RSA 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA 1 #define CONFIG_MBEDTLS_SSL_RENEGOTIATION 1 #define CONFIG_MBEDTLS_SSL_PROTO_TLS1 1 #define CONFIG_MBEDTLS_SSL_PROTO_TLS1_1 1 #define CONFIG_MBEDTLS_SSL_PROTO_TLS1_2 1 #define CONFIG_MBEDTLS_SSL_PROTO_DTLS 1 #define CONFIG_MBEDTLS_SSL_ALPN 1 #define CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS 1 #define CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS 1 #define CONFIG_MBEDTLS_AES_C 1 #define CONFIG_MBEDTLS_RC4_DISABLED 1 #define CONFIG_MBEDTLS_CCM_C 1 #define CONFIG_MBEDTLS_GCM_C 1 #define CONFIG_MBEDTLS_PEM_PARSE_C 1 #define CONFIG_MBEDTLS_PEM_WRITE_C 1 #define CONFIG_MBEDTLS_X509_CRL_PARSE_C 1 #define CONFIG_MBEDTLS_X509_CSR_PARSE_C 1 #define CONFIG_MBEDTLS_ECP_C 1 #define CONFIG_MBEDTLS_ECDH_C 1 #define CONFIG_MBEDTLS_ECDSA_C 1 #define CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED 1 #define CONFIG_MBEDTLS_ECP_NIST_OPTIM 1 #define CONFIG_MDNS_MAX_SERVICES 10 #define CONFIG_MDNS_TASK_PRIORITY 1 #define CONFIG_MDNS_TASK_AFFINITY_CPU0 1 #define CONFIG_MDNS_TASK_AFFINITY 0x0 #define CONFIG_MDNS_SERVICE_ADD_TIMEOUT_MS 2000 #define CONFIG_MDNS_TIMER_PERIOD_MS 100 #define CONFIG_MQTT_PROTOCOL_311 1 #define CONFIG_MQTT_TRANSPORT_SSL 1 #define CONFIG_MQTT_TRANSPORT_WEBSOCKET 1 #define CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE 1 #define CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF 1 #define CONFIG_NEWLIB_STDIN_LINE_ENDING_CR 1 #define CONFIG_OPENSSL_ASSERT_EXIT 1 #define CONFIG_PTHREAD_TASK_PRIO_DEFAULT 5 #define CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT 3072 #define CONFIG_PTHREAD_STACK_MIN 768 #define CONFIG_PTHREAD_DEFAULT_CORE_NO_AFFINITY 1 #define CONFIG_PTHREAD_TASK_CORE_DEFAULT -1 #define CONFIG_PTHREAD_TASK_NAME_DEFAULT "pthread" #define CONFIG_SPI_FLASH_ROM_DRIVER_PATCH 1 #define CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS 1 #define CONFIG_SPI_FLASH_YIELD_DURING_ERASE 1 #define CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS 20 #define CONFIG_SPI_FLASH_ERASE_YIELD_TICKS 1 #define CONFIG_SPI_FLASH_SUPPORT_ISSI_CHIP 1 #define CONFIG_SPI_FLASH_SUPPORT_MXIC_CHIP 1 #define CONFIG_SPI_FLASH_SUPPORT_GD_CHIP 1 #define CONFIG_SPIFFS_MAX_PARTITIONS 3 #define CONFIG_SPIFFS_CACHE 1 #define CONFIG_SPIFFS_CACHE_WR 1 #define CONFIG_SPIFFS_PAGE_CHECK 1 #define CONFIG_SPIFFS_GC_MAX_RUNS 10 #define CONFIG_SPIFFS_PAGE_SIZE 256 #define CONFIG_SPIFFS_OBJ_NAME_LEN 32 #define CONFIG_SPIFFS_USE_MAGIC 1 #define CONFIG_SPIFFS_USE_MAGIC_LENGTH 1 #define CONFIG_SPIFFS_META_LENGTH 4 #define CONFIG_SPIFFS_USE_MTIME 1 #define CONFIG_USB_DESC_CUSTOM_VID 0x1234 #define CONFIG_USB_DESC_CUSTOM_PID 0x5678 #define CONFIG_UNITY_ENABLE_FLOAT 1 #define CONFIG_UNITY_ENABLE_DOUBLE 1 #define CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER 1 #define CONFIG_VFS_SUPPORT_IO 1 #define CONFIG_VFS_SUPPORT_DIR 1 #define CONFIG_VFS_SUPPORT_SELECT 1 #define CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT 1 #define CONFIG_VFS_SUPPORT_TERMIOS 1 #define CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS 1 #define CONFIG_VFS_SEMIHOSTFS_HOST_PATH_MAX_LEN 128 #define CONFIG_WL_SECTOR_SIZE_4096 1 #define CONFIG_WL_SECTOR_SIZE 4096 #define CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES 16 #define CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT 30 #define CONFIG_WPA_MBEDTLS_CRYPTO 1 /* List of deprecated options */ #define CONFIG_ADC2_DISABLE_DAC CONFIG_ADC_DISABLE_DAC #define CONFIG_BROWNOUT_DET CONFIG_ESP32_BROWNOUT_DET #define CONFIG_BROWNOUT_DET_LVL_SEL_0 CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_0 #define CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG CONFIG_COMPILER_OPTIMIZATION_DEFAULT #define CONFIG_CONSOLE_UART_BAUDRATE CONFIG_ESP_CONSOLE_UART_BAUDRATE #define CONFIG_CONSOLE_UART_DEFAULT CONFIG_ESP_CONSOLE_UART_DEFAULT #define CONFIG_CONSOLE_UART_RX_GPIO CONFIG_ESP_CONSOLE_UART_RX_GPIO #define CONFIG_CONSOLE_UART_TX_GPIO CONFIG_ESP_CONSOLE_UART_TX_GPIO #define CONFIG_ESP32S2_PANIC_PRINT_REBOOT CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT #define CONFIG_ESP32_APPTRACE_DEST_NONE CONFIG_APPTRACE_DEST_NONE #define CONFIG_ESP32_DEFAULT_PTHREAD_CORE_NO_AFFINITY CONFIG_PTHREAD_DEFAULT_CORE_NO_AFFINITY #define CONFIG_ESP32_PANIC_PRINT_REBOOT CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT #define CONFIG_ESP32_PTHREAD_STACK_MIN CONFIG_PTHREAD_STACK_MIN #define CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT CONFIG_PTHREAD_TASK_NAME_DEFAULT #define CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT CONFIG_PTHREAD_TASK_PRIO_DEFAULT #define CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT #define CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC CONFIG_ESP32_RTC_CLK_SRC_INT_RC #define CONFIG_ESP_GRATUITOUS_ARP CONFIG_LWIP_ESP_GRATUITOUS_ARP #define CONFIG_FLASHMODE_DIO CONFIG_ESPTOOLPY_FLASHMODE_DIO #define CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_FOUR #define CONFIG_GARP_TMR_INTERVAL CONFIG_LWIP_GARP_TMR_INTERVAL #define CONFIG_INT_WDT CONFIG_ESP_INT_WDT #define CONFIG_INT_WDT_CHECK_CPU1 CONFIG_ESP_INT_WDT_CHECK_CPU1 #define CONFIG_INT_WDT_TIMEOUT_MS CONFIG_ESP_INT_WDT_TIMEOUT_MS #define CONFIG_IPC_TASK_STACK_SIZE CONFIG_ESP_IPC_TASK_STACK_SIZE #define CONFIG_LOG_BOOTLOADER_LEVEL_INFO CONFIG_BOOTLOADER_LOG_LEVEL_INFO #define CONFIG_MAIN_TASK_STACK_SIZE CONFIG_ESP_MAIN_TASK_STACK_SIZE #define CONFIG_MB_CONTROLLER_NOTIFY_QUEUE_SIZE CONFIG_FMB_CONTROLLER_NOTIFY_QUEUE_SIZE #define CONFIG_MB_CONTROLLER_NOTIFY_TIMEOUT CONFIG_FMB_CONTROLLER_NOTIFY_TIMEOUT #define CONFIG_MB_CONTROLLER_STACK_SIZE CONFIG_FMB_CONTROLLER_STACK_SIZE #define CONFIG_MB_EVENT_QUEUE_TIMEOUT CONFIG_FMB_EVENT_QUEUE_TIMEOUT #define CONFIG_MB_MASTER_DELAY_MS_CONVERT CONFIG_FMB_MASTER_DELAY_MS_CONVERT #define CONFIG_MB_MASTER_TIMEOUT_MS_RESPOND CONFIG_FMB_MASTER_TIMEOUT_MS_RESPOND #define CONFIG_MB_QUEUE_LENGTH CONFIG_FMB_QUEUE_LENGTH #define CONFIG_MB_SERIAL_BUF_SIZE CONFIG_FMB_SERIAL_BUF_SIZE #define CONFIG_MB_SERIAL_TASK_PRIO CONFIG_FMB_SERIAL_TASK_PRIO #define CONFIG_MB_SERIAL_TASK_STACK_SIZE CONFIG_FMB_SERIAL_TASK_STACK_SIZE #define CONFIG_MB_TIMER_GROUP CONFIG_FMB_TIMER_GROUP #define CONFIG_MB_TIMER_INDEX CONFIG_FMB_TIMER_INDEX #define CONFIG_MB_TIMER_PORT_ENABLED CONFIG_FMB_TIMER_PORT_ENABLED #define CONFIG_MONITOR_BAUD_115200B CONFIG_ESPTOOLPY_MONITOR_BAUD_115200B #define CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE #define CONFIG_OPTIMIZATION_LEVEL_DEBUG CONFIG_COMPILER_OPTIMIZATION_DEFAULT #define CONFIG_POST_EVENTS_FROM_IRAM_ISR CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR #define CONFIG_POST_EVENTS_FROM_ISR CONFIG_ESP_EVENT_POST_FROM_ISR #define CONFIG_REDUCE_PHY_TX_POWER CONFIG_ESP32_REDUCE_PHY_TX_POWER #define CONFIG_SEMIHOSTFS_HOST_PATH_MAX_LEN CONFIG_VFS_SEMIHOSTFS_HOST_PATH_MAX_LEN #define CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS #define CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS #define CONFIG_STACK_CHECK_NONE CONFIG_COMPILER_STACK_CHECK_MODE_NONE #define CONFIG_SUPPORT_TERMIOS CONFIG_VFS_SUPPORT_TERMIOS #define CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT #define CONFIG_SYSTEM_EVENT_QUEUE_SIZE CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE #define CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE #define CONFIG_TASK_WDT CONFIG_ESP_TASK_WDT #define CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0 CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0 #define CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1 CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1 #define CONFIG_TASK_WDT_TIMEOUT_S CONFIG_ESP_TASK_WDT_TIMEOUT_S #define CONFIG_TCPIP_RECVMBOX_SIZE CONFIG_LWIP_TCPIP_RECVMBOX_SIZE #define CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY #define CONFIG_TCPIP_TASK_STACK_SIZE CONFIG_LWIP_TCPIP_TASK_STACK_SIZE #define CONFIG_TCP_MAXRTX CONFIG_LWIP_TCP_MAXRTX #define CONFIG_TCP_MSL CONFIG_LWIP_TCP_MSL #define CONFIG_TCP_MSS CONFIG_LWIP_TCP_MSS #define CONFIG_TCP_OVERSIZE_MSS CONFIG_LWIP_TCP_OVERSIZE_MSS #define CONFIG_TCP_QUEUE_OOSEQ CONFIG_LWIP_TCP_QUEUE_OOSEQ #define CONFIG_TCP_RECVMBOX_SIZE CONFIG_LWIP_TCP_RECVMBOX_SIZE #define CONFIG_TCP_SND_BUF_DEFAULT CONFIG_LWIP_TCP_SND_BUF_DEFAULT #define CONFIG_TCP_SYNMAXRTX CONFIG_LWIP_TCP_SYNMAXRTX #define CONFIG_TCP_WND_DEFAULT CONFIG_LWIP_TCP_WND_DEFAULT #define CONFIG_TIMER_QUEUE_LENGTH CONFIG_FREERTOS_TIMER_QUEUE_LENGTH #define CONFIG_TIMER_TASK_PRIORITY CONFIG_FREERTOS_TIMER_TASK_PRIORITY #define CONFIG_TIMER_TASK_STACK_DEPTH CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH #define CONFIG_TIMER_TASK_STACK_SIZE CONFIG_ESP_TIMER_TASK_STACK_SIZE #define CONFIG_TOOLPREFIX CONFIG_SDK_TOOLPREFIX #define CONFIG_UDP_RECVMBOX_SIZE CONFIG_LWIP_UDP_RECVMBOX_SIZE libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-heltec-wb32/000077500000000000000000000000001476025525100251255ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-heltec-wb32/CMakeLists.txt000066400000000000000000000021261476025525100276660ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) if (ESP_PLATFORM) include($ENV{IDF_PATH}/tools/cmake/project.cmake) project(lws-minimal-esp32 C) enable_testing() target_link_libraries(lws-minimal-esp32.elf websockets) option(LWS_WITH_DRIVERS "With generic drivers for gpio, i2c, display etc" ON) set(LWS_WITH_DRIVERS ON) option(LWS_WITH_SECURE_STREAMS "With secure streams" ON) set(LWS_WITH_SECURE_STREAMS ON) option(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY "static ssp" OFF) set(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY OFF) option(LWS_WITH_LWSAC "With lwsac" ON) set(LWS_WITH_LWSAC ON) option(LWS_WITH_STRUCT_JSON "With lws_struct JSON" ON) set(LWS_WITH_STRUCT_JSON ON) option(LWS_WITH_SYS_NTPCLIENT "With ntpclient" ON) set(LWS_WITH_SYS_NTPCLIENT ON) add_subdirectory(libwebsockets) add_test(NAME flashing COMMAND idf.py flash) set_tests_properties(flashing PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} TIMEOUT 120) add_test(NAME boot COMMAND /usr/local/bin/sai-expect) set_tests_properties(boot PROPERTIES DEPENDS flashing TIMEOUT 60) endif() libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-heltec-wb32/banded-img.h000066400000000000000000000141001476025525100272610ustar00rootroot000000000000000x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x40, 0x20, 0x20, 0x20, 0x20, 0x00, 0x40, 0xE0, 0x00, 0x80, 0xE0, 0x20, 0x20, 0x20, 0xE0, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0x00, 0x00, 0xE0, 0xE0, 0x00, 0x00, 0x80, 0x40, 0x20, 0x20, 0x20, 0x60, 0x80, 0x00, 0xE0, 0x40, 0x20, 0x20, 0x60, 0xC0, 0x00, 0x80, 0x40, 0x20, 0x20, 0x20, 0x60, 0x80, 0x00, 0xC0, 0x60, 0x20, 0x20, 0x20, 0xC0, 0x00, 0x80, 0xC0, 0x20, 0x20, 0x20, 0x40, 0xC0, 0x00, 0xE0, 0x00, 0x80, 0x80, 0x60, 0x00, 0x80, 0xC0, 0x20, 0x20, 0x20, 0x60, 0x80, 0x00, 0x00, 0x40, 0x60, 0x20, 0x00, 0xC0, 0x40, 0x20, 0x20, 0x20, 0xC0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x6F, 0x00, 0x34, 0x2F, 0x08, 0x08, 0x08, 0x0D, 0x07, 0x00, 0x0F, 0x00, 0x01, 0x0E, 0x0E, 0x01, 0x00, 0x0F, 0x08, 0x02, 0x0F, 0x09, 0x09, 0x19, 0x0F, 0x02, 0x00, 0x7F, 0x19, 0x08, 0x18, 0x08, 0x07, 0x01, 0x00, 0x0E, 0x09, 0x0B, 0x09, 0x0D, 0x04, 0x00, 0x07, 0x08, 0x08, 0x08, 0x08, 0x0F, 0x00, 0x03, 0x0E, 0x08, 0x18, 0x08, 0x0C, 0x04, 0x00, 0x7F, 0x02, 0x07, 0x08, 0x08, 0x00, 0x05, 0x0F, 0x0A, 0x11, 0x09, 0x0D, 0x06, 0x00, 0x08, 0x3F, 0x19, 0x08, 0x00, 0x06, 0x0A, 0x09, 0x09, 0x09, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, 0xF0, 0xF0, 0xF0, 0xF0, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF0, 0xF0, 0xF0, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xE0, 0xF0, 0xF0, 0xE0, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, 0xE0, 0xF0, 0xF0, 0xE0, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xC1, 0x87, 0x8F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x00, 0x00, 0x00, 0x80, 0x80, 0xC0, 0x83, 0x87, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x83, 0x80, 0x80, 0x80, 0x83, 0x07, 0x0F, 0x1F, 0x0F, 0x0F, 0x0F, 0x83, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0F, 0x0F, 0x0F, 0x0F, 0x8F, 0x87, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x10, 0x00, 0xBC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x28, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F, 0x7F, 0x3F, 0x3F, 0x00, 0x00, 0x1F, 0x3F, 0x7F, 0x7F, 0xFF, 0x7F, 0x7F, 0x3F, 0x0E, 0x00, 0x05, 0x3F, 0x7F, 0x7F, 0xFF, 0x7F, 0x7F, 0x7F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x3F, 0x7F, 0xFF, 0xFF, 0x7F, 0x7F, 0x3F, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3B, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xF8, 0xF8, 0xFC, 0xFC, 0xFC, 0xFC, 0xF8, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-heltec-wb32/main/000077500000000000000000000000001476025525100260515ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-heltec-wb32/main/CMakeLists.txt000066400000000000000000000004751476025525100306170ustar00rootroot00000000000000idf_component_register(SRCS lws-minimal-esp32.c devices.c INCLUDE_DIRS "../libwebsockets/include;${IDF_PATH}/components/spi_flash/include;${IDF_PATH}/components/nvs_flash/include;${IDF_PATH}/components/mdns/include") target_link_libraries(${COMPONENT_LIB} websockets) include_directories(../build/libwebsockets) libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-heltec-wb32/main/devices.c000066400000000000000000000101041476025525100276330ustar00rootroot00000000000000/* * devices for ESP32 Heltec WB32 * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #define LWIP_PROVIDE_ERRNO 1 #define _ESP_PLATFORM_ERRNO_H_ #include #include "sdkconfig.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include #include struct lws_led_state *lls; lws_display_state_t lds; struct lws_button_state *bcs; lws_netdev_instance_wifi_t *wnd; /* * Hook up bitbang i2c, display driver and display */ static void esp32_i2c_delay(void) { volatile int n = 0; while (n < 20) n++; } static const lws_bb_i2c_t li2c = { .bb_ops = lws_bb_i2c_ops, .scl = GPIO_NUM_15, .sda = GPIO_NUM_4, .gpio = &lws_gpio_plat, .delay = esp32_i2c_delay }; /* * Button controller */ static const lws_button_map_t bcm[] = { { .gpio = GPIO_NUM_0, .smd_interaction_name = "user" }, }; static const lws_button_controller_t bc = { .smd_bc_name = "bc", .gpio_ops = &lws_gpio_plat, .button_map = &bcm[0], .active_state_bitmap = 0, .count_buttons = LWS_ARRAY_SIZE(bcm), }; /* * pwm controller */ static const lws_pwm_map_t pwm_map[] = { { .gpio = GPIO_NUM_25, .index = 0, .active_level = 1 } }; static const lws_pwm_ops_t pwm_ops = { lws_pwm_plat_ops, .pwm_map = &pwm_map[0], .count_pwm_map = LWS_ARRAY_SIZE(pwm_map) }; static const lws_display_ssd1306_t disp = { .disp = { lws_display_ssd1306_ops, .w = 128, .h = 64 }, .i2c = (lws_i2c_ops_t *)&li2c, .gpio = &lws_gpio_plat, .reset_gpio = GPIO_NUM_16, .i2c7_address = SSD1306_I2C7_ADS1 }; /* * led controller */ static const lws_led_gpio_map_t lgm[] = { { .name = "alert", .gpio = GPIO_NUM_25, .pwm_ops = &pwm_ops, /* managed by pwm */ .active_level = 1, }, }; static const lws_led_gpio_controller_t lgc = { .led_ops = lws_led_gpio_ops, .gpio_ops = &lws_gpio_plat, .led_map = &lgm[0], .count_leds = LWS_ARRAY_SIZE(lgm) }; /* * Settings stored in platform nv */ static const lws_settings_ops_t sett = { lws_settings_ops_plat }; /* * Wifi */ static const lws_netdev_ops_t wifi_ops = { lws_netdev_wifi_plat_ops }; int init_plat_devices(struct lws_context *ctx) { lws_settings_instance_t *si; lws_netdevs_t *netdevs = lws_netdevs_from_ctx(ctx); si = lws_settings_init(&sett, (void *)"nvs"); if (!si) { lwsl_err("%s: failed to create settings instance\n", __func__); return 1; } netdevs->si = si; #if 0 /* * This is a temp hack to bootstrap the settings to contain the test * AP ssid and passphrase for one time, so the settings can be stored * while there's no UI atm */ { lws_wifi_creds_t creds; memset(&creds, 0, sizeof(creds)); lws_strncpy(creds.ssid, "xxx", sizeof(creds.ssid)); lws_strncpy(creds.passphrase, "yyy", sizeof(creds.passphrase)); lws_dll2_add_tail(&creds.list, &netdevs->owner_creds); if (lws_netdev_credentials_settings_set(netdevs)) { lwsl_err("%s: failed to write bootstrap creds\n", __func__); return 1; } } #endif /* create the wifi network device and configure it */ wnd = (lws_netdev_instance_wifi_t *) wifi_ops.create(ctx, &wifi_ops, "wl0", NULL); if (!wnd) { lwsl_err("%s: failed to create wifi object\n", __func__); return 1; } wnd->flags |= LNDIW_MODE_STA; if (wifi_ops.configure(&wnd->inst, NULL)) { lwsl_err("%s: failed to configure wifi object\n", __func__); return 1; } wifi_ops.up(&wnd->inst); lls = lgc.led_ops.create(&lgc.led_ops); if (!lls) { lwsl_err("%s: could not create led\n", __func__); return 1; } /* pwm init must go after the led controller init */ pwm_ops.init(&pwm_ops); bcs = lws_button_controller_create(ctx, &bc); if (!bcs) { lwsl_err("%s: could not create buttons\n", __func__); return 1; } /* * Show the lws logo on the display */ lws_display_state_init(&lds, ctx, 10000, 20000, lls, &disp.disp); lws_button_enable(bcs, 0, lws_button_get_bit(bcs, "user")); lws_led_transition(lls, "alert", &lws_pwmseq_static_off, &lws_pwmseq_static_on); return 0; } libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-heltec-wb32/main/lws-minimal-esp32.c000066400000000000000000000105701476025525100314030ustar00rootroot00000000000000/* * lws-minimal-esp32 * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * Based on espressif Public Domain sample */ #define LWIP_PROVIDE_ERRNO 1 #define _ESP_PLATFORM_ERRNO_H_ #include #include "sdkconfig.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include #include struct lws_context *context; extern struct lws_led_state *lls; extern lws_display_state_t lds; extern lws_netdev_instance_wifi_t *wnd; extern int init_plat_devices(struct lws_context *); static const uint8_t img[] = { #include "../banded-img.h" }; #include "policy.h" static uint8_t flip; typedef struct myss { struct lws_ss_handle *ss; void *opaque_data; /* ... application specific state ... */ size_t amount; } myss_t; static int myss_rx(void *userobj, const uint8_t *buf, size_t len, int flags) { myss_t *m = (myss_t *)userobj; lwsl_user("%s: len %d, flags: %d\n", __func__, (int)len, flags); // lwsl_hexdump_info(buf, len); m->amount += len; if (flags & LWSSS_FLAG_EOM) { /* * If we received the whole message, for our example it means * we are done. */ lwsl_notice("%s: received %u bytes\n", __func__, (unsigned int)m->amount); /* * In CI, we use sai-expect to look for this * string for success */ lwsl_notice("Completed: PASS\n"); } return 0; } static int myss_state(void *userobj, void *sh, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { myss_t *m = (myss_t *)userobj; lwsl_user("%s: %s, ord 0x%x\n", __func__, lws_ss_state_name(state), (unsigned int)ack); switch (state) { case LWSSSCS_CREATING: return lws_ss_client_connect(m->ss); break; default: break; } return 0; } static const lws_ss_info_t ssi = { .handle_offset = offsetof(myss_t, ss), .opaque_user_data_offset = offsetof(myss_t, opaque_data), .rx = myss_rx, .state = myss_state, .user_alloc = sizeof(myss_t), .streamtype = "test_stream", }; static const lws_led_sequence_def_t *seqs[] = { &lws_pwmseq_static_on, &lws_pwmseq_static_off, &lws_pwmseq_sine_endless_slow, &lws_pwmseq_sine_endless_fast, }; static int smd_cb(void *opaque, lws_smd_class_t _class, lws_usec_t timestamp, void *buf, size_t len) { if (!lws_json_simple_strcmp(buf, len, "\"src\":", "bc/user") && !lws_json_simple_strcmp(buf, len, "\"event\":", "click")) { lws_led_transition(lls, "alert", seqs[flip & 3], &lws_pwmseq_linear_wipe); flip++; } lwsl_hexdump_notice(buf, len); if ((_class & LWSSMDCL_SYSTEM_STATE) && !lws_json_simple_strcmp(buf, len, "\"state\":", "OPERATIONAL")) { /* create the secure stream */ lwsl_notice("%s: creating test secure stream\n", __func__); if (lws_ss_create(context, 0, &ssi, NULL, NULL, NULL, NULL)) { lwsl_err("%s: failed to create secure stream\n", __func__); return -1; } } if (_class & LWSSMDCL_INTERACTION) /* * Any kind of user interaction brings the display back up and * resets the dimming / blanking timers */ lws_display_state_active(&lds); return 0; } void app_main(void) { struct lws_context_creation_info *info; lws_set_log_level(1024 | 15, NULL); lws_netdev_plat_init(); lws_netdev_plat_wifi_init(); info = malloc(sizeof(*info)); if (!info) goto spin; memset(info, 0, sizeof(*info)); lwsl_notice("LWS test for Heltec WB32 ESP32 board\n"); info->pss_policies_json = ss_policy; info->options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info->port = CONTEXT_PORT_NO_LISTEN; info->early_smd_cb = smd_cb; info->early_smd_class_filter = LWSSMDCL_INTERACTION | LWSSMDCL_SYSTEM_STATE | LWSSMDCL_NETWORK; context = lws_create_context(info); if (!context) { lwsl_err("lws init failed\n"); return; } /* * We don't need this after context creation... things it pointed to * still need to exist though since the context copied the pointers. */ free(info); /* devices and init are in devices.c */ if (init_plat_devices(context)) goto spin; /* put the logo on the OLED display */ lds.disp->blit(lds.disp, img, 0, 0, 128, 64); lws_display_state_active(&lds); /* the lws event loop */ do { taskYIELD(); } while (lws_service(context, 0) >= 0); spin: vTaskDelay(10); taskYIELD(); goto spin; } libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-heltec-wb32/main/policy.h000066400000000000000000000073221476025525100275250ustar00rootroot00000000000000 static const char * const ss_policy = "{" "\"release\":" "\"01234567\"," "\"product\":" "\"myproduct\"," "\"schema-version\":" "1," "\"retry\": [" /* named backoff / retry strategies */ "{\"default\": {" "\"backoff\": [" "1000," "2000," "3000," "5000," "10000" "]," "\"conceal\":" "25," "\"jitterpc\":" "20," "\"svalidping\":" "30," "\"svalidhup\":" "35" "}}" "]," "\"certs\": [" /* named individual certificates in BASE64 DER */ /* * Let's Encrypt certs for warmcat.com / libwebsockets.org * * We fetch the real policy from there using SS and switch to * using that. */ "{\"isrg_root_x1\": \"" "MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw" "TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh" "cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4" "WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu" "ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY" "MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc" "h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+" "0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U" "A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW" "T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH" "B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC" "B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv" "KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn" "OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn" "jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw" "qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI" "rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV" "HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq" "hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL" "ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ" "3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK" "NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5" "ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur" "TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC" "jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc" "oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq" "4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA" "mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d" "emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=" "\"}" "]," "\"trust_stores\": [" /* named cert chains */ "{" "\"name\": \"le_via_isrg\"," "\"stack\": [" "\"isrg_root_x1\"" "]" "}" "]," "\"s\": [" "{\"test_stream\": {" "\"endpoint\":" "\"warmcat.com\"," "\"port\":" "443," "\"protocol\":" "\"h2\"," "\"http_method\":" "\"GET\"," "\"http_url\":" "\"index.html\"," "\"tls\":" "true," "\"opportunistic\":" "true," "\"retry\":" "\"default\"," "\"tls_trust_store\":" "\"le_via_isrg\"" "}},{" /* * "captive_portal_detect" describes * what to do in order to check if the path to * the Internet is being interrupted by a * captive portal. */ "\"captive_portal_detect\": {" "\"endpoint\":" "\"connectivitycheck.android.com\"," "\"http_url\":" "\"generate_204\"," "\"port\":" "80," "\"protocol\":" "\"h1\"," "\"http_method\":" "\"GET\"," "\"opportunistic\":" "true," "\"http_expect\":" "204," "\"http_fail_redirect\": true" "}}" "]}" ; libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-heltec-wb32/partitions.csv000066400000000000000000000003021476025525100300310ustar00rootroot00000000000000# ESP-IDF Partition Table # Name, Type, SubType, Offset, Size, Flags nvs, data, nvs, 0x9000, 0x6000, phy_init, data, phy, 0xf000, 0x1000, factory, app, factory, 0x10000, 2M, libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-heltec-wb32/scan/000077500000000000000000000000001476025525100260515ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-heltec-wb32/scan/output.bmp000066400000000000000000000022021476025525100301050ustar00rootroot00000000000000BM‚‚l€@''’’’’BGRs@@@’’’/'ĘaåĆLJą0dFb&dLHŃ"3 ,Fd((XVa $jSę3ČPn0š $)–4%X1#0li’$$hHŌc" 'ɛēĒĒĻ“6yš F€0 , šĄ0ĄųąüšüńžųžńžųüńžųüńžųüąüųšĄ|š €|Ą?€ž?ą?Įž?ą?€Įžš?ĄĮžßšĄĮ’ĻšĄĮžßš€Įž?ĻšĄĮžĻšĄĮžŸš?ĄĮžĻšĄĮžßš€ĮžĻšĄĮžš?€Ąž?ą?€?ĄxąĄ ĄĄ?ĄšĄųĄųĄü?€ų?€ų€ųšlibwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-heltec-wb32/scan/pic.h000066400000000000000000000140001476025525100267700ustar00rootroot000000000000000x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x27, 0xc6, 0x61, 0xe5, 0xc3, 0xc7, 0x87, 0x11, 0x1e, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0x46, 0x62, 0x26, 0x64, 0x4c, 0x48, 0xd1, 0x22, 0x33, 0x18, 0x00, 0x00, 0x00, 0x00, 0x20, 0x2c, 0x46, 0x64, 0x14, 0x28, 0x28, 0x58, 0x56, 0x61, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x20, 0x24, 0x6a, 0x53, 0xe6, 0x33, 0xc8, 0x50, 0x14, 0x6e, 0x30, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x24, 0x29, 0x96, 0x34, 0x25, 0x08, 0x58, 0x1c, 0x31, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x6c, 0x69, 0x92, 0x24, 0x24, 0x68, 0x48, 0xd4, 0x63, 0x22, 0x10, 0x00, 0x00, 0x00, 0x00, 0x20, 0x27, 0xc9, 0x9b, 0xe7, 0xc7, 0xc7, 0xcf, 0x93, 0x36, 0x79, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x46, 0x80, 0x00, 0x02, 0x10, 0x08, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x2c, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x03, 0xc0, 0x30, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf8, 0x07, 0xe0, 0xfc, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfc, 0x0f, 0xf1, 0xfe, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0x0f, 0xf1, 0xfe, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfc, 0x0f, 0xf1, 0xfe, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfc, 0x0f, 0xf1, 0xfe, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfc, 0x07, 0xe0, 0xfc, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x03, 0xc0, 0x7c, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x7c, 0x1f, 0x03, 0xc0, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x80, 0xfe, 0x3f, 0x8f, 0xe0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc1, 0xfe, 0x3f, 0x8f, 0xe0, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc1, 0xfe, 0x7f, 0x8f, 0xf0, 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc1, 0xfe, 0x7f, 0xdf, 0xf0, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc1, 0xff, 0x7f, 0xcf, 0xf0, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc1, 0xfe, 0x7f, 0xdf, 0xf0, 0x7f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc1, 0xfe, 0x3f, 0xcf, 0xf0, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc1, 0xfe, 0x7f, 0xcf, 0xf0, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc1, 0xfe, 0x7f, 0x9f, 0xf0, 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc1, 0xfe, 0x7f, 0xcf, 0xf0, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc1, 0xfe, 0x7f, 0xdf, 0xf0, 0x7f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc1, 0xfe, 0x7f, 0xcf, 0xf0, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc1, 0xfe, 0x7f, 0x8f, 0xf0, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc0, 0xfe, 0x3f, 0x8f, 0xe0, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x78, 0x1f, 0x07, 0xe0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc0, 0x00, 0x04, 0x01, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-heltec-wb32/scan/pic.h.1000066400000000000000000000137001476025525100271350ustar00rootroot000000000000000x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x2f, 0x27, 0xc6, 0x61, 0xe5, 0xc3, 0xc7, 0x87, 0x11, 0x1e, 0x18, 0xe0, 0x00, 0x00 0x00, 0x00, 0x30, 0x64, 0x46, 0x62, 0x26, 0x64, 0x4c, 0x48, 0xd1, 0x22, 0x33, 0x18, 0x00, 0x00 0x00, 0x00, 0x20, 0x2c, 0x46, 0x64, 0x14, 0x28, 0x28, 0x58, 0x56, 0x61, 0x02, 0x10, 0x00, 0x00 0x00, 0x00, 0x20, 0x24, 0x6a, 0x53, 0xe6, 0x33, 0xc8, 0x50, 0x14, 0x6e, 0x30, 0xf0, 0x00, 0x00 0x00, 0x00, 0x20, 0x24, 0x29, 0x96, 0x34, 0x25, 0x08, 0x58, 0x1c, 0x31, 0x23, 0x00, 0x00, 0x00 0x00, 0x00, 0x30, 0x6c, 0x69, 0x92, 0x24, 0x24, 0x68, 0x48, 0xd4, 0x63, 0x22, 0x10, 0x00, 0x00 0x00, 0x00, 0x20, 0x27, 0xc9, 0x9b, 0xe7, 0xc7, 0xc7, 0xcf, 0x93, 0x36, 0x79, 0xf0, 0x00, 0x00 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x46, 0x80, 0x00, 0x02, 0x10, 0x08, 0x30, 0x00, 0x00, 0x00 0x00, 0x00, 0x20, 0x2c, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x20, 0x00, 0x00, 0x00 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x03, 0xc0, 0x30, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x01, 0xf8, 0x07, 0xe0, 0xfc, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x01, 0xfc, 0x0f, 0xf1, 0xfe, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0x0f, 0xf1, 0xfe, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x03, 0xfc, 0x0f, 0xf1, 0xfe, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x01, 0xfc, 0x0f, 0xf1, 0xfe, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x01, 0xfc, 0x07, 0xe0, 0xfc, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x03, 0xc0, 0x7c, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x7c, 0x1f, 0x03, 0xc0, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x3f, 0x80, 0xfe, 0x3f, 0x8f, 0xe0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc1, 0xfe, 0x3f, 0x8f, 0xe0, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc1, 0xfe, 0x7f, 0x8f, 0xf0, 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc1, 0xfe, 0x7f, 0xdf, 0xf0, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc1, 0xff, 0x7f, 0xcf, 0xf0, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc1, 0xfe, 0x7f, 0xdf, 0xf0, 0x7f, 0x80, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc1, 0xfe, 0x3f, 0xcf, 0xf0, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc1, 0xfe, 0x7f, 0xcf, 0xf0, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc1, 0xfe, 0x7f, 0x9f, 0xf0, 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc1, 0xfe, 0x7f, 0xcf, 0xf0, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc1, 0xfe, 0x7f, 0xdf, 0xf0, 0x7f, 0x80, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc1, 0xfe, 0x7f, 0xcf, 0xf0, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc1, 0xfe, 0x7f, 0x8f, 0xf0, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc0, 0xfe, 0x3f, 0x8f, 0xe0, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x78, 0x1f, 0x07, 0xe0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc0, 0x00, 0x04, 0x01, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfc, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-heltec-wb32/scan/scan000077500000000000000000000461601476025525100267320ustar00rootroot00000000000000ELF>`@@šD@8 @@@@@@hhØØ@Ø@@@°°@@%% @ @PP.>@>@$( . >@ >@ŠŠÄÄ@Ä@DDPåtd,$,$@,$@<<QåtdRåtd.>@>@šš/lib64/ld-linux-x86-64.so.2GNU…ņNŃCžŻKk~;Kö=ÉĀtGNU !? libc.so.6putcharprintfmemset__libc_start_mainGLIBC_2.2.5__gmon_start__ui 3š?@ų?@@@ @@(@@óśHƒģH‹é/H…Ąt’ŠHƒÄĆ’5ā/’%ä/@’%ā/héą’’’’%Ś/h銒’’’%Ņ/h饒’’óś1ķI‰Ń^H‰āHƒäšPTIĒĄ@HĒĮ @HĒĒF@’b/ōóśĆf.„ø8@@H=8@@tøH…Ąt æ8@@’ąfĆff.„@¾8@@Hī8@@H‰šHĮī?HĮųHĘHŃžtøH…Ątæ8@@’ąĆff.„@óś€=/uUH‰åčz’’’Ę/]ƐĆff.„@óśėŠUH‰åHģ HĒEč @ĒEōH…ąū’’ŗ¾H‰Ēčמ’’é“ĒEüéšĒEų逋EųĮą‰Ā‹Eō ‹EüP…ĄHĀĮųČHcŠH‹EčHж¶Š‹Eü÷Ѓą‰ĮÓś‰Šƒą…Ąt9‹Uō‹EüŠH˜¶„ąū’’‰Ę‹Eųŗ‰ĮÓā‰Š ʉń‹Uō‹EüЉŹH˜ˆ”ąū’’ƒEųƒ}ųŽv’’’ƒEüƒ}üŽ\’’’ƒmō€}ō’Ž?’’’ĒEüė:‹EüH˜¶„ąū’’¶Ą‰Ęæ $@øč׿’’‹Eüƒąƒųu æ č²ż’’ƒEü}ü’~½øÉĆf.„@óśAWL=c+AVI‰ÖAUI‰õATA‰üUH-T+SL)żHƒģč/ż’’HĮżt1Ū€L‰ņL‰īD‰ēA’ßHƒĆH9ŻuźHƒÄ[]A\A]A^A_Ćff.„óśĆóśHƒģHƒÄĆ/'ĘaåĆLJą0dFb&dLHŃ"3 ,Fd((XVa $jSę3ČPn0š $)–4%X1#0li’$$hHŌc" 'ɛēĒĒĻ“6yš F€0 , šĄ0ĄųąüšüńžųžńžųüńžųüńžųüąüųšĄ|š €|Ą?€ž?ą?Įž?ą?€Įžš?ĄĮžßšĄĮ’ĻšĄĮžßš€Įž?ĻšĄĮžĻšĄĮžŸš?ĄĮžĻšĄĮžßš€ĮžĻšĄĮžš?€Ąž?ą?€?ĄxąĄ ĄĄ?ĄšĄųĄųĄü?€ų?€ų€ųš0x%02X, ;8ōė’’|4ģ’’Tdģ’’hķ’’¤tī’’Ääī’’ zRx Ųė’’/D0ōė’’$Dpė’’@FJ w€?;*3$"lnģ’’LA†C G DŒØķ’’eFIŽE E(ŒD0†H8ƒG@n8A0A(B BBBŌŠķ’’@@@ @ @>@>@õž’o@ø@(@ N @@Hh@8@0 ž’’o@’’’oš’’o@ >@6@F@V@GCC: (GNU) 10.0.1 20200311 (Red Hat 10.0.1-0.9)GCC: (GNU) 10.1.1 20200507 (Red Hat 10.1.1-1) GA$3h906`@`@ GA$3c906`@`@ GA$3s906`@`@ GA$3e906`@`@ GA$3h906`@`@ GA$3c906`@`@ GA$3s906`@`@ GA$3e906`@`@GA$3a1`@@GA$3a1@@ GA$3p906@@ GA$running gcc 10.0.1 20200311 GA$annobin gcc 10.0.1 20200311 GA*GOW*EGA*GA+stack_clashGA*cf_protection GA*FORTIFY’GA+GLIBCXX_ASSERTIONSGA*GA!GA+omit_frame_pointer GA* GA!stack_realign GA$3p906@•@ GA$running gcc 10.0.1 20200311 GA$annobin gcc 10.0.1 20200311 GA*GOW*EGA*GA+stack_clashGA*cf_protection GA*FORTIFY’GA+GLIBCXX_ASSERTIONSGA*GA!GA+omit_frame_pointer GA* GA!stack_realign GA*FORTIFY’GA+GLIBCXX_ASSERTIONSGA$3a1•@•@GA$3a1@@GA$3a1@ @GA$3a1 @F@GA$3a1 @@GA$3a1@@GA$3a1@@GA$3a1@@GA$3a1 @%@Ø@Ä@č@@(@ø@@@ 8@ h@ @ @ `@@ @,$@h$@>@>@ >@š?@@@0@@4@@8`@ń’> @N @b `@v `@Ž `@§ `@Ä `@Ü `@ų `@  `@& @> •@Z `@v `@– `@· `@Ü `@ü `@  `@= `@^ @… •@Ŗń’µ  @· Š@Ź @ą4@@ģ>@ @@>@>ń’E @Ŗń’JL%@ń’X>@i >@r>@…,$@˜@@® @¾# 0@@Ó4@@ø@Śī!0@@. = @J @Y  @eU8@@i @' `@/4@@ F@L’8@@c @/usr/lib/gcc/x86_64-redhat-linux/10/../../../../lib64/crt1.o.annobin_init.c.annobin_init.c_end.annobin_init.c.hot.annobin_init.c_end.hot.annobin_init.c.unlikely.annobin_init.c_end.unlikely.annobin_init.c.startup.annobin_init.c_end.startup.annobin_init.c.exit.annobin_init.c_end.exit.annobin_static_reloc.c.annobin_static_reloc.c_end.annobin_static_reloc.c.hot.annobin_static_reloc.c_end.hot.annobin_static_reloc.c.unlikely.annobin_static_reloc.c_end.unlikely.annobin_static_reloc.c.startup.annobin_static_reloc.c_end.startup.annobin_static_reloc.c.exit.annobin_static_reloc.c_end.exit.annobin__dl_relocate_static_pie.start.annobin__dl_relocate_static_pie.endcrtstuff.cderegister_tm_clones__do_global_dtors_auxcompleted.0__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entryscan.cscan__FRAME_END____init_array_end_DYNAMIC__init_array_start__GNU_EH_FRAME_HDR_GLOBAL_OFFSET_TABLE___libc_csu_finiputchar@@GLIBC_2.2.5_edataprintf@@GLIBC_2.2.5memset@@GLIBC_2.2.5__libc_start_main@@GLIBC_2.2.5__data_start__gmon_start____dso_handle_IO_stdin_used__libc_csu_init_dl_relocate_static_pie__bss_startmain__TMC_END__.symtab.strtab.shstrtab.interp.note.gnu.build-id.note.ABI-tag.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.dynamic.got.got.plt.data.bss.comment.gnu.build.attributesØ@Ø#Ä@Ä$6č@č Dö’’o@N (@(Vø@øN^’’’o@ kž’’o@ z8@80„Bh@hHŽ@‰ @ @”`@`µš@   @ ) Ø,$@,$<¶h$@h$čĄ>@.Ģ>@.Ų >@ .Šįš?@š/ę@@00ļ0@@00õ4@@40ś040^8`@”0dų6@D 8?žÖClibwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-heltec-wb32/scan/scan.c000066400000000000000000000030661476025525100271460ustar00rootroot00000000000000#include #include #include #include /* * The bitmap mapping for the framebuffer is from top left to right, a strip of 8 vertical * bits from each byte, so there is a block of 128 x 8 px on a stride of 128 bytes. * * The 8 bits from the first byte in the fb are the leftmost vertical strip of 8, then the * next byte is the 8 pixels one to the right, until the 127th byte if the vertical strip * of 8 on the rhs. * * +----------------------------------+ * |0 | * |1 | * |2 | * |3 | * |4 | * |5 | * |6 | * |7 | * * In this way the fb is more like (8 x vertical (128 x 8)) * */ static const uint8_t scan[] = { #include "pic.h" }; /* * input byte 0 is like ABCDEFGH, one bit per horizontal pixel for one line * on an hstride of 16 bytes * * output byte 0 = b0 = byte 0 b0, b1 = byte16 b0, b2 = byte24 b0 etc * * px(0,0) --> byte0 b0 * px(0,1) --> byte0 b1 */ int main(void) { const uint8_t *p = scan; uint8_t r[1024]; int x, y, t = 0; memset(&r, 0, sizeof(r)); while (t < 1024) { for (x = 0; x < 128; x++) { for (y = 0; y < 8; y++) { if (p[t + (16 * y) + (x / 8)] & (1 << (7 - (x & 7)))) r[t + x] |= 1 << y; } } t += 128; } for (x = 0; x < 1024; x++) { printf("0x%02X, ", r[x]); if ((x & 0xf) == 0xf) printf("\n"); } } libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-heltec-wb32/scan/scan.sh000077500000000000000000000004461476025525100273400ustar00rootroot00000000000000#!/bin/bash convert -size 128x64 /tmp/128x64.png -monochrome output.bmp dd if=output.bmp bs=1 skip=130 | hexdump -Cv | tr -s ' ' | cut -d' ' -f2-17 | grep ' ' | sed "s/^/0x/g" | sed "s/\ /,\ 0x/g" > pic.h.1 cat pic.h.1 | sed "s/\$/,/g" > pic.h gcc -o scan scan.c && ./scan > ../banded-img.h libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-heltec-wb32/sdkconfig000066400000000000000000001004641476025525100270240ustar00rootroot00000000000000# # Automatically generated file. DO NOT EDIT. # Espressif IoT Development Framework (ESP-IDF) Project Configuration # CONFIG_IDF_CMAKE=y CONFIG_IDF_TARGET="esp32" CONFIG_IDF_TARGET_ESP32=y CONFIG_IDF_FIRMWARE_CHIP_ID=0x0000 # # SDK tool configuration # CONFIG_SDK_TOOLPREFIX="xtensa-esp32-elf-" # CONFIG_SDK_TOOLCHAIN_SUPPORTS_TIME_WIDE_64_BITS is not set # end of SDK tool configuration # # Build type # CONFIG_APP_BUILD_TYPE_APP_2NDBOOT=y # CONFIG_APP_BUILD_TYPE_ELF_RAM is not set CONFIG_APP_BUILD_GENERATE_BINARIES=y CONFIG_APP_BUILD_BOOTLOADER=y CONFIG_APP_BUILD_USE_FLASH_SECTIONS=y # end of Build type # # Application manager # CONFIG_APP_COMPILE_TIME_DATE=y # CONFIG_APP_EXCLUDE_PROJECT_VER_VAR is not set # CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR is not set # CONFIG_APP_PROJECT_VER_FROM_CONFIG is not set CONFIG_APP_RETRIEVE_LEN_ELF_SHA=16 # end of Application manager # # Bootloader config # CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y # CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG is not set # CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_PERF is not set # CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_NONE is not set # CONFIG_BOOTLOADER_LOG_LEVEL_NONE is not set # CONFIG_BOOTLOADER_LOG_LEVEL_ERROR is not set # CONFIG_BOOTLOADER_LOG_LEVEL_WARN is not set CONFIG_BOOTLOADER_LOG_LEVEL_INFO=y # CONFIG_BOOTLOADER_LOG_LEVEL_DEBUG is not set # CONFIG_BOOTLOADER_LOG_LEVEL_VERBOSE is not set CONFIG_BOOTLOADER_LOG_LEVEL=3 # CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_8V is not set CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_9V=y # CONFIG_BOOTLOADER_FACTORY_RESET is not set # CONFIG_BOOTLOADER_APP_TEST is not set CONFIG_BOOTLOADER_WDT_ENABLE=y # CONFIG_BOOTLOADER_WDT_DISABLE_IN_USER_CODE is not set CONFIG_BOOTLOADER_WDT_TIME_MS=9000 # CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE is not set # CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP is not set CONFIG_BOOTLOADER_RESERVE_RTC_SIZE=0 # CONFIG_BOOTLOADER_CUSTOM_RESERVE_RTC is not set # end of Bootloader config # # Security features # # CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT is not set # CONFIG_SECURE_BOOT is not set # CONFIG_SECURE_FLASH_ENC_ENABLED is not set # end of Security features # # Serial flasher config # CONFIG_ESPTOOLPY_BAUD_OTHER_VAL=115200 # CONFIG_ESPTOOLPY_FLASHMODE_QIO is not set # CONFIG_ESPTOOLPY_FLASHMODE_QOUT is not set CONFIG_ESPTOOLPY_FLASHMODE_DIO=y # CONFIG_ESPTOOLPY_FLASHMODE_DOUT is not set CONFIG_ESPTOOLPY_FLASHMODE="dio" # CONFIG_ESPTOOLPY_FLASHFREQ_80M is not set # CONFIG_ESPTOOLPY_FLASHFREQ_40M is not set CONFIG_ESPTOOLPY_FLASHFREQ_26M=y # CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set CONFIG_ESPTOOLPY_FLASHFREQ="26m" # CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set # CONFIG_ESPTOOLPY_FLASHSIZE_2MB=y CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y # CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set # CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set CONFIG_ESPTOOLPY_FLASHSIZE="4MB" CONFIG_ESPTOOLPY_FLASHSIZE_DETECT=y CONFIG_ESPTOOLPY_BEFORE_RESET=y # CONFIG_ESPTOOLPY_BEFORE_NORESET is not set CONFIG_ESPTOOLPY_BEFORE="default_reset" CONFIG_ESPTOOLPY_AFTER_RESET=y # CONFIG_ESPTOOLPY_AFTER_NORESET is not set CONFIG_ESPTOOLPY_AFTER="hard_reset" # CONFIG_ESPTOOLPY_MONITOR_BAUD_9600B is not set # CONFIG_ESPTOOLPY_MONITOR_BAUD_57600B is not set CONFIG_ESPTOOLPY_MONITOR_BAUD_115200B=y # CONFIG_ESPTOOLPY_MONITOR_BAUD_230400B is not set # CONFIG_ESPTOOLPY_MONITOR_BAUD_921600B is not set # CONFIG_ESPTOOLPY_MONITOR_BAUD_2MB is not set # CONFIG_ESPTOOLPY_MONITOR_BAUD_OTHER is not set CONFIG_ESPTOOLPY_MONITOR_BAUD_OTHER_VAL=115200 CONFIG_ESPTOOLPY_MONITOR_BAUD=115200 # end of Serial flasher config # # Partition Table # # CONFIG_PARTITION_TABLE_SINGLE_APP is not set # CONFIG_PARTITION_TABLE_TWO_OTA is not set CONFIG_PARTITION_TABLE_CUSTOM=y CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv" CONFIG_PARTITION_TABLE_FILENAME="partitions_singleapp.csv" CONFIG_PARTITION_TABLE_OFFSET=0x8000 CONFIG_PARTITION_TABLE_MD5=y # end of Partition Table # # Compiler options # CONFIG_COMPILER_OPTIMIZATION_DEFAULT=y # CONFIG_COMPILER_OPTIMIZATION_SIZE is not set # CONFIG_COMPILER_OPTIMIZATION_PERF is not set # CONFIG_COMPILER_OPTIMIZATION_NONE is not set CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y # CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set # CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE is not set # CONFIG_COMPILER_CXX_EXCEPTIONS is not set # CONFIG_COMPILER_CXX_RTTI is not set CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y # CONFIG_COMPILER_STACK_CHECK_MODE_NORM is not set # CONFIG_COMPILER_STACK_CHECK_MODE_STRONG is not set # CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set # CONFIG_COMPILER_WARN_WRITE_STRINGS is not set # CONFIG_COMPILER_DISABLE_GCC8_WARNINGS is not set # end of Compiler options # # Component config # # # Application Level Tracing # # CONFIG_APPTRACE_DEST_TRAX is not set CONFIG_APPTRACE_DEST_NONE=y CONFIG_APPTRACE_LOCK_ENABLE=y # end of Application Level Tracing # # Bluetooth # # CONFIG_BT_ENABLED is not set CONFIG_BTDM_CTRL_BR_EDR_SCO_DATA_PATH_EFF=0 CONFIG_BTDM_CTRL_BLE_MAX_CONN_EFF=0 CONFIG_BTDM_CTRL_BR_EDR_MAX_ACL_CONN_EFF=0 CONFIG_BTDM_CTRL_BR_EDR_MAX_SYNC_CONN_EFF=0 CONFIG_BTDM_CTRL_PINNED_TO_CORE=0 CONFIG_BTDM_BLE_SLEEP_CLOCK_ACCURACY_INDEX_EFF=1 CONFIG_BT_RESERVE_DRAM=0 # end of Bluetooth # # CoAP Configuration # CONFIG_COAP_MBEDTLS_PSK=y # CONFIG_COAP_MBEDTLS_PKI is not set # CONFIG_COAP_MBEDTLS_DEBUG is not set CONFIG_COAP_LOG_DEFAULT_LEVEL=0 # end of CoAP Configuration # # Driver configurations # # # ADC configuration # # CONFIG_ADC_FORCE_XPD_FSM is not set CONFIG_ADC_DISABLE_DAC=y # end of ADC configuration # # SPI configuration # # CONFIG_SPI_MASTER_IN_IRAM is not set CONFIG_SPI_MASTER_ISR_IN_IRAM=y # CONFIG_SPI_SLAVE_IN_IRAM is not set CONFIG_SPI_SLAVE_ISR_IN_IRAM=y # end of SPI configuration # # UART configuration # # CONFIG_UART_ISR_IN_IRAM is not set # end of UART configuration # # RTCIO configuration # # CONFIG_RTCIO_SUPPORT_RTC_GPIO_DESC is not set # end of RTCIO configuration # end of Driver configurations # # eFuse Bit Manager # # CONFIG_EFUSE_CUSTOM_TABLE is not set # CONFIG_EFUSE_VIRTUAL is not set # CONFIG_EFUSE_CODE_SCHEME_COMPAT_NONE is not set CONFIG_EFUSE_CODE_SCHEME_COMPAT_3_4=y # CONFIG_EFUSE_CODE_SCHEME_COMPAT_REPEAT is not set CONFIG_EFUSE_MAX_BLK_LEN=192 # end of eFuse Bit Manager # # ESP-TLS # CONFIG_ESP_TLS_USING_MBEDTLS=y # CONFIG_ESP_TLS_USE_SECURE_ELEMENT is not set # CONFIG_ESP_TLS_SERVER is not set # CONFIG_ESP_TLS_PSK_VERIFICATION is not set # end of ESP-TLS # # ESP32-specific # CONFIG_ESP32_REV_MIN_0=y # CONFIG_ESP32_REV_MIN_1 is not set # CONFIG_ESP32_REV_MIN_2 is not set # CONFIG_ESP32_REV_MIN_3 is not set CONFIG_ESP32_REV_MIN=0 CONFIG_ESP32_DPORT_WORKAROUND=y # CONFIG_ESP32_DEFAULT_CPU_FREQ_80 is not set CONFIG_ESP32_DEFAULT_CPU_FREQ_160=y # CONFIG_ESP32_DEFAULT_CPU_FREQ_240 is not set CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=160 # CONFIG_ESP32_SPIRAM_SUPPORT is not set # CONFIG_ESP32_TRAX is not set CONFIG_ESP32_TRACEMEM_RESERVE_DRAM=0x0 # CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_TWO is not set CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_FOUR=y CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES=4 # CONFIG_ESP32_ULP_COPROC_ENABLED is not set CONFIG_ESP32_ULP_COPROC_RESERVE_MEM=0 CONFIG_ESP32_DEBUG_OCDAWARE=y CONFIG_ESP32_BROWNOUT_DET=y CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_0=y # CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_1 is not set # CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_2 is not set # CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_3 is not set # CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_4 is not set # CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_5 is not set # CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_6 is not set # CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_7 is not set CONFIG_ESP32_BROWNOUT_DET_LVL=0 CONFIG_ESP32_REDUCE_PHY_TX_POWER=y CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1=y # CONFIG_ESP32_TIME_SYSCALL_USE_RTC is not set # CONFIG_ESP32_TIME_SYSCALL_USE_FRC1 is not set # CONFIG_ESP32_TIME_SYSCALL_USE_NONE is not set CONFIG_ESP32_RTC_CLK_SRC_INT_RC=y # CONFIG_ESP32_RTC_CLK_SRC_EXT_CRYS is not set # CONFIG_ESP32_RTC_CLK_SRC_EXT_OSC is not set # CONFIG_ESP32_RTC_CLK_SRC_INT_8MD256 is not set CONFIG_ESP32_RTC_CLK_CAL_CYCLES=1024 CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY=2000 # CONFIG_ESP32_XTAL_FREQ_40 is not set CONFIG_ESP32_XTAL_FREQ_26=y # CONFIG_ESP32_XTAL_FREQ_AUTO is not set CONFIG_ESP32_XTAL_FREQ=26 # CONFIG_ESP32_DISABLE_BASIC_ROM_CONSOLE is not set # CONFIG_ESP32_NO_BLOBS is not set # CONFIG_ESP32_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set # CONFIG_ESP32_USE_FIXED_STATIC_RAM_SIZE is not set CONFIG_ESP32_DPORT_DIS_INTERRUPT_LVL=5 # end of ESP32-specific # # Power Management # # CONFIG_PM_ENABLE is not set # end of Power Management # # ADC-Calibration # CONFIG_ADC_CAL_EFUSE_TP_ENABLE=y CONFIG_ADC_CAL_EFUSE_VREF_ENABLE=y CONFIG_ADC_CAL_LUT_ENABLE=y # end of ADC-Calibration # # Common ESP-related # CONFIG_ESP_ERR_TO_NAME_LOOKUP=y CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE=32 CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=4304 CONFIG_ESP_MAIN_TASK_STACK_SIZE=6584 CONFIG_ESP_IPC_TASK_STACK_SIZE=3024 CONFIG_ESP_IPC_USES_CALLERS_PRIORITY=y CONFIG_ESP_MINIMAL_SHARED_STACK_SIZE=2048 CONFIG_ESP_CONSOLE_UART_DEFAULT=y # CONFIG_ESP_CONSOLE_UART_CUSTOM is not set # CONFIG_ESP_CONSOLE_UART_NONE is not set CONFIG_ESP_CONSOLE_UART_NUM=0 CONFIG_ESP_CONSOLE_UART_TX_GPIO=1 CONFIG_ESP_CONSOLE_UART_RX_GPIO=3 CONFIG_ESP_CONSOLE_UART_BAUDRATE=115200 CONFIG_ESP_INT_WDT=y CONFIG_ESP_INT_WDT_TIMEOUT_MS=300 CONFIG_ESP_INT_WDT_CHECK_CPU1=y CONFIG_ESP_TASK_WDT=y # CONFIG_ESP_TASK_WDT_PANIC is not set CONFIG_ESP_TASK_WDT_TIMEOUT_S=5 CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=y CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1=y # CONFIG_ESP_PANIC_HANDLER_IRAM is not set CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_STA=y CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_AP=y CONFIG_ESP_MAC_ADDR_UNIVERSE_BT=y CONFIG_ESP_MAC_ADDR_UNIVERSE_ETH=y # end of Common ESP-related # # Ethernet # CONFIG_ETH_ENABLED=y CONFIG_ETH_USE_ESP32_EMAC=y CONFIG_ETH_PHY_INTERFACE_RMII=y # CONFIG_ETH_PHY_INTERFACE_MII is not set CONFIG_ETH_RMII_CLK_INPUT=y # CONFIG_ETH_RMII_CLK_OUTPUT is not set CONFIG_ETH_RMII_CLK_IN_GPIO=0 CONFIG_ETH_DMA_BUFFER_SIZE=512 CONFIG_ETH_DMA_RX_BUFFER_NUM=10 CONFIG_ETH_DMA_TX_BUFFER_NUM=10 CONFIG_ETH_USE_SPI_ETHERNET=y # CONFIG_ETH_SPI_ETHERNET_DM9051 is not set # CONFIG_ETH_USE_OPENETH is not set # end of Ethernet # # Event Loop Library # # CONFIG_ESP_EVENT_LOOP_PROFILING is not set CONFIG_ESP_EVENT_POST_FROM_ISR=y CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR=y # end of Event Loop Library # # GDB Stub # # end of GDB Stub # # ESP HTTP client # CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS=y # CONFIG_ESP_HTTP_CLIENT_ENABLE_BASIC_AUTH is not set # end of ESP HTTP client # # HTTP Server # CONFIG_HTTPD_MAX_REQ_HDR_LEN=512 CONFIG_HTTPD_MAX_URI_LEN=512 CONFIG_HTTPD_ERR_RESP_NO_DELAY=y CONFIG_HTTPD_PURGE_BUF_LEN=32 # CONFIG_HTTPD_LOG_PURGE_DATA is not set # CONFIG_HTTPD_WS_SUPPORT is not set # end of HTTP Server # # ESP HTTPS OTA # # CONFIG_OTA_ALLOW_HTTP is not set # end of ESP HTTPS OTA # # ESP HTTPS server # # CONFIG_ESP_HTTPS_SERVER_ENABLE is not set # end of ESP HTTPS server # # ESP NETIF Adapter # CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL=120 CONFIG_ESP_NETIF_TCPIP_LWIP=y # CONFIG_ESP_NETIF_LOOPBACK is not set CONFIG_ESP_NETIF_TCPIP_ADAPTER_COMPATIBLE_LAYER=y # end of ESP NETIF Adapter # # ESP System Settings # # CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT is not set CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y # CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set # CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set # end of ESP System Settings # # High resolution timer (esp_timer) # # CONFIG_ESP_TIMER_PROFILING is not set CONFIG_ESP_TIMER_TASK_STACK_SIZE=6584 # CONFIG_ESP_TIMER_IMPL_FRC2 is not set CONFIG_ESP_TIMER_IMPL_TG0_LAC=y # end of High resolution timer (esp_timer) # # Wi-Fi # CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10 CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=32 # CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1 CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32 # CONFIG_ESP32_WIFI_CSI_ENABLED is not set CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y CONFIG_ESP32_WIFI_TX_BA_WIN=6 CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y CONFIG_ESP32_WIFI_RX_BA_WIN=6 CONFIG_ESP32_WIFI_NVS_ENABLED=y CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0=y # CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_1 is not set CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752 CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32 # CONFIG_ESP32_WIFI_DEBUG_LOG_ENABLE is not set CONFIG_ESP32_WIFI_IRAM_OPT=y CONFIG_ESP32_WIFI_RX_IRAM_OPT=y CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE=y # end of Wi-Fi # # PHY # CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y # CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 CONFIG_ESP32_PHY_MAX_TX_POWER=20 # end of PHY # # Core dump # # CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set # CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y # end of Core dump # # FAT Filesystem support # # CONFIG_FATFS_CODEPAGE_DYNAMIC is not set CONFIG_FATFS_CODEPAGE_437=y # CONFIG_FATFS_CODEPAGE_720 is not set # CONFIG_FATFS_CODEPAGE_737 is not set # CONFIG_FATFS_CODEPAGE_771 is not set # CONFIG_FATFS_CODEPAGE_775 is not set # CONFIG_FATFS_CODEPAGE_850 is not set # CONFIG_FATFS_CODEPAGE_852 is not set # CONFIG_FATFS_CODEPAGE_855 is not set # CONFIG_FATFS_CODEPAGE_857 is not set # CONFIG_FATFS_CODEPAGE_860 is not set # CONFIG_FATFS_CODEPAGE_861 is not set # CONFIG_FATFS_CODEPAGE_862 is not set # CONFIG_FATFS_CODEPAGE_863 is not set # CONFIG_FATFS_CODEPAGE_864 is not set # CONFIG_FATFS_CODEPAGE_865 is not set # CONFIG_FATFS_CODEPAGE_866 is not set # CONFIG_FATFS_CODEPAGE_869 is not set # CONFIG_FATFS_CODEPAGE_932 is not set # CONFIG_FATFS_CODEPAGE_936 is not set # CONFIG_FATFS_CODEPAGE_949 is not set # CONFIG_FATFS_CODEPAGE_950 is not set CONFIG_FATFS_CODEPAGE=437 CONFIG_FATFS_LFN_NONE=y # CONFIG_FATFS_LFN_HEAP is not set # CONFIG_FATFS_LFN_STACK is not set CONFIG_FATFS_FS_LOCK=0 CONFIG_FATFS_TIMEOUT_MS=10000 CONFIG_FATFS_PER_FILE_CACHE=y # end of FAT Filesystem support # # Modbus configuration # CONFIG_FMB_COMM_MODE_RTU_EN=y CONFIG_FMB_COMM_MODE_ASCII_EN=y CONFIG_FMB_MASTER_TIMEOUT_MS_RESPOND=150 CONFIG_FMB_MASTER_DELAY_MS_CONVERT=200 CONFIG_FMB_QUEUE_LENGTH=20 CONFIG_FMB_SERIAL_TASK_STACK_SIZE=2048 CONFIG_FMB_SERIAL_BUF_SIZE=256 CONFIG_FMB_SERIAL_ASCII_BITS_PER_SYMB=8 CONFIG_FMB_SERIAL_ASCII_TIMEOUT_RESPOND_MS=1000 CONFIG_FMB_SERIAL_TASK_PRIO=10 # CONFIG_FMB_CONTROLLER_SLAVE_ID_SUPPORT is not set CONFIG_FMB_CONTROLLER_NOTIFY_TIMEOUT=20 CONFIG_FMB_CONTROLLER_NOTIFY_QUEUE_SIZE=20 CONFIG_FMB_CONTROLLER_STACK_SIZE=4096 CONFIG_FMB_EVENT_QUEUE_TIMEOUT=20 CONFIG_FMB_TIMER_PORT_ENABLED=y CONFIG_FMB_TIMER_GROUP=0 CONFIG_FMB_TIMER_INDEX=0 # CONFIG_FMB_TIMER_ISR_IN_IRAM is not set # end of Modbus configuration # # FreeRTOS # # CONFIG_FREERTOS_UNICORE is not set CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF CONFIG_FREERTOS_CORETIMER_0=y # CONFIG_FREERTOS_CORETIMER_1 is not set CONFIG_FREERTOS_HZ=100 CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION=y # CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set # CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y # CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 CONFIG_FREERTOS_ASSERT_FAIL_ABORT=y # CONFIG_FREERTOS_ASSERT_FAIL_PRINT_CONTINUE is not set # CONFIG_FREERTOS_ASSERT_DISABLE is not set CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1536 CONFIG_FREERTOS_ISR_STACKSIZE=1536 # CONFIG_FREERTOS_LEGACY_HOOKS is not set CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16 # CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION is not set CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=5048 CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 # CONFIG_FREERTOS_USE_TRACE_FACILITY is not set # CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER=y CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y # CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set CONFIG_FREERTOS_DEBUG_OCDAWARE=y # CONFIG_FREERTOS_FPU_IN_ISR is not set # end of FreeRTOS # # Heap memory debugging # CONFIG_HEAP_POISONING_DISABLED=y # CONFIG_HEAP_POISONING_LIGHT is not set # CONFIG_HEAP_POISONING_COMPREHENSIVE is not set CONFIG_HEAP_TRACING_OFF=y # CONFIG_HEAP_TRACING_STANDALONE is not set # CONFIG_HEAP_TRACING_TOHOST is not set # CONFIG_HEAP_ABORT_WHEN_ALLOCATION_FAILS is not set # end of Heap memory debugging # # jsmn # # CONFIG_JSMN_PARENT_LINKS is not set # CONFIG_JSMN_STRICT is not set # end of jsmn # # libsodium # # end of libsodium # # Log output # # CONFIG_LOG_DEFAULT_LEVEL_NONE is not set # CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set # CONFIG_LOG_DEFAULT_LEVEL_WARN is not set CONFIG_LOG_DEFAULT_LEVEL_INFO=y # CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set # CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set CONFIG_LOG_DEFAULT_LEVEL=3 CONFIG_LOG_COLORS=y CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y # CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM is not set # end of Log output # # LWIP # CONFIG_LWIP_LOCAL_HOSTNAME="espressif" CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y # CONFIG_LWIP_L2_TO_L3_COPY is not set # CONFIG_LWIP_IRAM_OPTIMIZATION is not set CONFIG_LWIP_TIMERS_ONDEMAND=y CONFIG_LWIP_MAX_SOCKETS=10 # CONFIG_LWIP_USE_ONLY_LWIP_SELECT is not set CONFIG_LWIP_SO_REUSE=y CONFIG_LWIP_SO_REUSE_RXTOALL=y # CONFIG_LWIP_SO_RCVBUF is not set # CONFIG_LWIP_NETBUF_RECVINFO is not set CONFIG_LWIP_IP_FRAG=y # CONFIG_LWIP_IP_REASSEMBLY is not set # CONFIG_LWIP_IP_FORWARD is not set # CONFIG_LWIP_STATS is not set # CONFIG_LWIP_ETHARP_TRUST_IP_MAC is not set CONFIG_LWIP_ESP_GRATUITOUS_ARP=y CONFIG_LWIP_GARP_TMR_INTERVAL=60 CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32 CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y # CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set # # DHCP server # CONFIG_LWIP_DHCPS_LEASE_UNIT=60 CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8 # end of DHCP server # CONFIG_LWIP_AUTOIP is not set # CONFIG_LWIP_IPV6_AUTOCONFIG is not set CONFIG_LWIP_NETIF_LOOPBACK=y CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 # # TCP # CONFIG_LWIP_MAX_ACTIVE_TCP=16 CONFIG_LWIP_MAX_LISTENING_TCP=16 CONFIG_LWIP_TCP_MAXRTX=12 CONFIG_LWIP_TCP_SYNMAXRTX=6 CONFIG_LWIP_TCP_MSS=1440 CONFIG_LWIP_TCP_TMR_INTERVAL=250 CONFIG_LWIP_TCP_MSL=60000 CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744 CONFIG_LWIP_TCP_WND_DEFAULT=5744 CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 CONFIG_LWIP_TCP_QUEUE_OOSEQ=y # CONFIG_LWIP_TCP_SACK_OUT is not set # CONFIG_LWIP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES is not set CONFIG_LWIP_TCP_OVERSIZE_MSS=y # CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set # CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set # end of TCP # # UDP # CONFIG_LWIP_MAX_UDP_PCBS=16 CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 # end of UDP CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072 CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY=y # CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU0 is not set # CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU1 is not set CONFIG_LWIP_TCPIP_TASK_AFFINITY=0x7FFFFFFF # CONFIG_LWIP_PPP_SUPPORT is not set # # ICMP # # CONFIG_LWIP_MULTICAST_PING is not set # CONFIG_LWIP_BROADCAST_PING is not set # end of ICMP # # LWIP RAW API # CONFIG_LWIP_MAX_RAW_PCBS=16 # end of LWIP RAW API # # SNTP # CONFIG_LWIP_DHCP_MAX_NTP_SERVERS=1 CONFIG_LWIP_SNTP_UPDATE_DELAY=3600000 # end of SNTP CONFIG_LWIP_ESP_LWIP_ASSERT=y # end of LWIP # # mbedTLS # CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC=y # CONFIG_MBEDTLS_DEFAULT_MEM_ALLOC is not set # CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC is not set CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=y CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN=16384 CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096 # CONFIG_MBEDTLS_DYNAMIC_BUFFER is not set # CONFIG_MBEDTLS_DEBUG is not set # # Certificate Bundle # CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL=y # CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_CMN is not set # CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_NONE is not set # CONFIG_MBEDTLS_CUSTOM_CERTIFICATE_BUNDLE is not set # end of Certificate Bundle # CONFIG_MBEDTLS_ECP_RESTARTABLE is not set # CONFIG_MBEDTLS_CMAC_C is not set CONFIG_MBEDTLS_HARDWARE_AES=y CONFIG_MBEDTLS_HARDWARE_MPI=y CONFIG_MBEDTLS_HARDWARE_SHA=y # CONFIG_MBEDTLS_ATCA_HW_ECDSA_SIGN is not set # CONFIG_MBEDTLS_ATCA_HW_ECDSA_VERIFY is not set CONFIG_MBEDTLS_HAVE_TIME=y # CONFIG_MBEDTLS_HAVE_TIME_DATE is not set CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=y CONFIG_MBEDTLS_SHA512_C=y CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT=y # CONFIG_MBEDTLS_TLS_SERVER_ONLY is not set # CONFIG_MBEDTLS_TLS_CLIENT_ONLY is not set # CONFIG_MBEDTLS_TLS_DISABLED is not set CONFIG_MBEDTLS_TLS_SERVER=y CONFIG_MBEDTLS_TLS_CLIENT=y CONFIG_MBEDTLS_TLS_ENABLED=y # # TLS Key Exchange Methods # # CONFIG_MBEDTLS_PSK_MODES is not set CONFIG_MBEDTLS_KEY_EXCHANGE_RSA=y CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_RSA=y CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE=y CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA=y CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA=y CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA=y CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA=y # end of TLS Key Exchange Methods CONFIG_MBEDTLS_SSL_RENEGOTIATION=y # CONFIG_MBEDTLS_SSL_PROTO_SSL3 is not set CONFIG_MBEDTLS_SSL_PROTO_TLS1=y CONFIG_MBEDTLS_SSL_PROTO_TLS1_1=y CONFIG_MBEDTLS_SSL_PROTO_TLS1_2=y # CONFIG_MBEDTLS_SSL_PROTO_DTLS is not set CONFIG_MBEDTLS_SSL_ALPN=y CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS=y CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS=y # # Symmetric Ciphers # CONFIG_MBEDTLS_AES_C=y # CONFIG_MBEDTLS_CAMELLIA_C is not set # CONFIG_MBEDTLS_DES_C is not set CONFIG_MBEDTLS_RC4_DISABLED=y # CONFIG_MBEDTLS_RC4_ENABLED_NO_DEFAULT is not set # CONFIG_MBEDTLS_RC4_ENABLED is not set # CONFIG_MBEDTLS_BLOWFISH_C is not set # CONFIG_MBEDTLS_XTEA_C is not set CONFIG_MBEDTLS_CCM_C=y CONFIG_MBEDTLS_GCM_C=y # end of Symmetric Ciphers # CONFIG_MBEDTLS_RIPEMD160_C is not set # # Certificates # CONFIG_MBEDTLS_PEM_PARSE_C=y CONFIG_MBEDTLS_PEM_WRITE_C=y CONFIG_MBEDTLS_X509_CRL_PARSE_C=y CONFIG_MBEDTLS_X509_CSR_PARSE_C=y # end of Certificates CONFIG_MBEDTLS_ECP_C=y CONFIG_MBEDTLS_ECDH_C=y CONFIG_MBEDTLS_ECDSA_C=y # CONFIG_MBEDTLS_ECJPAKE_C is not set CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=y CONFIG_MBEDTLS_ECP_NIST_OPTIM=y # CONFIG_MBEDTLS_POLY1305_C is not set # CONFIG_MBEDTLS_CHACHA20_C is not set # CONFIG_MBEDTLS_HKDF_C is not set # CONFIG_MBEDTLS_THREADING_C is not set # CONFIG_MBEDTLS_SECURITY_RISKS is not set # end of mbedTLS # # mDNS # CONFIG_MDNS_MAX_SERVICES=10 CONFIG_MDNS_TASK_PRIORITY=1 CONFIG_MDNS_TASK_STACK_SIZE=4096 # CONFIG_MDNS_TASK_AFFINITY_NO_AFFINITY is not set CONFIG_MDNS_TASK_AFFINITY_CPU0=y # CONFIG_MDNS_TASK_AFFINITY_CPU1 is not set CONFIG_MDNS_TASK_AFFINITY=0x0 CONFIG_MDNS_SERVICE_ADD_TIMEOUT_MS=2000 CONFIG_MDNS_TIMER_PERIOD_MS=100 # end of mDNS # # ESP-MQTT Configurations # CONFIG_MQTT_PROTOCOL_311=y CONFIG_MQTT_TRANSPORT_SSL=y CONFIG_MQTT_TRANSPORT_WEBSOCKET=y CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE=y # CONFIG_MQTT_USE_CUSTOM_CONFIG is not set # CONFIG_MQTT_TASK_CORE_SELECTION_ENABLED is not set # CONFIG_MQTT_CUSTOM_OUTBOX is not set # end of ESP-MQTT Configurations # # Newlib # CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y # CONFIG_NEWLIB_STDOUT_LINE_ENDING_LF is not set # CONFIG_NEWLIB_STDOUT_LINE_ENDING_CR is not set # CONFIG_NEWLIB_STDIN_LINE_ENDING_CRLF is not set # CONFIG_NEWLIB_STDIN_LINE_ENDING_LF is not set CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y # CONFIG_NEWLIB_NANO_FORMAT is not set # end of Newlib # # NVS # # end of NVS # # OpenSSL # # CONFIG_OPENSSL_DEBUG is not set # CONFIG_OPENSSL_ASSERT_DO_NOTHING is not set CONFIG_OPENSSL_ASSERT_EXIT=y # end of OpenSSL # # PThreads # CONFIG_PTHREAD_TASK_PRIO_DEFAULT=5 CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 CONFIG_PTHREAD_STACK_MIN=768 CONFIG_PTHREAD_DEFAULT_CORE_NO_AFFINITY=y # CONFIG_PTHREAD_DEFAULT_CORE_0 is not set # CONFIG_PTHREAD_DEFAULT_CORE_1 is not set CONFIG_PTHREAD_TASK_CORE_DEFAULT=-1 CONFIG_PTHREAD_TASK_NAME_DEFAULT="pthread" # end of PThreads # # SPI Flash driver # # CONFIG_SPI_FLASH_VERIFY_WRITE is not set # CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS=y # CONFIG_SPI_FLASH_DANGEROUS_WRITE_FAILS is not set # CONFIG_SPI_FLASH_DANGEROUS_WRITE_ALLOWED is not set # CONFIG_SPI_FLASH_USE_LEGACY_IMPL is not set # CONFIG_SPI_FLASH_SHARE_SPI1_BUS is not set # CONFIG_SPI_FLASH_BYPASS_BLOCK_ERASE is not set CONFIG_SPI_FLASH_YIELD_DURING_ERASE=y CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS=20 CONFIG_SPI_FLASH_ERASE_YIELD_TICKS=1 # # Auto-detect flash chips # CONFIG_SPI_FLASH_SUPPORT_ISSI_CHIP=y CONFIG_SPI_FLASH_SUPPORT_MXIC_CHIP=y CONFIG_SPI_FLASH_SUPPORT_GD_CHIP=y # end of Auto-detect flash chips # end of SPI Flash driver # # SPIFFS Configuration # CONFIG_SPIFFS_MAX_PARTITIONS=3 # # SPIFFS Cache Configuration # CONFIG_SPIFFS_CACHE=y CONFIG_SPIFFS_CACHE_WR=y # CONFIG_SPIFFS_CACHE_STATS is not set # end of SPIFFS Cache Configuration CONFIG_SPIFFS_PAGE_CHECK=y CONFIG_SPIFFS_GC_MAX_RUNS=10 # CONFIG_SPIFFS_GC_STATS is not set CONFIG_SPIFFS_PAGE_SIZE=256 CONFIG_SPIFFS_OBJ_NAME_LEN=32 # CONFIG_SPIFFS_FOLLOW_SYMLINKS is not set CONFIG_SPIFFS_USE_MAGIC=y CONFIG_SPIFFS_USE_MAGIC_LENGTH=y CONFIG_SPIFFS_META_LENGTH=4 CONFIG_SPIFFS_USE_MTIME=y # # Debug Configuration # # CONFIG_SPIFFS_DBG is not set # CONFIG_SPIFFS_API_DBG is not set # CONFIG_SPIFFS_GC_DBG is not set # CONFIG_SPIFFS_CACHE_DBG is not set # CONFIG_SPIFFS_CHECK_DBG is not set # CONFIG_SPIFFS_TEST_VISUALISATION is not set # end of Debug Configuration # end of SPIFFS Configuration # # TinyUSB # # # Descriptor configuration # CONFIG_USB_DESC_CUSTOM_VID=0x1234 CONFIG_USB_DESC_CUSTOM_PID=0x5678 # end of Descriptor configuration # end of TinyUSB # # Unity unit testing library # CONFIG_UNITY_ENABLE_FLOAT=y CONFIG_UNITY_ENABLE_DOUBLE=y # CONFIG_UNITY_ENABLE_COLOR is not set CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER=y # CONFIG_UNITY_ENABLE_FIXTURE is not set # CONFIG_UNITY_ENABLE_BACKTRACE_ON_FAIL is not set # end of Unity unit testing library # # Virtual file system # CONFIG_VFS_SUPPORT_IO=y CONFIG_VFS_SUPPORT_DIR=y CONFIG_VFS_SUPPORT_SELECT=y CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT=y CONFIG_VFS_SUPPORT_TERMIOS=y # # Host File System I/O (Semihosting) # CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS=1 CONFIG_VFS_SEMIHOSTFS_HOST_PATH_MAX_LEN=128 # end of Host File System I/O (Semihosting) # end of Virtual file system # # Wear Levelling # # CONFIG_WL_SECTOR_SIZE_512 is not set CONFIG_WL_SECTOR_SIZE_4096=y CONFIG_WL_SECTOR_SIZE=4096 # end of Wear Levelling # # Wi-Fi Provisioning Manager # CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES=16 CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT=30 # end of Wi-Fi Provisioning Manager # # Supplicant # CONFIG_WPA_MBEDTLS_CRYPTO=y # CONFIG_WPA_DEBUG_PRINT is not set # CONFIG_WPA_TESTING_OPTIONS is not set # CONFIG_WPA_TLS_V12 is not set # CONFIG_WPA_WPS_WARS is not set # end of Supplicant # end of Component config # # Compatibility options # # CONFIG_LEGACY_INCLUDE_COMMON_HEADERS is not set # end of Compatibility options # Deprecated options for backward compatibility CONFIG_TOOLPREFIX="xtensa-esp32-elf-" # CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set # CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set # CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set CONFIG_LOG_BOOTLOADER_LEVEL_INFO=y # CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set # CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set CONFIG_LOG_BOOTLOADER_LEVEL=3 # CONFIG_APP_ROLLBACK_ENABLE is not set # CONFIG_FLASH_ENCRYPTION_ENABLED is not set # CONFIG_FLASHMODE_QIO is not set # CONFIG_FLASHMODE_QOUT is not set CONFIG_FLASHMODE_DIO=y # CONFIG_FLASHMODE_DOUT is not set # CONFIG_MONITOR_BAUD_9600B is not set # CONFIG_MONITOR_BAUD_57600B is not set CONFIG_MONITOR_BAUD_115200B=y # CONFIG_MONITOR_BAUD_230400B is not set # CONFIG_MONITOR_BAUD_921600B is not set # CONFIG_MONITOR_BAUD_2MB is not set # CONFIG_MONITOR_BAUD_OTHER is not set CONFIG_MONITOR_BAUD_OTHER_VAL=115200 CONFIG_MONITOR_BAUD=115200 CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG=y # CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE is not set CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y # CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set # CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set # CONFIG_CXX_EXCEPTIONS is not set CONFIG_STACK_CHECK_NONE=y # CONFIG_STACK_CHECK_NORM is not set # CONFIG_STACK_CHECK_STRONG is not set # CONFIG_STACK_CHECK_ALL is not set # CONFIG_WARN_WRITE_STRINGS is not set # CONFIG_DISABLE_GCC8_WARNINGS is not set # CONFIG_ESP32_APPTRACE_DEST_TRAX is not set CONFIG_ESP32_APPTRACE_DEST_NONE=y CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y CONFIG_BTDM_CONTROLLER_BLE_MAX_CONN_EFF=0 CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_ACL_CONN_EFF=0 CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_SYNC_CONN_EFF=0 CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE=0 CONFIG_ADC2_DISABLE_DAC=y # CONFIG_SPIRAM_SUPPORT is not set CONFIG_TRACEMEM_RESERVE_DRAM=0x0 # CONFIG_TWO_UNIVERSAL_MAC_ADDRESS is not set CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS=y CONFIG_NUMBER_OF_UNIVERSAL_MAC_ADDRESS=4 # CONFIG_ULP_COPROC_ENABLED is not set CONFIG_ULP_COPROC_RESERVE_MEM=0 CONFIG_BROWNOUT_DET=y CONFIG_BROWNOUT_DET_LVL_SEL_0=y # CONFIG_BROWNOUT_DET_LVL_SEL_1 is not set # CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set # CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set # CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set # CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set # CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set # CONFIG_BROWNOUT_DET_LVL_SEL_7 is not set CONFIG_BROWNOUT_DET_LVL=0 CONFIG_REDUCE_PHY_TX_POWER=y CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC=y # CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL is not set # CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_OSC is not set # CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_8MD256 is not set # CONFIG_DISABLE_BASIC_ROM_CONSOLE is not set # CONFIG_NO_BLOBS is not set # CONFIG_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=4304 CONFIG_MAIN_TASK_STACK_SIZE=6584 CONFIG_IPC_TASK_STACK_SIZE=3024 CONFIG_CONSOLE_UART_DEFAULT=y # CONFIG_CONSOLE_UART_CUSTOM is not set # CONFIG_CONSOLE_UART_NONE is not set CONFIG_CONSOLE_UART_NUM=0 CONFIG_CONSOLE_UART_TX_GPIO=1 CONFIG_CONSOLE_UART_RX_GPIO=3 CONFIG_CONSOLE_UART_BAUDRATE=115200 CONFIG_INT_WDT=y CONFIG_INT_WDT_TIMEOUT_MS=300 CONFIG_INT_WDT_CHECK_CPU1=y CONFIG_TASK_WDT=y # CONFIG_TASK_WDT_PANIC is not set CONFIG_TASK_WDT_TIMEOUT_S=5 CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=y CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1=y # CONFIG_EVENT_LOOP_PROFILING is not set CONFIG_POST_EVENTS_FROM_ISR=y CONFIG_POST_EVENTS_FROM_IRAM_ISR=y # CONFIG_ESP32S2_PANIC_PRINT_HALT is not set CONFIG_ESP32S2_PANIC_PRINT_REBOOT=y # CONFIG_ESP32S2_PANIC_SILENT_REBOOT is not set # CONFIG_ESP32S2_PANIC_GDBSTUB is not set CONFIG_TIMER_TASK_STACK_SIZE=6584 CONFIG_MB_MASTER_TIMEOUT_MS_RESPOND=150 CONFIG_MB_MASTER_DELAY_MS_CONVERT=200 CONFIG_MB_QUEUE_LENGTH=20 CONFIG_MB_SERIAL_TASK_STACK_SIZE=2048 CONFIG_MB_SERIAL_BUF_SIZE=256 CONFIG_MB_SERIAL_TASK_PRIO=10 # CONFIG_MB_CONTROLLER_SLAVE_ID_SUPPORT is not set CONFIG_MB_CONTROLLER_NOTIFY_TIMEOUT=20 CONFIG_MB_CONTROLLER_NOTIFY_QUEUE_SIZE=20 CONFIG_MB_CONTROLLER_STACK_SIZE=4096 CONFIG_MB_EVENT_QUEUE_TIMEOUT=20 CONFIG_MB_TIMER_PORT_ENABLED=y CONFIG_MB_TIMER_GROUP=0 CONFIG_MB_TIMER_INDEX=0 # CONFIG_SUPPORT_STATIC_ALLOCATION is not set CONFIG_TIMER_TASK_PRIORITY=1 CONFIG_TIMER_TASK_STACK_DEPTH=5048 CONFIG_TIMER_QUEUE_LENGTH=10 # CONFIG_L2_TO_L3_COPY is not set # CONFIG_USE_ONLY_LWIP_SELECT is not set CONFIG_ESP_GRATUITOUS_ARP=y CONFIG_GARP_TMR_INTERVAL=60 CONFIG_TCPIP_RECVMBOX_SIZE=32 CONFIG_TCP_MAXRTX=12 CONFIG_TCP_SYNMAXRTX=6 CONFIG_TCP_MSS=1440 CONFIG_TCP_MSL=60000 CONFIG_TCP_SND_BUF_DEFAULT=5744 CONFIG_TCP_WND_DEFAULT=5744 CONFIG_TCP_RECVMBOX_SIZE=6 CONFIG_TCP_QUEUE_OOSEQ=y # CONFIG_ESP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES is not set CONFIG_TCP_OVERSIZE_MSS=y # CONFIG_TCP_OVERSIZE_QUARTER_MSS is not set # CONFIG_TCP_OVERSIZE_DISABLE is not set CONFIG_UDP_RECVMBOX_SIZE=6 CONFIG_TCPIP_TASK_STACK_SIZE=3072 CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY=y # CONFIG_TCPIP_TASK_AFFINITY_CPU0 is not set # CONFIG_TCPIP_TASK_AFFINITY_CPU1 is not set CONFIG_TCPIP_TASK_AFFINITY=0x7FFFFFFF # CONFIG_PPP_SUPPORT is not set CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT=5 CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 CONFIG_ESP32_PTHREAD_STACK_MIN=768 CONFIG_ESP32_DEFAULT_PTHREAD_CORE_NO_AFFINITY=y # CONFIG_ESP32_DEFAULT_PTHREAD_CORE_0 is not set # CONFIG_ESP32_DEFAULT_PTHREAD_CORE_1 is not set CONFIG_ESP32_PTHREAD_TASK_CORE_DEFAULT=-1 CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT="pthread" CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS=y # CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_FAILS is not set # CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ALLOWED is not set CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT=y CONFIG_SUPPORT_TERMIOS=y CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS=1 CONFIG_SEMIHOSTFS_HOST_PATH_MAX_LEN=128 # End of deprecated options libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-heltec-wb32/sdkconfig.h000066400000000000000000000471101476025525100272500ustar00rootroot00000000000000/* * Automatically generated file. DO NOT EDIT. * Espressif IoT Development Framework (ESP-IDF) Configuration Header */ #pragma once #define CONFIG_IDF_CMAKE 1 #define CONFIG_IDF_TARGET "esp32" #define CONFIG_IDF_TARGET_ESP32 1 #define CONFIG_IDF_FIRMWARE_CHIP_ID 0x0000 #define CONFIG_SDK_TOOLPREFIX "xtensa-esp32-elf-" #define CONFIG_APP_BUILD_TYPE_APP_2NDBOOT 1 #define CONFIG_APP_BUILD_GENERATE_BINARIES 1 #define CONFIG_APP_BUILD_BOOTLOADER 1 #define CONFIG_APP_BUILD_USE_FLASH_SECTIONS 1 #define CONFIG_APP_COMPILE_TIME_DATE 1 #define CONFIG_APP_RETRIEVE_LEN_ELF_SHA 16 #define CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE 1 #define CONFIG_BOOTLOADER_LOG_LEVEL_INFO 1 #define CONFIG_BOOTLOADER_LOG_LEVEL 3 #define CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_9V 1 #define CONFIG_BOOTLOADER_WDT_ENABLE 1 #define CONFIG_BOOTLOADER_WDT_TIME_MS 9000 #define CONFIG_BOOTLOADER_RESERVE_RTC_SIZE 0x0 #define CONFIG_ESPTOOLPY_BAUD_OTHER_VAL 115200 #define CONFIG_ESPTOOLPY_FLASHMODE_DIO 1 #define CONFIG_ESPTOOLPY_FLASHMODE "dio" #define CONFIG_ESPTOOLPY_FLASHFREQ_26M 1 #define CONFIG_ESPTOOLPY_FLASHFREQ "26m" #define CONFIG_ESPTOOLPY_FLASHSIZE_2MB 1 #define CONFIG_ESPTOOLPY_FLASHSIZE "2MB" #define CONFIG_ESPTOOLPY_FLASHSIZE_DETECT 1 #define CONFIG_ESPTOOLPY_BEFORE_RESET 1 #define CONFIG_ESPTOOLPY_BEFORE "default_reset" #define CONFIG_ESPTOOLPY_AFTER_RESET 1 #define CONFIG_ESPTOOLPY_AFTER "hard_reset" #define CONFIG_ESPTOOLPY_MONITOR_BAUD_115200B 1 #define CONFIG_ESPTOOLPY_MONITOR_BAUD_OTHER_VAL 115200 #define CONFIG_ESPTOOLPY_MONITOR_BAUD 115200 #define CONFIG_PARTITION_TABLE_CUSTOM 1 #define CONFIG_PARTITION_TABLE_CUSTOM_FILENAME "partitions.csv" #define CONFIG_PARTITION_TABLE_FILENAME "partitions_singleapp.csv" #define CONFIG_PARTITION_TABLE_OFFSET 0x8000 #define CONFIG_PARTITION_TABLE_MD5 1 #define CONFIG_COMPILER_OPTIMIZATION_DEFAULT 1 #define CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE 1 #define CONFIG_COMPILER_STACK_CHECK_MODE_NONE 1 #define CONFIG_APPTRACE_DEST_NONE 1 #define CONFIG_APPTRACE_LOCK_ENABLE 1 #define CONFIG_BTDM_CTRL_BR_EDR_SCO_DATA_PATH_EFF 0 #define CONFIG_BTDM_CTRL_BLE_MAX_CONN_EFF 0 #define CONFIG_BTDM_CTRL_BR_EDR_MAX_ACL_CONN_EFF 0 #define CONFIG_BTDM_CTRL_BR_EDR_MAX_SYNC_CONN_EFF 0 #define CONFIG_BTDM_CTRL_PINNED_TO_CORE 0 #define CONFIG_BTDM_BLE_SLEEP_CLOCK_ACCURACY_INDEX_EFF 1 #define CONFIG_BT_RESERVE_DRAM 0x0 #define CONFIG_COAP_MBEDTLS_PSK 1 #define CONFIG_COAP_LOG_DEFAULT_LEVEL 0 #define CONFIG_ADC_DISABLE_DAC 1 #define CONFIG_SPI_MASTER_ISR_IN_IRAM 1 #define CONFIG_SPI_SLAVE_ISR_IN_IRAM 1 #define CONFIG_EFUSE_CODE_SCHEME_COMPAT_3_4 1 #define CONFIG_EFUSE_MAX_BLK_LEN 192 #define CONFIG_ESP_TLS_USING_MBEDTLS 1 #define CONFIG_ESP32_REV_MIN_0 1 #define CONFIG_ESP32_REV_MIN 0 #define CONFIG_ESP32_DPORT_WORKAROUND 1 #define CONFIG_ESP32_DEFAULT_CPU_FREQ_160 1 #define CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ 160 #define CONFIG_ESP32_TRACEMEM_RESERVE_DRAM 0x0 #define CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_FOUR 1 #define CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES 4 #define CONFIG_ESP32_ULP_COPROC_RESERVE_MEM 0 #define CONFIG_ESP32_DEBUG_OCDAWARE 1 #define CONFIG_ESP32_BROWNOUT_DET 1 #define CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_0 1 #define CONFIG_ESP32_BROWNOUT_DET_LVL 0 #define CONFIG_ESP32_REDUCE_PHY_TX_POWER 1 #define CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1 1 #define CONFIG_ESP32_RTC_CLK_SRC_INT_RC 1 #define CONFIG_ESP32_RTC_CLK_CAL_CYCLES 1024 #define CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY 2000 #define CONFIG_ESP32_XTAL_FREQ_26 1 #define CONFIG_ESP32_XTAL_FREQ 26 #define CONFIG_ESP32_DPORT_DIS_INTERRUPT_LVL 5 #define CONFIG_ADC_CAL_EFUSE_TP_ENABLE 1 #define CONFIG_ADC_CAL_EFUSE_VREF_ENABLE 1 #define CONFIG_ADC_CAL_LUT_ENABLE 1 #define CONFIG_ESP_ERR_TO_NAME_LOOKUP 1 #define CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE 32 #define CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE 2304 #define CONFIG_ESP_MAIN_TASK_STACK_SIZE 6584 #define CONFIG_ESP_IPC_TASK_STACK_SIZE 1024 #define CONFIG_ESP_IPC_USES_CALLERS_PRIORITY 1 #define CONFIG_ESP_MINIMAL_SHARED_STACK_SIZE 2048 #define CONFIG_ESP_CONSOLE_UART_DEFAULT 1 #define CONFIG_ESP_CONSOLE_UART_NUM 0 #define CONFIG_ESP_CONSOLE_UART_TX_GPIO 1 #define CONFIG_ESP_CONSOLE_UART_RX_GPIO 3 #define CONFIG_ESP_CONSOLE_UART_BAUDRATE 115200 #define CONFIG_ESP_INT_WDT 1 #define CONFIG_ESP_INT_WDT_TIMEOUT_MS 300 #define CONFIG_ESP_INT_WDT_CHECK_CPU1 1 #define CONFIG_ESP_TASK_WDT 1 #define CONFIG_ESP_TASK_WDT_TIMEOUT_S 5 #define CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0 1 #define CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1 1 #define CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_STA 1 #define CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_AP 1 #define CONFIG_ESP_MAC_ADDR_UNIVERSE_BT 1 #define CONFIG_ESP_MAC_ADDR_UNIVERSE_ETH 1 #define CONFIG_ETH_ENABLED 1 #define CONFIG_ETH_USE_ESP32_EMAC 1 #define CONFIG_ETH_PHY_INTERFACE_RMII 1 #define CONFIG_ETH_RMII_CLK_INPUT 1 #define CONFIG_ETH_RMII_CLK_IN_GPIO 0 #define CONFIG_ETH_DMA_BUFFER_SIZE 512 #define CONFIG_ETH_DMA_RX_BUFFER_NUM 10 #define CONFIG_ETH_DMA_TX_BUFFER_NUM 10 #define CONFIG_ETH_USE_SPI_ETHERNET 1 #define CONFIG_ESP_EVENT_POST_FROM_ISR 1 #define CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR 1 #define CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS 1 #define CONFIG_HTTPD_MAX_REQ_HDR_LEN 512 #define CONFIG_HTTPD_MAX_URI_LEN 512 #define CONFIG_HTTPD_ERR_RESP_NO_DELAY 1 #define CONFIG_HTTPD_PURGE_BUF_LEN 32 #define CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL 120 #define CONFIG_ESP_NETIF_TCPIP_LWIP 1 #define CONFIG_ESP_NETIF_TCPIP_ADAPTER_COMPATIBLE_LAYER 1 #define CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT 1 #define CONFIG_ESP_TIMER_TASK_STACK_SIZE 3584 #define CONFIG_ESP_TIMER_IMPL_TG0_LAC 1 #define CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM 10 #define CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM 32 #define CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER 1 #define CONFIG_ESP32_WIFI_TX_BUFFER_TYPE 1 #define CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM 32 #define CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED 1 #define CONFIG_ESP32_WIFI_TX_BA_WIN 6 #define CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED 1 #define CONFIG_ESP32_WIFI_RX_BA_WIN 6 #define CONFIG_ESP32_WIFI_NVS_ENABLED 1 #define CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0 1 #define CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN 752 #define CONFIG_ESP32_WIFI_MGMT_SBUF_NUM 32 #define CONFIG_ESP32_WIFI_IRAM_OPT 1 #define CONFIG_ESP32_WIFI_RX_IRAM_OPT 1 #define CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE 1 #define CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE 1 #define CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER 20 #define CONFIG_ESP32_PHY_MAX_TX_POWER 20 #define CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE 1 #define CONFIG_FATFS_CODEPAGE_437 1 #define CONFIG_FATFS_CODEPAGE 437 #define CONFIG_FATFS_LFN_NONE 1 #define CONFIG_FATFS_FS_LOCK 0 #define CONFIG_FATFS_TIMEOUT_MS 10000 #define CONFIG_FATFS_PER_FILE_CACHE 1 #define CONFIG_FMB_COMM_MODE_RTU_EN 1 #define CONFIG_FMB_COMM_MODE_ASCII_EN 1 #define CONFIG_FMB_MASTER_TIMEOUT_MS_RESPOND 150 #define CONFIG_FMB_MASTER_DELAY_MS_CONVERT 200 #define CONFIG_FMB_QUEUE_LENGTH 20 #define CONFIG_FMB_SERIAL_TASK_STACK_SIZE 2048 #define CONFIG_FMB_SERIAL_BUF_SIZE 256 #define CONFIG_FMB_SERIAL_ASCII_BITS_PER_SYMB 8 #define CONFIG_FMB_SERIAL_ASCII_TIMEOUT_RESPOND_MS 1000 #define CONFIG_FMB_SERIAL_TASK_PRIO 10 #define CONFIG_FMB_CONTROLLER_NOTIFY_TIMEOUT 20 #define CONFIG_FMB_CONTROLLER_NOTIFY_QUEUE_SIZE 20 #define CONFIG_FMB_CONTROLLER_STACK_SIZE 4096 #define CONFIG_FMB_EVENT_QUEUE_TIMEOUT 20 #define CONFIG_FMB_TIMER_PORT_ENABLED 1 #define CONFIG_FMB_TIMER_GROUP 0 #define CONFIG_FMB_TIMER_INDEX 0 #define CONFIG_FREERTOS_NO_AFFINITY 0x7FFFFFFF #define CONFIG_FREERTOS_CORETIMER_0 1 #define CONFIG_FREERTOS_HZ 100 #define CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION 1 #define CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY 1 #define CONFIG_FREERTOS_INTERRUPT_BACKTRACE 1 #define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1 #define CONFIG_FREERTOS_ASSERT_FAIL_ABORT 1 #define CONFIG_FREERTOS_IDLE_TASK_STACKSIZE 1536 #define CONFIG_FREERTOS_ISR_STACKSIZE 1536 #define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 16 #define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1 #define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048 #define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10 #define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0 #define CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER 1 #define CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER 1 #define CONFIG_FREERTOS_DEBUG_OCDAWARE 1 #define CONFIG_HEAP_POISONING_DISABLED 1 #define CONFIG_HEAP_TRACING_OFF 1 #define CONFIG_LOG_DEFAULT_LEVEL_INFO 1 #define CONFIG_LOG_DEFAULT_LEVEL 3 #define CONFIG_LOG_COLORS 1 #define CONFIG_LOG_TIMESTAMP_SOURCE_RTOS 1 #define CONFIG_LWIP_LOCAL_HOSTNAME "espressif" #define CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES 1 #define CONFIG_LWIP_TIMERS_ONDEMAND 1 #define CONFIG_LWIP_MAX_SOCKETS 10 #define CONFIG_LWIP_SO_REUSE 1 #define CONFIG_LWIP_SO_REUSE_RXTOALL 1 #define CONFIG_LWIP_IP_FRAG 1 #define CONFIG_LWIP_ESP_GRATUITOUS_ARP 1 #define CONFIG_LWIP_GARP_TMR_INTERVAL 60 #define CONFIG_LWIP_TCPIP_RECVMBOX_SIZE 32 #define CONFIG_LWIP_DHCP_DOES_ARP_CHECK 1 #define CONFIG_LWIP_DHCPS_LEASE_UNIT 60 #define CONFIG_LWIP_DHCPS_MAX_STATION_NUM 8 #define CONFIG_LWIP_NETIF_LOOPBACK 1 #define CONFIG_LWIP_LOOPBACK_MAX_PBUFS 8 #define CONFIG_LWIP_MAX_ACTIVE_TCP 16 #define CONFIG_LWIP_MAX_LISTENING_TCP 16 #define CONFIG_LWIP_TCP_MAXRTX 12 #define CONFIG_LWIP_TCP_SYNMAXRTX 6 #define CONFIG_LWIP_TCP_MSS 1440 #define CONFIG_LWIP_TCP_TMR_INTERVAL 250 #define CONFIG_LWIP_TCP_MSL 60000 #define CONFIG_LWIP_TCP_SND_BUF_DEFAULT 5744 #define CONFIG_LWIP_TCP_WND_DEFAULT 5744 #define CONFIG_LWIP_TCP_RECVMBOX_SIZE 6 #define CONFIG_LWIP_TCP_QUEUE_OOSEQ 1 #define CONFIG_LWIP_TCP_OVERSIZE_MSS 1 #define CONFIG_LWIP_MAX_UDP_PCBS 16 #define CONFIG_LWIP_UDP_RECVMBOX_SIZE 6 #define CONFIG_LWIP_TCPIP_TASK_STACK_SIZE 3072 #define CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY 1 #define CONFIG_LWIP_TCPIP_TASK_AFFINITY 0x7FFFFFFF #define CONFIG_LWIP_MAX_RAW_PCBS 16 #define CONFIG_LWIP_DHCP_MAX_NTP_SERVERS 1 #define CONFIG_LWIP_SNTP_UPDATE_DELAY 3600000 #define CONFIG_LWIP_ESP_LWIP_ASSERT 1 #define CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC 1 #define CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN 1 #define CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN 16384 #define CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN 4096 #define CONFIG_MBEDTLS_CERTIFICATE_BUNDLE 1 #define CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL 1 #define CONFIG_MBEDTLS_HARDWARE_AES 1 #define CONFIG_MBEDTLS_HARDWARE_MPI 1 #define CONFIG_MBEDTLS_HARDWARE_SHA 1 #define CONFIG_MBEDTLS_HAVE_TIME 1 #define CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT 1 #define CONFIG_MBEDTLS_TLS_SERVER 1 #define CONFIG_MBEDTLS_TLS_CLIENT 1 #define CONFIG_MBEDTLS_TLS_ENABLED 1 #define CONFIG_MBEDTLS_PSK_MODES 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_PSK 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_PSK 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_PSK 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_RSA_PSK 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_RSA 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_RSA 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA 1 #define CONFIG_MBEDTLS_SSL_RENEGOTIATION 1 #define CONFIG_MBEDTLS_SSL_PROTO_TLS1 1 #define CONFIG_MBEDTLS_SSL_PROTO_TLS1_1 1 #define CONFIG_MBEDTLS_SSL_PROTO_TLS1_2 1 #define CONFIG_MBEDTLS_SSL_PROTO_DTLS 1 #define CONFIG_MBEDTLS_SSL_ALPN 1 #define CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS 1 #define CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS 1 #define CONFIG_MBEDTLS_AES_C 1 #define CONFIG_MBEDTLS_RC4_DISABLED 1 #define CONFIG_MBEDTLS_CCM_C 1 #define CONFIG_MBEDTLS_GCM_C 1 #define CONFIG_MBEDTLS_PEM_PARSE_C 1 #define CONFIG_MBEDTLS_PEM_WRITE_C 1 #define CONFIG_MBEDTLS_X509_CRL_PARSE_C 1 #define CONFIG_MBEDTLS_X509_CSR_PARSE_C 1 #define CONFIG_MBEDTLS_ECP_C 1 #define CONFIG_MBEDTLS_ECDH_C 1 #define CONFIG_MBEDTLS_ECDSA_C 1 #define CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED 1 #define CONFIG_MBEDTLS_ECP_NIST_OPTIM 1 #define CONFIG_MDNS_MAX_SERVICES 10 #define CONFIG_MDNS_TASK_PRIORITY 1 #define CONFIG_MDNS_TASK_AFFINITY_CPU0 1 #define CONFIG_MDNS_TASK_AFFINITY 0x0 #define CONFIG_MDNS_SERVICE_ADD_TIMEOUT_MS 2000 #define CONFIG_MDNS_TIMER_PERIOD_MS 100 #define CONFIG_MQTT_PROTOCOL_311 1 #define CONFIG_MQTT_TRANSPORT_SSL 1 #define CONFIG_MQTT_TRANSPORT_WEBSOCKET 1 #define CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE 1 #define CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF 1 #define CONFIG_NEWLIB_STDIN_LINE_ENDING_CR 1 #define CONFIG_OPENSSL_ASSERT_EXIT 1 #define CONFIG_PTHREAD_TASK_PRIO_DEFAULT 5 #define CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT 3072 #define CONFIG_PTHREAD_STACK_MIN 768 #define CONFIG_PTHREAD_DEFAULT_CORE_NO_AFFINITY 1 #define CONFIG_PTHREAD_TASK_CORE_DEFAULT -1 #define CONFIG_PTHREAD_TASK_NAME_DEFAULT "pthread" #define CONFIG_SPI_FLASH_ROM_DRIVER_PATCH 1 #define CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS 1 #define CONFIG_SPI_FLASH_YIELD_DURING_ERASE 1 #define CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS 20 #define CONFIG_SPI_FLASH_ERASE_YIELD_TICKS 1 #define CONFIG_SPI_FLASH_SUPPORT_ISSI_CHIP 1 #define CONFIG_SPI_FLASH_SUPPORT_MXIC_CHIP 1 #define CONFIG_SPI_FLASH_SUPPORT_GD_CHIP 1 #define CONFIG_SPIFFS_MAX_PARTITIONS 3 #define CONFIG_SPIFFS_CACHE 1 #define CONFIG_SPIFFS_CACHE_WR 1 #define CONFIG_SPIFFS_PAGE_CHECK 1 #define CONFIG_SPIFFS_GC_MAX_RUNS 10 #define CONFIG_SPIFFS_PAGE_SIZE 256 #define CONFIG_SPIFFS_OBJ_NAME_LEN 32 #define CONFIG_SPIFFS_USE_MAGIC 1 #define CONFIG_SPIFFS_USE_MAGIC_LENGTH 1 #define CONFIG_SPIFFS_META_LENGTH 4 #define CONFIG_SPIFFS_USE_MTIME 1 #define CONFIG_USB_DESC_CUSTOM_VID 0x1234 #define CONFIG_USB_DESC_CUSTOM_PID 0x5678 #define CONFIG_UNITY_ENABLE_FLOAT 1 #define CONFIG_UNITY_ENABLE_DOUBLE 1 #define CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER 1 #define CONFIG_VFS_SUPPORT_IO 1 #define CONFIG_VFS_SUPPORT_DIR 1 #define CONFIG_VFS_SUPPORT_SELECT 1 #define CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT 1 #define CONFIG_VFS_SUPPORT_TERMIOS 1 #define CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS 1 #define CONFIG_VFS_SEMIHOSTFS_HOST_PATH_MAX_LEN 128 #define CONFIG_WL_SECTOR_SIZE_4096 1 #define CONFIG_WL_SECTOR_SIZE 4096 #define CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES 16 #define CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT 30 #define CONFIG_WPA_MBEDTLS_CRYPTO 1 /* List of deprecated options */ #define CONFIG_ADC2_DISABLE_DAC CONFIG_ADC_DISABLE_DAC #define CONFIG_BROWNOUT_DET CONFIG_ESP32_BROWNOUT_DET #define CONFIG_BROWNOUT_DET_LVL_SEL_0 CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_0 #define CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG CONFIG_COMPILER_OPTIMIZATION_DEFAULT #define CONFIG_CONSOLE_UART_BAUDRATE CONFIG_ESP_CONSOLE_UART_BAUDRATE #define CONFIG_CONSOLE_UART_DEFAULT CONFIG_ESP_CONSOLE_UART_DEFAULT #define CONFIG_CONSOLE_UART_RX_GPIO CONFIG_ESP_CONSOLE_UART_RX_GPIO #define CONFIG_CONSOLE_UART_TX_GPIO CONFIG_ESP_CONSOLE_UART_TX_GPIO #define CONFIG_ESP32S2_PANIC_PRINT_REBOOT CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT #define CONFIG_ESP32_APPTRACE_DEST_NONE CONFIG_APPTRACE_DEST_NONE #define CONFIG_ESP32_DEFAULT_PTHREAD_CORE_NO_AFFINITY CONFIG_PTHREAD_DEFAULT_CORE_NO_AFFINITY #define CONFIG_ESP32_PANIC_PRINT_REBOOT CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT #define CONFIG_ESP32_PTHREAD_STACK_MIN CONFIG_PTHREAD_STACK_MIN #define CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT CONFIG_PTHREAD_TASK_NAME_DEFAULT #define CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT CONFIG_PTHREAD_TASK_PRIO_DEFAULT #define CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT #define CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC CONFIG_ESP32_RTC_CLK_SRC_INT_RC #define CONFIG_ESP_GRATUITOUS_ARP CONFIG_LWIP_ESP_GRATUITOUS_ARP #define CONFIG_FLASHMODE_DIO CONFIG_ESPTOOLPY_FLASHMODE_DIO #define CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_FOUR #define CONFIG_GARP_TMR_INTERVAL CONFIG_LWIP_GARP_TMR_INTERVAL #define CONFIG_INT_WDT CONFIG_ESP_INT_WDT #define CONFIG_INT_WDT_CHECK_CPU1 CONFIG_ESP_INT_WDT_CHECK_CPU1 #define CONFIG_INT_WDT_TIMEOUT_MS CONFIG_ESP_INT_WDT_TIMEOUT_MS #define CONFIG_IPC_TASK_STACK_SIZE CONFIG_ESP_IPC_TASK_STACK_SIZE #define CONFIG_LOG_BOOTLOADER_LEVEL_INFO CONFIG_BOOTLOADER_LOG_LEVEL_INFO #define CONFIG_MAIN_TASK_STACK_SIZE CONFIG_ESP_MAIN_TASK_STACK_SIZE #define CONFIG_MB_CONTROLLER_NOTIFY_QUEUE_SIZE CONFIG_FMB_CONTROLLER_NOTIFY_QUEUE_SIZE #define CONFIG_MB_CONTROLLER_NOTIFY_TIMEOUT CONFIG_FMB_CONTROLLER_NOTIFY_TIMEOUT #define CONFIG_MB_CONTROLLER_STACK_SIZE CONFIG_FMB_CONTROLLER_STACK_SIZE #define CONFIG_MB_EVENT_QUEUE_TIMEOUT CONFIG_FMB_EVENT_QUEUE_TIMEOUT #define CONFIG_MB_MASTER_DELAY_MS_CONVERT CONFIG_FMB_MASTER_DELAY_MS_CONVERT #define CONFIG_MB_MASTER_TIMEOUT_MS_RESPOND CONFIG_FMB_MASTER_TIMEOUT_MS_RESPOND #define CONFIG_MB_QUEUE_LENGTH CONFIG_FMB_QUEUE_LENGTH #define CONFIG_MB_SERIAL_BUF_SIZE CONFIG_FMB_SERIAL_BUF_SIZE #define CONFIG_MB_SERIAL_TASK_PRIO CONFIG_FMB_SERIAL_TASK_PRIO #define CONFIG_MB_SERIAL_TASK_STACK_SIZE CONFIG_FMB_SERIAL_TASK_STACK_SIZE #define CONFIG_MB_TIMER_GROUP CONFIG_FMB_TIMER_GROUP #define CONFIG_MB_TIMER_INDEX CONFIG_FMB_TIMER_INDEX #define CONFIG_MB_TIMER_PORT_ENABLED CONFIG_FMB_TIMER_PORT_ENABLED #define CONFIG_MONITOR_BAUD_115200B CONFIG_ESPTOOLPY_MONITOR_BAUD_115200B #define CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE #define CONFIG_OPTIMIZATION_LEVEL_DEBUG CONFIG_COMPILER_OPTIMIZATION_DEFAULT #define CONFIG_POST_EVENTS_FROM_IRAM_ISR CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR #define CONFIG_POST_EVENTS_FROM_ISR CONFIG_ESP_EVENT_POST_FROM_ISR #define CONFIG_REDUCE_PHY_TX_POWER CONFIG_ESP32_REDUCE_PHY_TX_POWER #define CONFIG_SEMIHOSTFS_HOST_PATH_MAX_LEN CONFIG_VFS_SEMIHOSTFS_HOST_PATH_MAX_LEN #define CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS #define CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS #define CONFIG_STACK_CHECK_NONE CONFIG_COMPILER_STACK_CHECK_MODE_NONE #define CONFIG_SUPPORT_TERMIOS CONFIG_VFS_SUPPORT_TERMIOS #define CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT #define CONFIG_SYSTEM_EVENT_QUEUE_SIZE CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE #define CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE #define CONFIG_TASK_WDT CONFIG_ESP_TASK_WDT #define CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0 CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0 #define CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1 CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1 #define CONFIG_TASK_WDT_TIMEOUT_S CONFIG_ESP_TASK_WDT_TIMEOUT_S #define CONFIG_TCPIP_RECVMBOX_SIZE CONFIG_LWIP_TCPIP_RECVMBOX_SIZE #define CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY #define CONFIG_TCPIP_TASK_STACK_SIZE CONFIG_LWIP_TCPIP_TASK_STACK_SIZE #define CONFIG_TCP_MAXRTX CONFIG_LWIP_TCP_MAXRTX #define CONFIG_TCP_MSL CONFIG_LWIP_TCP_MSL #define CONFIG_TCP_MSS CONFIG_LWIP_TCP_MSS #define CONFIG_TCP_OVERSIZE_MSS CONFIG_LWIP_TCP_OVERSIZE_MSS #define CONFIG_TCP_QUEUE_OOSEQ CONFIG_LWIP_TCP_QUEUE_OOSEQ #define CONFIG_TCP_RECVMBOX_SIZE CONFIG_LWIP_TCP_RECVMBOX_SIZE #define CONFIG_TCP_SND_BUF_DEFAULT CONFIG_LWIP_TCP_SND_BUF_DEFAULT #define CONFIG_TCP_SYNMAXRTX CONFIG_LWIP_TCP_SYNMAXRTX #define CONFIG_TCP_WND_DEFAULT CONFIG_LWIP_TCP_WND_DEFAULT #define CONFIG_TIMER_QUEUE_LENGTH CONFIG_FREERTOS_TIMER_QUEUE_LENGTH #define CONFIG_TIMER_TASK_PRIORITY CONFIG_FREERTOS_TIMER_TASK_PRIORITY #define CONFIG_TIMER_TASK_STACK_DEPTH CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH #define CONFIG_TIMER_TASK_STACK_SIZE CONFIG_ESP_TIMER_TASK_STACK_SIZE #define CONFIG_TOOLPREFIX CONFIG_SDK_TOOLPREFIX #define CONFIG_UDP_RECVMBOX_SIZE CONFIG_LWIP_UDP_RECVMBOX_SIZE libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-wrover-kit/000077500000000000000000000000001476025525100252175ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-wrover-kit/CMakeLists.txt000066400000000000000000000017341476025525100277640ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) if (ESP_PLATFORM) include($ENV{IDF_PATH}/tools/cmake/project.cmake) project(lws-minimal-esp32 C) enable_testing() target_link_libraries(lws-minimal-esp32.elf websockets) option(LWS_WITH_DRIVERS "With generic drivers for gpio, i2c, display etc" ON) set(LWS_WITH_DRIVERS ON) option(LWS_WITH_SECURE_STREAMS "With secure streams" ON) set(LWS_WITH_SECURE_STREAMS ON) option(LWS_WITH_LWSAC "With lwsac" ON) set(LWS_WITH_LWSAC ON) option(LWS_WITH_STRUCT_JSON "With lws_struct JSON" ON) set(LWS_WITH_STRUCT_JSON ON) option(LWS_WITH_SYS_NTPCLIENT "With ntpclient" ON) set(LWS_WITH_SYS_NTPCLIENT ON) add_subdirectory(libwebsockets) add_test(NAME flashing COMMAND idf.py flash) set_tests_properties(flashing PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} TIMEOUT 120) add_test(NAME boot COMMAND /usr/local/bin/sai-expect) set_tests_properties(boot PROPERTIES DEPENDS flashing TIMEOUT 60) endif() libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-wrover-kit/main/000077500000000000000000000000001476025525100261435ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-wrover-kit/main/CMakeLists.txt000066400000000000000000000004771476025525100307130ustar00rootroot00000000000000idf_component_register(SRCS lws-minimal-esp32.c devices.c INCLUDE_DIRS "../libwebsockets/include;${IDF_PATH}/components/spi_flash/include;${IDF_PATH}/components/nvs_flash/include;${IDF_PATH}/components/mdns/include") target_link_libraries(${COMPONENT_LIB} websockets) include_directories(../build/libwebsockets) libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-wrover-kit/main/cat-565.h000066400000000000000000034554001476025525100274130ustar00rootroot000000000000000x62, 0xEB, 0x5A, 0xAA, 0x52, 0x8A, 0x52, 0x69, 0x5A, 0xAA, 0x62, 0xEB, 0x73, 0x0C, 0x72, 0xEB, 0x52, 0x08, 0x31, 0x24, 0x4A, 0x08, 0x4A, 0x07, 0x41, 0xE7, 0x39, 0xC6, 0x39, 0xC6, 0x31, 0x85, 0x29, 0x44, 0x21, 0x24, 0x31, 0x85, 0x41, 0xE7, 0x41, 0xE7, 0x39, 0x85, 0x41, 0xA6, 0x39, 0x45, 0x31, 0x24, 0x29, 0x04, 0x20, 0xC3, 0x28, 0xC3, 0x28, 0xC2, 0x28, 0xC2, 0x31, 0x04, 0x49, 0xA6, 0x5A, 0x27, 0x62, 0x48, 0x62, 0x48, 0x52, 0x27, 0x39, 0x86, 0x20, 0xE3, 0x29, 0x24, 0x41, 0xE8, 0x39, 0xA6, 0x4A, 0x48, 0x4A, 0x49, 0x39, 0xC7, 0x31, 0x65, 0x29, 0x24, 0x6B, 0x2C, 0x4A, 0x29, 0x52, 0x69, 0x84, 0x10, 0x63, 0x0B, 0x52, 0x6A, 0x62, 0xEB, 0x4A, 0x08, 0x6B, 0x0C, 0x6B, 0x2C, 0x5A, 0xAB, 0x39, 0xC7, 0x31, 0x86, 0x73, 0xAF, 0xDE, 0xFD, 0xDE, 0xDC, 0xBD, 0xF8, 0x94, 0x92, 0x4A, 0x28, 0x29, 0x44, 0x39, 0xE6, 0x4A, 0x48, 0x6B, 0x2C, 0x52, 0x8A, 0x73, 0x6D, 0x6B, 0x4D, 0x52, 0x69, 0x52, 0x69, 0x84, 0x10, 0xAD, 0x14, 0xBD, 0xB6, 0xC5, 0xF6, 0xC5, 0xB4, 0xA4, 0xAF, 0xA4, 0xAE, 0xA4, 0x8E, 0xA4, 0xAF, 0xB5, 0x10, 0xB5, 0x30, 0xB5, 0x30, 0xBD, 0x51, 0xBD, 0x51, 0xBD, 0x51, 0xBD, 0x52, 0xBD, 0x72, 0xBD, 0x72, 0xB5, 0x31, 0xAC, 0xF0, 0xB5, 0x31, 0xB5, 0x31, 0xB5, 0x31, 0xB5, 0x31, 0xB5, 0x31, 0xB5, 0x31, 0xAD, 0x11, 0xAD, 0x10, 0xB5, 0x10, 0xC5, 0x92, 0xC5, 0x51, 0xAC, 0xD0, 0x9C, 0x8E, 0x9C, 0x6E, 0x94, 0x2E, 0x8B, 0xED, 0x7B, 0xAC, 0x7B, 0x8C, 0x7B, 0x8C, 0x83, 0xAC, 0x8C, 0x0D, 0x94, 0x4D, 0xB5, 0x10, 0x94, 0x0D, 0x83, 0xCC, 0x7B, 0x8B, 0x73, 0x6B, 0x84, 0x0E, 0x94, 0x6F, 0x83, 0xCD, 0x7B, 0xAD, 0x7B, 0xCD, 0x8C, 0x2F, 0x8C, 0x2F, 0xDE, 0xB8, 0xDE, 0xD9, 0xC6, 0x16, 0x9C, 0xB0, 0xAD, 0x53, 0xAD, 0x53, 0xAD, 0x53, 0xAD, 0x52, 0xAD, 0x52, 0xB5, 0x93, 0xCE, 0x35, 0xA4, 0xAF, 0xAC, 0xCF, 0xBD, 0x93, 0x8C, 0x4F, 0x8C, 0x4F, 0x73, 0xAD, 0x7B, 0xAF, 0x4A, 0x29, 0x52, 0x8A, 0x6B, 0x4D, 0x73, 0xAE, 0x7B, 0xCE, 0x9C, 0xB1, 0xA5, 0x33, 0x94, 0xB1, 0x8C, 0x70, 0x94, 0x90, 0x84, 0x2F, 0x8C, 0x4F, 0x84, 0x2F, 0x6B, 0x6D, 0x84, 0x2F, 0x8C, 0x4F, 0x84, 0x0E, 0x8C, 0x70, 0x9C, 0xF2, 0xBD, 0x94, 0xAD, 0x53, 0xAD, 0x12, 0xBD, 0x94, 0xB5, 0x73, 0xAD, 0x53, 0xC5, 0xF6, 0xB5, 0xB4, 0xAD, 0x33, 0xAD, 0x33, 0xA5, 0x32, 0xB5, 0x73, 0x9C, 0xF1, 0xAD, 0x33, 0xBD, 0xD5, 0xAD, 0x53, 0xB5, 0x94, 0xB5, 0x74, 0xB5, 0x94, 0xB5, 0x53, 0xBD, 0xB5, 0xA5, 0x12, 0x7B, 0xAD, 0xAD, 0x32, 0x9C, 0xB0, 0xAD, 0x53, 0xA5, 0x11, 0x9C, 0xB0, 0xAD, 0x32, 0xA4, 0xF1, 0xA5, 0x12, 0x94, 0x4F, 0x83, 0xEE, 0x83, 0xED, 0x8C, 0x2E, 0x94, 0x4F, 0x94, 0x8F, 0x94, 0x6F, 0x94, 0x6F, 0x94, 0x4F, 0xA5, 0x11, 0xAD, 0x31, 0xAD, 0x32, 0xB5, 0x52, 0xA4, 0xF0, 0xAD, 0x31, 0xB5, 0x51, 0xAD, 0x31, 0xAD, 0x31, 0xAD, 0x11, 0xAC, 0xF1, 0xA4, 0xF1, 0x9C, 0xB0, 0xAD, 0x52, 0xBD, 0xB3, 0xAD, 0x32, 0xAC, 0xF1, 0xD5, 0xB3, 0xD5, 0x72, 0xCD, 0x71, 0xBD, 0x10, 0xB5, 0x10, 0xB5, 0x11, 0xB5, 0x10, 0xAC, 0xF0, 0xAC, 0xF0, 0xAC, 0xD0, 0xAC, 0xD0, 0xBD, 0x52, 0xC5, 0xB3, 0xC5, 0x92, 0xCD, 0xF3, 0xCD, 0xF3, 0xC5, 0x92, 0xC5, 0xB3, 0xBD, 0x72, 0xC5, 0xB3, 0xC5, 0xB3, 0xAC, 0xF0, 0xB5, 0x52, 0xB5, 0x53, 0xB5, 0x52, 0xD6, 0x35, 0xCD, 0xD3, 0xBD, 0x72, 0xCD, 0xB3, 0xCD, 0xD4, 0xC5, 0xB3, 0xC5, 0xB3, 0xBD, 0x73, 0xB5, 0x73, 0xA4, 0xF1, 0xA4, 0xF2, 0x94, 0x70, 0xA4, 0xF1, 0xA4, 0xF2, 0x94, 0x90, 0x94, 0x71, 0x8C, 0x70, 0x9C, 0xD2, 0xA5, 0x13, 0xA4, 0xF3, 0x8C, 0x50, 0x8C, 0x50, 0x8C, 0x30, 0x7B, 0xCF, 0x6B, 0x4D, 0x4A, 0x6A, 0x29, 0x66, 0x21, 0x25, 0x21, 0x04, 0x18, 0xE4, 0x18, 0xE4, 0x29, 0x66, 0x4A, 0x6A, 0x6B, 0x6E, 0x8C, 0x51, 0xA4, 0xF4, 0xA5, 0x14, 0xA5, 0x35, 0xA5, 0x14, 0x9C, 0xD3, 0x8C, 0x51, 0x7B, 0xEF, 0x7B, 0xAE, 0x84, 0x10, 0x84, 0x10, 0x6B, 0x2C, 0x7B, 0xAE, 0x84, 0x10, 0x84, 0x32, 0x7C, 0x12, 0x73, 0xD1, 0x7C, 0x12, 0x8C, 0x94, 0x94, 0xD5, 0x8C, 0xB5, 0x94, 0xD5, 0x94, 0xD5, 0x94, 0xD5, 0x94, 0xF5, 0x8C, 0xD5, 0x94, 0xD5, 0x95, 0x16, 0x94, 0xD5, 0x84, 0x73, 0x84, 0x32, 0x84, 0x32, 0x73, 0xD0, 0x7B, 0xD0, 0x84, 0x31, 0x7B, 0xF0, 0x73, 0xAF, 0x73, 0x8F, 0x6B, 0x4E, 0x4A, 0x28, 0x42, 0x07, 0x4A, 0x07, 0x41, 0xE7, 0x4A, 0x08, 0x41, 0xE7, 0x73, 0x4C, 0x7B, 0x4C, 0x31, 0x45, 0x29, 0x03, 0x41, 0xE6, 0x39, 0xA6, 0x39, 0xA6, 0x31, 0x85, 0x39, 0xC6, 0x42, 0x07, 0x39, 0xE7, 0x29, 0x64, 0x31, 0x85, 0x21, 0x03, 0x29, 0x04, 0x31, 0x65, 0x42, 0x07, 0x29, 0x24, 0x31, 0x45, 0x20, 0xC3, 0x28, 0xE3, 0x39, 0x85, 0x5A, 0x28, 0x72, 0xCA, 0x8B, 0x4C, 0x8B, 0x4B, 0xB4, 0x4F, 0xC4, 0xF1, 0xC4, 0xD1, 0xCD, 0x12, 0xB4, 0xB1, 0xA4, 0x71, 0xA4, 0xB2, 0x52, 0x69, 0x18, 0xE3, 0x18, 0xE3, 0x10, 0xA2, 0x18, 0xC3, 0x29, 0x24, 0x41, 0xE7, 0x63, 0x0C, 0x21, 0x24, 0x39, 0xA7, 0x6B, 0x4D, 0x5A, 0xCB, 0x52, 0x69, 0x5A, 0xAA, 0x4A, 0x28, 0x4A, 0x49, 0x42, 0x07, 0x41, 0xE7, 0x39, 0xA6, 0x6B, 0x6D, 0xDE, 0xFD, 0xDE, 0xFD, 0xC6, 0x3A, 0xA4, 0xF4, 0x52, 0x6A, 0x29, 0x45, 0x31, 0x85, 0x52, 0x89, 0x63, 0x2C, 0x6B, 0x2C, 0x31, 0x66, 0x42, 0x28, 0x63, 0x0B, 0x4A, 0x69, 0x39, 0xC7, 0x8C, 0x31, 0xA4, 0xF4, 0xCE, 0x18, 0xD6, 0x38, 0xE6, 0xDA, 0xC5, 0x94, 0x9C, 0x6F, 0x94, 0x4F, 0x9C, 0x6F, 0xA4, 0xD0, 0xBD, 0x92, 0xBD, 0x72, 0xB5, 0x31, 0xB5, 0x31, 0xB5, 0x31, 0xB5, 0x31, 0x94, 0x0D, 0x94, 0x2D, 0xA4, 0xAF, 0xB5, 0x10, 0xAC, 0xF0, 0x83, 0xAB, 0x94, 0x0C, 0x94, 0x2D, 0x94, 0x2D, 0x9C, 0x4E, 0x9C, 0x6E, 0x9C, 0x6E, 0xAC, 0xCF, 0xAC, 0xCF, 0xAC, 0xCF, 0xAC, 0xCF, 0xB5, 0x10, 0xB5, 0x30, 0xB5, 0x10, 0xB5, 0x11, 0xAC, 0xF0, 0xB5, 0x11, 0xA4, 0xD0, 0xA4, 0xD0, 0xB5, 0x11, 0xB4, 0xEF, 0xB5, 0x0F, 0xAC, 0xCF, 0xB4, 0xF0, 0xB5, 0x10, 0xBD, 0x11, 0xB5, 0x31, 0xBD, 0x51, 0xB5, 0x30, 0xB5, 0x10, 0xB5, 0x10, 0xAD, 0x11, 0xA4, 0xD0, 0xA4, 0x8F, 0xA4, 0xAF, 0xA4, 0xCF, 0x9C, 0x8E, 0x9C, 0x6E, 0xA4, 0xAF, 0x9C, 0x8E, 0x94, 0x2D, 0x9C, 0xAF, 0xB5, 0x72, 0x9C, 0x6E, 0xAC, 0xEF, 0xA4, 0xCF, 0xB5, 0x31, 0x9C, 0xAF, 0x8C, 0x2E, 0x6B, 0x0B, 0x41, 0xE7, 0x20, 0xE4, 0x4A, 0x49, 0x73, 0x8E, 0x6B, 0x2C, 0x63, 0x2B, 0x9C, 0xF1, 0xCE, 0x56, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0xB4, 0xB5, 0xB4, 0xAD, 0x32, 0xA5, 0x12, 0x94, 0x70, 0xBD, 0xB4, 0xB5, 0x73, 0x94, 0x90, 0x84, 0x2F, 0xA4, 0xF2, 0xC5, 0xF5, 0xB5, 0x94, 0xB5, 0x94, 0xDE, 0xB8, 0xD6, 0x98, 0xC6, 0x16, 0xAD, 0x32, 0xCE, 0x37, 0xB5, 0xB4, 0xC6, 0x16, 0xC6, 0x37, 0xAD, 0x53, 0xA5, 0x33, 0xA5, 0x33, 0xB5, 0x94, 0xB5, 0x94, 0xC5, 0xF6, 0xC6, 0x16, 0xC6, 0x37, 0xC6, 0x16, 0xBD, 0xD5, 0xA4, 0xF2, 0x7B, 0xAC, 0xAD, 0x12, 0xAD, 0x33, 0x9C, 0x90, 0x9C, 0x90, 0x94, 0x4F, 0x94, 0x6F, 0xA4, 0xD0, 0xA5, 0x11, 0x94, 0x4F, 0xA4, 0xF1, 0xA4, 0xF1, 0xAD, 0x52, 0xAD, 0x32, 0xA4, 0xF1, 0xA4, 0xD1, 0x9C, 0x90, 0x8C, 0x4E, 0x9C, 0xB0, 0xA4, 0xD0, 0xA4, 0xF0, 0xA4, 0xCF, 0x9C, 0xAF, 0xA4, 0xF0, 0xAD, 0x31, 0xB5, 0x51, 0xAD, 0x31, 0xA5, 0x11, 0xA4, 0xF0, 0xA5, 0x11, 0xAD, 0x11, 0xBD, 0x93, 0xAD, 0x31, 0xAD, 0x32, 0xAD, 0x11, 0xDD, 0xF4, 0xDD, 0xB3, 0xCD, 0x71, 0xC5, 0x30, 0xBD, 0x51, 0xC5, 0x72, 0xB5, 0x31, 0xB5, 0x31, 0xB5, 0x11, 0xAD, 0x10, 0x9C, 0x8F, 0xAC, 0xF0, 0xB5, 0x11, 0xB5, 0x31, 0xBD, 0x72, 0xC5, 0x92, 0xBD, 0x72, 0xC5, 0xB2, 0xC5, 0x92, 0xC5, 0xB3, 0xB5, 0x31, 0xB5, 0x72, 0xB5, 0x52, 0xBD, 0x73, 0xCD, 0xD4, 0xDE, 0x55, 0xCD, 0xD3, 0xBD, 0x71, 0xC5, 0x92, 0xCD, 0xB3, 0xCD, 0xD3, 0xDE, 0x35, 0xDE, 0x55, 0xDE, 0x55, 0xCD, 0xF4, 0xB5, 0x32, 0xA4, 0xD0, 0xAD, 0x12, 0xBD, 0x73, 0xC5, 0xD4, 0xCE, 0x16, 0xC5, 0xD6, 0x94, 0x70, 0x8C, 0x50, 0x94, 0xB2, 0x8C, 0x50, 0xAD, 0x33, 0xA5, 0x33, 0xA5, 0x13, 0x9C, 0xD2, 0x9C, 0xB2, 0x8C, 0x50, 0x6B, 0x4D, 0x4A, 0x6A, 0x39, 0xE7, 0x29, 0x86, 0x29, 0x45, 0x19, 0x04, 0x18, 0xE4, 0x29, 0x45, 0x42, 0x08, 0x4A, 0x49, 0x5A, 0xEC, 0x73, 0xAF, 0x8C, 0x52, 0x94, 0xB3, 0x9C, 0xD4, 0xB5, 0xB7, 0x9C, 0xD3, 0x9D, 0x14, 0x9C, 0xB3, 0x94, 0x72, 0x94, 0x92, 0x9C, 0xD4, 0xA5, 0x36, 0xAD, 0x76, 0xA5, 0x56, 0x9C, 0xF5, 0x8C, 0x93, 0x84, 0x32, 0x7C, 0x12, 0x7B, 0xF1, 0x73, 0xB0, 0x73, 0xD1, 0x7C, 0x12, 0x84, 0x53, 0x8C, 0x94, 0x84, 0x73, 0x7C, 0x12, 0x73, 0xB0, 0x6B, 0x8F, 0x5A, 0xED, 0x52, 0xCC, 0x52, 0xAC, 0x4A, 0x6B, 0x39, 0xE8, 0x31, 0xA7, 0x29, 0x87, 0x31, 0x65, 0x39, 0xA5, 0x39, 0xA5, 0x39, 0x85, 0x31, 0x85, 0x31, 0x65, 0x94, 0x51, 0xD6, 0x38, 0x83, 0xAE, 0x29, 0x44, 0x31, 0x65, 0x31, 0x65, 0x31, 0x85, 0x31, 0x85, 0x31, 0xA6, 0x39, 0xA6, 0x39, 0xA6, 0x21, 0x03, 0x21, 0x24, 0x21, 0x24, 0x73, 0xAE, 0xAD, 0x55, 0xAD, 0x75, 0xA5, 0x14, 0x8C, 0x51, 0x42, 0x07, 0x41, 0xC7, 0x62, 0x8A, 0x8B, 0x4C, 0x93, 0x6C, 0x9B, 0xAD, 0x72, 0x68, 0x82, 0xEA, 0xC4, 0xD0, 0xBC, 0x70, 0x93, 0x6C, 0x9C, 0x0F, 0xA4, 0x51, 0x6A, 0xCA, 0x20, 0xC2, 0x18, 0xC3, 0x18, 0xC3, 0x18, 0xE3, 0x18, 0xE3, 0x18, 0xC3, 0x29, 0x65, 0x42, 0x07, 0x29, 0x24, 0x29, 0x24, 0x4A, 0x69, 0x5A, 0xCA, 0x42, 0x07, 0x42, 0x08, 0x41, 0xE7, 0x39, 0xC6, 0x31, 0xA6, 0x31, 0xA6, 0x39, 0xA6, 0x8C, 0x72, 0xE7, 0x1D, 0xD6, 0x9B, 0xC6, 0x19, 0x7B, 0xD0, 0x31, 0x86, 0x42, 0x07, 0x4A, 0x48, 0x4A, 0x69, 0x4A, 0x28, 0x63, 0x0B, 0x31, 0x65, 0x31, 0xA6, 0x52, 0x8A, 0x42, 0x28, 0x42, 0x08, 0x5A, 0xCB, 0x8C, 0x10, 0xB5, 0x55, 0xBD, 0x96, 0xE6, 0xBA, 0xCD, 0xF7, 0x7B, 0x8D, 0x83, 0xEE, 0x63, 0x0A, 0x8C, 0x4F, 0xAD, 0x11, 0xAD, 0x51, 0x9C, 0x8F, 0xB5, 0x72, 0xBD, 0xB3, 0x94, 0x4F, 0x73, 0x8D, 0x84, 0x0F, 0x8C, 0x6F, 0x94, 0x6F, 0xA4, 0xF0, 0x7B, 0xAB, 0x9C, 0x8F, 0x94, 0x8F, 0x94, 0x6E, 0x94, 0x4E, 0x83, 0xEC, 0x83, 0xCC, 0x83, 0xCB, 0x83, 0xCC, 0x7B, 0x8B, 0x7B, 0x8A, 0x83, 0xCB, 0x83, 0x8B, 0x83, 0xAB, 0x83, 0xCB, 0x9C, 0x6E, 0xA4, 0x8E, 0x94, 0x2D, 0x7B, 0x8B, 0x73, 0x2A, 0x94, 0x2D, 0xAD, 0x10, 0xD6, 0x55, 0xD6, 0x55, 0xD6, 0x14, 0xD6, 0x14, 0xD5, 0xF4, 0xC5, 0x92, 0xB5, 0x30, 0xB5, 0x10, 0xAC, 0xF0, 0xA4, 0xAF, 0xAC, 0xAF, 0xAC, 0xCF, 0xB5, 0x10, 0xB5, 0x10, 0xBD, 0x51, 0xB5, 0x30, 0xB5, 0x10, 0xC5, 0x71, 0xBD, 0x31, 0xBD, 0x30, 0xB5, 0x10, 0xBD, 0x30, 0xBD, 0x50, 0xB5, 0x10, 0xB5, 0x10, 0xB5, 0x10, 0xAC, 0xF0, 0xAC, 0xD0, 0xA4, 0xF0, 0x73, 0x4B, 0x63, 0x2D, 0x84, 0x10, 0x73, 0x8E, 0x7B, 0xAD, 0x9C, 0xB0, 0xA4, 0xAF, 0x9C, 0x6E, 0x9C, 0x6F, 0x94, 0x4E, 0x94, 0x6E, 0x83, 0xCC, 0x83, 0xED, 0x83, 0xED, 0x8C, 0x4E, 0x8C, 0x2E, 0x73, 0x6C, 0x6B, 0x4B, 0x9C, 0xB1, 0xA4, 0xF1, 0x9C, 0xD1, 0x9C, 0xB1, 0xBD, 0xB4, 0xB5, 0x73, 0xA5, 0x12, 0x83, 0xEE, 0xBD, 0xD5, 0xC5, 0xF5, 0xB5, 0x94, 0xA4, 0xF1, 0xA5, 0x12, 0xA4, 0xF2, 0xAD, 0x53, 0xC6, 0x16, 0xC6, 0x16, 0xCE, 0x36, 0xCE, 0x57, 0xC5, 0xF6, 0xC5, 0xF5, 0xCE, 0x57, 0x9C, 0xD1, 0x8C, 0x0E, 0xA5, 0x12, 0xAD, 0x32, 0xAD, 0x12, 0x94, 0x6F, 0x94, 0x6F, 0x9C, 0xB0, 0xA4, 0xF1, 0x9C, 0xB0, 0x83, 0xED, 0xAD, 0x32, 0xAD, 0x52, 0xA5, 0x12, 0x9C, 0xD1, 0x9C, 0xB0, 0x94, 0x8F, 0xA4, 0xF1, 0x94, 0x8F, 0xAD, 0x32, 0xB5, 0x72, 0xA4, 0xF0, 0xAD, 0x31, 0xAD, 0x11, 0xAD, 0x31, 0xB5, 0x51, 0xA4, 0xF0, 0xA5, 0x10, 0x9C, 0xAF, 0x94, 0x6E, 0x8C, 0x2D, 0x8C, 0x0D, 0x94, 0x4E, 0x83, 0xAB, 0xB5, 0x53, 0xB5, 0x52, 0xDD, 0xD3, 0xDD, 0xF3, 0xD5, 0xB3, 0xCD, 0x92, 0xC5, 0x72, 0xC5, 0x93, 0xBD, 0x52, 0xBD, 0x52, 0xB5, 0x31, 0xAD, 0x10, 0xAD, 0x11, 0xAD, 0x11, 0xAC, 0xF0, 0xAC, 0xF0, 0xB5, 0x31, 0xC5, 0x92, 0xB5, 0x31, 0xBD, 0x72, 0xBD, 0x51, 0xC5, 0xB3, 0xC5, 0x93, 0xC5, 0xD4, 0xC5, 0xB3, 0xBD, 0x72, 0xDE, 0x55, 0xD5, 0xF3, 0xD5, 0xF4, 0xC5, 0x92, 0xC5, 0x92, 0xCD, 0x92, 0xC5, 0x92, 0xD6, 0x14, 0xD6, 0x14, 0xDE, 0x34, 0xD6, 0x14, 0xC5, 0x93, 0xB5, 0x10, 0xAC, 0xF1, 0xB5, 0x32, 0xCD, 0xF5, 0xBD, 0xB4, 0xD6, 0x57, 0xD6, 0x78, 0xBD, 0xB5, 0xAD, 0x53, 0x7B, 0xCE, 0x84, 0x2F, 0xA4, 0xF3, 0xAD, 0x54, 0x94, 0x91, 0x83, 0xEF, 0x8C, 0x50, 0x94, 0x91, 0x9C, 0xB2, 0x8C, 0x50, 0x7B, 0xEF, 0x73, 0x6D, 0x5A, 0xEB, 0x31, 0x86, 0x21, 0x05, 0x18, 0xE4, 0x18, 0xE4, 0x21, 0x05, 0x29, 0x46, 0x29, 0x87, 0x3A, 0x08, 0x63, 0x0D, 0x84, 0x31, 0x73, 0x8F, 0x63, 0x4D, 0x6B, 0x6E, 0x73, 0xAF, 0x73, 0x8F, 0x73, 0x8F, 0x73, 0x6E, 0x73, 0x8E, 0x6B, 0x4D, 0x73, 0xAF, 0x9C, 0xD4, 0x9D, 0x15, 0x9D, 0x15, 0x9C, 0xF5, 0x9C, 0xF4, 0x9C, 0xF4, 0x9D, 0x15, 0x9D, 0x15, 0x9C, 0xD5, 0x9D, 0x15, 0xA5, 0x56, 0xAD, 0x97, 0xB5, 0xB8, 0xB5, 0xD9, 0xB5, 0xB8, 0xA5, 0x56, 0x94, 0xD4, 0x84, 0x53, 0x84, 0x32, 0x7B, 0xF1, 0x52, 0xAA, 0x52, 0xCB, 0x52, 0xCA, 0x4A, 0x49, 0x29, 0x24, 0x31, 0x86, 0x7B, 0xCE, 0xCD, 0xF7, 0xA4, 0x71, 0x39, 0x85, 0x21, 0x04, 0x39, 0xC6, 0x29, 0x65, 0x21, 0x24, 0x29, 0x44, 0x39, 0xC6, 0x4A, 0x48, 0x31, 0xA6, 0x31, 0x86, 0x4A, 0x48, 0x7B, 0xAE, 0x9C, 0xB2, 0x94, 0x71, 0x9C, 0xB2, 0x6B, 0x0B, 0x29, 0x03, 0x29, 0x44, 0x62, 0x89, 0x93, 0x6C, 0x83, 0x0A, 0x93, 0x4B, 0x83, 0x0A, 0x41, 0x64, 0x62, 0x89, 0x6A, 0x89, 0x52, 0x48, 0x62, 0xCA, 0x41, 0xE7, 0x5A, 0xCA, 0x4A, 0x28, 0x21, 0x24, 0x29, 0x65, 0x21, 0x24, 0x21, 0x24, 0x21, 0x24, 0x18, 0xC3, 0x18, 0xE3, 0x29, 0x45, 0x21, 0x04, 0x29, 0x44, 0x39, 0xE7, 0x39, 0xC6, 0x39, 0xC6, 0x31, 0xA6, 0x31, 0x85, 0x29, 0x85, 0x31, 0x85, 0x31, 0xC6, 0xB5, 0xD7, 0xE7, 0x5E, 0xD6, 0xBC, 0xB5, 0x77, 0x5A, 0xCB, 0x52, 0x8A, 0x42, 0x28, 0x31, 0x85, 0x42, 0x07, 0x39, 0xE7, 0x5A, 0xEB, 0x39, 0xC7, 0x31, 0x86, 0x39, 0xE7, 0x42, 0x28, 0x63, 0x0C, 0x62, 0xCB, 0x7B, 0xAE, 0xA4, 0xB2, 0xA4, 0xB2, 0xBD, 0x75, 0xDE, 0x79, 0xC5, 0xF7, 0x7B, 0x8D, 0x8C, 0x50, 0xBD, 0xB6, 0x4A, 0x28, 0x84, 0x0E, 0xCE, 0x36, 0xD6, 0x97, 0xD6, 0x56, 0x94, 0x70, 0x73, 0x8D, 0x8C, 0x70, 0x94, 0xB1, 0x94, 0x90, 0xAD, 0x11, 0x7B, 0x6B, 0xA4, 0xD0, 0xA4, 0xF0, 0x94, 0x6F, 0x94, 0x4E, 0x8C, 0x0D, 0x8C, 0x0D, 0x83, 0xCC, 0x8C, 0x2D, 0x94, 0x8F, 0x9C, 0x8F, 0x8C, 0x0C, 0x8C, 0x0D, 0x94, 0x6E, 0x94, 0x2D, 0xAC, 0xF0, 0x94, 0x0D, 0x94, 0x4E, 0xAD, 0x11, 0x9C, 0xD0, 0x94, 0x6F, 0x8C, 0x0D, 0xA5, 0x10, 0xD6, 0x55, 0xD6, 0x35, 0xC5, 0xB2, 0xD6, 0x35, 0xCD, 0xF4, 0x9C, 0x8E, 0x9C, 0x6F, 0x94, 0x2E, 0x94, 0x4E, 0xA4, 0xAF, 0xB5, 0x11, 0xAC, 0xF0, 0xB5, 0x52, 0xB5, 0x31, 0xCE, 0x14, 0xCD, 0xD3, 0xBD, 0x51, 0x94, 0x0C, 0x9C, 0x8E, 0xAD, 0x10, 0xAC, 0xCF, 0xAC, 0xEF, 0xB5, 0x51, 0xAC, 0xCF, 0x94, 0x4D, 0x8C, 0x0C, 0x94, 0x2D, 0xAC, 0xD0, 0xA4, 0xF2, 0x9C, 0xB3, 0x9C, 0xF3, 0x84, 0x0F, 0x8C, 0x0E, 0xA4, 0xD0, 0xA4, 0xAF, 0xA4, 0x8F, 0xA4, 0xAF, 0xAC, 0xF0, 0xAC, 0xF0, 0xAC, 0xF0, 0xBD, 0x73, 0xB5, 0x32, 0xB5, 0x73, 0xB5, 0x73, 0xAD, 0x53, 0xB5, 0x94, 0xBD, 0xD5, 0xB5, 0xB4, 0xBD, 0x94, 0xB5, 0x94, 0xAD, 0x53, 0xAD, 0x53, 0xAD, 0x33, 0xAD, 0x33, 0xA4, 0xD1, 0x94, 0x90, 0x94, 0x4F, 0x9C, 0x90, 0xA4, 0xD1, 0xA4, 0xD1, 0x9C, 0xB1, 0xA4, 0xD1, 0x9C, 0xB0, 0x9C, 0xB1, 0xA4, 0xF1, 0x9C, 0xB0, 0x94, 0x6F, 0x94, 0x70, 0x83, 0xED, 0x73, 0x6C, 0xA4, 0xD1, 0x8C, 0x0E, 0x8C, 0x0E, 0x7B, 0xAC, 0x7B, 0xAC, 0x7B, 0xAC, 0x83, 0xED, 0x84, 0x0E, 0x6B, 0x4B, 0x73, 0x6B, 0x9C, 0xB0, 0x8C, 0x2E, 0x62, 0xEA, 0x84, 0x0E, 0x8C, 0x4E, 0xAD, 0x32, 0xB5, 0x53, 0xB5, 0x93, 0xBD, 0x93, 0xAD, 0x11, 0xBD, 0x93, 0xBD, 0x93, 0xBD, 0xB3, 0xBD, 0xB3, 0xBD, 0x92, 0xB5, 0x51, 0xA4, 0xF0, 0x94, 0x8E, 0x84, 0x0C, 0x7B, 0x8B, 0x7B, 0xAB, 0x83, 0xCC, 0xB5, 0x73, 0xAD, 0x11, 0xDE, 0x56, 0xCD, 0xB3, 0xBD, 0x51, 0xB5, 0x31, 0xB5, 0x31, 0xBD, 0x52, 0xB5, 0x31, 0xB5, 0x52, 0xB5, 0x72, 0xBD, 0x93, 0xB5, 0x72, 0xBD, 0x93, 0xB5, 0x52, 0xBD, 0x72, 0xC5, 0xB3, 0xCD, 0xD3, 0xC5, 0x93, 0xCD, 0xF4, 0xBD, 0x72, 0xB5, 0x51, 0xB5, 0x51, 0xAD, 0x10, 0xA4, 0xAF, 0xB5, 0x11, 0xCD, 0xF4, 0xD6, 0x14, 0xDE, 0x55, 0xD6, 0x14, 0xCD, 0xB2, 0xD5, 0xD3, 0xC5, 0x71, 0xCD, 0xB3, 0xDE, 0x55, 0xD5, 0xF3, 0xD5, 0xF3, 0xD5, 0xF3, 0xBD, 0x51, 0xA4, 0xAF, 0xB5, 0x31, 0xC5, 0xF4, 0xD6, 0x56, 0xDE, 0xB7, 0xC5, 0xF5, 0xA4, 0xF1, 0xDE, 0xB8, 0xCE, 0x37, 0x94, 0x91, 0x7B, 0xCE, 0x83, 0xEF, 0x84, 0x2F, 0x7B, 0xCF, 0x7B, 0xCE, 0x84, 0x0F, 0x9C, 0xB2, 0xA5, 0x33, 0x9C, 0xD2, 0x94, 0x71, 0x84, 0x30, 0x63, 0x2C, 0x39, 0xE8, 0x29, 0x66, 0x21, 0x25, 0x18, 0xE4, 0x10, 0xC4, 0x18, 0xE4, 0x21, 0x25, 0x29, 0x87, 0x42, 0x29, 0x6B, 0x6E, 0x9C, 0xF4, 0xA5, 0x35, 0xA5, 0x15, 0x9C, 0xF5, 0x94, 0x93, 0x84, 0x32, 0x7C, 0x11, 0x73, 0xAF, 0x6B, 0x4E, 0x63, 0x0C, 0x6B, 0x6E, 0x84, 0x31, 0x7B, 0xCF, 0x6B, 0x2C, 0x83, 0xCF, 0x9C, 0xD3, 0x94, 0x93, 0x94, 0x93, 0x9C, 0xD4, 0xA5, 0x15, 0x9C, 0xF5, 0x94, 0xD4, 0x9C, 0xF4, 0xA5, 0x36, 0xAD, 0x77, 0xB5, 0xB8, 0xB5, 0xB8, 0xAD, 0x77, 0x9D, 0x15, 0xAD, 0x96, 0xAD, 0x96, 0xAD, 0x76, 0xA5, 0x55, 0x8C, 0x72, 0x7C, 0x10, 0x73, 0x4D, 0xCD, 0xD6, 0x8B, 0xAE, 0x62, 0xEB, 0x5A, 0xEB, 0x73, 0xAE, 0x73, 0x8D, 0x73, 0x6D, 0x7B, 0xAE, 0x84, 0x2F, 0x8C, 0x30, 0x84, 0x0F, 0x6B, 0x4C, 0x73, 0x8D, 0x39, 0xA6, 0x31, 0x65, 0x62, 0xCA, 0x5A, 0x69, 0x52, 0x69, 0x39, 0xC7, 0x5A, 0xAA, 0x72, 0xEB, 0x8B, 0x4C, 0x82, 0xEA, 0x82, 0xEA, 0x8B, 0x0B, 0x62, 0x68, 0x83, 0xAD, 0x8B, 0xCD, 0x94, 0x0E, 0x8B, 0xED, 0x7B, 0x8D, 0x8C, 0x2F, 0x83, 0xEE, 0x62, 0xEB, 0x4A, 0x69, 0x31, 0xA6, 0x21, 0x03, 0x29, 0x44, 0x29, 0x45, 0x21, 0x24, 0x29, 0x65, 0x21, 0x24, 0x21, 0x03, 0x29, 0x44, 0x29, 0x64, 0x29, 0x44, 0x29, 0x65, 0x29, 0x44, 0x29, 0x24, 0x29, 0x44, 0x63, 0x0C, 0xE7, 0x3D, 0xDE, 0xDC, 0xAD, 0x35, 0x9C, 0xB3, 0xA5, 0x14, 0x7B, 0xEF, 0x39, 0xA6, 0x21, 0x24, 0x4A, 0x48, 0x41, 0xE7, 0x4A, 0x28, 0x31, 0xA6, 0x42, 0x08, 0x5A, 0xEB, 0x5A, 0xEB, 0x6B, 0x2D, 0x83, 0xEF, 0x94, 0x71, 0xAD, 0x13, 0xA4, 0xB2, 0xBD, 0x55, 0xC5, 0x96, 0xDE, 0x9A, 0xC5, 0xD7, 0xAD, 0x55, 0xEF, 0x7D, 0xC6, 0x18, 0x39, 0xC7, 0x52, 0x68, 0x7B, 0xCD, 0x7B, 0xAD, 0x8C, 0x2F, 0x73, 0x8D, 0x9C, 0xD2, 0xA5, 0x53, 0xB5, 0x73, 0xAC, 0xF1, 0x8C, 0x2E, 0xAD, 0x11, 0xA4, 0xF1, 0x94, 0x8F, 0x94, 0x4E, 0x8C, 0x0D, 0x8C, 0x2D, 0x83, 0xED, 0x8C, 0x0D, 0x9C, 0xB0, 0x9C, 0xB0, 0x8C, 0x0D, 0x83, 0xEC, 0x94, 0x6E, 0x9C, 0x8F, 0xB5, 0x31, 0x8C, 0x0C, 0xB5, 0x93, 0xC6, 0x15, 0xB5, 0x93, 0xBD, 0xB4, 0xAD, 0x32, 0x7B, 0xCC, 0xB5, 0x93, 0xCE, 0x35, 0xB5, 0x72, 0xAD, 0x11, 0xA4, 0xD0, 0xBD, 0x94, 0xBD, 0xD4, 0xBD, 0xD4, 0xB5, 0x93, 0xA5, 0x11, 0xC5, 0xD4, 0x8C, 0x0E, 0x7B, 0xAC, 0x8C, 0x4F, 0xAD, 0x32, 0xAC, 0xEF, 0xC5, 0x51, 0x83, 0x6A, 0x8C, 0x6F, 0xB5, 0x93, 0x8C, 0x4E, 0x94, 0x6F, 0x9C, 0xB0, 0x94, 0x4E, 0x9C, 0x90, 0x94, 0x4E, 0xA4, 0xF1, 0xA4, 0xD1, 0xB5, 0x54, 0xA5, 0x35, 0xA5, 0x14, 0x84, 0x10, 0x6B, 0x4B, 0x94, 0x4E, 0xAD, 0x11, 0xAD, 0x11, 0xBD, 0xB3, 0xBD, 0x93, 0xBD, 0x72, 0xA4, 0xAF, 0x9C, 0x6F, 0x73, 0x6C, 0x63, 0x0B, 0x62, 0xEA, 0x6B, 0x2B, 0x83, 0xEE, 0x9C, 0x90, 0xA4, 0xF1, 0x94, 0x6F, 0x83, 0xEE, 0x8C, 0x2E, 0x94, 0x70, 0x94, 0x70, 0x94, 0x4F, 0xAD, 0x12, 0x9C, 0x90, 0x9C, 0xB1, 0xA4, 0xF1, 0xA4, 0xF1, 0xA4, 0xD1, 0xA4, 0xD1, 0xA4, 0xF2, 0xA4, 0xF2, 0xAD, 0x12, 0xAD, 0x32, 0xA4, 0xF1, 0xAD, 0x33, 0xB5, 0x53, 0xBD, 0x94, 0xAD, 0x53, 0xBD, 0x94, 0xB5, 0x74, 0xBD, 0x94, 0xB5, 0x74, 0xB5, 0x94, 0xB5, 0x74, 0xBD, 0x95, 0xBD, 0xB5, 0xB5, 0x94, 0xA5, 0x12, 0xA4, 0xD2, 0xAD, 0x13, 0xB5, 0x74, 0xAD, 0x33, 0xA4, 0xF1, 0xA4, 0xD1, 0xA4, 0xF1, 0xA4, 0xF1, 0x9C, 0x90, 0x94, 0x6F, 0x94, 0x4E, 0x94, 0x4E, 0x94, 0x8F, 0x9C, 0x8F, 0xA4, 0xD0, 0xA4, 0xF0, 0xB5, 0x52, 0xAD, 0x31, 0xA4, 0xD0, 0x9C, 0x8F, 0x73, 0x6A, 0x73, 0x4B, 0xB5, 0x53, 0xAD, 0x12, 0xAD, 0x12, 0xAD, 0x32, 0xAD, 0x32, 0xAC, 0xF1, 0xA4, 0xB0, 0x9C, 0xB0, 0x9C, 0xB0, 0x9C, 0xB0, 0x9C, 0x8F, 0x9C, 0xB0, 0xA4, 0xB0, 0xA4, 0xB0, 0x9C, 0x90, 0x9C, 0x6F, 0x9C, 0xB0, 0x9C, 0x8F, 0x94, 0x4E, 0xA4, 0xB0, 0x9C, 0x8F, 0x9C, 0x6E, 0xA4, 0xD0, 0xB5, 0x52, 0x8C, 0x0D, 0xB5, 0x32, 0x9C, 0x6E, 0xAD, 0x11, 0xB5, 0x11, 0xB5, 0x11, 0xB4, 0xF0, 0xB5, 0x11, 0xAC, 0xCF, 0xA4, 0xAF, 0xB5, 0x11, 0xBD, 0x51, 0xBD, 0x31, 0xC5, 0x71, 0xCD, 0xD3, 0xA4, 0xAF, 0xAC, 0xD0, 0xB5, 0x31, 0xBD, 0x93, 0xD6, 0x56, 0xE6, 0xD8, 0xDE, 0xB8, 0xD6, 0x77, 0xC5, 0xD5, 0xAD, 0x13, 0x8C, 0x50, 0x8C, 0x70, 0xBD, 0xF6, 0xC5, 0xF6, 0xA5, 0x33, 0x7B, 0xCE, 0x9C, 0xD2, 0xB5, 0x74, 0xB5, 0x74, 0xAD, 0x54, 0x9C, 0xD2, 0x8C, 0x50, 0x73, 0xAE, 0x63, 0x0B, 0x4A, 0x8A, 0x42, 0x08, 0x31, 0x86, 0x21, 0x25, 0x21, 0x04, 0x18, 0xE4, 0x21, 0x04, 0x31, 0xA7, 0x52, 0x8A, 0x73, 0xCF, 0x84, 0x11, 0x8C, 0x93, 0x94, 0xB4, 0x9C, 0xF5, 0x9C, 0xF5, 0x9D, 0x15, 0xA5, 0x15, 0x9D, 0x15, 0x94, 0x93, 0x84, 0x10, 0x6B, 0x4D, 0x6B, 0x2C, 0x73, 0x4C, 0x8C, 0x2F, 0xA4, 0xF3, 0x9C, 0x91, 0x8C, 0x0F, 0x83, 0xCF, 0x83, 0xCE, 0x7B, 0xCE, 0x7B, 0xCE, 0x7B, 0xCF, 0x7B, 0xCF, 0x7C, 0x10, 0x84, 0x32, 0x8C, 0x93, 0x9C, 0xF5, 0xA5, 0x55, 0xA5, 0x55, 0xA5, 0x55, 0xA5, 0x35, 0x9D, 0x14, 0x8C, 0x92, 0x52, 0x8A, 0x8B, 0xCE, 0x6B, 0x0B, 0x6B, 0x2C, 0x73, 0x8D, 0x73, 0xAD, 0x73, 0x8D, 0x83, 0xEE, 0x84, 0x0E, 0x8C, 0x4F, 0x94, 0x70, 0x94, 0x90, 0x94, 0x70, 0x83, 0xCD, 0x31, 0x65, 0x39, 0xC6, 0x31, 0x85, 0x6B, 0x2B, 0x73, 0x4B, 0x6B, 0x2B, 0x73, 0x4C, 0x5A, 0x68, 0x7A, 0xEB, 0x7A, 0xCA, 0x82, 0xEB, 0x7A, 0xEA, 0x5A, 0x07, 0x62, 0xA9, 0x83, 0x8C, 0x83, 0xAD, 0x8B, 0xEE, 0x8B, 0xEE, 0x94, 0x4F, 0x8B, 0xED, 0x83, 0xED, 0x8C, 0x0E, 0x8C, 0x2E, 0x7B, 0x8C, 0x4A, 0x07, 0x31, 0x85, 0x29, 0x65, 0x29, 0x44, 0x29, 0x65, 0x21, 0x24, 0x19, 0x03, 0x21, 0x24, 0x21, 0x03, 0x21, 0x03, 0x21, 0x03, 0x19, 0x03, 0x21, 0x45, 0xAD, 0x76, 0xE7, 0x1D, 0xBD, 0xD8, 0x5A, 0xAB, 0x6B, 0x4D, 0xA5, 0x35, 0x8C, 0x51, 0x42, 0x08, 0x42, 0x28, 0x84, 0x30, 0x39, 0xC7, 0x42, 0x07, 0x4A, 0x69, 0x4A, 0x49, 0x4A, 0x69, 0x52, 0x8A, 0x4A, 0x6A, 0x4A, 0x29, 0x5A, 0xCB, 0x7B, 0xAE, 0x83, 0xCF, 0x6B, 0x0C, 0xA4, 0x92, 0xC5, 0x95, 0xA4, 0xB2, 0x84, 0x10, 0xD6, 0xBA, 0xE7, 0x3C, 0x9C, 0xD3, 0x39, 0x66, 0x62, 0xCA, 0xBD, 0xB6, 0x8C, 0x50, 0x6B, 0x6D, 0x94, 0xD2, 0xA5, 0x54, 0xBD, 0xB4, 0xA4, 0xD0, 0x9C, 0x8F, 0xA5, 0x11, 0x9C, 0xB0, 0x9C, 0x8F, 0x9C, 0x8F, 0x8C, 0x2E, 0x8C, 0x2E, 0x8C, 0x0D, 0x83, 0xCC, 0x8C, 0x0D, 0x94, 0x6F, 0x8C, 0x2E, 0x83, 0xEC, 0x94, 0x6E, 0x9C, 0x6E, 0xB5, 0x31, 0x83, 0xAB, 0xAD, 0x52, 0xC5, 0xD5, 0xBD, 0xB4, 0xC6, 0x16, 0xBD, 0xB4, 0x83, 0xCD, 0x7B, 0xAD, 0x84, 0x0E, 0x83, 0xED, 0x84, 0x0E, 0xB5, 0x93, 0xC6, 0x15, 0xC6, 0x16, 0xC5, 0xF5, 0xCE, 0x36, 0xC6, 0x15, 0xBD, 0xD4, 0x73, 0xAC, 0x6B, 0x4B, 0x73, 0x8C, 0x94, 0x6F, 0xA4, 0xAF, 0xC5, 0x71, 0x83, 0x6B, 0x9C, 0xD1, 0xB5, 0x93, 0x94, 0x6F, 0x9C, 0xD0, 0x8C, 0x4E, 0x94, 0x8F, 0xA5, 0x12, 0x9C, 0xB0, 0x9C, 0xD1, 0x9C, 0xD1, 0xB5, 0x95, 0xAD, 0x96, 0xA5, 0x35, 0x94, 0x92, 0x73, 0x8D, 0x94, 0x70, 0xB5, 0x52, 0xAD, 0x11, 0xB5, 0x52, 0xAD, 0x31, 0xAD, 0x52, 0xA4, 0xB0, 0xA4, 0xB0, 0x73, 0x6C, 0x8C, 0x2F, 0x94, 0x70, 0x84, 0x0E, 0x83, 0xEE, 0x8C, 0x4F, 0x94, 0x4F, 0x7B, 0xCD, 0x73, 0x4C, 0x94, 0x70, 0xAD, 0x32, 0x9C, 0xD1, 0x9C, 0x90, 0xA4, 0xD1, 0x9C, 0x90, 0xA4, 0xF2, 0xA4, 0xD1, 0xA4, 0xD1, 0x8C, 0x2F, 0x8C, 0x2F, 0x8C, 0x4F, 0x8C, 0x2E, 0x94, 0x70, 0xA4, 0xF2, 0x9C, 0x90, 0xAD, 0x12, 0x8C, 0x0E, 0x8C, 0x0E, 0xA4, 0xF2, 0xAD, 0x12, 0xAD, 0x33, 0xB5, 0x74, 0xB5, 0x94, 0xAD, 0x33, 0xAD, 0x33, 0xAD, 0x33, 0xA4, 0xF2, 0x9C, 0xB1, 0xAD, 0x12, 0xAD, 0x33, 0xB5, 0x74, 0xA5, 0x12, 0xAD, 0x53, 0x9C, 0xD1, 0x9C, 0x90, 0xA4, 0xF1, 0xAD, 0x12, 0xAD, 0x33, 0xAD, 0x32, 0xAD, 0x32, 0xB5, 0x73, 0xBD, 0xB5, 0xBD, 0x94, 0xBD, 0xB4, 0xAD, 0x12, 0xA4, 0xD0, 0xB5, 0x73, 0xAC, 0xF1, 0xA4, 0xF1, 0xAD, 0x12, 0xAD, 0x32, 0xAD, 0x33, 0xAD, 0x33, 0xBD, 0x94, 0xC5, 0xD5, 0xBD, 0xB5, 0xC5, 0xF5, 0xC5, 0xF5, 0xC5, 0xF6, 0xC5, 0xF5, 0xC5, 0xF5, 0xC5, 0xF5, 0xC5, 0xD5, 0xC5, 0xD5, 0xC5, 0xF5, 0xC5, 0xD5, 0xC5, 0xF6, 0xCD, 0xF5, 0xC5, 0xD5, 0xC5, 0xD5, 0xCD, 0xF6, 0xC5, 0xF5, 0xBD, 0xB4, 0xB5, 0x53, 0xB5, 0x53, 0xBD, 0x74, 0xC5, 0xF5, 0xBD, 0x94, 0xB5, 0x53, 0xBD, 0x73, 0xBD, 0x73, 0xBD, 0x74, 0xBD, 0x73, 0xBD, 0x73, 0xB5, 0x73, 0xAD, 0x12, 0xA4, 0xF1, 0xAD, 0x11, 0xAC, 0xF1, 0xA4, 0xAF, 0xA4, 0x8F, 0x9C, 0x6F, 0x94, 0x4E, 0x94, 0x4E, 0x94, 0x4F, 0x9C, 0x90, 0xAD, 0x12, 0xB5, 0x32, 0xA4, 0xB0, 0xA4, 0xF1, 0xA4, 0xF2, 0x7B, 0xCE, 0x83, 0xEE, 0xA4, 0xF1, 0xBD, 0xD5, 0x83, 0xEE, 0x9C, 0xD2, 0x9C, 0xD1, 0x9C, 0xD2, 0xAD, 0x33, 0xB5, 0x74, 0xAD, 0x13, 0x9C, 0xD2, 0x94, 0x91, 0x8C, 0x50, 0x84, 0x30, 0x7B, 0xEF, 0x6B, 0x6E, 0x5A, 0xCB, 0x39, 0xE8, 0x29, 0x45, 0x21, 0x05, 0x19, 0x04, 0x18, 0xE4, 0x21, 0x45, 0x42, 0x08, 0x5A, 0xCB, 0x6B, 0x4E, 0x7B, 0xD0, 0x7C, 0x10, 0x7C, 0x11, 0x84, 0x31, 0x8C, 0x72, 0x94, 0x92, 0x9C, 0xB3, 0x9C, 0xD2, 0x9C, 0xB2, 0x8C, 0x0F, 0x7B, 0xAD, 0x7B, 0x8C, 0x8B, 0xCE, 0x6B, 0x0B, 0x7B, 0x6C, 0x7B, 0xAD, 0x7B, 0x6C, 0x73, 0x4B, 0x63, 0x2B, 0x6B, 0x2D, 0x7B, 0xF0, 0x7B, 0xF0, 0x84, 0x32, 0xA5, 0x55, 0xA5, 0x55, 0xA5, 0x35, 0xA5, 0x34, 0x9C, 0xF4, 0x8C, 0x51, 0x41, 0xE7, 0x42, 0x07, 0x52, 0x68, 0x63, 0x0B, 0x6B, 0x4B, 0x7B, 0xAD, 0x84, 0x0E, 0x8C, 0x4F, 0x94, 0x4F, 0x8C, 0x0E, 0x8C, 0x2D, 0x9C, 0x8E, 0x9C, 0x8E, 0x94, 0x2D, 0x73, 0x2B, 0x73, 0x4B, 0x5A, 0x88, 0x9C, 0x8F, 0xA4, 0xB0, 0xA4, 0x8F, 0xA4, 0x8F, 0x62, 0xAA, 0x5A, 0x28, 0x6A, 0x69, 0x72, 0x8A, 0x7A, 0xCA, 0x6A, 0x8A, 0x62, 0x89, 0x72, 0xEB, 0x83, 0x8D, 0x83, 0x8D, 0xA4, 0x90, 0xAC, 0xF0, 0xAC, 0xF0, 0xB5, 0x11, 0xB5, 0x31, 0xB5, 0x11, 0xB5, 0x31, 0xA4, 0xD0, 0x4A, 0x27, 0x29, 0x65, 0x29, 0x65, 0x31, 0x65, 0x29, 0x44, 0x29, 0x65, 0x21, 0x24, 0x21, 0x24, 0x19, 0x03, 0x18, 0xE3, 0x29, 0x87, 0x94, 0xB4, 0xE7, 0x3E, 0xCE, 0x5A, 0x9C, 0xD4, 0x39, 0xC8, 0x9C, 0xD3, 0xBD, 0xF7, 0x84, 0x31, 0x84, 0x10, 0x9C, 0xF4, 0xA4, 0xF4, 0x42, 0x29, 0x7B, 0xCF, 0xBD, 0xD7, 0xBD, 0xF8, 0xB5, 0x96, 0x84, 0x10, 0x52, 0x8A, 0x52, 0xAA, 0x5A, 0xEB, 0x39, 0xC7, 0x52, 0x8A, 0x62, 0xCB, 0x5A, 0xAA, 0xA4, 0x91, 0x62, 0xAA, 0x73, 0x6E, 0xBD, 0xF8, 0xD6, 0x9A, 0xC6, 0x39, 0x6B, 0x0C, 0xC5, 0xF6, 0xC5, 0xF6, 0x8C, 0x30, 0x6B, 0x6D, 0x8C, 0x71, 0xB5, 0x94, 0xB5, 0x93, 0xA4, 0xD0, 0x9C, 0xAF, 0xB5, 0x93, 0xB5, 0x52, 0xA4, 0xF0, 0xA4, 0xD0, 0xA4, 0xF0, 0xA4, 0xF0, 0x83, 0xCC, 0x83, 0xEC, 0x8C, 0x4E, 0xA4, 0xF0, 0x8C, 0x2E, 0x8C, 0x0D, 0x84, 0x0C, 0x94, 0x6E, 0xB5, 0x10, 0x7B, 0x8B, 0xB5, 0x93, 0xBD, 0xD4, 0xBD, 0xD5, 0xC6, 0x16, 0xBD, 0xD4, 0x8C, 0x2E, 0x7B, 0xCD, 0x84, 0x0E, 0x83, 0xED, 0x94, 0x6F, 0xAD, 0x53, 0xC6, 0x15, 0xCE, 0x36, 0xC6, 0x15, 0xC6, 0x35, 0xCE, 0x36, 0xBD, 0xD4, 0x8C, 0x4F, 0x73, 0x8C, 0x73, 0xAC, 0x7B, 0x8C, 0xA4, 0xB0, 0xBD, 0x51, 0x7B, 0x4A, 0x9C, 0xD1, 0xB5, 0x73, 0x94, 0xB0, 0xAD, 0x32, 0xA5, 0x11, 0x9C, 0xD1, 0xA5, 0x32, 0x9C, 0xD0, 0x9C, 0xD1, 0x9C, 0xD1, 0xB5, 0xB6, 0xAD, 0x55, 0xA5, 0x15, 0x94, 0x92, 0x6B, 0x6C, 0x9D, 0x12, 0xAD, 0x73, 0xAD, 0x73, 0xB5, 0x73, 0xAD, 0x52, 0xB5, 0x94, 0x8C, 0x2E, 0xA4, 0xF1, 0x83, 0xCD, 0x83, 0xEE, 0x8C, 0x4F, 0x84, 0x0E, 0x83, 0xEE, 0x8C, 0x2F, 0x83, 0xEE, 0x7B, 0xAD, 0x7B, 0xAD, 0xA4, 0xF2, 0xAD, 0x53, 0xA5, 0x12, 0xAD, 0x73, 0xA5, 0x12, 0xA4, 0xF2, 0xA4, 0xF2, 0xA5, 0x12, 0xAD, 0x73, 0xA5, 0x32, 0xA5, 0x12, 0xA5, 0x32, 0x94, 0x70, 0x84, 0x0E, 0xA4, 0xD1, 0xA4, 0xD1, 0x9C, 0xB1, 0x9C, 0xB1, 0xB5, 0x94, 0xBD, 0x94, 0xAD, 0x53, 0xB5, 0x53, 0xB5, 0x73, 0xBD, 0xB4, 0xB5, 0x94, 0xB5, 0x73, 0xAD, 0x53, 0xA4, 0xF1, 0xAD, 0x12, 0xB5, 0x74, 0xAD, 0x12, 0xAD, 0x53, 0x9C, 0x90, 0xAC, 0xF2, 0x83, 0xCD, 0x8C, 0x0E, 0x84, 0x0E, 0x6B, 0x2B, 0x8C, 0x4F, 0x8C, 0x2E, 0x84, 0x0E, 0x9C, 0x90, 0x9C, 0xB0, 0x8C, 0x2E, 0x9C, 0xD1, 0x94, 0x6F, 0x84, 0x0E, 0x84, 0x0D, 0x83, 0xCD, 0x83, 0xCC, 0x94, 0x6E, 0xA4, 0xAF, 0x94, 0x4E, 0x94, 0x6E, 0x94, 0x2E, 0x7B, 0x8B, 0x8C, 0x0D, 0x8C, 0x2D, 0x8C, 0x2D, 0x94, 0x2E, 0x8C, 0x2D, 0x83, 0xCC, 0x8C, 0x2E, 0xB5, 0x52, 0x94, 0x6F, 0x8C, 0x2E, 0x8C, 0x0D, 0x94, 0x4E, 0x9C, 0x8F, 0x9C, 0xB0, 0x9C, 0x90, 0x94, 0x4F, 0xA4, 0xD0, 0xAD, 0x11, 0xAD, 0x12, 0xAC, 0xF1, 0xAC, 0xF2, 0xAD, 0x11, 0xAD, 0x11, 0xAD, 0x12, 0xAC, 0xF2, 0xB5, 0x32, 0xB5, 0x53, 0xB5, 0x53, 0xB5, 0x32, 0xBD, 0x73, 0xC5, 0xD5, 0xCE, 0x16, 0xCE, 0x36, 0xBD, 0x73, 0xAC, 0xF1, 0xAD, 0x11, 0xAC, 0xF1, 0xAD, 0x11, 0xAD, 0x11, 0xAD, 0x12, 0xA4, 0xF1, 0xA4, 0xF1, 0xAD, 0x11, 0xAD, 0x11, 0xB5, 0x32, 0xB5, 0x53, 0xB5, 0x74, 0xB5, 0x53, 0xA4, 0xF2, 0x94, 0x4F, 0x94, 0x90, 0xA5, 0x12, 0xAD, 0x13, 0xA5, 0x13, 0x94, 0x70, 0x8C, 0x0F, 0x94, 0x70, 0xA4, 0xF2, 0xB5, 0x54, 0xB5, 0x74, 0xAD, 0x33, 0xA4, 0xF3, 0x9C, 0xD2, 0x94, 0x92, 0x8C, 0x71, 0x73, 0xAE, 0x5A, 0xEB, 0x42, 0x08, 0x29, 0x66, 0x21, 0x45, 0x21, 0x45, 0x29, 0x45, 0x29, 0x45, 0x31, 0xA7, 0x42, 0x49, 0x5A, 0xEC, 0x63, 0x2D, 0x7C, 0x11, 0x84, 0x31, 0x7C, 0x11, 0x73, 0xAE, 0x73, 0x8E, 0x7B, 0xCF, 0x83, 0xEF, 0x83, 0xEF, 0x8C, 0x10, 0x73, 0x6D, 0x52, 0x89, 0x6B, 0x2B, 0x7B, 0x6C, 0x7B, 0x8C, 0x52, 0x89, 0x52, 0x6A, 0x5A, 0xCB, 0x73, 0x6D, 0x7B, 0xD0, 0xA5, 0x55, 0xA5, 0x55, 0xA5, 0x55, 0x9D, 0x14, 0x9C, 0xF4, 0x84, 0x51, 0x4A, 0x28, 0x7B, 0xCD, 0x8C, 0x2E, 0x9C, 0xB0, 0x94, 0x8F, 0x9C, 0x8F, 0xB5, 0x72, 0xBD, 0xB3, 0xC5, 0xD3, 0xBD, 0xB2, 0xBD, 0x51, 0xC5, 0xB2, 0xC5, 0xB2, 0xBD, 0x71, 0xBD, 0x71, 0xBD, 0x51, 0xBD, 0x71, 0xBD, 0x92, 0xBD, 0x72, 0xBD, 0x72, 0xBD, 0x51, 0x94, 0x2E, 0x6B, 0x0B, 0x5A, 0x28, 0x62, 0x69, 0x72, 0xAA, 0x7A, 0xEB, 0x72, 0xCB, 0x83, 0x6D, 0x8B, 0xCE, 0x83, 0x8C, 0x9C, 0x6F, 0xA4, 0x8F, 0xA4, 0xAF, 0x9C, 0x6E, 0xA4, 0x8F, 0xA4, 0x8F, 0xA4, 0xAF, 0xAC, 0xF0, 0x8C, 0x0E, 0x39, 0xA5, 0x31, 0x85, 0x29, 0x24, 0x29, 0x65, 0x29, 0x64, 0x29, 0x64, 0x29, 0x64, 0x52, 0xAB, 0xA5, 0x15, 0xD6, 0xBC, 0xE7, 0x3E, 0xCE, 0x7A, 0xAD, 0x15, 0x6B, 0x2D, 0x7B, 0xCF, 0xA5, 0x14, 0xB5, 0x96, 0xA5, 0x34, 0xAD, 0x76, 0xA5, 0x35, 0x94, 0x92, 0x5A, 0xEB, 0x7B, 0xEF, 0x6B, 0x6D, 0x63, 0x0C, 0x6B, 0x4D, 0x6B, 0x2C, 0x4A, 0x49, 0x63, 0x2C, 0x83, 0xF0, 0x4A, 0x49, 0x42, 0x08, 0x39, 0xA7, 0x52, 0x69, 0x73, 0x6D, 0x62, 0xEC, 0x84, 0x31, 0xA5, 0x35, 0xBD, 0xF8, 0xD6, 0x7A, 0xA5, 0x34, 0xAD, 0x34, 0xC6, 0x17, 0xC5, 0xF8, 0x84, 0x10, 0xAD, 0x54, 0xBD, 0xD5, 0xB5, 0x73, 0xAC, 0xF0, 0xA4, 0xF0, 0xBD, 0x93, 0xBD, 0xB3, 0xAD, 0x32, 0x9C, 0xAF, 0x94, 0x6E, 0xA4, 0xD0, 0x9C, 0x8F, 0x8C, 0x2D, 0x94, 0x6F, 0xA4, 0xD0, 0x94, 0x6F, 0x9C, 0x8F, 0x94, 0x6E, 0x94, 0x8F, 0xAC, 0xF0, 0x83, 0xAC, 0xA5, 0x32, 0xC6, 0x15, 0xC5, 0xF5, 0xCE, 0x36, 0xC5, 0xF5, 0x7B, 0xCD, 0x83, 0xED, 0x7B, 0xAC, 0x8C, 0x6F, 0xA4, 0xF1, 0xBD, 0xB4, 0xCE, 0x36, 0xC6, 0x35, 0xCE, 0x56, 0xCE, 0x56, 0xC5, 0xF5, 0xAD, 0x53, 0x8C, 0x4F, 0x7B, 0xCD, 0x6B, 0x2B, 0x6B, 0x6C, 0x83, 0xEC, 0xBD, 0x51, 0x73, 0x2A, 0xA4, 0xF2, 0xAD, 0x32, 0x9C, 0xB0, 0xAD, 0x32, 0x94, 0x6F, 0x8C, 0x4E, 0xBD, 0xB4, 0xA4, 0xF1, 0x9C, 0xD1, 0x9C, 0xF2, 0xBD, 0xD6, 0xAD, 0x55, 0xA5, 0x14, 0x9C, 0xD3, 0x7B, 0xCE, 0x9D, 0x12, 0xAD, 0x94, 0xB5, 0x94, 0xB5, 0x94, 0xB5, 0x93, 0xBD, 0xD5, 0x94, 0x6F, 0xAD, 0x32, 0x8C, 0x2E, 0x8C, 0x4F, 0x94, 0x90, 0x94, 0x70, 0x84, 0x0E, 0x9C, 0x90, 0x83, 0xED, 0x83, 0xEE, 0x7B, 0xCE, 0x9C, 0xB1, 0xA5, 0x12, 0x9C, 0xD1, 0xAD, 0x53, 0x9C, 0xD1, 0x94, 0x90, 0x9C, 0xD1, 0xA4, 0xF2, 0xB5, 0x74, 0xA4, 0xF2, 0x9C, 0xF1, 0xAD, 0x53, 0x94, 0x90, 0x8C, 0x2F, 0xA4, 0xF2, 0xA4, 0xF1, 0x9C, 0x90, 0xAD, 0x53, 0xA4, 0xF1, 0x9C, 0xB0, 0xA5, 0x12, 0xAD, 0x32, 0xCE, 0x36, 0xCE, 0x16, 0xC6, 0x16, 0xC6, 0x15, 0xC5, 0xD4, 0xBD, 0xB4, 0xC5, 0xF5, 0xCE, 0x36, 0xC6, 0x15, 0xC5, 0xD5, 0x9C, 0xD1, 0xB5, 0x53, 0xA5, 0x12, 0x84, 0x0E, 0x6B, 0x4B, 0x84, 0x2E, 0xA4, 0xF1, 0x9C, 0xD0, 0x9C, 0xD0, 0x9C, 0xD0, 0x94, 0x6F, 0x83, 0xED, 0x9C, 0xD1, 0xA5, 0x11, 0xAD, 0x52, 0xAD, 0x52, 0x9C, 0x8F, 0x9C, 0xB0, 0xBD, 0xB2, 0xCE, 0x13, 0xCE, 0x13, 0xBD, 0x71, 0xAD, 0x10, 0x7B, 0x8B, 0x94, 0x6E, 0xA4, 0xF0, 0xAD, 0x10, 0xB5, 0x50, 0xBD, 0x91, 0xA4, 0xCF, 0x83, 0xEC, 0xB5, 0x52, 0x94, 0x6E, 0x9C, 0x8F, 0x94, 0x6E, 0xA4, 0xD0, 0xA4, 0xD0, 0xAD, 0x10, 0xAD, 0x10, 0xA4, 0xCF, 0xA4, 0xD0, 0xAC, 0xF0, 0x9C, 0x8F, 0x7B, 0x8B, 0x9C, 0x6F, 0xA4, 0xD0, 0xA4, 0xD0, 0x9C, 0xB0, 0xA4, 0xB0, 0xAD, 0x11, 0x9C, 0x6F, 0xA4, 0xF1, 0xAD, 0x32, 0xAD, 0x32, 0x9C, 0xB0, 0xAC, 0xF2, 0xAD, 0x12, 0x9C, 0x6F, 0x9C, 0xB0, 0xB5, 0x32, 0xB5, 0x73, 0xB5, 0x73, 0xBD, 0x93, 0xBD, 0x94, 0xBD, 0x93, 0xBD, 0x93, 0xC5, 0xD4, 0xBD, 0x93, 0xBD, 0x93, 0xB5, 0x52, 0xB5, 0x32, 0xBD, 0x94, 0xBD, 0x93, 0xB5, 0x73, 0xB5, 0x73, 0xAD, 0x12, 0x8C, 0x2F, 0x8C, 0x2F, 0x9C, 0xD2, 0xA4, 0xF2, 0x9C, 0xB1, 0x8C, 0x2F, 0x83, 0xEE, 0x94, 0x91, 0xAD, 0x33, 0xAD, 0x54, 0xAD, 0x34, 0xA5, 0x13, 0xA5, 0x13, 0x9D, 0x13, 0x9D, 0x13, 0x9C, 0xD2, 0x7C, 0x0F, 0x5A, 0xEB, 0x3A, 0x08, 0x29, 0x87, 0x31, 0xC8, 0x3A, 0x08, 0x39, 0xE8, 0x31, 0xC7, 0x39, 0xE8, 0x52, 0xAB, 0x6B, 0x4E, 0x84, 0x32, 0xA4, 0xF4, 0xA5, 0x15, 0xA5, 0x15, 0x9C, 0xF4, 0x8C, 0x52, 0x73, 0xAF, 0x6B, 0x4E, 0x63, 0x0D, 0x5A, 0xEB, 0x62, 0xEB, 0x62, 0xEB, 0x5A, 0xEB, 0x5A, 0xCB, 0x52, 0x49, 0x4A, 0x28, 0x52, 0x6A, 0xA5, 0x55, 0xA5, 0x55, 0xA5, 0x55, 0xA5, 0x15, 0x9C, 0xF4, 0x84, 0x31, 0x62, 0xEA, 0x9C, 0xB0, 0x94, 0x6E, 0x9C, 0x6E, 0x94, 0x4D, 0xA4, 0xCF, 0xB5, 0x92, 0xBD, 0x92, 0xC5, 0xD2, 0xC5, 0xB2, 0xC5, 0xB2, 0xC5, 0xB1, 0xC5, 0xB1, 0xB5, 0x2F, 0xBD, 0x71, 0xBD, 0x71, 0xCD, 0xF3, 0xC5, 0xB2, 0xC5, 0x92, 0xCD, 0xD3, 0xC5, 0xB2, 0xAC, 0xF0, 0xB5, 0x32, 0x8B, 0xEE, 0x72, 0xEA, 0x7A, 0xEB, 0x72, 0xCA, 0x7B, 0x0B, 0x83, 0x8D, 0x83, 0xAD, 0x94, 0x4F, 0x83, 0xED, 0x7B, 0xAC, 0x8B, 0xED, 0x94, 0x4E, 0x9C, 0x8F, 0x83, 0xCC, 0x83, 0xEC, 0x94, 0x6F, 0x9C, 0xB0, 0x6B, 0x4B, 0x31, 0xA6, 0x29, 0x44, 0x29, 0x65, 0x31, 0x65, 0x31, 0x85, 0x5A, 0xEB, 0xD6, 0xBB, 0xE7, 0x3D, 0xDE, 0xFC, 0xBD, 0xD7, 0x8C, 0x11, 0x73, 0x6E, 0x73, 0x6D, 0x84, 0x30, 0x8C, 0x30, 0xAD, 0x34, 0x94, 0xB2, 0xBD, 0xD7, 0xB5, 0x96, 0xC6, 0x18, 0xA5, 0x34, 0x4A, 0x49, 0x4A, 0x49, 0x42, 0x28, 0x31, 0x66, 0x31, 0x86, 0x39, 0xC7, 0x39, 0xA7, 0x52, 0x6A, 0x52, 0x69, 0x52, 0x8A, 0x52, 0x8A, 0x4A, 0x69, 0x7B, 0x8E, 0x94, 0x92, 0xAD, 0x75, 0xB5, 0xB7, 0xB5, 0x97, 0xDE, 0xDB, 0xC6, 0x18, 0xC6, 0x39, 0xE7, 0x3D, 0xE7, 0x1C, 0xAD, 0x55, 0x8C, 0x2F, 0xA4, 0xD0, 0xAC, 0xF0, 0xA4, 0xCF, 0x9C, 0x6E, 0xA4, 0xD0, 0x9C, 0xAF, 0x9C, 0xAF, 0xA4, 0xD0, 0x9C, 0xAF, 0x94, 0x6E, 0x94, 0x4E, 0xA4, 0xAF, 0xAD, 0x11, 0xB5, 0x72, 0xC5, 0xB3, 0xB5, 0x31, 0x94, 0x4E, 0x94, 0x6E, 0xA4, 0xAF, 0x73, 0x4A, 0x8C, 0x4E, 0xA4, 0xD0, 0xB5, 0x73, 0xB5, 0x93, 0xA4, 0xF1, 0x94, 0x6F, 0x9C, 0xF1, 0x9C, 0xB1, 0x7B, 0xED, 0x9C, 0xB0, 0xC5, 0xF5, 0xD6, 0x77, 0xCE, 0x36, 0xCE, 0x76, 0xCE, 0x55, 0xBD, 0xD4, 0xB5, 0x73, 0x8C, 0x6F, 0x8C, 0x4F, 0x7B, 0xCD, 0x73, 0x8C, 0x73, 0x6A, 0xB5, 0x31, 0x6B, 0x0A, 0x9C, 0xF1, 0xBD, 0xD5, 0x9C, 0xD1, 0x9C, 0xD0, 0x8C, 0x2E, 0x94, 0x8F, 0xB5, 0x73, 0xA5, 0x12, 0x9C, 0xD1, 0xA5, 0x12, 0xBD, 0xF7, 0xAD, 0x76, 0x9C, 0xD3, 0x8C, 0x71, 0x8C, 0x50, 0xA5, 0x32, 0xB5, 0x93, 0xB5, 0x93, 0xB5, 0xB4, 0xB5, 0x94, 0xBD, 0xB4, 0xAD, 0x32, 0xAD, 0x32, 0x8C, 0x2E, 0x94, 0x70, 0x94, 0x70, 0x8C, 0x2F, 0x8C, 0x2F, 0x94, 0x4F, 0x7B, 0xCD, 0x84, 0x0E, 0x84, 0x0E, 0x94, 0xB1, 0xAD, 0x53, 0xA5, 0x12, 0xAD, 0x53, 0xAD, 0x33, 0x9C, 0xD1, 0xA5, 0x33, 0xA4, 0xF2, 0x9C, 0xD1, 0x94, 0x70, 0x94, 0x70, 0x9C, 0xD1, 0x8C, 0x4F, 0x8C, 0x2F, 0xA4, 0xF2, 0xAD, 0x32, 0xA5, 0x32, 0x9C, 0xF1, 0x7B, 0xAD, 0x8C, 0x70, 0xA5, 0x12, 0x94, 0x6F, 0xC6, 0x15, 0xDE, 0xD8, 0xD6, 0x77, 0xCE, 0x56, 0xC5, 0xF5, 0xC5, 0xF5, 0xC5, 0xF5, 0xCE, 0x16, 0xCE, 0x15, 0xC6, 0x15, 0xA4, 0xD1, 0xB5, 0x73, 0xB5, 0x73, 0x94, 0x90, 0x73, 0x8C, 0x7B, 0xAD, 0xAD, 0x32, 0xA5, 0x11, 0xA5, 0x12, 0xA5, 0x11, 0x9C, 0xD0, 0x83, 0xED, 0xA4, 0xF1, 0x9C, 0x8F, 0xB5, 0x93, 0xB5, 0x52, 0xAD, 0x31, 0xB5, 0x72, 0xCE, 0x34, 0xA4, 0xEF, 0x9C, 0x8D, 0xAC, 0xEF, 0xB5, 0x71, 0x83, 0xCB, 0x8C, 0x4E, 0xA4, 0xCF, 0xAC, 0xF0, 0xB5, 0x50, 0xB5, 0x51, 0xAD, 0x10, 0x8C, 0x2E, 0xB5, 0x73, 0x7B, 0xAC, 0x73, 0x4A, 0x6B, 0x29, 0x83, 0xEC, 0x83, 0xCC, 0x9C, 0x8F, 0x9C, 0xAF, 0xA4, 0xF0, 0xB5, 0x72, 0xA4, 0xD0, 0xA4, 0xD0, 0xB5, 0x73, 0xA4, 0xF1, 0x9C, 0xB0, 0xAD, 0x32, 0xA4, 0xD0, 0xA4, 0xF1, 0xBD, 0x94, 0xAD, 0x12, 0xAD, 0x11, 0xBD, 0x93, 0xBD, 0xB3, 0xAD, 0x11, 0xB5, 0x33, 0xAC, 0xF1, 0x9C, 0xD1, 0x9C, 0xD1, 0xB5, 0x53, 0xC5, 0xD4, 0xBD, 0xB3, 0xBD, 0x93, 0xBD, 0x93, 0xBD, 0x94, 0xBD, 0x94, 0xBD, 0x94, 0xBD, 0xB4, 0xC5, 0xD4, 0xBD, 0xB4, 0xC5, 0xF5, 0xC5, 0xD4, 0xC5, 0xD4, 0xCE, 0x15, 0xD6, 0x36, 0xC5, 0xD4, 0xCE, 0x15, 0xCE, 0x36, 0x9C, 0x90, 0x73, 0x8C, 0x9C, 0xB1, 0xAD, 0x33, 0xAD, 0x54, 0x94, 0x91, 0x83, 0xEF, 0x8C, 0x30, 0x8C, 0x50, 0x94, 0x91, 0x9C, 0xD2, 0x94, 0xB2, 0x9C, 0xD2, 0xA5, 0x13, 0x94, 0xB2, 0x8C, 0x71, 0x84, 0x0F, 0x6B, 0x4D, 0x42, 0x49, 0x29, 0x86, 0x21, 0x45, 0x29, 0x46, 0x31, 0xA7, 0x4A, 0x6A, 0x5A, 0xEC, 0x6B, 0x6E, 0x7B, 0xD0, 0x7B, 0xF0, 0x7B, 0xF1, 0x84, 0x11, 0x8C, 0x72, 0x94, 0xB4, 0x9C, 0xF5, 0x9D, 0x15, 0xA5, 0x35, 0xA5, 0x35, 0x9C, 0xF4, 0x94, 0xD4, 0x94, 0xB4, 0x94, 0xD4, 0x8C, 0x72, 0x84, 0x51, 0xA5, 0x55, 0xA5, 0x55, 0xA5, 0x55, 0x9D, 0x34, 0x9C, 0xF4, 0x84, 0x50, 0x63, 0x0A, 0x9C, 0xAF, 0x94, 0x6D, 0x94, 0x4D, 0x9C, 0x8E, 0xA4, 0xF0, 0xAD, 0x51, 0xBD, 0x71, 0xC5, 0xB2, 0xC5, 0xD2, 0xC5, 0xB1, 0xB5, 0x0F, 0xA4, 0xAE, 0xA4, 0xAE, 0xC5, 0xB2, 0x8B, 0xEB, 0xB5, 0x30, 0xB5, 0x10, 0xAD, 0x0F, 0xAD, 0x0F, 0xAD, 0x0F, 0x94, 0x2D, 0xB5, 0x51, 0xA4, 0xAF, 0xA4, 0x6F, 0x83, 0x6C, 0x83, 0xAD, 0x83, 0xCD, 0x8B, 0xEE, 0x62, 0xEA, 0x83, 0xED, 0x83, 0xCD, 0x73, 0x6B, 0x84, 0x0D, 0x5A, 0xC9, 0x63, 0x0A, 0x5A, 0xA8, 0x52, 0x67, 0x6B, 0x4B, 0x84, 0x0E, 0x6B, 0x2B, 0x63, 0x2B, 0x39, 0xC6, 0x29, 0x64, 0x29, 0x64, 0x31, 0xA6, 0xA5, 0x35, 0xE7, 0x1D, 0xB5, 0xB7, 0x94, 0x92, 0x84, 0x10, 0x42, 0x28, 0x4A, 0x28, 0x5A, 0xEB, 0x52, 0x69, 0x7B, 0xAE, 0x8C, 0x50, 0x94, 0x71, 0xB5, 0x96, 0xBD, 0xB6, 0xBD, 0xD7, 0xB5, 0x76, 0x52, 0x69, 0x52, 0x8A, 0x73, 0x6D, 0x42, 0x28, 0x52, 0x89, 0x42, 0x28, 0x31, 0x65, 0x31, 0x86, 0x52, 0x8A, 0x6B, 0x2C, 0x5A, 0xEB, 0x4A, 0x49, 0x73, 0x8E, 0x94, 0x92, 0xA5, 0x35, 0xB5, 0x76, 0x8C, 0x52, 0xD6, 0x9B, 0xAD, 0x56, 0xCE, 0x5A, 0xB5, 0xB7, 0xB5, 0xB7, 0xB5, 0x96, 0x94, 0x90, 0x9C, 0x8F, 0xAC, 0xF0, 0xB5, 0x31, 0x8C, 0x0C, 0x8C, 0x0D, 0x94, 0x2D, 0x94, 0x6E, 0x94, 0x4E, 0xAC, 0xCF, 0xAC, 0xD0, 0xB5, 0x11, 0xC5, 0x92, 0x94, 0x0C, 0x94, 0x2D, 0x94, 0x0C, 0x8B, 0xEC, 0x8C, 0x0C, 0x8B, 0xEC, 0x9C, 0x6E, 0xA4, 0xCF, 0x9C, 0x8F, 0x94, 0x4E, 0x94, 0x2D, 0xA4, 0xAF, 0x9C, 0x6E, 0x94, 0x4E, 0x94, 0x4E, 0x94, 0x6F, 0x8C, 0x0D, 0x94, 0x6E, 0xA4, 0xD0, 0xB5, 0x52, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0x52, 0xA4, 0xF0, 0xA5, 0x11, 0x94, 0xB0, 0x94, 0x6F, 0x84, 0x2E, 0x7B, 0xCD, 0x73, 0x4A, 0xB5, 0x10, 0x62, 0xC8, 0x9C, 0xF1, 0xBD, 0xD4, 0xAD, 0x32, 0xAD, 0x52, 0xA4, 0xF1, 0xA4, 0xF1, 0xAD, 0x73, 0xB5, 0x73, 0xA5, 0x12, 0xB5, 0x74, 0xC6, 0x58, 0xB5, 0xB7, 0xA5, 0x35, 0x84, 0x30, 0x94, 0xB1, 0xBD, 0xD5, 0xBD, 0xD4, 0xB5, 0x93, 0xB5, 0x94, 0xB5, 0x93, 0xB5, 0x93, 0xB5, 0x73, 0xAD, 0x32, 0x8C, 0x2F, 0x8C, 0x4F, 0x94, 0x70, 0x8C, 0x2E, 0x84, 0x0E, 0x94, 0x6F, 0x83, 0xED, 0x84, 0x0E, 0x94, 0x90, 0xAD, 0x53, 0xB5, 0xD5, 0xB5, 0x74, 0xB5, 0x94, 0xAD, 0x74, 0xAD, 0x74, 0xBD, 0xD6, 0xA5, 0x33, 0x9C, 0xF2, 0x84, 0x0E, 0x8C, 0x2F, 0x8C, 0x4F, 0x8C, 0x4F, 0x8C, 0x2F, 0xB5, 0x53, 0xB5, 0x74, 0xA4, 0xF2, 0x9C, 0xB1, 0x8C, 0x2F, 0x94, 0x90, 0xAD, 0x33, 0x94, 0x6F, 0xCE, 0x57, 0xCE, 0x56, 0xD6, 0x97, 0xCE, 0x36, 0xCE, 0x35, 0xCE, 0x15, 0xCE, 0x36, 0xCE, 0x56, 0xC6, 0x15, 0xC5, 0xF5, 0x9C, 0x90, 0xB5, 0x74, 0xC5, 0xF5, 0x9C, 0xD1, 0x94, 0x90, 0x94, 0x90, 0xAD, 0x52, 0xA4, 0xF1, 0xAD, 0x53, 0xA4, 0xF1, 0x9C, 0xB0, 0x7B, 0x8C, 0x8C, 0x4F, 0x9C, 0xB0, 0xBD, 0xB3, 0xBD, 0xB3, 0xBD, 0xB3, 0xC5, 0xB3, 0xC5, 0xD3, 0x73, 0x8A, 0x9C, 0xAE, 0x9C, 0x6D, 0x94, 0x2D, 0x94, 0x6E, 0xAD, 0x52, 0xC5, 0xF4, 0xB5, 0x71, 0xBD, 0x92, 0xBD, 0x71, 0xAD, 0x30, 0x9C, 0xAF, 0xAD, 0x12, 0x7B, 0x8B, 0x7B, 0x8B, 0x73, 0xAC, 0x94, 0x6F, 0x94, 0x4E, 0x94, 0x6E, 0x9C, 0x8E, 0xAD, 0x10, 0xA4, 0xCF, 0x94, 0x6E, 0xA4, 0xD0, 0xC5, 0xF5, 0xAD, 0x32, 0xA4, 0xF1, 0xB5, 0x93, 0x9C, 0xB0, 0xA4, 0xF1, 0xAD, 0x32, 0xAD, 0x32, 0x94, 0x8F, 0xA4, 0xF0, 0xA5, 0x10, 0xA4, 0xF1, 0xBD, 0x73, 0x9C, 0x90, 0x7B, 0xCE, 0x8C, 0x4F, 0xA5, 0x32, 0xBD, 0xD4, 0xBD, 0x93, 0xB5, 0x72, 0xB5, 0x52, 0xB5, 0x52, 0xB5, 0x73, 0xB5, 0x94, 0xB5, 0x53, 0xBD, 0xB4, 0xC5, 0xF5, 0xBD, 0x93, 0xBD, 0x93, 0xBD, 0xB3, 0xC5, 0xB4, 0xCD, 0xF5, 0xBD, 0x94, 0xBD, 0xB3, 0xD6, 0x56, 0xD6, 0x57, 0x94, 0x4F, 0xA4, 0xF2, 0xAD, 0x33, 0x9C, 0xD2, 0x9C, 0xD1, 0xA4, 0xF2, 0xA5, 0x13, 0x9C, 0xB1, 0xA5, 0x12, 0x8C, 0x70, 0x7B, 0xEE, 0x94, 0x70, 0x94, 0x91, 0x9C, 0xD2, 0x9C, 0xB1, 0x94, 0x91, 0x8C, 0x50, 0x7B, 0xCE, 0x6B, 0x4D, 0x5A, 0xCB, 0x52, 0x8A, 0x39, 0xE8, 0x31, 0x86, 0x29, 0x46, 0x39, 0xE8, 0x52, 0xCB, 0x73, 0x8F, 0x84, 0x31, 0x84, 0x52, 0x6B, 0x6F, 0x63, 0x0D, 0x5A, 0xEC, 0x5A, 0xEC, 0x73, 0x8F, 0x84, 0x31, 0x94, 0xB3, 0x94, 0xD4, 0x94, 0xB3, 0x8C, 0x93, 0x9C, 0xD4, 0x9C, 0xF5, 0xA5, 0x55, 0xA5, 0x55, 0xA5, 0x55, 0x9D, 0x34, 0x9C, 0xF4, 0x84, 0x30, 0x62, 0xE9, 0x94, 0x2D, 0x94, 0x2C, 0x8C, 0x0C, 0x94, 0x4D, 0x94, 0x2C, 0x9C, 0xAE, 0xAD, 0x0F, 0xAC, 0xEF, 0xBD, 0x91, 0xA4, 0xCE, 0xAD, 0x10, 0xB5, 0x50, 0xAD, 0x10, 0xBD, 0x92, 0x73, 0x29, 0x94, 0x4D, 0x9C, 0x8E, 0x9C, 0x6D, 0xA4, 0xCF, 0xAC, 0xCF, 0x8B, 0xEC, 0xA4, 0xEF, 0xAD, 0x10, 0x94, 0x0D, 0x83, 0xCD, 0x7B, 0xAD, 0x9C, 0xB0, 0xA4, 0xF1, 0x6B, 0x6B, 0x94, 0x6F, 0x8C, 0x4F, 0x8C, 0x6F, 0xAD, 0x53, 0x73, 0x6C, 0x73, 0x8D, 0x6B, 0x4C, 0x7B, 0xAD, 0x73, 0x8C, 0x94, 0x4F, 0x8C, 0x0E, 0x9C, 0xB0, 0x7B, 0xCD, 0x39, 0xC6, 0x29, 0x65, 0x39, 0xE7, 0x94, 0xB3, 0xD6, 0xBA, 0xAD, 0x55, 0x4A, 0x29, 0x4A, 0x48, 0x42, 0x28, 0x4A, 0x28, 0x42, 0x28, 0x73, 0x6D, 0x8C, 0x30, 0x94, 0x71, 0x9C, 0xB3, 0xA5, 0x14, 0xAD, 0x34, 0xAD, 0x75, 0xAD, 0x34, 0x6B, 0x6D, 0x5A, 0xCB, 0x63, 0x0B, 0x29, 0x45, 0x39, 0xC7, 0x39, 0xE7, 0x42, 0x28, 0x4A, 0x28, 0x52, 0x89, 0x5A, 0xEB, 0x42, 0x28, 0x4A, 0x69, 0x5A, 0xEB, 0x7C, 0x10, 0x94, 0xD3, 0xAD, 0x96, 0xBD, 0xB7, 0xBD, 0xF8, 0xBD, 0xD8, 0xC6, 0x39, 0xD6, 0xBB, 0xCE, 0x5A, 0xC6, 0x18, 0x9C, 0xD2, 0xAD, 0x52, 0xB5, 0x93, 0xC6, 0x15, 0x9C, 0xD0, 0x8C, 0x2E, 0x8C, 0x2E, 0x94, 0x4E, 0x94, 0x4E, 0x94, 0x4E, 0x8C, 0x2D, 0x94, 0x2D, 0xAC, 0xCF, 0x7B, 0x8B, 0x73, 0x6B, 0x8C, 0x0D, 0x83, 0xEC, 0x73, 0x8B, 0x73, 0x4A, 0x62, 0xC9, 0x83, 0xED, 0x8B, 0xEC, 0x8B, 0xEC, 0x8B, 0xEC, 0xBD, 0x31, 0xA4, 0x6D, 0xAC, 0xCF, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0xAF, 0xAC, 0xCF, 0xAC, 0xD0, 0xAC, 0xCF, 0x9C, 0x4D, 0x8C, 0x0D, 0x9C, 0x6E, 0x94, 0x2D, 0x8B, 0xEC, 0x8B, 0xEC, 0xAC, 0xF0, 0xBD, 0x51, 0xAC, 0xAF, 0xA4, 0xCF, 0xA4, 0x8F, 0x9C, 0x4E, 0x9C, 0x6E, 0x94, 0x2D, 0x94, 0x4E, 0x9C, 0x8F, 0xA4, 0xD0, 0x94, 0x4E, 0x94, 0x90, 0xC6, 0x38, 0xB5, 0xD7, 0xB5, 0x76, 0x8C, 0x51, 0x9C, 0xD1, 0xB5, 0xB3, 0xC5, 0xF5, 0xC6, 0x36, 0xC5, 0xF5, 0xBD, 0xB4, 0xA4, 0xF1, 0x83, 0xED, 0xAD, 0x53, 0x94, 0x4F, 0x94, 0x70, 0x9C, 0xD1, 0x94, 0x90, 0x9C, 0xB1, 0xA5, 0x12, 0x94, 0x90, 0x9C, 0xB1, 0xB5, 0x74, 0xB5, 0x74, 0xCE, 0x57, 0xBD, 0xD5, 0xC5, 0xF6, 0xBD, 0xF5, 0xA5, 0x33, 0xBD, 0xD5, 0x9C, 0xD1, 0xA5, 0x12, 0x94, 0x90, 0x9C, 0xB1, 0x8C, 0x2F, 0x9C, 0xD1, 0x94, 0x90, 0xAD, 0x33, 0xA4, 0xF2, 0xBD, 0xD5, 0xB5, 0x94, 0x8C, 0x4F, 0x94, 0x70, 0xA5, 0x12, 0x9C, 0xB0, 0xD6, 0x98, 0xD6, 0x97, 0xD6, 0x97, 0xD6, 0x97, 0xDE, 0xB7, 0xC5, 0xD4, 0xC5, 0xF5, 0xCE, 0x36, 0xD6, 0x76, 0xC5, 0xF5, 0x8C, 0x4F, 0xAD, 0x32, 0xAD, 0x12, 0x9C, 0xD1, 0x94, 0xB0, 0x9C, 0xD1, 0xA5, 0x12, 0xA4, 0xF1, 0x9C, 0x90, 0xA4, 0xD1, 0x94, 0x6F, 0x73, 0x8C, 0x84, 0x0E, 0x9C, 0x8F, 0xBD, 0x92, 0xC5, 0xD3, 0x94, 0x8E, 0xA4, 0xD0, 0xC5, 0xD3, 0xBD, 0xB3, 0xCE, 0x14, 0xC5, 0xD3, 0x94, 0x6E, 0x9C, 0xD0, 0xBD, 0xD4, 0xCE, 0x35, 0xBD, 0xB2, 0xBD, 0xD3, 0xBD, 0xB3, 0xAD, 0x10, 0xA4, 0xF0, 0xA4, 0xF1, 0x7B, 0xAC, 0x94, 0x6F, 0x9C, 0xB0, 0x7B, 0xAC, 0x8C, 0x4E, 0x94, 0x8F, 0xA4, 0xF0, 0xAD, 0x31, 0xA4, 0xF1, 0x94, 0x6E, 0x94, 0x6F, 0xAD, 0x52, 0xB5, 0x94, 0xB5, 0xB4, 0xB5, 0x94, 0x9C, 0xD1, 0xA4, 0xF1, 0xAD, 0x53, 0xAD, 0x33, 0x94, 0x8F, 0xA5, 0x11, 0xA5, 0x11, 0xAD, 0x11, 0xB5, 0x73, 0x9C, 0x90, 0x83, 0xEE, 0x84, 0x2F, 0x9C, 0xD1, 0xB5, 0x72, 0xB5, 0x31, 0xA4, 0xF0, 0xA4, 0xF0, 0xAD, 0x32, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0x74, 0xBD, 0x94, 0xBD, 0xB4, 0xC5, 0xF5, 0xBD, 0xB3, 0xBD, 0xB4, 0xC5, 0xD4, 0xCE, 0x15, 0xC5, 0xD4, 0xC5, 0xD4, 0xC5, 0xF4, 0xDE, 0x76, 0xB5, 0x32, 0xBD, 0x94, 0xB5, 0x53, 0xAD, 0x53, 0xB5, 0x53, 0xBD, 0xB5, 0xAD, 0x53, 0xA4, 0xF2, 0xC5, 0xD5, 0xD6, 0x57, 0x94, 0x50, 0x7B, 0xAD, 0x8C, 0x2F, 0x8C, 0x50, 0x94, 0x91, 0x9C, 0xD2, 0x9C, 0xD2, 0x8C, 0x50, 0x83, 0xEF, 0x83, 0xEF, 0x84, 0x0F, 0x7B, 0xEF, 0x6B, 0x8D, 0x52, 0x8A, 0x39, 0xC7, 0x29, 0x45, 0x21, 0x04, 0x21, 0x45, 0x39, 0xC8, 0x4A, 0x6A, 0x63, 0x2D, 0x73, 0x8F, 0x73, 0xAF, 0x7B, 0xD0, 0x7B, 0xD0, 0x7B, 0xD0, 0x7C, 0x11, 0x7B, 0xF0, 0x73, 0xAF, 0x7B, 0xF0, 0x73, 0xB0, 0xA5, 0x55, 0xA5, 0x55, 0xA5, 0x55, 0x9D, 0x34, 0x9C, 0xF4, 0x7C, 0x0F, 0x5A, 0xC9, 0x83, 0xAB, 0x83, 0xAB, 0x7B, 0x8B, 0x83, 0xCC, 0x83, 0xCC, 0x8C, 0x0D, 0x9C, 0x8E, 0x9C, 0xAE, 0x94, 0x4D, 0x73, 0x49, 0x94, 0x4D, 0xAD, 0x31, 0xBD, 0x92, 0xC5, 0xD4, 0x8C, 0x0D, 0x94, 0x6E, 0xA4, 0xCF, 0xAC, 0xF0, 0x94, 0x6E, 0x9C, 0x6E, 0x8C, 0x0C, 0x9C, 0x8E, 0xAC, 0xEF, 0x94, 0x2D, 0x7B, 0x8C, 0x7B, 0x8C, 0xA4, 0xD1, 0xA4, 0xF1, 0x7B, 0xCD, 0x9C, 0x91, 0x9C, 0xB1, 0x9C, 0xB0, 0xAD, 0x53, 0x9C, 0xB0, 0xAD, 0x32, 0xAD, 0x33, 0xAD, 0x53, 0xA5, 0x32, 0xA5, 0x12, 0x94, 0x90, 0x9C, 0xD0, 0x8C, 0x4F, 0x73, 0x8C, 0x31, 0xA5, 0x31, 0xA6, 0x41, 0xE7, 0x62, 0xEB, 0x7B, 0xAE, 0x31, 0x86, 0x29, 0x65, 0x39, 0xE7, 0x52, 0x8A, 0x6B, 0x4C, 0x73, 0xAE, 0x7B, 0xCF, 0x8C, 0x51, 0x8C, 0x30, 0x84, 0x10, 0xAD, 0x35, 0xB5, 0x96, 0x94, 0xB2, 0x84, 0x10, 0x8C, 0x71, 0x94, 0xB1, 0x6B, 0x6D, 0x29, 0x24, 0x39, 0xA6, 0x42, 0x28, 0x31, 0x85, 0x31, 0x85, 0x39, 0xE7, 0x31, 0xA6, 0x5A, 0xCA, 0x63, 0x0C, 0x6B, 0x4D, 0x7B, 0xCF, 0xAD, 0x76, 0xA5, 0x35, 0xAD, 0x76, 0xBD, 0xF8, 0xCE, 0x7B, 0xE7, 0x1D, 0xD6, 0xBB, 0xCE, 0x59, 0xB5, 0xB6, 0xB5, 0x74, 0xB5, 0x93, 0xBD, 0xD4, 0xAD, 0x53, 0xA4, 0xF1, 0x9C, 0xD0, 0xA5, 0x11, 0xA5, 0x11, 0xA4, 0xF1, 0xA4, 0xF0, 0xA4, 0xCF, 0xA4, 0xCF, 0x7B, 0x8B, 0x7B, 0xAC, 0x7B, 0x8C, 0x83, 0xED, 0x84, 0x2E, 0x83, 0xED, 0x7B, 0xAD, 0x8C, 0x4F, 0x94, 0x6F, 0x8C, 0x4E, 0x8B, 0xEC, 0xA4, 0x8E, 0x8C, 0x0C, 0x9C, 0x8E, 0x8C, 0x0D, 0x73, 0x6B, 0x73, 0x4A, 0x62, 0xE9, 0x62, 0xA9, 0x62, 0xE9, 0x6B, 0x09, 0x73, 0x4A, 0x94, 0x2D, 0x8B, 0xCB, 0x7B, 0x8A, 0x8B, 0xCB, 0x94, 0x2D, 0x94, 0x0D, 0x83, 0xAB, 0x83, 0x8A, 0x8B, 0xEC, 0xA4, 0x6E, 0xAC, 0xCF, 0xAC, 0x8E, 0xBD, 0x31, 0xB5, 0x10, 0xBD, 0x30, 0xBD, 0x31, 0xB5, 0x30, 0xB5, 0x10, 0xAC, 0xF0, 0xA4, 0xF1, 0xCE, 0x79, 0xBD, 0xD8, 0xBD, 0xB7, 0x9C, 0xD1, 0xA4, 0xF0, 0xAD, 0x10, 0xAC, 0xD0, 0xA4, 0xAF, 0xA4, 0xAF, 0x9C, 0x6E, 0x94, 0x6E, 0xA4, 0xD1, 0xBD, 0x94, 0xAD, 0x53, 0xA4, 0xF2, 0x94, 0x90, 0x94, 0x70, 0x8C, 0x4F, 0x8C, 0x4F, 0x8C, 0x4F, 0x8C, 0x4F, 0x94, 0x70, 0x8C, 0x2F, 0x8C, 0x2F, 0x84, 0x0E, 0x8C, 0x4F, 0x94, 0x70, 0x7B, 0xAD, 0x83, 0xEE, 0x94, 0x6F, 0xA5, 0x32, 0xAD, 0x33, 0xA5, 0x12, 0xAD, 0x53, 0xA5, 0x33, 0x83, 0xEE, 0xA5, 0x12, 0x9C, 0xD1, 0xB5, 0xB4, 0xB5, 0x94, 0x9C, 0xB1, 0x94, 0x90, 0xAD, 0x32, 0xAD, 0x32, 0xCE, 0x36, 0xCE, 0x77, 0xD6, 0x77, 0xD6, 0x56, 0xB5, 0x53, 0x94, 0x90, 0x94, 0x6F, 0x8C, 0x0E, 0xBD, 0xB4, 0xB5, 0x94, 0x83, 0xEE, 0xB5, 0x53, 0x9C, 0xD1, 0xC6, 0x36, 0x9C, 0xB1, 0xAD, 0x32, 0xAD, 0x52, 0xA4, 0xF1, 0xA4, 0xD1, 0xA4, 0xF1, 0x9C, 0xB0, 0x7B, 0xED, 0x7B, 0xCD, 0x94, 0x8F, 0xAD, 0x51, 0xBD, 0xD3, 0xB5, 0x72, 0x73, 0x6B, 0x9C, 0x8F, 0xC6, 0x14, 0xCE, 0x35, 0xD6, 0x96, 0x9C, 0xAF, 0xAD, 0x31, 0xCE, 0x15, 0xCE, 0x35, 0xBD, 0xD3, 0xCE, 0x35, 0xCE, 0x35, 0xB5, 0x72, 0xA4, 0xCF, 0xA4, 0xF1, 0x62, 0xE9, 0x5A, 0xE9, 0x6B, 0x2A, 0x83, 0xED, 0x94, 0x8F, 0xB5, 0x73, 0xC5, 0xD5, 0xAD, 0x53, 0xAD, 0x32, 0x9C, 0xB0, 0x9C, 0xB0, 0xA5, 0x12, 0xB5, 0x94, 0xBD, 0xF5, 0xA5, 0x32, 0x9C, 0xD1, 0xB5, 0x74, 0xC6, 0x16, 0xBD, 0xD5, 0xAD, 0x53, 0xB5, 0x73, 0xB5, 0x73, 0xAD, 0x11, 0xB5, 0x73, 0x8C, 0x4F, 0x7B, 0xCE, 0x8C, 0x50, 0x9C, 0xD1, 0xAD, 0x11, 0xAD, 0x11, 0xA4, 0xAF, 0x9C, 0x8F, 0xA5, 0x11, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0x73, 0xAD, 0x32, 0xB5, 0x93, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0x73, 0xBD, 0xB3, 0xC5, 0xB3, 0xCD, 0xF4, 0xC5, 0xF4, 0xC5, 0xD4, 0xB5, 0x32, 0xB5, 0x53, 0x9C, 0xB1, 0x9C, 0xD1, 0x9C, 0xD0, 0xAD, 0x32, 0xC5, 0xD5, 0xBD, 0xD5, 0xBD, 0xD5, 0xC5, 0xF5, 0x8C, 0x4F, 0x94, 0x70, 0xB5, 0x54, 0xA4, 0xD2, 0x8C, 0x2F, 0x94, 0x91, 0x9C, 0xB1, 0x94, 0x91, 0x94, 0x71, 0x94, 0x70, 0x8C, 0x70, 0x8C, 0x50, 0x8C, 0x50, 0x84, 0x0F, 0x73, 0x8E, 0x5B, 0x0C, 0x4A, 0x69, 0x39, 0xE7, 0x31, 0x86, 0x21, 0x25, 0x21, 0x25, 0x21, 0x45, 0x31, 0xA7, 0x42, 0x29, 0x5A, 0xCC, 0x63, 0x2D, 0x6B, 0x8F, 0x7B, 0xF1, 0x8C, 0x93, 0x8C, 0x72, 0x84, 0x52, 0xA5, 0x55, 0xA5, 0x55, 0xA5, 0x55, 0x9D, 0x34, 0x9C, 0xF4, 0x7B, 0xCF, 0x52, 0x68, 0x6A, 0xE9, 0x5A, 0x88, 0x62, 0xC9, 0x62, 0xE9, 0x52, 0x68, 0x62, 0xE9, 0x73, 0x6B, 0x73, 0x6B, 0x83, 0xEC, 0x6B, 0x2A, 0x83, 0xED, 0x9C, 0xAF, 0x8C, 0x2D, 0xC5, 0xF4, 0x9C, 0xAF, 0xA4, 0xF0, 0xB5, 0x51, 0xA4, 0xF0, 0x94, 0x6E, 0x9C, 0xAF, 0x9C, 0xAF, 0xA4, 0xAF, 0xA4, 0xCF, 0x83, 0xAB, 0x5A, 0xA9, 0x5A, 0xCA, 0x94, 0x90, 0x94, 0x6F, 0x63, 0x0A, 0x8C, 0x2F, 0x7B, 0xCD, 0x94, 0x90, 0x94, 0x90, 0x7B, 0xAC, 0x9C, 0xD0, 0x8C, 0x4F, 0xA4, 0xF1, 0x9C, 0xB0, 0x9C, 0xD0, 0x9C, 0xD1, 0x8C, 0x4E, 0x8C, 0x2E, 0x94, 0x6F, 0x5A, 0xEA, 0x31, 0x85, 0x39, 0xE7, 0x42, 0x28, 0x42, 0x07, 0x31, 0x86, 0x31, 0xA6, 0x42, 0x28, 0x52, 0xAA, 0x52, 0xAA, 0x5A, 0xCA, 0x63, 0x0C, 0x73, 0x8D, 0x7B, 0xAE, 0x73, 0x6D, 0x94, 0xB2, 0xB5, 0x96, 0x84, 0x30, 0x52, 0x8A, 0x52, 0x69, 0x9C, 0xD2, 0xAD, 0x74, 0x8C, 0x70, 0x29, 0x65, 0x21, 0x04, 0x29, 0x65, 0x31, 0x85, 0x31, 0x85, 0x4A, 0x48, 0x5A, 0xAA, 0x5A, 0xEB, 0x5A, 0xEB, 0x63, 0x4D, 0x8C, 0x51, 0xAD, 0x76, 0xBD, 0xD8, 0xBD, 0xD8, 0xCE, 0x5A, 0xC6, 0x39, 0x94, 0x92, 0x8C, 0x51, 0xDE, 0xBB, 0x94, 0x91, 0xB5, 0x94, 0xC6, 0x16, 0xB5, 0x94, 0xA5, 0x12, 0x94, 0x8F, 0x94, 0x8F, 0x9C, 0xD0, 0x8C, 0x2E, 0x9C, 0xAF, 0x9C, 0x6E, 0xA4, 0x8E, 0x8C, 0x0D, 0x7B, 0xED, 0x7B, 0xCD, 0x7B, 0xED, 0x94, 0xB1, 0x8C, 0x4F, 0x7B, 0xCE, 0x8C, 0x70, 0x9C, 0xD1, 0x94, 0x70, 0x8B, 0xED, 0xA4, 0x8F, 0x7B, 0xAC, 0x84, 0x0D, 0x8C, 0x2E, 0x84, 0x0E, 0x84, 0x0E, 0x8C, 0x4F, 0x7B, 0xAD, 0x4A, 0x27, 0x6B, 0x4B, 0x83, 0xCD, 0x94, 0x6F, 0x8C, 0x0D, 0x8B, 0xEC, 0x8C, 0x2D, 0x94, 0x4E, 0xA4, 0xF0, 0xB5, 0x73, 0x8C, 0x6F, 0x9C, 0xB0, 0xC5, 0xF4, 0xD6, 0x55, 0xB5, 0x30, 0xAC, 0xCF, 0x9C, 0x4D, 0x9C, 0x4D, 0xB5, 0x10, 0xB5, 0x51, 0xA4, 0xD0, 0x9C, 0x8F, 0xA4, 0xF2, 0xDE, 0xFB, 0xBD, 0xF8, 0xAD, 0x34, 0x9C, 0x90, 0x94, 0x2E, 0x94, 0x0D, 0x94, 0x2D, 0xA4, 0xCF, 0x94, 0x4D, 0x94, 0x2D, 0x94, 0x2D, 0x8C, 0x0D, 0x94, 0x4E, 0x9C, 0xD1, 0xB5, 0x53, 0xAD, 0x33, 0xAD, 0x12, 0xBD, 0xB5, 0xAD, 0x33, 0xB5, 0x53, 0xAD, 0x33, 0xAD, 0x53, 0xBD, 0x94, 0xB5, 0x54, 0xB5, 0x53, 0xB5, 0x53, 0xAD, 0x53, 0xB5, 0x74, 0xB5, 0x74, 0xB5, 0x74, 0xAD, 0x32, 0xA4, 0xF1, 0xA5, 0x12, 0xA5, 0x12, 0xA5, 0x12, 0x9C, 0xB1, 0xB5, 0x74, 0xBD, 0xB5, 0xAD, 0x53, 0x94, 0x90, 0x9C, 0x90, 0x94, 0x70, 0x94, 0x6F, 0x8C, 0x0E, 0x84, 0x0F, 0x84, 0x0E, 0x84, 0x0E, 0x94, 0x2F, 0x9C, 0xB0, 0xA5, 0x12, 0xA4, 0xF1, 0x8C, 0x0F, 0x7B, 0xAD, 0x73, 0x8C, 0x8C, 0x2F, 0xAD, 0x12, 0x7B, 0xAC, 0xB5, 0x94, 0xA4, 0xD1, 0x94, 0x8F, 0x94, 0x6F, 0x83, 0xCD, 0x83, 0xED, 0xA4, 0xF1, 0xA5, 0x12, 0x94, 0x4F, 0x7B, 0xAD, 0x9C, 0xB0, 0xB5, 0x92, 0xC5, 0xF3, 0xCE, 0x14, 0xBD, 0xB3, 0xBD, 0xB3, 0xB5, 0x92, 0xD6, 0x55, 0xDE, 0xB7, 0x94, 0x4E, 0xCE, 0x35, 0xCE, 0x35, 0xD6, 0x55, 0xCE, 0x35, 0xD6, 0x96, 0xD6, 0x75, 0xBD, 0xB2, 0xA4, 0xF0, 0xA4, 0xF1, 0x6B, 0x4B, 0x5A, 0xCA, 0x5A, 0xC9, 0x7B, 0x8C, 0x94, 0x6F, 0xA5, 0x31, 0xA5, 0x11, 0x9C, 0x90, 0x7B, 0xCC, 0x9C, 0xB0, 0xA4, 0xF1, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0xB4, 0xAD, 0x53, 0xB5, 0xB4, 0xB5, 0xB4, 0xAD, 0x93, 0x9C, 0xB1, 0x7B, 0xAD, 0x94, 0x6F, 0xAD, 0x11, 0xA4, 0xF1, 0xB5, 0x73, 0x7B, 0xAD, 0x7B, 0xCE, 0x84, 0x2F, 0x9C, 0xD1, 0xA4, 0xF1, 0x9C, 0xAF, 0xA4, 0xD0, 0x9C, 0x8F, 0x9C, 0xB0, 0xA5, 0x12, 0xA5, 0x12, 0xAD, 0x33, 0xBD, 0xB5, 0xB5, 0x73, 0xAD, 0x32, 0xAD, 0x12, 0xAD, 0x32, 0xB5, 0x73, 0xB5, 0x73, 0x9C, 0xB0, 0xB5, 0x52, 0xB5, 0x51, 0xB5, 0x72, 0xAD, 0x12, 0xB5, 0x53, 0x9C, 0xB0, 0x9C, 0xB1, 0xA4, 0xF1, 0x9C, 0xB0, 0x9C, 0xD0, 0x94, 0x6F, 0xA4, 0xF1, 0xCE, 0x15, 0xC6, 0x15, 0xBD, 0xB4, 0xAD, 0x33, 0xAD, 0x12, 0xA4, 0xD2, 0x84, 0x0F, 0x7B, 0x8D, 0x73, 0x8C, 0x84, 0x0F, 0x8C, 0x50, 0x9C, 0xB1, 0x9C, 0xB1, 0x94, 0x91, 0x94, 0x91, 0x8C, 0x50, 0x84, 0x2F, 0x83, 0xEF, 0x73, 0x8E, 0x6B, 0x4C, 0x5A, 0xEB, 0x42, 0x29, 0x31, 0xA6, 0x29, 0x45, 0x21, 0x25, 0x21, 0x24, 0x21, 0x25, 0x29, 0x66, 0x39, 0xC8, 0x63, 0x2D, 0x84, 0x11, 0x84, 0x31, 0xA5, 0x55, 0xA5, 0x55, 0xA5, 0x55, 0x9D, 0x14, 0x9C, 0xF3, 0x84, 0x0F, 0x62, 0xC9, 0x6B, 0x09, 0x73, 0x4A, 0x73, 0x6B, 0x7B, 0x8B, 0x7B, 0x8B, 0x73, 0x4A, 0x73, 0x2A, 0x73, 0x4B, 0x7B, 0xAB, 0x83, 0xCC, 0x6B, 0x2A, 0x73, 0x4A, 0x5A, 0xA8, 0x8C, 0x4E, 0x7B, 0x8B, 0x9C, 0x8F, 0x83, 0xED, 0x73, 0x6A, 0x8C, 0x0D, 0x9C, 0x8E, 0x94, 0x6E, 0xAD, 0x10, 0xAC, 0xCF, 0x8B, 0xEC, 0x8C, 0x4F, 0x8C, 0x2F, 0x94, 0x6F, 0xAD, 0x12, 0x8C, 0x4F, 0x84, 0x0E, 0x84, 0x0E, 0x8C, 0x6F, 0x94, 0x4F, 0x94, 0x4F, 0x94, 0x6F, 0x9C, 0xD1, 0x9C, 0xD0, 0x7B, 0xAC, 0x63, 0x2A, 0x73, 0x6B, 0x73, 0x4B, 0x7B, 0xCD, 0x73, 0x8C, 0x8C, 0x4F, 0x4A, 0x48, 0x31, 0x85, 0x39, 0xC6, 0x31, 0x85, 0x39, 0xC6, 0x39, 0xC6, 0x42, 0x07, 0x4A, 0x28, 0x39, 0xC6, 0x5A, 0xCA, 0x6B, 0x2C, 0x73, 0x6D, 0x7B, 0xEF, 0x5A, 0xEB, 0x84, 0x30, 0x84, 0x30, 0x94, 0x92, 0x8C, 0x30, 0x42, 0x29, 0x7B, 0xEF, 0xAD, 0x73, 0xBD, 0xB4, 0x9C, 0xD1, 0x63, 0x0B, 0x4A, 0x28, 0x21, 0x04, 0x31, 0x86, 0x39, 0xE7, 0x4A, 0x48, 0x5A, 0xEB, 0x63, 0x2C, 0x6B, 0x6D, 0x73, 0x8E, 0x8C, 0x72, 0x9C, 0xF4, 0xB5, 0x76, 0x9C, 0xF4, 0xA5, 0x15, 0xC5, 0xF8, 0xCE, 0x5A, 0xDE, 0xDC, 0xCE, 0x59, 0xAD, 0x54, 0xBD, 0xD5, 0xB5, 0xB4, 0xAD, 0x53, 0x94, 0x6F, 0x7B, 0xAC, 0xA5, 0x11, 0xA4, 0xD1, 0x8C, 0x2E, 0x9C, 0x8F, 0x94, 0x2D, 0x94, 0x6F, 0x73, 0xAC, 0x6B, 0x6C, 0x7C, 0x0E, 0xA5, 0x33, 0x94, 0x90, 0x8C, 0x70, 0x9C, 0xD2, 0x9C, 0xF2, 0x9C, 0xD1, 0x94, 0x2E, 0x9C, 0x8F, 0x8C, 0x0E, 0x94, 0x90, 0x94, 0x6F, 0x8C, 0x4F, 0x8C, 0x4F, 0xA5, 0x12, 0x7B, 0xAD, 0x6B, 0x2C, 0x73, 0x8C, 0x94, 0x90, 0xA5, 0x11, 0x94, 0x8F, 0x8C, 0x4E, 0x94, 0x6F, 0x94, 0x6F, 0xAD, 0x52, 0xCE, 0x76, 0xBD, 0xD4, 0xC6, 0x15, 0xDE, 0xB6, 0xD6, 0x55, 0xBD, 0x92, 0xA4, 0xAF, 0x9C, 0x6D, 0xAC, 0xF0, 0xB5, 0x71, 0xC6, 0x14, 0xCE, 0x35, 0xBD, 0xD5, 0xCE, 0x58, 0xC6, 0x18, 0x5A, 0xAC, 0x94, 0xB2, 0xD6, 0x98, 0xC5, 0xF4, 0xC5, 0xF4, 0xBD, 0xB3, 0xCE, 0x36, 0xB5, 0x73, 0xAD, 0x52, 0xAD, 0x11, 0xA5, 0x11, 0xBD, 0xD4, 0xCE, 0x36, 0xD6, 0x76, 0xCE, 0x56, 0x94, 0x70, 0xB5, 0x74, 0x9C, 0xB1, 0xCE, 0x16, 0xB5, 0x53, 0x94, 0x70, 0x8C, 0x0E, 0x94, 0x6F, 0x9C, 0x90, 0xA4, 0xF1, 0xAD, 0x12, 0x94, 0x4F, 0x9C, 0xB1, 0x94, 0x90, 0x94, 0x4F, 0x9C, 0xB0, 0x9C, 0xB0, 0x83, 0xED, 0x8C, 0x2E, 0x9C, 0xB0, 0xB5, 0x74, 0x94, 0x6F, 0x94, 0x6F, 0xA4, 0xF1, 0xA5, 0x12, 0xBD, 0x94, 0xA4, 0xF1, 0xA5, 0x12, 0xA5, 0x12, 0xAD, 0x53, 0xB5, 0x53, 0xAD, 0x32, 0xA4, 0xF1, 0x9C, 0x90, 0xA4, 0xF2, 0xA4, 0xF2, 0xAD, 0x33, 0xB5, 0x95, 0xAD, 0x33, 0xAD, 0x33, 0xAD, 0x53, 0xBD, 0xD4, 0xB5, 0x94, 0xBD, 0x94, 0xBD, 0xB5, 0xB5, 0x74, 0xBD, 0x94, 0xB5, 0x53, 0xAD, 0x12, 0xAD, 0x33, 0xBD, 0xB5, 0xBD, 0xB4, 0xAD, 0x51, 0x9C, 0xAF, 0x9C, 0xAF, 0x9C, 0xB0, 0x94, 0x4E, 0x94, 0x4E, 0x9C, 0x90, 0x94, 0x8F, 0x83, 0xCC, 0x94, 0x6F, 0xA4, 0xF1, 0xA4, 0xD0, 0xA4, 0xF0, 0xAD, 0x51, 0xAD, 0x10, 0xA4, 0xAF, 0xA4, 0xAF, 0xAD, 0x11, 0xA4, 0xD1, 0x94, 0x6F, 0x8C, 0x2E, 0x8C, 0x2E, 0x9C, 0xB0, 0x9C, 0xAF, 0x9C, 0xB0, 0x9C, 0xB0, 0x9C, 0xB0, 0xA4, 0xD1, 0xB5, 0x73, 0xB5, 0xB4, 0xAD, 0x32, 0xB5, 0x94, 0xAD, 0x53, 0xB5, 0xB4, 0xBD, 0xD5, 0xC5, 0xF5, 0xB5, 0x94, 0xAD, 0x53, 0xB5, 0x74, 0x9C, 0xD0, 0x94, 0x6F, 0xA4, 0xD1, 0x8C, 0x4F, 0x94, 0x90, 0x73, 0xAE, 0x94, 0x70, 0x9C, 0xB0, 0x94, 0x2E, 0x94, 0x4E, 0x8C, 0x2E, 0x9C, 0xB0, 0x9C, 0xD1, 0x9C, 0xD1, 0x9C, 0xD1, 0xA4, 0xF2, 0xB5, 0x94, 0xAD, 0x12, 0x94, 0x70, 0x94, 0x6F, 0xA4, 0xF1, 0xA5, 0x12, 0x9C, 0xB0, 0xA4, 0xF1, 0xAD, 0x31, 0xB5, 0x72, 0xAD, 0x12, 0xB5, 0x53, 0x9C, 0x90, 0x9C, 0xB1, 0x9C, 0xB0, 0x9C, 0xB1, 0x9C, 0xB0, 0x94, 0x6F, 0x94, 0x6F, 0x94, 0x6F, 0x9C, 0x8F, 0xA4, 0xF1, 0xA4, 0xF1, 0xB5, 0x73, 0xA4, 0xF2, 0x9C, 0xD1, 0xAD, 0x53, 0xAD, 0x33, 0xB5, 0x94, 0x83, 0xCE, 0x73, 0x6C, 0x83, 0xCE, 0x8C, 0x2F, 0x9C, 0xB2, 0xA4, 0xD2, 0x9C, 0xB1, 0x9C, 0xB1, 0x94, 0x70, 0x8C, 0x4F, 0x84, 0x0F, 0x73, 0xAD, 0x63, 0x0B, 0x4A, 0x8A, 0x42, 0x08, 0x31, 0xA7, 0x29, 0x86, 0x29, 0x86, 0x31, 0xA7, 0x52, 0x8B, 0x6B, 0x4E, 0x84, 0x11, 0xA5, 0x55, 0xA5, 0x55, 0xA5, 0x55, 0x9D, 0x14, 0x9C, 0xF4, 0x7B, 0xCF, 0x62, 0xC9, 0x73, 0x4A, 0x7B, 0x6A, 0x83, 0xAB, 0x8B, 0xEC, 0x94, 0x4D, 0x9C, 0x4D, 0x9C, 0x6E, 0xA4, 0x8F, 0x9C, 0x6E, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0xCF, 0xA4, 0x8F, 0x9C, 0x8F, 0x94, 0x4E, 0x94, 0x2D, 0x9C, 0x6E, 0x94, 0x4E, 0x94, 0x2D, 0x94, 0x2D, 0x8B, 0xEC, 0x9C, 0x4D, 0xB4, 0xEF, 0x94, 0x0C, 0x73, 0x6B, 0x7B, 0x8C, 0x73, 0x6B, 0x83, 0xED, 0x8C, 0x4E, 0x8C, 0x0E, 0x94, 0x4F, 0x9C, 0xB0, 0x8C, 0x4F, 0x94, 0x6F, 0x73, 0x6B, 0x9C, 0x90, 0xAD, 0x52, 0x9C, 0xD1, 0x83, 0xEE, 0x7B, 0xAC, 0x8C, 0x2F, 0x94, 0x70, 0x9C, 0xD1, 0x94, 0x70, 0x63, 0x2B, 0x4A, 0x48, 0x39, 0xE7, 0x39, 0xC6, 0x41, 0xE7, 0x42, 0x07, 0x42, 0x28, 0x4A, 0x48, 0x4A, 0x48, 0x5A, 0xCA, 0x63, 0x2C, 0x7B, 0xCE, 0x8C, 0x71, 0x94, 0xB2, 0x7B, 0xEF, 0x84, 0x31, 0xA4, 0xF4, 0x94, 0x71, 0x4A, 0x69, 0x84, 0x30, 0xBD, 0xB4, 0xB5, 0x73, 0xB5, 0x94, 0x9C, 0xB0, 0x94, 0xB0, 0x63, 0x0A, 0x42, 0x27, 0x31, 0x85, 0x41, 0xE7, 0x52, 0xAA, 0x63, 0x2C, 0x6B, 0x4D, 0x5A, 0xEB, 0x6B, 0x6D, 0x7B, 0xAF, 0x94, 0xB3, 0xA5, 0x14, 0xBD, 0xD8, 0xCE, 0x59, 0x94, 0x93, 0xA5, 0x15, 0xCE, 0x7A, 0xC6, 0x18, 0xBD, 0xF6, 0xB5, 0x94, 0xAD, 0x53, 0x8C, 0x4E, 0x73, 0x8B, 0x94, 0x8F, 0xA5, 0x11, 0xA5, 0x11, 0x9C, 0x8F, 0x9C, 0x8E, 0x94, 0x6F, 0x73, 0x8C, 0x73, 0x8C, 0x84, 0x2F, 0x8C, 0x4F, 0x4A, 0x48, 0x8C, 0x70, 0xA5, 0x33, 0xA5, 0x32, 0xA5, 0x12, 0x94, 0x6F, 0x9C, 0x8F, 0x94, 0x6F, 0xA5, 0x12, 0x94, 0x90, 0x9C, 0xD1, 0xA5, 0x32, 0xB5, 0x94, 0x7B, 0xAD, 0x7B, 0xEE, 0x84, 0x2F, 0x94, 0xB1, 0xAD, 0x32, 0xA4, 0xF1, 0x8C, 0x4E, 0x94, 0x8F, 0xA4, 0xF1, 0xB5, 0x93, 0xD6, 0x77, 0xCE, 0x56, 0xD6, 0x76, 0xDE, 0x96, 0xD6, 0x55, 0xBD, 0x72, 0xA4, 0xCF, 0xA4, 0xAE, 0xAD, 0x31, 0xBD, 0xD3, 0xC5, 0xF4, 0xCE, 0x55, 0xCE, 0x36, 0xCE, 0x78, 0x9C, 0xD3, 0x52, 0xAB, 0x94, 0xB2, 0xD6, 0xB8, 0xC6, 0x15, 0xCE, 0x35, 0xBD, 0xF4, 0xD6, 0x77, 0xC6, 0x15, 0xC5, 0xF5, 0xC5, 0xF5, 0xC6, 0x15, 0xB5, 0x93, 0xCE, 0x36, 0xD6, 0x76, 0xE6, 0xD8, 0x94, 0x90, 0xBD, 0x94, 0xA4, 0xD1, 0xCE, 0x57, 0xBD, 0xD5, 0x9C, 0xD1, 0x8C, 0x4F, 0xAD, 0x12, 0xA5, 0x11, 0xA4, 0xF1, 0xB5, 0x53, 0xAD, 0x12, 0xB5, 0x53, 0xB5, 0x73, 0xA5, 0x12, 0xAD, 0x52, 0xA5, 0x11, 0xAD, 0x32, 0xA4, 0xF1, 0x94, 0x6F, 0xBD, 0x94, 0xBD, 0xB4, 0xBD, 0x94, 0xAD, 0x52, 0x8C, 0x2E, 0xB5, 0x73, 0xA4, 0xF1, 0xAD, 0x12, 0xA5, 0x12, 0xB5, 0x73, 0xC5, 0xD4, 0xBD, 0x93, 0xB5, 0x32, 0x94, 0x6F, 0x8C, 0x2E, 0x94, 0x4F, 0xAD, 0x12, 0xBD, 0xB4, 0xBD, 0x94, 0xBD, 0xB4, 0x9C, 0x90, 0xB5, 0x53, 0xA4, 0xF1, 0xAD, 0x12, 0xA5, 0x11, 0x9C, 0xB0, 0xA4, 0xD1, 0xAC, 0xF1, 0xAD, 0x12, 0xB5, 0x53, 0xA4, 0xF1, 0xB5, 0x53, 0xAD, 0x52, 0xAD, 0x32, 0xAD, 0x12, 0xAD, 0x12, 0xB5, 0x52, 0xB5, 0x53, 0xBD, 0x94, 0xCD, 0xF6, 0xA4, 0xD1, 0x94, 0x6F, 0xB5, 0x52, 0xB5, 0x52, 0xAD, 0x32, 0xAD, 0x11, 0xAD, 0x11, 0xAD, 0x11, 0xBD, 0xB4, 0xC5, 0xF5, 0xCD, 0xF5, 0xBD, 0xB4, 0xBD, 0x94, 0xBD, 0x94, 0xC5, 0xB4, 0xBD, 0xB4, 0xC5, 0xD5, 0xC5, 0xD5, 0xCE, 0x16, 0xCE, 0x15, 0xC5, 0xF5, 0xCE, 0x15, 0xC5, 0xD5, 0xBD, 0x94, 0xB5, 0x32, 0xB5, 0x52, 0xB5, 0x53, 0xB5, 0x53, 0xB5, 0x53, 0xAD, 0x32, 0xAD, 0x32, 0xA4, 0xF2, 0xB5, 0x32, 0xC5, 0xB4, 0xB5, 0x53, 0xB5, 0x73, 0xA4, 0xF2, 0x9C, 0xD1, 0xB5, 0x53, 0xB5, 0x53, 0xB5, 0x52, 0xAD, 0x32, 0xAC, 0xF2, 0xA4, 0xF1, 0x9C, 0xD1, 0x8C, 0x2F, 0x94, 0x50, 0xA4, 0xF2, 0xA4, 0xD1, 0x9C, 0x90, 0x94, 0x90, 0x94, 0x6F, 0x94, 0x90, 0x94, 0x6F, 0x9C, 0xB0, 0x8C, 0x2E, 0xBD, 0x93, 0xC5, 0xD4, 0xA4, 0xF1, 0xAD, 0x32, 0xB5, 0x73, 0x9C, 0xB0, 0xA4, 0xF1, 0xA5, 0x12, 0xA4, 0xF2, 0xA4, 0xF1, 0xA4, 0xF2, 0x9C, 0xB0, 0x94, 0x6F, 0x83, 0xCD, 0x8C, 0x2E, 0xAD, 0x32, 0xB5, 0x73, 0xB5, 0x94, 0xB5, 0x74, 0xBD, 0xB5, 0xBD, 0xD5, 0xAD, 0x74, 0xA5, 0x13, 0x83, 0xEE, 0x6B, 0x2C, 0x83, 0xEE, 0x9C, 0xB1, 0xAD, 0x13, 0xAD, 0x33, 0xA4, 0xF2, 0x94, 0x91, 0x8C, 0x2F, 0x7B, 0xEE, 0x6B, 0x6D, 0x63, 0x0C, 0x52, 0x8A, 0x3A, 0x08, 0x31, 0xA7, 0x29, 0x66, 0x29, 0x86, 0x31, 0xA6, 0x39, 0xE8, 0xA5, 0x55, 0xA5, 0x35, 0xA5, 0x35, 0x9D, 0x14, 0x94, 0xD3, 0x83, 0xEF, 0x6B, 0x2B, 0x6B, 0x2A, 0x62, 0xE9, 0x62, 0xE9, 0x73, 0x4A, 0x7B, 0x6B, 0x83, 0xCB, 0x83, 0xCB, 0x8B, 0xEC, 0x8B, 0xCC, 0x9C, 0x6E, 0x9C, 0x8E, 0x9C, 0x6E, 0x94, 0x0D, 0xAC, 0xD0, 0xBD, 0x51, 0xB5, 0x30, 0xA4, 0xAF, 0xAC, 0xD0, 0xAC, 0xF0, 0xAC, 0xCF, 0xAC, 0xCF, 0xAC, 0xCF, 0xAC, 0xEF, 0xAC, 0xEF, 0xA4, 0xAF, 0x9C, 0x6E, 0x9C, 0x6E, 0x9C, 0x8F, 0x9C, 0x6E, 0x9C, 0x6E, 0x94, 0x4E, 0x8C, 0x0D, 0x83, 0xCC, 0x83, 0xCC, 0x83, 0xCC, 0x7B, 0x8C, 0x7B, 0x8B, 0x83, 0xCC, 0x7B, 0x8B, 0x6B, 0x2A, 0x62, 0xE9, 0x62, 0xE9, 0x63, 0x0A, 0x62, 0xE9, 0x6B, 0x2A, 0x52, 0x68, 0x39, 0xC6, 0x39, 0xC6, 0x39, 0xC6, 0x39, 0xC6, 0x31, 0xA6, 0x42, 0x07, 0x4A, 0x48, 0x5A, 0xCA, 0x63, 0x2C, 0x83, 0xEF, 0x8C, 0x50, 0x9C, 0xB2, 0x94, 0x71, 0xB5, 0x96, 0xBD, 0xD7, 0x8C, 0x51, 0x31, 0x86, 0x7B, 0xEE, 0xB5, 0x73, 0xB5, 0x73, 0xBD, 0xB4, 0xB5, 0x93, 0xA5, 0x11, 0x7B, 0xAC, 0x9C, 0x90, 0x4A, 0x27, 0x42, 0x07, 0x42, 0x27, 0x52, 0x89, 0x5A, 0xEB, 0x63, 0x0B, 0x5A, 0xEB, 0x63, 0x0C, 0x94, 0x72, 0xA5, 0x35, 0xAD, 0x55, 0x8C, 0x51, 0x83, 0xF0, 0x8C, 0x31, 0xC6, 0x18, 0xE7, 0x1C, 0x94, 0xB2, 0xB5, 0x94, 0xBD, 0xF5, 0xA5, 0x12, 0xA5, 0x11, 0x9C, 0xD0, 0x8C, 0x6E, 0x9C, 0xD0, 0x83, 0xCB, 0x9C, 0x8E, 0x8C, 0x4E, 0x8C, 0x2E, 0x84, 0x2E, 0x8C, 0x6F, 0x84, 0x0E, 0x4A, 0x48, 0x8C, 0x70, 0xB5, 0x94, 0xB5, 0x94, 0xB5, 0x94, 0x9C, 0x8F, 0xA4, 0xAF, 0x94, 0x6F, 0x9C, 0xF2, 0xA5, 0x12, 0xAD, 0x73, 0xAD, 0x73, 0xB5, 0x73, 0x8C, 0x2F, 0x8C, 0x70, 0x8C, 0x90, 0x9C, 0xF1, 0xB5, 0x93, 0xBD, 0x93, 0x9C, 0x8F, 0x8C, 0x4E, 0xAD, 0x32, 0xBD, 0xF4, 0xD6, 0x77, 0xC6, 0x15, 0xD6, 0x96, 0xDE, 0xB6, 0xD6, 0x76, 0xBD, 0x92, 0xAC, 0xEF, 0x9C, 0x8E, 0xA4, 0xAF, 0xAD, 0x31, 0xB5, 0x72, 0xC6, 0x15, 0xC6, 0x15, 0xCE, 0x78, 0x9C, 0xF3, 0x8C, 0x72, 0xA5, 0x54, 0xD6, 0x98, 0xD6, 0x76, 0xD6, 0x76, 0xC6, 0x15, 0xCE, 0x36, 0xCE, 0x35, 0xCE, 0x35, 0xD6, 0x97, 0xD6, 0x56, 0xAD, 0x52, 0xCE, 0x36, 0xDE, 0x97, 0xDE, 0xD8, 0x94, 0x6F, 0xB5, 0x74, 0xA4, 0xF2, 0xCE, 0x36, 0xBD, 0xB4, 0x9C, 0xB0, 0x94, 0x70, 0xA4, 0xF1, 0xAD, 0x32, 0xA4, 0xF1, 0xB5, 0x73, 0xB5, 0x73, 0xBD, 0xD5, 0xC5, 0xF5, 0xA4, 0xF1, 0xAD, 0x12, 0x83, 0xED, 0x9C, 0xB0, 0xB5, 0x94, 0x9C, 0xB0, 0xBD, 0xB4, 0xB5, 0xB4, 0xB5, 0x94, 0xAD, 0x32, 0x8C, 0x2E, 0xA5, 0x12, 0x9C, 0xB0, 0x94, 0x8F, 0x9C, 0xB0, 0xA5, 0x11, 0x9C, 0xAF, 0xAD, 0x10, 0xB5, 0x31, 0xA4, 0xF1, 0x94, 0x6F, 0x9C, 0x90, 0xBD, 0xB5, 0xC5, 0xD5, 0xBD, 0xB4, 0xB5, 0x73, 0x94, 0x6F, 0xA4, 0xF1, 0xA4, 0xD0, 0x9C, 0xAF, 0x94, 0x4E, 0x8C, 0x2D, 0xA4, 0xD0, 0xAD, 0x32, 0xBD, 0x93, 0xBD, 0xB4, 0xAD, 0x11, 0xA4, 0xF1, 0x9C, 0x8F, 0x9C, 0x8F, 0x9C, 0x8F, 0x9C, 0xB0, 0xAD, 0x32, 0xA4, 0xF1, 0x94, 0x4F, 0xB5, 0x53, 0x9C, 0x90, 0xC5, 0xD4, 0xBD, 0x93, 0xBD, 0x94, 0xC5, 0xF5, 0xC5, 0xB4, 0xBD, 0xB4, 0xBD, 0xB4, 0xBD, 0xB4, 0xA4, 0xF1, 0xAD, 0x32, 0xBD, 0x94, 0xAC, 0xF1, 0x9C, 0xB0, 0x9C, 0x8F, 0x94, 0x4F, 0xA4, 0xD1, 0x9C, 0x6F, 0x8C, 0x0E, 0x8C, 0x0D, 0x94, 0x4F, 0x9C, 0x90, 0xA4, 0xD1, 0xAC, 0xF1, 0xAC, 0xF1, 0xA4, 0xD1, 0xB5, 0x73, 0xB5, 0x32, 0xA4, 0xF1, 0xAD, 0x12, 0xAC, 0xF1, 0xAC, 0xF1, 0xB5, 0x53, 0xB5, 0x53, 0xBD, 0x73, 0xB5, 0x32, 0xAD, 0x12, 0xBD, 0x94, 0xCE, 0x36, 0xCD, 0xF6, 0xCD, 0xF5, 0xCE, 0x16, 0xCE, 0x36, 0xCE, 0x16, 0xCE, 0x16, 0xCE, 0x36, 0xCE, 0x36, 0xCE, 0x16, 0xD6, 0x36, 0xCD, 0xF5, 0xC5, 0xD5, 0xC5, 0xB4, 0xBD, 0x94, 0xB5, 0x53, 0xB5, 0x53, 0xAD, 0x12, 0xAD, 0x32, 0xAC, 0xF1, 0x94, 0x4F, 0x83, 0xED, 0x8C, 0x0E, 0x83, 0xED, 0x83, 0xCD, 0x7B, 0x8C, 0x7B, 0xAD, 0x7B, 0xAD, 0x7B, 0xAD, 0x83, 0xCD, 0x8C, 0x2F, 0x94, 0x4F, 0x94, 0x4F, 0x94, 0x90, 0xAD, 0x12, 0xBD, 0xB4, 0xBD, 0xD5, 0xC5, 0xD5, 0xCE, 0x36, 0xC6, 0x16, 0xCE, 0x37, 0xCE, 0x17, 0x9C, 0xB1, 0x8C, 0x2F, 0x7B, 0xAD, 0x73, 0x8C, 0x83, 0xEE, 0x9C, 0xD1, 0xAD, 0x33, 0xA5, 0x13, 0x9C, 0xB1, 0x8C, 0x50, 0x84, 0x0F, 0x7B, 0xEF, 0x73, 0xAE, 0x6B, 0x8D, 0x63, 0x0C, 0x4A, 0x69, 0x31, 0xC7, 0x31, 0x86, 0x94, 0xD3, 0x9D, 0x14, 0x9C, 0xF4, 0x94, 0xB3, 0x94, 0xB3, 0x83, 0xEF, 0x73, 0x8C, 0x7B, 0x8C, 0x7B, 0xAC, 0x6B, 0x2A, 0x7B, 0x8B, 0x8C, 0x0D, 0x94, 0x2E, 0x94, 0x2D, 0x94, 0x2E, 0x8C, 0x0D, 0x94, 0x2D, 0x9C, 0x6E, 0x9C, 0x8F, 0x73, 0x2A, 0x6A, 0xE8, 0x94, 0x2D, 0xA4, 0x8E, 0x9C, 0x6E, 0x83, 0xAB, 0x83, 0x8B, 0x7B, 0x6B, 0x7B, 0x6B, 0x73, 0x29, 0x73, 0x29, 0x8C, 0x0D, 0x7B, 0x6A, 0x8B, 0xEC, 0x8B, 0xEC, 0x8B, 0xED, 0x8B, 0xCC, 0x8B, 0xEC, 0x8B, 0xED, 0x94, 0x0D, 0x83, 0xCC, 0x83, 0xAC, 0x8B, 0xED, 0x8C, 0x0D, 0x9C, 0x4E, 0x9C, 0x4E, 0xAC, 0xD0, 0x94, 0x0D, 0x8C, 0x2E, 0x94, 0x0E, 0x94, 0x2E, 0x94, 0x4E, 0x94, 0x2E, 0x8C, 0x0E, 0x52, 0x68, 0x31, 0xA6, 0x39, 0xC6, 0x31, 0x85, 0x31, 0x85, 0x42, 0x07, 0x4A, 0x28, 0x52, 0x89, 0x52, 0xAA, 0x63, 0x0B, 0x73, 0x8D, 0x8C, 0x30, 0x94, 0x71, 0xB5, 0x96, 0xBD, 0xD7, 0xB5, 0x76, 0x39, 0xC7, 0x39, 0xE7, 0x8C, 0x2E, 0x8C, 0x0D, 0x83, 0xCC, 0x83, 0xCC, 0x83, 0xAC, 0x83, 0xCD, 0xAD, 0x10, 0x9C, 0x6E, 0x6B, 0x0A, 0x42, 0x07, 0x4A, 0x69, 0x52, 0x89, 0x63, 0x0C, 0x52, 0xAA, 0x5A, 0xEC, 0x63, 0x2D, 0x84, 0x10, 0xA5, 0x14, 0x73, 0x8E, 0x63, 0x0D, 0x8C, 0x51, 0x94, 0xB3, 0xAD, 0x55, 0x7B, 0xEF, 0xB5, 0x74, 0xB5, 0x74, 0x9C, 0xB0, 0x9C, 0xB0, 0xA4, 0xD0, 0x8C, 0x4E, 0x9C, 0x8F, 0x8B, 0xEC, 0x94, 0x0D, 0x62, 0xC8, 0x6B, 0x4A, 0x73, 0x6B, 0x83, 0xED, 0x83, 0xED, 0x4A, 0x68, 0x7C, 0x0E, 0xAD, 0x73, 0xBD, 0xB4, 0xB5, 0x73, 0x9C, 0x8E, 0xA4, 0xAF, 0x8C, 0x2D, 0xA5, 0x12, 0xA4, 0xF1, 0xAD, 0x32, 0xAD, 0x53, 0xAD, 0x32, 0x9C, 0xD1, 0x94, 0x90, 0x8C, 0x4F, 0xA5, 0x12, 0xBD, 0xD4, 0xBD, 0xD4, 0x94, 0x8F, 0x7B, 0xAC, 0xB5, 0x93, 0xCE, 0x35, 0xCE, 0x56, 0xAD, 0x51, 0xCE, 0x14, 0xD6, 0x96, 0xDE, 0xB6, 0xBD, 0x92, 0xB5, 0x10, 0x94, 0x2C, 0x9C, 0x8E, 0xB5, 0x51, 0xAD, 0x51, 0xC5, 0xF4, 0xBD, 0xD4, 0xCE, 0x78, 0xAD, 0x55, 0xA4, 0xF4, 0xC6, 0x17, 0xCE, 0x36, 0xCE, 0x35, 0xB5, 0x93, 0xCE, 0x55, 0xCE, 0x56, 0xBD, 0xD4, 0xCE, 0x36, 0xD6, 0x97, 0xCE, 0x55, 0xCE, 0x56, 0xD6, 0x77, 0xDE, 0xB7, 0xDE, 0xD8, 0x8C, 0x4F, 0xB5, 0x74, 0xA4, 0xF2, 0xCE, 0x37, 0xBD, 0x94, 0x9C, 0x90, 0x94, 0x90, 0xA4, 0xF1, 0xA5, 0x11, 0xAD, 0x32, 0xBD, 0xD5, 0xB5, 0x73, 0xB5, 0x73, 0xCE, 0x36, 0xB5, 0x73, 0xB5, 0x74, 0xAD, 0x12, 0x94, 0x90, 0xCE, 0x36, 0xC6, 0x16, 0xC5, 0xF5, 0xC6, 0x16, 0xC5, 0xF5, 0xB5, 0x94, 0x8C, 0x2E, 0xA4, 0xF2, 0x94, 0x6F, 0x8C, 0x2E, 0x94, 0x8F, 0x9C, 0xAF, 0xA4, 0xAF, 0xC5, 0xB3, 0xC5, 0xB3, 0xA4, 0xF1, 0x83, 0xED, 0xA4, 0xD1, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0x73, 0xAD, 0x32, 0x94, 0x6F, 0xB5, 0x32, 0xB5, 0x72, 0xA4, 0xD0, 0xA4, 0xF1, 0xA4, 0xD0, 0xB5, 0x52, 0xB5, 0x52, 0xB5, 0x52, 0xAD, 0x11, 0x94, 0x4E, 0x94, 0x6E, 0x8C, 0x2E, 0x94, 0x4E, 0x94, 0x4E, 0x8C, 0x2D, 0x9C, 0x8F, 0xAD, 0x12, 0x94, 0x4F, 0xBD, 0xB4, 0xBD, 0x93, 0xCE, 0x15, 0xC5, 0xF5, 0xC5, 0xB4, 0xCE, 0x15, 0xC5, 0xF4, 0xC5, 0xF5, 0xC5, 0xD4, 0xBD, 0xB3, 0xC5, 0xF5, 0xBD, 0xB4, 0xAD, 0x32, 0x8C, 0x2E, 0x8C, 0x2E, 0xA4, 0xF1, 0x9C, 0xB0, 0x9C, 0xB0, 0xA4, 0xF1, 0xA4, 0xD1, 0x94, 0x90, 0x9C, 0x90, 0x94, 0x90, 0x8C, 0x2F, 0xAD, 0x12, 0xBD, 0xB4, 0xCE, 0x36, 0xCE, 0x36, 0xCE, 0x16, 0xD6, 0x57, 0xD6, 0x57, 0xA4, 0xF1, 0x83, 0xED, 0x83, 0xED, 0xAC, 0xF2, 0xB5, 0x32, 0x94, 0x4F, 0x94, 0x4F, 0x9C, 0x90, 0x9C, 0x6F, 0x9C, 0xB0, 0x94, 0x6F, 0x8C, 0x4E, 0x94, 0x6F, 0xA4, 0xF1, 0x9C, 0x90, 0x9C, 0x6F, 0xA4, 0xD0, 0xAC, 0xF1, 0xB5, 0x53, 0xAD, 0x11, 0xB5, 0x32, 0xB5, 0x32, 0xAD, 0x11, 0xAC, 0xF1, 0xB5, 0x32, 0xB5, 0x53, 0xAD, 0x32, 0xB5, 0x53, 0xB5, 0x33, 0xB5, 0x53, 0xBD, 0x73, 0xBD, 0x94, 0xB5, 0x53, 0xB5, 0x73, 0xB5, 0x53, 0x94, 0x70, 0xA4, 0xD1, 0xA4, 0xF1, 0xA4, 0xF1, 0xB5, 0x53, 0xAD, 0x32, 0xAD, 0x32, 0xB5, 0x53, 0xB5, 0x52, 0xB5, 0x52, 0xBD, 0x93, 0xBD, 0x93, 0xBD, 0xB4, 0xBD, 0x94, 0xBD, 0xB4, 0x9C, 0x90, 0xA5, 0x12, 0xAD, 0x33, 0x9C, 0xD2, 0x94, 0x70, 0x7B, 0xAD, 0x7B, 0x8D, 0x7B, 0xCE, 0x8C, 0x50, 0x9C, 0xB1, 0x9C, 0xD2, 0x9C, 0xB1, 0x94, 0x70, 0x8C, 0x50, 0x8C, 0x50, 0x84, 0x30, 0x7B, 0xCE, 0x5A, 0xEB, 0xAD, 0x75, 0xA5, 0x55, 0xA5, 0x55, 0xA5, 0x35, 0x9C, 0xF4, 0x84, 0x10, 0x6B, 0x2B, 0x7B, 0x8C, 0x83, 0xED, 0x84, 0x0D, 0x84, 0x0D, 0x8C, 0x0D, 0x8C, 0x0D, 0x8C, 0x2E, 0xA4, 0xB0, 0x94, 0x6F, 0x94, 0x4E, 0x7B, 0x8B, 0x8B, 0xED, 0x83, 0xCC, 0x94, 0x6E, 0xA4, 0xCF, 0xAC, 0xAF, 0xB5, 0x11, 0xA4, 0x8F, 0x9C, 0x4E, 0x9C, 0x4F, 0xA4, 0x90, 0x8B, 0xED, 0x8C, 0x2E, 0xA4, 0xB0, 0x8C, 0x0D, 0xA4, 0xB0, 0xA4, 0xD0, 0xB5, 0x52, 0x9C, 0x8F, 0x94, 0x4F, 0x9C, 0x8F, 0xA4, 0xF0, 0x94, 0x6E, 0x83, 0xCC, 0x9C, 0x6F, 0xB5, 0x32, 0xB5, 0x72, 0x83, 0xCC, 0x9C, 0x4E, 0x7B, 0x4A, 0x8B, 0xCD, 0x83, 0xCD, 0x83, 0xAC, 0x83, 0xAC, 0x7B, 0x8B, 0x8B, 0xEE, 0x73, 0x8D, 0x4A, 0x28, 0x39, 0xE7, 0x31, 0xA6, 0x31, 0x85, 0x39, 0xC6, 0x41, 0xE7, 0x4A, 0x28, 0x4A, 0x28, 0x5A, 0xCB, 0x73, 0x8D, 0x8C, 0x30, 0x94, 0x92, 0xA4, 0xF3, 0xC6, 0x18, 0xBD, 0xD7, 0x83, 0xF0, 0x20, 0xE4, 0x8C, 0x4F, 0xA4, 0xB0, 0x94, 0x2D, 0x9C, 0x8F, 0x9C, 0x6F, 0x9C, 0x6F, 0xA4, 0xAF, 0xA4, 0xAF, 0x9C, 0x6F, 0x62, 0xEA, 0x52, 0x89, 0x5B, 0x0B, 0x73, 0xAE, 0x52, 0x8A, 0x5A, 0xAA, 0x4A, 0x49, 0x63, 0x0C, 0x8C, 0x51, 0x94, 0x92, 0xA4, 0xF4, 0xB5, 0x97, 0xB5, 0x96, 0xCE, 0x59, 0xB5, 0xB6, 0xCE, 0x38, 0xBD, 0x95, 0x9C, 0x70, 0x9C, 0x4E, 0x9C, 0x4D, 0x94, 0x4D, 0x9C, 0x6E, 0xA4, 0x8E, 0xBD, 0x51, 0xBD, 0x71, 0xB5, 0x30, 0xAC, 0xEF, 0xAC, 0xCF, 0xAC, 0xCF, 0xA4, 0xAF, 0xAC, 0xD0, 0xA4, 0xAF, 0xA4, 0xCF, 0xAC, 0xCF, 0xB5, 0x30, 0xA4, 0x8E, 0x83, 0xCC, 0x8B, 0xEC, 0x83, 0xAB, 0x83, 0xEC, 0x94, 0x4D, 0x83, 0xEC, 0x83, 0xED, 0x7B, 0xAC, 0x83, 0xED, 0x9C, 0xAF, 0xAD, 0x52, 0xAD, 0x31, 0x8C, 0x4E, 0x5A, 0xC8, 0xAD, 0x32, 0xCE, 0x56, 0xBD, 0xB3, 0x94, 0x6E, 0xBD, 0xB3, 0xD6, 0x55, 0xDE, 0x76, 0xA4, 0xAF, 0xB5, 0x30, 0x94, 0x0C, 0xA4, 0xEF, 0xBD, 0xD3, 0xB5, 0x72, 0xC5, 0xD4, 0xB5, 0x72, 0xC6, 0x17, 0xB5, 0x96, 0xA5, 0x35, 0xD6, 0x78, 0xD6, 0x76, 0xCE, 0x35, 0xBD, 0xD4, 0xCE, 0x15, 0xD6, 0x76, 0xBD, 0xD4, 0xD6, 0x76, 0xDE, 0xB7, 0xD6, 0x76, 0xD6, 0x97, 0xDE, 0x97, 0xDE, 0xB8, 0xDE, 0xD8, 0x94, 0x70, 0xB5, 0x53, 0xB5, 0x73, 0xCE, 0x36, 0xAD, 0x53, 0x9C, 0xB0, 0x9C, 0xD0, 0xC5, 0xF5, 0xBD, 0xB4, 0xB5, 0xB4, 0xC5, 0xF5, 0xBD, 0xD5, 0xCE, 0x36, 0xC5, 0xF5, 0xBD, 0xB4, 0xC5, 0xF5, 0xBD, 0xD5, 0xAD, 0x33, 0xD6, 0x77, 0xCE, 0x57, 0xC5, 0xF5, 0xC6, 0x16, 0xBD, 0xD5, 0xBD, 0xB4, 0x8C, 0x4E, 0x9C, 0xD0, 0x8C, 0x2E, 0x7B, 0xAC, 0x8C, 0x2E, 0x7B, 0xCC, 0x8C, 0x0D, 0x9C, 0xAF, 0xA4, 0xD0, 0xA4, 0xF1, 0x7B, 0xAC, 0xA5, 0x12, 0xBD, 0xB4, 0xAD, 0x32, 0xB5, 0x73, 0xA4, 0xF1, 0x8C, 0x2E, 0xAD, 0x32, 0xAD, 0x11, 0xA4, 0xCF, 0x9C, 0x8F, 0x9C, 0x6E, 0xB5, 0x73, 0x9C, 0xB0, 0xAD, 0x11, 0xA4, 0xF0, 0x9C, 0xAF, 0xA4, 0xF1, 0x9C, 0xAF, 0x9C, 0x8F, 0x8C, 0x2E, 0x94, 0x6E, 0xAD, 0x11, 0xB5, 0x73, 0x94, 0x6F, 0xBD, 0x94, 0xA4, 0xF1, 0xAD, 0x31, 0xBD, 0xB3, 0xC5, 0xF4, 0xCE, 0x35, 0xC5, 0xD4, 0xC5, 0xF4, 0xC5, 0xF4, 0xC5, 0xD4, 0xBD, 0xD4, 0xBD, 0x93, 0xB5, 0x52, 0x9C, 0xB0, 0xAD, 0x32, 0xB5, 0x73, 0xAD, 0x32, 0xA4, 0xF1, 0xAD, 0x32, 0xAD, 0x32, 0xA4, 0xF1, 0xA4, 0xF1, 0x9C, 0xD1, 0x84, 0x0E, 0xAD, 0x32, 0xA5, 0x12, 0xA4, 0xF1, 0xA4, 0xD1, 0x9C, 0x90, 0xA4, 0xD1, 0xA4, 0xF1, 0x9C, 0x90, 0x9C, 0xB0, 0x9C, 0xD1, 0x9C, 0x90, 0xAD, 0x32, 0xA4, 0xF1, 0xAD, 0x11, 0xA4, 0xD1, 0xAD, 0x12, 0xB5, 0x73, 0xBD, 0x94, 0xB5, 0x93, 0xB5, 0x73, 0xBD, 0xD5, 0xC5, 0xF5, 0xB5, 0x73, 0xA5, 0x11, 0x94, 0x6F, 0xA4, 0xD0, 0x9C, 0x6F, 0x9C, 0x6F, 0x9C, 0x6F, 0xA4, 0xB0, 0xA4, 0xD0, 0xAD, 0x11, 0xAD, 0x11, 0xA4, 0xF1, 0xAD, 0x11, 0xAC, 0xF1, 0xA4, 0xF1, 0x9C, 0x8F, 0x94, 0x4F, 0x9C, 0x6F, 0xAC, 0xF1, 0xAD, 0x11, 0x94, 0x6F, 0xAC, 0xF1, 0x9C, 0x8F, 0x9C, 0x6F, 0xAD, 0x31, 0xAD, 0x31, 0xAD, 0x11, 0x9C, 0x8F, 0x9C, 0x6F, 0x94, 0x4E, 0x9C, 0x6F, 0x8C, 0x2D, 0x8C, 0x0D, 0x94, 0x4E, 0x9C, 0xB0, 0xAD, 0x32, 0xBD, 0x94, 0xAD, 0x12, 0xA5, 0x12, 0xAD, 0x32, 0xA5, 0x12, 0x9C, 0xB1, 0x8C, 0x0F, 0x6B, 0x2B, 0x8C, 0x30, 0x8C, 0x50, 0x94, 0x91, 0x94, 0x91, 0x8C, 0x70, 0x8C, 0x70, 0x8C, 0x50, 0x8C, 0x30, 0x7B, 0xCE, 0xAD, 0x76, 0xAD, 0x75, 0xAD, 0x55, 0xA5, 0x55, 0xA5, 0x35, 0x8C, 0x51, 0x5A, 0xC9, 0x73, 0x8B, 0x83, 0xCC, 0x84, 0x0D, 0x84, 0x0D, 0x8C, 0x4E, 0x8C, 0x2D, 0x8C, 0x0D, 0x94, 0x8F, 0x94, 0x6F, 0x9C, 0x90, 0x8C, 0x2E, 0x94, 0x4E, 0x52, 0x88, 0xA4, 0xD0, 0x9C, 0x8E, 0xA4, 0xAF, 0xAC, 0xD0, 0x9C, 0x8F, 0x9C, 0x8F, 0x94, 0x4E, 0xA4, 0xB0, 0x9C, 0x8F, 0xAD, 0x11, 0xA4, 0xF1, 0xA4, 0xF0, 0xA4, 0xF1, 0xAD, 0x31, 0xB5, 0x52, 0x9C, 0xAF, 0x94, 0x6F, 0xA4, 0xD0, 0xAD, 0x31, 0xB5, 0x52, 0x9C, 0xB0, 0xAD, 0x32, 0xB5, 0x52, 0xAD, 0x32, 0x94, 0x4E, 0x94, 0x4E, 0x73, 0x4A, 0x8C, 0x0D, 0x94, 0x2E, 0x8B, 0xCD, 0x7B, 0x8C, 0x73, 0x4B, 0x7B, 0xAD, 0x73, 0x8D, 0x62, 0xEB, 0x4A, 0x69, 0x41, 0xE7, 0x31, 0x85, 0x31, 0x65, 0x41, 0xE7, 0x41, 0xE7, 0x4A, 0x49, 0x52, 0x8A, 0x6B, 0x4C, 0x7B, 0xAE, 0x83, 0xEF, 0x94, 0x71, 0xB5, 0x76, 0xB5, 0x76, 0xD6, 0x7A, 0x4A, 0x6A, 0x73, 0x6C, 0x94, 0x2E, 0x7B, 0x8B, 0x73, 0x6B, 0x62, 0xC9, 0x62, 0xC9, 0x73, 0x4A, 0x73, 0x4A, 0x73, 0x4B, 0x73, 0x6B, 0x52, 0x89, 0x4A, 0x69, 0x5A, 0xEB, 0x52, 0xAA, 0x5A, 0xCB, 0x5A, 0xAA, 0x5A, 0xEB, 0x73, 0x8E, 0x84, 0x10, 0x9C, 0xD4, 0xC6, 0x39, 0xE6, 0xFC, 0xE7, 0x1C, 0xC5, 0xD7, 0xB5, 0x55, 0xD6, 0x59, 0xBD, 0x75, 0x8B, 0xED, 0x8B, 0xCB, 0x9C, 0x4D, 0x94, 0x2D, 0x9C, 0x4D, 0x93, 0xEB, 0xA4, 0x6D, 0xAC, 0xCF, 0xB4, 0xEF, 0xAC, 0xEF, 0xAC, 0xCF, 0xA4, 0x6E, 0xC5, 0x91, 0xBD, 0x30, 0xAC, 0xAE, 0xAC, 0xCF, 0xB5, 0x10, 0xB4, 0xEF, 0xA4, 0xAE, 0xB4, 0xEF, 0xBD, 0x51, 0xB4, 0xEF, 0xAC, 0xCF, 0xAC, 0xEF, 0xB5, 0x10, 0xB5, 0x10, 0xB5, 0x10, 0xB5, 0x10, 0xAC, 0xF0, 0xAC, 0xCF, 0xA4, 0x8E, 0x94, 0x2D, 0x94, 0x2D, 0x9C, 0x6D, 0x94, 0x2C, 0x83, 0xEB, 0x94, 0x4D, 0x9C, 0x8E, 0x9C, 0x8E, 0x7B, 0x6A, 0xBD, 0x51, 0xA4, 0xAE, 0x94, 0x4C, 0x9C, 0x6E, 0xC5, 0xD3, 0xBD, 0xB3, 0xB5, 0x53, 0xCE, 0x38, 0xB5, 0xB7, 0xAD, 0x35, 0xDE, 0x98, 0xCE, 0x35, 0xD6, 0x76, 0xC6, 0x15, 0xCE, 0x15, 0xDE, 0x97, 0xD6, 0x97, 0xD6, 0x56, 0xCE, 0x15, 0xD6, 0x97, 0xDE, 0xB7, 0xD6, 0x97, 0xDE, 0xB7, 0xDE, 0xB8, 0x94, 0x90, 0xAD, 0x53, 0xB5, 0x53, 0xD6, 0x77, 0xC5, 0xF5, 0xAD, 0x52, 0x94, 0x90, 0xB5, 0x93, 0xB5, 0x73, 0xB5, 0x93, 0xC6, 0x15, 0xB5, 0xB4, 0xBD, 0xD4, 0xBD, 0xD4, 0xB5, 0x93, 0xBD, 0xD4, 0xBD, 0xD4, 0xAD, 0x73, 0xD6, 0x77, 0xD6, 0x77, 0xAD, 0x73, 0xBD, 0xB4, 0xAD, 0x53, 0xB5, 0xB4, 0x84, 0x0D, 0x9C, 0xD1, 0x94, 0x8F, 0x8C, 0x0E, 0x8C, 0x2E, 0x83, 0xED, 0x9C, 0x8F, 0x9C, 0xCF, 0xAD, 0x31, 0xAD, 0x52, 0x94, 0x6F, 0xA5, 0x12, 0xBD, 0xB4, 0xB5, 0x53, 0xBD, 0x94, 0x94, 0x90, 0x7B, 0xCD, 0xA5, 0x11, 0x94, 0x6E, 0x9C, 0xAF, 0x94, 0x6E, 0x94, 0x4E, 0xAD, 0x31, 0x94, 0x6E, 0xA4, 0xF0, 0xAD, 0x11, 0x9C, 0x8F, 0xA4, 0xF0, 0xA4, 0xF0, 0xB5, 0x72, 0xA4, 0xF0, 0xB5, 0x52, 0xA4, 0xD0, 0xBD, 0x94, 0x94, 0x6F, 0xBD, 0x73, 0x9C, 0x8F, 0xAD, 0x32, 0xBD, 0xB3, 0xCE, 0x35, 0xC5, 0xD4, 0xBD, 0x93, 0xC5, 0xD4, 0xC5, 0xF4, 0xCE, 0x15, 0xCE, 0x35, 0xC5, 0xF4, 0xB5, 0x93, 0xBD, 0x94, 0xC5, 0xF5, 0xB5, 0x73, 0xB5, 0x53, 0xA4, 0xD1, 0xB5, 0x53, 0xAD, 0x33, 0xA4, 0xD1, 0xAD, 0x12, 0x9C, 0xB0, 0x8C, 0x2F, 0xB5, 0x53, 0xAD, 0x32, 0xAD, 0x52, 0xAD, 0x32, 0xAD, 0x32, 0xAD, 0x32, 0xAD, 0x52, 0xB5, 0x73, 0xAD, 0x32, 0xAD, 0x53, 0xB5, 0x94, 0xBD, 0xB4, 0xBD, 0xB4, 0xB5, 0x94, 0xA5, 0x12, 0xAD, 0x12, 0xB5, 0x73, 0xBD, 0xD5, 0xB5, 0x93, 0xB5, 0x93, 0xC5, 0xF5, 0xBD, 0xD4, 0xC5, 0xF5, 0xB5, 0x73, 0x9C, 0x90, 0x9C, 0xB0, 0xA5, 0x11, 0xA5, 0x11, 0xAD, 0x32, 0xB5, 0x52, 0xB5, 0x52, 0xB5, 0x52, 0xAD, 0x11, 0xAD, 0x11, 0xAD, 0x11, 0xAD, 0x11, 0xA4, 0xF1, 0xA4, 0xD1, 0x94, 0x6F, 0x94, 0x6F, 0x94, 0x2E, 0xB5, 0x32, 0x9C, 0x6E, 0xB5, 0x71, 0xBD, 0x72, 0xBD, 0x71, 0xB5, 0x71, 0xBD, 0x92, 0xBD, 0x72, 0xBD, 0xB3, 0xB5, 0x52, 0xB5, 0x72, 0xB5, 0x52, 0xAD, 0x31, 0xAD, 0x32, 0xB5, 0x52, 0xBD, 0x93, 0xC5, 0xD4, 0xD6, 0x34, 0xCE, 0x14, 0xC5, 0xD3, 0xBD, 0x93, 0x8C, 0x0E, 0x9C, 0xD1, 0xAD, 0x33, 0x8C, 0x2F, 0xCE, 0x36, 0xC5, 0xD5, 0xB5, 0x53, 0x9C, 0xB1, 0x84, 0x2F, 0x84, 0x2F, 0x8C, 0x70, 0x8C, 0x50, 0x84, 0x2F, 0x8C, 0x92, 0x8C, 0x92, 0x8C, 0x92, 0x8C, 0x72, 0x94, 0x92, 0x7B, 0xCF, 0x42, 0x27, 0x63, 0x0A, 0x73, 0x4B, 0x73, 0x8C, 0x8C, 0x0D, 0x94, 0x4E, 0x8C, 0x0D, 0x8C, 0x4E, 0x94, 0x8F, 0x9C, 0xB0, 0x9C, 0xB0, 0x94, 0x6F, 0x9C, 0xB0, 0x9C, 0xB0, 0x9C, 0xD0, 0xA4, 0x8E, 0xAC, 0xF0, 0xAC, 0xF0, 0xA4, 0x8F, 0xA4, 0x8F, 0x94, 0x6F, 0xA4, 0xF1, 0xA4, 0xF1, 0xAD, 0x11, 0xB5, 0x73, 0xAD, 0x32, 0xBD, 0xB4, 0xBD, 0xB4, 0xBD, 0x73, 0xA4, 0xF1, 0x94, 0x4E, 0xA4, 0xD0, 0xAD, 0x11, 0x94, 0x6E, 0x94, 0x6F, 0xAD, 0x32, 0xB5, 0x52, 0xB5, 0x52, 0x94, 0x2E, 0xA4, 0x8F, 0x7B, 0x8B, 0x9C, 0x4F, 0xA4, 0x6F, 0x8B, 0xCC, 0x83, 0xAC, 0x83, 0xAC, 0x83, 0xCD, 0x84, 0x2F, 0x84, 0x0F, 0x6B, 0x4C, 0x39, 0xC6, 0x39, 0xC7, 0x39, 0xC6, 0x39, 0xC7, 0x41, 0xE7, 0x42, 0x08, 0x4A, 0x49, 0x5A, 0xAA, 0x5A, 0xCB, 0x7B, 0xAE, 0x9C, 0xD3, 0xA4, 0xF4, 0xB5, 0x96, 0xD6, 0x9A, 0xBD, 0xB7, 0x94, 0x91, 0x9C, 0xB1, 0x8C, 0x2E, 0x9C, 0x90, 0x8C, 0x0D, 0x7B, 0xAC, 0x83, 0xED, 0x7B, 0xAC, 0x8C, 0x0D, 0x9C, 0xB0, 0x8C, 0x0E, 0x52, 0x89, 0x42, 0x27, 0x42, 0x28, 0x52, 0x8A, 0x52, 0x89, 0x5A, 0xAA, 0x52, 0x8A, 0x5A, 0xEB, 0x6B, 0x4E, 0xB5, 0x76, 0xD6, 0x7A, 0xDE, 0xBB, 0xCE, 0x19, 0xCE, 0x18, 0xD6, 0x59, 0xBD, 0x96, 0xA4, 0xD2, 0x94, 0x4F, 0xA4, 0xAF, 0x9C, 0x6E, 0x9C, 0x6E, 0xA4, 0x8E, 0x9C, 0x6D, 0xB5, 0x52, 0xD6, 0x55, 0xD6, 0x34, 0xCE, 0x14, 0xBD, 0x72, 0xAC, 0xEF, 0xAC, 0xCF, 0x94, 0x4D, 0x8C, 0x0C, 0x9C, 0xAE, 0x8B, 0xCC, 0x94, 0x2D, 0x9C, 0x4D, 0x94, 0x0C, 0x94, 0x4D, 0xAD, 0x11, 0xB5, 0x51, 0x94, 0x0C, 0x8B, 0xEC, 0x8B, 0xCC, 0x8B, 0xEC, 0x9C, 0x4D, 0xA4, 0x8E, 0xB4, 0xF0, 0xB4, 0xF0, 0xB5, 0x10, 0xBD, 0x10, 0xB4, 0xF0, 0xB5, 0x10, 0xBD, 0x51, 0xB5, 0x10, 0xAC, 0xF0, 0xB5, 0x30, 0xBD, 0x51, 0xBD, 0x51, 0xC5, 0x72, 0xBD, 0x51, 0xAD, 0x10, 0xA4, 0xCF, 0x9C, 0xB1, 0xC6, 0x38, 0xB5, 0x97, 0x9C, 0xD3, 0x94, 0x6F, 0x94, 0x4D, 0x9C, 0x8E, 0x94, 0x6E, 0x94, 0x4D, 0x94, 0x6E, 0x9C, 0x8F, 0x94, 0x6E, 0x94, 0x4E, 0x9C, 0xB0, 0xAD, 0x11, 0xAD, 0x11, 0xAD, 0x32, 0x94, 0x90, 0x9C, 0xB1, 0xAD, 0x33, 0x9C, 0xB0, 0xB5, 0x73, 0xB5, 0x73, 0x9C, 0xB0, 0x83, 0xED, 0x94, 0x6F, 0x8C, 0x4E, 0x8C, 0x2E, 0x94, 0x8F, 0x94, 0x6F, 0x8C, 0x2E, 0xAD, 0x32, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0x73, 0xA5, 0x11, 0xB5, 0xB4, 0xBD, 0xB4, 0xB5, 0x73, 0xBD, 0x94, 0xB5, 0x73, 0xB5, 0x73, 0x7B, 0xAC, 0x9C, 0xB0, 0xA4, 0xF1, 0xB5, 0x53, 0xA5, 0x11, 0x9C, 0xB0, 0xC5, 0xF5, 0xCE, 0x15, 0xCE, 0x35, 0xB5, 0x52, 0x8C, 0x4E, 0xAD, 0x32, 0xC5, 0xD5, 0xB5, 0x53, 0xB5, 0x93, 0x94, 0x4F, 0xAD, 0x32, 0xBD, 0x93, 0xA5, 0x11, 0xA4, 0xF0, 0x9C, 0xD0, 0x94, 0x8F, 0xAD, 0x32, 0xAD, 0x11, 0x9C, 0x8F, 0x9C, 0xAF, 0x8C, 0x2D, 0x9C, 0xAF, 0x9C, 0xB0, 0xB5, 0x52, 0xA4, 0xD0, 0xB5, 0x73, 0xB5, 0x52, 0xBD, 0xB4, 0x94, 0x6F, 0xB5, 0x53, 0xA4, 0xF1, 0xB5, 0x53, 0xB5, 0x73, 0xBD, 0x93, 0xB5, 0x72, 0xA4, 0xD0, 0xB5, 0x52, 0xBD, 0x93, 0xBD, 0xB3, 0xB5, 0x52, 0xAD, 0x31, 0xBD, 0xB3, 0xAD, 0x32, 0x9C, 0xB0, 0x9C, 0x90, 0xB5, 0x53, 0xB5, 0x73, 0xAD, 0x53, 0xB5, 0x53, 0xB5, 0x53, 0xAD, 0x12, 0x9C, 0x90, 0x9C, 0x90, 0xAD, 0x33, 0xA4, 0xF1, 0xBD, 0x94, 0xA4, 0xF1, 0xAD, 0x32, 0xAD, 0x12, 0xAD, 0x32, 0xAD, 0x12, 0xB5, 0x53, 0xB5, 0x73, 0xBD, 0x94, 0xC5, 0xF5, 0xBD, 0xD5, 0xBD, 0xB5, 0xBD, 0x94, 0xB5, 0x93, 0xB5, 0x93, 0xAD, 0x52, 0xAD, 0x52, 0xB5, 0x73, 0xBD, 0xB4, 0xC6, 0x15, 0xC6, 0x15, 0xAD, 0x32, 0x9C, 0xB0, 0xB5, 0x52, 0xBD, 0x93, 0xB5, 0x32, 0xC5, 0xB4, 0xBD, 0x93, 0xBD, 0x93, 0xC5, 0xB4, 0xAD, 0x32, 0xB5, 0x52, 0xBD, 0x73, 0xA4, 0xF1, 0xA4, 0xF0, 0xA4, 0xD0, 0x9C, 0xB0, 0x94, 0x6F, 0x9C, 0x90, 0xBD, 0x73, 0x8C, 0x2D, 0xAD, 0x10, 0xAC, 0xEF, 0xAD, 0x30, 0xAD, 0x10, 0xAC, 0xEF, 0x8C, 0x0C, 0x9C, 0xAF, 0xA4, 0xCF, 0xA4, 0xD0, 0xA4, 0xF1, 0xAC, 0xF1, 0xA4, 0xD0, 0xA4, 0xF0, 0xB5, 0x52, 0xB5, 0x72, 0xCD, 0xF3, 0xD6, 0x34, 0xD6, 0x13, 0xC5, 0xD3, 0xB5, 0x52, 0xCE, 0x36, 0xCE, 0x16, 0x9C, 0xB0, 0xDE, 0xD7, 0xDE, 0xB7, 0xDE, 0xB7, 0xDE, 0x97, 0xCE, 0x57, 0xB5, 0x94, 0x94, 0x70, 0x8C, 0x50, 0x94, 0x91, 0x8C, 0x92, 0x94, 0xD3, 0xA5, 0x55, 0x9D, 0x35, 0x9D, 0x14, 0x5A, 0xCB, 0x42, 0x07, 0x5A, 0xC9, 0x6B, 0x2A, 0x62, 0xE9, 0x73, 0x8B, 0x8C, 0x0D, 0x83, 0xEC, 0x8C, 0x2E, 0x94, 0x6F, 0x9C, 0xB0, 0xAD, 0x11, 0xA4, 0xF1, 0xAD, 0x32, 0xB5, 0x52, 0xA4, 0xD0, 0x9C, 0x4D, 0xAC, 0xCF, 0xA4, 0x8F, 0xA4, 0x8F, 0xA4, 0x8F, 0x9C, 0xB0, 0xB5, 0x72, 0xBD, 0x93, 0xB5, 0x73, 0xB5, 0x93, 0x73, 0x4B, 0xBD, 0x94, 0xBD, 0x94, 0xC5, 0xD4, 0xAD, 0x11, 0xAD, 0x11, 0xAD, 0x11, 0xAD, 0x32, 0xA4, 0xD0, 0xA4, 0xD1, 0xB5, 0x73, 0xAD, 0x11, 0xB5, 0x52, 0x8B, 0xED, 0xAC, 0xD0, 0x83, 0x8C, 0xA4, 0x90, 0xA4, 0x6F, 0x83, 0x8B, 0x83, 0xAC, 0x83, 0x8C, 0x8C, 0x2F, 0x8C, 0x70, 0x94, 0x70, 0xA5, 0x12, 0x5A, 0xCA, 0x41, 0xE7, 0x41, 0xE7, 0x39, 0xC6, 0x39, 0xC6, 0x39, 0xC6, 0x39, 0xE7, 0x4A, 0x48, 0x5A, 0xCA, 0x6B, 0x4D, 0x8C, 0x51, 0x9C, 0xD3, 0xA5, 0x14, 0xC5, 0xF8, 0xC6, 0x18, 0xD6, 0xBA, 0x9C, 0xB1, 0xA4, 0xD1, 0xBD, 0x93, 0xA4, 0xF1, 0x94, 0x6F, 0xA4, 0xF1, 0x94, 0x4F, 0x9C, 0xB0, 0xB5, 0x73, 0xBD, 0x94, 0xA4, 0xB0, 0x63, 0x0A, 0x31, 0xA5, 0x4A, 0x48, 0x62, 0xEB, 0x52, 0x69, 0x52, 0x69, 0x5A, 0xEC, 0x94, 0x72, 0xAD, 0x35, 0xC5, 0xF8, 0xCE, 0x59, 0xD6, 0x7A, 0xBD, 0x96, 0xB5, 0x55, 0xCE, 0x38, 0xA4, 0xD3, 0x94, 0x30, 0xBD, 0x73, 0xAC, 0xD0, 0xAC, 0xD0, 0xAC, 0xCF, 0x9C, 0x6D, 0x94, 0x4E, 0xCE, 0x34, 0xDE, 0x95, 0xE6, 0xB6, 0xD6, 0x34, 0xAC, 0xEF, 0xB4, 0xEF, 0xAC, 0xF0, 0x83, 0xCC, 0x84, 0x0D, 0x8C, 0x0D, 0x94, 0x4E, 0x8C, 0x0D, 0x8C, 0x2D, 0xAD, 0x52, 0xC5, 0xF5, 0xB5, 0x73, 0x94, 0x6F, 0x73, 0x8B, 0x83, 0xED, 0x8C, 0x0E, 0x8C, 0x4E, 0x94, 0x6E, 0xAD, 0x31, 0xB5, 0x72, 0xB5, 0x31, 0x8C, 0x0C, 0x8B, 0xEC, 0x94, 0x2C, 0xAC, 0xCF, 0x8B, 0xCB, 0x83, 0xAB, 0x83, 0xCC, 0x94, 0x2D, 0x94, 0x0C, 0x7B, 0x8B, 0x8B, 0xEC, 0x94, 0x0C, 0x94, 0x2D, 0xA4, 0xF2, 0xC6, 0x38, 0xAD, 0x76, 0x9C, 0xF3, 0x94, 0x4F, 0x9C, 0x6E, 0x9C, 0x8F, 0x9C, 0x8F, 0x9C, 0x6E, 0x9C, 0x6E, 0x9C, 0x8E, 0x9C, 0x6E, 0x9C, 0xAF, 0xA4, 0xAF, 0xAC, 0xF1, 0xA4, 0xD1, 0x7B, 0xAD, 0x8C, 0x2E, 0x8C, 0x2F, 0xA5, 0x12, 0xAD, 0x12, 0xA4, 0xD1, 0xA4, 0xF1, 0xA5, 0x12, 0xAD, 0x32, 0xB5, 0x73, 0xB5, 0x73, 0xAD, 0x12, 0xAD, 0x33, 0xAD, 0x12, 0x9C, 0xB1, 0x9C, 0xD1, 0xA4, 0xD1, 0x9C, 0xB0, 0x94, 0x6F, 0x94, 0x6F, 0x94, 0x4F, 0x94, 0x6F, 0x94, 0x4F, 0x94, 0x4F, 0x84, 0x0D, 0x83, 0xED, 0x7B, 0xCD, 0x94, 0x70, 0x9C, 0xB0, 0xBD, 0xB4, 0xAD, 0x52, 0x8C, 0x4E, 0x9C, 0xB0, 0x94, 0x4E, 0x8C, 0x2E, 0x9C, 0x8F, 0x7B, 0xCC, 0x9C, 0xB0, 0xB5, 0x53, 0xA4, 0xF1, 0xAD, 0x52, 0x9C, 0xB0, 0x8C, 0x2E, 0xAD, 0x52, 0xC5, 0xF5, 0xC6, 0x15, 0xD6, 0x77, 0xBD, 0xB3, 0xCE, 0x35, 0xBD, 0x93, 0xA4, 0xD0, 0xB5, 0x52, 0xA4, 0xF0, 0xB5, 0x72, 0xA4, 0xF0, 0x8C, 0x4E, 0x8C, 0x2D, 0xAD, 0x11, 0xB5, 0x52, 0x9C, 0xB0, 0x83, 0xCD, 0xB5, 0x53, 0x8C, 0x2E, 0xAD, 0x11, 0xBD, 0x93, 0xBD, 0xB3, 0xCE, 0x15, 0xB5, 0x72, 0xB5, 0x52, 0xC5, 0xD4, 0xB5, 0x72, 0xA4, 0xF1, 0x9C, 0xB0, 0xBD, 0x73, 0xAD, 0x52, 0xAD, 0x11, 0x94, 0x4F, 0x9C, 0xB0, 0xA4, 0xF1, 0xB5, 0x52, 0xB5, 0x53, 0xAD, 0x32, 0xA4, 0xF1, 0x9C, 0xB0, 0x94, 0x4F, 0xA5, 0x11, 0x9C, 0xD0, 0xC5, 0xF5, 0xB5, 0x73, 0xB5, 0x53, 0xBD, 0x94, 0xBD, 0xB4, 0xAD, 0x12, 0xB5, 0x93, 0xCE, 0x16, 0xCE, 0x16, 0xC5, 0xF5, 0xC5, 0xD5, 0xB5, 0x94, 0xC5, 0xD5, 0xC6, 0x15, 0xC5, 0xF5, 0xBD, 0x94, 0xBD, 0xD5, 0xBD, 0xB4, 0xBD, 0xB4, 0xCE, 0x36, 0xC5, 0xF5, 0xAD, 0x32, 0xA4, 0xD0, 0xB5, 0x52, 0xC5, 0xD4, 0xBD, 0x72, 0xBD, 0x93, 0xB5, 0x52, 0xC5, 0xB3, 0xBD, 0x93, 0xA4, 0xD0, 0xB5, 0x73, 0xC5, 0xD4, 0x9C, 0xB0, 0x9C, 0x8F, 0xA4, 0xF1, 0x94, 0x6F, 0x83, 0xED, 0xA4, 0xB0, 0xB5, 0x32, 0x83, 0xEC, 0xAD, 0x11, 0xA4, 0xF0, 0xBD, 0x92, 0xB5, 0x72, 0xAD, 0x31, 0x94, 0x6F, 0x83, 0xCC, 0x94, 0x8F, 0xAD, 0x11, 0xA4, 0xD0, 0x9C, 0x8F, 0x8C, 0x2E, 0x83, 0xED, 0x94, 0x6F, 0x9C, 0x8F, 0xA4, 0xF0, 0xB5, 0x51, 0xB5, 0x30, 0xA4, 0xEF, 0xA4, 0xF0, 0xCE, 0x14, 0xBD, 0x73, 0xAC, 0xF1, 0xE6, 0xD7, 0xCE, 0x34, 0xCD, 0xF4, 0xCE, 0x14, 0xD6, 0x76, 0xD6, 0x97, 0xD6, 0x98, 0x9C, 0xD2, 0x84, 0x0F, 0x9D, 0x14, 0x9D, 0x14, 0x9C, 0xF4, 0x94, 0xD3, 0x9D, 0x14, 0x4A, 0x8A, 0x31, 0x85, 0x4A, 0x07, 0x5A, 0xA9, 0x5A, 0xA8, 0x63, 0x0A, 0x73, 0x4A, 0x73, 0x6B, 0x7B, 0x8C, 0x8C, 0x0D, 0x83, 0xEC, 0xA4, 0xF1, 0xAD, 0x12, 0xB5, 0x52, 0xA4, 0xD0, 0x9C, 0xAF, 0x9C, 0x4D, 0xA4, 0xAF, 0x9C, 0x6E, 0xA4, 0xD0, 0xA4, 0xD0, 0xB5, 0x52, 0xAD, 0x32, 0xAD, 0x31, 0xAD, 0x11, 0xA4, 0xD0, 0x94, 0x6F, 0xA4, 0xF1, 0xB5, 0x52, 0xC5, 0xD4, 0xA4, 0xF1, 0xAD, 0x52, 0xBD, 0x94, 0xBD, 0x94, 0xB5, 0x93, 0xAD, 0x11, 0xC5, 0xF5, 0xAD, 0x11, 0xB5, 0x73, 0x83, 0xAC, 0xAC, 0xF1, 0x83, 0x8B, 0xA4, 0x8F, 0xA4, 0x4F, 0x93, 0xED, 0x8C, 0x0E, 0x8C, 0x0E, 0x94, 0x90, 0x8C, 0x4F, 0x9C, 0xD1, 0xAD, 0x53, 0x7B, 0xAD, 0x5A, 0xCA, 0x31, 0x85, 0x29, 0x44, 0x31, 0x85, 0x31, 0xA6, 0x39, 0xC6, 0x4A, 0x69, 0x52, 0x89, 0x63, 0x2C, 0x7B, 0xCE, 0x94, 0x92, 0xA5, 0x35, 0xB5, 0xB7, 0xC6, 0x39, 0xE7, 0x1C, 0x9C, 0xD2, 0xB5, 0x73, 0xBD, 0xD4, 0xA4, 0xF1, 0xA4, 0xD0, 0xAD, 0x32, 0x94, 0x6F, 0xA4, 0xF1, 0xB5, 0x73, 0xA4, 0xD0, 0xBD, 0x72, 0xB5, 0x93, 0x73, 0x8C, 0x41, 0xE7, 0x4A, 0x28, 0x4A, 0x48, 0x52, 0xAA, 0x62, 0xEC, 0x4A, 0x69, 0x73, 0xAE, 0x8C, 0x51, 0x94, 0x72, 0xCE, 0x39, 0xBD, 0xB6, 0xA4, 0xD3, 0xBD, 0x76, 0x8C, 0x10, 0x62, 0xEB, 0xAD, 0x13, 0xBD, 0x74, 0xAC, 0xD0, 0xAC, 0xF0, 0x9C, 0x6E, 0x9C, 0x6E, 0xDE, 0x96, 0xDE, 0xB6, 0xE6, 0xB6, 0xD6, 0x34, 0xB5, 0x30, 0x9C, 0x6E, 0xB5, 0x31, 0x62, 0xE9, 0x63, 0x0A, 0x7B, 0xCD, 0x94, 0x6F, 0x8C, 0x2E, 0x8C, 0x4F, 0xC6, 0x36, 0xD6, 0x97, 0xCE, 0x36, 0x94, 0xB0, 0x7B, 0xAD, 0x84, 0x0E, 0x8C, 0x6F, 0x94, 0x6F, 0x94, 0xB0, 0xB5, 0x73, 0xC5, 0xF4, 0xB5, 0x72, 0x9C, 0xB0, 0x9C, 0x8F, 0x9C, 0x8E, 0xA4, 0xCF, 0x8B, 0xCC, 0x94, 0x4E, 0x9C, 0x8F, 0x94, 0x6F, 0x94, 0x6E, 0x83, 0xED, 0x8C, 0x2E, 0x94, 0x6F, 0x73, 0x8C, 0xB5, 0x95, 0xC6, 0x18, 0xAD, 0x76, 0x9C, 0xD3, 0xA5, 0x12, 0x7B, 0xAC, 0x7B, 0xAC, 0x8C, 0x0E, 0x84, 0x0D, 0x94, 0x6F, 0x94, 0x6F, 0x94, 0x8F, 0x8C, 0x0D, 0x83, 0xEC, 0xAD, 0x32, 0x94, 0x70, 0x62, 0xEA, 0x73, 0x8D, 0x73, 0xAD, 0x84, 0x0E, 0x8C, 0x0E, 0x84, 0x0E, 0x7B, 0xAD, 0x7B, 0xAC, 0x8C, 0x4F, 0x8C, 0x0E, 0x94, 0x4F, 0x8C, 0x0E, 0x8C, 0x0E, 0x9C, 0x90, 0x9C, 0x90, 0x8C, 0x4F, 0x8C, 0x4F, 0x8C, 0x2F, 0x83, 0xEE, 0x9C, 0x90, 0x8C, 0x0E, 0x8C, 0x4F, 0x9C, 0xD1, 0x8C, 0x2E, 0xAD, 0x12, 0xAD, 0x32, 0xAD, 0x32, 0xB5, 0x53, 0xAD, 0x32, 0x9C, 0xB1, 0xA4, 0xF1, 0xA4, 0xD1, 0xAC, 0xF2, 0xA4, 0xD1, 0xA4, 0xF2, 0x9C, 0xB1, 0xA4, 0xF1, 0xA5, 0x12, 0xB5, 0x53, 0xB5, 0x73, 0xB5, 0x53, 0xA4, 0xF2, 0xAD, 0x33, 0xAD, 0x52, 0x9C, 0xB0, 0x94, 0x4F, 0xA4, 0xD1, 0x9C, 0xB0, 0x9C, 0x8F, 0x9C, 0x8F, 0xA4, 0xD1, 0xA4, 0xF1, 0xA4, 0xD0, 0x9C, 0xB0, 0x9C, 0xB0, 0xAD, 0x32, 0x9C, 0x90, 0x94, 0x6F, 0x94, 0x6F, 0x73, 0x6B, 0x7B, 0xAD, 0xBD, 0xB4, 0x8C, 0x2E, 0xA4, 0xD1, 0xB5, 0x53, 0xAD, 0x52, 0xB5, 0x73, 0xAD, 0x32, 0x9C, 0x8F, 0xB5, 0x73, 0x9C, 0xB0, 0x9C, 0x90, 0xA4, 0xF1, 0xAD, 0x12, 0x9C, 0x8F, 0x83, 0xED, 0x8C, 0x0E, 0xAD, 0x52, 0xAD, 0x32, 0xA4, 0xF1, 0xAD, 0x12, 0xB5, 0x73, 0xB5, 0x73, 0x94, 0x6F, 0x83, 0xED, 0x9C, 0xD1, 0xA4, 0xD0, 0xBD, 0x93, 0xA4, 0xF1, 0xB5, 0x32, 0xC5, 0xB4, 0xCD, 0xF5, 0xC5, 0xF5, 0xBD, 0xB4, 0xC5, 0xD4, 0xCE, 0x36, 0xD6, 0x77, 0xCE, 0x36, 0xB5, 0x94, 0xC5, 0xF5, 0xCE, 0x36, 0xCE, 0x35, 0xC5, 0xF5, 0xB5, 0x52, 0xBD, 0x93, 0xBD, 0xD4, 0xCE, 0x35, 0xBD, 0xD4, 0x9C, 0xD0, 0xA4, 0xF1, 0xB5, 0x72, 0xBD, 0xB3, 0xC5, 0xD4, 0xC5, 0xF4, 0xBD, 0x93, 0xC5, 0xD4, 0xC5, 0xB4, 0xAD, 0x11, 0xBD, 0x73, 0xBD, 0x93, 0x8C, 0x4E, 0x9C, 0x90, 0xAC, 0xF1, 0x9C, 0x90, 0x73, 0x6C, 0x9C, 0xB0, 0xAD, 0x11, 0x94, 0x4E, 0xB5, 0x73, 0xA4, 0xF1, 0xAD, 0x32, 0xB5, 0x73, 0xAD, 0x52, 0xBD, 0x94, 0xAD, 0x32, 0xAD, 0x12, 0xAD, 0x12, 0xAD, 0x32, 0x9C, 0x90, 0x8C, 0x2E, 0x52, 0x89, 0x7B, 0xAD, 0x9C, 0xB0, 0x9C, 0xB0, 0x94, 0x6F, 0x94, 0x4E, 0x9C, 0xAF, 0xAD, 0x11, 0xC5, 0xB3, 0xB5, 0x52, 0xB5, 0x32, 0xE6, 0xD7, 0xD6, 0x34, 0xD6, 0x55, 0xDE, 0x96, 0xD6, 0x75, 0xD6, 0x56, 0xD6, 0x97, 0xDE, 0x97, 0xC5, 0xF5, 0x9D, 0x14, 0x9D, 0x14, 0x9D, 0x14, 0x94, 0xF4, 0x94, 0xB3, 0x5A, 0xCB, 0x52, 0x68, 0x5A, 0xA9, 0x5A, 0xC9, 0x62, 0xC9, 0x62, 0xEA, 0x6A, 0xEA, 0x73, 0x2A, 0x73, 0x2A, 0x7B, 0x4A, 0x7B, 0x8B, 0x83, 0xCC, 0x8C, 0x0D, 0x94, 0x2D, 0x94, 0x2E, 0x7B, 0x8B, 0x9C, 0x4E, 0x93, 0xEC, 0x7B, 0x6A, 0x83, 0xCC, 0x7B, 0x8B, 0xA4, 0xD1, 0x9C, 0xB0, 0xA4, 0xD0, 0xB5, 0x73, 0xAD, 0x32, 0xAD, 0x32, 0xA4, 0xF1, 0xB5, 0x52, 0xBD, 0xD4, 0xB5, 0x73, 0xC5, 0xD5, 0xBD, 0x94, 0xB5, 0x94, 0xC5, 0xF5, 0x9C, 0x90, 0xC5, 0xD5, 0x94, 0x6F, 0x6B, 0x0A, 0x73, 0x4A, 0xA4, 0xB0, 0x9C, 0x4E, 0xB5, 0x11, 0xAC, 0xD0, 0xA4, 0x8F, 0xA4, 0xB0, 0xA4, 0xB1, 0xA4, 0xD1, 0x94, 0x70, 0xA5, 0x12, 0xB5, 0x73, 0x94, 0x70, 0x7B, 0xAD, 0x41, 0xE6, 0x29, 0x64, 0x29, 0x44, 0x39, 0xC6, 0x39, 0xE7, 0x39, 0xE7, 0x42, 0x07, 0x52, 0xAA, 0x63, 0x2C, 0x83, 0xEF, 0x9C, 0xF3, 0xA5, 0x14, 0xBD, 0xD8, 0xCE, 0x59, 0x9C, 0xB2, 0xB5, 0x94, 0xBD, 0xB4, 0xB5, 0x73, 0x9C, 0xB0, 0xA4, 0xD1, 0x9C, 0x90, 0xAD, 0x32, 0xBD, 0x73, 0xA4, 0xD0, 0xB5, 0x32, 0xBD, 0x93, 0xB5, 0x52, 0x62, 0xEA, 0x39, 0xC6, 0x42, 0x07, 0x4A, 0x69, 0x5A, 0xAA, 0x52, 0x8A, 0x6B, 0x2C, 0x84, 0x10, 0x52, 0x6A, 0x4A, 0x69, 0x9C, 0xB2, 0xBD, 0xB6, 0xBD, 0x96, 0xB5, 0x34, 0xD6, 0x59, 0x73, 0x6D, 0x9C, 0x70, 0xBD, 0x53, 0xAC, 0xCF, 0x9C, 0x6D, 0xA4, 0xAF, 0xE6, 0xD7, 0xE6, 0xB6, 0xE6, 0xB6, 0xCE, 0x14, 0xB5, 0x30, 0x9C, 0x4D, 0xA4, 0xD0, 0x73, 0x6B, 0x73, 0xAC, 0x83, 0xEE, 0x8C, 0x4F, 0x83, 0xCD, 0x83, 0xED, 0xBD, 0xD4, 0xDE, 0xD8, 0xCE, 0x76, 0x9C, 0xD1, 0x8C, 0x2F, 0x84, 0x0E, 0x9C, 0xB1, 0x8C, 0x2F, 0x94, 0x90, 0xBD, 0xD5, 0xC5, 0xF5, 0xCE, 0x15, 0xAD, 0x32, 0x83, 0xED, 0x9C, 0x8F, 0xAC, 0xF0, 0x83, 0x8B, 0x94, 0x4E, 0x94, 0x6F, 0x94, 0x4F, 0x94, 0x4F, 0x94, 0x90, 0x94, 0x70, 0xAD, 0x53, 0x9C, 0xD2, 0xCE, 0x59, 0xB5, 0xB7, 0xAD, 0x55, 0x9C, 0xF3, 0xC5, 0xF6, 0xB5, 0xB4, 0xAD, 0x53, 0xAD, 0x53, 0x94, 0x6F, 0x9C, 0xD1, 0xA5, 0x12, 0xCE, 0x57, 0xC5, 0xF5, 0x8C, 0x2E, 0xAD, 0x12, 0x94, 0x4F, 0x8C, 0x70, 0x94, 0xB1, 0x9C, 0xD1, 0xAD, 0x33, 0xA5, 0x12, 0x94, 0x90, 0x94, 0x6F, 0x94, 0x90, 0x94, 0x90, 0x7B, 0xCD, 0x83, 0xEE, 0x8C, 0x2F, 0x83, 0xEE, 0xA4, 0xD1, 0xB5, 0x52, 0xAD, 0x32, 0xB5, 0x73, 0xAD, 0x53, 0xAD, 0x12, 0xAD, 0x32, 0x9C, 0xD1, 0x94, 0x90, 0x94, 0x4F, 0x62, 0xEA, 0x73, 0x8C, 0x7B, 0xED, 0x84, 0x0E, 0x8C, 0x2F, 0x94, 0x90, 0x94, 0x70, 0x8C, 0x0E, 0x83, 0xED, 0x83, 0xED, 0x9C, 0xB0, 0x94, 0x70, 0x83, 0xEE, 0x8C, 0x4F, 0x94, 0x70, 0x7B, 0xCD, 0x7B, 0xAD, 0x7B, 0xAD, 0x83, 0xCE, 0x8C, 0x0F, 0x94, 0x4F, 0x9C, 0xB0, 0xA4, 0xB1, 0xB5, 0x74, 0xCE, 0x16, 0xB5, 0x53, 0xBD, 0x73, 0xB5, 0x73, 0xB5, 0x53, 0xB5, 0x53, 0xBD, 0x73, 0xB5, 0x73, 0xBD, 0x93, 0xBD, 0xB4, 0xC5, 0xD4, 0xBD, 0xB4, 0xB5, 0x73, 0xB5, 0x74, 0xC5, 0xD5, 0xCE, 0x37, 0xCE, 0x37, 0xCE, 0x16, 0xCE, 0x16, 0xCE, 0x16, 0xCD, 0xF6, 0xCD, 0xF5, 0xC5, 0xD5, 0xBD, 0xB5, 0xBD, 0x94, 0xAD, 0x32, 0xAD, 0x12, 0xAD, 0x12, 0xAC, 0xF2, 0xA4, 0xB1, 0xA4, 0xB0, 0xA4, 0xB0, 0x9C, 0xB0, 0x9C, 0xB0, 0xA4, 0xD1, 0x9C, 0x90, 0x8C, 0x2E, 0xAD, 0x12, 0xB5, 0x73, 0x9C, 0x90, 0xA4, 0xD0, 0x94, 0x2E, 0x8C, 0x0E, 0x9C, 0x6F, 0x94, 0x6F, 0x94, 0x4E, 0x83, 0xCD, 0x94, 0x4F, 0x9C, 0xB0, 0xB5, 0x73, 0xB5, 0x53, 0xAD, 0x33, 0xBD, 0xB4, 0xCD, 0xF5, 0xCE, 0x36, 0xBD, 0xB4, 0xAD, 0x52, 0xB5, 0x52, 0xC6, 0x16, 0xCE, 0x56, 0xB5, 0x73, 0x94, 0x8F, 0xAD, 0x32, 0xBD, 0xB3, 0xB5, 0x52, 0xBD, 0x93, 0xBD, 0x93, 0xAD, 0x31, 0xB5, 0x72, 0xBD, 0x93, 0xB5, 0x51, 0xC5, 0xD4, 0xBD, 0x73, 0xAD, 0x32, 0xBD, 0x93, 0xB5, 0x73, 0x83, 0xED, 0x6B, 0x2B, 0x9C, 0xB0, 0xB5, 0x52, 0x8C, 0x4F, 0xB5, 0x94, 0xAD, 0x32, 0xB5, 0x73, 0xBD, 0xD5, 0xAD, 0x32, 0x8C, 0x4F, 0xBD, 0xD5, 0xB5, 0x94, 0xA4, 0xF2, 0xAD, 0x73, 0xA5, 0x12, 0x9C, 0xF2, 0x73, 0xAD, 0x6B, 0x2B, 0x9C, 0xD1, 0xA4, 0xF1, 0x94, 0x90, 0x8C, 0x2F, 0x9C, 0xB0, 0x9C, 0xAF, 0xAD, 0x10, 0xA4, 0xF0, 0xAD, 0x11, 0xDE, 0x96, 0xD6, 0x34, 0xD6, 0x34, 0xDE, 0x95, 0xDE, 0xB6, 0xDE, 0xB6, 0xDE, 0xB7, 0xD6, 0x76, 0xD6, 0x76, 0xA5, 0x35, 0xA5, 0x34, 0x9D, 0x14, 0x9C, 0xF4, 0x94, 0xB3, 0x5A, 0xCA, 0x5A, 0xA9, 0x62, 0xE9, 0x6B, 0x0A, 0x73, 0x2A, 0x7B, 0x6B, 0x7B, 0x6B, 0x83, 0xAC, 0x83, 0xAB, 0x83, 0x8B, 0x83, 0x8B, 0x83, 0xAB, 0x8B, 0xCC, 0x8B, 0xEC, 0x94, 0x2D, 0x9C, 0x6E, 0xAC, 0xCF, 0xB4, 0xF0, 0xAC, 0xD0, 0x9C, 0x4E, 0x8B, 0xEC, 0x94, 0x2E, 0x94, 0x4E, 0x94, 0x4E, 0x94, 0x2E, 0x94, 0x2D, 0x94, 0x2D, 0x94, 0x4E, 0x94, 0x4E, 0x94, 0x4E, 0x94, 0x4E, 0xA4, 0xB0, 0xAD, 0x11, 0xA4, 0xD0, 0xA4, 0xD0, 0x94, 0x4E, 0x9C, 0xAF, 0x83, 0xCC, 0x62, 0xC8, 0x94, 0x4E, 0x9C, 0x6E, 0x94, 0x0D, 0xB5, 0x11, 0xB5, 0x11, 0xAC, 0xB0, 0xAC, 0xF1, 0xAD, 0x12, 0xA4, 0xF1, 0x8C, 0x4F, 0xA4, 0xF2, 0xBD, 0xB4, 0x73, 0x8C, 0x5A, 0xCA, 0x4A, 0x28, 0x39, 0xC6, 0x3A, 0x07, 0x42, 0x07, 0x39, 0xE7, 0x39, 0xA6, 0x39, 0xE7, 0x4A, 0x49, 0x5A, 0xCA, 0x6B, 0x6D, 0x84, 0x0F, 0x9C, 0xF3, 0xB5, 0xB6, 0x73, 0x8E, 0x9C, 0xB3, 0xD6, 0x79, 0xB5, 0x53, 0xBD, 0x93, 0xB5, 0x52, 0xBD, 0x94, 0xB5, 0x73, 0xBD, 0x73, 0xC5, 0xB4, 0xB5, 0x32, 0xB5, 0x32, 0xB5, 0x31, 0xB5, 0x32, 0x9C, 0x8F, 0x6B, 0x2A, 0x31, 0x85, 0x42, 0x07, 0x5A, 0xEB, 0x4A, 0x49, 0x73, 0x8D, 0x7B, 0x8E, 0x31, 0x86, 0x4A, 0x29, 0x62, 0xEB, 0x83, 0xF0, 0xB5, 0x55, 0xCD, 0xF7, 0xCE, 0x17, 0xCD, 0xF7, 0x6B, 0x0B, 0xAC, 0xD2, 0xBD, 0x73, 0x7B, 0x8A, 0xAC, 0xF0, 0xE6, 0xD7, 0xDE, 0xB6, 0xE6, 0xD6, 0xD6, 0x14, 0xB5, 0x30, 0x8B, 0xAB, 0x9C, 0x8F, 0x73, 0x6B, 0x5A, 0xCA, 0x6B, 0x4B, 0x8C, 0x2E, 0x73, 0x8C, 0x83, 0xED, 0xB5, 0x73, 0xD6, 0x76, 0xCE, 0x56, 0xA5, 0x12, 0x94, 0xB1, 0x8C, 0x4F, 0xA5, 0x12, 0x9C, 0xB0, 0xA5, 0x12, 0xC5, 0xF5, 0xC6, 0x15, 0xCE, 0x35, 0xB5, 0x52, 0x83, 0xEC, 0x94, 0x6E, 0xAD, 0x11, 0x83, 0x8B, 0x83, 0xED, 0x8C, 0x4E, 0x94, 0x4F, 0x8C, 0x4E, 0x8C, 0x4E, 0x8C, 0x2E, 0x94, 0x6F, 0xA4, 0xF2, 0xCE, 0x38, 0xB5, 0x96, 0xAD, 0x55, 0x94, 0x71, 0xB5, 0x74, 0xAD, 0x53, 0xB5, 0x94, 0xA5, 0x12, 0x8C, 0x4F, 0x9C, 0xD1, 0x9C, 0xD0, 0xA4, 0xF1, 0xB5, 0x94, 0x9C, 0xD1, 0xAD, 0x33, 0x8C, 0x4F, 0x94, 0x90, 0x94, 0x90, 0xA5, 0x12, 0xAD, 0x32, 0x9C, 0xD1, 0x9C, 0xD1, 0x9C, 0xB0, 0x94, 0x90, 0x8C, 0x4F, 0x63, 0x2B, 0x5B, 0x0B, 0x6B, 0x6C, 0x73, 0x6C, 0x94, 0x90, 0xAD, 0x52, 0xBD, 0xB4, 0xA5, 0x11, 0xAD, 0x32, 0xB5, 0x93, 0xB5, 0x93, 0xB5, 0x73, 0x9C, 0xD1, 0x94, 0x90, 0x73, 0x6C, 0x73, 0x8D, 0x7B, 0xAD, 0x6B, 0x4C, 0x73, 0x6C, 0x6B, 0x4C, 0x6B, 0x4C, 0x6B, 0x2B, 0x6B, 0x2B, 0x73, 0x6C, 0x83, 0xCD, 0x94, 0x6F, 0x83, 0xCD, 0x83, 0xCD, 0x8C, 0x2F, 0x7B, 0xAD, 0x6B, 0x4C, 0x63, 0x0B, 0x6B, 0x2B, 0x6B, 0x2B, 0x6B, 0x4B, 0x83, 0xCD, 0x83, 0xCD, 0x83, 0xED, 0xAD, 0x12, 0x94, 0x6F, 0xA4, 0xF1, 0xA4, 0xF1, 0xA4, 0xD0, 0x9C, 0xAF, 0xA4, 0xD0, 0x94, 0x6F, 0x7B, 0xCD, 0x7B, 0x8C, 0x7B, 0xAD, 0x7B, 0xAD, 0x7B, 0x8C, 0x83, 0xED, 0x83, 0xCD, 0x8B, 0xEE, 0x9C, 0xB0, 0xAD, 0x12, 0x9C, 0x70, 0x8C, 0x2F, 0x94, 0x4F, 0x9C, 0x70, 0x9C, 0x90, 0xB5, 0x74, 0xC5, 0xD5, 0xA4, 0xF1, 0xAD, 0x12, 0xA4, 0xF1, 0xAD, 0x32, 0xB5, 0x53, 0xB5, 0x53, 0xB5, 0x53, 0xB5, 0x32, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0x53, 0xBD, 0x73, 0xC5, 0xB4, 0xBD, 0x94, 0xBD, 0x73, 0xBD, 0x73, 0xB5, 0x52, 0xB5, 0x32, 0xB5, 0x53, 0xB5, 0x32, 0xB5, 0x73, 0xBD, 0x94, 0xC5, 0xB4, 0xC5, 0xB4, 0xBD, 0x73, 0xB5, 0x53, 0xAD, 0x12, 0xAD, 0x12, 0xAD, 0x12, 0xA4, 0xF1, 0x9C, 0xB0, 0x94, 0x6F, 0x9C, 0x90, 0xAD, 0x12, 0xAD, 0x11, 0x94, 0x6F, 0x9C, 0xB0, 0xA4, 0xF1, 0x9C, 0xB0, 0x8C, 0x2E, 0x8C, 0x0E, 0x83, 0xCD, 0x8B, 0xED, 0x94, 0x4E, 0x9C, 0x6F, 0xAD, 0x11, 0xAD, 0x11, 0xAC, 0xF1, 0xBD, 0x73, 0xBD, 0x73, 0xB5, 0x52, 0x73, 0x6B, 0x6B, 0x2A, 0x9C, 0xB0, 0xA4, 0xF1, 0xA4, 0xD1, 0xBD, 0xD4, 0xBD, 0xB4, 0xBD, 0xD4, 0xBD, 0xD5, 0xBD, 0xB4, 0xBD, 0xD5, 0xC5, 0xF5, 0xC6, 0x16, 0xBD, 0xD5, 0xAD, 0x74, 0xAD, 0x53, 0xAD, 0x73, 0x94, 0xB1, 0x84, 0x0F, 0xAD, 0x32, 0xB5, 0x94, 0xA5, 0x32, 0xA4, 0xF2, 0xA4, 0xF1, 0xA4, 0xF1, 0xA4, 0xF0, 0x9C, 0xAF, 0xA4, 0xB0, 0xD6, 0x55, 0xDE, 0x95, 0xD6, 0x54, 0xD6, 0x75, 0xDE, 0x75, 0xDE, 0x75, 0xD6, 0x96, 0xE6, 0xB7, 0xDE, 0x96, 0xA5, 0x35, 0xA5, 0x34, 0x9D, 0x14, 0x9C, 0xF4, 0x94, 0xD3, 0x52, 0xAA, 0x52, 0x68, 0x63, 0x0A, 0x6B, 0x2A, 0x6B, 0x09, 0x73, 0x2A, 0x73, 0x2A, 0x83, 0xCC, 0x8C, 0x0D, 0x94, 0x2D, 0x9C, 0x6F, 0x7B, 0xAB, 0x73, 0x6A, 0x7B, 0xAB, 0x8B, 0xEC, 0x94, 0x2D, 0x94, 0x0C, 0x93, 0xEC, 0x8B, 0xAB, 0x6A, 0xA8, 0x9C, 0x4D, 0xA4, 0xAF, 0xA4, 0x6E, 0x9C, 0x6E, 0x94, 0x2D, 0x9C, 0x8E, 0xA4, 0xCF, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0x8F, 0x9C, 0x4E, 0xA4, 0x8E, 0x9C, 0x4D, 0x9C, 0x4D, 0x9C, 0x6E, 0x94, 0x4D, 0xA4, 0xCF, 0xAC, 0xF0, 0xA4, 0xAF, 0x83, 0xAB, 0x8B, 0xEC, 0x83, 0x8B, 0x62, 0xC9, 0x62, 0xC9, 0x62, 0xC9, 0x62, 0xE9, 0x62, 0xC9, 0x5A, 0x88, 0x5A, 0xA9, 0x62, 0xC9, 0x4A, 0x27, 0x4A, 0x28, 0x52, 0x89, 0x4A, 0x48, 0x4A, 0x28, 0x39, 0xA6, 0x31, 0xA6, 0x39, 0xE6, 0x4A, 0x48, 0x52, 0xAA, 0x73, 0xAE, 0x8C, 0x51, 0x9C, 0xD3, 0x9C, 0xD3, 0x6B, 0x6E, 0x8C, 0x72, 0xDE, 0xBA, 0xC6, 0x16, 0xA4, 0xD0, 0xB5, 0x32, 0xB5, 0x52, 0xB5, 0x52, 0xB5, 0x32, 0xB5, 0x52, 0xAC, 0xF1, 0x9C, 0xAF, 0xA4, 0xD0, 0x9C, 0x6F, 0x94, 0x2E, 0xB5, 0x31, 0x62, 0xEA, 0x39, 0xA6, 0x39, 0xA6, 0x52, 0x8A, 0x73, 0x8E, 0x52, 0x8A, 0x62, 0xEB, 0x63, 0x0C, 0x6B, 0x4D, 0x8C, 0x31, 0x5A, 0x8A, 0x9C, 0x92, 0x94, 0x31, 0xE6, 0x99, 0xDE, 0x79, 0x8B, 0xCF, 0xBD, 0x74, 0xAC, 0xF1, 0x9C, 0xB0, 0xDE, 0x97, 0xCE, 0x14, 0xE6, 0xF7, 0xCE, 0x14, 0xB4, 0xF0, 0x7B, 0x6A, 0x94, 0x6F, 0x7B, 0xAC, 0x5A, 0xCA, 0x6B, 0x4C, 0x8C, 0x4F, 0x8C, 0x2F, 0x9C, 0xB0, 0xBD, 0xB4, 0xDE, 0xB7, 0xD6, 0x77, 0xB5, 0x94, 0xA5, 0x33, 0xA5, 0x12, 0xA5, 0x12, 0xAD, 0x32, 0xAD, 0x53, 0xCE, 0x36, 0xD6, 0x56, 0xCE, 0x36, 0xAD, 0x11, 0x94, 0x6F, 0x9C, 0xD0, 0xB5, 0x31, 0x83, 0x8B, 0x94, 0x4E, 0x9C, 0x90, 0x94, 0x4F, 0xA5, 0x12, 0xA5, 0x11, 0xA4, 0xD1, 0xAD, 0x53, 0xB5, 0x54, 0xC5, 0xF7, 0xAD, 0x55, 0xA5, 0x14, 0x9C, 0xB2, 0xAD, 0x33, 0xAD, 0x12, 0xB5, 0x73, 0xAD, 0x33, 0x94, 0x70, 0x9C, 0xB1, 0x94, 0x8F, 0x94, 0x90, 0xB5, 0x94, 0xBD, 0xB4, 0xAD, 0x33, 0x8C, 0x2F, 0x94, 0x70, 0x8C, 0x6F, 0xA5, 0x12, 0xA5, 0x12, 0xA4, 0xF2, 0xA5, 0x32, 0xA4, 0xF1, 0x9C, 0xB1, 0x84, 0x0E, 0x6B, 0x6C, 0x63, 0x4C, 0x6B, 0x8D, 0x6B, 0x6C, 0x84, 0x2F, 0xAD, 0x53, 0xBD, 0xB4, 0xAD, 0x52, 0xBD, 0xB4, 0xB5, 0x93, 0xAD, 0x53, 0xAD, 0x53, 0xA4, 0xD1, 0x94, 0x90, 0x83, 0xEE, 0x73, 0x6D, 0x7B, 0x8D, 0x7B, 0x8D, 0x7B, 0xCD, 0x8C, 0x2F, 0x94, 0x90, 0x8C, 0x2F, 0x83, 0xEE, 0x8C, 0x2F, 0x8C, 0x4F, 0x9C, 0xB1, 0x84, 0x0E, 0x94, 0x4F, 0x94, 0x4F, 0x84, 0x0E, 0x7B, 0x8D, 0x73, 0x8D, 0x73, 0x6C, 0x5A, 0xCA, 0x6B, 0x0B, 0x73, 0x6C, 0x73, 0x6C, 0x8C, 0x4F, 0xAD, 0x12, 0x9C, 0xB0, 0xA4, 0xF0, 0x9C, 0xB0, 0x9C, 0xD0, 0x94, 0x6E, 0x94, 0x4E, 0x8C, 0x2E, 0x84, 0x0E, 0x6B, 0x4B, 0x6B, 0x4B, 0x6B, 0x2B, 0x6B, 0x2B, 0x6B, 0x6B, 0x6B, 0x4B, 0x73, 0xAD, 0x8C, 0x2F, 0x94, 0x4F, 0x84, 0x0E, 0x94, 0x91, 0x84, 0x2F, 0x83, 0xCD, 0x6B, 0x0B, 0x73, 0x6D, 0xB5, 0x53, 0xD6, 0x77, 0xBD, 0xB4, 0xAD, 0x32, 0xB5, 0x53, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0x94, 0xBD, 0x94, 0xBD, 0xB4, 0xBD, 0x94, 0xB5, 0x53, 0xA5, 0x12, 0xAD, 0x33, 0xAD, 0x12, 0xA4, 0xB0, 0xA4, 0xD0, 0xA4, 0xF1, 0x94, 0x4F, 0x8C, 0x0E, 0x94, 0x2E, 0x8C, 0x0E, 0x8C, 0x0E, 0x8C, 0x0E, 0xAD, 0x12, 0x9C, 0x90, 0x8C, 0x0E, 0x8C, 0x0D, 0x8C, 0x0E, 0xA4, 0xB0, 0x9C, 0x90, 0x9C, 0x8F, 0xA4, 0xB0, 0xA4, 0xD0, 0xA4, 0xD1, 0xAD, 0x31, 0xAD, 0x11, 0xAD, 0x12, 0xAD, 0x11, 0xAD, 0x11, 0xB5, 0x32, 0xB5, 0x53, 0xB5, 0x32, 0xAD, 0x11, 0xB5, 0x52, 0xB5, 0x32, 0xB5, 0x73, 0xB5, 0x52, 0xA4, 0xF1, 0x9C, 0x6F, 0x94, 0x4E, 0x83, 0xED, 0x7B, 0xAC, 0x7B, 0xAD, 0xA4, 0xD1, 0xAD, 0x11, 0xAD, 0x12, 0xB5, 0x53, 0xAD, 0x32, 0xAD, 0x12, 0xAD, 0x32, 0xAD, 0x12, 0x9C, 0xD1, 0x9C, 0xD1, 0xAD, 0x32, 0xAD, 0x52, 0xAD, 0x32, 0xA5, 0x12, 0xA5, 0x12, 0xA4, 0xF1, 0x9C, 0xB1, 0xA4, 0xF2, 0xA5, 0x12, 0x94, 0x6F, 0x94, 0x6F, 0x9C, 0xB0, 0x9C, 0xB0, 0x94, 0x6F, 0x94, 0x4F, 0x83, 0xAC, 0xC5, 0xB3, 0xE6, 0xB6, 0xDE, 0x95, 0xE6, 0xB6, 0xE6, 0xD6, 0xE6, 0xB6, 0xE6, 0xB6, 0xE6, 0xD7, 0xDE, 0x96, 0xA5, 0x35, 0xA5, 0x35, 0xA5, 0x34, 0x9C, 0xF4, 0x94, 0xB3, 0x5A, 0xCB, 0x5A, 0xA9, 0x73, 0x8B, 0x83, 0xCC, 0x83, 0xAC, 0x8C, 0x0D, 0x8C, 0x0D, 0x94, 0x4E, 0xA4, 0xF1, 0xA4, 0xD0, 0xAC, 0xF1, 0x9C, 0x6F, 0x94, 0x6F, 0x9C, 0x6F, 0xA4, 0xB0, 0xB5, 0x31, 0xAC, 0xF0, 0xAC, 0xD0, 0x7B, 0x4A, 0x52, 0x26, 0xA4, 0xAF, 0xAC, 0xF0, 0xAD, 0x11, 0xBD, 0xB3, 0xC5, 0xD4, 0x94, 0x6F, 0xA5, 0x11, 0xA4, 0xF1, 0xAD, 0x32, 0xAD, 0x31, 0xAD, 0x31, 0xB5, 0x72, 0xA4, 0xF0, 0xA4, 0xD0, 0xA4, 0xD0, 0xA5, 0x11, 0xAD, 0x11, 0x8C, 0x2E, 0x73, 0x6A, 0x7B, 0xAB, 0x73, 0x4A, 0x6B, 0x09, 0x9C, 0x6F, 0xA4, 0xB0, 0x7B, 0xAB, 0x94, 0x4E, 0x94, 0x2D, 0x83, 0xAC, 0x83, 0xCC, 0x8B, 0xED, 0x8B, 0xEC, 0x83, 0xCB, 0x83, 0xAC, 0x41, 0xE6, 0x52, 0x89, 0x42, 0x07, 0x39, 0xE7, 0x39, 0xE6, 0x29, 0x65, 0x31, 0xA6, 0x42, 0x08, 0x4A, 0x48, 0x63, 0x2C, 0x63, 0x2C, 0x73, 0xAE, 0x6B, 0x2C, 0x8C, 0x72, 0xBD, 0xB7, 0xB5, 0x96, 0xDE, 0xBA, 0xA4, 0xF3, 0x83, 0xAD, 0x8C, 0x0D, 0x8B, 0xCC, 0x8B, 0xCC, 0x8B, 0xCC, 0x93, 0xED, 0x8B, 0xEC, 0x8B, 0xEC, 0x7B, 0x8B, 0x73, 0x29, 0x7B, 0x4A, 0x4A, 0x07, 0x42, 0x07, 0x42, 0x28, 0x52, 0x69, 0x31, 0x65, 0x42, 0x08, 0x4A, 0x69, 0x4A, 0x69, 0x62, 0xEB, 0x94, 0x72, 0x41, 0xE8, 0x6B, 0x2D, 0xAD, 0x14, 0xB5, 0x34, 0xCE, 0x17, 0xC5, 0x75, 0x8B, 0xAE, 0xD6, 0x58, 0xA4, 0xD1, 0xA4, 0xB0, 0x9C, 0x8F, 0xBD, 0xB3, 0xAC, 0xF0, 0xAC, 0xAE, 0x73, 0x4A, 0x62, 0xEA, 0x63, 0x0A, 0x6B, 0x4B, 0x73, 0x6C, 0x83, 0xEE, 0x84, 0x0E, 0x9C, 0xB0, 0xBD, 0xD4, 0xDE, 0xD8, 0xD6, 0x97, 0xBD, 0xD4, 0xA5, 0x12, 0xBD, 0xD5, 0xAD, 0x53, 0xA5, 0x12, 0xAD, 0x53, 0xCE, 0x56, 0xCE, 0x15, 0xD6, 0x56, 0x9C, 0xB0, 0x94, 0x4F, 0x9C, 0x6E, 0xB5, 0x31, 0x7B, 0x8B, 0x9C, 0x90, 0xAD, 0x52, 0xBD, 0xB4, 0xC5, 0xF5, 0xBD, 0xD4, 0xBD, 0xB4, 0xB5, 0x93, 0xBD, 0xB5, 0xC6, 0x18, 0xAD, 0x35, 0x9C, 0xF4, 0xBD, 0xB5, 0xB5, 0x74, 0xB5, 0x73, 0xBD, 0x94, 0xC5, 0xD5, 0xA5, 0x12, 0xA4, 0xF2, 0xA5, 0x32, 0xAD, 0x33, 0xBD, 0xD5, 0xBD, 0xD5, 0xAD, 0x32, 0x8C, 0x2E, 0x8C, 0x4F, 0x8C, 0x6F, 0x9C, 0xD1, 0xA5, 0x12, 0xAD, 0x33, 0xA5, 0x32, 0x9C, 0xD1, 0x9C, 0xB0, 0x84, 0x2E, 0x7B, 0xEE, 0x7B, 0xCE, 0x7B, 0xEF, 0x84, 0x2F, 0xA5, 0x33, 0xBD, 0xD4, 0xBD, 0xD4, 0xAD, 0x53, 0xC5, 0xF5, 0xBD, 0xB4, 0xA5, 0x32, 0xAD, 0x32, 0x9C, 0xB1, 0x9C, 0x90, 0x7B, 0x8C, 0x6B, 0x4C, 0x6B, 0x6C, 0x7B, 0xAD, 0x7B, 0xCD, 0x8C, 0x4F, 0x9C, 0xD1, 0x9C, 0x90, 0x94, 0x90, 0x94, 0x90, 0x94, 0x90, 0x9C, 0xB1, 0x94, 0x70, 0x9C, 0xB1, 0x8C, 0x2F, 0x94, 0x70, 0x8C, 0x0F, 0x83, 0xEE, 0x7B, 0xAD, 0x62, 0xEA, 0x63, 0x2B, 0x73, 0x6C, 0x63, 0x0B, 0x94, 0x90, 0xAD, 0x32, 0xB5, 0x93, 0x9C, 0x8F, 0x9C, 0xB0, 0x94, 0x8F, 0x9C, 0xB0, 0xAD, 0x12, 0x9C, 0xB0, 0x8C, 0x6F, 0x73, 0xAD, 0x7B, 0xCD, 0x73, 0x8C, 0x6B, 0x4C, 0x6B, 0x4C, 0x7B, 0xEE, 0x94, 0xB1, 0xAD, 0x53, 0xA5, 0x12, 0xA5, 0x33, 0xAD, 0xB5, 0x94, 0xB2, 0x7B, 0xAE, 0x7B, 0xCE, 0x83, 0xEE, 0xB5, 0x73, 0xCE, 0x36, 0xB5, 0x94, 0xA4, 0xD1, 0x8C, 0x0E, 0x8C, 0x2E, 0x94, 0x6F, 0x94, 0x4F, 0x9C, 0xB1, 0xA5, 0x12, 0xA4, 0xD1, 0x9C, 0xB1, 0x94, 0x4F, 0x8C, 0x4F, 0x94, 0x4F, 0x94, 0x6F, 0x94, 0x6F, 0x9C, 0x90, 0x9C, 0x90, 0xA4, 0xD0, 0xA4, 0xF0, 0xA4, 0xF1, 0xA4, 0xF1, 0x94, 0x4F, 0xB5, 0x12, 0x7B, 0x8C, 0x73, 0x4B, 0x8C, 0x2E, 0x83, 0xCD, 0x94, 0x4E, 0x94, 0x6F, 0x8C, 0x2E, 0x94, 0x4E, 0x8C, 0x2E, 0x7B, 0xAC, 0x8C, 0x0D, 0x7B, 0xAC, 0x94, 0x6F, 0x94, 0x4E, 0x73, 0x6B, 0x73, 0x6B, 0x73, 0x4B, 0x73, 0x4B, 0x7B, 0x8C, 0x83, 0xED, 0x8B, 0xED, 0x8B, 0xED, 0x9C, 0x8F, 0xB5, 0x72, 0x8C, 0x0D, 0x9C, 0x6F, 0x94, 0x4F, 0x94, 0x90, 0x8C, 0x4F, 0x94, 0x4F, 0x9C, 0x90, 0xA4, 0xD1, 0xAD, 0x12, 0xAD, 0x33, 0xAD, 0x32, 0xB5, 0x32, 0xBD, 0x94, 0xAD, 0x32, 0xAD, 0x32, 0xAD, 0x32, 0xB5, 0x73, 0xB5, 0x53, 0xB5, 0x73, 0xC5, 0xB4, 0xC5, 0xB4, 0xC5, 0xD5, 0xC5, 0xB4, 0xBD, 0xB4, 0xBD, 0x74, 0xBD, 0x94, 0xBD, 0x73, 0xBD, 0x94, 0xC5, 0xD5, 0xCD, 0xF5, 0xA4, 0xD1, 0xAC, 0xF0, 0xB5, 0x31, 0xB5, 0x31, 0xAC, 0xF0, 0xA4, 0xAF, 0xA4, 0xB0, 0xAD, 0x11, 0xAD, 0x31, 0xC5, 0xB3, 0xA5, 0x55, 0xA5, 0x35, 0xA5, 0x34, 0x9C, 0xF4, 0x94, 0xB2, 0x6B, 0x4C, 0x6B, 0x4B, 0x7B, 0xAC, 0x8C, 0x0D, 0x8B, 0xED, 0x8C, 0x0D, 0x8C, 0x2D, 0x8C, 0x2E, 0xAD, 0x11, 0xAD, 0x11, 0xAD, 0x31, 0xA4, 0xD0, 0xA4, 0xB0, 0xA4, 0xD0, 0xAC, 0xF1, 0xBD, 0x93, 0xAC, 0xF0, 0xA4, 0x6E, 0x73, 0x09, 0x73, 0x4A, 0x94, 0x0C, 0xB5, 0x31, 0xBD, 0x72, 0xBD, 0xD4, 0xCE, 0x36, 0xA5, 0x32, 0xAD, 0x53, 0xAD, 0x53, 0xB5, 0x94, 0xBD, 0xB4, 0xC5, 0xF5, 0xA5, 0x12, 0xB5, 0x73, 0xBD, 0xD4, 0xBD, 0xB4, 0xB5, 0x73, 0xB5, 0xB4, 0xAD, 0x52, 0x9C, 0xF1, 0xAD, 0x53, 0x94, 0x90, 0x73, 0x8C, 0x84, 0x0E, 0x83, 0xEE, 0x7B, 0xAC, 0x9C, 0x8E, 0xAD, 0x10, 0xCE, 0x14, 0xCE, 0x14, 0xDE, 0x96, 0xCE, 0x14, 0xC5, 0xD2, 0xCD, 0xF3, 0xB5, 0x51, 0x94, 0x4E, 0x39, 0xC5, 0x41, 0xE7, 0x42, 0x27, 0x29, 0x64, 0x29, 0x65, 0x42, 0x07, 0x4A, 0x69, 0x52, 0xAA, 0x5A, 0xCB, 0x5A, 0xEB, 0x62, 0xEB, 0xA4, 0xF4, 0xC5, 0xF8, 0x7B, 0xF0, 0xAD, 0x76, 0xDE, 0xBB, 0xA4, 0xF3, 0x94, 0x50, 0x83, 0xAC, 0x9C, 0x6E, 0x94, 0x2D, 0x94, 0x2E, 0x94, 0x0D, 0x7B, 0x6A, 0x83, 0xCC, 0x7B, 0x4A, 0x73, 0x2A, 0x29, 0x44, 0x52, 0xA9, 0x5A, 0xCA, 0x42, 0x07, 0x31, 0x65, 0x39, 0xC7, 0x4A, 0x49, 0x52, 0x6A, 0x62, 0xEC, 0x84, 0x10, 0x6B, 0x0D, 0x41, 0xC7, 0xAD, 0x34, 0xB5, 0x34, 0xC5, 0xB6, 0xE6, 0x99, 0xAC, 0xD2, 0x6B, 0x0B, 0xBD, 0xB6, 0x9C, 0x91, 0x7B, 0x8C, 0x8B, 0xEC, 0x9C, 0x4D, 0xA4, 0xAE, 0xAC, 0xAF, 0xA4, 0x8F, 0x94, 0x4E, 0x8B, 0xEC, 0x7B, 0xAC, 0x83, 0xCC, 0x8C, 0x0D, 0x8B, 0xEC, 0x8C, 0x2D, 0xA4, 0xD0, 0xAC, 0xF0, 0x9C, 0x8F, 0x83, 0xEC, 0x94, 0x6F, 0x8C, 0x2E, 0x83, 0xED, 0x8C, 0x4E, 0xB5, 0x52, 0xB5, 0x93, 0xB5, 0x93, 0x7B, 0xAC, 0x6B, 0x4B, 0x7B, 0xAB, 0xA4, 0xAF, 0x73, 0x2A, 0x9C, 0xB0, 0xBD, 0xD4, 0xC5, 0xF5, 0xC6, 0x15, 0xC6, 0x15, 0xC5, 0xF5, 0xAD, 0x73, 0xB5, 0x74, 0xC6, 0x38, 0xAD, 0x76, 0xA5, 0x34, 0xCE, 0x57, 0xC6, 0x16, 0xB5, 0x73, 0xBD, 0xF5, 0xCE, 0x56, 0xC5, 0xF5, 0xBD, 0xF5, 0xBD, 0xD5, 0xC5, 0xF6, 0xC6, 0x36, 0xBD, 0xD5, 0xA5, 0x12, 0x7B, 0xCD, 0x8C, 0x2E, 0x94, 0x90, 0xBD, 0xD5, 0xC5, 0xF6, 0xBD, 0xD5, 0xB5, 0x73, 0xAD, 0x53, 0x94, 0x90, 0x8C, 0x2E, 0x8C, 0x4F, 0x84, 0x4F, 0x8C, 0x90, 0x8C, 0x70, 0xA5, 0x12, 0xBD, 0xF5, 0xBD, 0xD5, 0xB5, 0x94, 0xC5, 0xF5, 0xBD, 0xD4, 0xB5, 0x73, 0xA4, 0xD1, 0xA4, 0xF2, 0x9C, 0xB0, 0x83, 0xEE, 0x73, 0x4C, 0x73, 0x6C, 0x7B, 0x8D, 0x7B, 0xAD, 0x7B, 0xAD, 0x83, 0xCD, 0x7B, 0xAD, 0x7B, 0xCD, 0x83, 0xEE, 0x8C, 0x0E, 0x83, 0xEE, 0x83, 0xCD, 0x7B, 0xAD, 0x7B, 0xCD, 0x7B, 0xAD, 0x7B, 0xAD, 0x73, 0x8D, 0x6B, 0x4C, 0x5A, 0xEA, 0x6B, 0x4C, 0x73, 0x8D, 0x6B, 0x6C, 0xA4, 0xF2, 0xB5, 0x73, 0xCE, 0x16, 0x8C, 0x0D, 0x94, 0x6F, 0x94, 0x8F, 0x9C, 0xD1, 0xA5, 0x32, 0x9C, 0xB0, 0xA4, 0xF1, 0x9C, 0xF2, 0x94, 0x90, 0x7C, 0x0E, 0x73, 0x8D, 0x84, 0x0F, 0x8C, 0x70, 0xA5, 0x33, 0xB5, 0x94, 0xBD, 0xF6, 0xB5, 0xD5, 0xBD, 0xF6, 0xA5, 0x54, 0x94, 0x91, 0xA5, 0x12, 0x8C, 0x4F, 0xB5, 0x94, 0xBD, 0x94, 0xBD, 0xB4, 0xA4, 0xD1, 0x94, 0x4F, 0x9C, 0x90, 0x9C, 0x90, 0x9C, 0xB1, 0x9C, 0xD1, 0x9C, 0xB1, 0x9C, 0x90, 0x9C, 0xD1, 0xA5, 0x12, 0x9C, 0xB1, 0x9C, 0xD1, 0xA4, 0xD1, 0x9C, 0xD1, 0xA4, 0xF1, 0xAD, 0x52, 0xC5, 0xD4, 0xB5, 0x52, 0xAD, 0x11, 0xBD, 0xB3, 0x9C, 0xB0, 0xAD, 0x32, 0x9C, 0xB0, 0x83, 0xEE, 0x8C, 0x2E, 0xA4, 0xD0, 0xAD, 0x11, 0x9C, 0xB0, 0xB5, 0x53, 0xB5, 0x93, 0xB5, 0x73, 0x9C, 0xD1, 0x94, 0x8F, 0x9C, 0x90, 0xA4, 0xD1, 0x9C, 0xD0, 0x9C, 0xB0, 0xA4, 0xF1, 0x9C, 0xD0, 0x9C, 0xD1, 0x9C, 0xB0, 0x94, 0x6E, 0x83, 0xED, 0x9C, 0x8F, 0x83, 0xCC, 0xB5, 0x73, 0x9C, 0xB0, 0xBD, 0x93, 0xAD, 0x52, 0xB5, 0x93, 0xAD, 0x32, 0xB5, 0x73, 0xBD, 0xB4, 0xB5, 0x93, 0xB5, 0x93, 0xB5, 0x73, 0xAD, 0x53, 0xA4, 0xF1, 0x9C, 0xD1, 0x9C, 0x90, 0x94, 0x6F, 0x94, 0x90, 0xAD, 0x12, 0xAD, 0x33, 0x9C, 0x90, 0xA4, 0xD1, 0xA4, 0xD1, 0x94, 0x2E, 0xA4, 0xD1, 0xBD, 0x94, 0x8C, 0x2E, 0x8C, 0x0E, 0x7B, 0x8C, 0x83, 0xED, 0x94, 0x2E, 0x9C, 0x6F, 0x8C, 0x0E, 0x94, 0x4E, 0xA4, 0xB0, 0xAD, 0x11, 0xB5, 0x52, 0xAC, 0xF1, 0xB5, 0x52, 0xAD, 0x11, 0xB5, 0x32, 0xAD, 0x11, 0xA5, 0x55, 0xA5, 0x55, 0xA5, 0x35, 0x9C, 0xF4, 0x8C, 0x92, 0x63, 0x0B, 0x6B, 0x4B, 0x7B, 0xAC, 0x8C, 0x0D, 0x8C, 0x2E, 0x8C, 0x2E, 0x94, 0x4E, 0x94, 0x4E, 0xAD, 0x11, 0xB5, 0x52, 0xB5, 0x72, 0xA4, 0xD0, 0xA4, 0xD0, 0xAD, 0x11, 0xB5, 0x31, 0xBD, 0x72, 0x94, 0x2D, 0x8B, 0xCC, 0x8B, 0xCC, 0x9C, 0x2E, 0x8B, 0xCC, 0xB5, 0x10, 0xBD, 0x73, 0xCE, 0x56, 0xC6, 0x15, 0xAD, 0x73, 0xB5, 0x73, 0xB5, 0x94, 0xBD, 0xB5, 0xBD, 0xF5, 0xBD, 0xF5, 0x84, 0x0E, 0xC6, 0x16, 0xCE, 0x36, 0xC6, 0x16, 0xC6, 0x16, 0xBD, 0xD5, 0xAD, 0x32, 0xAD, 0x53, 0xB5, 0xD5, 0xAD, 0x33, 0x94, 0x90, 0x94, 0x70, 0x8C, 0x0E, 0x94, 0x6E, 0xB5, 0x51, 0xCE, 0x13, 0xCE, 0x55, 0xCE, 0x34, 0xDE, 0xB6, 0xDE, 0x74, 0xD6, 0x12, 0xD6, 0x33, 0xC5, 0xB1, 0xD6, 0x54, 0xAD, 0x31, 0x52, 0x88, 0x42, 0x27, 0x39, 0xE7, 0x29, 0x65, 0x29, 0x65, 0x4A, 0x69, 0x4A, 0x48, 0x52, 0x8A, 0x62, 0xEC, 0x7B, 0xCF, 0xA5, 0x35, 0xA4, 0xF4, 0xAD, 0x55, 0xB5, 0xB7, 0xC6, 0x39, 0xDE, 0xDB, 0x9C, 0xD2, 0x94, 0x4F, 0xA4, 0xAF, 0x9C, 0x8F, 0xA4, 0xD0, 0xAC, 0xF0, 0xA4, 0x6F, 0x9C, 0x4E, 0xA4, 0xAF, 0x83, 0xAC, 0x31, 0x65, 0x52, 0xAA, 0x4A, 0x48, 0x39, 0xA6, 0x42, 0x07, 0x42, 0x28, 0x4A, 0x49, 0x52, 0x6A, 0xA5, 0x34, 0xA5, 0x14, 0x94, 0x31, 0x5A, 0x6A, 0x62, 0xAA, 0xB5, 0x54, 0xBD, 0x95, 0xC5, 0x95, 0xDE, 0x78, 0xA4, 0xB2, 0x73, 0x4C, 0xB5, 0x33, 0xAC, 0xF1, 0xAC, 0xF1, 0x8C, 0x0C, 0x94, 0x0C, 0x8B, 0xEC, 0x9C, 0x4E, 0xA4, 0x8E, 0xAC, 0xCF, 0xB4, 0xF0, 0xAC, 0xD0, 0xAC, 0xCF, 0xAC, 0xCF, 0xB5, 0x10, 0xB5, 0x30, 0xB5, 0x10, 0xB5, 0x10, 0xB5, 0x30, 0xAC, 0xF0, 0xAC, 0xEF, 0xAC, 0xCF, 0xAC, 0xD0, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0xAE, 0x94, 0x2D, 0x94, 0x2D, 0x9C, 0x6E, 0xB5, 0x10, 0xAC, 0xCF, 0x9C, 0x8E, 0x94, 0x4E, 0x94, 0x0D, 0x8C, 0x0D, 0x94, 0x4E, 0x94, 0x2D, 0x8C, 0x0D, 0x94, 0x6F, 0xCE, 0x59, 0xAD, 0x96, 0x9C, 0xD3, 0x83, 0xCD, 0x9C, 0x8F, 0x8C, 0x2E, 0x84, 0x0D, 0xAD, 0x11, 0xAD, 0x11, 0xB5, 0x72, 0xBD, 0xB4, 0xBD, 0xD5, 0xA5, 0x11, 0x7B, 0xAC, 0x9C, 0xF1, 0x7B, 0xCD, 0x83, 0xED, 0x8C, 0x2F, 0xA5, 0x12, 0xAD, 0x53, 0xAD, 0x32, 0x94, 0x6F, 0x7B, 0xCD, 0x94, 0x6F, 0x9C, 0xB0, 0x94, 0x70, 0x94, 0x90, 0x94, 0x90, 0x94, 0x90, 0x7B, 0xAD, 0xA5, 0x12, 0xBD, 0xD5, 0xAD, 0x52, 0xC5, 0xF5, 0xB5, 0x93, 0xBD, 0xD5, 0xAD, 0x53, 0xAD, 0x53, 0x9C, 0xD1, 0x7B, 0xAD, 0x6B, 0x0B, 0x63, 0x0B, 0x6B, 0x4C, 0x73, 0x6C, 0x73, 0x8C, 0x7B, 0xAC, 0x83, 0xCD, 0x6B, 0x2B, 0x84, 0x0E, 0x83, 0xEE, 0x84, 0x0E, 0x73, 0x8C, 0x7B, 0x8C, 0x7B, 0xAC, 0x7B, 0x8C, 0x73, 0x6C, 0x63, 0x2B, 0x5A, 0xCA, 0x52, 0xAA, 0x63, 0x2B, 0x6B, 0x4C, 0x6B, 0x4C, 0xAD, 0x33, 0xAD, 0x53, 0xCE, 0x56, 0x8C, 0x2E, 0x94, 0x6F, 0x9C, 0xB0, 0xA4, 0xF1, 0xA5, 0x11, 0xA4, 0xF1, 0xA4, 0xF1, 0x94, 0x90, 0x9C, 0xD1, 0x94, 0xB0, 0x7B, 0xEE, 0x8C, 0x70, 0x9C, 0xD1, 0xA5, 0x53, 0xB5, 0x94, 0xBE, 0x16, 0xB5, 0xB5, 0xBD, 0xD5, 0x9D, 0x13, 0x9C, 0xD2, 0xAD, 0x74, 0x94, 0x70, 0xBD, 0x94, 0xBD, 0xB4, 0xB5, 0x53, 0x9C, 0x90, 0x9C, 0x90, 0xA4, 0xD1, 0x9C, 0xB0, 0xA4, 0xF1, 0xAD, 0x53, 0xAD, 0x12, 0xAD, 0x12, 0xAD, 0x73, 0xBD, 0xB5, 0xAD, 0x53, 0x9C, 0xB0, 0xA4, 0xD1, 0xAD, 0x53, 0xB5, 0x74, 0xBD, 0x94, 0xBD, 0x73, 0xAD, 0x11, 0xB5, 0x72, 0xCE, 0x15, 0x9C, 0xB0, 0xAD, 0x32, 0xB5, 0x72, 0x8C, 0x2E, 0x8C, 0x0D, 0xA4, 0xB0, 0x8C, 0x2E, 0x84, 0x0D, 0x9C, 0x90, 0xBD, 0xD4, 0xBD, 0xD4, 0xAD, 0x53, 0xA5, 0x11, 0xAD, 0x32, 0xAD, 0x52, 0xAD, 0x32, 0xAD, 0x32, 0xBD, 0xD4, 0xB5, 0x94, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0x73, 0xAD, 0x11, 0xAD, 0x31, 0x94, 0x6F, 0xBD, 0x93, 0xAD, 0x32, 0xB5, 0x73, 0xB5, 0x93, 0xB5, 0x93, 0xBD, 0x94, 0xCE, 0x36, 0xC6, 0x15, 0xC6, 0x36, 0xC6, 0x36, 0xC6, 0x36, 0xCE, 0x36, 0xC6, 0x36, 0xBD, 0xD5, 0xB5, 0xB4, 0xBD, 0xD5, 0xBD, 0xD5, 0xD6, 0x98, 0xD6, 0x77, 0xC6, 0x16, 0xCE, 0x57, 0xD6, 0x77, 0xAD, 0x52, 0x83, 0xED, 0xB5, 0x53, 0x83, 0xCD, 0x8C, 0x4E, 0x8C, 0x0E, 0x94, 0x70, 0xA4, 0xD0, 0xAD, 0x11, 0xC5, 0xB3, 0xCD, 0xF4, 0xCD, 0xF4, 0xD6, 0x35, 0xC5, 0xD4, 0x9C, 0x8F, 0xBD, 0x72, 0xD6, 0x54, 0xDE, 0x55, 0xDE, 0x75, 0xA5, 0x55, 0xA5, 0x35, 0xA5, 0x35, 0x9C, 0xF4, 0x8C, 0x92, 0x62, 0xEB, 0x5A, 0xA9, 0x7B, 0xAC, 0x83, 0xEC, 0x94, 0x4E, 0x8C, 0x2D, 0x94, 0x4E, 0x94, 0x6F, 0xAD, 0x32, 0xAC, 0xF1, 0xAD, 0x11, 0xAC, 0xF1, 0xA4, 0xD0, 0xB5, 0x32, 0xB5, 0x52, 0xC5, 0xB3, 0x94, 0x2E, 0x8B, 0xCC, 0x9C, 0x4E, 0x9C, 0x2E, 0x83, 0x8B, 0xB5, 0x11, 0xB5, 0x52, 0xC5, 0xF5, 0xBD, 0xB5, 0xAD, 0x74, 0xAD, 0x73, 0xAD, 0x53, 0xB5, 0xB4, 0xC5, 0xF5, 0xC6, 0x36, 0xBD, 0xD5, 0xCE, 0x77, 0xC6, 0x16, 0xC6, 0x16, 0xB5, 0x94, 0xB5, 0x94, 0xAD, 0x53, 0xAD, 0x53, 0xAD, 0x73, 0xA4, 0xF1, 0x9C, 0xB1, 0x9C, 0xB1, 0x94, 0x6F, 0xA4, 0xAF, 0xBD, 0x71, 0xC5, 0xD2, 0xBD, 0xB2, 0xC5, 0xF3, 0xCE, 0x34, 0xCD, 0xF2, 0xD6, 0x33, 0xCE, 0x13, 0xCD, 0xF2, 0xCD, 0xF3, 0xDE, 0x96, 0xB5, 0x72, 0x4A, 0x07, 0x4A, 0x48, 0x31, 0xA6, 0x31, 0xC6, 0x4A, 0x69, 0x4A, 0x69, 0x4A, 0x49, 0x63, 0x2C, 0x7B, 0xAE, 0x94, 0x92, 0x8C, 0x51, 0xBD, 0xD7, 0x9C, 0xB3, 0xA5, 0x35, 0xD6, 0xBB, 0xB5, 0x75, 0x83, 0xEE, 0x5A, 0xA9, 0x83, 0xCE, 0xAD, 0x32, 0xAC, 0xF1, 0x8B, 0xED, 0x9C, 0x6E, 0xCD, 0xD4, 0xBD, 0x73, 0x83, 0xEE, 0x31, 0x86, 0x29, 0x44, 0x52, 0xA9, 0x6B, 0x2C, 0x42, 0x08, 0x8C, 0x71, 0x7B, 0xCF, 0x9C, 0xD3, 0xB5, 0x96, 0xAD, 0x14, 0x7B, 0x8E, 0x4A, 0x08, 0x7B, 0x8D, 0xBD, 0x75, 0xB5, 0x13, 0xC5, 0x95, 0xCD, 0xF7, 0x94, 0x50, 0x6B, 0x0B, 0x7B, 0x6D, 0x8B, 0xEE, 0x83, 0xCD, 0x7B, 0xAD, 0x7B, 0x8C, 0x6B, 0x2A, 0x83, 0xAB, 0xAC, 0xF0, 0x7B, 0x6B, 0x73, 0x2A, 0x7B, 0x8B, 0x7B, 0x6B, 0x7B, 0x6B, 0x6A, 0xE9, 0x6B, 0x09, 0x7B, 0x8B, 0x83, 0xAB, 0x83, 0xAC, 0x83, 0xAB, 0x94, 0x0D, 0x94, 0x0D, 0x93, 0xEC, 0x9C, 0x2D, 0xAC, 0xEF, 0xA4, 0xAF, 0xA4, 0x8E, 0xA4, 0x8E, 0xB4, 0xEF, 0xAC, 0xCF, 0xB5, 0x30, 0xB5, 0x30, 0xBD, 0x71, 0xAC, 0xCF, 0xA4, 0x6E, 0xA4, 0x6E, 0xA4, 0x8E, 0xAC, 0xF2, 0xCE, 0x59, 0xB5, 0xB7, 0xAD, 0x75, 0xA4, 0xD1, 0xAC, 0xCF, 0xAC, 0xCF, 0xAC, 0xCF, 0xA4, 0xAE, 0x9C, 0x8E, 0x9C, 0x6E, 0x9C, 0x6E, 0x9C, 0x6F, 0x9C, 0x6E, 0x9C, 0x4E, 0xAD, 0x32, 0xB5, 0x32, 0xAD, 0x32, 0xA4, 0xF2, 0xA4, 0xF1, 0xA4, 0xD1, 0xA4, 0xF1, 0x9C, 0xD1, 0x9C, 0xB1, 0x9C, 0xD1, 0x9C, 0xB1, 0x94, 0x70, 0x94, 0x6F, 0x8C, 0x0E, 0x8C, 0x2E, 0x84, 0x0E, 0x8C, 0x2E, 0x8C, 0x2F, 0x83, 0xEE, 0x94, 0x6F, 0x9C, 0xB0, 0x94, 0x90, 0x83, 0xED, 0x73, 0x6C, 0x9C, 0xD1, 0x7B, 0xCD, 0x7B, 0x8D, 0x5A, 0xCA, 0x5A, 0xAA, 0x83, 0xEE, 0x94, 0x70, 0x8C, 0x2F, 0x83, 0xEE, 0x84, 0x0E, 0x8C, 0x4F, 0x94, 0xB0, 0x94, 0x90, 0x8C, 0x2F, 0x7B, 0xCD, 0x7B, 0xAD, 0x73, 0x6C, 0x6B, 0x4C, 0x6B, 0x4C, 0x6B, 0x4C, 0x63, 0x2C, 0x63, 0x2C, 0x63, 0x0B, 0x73, 0x6C, 0xAD, 0x53, 0xB5, 0x73, 0xD6, 0x77, 0x94, 0x8F, 0x94, 0x6F, 0x9C, 0x90, 0x9C, 0xD0, 0xA5, 0x11, 0xB5, 0x73, 0xAD, 0x52, 0x9C, 0xD1, 0xA5, 0x32, 0xAD, 0x53, 0x94, 0xB0, 0x9C, 0xF1, 0xA5, 0x32, 0xAD, 0x53, 0xC6, 0x36, 0xC6, 0x16, 0xBD, 0xD5, 0xC6, 0x16, 0xA5, 0x33, 0x9D, 0x13, 0xAD, 0x53, 0xA4, 0xD1, 0xB5, 0x94, 0xB5, 0x53, 0xA4, 0xD1, 0x9C, 0x90, 0xAD, 0x32, 0xBD, 0x93, 0xAD, 0x12, 0xB5, 0x53, 0xC5, 0xD5, 0xB5, 0x53, 0xA5, 0x12, 0xB5, 0x94, 0xC5, 0xD5, 0xA4, 0xF1, 0xA4, 0xF1, 0xA4, 0xD1, 0xAD, 0x32, 0xB5, 0x94, 0xC5, 0xF5, 0xBD, 0xB4, 0xB5, 0x72, 0xAD, 0x11, 0xD6, 0x36, 0xA4, 0xB0, 0xAD, 0x11, 0xAD, 0x32, 0x83, 0xED, 0x83, 0xCC, 0xA4, 0xB0, 0x9C, 0x8F, 0x8C, 0x0D, 0x84, 0x0D, 0xAD, 0x11, 0xC5, 0xF5, 0x94, 0x8F, 0xAD, 0x32, 0xA5, 0x11, 0xB5, 0x73, 0xB5, 0x94, 0xBD, 0xB4, 0xC5, 0xD5, 0xB5, 0x73, 0xB5, 0x94, 0xBD, 0xB4, 0xB5, 0x93, 0x9C, 0xB0, 0xA4, 0xF0, 0x94, 0x4E, 0xBD, 0x93, 0xB5, 0x73, 0xB5, 0x93, 0xBD, 0xB4, 0xBD, 0xB4, 0xBD, 0xB4, 0xD6, 0x77, 0xCE, 0x56, 0xCE, 0x56, 0xD6, 0x76, 0xC6, 0x15, 0xBD, 0xD5, 0xBD, 0xD5, 0xBD, 0xF5, 0xBD, 0xD5, 0xBD, 0xF5, 0xCE, 0x56, 0xCE, 0x36, 0xBD, 0xB4, 0xAD, 0x52, 0xAD, 0x32, 0xAD, 0x73, 0xAD, 0x32, 0x94, 0x6F, 0xB5, 0x53, 0xA4, 0xB1, 0xB5, 0x53, 0xAD, 0x53, 0xAD, 0x32, 0xAD, 0x32, 0xC5, 0xB4, 0xB5, 0x72, 0xC5, 0xD3, 0xC5, 0xD3, 0xC5, 0xD3, 0xC5, 0x93, 0xA4, 0xB0, 0xD6, 0x14, 0xE6, 0x95, 0xDE, 0x53, 0xDE, 0x53, 0xA5, 0x55, 0xA5, 0x35, 0xA5, 0x35, 0x9C, 0xF4, 0x8C, 0x92, 0x52, 0x89, 0x4A, 0x27, 0x7B, 0x8C, 0x8C, 0x0D, 0x8C, 0x0D, 0x8C, 0x0D, 0x94, 0x4E, 0x9C, 0x6F, 0xA4, 0xB0, 0x94, 0x2E, 0x83, 0xEC, 0xAD, 0x11, 0xAD, 0x31, 0xB5, 0x52, 0xBD, 0x73, 0xCD, 0xD4, 0x9C, 0x6E, 0x83, 0xAC, 0x73, 0x2A, 0x52, 0x27, 0x52, 0x47, 0xAC, 0xF0, 0xA4, 0xD0, 0xB5, 0x94, 0xBD, 0xD5, 0xB5, 0x94, 0xAD, 0x73, 0xAD, 0x53, 0xBD, 0xD5, 0xBD, 0xF5, 0xBD, 0xF5, 0xB5, 0x73, 0xC6, 0x36, 0xB5, 0xB4, 0xBD, 0xF5, 0xB5, 0x94, 0xBD, 0xD5, 0xAD, 0x53, 0xAD, 0x53, 0xAD, 0x53, 0xA5, 0x12, 0x94, 0xB1, 0x9C, 0xF2, 0x94, 0x90, 0xA4, 0xF0, 0xBD, 0x71, 0xB5, 0x71, 0x8C, 0x0C, 0x94, 0x6E, 0x8C, 0x2D, 0xBD, 0x91, 0xCE, 0x13, 0xCE, 0x13, 0xD6, 0x33, 0xCD, 0xD2, 0xCE, 0x13, 0xDE, 0x76, 0x94, 0x4E, 0x41, 0xE6, 0x39, 0xC6, 0x3A, 0x07, 0x42, 0x28, 0x4A, 0x48, 0x4A, 0x69, 0x52, 0x8A, 0x63, 0x0C, 0x63, 0x0C, 0x9C, 0xB3, 0xBD, 0xD7, 0xAD, 0x56, 0xA5, 0x15, 0xBD, 0xD7, 0xBD, 0xB6, 0x94, 0x92, 0x4A, 0x69, 0x6B, 0x2C, 0xCE, 0x16, 0xA4, 0xB0, 0x8B, 0xED, 0x9C, 0x6E, 0xB5, 0x32, 0xAC, 0xF0, 0xAD, 0x12, 0xA4, 0xF2, 0xA5, 0x12, 0xB5, 0x74, 0x6B, 0x4C, 0x42, 0x07, 0x94, 0xB2, 0x94, 0xB2, 0xA4, 0xF4, 0xB5, 0x96, 0xBD, 0xD7, 0xA4, 0xF3, 0x9C, 0x92, 0x41, 0xE8, 0x83, 0xCE, 0xB5, 0x33, 0xB5, 0x13, 0xA4, 0xB1, 0xC5, 0xB6, 0x8B, 0xCF, 0x7B, 0x4C, 0x94, 0x4F, 0x94, 0x70, 0x94, 0xB1, 0x9C, 0xB1, 0x84, 0x0E, 0x9C, 0x6F, 0xB5, 0x31, 0x83, 0xAC, 0x62, 0xE9, 0x84, 0x0E, 0x7B, 0xED, 0x7B, 0xCD, 0x63, 0x2B, 0x6B, 0x4B, 0x84, 0x4F, 0x9C, 0xD1, 0x94, 0xB1, 0x94, 0x90, 0x84, 0x2E, 0x6B, 0x2B, 0x5A, 0x89, 0x52, 0x68, 0x62, 0xEA, 0x5A, 0xA9, 0x63, 0x2A, 0x7B, 0xCC, 0x8C, 0x0E, 0x8C, 0x0D, 0x94, 0x4D, 0x9C, 0x6D, 0xBD, 0x51, 0x9C, 0x2D, 0x62, 0xA8, 0x62, 0xE9, 0x6B, 0x0A, 0x94, 0x91, 0xC6, 0x38, 0xBD, 0xF8, 0xCE, 0x59, 0x8B, 0xEE, 0x73, 0x4A, 0x83, 0x8C, 0x8B, 0xEC, 0x94, 0x0D, 0x94, 0x0D, 0x7B, 0x6B, 0x8B, 0xCC, 0x83, 0x8B, 0x7B, 0x6A, 0x83, 0xAC, 0x93, 0xED, 0x94, 0x0D, 0x8B, 0xEE, 0x94, 0x0E, 0xB5, 0x53, 0xAD, 0x12, 0xA4, 0xD1, 0x94, 0x70, 0xA4, 0xD1, 0x9C, 0xB1, 0x94, 0x4F, 0xA4, 0xF2, 0xAD, 0x12, 0x9C, 0xB1, 0xA5, 0x12, 0xAD, 0x32, 0xAD, 0x33, 0xB5, 0x53, 0xB5, 0x74, 0xAD, 0x33, 0xAD, 0x53, 0xB5, 0x53, 0xAD, 0x33, 0xAD, 0x33, 0xB5, 0x94, 0xAD, 0x12, 0x9C, 0xD1, 0x9C, 0xB1, 0xA4, 0xD2, 0x94, 0x90, 0x94, 0x6F, 0x94, 0x4F, 0x94, 0x90, 0x9C, 0x90, 0x84, 0x0E, 0x94, 0x6F, 0x94, 0x6F, 0x9C, 0x90, 0x94, 0x90, 0x94, 0x70, 0x7B, 0xCE, 0x7B, 0xAD, 0x73, 0x8C, 0x73, 0x6C, 0x6B, 0x4C, 0x6B, 0x2C, 0x63, 0x0B, 0x73, 0x6C, 0xAD, 0x53, 0x9C, 0xD1, 0xAD, 0x12, 0x8C, 0x4E, 0x83, 0xCD, 0x7B, 0xAC, 0x83, 0xED, 0x84, 0x0D, 0x84, 0x0E, 0xAD, 0x53, 0xBD, 0xD4, 0xB5, 0xB4, 0xB5, 0x94, 0xAD, 0x73, 0x94, 0x90, 0xA5, 0x12, 0xA5, 0x32, 0xBD, 0xD5, 0xA5, 0x33, 0x8C, 0x4F, 0xB5, 0x94, 0xAD, 0x53, 0xAD, 0x74, 0xA5, 0x33, 0xAD, 0x12, 0xB5, 0x73, 0xD6, 0x57, 0xAD, 0x53, 0xA4, 0xF1, 0xC5, 0xD4, 0xC5, 0xD4, 0xC5, 0xF5, 0xC6, 0x15, 0xB5, 0x52, 0x9C, 0xB0, 0xA4, 0xF1, 0xBD, 0xB5, 0xBD, 0xD5, 0xB5, 0x94, 0xBD, 0xB5, 0xBD, 0xB5, 0xB5, 0x94, 0xB5, 0x73, 0xC5, 0xF4, 0xCE, 0x35, 0xD6, 0x35, 0xBD, 0x72, 0xC5, 0xB4, 0xA4, 0xD0, 0x94, 0x6F, 0xB5, 0x52, 0x94, 0x6F, 0x8C, 0x2E, 0xA4, 0xF1, 0x9C, 0xAF, 0x9C, 0xAF, 0x83, 0xCD, 0x9C, 0xD0, 0xC5, 0xF5, 0x9C, 0xD0, 0xAD, 0x52, 0xA4, 0xF1, 0xBD, 0xB4, 0xB5, 0xB4, 0xB5, 0x93, 0xC5, 0xD5, 0xBD, 0x94, 0xB5, 0x73, 0xAD, 0x52, 0xAD, 0x53, 0x94, 0x4E, 0x9C, 0xB0, 0x8C, 0x2D, 0xAD, 0x32, 0xBD, 0xB4, 0xB5, 0x73, 0xB5, 0x73, 0xBD, 0xD4, 0xBD, 0xB4, 0xD6, 0x97, 0xD6, 0x76, 0xCE, 0x56, 0xCE, 0x56, 0xC6, 0x15, 0xC6, 0x15, 0xC6, 0x15, 0xAD, 0x53, 0x8C, 0x4F, 0xB5, 0x73, 0xD6, 0x77, 0xC5, 0xF5, 0xBD, 0xB4, 0xAD, 0x53, 0xA5, 0x12, 0x9C, 0xF1, 0x9C, 0xB0, 0x8C, 0x0D, 0xB5, 0x53, 0xA4, 0xF1, 0xBD, 0xB4, 0xC5, 0xD5, 0xB5, 0x94, 0xB5, 0x73, 0xC5, 0xD4, 0xAD, 0x10, 0xCD, 0xF4, 0xCE, 0x14, 0xC5, 0xD4, 0xBD, 0x72, 0xA4, 0x8F, 0xDE, 0x55, 0xDE, 0x33, 0xD5, 0xF2, 0xCD, 0x91, 0xA5, 0x35, 0xB5, 0xB7, 0xA5, 0x34, 0x9C, 0xF4, 0x8C, 0x92, 0x63, 0x0B, 0x62, 0xC9, 0x62, 0xC9, 0x6B, 0x09, 0x6B, 0x09, 0x73, 0x4A, 0x73, 0x4A, 0x73, 0x4A, 0x6B, 0x2A, 0x7B, 0x8B, 0x73, 0x29, 0x8C, 0x0D, 0x9C, 0x6F, 0x9C, 0x6E, 0xAD, 0x11, 0xBD, 0x73, 0x8B, 0xCC, 0xB4, 0xF1, 0x93, 0xED, 0x5A, 0x68, 0x62, 0x88, 0xAC, 0xF1, 0xB5, 0x52, 0xB5, 0x73, 0xB5, 0x93, 0xB5, 0xB4, 0xBD, 0xF5, 0xB5, 0xD5, 0xBD, 0xF5, 0xC6, 0x16, 0xBD, 0xF5, 0xBD, 0xD5, 0xC6, 0x57, 0xC6, 0x36, 0xBD, 0xF5, 0xB5, 0x94, 0xB5, 0xB5, 0xB5, 0xB4, 0xAD, 0x74, 0xB5, 0x94, 0xAD, 0x94, 0xA5, 0x13, 0xA5, 0x12, 0x9C, 0xD1, 0xAD, 0x10, 0xB5, 0x30, 0xCE, 0x14, 0xC5, 0xD4, 0x73, 0x8B, 0x7B, 0x8B, 0x84, 0x0C, 0xCE, 0x34, 0xCD, 0xF2, 0xCD, 0xF2, 0xBD, 0x91, 0xC5, 0xB2, 0xD6, 0x54, 0xD6, 0x35, 0x73, 0x4B, 0x39, 0xC6, 0x42, 0x07, 0x42, 0x07, 0x42, 0x28, 0x4A, 0x69, 0x52, 0xAA, 0x5A, 0xEB, 0x6B, 0x6D, 0x9C, 0xD3, 0xAD, 0x55, 0xB5, 0x96, 0x94, 0xB3, 0xBD, 0xD7, 0xA5, 0x14, 0xAD, 0x35, 0x73, 0x8E, 0x73, 0x8E, 0xC5, 0xF6, 0xBD, 0x74, 0xAC, 0xD0, 0xA4, 0xB0, 0xAC, 0xD0, 0xAC, 0xF1, 0xB5, 0x53, 0xCE, 0x15, 0xD6, 0x56, 0x94, 0x70, 0x31, 0x45, 0x29, 0x65, 0x42, 0x08, 0x4A, 0x49, 0x7B, 0xAF, 0x84, 0x10, 0xA4, 0xF3, 0x94, 0x92, 0xAD, 0x34, 0x94, 0x51, 0x4A, 0x28, 0x8B, 0xEE, 0xAC, 0xF2, 0xB5, 0x12, 0xBD, 0x54, 0xB5, 0x33, 0x94, 0x0F, 0x7B, 0x4C, 0x8C, 0x2F, 0xAD, 0x33, 0x94, 0x91, 0x94, 0x70, 0xA4, 0xD1, 0xB5, 0x31, 0x83, 0xAB, 0x62, 0xEA, 0x73, 0xAD, 0x73, 0xAD, 0x73, 0xAD, 0x6B, 0x6D, 0x73, 0x8D, 0x8C, 0x4F, 0xA5, 0x33, 0xB5, 0x95, 0xBD, 0xF6, 0xA5, 0x53, 0x7B, 0xCE, 0x6B, 0x6C, 0x52, 0xAA, 0x5A, 0xCA, 0x6B, 0x4C, 0x8C, 0x70, 0xB5, 0xB4, 0xB5, 0x74, 0xAD, 0x53, 0x94, 0x8F, 0x9C, 0x6D, 0xBD, 0x51, 0xAC, 0xCF, 0x83, 0xAC, 0x83, 0xCD, 0x83, 0xCD, 0xA5, 0x34, 0xBD, 0xF7, 0xB5, 0xB7, 0x84, 0x10, 0x83, 0xEF, 0x73, 0x4B, 0x8C, 0x0E, 0x8C, 0x0E, 0x8C, 0x0D, 0xA4, 0xD0, 0x94, 0x4E, 0x8B, 0xCC, 0x7B, 0x4B, 0x6B, 0x0A, 0x6A, 0xCA, 0x73, 0x0A, 0x7B, 0x0A, 0x73, 0x0A, 0x7B, 0x4B, 0xB5, 0x53, 0x8C, 0x2E, 0xA5, 0x12, 0xA4, 0xD1, 0x94, 0x70, 0x9C, 0xB1, 0xA5, 0x12, 0xAD, 0x53, 0xA5, 0x12, 0x7B, 0xCD, 0x83, 0xEE, 0xA5, 0x12, 0xA4, 0xF1, 0xA4, 0xD1, 0x94, 0x70, 0x73, 0x6C, 0x7B, 0xAD, 0xA4, 0xD1, 0xB5, 0x74, 0xAD, 0x13, 0xAD, 0x12, 0xAD, 0x33, 0xAD, 0x12, 0x8C, 0x4F, 0x9C, 0xD1, 0xAD, 0x33, 0xA4, 0xF2, 0xA4, 0xD1, 0xA4, 0xF1, 0x9C, 0xB1, 0x9C, 0xB1, 0xA4, 0xF1, 0x9C, 0xD1, 0x94, 0x90, 0xAD, 0x13, 0x9C, 0xB1, 0x9C, 0xD1, 0xA5, 0x12, 0xAD, 0x33, 0xAD, 0x33, 0xAD, 0x12, 0xAD, 0x33, 0xAD, 0x33, 0xAD, 0x12, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0x53, 0xA4, 0xF1, 0xAD, 0x32, 0xAD, 0x12, 0xAD, 0x12, 0xAD, 0x12, 0xA4, 0xD1, 0x9C, 0xD1, 0x94, 0x90, 0x94, 0x90, 0x8C, 0x4F, 0x8C, 0x4F, 0x83, 0xEE, 0x94, 0x4F, 0x83, 0xEE, 0x8C, 0x4F, 0x8C, 0x6F, 0x8C, 0x2E, 0x9C, 0xB0, 0x84, 0x0E, 0xA4, 0xF2, 0x8C, 0x2F, 0xA5, 0x12, 0xA4, 0xF1, 0xB5, 0x94, 0xB5, 0x73, 0xAD, 0x32, 0xB5, 0x32, 0xB5, 0x32, 0xB5, 0x52, 0xB5, 0x52, 0x8C, 0x2E, 0x94, 0x4F, 0x9C, 0xB0, 0x94, 0x6F, 0x9C, 0xD0, 0xB5, 0x73, 0xA5, 0x12, 0xB5, 0x53, 0xBD, 0xD5, 0xBD, 0xB4, 0xA4, 0xF1, 0xBD, 0x73, 0xCE, 0x15, 0xD6, 0x35, 0xC5, 0xD4, 0x94, 0x4E, 0xA4, 0xD0, 0xAD, 0x52, 0x7B, 0x8C, 0xB5, 0x52, 0x6B, 0x4B, 0x73, 0x6B, 0xA4, 0xF1, 0xA5, 0x11, 0xA5, 0x11, 0x9C, 0xB0, 0xAD, 0x52, 0xBD, 0xB4, 0xBD, 0xB4, 0xBD, 0xF5, 0x8C, 0x4F, 0xAD, 0x32, 0xC5, 0xF5, 0xC5, 0xF5, 0x94, 0x70, 0x6B, 0x4B, 0xBD, 0xD5, 0xBD, 0xB4, 0xAD, 0x32, 0x94, 0x6F, 0xAD, 0x11, 0xC5, 0xD5, 0xBD, 0xD4, 0xB5, 0x93, 0xBD, 0xD4, 0xC5, 0xF5, 0xCE, 0x15, 0xCE, 0x15, 0xBD, 0xD4, 0xC6, 0x15, 0xC6, 0x15, 0xD6, 0x56, 0xC6, 0x15, 0xB5, 0x94, 0x9C, 0xB1, 0x94, 0x70, 0xCE, 0x36, 0xCE, 0x57, 0xC6, 0x15, 0xBD, 0xD5, 0xBD, 0xF5, 0xB5, 0x94, 0xB5, 0x94, 0x94, 0x6F, 0xB5, 0x73, 0xAD, 0x12, 0xB5, 0x94, 0xB5, 0x94, 0xBD, 0x94, 0xBD, 0x93, 0xC5, 0xB3, 0xB5, 0x72, 0xC5, 0xD3, 0xCE, 0x14, 0xCE, 0x14, 0xC5, 0xB3, 0x9C, 0x8F, 0xDE, 0x55, 0xD6, 0x12, 0xBD, 0x50, 0xBD, 0x50, 0xA5, 0x35, 0xBD, 0xF8, 0xA5, 0x35, 0x9C, 0xF4, 0x8C, 0x72, 0x73, 0x6C, 0x7B, 0x8B, 0x83, 0xAC, 0x83, 0xCC, 0x8B, 0xCC, 0x8B, 0xEC, 0x94, 0x0C, 0x94, 0x4D, 0x94, 0x4D, 0x94, 0x2D, 0x94, 0x2D, 0xA4, 0x8E, 0xA4, 0x8F, 0xA4, 0x6E, 0x9C, 0x4D, 0x94, 0x2D, 0x8B, 0xEC, 0x94, 0x0C, 0x94, 0x0C, 0x94, 0x2D, 0xA4, 0x8F, 0xB5, 0x10, 0xAC, 0xEF, 0xAD, 0x10, 0xAD, 0x31, 0x9C, 0xAF, 0xA4, 0xF1, 0xAD, 0x52, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0x93, 0xAD, 0x52, 0xB5, 0x73, 0xC5, 0xF5, 0xBD, 0xB4, 0xAD, 0x32, 0xBD, 0xB4, 0xC6, 0x16, 0xC5, 0xF5, 0xCE, 0x57, 0xCE, 0x77, 0xC6, 0x16, 0xC5, 0xF5, 0xB5, 0x93, 0xA4, 0xCF, 0xAC, 0xEF, 0xCE, 0x13, 0xCE, 0x34, 0xAC, 0xF1, 0x5A, 0xA8, 0x73, 0x6A, 0xCE, 0x14, 0xD6, 0x13, 0xCD, 0xF3, 0xCD, 0xF2, 0xD6, 0x13, 0xD6, 0x14, 0xD6, 0x34, 0xC5, 0x93, 0x4A, 0x07, 0x31, 0xA6, 0x42, 0x07, 0x42, 0x27, 0x42, 0x28, 0x52, 0x89, 0x5A, 0xCB, 0x63, 0x2C, 0x83, 0xF0, 0xA5, 0x14, 0xAD, 0x55, 0x9C, 0xB3, 0xAD, 0x76, 0xAD, 0x55, 0xA5, 0x35, 0x94, 0x92, 0x42, 0x08, 0x73, 0x6D, 0xC5, 0xD6, 0x94, 0x2F, 0x94, 0x2E, 0xA4, 0x8F, 0x94, 0x2E, 0xA4, 0xF0, 0xBD, 0xB4, 0xB5, 0x52, 0x8C, 0x0E, 0x29, 0x24, 0x29, 0x45, 0x29, 0x65, 0x41, 0xE7, 0x4A, 0x49, 0x7B, 0xCF, 0xAD, 0x34, 0xB5, 0x96, 0xBD, 0xB6, 0x83, 0xEF, 0x73, 0x4D, 0x39, 0x86, 0x62, 0xCB, 0xA4, 0x91, 0xAC, 0xD2, 0x9C, 0x50, 0x7B, 0x6C, 0x7B, 0x6D, 0x94, 0x50, 0xC5, 0xD6, 0xCD, 0xF7, 0x9C, 0xB2, 0xAC, 0xF1, 0xB5, 0x31, 0x7B, 0x6B, 0x84, 0x0F, 0x84, 0x50, 0x84, 0x2F, 0x7B, 0xEF, 0x73, 0xAE, 0x7B, 0xCE, 0x94, 0x90, 0xAD, 0x33, 0xC6, 0x16, 0xB5, 0xB4, 0x9C, 0xF2, 0x94, 0x91, 0x73, 0xAE, 0x6B, 0x6D, 0x6B, 0x6C, 0x84, 0x0F, 0xA5, 0x13, 0xC6, 0x16, 0xC5, 0xF6, 0xBD, 0xD5, 0xA5, 0x32, 0x9C, 0x6E, 0xBD, 0x51, 0xA4, 0x6E, 0x94, 0x2E, 0x83, 0xED, 0x7B, 0xAD, 0xB5, 0xB6, 0xB5, 0xB7, 0x94, 0x92, 0x63, 0x2C, 0x94, 0x71, 0x7B, 0x8C, 0x7B, 0x8C, 0x7B, 0xCC, 0x7B, 0xAC, 0x83, 0xED, 0x9C, 0x6F, 0x8B, 0xED, 0x7B, 0x8B, 0x7B, 0x8C, 0x7B, 0x6B, 0x73, 0x0A, 0x83, 0x4B, 0x83, 0x4B, 0x8B, 0xAD, 0xBD, 0x94, 0xA5, 0x12, 0xC6, 0x16, 0xB5, 0xB5, 0xAD, 0x74, 0xA5, 0x33, 0xAD, 0x74, 0xB5, 0xB5, 0xB5, 0x94, 0xAD, 0x74, 0xAD, 0x73, 0xB5, 0xB4, 0xB5, 0x94, 0xB5, 0x94, 0xB5, 0x74, 0x84, 0x0E, 0x73, 0x8C, 0x83, 0xED, 0xC6, 0x16, 0xCE, 0x36, 0xC5, 0xD5, 0xC5, 0xF5, 0xBD, 0xD5, 0x8C, 0x2F, 0x8C, 0x2F, 0x94, 0xB0, 0x94, 0x90, 0x7B, 0xED, 0x9C, 0xD1, 0x94, 0x90, 0x94, 0x4F, 0x9C, 0xD1, 0xA4, 0xF2, 0xA5, 0x12, 0xB5, 0x94, 0xAD, 0x53, 0x8C, 0x4F, 0x94, 0x90, 0xA4, 0xD1, 0xB5, 0x74, 0xB5, 0x53, 0xB5, 0x53, 0xA4, 0xD1, 0x9C, 0x90, 0x8C, 0x4F, 0x84, 0x0E, 0x94, 0x4F, 0x9C, 0x90, 0x7B, 0xCD, 0x8C, 0x2F, 0xAD, 0x32, 0xB5, 0x32, 0xBD, 0x94, 0xBD, 0xB4, 0x9C, 0xB0, 0x9C, 0x70, 0x9C, 0xB0, 0x9C, 0xB0, 0xA4, 0xD1, 0xA4, 0xF1, 0xB5, 0x32, 0xAD, 0x12, 0xA4, 0xD1, 0xAD, 0x12, 0xA4, 0xD0, 0x9C, 0xB0, 0x9C, 0xB0, 0x9C, 0x90, 0xAD, 0x32, 0xB5, 0x73, 0xB5, 0x32, 0xAD, 0x12, 0xAD, 0x12, 0xB5, 0x53, 0xC5, 0xD5, 0xC5, 0xB4, 0xBD, 0x94, 0x94, 0x6F, 0xA5, 0x12, 0xAD, 0x32, 0xAD, 0x12, 0xA4, 0xF1, 0x9C, 0x90, 0xA4, 0xB1, 0xA4, 0xD1, 0xA4, 0xF1, 0xAC, 0xF2, 0xA4, 0xD1, 0xAC, 0xF1, 0xA4, 0xD0, 0xA4, 0xB0, 0xAC, 0xD0, 0xAD, 0x12, 0xB5, 0x73, 0xAD, 0x12, 0x94, 0x8F, 0xA4, 0xF1, 0x73, 0x4C, 0x73, 0x6C, 0x8C, 0x4E, 0xA5, 0x11, 0xAD, 0x31, 0xAD, 0x11, 0xB5, 0x53, 0xB5, 0x93, 0xBD, 0xB4, 0xC5, 0xF5, 0xA5, 0x11, 0xAD, 0x32, 0xC6, 0x15, 0xC5, 0xF5, 0xAD, 0x32, 0xA5, 0x12, 0xC5, 0xD5, 0xC6, 0x15, 0xAD, 0x52, 0xA4, 0xD0, 0xB5, 0x73, 0xC5, 0xF5, 0xD6, 0x97, 0xCE, 0x36, 0xCE, 0x35, 0xCE, 0x56, 0xCE, 0x56, 0xD6, 0x76, 0xCE, 0x35, 0xCE, 0x36, 0xC5, 0xF4, 0xCE, 0x15, 0xC5, 0xF5, 0xC5, 0xF5, 0xC5, 0xF5, 0x9C, 0xB1, 0xA4, 0xF1, 0xDE, 0xD8, 0xD6, 0x77, 0xCE, 0x36, 0xCE, 0x56, 0xCE, 0x36, 0xBD, 0xD4, 0x9C, 0x8F, 0xB5, 0x73, 0x9C, 0x90, 0xB5, 0x53, 0xB5, 0x94, 0xC5, 0xD4, 0xC5, 0xD4, 0xC5, 0xD3, 0xBD, 0x72, 0xC5, 0xB3, 0xCE, 0x14, 0xD6, 0x35, 0xCE, 0x14, 0x9C, 0x8F, 0xDE, 0x35, 0xD5, 0xF2, 0xBD, 0x50, 0xBD, 0x30, 0xA5, 0x35, 0xB5, 0xB7, 0x9D, 0x14, 0x94, 0xF3, 0x8C, 0x71, 0x62, 0xEA, 0x73, 0x4B, 0x6B, 0x2A, 0x6B, 0x2A, 0x83, 0xCC, 0x94, 0x2D, 0x83, 0xCB, 0x8C, 0x0D, 0x9C, 0xAF, 0xA4, 0xF0, 0x9C, 0x6E, 0x9C, 0x6E, 0x9C, 0x6E, 0xA4, 0xAF, 0xB5, 0x30, 0xB5, 0x10, 0xAC, 0xEF, 0xAC, 0xF0, 0xA4, 0x8E, 0xB5, 0x10, 0xB5, 0x10, 0x9C, 0x2D, 0xAC, 0xCF, 0xB5, 0x10, 0xB5, 0x31, 0xA4, 0xCF, 0xA4, 0xAF, 0xA4, 0x8F, 0xA4, 0xAF, 0xA4, 0x8E, 0x9C, 0x8E, 0x9C, 0x8E, 0x9C, 0x6E, 0xA4, 0x8E, 0xA4, 0xAF, 0xAC, 0xCF, 0xA4, 0xCF, 0xA4, 0xCF, 0xA4, 0xCF, 0x9C, 0x8E, 0x9C, 0x8E, 0x9C, 0x8E, 0xA4, 0xAF, 0xA4, 0xCF, 0xAC, 0xCF, 0xAD, 0x0F, 0xAC, 0xEF, 0xB5, 0x51, 0xAC, 0xEF, 0x83, 0xCB, 0x8B, 0xEC, 0xBD, 0x71, 0xBD, 0x71, 0xC5, 0x91, 0xC5, 0xB1, 0xC5, 0x91, 0xB5, 0x0F, 0xAD, 0x0F, 0xCD, 0xF3, 0x83, 0xCC, 0x39, 0xC6, 0x42, 0x27, 0x42, 0x07, 0x42, 0x28, 0x39, 0xC6, 0x4A, 0x28, 0x52, 0x8A, 0x63, 0x0C, 0x84, 0x31, 0x94, 0x92, 0x9C, 0xF4, 0xA5, 0x14, 0xB5, 0x96, 0xA5, 0x15, 0x94, 0x92, 0x63, 0x0C, 0x29, 0x45, 0x8C, 0x30, 0xC5, 0xD5, 0xB5, 0x11, 0xBD, 0x52, 0xB5, 0x32, 0xAD, 0x11, 0xBD, 0x73, 0xBD, 0x72, 0xBD, 0x73, 0x83, 0xCD, 0x52, 0x68, 0x29, 0x44, 0x29, 0x65, 0x41, 0xE7, 0x4A, 0x28, 0x62, 0xEB, 0x73, 0x4C, 0x52, 0x69, 0x39, 0xC7, 0x29, 0x45, 0x18, 0xC3, 0x4A, 0x07, 0x62, 0xCB, 0x7B, 0x4C, 0xA4, 0x71, 0x8B, 0xCF, 0xB5, 0x55, 0xC5, 0xD6, 0xAD, 0x13, 0xDE, 0x9A, 0xBD, 0x75, 0xA4, 0xB1, 0xB5, 0x10, 0x94, 0x2E, 0x84, 0x0F, 0x94, 0x91, 0x8C, 0x71, 0x84, 0x30, 0x7B, 0xEF, 0x84, 0x0F, 0x94, 0x90, 0x9C, 0xF2, 0xA5, 0x33, 0x9C, 0xD1, 0x8C, 0x6F, 0x73, 0xCD, 0x73, 0xAD, 0x73, 0xCE, 0x7B, 0xCE, 0x84, 0x0F, 0x9C, 0xF2, 0xC6, 0x16, 0xB5, 0xD5, 0xA5, 0x32, 0xAD, 0x53, 0x94, 0x4D, 0xB5, 0x10, 0x8B, 0xCB, 0xA4, 0xD0, 0xA4, 0xF0, 0x8C, 0x0E, 0xBD, 0xF7, 0xB5, 0x76, 0x9C, 0xD3, 0x73, 0xAE, 0x83, 0xEE, 0x8C, 0x2E, 0x83, 0xCD, 0x73, 0x6B, 0x84, 0x0D, 0x8C, 0x0D, 0xA4, 0xD0, 0x7B, 0x6B, 0x8B, 0xED, 0x8C, 0x0D, 0x94, 0x0E, 0x83, 0x6B, 0x8B, 0x6C, 0x8B, 0x8C, 0x94, 0x0E, 0xBD, 0x94, 0xAD, 0x53, 0xC6, 0x36, 0xBD, 0xB5, 0xAD, 0x74, 0xAD, 0x53, 0xB5, 0x74, 0xBD, 0xD5, 0xB5, 0x74, 0x8C, 0x4F, 0x9C, 0xF1, 0xA5, 0x12, 0xB5, 0x94, 0xBD, 0xF5, 0xBD, 0xB5, 0x94, 0x90, 0x8C, 0x4F, 0x62, 0xE9, 0xB5, 0x73, 0xCE, 0x77, 0xCE, 0x77, 0xCE, 0x36, 0xC6, 0x16, 0x8C, 0x2F, 0x94, 0x70, 0x9C, 0xD1, 0xA5, 0x32, 0x94, 0x90, 0xA5, 0x12, 0xA4, 0xF1, 0xA5, 0x12, 0xAD, 0x73, 0xAD, 0x74, 0xAD, 0x53, 0xB5, 0x74, 0xAD, 0x53, 0x8C, 0x2F, 0x9C, 0xB1, 0xA4, 0xD1, 0xA4, 0xF1, 0xAD, 0x32, 0x94, 0x6F, 0x94, 0x4F, 0xA4, 0xF1, 0x94, 0x6F, 0x84, 0x0E, 0x8C, 0x4F, 0x83, 0xED, 0x7B, 0xAC, 0x8C, 0x2E, 0xBD, 0x93, 0xC5, 0xF5, 0xDE, 0xD8, 0xDE, 0xB7, 0xB5, 0x53, 0x8C, 0x0E, 0x8C, 0x0D, 0x83, 0xED, 0x7B, 0xAC, 0x83, 0xAC, 0x83, 0xCC, 0x94, 0x4F, 0xAC, 0xF2, 0xCE, 0x16, 0xD6, 0x98, 0xBD, 0xB4, 0x8C, 0x0E, 0x8C, 0x0E, 0xA4, 0xB0, 0xBD, 0x52, 0xBD, 0x73, 0xBD, 0x73, 0xAC, 0xD0, 0x9C, 0x6F, 0xA4, 0xD0, 0x9C, 0x8F, 0x94, 0x4F, 0x9C, 0x6F, 0xA4, 0xB0, 0x9C, 0x6F, 0x9C, 0xB0, 0xA4, 0xB1, 0x94, 0x4F, 0x8C, 0x0E, 0x94, 0x4F, 0x94, 0x2F, 0x94, 0x4F, 0x9C, 0x90, 0xA4, 0xD1, 0xAC, 0xF1, 0xAC, 0xF1, 0xB5, 0x32, 0xBD, 0x73, 0xBD, 0x93, 0xC5, 0xB4, 0xC5, 0xD4, 0xC5, 0xF5, 0xC5, 0xF5, 0xCE, 0x16, 0xBD, 0x73, 0xAD, 0x12, 0xB5, 0x32, 0xBD, 0x73, 0xB5, 0x52, 0xB5, 0x52, 0xA4, 0xD1, 0xA4, 0xD0, 0xA4, 0xB0, 0x9C, 0xB0, 0x9C, 0xB0, 0x9C, 0x8F, 0x9C, 0x8F, 0xA4, 0xF1, 0xAC, 0xF1, 0xAD, 0x11, 0x9C, 0xB0, 0xB5, 0x53, 0xAD, 0x11, 0xA4, 0xF1, 0xB5, 0x52, 0xAD, 0x32, 0xAD, 0x11, 0xAD, 0x11, 0xAD, 0x32, 0xB5, 0x52, 0xB5, 0x73, 0xAD, 0x32, 0x9C, 0x8F, 0x94, 0x6F, 0xAD, 0x32, 0xBD, 0xD5, 0xC5, 0xD5, 0xB5, 0x73, 0x9C, 0xB0, 0xCE, 0x56, 0xCE, 0x56, 0xCE, 0x56, 0xD6, 0x56, 0xC5, 0xF5, 0xBD, 0x93, 0x9C, 0x90, 0xB5, 0x73, 0xC5, 0xD5, 0xCE, 0x15, 0xC5, 0xF5, 0xCE, 0x15, 0xCE, 0x35, 0xCE, 0x14, 0xC5, 0xF4, 0xD6, 0x55, 0xD6, 0x55, 0xD6, 0x55, 0xC5, 0xB3, 0x94, 0x4E, 0xDE, 0x35, 0xBD, 0x50, 0xA4, 0xAE, 0x94, 0x2D, 0xA5, 0x35, 0xB5, 0xB7, 0x9D, 0x14, 0x9C, 0xF3, 0x8C, 0x92, 0x7B, 0xEE, 0x84, 0x2F, 0x84, 0x0E, 0x7B, 0xED, 0x9C, 0xD0, 0xAD, 0x52, 0xA5, 0x11, 0x9C, 0xF0, 0xA5, 0x31, 0xB5, 0x93, 0xA4, 0xF1, 0xAD, 0x11, 0xAD, 0x31, 0xBD, 0xB3, 0xAC, 0xCF, 0xAC, 0xCF, 0xA4, 0xCF, 0x8C, 0x2D, 0x9C, 0x8F, 0xBD, 0x93, 0xAD, 0x31, 0x63, 0x0A, 0xAD, 0x32, 0x94, 0x6E, 0xAD, 0x32, 0xCE, 0x36, 0xB5, 0x73, 0xBD, 0x93, 0xC5, 0xF4, 0xA4, 0xF0, 0xAD, 0x31, 0x94, 0x6E, 0x94, 0x6F, 0x9C, 0x8F, 0x94, 0x6F, 0xA4, 0xAF, 0xB5, 0x51, 0xAC, 0xF0, 0xB5, 0x10, 0x94, 0x0C, 0x83, 0xCB, 0x94, 0x2D, 0x94, 0x2D, 0x94, 0x0C, 0x9C, 0x6E, 0xA4, 0xCE, 0xAC, 0xEF, 0xAC, 0xCF, 0xA4, 0xCF, 0xB5, 0x10, 0xAC, 0xEF, 0xAC, 0xEF, 0xB4, 0xEF, 0xAC, 0xCE, 0xAC, 0xCE, 0xAC, 0xCF, 0xAC, 0xEF, 0xAC, 0xCF, 0xAC, 0xCF, 0xAC, 0xF0, 0x7B, 0x8B, 0x39, 0xA5, 0x39, 0xC6, 0x41, 0xE6, 0x42, 0x07, 0x4A, 0x48, 0x4A, 0x48, 0x63, 0x2C, 0x73, 0x8E, 0x94, 0x92, 0xA5, 0x14, 0x9C, 0xD3, 0xB5, 0x76, 0xAD, 0x55, 0x94, 0xB3, 0x73, 0x6E, 0x29, 0x25, 0x39, 0xE7, 0xA4, 0xF2, 0xBD, 0x73, 0xAC, 0xF0, 0xAC, 0xD0, 0xAC, 0xF1, 0xAD, 0x11, 0xAC, 0xF1, 0xB5, 0x32, 0xBD, 0x93, 0xB5, 0x32, 0x73, 0x4B, 0x29, 0x44, 0x39, 0xA6, 0x4A, 0x48, 0x29, 0x45, 0x31, 0x85, 0x31, 0x65, 0x39, 0xA6, 0x4A, 0x49, 0x39, 0xC7, 0x31, 0x45, 0x52, 0x28, 0x6A, 0xAA, 0x94, 0x0F, 0x9C, 0x51, 0xA4, 0xD3, 0x94, 0x51, 0xB5, 0x34, 0xA4, 0xD3, 0xCE, 0x18, 0xBD, 0x74, 0xB5, 0x31, 0xB5, 0x32, 0x84, 0x0F, 0xB5, 0x95, 0xAD, 0x94, 0xAD, 0x74, 0x94, 0x91, 0xA5, 0x13, 0xAD, 0x74, 0xB5, 0x94, 0xAD, 0x54, 0x73, 0xAD, 0x6B, 0x4C, 0x5A, 0xEA, 0x73, 0xAD, 0x7B, 0xEF, 0x8C, 0x50, 0x8C, 0x70, 0xB5, 0xB5, 0xC6, 0x37, 0xC6, 0x16, 0x83, 0xEE, 0x83, 0xEE, 0x9C, 0x6E, 0xB5, 0x10, 0x7B, 0x8A, 0xA4, 0xD0, 0xAC, 0xF1, 0xA5, 0x12, 0xC6, 0x18, 0xB5, 0x76, 0x9C, 0xF4, 0x73, 0x8D, 0x83, 0xAD, 0x9C, 0x90, 0x83, 0xED, 0x73, 0x4B, 0x8C, 0x2E, 0xA4, 0xB0, 0xAD, 0x11, 0xA4, 0xB0, 0xA4, 0xB0, 0x9C, 0x6F, 0xA4, 0x8F, 0x83, 0x6B, 0x93, 0xAC, 0x93, 0xAC, 0x94, 0x0E, 0xBD, 0x94, 0xB5, 0x94, 0xC6, 0x36, 0xB5, 0xB4, 0xB5, 0x74, 0xAD, 0x53, 0xB5, 0x94, 0xAD, 0x73, 0xAD, 0x32, 0x9C, 0xB1, 0xA5, 0x32, 0xB5, 0x94, 0xB5, 0x94, 0xBD, 0xD5, 0xBD, 0xD5, 0xBD, 0xD5, 0xBD, 0xF5, 0x9C, 0xD1, 0x94, 0x6F, 0xB5, 0x94, 0xCE, 0x36, 0xC6, 0x16, 0xC5, 0xF5, 0x84, 0x2E, 0x9C, 0xD1, 0xA5, 0x12, 0xA4, 0xF2, 0x9C, 0xB1, 0xA5, 0x12, 0xA5, 0x32, 0xA5, 0x33, 0xBD, 0xF5, 0xAD, 0x74, 0xA5, 0x33, 0xB5, 0x94, 0xAD, 0x73, 0x83, 0xEE, 0x9C, 0xD1, 0xA4, 0xF1, 0x9C, 0xD1, 0xA4, 0xF2, 0x84, 0x0E, 0x84, 0x0E, 0xA5, 0x12, 0x9C, 0xB0, 0x94, 0x4F, 0x94, 0x90, 0x8C, 0x2E, 0x94, 0x4F, 0x9C, 0x90, 0xBD, 0x93, 0xCE, 0x36, 0xDE, 0xB7, 0xD6, 0x76, 0xCE, 0x15, 0xA4, 0xD1, 0x94, 0x6F, 0x94, 0x4E, 0x7B, 0xAC, 0x7B, 0x8C, 0x7B, 0xAD, 0x94, 0x6F, 0xAD, 0x12, 0xB5, 0x53, 0xC5, 0xD5, 0xAD, 0x32, 0x83, 0xEE, 0x94, 0x4F, 0xB5, 0x12, 0xBD, 0x52, 0xC5, 0x93, 0xBD, 0x73, 0x9C, 0x2E, 0xA4, 0x6F, 0xA4, 0xB0, 0x94, 0x4F, 0x9C, 0x90, 0xAD, 0x32, 0xAD, 0x32, 0xAD, 0x12, 0x9C, 0xB0, 0x9C, 0x90, 0x94, 0x6F, 0xA4, 0xF1, 0x9C, 0xD1, 0x94, 0x6F, 0x8C, 0x2F, 0x94, 0x6F, 0x8C, 0x2E, 0xA4, 0xD1, 0x8C, 0x2E, 0x94, 0x70, 0x9C, 0xB0, 0x8C, 0x2E, 0x7B, 0xAC, 0x83, 0xCD, 0x83, 0xCD, 0x83, 0xCD, 0xB5, 0x53, 0x8C, 0x2E, 0x8C, 0x2E, 0x94, 0x6F, 0x9C, 0x70, 0x9C, 0x90, 0x9C, 0x90, 0x94, 0x2E, 0x94, 0x4F, 0x9C, 0x8F, 0x94, 0x6F, 0x9C, 0x6F, 0x9C, 0xB0, 0xA4, 0xD1, 0xAD, 0x32, 0xAD, 0x11, 0xAC, 0xF1, 0xAC, 0xF1, 0xB5, 0x32, 0xB5, 0x32, 0xB5, 0x53, 0xBD, 0x73, 0xB5, 0x53, 0xB5, 0x32, 0xBD, 0x73, 0xB5, 0x32, 0xAC, 0xF2, 0xAC, 0xD1, 0xA4, 0xD1, 0xAC, 0xF1, 0xAC, 0xF1, 0xA4, 0xF1, 0xAC, 0xF1, 0xAC, 0xF1, 0xAC, 0xF2, 0xAD, 0x12, 0xAC, 0xF1, 0xA4, 0xF1, 0xA4, 0xB0, 0x9C, 0xB0, 0x9C, 0x90, 0x9C, 0xB0, 0xAD, 0x12, 0xB5, 0x53, 0xA4, 0xD1, 0xA4, 0xF1, 0xA4, 0xF1, 0xA4, 0xF1, 0xAC, 0xF0, 0xA4, 0xD0, 0xA4, 0xD0, 0xAC, 0xF0, 0xA4, 0xD0, 0xA4, 0xD0, 0x94, 0x2D, 0xA4, 0xB0, 0xCD, 0xB3, 0xC5, 0x91, 0xBD, 0x72, 0x9C, 0x6E, 0xA5, 0x35, 0xAD, 0x96, 0x9D, 0x14, 0x9C, 0xF4, 0x8C, 0x92, 0x84, 0x0F, 0x8C, 0x90, 0x8C, 0x70, 0x8C, 0x4F, 0xA5, 0x11, 0xB5, 0x73, 0xAD, 0x52, 0xA5, 0x11, 0xAD, 0x52, 0xBD, 0xB4, 0xB5, 0x73, 0xAD, 0x52, 0xA4, 0xF1, 0xC5, 0xF4, 0xA4, 0xAF, 0xAC, 0xEF, 0xBD, 0xD3, 0xA5, 0x11, 0xA5, 0x12, 0xB5, 0x93, 0xAD, 0x52, 0xAD, 0x53, 0xAD, 0x53, 0x9C, 0xD1, 0xBD, 0xD5, 0xBD, 0xB4, 0xC6, 0x15, 0xB5, 0x93, 0xB5, 0x94, 0xB5, 0x73, 0xB5, 0x93, 0xB5, 0x93, 0xAD, 0x73, 0xBD, 0xD5, 0xBD, 0xB4, 0xA4, 0xF1, 0xB5, 0x93, 0xAD, 0x11, 0xB5, 0x10, 0x9C, 0x4E, 0x9C, 0xB0, 0xAD, 0x32, 0xAD, 0x32, 0xA4, 0xF1, 0xAD, 0x52, 0xB5, 0x72, 0xBD, 0xB4, 0xBD, 0x93, 0xB5, 0x52, 0xB5, 0x72, 0xB5, 0x52, 0x94, 0x6F, 0xB5, 0x52, 0xB5, 0x32, 0xA4, 0xF0, 0xBD, 0x73, 0xAC, 0xF0, 0x9C, 0x8F, 0x9C, 0x8F, 0xA4, 0xCF, 0x94, 0x2E, 0x52, 0x88, 0x31, 0xA5, 0x39, 0xE6, 0x41, 0xE6, 0x42, 0x07, 0x39, 0xC7, 0x4A, 0x69, 0x6B, 0x4D, 0x84, 0x10, 0x9C, 0xD3, 0x9C, 0xF3, 0xAD, 0x76, 0xB5, 0x97, 0xB5, 0x96, 0xA5, 0x35, 0x7B, 0xAF, 0x7B, 0xEE, 0xA4, 0xF1, 0xAC, 0xF1, 0xB4, 0xF0, 0xB4, 0xF0, 0xB4, 0xF0, 0xA4, 0xAF, 0xA4, 0xAF, 0xB5, 0x11, 0xAC, 0xF0, 0xAC, 0xCF, 0xAC, 0xD0, 0x8B, 0xED, 0x7B, 0xAC, 0x52, 0x48, 0x31, 0x85, 0x39, 0xC6, 0x39, 0xE7, 0x39, 0xC6, 0x6B, 0x0C, 0x6B, 0x2C, 0x5A, 0xAA, 0x41, 0xA6, 0x62, 0x8A, 0x83, 0x4C, 0x6A, 0xAA, 0x9C, 0x92, 0x8B, 0xF0, 0xC5, 0xD7, 0xA4, 0xD3, 0xAD, 0x34, 0xC5, 0xD6, 0xD5, 0xF5, 0xCD, 0x93, 0xAC, 0xD0, 0x94, 0x6F, 0x9C, 0xB0, 0x9C, 0xD1, 0x94, 0x70, 0x9C, 0xD1, 0xB5, 0x94, 0xBD, 0xD5, 0xB5, 0xB4, 0x94, 0xB0, 0x84, 0x0E, 0x73, 0xAE, 0x7B, 0xCE, 0x7C, 0x0F, 0x9C, 0xF2, 0xAD, 0x95, 0xDE, 0xDA, 0xCE, 0x79, 0xC6, 0x17, 0xB5, 0x95, 0xBD, 0x95, 0xB5, 0x32, 0xB5, 0x10, 0xA4, 0xAF, 0xBD, 0x93, 0xBD, 0x93, 0xBD, 0xB4, 0xC6, 0x18, 0xAD, 0x56, 0xA4, 0xF3, 0xA4, 0xF2, 0x9C, 0x90, 0x94, 0x2E, 0x7B, 0xAC, 0x7B, 0xAC, 0x94, 0x4F, 0xAD, 0x11, 0xB5, 0x72, 0xBD, 0x72, 0xAC, 0xD0, 0xAC, 0xD0, 0xA4, 0x8F, 0x7B, 0x0A, 0x83, 0x6B, 0x8B, 0x6B, 0x9C, 0x4F, 0xB5, 0x73, 0xBD, 0xF5, 0xC6, 0x36, 0xBD, 0xD5, 0xBD, 0xB5, 0xB5, 0x94, 0xBD, 0xD5, 0xB5, 0x94, 0xA4, 0xF2, 0xA5, 0x12, 0xA5, 0x32, 0xA5, 0x32, 0xAD, 0x53, 0xBD, 0xB5, 0xBD, 0xF5, 0xB5, 0xB4, 0xB5, 0xB4, 0xBD, 0xF5, 0xBD, 0xD5, 0xC6, 0x16, 0xC6, 0x36, 0xC6, 0x16, 0xBD, 0xD5, 0x84, 0x2E, 0xA5, 0x12, 0xAD, 0x33, 0xA4, 0xF2, 0x9C, 0xD1, 0x9C, 0xF1, 0x94, 0x90, 0x9C, 0xB1, 0xAD, 0x73, 0xAD, 0x53, 0xB5, 0xB5, 0xBD, 0xF6, 0xB5, 0xB5, 0x8C, 0x6F, 0xA5, 0x12, 0x9C, 0xD1, 0xAD, 0x12, 0xBD, 0xB5, 0xB5, 0x74, 0xA5, 0x12, 0xA4, 0xF1, 0x9C, 0xD1, 0x9C, 0xD1, 0x9C, 0xB0, 0x9C, 0x90, 0x9C, 0xB1, 0x9C, 0xB1, 0xBD, 0x73, 0xCE, 0x35, 0xC5, 0xF4, 0xCE, 0x15, 0xC5, 0xF4, 0xA4, 0xF0, 0xA4, 0xD0, 0xAD, 0x11, 0x8B, 0xED, 0xA4, 0xD1, 0x94, 0x6F, 0x9C, 0xB0, 0x9C, 0xB1, 0x94, 0x70, 0xB5, 0x74, 0x94, 0x90, 0x8C, 0x2F, 0xA4, 0xD1, 0xAC, 0xF2, 0xBD, 0x53, 0xCD, 0xB4, 0xC5, 0x73, 0x83, 0x8C, 0xA4, 0x6F, 0xA4, 0xF1, 0x9C, 0xB0, 0x94, 0x6F, 0xB5, 0x53, 0xB5, 0x73, 0xAD, 0x53, 0xA4, 0xF2, 0xA4, 0xD1, 0x9C, 0xB1, 0xB5, 0x73, 0xAD, 0x53, 0xA5, 0x12, 0xA4, 0xF1, 0x94, 0x90, 0x9C, 0x90, 0xA4, 0xF2, 0xA4, 0xF2, 0xAD, 0x53, 0xAD, 0x53, 0xA5, 0x12, 0x9C, 0xB1, 0x7B, 0xCD, 0x94, 0x70, 0x8C, 0x4F, 0xAD, 0x33, 0x83, 0xED, 0x9C, 0x90, 0xA4, 0xF1, 0x8C, 0x2E, 0x8B, 0xED, 0x9C, 0x6F, 0x94, 0x2E, 0x94, 0x4E, 0x83, 0xCD, 0x83, 0xED, 0x8B, 0xEE, 0xA4, 0xD1, 0x94, 0x4F, 0x94, 0x8F, 0x9C, 0x90, 0x94, 0x2E, 0x8B, 0xED, 0x8C, 0x0E, 0x9C, 0x90, 0xA4, 0xD1, 0x9C, 0xB0, 0xAD, 0x11, 0x9C, 0xB0, 0xA4, 0xD1, 0x9C, 0xB0, 0x8B, 0xED, 0x7B, 0x8C, 0x8C, 0x0E, 0xB5, 0x53, 0xB5, 0x53, 0x9C, 0x90, 0xA4, 0xD1, 0xA4, 0xB0, 0xAC, 0xF1, 0xA4, 0xF1, 0x9C, 0x90, 0xA4, 0xD1, 0xB5, 0x32, 0xB5, 0x32, 0xBD, 0x53, 0xB5, 0x32, 0xB5, 0x53, 0xB5, 0x53, 0xBD, 0x94, 0xBD, 0x94, 0xBD, 0x73, 0xC5, 0xB5, 0xC5, 0xB4, 0xCD, 0xD5, 0xBD, 0x94, 0xBD, 0x73, 0xBD, 0x93, 0xC5, 0x94, 0xC5, 0x94, 0xC5, 0xB4, 0xC5, 0x93, 0xBD, 0x72, 0xB5, 0x52, 0xB5, 0x32, 0xA5, 0x35, 0xB5, 0xB7, 0x9D, 0x14, 0x9C, 0xF3, 0x8C, 0x92, 0x84, 0x0F, 0x8C, 0x91, 0x94, 0xB1, 0x8C, 0x4F, 0xA5, 0x12, 0xB5, 0x93, 0xAD, 0x31, 0xAD, 0x31, 0x9C, 0xF0, 0xBD, 0xD4, 0xB5, 0x94, 0xBD, 0xD4, 0xAD, 0x32, 0xC6, 0x14, 0xA4, 0xAF, 0xA4, 0xAE, 0xBD, 0xB3, 0xAD, 0x52, 0xA5, 0x32, 0xB5, 0x73, 0xAD, 0x32, 0xA5, 0x32, 0xA5, 0x32, 0xA5, 0x12, 0xBD, 0xD4, 0xC5, 0xF5, 0xBD, 0xF4, 0xB5, 0x73, 0xB5, 0xB4, 0xB5, 0x93, 0xBD, 0xB4, 0xC5, 0xD5, 0xB5, 0xB4, 0xB5, 0x93, 0xB5, 0x73, 0xB5, 0x52, 0xBD, 0x93, 0xB5, 0x72, 0xAD, 0x10, 0x83, 0xAB, 0xAD, 0x53, 0xAD, 0x53, 0xB5, 0xB4, 0x94, 0xB1, 0xB5, 0xB4, 0xB5, 0xB4, 0xC6, 0x16, 0xBD, 0xD5, 0xC6, 0x16, 0xC6, 0x36, 0xBD, 0xF6, 0xA5, 0x12, 0xAD, 0x53, 0xAD, 0x53, 0xAD, 0x74, 0xBD, 0xF5, 0xBD, 0xF5, 0xBD, 0xF5, 0xC6, 0x16, 0xC6, 0x16, 0xA5, 0x32, 0x8C, 0x2E, 0x4A, 0x27, 0x39, 0xC6, 0x41, 0xE7, 0x42, 0x07, 0x4A, 0x28, 0x42, 0x28, 0x63, 0x2C, 0x7B, 0xCF, 0x7B, 0xCF, 0xA5, 0x35, 0x94, 0x92, 0x9C, 0xD3, 0xAD, 0x55, 0xAD, 0x75, 0xB5, 0xB6, 0xC5, 0xF7, 0xBD, 0xD5, 0xC5, 0xD4, 0xC5, 0xD4, 0xBD, 0x92, 0xB5, 0x51, 0xB5, 0x52, 0xCD, 0xF4, 0xB5, 0x10, 0x9C, 0x6E, 0x83, 0x8A, 0x83, 0xAB, 0x8B, 0xCC, 0x83, 0xED, 0x52, 0x68, 0x29, 0x44, 0x31, 0x85, 0x39, 0xA6, 0x41, 0xE7, 0x63, 0x0C, 0x5A, 0xAA, 0x5A, 0x8A, 0x83, 0xEF, 0x52, 0x6A, 0x62, 0x69, 0x93, 0xEF, 0xA4, 0x92, 0x9C, 0x71, 0xC5, 0xD7, 0xD6, 0x38, 0xBD, 0x75, 0xBD, 0x55, 0xB5, 0x33, 0xBD, 0x52, 0xBD, 0x31, 0xB5, 0x10, 0xA4, 0xAF, 0x9C, 0x6E, 0xA4, 0x8F, 0xAC, 0xD0, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0xD0, 0x9C, 0x8F, 0x9C, 0x8F, 0x94, 0x4F, 0x94, 0x6F, 0x9C, 0x8F, 0xA4, 0xAF, 0xA4, 0xF1, 0x7B, 0xAD, 0x6B, 0x2B, 0x5A, 0x89, 0x52, 0x69, 0x8C, 0x30, 0xA4, 0xF2, 0xC5, 0xD5, 0xB5, 0x52, 0xBD, 0x93, 0xAD, 0x11, 0xC5, 0xB5, 0xC6, 0x38, 0xA5, 0x55, 0x94, 0x71, 0xBD, 0x73, 0xAD, 0x11, 0xA4, 0xB0, 0xA4, 0xB0, 0x8C, 0x2E, 0x94, 0x2E, 0x94, 0x4E, 0x8C, 0x0D, 0x9C, 0x6E, 0xAC, 0xF0, 0xB5, 0x11, 0x8B, 0xEC, 0x73, 0x0A, 0x72, 0xE9, 0x73, 0x0A, 0x9C, 0x6F, 0xAD, 0x12, 0xB5, 0x73, 0xBD, 0xD5, 0xBD, 0xD5, 0xBD, 0xD5, 0xB5, 0x74, 0xB5, 0x94, 0xAD, 0x33, 0xA4, 0xF2, 0xAD, 0x73, 0x94, 0x6F, 0xA4, 0xF1, 0xAD, 0x53, 0xC5, 0xF6, 0xBD, 0xD5, 0xBD, 0xD5, 0xB5, 0x94, 0xC5, 0xF5, 0xCE, 0x36, 0xCE, 0x36, 0xC6, 0x16, 0xC6, 0x16, 0xBD, 0xB4, 0x7B, 0xCD, 0x94, 0x90, 0xB5, 0x94, 0xB5, 0xB4, 0xAD, 0x53, 0xB5, 0xB4, 0x84, 0x0E, 0x94, 0x70, 0xA5, 0x12, 0xA5, 0x12, 0xB5, 0xB5, 0xBD, 0xD5, 0xBD, 0xD5, 0x9C, 0xB1, 0xAD, 0x33, 0x9C, 0xD1, 0xAD, 0x32, 0xDE, 0xB8, 0xC6, 0x16, 0xC5, 0xF5, 0xBD, 0xB4, 0xB5, 0x73, 0xBD, 0x94, 0xBD, 0xD5, 0xBD, 0xD4, 0xC5, 0xF5, 0xA4, 0xF2, 0xBD, 0x94, 0xC5, 0xD4, 0xC6, 0x15, 0xC5, 0xF4, 0xC5, 0xD4, 0xAD, 0x11, 0xAC, 0xF0, 0xAD, 0x11, 0x9C, 0x8F, 0x9C, 0x90, 0x9C, 0x90, 0xA5, 0x12, 0xAD, 0x33, 0xAD, 0x54, 0xBD, 0xD5, 0xA4, 0xF2, 0x94, 0x70, 0xAC, 0xF1, 0xB5, 0x12, 0xC5, 0x94, 0xCD, 0xB3, 0xCD, 0x93, 0x8B, 0x8C, 0xA4, 0x90, 0x9C, 0x90, 0xA4, 0xF1, 0x9C, 0xB0, 0xA4, 0xF1, 0xBD, 0xD4, 0xBD, 0xB4, 0xB5, 0x73, 0xA4, 0xF2, 0xA5, 0x12, 0xAD, 0x32, 0xBD, 0xB4, 0xAD, 0x53, 0xBD, 0xD5, 0xAD, 0x53, 0xAD, 0x74, 0xB5, 0x74, 0xB5, 0x74, 0xBD, 0xD5, 0xBD, 0xD4, 0xBD, 0xF5, 0xBD, 0xB5, 0xAD, 0x32, 0x8C, 0x2E, 0x8C, 0x2E, 0xA4, 0xF1, 0x8C, 0x0E, 0xAD, 0x12, 0xA4, 0xD1, 0x8C, 0x0E, 0x7B, 0xCC, 0x9C, 0x8F, 0xAD, 0x11, 0x8C, 0x2E, 0x94, 0x6F, 0x9C, 0xB0, 0x9C, 0x90, 0xBD, 0xB4, 0x9C, 0xB0, 0x8C, 0x2E, 0xA4, 0xD1, 0x8C, 0x2E, 0x8B, 0xED, 0x9C, 0x8F, 0xAD, 0x32, 0x94, 0x4E, 0xB5, 0x52, 0x9C, 0x8F, 0x9C, 0x8F, 0xAD, 0x12, 0x94, 0x8F, 0x83, 0xED, 0x6B, 0x0A, 0xAD, 0x12, 0xB5, 0x53, 0xBD, 0x93, 0xA4, 0xD0, 0xA4, 0xF1, 0xB5, 0x73, 0xAD, 0x32, 0x9C, 0xB0, 0x8C, 0x2F, 0x94, 0x90, 0xAD, 0x33, 0xA5, 0x32, 0xBD, 0xB4, 0x8C, 0x2F, 0x9C, 0xB0, 0xAD, 0x52, 0x9C, 0xD0, 0x9C, 0x90, 0x94, 0x6F, 0x8C, 0x0E, 0x8C, 0x2E, 0xB5, 0x52, 0xA4, 0xD1, 0xAD, 0x11, 0xAC, 0xF1, 0xA4, 0xD0, 0x9C, 0x6F, 0x9C, 0x90, 0x8C, 0x0E, 0xA4, 0xB0, 0xA4, 0xF1, 0xAD, 0x11, 0xA5, 0x35, 0xB5, 0xB7, 0x9D, 0x14, 0x9C, 0xF4, 0x8C, 0x71, 0x84, 0x50, 0x8C, 0x90, 0x94, 0xD1, 0x84, 0x2F, 0xA5, 0x11, 0xB5, 0x93, 0xB5, 0x73, 0xA5, 0x11, 0xAD, 0x72, 0xB5, 0xB4, 0xB5, 0x94, 0xBD, 0xB4, 0xAD, 0x52, 0xC5, 0xF4, 0xA4, 0x8E, 0x9C, 0x6E, 0xB5, 0x72, 0xB5, 0xB4, 0xAD, 0x73, 0xAD, 0x52, 0xAD, 0x53, 0xA5, 0x32, 0xB5, 0x74, 0xA5, 0x12, 0xBD, 0xF5, 0xC5, 0xF5, 0xC6, 0x15, 0xB5, 0xB4, 0xBD, 0xB4, 0xC6, 0x15, 0xBD, 0xD5, 0xB5, 0x94, 0xB5, 0x73, 0xB5, 0x73, 0xA5, 0x11, 0xB5, 0x72, 0xBD, 0xD4, 0xB5, 0x72, 0xAC, 0xEF, 0x8C, 0x0D, 0xB5, 0xB4, 0xB5, 0x94, 0xBD, 0xF6, 0xAD, 0x94, 0xC6, 0x16, 0xBD, 0xF6, 0xBD, 0xF6, 0xBD, 0xD5, 0xBE, 0x16, 0xC6, 0x37, 0xC6, 0x16, 0xC6, 0x16, 0xBD, 0xF6, 0xBD, 0xD5, 0xB5, 0xB5, 0xBD, 0xF6, 0xBD, 0xD5, 0xCE, 0x77, 0xCE, 0x57, 0xC6, 0x16, 0xB5, 0xB4, 0x9C, 0xB0, 0x94, 0x4F, 0x39, 0xA5, 0x31, 0x85, 0x39, 0xE7, 0x39, 0xA6, 0x31, 0x85, 0x41, 0xE7, 0x4A, 0x28, 0x73, 0x6D, 0x8C, 0x51, 0x8C, 0x51, 0xB5, 0x75, 0x9C, 0xB3, 0x8C, 0x51, 0x94, 0xB2, 0xC6, 0x38, 0xD6, 0x98, 0xC6, 0x15, 0xD6, 0x76, 0xCE, 0x55, 0xB5, 0x72, 0xAD, 0x31, 0xBD, 0x92, 0x9C, 0x8E, 0xAC, 0xF0, 0x83, 0xAB, 0x8C, 0x2D, 0x94, 0x4E, 0x9C, 0xD0, 0x9C, 0xD0, 0x7B, 0xCD, 0x39, 0xA5, 0x39, 0xA6, 0x4A, 0x48, 0x42, 0x07, 0x41, 0xE7, 0x83, 0xCF, 0x8C, 0x51, 0xC5, 0xF7, 0x52, 0x29, 0x6A, 0xCB, 0x72, 0xEB, 0x94, 0x31, 0xA4, 0xB3, 0xCD, 0xF7, 0xD6, 0x58, 0xAC, 0xD3, 0x6B, 0x0B, 0x83, 0x8D, 0xAC, 0xD1, 0x73, 0x2A, 0x83, 0x8A, 0x83, 0xAB, 0x7B, 0x6A, 0x94, 0x0D, 0x94, 0x2D, 0x94, 0x2D, 0x9C, 0x4E, 0x94, 0x2D, 0x94, 0x2E, 0x9C, 0x6E, 0xA4, 0xAF, 0xAC, 0xCF, 0xB5, 0x31, 0xB5, 0x10, 0xBD, 0x52, 0xBD, 0x52, 0xAC, 0xF0, 0x9C, 0x4F, 0x6B, 0x2B, 0x42, 0x07, 0x73, 0x6D, 0x94, 0x71, 0xB5, 0x74, 0xAC, 0xF2, 0xC5, 0xD6, 0xCE, 0x59, 0xAD, 0x76, 0x94, 0x71, 0xAC, 0xF1, 0xB5, 0x31, 0xB5, 0x31, 0xB5, 0x31, 0xB5, 0x31, 0xB5, 0x31, 0xB5, 0x52, 0xB5, 0x11, 0xAC, 0xD0, 0xAC, 0xF0, 0xAC, 0xD0, 0xAC, 0xF1, 0xA4, 0xB1, 0xA4, 0xB1, 0x9C, 0xB1, 0xAD, 0x12, 0xB5, 0x74, 0xA4, 0xF2, 0xA4, 0xD1, 0x94, 0x70, 0x8C, 0x4F, 0x94, 0x6F, 0x9C, 0xB0, 0x9C, 0xB1, 0x94, 0x70, 0x8C, 0x2E, 0x8C, 0x2E, 0x83, 0xED, 0x83, 0xED, 0x94, 0x90, 0x9C, 0xF1, 0xB5, 0x94, 0xAD, 0x52, 0xBD, 0xB4, 0xBD, 0xD5, 0xBD, 0xB4, 0xB5, 0x94, 0xBD, 0xB4, 0xAD, 0x52, 0x7B, 0xAC, 0x94, 0x90, 0xA4, 0xF1, 0xB5, 0x94, 0xAD, 0x33, 0xAD, 0x53, 0x8C, 0x2F, 0x84, 0x0E, 0x9C, 0xD0, 0xA5, 0x11, 0xB5, 0x94, 0xBD, 0xD5, 0xB5, 0xB4, 0x94, 0x6F, 0xB5, 0x73, 0xAD, 0x12, 0xAD, 0x32, 0xC5, 0xD5, 0xC5, 0xF5, 0xD6, 0x76, 0xD6, 0x76, 0xD6, 0x76, 0xD6, 0x56, 0xBD, 0xD4, 0xBD, 0xD5, 0xD6, 0x77, 0xAD, 0x11, 0xB5, 0x73, 0xCE, 0x15, 0xC5, 0xF5, 0xCE, 0x15, 0xC5, 0xF4, 0xB5, 0x32, 0xA4, 0xD0, 0xA4, 0xF0, 0x9C, 0x8F, 0xBD, 0x73, 0xA4, 0xF1, 0x9C, 0xF1, 0xAD, 0x53, 0xAD, 0x53, 0xAD, 0x53, 0xA5, 0x12, 0xA4, 0xF1, 0xB5, 0x32, 0xBD, 0x53, 0xCD, 0xD4, 0xD5, 0xF4, 0xCD, 0xB3, 0x8B, 0x8C, 0xA4, 0x90, 0x94, 0x4F, 0x9C, 0xB0, 0xA4, 0xD1, 0xA4, 0xD1, 0xC6, 0x15, 0xC5, 0xF5, 0xB5, 0xB4, 0x9C, 0xB0, 0xA5, 0x32, 0xAD, 0x33, 0xB5, 0x94, 0xAD, 0x53, 0xBD, 0xB4, 0xB5, 0x73, 0xA5, 0x12, 0xAD, 0x53, 0xB5, 0x74, 0xAD, 0x53, 0xB5, 0x74, 0xBD, 0xD5, 0xBD, 0xD5, 0xBD, 0xB4, 0xA4, 0xF1, 0x94, 0x4F, 0xA4, 0xF1, 0x9C, 0x90, 0xA4, 0xF1, 0x9C, 0xB0, 0x8C, 0x2E, 0x84, 0x0D, 0x94, 0x4F, 0x94, 0x8F, 0x8C, 0x2E, 0x8C, 0x2E, 0xAD, 0x32, 0x9C, 0x90, 0xB5, 0x53, 0x9C, 0x8F, 0x94, 0x6F, 0xA5, 0x11, 0x94, 0x6F, 0x94, 0x2E, 0xAD, 0x12, 0xBD, 0x72, 0xBD, 0x93, 0xC5, 0x93, 0x94, 0x4E, 0x9C, 0xB0, 0xB5, 0x53, 0x9C, 0x90, 0x8C, 0x4F, 0x73, 0x4B, 0xA4, 0xD1, 0xAD, 0x11, 0xA4, 0xF1, 0x9C, 0x90, 0xA4, 0xD1, 0xB5, 0x53, 0xAD, 0x32, 0xA5, 0x32, 0xAD, 0x53, 0xAD, 0x53, 0xBD, 0xD5, 0xB5, 0x94, 0xC6, 0x16, 0x9C, 0xB0, 0xAD, 0x53, 0xC5, 0xF5, 0xB5, 0x93, 0xA4, 0xD1, 0xA4, 0xD1, 0xAC, 0xF2, 0x8C, 0x4F, 0xB5, 0x53, 0xB5, 0x52, 0xD6, 0x55, 0xBD, 0x93, 0xBD, 0x72, 0xBD, 0xD4, 0xC5, 0xF4, 0xB5, 0x52, 0x94, 0x6F, 0xB5, 0x73, 0xB5, 0x73, 0xA5, 0x35, 0xB5, 0xB7, 0x9D, 0x14, 0x9C, 0xF3, 0x8C, 0x91, 0x84, 0x70, 0x8C, 0x91, 0x94, 0xB1, 0x94, 0xB0, 0xA5, 0x52, 0xAD, 0x72, 0xAD, 0x52, 0xA5, 0x11, 0xBD, 0xB4, 0xBD, 0xD4, 0xBD, 0xB4, 0xBD, 0xB4, 0xAD, 0x52, 0xCE, 0x15, 0x9C, 0x6E, 0x94, 0x4D, 0xAD, 0x31, 0xAD, 0x53, 0xB5, 0x94, 0xBD, 0xB4, 0x9C, 0xF1, 0xB5, 0xB5, 0xAD, 0x74, 0xA5, 0x12, 0xBD, 0xD4, 0xB5, 0x73, 0xBD, 0xF5, 0xBD, 0xF5, 0xBD, 0xD5, 0xC5, 0xF5, 0xB5, 0xB4, 0xB5, 0x73, 0xB5, 0x73, 0xA5, 0x11, 0x94, 0xAF, 0xA5, 0x31, 0xB5, 0x93, 0xAD, 0x11, 0xAC, 0xF0, 0x8C, 0x2D, 0xB5, 0xB4, 0xBD, 0xF6, 0xBD, 0xF6, 0xB5, 0xD5, 0xC6, 0x36, 0xC6, 0x16, 0xB5, 0xD5, 0xB5, 0xB4, 0xBD, 0xF6, 0xBD, 0xF6, 0xC6, 0x16, 0xC6, 0x37, 0xCE, 0x57, 0x9C, 0xD1, 0xAD, 0x94, 0xCE, 0x98, 0xCE, 0x57, 0xD6, 0x78, 0xCE, 0x57, 0xCE, 0x37, 0xB5, 0x94, 0xAD, 0x32, 0xB5, 0x52, 0x73, 0x6C, 0x31, 0xA6, 0x39, 0xC6, 0x42, 0x07, 0x42, 0x07, 0x42, 0x07, 0x52, 0x8A, 0x63, 0x2C, 0x7B, 0xCF, 0x9C, 0xD3, 0xBD, 0xF7, 0xA5, 0x14, 0x6B, 0x4D, 0x73, 0xAF, 0xBD, 0xD7, 0xDE, 0xBA, 0xB5, 0x54, 0x63, 0x0B, 0xA4, 0xF1, 0xBD, 0xD4, 0xAD, 0x31, 0xB5, 0x72, 0x94, 0x4D, 0xB5, 0x51, 0x94, 0x4E, 0xAD, 0x32, 0xAD, 0x53, 0xB5, 0x94, 0xB5, 0x73, 0xAD, 0x52, 0x7B, 0xAD, 0x29, 0x24, 0x29, 0x45, 0x39, 0xC6, 0x42, 0x07, 0x5A, 0xAA, 0x8C, 0x51, 0xC5, 0xF7, 0x94, 0x51, 0x83, 0xAF, 0x6A, 0xCB, 0x9C, 0x51, 0xAC, 0xD3, 0x8B, 0xEF, 0x7B, 0x8E, 0x83, 0x8E, 0x8B, 0xEF, 0x83, 0xAD, 0xAD, 0x13, 0xCE, 0x37, 0x94, 0x4F, 0x83, 0x8C, 0x83, 0xAC, 0x73, 0x4A, 0x6B, 0x0A, 0x7B, 0x6B, 0x7B, 0x4A, 0x6A, 0xE9, 0x62, 0xC9, 0x52, 0x27, 0x4A, 0x27, 0x5A, 0x67, 0x6A, 0xE9, 0x8B, 0xCC, 0xC5, 0x92, 0xA4, 0x6D, 0x94, 0x2D, 0xA4, 0x8E, 0xAC, 0xF0, 0x9C, 0x8F, 0x84, 0x0E, 0x5A, 0xCA, 0x4A, 0x48, 0x5A, 0xEB, 0x9C, 0xB2, 0xCE, 0x59, 0x9C, 0xD3, 0x7B, 0xAD, 0x8B, 0xEC, 0xB5, 0x11, 0x7B, 0x6B, 0x83, 0x8B, 0x83, 0xAB, 0x83, 0xAC, 0x83, 0x8B, 0x83, 0xAC, 0x8B, 0xCC, 0x94, 0x0D, 0xA4, 0xB0, 0xAD, 0x12, 0xAD, 0x12, 0xB5, 0x32, 0xB5, 0x74, 0xBD, 0x94, 0xB5, 0x53, 0xB5, 0x73, 0xB5, 0x74, 0xBD, 0x94, 0xC5, 0xB5, 0xBD, 0x94, 0xBD, 0x94, 0xBD, 0x94, 0xBD, 0xB5, 0xBD, 0x94, 0xB5, 0x74, 0xBD, 0xB4, 0xB5, 0x74, 0xB5, 0x74, 0xB5, 0x74, 0xA5, 0x12, 0x9C, 0x90, 0x9C, 0xB0, 0x9C, 0x90, 0x9C, 0x90, 0x8C, 0x2F, 0x8C, 0x0E, 0x8C, 0x0E, 0x8C, 0x4F, 0x9C, 0xB1, 0x8C, 0x4F, 0x8C, 0x2E, 0x84, 0x0E, 0x7B, 0xCD, 0x83, 0xED, 0x84, 0x0E, 0x94, 0x6F, 0x94, 0x4F, 0x9C, 0xB0, 0xA5, 0x12, 0x9C, 0x90, 0x7B, 0x8C, 0xA5, 0x12, 0x9C, 0xD0, 0x9C, 0xB0, 0xAD, 0x32, 0xA5, 0x11, 0xB5, 0x52, 0xB5, 0x52, 0xB5, 0x73, 0xBD, 0x93, 0xC5, 0xD4, 0xCE, 0x35, 0xBD, 0x93, 0x94, 0x6F, 0xB5, 0x73, 0xCE, 0x15, 0xBD, 0xB4, 0xC5, 0xB4, 0xBD, 0xB4, 0xAD, 0x11, 0x94, 0x6F, 0x9C, 0x8F, 0x8C, 0x2E, 0xAD, 0x11, 0xA4, 0xF1, 0xA5, 0x12, 0xB5, 0x94, 0xAD, 0x74, 0xBD, 0xD5, 0xB5, 0x94, 0xBD, 0x94, 0xC5, 0x93, 0xBD, 0x52, 0xBD, 0x52, 0xDE, 0x15, 0xCD, 0x93, 0x83, 0x6B, 0xAC, 0xD1, 0x8C, 0x0E, 0xA4, 0xD0, 0xBD, 0x94, 0xBD, 0xB4, 0xCE, 0x36, 0xCE, 0x15, 0xBD, 0xD4, 0xAD, 0x32, 0x9C, 0xD1, 0xA4, 0xF1, 0xB5, 0x74, 0xB5, 0x94, 0xBD, 0xB5, 0xAD, 0x53, 0xA5, 0x12, 0xAD, 0x33, 0xBD, 0xB4, 0xB5, 0xB4, 0xB5, 0x94, 0xBD, 0xF5, 0xB5, 0x73, 0xA4, 0xF1, 0xA5, 0x11, 0x94, 0x4F, 0xB5, 0x53, 0xA4, 0xD1, 0xB5, 0x53, 0xAD, 0x32, 0x9C, 0x90, 0x9C, 0xB0, 0xA4, 0xF1, 0xAD, 0x12, 0xAD, 0x12, 0x9C, 0xB0, 0xC5, 0xD5, 0xB5, 0x73, 0xC6, 0x15, 0xB5, 0x93, 0xA4, 0xF1, 0x9C, 0xB0, 0xA4, 0xF1, 0xAD, 0x11, 0x9C, 0x6F, 0xBD, 0x72, 0xC5, 0xB3, 0xC5, 0xB3, 0x9C, 0x8F, 0xAD, 0x12, 0xAD, 0x11, 0x9C, 0xB0, 0x94, 0x4F, 0x73, 0x8C, 0x94, 0x6F, 0xC5, 0xD4, 0xBD, 0x73, 0xAD, 0x12, 0xAD, 0x33, 0xA4, 0xD1, 0x94, 0x6F, 0xAD, 0x32, 0xA5, 0x32, 0xAD, 0x94, 0xCE, 0x57, 0xBD, 0xD5, 0xBD, 0xB4, 0xAD, 0x33, 0xC6, 0x16, 0xC6, 0x35, 0xC6, 0x15, 0xAD, 0x32, 0x9C, 0x90, 0xB5, 0x73, 0xA5, 0x12, 0xBD, 0x93, 0xC5, 0xB3, 0xD6, 0x55, 0xCE, 0x14, 0xA4, 0xAF, 0xC5, 0xD4, 0xCE, 0x55, 0xC5, 0xF4, 0xAD, 0x31, 0xBD, 0xD4, 0xC6, 0x35, 0xA5, 0x35, 0xB5, 0x97, 0xA5, 0x34, 0x9C, 0xF4, 0x8C, 0x92, 0x8C, 0x90, 0x94, 0xB1, 0x9C, 0xF2, 0x9D, 0x12, 0xB5, 0x94, 0xB5, 0x93, 0xB5, 0x93, 0xB5, 0xB4, 0xC6, 0x36, 0xBD, 0xB4, 0xC6, 0x15, 0xC6, 0x15, 0xBD, 0xD4, 0xCE, 0x36, 0x9C, 0x4D, 0xB5, 0x31, 0xC5, 0xF4, 0xBD, 0xD4, 0xB5, 0xB4, 0xBD, 0xF5, 0xAD, 0x73, 0xC6, 0x37, 0xB5, 0xB5, 0x9D, 0x12, 0xC6, 0x36, 0xBD, 0xD5, 0xC6, 0x15, 0xC6, 0x16, 0xC6, 0x16, 0xC6, 0x36, 0xC6, 0x16, 0xC5, 0xF5, 0xC5, 0xF5, 0xAD, 0x32, 0xB5, 0x93, 0xBD, 0xF5, 0xCE, 0x35, 0x9C, 0x8F, 0xAC, 0xF0, 0x8C, 0x2D, 0xAD, 0x74, 0xB5, 0xB5, 0xBD, 0xF6, 0xC6, 0x16, 0xCE, 0x57, 0xBD, 0xF6, 0xBD, 0xF6, 0xB5, 0xD5, 0xB5, 0x94, 0xB5, 0xB5, 0xBD, 0xD5, 0xC6, 0x36, 0xBD, 0xF6, 0x9C, 0xF2, 0xBE, 0x16, 0xAD, 0x74, 0xCE, 0x57, 0xCE, 0x57, 0xCE, 0x57, 0xC6, 0x16, 0xBD, 0xB5, 0xAD, 0x32, 0xB5, 0x52, 0xAD, 0x32, 0x63, 0x2B, 0x42, 0x07, 0x42, 0x07, 0x4A, 0x48, 0x52, 0xAA, 0x63, 0x2C, 0x63, 0x0C, 0x6B, 0x2C, 0x84, 0x30, 0x9C, 0xD3, 0xA5, 0x14, 0x94, 0xB3, 0xAD, 0x56, 0xAD, 0x76, 0xCE, 0x59, 0xBD, 0xB7, 0x21, 0x05, 0x63, 0x2C, 0xC6, 0x36, 0xC5, 0xF4, 0xD6, 0x56, 0xA4, 0xAF, 0xB5, 0x51, 0xA4, 0xD0, 0xBD, 0xF5, 0xBD, 0xD5, 0xC5, 0xF5, 0xB5, 0x94, 0xAD, 0x52, 0xAD, 0x32, 0x73, 0x8C, 0x18, 0xC3, 0x39, 0xC6, 0x31, 0xA6, 0x6B, 0x4D, 0x9C, 0xD3, 0x7B, 0xAE, 0x94, 0x92, 0xD6, 0x59, 0xB5, 0x34, 0x72, 0xEC, 0x94, 0x30, 0x49, 0xE7, 0x52, 0x28, 0x83, 0x8D, 0xA4, 0xD2, 0xCD, 0xF6, 0x83, 0xCE, 0xAD, 0x13, 0xCE, 0x16, 0x9C, 0x90, 0x8C, 0x0E, 0x94, 0x2E, 0x8C, 0x2E, 0x8C, 0x2E, 0x94, 0x2E, 0x8C, 0x0E, 0x8C, 0x0E, 0x83, 0xEE, 0x83, 0xCD, 0x83, 0xAD, 0x6B, 0x0A, 0x6B, 0x0A, 0xBD, 0x72, 0x8B, 0xEB, 0x7B, 0xAB, 0x94, 0x4E, 0x9C, 0x4E, 0x8B, 0xEC, 0x94, 0x8F, 0x94, 0x6F, 0x6B, 0x4B, 0x39, 0xE7, 0x73, 0x8E, 0xA5, 0x35, 0x94, 0x92, 0x8C, 0x2E, 0x83, 0x8B, 0xB5, 0x31, 0x9C, 0x4E, 0x94, 0x4E, 0x94, 0x4E, 0x8B, 0xED, 0x7B, 0x8B, 0x8C, 0x0D, 0x94, 0x4E, 0x94, 0x4E, 0xA4, 0xD1, 0xB5, 0x53, 0x9C, 0x8F, 0xA4, 0xD0, 0xAD, 0x11, 0xBD, 0x93, 0xA4, 0xD1, 0xBD, 0xB4, 0xBD, 0xB4, 0x94, 0x70, 0x94, 0x4F, 0x9C, 0x90, 0xAD, 0x12, 0x9C, 0x90, 0x7B, 0x8D, 0x73, 0x6C, 0x83, 0xCD, 0x83, 0xEE, 0x9C, 0x90, 0xAD, 0x12, 0x94, 0x4F, 0xA4, 0xF1, 0x9C, 0xB0, 0x94, 0x6F, 0x9C, 0xD1, 0xAD, 0x12, 0xB5, 0x73, 0xBD, 0x94, 0xBD, 0x94, 0xB5, 0x53, 0xB5, 0x53, 0xB5, 0x53, 0xAD, 0x12, 0xB5, 0x53, 0xA4, 0xF1, 0xA4, 0xF1, 0xAD, 0x32, 0xA4, 0xF1, 0xAD, 0x32, 0xB5, 0x53, 0xAD, 0x12, 0xAD, 0x12, 0xB5, 0x53, 0xBD, 0x94, 0xA4, 0xD1, 0xA4, 0xF1, 0xB5, 0x53, 0xAD, 0x12, 0xAD, 0x12, 0xB5, 0x53, 0xAD, 0x32, 0xB5, 0x33, 0xAD, 0x32, 0xB5, 0x52, 0xAD, 0x32, 0xBD, 0xB4, 0xB5, 0x52, 0xAD, 0x12, 0xB5, 0x53, 0xBD, 0x73, 0xB5, 0x32, 0xAD, 0x12, 0xAD, 0x32, 0xA4, 0xD1, 0x9C, 0x8F, 0xA4, 0xD0, 0x9C, 0x8F, 0xA4, 0xD1, 0x8C, 0x2F, 0x94, 0x91, 0x94, 0x70, 0x9C, 0xD1, 0x9C, 0x90, 0xAC, 0xD1, 0xAC, 0xF1, 0xAC, 0xD0, 0xAC, 0xF0, 0x9C, 0x2E, 0x7B, 0x2A, 0xAC, 0xF1, 0x83, 0xAC, 0x9C, 0xB0, 0xAD, 0x32, 0xC6, 0x15, 0xBD, 0xD4, 0xC5, 0xF4, 0xBD, 0xD4, 0xBD, 0xD5, 0xBD, 0xD4, 0xB5, 0x94, 0xB5, 0x94, 0xB5, 0x94, 0xB5, 0xB4, 0xBD, 0xB5, 0xBD, 0xD5, 0xC5, 0xF5, 0xC6, 0x15, 0xC6, 0x15, 0xC6, 0x15, 0xC5, 0xF5, 0xAD, 0x32, 0xB5, 0x53, 0x9C, 0xD0, 0x8C, 0x2E, 0xAD, 0x52, 0x8C, 0x0E, 0xCE, 0x36, 0x9C, 0xB0, 0x94, 0x6F, 0x83, 0xED, 0xA4, 0xF1, 0xA4, 0xF1, 0x94, 0x6F, 0x9C, 0x90, 0xBD, 0xB4, 0xBD, 0xB4, 0xC5, 0xF4, 0xA5, 0x11, 0x8C, 0x2E, 0xA4, 0xF1, 0xAC, 0xF1, 0xB5, 0x52, 0xAC, 0xF0, 0xB5, 0x11, 0xBD, 0x72, 0xAC, 0xF0, 0xA4, 0xD0, 0xB5, 0x73, 0xB5, 0x53, 0x9C, 0xB0, 0x9C, 0xB1, 0x8C, 0x0E, 0x9C, 0xB0, 0xCE, 0x36, 0xC5, 0xF5, 0xB5, 0x73, 0xB5, 0x53, 0xB5, 0x73, 0xBD, 0xD5, 0xB5, 0x94, 0xA4, 0xF2, 0xA5, 0x33, 0xC6, 0x16, 0xC6, 0x16, 0xCE, 0x36, 0xA5, 0x32, 0xBD, 0xD5, 0xC6, 0x15, 0xCE, 0x15, 0xC5, 0xD5, 0xA4, 0xD1, 0xB5, 0xB4, 0xAD, 0x33, 0xB5, 0x73, 0xCD, 0xF4, 0xCE, 0x14, 0xBD, 0xB2, 0x9C, 0xAF, 0xCE, 0x14, 0xCE, 0x35, 0xB5, 0x52, 0xBD, 0xB3, 0xBD, 0xD4, 0xCE, 0x56, 0xA5, 0x35, 0xB5, 0xB7, 0x9D, 0x14, 0x9C, 0xF4, 0x7B, 0xEF, 0x5A, 0xC9, 0x63, 0x09, 0x6B, 0x2A, 0x6B, 0x4A, 0x73, 0x8B, 0x73, 0x8B, 0x83, 0xCC, 0x83, 0xEC, 0x83, 0xED, 0x7B, 0x6B, 0x83, 0xED, 0x83, 0xED, 0x7B, 0x8C, 0x7B, 0x8C, 0x83, 0xAB, 0x7B, 0x8A, 0x7B, 0x8B, 0x8C, 0x0D, 0x7B, 0xAC, 0x7B, 0xAC, 0x94, 0x6F, 0xA4, 0xF1, 0x94, 0xB0, 0x94, 0xB0, 0xB5, 0x73, 0xAD, 0x73, 0xB5, 0xB4, 0xBD, 0xD4, 0xC5, 0xF5, 0xCE, 0x36, 0xD6, 0x77, 0xCE, 0x57, 0xCE, 0x57, 0xAD, 0x32, 0x9C, 0xB0, 0xBD, 0xB4, 0xC5, 0xD4, 0x83, 0xAC, 0xAC, 0xD0, 0x94, 0x8F, 0xBD, 0xF5, 0xC6, 0x16, 0xC6, 0x37, 0xC6, 0x16, 0xCE, 0x57, 0xCE, 0x57, 0xC6, 0x16, 0xC6, 0x16, 0xBD, 0xD5, 0xB5, 0xB4, 0xBD, 0xF6, 0xCE, 0x57, 0xCE, 0x98, 0xA5, 0x12, 0xCE, 0x57, 0xBD, 0xF6, 0xC6, 0x37, 0xD6, 0x78, 0xD6, 0x98, 0xCE, 0x77, 0xC5, 0xF5, 0xAD, 0x11, 0xBD, 0x92, 0x9C, 0xAF, 0x94, 0x70, 0x52, 0x89, 0x4A, 0x69, 0x52, 0x89, 0x84, 0x10, 0x7B, 0xAE, 0x52, 0x8A, 0x5A, 0xEB, 0x73, 0x8E, 0x94, 0x92, 0xB5, 0xB6, 0x9C, 0xD3, 0xB5, 0xB7, 0xB5, 0xB7, 0xB5, 0xB7, 0xC6, 0x18, 0x84, 0x10, 0x6B, 0x4D, 0xC6, 0x37, 0x9C, 0xD1, 0xC5, 0xF5, 0xA4, 0xF0, 0xB5, 0x31, 0xAD, 0x52, 0xC6, 0x16, 0xBD, 0xB5, 0xC5, 0xF5, 0xB5, 0x73, 0x8C, 0x4E, 0x8C, 0x2E, 0x94, 0x90, 0x31, 0x65, 0x21, 0x04, 0x31, 0x86, 0x42, 0x08, 0x4A, 0x28, 0x31, 0x86, 0x39, 0xA7, 0x84, 0x10, 0xDE, 0x9A, 0x8C, 0x10, 0x4A, 0x08, 0x41, 0xE7, 0x94, 0x2F, 0xAC, 0xF2, 0x94, 0x0F, 0xC5, 0xD6, 0xBD, 0x94, 0xBD, 0x74, 0x9C, 0x91, 0xCE, 0x16, 0xBD, 0x94, 0x9C, 0x90, 0xA4, 0xB0, 0xA4, 0xF1, 0xAD, 0x32, 0x9C, 0x90, 0x8B, 0xED, 0x8C, 0x0E, 0x94, 0x2E, 0x8C, 0x2F, 0x83, 0xCD, 0x8C, 0x0E, 0xBD, 0x31, 0xAC, 0xF0, 0xAD, 0x11, 0xBD, 0xB3, 0xB5, 0x72, 0xAD, 0x52, 0xAD, 0x52, 0xB5, 0x73, 0xAD, 0x32, 0x6B, 0x4C, 0x63, 0x0C, 0x8C, 0x51, 0x94, 0x71, 0x9C, 0x90, 0x83, 0xAB, 0xBD, 0x51, 0xAC, 0xCF, 0x8C, 0x0D, 0x7B, 0xAB, 0x7B, 0xAB, 0x6B, 0x09, 0x83, 0xEC, 0x7B, 0x8B, 0x8C, 0x0E, 0xA4, 0xF1, 0xA4, 0xF1, 0x7B, 0x8C, 0x9C, 0x90, 0xA4, 0xD0, 0x9C, 0xAF, 0xAD, 0x32, 0xC5, 0xF5, 0xCE, 0x36, 0xA5, 0x12, 0x83, 0xCD, 0x9C, 0xB0, 0x9C, 0xB0, 0x8C, 0x4F, 0x7B, 0xAD, 0x83, 0xEE, 0x83, 0xCD, 0x83, 0xEE, 0xB5, 0x73, 0xCE, 0x36, 0xAD, 0x32, 0xB5, 0x73, 0xBD, 0x94, 0xB5, 0x53, 0x94, 0x4F, 0x94, 0x6F, 0x94, 0x6F, 0xA4, 0xD1, 0xA4, 0xF1, 0xA4, 0xD0, 0xAD, 0x32, 0xB5, 0x53, 0xAD, 0x32, 0xB5, 0x32, 0xAD, 0x32, 0xB5, 0x52, 0xAD, 0x32, 0xB5, 0x94, 0xBD, 0xB4, 0xBD, 0xB4, 0xB5, 0x74, 0xB5, 0x93, 0xB5, 0x53, 0xB5, 0x73, 0x9C, 0xB0, 0x94, 0x6F, 0x9C, 0xB1, 0xAD, 0x32, 0xAD, 0x12, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0x32, 0xB5, 0x53, 0xB5, 0x53, 0xB5, 0x53, 0xBD, 0x94, 0xC5, 0xB4, 0xBD, 0xB4, 0xBD, 0x94, 0xC5, 0xB4, 0xC5, 0xD5, 0xC5, 0xD5, 0xC5, 0xD5, 0xC5, 0xF5, 0xC5, 0xD5, 0xCE, 0x15, 0xC5, 0xD4, 0xBD, 0x94, 0xBD, 0x94, 0xBD, 0x94, 0xBD, 0x74, 0xBD, 0x74, 0xBD, 0x74, 0xC5, 0x94, 0xBD, 0x73, 0xBD, 0x72, 0xBD, 0x73, 0xB5, 0x32, 0xB5, 0x12, 0xBD, 0x94, 0x9C, 0x6F, 0x8C, 0x0E, 0x94, 0x6F, 0xA4, 0xD0, 0x94, 0x2E, 0x9C, 0x90, 0xA4, 0xD0, 0xA4, 0xD0, 0xAD, 0x12, 0xAD, 0x32, 0xAD, 0x53, 0xA5, 0x12, 0xAD, 0x32, 0xB5, 0x73, 0xB5, 0x73, 0xBD, 0x94, 0xB5, 0x73, 0xB5, 0x73, 0xC5, 0xD5, 0xBD, 0xB4, 0xBD, 0x93, 0xB5, 0x73, 0x94, 0x6F, 0x84, 0x0E, 0xA4, 0xF1, 0xA4, 0xD1, 0xAD, 0x32, 0x94, 0x4F, 0x9C, 0xB1, 0x9C, 0x90, 0x83, 0xED, 0x9C, 0xB1, 0x8C, 0x2E, 0x8C, 0x2E, 0xB5, 0x53, 0xAC, 0xF1, 0xBD, 0x93, 0x83, 0xED, 0x5A, 0xA9, 0x94, 0x4F, 0x94, 0x4E, 0x9C, 0x6F, 0xA4, 0x8F, 0xA4, 0xAF, 0x9C, 0x6E, 0x9C, 0x4E, 0xA4, 0xD0, 0xB5, 0x32, 0xB5, 0x53, 0x9C, 0x90, 0xB5, 0x53, 0x9C, 0xB0, 0x94, 0x6F, 0xCE, 0x36, 0xD6, 0x56, 0xBD, 0xB4, 0xB5, 0x53, 0xAD, 0x33, 0xBD, 0xB4, 0xB5, 0x94, 0xAD, 0x33, 0xAD, 0x73, 0xCE, 0x57, 0xD6, 0x77, 0xCE, 0x56, 0xAD, 0x53, 0xBD, 0xB4, 0xC5, 0xF5, 0xC5, 0xD4, 0xC5, 0xD4, 0xAD, 0x12, 0xBD, 0xD5, 0xAD, 0x32, 0xB5, 0x73, 0xC5, 0xB3, 0xD6, 0x14, 0xBD, 0x72, 0x9C, 0xAF, 0xCE, 0x55, 0xD6, 0x75, 0xAD, 0x31, 0xA4, 0xF0, 0xBD, 0xB3, 0xC5, 0xF4, 0xA5, 0x35, 0xB5, 0xB7, 0x9D, 0x14, 0x94, 0xF3, 0x7C, 0x10, 0x62, 0xCA, 0x62, 0xE9, 0x6B, 0x0A, 0x73, 0x6B, 0x83, 0xAC, 0x8B, 0xEC, 0x8B, 0xCC, 0x94, 0x2E, 0x9C, 0x6E, 0xA4, 0x8F, 0x9C, 0x6E, 0xA4, 0x8F, 0xA4, 0xAF, 0xAC, 0xF0, 0xB5, 0x10, 0xAD, 0x10, 0xAC, 0xD0, 0xA4, 0xAF, 0xAC, 0xF0, 0xAC, 0xF0, 0xAC, 0xD0, 0xA4, 0x8F, 0x9C, 0x6D, 0x9C, 0x6E, 0x9C, 0x8E, 0x9C, 0x4E, 0x94, 0x0D, 0x94, 0x0C, 0x93, 0xEC, 0x8C, 0x0C, 0x94, 0x0D, 0x8B, 0xEC, 0x83, 0xCC, 0x83, 0xAB, 0x83, 0xAB, 0x7B, 0x8B, 0x7B, 0x6A, 0x94, 0x2D, 0xAC, 0xCF, 0x94, 0x4D, 0xAD, 0x32, 0xAD, 0x53, 0xAD, 0x32, 0xA4, 0xF1, 0xB5, 0x73, 0xB5, 0x93, 0xAD, 0x53, 0xA5, 0x11, 0xA4, 0xF1, 0x94, 0x4F, 0x94, 0x6F, 0xAD, 0x53, 0xCE, 0x77, 0xBD, 0xB4, 0xD6, 0x98, 0xD6, 0xB8, 0xD6, 0x98, 0xD6, 0x77, 0xCE, 0x77, 0xC6, 0x36, 0xCE, 0x16, 0x9C, 0x8F, 0xB5, 0x31, 0xBD, 0x93, 0xC5, 0xD5, 0x94, 0x70, 0x4A, 0x69, 0x39, 0xE7, 0x52, 0x89, 0x52, 0x69, 0x42, 0x07, 0x5A, 0xAA, 0x6B, 0x4C, 0x84, 0x10, 0x8C, 0x30, 0x9C, 0xF4, 0xAD, 0x56, 0xB5, 0x96, 0xA5, 0x35, 0xC6, 0x18, 0xD6, 0x7A, 0x9C, 0xD3, 0xC6, 0x17, 0x94, 0x70, 0x73, 0x8D, 0xA4, 0xD0, 0xB5, 0x52, 0xB5, 0x93, 0xBD, 0xD5, 0xBD, 0xD5, 0xC5, 0xF5, 0xBD, 0xB4, 0xA5, 0x12, 0xB5, 0x73, 0xB5, 0x73, 0x94, 0x90, 0x39, 0x85, 0x42, 0x07, 0x39, 0xC6, 0x4A, 0x28, 0x4A, 0x49, 0x42, 0x08, 0x4A, 0x29, 0xA4, 0xF4, 0xAD, 0x55, 0x83, 0xAE, 0x7B, 0x8D, 0xBD, 0x53, 0xCD, 0xB5, 0xD6, 0x37, 0xDE, 0x78, 0xDE, 0x58, 0xC5, 0x74, 0xB5, 0x33, 0x8C, 0x0F, 0xBD, 0x94, 0xAC, 0xF1, 0x9C, 0x8F, 0xA4, 0xD0, 0xB5, 0x52, 0xA4, 0xD1, 0x8C, 0x0E, 0x8B, 0xCE, 0x94, 0x4F, 0x8C, 0x0E, 0x83, 0xCD, 0xA4, 0xAF, 0xB5, 0x30, 0xB5, 0x11, 0xBD, 0xB3, 0xBD, 0xB3, 0xBD, 0xB3, 0xC5, 0xD4, 0xBD, 0xB4, 0xBD, 0x93, 0xBD, 0xB4, 0xA4, 0xF2, 0x8C, 0x72, 0x8C, 0x51, 0x94, 0x71, 0x94, 0x2E, 0x73, 0x29, 0xBD, 0x51, 0x94, 0x0D, 0x83, 0xCC, 0x83, 0xCC, 0x8C, 0x0E, 0x7B, 0xAC, 0x8C, 0x4E, 0x84, 0x0D, 0x94, 0x6F, 0xA5, 0x11, 0x9C, 0xB0, 0x7B, 0xCD, 0x9C, 0x90, 0xAD, 0x11, 0x8C, 0x2E, 0xA4, 0xD1, 0xBD, 0xD5, 0xC5, 0xF5, 0x9C, 0xB1, 0x63, 0x0A, 0x9C, 0xD1, 0x8C, 0x2E, 0x6B, 0x4B, 0x83, 0xED, 0x83, 0xED, 0x83, 0xCD, 0x83, 0xED, 0x9C, 0x90, 0x9C, 0xB0, 0xA4, 0xF1, 0xAD, 0x11, 0xB5, 0x52, 0xB5, 0x52, 0x94, 0x70, 0x9C, 0x90, 0x8C, 0x0E, 0x83, 0xED, 0x9C, 0x8F, 0x94, 0x6E, 0xA4, 0xD0, 0xAD, 0x11, 0xA4, 0xD0, 0xAD, 0x11, 0xAD, 0x31, 0xAD, 0x11, 0x9C, 0xAF, 0xA4, 0xF1, 0xBD, 0x93, 0xBD, 0x93, 0xB5, 0x73, 0xAD, 0x32, 0xAD, 0x31, 0xB5, 0x52, 0xB5, 0x52, 0xA5, 0x11, 0xAD, 0x32, 0x9C, 0x6F, 0x94, 0x6F, 0xB5, 0x53, 0xD6, 0x56, 0xCE, 0x15, 0xC5, 0xD4, 0xAD, 0x32, 0x94, 0x4F, 0x73, 0x6B, 0x73, 0x4B, 0x6B, 0x2B, 0x7B, 0x8C, 0x84, 0x0D, 0x9C, 0x90, 0x94, 0x6F, 0x84, 0x0D, 0x83, 0xCD, 0x8C, 0x0E, 0x8C, 0x0D, 0x8C, 0x0E, 0x94, 0x2E, 0x94, 0x4F, 0x8C, 0x0E, 0x94, 0x2F, 0x8C, 0x0E, 0xA4, 0xB0, 0xBD, 0x73, 0xAC, 0xF1, 0xAD, 0x11, 0xBD, 0x53, 0xBD, 0x73, 0xC5, 0xD4, 0xC5, 0xD4, 0xCD, 0xD5, 0xCD, 0xF5, 0xCD, 0xF5, 0xCD, 0xF6, 0xCE, 0x16, 0xCD, 0xF5, 0xC5, 0xD5, 0xCD, 0xF5, 0xC5, 0xD5, 0xC5, 0xB4, 0xC5, 0xD5, 0xB5, 0x53, 0xAC, 0xF1, 0xBD, 0x73, 0xB5, 0x53, 0xAD, 0x12, 0xB5, 0x53, 0xB5, 0x73, 0xBD, 0x73, 0xC5, 0xB4, 0xAC, 0xF1, 0xA4, 0xD1, 0x9C, 0x90, 0xAD, 0x12, 0xB5, 0x33, 0xAC, 0xF2, 0xAD, 0x12, 0xA4, 0xD1, 0x9C, 0xB0, 0xAD, 0x12, 0x9C, 0x90, 0xA4, 0xD1, 0x9C, 0x90, 0x94, 0x4F, 0xAD, 0x32, 0xB5, 0x52, 0xBD, 0x93, 0x73, 0x6C, 0x6B, 0x2B, 0x9C, 0xB0, 0xAD, 0x32, 0x94, 0x4E, 0x83, 0xAC, 0x94, 0x0E, 0x8C, 0x0D, 0x83, 0xAC, 0x9C, 0x6F, 0x94, 0x4E, 0xAD, 0x12, 0x9C, 0xD0, 0xAD, 0x32, 0x73, 0x8C, 0x6B, 0x0A, 0xA5, 0x11, 0xCE, 0x15, 0xCE, 0x15, 0xB5, 0x94, 0xB5, 0x94, 0xBD, 0xB4, 0xBD, 0xD5, 0xB5, 0xB5, 0xB5, 0xB5, 0xCE, 0x57, 0xCE, 0x56, 0xCE, 0x36, 0xC5, 0xD4, 0xAD, 0x32, 0xBD, 0xD4, 0xBD, 0xD4, 0xBD, 0xB4, 0xAD, 0x32, 0xC5, 0xD5, 0xA5, 0x12, 0xB5, 0x53, 0xBD, 0x52, 0xCE, 0x14, 0xD6, 0x35, 0x9C, 0x8F, 0xC6, 0x14, 0xC5, 0xF4, 0xA4, 0xD0, 0x94, 0x8F, 0xC5, 0xF5, 0xC6, 0x15, 0xA5, 0x35, 0xB5, 0xB7, 0x9D, 0x14, 0x94, 0xD3, 0x73, 0xAE, 0x63, 0x0B, 0x63, 0x2B, 0x63, 0x0A, 0x52, 0x68, 0x5A, 0x88, 0x5A, 0xA8, 0x52, 0x68, 0x5A, 0xC9, 0x63, 0x0A, 0x5A, 0xA9, 0x52, 0x47, 0x73, 0x4B, 0x8B, 0xED, 0x94, 0x6E, 0x8B, 0xED, 0x83, 0xAB, 0x83, 0xAB, 0x8B, 0xCC, 0x94, 0x0D, 0x9C, 0x2D, 0x9C, 0x4D, 0xAC, 0xEF, 0xAC, 0xCF, 0xA4, 0x8E, 0x9C, 0x4D, 0x8B, 0xCB, 0x8B, 0xAB, 0x94, 0x0D, 0xA4, 0x6E, 0x9C, 0x6D, 0xA4, 0x8E, 0xAC, 0xAF, 0xAC, 0xCF, 0xBD, 0x10, 0xBD, 0x30, 0xBD, 0x30, 0xBD, 0x51, 0xC5, 0x51, 0xBD, 0x50, 0xB5, 0x30, 0xB5, 0x10, 0xB4, 0xF0, 0xAC, 0xCF, 0xA4, 0x8E, 0x9C, 0x6E, 0x9C, 0x6E, 0xA4, 0xAE, 0xA4, 0xAE, 0x9C, 0x6E, 0xA4, 0x8E, 0xA4, 0xAF, 0x9C, 0x6E, 0x9C, 0x6E, 0x9C, 0x6E, 0x9C, 0x8F, 0x9C, 0x6E, 0xA4, 0xAF, 0xA4, 0xD0, 0xA4, 0xAF, 0x9C, 0x8F, 0x94, 0x4D, 0x9C, 0x4D, 0xBD, 0x31, 0xA4, 0xAF, 0x9C, 0x8F, 0x7B, 0x8C, 0x52, 0x68, 0x29, 0x45, 0x29, 0x45, 0x39, 0xA6, 0x42, 0x08, 0x52, 0x69, 0x5A, 0xCB, 0x4A, 0x49, 0x5A, 0xCB, 0x8C, 0x71, 0xAD, 0x35, 0xA5, 0x35, 0x9C, 0xF4, 0xBD, 0xB7, 0xD6, 0x9A, 0xB5, 0xB6, 0xBD, 0xF7, 0xAD, 0x54, 0x5A, 0x8A, 0x94, 0x6F, 0xB5, 0x73, 0xC6, 0x16, 0xC6, 0x16, 0xC6, 0x16, 0xC5, 0xF5, 0xBD, 0xD4, 0xCE, 0x76, 0xD6, 0x97, 0xD6, 0x76, 0xC5, 0xD4, 0xA4, 0xD1, 0x39, 0xC6, 0x21, 0x03, 0x39, 0xA6, 0x52, 0xAA, 0x31, 0x86, 0x21, 0x24, 0x4A, 0x49, 0x4A, 0x49, 0x73, 0x6D, 0x9C, 0x50, 0x83, 0xAD, 0xAC, 0xD2, 0xBD, 0x54, 0xD6, 0x17, 0xDE, 0x58, 0xD6, 0x37, 0xBD, 0x74, 0x7B, 0x8D, 0x94, 0x50, 0xC5, 0xB5, 0xC5, 0xD5, 0xA4, 0xB0, 0xA4, 0xD0, 0xAD, 0x11, 0x9C, 0x6F, 0x9C, 0x6F, 0x9C, 0x6F, 0x9C, 0x6F, 0x8B, 0xED, 0xA4, 0x8F, 0xBD, 0x51, 0xB5, 0x51, 0xC5, 0xD3, 0xC5, 0xF4, 0xCE, 0x14, 0xCE, 0x55, 0xC6, 0x15, 0xBD, 0xF4, 0xBD, 0xD4, 0xB5, 0x95, 0xA5, 0x35, 0x9C, 0xD3, 0x8C, 0x50, 0x6B, 0x2B, 0x73, 0x0A, 0xBD, 0x51, 0x8B, 0xCC, 0x7B, 0x8B, 0x7B, 0xAC, 0x8C, 0x0D, 0x8C, 0x0D, 0x94, 0x4F, 0x94, 0x6F, 0x9C, 0x8F, 0xA5, 0x12, 0x9C, 0xB0, 0x83, 0xEE, 0x94, 0x8F, 0xAD, 0x32, 0x8C, 0x2E, 0xA4, 0xF1, 0xB5, 0x94, 0xBD, 0xD4, 0xA4, 0xF2, 0x63, 0x0A, 0xAD, 0x53, 0x94, 0x90, 0x83, 0xEE, 0x94, 0x70, 0x94, 0x70, 0x83, 0xED, 0x84, 0x0E, 0x94, 0x6F, 0xA4, 0xD0, 0xAD, 0x11, 0xAD, 0x32, 0xB5, 0x72, 0xB5, 0x52, 0x94, 0x70, 0x9C, 0x90, 0x7B, 0xAC, 0x73, 0x6C, 0x9C, 0x8F, 0x94, 0x2D, 0xA4, 0xB0, 0xB5, 0x52, 0x9C, 0x6E, 0x94, 0x6E, 0x9C, 0x6E, 0x9C, 0x6E, 0x8C, 0x2E, 0xA4, 0xD0, 0xA4, 0xD0, 0xB5, 0x52, 0xAD, 0x11, 0x9C, 0x6F, 0xA4, 0xD0, 0x94, 0x2D, 0x8C, 0x0D, 0x8C, 0x2D, 0x83, 0xEC, 0x8C, 0x0D, 0x94, 0x4F, 0xAD, 0x32, 0xAD, 0x32, 0x83, 0xED, 0xA4, 0xD1, 0xBD, 0x94, 0xAD, 0x32, 0x8C, 0x4F, 0x63, 0x2B, 0x6B, 0x4C, 0x8C, 0x2E, 0x9C, 0xD1, 0xAD, 0x32, 0x9C, 0xB0, 0xAD, 0x53, 0xA5, 0x12, 0x9C, 0xB0, 0x7B, 0xCD, 0x7B, 0xAC, 0x94, 0x4F, 0x9C, 0xB0, 0x94, 0x4F, 0x6B, 0x0A, 0x7B, 0x8C, 0x94, 0x2E, 0xBD, 0x73, 0xB5, 0x32, 0xBD, 0x73, 0x8C, 0x0E, 0x7B, 0x6B, 0x83, 0xCD, 0xA4, 0xD1, 0x8C, 0x0E, 0x8B, 0xED, 0x8C, 0x2E, 0x94, 0x4E, 0x94, 0x4E, 0x94, 0x2E, 0x94, 0x4F, 0x9C, 0x90, 0x9C, 0x90, 0x9C, 0xB0, 0xA4, 0xD1, 0xA4, 0xB0, 0x9C, 0x6F, 0xA4, 0xD0, 0xA4, 0xD1, 0x9C, 0x90, 0xA4, 0xB0, 0xBD, 0x53, 0xB5, 0x32, 0xB5, 0x52, 0xBD, 0x93, 0xBD, 0x93, 0xB5, 0x32, 0xB5, 0x32, 0xBD, 0x94, 0xC5, 0xB4, 0xC5, 0xB4, 0xC5, 0xD4, 0xC5, 0xB4, 0xCD, 0xF5, 0xC5, 0xF5, 0xC5, 0xD5, 0xCE, 0x15, 0xC5, 0xD4, 0xB5, 0x53, 0xB5, 0x53, 0xBD, 0xB4, 0xB5, 0x53, 0xBD, 0xB4, 0xB5, 0x73, 0xA4, 0xF1, 0xA4, 0xB0, 0x9C, 0xB0, 0x94, 0x6F, 0x94, 0x4F, 0x8C, 0x0E, 0x8C, 0x2E, 0x94, 0x2E, 0xA4, 0xD1, 0x9C, 0x90, 0x9C, 0x90, 0x94, 0x70, 0x9C, 0x90, 0x9C, 0xB0, 0xA4, 0xF0, 0xAD, 0x32, 0xB5, 0x53, 0xBD, 0xB4, 0xC5, 0xF5, 0xBD, 0xD5, 0xB5, 0x94, 0xBD, 0xD5, 0xBD, 0xD5, 0xCE, 0x77, 0xD6, 0x76, 0xC5, 0xF5, 0xC5, 0xF5, 0xCE, 0x35, 0xCE, 0x35, 0xC5, 0xD5, 0xC5, 0xD5, 0xC6, 0x15, 0x9C, 0x90, 0xB5, 0x73, 0xC5, 0xB3, 0xDE, 0x55, 0xDE, 0x76, 0x9C, 0x8F, 0xC5, 0xD4, 0xB5, 0x92, 0x9C, 0xAF, 0x9C, 0x8F, 0xCE, 0x35, 0xCE, 0x35, 0xA5, 0x55, 0xAD, 0x96, 0x9D, 0x14, 0x94, 0xD3, 0x7B, 0xEF, 0x84, 0x0F, 0x94, 0x90, 0x8C, 0x4F, 0x52, 0x88, 0x6B, 0x4B, 0x73, 0x8C, 0x6B, 0x2B, 0x73, 0x8C, 0x6B, 0x4B, 0x52, 0x88, 0x6B, 0x4B, 0x73, 0x6C, 0x8C, 0x4F, 0x9C, 0xD0, 0x73, 0x8C, 0x6B, 0x0A, 0x62, 0xC9, 0x73, 0x8C, 0xAD, 0x32, 0xB5, 0x32, 0xA4, 0x8F, 0xAC, 0xAF, 0xA4, 0x6E, 0xB4, 0xF0, 0xC5, 0x72, 0xBD, 0x92, 0xB5, 0x51, 0xAC, 0xF0, 0x94, 0x4E, 0x83, 0xCC, 0x8B, 0xCC, 0x8B, 0xEC, 0x8B, 0xCB, 0x8B, 0xCB, 0x8B, 0xEB, 0x8B, 0xCB, 0x83, 0xAA, 0x83, 0x6A, 0x7B, 0x6A, 0x83, 0x8A, 0x9C, 0x4E, 0xB5, 0x10, 0xAC, 0xEF, 0xB5, 0x10, 0xB4, 0xF0, 0xAC, 0xCF, 0xB5, 0x10, 0xAC, 0xCF, 0xA4, 0x8E, 0xAC, 0xCF, 0xAC, 0xAF, 0xA4, 0x8E, 0xA4, 0x8E, 0xA4, 0x8E, 0xA4, 0xAF, 0xB4, 0xEF, 0xB4, 0xF0, 0xB4, 0xEF, 0xAC, 0xCF, 0xAC, 0xCF, 0xB4, 0xEF, 0xBD, 0x30, 0xBD, 0x51, 0xB5, 0x10, 0xB4, 0xEF, 0xAC, 0xEF, 0x94, 0x2E, 0x52, 0x68, 0x31, 0xA6, 0x39, 0xE7, 0x42, 0x07, 0x4A, 0x48, 0x4A, 0x69, 0x42, 0x08, 0x63, 0x0C, 0x7B, 0xCF, 0xAD, 0x35, 0xAD, 0x55, 0xAD, 0x56, 0xAD, 0x76, 0xBD, 0xD7, 0xBD, 0xD7, 0xC6, 0x38, 0xD6, 0x79, 0xA4, 0xD3, 0x6B, 0x2B, 0x7B, 0x8D, 0xA4, 0xF1, 0xAD, 0x31, 0xAC, 0xF1, 0xA4, 0xF0, 0x9C, 0xAF, 0xA4, 0xCF, 0xA4, 0xF0, 0x9C, 0x6E, 0x7B, 0x8B, 0xA4, 0xB0, 0x7B, 0x8C, 0x31, 0x64, 0x18, 0xE3, 0x31, 0xA5, 0x39, 0xA6, 0x31, 0xA6, 0x39, 0xC7, 0x6B, 0x4D, 0xAD, 0x55, 0xAD, 0x14, 0x9C, 0x71, 0x9C, 0x70, 0xBD, 0x74, 0xAC, 0xF2, 0xBD, 0x53, 0xD6, 0x17, 0x9C, 0x50, 0x7B, 0x8D, 0xA4, 0xD3, 0xBD, 0x75, 0xAD, 0x13, 0xAC, 0xF2, 0xAC, 0xF1, 0xAD, 0x12, 0xA4, 0xD1, 0xC5, 0xF5, 0xC5, 0xB4, 0xC5, 0xB4, 0x8C, 0x0D, 0x9C, 0x6E, 0xBD, 0x51, 0xBD, 0xB2, 0xC6, 0x14, 0xC5, 0xD3, 0xC5, 0xD3, 0xC6, 0x34, 0xC6, 0x15, 0xC6, 0x15, 0xC6, 0x15, 0xB5, 0xB6, 0xAD, 0x56, 0x9C, 0xD3, 0x83, 0xEF, 0x6B, 0x2B, 0x7B, 0x6B, 0xB5, 0x31, 0x83, 0xCB, 0x7B, 0xAC, 0x7B, 0xAC, 0x83, 0xCC, 0x7B, 0xAC, 0x83, 0xED, 0x94, 0x6F, 0x8C, 0x2E, 0xAD, 0x32, 0xA4, 0xD1, 0x83, 0xCD, 0x9C, 0xB0, 0x9C, 0xB0, 0x83, 0xEC, 0xA4, 0xF1, 0xBD, 0xB4, 0xBD, 0xD5, 0xB5, 0x53, 0x7B, 0x8C, 0xAD, 0x53, 0x9C, 0xB0, 0x9C, 0x90, 0xAD, 0x32, 0x9C, 0xB1, 0xA5, 0x12, 0x9C, 0x90, 0x94, 0x90, 0xB5, 0x53, 0xC5, 0xF5, 0xC5, 0xD4, 0xCE, 0x15, 0xB5, 0x73, 0x94, 0x6F, 0x8C, 0x0E, 0x73, 0x6C, 0x7B, 0x8C, 0x94, 0x4F, 0x8B, 0xED, 0xA4, 0xD0, 0xAD, 0x31, 0x94, 0x2D, 0x8C, 0x0C, 0x8B, 0xEC, 0x94, 0x4E, 0x83, 0xED, 0x9C, 0x8F, 0x94, 0x4E, 0xAD, 0x11, 0xA4, 0xD0, 0x8C, 0x2D, 0x8C, 0x2E, 0x83, 0xCC, 0x94, 0x4E, 0x8C, 0x2D, 0x9C, 0x8F, 0xA4, 0xF1, 0x94, 0x4F, 0xAD, 0x32, 0xAD, 0x11, 0x7B, 0xAD, 0x83, 0xEE, 0xB5, 0x94, 0xB5, 0x73, 0xA5, 0x12, 0x8C, 0x2F, 0x7B, 0xAD, 0x9C, 0xD0, 0xBD, 0xD4, 0xA5, 0x11, 0x9C, 0xD0, 0xAD, 0x52, 0xB5, 0x74, 0xB5, 0x73, 0x8C, 0x2E, 0x83, 0xEE, 0x7B, 0xCD, 0x83, 0xED, 0x83, 0xEE, 0x63, 0x0A, 0x7B, 0xAD, 0x94, 0x6F, 0xB5, 0x53, 0x9C, 0x90, 0xAD, 0x32, 0xA4, 0xD1, 0x83, 0xEE, 0x83, 0xEE, 0x94, 0x6F, 0x94, 0x6F, 0x9C, 0x90, 0x9C, 0xB0, 0x9C, 0xB0, 0xA4, 0xF1, 0x9C, 0xD1, 0x9C, 0xB0, 0x94, 0x4F, 0x9C, 0xB0, 0xA4, 0xD1, 0x9C, 0x90, 0x94, 0x6F, 0x8C, 0x2E, 0x8C, 0x0E, 0x83, 0xEE, 0x7B, 0x8C, 0x94, 0x4F, 0xB5, 0x52, 0xC5, 0xB4, 0xBD, 0x92, 0xBD, 0x72, 0xB5, 0x52, 0xB5, 0x31, 0xB5, 0x52, 0xC5, 0xB4, 0xAC, 0xF1, 0x9C, 0x6E, 0x8B, 0xED, 0x94, 0x2E, 0x9C, 0x8F, 0x94, 0x2E, 0x9C, 0x8F, 0xAD, 0x11, 0xAC, 0xF1, 0xA4, 0xF0, 0xAD, 0x11, 0x94, 0x4E, 0xAD, 0x32, 0xAD, 0x12, 0xB5, 0x32, 0xBD, 0x93, 0xCE, 0x15, 0xAD, 0x12, 0x94, 0x50, 0x9C, 0xB0, 0xA4, 0xB1, 0xAC, 0xF1, 0xB5, 0x32, 0xC5, 0xB5, 0xC5, 0xB5, 0xC5, 0xB4, 0xCD, 0xF5, 0xCD, 0xF5, 0xC5, 0xF5, 0xC5, 0xD5, 0xBD, 0xB4, 0xBD, 0xD4, 0xBD, 0xB4, 0xBD, 0xB4, 0xBD, 0xB4, 0xBD, 0xB4, 0xBD, 0x94, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0x52, 0xA4, 0xD1, 0xA4, 0xD0, 0xA4, 0xD0, 0xA4, 0xD0, 0x9C, 0xB0, 0x9C, 0xB0, 0x9C, 0x8F, 0xA4, 0xF1, 0xAD, 0x32, 0xB5, 0x31, 0xBD, 0x92, 0xB5, 0x52, 0x9C, 0x8F, 0xA4, 0xD1, 0xA4, 0xD0, 0x94, 0x6F, 0x9C, 0x8F, 0xAD, 0x11, 0xA4, 0xF0, 0xA5, 0x75, 0xAD, 0x76, 0x9D, 0x14, 0x94, 0xD3, 0x7B, 0xCF, 0x8C, 0x50, 0x94, 0xB0, 0x8C, 0x2F, 0x73, 0x6C, 0x9C, 0xB1, 0x7B, 0xCD, 0x7B, 0xCD, 0x6B, 0x4B, 0x4A, 0x68, 0x6B, 0x4C, 0x7B, 0xEE, 0x84, 0x0F, 0x94, 0x90, 0x7B, 0xCD, 0x83, 0xED, 0x8C, 0x4F, 0xA4, 0xF2, 0xB5, 0x73, 0xAD, 0x53, 0xAD, 0x32, 0x9C, 0x8F, 0xB4, 0xF0, 0xA4, 0x8E, 0xD6, 0x14, 0xD5, 0xF3, 0xD6, 0x13, 0xD6, 0x54, 0xD6, 0x34, 0xD6, 0x35, 0xC5, 0xF4, 0xBD, 0x93, 0xB5, 0x52, 0xA4, 0xAF, 0xBD, 0x93, 0xBD, 0x93, 0xAD, 0x11, 0xA4, 0xD0, 0x8C, 0x2E, 0x83, 0xCD, 0x94, 0x6F, 0x9C, 0x90, 0xAD, 0x10, 0xB5, 0x10, 0xBD, 0x71, 0xDE, 0x55, 0xB5, 0x10, 0xB4, 0xCF, 0x7B, 0x6A, 0x7B, 0x6B, 0x5A, 0x88, 0x4A, 0x06, 0x49, 0xE6, 0x4A, 0x27, 0x4A, 0x27, 0x62, 0xA9, 0x62, 0xA8, 0x6B, 0x0A, 0x73, 0x2A, 0x73, 0x4A, 0x7B, 0x4A, 0x73, 0x2A, 0x7B, 0x6A, 0x7B, 0x8A, 0x73, 0x09, 0x7B, 0x4A, 0x83, 0xAB, 0x9C, 0x4E, 0x8C, 0x0E, 0x4A, 0x48, 0x39, 0xE7, 0x42, 0x07, 0x31, 0xA6, 0x42, 0x07, 0x42, 0x08, 0x5A, 0xCB, 0x6B, 0x4D, 0x94, 0x92, 0xA5, 0x35, 0xB5, 0x96, 0xAD, 0x56, 0xA5, 0x35, 0xAD, 0x55, 0xC6, 0x38, 0xDE, 0xBA, 0x94, 0x50, 0x41, 0xE7, 0x7B, 0xAE, 0x94, 0x2E, 0xBD, 0x72, 0xBD, 0x51, 0xBD, 0x30, 0xBD, 0x51, 0xC5, 0x71, 0xC5, 0x91, 0xBD, 0x71, 0xC5, 0x72, 0xB5, 0x10, 0xB5, 0x10, 0x8B, 0xED, 0x21, 0x03, 0x21, 0x03, 0x63, 0x0B, 0x42, 0x07, 0x31, 0xA6, 0x4A, 0x48, 0x9C, 0xB2, 0x9C, 0x92, 0x9C, 0x71, 0x8B, 0xEF, 0xAC, 0xF2, 0xAC, 0xD2, 0x9C, 0x2F, 0x9C, 0x2F, 0x73, 0x0B, 0x94, 0x10, 0x83, 0xCF, 0x7B, 0x8E, 0xB5, 0x34, 0xBD, 0x75, 0xB5, 0x55, 0xCE, 0x38, 0xA4, 0xD2, 0xA5, 0x12, 0xBD, 0xB4, 0xBD, 0x93, 0x8C, 0x0D, 0xAC, 0xCF, 0xAC, 0xEF, 0xA4, 0xCF, 0xA4, 0xF0, 0x94, 0x4E, 0x83, 0xCC, 0x8C, 0x2D, 0x9C, 0xD0, 0xB5, 0x73, 0xAD, 0x52, 0xB5, 0xB5, 0xAD, 0x76, 0x9C, 0xF4, 0x83, 0xEF, 0x7B, 0x8C, 0x8B, 0xED, 0xB4, 0xF0, 0x94, 0x0D, 0x7B, 0xAC, 0x7B, 0xAC, 0x8C, 0x0D, 0x73, 0x6B, 0x73, 0x6B, 0x7B, 0xAC, 0x73, 0x4B, 0xA4, 0xF1, 0x8C, 0x0E, 0x94, 0x6F, 0xAD, 0x52, 0xA4, 0xD1, 0x83, 0xED, 0xAD, 0x53, 0xCE, 0x16, 0xC5, 0xD5, 0xC5, 0xF5, 0xB5, 0x74, 0xCE, 0x36, 0xBD, 0xD4, 0xA4, 0xF1, 0x9C, 0x90, 0x94, 0x6F, 0x9C, 0x90, 0xA4, 0xF1, 0xAD, 0x32, 0xCE, 0x36, 0xD6, 0x76, 0xCE, 0x36, 0xCE, 0x15, 0xA4, 0xD1, 0x8C, 0x2E, 0x7B, 0xAD, 0x73, 0x4B, 0x7B, 0x8C, 0x8B, 0xCD, 0x94, 0x0D, 0xA4, 0xF0, 0xAD, 0x10, 0x94, 0x2D, 0x8B, 0xEC, 0x94, 0x2D, 0x9C, 0x8F, 0x8C, 0x0D, 0x9C, 0x8F, 0x94, 0x8F, 0xA5, 0x11, 0x94, 0x4E, 0x7B, 0xCB, 0x8C, 0x0D, 0x8B, 0xED, 0x83, 0xEC, 0x7B, 0x8B, 0x94, 0x6E, 0xA4, 0xF0, 0x9C, 0xD0, 0xB5, 0x53, 0xA4, 0xF1, 0x7B, 0xAD, 0xA4, 0xF1, 0xBD, 0xD4, 0xBD, 0xD5, 0xAD, 0x53, 0x9C, 0xD1, 0x8C, 0x4F, 0x8C, 0x4F, 0xA4, 0xD1, 0x8C, 0x0E, 0x94, 0x6F, 0xA4, 0xF1, 0xB5, 0x73, 0xBD, 0xB4, 0x94, 0x90, 0x94, 0x90, 0x9C, 0xF1, 0x94, 0xB0, 0x9C, 0xB1, 0x7B, 0xCD, 0x83, 0xEE, 0x9C, 0xB0, 0xAD, 0x32, 0x73, 0x8C, 0x7B, 0xCD, 0x84, 0x0E, 0x9C, 0xF2, 0xA5, 0x12, 0xAD, 0x53, 0xAD, 0x53, 0xAD, 0x73, 0xB5, 0x74, 0xAD, 0x53, 0xAD, 0x33, 0xA4, 0xF1, 0xA4, 0xF2, 0x94, 0x70, 0x8C, 0x4F, 0x94, 0x6F, 0x9C, 0xB0, 0xA4, 0xF1, 0x94, 0x6F, 0x8C, 0x4F, 0x9C, 0xB1, 0x83, 0xEE, 0x8C, 0x2E, 0xAD, 0x12, 0x9C, 0xAF, 0xAD, 0x10, 0xAD, 0x10, 0x9C, 0x8F, 0xAC, 0xF1, 0xBD, 0x93, 0xBD, 0xB3, 0xBD, 0x93, 0xAD, 0x31, 0x94, 0x4E, 0x8C, 0x4E, 0x8C, 0x2E, 0x7B, 0xAC, 0x8C, 0x2E, 0x9C, 0xD0, 0x9C, 0xB0, 0xB5, 0x73, 0xC5, 0xF5, 0xB5, 0x73, 0xAD, 0x52, 0xAD, 0x11, 0xAD, 0x32, 0x9C, 0xB0, 0xB5, 0x52, 0x73, 0x4B, 0x5A, 0xA9, 0x73, 0x4B, 0x83, 0x8C, 0x7B, 0x8C, 0x83, 0xCD, 0x9C, 0x6F, 0xA4, 0xB0, 0xA4, 0xD1, 0xB5, 0x53, 0xB5, 0x53, 0xA4, 0xD1, 0x9C, 0xB0, 0x9C, 0xB0, 0xA4, 0xD0, 0xA4, 0xB0, 0x9C, 0x70, 0x9C, 0x90, 0xA4, 0xB1, 0xA4, 0xD1, 0xAC, 0xF1, 0xAD, 0x12, 0xA4, 0xF1, 0xB5, 0x32, 0xB5, 0x32, 0x94, 0x4F, 0x83, 0xED, 0x9C, 0x8F, 0xA4, 0xF1, 0xAD, 0x12, 0xB5, 0x53, 0xB5, 0x53, 0xB5, 0x32, 0xB5, 0x32, 0xAD, 0x11, 0xAD, 0x32, 0xB5, 0x52, 0xB5, 0x73, 0xA4, 0xF1, 0xB5, 0x73, 0xBD, 0x73, 0xBD, 0x94, 0xAD, 0x76, 0xB5, 0xD7, 0x9D, 0x14, 0x94, 0xD3, 0x7B, 0xCF, 0x84, 0x50, 0x84, 0x4F, 0x84, 0x2E, 0x9C, 0xD1, 0x84, 0x2F, 0x6B, 0x8C, 0x94, 0x90, 0x7B, 0xEE, 0x73, 0xAE, 0x8C, 0x70, 0x94, 0x91, 0x94, 0xB2, 0xA4, 0xF2, 0x94, 0x70, 0x9C, 0xD1, 0x7B, 0xEE, 0x9C, 0xB1, 0xBD, 0xD5, 0xAD, 0x53, 0xBD, 0x94, 0xA4, 0xAF, 0xB4, 0xF0, 0xAC, 0xCF, 0xDE, 0x55, 0xB4, 0xEF, 0xBD, 0x50, 0xC5, 0x91, 0xC5, 0xB2, 0xCD, 0xD3, 0xCD, 0xD3, 0xC5, 0xD3, 0xBD, 0x92, 0xC5, 0xD4, 0xCE, 0x35, 0xD6, 0x35, 0xC5, 0xD4, 0xCE, 0x15, 0xBD, 0x93, 0xAD, 0x32, 0xBD, 0xB4, 0xC5, 0xD4, 0xCD, 0xF4, 0xD6, 0x35, 0xCD, 0xF3, 0xDE, 0x75, 0xBD, 0x30, 0xB5, 0x10, 0xA4, 0xB0, 0x94, 0x6F, 0x7B, 0xCD, 0x7B, 0xAD, 0x84, 0x0F, 0x8C, 0x4F, 0x83, 0xEE, 0x8C, 0x2F, 0x7B, 0xCD, 0x83, 0xCD, 0x7B, 0x8C, 0x7B, 0xAD, 0x8C, 0x2E, 0x7B, 0x8C, 0x6B, 0x0A, 0x73, 0x6B, 0x7B, 0x8C, 0x8C, 0x0D, 0x9C, 0xB0, 0xA4, 0xD1, 0xAD, 0x12, 0x73, 0x4B, 0x4A, 0x27, 0x4A, 0x28, 0x4A, 0x48, 0x4A, 0x48, 0x39, 0xC6, 0x42, 0x28, 0x5A, 0xCB, 0x7B, 0xCF, 0x9C, 0xF4, 0xAD, 0x76, 0xAD, 0x55, 0x9C, 0xD3, 0x9C, 0xD4, 0xB5, 0xB7, 0xCE, 0x79, 0x7B, 0xAE, 0x42, 0x08, 0x39, 0xA6, 0x62, 0xCA, 0x83, 0xAC, 0x83, 0xAB, 0x94, 0x0D, 0xAC, 0xD0, 0xAC, 0xCF, 0xAC, 0xCF, 0x83, 0xAA, 0x94, 0x2C, 0x9C, 0x4D, 0x9C, 0x6E, 0xA4, 0x8F, 0x41, 0xE6, 0x5A, 0xCA, 0x7B, 0x8C, 0x31, 0x65, 0x39, 0xA6, 0x31, 0xA5, 0x42, 0x08, 0xA4, 0xF3, 0x7B, 0x6D, 0xAC, 0xF4, 0xA4, 0xF3, 0xA4, 0xB2, 0x7B, 0x6D, 0x39, 0x86, 0x4A, 0x28, 0x7B, 0xAE, 0x4A, 0x29, 0x5A, 0x8B, 0xBD, 0x96, 0xB5, 0x96, 0xCE, 0x59, 0xBD, 0xF8, 0xF7, 0x7D, 0xBD, 0xF7, 0x73, 0x6D, 0xBD, 0x94, 0xAD, 0x11, 0xBD, 0x30, 0xB5, 0x10, 0xAC, 0xCF, 0xAC, 0xEF, 0xAC, 0xEF, 0xB4, 0xCF, 0xB4, 0xEF, 0xAC, 0xCF, 0xA4, 0xAF, 0x9C, 0x6F, 0xBD, 0xB6, 0xBD, 0xD7, 0xA5, 0x14, 0xAC, 0xF2, 0xA4, 0xAF, 0xB5, 0x10, 0xB4, 0xEF, 0x94, 0x0D, 0x8B, 0xEC, 0x83, 0xEC, 0x8C, 0x0D, 0x7B, 0x8B, 0x7B, 0xAC, 0x7B, 0x8B, 0x94, 0x2E, 0xB5, 0x53, 0x73, 0x6C, 0x83, 0xCD, 0x9C, 0x90, 0x9C, 0xB0, 0x8C, 0x0E, 0xA4, 0xF1, 0xBD, 0xB4, 0xAD, 0x32, 0x94, 0x90, 0xA4, 0xD1, 0xCE, 0x16, 0xA5, 0x12, 0x83, 0xED, 0x8C, 0x0E, 0x8C, 0x2E, 0xA4, 0xD1, 0xB5, 0x53, 0xCE, 0x16, 0xC6, 0x15, 0xDE, 0x97, 0xD6, 0x76, 0xC5, 0xF5, 0x73, 0x6B, 0x83, 0xCD, 0x7B, 0x8D, 0x4A, 0x07, 0x6B, 0x2B, 0x83, 0x8C, 0x94, 0x4E, 0xAD, 0x11, 0xAC, 0xF0, 0xAC, 0xD0, 0xAD, 0x10, 0xB5, 0x72, 0xB5, 0x72, 0xAD, 0x31, 0xAD, 0x31, 0xAD, 0x32, 0xAD, 0x11, 0x94, 0x6E, 0x94, 0x4E, 0x94, 0x4E, 0x9C, 0x8F, 0x94, 0x2E, 0x83, 0xED, 0x7B, 0xAC, 0xA4, 0xF0, 0xA4, 0xD1, 0xAD, 0x12, 0x9C, 0x90, 0x63, 0x2B, 0xA5, 0x33, 0xBD, 0xD4, 0xBD, 0xB5, 0xAD, 0x53, 0xA5, 0x33, 0x94, 0x70, 0x94, 0x6F, 0x8C, 0x2F, 0x84, 0x0E, 0xA5, 0x12, 0xB5, 0xB4, 0xC5, 0xF5, 0xBD, 0xD4, 0xA5, 0x32, 0xAD, 0x53, 0xAD, 0x53, 0xA5, 0x32, 0xA5, 0x12, 0x94, 0x90, 0x8C, 0x70, 0x9C, 0x6F, 0xA4, 0xF1, 0x7B, 0xEE, 0x94, 0x90, 0x9C, 0xF2, 0xAD, 0x53, 0xAD, 0x53, 0xB5, 0xB4, 0xB5, 0xB4, 0xB5, 0xB4, 0xBD, 0xB5, 0xB5, 0xB4, 0xAD, 0x73, 0xB5, 0x73, 0xB5, 0x94, 0xA5, 0x12, 0x94, 0xB0, 0xAD, 0x33, 0xB5, 0x74, 0xBD, 0xD5, 0xAD, 0x33, 0x94, 0x90, 0x9C, 0xB1, 0x8C, 0x4F, 0x94, 0x6F, 0xAD, 0x32, 0xAD, 0x31, 0xAD, 0x31, 0xA4, 0xCF, 0x94, 0x6E, 0xB5, 0x72, 0xB5, 0x93, 0xBD, 0xD4, 0xBD, 0xD4, 0xBD, 0xB4, 0xA4, 0xF1, 0xAD, 0x53, 0xA5, 0x12, 0x8C, 0x6F, 0x94, 0x70, 0x9C, 0xD1, 0xA4, 0xF1, 0xC5, 0xD5, 0xCE, 0x36, 0xBD, 0xB4, 0xC5, 0xF4, 0xBD, 0x93, 0xB5, 0x73, 0x9C, 0xB0, 0xA4, 0xB0, 0x6A, 0xEA, 0x83, 0xCE, 0x7B, 0x8C, 0x8B, 0xED, 0x83, 0xED, 0x7B, 0xAC, 0x83, 0xAC, 0x9C, 0x6F, 0xA4, 0xF1, 0xB5, 0x73, 0xB5, 0x73, 0xBD, 0x94, 0xB5, 0x73, 0xB5, 0x53, 0xB5, 0x73, 0xBD, 0x93, 0xAD, 0x12, 0xA4, 0xF1, 0x94, 0x2F, 0x83, 0xCD, 0x94, 0x4F, 0x73, 0x6C, 0x62, 0xCA, 0x7B, 0xAD, 0x7B, 0x8C, 0x6B, 0x0B, 0x62, 0xA9, 0x9C, 0x90, 0x9C, 0xB0, 0xA4, 0xD1, 0xAD, 0x12, 0x9C, 0x90, 0x9C, 0xB0, 0x9C, 0x8F, 0x83, 0xED, 0x94, 0x4F, 0x94, 0x6F, 0x94, 0x4F, 0x8C, 0x0E, 0xB5, 0x53, 0xAC, 0xF1, 0xA4, 0xF1, 0xA5, 0x55, 0xAD, 0x76, 0x9D, 0x14, 0x94, 0xD3, 0x73, 0xCF, 0x84, 0x2F, 0x94, 0xB1, 0x9C, 0xD1, 0x9C, 0xF2, 0x84, 0x0E, 0x8C, 0x50, 0x63, 0x2B, 0x6B, 0x4C, 0x9C, 0xD2, 0x9C, 0xD2, 0x8C, 0x50, 0x7C, 0x0F, 0xAD, 0x33, 0x94, 0x91, 0xA4, 0xF2, 0x83, 0xEE, 0xB5, 0x94, 0xB5, 0x94, 0xA4, 0xF1, 0xBD, 0x93, 0x9C, 0x8F, 0xB5, 0x10, 0xAC, 0xCF, 0xD6, 0x13, 0xAC, 0xEF, 0x9C, 0x4D, 0xAC, 0xEF, 0xBD, 0x71, 0xC5, 0x92, 0xBD, 0x71, 0xC5, 0xB2, 0xB5, 0x51, 0xCE, 0x35, 0xCE, 0x35, 0xD6, 0x35, 0xCE, 0x15, 0xCE, 0x15, 0xC5, 0xF5, 0xAD, 0x12, 0xBD, 0x93, 0xCE, 0x14, 0xB5, 0x31, 0xAC, 0xCF, 0xB5, 0x10, 0xD6, 0x34, 0xAC, 0xCF, 0xB5, 0x10, 0xB5, 0x52, 0x84, 0x0E, 0x8C, 0x4F, 0xA4, 0xF2, 0xA4, 0xD1, 0xAD, 0x32, 0x7B, 0xCD, 0x94, 0x90, 0x94, 0x90, 0xA4, 0xF2, 0x8C, 0x50, 0x8C, 0x70, 0x8C, 0x4F, 0x8C, 0x2F, 0x8C, 0x4F, 0x9C, 0xB0, 0x8C, 0x2E, 0x9C, 0xB0, 0xB5, 0x93, 0xB5, 0x73, 0xB5, 0x73, 0xA4, 0xD1, 0x52, 0x68, 0x42, 0x07, 0x41, 0xE7, 0x41, 0xE7, 0x39, 0xC6, 0x31, 0xA6, 0x42, 0x49, 0x63, 0x2C, 0x8C, 0x51, 0xAD, 0x76, 0xAD, 0x76, 0x9C, 0xB3, 0x8C, 0x72, 0xB5, 0x96, 0xD6, 0x9A, 0xB5, 0x96, 0x6B, 0x4E, 0x4A, 0x29, 0x5A, 0x8A, 0x7B, 0x8D, 0x83, 0xCD, 0x7B, 0xCD, 0x7B, 0xAC, 0x8B, 0xED, 0xAC, 0xF0, 0x9C, 0x8F, 0x9C, 0xAF, 0xAD, 0x10, 0xAC, 0xCF, 0x9C, 0x4E, 0x7B, 0xAC, 0x73, 0x8C, 0x21, 0x03, 0x21, 0x03, 0x31, 0x85, 0x31, 0xA6, 0x29, 0x45, 0x5A, 0xCA, 0xA4, 0xD3, 0xAC, 0xF4, 0xCE, 0x38, 0x7B, 0x8D, 0x41, 0xE7, 0x29, 0x04, 0x29, 0x45, 0x6B, 0x2C, 0x7B, 0xCF, 0x7B, 0x8F, 0xB5, 0x76, 0xC5, 0xF8, 0xCE, 0x39, 0xB5, 0xB7, 0xCE, 0x9A, 0xEF, 0x7D, 0xA4, 0xF4, 0xBD, 0xB5, 0xE6, 0xF9, 0xD5, 0xF3, 0xDE, 0x54, 0xE6, 0x75, 0xDE, 0x54, 0xC5, 0x71, 0xCD, 0xB2, 0xDE, 0x34, 0xC5, 0x71, 0xBD, 0x30, 0xA4, 0xD0, 0xCE, 0x38, 0xA5, 0x14, 0xA5, 0x13, 0xA4, 0xB0, 0xAC, 0xCF, 0xB4, 0xEF, 0xB5, 0x10, 0xB5, 0x30, 0xBD, 0x51, 0xC5, 0x71, 0xCD, 0x92, 0xC5, 0x71, 0xC5, 0x71, 0xBD, 0x51, 0xC5, 0x93, 0xC5, 0xF5, 0xC5, 0xF6, 0xBD, 0xB5, 0xB5, 0x74, 0xAD, 0x33, 0xAD, 0x12, 0xA4, 0xF2, 0x9C, 0x90, 0xA4, 0xD1, 0xAD, 0x32, 0xAD, 0x12, 0xA4, 0xD1, 0x9C, 0x90, 0x94, 0x90, 0x94, 0x70, 0x8C, 0x2F, 0x8C, 0x2F, 0x83, 0xEE, 0x8C, 0x2E, 0x8C, 0x0E, 0x9C, 0x90, 0x94, 0x4F, 0x83, 0xED, 0x7B, 0x8C, 0x8C, 0x2F, 0x9C, 0x91, 0x94, 0x50, 0x83, 0xCE, 0x7B, 0x8D, 0x73, 0x6B, 0x7B, 0x8B, 0x7B, 0xAB, 0x8C, 0x0D, 0x9C, 0x8F, 0xA4, 0xCF, 0xA4, 0xD0, 0xB5, 0x52, 0xBD, 0xB3, 0xBD, 0xB3, 0xBD, 0x93, 0xB5, 0x72, 0xAD, 0x10, 0xAD, 0x10, 0xBD, 0x52, 0xAD, 0x10, 0xAD, 0x11, 0x94, 0x6E, 0x9C, 0xB0, 0xAD, 0x32, 0xAD, 0x12, 0x84, 0x0E, 0x63, 0x2B, 0xBD, 0xF5, 0xBD, 0xD4, 0xCE, 0x56, 0xBD, 0xD4, 0xAD, 0x73, 0x8C, 0x2F, 0x73, 0x8C, 0x7B, 0xAC, 0x8C, 0x2E, 0xA5, 0x12, 0xC5, 0xF5, 0xBD, 0xB4, 0xBD, 0xB4, 0xA5, 0x12, 0x9C, 0xF2, 0xB5, 0xB5, 0xAD, 0x73, 0xAD, 0x74, 0xAD, 0x53, 0xA4, 0xF1, 0x9C, 0x90, 0xA4, 0xD1, 0x8C, 0x4F, 0x9C, 0xD1, 0xA5, 0x12, 0xA5, 0x12, 0xA5, 0x32, 0xB5, 0x94, 0xC5, 0xF6, 0xBD, 0xD5, 0xBD, 0xB4, 0xBD, 0xD5, 0xBD, 0xD5, 0xBD, 0xF5, 0xC6, 0x16, 0xB5, 0x94, 0xB5, 0x94, 0xBD, 0xD5, 0xBD, 0xD5, 0xC6, 0x36, 0xBD, 0xF5, 0x9C, 0xF2, 0xA4, 0xF1, 0x94, 0x6F, 0x9C, 0xB0, 0xB5, 0x73, 0xB5, 0x52, 0xAD, 0x11, 0xAD, 0x32, 0xAD, 0x52, 0xC5, 0xF5, 0xC5, 0xD4, 0xBD, 0x93, 0xAD, 0x52, 0xBD, 0xB4, 0xAD, 0x12, 0xA4, 0xF1, 0x9C, 0xF1, 0x94, 0xB1, 0x9C, 0xD1, 0xAD, 0x74, 0xAD, 0x53, 0xC6, 0x36, 0xCE, 0x35, 0xBD, 0xD4, 0xC6, 0x15, 0xC5, 0xF5, 0xBD, 0xD4, 0x94, 0x90, 0xA4, 0xD1, 0x73, 0x4B, 0x8C, 0x2F, 0x83, 0xCD, 0x94, 0x4E, 0x83, 0xCD, 0x83, 0xCD, 0x94, 0x4F, 0x9C, 0xB0, 0xA4, 0xD0, 0xA4, 0xF1, 0x94, 0x6F, 0x83, 0xED, 0x83, 0xCD, 0x7B, 0xCC, 0x83, 0xED, 0x94, 0x4F, 0x94, 0x6F, 0x8C, 0x2E, 0x8C, 0x2E, 0x94, 0x4F, 0xA4, 0xD1, 0x8C, 0x2F, 0x73, 0x6C, 0x73, 0x4C, 0x4A, 0x28, 0x52, 0x48, 0x73, 0x4C, 0xAD, 0x12, 0x94, 0x6F, 0xAD, 0x12, 0xB5, 0x53, 0x9C, 0x90, 0xA4, 0xF1, 0xA4, 0xF1, 0x94, 0x6F, 0xAD, 0x11, 0xA4, 0xF1, 0xAD, 0x32, 0x94, 0x6F, 0xB5, 0x53, 0xB5, 0x73, 0x9C, 0xB0, 0xA5, 0x55, 0xA5, 0x35, 0x9D, 0x14, 0x94, 0xD3, 0x73, 0xCE, 0x84, 0x50, 0x94, 0x90, 0x94, 0x90, 0x9C, 0xD1, 0x9C, 0xB1, 0x94, 0x90, 0x84, 0x0E, 0x6B, 0x6C, 0x9C, 0xD2, 0x94, 0x71, 0x94, 0x90, 0x8C, 0x70, 0xAD, 0x54, 0x9C, 0xD1, 0xAD, 0x33, 0xBD, 0xB4, 0xBD, 0xD4, 0xB5, 0x73, 0xB5, 0x93, 0xC5, 0xD5, 0x9C, 0x6F, 0xB4, 0xF0, 0xA4, 0x8E, 0xD5, 0xF3, 0xBD, 0x51, 0xB4, 0xEF, 0x8B, 0xAA, 0x9C, 0x6E, 0xAC, 0xCF, 0xB5, 0x51, 0xC5, 0xB3, 0xC5, 0xB3, 0xD6, 0x35, 0xCE, 0x35, 0xCE, 0x15, 0xCD, 0xF4, 0xD6, 0x36, 0xCD, 0xF5, 0xBD, 0x72, 0xC5, 0xD4, 0xD6, 0x35, 0xC5, 0x92, 0xA4, 0xAE, 0x9C, 0x2D, 0xD5, 0xF3, 0xAC, 0xCE, 0xBD, 0x92, 0xBD, 0x93, 0xAD, 0x12, 0xAD, 0x32, 0xBD, 0xB5, 0xB5, 0x73, 0xBD, 0xB5, 0xB5, 0x53, 0xAD, 0x33, 0xB5, 0x73, 0xB5, 0x73, 0x9C, 0xD1, 0xA4, 0xF2, 0xB5, 0x53, 0xB5, 0x73, 0x7B, 0xCD, 0x9C, 0xD1, 0xAD, 0x32, 0xAD, 0x12, 0xBD, 0x93, 0xB5, 0x52, 0xC5, 0xD4, 0xA4, 0xD1, 0x7B, 0xCD, 0x42, 0x06, 0x39, 0xA6, 0x42, 0x07, 0x4A, 0x68, 0x42, 0x08, 0x4A, 0x49, 0x5A, 0xCB, 0x73, 0x8E, 0x8C, 0x71, 0x94, 0xB3, 0x84, 0x10, 0xA5, 0x34, 0xB5, 0x96, 0xA5, 0x14, 0xBD, 0xF7, 0xA5, 0x14, 0x94, 0x71, 0x9C, 0xB1, 0xA4, 0xD2, 0xAD, 0x33, 0xA5, 0x12, 0x7B, 0xCD, 0x6B, 0x4B, 0xAD, 0x11, 0xB5, 0x51, 0xA4, 0xCF, 0xBD, 0x92, 0xB5, 0x31, 0x9C, 0x6E, 0x94, 0x2E, 0x9C, 0x90, 0x6B, 0x4B, 0x5A, 0xAA, 0x6B, 0x2B, 0x41, 0xE7, 0x39, 0xE7, 0x29, 0x24, 0x4A, 0x28, 0x8C, 0x30, 0xAD, 0x13, 0x41, 0xE6, 0x18, 0xC2, 0x29, 0x45, 0x39, 0xA6, 0x4A, 0x49, 0x7B, 0xAE, 0x52, 0x8A, 0x6B, 0x2D, 0x84, 0x11, 0xAD, 0x56, 0xD6, 0x9B, 0xCE, 0x7A, 0xBD, 0xB7, 0x94, 0x71, 0x8C, 0x50, 0xCE, 0x17, 0xA4, 0xB0, 0xB5, 0x51, 0xC5, 0xB2, 0xBD, 0x51, 0xB4, 0xEF, 0x9C, 0x4C, 0xA4, 0xAE, 0xB5, 0x0F, 0xAC, 0xAF, 0x83, 0xEE, 0xB5, 0x95, 0x5A, 0xCB, 0x84, 0x10, 0x5A, 0xA9, 0x5A, 0x88, 0x62, 0xE9, 0x6B, 0x0A, 0x7B, 0x6B, 0x83, 0xAB, 0x94, 0x0D, 0xA4, 0x8F, 0xB5, 0x10, 0xAD, 0x0F, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0xD0, 0xA4, 0xD1, 0xAD, 0x32, 0xAD, 0x12, 0xB5, 0x33, 0xB5, 0x74, 0xBD, 0x94, 0xB5, 0x33, 0xB5, 0x73, 0xAD, 0x12, 0xB5, 0x33, 0xBD, 0xB4, 0xC5, 0xD5, 0xC5, 0xD5, 0xB5, 0x73, 0xB5, 0x94, 0xBD, 0xB5, 0xBD, 0x94, 0xBD, 0x93, 0xBD, 0x94, 0xBD, 0xB5, 0xBD, 0xB4, 0xBD, 0xB4, 0xC5, 0xD5, 0xC5, 0xB5, 0xC5, 0xD5, 0xC5, 0xF6, 0xC5, 0xF6, 0xBD, 0xD5, 0xB5, 0x53, 0xAD, 0x12, 0x9C, 0xB0, 0x94, 0x6F, 0x8C, 0x0E, 0x83, 0xEE, 0x8B, 0xEE, 0x83, 0xED, 0x83, 0xED, 0x8C, 0x0D, 0x8B, 0xED, 0x83, 0xCD, 0x7B, 0xAC, 0x83, 0xCC, 0x83, 0xCC, 0x7B, 0xAB, 0x8B, 0xED, 0x83, 0xCC, 0x83, 0xAC, 0xAD, 0x32, 0x9C, 0xB0, 0x8C, 0x4F, 0x84, 0x2E, 0x9C, 0xF1, 0xA4, 0xF1, 0xBD, 0xD4, 0xA4, 0xF1, 0xB5, 0x73, 0x7B, 0xAD, 0x6B, 0x6C, 0x73, 0x6C, 0x8C, 0x4F, 0xAD, 0x53, 0xCE, 0x36, 0xCE, 0x36, 0xC6, 0x16, 0xB5, 0x94, 0xB5, 0xB4, 0xBD, 0xF5, 0xC5, 0xF5, 0xBD, 0xD5, 0xA5, 0x32, 0x9C, 0xB0, 0x94, 0x6F, 0xA4, 0xD1, 0x9C, 0xB1, 0xA5, 0x12, 0xAD, 0x53, 0xAD, 0x53, 0x9C, 0xF2, 0xB5, 0x73, 0xB5, 0x94, 0xBD, 0xD5, 0xB5, 0x73, 0xB5, 0x74, 0xB5, 0x94, 0xBD, 0xB4, 0xBD, 0xD5, 0xB5, 0x94, 0xB5, 0x73, 0xBD, 0xB4, 0xBD, 0xD5, 0xC5, 0xF5, 0xBD, 0xB5, 0xA4, 0xF2, 0xA5, 0x32, 0x9C, 0xD1, 0x8C, 0x2F, 0xB5, 0x73, 0xAD, 0x31, 0xAD, 0x11, 0xAD, 0x52, 0xB5, 0x93, 0xBD, 0xB4, 0xBD, 0x93, 0xB5, 0x73, 0xAD, 0x52, 0xBD, 0xB4, 0xAD, 0x32, 0x9C, 0xB0, 0x8C, 0x4E, 0x7B, 0xCD, 0x94, 0x90, 0xB5, 0x94, 0xAD, 0x53, 0xC6, 0x36, 0xC6, 0x35, 0xBD, 0xB4, 0xC6, 0x15, 0xC5, 0xF4, 0xAD, 0x32, 0x94, 0x8F, 0xA5, 0x11, 0x8C, 0x0E, 0x94, 0x4F, 0x8C, 0x0E, 0x94, 0x4F, 0x8C, 0x2F, 0x94, 0x2F, 0x9C, 0x90, 0xA4, 0xF1, 0xA5, 0x11, 0xBD, 0xB4, 0xA4, 0xF1, 0x7B, 0xCC, 0x84, 0x0D, 0x83, 0xCD, 0x94, 0x6F, 0xA4, 0xD1, 0xB5, 0x93, 0x9C, 0xB0, 0x9C, 0xB0, 0xA4, 0xD1, 0xB5, 0x53, 0xA4, 0xF1, 0x7B, 0x8C, 0x7B, 0xAE, 0x6B, 0x0C, 0x7B, 0x8D, 0x94, 0x71, 0xB5, 0x94, 0x9C, 0xB1, 0xB5, 0x73, 0xB5, 0x52, 0xAC, 0xF1, 0xB5, 0x73, 0xBD, 0xB3, 0xA4, 0xD0, 0xC5, 0xB4, 0xBD, 0x93, 0xBD, 0x93, 0xA4, 0xD0, 0xBD, 0x94, 0xAD, 0x12, 0xA4, 0xD0, 0xA5, 0x55, 0xA5, 0x35, 0x9D, 0x14, 0x9C, 0xD3, 0x5A, 0xEB, 0x5A, 0xC9, 0x6B, 0x2B, 0x6B, 0x4B, 0x73, 0x8C, 0x7B, 0xCD, 0x84, 0x0E, 0x84, 0x0E, 0x84, 0x0E, 0x94, 0x90, 0x8C, 0x50, 0x94, 0x70, 0x94, 0x90, 0x9C, 0xD1, 0x9C, 0xF2, 0xA5, 0x12, 0xAD, 0x73, 0xB5, 0x93, 0xB5, 0x73, 0xBD, 0xB4, 0xA4, 0xD0, 0x94, 0x4D, 0xAC, 0xEF, 0x93, 0xEC, 0xCD, 0xB3, 0x9C, 0x4D, 0x94, 0x0C, 0x7B, 0x6A, 0x9C, 0x6F, 0x83, 0x8B, 0x73, 0x2A, 0x7B, 0x8B, 0xAC, 0xF0, 0xD6, 0x35, 0xD6, 0x56, 0xD6, 0x35, 0xD6, 0x55, 0xD6, 0x56, 0xC5, 0xB3, 0xC5, 0xB3, 0xC5, 0x92, 0xC5, 0xB3, 0xC5, 0xB3, 0xB5, 0x10, 0x83, 0x8A, 0xAC, 0xEF, 0xA4, 0x8E, 0xCD, 0xF4, 0xC5, 0xF4, 0xAD, 0x52, 0xA5, 0x12, 0xBD, 0x94, 0xBD, 0xB4, 0xBD, 0xB4, 0xA4, 0xF1, 0xBD, 0x94, 0xBD, 0xB4, 0xB5, 0x73, 0xA4, 0xD1, 0xA4, 0xF1, 0xB5, 0x74, 0x8C, 0x4F, 0x7B, 0xCD, 0xB5, 0x73, 0xBD, 0xB4, 0xB5, 0x73, 0xBD, 0x94, 0xBD, 0x93, 0xBD, 0xB4, 0x9C, 0x6F, 0xB5, 0x52, 0x62, 0xC9, 0x41, 0xE7, 0x39, 0xA6, 0x39, 0xE7, 0x42, 0x07, 0x42, 0x28, 0x4A, 0x48, 0x52, 0x89, 0x6B, 0x4D, 0x73, 0x6D, 0x94, 0x92, 0xA5, 0x34, 0xAD, 0x75, 0x9C, 0xD3, 0xCE, 0x59, 0xDE, 0xBB, 0xAD, 0x14, 0xB5, 0x54, 0xB5, 0x53, 0xB5, 0x74, 0xAD, 0x33, 0x83, 0xCE, 0x6B, 0x0B, 0xAD, 0x11, 0xB5, 0x31, 0xA4, 0xCF, 0xB5, 0x71, 0xBD, 0x72, 0xA4, 0x6E, 0xA4, 0xD0, 0xAC, 0xF1, 0xA4, 0xB0, 0x8C, 0x0E, 0x8B, 0xEE, 0x73, 0x2B, 0x39, 0xA6, 0x31, 0x85, 0x31, 0x85, 0x39, 0xA6, 0x62, 0xEA, 0x39, 0xA5, 0x29, 0x65, 0x39, 0xA6, 0x39, 0xE7, 0x4A, 0x69, 0x41, 0xE8, 0x52, 0x8A, 0x5A, 0xAB, 0x6B, 0x6E, 0xAD, 0x55, 0xCE, 0x59, 0x8C, 0x51, 0x6B, 0x2D, 0x7B, 0xAE, 0x8C, 0x30, 0x94, 0x71, 0xC5, 0xF7, 0xBD, 0x73, 0xCD, 0xF4, 0xC5, 0xB2, 0xC5, 0xB2, 0xA4, 0xAE, 0x9C, 0x4C, 0xAC, 0xEF, 0xA4, 0x8E, 0x8C, 0x2F, 0xB5, 0x96, 0x8C, 0x51, 0x8C, 0x51, 0x42, 0x07, 0x42, 0x07, 0x4A, 0x48, 0x4A, 0x48, 0x4A, 0x48, 0x52, 0x68, 0x52, 0x68, 0x5A, 0x89, 0x62, 0xEA, 0x73, 0x4B, 0x5A, 0xA8, 0x63, 0x0A, 0x62, 0xEA, 0x52, 0x88, 0x5A, 0xC9, 0x62, 0xEA, 0x83, 0xCD, 0x84, 0x0E, 0x94, 0x6F, 0x9C, 0x8F, 0x8C, 0x2E, 0x83, 0xAC, 0x83, 0xCD, 0x94, 0x70, 0xA4, 0xD1, 0xA4, 0xD1, 0xA4, 0xF2, 0xB5, 0x53, 0x9C, 0xD1, 0x94, 0x6F, 0x8C, 0x2E, 0x9C, 0x90, 0xA4, 0xF1, 0xAD, 0x12, 0xAD, 0x12, 0xAD, 0x12, 0xB5, 0x33, 0x94, 0x2F, 0x8C, 0x2E, 0x8C, 0x0E, 0x94, 0x8F, 0xA4, 0xF1, 0xA4, 0xF2, 0xB5, 0x73, 0xAD, 0x12, 0xAD, 0x33, 0xBD, 0x94, 0xBD, 0x94, 0xBD, 0x94, 0xB5, 0x94, 0xBD, 0x94, 0xBD, 0xB5, 0xC5, 0xD5, 0xBD, 0xB5, 0xBD, 0x94, 0xBD, 0x94, 0xAD, 0x32, 0x73, 0x8C, 0xB5, 0x74, 0xBD, 0xB5, 0xBD, 0xD5, 0xC5, 0xD5, 0xBD, 0xB4, 0xB5, 0x73, 0xAD, 0x32, 0xA4, 0xF1, 0xA4, 0xF1, 0x9C, 0xD1, 0xA5, 0x12, 0xA4, 0xF2, 0xA5, 0x12, 0xAD, 0x12, 0xA5, 0x12, 0xAD, 0x33, 0xAD, 0x32, 0xA4, 0xF1, 0xA5, 0x11, 0xA5, 0x12, 0xA4, 0xF1, 0xA4, 0xF1, 0xA4, 0xF1, 0xAD, 0x53, 0x8C, 0x2E, 0x7B, 0xAD, 0x8C, 0x4F, 0x8C, 0x2E, 0x9C, 0xD1, 0xB5, 0x94, 0xC5, 0xF6, 0xCE, 0x37, 0xC5, 0xF6, 0xBD, 0xB4, 0xB5, 0x93, 0xCE, 0x57, 0xCE, 0x36, 0xC6, 0x36, 0xC6, 0x16, 0xBD, 0xD5, 0xBD, 0xD5, 0xBD, 0xB4, 0xB5, 0x94, 0xAD, 0x53, 0xB5, 0x74, 0xBD, 0xB4, 0xA5, 0x12, 0xB5, 0x94, 0xBD, 0xB5, 0xA4, 0xF1, 0x7B, 0xAD, 0xA4, 0xF1, 0x9C, 0x8F, 0xA5, 0x11, 0xAD, 0x12, 0xCE, 0x36, 0xC6, 0x15, 0xBD, 0xB4, 0xB5, 0x93, 0xB5, 0x93, 0xBD, 0xD5, 0xAD, 0x53, 0xB5, 0x94, 0xAD, 0x32, 0x94, 0x6F, 0xAD, 0x53, 0xB5, 0x94, 0xAD, 0x53, 0xC6, 0x35, 0xC6, 0x35, 0xBD, 0xD4, 0xBD, 0xD4, 0xB5, 0x73, 0x9C, 0xB0, 0x94, 0x8F, 0xAD, 0x32, 0x94, 0x6F, 0x84, 0x0E, 0x9C, 0xD0, 0x9C, 0xB1, 0x94, 0x6F, 0xA4, 0xD1, 0x9C, 0xB0, 0xA4, 0xF1, 0x9C, 0xB0, 0xBD, 0xB4, 0xBD, 0xB4, 0xAD, 0x12, 0xA4, 0xD1, 0x9C, 0xD1, 0xAD, 0x12, 0xBD, 0xB4, 0xBD, 0xB4, 0xAD, 0x32, 0x9C, 0xD1, 0xA4, 0xD1, 0xB5, 0x52, 0xBD, 0x93, 0x7B, 0x8D, 0x62, 0xEB, 0x62, 0xEB, 0x73, 0x8D, 0x94, 0x71, 0xBD, 0xD6, 0xA4, 0xF2, 0xB5, 0x52, 0xB5, 0x32, 0xAC, 0xF1, 0xBD, 0x93, 0xC5, 0xB4, 0xAC, 0xF1, 0xC5, 0xB3, 0xCD, 0xF4, 0xC5, 0xF4, 0xAD, 0x11, 0xB5, 0x52, 0xAD, 0x32, 0xB5, 0x53, 0xA5, 0x55, 0xA5, 0x35, 0x9D, 0x14, 0x94, 0xD3, 0x73, 0xAD, 0x7B, 0x8B, 0x83, 0xCC, 0x8C, 0x0D, 0x94, 0x2D, 0x9C, 0x6E, 0x9C, 0x8E, 0x9C, 0x6E, 0x9C, 0x8F, 0xA4, 0x8F, 0xA4, 0x8F, 0xA4, 0x8F, 0x9C, 0x6E, 0x94, 0x2D, 0x94, 0x4E, 0x9C, 0x6F, 0xA4, 0xAF, 0xA4, 0xD0, 0xA4, 0xB0, 0x9C, 0xAF, 0x9C, 0x8E, 0xA4, 0x8E, 0xAC, 0xAE, 0x83, 0x8A, 0xA4, 0x6E, 0xA4, 0x6E, 0x8B, 0xCB, 0x8B, 0xCC, 0xA4, 0xAF, 0x73, 0x4A, 0x7B, 0x8C, 0x8C, 0x0D, 0xAC, 0xF0, 0xC5, 0xB3, 0xCD, 0xF4, 0xBD, 0x72, 0xBD, 0x72, 0xA4, 0xF0, 0xA4, 0xAF, 0xBD, 0x72, 0xC5, 0x92, 0xBD, 0x72, 0xB5, 0x31, 0xA4, 0x8E, 0x83, 0x8B, 0xAC, 0xEF, 0xAC, 0xAE, 0xBD, 0x72, 0xC5, 0xD4, 0xA4, 0xF1, 0x9C, 0xB0, 0x94, 0x6F, 0xA4, 0xD1, 0xAD, 0x32, 0x9C, 0xB0, 0xBD, 0xD4, 0xBD, 0x93, 0x9C, 0xB0, 0xBD, 0xB5, 0x9C, 0x90, 0xB5, 0x74, 0x9C, 0x90, 0x9C, 0xB0, 0xC5, 0xF5, 0xBD, 0xB4, 0xBD, 0xB4, 0xBD, 0xB4, 0xC5, 0xF5, 0xCE, 0x35, 0xAC, 0xD0, 0xC5, 0x72, 0x94, 0x4E, 0x52, 0x88, 0x39, 0xA6, 0x31, 0x85, 0x39, 0xC6, 0x39, 0xC6, 0x39, 0xC6, 0x4A, 0x69, 0x63, 0x2C, 0x84, 0x10, 0x9C, 0xD3, 0x9C, 0xD3, 0x94, 0x72, 0x84, 0x10, 0xBD, 0xD7, 0xD6, 0xBA, 0xCE, 0x58, 0xA4, 0xD2, 0xC5, 0xB5, 0xC5, 0xD6, 0xAD, 0x33, 0x83, 0xCE, 0x63, 0x0B, 0xA4, 0xD0, 0xB5, 0x31, 0xAD, 0x10, 0xB5, 0x51, 0xB5, 0x30, 0x9C, 0x6D, 0xA4, 0xD0, 0xA4, 0xD0, 0xA4, 0xD0, 0x9C, 0x6F, 0x73, 0x0A, 0x94, 0x0E, 0x9C, 0x90, 0x62, 0xCA, 0x31, 0x85, 0x31, 0x65, 0x31, 0x85, 0x29, 0x44, 0x31, 0xA6, 0x31, 0xA6, 0x39, 0xE7, 0x39, 0xE7, 0x42, 0x28, 0x6B, 0x2D, 0x63, 0x2D, 0x7B, 0xCF, 0x8C, 0x72, 0xA5, 0x35, 0x63, 0x2C, 0x52, 0x8A, 0x62, 0xCB, 0x7B, 0x6D, 0x7B, 0xAE, 0xD6, 0x9A, 0xCE, 0x37, 0xAD, 0x12, 0xA4, 0xD0, 0x94, 0x2D, 0x83, 0xEC, 0x94, 0x4D, 0xB5, 0x10, 0xA4, 0x8E, 0x94, 0x92, 0xB5, 0x96, 0x9C, 0xF4, 0x8C, 0x71, 0x42, 0x28, 0x4A, 0x49, 0x52, 0x89, 0x5A, 0xAA, 0x5A, 0xAA, 0x5A, 0xAA, 0x52, 0x69, 0x52, 0x69, 0x52, 0x89, 0x5A, 0xCA, 0x52, 0x89, 0x5A, 0xCA, 0x5A, 0xCA, 0x5A, 0xCA, 0x63, 0x0B, 0x62, 0xEB, 0x52, 0xA9, 0x5A, 0xEA, 0x94, 0x70, 0xA4, 0xF1, 0x94, 0x4F, 0x83, 0xED, 0x7B, 0xAD, 0x73, 0x8C, 0x83, 0xEE, 0x7B, 0xCD, 0x73, 0x8C, 0x7B, 0xAD, 0x83, 0xCD, 0x7B, 0xAD, 0x7B, 0x8C, 0x7B, 0x8C, 0x7B, 0xAC, 0x73, 0x4B, 0xA4, 0xD1, 0x9C, 0xB1, 0x7B, 0xAD, 0x6B, 0x0A, 0x7B, 0x8C, 0x8C, 0x2E, 0x83, 0xAD, 0x83, 0xEE, 0x8C, 0x0E, 0x94, 0x90, 0x94, 0x6F, 0x9C, 0x90, 0x8C, 0x4E, 0x94, 0x6F, 0x9C, 0xD0, 0x9C, 0xD1, 0x9C, 0xB1, 0xA4, 0xF1, 0x94, 0x70, 0xAD, 0x32, 0xAD, 0x12, 0x9C, 0xB1, 0x62, 0xEB, 0x4A, 0x49, 0x8C, 0x70, 0x94, 0x6F, 0x9C, 0x90, 0x9C, 0x90, 0xAD, 0x12, 0xA4, 0xF1, 0xA4, 0xD1, 0xA4, 0xF1, 0xB5, 0x53, 0xB5, 0x73, 0xC5, 0xF5, 0xBD, 0x94, 0xBD, 0x94, 0xB5, 0x73, 0xBD, 0x73, 0xBD, 0xB4, 0xBD, 0x94, 0xB5, 0x52, 0xB5, 0x73, 0xBD, 0x73, 0xC5, 0xB4, 0xC5, 0xB4, 0xBD, 0x94, 0xBD, 0x94, 0xC5, 0xD5, 0xC5, 0xF5, 0xCE, 0x16, 0xC5, 0xB4, 0xB5, 0x53, 0xAD, 0x12, 0xA4, 0xB1, 0xA4, 0xB1, 0xA4, 0xD0, 0x9C, 0xB0, 0x9C, 0xB0, 0x9C, 0xB0, 0xA4, 0xF1, 0xA4, 0xD1, 0x9C, 0xB0, 0x9C, 0xB0, 0xA4, 0xF1, 0xAD, 0x32, 0xA4, 0xF1, 0x8C, 0x2E, 0x94, 0x6F, 0x9C, 0x90, 0x9C, 0xB1, 0xAD, 0x33, 0xB5, 0x53, 0x84, 0x0E, 0x83, 0xEE, 0xBD, 0xB5, 0xAD, 0x32, 0x9C, 0xB0, 0x8C, 0x2E, 0xAD, 0x32, 0x83, 0xED, 0x9C, 0xD0, 0xBD, 0xD4, 0xCE, 0x36, 0xC6, 0x15, 0xAD, 0x52, 0xCE, 0x36, 0xCE, 0x36, 0xB5, 0x94, 0xC6, 0x16, 0xC5, 0xF6, 0xC5, 0xF5, 0xD6, 0x97, 0xC6, 0x15, 0xC6, 0x15, 0xCE, 0x36, 0xBD, 0xB4, 0x94, 0x8F, 0x9C, 0xB0, 0xA4, 0xF1, 0x94, 0x6F, 0xA4, 0xF1, 0x9C, 0xD1, 0xAD, 0x32, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0x94, 0xC5, 0xF5, 0xBD, 0xD5, 0xC5, 0xF5, 0xCE, 0x36, 0xC5, 0xF5, 0xBD, 0xB4, 0xB5, 0x73, 0xBD, 0xB4, 0xC5, 0xF5, 0xC5, 0xF5, 0xBD, 0xB4, 0xBD, 0x94, 0xBD, 0x94, 0xC5, 0xD4, 0xC5, 0xD4, 0x83, 0xCD, 0x8C, 0x0F, 0x62, 0xEB, 0x6B, 0x6D, 0x94, 0x91, 0xC6, 0x17, 0xB5, 0x54, 0xAD, 0x32, 0xB5, 0x32, 0xB5, 0x32, 0xBD, 0x93, 0xC5, 0x93, 0xBD, 0x73, 0xD6, 0x35, 0xCE, 0x14, 0xC5, 0xF4, 0xA4, 0xF1, 0xAC, 0xF1, 0xAD, 0x32, 0xB5, 0x52, 0xA5, 0x55, 0xA5, 0x35, 0x9D, 0x14, 0x94, 0xB3, 0x6B, 0x4C, 0x5A, 0x67, 0x5A, 0x67, 0x6A, 0xC8, 0x72, 0xE9, 0x7B, 0x29, 0x7B, 0x4A, 0x7B, 0x4A, 0x83, 0xAB, 0x8B, 0xCC, 0x94, 0x0C, 0x9C, 0x2D, 0xA4, 0x8E, 0xA4, 0x8E, 0xA4, 0x8F, 0xA4, 0x6E, 0x9C, 0x4E, 0x9C, 0x6E, 0x9C, 0x6E, 0xA4, 0xAF, 0xAC, 0xAF, 0xA4, 0x8E, 0xAC, 0xCF, 0xB5, 0x10, 0xB4, 0xEF, 0xB4, 0xCF, 0xB4, 0xF0, 0xAC, 0xEF, 0xAC, 0xCF, 0xB4, 0xF0, 0xB4, 0xEF, 0xAC, 0xAE, 0xA4, 0x8E, 0xA4, 0x8E, 0xA4, 0x6D, 0x9C, 0x2C, 0x94, 0x2C, 0x93, 0xEC, 0x8B, 0xEC, 0x94, 0x2D, 0x8B, 0xCC, 0x83, 0x8B, 0x83, 0x6A, 0x8B, 0xAA, 0x72, 0xE8, 0x94, 0x0D, 0xAC, 0xCF, 0x9C, 0x2D, 0x8B, 0xEC, 0x73, 0x2A, 0x8B, 0xED, 0x73, 0x2A, 0x62, 0xA9, 0x62, 0xC9, 0x73, 0x4B, 0x7B, 0x6B, 0x73, 0x2A, 0x62, 0xC9, 0x83, 0xEE, 0x73, 0x4A, 0x83, 0xCC, 0x83, 0xCC, 0x9C, 0x6F, 0xAD, 0x11, 0xAC, 0xF1, 0xAC, 0xF1, 0xAD, 0x31, 0xB5, 0x52, 0xAD, 0x11, 0xAC, 0xCF, 0xC5, 0x71, 0x9C, 0x4D, 0x8C, 0x0E, 0x42, 0x07, 0x39, 0xA6, 0x42, 0x07, 0x42, 0x28, 0x42, 0x28, 0x4A, 0x69, 0x52, 0x89, 0x63, 0x0C, 0x7B, 0xAE, 0x9C, 0xB2, 0x83, 0xEF, 0x9C, 0xD3, 0xB5, 0x96, 0xBD, 0xB7, 0xCE, 0x59, 0x94, 0x51, 0xA4, 0xF3, 0xEF, 0x3C, 0xDE, 0xDB, 0xBD, 0xB6, 0x7B, 0xCE, 0xA4, 0xD1, 0xBD, 0x93, 0xC5, 0xD3, 0xBD, 0xB3, 0xB5, 0x10, 0x9C, 0x2C, 0xB5, 0x10, 0xB5, 0x11, 0xAC, 0xF0, 0xB4, 0xF1, 0x94, 0x0E, 0x8B, 0xED, 0x94, 0x2E, 0x73, 0x4B, 0x31, 0xA5, 0x39, 0xC6, 0x31, 0x85, 0x29, 0x64, 0x31, 0x85, 0x39, 0xC6, 0x39, 0xE7, 0x42, 0x28, 0x62, 0xEB, 0x6B, 0x6D, 0x7B, 0xCF, 0x63, 0x0C, 0x63, 0x2D, 0x8C, 0x72, 0x6B, 0x2D, 0x39, 0x86, 0x41, 0xE7, 0x52, 0x49, 0x73, 0x6D, 0xAD, 0x35, 0xDE, 0xBA, 0xE6, 0xDB, 0xCE, 0x38, 0x83, 0xEE, 0x83, 0xED, 0x9C, 0x8F, 0xBD, 0x30, 0xA4, 0x8F, 0xB5, 0x75, 0xAD, 0x76, 0x9C, 0xF4, 0x8C, 0x51, 0x6B, 0x4D, 0x6B, 0x2C, 0x62, 0xEB, 0x63, 0x0B, 0x63, 0x2B, 0x63, 0x0B, 0x62, 0xEA, 0x6B, 0x4B, 0x6B, 0x6C, 0x73, 0x8D, 0x63, 0x2B, 0x6B, 0x4C, 0x6B, 0x6C, 0x73, 0x8D, 0x73, 0xAE, 0x7B, 0xCE, 0x83, 0xEE, 0x83, 0xEE, 0x9C, 0xD1, 0xAD, 0x12, 0xB5, 0x32, 0xA4, 0xF1, 0xA4, 0xF1, 0xA5, 0x12, 0xB5, 0x93, 0xB5, 0x94, 0x9C, 0xD1, 0xAD, 0x12, 0xA4, 0xF1, 0x94, 0x2E, 0x9C, 0x8F, 0xA4, 0xD1, 0xA4, 0xB1, 0x83, 0xEE, 0xCE, 0x57, 0xDE, 0xB8, 0xCD, 0xF5, 0xBD, 0x94, 0xA4, 0xD0, 0xB5, 0x52, 0xA4, 0xB0, 0xAC, 0xF1, 0x9C, 0xB0, 0xB5, 0x53, 0xAD, 0x32, 0xAD, 0x32, 0xAD, 0x32, 0xAD, 0x12, 0xB5, 0x73, 0xAD, 0x32, 0xA4, 0xF2, 0xA4, 0xF1, 0xA4, 0xD1, 0xA4, 0xF1, 0x8C, 0x2E, 0x5A, 0xCB, 0x4A, 0x6A, 0x52, 0xAB, 0x94, 0x91, 0xA5, 0x12, 0x9C, 0x90, 0xAD, 0x12, 0xC5, 0xD5, 0xBD, 0x94, 0xB5, 0x52, 0xB5, 0x53, 0xAD, 0x32, 0xA4, 0xD1, 0x9C, 0x90, 0x8C, 0x0D, 0x94, 0x4E, 0x9C, 0x8F, 0xA4, 0xD0, 0x94, 0x4E, 0x94, 0x6F, 0x83, 0xEC, 0x94, 0x6E, 0xA4, 0xD0, 0xAC, 0xF0, 0xB5, 0x10, 0xAD, 0x10, 0xA4, 0xCF, 0x8C, 0x2D, 0x94, 0x2E, 0x8C, 0x2E, 0x8C, 0x0E, 0x8C, 0x0E, 0x94, 0x4F, 0x9C, 0x90, 0x9C, 0x90, 0x9C, 0xB0, 0xB5, 0x53, 0xBD, 0x73, 0xB5, 0x53, 0xAD, 0x32, 0xB5, 0x52, 0xB5, 0x53, 0xB5, 0x73, 0xB5, 0x53, 0xB5, 0x53, 0xAD, 0x12, 0xB5, 0x53, 0xA5, 0x12, 0xB5, 0x53, 0xC5, 0xB4, 0xBD, 0x94, 0xB5, 0x53, 0xBD, 0xB4, 0xAD, 0x32, 0xA4, 0xF1, 0xA4, 0xF1, 0xAD, 0x12, 0xA4, 0xD1, 0xA4, 0xF2, 0x94, 0x70, 0xA4, 0xF1, 0xA4, 0xF1, 0xA4, 0xF1, 0xA4, 0xD0, 0x9C, 0xD0, 0xA4, 0xD1, 0xA4, 0xF1, 0xAD, 0x12, 0xAD, 0x32, 0xA5, 0x11, 0xA5, 0x11, 0xA4, 0xD0, 0x94, 0x4F, 0x94, 0x6F, 0x9C, 0x90, 0x83, 0xED, 0x6B, 0x2A, 0x94, 0x6F, 0xA5, 0x12, 0xB5, 0x73, 0xA4, 0xF1, 0x94, 0x90, 0xB5, 0x94, 0xBD, 0xB4, 0xBD, 0x94, 0xC6, 0x16, 0xCE, 0x57, 0xCE, 0x36, 0xCE, 0x36, 0xCE, 0x36, 0xCE, 0x36, 0xCE, 0x36, 0xCE, 0x36, 0xCE, 0x36, 0xD6, 0x56, 0xD6, 0x57, 0xCE, 0x36, 0xCE, 0x56, 0xD6, 0x76, 0xD6, 0x77, 0xCE, 0x15, 0x83, 0xCD, 0xA4, 0xF2, 0x7B, 0xAE, 0x8C, 0x51, 0xAD, 0x55, 0xCE, 0x79, 0xC5, 0xD5, 0xBD, 0x94, 0xB5, 0x32, 0xBD, 0x73, 0xD6, 0x15, 0xD6, 0x35, 0xCD, 0xD3, 0xD6, 0x55, 0xD6, 0x35, 0xCD, 0xF4, 0xA4, 0xF0, 0xAD, 0x11, 0xC5, 0xF4, 0xBD, 0x93, 0xA5, 0x55, 0xA5, 0x35, 0x9D, 0x14, 0x94, 0xB2, 0x8C, 0x0F, 0x7B, 0x6B, 0x7B, 0x6B, 0x83, 0xAC, 0x94, 0x2D, 0x8B, 0xCC, 0x7B, 0x4B, 0x83, 0x6B, 0x8B, 0xCC, 0x83, 0x6B, 0x83, 0xAC, 0x83, 0xAC, 0x8B, 0xEC, 0x9C, 0x2D, 0x9C, 0x4D, 0x9C, 0x4D, 0x7B, 0x6A, 0x83, 0xCC, 0x7B, 0x8B, 0x6B, 0x09, 0x6A, 0xE9, 0x6A, 0xE9, 0x7B, 0x6A, 0x73, 0x09, 0x7B, 0x4A, 0x83, 0x6A, 0x8B, 0xCB, 0x94, 0x0C, 0x9C, 0x2C, 0xA4, 0x6D, 0x9C, 0x2C, 0x9C, 0x2C, 0xA4, 0x6D, 0xA4, 0x8E, 0x9C, 0x2D, 0xA4, 0x8E, 0xB4, 0xCF, 0xB4, 0xEF, 0xB4, 0xEF, 0xA4, 0x8E, 0x9C, 0x4D, 0xA4, 0x8E, 0xA4, 0x8E, 0x9C, 0x6D, 0x9C, 0x4D, 0x9C, 0x2D, 0xA4, 0x8E, 0xAC, 0xCF, 0xA4, 0x8E, 0x9C, 0x6F, 0x9C, 0x6E, 0x9C, 0x4E, 0x9C, 0x6F, 0x9C, 0x4F, 0x9C, 0x6E, 0x9C, 0x6E, 0xA4, 0xCF, 0xA4, 0xB0, 0x9C, 0x6E, 0xA4, 0x6F, 0x94, 0x0D, 0x94, 0x0D, 0x9C, 0x6E, 0x9C, 0x6E, 0x94, 0x0D, 0x8B, 0xEC, 0x83, 0xAB, 0x73, 0x4A, 0x73, 0x29, 0x7B, 0x6A, 0xAC, 0xCF, 0x94, 0x0D, 0x83, 0xAC, 0x62, 0xEA, 0x42, 0x07, 0x4A, 0x48, 0x4A, 0x48, 0x42, 0x07, 0x4A, 0x69, 0x52, 0xAA, 0x5A, 0xAA, 0x7B, 0xCF, 0x73, 0x6D, 0x84, 0x30, 0x9C, 0xF3, 0xAD, 0x55, 0xB5, 0x96, 0xBD, 0xB7, 0x8C, 0x51, 0x62, 0xEC, 0xA5, 0x14, 0xBD, 0xB7, 0xBD, 0x96, 0x94, 0x50, 0xBD, 0xB4, 0xCE, 0x34, 0xC5, 0xF4, 0xBD, 0xB3, 0xB5, 0x10, 0xA4, 0x6D, 0xCD, 0xD3, 0xD5, 0xD3, 0xCD, 0xB3, 0xCD, 0xB3, 0x9C, 0x2E, 0x83, 0xAC, 0x7B, 0x6B, 0x6B, 0x0A, 0x5A, 0xA9, 0x39, 0xC6, 0x41, 0xE7, 0x31, 0x85, 0x31, 0xA6, 0x39, 0xC6, 0x42, 0x07, 0x52, 0x89, 0x73, 0x8D, 0x52, 0xAA, 0x5A, 0xEB, 0x39, 0xE7, 0x6B, 0x4D, 0x84, 0x31, 0x6B, 0x4D, 0x31, 0x85, 0x41, 0xE7, 0x42, 0x08, 0x4A, 0x28, 0x39, 0xA7, 0x52, 0x8A, 0x6B, 0x2D, 0xDE, 0xBB, 0xD6, 0x79, 0x94, 0x70, 0x9C, 0x6F, 0xBD, 0x51, 0xA4, 0xAF, 0xBD, 0xF6, 0xA5, 0x35, 0x8C, 0x72, 0x9C, 0xB1, 0xAD, 0x32, 0xAD, 0x11, 0xA4, 0xF1, 0x9C, 0xB0, 0x94, 0x6F, 0x8C, 0x2E, 0x8C, 0x4F, 0x8C, 0x2E, 0x8C, 0x2E, 0x9C, 0xB0, 0x8C, 0x4F, 0x83, 0xED, 0x83, 0xEE, 0x83, 0xEE, 0x8C, 0x0E, 0x8C, 0x4F, 0x9C, 0xB0, 0xA4, 0xF1, 0xAD, 0x32, 0xAD, 0x11, 0xC5, 0xB3, 0xC5, 0xB3, 0xB5, 0x72, 0xA5, 0x11, 0xA4, 0xF1, 0xB5, 0x73, 0xA4, 0xD1, 0xBD, 0x93, 0xCD, 0xD4, 0xCD, 0xD3, 0xBD, 0x72, 0xBD, 0x52, 0xAC, 0xF1, 0x41, 0xE7, 0x6B, 0x6C, 0x9C, 0xB1, 0xBD, 0xB4, 0xCE, 0x36, 0xB5, 0x51, 0xA4, 0xD0, 0xB5, 0x11, 0xC5, 0x93, 0x9C, 0x90, 0xB5, 0x73, 0xB5, 0x53, 0xA4, 0xF1, 0xAD, 0x52, 0xB5, 0x94, 0xB5, 0x74, 0xB5, 0x74, 0xBD, 0x94, 0xBD, 0x94, 0xB5, 0x73, 0x9C, 0xB1, 0x5A, 0xCA, 0x4A, 0x4A, 0x4A, 0x6A, 0x4A, 0x6A, 0x8C, 0x50, 0x9C, 0xB1, 0x8C, 0x4F, 0x9C, 0xB0, 0xA4, 0xF1, 0xAD, 0x32, 0xB5, 0x52, 0xAD, 0x32, 0xBD, 0xB4, 0xB5, 0x52, 0xA4, 0xD1, 0xAD, 0x11, 0xBD, 0xB3, 0xB5, 0x72, 0xBD, 0x93, 0xA4, 0xD0, 0x9C, 0x8F, 0x9C, 0xB0, 0xB5, 0x52, 0xAC, 0xF0, 0xB5, 0x30, 0xBD, 0x71, 0xAD, 0x30, 0xB5, 0x51, 0xB5, 0x72, 0xB5, 0x72, 0xA4, 0xF0, 0x94, 0x6E, 0x94, 0x6E, 0x8C, 0x2D, 0x94, 0x6F, 0x83, 0xCC, 0x73, 0x4B, 0xA4, 0xD1, 0xB5, 0x53, 0xBD, 0x94, 0x83, 0xCD, 0x9C, 0x90, 0xAD, 0x12, 0x94, 0x70, 0x94, 0x2F, 0x94, 0x6F, 0x8C, 0x2F, 0x94, 0x4F, 0x83, 0xED, 0x8C, 0x0E, 0x94, 0x2F, 0x9C, 0x90, 0x9C, 0x70, 0x8C, 0x2F, 0x8C, 0x2E, 0x94, 0x6F, 0x9C, 0xB0, 0xA4, 0xD1, 0xAC, 0xF1, 0xB5, 0x53, 0xBD, 0x73, 0xB5, 0x32, 0xA4, 0xB0, 0x94, 0x4F, 0xA4, 0xD0, 0xA4, 0xD0, 0xA4, 0xD0, 0x9C, 0x90, 0x9C, 0x90, 0x9C, 0x8F, 0x94, 0x6F, 0x94, 0x4E, 0x9C, 0x90, 0xA4, 0xF1, 0xA4, 0xD0, 0xAD, 0x12, 0xAD, 0x11, 0xAD, 0x11, 0xAD, 0x12, 0xAD, 0x32, 0xAD, 0x12, 0xAD, 0x32, 0x9C, 0xB0, 0xA4, 0xF1, 0xA4, 0xD1, 0xAD, 0x32, 0xAD, 0x32, 0xAD, 0x32, 0xAC, 0xF1, 0xA4, 0xD1, 0x9C, 0xB0, 0x9C, 0xB0, 0x9C, 0xB0, 0xA4, 0xF1, 0xA4, 0xF2, 0xCE, 0x16, 0xDE, 0x99, 0xDE, 0x99, 0xAD, 0x33, 0xAD, 0x32, 0xB5, 0x73, 0xAD, 0x53, 0x83, 0xCE, 0xAD, 0x54, 0x94, 0x71, 0x73, 0x8E, 0x63, 0x2D, 0x8C, 0x51, 0xCE, 0x17, 0xC5, 0xD4, 0xC5, 0x94, 0xBD, 0x73, 0xCD, 0xF5, 0xC5, 0xB4, 0xBD, 0x72, 0xC5, 0xB3, 0xC5, 0x72, 0xAC, 0xD0, 0xA4, 0x8F, 0xB5, 0x52, 0xCD, 0xF5, 0xB5, 0x73, 0xA5, 0x55, 0xA5, 0x34, 0x9D, 0x14, 0x94, 0xB2, 0x94, 0x70, 0x8B, 0xED, 0x94, 0x2E, 0xAC, 0xF1, 0x83, 0x8B, 0x94, 0x4E, 0xAC, 0xF0, 0xAD, 0x11, 0xB5, 0x11, 0xAD, 0x11, 0xB5, 0x32, 0xA4, 0xAF, 0xB5, 0x31, 0xB5, 0x10, 0xAC, 0xAE, 0xA4, 0x6E, 0x94, 0x4E, 0x9C, 0xB0, 0x94, 0x90, 0xA4, 0xF1, 0x9C, 0xB1, 0x8C, 0x2E, 0x8C, 0x0D, 0x8C, 0x2E, 0x8C, 0x2E, 0x8C, 0x2E, 0x9C, 0x8F, 0x94, 0x4E, 0x9C, 0x4E, 0xA4, 0xAF, 0x9C, 0x4D, 0xA4, 0xAE, 0xA4, 0x8E, 0xAC, 0xCF, 0xA4, 0xAF, 0xAC, 0xF0, 0xAC, 0xD0, 0x9C, 0x6E, 0xA4, 0x8E, 0xAC, 0xCF, 0xC5, 0x92, 0xBD, 0x31, 0xB5, 0x10, 0xBD, 0x51, 0xA4, 0x8E, 0x94, 0x0D, 0x94, 0x0C, 0xA4, 0x6D, 0x9C, 0x2D, 0xA4, 0x6E, 0xA4, 0x8E, 0x94, 0x0D, 0x8B, 0xAB, 0x83, 0xAC, 0x8B, 0xCC, 0x94, 0x0D, 0x9C, 0x4D, 0xA4, 0x8F, 0x9C, 0x4D, 0x8B, 0xAB, 0x93, 0xEC, 0x9C, 0x4D, 0xB5, 0x10, 0xB5, 0x10, 0xA4, 0xAF, 0xA4, 0x6E, 0x9C, 0x6E, 0x9C, 0x2D, 0x94, 0x2D, 0x9C, 0x6E, 0xAC, 0xAE, 0xAC, 0xCF, 0xA4, 0x8E, 0x8C, 0x0D, 0x4A, 0x48, 0x39, 0xC6, 0x39, 0xA6, 0x39, 0xC6, 0x4A, 0x28, 0x52, 0x89, 0x52, 0x8A, 0x5A, 0xCA, 0x5A, 0xCB, 0x9C, 0xB2, 0x9C, 0xB2, 0xA5, 0x14, 0xAD, 0x76, 0xB5, 0x76, 0x84, 0x30, 0x41, 0xE8, 0x5A, 0x8A, 0x5A, 0xAB, 0x4A, 0x49, 0x63, 0x0B, 0xB5, 0x73, 0x8C, 0x2D, 0x7B, 0xAB, 0x7B, 0x8A, 0x9C, 0x4D, 0x8B, 0xEB, 0x9C, 0x4D, 0xA4, 0x8E, 0x9C, 0x6E, 0x83, 0x8B, 0x62, 0xA8, 0x83, 0xAC, 0x73, 0x4B, 0x6A, 0xEA, 0x8C, 0x0E, 0x9C, 0x6F, 0xA4, 0x8F, 0x73, 0x6B, 0x39, 0xC6, 0x29, 0x65, 0x39, 0xC7, 0x42, 0x07, 0x52, 0x69, 0x31, 0xA6, 0x39, 0xC7, 0x52, 0xAA, 0x73, 0x8E, 0x7B, 0xEF, 0x7B, 0xAE, 0x39, 0xA6, 0x52, 0x8A, 0x52, 0xAA, 0x7B, 0xCF, 0x73, 0xAE, 0x5A, 0xCB, 0x39, 0xC8, 0x63, 0x0D, 0xBD, 0xF7, 0xDE, 0xDA, 0xAD, 0x11, 0xB5, 0x30, 0xB5, 0x11, 0xCE, 0x58, 0xAD, 0x55, 0x8C, 0x72, 0xBD, 0x94, 0xD6, 0x75, 0xDE, 0x75, 0xD6, 0x55, 0xDE, 0x96, 0xD6, 0x55, 0xCD, 0xF4, 0xD6, 0x55, 0xDE, 0x75, 0xD6, 0x34, 0xCD, 0xF4, 0xB5, 0x52, 0xA4, 0xF1, 0x7B, 0x8C, 0x94, 0x6F, 0xB5, 0x53, 0xBD, 0x93, 0xA4, 0xF1, 0xAD, 0x32, 0xB5, 0x53, 0xAD, 0x11, 0xC5, 0xB3, 0xBD, 0x93, 0xBD, 0x73, 0xB5, 0x73, 0xAD, 0x52, 0xC5, 0xF5, 0xB5, 0x53, 0xB5, 0x31, 0xAC, 0xCF, 0xCD, 0xB3, 0xCD, 0x92, 0xCD, 0xB3, 0xCD, 0xD4, 0x52, 0x69, 0x39, 0xE8, 0x4A, 0x49, 0x73, 0x6D, 0xA4, 0xF1, 0x94, 0x4E, 0xAC, 0xF0, 0xC5, 0x73, 0xC5, 0x73, 0xA4, 0xB0, 0xAD, 0x32, 0xBD, 0xD5, 0xC5, 0xD5, 0xC5, 0xF5, 0xCE, 0x36, 0xC6, 0x16, 0xBD, 0xD5, 0xAD, 0x32, 0x94, 0x4F, 0x73, 0x8D, 0x52, 0x8A, 0x39, 0xE8, 0x41, 0xE9, 0x42, 0x09, 0x3A, 0x08, 0x83, 0xEF, 0x9C, 0xD1, 0x8C, 0x2F, 0x94, 0x6F, 0x9C, 0xB0, 0x9C, 0x90, 0x94, 0x6F, 0x9C, 0xB0, 0xA4, 0xF1, 0xB5, 0x73, 0x9C, 0xD0, 0xAD, 0x11, 0xB5, 0x93, 0xBD, 0xB3, 0xC5, 0xF5, 0xB5, 0x52, 0xAD, 0x11, 0xB5, 0x52, 0xB5, 0x51, 0xAD, 0x10, 0xB5, 0x30, 0xAD, 0x0F, 0xA4, 0xCF, 0xAD, 0x30, 0xB5, 0x72, 0xB5, 0x92, 0xBD, 0xB3, 0x9C, 0xAF, 0xB5, 0x51, 0xB5, 0x51, 0xBD, 0x93, 0xAD, 0x11, 0x8C, 0x0D, 0xB5, 0x53, 0xBD, 0x74, 0x9C, 0xB0, 0x94, 0x4F, 0x94, 0x4F, 0x83, 0xCD, 0x7B, 0x8C, 0x83, 0xAD, 0x94, 0x4F, 0x8C, 0x2E, 0x8C, 0x0E, 0x7B, 0x8C, 0x7B, 0x6C, 0x6B, 0x2B, 0x83, 0xEE, 0x9C, 0xB0, 0x9C, 0x90, 0x94, 0x70, 0x94, 0x4F, 0x8C, 0x0E, 0x7B, 0xAC, 0x7B, 0x8C, 0x8C, 0x2E, 0x83, 0xCD, 0x83, 0xCD, 0xA4, 0xD1, 0x9C, 0xB1, 0x8C, 0x0E, 0x94, 0x4F, 0x5A, 0xA8, 0x83, 0xCD, 0x8C, 0x2E, 0xA4, 0xD0, 0xBD, 0x93, 0xB5, 0x52, 0xAD, 0x32, 0xAD, 0x11, 0xA4, 0xF0, 0xB5, 0x32, 0xAC, 0xF1, 0xAD, 0x32, 0x9C, 0x6F, 0x9C, 0x6F, 0xA4, 0xD0, 0xB5, 0x32, 0xBD, 0x93, 0xAD, 0x31, 0xAC, 0xF1, 0xBD, 0x93, 0xBD, 0x93, 0xB5, 0x32, 0xB5, 0x73, 0xBD, 0x73, 0xBD, 0x73, 0xBD, 0x94, 0xBD, 0x94, 0xAD, 0x33, 0xCE, 0x58, 0xCE, 0x18, 0xC6, 0x38, 0xDE, 0xDB, 0xBD, 0xB6, 0xA4, 0xF2, 0xA4, 0xD1, 0x9C, 0xD1, 0xAD, 0x33, 0xC5, 0xD6, 0x8C, 0x50, 0x41, 0xE8, 0x39, 0xE8, 0x63, 0x2D, 0xB5, 0x75, 0xAD, 0x12, 0xA4, 0xB0, 0xA4, 0xB0, 0x9C, 0x90, 0x9C, 0x90, 0x9C, 0x8F, 0x9C, 0x8F, 0x9C, 0x6E, 0x94, 0x4E, 0xA4, 0xD1, 0xAC, 0xF1, 0x9C, 0x90, 0x94, 0x6F, 0xA5, 0x75, 0xA5, 0x35, 0x9D, 0x14, 0x94, 0xB2, 0x9C, 0x90, 0x8C, 0x0D, 0x9C, 0x8F, 0xA4, 0xD0, 0x94, 0x2D, 0xB5, 0x31, 0xB5, 0x31, 0xB5, 0x51, 0xB5, 0x52, 0xB5, 0x52, 0xB5, 0x52, 0xBD, 0x92, 0xC5, 0xB3, 0xBD, 0x72, 0xAC, 0xCF, 0xA4, 0x8E, 0xA4, 0xD0, 0x9C, 0xB0, 0x8C, 0x4F, 0x94, 0x6F, 0x9C, 0xB1, 0x9C, 0xD0, 0x94, 0x4E, 0xA4, 0xD1, 0xB5, 0x73, 0xAD, 0x11, 0xA4, 0xF0, 0x94, 0x6F, 0x9C, 0x8F, 0xAC, 0xF1, 0xAD, 0x31, 0xBD, 0x93, 0xB5, 0x72, 0xBD, 0x73, 0xAD, 0x11, 0xB5, 0x73, 0xBD, 0x73, 0xA4, 0xD0, 0x9C, 0x6D, 0xAC, 0xAE, 0xC5, 0xB2, 0xAC, 0xEF, 0xC5, 0x92, 0xBD, 0x31, 0xB5, 0x10, 0xAC, 0xF0, 0xA4, 0x8E, 0xA4, 0x8E, 0x94, 0x0C, 0x94, 0x0D, 0x94, 0x2D, 0x94, 0x2D, 0x8B, 0xCC, 0x83, 0xAC, 0x94, 0x2E, 0x9C, 0x6E, 0x9C, 0x8E, 0xAC, 0xF0, 0xAC, 0xF0, 0x9C, 0x8E, 0x8B, 0xEC, 0x93, 0xEC, 0x94, 0x0C, 0xA4, 0x6D, 0xB5, 0x10, 0xB5, 0x10, 0xB5, 0x10, 0xA4, 0xAF, 0x83, 0x8B, 0x7B, 0x6A, 0x94, 0x0C, 0x94, 0x0C, 0x94, 0x2D, 0x9C, 0x8F, 0x7B, 0xAD, 0x4A, 0x28, 0x39, 0xE7, 0x31, 0x85, 0x41, 0xE7, 0x41, 0xE7, 0x41, 0xE7, 0x4A, 0x48, 0x6B, 0x2C, 0x83, 0xEF, 0x7B, 0xEF, 0x9C, 0xD3, 0x8C, 0x71, 0x9C, 0xD3, 0xA4, 0xF3, 0x5A, 0xAB, 0x6B, 0x2D, 0x6B, 0x4D, 0x31, 0x66, 0x42, 0x28, 0xAD, 0x13, 0xAD, 0x12, 0xAC, 0xF0, 0xAC, 0xCF, 0xAC, 0xEF, 0xAC, 0xAE, 0x9C, 0x4D, 0x9C, 0x2D, 0x93, 0xEC, 0x8B, 0xED, 0x9C, 0x4E, 0xA4, 0x8F, 0x9C, 0x6E, 0xB5, 0x11, 0xC5, 0x92, 0xC5, 0x71, 0xC5, 0x71, 0xB4, 0xF0, 0xA4, 0x8F, 0x6B, 0x0B, 0x5A, 0xEB, 0x39, 0xE7, 0x31, 0x86, 0x31, 0xA6, 0x42, 0x07, 0x4A, 0x49, 0x63, 0x0C, 0x39, 0xE7, 0x31, 0x86, 0x5A, 0xAB, 0x6B, 0x4D, 0x6B, 0x6D, 0x94, 0xD2, 0xA5, 0x34, 0x73, 0x6E, 0x52, 0x8A, 0x42, 0x29, 0x94, 0x92, 0x8C, 0x30, 0xBD, 0x94, 0xB5, 0x31, 0xA4, 0xD0, 0xCE, 0x38, 0xAD, 0x35, 0x94, 0x92, 0xB5, 0x73, 0xCD, 0xF4, 0xC5, 0xD3, 0xBD, 0x92, 0xCD, 0xF3, 0xD6, 0x34, 0xD6, 0x55, 0xE6, 0xB6, 0xDE, 0x96, 0xDE, 0x75, 0xDE, 0x96, 0xD6, 0x15, 0xB5, 0x31, 0xAD, 0x31, 0xB5, 0x32, 0xCD, 0xF4, 0xD6, 0x35, 0xCE, 0x36, 0xBD, 0x93, 0xBD, 0x94, 0xB5, 0x52, 0xC5, 0xB3, 0xBD, 0x92, 0xBD, 0xB3, 0xBD, 0xB4, 0xC5, 0xD4, 0xBD, 0xD4, 0xB5, 0x72, 0xC5, 0xB3, 0xCD, 0xD3, 0xCD, 0x92, 0xCD, 0xB3, 0xCD, 0xB3, 0xC5, 0x93, 0x83, 0xCE, 0x42, 0x08, 0x42, 0x09, 0x42, 0x08, 0x4A, 0x49, 0x73, 0x6C, 0xA4, 0xB0, 0xBD, 0x52, 0xBD, 0x51, 0xA4, 0xF0, 0x9C, 0x8F, 0xAD, 0x32, 0xA4, 0xF2, 0x9C, 0xD1, 0x94, 0x90, 0x7B, 0xCE, 0x52, 0x69, 0x39, 0xE7, 0x39, 0xC7, 0x31, 0x87, 0x29, 0x46, 0x29, 0x46, 0x31, 0x87, 0x39, 0xA7, 0x39, 0xC7, 0x7B, 0xCE, 0x8C, 0x6F, 0x8C, 0x2E, 0x8C, 0x2E, 0x8C, 0x2E, 0x8C, 0x2E, 0x8C, 0x4E, 0x9C, 0xB0, 0xA5, 0x11, 0xB5, 0x73, 0xA4, 0xF1, 0xB5, 0x52, 0xC5, 0xF4, 0xC5, 0xD4, 0xBD, 0xD4, 0xB5, 0x52, 0xB5, 0x52, 0xAD, 0x32, 0xBD, 0xB3, 0xB5, 0x71, 0xBD, 0x71, 0xAD, 0x10, 0xB5, 0x71, 0xB5, 0x72, 0xB5, 0x52, 0xC5, 0xD4, 0xCE, 0x15, 0xAD, 0x31, 0xB5, 0x71, 0xB5, 0x51, 0xC5, 0xD3, 0xBD, 0xB3, 0xA4, 0xF0, 0xBD, 0x94, 0xBD, 0x73, 0x9C, 0xB0, 0xBD, 0x94, 0xBD, 0xB4, 0xB5, 0x53, 0xAD, 0x33, 0x9C, 0xB0, 0xA4, 0xF1, 0xAD, 0x53, 0xAD, 0x52, 0xA4, 0xF1, 0x8C, 0x2F, 0x83, 0xCE, 0xA4, 0xF1, 0xAD, 0x32, 0xBD, 0x93, 0xAD, 0x32, 0x9C, 0x90, 0x9C, 0xB0, 0x94, 0x6F, 0x6B, 0x2A, 0x8C, 0x2E, 0x73, 0x6B, 0x9C, 0xB1, 0xAD, 0x53, 0x94, 0x70, 0xA4, 0xD1, 0xA4, 0xD1, 0x6B, 0x2B, 0x83, 0xCD, 0x7B, 0x8B, 0x7B, 0xAC, 0x8C, 0x0D, 0x83, 0xED, 0x83, 0xEC, 0x83, 0xCC, 0x83, 0xCC, 0x83, 0xED, 0x8C, 0x2E, 0xA4, 0xF0, 0x8C, 0x0D, 0x83, 0xCD, 0x8B, 0xED, 0x8C, 0x0D, 0x83, 0xCC, 0x83, 0xCC, 0xAC, 0xF0, 0xBD, 0x72, 0xA4, 0xB0, 0xA4, 0xB0, 0xA4, 0xB0, 0x94, 0x4E, 0xA4, 0xF1, 0xAD, 0x32, 0xBD, 0x73, 0xB5, 0x54, 0xC6, 0x18, 0xC5, 0xF8, 0xE7, 0x1C, 0xE7, 0x3C, 0xC6, 0x38, 0xBD, 0xD6, 0xB5, 0x54, 0xB5, 0x73, 0xB5, 0x74, 0xB5, 0x74, 0x94, 0x91, 0x52, 0x8A, 0x5A, 0xCB, 0x73, 0xAF, 0xAD, 0x54, 0xB5, 0x74, 0xBD, 0x73, 0xB5, 0x52, 0xB5, 0x53, 0xB5, 0x53, 0xB5, 0x53, 0xB5, 0x32, 0xB5, 0x52, 0xB5, 0x52, 0xB5, 0x73, 0xBD, 0x73, 0xB5, 0x53, 0xB5, 0x52, 0xB5, 0xD5, 0xA5, 0x55, 0x9D, 0x14, 0x94, 0xD2, 0x94, 0x70, 0x7B, 0x6B, 0x9C, 0x8F, 0xA4, 0xAF, 0xA4, 0xF0, 0xB5, 0x31, 0x8C, 0x0D, 0xA4, 0xCF, 0xBD, 0x93, 0xB5, 0x52, 0xAD, 0x31, 0xBD, 0x72, 0xBD, 0x93, 0xC5, 0x93, 0xAC, 0xCF, 0xA4, 0x8E, 0xB5, 0x31, 0xA5, 0x11, 0x9C, 0xB0, 0x94, 0x70, 0xA4, 0xD1, 0x9C, 0xB0, 0x94, 0x8F, 0xBD, 0x93, 0xBD, 0xB4, 0xBD, 0xB4, 0xB5, 0x52, 0xA4, 0xD0, 0x9C, 0x8F, 0xAD, 0x11, 0xAD, 0x11, 0xAD, 0x31, 0x9C, 0xAF, 0xAD, 0x31, 0xC5, 0xD4, 0xBD, 0x93, 0xC5, 0xD4, 0xAD, 0x11, 0xA4, 0x8E, 0xAC, 0xCF, 0xCD, 0xD3, 0xCD, 0xD3, 0xCD, 0xD3, 0xCD, 0xB2, 0xCD, 0xD3, 0xBD, 0x72, 0xBD, 0x51, 0xB5, 0x30, 0xA4, 0xCF, 0xA4, 0xAF, 0xAC, 0xF0, 0xBD, 0x51, 0xBD, 0x72, 0xBD, 0x52, 0xB5, 0x11, 0xA4, 0xAF, 0xB5, 0x10, 0xB5, 0x31, 0xBD, 0x51, 0xB5, 0x30, 0xBD, 0x51, 0xA4, 0x6E, 0x83, 0x8A, 0x9C, 0x4D, 0xAC, 0xD0, 0xAC, 0xCF, 0xAC, 0xCF, 0xAC, 0xF0, 0x94, 0x0D, 0x9C, 0x4D, 0x9C, 0x4E, 0xA4, 0x6E, 0x94, 0x0D, 0xA4, 0x8F, 0x94, 0x2F, 0x52, 0x68, 0x39, 0xA6, 0x29, 0x44, 0x41, 0xE7, 0x52, 0x69, 0x5A, 0xAA, 0x52, 0x8A, 0x62, 0xEB, 0x73, 0x8D, 0x94, 0x92, 0x94, 0xB2, 0x83, 0xF0, 0xA5, 0x14, 0xA4, 0xF4, 0x8C, 0x51, 0x8C, 0x52, 0x84, 0x10, 0x4A, 0x49, 0x29, 0x25, 0x52, 0x8A, 0x5A, 0xAA, 0x73, 0x2B, 0x6B, 0x0A, 0x73, 0x2A, 0x73, 0x4B, 0x7B, 0x6B, 0x73, 0x4B, 0x6B, 0x0A, 0x7B, 0x6B, 0x94, 0x0D, 0xA4, 0x6E, 0xA4, 0x8E, 0xA4, 0xAF, 0xA4, 0x8E, 0xA4, 0x8E, 0xA4, 0x8E, 0x9C, 0x4D, 0x94, 0x0D, 0x6B, 0x2B, 0x42, 0x07, 0x21, 0x24, 0x19, 0x04, 0x21, 0x24, 0x39, 0xE7, 0x4A, 0x48, 0x3A, 0x07, 0x29, 0x65, 0x39, 0xE7, 0x5A, 0xCB, 0x73, 0x8E, 0x8C, 0x71, 0xC6, 0x38, 0x9C, 0xD2, 0x63, 0x2D, 0x8C, 0x72, 0x73, 0x8F, 0x63, 0x0C, 0x84, 0x10, 0x8C, 0x30, 0xCD, 0xF6, 0xBD, 0x95, 0xC6, 0x18, 0xA5, 0x35, 0x94, 0x71, 0x94, 0x4F, 0x9C, 0x4E, 0xA4, 0x6E, 0xA4, 0x8E, 0xA4, 0x6D, 0x9C, 0x6D, 0x9C, 0x2C, 0x93, 0xEC, 0x94, 0x0D, 0xA4, 0x8E, 0xAC, 0xCF, 0xBD, 0x31, 0xAC, 0xD0, 0xA4, 0xD0, 0xB5, 0x52, 0xAD, 0x11, 0xAC, 0xF0, 0xCD, 0xF5, 0xBD, 0x73, 0xB5, 0x73, 0x9C, 0x8F, 0x9C, 0xB0, 0xB5, 0x52, 0xAD, 0x11, 0xBD, 0xB4, 0xB5, 0x73, 0xC5, 0xF5, 0xBD, 0x72, 0xDE, 0x55, 0xD5, 0xF4, 0xCD, 0xB3, 0xE6, 0x55, 0xDE, 0x55, 0xD6, 0x14, 0xB5, 0x53, 0x52, 0x69, 0x39, 0xC8, 0x39, 0xC7, 0x41, 0xE8, 0x39, 0xC8, 0x41, 0xC7, 0x5A, 0x89, 0x5A, 0x88, 0x4A, 0x07, 0x39, 0xC6, 0x39, 0x86, 0x31, 0x65, 0x29, 0x45, 0x29, 0x45, 0x29, 0x66, 0x31, 0x87, 0x29, 0x66, 0x29, 0x25, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x29, 0x26, 0x29, 0x46, 0x31, 0x86, 0x52, 0x89, 0x7B, 0xAD, 0x8C, 0x0E, 0x94, 0x4F, 0x7B, 0xCC, 0x84, 0x0D, 0xA4, 0xF1, 0xAD, 0x32, 0x8C, 0x2E, 0xBD, 0x94, 0xA4, 0xF1, 0xAD, 0x52, 0xC5, 0xF4, 0xBD, 0xD4, 0xC6, 0x15, 0xC5, 0xD4, 0xBD, 0x93, 0xB5, 0x52, 0xBD, 0xB3, 0xB5, 0x92, 0xBD, 0x92, 0xBD, 0x92, 0xC5, 0xD3, 0xC5, 0xF4, 0xCE, 0x15, 0xBD, 0x93, 0xC5, 0xF4, 0xBD, 0x93, 0xBD, 0x92, 0xBD, 0xB3, 0xB5, 0x72, 0xC5, 0xF4, 0xA4, 0xF0, 0xC5, 0xB4, 0xB5, 0x53, 0xAD, 0x11, 0xBD, 0xB4, 0xC5, 0xF5, 0xCE, 0x15, 0xC6, 0x15, 0xAD, 0x32, 0xAD, 0x52, 0xC5, 0xF5, 0xAD, 0x32, 0xBD, 0xB4, 0x94, 0x4F, 0xAD, 0x12, 0xBD, 0xB4, 0xBD, 0xB4, 0xB5, 0x93, 0xBD, 0xB4, 0xA4, 0xD1, 0xAD, 0x32, 0xAD, 0x32, 0x7B, 0x8C, 0x8C, 0x2E, 0x94, 0x70, 0x94, 0x6F, 0xAD, 0x33, 0x9C, 0x90, 0x83, 0xEE, 0xB5, 0x53, 0x7B, 0xCD, 0x9C, 0xB0, 0x9C, 0xB0, 0x9C, 0x90, 0xA4, 0xF1, 0x8C, 0x2E, 0x8C, 0x2E, 0x94, 0x8F, 0x94, 0x8F, 0x7B, 0xCD, 0x8C, 0x0E, 0x94, 0x6F, 0x9C, 0x8F, 0xA4, 0xF1, 0x94, 0x4E, 0x83, 0xED, 0x9C, 0x8F, 0x9C, 0xB0, 0xAC, 0xF0, 0xC5, 0x93, 0xA4, 0xD0, 0xBD, 0x94, 0xB5, 0x53, 0x94, 0x6F, 0xAD, 0x53, 0xB5, 0x94, 0xCE, 0x36, 0xBD, 0xD6, 0xBD, 0xD7, 0xD6, 0xBB, 0xCE, 0x7A, 0xB5, 0x56, 0xB5, 0x76, 0xEF, 0x3C, 0xCE, 0x37, 0xCE, 0x36, 0xCD, 0xF6, 0xC5, 0xD5, 0xAD, 0x53, 0x73, 0x6D, 0x63, 0x2D, 0x7B, 0xAF, 0x8C, 0x30, 0xB5, 0x94, 0x94, 0x4F, 0xAC, 0xF1, 0xA4, 0xB0, 0xA4, 0xB0, 0xBD, 0x93, 0xAD, 0x12, 0xAD, 0x11, 0x9C, 0x6F, 0x8C, 0x0D, 0xB5, 0x32, 0xBD, 0x73, 0xAD, 0x11, 0x95, 0x2F, 0xA5, 0x94, 0x9D, 0x34, 0x94, 0xB2, 0x94, 0x4F, 0x83, 0xAB, 0xA4, 0x8F, 0xA4, 0xAF, 0xB5, 0x52, 0xB5, 0x32, 0x8C, 0x0D, 0x94, 0x2D, 0xB5, 0x52, 0xB5, 0x31, 0xAD, 0x11, 0xBD, 0x72, 0xC5, 0x93, 0xC5, 0x92, 0xA4, 0x6E, 0xA4, 0x8E, 0xAD, 0x31, 0xB5, 0x73, 0xAD, 0x12, 0x94, 0x70, 0x94, 0x70, 0x9C, 0x90, 0xAD, 0x32, 0xB5, 0x73, 0xB5, 0x72, 0xCD, 0xF5, 0xB5, 0x52, 0xB5, 0x32, 0xAD, 0x12, 0xA4, 0xF1, 0x9C, 0xB0, 0x9C, 0xD0, 0x9C, 0x8F, 0xB5, 0x52, 0xAD, 0x11, 0xBD, 0xB4, 0xB5, 0x72, 0xA4, 0x8F, 0xAC, 0xAE, 0xAC, 0xAE, 0xDE, 0x35, 0xCD, 0xD3, 0xCD, 0xD3, 0xCD, 0xD2, 0xCD, 0xF3, 0xD5, 0xF3, 0xC5, 0xB2, 0xC5, 0x71, 0xC5, 0xB2, 0xD5, 0xF3, 0xCD, 0xB2, 0xD6, 0x34, 0xCD, 0xD3, 0xCD, 0xB3, 0xCD, 0xB3, 0xC5, 0x92, 0xCD, 0xD2, 0xCD, 0xB2, 0xCD, 0x92, 0xCD, 0xB2, 0xC5, 0x71, 0xBD, 0x31, 0x9C, 0x2C, 0xA4, 0x6D, 0xC5, 0x72, 0xAC, 0xCF, 0x93, 0xEB, 0xB5, 0x30, 0xBD, 0x51, 0xA4, 0x8E, 0x9C, 0x2D, 0x94, 0x0C, 0xA4, 0xCF, 0x8B, 0xED, 0x7B, 0x8C, 0x52, 0x89, 0x31, 0xA6, 0x29, 0x44, 0x42, 0x07, 0x52, 0x89, 0x4A, 0x28, 0x42, 0x07, 0x5A, 0xAA, 0x6B, 0x4C, 0x84, 0x10, 0x8C, 0x71, 0x8C, 0x31, 0x94, 0x72, 0xAD, 0x35, 0xB5, 0x97, 0xA4, 0xF4, 0x94, 0x71, 0x6B, 0x4D, 0x42, 0x08, 0x52, 0x69, 0x4A, 0x28, 0x7B, 0xAD, 0x73, 0x8D, 0x5A, 0xCA, 0x5A, 0xCA, 0x52, 0xA9, 0x52, 0x89, 0x52, 0x89, 0x7B, 0xAC, 0x8C, 0x0D, 0x8C, 0x0D, 0x6B, 0x2A, 0x5A, 0x88, 0x52, 0x68, 0x52, 0x48, 0x52, 0x89, 0x52, 0x88, 0x52, 0x48, 0x52, 0x69, 0x62, 0xEB, 0x5A, 0xCA, 0x39, 0xE7, 0x29, 0x44, 0x39, 0xC7, 0x39, 0xE7, 0x29, 0x65, 0x42, 0x28, 0x4A, 0x48, 0x52, 0x69, 0x63, 0x2C, 0x8C, 0x50, 0x8C, 0x50, 0x8C, 0x71, 0x8C, 0x51, 0x9D, 0x15, 0xA5, 0x35, 0xAD, 0x56, 0xAD, 0x35, 0xBD, 0xB6, 0xCE, 0x17, 0xC5, 0xD7, 0xC6, 0x38, 0xAD, 0x35, 0x8C, 0x71, 0x9C, 0x6F, 0xA4, 0xAF, 0x94, 0x0C, 0xA4, 0x8E, 0xA4, 0x8E, 0x9C, 0x6D, 0x9C, 0x4D, 0x9C, 0x6D, 0xA4, 0x8E, 0xB4, 0xF0, 0xBD, 0x51, 0xBD, 0x50, 0xC5, 0x92, 0xC5, 0xD4, 0xC5, 0xD4, 0xC5, 0xD4, 0xB5, 0x52, 0xBD, 0x72, 0xC5, 0xD4, 0xC5, 0xD5, 0xBD, 0x94, 0xBD, 0xB4, 0xB5, 0x73, 0xAD, 0x32, 0xAD, 0x12, 0xAC, 0xF1, 0xAD, 0x11, 0xA4, 0xD1, 0xA4, 0xF1, 0xA4, 0xD0, 0xA4, 0xB0, 0xA4, 0xB0, 0x9C, 0x90, 0x9C, 0x6F, 0x8C, 0x2F, 0x62, 0xEB, 0x29, 0x46, 0x31, 0x87, 0x31, 0x87, 0x39, 0xA7, 0x29, 0x45, 0x21, 0x04, 0x21, 0x04, 0x21, 0x05, 0x21, 0x05, 0x21, 0x25, 0x29, 0x25, 0x21, 0x25, 0x20, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x29, 0x26, 0x31, 0x66, 0x42, 0x08, 0x6B, 0x2B, 0x8C, 0x2E, 0x84, 0x0D, 0x9C, 0xB0, 0xB5, 0x73, 0xAD, 0x52, 0x8C, 0x4E, 0xBD, 0xD4, 0xA4, 0xD0, 0xBD, 0xB3, 0xC5, 0xF4, 0xBD, 0xD4, 0xCE, 0x35, 0xC5, 0xF4, 0xC6, 0x15, 0xBD, 0x93, 0xC5, 0xF4, 0xBD, 0xB2, 0xC5, 0xB3, 0xC5, 0xD3, 0xCE, 0x14, 0x9C, 0xD0, 0xAD, 0x32, 0xB5, 0x53, 0xC5, 0xF4, 0xB5, 0x93, 0xB5, 0x72, 0xCE, 0x34, 0xB5, 0x72, 0xC5, 0xF4, 0xA4, 0xD0, 0xC5, 0xB5, 0xB5, 0x53, 0xA4, 0xF1, 0xC5, 0xD4, 0xCE, 0x36, 0xBD, 0xB4, 0xC5, 0xD4, 0xB5, 0x73, 0xC5, 0xF5, 0xCE, 0x16, 0xC5, 0xF5, 0xC5, 0xF5, 0xAD, 0x12, 0xBD, 0xB4, 0xC5, 0xF5, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0x93, 0xAD, 0x52, 0xBD, 0x93, 0xBD, 0x94, 0x7B, 0xAD, 0x9C, 0x90, 0x9C, 0xB1, 0x9C, 0x90, 0xAD, 0x32, 0x94, 0x90, 0x52, 0x68, 0x8C, 0x2E, 0x5A, 0xC9, 0x5A, 0xC9, 0x62, 0xEA, 0x62, 0xEA, 0x94, 0x6F, 0xA4, 0xD1, 0x94, 0x8F, 0xA4, 0xD1, 0x9C, 0x90, 0x83, 0xED, 0x9C, 0xB0, 0xAD, 0x32, 0xAD, 0x32, 0xB5, 0x52, 0xA4, 0xD0, 0x8C, 0x0E, 0xAD, 0x32, 0xA4, 0xD1, 0x9C, 0x6F, 0xB5, 0x52, 0xAD, 0x11, 0xB5, 0x53, 0xB5, 0x32, 0xA4, 0xF1, 0xB5, 0x94, 0xB5, 0x94, 0xC5, 0xF6, 0xCE, 0x38, 0xD6, 0x9A, 0xC6, 0x39, 0x8C, 0x72, 0xBD, 0xF8, 0xE6, 0xFC, 0xD6, 0xBA, 0xBD, 0xF7, 0x9C, 0xD2, 0x9C, 0xB1, 0xCE, 0x36, 0xC6, 0x16, 0x7B, 0xCE, 0x62, 0xEB, 0x73, 0x8E, 0x8C, 0x30, 0xBD, 0xD6, 0xAD, 0x12, 0xB5, 0x52, 0x9C, 0x8F, 0xAD, 0x11, 0xBD, 0xB4, 0xA4, 0xF1, 0xA4, 0xF0, 0xAD, 0x10, 0xA4, 0xD0, 0xD6, 0x56, 0xD6, 0x35, 0xBD, 0xB3, 0xA5, 0xB2, 0x9D, 0x54, 0x9D, 0x14, 0x94, 0xB2, 0x7B, 0xAC, 0x7B, 0x6A, 0x83, 0xAC, 0x94, 0x4E, 0xAC, 0xF1, 0xAC, 0xF1, 0xAD, 0x11, 0xA4, 0xD0, 0xAD, 0x11, 0xBD, 0x72, 0xBD, 0x73, 0xC5, 0xD4, 0xBD, 0x72, 0xCD, 0xD3, 0xAC, 0xCF, 0xAC, 0xCF, 0x83, 0xAB, 0xB5, 0x52, 0xA5, 0x11, 0x8C, 0x0E, 0x94, 0x90, 0xAD, 0x12, 0xA4, 0xD1, 0x9C, 0xAF, 0xC5, 0xD4, 0xC5, 0xD4, 0xA4, 0xD0, 0xC5, 0xF5, 0xBD, 0x93, 0xAD, 0x32, 0xA4, 0xF1, 0xA4, 0xF1, 0x9C, 0xD0, 0xBD, 0x94, 0xB5, 0x73, 0xBD, 0x93, 0xC5, 0xB4, 0x94, 0x2D, 0xBD, 0x30, 0xAC, 0xCE, 0xC5, 0x92, 0xBD, 0x10, 0xCD, 0xD2, 0xCD, 0xB2, 0xCD, 0xD2, 0xD5, 0xF3, 0xD6, 0x13, 0xCD, 0xD2, 0xCD, 0xD2, 0xD5, 0xD3, 0xCD, 0xB2, 0xD6, 0x13, 0xCD, 0xB2, 0xD5, 0xF3, 0xD5, 0xF3, 0xD5, 0xF3, 0xCD, 0xB2, 0xCD, 0x92, 0xCD, 0x91, 0xCD, 0x92, 0xC5, 0x51, 0xC5, 0x30, 0xAC, 0x8E, 0xAC, 0x8D, 0xBD, 0x51, 0xB5, 0x10, 0xBD, 0x31, 0xBD, 0x51, 0x94, 0x2D, 0xBD, 0x31, 0xAC, 0xAF, 0xA4, 0x8F, 0xAC, 0xF0, 0x94, 0x4E, 0x94, 0x6F, 0x8C, 0x0E, 0x52, 0x48, 0x31, 0xA6, 0x39, 0xC6, 0x31, 0x65, 0x39, 0xC6, 0x4A, 0x48, 0x52, 0x89, 0x52, 0x89, 0x6B, 0x4D, 0x73, 0xAE, 0x94, 0x71, 0x94, 0x92, 0xA5, 0x35, 0xA4, 0xF4, 0x7B, 0x8E, 0x83, 0xCF, 0x73, 0x8E, 0x62, 0xEB, 0x4A, 0x69, 0x4A, 0x49, 0x7B, 0xAE, 0xAD, 0x13, 0x84, 0x0F, 0x73, 0x8D, 0x6B, 0x4C, 0x6B, 0x6D, 0x73, 0x6D, 0x8C, 0x4F, 0x94, 0x4E, 0x8C, 0x0D, 0x83, 0xCD, 0x7B, 0xAD, 0x73, 0xAD, 0x73, 0xAD, 0x83, 0xEE, 0x73, 0x6C, 0x6B, 0x4C, 0x73, 0x6C, 0x8C, 0x2F, 0x94, 0x90, 0x8C, 0x4F, 0x4A, 0x68, 0x31, 0xA6, 0x39, 0xE7, 0x31, 0x85, 0x39, 0xE7, 0x42, 0x07, 0x4A, 0x49, 0x5A, 0xCA, 0x5A, 0xCA, 0x6B, 0x6D, 0x7B, 0xEF, 0x94, 0xB3, 0x9C, 0xD4, 0xAD, 0x55, 0x8C, 0x52, 0x7B, 0xAF, 0x73, 0x6E, 0xA5, 0x14, 0xBD, 0xD7, 0xCE, 0x39, 0xB5, 0x96, 0x94, 0x72, 0x8C, 0x0E, 0x9C, 0x8F, 0x8B, 0xEC, 0xAD, 0x10, 0x7B, 0x8B, 0x6B, 0x29, 0x83, 0xEC, 0x8C, 0x0C, 0x8B, 0xED, 0x8B, 0xEC, 0xAC, 0xCF, 0xB5, 0x30, 0xBD, 0x52, 0xC5, 0xB4, 0x94, 0x4F, 0x94, 0x4E, 0x9C, 0xB0, 0xA4, 0xF0, 0xA4, 0xD0, 0xA4, 0xF1, 0xA4, 0xD1, 0xA4, 0xD1, 0xA4, 0xB0, 0xA4, 0xD1, 0xAC, 0xF1, 0xAC, 0xF1, 0xA4, 0xF1, 0xAD, 0x32, 0xAD, 0x12, 0xAD, 0x32, 0xAD, 0x12, 0xAD, 0x32, 0xB5, 0x33, 0xB5, 0x53, 0xAC, 0xF2, 0x83, 0xCE, 0x31, 0x66, 0x29, 0x46, 0x29, 0x66, 0x29, 0x66, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x20, 0xE5, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x25, 0x29, 0x45, 0x4A, 0x49, 0x83, 0xEE, 0x84, 0x0D, 0x8C, 0x2E, 0x94, 0x6F, 0x94, 0x6F, 0x8C, 0x0E, 0xAD, 0x32, 0x8C, 0x2E, 0xA4, 0xD1, 0xB5, 0x73, 0xA4, 0xF1, 0x94, 0x6F, 0x94, 0x6F, 0xC5, 0xF5, 0xC5, 0xD4, 0xC5, 0xD4, 0xC5, 0xD3, 0xBD, 0xB3, 0xBD, 0xB2, 0xBD, 0xB3, 0x8C, 0x2F, 0xAD, 0x74, 0xB5, 0x94, 0xCE, 0x35, 0xC5, 0xD4, 0xBD, 0xB3, 0xBD, 0x93, 0xBD, 0x93, 0xB5, 0x72, 0xA4, 0xF1, 0xC5, 0xD4, 0xA4, 0xD1, 0xA4, 0xF1, 0xB5, 0x73, 0xD6, 0x56, 0xC5, 0xD5, 0xBD, 0xB4, 0xCE, 0x36, 0xCE, 0x36, 0xC5, 0xF5, 0xCE, 0x36, 0xB5, 0x73, 0xAD, 0x11, 0xBD, 0xB4, 0xCE, 0x15, 0xBD, 0xB3, 0xCE, 0x15, 0xDE, 0x97, 0xBD, 0xB4, 0xBD, 0xB4, 0xC5, 0xD5, 0x83, 0xEE, 0x9C, 0xB0, 0x9C, 0x90, 0xA4, 0xD1, 0xAD, 0x32, 0x8C, 0x2E, 0x5A, 0xC9, 0xAD, 0x33, 0xA4, 0xF1, 0x52, 0x89, 0x4A, 0x48, 0x73, 0x8D, 0x9C, 0xB0, 0x9C, 0xD1, 0xA4, 0xF1, 0x94, 0x8F, 0xA4, 0xF1, 0xAD, 0x12, 0xAD, 0x32, 0xCE, 0x15, 0xB5, 0x53, 0xCE, 0x36, 0xBD, 0x94, 0xA4, 0xD1, 0xBD, 0xB4, 0x6B, 0x2B, 0x4A, 0x27, 0x6B, 0x2B, 0x9C, 0xB0, 0xB5, 0x32, 0xAD, 0x12, 0xA4, 0xF1, 0xBD, 0xD4, 0x9C, 0xB1, 0x73, 0x8E, 0xA5, 0x14, 0xCE, 0x3A, 0xCE, 0x7A, 0xCE, 0x7A, 0xDE, 0xDB, 0xCE, 0x7A, 0x8C, 0x31, 0xAD, 0x35, 0xB5, 0x96, 0xBD, 0xD6, 0xCE, 0x37, 0xB5, 0x74, 0x73, 0x8D, 0x4A, 0x49, 0x52, 0x8A, 0x7B, 0xCF, 0x94, 0x91, 0xAD, 0x12, 0xAD, 0x32, 0x9C, 0xB0, 0xB5, 0x53, 0xC5, 0xD4, 0xCE, 0x35, 0xCE, 0x15, 0xC5, 0xD4, 0xC5, 0xF4, 0xD6, 0x76, 0xCE, 0x55, 0xBD, 0xB3, 0xA5, 0x93, 0xA5, 0x54, 0x9C, 0xF3, 0x94, 0x71, 0x62, 0xC9, 0x6A, 0xE9, 0x73, 0x2A, 0x7B, 0x6B, 0x8B, 0xCB, 0x94, 0x2C, 0x94, 0x2D, 0x9C, 0x4E, 0xA4, 0x8E, 0xA4, 0xCF, 0x9C, 0x4D, 0xAC, 0xCF, 0x9C, 0x6E, 0xAC, 0xCF, 0xB4, 0xEF, 0xB5, 0x10, 0x94, 0x2D, 0x94, 0x4E, 0x9C, 0xB0, 0x84, 0x0E, 0x8C, 0x2E, 0x9C, 0xB0, 0x9C, 0xB0, 0xBD, 0xD4, 0xD6, 0x56, 0xCE, 0x35, 0xC5, 0xD4, 0xBD, 0xB3, 0xBD, 0xD4, 0xBD, 0xB3, 0xAD, 0x32, 0xAD, 0x11, 0xAD, 0x32, 0xBD, 0xD4, 0xC5, 0xD4, 0xC5, 0xD4, 0xC5, 0xB4, 0x73, 0x2A, 0xAC, 0xCF, 0xA4, 0x6D, 0xC5, 0x70, 0xB5, 0x0F, 0xCD, 0x92, 0xAC, 0x8E, 0xAC, 0x8E, 0xB5, 0x0F, 0xBD, 0x30, 0xCD, 0xB2, 0xCD, 0xB2, 0xCD, 0x92, 0xC5, 0x71, 0xCD, 0x92, 0xC5, 0x71, 0xC5, 0x51, 0xBD, 0x30, 0xBD, 0x30, 0xC5, 0x71, 0xC5, 0x30, 0xC5, 0x30, 0xBD, 0x10, 0xC5, 0x30, 0xBD, 0x10, 0xBC, 0xEF, 0xAC, 0xAE, 0x94, 0x0C, 0xC5, 0x91, 0xCD, 0xD3, 0xBD, 0x71, 0xBD, 0x31, 0xCD, 0xB2, 0xBD, 0x51, 0xBD, 0x51, 0xB5, 0x11, 0xB5, 0x11, 0xAD, 0x10, 0xC5, 0xB3, 0x8B, 0xEE, 0x52, 0x48, 0x41, 0xE7, 0x31, 0xA5, 0x39, 0xC6, 0x39, 0xC6, 0x41, 0xE7, 0x52, 0x69, 0x62, 0xEB, 0x7B, 0xEF, 0x84, 0x30, 0x8C, 0x71, 0x8C, 0x31, 0xAD, 0x14, 0x94, 0x51, 0x73, 0x6D, 0x73, 0x6D, 0x63, 0x0C, 0x4A, 0x49, 0x39, 0xE7, 0x7B, 0x8D, 0xAD, 0x33, 0xAD, 0x34, 0x7B, 0xCE, 0x73, 0xAE, 0x7B, 0xCE, 0x6B, 0x6D, 0x94, 0x6F, 0x94, 0x6F, 0x9C, 0xB0, 0x94, 0x90, 0x94, 0x70, 0x8C, 0x70, 0x8C, 0x4F, 0x83, 0xCE, 0x7B, 0xCE, 0x7B, 0xCE, 0x73, 0x8C, 0x73, 0x8C, 0x7B, 0xCD, 0x7B, 0xEE, 0x63, 0x2B, 0x63, 0x0B, 0x42, 0x07, 0x42, 0x07, 0x4A, 0x28, 0x42, 0x07, 0x42, 0x28, 0x52, 0xAA, 0x5A, 0xEB, 0x63, 0x0C, 0x8C, 0x71, 0x94, 0xB3, 0x94, 0x92, 0x73, 0xAF, 0x63, 0x0C, 0x84, 0x10, 0x52, 0x6A, 0x63, 0x0D, 0xB5, 0xB7, 0xD6, 0xBB, 0xCE, 0x59, 0xC6, 0x18, 0xBD, 0x95, 0x83, 0xED, 0x9C, 0xB0, 0xAD, 0x52, 0xA4, 0xD1, 0x8C, 0x4E, 0x94, 0x4E, 0x94, 0x6E, 0x8C, 0x2E, 0x8C, 0x0E, 0x83, 0xED, 0xAD, 0x31, 0xB5, 0x52, 0xB5, 0x32, 0x94, 0x2E, 0x8C, 0x0D, 0xA4, 0xF1, 0x8C, 0x2E, 0x83, 0xED, 0x83, 0xED, 0x94, 0x4E, 0x9C, 0x8F, 0x8C, 0x2E, 0x9C, 0x6F, 0x94, 0x4E, 0x8C, 0x2E, 0x7B, 0x8C, 0x83, 0xAD, 0x83, 0xCC, 0x7B, 0xAC, 0x7B, 0xAC, 0x83, 0xAC, 0x83, 0xED, 0x94, 0x6F, 0x8C, 0x0E, 0x83, 0xEE, 0x52, 0x69, 0x21, 0x25, 0x29, 0x46, 0x29, 0x46, 0x29, 0x25, 0x21, 0x05, 0x18, 0xE4, 0x18, 0xE4, 0x21, 0x05, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xE4, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x18, 0xE4, 0x4A, 0x49, 0x6B, 0x4D, 0x41, 0xE8, 0x5A, 0xAA, 0x84, 0x0E, 0x7B, 0x8C, 0x5A, 0x89, 0x52, 0x68, 0x62, 0xEA, 0x83, 0xED, 0xA4, 0xD1, 0xAD, 0x53, 0xAD, 0x54, 0xB5, 0x74, 0xB5, 0x74, 0xAD, 0x33, 0xA4, 0xF1, 0xA4, 0xB0, 0x9C, 0x8F, 0x9C, 0x8F, 0x9C, 0xAF, 0xA4, 0xB0, 0xA4, 0xF0, 0x9C, 0x90, 0x9C, 0xD1, 0xA5, 0x11, 0x9C, 0x90, 0xA4, 0xF1, 0xAD, 0x11, 0xAD, 0x11, 0x9C, 0xB0, 0x9C, 0x8F, 0x9C, 0x8F, 0x9C, 0x8F, 0x8C, 0x2E, 0x7B, 0x8C, 0x6B, 0x4B, 0x84, 0x0E, 0xAD, 0x12, 0xBD, 0x73, 0xD6, 0x36, 0xCD, 0xF5, 0xC5, 0xD4, 0xCE, 0x15, 0xC5, 0xB4, 0xB5, 0x73, 0xC5, 0xD4, 0xCE, 0x15, 0xB5, 0x72, 0xBD, 0xB3, 0xCE, 0x35, 0xCE, 0x15, 0xCE, 0x35, 0xAD, 0x11, 0x7B, 0x8C, 0x94, 0x6F, 0x94, 0x6F, 0x9C, 0xB0, 0xAD, 0x12, 0x83, 0xCD, 0x9C, 0xD1, 0xC5, 0xF5, 0xC5, 0xD4, 0xBD, 0xB4, 0xAD, 0x32, 0xAD, 0x12, 0xA4, 0xD1, 0x94, 0x4F, 0xA4, 0xD1, 0x8C, 0x2E, 0x94, 0x4F, 0x9C, 0x8F, 0xAD, 0x11, 0xBD, 0x73, 0xBD, 0x73, 0xC5, 0xB4, 0xB5, 0x73, 0xAD, 0x32, 0xB5, 0x53, 0x52, 0x69, 0x4A, 0x69, 0x6B, 0x2B, 0x9C, 0xB1, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0x53, 0xB5, 0x73, 0x9C, 0xB1, 0x4A, 0x49, 0x73, 0x8E, 0xA5, 0x35, 0xB5, 0x76, 0xBD, 0xB8, 0xD6, 0x7B, 0xDE, 0xDC, 0xDE, 0xDC, 0xD6, 0x9A, 0xBD, 0xD7, 0xBD, 0xD6, 0xCE, 0x57, 0xCE, 0x56, 0x8C, 0x4F, 0x52, 0x8A, 0x63, 0x2C, 0x7B, 0xCF, 0x7B, 0xCF, 0x8C, 0x2F, 0xB5, 0x52, 0xA4, 0xB0, 0xB5, 0x53, 0xBD, 0xB4, 0xCE, 0x35, 0xCE, 0x15, 0xAD, 0x31, 0xAD, 0x31, 0xC5, 0xF4, 0xCE, 0x55, 0xBD, 0xD4, 0xAD, 0xD5, 0xAE, 0x16, 0xB6, 0x16, 0xB5, 0xF6, 0x9D, 0x12, 0x7B, 0x8C, 0x7B, 0x4B, 0x83, 0xCC, 0x8B, 0xCB, 0x83, 0xAB, 0x94, 0x0C, 0x93, 0xEC, 0x9C, 0x2D, 0x9C, 0x4D, 0xA4, 0x8E, 0xA4, 0x8E, 0xAC, 0xCF, 0xB4, 0xF0, 0xBD, 0x30, 0xBD, 0x51, 0xBD, 0x30, 0xB5, 0x10, 0xAC, 0xD0, 0xA4, 0xD0, 0xA4, 0xD0, 0x9C, 0x8F, 0x9C, 0x8F, 0xA4, 0xCF, 0xA4, 0xCF, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0xCF, 0xAC, 0xF0, 0xA4, 0xD0, 0x9C, 0xAF, 0x9C, 0x8F, 0xA4, 0xF0, 0xB5, 0x52, 0xBD, 0x93, 0xB5, 0x52, 0x94, 0x4E, 0x9C, 0x4D, 0xB5, 0x10, 0xAC, 0x8D, 0x94, 0x0C, 0x9C, 0x4C, 0xB4, 0xCF, 0xAC, 0xAE, 0xB4, 0xCE, 0xB4, 0xCE, 0xAC, 0x8E, 0xB4, 0xEF, 0xC5, 0x71, 0xAC, 0xAE, 0x9C, 0x0C, 0xAC, 0x8E, 0x9C, 0x4D, 0xB4, 0xEF, 0xC5, 0x71, 0xAC, 0x8E, 0xC5, 0x31, 0xAC, 0x8E, 0xAC, 0x6D, 0xAC, 0x6D, 0xB4, 0xCF, 0x93, 0xAB, 0xAC, 0x8E, 0xB4, 0xCF, 0x83, 0x8A, 0x83, 0xCB, 0xBD, 0x72, 0xD5, 0xF3, 0xD5, 0xF4, 0xC5, 0x71, 0xBD, 0x51, 0xC5, 0x92, 0xB5, 0x11, 0xB5, 0x31, 0xC5, 0x92, 0xC5, 0xB4, 0xCD, 0xD5, 0x83, 0xCD, 0x31, 0x85, 0x31, 0x65, 0x39, 0xC6, 0x39, 0xC6, 0x42, 0x07, 0x4A, 0x48, 0x52, 0x8A, 0x5A, 0xCB, 0x7B, 0xEF, 0x83, 0xEF, 0x83, 0xEF, 0x9C, 0x71, 0x8B, 0xEF, 0x83, 0xEF, 0x6B, 0x2D, 0x6B, 0x4D, 0x4A, 0x69, 0x31, 0xA6, 0x5A, 0xAA, 0x8C, 0x30, 0xB5, 0x74, 0x84, 0x2F, 0x7B, 0xEE, 0x7B, 0xCF, 0x63, 0x0B, 0x9C, 0x90, 0x94, 0x6F, 0xB5, 0x52, 0xAD, 0x12, 0x9C, 0xB1, 0x9C, 0xB0, 0x9C, 0xD1, 0x94, 0x70, 0x9C, 0xB1, 0x94, 0x90, 0x94, 0x6F, 0x9C, 0xB0, 0x9C, 0xB0, 0x84, 0x0E, 0x83, 0xEE, 0x84, 0x0F, 0x73, 0xAE, 0x5A, 0xAA, 0x42, 0x07, 0x42, 0x28, 0x42, 0x07, 0x52, 0x89, 0x5A, 0xCA, 0x4A, 0x69, 0x6B, 0x6D, 0x7B, 0xCF, 0x7B, 0xAF, 0x52, 0x8A, 0x4A, 0x29, 0x5A, 0xCB, 0x6B, 0x4D, 0x94, 0xB3, 0xC6, 0x19, 0xC6, 0x39, 0x7B, 0xF0, 0x9C, 0xB2, 0xB5, 0x33, 0x83, 0xCD, 0x9C, 0xB0, 0xA5, 0x11, 0xAD, 0x32, 0x8C, 0x2E, 0x8C, 0x2E, 0xA4, 0xD0, 0x94, 0x4E, 0x94, 0x4F, 0x83, 0xCD, 0xB5, 0x73, 0xBD, 0x73, 0xB5, 0x52, 0x7B, 0x6B, 0x8C, 0x2E, 0xB5, 0x52, 0xAD, 0x31, 0x9C, 0x8F, 0x8C, 0x4D, 0xAD, 0x10, 0xAD, 0x11, 0xAD, 0x31, 0xB5, 0x52, 0xBD, 0xB3, 0xB5, 0x52, 0x9C, 0xB0, 0x9C, 0xB0, 0x9C, 0x90, 0xB5, 0x53, 0x9C, 0x6F, 0xB5, 0x32, 0x9C, 0xB0, 0xA4, 0xD0, 0x9C, 0x90, 0x73, 0x6C, 0x7B, 0xAE, 0x21, 0x05, 0x21, 0x25, 0x21, 0x05, 0x18, 0xE4, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x10, 0xA3, 0x18, 0xA3, 0x21, 0x05, 0x18, 0xC4, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC3, 0x18, 0xA3, 0x18, 0xC4, 0x18, 0xE4, 0x21, 0x05, 0x20, 0xE5, 0x18, 0xC4, 0x62, 0xEC, 0xB5, 0x55, 0x94, 0x71, 0x4A, 0x29, 0x31, 0x86, 0x31, 0x66, 0x29, 0x46, 0x29, 0x25, 0x29, 0x25, 0x31, 0x66, 0x5A, 0xA9, 0x7B, 0xAE, 0x94, 0x71, 0xA4, 0xF2, 0xAD, 0x33, 0xAD, 0x33, 0xAD, 0x32, 0xB5, 0x53, 0xBD, 0x94, 0xC5, 0xD4, 0xC5, 0x94, 0xC5, 0xB4, 0xCD, 0xF5, 0xCE, 0x16, 0xCD, 0xF5, 0xBD, 0xB4, 0xBD, 0x94, 0x9C, 0xD1, 0xA4, 0xD1, 0x9C, 0xB0, 0x8C, 0x0E, 0x7B, 0xAD, 0x83, 0xED, 0x83, 0xCD, 0xA4, 0xD0, 0xA4, 0xD1, 0x9C, 0x90, 0x9C, 0x90, 0x9C, 0x90, 0x94, 0x4F, 0x8C, 0x2E, 0x8C, 0x0E, 0x83, 0xED, 0x83, 0xED, 0x8B, 0xEE, 0x7B, 0xAD, 0x83, 0xED, 0x8C, 0x2E, 0x8C, 0x0E, 0x94, 0x4E, 0xA4, 0xD0, 0xA4, 0xF1, 0x9C, 0x90, 0x8C, 0x2E, 0x8C, 0x2E, 0x94, 0x4F, 0x8C, 0x2E, 0x94, 0x6F, 0x94, 0x90, 0x73, 0x4B, 0xAD, 0x12, 0xAD, 0x11, 0xB5, 0x52, 0xB5, 0x72, 0xAD, 0x32, 0x9C, 0xB0, 0x94, 0x6F, 0x8C, 0x2E, 0x7B, 0xAC, 0x83, 0xED, 0x94, 0x4E, 0x9C, 0xB0, 0xB5, 0x52, 0xC5, 0xB3, 0xC5, 0xB4, 0xC5, 0xB4, 0xB5, 0x52, 0xA4, 0xD0, 0xA4, 0xD0, 0x6B, 0x2B, 0x73, 0x6C, 0x83, 0xCE, 0xA4, 0xD1, 0xB5, 0x52, 0xB5, 0x73, 0xB5, 0x93, 0xC6, 0x15, 0xCE, 0x77, 0xA5, 0x33, 0x63, 0x2C, 0x84, 0x10, 0xAD, 0x56, 0xA4, 0xF5, 0xC6, 0x19, 0xDE, 0xDC, 0xA4, 0xF4, 0x9C, 0xB3, 0x9C, 0xB3, 0x9C, 0x92, 0xC5, 0xD6, 0xCE, 0x36, 0x7B, 0xAD, 0x4A, 0x69, 0x5A, 0xCB, 0x73, 0x8D, 0x6B, 0x4C, 0x8C, 0x2F, 0xB5, 0x32, 0xA4, 0xF1, 0xB5, 0x73, 0xB5, 0x73, 0xC5, 0xF4, 0xCE, 0x15, 0xBD, 0xB3, 0xBD, 0xB3, 0xCE, 0x35, 0xD6, 0x55, 0xBD, 0xD4, 0xB6, 0x55, 0xBE, 0xD8, 0xC6, 0xF8, 0xCE, 0xF8, 0xC6, 0xB8, 0xB5, 0xD5, 0x83, 0xED, 0x6B, 0x29, 0x6B, 0x2A, 0x73, 0x4A, 0x7B, 0x8B, 0x6B, 0x09, 0x73, 0x2A, 0x83, 0xCC, 0x7B, 0x6A, 0x73, 0x4A, 0x62, 0xC8, 0x5A, 0x87, 0x6A, 0xE9, 0x73, 0x4A, 0x8B, 0xEC, 0x93, 0xEC, 0x8B, 0xEC, 0x9C, 0x4E, 0x9C, 0x4E, 0xA4, 0x8F, 0xAC, 0xAF, 0xAC, 0xAF, 0xB5, 0x10, 0xB5, 0x10, 0xB4, 0xEF, 0xAC, 0xCF, 0xAC, 0xCF, 0xAC, 0xCF, 0xA4, 0xAF, 0xAC, 0xCF, 0xAC, 0xAF, 0xA4, 0x8F, 0xA4, 0x8E, 0xA4, 0x8E, 0xAC, 0xCF, 0xB5, 0x10, 0xB5, 0x0F, 0xAC, 0xCE, 0xAC, 0xCF, 0xAC, 0xAE, 0xA4, 0x6D, 0xA4, 0x4D, 0x9C, 0x0C, 0x93, 0xEB, 0x93, 0xCB, 0x94, 0x0C, 0x9C, 0x2C, 0xA4, 0x4D, 0xA4, 0x8E, 0xA4, 0x8E, 0x9C, 0x2C, 0xA4, 0x4D, 0xA4, 0x6D, 0xA4, 0x4C, 0xA4, 0x6D, 0x9B, 0xEB, 0xAC, 0x8D, 0xAC, 0xAE, 0xB4, 0xAE, 0xA4, 0x4D, 0xA4, 0x2C, 0xBD, 0x0F, 0xB4, 0xCF, 0x7B, 0x4A, 0x73, 0x09, 0x83, 0x8A, 0x94, 0x0C, 0x8B, 0xCB, 0x9C, 0x2D, 0xAC, 0xAF, 0xA4, 0xAF, 0xC5, 0x93, 0xB5, 0x31, 0xC5, 0xD3, 0xCE, 0x14, 0xA4, 0xD0, 0x63, 0x0A, 0x31, 0xA5, 0x39, 0xA6, 0x39, 0xC6, 0x42, 0x07, 0x41, 0xE7, 0x39, 0xC7, 0x52, 0x8A, 0x6B, 0x4D, 0x5A, 0xCB, 0x4A, 0x28, 0x4A, 0x08, 0x41, 0xC7, 0x5A, 0xCB, 0x4A, 0x49, 0x63, 0x0C, 0x52, 0x6A, 0x29, 0x65, 0x31, 0x66, 0x7B, 0xAE, 0x8C, 0x0F, 0x84, 0x0F, 0x7B, 0xEF, 0x73, 0xAE, 0x63, 0x0B, 0xA4, 0xF2, 0x94, 0x4E, 0xB5, 0x52, 0xBD, 0x73, 0xBD, 0x93, 0xB5, 0x32, 0xAD, 0x11, 0xAD, 0x12, 0xB5, 0x73, 0xAD, 0x32, 0xAD, 0x11, 0xB5, 0x73, 0xB5, 0x32, 0xA4, 0xD1, 0xA5, 0x11, 0x9C, 0x90, 0x9C, 0xB0, 0x7B, 0x8D, 0x73, 0x8D, 0x39, 0xA6, 0x39, 0xE6, 0x42, 0x27, 0x42, 0x28, 0x4A, 0x68, 0x63, 0x0B, 0x5A, 0xCA, 0x63, 0x0B, 0x52, 0x69, 0x41, 0xE8, 0x42, 0x08, 0x8C, 0x51, 0xA4, 0xF4, 0xC6, 0x19, 0x9C, 0xB4, 0x5A, 0xAC, 0xA5, 0x14, 0xB5, 0x75, 0xC5, 0xB5, 0xA4, 0xB1, 0x94, 0x4F, 0xAD, 0x12, 0x94, 0x2E, 0x8C, 0x2E, 0x9C, 0x90, 0x94, 0x4E, 0x94, 0x6F, 0x7B, 0xAC, 0x94, 0x6F, 0xB5, 0x72, 0xB5, 0x52, 0x6B, 0x0A, 0x8C, 0x2E, 0xA4, 0xD0, 0x94, 0x6F, 0x94, 0x2E, 0x94, 0x6F, 0x94, 0x6E, 0xA4, 0xAF, 0xAC, 0xF1, 0x9C, 0xAF, 0x9C, 0x8F, 0x9C, 0x8F, 0x94, 0x6F, 0x9C, 0xB0, 0xA4, 0xD0, 0xB5, 0x73, 0x94, 0x4F, 0x9C, 0x90, 0xAC, 0xF1, 0xB5, 0x72, 0xA4, 0xF1, 0x7B, 0xAD, 0x8C, 0x30, 0x21, 0x04, 0x18, 0xE4, 0x20, 0xE4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xC4, 0x18, 0xE4, 0x10, 0xC4, 0x10, 0x83, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xA4, 0x18, 0xC4, 0x18, 0xC3, 0x18, 0xC4, 0x18, 0xC3, 0x10, 0xA4, 0x10, 0xA3, 0x18, 0xA3, 0x18, 0xC4, 0x18, 0xC4, 0x10, 0xA4, 0x10, 0xA3, 0x29, 0x45, 0x42, 0x08, 0x21, 0x05, 0x21, 0x05, 0x21, 0x04, 0x20, 0xE4, 0x18, 0xC4, 0x18, 0xC3, 0x20, 0xE4, 0x29, 0x45, 0x31, 0x87, 0x42, 0x08, 0x52, 0x8A, 0x7B, 0xAE, 0x94, 0x50, 0x9C, 0xB1, 0x83, 0xEE, 0x8B, 0xEE, 0x83, 0xEE, 0x7B, 0xAD, 0x7B, 0xAD, 0x73, 0x8D, 0x83, 0xEE, 0x94, 0x50, 0x94, 0x90, 0x94, 0x50, 0x7B, 0xCE, 0x73, 0x6D, 0x6B, 0x4D, 0x63, 0x0C, 0x5A, 0xCB, 0x5A, 0xAA, 0x62, 0xEB, 0x7B, 0x8D, 0x73, 0x4C, 0x7B, 0x6C, 0x94, 0x2F, 0x9C, 0xB0, 0xAD, 0x12, 0xB5, 0x33, 0xB5, 0x33, 0xB5, 0x33, 0xB5, 0x33, 0xAD, 0x32, 0xB5, 0x53, 0xB5, 0x53, 0xAD, 0x12, 0xAD, 0x32, 0xA4, 0xF1, 0xA4, 0xD1, 0xB5, 0x73, 0xBD, 0x73, 0xBD, 0x94, 0xBD, 0x94, 0xC5, 0xB4, 0xB5, 0x32, 0xBD, 0x94, 0xA4, 0xD1, 0x83, 0xEE, 0x8C, 0x0E, 0x83, 0xED, 0x83, 0xED, 0x8C, 0x0E, 0x8C, 0x0E, 0x83, 0xEE, 0x8B, 0xEE, 0x94, 0x6F, 0xA4, 0xB1, 0x94, 0x6F, 0x8C, 0x0E, 0x7B, 0xCC, 0x83, 0xAC, 0x83, 0xCD, 0x94, 0x0F, 0x9C, 0x6F, 0x94, 0x4F, 0x94, 0x4F, 0x83, 0xED, 0x94, 0x4F, 0x7B, 0x8C, 0x7B, 0x8C, 0xAD, 0x32, 0xA4, 0xF1, 0xB5, 0x52, 0xBD, 0xD4, 0xBD, 0xB4, 0xBD, 0xD4, 0xC6, 0x15, 0x8C, 0x4F, 0x6B, 0x4D, 0x84, 0x31, 0x83, 0xF0, 0xBD, 0xF8, 0xA4, 0xF4, 0x7B, 0xAF, 0xA4, 0xD3, 0xBD, 0x76, 0x7B, 0x8E, 0xC6, 0x17, 0xCE, 0x78, 0x63, 0x2C, 0x5A, 0xCA, 0x63, 0x0C, 0x63, 0x0B, 0x52, 0xAA, 0x5A, 0xAA, 0x8C, 0x2F, 0x94, 0x4E, 0xAD, 0x32, 0xAD, 0x11, 0xC5, 0xF4, 0xC5, 0xF4, 0xA4, 0xD0, 0xA4, 0xF0, 0xCE, 0x14, 0xD6, 0x55, 0xC5, 0xF4, 0xA5, 0xF1, 0xA5, 0xB4, 0x95, 0x32, 0x84, 0x50, 0x3A, 0x07, 0x5A, 0xC9, 0x6B, 0x29, 0x73, 0x6A, 0x83, 0xCC, 0x94, 0x4E, 0x94, 0x6E, 0x8C, 0x2D, 0x8C, 0x0D, 0x9C, 0x8F, 0xA4, 0xD0, 0x9C, 0x8F, 0x94, 0x6F, 0x7B, 0x8C, 0x7B, 0xAC, 0x73, 0x4B, 0x7B, 0xAB, 0x83, 0xAB, 0x83, 0xCC, 0x94, 0x0D, 0x8B, 0xCC, 0x83, 0xAB, 0xA4, 0x8F, 0x9C, 0x2D, 0x9C, 0x4D, 0xA4, 0x6D, 0x9C, 0x4D, 0x83, 0xAB, 0x7B, 0x6A, 0x94, 0x0C, 0x83, 0xCB, 0x73, 0x2A, 0x73, 0x29, 0x83, 0xCB, 0x94, 0x0D, 0x9C, 0x2D, 0x8B, 0xCC, 0x9C, 0x4D, 0xB4, 0xEF, 0xB5, 0x10, 0xAC, 0xAE, 0xA4, 0x8E, 0xAC, 0xAE, 0xA4, 0x4D, 0xAC, 0x8E, 0xAC, 0xCF, 0xB4, 0xF0, 0x8B, 0xEC, 0x93, 0xEC, 0x9C, 0x2D, 0x9C, 0x2C, 0xAC, 0xAF, 0xAC, 0xCF, 0xAC, 0xAE, 0xAC, 0xCF, 0xAC, 0x8E, 0xAC, 0x8E, 0xAC, 0x8E, 0xA4, 0x8E, 0xAC, 0x8E, 0xAC, 0x8E, 0xAC, 0xAE, 0xB4, 0xCF, 0xBD, 0x30, 0xBD, 0x10, 0xB4, 0xF0, 0xB4, 0xF0, 0x9C, 0x4E, 0x94, 0x2D, 0x94, 0x2D, 0x8B, 0xEC, 0x8B, 0xEC, 0x94, 0x0D, 0xA4, 0x6E, 0xAC, 0xAE, 0x94, 0x0C, 0x9C, 0x4D, 0xA4, 0x8F, 0x94, 0x2E, 0x4A, 0x28, 0x39, 0xA6, 0x39, 0xC6, 0x39, 0xA6, 0x39, 0xC6, 0x4A, 0x28, 0x52, 0x69, 0x52, 0x8A, 0x42, 0x08, 0x39, 0xC7, 0x39, 0xC7, 0x31, 0x86, 0x39, 0xA6, 0x31, 0x86, 0x6B, 0x2D, 0x5A, 0xCB, 0x42, 0x08, 0x4A, 0x28, 0xAD, 0x34, 0xA4, 0xD2, 0x9C, 0xB1, 0x9C, 0xB1, 0x94, 0x71, 0x8C, 0x4F, 0xB5, 0x53, 0x94, 0x2D, 0xAD, 0x11, 0xBD, 0x52, 0xC5, 0xB3, 0xC5, 0xB3, 0xC5, 0x92, 0xBD, 0x51, 0xBD, 0x52, 0xBD, 0x52, 0xBD, 0x51, 0xB5, 0x11, 0xAC, 0xF1, 0xA4, 0xAF, 0xAD, 0x11, 0xAD, 0x11, 0xAD, 0x11, 0xA4, 0xD0, 0xAD, 0x11, 0x6B, 0x2A, 0x39, 0xA5, 0x39, 0xC6, 0x39, 0xE6, 0x4A, 0x48, 0x42, 0x07, 0x41, 0xE7, 0x52, 0x69, 0x4A, 0x48, 0x31, 0xA6, 0x4A, 0x69, 0x84, 0x10, 0x9C, 0xD4, 0xC6, 0x39, 0xA5, 0x35, 0x7B, 0xD0, 0xBD, 0xD7, 0xAD, 0x55, 0xC5, 0xB6, 0xCD, 0xB5, 0xB5, 0x33, 0x8C, 0x0E, 0xA4, 0xF1, 0xBD, 0xF6, 0xB5, 0x53, 0x94, 0x70, 0xA4, 0xF1, 0x7B, 0xAC, 0x8C, 0x0D, 0xB5, 0x52, 0xAD, 0x12, 0x5A, 0xA9, 0x9C, 0x6F, 0xAC, 0xF0, 0x9C, 0xAF, 0x9C, 0x8F, 0x94, 0x6E, 0x9C, 0x6F, 0xA4, 0xF0, 0xAD, 0x10, 0xA4, 0xD0, 0x9C, 0xAF, 0x94, 0x6E, 0x94, 0x4E, 0x8C, 0x2E, 0x8C, 0x4E, 0x94, 0x4E, 0x8C, 0x2E, 0x8C, 0x0D, 0xA4, 0xF0, 0x94, 0x4E, 0x8C, 0x2E, 0x7B, 0xCD, 0x94, 0x91, 0x29, 0x66, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC4, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xC4, 0x10, 0xC4, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xA4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xE4, 0x20, 0xE4, 0x20, 0xE5, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x21, 0x04, 0x29, 0x25, 0x29, 0x66, 0x29, 0x66, 0x39, 0xC7, 0x52, 0x6A, 0x6B, 0x4D, 0x7B, 0xAE, 0x9C, 0xB2, 0xA4, 0xF2, 0x8C, 0x2F, 0x8C, 0x50, 0x7B, 0xCE, 0x7B, 0xAE, 0x73, 0x8D, 0x6B, 0x2C, 0x63, 0x0C, 0x5A, 0xAB, 0x52, 0x6A, 0x52, 0x6A, 0x52, 0x6A, 0x5A, 0x8B, 0x5A, 0xAB, 0x5A, 0x8B, 0x5A, 0xAB, 0x5A, 0xAA, 0x5A, 0xCB, 0x73, 0x6D, 0x8C, 0x2F, 0x8C, 0x0E, 0x94, 0x2F, 0x9C, 0xB0, 0x94, 0x70, 0x94, 0x2F, 0x83, 0xED, 0x8C, 0x2E, 0xA4, 0xD1, 0x9C, 0x70, 0x94, 0x4F, 0x9C, 0x90, 0x9C, 0x70, 0xAD, 0x11, 0xBD, 0x72, 0xBD, 0x73, 0xB5, 0x11, 0xAC, 0xF1, 0xB5, 0x32, 0xBD, 0x94, 0xB5, 0x53, 0xA4, 0xD1, 0x9C, 0xB0, 0xA4, 0xF1, 0xBD, 0x94, 0xBD, 0x73, 0xC5, 0xD5, 0xCD, 0xF6, 0xCE, 0x16, 0xCE, 0x16, 0xD6, 0x57, 0xC5, 0xD5, 0xC5, 0xD5, 0xBD, 0x94, 0xC5, 0xD5, 0xC5, 0xD5, 0xC5, 0xD4, 0xC5, 0xB4, 0xC5, 0xD5, 0xC5, 0xD5, 0xC5, 0xD4, 0xBD, 0x94, 0xB5, 0x53, 0xB5, 0x53, 0xB5, 0x53, 0xAD, 0x32, 0xAC, 0xF1, 0xA4, 0xB0, 0x94, 0x6F, 0xA4, 0xB0, 0x9C, 0xB0, 0x94, 0x70, 0x7B, 0xAD, 0x6B, 0x4D, 0x8C, 0x51, 0xBD, 0xF7, 0x84, 0x10, 0xAD, 0x35, 0x8C, 0x51, 0xBD, 0x96, 0x94, 0x51, 0xCE, 0x59, 0xD6, 0xBA, 0x73, 0xAF, 0x4A, 0x49, 0x5A, 0xCA, 0x52, 0xAA, 0x5A, 0xEB, 0x6B, 0x2C, 0xAD, 0x13, 0x8C, 0x2E, 0x9C, 0xB0, 0xB5, 0x73, 0xB5, 0x93, 0xB5, 0x72, 0x9C, 0x8F, 0x94, 0x4E, 0xC5, 0xD4, 0xC5, 0xF4, 0xC5, 0xD4, 0x9D, 0xD0, 0x9D, 0x72, 0x9D, 0x73, 0x84, 0x50, 0x7C, 0x2F, 0x94, 0xD0, 0x6B, 0x4A, 0x83, 0xCC, 0x94, 0x6F, 0x94, 0x6F, 0x9C, 0x8F, 0x83, 0xED, 0xA4, 0xF0, 0xA4, 0xD0, 0xA4, 0xF0, 0xA4, 0xD0, 0x9C, 0xAF, 0x9C, 0x8F, 0x9C, 0xAF, 0x94, 0x2E, 0x94, 0x6E, 0x94, 0x4E, 0xA4, 0xD0, 0x9C, 0x6F, 0x94, 0x6F, 0x83, 0xCC, 0xA4, 0xCF, 0xA4, 0xAF, 0x9C, 0x8E, 0xAD, 0x10, 0xAC, 0xF0, 0xAD, 0x11, 0x9C, 0x8F, 0x94, 0x4E, 0x9C, 0xB0, 0x94, 0x6F, 0x73, 0x6B, 0x94, 0x4E, 0x8C, 0x2E, 0x8C, 0x0D, 0x7B, 0x6B, 0x73, 0x29, 0x83, 0x6A, 0x83, 0x6A, 0x83, 0x8A, 0x83, 0x8A, 0x83, 0xAB, 0x9C, 0x6E, 0x83, 0x8B, 0x8B, 0xEC, 0xB5, 0x10, 0x9C, 0x8E, 0x9C, 0xD0, 0xA4, 0xD0, 0xA4, 0xD0, 0xAD, 0x11, 0xA4, 0xF0, 0xAD, 0x11, 0xAD, 0x11, 0xA4, 0xCF, 0x9C, 0x8E, 0x9C, 0x4D, 0xA4, 0x8E, 0x9C, 0x6E, 0x9C, 0x6E, 0x9C, 0x4E, 0x8B, 0xEC, 0x94, 0x0C, 0x8B, 0xCB, 0x8B, 0xCB, 0x8B, 0xCC, 0x8B, 0xCB, 0x9C, 0x4D, 0xAC, 0xEF, 0xC5, 0x92, 0xCD, 0xB3, 0xC5, 0x71, 0xB4, 0xF0, 0xBD, 0x10, 0xAC, 0xCF, 0xB4, 0xEF, 0xB5, 0x10, 0xAC, 0xD0, 0x73, 0x4B, 0x31, 0x85, 0x41, 0xE7, 0x41, 0xE7, 0x42, 0x08, 0x4A, 0x48, 0x42, 0x08, 0x4A, 0x48, 0x39, 0xA6, 0x29, 0x44, 0x29, 0x24, 0x31, 0x65, 0x4A, 0x28, 0x6B, 0x4D, 0x94, 0x72, 0x73, 0x8E, 0x52, 0x8A, 0x7B, 0x8D, 0x73, 0x4C, 0x62, 0xCA, 0x6B, 0x2B, 0x84, 0x0F, 0x9C, 0x90, 0xB5, 0x52, 0xC5, 0x93, 0xA4, 0x8E, 0x9C, 0x6E, 0x9C, 0x4E, 0x9C, 0x6E, 0xAC, 0xCF, 0xBD, 0x30, 0xC5, 0x71, 0xCD, 0xD2, 0xCD, 0x92, 0xC5, 0x51, 0xBD, 0x50, 0xBD, 0x51, 0xCD, 0xB2, 0xCD, 0xB3, 0xC5, 0x72, 0xAC, 0xF0, 0xAD, 0x11, 0xB5, 0x51, 0xAC, 0xF0, 0x6A, 0xE9, 0x29, 0x64, 0x31, 0xA5, 0x42, 0x07, 0x39, 0xA5, 0x39, 0xA6, 0x42, 0x07, 0x42, 0x07, 0x39, 0xC7, 0x5A, 0xAA, 0x73, 0xAE, 0x94, 0xB3, 0xC6, 0x19, 0x94, 0x93, 0x84, 0x10, 0xBD, 0xF8, 0xAD, 0x56, 0xAD, 0x35, 0xA4, 0xD3, 0xD6, 0x38, 0x9C, 0x50, 0x52, 0x8A, 0x8C, 0x51, 0xB5, 0x95, 0x8C, 0x4F, 0xB5, 0x53, 0x8C, 0x4E, 0x94, 0x4F, 0xB5, 0x73, 0xB5, 0x53, 0x52, 0x68, 0xA4, 0xD1, 0xA4, 0xF0, 0xAD, 0x31, 0xAC, 0xF0, 0x9C, 0xAF, 0x9C, 0x8F, 0xAD, 0x31, 0xB5, 0x51, 0xB5, 0x52, 0xA4, 0xD0, 0xA4, 0xB0, 0xA4, 0xD0, 0xA4, 0xD1, 0x8C, 0x4E, 0x94, 0x6F, 0x84, 0x0E, 0x8C, 0x4E, 0xAD, 0x11, 0x9C, 0x6F, 0x94, 0x2F, 0x94, 0x2F, 0x94, 0x50, 0x39, 0xA7, 0x21, 0x05, 0x18, 0xC4, 0x18, 0xE4, 0x19, 0x05, 0x18, 0xE4, 0x10, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC3, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x20, 0xE5, 0x49, 0x46, 0x71, 0xA8, 0x59, 0x86, 0x21, 0x04, 0x21, 0x05, 0x21, 0x05, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xC3, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x21, 0x25, 0x29, 0x46, 0x29, 0x66, 0x39, 0xA7, 0x31, 0xA7, 0x39, 0xE8, 0x4A, 0x29, 0x62, 0xEC, 0x7B, 0xAE, 0x6B, 0x4D, 0x62, 0xEC, 0x5A, 0xAB, 0x52, 0x6A, 0x52, 0x4A, 0x4A, 0x29, 0x4A, 0x09, 0x41, 0xE8, 0x41, 0xC8, 0x41, 0xC8, 0x41, 0xC8, 0x4A, 0x09, 0x52, 0x8B, 0x5A, 0xAB, 0x52, 0x8B, 0x52, 0x8B, 0x5A, 0xAB, 0x73, 0x6D, 0x9C, 0xD2, 0xB5, 0x74, 0xB5, 0x74, 0xBD, 0xB4, 0xA4, 0xF2, 0x94, 0x70, 0xA4, 0xF2, 0x9C, 0xD1, 0x9C, 0xD1, 0xA4, 0xF2, 0x8C, 0x2F, 0x83, 0xEE, 0xAD, 0x32, 0xBD, 0xB3, 0xC5, 0xD3, 0xC5, 0xB3, 0xAD, 0x11, 0xA4, 0xF0, 0x9C, 0xAF, 0x9C, 0x8F, 0xAD, 0x11, 0xB5, 0x52, 0x9C, 0xB0, 0xA4, 0xD0, 0xAD, 0x11, 0xAC, 0xF1, 0xA4, 0xB0, 0x9C, 0x8F, 0xAD, 0x32, 0xA4, 0xD0, 0x94, 0x6F, 0x94, 0x4E, 0x8C, 0x0E, 0xAC, 0xF1, 0xB5, 0x32, 0xB5, 0x32, 0xB5, 0x11, 0xAC, 0xF1, 0xA4, 0xD0, 0xAD, 0x11, 0xA4, 0xB0, 0xAC, 0xD0, 0xAC, 0xD0, 0xB5, 0x32, 0xAC, 0xD0, 0xAC, 0xF1, 0xA4, 0xB0, 0xB5, 0x11, 0xBD, 0x73, 0xBD, 0x73, 0xB5, 0x52, 0xBD, 0x93, 0xB5, 0x33, 0x6B, 0x2C, 0x73, 0xAF, 0x8C, 0x72, 0xB5, 0x96, 0xB5, 0x56, 0x83, 0xEF, 0xB5, 0x55, 0xCE, 0x7A, 0xD6, 0xDB, 0xEF, 0x5D, 0xD6, 0xBA, 0x73, 0x8E, 0x52, 0xAA, 0x52, 0xAA, 0x63, 0x2C, 0x7B, 0xEF, 0xB5, 0x54, 0xAD, 0x33, 0xA4, 0xD1, 0x94, 0x6F, 0x9C, 0x6F, 0x94, 0x6F, 0x8C, 0x2E, 0x8C, 0x2E, 0x94, 0x4F, 0x94, 0x4F, 0x8C, 0x0E, 0x95, 0xAE, 0x9D, 0x70, 0x9D, 0x52, 0x9D, 0x52, 0x9D, 0x32, 0x6B, 0x6B, 0x94, 0x8F, 0xBD, 0xF4, 0xCE, 0x95, 0xBD, 0xF4, 0x9C, 0x8F, 0x6B, 0x2A, 0xAD, 0x52, 0xA4, 0xD0, 0xAD, 0x11, 0xAD, 0x31, 0xAD, 0x31, 0xAD, 0x31, 0xB5, 0x52, 0xAD, 0x11, 0xAD, 0x11, 0xA4, 0xD0, 0xBD, 0x93, 0xAD, 0x31, 0xAC, 0xF0, 0x94, 0x2D, 0xA4, 0xAF, 0xAD, 0x10, 0xB5, 0x31, 0xBD, 0x72, 0xB5, 0x72, 0xAD, 0x32, 0xAD, 0x12, 0xB5, 0x53, 0xB5, 0x73, 0xAD, 0x12, 0x94, 0x4F, 0x9C, 0x90, 0x9C, 0xD0, 0x9C, 0x90, 0xAD, 0x11, 0x7B, 0x8C, 0x7B, 0x6B, 0x62, 0xC8, 0x83, 0xAC, 0xA4, 0xB0, 0x8B, 0xED, 0x94, 0x4E, 0x94, 0x2E, 0x83, 0xAB, 0xB5, 0x10, 0xAD, 0x11, 0xB5, 0x93, 0xB5, 0x53, 0xAD, 0x32, 0xB5, 0x73, 0xBD, 0xB4, 0xB5, 0x53, 0xA5, 0x11, 0xAD, 0x32, 0x9C, 0xD0, 0x9C, 0xD0, 0xA4, 0xF1, 0x9C, 0xB0, 0xA4, 0xF1, 0xAD, 0x52, 0x9C, 0xB0, 0x8C, 0x0D, 0x9C, 0x8F, 0xA4, 0xD0, 0xA4, 0xF1, 0x9C, 0x8F, 0xA4, 0xD0, 0xA4, 0x8E, 0xB4, 0xF0, 0xAC, 0xCF, 0xBD, 0x51, 0xBD, 0x51, 0xB5, 0x30, 0xAC, 0xEF, 0xA4, 0xAF, 0xBD, 0x52, 0x8C, 0x0D, 0x8C, 0x2E, 0x4A, 0x48, 0x41, 0xE7, 0x39, 0xC6, 0x39, 0xA6, 0x41, 0xE7, 0x52, 0x69, 0x4A, 0x48, 0x41, 0xE7, 0x29, 0x45, 0x31, 0x65, 0x39, 0xA6, 0x52, 0x69, 0x84, 0x10, 0xAD, 0x55, 0x83, 0xEF, 0x4A, 0x48, 0x5A, 0xAA, 0x31, 0x45, 0x29, 0x45, 0x41, 0xE7, 0x5A, 0x89, 0xA4, 0xB0, 0xBD, 0x31, 0xBD, 0x50, 0xCD, 0x92, 0xCD, 0xB2, 0xCD, 0xB2, 0xCD, 0xB2, 0xCD, 0xB2, 0xC5, 0x92, 0xC5, 0x51, 0xBD, 0x30, 0xC5, 0x71, 0xC5, 0x71, 0xBD, 0x10, 0xBD, 0x30, 0xBD, 0x31, 0xBD, 0x10, 0xB4, 0xEF, 0xB4, 0xEF, 0xAC, 0xEF, 0xAC, 0xCF, 0xB5, 0x10, 0xAC, 0xF0, 0x62, 0xC9, 0x29, 0x64, 0x39, 0xA5, 0x39, 0xA5, 0x39, 0xC6, 0x41, 0xE7, 0x42, 0x28, 0x42, 0x08, 0x52, 0x8A, 0x6B, 0x4D, 0xA5, 0x35, 0xBD, 0xD7, 0x84, 0x11, 0x7B, 0xD0, 0xA5, 0x35, 0xBD, 0xF8, 0x94, 0x93, 0x73, 0x6D, 0xBD, 0x95, 0x9C, 0x71, 0xB5, 0x35, 0x9C, 0xB2, 0x9C, 0xF3, 0x5A, 0xCB, 0x94, 0x70, 0x8C, 0x4E, 0x9C, 0xB0, 0xBD, 0x94, 0xB5, 0x32, 0x8B, 0xEE, 0xA4, 0xF1, 0xAC, 0xF0, 0xB5, 0x52, 0xBD, 0x72, 0xBD, 0x93, 0xB5, 0x31, 0xBD, 0x72, 0xB5, 0x51, 0xB5, 0x52, 0xBD, 0x72, 0xBD, 0x93, 0xB5, 0x32, 0xB5, 0x52, 0xB5, 0x73, 0xAD, 0x11, 0x9C, 0xB0, 0xA5, 0x12, 0xAD, 0x32, 0xA4, 0xB0, 0x94, 0x4F, 0x83, 0xCD, 0x6B, 0x2B, 0x21, 0x04, 0x18, 0xC4, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xE4, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC4, 0x10, 0xC4, 0x30, 0xE5, 0x71, 0x87, 0xA1, 0xE9, 0xA2, 0x8A, 0x31, 0x04, 0x20, 0xE5, 0x21, 0x05, 0x20, 0xE4, 0x18, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xA3, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC3, 0x18, 0xC4, 0x21, 0x04, 0x29, 0x45, 0x29, 0x66, 0x29, 0x66, 0x31, 0x67, 0x31, 0x87, 0x39, 0xA7, 0x41, 0xE8, 0x4A, 0x29, 0x52, 0x6A, 0x52, 0x8B, 0x4A, 0x4A, 0x4A, 0x09, 0x41, 0xE8, 0x39, 0xC8, 0x39, 0x87, 0x39, 0x87, 0x31, 0x66, 0x31, 0x66, 0x31, 0x86, 0x31, 0x87, 0x39, 0xC8, 0x41, 0xE8, 0x4A, 0x4A, 0x52, 0x8B, 0x52, 0xAB, 0x5A, 0xCC, 0x62, 0xEC, 0x73, 0x8E, 0x94, 0x91, 0xB5, 0x74, 0xBD, 0x94, 0xB5, 0x74, 0xB5, 0x74, 0xAD, 0x33, 0xAD, 0x53, 0xAD, 0x53, 0x9C, 0x90, 0x84, 0x2E, 0xB5, 0x93, 0xBD, 0xB3, 0xBD, 0x72, 0xCD, 0xF4, 0xBD, 0xB4, 0xBD, 0xD4, 0xAD, 0x12, 0xAD, 0x12, 0xB5, 0x53, 0xB5, 0x93, 0xBD, 0x92, 0xBD, 0x72, 0xAD, 0x11, 0xAD, 0x31, 0xB5, 0x73, 0xA4, 0xF1, 0xAD, 0x52, 0xAD, 0x52, 0xA5, 0x11, 0x94, 0x6F, 0x7B, 0x6C, 0xCD, 0xF5, 0xCE, 0x15, 0xCD, 0xF4, 0xAC, 0xD0, 0xBD, 0x52, 0x8C, 0x0D, 0xA4, 0x8F, 0xA4, 0xAF, 0xAC, 0xF0, 0xBD, 0x52, 0xBD, 0x72, 0xB5, 0x52, 0xC5, 0xB3, 0xBD, 0x72, 0xAC, 0xF1, 0x7B, 0x6B, 0x8C, 0x2E, 0xA4, 0xD0, 0xA4, 0xB0, 0xC5, 0xB4, 0xA4, 0xF2, 0x52, 0xAA, 0x7B, 0xF0, 0xB5, 0x76, 0x73, 0x8E, 0x94, 0x92, 0xCE, 0x39, 0xDE, 0xDB, 0xC6, 0x18, 0x94, 0xB3, 0xB5, 0x96, 0xBD, 0xD7, 0x73, 0xAE, 0x5A, 0xEB, 0x6B, 0x4D, 0x7B, 0xEF, 0xA5, 0x13, 0xAD, 0x33, 0xAD, 0x12, 0xB5, 0x73, 0xBD, 0x73, 0xBD, 0x73, 0xB5, 0x53, 0xC5, 0xB4, 0xBD, 0x73, 0xBD, 0x73, 0xBD, 0x94, 0x85, 0x0A, 0x9D, 0xAF, 0x95, 0x30, 0x8C, 0xCF, 0x4A, 0x87, 0x6B, 0x4A, 0x84, 0x2D, 0x9D, 0x2E, 0x9D, 0xAD, 0xC6, 0x93, 0xB5, 0x92, 0xA4, 0xCF, 0xAD, 0x30, 0x84, 0x0C, 0xB5, 0x52, 0xB5, 0x52, 0xAD, 0x11, 0xAD, 0x31, 0xB5, 0x52, 0xB5, 0x32, 0xB5, 0x32, 0xAD, 0x31, 0xC5, 0xD4, 0xB5, 0x51, 0xB5, 0x31, 0xAD, 0x11, 0xAC, 0xF0, 0xB5, 0x31, 0xC5, 0x92, 0xCD, 0xF4, 0xBD, 0x93, 0xB5, 0x53, 0xBD, 0x73, 0xBD, 0xB4, 0xAD, 0x12, 0xAD, 0x32, 0xB5, 0x32, 0x8C, 0x2E, 0x94, 0x6F, 0xAD, 0x52, 0xB5, 0x52, 0x9C, 0xB0, 0x94, 0x4E, 0x6A, 0xE9, 0x83, 0xED, 0x73, 0x6A, 0x9C, 0x8F, 0x9C, 0x6F, 0x9C, 0xB0, 0x9C, 0x8F, 0xB5, 0x31, 0xB5, 0x73, 0xC5, 0xF5, 0xBD, 0xB4, 0xAD, 0x53, 0xB5, 0x94, 0xBD, 0xB4, 0xAD, 0x53, 0xB5, 0x94, 0xAD, 0x52, 0xA5, 0x11, 0xAD, 0x32, 0xAD, 0x53, 0xA5, 0x11, 0xAD, 0x53, 0xB5, 0x94, 0xB5, 0x73, 0xA4, 0xF1, 0xBD, 0xB4, 0xBD, 0xB4, 0xB5, 0x93, 0xAD, 0x52, 0xC5, 0xF5, 0xA4, 0xAF, 0xA4, 0x8E, 0xAC, 0xD0, 0xBD, 0x72, 0xD6, 0x14, 0xCD, 0xF4, 0xCD, 0xF4, 0xCD, 0xD3, 0xCD, 0xF4, 0x9C, 0x90, 0x9C, 0xB0, 0x7B, 0xCE, 0x4A, 0x48, 0x41, 0xE7, 0x39, 0xC7, 0x39, 0xC7, 0x4A, 0x28, 0x42, 0x08, 0x41, 0xE7, 0x4A, 0x28, 0x5A, 0xAA, 0x52, 0x8A, 0x62, 0xEB, 0x94, 0x71, 0xB5, 0x75, 0x7B, 0xCF, 0x5A, 0xCB, 0x4A, 0x48, 0x39, 0x86, 0x4A, 0x49, 0x5A, 0xCA, 0x41, 0xC6, 0x83, 0xCD, 0x94, 0x2D, 0x8B, 0xCB, 0x9C, 0x6D, 0x9C, 0x4D, 0xA4, 0x6E, 0xBD, 0x10, 0xC5, 0x71, 0x94, 0x0C, 0xA4, 0x8E, 0x94, 0x0C, 0x94, 0x2D, 0x94, 0x2C, 0x94, 0x0C, 0x94, 0x2D, 0x9C, 0x6E, 0xA4, 0x8E, 0xA4, 0x8E, 0x94, 0x2D, 0x9C, 0x4D, 0xA4, 0x8E, 0xB5, 0x10, 0xAC, 0xF0, 0x5A, 0xA8, 0x21, 0x03, 0x21, 0x23, 0x39, 0xA5, 0x42, 0x07, 0x39, 0xC6, 0x42, 0x07, 0x41, 0xE7, 0x42, 0x08, 0x5A, 0xEB, 0xC6, 0x18, 0xB5, 0x76, 0x8C, 0x72, 0x73, 0x8F, 0x9C, 0xF4, 0xB5, 0x96, 0x84, 0x10, 0x7B, 0xCF, 0x6B, 0x0C, 0x39, 0xA6, 0xC5, 0xF7, 0xD6, 0x79, 0xAD, 0x34, 0x7B, 0xEF, 0x73, 0x6C, 0x8B, 0xED, 0x94, 0x2E, 0xAD, 0x11, 0xAC, 0xF1, 0x9C, 0xB0, 0x9C, 0x90, 0x9C, 0xB0, 0xAC, 0xF0, 0xAC, 0xF0, 0xB5, 0x11, 0x9C, 0x8E, 0x9C, 0x8F, 0x9C, 0x6F, 0x9C, 0x8F, 0xA4, 0xD0, 0xA4, 0xD0, 0xA4, 0xAF, 0x9C, 0x8F, 0xAC, 0xF1, 0xBD, 0x94, 0xBD, 0x94, 0xBD, 0x94, 0xB5, 0x73, 0xA4, 0xF1, 0x94, 0x6F, 0x7B, 0x8D, 0x52, 0x49, 0x18, 0xC4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x18, 0xE4, 0x10, 0xC4, 0x10, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xA3, 0x49, 0x26, 0x79, 0x47, 0xAA, 0x4A, 0x79, 0xA8, 0x28, 0xE4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC3, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x20, 0xE5, 0x21, 0x05, 0x21, 0x25, 0x29, 0x46, 0x29, 0x66, 0x31, 0x87, 0x39, 0xA7, 0x39, 0xC8, 0x39, 0xC8, 0x39, 0xE8, 0x4A, 0x09, 0x42, 0x09, 0x41, 0xC8, 0x39, 0xC8, 0x31, 0x87, 0x31, 0x87, 0x31, 0x87, 0x29, 0x66, 0x29, 0x46, 0x29, 0x46, 0x29, 0x46, 0x29, 0x66, 0x31, 0x87, 0x39, 0xA7, 0x39, 0xC8, 0x42, 0x29, 0x4A, 0x4A, 0x4A, 0x2A, 0x4A, 0x4A, 0x52, 0x8B, 0x63, 0x2D, 0x83, 0xEF, 0x9C, 0xD2, 0xB5, 0x74, 0xB5, 0x94, 0xB5, 0xB5, 0xAD, 0x53, 0x94, 0x70, 0x94, 0x6F, 0xBD, 0xB4, 0xCD, 0xF4, 0xBD, 0x92, 0xC5, 0xF4, 0xB5, 0x52, 0xB5, 0x73, 0xAD, 0x53, 0xBD, 0xB4, 0xB5, 0x73, 0xB5, 0x73, 0xAD, 0x51, 0xBD, 0x92, 0xBD, 0x72, 0xB5, 0x51, 0xB5, 0x93, 0xAD, 0x32, 0xC6, 0x16, 0xBD, 0xD5, 0xBD, 0xF5, 0xB5, 0x73, 0x9C, 0xD0, 0xCD, 0xF4, 0xCE, 0x35, 0xCE, 0x15, 0xA4, 0xB0, 0xBD, 0x73, 0x94, 0x6F, 0x94, 0x0D, 0x9C, 0x4E, 0xAD, 0x11, 0xAC, 0xF0, 0xAC, 0xF0, 0xBD, 0xB3, 0xAD, 0x11, 0xAD, 0x11, 0xAD, 0x11, 0x8C, 0x0D, 0xA4, 0xF0, 0xAD, 0x11, 0xAD, 0x11, 0xBD, 0x93, 0xC5, 0xB4, 0x94, 0x70, 0x5A, 0xCB, 0x8C, 0x51, 0x73, 0xAF, 0x7B, 0xCF, 0xB5, 0x96, 0x83, 0xF0, 0x5A, 0xCC, 0x73, 0x6E, 0x84, 0x30, 0x94, 0xB2, 0x8C, 0x51, 0x62, 0xEC, 0x6B, 0x4D, 0x7B, 0xEF, 0x9C, 0xF3, 0xC5, 0xF6, 0xC5, 0xF4, 0xC5, 0xF4, 0xC5, 0xF4, 0xB5, 0x73, 0xBD, 0xB3, 0xC5, 0xB4, 0xBD, 0x72, 0xBD, 0x93, 0xAD, 0x11, 0x74, 0xE9, 0x7C, 0xEC, 0x85, 0x0F, 0x84, 0x8F, 0x39, 0xE6, 0x52, 0x88, 0x73, 0xAB, 0x7C, 0x2A, 0x74, 0x47, 0x9D, 0x8B, 0xBE, 0x30, 0xB5, 0xB0, 0x94, 0x8C, 0x94, 0x6D, 0xA4, 0xAF, 0xB5, 0x52, 0xAD, 0x31, 0xAD, 0x11, 0xB5, 0x31, 0xB5, 0x52, 0xB5, 0x32, 0xBD, 0x73, 0xC5, 0xB3, 0xB5, 0x51, 0xAD, 0x31, 0x9C, 0x6E, 0xAC, 0xF0, 0xB5, 0x10, 0xBD, 0x92, 0xC5, 0xB3, 0xC5, 0xB4, 0xC5, 0xB4, 0xC5, 0xD4, 0xC5, 0xD5, 0xBD, 0xB4, 0xBD, 0xD5, 0xA4, 0xD1, 0x94, 0x4F, 0xAD, 0x32, 0xBD, 0xB4, 0xAD, 0x11, 0xB5, 0x73, 0xAD, 0x32, 0xAD, 0x32, 0xA4, 0xD0, 0x8C, 0x2E, 0xA4, 0xF1, 0x9C, 0x6F, 0x9C, 0xB0, 0x9C, 0xAF, 0xB5, 0x10, 0xBD, 0xB3, 0xBD, 0xD5, 0xB5, 0x94, 0xBD, 0xD4, 0xBD, 0xB4, 0xBD, 0xD5, 0xB5, 0x74, 0xC5, 0xF5, 0xBD, 0xB4, 0xB5, 0x73, 0xBD, 0xD5, 0xBD, 0xD5, 0xB5, 0x94, 0xB5, 0xB4, 0xBD, 0xD5, 0xBD, 0xB4, 0xA5, 0x11, 0xAD, 0x32, 0xAD, 0x32, 0xAD, 0x32, 0xB5, 0x73, 0xC5, 0xF5, 0xA4, 0xCF, 0xA4, 0x8E, 0xB5, 0x52, 0xBD, 0x93, 0xCD, 0xF4, 0xCD, 0xF4, 0xCD, 0xD3, 0xCD, 0xD3, 0xCD, 0xF4, 0x9C, 0xB0, 0x8C, 0x4F, 0x84, 0x0E, 0x73, 0x6D, 0x41, 0xE7, 0x39, 0xA6, 0x29, 0x44, 0x39, 0xC6, 0x39, 0xC6, 0x52, 0x69, 0x52, 0x89, 0x5A, 0xAA, 0x63, 0x0C, 0x73, 0x8D, 0x94, 0x91, 0x8C, 0x30, 0x7B, 0xAE, 0x6B, 0x2C, 0x42, 0x07, 0x39, 0xA6, 0x39, 0xC7, 0x42, 0x08, 0x4A, 0x28, 0xA4, 0xF1, 0xB5, 0x31, 0x9C, 0x6E, 0xAC, 0xF0, 0xB5, 0x31, 0xA4, 0xAF, 0xAC, 0xF0, 0xC5, 0x72, 0x94, 0x0C, 0xA4, 0xAF, 0xAC, 0xF0, 0xAD, 0x31, 0xA4, 0xAF, 0xAD, 0x11, 0xAD, 0x11, 0xA4, 0xD0, 0xA4, 0xD0, 0xAC, 0xF0, 0x9C, 0xB0, 0x84, 0x0D, 0x94, 0x6F, 0xA4, 0xF0, 0xAD, 0x11, 0xB5, 0x73, 0x73, 0x6C, 0x4A, 0x48, 0x63, 0x2B, 0x29, 0x64, 0x42, 0x27, 0x42, 0x07, 0x39, 0xC6, 0x84, 0x10, 0x94, 0xB3, 0xD6, 0x7A, 0xA5, 0x35, 0x8C, 0x51, 0x8C, 0x52, 0x9C, 0xF4, 0x8C, 0x52, 0x7B, 0xAF, 0x84, 0x10, 0xC5, 0xD7, 0x62, 0xCB, 0x62, 0xEC, 0x84, 0x10, 0x9C, 0xD3, 0xAD, 0x34, 0xA4, 0xD2, 0xAC, 0xD0, 0xA4, 0xB0, 0xB5, 0x53, 0xB5, 0x73, 0xC5, 0xB4, 0xC5, 0xD5, 0xC5, 0xD5, 0xC5, 0xB4, 0xBD, 0x94, 0xB5, 0x52, 0xB5, 0x53, 0xC5, 0xD5, 0xC5, 0xB4, 0xC5, 0xB4, 0xBD, 0x93, 0xBD, 0x94, 0xC5, 0xB4, 0xBD, 0x94, 0xBD, 0x94, 0xB5, 0x53, 0xB5, 0x32, 0xAD, 0x12, 0xAD, 0x32, 0xAD, 0x12, 0xAD, 0x53, 0x9C, 0x90, 0x41, 0xE7, 0x20, 0xE4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0xC3, 0x10, 0xC4, 0x10, 0xA3, 0x10, 0xC4, 0x18, 0xC4, 0x10, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x21, 0x05, 0x18, 0xE4, 0x20, 0xA3, 0x61, 0x87, 0x71, 0x26, 0x89, 0xE9, 0x30, 0x83, 0x20, 0xC4, 0x18, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x21, 0x05, 0x21, 0x05, 0x29, 0x25, 0x29, 0x46, 0x29, 0x66, 0x31, 0x87, 0x31, 0xA7, 0x39, 0xC8, 0x39, 0xC8, 0x31, 0xA7, 0x39, 0xA8, 0x39, 0xC8, 0x39, 0xC8, 0x31, 0x87, 0x31, 0x87, 0x31, 0x66, 0x29, 0x66, 0x29, 0x66, 0x29, 0x66, 0x29, 0x66, 0x29, 0x46, 0x29, 0x46, 0x21, 0x25, 0x29, 0x46, 0x29, 0x46, 0x31, 0x87, 0x31, 0xA7, 0x39, 0xC8, 0x4A, 0x4A, 0x4A, 0x6A, 0x52, 0x6B, 0x5A, 0xAB, 0x63, 0x0C, 0x7B, 0xCF, 0xA4, 0xF3, 0xBD, 0xB5, 0xBD, 0xD5, 0xA5, 0x12, 0x94, 0x90, 0xBD, 0x94, 0xCE, 0x14, 0xBD, 0x72, 0xC5, 0xD4, 0xAD, 0x52, 0xAD, 0x32, 0xB5, 0x94, 0xBD, 0xD5, 0xBD, 0xD5, 0xBD, 0xB4, 0xB5, 0x52, 0xBD, 0xB3, 0xB5, 0x51, 0xB5, 0x31, 0xAD, 0x31, 0xAD, 0x52, 0xC6, 0x15, 0xBD, 0xB5, 0xB5, 0xB4, 0xB5, 0x93, 0xA4, 0xF1, 0xC5, 0xF4, 0xCE, 0x14, 0xC5, 0xD4, 0xA4, 0xB0, 0xBD, 0x93, 0x94, 0x4F, 0xAC, 0xD0, 0xAC, 0xF0, 0xBD, 0x93, 0xAD, 0x31, 0xBD, 0x73, 0xCE, 0x15, 0xA4, 0xF0, 0xAD, 0x11, 0xB5, 0x52, 0xA4, 0xD0, 0xA4, 0xF1, 0xA4, 0xD0, 0xAD, 0x32, 0xC5, 0xF5, 0xC5, 0xD4, 0xC5, 0xF5, 0x6B, 0x4C, 0x62, 0xEC, 0x4A, 0x29, 0x52, 0x69, 0x63, 0x0C, 0x6B, 0x4D, 0x5A, 0xCB, 0x6B, 0x2D, 0x73, 0x8E, 0x84, 0x10, 0xAD, 0x76, 0x6B, 0x6E, 0x73, 0xAF, 0x84, 0x10, 0x9C, 0xF3, 0xBD, 0xB5, 0xC5, 0xD4, 0xC6, 0x14, 0xBD, 0xB3, 0xAD, 0x11, 0xC5, 0xD3, 0xCE, 0x35, 0xCE, 0x15, 0xCE, 0x35, 0xC5, 0xF4, 0x74, 0xAA, 0x8D, 0x4F, 0x9D, 0x71, 0x7C, 0x4D, 0x63, 0x49, 0x52, 0xE8, 0x5A, 0xC8, 0x63, 0x29, 0x5B, 0x26, 0x7C, 0x68, 0x84, 0x87, 0x95, 0x2B, 0xAD, 0xB0, 0xAD, 0x90, 0x8C, 0x6C, 0x9C, 0x8F, 0x9C, 0x8F, 0x9C, 0x8E, 0x9C, 0xAF, 0xAD, 0x11, 0xB5, 0x32, 0xBD, 0x93, 0xB5, 0x52, 0xBD, 0x93, 0xB5, 0x52, 0x83, 0xCB, 0xB5, 0x10, 0xB5, 0x30, 0xC5, 0xD3, 0xCE, 0x15, 0xD6, 0x35, 0xCE, 0x15, 0xCE, 0x35, 0xCE, 0x35, 0xC5, 0xF5, 0xCE, 0x16, 0x8C, 0x0E, 0xC5, 0xD5, 0xC5, 0xD5, 0xBD, 0xB4, 0xB5, 0x94, 0xB5, 0x94, 0xB5, 0x73, 0xBD, 0x94, 0xBD, 0x94, 0xB5, 0x73, 0xAD, 0x32, 0xA4, 0xB0, 0xA4, 0xD0, 0xA4, 0xF0, 0xB5, 0x31, 0xC5, 0xF4, 0xC5, 0xF6, 0xB5, 0x94, 0xC6, 0x16, 0xBD, 0xD5, 0xBD, 0xD5, 0xC5, 0xF6, 0xC6, 0x16, 0xC6, 0x36, 0xC6, 0x15, 0xC5, 0xF5, 0xBD, 0xD5, 0xB5, 0xB4, 0xC6, 0x16, 0xBD, 0xD5, 0xBD, 0xD5, 0xBD, 0xD5, 0xC6, 0x16, 0xC6, 0x15, 0xB5, 0x73, 0xBD, 0xB4, 0xBD, 0x93, 0xB5, 0x10, 0xA4, 0x8E, 0xAD, 0x11, 0xC5, 0xD4, 0xCD, 0xF4, 0xD5, 0xF4, 0xCD, 0xD3, 0xCD, 0xF3, 0xD6, 0x15, 0xA4, 0xD1, 0x9C, 0xD1, 0x8C, 0x2F, 0x94, 0x71, 0x52, 0x89, 0x41, 0xE7, 0x39, 0xC6, 0x39, 0xA6, 0x41, 0xE7, 0x4A, 0x28, 0x4A, 0x49, 0x63, 0x0B, 0x6B, 0x4C, 0x6B, 0x4C, 0x73, 0x8E, 0x7B, 0xCE, 0x8C, 0x51, 0x73, 0x8E, 0x5A, 0xAA, 0x52, 0x69, 0x8C, 0x71, 0x7B, 0xAE, 0x52, 0x69, 0xA4, 0xF1, 0xC5, 0xD4, 0xAC, 0xF0, 0x9C, 0xAF, 0xAD, 0x31, 0xCD, 0xF5, 0xA4, 0xAF, 0xBD, 0x51, 0x94, 0x4D, 0xAC, 0xF0, 0xA4, 0xD0, 0xA4, 0xD0, 0xA4, 0xF1, 0xAD, 0x32, 0xB5, 0x52, 0xB5, 0x52, 0xAD, 0x31, 0xAD, 0x11, 0xB5, 0x73, 0xAD, 0x52, 0xB5, 0x73, 0xAD, 0x52, 0xB5, 0x73, 0xBD, 0xB4, 0xB5, 0x73, 0xA5, 0x12, 0x63, 0x0B, 0x18, 0xE3, 0x29, 0x64, 0x31, 0xA5, 0x4A, 0x69, 0x94, 0xB2, 0xC6, 0x39, 0xC5, 0xF8, 0xA4, 0xF4, 0x84, 0x11, 0x84, 0x31, 0x7B, 0xCF, 0x7B, 0xD0, 0x73, 0x6E, 0x94, 0x72, 0xCE, 0x38, 0xB5, 0x55, 0x52, 0x49, 0x4A, 0x28, 0x5A, 0xAA, 0x5A, 0x8A, 0xA4, 0xF2, 0xBD, 0x52, 0x9C, 0x6E, 0xAD, 0x11, 0xB5, 0x52, 0xB5, 0x52, 0xA4, 0xD0, 0xA4, 0xB0, 0xBD, 0x73, 0x9C, 0x8F, 0xA4, 0xD0, 0xB5, 0x31, 0xAD, 0x11, 0xAD, 0x11, 0xA4, 0xD0, 0xA4, 0xB0, 0xA4, 0xD0, 0xA4, 0xB0, 0xA4, 0xB0, 0xAD, 0x12, 0xA4, 0xF1, 0x9C, 0xB0, 0xA4, 0xD0, 0xAD, 0x12, 0xB5, 0x53, 0xB5, 0x73, 0x94, 0x4F, 0x31, 0x86, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0xC4, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC4, 0x10, 0xA3, 0x38, 0xE4, 0x71, 0x46, 0x89, 0xA8, 0x61, 0x46, 0x20, 0xA3, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xA3, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x21, 0x05, 0x21, 0x05, 0x21, 0x25, 0x21, 0x05, 0x21, 0x25, 0x21, 0x25, 0x29, 0x46, 0x31, 0xA7, 0x39, 0xC8, 0x39, 0xC8, 0x31, 0x87, 0x31, 0x87, 0x31, 0x87, 0x31, 0x66, 0x29, 0x46, 0x31, 0x66, 0x31, 0x87, 0x31, 0x66, 0x29, 0x66, 0x29, 0x46, 0x29, 0x46, 0x29, 0x46, 0x29, 0x46, 0x21, 0x25, 0x21, 0x05, 0x29, 0x46, 0x31, 0x87, 0x39, 0xC8, 0x39, 0xC8, 0x41, 0xE9, 0x4A, 0x29, 0x52, 0x8B, 0x52, 0x8B, 0x52, 0x8B, 0x5A, 0xCC, 0x73, 0x8E, 0x94, 0x91, 0x94, 0x91, 0x94, 0x90, 0xBD, 0x73, 0xC5, 0xF4, 0xBD, 0x92, 0xC5, 0xD4, 0xBD, 0xD4, 0xBD, 0xB4, 0xBD, 0xB4, 0xBD, 0xD4, 0xC6, 0x16, 0xBD, 0xB4, 0xB5, 0x93, 0xC5, 0xB3, 0xC5, 0xD3, 0xC5, 0xF4, 0xB5, 0x93, 0xB5, 0x73, 0xC5, 0xF5, 0xC5, 0xF5, 0xB5, 0x94, 0xBD, 0xB4, 0xB5, 0x52, 0xC5, 0xD4, 0xCE, 0x35, 0xBD, 0xD3, 0xAD, 0x11, 0xC5, 0xB4, 0x94, 0x2E, 0xA4, 0xAF, 0xB5, 0x51, 0xC5, 0xD4, 0xCE, 0x15, 0xD6, 0x35, 0xCE, 0x15, 0xB5, 0x72, 0xBD, 0xB3, 0xCE, 0x15, 0xC5, 0xF4, 0xBD, 0xB4, 0xB5, 0x53, 0xAD, 0x52, 0xC5, 0xF4, 0xC5, 0xD4, 0xC5, 0xB4, 0xAD, 0x32, 0x6B, 0x0B, 0x52, 0x8A, 0x5A, 0xAA, 0x84, 0x10, 0x8C, 0x51, 0x39, 0xC7, 0x4A, 0x4A, 0x8C, 0x31, 0x84, 0x10, 0xC5, 0xF8, 0x9C, 0xB3, 0x84, 0x31, 0x8C, 0x51, 0x6B, 0x4D, 0xAD, 0x13, 0xCE, 0x15, 0xCE, 0x35, 0xBD, 0xD3, 0xB5, 0x72, 0xC5, 0xD4, 0xCE, 0x34, 0xD6, 0x55, 0xC5, 0xF3, 0xC5, 0xF4, 0x7D, 0x0C, 0x7C, 0xEC, 0x6C, 0x4B, 0x7C, 0x8B, 0x84, 0x8C, 0x8C, 0x8C, 0x84, 0x0B, 0x8C, 0x0C, 0x94, 0x6D, 0x94, 0xCC, 0x7C, 0x68, 0x5B, 0x84, 0x63, 0xE5, 0x7C, 0x68, 0x9C, 0xEC, 0x9C, 0x6D, 0x94, 0x2D, 0x94, 0x2D, 0x94, 0x2D, 0x94, 0x2D, 0x94, 0x2D, 0x9C, 0x6E, 0x9C, 0x6E, 0x9C, 0x6E, 0x8B, 0xEC, 0x7B, 0x6A, 0xB5, 0x10, 0x8B, 0xCB, 0x94, 0x4D, 0xA4, 0xAF, 0xA4, 0xD0, 0xA4, 0x8F, 0xA4, 0xB0, 0xAD, 0x11, 0xB5, 0x32, 0xB5, 0x73, 0xB5, 0x53, 0xB5, 0x93, 0xB5, 0x73, 0xBD, 0x94, 0xC5, 0xF5, 0xCE, 0x15, 0xCE, 0x16, 0xCE, 0x36, 0xC5, 0xD5, 0xC5, 0xD5, 0xB5, 0x73, 0xA4, 0xF1, 0xA4, 0xF1, 0xB5, 0x31, 0xBD, 0x51, 0xBD, 0xB4, 0xCE, 0x57, 0xBD, 0xF5, 0xC6, 0x16, 0xCE, 0x57, 0xCE, 0x36, 0xC6, 0x36, 0xCE, 0x36, 0xC6, 0x16, 0xC6, 0x16, 0xC6, 0x16, 0xC5, 0xF5, 0xBD, 0xF5, 0xC6, 0x16, 0xBD, 0xD5, 0xC5, 0xF5, 0xBD, 0xD5, 0xBD, 0xB4, 0xC5, 0xF5, 0xB5, 0x73, 0xB5, 0x73, 0xBD, 0xB4, 0xAD, 0x10, 0x9C, 0x6E, 0x94, 0x4E, 0xC5, 0xD4, 0xCD, 0xD3, 0xDE, 0x35, 0xCD, 0xF4, 0xCD, 0xB3, 0xD6, 0x15, 0xAD, 0x12, 0xAD, 0x33, 0x9C, 0xF2, 0x9C, 0xF2, 0x8C, 0x50, 0x4A, 0x28, 0x42, 0x07, 0x4A, 0x28, 0x41, 0xE7, 0x4A, 0x48, 0x5A, 0xCA, 0x5A, 0xEB, 0x5A, 0xCA, 0x5A, 0xCB, 0x62, 0xEB, 0x83, 0xEF, 0x94, 0x92, 0x8C, 0x30, 0x7B, 0xCF, 0x6B, 0x2D, 0x9C, 0xB3, 0x83, 0xF0, 0x62, 0xEB, 0x83, 0xEE, 0xCE, 0x35, 0xC5, 0xD4, 0xA5, 0x11, 0xBD, 0xB3, 0xCE, 0x15, 0x9C, 0x8F, 0xB5, 0x51, 0x7B, 0x6A, 0x94, 0x6F, 0xAD, 0x11, 0xAD, 0x11, 0xC5, 0xD4, 0xC6, 0x15, 0xC5, 0xF5, 0xCE, 0x36, 0xBD, 0xD4, 0xBD, 0xD4, 0xBD, 0xB4, 0xBD, 0xB4, 0xBD, 0xB4, 0xCE, 0x56, 0xC5, 0xD5, 0xBD, 0xD4, 0xBD, 0xD4, 0xB5, 0x94, 0x8C, 0x50, 0x4A, 0x49, 0x42, 0x28, 0x29, 0x44, 0x39, 0xE7, 0x7B, 0xCF, 0xB5, 0x96, 0xAD, 0x55, 0x9C, 0xD4, 0x73, 0x8F, 0x52, 0xAB, 0x63, 0x2D, 0x73, 0x6E, 0x73, 0x6E, 0x73, 0x6E, 0xB5, 0x96, 0xBD, 0x96, 0x7B, 0xAE, 0x62, 0xEB, 0x39, 0xA6, 0x62, 0xEB, 0x9C, 0x91, 0xB5, 0x52, 0xA4, 0xB0, 0xC5, 0xB3, 0xC5, 0xD3, 0xC5, 0xB3, 0xB5, 0x52, 0x9C, 0x90, 0xB5, 0x52, 0xC5, 0xB3, 0xC5, 0xD3, 0xCD, 0xD3, 0xDE, 0x75, 0xC5, 0xB3, 0xBD, 0x72, 0xBD, 0x92, 0xD6, 0x14, 0xC5, 0x93, 0xA4, 0xB0, 0xA4, 0xF0, 0xAC, 0xF0, 0x9C, 0x8F, 0x9C, 0x6F, 0xBD, 0x73, 0xB5, 0x53, 0xAD, 0x12, 0x7B, 0xAD, 0x29, 0x45, 0x21, 0x04, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x08, 0x83, 0x10, 0xA3, 0x18, 0xC4, 0x10, 0xC3, 0x10, 0xC3, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x20, 0x83, 0x61, 0x26, 0x81, 0x67, 0x91, 0xE9, 0x38, 0xA3, 0x18, 0xA3, 0x18, 0xA3, 0x18, 0xA3, 0x18, 0xA3, 0x18, 0xA3, 0x10, 0xA3, 0x18, 0xA3, 0x18, 0xA3, 0x18, 0xA3, 0x18, 0xC3, 0x18, 0xC3, 0x18, 0xE4, 0x20, 0xE4, 0x21, 0x05, 0x21, 0x05, 0x21, 0x25, 0x29, 0x25, 0x29, 0x46, 0x29, 0x46, 0x31, 0x66, 0x31, 0x87, 0x39, 0xA7, 0x31, 0xA7, 0x31, 0x87, 0x31, 0x66, 0x29, 0x25, 0x21, 0x25, 0x21, 0x05, 0x21, 0x25, 0x29, 0x46, 0x29, 0x46, 0x21, 0x25, 0x29, 0x46, 0x29, 0x25, 0x29, 0x25, 0x29, 0x25, 0x29, 0x25, 0x29, 0x46, 0x29, 0x46, 0x29, 0x46, 0x31, 0x87, 0x31, 0xA7, 0x31, 0x87, 0x31, 0xA7, 0x41, 0xE8, 0x4A, 0x29, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x6A, 0x52, 0xAB, 0x63, 0x2C, 0x84, 0x0F, 0xB5, 0x53, 0xC5, 0xF4, 0xCE, 0x14, 0xCE, 0x15, 0xCE, 0x36, 0xC5, 0xF5, 0xB5, 0x73, 0xB5, 0xB4, 0xC6, 0x36, 0xBD, 0xB4, 0xC6, 0x15, 0xCE, 0x55, 0xCE, 0x35, 0xD6, 0x76, 0xBD, 0xB4, 0xB5, 0x94, 0xBD, 0xD5, 0xBD, 0xD4, 0xB5, 0x94, 0xB5, 0x94, 0xBD, 0x93, 0xBD, 0x93, 0xD6, 0x76, 0xC5, 0xD4, 0xB5, 0x52, 0xC5, 0xB3, 0x94, 0x0E, 0x7B, 0x6B, 0x94, 0x4E, 0xBD, 0xB3, 0xB5, 0x92, 0xC5, 0xD3, 0xAD, 0x11, 0xAC, 0xF0, 0xB5, 0x52, 0xC5, 0xD3, 0xC5, 0xF4, 0xBD, 0xD4, 0xB5, 0x73, 0xB5, 0x53, 0xBD, 0xB4, 0xC5, 0xD4, 0xCE, 0x15, 0xB5, 0x73, 0x9C, 0xB0, 0x5A, 0xEB, 0x62, 0xEB, 0x7B, 0xCF, 0x73, 0xAE, 0x52, 0x6A, 0x52, 0x6A, 0x6B, 0x4D, 0x63, 0x0D, 0x84, 0x10, 0x8C, 0x31, 0x63, 0x0C, 0x42, 0x08, 0x31, 0x87, 0xAD, 0x34, 0xCE, 0x36, 0xC5, 0xF4, 0xC5, 0xF4, 0xC6, 0x14, 0xC5, 0xD4, 0xCE, 0x55, 0xC6, 0x14, 0xC5, 0xF4, 0xBD, 0xD3, 0x5B, 0xE7, 0x6C, 0x4A, 0x8D, 0x0E, 0x7C, 0x4C, 0x63, 0x89, 0x8C, 0x6C, 0x7B, 0xCB, 0x84, 0x0C, 0xAD, 0x31, 0x9C, 0xEF, 0x73, 0xE7, 0x6C, 0x06, 0x64, 0x26, 0x84, 0xA9, 0xAD, 0x2E, 0xAD, 0x10, 0xA4, 0x8E, 0x9C, 0x6D, 0x9C, 0x6D, 0xAC, 0xEF, 0xB5, 0x10, 0xAC, 0xEF, 0xB5, 0x10, 0xB5, 0x30, 0xBD, 0x31, 0xB5, 0x30, 0xB5, 0x30, 0xAC, 0xAF, 0xAC, 0xAF, 0xA4, 0x8E, 0xA4, 0x8E, 0xB4, 0xF0, 0xB4, 0xF0, 0xAC, 0xAF, 0xA4, 0x8F, 0xA4, 0x8E, 0x9C, 0x6E, 0x9C, 0x4D, 0x94, 0x0D, 0x94, 0x2D, 0x93, 0xEC, 0x8B, 0xEC, 0x9C, 0x4E, 0x9C, 0x8E, 0x9C, 0x8F, 0xA4, 0xD0, 0xAC, 0xF0, 0xA4, 0xF0, 0xAD, 0x11, 0xBD, 0x51, 0xC5, 0x71, 0xBD, 0x51, 0xBD, 0x72, 0xB5, 0x72, 0xAD, 0x31, 0xB5, 0x72, 0xB5, 0x52, 0xB5, 0x52, 0xC5, 0xD4, 0xC6, 0x15, 0xCE, 0x36, 0xCE, 0x56, 0xCE, 0x57, 0xD6, 0x77, 0xD6, 0x77, 0xCE, 0x56, 0xD6, 0x77, 0xCE, 0x36, 0xCE, 0x16, 0xCE, 0x36, 0xC5, 0xF5, 0xC5, 0xD4, 0xB5, 0x73, 0xB5, 0x10, 0xAC, 0xEF, 0x8C, 0x0D, 0xCD, 0xF4, 0xD6, 0x55, 0xCE, 0x14, 0xCD, 0xF4, 0xD6, 0x35, 0xDE, 0x56, 0xBD, 0x73, 0xA4, 0xF2, 0x9C, 0xF2, 0x9C, 0xF2, 0xAD, 0x33, 0x73, 0x8D, 0x41, 0xE7, 0x41, 0xE7, 0x41, 0xE7, 0x52, 0x69, 0x41, 0xE7, 0x4A, 0x28, 0x52, 0x69, 0x4A, 0x49, 0x52, 0x8A, 0x73, 0x6D, 0x94, 0x72, 0x9C, 0xB2, 0x94, 0x92, 0x84, 0x10, 0xAD, 0x55, 0xA4, 0xF3, 0x6B, 0x2C, 0x62, 0xEA, 0xCE, 0x36, 0xCE, 0x35, 0xC5, 0xF4, 0xC5, 0xF4, 0xCE, 0x15, 0xB5, 0x31, 0xB5, 0x30, 0x7B, 0x8B, 0x94, 0x6F, 0xA4, 0xD0, 0xA4, 0xD0, 0xBD, 0x93, 0xB5, 0x52, 0xBD, 0x93, 0xB5, 0x72, 0xA4, 0xF1, 0xBD, 0xB4, 0xB5, 0x73, 0x9C, 0xD1, 0xBD, 0xD5, 0xC5, 0xF5, 0xBD, 0x94, 0xC5, 0xF5, 0xC5, 0xF5, 0xC6, 0x15, 0xCE, 0x57, 0xA5, 0x33, 0x52, 0xA9, 0x39, 0xC7, 0x21, 0x03, 0x52, 0xAB, 0xBD, 0xF8, 0xA5, 0x14, 0x8C, 0x72, 0x63, 0x2D, 0x42, 0x08, 0x62, 0xEC, 0x6B, 0x4D, 0x6B, 0x2D, 0x5A, 0xCB, 0x63, 0x2D, 0x7B, 0xAF, 0x73, 0x6D, 0x83, 0xF0, 0x7B, 0x6E, 0x62, 0xEC, 0x94, 0x70, 0xBD, 0x94, 0xAD, 0x12, 0xC5, 0xB3, 0xC5, 0xB3, 0xC5, 0xB3, 0xC5, 0xB3, 0xA4, 0xB0, 0xB5, 0x52, 0xCD, 0xD4, 0xBD, 0x71, 0xCD, 0xD3, 0xCD, 0xD3, 0xC5, 0x72, 0xC5, 0x92, 0xC5, 0xB2, 0xDE, 0x35, 0xCD, 0xD3, 0xB5, 0x11, 0xB5, 0x31, 0xBD, 0x72, 0xBD, 0x72, 0xAC, 0xF1, 0xAD, 0x11, 0x94, 0x6F, 0x94, 0x6F, 0x73, 0x6C, 0x29, 0x25, 0x18, 0xE4, 0x21, 0x05, 0x18, 0xE4, 0x10, 0xA3, 0x10, 0xC3, 0x18, 0xE4, 0x19, 0x04, 0x18, 0xE4, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0xA3, 0x40, 0xE4, 0x79, 0x46, 0x91, 0x87, 0x69, 0x46, 0x20, 0xA3, 0x18, 0xC4, 0x18, 0xA3, 0x18, 0xA3, 0x18, 0xC3, 0x18, 0xA3, 0x18, 0xA3, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xA3, 0x18, 0xC3, 0x18, 0xC4, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x25, 0x21, 0x05, 0x21, 0x05, 0x21, 0x25, 0x29, 0x46, 0x29, 0x25, 0x21, 0x25, 0x29, 0x25, 0x29, 0x66, 0x29, 0x46, 0x21, 0x25, 0x21, 0x05, 0x20, 0xE4, 0x21, 0x05, 0x29, 0x46, 0x29, 0x46, 0x21, 0x25, 0x21, 0x25, 0x21, 0x05, 0x18, 0xE4, 0x21, 0x25, 0x29, 0x25, 0x29, 0x46, 0x29, 0x46, 0x29, 0x46, 0x29, 0x46, 0x31, 0x67, 0x31, 0xA7, 0x39, 0xA7, 0x39, 0xC8, 0x41, 0xE9, 0x42, 0x09, 0x4A, 0x2A, 0x4A, 0x4A, 0x4A, 0x4A, 0x52, 0x8A, 0x6B, 0x0C, 0x8C, 0x2F, 0x9C, 0xB0, 0xA4, 0xF1, 0xA4, 0xF1, 0xA4, 0xF1, 0x9C, 0xD0, 0xAD, 0x12, 0xBD, 0xD4, 0xBD, 0xD4, 0xCE, 0x35, 0xD6, 0x96, 0xD6, 0x96, 0xD6, 0x76, 0xBD, 0xB4, 0xC5, 0xF5, 0xC6, 0x16, 0xC6, 0x16, 0xBD, 0xD4, 0xBD, 0xB4, 0xB5, 0x52, 0xCE, 0x35, 0xDE, 0x96, 0xBD, 0xB3, 0xB5, 0x52, 0xBD, 0x73, 0xAD, 0x12, 0x94, 0x4F, 0x8C, 0x0D, 0xA4, 0xAF, 0xA4, 0xD0, 0xAD, 0x11, 0xA4, 0xD0, 0xAD, 0x11, 0xAD, 0x11, 0xB5, 0x31, 0xB5, 0x52, 0xB5, 0x52, 0xB5, 0x52, 0xB5, 0x73, 0xBD, 0xB4, 0xC5, 0xF4, 0xBD, 0xB3, 0xAD, 0x11, 0xAD, 0x52, 0x7B, 0xCD, 0x5A, 0xCA, 0x63, 0x0C, 0x63, 0x0C, 0x84, 0x10, 0x9C, 0xD3, 0x9C, 0xD3, 0x6B, 0x2D, 0x42, 0x29, 0x5A, 0xCB, 0x39, 0xE7, 0x39, 0xA6, 0x39, 0x87, 0xB5, 0x75, 0xDE, 0xDA, 0xAD, 0x32, 0xC5, 0xF4, 0xC6, 0x15, 0xBD, 0xD3, 0xC6, 0x14, 0xB5, 0x92, 0xC6, 0x14, 0xBD, 0xD4, 0x8D, 0x6E, 0x9D, 0xD0, 0x8D, 0x2E, 0x74, 0x4C, 0x7C, 0x2C, 0x94, 0xCF, 0x8C, 0x4E, 0x94, 0x4E, 0xAD, 0x31, 0xBD, 0xD3, 0xA5, 0x4E, 0x74, 0x47, 0x84, 0xCA, 0x9D, 0x4E, 0xBD, 0xD2, 0xC5, 0xF4, 0xC5, 0xD4, 0xD6, 0x76, 0xBD, 0x72, 0xAC, 0xCF, 0xA4, 0x8E, 0x93, 0xCC, 0x93, 0xEC, 0x83, 0x6A, 0x83, 0x8B, 0x83, 0x8A, 0x83, 0x8A, 0x83, 0xAB, 0x83, 0xAB, 0x83, 0x8A, 0x94, 0x0C, 0x94, 0x0C, 0x93, 0xEC, 0x9C, 0x2D, 0x9C, 0x4D, 0xA4, 0x8E, 0xAC, 0xAF, 0xAC, 0xAF, 0xBD, 0x30, 0xBD, 0x31, 0xB5, 0x10, 0xBD, 0x51, 0xBD, 0x30, 0xBD, 0x30, 0xB5, 0x10, 0xB4, 0xF0, 0xAC, 0xCF, 0xAC, 0xF0, 0xB5, 0x10, 0xBD, 0x30, 0xBD, 0x50, 0xB5, 0x10, 0xBD, 0x30, 0xBD, 0x51, 0xBD, 0x51, 0xBD, 0x51, 0xB5, 0x30, 0xB5, 0x30, 0xB5, 0x10, 0xB5, 0x10, 0xAD, 0x0F, 0xAC, 0xEF, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0xD0, 0xAC, 0xD0, 0xAD, 0x11, 0xBD, 0x72, 0xBD, 0x93, 0xBD, 0x72, 0xB5, 0x52, 0xB5, 0x10, 0xC5, 0x71, 0xBD, 0x31, 0x7B, 0x6A, 0xAD, 0x10, 0xC5, 0xB3, 0xBD, 0x72, 0xC5, 0x92, 0xCD, 0xF4, 0xD6, 0x35, 0xB5, 0x32, 0x9C, 0xB0, 0x9C, 0xD1, 0x9C, 0xD1, 0x9C, 0xF1, 0xB5, 0x73, 0x5A, 0xC9, 0x41, 0xE7, 0x39, 0xC6, 0x39, 0xC7, 0x41, 0xE7, 0x52, 0x8A, 0x5A, 0xCB, 0x62, 0xEB, 0x63, 0x0C, 0x6B, 0x6D, 0x94, 0x71, 0xA4, 0xF4, 0x9C, 0xF4, 0x9C, 0xD3, 0xC6, 0x18, 0xAD, 0x34, 0x7B, 0xAF, 0x8C, 0x50, 0xBD, 0xD5, 0xD6, 0x56, 0xCE, 0x35, 0xCE, 0x35, 0xD6, 0x56, 0xA4, 0xD0, 0xB5, 0x30, 0x83, 0xCC, 0x9C, 0xB0, 0xAD, 0x32, 0xB5, 0x52, 0xA5, 0x11, 0xA4, 0xF1, 0xA5, 0x11, 0xB5, 0x73, 0xB5, 0x93, 0xB5, 0x93, 0xB5, 0x53, 0x9C, 0xD0, 0xBD, 0xB4, 0xBD, 0xB4, 0xB5, 0x53, 0xBD, 0xB4, 0xBD, 0xB4, 0xC5, 0xF5, 0xCE, 0x36, 0xCE, 0x76, 0xBD, 0xD5, 0x5A, 0xCA, 0x29, 0x65, 0x5A, 0xEC, 0xCE, 0x59, 0xAD, 0x76, 0x8C, 0x52, 0x52, 0x8A, 0x42, 0x08, 0x52, 0xAA, 0x5A, 0xEB, 0x63, 0x2C, 0x5A, 0xEC, 0x52, 0x8A, 0x4A, 0x49, 0x52, 0x69, 0x6B, 0x2D, 0xA4, 0xF3, 0x7B, 0x8E, 0x73, 0x4D, 0x9C, 0x71, 0xCE, 0x16, 0xC5, 0xD4, 0xBD, 0x92, 0xC5, 0xB2, 0xC5, 0xD3, 0xA4, 0xD0, 0xB5, 0x31, 0xC5, 0x92, 0xB5, 0x0F, 0xC5, 0x92, 0xD6, 0x34, 0xC5, 0xB2, 0xC5, 0x92, 0xBD, 0x51, 0xC5, 0x92, 0xB5, 0x10, 0xAC, 0xD0, 0xBD, 0x72, 0xCD, 0xB3, 0xBD, 0x71, 0x9C, 0xAF, 0x9C, 0xB0, 0xA4, 0xF1, 0xA4, 0xD1, 0x6B, 0x4C, 0x29, 0x25, 0x20, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x05, 0x19, 0x04, 0x10, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC3, 0x18, 0xA3, 0x59, 0x46, 0x89, 0x67, 0x89, 0x67, 0x38, 0xC3, 0x18, 0xA3, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xA3, 0x18, 0xA3, 0x18, 0xA3, 0x18, 0xC4, 0x18, 0xA3, 0x18, 0xC3, 0x18, 0xC4, 0x18, 0xE4, 0x20, 0xE4, 0x21, 0x05, 0x20, 0xE4, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x25, 0x21, 0x25, 0x21, 0x05, 0x21, 0x25, 0x29, 0x25, 0x29, 0x46, 0x21, 0x25, 0x21, 0x05, 0x18, 0xE4, 0x21, 0x05, 0x21, 0x25, 0x29, 0x26, 0x29, 0x25, 0x21, 0x05, 0x21, 0x05, 0x18, 0xE4, 0x21, 0x05, 0x21, 0x05, 0x21, 0x25, 0x21, 0x25, 0x21, 0x05, 0x21, 0x25, 0x29, 0x46, 0x31, 0xA7, 0x39, 0xC8, 0x31, 0xA7, 0x39, 0xA8, 0x39, 0xC8, 0x41, 0xE9, 0x42, 0x09, 0x42, 0x2A, 0x4A, 0x2A, 0x42, 0x29, 0x4A, 0x29, 0x63, 0x0C, 0x94, 0x50, 0xAD, 0x12, 0xB5, 0x53, 0xB5, 0x53, 0xAC, 0xF1, 0xA4, 0xB0, 0x9C, 0x6F, 0x94, 0x2E, 0x8B, 0xED, 0x83, 0xED, 0x83, 0xCD, 0x83, 0xCD, 0x84, 0x0E, 0x9C, 0x70, 0x94, 0x6F, 0x83, 0xEE, 0x9C, 0xB0, 0xA4, 0xD0, 0xB5, 0x32, 0xAD, 0x11, 0x94, 0x6E, 0xA4, 0xD0, 0x9C, 0x8F, 0x9C, 0x90, 0xA4, 0xF1, 0xA4, 0xD1, 0xAD, 0x31, 0xA4, 0xD0, 0xA4, 0xD0, 0xA4, 0xD0, 0xAD, 0x11, 0xB5, 0x52, 0xB5, 0x52, 0xB5, 0x52, 0xB5, 0x52, 0xAD, 0x12, 0x9C, 0x8F, 0xBD, 0x93, 0xC5, 0xD3, 0xA4, 0xD0, 0xB5, 0x73, 0x9C, 0x8F, 0x73, 0x8C, 0x73, 0x8D, 0x62, 0xEB, 0x5A, 0xEB, 0x84, 0x10, 0xBD, 0xB6, 0x9C, 0xF3, 0x73, 0x6E, 0x4A, 0x49, 0x63, 0x2D, 0x4A, 0x49, 0x39, 0xC7, 0x39, 0xA7, 0xAD, 0x55, 0xAD, 0x34, 0x83, 0xCF, 0xAD, 0x33, 0xCE, 0x15, 0xCE, 0x35, 0xC6, 0x14, 0xBD, 0xD3, 0xC6, 0x14, 0xC6, 0x14, 0x74, 0xA9, 0x6C, 0x68, 0x6C, 0x49, 0x74, 0x4B, 0x94, 0xCF, 0xC6, 0x55, 0xBD, 0xF5, 0xB5, 0x72, 0xBD, 0xB3, 0xB5, 0x71, 0x8C, 0xAB, 0x84, 0xAA, 0xB6, 0x11, 0xAD, 0x91, 0xC5, 0xF3, 0xBD, 0x93, 0xC5, 0xD4, 0xDE, 0x96, 0xBD, 0x72, 0xB4, 0xCF, 0x93, 0xEB, 0xB4, 0x6E, 0xBC, 0xCF, 0x8B, 0x8B, 0x7B, 0x4A, 0x9C, 0x6E, 0xA4, 0xAF, 0xAC, 0xF0, 0xAC, 0xF0, 0xA4, 0xAF, 0xA4, 0xAF, 0xAC, 0xCF, 0xA4, 0x8E, 0x94, 0x2D, 0x94, 0x0C, 0x94, 0x2D, 0x94, 0x2D, 0x9C, 0x4E, 0xAC, 0xF0, 0xAC, 0xCF, 0xA4, 0x8E, 0x9C, 0x6D, 0xB4, 0xEF, 0x9C, 0x2C, 0x8B, 0xEC, 0xA4, 0x8E, 0x8B, 0xCB, 0x8B, 0xEC, 0x9C, 0x4D, 0x94, 0x2D, 0x9C, 0x4D, 0xA4, 0x8E, 0x8B, 0xCB, 0x9C, 0x4D, 0xA4, 0x8E, 0xA4, 0x6D, 0xAC, 0xCE, 0xAC, 0xAE, 0xA4, 0x8E, 0x9C, 0x4D, 0x94, 0x0C, 0x9C, 0x2D, 0x94, 0x0C, 0x9C, 0x2D, 0xA4, 0x8E, 0xBD, 0x51, 0xC5, 0x71, 0xCD, 0xB2, 0xC5, 0x51, 0xC5, 0x71, 0xC5, 0x91, 0xC5, 0x71, 0xC5, 0x71, 0xC5, 0x71, 0xC5, 0x71, 0xBD, 0x30, 0xAC, 0xCE, 0xAC, 0xAE, 0xA4, 0xAE, 0xA4, 0x8D, 0xA4, 0x8E, 0xAC, 0xAE, 0xA4, 0x8E, 0x9C, 0x6E, 0x9C, 0x8F, 0x9C, 0x6F, 0x9C, 0x6E, 0xB5, 0x10, 0x8C, 0x2E, 0x4A, 0x07, 0x39, 0xC6, 0x39, 0xA6, 0x42, 0x08, 0x52, 0x8A, 0x5A, 0xAA, 0x6B, 0x4C, 0x63, 0x2C, 0x63, 0x2C, 0x8C, 0x31, 0x9C, 0xB3, 0x9C, 0xB3, 0xAD, 0x55, 0xC6, 0x18, 0xAD, 0x35, 0x7B, 0xCF, 0x5A, 0xCB, 0x7B, 0xAE, 0xD6, 0x77, 0xD6, 0x76, 0xD6, 0x76, 0xD6, 0x56, 0xA4, 0xCF, 0xA4, 0xCF, 0x83, 0xCC, 0x9C, 0xD0, 0xA4, 0xD0, 0xA4, 0xF1, 0xB5, 0x73, 0xBD, 0xB4, 0xBD, 0xB4, 0xC5, 0xD5, 0xC6, 0x15, 0xC6, 0x15, 0xBD, 0xD4, 0xB5, 0x73, 0xB5, 0x94, 0xBD, 0xD4, 0xB5, 0x73, 0xB5, 0x93, 0xBD, 0xB4, 0xBD, 0xB4, 0xBD, 0xD4, 0xB5, 0x93, 0xBD, 0xB4, 0x83, 0xED, 0x7B, 0xCE, 0x9C, 0xB2, 0xC6, 0x18, 0xAD, 0x56, 0x8C, 0x52, 0x31, 0xA7, 0x31, 0xA6, 0x42, 0x08, 0x4A, 0x69, 0x63, 0x0B, 0x6B, 0x4D, 0x6B, 0x4D, 0x63, 0x0C, 0x63, 0x0C, 0x7B, 0xCF, 0xD6, 0x79, 0xA4, 0xF3, 0x6B, 0x0C, 0x94, 0x71, 0x9C, 0xB2, 0xCE, 0x17, 0xBD, 0x73, 0xBD, 0x92, 0xB5, 0x52, 0xA4, 0xD0, 0xB5, 0x31, 0xC5, 0x92, 0xBD, 0x51, 0xCD, 0xF3, 0xD6, 0x34, 0xD5, 0xF4, 0xC5, 0xB3, 0xC5, 0xB2, 0xC5, 0xB2, 0xC5, 0xB2, 0xB5, 0x10, 0xB5, 0x31, 0xC5, 0xB3, 0xB5, 0x31, 0x9C, 0x8F, 0xAD, 0x32, 0xBD, 0x73, 0xAD, 0x32, 0x7B, 0xCD, 0x39, 0xA7, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xE4, 0x10, 0xC4, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC4, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xC4, 0x28, 0xC4, 0x71, 0x46, 0x89, 0x67, 0x69, 0x25, 0x20, 0x62, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xA3, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x20, 0xE4, 0x20, 0xE4, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x18, 0xE4, 0x21, 0x05, 0x29, 0x46, 0x29, 0x46, 0x21, 0x25, 0x18, 0xC4, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xE4, 0x20, 0xE4, 0x20, 0xE4, 0x21, 0x05, 0x18, 0xE4, 0x18, 0xE4, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x20, 0xE4, 0x18, 0xE4, 0x21, 0x25, 0x31, 0x67, 0x31, 0xA7, 0x31, 0x87, 0x31, 0x87, 0x31, 0xA8, 0x39, 0xC8, 0x39, 0xE9, 0x42, 0x09, 0x42, 0x09, 0x4A, 0x2A, 0x42, 0x2A, 0x4A, 0x2A, 0x52, 0x8B, 0x7B, 0x8E, 0xA4, 0xD2, 0xAC, 0xF2, 0xB5, 0x53, 0xAD, 0x12, 0xA4, 0xD1, 0xAC, 0xF1, 0xAC, 0xF1, 0xA4, 0xB0, 0xAC, 0xF2, 0xAC, 0xF1, 0xAD, 0x12, 0xAC, 0xF1, 0xAD, 0x12, 0xB5, 0x12, 0xB5, 0x12, 0xB5, 0x32, 0xB5, 0x32, 0xB5, 0x32, 0xB5, 0x53, 0xBD, 0x73, 0xB5, 0x52, 0xAD, 0x12, 0xAD, 0x12, 0xB5, 0x52, 0xB5, 0x52, 0xB5, 0x32, 0xBD, 0x73, 0xBD, 0x73, 0xB5, 0x32, 0xAC, 0xD0, 0xA4, 0xB0, 0xA4, 0xB0, 0xA4, 0xD0, 0xAC, 0xF1, 0x94, 0x4F, 0x9C, 0xB0, 0xA4, 0xD1, 0x94, 0x6F, 0xA4, 0xF1, 0x9C, 0x90, 0x8C, 0x2E, 0x94, 0x4F, 0x73, 0x6C, 0x5A, 0xCB, 0x7B, 0xAF, 0x94, 0x71, 0x73, 0x6E, 0x4A, 0x49, 0x63, 0x0C, 0x84, 0x10, 0x5A, 0xCB, 0x4A, 0x29, 0x31, 0x66, 0x7B, 0xAF, 0x83, 0xCF, 0x94, 0x31, 0x73, 0x4D, 0x83, 0xCE, 0xC5, 0xF5, 0xC6, 0x14, 0xCE, 0x55, 0xDE, 0x97, 0xBD, 0xB4, 0x5C, 0x04, 0x4B, 0xA4, 0x7C, 0xAC, 0x84, 0x8E, 0xA5, 0x91, 0xA5, 0x91, 0xD6, 0xD8, 0xBD, 0xD4, 0xBD, 0xB3, 0x84, 0x2B, 0x6B, 0xE6, 0x9D, 0x6D, 0xBE, 0x12, 0x9C, 0xEE, 0xBD, 0xB2, 0xBD, 0x92, 0xC5, 0xD3, 0xDE, 0x76, 0xB5, 0x31, 0xA4, 0x8E, 0x8B, 0x69, 0x93, 0x8A, 0x8B, 0x6A, 0x93, 0xCC, 0xA4, 0x6E, 0xB5, 0x10, 0xB5, 0x11, 0xA4, 0xAF, 0xAC, 0xF0, 0xA4, 0xAF, 0xA4, 0x8F, 0xAC, 0xCF, 0xAC, 0xF0, 0xA4, 0xD0, 0x94, 0x2D, 0xAC, 0xF0, 0xB5, 0x31, 0xB5, 0x52, 0xBD, 0x72, 0xB5, 0x31, 0xB5, 0x31, 0xA4, 0xAF, 0xB5, 0x30, 0x94, 0x0D, 0x83, 0xCC, 0x9C, 0x8F, 0x83, 0xCC, 0x83, 0xCC, 0x83, 0xED, 0x94, 0x6F, 0x8C, 0x0D, 0x8C, 0x2D, 0x7B, 0x8B, 0x94, 0x4E, 0x9C, 0x6E, 0xA4, 0xAF, 0xA4, 0x8E, 0xA4, 0xCF, 0xA4, 0xAE, 0xA4, 0xCF, 0xA4, 0xAF, 0xB5, 0x11, 0xAC, 0xF0, 0xAC, 0xF0, 0xAC, 0xF0, 0xBD, 0x31, 0xB4, 0xEF, 0xC5, 0x72, 0xBD, 0x71, 0xCD, 0xB3, 0xC5, 0x92, 0xD5, 0xF4, 0xCD, 0xD3, 0xD6, 0x14, 0xD6, 0x34, 0xD6, 0x14, 0xC5, 0x92, 0xB5, 0x30, 0xBD, 0x72, 0xBD, 0x72, 0xBD, 0x51, 0xBD, 0x51, 0xBD, 0x51, 0xAC, 0xEF, 0xA4, 0xAF, 0xBD, 0x52, 0xBD, 0x31, 0xBD, 0x31, 0xAC, 0xF0, 0x6B, 0x0A, 0x39, 0xA6, 0x39, 0xA6, 0x39, 0xC7, 0x4A, 0x28, 0x5A, 0xAA, 0x5A, 0xAA, 0x5A, 0xAA, 0x52, 0x8A, 0x6B, 0x4D, 0x7B, 0xAF, 0x7B, 0xAF, 0xAD, 0x76, 0x9C, 0xD3, 0xC5, 0xF8, 0x8C, 0x31, 0x5A, 0xCB, 0x52, 0x89, 0xA4, 0xF1, 0xA4, 0x8F, 0x8B, 0xEC, 0x8B, 0xCB, 0x83, 0x6A, 0x9C, 0x4D, 0x8C, 0x0D, 0x8B, 0xED, 0x83, 0xAC, 0x73, 0x4A, 0x7B, 0x8B, 0x83, 0xAC, 0x83, 0xCC, 0x7B, 0xAC, 0x7B, 0x8C, 0x73, 0x8B, 0x7B, 0xAC, 0x7B, 0xAC, 0x83, 0xED, 0x8C, 0x2E, 0x8C, 0x0E, 0x8C, 0x4F, 0x84, 0x0D, 0x83, 0xED, 0x7B, 0xAC, 0x83, 0xCC, 0x8C, 0x4E, 0x63, 0x0A, 0x8C, 0x2F, 0xB5, 0x75, 0xBD, 0xF7, 0xB5, 0x76, 0x8C, 0x72, 0x39, 0xC7, 0x39, 0xE7, 0x31, 0xA6, 0x39, 0xC6, 0x4A, 0x69, 0x52, 0x8A, 0x63, 0x0C, 0x63, 0x0C, 0x63, 0x0C, 0x52, 0xAB, 0x6B, 0x4D, 0x83, 0xF0, 0x42, 0x08, 0x73, 0x8E, 0x94, 0x51, 0x94, 0x51, 0xC5, 0xB6, 0xB5, 0x32, 0x9C, 0x8F, 0xA4, 0xB0, 0xAD, 0x11, 0xC5, 0x92, 0xC5, 0x71, 0xC5, 0xB2, 0xCD, 0xD3, 0xCD, 0xB2, 0xCD, 0xF3, 0xD6, 0x35, 0xD6, 0x14, 0xD5, 0xF3, 0xCD, 0xB3, 0xBD, 0x51, 0xC5, 0x92, 0xBD, 0x52, 0xAD, 0x11, 0xB5, 0x52, 0xBD, 0x92, 0xB5, 0x31, 0x8C, 0x2F, 0x52, 0x8A, 0x21, 0x05, 0x18, 0xE4, 0x18, 0xC4, 0x19, 0x04, 0x18, 0xE4, 0x19, 0x04, 0x19, 0x05, 0x18, 0xC4, 0x10, 0x83, 0x10, 0xA3, 0x18, 0xE4, 0x10, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x38, 0xE4, 0x69, 0x25, 0x71, 0x25, 0x40, 0xE4, 0x18, 0xA3, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xA3, 0x18, 0xC3, 0x18, 0xC4, 0x21, 0x04, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x25, 0x21, 0x05, 0x18, 0xE4, 0x18, 0xC4, 0x20, 0xE4, 0x21, 0x25, 0x21, 0x25, 0x21, 0x05, 0x18, 0xC4, 0x18, 0xC3, 0x18, 0xC3, 0x18, 0xC4, 0x18, 0xA4, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x21, 0x05, 0x29, 0x46, 0x29, 0x25, 0x20, 0xE4, 0x18, 0xE4, 0x21, 0x05, 0x29, 0x66, 0x31, 0x87, 0x29, 0x67, 0x31, 0x67, 0x31, 0x87, 0x31, 0x67, 0x31, 0x87, 0x39, 0xC8, 0x39, 0xC8, 0x41, 0xE9, 0x4A, 0x2A, 0x4A, 0x29, 0x42, 0x2A, 0x4A, 0x4A, 0x5A, 0xAB, 0x73, 0x6D, 0x8C, 0x2F, 0x7B, 0x6C, 0x7B, 0xAD, 0x83, 0xCD, 0x9C, 0x70, 0x94, 0x0E, 0x73, 0x4B, 0x7B, 0x6C, 0x83, 0xAC, 0x83, 0xAD, 0x73, 0x4B, 0x73, 0x2B, 0x62, 0xC9, 0x6A, 0xEA, 0x83, 0xAD, 0x6B, 0x0A, 0x73, 0x2B, 0x83, 0x8C, 0x83, 0xCD, 0xA4, 0xB0, 0x9C, 0x6F, 0x94, 0x2E, 0xA4, 0xB0, 0xAC, 0xD0, 0xB5, 0x32, 0xC5, 0xD4, 0xCD, 0xB4, 0xCD, 0xD4, 0xB5, 0x32, 0xCD, 0xB4, 0xCD, 0xF5, 0xCE, 0x15, 0xC5, 0xF5, 0xC5, 0xF5, 0xCD, 0xF5, 0xC5, 0xD5, 0xC5, 0xD4, 0xB5, 0x53, 0xBD, 0x94, 0xBD, 0x52, 0xBD, 0x73, 0x7B, 0xAD, 0x6B, 0x4D, 0x5A, 0xEB, 0x4A, 0x49, 0x39, 0xA7, 0x5A, 0xCB, 0x63, 0x0C, 0x73, 0x8E, 0x63, 0x0C, 0x21, 0x05, 0x62, 0xEC, 0x83, 0xCF, 0xCE, 0x17, 0xCE, 0x18, 0xAD, 0x14, 0xCE, 0x17, 0xC5, 0xD5, 0xCE, 0x36, 0xC5, 0xB5, 0x94, 0x4F, 0x53, 0xA6, 0x8D, 0x0F, 0x9D, 0x72, 0x84, 0x4E, 0x9D, 0x4F, 0x95, 0x2E, 0xAD, 0xD3, 0xCE, 0xB7, 0xC6, 0x34, 0x84, 0xA9, 0x8D, 0x08, 0x8D, 0x0B, 0x9D, 0x4F, 0x8C, 0x8D, 0xBD, 0xF3, 0xBD, 0xD3, 0xC5, 0xF4, 0xDE, 0x76, 0xCD, 0xB3, 0xA4, 0x4D, 0x9B, 0xCB, 0x8B, 0x6B, 0x72, 0xC9, 0x62, 0xA9, 0x73, 0x0A, 0x9C, 0x4E, 0xA4, 0x8F, 0x83, 0xCC, 0x7B, 0x8B, 0x8B, 0xED, 0x94, 0x2E, 0x83, 0xCC, 0x9C, 0x6E, 0xA4, 0xF0, 0x94, 0x4E, 0xAD, 0x31, 0xB5, 0x52, 0xBD, 0x72, 0xBD, 0x52, 0xBD, 0x72, 0xBD, 0x72, 0xAC, 0xAF, 0xBD, 0x30, 0xA4, 0xAF, 0x8C, 0x2E, 0x94, 0x4E, 0xA4, 0xD1, 0xA4, 0xD1, 0x94, 0x6F, 0x8C, 0x0D, 0x83, 0xED, 0x94, 0x6F, 0x8C, 0x2E, 0x94, 0x6F, 0x94, 0x6E, 0xA4, 0xD0, 0x94, 0x4E, 0x8C, 0x2D, 0x9C, 0xAF, 0x9C, 0xAF, 0xB5, 0x52, 0xB5, 0x52, 0xBD, 0x93, 0xBD, 0x92, 0xB5, 0x10, 0xBD, 0x30, 0xA4, 0xAE, 0x94, 0x2D, 0x8C, 0x2E, 0x8C, 0x0E, 0x7B, 0x8C, 0x7B, 0x8B, 0x7B, 0xAB, 0x7B, 0xAC, 0x83, 0xEC, 0x83, 0xCC, 0x62, 0xE9, 0x6B, 0x0A, 0x83, 0xCD, 0x8C, 0x0E, 0x83, 0xED, 0x73, 0x6B, 0x8C, 0x0D, 0x62, 0xE9, 0x6B, 0x2B, 0x7B, 0x8C, 0x7B, 0x8C, 0x73, 0x2A, 0x7B, 0xAC, 0x94, 0x90, 0x52, 0x69, 0x39, 0xC6, 0x31, 0xA6, 0x42, 0x08, 0x5A, 0x8A, 0x5A, 0xAA, 0x6B, 0x2C, 0x5A, 0xAA, 0x52, 0x8A, 0x5A, 0xCB, 0x8C, 0x51, 0x94, 0x92, 0xB5, 0x96, 0xD6, 0xBB, 0xAD, 0x35, 0x63, 0x2D, 0x42, 0x08, 0x62, 0xEA, 0x9C, 0x6F, 0xA4, 0x6E, 0x94, 0x0C, 0x9C, 0x4D, 0xA4, 0xAF, 0xA4, 0x8E, 0xA4, 0x8F, 0xA4, 0x8E, 0x9C, 0x6E, 0xA4, 0x8F, 0xAC, 0xD0, 0xAC, 0xF0, 0xB5, 0x11, 0xB5, 0x11, 0xAC, 0xF0, 0xAD, 0x10, 0xB5, 0x51, 0xB5, 0x51, 0xB5, 0x31, 0xB5, 0x31, 0xB5, 0x31, 0xB5, 0x10, 0xAC, 0xF0, 0xA4, 0xAF, 0x9C, 0x8F, 0x8C, 0x2E, 0x83, 0xED, 0x9C, 0x90, 0xC5, 0xF6, 0xB5, 0x96, 0xAD, 0x35, 0x7B, 0xF0, 0x31, 0x86, 0x31, 0xA6, 0x39, 0xE7, 0x31, 0x85, 0x31, 0xC6, 0x42, 0x08, 0x5A, 0xEB, 0x5A, 0xCB, 0x5A, 0xCB, 0x5A, 0xCB, 0x5A, 0xEB, 0x63, 0x0C, 0x52, 0x8A, 0x7B, 0xAF, 0x62, 0xCB, 0x73, 0x4E, 0x83, 0xEF, 0xAD, 0x13, 0x9C, 0x90, 0xA4, 0xB0, 0xA4, 0x8F, 0xC5, 0x92, 0xBD, 0x71, 0xC5, 0x92, 0xCD, 0xD3, 0xBD, 0x72, 0xAC, 0xF0, 0xB5, 0x10, 0xBD, 0x51, 0xD6, 0x34, 0xDE, 0x34, 0xCD, 0xB3, 0xCD, 0xB3, 0xBD, 0x51, 0xB5, 0x52, 0xAD, 0x31, 0xB5, 0x51, 0xB5, 0x52, 0x94, 0x6F, 0x83, 0xEE, 0x39, 0xC7, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x10, 0xC3, 0x10, 0xA3, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC4, 0x41, 0x05, 0x61, 0x25, 0x59, 0x04, 0x30, 0xC3, 0x20, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC3, 0x18, 0xC4, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x18, 0xE4, 0x18, 0xA3, 0x18, 0xE4, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x21, 0x25, 0x21, 0x05, 0x20, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x21, 0x25, 0x31, 0x87, 0x31, 0x87, 0x29, 0x46, 0x29, 0x46, 0x29, 0x67, 0x31, 0x67, 0x31, 0x87, 0x39, 0xA8, 0x39, 0xC8, 0x41, 0xE9, 0x42, 0x09, 0x4A, 0x2A, 0x42, 0x09, 0x42, 0x09, 0x4A, 0x6A, 0x63, 0x0C, 0x7B, 0xAE, 0x94, 0x4F, 0x94, 0x2F, 0x9C, 0x90, 0x94, 0x70, 0x83, 0xCE, 0x94, 0x4F, 0x8C, 0x0E, 0x83, 0xCD, 0x83, 0xEE, 0x73, 0x4B, 0x6B, 0x2B, 0x6B, 0x2B, 0x6A, 0xEA, 0x5A, 0x88, 0x62, 0xCA, 0x83, 0xAD, 0x7B, 0xAD, 0x7B, 0xAC, 0x7B, 0xAC, 0x83, 0xED, 0x9C, 0x90, 0xA4, 0xB0, 0xAC, 0xD1, 0xBD, 0x93, 0xB5, 0x11, 0xBD, 0x52, 0xC5, 0x93, 0xC5, 0x72, 0xB5, 0x31, 0x9C, 0x4E, 0x94, 0x0E, 0xA4, 0xB0, 0xAC, 0xF1, 0xAD, 0x11, 0xBD, 0xB3, 0xAD, 0x11, 0xAC, 0xD0, 0x9C, 0x6E, 0xA4, 0xD1, 0x9C, 0x91, 0x73, 0x8D, 0x4A, 0x49, 0x4A, 0x29, 0x31, 0x86, 0x4A, 0x29, 0x73, 0x8E, 0x83, 0xCF, 0x6B, 0x4D, 0x29, 0x46, 0x4A, 0x29, 0x73, 0x6D, 0xB5, 0x34, 0xC5, 0x95, 0xCD, 0xD6, 0xBD, 0x74, 0x8B, 0xEF, 0xA4, 0xB2, 0x9C, 0x71, 0xA4, 0xB1, 0x9D, 0x91, 0xA5, 0xB3, 0xB6, 0x35, 0x7C, 0x4E, 0x8C, 0xCC, 0x84, 0xCA, 0x9D, 0x90, 0xA5, 0xD1, 0x9D, 0x6C, 0x95, 0x47, 0x7C, 0x85, 0x7C, 0x88, 0xB5, 0xD1, 0xB5, 0xB2, 0xC6, 0x14, 0xC6, 0x14, 0xBD, 0xB2, 0xCE, 0x34, 0xC5, 0x92, 0xA4, 0x6D, 0x93, 0xAB, 0x83, 0x4B, 0x5A, 0x68, 0x52, 0x68, 0x52, 0x48, 0x62, 0xC9, 0x62, 0xC9, 0x6B, 0x2B, 0x5A, 0xA9, 0x6B, 0x4B, 0x94, 0x4F, 0x94, 0x4F, 0x83, 0xCD, 0x9C, 0xB0, 0x73, 0x6B, 0xAD, 0x31, 0xBD, 0x72, 0xB5, 0x31, 0xB5, 0x31, 0xAC, 0xF0, 0xC5, 0x93, 0x9C, 0x6E, 0xB5, 0x10, 0x9C, 0x6E, 0x7B, 0xAC, 0x94, 0x6F, 0x9C, 0xD1, 0x9C, 0xD1, 0xBD, 0xB4, 0x9C, 0xB0, 0x8C, 0x4F, 0x94, 0x6F, 0x9C, 0xB0, 0x9C, 0xB0, 0x9C, 0xB0, 0xA4, 0xD0, 0xA4, 0xD0, 0xA4, 0xD0, 0x94, 0x4E, 0x9C, 0x8F, 0xAC, 0xF1, 0xB5, 0x52, 0xB5, 0x52, 0x7B, 0x6B, 0x73, 0x49, 0xBD, 0x30, 0xAC, 0xCF, 0xAD, 0x11, 0xBD, 0x94, 0xB5, 0x73, 0xAD, 0x53, 0xA4, 0xF1, 0xA4, 0xD1, 0x9C, 0xB0, 0x8C, 0x2E, 0x94, 0x8F, 0x94, 0x90, 0x94, 0xB0, 0x8C, 0x4F, 0x8C, 0x2E, 0x8C, 0x0E, 0x84, 0x0E, 0x83, 0xEE, 0x84, 0x0E, 0x7B, 0xEE, 0x7B, 0xEE, 0x73, 0x8D, 0x63, 0x0B, 0x7B, 0xAD, 0x8C, 0x2F, 0x83, 0xCE, 0x4A, 0x48, 0x39, 0xC7, 0x41, 0xE7, 0x5A, 0x8A, 0x5A, 0xCB, 0x52, 0x8A, 0x41, 0xE7, 0x52, 0x8A, 0x73, 0xAE, 0x94, 0xB2, 0xA5, 0x35, 0xBD, 0xD7, 0xCE, 0x59, 0xB5, 0xB7, 0x8C, 0x31, 0x73, 0x8F, 0x5A, 0xCB, 0x62, 0xEA, 0xBD, 0x93, 0xB5, 0x31, 0xBD, 0x72, 0xB5, 0x31, 0x8B, 0xCC, 0x83, 0x8A, 0x83, 0xAB, 0x7B, 0x8A, 0x7B, 0x6A, 0x8B, 0xCC, 0x7B, 0x6A, 0x83, 0xCC, 0x7B, 0x8A, 0x8B, 0xCB, 0xA4, 0xAF, 0xBD, 0x72, 0xB5, 0x10, 0xB5, 0x10, 0xB4, 0xEF, 0xA4, 0x8E, 0xAC, 0xAE, 0x9C, 0x6D, 0x83, 0xCB, 0xA4, 0xD0, 0xB5, 0x52, 0x9C, 0x6F, 0x8B, 0xED, 0xBD, 0xD6, 0xAD, 0x76, 0xA5, 0x14, 0x7B, 0xAF, 0x39, 0xC7, 0x29, 0x44, 0x31, 0xA6, 0x42, 0x08, 0x39, 0xC7, 0x39, 0xE7, 0x5A, 0xCB, 0x4A, 0x69, 0x52, 0x89, 0x52, 0xAA, 0x5A, 0xEC, 0x6B, 0x4E, 0x73, 0x6E, 0xCE, 0x39, 0xCE, 0x59, 0x6B, 0x2D, 0x62, 0xEC, 0x7B, 0x8D, 0xAD, 0x33, 0x9C, 0x6F, 0xAD, 0x12, 0x9C, 0x6F, 0x8C, 0x0D, 0x94, 0x2D, 0x94, 0x2D, 0x8B, 0xED, 0x8B, 0xED, 0x94, 0x2D, 0x94, 0x2D, 0x9C, 0x6E, 0xA4, 0xAF, 0xA4, 0xAF, 0xAC, 0xF0, 0xA4, 0xD0, 0xAC, 0xF0, 0xAC, 0xF0, 0xBD, 0x72, 0xBD, 0x72, 0xAD, 0x11, 0x9C, 0xB1, 0x52, 0x8A, 0x29, 0x25, 0x19, 0x04, 0x21, 0x04, 0x21, 0x05, 0x18, 0xE4, 0x18, 0xC3, 0x18, 0xC3, 0x18, 0xE5, 0x18, 0xE4, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC4, 0x41, 0x05, 0x58, 0xE4, 0x48, 0xE4, 0x30, 0xE4, 0x20, 0xE4, 0x21, 0x04, 0x21, 0x05, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xA3, 0x18, 0xC4, 0x18, 0xE4, 0x20, 0xE4, 0x20, 0xE5, 0x20, 0xE4, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x20, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x21, 0x25, 0x21, 0x05, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x20, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x18, 0xE4, 0x18, 0xE4, 0x21, 0x25, 0x29, 0x66, 0x29, 0x46, 0x29, 0x46, 0x29, 0x46, 0x29, 0x46, 0x29, 0x67, 0x31, 0x87, 0x31, 0x87, 0x31, 0xA8, 0x41, 0xE9, 0x42, 0x0A, 0x42, 0x2A, 0x42, 0x09, 0x42, 0x09, 0x4A, 0x4A, 0x5A, 0xAB, 0x7B, 0x8E, 0x94, 0x2F, 0x94, 0x4F, 0x94, 0x4F, 0xA4, 0x90, 0x9C, 0x70, 0x9C, 0x70, 0x94, 0x0E, 0xA4, 0xB0, 0x94, 0x2E, 0x7B, 0x8C, 0x94, 0x0E, 0x94, 0x0F, 0x73, 0x2B, 0x73, 0x4C, 0x8B, 0xEE, 0x8C, 0x2F, 0x83, 0xCD, 0x83, 0xAD, 0x83, 0xCD, 0x8C, 0x2E, 0xAC, 0xF1, 0xB5, 0x12, 0xB5, 0x31, 0xA4, 0x8F, 0xA4, 0x8F, 0xAC, 0xF0, 0xBD, 0x51, 0xC5, 0x72, 0x9C, 0x6E, 0x94, 0x2E, 0xA4, 0xD0, 0xAC, 0xF1, 0xB5, 0x32, 0xAC, 0xF0, 0x9C, 0x4E, 0x94, 0x0D, 0x94, 0x2E, 0x94, 0x4E, 0x94, 0x2F, 0x8C, 0x0F, 0x5A, 0xCB, 0x62, 0xEC, 0x39, 0xA7, 0x39, 0xE8, 0x7B, 0xCF, 0x7B, 0xCF, 0x84, 0x10, 0x5A, 0xCB, 0x6B, 0x2D, 0x83, 0xCF, 0x73, 0x4D, 0x8B, 0xCF, 0x9C, 0x71, 0x83, 0xCE, 0xA4, 0xD2, 0xAD, 0x13, 0xA4, 0xD2, 0xBD, 0x52, 0xA5, 0xB4, 0x9D, 0x71, 0x9D, 0x70, 0xA5, 0xD2, 0x84, 0xCB, 0x74, 0x88, 0x8D, 0x6D, 0x9D, 0xAD, 0x85, 0x06, 0x8D, 0x47, 0x84, 0xC7, 0x74, 0x47, 0x84, 0x2B, 0x94, 0xCE, 0xA5, 0x2F, 0x8C, 0xAD, 0x9D, 0x2F, 0xCE, 0x34, 0xAC, 0xEF, 0xA4, 0x6D, 0xBD, 0x30, 0x9C, 0x4E, 0x62, 0xA9, 0x6B, 0x4C, 0x73, 0x8D, 0x62, 0xEB, 0x52, 0x89, 0x6B, 0x6C, 0x62, 0xCA, 0x52, 0x69, 0x6B, 0x4B, 0x6B, 0x4C, 0x5A, 0xA9, 0x5A, 0xCA, 0x5A, 0xA9, 0x94, 0x6F, 0xA4, 0xF0, 0xAD, 0x11, 0xB5, 0x31, 0xA4, 0xD0, 0xBD, 0x73, 0x8C, 0x0C, 0xB5, 0x10, 0xB5, 0x31, 0x9C, 0xB0, 0x94, 0x8F, 0x8C, 0x2F, 0x5A, 0xEA, 0x9C, 0xB0, 0xC6, 0x16, 0xB5, 0x53, 0x94, 0x6F, 0x94, 0x90, 0xA4, 0xF1, 0xA4, 0xF1, 0xAD, 0x32, 0xB5, 0x73, 0xB5, 0x73, 0xA4, 0xF1, 0x9C, 0xB0, 0xAD, 0x11, 0xAD, 0x31, 0xB5, 0x31, 0x94, 0x6F, 0x83, 0xEC, 0xBD, 0x51, 0xAC, 0xCE, 0xB5, 0x52, 0xBD, 0xB4, 0xB5, 0x73, 0xBD, 0xD5, 0xBD, 0xB4, 0xBD, 0xD4, 0xC5, 0xF5, 0xB5, 0x73, 0xAD, 0x52, 0xB5, 0x94, 0xB5, 0x93, 0xAD, 0x32, 0xA5, 0x12, 0xAD, 0x33, 0xA5, 0x12, 0xAD, 0x53, 0xB5, 0x74, 0xAD, 0x53, 0xAD, 0x53, 0xB5, 0x74, 0xAD, 0x33, 0xA4, 0xD1, 0xA4, 0xB0, 0xAC, 0xF1, 0x5A, 0xA9, 0x4A, 0x48, 0x4A, 0x28, 0x4A, 0x28, 0x39, 0xA6, 0x52, 0x69, 0x6B, 0x4D, 0x62, 0xEC, 0x6B, 0x6E, 0x8C, 0x51, 0x9C, 0xF4, 0xB5, 0x97, 0xBD, 0xD7, 0xA5, 0x35, 0xC5, 0xF8, 0x94, 0xB3, 0x6B, 0x6D, 0x6B, 0x2B, 0xB5, 0x93, 0xA4, 0xCF, 0x83, 0xCD, 0xBD, 0xB4, 0x94, 0x4E, 0x73, 0x4A, 0x6B, 0x2A, 0x83, 0xCC, 0x8C, 0x0D, 0x83, 0xEC, 0x8C, 0x0D, 0xA4, 0xF1, 0x94, 0x6F, 0x8C, 0x0D, 0xAC, 0xF0, 0x94, 0x4D, 0x9C, 0x6E, 0x94, 0x2D, 0x8B, 0xCB, 0x83, 0x89, 0x94, 0x0B, 0x94, 0x0C, 0x7B, 0x8B, 0x7B, 0xAC, 0x9C, 0x8F, 0x8C, 0x2E, 0x8C, 0x2F, 0xC6, 0x17, 0xAD, 0x55, 0xA5, 0x14, 0x7B, 0xAF, 0x4A, 0x49, 0x29, 0x45, 0x18, 0xC3, 0x29, 0x65, 0x39, 0xE7, 0x42, 0x08, 0x42, 0x08, 0x39, 0xE7, 0x42, 0x28, 0x52, 0x8A, 0x5A, 0xCB, 0x5A, 0xEC, 0x63, 0x0C, 0x7B, 0xAE, 0xBD, 0xB7, 0xB5, 0x35, 0x94, 0x51, 0x6A, 0xEC, 0x6B, 0x0B, 0x7B, 0x6C, 0xBD, 0x53, 0xB5, 0x52, 0xB5, 0x53, 0xB5, 0x32, 0xB5, 0x32, 0xB5, 0x53, 0xB5, 0x53, 0xB5, 0x33, 0xB5, 0x32, 0xB5, 0x32, 0xAD, 0x12, 0xAC, 0xF1, 0xAC, 0xF1, 0xAD, 0x32, 0xB5, 0x32, 0xB5, 0x32, 0xAC, 0xF1, 0xA4, 0xB0, 0xA4, 0xD0, 0x94, 0x2F, 0x62, 0xEB, 0x39, 0xC7, 0x29, 0x45, 0x21, 0x05, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0xC3, 0x18, 0xC4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC4, 0x41, 0x05, 0x50, 0xE4, 0x40, 0xC4, 0x28, 0xE4, 0x20, 0xE4, 0x21, 0x25, 0x18, 0xE4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xC4, 0x20, 0xE4, 0x21, 0x04, 0x20, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xC4, 0x21, 0x05, 0x21, 0x25, 0x21, 0x05, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x20, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x18, 0xE4, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x25, 0x29, 0x46, 0x29, 0x46, 0x21, 0x26, 0x29, 0x26, 0x29, 0x47, 0x29, 0x67, 0x31, 0x67, 0x39, 0xA8, 0x39, 0xE9, 0x42, 0x09, 0x42, 0x09, 0x42, 0x09, 0x3A, 0x09, 0x42, 0x4A, 0x52, 0x8B, 0x6B, 0x2C, 0x9C, 0x90, 0x9C, 0xB0, 0x9C, 0x4F, 0x9C, 0x4F, 0x6B, 0x0A, 0x62, 0xC9, 0x9C, 0x6F, 0xA4, 0x90, 0x8B, 0xED, 0x94, 0x2F, 0x9C, 0x70, 0x9C, 0x70, 0x7B, 0x6C, 0x8C, 0x0E, 0xA4, 0xD1, 0x9C, 0x90, 0x9C, 0x90, 0x94, 0x4F, 0x94, 0x4F, 0xA4, 0xB0, 0xAC, 0xF1, 0xB5, 0x32, 0xAC, 0xF0, 0x9C, 0x6E, 0xA4, 0x8F, 0xAC, 0xAF, 0xB4, 0xF0, 0xA4, 0x6F, 0xA4, 0xB0, 0xA4, 0xD0, 0xAD, 0x11, 0xB5, 0x32, 0xAD, 0x11, 0xAD, 0x11, 0xA4, 0xD0, 0x94, 0x2E, 0x94, 0x2E, 0x94, 0x4F, 0x94, 0x6F, 0x63, 0x0B, 0x52, 0x6A, 0x39, 0xC7, 0x31, 0xA7, 0x63, 0x2C, 0x5A, 0xCB, 0x73, 0xAE, 0x52, 0x8A, 0x52, 0x6A, 0x83, 0xCF, 0x83, 0xAF, 0x73, 0x4D, 0xAC, 0xD2, 0xB5, 0x34, 0xC5, 0xB6, 0xBD, 0x95, 0xAC, 0xF2, 0xEE, 0xD7, 0xAD, 0xB4, 0x9D, 0x70, 0x85, 0x0B, 0x8D, 0x4C, 0x8D, 0x0B, 0x74, 0x67, 0x7C, 0xA8, 0x8D, 0x28, 0x9D, 0xC9, 0x8D, 0x08, 0x9D, 0x4A, 0x6B, 0xC7, 0x6B, 0x88, 0x63, 0xA8, 0x6B, 0xE8, 0x95, 0x0D, 0xA5, 0x70, 0x6B, 0x68, 0x9C, 0x6C, 0xB5, 0x0F, 0xAD, 0x2F, 0x7B, 0x6A, 0x7B, 0x8C, 0xB5, 0x94, 0xAD, 0x33, 0x7B, 0xAD, 0x4A, 0x07, 0x42, 0x07, 0x52, 0x68, 0x52, 0x89, 0x42, 0x07, 0x41, 0xE7, 0x42, 0x07, 0x42, 0x07, 0x42, 0x07, 0x7B, 0xAC, 0x73, 0x6B, 0x73, 0x4B, 0x83, 0xED, 0x8C, 0x0D, 0xA4, 0xD0, 0x8B, 0xEC, 0xAC, 0xEF, 0xB5, 0x51, 0xB5, 0x52, 0x94, 0x6F, 0x94, 0x90, 0x8C, 0x4F, 0x94, 0x70, 0xA5, 0x12, 0xA4, 0xD1, 0xAD, 0x32, 0xAD, 0x33, 0xA5, 0x11, 0xAD, 0x11, 0xBD, 0xB4, 0xA4, 0xD0, 0xB5, 0x52, 0xB5, 0x52, 0x9C, 0xB0, 0x9C, 0xB0, 0xAD, 0x11, 0xAD, 0x11, 0xAD, 0x31, 0x9C, 0x6E, 0xBD, 0x51, 0xAC, 0xEF, 0xC5, 0xB3, 0xCE, 0x15, 0xB5, 0x73, 0xAD, 0x52, 0xB5, 0x93, 0xC5, 0xF5, 0xC5, 0xF5, 0xCE, 0x15, 0xC5, 0xF5, 0xCE, 0x36, 0xC5, 0xF5, 0xAD, 0x32, 0xB5, 0x73, 0xAD, 0x53, 0xAD, 0x53, 0xBD, 0xB4, 0xC5, 0xF5, 0xBD, 0xD4, 0xAD, 0x53, 0xB5, 0x94, 0xBD, 0xD4, 0xB5, 0x73, 0xBD, 0x72, 0xB5, 0x31, 0x7B, 0x6B, 0x39, 0xC6, 0x31, 0x86, 0x31, 0x65, 0x4A, 0x49, 0x52, 0x8A, 0x5A, 0xCB, 0x73, 0x6E, 0x6B, 0x4D, 0x7B, 0xCF, 0x8C, 0x72, 0x9C, 0xD3, 0xA4, 0xF4, 0xB5, 0x97, 0xCE, 0x7A, 0xAD, 0x56, 0x8C, 0x51, 0xAD, 0x13, 0x8C, 0x4F, 0x52, 0x68, 0x39, 0xC6, 0xAD, 0x33, 0xAD, 0x32, 0x8C, 0x0D, 0x94, 0x4E, 0x8C, 0x2E, 0x9C, 0x8F, 0x94, 0x6F, 0x94, 0x8F, 0xA4, 0xD1, 0x9C, 0x8F, 0x8C, 0x2E, 0x94, 0x6F, 0x94, 0x8F, 0xAD, 0x10, 0xAD, 0x10, 0x8C, 0x2D, 0x94, 0x2D, 0x9C, 0x8E, 0x9C, 0x6E, 0x94, 0x8F, 0x83, 0xED, 0x84, 0x0E, 0x9C, 0xD1, 0xAD, 0x54, 0xC6, 0x38, 0xA5, 0x35, 0xA5, 0x14, 0x6B, 0x6D, 0x31, 0x86, 0x31, 0x86, 0x21, 0x24, 0x18, 0xE3, 0x31, 0x86, 0x4A, 0x48, 0x4A, 0x49, 0x31, 0x86, 0x39, 0xE7, 0x4A, 0x48, 0x4A, 0x69, 0x52, 0x8A, 0x5A, 0xEB, 0x62, 0xEC, 0x73, 0x4D, 0x94, 0x51, 0xCE, 0x18, 0x8C, 0x10, 0x6B, 0x0C, 0x8C, 0x0F, 0x9C, 0x50, 0xAC, 0xF2, 0xAD, 0x12, 0xAC, 0xF1, 0xA4, 0xF1, 0xAC, 0xF1, 0xAC, 0xF1, 0xAC, 0xF1, 0x9C, 0x90, 0xA4, 0xD0, 0xB5, 0x32, 0xAD, 0x11, 0xAC, 0xF1, 0xAC, 0xF1, 0xA4, 0xD1, 0xA4, 0xD1, 0xAD, 0x12, 0xB5, 0x53, 0xBD, 0xB4, 0xAD, 0x12, 0x94, 0x4F, 0x52, 0x89, 0x4A, 0x69, 0x39, 0xE7, 0x21, 0x25, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x20, 0xE4, 0x41, 0x05, 0x49, 0x05, 0x38, 0xC4, 0x28, 0xE4, 0x21, 0x05, 0x21, 0x05, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC3, 0x18, 0xA3, 0x18, 0xA3, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xE4, 0x21, 0x05, 0x21, 0x05, 0x18, 0xE4, 0x18, 0xE4, 0x21, 0x05, 0x21, 0x05, 0x18, 0xE4, 0x18, 0xC4, 0x20, 0xE4, 0x21, 0x25, 0x21, 0x05, 0x18, 0xC4, 0x20, 0xE4, 0x29, 0x25, 0x29, 0x46, 0x21, 0x05, 0x21, 0x05, 0x29, 0x46, 0x21, 0x26, 0x21, 0x05, 0x29, 0x46, 0x29, 0x67, 0x31, 0x67, 0x31, 0x87, 0x31, 0xA8, 0x39, 0xE9, 0x42, 0x09, 0x42, 0x09, 0x42, 0x09, 0x39, 0xE8, 0x42, 0x09, 0x52, 0xAB, 0x5A, 0xEB, 0x94, 0x70, 0x9C, 0x90, 0x9C, 0x8F, 0x73, 0x6C, 0x7B, 0xAD, 0x94, 0x2F, 0xA4, 0xD1, 0xA4, 0xF1, 0xAD, 0x12, 0xA4, 0xD1, 0xAD, 0x12, 0x9C, 0x90, 0xA4, 0xD1, 0xA4, 0xF1, 0xAC, 0xF1, 0x9C, 0x90, 0x9C, 0xB0, 0x94, 0x6F, 0xA4, 0xB0, 0xAC, 0xF1, 0xB5, 0x31, 0xAC, 0xF0, 0xB5, 0x32, 0xBD, 0x52, 0xBD, 0x72, 0xBD, 0x72, 0xB5, 0x11, 0x94, 0x4E, 0x9C, 0x8F, 0xB5, 0x32, 0xBD, 0x73, 0xBD, 0x73, 0xBD, 0x73, 0xB5, 0x32, 0x83, 0xCC, 0x8C, 0x0D, 0x94, 0x2E, 0x94, 0x4F, 0x83, 0xCE, 0x42, 0x28, 0x63, 0x0C, 0x39, 0xC7, 0x73, 0x6E, 0x52, 0x8A, 0x5A, 0xCB, 0x4A, 0x6A, 0x73, 0x8E, 0x73, 0x8E, 0x73, 0x4D, 0x7B, 0x6D, 0x8B, 0xCF, 0xA4, 0x91, 0xCE, 0x17, 0xCE, 0x17, 0xA4, 0xD1, 0xC5, 0xB3, 0x5B, 0x8A, 0x8D, 0x0E, 0x6C, 0x68, 0x85, 0x08, 0x74, 0xA7, 0x64, 0x05, 0x85, 0x08, 0x8D, 0x48, 0x84, 0xE7, 0x7C, 0xC7, 0x84, 0xC9, 0x9D, 0x0C, 0x8C, 0x8A, 0x74, 0x48, 0x95, 0x2C, 0xA5, 0x6E, 0x9D, 0x4E, 0xC6, 0x71, 0xA5, 0x2C, 0xB5, 0x4F, 0xAD, 0x4F, 0xBD, 0x92, 0xCE, 0x35, 0xBD, 0xB3, 0x9C, 0xAF, 0xAC, 0xD0, 0xB5, 0x31, 0xB5, 0x11, 0xAC, 0xF1, 0xA4, 0xAF, 0x9C, 0x4E, 0x94, 0x4E, 0x9C, 0x8F, 0x94, 0x6E, 0x94, 0x2E, 0x94, 0x2E, 0x83, 0xCC, 0x6B, 0x2B, 0x7B, 0x6B, 0x7B, 0x8B, 0x8B, 0xED, 0x9C, 0x6E, 0xAC, 0xCF, 0x8C, 0x0C, 0x9C, 0x8F, 0x94, 0x4E, 0xA4, 0xF1, 0x9C, 0xB0, 0x73, 0x4B, 0xA5, 0x12, 0x9C, 0xB0, 0x8C, 0x2E, 0xA4, 0xD0, 0xA4, 0xD1, 0xA4, 0xF1, 0xAD, 0x12, 0x9C, 0xB0, 0xB5, 0x52, 0xAD, 0x31, 0xAD, 0x11, 0x94, 0x4E, 0xA4, 0xF0, 0xAD, 0x11, 0x8B, 0xEC, 0x83, 0xCB, 0xBD, 0x51, 0xBD, 0x30, 0xD6, 0x56, 0xD6, 0x76, 0xCE, 0x35, 0xCE, 0x15, 0xCE, 0x36, 0xC6, 0x15, 0xC5, 0xF4, 0xCE, 0x35, 0xCD, 0xF4, 0xC5, 0xF4, 0xCE, 0x35, 0xC5, 0xF5, 0xC5, 0xF5, 0xC5, 0xD4, 0xC5, 0xF5, 0xCE, 0x35, 0xCE, 0x15, 0xC5, 0xF4, 0xC5, 0xF4, 0xC6, 0x15, 0xC5, 0xF4, 0xAD, 0x11, 0xBD, 0x72, 0xB5, 0x10, 0x8B, 0xCD, 0x63, 0x0B, 0x52, 0x8A, 0x5A, 0xAA, 0x62, 0xEB, 0x6B, 0x0C, 0x73, 0x8E, 0x73, 0x8E, 0x6B, 0x4D, 0x73, 0x8E, 0x73, 0x8E, 0x84, 0x10, 0xAD, 0x55, 0xBD, 0xF8, 0xC6, 0x18, 0xBD, 0xF8, 0x9C, 0xB2, 0x8C, 0x2F, 0x52, 0x8A, 0x41, 0xE8, 0x39, 0xC7, 0x7B, 0xCE, 0xCE, 0x36, 0x8C, 0x0E, 0xA5, 0x11, 0xA4, 0xF1, 0xAD, 0x12, 0xAD, 0x53, 0xB5, 0x73, 0xBD, 0xD5, 0xA4, 0xF1, 0xAD, 0x32, 0xB5, 0x93, 0xBD, 0xB4, 0xC5, 0xF4, 0xBD, 0xB3, 0xAC, 0xF0, 0xAD, 0x10, 0xAC, 0xEF, 0xAC, 0xCF, 0x8C, 0x0E, 0x84, 0x0E, 0x94, 0x4F, 0x9C, 0xB0, 0xB5, 0x74, 0xC6, 0x18, 0xA5, 0x35, 0xA5, 0x15, 0x8C, 0x50, 0x63, 0x0B, 0x29, 0x45, 0x29, 0x65, 0x21, 0x04, 0x18, 0xE3, 0x31, 0xA6, 0x4A, 0x49, 0x42, 0x08, 0x31, 0xA6, 0x39, 0xE7, 0x4A, 0x49, 0x4A, 0x69, 0x52, 0x8A, 0x4A, 0x48, 0x52, 0x69, 0x6B, 0x0C, 0x73, 0x8D, 0x52, 0x49, 0x83, 0xCF, 0xA4, 0xB2, 0x94, 0x30, 0x94, 0x2F, 0xC5, 0xD5, 0xC5, 0xD4, 0xC5, 0xD4, 0xC5, 0xD4, 0xCD, 0xF4, 0xCE, 0x15, 0xBD, 0x93, 0xC5, 0xD3, 0xD6, 0x35, 0xCE, 0x15, 0xD6, 0x15, 0xC5, 0xD4, 0xB5, 0x52, 0xAD, 0x32, 0xA4, 0xF1, 0x9C, 0xB0, 0xBD, 0xB4, 0xB5, 0x32, 0xA4, 0xD1, 0x8C, 0x2F, 0x83, 0xEE, 0x6B, 0x2C, 0x31, 0xA6, 0x21, 0x04, 0x19, 0x04, 0x18, 0xA3, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x29, 0x45, 0x18, 0xC3, 0x20, 0xE4, 0x39, 0x04, 0x49, 0x25, 0x30, 0xE4, 0x20, 0xE4, 0x20, 0xE4, 0x18, 0xE4, 0x18, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xA3, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0x83, 0x10, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xA3, 0x18, 0xC4, 0x18, 0xC4, 0x20, 0xE4, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x18, 0xE4, 0x18, 0xE4, 0x21, 0x25, 0x21, 0x05, 0x18, 0xE4, 0x18, 0xE5, 0x21, 0x25, 0x29, 0x66, 0x29, 0x46, 0x21, 0x05, 0x21, 0x25, 0x21, 0x26, 0x21, 0x05, 0x21, 0x26, 0x29, 0x46, 0x21, 0x26, 0x21, 0x05, 0x29, 0x67, 0x31, 0x87, 0x39, 0xC8, 0x39, 0xE9, 0x41, 0xE9, 0x39, 0xC8, 0x31, 0xA8, 0x39, 0xE9, 0x4A, 0x6A, 0x5A, 0xCB, 0x83, 0xEF, 0x9C, 0x6F, 0x83, 0xCD, 0x9C, 0x4F, 0x94, 0x2F, 0x94, 0x2E, 0x8B, 0xED, 0xAC, 0xF1, 0xB5, 0x32, 0xAC, 0xF1, 0xA4, 0xD1, 0xA4, 0xF1, 0xA4, 0xB0, 0x83, 0xAC, 0x62, 0xC9, 0x9C, 0xB1, 0x9C, 0x90, 0xA4, 0xD1, 0xAD, 0x11, 0xB5, 0x11, 0xA4, 0xD0, 0xBD, 0x72, 0xC5, 0xD4, 0xB5, 0x52, 0xBD, 0x73, 0xAD, 0x11, 0x9C, 0xB0, 0xAD, 0x12, 0xB5, 0x52, 0xB5, 0x32, 0xB5, 0x32, 0xBD, 0x93, 0xAC, 0xF1, 0x7B, 0xAC, 0x94, 0x4E, 0xA4, 0xB0, 0x9C, 0x4F, 0x8C, 0x2F, 0x63, 0x0B, 0x73, 0x8E, 0x31, 0x66, 0x42, 0x08, 0x31, 0x66, 0x31, 0x66, 0x31, 0x66, 0x31, 0x86, 0x39, 0xA7, 0x5A, 0xCB, 0x94, 0x51, 0x7B, 0x4C, 0x9C, 0x71, 0xC5, 0xD6, 0xDE, 0x99, 0x94, 0x51, 0x62, 0xCA, 0x8D, 0x10, 0xA5, 0xB2, 0x64, 0x06, 0x8D, 0x68, 0x74, 0x86, 0x53, 0x64, 0x7C, 0xA7, 0x85, 0x08, 0x95, 0x8B, 0x7C, 0x88, 0x5B, 0x45, 0x6B, 0xC8, 0x63, 0xC6, 0x6C, 0x26, 0x84, 0xE9, 0x8C, 0xEB, 0x7C, 0x89, 0xA5, 0xCB, 0xA5, 0x6A, 0x94, 0xAB, 0xA5, 0x2F, 0xA5, 0x30, 0xAD, 0x30, 0xB5, 0x30, 0xB5, 0x10, 0xAC, 0xD0, 0xAC, 0xCF, 0xAC, 0xCF, 0xAC, 0xD0, 0xB5, 0x10, 0xB5, 0x10, 0xAD, 0x10, 0xAD, 0x10, 0xB5, 0x10, 0xB5, 0x10, 0xB5, 0x10, 0xBD, 0x71, 0xC5, 0x92, 0xC5, 0x72, 0xC5, 0x92, 0xC5, 0x72, 0xC5, 0x51, 0xC5, 0x71, 0xC5, 0x71, 0xB5, 0x31, 0xB5, 0x10, 0xAC, 0xF0, 0xAC, 0xF0, 0xAC, 0xF0, 0xAC, 0xCF, 0xA4, 0x8E, 0x9C, 0x4D, 0x94, 0x2D, 0x94, 0x2D, 0x94, 0x2D, 0x8B, 0xEC, 0x8B, 0xEC, 0x8B, 0xEC, 0x8B, 0xEC, 0x8B, 0xEC, 0x94, 0x0C, 0x94, 0x0D, 0x8B, 0xEC, 0x83, 0xAB, 0x94, 0x2D, 0xC5, 0x71, 0xA4, 0x8E, 0xAC, 0xF0, 0xC5, 0xB3, 0xBD, 0x93, 0xB5, 0x52, 0xB5, 0x31, 0xBD, 0x72, 0xB5, 0x52, 0xC5, 0xD4, 0xBD, 0x93, 0xAC, 0xF0, 0xBD, 0xB3, 0xBD, 0x93, 0xC5, 0xD4, 0xC5, 0xF4, 0xC5, 0xF4, 0xD6, 0x56, 0xCE, 0x15, 0xCD, 0xF5, 0xC5, 0xF4, 0xC5, 0xB4, 0xC5, 0xB4, 0x9C, 0x6E, 0xC5, 0x72, 0xBD, 0x31, 0xAD, 0x12, 0x62, 0xEB, 0x63, 0x0B, 0x5A, 0xAA, 0x52, 0x69, 0x6B, 0x4D, 0x6B, 0x4D, 0x6B, 0x2D, 0x7B, 0xAF, 0x73, 0x8E, 0x73, 0xAF, 0x9C, 0xB3, 0xA5, 0x14, 0xAD, 0x56, 0xBD, 0xD8, 0xAD, 0x15, 0x8C, 0x30, 0x8C, 0x10, 0x52, 0x8A, 0x42, 0x08, 0x31, 0xA6, 0x42, 0x28, 0xBD, 0xB5, 0xC6, 0x15, 0xBD, 0xD4, 0xC5, 0xF5, 0xCE, 0x16, 0xCE, 0x56, 0xCE, 0x56, 0xCE, 0x36, 0xBD, 0xD4, 0xC6, 0x15, 0xCE, 0x36, 0xD6, 0x76, 0xC6, 0x15, 0xC5, 0xD4, 0xAD, 0x10, 0xAD, 0x10, 0xAD, 0x0F, 0xAC, 0xF0, 0x7B, 0xAC, 0x83, 0xEE, 0x9C, 0xB0, 0x9C, 0xD1, 0xB5, 0xB5, 0xC6, 0x18, 0xA5, 0x35, 0x9C, 0xF4, 0x9C, 0xD2, 0x8C, 0x71, 0x73, 0xAE, 0x29, 0x24, 0x31, 0x86, 0x21, 0x24, 0x18, 0xE3, 0x39, 0xC7, 0x4A, 0x48, 0x31, 0xA6, 0x31, 0x86, 0x41, 0xE7, 0x52, 0x8A, 0x52, 0xAA, 0x63, 0x0C, 0x73, 0x6D, 0x4A, 0x49, 0x29, 0x45, 0x41, 0xE8, 0x5A, 0xAA, 0x8C, 0x10, 0xA4, 0xB2, 0x94, 0x0F, 0xB5, 0x53, 0xEE, 0xF8, 0xDE, 0x96, 0xD6, 0x76, 0xDE, 0x96, 0xDE, 0x96, 0xB5, 0x32, 0xBD, 0x73, 0xD6, 0x56, 0xD6, 0x35, 0xD6, 0x55, 0xCE, 0x35, 0xC5, 0xF5, 0xBD, 0xD4, 0xA4, 0xF1, 0xA4, 0xD1, 0xBD, 0x73, 0x94, 0x4F, 0x94, 0x2E, 0x94, 0x2E, 0x9C, 0x4F, 0x94, 0x2E, 0x6B, 0x0B, 0x52, 0x69, 0x4A, 0x28, 0x41, 0xE7, 0x41, 0xE7, 0x52, 0x89, 0x7B, 0xAD, 0x83, 0xCE, 0x39, 0xA6, 0x31, 0x66, 0x39, 0x25, 0x41, 0x25, 0x28, 0xE4, 0x20, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC4, 0x21, 0x05, 0x21, 0x25, 0x18, 0xC4, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xE4, 0x21, 0x05, 0x21, 0x05, 0x18, 0xE4, 0x18, 0xC4, 0x21, 0x05, 0x21, 0x25, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x29, 0x46, 0x29, 0x46, 0x21, 0x05, 0x21, 0x05, 0x21, 0x25, 0x21, 0x25, 0x21, 0x26, 0x29, 0x46, 0x29, 0x46, 0x21, 0x05, 0x21, 0x26, 0x29, 0x67, 0x31, 0xA8, 0x31, 0xA8, 0x31, 0xA8, 0x39, 0xC8, 0x31, 0xA8, 0x39, 0xC9, 0x3A, 0x09, 0x42, 0x4A, 0x52, 0x6A, 0x6A, 0xEB, 0x73, 0x4C, 0x7B, 0x6C, 0x6B, 0x0A, 0x6A, 0xEA, 0x6B, 0x0A, 0x73, 0x4B, 0x83, 0xAD, 0x8B, 0xED, 0x7B, 0x8C, 0x8C, 0x0E, 0x9C, 0x6F, 0x6B, 0x0A, 0x6B, 0x0A, 0x9C, 0xB1, 0x8C, 0x0E, 0xA4, 0xD1, 0xB5, 0x32, 0xB5, 0x31, 0xB5, 0x31, 0xBD, 0x93, 0xBD, 0x72, 0xBD, 0x72, 0xC5, 0xB3, 0xAD, 0x11, 0xAC, 0xF1, 0x9C, 0x8F, 0xA4, 0xD0, 0xAD, 0x32, 0xAC, 0xF1, 0xBD, 0xB4, 0xAD, 0x32, 0x8C, 0x2E, 0x9C, 0x90, 0xAC, 0xD1, 0xA4, 0xD1, 0x9C, 0xB0, 0x7B, 0xAD, 0x4A, 0x49, 0x29, 0x45, 0x41, 0xE8, 0x62, 0xEC, 0x39, 0xC7, 0x29, 0x45, 0x21, 0x04, 0x31, 0x66, 0x39, 0xC7, 0x6B, 0x0C, 0x73, 0x0C, 0x83, 0xAE, 0x8B, 0xEF, 0x94, 0x30, 0x83, 0x8E, 0x52, 0x49, 0xAD, 0xF4, 0x95, 0x31, 0x4B, 0x45, 0x74, 0xC7, 0x74, 0xA7, 0x74, 0x48, 0x6C, 0x25, 0x6C, 0x66, 0x8D, 0x4A, 0x84, 0xCA, 0x4A, 0xC5, 0x5B, 0x66, 0x5B, 0x86, 0x7C, 0xA8, 0x7C, 0xC7, 0x85, 0x0A, 0x7C, 0xA9, 0x7C, 0xE6, 0xAE, 0x0A, 0x94, 0xCA, 0x8C, 0x4B, 0x8C, 0x4C, 0xA4, 0xAE, 0xB5, 0x10, 0x94, 0x0C, 0x83, 0xCC, 0x83, 0xCC, 0x7B, 0x8B, 0x83, 0xED, 0x84, 0x0D, 0x8C, 0x2E, 0x94, 0x4E, 0xA4, 0xD0, 0x9C, 0x6E, 0x9C, 0x6E, 0xA4, 0xAF, 0xAC, 0xCF, 0xA4, 0x8F, 0xA4, 0x6E, 0x94, 0x0D, 0x94, 0x2D, 0x9C, 0x4D, 0xA4, 0x8E, 0x9C, 0x6E, 0xAC, 0xCF, 0xAC, 0xEF, 0xAC, 0xCF, 0xBD, 0x31, 0xAC, 0xCF, 0xAC, 0xCF, 0xA4, 0x6D, 0x9C, 0x4D, 0x9C, 0x6D, 0xA4, 0x8E, 0xA4, 0x8E, 0xB4, 0xEF, 0xB5, 0x10, 0xC5, 0x71, 0xC5, 0x71, 0xC5, 0x71, 0xCD, 0x92, 0xCD, 0xD3, 0xCD, 0xD3, 0xCD, 0xB2, 0xC5, 0x92, 0xC5, 0x51, 0xC5, 0x91, 0xBD, 0x51, 0xB4, 0xEF, 0xAC, 0xAF, 0x94, 0x2D, 0x8B, 0xCC, 0x83, 0xAB, 0x8B, 0xEC, 0x8B, 0xEC, 0x8B, 0xEC, 0x93, 0xEC, 0x94, 0x0C, 0x93, 0xEC, 0x93, 0xEC, 0x83, 0x8B, 0x83, 0xAB, 0x8B, 0xED, 0x8B, 0xEC, 0xA4, 0xAF, 0xB5, 0x52, 0xC5, 0xB3, 0xB5, 0x51, 0xC5, 0xB2, 0xCD, 0xB2, 0xBD, 0x51, 0xC5, 0xB4, 0x41, 0xE7, 0x7B, 0xCF, 0x7B, 0x8D, 0x4A, 0x28, 0x52, 0x69, 0x6B, 0x2C, 0x5A, 0xAA, 0x62, 0xEB, 0x52, 0x6A, 0x6B, 0x2D, 0x7B, 0xCF, 0x84, 0x10, 0xA5, 0x35, 0x94, 0xB2, 0x94, 0x72, 0xA4, 0xF4, 0x94, 0x51, 0x62, 0xEB, 0x41, 0xE7, 0x31, 0x86, 0x42, 0x28, 0x7B, 0xEE, 0xD6, 0x77, 0xBD, 0xD4, 0xC5, 0xF5, 0xC6, 0x15, 0xC6, 0x15, 0xC6, 0x15, 0xBD, 0xF4, 0xA5, 0x11, 0xC6, 0x15, 0xCE, 0x36, 0xCE, 0x35, 0xD6, 0x56, 0xC5, 0xF4, 0x9C, 0x6E, 0xBD, 0x50, 0xB5, 0x10, 0xB5, 0x11, 0x73, 0x6B, 0x84, 0x0E, 0x9C, 0xD1, 0xA4, 0xF1, 0xBD, 0xD6, 0xBD, 0xF8, 0xA5, 0x35, 0x84, 0x31, 0x8C, 0x50, 0x9C, 0xD1, 0x9C, 0xF2, 0x84, 0x0F, 0x63, 0x2C, 0x21, 0x24, 0x18, 0xE3, 0x29, 0x86, 0x31, 0xA6, 0x42, 0x07, 0x42, 0x08, 0x39, 0xC6, 0x42, 0x07, 0x5A, 0xEB, 0x52, 0x8A, 0x8C, 0x10, 0x83, 0xCF, 0x5A, 0x8A, 0x52, 0x49, 0x6B, 0x0C, 0x8B, 0xEF, 0x83, 0xAE, 0x8C, 0x0F, 0xA4, 0xB1, 0xBD, 0x73, 0xD6, 0x76, 0xDE, 0x96, 0xE6, 0xB7, 0xDE, 0x97, 0xB5, 0x52, 0xCE, 0x36, 0xD6, 0x56, 0xD6, 0x35, 0xCE, 0x35, 0xCE, 0x15, 0xBD, 0xD4, 0xBD, 0xB4, 0xAD, 0x32, 0xAD, 0x12, 0xB5, 0x53, 0x94, 0x4F, 0x7B, 0x8C, 0x9C, 0x6F, 0xBD, 0x52, 0xBD, 0x52, 0xAC, 0xF1, 0x9C, 0x90, 0x94, 0x2E, 0x94, 0x4F, 0xA4, 0xD1, 0xB5, 0x53, 0xC5, 0x93, 0xBD, 0x53, 0x94, 0x2F, 0x7B, 0x8D, 0x73, 0x2C, 0x49, 0xE7, 0x29, 0x05, 0x21, 0x04, 0x21, 0x04, 0x18, 0xC4, 0x18, 0xA3, 0x18, 0xC4, 0x18, 0xC3, 0x10, 0x83, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0xA3, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC4, 0x21, 0x05, 0x21, 0x05, 0x18, 0xC4, 0x10, 0xA3, 0x18, 0xA3, 0x18, 0xE4, 0x21, 0x05, 0x21, 0x05, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x21, 0x25, 0x21, 0x25, 0x18, 0xE5, 0x21, 0x26, 0x29, 0x46, 0x21, 0x05, 0x18, 0xE4, 0x21, 0x05, 0x21, 0x25, 0x29, 0x46, 0x21, 0x25, 0x21, 0x25, 0x21, 0x05, 0x21, 0x05, 0x21, 0x26, 0x29, 0x67, 0x31, 0x87, 0x31, 0xA8, 0x39, 0xC8, 0x39, 0xC8, 0x31, 0xA8, 0x31, 0xA8, 0x39, 0xE9, 0x42, 0x2A, 0x4A, 0x4A, 0x63, 0x0C, 0x83, 0xCE, 0x83, 0xCE, 0x83, 0xAD, 0x83, 0xAD, 0x7B, 0x8D, 0x7B, 0x8C, 0x7B, 0x8C, 0x73, 0x2B, 0x6B, 0x2B, 0x6B, 0x0A, 0x6B, 0x2B, 0x73, 0x2B, 0x62, 0xEA, 0x73, 0x2B, 0x8C, 0x0E, 0x94, 0x4E, 0x94, 0x4E, 0x94, 0x4E, 0x94, 0x2E, 0x9C, 0x6F, 0xAC, 0xF1, 0xA4, 0xD0, 0xA4, 0x8F, 0xA4, 0xD0, 0xB5, 0x31, 0x9C, 0x6F, 0xBD, 0x73, 0xAC, 0xF1, 0xBD, 0x73, 0x94, 0x4E, 0x94, 0x4F, 0x94, 0x4F, 0x94, 0x4F, 0x8C, 0x2E, 0x8C, 0x0E, 0x7B, 0xAD, 0x4A, 0x49, 0x21, 0x25, 0x5A, 0xCB, 0x6B, 0x4D, 0x39, 0xC7, 0x39, 0xA7, 0x4A, 0x49, 0x62, 0xCB, 0x52, 0x8A, 0x52, 0x69, 0x6A, 0xEB, 0x41, 0xA6, 0x62, 0xAA, 0x8B, 0xAE, 0x8B, 0xCE, 0x5A, 0xAA, 0x8D, 0x10, 0x84, 0xCE, 0x7C, 0xAB, 0x7C, 0xC9, 0x8D, 0x4C, 0x8D, 0x0B, 0x63, 0xC4, 0x5B, 0xE3, 0x74, 0x66, 0x95, 0x2B, 0x63, 0x87, 0x53, 0x25, 0x53, 0x44, 0x74, 0x87, 0x6C, 0x65, 0x6C, 0x87, 0x6C, 0x87, 0x74, 0xC5, 0x9D, 0xA7, 0x9D, 0x2B, 0x84, 0x4D, 0xA5, 0x52, 0xBE, 0x15, 0xC6, 0x15, 0xA4, 0xD0, 0x94, 0x90, 0xA5, 0x12, 0x84, 0x2F, 0x84, 0x2E, 0x7B, 0xCD, 0x84, 0x2F, 0x9C, 0xB0, 0xA4, 0xD0, 0x7B, 0xAC, 0x7B, 0xAC, 0xAD, 0x32, 0xA4, 0xD0, 0x9C, 0xAF, 0x9C, 0x8F, 0x84, 0x0E, 0x7B, 0xAC, 0x8C, 0x2E, 0xA4, 0xF1, 0x9C, 0x90, 0x9C, 0xB0, 0x8C, 0x2E, 0x94, 0x0D, 0xB5, 0x10, 0x94, 0x0C, 0xA4, 0x8E, 0xA4, 0x8E, 0x9C, 0x6E, 0x94, 0x0C, 0x8B, 0xEC, 0x94, 0x0C, 0x94, 0x2D, 0x8B, 0xCB, 0xAC, 0x8E, 0x83, 0x6A, 0x7B, 0x49, 0x7B, 0x49, 0x7B, 0x6A, 0x83, 0x8B, 0x83, 0x8B, 0x8B, 0xAB, 0x93, 0xEB, 0x9C, 0x2C, 0xA4, 0x6E, 0xAC, 0xAF, 0xAC, 0xCF, 0xAC, 0xEF, 0xB5, 0x10, 0xBD, 0x71, 0xC5, 0x92, 0xBD, 0x51, 0xB5, 0x30, 0xB4, 0xF0, 0xAC, 0xCF, 0xB5, 0x10, 0xB5, 0x10, 0xB5, 0x10, 0xB5, 0x10, 0xB5, 0x10, 0xAC, 0xCF, 0xAC, 0xAE, 0xA4, 0x8E, 0x9C, 0x6D, 0xA4, 0x8E, 0xB5, 0x0F, 0xBD, 0x10, 0xBD, 0x30, 0xBD, 0x72, 0xA4, 0xD2, 0x9C, 0x92, 0x6B, 0x2C, 0x39, 0xA7, 0x42, 0x28, 0x52, 0x69, 0x42, 0x08, 0x42, 0x07, 0x4A, 0x28, 0x62, 0xEC, 0x4A, 0x49, 0x8C, 0x51, 0x8C, 0x71, 0xA5, 0x14, 0xBD, 0xB7, 0xBD, 0xD7, 0x9C, 0xD3, 0x73, 0x8E, 0x4A, 0x28, 0x52, 0x69, 0x4A, 0x48, 0x42, 0x28, 0xB5, 0x73, 0xBD, 0x93, 0xBD, 0x93, 0xBD, 0xD3, 0xBD, 0xB3, 0xC5, 0xD4, 0xC5, 0xF4, 0xB5, 0x72, 0xBD, 0xD4, 0xC5, 0xD3, 0xBD, 0xB3, 0xBD, 0xD3, 0xAD, 0x31, 0x8C, 0x0C, 0xB5, 0x30, 0xBD, 0x50, 0xBD, 0x31, 0x7B, 0xAC, 0x83, 0xEE, 0x84, 0x0E, 0x9C, 0xB0, 0xC6, 0x17, 0xBD, 0xB7, 0xA5, 0x15, 0x84, 0x30, 0xA5, 0x13, 0xA5, 0x33, 0xAD, 0x53, 0xA5, 0x33, 0xA4, 0xF2, 0x7B, 0xCE, 0x52, 0x89, 0x4A, 0x69, 0x4A, 0x69, 0x39, 0xC7, 0x42, 0x08, 0x31, 0xA6, 0x39, 0xC6, 0x4A, 0x48, 0x8C, 0x30, 0x94, 0x71, 0x94, 0x51, 0xAC, 0xF3, 0xC5, 0xB5, 0x73, 0x2C, 0x73, 0x4D, 0x8B, 0xEF, 0x6A, 0xEB, 0xA4, 0xB1, 0x7B, 0x8D, 0x9C, 0x50, 0xCD, 0xF5, 0xE6, 0xB7, 0xDE, 0xB7, 0xD6, 0x76, 0xDE, 0x77, 0xCE, 0x35, 0xBD, 0xB3, 0xC5, 0xD4, 0xC5, 0xF5, 0xBD, 0xD4, 0xC5, 0xF5, 0xAD, 0x53, 0xA4, 0xF1, 0xB5, 0x32, 0xAC, 0xF1, 0x83, 0xAC, 0xA4, 0xD0, 0xBD, 0x52, 0xBD, 0x52, 0xC5, 0xB3, 0xC5, 0xB3, 0xBD, 0x93, 0xC5, 0x93, 0xC5, 0x93, 0xCD, 0xB4, 0xCD, 0xB3, 0xC5, 0x93, 0xCD, 0xB4, 0xBD, 0x73, 0xB5, 0x12, 0x73, 0x6D, 0x29, 0x04, 0x21, 0x05, 0x21, 0x04, 0x18, 0xC4, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x20, 0xE4, 0x21, 0x05, 0x18, 0xE4, 0x10, 0xA3, 0x18, 0xE4, 0x21, 0x05, 0x21, 0x26, 0x21, 0x05, 0x21, 0x05, 0x21, 0x26, 0x29, 0x46, 0x18, 0xE5, 0x18, 0xC4, 0x18, 0xE5, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x18, 0xE5, 0x21, 0x05, 0x18, 0xE5, 0x21, 0x05, 0x29, 0x46, 0x31, 0x87, 0x31, 0x87, 0x31, 0x87, 0x31, 0xA8, 0x31, 0xA7, 0x31, 0xA8, 0x42, 0x09, 0x42, 0x2A, 0x4A, 0x49, 0x6B, 0x2C, 0xA4, 0xD2, 0xA4, 0xD1, 0xAD, 0x12, 0xAC, 0xF1, 0xAC, 0xF2, 0xA4, 0xD1, 0xA4, 0xB0, 0xA4, 0xB0, 0x9C, 0x70, 0x94, 0x4F, 0x94, 0x4F, 0x9C, 0x70, 0x9C, 0x90, 0xA4, 0xB0, 0xA4, 0xD0, 0xA4, 0xD1, 0xAC, 0xF1, 0xAC, 0xF1, 0xAC, 0xF1, 0xAC, 0xF1, 0xAC, 0xF1, 0xAC, 0xD0, 0xA4, 0xB0, 0x9C, 0x90, 0x94, 0x6F, 0x9C, 0x90, 0x9C, 0x6F, 0x9C, 0x8F, 0x8C, 0x0E, 0x8B, 0xED, 0x83, 0xCD, 0x8C, 0x0E, 0x8B, 0xEE, 0x83, 0xAC, 0xA4, 0xD1, 0x73, 0xAD, 0x31, 0xA6, 0x5A, 0xCB, 0x5A, 0xCB, 0x42, 0x08, 0x5A, 0xCB, 0x6B, 0x0C, 0x52, 0x49, 0x39, 0xA6, 0x41, 0xC7, 0x4A, 0x07, 0x62, 0xAA, 0x4A, 0x08, 0x7B, 0x6C, 0x94, 0x30, 0x5A, 0xAA, 0xA5, 0xF3, 0x7C, 0x8C, 0x6C, 0x28, 0x6C, 0x48, 0x8D, 0x4D, 0x9D, 0x6D, 0x5B, 0xA4, 0x85, 0x09, 0x9D, 0xAD, 0x84, 0xAA, 0x7C, 0x68, 0x7C, 0xA8, 0x74, 0x87, 0x64, 0x04, 0x5C, 0x03, 0x74, 0xA7, 0x6C, 0x86, 0x7D, 0x05, 0x9D, 0xC9, 0xBE, 0x73, 0xDF, 0x3A, 0xD7, 0x3A, 0xC6, 0x97, 0xBE, 0x14, 0x94, 0xAF, 0xAD, 0x53, 0xB5, 0xD5, 0x8C, 0x70, 0x8C, 0x4F, 0x73, 0xAD, 0x7B, 0xEE, 0x8C, 0x4F, 0x83, 0xED, 0x73, 0x8C, 0x8C, 0x70, 0xC6, 0x16, 0xBD, 0xB5, 0xA4, 0xF1, 0x94, 0x6F, 0x8C, 0x4F, 0x7B, 0xCD, 0x84, 0x0E, 0x8C, 0x70, 0x94, 0xB1, 0x9C, 0xD2, 0x9C, 0xB1, 0xA4, 0xB0, 0xBD, 0x51, 0x9C, 0x4D, 0xB5, 0x11, 0xB5, 0x32, 0xBD, 0x93, 0xB5, 0x31, 0xB5, 0x31, 0xBD, 0x72, 0xB5, 0x31, 0xAC, 0xF0, 0xA4, 0xD0, 0x94, 0x0D, 0x94, 0x0D, 0x94, 0x2E, 0x8C, 0x0D, 0x83, 0xAC, 0x83, 0xAC, 0x83, 0xAC, 0x83, 0x8B, 0x8B, 0xEC, 0x8C, 0x0D, 0x8B, 0xEC, 0x8B, 0xEC, 0xB4, 0xEF, 0xB5, 0x10, 0xBD, 0x72, 0xB5, 0x11, 0xA4, 0xCF, 0x9C, 0x8F, 0x94, 0x2D, 0x7B, 0x8B, 0x8C, 0x0C, 0x8B, 0xCB, 0x8B, 0xEC, 0x94, 0x2D, 0x94, 0x2C, 0x94, 0x0C, 0x9C, 0x4D, 0xAC, 0xF0, 0xAC, 0xF0, 0xAC, 0xF0, 0xA4, 0xAE, 0xA4, 0x6D, 0xA4, 0xAE, 0xBD, 0x73, 0xBD, 0x95, 0x7B, 0x8E, 0x4A, 0x08, 0x29, 0x24, 0x4A, 0x49, 0x42, 0x07, 0x21, 0x03, 0x31, 0x85, 0x52, 0x69, 0x5A, 0xAA, 0x73, 0x8E, 0x8C, 0x51, 0x94, 0xB3, 0xAD, 0x76, 0xB5, 0xB7, 0xBD, 0xF8, 0xB5, 0x76, 0x94, 0x72, 0x63, 0x0C, 0x52, 0x8A, 0x7B, 0x8D, 0x83, 0xCD, 0x7B, 0x8B, 0x83, 0xAB, 0x8B, 0xEC, 0x9C, 0x4D, 0xA4, 0xAE, 0xAC, 0xCF, 0xA4, 0xCF, 0xA4, 0xCF, 0xB5, 0x10, 0xAC, 0xCF, 0xA4, 0xAF, 0xA4, 0xCE, 0xA4, 0xAE, 0xAC, 0xCF, 0xAC, 0xEF, 0xBD, 0x10, 0xB5, 0x10, 0x94, 0x2D, 0x83, 0xED, 0x83, 0xED, 0x94, 0x90, 0xCE, 0x38, 0xAD, 0x55, 0x9C, 0xD3, 0x84, 0x0F, 0x8C, 0x4F, 0xA4, 0xF2, 0xAD, 0x73, 0xA5, 0x12, 0xA4, 0xF2, 0xA4, 0xF2, 0x8C, 0x2F, 0x8C, 0x2F, 0x83, 0xCE, 0x63, 0x0B, 0x52, 0xAA, 0x39, 0xE7, 0x42, 0x07, 0x52, 0x69, 0x62, 0xCA, 0x73, 0x2C, 0x6B, 0x0B, 0x9C, 0x70, 0xBD, 0x54, 0x9C, 0x91, 0x41, 0xC7, 0x5A, 0x8A, 0x7B, 0x6D, 0x83, 0xAE, 0xAC, 0xF2, 0x94, 0x4F, 0x94, 0x4F, 0xDE, 0x77, 0xDE, 0xB7, 0xDE, 0xB7, 0xE6, 0xF8, 0xDE, 0xB8, 0xD6, 0x56, 0xCE, 0x36, 0xCE, 0x15, 0xBD, 0x94, 0xBD, 0xD5, 0xAD, 0x52, 0xAD, 0x32, 0xB5, 0x53, 0xB5, 0x53, 0x83, 0xCC, 0xA4, 0x8F, 0xB5, 0x11, 0xBD, 0x72, 0xBD, 0x93, 0xC5, 0xB3, 0xCD, 0xD4, 0xD5, 0xF5, 0xD5, 0xF5, 0xD5, 0xF4, 0xD5, 0xF4, 0xC5, 0x93, 0xC5, 0x73, 0xC5, 0x73, 0xAC, 0xF1, 0x73, 0x4C, 0x29, 0x45, 0x21, 0x25, 0x18, 0xE4, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x10, 0xA4, 0x18, 0xE5, 0x29, 0x46, 0x21, 0x26, 0x21, 0x25, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x18, 0xE5, 0x18, 0xE4, 0x18, 0xE5, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x18, 0xE5, 0x18, 0xE4, 0x18, 0xE5, 0x18, 0xE5, 0x21, 0x26, 0x29, 0x67, 0x31, 0x87, 0x31, 0xA8, 0x29, 0x87, 0x29, 0x87, 0x29, 0x67, 0x31, 0xA8, 0x42, 0x2A, 0x4A, 0x6B, 0x4A, 0x8B, 0x6B, 0x4C, 0x8C, 0x2F, 0x83, 0xED, 0x83, 0xED, 0x6B, 0x2B, 0x7B, 0x8C, 0x94, 0x4F, 0xA4, 0xB0, 0xC5, 0xB3, 0xCD, 0xD4, 0xB5, 0x11, 0xA4, 0xD0, 0xA4, 0xB0, 0xAC, 0xF1, 0xB5, 0x32, 0xBD, 0x73, 0xC5, 0x93, 0xC5, 0xB4, 0xC5, 0xB4, 0xBD, 0x52, 0xBD, 0x93, 0xB5, 0x32, 0xC5, 0xB4, 0xC5, 0xB4, 0xC5, 0xB4, 0xBD, 0x93, 0xBD, 0x73, 0xBD, 0x52, 0xBD, 0x73, 0xB5, 0x12, 0xAD, 0x12, 0xAD, 0x32, 0xA4, 0xB0, 0xA4, 0xD1, 0xAD, 0x53, 0x7B, 0x8D, 0x39, 0xC7, 0x39, 0xA6, 0x4A, 0x28, 0x42, 0x08, 0x39, 0xC7, 0x31, 0x65, 0x39, 0x86, 0x39, 0xC7, 0x41, 0xC7, 0x52, 0x28, 0x5A, 0x89, 0x49, 0xE7, 0x7B, 0x6D, 0x9C, 0x50, 0x62, 0xCB, 0x84, 0xEE, 0xB6, 0x73, 0x6C, 0x4A, 0x53, 0x85, 0x6C, 0x48, 0x85, 0x0B, 0x6C, 0x47, 0x95, 0x6C, 0x95, 0x4D, 0x8C, 0xEB, 0x74, 0x67, 0x6C, 0x65, 0x74, 0xC6, 0x64, 0x24, 0x7C, 0xE8, 0x6C, 0x67, 0x7C, 0xE8, 0x74, 0xC5, 0xB6, 0x4F, 0xBE, 0x54, 0xA5, 0x92, 0xA5, 0x92, 0x94, 0xCF, 0xA5, 0x10, 0x94, 0x6E, 0xBD, 0xD5, 0xBD, 0xF6, 0x8C, 0x70, 0x84, 0x2F, 0x7B, 0xCE, 0x84, 0x0F, 0x8C, 0x2F, 0x84, 0x0E, 0x7B, 0xEE, 0xA5, 0x33, 0xC6, 0x37, 0xCE, 0x37, 0xC6, 0x37, 0xA5, 0x33, 0x94, 0xB1, 0x8C, 0x70, 0x9C, 0xD2, 0x94, 0x90, 0x94, 0x91, 0xA5, 0x13, 0xB5, 0x95, 0xA4, 0xF1, 0xBD, 0x51, 0xA4, 0x8E, 0xC5, 0xB3, 0xBD, 0x93, 0xC5, 0xD4, 0xBD, 0x93, 0xBD, 0x93, 0xC5, 0xD4, 0xB5, 0x72, 0xBD, 0x93, 0xBD, 0xB3, 0xAD, 0x11, 0xB5, 0x32, 0xAD, 0x52, 0xAD, 0x31, 0xAD, 0x32, 0xAD, 0x32, 0xAD, 0x11, 0xA4, 0xD0, 0x9C, 0xCF, 0xAD, 0x11, 0xB5, 0x52, 0xBD, 0x72, 0xB5, 0x10, 0xAC, 0xCF, 0xCE, 0x14, 0xBD, 0x93, 0xB5, 0x52, 0xAD, 0x32, 0xAD, 0x32, 0x9C, 0xD1, 0xAD, 0x11, 0xA4, 0xB0, 0x9C, 0x8F, 0x9C, 0x8F, 0xA4, 0xD0, 0xAD, 0x11, 0xA4, 0xD0, 0xA4, 0xD0, 0xAD, 0x11, 0xAD, 0x11, 0xA4, 0xD0, 0x8B, 0xEC, 0x8B, 0xED, 0xC5, 0xD6, 0xB5, 0x34, 0x73, 0x4C, 0x4A, 0x28, 0x21, 0x04, 0x21, 0x04, 0x21, 0x24, 0x29, 0x44, 0x39, 0xC6, 0x4A, 0x69, 0x5A, 0xAB, 0x6B, 0x6D, 0x7B, 0xF0, 0x84, 0x31, 0x9C, 0xD3, 0xAD, 0x55, 0xAD, 0x76, 0xBD, 0xD8, 0xB5, 0x96, 0x83, 0xF0, 0x83, 0xEE, 0x9C, 0x90, 0xA4, 0x8F, 0x94, 0x2E, 0x9C, 0x6E, 0xA4, 0xAF, 0xAC, 0xCF, 0xB5, 0x0F, 0xB5, 0x10, 0xB5, 0x30, 0xBD, 0x50, 0xBD, 0x71, 0xB5, 0x30, 0xC5, 0x71, 0xC5, 0x71, 0xBD, 0x50, 0xBD, 0x50, 0xBD, 0x50, 0xBD, 0x50, 0xC5, 0x50, 0xC5, 0x71, 0xC5, 0x71, 0xC5, 0x71, 0xC5, 0x93, 0xCE, 0x58, 0xA5, 0x35, 0x94, 0xB2, 0x9C, 0xB1, 0x9C, 0x6F, 0xAC, 0xD0, 0xAC, 0xCF, 0xA4, 0xAF, 0xA4, 0xAF, 0xAC, 0xAF, 0xA4, 0x8E, 0xAC, 0xAF, 0xAC, 0xAF, 0xA4, 0xAF, 0x94, 0x4E, 0x39, 0xA6, 0x42, 0x28, 0x5A, 0xCA, 0x52, 0x69, 0x7B, 0x4D, 0x62, 0xCB, 0x83, 0xCE, 0x94, 0x30, 0x94, 0x50, 0x8C, 0x10, 0x39, 0x86, 0x7B, 0x6D, 0x5A, 0x69, 0x52, 0x28, 0x7B, 0x4C, 0x8B, 0xEF, 0xAC, 0xF2, 0xD6, 0x56, 0xD6, 0x56, 0xD6, 0x56, 0xD6, 0x56, 0xCE, 0x15, 0xCE, 0x15, 0xC5, 0xF5, 0xBD, 0xB4, 0xBD, 0xD4, 0xA5, 0x12, 0xBD, 0x94, 0xB5, 0x53, 0xBD, 0x73, 0x7B, 0x8B, 0x94, 0x4E, 0xA4, 0xB0, 0xCD, 0xD4, 0xCD, 0xF4, 0xCD, 0xD4, 0xCD, 0xF4, 0xD5, 0xF4, 0xD6, 0x15, 0xD6, 0x15, 0xDE, 0x35, 0xDE, 0x35, 0xCD, 0xB4, 0xD5, 0xF5, 0xBD, 0x93, 0x83, 0xAD, 0x39, 0xA6, 0x29, 0x25, 0x18, 0xE4, 0x10, 0xC3, 0x10, 0xC3, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x21, 0x05, 0x18, 0xE4, 0x21, 0x05, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xC4, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC3, 0x18, 0xE4, 0x29, 0x46, 0x21, 0x25, 0x21, 0x25, 0x21, 0x25, 0x21, 0x05, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xE4, 0x21, 0x05, 0x21, 0x05, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE5, 0x18, 0xE5, 0x18, 0xE5, 0x21, 0x46, 0x29, 0x67, 0x31, 0x87, 0x31, 0xA8, 0x31, 0xC8, 0x31, 0x87, 0x29, 0x67, 0x31, 0xC8, 0x42, 0x4A, 0x4A, 0x8B, 0x52, 0x8B, 0x6B, 0x6D, 0x94, 0x70, 0x94, 0x4F, 0x62, 0xEA, 0x8C, 0x4F, 0xBD, 0x53, 0xC5, 0x92, 0xD5, 0xF3, 0xE6, 0x96, 0xE6, 0x96, 0xE6, 0x96, 0xE6, 0x96, 0xE6, 0x96, 0xDE, 0x76, 0xDE, 0x55, 0xDE, 0x55, 0xDE, 0x55, 0xCD, 0xF4, 0xA4, 0xB0, 0x94, 0x4E, 0xB5, 0x52, 0xBD, 0x72, 0xCD, 0xD4, 0xDE, 0x56, 0xE6, 0x96, 0xDE, 0x56, 0xD6, 0x15, 0xDE, 0x76, 0xD6, 0x36, 0xAC, 0xF1, 0x94, 0x6F, 0xB5, 0x32, 0xA4, 0xB0, 0x9C, 0xB0, 0x83, 0xCE, 0x52, 0x69, 0x18, 0xE3, 0x31, 0x86, 0x39, 0xA7, 0x31, 0x86, 0x5A, 0xEB, 0x84, 0x10, 0x42, 0x08, 0x4A, 0x08, 0x62, 0xAA, 0x62, 0x8A, 0x49, 0xE7, 0x83, 0x8D, 0x83, 0xAD, 0x83, 0xAE, 0x8D, 0x4F, 0xBE, 0x95, 0xBE, 0x54, 0x6C, 0x09, 0x64, 0x07, 0x64, 0x07, 0x6C, 0x07, 0x64, 0x07, 0x84, 0xCB, 0x8D, 0x0B, 0x85, 0x08, 0x74, 0x85, 0x7C, 0xE6, 0x85, 0x47, 0x95, 0x89, 0x64, 0x25, 0x74, 0xA7, 0x74, 0x87, 0x95, 0x4C, 0x8C, 0xCD, 0x8C, 0xEE, 0x94, 0xEF, 0x8C, 0x6D, 0xAD, 0x30, 0x9C, 0xAF, 0xBD, 0xD5, 0xB5, 0x94, 0x8C, 0x71, 0x8C, 0x50, 0x84, 0x0F, 0x84, 0x30, 0x63, 0x2B, 0x73, 0xCD, 0x94, 0xB1, 0xA5, 0x54, 0xD6, 0x98, 0xCE, 0x37, 0xCE, 0x77, 0xAD, 0x53, 0xAD, 0x74, 0xB5, 0xB5, 0xBD, 0xD6, 0x9C, 0xF2, 0x94, 0xD2, 0xA5, 0x33, 0xAD, 0x53, 0xA4, 0xD0, 0xB5, 0x31, 0xA4, 0xAF, 0xC5, 0xD3, 0xBD, 0xB3, 0xBD, 0xB3, 0xC5, 0xB4, 0xBD, 0x93, 0xC5, 0xF4, 0xBD, 0x93, 0xBD, 0x72, 0xBD, 0xB3, 0xB5, 0x72, 0xC6, 0x15, 0xBD, 0xB3, 0xB5, 0x52, 0xB5, 0x32, 0xA4, 0xF1, 0xA4, 0xF1, 0xAD, 0x11, 0xAD, 0x52, 0xB5, 0x52, 0xAD, 0x31, 0xBD, 0x92, 0xB5, 0x10, 0xAC, 0xAF, 0xCD, 0xF4, 0xBD, 0xB4, 0xB5, 0x73, 0xBD, 0xD4, 0xB5, 0x73, 0xAD, 0x53, 0xBD, 0x94, 0xC5, 0xD4, 0xC5, 0xF5, 0xBD, 0x93, 0xBD, 0xB4, 0xC5, 0xF5, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0x52, 0xBD, 0x93, 0xBD, 0xB4, 0xB5, 0x72, 0xB5, 0x53, 0xCE, 0x17, 0xAD, 0x13, 0xAC, 0xF2, 0x9C, 0x4F, 0x41, 0xE7, 0x31, 0x85, 0x31, 0xA5, 0x42, 0x28, 0x39, 0xE7, 0x42, 0x08, 0x52, 0x8A, 0x6B, 0x2D, 0x73, 0xAF, 0x7C, 0x10, 0x9C, 0xF4, 0x9C, 0xF4, 0x84, 0x31, 0xC6, 0x19, 0xB5, 0x76, 0x83, 0xEF, 0x83, 0xEF, 0x7B, 0x8C, 0xBD, 0x94, 0x9C, 0x90, 0x94, 0x2F, 0x73, 0x6B, 0x62, 0xE9, 0x5A, 0xA8, 0x62, 0xC8, 0x62, 0xA8, 0x6B, 0x09, 0x83, 0xAB, 0x83, 0xCB, 0xB5, 0x30, 0x9C, 0x6E, 0x9C, 0x6D, 0xAC, 0xCE, 0xA4, 0x8D, 0xAC, 0xCE, 0xBD, 0x50, 0xBD, 0x50, 0xBD, 0x50, 0xBD, 0x50, 0xC5, 0xB4, 0xC6, 0x17, 0xAD, 0x55, 0x94, 0x92, 0xA4, 0xD1, 0xD6, 0x35, 0xEE, 0xD7, 0xDE, 0x35, 0xD6, 0x14, 0xD5, 0xF3, 0xCD, 0xB2, 0xBD, 0x51, 0xC5, 0x51, 0xBD, 0x30, 0xB5, 0x10, 0xAC, 0xAF, 0x83, 0xCC, 0x4A, 0x27, 0x52, 0x69, 0x4A, 0x08, 0x62, 0xAA, 0x6B, 0x0B, 0x4A, 0x08, 0x5A, 0xAA, 0x9C, 0x51, 0xCE, 0x17, 0x73, 0x6E, 0x39, 0x86, 0x52, 0x49, 0x52, 0x28, 0x94, 0x10, 0x94, 0x0F, 0xA4, 0xD2, 0x8B, 0xEE, 0xB5, 0x53, 0xAD, 0x11, 0xA4, 0xF1, 0xA4, 0xF1, 0xAD, 0x11, 0xAD, 0x11, 0x9C, 0xB0, 0x83, 0xED, 0x83, 0xCD, 0xAD, 0x12, 0xA4, 0xB0, 0x8C, 0x0D, 0x7B, 0x8C, 0x83, 0xAC, 0x83, 0xED, 0x9C, 0x6F, 0xAD, 0x11, 0xB5, 0x32, 0xBD, 0x93, 0xBD, 0x93, 0xBD, 0x73, 0xB5, 0x32, 0xBD, 0x72, 0xC5, 0x93, 0xC5, 0xB4, 0xCD, 0xF5, 0xBD, 0x93, 0x8C, 0x0E, 0x4A, 0x07, 0x29, 0x45, 0x21, 0x04, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC3, 0x10, 0xA3, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xC4, 0x21, 0x25, 0x21, 0x05, 0x21, 0x05, 0x18, 0xC4, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xE4, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x21, 0x25, 0x21, 0x25, 0x21, 0x05, 0x21, 0x25, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x21, 0x05, 0x21, 0x25, 0x21, 0x26, 0x21, 0x46, 0x29, 0x67, 0x21, 0x26, 0x29, 0x67, 0x31, 0xC8, 0x31, 0xC8, 0x31, 0x87, 0x29, 0x67, 0x31, 0xA8, 0x42, 0x0A, 0x4A, 0x4A, 0x4A, 0x6A, 0x73, 0xAE, 0x94, 0x90, 0x6B, 0x4C, 0xA4, 0xF1, 0xC5, 0x93, 0xDE, 0x55, 0xDE, 0x14, 0xE6, 0x96, 0xEE, 0xB6, 0xEE, 0x96, 0xEE, 0xB6, 0xEE, 0xB7, 0xEE, 0x96, 0xE6, 0x75, 0xE6, 0x75, 0xE6, 0x75, 0xE6, 0x96, 0xEE, 0xD7, 0xEE, 0xD8, 0xC5, 0xD4, 0xCD, 0xD4, 0x9C, 0xB0, 0xDE, 0x76, 0xD6, 0x14, 0xD6, 0x14, 0xCD, 0xF4, 0xCD, 0xD3, 0xDE, 0x76, 0xA4, 0xB0, 0xB5, 0x53, 0xD6, 0x77, 0xC5, 0xD5, 0xBD, 0x94, 0xA4, 0xF1, 0x7B, 0xAD, 0x39, 0xC7, 0x18, 0xC3, 0x18, 0xC3, 0x21, 0x04, 0x8C, 0x51, 0xCE, 0x39, 0x84, 0x11, 0x52, 0x49, 0x6A, 0xEB, 0x7B, 0x4C, 0x52, 0x08, 0x52, 0x28, 0x62, 0xAA, 0x94, 0x50, 0x53, 0x86, 0x84, 0xED, 0xA5, 0xD2, 0xAE, 0x12, 0x6C, 0x28, 0x64, 0x06, 0x63, 0xE6, 0x53, 0x65, 0x6C, 0x47, 0x7C, 0xA8, 0x85, 0x08, 0x7C, 0xE6, 0x95, 0x66, 0xA5, 0xE8, 0x74, 0x84, 0x6C, 0x85, 0x6C, 0x85, 0x85, 0x08, 0x84, 0xC9, 0x84, 0xAA, 0x84, 0xCB, 0x8C, 0x8D, 0x9C, 0xAE, 0xAC, 0xEF, 0x8C, 0x2D, 0xB5, 0xB4, 0xB5, 0xD5, 0xA5, 0x54, 0x9D, 0x13, 0xA5, 0x13, 0x94, 0xB1, 0x84, 0x2F, 0x94, 0x90, 0xA5, 0x13, 0xA5, 0x53, 0xBD, 0xD5, 0xB5, 0x94, 0xBD, 0xD5, 0xA5, 0x12, 0xAD, 0x54, 0xBD, 0xD5, 0xBD, 0xF6, 0xA5, 0x33, 0xAD, 0x54, 0xAD, 0x74, 0xB5, 0x74, 0xA4, 0xD0, 0xB5, 0x10, 0xA4, 0xAF, 0xC5, 0xB3, 0xC5, 0xB4, 0xC5, 0xD4, 0xC5, 0xD4, 0xC5, 0xD4, 0xC5, 0xF4, 0xBD, 0x93, 0xBD, 0x93, 0xBD, 0x93, 0xB5, 0x72, 0xC5, 0xF4, 0xC5, 0xD4, 0xC5, 0xB4, 0xBD, 0x93, 0xB5, 0x52, 0xB5, 0x72, 0xB5, 0x93, 0xBD, 0x93, 0xBD, 0x73, 0xAD, 0x11, 0xBD, 0x71, 0xBD, 0x30, 0xB5, 0x10, 0xCE, 0x14, 0xC5, 0xD4, 0xBD, 0x93, 0xBD, 0x94, 0xAD, 0x32, 0xBD, 0xD5, 0xC6, 0x15, 0xCE, 0x15, 0xD6, 0x56, 0xCE, 0x15, 0xCE, 0x15, 0xCE, 0x35, 0xC5, 0xF5, 0xCE, 0x15, 0xBD, 0xD4, 0xBD, 0xB4, 0xBD, 0xB4, 0xC5, 0xD4, 0xCE, 0x36, 0xBD, 0x95, 0xAD, 0x13, 0xAC, 0xF1, 0xAD, 0x11, 0x6A, 0xEA, 0x4A, 0x48, 0x42, 0x07, 0x39, 0xE7, 0x39, 0xA6, 0x4A, 0x48, 0x5A, 0xAA, 0x62, 0xEC, 0x63, 0x0C, 0x7B, 0xD0, 0x8C, 0x31, 0x84, 0x31, 0xAD, 0x55, 0xC6, 0x18, 0xA4, 0xF3, 0x8C, 0x51, 0xA4, 0xF3, 0x4A, 0x28, 0x8C, 0x50, 0xC5, 0xF7, 0xA4, 0xF2, 0xB5, 0x53, 0xB5, 0x73, 0xAD, 0x32, 0x9C, 0xB0, 0x84, 0x0E, 0x7B, 0xAD, 0x5A, 0xC9, 0x6B, 0x2A, 0x8C, 0x2E, 0x6B, 0x2A, 0x52, 0x48, 0x52, 0x68, 0x52, 0x68, 0x62, 0xC8, 0x8B, 0xEC, 0xB5, 0x31, 0xB5, 0x52, 0xA4, 0xB0, 0xBD, 0xB5, 0xBD, 0xD7, 0xAD, 0x35, 0x94, 0x71, 0xBD, 0x73, 0xD6, 0x35, 0xDE, 0x96, 0xD6, 0x55, 0xD6, 0x14, 0xCD, 0xF4, 0xC5, 0x92, 0xD6, 0x14, 0xC5, 0x92, 0xBD, 0x51, 0xBD, 0x72, 0xBD, 0x72, 0xC5, 0xB3, 0xAD, 0x12, 0x4A, 0x07, 0x41, 0xE7, 0x6A, 0xEB, 0x73, 0x0B, 0x5A, 0x69, 0x62, 0xCB, 0x9C, 0x71, 0xC5, 0xD6, 0xC5, 0xB6, 0x5A, 0x8A, 0x73, 0x2C, 0x7B, 0x8D, 0x73, 0x2C, 0x9C, 0x70, 0x94, 0x0F, 0x9C, 0x50, 0xBD, 0x94, 0xBD, 0x94, 0xB5, 0x53, 0xBD, 0x94, 0xBD, 0x94, 0xAD, 0x32, 0xBD, 0xB4, 0xC5, 0xB5, 0xBD, 0x94, 0xC5, 0xF5, 0xCD, 0xF5, 0xCD, 0xF5, 0xC5, 0xD5, 0xC5, 0xB5, 0xBD, 0x94, 0xB5, 0x73, 0xB5, 0x32, 0xAD, 0x11, 0xA4, 0xD1, 0xA4, 0xD1, 0xAC, 0xF2, 0xA4, 0xF2, 0xA4, 0xD1, 0x9C, 0x90, 0x94, 0x6F, 0x8C, 0x0E, 0x83, 0xCD, 0x83, 0xAD, 0x52, 0x48, 0x29, 0x45, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x18, 0xE4, 0x18, 0xC3, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xE4, 0x21, 0x25, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x21, 0x05, 0x21, 0x25, 0x18, 0xE5, 0x21, 0x05, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xC4, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xE5, 0x21, 0x05, 0x21, 0x26, 0x21, 0x46, 0x29, 0x46, 0x29, 0x46, 0x21, 0x26, 0x21, 0x26, 0x29, 0x67, 0x31, 0xA8, 0x31, 0xA8, 0x29, 0x87, 0x29, 0x67, 0x39, 0xC8, 0x42, 0x29, 0x42, 0x2A, 0x4A, 0x8B, 0x84, 0x0F, 0x7B, 0xCE, 0xA4, 0xF1, 0xC5, 0xD4, 0xD6, 0x14, 0xDE, 0x14, 0xE6, 0x75, 0xEE, 0xB6, 0xEE, 0xB6, 0xEE, 0x96, 0xEE, 0xB6, 0xE6, 0x96, 0xDE, 0x54, 0xD6, 0x13, 0xD5, 0xF3, 0xCD, 0xD3, 0xDE, 0x35, 0xDE, 0x76, 0xBD, 0x93, 0xE6, 0xB8, 0xDE, 0x97, 0xDE, 0x76, 0xD6, 0x35, 0xD6, 0x14, 0xD6, 0x34, 0xD5, 0xF4, 0xDE, 0x76, 0xA4, 0xD0, 0xBD, 0x94, 0xBD, 0x93, 0xBD, 0x93, 0xC5, 0xB4, 0xB5, 0x73, 0x9C, 0xD1, 0x7B, 0xCE, 0x29, 0x66, 0x10, 0xA3, 0x18, 0xE4, 0x39, 0xC7, 0xB5, 0x97, 0xBD, 0xB7, 0x73, 0x4D, 0x6A, 0xCB, 0x83, 0xAE, 0x52, 0x08, 0x7B, 0x6D, 0x6A, 0xEA, 0x8C, 0x0F, 0x4B, 0x44, 0x53, 0xA6, 0x7C, 0xCC, 0x95, 0x6F, 0x6C, 0x48, 0x64, 0x06, 0x64, 0x07, 0x53, 0x45, 0x64, 0x27, 0x74, 0xA7, 0x6C, 0x65, 0x74, 0x84, 0x8D, 0x44, 0x9D, 0xC7, 0x5B, 0xE2, 0x4B, 0x61, 0x53, 0xC2, 0x7C, 0xE7, 0x74, 0x86, 0x74, 0x66, 0x7C, 0x88, 0x7C, 0x69, 0x9C, 0xCD, 0xB5, 0x50, 0x9C, 0x8E, 0x9C, 0xB0, 0xA4, 0xF1, 0xA5, 0x12, 0xAD, 0x73, 0xBD, 0xB5, 0xBD, 0x94, 0xA4, 0xD1, 0x9C, 0xB0, 0xA5, 0x12, 0xAD, 0x53, 0xAD, 0x53, 0xAD, 0x33, 0xB5, 0xB4, 0x8C, 0x4F, 0xBD, 0xB5, 0xC6, 0x37, 0xBD, 0xF6, 0xB5, 0x94, 0xBD, 0xD5, 0xB5, 0x94, 0xAD, 0x53, 0xAC, 0xF0, 0xB5, 0x10, 0xA4, 0xAF, 0xC5, 0xD3, 0xC5, 0xD4, 0xC5, 0xF5, 0xC5, 0xD4, 0xC5, 0xF4, 0xCE, 0x15, 0xC5, 0xD4, 0xC5, 0xD4, 0xC5, 0xD4, 0xB5, 0x52, 0xCE, 0x15, 0xCE, 0x15, 0xC5, 0xF5, 0xC5, 0xD4, 0xBD, 0xB4, 0xBD, 0x93, 0xBD, 0x93, 0xC5, 0xD4, 0xC5, 0xD4, 0xBD, 0xB3, 0xB5, 0x51, 0xBD, 0x31, 0xAD, 0x10, 0xCD, 0xF4, 0xCE, 0x15, 0xCE, 0x15, 0xC5, 0xF5, 0xB5, 0x73, 0xCE, 0x36, 0xC5, 0xF5, 0xB5, 0x53, 0xC5, 0xF5, 0xCE, 0x15, 0xCE, 0x36, 0xCE, 0x35, 0xAD, 0x12, 0xB5, 0x73, 0xCE, 0x16, 0xC6, 0x15, 0xBD, 0xD4, 0xC5, 0xF5, 0xC5, 0xF5, 0xAD, 0x12, 0xAD, 0x12, 0xAC, 0xF0, 0xAD, 0x10, 0xA4, 0xB1, 0x52, 0x89, 0x52, 0x69, 0x41, 0xE7, 0x42, 0x07, 0x42, 0x28, 0x4A, 0x69, 0x52, 0x8A, 0x5A, 0xEB, 0x5A, 0xEB, 0x6B, 0x6D, 0x9C, 0xB3, 0xAD, 0x76, 0x9C, 0xF4, 0x73, 0x8E, 0xA4, 0xF3, 0xBD, 0x96, 0x5A, 0xAB, 0x39, 0xA7, 0x83, 0xEF, 0xB5, 0x54, 0xCD, 0xF5, 0xD6, 0x76, 0xCE, 0x36, 0xC5, 0xF5, 0xCE, 0x15, 0xD6, 0x56, 0x9C, 0xB0, 0xA4, 0xF1, 0xAD, 0x32, 0xA5, 0x11, 0x9C, 0xB1, 0x94, 0x6F, 0x84, 0x0E, 0x7B, 0xAD, 0x8C, 0x0E, 0x8C, 0x4F, 0x94, 0x4F, 0x8C, 0x2F, 0xC6, 0x38, 0xB5, 0x96, 0xA5, 0x35, 0x9C, 0xB2, 0xBD, 0x53, 0xBD, 0x93, 0xBD, 0x93, 0xB5, 0x52, 0xBD, 0x72, 0xCD, 0xF4, 0xB5, 0x72, 0xBD, 0x72, 0xB5, 0x31, 0xB5, 0x31, 0xB5, 0x51, 0xC5, 0xB3, 0xC5, 0xD4, 0xBD, 0x73, 0x5A, 0x89, 0x39, 0x86, 0x6B, 0x2C, 0x52, 0x48, 0x39, 0xC6, 0x4A, 0x28, 0x6A, 0xEA, 0x9C, 0x50, 0xCD, 0xF7, 0x94, 0x30, 0x62, 0x8A, 0x9C, 0x50, 0x73, 0x2C, 0x73, 0x2C, 0x94, 0x2F, 0xAD, 0x12, 0xBD, 0x74, 0x94, 0x50, 0x73, 0x4B, 0xB5, 0x53, 0xA4, 0xF1, 0xB5, 0x53, 0x9C, 0x90, 0x83, 0xCD, 0x83, 0xCD, 0x94, 0x4F, 0x94, 0x4F, 0x8C, 0x0E, 0x94, 0x4F, 0x9C, 0x6F, 0x9C, 0x4F, 0xA4, 0xD1, 0xAD, 0x12, 0xAD, 0x11, 0xBD, 0x73, 0xA4, 0xD1, 0xAD, 0x12, 0xBD, 0x73, 0xBD, 0x73, 0xB5, 0x53, 0xBD, 0x94, 0xBD, 0x74, 0xBD, 0x94, 0xA4, 0x90, 0x4A, 0x08, 0x29, 0x45, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC4, 0x10, 0xA3, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC4, 0x18, 0xE4, 0x21, 0x25, 0x18, 0xE4, 0x10, 0xA4, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0xA4, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x21, 0x05, 0x18, 0xE4, 0x18, 0xE5, 0x18, 0xE4, 0x10, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA4, 0x10, 0xC4, 0x18, 0xE4, 0x19, 0x05, 0x21, 0x25, 0x21, 0x26, 0x21, 0x26, 0x21, 0x46, 0x29, 0x46, 0x21, 0x26, 0x21, 0x26, 0x29, 0x46, 0x29, 0x87, 0x31, 0x88, 0x29, 0x67, 0x31, 0x87, 0x39, 0xE9, 0x42, 0x2A, 0x4A, 0x4A, 0x5A, 0xEC, 0x7B, 0xAE, 0xA4, 0xF2, 0xC5, 0xD4, 0xDE, 0x35, 0xD5, 0xD3, 0xE6, 0x75, 0xE6, 0x96, 0xEE, 0x96, 0xEE, 0x96, 0xEE, 0xB6, 0xE6, 0x75, 0xE6, 0x75, 0xD6, 0x14, 0xD5, 0xF4, 0xD5, 0xF4, 0xDE, 0x35, 0xCD, 0xF4, 0xC5, 0xD4, 0xDE, 0x97, 0xDE, 0x56, 0xCD, 0xD4, 0xD6, 0x35, 0xCE, 0x14, 0xCD, 0xF4, 0xDE, 0x76, 0xD6, 0x35, 0xA4, 0xF1, 0xA4, 0xD0, 0x9C, 0x8F, 0xC5, 0xF4, 0xC5, 0xF4, 0xB5, 0x73, 0xAD, 0x12, 0xC5, 0xF5, 0x73, 0x8D, 0x18, 0xE4, 0x18, 0xA3, 0x41, 0xE8, 0xAD, 0x35, 0xCE, 0x59, 0xAD, 0x35, 0x41, 0xC7, 0x52, 0x48, 0x39, 0x85, 0x6A, 0xCB, 0x8B, 0xAE, 0x94, 0x0F, 0x7C, 0xEA, 0x53, 0xE6, 0x64, 0x48, 0x74, 0xAA, 0x64, 0x26, 0x5B, 0xC5, 0x74, 0x69, 0x5B, 0x87, 0x42, 0xE4, 0x6C, 0x27, 0x6C, 0x26, 0x6C, 0x45, 0x6C, 0x63, 0x6C, 0x24, 0x7C, 0x6A, 0x74, 0x28, 0x6C, 0x26, 0x7C, 0xA8, 0x6C, 0x06, 0x5B, 0xA4, 0x63, 0xE6, 0x8C, 0xAA, 0x9C, 0xED, 0xAC, 0xCE, 0xB5, 0x10, 0xAD, 0x10, 0xB5, 0x51, 0xBD, 0x51, 0xAC, 0xF0, 0xBD, 0x51, 0xBD, 0x52, 0xC5, 0x92, 0xBD, 0x51, 0xB5, 0x31, 0xAD, 0x10, 0xAC, 0xF0, 0xAD, 0x10, 0xAC, 0xF0, 0xA4, 0xAF, 0xA4, 0xD0, 0xAD, 0x11, 0xAD, 0x31, 0xAD, 0x32, 0xAD, 0x11, 0xA4, 0xD0, 0x9C, 0x6E, 0xB5, 0x31, 0xC5, 0x71, 0xB4, 0xF0, 0xB5, 0x30, 0xB5, 0x10, 0xB5, 0x31, 0xBD, 0x72, 0xBD, 0x72, 0xB5, 0x52, 0xAC, 0xF0, 0xAC, 0xF0, 0xAC, 0xF0, 0xAC, 0xF0, 0xB5, 0x52, 0xBD, 0x72, 0xB5, 0x52, 0xB5, 0x32, 0xBD, 0x72, 0xC5, 0xB4, 0xC5, 0xD4, 0xCE, 0x15, 0xCE, 0x15, 0xC5, 0xD4, 0xB5, 0x31, 0xC5, 0x71, 0xA4, 0xAF, 0xD6, 0x76, 0xCE, 0x15, 0xCE, 0x15, 0xCE, 0x36, 0xC6, 0x15, 0xCE, 0x56, 0xCE, 0x36, 0xC6, 0x15, 0xC6, 0x15, 0xCE, 0x35, 0xCE, 0x15, 0xCE, 0x15, 0xC5, 0xD5, 0xCE, 0x56, 0xCE, 0x16, 0xCE, 0x35, 0xC6, 0x15, 0xCE, 0x15, 0xC5, 0xF5, 0xAD, 0x33, 0xB5, 0x74, 0xA4, 0xB0, 0xBD, 0x52, 0xD6, 0x57, 0x63, 0x0B, 0x62, 0xEB, 0x39, 0xC6, 0x39, 0xE7, 0x42, 0x07, 0x42, 0x28, 0x4A, 0x48, 0x52, 0x8A, 0x6B, 0x4D, 0x8C, 0x51, 0x8C, 0x72, 0x94, 0x92, 0x84, 0x10, 0x84, 0x31, 0x8C, 0x51, 0x94, 0x71, 0x73, 0x6E, 0x5A, 0xAB, 0x4A, 0x48, 0xA4, 0xF3, 0xCD, 0xF6, 0xD6, 0x56, 0xCE, 0x14, 0xCE, 0x15, 0xCE, 0x15, 0xD6, 0x56, 0xBD, 0x92, 0xCE, 0x35, 0xCE, 0x35, 0xCE, 0x15, 0xCE, 0x15, 0xCE, 0x36, 0xC5, 0xD4, 0xBD, 0x94, 0xBD, 0xB4, 0xBD, 0xB4, 0xB5, 0x94, 0xAD, 0x53, 0xCE, 0x59, 0xAD, 0x55, 0x9C, 0xF4, 0xA4, 0xF2, 0xB5, 0x52, 0xD6, 0x36, 0xC5, 0xB4, 0xB5, 0x52, 0xB5, 0x72, 0xBD, 0xB3, 0xBD, 0xB3, 0xB5, 0x72, 0xBD, 0x72, 0xB5, 0x72, 0xB5, 0x31, 0xAD, 0x11, 0xBD, 0x92, 0x83, 0xCD, 0x73, 0x4C, 0x6B, 0x0B, 0x42, 0x07, 0x41, 0xE7, 0x42, 0x07, 0x41, 0xE7, 0x5A, 0xAA, 0x7B, 0x6C, 0x83, 0xCE, 0x73, 0x4C, 0x52, 0x49, 0x49, 0xE7, 0x6B, 0x0C, 0x6A, 0xEB, 0x83, 0xAE, 0x94, 0x50, 0xB5, 0x33, 0x94, 0x2F, 0x83, 0xCE, 0x5A, 0x89, 0x6B, 0x2B, 0x83, 0xAD, 0x62, 0xEA, 0x4A, 0x48, 0x52, 0x49, 0x52, 0x68, 0x5A, 0xA9, 0x6B, 0x2B, 0x7B, 0x8C, 0x9C, 0x90, 0x9C, 0x4F, 0xAD, 0x12, 0xAD, 0x12, 0xAC, 0xF1, 0xB5, 0x53, 0xAD, 0x11, 0xBD, 0x73, 0xBD, 0x73, 0xBD, 0x93, 0xB5, 0x52, 0xBD, 0x52, 0xBD, 0x73, 0xCD, 0xD4, 0xA4, 0x90, 0x41, 0xC7, 0x29, 0x45, 0x21, 0x25, 0x21, 0x25, 0x21, 0x04, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x10, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xE4, 0x21, 0x25, 0x18, 0xE4, 0x10, 0xC3, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x10, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC3, 0x10, 0xC4, 0x10, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC3, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xA3, 0x10, 0xA4, 0x10, 0xC4, 0x10, 0xC4, 0x19, 0x05, 0x21, 0x05, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x46, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x46, 0x29, 0x87, 0x31, 0x88, 0x29, 0x67, 0x31, 0xA8, 0x39, 0xE9, 0x42, 0x4A, 0x42, 0x4A, 0x63, 0x0C, 0xA4, 0xD1, 0xC5, 0xB3, 0xE6, 0x96, 0xDE, 0x14, 0xDE, 0x55, 0xE6, 0x96, 0xEE, 0x96, 0xEE, 0x96, 0xEE, 0x96, 0xE6, 0x75, 0xE6, 0x75, 0xCD, 0xF3, 0xCD, 0xB3, 0xCD, 0xD3, 0xDE, 0x55, 0xCD, 0xF4, 0xD6, 0x36, 0xE6, 0xB7, 0xDE, 0x77, 0xDE, 0x56, 0xD6, 0x35, 0xCD, 0xF4, 0xCD, 0xD4, 0xE6, 0x96, 0xC5, 0x93, 0xB5, 0x12, 0xBD, 0x73, 0xCD, 0xF5, 0xC5, 0xD4, 0xC5, 0xF4, 0xBD, 0x93, 0xAD, 0x53, 0xCE, 0x36, 0xBD, 0xD5, 0x31, 0x86, 0x18, 0xA3, 0x5A, 0xAB, 0xA4, 0xF3, 0xAD, 0x55, 0xBD, 0xD7, 0x4A, 0x69, 0x4A, 0x28, 0x31, 0x65, 0x52, 0x28, 0x8B, 0xAD, 0xB5, 0x12, 0x5B, 0xE6, 0x64, 0x47, 0x7C, 0xEA, 0x74, 0xA9, 0x5B, 0xE5, 0x6C, 0x28, 0x84, 0xCB, 0x6B, 0xEA, 0x3A, 0x64, 0x4A, 0xE5, 0x63, 0xC7, 0x7C, 0x89, 0x6C, 0x06, 0x8C, 0xED, 0xBE, 0x55, 0x95, 0x0E, 0x84, 0xAA, 0x95, 0x4C, 0x8C, 0xEB, 0x6C, 0x49, 0x64, 0x08, 0x6C, 0x08, 0x9C, 0xED, 0x9C, 0x6D, 0x7B, 0x49, 0x9C, 0x6E, 0x8C, 0x0C, 0x7B, 0x8B, 0x83, 0xCC, 0x7B, 0x8B, 0x83, 0xCB, 0x8B, 0xEC, 0x83, 0xCC, 0x8B, 0xEC, 0xAC, 0xCF, 0xAC, 0xF0, 0xA4, 0x8F, 0xA4, 0xAF, 0xAC, 0xCF, 0xB5, 0x10, 0xB5, 0x30, 0xC5, 0x92, 0xC5, 0x92, 0xCD, 0x92, 0xD5, 0xF3, 0xCD, 0xB2, 0xBD, 0x71, 0xBD, 0x50, 0xAC, 0xCF, 0xB4, 0xEF, 0xC5, 0x71, 0xC5, 0x92, 0xCD, 0x92, 0xC5, 0x72, 0xC5, 0x71, 0xC5, 0x92, 0xC5, 0x92, 0xC5, 0x92, 0xC5, 0x92, 0xC5, 0x71, 0xBD, 0x51, 0xBD, 0x31, 0xB4, 0xF0, 0xB5, 0x10, 0xB4, 0xF0, 0xA4, 0xCF, 0xAC, 0xCF, 0xB5, 0x31, 0xBD, 0x51, 0xBD, 0x50, 0xC5, 0x71, 0xB4, 0xEF, 0xB5, 0x10, 0xCE, 0x35, 0xC5, 0xB3, 0xB5, 0x52, 0xB5, 0x72, 0xC5, 0xF4, 0xCE, 0x35, 0xD6, 0x56, 0xCE, 0x36, 0xCE, 0x36, 0xD6, 0x56, 0xD6, 0x56, 0xC5, 0xD4, 0xBD, 0x93, 0xCE, 0x15, 0xCE, 0x15, 0xCE, 0x56, 0xD6, 0x97, 0xDE, 0x97, 0xC5, 0xD5, 0xB5, 0x54, 0x9C, 0x4F, 0xC5, 0x93, 0xDE, 0x98, 0x83, 0xEF, 0x73, 0x8D, 0x4A, 0x28, 0x39, 0xC6, 0x52, 0x89, 0x4A, 0x48, 0x4A, 0x48, 0x52, 0x69, 0x52, 0xAA, 0x5A, 0xEB, 0x7B, 0xCF, 0x8C, 0x72, 0xA4, 0xF4, 0xAD, 0x55, 0xBD, 0xB7, 0xB5, 0x97, 0xA4, 0xF3, 0x8C, 0x30, 0x9C, 0xD2, 0xBD, 0xB5, 0xCE, 0x15, 0xD6, 0x76, 0xD6, 0x35, 0xD6, 0x35, 0xDE, 0x56, 0xCD, 0xF4, 0xD6, 0x56, 0xD6, 0x36, 0xD6, 0x35, 0xDE, 0x76, 0xD6, 0x76, 0xD6, 0x76, 0xC5, 0xD4, 0xD6, 0x56, 0xCE, 0x16, 0xC5, 0xF5, 0xCE, 0x15, 0xC6, 0x16, 0xCE, 0x59, 0xB5, 0xB7, 0x9C, 0xB3, 0xAD, 0x12, 0xB5, 0x31, 0xB5, 0x72, 0xB5, 0x32, 0xBD, 0x73, 0xBD, 0x93, 0xCE, 0x15, 0xC5, 0xD4, 0xC5, 0xD4, 0xC5, 0xD4, 0xC5, 0xD4, 0xC5, 0xD3, 0xC5, 0xD4, 0xC5, 0xD3, 0xCD, 0xF4, 0xD6, 0x15, 0xD6, 0x15, 0x94, 0x2E, 0x39, 0x85, 0x39, 0xC7, 0x42, 0x07, 0x73, 0x4C, 0x8C, 0x0F, 0x94, 0x30, 0x9C, 0x71, 0x9C, 0x92, 0x62, 0xAA, 0x39, 0xA6, 0x7B, 0x8D, 0x73, 0x2C, 0x8B, 0xEE, 0x8B, 0xEF, 0xB5, 0x34, 0x94, 0x71, 0x62, 0xCA, 0x5A, 0xCA, 0x52, 0x89, 0x52, 0xAA, 0x73, 0x6C, 0x94, 0x70, 0xA4, 0xD1, 0xAD, 0x32, 0xA4, 0xF1, 0xA4, 0xF1, 0xB5, 0x72, 0xC5, 0xB4, 0xD6, 0x15, 0xBD, 0x93, 0xAD, 0x12, 0xB5, 0x53, 0xAD, 0x12, 0xC5, 0xB4, 0xC5, 0xD4, 0xCD, 0xF4, 0xC5, 0xD3, 0xCD, 0xD4, 0xC5, 0xB3, 0xCD, 0xD4, 0x9C, 0x4F, 0x41, 0xC7, 0x29, 0x25, 0x18, 0xE4, 0x21, 0x25, 0x18, 0xE4, 0x10, 0xA3, 0x18, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xE4, 0x21, 0x25, 0x18, 0xC3, 0x18, 0xE4, 0x21, 0x05, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x05, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0xC3, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA4, 0x18, 0xC4, 0x21, 0x05, 0x21, 0x05, 0x21, 0x26, 0x21, 0x26, 0x21, 0x05, 0x21, 0x26, 0x29, 0x46, 0x21, 0x26, 0x29, 0x46, 0x29, 0x67, 0x29, 0x67, 0x31, 0xA8, 0x31, 0x87, 0x29, 0x87, 0x31, 0xC8, 0x39, 0xE9, 0x42, 0x2A, 0x4A, 0x4A, 0x8C, 0x0F, 0xAC, 0xF1, 0xBD, 0x52, 0xDE, 0x56, 0xEE, 0xD7, 0xF6, 0xF7, 0xF6, 0xF7, 0xF6, 0xF7, 0xEE, 0xD7, 0xEE, 0xD6, 0xEE, 0xD6, 0xE6, 0x96, 0xDE, 0x35, 0xDE, 0x75, 0xE6, 0x96, 0xCD, 0xD4, 0xDE, 0x76, 0xE6, 0xB7, 0xE6, 0x97, 0xDE, 0x56, 0xD6, 0x15, 0xCD, 0xD4, 0xC5, 0xB3, 0xDE, 0x76, 0xC5, 0x93, 0x9C, 0x8F, 0xCE, 0x36, 0xD6, 0x56, 0xCE, 0x15, 0xCE, 0x15, 0xBD, 0xB4, 0xAD, 0x32, 0xCE, 0x36, 0xD6, 0x77, 0x5A, 0xAA, 0x18, 0xE4, 0x29, 0x24, 0x6B, 0x2B, 0x94, 0x91, 0x62, 0xEA, 0x42, 0x07, 0x5A, 0xA9, 0x4A, 0x07, 0x52, 0x28, 0x6A, 0xCA, 0x8B, 0xCD, 0x63, 0xEA, 0x43, 0x44, 0x6C, 0x86, 0x64, 0x45, 0x6C, 0x47, 0x74, 0x69, 0x8D, 0x0D, 0x74, 0x2A, 0x6B, 0xEA, 0x42, 0x86, 0x42, 0x84, 0x53, 0x46, 0x64, 0x08, 0x6B, 0xEA, 0x84, 0x6D, 0x8C, 0xCD, 0x84, 0xAB, 0x9D, 0x2D, 0x94, 0xCD, 0xB5, 0xD1, 0xAD, 0xD1, 0xA5, 0x70, 0xBE, 0x13, 0xA4, 0xEF, 0x9C, 0xAF, 0x9C, 0xB0, 0x7B, 0xCC, 0xA4, 0xD1, 0xAD, 0x32, 0x8C, 0x2E, 0x9C, 0x8F, 0x9C, 0x90, 0x9C, 0x90, 0x83, 0xED, 0x94, 0x8F, 0x8C, 0x4E, 0x83, 0xED, 0x8C, 0x2E, 0x8C, 0x0E, 0xBD, 0x93, 0xBD, 0x51, 0x9C, 0x4D, 0xA4, 0x6D, 0xAC, 0xCE, 0xBD, 0x51, 0xB5, 0x31, 0xAC, 0xF0, 0x9C, 0x4D, 0x83, 0xAB, 0x73, 0x29, 0x94, 0x2D, 0x9C, 0x8E, 0xA4, 0x8F, 0xAC, 0xD0, 0xB5, 0x31, 0xA4, 0xAE, 0xB5, 0x31, 0xBD, 0x51, 0xBD, 0x51, 0xA4, 0x8E, 0x9C, 0x4D, 0xA4, 0xAF, 0xAC, 0xAF, 0xC5, 0x92, 0xC5, 0x92, 0xB4, 0xEF, 0xBD, 0x50, 0xB5, 0x10, 0xAC, 0xCF, 0xAC, 0xAF, 0xAC, 0xAE, 0xB4, 0xEF, 0xA4, 0x8E, 0xAC, 0xAF, 0xA4, 0x8E, 0x9C, 0x4E, 0xA4, 0xAF, 0xAC, 0xCF, 0xAC, 0xCF, 0xA4, 0x8E, 0xA4, 0x8E, 0xA4, 0xAF, 0xA4, 0xCF, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0xAF, 0xAC, 0xD0, 0xAC, 0xF0, 0xAC, 0xF1, 0xAD, 0x11, 0xA4, 0xD0, 0x9C, 0x6F, 0x73, 0x4B, 0x9C, 0x6F, 0xC5, 0xD4, 0xCE, 0x15, 0x9C, 0x90, 0x83, 0xEE, 0x52, 0x89, 0x39, 0xE7, 0x42, 0x28, 0x52, 0x69, 0x42, 0x28, 0x42, 0x28, 0x52, 0x8A, 0x63, 0x0C, 0x7B, 0xCF, 0x94, 0x92, 0x9C, 0xF4, 0xA5, 0x35, 0xAD, 0x76, 0xAD, 0x55, 0xAD, 0x34, 0x7B, 0xAE, 0x9C, 0xB1, 0xDE, 0xB8, 0xD6, 0x77, 0xD6, 0x77, 0xCE, 0x15, 0xD6, 0x56, 0xD6, 0x55, 0xCE, 0x14, 0xCE, 0x15, 0xCE, 0x15, 0xBD, 0x93, 0xCE, 0x35, 0xCE, 0x15, 0xCE, 0x35, 0xB5, 0x72, 0xD6, 0x56, 0xCE, 0x36, 0xC5, 0xD4, 0xCE, 0x36, 0xCE, 0x37, 0xD6, 0xBB, 0xCE, 0x59, 0x9C, 0xD3, 0xB5, 0x52, 0xCD, 0xF4, 0xC5, 0xB3, 0xC5, 0xB3, 0xCD, 0xF4, 0xB5, 0x31, 0xCE, 0x15, 0xD6, 0x35, 0xCE, 0x14, 0xCD, 0xF4, 0xCD, 0xF4, 0xD6, 0x14, 0xD6, 0x14, 0xD6, 0x34, 0xDE, 0x55, 0xD5, 0xF3, 0xCD, 0xF3, 0xDE, 0x55, 0xB5, 0x12, 0x4A, 0x27, 0x42, 0x07, 0x4A, 0x28, 0x83, 0xCE, 0x83, 0xEF, 0x8B, 0xEF, 0xC5, 0x95, 0x94, 0x2F, 0x49, 0xE8, 0x41, 0xA7, 0x73, 0x4D, 0x73, 0x2C, 0x83, 0xCE, 0x9C, 0x91, 0xAC, 0xF3, 0x83, 0xCE, 0x7B, 0xAD, 0x6B, 0x2C, 0x73, 0x6D, 0x94, 0x70, 0xA4, 0xD1, 0xBD, 0x93, 0xBD, 0x93, 0xAD, 0x32, 0xB5, 0x32, 0xAD, 0x31, 0xB5, 0x52, 0xC5, 0xB3, 0xC5, 0xB3, 0xAC, 0xF1, 0xBD, 0x73, 0xAD, 0x12, 0xBD, 0x93, 0xC5, 0xB3, 0xCE, 0x14, 0xC5, 0x93, 0xC5, 0x93, 0xCD, 0xD4, 0xC5, 0xD4, 0x9C, 0x6F, 0x41, 0xC7, 0x21, 0x04, 0x18, 0xE4, 0x29, 0x25, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x08, 0x83, 0x10, 0x83, 0x08, 0x83, 0x19, 0x04, 0x21, 0x05, 0x18, 0xC4, 0x21, 0x05, 0x21, 0x05, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x21, 0x05, 0x18, 0xE4, 0x21, 0x25, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x18, 0xC4, 0x10, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x10, 0xA4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA4, 0x18, 0xE4, 0x21, 0x25, 0x21, 0x05, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x46, 0x29, 0x46, 0x29, 0x47, 0x21, 0x46, 0x29, 0x67, 0x29, 0x67, 0x29, 0x87, 0x29, 0x87, 0x29, 0x87, 0x29, 0x87, 0x39, 0xC8, 0x42, 0x2A, 0x4A, 0x4A, 0x52, 0xAA, 0xAD, 0x32, 0xBD, 0x93, 0xAC, 0xD0, 0xAC, 0xD0, 0xAC, 0xD0, 0xAC, 0xF0, 0xB4, 0xF0, 0xB5, 0x10, 0xB5, 0x10, 0xB5, 0x10, 0xB4, 0xF0, 0xB5, 0x31, 0xB5, 0x31, 0xAD, 0x31, 0xBD, 0x73, 0xDE, 0x56, 0xDE, 0x76, 0xDE, 0x76, 0xDE, 0x76, 0xD6, 0x35, 0xD6, 0x15, 0xCD, 0xF4, 0xDE, 0x76, 0xC5, 0x93, 0x9C, 0x6F, 0xBD, 0x93, 0xBD, 0xB4, 0xBD, 0x93, 0xC5, 0xD4, 0xB5, 0x73, 0xA4, 0xD1, 0xCE, 0x16, 0xCE, 0x16, 0x63, 0x2B, 0x29, 0x65, 0x10, 0xA3, 0x31, 0x65, 0x39, 0xE6, 0x29, 0x24, 0x39, 0x86, 0x52, 0x48, 0x49, 0xE7, 0x41, 0xE7, 0x52, 0x07, 0x83, 0x6D, 0xAD, 0xF4, 0x63, 0xEB, 0x43, 0x42, 0x4B, 0xA2, 0x3A, 0xC2, 0x4B, 0x06, 0x84, 0xAC, 0x7C, 0x6C, 0xAD, 0x91, 0x6B, 0x89, 0x3A, 0x44, 0x5B, 0x87, 0x4B, 0x05, 0x8C, 0xAE, 0xAD, 0xB2, 0x94, 0xEE, 0x9D, 0x0F, 0x9C, 0xCE, 0x9C, 0xCE, 0xCE, 0x54, 0xBD, 0xF3, 0xAD, 0x50, 0x94, 0x6D, 0x84, 0x0D, 0xB5, 0x73, 0xBD, 0xD5, 0xB5, 0xB4, 0xB5, 0x94, 0xCE, 0x56, 0xB5, 0x72, 0x94, 0x8F, 0xAD, 0x53, 0xCE, 0x57, 0xBD, 0xD5, 0xCE, 0x57, 0xCE, 0x57, 0xBD, 0xF5, 0xCE, 0x36, 0xD6, 0x98, 0xD6, 0x56, 0xDE, 0x96, 0xBD, 0x72, 0xAC, 0xEF, 0xC5, 0xB3, 0xCD, 0xF5, 0xCE, 0x15, 0xC5, 0xF4, 0xBD, 0x92, 0xAD, 0x11, 0x9C, 0xAF, 0x9C, 0xAF, 0x8C, 0x2E, 0xA4, 0xF0, 0xA4, 0xF1, 0xAD, 0x11, 0xA4, 0xF0, 0xA5, 0x11, 0xA4, 0xF0, 0x9C, 0x8F, 0xA4, 0xF0, 0xAD, 0x31, 0xC5, 0xD4, 0xC5, 0xF4, 0xB5, 0x51, 0xCD, 0xF3, 0xA4, 0x8E, 0xB5, 0x10, 0x8B, 0xEC, 0x9C, 0x4E, 0x94, 0x4D, 0x9C, 0x6E, 0xB5, 0x10, 0xA4, 0x8E, 0x9C, 0x4E, 0xA4, 0x8E, 0xA4, 0x8E, 0x8B, 0xCC, 0x8B, 0xEC, 0x8B, 0xEC, 0x8B, 0xEC, 0x8B, 0xEC, 0x94, 0x0C, 0x9C, 0x6E, 0xA4, 0x8E, 0xAC, 0xCF, 0xAC, 0xAF, 0xAC, 0xCF, 0xB5, 0x10, 0xB5, 0x30, 0xAC, 0xD0, 0xB5, 0x10, 0xBD, 0x51, 0xB5, 0x10, 0xA4, 0x8E, 0xA4, 0xAE, 0xA4, 0x8F, 0x94, 0x6E, 0x94, 0x4F, 0x5A, 0x89, 0x52, 0x89, 0x42, 0x07, 0x42, 0x07, 0x39, 0xA6, 0x4A, 0x28, 0x52, 0x8A, 0x5A, 0xEC, 0x73, 0x8E, 0x84, 0x10, 0x73, 0x8E, 0x8C, 0x51, 0x84, 0x30, 0x8C, 0x51, 0x94, 0x72, 0x5A, 0xAB, 0x73, 0x4C, 0xC5, 0xB5, 0xCD, 0xF6, 0x8C, 0x2F, 0x8C, 0x2E, 0xBD, 0xB4, 0xAD, 0x31, 0xB5, 0x72, 0xAD, 0x31, 0xC5, 0xF4, 0xB5, 0x52, 0xD6, 0x56, 0xCE, 0x35, 0xBD, 0x72, 0x9C, 0x8F, 0xAD, 0x31, 0xCE, 0x35, 0xCE, 0x15, 0xDE, 0x77, 0x9C, 0x91, 0x94, 0x72, 0x94, 0xB3, 0x9C, 0xD2, 0xB5, 0x52, 0xBD, 0x52, 0xAC, 0xF0, 0xC5, 0xB3, 0xCE, 0x14, 0xC5, 0xB3, 0xCD, 0xF4, 0xD6, 0x14, 0xD6, 0x14, 0xCD, 0xF4, 0xCD, 0xD3, 0xDE, 0x35, 0xDE, 0x55, 0xDE, 0x75, 0xDE, 0x75, 0xCD, 0xB2, 0xD6, 0x13, 0xDE, 0x34, 0xDE, 0x35, 0xC5, 0xD4, 0x94, 0x6F, 0x62, 0xEA, 0x4A, 0x28, 0x7B, 0x6D, 0x7B, 0x8E, 0xB5, 0x54, 0xA4, 0xB1, 0x6A, 0xCB, 0x39, 0x65, 0x62, 0xCB, 0x5A, 0x69, 0x83, 0xAE, 0x83, 0xAE, 0xCD, 0xF7, 0x9C, 0x91, 0x94, 0x50, 0x8C, 0x0F, 0x94, 0x70, 0xAC, 0xF1, 0xBD, 0x94, 0xBD, 0x73, 0xAC, 0xD0, 0xBD, 0x52, 0xBD, 0x52, 0xB5, 0x31, 0xA4, 0xAF, 0xBD, 0x72, 0xC5, 0xD4, 0xAD, 0x11, 0xC5, 0x94, 0xB5, 0x32, 0xBD, 0x73, 0xC5, 0x93, 0xCD, 0xD3, 0xC5, 0x92, 0xCD, 0xD4, 0xC5, 0x72, 0xCD, 0xD3, 0xA4, 0x6F, 0x49, 0xC7, 0x20, 0xE4, 0x21, 0x04, 0x21, 0x25, 0x21, 0x04, 0x18, 0xC4, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0x83, 0x10, 0xA3, 0x10, 0x83, 0x08, 0x83, 0x10, 0x83, 0x10, 0x83, 0x10, 0x83, 0x10, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x08, 0x83, 0x08, 0x83, 0x10, 0xC3, 0x21, 0x05, 0x21, 0x05, 0x18, 0xC3, 0x21, 0x05, 0x21, 0x25, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x21, 0x05, 0x18, 0xE4, 0x21, 0x05, 0x10, 0xC4, 0x10, 0xC4, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x10, 0xA4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xE4, 0x19, 0x05, 0x21, 0x05, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x46, 0x29, 0x46, 0x29, 0x46, 0x29, 0x67, 0x29, 0x46, 0x29, 0x67, 0x29, 0x67, 0x29, 0x67, 0x29, 0x46, 0x29, 0x67, 0x29, 0x87, 0x3A, 0x09, 0x42, 0x29, 0x42, 0x09, 0x63, 0x2C, 0xB5, 0x53, 0xAC, 0xF1, 0xBD, 0x94, 0xA4, 0xD0, 0xA4, 0xD0, 0xA4, 0xD0, 0xAC, 0xD1, 0xAC, 0xF1, 0xAD, 0x11, 0xAD, 0x11, 0xB5, 0x12, 0xB5, 0x53, 0xB5, 0x32, 0xAD, 0x12, 0xAC, 0xF1, 0xAD, 0x11, 0xAC, 0xF1, 0xAC, 0xF1, 0xAC, 0xF1, 0xAD, 0x32, 0xAD, 0x31, 0xB5, 0x52, 0xAD, 0x11, 0xAC, 0xF1, 0xA4, 0xB0, 0x9C, 0x90, 0x9C, 0x90, 0x9C, 0x90, 0xA4, 0xD0, 0x9C, 0x90, 0x94, 0x90, 0x9C, 0x70, 0x94, 0x6F, 0x52, 0x89, 0x20, 0xC3, 0x21, 0x04, 0x31, 0x85, 0x31, 0x45, 0x39, 0x85, 0x42, 0x07, 0x41, 0xC6, 0x39, 0xA6, 0x52, 0x48, 0x7B, 0x4C, 0x9D, 0x52, 0xAD, 0xF4, 0x6C, 0x2C, 0x43, 0x03, 0x3A, 0xA2, 0x3A, 0xA4, 0x74, 0x4A, 0x53, 0x27, 0x8C, 0xAD, 0x84, 0x4C, 0x52, 0xE6, 0x53, 0x06, 0x7C, 0x2B, 0x9D, 0x30, 0x84, 0x2C, 0x84, 0x6C, 0xAD, 0x51, 0x9C, 0xAE, 0xA4, 0xEF, 0xD6, 0x76, 0xC6, 0x14, 0xA4, 0xF0, 0x9C, 0xCF, 0xA5, 0x11, 0xCE, 0x16, 0xC5, 0xF5, 0xBD, 0xB5, 0xBD, 0xD4, 0xCE, 0x36, 0xBD, 0xD4, 0x9C, 0xD0, 0xA4, 0xF1, 0xB5, 0x94, 0xC5, 0xF6, 0x9C, 0xD1, 0xD6, 0x98, 0xC6, 0x36, 0xD6, 0x77, 0xD6, 0x56, 0xBD, 0x93, 0xBD, 0xB3, 0xC5, 0xB3, 0xB5, 0x10, 0xD6, 0x76, 0xDE, 0x97, 0xDE, 0x97, 0xDE, 0xB7, 0xDE, 0x96, 0xD6, 0x76, 0xCE, 0x15, 0xAD, 0x32, 0x94, 0x6F, 0x9C, 0x90, 0x84, 0x0E, 0xA4, 0xF1, 0xB5, 0x73, 0x9C, 0xD0, 0xAD, 0x11, 0xBD, 0xB4, 0x9C, 0xB0, 0xA4, 0xF1, 0xCE, 0x15, 0xCE, 0x56, 0xBD, 0xB3, 0xC5, 0xD3, 0xA4, 0x8E, 0xB5, 0x10, 0x83, 0xAB, 0x8C, 0x4E, 0x9C, 0xB0, 0x94, 0x4E, 0xA4, 0xD0, 0xB5, 0x31, 0xB5, 0x52, 0xAD, 0x31, 0xA4, 0xD0, 0x7B, 0x8C, 0x7B, 0x8C, 0x6B, 0x4B, 0x73, 0x6C, 0x73, 0x4B, 0x9C, 0xB0, 0xBD, 0x94, 0xBD, 0x73, 0x9C, 0x6E, 0x94, 0x2E, 0xAD, 0x11, 0x9C, 0x8E, 0x8B, 0xEC, 0xB4, 0xEF, 0xB4, 0xEF, 0xAD, 0x10, 0xC5, 0x92, 0xB5, 0x10, 0xB5, 0x30, 0xCD, 0xF4, 0xC5, 0xD3, 0xB5, 0x52, 0x62, 0xA9, 0x52, 0x69, 0x42, 0x07, 0x42, 0x07, 0x42, 0x07, 0x4A, 0x48, 0x4A, 0x49, 0x52, 0xAA, 0x63, 0x0C, 0x6B, 0x4D, 0x7B, 0xF0, 0x94, 0x92, 0xA5, 0x14, 0xA5, 0x35, 0x8C, 0x51, 0x6B, 0x4D, 0x83, 0xEF, 0xA4, 0xD2, 0xB5, 0x34, 0x7B, 0x8E, 0x41, 0xC7, 0x94, 0x6F, 0xAC, 0xCF, 0xA4, 0xAE, 0xA4, 0x6E, 0xA4, 0x8E, 0x9C, 0x6E, 0xA4, 0x8E, 0xA4, 0x8E, 0xA4, 0x8E, 0x9C, 0x6E, 0xA4, 0x8F, 0xA4, 0xAF, 0xB5, 0x10, 0xBD, 0x52, 0xB5, 0x54, 0x9C, 0xB3, 0x83, 0xF0, 0xAD, 0x12, 0xBD, 0x72, 0xB4, 0xF0, 0xA4, 0xAF, 0xAC, 0xF0, 0xA4, 0x8E, 0xB5, 0x10, 0xB4, 0xD0, 0xAC, 0xCF, 0xA4, 0x8E, 0x94, 0x2D, 0xA4, 0x6E, 0xBD, 0x51, 0xCD, 0xB2, 0xCD, 0xF3, 0xCD, 0xD2, 0xB5, 0x0F, 0xBD, 0x50, 0xDE, 0x34, 0xCD, 0xB2, 0xBD, 0x71, 0xB5, 0x10, 0x8C, 0x0E, 0x5A, 0xAA, 0x83, 0xAE, 0x94, 0x30, 0x6A, 0xEB, 0x5A, 0x8A, 0x4A, 0x08, 0x52, 0x49, 0x39, 0x86, 0x6B, 0x0B, 0x5A, 0x69, 0x73, 0x6D, 0xCE, 0x17, 0x83, 0x8D, 0x8B, 0xEF, 0xBD, 0x95, 0xA4, 0xF1, 0xBD, 0x73, 0xD5, 0xF4, 0xC5, 0x92, 0xBD, 0x51, 0xCD, 0xD3, 0xC5, 0x72, 0xAD, 0x11, 0x7B, 0x8B, 0x7B, 0x8C, 0xC5, 0xB4, 0xAD, 0x11, 0xC5, 0xB4, 0xAD, 0x12, 0xB5, 0x52, 0xBD, 0x72, 0xC5, 0xB3, 0xBD, 0x92, 0xBD, 0x72, 0xBD, 0x31, 0xC5, 0x72, 0x9C, 0x6F, 0x62, 0xA9, 0x39, 0xA7, 0x29, 0x46, 0x21, 0x05, 0x21, 0x05, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x10, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x08, 0x83, 0x10, 0xA3, 0x10, 0xC3, 0x19, 0x05, 0x18, 0xE4, 0x18, 0xC4, 0x21, 0x25, 0x19, 0x05, 0x18, 0xE4, 0x19, 0x04, 0x18, 0xE4, 0x21, 0x05, 0x18, 0xE4, 0x19, 0x05, 0x10, 0xA3, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC3, 0x18, 0xC4, 0x10, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x21, 0x05, 0x21, 0x26, 0x21, 0x26, 0x21, 0x46, 0x21, 0x46, 0x29, 0x46, 0x29, 0x67, 0x29, 0x46, 0x29, 0x67, 0x29, 0x67, 0x29, 0x67, 0x21, 0x26, 0x29, 0x46, 0x29, 0x87, 0x39, 0xC8, 0x42, 0x09, 0x3A, 0x09, 0x39, 0xE8, 0x8C, 0x30, 0xBD, 0xB4, 0xC5, 0xF5, 0x94, 0x70, 0x8C, 0x0E, 0x9C, 0xB0, 0x8C, 0x2E, 0xAD, 0x12, 0xA4, 0xD1, 0xC5, 0xF5, 0xBD, 0xD5, 0xBD, 0xB5, 0xB5, 0x54, 0xAD, 0x33, 0xA4, 0xF2, 0xAD, 0x12, 0xB5, 0x73, 0xAD, 0x12, 0x9C, 0xB0, 0x94, 0x70, 0x94, 0x70, 0x94, 0x4F, 0x8C, 0x0E, 0x83, 0xEE, 0x94, 0x2F, 0x94, 0x6F, 0x9C, 0x90, 0x9C, 0x90, 0x9C, 0x90, 0xA4, 0xF1, 0xA4, 0xD1, 0x9C, 0x6F, 0xA4, 0xF1, 0x73, 0x8C, 0x20, 0xE4, 0x18, 0xA3, 0x31, 0x65, 0x31, 0x65, 0x39, 0x85, 0x39, 0xA6, 0x4A, 0x07, 0x39, 0xA6, 0x4A, 0x07, 0x8B, 0xCE, 0x7C, 0x8D, 0x63, 0xCA, 0x84, 0xAE, 0x5B, 0x88, 0x43, 0x04, 0x53, 0x66, 0x8D, 0x0D, 0x6B, 0xE9, 0x52, 0xC6, 0x4A, 0x65, 0x4A, 0x85, 0x94, 0xEE, 0xAD, 0xB1, 0x8C, 0xAE, 0x73, 0xEB, 0xAD, 0x71, 0xB5, 0x92, 0x9C, 0xCE, 0xA4, 0xEF, 0xCE, 0x55, 0xCE, 0x14, 0xAD, 0x31, 0xA4, 0xF0, 0xBD, 0xB4, 0xC5, 0xF5, 0xB5, 0x94, 0xB5, 0x73, 0xC6, 0x15, 0xD6, 0xB7, 0xD6, 0x77, 0xC6, 0x15, 0xBD, 0xD4, 0xB5, 0x94, 0xAD, 0x53, 0x6B, 0x4C, 0x9C, 0xD1, 0xBD, 0xB4, 0xC5, 0xF5, 0xCE, 0x15, 0xD6, 0x76, 0xD6, 0x76, 0xBD, 0x72, 0xB5, 0x51, 0xD6, 0x56, 0xCE, 0x14, 0xCE, 0x14, 0xD6, 0x55, 0xCE, 0x14, 0xCE, 0x35, 0xD6, 0x76, 0xCE, 0x35, 0xBD, 0xB4, 0xBD, 0xB4, 0xAD, 0x53, 0xB5, 0x94, 0xCE, 0x36, 0xAD, 0x52, 0xAD, 0x11, 0x94, 0x6F, 0xA4, 0xD0, 0xB5, 0x72, 0xCE, 0x35, 0xCE, 0x35, 0xCE, 0x14, 0xCD, 0xF4, 0xAC, 0xEF, 0xB4, 0xEF, 0x8C, 0x0D, 0x9C, 0xB0, 0xAD, 0x12, 0x8C, 0x0D, 0x9C, 0x6F, 0xB5, 0x52, 0xC5, 0xD4, 0xC5, 0xD4, 0xB5, 0x93, 0x9C, 0xB1, 0x84, 0x0F, 0x6B, 0x6C, 0x5A, 0xEA, 0x6B, 0x6C, 0xB5, 0x94, 0x8C, 0x0E, 0xAC, 0xF1, 0x9C, 0x8F, 0xBD, 0xB3, 0xCE, 0x15, 0x9C, 0x8F, 0x83, 0xAB, 0xB5, 0x10, 0xB5, 0x0F, 0xC5, 0xB2, 0xCE, 0x15, 0xD6, 0x35, 0xB5, 0x51, 0xCE, 0x14, 0xC5, 0xD4, 0xBD, 0xB3, 0xBD, 0x73, 0x83, 0xCD, 0x4A, 0x68, 0x4A, 0x48, 0x42, 0x07, 0x4A, 0x48, 0x4A, 0x48, 0x4A, 0x69, 0x5A, 0xCA, 0x63, 0x2D, 0x7B, 0xCF, 0x84, 0x10, 0x94, 0x92, 0x8C, 0x71, 0x8C, 0x51, 0xAD, 0x55, 0x9C, 0xB2, 0x83, 0xCE, 0x9C, 0x91, 0x9C, 0x91, 0x42, 0x08, 0x7B, 0x8D, 0xB5, 0x52, 0x94, 0x2D, 0x8B, 0xEC, 0x83, 0xAB, 0x8B, 0xCC, 0x94, 0x2C, 0x93, 0xEC, 0x94, 0x0C, 0x9C, 0x4E, 0xA4, 0x8E, 0xAC, 0xAE, 0xBD, 0x30, 0xC5, 0x73, 0xC5, 0xF7, 0xA5, 0x14, 0x8C, 0x51, 0xAC, 0xF2, 0xB5, 0x10, 0xBD, 0x31, 0xBD, 0x31, 0xB5, 0x31, 0xBD, 0x31, 0xBD, 0x50, 0xBD, 0x51, 0xBD, 0x31, 0xBD, 0x50, 0xC5, 0x51, 0xBD, 0x30, 0xB5, 0x10, 0xB4, 0xEF, 0xB4, 0xCE, 0xAC, 0x8E, 0x9C, 0x2C, 0x9C, 0x4D, 0xB5, 0x0F, 0xBD, 0x10, 0xAC, 0xAE, 0xB5, 0x10, 0x9C, 0x6F, 0x5A, 0xA9, 0x7B, 0xAE, 0x8B, 0xEF, 0x41, 0xE7, 0x29, 0x45, 0x4A, 0x08, 0x5A, 0x69, 0x4A, 0x08, 0x83, 0xCF, 0x7B, 0x8D, 0x4A, 0x08, 0x9C, 0x91, 0x7B, 0x8D, 0x73, 0x2C, 0x9C, 0x90, 0xA4, 0xD0, 0xCD, 0xD4, 0xDE, 0x15, 0xD6, 0x14, 0xCD, 0x92, 0xC5, 0x92, 0xBD, 0x72, 0xBD, 0x72, 0x9C, 0x6F, 0xA4, 0xB1, 0xC5, 0xD4, 0x9C, 0x8F, 0xC5, 0xB4, 0xAC, 0xF1, 0xAD, 0x11, 0xAC, 0xF0, 0xAC, 0xF0, 0xB5, 0x11, 0xB5, 0x31, 0xB5, 0x10, 0xB5, 0x31, 0xAC, 0xAF, 0x9C, 0x4E, 0x6B, 0x0B, 0x31, 0x66, 0x21, 0x25, 0x21, 0x25, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x19, 0x05, 0x18, 0xE4, 0x18, 0xC4, 0x21, 0x25, 0x18, 0xE4, 0x18, 0xE4, 0x10, 0xC3, 0x18, 0xE4, 0x18, 0xE4, 0x10, 0xC4, 0x18, 0xE4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xE4, 0x10, 0xC4, 0x18, 0xE4, 0x19, 0x05, 0x19, 0x05, 0x18, 0xE4, 0x19, 0x05, 0x18, 0xE5, 0x21, 0x05, 0x21, 0x46, 0x21, 0x46, 0x29, 0x46, 0x21, 0x46, 0x21, 0x46, 0x29, 0x46, 0x29, 0x67, 0x29, 0x67, 0x29, 0x67, 0x29, 0x67, 0x29, 0x46, 0x29, 0x46, 0x29, 0x67, 0x31, 0xC8, 0x3A, 0x09, 0x39, 0xE9, 0x31, 0xC8, 0x39, 0xC8, 0x94, 0x71, 0xCE, 0x16, 0x94, 0x90, 0x94, 0x4F, 0xA4, 0xD1, 0xA4, 0xD0, 0xB5, 0x53, 0xAD, 0x53, 0xCE, 0x77, 0xC6, 0x37, 0xC5, 0xF6, 0xC6, 0x17, 0xBD, 0xF6, 0xAD, 0x53, 0x9C, 0xB1, 0xAD, 0x33, 0xA5, 0x12, 0x8C, 0x50, 0x8C, 0x50, 0x9C, 0x91, 0xA4, 0xD1, 0x9C, 0xB1, 0x94, 0x70, 0x9C, 0xD2, 0xA4, 0xD2, 0xA5, 0x12, 0xB5, 0x74, 0xAD, 0x53, 0xA4, 0xF1, 0xA4, 0xD1, 0x8C, 0x2E, 0xA4, 0xF1, 0xAD, 0x12, 0x29, 0x44, 0x21, 0x04, 0x18, 0xC3, 0x29, 0x44, 0x39, 0x85, 0x41, 0xE7, 0x52, 0x48, 0x5A, 0x69, 0x4A, 0x07, 0x8B, 0xCE, 0x63, 0xCA, 0x6C, 0x0A, 0x5B, 0x89, 0x4B, 0x26, 0x5B, 0xC7, 0x5B, 0xC8, 0x6B, 0xE8, 0x5B, 0x67, 0x73, 0xEA, 0x4A, 0xA6, 0x6B, 0x68, 0x84, 0x4B, 0x7C, 0x0A, 0x7C, 0x0B, 0x84, 0x6D, 0x8C, 0xAE, 0x8C, 0x6D, 0xAD, 0x72, 0xB5, 0xB3, 0xC6, 0x34, 0xCE, 0x55, 0xCE, 0x35, 0xB5, 0x72, 0xBD, 0xB3, 0xBD, 0xD4, 0xA5, 0x12, 0xB5, 0x73, 0xC6, 0x35, 0xDE, 0xB7, 0xD6, 0x97, 0xCE, 0x56, 0xCE, 0x36, 0xC5, 0xF5, 0xB5, 0x74, 0x9C, 0xB1, 0xAD, 0x74, 0xB5, 0x94, 0xC5, 0xF5, 0xC5, 0xF4, 0xCE, 0x55, 0xD6, 0x55, 0xB5, 0x10, 0xB5, 0x51, 0xC5, 0xD3, 0xCD, 0xF4, 0xA4, 0xAF, 0xB5, 0x72, 0xCE, 0x35, 0xD6, 0x76, 0xB5, 0x52, 0x83, 0xEE, 0x9C, 0xD1, 0xBD, 0xD5, 0xD6, 0x57, 0xAD, 0x53, 0xB5, 0x53, 0xCE, 0x36, 0xBD, 0xD4, 0xAD, 0x53, 0xB5, 0x93, 0xCE, 0x36, 0xD6, 0x76, 0xCE, 0x56, 0xCD, 0xF4, 0xC5, 0xB3, 0xB4, 0xEF, 0xB4, 0xEF, 0x8C, 0x0D, 0x94, 0x6F, 0xA4, 0xF1, 0x8C, 0x0D, 0x9C, 0x8F, 0xB5, 0x52, 0xC5, 0xD4, 0xBD, 0xB4, 0xBD, 0xB4, 0xA4, 0xF2, 0x8C, 0x2F, 0x83, 0xEF, 0x73, 0xCD, 0x84, 0x2F, 0xBD, 0xB5, 0x9C, 0x90, 0x73, 0x4B, 0x7B, 0x8C, 0xB5, 0x73, 0xBD, 0x94, 0x9C, 0x90, 0x94, 0x2D, 0xBD, 0x31, 0xB5, 0x10, 0xCD, 0xF4, 0xB5, 0x72, 0xCE, 0x14, 0xBD, 0x92, 0xBD, 0x93, 0xBD, 0x93, 0xB5, 0x73, 0xB5, 0x73, 0x94, 0x6F, 0x4A, 0x68, 0x4A, 0x69, 0x39, 0xC6, 0x31, 0xA5, 0x39, 0xE7, 0x4A, 0x48, 0x5A, 0xCB, 0x63, 0x2C, 0x6B, 0x4D, 0x73, 0x8E, 0x83, 0xF0, 0x8C, 0x51, 0xAD, 0x75, 0xAD, 0x75, 0x94, 0x71, 0xA4, 0xB2, 0x9C, 0x91, 0x9C, 0x91, 0x5A, 0x8A, 0x62, 0xEB, 0xB5, 0x73, 0xAD, 0x11, 0x9C, 0xAF, 0x94, 0x6F, 0x7B, 0xAC, 0x83, 0xCC, 0x9C, 0x8F, 0x94, 0x0D, 0x94, 0x2D, 0xA4, 0xCF, 0x9C, 0x6D, 0xB4, 0xF0, 0xBD, 0x93, 0xBD, 0xD6, 0xAD, 0x35, 0x94, 0x71, 0x8B, 0xEE, 0x8B, 0xEC, 0x83, 0xAB, 0x7B, 0x6B, 0x83, 0xAC, 0x94, 0x2D, 0xA4, 0x6E, 0xAC, 0xCF, 0xAC, 0xCF, 0xAC, 0xAE, 0xAC, 0xAE, 0xAC, 0xCF, 0xAC, 0xCF, 0xB4, 0xEF, 0xB5, 0x10, 0xB4, 0xEF, 0xB5, 0x0F, 0xC5, 0x71, 0xBD, 0x51, 0xB4, 0xEF, 0xBD, 0x31, 0xBD, 0x52, 0x6B, 0x0A, 0x62, 0xEA, 0x4A, 0x28, 0x41, 0xE7, 0x29, 0x44, 0x31, 0x86, 0x41, 0xC7, 0x4A, 0x08, 0x52, 0x49, 0x5A, 0x89, 0x94, 0x30, 0x62, 0xCB, 0x5A, 0x69, 0x7B, 0x8E, 0x7B, 0x8E, 0x83, 0x8E, 0xB5, 0x13, 0xCE, 0x16, 0xAD, 0x12, 0x9C, 0x90, 0x9C, 0x6F, 0x94, 0x2E, 0xA4, 0xAF, 0xAD, 0x11, 0xBD, 0x53, 0xB5, 0x32, 0xAC, 0xF0, 0x94, 0x2E, 0xBD, 0x74, 0xA4, 0xB0, 0x9C, 0x6F, 0x9C, 0x4E, 0x9C, 0x4E, 0x9C, 0x6E, 0xA4, 0xAF, 0xAC, 0xD0, 0xAC, 0xD0, 0xA4, 0xB0, 0xAC, 0xF1, 0x94, 0x0E, 0x5A, 0x69, 0x31, 0x66, 0x21, 0x25, 0x21, 0x25, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x08, 0x83, 0x08, 0x83, 0x10, 0x83, 0x10, 0x83, 0x10, 0x83, 0x10, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x82, 0x08, 0x83, 0x08, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x19, 0x04, 0x18, 0xC4, 0x18, 0xE4, 0x21, 0x25, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0xC3, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xE4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x05, 0x19, 0x05, 0x21, 0x05, 0x21, 0x05, 0x19, 0x05, 0x18, 0xE5, 0x18, 0xE5, 0x21, 0x26, 0x21, 0x46, 0x21, 0x46, 0x29, 0x46, 0x21, 0x46, 0x21, 0x46, 0x29, 0x46, 0x29, 0x46, 0x21, 0x46, 0x29, 0x46, 0x21, 0x46, 0x21, 0x46, 0x29, 0x46, 0x29, 0x46, 0x29, 0x87, 0x39, 0xE9, 0x39, 0xE9, 0x39, 0xE9, 0x31, 0x87, 0x39, 0xE8, 0x8C, 0x50, 0x9C, 0xF1, 0x94, 0x6F, 0x9C, 0x90, 0x9C, 0xB0, 0xB5, 0x53, 0xB5, 0x53, 0xCE, 0x57, 0xC6, 0x37, 0xBD, 0xB5, 0xB5, 0xB5, 0xBD, 0xB5, 0xA5, 0x12, 0x84, 0x2F, 0x8C, 0x91, 0x8C, 0x50, 0x7B, 0xEE, 0x8C, 0x50, 0x94, 0x91, 0x9C, 0xF2, 0xA5, 0x13, 0xA5, 0x33, 0xBD, 0xB5, 0xA5, 0x12, 0x9C, 0x91, 0xA4, 0xF2, 0x9C, 0xB0, 0x94, 0x90, 0xA4, 0xF1, 0xA4, 0xF1, 0xC5, 0xB4, 0xD6, 0x56, 0x52, 0x89, 0x18, 0xE4, 0x10, 0x82, 0x29, 0x44, 0x39, 0x85, 0x39, 0xA6, 0x52, 0x48, 0x6A, 0xEA, 0x5A, 0x89, 0x7B, 0x8D, 0x95, 0x70, 0x9D, 0x91, 0x74, 0x6D, 0x5B, 0xC9, 0x6C, 0x49, 0x53, 0x66, 0x53, 0x46, 0x6C, 0x08, 0x6B, 0xE9, 0x5B, 0x27, 0x8C, 0x6C, 0x8C, 0x4C, 0x84, 0x0B, 0x73, 0xCB, 0x74, 0x0B, 0x6B, 0xEB, 0x7C, 0x4D, 0xBE, 0x34, 0xA5, 0x10, 0xA5, 0x10, 0xB5, 0x71, 0xBD, 0xB3, 0xB5, 0x52, 0xB5, 0x52, 0xBD, 0xD4, 0x9C, 0xD0, 0xAD, 0x32, 0xBD, 0xD4, 0xCE, 0x35, 0xBD, 0xB3, 0xAD, 0x31, 0xCE, 0x36, 0xC5, 0xD5, 0xAD, 0x33, 0x8C, 0x2F, 0xB5, 0xB5, 0xB5, 0x94, 0xCE, 0x36, 0xCE, 0x56, 0xCE, 0x55, 0xD6, 0x55, 0xAD, 0x10, 0xBD, 0x92, 0xBD, 0x92, 0xD6, 0x35, 0x94, 0x6F, 0x39, 0xA5, 0x73, 0x4B, 0xB5, 0x73, 0xD6, 0x57, 0xBD, 0xB5, 0x5A, 0xCA, 0x4A, 0x68, 0x73, 0xAD, 0x83, 0xEE, 0x9C, 0xB1, 0xB5, 0x95, 0xCE, 0x57, 0xD6, 0x78, 0xCE, 0x57, 0xCE, 0x36, 0xD6, 0x97, 0xDE, 0x97, 0xD6, 0x76, 0xCE, 0x14, 0xB4, 0xEF, 0xB5, 0x10, 0xA4, 0xB0, 0xAD, 0x32, 0xAD, 0x52, 0xA4, 0xF0, 0xA4, 0xF1, 0xBD, 0xB4, 0xBD, 0xB4, 0xBD, 0x94, 0xB5, 0x93, 0xAD, 0x32, 0x94, 0xD1, 0xA4, 0xF2, 0xA5, 0x13, 0x7B, 0xEE, 0xB5, 0x95, 0xB5, 0x53, 0x6B, 0x2A, 0x83, 0xCD, 0xBD, 0xB4, 0xCD, 0xF5, 0x9C, 0x8F, 0x94, 0x4E, 0xBD, 0x31, 0xBD, 0x30, 0xCE, 0x35, 0xBD, 0xB3, 0xC5, 0xF4, 0xC5, 0xF4, 0xBD, 0xB3, 0xC5, 0xD3, 0xBD, 0xB4, 0xB5, 0x52, 0xA4, 0xF1, 0x41, 0xE7, 0x62, 0xEB, 0x4A, 0x48, 0x29, 0x44, 0x39, 0xA6, 0x42, 0x28, 0x4A, 0x49, 0x52, 0x8A, 0x6B, 0x4D, 0x73, 0x6E, 0x84, 0x10, 0x94, 0x92, 0xA5, 0x14, 0xA5, 0x14, 0xAD, 0x55, 0xC5, 0xD7, 0x9C, 0x92, 0x6B, 0x2C, 0x62, 0xEB, 0x73, 0x8D, 0x94, 0x6F, 0x9C, 0xD0, 0xAD, 0x52, 0xB5, 0x73, 0xA5, 0x11, 0xA4, 0xF1, 0x8C, 0x0D, 0x73, 0x4A, 0x84, 0x0D, 0xB5, 0x31, 0xAC, 0xF0, 0xAC, 0xCF, 0xC5, 0xB4, 0xBD, 0xD6, 0xA5, 0x35, 0x84, 0x10, 0x6A, 0xEA, 0x8C, 0x0D, 0x83, 0x8B, 0x7B, 0x6C, 0x5A, 0x89, 0x5A, 0x89, 0x4A, 0x07, 0x41, 0xE6, 0x52, 0x47, 0x62, 0xC9, 0x5A, 0xA8, 0x62, 0xC9, 0x62, 0xC9, 0x62, 0xA8, 0x6A, 0xE9, 0x94, 0x2D, 0xB5, 0x10, 0x8B, 0xEC, 0x73, 0x29, 0x8B, 0xEC, 0xB5, 0x32, 0x9C, 0x4F, 0x62, 0xCA, 0x62, 0xCA, 0x31, 0x85, 0x21, 0x04, 0x29, 0x45, 0x31, 0x85, 0x31, 0x65, 0x39, 0xA6, 0x6B, 0x2C, 0x4A, 0x08, 0x41, 0xA7, 0x73, 0x4D, 0x83, 0xCE, 0x62, 0xEB, 0xC6, 0x18, 0xDE, 0x9A, 0xBD, 0x95, 0xC5, 0xD6, 0xD6, 0x37, 0xB5, 0x33, 0xBD, 0x94, 0xBD, 0x94, 0xC5, 0xD4, 0xB5, 0x32, 0xB5, 0x52, 0xBD, 0x53, 0xB5, 0x32, 0xB5, 0x53, 0xC5, 0xD5, 0xC5, 0xD5, 0xC5, 0xD4, 0xC5, 0xD4, 0xC5, 0xD5, 0xC5, 0xB4, 0xC5, 0xB4, 0xCD, 0xD4, 0xCD, 0xB4, 0xC5, 0x94, 0xCD, 0xD4, 0xAC, 0xF1, 0x8B, 0xCE, 0x52, 0x28, 0x29, 0x25, 0x21, 0x25, 0x18, 0xE4, 0x19, 0x04, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x10, 0x83, 0x10, 0x83, 0x08, 0x83, 0x08, 0x83, 0x10, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x10, 0xC4, 0x18, 0xE4, 0x10, 0xA3, 0x18, 0xE4, 0x19, 0x05, 0x18, 0xE4, 0x18, 0xE4, 0x10, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0xC3, 0x10, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0xC4, 0x10, 0xA3, 0x10, 0x83, 0x08, 0x83, 0x08, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xE4, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x21, 0x05, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x21, 0x46, 0x21, 0x26, 0x21, 0x46, 0x21, 0x46, 0x21, 0x46, 0x21, 0x46, 0x29, 0x46, 0x21, 0x46, 0x21, 0x26, 0x21, 0x46, 0x21, 0x46, 0x21, 0x46, 0x21, 0x46, 0x29, 0x46, 0x29, 0x67, 0x31, 0xA8, 0x39, 0xE9, 0x39, 0xE9, 0x39, 0xC8, 0x29, 0x87, 0x42, 0x28, 0x83, 0xEF, 0x94, 0x4F, 0x9C, 0xB0, 0x8C, 0x2F, 0xB5, 0x53, 0xB5, 0x53, 0xD6, 0x98, 0xCE, 0x57, 0xBD, 0xB5, 0xAD, 0x74, 0xB5, 0x74, 0x9C, 0xF2, 0x84, 0x30, 0x8C, 0x91, 0x84, 0x2F, 0x7B, 0xEE, 0x7B, 0xEF, 0x94, 0x71, 0xA5, 0x13, 0xA4, 0xF2, 0x94, 0x90, 0xB5, 0x94, 0xA5, 0x13, 0x8C, 0x50, 0xA5, 0x33, 0x94, 0xB0, 0x94, 0x90, 0xA4, 0xD1, 0xAD, 0x12, 0xC5, 0xB4, 0xD6, 0x55, 0x9C, 0x90, 0x18, 0xE4, 0x10, 0xA3, 0x18, 0xE3, 0x39, 0xC6, 0x39, 0xA5, 0x4A, 0x27, 0x62, 0xEA, 0x6B, 0x0B, 0x7B, 0x6C, 0x63, 0xEB, 0x8D, 0x10, 0x74, 0x4D, 0x74, 0x4C, 0x64, 0x29, 0x5B, 0xC8, 0x43, 0x04, 0x64, 0x07, 0x53, 0x26, 0x52, 0xE6, 0x6B, 0x89, 0x94, 0xAE, 0x84, 0x2C, 0x74, 0x0B, 0x74, 0x4A, 0x6C, 0x09, 0x84, 0x6D, 0x94, 0x6D, 0xA4, 0xAF, 0xA4, 0xAE, 0x9C, 0x6D, 0xA4, 0xAF, 0xAC, 0xF0, 0xB5, 0x31, 0xAC, 0xF0, 0xAC, 0xF0, 0xB5, 0x11, 0xAC, 0xF0, 0xAC, 0xCF, 0xB5, 0x10, 0xB5, 0x10, 0xB5, 0x31, 0xB5, 0x11, 0xAC, 0xF1, 0xA4, 0xB0, 0x94, 0x6F, 0x9C, 0x8F, 0xA4, 0xD0, 0xB5, 0x31, 0xC5, 0xB3, 0xBD, 0x92, 0xBD, 0x51, 0xBD, 0x31, 0x9C, 0x6D, 0xAC, 0xF0, 0xA4, 0x8F, 0x73, 0x2A, 0x39, 0xC6, 0x52, 0xA9, 0x5A, 0xC9, 0x6B, 0x6C, 0x73, 0x6D, 0x31, 0x65, 0x42, 0x49, 0x52, 0x8A, 0x42, 0x29, 0x42, 0x4A, 0x5A, 0xEC, 0x7B, 0xF0, 0xA5, 0x34, 0xC6, 0x37, 0xD6, 0x97, 0xDE, 0x97, 0xD6, 0x76, 0xC5, 0xB3, 0xB5, 0x10, 0xB5, 0x10, 0xB5, 0x52, 0xB5, 0x93, 0xBD, 0xB4, 0xBD, 0x94, 0xAD, 0x11, 0xC5, 0xD5, 0xC5, 0xF5, 0xC5, 0xD4, 0xC5, 0xD4, 0xB5, 0x73, 0xA5, 0x33, 0xA5, 0x33, 0xAD, 0x54, 0x7B, 0xAE, 0x84, 0x0E, 0x8C, 0x2E, 0x5A, 0xC9, 0x8C, 0x0E, 0xA4, 0xD0, 0xAD, 0x32, 0x8C, 0x2E, 0x9C, 0x6E, 0xBD, 0x51, 0xB5, 0x10, 0xC5, 0xF4, 0xC5, 0xD3, 0xC5, 0xF4, 0xC5, 0xF4, 0xC5, 0xD4, 0xC5, 0xD4, 0xC5, 0xD4, 0xBD, 0x93, 0xBD, 0x93, 0x73, 0x6C, 0x42, 0x07, 0x5A, 0xEA, 0x31, 0xA6, 0x39, 0xA6, 0x42, 0x07, 0x42, 0x28, 0x52, 0x8A, 0x63, 0x0C, 0x6B, 0x4D, 0x73, 0x8E, 0x84, 0x10, 0x9C, 0xD3, 0xA5, 0x15, 0xB5, 0x96, 0xCE, 0x38, 0xBD, 0x96, 0x94, 0x51, 0x73, 0x6D, 0xA5, 0x13, 0xAD, 0x53, 0x9C, 0xD1, 0xB5, 0x73, 0xC5, 0xF5, 0xCE, 0x36, 0xB5, 0x93, 0x8C, 0x2E, 0x9C, 0xD1, 0xAD, 0x32, 0xAD, 0x11, 0xB5, 0x31, 0xAC, 0xD0, 0xD6, 0x57, 0x9C, 0xD3, 0x7B, 0xCF, 0x94, 0x71, 0x83, 0xED, 0x8B, 0xED, 0x8B, 0xED, 0xB5, 0x52, 0x83, 0xCD, 0x94, 0x4F, 0x6B, 0x4C, 0x52, 0x8A, 0x52, 0x89, 0x52, 0x89, 0x84, 0x0F, 0xA4, 0xD1, 0xA4, 0xD1, 0x94, 0x4F, 0x5A, 0x89, 0x94, 0x4F, 0xA4, 0x8F, 0x94, 0x4E, 0x83, 0xCD, 0x94, 0x4F, 0xBD, 0x73, 0x94, 0x2F, 0x41, 0xE7, 0x62, 0xCA, 0x4A, 0x07, 0x20, 0xE3, 0x21, 0x24, 0x29, 0x44, 0x29, 0x44, 0x29, 0x45, 0x5A, 0x89, 0x52, 0x69, 0x41, 0xC7, 0x5A, 0xAA, 0x39, 0xA6, 0x39, 0xA7, 0x6B, 0x2D, 0xAD, 0x14, 0xCD, 0xF7, 0xAD, 0x13, 0xC5, 0xD6, 0x83, 0xCD, 0x94, 0x4F, 0x94, 0x6F, 0xBD, 0x73, 0xB5, 0x52, 0xB5, 0x53, 0xBD, 0xB4, 0xBD, 0x94, 0xA4, 0xD0, 0xA4, 0xF1, 0xA4, 0xB0, 0x8C, 0x0D, 0xAD, 0x32, 0xA4, 0xD1, 0xA4, 0xD0, 0xAC, 0xF1, 0xA4, 0xB0, 0xA4, 0xD1, 0xA4, 0xB0, 0xC5, 0xD4, 0xC5, 0xB4, 0x9C, 0x6F, 0x73, 0x2B, 0x41, 0xE7, 0x29, 0x45, 0x21, 0x04, 0x21, 0x25, 0x18, 0xC4, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0xC3, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x10, 0xC4, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xA3, 0x08, 0x83, 0x08, 0x83, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x05, 0x18, 0xE5, 0x21, 0x05, 0x21, 0x05, 0x19, 0x05, 0x21, 0x26, 0x29, 0x46, 0x21, 0x26, 0x21, 0x46, 0x21, 0x46, 0x21, 0x26, 0x21, 0x46, 0x21, 0x46, 0x21, 0x46, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x46, 0x29, 0x46, 0x29, 0x46, 0x29, 0x46, 0x29, 0x87, 0x39, 0xE9, 0x39, 0xC8, 0x39, 0xC8, 0x29, 0x87, 0x29, 0x67, 0x52, 0x6A, 0xA4, 0xF2, 0xBD, 0xB4, 0x8C, 0x0E, 0xB5, 0x53, 0xAD, 0x53, 0xCE, 0x57, 0xC6, 0x37, 0xC6, 0x37, 0xC6, 0x16, 0xC5, 0xF6, 0xAD, 0x54, 0x94, 0xB2, 0x94, 0xD2, 0x94, 0x91, 0x84, 0x30, 0x8C, 0x50, 0xA5, 0x13, 0xB5, 0x94, 0x8C, 0x4F, 0x7B, 0xCE, 0xAD, 0x54, 0x94, 0x91, 0x8C, 0x70, 0xB5, 0x94, 0x9C, 0xD1, 0x94, 0xB1, 0x9C, 0xB1, 0xA4, 0xF2, 0xCE, 0x15, 0xD6, 0x54, 0xD6, 0x56, 0x39, 0xA6, 0x18, 0xE3, 0x10, 0x82, 0x31, 0x65, 0x41, 0xE7, 0x4A, 0x28, 0x5A, 0xA9, 0x6A, 0xEB, 0x5A, 0x89, 0x7C, 0x6D, 0x74, 0x4D, 0x74, 0x4D, 0x63, 0xEA, 0x64, 0x0A, 0x5B, 0xA7, 0x4B, 0x44, 0x64, 0x07, 0x4B, 0x24, 0x84, 0xCC, 0x74, 0x4B, 0x53, 0x08, 0x84, 0xAD, 0x6C, 0x28, 0x74, 0x67, 0x95, 0x4D, 0x8C, 0x8D, 0x7B, 0xCC, 0x7B, 0x8B, 0x73, 0x2A, 0x83, 0xCC, 0x8C, 0x0D, 0xAD, 0x31, 0xCD, 0xD4, 0xA4, 0xAF, 0xA4, 0xAF, 0x9C, 0x4E, 0xB5, 0x31, 0xAC, 0xF0, 0xAC, 0xCF, 0x9C, 0x6E, 0x9C, 0x8E, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0xAF, 0xAC, 0xF0, 0xB5, 0x10, 0xAD, 0x10, 0xA4, 0xAF, 0xAC, 0xCF, 0xB5, 0x31, 0xBD, 0x31, 0xD5, 0xF4, 0xCD, 0xD2, 0xD5, 0xF3, 0xC5, 0x92, 0xCD, 0xB3, 0x7B, 0x8B, 0x5A, 0xCA, 0x63, 0x0B, 0x29, 0x65, 0x18, 0xC3, 0x19, 0x04, 0x18, 0xC3, 0x29, 0x45, 0x31, 0x86, 0x29, 0x66, 0x29, 0x87, 0x31, 0xA8, 0x31, 0xC9, 0x4A, 0x8B, 0x7B, 0xCF, 0x9C, 0xB1, 0x9C, 0xB0, 0xA4, 0x8E, 0xBD, 0x51, 0xB5, 0x30, 0xBD, 0x72, 0xBD, 0x93, 0xBD, 0x93, 0xB5, 0x73, 0xC5, 0xD4, 0xCE, 0x15, 0xBD, 0x93, 0xCE, 0x35, 0xCE, 0x15, 0xB5, 0x93, 0xAD, 0x74, 0x9C, 0xD2, 0x9C, 0xD2, 0x7B, 0xAE, 0x7B, 0xCD, 0x9C, 0xB0, 0x83, 0xED, 0xAD, 0x12, 0xB5, 0x73, 0xA4, 0xD0, 0x83, 0xED, 0x8B, 0xED, 0xBD, 0x71, 0xAC, 0xEF, 0xB5, 0x31, 0xB5, 0x72, 0xB5, 0x72, 0xC5, 0xF4, 0xC5, 0xF4, 0xD6, 0x55, 0xC5, 0xF5, 0xC5, 0xD4, 0xCE, 0x15, 0xAD, 0x12, 0x31, 0x65, 0x63, 0x0B, 0x42, 0x07, 0x29, 0x65, 0x4A, 0x48, 0x4A, 0x69, 0x4A, 0x69, 0x5A, 0xAA, 0x63, 0x0B, 0x73, 0x6E, 0x8C, 0x31, 0x94, 0xB3, 0x9C, 0xD4, 0xB5, 0x96, 0xBD, 0xD7, 0xAD, 0x34, 0xAD, 0x14, 0xAD, 0x34, 0xAD, 0x33, 0xB5, 0x94, 0xB5, 0x53, 0xAD, 0x52, 0xCE, 0x15, 0xCE, 0x56, 0xCE, 0x36, 0xB5, 0x73, 0xAD, 0x32, 0xAD, 0x11, 0xA4, 0xF1, 0xC5, 0xD4, 0xB5, 0x53, 0xD6, 0x58, 0x83, 0xEF, 0x63, 0x2D, 0x8C, 0x51, 0xAD, 0x11, 0xAC, 0xF1, 0x94, 0x0D, 0xC5, 0xD4, 0x9C, 0x6F, 0x9C, 0x90, 0x7B, 0x8D, 0x73, 0x6D, 0x6B, 0x4C, 0x5A, 0xAA, 0x84, 0x0E, 0xA4, 0xF1, 0xAD, 0x12, 0xB5, 0x52, 0x7B, 0x8C, 0xA4, 0xB0, 0xC5, 0x93, 0xD6, 0x15, 0xA4, 0xD0, 0xAC, 0xF1, 0xBD, 0x73, 0x9C, 0xB0, 0x83, 0xEE, 0x5A, 0x69, 0x62, 0xAA, 0x4A, 0x69, 0x6B, 0x4C, 0x5A, 0xCB, 0x31, 0x85, 0x31, 0x85, 0x31, 0x85, 0x39, 0xC6, 0x4A, 0x49, 0x39, 0xA6, 0x29, 0x44, 0x29, 0x44, 0x42, 0x08, 0x52, 0x49, 0x6B, 0x0C, 0x6B, 0x0C, 0x94, 0x50, 0xB5, 0x53, 0x9C, 0x70, 0x94, 0x6F, 0xBD, 0x94, 0xB5, 0x32, 0xBD, 0x73, 0xC5, 0xF5, 0xCE, 0x36, 0xA4, 0xF1, 0x9C, 0xB0, 0x8C, 0x0D, 0x8C, 0x2E, 0xA4, 0xD0, 0xAD, 0x11, 0xC5, 0xD5, 0xCD, 0xF5, 0xAC, 0xF1, 0x9C, 0x90, 0x8C, 0x0D, 0xAD, 0x11, 0xC5, 0xB3, 0xC5, 0x93, 0xAC, 0xF1, 0x9C, 0x91, 0x73, 0x4C, 0x52, 0x49, 0x6B, 0x2C, 0x31, 0xA6, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x10, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0xA3, 0x18, 0xE4, 0x19, 0x04, 0x18, 0xE4, 0x19, 0x04, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0xA3, 0x18, 0xE4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x26, 0x21, 0x46, 0x21, 0x26, 0x21, 0x26, 0x29, 0x46, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x29, 0x46, 0x29, 0x67, 0x21, 0x46, 0x29, 0x67, 0x31, 0xC8, 0x31, 0xC8, 0x31, 0xA8, 0x31, 0xA8, 0x31, 0x87, 0x31, 0x87, 0x6B, 0x4C, 0xBD, 0xB4, 0x94, 0x4E, 0xB5, 0x53, 0xB5, 0x94, 0xD6, 0x98, 0xD6, 0x98, 0xCE, 0x78, 0xCE, 0x57, 0xC6, 0x36, 0xBD, 0xB5, 0xA5, 0x33, 0xAD, 0x74, 0xA5, 0x34, 0xA5, 0x34, 0xB5, 0x95, 0xC6, 0x16, 0xAD, 0x74, 0x73, 0xAD, 0x9C, 0xF2, 0xAD, 0x74, 0xA5, 0x13, 0x9C, 0xD2, 0xBD, 0xB5, 0xAD, 0x53, 0x9C, 0xB1, 0x9C, 0xB1, 0xA4, 0xF2, 0xD6, 0x56, 0xDE, 0x75, 0xDE, 0x96, 0x52, 0x89, 0x18, 0xE4, 0x10, 0xA3, 0x18, 0xA3, 0x41, 0xE7, 0x4A, 0x07, 0x4A, 0x27, 0x62, 0xEA, 0x52, 0x48, 0xBE, 0x75, 0x6C, 0x0B, 0x5B, 0xAA, 0x7C, 0xCE, 0x6C, 0x0A, 0x53, 0x86, 0x4B, 0x64, 0x53, 0x85, 0x63, 0xE7, 0x85, 0x0C, 0x6C, 0x49, 0x5B, 0xA7, 0x5B, 0xA6, 0x64, 0x05, 0x7C, 0xC8, 0x9D, 0x8E, 0x8C, 0xAF, 0x63, 0x09, 0x9C, 0xD1, 0x9C, 0xD1, 0x8C, 0x4F, 0x8C, 0x2E, 0x9C, 0xD1, 0xA4, 0xF1, 0xA4, 0xD1, 0xA4, 0xF1, 0x9C, 0xAF, 0xB5, 0x10, 0xAC, 0xF0, 0xB5, 0x52, 0xA4, 0xB0, 0xA4, 0xD1, 0xAD, 0x33, 0xA4, 0xF2, 0xA4, 0xD1, 0xA4, 0xF0, 0x94, 0x6E, 0x8C, 0x4E, 0x8C, 0x2E, 0x8C, 0x0D, 0x83, 0x8B, 0x7B, 0x8B, 0xA4, 0xAF, 0x9C, 0x4D, 0xAC, 0xF0, 0xAC, 0xF0, 0xA4, 0x8F, 0x94, 0x2D, 0x6B, 0x0A, 0x5A, 0xCA, 0x5A, 0xCA, 0x31, 0x86, 0x21, 0x04, 0x21, 0x25, 0x19, 0x04, 0x10, 0xA3, 0x10, 0xC3, 0x21, 0x25, 0x21, 0x25, 0x21, 0x47, 0x29, 0xA8, 0x31, 0xC9, 0x42, 0x2A, 0x6B, 0x6E, 0x94, 0x70, 0xAC, 0xF1, 0xBD, 0x72, 0xC5, 0x92, 0xBD, 0x51, 0xBD, 0x31, 0xB5, 0x30, 0xB5, 0x10, 0xB5, 0x10, 0xAC, 0xCF, 0x9C, 0x6E, 0x94, 0x2D, 0x83, 0xCB, 0x8C, 0x2E, 0x94, 0x4E, 0x94, 0x2E, 0x8B, 0xEC, 0x9C, 0x6F, 0xA4, 0xD0, 0x8B, 0xED, 0xA4, 0xB0, 0xB5, 0x31, 0xB5, 0x32, 0xB5, 0x31, 0xAC, 0xF0, 0xAC, 0xCE, 0x83, 0xAA, 0x7B, 0x6A, 0x94, 0x4D, 0xA4, 0xCF, 0xB5, 0x72, 0xCE, 0x14, 0xD6, 0x35, 0xCE, 0x35, 0xCD, 0xF4, 0xBD, 0x72, 0xC5, 0xD4, 0x52, 0x68, 0x42, 0x28, 0x5A, 0xEB, 0x39, 0xC6, 0x31, 0xA6, 0x42, 0x28, 0x39, 0xC6, 0x4A, 0x69, 0x62, 0xEB, 0x6B, 0x6D, 0x7B, 0xAF, 0x8C, 0x72, 0x94, 0x93, 0xA5, 0x35, 0xB5, 0x96, 0xB5, 0x75, 0xAD, 0x14, 0xCE, 0x38, 0xAD, 0x13, 0xBD, 0xB5, 0xBD, 0xB4, 0xC5, 0xF5, 0xD6, 0x97, 0xD6, 0x56, 0xCE, 0x56, 0xBD, 0xB4, 0xB5, 0x73, 0xB5, 0x72, 0xAD, 0x52, 0xBD, 0xB3, 0xB5, 0x32, 0xBD, 0x95, 0x94, 0x92, 0x7B, 0xEF, 0x9C, 0xB1, 0xBD, 0x73, 0xAC, 0xD0, 0x8B, 0xCC, 0xC5, 0xB4, 0xA4, 0xD0, 0xB5, 0x53, 0x8C, 0x2F, 0x8C, 0x2F, 0x73, 0x8D, 0x6B, 0x4C, 0x94, 0x90, 0xBD, 0xB4, 0xCD, 0xF5, 0xC5, 0xD4, 0x83, 0xCD, 0xA5, 0x11, 0xB5, 0x31, 0xCD, 0xF4, 0x9C, 0x8F, 0xA4, 0xD0, 0xC5, 0xB4, 0xA4, 0xB0, 0xA4, 0xD1, 0x6B, 0x2B, 0x39, 0xA6, 0x39, 0xC6, 0x41, 0xE7, 0xA5, 0x13, 0x7B, 0xCD, 0x39, 0xA6, 0x29, 0x65, 0x39, 0xC7, 0x39, 0xC6, 0x31, 0xA6, 0x31, 0x85, 0x29, 0x44, 0x29, 0x64, 0x42, 0x07, 0x83, 0xEF, 0x9C, 0x92, 0x7B, 0x6D, 0xA4, 0xD2, 0xCE, 0x16, 0xA4, 0xD1, 0xBD, 0x73, 0xC5, 0xD4, 0xCE, 0x15, 0xCE, 0x36, 0xC5, 0xD4, 0xB5, 0x53, 0x94, 0x6F, 0x8C, 0x2E, 0x9C, 0x90, 0xC5, 0xB4, 0xB5, 0x73, 0xC5, 0xF5, 0xBD, 0x93, 0xA4, 0xB0, 0xAD, 0x32, 0x8C, 0x2E, 0xA4, 0xD1, 0xB5, 0x52, 0xC5, 0xD4, 0xBD, 0x73, 0xC5, 0xD4, 0xB5, 0x32, 0xAC, 0xD1, 0xBD, 0x73, 0x7B, 0x8C, 0x52, 0x69, 0x29, 0x25, 0x18, 0xE4, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xC4, 0x10, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0x83, 0x18, 0xE4, 0x19, 0x05, 0x18, 0xE4, 0x19, 0x04, 0x18, 0xC4, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xC4, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x21, 0x25, 0x21, 0x05, 0x21, 0x05, 0x19, 0x05, 0x19, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x26, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x26, 0x21, 0x26, 0x21, 0x46, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x46, 0x29, 0x46, 0x29, 0x46, 0x21, 0x46, 0x31, 0x87, 0x39, 0xE9, 0x31, 0xA8, 0x31, 0xA7, 0x39, 0xC8, 0x31, 0x87, 0x39, 0xA7, 0x7B, 0xAE, 0x9C, 0x90, 0xB5, 0x53, 0xB5, 0x73, 0xC6, 0x16, 0xAD, 0x53, 0xBD, 0xB5, 0xBD, 0xB4, 0xBD, 0xB4, 0xB5, 0x94, 0xB5, 0x94, 0xB5, 0x74, 0xA5, 0x13, 0xAD, 0x33, 0xA5, 0x13, 0xAD, 0x33, 0x9C, 0xD1, 0x84, 0x0E, 0xA4, 0xF2, 0xB5, 0x74, 0xAD, 0x53, 0xA5, 0x13, 0xBD, 0xB5, 0xCE, 0x37, 0xB5, 0x74, 0xA4, 0xF1, 0xAD, 0x12, 0xCE, 0x15, 0xE6, 0xB6, 0xD6, 0x35, 0x7B, 0xAD, 0x39, 0xC7, 0x18, 0xC3, 0x10, 0x82, 0x31, 0x66, 0x42, 0x07, 0x4A, 0x07, 0x6B, 0x2B, 0x4A, 0x27, 0x64, 0x29, 0x5B, 0xE8, 0x2A, 0x43, 0x42, 0xE8, 0x74, 0x6C, 0x63, 0xE8, 0x4B, 0x44, 0x4B, 0x64, 0x6C, 0x28, 0x6C, 0x29, 0x4B, 0x65, 0x64, 0x27, 0x6C, 0x68, 0x7C, 0xCB, 0x9D, 0xAF, 0xA5, 0x70, 0xA5, 0x11, 0x9C, 0xF1, 0xA5, 0x33, 0xB5, 0x94, 0x9C, 0xD1, 0x94, 0x90, 0x8C, 0x4F, 0x8C, 0x6F, 0x94, 0x90, 0x9C, 0xD1, 0x9C, 0xAF, 0xB5, 0x10, 0xB5, 0x10, 0xC5, 0xD4, 0xAD, 0x53, 0xB5, 0x94, 0xAD, 0x53, 0xA5, 0x12, 0xA5, 0x12, 0xA4, 0xF1, 0x9C, 0xD0, 0x9C, 0xB0, 0xA4, 0xF1, 0x9C, 0xB0, 0x9C, 0x90, 0x9C, 0xB0, 0xA4, 0xD1, 0xAD, 0x11, 0xC5, 0xD4, 0xCD, 0xF4, 0x94, 0x6F, 0x94, 0x6F, 0xA4, 0xF2, 0x62, 0xEB, 0x52, 0xAA, 0x52, 0xAA, 0x31, 0x86, 0x19, 0x04, 0x18, 0xE4, 0x10, 0xC3, 0x08, 0x82, 0x08, 0x82, 0x10, 0xE3, 0x19, 0x25, 0x21, 0x46, 0x21, 0x67, 0x31, 0xA9, 0x31, 0xC9, 0x39, 0xEA, 0x4A, 0x69, 0x5A, 0xA9, 0x73, 0x4B, 0x8B, 0xEC, 0x9C, 0x4E, 0xA4, 0xAF, 0x9C, 0x6D, 0xA4, 0x8E, 0xB4, 0xEF, 0xC5, 0x71, 0xBD, 0x51, 0xB5, 0x10, 0xB5, 0x31, 0xBD, 0x51, 0xB5, 0x10, 0xBD, 0x30, 0xBD, 0x51, 0xC5, 0x72, 0xBD, 0x30, 0xBD, 0x51, 0xC5, 0x72, 0xC5, 0x92, 0xC5, 0xB2, 0xCD, 0xB2, 0xC5, 0x92, 0xBD, 0x30, 0xB5, 0x31, 0xBD, 0x71, 0xBD, 0x51, 0xAC, 0xCF, 0xA4, 0xAF, 0x9C, 0x6E, 0x9C, 0x4D, 0x9C, 0x4D, 0x94, 0x2D, 0x94, 0x2E, 0x52, 0x68, 0x18, 0xE3, 0x52, 0x89, 0x5A, 0xCA, 0x39, 0xC6, 0x42, 0x07, 0x31, 0x86, 0x42, 0x08, 0x52, 0x8A, 0x63, 0x0C, 0x63, 0x0C, 0x73, 0x8E, 0x73, 0xAF, 0x94, 0xB3, 0xAD, 0x55, 0x8C, 0x71, 0xAD, 0x55, 0xD6, 0x58, 0xD6, 0x58, 0xBD, 0x94, 0xC5, 0xF5, 0xD6, 0x77, 0xD6, 0x56, 0xCE, 0x56, 0xBD, 0xD4, 0xBD, 0xB4, 0xB5, 0x73, 0xAD, 0x32, 0xBD, 0xB4, 0xAD, 0x11, 0xC5, 0xB5, 0xB5, 0x95, 0x9C, 0xF3, 0x84, 0x30, 0xBD, 0x94, 0xC5, 0x94, 0x8B, 0xCD, 0xAC, 0xF1, 0xC5, 0xB3, 0xB5, 0x52, 0xC5, 0xB4, 0x9C, 0x6F, 0xB5, 0x73, 0x94, 0x4F, 0x94, 0x2F, 0xBD, 0x94, 0xCE, 0x36, 0xCE, 0x15, 0xC5, 0xD4, 0x7B, 0x8C, 0xAD, 0x11, 0x83, 0xCC, 0xB5, 0x32, 0x9C, 0x8F, 0x9C, 0x8F, 0xC5, 0xB4, 0x94, 0x6F, 0xAD, 0x32, 0x9C, 0xB1, 0x31, 0x64, 0x21, 0x24, 0x52, 0x89, 0xB5, 0x53, 0xB5, 0x73, 0x7B, 0xCD, 0x31, 0x85, 0x31, 0x85, 0x31, 0x85, 0x39, 0xC6, 0x39, 0xC6, 0x31, 0x85, 0x39, 0xC6, 0x42, 0x07, 0x4A, 0x08, 0x7B, 0x8E, 0x62, 0xCA, 0x73, 0x6C, 0xBD, 0xB5, 0xBD, 0xB5, 0xC5, 0xB5, 0xCE, 0x16, 0xD6, 0x77, 0xCE, 0x35, 0xBD, 0xB4, 0xA4, 0xF1, 0xA4, 0xF1, 0x9C, 0x8F, 0x94, 0x4E, 0xA4, 0xD0, 0xBD, 0x93, 0xC5, 0xD4, 0xB5, 0x52, 0xAD, 0x52, 0xB5, 0x73, 0xAD, 0x12, 0xB5, 0x53, 0xC5, 0xF4, 0xC5, 0xF4, 0xD6, 0x15, 0xD6, 0x15, 0xCD, 0xD4, 0xCD, 0xD4, 0xC5, 0xF4, 0xB5, 0x32, 0x9C, 0x6F, 0x62, 0xEB, 0x39, 0xA6, 0x29, 0x25, 0x18, 0xC4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x08, 0x83, 0x08, 0x82, 0x08, 0x83, 0x08, 0x83, 0x10, 0x83, 0x08, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xC4, 0x10, 0xC4, 0x18, 0xE4, 0x10, 0xC3, 0x08, 0x83, 0x10, 0xC3, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x10, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC4, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x05, 0x21, 0x26, 0x21, 0x05, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x26, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x21, 0x05, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x46, 0x21, 0x46, 0x21, 0x46, 0x29, 0x46, 0x39, 0xC8, 0x31, 0xA8, 0x29, 0x67, 0x39, 0xC8, 0x39, 0xE9, 0x31, 0x87, 0x4A, 0x4A, 0x73, 0x6D, 0x94, 0x70, 0x9C, 0xB0, 0x9C, 0xB0, 0x9C, 0xB0, 0x94, 0x6F, 0x8C, 0x2E, 0x8C, 0x0E, 0x84, 0x0E, 0x84, 0x0E, 0x8C, 0x2F, 0x8C, 0x0E, 0x83, 0xEE, 0x83, 0xCD, 0x73, 0x6C, 0x73, 0x6C, 0x7B, 0x8C, 0x7B, 0xAD, 0x94, 0x4F, 0x83, 0xEE, 0x84, 0x0E, 0x84, 0x0E, 0x94, 0x70, 0x84, 0x0E, 0x8C, 0x2F, 0x9C, 0xB0, 0xA4, 0x90, 0xCD, 0xD4, 0xD6, 0x55, 0x9C, 0xB0, 0x4A, 0x48, 0x21, 0x04, 0x18, 0xA3, 0x18, 0xC3, 0x41, 0xC7, 0x4A, 0x28, 0x73, 0x4C, 0x62, 0xCA, 0x64, 0x07, 0x64, 0x48, 0x53, 0x87, 0x3A, 0xA5, 0x5B, 0xA9, 0x53, 0x87, 0x6C, 0x28, 0x53, 0x85, 0x6C, 0x28, 0x42, 0xE4, 0x43, 0x44, 0x74, 0xAA, 0xA5, 0xF1, 0xC6, 0xF7, 0xA5, 0x71, 0x8C, 0xCF, 0x8C, 0xAF, 0x9C, 0xF0, 0xA5, 0x53, 0xB5, 0xD4, 0xB5, 0xB4, 0xA5, 0x53, 0x94, 0x90, 0x9C, 0xF2, 0xA5, 0x12, 0xB5, 0x94, 0xA4, 0xAF, 0xAC, 0xF0, 0xBD, 0x72, 0xD6, 0x56, 0xCE, 0x15, 0xE6, 0xF9, 0xD6, 0x97, 0xCE, 0x36, 0xB5, 0x74, 0xAD, 0x73, 0xAD, 0x53, 0xAD, 0x32, 0xAD, 0x32, 0xB5, 0x53, 0xAD, 0x53, 0xB5, 0x94, 0xB5, 0x94, 0xC5, 0xF5, 0xDE, 0xB7, 0xE6, 0xD8, 0xD6, 0x77, 0xCE, 0x58, 0xF7, 0x9D, 0xCE, 0x38, 0x4A, 0x48, 0x42, 0x07, 0x18, 0xC3, 0x08, 0x82, 0x08, 0x62, 0x08, 0x82, 0x08, 0x82, 0x08, 0x82, 0x08, 0x82, 0x10, 0xA3, 0x21, 0x25, 0x21, 0x66, 0x21, 0x47, 0x21, 0x67, 0x29, 0x88, 0x29, 0x88, 0x29, 0x87, 0x63, 0x2D, 0x52, 0x8A, 0x63, 0x0A, 0x8C, 0x4E, 0xA4, 0xB0, 0x94, 0x2D, 0x8C, 0x0C, 0xB5, 0x10, 0xC5, 0x71, 0xAC, 0xAE, 0x7B, 0x6A, 0x94, 0x4D, 0x94, 0x0C, 0x9C, 0x6E, 0x9C, 0x4E, 0x8B, 0xEC, 0x94, 0x2D, 0xAC, 0xCF, 0xB5, 0x10, 0xAC, 0xCF, 0xAC, 0xEF, 0xAC, 0xCF, 0xA4, 0x8E, 0xB4, 0xEF, 0xAC, 0xAF, 0xB4, 0xEF, 0xAC, 0xEF, 0xAC, 0xCF, 0xA4, 0x8F, 0xB4, 0xF0, 0xB5, 0x10, 0xB4, 0xEF, 0xB5, 0x10, 0xB4, 0xF0, 0x83, 0xAC, 0x29, 0x45, 0x39, 0xE7, 0x5A, 0xEB, 0x4A, 0x48, 0x42, 0x28, 0x39, 0xC6, 0x39, 0xE7, 0x4A, 0x69, 0x52, 0xAA, 0x52, 0x8A, 0x6B, 0x6D, 0x7B, 0xF0, 0x8C, 0x71, 0x84, 0x30, 0x9C, 0xB3, 0xBD, 0x96, 0xCE, 0x17, 0xB5, 0x74, 0xBD, 0xB5, 0xB5, 0x31, 0xAD, 0x10, 0xB5, 0x10, 0xB5, 0x31, 0xAC, 0xF0, 0x9C, 0xAF, 0x9C, 0x8F, 0x9C, 0x8F, 0xAD, 0x11, 0xAC, 0xF0, 0xD6, 0x37, 0xAD, 0x34, 0x9C, 0xD3, 0xA4, 0xD2, 0xDE, 0x97, 0xDE, 0x55, 0xBD, 0x52, 0xC5, 0x73, 0xC5, 0x93, 0xC5, 0x93, 0xBD, 0x72, 0xB5, 0x11, 0xE6, 0xB7, 0xDE, 0x35, 0xDE, 0x56, 0xDE, 0x56, 0xB5, 0x72, 0xB5, 0x72, 0xAD, 0x11, 0x8C, 0x0E, 0xC5, 0xB4, 0x94, 0x2E, 0xAD, 0x11, 0xA4, 0xF1, 0x9C, 0x6F, 0xC5, 0xD5, 0x94, 0x4F, 0xAD, 0x52, 0xA4, 0xD1, 0x6B, 0x4B, 0x63, 0x0B, 0xAD, 0x53, 0xB5, 0x93, 0xB5, 0x73, 0xB5, 0x74, 0x73, 0x8D, 0x39, 0xC6, 0x41, 0xE7, 0x39, 0xE7, 0x39, 0xC6, 0x39, 0xE7, 0x42, 0x07, 0x29, 0x44, 0x21, 0x24, 0x4A, 0x28, 0x6B, 0x2C, 0x4A, 0x28, 0x39, 0xA6, 0x4A, 0x48, 0x73, 0x6C, 0xA4, 0xD1, 0xCE, 0x15, 0xCE, 0x16, 0xAD, 0x32, 0x9C, 0xB0, 0x94, 0x2E, 0x9C, 0x8F, 0x83, 0xEC, 0x73, 0x6A, 0xA4, 0xD0, 0xCE, 0x15, 0xC5, 0xF5, 0xBD, 0x93, 0xB5, 0x93, 0x9C, 0xB0, 0xB5, 0x52, 0xC5, 0xF4, 0xD6, 0x36, 0xCD, 0xF4, 0xD6, 0x15, 0xCD, 0xF4, 0xCD, 0xD3, 0xC5, 0x93, 0xB5, 0x52, 0xB5, 0x32, 0xAC, 0xF1, 0x8C, 0x0E, 0x73, 0x2C, 0x62, 0xEB, 0x52, 0x69, 0x31, 0x66, 0x20, 0xE4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC4, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0xC4, 0x10, 0xA3, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x10, 0xC4, 0x10, 0xC3, 0x10, 0xC3, 0x10, 0xC4, 0x10, 0xA3, 0x10, 0xC4, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC4, 0x19, 0x04, 0x19, 0x05, 0x19, 0x05, 0x18, 0xE4, 0x18, 0xE5, 0x21, 0x05, 0x21, 0x05, 0x19, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x19, 0x05, 0x19, 0x05, 0x21, 0x05, 0x21, 0x05, 0x19, 0x05, 0x21, 0x05, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x29, 0x87, 0x31, 0xA8, 0x21, 0x46, 0x31, 0xC8, 0x39, 0xE9, 0x31, 0x87, 0x39, 0xC8, 0x52, 0x8B, 0x63, 0x0C, 0x9C, 0xD1, 0xBD, 0x94, 0xB5, 0x73, 0xAD, 0x53, 0xAD, 0x32, 0xB5, 0x73, 0xB5, 0x73, 0xAD, 0x12, 0xB5, 0x73, 0xAD, 0x32, 0xAD, 0x32, 0xAD, 0x12, 0xB5, 0x74, 0xAD, 0x32, 0xAD, 0x32, 0xBD, 0xB4, 0xAD, 0x33, 0xA4, 0xF2, 0xAD, 0x12, 0xAD, 0x32, 0xA4, 0xF2, 0xA4, 0xD1, 0xA4, 0xF2, 0xAD, 0x12, 0xAC, 0xF2, 0x9C, 0x90, 0x8C, 0x2F, 0x94, 0x70, 0x52, 0x89, 0x21, 0x04, 0x18, 0xC3, 0x10, 0x82, 0x31, 0x65, 0x42, 0x07, 0x73, 0x4C, 0x73, 0x6C, 0x74, 0xAA, 0x5C, 0x07, 0x53, 0xC7, 0x42, 0xE5, 0x4B, 0x47, 0x43, 0x05, 0x8D, 0x2D, 0x6C, 0x49, 0x4B, 0x25, 0x4B, 0x65, 0x5C, 0x07, 0x5B, 0xE7, 0x7C, 0xAC, 0xB6, 0x54, 0x8C, 0xEF, 0x7C, 0x4C, 0x84, 0x8D, 0x9D, 0x11, 0x9D, 0x11, 0x9C, 0xD1, 0xB5, 0x73, 0xAD, 0x53, 0x9C, 0xD1, 0xAD, 0x94, 0xAD, 0x74, 0xB5, 0x94, 0xA4, 0xD0, 0xAC, 0xEF, 0xC5, 0xF4, 0xCE, 0x55, 0xD6, 0x56, 0xE7, 0x19, 0xEF, 0x3A, 0xE7, 0x1A, 0xD6, 0x57, 0xC5, 0xF5, 0xC5, 0xF5, 0xC6, 0x16, 0xBD, 0xD5, 0xBD, 0xB5, 0xB5, 0x95, 0xAD, 0x54, 0xA5, 0x34, 0xAD, 0x54, 0xAD, 0x33, 0x9C, 0xD1, 0x7B, 0xCE, 0x6B, 0x2D, 0x7B, 0xCF, 0x73, 0x8E, 0x29, 0x45, 0x10, 0xA3, 0x10, 0x82, 0x10, 0xA2, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x08, 0xA3, 0x08, 0x83, 0x08, 0x82, 0x08, 0xA3, 0x21, 0x46, 0x31, 0x87, 0x29, 0x87, 0x21, 0x67, 0x21, 0x46, 0x21, 0x46, 0x42, 0x29, 0x94, 0xB3, 0x8C, 0x91, 0x6B, 0x4C, 0xA4, 0xF2, 0x9C, 0x90, 0xAD, 0x11, 0xBD, 0x51, 0xC5, 0x92, 0xB4, 0xF0, 0x94, 0x6F, 0xA4, 0xD0, 0xA4, 0xD1, 0x94, 0x6F, 0xA4, 0xD1, 0xAD, 0x32, 0xB5, 0x93, 0xA4, 0xF1, 0xA4, 0xF1, 0x9C, 0x8F, 0xA4, 0xF0, 0xAD, 0x31, 0xB5, 0x52, 0xAC, 0xF0, 0xA4, 0xD0, 0xA4, 0xAF, 0x94, 0x4E, 0xA4, 0xF0, 0x8C, 0x2D, 0x9C, 0x6E, 0x9C, 0x8F, 0xB5, 0x10, 0xBD, 0x31, 0xA4, 0x6E, 0x94, 0x4E, 0x6B, 0x0B, 0x31, 0x85, 0x39, 0xE7, 0x5A, 0xAA, 0x4A, 0x28, 0x39, 0xC6, 0x4A, 0x48, 0x52, 0x89, 0x42, 0x08, 0x4A, 0x69, 0x73, 0x8E, 0x73, 0xAE, 0x73, 0x8E, 0x83, 0xEF, 0x9C, 0xB3, 0xB5, 0x96, 0xC5, 0xF7, 0xCE, 0x17, 0xDE, 0x98, 0xAD, 0x12, 0xA4, 0xAF, 0xAD, 0x10, 0xAC, 0xF0, 0xB5, 0x11, 0xBD, 0x51, 0xBD, 0x31, 0xB5, 0x30, 0xB5, 0x31, 0xB5, 0x52, 0xB5, 0x74, 0x9C, 0xD3, 0x8C, 0x51, 0x9C, 0x90, 0xAC, 0xAF, 0xA4, 0x8E, 0xA4, 0x8E, 0xA4, 0x8E, 0xAC, 0xCF, 0xAC, 0xCF, 0xC5, 0x71, 0xBD, 0x31, 0xC5, 0x71, 0xCD, 0x92, 0xC5, 0x71, 0xBD, 0x51, 0xB5, 0x31, 0xAC, 0xD0, 0xA4, 0xAF, 0xB5, 0x11, 0xD6, 0x15, 0xBD, 0x72, 0xAC, 0xB0, 0x83, 0x8B, 0x8B, 0xED, 0xC5, 0xB4, 0x8C, 0x2E, 0x9C, 0xB0, 0x8C, 0x2E, 0x8C, 0x2F, 0x8C, 0x4F, 0xAD, 0x52, 0xA5, 0x12, 0xA5, 0x12, 0xAD, 0x32, 0xAD, 0x53, 0x6B, 0x4C, 0x41, 0xE7, 0x42, 0x07, 0x42, 0x07, 0x42, 0x07, 0x42, 0x28, 0x29, 0x65, 0x31, 0x85, 0x31, 0x85, 0x39, 0xC6, 0x41, 0xE7, 0x42, 0x28, 0x29, 0x45, 0x31, 0x65, 0x62, 0xCA, 0x8B, 0xEE, 0xB5, 0x74, 0xC5, 0xD5, 0xBD, 0xB4, 0x9C, 0xB0, 0x94, 0x4E, 0x9C, 0x8F, 0x9C, 0xB0, 0xB5, 0x53, 0xD6, 0x57, 0xCE, 0x56, 0xC5, 0xD4, 0xC5, 0xF5, 0xAD, 0x32, 0xAD, 0x52, 0xC5, 0xB4, 0xD6, 0x36, 0xD6, 0x35, 0xD6, 0x15, 0xD6, 0x15, 0xCD, 0xD4, 0xB5, 0x11, 0xB5, 0x52, 0xB5, 0x52, 0xBD, 0xB4, 0xBD, 0x93, 0xAC, 0xF1, 0xAC, 0xF1, 0xAC, 0xF1, 0x7B, 0xAD, 0x52, 0x69, 0x21, 0x04, 0x18, 0xC4, 0x10, 0xC3, 0x18, 0xC4, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x10, 0xA3, 0x10, 0xC4, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC3, 0x10, 0xC4, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xC4, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x18, 0xE4, 0x18, 0xE5, 0x19, 0x05, 0x18, 0xE5, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x18, 0xE5, 0x19, 0x05, 0x18, 0xE5, 0x18, 0xE5, 0x18, 0xE5, 0x18, 0xE5, 0x18, 0xE5, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x26, 0x21, 0x26, 0x21, 0x46, 0x29, 0x46, 0x29, 0x46, 0x21, 0x46, 0x21, 0x46, 0x21, 0x46, 0x29, 0x67, 0x29, 0x67, 0x21, 0x26, 0x29, 0x67, 0x31, 0x87, 0x29, 0x66, 0x21, 0x46, 0x39, 0xC9, 0x52, 0x8B, 0x63, 0x0C, 0xAD, 0x53, 0xD6, 0x77, 0xB5, 0x94, 0xB5, 0x73, 0xCE, 0x36, 0xCE, 0x36, 0xCE, 0x36, 0xC5, 0xF5, 0xBD, 0xD4, 0xBD, 0x94, 0xBD, 0xB4, 0xD6, 0x56, 0xB5, 0x53, 0xB5, 0x73, 0xBD, 0x94, 0xBD, 0xB4, 0xA4, 0xD1, 0xB5, 0x73, 0xB5, 0x32, 0xB5, 0x73, 0xAD, 0x12, 0xAD, 0x12, 0xAD, 0x11, 0xAD, 0x12, 0xB5, 0x53, 0xAD, 0x12, 0xB5, 0x73, 0x6B, 0x2C, 0x29, 0x46, 0x18, 0xC3, 0x10, 0xA2, 0x21, 0x04, 0x4A, 0x08, 0x5A, 0xA9, 0x62, 0xEA, 0x74, 0x8A, 0x53, 0xA6, 0x5B, 0xE7, 0x53, 0xA8, 0x3A, 0xC5, 0x43, 0x05, 0x43, 0x04, 0x53, 0x65, 0x43, 0x24, 0x7C, 0xEB, 0x53, 0xC6, 0x4B, 0x44, 0x6C, 0x29, 0x8D, 0x0E, 0x6B, 0xEA, 0x5B, 0x67, 0xAD, 0xF2, 0xBE, 0x76, 0xA5, 0x53, 0x84, 0x0F, 0x94, 0xB1, 0x94, 0xB1, 0x8C, 0x71, 0x9C, 0xD2, 0x9C, 0xF2, 0xA5, 0x13, 0x94, 0x90, 0x9C, 0xB0, 0xA4, 0xF1, 0xA4, 0xF2, 0x94, 0xB1, 0x94, 0x91, 0x8C, 0x50, 0x84, 0x0F, 0x7B, 0xEF, 0x7B, 0xCF, 0x73, 0x8E, 0x6B, 0x4D, 0x63, 0x2E, 0x63, 0x2E, 0x63, 0x2E, 0x63, 0x2E, 0x6B, 0x4E, 0x63, 0x0E, 0x52, 0xAC, 0x4A, 0x6B, 0x42, 0x2A, 0x41, 0xE9, 0x39, 0xC8, 0x29, 0x67, 0x29, 0x46, 0x21, 0x04, 0x18, 0xE4, 0x18, 0xE4, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x08, 0x83, 0x08, 0x83, 0x21, 0x25, 0x29, 0x46, 0x31, 0xC8, 0x31, 0xA8, 0x29, 0x67, 0x21, 0x46, 0x21, 0x46, 0x4A, 0x6B, 0xBE, 0x18, 0xDE, 0xFC, 0x94, 0xB2, 0x94, 0x50, 0xBD, 0xB4, 0xBD, 0x71, 0xC5, 0x92, 0xB5, 0x31, 0xC5, 0xD4, 0xC6, 0x16, 0xC5, 0xF5, 0xB5, 0x73, 0xBD, 0xB4, 0xC6, 0x16, 0xCE, 0x36, 0xC5, 0xF5, 0xB5, 0x94, 0xBD, 0x94, 0xC6, 0x16, 0xB5, 0x73, 0xBD, 0xB4, 0xBD, 0xB4, 0xBD, 0xD4, 0xB5, 0x73, 0xAD, 0x52, 0xB5, 0x94, 0xAD, 0x32, 0xAD, 0x32, 0xB5, 0x93, 0xBD, 0x92, 0xB5, 0x10, 0xA4, 0xAF, 0xBD, 0x93, 0xBD, 0xD4, 0x9C, 0xD1, 0x6B, 0x2B, 0x52, 0x89, 0x4A, 0x48, 0x31, 0x85, 0x39, 0xC6, 0x39, 0xE7, 0x4A, 0x48, 0x5A, 0xCB, 0x5A, 0xAA, 0x6B, 0x2D, 0x8C, 0x30, 0x94, 0x92, 0xA4, 0xF3, 0x94, 0x71, 0xB5, 0x75, 0xCE, 0x17, 0xCE, 0x17, 0xE6, 0xDA, 0x94, 0x50, 0xCE, 0x15, 0xCD, 0xF4, 0xA4, 0xB0, 0x94, 0x2D, 0x9C, 0x8E, 0x94, 0x2C, 0x8B, 0xEC, 0xA4, 0xB0, 0xB5, 0x75, 0x9C, 0xD3, 0x83, 0xF0, 0x9C, 0xB1, 0xBD, 0x51, 0xCD, 0x92, 0xCD, 0xB2, 0xC5, 0x51, 0x9C, 0x4D, 0x9C, 0x6D, 0xA4, 0x8E, 0xAC, 0xEF, 0xAC, 0xAE, 0xB4, 0xEF, 0xBD, 0x31, 0xC5, 0x72, 0xCD, 0x92, 0xC5, 0x92, 0xC5, 0xB2, 0xC5, 0x51, 0xBD, 0x30, 0xC5, 0x51, 0xC5, 0x71, 0xC5, 0x72, 0xC5, 0x93, 0xC5, 0x94, 0xC5, 0xD5, 0xBD, 0x94, 0xB5, 0x73, 0xBD, 0x94, 0xB5, 0x53, 0xB5, 0x73, 0xB5, 0x53, 0xAD, 0x32, 0xAD, 0x12, 0xAD, 0x12, 0x7B, 0xAD, 0x41, 0xE7, 0x4A, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x07, 0x4A, 0x48, 0x42, 0x28, 0x39, 0xA6, 0x39, 0xE7, 0x42, 0x07, 0x29, 0x65, 0x29, 0x44, 0x42, 0x07, 0x83, 0xEF, 0x73, 0x6D, 0x8C, 0x0F, 0xAD, 0x32, 0xAD, 0x32, 0x9C, 0xB0, 0xA4, 0xF0, 0xB5, 0x73, 0xD6, 0x56, 0xD6, 0x56, 0xCE, 0x56, 0xCE, 0x35, 0xCE, 0x15, 0xBD, 0xB4, 0xAD, 0x32, 0xC5, 0xD4, 0xCE, 0x15, 0xD6, 0x56, 0xD6, 0x76, 0xD6, 0x35, 0xD6, 0x15, 0xC5, 0xB3, 0x94, 0x0D, 0xBD, 0x73, 0xBD, 0x72, 0xA4, 0xD0, 0xC5, 0xD4, 0xC5, 0xB4, 0xC5, 0xB4, 0xC5, 0xB3, 0xCD, 0xD4, 0x94, 0x2F, 0x6B, 0x0B, 0x52, 0x89, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0xC4, 0x10, 0xC4, 0x18, 0xC4, 0x10, 0xC4, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x19, 0x05, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE5, 0x18, 0xE5, 0x18, 0xE5, 0x18, 0xE5, 0x18, 0xE5, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE5, 0x21, 0x05, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x21, 0x25, 0x21, 0x26, 0x21, 0x46, 0x29, 0x66, 0x21, 0x46, 0x29, 0x67, 0x29, 0x46, 0x29, 0x46, 0x21, 0x46, 0x19, 0x05, 0x21, 0x05, 0x21, 0x26, 0x21, 0x46, 0x19, 0x05, 0x29, 0x66, 0x39, 0xE8, 0x4A, 0x6A, 0x6B, 0x4D, 0x94, 0x90, 0x94, 0x70, 0xD6, 0x77, 0xDE, 0xB8, 0xCE, 0x56, 0xD6, 0x97, 0xD6, 0x77, 0xD6, 0x57, 0xCE, 0x36, 0xD6, 0x56, 0xD6, 0x77, 0xD6, 0x56, 0xD6, 0x76, 0xD6, 0x97, 0xD6, 0x77, 0x9C, 0x90, 0x8C, 0x0E, 0xAD, 0x32, 0xC5, 0xF5, 0xBD, 0x93, 0xB5, 0x73, 0xBD, 0xB4, 0xB5, 0x73, 0xAD, 0x32, 0xB5, 0x73, 0xBD, 0x93, 0x9C, 0xB1, 0x31, 0xA6, 0x18, 0xC4, 0x10, 0xA3, 0x18, 0xC3, 0x4A, 0x49, 0x4A, 0x28, 0x4A, 0x28, 0x64, 0x28, 0x5B, 0xE8, 0x4B, 0x45, 0x4B, 0x46, 0x3A, 0xE5, 0x43, 0x25, 0x3A, 0xE3, 0x3A, 0xE3, 0x3A, 0xE4, 0x5B, 0xC7, 0x3A, 0xC3, 0x43, 0x24, 0x53, 0x85, 0x5B, 0x86, 0x5B, 0x87, 0x84, 0x8C, 0xA5, 0x71, 0xA5, 0x52, 0x94, 0xB0, 0x31, 0x86, 0x39, 0xC8, 0x39, 0xE8, 0x3A, 0x09, 0x42, 0x09, 0x42, 0x29, 0x42, 0x4A, 0x4A, 0x4A, 0x4A, 0x6B, 0x52, 0x8B, 0x4A, 0x8B, 0x4A, 0x8B, 0x52, 0xAB, 0x52, 0xAC, 0x5B, 0x0D, 0x63, 0x2E, 0x63, 0x2D, 0x63, 0x4E, 0x73, 0xB0, 0x73, 0x90, 0x73, 0x90, 0x73, 0x8F, 0x6B, 0x4E, 0x6B, 0x4E, 0x6B, 0x4E, 0x73, 0x8E, 0x6B, 0x4D, 0x4A, 0x6B, 0x52, 0xAB, 0x42, 0x09, 0x21, 0x26, 0x18, 0xE4, 0x19, 0x04, 0x18, 0xC4, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x08, 0xA3, 0x08, 0xA3, 0x21, 0x46, 0x73, 0xAF, 0x94, 0xD4, 0x8C, 0x94, 0x73, 0xB0, 0x4A, 0x4B, 0x29, 0x67, 0x31, 0xA8, 0x29, 0x87, 0x42, 0x4A, 0xAD, 0xB7, 0xEF, 0x9E, 0xC6, 0x38, 0xA4, 0xD1, 0xBD, 0x51, 0xC5, 0x71, 0xB5, 0x31, 0xC5, 0xF4, 0xC6, 0x16, 0xC5, 0xF5, 0xC5, 0xF5, 0xCE, 0x56, 0xC5, 0xF5, 0xBD, 0xD4, 0xC5, 0xF5, 0xBD, 0xD5, 0xC5, 0xF5, 0x84, 0x0E, 0x9C, 0xD1, 0xC5, 0xF5, 0xC6, 0x15, 0xC6, 0x36, 0xC5, 0xF5, 0xBD, 0xD5, 0xBD, 0xB4, 0xBD, 0xD4, 0xBD, 0xF5, 0xD6, 0x97, 0xC5, 0xB3, 0xB4, 0xF0, 0xAC, 0xF0, 0xC6, 0x15, 0xBD, 0xD5, 0x84, 0x0E, 0x5A, 0xCA, 0x39, 0xC6, 0x52, 0x69, 0x52, 0x69, 0x42, 0x07, 0x42, 0x08, 0x52, 0x69, 0x5A, 0xAA, 0x63, 0x0C, 0x73, 0x8E, 0x8C, 0x30, 0x94, 0x72, 0xAD, 0x14, 0xA4, 0xF3, 0xB5, 0x96, 0xBD, 0xD7, 0xB5, 0x55, 0xBD, 0xB6, 0x9C, 0x91, 0xB5, 0x53, 0xAD, 0x11, 0x7B, 0x8C, 0x7B, 0x8B, 0xA4, 0xF0, 0xAD, 0x10, 0x94, 0x4E, 0x9C, 0xD1, 0xB5, 0x75, 0x9C, 0xB3, 0x7B, 0xCF, 0x7B, 0xAD, 0xA4, 0xAF, 0xC5, 0x51, 0xBD, 0x30, 0x93, 0xEC, 0x8C, 0x0D, 0xAC, 0xF0, 0x9C, 0x8E, 0x94, 0x2D, 0x8B, 0xED, 0x7B, 0x8B, 0x7B, 0x6B, 0x8B, 0xCC, 0x83, 0xAC, 0x8B, 0xCC, 0x8B, 0xCC, 0x8B, 0xED, 0x7B, 0x6A, 0x73, 0x2A, 0x7B, 0x6A, 0x8C, 0x0C, 0x9C, 0x6E, 0xA4, 0xF0, 0x9C, 0x6F, 0x94, 0x4F, 0xAD, 0x12, 0xB5, 0x53, 0xA4, 0xD1, 0xB5, 0x53, 0xAD, 0x12, 0xA4, 0xD1, 0xA4, 0xD1, 0x9C, 0xF1, 0x7B, 0xAD, 0x29, 0x45, 0x4A, 0x48, 0x4A, 0x48, 0x42, 0x07, 0x39, 0xC6, 0x4A, 0x69, 0x39, 0xC6, 0x4A, 0x28, 0x52, 0xAA, 0x5A, 0xCB, 0x5A, 0xCA, 0x39, 0xE7, 0x7B, 0xAE, 0x5A, 0xAA, 0x83, 0xAE, 0x94, 0x30, 0x8B, 0xEE, 0xAD, 0x12, 0xBD, 0x73, 0xB5, 0x53, 0xAD, 0x32, 0xAD, 0x12, 0xAC, 0xF1, 0xA4, 0xD1, 0xA4, 0xB0, 0xAD, 0x11, 0xA4, 0xD0, 0x94, 0x70, 0x9C, 0xB0, 0xB5, 0x32, 0xBD, 0x93, 0xBD, 0xB4, 0xC5, 0xB4, 0xBD, 0x52, 0xB5, 0x11, 0xA4, 0xD0, 0xC5, 0xB4, 0xCD, 0xF4, 0xC5, 0x93, 0xD6, 0x56, 0xDE, 0x76, 0xDE, 0x76, 0xE6, 0x97, 0xDE, 0x97, 0xC5, 0xB4, 0xCD, 0xD5, 0x62, 0xCA, 0x18, 0xC3, 0x10, 0xC4, 0x18, 0xE4, 0x18, 0xC3, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xC4, 0x10, 0xA3, 0x18, 0xE4, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xC4, 0x10, 0xC4, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0xC3, 0x10, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x10, 0xC3, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x05, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x19, 0x05, 0x19, 0x05, 0x21, 0x05, 0x21, 0x26, 0x29, 0x67, 0x21, 0x46, 0x29, 0x67, 0x29, 0x67, 0x21, 0x46, 0x21, 0x05, 0x19, 0x05, 0x18, 0xE5, 0x18, 0xE5, 0x21, 0x26, 0x19, 0x05, 0x21, 0x26, 0x31, 0x87, 0x39, 0xC8, 0x52, 0x8A, 0x7B, 0xAE, 0x94, 0x91, 0xD6, 0x78, 0xDE, 0xD8, 0xD6, 0x97, 0xD6, 0x77, 0xD6, 0x97, 0xD6, 0x97, 0xDE, 0xB8, 0xDE, 0xB7, 0xD6, 0x56, 0xCE, 0x56, 0xD6, 0x76, 0xDE, 0xB7, 0xCE, 0x35, 0x9C, 0xB0, 0xAD, 0x32, 0xBD, 0xD4, 0xCE, 0x15, 0xBD, 0x93, 0xBD, 0x93, 0xBD, 0x93, 0xBD, 0x93, 0xB5, 0x73, 0xB5, 0x52, 0xBD, 0x93, 0xBD, 0xD4, 0x5A, 0xA9, 0x21, 0x04, 0x18, 0xA3, 0x10, 0x82, 0x41, 0xE7, 0x4A, 0x28, 0x41, 0xE7, 0x53, 0x86, 0x53, 0x86, 0x43, 0x05, 0x42, 0xE5, 0x4B, 0x67, 0x43, 0x05, 0x5B, 0xC7, 0x53, 0x86, 0x4B, 0x86, 0x4B, 0x86, 0x53, 0x85, 0x5B, 0xC7, 0x63, 0xC7, 0x7C, 0x4A, 0x94, 0xCD, 0xA5, 0x0F, 0xA5, 0x0F, 0xA4, 0xF0, 0x62, 0xEA, 0x18, 0xC3, 0x21, 0x25, 0x29, 0x46, 0x29, 0x66, 0x29, 0x66, 0x31, 0xA7, 0x4A, 0x49, 0x63, 0x0B, 0x6B, 0x2C, 0x73, 0x6D, 0x73, 0x8D, 0x73, 0x6D, 0x73, 0x6D, 0x7B, 0xAE, 0x83, 0xAE, 0x73, 0x6D, 0x6B, 0x4C, 0x6B, 0x2C, 0x6B, 0x6D, 0x6B, 0x4D, 0x7B, 0x8E, 0x8C, 0x0F, 0xAD, 0x33, 0xD6, 0x57, 0xDE, 0x77, 0xE6, 0x97, 0xD6, 0x36, 0x62, 0xA9, 0x41, 0xE8, 0x4A, 0x49, 0x21, 0x25, 0x10, 0xA3, 0x10, 0xA3, 0x08, 0x82, 0x08, 0x82, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC4, 0x5B, 0x2D, 0xD6, 0xDC, 0xE7, 0x7E, 0xEF, 0x7E, 0xEF, 0x5E, 0xD6, 0x7B, 0x7B, 0xD1, 0x29, 0x67, 0x29, 0xA8, 0x29, 0xA8, 0x3A, 0x4B, 0x94, 0xF4, 0xEF, 0x7E, 0xE6, 0xFB, 0xBD, 0x32, 0xB5, 0x10, 0xBD, 0x72, 0xCE, 0x36, 0xCE, 0x77, 0xCE, 0x56, 0xC5, 0xF5, 0xC6, 0x15, 0xA4, 0xF1, 0x94, 0x90, 0xC6, 0x15, 0xC6, 0x16, 0xC5, 0xF6, 0xA5, 0x33, 0xB5, 0xB5, 0xCE, 0x36, 0xC6, 0x15, 0xC6, 0x15, 0xC5, 0xF5, 0xBD, 0xD5, 0xC6, 0x15, 0xC6, 0x36, 0xC6, 0x15, 0xD6, 0x97, 0xC5, 0xB3, 0xAC, 0xEF, 0xB5, 0x31, 0xC6, 0x15, 0xB5, 0x73, 0xB5, 0x74, 0x94, 0x70, 0x29, 0x45, 0x39, 0xC6, 0x52, 0x89, 0x31, 0x86, 0x39, 0xC6, 0x4A, 0x48, 0x52, 0x8A, 0x63, 0x0B, 0x7B, 0xAE, 0x7B, 0xAE, 0x7B, 0xCF, 0x8C, 0x31, 0xA4, 0xF4, 0xAD, 0x55, 0xA5, 0x14, 0x8C, 0x51, 0x73, 0x8E, 0x8C, 0x50, 0x94, 0x70, 0x94, 0x70, 0x83, 0xEE, 0x8C, 0x2E, 0xAD, 0x11, 0xA4, 0xF0, 0x94, 0x8F, 0xBD, 0x95, 0xAD, 0x35, 0x8C, 0x72, 0x7B, 0xCF, 0x6B, 0x4C, 0xA4, 0xAF, 0xBD, 0x51, 0xAC, 0xAF, 0x83, 0x8B, 0xA4, 0xF0, 0xB5, 0x73, 0xA4, 0xD0, 0x94, 0x8F, 0x83, 0xCD, 0x73, 0x4B, 0x62, 0xEA, 0x5A, 0xA9, 0x62, 0xEA, 0x6B, 0x2B, 0x62, 0xEA, 0x83, 0xED, 0x62, 0xCA, 0x5A, 0xCA, 0x62, 0xCA, 0x73, 0x4B, 0x94, 0x4E, 0x94, 0x8F, 0x83, 0xCD, 0x83, 0xCC, 0xA4, 0xF1, 0xAD, 0x32, 0xB5, 0x33, 0xBD, 0x93, 0xC5, 0xB4, 0xC5, 0xB5, 0xAD, 0x33, 0xAD, 0x12, 0xAD, 0x33, 0x83, 0xEE, 0x39, 0xC6, 0x39, 0xE7, 0x42, 0x07, 0x41, 0xE7, 0x39, 0xE7, 0x42, 0x07, 0x5A, 0xCA, 0x5A, 0xCA, 0x5A, 0xAA, 0x4A, 0x69, 0x5A, 0xCB, 0xB5, 0x96, 0xAD, 0x34, 0x6A, 0xEB, 0x94, 0x0F, 0x8B, 0xCE, 0xAC, 0xF2, 0xB5, 0x53, 0xB5, 0x53, 0xAD, 0x12, 0xB5, 0x53, 0xBD, 0x73, 0xB5, 0x73, 0xBD, 0x94, 0xBD, 0xB4, 0xC5, 0xD5, 0xCD, 0xF5, 0xCD, 0xF5, 0xC5, 0xB4, 0xBD, 0xB4, 0xBD, 0xB3, 0xC5, 0xB4, 0xC5, 0xB4, 0xCD, 0xD4, 0xCD, 0xD5, 0xCD, 0xF5, 0xCD, 0xD4, 0xC5, 0xB4, 0xC5, 0xB3, 0xB5, 0x32, 0xB5, 0x32, 0xBD, 0x32, 0xB5, 0x11, 0xAC, 0xF0, 0xAC, 0xF1, 0x41, 0xC6, 0x10, 0xC3, 0x10, 0xA3, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x82, 0x08, 0x82, 0x08, 0x82, 0x08, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x10, 0xC4, 0x10, 0xA3, 0x10, 0xC4, 0x10, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x04, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x04, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x26, 0x19, 0x05, 0x21, 0x05, 0x21, 0x46, 0x29, 0x67, 0x21, 0x26, 0x29, 0x46, 0x29, 0x67, 0x21, 0x26, 0x18, 0xE5, 0x18, 0xE4, 0x10, 0xC3, 0x18, 0xC4, 0x21, 0x25, 0x21, 0x26, 0x21, 0x26, 0x29, 0x67, 0x31, 0xA8, 0x52, 0x8B, 0x94, 0xB2, 0xBD, 0xB5, 0x8C, 0x2F, 0xC5, 0xF6, 0xD6, 0x97, 0xD6, 0x77, 0xD6, 0x97, 0xDE, 0xB8, 0xCE, 0x35, 0xD6, 0x97, 0xD6, 0x97, 0xD6, 0x77, 0xD6, 0x97, 0xDE, 0xB7, 0xDE, 0xD7, 0xBD, 0xB3, 0xAD, 0x32, 0xB5, 0x73, 0xC6, 0x15, 0xB5, 0x73, 0xBD, 0x93, 0xBD, 0x93, 0xBD, 0xD4, 0xAD, 0x11, 0xCE, 0x35, 0xC5, 0xF4, 0xCE, 0x56, 0x8C, 0x2F, 0x29, 0x45, 0x18, 0xC3, 0x10, 0xA2, 0x29, 0x65, 0x42, 0x07, 0x41, 0xC6, 0x5B, 0xC8, 0x5B, 0xC7, 0x5B, 0xC7, 0x42, 0xE5, 0x43, 0x45, 0x32, 0x82, 0x4B, 0x45, 0x5B, 0xE7, 0x43, 0x25, 0x53, 0x86, 0x74, 0x8A, 0x7C, 0x6B, 0x74, 0x0A, 0x63, 0x89, 0x73, 0xA9, 0x84, 0x0B, 0x8C, 0x4D, 0xA4, 0xCF, 0xA4, 0xD0, 0x8C, 0x4E, 0x8C, 0x4F, 0x94, 0x4F, 0x9C, 0xB1, 0x94, 0x70, 0x8C, 0x2F, 0x9C, 0x90, 0xA4, 0xF0, 0xB5, 0x11, 0xB5, 0x10, 0xB5, 0x11, 0xB5, 0x11, 0xB4, 0xF0, 0xAC, 0xF0, 0xB5, 0x31, 0xBD, 0x51, 0xB5, 0x11, 0xB5, 0x10, 0xAC, 0xF0, 0xAC, 0xF0, 0xAC, 0xCF, 0xAC, 0xAF, 0xA4, 0x8E, 0xA4, 0x8E, 0xA4, 0x6D, 0x9C, 0x6D, 0xB5, 0x10, 0xAC, 0xF0, 0x9C, 0x6F, 0x73, 0x2B, 0x41, 0xE6, 0x4A, 0x6A, 0x8C, 0x72, 0x29, 0x66, 0x08, 0x82, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x21, 0x25, 0x94, 0xF4, 0xD7, 0x1C, 0xDF, 0x5D, 0xE7, 0x5D, 0xE7, 0x5E, 0xEF, 0x7F, 0xE7, 0x3E, 0x94, 0xB4, 0x19, 0x05, 0x21, 0x46, 0x21, 0x88, 0x31, 0xC9, 0x73, 0xB0, 0xDE, 0xFC, 0xF7, 0x5C, 0xB5, 0x31, 0xCD, 0xD4, 0xD6, 0x76, 0xCE, 0x36, 0xC6, 0x15, 0xCE, 0x36, 0xCE, 0x77, 0xC6, 0x15, 0xBD, 0xD5, 0xB5, 0x94, 0xC5, 0xF5, 0xAD, 0x53, 0xBD, 0xD5, 0xC6, 0x16, 0xCE, 0x56, 0xC5, 0xF5, 0xC6, 0x15, 0xBD, 0xF5, 0xBD, 0xF5, 0xC6, 0x16, 0xAD, 0x53, 0xBD, 0xB4, 0xC5, 0xF5, 0xBD, 0x92, 0xB5, 0x10, 0xB5, 0x31, 0xB5, 0x73, 0xBD, 0x94, 0xBD, 0xD5, 0xCE, 0x36, 0x6B, 0x4C, 0x29, 0x45, 0x42, 0x08, 0x42, 0x07, 0x39, 0xA6, 0x39, 0xA6, 0x4A, 0x49, 0x52, 0x8A, 0x5A, 0xAA, 0x5A, 0xCB, 0x6B, 0x2D, 0x73, 0x6E, 0x94, 0x92, 0x9C, 0xB2, 0x7B, 0xAE, 0x73, 0x6D, 0x84, 0x10, 0xB5, 0x95, 0xB5, 0x95, 0x84, 0x0F, 0x94, 0x90, 0x94, 0x6F, 0x94, 0x8F, 0xA4, 0xD0, 0xA4, 0xD1, 0xBD, 0xB5, 0x94, 0xB3, 0x84, 0x31, 0x83, 0xEF, 0x7B, 0xAD, 0xA4, 0xCF, 0xC5, 0x51, 0x9C, 0x4E, 0x73, 0x6B, 0x83, 0xED, 0x9C, 0xD0, 0x94, 0x6F, 0xB5, 0x73, 0xAD, 0x52, 0x73, 0x4B, 0x62, 0xEA, 0x63, 0x0B, 0x62, 0xEB, 0x62, 0xEB, 0x5A, 0xCA, 0x8C, 0x4F, 0x7B, 0xAD, 0x7B, 0xCD, 0x6B, 0x4B, 0x7B, 0xAD, 0x8C, 0x2E, 0x8C, 0x2E, 0x73, 0x4B, 0x73, 0x8C, 0xAD, 0x32, 0xAD, 0x32, 0xBD, 0x94, 0xCE, 0x15, 0xCD, 0xF5, 0xC5, 0xF5, 0xB5, 0x74, 0xAD, 0x12, 0xAD, 0x32, 0xC5, 0xD5, 0x94, 0x4F, 0x31, 0x65, 0x4A, 0x68, 0x39, 0xC6, 0x39, 0xC6, 0x52, 0x89, 0x5A, 0xEB, 0x42, 0x28, 0x52, 0x89, 0x39, 0xE7, 0x52, 0xAA, 0x84, 0x30, 0xCE, 0x79, 0x9C, 0xB3, 0x73, 0x0C, 0x8B, 0xCE, 0x94, 0x2F, 0x9C, 0x50, 0x9C, 0x90, 0x8C, 0x2E, 0x9C, 0x8F, 0x9C, 0x90, 0x9C, 0x90, 0xAD, 0x12, 0xA4, 0xF1, 0xA4, 0xD0, 0x8B, 0xED, 0xAD, 0x32, 0xB5, 0x33, 0xB5, 0x32, 0x9C, 0xAF, 0x94, 0x4E, 0x8C, 0x2E, 0x94, 0x6F, 0x94, 0x6F, 0x9C, 0x4F, 0x9C, 0x6F, 0xAC, 0xF0, 0xB5, 0x31, 0xAC, 0xF1, 0xBD, 0x73, 0xBD, 0x73, 0xD6, 0x15, 0xCD, 0xD4, 0x9C, 0x90, 0x39, 0x85, 0x18, 0xC3, 0x10, 0xC3, 0x10, 0xC3, 0x18, 0xC4, 0x19, 0x05, 0x18, 0xE4, 0x10, 0x83, 0x10, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x10, 0x83, 0x10, 0x83, 0x08, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xE4, 0x19, 0x04, 0x18, 0xE4, 0x10, 0xC4, 0x10, 0xC3, 0x10, 0xC4, 0x10, 0xC4, 0x18, 0xE4, 0x10, 0xC4, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0xA3, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x05, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x04, 0x19, 0x05, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x05, 0x21, 0x26, 0x21, 0x25, 0x21, 0x26, 0x19, 0x05, 0x21, 0x25, 0x21, 0x26, 0x21, 0x46, 0x21, 0x26, 0x21, 0x46, 0x21, 0x26, 0x21, 0x05, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0xA4, 0x18, 0xE4, 0x21, 0x05, 0x21, 0x26, 0x21, 0x26, 0x21, 0x46, 0x31, 0x87, 0x4A, 0x4A, 0xA5, 0x34, 0xB5, 0x95, 0x8C, 0x2F, 0xDE, 0xB9, 0xDE, 0xB8, 0xDE, 0x97, 0xE6, 0xF9, 0xBD, 0xB4, 0xC6, 0x15, 0xD6, 0x97, 0xD6, 0x77, 0xD6, 0x77, 0xD6, 0x76, 0xD6, 0x76, 0xD6, 0x96, 0xBD, 0xB4, 0xAD, 0x32, 0xB5, 0x52, 0xCE, 0x36, 0xC5, 0xF4, 0xC5, 0xF4, 0xCE, 0x15, 0xCE, 0x15, 0xBD, 0x93, 0xCE, 0x35, 0xCE, 0x14, 0xC5, 0xF4, 0xA4, 0xF1, 0x5A, 0xCB, 0x20, 0xE4, 0x18, 0xC3, 0x21, 0x04, 0x4A, 0x28, 0x41, 0xC6, 0x74, 0x8B, 0x74, 0x69, 0x74, 0x6A, 0x64, 0x08, 0x53, 0xA6, 0x64, 0x28, 0x4B, 0x45, 0x4B, 0x45, 0x32, 0x62, 0x63, 0xC9, 0x74, 0x2B, 0x53, 0x28, 0x52, 0xE8, 0x6B, 0xAB, 0x53, 0x07, 0x4A, 0xE6, 0x6B, 0xAA, 0x73, 0x89, 0x9C, 0xAE, 0xB5, 0x70, 0xBD, 0xB2, 0xA5, 0x11, 0xA5, 0x11, 0x9C, 0xD0, 0x9C, 0x90, 0x94, 0x4E, 0xA4, 0xF0, 0xCD, 0xF3, 0xA4, 0xAE, 0xC5, 0xB3, 0xC5, 0xD3, 0xBD, 0x52, 0xBD, 0x92, 0xCD, 0xD3, 0xC5, 0x93, 0x9C, 0x6E, 0xAD, 0x10, 0xD6, 0x14, 0xCD, 0xF4, 0xB5, 0x31, 0x9C, 0x4D, 0xB4, 0xEF, 0xC5, 0xB2, 0xC5, 0xB2, 0xBD, 0x51, 0xA4, 0x6E, 0xBD, 0x31, 0xB5, 0x30, 0xAC, 0xF0, 0xB5, 0x53, 0xE7, 0x3B, 0xF7, 0x7D, 0x5A, 0xEB, 0x08, 0x82, 0x08, 0x82, 0x10, 0x83, 0x08, 0x82, 0x08, 0x83, 0x10, 0xC3, 0x3A, 0x09, 0xB5, 0xD8, 0xD6, 0xDB, 0xD7, 0x1C, 0xDF, 0x3D, 0xE7, 0x3E, 0xE7, 0x5E, 0xEF, 0x7E, 0xEF, 0x7F, 0xAD, 0x76, 0x31, 0xA8, 0x19, 0x05, 0x19, 0x26, 0x21, 0x66, 0x63, 0x4D, 0xE7, 0x3B, 0xE6, 0xB9, 0xB5, 0x31, 0xC5, 0xD3, 0xBD, 0xB3, 0xB5, 0x51, 0xB5, 0x52, 0xBD, 0xB4, 0xBD, 0xD4, 0xBD, 0xD5, 0xBD, 0x93, 0xC5, 0xD5, 0xC5, 0xF5, 0xC6, 0x16, 0xCE, 0x36, 0xCE, 0x56, 0xC6, 0x15, 0xC6, 0x16, 0xC5, 0xF5, 0xC6, 0x16, 0xD6, 0x77, 0xC6, 0x36, 0xBD, 0xD4, 0xC5, 0xF5, 0x9C, 0x8F, 0xBD, 0x30, 0xB5, 0x31, 0xC6, 0x15, 0xCE, 0x36, 0xC6, 0x36, 0xD6, 0x77, 0xBD, 0xB4, 0x41, 0xE7, 0x52, 0xAA, 0x63, 0x0B, 0x42, 0x07, 0x39, 0xC6, 0x39, 0xA6, 0x4A, 0x49, 0x52, 0x89, 0x5A, 0xAA, 0x6B, 0x2C, 0x73, 0x6E, 0x94, 0x92, 0x94, 0x71, 0x8C, 0x30, 0x83, 0xEF, 0x9C, 0xD2, 0x94, 0x71, 0xC5, 0xD7, 0xA5, 0x13, 0x9C, 0xB1, 0x94, 0x90, 0x94, 0x6F, 0xA5, 0x11, 0xAD, 0x33, 0xB5, 0x95, 0xA5, 0x14, 0x94, 0x72, 0x7B, 0xAE, 0x83, 0xCE, 0xAC, 0xD0, 0xBD, 0x50, 0x83, 0xAC, 0x7B, 0xCD, 0xA5, 0x12, 0xB5, 0x53, 0x9C, 0x90, 0x94, 0x6F, 0x94, 0x6F, 0x6B, 0x2B, 0x5A, 0xEA, 0x62, 0xEB, 0x5A, 0xCB, 0x62, 0xEB, 0x5A, 0xEA, 0xA5, 0x12, 0xA4, 0xF1, 0xA4, 0xD1, 0x84, 0x0E, 0x94, 0x6F, 0x9C, 0x90, 0xA4, 0xD0, 0x73, 0x4B, 0x7B, 0x8C, 0xBD, 0x94, 0xA4, 0xF1, 0xBD, 0x94, 0xC5, 0xF5, 0xC5, 0xD5, 0xC5, 0xF5, 0xB5, 0x94, 0xB5, 0x53, 0xA4, 0xF1, 0xAD, 0x32, 0xA4, 0xF2, 0x73, 0x8C, 0x8C, 0x50, 0x63, 0x0B, 0x39, 0xE7, 0x4A, 0x28, 0x5A, 0xCA, 0x42, 0x07, 0x4A, 0x49, 0x52, 0xAA, 0x52, 0xAA, 0x62, 0xEC, 0x9C, 0xF3, 0xAD, 0x34, 0x6B, 0x0B, 0x94, 0x0F, 0x8B, 0xCE, 0x94, 0x50, 0x83, 0xCE, 0x7B, 0xAD, 0x7B, 0xAD, 0xA4, 0xF1, 0xA4, 0xF1, 0xB5, 0x52, 0xAD, 0x32, 0xBD, 0xB4, 0xAD, 0x32, 0xAD, 0x32, 0xB5, 0x53, 0x9C, 0xB0, 0x94, 0x6F, 0x9C, 0x8F, 0x9C, 0x8F, 0xAD, 0x32, 0xA4, 0xF1, 0xA4, 0xF1, 0xA4, 0xD0, 0xA4, 0xD0, 0xA5, 0x10, 0x9C, 0xAF, 0xC5, 0xB4, 0xB5, 0x32, 0xC5, 0x93, 0xBD, 0x93, 0x9C, 0x6F, 0x39, 0x86, 0x18, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC3, 0x21, 0x25, 0x18, 0xE4, 0x10, 0xA3, 0x10, 0xA3, 0x08, 0x83, 0x10, 0x83, 0x10, 0x83, 0x10, 0x83, 0x08, 0x83, 0x10, 0x83, 0x08, 0x83, 0x10, 0xA3, 0x10, 0xC4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0x83, 0x10, 0xA3, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x18, 0xE4, 0x10, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x04, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x05, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x21, 0x05, 0x21, 0x25, 0x19, 0x05, 0x19, 0x05, 0x21, 0x05, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x46, 0x21, 0x26, 0x18, 0xE5, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE5, 0x19, 0x05, 0x21, 0x25, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x29, 0x87, 0x31, 0xA8, 0x94, 0xB2, 0xA5, 0x12, 0x8C, 0x2F, 0xE6, 0xFA, 0xD6, 0x97, 0xDE, 0xD8, 0xDE, 0xB8, 0x83, 0xCE, 0xDE, 0xB8, 0xDE, 0xB7, 0xD6, 0x97, 0xDE, 0x97, 0xDE, 0xB7, 0xD6, 0x96, 0xDE, 0xB7, 0xB5, 0x52, 0xAD, 0x12, 0xCE, 0x35, 0xD6, 0x35, 0xCE, 0x35, 0xCE, 0x14, 0xCE, 0x14, 0xCE, 0x35, 0xBD, 0xB3, 0xCE, 0x14, 0xC6, 0x14, 0xC5, 0xF4, 0xCE, 0x35, 0xC5, 0xF6, 0x39, 0xA7, 0x18, 0xE4, 0x18, 0xA3, 0x4A, 0x08, 0x39, 0xC6, 0x4B, 0x27, 0x3A, 0xC4, 0x5B, 0xC8, 0x42, 0xE4, 0x53, 0x86, 0x53, 0x86, 0x32, 0x42, 0x43, 0x05, 0x53, 0x48, 0x74, 0x0B, 0x74, 0x2C, 0x63, 0x8A, 0x95, 0x10, 0x9D, 0x31, 0x5B, 0xA9, 0x63, 0xE8, 0xA5, 0xAF, 0x9D, 0x4D, 0x7C, 0x69, 0xA5, 0x8E, 0xAD, 0x70, 0xAD, 0x11, 0xA4, 0xF1, 0x94, 0x4F, 0x94, 0x6F, 0x83, 0xED, 0xAD, 0x11, 0xCE, 0x34, 0xCE, 0x14, 0xD6, 0x55, 0xC5, 0xD3, 0xC5, 0xD3, 0xC5, 0xD4, 0xCE, 0x15, 0xC5, 0xD3, 0xCD, 0xD3, 0xB5, 0x31, 0xCD, 0xF4, 0xD6, 0x55, 0xBD, 0x51, 0x8B, 0xAB, 0xB5, 0x10, 0xAC, 0xCF, 0xAC, 0xAE, 0xDE, 0x34, 0x9C, 0x4D, 0xCD, 0xF4, 0xD6, 0x35, 0xBD, 0x92, 0xCE, 0x56, 0xEF, 0x7C, 0xEF, 0x7D, 0x8C, 0x31, 0x08, 0x63, 0x08, 0x82, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC3, 0x63, 0x6E, 0xC6, 0x79, 0xD6, 0xFC, 0xD6, 0xFC, 0xDE, 0xFC, 0xDF, 0x1C, 0xDF, 0x1C, 0xE7, 0x1D, 0xEF, 0x5E, 0xF7, 0xBE, 0xCE, 0x39, 0x41, 0xE8, 0x21, 0x46, 0x29, 0x87, 0x21, 0x45, 0x6B, 0x8E, 0xE7, 0x1A, 0xB5, 0x11, 0xB5, 0x10, 0xBD, 0x50, 0xBD, 0x51, 0xC5, 0x72, 0xBD, 0x31, 0xB5, 0x10, 0xAC, 0xEF, 0xA4, 0xAF, 0x9C, 0x8E, 0x9C, 0x6E, 0x9C, 0x4D, 0x94, 0x4D, 0x94, 0x4D, 0x94, 0x4E, 0x94, 0x2D, 0x9C, 0x8F, 0xAD, 0x11, 0xAD, 0x31, 0xAC, 0xF1, 0xA4, 0xAF, 0xAC, 0xF0, 0x9C, 0x8E, 0xB5, 0x10, 0xBD, 0x51, 0xD6, 0x56, 0xD6, 0x56, 0xCE, 0x15, 0xCE, 0x36, 0xD6, 0x77, 0xC5, 0xF5, 0xC5, 0xF5, 0xB5, 0x73, 0x5A, 0x88, 0x42, 0x07, 0x39, 0xC6, 0x41, 0xE7, 0x4A, 0x28, 0x52, 0x8A, 0x63, 0x0C, 0x73, 0x8E, 0x7B, 0xCF, 0x73, 0x6D, 0x7B, 0xCF, 0x8C, 0x51, 0x9C, 0xB2, 0xAD, 0x55, 0xBD, 0xD6, 0xBD, 0xD6, 0xA5, 0x13, 0xAD, 0x53, 0xA4, 0xF1, 0xA5, 0x11, 0xB5, 0x74, 0xAD, 0x54, 0x9C, 0xD3, 0xAD, 0x15, 0x73, 0x6D, 0x83, 0xEE, 0xA4, 0xCF, 0xB4, 0xEF, 0x7B, 0x8B, 0x94, 0x4F, 0xAD, 0x32, 0xB5, 0x52, 0xAD, 0x32, 0x9C, 0x90, 0x8C, 0x2F, 0x8C, 0x2F, 0x6B, 0x4C, 0x84, 0x0F, 0x73, 0x8D, 0x73, 0x6D, 0x63, 0x2B, 0xB5, 0x74, 0xAD, 0x11, 0xA4, 0xD1, 0x9C, 0xB0, 0xA4, 0xF1, 0x9C, 0xB0, 0x94, 0x8F, 0x73, 0x6B, 0x7B, 0xCD, 0xBD, 0xD5, 0xA4, 0xF2, 0xA5, 0x12, 0xB5, 0x94, 0xAD, 0x53, 0x9C, 0xB1, 0x9C, 0xB0, 0xA4, 0xD1, 0x94, 0x4F, 0x94, 0x4F, 0x8C, 0x4F, 0x73, 0x6C, 0x8C, 0x30, 0x83, 0xEE, 0x52, 0x89, 0x39, 0xC6, 0x5A, 0xAA, 0x52, 0x89, 0x5A, 0xCA, 0x5A, 0xCA, 0x5A, 0xCB, 0x6B, 0x2D, 0x62, 0xEC, 0x52, 0x8A, 0x41, 0xE7, 0x73, 0x4C, 0x7B, 0x4C, 0x7B, 0x8D, 0x6B, 0x0C, 0x62, 0xCB, 0x4A, 0x28, 0xA4, 0xD1, 0xBD, 0xD4, 0xB5, 0x53, 0xAD, 0x52, 0xB5, 0x73, 0xAD, 0x12, 0x9C, 0xD0, 0xB5, 0x73, 0x9C, 0xB0, 0xA4, 0xD1, 0x94, 0x6F, 0x8C, 0x2E, 0x9C, 0xD0, 0x94, 0x6F, 0x94, 0x4E, 0x8C, 0x2E, 0x8C, 0x4E, 0x94, 0x6F, 0x9C, 0x8F, 0xBD, 0x94, 0xBD, 0x73, 0xC5, 0xD4, 0xBD, 0x93, 0xA4, 0xB0, 0x39, 0x86, 0x18, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC3, 0x21, 0x25, 0x19, 0x04, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x82, 0x10, 0x83, 0x21, 0x05, 0x42, 0x08, 0x5A, 0xCA, 0x4A, 0x69, 0x29, 0x65, 0x18, 0xE4, 0x21, 0x05, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xC3, 0x18, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x18, 0xC4, 0x10, 0xA3, 0x18, 0xE4, 0x19, 0x04, 0x10, 0xC4, 0x10, 0xC4, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x05, 0x21, 0x05, 0x19, 0x05, 0x18, 0xE4, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x18, 0xE4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x19, 0x05, 0x21, 0x05, 0x18, 0xE5, 0x18, 0xC4, 0x19, 0x05, 0x21, 0x05, 0x18, 0xE5, 0x19, 0x05, 0x21, 0x26, 0x21, 0x25, 0x18, 0xE4, 0x18, 0xE5, 0x18, 0xE5, 0x19, 0x05, 0x19, 0x05, 0x21, 0x05, 0x21, 0x26, 0x21, 0x26, 0x21, 0x46, 0x31, 0x87, 0x31, 0x87, 0x5A, 0xCB, 0x9C, 0xD2, 0xBD, 0x94, 0xD6, 0x77, 0xD6, 0x77, 0xD6, 0x98, 0xD6, 0x78, 0x8C, 0x30, 0xE7, 0x1A, 0xDE, 0xD8, 0xD6, 0x77, 0xCE, 0x15, 0xC5, 0xF4, 0xDE, 0x96, 0xE6, 0xF8, 0xAD, 0x11, 0xA4, 0xB0, 0xDE, 0x96, 0xE6, 0xB6, 0xDE, 0x96, 0xD6, 0x55, 0xDE, 0x76, 0xD6, 0x75, 0xC5, 0xD3, 0xD6, 0x35, 0xD6, 0x55, 0xCE, 0x14, 0xD6, 0x35, 0xDE, 0xB7, 0x83, 0xEE, 0x20, 0xE4, 0x10, 0xA3, 0x29, 0x24, 0x41, 0xE7, 0x53, 0x69, 0x5B, 0x89, 0x74, 0x2B, 0x63, 0xA9, 0x42, 0xC4, 0x42, 0xA3, 0x3A, 0x64, 0x3A, 0x85, 0x5B, 0x69, 0x5B, 0x29, 0x3A, 0x66, 0x42, 0xA7, 0x9D, 0x52, 0x74, 0x0C, 0x3A, 0xA3, 0x4B, 0x64, 0x53, 0xA4, 0x6C, 0x26, 0x9D, 0x8C, 0xBE, 0x30, 0xBD, 0xD2, 0xC6, 0x15, 0xB5, 0x73, 0x94, 0x8F, 0x94, 0x70, 0xA4, 0xD1, 0xC6, 0x15, 0xDE, 0x96, 0xD6, 0x75, 0xD6, 0x76, 0xC5, 0xF4, 0xAD, 0x11, 0xB5, 0x73, 0xB5, 0x73, 0xA4, 0xF0, 0xC5, 0xB3, 0xBD, 0x92, 0xB5, 0x31, 0xCE, 0x34, 0xC5, 0xB2, 0x8B, 0xCC, 0xA4, 0x8E, 0xB5, 0x30, 0xDE, 0x55, 0xD5, 0xF4, 0xCD, 0xD3, 0xD6, 0x55, 0xCE, 0x14, 0xC5, 0xD4, 0xC6, 0x15, 0xDE, 0xFA, 0xE7, 0x1B, 0xAD, 0x55, 0x18, 0xA3, 0x08, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xE4, 0x7C, 0x31, 0xC6, 0x59, 0xD6, 0xFB, 0xD6, 0xDB, 0xD6, 0xDB, 0xD6, 0xDB, 0xDE, 0xDB, 0xDE, 0xDB, 0xDE, 0xFC, 0xE7, 0x1C, 0xEF, 0x5D, 0xB5, 0x75, 0x29, 0x66, 0x31, 0xA7, 0x29, 0x86, 0x21, 0x45, 0x7B, 0xEF, 0xAD, 0x32, 0x8B, 0xEC, 0x9C, 0x4D, 0xA4, 0xAF, 0x8B, 0xEC, 0xA4, 0xAE, 0x9C, 0x4D, 0x94, 0x0C, 0x9C, 0x4D, 0x9C, 0x6E, 0xA4, 0x8E, 0x9C, 0x6D, 0xAC, 0xEF, 0xB5, 0x0F, 0xAC, 0xEF, 0xA4, 0xAE, 0x9C, 0x6E, 0x9C, 0x4D, 0xA4, 0x8E, 0xA4, 0x8E, 0xAC, 0xCF, 0xB5, 0x0F, 0xB5, 0x10, 0xB5, 0x10, 0xA4, 0x8E, 0x9C, 0x6E, 0x9C, 0x8E, 0x9C, 0x6E, 0x9C, 0x6E, 0xA4, 0x8E, 0x9C, 0x6E, 0x9C, 0x6D, 0x94, 0x2D, 0x7B, 0x6B, 0x52, 0x48, 0x39, 0xA6, 0x39, 0xC6, 0x39, 0xA6, 0x52, 0x69, 0x63, 0x0C, 0x73, 0x6D, 0x52, 0x8A, 0x63, 0x0C, 0x7B, 0xAF, 0xA4, 0xF3, 0xA4, 0xF3, 0xBD, 0xB6, 0xAD, 0x54, 0xB5, 0x75, 0xCE, 0x17, 0xA5, 0x12, 0x9C, 0xB0, 0x94, 0x8F, 0xAD, 0x54, 0xA5, 0x14, 0x9C, 0xD3, 0xB5, 0xB7, 0x7B, 0xCE, 0x73, 0x6B, 0xA4, 0xD0, 0xB5, 0x10, 0x7B, 0x8B, 0x73, 0x4B, 0x94, 0x6F, 0xA4, 0xF1, 0xAD, 0x12, 0x9C, 0x90, 0x94, 0x70, 0x6B, 0x2B, 0x63, 0x0B, 0x94, 0x91, 0x8C, 0x2F, 0x73, 0x8D, 0x6B, 0x8D, 0xB5, 0x94, 0xC5, 0xF5, 0xC5, 0xF5, 0xAD, 0x32, 0xAD, 0x52, 0x9C, 0xD0, 0x8C, 0x4E, 0x73, 0x4B, 0x84, 0x0E, 0xC5, 0xF6, 0xA4, 0xF2, 0x83, 0xEE, 0x7B, 0xAD, 0x73, 0x8C, 0x6B, 0x4C, 0x62, 0xEA, 0x6B, 0x4C, 0x6B, 0x2B, 0x6B, 0x2B, 0x6B, 0x4B, 0x62, 0xEB, 0x63, 0x0B, 0x63, 0x0B, 0x63, 0x0B, 0x4A, 0x28, 0x4A, 0x48, 0x42, 0x07, 0x4A, 0x48, 0x52, 0x89, 0x4A, 0x69, 0x63, 0x0C, 0x6B, 0x2C, 0x6B, 0x4D, 0x41, 0xC7, 0x5A, 0x69, 0x62, 0xAA, 0x62, 0x8A, 0x73, 0x0C, 0x83, 0xCF, 0x7B, 0x6D, 0x83, 0xCD, 0xAD, 0x32, 0xCE, 0x57, 0xB5, 0x93, 0xAD, 0x31, 0xA4, 0xF0, 0x9C, 0xB0, 0xBD, 0x74, 0xBD, 0x93, 0xA5, 0x11, 0x9C, 0xB0, 0x8C, 0x2E, 0x94, 0x90, 0x8C, 0x4E, 0x94, 0x6F, 0x94, 0x6F, 0x9C, 0xB0, 0x9C, 0xB0, 0x9C, 0xB0, 0xBD, 0x73, 0xB5, 0x52, 0xCD, 0xF5, 0xC5, 0xD4, 0xB5, 0x33, 0x4A, 0x08, 0x18, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x18, 0xC4, 0x21, 0x45, 0x19, 0x04, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x08, 0x83, 0x08, 0x83, 0x21, 0x05, 0x73, 0xAE, 0x94, 0x91, 0x9C, 0xB1, 0x9C, 0xD1, 0x8C, 0x2F, 0x63, 0x0B, 0x6B, 0x4C, 0x4A, 0x48, 0x19, 0x04, 0x10, 0xC3, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE5, 0x19, 0x05, 0x19, 0x05, 0x18, 0xE5, 0x18, 0xE5, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x18, 0xE5, 0x18, 0xE5, 0x21, 0x05, 0x18, 0xE5, 0x18, 0xC4, 0x18, 0xE5, 0x18, 0xE5, 0x18, 0xC4, 0x10, 0xC4, 0x19, 0x05, 0x19, 0x05, 0x18, 0xE4, 0x19, 0x05, 0x19, 0x05, 0x18, 0xE5, 0x21, 0x05, 0x19, 0x05, 0x21, 0x05, 0x21, 0x05, 0x29, 0x46, 0x31, 0xA8, 0x29, 0x87, 0x39, 0xE8, 0x73, 0x6D, 0x94, 0x70, 0x9C, 0x90, 0x9C, 0x90, 0x9C, 0xB1, 0x9C, 0x90, 0x8C, 0x2F, 0x9C, 0x90, 0x9C, 0x6F, 0x94, 0x2F, 0x8C, 0x0E, 0x94, 0x2E, 0xA4, 0xB0, 0xB5, 0x31, 0xAC, 0xF0, 0x9C, 0x8F, 0xA4, 0x8F, 0xB5, 0x11, 0xC5, 0xB3, 0xC5, 0xD3, 0xC5, 0xD3, 0xB5, 0x52, 0xBD, 0x92, 0xD6, 0x35, 0xD6, 0x35, 0xCE, 0x15, 0xD6, 0x76, 0xD6, 0x76, 0xCE, 0x36, 0x73, 0x8D, 0x6B, 0x4C, 0x31, 0x86, 0x41, 0xE7, 0x74, 0x4D, 0x53, 0x28, 0x42, 0xA6, 0x5B, 0x48, 0x6B, 0xE9, 0x74, 0x4A, 0x6C, 0x0A, 0x4B, 0x06, 0x42, 0xE6, 0x4A, 0xE7, 0x5B, 0x8A, 0x95, 0x31, 0xBE, 0x15, 0x6B, 0xCB, 0x43, 0x24, 0x5B, 0xC5, 0x5B, 0xE4, 0x8D, 0x0A, 0xA5, 0x6D, 0xAD, 0x90, 0xAD, 0x51, 0x9C, 0xF0, 0x8C, 0x4E, 0x8C, 0x2E, 0x8C, 0x2E, 0x9C, 0xD1, 0xCE, 0x14, 0xDE, 0xB6, 0xD6, 0x54, 0xCE, 0x35, 0xC5, 0xF4, 0xAD, 0x31, 0xBD, 0xB4, 0xAD, 0x32, 0xA4, 0xF1, 0xBD, 0x92, 0xCD, 0xF4, 0xAD, 0x31, 0xCE, 0x14, 0xB5, 0x31, 0xB5, 0x31, 0xA4, 0x8E, 0xB5, 0x10, 0xD5, 0xF3, 0xCD, 0xD3, 0xCD, 0xD3, 0xCE, 0x14, 0xCD, 0xF4, 0xCE, 0x15, 0xC6, 0x35, 0xD6, 0xB9, 0xCE, 0x78, 0xC5, 0xF7, 0x62, 0xEB, 0x08, 0x82, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC3, 0x19, 0x25, 0x84, 0x72, 0xBE, 0x38, 0xCE, 0xBA, 0xCE, 0x9A, 0xCE, 0x9A, 0xD6, 0xBA, 0xD6, 0x99, 0xCE, 0x99, 0xCE, 0x9A, 0xD6, 0x9A, 0xD6, 0x99, 0xC6, 0x37, 0x7B, 0xAE, 0x29, 0x45, 0x21, 0x25, 0x21, 0x45, 0x39, 0xC7, 0x94, 0x90, 0x94, 0x6F, 0x8C, 0x2E, 0x8C, 0x2E, 0x94, 0x6F, 0x94, 0x6F, 0x7B, 0xCC, 0x83, 0xED, 0x94, 0x4E, 0x94, 0x6E, 0x83, 0xCB, 0x83, 0xCB, 0xA4, 0x8E, 0xAC, 0xEF, 0xAC, 0xCF, 0xAC, 0xCF, 0xB5, 0x51, 0xAC, 0xEF, 0x94, 0x2C, 0x8B, 0xEB, 0x9C, 0x4D, 0xB5, 0x30, 0xAC, 0xCF, 0x9C, 0x4D, 0xA4, 0x6D, 0xA4, 0xAE, 0xAC, 0xEF, 0xB5, 0x10, 0xBD, 0x31, 0xC5, 0x71, 0xB5, 0x30, 0xAC, 0xCF, 0x9C, 0x6E, 0x94, 0x4E, 0x8B, 0xED, 0x52, 0x68, 0x42, 0x08, 0x4A, 0x28, 0x52, 0x89, 0x5A, 0xCB, 0x73, 0x6D, 0x62, 0xEB, 0x73, 0x8E, 0x94, 0x71, 0x9C, 0xD3, 0x9C, 0xD3, 0xBD, 0xD7, 0xBD, 0xB6, 0xA5, 0x13, 0xCE, 0x38, 0xD6, 0x58, 0xAC, 0xF2, 0xA4, 0xD1, 0xAD, 0x33, 0x94, 0x91, 0x84, 0x10, 0x6B, 0x4D, 0x83, 0xCD, 0x94, 0x2D, 0xBD, 0x52, 0xC5, 0x72, 0xAC, 0xF0, 0x8B, 0xED, 0x8B, 0xCD, 0x9C, 0x6E, 0x94, 0x4E, 0x8C, 0x0D, 0x83, 0xAC, 0x83, 0xAC, 0x73, 0x6C, 0x84, 0x0E, 0x83, 0xED, 0x7B, 0xCD, 0x83, 0xEE, 0xBD, 0xB4, 0xC5, 0xF5, 0xB5, 0x73, 0x94, 0x6F, 0xAD, 0x11, 0xA4, 0xD0, 0x8C, 0x2E, 0x62, 0xEA, 0x7B, 0xAD, 0xC5, 0xF5, 0xA4, 0xF1, 0x8C, 0x2F, 0x8C, 0x2F, 0x8C, 0x2F, 0x84, 0x2F, 0x73, 0x8D, 0x84, 0x0F, 0x7B, 0xCE, 0x73, 0x8D, 0x6B, 0x6D, 0x6B, 0x4C, 0x5A, 0xCA, 0x6B, 0x4C, 0x62, 0xEB, 0x5A, 0xEB, 0x5A, 0xCA, 0x39, 0xA6, 0x42, 0x08, 0x4A, 0x48, 0x4A, 0x49, 0x52, 0x8A, 0x6B, 0x4C, 0x63, 0x0C, 0x41, 0xE7, 0x5A, 0x69, 0x62, 0xAA, 0x73, 0x2C, 0x7B, 0x6D, 0x73, 0x4C, 0x7B, 0x6D, 0x83, 0xAD, 0x83, 0xCE, 0xAD, 0x13, 0xB5, 0x93, 0xB5, 0x73, 0xAD, 0x31, 0x9C, 0xB0, 0xB5, 0x73, 0xAD, 0x12, 0xAD, 0x12, 0xA4, 0xF1, 0x94, 0x90, 0xAD, 0x32, 0x9C, 0xD0, 0xA4, 0xF1, 0x9C, 0xD1, 0xAD, 0x12, 0xAD, 0x52, 0x9C, 0xB0, 0xBD, 0x94, 0xB5, 0x52, 0xD6, 0x56, 0xCE, 0x15, 0xC5, 0xB4, 0x62, 0xCA, 0x18, 0xC3, 0x10, 0x83, 0x10, 0x83, 0x18, 0xC3, 0x21, 0x46, 0x21, 0x05, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x08, 0x82, 0x10, 0xA3, 0x63, 0x0C, 0x9C, 0xF1, 0xB5, 0x94, 0xB5, 0x73, 0xC5, 0xD5, 0xAD, 0x12, 0xA4, 0xD1, 0xA5, 0x12, 0xA4, 0xD1, 0x52, 0x89, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE5, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x04, 0x19, 0x05, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE5, 0x18, 0xE5, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x21, 0x25, 0x21, 0x05, 0x19, 0x05, 0x19, 0x05, 0x18, 0xE5, 0x18, 0xE5, 0x18, 0xE5, 0x18, 0xE4, 0x10, 0xA4, 0x10, 0xC4, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xE5, 0x19, 0x05, 0x19, 0x05, 0x21, 0x25, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x29, 0x46, 0x31, 0xA8, 0x29, 0x66, 0x31, 0x87, 0x5A, 0xCC, 0x94, 0x50, 0xCE, 0x16, 0xCD, 0xF5, 0xD6, 0x15, 0xCD, 0xF5, 0xC5, 0xB4, 0xBD, 0x73, 0xB5, 0x53, 0xC5, 0xB4, 0x94, 0x4F, 0xA4, 0xB0, 0xA4, 0xB0, 0x94, 0x4E, 0x9C, 0x8F, 0xB5, 0x32, 0x9C, 0x8F, 0xAC, 0xF1, 0xC5, 0x92, 0xC5, 0x93, 0xA4, 0xB0, 0xA4, 0xB0, 0xA4, 0xD0, 0x9C, 0x8F, 0x9C, 0x8F, 0x94, 0x2E, 0x9C, 0x8F, 0xA4, 0xD0, 0xA5, 0x11, 0x9C, 0xB0, 0x63, 0x2B, 0x18, 0xA2, 0x39, 0xA6, 0x8D, 0x10, 0x8C, 0xEF, 0x63, 0xCA, 0x53, 0x48, 0x53, 0x27, 0x5B, 0x67, 0x53, 0x06, 0x42, 0xC6, 0x63, 0xC9, 0x7C, 0x8D, 0xAD, 0xD3, 0x8C, 0xD0, 0xB5, 0xB4, 0x84, 0x6C, 0x43, 0x03, 0x4B, 0x63, 0x6C, 0x27, 0x84, 0x89, 0x94, 0xAC, 0xA5, 0x0F, 0x94, 0x8E, 0xA5, 0x10, 0x94, 0x8F, 0x94, 0x6F, 0x8C, 0x2E, 0x7B, 0xAC, 0xAD, 0x31, 0xD6, 0x55, 0xC5, 0xF3, 0xCE, 0x34, 0xBD, 0x93, 0xA5, 0x11, 0xBD, 0xB4, 0x9C, 0x90, 0x8C, 0x2F, 0xB5, 0x52, 0xC5, 0xF4, 0xC5, 0xD3, 0xCE, 0x34, 0xB5, 0x30, 0xD6, 0x35, 0xAC, 0xCF, 0xAC, 0xEF, 0xC5, 0x91, 0xCD, 0xD3, 0xD6, 0x35, 0xD6, 0x55, 0xCE, 0x15, 0xCE, 0x35, 0xCE, 0x56, 0xD6, 0x97, 0xC6, 0x37, 0xBD, 0xB6, 0x94, 0x71, 0x31, 0x86, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x19, 0x04, 0x7C, 0x30, 0xB5, 0xF7, 0xBE, 0x38, 0xC6, 0x38, 0xC6, 0x38, 0xC6, 0x58, 0xCE, 0x58, 0xC6, 0x58, 0xC6, 0x38, 0xC6, 0x58, 0xC6, 0x37, 0xC5, 0xF6, 0xB5, 0x94, 0x7B, 0xAE, 0x31, 0xA6, 0x19, 0x04, 0x21, 0x24, 0x73, 0xAD, 0x84, 0x2F, 0x7B, 0xCD, 0x6B, 0x6B, 0x63, 0x4B, 0x73, 0x8C, 0x7B, 0xAC, 0x73, 0x8C, 0x73, 0x8C, 0x7B, 0xAC, 0x7B, 0xAB, 0x8C, 0x0D, 0x8B, 0xEC, 0xB4, 0xF0, 0xAC, 0xEF, 0xC5, 0xB2, 0xB5, 0x51, 0x9C, 0x6D, 0x94, 0x4D, 0xA4, 0xF0, 0xAD, 0x10, 0xA4, 0xCF, 0x9C, 0x8E, 0x9C, 0x8E, 0xAC, 0xF0, 0xA4, 0xCF, 0xB5, 0x30, 0xBD, 0x71, 0xBD, 0x30, 0xC5, 0x91, 0xC5, 0x91, 0xAC, 0xEF, 0xBD, 0xB2, 0xC5, 0xF4, 0xCE, 0x35, 0x9C, 0xB0, 0x52, 0x68, 0x52, 0x8A, 0x52, 0x8A, 0x52, 0x69, 0x6B, 0x4D, 0x7B, 0xAE, 0x83, 0xEF, 0x73, 0x8E, 0x8C, 0x71, 0xA4, 0xF3, 0xB5, 0x76, 0xBD, 0xB6, 0x9C, 0x92, 0xC5, 0xF7, 0xE6, 0xBA, 0xC5, 0xB5, 0x9C, 0xB1, 0x94, 0x50, 0x83, 0xEF, 0x8C, 0x51, 0x94, 0x51, 0xB5, 0x53, 0xAC, 0xF0, 0xA4, 0x8E, 0x9C, 0x4D, 0x9C, 0x6E, 0xA4, 0x8F, 0xB4, 0xF0, 0xB5, 0x30, 0xB5, 0x30, 0xBD, 0x51, 0xB4, 0xF0, 0xAC, 0xF0, 0xA4, 0xD0, 0xA4, 0x8F, 0xA4, 0x8F, 0x9C, 0x4E, 0x94, 0x0D, 0xA4, 0xCF, 0xA4, 0xCF, 0x9C, 0x6E, 0x8C, 0x0D, 0x8C, 0x0D, 0x8C, 0x0D, 0x7B, 0xAD, 0x7B, 0x8D, 0x94, 0x90, 0xBD, 0xB4, 0xA4, 0xF1, 0x8C, 0x2F, 0x83, 0xEE, 0x83, 0xEE, 0x83, 0xEE, 0x7B, 0xCE, 0x83, 0xEE, 0x83, 0xEE, 0x83, 0xEE, 0x83, 0xEE, 0x83, 0xEE, 0x83, 0xEE, 0x8C, 0x2F, 0x73, 0x8D, 0x6B, 0x4C, 0x6B, 0x6C, 0x5A, 0xAA, 0x39, 0xC7, 0x42, 0x28, 0x42, 0x07, 0x52, 0x89, 0x63, 0x0B, 0x52, 0x8A, 0x52, 0x8A, 0x5A, 0xAA, 0x5A, 0x89, 0x62, 0xAA, 0x7B, 0x6D, 0x6B, 0x0C, 0x7B, 0x8E, 0x94, 0x50, 0x8B, 0xEF, 0x7B, 0x8D, 0xA4, 0xF2, 0x94, 0x70, 0x84, 0x0E, 0x9C, 0xB0, 0xBD, 0x93, 0xBD, 0xB4, 0xB5, 0x94, 0xAD, 0x52, 0xAD, 0x73, 0xBD, 0xD5, 0xB5, 0x94, 0xB5, 0x73, 0xAD, 0x32, 0xB5, 0x73, 0xBD, 0xB4, 0xA4, 0xF1, 0xBD, 0x94, 0xB5, 0x53, 0xDE, 0x97, 0xCE, 0x36, 0xC5, 0xF5, 0x62, 0xEA, 0x18, 0xC3, 0x10, 0x83, 0x10, 0x83, 0x10, 0xC3, 0x29, 0x66, 0x21, 0x25, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0xA3, 0x5A, 0xAA, 0xBD, 0xB4, 0xC5, 0xF5, 0xC5, 0xD5, 0xC5, 0xD4, 0xBD, 0xB4, 0xA4, 0xF1, 0xAD, 0x32, 0xC6, 0x15, 0xC5, 0xF5, 0xA4, 0xF2, 0x29, 0x65, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC3, 0x10, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xE4, 0x19, 0x05, 0x19, 0x05, 0x18, 0xE5, 0x18, 0xE5, 0x19, 0x05, 0x19, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x19, 0x05, 0x18, 0xE4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x18, 0xC4, 0x18, 0xE5, 0x21, 0x05, 0x19, 0x05, 0x21, 0x26, 0x19, 0x05, 0x19, 0x05, 0x21, 0x26, 0x29, 0x46, 0x31, 0xA8, 0x29, 0x46, 0x21, 0x25, 0x42, 0x29, 0x7B, 0xAE, 0xCD, 0xF5, 0xD6, 0x35, 0xD5, 0xF5, 0xD5, 0xF4, 0xD6, 0x14, 0xC5, 0xB3, 0xC5, 0xB3, 0xD5, 0xF5, 0xA4, 0x90, 0x8B, 0xED, 0x8B, 0xED, 0xA4, 0xAF, 0xBD, 0x51, 0xBD, 0x52, 0x9C, 0x6F, 0xBD, 0x52, 0xD5, 0xF4, 0xDE, 0x55, 0xA4, 0x8F, 0xAD, 0x11, 0xB5, 0x53, 0xB5, 0x73, 0xB5, 0x73, 0xA5, 0x11, 0xA4, 0xD1, 0xA5, 0x11, 0xA4, 0xF1, 0x9C, 0xD0, 0x5A, 0xCA, 0x18, 0xC3, 0x20, 0xE3, 0x3A, 0xC5, 0x42, 0xE6, 0x5B, 0xA9, 0x4B, 0x07, 0x5B, 0x69, 0x4A, 0xA6, 0x42, 0x86, 0x5B, 0x89, 0x6C, 0x0B, 0x8D, 0x0F, 0xA5, 0x93, 0xA5, 0x72, 0x6B, 0x8A, 0x8C, 0xED, 0x4B, 0x24, 0x63, 0xE9, 0xA5, 0xB2, 0x9D, 0x10, 0x94, 0xAD, 0x9C, 0xEE, 0xA5, 0x30, 0xAD, 0x52, 0x9C, 0xF1, 0xA4, 0xF1, 0x9C, 0xD1, 0x8C, 0x4E, 0xB5, 0x73, 0xDE, 0xB7, 0xCE, 0x14, 0xCE, 0x14, 0xB5, 0x72, 0x9C, 0xB0, 0xA5, 0x12, 0x94, 0x90, 0x8C, 0x0F, 0xAD, 0x11, 0xA5, 0x11, 0x94, 0x6E, 0xBD, 0xB2, 0xB5, 0x30, 0xCE, 0x14, 0xAC, 0xCF, 0xA4, 0x6D, 0x8B, 0xEB, 0x94, 0x4D, 0xA4, 0xAE, 0xA4, 0xCF, 0xB5, 0x51, 0xBD, 0x93, 0xBD, 0xD4, 0xCE, 0x36, 0xCE, 0x36, 0xB5, 0x95, 0x9C, 0xB1, 0x6B, 0x0C, 0x18, 0xE3, 0x10, 0xC3, 0x10, 0xA3, 0x18, 0xE4, 0x6B, 0xAE, 0xAD, 0x95, 0xB5, 0xF6, 0xBD, 0xF6, 0xBD, 0xF6, 0xBD, 0xF6, 0xBD, 0xF6, 0xBD, 0xF6, 0xBD, 0xD6, 0xBD, 0xD6, 0xBD, 0xF6, 0xBD, 0xD5, 0xBD, 0xF6, 0xBD, 0xD6, 0xAD, 0x33, 0x5A, 0xCA, 0x10, 0xA2, 0x52, 0xAA, 0x84, 0x2F, 0x7B, 0xEE, 0x73, 0xAC, 0x73, 0xAD, 0x84, 0x0E, 0x83, 0xEE, 0x8C, 0x2F, 0x8C, 0x4F, 0x7B, 0xCD, 0x8C, 0x2E, 0x94, 0x6E, 0xA4, 0xAF, 0xB4, 0xEF, 0xAC, 0xCF, 0xB5, 0x51, 0xBD, 0x92, 0x9C, 0xAF, 0x9C, 0xAF, 0xB5, 0x72, 0xC5, 0xF4, 0xCE, 0x14, 0xBD, 0x92, 0xBD, 0xB3, 0xBD, 0x93, 0xAD, 0x10, 0xAD, 0x31, 0xB5, 0x51, 0xB5, 0x31, 0xD6, 0x35, 0xB5, 0x30, 0xB5, 0x30, 0xCE, 0x14, 0xCE, 0x55, 0xD6, 0x76, 0xBD, 0xB3, 0x83, 0xEE, 0x4A, 0x48, 0x42, 0x07, 0x39, 0xC7, 0x4A, 0x49, 0x52, 0x69, 0x52, 0x69, 0x63, 0x0C, 0x7C, 0x10, 0x9C, 0xF3, 0xB5, 0x96, 0xA4, 0xF4, 0xBD, 0x96, 0xBD, 0xD7, 0xB5, 0x95, 0xCE, 0x17, 0xBD, 0xB6, 0xBD, 0xD7, 0x84, 0x10, 0x84, 0x30, 0x94, 0x91, 0x94, 0x70, 0x83, 0xAC, 0x7B, 0xAC, 0x6B, 0x0A, 0x6B, 0x2A, 0x5A, 0x88, 0x73, 0x6B, 0x7B, 0x8B, 0x8C, 0x2D, 0x94, 0x2D, 0x9C, 0x8E, 0xAC, 0xCF, 0x94, 0x2D, 0x8C, 0x0C, 0x94, 0x2D, 0x9C, 0x6E, 0xAC, 0xF0, 0x9C, 0x8E, 0xA4, 0xCF, 0xAC, 0xCF, 0xAC, 0xF0, 0xAC, 0xF0, 0xB5, 0x52, 0xBD, 0x93, 0xBD, 0x74, 0xBD, 0x94, 0xBD, 0xB4, 0xBD, 0x94, 0xBD, 0x94, 0xBD, 0xB4, 0xBD, 0x94, 0xBD, 0x74, 0xC5, 0xD5, 0xC5, 0xF5, 0xC5, 0xD5, 0xBD, 0xB4, 0xBD, 0xB4, 0xBD, 0x74, 0xC5, 0xD5, 0xC5, 0xB4, 0xB5, 0x33, 0xB5, 0x74, 0xB5, 0x74, 0xAD, 0x12, 0x83, 0xCE, 0x42, 0x27, 0x42, 0x28, 0x4A, 0x48, 0x52, 0x89, 0x5A, 0x89, 0x83, 0xCE, 0x7B, 0x6D, 0x52, 0x28, 0x7B, 0x8D, 0x9C, 0x71, 0x8B, 0xEF, 0xA4, 0xB2, 0x7B, 0x6D, 0x73, 0x0C, 0x7B, 0x8E, 0x7B, 0x8E, 0xA4, 0xF2, 0xA4, 0xF2, 0xA4, 0xF2, 0xBD, 0x93, 0xC5, 0xD4, 0xD6, 0x97, 0xCE, 0x16, 0xC6, 0x15, 0xD6, 0x77, 0xAD, 0x32, 0xC5, 0xF5, 0xC5, 0xF5, 0xC5, 0xF5, 0xC5, 0xF4, 0x94, 0x6F, 0xBD, 0xB4, 0xB5, 0x32, 0xDE, 0xB7, 0xDE, 0xB7, 0xCE, 0x15, 0x73, 0x6C, 0x18, 0xC3, 0x10, 0x83, 0x10, 0x82, 0x10, 0xC3, 0x29, 0x86, 0x21, 0x05, 0x19, 0x04, 0x19, 0x04, 0x18, 0xE4, 0x18, 0xC3, 0x10, 0xA3, 0x10, 0xC3, 0x84, 0x0F, 0xCE, 0x56, 0xCE, 0x35, 0xCE, 0x15, 0xCE, 0x35, 0xCE, 0x15, 0xAD, 0x11, 0xB5, 0x52, 0xD6, 0x76, 0xDE, 0x97, 0xD6, 0x77, 0x83, 0xCE, 0x20, 0xE4, 0x10, 0xC3, 0x10, 0xC3, 0x18, 0xC4, 0x10, 0xC4, 0x18, 0xC4, 0x18, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE5, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x18, 0xE5, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x19, 0x05, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x05, 0x19, 0x05, 0x18, 0xE5, 0x19, 0x05, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0xA4, 0x10, 0xA3, 0x18, 0xE4, 0x19, 0x05, 0x21, 0x26, 0x18, 0xE5, 0x21, 0x05, 0x19, 0x05, 0x19, 0x05, 0x29, 0x46, 0x29, 0x46, 0x31, 0x87, 0x29, 0x67, 0x21, 0x46, 0x31, 0x87, 0x5A, 0xCC, 0xB5, 0x32, 0xE6, 0x76, 0xDE, 0x35, 0xDE, 0x35, 0xDE, 0x35, 0xD6, 0x14, 0xDE, 0x35, 0xDE, 0x35, 0xBD, 0x52, 0xC5, 0xB3, 0xCD, 0xD4, 0xCD, 0xB3, 0xD5, 0xF3, 0xCD, 0xB3, 0xD5, 0xD3, 0xDE, 0x14, 0xDE, 0x34, 0xDE, 0x34, 0xA4, 0x8F, 0xAC, 0xF1, 0xB5, 0x73, 0xBD, 0xB4, 0xBD, 0xD5, 0xBD, 0xB4, 0xB5, 0x73, 0xB5, 0x53, 0xAD, 0x32, 0xAD, 0x32, 0x8C, 0x4F, 0x21, 0x04, 0x10, 0xA2, 0x3A, 0x85, 0x53, 0x88, 0x4B, 0x07, 0x4A, 0xE7, 0x4A, 0xE7, 0x4A, 0x86, 0x5B, 0x08, 0x5B, 0x28, 0x74, 0x0B, 0x7C, 0x6D, 0x8C, 0xAE, 0xA5, 0x30, 0x5B, 0x28, 0x8C, 0xCD, 0x8C, 0xED, 0xC6, 0xD6, 0xD7, 0x39, 0xAD, 0x93, 0x94, 0x8D, 0xAD, 0x2F, 0xAD, 0x0F, 0x9C, 0xAE, 0x94, 0x4E, 0x94, 0x4E, 0x9C, 0x8F, 0x9C, 0xAF, 0x9C, 0xAF, 0xB5, 0x31, 0x9C, 0x8E, 0xAD, 0x10, 0x9C, 0x8E, 0x94, 0x4E, 0x9C, 0xAF, 0x94, 0x4E, 0x8C, 0x2E, 0x9C, 0x8F, 0xBD, 0x73, 0xAD, 0x10, 0xAC, 0xCF, 0x94, 0x4D, 0xA4, 0xAF, 0x9C, 0x6D, 0xBD, 0x51, 0xB5, 0x30, 0x94, 0x4D, 0xA4, 0xF0, 0xB5, 0x72, 0xB5, 0x72, 0xBD, 0xB3, 0xB5, 0x52, 0xCE, 0x35, 0xD6, 0x77, 0xCE, 0x57, 0xA5, 0x12, 0x73, 0x6C, 0x10, 0xA2, 0x19, 0x04, 0x21, 0x25, 0x18, 0xE4, 0x3A, 0x28, 0x8C, 0x91, 0xA5, 0x54, 0xA5, 0x54, 0xAD, 0x74, 0xAD, 0x74, 0xAD, 0x74, 0xB5, 0x94, 0xB5, 0xB5, 0xAD, 0x74, 0xB5, 0x94, 0xAD, 0x94, 0xB5, 0xB4, 0xBD, 0xD5, 0xA4, 0xF2, 0x31, 0x85, 0x10, 0x82, 0x31, 0xA6, 0x8C, 0x50, 0x8C, 0x4F, 0x73, 0xCD, 0x73, 0xAD, 0x84, 0x2F, 0x94, 0x6F, 0x8C, 0x90, 0xAD, 0x53, 0x94, 0x90, 0x9C, 0xB0, 0x9C, 0xAF, 0xA4, 0xEF, 0xAC, 0xCF, 0xAC, 0xCF, 0x9C, 0x8E, 0xAD, 0x10, 0x94, 0x6E, 0xAD, 0x11, 0xC5, 0xD4, 0xBD, 0x93, 0xBD, 0xB3, 0xBD, 0x93, 0xB5, 0x52, 0xAD, 0x31, 0x94, 0x6E, 0xAD, 0x51, 0xB5, 0x52, 0xB5, 0x72, 0xCE, 0x35, 0xA4, 0xCE, 0xB5, 0x30, 0xCE, 0x14, 0xCE, 0x34, 0xC5, 0xF4, 0xAD, 0x32, 0xB5, 0x53, 0x5A, 0xA9, 0x4A, 0x08, 0x42, 0x08, 0x4A, 0x49, 0x52, 0x69, 0x52, 0x8A, 0x52, 0xAA, 0x6B, 0x6D, 0x73, 0x8E, 0x7B, 0xCF, 0xAD, 0x55, 0xCE, 0x18, 0x84, 0x10, 0xAD, 0x34, 0xCE, 0x39, 0xCE, 0x38, 0xCE, 0x59, 0xA4, 0xF3, 0x94, 0x71, 0x9C, 0xD2, 0x8C, 0x2F, 0x8C, 0x2F, 0x9C, 0xB1, 0x8C, 0x0E, 0x84, 0x0E, 0x7B, 0xAD, 0x94, 0x90, 0x7B, 0xAC, 0x52, 0x68, 0x73, 0x6B, 0x94, 0x4F, 0x8C, 0x4E, 0x83, 0xED, 0x84, 0x0D, 0x83, 0xED, 0x7B, 0xAC, 0x83, 0xED, 0x83, 0xEC, 0x94, 0x4E, 0x94, 0x4E, 0xA4, 0xD0, 0xAD, 0x11, 0xC5, 0xF5, 0xCE, 0x15, 0xC5, 0xF4, 0xC5, 0xF5, 0xCE, 0x36, 0xCE, 0x15, 0xBD, 0x93, 0xB5, 0x53, 0xAD, 0x32, 0xB5, 0x52, 0xB5, 0x53, 0xAD, 0x12, 0xAD, 0x32, 0xAD, 0x32, 0xB5, 0x52, 0xBD, 0x73, 0xB5, 0x53, 0xC5, 0xB4, 0xC5, 0xD5, 0xC5, 0xB4, 0xC5, 0xB4, 0xC5, 0xD5, 0xAD, 0x12, 0x8B, 0xEE, 0x4A, 0x48, 0x42, 0x27, 0x4A, 0x28, 0x7B, 0x8D, 0x8C, 0x2F, 0x94, 0x0F, 0x5A, 0x69, 0x83, 0xCE, 0xAD, 0x13, 0x94, 0x50, 0xA4, 0xD2, 0x8C, 0x0F, 0x6B, 0x0B, 0x8B, 0xEF, 0x8C, 0x10, 0x8C, 0x0F, 0xA4, 0xB2, 0xB5, 0x33, 0xBD, 0x94, 0xA4, 0xD1, 0xA4, 0xD0, 0x9C, 0xB0, 0xA4, 0xB0, 0xA4, 0xD0, 0x94, 0x6F, 0xA4, 0xB0, 0x9C, 0xB0, 0x9C, 0x90, 0x9C, 0xD0, 0xAD, 0x32, 0xB5, 0x73, 0xAD, 0x11, 0xC5, 0xF5, 0xCE, 0x36, 0xCE, 0x15, 0x6B, 0x2B, 0x18, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x18, 0xC3, 0x29, 0x86, 0x19, 0x04, 0x19, 0x05, 0x18, 0xE4, 0x18, 0xE4, 0x10, 0xC3, 0x18, 0xC3, 0x41, 0xE7, 0xAD, 0x53, 0xCE, 0x35, 0xD6, 0x76, 0xD6, 0x56, 0xCE, 0x36, 0xBD, 0xB3, 0xB5, 0x52, 0xAD, 0x11, 0xCE, 0x35, 0xB5, 0x73, 0xD6, 0x56, 0xBD, 0x94, 0x5A, 0xCA, 0x18, 0xE4, 0x10, 0xC4, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x05, 0x18, 0xE4, 0x18, 0xE5, 0x18, 0xE4, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x18, 0xE4, 0x10, 0xC4, 0x18, 0xE4, 0x18, 0xE5, 0x18, 0xE5, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x04, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xE4, 0x19, 0x05, 0x21, 0x05, 0x18, 0xE5, 0x19, 0x05, 0x19, 0x05, 0x21, 0x05, 0x29, 0x46, 0x29, 0x46, 0x31, 0x87, 0x29, 0x87, 0x29, 0x87, 0x21, 0x46, 0x4A, 0x4A, 0x7B, 0xAE, 0xE6, 0x97, 0xEE, 0xD7, 0xE6, 0x96, 0xE6, 0x75, 0xE6, 0x75, 0xE6, 0x75, 0xDE, 0x55, 0xDE, 0x35, 0xD5, 0xF4, 0xDE, 0x55, 0xE6, 0x75, 0xE6, 0x75, 0xE6, 0x55, 0xEE, 0x96, 0xE6, 0x75, 0xE6, 0x55, 0xDE, 0x14, 0xAC, 0xD0, 0xAD, 0x11, 0xB5, 0x93, 0xBD, 0xD5, 0xBD, 0xB4, 0xC6, 0x16, 0xAD, 0x53, 0xAD, 0x53, 0xAD, 0x53, 0xAD, 0x53, 0xAD, 0x12, 0x6B, 0x2B, 0x18, 0xA2, 0x7C, 0x8E, 0x63, 0xAA, 0x3A, 0x65, 0x32, 0x05, 0x4A, 0xA7, 0x63, 0x4A, 0x6B, 0xAB, 0x63, 0x8A, 0x52, 0xC8, 0x5B, 0x09, 0x63, 0x4A, 0x84, 0x0C, 0x63, 0x68, 0x5B, 0x88, 0x63, 0xC9, 0x84, 0xAF, 0x73, 0xEC, 0x8C, 0x4D, 0x94, 0x6D, 0x9C, 0x6E, 0xA4, 0xAE, 0xA4, 0xAF, 0xB5, 0x10, 0xAC, 0xEF, 0xB5, 0x10, 0xB5, 0x10, 0xB5, 0x31, 0xB5, 0x10, 0xA4, 0xAE, 0xB5, 0x10, 0xAC, 0xF0, 0xB5, 0x10, 0xB5, 0x30, 0xAC, 0xCF, 0xAC, 0xEF, 0xAC, 0xF0, 0xB5, 0x31, 0xB5, 0x30, 0xB5, 0x10, 0xAC, 0xEF, 0xAC, 0xEF, 0xB4, 0xEF, 0xB5, 0x0F, 0xB4, 0xEF, 0xAC, 0xCF, 0xA4, 0xAF, 0x94, 0x4D, 0x8C, 0x0C, 0x9C, 0x6E, 0xA4, 0xCF, 0xAD, 0x10, 0xB5, 0x51, 0xBD, 0x72, 0xB5, 0x31, 0x9C, 0x6F, 0x29, 0x45, 0x10, 0xA3, 0x42, 0x49, 0x42, 0x28, 0x18, 0xE3, 0x52, 0xCB, 0x8C, 0x91, 0x94, 0xD1, 0x9C, 0xD1, 0x9C, 0xD1, 0xA4, 0xF2, 0xA5, 0x12, 0xAD, 0x33, 0xA5, 0x33, 0xA5, 0x32, 0xA5, 0x12, 0x94, 0xB1, 0x63, 0x2B, 0x18, 0xE3, 0x10, 0x82, 0x10, 0xA3, 0x21, 0x04, 0xAD, 0x54, 0xA5, 0x33, 0x8C, 0x4F, 0x8C, 0x4F, 0xA5, 0x33, 0xAD, 0x53, 0x9D, 0x12, 0xB5, 0x94, 0xAD, 0x53, 0xA4, 0xF1, 0xA4, 0xD0, 0xAC, 0xF0, 0xAC, 0xCE, 0xAC, 0xCE, 0x9C, 0x8E, 0x9C, 0xCF, 0x83, 0xED, 0xB5, 0x72, 0xB5, 0x93, 0xBD, 0x92, 0xBD, 0xB3, 0xBD, 0xD3, 0xA5, 0x10, 0xB5, 0x52, 0x7B, 0xAC, 0x94, 0x8F, 0x94, 0x8F, 0x8C, 0x4E, 0xC5, 0xB3, 0xA4, 0x8E, 0xBD, 0x50, 0xCD, 0xF3, 0xCE, 0x14, 0xAD, 0x31, 0xC5, 0xD4, 0xC5, 0xB4, 0x8C, 0x2F, 0x52, 0x69, 0x52, 0x69, 0x4A, 0x49, 0x52, 0x69, 0x52, 0x8A, 0x63, 0x0C, 0x6B, 0x4D, 0x6B, 0x6D, 0x73, 0x8E, 0x8C, 0x72, 0x9C, 0xF3, 0xA4, 0xF3, 0xC5, 0xF8, 0xD6, 0x7A, 0xD6, 0x79, 0xAD, 0x14, 0xA4, 0xD3, 0xC5, 0xF7, 0x8C, 0x30, 0x9C, 0xB1, 0xA4, 0xF2, 0xA4, 0xF2, 0xAD, 0x12, 0xAD, 0x53, 0xA5, 0x12, 0x9C, 0xB1, 0x6B, 0x2B, 0x63, 0x0B, 0x73, 0xAD, 0x73, 0x8C, 0x6B, 0x4B, 0x7B, 0xAC, 0x84, 0x0D, 0x8C, 0x4F, 0x94, 0x6F, 0x8C, 0x2E, 0x8C, 0x4F, 0x84, 0x0E, 0x83, 0xED, 0x94, 0x6F, 0xB5, 0x32, 0xB5, 0x72, 0xBD, 0x93, 0xBD, 0x93, 0xB5, 0x52, 0xB5, 0x73, 0xBD, 0xB4, 0xA4, 0xF1, 0x94, 0x4F, 0x8C, 0x2F, 0x83, 0xED, 0x8C, 0x2E, 0x83, 0xEE, 0x7B, 0xAD, 0x7B, 0x8D, 0x7B, 0xAD, 0x7B, 0x8C, 0x83, 0xEE, 0x84, 0x0E, 0x9C, 0x90, 0xB5, 0x73, 0xC5, 0xD5, 0xCE, 0x15, 0xAC, 0xF2, 0xB5, 0x33, 0x7B, 0xAD, 0x42, 0x07, 0x41, 0xE7, 0x6B, 0x2B, 0x83, 0xCD, 0xAC, 0xF2, 0x8B, 0xEE, 0x7B, 0x8D, 0x6B, 0x0B, 0x7B, 0x8D, 0x83, 0xCF, 0x62, 0xAA, 0x6B, 0x2C, 0x8B, 0xEF, 0x94, 0x30, 0x94, 0x30, 0x6A, 0xEB, 0x7B, 0x6D, 0x83, 0xAE, 0xA4, 0xB1, 0xAD, 0x12, 0xB5, 0x53, 0xBD, 0x73, 0xBD, 0x73, 0xBD, 0x73, 0xAD, 0x12, 0xB5, 0x52, 0xAD, 0x32, 0xB5, 0x32, 0xBD, 0x73, 0xBD, 0x94, 0xB5, 0x52, 0xAC, 0xF1, 0xA4, 0xD0, 0xAC, 0xF1, 0x52, 0x48, 0x18, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x18, 0xE4, 0x31, 0x87, 0x19, 0x04, 0x19, 0x04, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xC3, 0x18, 0xE4, 0x6B, 0x6D, 0xC5, 0xF5, 0xC5, 0xB3, 0xB5, 0x52, 0xAC, 0xF1, 0xCE, 0x15, 0xC5, 0xF4, 0xB5, 0x72, 0xAC, 0xF1, 0xC5, 0xD4, 0xCD, 0xF5, 0xD6, 0x76, 0xD6, 0x56, 0xB5, 0x33, 0x39, 0xA6, 0x10, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x04, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x18, 0xE5, 0x18, 0xE4, 0x18, 0xE5, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x18, 0xE4, 0x10, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x05, 0x18, 0xE5, 0x18, 0xE5, 0x19, 0x05, 0x18, 0xE5, 0x10, 0xA3, 0x10, 0xC4, 0x10, 0xA4, 0x10, 0x83, 0x08, 0x83, 0x10, 0xA4, 0x18, 0xE4, 0x18, 0xE5, 0x19, 0x05, 0x19, 0x05, 0x21, 0x05, 0x19, 0x05, 0x19, 0x05, 0x21, 0x26, 0x29, 0x46, 0x31, 0x87, 0x31, 0x87, 0x31, 0xA8, 0x31, 0xC8, 0x39, 0xE8, 0x4A, 0x4A, 0x8C, 0x30, 0xD6, 0x56, 0xEE, 0xD7, 0xEE, 0xD6, 0xE6, 0x95, 0xEE, 0x96, 0xE6, 0x55, 0xDE, 0x55, 0xCD, 0xF3, 0xDE, 0x54, 0xEE, 0x95, 0xEE, 0x95, 0xEE, 0xB6, 0xEE, 0x96, 0xE6, 0x75, 0xE6, 0x55, 0xDE, 0x14, 0xAC, 0xD0, 0xA4, 0xF1, 0xB5, 0x73, 0xC5, 0xD4, 0xBD, 0xB4, 0xCE, 0x16, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0x74, 0xC5, 0xD4, 0xCE, 0x57, 0x5A, 0xAA, 0x95, 0x31, 0x5B, 0x2A, 0x29, 0x83, 0x52, 0xE9, 0x5B, 0x2A, 0x5B, 0x2A, 0x63, 0x4A, 0x6B, 0xCC, 0x6B, 0xAC, 0x6B, 0xAB, 0x42, 0x67, 0x7B, 0xED, 0x63, 0x49, 0x4B, 0x07, 0x53, 0x08, 0x4A, 0xA8, 0x52, 0xE9, 0x7B, 0xED, 0x84, 0x0D, 0x8C, 0x2E, 0x9C, 0x8F, 0x9C, 0xB0, 0x7B, 0xAB, 0x94, 0x6E, 0xAC, 0xCF, 0xA4, 0xAF, 0xAC, 0xF0, 0xA4, 0xAF, 0x9C, 0x8E, 0xAC, 0xEF, 0x9C, 0x4D, 0x8B, 0xEB, 0x9C, 0x4D, 0x94, 0x0C, 0xA4, 0xCE, 0x94, 0x2D, 0x9C, 0x4D, 0xA4, 0x8E, 0xAC, 0xCF, 0xAC, 0xCF, 0xA4, 0xAE, 0xAC, 0xCE, 0xBD, 0x50, 0xB5, 0x30, 0xB5, 0x30, 0xB5, 0x30, 0xBD, 0x30, 0xBD, 0x30, 0xBD, 0x30, 0xB5, 0x30, 0xBD, 0x50, 0xBD, 0x30, 0xB5, 0x30, 0xBD, 0x50, 0xC5, 0x72, 0x8B, 0xEE, 0x42, 0x07, 0x18, 0xC3, 0x39, 0xE7, 0x21, 0x04, 0x18, 0xE3, 0x4A, 0x89, 0x6B, 0xAD, 0x73, 0xCD, 0x7B, 0xED, 0x84, 0x0E, 0x8C, 0x4F, 0x8C, 0x4F, 0x8C, 0x6F, 0x8C, 0x4F, 0x7B, 0xAD, 0x39, 0xC6, 0x10, 0x82, 0x10, 0xA2, 0x10, 0xA2, 0x10, 0xA3, 0x18, 0xC3, 0xA5, 0x33, 0xD6, 0xB8, 0xB5, 0xB4, 0xAD, 0x73, 0xC6, 0x36, 0xCE, 0x56, 0xBD, 0xF5, 0xBD, 0xF5, 0xB5, 0x94, 0xA4, 0xF1, 0xAD, 0x11, 0xA4, 0xCF, 0xAC, 0xEF, 0xAC, 0xEF, 0x9C, 0x6E, 0x83, 0xEC, 0x6B, 0x6A, 0x9C, 0xD0, 0xC5, 0xD4, 0xC5, 0xF4, 0xBD, 0xB3, 0xBD, 0xB3, 0xA4, 0xF0, 0xAD, 0x52, 0x83, 0xCD, 0x8C, 0x2E, 0x84, 0x0D, 0x7B, 0xAC, 0xAC, 0xF0, 0xA4, 0x6D, 0xBD, 0x30, 0xC5, 0xF3, 0xCD, 0xF4, 0xB5, 0x92, 0xC5, 0xD4, 0xCE, 0x36, 0x9C, 0x70, 0x41, 0xE7, 0x52, 0x69, 0x52, 0x69, 0x52, 0x89, 0x63, 0x0C, 0x73, 0xAE, 0x73, 0x8E, 0x4A, 0x49, 0x6B, 0x4D, 0x8C, 0x72, 0x9C, 0xF3, 0xBD, 0xB7, 0xC6, 0x18, 0xCE, 0x59, 0xAD, 0x14, 0x83, 0xF0, 0xC5, 0xB6, 0xCD, 0xF7, 0x73, 0x4D, 0x9C, 0xB1, 0x6B, 0x0B, 0x62, 0xCA, 0x8C, 0x2F, 0xB5, 0x94, 0xB5, 0x74, 0x6B, 0x6C, 0x5A, 0xEA, 0x7B, 0xEE, 0x8C, 0x50, 0x84, 0x0E, 0x7B, 0xCD, 0x83, 0xEE, 0x94, 0x70, 0xA4, 0xF1, 0xAD, 0x33, 0xA4, 0xF2, 0x9C, 0xD1, 0x94, 0x6F, 0x83, 0xCD, 0x94, 0x4E, 0xB5, 0x52, 0xB5, 0x72, 0xBD, 0x93, 0xB5, 0x72, 0xAD, 0x12, 0x8C, 0x2F, 0x84, 0x0E, 0x84, 0x0E, 0x8C, 0x4F, 0x9C, 0xB0, 0xA4, 0xD1, 0x9C, 0xB1, 0xB5, 0x74, 0xAD, 0x33, 0xAD, 0x33, 0xAD, 0x53, 0xB5, 0x94, 0xA4, 0xF1, 0xA4, 0xD1, 0xB5, 0x53, 0xBD, 0xB4, 0xAD, 0x32, 0xAD, 0x11, 0xAC, 0xF2, 0xB5, 0x33, 0x94, 0x4F, 0x7B, 0xCD, 0x4A, 0x47, 0x41, 0xE6, 0x52, 0x68, 0x83, 0xCD, 0xB5, 0x33, 0xAC, 0xF2, 0x7B, 0x8D, 0x7B, 0x6D, 0x8C, 0x10, 0x73, 0x2C, 0x83, 0xCE, 0x9C, 0x71, 0xA4, 0xB2, 0x8B, 0xEF, 0x83, 0xAE, 0x94, 0x30, 0x94, 0x30, 0x8C, 0x0F, 0x9C, 0x90, 0xC5, 0xF5, 0xBD, 0x94, 0xB5, 0x32, 0xC5, 0xB4, 0xCD, 0xF5, 0xDE, 0x97, 0xCD, 0xF5, 0xCE, 0x15, 0xC5, 0xD4, 0xBD, 0x53, 0xB5, 0x32, 0xAD, 0x32, 0xAD, 0x11, 0xAC, 0xF1, 0x41, 0xA6, 0x18, 0xA3, 0x10, 0x83, 0x10, 0x82, 0x19, 0x04, 0x31, 0xA7, 0x21, 0x04, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xC3, 0x18, 0xE4, 0x39, 0xA7, 0xA4, 0xF2, 0xAD, 0x32, 0xB5, 0x11, 0xAD, 0x11, 0xAC, 0xF0, 0xAC, 0xF0, 0xAC, 0xF0, 0xAD, 0x10, 0xAD, 0x11, 0xAC, 0xF1, 0xA4, 0xD0, 0xA4, 0xD0, 0xAC, 0xF0, 0xB5, 0x11, 0x62, 0xCA, 0x21, 0x05, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x04, 0x19, 0x05, 0x19, 0x05, 0x19, 0x04, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x19, 0x04, 0x19, 0x05, 0x19, 0x05, 0x19, 0x04, 0x18, 0xE4, 0x19, 0x04, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x05, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xA4, 0x10, 0x83, 0x08, 0x83, 0x10, 0xC4, 0x18, 0xE4, 0x19, 0x05, 0x21, 0x25, 0x21, 0x05, 0x21, 0x26, 0x18, 0xE5, 0x19, 0x05, 0x21, 0x46, 0x29, 0x66, 0x31, 0xA7, 0x31, 0xA8, 0x31, 0xC8, 0x39, 0xE9, 0x31, 0xA8, 0x31, 0xC8, 0x4A, 0x2A, 0x7B, 0x8D, 0xB5, 0x32, 0xDE, 0x35, 0xE6, 0x75, 0xE6, 0x75, 0xE6, 0x75, 0xE6, 0x95, 0xD6, 0x14, 0xE6, 0x55, 0xEE, 0xB6, 0xEE, 0xB6, 0xEE, 0xD6, 0xEE, 0xB6, 0xE6, 0x95, 0xE6, 0x75, 0xD5, 0xF3, 0xAC, 0xF0, 0xAD, 0x32, 0xAD, 0x52, 0xBD, 0x94, 0xB5, 0x53, 0xC5, 0xF5, 0xAD, 0x32, 0xB5, 0x73, 0xB5, 0x94, 0xBD, 0x94, 0xC5, 0xF5, 0xCE, 0x36, 0x9C, 0xB1, 0x31, 0xE5, 0x42, 0x87, 0x52, 0xE8, 0x6B, 0xCC, 0x6B, 0xAC, 0x63, 0x8C, 0x6B, 0xAC, 0x6B, 0x8C, 0x73, 0xED, 0x6B, 0x8B, 0x3A, 0x46, 0x7C, 0x4E, 0x5B, 0x08, 0x4A, 0xE7, 0x5B, 0x4B, 0x4A, 0xA9, 0x52, 0xC9, 0x84, 0x2E, 0x8C, 0x4F, 0x94, 0x90, 0xA5, 0x12, 0xA5, 0x32, 0x9C, 0xD1, 0xAD, 0x31, 0xA4, 0xCF, 0xAD, 0x31, 0xC5, 0xD4, 0xAD, 0x31, 0xAD, 0x31, 0xBD, 0x93, 0xBD, 0x93, 0xA4, 0xD0, 0xA4, 0xF0, 0xA4, 0xF0, 0xAC, 0xF0, 0xA4, 0xAF, 0xA4, 0xCF, 0xB5, 0x51, 0xBD, 0x72, 0xBD, 0x92, 0xAC, 0xCF, 0xB5, 0x10, 0x7B, 0x6A, 0x8B, 0xEC, 0x94, 0x2D, 0x9C, 0x8E, 0xC5, 0x92, 0xAC, 0xCF, 0xBD, 0x30, 0xCD, 0xD3, 0xB5, 0x10, 0xBD, 0x30, 0x94, 0x2C, 0x94, 0x2C, 0x9C, 0x2D, 0xA4, 0x6E, 0x9C, 0x6F, 0x7B, 0x8C, 0x42, 0x07, 0x18, 0xE3, 0x18, 0xE4, 0x19, 0x04, 0x29, 0x65, 0x42, 0x27, 0x52, 0xA9, 0x62, 0xEA, 0x63, 0x2A, 0x6B, 0x6B, 0x6B, 0x4B, 0x4A, 0x27, 0x18, 0xC2, 0x10, 0x82, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA2, 0x10, 0xA3, 0x10, 0xA3, 0x73, 0x8D, 0xAD, 0x32, 0xAC, 0xF0, 0xA4, 0xCF, 0xAD, 0x10, 0xAC, 0xF0, 0xA4, 0xAF, 0x94, 0x4E, 0x9C, 0x6E, 0x9C, 0x8E, 0xAD, 0x31, 0x9C, 0x8E, 0xB4, 0xEF, 0xC5, 0x91, 0xBD, 0x51, 0x94, 0x2D, 0x83, 0xCC, 0x73, 0x6B, 0xAD, 0x11, 0xBD, 0x93, 0xBD, 0x92, 0xB5, 0x72, 0x8C, 0x2D, 0x94, 0x6E, 0x83, 0xED, 0x8C, 0x2E, 0x9C, 0xD0, 0xAD, 0x52, 0xA4, 0xAF, 0xA4, 0x8E, 0xAC, 0xEF, 0xC5, 0xB2, 0xC5, 0xF3, 0xBD, 0xD3, 0xC5, 0xF4, 0xD6, 0x56, 0xC5, 0xD5, 0x4A, 0x27, 0x52, 0x89, 0x5A, 0xCA, 0x73, 0x8E, 0x8C, 0x10, 0x62, 0xCB, 0x52, 0x8A, 0x6B, 0x4D, 0x7B, 0xCF, 0x8C, 0x31, 0xA4, 0xF4, 0xBD, 0xD7, 0xB5, 0x55, 0x7B, 0xAF, 0x7B, 0x8E, 0xB5, 0x34, 0xBD, 0x95, 0x8C, 0x0F, 0x62, 0xAA, 0x62, 0xAA, 0x29, 0x24, 0x20, 0xE4, 0x5A, 0xEB, 0xB5, 0x95, 0xB5, 0x74, 0x94, 0xB1, 0x94, 0x91, 0x8C, 0x2F, 0x7B, 0xCE, 0x84, 0x0E, 0x84, 0x0F, 0x8C, 0x4F, 0xAD, 0x33, 0xB5, 0x73, 0xAD, 0x53, 0xA5, 0x32, 0xA5, 0x12, 0x94, 0x90, 0x84, 0x0E, 0x94, 0x4F, 0xB5, 0x53, 0xB5, 0x73, 0xA4, 0xD1, 0x94, 0x4F, 0x8C, 0x2E, 0x6B, 0x6C, 0x84, 0x2E, 0xAD, 0x33, 0x9C, 0xD1, 0x9C, 0x90, 0xAD, 0x12, 0x9C, 0xB1, 0xAD, 0x53, 0xAD, 0x32, 0xAD, 0x12, 0xA5, 0x12, 0xBD, 0xB4, 0xA4, 0xF1, 0x94, 0x90, 0xA4, 0xF1, 0xA4, 0xD1, 0x9C, 0xB0, 0x94, 0x6F, 0xAD, 0x12, 0xAD, 0x32, 0x8C, 0x2E, 0x9C, 0x90, 0x94, 0x6F, 0x5A, 0x88, 0x31, 0x65, 0x41, 0xC6, 0x73, 0x2B, 0xA4, 0xD1, 0x83, 0xCE, 0x62, 0xA9, 0x83, 0xCE, 0x8B, 0xEF, 0x7B, 0x4C, 0x8C, 0x0F, 0x8C, 0x0F, 0x73, 0x2C, 0x8C, 0x0F, 0x9C, 0x71, 0x8B, 0xEF, 0x73, 0x2C, 0x7B, 0x8D, 0x94, 0x2F, 0x9C, 0x91, 0xB5, 0x33, 0xBD, 0x74, 0xB5, 0x53, 0xC5, 0xF5, 0xC5, 0xD4, 0xC5, 0xD4, 0xBD, 0x73, 0xBD, 0x73, 0xBD, 0x93, 0xC5, 0x93, 0xC5, 0xD4, 0x8B, 0xEE, 0x29, 0x25, 0x10, 0x82, 0x10, 0x82, 0x18, 0xC4, 0x21, 0x25, 0x31, 0x86, 0x19, 0x04, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC3, 0x18, 0xC3, 0x4A, 0x49, 0xB5, 0x74, 0xAC, 0xD0, 0xC5, 0xB3, 0xBD, 0x72, 0xB5, 0x31, 0xB5, 0x31, 0xB5, 0x31, 0xAD, 0x11, 0xA4, 0xD0, 0xBD, 0x52, 0xBD, 0x72, 0xCD, 0xF4, 0xD6, 0x15, 0xD6, 0x35, 0x9C, 0x6F, 0x41, 0xE7, 0x18, 0xC4, 0x18, 0xE5, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x05, 0x18, 0xE4, 0x19, 0x04, 0x18, 0xE4, 0x19, 0x05, 0x19, 0x04, 0x18, 0xE4, 0x19, 0x04, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x19, 0x04, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xA3, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x08, 0x83, 0x08, 0x83, 0x10, 0xC4, 0x18, 0xE4, 0x19, 0x05, 0x21, 0x05, 0x18, 0xE5, 0x21, 0x26, 0x18, 0xE5, 0x21, 0x06, 0x29, 0x46, 0x31, 0x87, 0x31, 0xA8, 0x31, 0xA8, 0x31, 0xC8, 0x39, 0xC8, 0x29, 0x67, 0x31, 0xC8, 0x42, 0x0A, 0x4A, 0x6A, 0x63, 0x0C, 0xAC, 0xF1, 0xDE, 0x54, 0xEE, 0x95, 0xE6, 0x95, 0xE6, 0x75, 0xE6, 0x75, 0xE6, 0x75, 0xE6, 0x75, 0xE6, 0x54, 0xEE, 0x95, 0xEE, 0xB6, 0xEE, 0x95, 0xEE, 0x95, 0xCD, 0x93, 0xB5, 0x11, 0xA4, 0xF1, 0xAD, 0x12, 0xBD, 0x94, 0xAD, 0x32, 0xBD, 0xB4, 0xAD, 0x53, 0xB5, 0x53, 0xB5, 0x73, 0xBD, 0xB4, 0xB5, 0x93, 0xC5, 0xF5, 0xBD, 0xB4, 0x32, 0x06, 0x21, 0x62, 0x29, 0xC4, 0x42, 0x67, 0x4A, 0xC9, 0x73, 0xED, 0x7C, 0x0E, 0x7C, 0x0E, 0x7C, 0x2E, 0x73, 0xAC, 0x3A, 0x25, 0x6B, 0xCC, 0x7C, 0x4E, 0x95, 0x11, 0x94, 0xF2, 0x73, 0xCE, 0x5B, 0x0B, 0x84, 0x2F, 0x8C, 0x90, 0xA5, 0x33, 0xC6, 0x16, 0xAD, 0x53, 0xAD, 0x54, 0xB5, 0x53, 0xAC, 0xD0, 0xBD, 0x93, 0xDE, 0x97, 0xC5, 0xF4, 0xB5, 0x52, 0xAD, 0x11, 0xA4, 0xD0, 0xAD, 0x31, 0xC5, 0xD4, 0xC5, 0xB3, 0xCD, 0xD4, 0xCD, 0xD4, 0xC5, 0xB3, 0xCD, 0xF4, 0xC5, 0xD3, 0xC5, 0xB3, 0xC5, 0xB3, 0xC5, 0xB3, 0x9C, 0x8E, 0xA4, 0xF1, 0xA4, 0xAF, 0x9C, 0xAF, 0xC5, 0xD3, 0x9C, 0x4D, 0xBD, 0x30, 0xD6, 0x15, 0xDE, 0x76, 0xDE, 0x55, 0xA4, 0xD0, 0xB5, 0x31, 0xB5, 0x52, 0xB5, 0x52, 0xB5, 0x11, 0x9C, 0x8F, 0x94, 0x4F, 0x7B, 0x8D, 0x18, 0xE3, 0x10, 0xC3, 0x19, 0x04, 0x29, 0x65, 0x39, 0xC7, 0x39, 0xE6, 0x31, 0xC6, 0x31, 0x85, 0x18, 0xC2, 0x10, 0x82, 0x10, 0x82, 0x10, 0xA2, 0x10, 0x82, 0x08, 0x82, 0x10, 0xA2, 0x10, 0xA3, 0x10, 0xA3, 0x52, 0x69, 0xA4, 0xB0, 0xA4, 0x8E, 0xA4, 0x8E, 0xA4, 0xAE, 0xA4, 0xAE, 0xAC, 0xCF, 0xAC, 0xEF, 0xAC, 0xEF, 0xAC, 0xCF, 0xAC, 0xCF, 0xBD, 0x30, 0xBD, 0x51, 0xBD, 0x51, 0xBD, 0x51, 0xBD, 0x51, 0xBD, 0x51, 0xBD, 0x31, 0xB5, 0x10, 0xB5, 0x10, 0xB5, 0x10, 0xAC, 0xCF, 0xA4, 0xAF, 0xB5, 0x10, 0xB5, 0x10, 0xBD, 0x31, 0xB5, 0x30, 0xBD, 0x71, 0xBD, 0x30, 0xB5, 0x10, 0xA4, 0x8D, 0xAC, 0xCE, 0xBD, 0x72, 0xAD, 0x31, 0xC5, 0xD4, 0xB5, 0x52, 0xA4, 0xD1, 0x94, 0x4F, 0x7B, 0x8D, 0x6B, 0x2C, 0x73, 0x4D, 0x63, 0x0C, 0x52, 0x6A, 0x7B, 0x8E, 0x83, 0xF0, 0x94, 0x72, 0xAD, 0x76, 0xCE, 0x39, 0x9C, 0xD3, 0x5A, 0x8B, 0x62, 0xCB, 0x94, 0x51, 0xAD, 0x14, 0x9C, 0xB2, 0x6A, 0xEB, 0x5A, 0x69, 0x49, 0xE7, 0x29, 0x24, 0x41, 0xE7, 0x9C, 0xD2, 0xAD, 0x33, 0xB5, 0x74, 0x94, 0xB1, 0x94, 0xB1, 0x9C, 0xD2, 0x84, 0x0E, 0x83, 0xEE, 0x94, 0x70, 0x94, 0x90, 0xB5, 0x53, 0xA5, 0x12, 0xAD, 0x32, 0xB5, 0x94, 0xAD, 0x53, 0x9C, 0xD1, 0x8C, 0x2E, 0x94, 0x6F, 0xBD, 0x94, 0xA4, 0xB0, 0x63, 0x0A, 0x6B, 0x4B, 0x73, 0x6C, 0x7B, 0xCD, 0x83, 0xED, 0x9C, 0xF1, 0xC5, 0xF5, 0xA4, 0xF1, 0x94, 0x6F, 0x9C, 0x90, 0x9C, 0xB0, 0xA4, 0xF1, 0xA4, 0xF2, 0x9C, 0xD1, 0x9C, 0x90, 0x94, 0x90, 0x9C, 0xD1, 0xA4, 0xD1, 0x8C, 0x2F, 0x73, 0x6C, 0x8C, 0x0E, 0xAD, 0x12, 0xB5, 0x53, 0xA4, 0xD0, 0x9C, 0x8F, 0x9C, 0xD0, 0x94, 0x6F, 0x5A, 0xC9, 0x39, 0xA6, 0x39, 0xA5, 0x62, 0xC9, 0x8B, 0xEE, 0x73, 0x2C, 0x52, 0x48, 0x52, 0x48, 0x73, 0x4C, 0x6A, 0xEB, 0x7B, 0x4D, 0x73, 0x0C, 0x94, 0x10, 0x7B, 0x4C, 0x7B, 0x6D, 0x8B, 0xEF, 0x73, 0x0C, 0x6A, 0xEB, 0x6A, 0xEB, 0x8C, 0x0F, 0xB5, 0x54, 0xAD, 0x13, 0xAD, 0x13, 0xB5, 0x53, 0xAD, 0x32, 0xAD, 0x32, 0xA4, 0xB0, 0x8C, 0x0D, 0x94, 0x4E, 0x8C, 0x0E, 0x4A, 0x07, 0x31, 0x65, 0x21, 0x04, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x21, 0x25, 0x18, 0xE4, 0x18, 0xC3, 0x18, 0xE4, 0x18, 0xC3, 0x31, 0xA6, 0x8C, 0x2F, 0xB5, 0x32, 0xB5, 0x31, 0xCD, 0xF4, 0xC5, 0xB3, 0xB5, 0x32, 0xB5, 0x52, 0xAC, 0xF1, 0xA4, 0x8F, 0x83, 0xAC, 0x9C, 0x6E, 0xA4, 0xAF, 0xB5, 0x31, 0xBD, 0x52, 0xBD, 0x51, 0xAD, 0x11, 0x7B, 0x8D, 0x29, 0x45, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x04, 0x19, 0x05, 0x21, 0x25, 0x21, 0x25, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x04, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xE4, 0x19, 0x05, 0x19, 0x05, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xE4, 0x10, 0xC4, 0x10, 0xC4, 0x18, 0xC4, 0x10, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x08, 0x83, 0x10, 0x83, 0x10, 0xC4, 0x18, 0xE4, 0x18, 0xE5, 0x19, 0x05, 0x18, 0xE5, 0x21, 0x26, 0x18, 0xE5, 0x21, 0x46, 0x29, 0x47, 0x31, 0xA8, 0x31, 0x88, 0x31, 0x87, 0x31, 0xA8, 0x31, 0xA8, 0x31, 0xA8, 0x42, 0x2A, 0x42, 0x09, 0x42, 0x09, 0x4A, 0x4A, 0x73, 0x6D, 0xA4, 0x90, 0xA4, 0x8F, 0xB5, 0x10, 0xBD, 0x51, 0xC5, 0x92, 0xCD, 0xD3, 0xD5, 0xD3, 0xD5, 0xD3, 0xD5, 0xD3, 0xD5, 0xD3, 0xDE, 0x34, 0xB4, 0xF0, 0x83, 0x8B, 0xA4, 0xF1, 0x8C, 0x2E, 0x94, 0x4E, 0x9C, 0xB0, 0x9C, 0xD0, 0x9C, 0xD0, 0xA4, 0xF1, 0xA4, 0xF1, 0xAD, 0x32, 0xAD, 0x32, 0xA4, 0xF1, 0x9C, 0xAF, 0xAD, 0x11, 0x4A, 0x88, 0x73, 0xCD, 0x5B, 0x2A, 0x84, 0x4F, 0x84, 0x4F, 0x7C, 0x0E, 0x8C, 0x90, 0x8C, 0x91, 0x8C, 0x90, 0x8C, 0x6E, 0x3A, 0x25, 0x53, 0x09, 0x63, 0x8B, 0x84, 0x6F, 0x84, 0x4F, 0x73, 0xAD, 0x6B, 0x8D, 0x8C, 0x91, 0xA5, 0x33, 0xB5, 0x94, 0xC6, 0x37, 0xAD, 0x74, 0xAD, 0x94, 0xAD, 0x52, 0xA4, 0xD0, 0xAD, 0x31, 0xCE, 0x36, 0xBD, 0xB3, 0xB5, 0x73, 0x8C, 0x2E, 0x6B, 0x2B, 0xCE, 0x15, 0xD6, 0x56, 0xCD, 0xF4, 0xCD, 0xF3, 0xCD, 0xD4, 0xD6, 0x14, 0xD6, 0x14, 0xCD, 0xF4, 0xCD, 0xF4, 0xCD, 0xF4, 0xCD, 0xF4, 0xBD, 0x92, 0xBD, 0x93, 0xBD, 0x93, 0xAD, 0x31, 0xB5, 0x51, 0x9C, 0x6E, 0xBD, 0x51, 0xCD, 0xD3, 0xDE, 0x55, 0xD6, 0x15, 0xC5, 0xB3, 0xC5, 0xF5, 0xCE, 0x15, 0xC5, 0xF4, 0xA4, 0xD1, 0x8B, 0xED, 0x62, 0xCA, 0x5A, 0xCA, 0x21, 0x24, 0x10, 0xA3, 0x08, 0x82, 0x10, 0xA3, 0x31, 0x86, 0x3A, 0x08, 0x39, 0xC7, 0x18, 0xC3, 0x08, 0x62, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x08, 0x82, 0x10, 0xA2, 0x10, 0xA2, 0x10, 0xA3, 0x31, 0x86, 0x84, 0x0E, 0x7B, 0xAC, 0x7B, 0x6B, 0x73, 0x6A, 0x73, 0x4A, 0x7B, 0x8A, 0x7B, 0x6A, 0x73, 0x29, 0x73, 0x29, 0x7B, 0x8A, 0x83, 0xCB, 0x9C, 0x4D, 0x8B, 0xEB, 0xA4, 0x8E, 0xA4, 0xAE, 0xAC, 0xCF, 0xAC, 0xCF, 0xC5, 0x91, 0xB5, 0x0F, 0xAC, 0xCE, 0xB5, 0x0F, 0xB4, 0xEF, 0xB5, 0x30, 0xB5, 0x10, 0xB5, 0x0F, 0xB4, 0xEF, 0xB5, 0x0F, 0xBD, 0x10, 0xAC, 0xCE, 0xB4, 0xEF, 0xA4, 0xAE, 0xBD, 0x93, 0xAD, 0x32, 0x8C, 0x0E, 0x83, 0x8B, 0x83, 0xCC, 0xA4, 0x90, 0x8C, 0x0F, 0x7B, 0x8D, 0x5A, 0xAA, 0x62, 0xCB, 0x62, 0xCB, 0x8C, 0x51, 0xA5, 0x14, 0xB5, 0x96, 0xAD, 0x76, 0x7B, 0xCF, 0x42, 0x29, 0x6B, 0x2D, 0x6B, 0x2D, 0x73, 0x8E, 0xAD, 0x14, 0x8C, 0x30, 0x52, 0x28, 0x52, 0x28, 0x4A, 0x28, 0x52, 0x28, 0x6A, 0xEA, 0x62, 0xEB, 0x8C, 0x4F, 0x9C, 0xB1, 0x94, 0x70, 0x73, 0x8C, 0x9C, 0xD1, 0x9C, 0xB1, 0x9C, 0xD1, 0xAD, 0x12, 0xA4, 0xD2, 0xAD, 0x53, 0xB5, 0x73, 0xBD, 0xB4, 0xBD, 0xB4, 0xB5, 0x73, 0xAD, 0x32, 0x9C, 0xD0, 0x8C, 0x4F, 0xBD, 0xB4, 0xBD, 0x73, 0x94, 0x4F, 0x8C, 0x2F, 0x84, 0x0E, 0x8C, 0x2F, 0x73, 0xAC, 0x84, 0x0E, 0x9C, 0xD1, 0x84, 0x0E, 0x73, 0x6B, 0x94, 0x6F, 0x7B, 0xCD, 0x94, 0x90, 0x9C, 0xD1, 0xA5, 0x12, 0x8C, 0x2F, 0x94, 0x4F, 0x8C, 0x2F, 0x8C, 0x4F, 0x8C, 0x4F, 0x73, 0x8D, 0x8C, 0x2F, 0xB5, 0x52, 0xB5, 0x53, 0xAD, 0x32, 0xAD, 0x31, 0x94, 0x6F, 0x9C, 0x90, 0x94, 0x6F, 0x63, 0x0A, 0x4A, 0x28, 0x42, 0x07, 0x6B, 0x2B, 0x5A, 0xAA, 0x4A, 0x28, 0x41, 0xE7, 0x62, 0xCA, 0x83, 0xAE, 0x8B, 0xCF, 0x73, 0x0C, 0x6A, 0xEB, 0x83, 0xCF, 0x83, 0xCE, 0x9C, 0x92, 0x7B, 0x6D, 0x94, 0x50, 0x83, 0xCE, 0x94, 0x30, 0x9C, 0x71, 0x94, 0x30, 0x8B, 0xEE, 0x94, 0x30, 0x83, 0xCE, 0x94, 0x2F, 0x39, 0xA6, 0x18, 0xC3, 0x18, 0xA2, 0x18, 0xE3, 0x41, 0xE7, 0x31, 0x66, 0x20, 0xE4, 0x10, 0xC3, 0x10, 0x83, 0x10, 0xA3, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xC3, 0x18, 0xE4, 0x21, 0x04, 0x94, 0x70, 0xB5, 0x73, 0xAD, 0x11, 0xB5, 0x32, 0xBD, 0x93, 0xBD, 0x93, 0xBD, 0xB3, 0xBD, 0xB3, 0xC5, 0xB3, 0xC5, 0xD4, 0xAC, 0xD0, 0xBD, 0x73, 0xC5, 0xD4, 0xC5, 0x93, 0xBD, 0x52, 0xBD, 0x93, 0xB5, 0x72, 0x94, 0x4F, 0x5A, 0x8A, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x04, 0x19, 0x05, 0x21, 0x05, 0x21, 0x25, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x04, 0x19, 0x04, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x21, 0x05, 0x19, 0x05, 0x19, 0x05, 0x18, 0xE4, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC3, 0x10, 0xC4, 0x10, 0xC3, 0x10, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x05, 0x19, 0x05, 0x21, 0x26, 0x21, 0x26, 0x21, 0x46, 0x29, 0x46, 0x29, 0x87, 0x21, 0x46, 0x29, 0x67, 0x29, 0x87, 0x31, 0x87, 0x39, 0xE9, 0x3A, 0x09, 0x39, 0xC8, 0x31, 0xC8, 0x42, 0x09, 0x52, 0xCC, 0x84, 0x0F, 0xB5, 0x32, 0xB5, 0x52, 0xB5, 0x52, 0xB5, 0x32, 0xB5, 0x32, 0xB5, 0x12, 0xAC, 0xF1, 0xAC, 0xF1, 0xB5, 0x11, 0xAD, 0x11, 0xA4, 0xB0, 0xAD, 0x32, 0xBD, 0x93, 0xB5, 0x32, 0xA4, 0xF1, 0xA4, 0xD1, 0x9C, 0x90, 0x9C, 0x90, 0x94, 0x6F, 0x8C, 0x2E, 0x94, 0x4F, 0x8C, 0x2E, 0x8C, 0x0E, 0x83, 0xED, 0x83, 0xED, 0x8C, 0xB0, 0x94, 0xB1, 0x6B, 0x6C, 0x8C, 0xB0, 0x7C, 0x2F, 0x94, 0xB1, 0xB5, 0xF6, 0xAD, 0x94, 0x9C, 0xD1, 0x52, 0x87, 0x42, 0x26, 0x63, 0x8B, 0x74, 0x2E, 0x84, 0x90, 0x8C, 0xB0, 0x84, 0x50, 0x84, 0x2F, 0x9C, 0xF2, 0xAD, 0x74, 0xAD, 0x74, 0xC6, 0x57, 0xB5, 0xB5, 0xAD, 0x74, 0x9C, 0xD0, 0xAC, 0xF0, 0xB5, 0x52, 0xC5, 0xD4, 0xBD, 0x93, 0xB5, 0x52, 0xB5, 0x73, 0xB5, 0x52, 0xCE, 0x15, 0xDE, 0x76, 0xD6, 0x15, 0xCE, 0x14, 0xCE, 0x14, 0xDE, 0x76, 0xD6, 0x35, 0xCE, 0x14, 0xCD, 0xF4, 0xCD, 0xF4, 0xD6, 0x55, 0xD6, 0x15, 0xCD, 0xF4, 0xCE, 0x14, 0xBD, 0xB3, 0xAD, 0x11, 0x9C, 0x8E, 0xBD, 0x51, 0xA4, 0xAE, 0xBD, 0x92, 0xC5, 0xB3, 0xC5, 0xD4, 0xD6, 0x56, 0xD6, 0x76, 0xD6, 0x36, 0xA4, 0xB1, 0x8C, 0x2F, 0x73, 0x6C, 0x4A, 0x08, 0x18, 0xE4, 0x10, 0xC3, 0x19, 0x04, 0x29, 0x86, 0x31, 0xC8, 0x31, 0xC8, 0x39, 0xE8, 0x4A, 0x6A, 0x29, 0x46, 0x08, 0x62, 0x08, 0x62, 0x08, 0x82, 0x08, 0x82, 0x08, 0x82, 0x08, 0x82, 0x08, 0x82, 0x10, 0xA3, 0x21, 0x25, 0xAD, 0x53, 0xB5, 0x53, 0xB5, 0x53, 0xAD, 0x32, 0x9C, 0xB0, 0x9C, 0xB0, 0xA4, 0xF1, 0xA4, 0xD1, 0x94, 0x6F, 0x8C, 0x2E, 0x94, 0x6E, 0x94, 0x4E, 0x8B, 0xED, 0x9C, 0xAF, 0xAD, 0x11, 0xA4, 0xAF, 0x8C, 0x0D, 0xAC, 0xEF, 0x9C, 0x4D, 0xA4, 0x6D, 0xA4, 0x6D, 0xA4, 0x8E, 0xBD, 0x51, 0xAD, 0x11, 0xAC, 0xD0, 0x7B, 0x8B, 0x73, 0x2A, 0x7B, 0x8B, 0x8C, 0x0C, 0x9C, 0x6E, 0x83, 0xCD, 0xAD, 0x13, 0xA4, 0xF2, 0x73, 0x4C, 0x73, 0x4B, 0xA4, 0x90, 0x9C, 0x4F, 0x6A, 0xCA, 0x6B, 0x2C, 0x7B, 0xAE, 0xA4, 0xF3, 0x94, 0x72, 0x7B, 0xAE, 0x52, 0x8A, 0x39, 0xA7, 0x4A, 0x6A, 0x62, 0xEC, 0x73, 0x6E, 0x63, 0x0C, 0x6B, 0x0C, 0x7B, 0x8E, 0x83, 0xEF, 0x73, 0x2C, 0x6B, 0x2C, 0x5A, 0x89, 0x31, 0x44, 0x29, 0x44, 0x39, 0x85, 0x62, 0xEB, 0x9C, 0x91, 0x94, 0x50, 0x94, 0x50, 0x8C, 0x2E, 0x94, 0x0D, 0x94, 0x0D, 0x94, 0x4E, 0x9C, 0x8E, 0x9C, 0x8F, 0xA4, 0x8F, 0xA4, 0xD0, 0xB5, 0x11, 0xAD, 0x11, 0xAD, 0x11, 0xAC, 0xF1, 0xAD, 0x11, 0x94, 0x4E, 0xA4, 0xD0, 0xAD, 0x12, 0xAD, 0x32, 0x9C, 0x90, 0x7B, 0xAD, 0x7B, 0x8C, 0x7B, 0xCD, 0x83, 0xEE, 0x83, 0xEE, 0x8C, 0x4F, 0x94, 0x6F, 0xA4, 0xF1, 0x9C, 0xB0, 0x8C, 0x2E, 0x83, 0xED, 0x83, 0xEE, 0x73, 0x8C, 0x83, 0xEE, 0x8C, 0x0E, 0x94, 0x70, 0x94, 0x70, 0x9C, 0xB1, 0x9C, 0x90, 0xAC, 0xF1, 0xB5, 0x52, 0xB5, 0x32, 0xC5, 0xD4, 0xB5, 0x52, 0xBD, 0x93, 0xC5, 0xF4, 0xBD, 0x93, 0x8C, 0x2E, 0x41, 0xE6, 0x41, 0xE6, 0x41, 0xE7, 0x41, 0xE7, 0x42, 0x07, 0x41, 0xE7, 0xA5, 0x14, 0xBD, 0x96, 0x94, 0x71, 0x62, 0xCB, 0x62, 0xEB, 0x6A, 0xEB, 0x83, 0xCF, 0x73, 0x2C, 0x94, 0x30, 0x6A, 0xEB, 0x8B, 0xEF, 0xAC, 0xD2, 0x94, 0x30, 0x83, 0x8D, 0x52, 0x49, 0x4A, 0x07, 0x6B, 0x0B, 0x73, 0x4D, 0x83, 0xEF, 0x62, 0xEB, 0x29, 0x24, 0x31, 0x86, 0x21, 0x04, 0x18, 0xC3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x18, 0xE4, 0x18, 0xC3, 0x18, 0xE4, 0x29, 0x65, 0xAD, 0x53, 0xC5, 0xD4, 0xAC, 0xF1, 0xBD, 0x73, 0xC5, 0xD4, 0xC5, 0xB3, 0xC5, 0xD4, 0xCD, 0xF4, 0xCD, 0xF4, 0xCD, 0xD4, 0xBD, 0x73, 0xCD, 0xF4, 0xD6, 0x36, 0xCE, 0x15, 0xCD, 0xF5, 0xCD, 0xF5, 0xCE, 0x15, 0xB5, 0x32, 0x83, 0xEE, 0x29, 0x65, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x04, 0x18, 0xE4, 0x18, 0xE4, 0x21, 0x05, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x04, 0x19, 0x05, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x04, 0x18, 0xE5, 0x18, 0xE4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA4, 0x10, 0xA3, 0x10, 0xA3, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xC4, 0x10, 0xC4, 0x18, 0xE4, 0x19, 0x05, 0x19, 0x05, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x46, 0x21, 0x26, 0x18, 0xE5, 0x29, 0x46, 0x29, 0x67, 0x29, 0x87, 0x31, 0xC8, 0x39, 0xC9, 0x39, 0xC8, 0x39, 0xE9, 0x42, 0x2A, 0x3A, 0x09, 0x42, 0x49, 0xA4, 0xF2, 0xCE, 0x16, 0xBD, 0x73, 0xBD, 0x93, 0xA4, 0xB0, 0xAC, 0xF1, 0xCD, 0xD4, 0xBD, 0x52, 0x9C, 0x8F, 0x83, 0xCD, 0x7B, 0xAC, 0x94, 0x2E, 0xAD, 0x11, 0xB5, 0x52, 0x9C, 0x6F, 0xA4, 0xF1, 0xAD, 0x12, 0xA4, 0xD1, 0x9C, 0x6F, 0x9C, 0xAF, 0xAD, 0x11, 0xAD, 0x11, 0xAD, 0x32, 0xB5, 0x52, 0xB5, 0x52, 0x9D, 0x53, 0x8C, 0xB0, 0x5A, 0xC9, 0x73, 0xAD, 0x7C, 0x2E, 0xC6, 0x37, 0xB5, 0xD6, 0x7C, 0x2F, 0x5A, 0xEA, 0x63, 0x0A, 0x52, 0x87, 0x31, 0xE4, 0x3A, 0x46, 0x63, 0x8C, 0x94, 0xF1, 0x9C, 0xF2, 0x9D, 0x13, 0xA5, 0x54, 0xBD, 0xF6, 0xBD, 0xD5, 0xC6, 0x16, 0xBD, 0xD5, 0xA5, 0x33, 0xA4, 0xF1, 0xAD, 0x10, 0xB5, 0x52, 0xAD, 0x11, 0xBD, 0x93, 0xBD, 0xB3, 0xBD, 0xD4, 0xC5, 0xD4, 0xCE, 0x35, 0xD6, 0x56, 0xC5, 0xF4, 0xD6, 0x35, 0xD6, 0x15, 0xD6, 0x56, 0xCD, 0xD4, 0xC5, 0xD4, 0xD6, 0x35, 0xDE, 0x56, 0xDE, 0x56, 0xBD, 0x52, 0xCE, 0x15, 0xBD, 0xB3, 0xBD, 0xB3, 0xAD, 0x32, 0x9C, 0x4E, 0xBD, 0x30, 0xAC, 0xCF, 0xC5, 0x93, 0xCD, 0xF4, 0xCE, 0x35, 0xD6, 0x77, 0xD6, 0x77, 0x8C, 0x0E, 0x8B, 0xEF, 0x8C, 0x10, 0x62, 0xCB, 0x39, 0xA7, 0x42, 0x08, 0x39, 0xE8, 0x29, 0x86, 0x31, 0xA7, 0x29, 0x66, 0x29, 0x86, 0x21, 0x45, 0x42, 0x29, 0x63, 0x0D, 0x29, 0x45, 0x10, 0xA3, 0x08, 0x62, 0x08, 0x82, 0x08, 0x82, 0x08, 0x82, 0x10, 0xA2, 0x18, 0xC3, 0x21, 0x24, 0xBD, 0xF6, 0xCE, 0x36, 0xCE, 0x16, 0xAD, 0x53, 0xAD, 0x32, 0xCE, 0x36, 0xCE, 0x57, 0xCE, 0x36, 0xC5, 0xF5, 0xBD, 0x94, 0xAD, 0x52, 0xAD, 0x11, 0xAD, 0x32, 0xB5, 0x93, 0xB5, 0x73, 0xA4, 0xF1, 0x8C, 0x0D, 0xA4, 0xCF, 0xAC, 0xAE, 0xAC, 0xCF, 0xC5, 0xB2, 0xC5, 0xB2, 0xBD, 0xB3, 0xBD, 0xD4, 0xB5, 0x93, 0x9C, 0xF1, 0x94, 0x6F, 0x8C, 0x4F, 0x94, 0x90, 0x83, 0xEE, 0x41, 0xE7, 0x5A, 0x8A, 0x5A, 0xAA, 0x5A, 0xCB, 0x5A, 0xAA, 0x8B, 0xEE, 0x83, 0xAD, 0x5A, 0x89, 0x62, 0xAA, 0x5A, 0x69, 0x62, 0xEB, 0xA4, 0xF4, 0x7B, 0xCF, 0x5A, 0xAB, 0x42, 0x08, 0x39, 0xC7, 0x62, 0xEC, 0x8C, 0x10, 0x5A, 0xAA, 0x83, 0xAF, 0x73, 0x6D, 0x7B, 0xAE, 0x63, 0x0B, 0x52, 0x69, 0x4A, 0x48, 0x39, 0x85, 0x29, 0x24, 0x39, 0x85, 0x62, 0xEB, 0x83, 0xEF, 0x8C, 0x30, 0x7B, 0x8D, 0xAC, 0xF1, 0xBD, 0x31, 0xBD, 0x31, 0xBD, 0x51, 0xBD, 0x51, 0xB5, 0x31, 0xB5, 0x10, 0xBD, 0x10, 0xBD, 0x31, 0xBD, 0x31, 0xBD, 0x31, 0xBD, 0x10, 0xBD, 0x31, 0xB5, 0x10, 0xB5, 0x11, 0xB5, 0x32, 0xAD, 0x12, 0xAD, 0x11, 0xB5, 0x53, 0xB5, 0x73, 0xB5, 0x33, 0xAC, 0xF1, 0xA4, 0xD1, 0xA4, 0xD1, 0x9C, 0x8F, 0x9C, 0x90, 0x9C, 0x90, 0x9C, 0x70, 0x94, 0x4F, 0x94, 0x4F, 0x8C, 0x2E, 0x8C, 0x2F, 0x8C, 0x2F, 0x8C, 0x2E, 0x8C, 0x2F, 0x94, 0x4F, 0x94, 0x4F, 0xAD, 0x11, 0xB5, 0x32, 0xB5, 0x31, 0xB5, 0x52, 0xCD, 0xF4, 0xC5, 0xF4, 0xBD, 0xB3, 0xC5, 0xD4, 0xBD, 0x93, 0x83, 0xAC, 0x31, 0x85, 0x31, 0x65, 0x39, 0xA6, 0x31, 0x85, 0x42, 0x08, 0x94, 0x92, 0x7B, 0xCF, 0x7B, 0xCF, 0x7B, 0xCF, 0xB5, 0x96, 0x83, 0xF0, 0x62, 0xEB, 0x5A, 0x8A, 0x7B, 0x6D, 0x5A, 0x69, 0x7B, 0x4D, 0x93, 0xEF, 0x7B, 0x2C, 0x8B, 0xCE, 0x62, 0xCB, 0x62, 0xCB, 0x73, 0x2C, 0x6B, 0x0C, 0x83, 0xCF, 0x9C, 0x71, 0x8C, 0x30, 0x4A, 0x08, 0x20, 0xE4, 0x18, 0xC4, 0x10, 0xC4, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xC3, 0x42, 0x08, 0xC5, 0xD5, 0xCD, 0xF5, 0xAC, 0xD0, 0xC5, 0x93, 0xDE, 0x35, 0xD6, 0x14, 0xD5, 0xF4, 0xD5, 0xF4, 0xD6, 0x14, 0xD6, 0x35, 0xCD, 0xB3, 0xD5, 0xF5, 0xCD, 0xF4, 0xCD, 0xD4, 0xC5, 0x93, 0xBD, 0x92, 0xAC, 0xF0, 0xC5, 0xB4, 0xAD, 0x12, 0x5A, 0xCA, 0x29, 0x45, 0x18, 0xE4, 0x19, 0x05, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x19, 0x05, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x04, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x10, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x10, 0xA3, 0x10, 0xC4, 0x10, 0xC4, 0x18, 0xE4, 0x19, 0x05, 0x21, 0x05, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x19, 0x05, 0x21, 0x26, 0x21, 0x26, 0x21, 0x46, 0x29, 0x67, 0x31, 0x87, 0x39, 0xC8, 0x39, 0xE9, 0x39, 0xE9, 0x31, 0xA8, 0x31, 0x88, 0x31, 0x87, 0x6B, 0x4C, 0xC5, 0xD5, 0xC5, 0xB4, 0xBD, 0x94, 0xA4, 0xF1, 0xA4, 0xB0, 0xB5, 0x32, 0xBD, 0x72, 0xBD, 0x93, 0xD6, 0x36, 0xD6, 0x56, 0xAD, 0x32, 0x9C, 0x8F, 0xA4, 0xB0, 0xBD, 0x93, 0xCD, 0xF4, 0xBD, 0x93, 0x94, 0x6F, 0x8C, 0x0E, 0x8B, 0xED, 0xBD, 0x93, 0xBD, 0x92, 0xB5, 0x11, 0xB5, 0x31, 0xAD, 0x11, 0xBD, 0xF5, 0xBD, 0xD5, 0x73, 0x8C, 0x6B, 0x4B, 0x52, 0xC8, 0x7C, 0x4E, 0x5B, 0x29, 0x7B, 0xEC, 0x9C, 0xD1, 0xAD, 0x73, 0xA5, 0x52, 0x84, 0x2D, 0x84, 0x2C, 0x7B, 0xEB, 0x84, 0x0D, 0x94, 0xB0, 0x8C, 0x6F, 0x94, 0x90, 0x9C, 0xB0, 0xAD, 0x32, 0xB5, 0x93, 0xB5, 0x94, 0xA4, 0xF2, 0x9C, 0x8F, 0xAC, 0xCF, 0x9C, 0x8F, 0x94, 0x6F, 0xA4, 0xF0, 0xAD, 0x11, 0x94, 0x6F, 0x83, 0xED, 0xBD, 0x93, 0xC5, 0xD4, 0xBD, 0xB4, 0xBD, 0x93, 0x9C, 0xB0, 0xB5, 0x52, 0xBD, 0x93, 0xBD, 0x93, 0xCD, 0xF4, 0xCE, 0x15, 0xDE, 0x76, 0xCE, 0x15, 0xCE, 0x15, 0xD6, 0x56, 0xCE, 0x36, 0xCE, 0x36, 0xAC, 0xCF, 0xB4, 0xEF, 0xC5, 0x71, 0xB5, 0x31, 0xB5, 0x52, 0xD6, 0x56, 0xDE, 0x97, 0xC5, 0xF5, 0x8C, 0x0F, 0xAC, 0xF3, 0x83, 0xAF, 0x73, 0x4D, 0x83, 0xEF, 0x6B, 0x2D, 0x5A, 0xEC, 0x3A, 0x08, 0x31, 0xA7, 0x31, 0xC7, 0x42, 0x29, 0x29, 0x86, 0x18, 0xE4, 0x52, 0x8B, 0x5A, 0xCC, 0x4A, 0x6A, 0x21, 0x25, 0x18, 0xE4, 0x08, 0x82, 0x08, 0x82, 0x10, 0xA2, 0x18, 0xC3, 0x21, 0x25, 0xBD, 0xF6, 0xCE, 0x36, 0xCE, 0x15, 0xD6, 0x57, 0xD6, 0x77, 0xD6, 0x56, 0xD6, 0x76, 0xCE, 0x35, 0xBD, 0xD4, 0xBD, 0xB4, 0xBD, 0x94, 0xAD, 0x52, 0xB5, 0x94, 0xBD, 0xB4, 0xC5, 0xF5, 0xAD, 0x52, 0x9C, 0xB0, 0x9C, 0x8E, 0xAC, 0xCF, 0x8C, 0x0C, 0xC5, 0x92, 0xAC, 0xAE, 0x9C, 0x6F, 0x9C, 0xB0, 0x7B, 0xAC, 0x8C, 0x2E, 0x94, 0x70, 0x8C, 0x4F, 0x9C, 0xD2, 0xBD, 0xD6, 0x9C, 0xD3, 0x94, 0x92, 0x9C, 0x92, 0xAD, 0x14, 0x94, 0x30, 0x8C, 0x2F, 0x4A, 0x28, 0x5A, 0x8A, 0x62, 0xEB, 0x5A, 0xAA, 0x5A, 0xAA, 0x6B, 0x2C, 0x7B, 0xCF, 0x8C, 0x10, 0x83, 0xAF, 0x52, 0x69, 0x4A, 0x28, 0x5A, 0x8A, 0x63, 0x0B, 0x73, 0x8D, 0x7B, 0xAE, 0x8C, 0x30, 0x52, 0x69, 0x52, 0x69, 0x41, 0xE7, 0x29, 0x03, 0x31, 0x85, 0x4A, 0x28, 0x39, 0xA6, 0x5A, 0xAA, 0x7B, 0x8E, 0x52, 0x69, 0x52, 0x89, 0x62, 0xC9, 0x73, 0x4B, 0x8C, 0x0D, 0xAD, 0x11, 0xB5, 0x32, 0xBD, 0x52, 0xBD, 0x72, 0xCD, 0xD4, 0xC5, 0xD3, 0xC5, 0x92, 0xDE, 0x55, 0xD6, 0x35, 0xD6, 0x35, 0xD6, 0x35, 0x9C, 0x8F, 0xB5, 0x53, 0xB5, 0x53, 0xB5, 0x33, 0xB5, 0x33, 0xAD, 0x12, 0xB5, 0x52, 0xBD, 0x73, 0xC5, 0x93, 0xBD, 0x53, 0xB5, 0x32, 0xB5, 0x53, 0xB5, 0x53, 0xBD, 0x53, 0xBD, 0x73, 0xBD, 0x73, 0xBD, 0x73, 0xBD, 0x93, 0xBD, 0x53, 0xB5, 0x32, 0xBD, 0x73, 0xBD, 0x94, 0xC5, 0xB4, 0xCD, 0xD5, 0xBD, 0x73, 0xB5, 0x31, 0xAC, 0xF1, 0xAC, 0xF0, 0xB5, 0x31, 0xB5, 0x52, 0xA4, 0x90, 0x7B, 0x6C, 0x31, 0x65, 0x42, 0x07, 0x31, 0x85, 0x29, 0x44, 0x29, 0x45, 0x4A, 0x49, 0x4A, 0x8A, 0x3A, 0x08, 0x52, 0xAA, 0x94, 0x72, 0x9C, 0x92, 0x94, 0x92, 0x8C, 0x51, 0x52, 0x49, 0x52, 0x49, 0x5A, 0x8A, 0x52, 0x28, 0x52, 0x28, 0x8B, 0xEF, 0x62, 0xCB, 0x83, 0xCE, 0x7B, 0x8E, 0x62, 0xAB, 0x7B, 0x6D, 0x94, 0x30, 0x8C, 0x30, 0x83, 0xAE, 0x39, 0x87, 0x18, 0xC4, 0x18, 0xE4, 0x19, 0x04, 0x18, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC3, 0x21, 0x24, 0x94, 0x70, 0xD6, 0x56, 0xCD, 0xF4, 0xAC, 0xD0, 0xC5, 0x93, 0xD6, 0x14, 0xD6, 0x14, 0xE6, 0x76, 0xDE, 0x76, 0xDE, 0x75, 0xDE, 0x35, 0xCD, 0xD3, 0xCD, 0xB4, 0xC5, 0x93, 0xBD, 0x72, 0xC5, 0x93, 0xC5, 0xD3, 0xA4, 0xAF, 0xD6, 0x35, 0xCD, 0xF5, 0xAD, 0x12, 0x7B, 0xAD, 0x31, 0x86, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x10, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x19, 0x04, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x10, 0xC4, 0x10, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x10, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x08, 0x83, 0x10, 0x83, 0x10, 0x83, 0x10, 0x83, 0x10, 0x83, 0x10, 0x83, 0x08, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA4, 0x18, 0xE4, 0x19, 0x05, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x05, 0x19, 0x05, 0x21, 0x05, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x29, 0x67, 0x39, 0xC8, 0x31, 0xC8, 0x39, 0xE9, 0x31, 0xA8, 0x4A, 0x6B, 0x4A, 0x4A, 0x4A, 0x29, 0x7B, 0xAD, 0xB5, 0x32, 0xBD, 0x73, 0xAD, 0x32, 0xA4, 0xF1, 0xAD, 0x11, 0xB5, 0x12, 0xD6, 0x35, 0xDE, 0x76, 0xE6, 0x96, 0xDE, 0x96, 0xBD, 0x72, 0xBD, 0x72, 0xE6, 0xB7, 0xDE, 0x76, 0xD6, 0x56, 0xBD, 0x93, 0xB5, 0x52, 0xBD, 0x52, 0xD6, 0x35, 0xD6, 0x34, 0xDE, 0x54, 0xDE, 0x55, 0xDE, 0x76, 0x7B, 0xAD, 0xAD, 0x32, 0x9C, 0xB1, 0x8C, 0x2E, 0x7B, 0xCC, 0x7C, 0x0D, 0x7B, 0xEC, 0x73, 0xAB, 0x6B, 0x6B, 0x7B, 0xCD, 0x8C, 0x4E, 0x8C, 0x2D, 0x9C, 0xAF, 0xA4, 0xEF, 0xA4, 0xEF, 0x9C, 0xAF, 0xA4, 0xAF, 0xA4, 0xCF, 0xA4, 0xCF, 0xAC, 0xF0, 0xA4, 0xCF, 0xA4, 0xAF, 0xAC, 0xF0, 0xB5, 0x31, 0xBD, 0x31, 0xB5, 0x10, 0xB5, 0x10, 0xAC, 0xCF, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0xAF, 0xAC, 0xF0, 0xAC, 0xF0, 0xAD, 0x10, 0xB5, 0x31, 0xAC, 0xF0, 0xAC, 0xCF, 0xA4, 0xCF, 0x9C, 0x8E, 0xAC, 0xF0, 0xAD, 0x11, 0xA4, 0xAF, 0x9C, 0xAF, 0x9C, 0xAF, 0xBD, 0x93, 0xBD, 0x72, 0xCE, 0x15, 0xB5, 0x10, 0xB5, 0x10, 0xB4, 0xEF, 0x73, 0x29, 0x7B, 0x6B, 0xC5, 0xD4, 0xCE, 0x16, 0x94, 0x4F, 0x8B, 0xEF, 0x8B, 0xEF, 0x73, 0x6D, 0x8C, 0x10, 0xAD, 0x14, 0x94, 0x72, 0x73, 0x8E, 0x39, 0xE7, 0x31, 0xA6, 0x4A, 0x49, 0x5A, 0xEC, 0x63, 0x0C, 0x52, 0x8A, 0x39, 0xE8, 0x52, 0x8A, 0x5A, 0xCB, 0x5A, 0xCB, 0x29, 0x66, 0x08, 0x62, 0x08, 0x82, 0x10, 0xA3, 0x10, 0xA3, 0x39, 0xE7, 0xC6, 0x37, 0xBD, 0xB4, 0xB5, 0x73, 0xCE, 0x56, 0xD6, 0x56, 0xD6, 0x56, 0xD6, 0x56, 0xCE, 0x36, 0xAD, 0x32, 0xBD, 0xB5, 0xBD, 0x94, 0xAD, 0x52, 0xA5, 0x11, 0xBD, 0xB4, 0xCE, 0x36, 0xB5, 0xB4, 0xAD, 0x52, 0x9C, 0x8E, 0xBD, 0x71, 0x7B, 0x8A, 0xCD, 0xF3, 0x9C, 0x6E, 0x84, 0x0D, 0x8C, 0x4F, 0x83, 0xEE, 0x9C, 0xD1, 0x9C, 0xB0, 0xA5, 0x12, 0xB5, 0x95, 0xAD, 0x34, 0xA5, 0x14, 0xBD, 0x96, 0xB5, 0x76, 0x9C, 0x92, 0xA4, 0xF3, 0x73, 0x6D, 0x31, 0x65, 0x4A, 0x28, 0x5A, 0x8A, 0x62, 0xCB, 0x5A, 0x8A, 0x42, 0x08, 0x5A, 0xCB, 0x73, 0x6E, 0x5A, 0x8A, 0x4A, 0x49, 0x5A, 0xAA, 0x73, 0x6D, 0x94, 0x71, 0x73, 0x6D, 0x73, 0x6D, 0x7B, 0xAE, 0x42, 0x07, 0x5A, 0xAA, 0x41, 0xE7, 0x21, 0x03, 0x29, 0x44, 0x41, 0xE7, 0x21, 0x24, 0x73, 0x6D, 0x73, 0x4D, 0x4A, 0x49, 0x63, 0x0C, 0x5A, 0xCB, 0x63, 0x0B, 0x7B, 0xAD, 0x83, 0xEE, 0x7B, 0xCD, 0x73, 0x6B, 0x63, 0x0A, 0x6B, 0x4B, 0x7B, 0xCD, 0x8C, 0x2E, 0xBD, 0xD4, 0xC5, 0xF5, 0xAD, 0x12, 0xCE, 0x36, 0xB5, 0x73, 0xD6, 0x36, 0xB5, 0x53, 0x9C, 0x6F, 0xAD, 0x12, 0xD6, 0x36, 0xE6, 0xB6, 0xE6, 0xB7, 0xDE, 0x76, 0xDE, 0x56, 0xD6, 0x55, 0xD6, 0x56, 0xDE, 0x76, 0xD6, 0x35, 0xCD, 0xF4, 0xBD, 0x73, 0xB5, 0x32, 0xB5, 0x32, 0xB5, 0x32, 0xAC, 0xF0, 0x9C, 0x6F, 0x8C, 0x0D, 0xAD, 0x11, 0xB5, 0x11, 0xAD, 0x11, 0xBD, 0x73, 0xBD, 0x73, 0xAD, 0x11, 0xB5, 0x32, 0xB5, 0x32, 0x52, 0x48, 0x39, 0x86, 0x52, 0x68, 0xAD, 0x32, 0x73, 0x6C, 0x31, 0x85, 0x29, 0x44, 0x29, 0x45, 0x31, 0xA6, 0x31, 0x85, 0x31, 0xA6, 0x42, 0x07, 0x4A, 0x29, 0x7B, 0xAF, 0xB5, 0x96, 0x9C, 0xB2, 0x7B, 0xAE, 0x6B, 0x0C, 0x62, 0xAB, 0x49, 0xE7, 0x7B, 0x6E, 0x7B, 0xAE, 0x8C, 0x30, 0x6B, 0x0C, 0x7B, 0xAE, 0x9C, 0x71, 0x9C, 0x70, 0x8B, 0xEF, 0x94, 0x10, 0x73, 0x4D, 0x31, 0x66, 0x18, 0xA3, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x4A, 0x49, 0x8C, 0x0F, 0xBD, 0x93, 0xB5, 0x11, 0xB5, 0x11, 0xCD, 0xF4, 0xE6, 0x96, 0xE6, 0x76, 0xDE, 0x76, 0xE6, 0x96, 0xE6, 0x96, 0xB5, 0x11, 0xA4, 0x6F, 0x8B, 0xED, 0x8B, 0xCD, 0x94, 0x2E, 0x9C, 0x90, 0x94, 0x2E, 0x73, 0x6B, 0xBD, 0xB4, 0xE6, 0xB8, 0xDE, 0x76, 0xBD, 0x93, 0x73, 0x4C, 0x31, 0xA7, 0x18, 0xC4, 0x18, 0xE4, 0x10, 0xE4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0xA3, 0x18, 0xE4, 0x18, 0xC4, 0x10, 0xC4, 0x10, 0xA4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x08, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC3, 0x18, 0xE4, 0x21, 0x25, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x21, 0x05, 0x21, 0x46, 0x21, 0x26, 0x19, 0x05, 0x29, 0x46, 0x31, 0xA8, 0x31, 0xA8, 0x31, 0xA8, 0x39, 0xE9, 0x3A, 0x09, 0x39, 0xE9, 0x39, 0xA8, 0x41, 0xE8, 0x73, 0x6C, 0x9C, 0x90, 0xAD, 0x32, 0x9C, 0x90, 0xA4, 0xD1, 0xAC, 0xF1, 0xC5, 0xD4, 0xCD, 0xD4, 0xD6, 0x14, 0xD6, 0x35, 0xCD, 0xD4, 0xCD, 0xD4, 0xD6, 0x35, 0xCE, 0x14, 0xCD, 0xF4, 0xCD, 0xF5, 0xD6, 0x36, 0xC5, 0x93, 0xE6, 0xB7, 0xE6, 0x95, 0xE6, 0x95, 0xE6, 0x95, 0xE6, 0xB6, 0x73, 0x8D, 0x8C, 0x0F, 0x84, 0x0E, 0x94, 0x4E, 0x94, 0x6E, 0x83, 0xED, 0x8C, 0x6E, 0x94, 0x8F, 0x8C, 0x4F, 0x84, 0x0D, 0x8C, 0x2E, 0x9C, 0xD0, 0xA4, 0xF0, 0xA4, 0xCF, 0xA4, 0xEF, 0xA4, 0xCF, 0xAC, 0xCF, 0xAC, 0xCF, 0xAC, 0xCF, 0x94, 0x4D, 0xA4, 0x8E, 0x94, 0x0C, 0x8B, 0xCB, 0x94, 0x2C, 0xA4, 0x6E, 0xA4, 0x8E, 0xAC, 0xAE, 0xA4, 0x8E, 0xB4, 0xF0, 0xBD, 0x71, 0xB5, 0x30, 0xAC, 0xEF, 0xB4, 0xEF, 0xB4, 0xEF, 0xB5, 0x10, 0xB5, 0x10, 0xB5, 0x10, 0xB5, 0x10, 0xBD, 0x30, 0xBD, 0x51, 0xB5, 0x30, 0xAC, 0xF0, 0xB5, 0x10, 0xB5, 0x10, 0xB4, 0xF0, 0xA4, 0xAF, 0xA4, 0x8E, 0xAC, 0xEF, 0xB5, 0x10, 0xBD, 0x10, 0xB5, 0x10, 0xB4, 0xF0, 0xA4, 0x8E, 0x5A, 0xA8, 0x39, 0xC6, 0x42, 0x07, 0x4A, 0x28, 0x62, 0xCB, 0x94, 0x72, 0xB5, 0x96, 0xBD, 0xF8, 0x6B, 0x4D, 0x4A, 0x69, 0x73, 0x8E, 0x73, 0x8E, 0x7B, 0xCF, 0x8C, 0x51, 0x8C, 0x71, 0x84, 0x31, 0x84, 0x10, 0x6B, 0x2D, 0x31, 0xA7, 0x08, 0x62, 0x08, 0x62, 0x08, 0x62, 0x10, 0xC3, 0x39, 0xE8, 0x6B, 0x6D, 0xD6, 0x57, 0xAD, 0x32, 0x8C, 0x0E, 0xB5, 0x73, 0xD6, 0x76, 0xCE, 0x56, 0xCE, 0x56, 0xCE, 0x36, 0xBD, 0xD4, 0xC5, 0xF5, 0xC5, 0xD5, 0xBD, 0xB4, 0xBD, 0x94, 0xBD, 0xB4, 0xC6, 0x15, 0xC5, 0xD5, 0xB5, 0x52, 0x9C, 0x6E, 0xCD, 0xD3, 0x8C, 0x0C, 0xD6, 0x35, 0xAC, 0xF0, 0x94, 0x8F, 0xA5, 0x12, 0x94, 0xB0, 0xB5, 0xB4, 0xAD, 0x52, 0xBD, 0xB4, 0xBD, 0x95, 0x8C, 0x30, 0x8C, 0x30, 0x9C, 0xB2, 0xA4, 0xF3, 0x73, 0x6D, 0x5A, 0xCB, 0x29, 0x24, 0x41, 0xE7, 0x42, 0x07, 0x4A, 0x48, 0x5A, 0xAA, 0x6B, 0x2C, 0x6B, 0x0C, 0x6B, 0x2C, 0x6B, 0x2C, 0x52, 0x69, 0x4A, 0x08, 0x5A, 0xAA, 0x52, 0x69, 0x63, 0x0B, 0x52, 0x89, 0x5A, 0xAA, 0x5A, 0xCA, 0x52, 0x89, 0x5A, 0xAA, 0x4A, 0x28, 0x39, 0xA6, 0x39, 0xC6, 0x21, 0x24, 0x21, 0x04, 0x6B, 0x4D, 0x63, 0x0B, 0x6B, 0x4C, 0x83, 0xEF, 0x84, 0x0F, 0x94, 0x70, 0x9C, 0xD1, 0xA5, 0x13, 0xAD, 0x53, 0xA5, 0x32, 0x94, 0x90, 0x94, 0x70, 0x94, 0x90, 0x8C, 0x4F, 0x94, 0x70, 0xA4, 0xF2, 0x94, 0x90, 0xA4, 0xF2, 0xB5, 0x53, 0xC5, 0xF5, 0xCE, 0x16, 0xA4, 0xD1, 0xB5, 0x32, 0xDE, 0x76, 0xDE, 0x96, 0xE6, 0x96, 0xE6, 0x96, 0xD6, 0x35, 0xDE, 0x75, 0xE6, 0xB7, 0xC5, 0xB3, 0xBD, 0x72, 0xD6, 0x35, 0xDE, 0x55, 0xD6, 0x35, 0xD6, 0x35, 0xCD, 0xF5, 0xC5, 0xD4, 0xBD, 0x93, 0xAC, 0xF1, 0xB5, 0x52, 0xAC, 0xF0, 0xA4, 0x6F, 0xCD, 0xF4, 0xDE, 0x55, 0xCD, 0xF4, 0xAC, 0xD0, 0xC5, 0xD5, 0xA4, 0xD1, 0x9C, 0xB1, 0x8C, 0x4F, 0xA5, 0x11, 0xA4, 0xD1, 0x8C, 0x2E, 0x52, 0xA9, 0x31, 0xA6, 0x31, 0x85, 0x29, 0x44, 0x29, 0x44, 0x29, 0x65, 0x39, 0xC7, 0x52, 0x8A, 0x63, 0x2C, 0x9D, 0x14, 0xCE, 0x59, 0xB5, 0x96, 0x7B, 0x8E, 0x52, 0x49, 0x83, 0xCE, 0x62, 0xCA, 0x52, 0x29, 0x41, 0xE7, 0x73, 0x6D, 0xA4, 0x91, 0x94, 0x0F, 0x83, 0x8D, 0x8C, 0x0F, 0x83, 0xCE, 0x6B, 0x0C, 0x39, 0x86, 0x21, 0x25, 0x18, 0xE4, 0x18, 0xE4, 0x21, 0x04, 0x5A, 0xAA, 0x9C, 0x91, 0x9C, 0x90, 0xA4, 0xB0, 0xAC, 0xF1, 0xB5, 0x11, 0xAC, 0xF0, 0xAC, 0xD0, 0xA4, 0xAF, 0x9C, 0x4E, 0x9C, 0x4E, 0xA4, 0x8F, 0x94, 0x0D, 0x83, 0xAD, 0x83, 0x8C, 0x7B, 0x4C, 0x6A, 0xEA, 0x5A, 0xA9, 0x5A, 0x89, 0x73, 0x2C, 0xB5, 0x32, 0xA4, 0xD0, 0x94, 0x2E, 0x83, 0xED, 0x83, 0xCD, 0x73, 0x4C, 0x39, 0xC7, 0x18, 0xE4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC3, 0x10, 0xC3, 0x10, 0xC3, 0x10, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x10, 0x83, 0x10, 0x83, 0x08, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xC4, 0x21, 0x05, 0x29, 0x46, 0x29, 0x66, 0x21, 0x26, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x18, 0xE5, 0x21, 0x26, 0x29, 0x46, 0x21, 0x26, 0x21, 0x26, 0x29, 0x67, 0x29, 0x87, 0x29, 0x87, 0x29, 0x67, 0x29, 0x67, 0x29, 0x67, 0x29, 0x67, 0x31, 0xA7, 0x42, 0x09, 0x5A, 0xCB, 0x73, 0x6D, 0xA4, 0xD1, 0x94, 0x6F, 0xA4, 0xB0, 0x9C, 0xB0, 0xB5, 0x73, 0xBD, 0x93, 0xC5, 0xB3, 0xC5, 0xB3, 0xCD, 0xD3, 0xD6, 0x14, 0xD6, 0x55, 0xD6, 0x14, 0xCD, 0xB4, 0xBD, 0x93, 0xC5, 0xD4, 0xD6, 0x15, 0xE6, 0xB7, 0xE6, 0x96, 0xE6, 0x75, 0xDE, 0x75, 0xDE, 0x75, 0x83, 0xEE, 0x83, 0xCE, 0x73, 0x6D, 0xC6, 0x17, 0xC6, 0x16, 0x84, 0x0D, 0x6B, 0x6A, 0x94, 0x8F, 0x9C, 0xD1, 0xA4, 0xF2, 0x8C, 0x4E, 0x94, 0x6F, 0x8C, 0x4E, 0x94, 0x6F, 0xA4, 0xF0, 0x94, 0x4D, 0x9C, 0x4D, 0xA4, 0xAE, 0xAC, 0xEF, 0x9C, 0x8F, 0x9C, 0x8F, 0x9C, 0x8F, 0x94, 0x4E, 0x94, 0x4E, 0x9C, 0x4E, 0x9C, 0x4E, 0x94, 0x4E, 0x94, 0x0D, 0x8B, 0xEC, 0x94, 0x0D, 0x83, 0xAB, 0x8B, 0xEC, 0x83, 0xCB, 0x83, 0xCB, 0x83, 0xAB, 0x7B, 0x4A, 0x73, 0x4A, 0x83, 0x8B, 0xA4, 0x6E, 0xA4, 0xAE, 0xB4, 0xEF, 0xAC, 0xAE, 0xA4, 0x8E, 0xC5, 0xB3, 0xB5, 0x31, 0x9C, 0x6E, 0xB5, 0x10, 0xB5, 0x10, 0xAC, 0xCF, 0xAC, 0xAE, 0xA4, 0x6E, 0x9C, 0x2C, 0xA4, 0xAE, 0x83, 0xCC, 0x39, 0xA5, 0x52, 0x89, 0x39, 0xC6, 0x6B, 0x4D, 0x8C, 0x71, 0x9C, 0xF4, 0xB5, 0x76, 0x5A, 0xCB, 0x73, 0x8E, 0x84, 0x30, 0x84, 0x10, 0x8C, 0x51, 0x94, 0xB2, 0x94, 0xB2, 0x94, 0xB3, 0xB5, 0x76, 0xA5, 0x14, 0x6B, 0x6E, 0x52, 0x8A, 0x42, 0x08, 0x3A, 0x08, 0x4A, 0x8A, 0x41, 0xE8, 0x8C, 0x70, 0xB5, 0x73, 0xB5, 0x52, 0xA4, 0xD1, 0xA4, 0xF1, 0xAD, 0x32, 0xA5, 0x11, 0xAD, 0x32, 0xB5, 0x52, 0xB5, 0x52, 0xBD, 0xB4, 0xBD, 0xD4, 0xBD, 0xB4, 0xBD, 0xD4, 0xBD, 0xB4, 0xBD, 0xD4, 0xBD, 0xD5, 0xB5, 0x52, 0xA4, 0xAF, 0xCD, 0xF3, 0xB5, 0x10, 0xCD, 0xF3, 0xB5, 0x11, 0xB5, 0x32, 0xB5, 0x93, 0xB5, 0x94, 0xBD, 0xB4, 0x9C, 0xB0, 0x9C, 0xD1, 0xA4, 0xF2, 0x6B, 0x4C, 0x73, 0x8E, 0x8C, 0x30, 0x8C, 0x10, 0x6B, 0x0C, 0x52, 0x49, 0x52, 0x69, 0x31, 0x65, 0x41, 0xE7, 0x4A, 0x28, 0x52, 0x69, 0x5A, 0xAA, 0x6B, 0x0C, 0x6B, 0x0C, 0x6B, 0x0C, 0x52, 0x69, 0x41, 0xC7, 0x62, 0xCB, 0x39, 0xA6, 0x39, 0xC6, 0x4A, 0x28, 0x42, 0x28, 0x4A, 0x28, 0x4A, 0x48, 0x52, 0x89, 0x41, 0xE7, 0x29, 0x24, 0x39, 0xA6, 0x4A, 0x28, 0x5A, 0xAA, 0x7B, 0xCE, 0x84, 0x0F, 0x7B, 0xCE, 0x83, 0xEF, 0x7B, 0xEE, 0x84, 0x0F, 0x8C, 0x4F, 0x8C, 0x4F, 0x94, 0x90, 0x9C, 0xD1, 0xB5, 0x73, 0xA5, 0x12, 0x8C, 0x4F, 0x9C, 0xD1, 0x8C, 0x4F, 0xA5, 0x12, 0xBD, 0xD5, 0xBD, 0xB5, 0xB5, 0x53, 0xC5, 0xF5, 0xCE, 0x15, 0xAD, 0x11, 0xB5, 0x32, 0xDE, 0x96, 0xD6, 0x34, 0xD6, 0x34, 0xDE, 0x75, 0xDE, 0x75, 0xE6, 0x96, 0xDE, 0x55, 0xC5, 0x92, 0xD6, 0x14, 0xCD, 0xF4, 0xE6, 0x96, 0xE6, 0x96, 0xE6, 0xB6, 0xE6, 0x96, 0xE6, 0xB6, 0xE6, 0x96, 0xE6, 0x96, 0xCD, 0xD3, 0xBD, 0x51, 0xCD, 0xF4, 0xE6, 0xD7, 0xE6, 0x96, 0xB5, 0x31, 0xAD, 0x11, 0xAD, 0x32, 0xAD, 0x52, 0xBD, 0xB4, 0xB5, 0x52, 0x94, 0x8F, 0xBD, 0x94, 0xBD, 0xB4, 0xAD, 0x12, 0x8C, 0x4F, 0x42, 0x07, 0x31, 0x85, 0x29, 0x65, 0x29, 0x44, 0x29, 0x44, 0x31, 0x65, 0x39, 0xC6, 0x52, 0xCA, 0x7B, 0xCE, 0x9C, 0xD3, 0x6B, 0x4C, 0x5A, 0xAA, 0x73, 0x6D, 0x42, 0x28, 0x4A, 0x28, 0x62, 0xCA, 0x62, 0xAA, 0x73, 0x0B, 0x7B, 0x2C, 0x8B, 0xEF, 0x83, 0xAE, 0x6A, 0xAA, 0x7B, 0x6C, 0x73, 0x0C, 0x6B, 0x0C, 0x6B, 0x0B, 0x7B, 0x6D, 0x7B, 0xAE, 0x7B, 0x8D, 0x8C, 0x0E, 0xAD, 0x32, 0xBD, 0x73, 0xBD, 0x52, 0xBD, 0x72, 0xB5, 0x31, 0xAC, 0xD0, 0xA4, 0x8F, 0xA4, 0xB0, 0xAC, 0xF1, 0xB5, 0x11, 0xB5, 0x11, 0xAC, 0xF1, 0xA4, 0x90, 0xA4, 0xB0, 0xA4, 0xB0, 0x9C, 0x6F, 0x94, 0x4F, 0x94, 0x4F, 0x9C, 0x70, 0x9C, 0x6F, 0x94, 0x2E, 0x94, 0x4F, 0x94, 0x4F, 0x8C, 0x0E, 0x6B, 0x4C, 0x31, 0x86, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x18, 0xE4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x08, 0x83, 0x08, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xC4, 0x21, 0x05, 0x29, 0x66, 0x31, 0xA7, 0x29, 0x67, 0x21, 0x26, 0x18, 0xE5, 0x18, 0xE5, 0x18, 0xE5, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x46, 0x29, 0x46, 0x29, 0x67, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x29, 0x67, 0x31, 0xA8, 0x42, 0x4A, 0x5A, 0xEC, 0x5A, 0xCB, 0x73, 0xAD, 0x9C, 0x90, 0x9C, 0xB0, 0x94, 0x6F, 0xB5, 0x53, 0xB5, 0x72, 0xB5, 0x52, 0xB5, 0x52, 0xB5, 0x52, 0xBD, 0x92, 0xD6, 0x55, 0xCD, 0xF4, 0xBD, 0x52, 0xB5, 0x32, 0xB5, 0x73, 0xCE, 0x15, 0xE6, 0xD7, 0xD6, 0x14, 0xD6, 0x14, 0xD6, 0x14, 0xD6, 0x34, 0x6B, 0x6C, 0x7B, 0xCE, 0x7B, 0xEF, 0xDE, 0xFB, 0xDE, 0x99, 0xAD, 0x2F, 0x94, 0x6C, 0xAD, 0x31, 0xC5, 0xF5, 0xCE, 0x37, 0xAD, 0x12, 0xAD, 0x32, 0xA4, 0xF1, 0x9C, 0xB0, 0xA4, 0xD0, 0xB5, 0x30, 0xAC, 0xEF, 0xAC, 0xCE, 0xBD, 0x92, 0xE6, 0x97, 0xC5, 0xD4, 0xBD, 0x93, 0xBD, 0x93, 0xBD, 0x93, 0xBD, 0x93, 0xBD, 0x93, 0xB5, 0x52, 0xB5, 0x32, 0xB5, 0x52, 0xB5, 0x32, 0xAD, 0x11, 0xAD, 0x11, 0x9C, 0xB0, 0x9C, 0x8F, 0xAD, 0x11, 0xB5, 0x52, 0xAD, 0x11, 0xAD, 0x32, 0xC5, 0xB3, 0xBD, 0x93, 0xBD, 0x72, 0xAC, 0xCF, 0xB5, 0x51, 0xC5, 0xF4, 0xBD, 0xB3, 0xAD, 0x32, 0xA4, 0xD0, 0x8C, 0x0D, 0x9C, 0x8E, 0x94, 0x4D, 0x94, 0x4D, 0x8C, 0x2C, 0x9C, 0xAF, 0x8C, 0x2D, 0x52, 0x68, 0x6B, 0x4C, 0x52, 0x69, 0x52, 0x8A, 0x6B, 0x4D, 0x7C, 0x10, 0x9C, 0xD3, 0x5A, 0xEB, 0x94, 0x92, 0x73, 0x8E, 0x94, 0x92, 0x9C, 0xD3, 0x94, 0xB3, 0xA5, 0x14, 0xA5, 0x35, 0x9C, 0xD3, 0x39, 0xC7, 0xA5, 0x14, 0x9C, 0xB3, 0x4A, 0x49, 0x63, 0x2C, 0x5A, 0xCB, 0x8C, 0x2F, 0xB5, 0x72, 0xB5, 0x51, 0xBD, 0x71, 0xB5, 0x30, 0xB5, 0x10, 0xB5, 0x31, 0xB5, 0x30, 0xB5, 0x30, 0xAC, 0xEF, 0xAC, 0xCF, 0x9C, 0x8E, 0x9C, 0x6E, 0x9C, 0x8E, 0xAD, 0x11, 0xAD, 0x31, 0xB5, 0x52, 0xAC, 0xF0, 0x94, 0x4D, 0xB5, 0x10, 0xBD, 0x71, 0xBD, 0x51, 0xC5, 0x71, 0xC5, 0x92, 0xBD, 0x72, 0x94, 0x6F, 0xA5, 0x11, 0xAD, 0x11, 0x8C, 0x2D, 0x8C, 0x2E, 0x9C, 0xB1, 0x6B, 0x0B, 0x4A, 0x28, 0x5A, 0x8A, 0x52, 0x49, 0x52, 0x49, 0x4A, 0x48, 0x4A, 0x28, 0x29, 0x44, 0x41, 0xE7, 0x4A, 0x28, 0x42, 0x07, 0x4A, 0x08, 0x52, 0x8A, 0x5A, 0xAA, 0x52, 0x69, 0x4A, 0x08, 0x39, 0xC6, 0x39, 0xC6, 0x31, 0x86, 0x41, 0xE7, 0x41, 0xE7, 0x5A, 0xAA, 0x62, 0xEB, 0x5A, 0xCA, 0x63, 0x0B, 0x52, 0x8A, 0x4A, 0x48, 0x62, 0xEB, 0x84, 0x0F, 0x83, 0xEF, 0x9C, 0xB2, 0xBD, 0xD6, 0x9C, 0xB2, 0x8C, 0x50, 0x7B, 0xEE, 0x8C, 0x2F, 0x9C, 0xB1, 0x94, 0x4F, 0x9C, 0xB1, 0xA5, 0x12, 0x9C, 0xD1, 0x94, 0x70, 0x7B, 0xAD, 0x8C, 0x4F, 0x6B, 0x6C, 0x8C, 0x50, 0x8C, 0x4F, 0x94, 0x90, 0x9C, 0xB1, 0x94, 0x6F, 0xB5, 0x32, 0xAD, 0x11, 0xAD, 0x11, 0xC5, 0xD4, 0xE6, 0xB6, 0xE6, 0xB6, 0xE6, 0xB6, 0xDE, 0x95, 0xDE, 0x95, 0xD6, 0x14, 0xB5, 0x30, 0xB5, 0x31, 0xC5, 0x92, 0xDE, 0x76, 0xE6, 0x96, 0xE6, 0xB6, 0xE6, 0x95, 0xE6, 0xB6, 0xE6, 0xB6, 0xE6, 0x75, 0xCD, 0xB2, 0xE6, 0x75, 0xE6, 0x96, 0xE6, 0xB6, 0xDE, 0x55, 0xCD, 0xF4, 0xB5, 0x32, 0xAD, 0x11, 0xB5, 0x93, 0xC5, 0xD4, 0xBD, 0x93, 0xBD, 0xD5, 0x9C, 0xB1, 0xBD, 0xD5, 0xBD, 0xD5, 0xC5, 0xF5, 0xAD, 0x32, 0x63, 0x2B, 0x31, 0x85, 0x21, 0x24, 0x29, 0x44, 0x31, 0xA5, 0x29, 0x44, 0x21, 0x24, 0x29, 0x65, 0x31, 0xA6, 0x31, 0x85, 0x29, 0x44, 0x31, 0x85, 0x29, 0x65, 0x4A, 0x48, 0x5A, 0xAA, 0x73, 0x2B, 0x83, 0x8D, 0x73, 0x0C, 0x8B, 0xEF, 0x8B, 0xAE, 0x83, 0x8D, 0x93, 0xEF, 0x72, 0xEB, 0x73, 0x2C, 0x9C, 0x30, 0x83, 0x8E, 0x83, 0xCE, 0xA4, 0xD2, 0x6B, 0x0B, 0x73, 0x6C, 0x9C, 0x90, 0xB5, 0x52, 0xB5, 0x72, 0xAD, 0x11, 0x8B, 0xEC, 0x94, 0x2E, 0x9C, 0x6E, 0x9C, 0x8F, 0xA4, 0xD0, 0xAC, 0xD0, 0xBD, 0x73, 0xD6, 0x15, 0xB5, 0x11, 0xC5, 0xB3, 0xC5, 0xB3, 0xBD, 0x72, 0xAC, 0xF0, 0xAD, 0x11, 0xB5, 0x11, 0xAC, 0xF1, 0xC5, 0xB4, 0xB5, 0x32, 0xAD, 0x11, 0x7B, 0xAC, 0x29, 0x86, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0xC4, 0x18, 0xC4, 0x18, 0xE4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x08, 0x83, 0x08, 0x83, 0x10, 0x83, 0x08, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xC4, 0x21, 0x05, 0x29, 0x66, 0x39, 0xE8, 0x39, 0xC7, 0x29, 0x67, 0x21, 0x05, 0x18, 0xE5, 0x19, 0x05, 0x21, 0x26, 0x21, 0x26, 0x21, 0x46, 0x21, 0x26, 0x21, 0x46, 0x21, 0x46, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x29, 0x46, 0x29, 0x87, 0x31, 0xC8, 0x42, 0x2A, 0x42, 0x29, 0x39, 0xA8, 0x4A, 0x29, 0x94, 0x70, 0xA4, 0xD1, 0x9C, 0xB0, 0xAD, 0x32, 0xB5, 0x32, 0xB5, 0x52, 0xAD, 0x12, 0xAD, 0x12, 0xAC, 0xF1, 0xC5, 0x93, 0xBD, 0x93, 0xAD, 0x32, 0xAD, 0x32, 0xA4, 0xF1, 0xBD, 0x93, 0xCE, 0x15, 0xC5, 0x93, 0xC5, 0xB3, 0xC5, 0xB3, 0xC5, 0xD3, 0x63, 0x2B, 0x7B, 0xCE, 0x9C, 0xB2, 0xD6, 0x9A, 0xB5, 0x74, 0xB5, 0x31, 0xBD, 0xB2, 0xBD, 0xD3, 0xCE, 0x36, 0xB5, 0x74, 0xB5, 0x74, 0xC5, 0xF5, 0xAD, 0x52, 0xA5, 0x11, 0xA4, 0xF1, 0xAC, 0xF0, 0xC5, 0x71, 0xAC, 0xAE, 0xB5, 0x31, 0xDE, 0x76, 0xCE, 0x15, 0xCE, 0x15, 0xCE, 0x15, 0xCE, 0x15, 0xCD, 0xF5, 0xCD, 0xF5, 0xCD, 0xF5, 0xCE, 0x15, 0xCE, 0x15, 0xBD, 0xB3, 0xBD, 0x93, 0xBD, 0x93, 0xB5, 0x52, 0xB5, 0x52, 0xBD, 0xB4, 0xC5, 0xF4, 0xCE, 0x35, 0xC5, 0xF4, 0xC5, 0xD4, 0xDE, 0x97, 0xDE, 0x55, 0xAC, 0xAE, 0xAC, 0xF0, 0xBD, 0xD3, 0xC6, 0x14, 0xB5, 0x52, 0x9C, 0xAF, 0x8C, 0x2E, 0xA4, 0xD0, 0xAD, 0x31, 0xAD, 0x31, 0xAD, 0x31, 0xAD, 0x31, 0xA5, 0x11, 0x73, 0x6C, 0x5A, 0xAA, 0x52, 0x69, 0x4A, 0x69, 0x5A, 0xCB, 0x6B, 0x4D, 0x7B, 0xCF, 0x7B, 0xF0, 0x84, 0x10, 0x6B, 0x6E, 0xA5, 0x35, 0xA5, 0x35, 0x8C, 0x51, 0x9C, 0xD4, 0xA4, 0xF4, 0x5A, 0xAB, 0x73, 0xAF, 0xAD, 0x75, 0x83, 0xEF, 0x29, 0x45, 0x4A, 0x6A, 0x6B, 0x4C, 0x83, 0xCE, 0x94, 0x2E, 0x83, 0xCB, 0xB5, 0x51, 0xAD, 0x10, 0x83, 0xAB, 0x83, 0xAB, 0x8B, 0xEB, 0x8B, 0xEC, 0x94, 0x0C, 0xAC, 0xF0, 0xD6, 0x14, 0xBD, 0x51, 0xB5, 0x30, 0xAC, 0xAE, 0xA4, 0x8E, 0xA4, 0x8E, 0x9C, 0x6E, 0xB4, 0xF0, 0xCD, 0xD2, 0xCD, 0xB2, 0xC5, 0x91, 0xC5, 0x91, 0xC5, 0x71, 0xBD, 0x71, 0xBD, 0x30, 0xBD, 0x51, 0xBD, 0x51, 0xBD, 0x51, 0xBD, 0x51, 0xBD, 0x52, 0x6A, 0xEB, 0x29, 0x04, 0x31, 0x65, 0x31, 0x85, 0x31, 0x85, 0x39, 0xA6, 0x29, 0x44, 0x29, 0x24, 0x41, 0xE7, 0x4A, 0x28, 0x52, 0x69, 0x31, 0x65, 0x4A, 0x48, 0x5A, 0xAA, 0x41, 0xE7, 0x52, 0x69, 0x4A, 0x28, 0x41, 0xE7, 0x39, 0xC7, 0x31, 0x65, 0x31, 0x65, 0x4A, 0x48, 0x62, 0xCA, 0x39, 0xA6, 0x63, 0x0B, 0x6B, 0x4C, 0x73, 0x8D, 0x83, 0xCE, 0x7B, 0xCE, 0x8C, 0x10, 0xA5, 0x34, 0xC6, 0x38, 0xBD, 0xB6, 0xAD, 0x33, 0x84, 0x2F, 0x8C, 0x2F, 0x9C, 0xB1, 0xB5, 0x33, 0xB5, 0x53, 0xB5, 0x73, 0xB5, 0x52, 0xA4, 0xD1, 0x8C, 0x2F, 0x73, 0xAD, 0x6B, 0x4C, 0x84, 0x0F, 0x7B, 0xEE, 0x84, 0x2F, 0x94, 0x90, 0x94, 0x90, 0x9C, 0xB0, 0xAD, 0x12, 0xB5, 0x12, 0xD6, 0x15, 0xDE, 0x55, 0xDE, 0x54, 0xDE, 0x75, 0xCD, 0xD3, 0xCD, 0xB2, 0xC5, 0x92, 0xAC, 0xF0, 0xA4, 0xCF, 0xC5, 0xB3, 0xDE, 0x95, 0xE6, 0x96, 0xE6, 0x96, 0xDE, 0x95, 0xDE, 0x34, 0xD6, 0x14, 0xE6, 0x96, 0xC5, 0x71, 0xC5, 0x91, 0xDE, 0x34, 0xDE, 0x54, 0xD6, 0x34, 0xBD, 0x72, 0xB5, 0x53, 0xB5, 0x73, 0xC6, 0x15, 0xBD, 0xD4, 0xBD, 0xD4, 0xC5, 0xF5, 0xB5, 0x53, 0xBD, 0xD5, 0xAD, 0x53, 0xBD, 0xB4, 0xBD, 0xD4, 0xAD, 0x32, 0x94, 0x90, 0x6B, 0x2C, 0x31, 0x85, 0x29, 0x44, 0x21, 0x44, 0x21, 0x03, 0x21, 0x03, 0x21, 0x24, 0x29, 0x44, 0x21, 0x44, 0x29, 0x65, 0x31, 0x65, 0x52, 0x49, 0x62, 0xAA, 0x7B, 0x8D, 0x7B, 0x8D, 0x73, 0x2C, 0x73, 0x2C, 0x7B, 0x6D, 0x83, 0x8D, 0x94, 0x0F, 0x83, 0x8D, 0x83, 0x8D, 0x94, 0x0F, 0x83, 0xAE, 0x94, 0x50, 0xA4, 0xB2, 0x9C, 0x71, 0x94, 0x0F, 0x6B, 0x2B, 0x73, 0x4B, 0x9C, 0x90, 0xBD, 0x93, 0xB5, 0x52, 0xAD, 0x31, 0xAD, 0x31, 0xB5, 0x31, 0xB5, 0x31, 0xB5, 0x52, 0xCD, 0xD4, 0xD6, 0x56, 0xB5, 0x11, 0xAC, 0xF0, 0xA4, 0xD0, 0x8C, 0x0D, 0xAC, 0xF1, 0xC5, 0x93, 0xB5, 0x12, 0x83, 0xED, 0x9C, 0x70, 0x8C, 0x0E, 0x7B, 0xAC, 0x42, 0x07, 0x18, 0xE3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0xA3, 0x18, 0xE4, 0x19, 0x05, 0x29, 0x66, 0x42, 0x29, 0x52, 0x8A, 0x41, 0xE8, 0x29, 0x46, 0x21, 0x25, 0x19, 0x05, 0x21, 0x26, 0x21, 0x26, 0x21, 0x46, 0x21, 0x26, 0x21, 0x46, 0x21, 0x46, 0x21, 0x26, 0x21, 0x26, 0x21, 0x46, 0x29, 0x67, 0x29, 0x87, 0x31, 0xA8, 0x31, 0xA7, 0x29, 0x66, 0x29, 0x46, 0x39, 0xC8, 0x73, 0x4D, 0x94, 0x4F, 0x83, 0xEE, 0x7B, 0xAD, 0x83, 0xCD, 0x83, 0xED, 0x7B, 0xAD, 0x7B, 0xAD, 0x8B, 0xEE, 0x94, 0x4F, 0x94, 0x2F, 0x94, 0x4F, 0x94, 0x6F, 0x9C, 0x90, 0xB5, 0x32, 0xAD, 0x12, 0xAC, 0xF1, 0xAD, 0x11, 0xB5, 0x52, 0xB5, 0x73, 0x52, 0xAA, 0x6B, 0x4C, 0x8C, 0x50, 0xAD, 0x35, 0x73, 0x8E, 0x9C, 0x91, 0xC5, 0xF6, 0xBD, 0x94, 0xC5, 0xD5, 0xB5, 0x54, 0x62, 0xEB, 0x73, 0x8C, 0xA5, 0x32, 0xA4, 0xF1, 0x9C, 0xB0, 0xA4, 0xAF, 0xBD, 0x51, 0xAC, 0xAE, 0xA4, 0x8E, 0xD6, 0x36, 0xD6, 0x15, 0xD6, 0x35, 0xCE, 0x15, 0xCE, 0x15, 0xD6, 0x35, 0xD6, 0x35, 0xCE, 0x15, 0xCE, 0x15, 0xD6, 0x56, 0xD6, 0x56, 0xCE, 0x36, 0xD6, 0x77, 0xCE, 0x15, 0xC5, 0xF4, 0xC5, 0xD4, 0xC5, 0xF4, 0xCE, 0x15, 0xCE, 0x15, 0xC5, 0xB3, 0xD6, 0x35, 0xD6, 0x35, 0xAC, 0xAE, 0x94, 0x2D, 0xA4, 0xF0, 0xA4, 0xF0, 0xAD, 0x11, 0x9C, 0xB0, 0xA5, 0x11, 0xBD, 0xB3, 0xBD, 0xB3, 0xBD, 0xB3, 0xBD, 0xB3, 0xC5, 0xD4, 0xBD, 0xB3, 0xAD, 0x11, 0x52, 0x89, 0x52, 0x69, 0x4A, 0x28, 0x52, 0xCA, 0x5B, 0x0B, 0x4A, 0x49, 0x7B, 0xEF, 0x63, 0x0C, 0x73, 0xAF, 0xAD, 0x75, 0xA5, 0x14, 0x94, 0xB3, 0x8C, 0x72, 0x84, 0x10, 0x8C, 0x72, 0xA5, 0x35, 0x84, 0x10, 0x52, 0x8A, 0x31, 0xA7, 0x6B, 0x4D, 0xAD, 0x33, 0xAD, 0x33, 0x94, 0x6F, 0x7B, 0xAD, 0x62, 0xEA, 0x83, 0xCD, 0x8C, 0x2E, 0x6B, 0x4A, 0x83, 0xED, 0x8C, 0x0E, 0x84, 0x0D, 0x83, 0xCD, 0xB5, 0x31, 0xBD, 0x50, 0xAC, 0xEF, 0xCD, 0xD2, 0xD5, 0xF3, 0xD6, 0x13, 0xCD, 0xB2, 0xC5, 0x92, 0xCD, 0xB2, 0xCD, 0xB2, 0xD5, 0xB2, 0xCD, 0xB2, 0xC5, 0x70, 0xC5, 0x70, 0xC5, 0x71, 0xCD, 0xB2, 0xD5, 0xD2, 0xCD, 0xB2, 0xC5, 0x71, 0xCD, 0xF4, 0x83, 0xCD, 0x31, 0x65, 0x31, 0x44, 0x29, 0x44, 0x29, 0x24, 0x29, 0x24, 0x29, 0x23, 0x21, 0x03, 0x29, 0x44, 0x39, 0xA6, 0x42, 0x07, 0x29, 0x44, 0x31, 0x85, 0x4A, 0x48, 0x4A, 0x48, 0x52, 0x69, 0x41, 0xE7, 0x39, 0xE6, 0x31, 0x65, 0x29, 0x44, 0x39, 0xC6, 0x42, 0x27, 0x62, 0xEA, 0x5A, 0xAA, 0x63, 0x0B, 0x62, 0xEB, 0x6B, 0x2C, 0x6B, 0x4C, 0x73, 0x4C, 0x84, 0x30, 0xC6, 0x18, 0xCE, 0x79, 0xCE, 0x79, 0x9C, 0xB1, 0x8C, 0x0E, 0x94, 0x4F, 0x83, 0xED, 0x8C, 0x2E, 0x83, 0xED, 0x94, 0x2E, 0x9C, 0x8F, 0x8C, 0x2E, 0x94, 0x6F, 0x7B, 0x8D, 0x73, 0xAD, 0x7B, 0xCE, 0x8C, 0x4F, 0x7B, 0xCE, 0x7B, 0xCD, 0x8C, 0x0E, 0x94, 0x6F, 0xB5, 0x52, 0xBD, 0x72, 0xEE, 0xD7, 0xE6, 0x75, 0xDE, 0x55, 0xE6, 0xB6, 0xE6, 0x96, 0xD6, 0x14, 0xC5, 0x92, 0xB5, 0x10, 0xC5, 0xB3, 0xDE, 0x55, 0xE6, 0xB6, 0xEE, 0xB6, 0xEE, 0xD6, 0xE6, 0x95, 0xD6, 0x13, 0xD5, 0xF3, 0xBD, 0x50, 0xCD, 0xD2, 0xCD, 0xB2, 0xD6, 0x13, 0xD6, 0x13, 0xD5, 0xD3, 0xAC, 0xF0, 0xB5, 0x72, 0xBD, 0xB4, 0xC5, 0xD4, 0xCE, 0x36, 0xBD, 0xB4, 0xB5, 0x73, 0xB5, 0x73, 0xAD, 0x53, 0xAD, 0x32, 0xB5, 0x73, 0xC5, 0xD4, 0xC5, 0xF5, 0xAD, 0x12, 0xB5, 0x32, 0x9C, 0x70, 0x52, 0x68, 0x29, 0x44, 0x21, 0x03, 0x21, 0x24, 0x29, 0x65, 0x31, 0x85, 0x29, 0x64, 0x29, 0x65, 0x62, 0xEB, 0x62, 0xEA, 0x5A, 0x89, 0x73, 0x2C, 0x73, 0x2C, 0x62, 0xCA, 0x62, 0xCA, 0x5A, 0x8A, 0x6A, 0xCA, 0x83, 0x8D, 0x8B, 0xCE, 0x8B, 0xCE, 0x9C, 0x50, 0x8B, 0xEF, 0x7B, 0x6D, 0x83, 0xAE, 0xB4, 0xF3, 0xB5, 0x13, 0xAC, 0xF2, 0x62, 0xAA, 0x62, 0xCA, 0x7B, 0x6D, 0xAC, 0xF1, 0xB5, 0x32, 0xBD, 0x93, 0xB5, 0x52, 0xB5, 0x31, 0xCE, 0x15, 0xDE, 0x56, 0xD6, 0x56, 0xCD, 0xF5, 0xCE, 0x15, 0xCD, 0xF5, 0xBD, 0x93, 0xC5, 0xD4, 0xC5, 0xB4, 0xC5, 0x94, 0xBD, 0xB4, 0x9C, 0x90, 0x62, 0xA9, 0x31, 0x65, 0x18, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x08, 0x83, 0x08, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0xC3, 0x10, 0xC3, 0x10, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xE4, 0x21, 0x05, 0x31, 0x87, 0x73, 0x4D, 0x8C, 0x30, 0x62, 0xEB, 0x42, 0x08, 0x31, 0xA7, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x29, 0x67, 0x29, 0x46, 0x29, 0x67, 0x29, 0x67, 0x21, 0x26, 0x21, 0x26, 0x29, 0x67, 0x39, 0xC8, 0x52, 0x49, 0x83, 0xEF, 0xBD, 0xB4, 0xC5, 0xF5, 0xBD, 0x74, 0xB5, 0x33, 0xAD, 0x33, 0xB5, 0x53, 0xB5, 0x53, 0xAD, 0x33, 0xAD, 0x32, 0xAD, 0x12, 0xA4, 0xF2, 0xA4, 0xF2, 0xA4, 0xD1, 0xA4, 0xD1, 0x9C, 0xB1, 0x94, 0x70, 0x94, 0x4F, 0x94, 0x6F, 0x3A, 0x07, 0x42, 0x27, 0x52, 0xAA, 0x5A, 0xCA, 0x6B, 0x2D, 0x6B, 0x4D, 0xA5, 0x14, 0xAD, 0x13, 0xC5, 0xB6, 0xC5, 0xB7, 0xA4, 0xB2, 0x6B, 0x2B, 0xBD, 0xB5, 0xB5, 0x93, 0xAD, 0x31, 0x9C, 0x8E, 0xAC, 0xCF, 0xA4, 0x8E, 0x9C, 0x6E, 0xD6, 0x35, 0xD6, 0x35, 0xD6, 0x56, 0xD6, 0x56, 0xD6, 0x76, 0xD6, 0x56, 0xDE, 0x97, 0xDE, 0x76, 0xDE, 0x76, 0xDE, 0x77, 0xD6, 0x56, 0xD6, 0x36, 0xD6, 0x76, 0xCE, 0x15, 0xCE, 0x15, 0xCE, 0x15, 0xD6, 0x36, 0xD6, 0x56, 0xD6, 0x56, 0xCE, 0x15, 0xD6, 0x56, 0xCD, 0xF3, 0xA4, 0xAE, 0x73, 0x29, 0x94, 0x4E, 0x9C, 0xAF, 0xAD, 0x31, 0xBD, 0x93, 0xBD, 0x93, 0xC5, 0xB3, 0xBD, 0xB3, 0xC5, 0xD3, 0xB5, 0x72, 0xC5, 0xD4, 0xC5, 0xF4, 0xC5, 0xB4, 0x9C, 0xB0, 0x39, 0x85, 0x29, 0x44, 0x42, 0x28, 0x52, 0xAA, 0x52, 0xAA, 0x6B, 0x4D, 0x5A, 0xEC, 0x84, 0x10, 0x94, 0x92, 0x8C, 0x51, 0xB5, 0xB7, 0x8C, 0x52, 0x7B, 0xCF, 0x94, 0xB2, 0xA5, 0x14, 0x8C, 0x51, 0x63, 0x0D, 0x5A, 0xEB, 0x5A, 0xCA, 0x6B, 0x2C, 0x6B, 0x2B, 0x7B, 0x8D, 0xAC, 0xF2, 0x94, 0x90, 0x9C, 0xB0, 0xA4, 0xF1, 0xA5, 0x12, 0xBD, 0xB4, 0xB5, 0x94, 0xBD, 0xF5, 0xBD, 0xD5, 0xC5, 0xB4, 0xAC, 0xEF, 0xB4, 0xEF, 0xD5, 0xF3, 0xDD, 0xF3, 0xD5, 0xD2, 0xC5, 0x50, 0xC5, 0x91, 0xDE, 0x54, 0xDE, 0x33, 0xDE, 0x33, 0xCD, 0xB1, 0xBD, 0x50, 0xB5, 0x10, 0xAC, 0xEF, 0xBD, 0x30, 0xCD, 0xB2, 0xC5, 0x71, 0x9C, 0x6D, 0x94, 0x4E, 0x8B, 0xED, 0x6B, 0x2A, 0x6B, 0x0A, 0x62, 0xC9, 0x62, 0xC9, 0x62, 0xC9, 0x4A, 0x27, 0x42, 0x07, 0x41, 0xE7, 0x41, 0xE7, 0x39, 0xA5, 0x29, 0x44, 0x29, 0x24, 0x29, 0x23, 0x31, 0x65, 0x42, 0x28, 0x4A, 0x28, 0x39, 0xC6, 0x31, 0x65, 0x31, 0x85, 0x29, 0x44, 0x42, 0x07, 0x4A, 0x48, 0x39, 0xA6, 0x41, 0xE7, 0x5A, 0xAA, 0x6B, 0x4C, 0x52, 0x8A, 0x84, 0x10, 0x9C, 0xF4, 0x9C, 0xF4, 0xBD, 0xD7, 0xB5, 0x75, 0xC5, 0xD6, 0xBD, 0x32, 0xBD, 0x51, 0xA4, 0xAF, 0x9C, 0x8E, 0xA4, 0x8F, 0x9C, 0x8F, 0xAC, 0xD0, 0x9C, 0x8F, 0x9C, 0x6E, 0x9C, 0x6E, 0x9C, 0x6E, 0xAC, 0xF1, 0xAD, 0x12, 0x9C, 0xB1, 0x9C, 0xB0, 0x9C, 0xB0, 0xAD, 0x12, 0xB5, 0x32, 0xA4, 0xD0, 0xBD, 0x72, 0xC5, 0xB3, 0xD5, 0xF4, 0xD6, 0x34, 0xD6, 0x14, 0xDE, 0x55, 0xD6, 0x35, 0xD6, 0x14, 0xD6, 0x14, 0xEE, 0xD7, 0xF6, 0xF7, 0xF6, 0xF7, 0xEE, 0xD7, 0xEE, 0xD7, 0xEE, 0x96, 0xE6, 0x75, 0xCD, 0xB2, 0xDE, 0x34, 0xDE, 0x14, 0xE6, 0x54, 0xDE, 0x54, 0xCD, 0xB2, 0xA4, 0x8E, 0xBD, 0x93, 0xC5, 0xD4, 0xAD, 0x32, 0xBD, 0xD4, 0xB5, 0xB4, 0xC6, 0x15, 0xC6, 0x15, 0xBD, 0xD5, 0xBD, 0xB4, 0xB5, 0x93, 0xBD, 0xB4, 0xB5, 0x73, 0xAD, 0x11, 0xBD, 0x52, 0xDE, 0x35, 0xE6, 0x76, 0xBD, 0x93, 0x94, 0x2F, 0x41, 0xE7, 0x29, 0x44, 0x29, 0x44, 0x21, 0x24, 0x39, 0xC6, 0x7B, 0xEE, 0x8C, 0x0F, 0x8C, 0x10, 0x4A, 0x28, 0x52, 0x49, 0x41, 0xE7, 0x73, 0x4C, 0x83, 0xCF, 0x73, 0x4C, 0x72, 0xEA, 0x83, 0x8D, 0x93, 0xCE, 0x94, 0x0F, 0x94, 0x0F, 0x6A, 0xCB, 0x62, 0xAA, 0x8B, 0xEF, 0xB5, 0x33, 0xC5, 0x95, 0x7B, 0x6D, 0x6A, 0xCB, 0x5A, 0x89, 0x83, 0xAD, 0xA4, 0xB0, 0xC5, 0xD4, 0xBD, 0xB3, 0xBD, 0x72, 0xDE, 0x76, 0xDE, 0x77, 0x94, 0x2F, 0x41, 0xE7, 0x41, 0xE7, 0x4A, 0x07, 0x52, 0x69, 0x94, 0x70, 0xA4, 0xD1, 0x7B, 0x8C, 0x52, 0x89, 0x31, 0x45, 0x18, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC4, 0x10, 0xA3, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC4, 0x19, 0x04, 0x31, 0x66, 0x5A, 0xAA, 0x9C, 0xB1, 0xA4, 0xD1, 0x73, 0x4C, 0x5A, 0xAB, 0x31, 0x87, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x29, 0x67, 0x29, 0x87, 0x21, 0x46, 0x21, 0x46, 0x21, 0x05, 0x18, 0xE5, 0x21, 0x05, 0x29, 0x67, 0x31, 0x87, 0x39, 0xC7, 0x5A, 0xAA, 0x94, 0x4F, 0xCD, 0xF5, 0xDE, 0x56, 0xCD, 0xD4, 0x9C, 0x90, 0x94, 0x6F, 0x94, 0x4F, 0x8C, 0x2F, 0x94, 0x70, 0x94, 0x6F, 0x8C, 0x2E, 0x94, 0x4F, 0x9C, 0xD1, 0xAD, 0x33, 0xAD, 0x33, 0xA4, 0xF2, 0xA4, 0xF1, 0x9C, 0xD1, 0x3A, 0x07, 0x42, 0x06, 0x42, 0x27, 0x62, 0xEB, 0x84, 0x10, 0x52, 0xAA, 0x73, 0xAF, 0xC5, 0xD7, 0x9C, 0x71, 0x9C, 0x71, 0x9C, 0x71, 0x8C, 0x0D, 0xAD, 0x32, 0xB5, 0x93, 0x83, 0xED, 0x8B, 0xEC, 0xAC, 0xCF, 0xA4, 0x6D, 0x94, 0x2D, 0x9C, 0x8F, 0xA4, 0xB0, 0xA4, 0xB0, 0x9C, 0x6F, 0xA4, 0xF1, 0x94, 0x4E, 0x9C, 0x90, 0xA4, 0xF1, 0xAD, 0x12, 0x9C, 0x90, 0x9C, 0x90, 0xA4, 0xF1, 0xAD, 0x11, 0x7B, 0x8C, 0x83, 0xAC, 0x8C, 0x0E, 0xAD, 0x11, 0xBD, 0x93, 0xCD, 0xF5, 0xCE, 0x15, 0xBD, 0x72, 0xC5, 0xB2, 0xAC, 0xCF, 0x8B, 0xEC, 0xA5, 0x11, 0xAD, 0x11, 0xB5, 0x93, 0xBD, 0x93, 0xCE, 0x15, 0xCE, 0x35, 0xC5, 0xF4, 0xD6, 0x55, 0xC5, 0xF4, 0xBD, 0xB3, 0xB5, 0x73, 0xBD, 0x73, 0xBD, 0x93, 0x7B, 0x8C, 0x63, 0x0B, 0x6B, 0x2B, 0x4A, 0x28, 0x52, 0x89, 0x73, 0x8E, 0x5A, 0xEC, 0x73, 0xAE, 0x7B, 0xEF, 0x8C, 0x72, 0xAD, 0x55, 0x83, 0xF0, 0x73, 0x8E, 0xB5, 0x96, 0xAD, 0x76, 0x84, 0x10, 0x84, 0x10, 0x62, 0xEC, 0x39, 0xE7, 0x6B, 0x6D, 0xAD, 0x34, 0xB5, 0x75, 0xC5, 0xF6, 0xAD, 0x33, 0xA5, 0x33, 0xC6, 0x16, 0xCE, 0x36, 0xC6, 0x16, 0xC6, 0x15, 0xCE, 0x36, 0xC5, 0xF5, 0xCE, 0x15, 0xC5, 0x72, 0xB5, 0x0F, 0xEE, 0xB6, 0xD5, 0xD2, 0xE6, 0x54, 0xE6, 0x54, 0xEE, 0x75, 0xEE, 0xD6, 0xEE, 0xD6, 0xEE, 0xB5, 0xCD, 0x91, 0xD6, 0x14, 0xCD, 0xD3, 0xBD, 0x72, 0xC5, 0x71, 0xDE, 0x14, 0xC5, 0x91, 0xAC, 0xEF, 0xC5, 0xB3, 0xA4, 0xF0, 0x83, 0xED, 0x94, 0x2E, 0xA4, 0xF0, 0xA4, 0xF0, 0x9C, 0x90, 0x73, 0x6C, 0x73, 0x6C, 0x63, 0x0B, 0x62, 0xEB, 0x42, 0x07, 0x29, 0x44, 0x29, 0x24, 0x21, 0x03, 0x21, 0x03, 0x20, 0xE3, 0x29, 0x44, 0x39, 0xA6, 0x29, 0x64, 0x29, 0x24, 0x29, 0x64, 0x39, 0xA6, 0x42, 0x07, 0x39, 0xA6, 0x29, 0x24, 0x4A, 0x08, 0x63, 0x0C, 0x8C, 0x51, 0xA5, 0x35, 0x94, 0xB3, 0x9C, 0xB3, 0xA4, 0xF4, 0xB5, 0xB6, 0xD6, 0x78, 0xA4, 0xD0, 0xA4, 0x8F, 0x94, 0x2D, 0x9C, 0x6E, 0x9C, 0x6E, 0xA4, 0x8E, 0xAC, 0xF0, 0xAC, 0xCF, 0xB5, 0x10, 0xAC, 0xF0, 0xAC, 0xCF, 0xBD, 0x51, 0xBD, 0x72, 0xD6, 0x36, 0xD6, 0x36, 0xD6, 0x36, 0xC5, 0xB4, 0xBD, 0x73, 0xB5, 0x52, 0xB5, 0x32, 0xB5, 0x11, 0xAC, 0xF0, 0xAC, 0xD0, 0xB5, 0x11, 0xB5, 0x31, 0xB4, 0xF1, 0xBD, 0x31, 0xB5, 0x10, 0xAC, 0xD0, 0xAC, 0xD0, 0xAC, 0xD0, 0xB4, 0xF0, 0xB4, 0xF0, 0xBD, 0x31, 0xBD, 0x31, 0xBD, 0x31, 0xBD, 0x10, 0xBD, 0x51, 0xB5, 0x31, 0xA4, 0xAF, 0xA4, 0xAF, 0xB5, 0x31, 0xB5, 0x52, 0xB5, 0x52, 0xB5, 0x72, 0xC5, 0xF4, 0xC5, 0xF5, 0xC6, 0x15, 0xC5, 0xF5, 0xC6, 0x15, 0xCE, 0x56, 0xCE, 0x36, 0xBD, 0xB4, 0x7B, 0xAC, 0xAC, 0xF1, 0xAC, 0xF0, 0xCD, 0xD4, 0xDE, 0x55, 0xDE, 0x55, 0xE6, 0x97, 0xC5, 0xB4, 0x6B, 0x2A, 0x39, 0xA5, 0x21, 0x03, 0x39, 0xE7, 0x6B, 0x2C, 0x6B, 0x2C, 0x73, 0x8E, 0x39, 0xC7, 0x73, 0x8E, 0x73, 0x6D, 0x5A, 0xAA, 0x62, 0xCA, 0x62, 0xCA, 0x6A, 0xCA, 0x6A, 0xEB, 0x6A, 0xAA, 0x73, 0x0B, 0x8B, 0xEE, 0x5A, 0x69, 0x7B, 0xAE, 0x62, 0x8A, 0x73, 0x2C, 0x8B, 0xCF, 0x83, 0xAE, 0x83, 0xAE, 0x8C, 0x0F, 0x73, 0x2B, 0x6A, 0xEA, 0x83, 0x8D, 0x94, 0x2E, 0xB5, 0x52, 0xEE, 0xD8, 0xBD, 0x94, 0x42, 0x08, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0x82, 0x10, 0x83, 0x18, 0xE4, 0x29, 0x25, 0x20, 0xE4, 0x20, 0xE4, 0x18, 0xC3, 0x18, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x08, 0x83, 0x10, 0x83, 0x08, 0x83, 0x08, 0x83, 0x10, 0x83, 0x10, 0x83, 0x10, 0x83, 0x10, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC4, 0x10, 0xC4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC4, 0x19, 0x04, 0x29, 0x46, 0x39, 0xC7, 0x84, 0x0E, 0xBD, 0xD4, 0x8B, 0xEE, 0x6B, 0x2C, 0x39, 0xC7, 0x29, 0x46, 0x21, 0x26, 0x21, 0x05, 0x21, 0x05, 0x21, 0x05, 0x21, 0x26, 0x21, 0x26, 0x29, 0x87, 0x21, 0x26, 0x21, 0x26, 0x21, 0x26, 0x21, 0x05, 0x21, 0x05, 0x18, 0xE5, 0x19, 0x05, 0x31, 0x67, 0x39, 0xE8, 0x4A, 0x49, 0x5A, 0xAA, 0xAC, 0xF1, 0xF7, 0x19, 0xCD, 0xF4, 0xAD, 0x12, 0x8C, 0x0E, 0x9C, 0xB0, 0x94, 0x90, 0xA4, 0xF1, 0xA4, 0xD1, 0x94, 0x70, 0x94, 0x70, 0xAD, 0x12, 0xBD, 0xB4, 0xBD, 0x93, 0xA4, 0xF1, 0x83, 0xEE, 0x83, 0xEE, 0x73, 0x8D, 0x52, 0xA9, 0x39, 0xE6, 0x42, 0x07, 0x4A, 0x48, 0x4A, 0x48, 0x6B, 0x4D, 0x94, 0x71, 0x8C, 0x31, 0x39, 0xC7, 0x41, 0xE7, 0x9C, 0xB1, 0xD6, 0x77, 0xCE, 0x16, 0xBD, 0xB5, 0xA4, 0xB0, 0xA4, 0x8E, 0xA4, 0x6E, 0x8B, 0xCB, 0x83, 0xAC, 0x83, 0xAC, 0x94, 0x0D, 0x8C, 0x0D, 0x7B, 0x8B, 0x83, 0x8C, 0x83, 0xAC, 0x73, 0x4B, 0x73, 0x2A, 0x6A, 0xEA, 0x6B, 0x0A, 0x62, 0xC9, 0x62, 0xA9, 0x5A, 0xA9, 0x73, 0x2B, 0x7B, 0x4B, 0x7B, 0x8C, 0x7B, 0x8C, 0x83, 0xAC, 0x9C, 0x8F, 0xBD, 0x72, 0xCD, 0xF3, 0xAC, 0xEF, 0x9C, 0x6E, 0xBD, 0xB3, 0xC5, 0xF4, 0xAD, 0x31, 0x94, 0x4D, 0x94, 0x2D, 0x94, 0x4D, 0x9C, 0xAF, 0xC5, 0xD3, 0xC5, 0xD3, 0xD6, 0x55, 0xD6, 0x76, 0xDE, 0x97, 0xDE, 0x97, 0xBD, 0x94, 0x8C, 0x2F, 0xCE, 0x16, 0xC5, 0xF6, 0xA4, 0xF2, 0x8C, 0x30, 0x39, 0xE8, 0x5A, 0xEC, 0x63, 0x0C, 0x7B, 0xF0, 0x94, 0xB3, 0x5A, 0xEC, 0x84, 0x10, 0xB5, 0x96, 0xB5, 0x76, 0x73, 0x8E, 0x9C, 0xF4, 0x31, 0xA7, 0x73, 0x8D, 0x94, 0xB2, 0xD6, 0x79, 0xDE, 0xDA, 0xE6, 0xFB, 0x8C, 0x30, 0x4A, 0x69, 0xBD, 0xB5, 0xCE, 0x77, 0xCE, 0x56, 0xC6, 0x15, 0xCE, 0x56, 0xBD, 0xD4, 0xC5, 0xB3, 0xBD, 0x30, 0xBD, 0x50, 0xF6, 0xD6, 0xE6, 0x33, 0xDE, 0x13, 0xDE, 0x33, 0xE6, 0x33, 0xDE, 0x33, 0xE6, 0x54, 0xD5, 0xF2, 0xC5, 0x51, 0xD6, 0x14, 0xCD, 0xB2, 0xCD, 0xD3, 0xCD, 0xD3, 0xDE, 0x54, 0xC5, 0x50, 0xBD, 0x30, 0xCE, 0x14, 0xBD, 0x72, 0x7B, 0xAC, 0x73, 0x6B, 0xAD, 0x32, 0xC5, 0xD4, 0xBD, 0x73, 0x9C, 0x8F, 0x94, 0x4F, 0x8C, 0x2F, 0x8C, 0x2F, 0x73, 0x8C, 0x5A, 0xA9, 0x31, 0x65, 0x29, 0x23, 0x29, 0x64, 0x29, 0x44, 0x21, 0x03, 0x29, 0x24, 0x29, 0x44, 0x31, 0x85, 0x31, 0xA5, 0x41, 0xE6, 0x31, 0x85, 0x41, 0xE7, 0x52, 0x49, 0x62, 0xCB, 0x6B, 0x2C, 0xA5, 0x14, 0xAD, 0x55, 0xA5, 0x14, 0xA5, 0x14, 0xA4, 0xF4, 0xB5, 0xB7, 0xCE, 0x59, 0xBD, 0xB5, 0x9C, 0x90, 0xA5, 0x11, 0xB5, 0x73, 0xB5, 0x92, 0xBD, 0xB3, 0xC5, 0xB3, 0xC5, 0xD4, 0xBD, 0x72, 0xAC, 0xF0, 0x7B, 0x8A, 0xA4, 0xAF, 0xC5, 0xB4, 0xE6, 0x97, 0xCD, 0xD4, 0xD6, 0x15, 0xCD, 0xF5, 0xB5, 0x32, 0xCD, 0xF4, 0xCD, 0xD4, 0xC5, 0x72, 0xC5, 0x93, 0xD6, 0x15, 0xD6, 0x55, 0xDE, 0x97, 0xCD, 0xF4, 0xDE, 0x56, 0xDE, 0x56, 0xDE, 0x56, 0xCD, 0xB4, 0xBD, 0x52, 0xBD, 0x73, 0xBD, 0x52, 0xBD, 0x52, 0xC5, 0x72, 0xC5, 0x72, 0xC5, 0x73, 0xBD, 0x52, 0xA4, 0xB0, 0xAC, 0xF1, 0xAC, 0xF1, 0xB5, 0x12, 0xB5, 0x32, 0xAD, 0x31, 0xA4, 0xD0, 0xA4, 0xF0, 0xAD, 0x11, 0xAD, 0x11, 0xB5, 0x73, 0xB5, 0x52, 0xAD, 0x11, 0xAC, 0xF1, 0xAC, 0xF1, 0xAD, 0x11, 0xAD, 0x32, 0xAD, 0x11, 0xA4, 0xD0, 0x9C, 0x6F, 0x94, 0x4F, 0x94, 0x4F, 0x9C, 0x6F, 0x94, 0x2E, 0x7B, 0xAC, 0x41, 0xE7, 0x4A, 0x69, 0x7B, 0xEF, 0x8C, 0x30, 0x84, 0x10, 0x39, 0xC7, 0x8C, 0x71, 0x8C, 0x51, 0x9C, 0xB2, 0x9C, 0xD3, 0x83, 0xCF, 0x8C, 0x10, 0x83, 0xCE, 0x73, 0x6C, 0x6B, 0x0C, 0x5A, 0x8A, 0x62, 0xCB, 0x83, 0xCE, 0x7B, 0xAE, 0x73, 0x2C, 0x62, 0xCA, 0x9C, 0x50, 0x9C, 0x71, 0x8B, 0xEF, 0x94, 0x30, 0x73, 0x2C, 0x6A, 0xCB, 0x7B, 0x4C, 0x6B, 0x0B, 0xB5, 0x32, 0x7B, 0x8D, 0x20, 0xE4, 0x10, 0x83, 0x10, 0xA2, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0xA3, 0x10, 0x83, 0x08, 0x83, 0x10, 0x83, 0x10, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0xA3, 0x18, 0xC4, 0x10, 0xA3, 0x10, 0x83, 0x08, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC4, 0x20, 0xE4, 0x31, 0x66, 0x6B, 0x2B, 0xB5, 0x93, 0x9C, 0x70, 0x73, 0x6D, 0x42, 0x08, 0x29, 0x87, 0x21, 0x26, 0x19, 0x05, 0x21, 0x05, 0x19, 0x05, 0x21, 0x05, 0x21, 0x25, 0x29, 0x87, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x21, 0x05, 0x18, 0xE5, 0x19, 0x05, 0x29, 0x87, 0x31, 0xA8, 0x39, 0xC8, 0x39, 0xC8, 0x41, 0xC8, 0x73, 0x2C, 0xE6, 0x97, 0xC5, 0xD4, 0xAD, 0x32, 0x9C, 0x90, 0xAD, 0x53, 0xAD, 0x53, 0xB5, 0x73, 0xAD, 0x33, 0xA4, 0xD1, 0x9C, 0xB0, 0xBD, 0xB4, 0xBD, 0xB3, 0xC5, 0xD4, 0xB5, 0x73, 0x94, 0x90, 0xA4, 0xF2, 0x9C, 0xF3, 0x84, 0x2F, 0x7B, 0xCD, 0x6B, 0x2B, 0x41, 0xE6, 0x21, 0x23, 0x31, 0x85, 0x4A, 0x48, 0x6B, 0x2C, 0x7B, 0xAE, 0x39, 0xC6, 0x63, 0x0B, 0xBD, 0x95, 0xD6, 0x78, 0xDE, 0xB9, 0xD6, 0x37, 0xAC, 0xF2, 0x8B, 0xED, 0x94, 0x2D, 0x9C, 0x6E, 0xA4, 0x8E, 0xA4, 0xAF, 0xAC, 0xD0, 0xA4, 0x8E, 0xB5, 0x11, 0xB5, 0x31, 0xA4, 0xAF, 0xA4, 0x8F, 0xAC, 0xD0, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0x8F, 0x9C, 0x6E, 0x9C, 0x4E, 0x9C, 0x6E, 0xA4, 0x8E, 0xAC, 0xCE, 0xB4, 0xEF, 0xAC, 0xCF, 0xA4, 0xAE, 0xAC, 0xCF, 0xAC, 0xF0, 0x94, 0x2D, 0x94, 0x4D, 0x94, 0x2D, 0xB5, 0x11, 0xB5, 0x51, 0x94, 0x4D, 0xA4, 0xAE, 0xAD, 0x10, 0xAD, 0x10, 0xB5, 0x32, 0x9C, 0x4F, 0xAD, 0x11, 0xD6, 0x76, 0xE6, 0xD8, 0xBD, 0x94, 0x8C, 0x30, 0x42, 0x28, 0x4A, 0x48, 0x4A, 0x69, 0x5A, 0xCB, 0x7B, 0xEF, 0x52, 0x8A, 0x7B, 0xF0, 0xB5, 0x96, 0x8C, 0x51, 0x9C, 0xF3, 0x8C, 0x31, 0x9C, 0xB2, 0xAD, 0x55, 0x8C, 0x51, 0x9C, 0xB3, 0x94, 0x92, 0x94, 0x92, 0x63, 0x0C, 0x52, 0x6A, 0x84, 0x0F, 0xE7, 0x1A, 0xD6, 0x97, 0xD6, 0x77, 0xCE, 0x56, 0xCE, 0x36, 0xC5, 0xD4, 0xB5, 0x10, 0xC5, 0x91, 0xF6, 0xF6, 0xE6, 0x33, 0xDD, 0xF2, 0xD5, 0xD2, 0xDE, 0x33, 0xE6, 0x33, 0xD5, 0xD2, 0xCD, 0x91, 0xCD, 0xF3, 0xD6, 0x34, 0xD6, 0x34, 0xD5, 0xF4, 0xC5, 0x71, 0xE6, 0x54, 0xC5, 0x50, 0xBD, 0x50, 0xD6, 0x35, 0xC5, 0xD3, 0x9C, 0x6F, 0xAD, 0x32, 0xCE, 0x15, 0xCE, 0x15, 0xBD, 0x93, 0xC5, 0xB4, 0xA4, 0xD1, 0x94, 0x70, 0x94, 0x90, 0x8C, 0x4F, 0x94, 0x4F, 0x6B, 0x2B, 0x31, 0x85, 0x29, 0x64, 0x31, 0x85, 0x31, 0x65, 0x29, 0x44, 0x20, 0xE3, 0x29, 0x24, 0x31, 0x85, 0x31, 0x85, 0x31, 0xA5, 0x52, 0x69, 0x5A, 0xCB, 0x63, 0x0C, 0x6B, 0x2C, 0x73, 0x8E, 0x7B, 0xAF, 0x7B, 0xF0, 0x83, 0xF0, 0x94, 0xB3, 0x94, 0x92, 0xBD, 0xB6, 0xCE, 0x38, 0xAD, 0x54, 0xB5, 0x73, 0xC6, 0x15, 0xC5, 0xF4, 0xC5, 0xD3, 0xC5, 0xF4, 0xC5, 0xF4, 0xA4, 0xCF, 0xB5, 0x51, 0x94, 0x2E, 0xA4, 0xB0, 0xBD, 0xB3, 0xDE, 0x97, 0xCD, 0xF4, 0xD6, 0x35, 0xD6, 0x35, 0xB5, 0x31, 0xBD, 0x72, 0xCD, 0xF4, 0xC5, 0xB3, 0xB5, 0x31, 0xD5, 0xF4, 0xD6, 0x15, 0xDE, 0x76, 0xDE, 0x56, 0xD6, 0x15, 0xC5, 0xB3, 0xDE, 0x76, 0xE6, 0xB7, 0xDE, 0x55, 0xDE, 0x55, 0xDE, 0x35, 0xCD, 0xB3, 0xDE, 0x35, 0xB5, 0x31, 0xAC, 0xF1, 0x9C, 0x70, 0x8C, 0x0E, 0x9C, 0x8F, 0x9C, 0x8F, 0x9C, 0x8F, 0xA4, 0xD0, 0x9C, 0x8F, 0x94, 0x4E, 0xA4, 0xD0, 0xA4, 0xAF, 0x94, 0x2E, 0xA4, 0xD0, 0xA4, 0xF1, 0xA4, 0xF0, 0xA4, 0xF1, 0x9C, 0xB0, 0xAD, 0x12, 0xB5, 0x52, 0xB5, 0x32, 0xB5, 0x32, 0xB5, 0x53, 0xBD, 0x73, 0xC5, 0xB4, 0xBD, 0x93, 0xAD, 0x32, 0xAD, 0x12, 0x8C, 0x2F, 0x6B, 0x4C, 0x73, 0x8D, 0x7B, 0xCF, 0x7B, 0xAF, 0x39, 0xC7, 0x5A, 0xCA, 0x42, 0x08, 0x4A, 0x69, 0x6B, 0x4D, 0x7B, 0xCF, 0x9C, 0xD3, 0xAD, 0x34, 0x9C, 0x91, 0x83, 0xEE, 0x73, 0x6D, 0x6B, 0x0B, 0x52, 0x69, 0x6B, 0x0C, 0x7B, 0x8E, 0x8B, 0xEF, 0x83, 0xAD, 0x7B, 0x4C, 0x93, 0xEF, 0x8B, 0xEF, 0xB5, 0x13, 0xA4, 0xB2, 0x7B, 0x6D, 0x6A, 0xEB, 0x83, 0xAF, 0x41, 0xE7, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xC3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x10, 0x82, 0x10, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC3, 0x18, 0xC4, 0x10, 0xA3, 0x18, 0xC3, 0x18, 0xE4, 0x31, 0x86, 0x4A, 0x69, 0x29, 0x65, 0x10, 0x83, 0x08, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0xA3, 0x18, 0xE4, 0x21, 0x04, 0x41, 0xC7, 0x83, 0xCE, 0xA4, 0xB1, 0x8C, 0x2F, 0x7B, 0xAE, 0x52, 0xAA, 0x31, 0x86, 0x21, 0x25, 0x21, 0x05, 0x19, 0x05, 0x18, 0xE5, 0x21, 0x25, 0x21, 0x46, 0x18, 0xE5, 0x18, 0xE5, 0x18, 0xE5, 0x18, 0xE4, 0x21, 0x25, 0x29, 0x46, 0x29, 0x66, 0x29, 0x66, 0x21, 0x46, 0x21, 0x25, 0x29, 0x66, 0x4A, 0x28, 0xBD, 0x94, 0xC5, 0xD4, 0xB5, 0x53, 0x9C, 0xB1, 0xAD, 0x32, 0xAD, 0x32, 0xBD, 0xB4, 0xA4, 0xD1, 0xA4, 0xF2, 0xA4, 0xF1, 0xBD, 0xB4, 0xAD, 0x32, 0xC5, 0xF5, 0xAD, 0x53, 0x9C, 0xB0, 0xAD, 0x33, 0x94, 0xD3, 0x84, 0x2F, 0x94, 0x6F, 0xAD, 0x32, 0x9C, 0xD0, 0x5A, 0xA8, 0x29, 0x64, 0x31, 0xA6, 0x39, 0xE7, 0x5A, 0xEB, 0x52, 0x69, 0x4A, 0x48, 0x6B, 0x4C, 0x94, 0x91, 0xA4, 0xF3, 0xC5, 0xF7, 0xE6, 0xDB, 0xBD, 0xB6, 0x52, 0x68, 0x6B, 0x09, 0xB5, 0x31, 0xAC, 0xCF, 0xAC, 0xCF, 0xAC, 0xF0, 0xBD, 0x92, 0xAC, 0xF0, 0x94, 0x4E, 0x8C, 0x2D, 0xB5, 0x52, 0xB5, 0x31, 0xB5, 0x30, 0xA4, 0x8E, 0x9C, 0x8E, 0x9C, 0x6E, 0xA4, 0xAE, 0x9C, 0x6E, 0x9C, 0x6E, 0x9C, 0x8E, 0xA4, 0x8E, 0xAC, 0xCF, 0xAC, 0xCF, 0xB5, 0x10, 0xBD, 0x30, 0xB4, 0xEF, 0xB5, 0x10, 0xBD, 0x30, 0xB5, 0x30, 0xB5, 0x10, 0xB4, 0xEF, 0xAC, 0xCF, 0xAC, 0xCE, 0xAC, 0xCF, 0xAC, 0xEF, 0xB5, 0x10, 0xAC, 0xCF, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0xCF, 0xA4, 0xCF, 0x8B, 0xCD, 0x6B, 0x0B, 0x5A, 0xCA, 0x42, 0x48, 0x3A, 0x07, 0x42, 0x07, 0x52, 0xAA, 0x4A, 0x69, 0x6B, 0x6D, 0x8C, 0x72, 0x73, 0x8E, 0x94, 0xB3, 0x83, 0xF0, 0x94, 0x72, 0x94, 0x71, 0x7B, 0xAF, 0x5A, 0xCC, 0xB5, 0x76, 0xBD, 0xB6, 0x94, 0x92, 0x83, 0xF0, 0x8C, 0x71, 0x7B, 0xEF, 0xB5, 0x74, 0xCE, 0x57, 0xD6, 0x97, 0xD6, 0x76, 0xD6, 0x75, 0xB5, 0x10, 0xAC, 0xCE, 0xE6, 0x54, 0xEE, 0x95, 0xE6, 0x13, 0xDE, 0x13, 0xE6, 0x54, 0xEE, 0x75, 0xC5, 0x71, 0xCD, 0xB2, 0xD5, 0xF3, 0xDE, 0x55, 0xCD, 0xD3, 0xC5, 0x92, 0xC5, 0x91, 0xE6, 0x75, 0xCD, 0x91, 0xBD, 0x51, 0xDE, 0x96, 0xDE, 0x55, 0xBD, 0x92, 0xC5, 0xD4, 0xC5, 0xD4, 0xC5, 0xB3, 0xC5, 0xB3, 0xBD, 0x73, 0xAD, 0x11, 0xAD, 0x32, 0xAD, 0x32, 0xA4, 0xD1, 0xA4, 0xF1, 0x9C, 0x90, 0x29, 0x44, 0x29, 0x44, 0x31, 0x85, 0x41, 0xE7, 0x29, 0x24, 0x21, 0x03, 0x31, 0x65, 0x42, 0x07, 0x42, 0x07, 0x52, 0x69, 0x7B, 0xCF, 0xA5, 0x34, 0x7B, 0xAE, 0x5A, 0xAA, 0x63, 0x0C, 0x73, 0x8E, 0x6B, 0x4D, 0x7B, 0xCF, 0x84, 0x10, 0x94, 0x92, 0xA5, 0x35, 0xC6, 0x18, 0xCE, 0x38, 0xB5, 0x95, 0xCE, 0x15, 0xCE, 0x35, 0xB5, 0x72, 0xBD, 0xB3, 0xBD, 0xB3, 0xC5, 0xF4, 0xC5, 0xB3, 0xB5, 0x52, 0xAC, 0xD0, 0xC5, 0xB3, 0xE6, 0xB7, 0xC5, 0xB3, 0xB5, 0x51, 0xCD, 0xD4, 0xCD, 0xD3, 0xCD, 0xF4, 0xD6, 0x14, 0xD5, 0xF4, 0xC5, 0x92, 0xD5, 0xF4, 0xDE, 0x55, 0xDE, 0x76, 0xDE, 0x96, 0xDE, 0x75, 0xE6, 0xD7, 0xE6, 0xB7, 0xDE, 0x96, 0xD6, 0x34, 0xDE, 0x54, 0xE6, 0x75, 0xDE, 0x55, 0xDE, 0x34, 0xAC, 0xD0, 0xBD, 0x94, 0x94, 0x4F, 0x84, 0x0E, 0x8C, 0x2F, 0x94, 0x8F, 0xA4, 0xD0, 0xAD, 0x11, 0x94, 0x2E, 0x9C, 0xB0, 0xBD, 0x93, 0xA4, 0xF0, 0x9C, 0xAF, 0x94, 0x4E, 0x9C, 0xB0, 0xB5, 0x52, 0xA4, 0xF1, 0xA4, 0xD0, 0xBD, 0xB4, 0xB5, 0x72, 0xA4, 0xB0, 0xA4, 0xD0, 0xA4, 0xD0, 0xA4, 0xB0, 0xA4, 0xD0, 0xAD, 0x11, 0xB5, 0x53, 0xCE, 0x15, 0xBD, 0x94, 0xA4, 0xF2, 0x94, 0x70, 0x84, 0x0F, 0x6B, 0x2C, 0x4A, 0x48, 0x4A, 0x48, 0x4A, 0x28, 0x31, 0x85, 0x29, 0x45, 0x29, 0x44, 0x39, 0xE7, 0x52, 0xAA, 0x6B, 0x4D, 0x73, 0x8E, 0x7B, 0xAE, 0x9C, 0xD2, 0x8C, 0x30, 0x63, 0x0C, 0x62, 0xAA, 0x7B, 0x6D, 0x62, 0xCA, 0x6A, 0xEB, 0x83, 0x8D, 0x94, 0x0F, 0xB5, 0x13, 0xB5, 0x13, 0x6B, 0x0B, 0x5A, 0x8A, 0x5A, 0x69, 0x49, 0xE8, 0x18, 0xC4, 0x21, 0x25, 0x21, 0x45, 0x10, 0xA3, 0x10, 0x82, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x82, 0x10, 0x82, 0x10, 0x83, 0x10, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xC3, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x4A, 0x28, 0x8C, 0x50, 0x94, 0x70, 0x9C, 0x90, 0x73, 0x6C, 0x31, 0xA6, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC3, 0x18, 0xE4, 0x21, 0x05, 0x4A, 0x28, 0x83, 0xCE, 0xAD, 0x12, 0x9C, 0xB1, 0x63, 0x0B, 0x39, 0xE8, 0x29, 0x66, 0x21, 0x05, 0x18, 0xE4, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xC4, 0x21, 0x46, 0x29, 0x66, 0x21, 0x25, 0x21, 0x25, 0x21, 0x05, 0x19, 0x05, 0x19, 0x05, 0x31, 0x87, 0x42, 0x08, 0x83, 0xEE, 0xBD, 0x93, 0xAD, 0x32, 0x9C, 0xB1, 0x9C, 0xD1, 0xAD, 0x32, 0xB5, 0x73, 0xA4, 0xF1, 0xA5, 0x12, 0xA4, 0xF2, 0xB5, 0x73, 0xA4, 0xD1, 0xC6, 0x15, 0xBD, 0x94, 0xA4, 0xF1, 0xA5, 0x12, 0x9C, 0xF3, 0x8C, 0x50, 0x9C, 0xD0, 0xAD, 0x52, 0xB5, 0x92, 0xB5, 0x93, 0x94, 0x6F, 0x4A, 0x47, 0x39, 0xC6, 0x41, 0xE7, 0x62, 0xEB, 0xAD, 0x34, 0x8C, 0x50, 0x6B, 0x0B, 0x7B, 0x8D, 0x7B, 0x8E, 0xC6, 0x18, 0xC5, 0xF7, 0x9C, 0xD2, 0xA4, 0xF2, 0xBD, 0xB3, 0xA4, 0xAF, 0xA4, 0xAF, 0xBD, 0xD4, 0xBD, 0xB3, 0xB5, 0x73, 0xAD, 0x32, 0x9C, 0xD1, 0x7B, 0x8C, 0x6B, 0x0A, 0x6B, 0x2A, 0x8C, 0x0D, 0xA4, 0xF0, 0xA4, 0xD0, 0x94, 0x6E, 0x94, 0x4E, 0x9C, 0xAF, 0x9C, 0x6F, 0x94, 0x4E, 0x8C, 0x0D, 0x8B, 0xEC, 0x8C, 0x0D, 0x94, 0x2D, 0x9C, 0x6E, 0xA4, 0xCF, 0xAC, 0xCF, 0x9C, 0x6D, 0xA4, 0xCF, 0xAC, 0xF0, 0xA4, 0x8E, 0x9C, 0x6D, 0x9C, 0x4D, 0x94, 0x0C, 0x9C, 0x6E, 0x9C, 0x8E, 0x9C, 0x6E, 0xA4, 0x8E, 0xA4, 0xCF, 0xAC, 0xCF, 0xA4, 0xCF, 0xA4, 0xB0, 0x73, 0x6C, 0x73, 0x8D, 0x4A, 0x48, 0x29, 0x65, 0x31, 0x85, 0x4A, 0x68, 0x42, 0x28, 0x5A, 0xCB, 0x6B, 0x6E, 0x5A, 0xEC, 0x6B, 0x2D, 0x73, 0x8E, 0x21, 0x05, 0x63, 0x0C, 0x94, 0x72, 0x7B, 0xAF, 0x8C, 0x31, 0x39, 0xC8, 0x63, 0x0C, 0xD6, 0x99, 0xE6, 0xFB, 0xAD, 0x35, 0x5A, 0xAA, 0x7B, 0xAD, 0xC5, 0xD5, 0xBD, 0xB4, 0xB5, 0x51, 0xAC, 0xAE, 0xB4, 0xEF, 0xBD, 0x30, 0xDE, 0x54, 0xE6, 0x75, 0xE6, 0x54, 0xE6, 0x75, 0xEE, 0x95, 0xE6, 0x75, 0xDE, 0x13, 0xDE, 0x13, 0xCD, 0xB2, 0xCD, 0x91, 0xDE, 0x34, 0xEE, 0x95, 0xE6, 0x54, 0xC5, 0x30, 0xBD, 0x71, 0xEE, 0xF7, 0xEE, 0xD7, 0xE6, 0xB6, 0xEE, 0xD7, 0xEE, 0xB6, 0xE6, 0xB6, 0xE6, 0x76, 0xD6, 0x15, 0xCD, 0xD4, 0xD6, 0x56, 0xCE, 0x15, 0xC5, 0xB3, 0xC5, 0xD4, 0xCE, 0x16, 0x62, 0xCA, 0x94, 0x70, 0x9C, 0x6F, 0xB5, 0x53, 0x94, 0x2E, 0x41, 0xE6, 0x29, 0x44, 0x42, 0x07, 0x4A, 0x48, 0x41, 0xE7, 0x6B, 0x2C, 0x73, 0x6D, 0x5A, 0xCA, 0x41, 0xE7, 0x5A, 0xAA, 0x52, 0xAA, 0x4A, 0x28, 0x6B, 0x2C, 0x7B, 0xAE, 0x7B, 0xCF, 0x9C, 0xD3, 0xBD, 0xB7, 0xCE, 0x59, 0xCE, 0x37, 0xBD, 0xB4, 0xC5, 0xD3, 0xCE, 0x14, 0xCE, 0x15, 0xCE, 0x35, 0xC5, 0xD4, 0xC5, 0xB3, 0xCD, 0xF5, 0xA4, 0xB0, 0xBD, 0x93, 0xE6, 0xB7, 0xCD, 0xF4, 0xD6, 0x15, 0xCE, 0x14, 0xCD, 0xD3, 0xC5, 0x92, 0xD6, 0x14, 0xCD, 0xB3, 0xCD, 0xB3, 0xD5, 0xF3, 0xDE, 0x55, 0xDE, 0x55, 0xDE, 0x75, 0xDE, 0x75, 0xE6, 0xB6, 0xD6, 0x35, 0xDE, 0x76, 0xDE, 0x55, 0xDE, 0x55, 0xDE, 0x75, 0xD6, 0x14, 0xD6, 0x14, 0xAC, 0xD0, 0xBD, 0x94, 0x83, 0xEE, 0x8C, 0x2E, 0x9C, 0xD1, 0x94, 0x90, 0x94, 0x6F, 0x9C, 0x8F, 0x9C, 0xB0, 0xAD, 0x11, 0xBD, 0x93, 0xAD, 0x11, 0x8C, 0x0E, 0x84, 0x2E, 0x73, 0x8C, 0x83, 0xED, 0xA4, 0xF1, 0xB5, 0x53, 0xC5, 0xF5, 0xCE, 0x35, 0xB5, 0x52, 0xAD, 0x11, 0xB5, 0x52, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0x52, 0xBD, 0x94, 0xC5, 0xF5, 0xBD, 0xB5, 0xBD, 0xB4, 0xC5, 0xF5, 0xBD, 0x94, 0xBD, 0xB5, 0xAD, 0x53, 0xAD, 0x73, 0xB5, 0x94, 0x9C, 0xD1, 0x4A, 0x48, 0x20, 0xE3, 0x21, 0x24, 0x21, 0x24, 0x29, 0x44, 0x29, 0x45, 0x39, 0xA6, 0x63, 0x0C, 0x7B, 0xEF, 0xA5, 0x13, 0x94, 0x71, 0x73, 0x4D, 0x73, 0x2C, 0x73, 0x2C, 0x7B, 0x4C, 0x83, 0x6D, 0x8B, 0xEF, 0xA4, 0x91, 0x52, 0x28, 0x31, 0x65, 0x52, 0x28, 0x4A, 0x28, 0x39, 0x87, 0x18, 0xC3, 0x19, 0x04, 0x21, 0x05, 0x18, 0xC3, 0x18, 0xC4, 0x10, 0xC3, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0xC3, 0x10, 0xA3, 0x18, 0xC3, 0x18, 0xE4, 0x21, 0x04, 0x52, 0x69, 0x7B, 0xAD, 0x9C, 0x70, 0xA4, 0xB0, 0x9C, 0x90, 0xAC, 0xF2, 0xAC, 0xF2, 0x83, 0xEE, 0x41, 0xE7, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC3, 0x29, 0x46, 0x5A, 0xAA, 0x94, 0x6F, 0xAD, 0x12, 0x73, 0x6C, 0x5A, 0xCB, 0x42, 0x29, 0x29, 0x66, 0x21, 0x25, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x18, 0xE4, 0x18, 0xE4, 0x21, 0x26, 0x29, 0x67, 0x21, 0x25, 0x19, 0x05, 0x21, 0x05, 0x19, 0x05, 0x21, 0x05, 0x29, 0x46, 0x31, 0x87, 0x39, 0xC7, 0x52, 0x8A, 0x9C, 0xB1, 0xAD, 0x12, 0x9C, 0xB0, 0x9C, 0xB0, 0xA5, 0x12, 0xAD, 0x12, 0xA4, 0xF1, 0xAD, 0x53, 0xAD, 0x53, 0xAD, 0x32, 0xB5, 0x73, 0xCE, 0x15, 0xBD, 0xB4, 0xA4, 0xF2, 0xAD, 0x53, 0x9C, 0xF2, 0x8C, 0x70, 0xA5, 0x11, 0xAD, 0x31, 0xAD, 0x32, 0xBD, 0xB3, 0xBD, 0xB3, 0xAD, 0x52, 0x63, 0x0A, 0x3A, 0x06, 0x39, 0xE6, 0x63, 0x0B, 0xA5, 0x13, 0x63, 0x0B, 0x5A, 0xCA, 0x84, 0x10, 0x84, 0x10, 0x8C, 0x10, 0x9C, 0xB2, 0xDE, 0x99, 0xC5, 0xF5, 0xA4, 0x8E, 0xAC, 0xCF, 0xC5, 0xF4, 0xBD, 0x93, 0xAD, 0x32, 0xAD, 0x73, 0xB5, 0x74, 0xA4, 0xF2, 0x8C, 0x0E, 0x7B, 0xCD, 0x8C, 0x4F, 0xA4, 0xF1, 0xA4, 0xF1, 0xA5, 0x11, 0xA4, 0xF1, 0xA4, 0xF1, 0xA4, 0xF1, 0xAD, 0x12, 0xAD, 0x32, 0xAD, 0x32, 0xAD, 0x32, 0xAD, 0x12, 0xB5, 0x73, 0xBD, 0x72, 0xA4, 0xAE, 0x9C, 0x6E, 0xA5, 0x11, 0xAD, 0x32, 0xB5, 0x52, 0xB5, 0x52, 0xA5, 0x11, 0x9C, 0x8F, 0xA4, 0xD0, 0xA4, 0xF0, 0xA4, 0xF0, 0xA4, 0xD0, 0xA4, 0xF0, 0xA4, 0xCF, 0x9C, 0x8F, 0xA4, 0xD0, 0x94, 0x6F, 0x8C, 0x0E, 0xA4, 0xF1, 0x6B, 0x2B, 0x31, 0x65, 0x31, 0x85, 0x39, 0xC7, 0x39, 0xC7, 0x62, 0xEC, 0x5A, 0xCB, 0x62, 0xEB, 0x7B, 0x8E, 0x52, 0x6A, 0x29, 0x66, 0x31, 0x86, 0x63, 0x0C, 0x62, 0xEC, 0x52, 0x8B, 0x94, 0x92, 0xD6, 0x59, 0xDE, 0x9A, 0x8C, 0x31, 0x7B, 0x8E, 0x41, 0xA7, 0x41, 0xC7, 0x7B, 0xAD, 0xCD, 0xD5, 0xBD, 0x31, 0xAC, 0xCF, 0xAC, 0xCF, 0xAC, 0xCE, 0xAC, 0xAE, 0xAC, 0xAE, 0xAC, 0x8D, 0xA4, 0x6D, 0xAC, 0x8E, 0xAC, 0x8D, 0xAC, 0xAD, 0xB4, 0xCE, 0xB4, 0xEE, 0xBD, 0x0F, 0xBD, 0x0F, 0xB4, 0xEE, 0xB4, 0xCE, 0xBD, 0x50, 0xCD, 0xB3, 0xCD, 0xD3, 0xD6, 0x14, 0xDE, 0x55, 0xE6, 0x75, 0xE6, 0x75, 0xDE, 0x75, 0xDE, 0x75, 0xE6, 0x76, 0xEE, 0xB6, 0xE6, 0x96, 0xE6, 0x76, 0xE6, 0x96, 0xEE, 0xB7, 0xE6, 0x76, 0xEE, 0xD8, 0xE6, 0xD7, 0xE6, 0x97, 0xD6, 0x35, 0xAC, 0xF1, 0x39, 0x85, 0x31, 0xA5, 0x4A, 0x27, 0x31, 0x85, 0x62, 0xCA, 0x39, 0xA6, 0x31, 0x65, 0x4A, 0x28, 0x4A, 0x49, 0x52, 0x69, 0x52, 0x89, 0x6B, 0x4C, 0x73, 0x8E, 0x7B, 0xCF, 0x94, 0x92, 0xB5, 0x76, 0xC6, 0x18, 0xC6, 0x17, 0xB5, 0x94, 0xA5, 0x11, 0xBD, 0x93, 0xB5, 0x52, 0xBD, 0x93, 0xAD, 0x31, 0xA4, 0xD0, 0xAC, 0xF1, 0xA4, 0xD0, 0xBD, 0xB4, 0xE6, 0xD8, 0xCD, 0xF4, 0xDE, 0x56, 0xE6, 0x97, 0xD6, 0x14, 0xC5, 0x72, 0xBD, 0x51, 0xAC, 0xCF, 0xBD, 0x31, 0xCD, 0xD3, 0xE6, 0x76, 0xE6, 0x96, 0xE6, 0xB6, 0xE6, 0xD7, 0xE6, 0xB7, 0xE6, 0xB7, 0xE6, 0x96, 0xE6, 0x96, 0xDE, 0x75, 0xDE, 0x34, 0xCD, 0xD3, 0xCD, 0xD3, 0xAC, 0xF0, 0xBD, 0x94, 0x83, 0xEE, 0x94, 0x90, 0xB5, 0x73, 0xB5, 0xB4, 0xB5, 0x73, 0xAD, 0x53, 0xB5, 0x94, 0xC5, 0xF4, 0xCE, 0x35, 0xBD, 0xB4, 0x9C, 0xB1, 0x9C, 0xF1, 0x7B, 0xAD, 0x8C, 0x4F, 0xAD, 0x52, 0xB5, 0x73, 0xC5, 0xD4, 0xBD, 0xD3, 0xBD, 0x93, 0xAD, 0x11, 0xB5, 0x73, 0xBD, 0x93, 0xB5, 0x73, 0xB5, 0x32, 0xC5, 0xF5, 0xC5, 0xF5, 0xBD, 0xB4, 0xBD, 0xB5, 0xC6, 0x16, 0xBD, 0xD5, 0xBD, 0xD5, 0xC5, 0xF6, 0xC6, 0x16, 0xCE, 0x16, 0xC5, 0xF6, 0xA4, 0xF2, 0x9C, 0xD2, 0x8C, 0x70, 0x5A, 0xCA, 0x31, 0x85, 0x29, 0x44, 0x21, 0x24, 0x21, 0x24, 0x31, 0x85, 0x52, 0xAA, 0x7B, 0xEF, 0x9C, 0xB2, 0xB5, 0x35, 0x7B, 0x6D, 0x73, 0x4C, 0x73, 0x2C, 0x6A, 0xEB, 0x7B, 0x6D, 0x7B, 0x8E, 0x5A, 0x8A, 0x41, 0xC7, 0x39, 0x86, 0x5A, 0x8A, 0x4A, 0x08, 0x20, 0xE4, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC4, 0x29, 0x25, 0x4A, 0x28, 0x52, 0x89, 0x73, 0x4C, 0x9C, 0x90, 0xD6, 0x36, 0xDE, 0x97, 0xD6, 0x35, 0xC5, 0xB3, 0xC5, 0xD4, 0xBD, 0x93, 0xBD, 0xB4, 0xBD, 0x73, 0x8C, 0x0E, 0x39, 0xC6, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC4, 0x29, 0x45, 0x83, 0xEE, 0xAC, 0xF1, 0xA4, 0xB0, 0x94, 0x2F, 0x6B, 0x2C, 0x42, 0x08, 0x29, 0x46, 0x21, 0x25, 0x19, 0x04, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE5, 0x21, 0x46, 0x21, 0x25, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x21, 0x25, 0x29, 0x46, 0x29, 0x46, 0x29, 0x66, 0x41, 0xE8, 0x83, 0xEF, 0xA4, 0xB1, 0x9C, 0xB1, 0xA4, 0xF2, 0x9C, 0xB1, 0xA4, 0xF1, 0x9C, 0xB1, 0x9C, 0xD1, 0xB5, 0x94, 0x9C, 0xB0, 0xBD, 0x93, 0xB5, 0x93, 0xAD, 0x53, 0x9C, 0xB1, 0x9C, 0xD1, 0x94, 0xD1, 0x8C, 0x6F, 0xA5, 0x11, 0xA5, 0x11, 0xA5, 0x31, 0xAD, 0x52, 0xB5, 0x92, 0xB5, 0x92, 0xB5, 0x93, 0x52, 0xC8, 0x31, 0xA5, 0x31, 0xA6, 0x39, 0xE7, 0x42, 0x07, 0x4A, 0x48, 0x83, 0xEF, 0x73, 0x6D, 0x73, 0x6D, 0x6B, 0x2D, 0xC6, 0x18, 0xE6, 0xFB, 0x94, 0x2F, 0xA4, 0xB0, 0xC5, 0xD4, 0xB5, 0x52, 0xBD, 0xB4, 0xBD, 0xB5, 0xB5, 0x74, 0xAD, 0x53, 0xAD, 0x53, 0x9C, 0xD2, 0xA5, 0x33, 0xB5, 0x74, 0xAD, 0x73, 0xAD, 0x33, 0xAD, 0x33, 0xAD, 0x53, 0xAD, 0x53, 0xAD, 0x53, 0xAD, 0x53, 0xAD, 0x33, 0xB5, 0x73, 0xBD, 0xD4, 0xC5, 0xD4, 0xBD, 0xB2, 0xA4, 0xCE, 0xA4, 0xF0, 0xAD, 0x32, 0xC5, 0xF5, 0xCE, 0x57, 0xD6, 0x77, 0xBD, 0xB4, 0xAD, 0x32, 0xB5, 0x94, 0xAD, 0x52, 0xAD, 0x52, 0xAD, 0x11, 0xAD, 0x11, 0xAD, 0x11, 0xAD, 0x12, 0xAD, 0x32, 0xBD, 0xB4, 0xBD, 0x93, 0xCE, 0x56, 0xBD, 0xB3, 0x9C, 0xAF, 0x7B, 0xCD, 0x29, 0x44, 0x8C, 0x71, 0xCE, 0x59, 0xC6, 0x18, 0x9C, 0xB2, 0xBD, 0xD6, 0xCE, 0x38, 0xBD, 0xB6, 0x94, 0x92, 0xA5, 0x34, 0xAD, 0x35, 0xBD, 0x97, 0xCD, 0xF8, 0xDE, 0x7A, 0xD6, 0x59, 0xDE, 0xBA, 0xCD, 0xF8, 0x6A, 0xEC, 0x28, 0xE4, 0x39, 0xA7, 0x8B, 0xEF, 0x83, 0xAE, 0x41, 0xC7, 0xAC, 0xF1, 0xB4, 0xEF, 0xAC, 0xCF, 0xC5, 0x71, 0xD6, 0x14, 0xD6, 0x14, 0xD5, 0xF4, 0xD5, 0xF3, 0xCD, 0xB2, 0xAC, 0xCF, 0xAC, 0xEF, 0xAC, 0xCF, 0xA4, 0xAE, 0xAC, 0xCF, 0xA4, 0xAE, 0xA4, 0x8E, 0xA4, 0x6E, 0x9C, 0x4D, 0x9C, 0x4D, 0x9C, 0x2C, 0x94, 0x2C, 0x9C, 0x4D, 0xAC, 0xAE, 0xAC, 0xAE, 0xAC, 0xAE, 0xAC, 0xAE, 0xAC, 0xAE, 0xAC, 0xCF, 0xAC, 0xAE, 0xA4, 0x6E, 0xA4, 0x6D, 0x9C, 0x4D, 0x9C, 0x4D, 0xA4, 0x8F, 0xAC, 0xCF, 0xA4, 0xAE, 0x7B, 0x6B, 0x4A, 0x06, 0x39, 0xC6, 0x29, 0x44, 0x31, 0x85, 0x39, 0xC6, 0x41, 0xE7, 0x39, 0xC6, 0x39, 0xA6, 0x52, 0x69, 0x5A, 0xAA, 0x6B, 0x4C, 0x7B, 0xAE, 0x84, 0x0F, 0x8C, 0x51, 0xA5, 0x34, 0xB5, 0xB6, 0xBD, 0xD6, 0xD6, 0x98, 0xCE, 0x36, 0xCE, 0x35, 0xCE, 0x15, 0xC5, 0xF4, 0xBD, 0xD4, 0xB5, 0x72, 0xAD, 0x31, 0xA4, 0xF0, 0xB5, 0x52, 0xE6, 0xD7, 0xCD, 0xD3, 0xD6, 0x35, 0xEE, 0xD7, 0xD6, 0x14, 0xB5, 0x30, 0xB4, 0xF0, 0xBD, 0x31, 0xC5, 0x71, 0xCD, 0xD3, 0xE6, 0x75, 0xDE, 0x55, 0xD6, 0x14, 0xD6, 0x14, 0xDE, 0x55, 0xDE, 0x75, 0xD6, 0x34, 0xCD, 0xF3, 0xD5, 0xF3, 0xD6, 0x34, 0xCD, 0xD2, 0xCD, 0xB3, 0xAC, 0xF1, 0xBD, 0x74, 0x8C, 0x2E, 0x9C, 0xD1, 0xAD, 0x53, 0xB5, 0x94, 0xBD, 0xD5, 0xBD, 0xB4, 0xC5, 0xF5, 0xBD, 0xD4, 0xCE, 0x15, 0xC6, 0x15, 0xAD, 0x53, 0xAD, 0x32, 0x8C, 0x2F, 0x9C, 0xB0, 0xB5, 0x94, 0xC5, 0xF5, 0xCE, 0x35, 0xC5, 0xF4, 0xAD, 0x52, 0xA4, 0xD0, 0xAD, 0x32, 0xBD, 0xD4, 0xB5, 0x73, 0xA4, 0xF1, 0xCE, 0x15, 0xCE, 0x15, 0xBD, 0x94, 0xB5, 0x73, 0xBD, 0xB4, 0xBD, 0xB4, 0xAD, 0x33, 0xBD, 0xB5, 0xC5, 0xF5, 0xC6, 0x16, 0xCE, 0x36, 0xCE, 0x16, 0xCE, 0x36, 0xD6, 0x97, 0xCE, 0x36, 0xB5, 0x73, 0x83, 0xCE, 0x42, 0x07, 0x31, 0x85, 0x29, 0x65, 0x29, 0x45, 0x29, 0x65, 0x52, 0x8A, 0x8C, 0x51, 0x94, 0x71, 0x8C, 0x0F, 0x5A, 0x89, 0x5A, 0x8A, 0x62, 0xAA, 0x94, 0x30, 0xAC, 0xF3, 0x73, 0x2C, 0x4A, 0x08, 0x49, 0xE7, 0x6A, 0xCA, 0x5A, 0x69, 0x31, 0x86, 0x10, 0xA3, 0x18, 0xC3, 0x10, 0xA3, 0x21, 0x04, 0x52, 0xAA, 0x4A, 0x29, 0x42, 0x29, 0x52, 0xAA, 0x94, 0x91, 0x9C, 0xB1, 0x94, 0x70, 0xA4, 0xD1, 0xBD, 0x94, 0xAC, 0xF1, 0x94, 0x6F, 0xAC, 0xF0, 0xB5, 0x52, 0xB5, 0x52, 0x9C, 0xB0, 0x9C, 0x8F, 0x94, 0x4E, 0x9C, 0x90, 0x83, 0xCE, 0x31, 0x86, 0x18, 0xE4, 0x10, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0xA3, 0x08, 0x82, 0x10, 0xA3, 0x29, 0x24, 0x8C, 0x0F, 0xB5, 0x52, 0xBD, 0x73, 0xB5, 0x32, 0x94, 0x6F, 0x63, 0x0A, 0x39, 0xC7, 0x29, 0x66, 0x21, 0x05, 0x18, 0xE4, 0x19, 0x04, 0x19, 0x05, 0x21, 0x25, 0x19, 0x05, 0x18, 0xE4, 0x18, 0xE4, 0x19, 0x05, 0x21, 0x25, 0x21, 0x25, 0x21, 0x45, 0x21, 0x45, 0x29, 0x66, 0x31, 0x87, 0x73, 0x4C, 0xB5, 0x33, 0xBD, 0x94, 0xB5, 0x53, 0xAD, 0x32, 0xAD, 0x12, 0xA4, 0xD1, 0x9C, 0xB0, 0xA4, 0xD1, 0x9C, 0xB0, 0xA4, 0xD1, 0xA4, 0xD0, 0x94, 0x70, 0x8C, 0x0F, 0x8C, 0x2F, 0xB5, 0xF6, 0x7C, 0x2D, 0x94, 0xCF, 0xAD, 0x72, 0xAD, 0x72, 0xB5, 0x93, 0xC6, 0x15, 0xB5, 0xB2, 0xAD, 0x4F, 0xA5, 0x4F, 0x8C, 0x4D, 0x31, 0xA5, 0x29, 0x65, 0x39, 0xE6, 0x42, 0x28, 0x6B, 0x4C, 0x52, 0xAA, 0x52, 0xAA, 0x6B, 0x4D, 0xCE, 0x59, 0xCE, 0x59, 0xAD, 0x34, 0xCE, 0x58, 0xB5, 0x53, 0xB5, 0x93, 0xC5, 0xF5, 0xB5, 0xB5, 0xAD, 0x74, 0xAD, 0x53, 0xB5, 0x74, 0xA5, 0x13, 0xAD, 0x74, 0xAD, 0x74, 0xB5, 0x74, 0xA5, 0x32, 0xA4, 0xF2, 0x9C, 0xF2, 0xB5, 0x73, 0xAD, 0x53, 0xB5, 0x53, 0xAD, 0x33, 0xB5, 0x73, 0xB5, 0x93, 0xC6, 0x15, 0xC5, 0xD3, 0xA4, 0xAE, 0xAD, 0x11, 0xAD, 0x32, 0xB5, 0x94, 0xBD, 0xB4, 0xC5, 0xF6, 0xAD, 0x53, 0xB5, 0x73, 0xC5, 0xF5, 0xB5, 0x73, 0xB5, 0x73, 0xAD, 0x53, 0xBD, 0xB4, 0xB5, 0x53, 0xAD, 0x32, 0xA4, 0xF1, 0xB5, 0x73, 0xBD, 0xB4, 0xB5, 0x93, 0xA5, 0x11, 0x9C, 0xAF, 0xAD, 0x11, 0x52, 0x68, 0x84, 0x30, 0xB5, 0xB6, 0xCE, 0x18, 0x8C, 0x30, 0xC6, 0x18, 0xE6, 0xDB, 0xBD, 0xD7, 0xCE, 0x59, 0xBD, 0xD7, 0xCE, 0x59, 0xDE, 0xBB, 0xDE, 0xBA, 0xC5, 0xD7, 0xB5, 0x55, 0xD6, 0x38, 0xA4, 0xB2, 0xB5, 0x35, 0x8B, 0xEF, 0x9C, 0x71, 0xAD, 0x13, 0xBD, 0x95, 0xBD, 0x96, 0xD6, 0x17, 0xCD, 0xB4, 0xB4, 0xF0, 0xC5, 0x92, 0xCD, 0xD3, 0xC5, 0x92, 0xD5, 0xF3, 0xCD, 0xD3, 0xCD, 0xB3, 0xA4, 0x8E, 0x9C, 0x8F, 0x9C, 0x8F, 0x94, 0x6E, 0xAD, 0x10, 0x94, 0x6E, 0xAD, 0x31, 0xA4, 0xD0, 0x9C, 0x8F, 0xA4, 0xD0, 0x9C, 0xAF, 0x8C, 0x0C, 0xAC, 0xCF, 0x9C, 0x2C, 0x9C, 0x2C, 0x83, 0xAA, 0x8B, 0xCB, 0x8B, 0xEC, 0x7B, 0x6A, 0x83, 0xAB, 0x94, 0x0D, 0x8B, 0xCB, 0x83, 0xAB, 0x8B, 0xEC, 0x94, 0x2D, 0x9C, 0x4D, 0x9C, 0x6E, 0xA4, 0xAF, 0x94, 0x4E, 0x41, 0xE6, 0x31, 0x86, 0x39, 0xC6, 0x42, 0x07, 0x42, 0x07, 0x39, 0xA6, 0x4A, 0x28, 0x52, 0x89, 0x5A, 0xCA, 0x63, 0x0B, 0x6B, 0x2C, 0x6B, 0x6D, 0x84, 0x0F, 0x84, 0x30, 0xAD, 0x55, 0xAD, 0x55, 0xD6, 0x99, 0xB5, 0x74, 0xAD, 0x11, 0xB5, 0x52, 0xB5, 0x51, 0xB5, 0x51, 0xA4, 0xF0, 0xA4, 0xF0, 0xA4, 0xAF, 0x9C, 0x8F, 0xB5, 0x31, 0xB5, 0x31, 0xB5, 0x10, 0xC5, 0xB3, 0xCD, 0xB3, 0xD6, 0x14, 0xD6, 0x35, 0xDE, 0x56, 0xE6, 0x76, 0xDE, 0x34, 0xE6, 0x96, 0xDE, 0x75, 0xDE, 0x55, 0xDE, 0x34, 0xDE, 0x75, 0xDE, 0x55, 0xE6, 0x75, 0xDE, 0x55, 0xDE, 0x54, 0xEE, 0xB6, 0xE6, 0x55, 0xDE, 0x35, 0xB5, 0x32, 0xB5, 0x73, 0x8C, 0x4F, 0xA5, 0x32, 0xB5, 0x94, 0xB5, 0xB4, 0xB5, 0x94, 0xA5, 0x12, 0xBD, 0xD4, 0xC5, 0xF4, 0xC6, 0x15, 0xB5, 0x93, 0xAD, 0x53, 0xAD, 0x73, 0x9C, 0xB1, 0xA5, 0x12, 0xB5, 0xB4, 0xCE, 0x35, 0xD6, 0x76, 0xCE, 0x15, 0xAD, 0x11, 0xA4, 0xD1, 0xB5, 0x52, 0xBD, 0x93, 0xB5, 0x52, 0xA4, 0xF1, 0xC5, 0xD4, 0xC5, 0xF5, 0xAD, 0x32, 0xA5, 0x12, 0xB5, 0x53, 0xBD, 0x94, 0xAD, 0x32, 0xBD, 0xD5, 0xD6, 0x36, 0xC5, 0xD5, 0xCE, 0x36, 0xC5, 0xF5, 0xCE, 0x36, 0xCE, 0x56, 0xCE, 0x35, 0xD6, 0x76, 0xD6, 0x56, 0xBD, 0xD5, 0x8C, 0x2F, 0x4A, 0x27, 0x29, 0x65, 0x29, 0x65, 0x21, 0x45, 0x31, 0xA6, 0x42, 0x08, 0x94, 0x51, 0x9C, 0x92, 0x4A, 0x08, 0x5A, 0x8A, 0x62, 0xAA, 0x83, 0xAE, 0xA4, 0x91, 0x7B, 0x6D, 0x52, 0x28, 0x52, 0x27, 0x6A, 0xA9, 0x5A, 0x69, 0x52, 0x28, 0x31, 0x86, 0x31, 0x66, 0x39, 0xC7, 0x6B, 0x2C, 0x8C, 0x30, 0x9C, 0xD2, 0xAD, 0x34, 0xCE, 0x36, 0xDE, 0x97, 0xCE, 0x36, 0x9C, 0xB0, 0xAD, 0x32, 0xD6, 0x56, 0xCE, 0x15, 0xCE, 0x35, 0xCE, 0x15, 0xCE, 0x14, 0xDE, 0x96, 0xDE, 0x76, 0xCE, 0x15, 0xCD, 0xF5, 0xC5, 0xB4, 0x8B, 0xEE, 0x5A, 0xAA, 0x29, 0x65, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x10, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x10, 0x83, 0x10, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x21, 0x04, 0x83, 0xCE, 0xD6, 0x15, 0xD5, 0xF4, 0xC5, 0x72, 0xBD, 0x72, 0x9C, 0x8F, 0x73, 0x4C, 0x41, 0xE7, 0x29, 0x45, 0x21, 0x05, 0x19, 0x04, 0x19, 0x04, 0x19, 0x05, 0x19, 0x04, 0x18, 0xE4, 0x18, 0xE4, 0x21, 0x25, 0x21, 0x25, 0x21, 0x25, 0x21, 0x25, 0x21, 0x25, 0x29, 0x46, 0x39, 0xC7, 0x6B, 0x2C, 0x9C, 0x90, 0xA4, 0xD1, 0x9C, 0xB0, 0x94, 0x4F, 0x9C, 0x90, 0x9C, 0x90, 0x9C, 0xB0, 0xA4, 0xD0, 0xA4, 0xD0, 0xA4, 0xF1, 0xB5, 0x52, 0xAD, 0x12, 0xAD, 0x32, 0xB5, 0x52, 0x95, 0x32, 0x63, 0xCA, 0x8C, 0xEF, 0xAD, 0x72, 0xAD, 0x52, 0xA5, 0x31, 0xA5, 0x6F, 0x8C, 0xCA, 0x7C, 0x68, 0xAD, 0xAD, 0xB5, 0xB1, 0xAD, 0x31, 0x52, 0xA8, 0x31, 0x85, 0x42, 0x28, 0x5A, 0xCA, 0x4A, 0x28, 0x5A, 0xEB, 0x84, 0x10, 0xAD, 0x75, 0xA5, 0x34, 0xBE, 0x18, 0xEF, 0x7D, 0xDE, 0xB9, 0xB5, 0x94, 0xC5, 0xF5, 0xBD, 0xF6, 0xC5, 0xF6, 0xBD, 0xD5, 0x9C, 0xB1, 0x94, 0x70, 0xBD, 0xB5, 0xB5, 0xB5, 0xB5, 0xB4, 0xB5, 0x94, 0xB5, 0x73, 0xB5, 0x74, 0xB5, 0x94, 0xAD, 0x32, 0xBD, 0x94, 0xBD, 0xB4, 0xBD, 0x94, 0xBD, 0x94, 0xBD, 0xB3, 0xC5, 0xB3, 0xAC, 0xCE, 0xAC, 0xF0, 0xB5, 0x53, 0xAD, 0x12, 0xAD, 0x32, 0xB5, 0x94, 0xAD, 0x53, 0xB5, 0x94, 0xBD, 0xD5, 0xB5, 0x94, 0xC5, 0xD5, 0xB5, 0x94, 0xB5, 0x94, 0xB5, 0x73, 0xAD, 0x32, 0x9C, 0xD0, 0xAD, 0x52, 0xBD, 0xB4, 0xB5, 0x73, 0xA4, 0xF1, 0x9C, 0xB0, 0xA4, 0xD0, 0x83, 0xED, 0x62, 0xEB, 0x9C, 0xD3, 0xB5, 0x96, 0x83, 0xEF, 0x9C, 0xD3, 0xBD, 0xB7, 0xAD, 0x34, 0x94, 0x92, 0x73, 0x8E, 0x7B, 0xCF, 0xA5, 0x14, 0xC5, 0xF7, 0x94, 0x72, 0x5A, 0xAA, 0x7B, 0xAE, 0xB5, 0x55, 0xD6, 0x38, 0xDE, 0x79, 0xAC, 0xF3, 0x94, 0x50, 0x6B, 0x0B, 0x6B, 0x0C, 0x73, 0x4D, 0xA4, 0x91, 0xD5, 0xF5, 0xD6, 0x15, 0xE6, 0x97, 0xD5, 0xF4, 0xD6, 0x14, 0xDE, 0x34, 0xCD, 0xB2, 0xAC, 0xCF, 0x9C, 0xB0, 0xA5, 0x12, 0x9C, 0xF1, 0xAD, 0x52, 0x9C, 0xD0, 0xAD, 0x53, 0xA5, 0x32, 0xAD, 0x53, 0xB5, 0x73, 0xB5, 0x73, 0xA4, 0xAF, 0xAC, 0xCF, 0xBD, 0x31, 0x9C, 0x8E, 0x9C, 0x8F, 0xB5, 0x72, 0xB5, 0x72, 0xB5, 0x52, 0x9C, 0x8F, 0xA4, 0xF1, 0x8C, 0x2E, 0x94, 0x4F, 0x94, 0x6F, 0x8C, 0x0E, 0x7B, 0xAC, 0x7B, 0x8C, 0x73, 0x4B, 0x83, 0xED, 0x83, 0xEE, 0x4A, 0x27, 0x31, 0x85, 0x31, 0x65, 0x39, 0xA6, 0x41, 0xE7, 0x4A, 0x48, 0x4A, 0x68, 0x5A, 0xAA, 0x63, 0x0C, 0x73, 0x6D, 0x73, 0xAE, 0x7B, 0xEF, 0x7B, 0xCF, 0x84, 0x10, 0xA5, 0x14, 0xCE, 0x59, 0xC5, 0xF7, 0xA4, 0xB0, 0xA4, 0xCF, 0xA4, 0xCF, 0xAC, 0xCF, 0xA4, 0xCF, 0xA4, 0xAF, 0xA4, 0xAF, 0xAC, 0xF1, 0xA4, 0xB0, 0xAC, 0xF0, 0xAD, 0x11, 0xAC, 0xF1, 0xAC, 0xF0, 0xAC, 0xF0, 0xAC, 0xD0, 0xAC, 0xF0, 0xB5, 0x11, 0xBD, 0x31, 0xC5, 0x92, 0xC5, 0xB3, 0xC5, 0x92, 0xC5, 0x92, 0xC5, 0x93, 0xCD, 0xD4, 0xCD, 0xF4, 0xD6, 0x14, 0xDE, 0x55, 0xD6, 0x14, 0xC5, 0x92, 0xC5, 0x93, 0xAC, 0xF1, 0xA4, 0xD1, 0x83, 0xED, 0x94, 0x90, 0xB5, 0x73, 0xB5, 0x94, 0xB5, 0x94, 0xB5, 0x94, 0xCE, 0x36, 0xD6, 0x77, 0xD6, 0x77, 0xBD, 0xD4, 0xB5, 0x73, 0xB5, 0x73, 0x9C, 0xF1, 0xA5, 0x12, 0xAD, 0x32, 0xCE, 0x56, 0xD6, 0x76, 0xCE, 0x56, 0xAD, 0x52, 0xAD, 0x11, 0xBD, 0x93, 0xAD, 0x52, 0xAD, 0x32, 0xA4, 0xF1, 0xC5, 0xD4, 0xBD, 0xB4, 0xAD, 0x32, 0xBD, 0x73, 0xBD, 0x73, 0xC5, 0xB4, 0x94, 0x6F, 0x83, 0xED, 0xBD, 0x93, 0xB5, 0x53, 0xBD, 0xB3, 0xBD, 0xB4, 0xC5, 0xF4, 0xCE, 0x15, 0xCE, 0x15, 0xCE, 0x35, 0xCE, 0x35, 0xD6, 0x76, 0xDE, 0x97, 0xCE, 0x15, 0x94, 0x6F, 0x4A, 0x27, 0x31, 0x85, 0x29, 0x65, 0x31, 0x85, 0x4A, 0x49, 0x83, 0xCF, 0x62, 0xEB, 0x52, 0x69, 0x4A, 0x28, 0x4A, 0x28, 0x5A, 0x69, 0x62, 0x8A, 0x4A, 0x07, 0x52, 0x28, 0x52, 0x07, 0x62, 0x89, 0x83, 0x8D, 0x62, 0x8A, 0x4A, 0x08, 0x4A, 0x29, 0x52, 0x69, 0x83, 0xCF, 0xCE, 0x57, 0xDE, 0xD8, 0xDE, 0x97, 0xE6, 0xD8, 0xBD, 0x73, 0xA4, 0xD1, 0xB5, 0x32, 0xE6, 0xF8, 0xE6, 0xD7, 0xDE, 0x97, 0xE6, 0xB7, 0xDE, 0x75, 0xDE, 0x75, 0xDE, 0x75, 0xDE, 0x96, 0xDE, 0x76, 0xDE, 0x55, 0xD6, 0x15, 0xBD, 0x73, 0x83, 0xCD, 0x39, 0xA6, 0x31, 0x65, 0x18, 0xE4, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x08, 0x83, 0x08, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0x83, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC3, 0xA4, 0xD2, 0xE6, 0x76, 0xDE, 0x34, 0xD5, 0xF4, 0xD6, 0x14, 0xBD, 0x72, 0x8C, 0x2E, 0x62, 0xEA, 0x31, 0x86, 0x29, 0x45, 0x21, 0x25, 0x21, 0x25, 0x21, 0x25, 0x19, 0x05, 0x18, 0xE4, 0x19, 0x04, 0x21, 0x25, 0x19, 0x05, 0x19, 0x05, 0x19, 0x05, 0x21, 0x05, 0x21, 0x46, 0x39, 0xE8, 0x7B, 0x8D, 0x8C, 0x0E, 0x8C, 0x0E, 0x9C, 0x6F, 0x94, 0x4F, 0x94, 0x6F, 0x9C, 0x8F, 0x9C, 0xB0, 0x94, 0x4E, 0x83, 0xED, 0x9C, 0x90, 0xAD, 0x12, 0xAD, 0x11, 0xAC, 0xF1, 0xA4, 0xD1, 0x64, 0x0A, 0x64, 0x09, 0x95, 0x50, 0xBE, 0x55, 0x8C, 0x8E, 0x84, 0x4B, 0x74, 0x46, 0x6C, 0x65, 0x74, 0x65, 0xA5, 0x8B, 0xA5, 0x0D, 0xA4, 0xEE, 0xA5, 0x10, 0x73, 0x6B, 0x41, 0xE6, 0x42, 0x28, 0x4A, 0x28, 0x5A, 0xCA, 0x63, 0x2C, 0x7C, 0x10, 0x8C, 0x51, 0xAD, 0x55, 0xD6, 0xBA, 0xEF, 0x5C, 0xCE, 0x58, 0x9C, 0xD1, 0xA4, 0xD1, 0xA4, 0xF1, 0xAD, 0x33, 0xA5, 0x12, 0xA4, 0xF1, 0xA5, 0x12, 0xA5, 0x12, 0xAD, 0x33, 0xAD, 0x53, 0xAD, 0x53, 0xAD, 0x33, 0xAD, 0x53, 0xAD, 0x73, 0xB5, 0x74, 0xBD, 0xB4, 0xBD, 0xB4, 0xB5, 0x73, 0xB5, 0x92, 0xC5, 0xD3, 0xAC, 0xCF, 0x94, 0x2D, 0x9C, 0xD0, 0xAD, 0x52, 0xAD, 0x53, 0xAD, 0x53, 0xA5, 0x12, 0xA5, 0x12, 0xB5, 0x53, 0xAD, 0x53, 0xBD, 0xB5, 0xAD, 0x53, 0xB5, 0x53, 0xAD, 0x52, 0xAD, 0x32, 0xA4, 0xF1, 0xAD, 0x52, 0xBD, 0xB4, 0xB5, 0x73, 0xA4, 0xF1, 0x9C, 0xB0, 0xA4, 0xD0, 0x94, 0x6F, 0x39, 0xA6, 0x5A, 0xCB, 0x83, 0xEF, 0x73, 0x8E, 0x62, 0xEC, 0x7B, 0xEF, 0x6B, 0x6D, 0x52, 0x8A, 0x21, 0x04, 0x42, 0x08, 0xA5, 0x34, 0xCE, 0x59, 0xD6, 0x9A, 0xA5, 0x14, 0x62, 0xCB, 0x9C, 0x71, 0xAD, 0x14, 0xB5, 0x14, 0x7B, 0x4D, 0x94, 0x0F, 0xAC, 0xB2, 0x6B, 0x0C, 0x62, 0xCB, 0xA4, 0xB2, 0xEE, 0xFB, 0xF7, 0x3B, 0xDE, 0x57, 0xBD, 0x74, 0xB5, 0x32, 0xB5, 0x12, 0xB4, 0xF1, 0xA4, 0xAF, 0xAD, 0x53, 0xBE, 0x16, 0xB5, 0x94, 0xB5, 0xB4, 0xAD, 0x94, 0xBD, 0xF6, 0xB5, 0xB5, 0xB5, 0xD5, 0xB5, 0xB4, 0xB5, 0x93, 0xAC, 0xF0, 0xAC, 0xCF, 0xAD, 0x10, 0x9C, 0x8E, 0xB5, 0x52, 0xBD, 0x93, 0xBD, 0xB3, 0xBD, 0xB3, 0xBD, 0xB3, 0xB5, 0x73, 0xA4, 0xD1, 0xA5, 0x12, 0xAD, 0x12, 0xB5, 0x74, 0xB5, 0x74, 0xAD, 0x12, 0xA4, 0xD1, 0xAD, 0x32, 0xC5, 0xD4, 0xA4, 0xD0, 0x52, 0x47, 0x31, 0xA5, 0x29, 0x64, 0x31, 0x85, 0x42, 0x07, 0x4A, 0x28, 0x5A, 0xCA, 0x6B, 0x4C, 0x6B, 0x2C, 0x6B, 0x4C, 0x6B, 0x4C, 0x73, 0xAE, 0x7B, 0xEF, 0xAD, 0x55, 0xBD, 0xD7, 0xD6, 0x79, 0xBD, 0xB6, 0xB5, 0x73, 0xAD, 0x32, 0xAD, 0x32, 0xA4, 0xF0, 0xA4, 0xB0, 0xA4, 0xB0, 0x9C, 0xAF, 0x7B, 0xAC, 0x9C, 0x8F, 0x9C, 0xB0, 0xA4, 0xD1, 0xAD, 0x11, 0xAC, 0xD1, 0xA4, 0xD0, 0x9C, 0x90, 0xA4, 0xD0, 0xA4, 0xD0, 0xAC, 0xD1, 0xAC, 0xF1, 0xAD, 0x11, 0xB5, 0x11, 0xB5, 0x11, 0xAD, 0x11, 0xAC, 0xF0, 0xAC, 0xF1, 0xAC, 0xF0, 0xAC, 0xF1, 0xBD, 0x72, 0xBD, 0x72, 0xBD, 0x73, 0xBD, 0x94, 0xBD, 0x94, 0xB5, 0x73, 0xAD, 0x32, 0xAD, 0x12, 0xA4, 0xF1, 0x94, 0x6F, 0x94, 0x6F, 0x9C, 0xB0, 0x9C, 0xB0, 0x9C, 0x90, 0x94, 0x4F, 0x8C, 0x2E, 0x94, 0x4F, 0x9C, 0xB0, 0xAD, 0x32, 0xB5, 0x73, 0xC5, 0xF5, 0xCE, 0x35, 0xB5, 0x52, 0xAD, 0x32, 0xBD, 0x93, 0xAD, 0x52, 0xAD, 0x32, 0xA4, 0xD0, 0xCE, 0x15, 0xD6, 0x56, 0xCD, 0xD4, 0xCD, 0xD4, 0xD5, 0xF5, 0xDE, 0x76, 0xBD, 0x93, 0xB5, 0x53, 0xCE, 0x36, 0xCE, 0x36, 0xCE, 0x15, 0xCE, 0x15, 0xD6, 0x56, 0xD6, 0x55, 0xDE, 0x76, 0xD6, 0x56, 0xD6, 0x55, 0xD6, 0x35, 0xDE, 0x55, 0xDE, 0x55, 0xD6, 0x15, 0xBD, 0x73, 0x8C, 0x0E, 0x4A, 0x27, 0x31, 0x85, 0x29, 0x45, 0x31, 0xA6, 0x7B, 0xAE, 0x94, 0x91, 0x62, 0xEB, 0x41, 0xC7, 0x5A, 0x69, 0x5A, 0x8A, 0x4A, 0x08, 0x6A, 0xEB, 0x6A, 0xCB, 0x5A, 0x69, 0x7B, 0x4C, 0x83, 0x6D, 0x83, 0xAE, 0x5A, 0xAA, 0x5A, 0x8A, 0x73, 0x4C, 0xA4, 0xD2, 0xC6, 0x15, 0xE6, 0xB7, 0xEE, 0xF8, 0xAC, 0xD1, 0xAD, 0x12, 0xB5, 0x32, 0xD6, 0x76, 0xD6, 0x55, 0xDE, 0x76, 0xE6, 0xB6, 0xDE, 0x55, 0xE6, 0x95, 0xE6, 0x95, 0xDE, 0x75, 0xE6, 0x75, 0xE6, 0x96, 0xE6, 0xD7, 0xDE, 0x35, 0xC5, 0x94, 0xA4, 0xB1, 0xAD, 0x12, 0x4A, 0x28, 0x10, 0xC3, 0x10, 0x83, 0x08, 0x83, 0x10, 0x82, 0x10, 0x83, 0x08, 0x83, 0x08, 0x83, 0x08, 0x82, 0x08, 0x82, 0x10, 0xA3, 0x10, 0x83, 0x10, 0xA3, 0x18, 0xE4, 0x21, 0x04, 0xBD, 0x94, 0xE6, 0xB7, 0xDE, 0x34, 0xD5, 0xF3, 0xC5, 0xB2, 0xBD, 0x52, 0xA4, 0xD0, 0x83, 0xAC, 0x41, 0xE7, 0x39, 0xC6, 0x29, 0x66, 0x21, 0x46, 0x21, 0x25, 0x19, 0x04, 0x18, 0xE4, 0x21, 0x05, 0x21, 0x05, 0x19, 0x05, 0x19, 0x04, 0x19, 0x04, 0x21, 0x05, 0x29, 0x66, 0x4A, 0x49, 0x8C, 0x50, 0x94, 0x6F, 0x8B, 0xED, 0xB5, 0x32, 0xB5, 0x32, 0xB5, 0x32, 0xA4, 0xD0, 0x94, 0x6F, 0x8C, 0x0E, 0x8C, 0x2E, 0xA4, 0xF1, 0xB5, 0x53, 0xAD, 0x12, 0xB5, 0x52, 0xBD, 0x73, 0x64, 0x29, 0x64, 0x49, 0x8D, 0x4E, 0xBE, 0x75, 0x94, 0xCF, 0x74, 0x09, 0x74, 0x86, 0x6C, 0x64, 0x6C, 0x64, 0x8D, 0x09, 0x8C, 0x8B, 0x9C, 0xAD, 0xAD, 0x50, 0xB5, 0x50, 0x8C, 0x0C, 0x4A, 0x67, 0x39, 0xC6, 0x4A, 0x48, 0x52, 0xCA, 0x63, 0x0C, 0x8C, 0x92, 0xA5, 0x35, 0xBD, 0xF8, 0xBD, 0xD7, 0xDE, 0xFB, 0x9C, 0xD2, 0xA4, 0xF2, 0x94, 0x2E, 0x9C, 0x6E, 0x9C, 0x6E, 0x9C, 0x6E, 0x94, 0x4E, 0x8C, 0x0C, 0x94, 0x2D, 0x9C, 0x6E, 0x94, 0x2D, 0x83, 0xEC, 0x83, 0xCC, 0x7B, 0xAC, 0x84, 0x0D, 0x94, 0x8F, 0x9C, 0x8F, 0xA4, 0xD0, 0xAD, 0x10, 0xB5, 0x10, 0xA4, 0x8E, 0xAC, 0xAF, 0x94, 0x2D, 0x83, 0xCC, 0x8C, 0x2E, 0xA4, 0xD1, 0xA5, 0x12, 0xBD, 0xD5, 0xAD, 0x73, 0xAD, 0x32, 0xB5, 0x73, 0xA4, 0xF1, 0xA4, 0xF1, 0x9C, 0xD1, 0xA4, 0xF1, 0xA5, 0x12, 0xB5, 0x74, 0xBD, 0x94, 0xB5, 0x53, 0xA4, 0xF1, 0xA4, 0xF1, 0x9C, 0xD0, 0xA5, 0x11, 0x5A, 0xC9, 0x6B, 0x2B, 0x73, 0x8D, 0x6B, 0x0B, 0x6B, 0x4B, 0x6B, 0x4C, 0x52, 0x48, 0x31, 0x65, 0x6B, 0x6D, 0x63, 0x0B, 0x8C, 0x30, 0xBD, 0xB6, 0xD6, 0x79, 0xBD, 0x96, 0xB5, 0x54, 0xC5, 0xB6, 0x9C, 0x91, 0x7B, 0x4D, 0x9C, 0x51, 0xCD, 0xD6, 0x9C, 0x51, 0x8B, 0xCF, 0xA4, 0xB2, 0x9C, 0x51, 0x94, 0x51, 0x94, 0x71, 0x8C, 0x31, 0xAD, 0x34, 0xCE, 0x38, 0xDE, 0xBA, 0xDE, 0xB9, 0xC5, 0xF6, 0xBD, 0xB5, 0xA5, 0x33, 0xB5, 0x94, 0xBD, 0xF5, 0xBD, 0xF6, 0xBD, 0xD5, 0xAD, 0x94, 0xBD, 0xF6, 0xBD, 0xF5, 0xB5, 0x73, 0xB5, 0x52, 0xAC, 0xEF, 0xB5, 0x51, 0x9C, 0x8F, 0xBD, 0xB3, 0xCE, 0x35, 0xB5, 0x93, 0xA4, 0xF0, 0xBD, 0xD4, 0xBD, 0x93, 0xAD, 0x32, 0xB5, 0x53, 0xAD, 0x12, 0xB5, 0x94, 0xAD, 0x12, 0xA4, 0xF2, 0xAD, 0x32, 0xB5, 0x52, 0xC5, 0xB3, 0xCD, 0xF4, 0x8C, 0x0E, 0x42, 0x06, 0x29, 0x64, 0x29, 0x43, 0x31, 0x85, 0x42, 0x07, 0x4A, 0x48, 0x52, 0x89, 0x6B, 0x4C, 0x73, 0x8D, 0x6B, 0x4D, 0x73, 0xAE, 0x7B, 0xEF, 0x94, 0xB3, 0xA5, 0x14, 0xAD, 0x75, 0xCE, 0x58, 0xD6, 0x78, 0xCE, 0x57, 0xBD, 0xB4, 0xAD, 0x11, 0xA5, 0x11, 0x94, 0x8F, 0x7B, 0xCC, 0x73, 0x6B, 0x8C, 0x4F, 0x94, 0x6F, 0xA4, 0xD1, 0xB5, 0x53, 0x94, 0x4F, 0xA5, 0x11, 0xB5, 0x32, 0xB5, 0x52, 0xA4, 0xD0, 0xA4, 0xF1, 0xAD, 0x11, 0x9C, 0xAF, 0xA4, 0xB0, 0xB5, 0x52, 0xBD, 0xB3, 0xB5, 0x32, 0xA4, 0xD0, 0xA4, 0xD0, 0xA4, 0xF0, 0x94, 0x6E, 0x9C, 0x6F, 0xB5, 0x52, 0xA4, 0xD0, 0x9C, 0x6F, 0x9C, 0x8F, 0xA4, 0xD0, 0xA4, 0xB0, 0xAD, 0x11, 0x94, 0x6F, 0xAC, 0xF1, 0xB5, 0x32, 0xB5, 0x32, 0xB5, 0x52, 0xAC, 0xF1, 0xAC, 0xF1, 0xA4, 0xF1, 0xA4, 0xD0, 0xA4, 0xF1, 0xAD, 0x31, 0xAD, 0x32, 0xAD, 0x11, 0xA4, 0xD0, 0xA4, 0xF1, 0xA4, 0xF1, 0xAD, 0x31, 0xBD, 0x73, 0xB5, 0x32, 0xAD, 0x32, 0xB5, 0x32, 0xAC, 0xF0, 0xAC, 0xD0, 0xA4, 0xB0, 0xB5, 0x32, 0xBD, 0x72, 0xAD, 0x11, 0xAD, 0x11, 0xB5, 0x52, 0xBD, 0x93, 0xC5, 0xB4, 0xCE, 0x15, 0xC5, 0xB3, 0xCD, 0xF4, 0xDE, 0x56, 0xDE, 0x55, 0xD6, 0x35, 0xDE, 0x55, 0xD6, 0x15, 0xD5, 0xF4, 0xC5, 0xB3, 0xC5, 0xB3, 0xB5, 0x52, 0x6B, 0x0A, 0x31, 0x65, 0x29, 0x45, 0x31, 0x85, 0x52, 0x8A, 0x94, 0x71, 0x94, 0x71, 0x73, 0x2D, 0x52, 0x69, 0x52, 0x29, 0x52, 0x28, 0x73, 0x2C, 0x73, 0x0C, 0x5A, 0x48, 0x73, 0x0B, 0x73, 0x0C, 0x94, 0x10, 0x73, 0x4C, 0x6B, 0x0B, 0xA4, 0xB2, 0xBD, 0x95, 0xA4, 0xD1, 0xDE, 0x98, 0xBD, 0x73, 0xB5, 0x32, 0xBD, 0x73, 0xD6, 0x56, 0xDE, 0x75, 0xDE, 0x96, 0xE6, 0x96, 0xDE, 0x54, 0xE6, 0x75, 0xEE, 0xB6, 0xE6, 0x95, 0xE6, 0x75, 0xE6, 0x95, 0xE6, 0x95, 0xD6, 0x14, 0xDE, 0x35, 0xDE, 0x76, 0xE6, 0x97, 0x8B, 0xED, 0x4A, 0x28, 0x20, 0xE4, 0x10, 0x83, 0x08, 0x63, 0x10, 0x83, 0x10, 0x83, 0x08, 0x82, 0x08, 0x82, 0x08, 0x82, 0x10, 0x83, 0x10, 0xA3, 0x18, 0xC3, 0x18, 0xE4, 0x39, 0xA6, 0xD6, 0x56, 0xD6, 0x14, 0xD6, 0x13, 0xD6, 0x14, 0xDE, 0x75, 0xD6, 0x34, 0xC5, 0x93, 0x9C, 0x4E, 0x73, 0x4B, 0x62, 0xEA, 0x42, 0x07, 0x31, 0x86, 0x29, 0x46, 0x29, 0x25, 0x21, 0x05, 0x21, 0x05, 0x21, 0x04, 0x19, 0x04, 0x18, 0xE4, 0x18, 0xE4, 0x21, 0x25, 0x31, 0xA7, 0x73, 0x8D, 0xA4, 0xF1, 0x83, 0xCC, 0x6B, 0x0A, 0xAD, 0x12, 0xAD, 0x32, 0xAD, 0x32, 0xBD, 0x93, 0xB5, 0x73, 0xB5, 0x73, 0xAD, 0x32, 0xA4, 0xD1, 0xAD, 0x12, 0xBD, 0x73, 0xCE, 0x15, 0xDE, 0x76, 0x64, 0x08, 0x64, 0x48, 0x74, 0xCB, 0x7C, 0x8C, 0x84, 0xCE, 0x8C, 0xCC, 0x74, 0x88, 0x6C, 0x65, 0x95, 0xCD, 0x74, 0x49, 0x7C, 0x4B, 0x8C, 0x6D, 0x83, 0xEB, 0x73, 0x6A, 0x8C, 0x0C, 0x9C, 0xAE, 0x52, 0x67, 0x39, 0xC6, 0x4A, 0x48, 0x5A, 0xCA, 0x6B, 0x8D, 0x8C, 0x51, 0xA5, 0x15, 0xC6, 0x19, 0xB5, 0x76, 0x8C, 0x51, 0xEF, 0x5C, 0xB5, 0x53, 0xAC, 0xF0, 0xAC, 0xF0, 0xAC, 0xF0, 0xAC, 0xEF, 0xB4, 0xEF, 0xB5, 0x10, 0xB5, 0x10, 0xB5, 0x10, 0xB5, 0x10, 0xB5, 0x10, 0xB5, 0x30, 0xAC, 0xCF, 0xAC, 0xAF, 0xAC, 0xAF, 0x9C, 0x4D, 0x9C, 0x6D, 0xA4, 0x6E, 0xAC, 0xEF, 0xB4, 0xEF, 0xB4, 0xCF, 0xB4, 0xEF, 0xB4, 0xF0, 0xA4, 0x8E, 0x94, 0x4E, 0x94, 0x4E, 0x8C, 0x2D, 0x8C, 0x0D, 0x8C, 0x0D, 0x83, 0xCD, 0x8C, 0x0D, 0x8C, 0x0D, 0x8C, 0x2E, 0x94, 0x4E, 0xAD, 0x11, 0xA4, 0xF1, 0x9C, 0x8F, 0x8C, 0x2E, 0x94, 0x4E, 0x9C, 0xB0, 0xAD, 0x11, 0x8C, 0x2E, 0x73, 0x8C, 0xCD, 0xF5, 0xBD, 0x92, 0xC5, 0xD4, 0xD6, 0x35, 0xAC, 0xF0, 0x94, 0x2E, 0x5A, 0xAA, 0x8C, 0x51, 0xA5, 0x14, 0xB5, 0x96, 0xCE, 0x59, 0xDE, 0x9A, 0xAD, 0x14, 0xBD, 0x96, 0xB5, 0x54, 0xA4, 0xB2, 0xBD, 0x96, 0xC5, 0xB6, 0xCD, 0xF8, 0xC5, 0x96, 0x8B, 0xCF, 0x83, 0xAE, 0x9C, 0x92, 0x7B, 0xAE, 0xB5, 0x76, 0xBD, 0xB6, 0xC5, 0xF7, 0xAD, 0x75, 0xB5, 0xB6, 0xE6, 0xFC, 0xE7, 0x3C, 0x9C, 0xF3, 0x94, 0x91, 0x9C, 0xD1, 0x9D, 0x12, 0xAD, 0x74, 0xB5, 0xB5, 0xC6, 0x57, 0xCE, 0x77, 0xCE, 0x56, 0xB5, 0x52, 0xAC, 0xF0, 0xB5, 0x52, 0x9C, 0xAF, 0xAD, 0x11, 0xB5, 0x52, 0xBD, 0x93, 0x94, 0x6F, 0xC5, 0xD4, 0xCE, 0x15, 0xBD, 0xB4, 0xBD, 0xD5, 0xAD, 0x53, 0xAD, 0x32, 0xA4, 0xD1, 0xAD, 0x32, 0xAD, 0x52, 0xAD, 0x11, 0xB5, 0x52, 0xCE, 0x14, 0xAC, 0xF0, 0x7B, 0xAC, 0x39, 0xC5, 0x31, 0x84, 0x39, 0xA6, 0x4A, 0x27, 0x5A, 0xCA, 0x62, 0xEB, 0x6B, 0x4C, 0x6B, 0x4D, 0x63, 0x0C, 0x63, 0x0C, 0x6B, 0x4D, 0x73, 0x6E, 0x94, 0xB3, 0xAD, 0x76, 0xC6, 0x38, 0xBD, 0xD6, 0xA5, 0x13, 0xA5, 0x33, 0x94, 0x90, 0xB5, 0x73, 0xB5, 0x93, 0x84, 0x2E, 0x84, 0x2F, 0x9C, 0xD1, 0xA4, 0xF1, 0xA4, 0xD1, 0xB5, 0x73, 0x94, 0x6F, 0x9C, 0xB0, 0xAD, 0x11, 0xAD, 0x12, 0xA4, 0xD0, 0xBD, 0xB4, 0xAD, 0x52, 0x9C, 0xD0, 0x9C, 0xB0, 0xB5, 0x93, 0xCE, 0x35, 0xC6, 0x14, 0xC5, 0xF5, 0xB5, 0x73, 0xAD, 0x11, 0xAD, 0x11, 0xB5, 0x73, 0xBD, 0x93, 0xAD, 0x31, 0xAD, 0x31, 0xAC, 0xF1, 0xAD, 0x31, 0x9C, 0x8F, 0xA4, 0xF1, 0xBD, 0x94, 0xB5, 0x52, 0xB5, 0x52, 0x9C, 0xB0, 0xB5, 0x52, 0xDE, 0x76, 0xCD, 0xF4, 0xD6, 0x35, 0xD6, 0x55, 0xD6, 0x35, 0xB5, 0x52, 0x9C, 0x90, 0xA4, 0xD0, 0xA4, 0xD0, 0xBD, 0x93, 0xAD, 0x11, 0xB5, 0x73, 0xB5, 0x52, 0xAC, 0xF1, 0x94, 0x2E, 0x94, 0x2E, 0xA4, 0x8F, 0xB5, 0x11, 0xB5, 0x52, 0x9C, 0x6F, 0x9C, 0x6F, 0x94, 0x2E, 0x9C, 0x4F, 0x9C, 0x6F, 0xA4, 0xB0, 0xA4, 0xB0, 0xA4, 0x90, 0x9C, 0x6F, 0xA4, 0x8F, 0x9C, 0x6F, 0x9C, 0x6E, 0x9C, 0x4E, 0x9C, 0x2E, 0x9C, 0x6E, 0xA4, 0x8F, 0x9C, 0x4F, 0x94, 0x2E, 0x9C, 0x6F, 0xA4, 0xB0, 0x8C, 0x0E, 0x4A, 0x27, 0x29, 0x65, 0x29, 0x45, 0x52, 0x69, 0x8C, 0x50, 0x8C, 0x30, 0xA4, 0xF3, 0x94, 0x51, 0x73, 0x6D, 0x62, 0x8A, 0x5A, 0x69, 0x5A, 0x89, 0x5A, 0x69, 0x62, 0xAA, 0x73, 0x0B, 0x7B, 0x6D, 0x5A, 0x8A, 0x62, 0xCB, 0x9C, 0x71, 0xAC, 0xD2, 0x83, 0xAD, 0x94, 0x2F, 0x9C, 0x70, 0xBD, 0x93, 0xEF, 0x18, 0xEE, 0xF7, 0xEE, 0xF7, 0xEE, 0xD6, 0xE6, 0xB6, 0xE6, 0x95, 0xE6, 0x95, 0xEE, 0xB5, 0xE6, 0x95, 0xE6, 0x74, 0xDE, 0x54, 0xDE, 0x34, 0xEE, 0xB6, 0xF6, 0xF7, 0xEE, 0xD7, 0xBD, 0x72, 0x9C, 0x6F, 0x6B, 0x0B, 0x31, 0x65, 0x10, 0x83, 0x10, 0xA3, 0x10, 0x83, 0x08, 0x82, 0x08, 0x82, 0x08, 0x82, 0x10, 0x83, 0x10, 0x83, 0x18, 0xC4, 0x18, 0xE4, 0x73, 0x8C, 0xE6, 0xF8, 0xD6, 0x13, 0xDE, 0x54, 0xDE, 0x54, 0xDE, 0x54, 0xDE, 0x54, 0xCE, 0x14, 0xB5, 0x52, 0xA4, 0xD0, 0x83, 0xED, 0x62, 0xEA, 0x39, 0xE7, 0x39, 0xE7, 0x39, 0xC7, 0x29, 0x46, 0x21, 0x25, 0x21, 0x04, 0x21, 0x04, 0x18, 0xE4, 0x21, 0x05, 0x29, 0x66, 0x52, 0x6A, 0xBD, 0xB5, 0xCE, 0x35, 0x94, 0x6F, 0x62, 0xC9, 0xAD, 0x12, 0xCE, 0x15, 0xC5, 0xF5, 0xCE, 0x15, 0xCE, 0x15, 0xC5, 0xD4, 0xBD, 0x94, 0xBD, 0x94, 0xC5, 0xD5, 0xCE, 0x15, 0xD6, 0x35, 0xD6, 0x35, 0x53, 0xC6, 0x64, 0x67, 0x5B, 0xC7, 0x53, 0x66, 0x74, 0x8C, 0x7C, 0xAC, 0x74, 0x69, 0x5B, 0xE5, 0xA6, 0x30, 0x95, 0x6F, 0x94, 0xEE, 0xA5, 0x0F, 0xB5, 0x92, 0xAD, 0x51, 0xA4, 0xF0, 0xB5, 0x50, 0xAD, 0x10, 0x62, 0xE9, 0x42, 0x07, 0x3A, 0x07, 0x4A, 0x89, 0x6B, 0x6D, 0x8C, 0x71, 0xAD, 0x76, 0x84, 0x11, 0x94, 0x72, 0xBD, 0xD7, 0x84, 0x30, 0x52, 0x68, 0x83, 0xED, 0x9C, 0x8F, 0x8C, 0x0C, 0x94, 0x4D, 0x9C, 0x6E, 0xA4, 0xAE, 0xB5, 0x31, 0xAC, 0xF0, 0xB5, 0x10, 0xB5, 0x30, 0xAC, 0xCF, 0xB5, 0x10, 0xAC, 0xCF, 0x9C, 0x6E, 0xA4, 0x8E, 0xA4, 0xAE, 0xA4, 0xAF, 0xAC, 0xAE, 0xB4, 0xEF, 0xAC, 0xCF, 0xB5, 0x10, 0xB4, 0xEF, 0xAC, 0xAF, 0xA4, 0x8E, 0xAC, 0xD0, 0xAC, 0xD0, 0xA4, 0xAF, 0xAC, 0xCF, 0xAC, 0xCF, 0xAC, 0xCF, 0xAC, 0xF0, 0xAC, 0xCF, 0xA4, 0xCF, 0xA4, 0xAF, 0xA4, 0xAE, 0xA4, 0xAF, 0xAC, 0xEF, 0xAC, 0xCF, 0xAC, 0xF0, 0xB5, 0x51, 0x7B, 0xAC, 0xA4, 0xD0, 0xA4, 0x8E, 0xB5, 0x10, 0xBD, 0x31, 0xB4, 0xEF, 0xC5, 0x52, 0x73, 0x2B, 0x4A, 0x07, 0x62, 0xCB, 0x8C, 0x30, 0x94, 0x51, 0xAD, 0x55, 0xE7, 0x1C, 0xA4, 0xF4, 0x52, 0x4A, 0x73, 0x6E, 0x73, 0x6E, 0x73, 0x4E, 0x73, 0x4E, 0x94, 0x72, 0x83, 0xCF, 0x9C, 0x72, 0x8C, 0x10, 0xA4, 0xF4, 0xC5, 0xD7, 0xA5, 0x14, 0x73, 0x6D, 0x52, 0x6A, 0x73, 0xAF, 0xB5, 0xB7, 0xCE, 0x59, 0xCE, 0x59, 0xBD, 0xD7, 0x9C, 0xD2, 0xB5, 0x94, 0xC6, 0x37, 0xC6, 0x37, 0xC6, 0x16, 0xBE, 0x15, 0xC6, 0x15, 0xAD, 0x11, 0xB5, 0x31, 0xB5, 0x51, 0x94, 0x4D, 0xBD, 0x92, 0x9C, 0xAF, 0xAD, 0x31, 0xAD, 0x11, 0xBD, 0xB3, 0xD6, 0x56, 0xC5, 0xF4, 0xC5, 0xF4, 0xB5, 0x52, 0xA4, 0xF1, 0x94, 0x8F, 0xA5, 0x11, 0xAD, 0x32, 0xA4, 0xF1, 0xAD, 0x10, 0xD5, 0xF4, 0xB5, 0x31, 0xA4, 0x8F, 0x62, 0xC9, 0x39, 0xA5, 0x39, 0xC6, 0x4A, 0x48, 0x4A, 0x48, 0x4A, 0x48, 0x62, 0xEB, 0x5A, 0xEB, 0x52, 0x8A, 0x52, 0x8A, 0x5A, 0xEB, 0x7B, 0xCF, 0x94, 0x93, 0xA5, 0x14, 0xB5, 0xB6, 0xCE, 0x59, 0xA5, 0x34, 0xAD, 0x54, 0x94, 0x90, 0xB5, 0x93, 0xB5, 0x73, 0x94, 0xB0, 0xA5, 0x12, 0xB5, 0xB4, 0xAD, 0x33, 0xA4, 0xD1, 0xBD, 0x94, 0x9C, 0x90, 0xB5, 0x73, 0xBD, 0xB4, 0xBD, 0xD4, 0xAD, 0x11, 0xBD, 0xB4, 0xB5, 0x93, 0xAD, 0x52, 0xA5, 0x32, 0xA4, 0xF1, 0xC5, 0xF4, 0xC6, 0x15, 0xBD, 0xB3, 0xAD, 0x52, 0xAD, 0x32, 0xAD, 0x52, 0xB5, 0x93, 0xBD, 0xB4, 0xC6, 0x15, 0xBD, 0xD4, 0xBD, 0xD4, 0xC5, 0xF4, 0xA4, 0xD0, 0xB5, 0x52, 0xBD, 0x73, 0xB5, 0x31, 0xC5, 0xB3, 0xBD, 0x93, 0xC5, 0xB3, 0xCD, 0xD3, 0xC5, 0xB2, 0xCD, 0xB3, 0xCD, 0xF3, 0xD6, 0x35, 0xB5, 0x32, 0x9C, 0x6F, 0xA4, 0xF1, 0xAD, 0x52, 0xC5, 0xD5, 0xC5, 0xD5, 0xC5, 0xD4, 0xB5, 0x52, 0xB5, 0x32, 0x8C, 0x2E, 0xA4, 0xD1, 0xB5, 0x73, 0xC5, 0xD4, 0xBD, 0xB4, 0x94, 0x6F, 0xA4, 0xB0, 0xAD, 0x12, 0xAC, 0xF1, 0x9C, 0x8F, 0x9C, 0x4E, 0x9C, 0x8F, 0xA4, 0xB0, 0xA4, 0xB0, 0x9C, 0x6F, 0xA4, 0x8F, 0x9C, 0x8F, 0xA4, 0xB0, 0xA4, 0xD0, 0xA4, 0xD0, 0xAC, 0xF1, 0xAC, 0xD1, 0xA4, 0xD0, 0xAC, 0xF1, 0xB5, 0x53, 0xBD, 0x73, 0xAC, 0xF1, 0x73, 0x6C, 0x39, 0xA6, 0x29, 0x24, 0x39, 0x86, 0x5A, 0xAA, 0x8C, 0x30, 0xAD, 0x14, 0xBD, 0x96, 0xAD, 0x14, 0x8C, 0x10, 0x62, 0xEB, 0x4A, 0x08, 0x49, 0xE7, 0x62, 0xAA, 0x94, 0x0F, 0x8B, 0xEF, 0x62, 0xCA, 0x7B, 0x6D, 0x94, 0x0F, 0x8C, 0x0F, 0x5A, 0x8A, 0x5A, 0x8A, 0x83, 0xAD, 0xAD, 0x11, 0xAC, 0xF0, 0xAC, 0xF0, 0xAC, 0xF0, 0xAC, 0xF0, 0xB5, 0x30, 0xC5, 0x51, 0xC5, 0x71, 0xC5, 0x71, 0xC5, 0x92, 0xCD, 0xB2, 0xCD, 0xB3, 0xD5, 0xF3, 0xD6, 0x14, 0xD6, 0x14, 0xC5, 0xB3, 0xBD, 0x52, 0xAC, 0xF1, 0x7B, 0x6C, 0x20, 0xE4, 0x10, 0x82, 0x10, 0x83, 0x08, 0x82, 0x08, 0x82, 0x08, 0x82, 0x10, 0x83, 0x10, 0xA3, 0x18, 0xC4, 0x18, 0xE4, 0x9C, 0xD1, 0xDE, 0x96, 0xCD, 0xD3, 0xDE, 0x55, 0xDE, 0x54, 0xDE, 0x54, 0xDE, 0x75, 0xDE, 0x55, 0xC5, 0xD3, 0xC5, 0xD4, 0xA4, 0xF1, 0x94, 0x6F, 0x73, 0x6C, 0x6B, 0x4B, 0x4A, 0x69, 0x39, 0xC7, 0x29, 0x66, 0x29, 0x46, 0x21, 0x05, 0x21, 0x25, 0x29, 0x66, 0x52, 0x8A, 0xA4, 0xF2, 0xDE, 0xB8, 0xDE, 0xB7, 0xD6, 0x56, 0xB5, 0x73, 0xBD, 0x93, 0xD6, 0x76, 0xCE, 0x15, 0xD6, 0x56, 0xCE, 0x35, 0xC5, 0xD4, 0xC5, 0xF4, 0xD6, 0x56, 0xD6, 0x36, 0xD6, 0x56, 0xCE, 0x14, 0xCD, 0xF4, 0x4B, 0x65, 0x43, 0x23, 0x53, 0xA5, 0x64, 0x28, 0x7C, 0xCC, 0x84, 0xCD, 0x74, 0x6A, 0x5B, 0xC6, 0x85, 0x2C, 0x9D, 0xD0, 0x74, 0x0A, 0x94, 0xED, 0xAD, 0x70, 0xA5, 0x10, 0x8C, 0x4C, 0xA4, 0xCF, 0xB5, 0x92, 0xBD, 0xD3, 0x63, 0x2A, 0x39, 0xE7, 0x3A, 0x07, 0x4A, 0x69, 0x5B, 0x0B, 0x6B, 0x4D, 0x9C, 0xD3, 0xBD, 0xB7, 0xAD, 0x55, 0x63, 0x2C, 0x73, 0x6D, 0x7B, 0xCE, 0xBD, 0xB5, 0xB5, 0x73, 0xAD, 0x32, 0xA4, 0xF1, 0xB5, 0x53, 0xC5, 0xD4, 0xBD, 0x93, 0xDE, 0x76, 0xC5, 0xB3, 0xAC, 0xEF, 0xBD, 0xB3, 0xB5, 0x72, 0xB5, 0x52, 0xAD, 0x31, 0xAD, 0x31, 0xAC, 0xF0, 0xA4, 0xCF, 0xAC, 0xF0, 0xAC, 0xF0, 0xB5, 0x10, 0xAC, 0xCF, 0xA4, 0xCF, 0xAD, 0x10, 0xB5, 0x31, 0xAC, 0xF0, 0xA4, 0xAF, 0xA4, 0xAF, 0xB5, 0x10, 0xAD, 0x10, 0xAC, 0xF0, 0xAD, 0x10, 0xA4, 0xAF, 0xAC, 0xAF, 0xB5, 0x30, 0xB5, 0x30, 0xAC, 0xEF, 0xAC, 0xCF, 0xA4, 0x8E, 0xB5, 0x30, 0x73, 0x8B, 0xA4, 0xF0, 0xBD, 0x71, 0xBD, 0x30, 0xBD, 0x30, 0xC5, 0x71, 0xCD, 0xB2, 0xBD, 0x31, 0x73, 0x2B, 0x5A, 0x89, 0x52, 0x49, 0x7B, 0xAF, 0xCE, 0x59, 0xCE, 0x39, 0xDE, 0xBB, 0xCE, 0x39, 0x5A, 0xAB, 0x10, 0xA4, 0x18, 0xC4, 0x10, 0x83, 0x4A, 0x4A, 0x94, 0x51, 0x7B, 0x8E, 0x94, 0x51, 0xBD, 0xD7, 0x94, 0x72, 0x83, 0xCF, 0x8C, 0x51, 0xA4, 0xF3, 0xBD, 0xF8, 0xBD, 0xD7, 0xC5, 0xF8, 0xD6, 0x9A, 0xE7, 0x3D, 0xEF, 0x3C, 0xB5, 0x96, 0x94, 0x91, 0x94, 0xB0, 0x94, 0x8F, 0xA4, 0xF0, 0xB5, 0x52, 0xB5, 0x10, 0xAC, 0xEF, 0xB5, 0x31, 0xA4, 0xAF, 0xA4, 0xCF, 0x83, 0xAB, 0x9C, 0xAF, 0xA4, 0xCF, 0xB5, 0x51, 0xCE, 0x14, 0xC5, 0xF4, 0xCE, 0x15, 0xBD, 0xB3, 0xB5, 0x73, 0xAD, 0x11, 0xAD, 0x32, 0xB5, 0x52, 0xAD, 0x32, 0xBD, 0x72, 0xCE, 0x14, 0xB4, 0xF0, 0xA4, 0xB0, 0x8C, 0x0E, 0x4A, 0x27, 0x31, 0x64, 0x39, 0xC6, 0x52, 0x89, 0x5A, 0xCA, 0x63, 0x2C, 0x5A, 0xEB, 0x4A, 0x69, 0x5A, 0xEB, 0x6B, 0x4D, 0x7B, 0xF0, 0x8C, 0x31, 0x94, 0x93, 0xB5, 0x96, 0xD6, 0xBA, 0xC6, 0x38, 0xAD, 0x75, 0xAD, 0x53, 0xB5, 0xB4, 0xB5, 0xD4, 0xB5, 0xB4, 0xB5, 0xB4, 0xA5, 0x53, 0xAD, 0x32, 0x9C, 0xB0, 0xBD, 0xB4, 0xA4, 0xD1, 0xBD, 0x94, 0xBD, 0xD5, 0xC5, 0xF5, 0xA5, 0x12, 0xB5, 0x93, 0xBD, 0xD5, 0xBD, 0xB4, 0xBD, 0xD5, 0xA5, 0x12, 0xBD, 0xB4, 0xC5, 0xF5, 0xBD, 0xD4, 0xAD, 0x32, 0xB5, 0x73, 0xA5, 0x11, 0xA5, 0x11, 0xB5, 0x73, 0xB5, 0x73, 0xAD, 0x32, 0xAD, 0x32, 0xBD, 0xB3, 0x9C, 0x8F, 0xB5, 0x52, 0xC5, 0x93, 0xC5, 0xB3, 0xD6, 0x34, 0xC5, 0xD3, 0xD6, 0x14, 0xD6, 0x34, 0xDE, 0x34, 0xDE, 0x34, 0xE6, 0x95, 0xE6, 0x75, 0xC5, 0xB3, 0xA4, 0xB0, 0xAD, 0x12, 0xBD, 0x94, 0xB5, 0x93, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0x53, 0xBD, 0xB4, 0x9C, 0xB0, 0xB5, 0x53, 0xB5, 0x53, 0xBD, 0xB4, 0xCE, 0x15, 0x94, 0x4E, 0xAD, 0x11, 0xB5, 0x73, 0xAD, 0x11, 0xA4, 0xD0, 0xA4, 0xB0, 0x9C, 0x8F, 0xA4, 0xAF, 0xA4, 0xD0, 0x9C, 0x8F, 0xA4, 0xD0, 0xAD, 0x11, 0xB5, 0x32, 0xAC, 0xF1, 0xAC, 0xD1, 0xAD, 0x11, 0x9C, 0x8F, 0x9C, 0x8F, 0xA4, 0x8F, 0x8B, 0xED, 0x83, 0x8B, 0x94, 0x2E, 0x8C, 0x0D, 0x94, 0x4E, 0x52, 0x68, 0x29, 0x44, 0x39, 0x86, 0x41, 0xE7, 0x52, 0x49, 0x6A, 0xEC, 0x8C, 0x30, 0xB5, 0x55, 0xBD, 0xD7, 0x94, 0x92, 0x6B, 0x0C, 0x41, 0xC7, 0x73, 0x2C, 0x9C, 0x50, 0x9C, 0x91, 0x73, 0x2C, 0x73, 0x4D, 0x7B, 0x8D, 0x52, 0x69, 0x6B, 0x0C, 0x83, 0xEF, 0x94, 0x2F, 0xB5, 0x32, 0xB5, 0x32, 0xB5, 0x32, 0xB5, 0x32, 0xB5, 0x12, 0xB5, 0x12, 0xB5, 0x12, 0xAC, 0xF2, 0xAD, 0x12, 0xB5, 0x53, 0xB5, 0x12, 0xAC, 0xF1, 0xA4, 0xD1, 0xAC, 0xF1, 0xAD, 0x11, 0xAD, 0x11, 0xAD, 0x11, 0x94, 0x4F, 0x39, 0xA6, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0xC3, 0x18, 0xC3, 0x31, 0xA7, 0x94, 0x70, 0xA4, 0xD0, 0xAD, 0x11, 0xB5, 0x31, 0xBD, 0x92, 0xBD, 0x92, 0xBD, 0x72, 0xBD, 0x72, 0xAD, 0x11, 0xAD, 0x11, 0xAD, 0x11, 0xA4, 0xF1, 0x8C, 0x2E, 0x83, 0xED, 0x6B, 0x0B, 0x52, 0x89, 0x42, 0x08, 0x31, 0xA7, 0x31, 0x86, 0x39, 0xA7, 0x4A, 0x69, 0x7B, 0xCE, 0x9C, 0xD1, 0xBD, 0xD4, 0xB5, 0x52, 0xBD, 0xB4, 0x94, 0x4F, 0x83, 0xED, 0xDE, 0x97, 0xD6, 0x77, 0xD6, 0x56, 0xD6, 0x56, 0xD6, 0x57, 0xD6, 0x77, 0xD6, 0x77, 0xBD, 0xB4, 0xB5, 0x73, 0xBD, 0x93, 0xBD, 0x73, 0x32, 0xA3, 0x6C, 0x4A, 0x9D, 0xD2, 0x9D, 0xB2, 0x74, 0x4C, 0x7C, 0x8C, 0x7C, 0xAB, 0x7C, 0x8A, 0x6C, 0x49, 0x74, 0x6A, 0x8D, 0x0C, 0x84, 0xA9, 0x84, 0xCA, 0x8C, 0xAC, 0x8C, 0x6C, 0xA4, 0xCE, 0xC5, 0xD3, 0xC6, 0x15, 0xC5, 0xF5, 0x7B, 0xCE, 0x39, 0xE6, 0x39, 0xE6, 0x42, 0x48, 0x5A, 0xEB, 0x84, 0x31, 0x84, 0x10, 0x94, 0x92, 0x73, 0x6D, 0x7B, 0xAF, 0xBD, 0xD7, 0xD6, 0x79, 0xC6, 0x16, 0xBD, 0xD5, 0xBD, 0xD5, 0xCE, 0x57, 0xCE, 0x56, 0xAD, 0x31, 0xC5, 0xD3, 0xBD, 0x72, 0xB5, 0x30, 0xC5, 0xD4, 0xB5, 0xB4, 0xB5, 0xB4, 0xBD, 0xD4, 0xBD, 0xD4, 0xBD, 0xB4, 0xBD, 0xD4, 0xC5, 0xF4, 0xC5, 0xF4, 0xC5, 0xD3, 0xBD, 0xB3, 0xC5, 0xD4, 0xCE, 0x35, 0xD6, 0x55, 0xD6, 0x76, 0xD6, 0x76, 0xCE, 0x35, 0xCE, 0x14, 0xC5, 0xD4, 0xBD, 0x93, 0xC5, 0xD3, 0xBD, 0x92, 0xAC, 0xCF, 0xAC, 0xEF, 0xAC, 0xCF, 0x9C, 0x4D, 0x94, 0x4D, 0x94, 0x0C, 0x94, 0x2D, 0x5A, 0xC9, 0x73, 0xAC, 0x8C, 0x2D, 0x94, 0x4D, 0x8B, 0xEC, 0xA4, 0xAE, 0x9C, 0x6D, 0x9C, 0x4D, 0x94, 0x2F, 0x5A, 0xA9, 0x52, 0x69, 0x8C, 0x31, 0xAD, 0x55, 0x62, 0xEC, 0xB5, 0x97, 0xE6, 0xFC, 0xE7, 0x1C, 0x9C, 0xB3, 0x52, 0x8A, 0x31, 0x87, 0x52, 0xAB, 0x39, 0xC7, 0x4A, 0x29, 0x8C, 0x51, 0x94, 0x92, 0x62, 0xEC, 0x83, 0xEF, 0xA4, 0xF3, 0xAD, 0x75, 0xB5, 0xB7, 0xBD, 0xB7, 0xBD, 0xF8, 0xD6, 0x9B, 0xD6, 0x9A, 0xCE, 0x59, 0xCE, 0x59, 0xC5, 0xF7, 0xAD, 0x54, 0xA4, 0xD1, 0xA4, 0xAF, 0xA4, 0x8E, 0xAC, 0xEF, 0xB5, 0x0F, 0xAD, 0x10, 0xAC, 0xEF, 0xB4, 0xEF, 0xAC, 0xEF, 0xAC, 0xCF, 0xAC, 0xEF, 0xAC, 0xCF, 0xAC, 0xEF, 0xAD, 0x10, 0xB5, 0x31, 0xB5, 0x30, 0xB5, 0x51, 0xB5, 0x52, 0xCD, 0xD4, 0xAC, 0xF1, 0xC5, 0x93, 0xA4, 0xD0, 0xAC, 0xF0, 0x9C, 0x4E, 0xB5, 0x11, 0xAC, 0xD1, 0x6B, 0x0A, 0x42, 0x07, 0x42, 0x27, 0x4A, 0x68, 0x4A, 0x48, 0x52, 0x8A, 0x5A, 0xCB, 0x52, 0xAA, 0x5A, 0xEB, 0x73, 0x8E, 0x84, 0x11, 0x84, 0x11, 0x94, 0xB3, 0xB5, 0x96, 0xB5, 0x97, 0xC6, 0x39, 0xCE, 0x79, 0xB5, 0x94, 0xBD, 0xF5, 0xBD, 0xF5, 0xA5, 0x12, 0xA5, 0x32, 0xAD, 0x53, 0xB5, 0xB4, 0x9C, 0xB1, 0xBD, 0xB4, 0xA4, 0xF2, 0xB5, 0x73, 0xBD, 0xB4, 0xC6, 0x16, 0xB5, 0x94, 0xBD, 0xB4, 0xBD, 0xF5, 0xBD, 0xF5, 0xC6, 0x36, 0xB5, 0x73, 0xB5, 0x94, 0xBD, 0xD4, 0xC6, 0x16, 0xBD, 0xD5, 0xB5, 0xB4, 0xB5, 0xB4, 0xAD, 0x32, 0x9C, 0xD1, 0x9C, 0xD1, 0x9C, 0xD0, 0xBD, 0xB4, 0xAD, 0x31, 0x9C, 0x8F, 0xB5, 0x52, 0xC5, 0xB3, 0xCD, 0xD2, 0xD6, 0x13, 0xC5, 0x92, 0xCD, 0xF3, 0xDE, 0x34, 0xDE, 0x54, 0xDE, 0x54, 0xE6, 0xB5, 0xDE, 0x55, 0xD6, 0x14, 0xA4, 0xB0, 0xAD, 0x32, 0xBD, 0x94, 0xB5, 0x94, 0xB5, 0x94, 0xBD, 0x94, 0xBD, 0xB4, 0xBD, 0xB5, 0xAD, 0x53, 0xB5, 0x73, 0xBD, 0x94, 0xC5, 0xD4, 0xD6, 0x56, 0x94, 0x4E, 0xAD, 0x32, 0xBD, 0x93, 0xA4, 0xF1, 0xA4, 0x90, 0xA4, 0xD0, 0x9C, 0x8F, 0xA4, 0xAF, 0xA4, 0xD0, 0xA4, 0xD0, 0xAD, 0x11, 0xB5, 0x52, 0xBD, 0x73, 0xBD, 0x72, 0xBD, 0x72, 0xB5, 0x52, 0xB5, 0x31, 0xB5, 0x31, 0xB5, 0x31, 0x9C, 0x8F, 0x8B, 0xED, 0x8B, 0xCC, 0x94, 0x2D, 0xAC, 0xF0, 0xA4, 0xD0, 0x83, 0xED, 0x52, 0x67, 0x29, 0x65, 0x29, 0x45, 0x39, 0x85, 0x41, 0xC7, 0x4A, 0x69, 0x7B, 0xCF, 0x9C, 0xF3, 0x94, 0x71, 0x41, 0xE8, 0x5A, 0x8A, 0x73, 0x0B, 0x94, 0x30, 0x8B, 0xEF, 0x5A, 0xAA, 0x4A, 0x49, 0x52, 0x49, 0x4A, 0x28, 0x73, 0x6D, 0x94, 0x50, 0x8C, 0x0E, 0xB5, 0x32, 0xAC, 0xF1, 0xCD, 0xF5, 0xBD, 0x93, 0xB5, 0x12, 0xB5, 0x52, 0xBD, 0x73, 0xBD, 0x52, 0xBD, 0x94, 0xBD, 0x73, 0xB5, 0x52, 0xAD, 0x32, 0xBD, 0x73, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0x53, 0xAD, 0x33, 0x4A, 0x48, 0x18, 0xA3, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0xA3, 0x18, 0xE4, 0x18, 0xE4, 0x63, 0x2C, 0xB5, 0x53, 0xAC, 0xF1, 0xB5, 0x32, 0xB5, 0x73, 0xAD, 0x32, 0xAD, 0x32, 0xB5, 0x52, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0x52, 0xAD, 0x32, 0xA4, 0xD1, 0x94, 0x4F, 0x8B, 0xEE, 0x73, 0x6C, 0x63, 0x0B, 0x52, 0x89, 0x52, 0x89, 0x63, 0x0B, 0x84, 0x0E, 0x83, 0xEE, 0x83, 0xCE, 0xA4, 0xD1, 0xAD, 0x32, 0xA4, 0xD1, 0x73, 0x8C, 0x62, 0xEB, 0x73, 0x4C, 0x7B, 0x8D, 0x83, 0xCD, 0x83, 0xEE, 0x83, 0xEE, 0x83, 0xEE, 0x73, 0x6C, 0x62, 0xEA, 0x73, 0x4C, 0x7B, 0x6C, 0x94, 0x2E, 0x85, 0x0E, 0xA5, 0xF3, 0xA5, 0xD4, 0xA5, 0xB4, 0xA5, 0xB3, 0x7C, 0x8D, 0x84, 0xCC, 0x8C, 0xCC, 0x85, 0x0C, 0x4B, 0x45, 0x64, 0x06, 0x6C, 0x25, 0x7C, 0x68, 0xA5, 0x2E, 0xA4, 0xEE, 0x9C, 0xCE, 0x8C, 0x4D, 0xAD, 0x72, 0xC5, 0xF5, 0xBD, 0xD5, 0x8C, 0x4F, 0x39, 0xE6, 0x42, 0x48, 0x63, 0x4D, 0x8C, 0x51, 0x84, 0x31, 0x7B, 0xEF, 0x73, 0x6E, 0x7B, 0xAF, 0xC6, 0x18, 0xCE, 0x79, 0xEF, 0x7D, 0xC6, 0x37, 0xB5, 0xB5, 0xCE, 0x57, 0xC5, 0xD5, 0xA4, 0xF1, 0xD6, 0x36, 0xBD, 0x51, 0xAC, 0xCF, 0xBD, 0x93, 0xBD, 0xD4, 0xBD, 0xD5, 0xC5, 0xF5, 0xBD, 0xF4, 0xBD, 0xF4, 0xBD, 0xD4, 0xC5, 0xD4, 0xC5, 0xF4, 0xC5, 0xF4, 0xBD, 0xD4, 0xC5, 0xF4, 0xC5, 0xD4, 0xC5, 0xF4, 0xCE, 0x35, 0xCE, 0x14, 0xCE, 0x15, 0xCE, 0x15, 0xD6, 0x56, 0xC5, 0xD4, 0xC5, 0xF4, 0xC5, 0xD3, 0xAC, 0xCF, 0xAC, 0xEF, 0xBD, 0x93, 0xB5, 0x72, 0xAD, 0x31, 0xA4, 0xD0, 0x8C, 0x0D, 0x7B, 0xAC, 0x8C, 0x6F, 0x94, 0x8F, 0x8C, 0x4D, 0x84, 0x0D, 0xA4, 0xF0, 0x9C, 0xAF, 0x94, 0x4E, 0x84, 0x0E, 0x7B, 0xAD, 0x62, 0xEA, 0x52, 0xAA, 0x73, 0xAF, 0x8C, 0x72, 0xC6, 0x18, 0xCE, 0x7A, 0xD6, 0xBB, 0xC5, 0xF8, 0xB5, 0x76, 0x94, 0x72, 0x8C, 0x31, 0x63, 0x0C, 0x7B, 0xEF, 0x6B, 0x2C, 0x7B, 0xAE, 0x7B, 0xAF, 0x8C, 0x31, 0x9C, 0xD3, 0xB5, 0x76, 0xB5, 0x96, 0x9C, 0xD4, 0xC6, 0x18, 0xBD, 0xB7, 0x9C, 0xD4, 0xA5, 0x15, 0xBD, 0xF8, 0xD6, 0x9A, 0xE7, 0x1B, 0xDE, 0x78, 0xCD, 0xD3, 0xC5, 0x71, 0xCD, 0xF3, 0xCD, 0xD2, 0xBD, 0x50, 0xC5, 0x91, 0xC5, 0x91, 0xBD, 0x30, 0xBD, 0x50, 0xBD, 0x50, 0xB5, 0x10, 0xAC, 0xEF, 0xB4, 0xEF, 0xAC, 0xCE, 0xA4, 0xAE, 0xAC, 0xEF, 0xB4, 0xEF, 0xAC, 0xCF, 0xAC, 0xCF, 0xAC, 0xF0, 0xAC, 0xAF, 0x9C, 0x6E, 0xA4, 0xAF, 0xAC, 0xAF, 0x9C, 0x6F, 0x73, 0x4B, 0x52, 0x48, 0x39, 0xA5, 0x3A, 0x06, 0x4A, 0x48, 0x4A, 0x48, 0x4A, 0x69, 0x52, 0x89, 0x52, 0x8A, 0x6B, 0x6D, 0x7B, 0xEF, 0x84, 0x10, 0x8C, 0x31, 0xAD, 0x35, 0xAD, 0x76, 0xB5, 0xD7, 0xC6, 0x58, 0xB5, 0xB5, 0xA5, 0x12, 0xBD, 0xB4, 0xA5, 0x32, 0xAD, 0x53, 0xBD, 0xF6, 0xAD, 0x32, 0x94, 0x90, 0xBD, 0x94, 0xA4, 0xF1, 0xCE, 0x36, 0xBD, 0xF5, 0xC6, 0x36, 0xCE, 0x37, 0xC6, 0x16, 0xBD, 0xF5, 0xBD, 0xD5, 0xBD, 0xD5, 0xBD, 0xD5, 0xB5, 0xB4, 0xBD, 0xF5, 0xBD, 0xF5, 0xC6, 0x36, 0xC5, 0xF5, 0xC6, 0x16, 0xC6, 0x16, 0xBD, 0xD5, 0xAD, 0x52, 0xAD, 0x52, 0xC5, 0xF5, 0x94, 0x6E, 0xA4, 0xF0, 0xB5, 0x32, 0xC5, 0xB3, 0xD6, 0x13, 0xDE, 0x55, 0xDE, 0x34, 0xD6, 0x14, 0xDE, 0x54, 0xDE, 0x54, 0xDE, 0x54, 0xDE, 0x54, 0xDE, 0x54, 0xD6, 0x34, 0xA4, 0xF0, 0xAD, 0x32, 0xB5, 0x93, 0xB5, 0x73, 0xBD, 0xB4, 0xBD, 0xD5, 0xC5, 0xD5, 0xC5, 0xF5, 0xBD, 0xB4, 0xBD, 0xB4, 0xC5, 0xD5, 0xCE, 0x15, 0xCE, 0x15, 0x9C, 0x8F, 0xB5, 0x32, 0xC5, 0xD4, 0xBD, 0x73, 0xAD, 0x11, 0xB5, 0x11, 0xAC, 0xD0, 0xA4, 0xD0, 0xAC, 0xF1, 0xAC, 0xF1, 0xAC, 0xF0, 0xAD, 0x11, 0xAD, 0x11, 0xAC, 0xF0, 0xAD, 0x31, 0xB5, 0x31, 0xAD, 0x10, 0xB5, 0x31, 0xB5, 0x31, 0xB5, 0x31, 0xAD, 0x10, 0xA4, 0xAF, 0x9C, 0x6E, 0x9C, 0x6E, 0xAD, 0x11, 0xBD, 0xB3, 0xB5, 0x92, 0x73, 0x6B, 0x29, 0x65, 0x21, 0x24, 0x21, 0x03, 0x29, 0x45, 0x31, 0xA6, 0x3A, 0x07, 0x39, 0xC7, 0x39, 0xA6, 0x52, 0x49, 0x4A, 0x28, 0x5A, 0x69, 0x83, 0xCE, 0x83, 0xCE, 0x4A, 0x28, 0x62, 0xCB, 0x52, 0x69, 0x52, 0x8A, 0x73, 0x4D, 0x94, 0x71, 0x94, 0x2F, 0x94, 0x4F, 0xBD, 0x73, 0xEE, 0xD7, 0xD6, 0x15, 0xDE, 0x55, 0xDE, 0x35, 0xCD, 0xD3, 0xC5, 0xB3, 0xCD, 0xD4, 0xCD, 0xB3, 0xD6, 0x55, 0xC5, 0xD4, 0xAD, 0x11, 0xB5, 0x73, 0xB5, 0x73, 0xBD, 0x94, 0x42, 0x07, 0x10, 0xA3, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0xA3, 0x10, 0xC3, 0x18, 0xE4, 0x18, 0xE4, 0x73, 0x8D, 0x9C, 0xD1, 0xAD, 0x11, 0xB5, 0x73, 0xAC, 0xF1, 0xB5, 0x73, 0xA4, 0xD0, 0x94, 0x4F, 0xA4, 0xD0, 0xA4, 0xD1, 0x94, 0x4F, 0x9C, 0x6F, 0x9C, 0x8F, 0xA4, 0xD1, 0x94, 0x4F, 0xA4, 0xD0, 0x8C, 0x2E, 0x8C, 0x0E, 0x7B, 0xAD, 0x8C, 0x0F, 0xA5, 0x12, 0xB5, 0x73, 0xBD, 0xB5, 0xBD, 0x94, 0xBD, 0x94, 0xBD, 0x94, 0xBD, 0x94, 0xB5, 0x53, 0xAD, 0x33, 0xAD, 0x33, 0xAD, 0x13, 0xA4, 0xF2, 0xA4, 0xF2, 0xA4, 0xD2, 0x9C, 0xD2, 0x9C, 0x91, 0x94, 0x70, 0x8C, 0x2F, 0x94, 0x4F, 0x8C, 0x0E, 0x8C, 0xEF, 0x7C, 0x8E, 0xAD, 0xF5, 0x9D, 0x93, 0x8D, 0x31, 0x7C, 0xAD, 0x64, 0x09, 0x74, 0x49, 0x85, 0x0C, 0x63, 0xC7, 0x4B, 0x43, 0x63, 0xE5, 0x6B, 0xE7, 0x6B, 0xC8, 0x8C, 0x8B, 0x6B, 0x87, 0x8C, 0x8D, 0xAD, 0x72, 0xB5, 0x73, 0xB5, 0x73, 0xBD, 0xD4, 0x7B, 0xCD, 0x4A, 0x68, 0x63, 0x0B, 0x6B, 0x2C, 0x6B, 0x4C, 0x6B, 0x2C, 0x5A, 0xAB, 0x8C, 0x71, 0x9C, 0xF3, 0xC6, 0x39, 0xE6, 0xFC, 0xDE, 0xFB, 0xD6, 0xBA, 0x9C, 0xD2, 0x73, 0x6D, 0x9C, 0xB2, 0xAD, 0x53, 0x83, 0xCC, 0xA4, 0x8F, 0xB5, 0x73, 0xC5, 0xF5, 0xC6, 0x16, 0xC6, 0x16, 0xC6, 0x15, 0xBD, 0xF5, 0xBD, 0xD4, 0xBD, 0xD4, 0xBD, 0xD4, 0xC5, 0xF5, 0xC6, 0x15, 0xD6, 0x56, 0xC5, 0xD4, 0xB5, 0x93, 0xBD, 0x93, 0xB5, 0x93, 0xBD, 0xB3, 0xB5, 0x73, 0xBD, 0xD4, 0xB5, 0x73, 0xC5, 0xF4, 0xC5, 0xB2, 0xAC, 0xAE, 0xA4, 0xF0, 0xBD, 0xB3, 0xB5, 0x72, 0xA4, 0xF1, 0xA4, 0xF1, 0xA4, 0xD0, 0xA4, 0xF1, 0xB5, 0x73, 0xA4, 0xF1, 0x9C, 0x8F, 0x9C, 0x8F, 0x9C, 0x8F, 0xA4, 0xD0, 0xAD, 0x32, 0x94, 0x90, 0x83, 0xEE, 0x84, 0x0E, 0x7B, 0x8D, 0x5A, 0xAA, 0x84, 0x10, 0xAD, 0x55, 0xD6, 0x9A, 0xB5, 0xB7, 0xC5, 0xF8, 0xDE, 0xDB, 0xAD, 0x35, 0xAD, 0x14, 0x52, 0x8A, 0x42, 0x08, 0x52, 0xAA, 0x4A, 0x69, 0x62, 0xEC, 0x7B, 0xAE, 0xAD, 0x55, 0x94, 0x71, 0x94, 0x92, 0xC5, 0xF8, 0xAD, 0x76, 0xA5, 0x35, 0xC5, 0xF8, 0xBD, 0xD7, 0xCE, 0x39, 0xBD, 0xD7, 0x9C, 0xF3, 0xB5, 0x95, 0x94, 0x4F, 0xD6, 0x13, 0xDE, 0x34, 0xD5, 0xF3, 0xB5, 0x2F, 0xC5, 0x91, 0xDE, 0x33, 0xDE, 0x74, 0xE6, 0xB5, 0xDE, 0x74, 0xE6, 0x95, 0xE6, 0x95, 0xD6, 0x33, 0xB5, 0x30, 0xBD, 0x30, 0xB5, 0x10, 0xAC, 0xAE, 0xB5, 0x10, 0xB5, 0x30, 0xAC, 0xEF, 0xBD, 0x50, 0xBD, 0x50, 0xC5, 0x51, 0xBD, 0x51, 0xB5, 0x10, 0x9C, 0x6F, 0x62, 0xEA, 0x42, 0x07, 0x42, 0x07, 0x42, 0x27, 0x39, 0xE6, 0x4A, 0x68, 0x52, 0xA9, 0x5A, 0xAA, 0x5A, 0xCB, 0x63, 0x2C, 0x6B, 0x4D, 0x7B, 0xCF, 0x9C, 0xF3, 0x94, 0x92, 0x73, 0xAE, 0xA5, 0x55, 0xBD, 0xF6, 0xBD, 0x73, 0xBD, 0x52, 0xB5, 0x11, 0x9C, 0xB0, 0x9C, 0xB1, 0x94, 0x4F, 0xAD, 0x12, 0xBD, 0x94, 0x9C, 0xB0, 0xB5, 0x94, 0xBD, 0xD4, 0xAD, 0x53, 0xAD, 0x12, 0xB5, 0x74, 0xBD, 0xB4, 0xB5, 0x73, 0xAD, 0x53, 0xAD, 0x32, 0xBD, 0xB4, 0xBD, 0xB4, 0xC6, 0x15, 0xD6, 0x77, 0xCE, 0x56, 0xCE, 0x56, 0xD6, 0x97, 0xCE, 0x77, 0xC6, 0x36, 0xC6, 0x15, 0xA4, 0xF0, 0x9C, 0x6F, 0xB5, 0x52, 0xB5, 0x32, 0xBD, 0x72, 0xD6, 0x14, 0xD6, 0x14, 0xD6, 0x34, 0xE6, 0x75, 0xDE, 0x75, 0xDE, 0x54, 0xDE, 0x54, 0xDE, 0x75, 0xDE, 0x54, 0xCD, 0xF3, 0xAC, 0xF0, 0xA4, 0xF1, 0xA5, 0x11, 0xA4, 0xF1, 0xB5, 0x74, 0xC6, 0x15, 0xCE, 0x36, 0xD6, 0x56, 0xC5, 0xF5, 0xC5, 0xF5, 0xCE, 0x15, 0xD6, 0x76, 0xBD, 0xB4, 0x9C, 0x8F, 0xB5, 0x11, 0xCD, 0xD4, 0xC5, 0xB3, 0xBD, 0x52, 0xAC, 0xF0, 0xAC, 0xF1, 0x9C, 0x8F, 0xA4, 0xD0, 0xA4, 0xB0, 0xA4, 0xB0, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0xCF, 0xAC, 0xF0, 0xAC, 0xF0, 0xA4, 0xAF, 0xAC, 0xF0, 0xBD, 0x31, 0xBD, 0x51, 0xB5, 0x31, 0xAC, 0xF0, 0xA4, 0xAF, 0x94, 0x4E, 0xAD, 0x11, 0xAD, 0x31, 0xB5, 0x72, 0xAD, 0x32, 0x5A, 0xCA, 0x31, 0x85, 0x29, 0x44, 0x29, 0x44, 0x29, 0x65, 0x31, 0xA6, 0x31, 0xA6, 0x39, 0xC7, 0x42, 0x07, 0x31, 0x85, 0x39, 0x86, 0x4A, 0x28, 0x73, 0x4D, 0x83, 0xAE, 0x62, 0xEB, 0x62, 0xCB, 0x83, 0xAE, 0x73, 0x4C, 0x6B, 0x0C, 0x9C, 0x91, 0xAC, 0xF3, 0xB5, 0x32, 0xF6, 0xF8, 0xE6, 0xB6, 0xDE, 0x75, 0xDE, 0x55, 0xDE, 0x75, 0xDE, 0x55, 0xD6, 0x14, 0xDE, 0x55, 0xDE, 0x76, 0xB5, 0x31, 0xDE, 0xB7, 0xDE, 0xB8, 0xDE, 0xB8, 0xBD, 0x95, 0x29, 0x45, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x82, 0x10, 0x82, 0x10, 0xA3, 0x10, 0xC3, 0x10, 0xC3, 0x21, 0x04, 0x8C, 0x0F, 0xBD, 0x94, 0xD6, 0x97, 0xCE, 0x35, 0xC5, 0xD4, 0xCE, 0x56, 0xCE, 0x15, 0xC5, 0xD4, 0xBD, 0xB4, 0xBD, 0x93, 0xAD, 0x12, 0xAD, 0x32, 0xAD, 0x12, 0xA4, 0xF1, 0x9C, 0xB0, 0xA4, 0xF1, 0x9C, 0xD0, 0x94, 0x8F, 0x9C, 0xD0, 0xA4, 0xF1, 0xA4, 0xD1, 0xA4, 0xF1, 0xA5, 0x12, 0x9C, 0xD1, 0x9C, 0x90, 0xA4, 0xD1, 0xA4, 0xD1, 0xA4, 0xF1, 0xB5, 0x53, 0xAD, 0x33, 0xAD, 0x12, 0xA4, 0xD1, 0xA4, 0xD1, 0x9C, 0xB0, 0x9C, 0xB0, 0xA4, 0xF1, 0xA4, 0xF1, 0xA4, 0xD1, 0xAD, 0x12, 0xAD, 0x12, 0x74, 0x4D, 0x5B, 0x8A, 0x74, 0x4E, 0x7C, 0xAF, 0x8D, 0x50, 0x84, 0xED, 0x6C, 0x49, 0x64, 0x06, 0x74, 0x68, 0x74, 0x69, 0x43, 0x02, 0x74, 0x48, 0x63, 0xC7, 0x53, 0x66, 0x5B, 0x86, 0x7C, 0x49, 0xB5, 0xD1, 0xB5, 0x72, 0xC6, 0x35, 0xC6, 0x15, 0xC6, 0x15, 0xBD, 0xB4, 0xAD, 0x33, 0x5A, 0xAA, 0x41, 0xE7, 0x4A, 0x28, 0x42, 0x08, 0x4A, 0x29, 0x7B, 0xEF, 0x9C, 0xF4, 0xC6, 0x39, 0xA5, 0x35, 0xAD, 0x55, 0xEF, 0x5D, 0xE7, 0x1C, 0xC6, 0x18, 0xAD, 0x55, 0x73, 0x8D, 0x94, 0x4F, 0xA4, 0xAF, 0xB5, 0x52, 0xBD, 0xD4, 0xC6, 0x15, 0xCE, 0x36, 0xCE, 0x36, 0xBD, 0xD4, 0xBD, 0xF5, 0xCE, 0x36, 0xC6, 0x15, 0xC5, 0xF4, 0xC6, 0x15, 0xCE, 0x56, 0xCE, 0x35, 0xC5, 0xF4, 0xC5, 0xF5, 0xC6, 0x15, 0xCE, 0x56, 0xBD, 0xF4, 0xC5, 0xF5, 0xB5, 0x73, 0xBD, 0xB3, 0xB5, 0x50, 0xAC, 0xEF, 0xA4, 0xAF, 0xB5, 0x93, 0xBD, 0xB3, 0xAD, 0x32, 0xA4, 0xF1, 0xA5, 0x11, 0xB5, 0x93, 0xAD, 0x32, 0xA5, 0x11, 0x9C, 0x8F, 0x94, 0x6F, 0x9C, 0x8F, 0x9C, 0xAF, 0xB5, 0x73, 0xAD, 0x53, 0x8C, 0x0E, 0x83, 0xEE, 0x8C, 0x2E, 0x8C, 0x4F, 0x6B, 0x2B, 0x73, 0xAE, 0x94, 0x72, 0x8C, 0x72, 0x94, 0x92, 0xA5, 0x14, 0x9C, 0xD3, 0xDE, 0xDB, 0xB5, 0x96, 0x52, 0x8A, 0x21, 0x24, 0x29, 0x45, 0x42, 0x28, 0x62, 0xEB, 0x7B, 0xCF, 0x62, 0xEC, 0xAD, 0x55, 0xB5, 0x96, 0x94, 0xB3, 0xB5, 0x96, 0xCE, 0x39, 0xAD, 0x35, 0x83, 0xF0, 0x73, 0xAF, 0x84, 0x31, 0xB5, 0x75, 0xA4, 0xF3, 0xB5, 0x54, 0xCD, 0xD3, 0xDE, 0x54, 0xC5, 0xB1, 0xCD, 0xB1, 0xD6, 0x34, 0xDE, 0x54, 0xD6, 0x13, 0xD6, 0x33, 0xDE, 0x74, 0xDE, 0x33, 0xCD, 0xB1, 0xAC, 0xCE, 0xC5, 0xB2, 0xAC, 0xEF, 0x8B, 0xEB, 0xAD, 0x0F, 0xBD, 0x51, 0xB5, 0x30, 0xD5, 0xF3, 0xCD, 0x92, 0xD5, 0xF3, 0xC5, 0x92, 0xC5, 0x92, 0xA4, 0xD0, 0x9C, 0x8F, 0x52, 0x68, 0x39, 0xC6, 0x31, 0x85, 0x42, 0x07, 0x4A, 0x48, 0x52, 0x89, 0x5A, 0xEB, 0x63, 0x0B, 0x63, 0x2C, 0x6B, 0x6D, 0x8C, 0x51, 0x8C, 0x51, 0x8C, 0x30, 0x6B, 0x6D, 0xA5, 0x34, 0xCE, 0x58, 0xC5, 0xB3, 0xC5, 0x93, 0xA4, 0xAF, 0xA4, 0xD0, 0xA4, 0xD1, 0xAD, 0x32, 0xA4, 0xF1, 0xBD, 0x94, 0xBD, 0x94, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0x53, 0xAD, 0x32, 0xAC, 0xF2, 0xAD, 0x12, 0xAD, 0x12, 0xAD, 0x12, 0xA4, 0xB1, 0x9C, 0xB0, 0xA4, 0xD1, 0xAD, 0x11, 0xAD, 0x11, 0xAD, 0x11, 0xAD, 0x11, 0xAD, 0x73, 0xAD, 0x52, 0xBD, 0xB4, 0x9C, 0xB0, 0x9C, 0x8F, 0xAD, 0x11, 0xA4, 0xB0, 0xB5, 0x11, 0xB4, 0xF0, 0xAC, 0xF0, 0xB5, 0x30, 0xC5, 0x71, 0xBD, 0x51, 0xB4, 0xF0, 0xC5, 0x72, 0xCD, 0xD3, 0xC5, 0xB2, 0xC5, 0x92, 0xAC, 0xF0, 0xA4, 0xD0, 0x8C, 0x2E, 0x8C, 0x2E, 0xA4, 0xD1, 0xC5, 0xD4, 0xCE, 0x35, 0xC5, 0xF5, 0xBD, 0x93, 0xCE, 0x36, 0xD6, 0x77, 0xCE, 0x36, 0xB5, 0x32, 0x9C, 0x8F, 0xBD, 0x52, 0xD6, 0x35, 0xD6, 0x35, 0xCD, 0xD3, 0xBD, 0x93, 0xA4, 0xD0, 0x8B, 0xED, 0xA4, 0xD0, 0x94, 0x0D, 0x9C, 0x8F, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0xCF, 0xAC, 0xF0, 0xAC, 0xF0, 0xAC, 0xF0, 0xAC, 0xF0, 0xB5, 0x10, 0xAC, 0xCF, 0x9C, 0x8E, 0x9C, 0x8F, 0xA4, 0xAF, 0xAC, 0xF0, 0xAC, 0xF0, 0xAD, 0x11, 0xA4, 0xF0, 0xAD, 0x32, 0x9C, 0xB0, 0x6B, 0x2B, 0x42, 0x07, 0x29, 0x44, 0x29, 0x65, 0x39, 0xE6, 0x42, 0x07, 0x41, 0xE7, 0x4A, 0x48, 0x39, 0xC6, 0x29, 0x45, 0x39, 0x86, 0x5A, 0x8A, 0x83, 0xAE, 0x4A, 0x08, 0x5A, 0x69, 0x83, 0xAE, 0x73, 0x4D, 0x5A, 0x69, 0x83, 0xEF, 0xA4, 0xB2, 0xAC, 0xD1, 0xCD, 0xB4, 0xD6, 0x14, 0xDE, 0x76, 0xE6, 0x76, 0xDE, 0x55, 0xDE, 0x35, 0xE6, 0x76, 0xD6, 0x14, 0xC5, 0x93, 0xE6, 0xB7, 0xE6, 0xD8, 0xDE, 0xB7, 0x9C, 0x90, 0x29, 0x04, 0x10, 0xA3, 0x10, 0x82, 0x10, 0xA3, 0x10, 0x82, 0x10, 0xA3, 0x18, 0xC3, 0x18, 0xE4, 0x29, 0x65, 0x9C, 0x91, 0xBD, 0xB4, 0xD6, 0x56, 0xD6, 0x56, 0xC5, 0xD4, 0xCE, 0x15, 0xBD, 0x93, 0xC6, 0x15, 0xCE, 0x35, 0xCE, 0x15, 0xC5, 0xD5, 0xBD, 0xD4, 0xB5, 0x93, 0xBD, 0x94, 0xAD, 0x53, 0xBD, 0x93, 0xB5, 0x73, 0xB5, 0x93, 0xAD, 0x32, 0xB5, 0x53, 0xB5, 0x73, 0xBD, 0xB4, 0xBD, 0xD5, 0xC5, 0xD5, 0xA4, 0xF1, 0xA4, 0xF1, 0xA4, 0xD0, 0xAD, 0x11, 0xCD, 0xD4, 0xC5, 0xB3, 0xC5, 0xB3, 0xC5, 0xB3, 0xC5, 0xD4, 0xC5, 0xB3, 0xC5, 0x93, 0xCD, 0xD4, 0xCD, 0xD4, 0xC5, 0x93, 0xC5, 0xB3, 0xC5, 0xB3, 0x53, 0x48, 0x4B, 0x48, 0x5B, 0xCA, 0x64, 0x0B, 0x85, 0x0E, 0xA5, 0xD0, 0x74, 0x8A, 0x5B, 0xE5, 0x5B, 0xE5, 0x53, 0x64, 0x63, 0xE6, 0x74, 0x48, 0x63, 0xC7, 0x53, 0x86, 0x8C, 0xCB, 0xA5, 0x2D, 0x9C, 0xCD, 0x8C, 0x2C, 0x9C, 0x8F, 0x9C, 0x8F, 0xA4, 0xCF, 0xAD, 0x10, 0xAD, 0x11, 0x73, 0x6B, 0x39, 0xC5, 0x39, 0xC6, 0x42, 0x07, 0x4A, 0x28, 0x5A, 0xCB, 0x84, 0x30, 0xA5, 0x35, 0x7B, 0xF0, 0xBD, 0xD7, 0xDE, 0xBB, 0xDE, 0xBB, 0xCE, 0x7A, 0x9C, 0xF4, 0x8C, 0x30, 0xA4, 0xD1, 0xB5, 0x51, 0xCE, 0x35, 0xCE, 0x35, 0xCE, 0x56, 0xCE, 0x35, 0xCE, 0x36, 0xC6, 0x35, 0xCE, 0x36, 0xCE, 0x77, 0xCE, 0x77, 0xCE, 0x36, 0xC6, 0x36, 0xCE, 0x56, 0xCE, 0x36, 0xCE, 0x56, 0xCE, 0x56, 0xCE, 0x56, 0xD6, 0x77, 0xCE, 0x56, 0xD6, 0x77, 0xCE, 0x36, 0xCE, 0x15, 0xB5, 0x51, 0xAC, 0xEF, 0x9C, 0xAF, 0xB5, 0x72, 0xAD, 0x52, 0x9C, 0xD0, 0xA4, 0xF1, 0xAD, 0x32, 0xB5, 0x53, 0x9C, 0xD0, 0xA4, 0xF1, 0x8C, 0x2E, 0x9C, 0xB0, 0x9C, 0xD0, 0x94, 0x8F, 0xAD, 0x53, 0xAD, 0x52, 0x8C, 0x2E, 0x8C, 0x2E, 0xA4, 0xF1, 0xB5, 0x73, 0xA4, 0xF2, 0x7B, 0xAD, 0x52, 0x8A, 0x7B, 0xAF, 0x84, 0x10, 0x9C, 0xD3, 0x5A, 0xCB, 0x9C, 0xD3, 0xDE, 0xBB, 0xBD, 0xB7, 0xA4, 0xF4, 0x63, 0x0C, 0x31, 0x86, 0x4A, 0x49, 0x6B, 0x4D, 0x73, 0x6E, 0xAD, 0x76, 0x9C, 0xD3, 0x9C, 0xD3, 0xBD, 0xD7, 0xA5, 0x14, 0x9C, 0xB3, 0x9C, 0xF4, 0xB5, 0x96, 0xC6, 0x18, 0xCE, 0x59, 0xD6, 0x9A, 0xE7, 0x1C, 0xDE, 0xB9, 0xA4, 0xD1, 0x7B, 0x8B, 0xC5, 0xD3, 0xD5, 0xF3, 0xCD, 0xF2, 0xD5, 0xF2, 0xD6, 0x33, 0xD6, 0x12, 0xD6, 0x13, 0xC5, 0x71, 0xB5, 0x10, 0xAD, 0x10, 0xB5, 0x30, 0xAD, 0x10, 0xAC, 0xEF, 0xB5, 0x30, 0xC5, 0xB2, 0xCD, 0x91, 0xB5, 0x10, 0x7B, 0x6A, 0x94, 0x6E, 0x9C, 0x6F, 0x6B, 0x0A, 0x94, 0x4E, 0x62, 0xE9, 0x39, 0xC6, 0x29, 0x44, 0x31, 0x64, 0x41, 0xE6, 0x52, 0x89, 0x62, 0xEB, 0x5A, 0xEB, 0x5A, 0xEB, 0x73, 0x8E, 0x84, 0x10, 0x73, 0x8E, 0x6B, 0x2C, 0x94, 0x92, 0xBD, 0xD7, 0xB5, 0xB6, 0xC5, 0xD5, 0x9C, 0x6F, 0x94, 0x2E, 0xAD, 0x11, 0xB5, 0x11, 0xAD, 0x11, 0x94, 0x2E, 0xA4, 0xB0, 0xB5, 0x53, 0x9C, 0xB0, 0x94, 0x4F, 0x94, 0x2E, 0xA4, 0xB0, 0xB5, 0x53, 0xBD, 0x53, 0xAD, 0x12, 0xA4, 0xF1, 0xB5, 0x32, 0xB5, 0x52, 0xBD, 0x93, 0xBD, 0x93, 0xB5, 0x32, 0xB5, 0x52, 0xBD, 0x93, 0xBD, 0x73, 0xB5, 0x73, 0xBD, 0x73, 0xB5, 0x53, 0xB5, 0x32, 0xBD, 0x94, 0xBD, 0x94, 0xBD, 0x94, 0xBD, 0x94, 0xBD, 0x93, 0xBD, 0x93, 0xBD, 0x73, 0xBD, 0x52, 0xB5, 0x32, 0xB5, 0x32, 0xAC, 0xF1, 0xAD, 0x11, 0xB5, 0x31, 0xBD, 0x72, 0xBD, 0x73, 0xC5, 0xD5, 0xC5, 0xD5, 0xC5, 0xB4, 0xAD, 0x12, 0xA4, 0xB0, 0x9C, 0x8F, 0x94, 0x2E, 0x83, 0xED, 0x8C, 0x0E, 0x94, 0x2F, 0x8C, 0x0E, 0x8C, 0x0E, 0x8C, 0x0D, 0x9C, 0x6F, 0xBD, 0x93, 0xD6, 0x35, 0xBD, 0x72, 0xAC, 0xF0, 0x9C, 0x6E, 0x94, 0x2D, 0x9C, 0x6F, 0x83, 0xCC, 0x8B, 0xED, 0x9C, 0x6E, 0xA4, 0x8F, 0xA4, 0xCF, 0xA4, 0xAF, 0xAD, 0x10, 0xAD, 0x10, 0xA4, 0xCF, 0xA4, 0x8F, 0xA4, 0x8F, 0xA4, 0x8F, 0x9C, 0x6E, 0x9C, 0x6E, 0x9C, 0x8F, 0xA4, 0xCF, 0x9C, 0xAF, 0xB5, 0x51, 0xAD, 0x31, 0xB5, 0x72, 0xA5, 0x11, 0xA5, 0x11, 0x9C, 0xD1, 0x5A, 0xCA, 0x31, 0x65, 0x31, 0x85, 0x31, 0xA6, 0x39, 0xE6, 0x52, 0x69, 0x4A, 0x28, 0x29, 0x45, 0x29, 0x04, 0x31, 0x65, 0x4A, 0x28, 0x52, 0x89, 0x41, 0xE7, 0x62, 0xAA, 0x7B, 0x4D, 0x62, 0xAA, 0x52, 0x49, 0x8B, 0xEF, 0xA4, 0x92, 0x94, 0x30, 0x9C, 0x2F, 0xD6, 0x36, 0xD6, 0x35, 0xCD, 0xD3, 0xCD, 0xD4, 0xCD, 0xD3, 0xD6, 0x14, 0xD6, 0x35, 0xE6, 0xD7, 0xE6, 0xD7, 0xD6, 0x35, 0x7B, 0x8D, 0x21, 0x04, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC3, 0x18, 0xE4, 0x73, 0x6D, 0xAD, 0x33, 0xC5, 0xD4, 0xD6, 0x56, 0xCE, 0x35, 0xC5, 0xD4, 0xCE, 0x15, 0xB5, 0x73, 0xAD, 0x32, 0xC5, 0xD4, 0xCE, 0x15, 0xC5, 0xF5, 0xCE, 0x15, 0xC5, 0xD5, 0xBD, 0xD4, 0xBD, 0xB4, 0xC5, 0xF5, 0xBD, 0xD4, 0xC5, 0xF5, 0xB5, 0x93, 0xC5, 0xF5, 0xBD, 0xB4, 0xBD, 0xB4, 0xC5, 0xF5, 0xC5, 0xF5, 0xA4, 0xF1, 0xB5, 0x52, 0xD6, 0x35, 0xE6, 0x76, 0xD6, 0x15, 0xD6, 0x34, 0xD6, 0x35, 0xD6, 0x15, 0xDE, 0x35, 0xD6, 0x35, 0xD6, 0x35, 0xD6, 0x15, 0xDE, 0x76, 0xDE, 0x55, 0xD6, 0x14, 0xDE, 0x55, 0x84, 0xAD, 0x6C, 0x4C, 0x7C, 0xAE, 0x63, 0xEB, 0x5B, 0xA8, 0x74, 0xAB, 0x74, 0x8A, 0x63, 0xE6, 0x53, 0x84, 0x4B, 0x24, 0x6C, 0x27, 0x6B, 0xE7, 0x6B, 0xE7, 0x7C, 0x6A, 0x9C, 0xED, 0xA4, 0xCD, 0xA4, 0x8E, 0x9C, 0x8D, 0xA4, 0x8E, 0xAC, 0xEF, 0xB5, 0x10, 0xAC, 0xEF, 0xA4, 0xAE, 0xA4, 0xAF, 0xA4, 0x8F, 0x6B, 0x09, 0x39, 0xC5, 0x39, 0xE7, 0x42, 0x28, 0x5A, 0xCB, 0x6B, 0x4D, 0x8C, 0x51, 0x9C, 0xB3, 0x94, 0x92, 0xC6, 0x18, 0xDE, 0xBB, 0xC6, 0x39, 0x9C, 0xD2, 0xBD, 0x94, 0xAD, 0x10, 0xB5, 0x51, 0xBD, 0x71, 0xBD, 0x72, 0xB5, 0x71, 0xAD, 0x30, 0xAC, 0xF0, 0xAD, 0x31, 0xB5, 0x72, 0xBD, 0xB3, 0xBD, 0xB3, 0xBD, 0x93, 0xB5, 0x73, 0xBD, 0xB4, 0xC6, 0x15, 0xC6, 0x35, 0xCE, 0x56, 0xCE, 0x76, 0xD6, 0x77, 0xD6, 0x97, 0xCE, 0x56, 0xCE, 0x15, 0xAC, 0xF0, 0xAC, 0xAE, 0xA4, 0xCF, 0xB5, 0x72, 0xB5, 0x73, 0xA5, 0x11, 0xA5, 0x11, 0xB5, 0x73, 0xB5, 0x73, 0xAD, 0x32, 0xA5, 0x11, 0x9C, 0xD0, 0xA4, 0xF1, 0xA5, 0x12, 0xA4, 0xF1, 0xAD, 0x32, 0xAD, 0x73, 0x94, 0x8F, 0x94, 0x6F, 0x9C, 0xF1, 0xAD, 0x12, 0x9C, 0x90, 0x9C, 0x90, 0x6B, 0x4C, 0x42, 0x28, 0x6B, 0x4D, 0x9C, 0xB2, 0x83, 0xF0, 0x9C, 0xD3, 0xBD, 0xB7, 0xC5, 0xF8, 0xE7, 0x1C, 0xB5, 0x76, 0x9C, 0xB3, 0x8C, 0x51, 0xA5, 0x34, 0x9C, 0xD3, 0xA5, 0x34, 0x8C, 0x51, 0x7B, 0xAF, 0xC5, 0xF8, 0x7B, 0xAF, 0x8C, 0x51, 0xC6, 0x39, 0xBD, 0xD8, 0xAD, 0x35, 0x94, 0x72, 0x83, 0xF0, 0xC6, 0x39, 0xC5, 0xF7, 0x94, 0x92, 0x5A, 0xAA, 0x8C, 0x2E, 0xD6, 0x34, 0xD6, 0x13, 0xD6, 0x34, 0xD6, 0x13, 0xCE, 0x13, 0xD6, 0x33, 0xBD, 0x71, 0xB5, 0x30, 0xB5, 0x30, 0xC5, 0xB2, 0xBD, 0x71, 0xAD, 0x10, 0xBD, 0x51, 0xC5, 0x71, 0xB4, 0xEF, 0xAC, 0xCF, 0x73, 0x2A, 0x8C, 0x0D, 0x94, 0x4E, 0x94, 0x4E, 0x8C, 0x0D, 0x83, 0xCC, 0x52, 0x88, 0x39, 0xA5, 0x29, 0x64, 0x31, 0xA5, 0x42, 0x27, 0x52, 0x89, 0x5A, 0xCA, 0x63, 0x2C, 0x73, 0x8E, 0x63, 0x2C, 0x4A, 0x49, 0x73, 0x8E, 0x94, 0xB2, 0x9C, 0xF4, 0xA4, 0xF4, 0xCE, 0x38, 0x9C, 0x91, 0x94, 0x6F, 0xBD, 0x72, 0xBD, 0x92, 0xC5, 0x92, 0xBD, 0x73, 0xCD, 0xF4, 0xB5, 0x32, 0x94, 0x6F, 0xB5, 0x33, 0xAD, 0x12, 0x94, 0x4F, 0xB5, 0x73, 0xC5, 0xD5, 0xBD, 0x94, 0x9C, 0xB0, 0x7B, 0x8C, 0x83, 0xED, 0x8B, 0xED, 0x94, 0x6E, 0xBD, 0x93, 0xC5, 0xB4, 0xD6, 0x56, 0xC5, 0xB4, 0xA4, 0xD0, 0xA4, 0xD1, 0xBD, 0x73, 0xBD, 0x52, 0xBD, 0x73, 0xBD, 0x73, 0xB5, 0x32, 0xAD, 0x11, 0xBD, 0x72, 0xB5, 0x31, 0xBD, 0x52, 0xBD, 0x73, 0xC5, 0x93, 0xC5, 0x93, 0xBD, 0x52, 0xBD, 0x52, 0xBD, 0x52, 0xB5, 0x31, 0xC5, 0x93, 0xC5, 0x94, 0xBD, 0x73, 0xC5, 0x93, 0xC5, 0x94, 0xC5, 0xB4, 0xB5, 0x53, 0xAD, 0x12, 0x9C, 0xB0, 0xA4, 0xB0, 0xBD, 0x53, 0xB5, 0x53, 0xBD, 0x74, 0xB5, 0x33, 0xA4, 0xB0, 0x94, 0x2E, 0x8B, 0xED, 0x8B, 0xCC, 0x83, 0xCC, 0x7B, 0x8B, 0x83, 0xAC, 0x8B, 0xCC, 0x7B, 0x6B, 0x73, 0x4A, 0x83, 0xAB, 0x83, 0xEC, 0x8C, 0x0D, 0x94, 0x4E, 0x9C, 0x8F, 0x94, 0x4E, 0x8B, 0xCC, 0x83, 0xAC, 0x83, 0x8B, 0x83, 0xCC, 0x94, 0x4E, 0x9C, 0xAF, 0xA4, 0xD0, 0x9C, 0xAF, 0x94, 0x4E, 0xAD, 0x10, 0xBD, 0x93, 0xBD, 0xB3, 0xB5, 0x72, 0xBD, 0xB3, 0xC6, 0x15, 0xBD, 0xD4, 0x8C, 0x4F, 0x4A, 0x27, 0x31, 0xA6, 0x39, 0xC6, 0x39, 0xA6, 0x31, 0x85, 0x31, 0x85, 0x29, 0x45, 0x29, 0x24, 0x29, 0x04, 0x41, 0xE7, 0x5A, 0xAA, 0x4A, 0x28, 0x6A, 0xEB, 0x62, 0xCA, 0x73, 0x4C, 0x94, 0x30, 0x9C, 0x71, 0xA4, 0xD2, 0x83, 0xAE, 0x8B, 0xCE, 0xA4, 0xB0, 0x9C, 0x8F, 0x9C, 0x6F, 0xAD, 0x11, 0xBD, 0x73, 0xB5, 0x52, 0xD6, 0x56, 0xDE, 0x56, 0xB5, 0x32, 0x4A, 0x08, 0x18, 0xC4, 0x10, 0xA2, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xC3, 0x29, 0x45, 0x9C, 0xD2, 0xB5, 0x53, 0xBD, 0xB4, 0xD6, 0x56, 0xCE, 0x15, 0xC5, 0xF5, 0xCE, 0x15, 0xB5, 0x52, 0xAD, 0x32, 0xC5, 0xD4, 0xC5, 0xD4, 0xC5, 0xD4, 0xC5, 0xF4, 0xCE, 0x36, 0xC5, 0xF5, 0xAD, 0x52, 0xC5, 0xF5, 0xC5, 0xF5, 0xC5, 0xF5, 0xBD, 0xB4, 0xC5, 0xF5, 0xB5, 0x93, 0xBD, 0xF5, 0xCE, 0x15, 0xCE, 0x15, 0xA4, 0xD1, 0xB5, 0x52, 0xD6, 0x35, 0xDE, 0x55, 0xD6, 0x14, 0xD6, 0x35, 0xD6, 0x35, 0xD6, 0x15, 0xD6, 0x15, 0xCD, 0xF4, 0xBD, 0x72, 0xDE, 0x35, 0xD6, 0x15, 0xD6, 0x35, 0xD6, 0x35, 0xD6, 0x35, 0x84, 0xAD, 0x64, 0x0B, 0x74, 0x8D, 0x74, 0x8C, 0x53, 0x66, 0x4B, 0x66, 0x6C, 0x2A, 0x64, 0x08, 0x63, 0xE7, 0x6B, 0xE7, 0x63, 0xA6, 0x6B, 0xE7, 0x95, 0x2D, 0xA5, 0x4F, 0xBD, 0xB2, 0xC5, 0xD3, 0xCD, 0xF3, 0xC5, 0xB2, 0xC5, 0xB2, 0xD6, 0x55, 0xDE, 0x55, 0xCD, 0xD3, 0xA4, 0x8E, 0xA4, 0xAF, 0xAC, 0xCF, 0xA4, 0xCF, 0x83, 0xCC, 0x4A, 0x27, 0x39, 0xC6, 0x42, 0x28, 0x52, 0x8A, 0x52, 0xAA, 0x84, 0x10, 0x6B, 0x6D, 0x52, 0x8A, 0x8C, 0x51, 0x84, 0x30, 0x4A, 0x69, 0x7B, 0xAD, 0xCE, 0x16, 0xA4, 0xAF, 0xAC, 0xAF, 0xB5, 0x10, 0xB5, 0x30, 0xB5, 0x10, 0xB5, 0x30, 0xAC, 0xCF, 0xAC, 0xCF, 0xA4, 0xAE, 0xA4, 0xAE, 0xAC, 0xCF, 0xAC, 0xCF, 0xA4, 0xCF, 0xA4, 0x8F, 0xA4, 0x8E, 0x9C, 0x4E, 0x9C, 0x4D, 0x9C, 0x2D, 0x9C, 0x2D, 0x9C, 0x4D, 0x9C, 0x4C, 0xA4, 0x6D, 0xAC, 0xAE, 0x9C, 0x8E, 0xAD, 0x10, 0xB5, 0x52, 0xAD, 0x31, 0xAD, 0x32, 0xAD, 0x31, 0x9C, 0xAF, 0xAD, 0x31, 0xA4, 0xF0, 0xA4, 0xD0, 0xAD, 0x31, 0xB5, 0x52, 0xB5, 0x93, 0xB5, 0x93, 0xBD, 0xB4, 0xA5, 0x11, 0xA4, 0xF1, 0xA4, 0xD0, 0x94, 0x6F, 0x9C, 0xB0, 0x9C, 0xB0, 0x94, 0x8F, 0x7B, 0x8C, 0x73, 0x4C, 0x73, 0x6D, 0x5A, 0xCB, 0xA5, 0x14, 0xBD, 0x96, 0xDE, 0xBB, 0xA5, 0x14, 0x94, 0x92, 0x7B, 0xAF, 0x9C, 0xB3, 0x9C, 0xF4, 0xA5, 0x14, 0x84, 0x10, 0x6B, 0x2D, 0x31, 0xA6, 0x94, 0xB3, 0xCE, 0x39, 0xB5, 0x96, 0xC5, 0xF8, 0xA4, 0xF4, 0xAD, 0x35, 0xB5, 0x76, 0xA5, 0x14, 0xCE, 0x39, 0xDE, 0xDB, 0xC6, 0x39, 0x7B, 0xEF, 0x73, 0x8E, 0xBD, 0x93, 0xCD, 0xF3, 0xCD, 0xF3, 0xD6, 0x14, 0xC5, 0x92, 0xCD, 0xB2, 0xAC, 0xEF, 0xAD, 0x30, 0xAD, 0x10, 0xA4, 0xCF, 0xB5, 0x31, 0xB5, 0x30, 0xB5, 0x10, 0xB4, 0xEF, 0x9C, 0x4D, 0xA4, 0x8E, 0x8B, 0xEC, 0xAC, 0xF0, 0xA4, 0xCF, 0x9C, 0x6E, 0x9C, 0x8F, 0xAC, 0xF0, 0x8C, 0x0D, 0x42, 0x07, 0x31, 0x85, 0x31, 0x85, 0x41, 0xE6, 0x42, 0x07, 0x42, 0x28, 0x52, 0x8A, 0x4A, 0x48, 0x4A, 0x68, 0x63, 0x0B, 0x83, 0xEF, 0x84, 0x10, 0x94, 0x92, 0xA5, 0x14, 0xBD, 0xD7, 0xCE, 0x59, 0xA4, 0xF2, 0xBD, 0x73, 0xBD, 0x72, 0xBD, 0x92, 0xBD, 0x93, 0xC5, 0xD4, 0xBD, 0xB4, 0xAD, 0x32, 0xBD, 0xB4, 0xBD, 0xB4, 0xB5, 0x53, 0xB5, 0x73, 0xC5, 0xD4, 0xCD, 0xF4, 0xA4, 0xF1, 0x94, 0x6F, 0x94, 0x4F, 0x8C, 0x0E, 0xAD, 0x12, 0xC5, 0xF4, 0xCD, 0xF4, 0xCE, 0x15, 0xB5, 0x52, 0xAC, 0xF1, 0xBD, 0x73, 0xD6, 0x35, 0xD6, 0x14, 0xCD, 0xD3, 0xC5, 0x93, 0xC5, 0xB3, 0xBD, 0x72, 0xA4, 0xD0, 0x94, 0x4E, 0xA4, 0xCF, 0xAC, 0xF0, 0xAD, 0x11, 0xAD, 0x10, 0x9C, 0x6F, 0x9C, 0x6E, 0x9C, 0x6E, 0xAC, 0xD0, 0xAC, 0xF0, 0xA4, 0xAF, 0x9C, 0x6E, 0x9C, 0x8F, 0xAC, 0xF1, 0xA4, 0xD0, 0xA4, 0xB0, 0x9C, 0x6F, 0x9C, 0x8F, 0x9C, 0x6F, 0xA4, 0xD0, 0xA4, 0xB0, 0xAD, 0x12, 0xB5, 0x53, 0xAD, 0x12, 0xAC, 0xF1, 0xB5, 0x32, 0xAD, 0x12, 0xAD, 0x12, 0xB5, 0x32, 0xB5, 0x32, 0xB5, 0x32, 0xB5, 0x11, 0xAC, 0xF1, 0xAC, 0xF0, 0xAC, 0xF0, 0xB5, 0x31, 0xB5, 0x11, 0xAC, 0xD0, 0x9C, 0x8F, 0x9C, 0x90, 0x9C, 0x90, 0xA4, 0xD0, 0xA4, 0xD0, 0xA4, 0xD0, 0xA4, 0xD0, 0xAD, 0x11, 0xB5, 0x52, 0xB5, 0x32, 0xA4, 0xF0, 0xAC, 0xF0, 0xA4, 0xD0, 0x94, 0x6E, 0x9C, 0x6F, 0xA4, 0xF1, 0xAD, 0x12, 0xAD, 0x11, 0x83, 0xED, 0x41, 0xC6, 0x39, 0xA6, 0x31, 0x85, 0x31, 0xA6, 0x6B, 0x2C, 0x63, 0x0B, 0x39, 0x86, 0x29, 0x25, 0x31, 0x45, 0x4A, 0x08, 0x4A, 0x48, 0x4A, 0x28, 0x5A, 0x89, 0x6B, 0x0C, 0x8B, 0xEF, 0x8B, 0xEF, 0x9C, 0x70, 0x83, 0xCE, 0x73, 0x2C, 0x8B, 0xCE, 0x83, 0xCD, 0x8B, 0xEE, 0xA4, 0xB1, 0x9C, 0x91, 0x52, 0x69, 0x52, 0x48, 0x52, 0x68, 0x42, 0x07, 0x21, 0x04, 0x18, 0xC3, 0x10, 0xA3, 0x10, 0x83, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x82, 0x18, 0xC3, 0x73, 0x6C, 0xAD, 0x32, 0xB5, 0x53, 0xC5, 0xD5, 0xD6, 0x56, 0xCE, 0x15, 0xCE, 0x15, 0xC5, 0xF5, 0xB5, 0x73, 0xB5, 0x93, 0xC5, 0xF4, 0xC5, 0xF4, 0xC5, 0xF4, 0xCE, 0x15, 0xCE, 0x15, 0xC5, 0xD4, 0xC5, 0xD4, 0xC6, 0x15, 0xC6, 0x15, 0xC5, 0xD5, 0xC5, 0xD5, 0xBD, 0xD4, 0xC5, 0xF5, 0xC6, 0x15, 0xCE, 0x35, 0xAD, 0x32, 0xA4, 0xF0, 0xC5, 0xD4, 0xD6, 0x14, 0xDE, 0x55, 0xD6, 0x14, 0xD6, 0x14, 0xDE, 0x76, 0xD6, 0x14, 0xCD, 0xF4, 0xCD, 0xD4, 0xC5, 0xB3, 0xD6, 0x35, 0xD6, 0x14, 0xD6, 0x35, 0xD6, 0x15, 0xDE, 0x35, 0x6C, 0x2A, 0x5B, 0xEA, 0x6C, 0x6B, 0x64, 0x29, 0x5B, 0xE6, 0x64, 0x08, 0x53, 0x67, 0x53, 0x88, 0x8D, 0x0E, 0x95, 0x0D, 0x74, 0x28, 0x84, 0xAB, 0xA5, 0x8F, 0xAD, 0xB1, 0xA5, 0x50, 0x94, 0xAE, 0xC6, 0x14, 0xD6, 0x75, 0xD6, 0x75, 0xDE, 0x75, 0xD6, 0x54, 0xD6, 0x14, 0xA4, 0x8E, 0x83, 0xCB, 0x9C, 0x8E, 0xA4, 0xF0, 0xAD, 0x11, 0xAD, 0x32, 0x63, 0x0B, 0x39, 0xA6, 0x42, 0x07, 0x42, 0x28, 0x63, 0x0C, 0x6B, 0x2D, 0x5A, 0xAB, 0x4A, 0x49, 0x41, 0xE7, 0x62, 0xEB, 0x9C, 0xD3, 0xEF, 0x7D, 0xDE, 0xDA, 0x8C, 0x0F, 0x8C, 0x0D, 0xA4, 0x8E, 0x94, 0x2C, 0x94, 0x2C, 0xAC, 0xAE, 0xAC, 0xAE, 0xA4, 0xAE, 0xA4, 0x8E, 0xA4, 0x8E, 0x9C, 0x6D, 0x9C, 0x6D, 0xA4, 0x8E, 0xAC, 0xCF, 0xB4, 0xEF, 0xAC, 0xEF, 0xB4, 0xF0, 0xB5, 0x10, 0xB5, 0x10, 0xB5, 0x10, 0xB5, 0x10, 0xB5, 0x10, 0xB5, 0x10, 0xAD, 0x0F, 0xAC, 0xEF, 0xB5, 0x10, 0xAC, 0xF0, 0xAC, 0xCF, 0xA4, 0xAE, 0xAC, 0xCF, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0xAE, 0xA4, 0xAE, 0x9C, 0x8E, 0x9C, 0x8F, 0x9C, 0x8F, 0x94, 0x6E, 0x9C, 0x6E, 0x9C, 0x6E, 0x9C, 0x6E, 0x94, 0x4E, 0x8C, 0x0D, 0x8C, 0x0D, 0xAC, 0xF1, 0x94, 0x4F, 0x5A, 0xCA, 0x39, 0xE7, 0x73, 0x8E, 0x94, 0x92, 0xA5, 0x14, 0x94, 0x71, 0xAD, 0x35, 0x94, 0x71, 0x63, 0x0C, 0x84, 0x10, 0xC5, 0xF7, 0x94, 0x51, 0x62, 0xEB, 0x62, 0xEC, 0x4A, 0x69, 0xB5, 0xB6, 0xC6, 0x39, 0x8C, 0x51, 0xB5, 0xB7, 0xBD, 0xF8, 0xA4, 0xF4, 0xBD, 0xB7, 0xC5, 0xF8, 0xD6, 0x9B, 0xE6, 0xFD, 0xBD, 0xD7, 0xC6, 0x17, 0xC5, 0xF5, 0xD6, 0x35, 0xD6, 0x55, 0xD6, 0x34, 0xC5, 0xB2, 0xCD, 0xD3, 0xB5, 0x30, 0xB5, 0x71, 0x9C, 0xAF, 0x8C, 0x2D, 0xB5, 0x72, 0xA4, 0xEF, 0xB5, 0x30, 0xB5, 0x10, 0x93, 0xEC, 0xA4, 0xAF, 0x9C, 0x6E, 0xBD, 0x92, 0xA4, 0xCF, 0xAC, 0xF0, 0xAD, 0x31, 0xB5, 0x51, 0xB5, 0x31, 0x73, 0x4B, 0x39, 0xA5, 0x39, 0xC6, 0x39, 0xA5, 0x39, 0xC6, 0x39, 0xA6, 0x42, 0x07, 0x4A, 0x48, 0x42, 0x28, 0x4A, 0x48, 0x63, 0x2C, 0x7B, 0xCF, 0x9C, 0xD3, 0x9C, 0xF4, 0xB5, 0xB7, 0xCE, 0x7A, 0xBD, 0xD6, 0xAD, 0x52, 0xB5, 0x51, 0xB5, 0x72, 0xC5, 0xB3, 0xC5, 0xB3, 0xC5, 0xD4, 0xBD, 0x94, 0xBD, 0xB4, 0xBD, 0xB4, 0xB5, 0x94, 0xC5, 0xD4, 0xCD, 0xF5, 0xC5, 0xD4, 0x9C, 0x90, 0x94, 0x4F, 0x8C, 0x2E, 0x94, 0x4F, 0xBD, 0x93, 0xCE, 0x35, 0xD6, 0x35, 0xD6, 0x55, 0xB5, 0x52, 0xAC, 0xF1, 0xBD, 0x73, 0xCD, 0xF4, 0xDE, 0x55, 0xDE, 0x35, 0xD6, 0x34, 0xD6, 0x35, 0xDE, 0x76, 0xD6, 0x15, 0xC5, 0xD4, 0xC5, 0xD4, 0xC5, 0xD4, 0xAD, 0x31, 0xB5, 0x32, 0xC5, 0xD4, 0xC5, 0xB4, 0xBD, 0x93, 0xC5, 0xB4, 0xB5, 0x52, 0x9C, 0x8F, 0x83, 0xEC, 0x8C, 0x2E, 0xB5, 0x52, 0xA4, 0xF1, 0xA4, 0xD1, 0x9C, 0x8F, 0xA4, 0xF1, 0xA4, 0xD1, 0xA4, 0xF1, 0xA4, 0xD0, 0xA4, 0xD0, 0xA4, 0xD0, 0xA4, 0xF1, 0xAD, 0x12, 0xA4, 0xD1, 0x94, 0x4F, 0x94, 0x4F, 0x8C, 0x2E, 0x9C, 0x90, 0xA4, 0xB0, 0xB5, 0x31, 0xBD, 0x52, 0xC5, 0x92, 0xD6, 0x14, 0xDE, 0x34, 0xD5, 0xF3, 0xBD, 0x72, 0xAC, 0xF1, 0xBD, 0x73, 0xA4, 0xD1, 0xAC, 0xD0, 0xB5, 0x11, 0xB5, 0x31, 0xBD, 0x52, 0xBD, 0x52, 0xBD, 0x52, 0xB5, 0x32, 0xBD, 0x32, 0xB5, 0x31, 0xBD, 0x52, 0xB5, 0x32, 0xB5, 0x32, 0xB5, 0x31, 0xB5, 0x32, 0xB5, 0x52, 0xBD, 0x52, 0xA4, 0xD1, 0x83, 0xCD, 0x41, 0xE6, 0x31, 0x85, 0x52, 0xAA, 0x94, 0x50, 0x94, 0x71, 0x7B, 0x8E, 0x41, 0xE8, 0x29, 0x25, 0x39, 0xC6, 0x4A, 0x08, 0x41, 0xE7, 0x4A, 0x08, 0x62, 0xCB, 0x73, 0x4C, 0x8B, 0xEF, 0x94, 0x50, 0x8B, 0xCF, 0x8B, 0xCE, 0x7B, 0x6D, 0x62, 0xCA, 0x8C, 0x2F, 0x7B, 0x8D, 0x18, 0xC3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0xA3, 0x10, 0x82, 0x10, 0xA3, 0x18, 0xC3, 0x18, 0xE4, 0x18, 0xE3, 0x10, 0xA3, 0x52, 0x89, 0xA5, 0x12, 0x94, 0x4F, 0xA4, 0xB0, 0xA4, 0xF1, 0xAD, 0x52, 0xAD, 0x32, 0xB5, 0x52, 0xA4, 0xF1, 0xA4, 0xF1, 0xAD, 0x52, 0xB5, 0x93, 0xC5, 0xD4, 0xC5, 0xF5, 0xC5, 0xF5, 0xCE, 0x36, 0xB5, 0x73, 0xCE, 0x16, 0xCE, 0x56, 0xCE, 0x15, 0xC5, 0xD5, 0xC5, 0xF5, 0xC5, 0xF5, 0xC6, 0x15, 0xCE, 0x15, 0xD6, 0x56, 0xBD, 0xD4, 0xA4, 0xD0, 0xBD, 0xB3, 0xC5, 0xB3, 0xD6, 0x14, 0xCD, 0xB3, 0xBD, 0x72, 0xCD, 0xF4, 0xD6, 0x14, 0xD5, 0xF4, 0xCD, 0xD3, 0xD6, 0x14, 0xD6, 0x15, 0xD6, 0x35, 0xCD, 0xD4, 0xD6, 0x14, 0xD6, 0x35, 0x4B, 0x46, 0x53, 0x87, 0x5C, 0x08, 0x64, 0x27, 0x64, 0x26, 0x74, 0x8A, 0x9D, 0x90, 0x8C, 0xEE, 0x84, 0xAE, 0x95, 0x2E, 0x6B, 0xA8, 0xA5, 0x8F, 0x7C, 0x4A, 0x4B, 0x25, 0x74, 0x2A, 0xB5, 0xF3, 0xD6, 0x96, 0xD6, 0x75, 0xD6, 0x54, 0xCE, 0x34, 0xCE, 0x13, 0xD6, 0x14, 0xA4, 0xAE, 0xB5, 0x72, 0xC6, 0x15, 0xCE, 0x35, 0xCE, 0x35, 0xCE, 0x35, 0xCE, 0x16, 0x8C, 0x2F, 0x39, 0xC6, 0x39, 0xC6, 0x42, 0x28, 0x52, 0x8A, 0x5A, 0xAA, 0x5A, 0xEB, 0x52, 0x8A, 0x52, 0x69, 0x9C, 0xD3, 0xE7, 0x3C, 0xEF, 0x7D, 0xD6, 0xBA, 0xC5, 0xF7, 0xAD, 0x11, 0xA4, 0xEF, 0xA4, 0xAE, 0xA4, 0x8E, 0xB5, 0x10, 0xA4, 0xAF, 0x94, 0x2D, 0xA4, 0xCF, 0xAC, 0xF0, 0xA4, 0xCF, 0xB5, 0x31, 0xBD, 0x72, 0xA4, 0xAF, 0x94, 0x0D, 0xA4, 0x8F, 0xA4, 0xAE, 0xAC, 0xEF, 0xB5, 0x30, 0xAC, 0xCF, 0xAC, 0xAE, 0xAC, 0xCF, 0xB5, 0x10, 0xAC, 0xCF, 0x94, 0x2C, 0x8B, 0xEB, 0xA4, 0x8E, 0xB5, 0x10, 0xB5, 0x0F, 0xBD, 0x30, 0xBD, 0x50, 0xBD, 0x50, 0xB5, 0x30, 0xB4, 0xEF, 0xAC, 0xCF, 0xA4, 0xAE, 0xAC, 0xCE, 0xAC, 0xCF, 0xAC, 0xCF, 0xB4, 0xEF, 0xB4, 0xEF, 0xAC, 0xAE, 0xA4, 0xAE, 0xB4, 0xF0, 0xB5, 0x10, 0x83, 0xAC, 0x8C, 0x0D, 0x83, 0xCD, 0x52, 0x89, 0x73, 0xAE, 0x94, 0x92, 0x7B, 0xAE, 0x7B, 0xAF, 0x6B, 0x4D, 0xBD, 0xB7, 0xBD, 0xD7, 0xD6, 0xBB, 0x94, 0x92, 0x7B, 0xCF, 0x31, 0x66, 0x42, 0x08, 0x6B, 0x8E, 0xAD, 0x76, 0xCE, 0x39, 0x9C, 0xF4, 0xA5, 0x15, 0xC6, 0x19, 0xC6, 0x39, 0xC6, 0x39, 0xD6, 0xBB, 0xD6, 0xBB, 0xDE, 0xDB, 0xBD, 0xB6, 0x94, 0x2F, 0xAD, 0x31, 0xAD, 0x31, 0xBD, 0x72, 0xC5, 0x92, 0xAD, 0x10, 0xAD, 0x31, 0xB5, 0x72, 0xBD, 0x92, 0xC5, 0xF4, 0xAD, 0x30, 0xCD, 0xF3, 0xB5, 0x30, 0x93, 0xEC, 0xA4, 0x6E, 0x94, 0x4D, 0xC5, 0xD3, 0xB5, 0x52, 0xB5, 0x51, 0xA4, 0xF0, 0xBD, 0x72, 0xBD, 0x93, 0xA4, 0xD0, 0x4A, 0x48, 0x39, 0xA5, 0x31, 0x85, 0x31, 0x85, 0x39, 0xA6, 0x4A, 0x28, 0x52, 0x8A, 0x4A, 0x28, 0x4A, 0x69, 0x6B, 0x2C, 0x73, 0x8E, 0x84, 0x31, 0x9C, 0xD3, 0xAD, 0x76, 0xC6, 0x19, 0xCE, 0x38, 0xAD, 0x32, 0xA4, 0xF0, 0xBD, 0x72, 0xC5, 0xB4, 0xBD, 0x72, 0xBD, 0x73, 0xB5, 0x73, 0xBD, 0x94, 0xBD, 0x94, 0xBD, 0xB4, 0xCE, 0x15, 0xCE, 0x15, 0xCD, 0xF5, 0xBD, 0x73, 0xA4, 0xD1, 0x94, 0x6F, 0x9C, 0xB0, 0xC5, 0xD4, 0xD6, 0x35, 0xDE, 0x75, 0xD6, 0x14, 0xB5, 0x11, 0xAD, 0x12, 0xC5, 0xB4, 0xCD, 0xF4, 0xD6, 0x34, 0xD6, 0x34, 0xD5, 0xF3, 0xC5, 0xB2, 0xD6, 0x14, 0xC5, 0xB3, 0xB5, 0x52, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0xF1, 0x9C, 0xB0, 0x9C, 0xAF, 0xAD, 0x11, 0xB5, 0x31, 0xAD, 0x11, 0xAD, 0x11, 0x9C, 0xB0, 0x94, 0x4E, 0xAD, 0x11, 0xBD, 0xB4, 0xAD, 0x11, 0xAD, 0x12, 0xB5, 0x53, 0xA4, 0xF1, 0x9C, 0xB0, 0xAD, 0x12, 0x9C, 0xB0, 0xA5, 0x11, 0xA4, 0xD1, 0xAD, 0x32, 0xCD, 0xF5, 0xC5, 0xD4, 0xB5, 0x73, 0xAD, 0x32, 0xAD, 0x32, 0xB5, 0x73, 0xAD, 0x32, 0xAD, 0x11, 0xCD, 0xD3, 0xDE, 0x34, 0xD6, 0x13, 0xDE, 0x33, 0xCD, 0xD2, 0xBD, 0x51, 0x9C, 0x8F, 0xB5, 0x53, 0xA4, 0x8F, 0xAC, 0xD0, 0xB5, 0x11, 0xAC, 0xAF, 0xA4, 0x6F, 0x9C, 0x4E, 0x94, 0x2E, 0x7B, 0x8B, 0x83, 0xCC, 0x94, 0x2E, 0xA4, 0x8F, 0xA4, 0x8F, 0xA4, 0xD0, 0xA4, 0xD0, 0xAC, 0xF1, 0xAC, 0xD0, 0xA4, 0xB0, 0x9C, 0x6F, 0x94, 0x4F, 0x83, 0xCD, 0x4A, 0x27, 0x29, 0x45, 0x31, 0xA6, 0x5A, 0xCB, 0x94, 0x51, 0x83, 0xAE, 0x5A, 0x6A, 0x4A, 0x08, 0x39, 0xC7, 0x41, 0xE7, 0x4A, 0x08, 0x41, 0xE7, 0x4A, 0x29, 0x5A, 0x8A, 0x62, 0xCB, 0x52, 0x49, 0x73, 0x4D, 0x83, 0xCE, 0x8C, 0x10, 0x6B, 0x0B, 0x52, 0x8A, 0x31, 0x87, 0x31, 0x87, 0x10, 0xA3, 0x10, 0x82, 0x10, 0xA3, 0x10, 0xA3, 0x18, 0xE4, 0x29, 0x45, 0x19, 0x04, 0x10, 0xC3, 0x18, 0xE4, 0x73, 0x8D, 0x94, 0x70, 0x94, 0x50, 0x94, 0x70, 0x94, 0x4F, 0x8C, 0x0F, 0x8C, 0x2F, 0x8C, 0x2F, 0x94, 0x70, 0x94, 0x70, 0x8C, 0x2F, 0x8C, 0x0F, 0x8C, 0x0E, 0x8C, 0x2F, 0x8C, 0x2F, 0x8C, 0x2F, 0x7B, 0xCD, 0x8C, 0x4F, 0x94, 0x70, 0x84, 0x0E, 0x84, 0x0E, 0x9C, 0xD1, 0xA4, 0xF1, 0xAD, 0x11, 0xB5, 0x73, 0xA4, 0xD1, 0x94, 0x6F, 0xA4, 0xD0, 0x94, 0x6F, 0x83, 0xAC, 0x94, 0x2E, 0x9C, 0x6F, 0xB5, 0x31, 0xCD, 0xD4, 0xCD, 0xF4, 0xCD, 0xF4, 0xCD, 0xD4, 0xDE, 0x56, 0xE6, 0xB7, 0xEE, 0xD7, 0xEE, 0xD7, 0xE6, 0x96, 0xDE, 0x75, 0x53, 0xA7, 0x63, 0xE9, 0x64, 0x29, 0x4B, 0x64, 0x64, 0x05, 0x53, 0x86, 0x74, 0x8C, 0x74, 0x4C, 0x74, 0x4A, 0x7C, 0xAA, 0x84, 0xAC, 0x9D, 0x4E, 0x53, 0x66, 0x74, 0x6A, 0xBE, 0x33, 0xC6, 0x14, 0xC5, 0xF4, 0xCE, 0x54, 0xC6, 0x13, 0xCE, 0x13, 0xC5, 0xD3, 0xCD, 0xF3, 0xA4, 0x8E, 0xC5, 0xF3, 0xCE, 0x35, 0xC5, 0xF4, 0xC5, 0xF4, 0xC5, 0xF4, 0xC5, 0xD4, 0xCE, 0x15, 0xAD, 0x53, 0x4A, 0x48, 0x29, 0x45, 0x31, 0xA6, 0x39, 0xC6, 0x4A, 0x49, 0x42, 0x07, 0x4A, 0x69, 0x52, 0x8A, 0x5A, 0xEB, 0x7B, 0xEF, 0xD6, 0xBB, 0xF7, 0x9E, 0xCE, 0x37, 0xAD, 0x52, 0xBD, 0x92, 0xAC, 0xF0, 0xBD, 0x92, 0xB5, 0x72, 0xB5, 0x72, 0xAD, 0x31, 0xB5, 0x73, 0xC5, 0xD4, 0xCE, 0x35, 0xC5, 0xF4, 0xBD, 0xB3, 0xBD, 0xB3, 0xC5, 0xD4, 0xBD, 0xB3, 0xCE, 0x35, 0xB5, 0x51, 0xBD, 0x72, 0xBD, 0x72, 0xB5, 0x31, 0xBD, 0x72, 0xAC, 0xEF, 0x94, 0x2C, 0x9C, 0x8E, 0x9C, 0x6D, 0x9C, 0x4D, 0x9C, 0x8E, 0xC5, 0x92, 0xD5, 0xF3, 0xD6, 0x13, 0xCD, 0xF3, 0xC5, 0xB2, 0xB5, 0x31, 0xAD, 0x10, 0xAD, 0x31, 0xB5, 0x10, 0xBD, 0x71, 0xBD, 0x92, 0xB5, 0x30, 0xAC, 0xEF, 0xAC, 0xCF, 0xBD, 0x71, 0xBD, 0x30, 0xA4, 0xAE, 0xA4, 0xCF, 0x9C, 0xB0, 0x83, 0xCD, 0x5A, 0xA9, 0x5A, 0xCA, 0x4A, 0x48, 0x6B, 0x0C, 0x73, 0x8E, 0xC6, 0x39, 0xBD, 0xD7, 0x7B, 0xEF, 0x94, 0x92, 0xBD, 0xF7, 0x84, 0x30, 0x31, 0x86, 0x42, 0x49, 0x9C, 0xF3, 0xAD, 0x55, 0xAD, 0x55, 0xBD, 0xF8, 0xBD, 0xB7, 0xC6, 0x19, 0xCE, 0x39, 0xCE, 0x7A, 0xAD, 0x76, 0xC6, 0x19, 0xBD, 0xF7, 0x8C, 0x30, 0x8C, 0x0F, 0x94, 0x2E, 0x94, 0x0D, 0x8B, 0xEC, 0x83, 0x8B, 0x7B, 0x6A, 0x83, 0xCC, 0x83, 0xCC, 0x83, 0xAC, 0x8B, 0xEC, 0x94, 0x2D, 0x73, 0x29, 0x83, 0xAB, 0x94, 0x0C, 0x73, 0x29, 0xA4, 0xD0, 0x9C, 0x8F, 0xA4, 0xD0, 0xB5, 0x72, 0xB5, 0x72, 0xB5, 0x31, 0xAD, 0x31, 0x7B, 0xCD, 0x42, 0x07, 0x39, 0xC6, 0x42, 0x07, 0x4A, 0x28, 0x4A, 0x28, 0x5A, 0xAA, 0x5A, 0xCA, 0x5A, 0xAA, 0x73, 0x8D, 0x73, 0x8E, 0x7C, 0x10, 0x84, 0x51, 0x9C, 0xD4, 0xB5, 0xD7, 0xC6, 0x38, 0xBD, 0xB5, 0xAD, 0x32, 0xC5, 0xB3, 0xC5, 0xD4, 0xBD, 0x93, 0xB5, 0x73, 0xB5, 0x73, 0xBD, 0x94, 0xBD, 0xB4, 0xBD, 0xD4, 0xC5, 0xF4, 0xC5, 0xB4, 0xBD, 0x93, 0xBD, 0x73, 0xC5, 0xB4, 0xBD, 0x93, 0xB5, 0x93, 0xC5, 0xF4, 0xD6, 0x14, 0xD6, 0x35, 0xC5, 0xD3, 0xB5, 0x31, 0xAD, 0x11, 0xC5, 0xB3, 0xCD, 0xF4, 0xD6, 0x34, 0xD6, 0x14, 0xC5, 0x92, 0xBD, 0x92, 0xD6, 0x14, 0xC5, 0x93, 0xAD, 0x11, 0xA4, 0xF0, 0x9C, 0x8F, 0x94, 0x6E, 0x8C, 0x2D, 0x94, 0x8F, 0x9C, 0xAF, 0xA5, 0x11, 0xBD, 0x92, 0xBD, 0x93, 0xA4, 0xF1, 0xA4, 0xF1, 0xBD, 0x93, 0xBD, 0xB4, 0xAD, 0x32, 0xAD, 0x53, 0xBD, 0xB4, 0xAD, 0x52, 0xB5, 0x53, 0xBD, 0xB4, 0xAD, 0x32, 0x9C, 0xB0, 0xA4, 0xD1, 0xB5, 0x52, 0xC5, 0xD4, 0xBD, 0x93, 0xC5, 0xD4, 0xB5, 0x73, 0xA5, 0x12, 0xAD, 0x32, 0xAD, 0x32, 0xAD, 0x12, 0xB5, 0x52, 0xC5, 0x92, 0xC5, 0x91, 0xC5, 0xB1, 0xBD, 0x51, 0xB5, 0x31, 0xB5, 0x32, 0xBD, 0x73, 0xB5, 0x11, 0xAC, 0xCF, 0x9C, 0x6E, 0x9C, 0x6E, 0xA4, 0xB0, 0xA4, 0xB0, 0xAD, 0x11, 0xA4, 0xD0, 0x9C, 0xB0, 0xA4, 0xD0, 0xB5, 0x31, 0xAC, 0xF1, 0xA4, 0xD0, 0xA4, 0xAF, 0xBD, 0x73, 0xBD, 0x93, 0xC5, 0xF5, 0xBD, 0x73, 0x9C, 0x90, 0x9C, 0xB0, 0x9C, 0x6F, 0x6B, 0x2B, 0x31, 0x65, 0x29, 0x25, 0x31, 0x65, 0x4A, 0x28, 0x62, 0xEB, 0x7B, 0x8E, 0x7B, 0xAE, 0x62, 0xCB, 0x4A, 0x08, 0x4A, 0x08, 0x41, 0xC7, 0x4A, 0x08, 0x62, 0xAA, 0x52, 0x69, 0x49, 0xE8, 0x73, 0x0C, 0xAC, 0xD2, 0xAC, 0xD2, 0x62, 0xCB, 0x20, 0xE4, 0x21, 0x05, 0x21, 0x04, 0x21, 0x04, 0x21, 0x25, 0x29, 0x45, 0x21, 0x25, 0x18, 0xE4, 0x19, 0x04, 0x18, 0xE4, 0x4A, 0x69, 0xA4, 0xF2, 0xAD, 0x33, 0xAD, 0x33, 0xB5, 0x53, 0xAD, 0x12, 0xAD, 0x32, 0xB5, 0x73, 0xB5, 0x53, 0xB5, 0x53, 0xB5, 0x53, 0xB5, 0x53, 0xB5, 0x53, 0xB5, 0x73, 0xAD, 0x53, 0xB5, 0x53, 0xAD, 0x33, 0xAD, 0x33, 0xA5, 0x12, 0xA5, 0x12, 0xA5, 0x12, 0xA5, 0x13, 0xA4, 0xF2, 0xA4, 0xF2, 0x9C, 0xD1, 0x9C, 0xD1, 0x9C, 0xD1, 0xA4, 0xF2, 0xA4, 0xF2, 0xA4, 0xF2, 0xA4, 0xF2, 0x9C, 0xB1, 0x94, 0x50, 0x8C, 0x2E, 0x8C, 0x0E, 0x8C, 0x2E, 0x8C, 0x0E, 0x8C, 0x0D, 0x94, 0x4E, 0x9C, 0x8F, 0xA4, 0xAF, 0xA4, 0xCF, 0x9C, 0x6E, 0x9C, 0x6E, 0x4B, 0x27, 0x7C, 0xAC, 0x74, 0x4A, 0x43, 0x03, 0x84, 0xEC, 0x8D, 0x0F, 0x63, 0xEB, 0x74, 0x4C, 0x64, 0x28, 0x6C, 0x47, 0x95, 0x2E, 0x6B, 0xE9, 0x64, 0x07, 0x7C, 0xAB, 0xB6, 0x13, 0xBD, 0xF4, 0xBD, 0xB3, 0xBD, 0xD3, 0xC5, 0xD3, 0xC5, 0xD3, 0xC5, 0xD3, 0xCE, 0x14, 0x9C, 0x4D, 0xAD, 0x10, 0x9C, 0xAF, 0xAD, 0x52, 0xC5, 0xF5, 0xC6, 0x15, 0xC5, 0xF4, 0xBD, 0xB4, 0xD6, 0x56, 0xC5, 0xF6, 0x5A, 0xEA, 0x29, 0x44, 0x31, 0x85, 0x31, 0xA6, 0x42, 0x07, 0x63, 0x2C, 0x6B, 0x4D, 0x4A, 0x49, 0x41, 0xE8, 0x73, 0x8E, 0xA5, 0x34, 0x4A, 0x49, 0x6B, 0x4C, 0xAD, 0x11, 0xAC, 0xF0, 0xBD, 0x93, 0xB5, 0x73, 0xBD, 0x92, 0xB5, 0x52, 0xB5, 0x52, 0xBD, 0xD4, 0xC5, 0xF4, 0x9C, 0x8F, 0xB5, 0x52, 0xC5, 0xF4, 0xBD, 0xB3, 0xB5, 0x52, 0xC5, 0xD4, 0xBD, 0xB3, 0xBD, 0x92, 0xB5, 0x31, 0xBD, 0x92, 0xB5, 0x30, 0xA4, 0xAE, 0xAD, 0x30, 0xB5, 0x51, 0xBD, 0x92, 0xAC, 0xCF, 0x9C, 0x8E, 0xBD, 0x92, 0xC5, 0xD2, 0xA4, 0xCF, 0xCD, 0xF4, 0xCD, 0xF3, 0xCE, 0x14, 0xBD, 0xD3, 0xC5, 0xF4, 0xCD, 0xD4, 0xC5, 0xD3, 0xCE, 0x14, 0xC5, 0xB3, 0xBD, 0xB3, 0xBD, 0x72, 0xC5, 0xB2, 0xC5, 0xB2, 0xBD, 0x92, 0xBD, 0x92, 0xB5, 0x73, 0x9C, 0xD0, 0x8C, 0x4F, 0x73, 0x6C, 0x39, 0xA6, 0x52, 0xAA, 0x5A, 0xCB, 0x8C, 0x51, 0xBD, 0xB6, 0x73, 0x8E, 0xB5, 0x76, 0xDE, 0xDB, 0xE7, 0x3C, 0x9C, 0xD3, 0x39, 0xE7, 0x5A, 0xCB, 0xAD, 0x76, 0xC6, 0x19, 0xB5, 0x97, 0xAD, 0x76, 0xB5, 0x76, 0xB5, 0x76, 0x8C, 0x52, 0x73, 0x8F, 0xD6, 0x7A, 0xDE, 0xFB, 0xC5, 0xF7, 0xC5, 0x95, 0xBD, 0x32, 0xBD, 0x52, 0xC5, 0x72, 0xBD, 0x31, 0xB5, 0x31, 0xB5, 0x31, 0xB5, 0x11, 0xB4, 0xF0, 0xAC, 0xCF, 0xAC, 0xAF, 0xAC, 0xD0, 0xB4, 0xF0, 0xB5, 0x10, 0xA4, 0xCF, 0x9C, 0x6E, 0x9C, 0x6E, 0x9C, 0x4D, 0x94, 0x0C, 0x83, 0xCB, 0x8C, 0x0C, 0x94, 0x4D, 0x94, 0x4E, 0x6B, 0x2A, 0x31, 0xA5, 0x42, 0x07, 0x42, 0x07, 0x42, 0x07, 0x4A, 0x48, 0x52, 0x89, 0x52, 0xAA, 0x52, 0xAA, 0x6B, 0x4D, 0x7B, 0xF0, 0x94, 0x92, 0x9C, 0xF4, 0xAD, 0x55, 0xAD, 0x55, 0xCE, 0x58, 0xB5, 0x74, 0xB5, 0x52, 0xB5, 0x32, 0xA4, 0xF1, 0xA4, 0xD0, 0xAD, 0x32, 0xB5, 0x73, 0xBD, 0x93, 0xBD, 0xD4, 0xC5, 0xF4, 0xC5, 0xD4, 0xB5, 0x72, 0xC5, 0xB3, 0xCD, 0xF4, 0xCE, 0x35, 0xCE, 0x15, 0xCD, 0xF4, 0xD6, 0x35, 0xD6, 0x55, 0xCE, 0x14, 0xB5, 0x31, 0xAC, 0xF1, 0xBD, 0xB3, 0xBD, 0x52, 0xCD, 0xD3, 0xD6, 0x14, 0xCD, 0xD3, 0xCD, 0xF4, 0xD6, 0x35, 0xD6, 0x14, 0xC5, 0xB3, 0xC5, 0x93, 0xC5, 0xB3, 0xAD, 0x31, 0x9C, 0x8F, 0xAD, 0x11, 0xB5, 0x72, 0xBD, 0x93, 0xCD, 0xF4, 0xCE, 0x14, 0xBD, 0x92, 0xBD, 0xB2, 0xC5, 0xD3, 0xC5, 0xF4, 0xAD, 0x32, 0xAD, 0x32, 0xC5, 0xD4, 0xBD, 0x94, 0xBD, 0x94, 0xC5, 0xD5, 0xBD, 0xB4, 0xAD, 0x12, 0x9C, 0xB0, 0xBD, 0xB4, 0xC5, 0xD4, 0xB5, 0x52, 0xBD, 0xB4, 0xB5, 0x73, 0xA5, 0x12, 0xB5, 0x53, 0xB5, 0x93, 0xBD, 0x94, 0xB5, 0x53, 0xBD, 0x72, 0xCD, 0xF3, 0xC5, 0x92, 0xA4, 0xD0, 0xB5, 0x52, 0xB5, 0x52, 0xB5, 0x32, 0x9C, 0x4E, 0x94, 0x0D, 0x9C, 0x4E, 0xA4, 0xB0, 0xA4, 0xB0, 0x9C, 0x8F, 0xA4, 0xD0, 0xAC, 0xF1, 0xA4, 0xB0, 0x9C, 0x6F, 0xA4, 0xD0, 0x9C, 0x6F, 0xA4, 0xB0, 0xBD, 0x93, 0xB5, 0x53, 0x9C, 0x8F, 0x9C, 0xB0, 0xA4, 0xB0, 0x9C, 0xB0, 0xBD, 0x93, 0xC5, 0xD4, 0xCD, 0xF4, 0x83, 0xCC, 0x41, 0xE6, 0x29, 0x44, 0x29, 0x44, 0x39, 0xC6, 0x52, 0x69, 0x7B, 0x8E, 0xA4, 0xD3, 0x83, 0xEF, 0x4A, 0x28, 0x52, 0x29, 0x52, 0x29, 0x52, 0x49, 0x62, 0xEB, 0x5A, 0x8A, 0x4A, 0x08, 0x7B, 0x8D, 0x94, 0x50, 0xA4, 0xD3, 0x73, 0x4D, 0x20, 0xE4, 0x18, 0xE4, 0x19, 0x04, 0x21, 0x25, 0x21, 0x25, 0x21, 0x04, 0x18, 0xE4, 0x18, 0xC4, 0x5A, 0xCB, 0x84, 0x0E, 0x8C, 0x2F, 0x94, 0x6F, 0xA4, 0xF2, 0xB5, 0x74, 0xCD, 0xF6, 0xB5, 0x73, 0x8C, 0x2F, 0x94, 0x4F, 0xB5, 0x74, 0x9C, 0x70, 0x9C, 0x90, 0x9C, 0xB0, 0x9C, 0x90, 0x94, 0x70, 0x83, 0xEE, 0x8C, 0x0E, 0x94, 0x50, 0xA4, 0xF2, 0xCE, 0x57, 0xBD, 0xB4, 0x9C, 0x90, 0xAD, 0x12, 0xAD, 0x33, 0xAD, 0x12, 0xAD, 0x32, 0xAD, 0x32, 0xAD, 0x32, 0xAD, 0x12, 0xB5, 0x32, 0xB5, 0x73, 0xB5, 0x32, 0xBD, 0x74, 0xB5, 0x53, 0xAD, 0x12, 0xB5, 0x32, 0xB5, 0x53, 0xB5, 0x53, 0xAD, 0x32, 0xB5, 0x32, 0xB5, 0x32, 0xAD, 0x11, 0xAC, 0xF1, 0xAC, 0xF1, 0x32, 0x24, 0x5B, 0x88, 0x6B, 0xC9, 0x42, 0xA4, 0x7C, 0xAD, 0xA5, 0x93, 0xB6, 0x36, 0x74, 0x4C, 0x64, 0x27, 0x63, 0xE5, 0x74, 0x68, 0x74, 0x6A, 0x6C, 0x69, 0x7C, 0xAC, 0xBE, 0x54, 0xBD, 0xD3, 0xB5, 0xB2, 0xBD, 0xD3, 0xC5, 0xF4, 0xBD, 0xD4, 0xC6, 0x14, 0xD6, 0x55, 0xA4, 0x8E, 0x8C, 0x0C, 0x6B, 0x2A, 0xBD, 0xB4, 0xC6, 0x15, 0xC5, 0xF4, 0xC6, 0x15, 0xC5, 0xF5, 0xC5, 0xF5, 0xD6, 0x77, 0xCE, 0x36, 0x7B, 0x8C, 0x31, 0x85, 0x31, 0x85, 0x42, 0x07, 0x4A, 0x48, 0x42, 0x07, 0x42, 0x08, 0x52, 0x8A, 0x42, 0x28, 0x52, 0x6A, 0x73, 0x8E, 0x41, 0xC7, 0x39, 0xC7, 0xB5, 0x95, 0xB5, 0x93, 0xAD, 0x11, 0xBD, 0xD4, 0xB5, 0x72, 0xB5, 0x72, 0xC5, 0xF4, 0xBD, 0x93, 0xB5, 0x93, 0xCE, 0x15, 0xC5, 0xF4, 0xB5, 0x93, 0xB5, 0x52, 0xBD, 0xD4, 0xBD, 0xB3, 0xB5, 0x51, 0xAD, 0x31, 0xA4, 0xEF, 0xAD, 0x10, 0xA4, 0xCF, 0xAC, 0xEF, 0xB5, 0x30, 0xC5, 0x71, 0x9C, 0x6D, 0xA4, 0xCF, 0xBD, 0xB3, 0xCD, 0xF4, 0x83, 0xED, 0xC5, 0xD4, 0xC5, 0xD3, 0xC5, 0xF4, 0xBD, 0xD3, 0xCE, 0x15, 0xCE, 0x35, 0xC5, 0xD3, 0xC5, 0xF4, 0xBD, 0xB3, 0xC5, 0xD4, 0xAD, 0x11, 0xBD, 0x93, 0xBD, 0x92, 0xB5, 0x71, 0xB5, 0x51, 0xC5, 0xD4, 0xA5, 0x11, 0xAD, 0x11, 0x9C, 0x8F, 0x8C, 0x0D, 0x73, 0x6B, 0x52, 0x68, 0x5A, 0xCA, 0x7B, 0xAE, 0x83, 0xEF, 0xB5, 0x76, 0xC6, 0x18, 0xB5, 0x96, 0xB5, 0x96, 0x7B, 0xCE, 0x42, 0x08, 0x6B, 0x2D, 0xC6, 0x39, 0x9C, 0xB3, 0x52, 0x8B, 0x39, 0xE8, 0xA5, 0x15, 0xCE, 0x7A, 0x9C, 0xD3, 0x52, 0x8A, 0x8C, 0x51, 0xDE, 0xBA, 0xEE, 0xFB, 0xD6, 0x17, 0x8B, 0xCE, 0x8B, 0xED, 0x7B, 0x6B, 0x7B, 0x8B, 0x83, 0xAB, 0x7B, 0x8B, 0x83, 0xAC, 0x83, 0x8C, 0x7B, 0x6B, 0x8B, 0xED, 0xAD, 0x10, 0xAC, 0xF0, 0xA4, 0xAF, 0xBD, 0x51, 0xC5, 0xB3, 0xC5, 0x92, 0xB5, 0x31, 0xAC, 0xEF, 0xA4, 0xCF, 0xA4, 0xCF, 0xA4, 0xCF, 0x9C, 0x6F, 0x4A, 0x27, 0x39, 0xA5, 0x39, 0xA6, 0x31, 0x85, 0x42, 0x27, 0x52, 0xA9, 0x4A, 0x89, 0x52, 0xAA, 0x63, 0x2C, 0x73, 0x8E, 0x94, 0xB3, 0x8C, 0x72, 0x8C, 0x52, 0x9C, 0xF4, 0xCE, 0x59, 0xB5, 0x75, 0x94, 0x70, 0x94, 0x4F, 0x8C, 0x0E, 0x8C, 0x0E, 0x8C, 0x2F, 0x94, 0x4F, 0x9C, 0x6F, 0x9C, 0xAF, 0x9C, 0xB0, 0x9C, 0x8F, 0x94, 0x6E, 0x9C, 0x8F, 0xA4, 0xB0, 0xA4, 0xB0, 0xAD, 0x11, 0xBD, 0x72, 0xBD, 0x72, 0xBD, 0x93, 0xB5, 0x52, 0xAD, 0x11, 0xAC, 0xF1, 0xAD, 0x31, 0xCE, 0x15, 0xD6, 0x35, 0xD6, 0x34, 0xD6, 0x14, 0xDE, 0x76, 0xD6, 0x35, 0xDE, 0x55, 0xD6, 0x14, 0xCD, 0xF4, 0xDE, 0xB7, 0xCD, 0xF4, 0xBD, 0xB3, 0xCD, 0xF4, 0xCE, 0x14, 0xD6, 0x35, 0xD6, 0x14, 0xD6, 0x34, 0xD6, 0x34, 0xDE, 0x55, 0xD6, 0x14, 0xCE, 0x15, 0xB5, 0x53, 0xB5, 0x52, 0xC5, 0xD4, 0xB5, 0x93, 0xBD, 0xB4, 0xBD, 0xB4, 0xBD, 0x94, 0xAD, 0x12, 0x83, 0xED, 0x9C, 0xD1, 0xCE, 0x36, 0xB5, 0x73, 0xBD, 0xB4, 0xB5, 0x73, 0xAD, 0x12, 0xBD, 0xB4, 0xBD, 0xB4, 0xBD, 0x94, 0xB5, 0x53, 0xBD, 0x93, 0xC5, 0xF3, 0xBD, 0x92, 0xA4, 0xD0, 0x9C, 0xAF, 0xAC, 0xF1, 0xAC, 0xF1, 0x94, 0x4E, 0x94, 0x2D, 0x94, 0x4E, 0x9C, 0x4E, 0x94, 0x4E, 0x9C, 0x6E, 0xAC, 0xF1, 0xB5, 0x32, 0xA4, 0xB0, 0x9C, 0x4E, 0x9C, 0x8F, 0x9C, 0x6F, 0xA4, 0xD0, 0xC5, 0xD4, 0xB5, 0x52, 0x9C, 0x6E, 0xA4, 0xAF, 0x9C, 0x8F, 0x9C, 0x4F, 0x9C, 0x8F, 0xAC, 0xF0, 0xBD, 0x92, 0xA4, 0xAF, 0x94, 0x4F, 0x63, 0x0A, 0x39, 0xA6, 0x29, 0x44, 0x31, 0x65, 0x39, 0xC7, 0x4A, 0x49, 0x63, 0x0C, 0x4A, 0x49, 0x62, 0xEB, 0x94, 0x51, 0x7B, 0xCF, 0x39, 0xA6, 0x62, 0xCB, 0x5A, 0x8A, 0x4A, 0x29, 0x5A, 0xAA, 0x9C, 0x71, 0xBD, 0x75, 0x83, 0xAE, 0x31, 0x66, 0x18, 0xC4, 0x18, 0xE4, 0x18, 0xE4, 0x18, 0xE3, 0x18, 0xE4, 0x5A, 0xCA, 0xD6, 0x76, 0xEF, 0x18, 0xDE, 0xB7, 0xCD, 0xF5, 0xBD, 0x94, 0xAD, 0x53, 0xBD, 0xB4, 0xC5, 0xF5, 0x94, 0x90, 0xBD, 0xD5, 0xDE, 0xB8, 0xAD, 0x32, 0x94, 0x70, 0x8C, 0x4F, 0xA4, 0xF2, 0xA5, 0x12, 0xAD, 0x33, 0xB5, 0x94, 0xB5, 0x74, 0xBD, 0x94, 0xD6, 0x56, 0xDE, 0xB8, 0x94, 0x70, 0xB5, 0x53, 0xB5, 0x32, 0xAD, 0x11, 0xC5, 0xD3, 0xCD, 0xD4, 0xCD, 0xD4, 0xC5, 0xB3, 0xCD, 0xF4, 0xCE, 0x14, 0xBD, 0x93, 0xBD, 0x72, 0xBD, 0x73, 0xD6, 0x35, 0xD6, 0x14, 0xBD, 0x92, 0xC5, 0xB3, 0xCD, 0xF4, 0xD6, 0x14, 0xDE, 0x55, 0xD6, 0x35, 0xD6, 0x14, 0xCD, 0xF4, 0x63, 0xCB, 0x4A, 0xE6, 0x74, 0x0A, 0x4A, 0xC5, 0x63, 0xCA, 0x9D, 0x52, 0xA5, 0x73, 0x5B, 0x48, 0x64, 0x08, 0x4B, 0x23, 0x63, 0xE7, 0x6C, 0x69, 0x7C, 0xCB, 0x7C, 0x8B, 0x8C, 0xAD, 0x9D, 0x0D, 0xA5, 0x4D, 0xAD, 0x6F, 0xA4, 0xCF, 0xA4, 0xCF, 0xAD, 0x30, 0xBD, 0x91, 0xA4, 0xAE, 0x94, 0x0C, 0xAD, 0x52, 0xD6, 0x96, 0xDE, 0xB7, 0xD6, 0x76, 0xD6, 0x76, 0xD6, 0x97, 0xD6, 0x76, 0xD6, 0x97, 0xD6, 0x97, 0xC5, 0xF4, 0x94, 0x6F, 0x4A, 0x67, 0x39, 0xC6, 0x41, 0xE7, 0x39, 0xE7, 0x52, 0xAA, 0x73, 0x8E, 0x4A, 0x69, 0x5A, 0xCA, 0x73, 0x6D, 0x83, 0xAE, 0x73, 0xAE, 0xEF, 0x7C, 0xEF, 0x5B, 0xBD, 0xB5, 0xAD, 0x32, 0xAD, 0x31, 0xAD, 0x11, 0xC5, 0xD4, 0xB5, 0x93, 0xBD, 0xB3, 0xBD, 0xB4, 0xB5, 0x72, 0xB5, 0x72, 0xAD, 0x31, 0xAD, 0x31, 0xA4, 0xF0, 0xA4, 0xEF, 0xA4, 0xCF, 0x94, 0x6D, 0xA4, 0xEF, 0xA4, 0xEF, 0xC5, 0x91, 0xCD, 0xD2, 0xD6, 0x34, 0x9C, 0x6D, 0xAD, 0x11, 0xC5, 0xF4, 0xCE, 0x55, 0xB5, 0x93, 0xAD, 0x52, 0xB5, 0x93, 0xBD, 0xB3, 0xB5, 0x52, 0xB5, 0x92, 0xBD, 0xD3, 0xBD, 0xB3, 0xC5, 0xD4, 0xBD, 0xD4, 0xC6, 0x15, 0xB5, 0x93, 0xC5, 0xD4, 0xBD, 0x92, 0xAD, 0x51, 0x94, 0x4E, 0xA4, 0xF0, 0xA4, 0xF1, 0xAD, 0x31, 0xBD, 0x71, 0xDE, 0x54, 0xCD, 0xD3, 0xB5, 0x52, 0x6A, 0xEA, 0x4A, 0x28, 0x7B, 0xCF, 0xA5, 0x14, 0x7B, 0xAF, 0x83, 0xF0, 0xAD, 0x75, 0xC5, 0xF7, 0x52, 0x8A, 0x42, 0x49, 0x73, 0xAF, 0xB5, 0x96, 0xA5, 0x14, 0x73, 0x8E, 0xAD, 0x76, 0xAD, 0x35, 0x52, 0x6A, 0x5A, 0xAB, 0xA5, 0x14, 0xDE, 0x9A, 0xF7, 0x3C, 0xEF, 0x1C, 0xB5, 0x75, 0x7B, 0xAD, 0x7B, 0xAC, 0x8C, 0x0E, 0x8C, 0x2E, 0x83, 0xED, 0x7B, 0xCD, 0x83, 0xCD, 0x8C, 0x2E, 0x8C, 0x2E, 0x94, 0x6F, 0x7B, 0xAC, 0x7B, 0xAB, 0xA4, 0xAF, 0x9C, 0x6E, 0x9C, 0x8E, 0xAC, 0xCF, 0xB5, 0x31, 0xA4, 0xD0, 0xA4, 0xB0, 0x9C, 0x8F, 0xA4, 0xB0, 0x7B, 0x8C, 0x41, 0xE6, 0x39, 0xC6, 0x39, 0xC6, 0x41, 0xE7, 0x52, 0xA9, 0x42, 0x28, 0x52, 0x8A, 0x5A, 0xEB, 0x63, 0x2C, 0x6B, 0x4D, 0x73, 0x6E, 0x7B, 0xAF, 0x9C, 0xF4, 0xBD, 0xF8, 0xCE, 0x59, 0xB5, 0x54, 0xAD, 0x12, 0xB5, 0x53, 0xAD, 0x12, 0xA4, 0xB1, 0x9C, 0x6F, 0x9C, 0x90, 0xA4, 0xD0, 0xAC, 0xF1, 0xAC, 0xF1, 0xAC, 0xF1, 0xA4, 0xD0, 0x9C, 0x6F, 0x9C, 0x6F, 0x9C, 0x6F, 0xA4, 0xB0, 0xA4, 0xD0, 0xA4, 0xD0, 0xAC, 0xF1, 0xB5, 0x52, 0xBD, 0x73, 0xB5, 0x52, 0xA4, 0xB0, 0xA4, 0x8F, 0x9C, 0x8F, 0x9C, 0x6E, 0xA4, 0xD0, 0xB5, 0x52, 0xC5, 0xD3, 0xC5, 0xB3, 0xBD, 0x92, 0xCD, 0xF4, 0xC5, 0xB3, 0xC5, 0xB3, 0xCE, 0x14, 0xD6, 0x55, 0xD6, 0x34, 0xD6, 0x35, 0xD6, 0x34, 0xDE, 0x75, 0xDE, 0x76, 0xDE, 0x55, 0xCD, 0xF4, 0xA4, 0xF1, 0xAC, 0xF1, 0xBD, 0x93, 0xB5, 0x53, 0xBD, 0x94, 0xBD, 0xD4, 0xBD, 0xB4, 0xBD, 0xB4, 0xAD, 0x53, 0xA4, 0xF1, 0xC5, 0xF5, 0xB5, 0x93, 0xC5, 0xF5, 0xB5, 0x73, 0xAD, 0x53, 0xBD, 0xB5, 0xBD, 0xB4, 0xBD, 0xB4, 0xAD, 0x12, 0xBD, 0x93, 0xBD, 0xB3, 0xC5, 0xB3, 0xAD, 0x31, 0xA4, 0xF0, 0xAD, 0x11, 0xAD, 0x32, 0xA4, 0xF0, 0x9C, 0x8E, 0xA4, 0xD0, 0x9C, 0x6E, 0xA4, 0xD0, 0xAC, 0xF0, 0xB5, 0x31, 0xB5, 0x31, 0xA4, 0xD0, 0xA4, 0x8F, 0x9C, 0x8F, 0xA4, 0xD0, 0x9C, 0x6E, 0x94, 0x2D, 0x9C, 0x8F, 0x94, 0x6E, 0x94, 0x4E, 0xAC, 0xF1, 0xAC, 0xF1, 0xAC, 0xF0, 0xA4, 0xD0, 0xBD, 0x72, 0xAC, 0xF0, 0xAC, 0xF0, 0xB5, 0x52, 0x83, 0xEE, 0x39, 0xC6, 0x29, 0x44, 0x29, 0x44, 0x29, 0x45, 0x29, 0x45, 0x29, 0x65, 0x41, 0xE7, 0x6B, 0x2D, 0x7B, 0xCF, 0x4A, 0x49, 0x62, 0xEB, 0x5A, 0x8A, 0x52, 0x6A, 0x41, 0xE8, 0x5A, 0xAB, 0x83, 0xAE, 0xA4, 0xD3, 0x94, 0x51, 0x41, 0xE8, 0x10, 0x82, 0x10, 0xA3, 0x21, 0x04, 0x52, 0x68, 0xD6, 0x55, 0xEF, 0x18, 0xEE, 0xD7, 0xE6, 0xD7, 0xE6, 0xB7, 0xDE, 0xB8, 0xCE, 0x57, 0xC6, 0x16, 0xC6, 0x16, 0xC6, 0x16, 0xCE, 0x77, 0xD6, 0x97, 0xCE, 0x57, 0xBD, 0xF6, 0xCE, 0x37, 0xD6, 0x98, 0xDE, 0xB8, 0xDE, 0xB8, 0xDE, 0xB8, 0xDE, 0xB8, 0xE6, 0xD9, 0xE6, 0xB8, 0xDE, 0xB8, 0xA4, 0xF2, 0xBD, 0xB4, 0xD6, 0x34, 0xD6, 0x34, 0xDE, 0x74, 0xDE, 0x75, 0xDE, 0x75, 0xDE, 0x55, 0xDE, 0x75, 0xE6, 0x96, 0xD6, 0x34, 0xDE, 0x55, 0xDE, 0x55, 0xE6, 0x95, 0xE6, 0x95, 0xE6, 0x75, 0xE6, 0x95, 0xE6, 0x95, 0xEE, 0xB6, 0xE6, 0x95, 0xE6, 0xB5, 0xE6, 0xB6, 0xEE, 0xD6, 0x74, 0x2C, 0x53, 0x47, 0x63, 0xC8, 0x6C, 0x09, 0x5B, 0x89, 0x74, 0x2C, 0x74, 0x0B, 0x53, 0x27, 0x6C, 0x29, 0x43, 0x03, 0x53, 0x65, 0x53, 0xA7, 0x6C, 0x69, 0x74, 0x89, 0x8C, 0xEA, 0x95, 0x49, 0x9D, 0x6A, 0x9C, 0xCA, 0x94, 0x8B, 0x84, 0x2A, 0x9C, 0xEE, 0xAD, 0x0F, 0xA4, 0x8D, 0x94, 0x2C, 0x8B, 0xCB, 0x8C, 0x0C, 0x94, 0x2D, 0x94, 0x4D, 0x9C, 0x6D, 0x9C, 0x6E, 0xA4, 0xF0, 0xAC, 0xF0, 0x94, 0x2D, 0x83, 0xCC, 0x9C, 0x6E, 0x9C, 0x6F, 0x52, 0x47, 0x39, 0xC6, 0x42, 0x07, 0x4A, 0x48, 0x52, 0xAA, 0x52, 0x89, 0x4A, 0x49, 0x41, 0xE7, 0x63, 0x0C, 0x63, 0x0C, 0xBD, 0xD7, 0xEF, 0x5D, 0xEF, 0x7D, 0xDE, 0xBA, 0x94, 0x91, 0x6B, 0x2B, 0x9C, 0xD0, 0xBD, 0xB4, 0xC5, 0xF4, 0xBD, 0xD4, 0xBD, 0xB3, 0xB5, 0x93, 0xAD, 0x52, 0xB5, 0x72, 0xAD, 0x31, 0xA5, 0x10, 0x8C, 0x0C, 0x94, 0x4D, 0xA4, 0xAE, 0xC5, 0xB1, 0xD6, 0x12, 0xD6, 0x12, 0xDE, 0x54, 0x8B, 0xCB, 0x8C, 0x2D, 0xAD, 0x31, 0xB5, 0x92, 0xA5, 0x11, 0xA5, 0x11, 0x9C, 0xD1, 0xAD, 0x52, 0xA5, 0x11, 0xB5, 0xB3, 0xAD, 0x52, 0xB5, 0x72, 0xBD, 0xB3, 0xBD, 0xD3, 0xBD, 0xD4, 0xC5, 0xF4, 0xC5, 0xF4, 0xBD, 0x92, 0xA4, 0xF0, 0x9C, 0xB0, 0x8C, 0x2E, 0x83, 0xED, 0x94, 0x6E, 0xB5, 0x30, 0xDE, 0x34, 0xC5, 0x91, 0xC5, 0xB2, 0xA4, 0xAF, 0x8C, 0x0D, 0x6B, 0x2B, 0x84, 0x10, 0x73, 0xAF, 0xA5, 0x14, 0x9C, 0xF3, 0xB5, 0x75, 0xA5, 0x14, 0x52, 0x8A, 0x39, 0xE8, 0x73, 0xAF, 0xC6, 0x18, 0xA5, 0x14, 0xBD, 0xF7, 0xBD, 0xD7, 0x9C, 0xB2, 0xC5, 0xD7, 0xDE, 0xDA, 0xE6, 0xBA, 0xF7, 0x5D, 0xEE, 0xFB, 0xDE, 0x79, 0x94, 0x70, 0x9C, 0x90, 0xA4, 0xF1, 0xAD, 0x12, 0xAD, 0x12, 0x9C, 0xB0, 0x9C, 0xB0, 0x9C, 0xB0, 0xA4, 0xF1, 0xBD, 0xB4, 0xAD, 0x12, 0x8C, 0x2E, 0x9C, 0xB0, 0x9C, 0xAF, 0x9C, 0x8F, 0xAC, 0xF0, 0xBD, 0x72, 0xB5, 0x52, 0x94, 0x6F, 0xB5, 0x93, 0xC5, 0xF5, 0xB5, 0x53, 0x52, 0x48, 0x39, 0xA5, 0x39, 0xC6, 0x31, 0x85, 0x42, 0x28, 0x42, 0x28, 0x5A, 0xEB, 0x6B, 0x4C, 0x63, 0x0C, 0x63, 0x2C, 0x7B, 0xAF, 0x8C, 0x72, 0xA5, 0x35, 0xB5, 0xB7, 0xC6, 0x18, 0xCE, 0x17, 0x9C, 0x91, 0xAC, 0xF1, 0xC5, 0xD5, 0xBD, 0xB4, 0xAD, 0x32, 0xBD, 0x93, 0xAC, 0xF1, 0xA4, 0xD0, 0xAC, 0xF1, 0xA4, 0xF1, 0xA4, 0xF1, 0xAD, 0x12, 0xAC, 0xF1, 0xA4, 0xD0, 0xAC, 0xF1, 0xA4, 0x90, 0xA4, 0xD0, 0xA4, 0xF0, 0xAC, 0xF0, 0xAC, 0xF1, 0xAD, 0x12, 0xB5, 0x52, 0xB5, 0x32, 0xB5, 0x52, 0xB5, 0x12, 0xB5, 0x32, 0xA4, 0x8F, 0x8B, 0xED, 0xA4, 0xD0, 0xB5, 0x31, 0xB5, 0x31, 0xAD, 0x10, 0xAD, 0x11, 0xA4, 0xD0, 0xAC, 0xF0, 0xA4, 0xD0, 0xAC, 0xF0, 0xAD, 0x10, 0xB5, 0x11, 0xB5, 0x10, 0xAD, 0x10, 0xB5, 0x11, 0xB5, 0x31, 0xB5, 0x72, 0xB5, 0x52, 0xA4, 0xF1, 0xA4, 0xD0, 0x9C, 0xB0, 0xAD, 0x11, 0xAD, 0x32, 0xAD, 0x11, 0x9C, 0xD0, 0xA4, 0xF1, 0xA4, 0xD1, 0x9C, 0xB0, 0x94, 0x90, 0xA4, 0xF1, 0xA4, 0xF1, 0xA4, 0xF1, 0xAD, 0x32, 0x9C, 0xB1, 0xA4, 0xF1, 0xAD, 0x32, 0xBD, 0x93, 0xAC, 0xF0, 0xB5, 0x52, 0xAD, 0x11, 0xB5, 0x52, 0xAD, 0x31, 0xAD, 0x10, 0xBD, 0x93, 0xAC, 0xF0, 0xB5, 0x32, 0xBD, 0x73, 0xB5, 0x31, 0xC5, 0xB3, 0xAD, 0x11, 0xAD, 0x11, 0xA4, 0xD0, 0xA4, 0xD0, 0x9C, 0x6F, 0xA4, 0xB0, 0xAC, 0xF1, 0xA4, 0xD0, 0x9C, 0xAF, 0xB5, 0x52, 0xB5, 0x11, 0xAC, 0xF1, 0xAD, 0x11, 0xAD, 0x11, 0xAC, 0xF0, 0xB5, 0x52, 0xBD, 0x73, 0xBD, 0xD4, 0xA4, 0xD1, 0x5A, 0xCA, 0x31, 0x85, 0x29, 0x24, 0x21, 0x03, 0x29, 0x24, 0x29, 0x65, 0x29, 0x65, 0x39, 0xC7, 0x41, 0xE7, 0x4A, 0x28, 0x5A, 0xAB, 0x52, 0x49, 0x4A, 0x29, 0x4A, 0x08, 0x83, 0xAF, 0x83, 0xAE, 0xB5, 0x34, 0xA4, 0xD3, 0x41, 0xE8, 0x18, 0xC4, 0x63, 0x0B, 0xAC, 0xF1, 0xF7, 0x18, 0xE6, 0xD7, 0xE6, 0xD6, 0xE6, 0xB6, 0xDE, 0x96, 0xE6, 0xD8, 0xE6, 0xD8, 0xDE, 0xB8, 0xDE, 0xB8, 0xDE, 0xB8, 0xDE, 0xB8, 0xDE, 0x97, 0xDE, 0x97, 0xDE, 0x98, 0xDE, 0xD8, 0xDE, 0xD8, 0xDE, 0xB7, 0xDE, 0xB8, 0xE6, 0xD8, 0xE6, 0xF8, 0xE6, 0xF8, 0xE6, 0xD8, 0xDE, 0xB8, 0xAD, 0x12, 0xA4, 0xD0, 0xE6, 0xB6, 0xE6, 0x95, 0xE6, 0x74, 0xE6, 0x75, 0xDE, 0x75, 0xE6, 0x96, 0xDE, 0x75, 0xDE, 0x55, 0xDE, 0x75, 0xDE, 0x75, 0xDE, 0x75, 0xE6, 0x95, 0xE6, 0x95, 0xEE, 0xB5, 0xEE, 0xB5, 0xE6, 0x95, 0xE6, 0x95, 0xE6, 0x54, 0xDE, 0x54, 0xDE, 0x34, 0xDE, 0x34, 0x6C, 0x0A, 0x6C, 0x2A, 0x6C, 0x4A, 0x63, 0xE9, 0x6B, 0xEA, 0x8C, 0xCE, 0x42, 0x85, 0x3A, 0x84, 0x53, 0x86, 0x74, 0x68, 0x53, 0xA6, 0x43, 0x45, 0x64, 0x68, 0x5C, 0x25, 0x95, 0x6A, 0xA5, 0xAA, 0x9D, 0x69, 0x84, 0x88, 0x7C, 0x48, 0x8C, 0xEC, 0xAD, 0x6F, 0xCD, 0xF3, 0xCD, 0xD3, 0xCD, 0xD2, 0xC5, 0x92, 0xAC, 0xEF, 0xB5, 0x30, 0xC5, 0x92, 0xCD, 0xF3, 0xD5, 0xF4, 0xD5, 0xF3, 0xCD, 0xB2, 0xCD, 0xD3, 0xCD, 0xD2, 0xA4, 0x8E, 0x9C, 0x6D, 0xB5, 0x52, 0x6B, 0x2A, 0x41, 0xE7, 0x4A, 0x48, 0x52, 0x89, 0x52, 0x69, 0x42, 0x28, 0x39, 0xC6, 0x41, 0xE7, 0x41, 0xE7, 0x39, 0xC7, 0x7B, 0xF0, 0xC6, 0x18, 0xEF, 0x7D, 0xEF, 0x3D, 0xAD, 0x34, 0x8C, 0x0E, 0xAD, 0x11, 0xAD, 0x11, 0xAD, 0x31, 0xBD, 0x93, 0xA4, 0xF0, 0xA4, 0xF0, 0xAD, 0x31, 0xAD, 0x10, 0xA4, 0xF0, 0x94, 0x6E, 0x94, 0x4D, 0xA4, 0xAE, 0xDE, 0x74, 0xE6, 0x74, 0xDE, 0x33, 0xD6, 0x13, 0x8C, 0x0C, 0x94, 0x4E, 0x9C, 0xAF, 0x9C, 0xB0, 0x8C, 0x4E, 0x8C, 0x4E, 0x94, 0x90, 0x9C, 0xB0, 0x8C, 0x4E, 0xA5, 0x32, 0xB5, 0x73, 0xB5, 0x52, 0xB5, 0x52, 0xB5, 0x72, 0xBD, 0xB3, 0xBD, 0xD4, 0xBD, 0x93, 0xB5, 0x72, 0x9C, 0xAF, 0xAD, 0x10, 0xA5, 0x11, 0xA4, 0xF0, 0xAD, 0x10, 0xAD, 0x0F, 0xDE, 0x34, 0xCD, 0xD2, 0xD5, 0xF3, 0xAC, 0xAE, 0x8B, 0xEC, 0x9C, 0x8F, 0x73, 0x6C, 0x8C, 0x30, 0x7B, 0xCF, 0x7B, 0xAF, 0x94, 0x72, 0xB5, 0x75, 0xB5, 0x75, 0x42, 0x07, 0x4A, 0x49, 0x7B, 0xAE, 0x6B, 0x4D, 0x9C, 0xD3, 0xAD, 0x14, 0xCD, 0xF7, 0xBD, 0x75, 0xC5, 0xF7, 0xD6, 0x38, 0xCE, 0x18, 0xE6, 0xBA, 0xCE, 0x17, 0xB5, 0x34, 0xBD, 0xB4, 0xB5, 0x73, 0xAD, 0x12, 0xB5, 0x53, 0xB5, 0x93, 0xB5, 0x73, 0xAD, 0x32, 0x9C, 0x8F, 0xAD, 0x32, 0xA4, 0xD1, 0x94, 0x90, 0xA4, 0xF1, 0xB5, 0x73, 0xAC, 0xF0, 0xAD, 0x10, 0xCD, 0xF4, 0xC6, 0x14, 0xA4, 0xD0, 0x6B, 0x6B, 0xA5, 0x11, 0xC5, 0xD4, 0x7B, 0xCD, 0x41, 0xE6, 0x39, 0xC6, 0x31, 0x85, 0x39, 0xC6, 0x4A, 0x28, 0x4A, 0x69, 0x4A, 0x69, 0x5A, 0xCA, 0x63, 0x2D, 0x73, 0x8F, 0x84, 0x31, 0x94, 0x93, 0x9C, 0xD3, 0xB5, 0x76, 0xA5, 0x14, 0xAD, 0x13, 0xA4, 0xF1, 0xC5, 0xF5, 0xB5, 0x73, 0xAD, 0x11, 0xB5, 0x73, 0xCE, 0x36, 0xC5, 0xF5, 0xC5, 0xF5, 0xC5, 0xD4, 0xC5, 0xF5, 0xCD, 0xF5, 0xC5, 0xB4, 0xBD, 0x93, 0xBD, 0x93, 0xBD, 0xB4, 0xB5, 0x32, 0xB5, 0x32, 0xA4, 0xD0, 0xB5, 0x32, 0xBD, 0x94, 0xCE, 0x15, 0xBD, 0xB3, 0xCE, 0x15, 0xA4, 0xB0, 0xC5, 0x93, 0xDE, 0x76, 0xCE, 0x14, 0xBD, 0x72, 0xB5, 0x31, 0xA4, 0xD0, 0xAC, 0xF1, 0xAC, 0xF1, 0xAC, 0xF1, 0xB5, 0x32, 0xBD, 0x72, 0xB5, 0x52, 0xB5, 0x31, 0xB5, 0x32, 0xBD, 0x72, 0xB5, 0x52, 0xAC, 0xD0, 0xB5, 0x31, 0xBD, 0x72, 0xAD, 0x11, 0xA4, 0xB0, 0xA4, 0xD1, 0xA4, 0xF1, 0xA4, 0xF1, 0x9C, 0x90, 0xA4, 0xD0, 0xAD, 0x12, 0xA4, 0xF1, 0xA4, 0xD1, 0xAD, 0x11, 0xA4, 0xF1, 0x9C, 0xB0, 0xA4, 0xD1, 0xA4, 0xF1, 0xA4, 0xF2, 0x9C, 0xB1, 0x9C, 0xB0, 0x94, 0x4F, 0x94, 0x4E, 0x94, 0x4E, 0x8C, 0x0D, 0x94, 0x4E, 0xA4, 0xB0, 0xA4, 0xB0, 0xB5, 0x11, 0xAC, 0xD0, 0xB5, 0x11, 0xAC, 0xD0, 0xAC, 0xF0, 0xB5, 0x32, 0xBD, 0x52, 0xA4, 0xD0, 0xA4, 0x8F, 0xA4, 0xD0, 0xA4, 0xAF, 0xA4, 0xD0, 0xAD, 0x11, 0xAC, 0xF0, 0xB5, 0x31, 0xB5, 0x52, 0xBD, 0x72, 0xC5, 0x93, 0xCD, 0xF4, 0xC5, 0xB3, 0xBD, 0x93, 0xBD, 0x72, 0xC5, 0x93, 0xAC, 0xF1, 0xC5, 0xB4, 0xC5, 0xF5, 0xC5, 0xD5, 0x73, 0x6C, 0x39, 0xC6, 0x29, 0x44, 0x29, 0x45, 0x29, 0x65, 0x29, 0x44, 0x29, 0x65, 0x31, 0xA6, 0x29, 0x45, 0x42, 0x28, 0x62, 0xEB, 0x5A, 0xAA, 0x4A, 0x49, 0x4A, 0x08, 0x7B, 0x8E, 0x83, 0xAE, 0xB5, 0x33, 0x7B, 0x8E, 0x5A, 0x8A, 0x94, 0x50, 0xBD, 0x53, 0xF7, 0x18, 0xEE, 0xD7, 0xE6, 0xB6, 0xDE, 0x75, 0xD6, 0x35, 0xDE, 0x56, 0xDE, 0x97, 0xE6, 0xD8, 0xE6, 0xD8, 0xDE, 0xB7, 0xE6, 0xF8, 0xE6, 0xF8, 0xE6, 0xD8, 0xE6, 0xF8, 0xE6, 0xD8, 0xE6, 0xD8, 0xDE, 0xD7, 0xDE, 0xD7, 0xE6, 0xD8, 0xDE, 0x97, 0xD6, 0x56, 0xE6, 0xF8, 0xDE, 0xB8, 0xA4, 0xF1, 0xE6, 0x96, 0xEE, 0xD6, 0xE6, 0x74, 0xDE, 0x33, 0xD6, 0x13, 0xD5, 0xF3, 0xD6, 0x34, 0xD6, 0x54, 0xD6, 0x34, 0xD6, 0x13, 0xD6, 0x13, 0xDE, 0x34, 0xE6, 0x74, 0xE6, 0x75, 0xDE, 0x53, 0xE6, 0x53, 0xE6, 0x74, 0xE6, 0x53, 0xDE, 0x53, 0xDE, 0x33, 0xDE, 0x34, 0xDE, 0x54, 0x5B, 0x88, 0x5B, 0xE9, 0x53, 0x87, 0x4B, 0x46, 0x6C, 0x29, 0x74, 0x6A, 0x64, 0x08, 0x53, 0x86, 0x53, 0xC6, 0x6C, 0x68, 0x5C, 0x07, 0x3A, 0xE3, 0x53, 0xE6, 0x74, 0xA8, 0xA5, 0xEB, 0x7C, 0xA6, 0x63, 0xE3, 0x74, 0x46, 0x7C, 0x87, 0x8C, 0xEA, 0xAD, 0x4E, 0xC5, 0xB1, 0xCD, 0xD2, 0xC5, 0x91, 0xD6, 0x13, 0xCD, 0xD2, 0xB5, 0x30, 0xB5, 0x30, 0xC5, 0x92, 0xC5, 0x71, 0xD5, 0xF3, 0xD5, 0xF3, 0xD5, 0xD3, 0xD6, 0x13, 0xCD, 0xB2, 0xD6, 0x14, 0xBD, 0xB3, 0x62, 0xEA, 0x4A, 0x27, 0x31, 0xA6, 0x42, 0x07, 0x39, 0xE6, 0x39, 0xA6, 0x4A, 0x28, 0x5A, 0xAA, 0x4A, 0x48, 0x39, 0xC7, 0x42, 0x08, 0x42, 0x08, 0x73, 0x8E, 0xB5, 0x96, 0x7B, 0xAE, 0xAD, 0x13, 0x94, 0x70, 0x8C, 0x0E, 0x8B, 0xEC, 0x94, 0x0D, 0x8B, 0xEC, 0x94, 0x2C, 0x9C, 0x8E, 0x9C, 0x6D, 0x94, 0x2C, 0x8B, 0xEB, 0x8B, 0xEB, 0x9C, 0x6D, 0xAC, 0xEE, 0xBD, 0x2F, 0xBD, 0x2F, 0xBD, 0x30, 0xA4, 0xAE, 0x8B, 0xEC, 0x7B, 0x6A, 0x6B, 0x09, 0x62, 0xE9, 0x63, 0x09, 0x7B, 0xAC, 0x7B, 0xAC, 0x6B, 0x4B, 0xA4, 0xD1, 0xBD, 0xD4, 0xBD, 0xB3, 0xBD, 0x92, 0xB5, 0x72, 0xBD, 0xB3, 0xB5, 0x92, 0xA4, 0xF0, 0xAD, 0x10, 0x9C, 0x8E, 0x9C, 0x8E, 0x9C, 0x8E, 0x94, 0x6D, 0xB5, 0x51, 0xAC, 0xEF, 0xDE, 0x54, 0xDE, 0x34, 0xDE, 0x34, 0xAC, 0xAE, 0x9C, 0x2D, 0xAC, 0xCF, 0xB5, 0x31, 0xA4, 0xF1, 0x8C, 0x30, 0x31, 0x66, 0x62, 0xEB, 0x94, 0x71, 0xAD, 0x34, 0x6B, 0x4C, 0x42, 0x28, 0x52, 0x8A, 0x73, 0x8E, 0x7B, 0xCF, 0x9C, 0x92, 0x83, 0xCF, 0x73, 0x6D, 0xB5, 0x96, 0xBD, 0xD6, 0xEF, 0x1B, 0xDE, 0x9A, 0xAD, 0x35, 0xAD, 0x55, 0xB5, 0x95, 0xBD, 0xD6, 0x94, 0x90, 0x94, 0x70, 0xAD, 0x53, 0xA4, 0xF2, 0x9C, 0xD1, 0x94, 0x4F, 0x8C, 0x2F, 0xCE, 0x38, 0xE6, 0xFB, 0xBD, 0xB5, 0xAD, 0x31, 0x9C, 0x8F, 0xAC, 0xF0, 0xCE, 0x14, 0xCE, 0x35, 0xBD, 0xD4, 0xA4, 0xF1, 0x8C, 0x2E, 0xAD, 0x31, 0x94, 0x70, 0x4A, 0x28, 0x31, 0xA5, 0x39, 0xC6, 0x42, 0x07, 0x42, 0x28, 0x4A, 0x49, 0x42, 0x28, 0x52, 0xAA, 0x63, 0x0C, 0x6B, 0x4D, 0x6B, 0x6E, 0x73, 0xAF, 0x84, 0x11, 0xA5, 0x35, 0xAD, 0x75, 0xDE, 0x9A, 0xB5, 0x54, 0xCE, 0x16, 0xBD, 0x93, 0xAC, 0xF1, 0x94, 0x6F, 0xCE, 0x36, 0xD6, 0x76, 0xD6, 0x56, 0xCE, 0x15, 0xC5, 0xF4, 0xBD, 0x73, 0xAC, 0xF1, 0xA4, 0xB0, 0xAD, 0x32, 0xB5, 0x73, 0xBD, 0x93, 0xD6, 0x36, 0xCD, 0xF4, 0xBD, 0x73, 0xCD, 0xF4, 0xC5, 0x93, 0xB5, 0x72, 0xC5, 0xB3, 0xAD, 0x11, 0xC5, 0xB3, 0xDE, 0x55, 0xCD, 0xD4, 0xBD, 0x72, 0xC5, 0xD4, 0xC5, 0xB3, 0xC5, 0x93, 0xC5, 0x93, 0xC5, 0xB3, 0xCD, 0xD4, 0xCD, 0xD4, 0xD6, 0x15, 0xAD, 0x11, 0xAD, 0x11, 0xBD, 0x93, 0xB5, 0x72, 0xB5, 0x73, 0xB5, 0x73, 0x9C, 0x8F, 0xA4, 0xF1, 0xAD, 0x32, 0xBD, 0x94, 0xAD, 0x32, 0xA4, 0xD1, 0xAD, 0x11, 0x9C, 0xB0, 0x73, 0x6B, 0x7B, 0xAC, 0x83, 0xCD, 0x94, 0x6F, 0x9C, 0x6F, 0x9C, 0x90, 0xA4, 0xF1, 0xB5, 0x53, 0xB5, 0x53, 0xB5, 0x32, 0xB5, 0x32, 0xB5, 0x52, 0xB5, 0x31, 0xAD, 0x31, 0xAD, 0x11, 0xAC, 0xD0, 0xA4, 0xD0, 0xA4, 0x8F, 0x9C, 0x4E, 0x9C, 0x4E, 0x9C, 0x4E, 0x9C, 0x4E, 0xA4, 0xB0, 0xAC, 0xD0, 0xA4, 0xAF, 0xAC, 0xD0, 0xA4, 0xD0, 0xAC, 0xD0, 0xAC, 0xF0, 0xAC, 0xD0, 0xAC, 0xD0, 0xA4, 0xAF, 0x9C, 0x8F, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0x8F, 0xA4, 0x8F, 0x9C, 0x6E, 0xAC, 0xD0, 0xA4, 0x8F, 0x94, 0x2E, 0x94, 0x2E, 0x9C, 0x8F, 0xAD, 0x11, 0xAD, 0x32, 0xA4, 0xD0, 0x73, 0x6B, 0x42, 0x07, 0x31, 0x85, 0x29, 0x65, 0x29, 0x44, 0x31, 0x85, 0x42, 0x07, 0x42, 0x07, 0x4A, 0x28, 0x39, 0xC6, 0x62, 0xEB, 0x6B, 0x0C, 0x49, 0xE7, 0x5A, 0x8A, 0x83, 0xAE, 0x83, 0x8D, 0x73, 0x6D, 0x73, 0x2C, 0x73, 0x2C, 0x6A, 0xEA, 0xBD, 0x73, 0xCD, 0xF4, 0xC5, 0xB3, 0xC5, 0x93, 0xAC, 0xF1, 0xC5, 0xB4, 0xBD, 0x93, 0xCE, 0x15, 0xD6, 0x56, 0xD6, 0x35, 0xE6, 0xB7, 0xDE, 0x97, 0xDE, 0xB7, 0xE6, 0xB8, 0xE6, 0xB7, 0xE6, 0xB7, 0xE6, 0xD8, 0xE6, 0xB7, 0xE6, 0xF8, 0xDE, 0x97, 0xDE, 0x77, 0xE6, 0xF8, 0xDE, 0xB7, 0xA4, 0xD0, 0xF7, 0x18, 0xEE, 0xD6, 0xE6, 0x75, 0xDE, 0x33, 0xD5, 0xF3, 0xD6, 0x14, 0xDE, 0x55, 0xDE, 0x54, 0xDE, 0x55, 0xE6, 0x75, 0xDE, 0x54, 0xDE, 0x54, 0xDE, 0x54, 0xDE, 0x54, 0xDE, 0x33, 0xDE, 0x33, 0xDE, 0x13, 0xE6, 0x54, 0xDE, 0x33, 0xDE, 0x33, 0xE6, 0x74, 0xE6, 0x95, 0x21, 0xE3, 0x4B, 0x27, 0x32, 0xC4, 0x3A, 0xC4, 0x53, 0xA6, 0x43, 0x24, 0x43, 0x44, 0x3B, 0x04, 0x64, 0x08, 0x3B, 0x03, 0x53, 0xC6, 0x43, 0x45, 0x5B, 0xC7, 0x9D, 0xCE, 0x63, 0xC6, 0x6C, 0x08, 0x8C, 0xEC, 0xB5, 0xF0, 0xCE, 0x51, 0xC5, 0xF0, 0xBD, 0x8F, 0xBD, 0x70, 0xBD, 0x30, 0xB5, 0x0F, 0xCD, 0xB2, 0xCD, 0xB2, 0xBD, 0x71, 0xC5, 0x92, 0xCD, 0xB2, 0xCD, 0xD3, 0xD6, 0x14, 0xD5, 0xF3, 0xD5, 0xF3, 0xD5, 0xD3, 0xD6, 0x13, 0xD6, 0x14, 0x6A, 0xEA, 0x7B, 0xCD, 0x73, 0x6B, 0x4A, 0x27, 0x39, 0x85, 0x31, 0xA6, 0x31, 0xA6, 0x41, 0xE7, 0x52, 0x89, 0x62, 0xEB, 0x52, 0x89, 0x63, 0x0B, 0x73, 0x4D, 0x7B, 0x8E, 0x8C, 0x51, 0x73, 0x6E, 0xC6, 0x38, 0xEF, 0x3C, 0xB5, 0x75, 0x8C, 0x0E, 0x9C, 0x8F, 0xA4, 0xAF, 0x8B, 0xEC, 0x83, 0xCB, 0x8C, 0x0C, 0xA4, 0xAE, 0xB4, 0xEF, 0xB5, 0x10, 0xBD, 0x51, 0xC5, 0x91, 0xC5, 0x71, 0xAC, 0xCE, 0xB4, 0xEF, 0xBD, 0x50, 0xBD, 0x31, 0xAC, 0xAF, 0x9C, 0x6E, 0xA4, 0xAE, 0xAC, 0xCF, 0xA4, 0xAE, 0x9C, 0x4D, 0x94, 0x2D, 0x94, 0x2D, 0x94, 0x2D, 0x9C, 0x4D, 0xA4, 0xAE, 0xA4, 0x8E, 0xA4, 0x8E, 0x9C, 0x8E, 0x9C, 0x8E, 0xA4, 0xAE, 0xA4, 0xAE, 0xAC, 0xCF, 0xA4, 0xAE, 0x94, 0x0C, 0x9C, 0x6D, 0xA4, 0x8D, 0xCD, 0xF2, 0xCD, 0xF3, 0xBD, 0x51, 0x8B, 0xCB, 0x8B, 0xEC, 0xAC, 0xCE, 0xAC, 0xEF, 0xAD, 0x10, 0x6B, 0x0A, 0x39, 0xA6, 0x31, 0xA6, 0x6B, 0x2C, 0x8C, 0x30, 0x73, 0x6C, 0x5A, 0xCB, 0x6B, 0x6D, 0x6B, 0x2C, 0x7B, 0xAE, 0x8C, 0x30, 0x94, 0x30, 0x94, 0x30, 0x73, 0x4D, 0x94, 0x71, 0xE6, 0xFB, 0x94, 0x92, 0x6B, 0x2D, 0xA5, 0x14, 0x5A, 0xAB, 0x94, 0x91, 0x84, 0x0F, 0x8C, 0x50, 0x94, 0x91, 0x9C, 0xB2, 0x94, 0x51, 0x9C, 0x91, 0xC6, 0x18, 0xEF, 0x5D, 0xCE, 0x59, 0x9C, 0xD2, 0xA4, 0xF1, 0xA4, 0xCF, 0xB5, 0x10, 0xCE, 0x14, 0xC5, 0xD3, 0x9C, 0xD0, 0xB5, 0x52, 0xAD, 0x72, 0xB5, 0x73, 0xB5, 0x74, 0x6B, 0x2B, 0x39, 0xC6, 0x42, 0x07, 0x5A, 0xAA, 0x52, 0xAA, 0x52, 0x8A, 0x63, 0x0B, 0x6B, 0x6D, 0x73, 0x8D, 0x5A, 0xCB, 0x52, 0x8A, 0x6B, 0x4D, 0x7B, 0xF0, 0x8C, 0x92, 0xA5, 0x35, 0xC6, 0x38, 0xBD, 0xF6, 0xCE, 0x16, 0xCE, 0x15, 0xAD, 0x32, 0xA4, 0xD1, 0xD6, 0x56, 0xDE, 0x97, 0xDE, 0x76, 0xD6, 0x76, 0xCE, 0x35, 0xBD, 0x93, 0xAD, 0x11, 0xA4, 0xF1, 0xA4, 0xF1, 0xA4, 0xF1, 0xB5, 0x73, 0xCE, 0x15, 0xCD, 0xF4, 0xB5, 0x52, 0xAD, 0x31, 0xAC, 0xF0, 0xBD, 0x93, 0xBD, 0x93, 0xB5, 0x11, 0xBD, 0x93, 0xCD, 0xD3, 0xC5, 0x92, 0xB5, 0x31, 0xC5, 0xB3, 0xC5, 0xB3, 0xBD, 0x52, 0xBD, 0x72, 0xB5, 0x51, 0xBD, 0x72, 0xC5, 0xB3, 0xCD, 0xF4, 0xB5, 0x32, 0x9C, 0x6F, 0xA4, 0xF1, 0xB5, 0x52, 0xC5, 0xD4, 0xD6, 0x57, 0xBD, 0xD5, 0xBD, 0xD4, 0xBD, 0xB4, 0xBD, 0x94, 0xBD, 0xB4, 0xC5, 0xD4, 0xB5, 0x52, 0xA4, 0xD1, 0x7B, 0xAC, 0x7B, 0xCD, 0x7B, 0xCC, 0x8C, 0x0E, 0x9C, 0x6F, 0x8C, 0x2E, 0x83, 0xED, 0x83, 0xAC, 0x83, 0x8C, 0x83, 0xAC, 0x7B, 0x8B, 0x83, 0xAC, 0x8B, 0xED, 0x9C, 0x6E, 0xA4, 0xB0, 0x9C, 0x6E, 0xA4, 0x8F, 0xA4, 0x8F, 0x94, 0x0D, 0x94, 0x2E, 0x83, 0xAB, 0x83, 0xAB, 0xA4, 0xB0, 0x9C, 0x6F, 0x8B, 0xED, 0x83, 0xAC, 0x8B, 0xED, 0x9C, 0x4E, 0x94, 0x2E, 0x9C, 0x4E, 0xA4, 0x8F, 0xA4, 0x8F, 0x9C, 0x4E, 0xAC, 0xD0, 0xAD, 0x11, 0xAC, 0xF0, 0xB5, 0x32, 0xAC, 0xF0, 0xAC, 0xF0, 0xAD, 0x11, 0xB5, 0x52, 0xBD, 0x73, 0xBD, 0x94, 0xBD, 0xB4, 0xBD, 0x93, 0xBD, 0x93, 0xBD, 0x94, 0xA4, 0xF2, 0x5A, 0xCA, 0x31, 0xA6, 0x29, 0x65, 0x31, 0x85, 0x39, 0xC6, 0x41, 0xE7, 0x4A, 0x68, 0x42, 0x07, 0x31, 0xA6, 0x52, 0x69, 0x5A, 0xAA, 0x6B, 0x0C, 0x5A, 0xAA, 0x4A, 0x28, 0x52, 0x49, 0x62, 0x8A, 0x8B, 0xCE, 0x62, 0xAA, 0x62, 0x89, 0x94, 0x4F, 0xA4, 0xB0, 0xAD, 0x11, 0x94, 0x4F, 0x9C, 0x90, 0x94, 0x6F, 0xA4, 0xD0, 0xB5, 0x52, 0xB5, 0x32, 0xBD, 0x73, 0xA4, 0xD0, 0x9C, 0xB0, 0xC5, 0xD5, 0xBD, 0x52, 0xBD, 0x73, 0xBD, 0x93, 0xBD, 0x93, 0xCE, 0x15, 0xDE, 0x97, 0xE6, 0xD8, 0xE6, 0xD8, 0xDE, 0x77, 0xAC, 0xF1, 0xF7, 0x18, 0xEE, 0xD6, 0xDE, 0x54, 0xDE, 0x54, 0xE6, 0x55, 0xD6, 0x13, 0xE6, 0x96, 0xDE, 0x34, 0xE6, 0x96, 0xEE, 0xB6, 0xDE, 0x75, 0xEE, 0xD6, 0xE6, 0x95, 0xE6, 0x95, 0xE6, 0x95, 0xE6, 0x74, 0xDE, 0x54, 0xEE, 0xB5, 0xE6, 0x75, 0xDE, 0x54, 0xDE, 0x34, 0xE6, 0x95, 0x21, 0xC4, 0x43, 0x27, 0x6C, 0x4B, 0x43, 0x05, 0x4B, 0x05, 0x53, 0x66, 0x5B, 0xC8, 0x43, 0x05, 0x64, 0x09, 0x22, 0x21, 0x3B, 0x03, 0x4B, 0x45, 0x7C, 0xAB, 0x7C, 0x6A, 0xA5, 0xD1, 0xC6, 0xD5, 0xCE, 0xD6, 0xE7, 0x17, 0xD6, 0x54, 0xC5, 0x70, 0xB5, 0x0F, 0xC5, 0x91, 0xB5, 0x30, 0xB4, 0xEF, 0xBD, 0x71, 0xC5, 0x92, 0xC5, 0x92, 0xCD, 0xD3, 0xCD, 0xF3, 0xD6, 0x14, 0xCD, 0xD3, 0xCD, 0xD2, 0xD5, 0xF3, 0xDE, 0x34, 0xD6, 0x14, 0xDE, 0x35, 0xDE, 0x56, 0xDE, 0x96, 0xAC, 0xEF, 0xAC, 0xCF, 0x94, 0x2E, 0x73, 0x6C, 0x39, 0xA6, 0x29, 0x44, 0x39, 0xC6, 0x4A, 0x68, 0x52, 0x89, 0x52, 0x69, 0x73, 0x8D, 0x83, 0xEF, 0x94, 0x71, 0x73, 0x6D, 0x9C, 0xD3, 0xEF, 0x5D, 0xF7, 0x9E, 0xD6, 0x79, 0x84, 0x0E, 0x8C, 0x2E, 0x8B, 0xEE, 0x8C, 0x2E, 0x8C, 0x2E, 0x8C, 0x0D, 0xAC, 0xCF, 0xAC, 0xAF, 0xC5, 0x72, 0xCD, 0xF3, 0xC5, 0xB2, 0xAC, 0xCF, 0xA4, 0xAE, 0xA4, 0xAF, 0xAC, 0xF0, 0xAC, 0xAF, 0xA4, 0x8E, 0xAC, 0xAF, 0xB5, 0x10, 0xCD, 0xD3, 0xBD, 0x51, 0xB5, 0x10, 0xBD, 0x30, 0xB5, 0x30, 0xB5, 0x30, 0xB5, 0x30, 0xB5, 0x10, 0xBD, 0x51, 0xB5, 0x30, 0xB5, 0x10, 0xA4, 0x6D, 0xAC, 0xAE, 0xC5, 0x71, 0xBD, 0x50, 0xA4, 0x8E, 0xA4, 0x6D, 0xAC, 0xCE, 0xB4, 0xCE, 0xA4, 0x8E, 0xA4, 0x8E, 0x8B, 0xCB, 0x94, 0x2D, 0xAC, 0xEF, 0xB5, 0x0F, 0xAC, 0xCF, 0xB5, 0x10, 0x6B, 0x0A, 0x41, 0xE7, 0x52, 0x89, 0x4A, 0x49, 0x42, 0x28, 0x31, 0x86, 0x52, 0x8A, 0x62, 0xEB, 0x73, 0x4D, 0x83, 0xEF, 0xCE, 0x17, 0xCD, 0xD6, 0xA4, 0xB2, 0x73, 0x4D, 0xC5, 0xF7, 0xAD, 0x75, 0xAD, 0x55, 0xB5, 0x75, 0x94, 0x72, 0xAD, 0x75, 0x94, 0x71, 0xAD, 0x55, 0xAD, 0x55, 0xC6, 0x18, 0xB5, 0x76, 0x94, 0x92, 0xBD, 0xB6, 0xCE, 0x59, 0xAD, 0x55, 0x8C, 0x30, 0xBD, 0xB4, 0xB5, 0x31, 0xAC, 0xF0, 0xBD, 0xB3, 0xC5, 0xF4, 0xB5, 0x52, 0xB5, 0x72, 0xBD, 0xD4, 0xBD, 0xD4, 0xAD, 0x52, 0x9C, 0xD1, 0x4A, 0x48, 0x5A, 0xCA, 0x73, 0x6D, 0x73, 0xAE, 0x7B, 0xAE, 0x83, 0xEF, 0x5A, 0xCB, 0x4A, 0x49, 0x52, 0x8A, 0x52, 0x8A, 0x6B, 0x4D, 0x7B, 0xAF, 0x84, 0x31, 0xA5, 0x14, 0xAD, 0x76, 0xCE, 0x58, 0xCE, 0x37, 0xB5, 0x73, 0xB5, 0x73, 0xAD, 0x32, 0xD6, 0x76, 0xDE, 0x96, 0xD6, 0x76, 0xD6, 0x76, 0xD6, 0x56, 0xBD, 0x73, 0xAD, 0x11, 0xAD, 0x11, 0x9C, 0xD0, 0x94, 0x8F, 0xC5, 0xB4, 0xCE, 0x15, 0xC5, 0xB3, 0xAD, 0x31, 0x9C, 0x8F, 0xA4, 0xF0, 0xBD, 0xB3, 0xBD, 0x93, 0xAD, 0x11, 0xC5, 0xB3, 0xC5, 0xB3, 0xBD, 0x51, 0xB5, 0x11, 0xBD, 0x73, 0xBD, 0x31, 0xB4, 0xF0, 0xBD, 0x52, 0xB5, 0x11, 0xBD, 0x52, 0xCD, 0xD3, 0xCD, 0xF4, 0xB5, 0x32, 0xAD, 0x11, 0xBD, 0x94, 0xB5, 0x73, 0xBD, 0x93, 0xBD, 0xB4, 0xAD, 0x32, 0xB5, 0x73, 0xBD, 0x93, 0xBD, 0x94, 0xB5, 0x52, 0xC5, 0xF5, 0xB5, 0x53, 0xAD, 0x32, 0x94, 0x6F, 0x9C, 0xB0, 0x9C, 0xB0, 0x9C, 0xB0, 0xB5, 0x73, 0xA4, 0xF1, 0x94, 0x6F, 0x83, 0xCC, 0x7B, 0x8B, 0x7B, 0x8C, 0x7B, 0xAC, 0x83, 0xCD, 0x83, 0xCD, 0x83, 0xAC, 0xA4, 0xAF, 0xB5, 0x31, 0xBD, 0x52, 0xBD, 0x72, 0xAC, 0xF1, 0xAC, 0xF1, 0xA4, 0x8F, 0x9C, 0x4E, 0xB5, 0x32, 0x94, 0x2E, 0x7B, 0x8C, 0x7B, 0xAC, 0x83, 0xCD, 0x9C, 0x6E, 0x8C, 0x0D, 0x8B, 0xCC, 0x8B, 0xED, 0x94, 0x0D, 0x94, 0x0D, 0xAC, 0xD0, 0xB5, 0x31, 0xB5, 0x31, 0xAC, 0xF0, 0x8B, 0xCD, 0x83, 0xAC, 0x9C, 0x6F, 0xAD, 0x11, 0xB5, 0x52, 0xA4, 0xD1, 0xC5, 0xB4, 0xB5, 0x52, 0xAD, 0x32, 0xAD, 0x12, 0xAD, 0x12, 0x9C, 0x90, 0x7B, 0xCD, 0x39, 0xC6, 0x31, 0x85, 0x29, 0x65, 0x39, 0xA6, 0x42, 0x28, 0x42, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x49, 0x7B, 0xAE, 0x83, 0xCE, 0x73, 0x2C, 0x5A, 0x69, 0x7B, 0x6D, 0xB5, 0x13, 0x94, 0x2F, 0x62, 0xCA, 0x62, 0xCA, 0x8C, 0x0E, 0xB5, 0x52, 0xBD, 0xB3, 0xAD, 0x12, 0xBD, 0x94, 0xBD, 0x73, 0xB5, 0x32, 0xB5, 0x32, 0xBD, 0x73, 0xB5, 0x73, 0xB5, 0x53, 0xB5, 0x53, 0xA4, 0xF1, 0xA4, 0xD1, 0xA4, 0xD1, 0xA4, 0xD1, 0xAC, 0xF1, 0xAC, 0xF1, 0xAC, 0xF2, 0xAD, 0x12, 0xAC, 0xF2, 0xA4, 0xD1, 0xB5, 0x32, 0xB5, 0x11, 0xAC, 0xD0, 0xC5, 0x72, 0xCD, 0xD3, 0xCD, 0xD3, 0xCD, 0xD3, 0xC5, 0x92, 0xCD, 0xD3, 0xCD, 0xF4, 0xD6, 0x14, 0xD5, 0xF4, 0xCD, 0xB3, 0xCD, 0xB3, 0xD6, 0x14, 0xDE, 0x34, 0xDE, 0x54, 0xE6, 0x75, 0xE6, 0x95, 0xEE, 0xD6, 0xE6, 0x95, 0xD5, 0xF3, 0x5B, 0x0B, 0x2A, 0x04, 0x32, 0x85, 0x42, 0xE5, 0x32, 0x63, 0x3A, 0x64, 0x3A, 0x65, 0x3A, 0x44, 0x53, 0x28, 0x53, 0x67, 0x4B, 0x45, 0x43, 0x04, 0x74, 0x2A, 0xA5, 0x8F, 0xA5, 0x6F, 0xA5, 0x70, 0xBE, 0x34, 0xE7, 0x18, 0xDE, 0xD7, 0xD6, 0x34, 0xB5, 0x0F, 0xCD, 0xD3, 0xBD, 0x50, 0xBD, 0x51, 0xBD, 0x72, 0xBD, 0x92, 0xBD, 0x92, 0xBD, 0x72, 0xC5, 0x92, 0xCD, 0xB2, 0xCD, 0xB2, 0xCD, 0xB2, 0xCD, 0xD2, 0xDE, 0x34, 0xC5, 0x71, 0xCD, 0xB2, 0xCD, 0xF4, 0xDE, 0x35, 0xB5, 0x0F, 0xAC, 0xEE, 0xAC, 0xF0, 0xBD, 0xD4, 0x9C, 0xD1, 0x52, 0x89, 0x29, 0x64, 0x31, 0x85, 0x39, 0xC6, 0x4A, 0x69, 0x39, 0xA6, 0x42, 0x07, 0x52, 0x89, 0x4A, 0x28, 0x5A, 0xCB, 0xCE, 0x38, 0xE7, 0x1C, 0x8C, 0x30, 0x29, 0x25, 0x29, 0x24, 0x39, 0xE7, 0x94, 0x91, 0x9C, 0xD1, 0x8C, 0x2E, 0xAC, 0xCF, 0xC5, 0x92, 0xD6, 0x35, 0xBD, 0x51, 0xB5, 0x31, 0xBD, 0x72, 0xBD, 0x52, 0xB5, 0x31, 0xBD, 0x52, 0xBD, 0x72, 0xBD, 0x72, 0xC5, 0x93, 0xC5, 0xB3, 0xCD, 0xD3, 0xC5, 0x92, 0xBD, 0x71, 0xD5, 0xF3, 0xBD, 0x51, 0xB5, 0x51, 0xBD, 0x51, 0xB5, 0x31, 0xBD, 0x52, 0xC5, 0x92, 0xDE, 0x35, 0xAC, 0xAF, 0xB4, 0xEF, 0xD5, 0xF3, 0xDD, 0xF3, 0xCD, 0xB2, 0xC5, 0x51, 0xC5, 0x51, 0xCD, 0x92, 0xCD, 0xB2, 0xBD, 0x31, 0xBD, 0x31, 0xAC, 0xCF, 0xA4, 0x6D, 0xA4, 0x8E, 0xAC, 0xCF, 0xC5, 0x71, 0xB4, 0xF0, 0x73, 0x4B, 0x83, 0xCE, 0x73, 0x6D, 0x42, 0x08, 0x39, 0xA7, 0x62, 0xEC, 0x73, 0x8E, 0x94, 0x92, 0xA4, 0xF3, 0xC5, 0xF7, 0xDE, 0x59, 0xA4, 0x92, 0xB5, 0x34, 0x6B, 0x0B, 0x52, 0x69, 0x4A, 0x69, 0x6B, 0x4D, 0x73, 0x8E, 0xBD, 0xB6, 0xB5, 0x96, 0xAD, 0x34, 0xC5, 0xF7, 0xB5, 0x75, 0xA5, 0x14, 0x62, 0xCB, 0x7B, 0xAF, 0xBD, 0xB6, 0x94, 0x92, 0x8C, 0x0E, 0x9C, 0x8E, 0xA4, 0xAE, 0xAD, 0x10, 0xAC, 0xF0, 0xAD, 0x10, 0xA5, 0x10, 0xAC, 0xF0, 0xAD, 0x11, 0xAD, 0x31, 0xA4, 0xF1, 0xB5, 0x73, 0x83, 0xEE, 0x63, 0x0B, 0x5A, 0xCA, 0x5A, 0xCA, 0x52, 0x89, 0x4A, 0x28, 0x4A, 0x69, 0x4A, 0x69, 0x4A, 0x69, 0x41, 0xE7, 0x5A, 0xCB, 0x63, 0x0C, 0x73, 0xAE, 0x8C, 0x31, 0x9C, 0xF4, 0xBD, 0xF8, 0xD6, 0xBA, 0xB5, 0x74, 0xAD, 0x32, 0x9C, 0x8F, 0xC5, 0xF4, 0xCE, 0x55, 0xD6, 0x55, 0xD6, 0x56, 0xCE, 0x15, 0xB5, 0x73, 0xB5, 0x72, 0xB5, 0x52, 0xA4, 0xD1, 0x9C, 0xD0, 0xBD, 0xD4, 0xD6, 0x35, 0xBD, 0x93, 0xA4, 0xB0, 0x94, 0x6F, 0x9C, 0xB0, 0xAD, 0x31, 0xBD, 0xB3, 0xB5, 0x32, 0xC5, 0xB4, 0xCD, 0xD3, 0xBD, 0x51, 0xB5, 0x32, 0xC5, 0x73, 0xC5, 0x52, 0xC5, 0x52, 0xBD, 0x52, 0xB5, 0x11, 0xBD, 0x72, 0xC5, 0xD3, 0xCD, 0xF4, 0xB5, 0x11, 0xB5, 0x53, 0xC5, 0xF5, 0xBD, 0xB4, 0xBD, 0xB4, 0xBD, 0xB4, 0xB5, 0x73, 0xAD, 0x52, 0xA5, 0x11, 0xBD, 0xB4, 0xBD, 0xD4, 0xCE, 0x36, 0xB5, 0x52, 0xB5, 0x73, 0xA4, 0xD0, 0xAD, 0x11, 0xAD, 0x11, 0xAD, 0x52, 0xBD, 0x94, 0xBD, 0x93, 0xA4, 0xD1, 0x8C, 0x2E, 0x7B, 0xAC, 0x73, 0x2A, 0x73, 0x2A, 0x8C, 0x2E, 0x94, 0x4F, 0x94, 0x2E, 0x9C, 0x6F, 0xAC, 0xF0, 0xC5, 0x92, 0xBD, 0x72, 0xB5, 0x11, 0xB5, 0x10, 0x9C, 0x4E, 0x8B, 0xCC, 0xBD, 0x52, 0x94, 0x4E, 0x83, 0xED, 0x94, 0x4F, 0x9C, 0x90, 0xB5, 0x52, 0xBD, 0x93, 0xB5, 0x52, 0xAD, 0x11, 0xB5, 0x52, 0xA4, 0xD0, 0xB5, 0x11, 0xBD, 0x72, 0xC5, 0xB2, 0xB5, 0x31, 0xA4, 0xD0, 0x94, 0x2E, 0xA4, 0xD0, 0xBD, 0x73, 0xAD, 0x11, 0xBD, 0x93, 0xBD, 0xB3, 0xAD, 0x11, 0xB5, 0x73, 0xAD, 0x11, 0xAD, 0x32, 0xAD, 0x11, 0xCE, 0x36, 0x9C, 0xB1, 0x52, 0x89, 0x39, 0xA6, 0x39, 0xC6, 0x39, 0xA6, 0x42, 0x07, 0x4A, 0x48, 0x4A, 0x68, 0x52, 0x89, 0x4A, 0x28, 0x73, 0x8D, 0x94, 0x51, 0x73, 0x2C, 0x52, 0x48, 0x9C, 0x50, 0x94, 0x2F, 0x83, 0xAE, 0x73, 0x4C, 0x8C, 0x0E, 0xAD, 0x10, 0xBD, 0x93, 0xBD, 0x73, 0xE6, 0x97, 0xC5, 0xB4, 0xBD, 0x93, 0xC5, 0xB4, 0xBD, 0x93, 0xBD, 0x93, 0xC5, 0xD4, 0xB5, 0x52, 0xCD, 0xF5, 0xCE, 0x15, 0xCD, 0xF5, 0xCD, 0xD5, 0xC5, 0xD5, 0xCD, 0xF5, 0xCD, 0xD5, 0xC5, 0xD5, 0xC5, 0xB5, 0xC5, 0xB4, 0xBD, 0x94, 0xB5, 0x53, 0xB5, 0x53, 0xB5, 0x52, 0xB5, 0x32, 0xB5, 0x12, 0xB5, 0x12, 0xAC, 0xF1, 0xA4, 0xB0, 0xA4, 0xB0, 0xA4, 0xB0, 0x9C, 0x70, 0x9C, 0x70, 0x94, 0x4F, 0x94, 0x4E, 0x94, 0x4E, 0x9C, 0x4F, 0x9C, 0x8F, 0xAC, 0xF0, 0xB5, 0x31, 0xBD, 0x32, 0xAD, 0x11, 0x6B, 0xCD, 0x19, 0x42, 0x32, 0x65, 0x6C, 0x0A, 0x3A, 0x44, 0x53, 0x08, 0x42, 0x86, 0x6B, 0xCB, 0x6B, 0xEB, 0x5B, 0x47, 0x7C, 0x4B, 0x9D, 0x4F, 0xB5, 0xF2, 0xC6, 0x54, 0xCE, 0x54, 0x9C, 0xCD, 0xC5, 0xF3, 0xDE, 0x75, 0xBD, 0x72, 0xA4, 0x8E, 0xBD, 0x91, 0xCD, 0xD3, 0xBD, 0x51, 0xA4, 0xAE, 0xBD, 0x72, 0xB5, 0x30, 0xB5, 0x30, 0xB5, 0x51, 0xBD, 0x51, 0xCD, 0xD3, 0xD5, 0xF3, 0xBD, 0x51, 0xC5, 0x92, 0xD6, 0x14, 0xAC, 0xEF, 0xC5, 0xB2, 0xD6, 0x34, 0xDE, 0x34, 0xBD, 0x30, 0xB4, 0xCE, 0xA4, 0xCF, 0xBD, 0xB4, 0xB5, 0x53, 0xB5, 0x53, 0x7B, 0x8D, 0x39, 0xC6, 0x29, 0x44, 0x39, 0xC6, 0x41, 0xE6, 0x39, 0xA6, 0x31, 0x85, 0x5A, 0xEB, 0x62, 0xEC, 0x4A, 0x49, 0x5A, 0xEB, 0x83, 0xEF, 0x73, 0x8E, 0x4A, 0x48, 0x31, 0xA6, 0x6B, 0x4C, 0xAD, 0x53, 0x94, 0x70, 0xA4, 0x8F, 0xB5, 0x31, 0xAC, 0xF0, 0xB5, 0x31, 0xBD, 0x72, 0xA4, 0xF0, 0xA4, 0xD0, 0xA4, 0xD0, 0xB5, 0x31, 0xB5, 0x31, 0xBD, 0x72, 0xBD, 0x73, 0xBD, 0xB3, 0xBD, 0x92, 0xC5, 0xB3, 0xBD, 0x51, 0xB5, 0x31, 0xAC, 0xD0, 0xAC, 0xF1, 0xAD, 0x11, 0xA4, 0xD0, 0xB5, 0x31, 0xBD, 0x72, 0xD5, 0xF4, 0xAC, 0x8E, 0xAC, 0x8E, 0xC5, 0x51, 0xCD, 0x92, 0xD5, 0xD3, 0xDE, 0x14, 0xDD, 0xF3, 0xD5, 0xF3, 0xCD, 0xB2, 0xBD, 0x51, 0xBD, 0x71, 0xD5, 0xD3, 0xCD, 0xB2, 0xCD, 0x91, 0xCD, 0x92, 0xCD, 0xD2, 0xC5, 0x92, 0x8C, 0x0D, 0x6B, 0x2B, 0x6B, 0x4C, 0x39, 0xC6, 0x31, 0x66, 0x4A, 0x49, 0x4A, 0x69, 0x5A, 0xEB, 0x83, 0xEF, 0x9C, 0x92, 0x94, 0x51, 0x8C, 0x10, 0xBD, 0x54, 0xAC, 0xB2, 0x6A, 0xCB, 0x39, 0xA7, 0x73, 0x8E, 0x8C, 0x51, 0xBD, 0xB7, 0xAD, 0x55, 0x7B, 0xCF, 0xA4, 0xF3, 0x7B, 0xCF, 0x4A, 0x49, 0x5A, 0xCB, 0x7B, 0xAF, 0xCE, 0x18, 0xC5, 0xF7, 0xA4, 0xD1, 0x94, 0x2D, 0x9C, 0x4D, 0x9C, 0x6E, 0x8C, 0x0C, 0x8C, 0x0D, 0x94, 0x2D, 0xA4, 0xD0, 0x9C, 0x8F, 0xA4, 0xAF, 0xAD, 0x11, 0xB5, 0x31, 0x9C, 0xB0, 0x4A, 0x07, 0x42, 0x27, 0x42, 0x07, 0x41, 0xE7, 0x52, 0x69, 0x52, 0x89, 0x4A, 0x48, 0x4A, 0x49, 0x39, 0xC6, 0x42, 0x28, 0x63, 0x0C, 0x6B, 0x6E, 0x73, 0xAF, 0x8C, 0x72, 0xAD, 0x76, 0xC6, 0x18, 0xBD, 0xB6, 0xAD, 0x12, 0xA5, 0x11, 0xBD, 0xB4, 0xC5, 0xF5, 0xC6, 0x15, 0xC6, 0x15, 0xC6, 0x15, 0xBD, 0xD4, 0xBD, 0xD4, 0xBD, 0xB4, 0xB5, 0x73, 0xAD, 0x32, 0xC5, 0xD5, 0xCE, 0x15, 0xCE, 0x15, 0xC5, 0xD4, 0xBD, 0xB4, 0x9C, 0xB0, 0xAD, 0x31, 0xBD, 0x92, 0xAD, 0x11, 0xCD, 0xD4, 0xCD, 0xF3, 0xC5, 0x71, 0xBD, 0x72, 0xC5, 0x72, 0xBD, 0x31, 0xC5, 0x52, 0xC5, 0x93, 0xAC, 0xAF, 0xB5, 0x51, 0xC5, 0x93, 0xD6, 0x35, 0xAD, 0x11, 0xB5, 0x52, 0xC5, 0xF5, 0xBD, 0xD4, 0xBD, 0xB4, 0xB5, 0x94, 0xB5, 0x93, 0xBD, 0x94, 0xB5, 0xB4, 0xBD, 0xD4, 0xC5, 0xF5, 0xCE, 0x15, 0xB5, 0x32, 0xBD, 0x73, 0xAD, 0x32, 0xB5, 0x32, 0xA4, 0xF1, 0xAD, 0x12, 0xB5, 0x53, 0xB5, 0x73, 0x9C, 0xB0, 0x94, 0x70, 0x8C, 0x2F, 0x94, 0x70, 0x8C, 0x2E, 0xA4, 0xD1, 0x8C, 0x0E, 0x9C, 0x90, 0x94, 0x6E, 0xA4, 0xB0, 0xAC, 0xD0, 0xAC, 0xF0, 0x94, 0x4E, 0x83, 0xAC, 0x7B, 0x6B, 0x8B, 0xCD, 0xBD, 0x53, 0x94, 0x2E, 0x8C, 0x2E, 0x94, 0x6F, 0xA4, 0xF1, 0xB5, 0x72, 0xC5, 0xD4, 0xC5, 0xD4, 0xC5, 0xB3, 0xC5, 0xD4, 0xB5, 0x32, 0xB5, 0x51, 0xCD, 0xF4, 0xCE, 0x14, 0xBD, 0x72, 0xAD, 0x11, 0x83, 0xCD, 0xBD, 0x93, 0xBD, 0xB4, 0xB5, 0x52, 0xB5, 0x73, 0xB5, 0x52, 0xAC, 0xF1, 0xBD, 0xB3, 0xAD, 0x31, 0xAD, 0x32, 0xAD, 0x11, 0xCE, 0x35, 0xC5, 0xF5, 0xB5, 0x94, 0x63, 0x2B, 0x31, 0xA6, 0x31, 0xA5, 0x31, 0x85, 0x42, 0x07, 0x4A, 0x68, 0x52, 0x8A, 0x42, 0x28, 0x4A, 0x48, 0x63, 0x0B, 0x7B, 0x6D, 0x6A, 0xEB, 0x52, 0x28, 0x93, 0xEF, 0x9C, 0x70, 0x8B, 0xEE, 0x94, 0x6E, 0x9C, 0x8D, 0xA4, 0xEF, 0x9C, 0x6F, 0xDE, 0x56, 0xDE, 0x55, 0xDE, 0x35, 0xCD, 0xD4, 0xCD, 0xD4, 0xC5, 0xB3, 0xC5, 0x93, 0xCD, 0xD4, 0xD6, 0x35, 0xDE, 0x56, 0xDE, 0x76, 0xDE, 0x56, 0xCD, 0xD4, 0xC5, 0xD5, 0xCE, 0x15, 0xD6, 0x16, 0xDE, 0x77, 0xD6, 0x56, 0xD6, 0x36, 0xD6, 0x16, 0xCD, 0xD5, 0xD6, 0x16, 0xB5, 0x52, 0x9C, 0x90, 0xA4, 0xF1, 0xB5, 0x74, 0xB5, 0x32, 0xB5, 0x53, 0xBD, 0x94, 0xBD, 0x53, 0xB5, 0x33, 0xBD, 0x74, 0xCD, 0xF5, 0xD6, 0x36, 0xC5, 0xD5, 0xCE, 0x15, 0xD6, 0x76, 0xC5, 0xB4, 0xC5, 0xB4, 0xC5, 0xD5, 0x53, 0x0A, 0x29, 0xA4, 0x42, 0xA6, 0x6B, 0xC9, 0x31, 0xC3, 0x42, 0x46, 0x31, 0xE4, 0x52, 0xE9, 0x6B, 0xAC, 0x84, 0x8F, 0x7C, 0x4D, 0x84, 0x8E, 0x9D, 0x30, 0xA5, 0x31, 0xAD, 0x71, 0xA4, 0xCE, 0xC5, 0x91, 0xD6, 0x13, 0xBD, 0x50, 0x9C, 0x2D, 0xB5, 0x30, 0xBD, 0x72, 0x9C, 0x4D, 0xAC, 0xCF, 0xC5, 0xB2, 0xBD, 0x92, 0x9C, 0x8E, 0xCD, 0xD3, 0xB5, 0x31, 0xC5, 0xD3, 0xCD, 0xB3, 0xB5, 0x30, 0xD5, 0xF4, 0xD6, 0x14, 0xBD, 0x51, 0xCD, 0xF4, 0xDE, 0x76, 0xE6, 0x96, 0xBD, 0x10, 0xAC, 0xAE, 0xAC, 0xF0, 0xBD, 0x93, 0xAD, 0x52, 0xB5, 0x74, 0xAD, 0x32, 0x9C, 0x90, 0x52, 0x89, 0x31, 0x65, 0x31, 0xA5, 0x31, 0x65, 0x31, 0x86, 0x4A, 0x69, 0x63, 0x0C, 0x52, 0x8A, 0x42, 0x28, 0x7B, 0xCF, 0xA4, 0xD2, 0x94, 0x50, 0x73, 0x6D, 0x42, 0x28, 0x73, 0xAE, 0xC5, 0xF6, 0xB5, 0x32, 0xA4, 0xAF, 0x9C, 0x6F, 0xA4, 0xD0, 0xAD, 0x11, 0xA4, 0xF1, 0x9C, 0xAF, 0xA4, 0xB0, 0xA4, 0xB0, 0xA4, 0xB0, 0xA4, 0xF1, 0xA4, 0xF1, 0xAD, 0x32, 0xB5, 0x52, 0xB5, 0x52, 0xAD, 0x11, 0xAD, 0x10, 0xA4, 0xF0, 0xA4, 0xD0, 0xA4, 0xF1, 0x9C, 0xB0, 0xA4, 0xD0, 0xAC, 0xF0, 0xC5, 0x92, 0xAC, 0xCF, 0xB5, 0x10, 0xCD, 0x92, 0xCD, 0x92, 0xCD, 0x91, 0xCD, 0x92, 0xC5, 0x71, 0xC5, 0x71, 0xD5, 0xD3, 0xCD, 0x92, 0xC5, 0x71, 0xD5, 0xF3, 0xD5, 0xF3, 0xD5, 0xF3, 0xDE, 0x13, 0xD5, 0xF3, 0xCD, 0xB2, 0x9C, 0x4E, 0x6B, 0x0A, 0x6B, 0x0B, 0x39, 0xA6, 0x41, 0xE8, 0x73, 0xAF, 0x5A, 0xCB, 0x52, 0x8A, 0x73, 0x4D, 0x6B, 0x4D, 0x73, 0x8E, 0x9C, 0xB2, 0xA4, 0xB2, 0x93, 0xCE, 0x8B, 0xAE, 0x73, 0x2C, 0x6B, 0x0B, 0x52, 0x49, 0x8C, 0x51, 0x84, 0x30, 0x52, 0x6A, 0x62, 0xEB, 0x6B, 0x4D, 0x9C, 0xF3, 0xCE, 0x59, 0xDE, 0xBB, 0xCE, 0x18, 0xCD, 0xF7, 0xAD, 0x13, 0x83, 0xCD, 0x7B, 0xAC, 0x7B, 0xAC, 0x94, 0x4F, 0xAD, 0x11, 0x9C, 0x8F, 0x9C, 0x8F, 0x7B, 0xAC, 0x62, 0xE9, 0x62, 0xC9, 0x73, 0x4B, 0x73, 0x6B, 0x62, 0xCA, 0x31, 0x64, 0x39, 0xA6, 0x39, 0xC6, 0x4A, 0x68, 0x52, 0x69, 0x4A, 0x68, 0x52, 0x89, 0x42, 0x28, 0x4A, 0x49, 0x63, 0x0C, 0x6B, 0x4E, 0x73, 0x8F, 0x84, 0x31, 0x9C, 0xF4, 0xB5, 0x96, 0xAD, 0x34, 0x9C, 0xB1, 0xAD, 0x12, 0xA4, 0xD1, 0x9C, 0xB0, 0x9C, 0x90, 0x9C, 0x90, 0xA4, 0xF1, 0xB5, 0x52, 0xBD, 0x93, 0xBD, 0x94, 0xBD, 0x73, 0xB5, 0x73, 0xBD, 0xB4, 0xBD, 0x93, 0xB5, 0x52, 0xB5, 0x52, 0xB5, 0x73, 0xB5, 0x52, 0xC5, 0xF4, 0xD6, 0x56, 0xB5, 0x31, 0xC5, 0x73, 0xC5, 0xB3, 0xC5, 0x92, 0xD5, 0xF4, 0xD6, 0x14, 0xD5, 0xF4, 0xD5, 0xF4, 0xD6, 0x15, 0xB4, 0xF0, 0xAC, 0xCF, 0xBD, 0x72, 0xDE, 0x76, 0xAD, 0x11, 0xB5, 0x73, 0xD6, 0x77, 0xBD, 0xF5, 0xC5, 0xF5, 0xBD, 0xD4, 0xCE, 0x15, 0xBD, 0x93, 0xBD, 0xD4, 0xCE, 0x56, 0xBD, 0xD4, 0xC5, 0xD4, 0xAD, 0x32, 0xB5, 0x72, 0xB5, 0x73, 0xAD, 0x32, 0xA4, 0xD0, 0xA4, 0xF1, 0xB5, 0x73, 0xAD, 0x32, 0x9C, 0xB0, 0x9C, 0x90, 0x9C, 0x90, 0x9C, 0x90, 0x94, 0x6F, 0xA4, 0xD1, 0x94, 0x6F, 0xA4, 0xD1, 0xA4, 0xD0, 0xAD, 0x11, 0xA4, 0xD0, 0xA4, 0xD0, 0x62, 0xE9, 0x6B, 0x0A, 0x7B, 0x8C, 0xA4, 0x90, 0xBD, 0x53, 0x8C, 0x0E, 0x94, 0x6F, 0x9C, 0x90, 0xAD, 0x32, 0xBD, 0x93, 0xC5, 0xD4, 0xC5, 0xF4, 0xCD, 0xF4, 0xCD, 0xF4, 0xBD, 0x93, 0xB5, 0x51, 0xB5, 0x72, 0xBD, 0x92, 0xC5, 0xB3, 0xAC, 0xF1, 0x8C, 0x2E, 0xBD, 0xB4, 0xBD, 0x93, 0xAD, 0x11, 0xA4, 0xF0, 0xB5, 0x52, 0xA4, 0xF0, 0xC5, 0xD4, 0xAD, 0x11, 0xA4, 0xD0, 0xB5, 0x72, 0xCE, 0x15, 0xBD, 0xB3, 0xB5, 0x94, 0xB5, 0x74, 0x73, 0xAD, 0x42, 0x07, 0x31, 0xA6, 0x39, 0xC6, 0x42, 0x28, 0x52, 0x89, 0x52, 0x69, 0x4A, 0x69, 0x62, 0xEB, 0x8B, 0xEF, 0x73, 0x2C, 0x73, 0x2C, 0x73, 0x0B, 0x94, 0x0F, 0x83, 0x8C, 0x62, 0xC8, 0x83, 0xEB, 0xB5, 0x91, 0x7B, 0x6B, 0xAC, 0xD0, 0xE6, 0x96, 0xE6, 0x96, 0xE6, 0xB7, 0xE6, 0x76, 0xE6, 0x76, 0xDE, 0x56, 0xDE, 0x76, 0xE6, 0x76, 0xE6, 0x97, 0xE6, 0xB7, 0xE6, 0xB8, 0xDE, 0x77, 0xDE, 0x77, 0xD6, 0x56, 0xDE, 0x77, 0xDE, 0x97, 0xDE, 0x77, 0xDE, 0x57, 0xD6, 0x56, 0xDE, 0x56, 0xDE, 0x97, 0xDE, 0x77, 0xA4, 0xD1, 0x9C, 0x90, 0x9C, 0x90, 0x94, 0x50, 0x7B, 0xAD, 0x9C, 0x90, 0xC5, 0xB4, 0xD6, 0x15, 0xD6, 0x36, 0x9C, 0x70, 0xB5, 0x53, 0xDE, 0x76, 0xDE, 0x77, 0x9C, 0x90, 0x7B, 0x8C, 0x83, 0xCD, 0x94, 0x2F, 0x6B, 0x8B, 0x4A, 0x87, 0x53, 0x08, 0x52, 0xC7, 0x39, 0xE5, 0x52, 0xC8, 0x63, 0x6A, 0x73, 0xED, 0x73, 0xED, 0x84, 0x90, 0x9D, 0x53, 0x84, 0xAF, 0x9D, 0x51, 0x8C, 0xAE, 0x9C, 0xEF, 0xAC, 0xEF, 0xAC, 0xEE, 0xB5, 0x0F, 0xB4, 0xEF, 0xA4, 0x8E, 0x9C, 0x6D, 0xAC, 0xCF, 0xA4, 0xAE, 0xA4, 0x8E, 0xAC, 0xCF, 0xA4, 0x8E, 0x94, 0x0C, 0x9C, 0x4D, 0x9C, 0x6D, 0xA4, 0xAE, 0xA4, 0x6D, 0xA4, 0x8E, 0xB5, 0x10, 0xBD, 0x51, 0xB4, 0xEF, 0xBD, 0x31, 0xCD, 0xF4, 0xD6, 0x34, 0xC5, 0x71, 0xAC, 0xAE, 0xA4, 0xAE, 0xAD, 0x10, 0xA5, 0x11, 0xB5, 0x93, 0xBD, 0x94, 0xB5, 0x93, 0xAD, 0x32, 0x73, 0x6B, 0x31, 0x85, 0x31, 0x65, 0x31, 0x65, 0x42, 0x07, 0x4A, 0x48, 0x4A, 0x69, 0x63, 0x0C, 0x42, 0x28, 0x9C, 0xD2, 0xA4, 0xD2, 0x94, 0x70, 0x94, 0xB2, 0x84, 0x10, 0x94, 0x92, 0xE7, 0x1B, 0xAD, 0x12, 0x7B, 0x6B, 0xA4, 0xD0, 0xBD, 0x93, 0xA4, 0xD0, 0x9C, 0x8F, 0x94, 0x6F, 0x8C, 0x2E, 0x94, 0x4F, 0x94, 0x4F, 0x9C, 0x6F, 0xA4, 0xF1, 0xAD, 0x32, 0xB5, 0x72, 0xAD, 0x11, 0xAD, 0x11, 0xA4, 0xAF, 0xA4, 0xD0, 0xA4, 0xD1, 0xA4, 0xD0, 0xA4, 0xD0, 0xA4, 0xD0, 0xB5, 0x31, 0xB4, 0xEF, 0xC5, 0x72, 0xC5, 0x71, 0xC5, 0x71, 0xC5, 0x30, 0xBD, 0x10, 0xC5, 0x51, 0xBD, 0x30, 0xCD, 0x92, 0xB4, 0xF0, 0xB5, 0x10, 0xCD, 0xB2, 0xD5, 0xF3, 0xD5, 0xF3, 0xDE, 0x34, 0xDE, 0x54, 0xBD, 0x51, 0x8B, 0xED, 0x73, 0x6D, 0x94, 0x71, 0x94, 0x92, 0xBD, 0xB7, 0xBD, 0xD7, 0x63, 0x2C, 0x4A, 0x49, 0x5A, 0xAA, 0x5A, 0xCB, 0x62, 0xEB, 0x8C, 0x30, 0x94, 0x50, 0x9C, 0x91, 0x94, 0x0F, 0x94, 0x0F, 0xAC, 0xB2, 0x9C, 0x91, 0x9C, 0xB2, 0x83, 0xEF, 0x73, 0x6E, 0x8C, 0x51, 0xBD, 0xF7, 0xD6, 0x9A, 0xDE, 0xDB, 0xBD, 0xF7, 0xE6, 0xFB, 0xEF, 0x3C, 0xD6, 0x59, 0xAC, 0xF2, 0x9C, 0x90, 0x9C, 0x90, 0x94, 0x6F, 0x9C, 0x90, 0x9C, 0x6F, 0x8C, 0x2E, 0x7B, 0xAC, 0x7B, 0xAD, 0x7B, 0xAD, 0x94, 0x4F, 0x9C, 0xB0, 0x9C, 0xD1, 0x62, 0xEA, 0x39, 0xC6, 0x39, 0xA5, 0x41, 0xE6, 0x39, 0xC6, 0x39, 0xE7, 0x42, 0x28, 0x4A, 0x29, 0x52, 0xAA, 0x63, 0x2C, 0x63, 0x0C, 0x5A, 0xCC, 0x73, 0xAF, 0x7C, 0x10, 0x8C, 0x51, 0xAD, 0x34, 0xB5, 0x74, 0xBD, 0xB4, 0xAD, 0x12, 0xB5, 0x53, 0xBD, 0x94, 0xB5, 0x52, 0xB5, 0x52, 0xAD, 0x32, 0xA4, 0xF1, 0xAD, 0x11, 0xB5, 0x52, 0xAC, 0xF1, 0xA4, 0xD0, 0x9C, 0x90, 0x9C, 0xB0, 0xA4, 0xB0, 0x9C, 0x8F, 0x9C, 0x8F, 0xA4, 0xD0, 0xA4, 0xF0, 0xAC, 0xF1, 0xAC, 0xD0, 0xA4, 0xAF, 0x9C, 0x6E, 0xA4, 0x8F, 0xAC, 0xCF, 0xAC, 0xD0, 0xAC, 0xF0, 0xAC, 0xD0, 0x9C, 0x6E, 0x9C, 0x6E, 0x9C, 0x6E, 0xAD, 0x11, 0x94, 0x4E, 0x94, 0x2E, 0x9C, 0xB0, 0xAD, 0x32, 0xA4, 0xF1, 0x94, 0x4E, 0x9C, 0x90, 0x8C, 0x2E, 0x94, 0x6F, 0xB5, 0x93, 0xC6, 0x15, 0xC5, 0xF5, 0xA4, 0xD0, 0x83, 0xED, 0x7B, 0xAC, 0x83, 0xED, 0xAD, 0x11, 0xA4, 0xF1, 0xB5, 0x73, 0xAD, 0x32, 0xAD, 0x32, 0xAD, 0x11, 0xB5, 0x53, 0xB5, 0x53, 0xB5, 0x73, 0xA5, 0x11, 0xAD, 0x32, 0xB5, 0x32, 0xAC, 0xF1, 0xB5, 0x52, 0xA4, 0xAF, 0xA4, 0xD0, 0x6B, 0x0A, 0x94, 0x4F, 0x9C, 0x8F, 0xA4, 0x90, 0xBD, 0x73, 0x8C, 0x0D, 0x9C, 0x90, 0xA4, 0xD0, 0xB5, 0x73, 0xC5, 0xD4, 0xC5, 0xD4, 0xC5, 0xD4, 0xC5, 0xF4, 0xC5, 0xD3, 0xBD, 0x93, 0xB5, 0x51, 0xBD, 0x92, 0xB5, 0x72, 0xBD, 0x93, 0xC5, 0xB4, 0xAD, 0x11, 0xC5, 0xD4, 0xB5, 0x73, 0xAD, 0x11, 0xB5, 0x52, 0xBD, 0xB4, 0xAD, 0x11, 0xC5, 0xD4, 0xAC, 0xF1, 0xA4, 0xD1, 0xBD, 0x93, 0xCE, 0x15, 0xB5, 0x93, 0xAD, 0x73, 0xAD, 0x32, 0xB5, 0x73, 0x83, 0xEE, 0x42, 0x27, 0x39, 0xC6, 0x42, 0x07, 0x42, 0x28, 0x4A, 0x69, 0x4A, 0x49, 0x4A, 0x28, 0x5A, 0xAA, 0x83, 0xCE, 0x73, 0x0C, 0x73, 0x0B, 0x8B, 0xAD, 0x73, 0x2B, 0x5A, 0xC8, 0x5B, 0x27, 0x9D, 0x0E, 0xB5, 0xB2, 0xB5, 0x70, 0xBD, 0xD0, 0xBD, 0xF1, 0xEF, 0x17, 0xEE, 0xD7, 0xDE, 0x76, 0xEE, 0xD7, 0xEE, 0xD7, 0xE6, 0x97, 0xE6, 0xB7, 0xDE, 0x97, 0xE6, 0xB8, 0xDE, 0xB8, 0xE6, 0xB8, 0xE6, 0xB8, 0xE6, 0xB8, 0xDE, 0x98, 0xDE, 0x98, 0xDE, 0x77, 0xDE, 0x97, 0xDE, 0x97, 0xEE, 0xF8, 0xEE, 0xF8, 0xAD, 0x12, 0xAD, 0x33, 0xC5, 0xD5, 0xC5, 0xF5, 0xBD, 0xB5, 0x9C, 0xB1, 0xB5, 0x12, 0xD6, 0x15, 0xC5, 0xB4, 0x7B, 0xAC, 0x94, 0x70, 0x8C, 0x2F, 0xAD, 0x32, 0x8C, 0x2F, 0x8C, 0x2F, 0x9C, 0x91, 0x9C, 0xB1, 0x8C, 0x6F, 0x5A, 0xC8, 0x52, 0xC8, 0x5B, 0x2A, 0x84, 0x4F, 0x7C, 0x2E, 0x8C, 0x6E, 0x73, 0xCC, 0x73, 0xCD, 0x6B, 0xAC, 0x52, 0xE9, 0x4A, 0xA8, 0x94, 0xF0, 0x84, 0x2C, 0x94, 0x4D, 0xA4, 0xAE, 0xA4, 0x8E, 0xB4, 0xEF, 0xAC, 0xCE, 0xAC, 0xCF, 0xBD, 0x71, 0xB5, 0x0F, 0xAC, 0xAE, 0xAC, 0xAE, 0xAC, 0xCF, 0xA4, 0x8E, 0xA4, 0x8E, 0xA4, 0x8E, 0xA4, 0x8E, 0xAC, 0xAE, 0xAC, 0xCF, 0xAC, 0xCF, 0xAC, 0xCF, 0xB4, 0xEF, 0xB4, 0xEF, 0xAC, 0xCF, 0xAC, 0xAE, 0xAC, 0x8D, 0xAC, 0xAE, 0xAC, 0xAE, 0xA4, 0x8E, 0x9C, 0x4D, 0x94, 0x2D, 0x94, 0x2D, 0x94, 0x4E, 0x8C, 0x0D, 0x8C, 0x2D, 0x94, 0x4E, 0x8B, 0xEC, 0x62, 0xA8, 0x31, 0x84, 0x31, 0xA5, 0x39, 0xC6, 0x4A, 0x48, 0x63, 0x0C, 0x52, 0xAA, 0x52, 0xAA, 0x83, 0xCF, 0x84, 0x0F, 0x7B, 0xAE, 0x73, 0x6D, 0x73, 0x8E, 0xD6, 0xBA, 0xEF, 0x1B, 0xB5, 0x33, 0x8B, 0xAD, 0xB4, 0xF1, 0x94, 0x4F, 0x8C, 0x0E, 0x8C, 0x2E, 0x8C, 0x0E, 0x8C, 0x2F, 0x9C, 0x90, 0xA4, 0xD1, 0x94, 0x6F, 0x94, 0x6F, 0xA4, 0xF1, 0xA4, 0xF1, 0xA4, 0xB0, 0x94, 0x4E, 0x9C, 0xB0, 0xA4, 0xF1, 0x9C, 0xB0, 0xAD, 0x11, 0xB5, 0x52, 0xBD, 0x31, 0xC5, 0x72, 0xCD, 0xB3, 0xC5, 0x51, 0xC5, 0x51, 0xBD, 0x31, 0xAC, 0xAF, 0xB4, 0xF0, 0xC5, 0x51, 0xCD, 0x72, 0xBD, 0x31, 0xBD, 0x51, 0xCD, 0x92, 0xD5, 0xD3, 0xCD, 0x92, 0xD5, 0xF3, 0xDE, 0x55, 0xA4, 0xB0, 0xB5, 0x95, 0xBD, 0xD6, 0xC5, 0xF7, 0xB5, 0xB6, 0x6B, 0x4D, 0x6B, 0x4D, 0x42, 0x08, 0x29, 0x45, 0x31, 0xA6, 0x42, 0x07, 0x42, 0x08, 0x7B, 0xAE, 0x8C, 0x30, 0xAD, 0x14, 0x8B, 0xEF, 0x9C, 0x50, 0xA4, 0xD2, 0xB5, 0x34, 0xCE, 0x18, 0xCE, 0x38, 0xCE, 0x38, 0xAD, 0x34, 0xD6, 0x79, 0x9C, 0xD3, 0xAD, 0x14, 0x94, 0x72, 0xAD, 0x55, 0xCE, 0x59, 0xF7, 0x5C, 0xBD, 0xB5, 0xAC, 0xF2, 0xAC, 0xF1, 0x9C, 0x8F, 0xA4, 0xD0, 0x94, 0x6F, 0x7B, 0xAC, 0x8C, 0x0E, 0x83, 0xCD, 0x8C, 0x2E, 0x9C, 0xB1, 0xAD, 0x12, 0x9C, 0xB0, 0x8C, 0x2E, 0x42, 0x06, 0x31, 0x85, 0x39, 0xC6, 0x39, 0xC6, 0x39, 0xE6, 0x39, 0xE7, 0x42, 0x08, 0x52, 0xAA, 0x5A, 0xCB, 0x63, 0x2D, 0x63, 0x0D, 0x6B, 0x6E, 0x73, 0x8E, 0x84, 0x30, 0xA5, 0x34, 0xB5, 0x75, 0xC5, 0xD6, 0xC5, 0xB4, 0xCE, 0x36, 0xBD, 0xB4, 0xBD, 0x94, 0xBD, 0x93, 0xBD, 0x73, 0xB5, 0x52, 0xC5, 0xD4, 0xDE, 0x97, 0xDE, 0x97, 0xBD, 0x93, 0xAC, 0xF1, 0xCD, 0xF5, 0xC5, 0xB4, 0xAC, 0xF1, 0x9C, 0x4F, 0x8C, 0x0E, 0x8C, 0x0D, 0x8C, 0x0E, 0x9C, 0x8F, 0xAD, 0x32, 0xBD, 0x73, 0xAC, 0xF1, 0xA4, 0x90, 0xA4, 0xB0, 0xA4, 0xB0, 0xA4, 0xB0, 0xA4, 0xB0, 0xAD, 0x11, 0xA4, 0xB0, 0x9C, 0x6F, 0xA4, 0xB0, 0xAC, 0xD1, 0xA4, 0xD1, 0x9C, 0xB0, 0x94, 0x4E, 0x9C, 0x8F, 0xAC, 0xF1, 0xAC, 0xF1, 0xA4, 0xB0, 0x9C, 0x90, 0x9C, 0x8F, 0xA4, 0xB0, 0xA4, 0xB0, 0xA4, 0xD1, 0xA4, 0xD1, 0x94, 0x4F, 0x83, 0xED, 0x83, 0xCD, 0x8B, 0xCD, 0x83, 0xCD, 0x8B, 0xED, 0x83, 0xCD, 0x83, 0xCD, 0x8C, 0x0E, 0x8C, 0x2E, 0x8C, 0x0E, 0x94, 0x2E, 0x9C, 0xB0, 0xAD, 0x11, 0xB5, 0x52, 0xA4, 0xF1, 0x83, 0xED, 0x6B, 0x2A, 0x94, 0x2E, 0x9C, 0x8F, 0x94, 0x2E, 0xBD, 0x53, 0x8B, 0xED, 0x9C, 0x6F, 0x9C, 0xB0, 0xAD, 0x32, 0xB5, 0x73, 0xB5, 0x52, 0xB5, 0x72, 0xBD, 0x93, 0xBD, 0x93, 0xBD, 0x93, 0xB5, 0x72, 0xBD, 0xB3, 0xBD, 0x93, 0xBD, 0x93, 0xC5, 0xB4, 0xAD, 0x11, 0xBD, 0xB4, 0xBD, 0x94, 0xBD, 0x93, 0xC5, 0xF5, 0xBD, 0x93, 0xB5, 0x53, 0xBD, 0xB3, 0xA4, 0xF0, 0xAD, 0x32, 0xBD, 0x93, 0xC5, 0xD4, 0xA5, 0x11, 0xAD, 0x73, 0xA4, 0xF2, 0xB5, 0x73, 0xBD, 0xD4, 0xB5, 0x52, 0x52, 0x67, 0x31, 0x85, 0x31, 0x85, 0x39, 0xE6, 0x42, 0x27, 0x4A, 0x68, 0x4A, 0x48, 0x8C, 0x30, 0x83, 0xAE, 0x73, 0x2C, 0x8B, 0xCE, 0x8B, 0xCD, 0x5A, 0xC7, 0x53, 0x26, 0x5B, 0x66, 0x94, 0xEE, 0x94, 0x8C, 0xA5, 0x6D, 0xAD, 0xAE, 0xD6, 0x93, 0xB5, 0xB1, 0x84, 0x2C, 0xDE, 0xB5, 0xEE, 0xF7, 0xEE, 0xD8, 0xEE, 0xF8, 0xE6, 0xB8, 0xDE, 0x97, 0xDE, 0xD8, 0xDE, 0x98, 0xDE, 0xB8, 0xDE, 0xB8, 0xE6, 0xD8, 0xE6, 0xD8, 0xDE, 0xB7, 0xDE, 0x97, 0xDE, 0xB8, 0xE6, 0xF8, 0xE6, 0xD8, 0xAD, 0x12, 0xAD, 0x12, 0xCE, 0x36, 0xD6, 0x77, 0xCE, 0x36, 0xC5, 0xD5, 0xD6, 0x36, 0xD6, 0x15, 0xCD, 0xF5, 0xB5, 0x53, 0xC6, 0x15, 0xA4, 0xD1, 0xBD, 0xD5, 0xCE, 0x37, 0xC6, 0x16, 0xCE, 0x16, 0xC5, 0xF6, 0x7C, 0x0E, 0x3A, 0x06, 0x6B, 0xAD, 0x73, 0xEE, 0x8C, 0xD1, 0x9D, 0x12, 0x8C, 0x6F, 0x94, 0x8F, 0xA5, 0x11, 0xB5, 0x52, 0xAD, 0x31, 0x94, 0x6E, 0x6B, 0x29, 0x62, 0xC8, 0x5A, 0xA8, 0x73, 0x4A, 0x62, 0xE9, 0x73, 0x6A, 0xA4, 0xD0, 0xAC, 0xD0, 0x9C, 0x6D, 0xAC, 0xCF, 0xC5, 0x92, 0xC5, 0x92, 0xC5, 0x92, 0xBD, 0x30, 0xBD, 0x51, 0xCD, 0xB2, 0xB5, 0x10, 0xB4, 0xEF, 0xAC, 0xCF, 0xB5, 0x10, 0xA4, 0x8E, 0xAC, 0xCE, 0xAC, 0x8E, 0xAC, 0xAE, 0xB4, 0xCF, 0xBD, 0x30, 0xD5, 0xD3, 0xC5, 0x51, 0xB5, 0x0F, 0xAC, 0xEF, 0xBD, 0x50, 0xBD, 0x30, 0xB5, 0x10, 0xB5, 0x30, 0xB5, 0x10, 0xB5, 0x30, 0xBD, 0x30, 0xBD, 0x30, 0x94, 0x2D, 0x52, 0x47, 0x29, 0x64, 0x39, 0xE7, 0x62, 0xEB, 0x5A, 0xCA, 0x5A, 0xCA, 0x63, 0x0C, 0x41, 0xE7, 0x41, 0xE7, 0x5A, 0xEB, 0x7B, 0xF0, 0xD6, 0x9A, 0xE7, 0x1C, 0xF7, 0x7D, 0xD6, 0x38, 0x94, 0x2F, 0xA4, 0xD1, 0x9C, 0x6F, 0x94, 0x4E, 0x8C, 0x0E, 0x8C, 0x0E, 0x94, 0x4F, 0xB5, 0x73, 0x9C, 0xB0, 0x83, 0xCD, 0x8C, 0x0E, 0x83, 0xCC, 0x73, 0x6B, 0x83, 0xCC, 0x8C, 0x0E, 0x94, 0x4F, 0x9C, 0x6F, 0xA4, 0xD0, 0xAD, 0x11, 0xBD, 0x72, 0xCD, 0xB2, 0xD5, 0xD3, 0xCD, 0xB2, 0xD5, 0xD3, 0xE6, 0x35, 0xD5, 0xB3, 0xC5, 0x51, 0xCD, 0x92, 0xC5, 0x92, 0xCD, 0xD3, 0xCD, 0x92, 0xCD, 0xB3, 0xDE, 0x34, 0xC5, 0x71, 0xBD, 0x31, 0xBD, 0x72, 0xA4, 0xD1, 0x94, 0x71, 0x73, 0x6D, 0x7B, 0xCF, 0x6B, 0x2C, 0x42, 0x28, 0x5A, 0xCB, 0x52, 0xAA, 0x4A, 0x49, 0x21, 0x04, 0x29, 0x45, 0x31, 0x65, 0x5A, 0xAA, 0x73, 0x8D, 0x8B, 0xEF, 0xA4, 0xB2, 0x94, 0x30, 0xA4, 0xD2, 0xA4, 0xD2, 0xBD, 0x95, 0xA4, 0xD3, 0xD6, 0x59, 0xD6, 0x38, 0xDE, 0x79, 0x8C, 0x10, 0xAD, 0x34, 0x73, 0xAE, 0x52, 0x8A, 0x7B, 0xAF, 0xDE, 0xDB, 0xCE, 0x38, 0x94, 0x91, 0x9C, 0xB1, 0xAC, 0xF1, 0xB5, 0x32, 0xAC, 0xF1, 0x9C, 0x8F, 0xA4, 0xD0, 0x9C, 0x90, 0x9C, 0x90, 0xD6, 0x57, 0xBD, 0xD5, 0x94, 0x50, 0x83, 0xEE, 0x63, 0x0B, 0x41, 0xE7, 0x42, 0x07, 0x39, 0xC6, 0x39, 0xE7, 0x41, 0xE7, 0x42, 0x07, 0x52, 0x8A, 0x52, 0x8A, 0x63, 0x0C, 0x6B, 0x4D, 0x63, 0x0C, 0x63, 0x2D, 0x83, 0xF0, 0x94, 0x92, 0xB5, 0x75, 0xC5, 0xD6, 0xC5, 0xD6, 0x8C, 0x50, 0x62, 0xCA, 0xB5, 0x74, 0x9C, 0x70, 0xA4, 0xD1, 0xAD, 0x11, 0xB5, 0x73, 0xD6, 0x56, 0xE6, 0xD8, 0xBD, 0x93, 0xBD, 0x73, 0xD6, 0x36, 0xC5, 0xB4, 0xB5, 0x72, 0xBD, 0x93, 0xB5, 0x52, 0xB5, 0x32, 0xAD, 0x12, 0xAD, 0x11, 0xC5, 0xD4, 0xC5, 0xF5, 0xC5, 0xD4, 0xAD, 0x11, 0xA4, 0xB0, 0x94, 0x4E, 0x8C, 0x0D, 0x94, 0x4F, 0xA4, 0xB0, 0x94, 0x4F, 0xB5, 0x32, 0xC5, 0xD4, 0xBD, 0x93, 0x9C, 0x6F, 0x9C, 0x6F, 0x9C, 0xB0, 0xC5, 0xB4, 0xCD, 0xF5, 0xD6, 0x56, 0xC5, 0xD4, 0xBD, 0x73, 0xAD, 0x11, 0x9C, 0x6F, 0xB5, 0x52, 0xAD, 0x11, 0xA4, 0xF1, 0xA4, 0xB0, 0xAD, 0x11, 0xAD, 0x11, 0xAC, 0xD1, 0xAC, 0xD0, 0xA4, 0xD0, 0xA4, 0xD1, 0xA4, 0xB0, 0xA4, 0xB0, 0xA4, 0xB0, 0x9C, 0x90, 0x9C, 0x90, 0x9C, 0x6F, 0x94, 0x2E, 0x94, 0x2E, 0x94, 0x0E, 0x9C, 0x4F, 0xA4, 0xB0, 0x9C, 0x6F, 0x94, 0x4E, 0x9C, 0x6F, 0xB5, 0x32, 0x9C, 0x6F, 0x8C, 0x2E, 0x83, 0xED, 0x94, 0x4E, 0x94, 0x6F, 0x83, 0xED, 0x94, 0x4E, 0xA4, 0xD0, 0xA4, 0xF0, 0xB5, 0x52, 0xBD, 0xB3, 0xC5, 0xD4, 0xCE, 0x15, 0xCE, 0x15, 0xCE, 0x14, 0xB5, 0x52, 0xBD, 0xB4, 0xC5, 0xD4, 0xC5, 0xB3, 0xCE, 0x36, 0xC5, 0xD4, 0xBD, 0xB4, 0xC5, 0xF4, 0x9C, 0xB0, 0x94, 0x6F, 0xA4, 0xF0, 0xA4, 0xF1, 0x94, 0x4E, 0xAD, 0x32, 0xAD, 0x32, 0xB5, 0x73, 0xBD, 0xD4, 0xDE, 0xB6, 0xBD, 0xD4, 0x52, 0x88, 0x31, 0xA5, 0x29, 0x64, 0x39, 0xC6, 0x4A, 0x48, 0x4A, 0x48, 0x62, 0xCA, 0x5A, 0xAA, 0x73, 0x2C, 0x83, 0x6D, 0x83, 0x8D, 0x5A, 0xC8, 0x42, 0xA5, 0x5B, 0x87, 0x42, 0x64, 0x84, 0x2B, 0x84, 0x8A, 0xBE, 0x50, 0x94, 0xEC, 0x74, 0x49, 0x6C, 0x09, 0xC6, 0x12, 0xD6, 0x34, 0xD6, 0x35, 0xD6, 0x36, 0xBD, 0xB4, 0xA5, 0x12, 0xAD, 0x53, 0xBD, 0xB5, 0xDE, 0xB8, 0xCE, 0x36, 0xDE, 0xB8, 0xDE, 0xD8, 0xD6, 0x77, 0xD6, 0x77, 0xDE, 0xB8, 0xE6, 0xF8, 0xDE, 0xB8, 0xAD, 0x12, 0xAD, 0x12, 0xCE, 0x36, 0xD6, 0x57, 0xC5, 0xD5, 0xBD, 0xB3, 0xD6, 0x15, 0xCD, 0xB3, 0xDE, 0x55, 0xCD, 0xD4, 0xC5, 0xD4, 0xC5, 0xD5, 0xCE, 0x36, 0xD6, 0x77, 0xD6, 0x57, 0xCE, 0x16, 0xD6, 0x77, 0x3A, 0x47, 0x74, 0x0E, 0x7C, 0x90, 0x84, 0xB1, 0x9D, 0x54, 0xA5, 0x74, 0x94, 0xB0, 0x9C, 0xD0, 0xC5, 0xF4, 0xDE, 0x76, 0xCE, 0x14, 0xB5, 0x11, 0x94, 0x4F, 0x6B, 0x0A, 0x6B, 0x0A, 0x8C, 0x2E, 0x7B, 0xCC, 0x94, 0x6F, 0xC5, 0xD5, 0xC5, 0xB3, 0xA4, 0x8E, 0xC5, 0x71, 0xD5, 0xF4, 0xDE, 0x55, 0xDE, 0x55, 0xD6, 0x14, 0xCD, 0xB2, 0xDE, 0x75, 0xDE, 0x55, 0xDE, 0x34, 0xD5, 0xF3, 0xD6, 0x14, 0xCD, 0xD3, 0xC5, 0x92, 0xCD, 0xB2, 0xD6, 0x14, 0xDE, 0x35, 0xCD, 0xB2, 0xDE, 0x34, 0xC5, 0x71, 0xB5, 0x0F, 0xC5, 0x92, 0xBD, 0x30, 0xB4, 0xEF, 0xAC, 0xAE, 0x9C, 0x2C, 0x94, 0x2C, 0x7B, 0x8A, 0x83, 0xAB, 0x94, 0x0D, 0x9C, 0x6E, 0x83, 0xAC, 0x52, 0x68, 0x42, 0x27, 0x42, 0x28, 0x39, 0xE6, 0x42, 0x07, 0x39, 0xE7, 0x42, 0x07, 0x39, 0xE7, 0x42, 0x28, 0x84, 0x10, 0xBD, 0xD7, 0xAD, 0x55, 0xD6, 0xBB, 0xEF, 0x3D, 0xE6, 0xFB, 0xBD, 0x74, 0xB5, 0x11, 0xBD, 0x52, 0xBD, 0x31, 0xB5, 0x31, 0xAC, 0xF0, 0xAC, 0xF0, 0xAC, 0xD0, 0xA4, 0xAF, 0xA4, 0xAF, 0x9C, 0x6E, 0x9C, 0x6E, 0x9C, 0x4E, 0x9C, 0x6E, 0x9C, 0x6E, 0x94, 0x2D, 0x94, 0x4E, 0x9C, 0x6E, 0xB5, 0x10, 0xA4, 0x4D, 0x9C, 0x2C, 0x9C, 0x2C, 0xA4, 0x6D, 0xB4, 0xCF, 0xBD, 0x10, 0xBC, 0xF0, 0xB4, 0xF0, 0xB5, 0x31, 0xBD, 0x72, 0xC5, 0x72, 0xCD, 0xB3, 0xDE, 0x35, 0xE6, 0x75, 0xEE, 0x95, 0xEE, 0xB7, 0xC5, 0xB3, 0x83, 0xCD, 0x52, 0x68, 0x7B, 0xCD, 0x8C, 0x2F, 0x94, 0x71, 0x8C, 0x50, 0x8C, 0x51, 0x9C, 0xF3, 0x83, 0xEF, 0x73, 0xAE, 0x63, 0x2C, 0x42, 0x28, 0x4A, 0x48, 0x6B, 0x0B, 0x83, 0xCE, 0x9C, 0x71, 0xA4, 0xD2, 0x9C, 0x71, 0x9C, 0x91, 0xB5, 0x35, 0x8C, 0x10, 0xB5, 0x75, 0xCE, 0x38, 0x8C, 0x10, 0x5A, 0xEB, 0x39, 0xC7, 0x31, 0xA7, 0x6B, 0x2D, 0xE7, 0x3C, 0xF7, 0xBE, 0xEF, 0x3D, 0xE6, 0xDA, 0xB5, 0x53, 0xB5, 0x11, 0xC5, 0x92, 0xC5, 0x72, 0xBD, 0x72, 0xAC, 0xD0, 0x94, 0x2F, 0xB5, 0x95, 0xDE, 0xDB, 0xC6, 0x17, 0x8C, 0x30, 0x7B, 0xAD, 0x52, 0x69, 0x39, 0xE6, 0x39, 0xC6, 0x4A, 0x68, 0x4A, 0x48, 0x39, 0xE7, 0x39, 0xE7, 0x42, 0x08, 0x4A, 0x49, 0x52, 0x69, 0x4A, 0x6A, 0x6B, 0x2D, 0x6B, 0x6D, 0x7B, 0xCF, 0x83, 0xF0, 0x73, 0x8E, 0x7B, 0xEF, 0x63, 0x0C, 0x94, 0x92, 0xD6, 0x99, 0xAD, 0x13, 0x94, 0x6F, 0xA4, 0xD0, 0xA4, 0xF1, 0xC5, 0xD4, 0xDE, 0xB8, 0xB5, 0x53, 0xC5, 0xD4, 0xCD, 0xF5, 0xBD, 0x94, 0xAD, 0x11, 0xB5, 0x52, 0xAC, 0xF1, 0xAD, 0x11, 0xAD, 0x11, 0xBD, 0x73, 0xBD, 0xB4, 0xC5, 0xD4, 0xC5, 0xF4, 0xC5, 0xF5, 0xC5, 0xF5, 0xB5, 0x52, 0x9C, 0x8F, 0xAD, 0x32, 0xBD, 0x73, 0xBD, 0x93, 0xCD, 0xF5, 0xC5, 0xF5, 0xD6, 0x77, 0xC5, 0xB4, 0xAC, 0xF1, 0xC5, 0xD4, 0xBD, 0xB3, 0xC5, 0xB3, 0xCD, 0xF4, 0xD6, 0x15, 0xCD, 0xF4, 0xC5, 0xB4, 0xA4, 0xF1, 0xAD, 0x12, 0xAD, 0x52, 0xAD, 0x12, 0xB5, 0x52, 0xC5, 0xD4, 0xCD, 0xF5, 0xC5, 0xB3, 0xD6, 0x56, 0xC5, 0xD4, 0xA4, 0xD1, 0x9C, 0x90, 0x94, 0x6F, 0x9C, 0x6F, 0xBD, 0x73, 0xAC, 0xF1, 0xA4, 0xB0, 0xC5, 0xB4, 0xCD, 0xD4, 0xCD, 0xD4, 0xCD, 0xD4, 0xBD, 0x73, 0xBD, 0x73, 0xBD, 0x52, 0xA4, 0xD0, 0xAC, 0xF1, 0xB5, 0x11, 0xAC, 0xF0, 0xAC, 0xF1, 0xAC, 0xF1, 0x9C, 0xB0, 0xA4, 0xD1, 0xAC, 0xF1, 0xA4, 0xB0, 0x9C, 0x8F, 0xA4, 0xB0, 0x9C, 0x8F, 0x94, 0x4E, 0xA4, 0xD0, 0xA4, 0xD0, 0xA4, 0xD0, 0x9C, 0xB0, 0x94, 0x6F, 0xA4, 0xD0, 0xAD, 0x11, 0xB5, 0x52, 0xB5, 0x73, 0xB5, 0x73, 0xAD, 0x32, 0x8C, 0x2E, 0x83, 0xCD, 0x73, 0x6B, 0x6B, 0x2B, 0x73, 0x4B, 0x73, 0x6C, 0x83, 0xCD, 0x8C, 0x0E, 0x94, 0x6F, 0x9C, 0x8F, 0xA4, 0xD0, 0x83, 0xED, 0x52, 0x68, 0x42, 0x07, 0x42, 0x07, 0x39, 0xC6, 0x39, 0xE7, 0x39, 0xE7, 0x41, 0xE7, 0x5A, 0xAA, 0x7B, 0x6D, 0x83, 0xCE, 0x6A, 0xEA, 0x5A, 0xE9, 0x5B, 0x28, 0x42, 0x66, 0x52, 0xC7, 0x94, 0xEC, 0xA5, 0x8D, 0x6C, 0x08, 0x6C, 0x48, 0x6C, 0x49, 0xC6, 0x33, 0xE6, 0xB7, 0xC5, 0xB4, 0xB5, 0x73, 0xBD, 0xB5, 0xBD, 0xB5, 0xAD, 0x33, 0x9C, 0xB1, 0xB5, 0x94, 0x94, 0x70, 0x8C, 0x2F, 0x8C, 0x50, 0x94, 0x70, 0xA4, 0xF2, 0xC5, 0xF6, 0xEF, 0x3A, 0xDE, 0x97, 0xA4, 0xF1, 0xAD, 0x32, 0xCE, 0x36, 0xA4, 0xD1, 0x73, 0x4C, 0xAD, 0x11, 0xBD, 0x51, 0xBD, 0x72, 0xBD, 0x51, 0xC5, 0x93, 0xDE, 0x57, 0xD6, 0x56, 0xC5, 0xD5, 0xCE, 0x15, 0xD6, 0x36, 0xCD, 0xF5, 0xDE, 0x77, 0x53, 0x09, 0x5B, 0x2A, 0x5B, 0x4B, 0x63, 0x8C, 0x8C, 0xB0, 0x84, 0x2F, 0x8C, 0x6F, 0x9C, 0xD0, 0xA4, 0xF1, 0xC5, 0xD4, 0xBD, 0x72, 0xAC, 0xF0, 0xB5, 0x52, 0xA4, 0xB0, 0x9C, 0x8F, 0xB5, 0x52, 0xCD, 0xF5, 0xDE, 0x77, 0xE6, 0xD8, 0xE6, 0xB7, 0xAC, 0xAE, 0xDE, 0x34, 0xDE, 0x34, 0xD6, 0x14, 0xCD, 0xD3, 0xCD, 0xB2, 0xC5, 0x92, 0xC5, 0xB2, 0xDE, 0x34, 0xE6, 0x75, 0xD5, 0xF4, 0xDE, 0x75, 0xE6, 0xB6, 0xEE, 0xB7, 0xE6, 0x96, 0xDE, 0x55, 0xD5, 0xF3, 0xBD, 0x30, 0xB4, 0xEF, 0xAC, 0x8E, 0xAC, 0xAE, 0xB5, 0x10, 0xD5, 0xF3, 0xB4, 0xEF, 0x9C, 0x4D, 0x9C, 0x6E, 0xA4, 0xF0, 0x8C, 0x0E, 0x73, 0x6C, 0x73, 0x6B, 0x6B, 0x0A, 0x5A, 0xA9, 0x62, 0xC9, 0x52, 0x88, 0x39, 0xC6, 0x39, 0xE7, 0x31, 0xA6, 0x31, 0x65, 0x39, 0xE7, 0x39, 0xC6, 0x4A, 0x48, 0x7B, 0xEF, 0x94, 0xD3, 0x9C, 0xD4, 0xCE, 0x9B, 0xDE, 0xFC, 0xDE, 0xFB, 0xE7, 0x1B, 0xBD, 0x94, 0x8B, 0xEE, 0x94, 0x4E, 0x9C, 0x4D, 0xA4, 0xAF, 0xAC, 0xCF, 0xA4, 0x8E, 0xAC, 0xCF, 0xB4, 0xEF, 0xBD, 0x30, 0xBD, 0x31, 0xB5, 0x10, 0xB5, 0x10, 0xBD, 0x51, 0xBD, 0x30, 0xBD, 0x30, 0xB5, 0x10, 0xC5, 0x71, 0xC5, 0x71, 0xC5, 0x71, 0xCD, 0x91, 0xC5, 0x71, 0xC5, 0x71, 0xC5, 0x30, 0xBC, 0xEF, 0xAC, 0x8E, 0x9C, 0x2D, 0xB5, 0x74, 0xE6, 0xDA, 0xD6, 0x58, 0xA4, 0x90, 0x8B, 0xAC, 0x93, 0xEC, 0x9C, 0x0C, 0x94, 0x0C, 0x94, 0x0D, 0x8B, 0xCC, 0x7B, 0x6B, 0x8B, 0xEC, 0x94, 0x2E, 0x7B, 0xAC, 0x62, 0xE9, 0x5A, 0xA9, 0x62, 0xEB, 0x6B, 0x4D, 0x73, 0xAE, 0x5A, 0xAA, 0x73, 0x6D, 0x5A, 0xCA, 0x62, 0xCA, 0x62, 0xCA, 0x73, 0x2C, 0xAC, 0xD2, 0x9C, 0x71, 0xBD, 0x96, 0xAC, 0xF4, 0xA4, 0xF3, 0xCE, 0x18, 0xD6, 0x59, 0x9C, 0xB3, 0x4A, 0x49, 0x31, 0x66, 0x73, 0x8E, 0xDE, 0xBA, 0xD6, 0x9A, 0xEF, 0x3C, 0xEF, 0x1C, 0xD6, 0x58, 0x9C, 0x91, 0xCD, 0xD5, 0xC5, 0x72, 0xC5, 0x72, 0xA4, 0xB0, 0x94, 0x50, 0x6B, 0x2C, 0x94, 0x92, 0xCE, 0x59, 0xCE, 0x59, 0xA4, 0xF3, 0x73, 0x8D, 0x41, 0xE7, 0x39, 0xC6, 0x4A, 0x68, 0x42, 0x07, 0x39, 0xE7, 0x39, 0xC7, 0x39, 0xC7, 0x42, 0x08, 0x42, 0x28, 0x4A, 0x49, 0x5A, 0xCB, 0x63, 0x2D, 0x6B, 0x4D, 0x62, 0xEC, 0x5A, 0xAB, 0x52, 0xAA, 0x62, 0xEC, 0x9C, 0xF3, 0xBD, 0xD6, 0xDE, 0x99, 0xA4, 0xD1, 0xA4, 0xD1, 0xA4, 0xF1, 0xC5, 0xD4, 0xE6, 0xB8, 0xAD, 0x11, 0xC5, 0xD4, 0xC5, 0xF5, 0xC5, 0xF5, 0xA4, 0xD0, 0xB5, 0x52, 0xBD, 0x73, 0xB5, 0x52, 0xB5, 0x32, 0xBD, 0x73, 0xB5, 0x52, 0xC5, 0xD4, 0xBD, 0x93, 0xBD, 0x93, 0xB5, 0x73, 0xB5, 0x52, 0x9C, 0x6F, 0xB5, 0x52, 0xB5, 0x73, 0xBD, 0x73, 0xBD, 0x94, 0xBD, 0x94, 0xBD, 0xB4, 0xBD, 0x94, 0xA4, 0xB0, 0x9C, 0xB0, 0xBD, 0x93, 0xCD, 0xD4, 0xCD, 0xD3, 0xCD, 0xD3, 0xCD, 0xF4, 0xCE, 0x14, 0xC5, 0xB4, 0xBD, 0xB4, 0xCE, 0x36, 0xC5, 0xD5, 0xC5, 0xF5, 0xBD, 0x72, 0xAC, 0xF1, 0xAD, 0x10, 0xB5, 0x51, 0xA4, 0xF0, 0x83, 0xCD, 0x94, 0x4F, 0x94, 0x6F, 0x83, 0xAD, 0x94, 0x4F, 0x8B, 0xED, 0xAD, 0x11, 0x9C, 0x6E, 0xA4, 0xB0, 0xAC, 0xF0, 0xB5, 0x31, 0xAC, 0xF0, 0xAD, 0x11, 0xA4, 0xAF, 0x8B, 0xEC, 0x94, 0x2D, 0x94, 0x2D, 0x94, 0x2D, 0xBD, 0x72, 0xAC, 0xF0, 0x83, 0xCC, 0x8C, 0x2D, 0x9C, 0x6F, 0xAD, 0x11, 0xD6, 0x35, 0xBD, 0x93, 0xAD, 0x11, 0xAD, 0x11, 0xB5, 0x32, 0xA4, 0xD1, 0x9C, 0x90, 0x9C, 0x8F, 0x94, 0x4F, 0x8C, 0x2E, 0x8C, 0x0E, 0x7B, 0xAD, 0x7B, 0xAC, 0x83, 0xCD, 0x83, 0xEE, 0x8B, 0xEE, 0x9C, 0x90, 0x94, 0x70, 0x9C, 0x90, 0x9C, 0xD1, 0x9C, 0xB1, 0x9C, 0x90, 0x9C, 0x90, 0x94, 0x70, 0x94, 0x70, 0x9C, 0xB1, 0xA4, 0xF2, 0xA4, 0xD1, 0x7B, 0xAD, 0x4A, 0x48, 0x39, 0xA6, 0x31, 0xA5, 0x39, 0xC6, 0x42, 0x28, 0x4A, 0x28, 0x5A, 0xCA, 0x6B, 0x2C, 0x73, 0x4C, 0x6B, 0x2B, 0x63, 0x0A, 0x5A, 0xE8, 0x7C, 0x4B, 0x74, 0x49, 0x84, 0xAA, 0x5B, 0x47, 0x63, 0xA8, 0x74, 0x09, 0x9C, 0x8F, 0x9C, 0x4F, 0x94, 0x4F, 0x94, 0x70, 0x94, 0x6F, 0x9C, 0xB0, 0x9C, 0xB1, 0xA4, 0xF2, 0x94, 0x70, 0x94, 0x70, 0xA4, 0xF2, 0xA4, 0xF2, 0xAD, 0x54, 0x9C, 0xD2, 0xA4, 0xF2, 0xE6, 0xD8, 0xC5, 0xD4, 0x9C, 0xB0, 0xBD, 0x94, 0xE6, 0xB8, 0xCD, 0xF5, 0xCD, 0xF5, 0xD6, 0x16, 0xDE, 0x35, 0xBD, 0x73, 0x8B, 0xED, 0xAC, 0xD1, 0xDE, 0x77, 0xC5, 0xD4, 0xC5, 0xB3, 0xBD, 0x73, 0xBD, 0x73, 0xBD, 0x73, 0xCD, 0xD4, 0x5B, 0x2A, 0x84, 0x2E, 0x9C, 0xD0, 0x8C, 0x6E, 0xA5, 0x11, 0x84, 0x0D, 0x84, 0x0D, 0x8C, 0x4E, 0x9C, 0xAF, 0xCD, 0xF4, 0xA4, 0xCF, 0x94, 0x4D, 0x94, 0x4E, 0xB5, 0x32, 0xB5, 0x52, 0xBD, 0x52, 0xDE, 0x77, 0xE6, 0xB7, 0xE6, 0x97, 0xDE, 0x56, 0xAC, 0xAF, 0xDE, 0x75, 0xDE, 0x55, 0xD5, 0xF3, 0xD5, 0xF4, 0xC5, 0x71, 0xC5, 0x71, 0xC5, 0xB2, 0xCD, 0xD3, 0xD6, 0x34, 0xBD, 0x51, 0xD6, 0x14, 0xDE, 0x34, 0xDE, 0x75, 0xDE, 0x54, 0xCD, 0x92, 0xC5, 0x71, 0xCD, 0xB2, 0xDE, 0x35, 0xE6, 0x76, 0xE6, 0x96, 0xDE, 0x55, 0xEE, 0x96, 0xC5, 0x51, 0x9C, 0x4D, 0xA4, 0x8F, 0xAD, 0x11, 0xA4, 0xF1, 0x9C, 0x8F, 0x94, 0x4E, 0x8C, 0x0E, 0x83, 0xED, 0x83, 0xED, 0x83, 0xCD, 0x7B, 0x8C, 0x41, 0xE6, 0x39, 0xC6, 0x31, 0x85, 0x31, 0x85, 0x31, 0x85, 0x4A, 0x48, 0x5A, 0xCA, 0x73, 0xAE, 0x94, 0xB3, 0xBE, 0x18, 0xC6, 0x3A, 0xB5, 0x97, 0xCE, 0x7A, 0x7B, 0xCF, 0x4A, 0x49, 0xA4, 0xF2, 0x9C, 0xB0, 0x9C, 0x8F, 0x9C, 0x6E, 0x8B, 0xEC, 0x7B, 0x4A, 0x7B, 0x8B, 0x8B, 0xEC, 0x83, 0xAB, 0x83, 0xCC, 0x7B, 0x6B, 0x7B, 0x6A, 0x73, 0x09, 0x83, 0x6A, 0x8B, 0xAB, 0x8B, 0xCB, 0x94, 0x0C, 0xA4, 0x8E, 0xBD, 0x30, 0xD5, 0xD3, 0xC5, 0x51, 0xBD, 0x30, 0xC5, 0x50, 0xD5, 0xD2, 0xD5, 0xD4, 0xEF, 0x1B, 0xEF, 0x3C, 0xEF, 0x5D, 0xEF, 0x1B, 0x94, 0x4F, 0xB5, 0x12, 0xBD, 0x31, 0xBD, 0x31, 0xBD, 0x31, 0xB5, 0x10, 0xBD, 0x31, 0xBD, 0x72, 0xBD, 0x52, 0xC5, 0x93, 0xC5, 0x92, 0xAD, 0x10, 0xAC, 0xF0, 0x62, 0xC9, 0x31, 0xA6, 0x42, 0x07, 0x73, 0x8D, 0x83, 0xEF, 0x52, 0x49, 0x29, 0x24, 0x5A, 0x69, 0x83, 0xAE, 0x83, 0x8E, 0x94, 0x51, 0x83, 0xEF, 0x73, 0x6E, 0x6B, 0x4D, 0xA4, 0xF4, 0xD6, 0x79, 0x8C, 0x31, 0x41, 0xE8, 0x5A, 0xCB, 0x8C, 0x31, 0xB5, 0x76, 0xDE, 0xBA, 0xE6, 0xFB, 0xE6, 0xFC, 0xD6, 0x59, 0xF7, 0x5C, 0xDE, 0x37, 0xA4, 0x6F, 0x94, 0x0D, 0xA4, 0xB0, 0x8C, 0x0F, 0x6B, 0x4C, 0x84, 0x10, 0x94, 0x92, 0xC6, 0x18, 0xC5, 0xF7, 0x5A, 0xCA, 0x39, 0xC6, 0x39, 0xE6, 0x39, 0xC6, 0x42, 0x07, 0x39, 0xC6, 0x39, 0xC6, 0x42, 0x07, 0x42, 0x08, 0x42, 0x29, 0x4A, 0x49, 0x5A, 0xCB, 0x63, 0x2D, 0x52, 0x8A, 0x39, 0xE8, 0x31, 0x86, 0x39, 0xE7, 0x5A, 0xCB, 0x84, 0x10, 0xAD, 0x34, 0xB5, 0x53, 0xA4, 0xD1, 0xA5, 0x12, 0xCE, 0x15, 0xDE, 0x97, 0xA4, 0xF0, 0xBD, 0x93, 0xC5, 0xB4, 0xBD, 0x73, 0x9C, 0xB0, 0xB5, 0x52, 0xB5, 0x52, 0xBD, 0x73, 0xB5, 0x52, 0xB5, 0x52, 0xAC, 0xF1, 0xBD, 0x94, 0xBD, 0xB4, 0xBD, 0x73, 0xB5, 0x52, 0xAD, 0x32, 0xA4, 0xD0, 0xB5, 0x32, 0xB5, 0x52, 0xB5, 0x52, 0xBD, 0x93, 0xBD, 0xB4, 0xBD, 0x94, 0xA4, 0xD0, 0x9C, 0xB0, 0xA4, 0xF1, 0xCD, 0xF4, 0xD6, 0x34, 0xD6, 0x34, 0xD6, 0x14, 0xD6, 0x35, 0xD6, 0x35, 0xC5, 0xD4, 0xB5, 0x73, 0xC5, 0xD5, 0xD6, 0x77, 0xD6, 0x56, 0xCD, 0xD4, 0xBD, 0x93, 0xBD, 0x52, 0xBD, 0x51, 0xC5, 0xB3, 0xB5, 0x53, 0xBD, 0xB5, 0xB5, 0x73, 0x9C, 0xD1, 0x9C, 0x90, 0x83, 0xED, 0xB5, 0x32, 0x83, 0xCC, 0xA4, 0xB0, 0xB5, 0x31, 0xAD, 0x11, 0xAC, 0xF0, 0xAC, 0xF0, 0xA4, 0xB0, 0xA4, 0x8F, 0x8B, 0xEC, 0x8B, 0xEC, 0xA4, 0xAF, 0xB5, 0x31, 0x9C, 0x8F, 0x94, 0x6E, 0x94, 0x4F, 0x9C, 0x6F, 0xA4, 0xB0, 0xBD, 0x72, 0xC5, 0xB3, 0xCE, 0x14, 0xCE, 0x14, 0xC5, 0x93, 0xAD, 0x32, 0x8B, 0xED, 0x94, 0x2E, 0xB5, 0x73, 0xB5, 0x73, 0xAD, 0x11, 0xA4, 0xF1, 0xB5, 0x33, 0xC5, 0xD5, 0xBD, 0x94, 0xAD, 0x12, 0xB5, 0x53, 0xBD, 0xB4, 0xBD, 0xB4, 0xBD, 0xB4, 0xC5, 0xF5, 0xBD, 0xB4, 0xBD, 0xB4, 0xC5, 0xB4, 0xC5, 0xD4, 0xBD, 0xD4, 0xC5, 0xF5, 0xC5, 0xD5, 0xCD, 0xF5, 0xBD, 0xB4, 0x62, 0xC9, 0x41, 0xE7, 0x39, 0xE7, 0x39, 0xE6, 0x39, 0xE6, 0x4A, 0x48, 0x5A, 0xAA, 0x73, 0x6C, 0x6B, 0x2C, 0x4A, 0x47, 0x73, 0xEC, 0x7C, 0xAB, 0x74, 0x48, 0x53, 0x05, 0x6B, 0xC9, 0x53, 0x07, 0x7C, 0x0B, 0xBD, 0x73, 0xAC, 0xF2, 0xA4, 0xD2, 0xA4, 0xF2, 0xA4, 0xB1, 0xA4, 0xD1, 0x9C, 0xB1, 0x9C, 0xD1, 0x9C, 0xD1, 0x9C, 0x91, 0x9C, 0xD1, 0x9C, 0xB1, 0x9C, 0xB1, 0x8C, 0x2F, 0x94, 0x4F, 0xA5, 0x12, 0x94, 0x50, 0x9C, 0x90, 0xAD, 0x32, 0xCD, 0xD4, 0xCD, 0xB4, 0xCD, 0xB4, 0xC5, 0x73, 0xBD, 0x32, 0xC5, 0x94, 0xC5, 0x94, 0xC5, 0xB4, 0xBD, 0x73, 0xA4, 0x8F, 0x9C, 0x8F, 0x9C, 0x6F, 0x9C, 0x8F, 0xC5, 0x93, 0xD6, 0x36, 0xA5, 0x11, 0xB5, 0x72, 0xA4, 0xCF, 0x9C, 0x8E, 0x8C, 0x4D, 0x84, 0x0D, 0x83, 0xED, 0x94, 0x6E, 0x9C, 0x8F, 0xCE, 0x14, 0xAC, 0xF0, 0xAD, 0x10, 0xB5, 0x51, 0xAD, 0x11, 0xAD, 0x11, 0xAC, 0xD0, 0xD6, 0x35, 0xD6, 0x15, 0xDE, 0x55, 0xE6, 0x75, 0xAC, 0xAE, 0xD6, 0x13, 0xD6, 0x34, 0xCD, 0xD3, 0xC5, 0x71, 0xCD, 0xD2, 0xD6, 0x13, 0xDE, 0x76, 0xD5, 0xF4, 0xCD, 0xB3, 0xC5, 0xB3, 0xD6, 0x35, 0xDE, 0x34, 0xE6, 0x75, 0xD5, 0xF3, 0xC5, 0x51, 0xBD, 0x10, 0xC5, 0x51, 0xCD, 0xD3, 0xD6, 0x14, 0xDE, 0x35, 0xE6, 0x55, 0xE6, 0x55, 0xC5, 0x31, 0x9C, 0x4D, 0x9C, 0x6E, 0xB5, 0x52, 0xAD, 0x32, 0xAD, 0x11, 0xB5, 0x31, 0xB5, 0x52, 0xBD, 0x92, 0xCD, 0xF3, 0xCD, 0xF3, 0xD6, 0x14, 0x8C, 0x0D, 0x42, 0x06, 0x31, 0xA5, 0x31, 0x85, 0x31, 0x85, 0x39, 0xE7, 0x42, 0x28, 0x5A, 0xCA, 0x63, 0x0C, 0x9C, 0xF3, 0xAD, 0x96, 0xAD, 0x76, 0xB5, 0x97, 0x7B, 0xCF, 0x7B, 0xCF, 0xCE, 0x59, 0xBD, 0xD6, 0x94, 0x70, 0x94, 0x4F, 0x94, 0x4F, 0x83, 0xAC, 0x8C, 0x0D, 0xB5, 0x73, 0xAD, 0x11, 0xA4, 0xD0, 0x94, 0x2E, 0xA4, 0x8F, 0x8C, 0x0D, 0x9C, 0x2E, 0x94, 0x2D, 0x8C, 0x0C, 0x94, 0x4D, 0x8C, 0x0C, 0x8B, 0xEC, 0x9C, 0x4D, 0xA4, 0x8E, 0xB4, 0xCE, 0xC5, 0x50, 0xEE, 0x95, 0xE6, 0x35, 0xBD, 0x95, 0xC5, 0xF8, 0xDE, 0xFB, 0xDE, 0xBB, 0xD6, 0x79, 0xD6, 0x99, 0xB5, 0x74, 0x9C, 0xD1, 0x7B, 0xAC, 0x94, 0x6E, 0xB5, 0x52, 0xBD, 0x72, 0xAD, 0x11, 0xBD, 0x93, 0xC5, 0x93, 0xAC, 0xEF, 0xBD, 0x51, 0x83, 0xAC, 0x31, 0x65, 0x62, 0xEB, 0x6B, 0x2C, 0x63, 0x0B, 0x52, 0x69, 0x29, 0x45, 0x31, 0x45, 0x52, 0x48, 0x6B, 0x0B, 0x83, 0xAE, 0x7B, 0x8E, 0x63, 0x0B, 0x39, 0xC7, 0x83, 0xCF, 0xBD, 0x96, 0xBD, 0xB7, 0xAD, 0x55, 0x73, 0x8E, 0x6B, 0x4D, 0xAD, 0x35, 0xE7, 0x1C, 0xE7, 0x1C, 0xE6, 0xFC, 0xEF, 0x1C, 0xDE, 0x7A, 0xC5, 0xD6, 0xA4, 0x91, 0xB5, 0x12, 0x94, 0x2E, 0x94, 0x0E, 0x8B, 0xED, 0x7B, 0x6C, 0x62, 0xCA, 0x73, 0x6E, 0x8C, 0x30, 0x5A, 0xAA, 0x4A, 0x48, 0x42, 0x28, 0x42, 0x07, 0x39, 0xE7, 0x39, 0xE7, 0x42, 0x07, 0x4A, 0x49, 0x4A, 0x69, 0x52, 0x8A, 0x4A, 0x6A, 0x52, 0x8A, 0x52, 0x8A, 0x4A, 0x69, 0x39, 0xE8, 0x29, 0x45, 0x39, 0xC7, 0x52, 0x89, 0x5A, 0xAA, 0x52, 0x69, 0x8C, 0x30, 0xAD, 0x32, 0xC5, 0xD5, 0xDE, 0x77, 0xDE, 0x97, 0xAC, 0xF0, 0xC5, 0xD4, 0xD6, 0x35, 0xBD, 0x72, 0xB5, 0x52, 0xB5, 0x52, 0xB5, 0x32, 0xAD, 0x11, 0xA4, 0xD0, 0xB5, 0x52, 0xAC, 0xF1, 0xBD, 0x73, 0xC5, 0xB4, 0xBD, 0x93, 0xB5, 0x52, 0xB5, 0x32, 0xAD, 0x11, 0xB5, 0x31, 0xB5, 0x52, 0xB5, 0x73, 0xBD, 0x93, 0xCE, 0x36, 0xBD, 0xB4, 0xA4, 0xB0, 0xA4, 0xD1, 0xBD, 0x73, 0xD6, 0x35, 0xDE, 0x54, 0xD6, 0x14, 0xD5, 0xF3, 0xD6, 0x14, 0xCD, 0xF4, 0xCE, 0x14, 0xAD, 0x32, 0xAD, 0x33, 0xCE, 0x15, 0xD6, 0x35, 0xBD, 0x72, 0xAC, 0xF0, 0xBD, 0x72, 0xB5, 0x10, 0xB5, 0x72, 0x94, 0x2E, 0xAD, 0x12, 0xA4, 0xF2, 0x9C, 0xD1, 0x94, 0x70, 0x8C, 0x0E, 0xB5, 0x32, 0x8C, 0x0D, 0xB5, 0x32, 0xB5, 0x31, 0xC5, 0x93, 0xBD, 0x93, 0xC5, 0xD4, 0xC5, 0xB3, 0xA4, 0xD0, 0x94, 0x2D, 0x94, 0x2D, 0x94, 0x4E, 0x9C, 0x8F, 0xA4, 0xB0, 0x8C, 0x0D, 0x8C, 0x0D, 0x8B, 0xED, 0x9C, 0x6F, 0xA4, 0xF0, 0xAD, 0x10, 0xBD, 0xB3, 0xC5, 0xD3, 0xC5, 0xB3, 0xAD, 0x11, 0xAC, 0xF2, 0xA4, 0xF1, 0xCE, 0x15, 0xDE, 0x97, 0xDE, 0x77, 0xD6, 0x56, 0xC5, 0xF5, 0xC5, 0xF5, 0xC5, 0xD5, 0xCE, 0x16, 0xD6, 0x56, 0xDE, 0x97, 0xD6, 0x56, 0xCE, 0x35, 0xD6, 0x36, 0xCE, 0x15, 0xBD, 0x94, 0xCE, 0x15, 0xDE, 0x76, 0xDE, 0x97, 0xE6, 0xD7, 0xEE, 0xF7, 0xF6, 0xF7, 0xF7, 0x38, 0xBD, 0xB3, 0x6B, 0x4B, 0x41, 0xE6, 0x31, 0x85, 0x31, 0xA5, 0x39, 0xC6, 0x42, 0x27, 0x4A, 0x28, 0x31, 0xA6, 0x4A, 0x48, 0x6B, 0xAA, 0x7C, 0xAB, 0x7C, 0xCB, 0x5B, 0x67, 0x3A, 0x04, 0x84, 0x4C, 0xA5, 0x0F, 0x8C, 0x0E, 0xA4, 0xB1, 0xA4, 0xB1, 0xAD, 0x12, 0xBD, 0x74, 0xAD, 0x12, 0xBD, 0xB4, 0xBD, 0xB4, 0xB5, 0x33, 0xBD, 0xB4, 0xBD, 0x93, 0xBD, 0xB4, 0xB5, 0x52, 0xB5, 0x53, 0xC5, 0xB4, 0xBD, 0x53, 0xBD, 0x74, 0xB5, 0x53, 0xB5, 0x32, 0xC5, 0x94, 0xBD, 0x53, 0xBD, 0x32, 0xBD, 0x73, 0xBD, 0x53, 0xB5, 0x53, 0xB5, 0x32, 0xAD, 0x32, 0xAC, 0xF1, 0xAD, 0x12, 0xAC, 0xF2, 0xA4, 0xF2, 0xA4, 0xF2, 0xA4, 0xB1, 0x9C, 0x90, 0x7B, 0xCC, 0x9C, 0xD0, 0xA4, 0xAF, 0x9C, 0x6E, 0x7B, 0xAB, 0x7B, 0x8B, 0x83, 0xEC, 0x8C, 0x2E, 0x94, 0x4E, 0xAC, 0xF0, 0xA4, 0xAE, 0x8C, 0x0C, 0x83, 0xAB, 0x83, 0xCB, 0x8C, 0x0C, 0xB5, 0x31, 0xDE, 0x76, 0xDE, 0x56, 0xE6, 0xB7, 0xEE, 0xB7, 0xB4, 0xCF, 0xDE, 0x34, 0xD6, 0x14, 0xCD, 0xB2, 0xCD, 0xD3, 0xD5, 0xF3, 0xD6, 0x14, 0xDE, 0x76, 0xD5, 0xF4, 0xDE, 0x56, 0xDE, 0x76, 0xDE, 0x75, 0xDE, 0x55, 0xDE, 0x34, 0xC5, 0x71, 0xCD, 0x92, 0xCD, 0x72, 0xC5, 0x51, 0xCD, 0xB2, 0xCD, 0xD3, 0xD5, 0xD3, 0xC5, 0x51, 0xBC, 0xEF, 0xB4, 0x8E, 0x9C, 0x4D, 0xAD, 0x11, 0xC5, 0xB3, 0xC5, 0xB3, 0xC5, 0xB3, 0xCD, 0xD3, 0xCD, 0xD3, 0xCD, 0xB3, 0xD5, 0xF3, 0xCD, 0xD3, 0xCD, 0xD2, 0xD6, 0x14, 0xCD, 0xF4, 0x9C, 0x6E, 0x6B, 0x2A, 0x41, 0xE6, 0x39, 0xE6, 0x52, 0xA9, 0x52, 0x8A, 0x52, 0x8A, 0x63, 0x4C, 0x7B, 0xCF, 0x7B, 0xEF, 0x8C, 0x51, 0x8C, 0x51, 0xAD, 0x76, 0xC6, 0x18, 0xE7, 0x3C, 0xC6, 0x18, 0xA4, 0xF3, 0x9C, 0x70, 0x7B, 0x8C, 0x83, 0xEC, 0xBD, 0xB3, 0xBD, 0xB4, 0xAD, 0x32, 0x94, 0x4E, 0x94, 0x4E, 0x8B, 0xED, 0x9C, 0x8F, 0x9C, 0x8F, 0xA4, 0xAF, 0xA4, 0xD0, 0x9C, 0x6E, 0x8B, 0xED, 0x94, 0x0D, 0xA4, 0x6E, 0xB4, 0xEF, 0xB4, 0xCE, 0xCD, 0x91, 0xDE, 0x14, 0xAC, 0xB0, 0x84, 0x10, 0xC6, 0x38, 0xB5, 0x76, 0xAD, 0x55, 0xF7, 0x7D, 0xDE, 0xBA, 0xB5, 0x54, 0x8C, 0x50, 0x7B, 0xCD, 0x8C, 0x4F, 0x84, 0x0E, 0x84, 0x0E, 0xB5, 0x93, 0x9C, 0x8F, 0xA4, 0xAE, 0xA4, 0xAF, 0x94, 0x2E, 0x5A, 0x89, 0x5A, 0xEB, 0x5A, 0xAA, 0x5A, 0xCA, 0x4A, 0x28, 0x52, 0x8A, 0x52, 0x48, 0x52, 0x28, 0x41, 0xE7, 0x62, 0xEA, 0x52, 0x89, 0x52, 0x69, 0x7B, 0x6D, 0x73, 0x6D, 0x9C, 0x72, 0xBD, 0x96, 0xA4, 0xF3, 0xAD, 0x35, 0xA5, 0x14, 0xC6, 0x38, 0xE6, 0xFC, 0xC5, 0xD7, 0xC5, 0xF8, 0xD6, 0x79, 0xDE, 0xBA, 0x9C, 0xB2, 0x7B, 0x4D, 0xB5, 0x13, 0xAC, 0xD1, 0xAC, 0xF0, 0xB5, 0x31, 0xB5, 0x31, 0xAD, 0x11, 0x8B, 0xEE, 0x62, 0xCA, 0x4A, 0x48, 0x63, 0x0B, 0x4A, 0x68, 0x42, 0x48, 0x42, 0x07, 0x42, 0x48, 0x42, 0x28, 0x52, 0x89, 0x52, 0x8A, 0x52, 0xAA, 0x52, 0x8A, 0x63, 0x0C, 0x5A, 0xCB, 0x52, 0x8A, 0x42, 0x08, 0x31, 0x86, 0x29, 0x65, 0x39, 0xC6, 0x39, 0xE7, 0x83, 0xEF, 0x9C, 0x90, 0xAC, 0xF1, 0xCE, 0x16, 0xD6, 0x56, 0xCE, 0x15, 0xAC, 0xF0, 0xC5, 0xB4, 0xD6, 0x35, 0xCD, 0xF4, 0xC5, 0xF4, 0xC5, 0xB4, 0xCD, 0xF5, 0xBD, 0xB3, 0xBD, 0x72, 0xC5, 0xD4, 0xC5, 0xB3, 0xCE, 0x15, 0xD6, 0x56, 0xCE, 0x35, 0xC5, 0xD4, 0xBD, 0xB3, 0xBD, 0x93, 0xC5, 0xB3, 0xBD, 0x93, 0xC5, 0xB4, 0xC5, 0xD4, 0xC5, 0xF4, 0xBD, 0xB4, 0xA4, 0xD0, 0xAD, 0x32, 0xC5, 0xF4, 0xDE, 0x55, 0xDE, 0x75, 0xDE, 0x14, 0xDE, 0x14, 0xD6, 0x14, 0xCD, 0xD3, 0xCD, 0xF4, 0xB5, 0x52, 0xB5, 0x73, 0xD6, 0x36, 0xD6, 0x35, 0xAC, 0xD0, 0xAC, 0xCF, 0xAC, 0xF0, 0xA4, 0xCF, 0xB5, 0x51, 0x8C, 0x0E, 0x94, 0x4F, 0x94, 0x6F, 0x8C, 0x4F, 0x8C, 0x2E, 0x94, 0x70, 0xB5, 0x53, 0x8B, 0xED, 0xBD, 0x93, 0xBD, 0x93, 0xBD, 0xB3, 0xBD, 0x93, 0xBD, 0x93, 0xC5, 0xB3, 0x9C, 0x8F, 0xBD, 0x72, 0xA4, 0xF0, 0xA4, 0xAF, 0x8C, 0x0D, 0x94, 0x4E, 0xA4, 0xB0, 0xAD, 0x11, 0x8C, 0x0D, 0x9C, 0x8F, 0x9C, 0xAF, 0x94, 0x4E, 0x94, 0x4E, 0x94, 0x6E, 0xA4, 0xCF, 0xA4, 0xD0, 0xAD, 0x33, 0xB5, 0x73, 0xD6, 0x56, 0xDE, 0x96, 0xDE, 0xB7, 0xDE, 0x97, 0xD6, 0x77, 0xD6, 0x77, 0xD6, 0x77, 0xDE, 0x77, 0xE6, 0xB7, 0xDE, 0xB7, 0xDE, 0x97, 0xDE, 0x96, 0xDE, 0x96, 0xDE, 0x96, 0xD6, 0x56, 0xD6, 0x56, 0xE6, 0xB7, 0xE6, 0xD7, 0xE6, 0xD6, 0xE6, 0xB6, 0xEE, 0xD6, 0xEE, 0xF7, 0xCE, 0x14, 0xAD, 0x52, 0x84, 0x0E, 0x31, 0xA5, 0x31, 0xA6, 0x39, 0xE6, 0x31, 0xA5, 0x39, 0xC6, 0x42, 0x28, 0x4A, 0x48, 0x63, 0x4A, 0x53, 0x27, 0x74, 0x8A, 0x6C, 0x49, 0x5B, 0x48, 0x4A, 0x86, 0x8C, 0x6C, 0x73, 0x4A, 0x6B, 0x0B, 0xA4, 0xD2, 0xA4, 0xB1, 0xB5, 0x53, 0xA4, 0xD1, 0xBD, 0x93, 0xDE, 0xB7, 0xA5, 0x31, 0xA5, 0x50, 0x8C, 0xCD, 0x94, 0xED, 0xA5, 0x4F, 0xB5, 0x70, 0xCE, 0x14, 0xC5, 0xB3, 0xBD, 0x73, 0xBD, 0x52, 0xB5, 0x32, 0xB5, 0x32, 0xAD, 0x11, 0xB5, 0x12, 0xB5, 0x12, 0xA4, 0xB0, 0x94, 0x2E, 0xAC, 0xF1, 0xB5, 0x12, 0xAC, 0xB0, 0xAC, 0xF1, 0xB5, 0x12, 0xAC, 0xF2, 0xAC, 0xF2, 0xAC, 0xF2, 0xB5, 0x33, 0x8C, 0xB1, 0x94, 0xD1, 0x8C, 0x4E, 0x8C, 0x0C, 0x8B, 0xEC, 0x8B, 0xEC, 0x8B, 0xEC, 0x83, 0xCB, 0x83, 0xAB, 0x83, 0xAB, 0x83, 0xAB, 0x83, 0x8B, 0x7B, 0x6A, 0x7B, 0x6A, 0x83, 0xAB, 0x8B, 0xEB, 0x9C, 0x4D, 0x9C, 0x6E, 0xA4, 0xAF, 0xA4, 0x8E, 0x9C, 0x4D, 0xC5, 0x71, 0xBD, 0x30, 0xB5, 0x10, 0xAC, 0xEF, 0xAC, 0xEF, 0xAC, 0xAE, 0xBD, 0x31, 0xC5, 0x92, 0xBD, 0x51, 0xBD, 0x30, 0xC5, 0x72, 0xD5, 0xD3, 0xDE, 0x35, 0xDE, 0x14, 0xD5, 0xD3, 0xE6, 0x55, 0xE6, 0x75, 0xEE, 0x76, 0xE6, 0x75, 0xE6, 0x55, 0xD5, 0xB3, 0xE6, 0x14, 0xC5, 0x51, 0xA4, 0x8E, 0xC5, 0xD3, 0xC5, 0xD3, 0xC5, 0x93, 0xC5, 0xB3, 0xC5, 0xB3, 0xB5, 0x10, 0xBD, 0x30, 0xCD, 0xB2, 0xCD, 0xB2, 0xD5, 0xF3, 0xDE, 0x14, 0xE6, 0x55, 0xD6, 0x14, 0xD5, 0xF4, 0xAC, 0xF0, 0x6B, 0x09, 0x52, 0x89, 0x39, 0xE7, 0x39, 0xE7, 0x42, 0x27, 0x52, 0xAA, 0x63, 0x2C, 0x6B, 0x6D, 0x7B, 0xAF, 0xAD, 0x55, 0xBD, 0xF8, 0xCE, 0x7A, 0xD6, 0xBA, 0xDE, 0xDB, 0xB5, 0x75, 0x7B, 0xAD, 0x7B, 0x8C, 0xAD, 0x32, 0xBD, 0xB4, 0xAC, 0xF1, 0x8B, 0xED, 0x83, 0xCC, 0x8C, 0x0D, 0x9C, 0x8F, 0xA4, 0xAF, 0x9C, 0x8F, 0xA4, 0xD0, 0xB5, 0x12, 0xB5, 0x32, 0xB5, 0x11, 0xA4, 0x8E, 0xB4, 0xEF, 0xBD, 0x0F, 0xD5, 0xF3, 0xD5, 0xF3, 0xCD, 0xB3, 0x73, 0x4C, 0x8C, 0x51, 0x83, 0xF0, 0x9C, 0xB3, 0xDE, 0xBB, 0xD6, 0xBA, 0xA5, 0x13, 0xA5, 0x13, 0x8C, 0x70, 0x84, 0x2E, 0x94, 0x90, 0xAD, 0x53, 0xBD, 0xD4, 0xAD, 0x10, 0xAC, 0xCF, 0xB5, 0x52, 0xB5, 0x52, 0x9C, 0x90, 0x42, 0x07, 0x5A, 0xAA, 0x5A, 0xAA, 0x39, 0xC6, 0x52, 0x69, 0x7B, 0x8D, 0x83, 0xAE, 0x39, 0xA6, 0x29, 0x65, 0x31, 0x85, 0x62, 0xEB, 0x83, 0xEF, 0x94, 0x30, 0x94, 0x51, 0x8C, 0x0F, 0x73, 0x6E, 0x9C, 0xB3, 0xC6, 0x17, 0xC5, 0xF8, 0xB5, 0x96, 0xC5, 0xD7, 0xE6, 0xFC, 0xEF, 0x3C, 0xFF, 0xBE, 0xF7, 0x5C, 0xAC, 0xD3, 0x94, 0x0F, 0x83, 0xAD, 0x94, 0x2E, 0x94, 0x4E, 0x9C, 0x6F, 0x94, 0x4E, 0xA4, 0xAF, 0xB5, 0x52, 0x5A, 0xAA, 0x7B, 0xEE, 0x52, 0xAA, 0x4A, 0x68, 0x42, 0x27, 0x4A, 0x89, 0x4A, 0x89, 0x42, 0x48, 0x42, 0x28, 0x4A, 0x48, 0x42, 0x28, 0x4A, 0x49, 0x4A, 0x69, 0x52, 0x8A, 0x42, 0x29, 0x42, 0x08, 0x42, 0x08, 0x31, 0x86, 0x63, 0x0C, 0x9C, 0x91, 0x9C, 0x6F, 0x9C, 0x6F, 0x94, 0x2E, 0x8C, 0x0E, 0x9C, 0x4F, 0xA4, 0xD0, 0xA4, 0xB0, 0x9C, 0x8F, 0x9C, 0x4E, 0x94, 0x4E, 0x8B, 0xED, 0x8C, 0x0E, 0x94, 0x2E, 0x8C, 0x0E, 0x94, 0x4E, 0xA4, 0xD1, 0xB5, 0x32, 0xB5, 0x52, 0xBD, 0x93, 0xBD, 0x93, 0xBD, 0x73, 0xC5, 0xD4, 0xCE, 0x15, 0xCE, 0x15, 0xD6, 0x15, 0xCD, 0xF5, 0xC5, 0xD4, 0xC5, 0xD4, 0x9C, 0xB0, 0xA4, 0xD0, 0xB5, 0x52, 0xC5, 0xD3, 0xD6, 0x34, 0xDE, 0x54, 0xDE, 0x55, 0xDE, 0x54, 0xDE, 0x14, 0xCD, 0xD3, 0xAD, 0x11, 0xAD, 0x32, 0xD6, 0x35, 0xD6, 0x14, 0xB5, 0x10, 0xB5, 0x31, 0xB5, 0x31, 0xB5, 0x10, 0xAD, 0x11, 0x8C, 0x0D, 0x83, 0xEE, 0x83, 0xEE, 0x83, 0xEE, 0x7B, 0xAD, 0xA4, 0xF1, 0xB5, 0x32, 0x8C, 0x0D, 0xB5, 0x52, 0xB5, 0x72, 0xBD, 0xB3, 0xBD, 0x93, 0xBD, 0x93, 0xCD, 0xF4, 0xBD, 0x93, 0xAD, 0x11, 0xC5, 0xD4, 0xBD, 0x93, 0xA4, 0xD0, 0xA4, 0xF1, 0xBD, 0xB3, 0xBD, 0x93, 0xB5, 0x52, 0xAD, 0x32, 0x9C, 0x8F, 0x94, 0x4E, 0x8C, 0x2E, 0x8C, 0x2D, 0x94, 0x2E, 0x9C, 0xB0, 0xB5, 0x53, 0xB5, 0x33, 0xCE, 0x15, 0xDE, 0x76, 0xDE, 0x96, 0xDE, 0x97, 0xDE, 0x97, 0xDE, 0x97, 0xDE, 0x97, 0xE6, 0xB7, 0xDE, 0x76, 0xE6, 0xD7, 0xDE, 0xB6, 0xDE, 0x96, 0xDE, 0x96, 0xDE, 0x76, 0xDE, 0xB6, 0xDE, 0xB7, 0xDE, 0xB6, 0xDE, 0x96, 0xE6, 0xB6, 0xE6, 0x96, 0xE6, 0x95, 0xE6, 0xB6, 0xC5, 0xD4, 0xAD, 0x12, 0xC5, 0xD4, 0xA4, 0xF1, 0x39, 0xA5, 0x39, 0xA6, 0x39, 0xC6, 0x39, 0xC6, 0x31, 0x85, 0x31, 0xA5, 0x52, 0x88, 0x4A, 0x86, 0x8D, 0x0E, 0x7C, 0xCB, 0x74, 0x8B, 0x7C, 0x8C, 0x7C, 0x6C, 0x84, 0x4C, 0x5A, 0xE9, 0x52, 0x89, 0x8C, 0x0E, 0xAC, 0xF2, 0xB5, 0x53, 0xE6, 0xF8, 0xE6, 0xD7, 0xA5, 0x90, 0x8D, 0x4D, 0x7C, 0xAA, 0x6C, 0x48, 0x74, 0x68, 0x95, 0x0B, 0xAD, 0xAE, 0xAD, 0x30, 0xB5, 0x72, 0xC5, 0xB3, 0xBD, 0x52, 0xA4, 0xB0, 0xBD, 0x52, 0xC5, 0x93, 0xBD, 0x52, 0xA4, 0xB0, 0x9C, 0x6F, 0xA4, 0x8F, 0x94, 0x0D, 0x8B, 0xAC, 0x83, 0x8B, 0xB4, 0xF1, 0xC5, 0x73, 0xC5, 0x73, 0xC5, 0xB4, 0xAC, 0xF2, 0x8C, 0xB1, 0x73, 0xCE, 0x5B, 0x09, 0x83, 0xEC, 0x94, 0x4E, 0x94, 0x2D, 0x94, 0x2D, 0x9C, 0x6E, 0x9C, 0x6E, 0x9C, 0x4E, 0x9C, 0x8F, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0x8E, 0xA4, 0x8E, 0xA4, 0xAE, 0xAC, 0xCF, 0xA4, 0x8E, 0xAC, 0xAF, 0xAC, 0xAE, 0xAC, 0xAE, 0xA4, 0x8E, 0xA4, 0x8E, 0xA4, 0x8E, 0xA4, 0x6E, 0x9C, 0x6D, 0x9C, 0x4D, 0x9C, 0x6D, 0xA4, 0x6E, 0xA4, 0x8E, 0xA4, 0x8E, 0x9C, 0x2D, 0x9C, 0x4D, 0xAC, 0x8E, 0xAC, 0x8E, 0xA4, 0x4D, 0xA4, 0x6E, 0xBD, 0x10, 0xC5, 0x51, 0xCD, 0x92, 0xD5, 0xB3, 0xDD, 0xF4, 0xBD, 0x10, 0xA4, 0x8D, 0xC5, 0x92, 0xC5, 0x92, 0xCD, 0xD3, 0xCD, 0xF4, 0xCD, 0xB3, 0xAC, 0xAE, 0xBD, 0x50, 0xD5, 0xF3, 0xD5, 0xD3, 0xDE, 0x14, 0xDE, 0x14, 0xDE, 0x13, 0xD5, 0xF3, 0xD6, 0x13, 0xDE, 0x34, 0xD5, 0xF3, 0x9C, 0x6E, 0x4A, 0x27, 0x31, 0xA5, 0x39, 0xC6, 0x42, 0x28, 0x4A, 0x48, 0x52, 0x8A, 0x63, 0x0C, 0x84, 0x30, 0x9C, 0xF4, 0xAD, 0x76, 0xC6, 0x19, 0xD6, 0x9B, 0xE7, 0x1C, 0xDE, 0xDB, 0xC6, 0x18, 0xAD, 0x13, 0xB5, 0x73, 0x9C, 0xB0, 0x7B, 0x8C, 0x7B, 0x8C, 0x8C, 0x0E, 0x9C, 0x4E, 0xA4, 0xAF, 0x9C, 0x6E, 0x9C, 0x8F, 0xBD, 0x73, 0xC5, 0x93, 0xC5, 0xB3, 0xB4, 0xF0, 0xAC, 0xCE, 0xAC, 0xCE, 0xD5, 0xF3, 0xDD, 0xF3, 0xE6, 0x55, 0xA4, 0x90, 0x5A, 0x8A, 0x9C, 0xD3, 0xCE, 0x59, 0xEF, 0x3D, 0xE7, 0x3D, 0xCE, 0x59, 0xB5, 0x95, 0xB5, 0x74, 0x9C, 0xF2, 0x94, 0xB1, 0xAD, 0x33, 0xAD, 0x52, 0xA4, 0x8E, 0xAC, 0xCF, 0xBD, 0x72, 0xB5, 0x31, 0xBD, 0x72, 0x8C, 0x0E, 0x4A, 0x28, 0x4A, 0x28, 0x29, 0x44, 0x31, 0x65, 0x52, 0x69, 0x83, 0xAD, 0x52, 0x69, 0x52, 0x69, 0x31, 0x65, 0x39, 0xC6, 0x4A, 0x28, 0x73, 0x6C, 0x73, 0x6D, 0x52, 0x69, 0x73, 0x6E, 0x84, 0x30, 0x9C, 0xB2, 0xB5, 0x76, 0xCE, 0x59, 0xE6, 0xDB, 0xE6, 0xDB, 0xE6, 0xFB, 0xEF, 0x3C, 0xE6, 0xFB, 0xD6, 0x18, 0xA4, 0xB3, 0xCE, 0x17, 0xB5, 0x54, 0x94, 0x50, 0xAD, 0x12, 0xA4, 0xF1, 0xA4, 0xD0, 0xB5, 0x53, 0x5A, 0xAA, 0x8C, 0x50, 0x63, 0x0B, 0x4A, 0x69, 0x42, 0x07, 0x42, 0x07, 0x42, 0x27, 0x39, 0xE6, 0x42, 0x07, 0x4A, 0x48, 0x39, 0xE7, 0x39, 0xC7, 0x42, 0x28, 0x42, 0x28, 0x42, 0x08, 0x39, 0xC7, 0x39, 0xC7, 0x73, 0x6E, 0xBD, 0xB6, 0xAD, 0x33, 0xB5, 0x54, 0xBD, 0x94, 0xB5, 0x73, 0xAD, 0x12, 0xAD, 0x12, 0xB5, 0x52, 0xA4, 0xD0, 0x9C, 0x8F, 0x94, 0x2E, 0x9C, 0x90, 0xA4, 0xB0, 0xA4, 0xB0, 0xA4, 0xB0, 0xA4, 0xB0, 0x9C, 0x8F, 0x9C, 0x6F, 0x9C, 0x6F, 0x9C, 0x6F, 0x9C, 0x8F, 0x9C, 0x8F, 0xA4, 0xAF, 0xA4, 0xAF, 0x9C, 0x8F, 0x9C, 0x8F, 0xA4, 0x90, 0x9C, 0x4F, 0x8C, 0x0E, 0x9C, 0x8F, 0xA4, 0xAF, 0xA4, 0xD0, 0x9C, 0x6F, 0x8C, 0x0D, 0x8C, 0x0D, 0x9C, 0x4E, 0x9C, 0x4D, 0x9C, 0x4D, 0xAC, 0xAF, 0xAC, 0xCF, 0xA4, 0xD0, 0xAC, 0xF1, 0xB5, 0x11, 0xB5, 0x31, 0xA4, 0x8E, 0x9C, 0x6E, 0xAC, 0xCF, 0xA4, 0x8E, 0x8B, 0xEC, 0x7B, 0x6B, 0x83, 0xCD, 0x7B, 0x8C, 0x6B, 0x4B, 0x6B, 0x2B, 0xAC, 0xF1, 0xB5, 0x32, 0x83, 0xED, 0x8C, 0x0E, 0x94, 0x4E, 0xAD, 0x11, 0x9C, 0xB0, 0x9C, 0xAF, 0xAD, 0x11, 0x83, 0xCC, 0x9C, 0x6F, 0xAC, 0xF1, 0xAD, 0x31, 0xA4, 0xB0, 0xB5, 0x52, 0xC5, 0xD4, 0xB5, 0x73, 0xB5, 0x73, 0xC5, 0xB4, 0x9C, 0xB0, 0x8C, 0x2E, 0x94, 0x6F, 0x83, 0xED, 0x83, 0xED, 0xA4, 0xD1, 0xAD, 0x32, 0xAD, 0x12, 0xBD, 0x72, 0xDE, 0x55, 0xD6, 0x55, 0xDE, 0x76, 0xDE, 0x96, 0xDE, 0x96, 0xDE, 0x97, 0xE6, 0x97, 0xE6, 0xB6, 0xE6, 0xD7, 0xE6, 0xB6, 0xE6, 0xB6, 0xDE, 0x75, 0xD6, 0x34, 0xDE, 0x76, 0xDE, 0xB6, 0xD6, 0x75, 0xD6, 0x35, 0xDE, 0x96, 0xE6, 0x96, 0xE6, 0x95, 0xE6, 0x96, 0xC5, 0xD4, 0xAC, 0xF1, 0xD6, 0x36, 0xDE, 0xB7, 0xAD, 0x32, 0x4A, 0x27, 0x39, 0xA6, 0x31, 0x85, 0x31, 0x65, 0x29, 0x44, 0x31, 0xA5, 0x73, 0xEC, 0xA5, 0xB1, 0x85, 0x2D, 0x84, 0xED, 0x85, 0x0D, 0x84, 0xED, 0x6C, 0x29, 0x94, 0xEE, 0x6B, 0x6B, 0x6A, 0xEA, 0x8B, 0xEE, 0xAC, 0xF1, 0xCE, 0x34, 0xD6, 0x95, 0x84, 0xAC, 0x8D, 0x2D, 0x95, 0x6D, 0x6C, 0x27, 0x6C, 0x47, 0x7C, 0xC9, 0x8D, 0x2B, 0x84, 0xAC, 0x9D, 0x0F, 0xC5, 0xD3, 0xCD, 0xB3, 0xC5, 0x73, 0xC5, 0x93, 0xB5, 0x11, 0x94, 0x0E, 0xA4, 0x6F, 0xA4, 0x6F, 0x9C, 0x2E, 0x8B, 0xAC, 0x83, 0x8C, 0x94, 0x0E, 0xBD, 0x32, 0xD5, 0xF5, 0xD5, 0xD4, 0x9C, 0x4F, 0x94, 0x50, 0x7B, 0xEF, 0x39, 0xE7, 0x42, 0x28, 0x4A, 0x68, 0x62, 0xEA, 0x6B, 0x2A, 0x83, 0xED, 0x94, 0x4E, 0x9C, 0x8F, 0x94, 0x4E, 0xA4, 0xD0, 0x94, 0x4E, 0x8C, 0x0D, 0x94, 0x2D, 0x9C, 0x6E, 0xA4, 0xAE, 0xD6, 0x14, 0xC5, 0xB2, 0x94, 0x2D, 0x9C, 0x6E, 0x8B, 0xEC, 0xAC, 0xCF, 0xAC, 0xEF, 0xAC, 0xCF, 0xAC, 0xAF, 0xAC, 0xCF, 0xB4, 0xF0, 0xB5, 0x10, 0xA4, 0xAE, 0xAC, 0xCF, 0xAC, 0xCF, 0xB4, 0xEF, 0xB4, 0xEF, 0xB4, 0xEF, 0xA4, 0x8E, 0xA4, 0x8E, 0xA4, 0x8E, 0xAC, 0xCF, 0xAC, 0xCF, 0xAC, 0xAE, 0xAC, 0xAE, 0xAC, 0xAE, 0xB4, 0xCE, 0xB4, 0xEF, 0xB4, 0xEF, 0xAC, 0xCE, 0xAC, 0x8D, 0xA4, 0x8D, 0xA4, 0x6D, 0xA4, 0x6D, 0xA4, 0x4C, 0xA4, 0x6D, 0xAC, 0x8E, 0xAC, 0x8E, 0xAC, 0xCE, 0xB4, 0xEF, 0xB4, 0xEF, 0xBD, 0x30, 0xC5, 0x50, 0xCD, 0x71, 0xCD, 0x92, 0xCD, 0x92, 0xB4, 0xF0, 0x7B, 0x8B, 0x41, 0xE6, 0x39, 0xC6, 0x42, 0x28, 0x42, 0x07, 0x4A, 0x48, 0x63, 0x2C, 0x7B, 0xF0, 0x94, 0xB3, 0xAD, 0x56, 0xBD, 0xD8, 0xC6, 0x39, 0xDE, 0xDC, 0xF7, 0x7E, 0xEF, 0x3C, 0xBD, 0xB6, 0xA4, 0xB1, 0x73, 0x2B, 0x73, 0x4B, 0x8B, 0xED, 0x94, 0x2E, 0xA4, 0xD0, 0x9C, 0x8F, 0xA4, 0xB0, 0xC5, 0xD4, 0xD6, 0x14, 0xD6, 0x14, 0xC5, 0x71, 0xB4, 0xCF, 0xAC, 0xAE, 0xD5, 0xD2, 0xE6, 0x34, 0xDD, 0xF3, 0xCD, 0xB3, 0x5A, 0xCA, 0xA5, 0x14, 0xDE, 0xBB, 0xE6, 0xFC, 0xBD, 0xD8, 0xDE, 0xBB, 0xCE, 0x59, 0xB5, 0x75, 0xAD, 0x53, 0xA5, 0x33, 0xB5, 0x73, 0xB5, 0x73, 0xA4, 0x8E, 0xAC, 0xCF, 0xC5, 0xB3, 0xB5, 0x31, 0xBD, 0x52, 0xBD, 0x93, 0x7B, 0xAD, 0x31, 0x64, 0x21, 0x03, 0x18, 0xC3, 0x39, 0xA6, 0x62, 0xEA, 0x52, 0x69, 0x62, 0xEB, 0x6B, 0x2B, 0x73, 0x2B, 0x5A, 0x89, 0x4A, 0x68, 0x73, 0x6C, 0x83, 0xEF, 0x83, 0xEF, 0x73, 0x6D, 0x7B, 0xCF, 0x94, 0x72, 0x94, 0xB3, 0xBD, 0xD7, 0xD6, 0x7A, 0xDE, 0xBB, 0xCE, 0x39, 0xDE, 0x9A, 0xEE, 0xFC, 0xDE, 0x9A, 0xD6, 0x59, 0xEE, 0xFB, 0xE6, 0xDA, 0xAD, 0x13, 0xA4, 0xB1, 0x9C, 0x70, 0x9C, 0xB0, 0x5A, 0x89, 0x6B, 0x2C, 0x73, 0xAD, 0x52, 0x89, 0x4A, 0x48, 0x39, 0xE7, 0x39, 0xE6, 0x42, 0x28, 0x39, 0xE7, 0x42, 0x28, 0x42, 0x08, 0x42, 0x08, 0x39, 0xE7, 0x39, 0xE7, 0x39, 0xE8, 0x42, 0x07, 0x63, 0x2C, 0xA5, 0x34, 0xBD, 0xD7, 0xA4, 0xF2, 0xB5, 0x33, 0xBD, 0xB4, 0xC5, 0xF5, 0xC5, 0xB4, 0x9C, 0x6F, 0x73, 0x4B, 0x83, 0xAC, 0x8C, 0x0E, 0x8B, 0xED, 0x8B, 0xED, 0x94, 0x4F, 0x8C, 0x2E, 0xA4, 0xB0, 0xA4, 0xD1, 0x94, 0x6F, 0x8C, 0x2E, 0x8C, 0x0E, 0x94, 0x4F, 0xA4, 0xD0, 0xA4, 0xF1, 0xAD, 0x32, 0xBD, 0x93, 0xB5, 0x52, 0xA4, 0xF1, 0xAC, 0xF1, 0xA4, 0xD0, 0xAC, 0xF1, 0xA4, 0xD0, 0xA4, 0xB0, 0xAD, 0x11, 0xA4, 0xB0, 0xA4, 0xB0, 0xA4, 0xB0, 0xB5, 0x11, 0xB5, 0x32, 0xBD, 0x52, 0xB5, 0x11, 0xB5, 0x11, 0xA4, 0x90, 0xB4, 0xF1, 0xAC, 0xD0, 0xAC, 0xB0, 0xAC, 0xD0, 0xA4, 0x8F, 0xA4, 0x6E, 0xA4, 0x8E, 0xA4, 0x8F, 0x9C, 0x8F, 0xA4, 0x90, 0x94, 0x0E, 0x8C, 0x0E, 0x7B, 0xAC, 0x9C, 0x6F, 0xA4, 0xD0, 0x94, 0x4F, 0x8C, 0x0E, 0x8B, 0xED, 0x8B, 0xED, 0x8C, 0x0D, 0x83, 0xCD, 0x83, 0xCD, 0x7B, 0x6B, 0x83, 0xAC, 0x83, 0xCC, 0x83, 0xCC, 0x83, 0xCC, 0x8C, 0x0E, 0x94, 0x4E, 0x8C, 0x2E, 0x8C, 0x2E, 0x9C, 0x8F, 0x8C, 0x0E, 0x83, 0xCC, 0x83, 0xED, 0x83, 0xCD, 0x8C, 0x2E, 0xB5, 0x32, 0xB5, 0x73, 0xBD, 0x93, 0xD6, 0x56, 0xDE, 0x96, 0xE6, 0xD7, 0xE6, 0xD7, 0xE6, 0xD7, 0xE6, 0xB7, 0xE6, 0xB7, 0xE6, 0xB7, 0xE6, 0xB6, 0xE6, 0xD7, 0xE6, 0xD6, 0xE6, 0xD6, 0xE6, 0xD7, 0xE6, 0xB6, 0xE6, 0xD7, 0xDE, 0x96, 0xDE, 0x76, 0xDE, 0x75, 0xDE, 0x75, 0xE6, 0xB6, 0xE6, 0xB6, 0xE6, 0xB6, 0xC5, 0xF4, 0xB5, 0x32, 0xDE, 0x76, 0xDE, 0x75, 0xE6, 0xB7, 0xC5, 0xB4, 0x73, 0x4B, 0x39, 0xC6, 0x31, 0x85, 0x31, 0x85, 0x29, 0x64, 0x3A, 0x25, 0x5B, 0xA9, 0x7C, 0xCC, 0x8D, 0x2E, 0x8D, 0x6F, 0x7C, 0xCC, 0x6C, 0x6A, 0x74, 0x2A, 0x94, 0xAE, 0x7B, 0x8B, 0x62, 0xA8, 0x9C, 0xB0, 0x9C, 0xAF, 0xB5, 0x71, 0x9D, 0x0E, 0x84, 0xAA, 0x95, 0x8C, 0x74, 0x89, 0x64, 0x06, 0x6C, 0x68, 0x7C, 0xEA, 0x8D, 0x6E, 0x95, 0x4F, 0xC6, 0x13, 0xDE, 0x35, 0xD5, 0xD4, 0xCD, 0x93, 0xC5, 0x93, 0xC5, 0xB4, 0xCD, 0xB4, 0xD5, 0xD3, 0xDE, 0x15, 0xDE, 0x35, 0xDE, 0x16, 0xE6, 0x56, 0xDE, 0x15, 0xCD, 0x93, 0xDE, 0x57, 0xCD, 0xF7, 0xBD, 0x96, 0x5A, 0xCA, 0x42, 0x07, 0x4A, 0x69, 0x52, 0xA9, 0x6B, 0x2B, 0x73, 0x8C, 0xA4, 0xF0, 0xBD, 0x93, 0xBD, 0x93, 0xBD, 0xB3, 0xBD, 0x93, 0x8C, 0x2D, 0x8C, 0x2D, 0xA4, 0xF1, 0xAC, 0xF0, 0xA4, 0x8E, 0xDE, 0x55, 0xB5, 0x31, 0x8C, 0x0C, 0x94, 0x4E, 0x8C, 0x0E, 0xC5, 0xB4, 0xC5, 0xB3, 0xBD, 0x52, 0xB5, 0x10, 0x94, 0x0C, 0x9C, 0x4D, 0xC5, 0x92, 0xC5, 0xB3, 0xBD, 0x72, 0xBD, 0x72, 0xAC, 0xD0, 0x8C, 0x0C, 0x9C, 0x8E, 0xAC, 0xF0, 0xAD, 0x10, 0xAC, 0xEF, 0xA4, 0xAE, 0xAC, 0xCE, 0xA4, 0x8D, 0xB5, 0x10, 0xAC, 0xCE, 0xAC, 0xAE, 0xA4, 0x8D, 0xA4, 0x6D, 0xAC, 0xAE, 0xBD, 0x30, 0xB5, 0x0F, 0xAC, 0xCE, 0xAC, 0xCE, 0xAC, 0xCE, 0xAC, 0xAE, 0xB4, 0xEF, 0xB4, 0xEF, 0xB4, 0xEE, 0xB4, 0xCE, 0xB4, 0xEF, 0xBD, 0x0F, 0xBD, 0x0F, 0xBC, 0xEF, 0xB4, 0xEE, 0xAC, 0xAE, 0xA4, 0x8D, 0xAC, 0xAE, 0x9C, 0x4D, 0x6A, 0xE9, 0x39, 0xC6, 0x39, 0xA6, 0x39, 0xE7, 0x42, 0x28, 0x52, 0xCB, 0x73, 0xAF, 0x84, 0x11, 0x9C, 0xD4, 0xB5, 0xD8, 0xCE, 0x7A, 0xD6, 0xBB, 0xDE, 0xDB, 0xE6, 0xDC, 0xD6, 0x59, 0xA4, 0xD2, 0x83, 0xAD, 0x83, 0xAC, 0x8B, 0xED, 0x8B, 0xED, 0x94, 0x2E, 0xA4, 0x8F, 0xCD, 0xF4, 0xC5, 0x93, 0xC5, 0x92, 0xBD, 0x31, 0xB4, 0xEF, 0xAC, 0xCE, 0xE6, 0x54, 0xEE, 0x55, 0xE6, 0x14, 0xBD, 0x11, 0x73, 0x4B, 0x8C, 0x71, 0xC6, 0x18, 0xAD, 0x76, 0xC6, 0x39, 0xEF, 0x5E, 0xDE, 0xFC, 0xBD, 0xF7, 0xBD, 0xB5, 0xC5, 0xD5, 0xCE, 0x56, 0xD6, 0x56, 0xBD, 0x51, 0xAC, 0xF0, 0xCD, 0xD3, 0xC5, 0xB3, 0xC5, 0xB3, 0xCD, 0xB3, 0xBD, 0x72, 0x8C, 0x2E, 0x5A, 0xA9, 0x63, 0x0A, 0x6B, 0x2B, 0x31, 0x65, 0x39, 0xA6, 0x52, 0x69, 0x5A, 0xCA, 0x6B, 0x2B, 0x62, 0xCA, 0x31, 0x65, 0x4A, 0x07, 0x7B, 0xAD, 0xA4, 0xD2, 0x8C, 0x30, 0x73, 0x8E, 0x84, 0x10, 0x9C, 0xB3, 0xB5, 0x96, 0xAD, 0x55, 0xDE, 0xBB, 0xE6, 0xDB, 0xD6, 0x59, 0xCE, 0x18, 0xF7, 0x5D, 0xEE, 0xFB, 0xD6, 0x58, 0xDE, 0x79, 0xF7, 0x3B, 0xC5, 0xB6, 0x73, 0x4D, 0x8C, 0x2F, 0x6B, 0x0B, 0x42, 0x08, 0x73, 0x8C, 0x52, 0xA9, 0x4A, 0x48, 0x42, 0x07, 0x3A, 0x07, 0x4A, 0x69, 0x42, 0x48, 0x31, 0xA6, 0x31, 0xA6, 0x4A, 0x49, 0x5A, 0xCB, 0x52, 0x69, 0x52, 0x6A, 0x63, 0x2C, 0x7B, 0xCF, 0x9C, 0xD3, 0xA5, 0x14, 0xA5, 0x34, 0x8C, 0x50, 0x9C, 0xB1, 0xBD, 0xD4, 0xCE, 0x16, 0xB5, 0x73, 0xA4, 0xD1, 0xAD, 0x32, 0xAD, 0x32, 0xAD, 0x32, 0xA4, 0xF1, 0xC5, 0xF5, 0xBD, 0xB4, 0xA4, 0xD1, 0x94, 0x4F, 0x94, 0x4F, 0x94, 0x90, 0x9C, 0x90, 0x9C, 0xB0, 0x9C, 0xB0, 0xAD, 0x33, 0xBD, 0x94, 0xCE, 0x36, 0xCE, 0x15, 0xC5, 0xF4, 0xC5, 0xF4, 0xB5, 0x73, 0xB5, 0x53, 0xAD, 0x32, 0xAC, 0xF1, 0xAD, 0x11, 0x9C, 0xB0, 0x94, 0x4E, 0x8C, 0x2E, 0x9C, 0x8F, 0x9C, 0x2E, 0x8B, 0xCD, 0x83, 0x8C, 0x94, 0x2E, 0xAC, 0xD0, 0xCD, 0xD4, 0xCD, 0xD4, 0xC5, 0x93, 0xCD, 0xF4, 0xCD, 0xD4, 0xCD, 0xB3, 0xBD, 0x72, 0xB5, 0x10, 0xBD, 0x52, 0xC5, 0x72, 0xBD, 0x52, 0xBD, 0x52, 0xB5, 0x11, 0xAC, 0xF1, 0xAC, 0xF1, 0xA4, 0xD0, 0xB5, 0x11, 0xB5, 0x11, 0xB5, 0x12, 0xB5, 0x32, 0xB5, 0x12, 0xB5, 0x11, 0xAD, 0x11, 0xAD, 0x11, 0xAD, 0x11, 0xAC, 0xF1, 0xAC, 0xF1, 0xA4, 0xB0, 0x9C, 0x90, 0xA4, 0xB0, 0xAC, 0xF1, 0xA4, 0xD1, 0x9C, 0x6F, 0x8C, 0x0E, 0x83, 0xCD, 0x83, 0xED, 0x94, 0x2E, 0x94, 0x4F, 0xA4, 0xD1, 0x9C, 0x90, 0xBD, 0x93, 0xCE, 0x14, 0xDE, 0x76, 0xDE, 0x76, 0xD6, 0x56, 0xD6, 0x56, 0xDE, 0x76, 0xDE, 0x96, 0xDE, 0x96, 0xDE, 0x96, 0xE6, 0xB6, 0xE6, 0xB6, 0xEE, 0xD6, 0xEE, 0xD7, 0xEE, 0xF8, 0xE6, 0xD7, 0xE6, 0xD7, 0xE6, 0xF7, 0xEE, 0xF7, 0xEE, 0xF7, 0xEE, 0xF7, 0xF7, 0x18, 0xCE, 0x14, 0xC5, 0xB4, 0xEF, 0x18, 0xE6, 0x96, 0xE6, 0xB6, 0xEE, 0xD7, 0xEE, 0xF8, 0xAD, 0x11, 0x39, 0xC6, 0x31, 0x85, 0x31, 0x85, 0x29, 0x64, 0x32, 0x25, 0x4B, 0x27, 0x74, 0x8B, 0x85, 0x0C, 0x74, 0x8A, 0x6C, 0x6A, 0x21, 0xA2, 0x5A, 0xE9, 0x9C, 0xEF, 0xA5, 0x0F, 0x73, 0x8A, 0x62, 0xE9, 0x73, 0x6B, 0x8C, 0x6E, 0x7C, 0x4B, 0x84, 0xCA, 0x74, 0xA9, 0x63, 0xE8, 0x53, 0x67, 0x7C, 0xAB, 0x7C, 0xCC, 0x8D, 0x0E, 0xCE, 0x33, 0xD6, 0x14, 0xCD, 0xB3, 0xCD, 0xB4, 0xCD, 0xD4, 0xD5, 0xF5, 0xCD, 0x93, 0xCD, 0xB3, 0xE6, 0x56, 0xE6, 0x56, 0xD5, 0xF5, 0xAC, 0xF2, 0x9C, 0x50, 0xB5, 0x13, 0xBD, 0x54, 0xB5, 0x34, 0xA4, 0xB2, 0x39, 0xE7, 0x4A, 0x49, 0x52, 0x89, 0x5A, 0xAA, 0x5A, 0xCA, 0x6B, 0x4B, 0x9C, 0xB0, 0xAD, 0x32, 0xAD, 0x11, 0xAD, 0x11, 0xAD, 0x31, 0x94, 0x2E, 0x83, 0xCD, 0xAD, 0x32, 0xB5, 0x11, 0xA4, 0x8D, 0xD6, 0x34, 0xB5, 0x11, 0x8B, 0xEC, 0x8C, 0x2E, 0x94, 0x4F, 0xD6, 0x56, 0xBD, 0x52, 0xB5, 0x10, 0xA4, 0xAE, 0x83, 0xAA, 0x8C, 0x0C, 0xA4, 0xAF, 0xAD, 0x10, 0xBD, 0x92, 0xD6, 0x56, 0xC5, 0xB3, 0x7B, 0xAB, 0xAD, 0x11, 0xC5, 0xD4, 0xBD, 0xD3, 0xC5, 0xF4, 0xB5, 0x31, 0xA4, 0x8D, 0x9C, 0x4D, 0xC5, 0x92, 0xBD, 0x71, 0xAC, 0xEF, 0x9C, 0x4D, 0x94, 0x2C, 0x83, 0xCC, 0x7B, 0x6A, 0x83, 0xEB, 0x83, 0xCB, 0x83, 0xAB, 0x94, 0x0C, 0x73, 0x49, 0x83, 0xCB, 0x83, 0xCA, 0x94, 0x2C, 0x9C, 0x6D, 0x9C, 0x6D, 0x94, 0x2C, 0x94, 0x0C, 0xA4, 0x8E, 0xB4, 0xEF, 0xBD, 0x30, 0xB5, 0x10, 0xBD, 0x30, 0xC5, 0x92, 0xAC, 0xCF, 0x8B, 0xEC, 0x4A, 0x27, 0x31, 0xA6, 0x31, 0xA6, 0x3A, 0x07, 0x52, 0x8A, 0x5A, 0xCC, 0x84, 0x31, 0xA5, 0x15, 0xA5, 0x35, 0xA5, 0x35, 0xB5, 0x97, 0xE7, 0x1D, 0xEF, 0x5D, 0xE6, 0xFC, 0xAC, 0xF3, 0x94, 0x4F, 0x9C, 0x4E, 0x94, 0x0D, 0x8B, 0xCC, 0x8B, 0xAB, 0x8B, 0xAB, 0x83, 0x8B, 0x83, 0x8B, 0x8B, 0xCB, 0x9C, 0x2C, 0x8B, 0xAA, 0x8B, 0xAB, 0x9C, 0x2C, 0xAC, 0x8E, 0x9C, 0x2D, 0x9C, 0x8F, 0x8C, 0x2E, 0x8C, 0x70, 0xA5, 0x14, 0xDE, 0xBB, 0xE7, 0x3D, 0xDE, 0xDC, 0xE7, 0x3D, 0xB5, 0x95, 0xC5, 0xD5, 0xCE, 0x36, 0xC5, 0xF4, 0xA4, 0x8F, 0x9C, 0x4D, 0xAD, 0x10, 0xD6, 0x15, 0xD6, 0x15, 0xD5, 0xF4, 0xC5, 0xB3, 0xC5, 0x72, 0xC5, 0xB4, 0xD6, 0x35, 0xAD, 0x31, 0x41, 0xC6, 0x39, 0xA6, 0x29, 0x44, 0x39, 0xE7, 0x4A, 0x28, 0x5A, 0x89, 0x62, 0xEB, 0x52, 0x89, 0x42, 0x07, 0x62, 0xCA, 0x9C, 0x71, 0x94, 0x71, 0x6B, 0x4D, 0x8C, 0x51, 0xB5, 0x75, 0xB5, 0x76, 0xAD, 0x35, 0xC5, 0xF8, 0xBD, 0x96, 0xDE, 0xDB, 0xF7, 0x7D, 0xF7, 0x5D, 0xCD, 0xF7, 0xC5, 0xB6, 0xE6, 0xBA, 0xEE, 0x9A, 0xDE, 0x59, 0xBD, 0x75, 0xB5, 0x55, 0x39, 0xE7, 0x42, 0x07, 0x5A, 0xEA, 0x52, 0xA9, 0x4A, 0x48, 0x4A, 0x68, 0x42, 0x07, 0x39, 0xC6, 0x31, 0x85, 0x39, 0xE7, 0x42, 0x28, 0x4A, 0x89, 0x4A, 0x69, 0x52, 0xAA, 0x63, 0x2C, 0x6B, 0x8E, 0x73, 0xAF, 0x9C, 0xD3, 0xBD, 0xF7, 0xB5, 0x96, 0x8C, 0x50, 0xAD, 0x32, 0xBD, 0xB4, 0xB5, 0x52, 0xAD, 0x12, 0xB5, 0x33, 0xB5, 0x32, 0xAD, 0x12, 0xB5, 0x32, 0xBD, 0x94, 0xC5, 0xF5, 0x94, 0x6F, 0x9C, 0xB1, 0xBD, 0xD5, 0xB5, 0x94, 0xBD, 0xD5, 0xBD, 0x94, 0x9C, 0x90, 0xAD, 0x12, 0xBD, 0xD4, 0xD6, 0x55, 0xCE, 0x34, 0xD6, 0x75, 0xD6, 0x55, 0xB5, 0x73, 0x8C, 0x4F, 0x9C, 0xD0, 0xAD, 0x32, 0xAD, 0x12, 0xAD, 0x52, 0xA4, 0xF1, 0x9C, 0xB0, 0xAC, 0xF1, 0x83, 0x8C, 0x73, 0x2A, 0x83, 0xAC, 0x9C, 0x6F, 0xB5, 0x11, 0xA4, 0x6E, 0xBD, 0x52, 0xAC, 0xF0, 0xA4, 0xAF, 0xAC, 0xF0, 0xB5, 0x30, 0xBD, 0x51, 0xC5, 0x51, 0xC5, 0x92, 0xCD, 0xD3, 0xCD, 0xD3, 0xCD, 0xB2, 0xCD, 0xD3, 0xBD, 0x72, 0xAC, 0xD0, 0x94, 0x2D, 0x8B, 0xED, 0x8B, 0xAC, 0x9C, 0x6F, 0x8C, 0x0E, 0x8C, 0x0D, 0x94, 0x2E, 0x94, 0x4E, 0x94, 0x4E, 0x94, 0x4E, 0x9C, 0x6F, 0xAC, 0xF1, 0xA4, 0x8F, 0x9C, 0x8F, 0xA4, 0xB0, 0xA4, 0xB0, 0xA4, 0xB0, 0xAD, 0x11, 0xAD, 0x12, 0xAC, 0xF1, 0xAC, 0xF1, 0xAC, 0xF1, 0x9C, 0x6F, 0x94, 0x2E, 0x94, 0x4F, 0x9C, 0x6F, 0xAD, 0x12, 0xA4, 0xD1, 0x9C, 0xB1, 0xAC, 0xF2, 0xAD, 0x32, 0xB5, 0x32, 0xAD, 0x32, 0xAD, 0x11, 0xAD, 0x32, 0xB5, 0x32, 0xB5, 0x52, 0xBD, 0x72, 0xBD, 0x93, 0xC5, 0xB3, 0xC5, 0xD4, 0xC5, 0xD4, 0xC5, 0xD4, 0xC5, 0xD4, 0xC5, 0xB3, 0xBD, 0x93, 0xBD, 0x73, 0xAC, 0xF1, 0xB5, 0x52, 0xDE, 0x96, 0xDE, 0x55, 0xD6, 0x35, 0xD6, 0x35, 0xDE, 0x96, 0xDE, 0x76, 0x7B, 0xCD, 0x31, 0xA5, 0x31, 0x85, 0x4A, 0x67, 0x6C, 0x0B, 0x7C, 0xAC, 0x85, 0x0D, 0x6C, 0x6A, 0x6C, 0x49, 0x5B, 0x88, 0x19, 0x22, 0x31, 0xC5, 0x63, 0x49, 0xB5, 0xB0, 0x62, 0xE8, 0x29, 0x24, 0x41, 0xE6, 0x5A, 0x88, 0x5A, 0xE8, 0x74, 0x09, 0x7C, 0x8A, 0x6C, 0x0A, 0x42, 0x67, 0xAD, 0x91, 0xCE, 0x53, 0x9D, 0x2F, 0xD6, 0x75, 0xD5, 0xF4, 0xCD, 0xB3, 0xD5, 0xF5, 0xDE, 0x36, 0xDE, 0x36, 0xC5, 0x73, 0xD5, 0xD5, 0xCD, 0xB4, 0xCD, 0x94, 0xC5, 0x95, 0xCD, 0xF7, 0xCE, 0x18, 0xB5, 0x55, 0xAC, 0xF3, 0xB5, 0x34, 0xAD, 0x14, 0x31, 0xA7, 0x42, 0x28, 0x4A, 0x48, 0x52, 0xAA, 0x5A, 0xAA, 0x63, 0x0A, 0x8C, 0x6F, 0xA4, 0xF1, 0xA4, 0xD0, 0x9C, 0xB0, 0xA4, 0xF0, 0x8C, 0x2E, 0x7B, 0xAC, 0xAD, 0x32, 0xA4, 0xCF, 0x9C, 0x8E, 0xD6, 0x35, 0xBD, 0x71, 0x94, 0x4E, 0x8C, 0x2E, 0x94, 0x6F, 0xCD, 0xF5, 0xA4, 0xAF, 0x83, 0xAB, 0xA4, 0xAF, 0x9C, 0x6E, 0x94, 0x4E, 0x8C, 0x2E, 0xA4, 0xD0, 0xCE, 0x15, 0xD6, 0x76, 0xBD, 0xB4, 0x94, 0x4E, 0xB5, 0x93, 0xCE, 0x15, 0xBD, 0xB4, 0xCE, 0x15, 0xB5, 0x51, 0x9C, 0x6D, 0x9C, 0x8E, 0xB5, 0x71, 0xBD, 0x92, 0xC5, 0xD3, 0xC5, 0xD4, 0xC5, 0xD3, 0xBD, 0xB3, 0xB5, 0x93, 0x9C, 0xAF, 0x7B, 0xAB, 0x9C, 0xAF, 0xA4, 0xAF, 0xA4, 0xF0, 0xB5, 0x52, 0xAD, 0x31, 0xAD, 0x10, 0xB5, 0x31, 0x9C, 0x8F, 0x7B, 0x8B, 0x7B, 0xAB, 0x9C, 0x6E, 0xC5, 0x72, 0xB4, 0xEF, 0x9C, 0x6C, 0xBD, 0x51, 0xC5, 0x71, 0xAC, 0xAF, 0x9C, 0x4D, 0xA4, 0x8F, 0x52, 0x47, 0x31, 0xA5, 0x31, 0xA5, 0x42, 0x28, 0x4A, 0x69, 0x63, 0x0C, 0x7B, 0xCF, 0x6B, 0x4D, 0x73, 0x8E, 0xB5, 0xB7, 0xCE, 0x7A, 0xCE, 0x5A, 0xE6, 0xFC, 0xD6, 0x7A, 0xCE, 0x18, 0xBD, 0x74, 0xC5, 0x93, 0xB5, 0x31, 0xA4, 0x8E, 0xA4, 0x8E, 0xAC, 0xCF, 0xB4, 0xF0, 0xAC, 0xAE, 0xAC, 0xAE, 0xAC, 0xCF, 0x9C, 0x4D, 0x9C, 0x2D, 0xA4, 0x4D, 0x9C, 0x4D, 0x9C, 0x4E, 0x9C, 0x8F, 0x6B, 0x4C, 0x9C, 0xD3, 0xA5, 0x14, 0xD6, 0x9A, 0xC6, 0x19, 0xE7, 0x1C, 0xCE, 0x59, 0x83, 0xCE, 0x8B, 0xED, 0x94, 0x0D, 0x9C, 0x4D, 0xA4, 0x6E, 0x94, 0x0D, 0x83, 0xAB, 0x83, 0x8B, 0x83, 0xAB, 0x8B, 0xEC, 0x9C, 0x2D, 0xA4, 0x6E, 0xA4, 0xAF, 0x94, 0x2D, 0x8B, 0xED, 0x6A, 0xE9, 0x31, 0xA5, 0x39, 0xC5, 0x42, 0x06, 0x52, 0x68, 0x6B, 0x2B, 0x6B, 0x2C, 0x9C, 0xB2, 0x94, 0x50, 0x62, 0xCA, 0x83, 0xEF, 0x9C, 0xD2, 0x63, 0x0C, 0x73, 0xAF, 0x94, 0xB2, 0x9C, 0xB2, 0x94, 0x92, 0xAD, 0x55, 0xCE, 0x39, 0xEF, 0x5D, 0xD6, 0x79, 0xC5, 0xF7, 0xCE, 0x18, 0xBD, 0xB6, 0xD6, 0x39, 0xE6, 0x9A, 0xFF, 0x5D, 0xC5, 0xD7, 0x6A, 0xEC, 0x4A, 0x08, 0x5A, 0xCA, 0x52, 0x89, 0x42, 0x28, 0x42, 0x27, 0x39, 0xE7, 0x39, 0xC6, 0x31, 0x85, 0x31, 0xA6, 0x39, 0xC6, 0x4A, 0x69, 0x5A, 0xEB, 0x5A, 0xCA, 0x5A, 0xCA, 0x6B, 0x6D, 0x84, 0x30, 0xAD, 0x55, 0xB5, 0x96, 0xBD, 0xD7, 0xB5, 0x74, 0xB5, 0x74, 0xBD, 0xB4, 0xB5, 0x52, 0xA4, 0xF1, 0xAD, 0x12, 0xAD, 0x32, 0xB5, 0x53, 0xB5, 0x73, 0xBD, 0x93, 0xC5, 0xF5, 0xAD, 0x32, 0xA5, 0x12, 0xBD, 0xB4, 0xC5, 0xF5, 0xC5, 0xF5, 0xBD, 0xB4, 0xA4, 0xD1, 0xAD, 0x53, 0xBD, 0x93, 0xCE, 0x14, 0xCE, 0x34, 0xD6, 0x55, 0xCE, 0x35, 0xA4, 0xF1, 0xB5, 0x74, 0xB5, 0x94, 0xAD, 0x32, 0xB5, 0x94, 0xBD, 0x94, 0xA5, 0x11, 0x9C, 0x8F, 0xAC, 0xF1, 0x94, 0x0D, 0x83, 0x8C, 0x94, 0x2D, 0xBD, 0x32, 0xB4, 0xF0, 0xAC, 0xAF, 0xBD, 0x32, 0x9C, 0x8F, 0xA4, 0xB0, 0xB5, 0x31, 0xCD, 0xB3, 0xD5, 0xD3, 0xCD, 0xB2, 0xCD, 0xB3, 0xCD, 0xD3, 0xCD, 0xB2, 0xC5, 0x51, 0xA4, 0x8F, 0x8B, 0xCC, 0x8B, 0xED, 0x94, 0x2D, 0x94, 0x2D, 0x8B, 0xCC, 0xA4, 0x90, 0x9C, 0x8F, 0xAC, 0xF0, 0xBD, 0x72, 0xBD, 0x93, 0xB5, 0x52, 0xA4, 0xD0, 0xA4, 0xB0, 0xA4, 0xF0, 0xA4, 0xAF, 0xA4, 0xB0, 0xAC, 0xF1, 0xA4, 0xD0, 0x9C, 0x6F, 0x9C, 0x6F, 0xB5, 0x12, 0xAD, 0x11, 0xA4, 0xB0, 0x9C, 0x6F, 0x83, 0xCD, 0x7B, 0x8B, 0xB5, 0x32, 0xCD, 0xF4, 0xBD, 0x93, 0x94, 0x6F, 0xA4, 0xD0, 0xC5, 0xD5, 0xBD, 0x73, 0xB5, 0x32, 0xCD, 0xD4, 0xD6, 0x35, 0xD6, 0x36, 0xB5, 0x52, 0xB5, 0x32, 0xB5, 0x32, 0xB5, 0x32, 0xC5, 0xB4, 0xBD, 0x94, 0xBD, 0x73, 0xB5, 0x52, 0xB5, 0x52, 0xBD, 0x73, 0xBD, 0x73, 0xBD, 0x73, 0xB5, 0x53, 0xB5, 0x53, 0xB5, 0x32, 0xB5, 0x32, 0xAC, 0xF1, 0xA4, 0xD1, 0x9C, 0xB0, 0x9C, 0x90, 0x9C, 0xD0, 0x8C, 0x2E, 0x4A, 0x68, 0x5B, 0x08, 0x6C, 0x2A, 0x6C, 0x4A, 0x53, 0xA8, 0x3A, 0xA5, 0x32, 0x44, 0x29, 0xC3, 0x21, 0x83, 0x4A, 0xE7, 0x4A, 0xE7, 0x7B, 0xEB, 0x8C, 0x6E, 0x42, 0x07, 0x29, 0x44, 0x39, 0xA6, 0x52, 0x67, 0x5B, 0x28, 0x53, 0x08, 0x42, 0xA7, 0x3A, 0x07, 0x73, 0x8B, 0xCE, 0x14, 0xBD, 0x92, 0xCD, 0xF3, 0xCD, 0xF4, 0xBD, 0xB3, 0xE6, 0xD8, 0xEE, 0xD9, 0xDE, 0x57, 0xE6, 0xB9, 0xE6, 0xD9, 0xD6, 0x77, 0xD6, 0x78, 0xD6, 0x17, 0xAD, 0x13, 0xBD, 0x75, 0xC5, 0xB6, 0xBD, 0x96, 0xC5, 0xB6, 0xBD, 0x96, 0x31, 0x86, 0x39, 0xE7, 0x42, 0x28, 0x4A, 0x28, 0x52, 0x69, 0x5A, 0xEA, 0x7B, 0xCD, 0x94, 0x90, 0x94, 0x90, 0x94, 0x70, 0x94, 0x70, 0x83, 0xEE, 0x83, 0xEE, 0xBD, 0xB4, 0xAC, 0xD0, 0xA4, 0x8E, 0xD6, 0x14, 0xCD, 0xD3, 0xA4, 0xB0, 0x94, 0x6F, 0x94, 0x6F, 0xBD, 0x93, 0xBD, 0x72, 0xB5, 0x52, 0xCE, 0x15, 0xBD, 0x93, 0xC5, 0xD4, 0x9C, 0x90, 0xB5, 0x53, 0xCE, 0x15, 0xC5, 0xF4, 0xB5, 0x52, 0xA4, 0xD0, 0xC5, 0xF5, 0xCE, 0x35, 0xCE, 0x56, 0xC5, 0xD4, 0xB5, 0x31, 0xAC, 0xCF, 0xA4, 0xAE, 0xBD, 0x72, 0xBD, 0x93, 0xC5, 0xD4, 0xC5, 0xD4, 0xC5, 0xB3, 0xCE, 0x35, 0xCE, 0x35, 0xAD, 0x11, 0x63, 0x09, 0xBD, 0xD4, 0xD6, 0x76, 0xCE, 0x55, 0xD6, 0x55, 0xD6, 0x76, 0xD6, 0x76, 0xCE, 0x35, 0xBD, 0x93, 0xC5, 0xD4, 0xD6, 0x56, 0xCE, 0x14, 0xDE, 0x55, 0xB5, 0x10, 0xAC, 0xAE, 0xEE, 0xB6, 0xEE, 0xD7, 0xEE, 0xB6, 0xE6, 0x76, 0xE6, 0x55, 0xCD, 0x93, 0x72, 0xE9, 0x31, 0x84, 0x39, 0xC6, 0x42, 0x07, 0x4A, 0x48, 0x5A, 0xAB, 0x5A, 0xCB, 0x73, 0xAF, 0xAD, 0x76, 0xB5, 0xD8, 0xC6, 0x19, 0xD6, 0x9B, 0xE7, 0x1D, 0xEF, 0x5D, 0xCE, 0x59, 0x9C, 0x91, 0x94, 0x0D, 0xA4, 0xAE, 0xAC, 0xCF, 0xC5, 0xB2, 0xC5, 0x71, 0xBD, 0x71, 0xC5, 0x92, 0x9C, 0x2D, 0x83, 0x49, 0x9C, 0x2D, 0xB5, 0x11, 0xAC, 0xAF, 0x94, 0x0D, 0x9C, 0x6E, 0x6B, 0x2B, 0x8C, 0x71, 0x9C, 0xD3, 0xD6, 0xBA, 0xCE, 0x59, 0xBD, 0xD7, 0xEF, 0x3D, 0xC6, 0x17, 0x94, 0x2F, 0x9C, 0x4E, 0xAC, 0xCF, 0xB5, 0x10, 0xAC, 0xCF, 0xAC, 0xF0, 0xB4, 0xF0, 0xB4, 0xF0, 0xB4, 0xF0, 0xB5, 0x10, 0xB5, 0x10, 0xBD, 0x31, 0xBD, 0x31, 0xBD, 0x51, 0x83, 0xAC, 0x29, 0x23, 0x6B, 0x2A, 0x8C, 0x4E, 0x63, 0x09, 0x52, 0x89, 0x42, 0x07, 0x5A, 0xCA, 0x8B, 0xEE, 0x6B, 0x0B, 0x31, 0x85, 0x6B, 0x2C, 0x6B, 0x2C, 0x62, 0xEC, 0x5A, 0xAB, 0x7B, 0xEF, 0x94, 0xB2, 0x9C, 0xB3, 0xA5, 0x35, 0xA5, 0x14, 0xC5, 0xF8, 0xEF, 0x5D, 0xE6, 0xFB, 0xDE, 0x9A, 0xCE, 0x18, 0xDE, 0x9A, 0xF7, 0x3C, 0xF7, 0x3D, 0xD6, 0x18, 0xA4, 0xD3, 0xA4, 0xB2, 0x62, 0xCA, 0x42, 0x07, 0x42, 0x07, 0x42, 0x07, 0x42, 0x27, 0x39, 0xE7, 0x39, 0xE7, 0x42, 0x07, 0x4A, 0x28, 0x52, 0x89, 0x52, 0xAA, 0x5A, 0xEB, 0x6B, 0x6D, 0x84, 0x10, 0xA5, 0x14, 0xB5, 0x96, 0xA5, 0x14, 0xB5, 0xB5, 0xAD, 0x53, 0xC5, 0xD4, 0xC5, 0xB4, 0xB5, 0x52, 0xBD, 0x73, 0xBD, 0x73, 0xBD, 0x73, 0xB5, 0x73, 0xB5, 0x73, 0xC5, 0xB4, 0xAD, 0x32, 0xAD, 0x33, 0xA4, 0xF2, 0xAD, 0x32, 0xAD, 0x12, 0xAD, 0x53, 0xA4, 0xD1, 0xAD, 0x53, 0xBD, 0x93, 0xBD, 0x93, 0xC5, 0xF3, 0xD6, 0x55, 0xCE, 0x14, 0x9C, 0xB0, 0xAD, 0x33, 0xC5, 0xF5, 0xB5, 0x73, 0xAD, 0x32, 0xAD, 0x12, 0xA4, 0xD1, 0x9C, 0x8F, 0xA4, 0xB0, 0x9C, 0x4E, 0xA4, 0x6F, 0xB4, 0xF0, 0xC5, 0x52, 0xAC, 0x8F, 0xB4, 0xF1, 0xC5, 0x93, 0xA4, 0x8F, 0xA4, 0xD0, 0xAC, 0xF0, 0xCD, 0xB2, 0xD5, 0xD3, 0xCD, 0xB3, 0xCD, 0xB2, 0xD5, 0xD3, 0xCD, 0x92, 0xBD, 0x31, 0x8B, 0xEC, 0x7B, 0x8C, 0x7B, 0xAC, 0x83, 0xCD, 0x83, 0xAB, 0x8B, 0xCC, 0xA4, 0xD0, 0xAD, 0x31, 0xB5, 0x72, 0xB5, 0x72, 0xB5, 0x72, 0xB5, 0x52, 0xB5, 0x52, 0xAD, 0x11, 0xA4, 0xF0, 0xA4, 0xD0, 0xB5, 0x32, 0xBD, 0x73, 0xB5, 0x72, 0xB5, 0x52, 0xA4, 0xF0, 0xBD, 0x72, 0xBD, 0x92, 0xC5, 0xB3, 0xA4, 0xF0, 0x83, 0xCD, 0xBD, 0xB3, 0xB5, 0x31, 0xDE, 0x75, 0xCE, 0x14, 0x8C, 0x2E, 0xB5, 0x31, 0xC5, 0x93, 0x94, 0x4F, 0x73, 0x4B, 0xBD, 0x73, 0xD6, 0x14, 0xAD, 0x11, 0x94, 0x4F, 0x94, 0x4E, 0x94, 0x2E, 0x9C, 0x6F, 0xBD, 0x72, 0x83, 0xCC, 0x94, 0x4E, 0x94, 0x6F, 0xBD, 0x73, 0xBD, 0x73, 0xA4, 0xB0, 0xAD, 0x11, 0xB5, 0x11, 0xBD, 0x73, 0xC5, 0xB4, 0xDE, 0x77, 0xC5, 0xD4, 0x94, 0x2F, 0xD6, 0x77, 0xE6, 0xD7, 0xEE, 0xF8, 0xDE, 0xB7, 0xBD, 0xF4, 0x84, 0x6E, 0x74, 0x6C, 0x6C, 0x4A, 0x4B, 0x47, 0x32, 0x85, 0x3A, 0x65, 0x53, 0x28, 0x7C, 0xAD, 0x53, 0x66, 0x5B, 0xE9, 0x42, 0xA6, 0x9D, 0x10, 0x73, 0xAC, 0x52, 0x68, 0x39, 0xA6, 0x52, 0x68, 0x52, 0x87, 0x29, 0x84, 0x3A, 0x06, 0x4A, 0x48, 0x42, 0x07, 0x8C, 0x0E, 0xA4, 0xD0, 0xD6, 0x56, 0xA5, 0x11, 0xA5, 0x72, 0x95, 0x0F, 0xAD, 0x72, 0xEF, 0x3A, 0xC5, 0xF5, 0x94, 0xF0, 0x8C, 0xEF, 0x9D, 0x31, 0xAD, 0x93, 0x8C, 0x0F, 0xBD, 0x96, 0xBD, 0xB6, 0xB5, 0x34, 0xAD, 0x34, 0xA4, 0xD2, 0x29, 0x45, 0x29, 0x86, 0x39, 0xC7, 0x39, 0xE7, 0x39, 0xE7, 0x42, 0x28, 0x52, 0xA9, 0x63, 0x0B, 0x6B, 0x2B, 0x6B, 0x2B, 0x6B, 0x2B, 0x6B, 0x4B, 0x83, 0xCD, 0xB5, 0x73, 0xB5, 0x10, 0x9C, 0x6D, 0xD6, 0x14, 0xC5, 0x92, 0xA4, 0xAF, 0x94, 0x6F, 0x9C, 0x90, 0xCE, 0x35, 0xCD, 0xF4, 0xCE, 0x15, 0xD6, 0x56, 0xBD, 0xD3, 0xCE, 0x15, 0xA4, 0xD1, 0xCE, 0x16, 0xB5, 0x73, 0xA4, 0xF1, 0xAD, 0x32, 0x94, 0x6F, 0xB5, 0x73, 0xCE, 0x15, 0xCE, 0x35, 0xBD, 0x93, 0xB5, 0x31, 0xAC, 0xCF, 0x9C, 0x4D, 0xBD, 0x93, 0xBD, 0x92, 0xBD, 0x92, 0xBD, 0x72, 0xB5, 0x51, 0xB5, 0x72, 0xBD, 0xB3, 0x94, 0x8F, 0x73, 0x8C, 0xB5, 0xB4, 0xCE, 0x35, 0xCE, 0x35, 0xCE, 0x14, 0xCE, 0x34, 0xCE, 0x35, 0xCE, 0x35, 0xCE, 0x35, 0xD6, 0x76, 0xDE, 0x96, 0xD6, 0x76, 0xCD, 0xF3, 0xBD, 0x72, 0xB4, 0xCF, 0xE6, 0xB6, 0xE6, 0xB6, 0xEE, 0xB6, 0xEE, 0x96, 0xD5, 0xD3, 0xD5, 0x72, 0xE6, 0x35, 0xB5, 0x11, 0x52, 0x47, 0x39, 0xC6, 0x39, 0xE6, 0x4A, 0x69, 0x4A, 0x28, 0x5A, 0xCB, 0x8C, 0x51, 0x9C, 0xF4, 0xB5, 0xD8, 0xB5, 0x97, 0xDE, 0xDC, 0xE6, 0xFC, 0xE7, 0x1D, 0xC5, 0xF8, 0xA4, 0xF2, 0xA4, 0x8F, 0xBD, 0x51, 0xE6, 0x75, 0xE6, 0x55, 0xDE, 0x55, 0xCD, 0xD3, 0xA4, 0x6E, 0xAC, 0x8F, 0xCD, 0x93, 0xD5, 0xF4, 0xBD, 0x72, 0xCD, 0xD3, 0xCD, 0xD4, 0xA4, 0xD0, 0x8C, 0x2F, 0x7B, 0xEF, 0xC6, 0x39, 0xCE, 0x59, 0xCE, 0x59, 0xE6, 0xFC, 0xEF, 0x5D, 0xA4, 0xD3, 0x7B, 0x8C, 0x73, 0x6B, 0x73, 0x6B, 0x6B, 0x2A, 0x73, 0x2A, 0x73, 0x4B, 0x7B, 0x8B, 0x83, 0xCC, 0x8C, 0x0D, 0x94, 0x4E, 0x94, 0x4E, 0x94, 0x2D, 0x9C, 0x6E, 0x5A, 0x88, 0x29, 0x24, 0x8C, 0x0E, 0xA4, 0xF0, 0xAD, 0x31, 0x94, 0x4F, 0x41, 0xE6, 0x39, 0xC6, 0x31, 0xA5, 0x21, 0x24, 0x39, 0xE7, 0x31, 0x65, 0x4A, 0x48, 0x63, 0x0B, 0x62, 0xEB, 0x7B, 0xCF, 0x7B, 0xAE, 0x8C, 0x31, 0x84, 0x10, 0x94, 0xB3, 0x94, 0x72, 0xB5, 0x76, 0xDE, 0xBB, 0xF7, 0x7E, 0xEF, 0x3C, 0xC5, 0xD8, 0xBD, 0xB6, 0xDE, 0x79, 0xEF, 0x1B, 0xF7, 0x5C, 0xCD, 0xF6, 0x9C, 0x91, 0x52, 0x48, 0x39, 0xE7, 0x39, 0xE6, 0x39, 0xE7, 0x42, 0x07, 0x42, 0x07, 0x4A, 0x48, 0x4A, 0x69, 0x4A, 0x69, 0x52, 0xAA, 0x63, 0x0C, 0x6B, 0x4D, 0x84, 0x10, 0x83, 0xF0, 0x8C, 0x51, 0x9C, 0xD3, 0xBD, 0xF7, 0xAD, 0x12, 0xC5, 0xB4, 0xC5, 0xB4, 0xC5, 0x93, 0xCD, 0xF4, 0xCD, 0xF5, 0xC5, 0xB4, 0xAD, 0x32, 0xBD, 0x93, 0xB5, 0x53, 0xB5, 0x73, 0xAD, 0x12, 0xA4, 0xF1, 0xA5, 0x11, 0x9C, 0xD1, 0x9C, 0xD1, 0x9C, 0xB0, 0xA4, 0xF1, 0xB5, 0x73, 0xC5, 0xB3, 0xCD, 0xF4, 0xCE, 0x35, 0xC5, 0xF4, 0x94, 0x6F, 0x94, 0x90, 0xB5, 0x74, 0xB5, 0x94, 0xAD, 0x12, 0xAD, 0x53, 0x9C, 0xD0, 0x94, 0x4E, 0xA4, 0xD0, 0x9C, 0x4E, 0xA4, 0x8F, 0xBD, 0x11, 0xBD, 0x31, 0xA4, 0x8F, 0xB5, 0x11, 0xB5, 0x32, 0x9C, 0x90, 0xA4, 0xD0, 0xAC, 0xF0, 0xCD, 0x92, 0xCD, 0x92, 0xCD, 0x92, 0xCD, 0xB2, 0xD5, 0xD3, 0xCD, 0xB2, 0xB5, 0x10, 0x7B, 0xAC, 0x73, 0x6C, 0x7B, 0x8C, 0x7B, 0xAC, 0x7B, 0x8C, 0x83, 0xAC, 0xAC, 0xF1, 0xA4, 0xF0, 0xBD, 0x92, 0xBD, 0x72, 0xAD, 0x31, 0xAD, 0x11, 0xA4, 0xF0, 0x9C, 0x8F, 0xA4, 0xD0, 0xAC, 0xF1, 0xB5, 0x52, 0xB5, 0x52, 0xBD, 0xB3, 0xC5, 0xD3, 0xB5, 0x51, 0xC5, 0xB3, 0xC5, 0x92, 0xC5, 0x93, 0xB5, 0x31, 0xC5, 0x93, 0xDE, 0x55, 0x93, 0xEC, 0xCD, 0xD4, 0xCD, 0xF4, 0x9C, 0x8F, 0xCE, 0x15, 0xD6, 0x36, 0xC5, 0xB4, 0xCD, 0xF6, 0xCE, 0x15, 0xDE, 0x56, 0xCE, 0x15, 0xBD, 0x53, 0x9C, 0x90, 0x8C, 0x0E, 0x9C, 0x90, 0xAD, 0x12, 0xB5, 0x32, 0xBD, 0x73, 0xC5, 0x94, 0xD6, 0x36, 0xD6, 0x35, 0xD6, 0x35, 0xDE, 0x76, 0xE6, 0x76, 0xE6, 0x76, 0xDE, 0x56, 0xDE, 0x76, 0xD6, 0x36, 0xB5, 0x12, 0xCE, 0x16, 0xB5, 0x32, 0x9C, 0x90, 0xA4, 0xF1, 0xA5, 0x11, 0x95, 0x30, 0x8D, 0x2E, 0x8D, 0x2E, 0x74, 0x6B, 0x53, 0x88, 0x5B, 0xE9, 0x85, 0x0E, 0x85, 0x0D, 0x5B, 0xE8, 0x74, 0x8B, 0x6B, 0xCA, 0x84, 0x6C, 0xBD, 0xF2, 0x73, 0xAB, 0x42, 0x27, 0x52, 0xA7, 0x52, 0xC8, 0x31, 0xC5, 0x29, 0x44, 0x42, 0x68, 0x5A, 0xEA, 0x73, 0x8C, 0xBD, 0xF4, 0xEF, 0x7A, 0xD6, 0xF8, 0x84, 0xCF, 0x42, 0xE5, 0x53, 0x87, 0x84, 0xED, 0x74, 0x6B, 0x8D, 0x4F, 0xAE, 0x12, 0xAE, 0x33, 0xBE, 0x75, 0xBD, 0xF5, 0x94, 0x50, 0x8C, 0x10, 0x83, 0xCE, 0x7B, 0xAD, 0x73, 0x4C, 0x31, 0xA6, 0x39, 0xE7, 0x4A, 0x48, 0x52, 0x69, 0x5A, 0xA9, 0x5A, 0xAA, 0x5A, 0xA9, 0x5A, 0xA9, 0x62, 0xEA, 0x63, 0x0A, 0x63, 0x0A, 0x62, 0xEA, 0x73, 0x4B, 0xA4, 0xD0, 0xA4, 0xAF, 0x9C, 0x4D, 0xBD, 0x71, 0xB5, 0x10, 0xB5, 0x11, 0xAC, 0xD1, 0xAC, 0xF1, 0xD6, 0x36, 0xCE, 0x15, 0xC5, 0xD4, 0xC5, 0xD4, 0x94, 0x6E, 0xAD, 0x11, 0x9C, 0xB0, 0xBD, 0xD4, 0xDE, 0xD8, 0xBD, 0x93, 0xC5, 0xD4, 0xC6, 0x15, 0xCE, 0x35, 0xAD, 0x52, 0xCE, 0x15, 0xBD, 0xB3, 0xAD, 0x10, 0xA4, 0x8E, 0x9C, 0x4D, 0xBD, 0x92, 0xBD, 0x93, 0xBD, 0x93, 0xBD, 0x93, 0xC5, 0xD4, 0xBD, 0x93, 0xC5, 0xD4, 0xB5, 0x73, 0xA4, 0xF1, 0xB5, 0x73, 0xBD, 0xB3, 0xBD, 0x92, 0xBD, 0x92, 0xC5, 0xF4, 0xC5, 0xD3, 0xBD, 0x93, 0xBD, 0x93, 0xC5, 0xB3, 0xCE, 0x34, 0xCE, 0x14, 0xD6, 0x14, 0xBD, 0x51, 0xB4, 0xEF, 0xEE, 0xB6, 0xE6, 0x75, 0xE6, 0x75, 0xEE, 0x95, 0xDD, 0xD3, 0xDD, 0xB3, 0xE6, 0x14, 0xF6, 0xD7, 0xDE, 0x55, 0x7B, 0x8C, 0x39, 0xA6, 0x39, 0xC6, 0x39, 0xC6, 0x4A, 0x48, 0x5A, 0xCB, 0x73, 0xAF, 0x94, 0xB3, 0xA5, 0x56, 0xB5, 0xD8, 0xBD, 0xF9, 0xCE, 0x7A, 0xDE, 0xBB, 0xEF, 0x5C, 0xB5, 0x54, 0xCD, 0xD4, 0xD5, 0xF4, 0xE6, 0x55, 0xDE, 0x34, 0xBD, 0x72, 0xBD, 0x52, 0xDE, 0x55, 0xE6, 0x96, 0xE6, 0x96, 0xDE, 0x35, 0xD6, 0x14, 0xDE, 0x14, 0xE6, 0x96, 0xDE, 0x55, 0x9C, 0x6F, 0x94, 0x50, 0xB5, 0x96, 0xB5, 0x76, 0xCE, 0x39, 0xDE, 0xDB, 0xDE, 0x9A, 0xAD, 0x33, 0xAD, 0x53, 0xAD, 0x12, 0x9C, 0xB1, 0x8C, 0x0E, 0x7B, 0xAD, 0x73, 0x4B, 0x6B, 0x4B, 0x6B, 0x4B, 0x6B, 0x2B, 0x5A, 0xA9, 0x52, 0x89, 0x7B, 0xAD, 0x31, 0x64, 0x41, 0xE7, 0x52, 0x68, 0x52, 0x88, 0x73, 0x6B, 0x9C, 0x90, 0x73, 0x4C, 0x41, 0xE6, 0x31, 0x85, 0x4A, 0x28, 0x5A, 0xCA, 0x5A, 0xCA, 0x42, 0x27, 0x42, 0x07, 0x5A, 0xCA, 0x6B, 0x4C, 0x5A, 0xCA, 0x6B, 0x4C, 0x73, 0x8E, 0x8C, 0x31, 0x9C, 0xD3, 0x73, 0x8F, 0x9C, 0xF4, 0xC6, 0x18, 0xDE, 0xBA, 0xD6, 0x7A, 0xBD, 0x96, 0xD6, 0x59, 0xDE, 0x79, 0xFF, 0xDE, 0xEF, 0x3C, 0xCD, 0xF7, 0xA4, 0xD3, 0x4A, 0x28, 0x42, 0x28, 0x39, 0xC6, 0x39, 0xC6, 0x31, 0xA6, 0x42, 0x48, 0x52, 0x89, 0x52, 0xAA, 0x5A, 0xEB, 0x52, 0xCA, 0x63, 0x0C, 0x6B, 0x4D, 0x73, 0x6E, 0x94, 0xB3, 0xB5, 0x96, 0xC6, 0x18, 0xB5, 0x75, 0x9C, 0x91, 0x9C, 0x8F, 0x9C, 0x8F, 0x9C, 0x8F, 0xA4, 0xB0, 0x9C, 0x6F, 0x9C, 0x8F, 0xA4, 0xD0, 0x9C, 0x90, 0xAD, 0x12, 0xBD, 0x73, 0xBD, 0xB4, 0xAD, 0x32, 0xA4, 0xF1, 0x9C, 0xB0, 0xA4, 0xF1, 0xB5, 0x73, 0xD6, 0x56, 0xD6, 0x76, 0xD6, 0x55, 0xD6, 0x55, 0xC5, 0xF4, 0x9C, 0x90, 0x94, 0x70, 0x9C, 0xD1, 0xA4, 0xF1, 0xA4, 0xF1, 0xAD, 0x12, 0x9C, 0xB0, 0x8C, 0x0D, 0xAC, 0xF1, 0x9C, 0x4E, 0xAC, 0xD0, 0xBD, 0x32, 0xC5, 0x73, 0xAC, 0xB0, 0xA4, 0x6F, 0x94, 0x4F, 0x8C, 0x2E, 0x9C, 0x6F, 0xAC, 0xF1, 0xC5, 0x92, 0xCD, 0x92, 0xCD, 0x92, 0xCD, 0x92, 0xC5, 0x71, 0xBD, 0x30, 0xAC, 0xCF, 0x73, 0x8B, 0x73, 0x4B, 0x73, 0x4B, 0x73, 0x4B, 0x7B, 0x6C, 0x8B, 0xED, 0xAC, 0xF1, 0x9C, 0xB0, 0xB5, 0x31, 0xA4, 0xF0, 0xA4, 0xD0, 0xA4, 0xD0, 0xA4, 0xD0, 0xA4, 0xD0, 0xAD, 0x32, 0xB5, 0x72, 0xBD, 0x93, 0xBD, 0x73, 0xB5, 0x52, 0xBD, 0x92, 0xA4, 0xF0, 0xAC, 0xF0, 0xB5, 0x51, 0xBD, 0x72, 0xB5, 0x51, 0xC5, 0x71, 0xD5, 0xF3, 0xBD, 0x31, 0xB5, 0x31, 0xC5, 0x93, 0x9C, 0x90, 0xD6, 0x36, 0xDE, 0x77, 0xD6, 0x56, 0xDE, 0x77, 0xDE, 0x97, 0xE6, 0xB8, 0xDE, 0x77, 0xE6, 0x98, 0xC5, 0xB4, 0xB5, 0x53, 0xDE, 0x98, 0xE6, 0xB8, 0xD6, 0x56, 0xE6, 0x97, 0xEE, 0xD9, 0xE6, 0xB7, 0xEE, 0xF7, 0xE6, 0xB7, 0xE6, 0x76, 0xE6, 0x75, 0xDE, 0x75, 0xDE, 0x55, 0xDE, 0x55, 0xD6, 0x15, 0x9C, 0xB0, 0xAD, 0x33, 0xC5, 0xF6, 0xC5, 0xF6, 0xCE, 0x37, 0xBD, 0xD3, 0x8C, 0xEF, 0x8D, 0x2F, 0x7C, 0xCC, 0x6C, 0x4A, 0x74, 0x6B, 0x7C, 0xED, 0x95, 0x6F, 0x64, 0x29, 0x64, 0x49, 0x5B, 0xC8, 0x32, 0x04, 0x52, 0xE7, 0x84, 0x4B, 0x9D, 0x50, 0x53, 0x07, 0x3A, 0x85, 0x42, 0xC5, 0x53, 0x07, 0x4A, 0xC8, 0x63, 0x6A, 0x7C, 0x8E, 0x74, 0x0C, 0xB5, 0xF4, 0xD7, 0x18, 0x9D, 0x71, 0x4B, 0x27, 0x43, 0x05, 0x3A, 0xE4, 0x42, 0xE5, 0x4B, 0x46, 0x6C, 0x2A, 0x9D, 0xD1, 0xB6, 0x75, 0xB6, 0x95, 0xA5, 0x92, 0x63, 0x0A, 0x62, 0xCA, 0x83, 0xCE, 0x8C, 0x0F, 0x8C, 0x0F, 0x5A, 0xCA, 0x6B, 0x0B, 0x6B, 0x4B, 0x7B, 0x8C, 0x83, 0xCD, 0x83, 0xED, 0x8C, 0x0D, 0x8C, 0x0D, 0x8B, 0xED, 0x8B, 0xEC, 0x8C, 0x0D, 0x94, 0x2D, 0x94, 0x4E, 0x94, 0x4D, 0x94, 0x2C, 0x94, 0x2C, 0x94, 0x0C, 0x94, 0x2C, 0x94, 0x2D, 0x9C, 0x4E, 0x8C, 0x0C, 0x94, 0x2D, 0x94, 0x0C, 0x94, 0x0C, 0x94, 0x2D, 0x94, 0x4D, 0x9C, 0x6E, 0x94, 0x2D, 0x94, 0x4E, 0xAD, 0x31, 0xB5, 0x73, 0xB5, 0x52, 0xAD, 0x11, 0xA5, 0x11, 0xAC, 0xF0, 0xB5, 0x51, 0x9C, 0x6E, 0x94, 0x0C, 0xA4, 0x8E, 0xAC, 0xCF, 0xB5, 0x72, 0xC5, 0xD3, 0xBD, 0xD3, 0xBD, 0xB3, 0xCE, 0x35, 0xC5, 0xD4, 0xBD, 0x93, 0xBD, 0x93, 0xAD, 0x31, 0xB5, 0x72, 0xB5, 0x72, 0xBD, 0x92, 0xBD, 0x92, 0xB5, 0x92, 0xAD, 0x11, 0xA4, 0xF0, 0xA4, 0xD0, 0xB5, 0x72, 0xC5, 0xD3, 0xC5, 0xD3, 0xC5, 0xB2, 0xBD, 0x30, 0xBD, 0x30, 0xEE, 0xD7, 0xE6, 0x95, 0xE6, 0x75, 0xE6, 0x55, 0xE6, 0x14, 0xE5, 0xF3, 0xEE, 0x55, 0xEE, 0x95, 0xEE, 0xB6, 0xE6, 0x96, 0xAC, 0xD0, 0x4A, 0x27, 0x31, 0xA6, 0x39, 0xE7, 0x39, 0xE7, 0x4A, 0x69, 0x6B, 0x4D, 0x84, 0x51, 0x8C, 0x93, 0xB5, 0x97, 0xC6, 0x19, 0xDE, 0xFC, 0xEF, 0x3D, 0xB5, 0x96, 0xD6, 0x79, 0xC5, 0xD6, 0xCD, 0xF4, 0xD6, 0x14, 0xC5, 0x93, 0xD6, 0x15, 0xD6, 0x35, 0xDE, 0x35, 0xDE, 0x34, 0xDE, 0x34, 0xDE, 0x34, 0xD5, 0xF3, 0xD5, 0xB2, 0xD5, 0xF3, 0xD5, 0xF3, 0xB5, 0x31, 0x73, 0x6C, 0xAD, 0x55, 0xDE, 0xDB, 0xE6, 0xFC, 0xEF, 0x5D, 0xD6, 0x79, 0xB5, 0x33, 0xB5, 0x93, 0xB5, 0x73, 0xAD, 0x32, 0xAD, 0x12, 0x9C, 0xB1, 0x9C, 0x90, 0x9C, 0xB0, 0x94, 0x8F, 0x8C, 0x2E, 0x8C, 0x2F, 0x4A, 0x27, 0x4A, 0x48, 0x8C, 0x2F, 0x8C, 0x4F, 0x9C, 0xD1, 0xAD, 0x12, 0xAD, 0x32, 0x9C, 0xAF, 0xA4, 0xD0, 0x73, 0x6B, 0x63, 0x0A, 0x52, 0x68, 0x5A, 0xAA, 0x5A, 0xA9, 0x31, 0xA5, 0x39, 0xA6, 0x42, 0x07, 0x4A, 0x48, 0x6B, 0x4C, 0x73, 0x6D, 0x6B, 0x2C, 0x83, 0xF0, 0x83, 0xF0, 0x7B, 0xF0, 0x7B, 0xCF, 0x8C, 0x51, 0x94, 0xB3, 0xAD, 0x35, 0xE6, 0xDB, 0xDE, 0x9A, 0xEF, 0x1B, 0xEF, 0x5C, 0xC5, 0xD7, 0xDE, 0xBA, 0xAD, 0x34, 0x42, 0x08, 0x31, 0xA6, 0x39, 0xC6, 0x39, 0xE6, 0x39, 0xC6, 0x3A, 0x07, 0x4A, 0x48, 0x42, 0x48, 0x52, 0x8A, 0x5B, 0x0B, 0x6B, 0x6E, 0x7B, 0xD0, 0x9C, 0xB3, 0xAD, 0x76, 0xBD, 0xD7, 0xAD, 0x55, 0xC5, 0xD6, 0xCE, 0x17, 0xC5, 0x94, 0xBD, 0x94, 0xC5, 0xB4, 0xC5, 0x94, 0xBD, 0x93, 0xBD, 0x73, 0xB5, 0x32, 0xAC, 0xF1, 0xAC, 0xF1, 0xAC, 0xD1, 0xA4, 0xD0, 0xA4, 0xD0, 0xA4, 0xD1, 0xA4, 0xD1, 0xAD, 0x11, 0xB5, 0x52, 0xBD, 0x52, 0xB5, 0x52, 0xB5, 0x11, 0xBD, 0x72, 0xA4, 0xF1, 0xAD, 0x12, 0xAC, 0xF2, 0xA4, 0xD1, 0x9C, 0xD1, 0x94, 0x4F, 0x8C, 0x0D, 0x94, 0x4F, 0xA4, 0xD0, 0x94, 0x0E, 0x93, 0xED, 0x94, 0x0D, 0xB5, 0x11, 0xBD, 0x52, 0xBD, 0x52, 0xB5, 0x32, 0xAD, 0x31, 0xB5, 0x52, 0xBD, 0x52, 0xC5, 0x72, 0xD5, 0xD3, 0xD5, 0xD2, 0xCD, 0xB2, 0xCD, 0x92, 0xC5, 0x72, 0x94, 0x4E, 0x6B, 0x2B, 0x62, 0xEA, 0x63, 0x0A, 0x63, 0x0A, 0x73, 0x4B, 0x94, 0x0D, 0xAD, 0x11, 0xA4, 0xD0, 0xBD, 0x72, 0xAD, 0x10, 0xAD, 0x11, 0xAD, 0x31, 0xB5, 0x72, 0xB5, 0x52, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0x52, 0xB5, 0x52, 0xB5, 0x52, 0xBD, 0x92, 0xB5, 0x51, 0x9C, 0x8E, 0xB5, 0x31, 0xC5, 0xB3, 0xBD, 0x92, 0xBD, 0x71, 0xBD, 0x51, 0xCD, 0xB3, 0xB5, 0x31, 0xB5, 0x52, 0x9C, 0x90, 0xD6, 0x56, 0xDE, 0x76, 0xE6, 0x97, 0xE6, 0xD8, 0xBD, 0xB4, 0x94, 0x50, 0x9C, 0x91, 0xB5, 0x54, 0xBD, 0x95, 0xC5, 0xD6, 0xC5, 0xF5, 0xD6, 0x16, 0xDE, 0x56, 0xCE, 0x15, 0xBD, 0x94, 0xC5, 0xD5, 0xE6, 0x96, 0xDE, 0x35, 0xE6, 0x96, 0xE6, 0x96, 0xDE, 0x75, 0xDE, 0x34, 0xD6, 0x14, 0xB5, 0x32, 0xB5, 0x74, 0xCE, 0x58, 0xC5, 0xF7, 0x9C, 0xB2, 0xE6, 0xD8, 0xE6, 0xD7, 0xB5, 0xD2, 0x8D, 0x2E, 0x7C, 0xCD, 0x85, 0x0D, 0x8D, 0x2E, 0x8D, 0x4F, 0x95, 0x70, 0x64, 0x09, 0x4B, 0x67, 0x21, 0xA3, 0x19, 0x03, 0x29, 0x64, 0x21, 0x63, 0x63, 0x8A, 0x7C, 0xAC, 0x5B, 0xC9, 0x32, 0x84, 0x42, 0xA6, 0x7C, 0x6C, 0x74, 0x4C, 0x9D, 0xB1, 0xA5, 0xD2, 0x8C, 0xEE, 0x6C, 0x2B, 0x2A, 0x24, 0x53, 0x88, 0x53, 0xA7, 0x4B, 0x66, 0x53, 0x87, 0x63, 0xA8, 0x8C, 0xEE, 0x74, 0x4C, 0x7C, 0x8D, 0x85, 0x2F, 0x84, 0xEE, 0x9C, 0xF0, 0xC5, 0xB5, 0xAC, 0xF2, 0x83, 0x8D, 0x7B, 0x4C, 0x63, 0x0A, 0x7B, 0x8C, 0x83, 0xCD, 0x83, 0xCD, 0x94, 0x6F, 0xB5, 0x52, 0xBD, 0xD3, 0xC5, 0xF4, 0xBD, 0x92, 0xA4, 0x8E, 0x94, 0x0C, 0xA4, 0xCF, 0xB5, 0x31, 0xC5, 0x93, 0xB5, 0x10, 0xAC, 0xCF, 0xB4, 0xEF, 0xAC, 0xAF, 0xB4, 0xEF, 0xAC, 0xCF, 0x9C, 0x6E, 0x9C, 0x4D, 0xA4, 0xAE, 0xB5, 0x0F, 0xAC, 0xEF, 0xB5, 0x10, 0xAC, 0xEF, 0xAC, 0xCF, 0xAC, 0xCF, 0xA4, 0x8E, 0x9C, 0x6D, 0x9C, 0x4D, 0x94, 0x2D, 0x94, 0x2C, 0x8B, 0xEC, 0x8B, 0xCB, 0x94, 0x0C, 0x94, 0x2D, 0x9C, 0x2D, 0x8B, 0xEB, 0x8B, 0xCB, 0x83, 0xAB, 0x83, 0xAB, 0x83, 0xAB, 0x83, 0xCC, 0x83, 0xCB, 0x83, 0xCC, 0x94, 0x0D, 0x9C, 0x8E, 0x94, 0x2D, 0x8C, 0x0C, 0x9C, 0x6E, 0x94, 0x2D, 0x83, 0xCB, 0x7B, 0x8B, 0x83, 0xED, 0x94, 0x6E, 0xBD, 0x93, 0xCE, 0x14, 0xD6, 0x35, 0xD6, 0x55, 0xBD, 0x51, 0xC5, 0x70, 0xF6, 0xF7, 0xEE, 0xB6, 0xE6, 0x75, 0xDD, 0xF4, 0xDD, 0x93, 0xDD, 0xB3, 0xEE, 0x55, 0xE6, 0x75, 0xE6, 0x75, 0xE6, 0x75, 0xEE, 0x96, 0xD5, 0xF4, 0x73, 0x2A, 0x41, 0xE6, 0x39, 0xC6, 0x39, 0xE7, 0x4A, 0x28, 0x5A, 0xCB, 0x73, 0xAF, 0x9C, 0xF4, 0xAD, 0x97, 0xC6, 0x5A, 0xD6, 0x7B, 0xB5, 0x97, 0xC6, 0x39, 0xE7, 0x3C, 0xEF, 0x3B, 0xDE, 0xB8, 0xCD, 0xD4, 0xCD, 0xD3, 0xCD, 0xD3, 0xD5, 0xF4, 0xDE, 0x55, 0xE6, 0x75, 0xE6, 0x54, 0xE6, 0x34, 0xE6, 0x14, 0xE6, 0x34, 0xE6, 0x34, 0xE6, 0x35, 0x8B, 0xED, 0x9C, 0xF3, 0xC6, 0x18, 0xD6, 0x9A, 0xE6, 0xFC, 0xEF, 0x5D, 0xBD, 0xD6, 0xB5, 0x73, 0xB5, 0x52, 0xAD, 0x12, 0xA4, 0xF1, 0xA4, 0xF1, 0xA4, 0xF1, 0xAD, 0x12, 0xAD, 0x32, 0xAD, 0x53, 0x84, 0x0F, 0x31, 0x85, 0x9C, 0xD1, 0xB5, 0x53, 0xAD, 0x32, 0xA4, 0xF2, 0x9C, 0xD1, 0xB5, 0x73, 0xBD, 0x72, 0xB5, 0x10, 0x83, 0xAC, 0x73, 0x8C, 0x84, 0x0E, 0x52, 0x68, 0x5A, 0xA9, 0x42, 0x27, 0x39, 0xC6, 0x39, 0xA6, 0x42, 0x07, 0x4A, 0x48, 0x6B, 0x2C, 0x6B, 0x4D, 0x5A, 0xCB, 0x5A, 0xEB, 0x73, 0x6E, 0x7B, 0xAF, 0x6B, 0x4E, 0x9C, 0x92, 0xAD, 0x34, 0x9C, 0xB3, 0x9C, 0xB2, 0x9C, 0xB2, 0xBD, 0x75, 0x8C, 0x10, 0xAD, 0x34, 0xD6, 0xBA, 0x5A, 0xCB, 0x42, 0x07, 0x31, 0xC6, 0x39, 0xC6, 0x39, 0xE7, 0x42, 0x28, 0x42, 0x27, 0x4A, 0x48, 0x5A, 0xEB, 0x63, 0x4D, 0x7B, 0xCF, 0x8C, 0x51, 0x94, 0x72, 0x9C, 0xD3, 0xA5, 0x35, 0xBD, 0xF8, 0xCE, 0x39, 0xC5, 0xF7, 0xAD, 0x12, 0xB5, 0x12, 0xAC, 0xF1, 0xB5, 0x32, 0xB5, 0x53, 0xB5, 0x53, 0xB5, 0x53, 0xBD, 0x73, 0xC5, 0xD4, 0xCD, 0xF5, 0xC5, 0xD4, 0xC5, 0xB4, 0xC5, 0xD4, 0xC5, 0xB4, 0xBD, 0x73, 0xB5, 0x52, 0xB5, 0x11, 0xC5, 0x93, 0xBD, 0x53, 0xB5, 0x52, 0xBD, 0x93, 0xBD, 0x93, 0xC5, 0xD4, 0xC5, 0xD4, 0xC5, 0xD5, 0xC5, 0xB4, 0xB5, 0x53, 0xB5, 0x53, 0xAC, 0xF1, 0x9C, 0x6F, 0x9C, 0x70, 0x9C, 0x6F, 0xA4, 0xB0, 0xA4, 0xAF, 0xB5, 0x11, 0xB5, 0x11, 0xAC, 0xCF, 0xB5, 0x10, 0xAC, 0xCF, 0xAC, 0xCF, 0xBD, 0x31, 0xBD, 0x30, 0xBD, 0x10, 0xBD, 0x30, 0xB5, 0x10, 0x8B, 0xED, 0x73, 0x4B, 0x73, 0x6C, 0x73, 0x4B, 0x73, 0x2B, 0x7B, 0x6B, 0x94, 0x2D, 0xAD, 0x11, 0x9C, 0x8F, 0xC5, 0xD4, 0xC5, 0xD4, 0xBD, 0x93, 0xBD, 0x73, 0xBD, 0x93, 0xBD, 0x93, 0xBD, 0x92, 0xBD, 0x93, 0xB5, 0x52, 0xB5, 0x72, 0xBD, 0x93, 0xBD, 0x93, 0xBD, 0x92, 0x94, 0x6D, 0xBD, 0x92, 0xD6, 0x14, 0xCD, 0xF4, 0xCD, 0xD3, 0xCD, 0xD4, 0xDE, 0x55, 0xB5, 0x51, 0xA4, 0xD0, 0x9C, 0x90, 0xD6, 0x36, 0xEE, 0xD7, 0xE6, 0xB7, 0xEE, 0xF8, 0x8C, 0x2F, 0x5A, 0xCB, 0x6B, 0x4C, 0x94, 0xB2, 0x9C, 0xB2, 0xC5, 0xD6, 0xE6, 0xB9, 0xDE, 0x99, 0xE6, 0xB9, 0xC5, 0xF6, 0x8C, 0x10, 0x9C, 0xD2, 0xBD, 0x73, 0xB5, 0x31, 0xAC, 0xF1, 0xB5, 0x11, 0xD6, 0x15, 0xDE, 0x55, 0xCD, 0xB3, 0xCE, 0x16, 0xC5, 0xF7, 0x9C, 0xF3, 0xAD, 0x13, 0xE6, 0xD9, 0xE6, 0xB7, 0xE6, 0xB6, 0xE7, 0x17, 0xCE, 0x95, 0x8D, 0x0E, 0x85, 0x0E, 0x85, 0x2E, 0x8D, 0x6F, 0x85, 0x0E, 0x74, 0x8B, 0x32, 0x65, 0x29, 0x84, 0x21, 0x44, 0x29, 0x85, 0x29, 0xA5, 0x29, 0xA4, 0x5B, 0xA9, 0x6C, 0x8B, 0x5B, 0xE9, 0x32, 0x84, 0x63, 0xCA, 0x42, 0xC6, 0x32, 0x65, 0x5B, 0xAA, 0x74, 0x6C, 0x6C, 0x4B, 0x43, 0x07, 0x5B, 0xE9, 0x5C, 0x09, 0x5B, 0xE8, 0x63, 0xE9, 0x5B, 0x89, 0x5B, 0x29, 0x5B, 0x29, 0x52, 0xC8, 0x7C, 0x4E, 0xA5, 0x91, 0xAD, 0x92, 0xA5, 0x11, 0x8C, 0x0E, 0x7B, 0x4C, 0x73, 0x0A, 0x6B, 0x0B, 0x6B, 0x2B, 0x6B, 0x6B, 0x83, 0xED, 0x8C, 0x2E, 0x94, 0x8E, 0xA5, 0x10, 0xB5, 0x51, 0xB5, 0x51, 0xB5, 0x31, 0xC5, 0xB3, 0xDE, 0x96, 0xC5, 0xF4, 0xBD, 0xB3, 0xC5, 0xB3, 0xBD, 0x91, 0xDE, 0x75, 0xD6, 0x34, 0xD6, 0x14, 0xCD, 0xF3, 0xD6, 0x14, 0xAC, 0xAF, 0xBD, 0x71, 0xEE, 0xB6, 0xD5, 0xF3, 0xCD, 0xD2, 0xC5, 0x91, 0xCD, 0xD2, 0xDE, 0x54, 0xDE, 0x34, 0xD5, 0xF3, 0xD6, 0x34, 0xCD, 0xB2, 0xB5, 0x10, 0xC5, 0x71, 0xC5, 0x71, 0xB5, 0x10, 0xD5, 0xF3, 0xCD, 0xD2, 0xC5, 0x92, 0xBD, 0x30, 0xBD, 0x51, 0xC5, 0x71, 0xBD, 0x30, 0xB5, 0x10, 0xB5, 0x10, 0xAC, 0xCF, 0xAC, 0xAF, 0xAC, 0xAE, 0xAC, 0xAE, 0xAC, 0xCF, 0xAC, 0xAE, 0xA4, 0x8E, 0xA4, 0x8E, 0xA4, 0x6E, 0x9C, 0x6E, 0x94, 0x4D, 0x94, 0x0C, 0x94, 0x2D, 0x9C, 0x6E, 0xA4, 0xAE, 0xA4, 0x6D, 0xA4, 0x4C, 0xBD, 0x30, 0xBD, 0x51, 0xBD, 0x31, 0xB4, 0xAF, 0xA4, 0x2D, 0xAC, 0x8E, 0xBD, 0x10, 0xBD, 0x10, 0xBD, 0x10, 0xD5, 0xF4, 0xDE, 0x14, 0xDE, 0x34, 0xB5, 0x10, 0x83, 0xAB, 0x4A, 0x06, 0x42, 0x07, 0x42, 0x07, 0x42, 0x28, 0x5A, 0xCB, 0x73, 0xAE, 0x94, 0xB3, 0xAD, 0x96, 0x9C, 0xF4, 0xB5, 0xB7, 0xE7, 0x1C, 0xD6, 0x9A, 0xBD, 0xF7, 0xC6, 0x38, 0xCE, 0x17, 0xCD, 0xF5, 0xDE, 0x35, 0xE6, 0x96, 0xEE, 0x96, 0xEE, 0x75, 0xEE, 0x75, 0xE6, 0x54, 0xE6, 0x34, 0xDE, 0x13, 0xDD, 0xF3, 0xE6, 0x55, 0xB4, 0xF0, 0x7B, 0xAD, 0xA5, 0x14, 0xCE, 0x5A, 0xD6, 0x9A, 0xDE, 0xBB, 0xCE, 0x58, 0x9C, 0xD1, 0xAD, 0x12, 0xA4, 0xF1, 0xA4, 0xD1, 0xA4, 0xF1, 0x9C, 0xD1, 0x9C, 0xD1, 0xA4, 0xD1, 0xA4, 0xF1, 0x52, 0x68, 0x6B, 0x2C, 0xB5, 0x74, 0xAD, 0x32, 0xA5, 0x12, 0xA4, 0xF1, 0x9C, 0xB0, 0xAD, 0x52, 0xBD, 0x72, 0xB5, 0x10, 0x8C, 0x0D, 0x83, 0xCC, 0xAD, 0x31, 0x9C, 0x8F, 0x73, 0x6B, 0x4A, 0x27, 0x31, 0x85, 0x39, 0xE6, 0x42, 0x07, 0x52, 0x69, 0x4A, 0x48, 0x5A, 0xAA, 0x5A, 0xAA, 0x5A, 0xAB, 0x5A, 0xCB, 0x7B, 0xCF, 0x84, 0x10, 0xBD, 0x96, 0xC5, 0xD7, 0xB5, 0x34, 0xAD, 0x14, 0x94, 0x71, 0xAD, 0x13, 0x94, 0x51, 0x52, 0x8A, 0xAD, 0x35, 0xAD, 0x55, 0x42, 0x07, 0x31, 0xA6, 0x31, 0xC6, 0x39, 0xE7, 0x42, 0x27, 0x4A, 0x48, 0x52, 0x89, 0x63, 0x0C, 0x73, 0x8E, 0x73, 0x8E, 0x7B, 0xEF, 0x73, 0x8E, 0x7B, 0xF0, 0x94, 0x92, 0xB5, 0x76, 0xAD, 0x55, 0xAD, 0x55, 0x94, 0x2F, 0xAC, 0xF1, 0x83, 0xEE, 0x83, 0xEE, 0x6B, 0x4C, 0x63, 0x0A, 0x63, 0x0A, 0x6B, 0x4B, 0x6B, 0x2B, 0x6B, 0x2B, 0x6B, 0x2B, 0x73, 0x6C, 0x7B, 0xAD, 0x8C, 0x0E, 0x94, 0x4F, 0x9C, 0x6F, 0xA4, 0xD0, 0xC5, 0xD4, 0xDE, 0x97, 0xD6, 0x56, 0xAC, 0xF1, 0xA4, 0xD0, 0xA4, 0xAF, 0x9C, 0x8F, 0xAC, 0xF0, 0xB5, 0x32, 0xB5, 0x52, 0xAD, 0x11, 0xA4, 0xB0, 0xB4, 0xF0, 0xB5, 0x10, 0xAC, 0xF0, 0xAC, 0xF1, 0xAC, 0xD0, 0xB5, 0x11, 0xB5, 0x32, 0xB5, 0x11, 0xAC, 0xF0, 0xA4, 0xAF, 0xAC, 0xCF, 0xA4, 0xAF, 0xAC, 0xD0, 0xAC, 0xD0, 0xAC, 0xF0, 0xAC, 0xF1, 0xB4, 0xF1, 0xAC, 0xF1, 0xA4, 0xB0, 0x9C, 0x6F, 0x8B, 0xEE, 0x8C, 0x0D, 0xA4, 0xB0, 0xAD, 0x12, 0xA4, 0xB0, 0x94, 0x4E, 0x8B, 0xED, 0x8B, 0xED, 0x8C, 0x0D, 0x8B, 0xED, 0x8C, 0x0D, 0x8C, 0x0D, 0x94, 0x2E, 0x94, 0x2E, 0x8C, 0x0D, 0x83, 0xED, 0x83, 0xEC, 0x94, 0x2D, 0x9C, 0xAF, 0xA4, 0xD0, 0xB5, 0x11, 0xBD, 0x72, 0xB5, 0x11, 0xA4, 0xAF, 0xBD, 0x92, 0xC5, 0xD3, 0x9C, 0x8F, 0x9C, 0x90, 0xC5, 0xD4, 0xF7, 0x18, 0xE6, 0xB7, 0xE6, 0x96, 0x9C, 0x70, 0x62, 0xCA, 0x5A, 0x89, 0x6B, 0x4C, 0x7B, 0xAE, 0xBD, 0x75, 0xCE, 0x17, 0xAD, 0x14, 0x8C, 0x51, 0x83, 0xEF, 0xBD, 0x96, 0xDE, 0xBA, 0xE6, 0xBA, 0xCD, 0xD6, 0xB5, 0x54, 0xA4, 0xB1, 0x8C, 0x0F, 0xAD, 0x13, 0xCE, 0x17, 0xA5, 0x14, 0x73, 0xAF, 0xD6, 0x78, 0xEF, 0x19, 0xEE, 0xD7, 0xE6, 0xB6, 0xE6, 0xB6, 0xE6, 0xD6, 0xE6, 0xF7, 0xCE, 0x95, 0x95, 0x2F, 0x85, 0x0E, 0x8D, 0x6F, 0x74, 0xCC, 0x74, 0x8B, 0x32, 0x04, 0x3A, 0x27, 0x3A, 0x07, 0x31, 0xC6, 0x31, 0xA5, 0x31, 0xE6, 0x32, 0x24, 0x5B, 0xE8, 0x64, 0x2A, 0x4B, 0x47, 0x32, 0x24, 0x42, 0x85, 0x29, 0xE3, 0x19, 0xA2, 0x3A, 0x85, 0x74, 0xAC, 0x53, 0x88, 0x53, 0xA8, 0x5B, 0xC8, 0x43, 0x05, 0x3A, 0xA4, 0x3A, 0x85, 0x5B, 0x28, 0x7C, 0x4D, 0x7C, 0x4D, 0xA5, 0x72, 0x9C, 0xF0, 0x94, 0x6F, 0x8C, 0x0E, 0x6B, 0x0A, 0x5A, 0x48, 0x6A, 0xA9, 0x62, 0xEA, 0x73, 0x8C, 0x7B, 0xAC, 0x94, 0x8F, 0x9C, 0xD0, 0x9C, 0xCF, 0x9C, 0xCF, 0xAD, 0x10, 0xA4, 0xF0, 0xA4, 0xF0, 0x94, 0x6E, 0xC5, 0xD4, 0xAD, 0x32, 0xB5, 0x52, 0xAD, 0x10, 0xAD, 0x10, 0xD6, 0x14, 0xCD, 0xF3, 0xCD, 0xF3, 0xBD, 0x91, 0xDE, 0x96, 0xAC, 0xAE, 0xC5, 0x71, 0xE6, 0x95, 0xE6, 0x74, 0xE6, 0x74, 0xE6, 0x95, 0xE6, 0x95, 0xE6, 0x95, 0xE6, 0x75, 0xDE, 0x34, 0xE6, 0x95, 0xDE, 0x75, 0xD6, 0x13, 0xE6, 0x54, 0xE6, 0x74, 0xD6, 0x13, 0xEE, 0xB5, 0xE6, 0x74, 0xE6, 0x95, 0xE6, 0x54, 0xD5, 0xF2, 0xE6, 0x95, 0xC5, 0x70, 0xCD, 0xB1, 0xB5, 0x0F, 0xB4, 0xEF, 0xDE, 0x34, 0xCD, 0x92, 0xBD, 0x30, 0xB5, 0x30, 0xB5, 0x0F, 0xBD, 0x50, 0xBD, 0x30, 0xB5, 0x0F, 0xBD, 0x30, 0xBD, 0x10, 0xBD, 0x30, 0xBD, 0x30, 0xB5, 0x10, 0xB4, 0xEF, 0xBD, 0x30, 0xBD, 0x30, 0xB4, 0xCF, 0xAC, 0xAE, 0xAC, 0x8E, 0x9C, 0x4D, 0x9C, 0x4D, 0x9C, 0x4D, 0x9C, 0x4D, 0x9C, 0x4D, 0x9C, 0x2D, 0x93, 0xEB, 0x8B, 0xCB, 0x8B, 0xCB, 0x8B, 0xAA, 0x8B, 0xAA, 0x7B, 0x4A, 0x52, 0x47, 0x39, 0xC6, 0x39, 0xE7, 0x42, 0x28, 0x52, 0xAA, 0x6B, 0x8E, 0x84, 0x31, 0x94, 0xB3, 0xBD, 0xD7, 0xC6, 0x18, 0x84, 0x10, 0x8C, 0x51, 0x8C, 0x51, 0x73, 0x8E, 0xAC, 0xF2, 0xC5, 0x93, 0xCD, 0xB3, 0xDE, 0x34, 0xE6, 0x34, 0xE6, 0x54, 0xEE, 0x95, 0xEE, 0xB5, 0xEE, 0x95, 0xEE, 0x75, 0xE6, 0x34, 0xB4, 0xCF, 0xA4, 0xB0, 0x84, 0x10, 0xBD, 0xF7, 0xC6, 0x38, 0x94, 0x92, 0xB5, 0x96, 0xC5, 0xF8, 0xB5, 0x55, 0xAD, 0x33, 0xB5, 0x73, 0xAD, 0x32, 0xA4, 0xD1, 0xA4, 0xD1, 0x9C, 0xB0, 0x7B, 0xCD, 0x29, 0x44, 0x9C, 0xB1, 0xAD, 0x12, 0xAD, 0x12, 0xAD, 0x32, 0x9C, 0xD1, 0x9C, 0xD0, 0x9C, 0xB0, 0xAC, 0xF0, 0xAC, 0xCF, 0xAC, 0xF0, 0xAC, 0xF0, 0xB5, 0x52, 0xBD, 0x72, 0xB5, 0x31, 0x83, 0xCD, 0x4A, 0x27, 0x42, 0x07, 0x4A, 0x28, 0x52, 0x69, 0x5A, 0xAA, 0x73, 0x8D, 0x5A, 0xCA, 0x5A, 0xCA, 0x52, 0x89, 0x6B, 0x4D, 0xA4, 0xD3, 0xAD, 0x14, 0xB5, 0x34, 0xD6, 0x18, 0xD6, 0x18, 0xC5, 0x96, 0x94, 0x71, 0x9C, 0xB3, 0x73, 0x8E, 0xB5, 0xB6, 0xBD, 0xD6, 0x52, 0xAA, 0x39, 0xC6, 0x31, 0xA6, 0x39, 0xC6, 0x42, 0x07, 0x42, 0x28, 0x5A, 0xCA, 0x73, 0xAE, 0x6B, 0x2C, 0x52, 0xAA, 0x52, 0xAA, 0x63, 0x0C, 0x6B, 0x6D, 0x8C, 0x51, 0x84, 0x31, 0xA5, 0x14, 0xB5, 0x96, 0xA4, 0xF3, 0xAD, 0x33, 0x9C, 0x90, 0xBD, 0x94, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0x73, 0xAD, 0x32, 0x9C, 0xB1, 0x8C, 0x4F, 0x8C, 0x2E, 0x8C, 0x2E, 0x8C, 0x2F, 0x9C, 0x90, 0x8C, 0x2F, 0xA4, 0xF1, 0xBD, 0x94, 0xBD, 0xD4, 0xD6, 0x77, 0xA4, 0xF1, 0x9C, 0xAF, 0xA4, 0xD0, 0xA4, 0xD0, 0x8C, 0x0D, 0x8C, 0x0D, 0x94, 0x6E, 0xB5, 0x31, 0x94, 0x2D, 0xBD, 0x30, 0xCD, 0xD2, 0xCD, 0xB2, 0xAC, 0xB0, 0xB5, 0x32, 0x9C, 0x8F, 0x94, 0x0D, 0xA4, 0xCF, 0xAD, 0x11, 0xAC, 0xF0, 0xAC, 0xF1, 0x9C, 0x4E, 0x9C, 0x6F, 0xB5, 0x32, 0xC5, 0xD4, 0xBD, 0x72, 0xC5, 0xB4, 0xC5, 0xD4, 0xCD, 0xF5, 0xCE, 0x15, 0xCD, 0xD4, 0xBD, 0x93, 0x9C, 0x8F, 0xAD, 0x11, 0xBD, 0x52, 0xBD, 0x52, 0xB5, 0x32, 0xB5, 0x32, 0xB5, 0x53, 0xAD, 0x32, 0xAD, 0x11, 0xA4, 0xF1, 0xA4, 0xF1, 0xAD, 0x12, 0xAD, 0x12, 0xA4, 0xD1, 0xA4, 0xB0, 0xA4, 0x90, 0x9C, 0x8F, 0x9C, 0x6F, 0x94, 0x4F, 0x8C, 0x0E, 0x94, 0x0E, 0x94, 0x0E, 0x94, 0x2E, 0x94, 0x0D, 0x83, 0xCD, 0x8C, 0x0E, 0x94, 0x2F, 0xAD, 0x11, 0xB5, 0x12, 0xB5, 0x31, 0xB5, 0x32, 0xAC, 0xF2, 0x8C, 0x2F, 0x5A, 0xCA, 0x5A, 0xAA, 0x9C, 0x92, 0x94, 0x51, 0x9C, 0xB2, 0x7B, 0xCE, 0x5A, 0xCB, 0xC5, 0xF7, 0xCE, 0x38, 0xD6, 0x59, 0xD6, 0x79, 0xEF, 0x3C, 0xDE, 0xBA, 0xD6, 0xBA, 0xE6, 0xFC, 0xC6, 0x18, 0x9C, 0xD3, 0xAD, 0x54, 0xDE, 0x97, 0xEE, 0xD7, 0xEE, 0xF7, 0xEE, 0xF7, 0xEE, 0xF7, 0xEE, 0xF7, 0xEE, 0xF7, 0xF7, 0x17, 0xCE, 0x75, 0x84, 0xEE, 0x95, 0x6F, 0x7C, 0xCD, 0x5B, 0xA9, 0x31, 0xC5, 0x42, 0x07, 0x42, 0x28, 0x52, 0x89, 0x52, 0xAA, 0x42, 0x47, 0x29, 0xE5, 0x4B, 0x47, 0x6C, 0x8B, 0x63, 0xEA, 0x52, 0xC6, 0x7C, 0x09, 0x53, 0x46, 0x2A, 0x44, 0x19, 0xA2, 0x4B, 0x27, 0x64, 0x09, 0x32, 0xA3, 0x32, 0xC4, 0x3A, 0xC3, 0x3A, 0xC4, 0x4B, 0x46, 0x74, 0x8B, 0x8D, 0x2D, 0x84, 0xCC, 0x6C, 0x09, 0x6B, 0xA9, 0x6B, 0x49, 0x62, 0xA9, 0x49, 0xC6, 0x52, 0x27, 0x7B, 0x4B, 0x6B, 0x4B, 0x7B, 0xAC, 0x83, 0xED, 0x9C, 0xD0, 0xAD, 0x32, 0xAD, 0x31, 0xA5, 0x10, 0xAD, 0x31, 0x9C, 0xAF, 0x94, 0x6E, 0x84, 0x0D, 0xAD, 0x32, 0xB5, 0x53, 0xA5, 0x11, 0xA5, 0x10, 0xB5, 0x71, 0xCD, 0xF3, 0xCD, 0xF3, 0xC5, 0x92, 0xAC, 0xEF, 0xCE, 0x14, 0xA4, 0x8E, 0xBD, 0x50, 0xE6, 0x75, 0xE6, 0x74, 0xEE, 0xB5, 0xE6, 0x74, 0xE6, 0x74, 0xE6, 0x74, 0xE6, 0xB6, 0xE6, 0x95, 0xE6, 0x95, 0xE6, 0x95, 0xDE, 0x54, 0xE6, 0x74, 0xDE, 0x54, 0xDE, 0x13, 0xDE, 0x33, 0xD5, 0xF2, 0xDE, 0x33, 0xDE, 0x13, 0xD5, 0xD2, 0xE6, 0x74, 0xE6, 0x53, 0xE6, 0x95, 0xAC, 0xCE, 0xCD, 0x92, 0xCD, 0x72, 0xB4, 0xEF, 0xAC, 0xCF, 0xB5, 0x30, 0xC5, 0x72, 0xD5, 0xD3, 0xC5, 0x71, 0xB4, 0xEF, 0xC5, 0x71, 0xC5, 0x71, 0xC5, 0x71, 0xC5, 0x71, 0xC5, 0x71, 0xC5, 0x91, 0xCD, 0x92, 0xCD, 0x91, 0xC5, 0x51, 0xCD, 0xB2, 0xD6, 0x14, 0xBD, 0x51, 0xBD, 0x31, 0xDE, 0x14, 0xAC, 0xAE, 0xCD, 0xB2, 0xEE, 0x95, 0xDE, 0x34, 0xDE, 0x34, 0xCD, 0xD3, 0xBD, 0x51, 0xCD, 0xB3, 0xD5, 0xF4, 0xCD, 0xD4, 0x94, 0x2D, 0x41, 0xE6, 0x42, 0x28, 0x52, 0x89, 0x63, 0x0C, 0x63, 0x2C, 0x73, 0xAF, 0x94, 0xB3, 0x73, 0x6E, 0x7B, 0xCF, 0x6B, 0x4D, 0x7B, 0xAE, 0x73, 0xAE, 0x9C, 0xB2, 0xEF, 0x1B, 0xBD, 0x54, 0x94, 0x0D, 0x9C, 0x0C, 0xA4, 0x4D, 0xA4, 0x4D, 0xA4, 0x6D, 0xAC, 0x8E, 0xAC, 0xAE, 0xB4, 0xCF, 0xB4, 0xEF, 0xB5, 0x31, 0x8C, 0x0E, 0x8C, 0x51, 0xA5, 0x14, 0xBD, 0xD7, 0xDE, 0xFC, 0xE7, 0x1C, 0xC6, 0x18, 0xBD, 0xB5, 0xBD, 0x74, 0xBD, 0x72, 0xB5, 0x72, 0xC5, 0xD4, 0xB5, 0x53, 0x6B, 0x4B, 0x4A, 0x48, 0xBD, 0xD4, 0xD6, 0x56, 0xCD, 0xF4, 0xB5, 0x32, 0x94, 0x4E, 0x8C, 0x2E, 0x8C, 0x2E, 0xB5, 0x31, 0xAC, 0xEF, 0xC5, 0xB3, 0xB5, 0x51, 0xB5, 0x51, 0xBD, 0x72, 0xC5, 0xD4, 0xBD, 0x93, 0xAD, 0x32, 0x63, 0x0A, 0x52, 0x88, 0x4A, 0x68, 0x52, 0x69, 0x63, 0x0B, 0x6B, 0x2B, 0x63, 0x0B, 0x42, 0x07, 0x52, 0x68, 0x83, 0xAE, 0xAD, 0x14, 0x9C, 0x72, 0xDE, 0x59, 0xEE, 0xDB, 0xA4, 0x92, 0x8B, 0xEF, 0x9C, 0xB2, 0xAD, 0x55, 0xAD, 0x54, 0xC5, 0xF7, 0xC5, 0xF7, 0x5A, 0xCB, 0x39, 0xE7, 0x39, 0xE7, 0x41, 0xE7, 0x4A, 0x48, 0x63, 0x2C, 0x5A, 0xCA, 0x4A, 0x69, 0x52, 0x89, 0x52, 0xCA, 0x63, 0x2C, 0x73, 0x6E, 0x73, 0xAF, 0x8C, 0x72, 0xAD, 0x55, 0xBD, 0xD7, 0xCE, 0x38, 0x94, 0x70, 0x9C, 0xB1, 0xCE, 0x36, 0xCE, 0x15, 0xC5, 0xF5, 0xC5, 0xF5, 0xCE, 0x15, 0xCE, 0x15, 0xCD, 0xF5, 0xC5, 0xD4, 0xC5, 0xD4, 0xC5, 0xD4, 0xC5, 0xD4, 0xBD, 0x93, 0xAD, 0x32, 0xC5, 0xD4, 0xC5, 0xF5, 0xC5, 0xD4, 0xCE, 0x15, 0xA4, 0xD0, 0xAD, 0x11, 0xBD, 0xB3, 0xB5, 0x72, 0x9C, 0xAF, 0x9C, 0x8F, 0x94, 0x6E, 0xA4, 0xCF, 0xAC, 0xCF, 0xAC, 0xEF, 0xC5, 0x70, 0xC5, 0x91, 0xAC, 0xF0, 0xB5, 0x52, 0x9C, 0xAF, 0x9C, 0xAF, 0xAD, 0x11, 0xAC, 0xF0, 0xAD, 0x11, 0xAD, 0x11, 0xAC, 0xF1, 0x9C, 0xAF, 0x9C, 0xAF, 0xA4, 0xF0, 0x9C, 0xAF, 0xA4, 0xB0, 0xA4, 0xB0, 0xA4, 0xD0, 0xB5, 0x52, 0xBD, 0x73, 0xB5, 0x31, 0xAD, 0x10, 0xB5, 0x31, 0xAC, 0xF0, 0xC5, 0x92, 0xD6, 0x14, 0x9C, 0x8F, 0xA4, 0xB0, 0xAD, 0x11, 0xB5, 0x52, 0xB5, 0x32, 0xA4, 0xB0, 0xAD, 0x11, 0xBD, 0x93, 0xAD, 0x12, 0xBD, 0x93, 0xC5, 0xB4, 0xB5, 0x52, 0xAC, 0xF1, 0xA4, 0xF1, 0x8C, 0x0E, 0x9C, 0x90, 0xAC, 0xF1, 0xAC, 0xD1, 0xAC, 0xF1, 0xAD, 0x11, 0xAD, 0x32, 0xAD, 0x12, 0xAD, 0x12, 0xAD, 0x12, 0xAD, 0x12, 0xB5, 0x33, 0xB5, 0x33, 0xAD, 0x32, 0xA4, 0xD2, 0x9C, 0xD2, 0xB5, 0x54, 0x41, 0xC7, 0x52, 0x69, 0x52, 0x89, 0x52, 0x69, 0x73, 0x8D, 0x73, 0x8E, 0x84, 0x10, 0xAD, 0x34, 0xA5, 0x14, 0xB5, 0x76, 0xDE, 0xDB, 0xE7, 0x3C, 0xE7, 0x1C, 0xE6, 0xFC, 0xC5, 0xD6, 0xB5, 0x53, 0xCD, 0xF5, 0xBD, 0x93, 0xBD, 0x73, 0xBD, 0x52, 0xBD, 0x52, 0xC5, 0x93, 0xCD, 0xF4, 0xCE, 0x35, 0x9D, 0x0F, 0x8D, 0x50, 0x9D, 0x91, 0x73, 0xEC, 0x39, 0xE6, 0x42, 0x48, 0x52, 0xCA, 0x42, 0x07, 0x52, 0xCA, 0x4A, 0xA9, 0x42, 0x88, 0x53, 0x88, 0x85, 0x0D, 0x4B, 0x27, 0x29, 0x82, 0x4A, 0xC5, 0x6C, 0x49, 0x4B, 0x67, 0x4B, 0x47, 0x32, 0xA4, 0x32, 0xA4, 0x2A, 0x42, 0x2A, 0x62, 0x3A, 0xE4, 0x43, 0x45, 0x6C, 0x6A, 0x74, 0xCB, 0x6C, 0x49, 0x4B, 0x65, 0x3A, 0xE3, 0x4B, 0x05, 0x63, 0x88, 0x6B, 0x09, 0x7B, 0x2B, 0x7B, 0x4C, 0x73, 0x0C, 0x6B, 0x4B, 0x7B, 0xCD, 0x7B, 0xED, 0xA4, 0xF1, 0xAD, 0x52, 0xAD, 0x32, 0xAD, 0x51, 0xB5, 0x72, 0xAD, 0x11, 0xAD, 0x52, 0xAD, 0x73, 0xAD, 0x52, 0xAD, 0x32, 0xBD, 0xD4, 0xAD, 0x31, 0xAD, 0x31, 0xCD, 0xF3, 0xCD, 0xD3, 0xBD, 0x72, 0xAD, 0x11, 0xCE, 0x14, 0xA4, 0x8E, 0xBD, 0x50, 0xE6, 0x74, 0xDE, 0x13, 0xE6, 0x74, 0xDE, 0x54, 0xE6, 0x54, 0xDE, 0x54, 0xE6, 0x75, 0xD6, 0x13, 0xE6, 0x75, 0xE6, 0xB6, 0xE6, 0x75, 0xDE, 0x33, 0xDE, 0x33, 0xDE, 0x33, 0xCD, 0xB1, 0xD5, 0xD1, 0xE6, 0x74, 0xEE, 0x95, 0xE6, 0x74, 0xDE, 0x13, 0xD5, 0xF2, 0xDE, 0x13, 0xB4, 0xCE, 0xBD, 0x30, 0xE6, 0x55, 0xCD, 0xB3, 0xC5, 0x52, 0xC5, 0x71, 0xBD, 0x51, 0xBD, 0x31, 0xB4, 0xEF, 0xBD, 0x10, 0xBD, 0x10, 0xBD, 0x30, 0xC5, 0x71, 0xC5, 0x71, 0xBD, 0x30, 0xBD, 0x10, 0xC5, 0x71, 0xBD, 0x30, 0xAC, 0xCF, 0xB4, 0xEF, 0xC5, 0x71, 0xE6, 0x95, 0xE6, 0x55, 0xE6, 0x75, 0xB4, 0xCF, 0xB4, 0xEF, 0xCD, 0xB2, 0xEE, 0x95, 0xCD, 0xB2, 0xBD, 0x51, 0xCD, 0xB3, 0xD5, 0xF4, 0xD5, 0xF4, 0xD6, 0x14, 0xDE, 0x34, 0xB5, 0x10, 0x5A, 0xA8, 0x4A, 0x48, 0x4A, 0x48, 0x42, 0x28, 0x4A, 0x69, 0x52, 0x8A, 0x42, 0x07, 0x4A, 0x69, 0x39, 0xC7, 0x52, 0x8A, 0x73, 0x8E, 0xAD, 0x55, 0xDE, 0xBA, 0xE6, 0xFB, 0xD6, 0x78, 0xBD, 0x74, 0xA4, 0x8F, 0xA4, 0x6E, 0x93, 0xEC, 0x9C, 0x4D, 0xA4, 0x6E, 0xA4, 0x8E, 0xA4, 0xAF, 0xB4, 0xF0, 0xAC, 0xF1, 0x83, 0xCE, 0x94, 0xB3, 0xCE, 0x59, 0xC6, 0x38, 0xE7, 0x1D, 0xE7, 0x3D, 0xC5, 0xD7, 0x8C, 0x0E, 0x94, 0x2D, 0x9C, 0x4D, 0x9C, 0x6E, 0xA5, 0x11, 0x52, 0x68, 0x73, 0x4B, 0xAC, 0xF0, 0xA4, 0x8E, 0xA4, 0xAF, 0xA4, 0xAF, 0x9C, 0x6F, 0x94, 0x4E, 0x83, 0xCB, 0xA4, 0x8E, 0xA4, 0x6D, 0x94, 0x2D, 0x9C, 0x4E, 0x9C, 0x6E, 0xAC, 0xF0, 0xBD, 0x93, 0xAD, 0x11, 0xA4, 0xCF, 0x8C, 0x2D, 0x8C, 0x2E, 0x52, 0x88, 0x4A, 0x27, 0x52, 0x69, 0x63, 0x0A, 0x73, 0x6C, 0x62, 0xCA, 0x4A, 0x07, 0x5A, 0x69, 0x83, 0x8E, 0x8C, 0x10, 0xA4, 0xF3, 0xA4, 0xD2, 0x83, 0xAF, 0x9C, 0x92, 0xAC, 0xF3, 0x83, 0xCF, 0x9C, 0xD3, 0xF7, 0x7D, 0xEF, 0x1B, 0x9C, 0xB3, 0x41, 0xE7, 0x42, 0x07, 0x39, 0xE7, 0x52, 0x89, 0x42, 0x27, 0x39, 0xA6, 0x39, 0xC6, 0x4A, 0x69, 0x5A, 0xCA, 0x62, 0xEB, 0x6B, 0x4D, 0x6B, 0x6D, 0x8C, 0x72, 0xA5, 0x35, 0xB5, 0x96, 0xCE, 0x79, 0xC5, 0xF6, 0xA4, 0xD1, 0xD6, 0x36, 0xCD, 0xF5, 0xC5, 0xD4, 0xCE, 0x14, 0xCE, 0x35, 0xCE, 0x15, 0xCE, 0x15, 0xCD, 0xF4, 0xC5, 0xD4, 0xC5, 0xD4, 0xBD, 0xB3, 0xBD, 0x73, 0xC5, 0xF5, 0xC5, 0xD4, 0xCD, 0xF4, 0xC5, 0xF4, 0xCE, 0x36, 0xA4, 0xF1, 0xB5, 0x73, 0xC5, 0xD3, 0xB5, 0x72, 0xBD, 0xB3, 0xAD, 0x11, 0xAD, 0x51, 0xAD, 0x31, 0xB5, 0x30, 0xB5, 0x50, 0xBD, 0x50, 0xCD, 0xB2, 0xA4, 0xAF, 0xAD, 0x11, 0x9C, 0xAF, 0x9C, 0xAF, 0xA4, 0xCF, 0xA4, 0xD0, 0xAD, 0x11, 0xB5, 0x72, 0xB5, 0x52, 0xAD, 0x11, 0xAD, 0x11, 0xB5, 0x73, 0xB5, 0x32, 0xB5, 0x32, 0xAD, 0x11, 0xA4, 0xD0, 0x9C, 0x8F, 0x8B, 0xED, 0xA4, 0xAF, 0xB5, 0x52, 0xB5, 0x31, 0xB5, 0x30, 0xCD, 0xB2, 0xCD, 0xD3, 0xB5, 0x12, 0xAD, 0x12, 0xC5, 0xD4, 0xCE, 0x15, 0xBD, 0xB4, 0xAD, 0x52, 0xBD, 0x93, 0xE6, 0xB7, 0xE6, 0xD7, 0xCE, 0x14, 0xE6, 0xB7, 0xE6, 0xB7, 0xD6, 0x56, 0xB5, 0x72, 0x8B, 0xED, 0xA4, 0x90, 0xBD, 0x93, 0xBD, 0x93, 0xC5, 0xF5, 0xBD, 0xB3, 0xBD, 0x93, 0xB5, 0x72, 0xBD, 0x93, 0xB5, 0x52, 0x8C, 0x0E, 0x9C, 0x70, 0xCE, 0x36, 0xC5, 0xF5, 0xC5, 0xD5, 0xB5, 0x94, 0x8C, 0x30, 0x84, 0x10, 0x9C, 0xD2, 0xA4, 0xD2, 0x9C, 0xB1, 0xB5, 0x53, 0x52, 0xA9, 0x4A, 0x28, 0x73, 0x8E, 0x5A, 0xCB, 0x73, 0xAF, 0x8C, 0x72, 0x8C, 0x52, 0x94, 0x93, 0xD6, 0xBB, 0xE6, 0xFB, 0xB5, 0x75, 0xB5, 0x75, 0xA4, 0xD2, 0xB5, 0x53, 0xAC, 0xF2, 0xA4, 0xB1, 0x9C, 0x70, 0x9C, 0x70, 0x9C, 0x90, 0xA5, 0x31, 0x9D, 0x92, 0x8C, 0xD0, 0x7B, 0xEE, 0x63, 0x2C, 0x5B, 0x0B, 0x52, 0xA9, 0x39, 0xE6, 0x31, 0x85, 0x31, 0xA5, 0x31, 0xC5, 0x53, 0x48, 0x85, 0x0D, 0x32, 0x44, 0x3A, 0x65, 0x63, 0xC9, 0x6C, 0x6A, 0x6C, 0x69, 0x64, 0x29, 0x5B, 0xE8, 0x43, 0x05, 0x4B, 0x67, 0x2A, 0x83, 0x43, 0x25, 0x53, 0xE7, 0x5C, 0x08, 0x4B, 0x65, 0x32, 0xC3, 0x32, 0xA2, 0x3A, 0xA3, 0x3A, 0xC4, 0x53, 0x66, 0x8C, 0x8D, 0x94, 0x6F, 0xAD, 0x34, 0xCE, 0x18, 0x83, 0xEE, 0x84, 0x0E, 0x84, 0x0E, 0x9C, 0xB0, 0xAD, 0x52, 0xAD, 0x52, 0xAD, 0x51, 0xAD, 0x52, 0xAD, 0x31, 0xAD, 0x52, 0xB5, 0x93, 0xAD, 0x52, 0xAD, 0x52, 0xC5, 0xF5, 0xA5, 0x11, 0xB5, 0x72, 0xC5, 0xD4, 0xCE, 0x14, 0xC5, 0xD3, 0xB5, 0x51, 0xBD, 0x92, 0xA4, 0x8D, 0xBD, 0x50, 0xE6, 0x95, 0xBD, 0x2F, 0xC5, 0x71, 0xDE, 0x34, 0xDE, 0x33, 0xD6, 0x33, 0xE6, 0x75, 0xE6, 0x95, 0xE6, 0x95, 0xE6, 0x95, 0xDE, 0x54, 0xDE, 0x13, 0xDE, 0x33, 0xDE, 0x53, 0xE6, 0x74, 0xC5, 0x91, 0xE6, 0x54, 0xE6, 0x95, 0xDE, 0x53, 0xD6, 0x12, 0xDE, 0x33, 0xE6, 0x74, 0xB4, 0xEE, 0xD6, 0x14, 0xD5, 0xF4, 0xCD, 0x92, 0xC5, 0x92, 0xC5, 0x51, 0xBD, 0x31, 0xB5, 0x10, 0x9C, 0x4D, 0xBD, 0x51, 0xBD, 0x31, 0xBD, 0x31, 0xBD, 0x10, 0xB5, 0x10, 0xAC, 0xCF, 0xAC, 0xCF, 0xB4, 0xF0, 0xB4, 0xEF, 0xB4, 0xCF, 0xBD, 0x30, 0xCD, 0xD3, 0xDE, 0x55, 0xE6, 0x75, 0xE6, 0x75, 0xAC, 0xCE, 0xBD, 0x30, 0xD5, 0xF3, 0xEE, 0xF7, 0xDE, 0x34, 0xCD, 0xB2, 0xCD, 0xD3, 0xD5, 0xF3, 0xD6, 0x14, 0xDE, 0x34, 0xDE, 0x34, 0xEE, 0xB6, 0xCD, 0xF4, 0x62, 0xE9, 0x31, 0x85, 0x31, 0x86, 0x39, 0xC7, 0x42, 0x07, 0x42, 0x28, 0x52, 0x69, 0x63, 0x2C, 0x73, 0xAE, 0x94, 0x71, 0x9C, 0xB3, 0xCE, 0x39, 0xCE, 0x59, 0xDE, 0xFB, 0xEF, 0x3C, 0xD6, 0x58, 0x94, 0x70, 0x8C, 0x30, 0x8C, 0x2F, 0x7B, 0x8C, 0x5A, 0xC9, 0x5A, 0xA8, 0x6B, 0x0A, 0x73, 0x4B, 0x5A, 0xA9, 0x84, 0x30, 0xCE, 0x7A, 0xD6, 0x7A, 0xD6, 0x9B, 0xDE, 0xFC, 0xE6, 0xFC, 0x7B, 0xAE, 0x7B, 0x8C, 0x94, 0x0D, 0x94, 0x2E, 0x8C, 0x4F, 0x39, 0xA5, 0x73, 0x8C, 0x94, 0x4D, 0x9C, 0x4D, 0xA4, 0x8E, 0xAC, 0xCF, 0xB4, 0xF0, 0xB4, 0xF0, 0xB4, 0xF0, 0xAC, 0xEF, 0xAC, 0xCF, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0xAF, 0x9C, 0x8E, 0x94, 0x4D, 0x9C, 0x4E, 0xA4, 0xAF, 0xA4, 0xCF, 0xA4, 0x8F, 0x94, 0x2D, 0x6B, 0x0A, 0x4A, 0x06, 0x62, 0xEA, 0x5A, 0xCA, 0x63, 0x0B, 0x4A, 0x28, 0x39, 0x85, 0x5A, 0xAA, 0x83, 0xEF, 0x94, 0x71, 0x73, 0x4D, 0x6B, 0x0C, 0x8C, 0x10, 0x8C, 0x10, 0x8B, 0xF0, 0x7B, 0xAE, 0x94, 0x92, 0xE6, 0xFB, 0xE7, 0x1B, 0x7B, 0xCF, 0x31, 0xA6, 0x39, 0xE7, 0x42, 0x28, 0x39, 0xE7, 0x42, 0x07, 0x41, 0xE7, 0x42, 0x28, 0x52, 0xAA, 0x5A, 0xCA, 0x6B, 0x4D, 0x84, 0x10, 0x84, 0x31, 0x9C, 0xD3, 0xAD, 0x56, 0xBD, 0xF8, 0xC5, 0xF7, 0xA4, 0xF2, 0xB5, 0x73, 0xC5, 0xB4, 0xB5, 0x72, 0xBD, 0x93, 0xBD, 0xB3, 0xBD, 0x93, 0xB5, 0x73, 0xBD, 0x93, 0xB5, 0x52, 0xB5, 0x73, 0xBD, 0x93, 0xB5, 0x73, 0xBD, 0xB3, 0xC5, 0xD4, 0xCE, 0x35, 0xC6, 0x14, 0xC5, 0xF5, 0xA4, 0xD1, 0xBD, 0x93, 0xCE, 0x15, 0xB5, 0x51, 0x9C, 0xAF, 0x7B, 0xAB, 0xAD, 0x31, 0xBD, 0x92, 0xC5, 0xD3, 0xCD, 0xF3, 0xD6, 0x12, 0xDE, 0x54, 0x9C, 0x8F, 0xA4, 0xD0, 0x9C, 0xB0, 0xAD, 0x11, 0xAD, 0x31, 0xA4, 0xF0, 0xAD, 0x11, 0xB5, 0x52, 0xB5, 0x73, 0xB5, 0x73, 0xBD, 0x73, 0xB5, 0x52, 0xBD, 0x73, 0xBD, 0x93, 0xB5, 0x52, 0xAD, 0x52, 0xB5, 0x52, 0x94, 0x6F, 0xA4, 0xB0, 0xB5, 0x32, 0xBD, 0x72, 0xBD, 0x71, 0xBD, 0x71, 0xCD, 0xB2, 0xB5, 0x32, 0xB5, 0x53, 0xD6, 0x76, 0xD6, 0x55, 0xC5, 0xF4, 0xBD, 0x93, 0xC5, 0xF5, 0xDE, 0x96, 0xCE, 0x14, 0xB5, 0x31, 0xC5, 0x92, 0xD5, 0xF3, 0xD6, 0x35, 0xA4, 0xD0, 0x9C, 0xB0, 0x9C, 0x90, 0xCE, 0x36, 0xD6, 0x76, 0xCE, 0x35, 0xCE, 0x14, 0xCD, 0xF3, 0xCE, 0x14, 0xCE, 0x14, 0xD6, 0x35, 0x94, 0x6F, 0xB5, 0x73, 0xB5, 0x74, 0xAD, 0x53, 0xBD, 0xB4, 0xCE, 0x57, 0xC6, 0x15, 0xB5, 0x94, 0x94, 0x90, 0x8C, 0x2F, 0x9C, 0x90, 0xBD, 0xB4, 0xB5, 0x94, 0xBD, 0xB4, 0xBD, 0xB5, 0xAD, 0x54, 0x8C, 0x50, 0x52, 0xAA, 0x42, 0x09, 0x4A, 0x4B, 0xAD, 0x56, 0xDE, 0xBB, 0xCE, 0x18, 0xBD, 0x96, 0xC5, 0xD6, 0xB5, 0x54, 0xA4, 0xD1, 0xAD, 0x12, 0xA5, 0x12, 0xAD, 0x12, 0xAD, 0x12, 0x9C, 0xD1, 0x84, 0x2E, 0x6B, 0x6C, 0x4A, 0x89, 0x41, 0xE7, 0x31, 0x85, 0x29, 0x85, 0x21, 0x24, 0x21, 0x44, 0x21, 0x44, 0x32, 0x06, 0x5B, 0x89, 0x64, 0x2A, 0x64, 0x2A, 0x95, 0x6F, 0x7C, 0xCC, 0x4B, 0x67, 0x6C, 0x6A, 0x7C, 0xCB, 0x6C, 0x6A, 0x4B, 0x87, 0x64, 0x2A, 0x3A, 0xC5, 0x32, 0x84, 0x3A, 0xE5, 0x43, 0x25, 0x4B, 0x86, 0x3A, 0xE4, 0x43, 0x25, 0x63, 0xA8, 0x53, 0x27, 0x42, 0xA4, 0x5B, 0x88, 0x6B, 0x4A, 0x9C, 0xD2, 0x8C, 0x71, 0x7B, 0xAD, 0x7B, 0xAD, 0x6B, 0x2B, 0x63, 0x2A, 0x94, 0x6E, 0x9C, 0xD0, 0x8C, 0x4E, 0x94, 0x8F, 0xA4, 0xD0, 0xAD, 0x32, 0xB5, 0x73, 0xB5, 0x73, 0xB5, 0x73, 0xBD, 0xB4, 0xAD, 0x32, 0xBD, 0xD4, 0xC5, 0xD3, 0xC5, 0xD3, 0xAD, 0x30, 0x9C, 0x8E, 0x9C, 0x6E, 0xA4, 0xAE, 0xBD, 0x50, 0xEE, 0xB5, 0xE6, 0x95, 0xE6, 0x95, 0xE6, 0x75, 0xD5, 0xF2, 0xDE, 0x54, 0xDE, 0x74, 0xE6, 0x75, 0xE6, 0xB6, 0xE6, 0x95, 0xDE, 0x54, 0xDE, 0x33, 0xD5, 0xD2, 0xCD, 0x91, 0xCD, 0xB1, 0xC5, 0x70, 0xD5, 0xD2, 0xDE, 0x33, 0xDE, 0x13, 0xCD, 0xB1, 0xD5, 0xD2, 0xB4, 0xCE, 0xA4, 0x4C, 0xDE, 0x14, 0xD5, 0xD3, 0xCD, 0x92, 0xD5, 0xF4, 0xD5, 0xF4, 0xCD, 0xB3, 0xD5, 0xF4, 0xC5, 0x93, 0xCD, 0xB3, 0xD5, 0xF4, 0xCD, 0xD3, 0xC5, 0x92, 0xC5, 0x52, 0xC5, 0x72, 0xC5, 0x52, 0xBD, 0x51, 0xC5, 0x72, 0xCD, 0x93, 0xC5, 0x72, 0xC5, 0x72, 0xCD, 0xD3, 0xE6, 0x96, 0xDE, 0x14, 0xA4, 0x8D, 0xDE, 0x13, 0xE6, 0x54, 0xEE, 0xB6, 0xEE, 0xB6, 0xEE, 0xB6, 0xEE, 0x96, 0xE6, 0x95, 0xEE, 0x95, 0xEE, 0x95, 0xDE, 0x54, 0xE6, 0x75, 0xF6, 0xD7, 0xEE, 0xB7, 0xB5, 0x31, 0x5A, 0x88, 0x39, 0xC6, 0x39, 0xC6, 0x31, 0xA6, 0x39, 0xE7, 0x52, 0xAA, 0x5A, 0xEB, 0x7B, 0xCF, 0x8C, 0x72, 0x9C, 0xD3, 0xA5, 0x14, 0xC6, 0x39, 0xAD, 0x55, 0xD6, 0x9A, 0xE7, 0x3C, 0xD6, 0x9A, 0xC6, 0x17, 0xB5, 0x74, 0x94, 0xB1, 0x84, 0x0F, 0x84, 0x0E, 0x84, 0x2F, 0x73, 0x8D, 0x73, 0xAE, 0xA5, 0x35, 0xCE, 0x7A, 0xD6, 0xBB, 0xE7, 0x1D, 0xDE, 0xFC, 0xB5, 0x76, 0x83, 0xEF, 0x73, 0x8D, 0x94, 0x70, 0x73, 0x6C, 0x39, 0xC6, 0x8C, 0x2F, 0x8C, 0x2E, 0x83, 0xEE, 0x8C, 0x0E, 0x83, 0xCC, 0x83, 0xAC, 0x83, 0xAB, 0x7B, 0x8B, 0x7B, 0x8B, 0x7B, 0x8B, 0x83, 0xCC, 0x94, 0x2E, 0xA4, 0xCF, 0x8C, 0x0C, 0xA4, 0x6E, 0xA4, 0x8E, 0xA4, 0xAF, 0xA4, 0xAF, 0xAC, 0xAF, 0xAC, 0xEF, 0xB5, 0x10, 0x94, 0x2E, 0x5A, 0xA8, 0x52, 0x68, 0x52, 0x69, 0x42, 0x07, 0x4A, 0x48, 0x6B, 0x2C, 0x5A, 0xAA, 0x52, 0x49, 0x52, 0x69, 0x62, 0xCB, 0x83, 0xAE, 0xA4, 0xD2, 0x9C, 0x92, 0x9C, 0xB2, 0x83, 0xCF, 0x94, 0x92, 0xCE, 0x57, 0x83, 0xEF, 0x5A, 0xCA, 0x39, 0xE7, 0x31, 0xA6, 0x31, 0xA6, 0x39, 0xE6, 0x39, 0xE7, 0x42, 0x27, 0x52, 0x89, 0x63, 0x0B, 0x63, 0x0C, 0x6B, 0x6D, 0x73, 0xAF, 0x8C, 0x92, 0xA5, 0x35, 0xAD, 0x56, 0xA5, 0x14, 0xB5, 0x75, 0xB5, 0x94, 0xA4, 0xD1, 0xAD, 0x32, 0xB5, 0x53, 0x9C, 0x90, 0xB5, 0x73, 0xAD, 0x11, 0xA4, 0xF1, 0x9C, 0x90, 0x9C, 0xB0, 0xA4, 0xF1, 0xAD, 0x11, 0xB5, 0x52, 0xBD, 0x93, 0xC5, 0xF4, 0xCE, 0x35, 0xC5, 0xB4, 0xAC, 0xF1, 0xBD, 0xB3, 0xC5, 0xF3, 0xB5, 0x92, 0x94, 0x4E, 0x94, 0x6E, 0xAD, 0x31, 0xB5, 0x92, 0xBD, 0xB2, 0xBD, 0x71, 0xBD, 0x70, 0xD6, 0x13, 0xA4, 0xD0, 0xAD, 0x11, 0xA4, 0xF0, 0xAD, 0x32, 0xA4, 0xF1, 0xB5, 0x72, 0xBD, 0xB4, 0xBD, 0xB3, 0xC5, 0xD4, 0xC5, 0xD4, 0xC5, 0xD4, 0xBD, 0xB3, 0xBD, 0x93, 0xBD, 0x93, 0xBD, 0xB3, 0xC5, 0xD4, 0xC5, 0xD4, 0xBD, 0x93, 0xC5, 0xF5, 0xBD, 0x93, 0xB5, 0x52, 0xB5, 0x51, 0xBD, 0x51, 0xC5, 0x92, 0xB5, 0x31, 0xBD, 0x93, 0xC5, 0xF4, 0xCE, 0x14, 0xC5, 0xD4, 0xB5, 0x93, 0xCE, 0x15, 0xC5, 0xD4, 0xB5, 0x31, 0xDE, 0x35, 0xC5, 0x71, 0xCD, 0x92, 0xCD, 0xD3, 0xB5, 0x52, 0xB5, 0x53, 0xBD, 0xB4, 0xC5, 0xF4, 0xC5, 0xD3, 0xBD, 0xB3, 0xCD, 0xF4, 0xCD, 0xF3, 0xD6, 0x14, 0xD6, 0x14, 0xCD, 0xF4, 0x9C, 0xB0, 0xA5, 0x12, 0xA4, 0xF1, 0xB5, 0x53, 0xBD, 0xB4, 0xC6, 0x15, 0xC5, 0xD4, 0xC5, 0xF5, 0xAD, 0x53, 0xA4, 0xD1, 0xB5, 0x74, 0xBD, 0xD5, 0xBD, 0xF5, 0xCE, 0x56, 0xCE, 0x36, 0xBD, 0xD5, 0x94, 0x70, 0x6B, 0x4C, 0x39, 0xC7, 0x4A, 0x4A, 0xB5, 0x76, 0xAD, 0x55, 0xBD, 0x96, 0xC6, 0x18, 0xAD, 0x54, 0xB5, 0x54, 0xBD, 0xB5, 0xC5, 0xF6, 0xAD, 0x53, 0x8C, 0x50, 0x6B, 0x4C, 0x63, 0x0B, 0x7B, 0xAD, 0x73, 0x6D, 0x42, 0x08, 0x42, 0x28, 0x39, 0xC6, 0x39, 0xE7, 0x29, 0x64, 0x21, 0x44, 0x21, 0x44, 0x53, 0x49, 0x6C, 0x6B, 0x74, 0xCB, 0x85, 0x2E, 0x95, 0xB0, 0x6C, 0x6B, 0x21, 0xE3, 0x21, 0xC3, 0x4B, 0x47, 0x53, 0x87, 0x43, 0x26, 0x43, 0x26, 0x3A, 0xE6, 0x19, 0xC3, 0x21, 0xE3, 0x3A, 0xE5, 0x64, 0x2A, 0x53, 0xE8, 0x5C, 0x09, 0x6C, 0x2A, 0x5B, 0x68, 0x42, 0x85, 0x53, 0x06, 0x5B, 0xA8, 0x5B, 0x88, 0x4B, 0x08, 0x7B, 0xCD, 0x8C, 0x0E, 0x8C, 0x2F, 0x8C, 0x0E, 0x8C, 0x0D, 0x8C, 0x0E, 0x94, 0x2E, 0x94, 0x4E, 0x94, 0x4E, 0x94, 0x4E, 0x8C, 0x2D, 0x84, 0x0D, 0x83, 0xED, 0x84, 0x0D, 0x8C, 0x2E, 0x9C, 0x8F, 0x94, 0x6E, 0x94, 0x2D, 0x8C, 0x0C, 0x8B, 0xEC, 0x9C, 0x6E, 0xA4, 0x8E, 0xA4, 0x8D, 0xDE, 0x33, 0xE6, 0x95, 0xE6, 0x95, 0xE6, 0x75, 0xE6, 0x75, 0xEE, 0xB6, 0xE6, 0xB5, 0xE6, 0xB6, 0xE6, 0xB6, 0xEE, 0xD6, 0xEE, 0xB6, 0xE6, 0x95, 0xE6, 0x74, 0xD6, 0x13, 0xC5, 0x91, 0xCD, 0xD2, 0xD6, 0x13, 0xEE, 0xB6, 0xD5, 0xF3, 0xC5, 0x71, 0xC5, 0x71, 0xBD, 0x0F, 0xA4, 0x6D, 0xCD, 0xB2, 0xCD, 0xB2, 0xCD, 0xB2, 0xDE, 0x14, 0xD5, 0xF4, 0xD6, 0x14, 0xC5, 0x92, 0xC5, 0x93, 0xAC, 0xD0, 0xD5, 0xF4, 0xCD, 0xD4, 0xCD, 0xD3, 0xCD, 0xB3, 0xCD, 0xB3, 0xCD, 0xB3, 0xCD, 0x93, 0xC5, 0x92, 0xCD, 0xB3, 0xCD, 0xB3, 0xD5, 0xD3, 0xCD, 0xB2, 0xDE, 0x14, 0xD5, 0xF3, 0xA4, 0x8D, 0xDE, 0x34, 0xE6, 0x75, 0xEE, 0xB6, 0xEE, 0x96, 0xEE, 0x95, 0xE6, 0x75, 0xE6, 0x75, 0xE6, 0x75, 0xE6, 0x75, 0xE6, 0x95, 0xE6, 0x75, 0xE6, 0x95, 0xEE, 0xD6, 0xEE, 0xD6, 0xE6, 0x75, 0x9C, 0x6E, 0x4A, 0x07, 0x39, 0xA6, 0x39, 0xE7, 0x42, 0x07, 0x42, 0x07, 0x5A, 0xCB, 0x63, 0x2D, 0x7B, 0xF0, 0x8C, 0x72, 0xAD, 0x55, 0xC6, 0x19, 0xAD, 0x56, 0xCE, 0x7A, 0xE7, 0x1C, 0xEF, 0x3C, 0xCE, 0x38, 0x9C, 0xD2, 0x8C, 0x50, 0x9C, 0xD1, 0xA5, 0x12, 0xA5, 0x12, 0x9C, 0xD1, 0x73, 0xAE, 0xAD, 0x76, 0xC6, 0x3A, 0xEF, 0x5E, 0xF7, 0x9E, 0xE7, 0x3D, 0xB5, 0x75, 0xAD, 0x33, 0xA4, 0xF2, 0x4A, 0x48, 0x73, 0x8D, 0xBD, 0xD5, 0xBD, 0xB4, 0xB5, 0x74, 0xAD, 0x53, 0xA4, 0xF1, 0xAD, 0x32, 0xB5, 0x53, 0xAD, 0x32, 0xA4, 0xF1, 0xB5, 0x53, 0xBD, 0xB4, 0xB5, 0x53, 0xAD, 0x31, 0x9C, 0x8F, 0x9C, 0x6E, 0x8C, 0x0C, 0x94, 0x4E, 0x94, 0x2E, 0x9C, 0x8F, 0xA4, 0xD0, 0xA4, 0xCF, 0xC5, 0xD4, 0xBD, 0x92, 0x63, 0x0A, 0x4A, 0x27, 0x4A, 0x27, 0x5A, 0xAA, 0x63, 0x0B, 0x5A, 0xCA, 0x52, 0x89, 0x52, 0x49, 0x6B, 0x2C, 0x7B, 0x8E, 0x83, 0xCF, 0x73, 0x4D, 0x94, 0x51, 0xBD, 0x95, 0x94, 0x71, 0x62, 0xEB, 0xB5, 0x96, 0x9C, 0xB2, 0x4A, 0x28, 0x42, 0x28, 0x3A, 0x07, 0x31, 0xA5, 0x39, 0xC6, 0x39, 0xE7, 0x42, 0x28, 0x4A, 0x49, 0x4A, 0x49, 0x63, 0x0C, 0x73, 0xAF, 0x84, 0x51, 0x9D, 0x15, 0xB5, 0x96, 0xAD, 0x76, 0xC5, 0xF7, 0xCE, 0x78, 0xAD, 0x55, 0x73, 0x8D, 0x9C, 0x91, 0x52, 0x68, 0x94, 0x70, 0x9C, 0x90, 0x9C, 0xB0, 0x9C, 0x90, 0x9C, 0x6F, 0xA4, 0xB1, 0xA4, 0xD1, 0xA4, 0xB0, 0xBD, 0xB4, 0xC5, 0xF4, 0xC5, 0xD4, 0xC5, 0xD4, 0xA4, 0xB0, 0xAD, 0x11, 0xC6, 0x14, 0xCE, 0x55, 0xC5, 0xF4, 0xCE, 0x35, 0xD6, 0x55, 0xD6, 0x55, 0xD6, 0x54, 0xD6, 0x13, 0xD6, 0x13, 0xDE, 0x74, 0xA4, 0xAF, 0xA4, 0xF1, 0xA4, 0xF0, 0xAD, 0x31, 0xB5, 0x52, 0xBD, 0x93, 0xB5, 0x72, 0xBD, 0xB3, 0xBD, 0xD4, 0xC5, 0xD4, 0xBD, 0xB4, 0xC5, 0xF5, 0xC5, 0xF4, 0xC5, 0xD4, 0xC5, 0xF5, 0xBD, 0x93, 0xB5, 0x32, 0xAD, 0x11, 0xC5, 0xF4, 0xB5, 0x52, 0xBD, 0x73, 0xBD, 0x72, 0xC5, 0x92, 0xC5, 0x92, 0xB5, 0x11, 0xB5, 0x52, 0xC5, 0xF4, 0xC5, 0xF4, 0xBD, 0x93, 0xB5, 0x73, 0xBD, 0x93, 0xB5, 0x72, 0xA4, 0xAF, 0xD6, 0x14, 0xD5, 0xB2, 0xCD, 0x72, 0xCD, 0xF3, 0xC5, 0xD4, 0xC5, 0xD4, 0xCE, 0x15, 0xC5, 0xD4, 0xC5, 0xB3, 0xCE, 0x14, 0xCE, 0x14, 0xCD, 0xF3, 0xD6, 0x34, 0xD6, 0x55, 0xC5, 0xB3, 0x9C, 0xB1, 0x9C, 0xD1, 0x94, 0x90, 0xA4, 0xF2, 0xB5, 0x53, 0xB5, 0x93, 0xB5, 0x93, 0xB5, 0x73, 0xB5, 0x73, 0xA5, 0x12, 0xC6, 0x15, 0xC5, 0xF5, 0xCE, 0x36, 0xDE, 0x97, 0xC5, 0xF5, 0x9C, 0xD1, 0x83, 0xEE, 0xC5, 0xD5, 0x7B, 0xCE, 0x42, 0x08, 0x9C, 0xB3, 0x9C, 0xD3, 0xBD, 0xD7, 0xB5, 0x75, 0xBD, 0x96, 0xA4, 0xF3, 0x7B, 0xEF, 0x63, 0x0C, 0x5A, 0xCB, 0x9C, 0xD1, 0xC5, 0xF5, 0xE6, 0xB8, 0xD6, 0x16, 0xAC, 0xF2, 0x94, 0x92, 0x73, 0xAE, 0x39, 0xE7, 0x42, 0x48, 0x42, 0x07, 0x31, 0xC6, 0x31, 0xA5, 0x74, 0x4C, 0x85, 0x0D, 0x95, 0xB0, 0xA6, 0x11, 0x9D, 0xD0, 0x5B, 0xC8, 0x32, 0x65, 0x2A, 0x04, 0x3A, 0xC5, 0x5B, 0xC8, 0x5B, 0xC8, 0x4B, 0x47, 0x4B, 0x67, 0x32, 0x85, 0x2A, 0x44, 0x32, 0x84, 0x5B, 0xE9, 0x5C, 0x09, 0x5C, 0x29, 0x64, 0x08, 0x64, 0x08, 0x7C, 0x6B, 0xC6, 0x33, 0x95, 0x0E, 0x5B, 0xA7, 0x5B, 0xC7, 0x73, 0x6B, 0x8C, 0x2E, 0x9C, 0x6F, 0x9C, 0x6F, 0xAD, 0x12, 0x9C, 0x6F, 0x94, 0x4E, 0x9C, 0x8F, 0x9C, 0x8F, 0xA4, 0xF1, 0xB5, 0x52, 0xBD, 0x73, 0xAC, 0xF1, 0xA4, 0xB0, 0xA4, 0xD0, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0xAE, 0xAC, 0xCF, 0xA4, 0xAE, 0xA4, 0x8E, 0xA4, 0x8E, 0xA4, 0x6D, 0x9C, 0x4C, 0x9C, 0x6D, 0xA4, 0xAE, 0xAC, 0xCE, 0xAC, 0xCF, 0xB4, 0xEF, 0xB5, 0x30, 0xBD, 0x50, 0xBD, 0x71, 0xC5, 0xB2, 0xCD, 0xD2, 0xD5, 0xF3, 0xD5, 0xF3, 0xD6, 0x14, 0xD6, 0x34, 0xD6, 0x34, 0xDE, 0x55, 0xE6, 0x96, 0xEE, 0xB6, 0xE6, 0x95, 0xC5, 0x51, 0xCD, 0xD2, 0xAC, 0xAE, 0xE6, 0x96, 0xCD, 0xD3, 0xDE, 0x35, 0xD5, 0xF4, 0xDE, 0x35, 0xD6, 0x14, 0x9C, 0x4D, 0xC5, 0x93, 0xCD, 0xD4, 0xD5, 0xF4, 0xCD, 0xD4, 0xD5, 0xF4, 0xD5, 0xD4, 0xD5, 0xD4, 0xD5, 0xD4, 0xD5, 0xD4, 0xD5, 0xF4, 0xD5, 0xF4, 0xD5, 0xF4, 0xDE, 0x14, 0xD5, 0xF4, 0xD5, 0xF3, 0xDE, 0x34, 0xA4, 0x6D, 0xDE, 0x54, 0xE6, 0x95, 0xEE, 0x95, 0xEE, 0x95, 0xEE, 0x95, 0xE6, 0x95, 0xDE, 0x13, 0xEE, 0x95, 0xE6, 0x95, 0xE6, 0x75, 0xE6, 0x75, 0xE6, 0x75, 0xEE, 0xB6, 0xDE, 0x33, 0xE6, 0x95, 0xF6, 0xD7, 0xCD, 0xD3, 0x7B, 0x6B, 0x41, 0xE6, 0x31, 0x85, 0x31, 0xA6, 0x42, 0x08, 0x5A, 0xCB, 0x5B, 0x0C, 0x73, 0x8E, 0x7B, 0xF0, 0x94, 0xB3, 0xB5, 0xB7, 0xCE, 0x5A, 0xCE, 0x7A, 0xDE, 0xDC, 0xEF, 0x5D, 0xE7, 0x1C, 0xAD, 0x75, 0x94, 0x91, 0x9C, 0xF2, 0xB5, 0x53, 0xB5, 0x74, 0x7B, 0xEE, 0x84, 0x51, 0xC6, 0x39, 0xDE, 0xDC, 0xBE, 0x18, 0xC6, 0x19, 0xCE, 0x59, 0xAD, 0x54, 0x94, 0x70, 0x39, 0xC6, 0x94, 0x90, 0xA5, 0x12, 0xAD, 0x52, 0xB5, 0x73, 0xB5, 0x73, 0xAD, 0x52, 0xA5, 0x11, 0xB5, 0x73, 0xBD, 0xB4, 0xBD, 0x93, 0xB5, 0x94, 0xAD, 0x73, 0xAD, 0x32, 0xA4, 0xF1, 0xAD, 0x32, 0xA4, 0xAF, 0x7B, 0x6B, 0x6B, 0x6C, 0x73, 0x6C, 0x73, 0x8D, 0x83, 0xEE, 0x7B, 0xEE, 0x9C, 0xB0, 0xAD, 0x32, 0x9C, 0xB0, 0x6B, 0x4B, 0x52, 0x68, 0x4A, 0x68, 0x4A, 0x48, 0x52, 0x89, 0x7B, 0x8D, 0x6B, 0x2C, 0x5A, 0x8A, 0x83, 0xEF, 0x83, 0xCE, 0x83, 0xAE, 0x9C, 0x71, 0xBD, 0x75, 0xCD, 0xD7, 0xA4, 0xB2, 0xA4, 0xB2, 0x73, 0x6D, 0x5A, 0xEA, 0x42, 0x07, 0x3A, 0x07, 0x31, 0xA6, 0x39, 0xE7, 0x42, 0x28, 0x52, 0xAA, 0x4A, 0x69, 0x52, 0xAA, 0x63, 0x2C, 0x73, 0xAF, 0x84, 0x11, 0x94, 0xB3, 0xA5, 0x15, 0x8C, 0x72, 0xB5, 0x96, 0xC6, 0x17, 0xC5, 0xF7, 0x84, 0x10, 0x73, 0x6D, 0x4A, 0x48, 0xAD, 0x33, 0xCD, 0xF6, 0xAD, 0x32, 0xAC, 0xF1, 0xA4, 0xD1, 0xA4, 0xB0, 0xA4, 0xB0, 0x9C, 0x90, 0x9C, 0x90, 0x9C, 0x90, 0x94, 0x6F, 0x9C, 0x8F, 0xA4, 0xB0, 0x9C, 0x6F, 0x94, 0x2E, 0x8C, 0x2E, 0x94, 0x4E, 0x94, 0x4E, 0x94, 0x4E, 0x9C, 0x6E, 0x9C, 0x8E, 0x9C, 0x8F, 0xA4, 0xCF, 0x9C, 0xAF, 0x94, 0x2E, 0x8C, 0x2E, 0x8C, 0x0D, 0x8C, 0x0D, 0x8C, 0x2E, 0x8C, 0x0D, 0x83, 0xCC, 0x8C, 0x2E, 0x94, 0x6F, 0x9C, 0xB0, 0xA4, 0xF1, 0xA4, 0xF1, 0x9C, 0xB0, 0xA4, 0xD0, 0xAD, 0x32, 0xB5, 0x72, 0xBD, 0x93, 0xAD, 0x31, 0xA4, 0xD0, 0xC5, 0xB4, 0xC5, 0xB4, 0xCD, 0xF3, 0xC5, 0x92, 0xCD, 0xB3, 0xAD, 0x11, 0x9C, 0xAF, 0xCE, 0x35, 0xCE, 0x15, 0xC5, 0xD4, 0xC5, 0xF5, 0xC5, 0xF5, 0xBD, 0xB4, 0xBD, 0x92, 0xCD, 0xB3, 0xD5, 0xD3, 0xBD, 0x51, 0xCE, 0x15, 0xC5, 0xD4, 0xC5, 0xD4, 0xCE, 0x14, 0xCD, 0xF4, 0xC5, 0xF4, 0xCE, 0x14, 0xC5, 0xB3, 0xD6, 0x55, 0xD6, 0x55, 0xDE, 0x75, 0xC5, 0xD3, 0xA4, 0xF2, 0xA4, 0xF2, 0x94, 0x70, 0x9C, 0xD1, 0xAD, 0x53, 0xB5, 0x53, 0xB5, 0x73, 0xB5, 0x74, 0xAD, 0x33, 0xA4, 0xF2, 0xAD, 0x32, 0xB5, 0x93, 0xC5, 0xF5, 0xD6, 0x76, 0xCE, 0x56, 0xD6, 0x57, 0xD6, 0x77, 0xEF, 0x1A, 0xC5, 0xF6, 0xAD, 0x75, 0xD6, 0x79, 0xB5, 0x96, 0xA5, 0x14, 0x83, 0xF0, 0x63, 0x0C, 0x5A, 0xCB, 0x5A, 0xEC, 0x8C, 0x72, 0xC6, 0x17, 0xDE, 0xB8, 0xDE, 0x97, 0xE6, 0xB8, 0xB5, 0x12, 0xD6, 0x38, 0xDE, 0xDB, 0xA5, 0x34, 0x42, 0x07, 0x42, 0x07, 0x3A, 0x07, 0x21, 0x64, 0x21, 0x64, 0x7C, 0x8D, 0x74, 0xAC, 0x6C, 0x6B, 0x7C, 0xED, 0x8D, 0x4E, 0x4B, 0x67, 0x3A, 0x85, 0x21, 0xC3, 0x43, 0x06, 0x63, 0xE9, 0x2A, 0x44, 0x2A, 0x44, 0x5B, 0xC9, 0x5B, 0xA9, 0x32, 0x65, 0x2A, 0x04, 0x3A, 0xC5, 0x4B, 0x67, 0x53, 0xA8, 0x53, 0xA7, 0x53, 0xA6, 0x84, 0x8C, 0xEF, 0x38, 0xE7, 0x17, 0x7C, 0x4B, 0x53, 0x86, 0x62, 0xEA, 0x5A, 0x89, 0x83, 0xCD, 0x94, 0x2E, 0x94, 0x4F, 0x52, 0x68, 0x5A, 0x88, 0x7B, 0x8C, 0x83, 0xAC, 0x73, 0x4B, 0x94, 0x6F, 0xDE, 0x77, 0xCE, 0x15, 0x9C, 0x4E, 0xAC, 0xD0, 0xA4, 0x6E, 0xA4, 0x6E, 0xA4, 0xAF, 0xC5, 0xB2, 0xC5, 0xB2, 0xC5, 0x92, 0xCD, 0xF3, 0xCD, 0xB3, 0xCD, 0xD3, 0xCD, 0xD3, 0xC5, 0xB2, 0xC5, 0xB2, 0xC5, 0xB2, 0xC5, 0x91, 0xB5, 0x30, 0xB5, 0x10, 0xBD, 0x71, 0xB4, 0xF0, 0xAC, 0xCF, 0xB4, 0xEF, 0xAC, 0xCF, 0xA4, 0x8E, 0xA4, 0x6D, 0xA4, 0x6E, 0xA4, 0x6E, 0xA4, 0x6D, 0xA4, 0x6D, 0xA4, 0x6D, 0xAC, 0x8E, 0xA4, 0x8D, 0xA4, 0x8E, 0xB5, 0x0F, 0xAC, 0xAE, 0xA4, 0x8E, 0x9C, 0x2C, 0x94, 0x2C, 0x9C, 0x2D, 0x9C, 0x4D, 0x8B, 0xCB, 0x94, 0x0C, 0x9C, 0x2D, 0x9C, 0x2D, 0xA4, 0x6E, 0xAC, 0xAF, 0xB4, 0xCF, 0xBD, 0x31, 0xC5, 0x72, 0xBD, 0x51, 0xCD, 0xD4, 0xCD, 0xB3, 0xCD, 0xD3, 0xCD, 0xF3, 0xD5, 0xF4, 0xE6, 0x95, 0xAC, 0x8E, 0xE6, 0x95, 0xF6, 0xF6, 0xEE, 0xD6, 0xEE, 0xD6, 0xEE, 0xD6, 0xEE, 0xB6, 0xEE, 0xB6, 0xEE, 0xD6, 0xDE, 0x34, 0xE6, 0x75, 0xEE, 0x95, 0xEE, 0x95, 0xE6, 0x75, 0xE6, 0x54, 0xE6, 0x74, 0xE6, 0x74, 0xEE, 0x95, 0xEE, 0x96, 0xB5, 0x10, 0x62, 0xA9, 0x39, 0xA5, 0x31, 0xA6, 0x31, 0xC6, 0x3A, 0x07, 0x4A, 0x69, 0x52, 0xAB, 0x6B, 0x4D, 0x84, 0x51, 0xAD, 0x96, 0xC6, 0x3A, 0xCE, 0x7A, 0xDE, 0xDB, 0xAD, 0x55, 0xBD, 0xB7, 0xE7, 0x3C, 0xCE, 0x59, 0xBD, 0x95, 0xB5, 0x75, 0x8C, 0x50, 0x8C, 0x30, 0x9C, 0xB3, 0xA5, 0x35, 0xD6, 0x9A, 0xD6, 0xBB, 0xEF, 0x3D, 0xD6, 0x79, 0x73, 0x6D, 0x5A, 0xA9, 0xBD, 0xB4, 0xC5, 0xF4, 0xC5, 0xD4, 0xCD, 0xF4, 0xC5, 0xB4, 0xBD, 0xB3, 0xBD, 0x93, 0x94, 0x6F, 0x94, 0x8F, 0x9C, 0xB0, 0xAD, 0x32, 0xBD, 0x73, 0xC5, 0xD4, 0xC5, 0xB3, 0xB5, 0x52, 0xA4, 0x8F, 0x73, 0x2A, 0x6B, 0x4C, 0x5A, 0xEB, 0x63, 0x0B, 0x63, 0x2C, 0x6B, 0x6C, 0x7B, 0xEE, 0x8C, 0x4F, 0x8C, 0x4F, 0x8C, 0x2F, 0x83, 0xEE, 0x52, 0x48, 0x4A, 0x68, 0x62, 0xEA, 0x63, 0x0B, 0x62, 0xEB, 0x4A, 0x28, 0x52, 0x89, 0x7B, 0x8E, 0x6A, 0xEB, 0x8C, 0x10, 0xAC, 0xF3, 0xCE, 0x17, 0xB5, 0x54, 0xBD, 0x95, 0x9C, 0x72, 0x94, 0x71, 0x4A, 0x89, 0x39, 0xE6, 0x39, 0xE7, 0x31, 0xA5, 0x31, 0xA5, 0x42, 0x28, 0x42, 0x28, 0x5A, 0xEB, 0x6B, 0x6D, 0x6B, 0x6E, 0x7B, 0xF0, 0x7C, 0x10, 0x7B, 0xF0, 0xA5, 0x14, 0xAD, 0x76, 0xC6, 0x18, 0xC6, 0x18, 0xA5, 0x14, 0x63, 0x0C, 0x4A, 0x48, 0x8C, 0x0F, 0xCE, 0x16, 0xC5, 0xF6, 0xB5, 0x53, 0xBD, 0xB4, 0xBD, 0x73, 0xBD, 0xB4, 0xAD, 0x12, 0x8C, 0x0E, 0x94, 0x4F, 0xA4, 0xAF, 0xAC, 0xF1, 0xC5, 0x93, 0xBD, 0x53, 0xBD, 0x53, 0xB5, 0x52, 0xA4, 0xD0, 0xA4, 0xB0, 0x9C, 0x8F, 0x9C, 0x70, 0x9C, 0x90, 0x9C, 0x90, 0x9C, 0x90, 0x9C, 0xB0, 0xAD, 0x11, 0xB5, 0x32, 0xAD, 0x11, 0xAC, 0xF1, 0xAC, 0xF1, 0xAD, 0x12, 0xAD, 0x11, 0xAC, 0xF1, 0xAC, 0xD1, 0xA4, 0xB0, 0xA4, 0x90, 0x9C, 0x6F, 0x9C, 0x4F, 0x9C, 0x4F, 0x9C, 0x4F, 0x8B, 0xED, 0x8C, 0x0E, 0x8C, 0x0E, 0x8C, 0x0D, 0x94, 0x4E, 0x94, 0x2E, 0x94, 0x2E, 0x94, 0x2D, 0x94, 0x0D, 0x94, 0x4F, 0x8C, 0x0E, 0x94, 0x6F, 0xAC, 0xF1, 0xB5, 0x52, 0xAD, 0x12, 0xBD, 0x93, 0xC5, 0xB4, 0xC5, 0xD4, 0xDE, 0x55, 0xE6, 0x96, 0xD6, 0x35, 0xD6, 0x56, 0xC5, 0xD3, 0xCE, 0x15, 0xD6, 0x56, 0xC5, 0xD4, 0xCE, 0x15, 0xCE, 0x35, 0xCD, 0xF4, 0xCE, 0x14, 0xDE, 0x55, 0xD6, 0x55, 0xCD, 0xD4, 0xAD, 0x12, 0x9C, 0xF1, 0x8C, 0x4F, 0xA5, 0x12, 0xB5, 0x73, 0xB5, 0x74, 0xBD, 0x94, 0xB5, 0x73, 0xAD, 0x33, 0xAD, 0x53, 0xAD, 0x53, 0xB5, 0x73, 0xBD, 0xB4, 0xCE, 0x36, 0xCE, 0x56, 0xD6, 0x77, 0xD6, 0x98, 0xCE, 0x37, 0xB5, 0x74, 0x9C, 0xD2, 0x7B, 0xCF, 0x7B, 0xCE, 0x83, 0xEE, 0x73, 0x6D, 0x7B, 0xAE, 0x73, 0x4D, 0x6B, 0x2C, 0x73, 0x8E, 0xB5, 0x75, 0xAD, 0x53, 0xDE, 0xB9, 0xD6, 0x78, 0x84, 0x10, 0x94, 0x92, 0x94, 0x92, 0x84, 0x10, 0x42, 0x28, 0x31, 0xA5, 0x39, 0xC6, 0x31, 0xC6, 0x21, 0x64, 0x53, 0x29, 0x6C, 0x8B, 0x53, 0xC8, 0x53, 0xC8, 0x4B, 0x67, 0x2A, 0x03, 0x19, 0x41, 0x19, 0x62, 0x4B, 0x06, 0x4B, 0x66, 0x5B, 0xC9, 0x19, 0x82, 0x53, 0x49, 0x7C, 0xCD, 0x5B, 0xA9, 0x63, 0xEA, 0x63, 0xE9, 0x5B, 0xE9, 0x6C, 0x6A, 0x4B, 0x86, 0x43, 0x04, 0x8C, 0xCC, 0xDE, 0xF5, 0xAD, 0xD0, 0x7C, 0xAA, 0x4B, 0x24, 0x52, 0x89, 0x39, 0xC6, 0x52, 0xA9, 0x5A, 0xA9, 0x5A, 0xA9, 0x52, 0x48, 0x7B, 0xCD, 0xC5, 0xF4, 0xD6, 0x56, 0xB5, 0x32, 0x83, 0xED, 0xA4, 0xD0, 0xC5, 0xB4, 0x9C, 0x2E, 0xA4, 0x6E, 0xB4, 0xD0, 0x8B, 0xCC, 0x73, 0x2A, 0x7B, 0x6B, 0x83, 0xAC, 0x9C, 0x6E, 0xD6, 0x14, 0xCD, 0xB3, 0xCD, 0xB2, 0xBD, 0x72, 0xAC, 0xF0, 0xE6, 0x96, 0xDE, 0x54, 0xE6, 0x75, 0xC5, 0x92, 0x94, 0x0C, 0xBD, 0x51, 0xBD, 0x51, 0xA4, 0x6E, 0xAC, 0xAF, 0xBD, 0x51, 0xB4, 0xEF, 0xAC, 0xAE, 0xC5, 0x71, 0xE6, 0x96, 0xCD, 0xD3, 0xC5, 0x72, 0xC5, 0x92, 0xD6, 0x14, 0xD5, 0xF3, 0xC5, 0x71, 0xC5, 0x71, 0xC5, 0x91, 0xC5, 0x91, 0xBD, 0x51, 0xBD, 0x51, 0xAC, 0xEF, 0xAC, 0xEF, 0xB5, 0x10, 0xB5, 0x10, 0xB5, 0x30, 0xBD, 0x30, 0xB4, 0xEF, 0xAC, 0xAE, 0xAC, 0xCF, 0xA4, 0x8E, 0xA4, 0x6E, 0xA4, 0x6E, 0xAC, 0xCF, 0x9C, 0x2D, 0x8B, 0xEB, 0x8B, 0xCB, 0xB5, 0x10, 0xCD, 0xB2, 0xAC, 0x8D, 0xBD, 0x30, 0xC5, 0x71, 0xCD, 0x91, 0xCD, 0xB2, 0xCD, 0x71, 0xCD, 0xB2, 0xD5, 0xF3, 0xD5, 0xD2, 0xC5, 0x30, 0xCD, 0x92, 0xD5, 0xD2, 0xDE, 0x34, 0xDE, 0x34, 0xDE, 0x33, 0xDE, 0x33, 0xE6, 0x54, 0xE6, 0x53, 0xEE, 0x95, 0xF6, 0xB6, 0xE6, 0x55, 0x8B, 0xED, 0x39, 0xC6, 0x31, 0xA5, 0x31, 0xC6, 0x39, 0xE7, 0x42, 0x08, 0x52, 0xAA, 0x6B, 0x6D, 0x84, 0x30, 0x9D, 0x14, 0xAD, 0x55, 0xAD, 0x55, 0x6B, 0x4D, 0xB5, 0xB7, 0xDE, 0xDB, 0xEF, 0x5D, 0xEF, 0x7D, 0xDE, 0xBA, 0xBD, 0x95, 0xA4, 0xD3, 0x84, 0x10, 0x94, 0xB3, 0xEF, 0x5D, 0xDE, 0xDB, 0xD6, 0x7A, 0xEF, 0x3D, 0x73, 0x8E, 0x94, 0x6F, 0xCE, 0x35, 0xDE, 0x75, 0xD6, 0x34, 0xCD, 0xF4, 0xD6, 0x14, 0xCD, 0xF4, 0xCD, 0xF4, 0xC5, 0xD4, 0xC5, 0xD4, 0xCE, 0x15, 0xCE, 0x15, 0xCE, 0x14, 0xCD, 0xF4, 0xD6, 0x14, 0xB5, 0x30, 0xA4, 0x8E, 0x8B, 0xCD, 0x63, 0x2C, 0x5A, 0xEB, 0x63, 0x0B, 0x63, 0x4C, 0x73, 0x8D, 0x73, 0xAE, 0x7B, 0xEF, 0x84, 0x0F, 0x84, 0x2F, 0x84, 0x2F, 0x7B, 0xCE, 0x62, 0xEA, 0x52, 0x69, 0x52, 0x69, 0x52, 0x68, 0x62, 0xEB, 0x62, 0xCA, 0x7B, 0x8D, 0x7B, 0x8E, 0x73, 0x4C, 0x8C, 0x0F, 0xA4, 0xD2, 0x8C, 0x10, 0xA4, 0xD3, 0xB5, 0x76, 0xCE, 0x38, 0x8C, 0x51, 0x39, 0xE7, 0x3A, 0x07, 0x29, 0x65, 0x39, 0xC6, 0x42, 0x07, 0x39, 0xE7, 0x52, 0xCA, 0x63, 0x2C, 0x63, 0x0C, 0x73, 0xAF, 0x7B, 0xF0, 0x94, 0x93, 0xA5, 0x35, 0xA5, 0x15, 0xBD, 0xF8, 0xB5, 0xB6, 0xB5, 0x96, 0x5A, 0xCB, 0x39, 0xA6, 0x5A, 0xCA, 0x5A, 0xAA, 0x84, 0x0F, 0xB5, 0x74, 0xC6, 0x16, 0xA5, 0x12, 0xA4, 0xD2, 0xDE, 0x98, 0xC5, 0xB5, 0xB4, 0xF1, 0xAC, 0xD0, 0xB4, 0xD0, 0xCD, 0x92, 0xCD, 0x72, 0xCD, 0xB3, 0xC5, 0x93, 0x9C, 0x6F, 0xA4, 0xD1, 0xA4, 0xF2, 0x9C, 0x90, 0x94, 0x2F, 0x83, 0xED, 0x83, 0xED, 0x83, 0xCD, 0xA4, 0xB0, 0xAD, 0x11, 0xB5, 0x11, 0xB5, 0x31, 0xB5, 0x11, 0xB5, 0x31, 0xBD, 0x72, 0xCD, 0xD4, 0xC5, 0xB3, 0xCD, 0xB3, 0xCD, 0xB4, 0xCD, 0xD4, 0xC5, 0x73, 0xC5, 0x93, 0xC5, 0xB4, 0xC5, 0x93, 0xBD, 0x73, 0xBD, 0x73, 0xBD, 0x73, 0xBD, 0x73, 0xB5, 0x33, 0xAC, 0xF1, 0xAD, 0x11, 0xB5, 0x32, 0xB5, 0x53, 0xAD, 0x33, 0xAD, 0x12, 0xAC, 0xF1, 0xA4, 0xD0, 0x9C, 0x90, 0x9C, 0x90, 0x9C, 0x6F, 0x9C, 0x6F, 0x9C, 0x8F, 0x9C, 0x6F, 0x9C, 0x6F, 0x94, 0x2E, 0x8C, 0x2E, 0x94, 0x6F, 0xA4, 0xF1, 0xA4, 0xB0, 0xB5, 0x52, 0xBD, 0xB3, 0xBD, 0x73, 0xC5, 0xB3, 0xCD, 0xF4, 0xC5, 0xD3, 0xAC, 0xF0, 0xA4, 0xF1, 0x94, 0x90, 0x8C, 0x4F, 0xA4, 0xF2, 0xAD, 0x33, 0xA5, 0x32, 0xA4, 0xF2, 0xA4, 0xF2, 0xA4, 0xF2, 0xB5, 0x94, 0xC5, 0xD5, 0xCE, 0x57, 0xD6, 0x98, 0xD6, 0x57, 0xC5, 0xF6, 0xAD, 0x54, 0x94, 0x91, 0x7B, 0xEF, 0x8C, 0x50, 0xA4, 0xF2, 0x9C, 0xD2, 0x8C, 0x4F, 0x9C, 0xB1, 0x8B, 0xEE, 0x5A, 0x68, 0x5A, 0x68, 0x6B, 0x0B, 0x62, 0xCA, 0x7B, 0xAE, 0x73, 0x8D, 0xA5, 0x12, 0x94, 0x91, 0x52, 0x69, 0x39, 0xE7, 0x31, 0x86, 0x42, 0x28, 0x31, 0xC6, 0x31, 0xA5, 0x21, 0x44, 0x19, 0x23, 0x21, 0x44, 0x21, 0xA4, 0x5B, 0xC9, 0x5B, 0xE9, 0x3A, 0xE5, 0x4B, 0x27, 0x6B, 0xEB, 0x63, 0xCA, 0x74, 0x6C, 0x5C, 0x08, 0x5C, 0x28, 0x7C, 0xEC, 0x32, 0x65, 0x19, 0x83, 0x53, 0x49, 0x63, 0xEB, 0x84, 0xCD, 0x95, 0x4F, 0x7C, 0xAC, 0x6C, 0x2A, 0x43, 0x26, 0x4B, 0x65, 0x6C, 0x28, 0x85, 0x0A, 0x6C, 0x86, 0x4B, 0xA3, 0x43, 0x23, 0x52, 0x89, 0x42, 0x08, 0x42, 0x48, 0x52, 0x89, 0x5A, 0xCA, 0x62, 0xEB, 0xAD, 0x11, 0xD6, 0x35, 0xDE, 0x35, 0xDE, 0x55, 0xD6, 0x15, 0xCD, 0xF4, 0xCD, 0xF5, 0x9C, 0x4E, 0x9C, 0x2D, 0xCD, 0x72, 0xCD, 0xD4, 0xC5, 0xB3, 0xCD, 0xF4, 0xD6, 0x35, 0xD6, 0x14, 0xE6, 0x96, 0xDE, 0x76, 0xDE, 0x55, 0xDE, 0x76, 0xD6, 0x35, 0xDE, 0x55, 0xDE, 0x34, 0xD6, 0x13, 0xCD, 0xF4, 0xC5, 0xD4, 0xAD, 0x11, 0xBD, 0x72, 0xC5, 0xD4, 0xD6, 0x35, 0xEE, 0x97, 0xBD, 0x51, 0xA4, 0x6D, 0x94, 0x0C, 0xAC, 0xD0, 0x9C, 0x4D, 0x83, 0x8A, 0x8B, 0xCB, 0xAC, 0x8F, 0xA4, 0x4E, 0x93, 0xCB, 0x93, 0xEC, 0x93, 0xEC, 0x8B, 0xCB, 0x7B, 0x6A, 0x83, 0xAB, 0x94, 0x0C, 0x94, 0x2D, 0x8B, 0xEC, 0x7B, 0x4A, 0x83, 0xAB, 0x94, 0x0D, 0x94, 0x0C, 0xA4, 0x8E, 0xB5, 0x10, 0xB4, 0xEF, 0xBD, 0x30, 0xA4, 0x6D, 0xA4, 0x6D, 0xAC, 0xAE, 0xB4, 0xEF, 0xB5, 0x10, 0xB4, 0xEF, 0xB4, 0xEF, 0xB4, 0xCE, 0xAC, 0xCE, 0xAC, 0xEF, 0xAC, 0xCE, 0xAC, 0xCE, 0xB4, 0xEF, 0xB4, 0xEF, 0xB4, 0xEF, 0xB4, 0xCE, 0xB4, 0xEF, 0xB4, 0xEF, 0xAC, 0xAE, 0xAC, 0xCE, 0xAC, 0xAE, 0xA4, 0x8D, 0xAC, 0xAE, 0xBD, 0x0F, 0xBD, 0x0F, 0xB4, 0xEE, 0xB4, 0xCE, 0xB4, 0xEF, 0xBD, 0x10, 0x9C, 0x2E, 0x5A, 0x88, 0x39, 0xE6, 0x31, 0xA6, 0x31, 0xA6, 0x31, 0xC6, 0x4A, 0x48, 0x5B, 0x0B, 0x73, 0xAF, 0x73, 0x8E, 0x63, 0x0C, 0x9C, 0xF3, 0xA5, 0x35, 0xC6, 0x39, 0xCE, 0x7A, 0xD6, 0xBB, 0xEF, 0x5D, 0xD6, 0x9A, 0xCE, 0x38, 0xC6, 0x18, 0x94, 0x92, 0xBD, 0xD7, 0x84, 0x10, 0x9C, 0xD4, 0xD6, 0x9A, 0xAD, 0x75, 0xB5, 0x52, 0xD6, 0x14, 0xE6, 0x96, 0xEE, 0xD6, 0xEE, 0xD7, 0xE6, 0x96, 0xE6, 0x96, 0xDE, 0x35, 0xDE, 0x55, 0xDE, 0x75, 0xDE, 0x55, 0xD6, 0x14, 0xD6, 0x14, 0xDE, 0x76, 0xCD, 0xD3, 0x9C, 0x6E, 0xA4, 0xAF, 0x8B, 0xED, 0x6B, 0x2C, 0x6B, 0x6D, 0x6B, 0x4C, 0x6B, 0x4C, 0x73, 0xAE, 0x73, 0xAD, 0x84, 0x0F, 0x8C, 0x30, 0x8C, 0x30, 0x84, 0x0F, 0x83, 0xEF, 0x8C, 0x30, 0x73, 0x8D, 0x4A, 0x48, 0x39, 0xC6, 0x5A, 0xCA, 0x6B, 0x4C, 0x83, 0xCE, 0x41, 0xE7, 0x5A, 0xAA, 0x6B, 0x0B, 0x83, 0xCF, 0xBD, 0xB6, 0xBD, 0xD7, 0x94, 0x72, 0xBD, 0xF7, 0xAD, 0x34, 0x5A, 0xCA, 0x42, 0x07, 0x31, 0xA6, 0x31, 0xA6, 0x39, 0xE7, 0x31, 0xC6, 0x31, 0xA6, 0x42, 0x28, 0x52, 0xAA, 0x63, 0x2C, 0x6B, 0x4D, 0x73, 0xAF, 0x84, 0x31, 0x8C, 0x52, 0xB5, 0xB7, 0xC6, 0x19, 0xCE, 0x7A, 0x9C, 0xD3, 0x42, 0x29, 0x4A, 0x49, 0x5A, 0xAB, 0x5A, 0xCB, 0x5A, 0xCB, 0x73, 0x8D, 0x83, 0xEF, 0x8C, 0x50, 0xD6, 0x58, 0xBD, 0x54, 0xBD, 0x32, 0xAC, 0x8E, 0xC5, 0x10, 0xDD, 0xB2, 0xDD, 0xB2, 0xD5, 0xD3, 0xC5, 0x93, 0xA4, 0xD1, 0xBD, 0x94, 0xC5, 0xD5, 0xBD, 0xB4, 0xBD, 0xB4, 0xBD, 0xB4, 0xBD, 0x94, 0xBD, 0x94, 0xC5, 0x93, 0xC5, 0xB3, 0xC5, 0xB3, 0xCD, 0xD4, 0xCD, 0xD3, 0xCD, 0xB3, 0xBD, 0x51, 0xBD, 0x31, 0xA4, 0x8E, 0xA4, 0x8E, 0xC5, 0x51, 0xCD, 0xB3, 0xD5, 0xD4, 0xCD, 0xD3, 0xD5, 0xD4, 0xEE, 0x97, 0xB5, 0x32, 0xB5, 0x32, 0xC5, 0x94, 0xB5, 0x53, 0xA4, 0xB1, 0xA4, 0xD1, 0xB5, 0x52, 0xBD, 0x73, 0xBD, 0x73, 0xBD, 0x94, 0xC5, 0xD4, 0xBD, 0x93, 0xC5, 0x94, 0xBD, 0x93, 0xC5, 0x94, 0xC5, 0xB4, 0xC5, 0x94, 0xBD, 0x93, 0xBD, 0x73, 0xB5, 0x53, 0xBD, 0x53, 0xB5, 0x32, 0xA4, 0xB0, 0x9C, 0x90, 0x9C, 0x90, 0x9C, 0x70, 0x94, 0x4F, 0x8C, 0x0F, 0x73, 0x6C, 0x83, 0xED, 0x8C, 0x2E, 0x94, 0x70, 0x9C, 0xB0, 0xA4, 0xF2, 0xA5, 0x12, 0x9C, 0xD1, 0x9C, 0x91, 0x9C, 0xB2, 0xA5, 0x13, 0xB5, 0x54, 0xBD, 0xB5, 0xCE, 0x37, 0xC5, 0xD6, 0xAD, 0x54, 0x94, 0x51, 0x73, 0x8D, 0x6B, 0x4D, 0x6B, 0x4D, 0x83, 0xEF, 0xAD, 0x13, 0xB5, 0x73, 0xA5, 0x11, 0x83, 0xEE, 0x7B, 0x8C, 0x7B, 0xAD, 0x83, 0xCD, 0x83, 0xEE, 0x83, 0xAD, 0x6B, 0x0B, 0x4A, 0x08, 0x41, 0xE7, 0x31, 0x65, 0x42, 0x27, 0x42, 0x07, 0x41, 0xE7, 0x31, 0x86, 0x31, 0xA6, 0x4A, 0x69, 0x52, 0x89, 0x5B, 0x0A, 0x42, 0xA7, 0x42, 0xC7, 0x53, 0x28, 0x42, 0xC6, 0x53, 0x88, 0x6C, 0x4B, 0x4B, 0x07, 0x95, 0x6F, 0x9D, 0xD0, 0x95, 0x90, 0x95, 0xB0, 0x7C, 0xEC, 0x74, 0xCA, 0x74, 0xAA, 0x21, 0xC3, 0x19, 0x43, 0x32, 0x05, 0x11, 0x02, 0x63, 0xAB, 0x95, 0x70, 0x8D, 0x2F, 0x43, 0x06, 0x19, 0xA1, 0x32, 0x83, 0x4B, 0x85, 0x5C, 0x46, 0x54, 0x04, 0x4B, 0xA4, 0x4B, 0x85, 0x7B, 0xEF, 0x73, 0x8D, 0x73, 0x8D, 0x7B, 0xEE, 0x84, 0x0F, 0x8C, 0x4F, 0xC5, 0xF5, 0xD6, 0x35, 0xD6, 0x14, 0xD6, 0x34, 0xDE, 0x55, 0xDE, 0x76, 0xCE, 0x15, 0x9C, 0x4E, 0x93, 0xCC, 0x93, 0xCC, 0xA4, 0x6E, 0xDE, 0x55, 0xE6, 0x76, 0xDE, 0x76, 0xD6, 0x14, 0xDE, 0x55, 0xDE, 0x55, 0xDE, 0x55, 0xDE, 0x75, 0xDE, 0x75, 0xE6, 0xB6, 0xDE, 0x55, 0xDE, 0x55, 0xD6, 0x14, 0xDE, 0x76, 0xDE, 0x76, 0xE6, 0x96, 0xE6, 0xB7, 0xE6, 0xB7, 0xE6, 0x76, 0xBD, 0x31, 0xC5, 0x71, 0xD5, 0xB3, 0xD5, 0xD3, 0xD5, 0xD4, 0xC5, 0x72, 0xC5, 0x51, 0xD5, 0x72, 0xDD, 0xB2, 0xD5, 0x92, 0xD5, 0x92, 0xC5, 0x51, 0xB4, 0xF0, 0x9C, 0x8F, 0xB5, 0x52, 0xC5, 0xB3, 0xB5, 0x31, 0xA4, 0xAF, 0x94, 0x6F, 0x94, 0x4E, 0x8B, 0xEC, 0x83, 0xAB, 0x83, 0xAB, 0xA4, 0x8E, 0xB5, 0x10, 0xDE, 0x75, 0xAC, 0xEF, 0xAD, 0x0F, 0xCD, 0xF3, 0xC5, 0xD2, 0xBD, 0x91, 0xB5, 0x0F, 0xCD, 0xD2, 0xBD, 0x51, 0xAD, 0x0F, 0xC5, 0xB2, 0xBD, 0x30, 0xAC, 0xEF, 0xAC, 0xAE, 0xA4, 0x6D, 0xA4, 0x6D, 0xA4, 0x8E, 0xAC, 0xCF, 0xA4, 0xAE, 0xA4, 0x8D, 0xB4, 0xCF, 0xB4, 0xEF, 0xB4, 0xCE, 0xEE, 0x95, 0xE6, 0x54, 0xC5, 0x70, 0xBD, 0x2F, 0xCD, 0x91, 0xCD, 0x91, 0xC5, 0x51, 0xD5, 0xF4, 0xD5, 0xF4, 0xB4, 0xEF, 0x73, 0x29, 0x39, 0xC5, 0x31, 0xA5, 0x31, 0xA6, 0x42, 0x28, 0x63, 0x2C, 0x4A, 0x49, 0x5A, 0xAA, 0x8C, 0x51, 0x84, 0x31, 0xB5, 0xD7, 0xCE, 0x9B, 0xCE, 0x7B, 0xCE, 0x7A, 0xBD, 0xD8, 0xDE, 0xFC, 0xF7, 0x9E, 0xB5, 0x96, 0x7B, 0xD0, 0x5A, 0xCB, 0xA4, 0xF4, 0xBD, 0xB7, 0xA4, 0xF4, 0x9C, 0x91, 0xAD, 0x11, 0xB5, 0x10, 0xAC, 0xAE, 0xAC, 0xCF, 0xB5, 0x10, 0xBD, 0x72, 0xC5, 0xB3, 0xD5, 0xF4, 0xDE, 0x75, 0xE6, 0x96, 0xEE, 0xD6, 0xEE, 0xD7, 0xE6, 0x96, 0xC5, 0xB3, 0x9C, 0x6E, 0xAC, 0xCF, 0x7B, 0x8C, 0x52, 0x89, 0x6B, 0x8D, 0x73, 0x8D, 0x63, 0x4C, 0x7C, 0x0F, 0x7B, 0xEE, 0x84, 0x0F, 0x7B, 0xCE, 0x83, 0xEF, 0x8C, 0x30, 0x84, 0x0F, 0x84, 0x0F, 0x94, 0x91, 0x83, 0xEE, 0x5A, 0xA9, 0x42, 0x27, 0x52, 0x89, 0x83, 0xEF, 0x6B, 0x2C, 0x39, 0xA6, 0x52, 0x48, 0x8C, 0x30, 0xCE, 0x59, 0xCE, 0x59, 0x9C, 0xF4, 0x9C, 0xF3, 0xAD, 0x54, 0x8C, 0x30, 0x52, 0x89, 0x39, 0xC6, 0x31, 0xA6, 0x39, 0xE6, 0x42, 0x07, 0x39, 0xE6, 0x42, 0x27, 0x4A, 0x89, 0x4A, 0x69, 0x52, 0xAB, 0x6B, 0x8E, 0x84, 0x31, 0x94, 0xD4, 0xB5, 0x97, 0xB5, 0xB7, 0xC6, 0x39, 0xC6, 0x39, 0x63, 0x0D, 0x5A, 0xAB, 0x73, 0x8E, 0x63, 0x2C, 0x94, 0x72, 0x94, 0x92, 0x94, 0x92, 0x7B, 0xEF, 0xA4, 0xF3, 0xBD, 0xD6, 0xD6, 0x36, 0xCD, 0x52, 0xDD, 0x92, 0xD5, 0x71, 0xDD, 0xB2, 0xD5, 0xD3, 0xBD, 0x72, 0xAC, 0xF1, 0xBD, 0x74, 0xB5, 0x73, 0xBD, 0x93, 0xBD, 0x93, 0xBD, 0x73, 0xC5, 0xD4, 0xCE, 0x15, 0xCD, 0xF4, 0xCD, 0xF4, 0xD6, 0x14, 0xD5, 0xF4, 0xD5, 0xF4, 0xD5, 0xD3, 0xD6, 0x14, 0xCD, 0xD3, 0xB4, 0xF0, 0xC5, 0x72, 0xCD, 0xB3, 0xCD, 0xB3, 0xAC, 0xCF, 0xB5, 0x10, 0xC5, 0x31, 0xC5, 0x52, 0x9C, 0x6F, 0xCE, 0x15, 0xCE, 0x56, 0xBD, 0xD4, 0xB5, 0x94, 0xAD, 0x32, 0xAD, 0x32, 0xBD, 0xB4, 0xCE, 0x15, 0xD6, 0x35, 0xCD, 0xF4, 0xBD, 0x72, 0xB5, 0x11, 0xB5, 0x52, 0xAC, 0xF1, 0xB5, 0x32, 0xBD, 0x53, 0xBD, 0x53, 0xBD, 0x73, 0xB5, 0x32, 0xBD, 0x73, 0xC5, 0xB4, 0xC5, 0xD5, 0xAD, 0x32, 0xA4, 0xD1, 0xA4, 0xF1, 0xCD, 0xB4, 0xC5, 0x93, 0xDE, 0x56, 0xD6, 0x57, 0xD6, 0x57, 0xD6, 0x37, 0xCE, 0x16, 0xCE, 0x37, 0xCE, 0x58, 0xCE, 0x58, 0xCE, 0x59, 0xC6, 0x38, 0xBD, 0xD7, 0xAD, 0x55, 0xA5, 0x14, 0x8C, 0x30, 0x7B, 0xAE, 0x8C, 0x10, 0x9C, 0xB2, 0xAD, 0x33, 0xB5, 0x74, 0xB5, 0x53, 0xB5, 0x53, 0xAD, 0x53, 0xAD, 0x32, 0xA5, 0x12, 0xB5, 0x53, 0xAD, 0x53, 0xAD, 0x53, 0xB5, 0x74, 0xB5, 0x53, 0xAD, 0x33, 0xAD, 0x12, 0xA4, 0xD2, 0x94, 0x70, 0x83, 0xEF, 0x4A, 0x08, 0x94, 0x30, 0x9C, 0xB1, 0x83, 0xEF, 0x84, 0x10, 0x94, 0x71, 0x7C, 0x0E, 0x73, 0xEC, 0x5B, 0xEA, 0x6C, 0x6B, 0x53, 0xA8, 0x32, 0x44, 0x43, 0x06, 0x42, 0xC6, 0x42, 0xE6, 0x6C, 0x6A, 0x85, 0x2D, 0x8D, 0x8F, 0x95, 0xAF, 0x85, 0x2D, 0x85, 0x2C, 0x85, 0x4D, 0x3A, 0xA5, 0x42, 0x66, 0x31, 0xE5, 0x10, 0xC2, 0x19, 0x43, 0x5B, 0x8A, 0x9D, 0x70, 0x5B, 0x89, 0x32, 0x44, 0x22, 0x02, 0x32, 0xC3, 0x53, 0xC5, 0x95, 0xCC, 0x74, 0xC9, 0x3B, 0x04, 0xAD, 0x53, 0xAD, 0x53, 0xAD, 0x53, 0xAD, 0x53, 0xB5, 0x73, 0xBD, 0xB3, 0xCE, 0x15, 0xD6, 0x35, 0xD6, 0x14, 0xD6, 0x14, 0xD6, 0x55, 0xE6, 0xB7, 0xCD, 0xF5, 0x9C, 0x2E, 0xA4, 0x0D, 0xB4, 0xAF, 0xD5, 0xF4, 0xDE, 0x76, 0xDE, 0x34, 0xDE, 0x55, 0xDE, 0x55, 0xDE, 0x55, 0xE6, 0x75, 0xE6, 0x76, 0xD6, 0x14, 0xD6, 0x14, 0xE6, 0x96, 0xDE, 0x75, 0xD6, 0x34, 0xCD, 0xF3, 0xDE, 0x55, 0xE6, 0x75, 0xE6, 0x75, 0xE6, 0x75, 0xE6, 0x75, 0xE6, 0x55, 0xBD, 0x10, 0xAC, 0xAE, 0xC5, 0x10, 0xDD, 0xF4, 0xD5, 0xD3, 0xD5, 0xB3, 0xCD, 0x92, 0xD5, 0x71, 0xD5, 0x71, 0xCD, 0x51, 0xCD, 0x51, 0xCD, 0x51, 0xCD, 0x92, 0xC5, 0x92, 0xDE, 0x56, 0xCD, 0xD4, 0xB5, 0x31, 0xA4, 0xAF, 0x8B, 0xED, 0x8C, 0x0D, 0x83, 0xCC, 0x83, 0xCC, 0x8B, 0xEC, 0xA4, 0x8E, 0xB5, 0x10, 0xD6, 0x55, 0xB5, 0x71, 0xBD, 0x91, 0xC6, 0x12, 0xC6, 0x32, 0xCE, 0x74, 0xAD, 0x50, 0xD6, 0x95, 0xD6, 0x94, 0xD6, 0xD5, 0xDE, 0xB5, 0xB5, 0x30, 0xB5, 0x30, 0xB5, 0x31, 0xA4, 0xEF, 0x9C, 0xAE, 0xB5, 0x51, 0xC5, 0xB2, 0xA4, 0xCF, 0xB5, 0x10, 0xBD, 0x50, 0xAC, 0xCE, 0xAC, 0xAD, 0xE6, 0x75, 0xDE, 0x33, 0xCD, 0xD2, 0xB5, 0x0F, 0xA4, 0x8E, 0xAC, 0xCE, 0x9C, 0x6D, 0xA4, 0x6E, 0xD5, 0xF3, 0xDE, 0x13, 0xDE, 0x13, 0xAC, 0xCF, 0x5A, 0x88, 0x31, 0x85, 0x39, 0xE7, 0x52, 0x8A, 0x42, 0x07, 0x42, 0x28, 0x63, 0x0C, 0x7B, 0xEF, 0x8C, 0x92, 0xA5, 0x35, 0xBD, 0xF8, 0xCE, 0x9B, 0xCE, 0x5A, 0xBD, 0xF8, 0xBD, 0xF8, 0x94, 0x93, 0xC5, 0xF8, 0x8C, 0x72, 0xA5, 0x35, 0xEF, 0x3D, 0xD6, 0x9A, 0x9C, 0xB3, 0x8C, 0x0F, 0xB5, 0x32, 0xC5, 0x72, 0xBD, 0x51, 0xAC, 0xAF, 0xA4, 0x8F, 0x94, 0x2D, 0x8B, 0xEC, 0x8B, 0xEB, 0x8B, 0xCB, 0x8B, 0xCC, 0x94, 0x0C, 0x9C, 0x4D, 0x94, 0x2D, 0x9C, 0x4D, 0xAC, 0xAF, 0xAC, 0xAF, 0x7B, 0xAC, 0x7B, 0x8D, 0x6B, 0x0B, 0x63, 0x0B, 0x73, 0xAE, 0x6B, 0x6D, 0x6B, 0x4C, 0x6B, 0x2C, 0x73, 0xAD, 0x7B, 0xEE, 0x7B, 0xCE, 0x84, 0x0F, 0x94, 0xB1, 0xA4, 0xF2, 0x94, 0xB1, 0x6B, 0x4C, 0x4A, 0x28, 0x4A, 0x48, 0x5A, 0xAA, 0x4A, 0x28, 0x62, 0xEB, 0x73, 0x8E, 0xAD, 0x75, 0xC5, 0xF8, 0xBD, 0xB7, 0x9C, 0xD3, 0x7B, 0xCF, 0x73, 0x6D, 0x6B, 0x6C, 0x4A, 0x48, 0x31, 0xC6, 0x39, 0xE7, 0x42, 0x07, 0x42, 0x27, 0x39, 0xE7, 0x4A, 0x69, 0x52, 0xCB, 0x63, 0x2C, 0x6B, 0x6E, 0x7B, 0xD0, 0x9C, 0xD4, 0x9D, 0x15, 0xA5, 0x36, 0xB5, 0xB8, 0xC6, 0x19, 0x9C, 0xD4, 0x73, 0x8F, 0x7B, 0xAE, 0x9C, 0xD2, 0xA4, 0xF3, 0xAD, 0x55, 0x9C, 0xD3, 0x9C, 0xB3, 0xA5, 0x14, 0x7B, 0xAE, 0x73, 0x6D, 0x8B, 0xEE, 0xBD, 0x11, 0xAC, 0x8E, 0xCD, 0x51, 0xCD, 0x92, 0xBD, 0x51, 0xAC, 0xF1, 0xB5, 0x32, 0xBD, 0xB4, 0xC5, 0xD5, 0xC5, 0xB4, 0xC5, 0xB4, 0xB5, 0x72, 0xBD, 0x93, 0xC5, 0xB3, 0xC5, 0xB3, 0xD6, 0x14, 0xBD, 0x72, 0x83, 0x8B, 0xBD, 0x51, 0xCD, 0xB2, 0xDE, 0x35, 0xC5, 0x93, 0xDE, 0x35, 0xD6, 0x14, 0xDE, 0x35, 0xC5, 0x51, 0xBD, 0x30, 0xC5, 0x72, 0xD6, 0x14, 0xA4, 0xB0, 0xD6, 0x56, 0xCE, 0x16, 0xBD, 0xD4, 0xC6, 0x36, 0xCE, 0x57, 0xC5, 0xD4, 0xBD, 0xB4, 0xBD, 0xB4, 0xD6, 0x56, 0xDE, 0xB7, 0xD6, 0x56, 0xCE, 0x15, 0xBD, 0x93, 0xB5, 0x52, 0xB5, 0x72, 0xB5, 0x73, 0xD6, 0x56, 0xCE, 0x15, 0xBD, 0x93, 0xBD, 0xB3, 0xBD, 0x93, 0xC5, 0xF4, 0xD6, 0x56, 0x9C, 0x90, 0xAD, 0x12, 0xDE, 0x15, 0xD5, 0x52, 0xE6, 0x35, 0xD6, 0x16, 0xBD, 0x94, 0xB5, 0x54, 0xB5, 0x95, 0xAD, 0x54, 0x94, 0x71, 0x73, 0xAE, 0x7B, 0x8E, 0x94, 0x51, 0x9C, 0xB2, 0x9C, 0xD2, 0x9C, 0x91, 0xBD, 0x74, 0xD6, 0x36, 0xE6, 0x57, 0xE6, 0x77, 0xE6, 0x97, 0xE6, 0xB7, 0xE6, 0xD8, 0xEE, 0xF8, 0xAD, 0x32, 0xAD, 0x32, 0xBD, 0x94, 0xBD, 0xB3, 0xC5, 0xB4, 0xC5, 0xD4, 0xC5, 0xD4, 0xBD, 0x94, 0xB5, 0x53, 0xB5, 0x73, 0xB5, 0x54, 0xDE, 0x99, 0xC5, 0xD6, 0x7B, 0x6D, 0xC5, 0x95, 0x9C, 0x91, 0x62, 0xEB, 0x84, 0x10, 0x9C, 0xB2, 0x7B, 0xCD, 0x7C, 0x8E, 0x74, 0xAC, 0x6C, 0x6B, 0x32, 0x85, 0x21, 0x82, 0x3A, 0x86, 0x11, 0x21, 0x4B, 0x27, 0x6C, 0x8A, 0x85, 0x4D, 0x95, 0xB0, 0x8D, 0x6F, 0x85, 0x2D, 0x85, 0x2D, 0x7C, 0xEC, 0x21, 0xE3, 0x53, 0x29, 0x29, 0xA3, 0x10, 0xE2, 0x19, 0x23, 0x3A, 0x26, 0x63, 0xAB, 0x4A, 0xE8, 0x32, 0x25, 0x42, 0xC6, 0x43, 0x06, 0x53, 0xC7, 0x74, 0xCA, 0x53, 0xC6, 0x3B, 0x25, 0xB5, 0x73, 0xC5, 0xF5, 0xCE, 0x16, 0xCE, 0x36, 0xD6, 0x56, 0xD6, 0x56, 0xDE, 0x55, 0xDE, 0x55, 0xDE, 0x55, 0xDE, 0x55, 0xDE, 0x76, 0xD6, 0x35, 0xB5, 0x31, 0xAC, 0x8F, 0xCD, 0x11, 0xDD, 0x93, 0xDD, 0xF4, 0xE6, 0x76, 0xDE, 0x34, 0xDE, 0x35, 0xDE, 0x55, 0xDE, 0x35, 0xDE, 0x55, 0xDE, 0x55, 0xDE, 0x35, 0xDE, 0x34, 0xE6, 0x96, 0xE6, 0x75, 0xDE, 0x55, 0xDE, 0x34, 0xDE, 0x55, 0xDE, 0x55, 0xE6, 0x75, 0xE6, 0x75, 0xE6, 0x75, 0xE6, 0x55, 0xAC, 0x8E, 0xA4, 0x2C, 0xA4, 0x4D, 0xCD, 0x92, 0xDD, 0xF4, 0xD5, 0xD3, 0xCD, 0x51, 0xCD, 0x51, 0xC5, 0x0F, 0xBC, 0xCF, 0xBC, 0xCF, 0xB4, 0xAF, 0xBD, 0x30, 0xC5, 0x92, 0xCD, 0xF4, 0xCD, 0xD3, 0xAC, 0xF0, 0xA4, 0xCF, 0x8C, 0x2E, 0x8C, 0x0D, 0x8C, 0x0D, 0x83, 0xCC, 0x94, 0x4E, 0xAC, 0xF0, 0xB5, 0x30, 0xCE, 0x14, 0xB5, 0x30, 0xBD, 0xB2, 0xBE, 0x32, 0xBE, 0x32, 0xC6, 0x53, 0xBE, 0x33, 0xCE, 0xB4, 0xD6, 0xF5, 0xDF, 0x36, 0xC6, 0x33, 0xC5, 0xD3, 0xBD, 0xB3, 0xC5, 0xD3, 0xBD, 0xB3, 0xBD, 0xB3, 0xC5, 0xF4, 0xCD, 0xF4, 0xAC, 0xEF, 0xBD, 0x51, 0xAC, 0xCF, 0xAC, 0xAE, 0xAC, 0xCE, 0xEE, 0xB5, 0xE6, 0x75, 0xE6, 0x95, 0xEE, 0xD6, 0xD6, 0x14, 0xB5, 0x30, 0xA4, 0xAF, 0xAC, 0xD0, 0xD5, 0xF3, 0xDE, 0x12, 0xD5, 0xF3, 0xD5, 0xF2, 0xCD, 0xD2, 0x9C, 0x8E, 0x52, 0x67, 0x31, 0x85, 0x21, 0x24, 0x31, 0x85, 0x3A, 0x07, 0x4A, 0x69, 0x5A, 0xEB, 0x73, 0xAE, 0x84, 0x31, 0x84, 0x31, 0xAD, 0x76, 0xC6, 0x39, 0xC6, 0x39, 0x94, 0x93, 0xAD, 0x56, 0x83, 0xF0, 0xBD, 0xF8, 0xEF, 0x5D, 0xD6, 0x9A, 0xE7, 0x1C, 0xBD, 0xD7, 0x73, 0x6D, 0x94, 0x4F, 0xAC, 0xF1, 0x9C, 0x4E, 0x94, 0x2D, 0xA4, 0x8F, 0xAC, 0xCF, 0xB5, 0x30, 0xBD, 0x31, 0xB5, 0x10, 0xB4, 0xEF, 0xAC, 0xAF, 0xAC, 0xCF, 0xB4, 0xF0, 0xAC, 0xCF, 0xB4, 0xF0, 0xB5, 0x10, 0xAC, 0xAF, 0xA4, 0x6F, 0x9C, 0x6F, 0x9C, 0x6F, 0x94, 0x2E, 0x94, 0x2E, 0x8B, 0xED, 0x8B, 0xED, 0x83, 0xED, 0x83, 0xEE, 0x83, 0xCD, 0x7B, 0xAD, 0x83, 0xCD, 0x7B, 0xCD, 0x83, 0xEE, 0x63, 0x0A, 0x41, 0xE7, 0x52, 0x69, 0x4A, 0x28, 0x52, 0x89, 0x62, 0xEB, 0x84, 0x30, 0xAD, 0x76, 0xB5, 0x76, 0x8C, 0x31, 0x73, 0x8E, 0x73, 0x6D, 0x6B, 0x4D, 0x63, 0x0B, 0x39, 0xC6, 0x42, 0x07, 0x39, 0xC6, 0x31, 0xA6, 0x3A, 0x07, 0x4A, 0x48, 0x4A, 0x48, 0x5A, 0xCB, 0x52, 0x8A, 0x5A, 0xEC, 0x84, 0x52, 0x94, 0xD4, 0x9C, 0xF5, 0xAD, 0x97, 0xCE, 0x5A, 0xD6, 0x7A, 0x9C, 0xB3, 0x73, 0x8E, 0x73, 0x8E, 0xB5, 0x96, 0xBD, 0xB7, 0xC5, 0xF8, 0xBD, 0xD7, 0xC5, 0xF8, 0xAD, 0x55, 0xA5, 0x14, 0xBD, 0xB6, 0xC5, 0xD6, 0xA4, 0x90, 0xC5, 0x32, 0xC5, 0x51, 0xBD, 0x52, 0xAD, 0x12, 0xB5, 0x53, 0xC5, 0xD4, 0xC5, 0x93, 0xB5, 0x11, 0xC5, 0x93, 0xC5, 0xB3, 0xBD, 0x52, 0xC5, 0x93, 0xC5, 0xB3, 0xD6, 0x35, 0xB5, 0x11, 0xAC, 0xD0, 0xC5, 0x72, 0xC5, 0x92, 0xCD, 0xB2, 0xDE, 0x35, 0xD6, 0x14, 0xD5, 0xF4, 0xD6, 0x14, 0xC5, 0x52, 0xC5, 0x71, 0xC5, 0x51, 0xAC, 0xAF, 0xAC, 0xD0, 0xD6, 0x56, 0xC5, 0xF4, 0xBD, 0xD4, 0xC5, 0xF5, 0xC6, 0x15, 0xBD, 0xD4, 0xC6, 0x15, 0xC5, 0xF4, 0xC5, 0xD4, 0xD6, 0x76, 0xDE, 0x96, 0xDE, 0xB7, 0xDE, 0xB7, 0xCE, 0x56, 0xDE, 0x97, 0xDE, 0x97, 0xCE, 0x36, 0xC5, 0xF5, 0xCE, 0x15, 0xCE, 0x15, 0xCE, 0x35, 0xD6, 0x56, 0xD6, 0x76, 0xA4, 0xD1, 0xB5, 0x32, 0xDD, 0xD4, 0xDD, 0x72, 0xDD, 0xD4, 0x8B, 0xAE, 0x73, 0x4D, 0x62, 0xCA, 0x73, 0x4B, 0x83, 0x8C, 0x9C, 0x2F, 0xD6, 0x57, 0xE6, 0xF9, 0xE6, 0xD9, 0xDE, 0x97, 0xE6, 0xB8, 0xE6, 0x97, 0xDE, 0x36, 0xE6, 0x35, 0xDD, 0xF4, 0xDD, 0xD4, 0xDD, 0xD4, 0xDE, 0x15, 0xDE, 0x56, 0xEF, 0x19, 0x9C, 0x90, 0xAD, 0x33, 0xCE, 0x15, 0xC5, 0xD4, 0xC5, 0xD4, 0xCD, 0xF4, 0xD6, 0x15, 0xD6, 0x15, 0xD6, 0x36, 0xD6, 0x37, 0xBD, 0x95, 0xEF, 0x3B, 0xB5, 0x75, 0x9C, 0x91, 0xCD, 0xD5, 0xA4, 0x91, 0x52, 0x49, 0x73, 0x4D, 0x8C, 0x2F, 0x84, 0x2E, 0x74, 0x4C, 0x64, 0x2A, 0x4B, 0x47, 0x19, 0x42, 0x19, 0x63, 0x32, 0x25, 0x19, 0x42, 0x53, 0x69, 0x85, 0x4E, 0x9D, 0xD0, 0x95, 0xD0, 0x8D, 0x4E, 0x85, 0x2C, 0x74, 0xCB, 0x43, 0x05, 0x2A, 0x04, 0x5B, 0x69, 0x29, 0xE4, 0x31, 0xE5, 0x42, 0x67, 0x4A, 0xE8, 0x6B, 0xEB, 0x5B, 0x69, 0x3A, 0x66, 0x4A, 0xE7, 0x5B, 0xA9, 0x85, 0x0E, 0x7D, 0x0C, 0x6C, 0x69, 0x4B, 0xA6, 0x73, 0x6B, 0x83, 0xED, 0x9C, 0x6F, 0xA4, 0xD1, 0xAC, 0xF1, 0xB5, 0x32, 0xBD, 0x72, 0xC5, 0xB3, 0xC5, 0xB3, 0xBD, 0x72, 0xC5, 0xB3, 0x9C, 0x6E, 0x9C, 0x4E, 0xA4, 0x4E, 0xD5, 0x31, 0xE5, 0xD4, 0xDD, 0xF4, 0xDE, 0x14, 0xDE, 0x34, 0xE6, 0x55, 0xE6, 0x96, 0xE6, 0x75, 0xE6, 0x96, 0xDE, 0x34, 0xDE, 0x14, 0xDE, 0x14, 0xDE, 0x55, 0xDE, 0x55, 0xE6, 0x55, 0xC5, 0x71, 0xDE, 0x14, 0xE6, 0x55, 0xE6, 0x55, 0xE6, 0x75, 0xE6, 0x75, 0xE6, 0x55, 0xAC, 0xAE, 0x9C, 0x2C, 0x8B, 0xAB, 0xAC, 0xAE, 0xA4, 0x6E, 0xB4, 0xAF, 0xB4, 0xCF, 0xBC, 0xCF, 0xC5, 0x0F, 0xC5, 0x0F, 0xBC, 0xCF, 0xB4, 0xCF, 0xB5, 0x10, 0xCD, 0xD3, 0xD6, 0x35, 0xBD, 0x72, 0xAC, 0xF0, 0xA4, 0xD0, 0xA4, 0xB0, 0x9C, 0x8F, 0x94, 0x4E, 0x83, 0xCD, 0xA4, 0xD0, 0xBD, 0x72, 0xBD, 0x71, 0xCE, 0x14, 0xAC, 0xEF, 0xBD, 0x92, 0xC6, 0x54, 0xC6, 0x73, 0xC6, 0x93, 0xC6, 0x73, 0xBE, 0x53, 0xDF, 0x36, 0xD6, 0xD5, 0xAD, 0x71, 0xC5, 0xD3, 0xCE, 0x35, 0xCE, 0x35, 0xBD, 0xB3, 0xCE, 0x14, 0xCE, 0x35, 0xD6, 0x76, 0xB5, 0x51, 0xC5, 0xB2, 0xAC, 0xEF, 0xA4, 0xAE, 0xB4, 0xEF, 0xEE, 0xD6, 0xDE, 0x74, 0xDE, 0x74, 0xDE, 0x74, 0xDE, 0x55, 0xBD, 0x51, 0xC5, 0xB2, 0xCE, 0x14, 0xD6, 0x33, 0xDE, 0x74, 0xDE, 0x74, 0xDE, 0x74, 0xD6, 0x54, 0xDE, 0x74, 0xC5, 0xF3, 0x8C, 0x0C, 0x41, 0xE6, 0x29, 0x64, 0x29, 0x44, 0x31, 0x85, 0x39, 0xC6, 0x42, 0x28, 0x4A, 0x69, 0x5A, 0xEB, 0x7B, 0xF0, 0x94, 0xB3, 0xAD, 0x55, 0x94, 0xB3, 0x5A, 0xCB, 0x8C, 0x31, 0xC6, 0x18, 0xC6, 0x39, 0x84, 0x10, 0xDE, 0xDB, 0xE7, 0x1C, 0xD6, 0x7A, 0xB5, 0xB6, 0xCE, 0x79, 0x8C, 0x0F, 0x5A, 0xA9, 0x62, 0xE9, 0x8B, 0xEC, 0xB4, 0xEF, 0xC5, 0x92, 0xC5, 0x72, 0xB5, 0x31, 0xA4, 0xAF, 0xBD, 0x71, 0xCD, 0xD3, 0xBD, 0x51, 0xB5, 0x10, 0xBD, 0x51, 0xBD, 0x51, 0xBD, 0x51, 0xBD, 0x30, 0xBD, 0x30, 0xB5, 0x10, 0xB5, 0x10, 0xB4, 0xF0, 0xB4, 0xF0, 0xAC, 0xD0, 0xB4, 0xF0, 0xB5, 0x10, 0xB5, 0x10, 0xAC, 0xAF, 0xA4, 0x8F, 0xAC, 0xF0, 0xA4, 0xD0, 0x8B, 0xED, 0x42, 0x06, 0x39, 0xC6, 0x42, 0x07, 0x52, 0x68, 0x5A, 0xEB, 0x7B, 0xCF, 0x94, 0x92, 0x6B, 0x6D, 0x7B, 0xCF, 0x8C, 0x71, 0x84, 0x0F, 0x9C, 0x91, 0x52, 0x89, 0x39, 0xE7, 0x39, 0xE6, 0x31, 0xA5, 0x3A, 0x07, 0x42, 0x07, 0x42, 0x28, 0x52, 0xAA, 0x52, 0x8A, 0x63, 0x0C, 0x73, 0xD0, 0x84, 0x32, 0x94, 0xB4, 0x9C, 0xD4, 0xBD, 0xF8, 0xAD, 0x76, 0xB5, 0xB7, 0x94, 0x92, 0xAD, 0x55, 0xC5, 0xF8, 0xC6, 0x18, 0xBD, 0xB7, 0xB5, 0x56, 0xB5, 0x97, 0xBD, 0xB7, 0xA4, 0xF4, 0xCE, 0x39, 0xEE, 0xFB, 0xDE, 0x79, 0xCD, 0xD5, 0xC5, 0x73, 0xB5, 0x31, 0xAC, 0xD1, 0x94, 0x4F, 0xBD, 0x93, 0xC5, 0x93, 0xCD, 0xD3, 0xD5, 0xF4, 0xD6, 0x14, 0xCD, 0xB3, 0xCD, 0xB3, 0xD5, 0xF4, 0xDE, 0x55, 0xC5, 0xB3, 0xBD, 0x51, 0xBD, 0x31, 0xC5, 0x51, 0xCD, 0xB3, 0xDE, 0x55, 0xDE, 0x35, 0xDE, 0x34, 0xDE, 0x55, 0xCD, 0x92, 0xCD, 0x92, 0xBD, 0x30, 0xB4, 0xF0, 0xAC, 0xD0, 0xD6, 0x56, 0xC6, 0x15, 0xC5, 0xF5, 0xC6, 0x36, 0xC6, 0x15, 0xBD, 0xD4, 0xCE, 0x36, 0xCE, 0x35, 0xC5, 0xD4, 0xCE, 0x35, 0xD6, 0x96, 0xDE, 0x96, 0xDE, 0x96, 0xD6, 0x76, 0xCE, 0x35, 0xCE, 0x14, 0xC6, 0x14, 0xCE, 0x56, 0xCE, 0x56, 0xCE, 0x15, 0xCE, 0x35, 0xCE, 0x56, 0xCE, 0x35, 0xA4, 0xB0, 0xAC, 0xD1, 0xE5, 0xF4, 0xED, 0xD3, 0xE5, 0xF4, 0xCD, 0x52, 0xC5, 0x32, 0xDD, 0x93, 0xDD, 0xB2, 0xDD, 0x51, 0xE6, 0x14, 0xF6, 0xF9, 0xE6, 0xD8, 0xE6, 0xF9, 0xE6, 0xB8, 0xE6, 0xB7, 0xE6, 0xB7, 0xE6, 0x76, 0xE6, 0x14, 0xE5, 0xB3, 0xE5, 0xB2, 0xE5, 0xB3, 0xDD, 0xB3, 0xE6, 0x55, 0xEF, 0x19, 0x94, 0x90, 0xBD, 0x94, 0xCE, 0x15, 0xBD, 0x93, 0xB5, 0x73, 0xC5, 0xD4, 0xD6, 0x35, 0xDE, 0x97, 0xE6, 0xD9, 0xBD, 0x75, 0x94, 0x51, 0x9C, 0x91, 0xAD, 0x34, 0xD5, 0xF7, 0xB5, 0x13, 0x7B, 0x4C, 0x52, 0x49, 0x5A, 0xAA, 0x73, 0x8C, 0x84, 0x6E, 0x6C, 0x2B, 0x42, 0xE6, 0x19, 0x62, 0x10, 0xE2, 0x19, 0x23, 0x21, 0x84, 0x19, 0x42, 0x4B, 0x48, 0x7C, 0xED, 0x9D, 0xF1, 0x8D, 0x90, 0x95, 0x8F, 0x85, 0x4D, 0x53, 0xC8, 0x22, 0x03, 0x4B, 0x07, 0x63, 0xEA, 0x19, 0x62, 0x19, 0x42, 0x3A, 0x65, 0x42, 0xC6, 0x63, 0xC9, 0x95, 0x70, 0x53, 0x68, 0x63, 0xEA, 0x84, 0xED, 0x95, 0x90, 0x7C, 0xEC, 0x7D, 0x0C, 0x95, 0xAF, 0x7B, 0x6C, 0x73, 0x4B, 0x73, 0x6B, 0x7B, 0x8C, 0x83, 0xAC, 0x83, 0xCD, 0x83, 0xCD, 0x8B, 0xED, 0x8B, 0xED, 0x94, 0x0D, 0x94, 0x2E, 0x9C, 0x6E, 0xA4, 0x6F, 0xA4, 0x8F, 0xA4, 0x2D, 0xA4, 0x2E, 0xA4, 0x6E, 0xA4, 0x6E, 0xA4, 0x6E, 0xA4, 0x6E, 0xA4, 0x6E, 0xA4, 0x8E, 0xAC, 0xAF, 0xA4, 0x8E, 0xAC, 0xCF, 0xAC, 0xAE, 0xBD, 0x30, 0xCD, 0x92, 0xCD, 0xB2, 0xBD, 0x30, 0xD5, 0xF3, 0xDE, 0x34, 0xDE, 0x54, 0xE6, 0x55, 0xEE, 0x76, 0xEE, 0x75, 0xB4, 0xEF, 0xA4, 0x4D, 0x9C, 0x2C, 0xBD, 0x31, 0xA4, 0x4E, 0xB5, 0x10, 0xCD, 0xB3, 0xC5, 0x30, 0xCD, 0x51, 0xB4, 0xCF, 0xAC, 0x8F, 0xA4, 0x6E, 0x94, 0x0D, 0xAC, 0xF0, 0xB5, 0x31, 0xA4, 0xCF, 0x94, 0x6E, 0x83, 0xED, 0x8C, 0x2E, 0x8C, 0x0D, 0x8B, 0xED, 0x73, 0x6B, 0xA4, 0xD0, 0x9C, 0x8E, 0xB5, 0x51, 0xD6, 0x75, 0xB5, 0x71, 0xBD, 0xB3, 0xCE, 0x75, 0xC6, 0x74, 0xC6, 0x74, 0xC6, 0x54, 0xC6, 0x54, 0xD6, 0xD6, 0xC6, 0x34, 0xBD, 0xD3, 0xBD, 0xB3, 0xC5, 0xF4, 0xC5, 0xD4, 0xC5, 0xF4, 0xC5, 0xF4, 0xC6, 0x14, 0xCE, 0x35, 0xB5, 0x51, 0xBD, 0xB2, 0xAC, 0xEF, 0xB4, 0xEF, 0xAC, 0xCE, 0xE6, 0x95, 0xDE, 0x54, 0xDE, 0x54, 0xDE, 0x54, 0xDE, 0x54, 0xCD, 0xB3, 0xCD, 0xD3, 0xD6, 0x34, 0xDE, 0x34, 0xDE, 0x54, 0xDE, 0x74, 0xE6, 0xB5, 0xDE, 0x94, 0xD6, 0x94, 0xCE, 0x33, 0xCD, 0xF3, 0xC5, 0xD3, 0x94, 0xCF, 0x52, 0xA8, 0x29, 0x64, 0x29, 0x65, 0x31, 0xA6, 0x31, 0xA6, 0x39, 0xE7, 0x52, 0xAA, 0x63, 0x4D, 0x73, 0x8E, 0x73, 0xAE, 0x6B, 0x4D, 0x8C, 0x52, 0x73, 0xAF, 0xAD, 0x76, 0x9C, 0xF4, 0xC6, 0x39, 0xEF, 0x3D, 0xCE, 0x59, 0xC6, 0x18, 0xD6, 0xBA, 0x94, 0x51, 0x94, 0x90, 0x7B, 0xAC, 0x8C, 0x0D, 0xB5, 0x0F, 0xA4, 0xAE, 0x94, 0x2D, 0x94, 0x2E, 0x94, 0x6E, 0xB5, 0x31, 0xBD, 0x92, 0xBD, 0x72, 0xBD, 0x72, 0xC5, 0x93, 0xC5, 0x93, 0xCD, 0xD3, 0xC5, 0xB3, 0xC5, 0xD3, 0xC5, 0xB3, 0xCD, 0xD3, 0xC5, 0xD3, 0xC5, 0xB3, 0xC5, 0x72, 0xB5, 0x11, 0x94, 0x4E, 0x7B, 0x6B, 0x8B, 0xED, 0x83, 0xAC, 0xA4, 0xB0, 0xBD, 0x52, 0xA4, 0xB0, 0x73, 0x6B, 0x7B, 0xAD, 0x6B, 0x4B, 0x41, 0xE6, 0x4A, 0x48, 0x42, 0x28, 0x5A, 0xEB, 0x62, 0xEB, 0x52, 0xAA, 0x63, 0x2C, 0x6B, 0x4D, 0x8C, 0x30, 0x94, 0x91, 0x4A, 0x48, 0x39, 0xC6, 0x31, 0xA6, 0x39, 0xE7, 0x4A, 0x48, 0x4A, 0x68, 0x42, 0x07, 0x5A, 0xCB, 0x5A, 0xCB, 0x6B, 0x6E, 0x7B, 0xF0, 0x84, 0x32, 0x94, 0x93, 0xA4, 0xF5, 0x9C, 0xD4, 0xB5, 0x96, 0xC5, 0xF8, 0xA4, 0xF4, 0xB5, 0x76, 0xC5, 0xF8, 0xBD, 0xD7, 0xE6, 0xFB, 0xD6, 0x7A, 0xE6, 0xFC, 0xB5, 0x97, 0xAD, 0x35, 0xC5, 0xD7, 0xD6, 0x79, 0xDE, 0xBA, 0xD6, 0x38, 0xA4, 0xD2, 0xC5, 0xD5, 0xB5, 0x32, 0xCD, 0xF5, 0xE6, 0xB7, 0xE6, 0x76, 0xDE, 0x55, 0xE6, 0x96, 0xDE, 0x55, 0xDE, 0x55, 0xE6, 0x76, 0xE6, 0x96, 0xDE, 0x55, 0xD5, 0xD3, 0xDE, 0x14, 0xDE, 0x14, 0xDE, 0x55, 0xEE, 0xB6, 0xDE, 0x75, 0xDE, 0x55, 0xEE, 0x96, 0xD5, 0xF3, 0xD5, 0xB2, 0xAC, 0x8E, 0xAC, 0x8E, 0xAC, 0xF0, 0xD6, 0x56, 0xCE, 0x35, 0xC6, 0x15, 0xCE, 0x36, 0xCE, 0x36, 0xCE, 0x36, 0xCE, 0x56, 0xD6, 0x76, 0xBD, 0xD4, 0xCE, 0x15, 0xD6, 0x55, 0xD6, 0x55, 0xD6, 0x56, 0xD6, 0x55, 0xCE, 0x14, 0xCE, 0x15, 0xCE, 0x15, 0xD6, 0x56, 0xD6, 0x76, 0xD6, 0x56, 0xCE, 0x56, 0xCE, 0x35, 0xCE, 0x35, 0xA4, 0xD1, 0xA4, 0xB0, 0xEE, 0x35, 0xED, 0xD3, 0xF6, 0x35, 0xEE, 0x35, 0xEE, 0x15, 0xEE, 0x14, 0xED, 0xF4, 0xED, 0xD3, 0xEE, 0x76, 0xEE, 0xD8, 0xE6, 0xD8, 0xDE, 0xB7, 0xE6, 0xB8, 0xE6, 0xB7, 0xE6, 0x97, 0xE6, 0x56, 0xE5, 0xD3, 0xDD, 0x51, 0xDD, 0x71, 0xE5, 0x92, 0xE5, 0x92, 0xE6, 0x35, 0xEE, 0xF9, 0x9C, 0xB1, 0xC5, 0xD5, 0xC5, 0xF5, 0xC5, 0xB4, 0xCE, 0x36, 0xE6, 0xD8, 0xC5, 0xD5, 0xB5, 0x74, 0xBD, 0x96, 0xB5, 0x55, 0x8B, 0xF0, 0xBD, 0x75, 0xCD, 0xF7, 0xDE, 0x58, 0x9C, 0x0F, 0x83, 0x2C, 0x5A, 0x49, 0x52, 0x48, 0x52, 0x88, 0x6C, 0x0B, 0x4B, 0x27, 0x5B, 0x4A, 0x32, 0x06, 0x10, 0xE2, 0x11, 0x02, 0x19, 0x02, 0x19, 0x43, 0x5B, 0xCA, 0x74, 0x8C, 0x6C, 0x8B, 0x6C, 0xAC, 0x8D, 0x6E, 0x8D, 0x8F, 0x53, 0x87, 0x53, 0x89, 0x8D, 0x2F, 0x53, 0x88, 0x32, 0x65, 0x3A, 0xA5, 0x5B, 0xC8, 0x64, 0x09, 0x7D, 0x0D, 0xB6, 0x93, 0x74, 0x8B, 0x64, 0x09, 0x74, 0x8C, 0x9D, 0xB0, 0x95, 0x4F, 0x64, 0x2A, 0xAE, 0x93, 0x73, 0x2B, 0x7B, 0x8C, 0x7B, 0x6C, 0x83, 0xAC, 0x8C, 0x2E, 0x94, 0x4F, 0x8C, 0x0E, 0x9C, 0x8F, 0x9C, 0x6F, 0x9C, 0x6F, 0x8C, 0x2D, 0x94, 0x2E, 0xA4, 0xD0, 0xB5, 0x11, 0xA4, 0x8F, 0xAC, 0xF0, 0xA4, 0xAF, 0xA4, 0x6E, 0xA4, 0x6E, 0xA4, 0x8E, 0x94, 0x0C, 0x8B, 0xCB, 0x8B, 0xAB, 0x83, 0x8A, 0x8B, 0xAB, 0x8B, 0xCB, 0x9C, 0x0C, 0x9C, 0x2C, 0x94, 0x0C, 0x94, 0x0C, 0x94, 0x0C, 0x9C, 0x2C, 0xA4, 0x6D, 0xA4, 0x8E, 0xAC, 0xAE, 0xB4, 0xCF, 0xAC, 0xCE, 0xAC, 0x8E, 0xA4, 0x6D, 0xB4, 0xCF, 0xAC, 0xD0, 0xB4, 0xF0, 0xB5, 0x10, 0xAC, 0xCF, 0xAC, 0xAE, 0x9C, 0x2D, 0x94, 0x0D, 0x83, 0xAB, 0x83, 0xAB, 0xA4, 0xD0, 0xA4, 0xCF, 0x94, 0x2D, 0x7B, 0x8B, 0x6B, 0x2A, 0x6B, 0x2B, 0x6B, 0x4A, 0x73, 0x4B, 0x73, 0x4A, 0xA4, 0xB0, 0xAC, 0xF0, 0xB5, 0x30, 0xD6, 0x55, 0xBD, 0x92, 0xC6, 0x35, 0xD6, 0x96, 0xCE, 0x75, 0xCE, 0x95, 0xC6, 0x75, 0xC6, 0x54, 0xCE, 0x75, 0xC6, 0x14, 0xB5, 0x72, 0xC5, 0xF4, 0xC6, 0x14, 0xC5, 0xD4, 0xCE, 0x14, 0xCE, 0x14, 0xCE, 0x14, 0xCE, 0x55, 0xB5, 0x72, 0x9C, 0x6E, 0x9C, 0x4D, 0xB4, 0xEF, 0xB5, 0x30, 0xE6, 0x95, 0xDE, 0x53, 0xE6, 0x74, 0xE6, 0xB5, 0xE6, 0x95, 0xCD, 0xF3, 0xCD, 0xF4, 0xD6, 0x34, 0xDE, 0x54, 0xDE, 0x54, 0xC5, 0xF1, 0xBD, 0xD1, 0xC6, 0x12, 0xD6, 0xB4, 0xD6, 0xB4, 0xC6, 0x33, 0xBD, 0xF2, 0xD6, 0xB5, 0xBD, 0xD2, 0x8C, 0x4D, 0x4A, 0x67, 0x31, 0x85, 0x31, 0xA5, 0x42, 0x28, 0x39, 0xE7, 0x42, 0x28, 0x52, 0x89, 0x52, 0xAA, 0x63, 0x2C, 0x6B, 0x4D, 0x6B, 0x4D, 0x8C, 0x52, 0xA5, 0x35, 0xB5, 0xB7, 0xD6, 0x9B, 0xB5, 0x96, 0xB5, 0xB6, 0x83, 0xF0, 0x8C, 0x51, 0xBD, 0xD7, 0x8C, 0x50, 0x94, 0x4F, 0xA4, 0x8F, 0x8C, 0x0D, 0x8C, 0x2E, 0x94, 0x90, 0xAD, 0x32, 0xB5, 0x72, 0xAD, 0x52, 0xBD, 0x93, 0xAD, 0x32, 0xB5, 0x73, 0xBD, 0xB3, 0xC5, 0xD4, 0xCE, 0x15, 0xCE, 0x15, 0xCE, 0x15, 0xCE, 0x15, 0xCE, 0x15, 0xC5, 0xD4, 0xCD, 0xF5, 0xC5, 0xD4, 0xBD, 0xB5, 0x9C, 0xF2, 0xA4, 0xF2, 0xAD, 0x53, 0x94, 0x4F, 0xB5, 0x32, 0xAD, 0x32, 0xB5, 0x73, 0xBD, 0x93, 0xB5, 0x73, 0x8C, 0x2E, 0x52, 0x68, 0x4A, 0x48, 0x8C, 0x51, 0x94, 0x91, 0x5A, 0xEB, 0x5A, 0xAA, 0x8C, 0x51, 0x73, 0x6D, 0x62, 0xEA, 0x52, 0x89, 0x4A, 0x28, 0x42, 0x07, 0x39, 0xE7, 0x3A, 0x07, 0x4A, 0x48, 0x42, 0x07, 0x4A, 0x49, 0x4A, 0x49, 0x52, 0xAB, 0x63, 0x0C, 0x7B, 0xF0, 0x9C, 0xF4, 0x7B, 0xD0, 0x9C, 0xD3, 0xB5, 0x96, 0xB5, 0xB7, 0xA4, 0xF4, 0xAD, 0x56, 0xB5, 0x76, 0xC6, 0x18, 0xA5, 0x15, 0x84, 0x11, 0xB5, 0x76, 0xAD, 0x76, 0x9C, 0xD4, 0x5A, 0xCB, 0x63, 0x0C, 0x94, 0x92, 0x83, 0xEF, 0x42, 0x08, 0x9C, 0xD3, 0x94, 0x50, 0xB5, 0x12, 0xC5, 0x93, 0xC5, 0x72, 0xC5, 0x72, 0xBD, 0x31, 0xA4, 0xAF, 0x9C, 0x8F, 0xA4, 0xB0, 0xAC, 0xB0, 0xAC, 0xD0, 0xA4, 0xB0, 0xAC, 0xD0, 0xC5, 0x72, 0xD5, 0xF3, 0xDE, 0x14, 0xDE, 0x55, 0xDE, 0x34, 0xDE, 0x14, 0xE6, 0x75, 0xC5, 0x71, 0xAC, 0xAE, 0xB5, 0x10, 0xA4, 0xD0, 0xD6, 0x36, 0xD6, 0x76, 0xCE, 0x56, 0xCE, 0x56, 0xCE, 0x56, 0xCE, 0x56, 0xCE, 0x56, 0xCE, 0x56, 0xC5, 0xF5, 0xD6, 0x56, 0xD6, 0x55, 0xD6, 0x55, 0xD6, 0x55, 0xD6, 0x56, 0xCE, 0x14, 0xC5, 0xF4, 0xD6, 0x56, 0xD6, 0x97, 0xD6, 0x97, 0xD6, 0x76, 0xD6, 0x97, 0xD6, 0x76, 0xCE, 0x15, 0xA4, 0xB0, 0xA4, 0x90, 0xE5, 0xF4, 0xED, 0xF4, 0xEE, 0x15, 0xED, 0xF4, 0xED, 0xF4, 0xE5, 0xF4, 0xEE, 0x14, 0xEE, 0x35, 0xEE, 0x97, 0xE6, 0xD8, 0xE6, 0xB8, 0xDE, 0x98, 0xE6, 0xB8, 0xE6, 0xB8, 0xE6, 0x97, 0xE6, 0x35, 0xE5, 0xB3, 0xE5, 0x71, 0xE5, 0x71, 0xE5, 0x92, 0xE5, 0xB2, 0xE6, 0x55, 0xEF, 0x19, 0xA4, 0xD1, 0xC5, 0xF5, 0xD6, 0x77, 0xE6, 0xD9, 0xD6, 0x78, 0xB5, 0x95, 0x94, 0x71, 0xBD, 0xB6, 0xBD, 0x96, 0xCD, 0xF7, 0x9C, 0x71, 0xB5, 0x13, 0xBD, 0x54, 0xAC, 0xB1, 0x82, 0xEB, 0x62, 0x48, 0x49, 0xC6, 0x4A, 0x48, 0x3A, 0x07, 0x6B, 0xEB, 0x52, 0xE8, 0x9C, 0xF2, 0x31, 0xE6, 0x10, 0xE2, 0x19, 0x02, 0x42, 0x25, 0x7C, 0x4A, 0x85, 0x0C, 0x74, 0xAC, 0x74, 0xED, 0x5C, 0x0A, 0x43, 0x47, 0x74, 0xAC, 0x6C, 0x8C, 0x74, 0xAD, 0x85, 0x0F, 0x3A, 0xE6, 0x2A, 0x43, 0x53, 0x88, 0x7D, 0x0D, 0x85, 0x2D, 0x95, 0x90, 0xB6, 0x73, 0x85, 0x2E, 0x7C, 0xCC, 0x7D, 0x0C, 0x95, 0x8F, 0xA5, 0xF2, 0x6C, 0x4B, 0x4B, 0x67, 0x8C, 0x50, 0x73, 0x6C, 0x7B, 0xAD, 0x83, 0xAD, 0x8C, 0x2E, 0x8C, 0x2E, 0x8C, 0x4E, 0x9C, 0xD0, 0xA4, 0xD0, 0x9C, 0xB0, 0x94, 0x6F, 0xA4, 0xD0, 0x94, 0x0D, 0xAC, 0xF0, 0xA4, 0xCF, 0xB5, 0x72, 0xBD, 0x92, 0xBD, 0x92, 0xC5, 0xB2, 0xB5, 0x31, 0xAC, 0xAF, 0xB4, 0xF0, 0xAC, 0xF0, 0xAC, 0xEF, 0xAC, 0xCF, 0xA4, 0xAF, 0xAC, 0xCF, 0xC5, 0xB2, 0xB5, 0x10, 0xA4, 0x8E, 0xA4, 0x8E, 0x9C, 0x6D, 0xAC, 0xEF, 0xA4, 0x6D, 0x9C, 0x4D, 0x9C, 0x6D, 0xA4, 0x8D, 0xA4, 0x6D, 0xA4, 0x6D, 0xA4, 0x8E, 0xAC, 0x8E, 0xAC, 0x8E, 0xAC, 0xAE, 0xAC, 0xAE, 0xAC, 0xAF, 0xAC, 0xAE, 0xAC, 0xAF, 0xAC, 0xAF, 0xAC, 0xCF, 0xA4, 0xAF, 0xA4, 0xAF, 0x9C, 0x6E, 0x94, 0x2D, 0x8B, 0xEC, 0x83, 0xCC, 0x83, 0xAB, 0x7B, 0x6B, 0x73, 0x4A, 0x94, 0x0D, 0x94, 0x0C, 0x8B, 0xEC, 0x9C, 0xAE, 0xA4, 0xCF, 0xBD, 0xB3, 0xC6, 0x14, 0xC6, 0x14, 0xC6, 0x35, 0xCE, 0x76, 0xC6, 0x35, 0xCE, 0x75, 0xC6, 0x34, 0xA4, 0xF0, 0xC5, 0xF4, 0xDE, 0xB7, 0xD6, 0x96, 0xD6, 0x76, 0xD6, 0x76, 0xD6, 0x76, 0xCE, 0x35, 0xCE, 0x55, 0xCE, 0x15, 0xC5, 0x92, 0xB4, 0xEF, 0xB5, 0x0F, 0xDE, 0x54, 0xEE, 0xB5, 0xE6, 0x95, 0xE6, 0x95, 0xDE, 0x75, 0xD6, 0x14, 0xC5, 0xB3, 0xCD, 0xD3, 0xDE, 0x55, 0xE6, 0xD6, 0xE6, 0xF6, 0xDE, 0xD5, 0xC6, 0x32, 0xAD, 0xAF, 0xB5, 0xD0, 0xCE, 0x94, 0xC6, 0x33, 0xC6, 0x33, 0xA5, 0x2F, 0xB5, 0x70, 0xA4, 0xEF, 0x6B, 0x6A, 0x42, 0x27, 0x31, 0xA6, 0x21, 0x24, 0x31, 0x85, 0x39, 0xE7, 0x42, 0x28, 0x52, 0x8A, 0x52, 0x8A, 0x4A, 0x69, 0x73, 0xAF, 0x9C, 0xF4, 0x7B, 0xD0, 0xBD, 0xB8, 0xA4, 0xF4, 0xB5, 0xB7, 0xAD, 0x56, 0xBD, 0xD8, 0xAD, 0x35, 0xE7, 0x1C, 0xD6, 0x79, 0xAC, 0xF2, 0x83, 0xEE, 0x73, 0x8D, 0x7B, 0xEE, 0x84, 0x0F, 0x8C, 0x50, 0x9C, 0xD1, 0xA4, 0xF1, 0x9C, 0xB0, 0x9C, 0xB1, 0xAD, 0x33, 0xB5, 0x94, 0xC5, 0xD5, 0xC5, 0xF5, 0xB5, 0x73, 0xBD, 0x94, 0xC5, 0xD5, 0xBD, 0xB4, 0xBD, 0xD4, 0xBD, 0xB4, 0xAD, 0x33, 0x94, 0xB1, 0x9C, 0xD1, 0x9C, 0xD1, 0x9C, 0x90, 0xB5, 0x52, 0xBD, 0x94, 0xBD, 0x73, 0xA4, 0xF1, 0x94, 0x8F, 0xBD, 0xD4, 0xCE, 0x16, 0x9C, 0xB1, 0x8C, 0x71, 0x94, 0x92, 0x7B, 0xEF, 0x63, 0x0B, 0x62, 0xEB, 0x5A, 0xAA, 0x31, 0xA5, 0x42, 0x28, 0x52, 0x89, 0x4A, 0x68, 0x39, 0xE7, 0x39, 0xC6, 0x42, 0x27, 0x39, 0xC6, 0x4A, 0x48, 0x52, 0xAA, 0x5A, 0xCB, 0x63, 0x2D, 0x84, 0x10, 0x7B, 0xF0, 0x73, 0x6E, 0xAD, 0x35, 0xC6, 0x39, 0xB5, 0x97, 0xC6, 0x18, 0xBD, 0xB7, 0x8C, 0x51, 0x6B, 0x4D, 0x5A, 0xAB, 0x9C, 0xB4, 0xB5, 0xB6, 0xBD, 0xD7, 0x9C, 0xB3, 0xAD, 0x55, 0x94, 0x92, 0x73, 0x6E, 0x6B, 0x4D, 0x73, 0x6E, 0xBD, 0xB6, 0xC5, 0xF6, 0xC5, 0xB5, 0xD5, 0xF4, 0xCD, 0xB3, 0xD5, 0xF4, 0xD6, 0x15, 0xCD, 0xD4, 0xBD, 0x73, 0xA4, 0xB0, 0x94, 0x4F, 0x9C, 0x6F, 0x9C, 0x90, 0xA4, 0xB0, 0xA4, 0xB0, 0xAC, 0xD0, 0xAC, 0xD0, 0xAC, 0xD0, 0xAC, 0xD0, 0xAC, 0xD0, 0xA4, 0xAF, 0xA4, 0xAF, 0xBD, 0x11, 0xBD, 0x52, 0xBD, 0x93, 0xBD, 0x93, 0xB5, 0x52, 0xB5, 0x32, 0xAD, 0x12, 0xA4, 0xF1, 0xA4, 0xF1, 0x9C, 0xD1, 0x9C, 0xB0, 0x9C, 0x90, 0xA4, 0xF1, 0xB5, 0x72, 0xB5, 0x72, 0xAD, 0x32, 0xB5, 0x73, 0xAD, 0x32, 0xAD, 0x32, 0xD6, 0x76, 0xC6, 0x15, 0xC5, 0xF4, 0xD6, 0x56, 0xC5, 0xD4, 0xC5, 0xF5, 0xB5, 0x73, 0xAC, 0xF2, 0xAC, 0xF1, 0xDD, 0xF4, 0xF6, 0x35, 0xEE, 0x14, 0xEE, 0x15, 0xEE, 0x35, 0xEE, 0x35, 0xEE, 0x56, 0xEE, 0x97, 0xEE, 0xF9, 0xEE, 0xF9, 0xEE, 0xF9, 0xEE, 0xF9, 0xEE, 0xF9, 0xEE, 0xF9, 0xEE, 0xD7, 0xEE, 0x97, 0xEE, 0x14, 0xE5, 0xB2, 0xED, 0xB3, 0xED, 0xB2, 0xED, 0xD3, 0xEE, 0x56, 0xEE, 0xF9, 0xC5, 0xF6, 0xE6, 0xB9, 0xB5, 0x74, 0x83, 0xEF, 0x9C, 0xB3, 0xC5, 0xD6, 0xB5, 0x55, 0xB5, 0x75, 0xB5, 0x35, 0xBD, 0x75, 0x9C, 0x71, 0x93, 0xEF, 0x83, 0x4C, 0x72, 0xA9, 0x62, 0x27, 0x49, 0xC6, 0x29, 0x24, 0x31, 0xA6, 0x4A, 0x68, 0x63, 0x6B, 0x9C, 0xF2, 0x94, 0xB1, 0x3A, 0x07, 0x42, 0x27, 0x7B, 0xCE, 0xA5, 0x11, 0xDE, 0xD4, 0xCE, 0x92, 0x74, 0x8C, 0x85, 0x0E, 0x53, 0xC9, 0x4B, 0x89, 0x5C, 0x0B, 0x64, 0x4B, 0x74, 0xCE, 0x74, 0x8D, 0x32, 0xA5, 0x32, 0x84, 0x53, 0xA8, 0x8D, 0x8F, 0x8D, 0x8F, 0x95, 0xB0, 0xAE, 0x33, 0x8D, 0x4E, 0x7D, 0x0D, 0x7D, 0x0C, 0x64, 0x6A, 0x6C, 0x6B, 0x9D, 0xD0, 0x7C, 0xEC, 0xC5, 0xF8, 0x7B, 0x8D, 0x7B, 0x8C, 0x7B, 0xAD, 0x94, 0x6F, 0x94, 0x6F, 0x8C, 0x4E, 0x8C, 0x4E, 0x94, 0x6E, 0x94, 0x6F, 0xA4, 0xF1, 0xAD, 0x32, 0x83, 0xCC, 0x9C, 0x8E, 0xA4, 0xF0, 0xAD, 0x31, 0xAD, 0x31, 0xA4, 0xF0, 0xA4, 0xCF, 0x9C, 0xAF, 0x8B, 0xEC, 0xA4, 0xAE, 0xAC, 0xCF, 0xAC, 0xEF, 0xAD, 0x10, 0xAC, 0xCF, 0xA4, 0xAE, 0xCE, 0x14, 0xD6, 0x35, 0xCD, 0xF4, 0xCE, 0x14, 0xC5, 0xD3, 0xD6, 0x14, 0xAC, 0xF0, 0x9C, 0x8E, 0x94, 0x2C, 0x8B, 0xEC, 0x83, 0xCB, 0x94, 0x2C, 0x8B, 0xEC, 0x94, 0x2D, 0x9C, 0x6D, 0xA4, 0xAF, 0xB5, 0x10, 0xBD, 0x72, 0xBD, 0x31, 0xB5, 0x10, 0xB5, 0x31, 0xA4, 0xAE, 0xA4, 0xAE, 0xAC, 0xCF, 0xAC, 0xCF, 0xB4, 0xF0, 0xB4, 0xF0, 0xB4, 0xF0, 0xAC, 0xF0, 0xAC, 0xF0, 0xA4, 0xCF, 0xA4, 0x8E, 0xAC, 0xCF, 0xA4, 0x8E, 0x9C, 0x8D, 0x94, 0x2D, 0x94, 0x0C, 0x8C, 0x0C, 0x94, 0x0D, 0x8C, 0x2D, 0xB5, 0x72, 0xAD, 0x51, 0xBD, 0xD3, 0xCE, 0x53, 0xDE, 0xF6, 0xD6, 0x95, 0xAD, 0x71, 0x94, 0x6E, 0x94, 0x4E, 0x9C, 0x8E, 0x9C, 0x6E, 0x9C, 0x6E, 0xA4, 0xAF, 0xB5, 0x31, 0xB5, 0x10, 0xA4, 0xAE, 0xAC, 0xCE, 0xA4, 0x8D, 0x9C, 0x6D, 0x9C, 0x2C, 0x94, 0x2C, 0x94, 0x2C, 0x9C, 0x6D, 0x9C, 0x8E, 0xA4, 0xAE, 0xAC, 0xEF, 0xB5, 0x30, 0xB5, 0x30, 0xC5, 0xB2, 0xD6, 0x33, 0xCE, 0x53, 0xB5, 0x70, 0xBD, 0xD2, 0xCE, 0x75, 0xBD, 0xD2, 0xAD, 0x30, 0xA4, 0xCE, 0xA4, 0xCE, 0x83, 0xEC, 0x7B, 0xCC, 0x5A, 0xA8, 0x42, 0x06, 0x31, 0xA6, 0x31, 0xA5, 0x31, 0xA5, 0x42, 0x27, 0x31, 0xA6, 0x31, 0xA6, 0x52, 0xAA, 0x6B, 0x8D, 0x7B, 0xF0, 0xA4, 0xF4, 0xB5, 0xB7, 0xBD, 0xD7, 0xAD, 0x35, 0xBD, 0xF8, 0xD6, 0x9A, 0xE7, 0x1C, 0xD6, 0xBA, 0xB5, 0x96, 0xA4, 0xF3, 0x8C, 0x30, 0x7B, 0xEF, 0x73, 0x8D, 0x73, 0xAE, 0x8C, 0x50, 0x7B, 0xAE, 0x73, 0x6D, 0x6B, 0x6D, 0x7B, 0xCE, 0x94, 0x71, 0x9C, 0xD2, 0x94, 0xB1, 0x94, 0x91, 0x9C, 0xD2, 0x94, 0xB1, 0x9C, 0xD2, 0x94, 0x91, 0x9C, 0xD2, 0x94, 0x71, 0x84, 0x2F, 0x94, 0x91, 0x8C, 0x4F, 0xA4, 0xD1, 0xBD, 0x93, 0xC5, 0xD4, 0xB5, 0x73, 0xA5, 0x12, 0xBD, 0x94, 0xD6, 0x56, 0xC5, 0xD4, 0xC5, 0xF5, 0x94, 0x91, 0x84, 0x30, 0x83, 0xEF, 0x73, 0x4D, 0x4A, 0x28, 0x39, 0xC6, 0x29, 0x44, 0x29, 0x24, 0x4A, 0x48, 0x52, 0x89, 0x39, 0xE7, 0x31, 0xA6, 0x39, 0xC6, 0x42, 0x07, 0x52, 0x89, 0x52, 0xAA, 0x63, 0x2C, 0x84, 0x10, 0x6B, 0x6D, 0x5A, 0xEB, 0x7B, 0xCF, 0x8C, 0x51, 0x9C, 0xD4, 0xBD, 0xD8, 0xC6, 0x18, 0x84, 0x10, 0x41, 0xE8, 0x41, 0xE8, 0x94, 0x92, 0x8C, 0x51, 0x7B, 0xAF, 0xB5, 0x96, 0xD6, 0x9A, 0xE6, 0xFB, 0xB5, 0x96, 0x9C, 0xB3, 0x8C, 0x31, 0x94, 0x71, 0xCE, 0x37, 0xDE, 0xB8, 0xC5, 0xF6, 0xCE, 0x16, 0xBD, 0x73, 0x9C, 0x6F, 0x8C, 0x0E, 0xA4, 0xD1, 0x9C, 0x90, 0x94, 0x6F, 0x7B, 0x8C, 0x7B, 0xAD, 0x8C, 0x0E, 0x83, 0xCD, 0x83, 0xAD, 0x94, 0x2F, 0x83, 0xCD, 0x83, 0xAD, 0x94, 0x2E, 0xA4, 0xB0, 0xB5, 0x53, 0xBD, 0x93, 0xBD, 0x73, 0xB5, 0x12, 0xB5, 0x52, 0xBD, 0x93, 0xB5, 0x52, 0xB5, 0x52, 0xBD, 0x94, 0xC5, 0xD4, 0xC5, 0xD4, 0xC5, 0xB4, 0xBD, 0x94, 0xBD, 0x94, 0xBD, 0x73, 0xAD, 0x32, 0xB5, 0x53, 0xB5, 0x32, 0xAD, 0x12, 0xAD, 0x12, 0xAC, 0xF1, 0xA4, 0xD1, 0xA4, 0xD1, 0xAD, 0x11, 0xA4, 0xF1, 0xA4, 0xD1, 0xAD, 0x11, 0xAC, 0xF1, 0xA4, 0xB0, 0x94, 0x2E, 0xBD, 0x52, 0xD5, 0x93, 0xCD, 0x72, 0xCD, 0x93, 0xDD, 0xF5, 0xDE, 0x15, 0xEE, 0x97, 0xEE, 0xD8, 0xEF, 0x19, 0xEF, 0x1A, 0xE7, 0x19, 0xEF, 0x1A, 0xEF, 0x1A, 0xEE, 0xF9, 0xEE, 0xB8, 0xEE, 0xD8, 0xF6, 0xB7, 0xF6, 0x76, 0xF6, 0x55, 0xEE, 0x55, 0xEE, 0x56, 0xEE, 0x98, 0xD6, 0x37, 0x9C, 0xB2, 0x8C, 0x10, 0xBD, 0x96, 0xB5, 0x55, 0xC5, 0xD7, 0xBD, 0x95, 0xAD, 0x34, 0x8C, 0x30, 0x9C, 0xB2, 0x8C, 0x10, 0x7B, 0xAE, 0x6B, 0x0B, 0x52, 0x07, 0x39, 0x44, 0x62, 0x69, 0x41, 0xE7, 0x21, 0x03, 0x21, 0x03, 0x21, 0x44, 0x31, 0xA6, 0x63, 0x2C, 0x6B, 0x4D, 0x63, 0x0C, 0xBD, 0xD5, 0xAD, 0x32, 0xB5, 0x52, 0xEF, 0x17, 0xEF, 0x16, 0x84, 0xCE, 0x74, 0x8C, 0x4B, 0xA9, 0x6C, 0x8D, 0x74, 0xAE, 0x74, 0xAE, 0x74, 0xCE, 0x5B, 0xEA, 0x3A, 0xE5, 0x3B, 0x06, 0x53, 0xC8, 0x8D, 0x6E, 0x95, 0x90, 0x9D, 0xD1, 0xA6, 0x32, 0x8D, 0x6F, 0x7D, 0x0D, 0x85, 0x2D, 0x74, 0xCC, 0x32, 0x84, 0x53, 0x88, 0x95, 0x6E, 0xBD, 0xF8, 0x94, 0x72, 0x7B, 0x6C, 0x84, 0x0D, 0x9C, 0xD0, 0xA4, 0xF1, 0x9C, 0xD1, 0x9C, 0x90, 0x94, 0x8F, 0x94, 0x90, 0x8C, 0x6F, 0x7B, 0xAC, 0x73, 0x8B, 0x8C, 0x2D, 0xA5, 0x10, 0xAD, 0x11, 0xAD, 0x31, 0xA4, 0xF0, 0xA4, 0xD0, 0xA4, 0xF0, 0x9C, 0xD0, 0xAC, 0xF0, 0xA4, 0xAF, 0xA4, 0x8E, 0xA4, 0x8E, 0xA4, 0x8E, 0xA4, 0xAE, 0xBD, 0xB2, 0xBD, 0xB2, 0xC5, 0xD3, 0xCD, 0xF4, 0xD6, 0x34, 0xD6, 0x75, 0xCD, 0xF4, 0xCE, 0x35, 0xCE, 0x15, 0xCE, 0x15, 0xCD, 0xF4, 0xCD, 0xF4, 0xC5, 0xD4, 0xBD, 0xB3, 0xBD, 0xB3, 0xCD, 0xF4, 0xD6, 0x56, 0xD6, 0x35, 0xCD, 0xF3, 0xCE, 0x14, 0xDE, 0x55, 0xAC, 0xCF, 0xA4, 0xAF, 0xB5, 0x30, 0xAC, 0xCF, 0xA4, 0xCF, 0x9C, 0x6E, 0x94, 0x2D, 0x94, 0x0C, 0x94, 0x0C, 0x94, 0x2D, 0x94, 0x2D, 0x9C, 0x6D, 0xA4, 0x8E, 0xAC, 0xCF, 0xA4, 0xAE, 0xAC, 0xCF, 0xA4, 0xAF, 0xA4, 0x8E, 0xA4, 0xCF, 0xBD, 0x92, 0x9C, 0xAE, 0x9C, 0xAD, 0xA4, 0xEE, 0xB5, 0xB0, 0xD6, 0xF5, 0xE7, 0x77, 0xD6, 0xB5, 0xBD, 0x92, 0xC5, 0xB3, 0xC5, 0xB3, 0xBD, 0x52, 0x94, 0x4D, 0x93, 0xEC, 0x94, 0x2C, 0xA4, 0x8D, 0xAC, 0xAE, 0x9C, 0x6D, 0x9C, 0x6E, 0xAC, 0xEF, 0xB5, 0x10, 0xA4, 0xAE, 0xA4, 0xAE, 0xA4, 0xAE, 0xA4, 0xAE, 0xAC, 0xCF, 0xAC, 0xEF, 0xAC, 0xCF, 0x9C, 0x6D, 0xA4, 0x8E, 0xA4, 0x8E, 0x9C, 0x4D, 0x8C, 0x2C, 0xBD, 0xD3, 0xB5, 0xB2, 0x9C, 0xAE, 0x9C, 0x8D, 0xA5, 0x2F, 0xB5, 0xD1, 0xB5, 0xF1, 0xB5, 0xF1, 0xA5, 0x70, 0x7C, 0x0C, 0x42, 0x26, 0x29, 0x64, 0x31, 0x86, 0x29, 0x44, 0x31, 0xA6, 0x39, 0xE7, 0x4A, 0x69, 0x73, 0x8E, 0x94, 0xB3, 0x94, 0x72, 0x8C, 0x51, 0xAD, 0x35, 0xA5, 0x15, 0x84, 0x10, 0x9C, 0xB3, 0x8C, 0x31, 0x6B, 0x4D, 0x8C, 0x51, 0x94, 0x71, 0xAD, 0x55, 0x6B, 0x6D, 0x63, 0x2C, 0x63, 0x4C, 0x63, 0x2C, 0x5A, 0xCA, 0x52, 0xAA, 0x6B, 0x4D, 0x7B, 0xCE, 0x84, 0x30, 0x8C, 0x50, 0x73, 0xAE, 0x84, 0x30, 0x84, 0x30, 0x8C, 0x50, 0x7B, 0xEF, 0x73, 0xAE, 0x84, 0x0F, 0x84, 0x0F, 0x84, 0x0E, 0x7B, 0xAD, 0x9C, 0xB1, 0xB5, 0x52, 0xBD, 0xB4, 0xAD, 0x53, 0xA5, 0x32, 0xD6, 0x77, 0xCE, 0x15, 0xBD, 0x94, 0xB5, 0x74, 0xB5, 0x74, 0x84, 0x0F, 0x94, 0x71, 0x73, 0x8D, 0x39, 0xE7, 0x31, 0x65, 0x29, 0x44, 0x29, 0x44, 0x31, 0xA5, 0x52, 0x88, 0x39, 0xE6, 0x31, 0x85, 0x31, 0xA6, 0x3A, 0x07, 0x52, 0xCA, 0x63, 0x2C, 0x5A, 0xEB, 0x52, 0xAA, 0x4A, 0x69, 0x63, 0x0C, 0x6B, 0x6E, 0x84, 0x11, 0x9C, 0xD4, 0xBD, 0xF8, 0x9C, 0xD3, 0x9C, 0xB3, 0x6B, 0x4D, 0x63, 0x0C, 0xA4, 0xD3, 0x6B, 0x4D, 0x6B, 0x2D, 0x83, 0xF0, 0xAD, 0x35, 0xC5, 0xF8, 0x8C, 0x31, 0x73, 0x6E, 0x7B, 0xAE, 0x73, 0x6D, 0x9C, 0xB2, 0x6B, 0x0C, 0x4A, 0x4A, 0xC5, 0xD6, 0xFF, 0x7B, 0xCD, 0xF6, 0x83, 0xEF, 0x73, 0x6C, 0x9C, 0x70, 0xBD, 0x94, 0xCE, 0x16, 0xC5, 0xD5, 0xC5, 0xD5, 0xAD, 0x12, 0xAC, 0xF2, 0xAD, 0x12, 0x9C, 0xB0, 0x94, 0x4F, 0xA4, 0xD0, 0xAD, 0x31, 0xBD, 0x93, 0xC5, 0xB4, 0xBD, 0x73, 0x9C, 0x90, 0x94, 0x6F, 0x83, 0xCD, 0x94, 0x2E, 0xA4, 0xF1, 0xA4, 0xB0, 0x9C, 0x8F, 0xB5, 0x32, 0xC5, 0xD5, 0x9C, 0x90, 0xAD, 0x12, 0x94, 0x6F, 0xA4, 0xF1, 0xB5, 0x53, 0xC5, 0xD5, 0xBD, 0x73, 0xBD, 0x73, 0xBD, 0x73, 0xB5, 0x53, 0xAD, 0x32, 0xAD, 0x12, 0xAD, 0x11, 0xA4, 0xD1, 0xA4, 0xD1, 0xA4, 0xF1, 0xA4, 0xD1, 0xA4, 0xB1, 0xA4, 0xD1, 0xAC, 0xF2, 0xAD, 0x12, 0xAD, 0x12, 0xAD, 0x12, 0xAC, 0xF2, 0xA4, 0xD1, 0xA4, 0xD2, 0xA4, 0xF2, 0xA4, 0xD2, 0x9C, 0xD2, 0x9C, 0xD2, 0x9C, 0xD2, 0xA4, 0xD2, 0xA4, 0xD2, 0xA4, 0xD1, 0xB5, 0x33, 0xCD, 0xB5, 0xC5, 0x74, 0xAC, 0xD2, 0xA4, 0xD2, 0xB5, 0x34, 0xBD, 0xB6, 0x94, 0x92, 0xAD, 0x34, 0xCE, 0x18, 0xBD, 0x75, 0xB5, 0x75, 0xA4, 0xF3, 0x94, 0x30, 0x6A, 0xEC, 0x73, 0x4D, 0x52, 0x69, 0x5A, 0xAA, 0x52, 0x48, 0x41, 0xA6, 0x39, 0x85, 0x7B, 0x6D, 0x31, 0x85, 0x21, 0x24, 0x21, 0x24, 0x21, 0x24, 0x31, 0x65, 0x73, 0x6C, 0xA5, 0x13, 0xA4, 0xF2, 0xBD, 0x94, 0xB5, 0x52, 0xB5, 0x32, 0xEF, 0x17, 0xEE, 0xF7, 0x84, 0xAD, 0x64, 0x2B, 0x64, 0x4C, 0x7C, 0xEF, 0x85, 0x10, 0x84, 0xEF, 0x74, 0xCE, 0x53, 0xC9, 0x43, 0x46, 0x43, 0x66, 0x4B, 0xA7, 0x85, 0x2D, 0x95, 0x8F, 0x9D, 0xD1, 0xA5, 0xF2, 0x95, 0xB0, 0x8D, 0x6F, 0x95, 0xB0, 0x85, 0x2E, 0x21, 0xE3, 0x21, 0xE3, 0x3A, 0xC5, 0x5A, 0xCB, 0xA4, 0xF3, 0x7B, 0x8C, 0x8C, 0x2E, 0x9C, 0xD0, 0xA4, 0xD1, 0xA4, 0xF1, 0xA5, 0x12, 0xA5, 0x11, 0xA4, 0xF1, 0xA4, 0xD1, 0xAD, 0x32, 0x94, 0x6F, 0xA5, 0x12, 0xB5, 0x93, 0xB5, 0x72, 0xB5, 0x73, 0xAD, 0x52, 0xAD, 0x52, 0xC6, 0x16, 0xE7, 0x1B, 0xF7, 0xBE, 0xFF, 0xFF, 0xFF, 0xDE, 0xEF, 0x3C, 0xC5, 0xF6, 0xAD, 0x11, 0xBD, 0xB2, 0xBD, 0x92, 0xBD, 0xB3, 0xBD, 0xB3, 0xBD, 0xB3, 0xC5, 0xF3, 0xBD, 0xB3, 0xC5, 0xB3, 0xBD, 0x93, 0xCE, 0x14, 0xD6, 0x35, 0xC5, 0xF4, 0xBD, 0x92, 0xBD, 0xB3, 0xBD, 0xB3, 0xBD, 0xB3, 0xC5, 0xD4, 0xC5, 0xD3, 0xBD, 0x93, 0xC5, 0xD3, 0xCD, 0xF4, 0xA4, 0xAE, 0xB5, 0x10, 0xC5, 0xD3, 0xBD, 0x93, 0xBD, 0x72, 0xB5, 0x51, 0xAD, 0x31, 0xB5, 0x31, 0xB5, 0x31, 0xB5, 0x31, 0xBD, 0x92, 0xD6, 0x78, 0xEF, 0x5C, 0xFF, 0xDF, 0xFF, 0xFF, 0xF7, 0x9E, 0xDE, 0xDA, 0xBD, 0xD4, 0xB5, 0x71, 0xB5, 0x71, 0xBD, 0xB2, 0xB5, 0x71, 0xAD, 0x4F, 0x9C, 0xCD, 0xA5, 0x0F, 0xC6, 0x53, 0xCE, 0x94, 0xAD, 0x51, 0xB5, 0x52, 0xAC, 0xF0, 0x94, 0x6E, 0x7B, 0xAC, 0x7B, 0x8B, 0xA4, 0xAF, 0xAC, 0xAF, 0x7B, 0x8A, 0x52, 0x67, 0x52, 0x68, 0x62, 0xE9, 0x94, 0x4E, 0x73, 0x2A, 0x5A, 0xA8, 0x62, 0xE9, 0x6A, 0xE9, 0x6B, 0x0A, 0x7B, 0x8B, 0x94, 0x4D, 0x9C, 0x6D, 0xA4, 0x8E, 0xA4, 0xAE, 0x8C, 0x0C, 0x73, 0x69, 0x8C, 0x4D, 0xAD, 0x71, 0xAD, 0x30, 0xBD, 0x92, 0xB5, 0xF0, 0xAD, 0xEF, 0xA5, 0xAD, 0xA5, 0xCE, 0xAE, 0x0F, 0xBE, 0x73, 0xB5, 0xD2, 0x4A, 0x67, 0x31, 0x85, 0x31, 0x85, 0x31, 0xA6, 0x31, 0xA6, 0x39, 0xC6, 0x52, 0xAA, 0x6B, 0x6D, 0x6B, 0x6D, 0x84, 0x10, 0xA5, 0x14, 0xA5, 0x14, 0x8C, 0x51, 0x7B, 0xAE, 0x7B, 0xCF, 0x8C, 0x51, 0x8C, 0x71, 0x9C, 0xD3, 0xE7, 0x1C, 0x8C, 0x51, 0x84, 0x10, 0x63, 0x2C, 0x5A, 0xCB, 0x52, 0xAA, 0x52, 0xAA, 0x63, 0x2C, 0x6B, 0x6D, 0x7B, 0xCE, 0x84, 0x0F, 0x73, 0x8D, 0x7B, 0xEF, 0x7B, 0xEF, 0x73, 0xAE, 0x84, 0x30, 0x73, 0x8D, 0x9C, 0xD1, 0x5A, 0xA9, 0x39, 0xE7, 0x4A, 0x28, 0xA4, 0xD1, 0xAD, 0x32, 0xAD, 0x32, 0xA4, 0xF2, 0x9C, 0xF1, 0xAD, 0x53, 0xBD, 0xB4, 0xA5, 0x12, 0xAD, 0x53, 0xB5, 0xB4, 0xB5, 0x94, 0xBD, 0xD5, 0x9C, 0xB2, 0x4A, 0x69, 0x42, 0x07, 0x39, 0xA6, 0x31, 0x65, 0x31, 0x85, 0x4A, 0x48, 0x4A, 0x69, 0x4A, 0x69, 0x4A, 0x68, 0x4A, 0x69, 0x52, 0xAA, 0x4A, 0x89, 0x42, 0x28, 0x39, 0xE7, 0x4A, 0x49, 0x5A, 0xCB, 0x73, 0xAF, 0x84, 0x10, 0xA5, 0x14, 0x94, 0x92, 0x9C, 0xD3, 0xE6, 0xDB, 0xAD, 0x35, 0x8C, 0x10, 0xA4, 0xF4, 0x83, 0xCF, 0x5A, 0xAA, 0x52, 0x8A, 0x6B, 0x2C, 0x7B, 0x8E, 0x52, 0x69, 0x63, 0x0C, 0x7B, 0xCF, 0xB5, 0x75, 0xB5, 0x96, 0x52, 0x8B, 0x7B, 0xCF, 0xBD, 0xB6, 0xCE, 0x17, 0xEE, 0xFB, 0xEE, 0xFB, 0xC5, 0xB6, 0xCD, 0xF7, 0xDE, 0x98, 0xCE, 0x16, 0xDE, 0x98, 0xC5, 0xD5, 0x94, 0x50, 0x9C, 0x91, 0xBD, 0x94, 0xBD, 0x94, 0xA5, 0x11, 0xAC, 0xF1, 0xB5, 0x52, 0xBD, 0x94, 0xAD, 0x53, 0xAD, 0x12, 0xBD, 0xB4, 0xAD, 0x32, 0xAC, 0xF1, 0xB5, 0x53, 0xAD, 0x32, 0xBD, 0x94, 0xA4, 0xF1, 0xB5, 0x73, 0xC5, 0xD5, 0xA4, 0xF1, 0xAD, 0x12, 0x73, 0x4B, 0x9C, 0x8F, 0xAD, 0x11, 0xBD, 0x52, 0xBD, 0x93, 0xC5, 0xB3, 0xBD, 0x73, 0xC5, 0x93, 0xC5, 0xB4, 0xB5, 0x53, 0xB5, 0x11, 0xAC, 0xF1, 0xAC, 0xF1, 0xA4, 0xB0, 0xA4, 0xD0, 0x94, 0x2E, 0x8C, 0x2E, 0x94, 0x2E, 0x9C, 0x6F, 0xA4, 0xD1, 0xAC, 0xF2, 0xAC, 0xF2, 0xAD, 0x12, 0xA4, 0xD2, 0xA4, 0xB1, 0xA4, 0xB0, 0xAD, 0x32, 0xB5, 0x53, 0xAD, 0x12, 0xBD, 0x74, 0xB5, 0x34, 0xBD, 0x95, 0xC5, 0xB6, 0x9C, 0x71, 0xA4, 0xD2, 0xB5, 0x75, 0xC5, 0xB6, 0xCD, 0xD7, 0xBD, 0x75, 0xAD, 0x34, 0xA4, 0xF4, 0xB5, 0x34, 0xAC, 0xF3, 0x94, 0x51, 0x7B, 0x8E, 0x73, 0x6D, 0x5A, 0xAA, 0x4A, 0x48, 0x4A, 0x28, 0x41, 0xE7, 0x31, 0x44, 0x39, 0x65, 0x6A, 0xEB, 0x5A, 0xAA, 0x21, 0x03, 0x18, 0xE3, 0x31, 0xA6, 0x63, 0x2B, 0x8C, 0x2F, 0x94, 0x70, 0x94, 0x6F, 0xA4, 0xD1, 0xA4, 0xD1, 0xA4, 0xD1, 0xA4, 0xB1, 0xBD, 0x94, 0xBD, 0xB3, 0x5B, 0x69, 0x53, 0xA9, 0x64, 0x0C, 0x53, 0x8A, 0x6C, 0x4C, 0x85, 0x10, 0x85, 0x0F, 0x53, 0xC9, 0x4B, 0x87, 0x4B, 0x66, 0x53, 0xE9, 0x85, 0x2E, 0x8D, 0x6F, 0x8D, 0x8F, 0x9D, 0xF2, 0x9D, 0xD1, 0x8D, 0x8F, 0x85, 0x4E, 0x3A, 0x65, 0x11, 0x02, 0x19, 0x62, 0x3A, 0x85, 0x39, 0xE8, 0x9C, 0xF3, 0x73, 0x6B, 0x94, 0x6F, 0xA4, 0xF1, 0x9C, 0xD0, 0xA5, 0x12, 0xAD, 0x53, 0xAD, 0x53, 0xAD, 0x52, 0xAD, 0x53, 0xA5, 0x12, 0xB5, 0x93, 0xB5, 0x93, 0xB5, 0x93, 0xBD, 0xB3, 0xBD, 0xD4, 0xBD, 0xD4, 0xCE, 0x56, 0xE7, 0x1B, 0xF7, 0xBE, 0xE7, 0x3C, 0xB5, 0x96, 0xCE, 0x59, 0xFF, 0xDE, 0xEF, 0x3C, 0xCE, 0x36, 0xBD, 0xB3, 0xB5, 0x72, 0xB5, 0x72, 0xBD, 0xB3, 0xBD, 0xB3, 0xBD, 0xD3, 0xBD, 0xD3, 0xC5, 0xD4, 0xBD, 0x73, 0xB5, 0x72, 0xB5, 0x72, 0xB5, 0x72, 0xB5, 0x52, 0xBD, 0x93, 0xBD, 0x93, 0xB5, 0x93, 0xBD, 0x93, 0xBD, 0xB3, 0xBD, 0x93, 0xBD, 0xB3, 0xBD, 0x72, 0xA4, 0x8E, 0xAD, 0x10, 0xBD, 0x92, 0xBD, 0x93, 0xBD, 0xD4, 0xBD, 0xB3, 0xB5, 0x92, 0xB5, 0x72, 0xBD, 0x92, 0xBD, 0x93, 0xD6, 0x78, 0xF7, 0x7D, 0xFF, 0xDE, 0xC6, 0x18, 0xAD, 0x55, 0xE7, 0x1C, 0xF7, 0xBE, 0xEF, 0x5B, 0xD6, 0xB7, 0xC6, 0x53, 0xD6, 0xB5, 0xBD, 0xD1, 0xB5, 0x70, 0xA5, 0x2E, 0xAD, 0x4F, 0xB5, 0x90, 0xB5, 0xD1, 0xC5, 0xF3, 0xCD, 0xD4, 0xC5, 0xB3, 0xB5, 0x52, 0x9C, 0xB0, 0x8C, 0x0D, 0x9C, 0xB0, 0x73, 0x4A, 0x6B, 0x0A, 0x52, 0x68, 0x52, 0x68, 0x4A, 0x47, 0x4A, 0x27, 0x41, 0xE7, 0x42, 0x07, 0x52, 0x68, 0x4A, 0x68, 0x52, 0x88, 0x7B, 0xCC, 0x94, 0xAE, 0xA5, 0x2F, 0xA5, 0x4F, 0xAD, 0x4F, 0xAD, 0x70, 0xAD, 0x51, 0x9C, 0xD0, 0xB5, 0xB2, 0x94, 0xAF, 0x5A, 0xE9, 0x52, 0xE9, 0x7C, 0x0C, 0xA5, 0x0E, 0x84, 0x8A, 0x94, 0xEA, 0x9D, 0x4D, 0xAD, 0xB1, 0x63, 0x4A, 0x42, 0x27, 0x31, 0x85, 0x29, 0x85, 0x29, 0x85, 0x31, 0xA6, 0x42, 0x07, 0x4A, 0x49, 0x63, 0x0B, 0x6B, 0x4D, 0x94, 0x92, 0x7B, 0xF0, 0x84, 0x30, 0x6B, 0x4D, 0x6B, 0x4D, 0x52, 0x8A, 0x62, 0xEC, 0xB5, 0x96, 0xE7, 0x1C, 0xD6, 0xBA, 0xCE, 0x59, 0x84, 0x31, 0x73, 0x6D, 0x83, 0xCD, 0x7B, 0xCD, 0x7B, 0xCD, 0x7B, 0xAD, 0x7B, 0x8C, 0x73, 0x8C, 0x6B, 0x4C, 0x6B, 0x4C, 0x73, 0x6C, 0x63, 0x2B, 0xB5, 0x94, 0x6B, 0x6B, 0x94, 0x4F, 0x8B, 0xED, 0x8B, 0xEE, 0x7B, 0xAD, 0xAD, 0x32, 0xA5, 0x11, 0xAD, 0x32, 0xC6, 0x16, 0xB5, 0x94, 0x9C, 0xD1, 0xAD, 0x53, 0xA5, 0x13, 0xAD, 0x54, 0xBD, 0x94, 0xC5, 0xD5, 0xC6, 0x16, 0xCE, 0x36, 0x9C, 0xB1, 0x9C, 0xB1, 0xBD, 0xB5, 0xAD, 0x33, 0x73, 0x8D, 0x31, 0xA5, 0x4A, 0x68, 0x5A, 0xCA, 0x52, 0x89, 0x39, 0xE7, 0x41, 0xE7, 0x4A, 0x28, 0x42, 0x28, 0x4A, 0x48, 0x52, 0x8A, 0x6B, 0x6D, 0x73, 0x8E, 0x6B, 0x4D, 0x94, 0x93, 0x9C, 0xB3, 0xA4, 0xD3, 0xDE, 0x9A, 0xCD, 0xF7, 0x9C, 0xB3, 0x8C, 0x10, 0x8C, 0x50, 0x7B, 0xAE, 0x8C, 0x0F, 0x94, 0x2F, 0x5A, 0xAA, 0x5A, 0xAA, 0x73, 0x6D, 0xB5, 0x95, 0xBD, 0xD7, 0xAD, 0x55, 0xAD, 0x35, 0xA5, 0x14, 0xC5, 0xF7, 0xBD, 0xB6, 0x6B, 0x4D, 0xDE, 0xBA, 0xE6, 0xDB, 0x9C, 0xB2, 0xB5, 0x54, 0xA4, 0xB2, 0xA4, 0xF2, 0x94, 0x30, 0x6B, 0x0B, 0xC5, 0xD5, 0xCD, 0xF5, 0xD6, 0x56, 0xCD, 0xF5, 0xBD, 0x93, 0xC5, 0xD5, 0xDE, 0x97, 0xDE, 0x98, 0xD6, 0x77, 0x9C, 0xB1, 0xB5, 0x74, 0xC5, 0xF6, 0xAD, 0x32, 0xA4, 0xF1, 0xBD, 0xB4, 0xC5, 0xD5, 0xC5, 0xD5, 0xBD, 0xB4, 0xA4, 0xF1, 0xA4, 0xB1, 0x8C, 0x0E, 0x94, 0x4E, 0x94, 0x2E, 0x9C, 0x6F, 0xA4, 0x8F, 0xAC, 0xF0, 0xA4, 0xD0, 0x9C, 0x6E, 0xA4, 0xD0, 0xB5, 0x31, 0xAC, 0xF1, 0xAD, 0x11, 0xB5, 0x52, 0xBD, 0x73, 0xCD, 0xD4, 0xC5, 0x93, 0xB5, 0x11, 0xA4, 0xB0, 0x94, 0x0E, 0x94, 0x2E, 0xA4, 0x90, 0xB5, 0x12, 0xAD, 0x12, 0xAD, 0x12, 0xC5, 0xB4, 0xC5, 0xB3, 0xDE, 0x76, 0xDE, 0x77, 0xDE, 0x57, 0xB5, 0x54, 0x94, 0x30, 0x9C, 0x92, 0xAD, 0x14, 0x94, 0x71, 0xBD, 0x75, 0xA4, 0xD2, 0xAD, 0x34, 0xAD, 0x13, 0xAD, 0x13, 0xA4, 0xD2, 0x8C, 0x10, 0x8C, 0x30, 0x83, 0xAE, 0x6B, 0x0C, 0x62, 0xAA, 0x62, 0xCA, 0x52, 0x69, 0x39, 0xA6, 0x29, 0x44, 0x29, 0x04, 0x39, 0xA6, 0x73, 0x6D, 0x5A, 0xAA, 0x29, 0x44, 0x29, 0x64, 0x5A, 0xCA, 0x9C, 0xB0, 0xAD, 0x53, 0xB5, 0x53, 0xBD, 0x74, 0xBD, 0x94, 0xBD, 0x94, 0xB5, 0x53, 0xB5, 0x33, 0xB5, 0x53, 0xB5, 0x53, 0x94, 0xAF, 0x4B, 0x08, 0x53, 0x89, 0x32, 0x85, 0x22, 0x24, 0x2A, 0x65, 0x53, 0xAA, 0x8D, 0x70, 0x53, 0xC9, 0x43, 0x26, 0x2A, 0x64, 0x53, 0xC9, 0x74, 0xED, 0x7C, 0xED, 0x8D, 0x6F, 0xA5, 0xF2, 0x9D, 0xD2, 0x85, 0x2E, 0x3A, 0x85, 0x19, 0x22, 0x10, 0xE2, 0x21, 0x63, 0x63, 0xE9, 0x63, 0x6E, 0x8C, 0x71, 0x73, 0x6C, 0x8C, 0x4E, 0x94, 0x6F, 0xA5, 0x11, 0xAD, 0x32, 0x9C, 0xD0, 0xB5, 0x93, 0xB5, 0x93, 0xBD, 0xB4, 0xB5, 0x73, 0xBD, 0xB4, 0xBD, 0xD4, 0xC5, 0xF4, 0xC5, 0xF4, 0xC5, 0xF4, 0xBD, 0xF4, 0xE7, 0x1B, 0xF7, 0xBE, 0xA5, 0x34, 0x08, 0x41, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x49, 0xF7, 0x9E, 0xEF, 0x3C, 0xD6, 0x57, 0xB5, 0x93, 0xB5, 0x72, 0xBD, 0x93, 0xB5, 0x72, 0xC5, 0xD4, 0xBD, 0xD4, 0xC5, 0xF4, 0xBD, 0xB4, 0xB5, 0x93, 0xA4, 0xF0, 0xAD, 0x52, 0xB5, 0x72, 0xBD, 0xB4, 0xB5, 0x93, 0xB5, 0x93, 0xB5, 0x93, 0xB5, 0x93, 0xBD, 0x93, 0xB5, 0x72, 0xB5, 0x10, 0xA4, 0x8E, 0xAD, 0x10, 0xCE, 0x14, 0xBD, 0x93, 0xBD, 0xB3, 0xB5, 0x73, 0xB5, 0x72, 0xAD, 0x10, 0xAD, 0x30, 0xC6, 0x15, 0xEF, 0x5C, 0xF7, 0x9D, 0x39, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x08, 0x41, 0xA5, 0x14, 0xFF, 0xDE, 0xDF, 0x1A, 0xC6, 0x52, 0xC6, 0x93, 0xBE, 0x10, 0xA5, 0x2B, 0xA5, 0x6B, 0xAD, 0x8C, 0xAD, 0x8D, 0xC6, 0x31, 0xE6, 0xD6, 0xDE, 0x96, 0xD6, 0x55, 0xD6, 0x35, 0xC5, 0xB4, 0xA4, 0xF1, 0xAD, 0x12, 0x73, 0x4B, 0x7B, 0xAD, 0x7B, 0xAD, 0x63, 0x0A, 0x4A, 0x48, 0x42, 0x07, 0x42, 0x07, 0x4A, 0x48, 0x4A, 0x48, 0x4A, 0x48, 0x4A, 0x47, 0xA5, 0x70, 0xAE, 0x10, 0xAE, 0x30, 0xAE, 0x50, 0xAE, 0x10, 0x95, 0x2E, 0x9D, 0x30, 0x9C, 0xCF, 0x9C, 0xF1, 0x6B, 0x6C, 0x4A, 0x68, 0x5A, 0xEA, 0x7B, 0xAD, 0x6B, 0x4A, 0x6B, 0x4A, 0xA4, 0xEE, 0xBD, 0xB1, 0x8C, 0x4D, 0x52, 0x88, 0x6B, 0x4B, 0x52, 0x88, 0x42, 0x27, 0x29, 0x65, 0x31, 0x85, 0x39, 0xE7, 0x42, 0x28, 0x42, 0x07, 0x63, 0x0B, 0x84, 0x0F, 0x73, 0x8E, 0x4A, 0x69, 0x5A, 0xCB, 0x4A, 0x48, 0x39, 0xC7, 0x6B, 0x2D, 0xBD, 0xF8, 0xE7, 0x1C, 0xC6, 0x38, 0xCE, 0x59, 0xDE, 0xBB, 0x83, 0xEF, 0x83, 0xCE, 0x9C, 0xB1, 0x9C, 0x8F, 0x9C, 0x6F, 0x9C, 0x8E, 0xAD, 0x0F, 0x94, 0x6D, 0x94, 0x2D, 0x9C, 0x6E, 0x94, 0x2D, 0xD6, 0x56, 0x83, 0xEC, 0x9C, 0x4E, 0xA4, 0x8F, 0xAC, 0xF0, 0xAC, 0xD0, 0xA4, 0xF0, 0x94, 0x2E, 0x8C, 0x2E, 0x94, 0x90, 0x83, 0xEE, 0x8C, 0x4F, 0x9C, 0xB1, 0x8C, 0x91, 0x94, 0xB1, 0xA4, 0xF2, 0xAD, 0x53, 0xB5, 0x94, 0xC5, 0xF6, 0xBD, 0xD5, 0xC5, 0xF6, 0xBD, 0xD5, 0xC5, 0xF5, 0xC6, 0x15, 0x94, 0x70, 0x39, 0xE6, 0x42, 0x07, 0x39, 0xC6, 0x31, 0x85, 0x39, 0xA6, 0x42, 0x07, 0x4A, 0x28, 0x52, 0x89, 0x52, 0xAA, 0x6B, 0x4D, 0x6B, 0x4D, 0x42, 0x08, 0x83, 0xEF, 0xAD, 0x34, 0xB5, 0x34, 0xBD, 0x75, 0xB5, 0x55, 0x7B, 0xAE, 0x7B, 0x8D, 0x8C, 0x0F, 0x83, 0xCE, 0xA4, 0xB1, 0xBD, 0x53, 0x62, 0xA9, 0x52, 0x69, 0x62, 0xEB, 0x73, 0x4C, 0x5A, 0xCB, 0xB5, 0x76, 0xC6, 0x18, 0xA4, 0xF4, 0xCE, 0x39, 0xB5, 0x55, 0x63, 0x2D, 0xBD, 0xD8, 0xEF, 0x1C, 0xCD, 0xF7, 0xAD, 0x13, 0xA4, 0xD2, 0x83, 0xCE, 0x73, 0x2C, 0x73, 0x6D, 0xAD, 0x32, 0xAC, 0xF1, 0xCD, 0xF5, 0xDE, 0x56, 0xB5, 0x32, 0xC5, 0xB4, 0xDE, 0x56, 0xDE, 0x56, 0xDE, 0xB7, 0xC5, 0xF6, 0xC6, 0x17, 0xD6, 0x99, 0xCE, 0x58, 0xC5, 0xF6, 0xCE, 0x15, 0xCE, 0x15, 0xC5, 0xD4, 0xC5, 0xF5, 0xAD, 0x12, 0x9C, 0x90, 0xA4, 0xB0, 0x9C, 0xB0, 0x94, 0x4F, 0x94, 0x4E, 0x94, 0x2E, 0xA4, 0xB0, 0x9C, 0x8F, 0x8B, 0xED, 0x9C, 0x4E, 0xA4, 0xAF, 0xA4, 0x8F, 0xA4, 0xD0, 0xA4, 0xD0, 0xAC, 0xF0, 0xB5, 0x11, 0xB5, 0x11, 0xB5, 0x11, 0xB5, 0x11, 0xAC, 0xF0, 0xAC, 0xD0, 0xB5, 0x11, 0xC5, 0x73, 0xAD, 0x12, 0xB5, 0x53, 0xBD, 0x94, 0x9C, 0x4F, 0xDE, 0x57, 0xD6, 0x16, 0xCD, 0xD5, 0xBD, 0x74, 0xC5, 0xB5, 0xD6, 0x38, 0xC5, 0xB6, 0xA4, 0xD3, 0x94, 0x50, 0x83, 0xEF, 0xA4, 0xD3, 0x9C, 0x71, 0x8B, 0xEF, 0x83, 0x8E, 0x73, 0x2C, 0x62, 0xEA, 0x62, 0xAA, 0x4A, 0x28, 0x52, 0x28, 0x4A, 0x08, 0x39, 0xA6, 0x29, 0x24, 0x21, 0x04, 0x5A, 0xAB, 0xC5, 0xF8, 0x94, 0x92, 0x31, 0x65, 0x6B, 0x0B, 0x8C, 0x0E, 0x8C, 0x0E, 0x94, 0x2E, 0xA4, 0xB1, 0xB5, 0x32, 0xBD, 0x94, 0xC5, 0xF5, 0xBD, 0x93, 0xB5, 0x73, 0xC5, 0xD4, 0xAD, 0x11, 0x9C, 0xD0, 0x73, 0xCC, 0x4B, 0x49, 0x5B, 0xCA, 0x19, 0xC3, 0x21, 0xE4, 0x3A, 0xA6, 0x32, 0xA5, 0x74, 0xAD, 0x43, 0x27, 0x2A, 0x23, 0x19, 0xC2, 0x2A, 0x24, 0x5B, 0xEA, 0x5C, 0x0A, 0x6C, 0xAC, 0x9D, 0xF2, 0xA6, 0x12, 0x5B, 0xEA, 0x32, 0x65, 0x31, 0xE5, 0x19, 0x23, 0x4B, 0x08, 0x8D, 0x4E, 0x7B, 0xF0, 0x7B, 0xF0, 0x7B, 0x8D, 0x83, 0xED, 0x83, 0xCC, 0x7B, 0xAC, 0x83, 0xCC, 0x83, 0xCC, 0x8C, 0x0D, 0x8C, 0x2E, 0x94, 0x6E, 0x9C, 0x8F, 0x9C, 0x8F, 0x9C, 0xB0, 0x9C, 0xB0, 0x9C, 0xAF, 0xA4, 0xD0, 0xA5, 0x11, 0xEF, 0x7D, 0xEF, 0x5D, 0x08, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x10, 0xFF, 0xBE, 0xE6, 0xFA, 0xBD, 0xD4, 0xB5, 0x73, 0xB5, 0x72, 0xB5, 0x73, 0xBD, 0xB4, 0xBD, 0x93, 0xB5, 0x93, 0xAD, 0x52, 0xAD, 0x52, 0xB5, 0x93, 0xBD, 0xD4, 0xBD, 0xD4, 0xCE, 0x36, 0xC5, 0xF5, 0xBD, 0xB3, 0xBD, 0xB3, 0xBD, 0x93, 0xBD, 0xB3, 0xB5, 0x72, 0xAD, 0x10, 0xA4, 0x8E, 0xBD, 0x72, 0xC6, 0x14, 0xBD, 0xB3, 0xB5, 0x73, 0xAD, 0x52, 0xBD, 0x93, 0xAD, 0x31, 0xAD, 0x31, 0xCE, 0x37, 0xF7, 0x9E, 0x7B, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x41, 0xEF, 0x5D, 0xF7, 0x9D, 0xC6, 0x72, 0xC6, 0x72, 0x9D, 0x4B, 0x95, 0x49, 0x8D, 0x07, 0x84, 0xC6, 0x84, 0xE6, 0x8C, 0xE9, 0xAD, 0x8F, 0xCE, 0x34, 0xE6, 0xB7, 0xE6, 0x96, 0xD6, 0x55, 0xD6, 0x15, 0xCD, 0xF5, 0x83, 0xCD, 0xBD, 0xB4, 0xB5, 0x74, 0xA4, 0xD1, 0x73, 0x4C, 0x52, 0x89, 0x52, 0x89, 0x52, 0x89, 0x73, 0x8D, 0x52, 0xA9, 0x42, 0x07, 0x5A, 0xE8, 0x6B, 0xC9, 0x84, 0x8B, 0x95, 0x6D, 0xAE, 0x31, 0xBE, 0xB4, 0xB6, 0x74, 0xB6, 0x13, 0xA5, 0x52, 0x5A, 0xEA, 0x4A, 0x48, 0x4A, 0x68, 0x63, 0x2B, 0x63, 0x0B, 0x63, 0x0A, 0xBD, 0x93, 0xA5, 0x11, 0x62, 0xE9, 0x84, 0x0E, 0xA4, 0xF1, 0x94, 0x4E, 0x8B, 0xED, 0x4A, 0x27, 0x29, 0x65, 0x39, 0xC6, 0x52, 0x89, 0x52, 0x89, 0x4A, 0x69, 0x52, 0xAA, 0x63, 0x0B, 0x42, 0x28, 0x31, 0xA6, 0x42, 0x08, 0x5A, 0xCA, 0x73, 0xAF, 0x7B, 0xAF, 0x9C, 0xF4, 0xA5, 0x35, 0xDF, 0x1B, 0xCE, 0x9A, 0xAD, 0x76, 0xBD, 0xD8, 0xC6, 0x19, 0x84, 0x10, 0x7B, 0x8C, 0x94, 0x6D, 0xAD, 0x8F, 0xA5, 0x2F, 0x9C, 0x6D, 0x94, 0x2D, 0x8C, 0x0C, 0xCE, 0x55, 0x9C, 0x8E, 0xB5, 0x11, 0x9C, 0x8E, 0xA4, 0xCF, 0x9C, 0x8F, 0xA4, 0xF1, 0xB5, 0x52, 0xAD, 0x12, 0xA4, 0xB0, 0x9C, 0xB1, 0x9C, 0x90, 0x94, 0x70, 0x8C, 0x4F, 0x94, 0x4F, 0x94, 0x4F, 0x8C, 0x2F, 0x94, 0x4F, 0x94, 0x4F, 0x94, 0x4F, 0x9C, 0x90, 0x94, 0x90, 0x9C, 0x90, 0x9C, 0xB0, 0x6B, 0x4B, 0x5A, 0xAA, 0x73, 0x6C, 0x4A, 0x48, 0x39, 0xE6, 0x29, 0x65, 0x31, 0x85, 0x52, 0xAA, 0x5A, 0xEB, 0x52, 0xAA, 0x73, 0x6E, 0x8C, 0x51, 0x73, 0x6E, 0xAD, 0x14, 0xD6, 0x38, 0xCD, 0xF7, 0xB5, 0x34, 0x94, 0x71, 0x52, 0x6A, 0x6B, 0x4D, 0x6B, 0x4D, 0x39, 0xA6, 0x41, 0xC7, 0x6A, 0xEA, 0x62, 0xAA, 0x39, 0x86, 0x39, 0x86, 0x41, 0xE7, 0x6B, 0x2D, 0xCE, 0x39, 0xCE, 0x38, 0x9C, 0xB3, 0x8C, 0x51, 0x94, 0x92, 0xAD, 0x35, 0xCE, 0x59, 0xE6, 0xFB, 0xCE, 0x17, 0x8C, 0x30, 0xB5, 0x55, 0xAD, 0x14, 0x83, 0xEF, 0x73, 0x6D, 0x6B, 0x4C, 0x7B, 0xAD, 0xBD, 0x93, 0xD6, 0x35, 0xC5, 0x93, 0xDE, 0x56, 0xE6, 0x97, 0xDE, 0x76, 0xDE, 0x97, 0xA4, 0xD2, 0xA5, 0x14, 0xBD, 0xF7, 0xDE, 0xDB, 0xE6, 0xDA, 0xE6, 0xB8, 0xE6, 0xB8, 0xDE, 0x77, 0xD6, 0x56, 0xAD, 0x12, 0x9C, 0x6F, 0x9C, 0x90, 0xA4, 0xB0, 0x94, 0x4E, 0x9C, 0x8F, 0x9C, 0x6F, 0xA4, 0xB0, 0xA4, 0xB0, 0x9C, 0x6F, 0xA4, 0xB0, 0xA4, 0xB0, 0xA4, 0xD0, 0xA4, 0xD0, 0xA4, 0xAF, 0x9C, 0x8F, 0xA4, 0x8F, 0xA4, 0xB0, 0xA4, 0xAF, 0xB5, 0x11, 0xB5, 0x11, 0xB5, 0x11, 0xBD, 0x52, 0xC5, 0x93, 0x9C, 0x70, 0x9C, 0x91, 0xAD, 0x13, 0xCD, 0xF7, 0xCD, 0xF6, 0xA4, 0x91, 0xBD, 0x54, 0xB5, 0x13, 0xAC, 0xF3, 0xB5, 0x54, 0xA4, 0xB2, 0xA4, 0xD2, 0x7B, 0x6E, 0x62, 0xAB, 0x62, 0xEB, 0x7B, 0x6D, 0x73, 0x4C, 0x6A, 0xEB, 0x5A, 0x89, 0x4A, 0x07, 0x39, 0xA6, 0x31, 0x85, 0x29, 0x24, 0x29, 0x24, 0x21, 0x04, 0x39, 0xC7, 0xA4, 0xF3, 0xC6, 0x18, 0x9C, 0xF3, 0x7B, 0x8D, 0xB5, 0x33, 0xCD, 0xD5, 0xCD, 0xD4, 0xC5, 0xB3, 0xCD, 0xD4, 0xD6, 0x36, 0xC5, 0xB4, 0xBD, 0x93, 0xB5, 0x72, 0xBD, 0x73, 0xBD, 0x73, 0xB5, 0x73, 0xBD, 0x73, 0xA5, 0x11, 0x53, 0x28, 0x5B, 0xAA, 0x53, 0x89, 0x21, 0xE4, 0x19, 0xA3, 0x21, 0xC3, 0x32, 0x44, 0x4B, 0x27, 0x32, 0x64, 0x32, 0x64, 0x21, 0xE3, 0x11, 0x41, 0x2A, 0x44, 0x22, 0x24, 0x2A, 0x65, 0x53, 0x69, 0x7C, 0xCD, 0x2A, 0x23, 0x22, 0x03, 0x3A, 0x66, 0x19, 0x43, 0x4A, 0xC8, 0xA5, 0xF1, 0x9D, 0x14, 0x73, 0xAE, 0x73, 0x6C, 0x7B, 0xAC, 0x83, 0xCC, 0x8C, 0x0D, 0x94, 0x2E, 0x94, 0x4E, 0x9C, 0x6F, 0x94, 0x6F, 0x9C, 0x8F, 0xA4, 0xD0, 0xA4, 0xF0, 0x9C, 0xAF, 0x94, 0x6F, 0x9C, 0x6E, 0x9C, 0x8F, 0x94, 0x4E, 0xF7, 0x7D, 0xA5, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0xA6, 0xFF, 0xDF, 0xE7, 0x1B, 0xB5, 0x52, 0x9C, 0x6E, 0x9C, 0x6E, 0x94, 0x4E, 0x94, 0x4E, 0x8C, 0x0C, 0x8C, 0x2D, 0x8B, 0xEC, 0x94, 0x4E, 0xA4, 0xF1, 0xAD, 0x11, 0xAD, 0x32, 0xBD, 0x93, 0xBD, 0xB3, 0xB5, 0x72, 0xBD, 0x92, 0xC5, 0xB3, 0xC5, 0xD3, 0xBD, 0xB2, 0xB5, 0x10, 0xA4, 0xAE, 0xBD, 0x72, 0xC5, 0xD2, 0xC5, 0xF3, 0xC5, 0xD3, 0xB5, 0x72, 0xB5, 0x51, 0xAD, 0x31, 0xBD, 0xB3, 0xCE, 0x78, 0xF7, 0xBE, 0x42, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBD, 0xD7, 0xFF, 0xDF, 0xBE, 0x72, 0xB6, 0x10, 0x95, 0x0A, 0xA5, 0xAB, 0x95, 0x29, 0x95, 0x4A, 0x9D, 0x4C, 0xAD, 0xCF, 0xC6, 0x11, 0xDE, 0x95, 0xE6, 0xB6, 0xE6, 0x96, 0xE6, 0x96, 0xDE, 0x56, 0xCD, 0xD4, 0x83, 0xAC, 0xD6, 0x77, 0xC5, 0xD4, 0xB5, 0x73, 0x94, 0x4F, 0x83, 0xEE, 0x73, 0x6C, 0x73, 0x8D, 0xA4, 0xF2, 0x7B, 0xCE, 0x73, 0x6C, 0x6B, 0x2B, 0x42, 0x46, 0x84, 0x6C, 0xAE, 0x31, 0xCF, 0x36, 0xC7, 0x16, 0xC7, 0x16, 0xD7, 0x57, 0xAD, 0xB2, 0x52, 0xA9, 0x4A, 0x69, 0x42, 0x28, 0x63, 0x0B, 0x5A, 0xAA, 0x84, 0x0F, 0xA4, 0xD2, 0x62, 0xEA, 0x6B, 0x6B, 0x94, 0x6F, 0xAD, 0x11, 0xA4, 0xD0, 0xA4, 0xF0, 0x83, 0xCC, 0x52, 0x68, 0x5A, 0xA9, 0x52, 0x89, 0x42, 0x07, 0x31, 0x85, 0x39, 0xC6, 0x39, 0xC6, 0x39, 0xC6, 0x29, 0x65, 0x21, 0x03, 0x39, 0xC7, 0x63, 0x2C, 0x63, 0x0C, 0x6B, 0x4D, 0xBD, 0xD7, 0xE7, 0x1C, 0xDE, 0xFC, 0xC6, 0x39, 0xEF, 0x7E, 0xEF, 0x7E, 0xE7, 0x3D, 0xC5, 0xF7, 0xA5, 0x11, 0xA5, 0x8F, 0xAD, 0xD0, 0xAD, 0x2F, 0x9C, 0xAE, 0xA4, 0xF0, 0xBD, 0xB3, 0x83, 0xCC, 0xA4, 0xAF, 0xAC, 0xF0, 0xAC, 0xD0, 0xA4, 0xB0, 0x9C, 0x8F, 0xA4, 0xD0, 0x9C, 0x4F, 0x94, 0x0E, 0x8B, 0xCD, 0x7B, 0x8C, 0x9C, 0x70, 0xA4, 0xD1, 0xA4, 0xF1, 0xBD, 0x94, 0xB5, 0x53, 0xAD, 0x12, 0xAD, 0x12, 0xB5, 0x33, 0xB5, 0x53, 0xB5, 0x53, 0xB5, 0x33, 0xB5, 0x53, 0x83, 0xEE, 0x62, 0xEB, 0x6B, 0x2B, 0x52, 0x48, 0x4A, 0x48, 0x39, 0xE7, 0x39, 0xC6, 0x42, 0x07, 0x42, 0x07, 0x52, 0x69, 0x5A, 0xAB, 0x7B, 0x8E, 0x8C, 0x31, 0xB5, 0x75, 0xCD, 0xF7, 0xCD, 0xF8, 0xBD, 0x55, 0x73, 0x6E, 0x84, 0x31, 0x6B, 0x4D, 0x39, 0xC7, 0x4A, 0x49, 0x5A, 0xAA, 0x39, 0xC6, 0x39, 0xC6, 0x29, 0x24, 0x18, 0xE3, 0x21, 0x03, 0x8C, 0x51, 0xD6, 0x9A, 0xAD, 0x55, 0xA4, 0xF4, 0xBD, 0xD7, 0xBD, 0x96, 0xBD, 0xB6, 0xE6, 0xDB, 0xC5, 0xD7, 0x7B, 0xAF, 0x94, 0x92, 0x94, 0x71, 0xBD, 0x75, 0xD6, 0x58, 0xD6, 0x38, 0xC5, 0xD7, 0xAC, 0xF2, 0xBD, 0x73, 0xD6, 0x36, 0xDE, 0x96, 0xE6, 0xB7, 0xCD, 0xF4, 0xE6, 0x97, 0xAC, 0xF1, 0x52, 0xAB, 0x73, 0x8F, 0x94, 0x93, 0xB5, 0xB7, 0xD6, 0xBA, 0xD6, 0x99, 0xC5, 0xF5, 0xE6, 0xD9, 0xD6, 0x56, 0xA4, 0xD1, 0x94, 0x4F, 0x9C, 0x6F, 0x9C, 0x8F, 0x94, 0x2E, 0x94, 0x4F, 0x94, 0x4E, 0xA4, 0xB0, 0x9C, 0xB0, 0xA4, 0xB0, 0xA4, 0xD0, 0xA4, 0xB0, 0xAC, 0xD1, 0xAD, 0x11, 0xAC, 0xD0, 0xA4, 0xB0, 0xA4, 0x6F, 0xA4, 0xB0, 0xAC, 0xD0, 0xB5, 0x11, 0xB5, 0x12, 0xBD, 0x33, 0xCD, 0xB4, 0xC5, 0xB5, 0xB5, 0x54, 0xD6, 0x59, 0xE6, 0xDB, 0xE6, 0xBA, 0xC5, 0xD6, 0x83, 0xAE, 0x83, 0xAE, 0x8C, 0x0F, 0x94, 0x51, 0x94, 0x30, 0x8C, 0x10, 0x8B, 0xEF, 0x41, 0xE7, 0x39, 0xA6, 0x41, 0xC7, 0x52, 0x69, 0x5A, 0x69, 0x4A, 0x07, 0x31, 0x65, 0x29, 0x24, 0x29, 0x04, 0x29, 0x24, 0x20, 0xE3, 0x21, 0x24, 0x4A, 0x29, 0x7B, 0xAF, 0x8C, 0x51, 0x63, 0x0B, 0xAD, 0x33, 0xCE, 0x15, 0xCD, 0xF4, 0xCD, 0xF4, 0xCD, 0xF4, 0xCD, 0xF4, 0xD6, 0x14, 0xCD, 0xF4, 0xD6, 0x35, 0xD6, 0x15, 0xC5, 0xD4, 0xC5, 0xB3, 0xCD, 0xF4, 0xD6, 0x35, 0xCE, 0x15, 0x8C, 0x6E, 0x5B, 0xAA, 0x5B, 0xCA, 0x3A, 0xE7, 0x3A, 0xA7, 0x32, 0x65, 0x2A, 0x25, 0x2A, 0x04, 0x21, 0xA3, 0x21, 0xC3, 0x2A, 0x44, 0x2A, 0x24, 0x3A, 0x86, 0x42, 0xE7, 0x2A, 0x44, 0x32, 0x45, 0x32, 0x65, 0x2A, 0x44, 0x2A, 0x44, 0x32, 0x65, 0x3A, 0xA6, 0x29, 0xC4, 0x11, 0x02, 0x74, 0x4C, 0x9C, 0xD3, 0x62, 0xEB, 0x6B, 0x4B, 0x73, 0x4B, 0x73, 0x4A, 0x83, 0xCC, 0x7B, 0x8B, 0x73, 0x4A, 0x83, 0xCC, 0x94, 0x2D, 0x83, 0xCC, 0x8C, 0x0D, 0x9C, 0xB0, 0xA4, 0xB0, 0x9C, 0xAF, 0xA4, 0xF0, 0xAD, 0x11, 0xB5, 0x51, 0xF7, 0xBE, 0x84, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x41, 0xFF, 0xDF, 0xE6, 0xFA, 0xB5, 0x52, 0xA4, 0x8E, 0xAC, 0xCF, 0xA4, 0xAE, 0xA4, 0xAF, 0xA4, 0xAF, 0xA4, 0xAE, 0xA4, 0x8E, 0x9C, 0x8E, 0x9C, 0x6E, 0x9C, 0x6E, 0x9C, 0x4D, 0x9C, 0x6E, 0xA4, 0x8E, 0xA4, 0xAE, 0xA4, 0xCE, 0xAC, 0xCF, 0xAC, 0xEF, 0xAC, 0xEF, 0xAC, 0xEF, 0xA4, 0xAE, 0x94, 0x0C, 0x94, 0x2C, 0x94, 0x4D, 0x9C, 0x6D, 0x9C, 0x6E, 0x9C, 0xAE, 0x9C, 0xAE, 0xAD, 0x11, 0xC6, 0x37, 0xF7, 0x9E, 0x63, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDE, 0xDB, 0xF7, 0x9E, 0xB6, 0x11, 0x95, 0x0D, 0x84, 0x8B, 0xAD, 0xEF, 0xA5, 0x8D, 0xE7, 0x14, 0xEF, 0x15, 0xEE, 0xF5, 0xE6, 0xB5, 0xEF, 0x3A, 0xEF, 0x1A, 0xF7, 0x3A, 0xF7, 0x3A, 0xEF, 0x19, 0xD6, 0x15, 0xBD, 0xB5, 0xDE, 0xFA, 0xD6, 0x78, 0xC6, 0x37, 0xC5, 0xF6, 0xB5, 0x95, 0xC5, 0xF7, 0xCE, 0x58, 0xCE, 0x58, 0xC6, 0x17, 0xBD, 0xD6, 0x9C, 0xB1, 0x52, 0xA8, 0x9D, 0x30, 0xB6, 0x73, 0xA6, 0x11, 0xA6, 0x11, 0xAE, 0x53, 0xAD, 0xB2, 0x7C, 0x0D, 0x5A, 0xCA, 0x4A, 0x89, 0x42, 0x28, 0x4A, 0x69, 0x7B, 0xCE, 0xA5, 0x34, 0x5A, 0xCA, 0x73, 0x8C, 0x84, 0x0D, 0x8C, 0x0D, 0x9C, 0xB0, 0x9C, 0x8F, 0x9C, 0x6F, 0x8C, 0x0E, 0x8C, 0x0E, 0x9C, 0xB0, 0x6B, 0x2B, 0x41, 0xE7, 0x31, 0x85, 0x31, 0xA6, 0x39, 0xC6, 0x31, 0x85, 0x18, 0xE2, 0x29, 0x24, 0x39, 0xC6, 0x5A, 0xCB, 0x6B, 0x6D, 0x6B, 0x6E, 0xA5, 0x14, 0xA5, 0x15, 0xBD, 0xF8, 0xAD, 0x55, 0xD6, 0xBB, 0xDE, 0xDB, 0xEF, 0x5D, 0xC6, 0x38, 0xD6, 0xB9, 0xD6, 0xF8, 0xD6, 0xF8, 0xDF, 0x18, 0xC6, 0x14, 0xC5, 0xF4, 0xAD, 0x51, 0x94, 0x4E, 0xA4, 0xF0, 0xA4, 0xD0, 0xAC, 0xD0, 0xA4, 0xB0, 0xB5, 0x11, 0xBD, 0x52, 0xC5, 0x72, 0xB5, 0x11, 0xA4, 0x6F, 0x7B, 0x8C, 0xAD, 0x12, 0xB5, 0x53, 0xC5, 0xF5, 0xBD, 0xB4, 0xAD, 0x32, 0x7B, 0x8C, 0x62, 0xEA, 0x63, 0x2A, 0x6B, 0x4B, 0x6B, 0x4B, 0x73, 0x6B, 0x7B, 0x8D, 0x94, 0x50, 0xA4, 0xD1, 0x7B, 0x8C, 0x62, 0xEA, 0x4A, 0x48, 0x4A, 0x48, 0x42, 0x28, 0x4A, 0x28, 0x52, 0x89, 0x5A, 0xAA, 0x5A, 0xAB, 0x5A, 0xAA, 0x62, 0xEC, 0x7B, 0xCF, 0x94, 0x30, 0x94, 0x72, 0x83, 0xCF, 0x52, 0x49, 0x4A, 0x69, 0x31, 0x65, 0x31, 0xA6, 0x5A, 0xEB, 0x5A, 0xCA, 0x42, 0x28, 0x39, 0xA6, 0x21, 0x24, 0x29, 0x65, 0x31, 0xA6, 0x73, 0xAE, 0xCE, 0x38, 0xC6, 0x38, 0xDE, 0xDB, 0xCE, 0x59, 0xBD, 0xB6, 0x84, 0x10, 0xB5, 0x96, 0xD6, 0x39, 0xC5, 0xB7, 0x83, 0xCF, 0x52, 0x6A, 0x52, 0x8A, 0x73, 0x6E, 0xAD, 0x14, 0xD6, 0x59, 0xB5, 0x54, 0x83, 0xEF, 0x8B, 0xEE, 0x94, 0x4F, 0x9C, 0x6F, 0x94, 0x0E, 0x9C, 0x6F, 0x5A, 0x68, 0x39, 0xC7, 0x52, 0x8B, 0x6B, 0x6E, 0x8C, 0x93, 0xAD, 0x55, 0x83, 0xF0, 0xA5, 0x34, 0xE6, 0xFA, 0xCE, 0x16, 0x9C, 0xB1, 0x8C, 0x0E, 0x94, 0x2E, 0x9C, 0x6F, 0x83, 0xCD, 0x83, 0xCD, 0x83, 0xED, 0xA4, 0xB0, 0x9C, 0xB0, 0xAC, 0xF1, 0xAC, 0xF1, 0xAC, 0xF1, 0xB5, 0x11, 0xA4, 0xD0, 0xA4, 0xD1, 0xAC, 0xF1, 0xAC, 0xF1, 0xAC, 0xF1, 0x9C, 0x6F, 0x9C, 0x91, 0xCD, 0xD6, 0xD6, 0x17, 0xDE, 0x99, 0xDE, 0x78, 0xBD, 0x95, 0xCE, 0x18, 0xD6, 0x38, 0xBD, 0x96, 0x9C, 0x71, 0x73, 0x6D, 0x62, 0xEB, 0x83, 0xAE, 0x8B, 0xEF, 0x73, 0x6D, 0x73, 0x2C, 0x73, 0x4C, 0x52, 0x48, 0x5A, 0xAA, 0x52, 0x69, 0x31, 0x65, 0x41, 0xE7, 0x62, 0xEB, 0x41, 0xE7, 0x52, 0x69, 0x31, 0x45, 0x5A, 0xCB, 0x7B, 0xCF, 0xAD, 0x55, 0xC5, 0xF7, 0x9C, 0xF3, 0x84, 0x0F, 0xA4, 0xD1, 0xD6, 0x76, 0xD6, 0x15, 0xD6, 0x35, 0xCD, 0xF4, 0xCD, 0xF4, 0xC5, 0x93, 0xCD, 0xF4, 0xCD, 0xF4, 0xD6, 0x55, 0xDE, 0x96, 0xD6, 0x14, 0xCD, 0xF4, 0xCD, 0xF4, 0xD6, 0x14, 0xBD, 0xD3, 0x63, 0x8A, 0x6C, 0x2B, 0x64, 0x0A, 0x53, 0x89, 0x63, 0xEB, 0x53, 0x49, 0x2A, 0x24, 0x19, 0x82, 0x21, 0x83, 0x2A, 0x05, 0x21, 0xE3, 0x22, 0x03, 0x5B, 0xC9, 0x53, 0xA8, 0x43, 0x07, 0x4B, 0x48, 0x53, 0x68, 0x43, 0x27, 0x43, 0x07, 0x4B, 0x48, 0x53, 0x88, 0x3A, 0x86, 0x10, 0xE1, 0x21, 0xA3, 0x52, 0x89, 0x62, 0xEA, 0x73, 0x6B, 0x83, 0xCC, 0x83, 0xAB, 0x83, 0xCC, 0x94, 0x4D, 0x9C, 0x6E, 0xA4, 0xAF, 0x9C, 0x8E, 0x83, 0xEC, 0x83, 0xCC, 0x83, 0xED, 0xA4, 0xD0, 0xAC, 0xF1, 0xB5, 0x51, 0xBD, 0x72, 0xC5, 0xB3, 0xF7, 0xBE, 0x9C, 0xD3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xC3, 0xFF, 0xDF, 0xE6, 0xFA, 0xBD, 0x72, 0x8B, 0xEB, 0xA4, 0xAE, 0xA4, 0xAF, 0xA4, 0x8E, 0x94, 0x2C, 0xA4, 0x8E, 0xBD, 0x31, 0xB5, 0x10, 0xA4, 0xAE, 0x9C, 0x6D, 0xA4, 0xAF, 0xA4, 0xAE, 0xA4, 0xAE, 0xB5, 0x0F, 0xB5, 0x0F, 0xB5, 0x0F, 0xBD, 0x51, 0xB5, 0x10, 0xAC, 0xCF, 0xAC, 0xEF, 0xB5, 0x30, 0xAC, 0xEF, 0xAC, 0xEF, 0xAC, 0xEF, 0xA4, 0xAE, 0xA4, 0x8E, 0x9C, 0x4D, 0xA4, 0x8E, 0xBD, 0xB4, 0xEF, 0x5C, 0xDE, 0xBA, 0x08, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x0C, 0xFF, 0xDE, 0xDE, 0xDA, 0xA5, 0x90, 0x6B, 0xE9, 0x95, 0x2E, 0xBE, 0x51, 0xBE, 0x6F, 0xBE, 0x4E, 0xC6, 0x4E, 0xCE, 0x50, 0xC5, 0xD1, 0xF7, 0xBE, 0xF7, 0xBE, 0xF7, 0xBE, 0xF7, 0xBE, 0xEF, 0x3B, 0xCE, 0x37, 0xE7, 0x1C, 0xF7, 0x9E, 0xF7, 0x9E, 0xF7, 0x9D, 0xE7, 0x3C, 0xCE, 0x79, 0xE7, 0x3C, 0xF7, 0x9E, 0xF7, 0x9E, 0xEF, 0x7D, 0xDE, 0xDB, 0xA4, 0xF2, 0x6B, 0x6B, 0x94, 0xCF, 0xB6, 0x53, 0xA6, 0x11, 0xAE, 0x11, 0xA5, 0xB1, 0x94, 0x8E, 0x62, 0xEA, 0x5A, 0xCA, 0x52, 0x89, 0x39, 0xC7, 0x7B, 0xEF, 0xA5, 0x34, 0x5A, 0xEA, 0x73, 0x6B, 0x9C, 0xB0, 0x83, 0xCC, 0x83, 0xED, 0x9C, 0x8F, 0x9C, 0x6F, 0x9C, 0x8F, 0x9C, 0xAF, 0x94, 0x6F, 0xA4, 0xF1, 0x6B, 0x0A, 0x62, 0xEA, 0x52, 0xA9, 0x4A, 0x48, 0x39, 0xC6, 0x31, 0xC6, 0x31, 0xA6, 0x31, 0x86, 0x39, 0xE7, 0x4A, 0x69, 0x63, 0x2D, 0x6B, 0x4D, 0x94, 0x72, 0x6B, 0x6E, 0xAD, 0x76, 0xDE, 0xDC, 0xA5, 0x35, 0xAD, 0x35, 0xEF, 0x5D, 0xE7, 0x3C, 0xF7, 0x9D, 0xF7, 0xDE, 0xF7, 0xBE, 0xF7, 0xBD, 0xD6, 0xB7, 0xD6, 0x95, 0xAD, 0x10, 0xAC, 0xF0, 0xAD, 0x10, 0xB5, 0x31, 0xB5, 0x31, 0xBD, 0x31, 0xC5, 0x92, 0xC5, 0x72, 0xC5, 0x72, 0xCD, 0x72, 0xAC, 0xCF, 0x8C, 0x0E, 0xB5, 0x53, 0xBD, 0xB4, 0xCE, 0x36, 0xBD, 0x93, 0xCE, 0x15, 0xBD, 0xB4, 0xB5, 0x53, 0xA5, 0x12, 0xA4, 0xF1, 0x9C, 0x90, 0xA4, 0xD1, 0x94, 0x50, 0x7B, 0x6D, 0x94, 0x2F, 0xBD, 0x93, 0xBD, 0xB4, 0x83, 0xEE, 0x63, 0x0B, 0x62, 0xEB, 0x63, 0x0B, 0x73, 0x6D, 0x83, 0xF0, 0x9C, 0xB2, 0x7B, 0xAE, 0x52, 0x6A, 0x4A, 0x29, 0x5A, 0xCB, 0x6B, 0x4D, 0x52, 0x8A, 0x39, 0xE7, 0x29, 0x45, 0x29, 0x24, 0x31, 0xA6, 0x42, 0x28, 0x31, 0xC6, 0x39, 0xC6, 0x29, 0x65, 0x21, 0x24, 0x31, 0x85, 0x39, 0xC6, 0x6B, 0x6D, 0xCE, 0x39, 0xEF, 0x7D, 0xF7, 0x9E, 0xF7, 0xBE, 0xEF, 0x5D, 0xB5, 0x96, 0xC5, 0xB7, 0xD6, 0x39, 0xCE, 0x18, 0xCE, 0x38, 0x94, 0x92, 0x63, 0x0D, 0xA5, 0x14, 0xBD, 0xD7, 0xD6, 0x58, 0xB5, 0x55, 0xC5, 0xB6, 0xC5, 0xD6, 0xB5, 0x33, 0xB5, 0x33, 0xB5, 0x33, 0xB5, 0x33, 0x94, 0x50, 0x42, 0x08, 0x42, 0x08, 0x4A, 0x8A, 0x63, 0x4D, 0x7B, 0xF0, 0x7C, 0x11, 0xA5, 0x55, 0xC6, 0x18, 0xDE, 0xDB, 0xC6, 0x17, 0xB5, 0x75, 0xAD, 0x13, 0x9C, 0xB1, 0x8B, 0xEE, 0x83, 0xCD, 0x83, 0xCD, 0x8B, 0xEE, 0x8C, 0x0E, 0xA4, 0xD0, 0xAC, 0xF1, 0x9C, 0x6F, 0xAC, 0xF1, 0x8C, 0x0E, 0x8C, 0x0E, 0x9C, 0x90, 0x9C, 0x91, 0xCD, 0xF6, 0x7B, 0xAE, 0xA4, 0xD3, 0xBD, 0x96, 0xC5, 0xB6, 0xDE, 0x58, 0xC5, 0xB6, 0xA4, 0xF3, 0xBD, 0x96, 0xBD, 0x96, 0xBD, 0x75, 0x8C, 0x10, 0x7B, 0x6D, 0x5A, 0x89, 0x6B, 0x2C, 0x6B, 0x0C, 0x6B, 0x0C, 0x62, 0xCB, 0x5A, 0x8A, 0x52, 0x49, 0x4A, 0x28, 0x31, 0x65, 0x52, 0x69, 0x8C, 0x10, 0xA4, 0xF3, 0xB5, 0x96, 0xBD, 0xD7, 0x83, 0xEF, 0xBD, 0xB7, 0x9C, 0xF3, 0x8C, 0x71, 0x73, 0x6E, 0x52, 0x6A, 0x83, 0xCE, 0xBD, 0xB4, 0xD6, 0x15, 0xBD, 0x72, 0xC5, 0xB3, 0xC5, 0x92, 0xBD, 0x72, 0xBD, 0x93, 0xCD, 0xF4, 0xD6, 0x35, 0xE6, 0x96, 0xEE, 0xD7, 0xE6, 0x96, 0xD6, 0x55, 0xDE, 0x55, 0xDE, 0x76, 0xAD, 0x51, 0x74, 0x6D, 0x64, 0x0B, 0x64, 0x0A, 0x3A, 0xE7, 0x3A, 0xC6, 0x4B, 0x28, 0x3A, 0x86, 0x2A, 0x05, 0x42, 0xE8, 0x32, 0x25, 0x3A, 0x87, 0x2A, 0x24, 0x53, 0xA8, 0x64, 0x4A, 0x4B, 0x88, 0x53, 0xA9, 0x64, 0x2A, 0x5B, 0xE9, 0x53, 0xC9, 0x5C, 0x0A, 0x53, 0x88, 0x22, 0x04, 0x11, 0x22, 0x10, 0xE2, 0x4A, 0x48, 0x62, 0xEA, 0x8C, 0x0D, 0x8C, 0x2D, 0x9C, 0x8E, 0xAD, 0x31, 0xB5, 0x71, 0xB5, 0x51, 0xB5, 0x30, 0xB5, 0x71, 0xB5, 0x51, 0xB5, 0x51, 0xBD, 0x93, 0xA4, 0xD0, 0xA4, 0xB0, 0xBD, 0x72, 0xAD, 0x10, 0xB5, 0x31, 0xF7, 0x9D, 0x9C, 0xD3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xE3, 0xFF, 0xDF, 0xEF, 0x3B, 0xD6, 0x55, 0xAD, 0x30, 0xD6, 0x76, 0xD6, 0x56, 0xCE, 0x15, 0xC5, 0xD4, 0xC5, 0xB4, 0xD6, 0x15, 0xC5, 0x92, 0x9C, 0x6D, 0xAC, 0xF0, 0xBD, 0x93, 0xC5, 0xD4, 0xBD, 0x73, 0xC5, 0xD4, 0xD6, 0x34, 0xA4, 0xAE, 0xBD, 0x51, 0xB5, 0x31, 0xC5, 0xD4, 0xDE, 0x77, 0xDE, 0x97, 0xCE, 0x15, 0xDE, 0x55, 0xD6, 0x34, 0xB5, 0x30, 0xC5, 0xB2, 0xBD, 0x31, 0xC5, 0x92, 0xCE, 0x16, 0xEF, 0x1B, 0xFF, 0xDF, 0xE7, 0x1C, 0x73, 0xAE, 0x5A, 0xEB, 0x9C, 0xF3, 0xFF, 0xDE, 0xF7, 0x7C, 0xCE, 0x56, 0x63, 0x88, 0x5B, 0xC7, 0x95, 0x4E, 0xBE, 0x71, 0xAE, 0x4D, 0xB6, 0x4C, 0xB6, 0x4C, 0xBE, 0x6D, 0xBD, 0xEF, 0xFF, 0xFF, 0xD6, 0x9A, 0x73, 0xAE, 0xE7, 0x1C, 0xEF, 0x5D, 0xD6, 0x78, 0xF7, 0x9D, 0xC6, 0x18, 0x73, 0xAE, 0xAD, 0x75, 0xF7, 0x9E, 0xDE, 0xBA, 0xF7, 0x9E, 0xCE, 0x59, 0x73, 0xAE, 0xEF, 0x3C, 0xDE, 0xFB, 0x94, 0x70, 0x83, 0xCC, 0x94, 0x8E, 0x9D, 0x2F, 0xA5, 0xF1, 0x9D, 0x6F, 0x94, 0xAD, 0x9C, 0xCF, 0x9C, 0xB0, 0x94, 0x6F, 0x8C, 0x2E, 0x94, 0x91, 0x9C, 0xD3, 0x52, 0x89, 0x6B, 0x4B, 0x9C, 0xAF, 0x9C, 0x8F, 0x7B, 0xAC, 0xAD, 0x72, 0xC6, 0x56, 0xBE, 0x14, 0xC6, 0x74, 0xC6, 0x74, 0xAD, 0x92, 0x9C, 0x8F, 0x83, 0xED, 0x52, 0x68, 0x5A, 0xCA, 0x62, 0xEA, 0x62, 0xEA, 0x4A, 0x48, 0x39, 0xC6, 0x31, 0x85, 0x39, 0xE6, 0x42, 0x07, 0x5A, 0xCB, 0x5A, 0xEB, 0x7B, 0xF0, 0x9C, 0xD3, 0xBD, 0xF8, 0xC6, 0x39, 0xCE, 0x7A, 0x7B, 0xCF, 0xAD, 0x56, 0xF7, 0x9E, 0xFF, 0xFF, 0x7B, 0xEF, 0xB5, 0x96, 0xF7, 0xBE, 0xD6, 0xB8, 0xD6, 0x75, 0xC5, 0x92, 0xBD, 0x51, 0xC5, 0x31, 0xCD, 0xB2, 0xCD, 0x92, 0xC5, 0x72, 0xCD, 0x92, 0xC5, 0x72, 0xCD, 0x92, 0xD5, 0xD3, 0xC5, 0x72, 0xA4, 0xD0, 0xB5, 0x53, 0xBD, 0x93, 0xBD, 0xB3, 0xB5, 0x52, 0xCE, 0x35, 0xC5, 0xF5, 0xC5, 0xD5, 0xBD, 0xB5, 0xBD, 0x94, 0xBD, 0x94, 0xC5, 0xD5, 0x83, 0xEE, 0x20, 0xE3, 0x94, 0x51, 0xBD, 0x94, 0xBD, 0xB4, 0xB5, 0x74, 0xAD, 0x54, 0xBD, 0xF7, 0xC6, 0x18, 0xC5, 0xF8, 0xC5, 0xF7, 0xBD, 0xB6, 0xAD, 0x55, 0x5A, 0xAB, 0x42, 0x08, 0x41, 0xE7, 0x42, 0x28, 0x42, 0x28, 0x41, 0xE7, 0x29, 0x65, 0x29, 0x45, 0x31, 0x85, 0x29, 0x65, 0x18, 0xE3, 0x29, 0x65, 0x29, 0x44, 0x21, 0x24, 0x29, 0x65, 0x39, 0xC6, 0x7B, 0xCE, 0xD6, 0xBA, 0xF7, 0x9E, 0x73, 0xAE, 0xC6, 0x18, 0xF7, 0x9E, 0xDE, 0xBA, 0xDE, 0x9A, 0xCE, 0x18, 0xC5, 0xD7, 0xBD, 0x76, 0xC5, 0xF7, 0x94, 0x92, 0x7B, 0x8E, 0x8C, 0x31, 0xAD, 0x34, 0xBD, 0xB6, 0xE7, 0x1B, 0xDE, 0xBA, 0xDE, 0x99, 0xC5, 0xB5, 0xAC, 0xF2, 0xC5, 0xD5, 0xBD, 0x94, 0x94, 0x70, 0x52, 0xA9, 0x42, 0x08, 0x4A, 0x6A, 0x52, 0xAB, 0x6B, 0x6F, 0x8C, 0x52, 0xC6, 0x18, 0xEF, 0x5D, 0xF7, 0xBE, 0xF7, 0xBE, 0xEF, 0x5C, 0xD6, 0x99, 0xB5, 0x53, 0xAC, 0xF2, 0xA4, 0xF1, 0x9C, 0x70, 0xA4, 0xF2, 0xBD, 0x94, 0xA4, 0xB1, 0xAD, 0x33, 0xB5, 0x33, 0xB5, 0x54, 0xB5, 0x54, 0xD6, 0x18, 0xE6, 0xBA, 0xF7, 0x5C, 0x94, 0x71, 0xBD, 0xB7, 0xBD, 0x96, 0xCE, 0x18, 0xC5, 0xB7, 0xB5, 0x55, 0x9C, 0x72, 0xB5, 0x34, 0xA4, 0xD3, 0x83, 0xAE, 0x62, 0xCA, 0x62, 0xCA, 0x5A, 0x69, 0x5A, 0x8A, 0x5A, 0xAA, 0x5A, 0x89, 0x52, 0x28, 0x52, 0x49, 0x5A, 0x8A, 0x39, 0xC7, 0x20, 0xE4, 0x73, 0x8E, 0xA4, 0xF3, 0xA4, 0xD3, 0x9C, 0xD3, 0x84, 0x10, 0xA4, 0xF2, 0xB5, 0x33, 0xBD, 0x94, 0xBD, 0xB4, 0x94, 0x91, 0x9C, 0xB2, 0x94, 0x70, 0xCE, 0x15, 0xD6, 0x15, 0xC5, 0x93, 0xD6, 0x35, 0xBD, 0x72, 0xC5, 0xB3, 0xDE, 0x75, 0xDE, 0x96, 0xE6, 0x96, 0xE6, 0x96, 0xDE, 0x75, 0xDE, 0x75, 0xD6, 0x55, 0xE6, 0x96, 0xE6, 0xD7, 0xAD, 0x92, 0x63, 0xCA, 0x63, 0xEA, 0x8D, 0x50, 0x5B, 0xAA, 0x43, 0x07, 0x5B, 0x8A, 0x42, 0xC6, 0x43, 0x07, 0x22, 0x04, 0x21, 0xC3, 0x53, 0x69, 0x43, 0x07, 0x4B, 0x47, 0x53, 0xC9, 0x5C, 0x09, 0x6C, 0x8B, 0x74, 0xCC, 0x6C, 0xAB, 0x53, 0xE9, 0x3A, 0xC5, 0x19, 0xE2, 0x19, 0xA2, 0x21, 0xC4, 0x21, 0x64, 0x4A, 0x48, 0x5A, 0xCA, 0x8C, 0x0D, 0x8C, 0x2D, 0x9C, 0x8E, 0xB5, 0x31, 0xB5, 0x51, 0xAD, 0x30, 0xBD, 0x71, 0xB5, 0x30, 0xB5, 0x30, 0xBD, 0x71, 0xCE, 0x14, 0xA4, 0xB0, 0x9C, 0x6F, 0xCE, 0x15, 0xAD, 0x10, 0xAD, 0x10, 0xF7, 0x9E, 0x9C, 0xD3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xE3, 0xFF, 0xDF, 0xEF, 0x3B, 0xDE, 0x97, 0x9C, 0xB0, 0xDE, 0xD9, 0xEF, 0x5B, 0xEF, 0x5C, 0xEF, 0x5C, 0xE7, 0x1B, 0xDE, 0x98, 0xD6, 0x35, 0xAD, 0x11, 0xD6, 0x78, 0xE7, 0x1B, 0xEF, 0x7C, 0xEF, 0x5C, 0xEF, 0x3B, 0xEE, 0xF9, 0xB5, 0x52, 0xE6, 0xB7, 0xEF, 0x1A, 0xF7, 0x7D, 0xFF, 0xBE, 0xF7, 0x9D, 0xEF, 0x3B, 0xEF, 0x19, 0xD6, 0x55, 0xAC, 0xCF, 0xCD, 0xD3, 0xA4, 0xD0, 0xC5, 0xF6, 0xE7, 0x1B, 0xFF, 0xBE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xF7, 0x9D, 0xEF, 0x3B, 0xD6, 0x97, 0xCE, 0x35, 0x63, 0x88, 0x6C, 0x29, 0x95, 0x2E, 0xAD, 0xAF, 0xBE, 0x4F, 0xB6, 0x2F, 0xBE, 0x6E, 0xB6, 0x2D, 0xBE, 0x50, 0xFF, 0xFF, 0xA5, 0x34, 0x00, 0x00, 0xCE, 0x79, 0xEF, 0x7D, 0xD6, 0x98, 0xF7, 0x9D, 0x8C, 0x71, 0x00, 0x00, 0x6B, 0x4D, 0xF7, 0xBE, 0xE6, 0xFB, 0xF7, 0xBE, 0x9C, 0xF3, 0x00, 0x00, 0xDE, 0xDB, 0xEF, 0x3C, 0xBD, 0x73, 0xB5, 0x10, 0xB5, 0x10, 0xA5, 0x0F, 0x9D, 0x2F, 0xA5, 0x2E, 0xA5, 0x0F, 0x94, 0x6E, 0xAD, 0x52, 0xA5, 0x10, 0xC5, 0xD4, 0xAD, 0x33, 0x4A, 0x68, 0x7B, 0xCD, 0x94, 0xAF, 0x8C, 0x0C, 0x73, 0x6A, 0xA5, 0x72, 0xC6, 0x76, 0xDF, 0x3A, 0xCE, 0xF6, 0xC6, 0xB4, 0xB6, 0x52, 0xBE, 0x33, 0xA4, 0xF0, 0x8C, 0x2E, 0x52, 0x48, 0x5A, 0xA9, 0x63, 0x0A, 0x6B, 0x2B, 0x7B, 0xCD, 0x73, 0x8D, 0x42, 0x07, 0x31, 0xC6, 0x39, 0xE6, 0x42, 0x07, 0x4A, 0x69, 0x63, 0x0C, 0x8C, 0x72, 0xB5, 0xB7, 0xAD, 0x76, 0x9C, 0xD3, 0x6B, 0x6E, 0xCE, 0x7A, 0xEF, 0x7E, 0xFF, 0xFF, 0x08, 0x41, 0x6B, 0x6D, 0xF7, 0x9E, 0xBD, 0xD6, 0xA4, 0xF2, 0xAD, 0x11, 0xCD, 0xB3, 0xD5, 0xB2, 0xDE, 0x14, 0xD5, 0xF3, 0xC5, 0x51, 0xC5, 0x71, 0xC5, 0x51, 0xCD, 0x92, 0xDD, 0xF3, 0xDD, 0xF4, 0x9C, 0x6F, 0xB5, 0x53, 0xB5, 0x73, 0xBD, 0xB4, 0xC5, 0xD4, 0xC5, 0xF5, 0xBD, 0xB4, 0xBD, 0xB4, 0xBD, 0x94, 0xBD, 0x94, 0xBD, 0xB5, 0xC5, 0xD5, 0x83, 0xAE, 0x52, 0x69, 0xB5, 0x34, 0xBD, 0x95, 0xCE, 0x37, 0xD6, 0x79, 0xD6, 0x79, 0xC6, 0x18, 0xCE, 0x59, 0xBD, 0xB6, 0xA5, 0x14, 0x9C, 0x92, 0x94, 0x71, 0x5A, 0xAA, 0x41, 0xE7, 0x42, 0x08, 0x42, 0x08, 0x39, 0xC7, 0x31, 0x86, 0x31, 0x86, 0x21, 0x24, 0x31, 0x85, 0x31, 0xA6, 0x31, 0x86, 0x39, 0xA6, 0x29, 0x44, 0x21, 0x03, 0x29, 0x44, 0x4A, 0x48, 0x84, 0x0F, 0xDE, 0xDB, 0xEF, 0x7D, 0x00, 0x00, 0x8C, 0x51, 0xF7, 0x9E, 0xE6, 0xDB, 0xD6, 0x59, 0xC5, 0xF7, 0xD6, 0x59, 0xAD, 0x34, 0xB5, 0x76, 0xCE, 0x59, 0xBD, 0xD7, 0x73, 0x4E, 0x7B, 0xAF, 0x94, 0x92, 0xD6, 0x79, 0xEF, 0x1C, 0xBD, 0xB6, 0xA5, 0x13, 0x94, 0x51, 0xC5, 0xB6, 0xDE, 0xB9, 0xC5, 0xB5, 0xB5, 0x74, 0x5A, 0xAA, 0x39, 0xC7, 0x42, 0x28, 0x5A, 0xCC, 0x84, 0x31, 0xC6, 0x18, 0xF7, 0x9E, 0xEF, 0x5D, 0xDE, 0xFB, 0xF7, 0xBE, 0xD6, 0x79, 0xA4, 0xD3, 0xAC, 0xF3, 0xAD, 0x34, 0x9C, 0xB2, 0x9C, 0x91, 0xB5, 0x55, 0xB5, 0x55, 0xCE, 0x38, 0xD6, 0x58, 0xEE, 0xFA, 0xEF, 0x3C, 0xEE, 0xFB, 0xF7, 0x1C, 0xD6, 0x79, 0x7B, 0xAF, 0x7B, 0xCF, 0xAD, 0x14, 0xCE, 0x18, 0xBD, 0x96, 0x8C, 0x10, 0x7B, 0x4D, 0x6B, 0x0C, 0x5A, 0x69, 0x49, 0xE7, 0x41, 0xC7, 0x49, 0xE7, 0x41, 0xC7, 0x52, 0x49, 0x5A, 0xAA, 0x63, 0x0B, 0x83, 0xEF, 0x9C, 0xD2, 0x7B, 0xAE, 0x5A, 0xAA, 0x31, 0x86, 0x62, 0xCA, 0x7B, 0x8E, 0x73, 0x4D, 0x73, 0x6D, 0x9C, 0x91, 0xC5, 0xF5, 0xD6, 0x35, 0xD6, 0x56, 0xD6, 0x56, 0xAD, 0x32, 0xB5, 0x54, 0xA4, 0xF2, 0xB5, 0x32, 0xB5, 0x11, 0xB5, 0x12, 0xBD, 0x94, 0xBD, 0x94, 0xBD, 0x93, 0xBD, 0x72, 0xC5, 0xD4, 0xCE, 0x14, 0xD6, 0x35, 0xD6, 0x35, 0xD6, 0x35, 0xDE, 0x55, 0xD6, 0x35, 0xD6, 0x35, 0x8C, 0xAF, 0x42, 0xC7, 0x64, 0x0B, 0xA6, 0x13, 0x5B, 0xCA, 0x6C, 0x2C, 0x74, 0x8D, 0x4B, 0x68, 0x32, 0xA4, 0x2A, 0x23, 0x2A, 0x65, 0x53, 0x89, 0x53, 0xA9, 0x64, 0x0A, 0x4B, 0x48, 0x32, 0xA5, 0x5B, 0xE9, 0x6C, 0x8B, 0x85, 0x2D, 0x64, 0x0A, 0x21, 0xE3, 0x19, 0xC3, 0x21, 0xE3, 0x32, 0x66, 0x21, 0x84, 0x52, 0x89, 0x63, 0x0A, 0x83, 0xCC, 0x8C, 0x0C, 0x94, 0x6D, 0xAC, 0xF0, 0xA4, 0xEF, 0xAD, 0x30, 0xB5, 0x30, 0xAD, 0x0F, 0xAC, 0xF0, 0xBD, 0x71, 0xCE, 0x34, 0xA4, 0xAF, 0xA4, 0x8F, 0xB5, 0x72, 0xB5, 0x31, 0xB5, 0x31, 0xF7, 0x9E, 0x9C, 0xD3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xE3, 0xFF, 0xDF, 0xE7, 0x1B, 0xDE, 0xB7, 0xD6, 0x78, 0xF7, 0x7D, 0xFF, 0xDE, 0xEF, 0x7D, 0xE7, 0x3C, 0xFF, 0xDE, 0xF7, 0x9D, 0xE7, 0x1A, 0xDE, 0xDA, 0xFF, 0xBE, 0xF7, 0x9E, 0xC6, 0x18, 0xCE, 0x59, 0xFF, 0xBE, 0xF7, 0x9D, 0xDE, 0xBA, 0xF7, 0x9D, 0xFF, 0xDE, 0xE7, 0x1C, 0xAD, 0x55, 0xC6, 0x38, 0xFF, 0xDF, 0xF7, 0x9D, 0xE6, 0xD8, 0xB5, 0x52, 0xD6, 0x55, 0xCE, 0x37, 0xF7, 0x7D, 0xF7, 0x9E, 0xB5, 0x96, 0xA5, 0x34, 0xE7, 0x1C, 0xFF, 0xFF, 0xEF, 0x7D, 0xDF, 0x19, 0xEF, 0x59, 0xD6, 0x95, 0xD6, 0x97, 0x63, 0x69, 0x7C, 0x6B, 0xB6, 0x12, 0xC6, 0x33, 0xD6, 0xB4, 0xCE, 0x74, 0xC6, 0x52, 0xBE, 0x11, 0xB5, 0xB0, 0xFF, 0xFF, 0xA5, 0x34, 0x00, 0x00, 0xCE, 0x79, 0xEF, 0x7D, 0xE6, 0xFA, 0xF7, 0xBE, 0xBD, 0xD7, 0x63, 0x0C, 0xA5, 0x14, 0xF7, 0xBE, 0xE6, 0xFB, 0xF7, 0xBE, 0x9C, 0xF3, 0x00, 0x00, 0xDE, 0xDB, 0xEF, 0x5C, 0xCE, 0x36, 0xCD, 0xF4, 0xD6, 0x55, 0xCE, 0x14, 0xDE, 0x95, 0xBD, 0x71, 0xAC, 0xEF, 0x8C, 0x0D, 0xB5, 0x53, 0xCE, 0x16, 0xAD, 0x53, 0x73, 0xAD, 0x94, 0xB0, 0xA5, 0x50, 0xA5, 0x4F, 0xA5, 0x0F, 0x9C, 0xCF, 0xC6, 0x55, 0xDF, 0x19, 0xEF, 0x7C, 0xCE, 0xB7, 0xAD, 0xF2, 0x94, 0xEF, 0x94, 0x8E, 0xBD, 0xB4, 0xB5, 0x53, 0x84, 0x0F, 0xA4, 0xD2, 0x9C, 0x91, 0x9C, 0x91, 0xC6, 0x16, 0x8C, 0x6F, 0x8C, 0x70, 0x7B, 0xCD, 0x63, 0x2C, 0x6B, 0x6D, 0x73, 0xAE, 0x84, 0x0F, 0x84, 0x30, 0x94, 0x72, 0x73, 0x8E, 0x63, 0x2D, 0x84, 0x10, 0xC6, 0x18, 0xE7, 0x3D, 0xFF, 0xFF, 0x08, 0x41, 0x6B, 0x6D, 0xF7, 0x9E, 0xC6, 0x18, 0xAD, 0x74, 0xAD, 0x13, 0xD6, 0x36, 0xDE, 0x35, 0xDE, 0x34, 0xDE, 0x34, 0xBD, 0x10, 0xC5, 0x51, 0xCD, 0x92, 0xD5, 0xD2, 0xD5, 0xF3, 0xCD, 0xB3, 0xA4, 0xB0, 0xBD, 0xB4, 0xB5, 0x74, 0xC6, 0x16, 0xCE, 0x36, 0xCE, 0x16, 0xC5, 0xF5, 0xBD, 0xB4, 0xBD, 0xB4, 0xB5, 0x93, 0xB5, 0x53, 0xAD, 0x32, 0x73, 0x4C, 0xA4, 0xD3, 0xCE, 0x17, 0x9C, 0x91, 0x94, 0x71, 0xC6, 0x18, 0xBD, 0xD7, 0x9C, 0xD3, 0x94, 0x71, 0x8C, 0x51, 0x73, 0x8E, 0x63, 0x0C, 0x7B, 0x8E, 0x41, 0xE7, 0x39, 0xA6, 0x31, 0x85, 0x39, 0xC6, 0x31, 0xA6, 0x42, 0x07, 0x5A, 0xCB, 0x6B, 0x2C, 0x6B, 0x4D, 0x6B, 0x6D, 0x73, 0x8E, 0x6B, 0x4D, 0x5A, 0xCA, 0x39, 0xE7, 0x42, 0x07, 0x63, 0x0B, 0x8C, 0x30, 0xDE, 0xDB, 0xF7, 0x7D, 0x00, 0x00, 0x8C, 0x51, 0xF7, 0x9E, 0xCE, 0x59, 0xC5, 0xD7, 0xCE, 0x18, 0xCE, 0x18, 0xAD, 0x35, 0xCE, 0x59, 0xD6, 0x9A, 0xD6, 0x79, 0xA4, 0xF4, 0xC6, 0x18, 0xB5, 0x96, 0x9C, 0xB3, 0xE6, 0xDB, 0xE7, 0x1C, 0xC5, 0xF8, 0xDE, 0xBB, 0xCE, 0x18, 0xBD, 0x96, 0xC5, 0xD6, 0xC5, 0xD6, 0x94, 0x71, 0x6B, 0x4C, 0x5A, 0xCB, 0x7B, 0xF0, 0x9C, 0xF4, 0xCE, 0x59, 0xF7, 0xBE, 0x6B, 0x6D, 0x10, 0x82, 0xFF, 0xDF, 0xE7, 0x3C, 0xCE, 0x58, 0xE6, 0xDA, 0xCE, 0x38, 0xC5, 0xF7, 0xC5, 0xD7, 0xD6, 0x59, 0xDE, 0x79, 0xC5, 0xD6, 0xAD, 0x55, 0xCE, 0x38, 0xCE, 0x59, 0xCE, 0x38, 0xBD, 0xB6, 0x9C, 0x93, 0x6B, 0x0D, 0x5A, 0xAB, 0x41, 0xE8, 0x4A, 0x49, 0x4A, 0x6A, 0x4A, 0x08, 0x41, 0xC7, 0x41, 0xC6, 0x39, 0xA6, 0x31, 0x45, 0x31, 0x45, 0x39, 0xA6, 0x62, 0xEC, 0xAD, 0x55, 0xAD, 0x54, 0xAD, 0x34, 0xA4, 0xF3, 0x94, 0x92, 0x8C, 0x51, 0x84, 0x10, 0x63, 0x0C, 0x62, 0xEB, 0x73, 0x6C, 0xAD, 0x32, 0xBD, 0xB5, 0xBD, 0xD6, 0xBD, 0xD5, 0xBD, 0xB5, 0xBD, 0xB5, 0xC5, 0xD6, 0xCE, 0x17, 0xCE, 0x17, 0xCE, 0x17, 0xCE, 0x37, 0xC5, 0xF6, 0xBD, 0x95, 0xB5, 0x53, 0xB5, 0x53, 0xBD, 0x74, 0xBD, 0x95, 0xBD, 0x94, 0xB5, 0x74, 0xB5, 0x54, 0xAD, 0x33, 0xA4, 0xF2, 0xA4, 0xD1, 0xA4, 0xF2, 0xA5, 0x12, 0x8C, 0x90, 0x8C, 0x90, 0x8C, 0x90, 0x42, 0xE6, 0x2A, 0x43, 0x53, 0x68, 0x32, 0x44, 0x3A, 0xC5, 0x3A, 0xE5, 0x3A, 0xC5, 0x43, 0x07, 0x5B, 0xEA, 0x53, 0xA9, 0x64, 0x4B, 0x3A, 0xC6, 0x22, 0x03, 0x19, 0xC2, 0x43, 0x27, 0x85, 0x2E, 0x74, 0xAC, 0x22, 0x03, 0x19, 0xA3, 0x2A, 0x24, 0x2A, 0x25, 0x21, 0x84, 0x52, 0xA9, 0x63, 0x0A, 0x7B, 0xAC, 0x83, 0xCB, 0x94, 0x2D, 0x9C, 0x8E, 0x9C, 0x8E, 0xA4, 0xCF, 0x94, 0x4D, 0xAD, 0x30, 0xA4, 0xEF, 0xB5, 0x71, 0xCE, 0x34, 0xA4, 0xAF, 0xA4, 0xAF, 0xB5, 0x71, 0xB5, 0x51, 0xB5, 0x72, 0xF7, 0x9E, 0x9C, 0xD3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xE3, 0xFF, 0xDF, 0xE7, 0x1B, 0xDE, 0xB8, 0xEF, 0x7C, 0xEF, 0x7D, 0x52, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x39, 0xE7, 0xE7, 0x1B, 0xFF, 0xDE, 0xFF, 0xBE, 0xD6, 0x9A, 0x21, 0x04, 0x00, 0x00, 0x00, 0x00, 0x31, 0x86, 0xE7, 0x1C, 0xFF, 0xBE, 0xFF, 0xFF, 0x9C, 0xF3, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x42, 0x28, 0xF7, 0xBE, 0xF7, 0x7C, 0xC5, 0xD5, 0xDE, 0xB8, 0xEF, 0x5C, 0xEF, 0x3C, 0x29, 0x65, 0x00, 0x00, 0x00, 0x00, 0x08, 0x41, 0xAD, 0x55, 0xF7, 0xBE, 0xD6, 0xD8, 0xC6, 0x95, 0xE7, 0x58, 0xD6, 0xB6, 0x6B, 0x8A, 0x9D, 0x50, 0xDF, 0x17, 0xE6, 0xD7, 0xE6, 0xD6, 0xDE, 0xB6, 0xDE, 0xB6, 0xDE, 0xB5, 0xDE, 0x75, 0xFF, 0xFF, 0xA5, 0x34, 0x00, 0x00, 0xCE, 0x79, 0xF7, 0x9D, 0xE7, 0x1A, 0xFF, 0xBE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xBE, 0xE6, 0xFA, 0xF7, 0xBE, 0x9C, 0xF3, 0x00, 0x00, 0xDE, 0xDB, 0xF7, 0x9E, 0xE7, 0x1B, 0xEF, 0x3B, 0xEF, 0x5B, 0xE6, 0xFA, 0xDE, 0xB9, 0xC5, 0xF6, 0xAD, 0x32, 0xA5, 0x12, 0xDE, 0xDA, 0xD6, 0x99, 0xC6, 0x38, 0xCE, 0x58, 0xCE, 0x77, 0xAD, 0xB2, 0xA5, 0x6E, 0xB6, 0x31, 0xAD, 0xB2, 0xCE, 0xB8, 0xEF, 0x7C, 0xF7, 0xBE, 0xDF, 0x1B, 0xBE, 0x16, 0x9C, 0xD1, 0x73, 0x6C, 0x7B, 0xAD, 0xAD, 0x74, 0xCE, 0x38, 0xEF, 0x3C, 0xEF, 0x3C, 0xEF, 0x5D, 0xCE, 0x79, 0x7B, 0xEF, 0x94, 0xB1, 0xD6, 0x98, 0xCE, 0x79, 0xCE, 0x59, 0xCE, 0x79, 0xCE, 0x79, 0xC6, 0x38, 0xB5, 0x96, 0x94, 0xB2, 0x8C, 0x51, 0xAD, 0x56, 0xBD, 0xF8, 0xE7, 0x1C, 0xFF, 0xDF, 0x08, 0x41, 0x6B, 0x6D, 0xFF, 0xDF, 0xDE, 0xFB, 0xDE, 0xDB, 0xEF, 0x3C, 0xEF, 0x7D, 0xE7, 0x1A, 0xE7, 0x18, 0xDE, 0xB6, 0xC5, 0xF3, 0x9C, 0x6D, 0x94, 0x0D, 0xA4, 0x6E, 0xAC, 0xAF, 0xAC, 0xD0, 0xBD, 0xB5, 0xCE, 0x58, 0xD6, 0xBA, 0xE7, 0x1B, 0xE7, 0x3B, 0xE7, 0x3B, 0xDE, 0xFA, 0xD6, 0x98, 0xCE, 0x57, 0xAD, 0xB2, 0xA5, 0x4F, 0x9C, 0xCF, 0xAD, 0x13, 0xAC, 0xF3, 0xB5, 0x54, 0x9C, 0xD3, 0xAD, 0x75, 0xCE, 0x59, 0xD6, 0x9A, 0xD6, 0x9A, 0xCE, 0x79, 0xC6, 0x38, 0xAD, 0x75, 0x94, 0x91, 0x6B, 0x4D, 0x39, 0xE7, 0x31, 0x85, 0x31, 0x85, 0x4A, 0x69, 0x52, 0xAA, 0x84, 0x10, 0xAD, 0x55, 0xC6, 0x18, 0xCE, 0x59, 0xCE, 0x79, 0xCE, 0x79, 0xC6, 0x38, 0xB5, 0x96, 0x94, 0x92, 0x7B, 0xCE, 0x52, 0x89, 0x84, 0x0F, 0xDE, 0xDB, 0xF7, 0x7D, 0x00, 0x00, 0x8C, 0x51, 0xF7, 0x7D, 0xBD, 0xB6, 0xA4, 0xD3, 0xC5, 0xB7, 0xB5, 0x76, 0xCE, 0x59, 0xE7, 0x3C, 0xD6, 0xBA, 0xEF, 0x3D, 0xDE, 0xFB, 0xD6, 0x9A, 0xBD, 0xF7, 0xC5, 0xF8, 0xDE, 0xDB, 0xDE, 0xDB, 0xE7, 0x1C, 0xE7, 0x1C, 0xEF, 0x5D, 0xE7, 0x1C, 0xC6, 0x18, 0xBD, 0xD7, 0x9C, 0x91, 0xD6, 0x78, 0xA5, 0x14, 0xBD, 0xD7, 0xCE, 0x79, 0xDE, 0xFB, 0xF7, 0xBE, 0x6B, 0x6D, 0x10, 0x82, 0xFF, 0xFF, 0xEF, 0x7D, 0xDE, 0xDB, 0xE7, 0x1C, 0xD6, 0x9A, 0xBD, 0xB7, 0xCE, 0x38, 0xC5, 0xD7, 0xEF, 0x1C, 0xD6, 0x9A, 0xCE, 0x59, 0xD6, 0xBA, 0xD6, 0xBA, 0xDE, 0xBA, 0xCE, 0x79, 0xC5, 0xF7, 0x9C, 0xD3, 0x7B, 0xAE, 0x52, 0x6A, 0x41, 0xE8, 0x39, 0xC7, 0x29, 0x65, 0x31, 0x65, 0x42, 0x08, 0x73, 0x6D, 0x9C, 0xD3, 0xBD, 0xB6, 0xBD, 0xF7, 0xAD, 0x55, 0x94, 0xB2, 0xAD, 0x55, 0xBD, 0xF7, 0xCE, 0x59, 0xD6, 0xBA, 0xDE, 0xDA, 0xD6, 0x99, 0xC6, 0x37, 0xC5, 0xF5, 0xCE, 0x15, 0xBD, 0xB3, 0xB5, 0x74, 0xCE, 0x37, 0xDE, 0xDA, 0xEF, 0x1B, 0xE7, 0x1B, 0xDE, 0xDA, 0xDE, 0xDA, 0xE6, 0xFB, 0xE7, 0x1B, 0xE7, 0x1B, 0xDE, 0xDB, 0xC6, 0x17, 0xB5, 0x74, 0xC5, 0xD6, 0xCE, 0x58, 0xDE, 0xDA, 0xE6, 0xFB, 0xE7, 0x1B, 0xE7, 0x1B, 0xE6, 0xFB, 0xDE, 0xDA, 0xDE, 0xBA, 0xDE, 0xDA, 0xE7, 0x3C, 0xE7, 0x3C, 0xEF, 0x5C, 0xD6, 0xDA, 0x22, 0x03, 0x22, 0x23, 0x22, 0x03, 0x2A, 0x24, 0x43, 0x27, 0x53, 0xC8, 0x53, 0xA8, 0x53, 0xA8, 0x64, 0x4B, 0x5B, 0xEA, 0x43, 0x28, 0x19, 0xC3, 0x21, 0xE4, 0x19, 0xC3, 0x19, 0xC3, 0x32, 0x84, 0x3A, 0xA5, 0x32, 0x85, 0x11, 0x82, 0x22, 0x04, 0x11, 0x42, 0x10, 0xC1, 0x52, 0x89, 0x52, 0x88, 0x62, 0xE9, 0x6B, 0x09, 0x73, 0x4A, 0x7B, 0xCC, 0x8C, 0x0C, 0x9C, 0x6E, 0xA4, 0xF0, 0xAD, 0x31, 0xAD, 0x30, 0xB5, 0x30, 0xB5, 0x51, 0x9C, 0x4E, 0x9C, 0x4E, 0xA4, 0xCF, 0xA4, 0xAF, 0x9C, 0xAF, 0xF7, 0x9D, 0x9C, 0xD3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xA2, 0xFF, 0xDF, 0xF7, 0x7D, 0xEF, 0x5C, 0xFF, 0xDE, 0x6B, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0x31, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xAA, 0xFF, 0xFF, 0xE7, 0x3C, 0x08, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x50, 0xFF, 0xDE, 0xE6, 0xFB, 0xFF, 0x9D, 0xFF, 0xDF, 0x63, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x61, 0xF7, 0x9E, 0xE7, 0x3C, 0xAD, 0xD4, 0xDF, 0x38, 0xAD, 0x71, 0x8C, 0x8D, 0xBE, 0x34, 0xCE, 0x34, 0xCE, 0x34, 0xCE, 0x14, 0xC6, 0x13, 0xC5, 0xF3, 0xCE, 0x34, 0xCE, 0x34, 0xFF, 0xFF, 0xA5, 0x34, 0x00, 0x00, 0xCE, 0x79, 0xF7, 0x9D, 0xE7, 0x1A, 0xF7, 0x9D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xBE, 0xDE, 0xDA, 0xF7, 0xBE, 0x9C, 0xF3, 0x00, 0x00, 0xDE, 0xFB, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDE, 0xF7, 0x9D, 0xEF, 0x3B, 0xDE, 0xDA, 0xDE, 0xFB, 0xF7, 0x9D, 0xFF, 0xDE, 0xF7, 0xBE, 0xEF, 0x5D, 0xC6, 0x36, 0x9D, 0x6F, 0xBE, 0x73, 0xC6, 0x96, 0xEF, 0x9D, 0xFF, 0xDF, 0xFF, 0xFF, 0xF7, 0xBE, 0xE7, 0x1B, 0x9C, 0xD2, 0x52, 0x89, 0x6B, 0x6D, 0xC6, 0x38, 0xEF, 0x7D, 0xF7, 0xBE, 0xFF, 0xDF, 0xF7, 0xBE, 0xD6, 0xBA, 0xB5, 0x96, 0xD6, 0xBA, 0xF7, 0xBE, 0xFF, 0xDE, 0xFF, 0xBE, 0xFF, 0xBE, 0xF7, 0xBE, 0xF7, 0xBE, 0xEF, 0x7D, 0xDE, 0xFB, 0xBD, 0xF7, 0xA5, 0x14, 0xB5, 0x96, 0xE7, 0x1C, 0xFF, 0xDF, 0x08, 0x41, 0x6B, 0x6D, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0xF7, 0xBE, 0xEF, 0x7C, 0xD6, 0xF8, 0xCE, 0x55, 0xBD, 0x92, 0xB5, 0x72, 0xBD, 0xB4, 0xD6, 0x99, 0xEF, 0x5C, 0xF7, 0x9E, 0xFF, 0xDE, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDE, 0xEF, 0x7C, 0xCE, 0xB8, 0xA5, 0x91, 0x9D, 0x6F, 0xBD, 0xF4, 0xAD, 0x33, 0xBD, 0xF7, 0xDE, 0xFB, 0xEF, 0x7D, 0xF7, 0xBE, 0xF7, 0xBE, 0xF7, 0xBE, 0xF7, 0xBE, 0xF7, 0xBE, 0xEF, 0x7D, 0xE7, 0x1C, 0xBD, 0xF7, 0x84, 0x10, 0x42, 0x28, 0x39, 0xC6, 0x63, 0x2C, 0xA5, 0x34, 0xD6, 0xBA, 0xEF, 0x7D, 0xF7, 0x9E, 0xF7, 0xBE, 0xF7, 0xBE, 0xF7, 0xBE, 0xF7, 0xBE, 0xF7, 0x9E, 0xE7, 0x1C, 0xC6, 0x18, 0x8C, 0x71, 0x84, 0x30, 0xDE, 0xDB, 0xF7, 0x9E, 0x00, 0x00, 0x8C, 0x51, 0xEF, 0x7D, 0xB5, 0x55, 0xB5, 0x55, 0xC5, 0xD7, 0xDE, 0xDB, 0xF7, 0xBE, 0xFF, 0xDF, 0xF7, 0xBE, 0xFF, 0xDF, 0xF7, 0xBE, 0xF7, 0x9E, 0xDE, 0xDB, 0xE7, 0x3C, 0xF7, 0x9E, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xF7, 0xBE, 0xEF, 0x5D, 0xCE, 0x59, 0xB5, 0x96, 0xBD, 0xF7, 0xEF, 0x5D, 0xF7, 0xBE, 0xFF, 0xDF, 0xFF, 0xFF, 0x6B, 0x6D, 0x10, 0x82, 0xFF, 0xFF, 0xFF, 0xDF, 0xF7, 0xBE, 0xF7, 0xBE, 0xEF, 0x5D, 0xD6, 0x59, 0xC5, 0xF8, 0xE7, 0x1C, 0xEF, 0x5D, 0xF7, 0x9E, 0xF7, 0xBE, 0xFF, 0xBF, 0xFF, 0xDF, 0xF7, 0xBE, 0xF7, 0xBE, 0xEF, 0x7D, 0xE6, 0xFB, 0xBD, 0xF7, 0x73, 0xAE, 0x4A, 0x29, 0x29, 0x65, 0x21, 0x24, 0x31, 0x86, 0xB5, 0x75, 0xC6, 0x17, 0xBD, 0xD7, 0xB5, 0x95, 0x8C, 0x71, 0xB5, 0x96, 0xDE, 0xFB, 0xEF, 0x7D, 0xF7, 0xBE, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xDD, 0xEF, 0x5B, 0xCE, 0x56, 0xAD, 0x33, 0xE7, 0x1B, 0xFF, 0xBE, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xEF, 0x7D, 0xEF, 0x7D, 0xF7, 0xBE, 0xE6, 0xDA, 0xDE, 0x99, 0xEF, 0x3C, 0xF7, 0x9E, 0xFF, 0xDE, 0xFF, 0xDE, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xF7, 0xBE, 0xFF, 0xBE, 0xFF, 0xBE, 0xEF, 0x7D, 0xB5, 0x96, 0xD6, 0xBA, 0xEF, 0x5D, 0x32, 0xA4, 0x32, 0x84, 0x32, 0xA5, 0x63, 0xEB, 0x3A, 0xE6, 0x4B, 0x67, 0x5B, 0xE9, 0x53, 0xA8, 0x6C, 0x8C, 0x53, 0xA9, 0x19, 0xA2, 0x11, 0x82, 0x19, 0xC3, 0x19, 0xC3, 0x19, 0xA2, 0x2A, 0x24, 0x32, 0x85, 0x3A, 0xA5, 0x11, 0x41, 0x11, 0x42, 0x11, 0x22, 0x29, 0xC5, 0x5A, 0xCA, 0x5A, 0xCA, 0x5A, 0x89, 0x5A, 0xA9, 0x6B, 0x0A, 0x6B, 0x0A, 0x6B, 0x2A, 0x73, 0x2A, 0x7B, 0x6B, 0x83, 0xAB, 0x73, 0x6A, 0x73, 0x2A, 0x83, 0xCC, 0x94, 0x4E, 0x9C, 0x8F, 0x8C, 0x0D, 0x94, 0x2D, 0x94, 0x2E, 0xF7, 0x7D, 0x84, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x41, 0xFF, 0xFF, 0xFF, 0xBE, 0xF7, 0xBE, 0xFF, 0xFF, 0x18, 0xC3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEF, 0x7D, 0xEF, 0x5D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x61, 0xFF, 0xFF, 0xA5, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0xE7, 0xFF, 0xFF, 0xF7, 0x7D, 0xFF, 0xBE, 0xFF, 0xFF, 0x21, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBD, 0xD7, 0xEF, 0x7D, 0xAD, 0xD3, 0xD7, 0x17, 0x9D, 0x0F, 0xB5, 0xD3, 0xC6, 0x54, 0xC6, 0x34, 0xC6, 0x14, 0xC5, 0xF4, 0xCE, 0x14, 0xCE, 0x55, 0xCE, 0x34, 0xCE, 0x34, 0xFF, 0xFF, 0xA5, 0x34, 0x00, 0x00, 0xCE, 0x79, 0xF7, 0x9D, 0xDE, 0xD9, 0xF7, 0x9D, 0xDE, 0xDB, 0x29, 0x65, 0xB5, 0xB6, 0xF7, 0xBE, 0xDE, 0xB9, 0xF7, 0x9E, 0x9C, 0xF3, 0x00, 0x00, 0xDE, 0xFB, 0xAD, 0x55, 0x42, 0x28, 0x18, 0xC3, 0x00, 0x00, 0x10, 0xA2, 0x39, 0xE7, 0x9C, 0xD3, 0xFF, 0xDF, 0xEF, 0x7D, 0xE7, 0x1C, 0xFF, 0xDF, 0x6B, 0x6D, 0x4A, 0x49, 0xFF, 0xDE, 0xDF, 0x1A, 0xB6, 0x32, 0xA5, 0x90, 0xCE, 0xB8, 0xF7, 0xBE, 0x63, 0x0C, 0x31, 0x86, 0x94, 0xB2, 0xF7, 0xBE, 0xCE, 0xB8, 0xA5, 0x92, 0xAD, 0x73, 0xE7, 0x1C, 0xE7, 0x1C, 0x31, 0x86, 0xA5, 0x34, 0xF7, 0xBE, 0xE7, 0x1C, 0xE7, 0x3C, 0xF7, 0xBE, 0x9C, 0xD3, 0x42, 0x08, 0x18, 0xC3, 0x00, 0x00, 0x10, 0x82, 0x29, 0x65, 0x73, 0xAE, 0xE7, 0x3C, 0xF7, 0x9E, 0xD6, 0xBA, 0xCE, 0x59, 0xE7, 0x3D, 0xFF, 0xDF, 0x08, 0x41, 0x6B, 0x6D, 0xDE, 0xFB, 0x6B, 0x4D, 0x29, 0x45, 0x08, 0x41, 0x08, 0x41, 0x21, 0x24, 0x6B, 0x6D, 0xE7, 0x1C, 0xF7, 0xBE, 0xE7, 0x1A, 0xBD, 0xB3, 0xC5, 0xF4, 0xE7, 0x1A, 0xF7, 0xBE, 0xE7, 0x1C, 0x73, 0x8E, 0x29, 0x65, 0x10, 0xA2, 0x00, 0x00, 0x08, 0x61, 0x21, 0x24, 0x63, 0x2C, 0xD6, 0x9A, 0xF7, 0x9D, 0xD6, 0xD8, 0xA5, 0xD1, 0xAD, 0xF1, 0xD6, 0xB8, 0xF7, 0xBD, 0xE7, 0x3C, 0x73, 0xAE, 0x31, 0x86, 0x10, 0x82, 0x00, 0x00, 0x08, 0x61, 0x21, 0x24, 0x63, 0x0C, 0xCE, 0x79, 0xF7, 0x9D, 0xCE, 0x59, 0x84, 0x10, 0x6B, 0x4C, 0xAD, 0x55, 0xE7, 0x1C, 0xEF, 0x5D, 0x84, 0x30, 0x39, 0xC7, 0x10, 0x82, 0x00, 0x00, 0x08, 0x41, 0x21, 0x04, 0x63, 0x0C, 0xD6, 0x9A, 0xEF, 0x7D, 0xCE, 0x79, 0xA5, 0x14, 0xDE, 0xFB, 0xF7, 0x9E, 0x00, 0x00, 0x8C, 0x51, 0xF7, 0x9E, 0xBD, 0x96, 0xBD, 0x96, 0xDE, 0xDB, 0xF7, 0xBE, 0xB5, 0xB6, 0x31, 0x86, 0x63, 0x0C, 0xF7, 0xBE, 0xEF, 0x7D, 0xE7, 0x3C, 0xEF, 0x7D, 0xFF, 0xDF, 0xBD, 0xF7, 0x5A, 0xCB, 0x18, 0xE3, 0x08, 0x41, 0x08, 0x41, 0x21, 0x04, 0x63, 0x0C, 0xCE, 0x59, 0xFF, 0xDF, 0xE7, 0x3C, 0xD6, 0xBA, 0xF7, 0x9E, 0x73, 0x8E, 0x31, 0x86, 0x31, 0x86, 0x10, 0xA2, 0x00, 0x00, 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, 0x73, 0xAE, 0xF7, 0xBE, 0xDE, 0xBA, 0xEF, 0x3C, 0xF7, 0xBE, 0xD6, 0x9A, 0x63, 0x0C, 0x29, 0x45, 0x10, 0x82, 0x00, 0x00, 0x08, 0x61, 0x29, 0x65, 0x73, 0xAE, 0xDE, 0xFB, 0xEF, 0x5D, 0xBD, 0xD7, 0x6B, 0x4D, 0x31, 0x86, 0x29, 0x45, 0x29, 0x24, 0x5A, 0xCA, 0x62, 0xEB, 0x52, 0xAB, 0x73, 0xAE, 0xBD, 0xF7, 0xEF, 0x7D, 0xE7, 0x3C, 0x7B, 0xCF, 0x31, 0x86, 0x10, 0xA2, 0x00, 0x00, 0x08, 0x61, 0x21, 0x24, 0x63, 0x0C, 0xCE, 0x79, 0xFF, 0xDE, 0xE7, 0x3B, 0xCE, 0x37, 0xEF, 0x5C, 0xEF, 0x5C, 0x21, 0x24, 0xB5, 0x96, 0xB5, 0x96, 0x39, 0xC7, 0x08, 0x41, 0x00, 0x00, 0x52, 0x8A, 0xFF, 0xDF, 0xF7, 0x7C, 0xF7, 0x9D, 0xF7, 0xBE, 0x94, 0xB2, 0x42, 0x08, 0x18, 0xE3, 0x08, 0x41, 0x00, 0x20, 0x18, 0xC3, 0x31, 0xA6, 0x84, 0x10, 0xC6, 0x18, 0x10, 0x82, 0x00, 0x00, 0x9C, 0xF3, 0xEF, 0x5D, 0x3A, 0xE5, 0x3B, 0x06, 0x64, 0x0B, 0x85, 0x0F, 0x5B, 0xCA, 0x43, 0x07, 0xA5, 0xD2, 0x53, 0x88, 0x74, 0xAD, 0x43, 0x07, 0x19, 0xA3, 0x19, 0xA3, 0x21, 0xC3, 0x19, 0xA3, 0x19, 0xA3, 0x19, 0xA2, 0x32, 0x64, 0x32, 0x85, 0x19, 0xA3, 0x21, 0xC3, 0x2A, 0x25, 0x32, 0x66, 0x73, 0x4C, 0x83, 0xCD, 0x6B, 0x0A, 0x83, 0xED, 0xAC, 0xF1, 0xAC, 0xD0, 0xAC, 0xD0, 0x9C, 0x8F, 0x9C, 0x6F, 0x94, 0x4E, 0x8B, 0xED, 0x8C, 0x0D, 0xA4, 0xD0, 0xBD, 0x73, 0xB5, 0x32, 0xA4, 0xB0, 0xA4, 0xD0, 0xAC, 0xD0, 0xF7, 0x9D, 0x5A, 0xEB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xDE, 0xF7, 0xBE, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x38, 0xDE, 0xDB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x9E, 0x84, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 0xFF, 0xDF, 0xEF, 0x7C, 0xFF, 0xBE, 0xFF, 0xFF, 0x08, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA5, 0x14, 0xEF, 0x7D, 0xB6, 0x14, 0xB6, 0x94, 0xBE, 0x74, 0x9D, 0x0F, 0x94, 0xAD, 0xAD, 0x70, 0xA5, 0x2E, 0x9D, 0x4D, 0xA5, 0x6E, 0xC6, 0x53, 0xD6, 0x96, 0xB5, 0x72, 0xFF, 0xFF, 0xA5, 0x34, 0x00, 0x00, 0xCE, 0x79, 0xF7, 0x9D, 0xCE, 0x58, 0xF7, 0x9D, 0xD6, 0x9A, 0x00, 0x00, 0xA5, 0x34, 0xF7, 0xBE, 0xDE, 0xB9, 0xF7, 0xBE, 0x9C, 0xF3, 0x00, 0x00, 0x52, 0xAA, 0x00, 0x00, 0x52, 0x8A, 0x8C, 0x71, 0x9C, 0xD3, 0x84, 0x30, 0x39, 0xE7, 0x00, 0x00, 0x52, 0xAA, 0xFF, 0xDF, 0xF7, 0x9E, 0xFF, 0xFF, 0x84, 0x30, 0x00, 0x00, 0xE7, 0x1C, 0xE7, 0x5C, 0xAD, 0xF2, 0xAD, 0xF2, 0xDF, 0x3B, 0xF7, 0xBE, 0x08, 0x41, 0x08, 0x61, 0x39, 0xE7, 0xF7, 0xDE, 0xDF, 0x1A, 0xB6, 0x54, 0xCE, 0x97, 0xEF, 0x7D, 0xA5, 0x34, 0x00, 0x00, 0xCE, 0x59, 0xFF, 0xDF, 0xF7, 0xBE, 0xF7, 0x9E, 0x42, 0x08, 0x00, 0x00, 0x4A, 0x69, 0x8C, 0x71, 0xA5, 0x34, 0x9C, 0xD3, 0x6B, 0x6D, 0x10, 0xA2, 0x10, 0x82, 0xCE, 0x79, 0xF7, 0xBE, 0xE7, 0x3C, 0xEF, 0x7D, 0xFF, 0xFF, 0x08, 0x41, 0x42, 0x28, 0x10, 0x82, 0x21, 0x24, 0x7B, 0xCF, 0x9C, 0xD3, 0x94, 0x92, 0x63, 0x2C, 0x08, 0x61, 0x10, 0x82, 0xD6, 0xBA, 0xEF, 0x7D, 0xBD, 0xD6, 0xC6, 0x16, 0xEF, 0x7D, 0xD6, 0xBA, 0x10, 0x82, 0x08, 0x41, 0x5A, 0xCB, 0x84, 0x30, 0x9C, 0xD3, 0x8C, 0x71, 0x6B, 0x4D, 0x18, 0xC3, 0x08, 0x41, 0xBD, 0xF7, 0xEF, 0x9D, 0xC6, 0x76, 0xBE, 0x56, 0xEF, 0x7D, 0xCE, 0x59, 0x10, 0x82, 0x10, 0x82, 0x63, 0x0C, 0x94, 0x92, 0x9C, 0xD3, 0x94, 0xB2, 0x73, 0x8E, 0x18, 0xE3, 0x00, 0x00, 0xA5, 0x14, 0xEF, 0x7D, 0xBD, 0xF7, 0xA5, 0x13, 0xDE, 0xDB, 0xEF, 0x5D, 0x29, 0x65, 0x00, 0x20, 0x52, 0xAA, 0x84, 0x10, 0x9C, 0xD3, 0x94, 0x92, 0x6B, 0x4D, 0x10, 0x82, 0x00, 0x20, 0xAD, 0x75, 0xEF, 0x7D, 0xCE, 0x59, 0xEF, 0x5D, 0xF7, 0x9E, 0x00, 0x00, 0x8C, 0x51, 0xFF, 0xDF, 0xDE, 0xBA, 0xD6, 0xBA, 0xF7, 0x9E, 0xB5, 0x96, 0x00, 0x20, 0x39, 0xE7, 0xEF, 0x5D, 0xEF, 0x5D, 0xCE, 0x59, 0xE7, 0x1C, 0xFF, 0xDF, 0x7B, 0xEF, 0x00, 0x00, 0x31, 0x86, 0x84, 0x10, 0x9C, 0xF3, 0x9C, 0xF3, 0x7B, 0xEF, 0x29, 0x65, 0x00, 0x00, 0x94, 0xB2, 0xF7, 0xBE, 0xEF, 0x7D, 0xFF, 0xDF, 0x94, 0xB2, 0x63, 0x2C, 0x63, 0x2C, 0x29, 0x45, 0x08, 0x41, 0x73, 0xAE, 0x73, 0xAE, 0x73, 0xAE, 0xAD, 0x55, 0xF7, 0xBE, 0xE7, 0x1C, 0xF7, 0x9E, 0xBD, 0xF7, 0x08, 0x41, 0x10, 0xA2, 0x63, 0x2C, 0x8C, 0x71, 0x9C, 0xD3, 0x8C, 0x51, 0x5A, 0xEB, 0x08, 0x61, 0x10, 0xA2, 0xD6, 0xBA, 0xE7, 0x1C, 0x94, 0x92, 0x42, 0x07, 0x21, 0x04, 0x21, 0x04, 0x21, 0x24, 0x29, 0x65, 0x62, 0xEB, 0xBD, 0xD6, 0xF7, 0x9D, 0xCE, 0x79, 0x10, 0x82, 0x08, 0x61, 0x63, 0x0C, 0x8C, 0x71, 0x9C, 0xD3, 0x94, 0xB2, 0x73, 0x8E, 0x21, 0x04, 0x00, 0x00, 0x9C, 0xF3, 0xF7, 0xBE, 0xEF, 0x5B, 0xFF, 0xDD, 0xE7, 0x3C, 0x00, 0x00, 0x42, 0x08, 0x00, 0x20, 0x52, 0x8A, 0x94, 0x92, 0x9C, 0xD3, 0xBD, 0xD7, 0xFF, 0xFF, 0xFF, 0xDE, 0xFF, 0xDF, 0x4A, 0x49, 0x00, 0x00, 0x4A, 0x49, 0x8C, 0x71, 0x9C, 0xF3, 0x9C, 0xF3, 0x84, 0x30, 0x5A, 0xEB, 0x08, 0x41, 0x00, 0x00, 0x5A, 0xCB, 0xDE, 0xFB, 0xFF, 0xDF, 0xE7, 0x3C, 0x43, 0x26, 0x64, 0x6C, 0x85, 0x30, 0x9D, 0xB3, 0x85, 0x10, 0x7C, 0x8D, 0xA5, 0xB2, 0x2A, 0x04, 0x53, 0x69, 0x2A, 0x24, 0x11, 0x62, 0x19, 0xC4, 0x2A, 0x05, 0x21, 0xC3, 0x21, 0xC3, 0x43, 0x07, 0x19, 0xA2, 0x3A, 0x85, 0x22, 0x03, 0x3A, 0xC6, 0x42, 0xE6, 0x32, 0x24, 0x9C, 0x4F, 0x94, 0x2E, 0x6A, 0xEA, 0xA4, 0xF1, 0xC5, 0xB3, 0xC5, 0xB4, 0xBD, 0x93, 0xBD, 0x52, 0xB5, 0x32, 0x94, 0x4F, 0x8C, 0x2E, 0x8C, 0x0D, 0x83, 0xED, 0x83, 0xCD, 0x7B, 0xAC, 0x73, 0x4B, 0x73, 0x4B, 0x73, 0x6B, 0xEF, 0x7D, 0x63, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xF7, 0xBE, 0xF7, 0x9E, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCE, 0x59, 0xDE, 0xFB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x9E, 0xA5, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x24, 0xFF, 0xDE, 0xE7, 0x1B, 0xEF, 0x5C, 0xFF, 0xDE, 0x18, 0xC3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAD, 0x75, 0xEF, 0x7D, 0xB6, 0x55, 0xBE, 0xB5, 0xBE, 0x94, 0xA5, 0x91, 0x8C, 0x8D, 0xAD, 0x90, 0x7C, 0x88, 0x8D, 0x09, 0x8D, 0x08, 0x8C, 0xEA, 0x94, 0xEC, 0xAD, 0x4F, 0xFF, 0xFF, 0xA5, 0x34, 0x00, 0x00, 0xCE, 0x79, 0xF7, 0x9D, 0xDE, 0xD9, 0xF7, 0x9D, 0xD6, 0x9A, 0x00, 0x00, 0xA5, 0x34, 0xF7, 0xBE, 0xDE, 0xB9, 0xFF, 0xBE, 0x9C, 0xF3, 0x00, 0x00, 0x00, 0x00, 0xB5, 0x96, 0xFF, 0xDF, 0xF7, 0xBE, 0xF7, 0x9D, 0xF7, 0xBE, 0xFF, 0xDF, 0x84, 0x10, 0x00, 0x00, 0xAD, 0x55, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0x79, 0x00, 0x00, 0xA5, 0x14, 0xEF, 0x9D, 0xC6, 0x55, 0xCE, 0x76, 0xEF, 0x9D, 0xBD, 0xF7, 0x00, 0x00, 0x7B, 0xEF, 0x00, 0x20, 0xF7, 0x9E, 0xDF, 0x3B, 0xAE, 0x13, 0xCE, 0xD8, 0xFF, 0xDE, 0x63, 0x2C, 0x10, 0x82, 0xFF, 0xDF, 0xF7, 0xBE, 0xFF, 0xFF, 0x73, 0xAE, 0x00, 0x20, 0xBD, 0xD7, 0xF7, 0xBE, 0xEF, 0x7D, 0xEF, 0x5D, 0xEF, 0x7D, 0xF7, 0xBE, 0xE7, 0x3C, 0x21, 0x24, 0x29, 0x45, 0xF7, 0xBE, 0xE7, 0x1C, 0xE7, 0x1C, 0xFF, 0xDF, 0x08, 0x41, 0x00, 0x00, 0x4A, 0x69, 0xF7, 0xBE, 0xF7, 0x9E, 0xF7, 0x9E, 0xF7, 0xBE, 0xFF, 0xDF, 0xDE, 0xDB, 0x10, 0xA2, 0x39, 0xE7, 0xFF, 0xDF, 0xEF, 0x5D, 0xE7, 0x3C, 0xFF, 0xDE, 0x52, 0xAA, 0x08, 0x61, 0xDE, 0xDB, 0xFF, 0xDF, 0xF7, 0xBE, 0xF7, 0xBE, 0xFF, 0xDE, 0xFF, 0xDF, 0xEF, 0x7D, 0x29, 0x45, 0x31, 0x86, 0xF7, 0xDE, 0xDF, 0x1A, 0xE7, 0x3B, 0xF7, 0xDE, 0x29, 0x45, 0x29, 0x45, 0xE7, 0x3C, 0xF7, 0xBE, 0xEF, 0x9D, 0xEF, 0x7D, 0xEF, 0x7D, 0xF7, 0x9E, 0xF7, 0xBE, 0x4A, 0x49, 0x08, 0x41, 0xE7, 0x1C, 0xE7, 0x3C, 0xD6, 0x9A, 0xF7, 0x9E, 0x6B, 0x4D, 0x00, 0x00, 0xB5, 0xB6, 0xF7, 0xBE, 0xEF, 0x7D, 0xEF, 0x5D, 0xEF, 0x7D, 0xF7, 0x9E, 0xEF, 0x7D, 0x31, 0x86, 0x10, 0x82, 0xEF, 0x7D, 0xEF, 0x5D, 0xEF, 0x7D, 0xF7, 0x9E, 0x00, 0x00, 0x8C, 0x51, 0xFF, 0xFF, 0xF7, 0x9E, 0xF7, 0xBE, 0xA5, 0x14, 0x00, 0x20, 0x4A, 0x69, 0xF7, 0x9E, 0xEF, 0x3C, 0xBD, 0xF7, 0xC6, 0x18, 0xEF, 0x7D, 0xBD, 0xF7, 0x00, 0x00, 0x73, 0xAE, 0xFF, 0xDF, 0xF7, 0xBE, 0xF7, 0x9E, 0xF7, 0x9E, 0xF7, 0xBE, 0xFF, 0xDF, 0x5A, 0xCB, 0x00, 0x20, 0xD6, 0xBA, 0xFF, 0xDF, 0xF7, 0xBE, 0xF7, 0xBE, 0xF7, 0xBE, 0xFF, 0xFF, 0x6B, 0x6D, 0x10, 0x82, 0xFF, 0xFF, 0xFF, 0xDF, 0xF7, 0x9E, 0xF7, 0xBE, 0xF7, 0x9E, 0xEF, 0x5D, 0xF7, 0xBE, 0x29, 0x65, 0x18, 0xE3, 0xEF, 0x5D, 0xF7, 0xBE, 0xEF, 0x7D, 0xEF, 0x7D, 0xEF, 0x7D, 0xF7, 0xBE, 0xE7, 0x1C, 0x10, 0x82, 0x52, 0xAA, 0xEF, 0x7D, 0xAD, 0x75, 0x52, 0xCA, 0x41, 0xE7, 0x7B, 0xAD, 0xAD, 0x32, 0xCE, 0x15, 0xD6, 0x77, 0xEF, 0x5C, 0xFF, 0xDF, 0x29, 0x65, 0x21, 0x24, 0xE7, 0x3C, 0xFF, 0xDE, 0xF7, 0xDE, 0xF7, 0xBD, 0xF7, 0xBD, 0xFF, 0xDE, 0xF7, 0xBE, 0x4A, 0x69, 0x08, 0x41, 0xE7, 0x1C, 0xFF, 0xDE, 0xFF, 0xDE, 0xE7, 0x3C, 0x00, 0x00, 0x00, 0x20, 0xC6, 0x18, 0xFF, 0xDF, 0xFF, 0xBE, 0xFF, 0xBE, 0xFF, 0xBE, 0xFF, 0xBE, 0xFF, 0xFF, 0xB5, 0xB6, 0x00, 0x00, 0x9C, 0xD3, 0xFF, 0xFF, 0xF7, 0xBE, 0xF7, 0x9D, 0xF7, 0xBE, 0xF7, 0xBE, 0xFF, 0xDF, 0xDE, 0xDB, 0x08, 0x61, 0x73, 0x8E, 0xFF, 0xDF, 0xEF, 0x5C, 0xC6, 0x78, 0x6C, 0x6B, 0x8D, 0x50, 0x95, 0x72, 0xA6, 0x15, 0x95, 0x72, 0x53, 0x29, 0x53, 0x49, 0x29, 0xE4, 0x21, 0xC3, 0x19, 0xA2, 0x11, 0x42, 0x21, 0xC4, 0x32, 0x66, 0x21, 0xC4, 0x09, 0x01, 0x19, 0xA3, 0x11, 0x42, 0x21, 0xE4, 0x32, 0x85, 0x5B, 0xE9, 0x43, 0x46, 0x3A, 0xA5, 0x9C, 0x70, 0x8B, 0xED, 0x6B, 0x0A, 0xAD, 0x11, 0xBD, 0xB3, 0xCD, 0xF4, 0xCD, 0xF5, 0xCE, 0x15, 0xDE, 0x77, 0xD6, 0x36, 0xCD, 0xF5, 0xD6, 0x56, 0xD6, 0x77, 0xBD, 0xB4, 0xAD, 0x32, 0xAD, 0x11, 0xA4, 0xD0, 0x9C, 0x90, 0xF7, 0x9D, 0x6B, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xF7, 0x9E, 0xEF, 0x7D, 0xFF, 0xDF, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCE, 0x59, 0xDE, 0xFB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x9E, 0xA5, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x65, 0xFF, 0xDE, 0xEF, 0x3B, 0xEF, 0x3B, 0xFF, 0xDE, 0x21, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAD, 0x75, 0xEF, 0x7D, 0x9D, 0x72, 0xA5, 0xD1, 0xBE, 0x95, 0x6B, 0xCB, 0xA5, 0x30, 0xAD, 0x90, 0x63, 0xC6, 0xA5, 0xCC, 0x84, 0xE8, 0x7C, 0xA8, 0x84, 0x89, 0x84, 0x2A, 0xFF, 0xFF, 0xA5, 0x34, 0x00, 0x00, 0xCE, 0x79, 0xEF, 0x3C, 0xC5, 0xF6, 0xEF, 0x5C, 0xD6, 0x9A, 0x00, 0x00, 0xA5, 0x34, 0xF7, 0x9D, 0xDE, 0xB9, 0xF7, 0x9D, 0x9C, 0xF3, 0x00, 0x00, 0x52, 0xAA, 0xFF, 0xDF, 0xE7, 0x3B, 0xC6, 0x76, 0xBE, 0x14, 0xDE, 0xF9, 0xF7, 0x9D, 0xFF, 0xDF, 0x21, 0x04, 0x4A, 0x49, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xDF, 0x10, 0xA2, 0x63, 0x0C, 0xFF, 0xDE, 0xEF, 0x5B, 0xE7, 0x19, 0xF7, 0xBE, 0x7B, 0xCF, 0x21, 0x24, 0xE7, 0x1C, 0x00, 0x00, 0xBD, 0xD7, 0xEF, 0x9D, 0xD6, 0xB7, 0xDF, 0x1A, 0xFF, 0xDF, 0x21, 0x04, 0x52, 0xAA, 0xFF, 0xFF, 0xFF, 0xDE, 0xF7, 0xBE, 0x08, 0x61, 0x6B, 0x4D, 0xFF, 0xDF, 0xE7, 0x3C, 0xBE, 0x17, 0xBE, 0x16, 0xBE, 0x36, 0xD6, 0x99, 0xF7, 0x9E, 0xAD, 0x55, 0x00, 0x00, 0xBD, 0xF7, 0xF7, 0x9E, 0xE7, 0x3C, 0xFF, 0xDF, 0x08, 0x41, 0x00, 0x20, 0xE7, 0x1C, 0xEF, 0x5D, 0xC6, 0x18, 0xA5, 0x14, 0xAD, 0x35, 0xCE, 0x79, 0xF7, 0xBE, 0x8C, 0x71, 0x00, 0x00, 0xDE, 0xDB, 0xF7, 0xBE, 0xF7, 0x9E, 0xFF, 0xDF, 0x18, 0xE3, 0x63, 0x0C, 0xFF, 0xFF, 0xF7, 0x7D, 0xDE, 0xDB, 0xB5, 0xB6, 0xC6, 0x18, 0xD6, 0xBA, 0xF7, 0xBE, 0x7B, 0xEF, 0x00, 0x20, 0xF7, 0xDE, 0xEF, 0x7C, 0xF7, 0xBE, 0xC6, 0x18, 0x00, 0x00, 0xAD, 0x55, 0xF7, 0xDE, 0xE7, 0x7B, 0xD6, 0xF8, 0xBE, 0x55, 0xBD, 0xF5, 0xC6, 0x17, 0xEF, 0x5D, 0xD6, 0xBA, 0x00, 0x00, 0x94, 0x92, 0xFF, 0xDF, 0xEF, 0x7D, 0xF7, 0x9E, 0x08, 0x61, 0x5A, 0xCB, 0xF7, 0xBE, 0xD6, 0x9A, 0xA5, 0x34, 0x94, 0xB2, 0x9C, 0xF3, 0xC6, 0x17, 0xEF, 0x7D, 0xBD, 0xD7, 0x00, 0x00, 0xB5, 0x96, 0xF7, 0xBE, 0xF7, 0x9E, 0xF7, 0x9E, 0x00, 0x00, 0x8C, 0x51, 0xFF, 0xFF, 0xFF, 0xFF, 0x9C, 0xD3, 0x00, 0x00, 0x5A, 0xEB, 0xF7, 0xBE, 0xE7, 0x3C, 0xAD, 0x75, 0xA4, 0xF3, 0xCE, 0x79, 0xF7, 0x9E, 0x52, 0x8A, 0x21, 0x04, 0xFF, 0xDF, 0xF7, 0x9E, 0xDE, 0xDB, 0xDE, 0xFB, 0xD6, 0x9A, 0xEF, 0x5D, 0xF7, 0xBE, 0xEF, 0x5D, 0x00, 0x20, 0x7B, 0xCF, 0xFF, 0xBF, 0xDE, 0xDB, 0xCE, 0x79, 0xCE, 0x79, 0xF7, 0xBE, 0x6B, 0x6D, 0x10, 0x82, 0xFF, 0xDF, 0xE7, 0x1C, 0xB5, 0xB6, 0xAD, 0x75, 0xBD, 0xD7, 0xDE, 0xFB, 0xEF, 0x7D, 0x00, 0x00, 0x84, 0x30, 0xF7, 0xBE, 0xD6, 0x9A, 0xB5, 0x96, 0xA5, 0x34, 0xAD, 0x75, 0xD6, 0x9A, 0xF7, 0xBE, 0x52, 0xAA, 0x29, 0x45, 0xF7, 0x9E, 0xC6, 0x17, 0x9C, 0xD1, 0xCE, 0x35, 0xEF, 0x18, 0xEF, 0x18, 0xEF, 0x18, 0xDE, 0xB8, 0xF7, 0x9D, 0xCE, 0x58, 0x00, 0x00, 0xA5, 0x34, 0xFF, 0xDE, 0xDE, 0xF9, 0xDF, 0x17, 0xDF, 0x16, 0xDF, 0x36, 0xEF, 0x99, 0xF7, 0xDD, 0xDE, 0xFB, 0x00, 0x00, 0x8C, 0x71, 0xFF, 0xFF, 0xFF, 0xFE, 0xE7, 0x3C, 0x00, 0x00, 0x5A, 0xCB, 0xFF, 0xFF, 0xF7, 0x9C, 0xE6, 0xF9, 0xE6, 0xB8, 0xDE, 0x98, 0xE6, 0xFA, 0xFF, 0xDE, 0x7B, 0xEF, 0x00, 0x00, 0xEF, 0x5D, 0xF7, 0x9D, 0xD6, 0x78, 0xD6, 0x37, 0xE6, 0xB8, 0xDE, 0x98, 0xEF, 0x5C, 0xFF, 0xDF, 0x4A, 0x49, 0x39, 0xC7, 0xF7, 0xBE, 0xCE, 0xB8, 0x8D, 0x10, 0x85, 0x4F, 0x95, 0x92, 0xA5, 0xD4, 0x9D, 0xB3, 0x4B, 0x29, 0x19, 0xA3, 0x2A, 0x04, 0x21, 0xE3, 0x21, 0xE3, 0x11, 0x82, 0x11, 0x62, 0x19, 0x83, 0x32, 0x66, 0x19, 0x83, 0x19, 0x62, 0x11, 0x21, 0x19, 0xC3, 0x2A, 0x65, 0x43, 0x27, 0x4B, 0x87, 0x4B, 0xA7, 0x5B, 0xE9, 0x9C, 0x6F, 0x83, 0xAC, 0x73, 0x4B, 0xB5, 0x32, 0xB5, 0x52, 0xAD, 0x10, 0xAD, 0x31, 0xBD, 0x93, 0xCD, 0xF4, 0xD6, 0x36, 0xCD, 0xF4, 0xDE, 0x76, 0xD6, 0x56, 0xBD, 0x93, 0xB5, 0x31, 0xB5, 0x32, 0xE6, 0xD8, 0xDE, 0x77, 0xF7, 0xBE, 0x6B, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xF7, 0x9E, 0xEF, 0x7D, 0xFF, 0xDF, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCE, 0x59, 0xDE, 0xFB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x9E, 0xA5, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x65, 0xFF, 0xDF, 0xF7, 0x9C, 0xF7, 0x9C, 0xFF, 0xDF, 0x21, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAD, 0x75, 0xEF, 0x7D, 0xA5, 0xB3, 0x8C, 0xEE, 0x9D, 0x51, 0x84, 0x6E, 0x94, 0xAE, 0x9D, 0x0E, 0x74, 0x27, 0x74, 0x67, 0x6C, 0x26, 0x8C, 0xCA, 0xAD, 0x4E, 0xAD, 0x0F, 0xFF, 0xFF, 0xA5, 0x34, 0x00, 0x00, 0xCE, 0x79, 0xEF, 0x5C, 0xCE, 0x16, 0xEF, 0x3C, 0xD6, 0x9A, 0x00, 0x00, 0xA5, 0x34, 0xF7, 0x9D, 0xDE, 0xB9, 0xF7, 0x9D, 0x9C, 0xF3, 0x00, 0x00, 0xA5, 0x14, 0xF7, 0x9D, 0xC6, 0x36, 0xA5, 0x0F, 0x9C, 0x8E, 0xBD, 0xB4, 0xD6, 0x79, 0xF7, 0x9E, 0x63, 0x2C, 0x10, 0xA2, 0xFF, 0xFF, 0xFF, 0xDE, 0xFF, 0xDF, 0x52, 0xAA, 0x18, 0xE3, 0xFF, 0xDE, 0xE7, 0x1B, 0xDE, 0xFB, 0xF7, 0xBE, 0x39, 0xC7, 0x63, 0x2C, 0xFF, 0xFF, 0x21, 0x04, 0x7B, 0xCF, 0xF7, 0xBE, 0xDE, 0xFA, 0xEF, 0x7D, 0xDE, 0xFB, 0x00, 0x00, 0x9C, 0xD3, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0x59, 0x00, 0x00, 0xB5, 0xB6, 0xFF, 0xDF, 0xE7, 0x3B, 0xD6, 0xF9, 0xD6, 0xF9, 0xD6, 0xD9, 0xDF, 0x1A, 0xF7, 0xBE, 0xE7, 0x3C, 0x00, 0x00, 0x8C, 0x71, 0xFF, 0xDF, 0xEF, 0x5D, 0xFF, 0xDF, 0x08, 0x41, 0x31, 0xA6, 0xF7, 0xBE, 0xD6, 0xBA, 0xB5, 0x96, 0xAD, 0x55, 0x9C, 0xF3, 0xB5, 0x96, 0xEF, 0x5D, 0xD6, 0x9A, 0x00, 0x00, 0xA5, 0x34, 0xF7, 0xBE, 0xE7, 0x3C, 0xF7, 0xBE, 0x10, 0xA2, 0x6B, 0x4D, 0xFF, 0xDF, 0xE7, 0x1C, 0xCE, 0x59, 0xBD, 0xD6, 0xB5, 0xB6, 0xCE, 0x79, 0xF7, 0xBE, 0xEF, 0x7D, 0xE7, 0x1C, 0xF7, 0xDE, 0xEF, 0x9D, 0xFF, 0xDF, 0x94, 0x92, 0x00, 0x00, 0xEF, 0x5C, 0xEF, 0x9C, 0xCE, 0xF6, 0x95, 0x6F, 0xAD, 0xF1, 0xBE, 0x74, 0xBD, 0xD5, 0xDE, 0xFB, 0xFF, 0xDF, 0x18, 0xC3, 0x63, 0x0C, 0xFF, 0xFF, 0xFF, 0xDF, 0xCE, 0x79, 0x00, 0x00, 0xA5, 0x14, 0xEF, 0x5D, 0xA5, 0x14, 0x63, 0x0B, 0x52, 0x89, 0x52, 0x89, 0x8C, 0x51, 0xDE, 0xFB, 0xEF, 0x5D, 0x00, 0x00, 0x94, 0x92, 0xFF, 0xDF, 0xF7, 0x9E, 0xF7, 0x9E, 0x00, 0x00, 0x8C, 0x51, 0xFF, 0xFF, 0x94, 0x92, 0x00, 0x00, 0x6B, 0x6D, 0xF7, 0xBE, 0xDE, 0xFB, 0xAD, 0x55, 0x73, 0x6D, 0x83, 0xEF, 0xCE, 0x79, 0xF7, 0xBE, 0x10, 0xA2, 0x6B, 0x4D, 0xFF, 0xDF, 0xEF, 0x7D, 0xE7, 0x3C, 0xEF, 0x5D, 0xE7, 0x1C, 0xEF, 0x5D, 0xEF, 0x7E, 0xFF, 0xFF, 0x29, 0x65, 0x42, 0x28, 0xF7, 0xBE, 0xBD, 0xF8, 0x8C, 0x51, 0xBD, 0xD7, 0xF7, 0x9E, 0x6B, 0x6D, 0x10, 0x82, 0xF7, 0xBE, 0xCE, 0x79, 0x7B, 0xCF, 0x52, 0x8A, 0x7B, 0xEF, 0xD6, 0xBA, 0xEF, 0x5D, 0x00, 0x00, 0x8C, 0x71, 0xF7, 0xBE, 0xDE, 0xDB, 0xC6, 0x18, 0xB5, 0x96, 0xAD, 0x75, 0xCE, 0x79, 0xF7, 0xBE, 0xEF, 0x5D, 0xE7, 0x3C, 0xF7, 0x9E, 0xD6, 0xBA, 0xBD, 0xF4, 0xAD, 0x72, 0xAD, 0x51, 0xB5, 0x91, 0xBD, 0xB2, 0xCE, 0x36, 0xF7, 0x9D, 0x9C, 0xD3, 0x00, 0x00, 0xE7, 0x1C, 0xEF, 0x5C, 0xC6, 0x54, 0xA5, 0x6E, 0xB6, 0x0F, 0xBE, 0x4E, 0xC6, 0x91, 0xE7, 0x3A, 0xFF, 0xDF, 0x21, 0x04, 0x5A, 0xEB, 0xFF, 0xFF, 0xFF, 0xDF, 0xE7, 0x3C, 0x00, 0x00, 0x8C, 0x51, 0xFF, 0xDE, 0xEF, 0x5A, 0xCE, 0x34, 0xE6, 0xB6, 0xD6, 0x35, 0xE6, 0xB9, 0xFF, 0xBE, 0x84, 0x10, 0x00, 0x20, 0xFF, 0xFF, 0xF7, 0x7D, 0xD6, 0x58, 0xDE, 0x77, 0xE6, 0xB8, 0xE6, 0xB8, 0xF7, 0x5C, 0xFF, 0xDF, 0x42, 0x28, 0x31, 0xA6, 0xF7, 0xBE, 0xC6, 0x77, 0x74, 0x8C, 0x53, 0xE8, 0x85, 0x4F, 0x95, 0x71, 0x53, 0x8A, 0x21, 0xE3, 0x19, 0xA3, 0x22, 0x04, 0x21, 0xE3, 0x21, 0xE3, 0x19, 0xA2, 0x11, 0x62, 0x11, 0x62, 0x21, 0xC3, 0x19, 0xA3, 0x21, 0xC3, 0x11, 0x41, 0x4B, 0x28, 0x5C, 0x0A, 0x5C, 0x0A, 0x4B, 0xA8, 0x5C, 0x09, 0x6C, 0x8C, 0xA4, 0xB0, 0x83, 0xAC, 0x73, 0x6B, 0xBD, 0x93, 0xAC, 0xF0, 0xA4, 0xF0, 0xA5, 0x10, 0xAD, 0x31, 0xB5, 0x52, 0xBD, 0xB3, 0xB5, 0x72, 0xCE, 0x15, 0xC5, 0xD4, 0xC5, 0xD4, 0xB5, 0x52, 0xB5, 0x52, 0xD6, 0x76, 0xDE, 0x96, 0xFF, 0xBE, 0x6B, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xF7, 0xBE, 0xF7, 0x9D, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCE, 0x59, 0xDE, 0xFB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x9E, 0x9C, 0xF3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x04, 0xFF, 0xFF, 0xF7, 0x9D, 0xF7, 0x9D, 0xFF, 0xFF, 0x10, 0xA2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAD, 0x75, 0xEF, 0x9D, 0xBE, 0x15, 0xA5, 0x51, 0x9D, 0x10, 0x94, 0xCF, 0x73, 0xEB, 0x73, 0xE9, 0x8C, 0x8B, 0x94, 0xCC, 0x94, 0xAC, 0xA5, 0x0E, 0xC5, 0xD2, 0xCD, 0xF3, 0xFF, 0xFF, 0xA5, 0x34, 0x00, 0x00, 0xCE, 0x79, 0xF7, 0x9D, 0xDE, 0x98, 0xEF, 0x7C, 0xD6, 0x9A, 0x00, 0x00, 0xA5, 0x34, 0xFF, 0xBE, 0xE6, 0xFA, 0xF7, 0xBE, 0x9C, 0xF3, 0x00, 0x00, 0xBD, 0xF7, 0xF7, 0x9D, 0xCE, 0x15, 0xC5, 0xB3, 0xD6, 0x36, 0xAD, 0x13, 0xAD, 0x54, 0xF7, 0x9D, 0x84, 0x10, 0x00, 0x00, 0xFF, 0xDF, 0xF7, 0xBE, 0xFF, 0xDF, 0x9C, 0xF3, 0x00, 0x00, 0xDE, 0xFB, 0xF7, 0xBE, 0xF7, 0x9E, 0xEF, 0x7D, 0x00, 0x20, 0xAD, 0x55, 0xFF, 0xFF, 0x63, 0x2C, 0x39, 0xC7, 0xFF, 0xDF, 0xF7, 0x7D, 0xFF, 0xDF, 0x9C, 0xF3, 0x00, 0x00, 0xDE, 0xFB, 0xFF, 0xDF, 0xFF, 0xFF, 0xB5, 0x96, 0x00, 0x00, 0xD6, 0xBA, 0xFF, 0xFF, 0xFF, 0xDF, 0xF7, 0xBE, 0xF7, 0xBE, 0xF7, 0xBE, 0xFF, 0xDE, 0xFF, 0xFF, 0xFF, 0xDF, 0x00, 0x00, 0x7B, 0xCF, 0xFF, 0xDF, 0xF7, 0x9D, 0xFF, 0xDF, 0x08, 0x41, 0x52, 0x8A, 0xF7, 0x9E, 0xBD, 0xD7, 0x84, 0x30, 0x8C, 0x51, 0x6B, 0x6D, 0x94, 0xB2, 0xE7, 0x3C, 0xEF, 0x5D, 0x00, 0x00, 0x94, 0xB2, 0xF7, 0xBE, 0xDE, 0xFB, 0xF7, 0xBE, 0x4A, 0x69, 0x18, 0xC3, 0xD6, 0x9A, 0xFF, 0xDF, 0xFF, 0xDF, 0xF7, 0xBE, 0xF7, 0xBE, 0xFF, 0xDE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x9D, 0xE7, 0x7C, 0xFF, 0xDE, 0x84, 0x10, 0x00, 0x00, 0xFF, 0xDF, 0xE7, 0x7B, 0xA5, 0xD1, 0x74, 0x4A, 0x7C, 0x2B, 0x84, 0x6E, 0x94, 0xB1, 0xCE, 0x79, 0xFF, 0xDE, 0x29, 0x65, 0x52, 0x8A, 0xFF, 0xFF, 0xFF, 0xFF, 0xAD, 0x55, 0x00, 0x00, 0xCE, 0x59, 0xE7, 0x1C, 0x84, 0x10, 0x42, 0x27, 0x3A, 0x06, 0x42, 0x27, 0x7B, 0xCE, 0xD6, 0x99, 0xF7, 0x9E, 0xFF, 0xDF, 0xFF, 0xDF, 0xF7, 0xBE, 0xF7, 0x9E, 0xF7, 0x9E, 0x00, 0x00, 0x8C, 0x51, 0x8C, 0x51, 0x00, 0x00, 0x8C, 0x51, 0xFF, 0xFF, 0xE7, 0x5D, 0xC6, 0x18, 0x6B, 0x4D, 0x5A, 0x8A, 0x7B, 0xCF, 0xD6, 0xBA, 0xF7, 0x9E, 0x00, 0x00, 0x8C, 0x51, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xF7, 0xBF, 0xF7, 0xBF, 0xFF, 0xDF, 0xFF, 0xFF, 0x42, 0x28, 0x31, 0x86, 0xF7, 0xBE, 0xCE, 0x59, 0xA5, 0x14, 0xB5, 0x96, 0xEF, 0x7D, 0x6B, 0x6D, 0x10, 0x82, 0xF7, 0xBE, 0xCE, 0x59, 0x6B, 0x6D, 0x31, 0x86, 0x6B, 0x4D, 0xC6, 0x38, 0xF7, 0xBE, 0x21, 0x24, 0x29, 0x65, 0xDE, 0xFB, 0xF7, 0xBE, 0xF7, 0x9E, 0xEF, 0x7D, 0xEF, 0x7D, 0xF7, 0xBE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xF7, 0x9D, 0xDE, 0xD9, 0xAD, 0x73, 0xA5, 0x31, 0xAD, 0x92, 0xB5, 0x91, 0xB5, 0x92, 0xC6, 0x36, 0xF7, 0x9E, 0x84, 0x30, 0x00, 0x00, 0xF7, 0xBE, 0xEF, 0x5B, 0xBE, 0x32, 0x9D, 0x6A, 0xA5, 0xAA, 0xAE, 0x0A, 0xB6, 0x2D, 0xD6, 0xF8, 0xFF, 0xDE, 0x31, 0xA6, 0x4A, 0x49, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x3C, 0x00, 0x00, 0x9C, 0xD3, 0xF7, 0xBE, 0xDE, 0xF8, 0xA4, 0xF0, 0xD6, 0x76, 0xDE, 0xB7, 0xD6, 0x78, 0xF7, 0x9E, 0xAD, 0x55, 0x00, 0x00, 0xC6, 0x38, 0xFF, 0xDF, 0xF7, 0x9D, 0xF7, 0x9D, 0xF7, 0x7D, 0xF7, 0x9D, 0xFF, 0xDF, 0xF7, 0x9E, 0x10, 0xA2, 0x63, 0x0C, 0xF7, 0x9D, 0xB5, 0xF5, 0x6C, 0x6B, 0x3B, 0x44, 0x64, 0x2A, 0x5B, 0xEA, 0x32, 0x85, 0x21, 0xE3, 0x11, 0x82, 0x22, 0x03, 0x21, 0xE3, 0x21, 0xE3, 0x19, 0xA3, 0x19, 0x83, 0x19, 0xC3, 0x2A, 0x04, 0x2A, 0x04, 0x19, 0xA3, 0x21, 0xC3, 0x64, 0x0A, 0x6C, 0x8B, 0x53, 0xC8, 0x53, 0xC8, 0x74, 0xCD, 0x7D, 0x0E, 0xAC, 0xF1, 0x83, 0xAC, 0x73, 0x4B, 0xC5, 0xD4, 0xB5, 0x52, 0xAD, 0x10, 0xA4, 0xD0, 0xAD, 0x11, 0xB5, 0x72, 0xAD, 0x31, 0xAD, 0x31, 0xC5, 0xF4, 0xBD, 0xD4, 0xBD, 0x93, 0xC6, 0x15, 0xC5, 0xF4, 0xD6, 0x76, 0xD6, 0x75, 0xFF, 0xBE, 0x63, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xDE, 0xFF, 0xBE, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x38, 0xDE, 0xDB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x9E, 0x7B, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 0xFF, 0xFF, 0xFF, 0xBD, 0xFF, 0xBD, 0xFF, 0xFF, 0x08, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0xB2, 0xFF, 0xDE, 0xCE, 0x76, 0xC6, 0x14, 0xC5, 0xF4, 0xAD, 0x72, 0x8C, 0x8E, 0xBD, 0xF3, 0xE7, 0x17, 0xD6, 0x75, 0xA4, 0xCE, 0xAC, 0xEF, 0xBD, 0xB2, 0xCD, 0xF3, 0xFF, 0xFF, 0xA5, 0x34, 0x00, 0x00, 0xCE, 0x79, 0xF7, 0x9D, 0xDE, 0x98, 0xEF, 0x7D, 0xD6, 0x9A, 0x00, 0x00, 0xA5, 0x34, 0xF7, 0x9E, 0xDE, 0xB9, 0xF7, 0x9D, 0x9C, 0xF3, 0x00, 0x00, 0xD6, 0x9A, 0xEF, 0x5C, 0xCE, 0x35, 0xDE, 0x77, 0xAD, 0x12, 0x5A, 0xCA, 0xC5, 0xF6, 0xF7, 0x9D, 0x8C, 0x71, 0x00, 0x00, 0xEF, 0x7D, 0xF7, 0x9D, 0xF7, 0x9E, 0xE7, 0x1C, 0x00, 0x00, 0x9C, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0x96, 0x00, 0x00, 0xEF, 0x5D, 0xFF, 0xFF, 0xAD, 0x55, 0x00, 0x20, 0xF7, 0x9E, 0xFF, 0xFF, 0xFF, 0xFF, 0x5A, 0xEB, 0x21, 0x24, 0xFF, 0xDF, 0xF7, 0x7D, 0xFF, 0xDF, 0xA5, 0x14, 0x00, 0x00, 0x39, 0xE7, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x00, 0x20, 0x6B, 0x4D, 0xFF, 0xFF, 0xF7, 0xBE, 0xFF, 0xDF, 0x08, 0x41, 0x63, 0x2C, 0xEF, 0x7D, 0xAD, 0x75, 0x63, 0x0C, 0x52, 0xAA, 0x63, 0x0C, 0x94, 0xB2, 0xE7, 0x1C, 0xF7, 0xBE, 0x00, 0x00, 0x84, 0x10, 0xF7, 0x9E, 0xD6, 0xDA, 0xF7, 0xBE, 0xD6, 0xBA, 0x21, 0x04, 0x00, 0x00, 0x18, 0xC3, 0x42, 0x08, 0x63, 0x2C, 0x84, 0x30, 0xA5, 0x34, 0xD6, 0x9A, 0xFF, 0xDF, 0xFF, 0xDF, 0xE7, 0x5C, 0xDF, 0x19, 0xF7, 0xBE, 0x73, 0xAE, 0x08, 0x41, 0xFF, 0xFF, 0xDF, 0x3A, 0x95, 0x0F, 0x95, 0x2E, 0xA5, 0x6F, 0x9D, 0x0F, 0x9D, 0x31, 0xCE, 0x99, 0xFF, 0xDE, 0x42, 0x08, 0x39, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0x9C, 0xF3, 0x00, 0x00, 0xDE, 0xDB, 0xDE, 0xDB, 0x7B, 0xEF, 0x39, 0xE6, 0x31, 0x85, 0x31, 0xA5, 0x6B, 0x4C, 0xBD, 0xD6, 0xDE, 0xDB, 0xE7, 0x1B, 0xE7, 0x1C, 0xE7, 0x1C, 0xEF, 0x7D, 0xF7, 0x9E, 0x00, 0x00, 0x21, 0x04, 0x00, 0x00, 0x8C, 0x51, 0xFF, 0xFF, 0xF7, 0xBE, 0xCE, 0x59, 0xCE, 0x7A, 0x7B, 0xAF, 0x73, 0xAF, 0xB5, 0xB6, 0xEF, 0x5D, 0xEF, 0x5D, 0x00, 0x00, 0x29, 0x45, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x10, 0xA2, 0x21, 0x04, 0xF7, 0xBE, 0xC6, 0x38, 0x7B, 0xEF, 0xA5, 0x35, 0xEF, 0x7D, 0x6B, 0x6D, 0x10, 0x82, 0xF7, 0xBE, 0xCE, 0x59, 0x6B, 0x6D, 0x29, 0x65, 0x52, 0x8A, 0xA5, 0x34, 0xEF, 0x5D, 0xBD, 0xF7, 0x10, 0xA2, 0x00, 0x00, 0x21, 0x04, 0x42, 0x28, 0x6B, 0x4D, 0x8C, 0x51, 0xAD, 0x75, 0xD6, 0xBA, 0xFF, 0xFF, 0xFF, 0xDF, 0xE7, 0x1B, 0xB5, 0x94, 0x9C, 0xD0, 0xB5, 0x92, 0xBD, 0xB2, 0xAD, 0x2F, 0xC6, 0x33, 0xC6, 0x36, 0xF7, 0x9D, 0x7B, 0xCF, 0x00, 0x20, 0xFF, 0xDF, 0xEF, 0x7B, 0xC6, 0x93, 0xA5, 0xAC, 0xA5, 0xAB, 0xB6, 0x4B, 0xAE, 0x2B, 0xD6, 0xF7, 0xFF, 0xFE, 0x42, 0x28, 0x39, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x3C, 0x00, 0x00, 0x9C, 0xD3, 0xF7, 0xBE, 0xD6, 0x98, 0xB5, 0x73, 0xA5, 0x11, 0xEF, 0x79, 0xE7, 0x3A, 0xF7, 0xBE, 0xF7, 0x9E, 0x10, 0xA2, 0x18, 0xC3, 0x84, 0x30, 0xC6, 0x18, 0xD6, 0x9A, 0xD6, 0xBA, 0xC6, 0x38, 0x9C, 0xD3, 0x29, 0x65, 0x08, 0x41, 0xCE, 0x79, 0xE7, 0x3C, 0x95, 0x11, 0x53, 0xA7, 0x3B, 0x44, 0x3B, 0x05, 0x3A, 0xC6, 0x22, 0x24, 0x19, 0xC2, 0x11, 0x61, 0x19, 0xC3, 0x22, 0x03, 0x21, 0xE3, 0x21, 0xE3, 0x21, 0xE3, 0x22, 0x04, 0x2A, 0x25, 0x21, 0xE4, 0x11, 0x42, 0x21, 0xA3, 0x53, 0x68, 0x3A, 0xC5, 0x3B, 0x06, 0x74, 0xCD, 0x85, 0x4F, 0x85, 0x0F, 0x8B, 0xEE, 0x73, 0x2A, 0x73, 0x4B, 0xA4, 0xF0, 0xAD, 0x10, 0xB5, 0x31, 0xB5, 0x31, 0xAC, 0xF0, 0xB5, 0x32, 0xAD, 0x11, 0xB5, 0x73, 0xB5, 0x72, 0xA4, 0xF0, 0x83, 0xCC, 0xBD, 0xB4, 0xE6, 0xD8, 0xDE, 0xB7, 0xDE, 0x96, 0xF7, 0xBE, 0x94, 0xB2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0x10, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD6, 0xBA, 0xEF, 0x7D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x61, 0xFF, 0xFF, 0xB5, 0xB6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x28, 0xFF, 0xFF, 0xF7, 0x9D, 0xFF, 0xBE, 0xFF, 0xFF, 0x39, 0xC7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCE, 0x79, 0xF7, 0xBD, 0xD6, 0xD7, 0xD6, 0xB6, 0xBD, 0xF3, 0xA5, 0x31, 0x84, 0x4E, 0xCE, 0x55, 0xE6, 0xD7, 0xDE, 0xB6, 0xA4, 0xEF, 0xAD, 0x0F, 0xCE, 0x34, 0xD6, 0x55, 0xFF, 0xFF, 0xA5, 0x34, 0x00, 0x00, 0xCE, 0x79, 0xF7, 0x9D, 0xE6, 0xF9, 0xF7, 0x9D, 0xD6, 0x9A, 0x00, 0x00, 0xA5, 0x34, 0xF7, 0xBE, 0xE6, 0xDA, 0xF7, 0xBE, 0x9C, 0xF3, 0x00, 0x00, 0xDE, 0xDB, 0xEF, 0x5C, 0xC6, 0x14, 0xA5, 0x11, 0x5A, 0xC9, 0x94, 0x6F, 0xD6, 0x77, 0xEF, 0x7D, 0x94, 0xB2, 0x00, 0x00, 0xEF, 0x5D, 0xEF, 0x5D, 0xE7, 0x3C, 0xFF, 0xDE, 0x21, 0x24, 0x5A, 0xEB, 0xFF, 0xFF, 0xFF, 0xFF, 0x73, 0x8E, 0x29, 0x65, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x5D, 0x00, 0x00, 0xB5, 0xB6, 0xFF, 0xFF, 0xFF, 0xFF, 0x18, 0xC3, 0x6B, 0x4D, 0xFF, 0xDE, 0xEF, 0x3C, 0xF7, 0xBE, 0x9C, 0xD3, 0x00, 0x00, 0x5A, 0xEB, 0x63, 0x2C, 0x63, 0x2C, 0x63, 0x2C, 0x63, 0x2C, 0x63, 0x2C, 0x63, 0x2C, 0x63, 0x2C, 0x63, 0x2C, 0x63, 0x2C, 0xA5, 0x34, 0xFF, 0xFF, 0xF7, 0xBE, 0xFF, 0xFF, 0x08, 0x41, 0x73, 0x8E, 0xF7, 0x9D, 0xAD, 0x55, 0x5A, 0xCA, 0x39, 0xE7, 0x52, 0xAA, 0x8C, 0x71, 0xDE, 0xDB, 0xFF, 0xDF, 0x00, 0x00, 0x84, 0x10, 0xF7, 0x9E, 0xD6, 0xBA, 0xEF, 0x7C, 0xFF, 0xDF, 0xFF, 0xDF, 0xB5, 0x96, 0x7B, 0xEF, 0x5A, 0xCB, 0x31, 0xA6, 0x10, 0x82, 0x00, 0x00, 0x00, 0x00, 0x21, 0x04, 0xB5, 0xB6, 0xF7, 0x9E, 0xE7, 0x3C, 0xF7, 0xDE, 0x73, 0x8E, 0x10, 0x82, 0xFF, 0xDF, 0xD6, 0xD9, 0xA5, 0xB1, 0x95, 0x6B, 0xAD, 0xED, 0xA5, 0xAE, 0x95, 0x2E, 0xCE, 0x98, 0xFF, 0xDE, 0x42, 0x08, 0x39, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0x9C, 0xD3, 0x00, 0x00, 0xDE, 0xFB, 0xDE, 0xDB, 0x7B, 0xEF, 0x31, 0xA5, 0x29, 0x64, 0x29, 0x64, 0x63, 0x0B, 0xAD, 0x75, 0xD6, 0x9A, 0xDE, 0xDB, 0xDE, 0xFB, 0xE7, 0x1C, 0xEF, 0x7D, 0xF7, 0x9E, 0x00, 0x00, 0x73, 0xAE, 0x29, 0x65, 0x18, 0xE3, 0xDE, 0xDB, 0xFF, 0xDF, 0xDE, 0xDB, 0xC5, 0xF8, 0xCE, 0x59, 0xD6, 0x9A, 0xCE, 0x59, 0xEF, 0x5D, 0xDE, 0xFB, 0x00, 0x00, 0x39, 0xE7, 0x63, 0x2C, 0x63, 0x2C, 0x63, 0x2C, 0x63, 0x2C, 0x63, 0x2C, 0x63, 0x2C, 0x63, 0x2C, 0x63, 0x2C, 0x63, 0x2C, 0x7B, 0xCF, 0xF7, 0xBE, 0xC6, 0x38, 0x84, 0x30, 0xB5, 0x76, 0xEF, 0x7D, 0x6B, 0x6D, 0x10, 0x82, 0xF7, 0xBE, 0xCE, 0x59, 0x6B, 0x4D, 0x29, 0x45, 0x4A, 0x69, 0x9C, 0xD3, 0xDE, 0xDB, 0xFF, 0xDF, 0xF7, 0x9E, 0xAD, 0x55, 0x7B, 0xCF, 0x52, 0xAA, 0x31, 0x86, 0x08, 0x61, 0x00, 0x00, 0x00, 0x00, 0x31, 0x86, 0xCE, 0x79, 0xF7, 0xBE, 0xD6, 0x98, 0xB5, 0x94, 0xAD, 0x12, 0x8C, 0x2E, 0x9C, 0xAF, 0xC6, 0x13, 0xC6, 0x16, 0xF7, 0x7D, 0x73, 0xAE, 0x08, 0x41, 0xFF, 0xDF, 0xDE, 0xFA, 0xC6, 0x95, 0x95, 0x0E, 0x8C, 0xEC, 0xAE, 0x2B, 0xAE, 0x0B, 0xD7, 0x17, 0xFF, 0xFE, 0x42, 0x28, 0x39, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x3C, 0x00, 0x00, 0x9C, 0xD3, 0xF7, 0x9E, 0xC6, 0x36, 0xBD, 0xB3, 0xDE, 0xD7, 0xEF, 0x59, 0xEF, 0x5C, 0xE7, 0x3C, 0x21, 0x04, 0x4A, 0x49, 0x5A, 0xCB, 0x08, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0xC7, 0xC6, 0x18, 0xEF, 0x9D, 0xBE, 0x37, 0x6C, 0x0C, 0x64, 0x0A, 0x64, 0x09, 0x74, 0x8C, 0x74, 0x6D, 0x19, 0xE3, 0x11, 0x82, 0x09, 0x01, 0x19, 0xA2, 0x22, 0x03, 0x21, 0xE3, 0x19, 0xC2, 0x11, 0x82, 0x21, 0xC3, 0x19, 0xC3, 0x19, 0x83, 0x09, 0x02, 0x11, 0x42, 0x42, 0xE7, 0x21, 0xE3, 0x3A, 0xC6, 0x74, 0xAC, 0x85, 0x2F, 0x8D, 0x70, 0x5A, 0x89, 0x6B, 0x0A, 0x73, 0x4B, 0x7B, 0x8B, 0x7B, 0x8A, 0x83, 0xAB, 0x83, 0xAB, 0x83, 0xAB, 0x83, 0xCC, 0x94, 0x4E, 0x83, 0xCC, 0x83, 0xCC, 0x8B, 0xEC, 0x9C, 0x8F, 0xBD, 0x93, 0xCE, 0x15, 0xCD, 0xF4, 0xC5, 0xD3, 0xF7, 0x9D, 0xDE, 0xFB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x8A, 0xFF, 0xFF, 0xFF, 0xBE, 0xFF, 0xBE, 0xFF, 0xFF, 0x52, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0x39, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xCB, 0xFF, 0xFF, 0xF7, 0x9E, 0x18, 0xC3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9C, 0xF3, 0xFF, 0xDE, 0xF7, 0x7C, 0xEF, 0x5B, 0xF7, 0xBE, 0x94, 0x91, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x45, 0xFF, 0xDE, 0xEF, 0x7C, 0xD6, 0xF7, 0xC6, 0x34, 0x5B, 0x08, 0x84, 0x2D, 0x63, 0x49, 0xD6, 0xB6, 0xDE, 0xB6, 0xD6, 0x75, 0x94, 0x8C, 0x7C, 0x4A, 0x84, 0xAC, 0x9D, 0x2F, 0xFF, 0xFF, 0xA5, 0x34, 0x00, 0x00, 0xCE, 0x79, 0xEF, 0x7D, 0xDE, 0xD9, 0xF7, 0x9D, 0xD6, 0x9A, 0x00, 0x00, 0xA5, 0x34, 0xF7, 0xBE, 0xE7, 0x3B, 0xF7, 0xBE, 0x9C, 0xF3, 0x00, 0x00, 0xD6, 0x9A, 0xE7, 0x3C, 0xBE, 0x15, 0x5A, 0xE9, 0x7C, 0x0C, 0xB5, 0x91, 0xD6, 0x57, 0xF7, 0x9D, 0x84, 0x30, 0x00, 0x00, 0xF7, 0x9E, 0xE7, 0x3C, 0xDE, 0xFA, 0xF7, 0xBE, 0x6B, 0x6D, 0x18, 0xC3, 0xFF, 0xFF, 0xFF, 0xFF, 0x29, 0x65, 0x73, 0x8E, 0xFF, 0xFF, 0xF7, 0xBE, 0xFF, 0xFF, 0x29, 0x65, 0x73, 0x8E, 0xFF, 0xFF, 0xD6, 0xBA, 0x00, 0x00, 0xAD, 0x75, 0xF7, 0x9D, 0xDE, 0xD9, 0xF7, 0x9D, 0xA5, 0x14, 0x00, 0x00, 0xDE, 0xFB, 0xFF, 0xFF, 0xF7, 0xBE, 0xF7, 0x9E, 0xF7, 0xBE, 0xF7, 0xBE, 0xF7, 0xBE, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xDE, 0xFF, 0xFF, 0x08, 0x41, 0x63, 0x2C, 0xF7, 0xBE, 0xC6, 0x17, 0x63, 0x2C, 0x39, 0xE6, 0x42, 0x07, 0x84, 0x0F, 0xDE, 0xDB, 0xEF, 0x7D, 0x00, 0x00, 0x8C, 0x51, 0xFF, 0xDF, 0xEF, 0x7D, 0xFF, 0xDE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xBE, 0xF7, 0xBE, 0xF7, 0xDE, 0xFF, 0xDF, 0xEF, 0x5D, 0xB5, 0x96, 0x31, 0x86, 0x08, 0x61, 0xE7, 0x3C, 0xF7, 0xBE, 0xFF, 0xFF, 0x7B, 0xEF, 0x00, 0x00, 0xF7, 0xDE, 0xDF, 0x1A, 0xAD, 0xF0, 0x7C, 0xE7, 0x8D, 0x48, 0x85, 0x08, 0x8D, 0x4D, 0xCE, 0xB8, 0xF7, 0xDE, 0x31, 0xA6, 0x4A, 0x49, 0xFF, 0xFF, 0xFF, 0xFF, 0xA5, 0x34, 0x00, 0x00, 0xCE, 0x59, 0xE7, 0x1B, 0x7C, 0x0F, 0x39, 0xE6, 0x31, 0xA5, 0x31, 0xC5, 0x6B, 0x6D, 0xC6, 0x18, 0xEF, 0x7D, 0xF7, 0xBE, 0xF7, 0xBE, 0xF7, 0xBE, 0xF7, 0x9E, 0xF7, 0x9E, 0x00, 0x00, 0x8C, 0x51, 0xEF, 0x5D, 0x29, 0x65, 0x18, 0xC3, 0xD6, 0x9A, 0xF7, 0xBE, 0xDE, 0xFB, 0xCE, 0x59, 0xC6, 0x38, 0xB5, 0x96, 0xE7, 0x1C, 0xE7, 0x3C, 0x00, 0x00, 0x94, 0x92, 0xFF, 0xFF, 0xF7, 0xBE, 0xF7, 0x9E, 0xF7, 0x9E, 0xF7, 0x9E, 0xF7, 0x9E, 0xF7, 0xBE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xBE, 0xCE, 0x59, 0xA5, 0x14, 0xCE, 0x59, 0xF7, 0x9E, 0x6B, 0x6D, 0x10, 0x82, 0xF7, 0xBE, 0xCE, 0x59, 0x6B, 0x4D, 0x31, 0xA6, 0x7B, 0xEF, 0xD6, 0xBA, 0xF7, 0xBE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xBE, 0xF7, 0xBE, 0xFF, 0xDE, 0xFF, 0xFF, 0xE7, 0x1C, 0xA5, 0x34, 0x18, 0xE3, 0x21, 0x04, 0xFF, 0xDE, 0xE7, 0x1B, 0xB5, 0x94, 0xAD, 0x12, 0x6B, 0x4B, 0xA4, 0xF1, 0xCE, 0x14, 0xBD, 0xB5, 0xEF, 0x7D, 0x84, 0x10, 0x00, 0x00, 0xF7, 0xBE, 0xDE, 0xDA, 0xAD, 0x93, 0x9D, 0x90, 0xA5, 0xAF, 0xAE, 0x2C, 0xA5, 0xEC, 0xD7, 0x17, 0xF7, 0xDE, 0x39, 0xC7, 0x42, 0x28, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x3C, 0x00, 0x00, 0x9C, 0xD3, 0xF7, 0x9D, 0xC6, 0x36, 0xC6, 0x53, 0xCE, 0x53, 0xE7, 0x39, 0xF7, 0xBE, 0x94, 0x92, 0x08, 0x41, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xDF, 0xE7, 0x3C, 0xD6, 0xBA, 0xCE, 0x79, 0xDE, 0xDB, 0xF7, 0x9E, 0xFF, 0xFF, 0xFF, 0xDF, 0xD6, 0xDA, 0x8C, 0xB1, 0x6B, 0xCB, 0xAD, 0xB2, 0x74, 0x2B, 0x8D, 0x30, 0x95, 0x51, 0x19, 0xA3, 0x19, 0x82, 0x21, 0xC4, 0x2A, 0x44, 0x22, 0x23, 0x21, 0xE3, 0x19, 0xC2, 0x11, 0x62, 0x11, 0x42, 0x11, 0x42, 0x19, 0xA4, 0x09, 0x02, 0x11, 0x43, 0x19, 0xA3, 0x2A, 0x24, 0x4B, 0x68, 0x64, 0x4B, 0x43, 0x47, 0x7C, 0xEE, 0x62, 0xCA, 0x7B, 0xAC, 0x8C, 0x2E, 0x73, 0x6B, 0x7B, 0x6A, 0x83, 0x8B, 0x9C, 0x4E, 0xA4, 0xAF, 0xA4, 0xB0, 0xA4, 0xCF, 0x9C, 0x6E, 0x94, 0x2D, 0x94, 0x2D, 0x8C, 0x0C, 0x94, 0x0C, 0x8B, 0xEC, 0x8B, 0xEC, 0x8B, 0xEC, 0xDE, 0xDA, 0xFF, 0xDE, 0x52, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xC6, 0x38, 0xF7, 0x9E, 0xD6, 0x99, 0xD6, 0x58, 0xEF, 0x7D, 0xE7, 0x1B, 0x29, 0x45, 0x00, 0x00, 0x00, 0x00, 0x10, 0xA2, 0xC6, 0x38, 0xFF, 0xFF, 0xFF, 0xDF, 0xDE, 0xFB, 0x31, 0x86, 0x00, 0x00, 0x00, 0x00, 0x42, 0x08, 0xEF, 0x5D, 0xFF, 0xFF, 0xFF, 0xFF, 0xC6, 0x38, 0x21, 0x04, 0x00, 0x00, 0x00, 0x20, 0x7B, 0xCF, 0xFF, 0xDE, 0xF7, 0x9C, 0xDE, 0xD7, 0xCE, 0x96, 0xF7, 0xBD, 0xFF, 0xFF, 0x73, 0xAE, 0x08, 0x41, 0x00, 0x00, 0x39, 0xC7, 0xD6, 0xBA, 0xEF, 0x5C, 0xAD, 0x95, 0xB6, 0x13, 0x95, 0x0E, 0x63, 0x68, 0x9D, 0x0F, 0x73, 0xAB, 0xBE, 0x13, 0x9C, 0xEE, 0x7C, 0x6B, 0x74, 0x49, 0x7C, 0xCB, 0x95, 0x4D, 0x95, 0x0C, 0xFF, 0xFF, 0xA5, 0x34, 0x00, 0x00, 0xCE, 0x79, 0xF7, 0x7D, 0xD6, 0x98, 0xEF, 0x7D, 0xD6, 0x9A, 0x00, 0x00, 0xA5, 0x34, 0xF7, 0xBE, 0xE7, 0x1B, 0xF7, 0xBE, 0x9C, 0xF3, 0x00, 0x00, 0xB5, 0x96, 0xF7, 0xBE, 0xAD, 0x74, 0x5B, 0x2A, 0x7C, 0x4A, 0x8C, 0xCD, 0xCE, 0x77, 0xF7, 0xBE, 0x73, 0xAE, 0x10, 0xA2, 0xFF, 0xDF, 0xE7, 0x1B, 0xCE, 0x77, 0xF7, 0x9D, 0xB5, 0x95, 0x00, 0x00, 0xDE, 0xDB, 0xEF, 0x7D, 0x00, 0x00, 0xB5, 0x96, 0xFF, 0xBE, 0xEF, 0x5C, 0xFF, 0xDE, 0x73, 0x8E, 0x31, 0x86, 0xFF, 0xFF, 0x94, 0xB2, 0x00, 0x00, 0xEF, 0x5D, 0xE7, 0x1B, 0xC6, 0x36, 0xEF, 0x7D, 0xBD, 0xD7, 0x00, 0x00, 0xCE, 0x79, 0xF7, 0xBE, 0xD6, 0x9A, 0xE7, 0x3B, 0xE7, 0x3B, 0xC6, 0x38, 0xCE, 0x79, 0xEF, 0x7D, 0xFF, 0xFF, 0xDE, 0xFB, 0xEF, 0x7D, 0xFF, 0xFF, 0xF7, 0xBE, 0xFF, 0xFF, 0x08, 0x41, 0x42, 0x28, 0xFF, 0xFF, 0xDF, 0x1B, 0xB5, 0xF5, 0x5A, 0xEA, 0x4A, 0x48, 0x94, 0x91, 0xE7, 0x1C, 0xDE, 0xFB, 0x00, 0x00, 0xA5, 0x34, 0xFF, 0xDF, 0xF7, 0xBE, 0xEF, 0x7D, 0xBD, 0xD7, 0xEF, 0x5D, 0xFF, 0xDE, 0xD6, 0xF9, 0xBE, 0x36, 0xCE, 0x98, 0xDF, 0x5A, 0xE7, 0x3B, 0xF7, 0xBE, 0xC6, 0x38, 0x00, 0x00, 0xAD, 0x55, 0xFF, 0xFF, 0xFF, 0xFF, 0x8C, 0x71, 0x00, 0x00, 0xEF, 0x7D, 0xDF, 0x3B, 0xA5, 0xB0, 0xB6, 0x6E, 0xB6, 0x4D, 0xA5, 0xEC, 0x95, 0x8F, 0xD6, 0xF9, 0xFF, 0xDE, 0x21, 0x24, 0x52, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xBD, 0xF7, 0x00, 0x00, 0xB5, 0xB6, 0xEF, 0x5D, 0x8C, 0x71, 0x3A, 0x07, 0x31, 0xA5, 0x39, 0xE6, 0x73, 0x8D, 0xCE, 0x79, 0xF7, 0xBE, 0x31, 0xA6, 0x7B, 0xCF, 0xFF, 0xDF, 0xF7, 0x9E, 0xF7, 0x9E, 0x00, 0x00, 0x8C, 0x51, 0xFF, 0xFF, 0xEF, 0x7D, 0x31, 0x86, 0x10, 0x82, 0xCE, 0x59, 0xF7, 0xBE, 0xE7, 0x1C, 0xD6, 0x7A, 0xCE, 0x39, 0xDE, 0xDB, 0xF7, 0xBE, 0x00, 0x20, 0x84, 0x10, 0xF7, 0xBE, 0xD6, 0xBA, 0xB5, 0xB6, 0xAD, 0x75, 0xAD, 0x75, 0xB5, 0xB6, 0xDE, 0xDB, 0xF7, 0xBE, 0xEF, 0x5D, 0xE7, 0x1C, 0xF7, 0xBE, 0xC6, 0x38, 0xB5, 0xB6, 0xC6, 0x38, 0xF7, 0x9E, 0x6B, 0x6D, 0x10, 0x82, 0xF7, 0xBE, 0xCE, 0x59, 0x6B, 0x4D, 0x31, 0x86, 0x84, 0x30, 0xE7, 0x3C, 0xE7, 0x3C, 0xBD, 0xD7, 0xF7, 0x9E, 0xF7, 0x9E, 0xDF, 0x1B, 0xCE, 0xB8, 0xD6, 0xD9, 0xE7, 0x5B, 0xF7, 0x9D, 0xFF, 0xDF, 0xA5, 0x14, 0x00, 0x00, 0xCE, 0x79, 0xEF, 0x7D, 0xC6, 0x17, 0xBD, 0xB5, 0x94, 0x91, 0x94, 0x70, 0xB5, 0x73, 0xC5, 0xF7, 0xF7, 0x9E, 0x94, 0x92, 0x00, 0x00, 0xE7, 0x3C, 0xE7, 0x1B, 0xA5, 0x53, 0x9D, 0x50, 0x63, 0xE9, 0x95, 0x8B, 0xA5, 0xCD, 0xDF, 0x18, 0xFF, 0xDE, 0x29, 0x65, 0x52, 0x8A, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x3C, 0x00, 0x00, 0x9C, 0xD3, 0xF7, 0x9D, 0xD6, 0x96, 0xBE, 0x4F, 0xAD, 0x8E, 0xE6, 0xF8, 0xF7, 0xBE, 0x94, 0xB2, 0x00, 0x00, 0xA5, 0x14, 0xEF, 0x7D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x1C, 0xAD, 0x55, 0x8C, 0x70, 0xA5, 0x31, 0x8C, 0x8E, 0x95, 0x10, 0x74, 0x4E, 0x53, 0x4B, 0x32, 0x26, 0x32, 0x46, 0x21, 0xE3, 0x22, 0x03, 0x21, 0xE3, 0x19, 0xC3, 0x19, 0xC3, 0x21, 0xC3, 0x11, 0x62, 0x19, 0xA3, 0x21, 0xE4, 0x2A, 0x25, 0x32, 0x86, 0x3A, 0xA6, 0x4B, 0x69, 0x6C, 0x6C, 0x3A, 0xC5, 0x64, 0x4B, 0x5A, 0x89, 0x39, 0xC6, 0x5A, 0xA9, 0x52, 0x68, 0x42, 0x06, 0x5A, 0xA8, 0x9C, 0x8F, 0xBD, 0xB4, 0xC5, 0x94, 0xA4, 0xD0, 0x7B, 0x8B, 0x8C, 0x0C, 0x9C, 0x4D, 0x83, 0xAB, 0x83, 0x8B, 0x94, 0x0D, 0xAC, 0xD0, 0xA4, 0x8F, 0xC5, 0xD5, 0xEF, 0x3C, 0xF7, 0xBE, 0x8C, 0x51, 0x42, 0x08, 0x5A, 0xCB, 0xCE, 0x59, 0xFF, 0xFF, 0xEF, 0x7D, 0xD6, 0x98, 0xCE, 0x16, 0xDE, 0xB9, 0xEF, 0x7D, 0xF7, 0x9E, 0xBD, 0xD7, 0xB5, 0x96, 0xEF, 0x7D, 0xFF, 0xFF, 0xF7, 0x9E, 0xF7, 0x9D, 0xFF, 0xDF, 0xFF, 0xDF, 0xD6, 0xBA, 0xDE, 0xFB, 0xFF, 0xFF, 0xFF, 0xDF, 0xF7, 0x9D, 0xFF, 0xBE, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x1B, 0xF7, 0x9D, 0xFF, 0xDE, 0xEF, 0x7C, 0xE6, 0xF8, 0xD6, 0x96, 0xE7, 0x39, 0xF7, 0xBD, 0xFF, 0xDE, 0xFF, 0xFF, 0xFF, 0xDF, 0xEF, 0x5D, 0xF7, 0xBE, 0xE7, 0x5C, 0xCE, 0x78, 0xA5, 0x52, 0x84, 0x6C, 0x6B, 0xC8, 0x95, 0x0D, 0xAD, 0xB1, 0x7C, 0x0C, 0xAD, 0xD1, 0x84, 0x6A, 0x8C, 0xED, 0x8D, 0x2D, 0x7C, 0xAB, 0x84, 0xAB, 0x8C, 0xEC, 0xFF, 0xFF, 0xA5, 0x34, 0x00, 0x00, 0xCE, 0x79, 0xF7, 0x7D, 0xD6, 0x99, 0xF7, 0x7D, 0xD6, 0x9A, 0x00, 0x00, 0xA5, 0x34, 0xF7, 0xBE, 0xE7, 0x1B, 0xF7, 0xBE, 0x9C, 0xF3, 0x00, 0x00, 0x73, 0xAE, 0xF7, 0xBE, 0xC6, 0x38, 0xA5, 0x73, 0x95, 0x30, 0xA5, 0x92, 0xD6, 0xD9, 0xFF, 0xDE, 0x39, 0xE7, 0x42, 0x08, 0xFF, 0xDE, 0xDE, 0xD9, 0xC6, 0x15, 0xE7, 0x5C, 0xEF, 0x7D, 0x00, 0x20, 0x9C, 0xD3, 0xAD, 0x55, 0x00, 0x00, 0xEF, 0x5D, 0xEF, 0x5C, 0xD6, 0x98, 0xF7, 0x9D, 0xB5, 0x96, 0x00, 0x00, 0xEF, 0x5D, 0x52, 0xAA, 0x31, 0xA6, 0xF7, 0xBE, 0xCE, 0x98, 0xA5, 0x73, 0xDF, 0x1B, 0xE7, 0x3C, 0x00, 0x00, 0x9C, 0xD3, 0xFF, 0xDE, 0xDE, 0xFA, 0xF7, 0xDC, 0xD6, 0xB9, 0x9C, 0xF3, 0xB5, 0xB7, 0xE7, 0x3D, 0xF7, 0x9E, 0x00, 0x00, 0x8C, 0x51, 0xFF, 0xDF, 0xEF, 0x7D, 0xFF, 0xDF, 0x08, 0x41, 0x08, 0x61, 0xF7, 0xBE, 0xEF, 0x5D, 0xCE, 0x98, 0xC6, 0x77, 0xA5, 0x53, 0xDF, 0x1A, 0xEF, 0x7D, 0xAD, 0x55, 0x00, 0x00, 0xCE, 0x79, 0xF7, 0xBE, 0xF7, 0xBE, 0xD6, 0x9A, 0x00, 0x00, 0xAD, 0x55, 0xF7, 0xDE, 0xBE, 0x56, 0x9D, 0x71, 0x9D, 0x92, 0xBE, 0x75, 0xBE, 0x36, 0xEF, 0x5D, 0xDF, 0x1B, 0x00, 0x00, 0x9C, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0x96, 0x00, 0x00, 0xC6, 0x18, 0xF7, 0xBD, 0xDF, 0x37, 0xC6, 0x73, 0xC6, 0xD3, 0xC6, 0xD3, 0xC6, 0xB5, 0xE7, 0x5C, 0xEF, 0x7D, 0x00, 0x00, 0x7B, 0xEF, 0xFF, 0xFF, 0xF7, 0xBE, 0xEF, 0x5C, 0x00, 0x00, 0x8C, 0x51, 0xF7, 0xBE, 0xC6, 0x38, 0x84, 0x30, 0x73, 0xCE, 0x7B, 0xEF, 0xA5, 0x13, 0xE7, 0x1C, 0xF7, 0x9E, 0x00, 0x20, 0x84, 0x30, 0xFF, 0xDF, 0xF7, 0x9E, 0xF7, 0x9E, 0x00, 0x00, 0x8C, 0x51, 0xFF, 0xFF, 0xFF, 0xDF, 0xEF, 0x7D, 0x31, 0xA6, 0x10, 0x82, 0xC6, 0x38, 0xF7, 0xBF, 0xE7, 0x1C, 0xD6, 0x7A, 0xDE, 0xFC, 0xF7, 0xBE, 0x31, 0x86, 0x52, 0x8A, 0xF7, 0xBE, 0xD6, 0x9A, 0x9C, 0xF3, 0x84, 0x30, 0x8C, 0x51, 0x9C, 0xF3, 0xD6, 0x9A, 0xF7, 0xBE, 0x39, 0xE7, 0x42, 0x08, 0xF7, 0x9E, 0xCE, 0x59, 0xAD, 0x75, 0xAD, 0x75, 0xEF, 0x7D, 0x6B, 0x6D, 0x10, 0x82, 0xFF, 0xDF, 0xD6, 0xBA, 0x94, 0x92, 0x73, 0xAE, 0x9C, 0xF3, 0xEF, 0x5D, 0xAD, 0x75, 0x00, 0x00, 0xCE, 0x79, 0xEF, 0x7D, 0xB5, 0xB6, 0x9C, 0xD3, 0xA5, 0x33, 0xB5, 0xD6, 0xCE, 0x58, 0xFF, 0xDE, 0xBD, 0xF7, 0x00, 0x00, 0xC6, 0x18, 0xF7, 0x9E, 0xDE, 0xFB, 0xE7, 0x1B, 0xDE, 0xFB, 0xDE, 0xDB, 0xDE, 0xFB, 0xE6, 0xFB, 0xF7, 0xBE, 0xB5, 0xB6, 0x00, 0x00, 0xBD, 0xF7, 0xF7, 0x9D, 0xD6, 0x98, 0xBD, 0xF4, 0xA5, 0x92, 0xB6, 0x52, 0xC6, 0x94, 0xE7, 0x7B, 0xF7, 0x9E, 0x00, 0x20, 0x7B, 0xCF, 0xFF, 0xFF, 0xFF, 0xDE, 0xE7, 0x3C, 0x00, 0x00, 0x9C, 0xD3, 0xF7, 0xBD, 0xD6, 0xD5, 0xAD, 0xEB, 0xAD, 0x8D, 0xD6, 0x97, 0xF7, 0xBE, 0xEF, 0x7D, 0x31, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 0x21, 0x04, 0x31, 0x86, 0x42, 0x08, 0x52, 0xAA, 0x73, 0xAE, 0xA5, 0x34, 0xF7, 0xBE, 0xE7, 0x3C, 0xCE, 0x78, 0xBD, 0xF4, 0x8C, 0xAE, 0x7C, 0x2C, 0x8D, 0x11, 0x95, 0x32, 0x32, 0x67, 0x2A, 0x26, 0x22, 0x04, 0x22, 0x23, 0x19, 0xC2, 0x19, 0xA2, 0x11, 0x62, 0x21, 0xE4, 0x19, 0xA3, 0x19, 0xA3, 0x32, 0x45, 0x42, 0xE8, 0x4B, 0x29, 0x4B, 0x49, 0x4B, 0x69, 0x53, 0x88, 0x2A, 0x44, 0x64, 0x2B, 0x73, 0x6C, 0x62, 0xEB, 0x83, 0xEE, 0x73, 0x6C, 0x6B, 0x0A, 0x7B, 0xCD, 0x9C, 0xD1, 0xAD, 0x32, 0x9C, 0x90, 0x6B, 0x4B, 0x6B, 0x0A, 0x83, 0xEC, 0x9C, 0x4D, 0x94, 0x4F, 0xAD, 0x33, 0x94, 0x2F, 0x83, 0xCD, 0x83, 0xED, 0x94, 0x4F, 0xBD, 0xB5, 0xDE, 0xFB, 0xF7, 0x7D, 0xFF, 0xDE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xF7, 0x9D, 0xE7, 0x3C, 0xD6, 0x99, 0xD6, 0x78, 0xE6, 0xFB, 0xF7, 0x7D, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xBE, 0xFF, 0xBE, 0xFF, 0xDE, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBE, 0xEF, 0x5C, 0xDE, 0xD9, 0xD6, 0x77, 0xD6, 0x98, 0xE7, 0x3B, 0xF7, 0x9E, 0xFF, 0xDE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xEF, 0x5D, 0xD6, 0xB9, 0xBE, 0x15, 0xAD, 0x32, 0x7B, 0xAB, 0x8C, 0x6C, 0xA5, 0x6F, 0x9D, 0x4F, 0x84, 0x6C, 0x84, 0x6E, 0x8C, 0xCD, 0x53, 0x05, 0x95, 0x2F, 0xAE, 0x32, 0x95, 0x2E, 0xAD, 0x90, 0xCE, 0x74, 0xFF, 0xFF, 0xA5, 0x34, 0x00, 0x00, 0xCE, 0x79, 0xF7, 0xBD, 0xEF, 0x1A, 0xF7, 0x7D, 0xD6, 0x9A, 0x00, 0x00, 0xA5, 0x34, 0xF7, 0xBE, 0xE7, 0x1B, 0xF7, 0xBE, 0x9C, 0xF3, 0x00, 0x00, 0x10, 0x82, 0xE7, 0x3C, 0xF7, 0xBE, 0xEF, 0x7C, 0xE7, 0x3B, 0xE7, 0x5C, 0xF7, 0xBE, 0xC6, 0x38, 0x00, 0x00, 0x8C, 0x71, 0xF7, 0x9E, 0xCE, 0x57, 0xBD, 0xF4, 0xDE, 0xD9, 0xFF, 0xDE, 0x39, 0xE7, 0x52, 0xAA, 0x6B, 0x4D, 0x31, 0xA6, 0xFF, 0xDE, 0xE6, 0xFA, 0xD6, 0x56, 0xE7, 0x3B, 0xEF, 0x7D, 0x00, 0x20, 0xAD, 0x55, 0x10, 0xA2, 0x7B, 0xEF, 0xF7, 0xBE, 0xBE, 0x76, 0xA5, 0xB2, 0xCE, 0xB9, 0xF7, 0xDE, 0x42, 0x08, 0x29, 0x45, 0xF7, 0x9E, 0xFF, 0xDE, 0xF7, 0xDE, 0xEF, 0x5C, 0xDE, 0xFB, 0xEF, 0x5D, 0xFF, 0xDF, 0x9C, 0xD3, 0x00, 0x00, 0xCE, 0x59, 0xF7, 0x9E, 0xEF, 0x5D, 0xFF, 0xDF, 0x08, 0x41, 0x00, 0x00, 0x8C, 0x71, 0xFF, 0xDF, 0xF7, 0xBD, 0xEF, 0x9D, 0xEF, 0x9D, 0xF7, 0xBE, 0xF7, 0xBE, 0x39, 0xC7, 0x21, 0x04, 0xF7, 0xBE, 0xDF, 0x1B, 0xEF, 0x7C, 0xEF, 0x7D, 0x00, 0x20, 0x73, 0x8E, 0xFF, 0xFF, 0xEF, 0x7D, 0xDF, 0x3B, 0xDF, 0x3B, 0xE7, 0x5B, 0xEF, 0x5C, 0xF7, 0xDE, 0xAD, 0x55, 0x00, 0x00, 0xC6, 0x18, 0xF7, 0xDE, 0xF7, 0xBD, 0xEF, 0x7D, 0x08, 0x61, 0x52, 0x8A, 0xFF, 0xDF, 0xF7, 0xBD, 0xE7, 0x1B, 0xDF, 0x1A, 0xE7, 0x3B, 0xEF, 0x9D, 0xFF, 0xDF, 0x84, 0x30, 0x00, 0x00, 0xCE, 0x59, 0xF7, 0xBE, 0xE7, 0x5B, 0xFF, 0xDE, 0x42, 0x08, 0x18, 0xE3, 0xF7, 0x9E, 0xFF, 0xBE, 0xE7, 0x5C, 0xDE, 0xDA, 0xDE, 0xDB, 0xE7, 0x3C, 0xF7, 0xBE, 0x9C, 0xD3, 0x00, 0x00, 0xCE, 0x59, 0xF7, 0x9E, 0xEF, 0x7D, 0xF7, 0x9E, 0x00, 0x00, 0x8C, 0x51, 0xF7, 0xBE, 0xE7, 0x1C, 0xF7, 0x9E, 0xEF, 0x7D, 0x31, 0xA6, 0x08, 0x41, 0xBD, 0xD7, 0xF7, 0xBE, 0xE7, 0x1C, 0xE7, 0x1C, 0xFF, 0xDF, 0x8C, 0x51, 0x00, 0x20, 0xCE, 0x79, 0xF7, 0x9E, 0xE7, 0x1C, 0xD6, 0xBA, 0xD6, 0xBA, 0xE7, 0x1C, 0xF7, 0x9E, 0xDE, 0xFB, 0x00, 0x20, 0x84, 0x30, 0xEF, 0x7D, 0xCE, 0x59, 0xB5, 0xB7, 0xB5, 0x96, 0xEF, 0x7D, 0x7B, 0xEF, 0x00, 0x20, 0xF7, 0xBE, 0xF7, 0x9E, 0xDE, 0xFB, 0xDE, 0xDB, 0xE7, 0x1B, 0xF7, 0xBE, 0xD6, 0xBA, 0x00, 0x00, 0x94, 0xB2, 0xFF, 0xDF, 0xE7, 0x3C, 0xDE, 0xDB, 0xDE, 0xFB, 0xE7, 0x3C, 0xEF, 0x5D, 0xFF, 0xDF, 0x84, 0x30, 0x00, 0x00, 0xE7, 0x3C, 0xF7, 0x9D, 0xEF, 0x5D, 0xF7, 0xBE, 0xF7, 0xBE, 0xF7, 0xBE, 0xF7, 0xBE, 0xEF, 0x5D, 0xEF, 0x7D, 0xEF, 0x7D, 0x10, 0x82, 0x4A, 0x69, 0xFF, 0xDF, 0xF7, 0x9D, 0xE7, 0x3B, 0xE7, 0x3B, 0xE7, 0x3B, 0xEF, 0x9D, 0xFF, 0xDF, 0x8C, 0x51, 0x00, 0x00, 0xC6, 0x18, 0xFF, 0xDE, 0xF7, 0xBE, 0xE7, 0x3C, 0x00, 0x00, 0x9C, 0xD3, 0xF7, 0xBD, 0xBE, 0x32, 0xAD, 0xCB, 0xAD, 0x6D, 0xCE, 0x35, 0xF7, 0x9D, 0xFF, 0xDF, 0x6B, 0x4D, 0x18, 0xC3, 0x8C, 0x71, 0xA5, 0x14, 0x94, 0x92, 0x84, 0x10, 0x73, 0x8E, 0x63, 0x0C, 0x4A, 0x69, 0x21, 0x24, 0x00, 0x00, 0x21, 0x24, 0xDE, 0xDB, 0xF7, 0x9D, 0xB5, 0xD4, 0x42, 0xC6, 0x3A, 0xC6, 0x2A, 0x25, 0x32, 0x66, 0x3A, 0xA7, 0x32, 0x45, 0x22, 0x03, 0x19, 0xE2, 0x21, 0xE3, 0x19, 0x82, 0x11, 0x42, 0x2A, 0x24, 0x2A, 0x24, 0x21, 0xE4, 0x3A, 0x86, 0x53, 0x6A, 0x53, 0xAA, 0x64, 0x2C, 0x5B, 0xEA, 0x43, 0x27, 0x3A, 0xC5, 0x3A, 0xE6, 0xB5, 0xB6, 0xAD, 0x34, 0xB5, 0x53, 0xAD, 0x12, 0xA4, 0xF1, 0xA4, 0xD1, 0xAD, 0x52, 0xC5, 0xD5, 0xB5, 0x73, 0x94, 0x6F, 0x9C, 0x90, 0xA4, 0xD0, 0x94, 0x2D, 0xBD, 0xB4, 0xD6, 0x77, 0xD6, 0x57, 0xCE, 0x16, 0xC5, 0xD5, 0xC5, 0xB5, 0xBD, 0x94, 0xC5, 0xD6, 0xD6, 0x78, 0xEF, 0x3C, 0xFF, 0xDF, 0xF7, 0x9E, 0x84, 0x30, 0x5A, 0xEB, 0x8C, 0x51, 0xF7, 0x9E, 0xEF, 0x5D, 0xCE, 0x37, 0xC5, 0xB5, 0xDE, 0x99, 0xF7, 0xBE, 0xFF, 0xFF, 0x9C, 0xD3, 0x52, 0x8A, 0x63, 0x0C, 0xCE, 0x59, 0xFF, 0xDF, 0xF7, 0x9D, 0xF7, 0x9D, 0xFF, 0xDF, 0xBD, 0xF7, 0x4A, 0x69, 0x39, 0xC7, 0x84, 0x10, 0xF7, 0xBE, 0xFF, 0xBE, 0xEF, 0x1A, 0xD6, 0x56, 0xD6, 0x97, 0xEF, 0x7C, 0xF7, 0xBE, 0x7B, 0xEF, 0x29, 0x65, 0x31, 0xA6, 0x9C, 0xD3, 0xFF, 0xDF, 0xEF, 0x5C, 0xBD, 0xF5, 0x7C, 0x0C, 0x4A, 0x46, 0x39, 0xC4, 0x52, 0xC6, 0x95, 0x0E, 0xAD, 0xB0, 0x63, 0x48, 0x84, 0x4D, 0x8C, 0xCD, 0x3A, 0x83, 0x53, 0x47, 0x8C, 0xCD, 0xB5, 0xD2, 0xB5, 0x91, 0xB5, 0x50, 0xFF, 0xFF, 0xA5, 0x34, 0x00, 0x00, 0xCE, 0x79, 0xEF, 0x5C, 0xC6, 0x17, 0xEF, 0x3C, 0xD6, 0x9A, 0x00, 0x00, 0xA5, 0x34, 0xF7, 0x9E, 0xDE, 0xB9, 0xF7, 0x9E, 0x9C, 0xF3, 0x00, 0x00, 0x21, 0x04, 0x21, 0x24, 0xAD, 0x55, 0xE7, 0x3C, 0xEF, 0x7D, 0xDE, 0xDB, 0x94, 0x92, 0x10, 0x82, 0x21, 0x04, 0xEF, 0x7D, 0xE7, 0x3C, 0xC6, 0x15, 0xBD, 0xD3, 0xD6, 0xB8, 0xF7, 0xBE, 0x84, 0x10, 0x10, 0xA2, 0x21, 0x24, 0x7B, 0xCF, 0xF7, 0x9E, 0xC6, 0x36, 0xB5, 0xB3, 0xE7, 0x1A, 0xFF, 0xDE, 0x39, 0xC7, 0x39, 0xE7, 0x00, 0x00, 0xBD, 0xF7, 0xEF, 0x7C, 0xA5, 0x92, 0x84, 0xAD, 0xAD, 0xD4, 0xEF, 0x5C, 0xCE, 0x79, 0x08, 0x61, 0x29, 0x65, 0xAD, 0x55, 0xE7, 0x3C, 0xFF, 0xDE, 0xEF, 0x7D, 0xCE, 0x79, 0x7B, 0xCF, 0x08, 0x41, 0x52, 0xAA, 0xFF, 0xDF, 0xE7, 0x3C, 0xE7, 0x5C, 0xFF, 0xDF, 0x08, 0x41, 0x21, 0x04, 0x00, 0x00, 0x7B, 0xCF, 0xD6, 0x9A, 0xEF, 0x7D, 0xE7, 0x3C, 0xBD, 0xD7, 0x42, 0x08, 0x00, 0x00, 0xA5, 0x34, 0xEF, 0x7D, 0xBD, 0xD7, 0xD6, 0xFA, 0xF7, 0xBE, 0x73, 0x8E, 0x00, 0x00, 0x73, 0x8E, 0xC6, 0x38, 0xEF, 0x5C, 0xFF, 0xDE, 0xEF, 0x7D, 0xD6, 0xBA, 0x8C, 0x71, 0x10, 0x82, 0x31, 0xA6, 0xF7, 0xDE, 0xE7, 0x5B, 0xD6, 0xF9, 0xF7, 0x9D, 0x8C, 0x71, 0x00, 0x00, 0x4A, 0x69, 0xB5, 0xB6, 0xE7, 0x3C, 0xEF, 0x7D, 0xE7, 0x3C, 0xC6, 0x18, 0x6B, 0x6D, 0x00, 0x00, 0x5A, 0xEB, 0xFF, 0xDE, 0xE7, 0x5B, 0xD6, 0xF8, 0xF7, 0xBD, 0xCE, 0x59, 0x00, 0x20, 0x29, 0x65, 0xAD, 0x55, 0xE7, 0x3C, 0xEF, 0x7D, 0xE7, 0x3C, 0xCE, 0x79, 0x84, 0x10, 0x08, 0x41, 0x52, 0x8A, 0xF7, 0xBE, 0xDE, 0xFB, 0xE7, 0x3C, 0xEF, 0x7D, 0x00, 0x00, 0x8C, 0x51, 0xF7, 0x9E, 0xBD, 0xF8, 0xC6, 0x59, 0xEF, 0x7D, 0xEF, 0x7D, 0x31, 0xA6, 0x00, 0x20, 0xAD, 0x75, 0xF7, 0xBE, 0xEF, 0x7D, 0xFF, 0xDF, 0xF7, 0xBE, 0x29, 0x65, 0x10, 0x82, 0x8C, 0x71, 0xD6, 0xBA, 0xF7, 0x9E, 0xF7, 0x9E, 0xDE, 0xDB, 0x9C, 0xD3, 0x21, 0x04, 0x18, 0xE3, 0xEF, 0x5D, 0xE6, 0xFC, 0xCE, 0x59, 0xB5, 0x96, 0xAD, 0x76, 0xE7, 0x3D, 0xA5, 0x34, 0x00, 0x00, 0x73, 0x8E, 0xD6, 0x9A, 0xE7, 0x3C, 0xDE, 0xFB, 0xF7, 0x9E, 0xFF, 0xDF, 0xFF, 0xFF, 0x4A, 0x69, 0x08, 0x41, 0x84, 0x10, 0xCE, 0x79, 0xEF, 0x5D, 0xFF, 0xDF, 0xEF, 0x5D, 0xCE, 0x59, 0x7B, 0xEF, 0x00, 0x20, 0x5A, 0xEB, 0xFF, 0xDE, 0xEF, 0x3C, 0xEF, 0x5D, 0xFF, 0xDF, 0x08, 0x61, 0x00, 0x00, 0xEF, 0x7D, 0xEF, 0x7D, 0xE6, 0xFB, 0xF7, 0xBE, 0x94, 0xB2, 0x00, 0x00, 0x4A, 0x49, 0xB5, 0xB6, 0xE7, 0x3C, 0xEF, 0x7D, 0xEF, 0x5D, 0xC6, 0x38, 0x73, 0x8E, 0x00, 0x00, 0x52, 0xAA, 0xFF, 0xDE, 0xEF, 0x5C, 0xF7, 0x7D, 0xE7, 0x1C, 0x00, 0x00, 0x9C, 0xD3, 0xF7, 0x9D, 0xAD, 0xB2, 0xBE, 0x0E, 0xA5, 0x2E, 0xCE, 0x76, 0xF7, 0xBD, 0xA5, 0x14, 0x08, 0x61, 0xE7, 0x1C, 0xFF, 0xDF, 0xF7, 0xBE, 0xF7, 0xBE, 0xFF, 0xDE, 0xF7, 0xBE, 0xF7, 0xBE, 0xFF, 0xDF, 0xFF, 0xFF, 0xC6, 0x18, 0x08, 0x41, 0x63, 0x2C, 0xFF, 0xDE, 0xBE, 0x16, 0x21, 0xC2, 0x32, 0x64, 0x32, 0x44, 0x42, 0xC6, 0x42, 0xC7, 0x2A, 0x24, 0x21, 0xE3, 0x21, 0xE2, 0x19, 0xC2, 0x11, 0x41, 0x21, 0xE4, 0x2A, 0x24, 0x22, 0x03, 0x21, 0xE3, 0x4B, 0x49, 0x64, 0x0B, 0x5B, 0xEB, 0x74, 0x8E, 0x53, 0x89, 0x32, 0xA5, 0x2A, 0x23, 0x21, 0xE3, 0x9C, 0xF3, 0xB5, 0x95, 0xB5, 0x53, 0xB5, 0x32, 0xB5, 0x32, 0xB5, 0x52, 0xB5, 0x53, 0xBD, 0xD4, 0xC5, 0xD5, 0xAD, 0x52, 0xB5, 0x93, 0xBD, 0xB3, 0x94, 0x0D, 0xC5, 0xD4, 0xD6, 0x36, 0xD6, 0x56, 0xD6, 0x36, 0xCE, 0x16, 0xD6, 0x36, 0xD6, 0x36, 0xD6, 0x56, 0xDE, 0x98, 0xF7, 0x9D, 0xF7, 0x9E, 0x29, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0xA6, 0xFF, 0xBE, 0xF7, 0x7C, 0xE6, 0xD9, 0xF7, 0x5B, 0xFF, 0xDF, 0x6B, 0x6D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xBD, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xBD, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x8A, 0xFF, 0xDF, 0xE7, 0x1A, 0xD6, 0x76, 0xE6, 0xFA, 0xF7, 0xBE, 0x63, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0xB2, 0xF7, 0x9D, 0xCE, 0x57, 0x7C, 0x0C, 0x6B, 0xAA, 0x63, 0x69, 0x5B, 0x68, 0x5B, 0x88, 0x8C, 0xEC, 0x8C, 0xCD, 0x63, 0x49, 0x9D, 0x2F, 0x6B, 0xA8, 0x84, 0xAD, 0x9D, 0x2F, 0xA4, 0xF0, 0x94, 0x6E, 0x94, 0x4D, 0xFF, 0xFF, 0xA5, 0x34, 0x00, 0x00, 0xCE, 0x79, 0xEF, 0x5C, 0xCE, 0x57, 0xEF, 0x7C, 0xD6, 0x9A, 0x00, 0x00, 0xA5, 0x34, 0xF7, 0x9D, 0xDE, 0xB9, 0xF7, 0x9E, 0x9C, 0xF3, 0x00, 0x00, 0xDE, 0xDB, 0x4A, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x08, 0xDE, 0xDB, 0xEF, 0x7D, 0xC6, 0x16, 0x9C, 0xAF, 0x8C, 0x2C, 0xB5, 0x73, 0xEF, 0x7D, 0xC6, 0x38, 0x00, 0x00, 0x00, 0x00, 0xBD, 0xD7, 0xEF, 0x7D, 0xBE, 0x75, 0xA5, 0xD1, 0xC6, 0x56, 0xF7, 0xBE, 0x7B, 0xCF, 0x00, 0x00, 0x08, 0x41, 0xF7, 0xBE, 0xDF, 0x1B, 0xA5, 0x71, 0x6B, 0xC9, 0x84, 0x8E, 0xC6, 0x78, 0xF7, 0x9D, 0xCE, 0x79, 0x42, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x41, 0x73, 0x8E, 0xF7, 0xBE, 0xEF, 0x5C, 0xC6, 0x57, 0xEF, 0x9D, 0xFF, 0xFF, 0x08, 0x41, 0x84, 0x30, 0x94, 0x92, 0x08, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xA2, 0x9C, 0xF3, 0xF7, 0xBE, 0xD6, 0xBA, 0x94, 0xD1, 0xBE, 0x55, 0xDF, 0x1B, 0xF7, 0xDE, 0x84, 0x30, 0x10, 0xA2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x52, 0xAA, 0xE7, 0x3C, 0xEF, 0xBD, 0xCE, 0xD7, 0xA5, 0xB2, 0xD6, 0xFA, 0xF7, 0xDE, 0x9D, 0x13, 0x21, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xA2, 0x84, 0x10, 0xF7, 0xBE, 0xEF, 0x9C, 0xCF, 0x17, 0xC6, 0xF5, 0xDF, 0x5A, 0xF7, 0xDE, 0xC6, 0x18, 0x31, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x41, 0x6B, 0x4D, 0xEF, 0x9D, 0xDE, 0xFB, 0xB5, 0xB6, 0xDE, 0xDB, 0xEF, 0x7D, 0x00, 0x00, 0x8C, 0x51, 0xEF, 0x7D, 0xAD, 0x55, 0x94, 0xB3, 0xC6, 0x38, 0xEF, 0x7D, 0xEF, 0x5D, 0x31, 0xA6, 0x00, 0x20, 0xAD, 0x55, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xFF, 0xEF, 0x7D, 0x63, 0x0C, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x49, 0xDE, 0xDB, 0xE7, 0x3D, 0xD6, 0x9A, 0xC6, 0x18, 0xA5, 0x35, 0x94, 0x92, 0xD6, 0x9A, 0xF7, 0x9E, 0x63, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCE, 0x79, 0xF7, 0xBE, 0xF7, 0x9E, 0xEF, 0x7D, 0x73, 0x8E, 0x08, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x41, 0x6B, 0x6D, 0xF7, 0x9E, 0xEF, 0x5C, 0xD6, 0x79, 0xEF, 0x3C, 0xFF, 0xDF, 0x08, 0x61, 0x00, 0x00, 0xEF, 0x7D, 0xEF, 0x3C, 0xCE, 0x58, 0xE7, 0x1B, 0xFF, 0xBE, 0xA5, 0x34, 0x21, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xA2, 0x7B, 0xEF, 0xF7, 0xBE, 0xF7, 0x9D, 0xDE, 0xB9, 0xEF, 0x5C, 0xE7, 0x3C, 0x00, 0x00, 0x9C, 0xD3, 0xEF, 0x7D, 0xBE, 0x33, 0xCE, 0xB2, 0x9C, 0xEE, 0xD6, 0xB7, 0xFF, 0xBE, 0x63, 0x2C, 0x39, 0xC7, 0xFF, 0xFF, 0xF7, 0x9D, 0xEF, 0x3B, 0xE7, 0x1A, 0xDF, 0x19, 0xDF, 0x1A, 0xE7, 0x3C, 0xEF, 0x5D, 0xF7, 0x9E, 0xFF, 0xFF, 0x42, 0x28, 0x39, 0xC7, 0xFF, 0xDE, 0xC6, 0x37, 0x32, 0x64, 0x42, 0xE6, 0x32, 0x64, 0x32, 0x85, 0x3A, 0xA5, 0x2A, 0x24, 0x21, 0xE3, 0x21, 0xE3, 0x19, 0xA2, 0x22, 0x03, 0x32, 0xA5, 0x32, 0x64, 0x2A, 0x24, 0x21, 0xE3, 0x53, 0x69, 0x6C, 0x6C, 0x64, 0x2B, 0x84, 0xEF, 0x32, 0xA6, 0x19, 0xE2, 0x19, 0xE2, 0x19, 0xC2, 0x94, 0x91, 0xAD, 0x12, 0xB5, 0x52, 0xB5, 0x52, 0xBD, 0x93, 0xBD, 0x93, 0xBD, 0x94, 0xCE, 0x36, 0xCD, 0xF5, 0xC5, 0xD4, 0xC5, 0xD4, 0xD6, 0x35, 0x94, 0x2D, 0xCE, 0x15, 0xD6, 0x56, 0xD6, 0x56, 0xD6, 0x56, 0xD6, 0x56, 0xD6, 0x36, 0xD6, 0x36, 0xD6, 0x56, 0xDE, 0xB9, 0xF7, 0xBE, 0x94, 0xB2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA5, 0x34, 0xFF, 0xBE, 0xEF, 0x1A, 0xF7, 0x7D, 0xEF, 0x5D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x28, 0xFF, 0xFF, 0xFF, 0xFF, 0x4A, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDE, 0xDB, 0xEF, 0x7C, 0xD6, 0xB8, 0xEF, 0x3B, 0xF7, 0x9E, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x45, 0xFF, 0xBE, 0xDE, 0xD9, 0x8C, 0x6E, 0x84, 0xED, 0x95, 0x6E, 0x7C, 0xAC, 0x53, 0x88, 0x6C, 0x09, 0x9D, 0x6E, 0x5B, 0x28, 0x94, 0xCE, 0xA5, 0x2F, 0x94, 0xAE, 0x7B, 0xEC, 0x73, 0x6B, 0x73, 0x6B, 0x7B, 0xAC, 0xFF, 0xFF, 0xEF, 0x7D, 0xD6, 0x9A, 0xF7, 0x9E, 0xE7, 0x1C, 0xCE, 0x37, 0xE7, 0x3C, 0xF7, 0xBE, 0xD6, 0xBA, 0xEF, 0x7D, 0xF7, 0x9D, 0xE6, 0xFA, 0xF7, 0xBE, 0xEF, 0x7D, 0xDE, 0xDB, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x1C, 0xBD, 0xF7, 0xAD, 0x55, 0xB5, 0xB6, 0xDE, 0xFB, 0xF7, 0xBE, 0xE7, 0x3C, 0xBD, 0xF6, 0xC5, 0xF4, 0xB5, 0x30, 0xAD, 0x10, 0xB5, 0x92, 0xDE, 0xFA, 0xF7, 0xBE, 0xDE, 0xDB, 0xDE, 0xDB, 0xF7, 0xBE, 0xDF, 0x1A, 0xA5, 0x91, 0x8D, 0x0C, 0xB5, 0xF3, 0xEF, 0x7C, 0xEF, 0x7D, 0xDE, 0xDB, 0xE7, 0x1B, 0xF7, 0xBE, 0xD6, 0x98, 0xBD, 0xD3, 0xA4, 0xEF, 0x83, 0xED, 0xA5, 0x32, 0xD6, 0xB9, 0xF7, 0xBE, 0xFF, 0xDF, 0xE7, 0x3C, 0xBD, 0xF7, 0xAD, 0x75, 0xB5, 0xB6, 0xD6, 0x9A, 0xF7, 0x9E, 0xF7, 0xBE, 0xE7, 0x3B, 0xBE, 0x36, 0xCE, 0xB8, 0xEF, 0x9C, 0xFF, 0xDF, 0xDE, 0xFB, 0xEF, 0x7D, 0xFF, 0xFF, 0xF7, 0xBE, 0xC6, 0x38, 0xAD, 0x75, 0xAD, 0x75, 0xCE, 0x59, 0xF7, 0xBE, 0xF7, 0xBE, 0xD6, 0xDA, 0xA5, 0x92, 0x7C, 0xAC, 0x7C, 0xAB, 0xAE, 0x14, 0xEF, 0x9C, 0xF7, 0xBE, 0xF7, 0xBE, 0xCE, 0x79, 0xB5, 0x96, 0xAD, 0x55, 0xAD, 0x75, 0xBE, 0x17, 0xEF, 0x5D, 0xF7, 0xBE, 0xE7, 0x3B, 0xCE, 0xD7, 0xAE, 0x31, 0x74, 0x8B, 0xA5, 0x92, 0xD6, 0xD9, 0xEF, 0x5D, 0xF7, 0xBE, 0xDE, 0xDB, 0xBD, 0xD7, 0xAD, 0x55, 0xB5, 0xB6, 0xCE, 0x79, 0xF7, 0xBE, 0xEF, 0x9D, 0xDE, 0xFA, 0xA5, 0x73, 0x7C, 0x6D, 0x9D, 0xD0, 0xCF, 0x36, 0xE7, 0x7A, 0xEF, 0x9D, 0xFF, 0xFF, 0xE7, 0x1C, 0xBD, 0xD7, 0xAD, 0x55, 0xB5, 0xB6, 0xCE, 0x59, 0xF7, 0x9E, 0xFF, 0xFE, 0xEF, 0x7C, 0xCE, 0xB6, 0xAD, 0x92, 0xD6, 0xBA, 0xF7, 0xBE, 0xDE, 0xDB, 0xEF, 0x5D, 0xEF, 0x5D, 0x9C, 0xF3, 0x6B, 0x8E, 0x8C, 0x72, 0xBD, 0xF7, 0xEF, 0x5D, 0xF7, 0x9E, 0xDE, 0xDB, 0xDE, 0xFB, 0xFF, 0xFF, 0xFF, 0xDF, 0xF7, 0xBE, 0xFF, 0xDF, 0xFF, 0xDF, 0xF7, 0xBE, 0xC6, 0x38, 0xB5, 0x96, 0xAD, 0x75, 0xC6, 0x38, 0xE7, 0x3C, 0xF7, 0x9E, 0xE7, 0x1C, 0xC6, 0x18, 0xD6, 0x9A, 0xB5, 0xB6, 0x8C, 0x72, 0x6B, 0x4D, 0x9C, 0xD3, 0xDE, 0xDB, 0xF7, 0x9E, 0xE7, 0x3C, 0xBD, 0xF7, 0xAD, 0x55, 0xAD, 0x55, 0xEF, 0x5D, 0xE7, 0x1C, 0xBD, 0xF7, 0xDE, 0xDB, 0xF7, 0x9E, 0xF7, 0x9E, 0xC6, 0x38, 0xB5, 0x96, 0xAD, 0x55, 0xB5, 0x96, 0xC6, 0x38, 0xEF, 0x7D, 0xFF, 0xDF, 0xEF, 0x5D, 0xCE, 0x58, 0xD6, 0x79, 0xE7, 0x3C, 0xFF, 0xDF, 0xD6, 0xBA, 0xD6, 0xBA, 0xFF, 0xBE, 0xE7, 0x3C, 0xC5, 0xF6, 0xCE, 0x38, 0xE7, 0x3C, 0xF7, 0x9E, 0xFF, 0xDF, 0xDE, 0xDB, 0xBD, 0xD7, 0xAD, 0x55, 0xB5, 0xB6, 0xCE, 0x79, 0xF7, 0xDE, 0xF7, 0xDE, 0xE7, 0x5B, 0xDE, 0xB7, 0xDE, 0xD7, 0xEF, 0x5C, 0xFF, 0xDE, 0xDE, 0xFB, 0xEF, 0x7D, 0xEF, 0x9C, 0xD6, 0xD5, 0xD6, 0xD4, 0xAD, 0x90, 0xD6, 0x97, 0xF7, 0xBE, 0x6B, 0x4D, 0x10, 0xA2, 0xFF, 0xDF, 0xFF, 0xDE, 0xF7, 0x9D, 0xEF, 0x7D, 0xEF, 0x5C, 0xEF, 0x7D, 0xF7, 0x9E, 0xF7, 0xBE, 0xFF, 0xDF, 0xFF, 0xDF, 0x21, 0x04, 0x4A, 0x49, 0xF7, 0xBE, 0xB5, 0xD6, 0x32, 0x44, 0x2A, 0x44, 0x2A, 0x24, 0x2A, 0x24, 0x11, 0x81, 0x19, 0xA2, 0x21, 0xE3, 0x19, 0xA2, 0x19, 0x82, 0x32, 0x85, 0x43, 0x06, 0x3A, 0xC5, 0x2A, 0x64, 0x21, 0xE3, 0x3A, 0xE6, 0x53, 0xC9, 0x74, 0x8D, 0x8D, 0x30, 0x3A, 0xA6, 0x22, 0x03, 0x22, 0x02, 0x19, 0xE2, 0x94, 0x90, 0xB5, 0x52, 0xBD, 0xB3, 0xC5, 0xB2, 0xC5, 0xB3, 0xCE, 0x14, 0xD6, 0x35, 0xD6, 0x56, 0xD6, 0x56, 0xD6, 0x55, 0xCE, 0x15, 0xCE, 0x15, 0x94, 0x2D, 0xD6, 0x15, 0xDE, 0x56, 0xD6, 0x56, 0xD6, 0x56, 0xD6, 0x56, 0xD6, 0x36, 0xD6, 0x56, 0xD6, 0x56, 0xDE, 0xB9, 0xFF, 0xBE, 0x73, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x51, 0xFF, 0xDE, 0xEF, 0x1A, 0xF7, 0x9D, 0xD6, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x45, 0xFF, 0xFF, 0xFF, 0xFF, 0x39, 0xC7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCE, 0x59, 0xF7, 0xBD, 0xE7, 0x3A, 0xEF, 0x7C, 0xEF, 0x5D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xE3, 0xFF, 0xDE, 0xDE, 0xB9, 0xA5, 0x30, 0x95, 0x4F, 0x8D, 0x2F, 0x4B, 0x27, 0x53, 0x68, 0x8C, 0xED, 0xA5, 0xAF, 0x7C, 0x2B, 0x94, 0xCE, 0xC6, 0x74, 0xB5, 0x92, 0x9C, 0xD0, 0xA4, 0xD1, 0xA4, 0xD0, 0x9C, 0xAF, 0xEF, 0x3C, 0xEF, 0x5C, 0xEF, 0x5C, 0xEF, 0x3C, 0xDE, 0xB9, 0xC5, 0xD5, 0xD6, 0x99, 0xEF, 0x3C, 0xEF, 0x5C, 0xEF, 0x3C, 0xE7, 0x1B, 0xDE, 0xD9, 0xDE, 0xFA, 0xE7, 0x1C, 0xF7, 0x7D, 0xEF, 0x5C, 0xF7, 0x7C, 0xF7, 0x9D, 0xF7, 0x9D, 0xF7, 0x9D, 0xF7, 0x9D, 0xDE, 0xFB, 0xC6, 0x58, 0x9D, 0x32, 0x74, 0x0D, 0xCE, 0x75, 0xCE, 0x14, 0xBD, 0xD3, 0x9C, 0xEF, 0xBD, 0xD5, 0xDF, 0x1A, 0xEF, 0x5C, 0xEF, 0x5C, 0xE7, 0x3B, 0xCE, 0x98, 0xAD, 0x71, 0x8C, 0xAD, 0x8C, 0x6F, 0xCE, 0x58, 0xE7, 0x3C, 0xEF, 0x3C, 0xE7, 0x1C, 0xDE, 0xDA, 0xBD, 0xB4, 0x9C, 0x8F, 0xAD, 0x11, 0xD6, 0x77, 0xA5, 0x32, 0xC6, 0x57, 0xF7, 0xBD, 0xE7, 0x3C, 0xE7, 0x1C, 0xE7, 0x3C, 0xEF, 0x5C, 0xE7, 0x5C, 0xEF, 0x9C, 0xE7, 0x3B, 0xC6, 0x98, 0xBE, 0x56, 0xD7, 0x38, 0xD6, 0xF9, 0xE7, 0x5B, 0xEF, 0x9D, 0xEF, 0x9D, 0xEF, 0x7C, 0xEF, 0x5C, 0xEF, 0x9D, 0xEF, 0x5C, 0xEF, 0x9D, 0xEF, 0x7D, 0xF7, 0xBD, 0xE7, 0x3A, 0xBE, 0x56, 0x8D, 0x0F, 0x5B, 0xC8, 0x4B, 0x85, 0x5B, 0xE7, 0x7C, 0xCB, 0x8C, 0xD0, 0xB5, 0xB5, 0xD6, 0xFA, 0xE7, 0x5C, 0xE7, 0x5C, 0xEF, 0x7D, 0xEF, 0x9D, 0xE7, 0x5C, 0xDE, 0xFA, 0xC6, 0x77, 0xA5, 0xB3, 0x6C, 0x0B, 0x5B, 0xA7, 0x53, 0xA6, 0x74, 0x4A, 0x84, 0xAF, 0xA5, 0x54, 0xCE, 0x79, 0xE7, 0x7C, 0xE7, 0x5C, 0xE7, 0x5C, 0xE7, 0x5C, 0xDF, 0x1B, 0xD6, 0xB9, 0xBE, 0x35, 0x84, 0x8F, 0x52, 0xE9, 0x3A, 0x86, 0x42, 0xE5, 0x95, 0xCE, 0xA6, 0x11, 0xAD, 0xF4, 0xCE, 0xD8, 0xE7, 0x3B, 0xEF, 0x7C, 0xEF, 0x7D, 0xEF, 0x7C, 0xEF, 0x7C, 0xEF, 0x9C, 0xD6, 0xF8, 0xBE, 0x93, 0xAE, 0x0E, 0xAD, 0xEF, 0xCE, 0x97, 0xDE, 0xDB, 0xEF, 0x5C, 0xEF, 0x7C, 0xDE, 0xFA, 0x8C, 0x71, 0x63, 0x0C, 0x5B, 0x0C, 0x84, 0x10, 0xBD, 0xD7, 0xE7, 0x1C, 0xEF, 0x5D, 0xEF, 0x5D, 0xE7, 0x1C, 0xE7, 0x3C, 0xE7, 0x3C, 0xE7, 0x1C, 0xE7, 0x1C, 0xF7, 0xBE, 0xFF, 0xDF, 0xF7, 0x9E, 0xEF, 0x7D, 0xE7, 0x3C, 0xDE, 0xDB, 0xBD, 0xF7, 0x9C, 0xD3, 0xC6, 0x39, 0xBD, 0xF8, 0xAD, 0x55, 0x6B, 0x6E, 0x4A, 0x6A, 0x5A, 0xCB, 0x8C, 0x71, 0xBD, 0xF7, 0xDE, 0xDB, 0xE7, 0x3C, 0xE7, 0x3C, 0xE7, 0x3C, 0xDE, 0xDB, 0xBD, 0xD7, 0x7B, 0xEF, 0x8C, 0x51, 0xB5, 0xB6, 0xD6, 0x9A, 0xE7, 0x1C, 0xEF, 0x5D, 0xEF, 0x7D, 0xEF, 0x5D, 0xE7, 0x3C, 0xDE, 0xFB, 0xD6, 0x9A, 0xC6, 0x18, 0xAD, 0x55, 0xCE, 0x59, 0xE7, 0x3D, 0xF7, 0x9E, 0xF7, 0x9E, 0xF7, 0xBE, 0xF7, 0x9E, 0xE7, 0x5D, 0xD6, 0xBB, 0xD6, 0xDB, 0xDE, 0xFC, 0xE7, 0x1C, 0xEF, 0x5D, 0xEF, 0x7D, 0xF7, 0x9E, 0xF7, 0x9D, 0xEF, 0x7C, 0xE7, 0x5C, 0xDF, 0x3A, 0xD6, 0xD8, 0xC6, 0x35, 0xA5, 0x10, 0xBD, 0xD2, 0xF7, 0x9A, 0xEF, 0x7B, 0xE7, 0x5B, 0xEF, 0x7B, 0xDF, 0x19, 0xE7, 0x55, 0xA5, 0x6E, 0xAD, 0xB1, 0xCE, 0x37, 0xF7, 0x7D, 0xC6, 0x38, 0x00, 0x20, 0x39, 0xE7, 0x9C, 0xD3, 0xCE, 0x79, 0xDE, 0xDB, 0xEF, 0x5D, 0xEF, 0x5D, 0xDE, 0xFB, 0xCE, 0x79, 0x9C, 0xD3, 0x39, 0xE7, 0x00, 0x00, 0xAD, 0x75, 0xEF, 0x5C, 0x9D, 0x13, 0x32, 0x85, 0x32, 0x65, 0x32, 0x85, 0x19, 0xA3, 0x11, 0x41, 0x19, 0xC3, 0x2A, 0x24, 0x21, 0xC3, 0x19, 0xA2, 0x32, 0x85, 0x4B, 0x07, 0x3A, 0xC5, 0x2A, 0x64, 0x21, 0xE2, 0x32, 0x84, 0x4B, 0xA8, 0x7C, 0xEE, 0x8D, 0x50, 0x32, 0x85, 0x2A, 0x23, 0x22, 0x23, 0x21, 0xE2, 0x6B, 0x2A, 0x83, 0xAC, 0x94, 0x4D, 0x9C, 0x8E, 0xAD, 0x10, 0xBD, 0x72, 0xC5, 0xD4, 0xCD, 0xF4, 0xD6, 0x55, 0xDE, 0x76, 0xDE, 0x97, 0xCD, 0xF4, 0x9C, 0x4D, 0xCD, 0xD3, 0xDE, 0x76, 0xE6, 0x97, 0xE6, 0xB7, 0xE6, 0xB7, 0xDE, 0x76, 0xDE, 0x76, 0xDE, 0x56, 0xEE, 0xF9, 0xF7, 0xBE, 0xAD, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x18, 0xFF, 0xBE, 0xDE, 0xB9, 0xF7, 0x7C, 0xFF, 0xDE, 0x18, 0xC3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6B, 0x6D, 0xFF, 0xFF, 0xFF, 0xFF, 0x84, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xE3, 0xF7, 0xBE, 0xF7, 0x9D, 0xEF, 0x3A, 0xF7, 0x7C, 0xFF, 0xDE, 0x39, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6B, 0x6D, 0xF7, 0xBE, 0xDE, 0xD8, 0xAD, 0xB1, 0x8C, 0xED, 0x53, 0x68, 0x53, 0x69, 0x6C, 0x2B, 0x84, 0xAC, 0xA5, 0xB0, 0xB5, 0xF2, 0x84, 0x6D, 0xC6, 0x54, 0xAD, 0x51, 0xA4, 0xF0, 0x9C, 0x90, 0xAD, 0x11, 0xAD, 0x11, 0xBD, 0xD5, 0xC5, 0xD5, 0xBD, 0xB4, 0xC5, 0xB4, 0xC5, 0xB4, 0xB5, 0x73, 0xAD, 0x12, 0xBD, 0x73, 0xB5, 0x53, 0x9C, 0x90, 0xBD, 0xB4, 0xA4, 0xF2, 0x84, 0x0F, 0xC6, 0x16, 0xD6, 0x77, 0xD6, 0x36, 0xD6, 0x36, 0xD6, 0x56, 0xCE, 0x15, 0xD6, 0x56, 0xCE, 0x56, 0x7C, 0x2E, 0x74, 0x0C, 0x5B, 0x88, 0x53, 0x26, 0xB5, 0xB2, 0xC6, 0x14, 0xC5, 0xD3, 0xBD, 0xB3, 0xB5, 0x52, 0xBD, 0xB3, 0xBD, 0xB3, 0xB5, 0x72, 0x9C, 0xB1, 0x73, 0x8D, 0x5A, 0xEA, 0x52, 0xA9, 0x73, 0x8C, 0xB5, 0x74, 0xBD, 0xD5, 0xB5, 0x74, 0xAD, 0x54, 0xA4, 0xF2, 0x9C, 0xD1, 0x7B, 0xCD, 0xC6, 0x57, 0xD6, 0xB7, 0xDE, 0xF9, 0xA5, 0x33, 0xE7, 0x3A, 0xDE, 0xF9, 0xA5, 0x32, 0x9D, 0x32, 0x94, 0xF1, 0x8C, 0xD0, 0xAE, 0x13, 0x9D, 0x91, 0x8C, 0xEE, 0xC6, 0xF4, 0xBE, 0x91, 0xAD, 0xF2, 0xC6, 0x97, 0xC6, 0x77, 0xAD, 0xB4, 0xA5, 0x73, 0xBE, 0x16, 0xD6, 0xF8, 0xB6, 0x34, 0xB6, 0x33, 0xBE, 0x75, 0xAD, 0xD2, 0x8C, 0xEE, 0x6C, 0x4A, 0x53, 0x86, 0x6C, 0x49, 0x85, 0x0B, 0x74, 0xA8, 0x5C, 0x06, 0x3A, 0xA6, 0x63, 0x8B, 0x9D, 0x90, 0x95, 0x50, 0x84, 0x2F, 0x95, 0x31, 0xA5, 0xD1, 0x95, 0x50, 0x84, 0xEE, 0x84, 0xED, 0x95, 0xAE, 0x85, 0x0C, 0x7C, 0xAA, 0x7C, 0xC9, 0x95, 0x8C, 0x6C, 0x28, 0x63, 0x8A, 0xA5, 0xB0, 0xA5, 0x90, 0x8C, 0xB0, 0x84, 0x2F, 0x7C, 0x2F, 0x84, 0x8F, 0x8D, 0x0E, 0x6C, 0x2B, 0x32, 0x45, 0x19, 0x42, 0x2A, 0x03, 0x4B, 0x66, 0x4B, 0xA5, 0x53, 0xC6, 0x5B, 0xE9, 0x7C, 0xCD, 0x9D, 0xB0, 0xBE, 0x93, 0xB6, 0x12, 0xA5, 0xB0, 0x9D, 0x90, 0x9D, 0x8F, 0x8D, 0x0C, 0x8D, 0x4A, 0x8D, 0x49, 0x85, 0x29, 0x95, 0x4D, 0xBE, 0x52, 0xCE, 0xD4, 0xB5, 0xF3, 0xA5, 0x52, 0x84, 0x6D, 0x63, 0x69, 0x63, 0x8A, 0x73, 0xEC, 0x8C, 0xB0, 0xB5, 0xB5, 0xBD, 0xD7, 0xAD, 0x55, 0x94, 0x92, 0xA5, 0x14, 0xBD, 0xF7, 0xCE, 0x59, 0xCE, 0x59, 0xCE, 0x59, 0xCE, 0x7A, 0xDE, 0xDA, 0xCE, 0x99, 0xAD, 0xD5, 0xB6, 0x15, 0xA5, 0x73, 0xA5, 0x34, 0xC6, 0x38, 0x9C, 0xD3, 0x8C, 0x52, 0x52, 0xAB, 0x42, 0x08, 0x31, 0x86, 0x42, 0x28, 0x63, 0x2C, 0x7B, 0xEF, 0x84, 0x30, 0x84, 0x10, 0x84, 0x30, 0x84, 0x0F, 0x63, 0x0C, 0x4A, 0x49, 0x4A, 0x29, 0x63, 0x0C, 0x73, 0x8E, 0x83, 0xEF, 0x8C, 0x50, 0x9C, 0xD2, 0x9C, 0xD3, 0xBD, 0xB6, 0xA5, 0x14, 0x8C, 0x31, 0x9C, 0xF4, 0xA5, 0x14, 0x8C, 0x72, 0xA5, 0x56, 0xB5, 0xD8, 0xAD, 0xB8, 0xB5, 0xD8, 0xB5, 0xF9, 0xB5, 0xF9, 0xA5, 0x98, 0xA5, 0xB8, 0xAD, 0xB8, 0xAD, 0x98, 0xBE, 0x19, 0xC6, 0x9B, 0xCE, 0x9B, 0xCE, 0xBA, 0xB6, 0x35, 0xA5, 0xD1, 0xAD, 0xD1, 0x9D, 0x6F, 0xB5, 0xD0, 0xCE, 0x72, 0xD6, 0xD2, 0xEF, 0x94, 0xCE, 0xB1, 0xA5, 0xAF, 0xA5, 0xCF, 0xAD, 0xEF, 0xEF, 0x93, 0xBE, 0x11, 0xDF, 0x39, 0xD6, 0xDA, 0xEF, 0x7D, 0xFF, 0xDF, 0xBD, 0xF7, 0x39, 0xC7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x45, 0xAD, 0x55, 0xF7, 0xDE, 0xCE, 0x79, 0x7C, 0x2E, 0x2A, 0x44, 0x32, 0x85, 0x32, 0x65, 0x11, 0x62, 0x19, 0xA3, 0x19, 0xA3, 0x21, 0xC3, 0x19, 0xA3, 0x11, 0x42, 0x09, 0x21, 0x32, 0x44, 0x3A, 0xE5, 0x2A, 0x64, 0x21, 0xE2, 0x2A, 0x43, 0x53, 0xA8, 0x85, 0x2F, 0x74, 0xAD, 0x42, 0xE6, 0x22, 0x23, 0x2A, 0x64, 0x21, 0xE2, 0x7B, 0xAC, 0x7B, 0x6B, 0x73, 0x49, 0x8B, 0xEC, 0x9C, 0x4D, 0x9C, 0x4D, 0x94, 0x2C, 0x9C, 0x6D, 0x9C, 0x6E, 0xA4, 0xAE, 0xA4, 0xCF, 0xA4, 0xAE, 0xA4, 0x8E, 0xAC, 0xCF, 0xA4, 0xAF, 0x9C, 0x6E, 0xA4, 0x8E, 0xAC, 0xD0, 0xBD, 0x31, 0xC5, 0x92, 0xBD, 0x71, 0xBD, 0x72, 0xDE, 0xDA, 0xFF, 0xBE, 0x63, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0xAE, 0xFF, 0xDE, 0xF7, 0x5C, 0xE6, 0xD8, 0xF7, 0x3B, 0xFF, 0xDE, 0xBD, 0xF7, 0x10, 0xA2, 0x00, 0x00, 0x00, 0x00, 0x39, 0xE7, 0xEF, 0x7D, 0xFF, 0xBE, 0xFF, 0xDE, 0xF7, 0xBE, 0x5A, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x18, 0xE3, 0xC6, 0x38, 0xFF, 0xBE, 0xEF, 0x3A, 0xE7, 0x19, 0xEF, 0x3A, 0xFF, 0xBE, 0xDE, 0xFB, 0x39, 0xC7, 0x00, 0x00, 0x00, 0x00, 0x52, 0xAA, 0xEF, 0x7D, 0xE7, 0x3B, 0xB5, 0x93, 0x5B, 0x08, 0x63, 0x89, 0x63, 0xCA, 0x5B, 0xAA, 0x95, 0x2F, 0x9D, 0x4F, 0xBE, 0x53, 0xC6, 0x74, 0x7C, 0x2B, 0xBE, 0x33, 0xB5, 0xB2, 0x9C, 0xB0, 0x94, 0x6F, 0xA4, 0xF1, 0xAD, 0x11, 0xAD, 0x31, 0xB5, 0x50, 0xB5, 0x90, 0xB5, 0x90, 0xB5, 0x50, 0xAD, 0x31, 0x73, 0x6B, 0xA4, 0xCF, 0xA4, 0xD0, 0xAD, 0x12, 0x7B, 0x8C, 0x6B, 0x4B, 0xB5, 0x52, 0xAD, 0x31, 0xBD, 0x92, 0xBD, 0x72, 0xC5, 0xB3, 0xC5, 0xB3, 0xA4, 0xD0, 0xBD, 0xB3, 0xBD, 0xD3, 0x42, 0xC4, 0x3A, 0xE4, 0x43, 0x03, 0x3A, 0xE4, 0x73, 0xEB, 0xC6, 0x14, 0xC5, 0xD3, 0xB5, 0x71, 0x94, 0x4D, 0xB5, 0x71, 0xA4, 0xCF, 0xA4, 0xAF, 0xA4, 0xF1, 0x84, 0x0E, 0x84, 0x0E, 0x94, 0x90, 0xA4, 0xF2, 0xB5, 0x74, 0xA5, 0x12, 0x94, 0x90, 0x9C, 0xD1, 0x94, 0xB0, 0x94, 0xB0, 0xBD, 0xF5, 0xDE, 0xD9, 0xBE, 0x15, 0xAD, 0xB3, 0x9D, 0x51, 0xA5, 0xB2, 0xA5, 0xB2, 0x94, 0xEF, 0x63, 0x8A, 0x74, 0x4C, 0x9D, 0x8F, 0x9D, 0xAE, 0x7C, 0x8A, 0x85, 0x0B, 0xB6, 0x8F, 0xBE, 0x8E, 0x63, 0xC9, 0xC6, 0x97, 0xD7, 0x1A, 0x84, 0x6F, 0x9D, 0x32, 0xAD, 0xD3, 0xA5, 0x90, 0xA5, 0xF0, 0x8D, 0x4D, 0x74, 0x69, 0x5B, 0xC5, 0x53, 0xC3, 0x53, 0x85, 0x95, 0x2E, 0xA5, 0x8F, 0x84, 0xCB, 0x5B, 0xE5, 0x53, 0xE5, 0x64, 0x47, 0x7C, 0xC9, 0x74, 0xA9, 0x5B, 0xC7, 0x4B, 0x26, 0x74, 0xAA, 0x9E, 0x0D, 0x8D, 0x6A, 0x7D, 0x09, 0x64, 0x47, 0x7C, 0xEA, 0x9D, 0xAE, 0xA6, 0x0F, 0x6C, 0x88, 0x4B, 0x45, 0x42, 0xE4, 0x3A, 0x84, 0x53, 0x46, 0x53, 0x66, 0x53, 0x47, 0x29, 0xC4, 0x19, 0x23, 0x29, 0xC4, 0x4B, 0x47, 0x4B, 0x26, 0x42, 0xE5, 0x2A, 0x24, 0x2A, 0x03, 0x43, 0x05, 0x4B, 0x65, 0x5B, 0xE7, 0x7C, 0xCB, 0x8D, 0x6D, 0x5B, 0xE7, 0x7C, 0xC9, 0x95, 0x8B, 0x74, 0xA7, 0x6C, 0x86, 0x6C, 0x66, 0xA5, 0xEE, 0xBE, 0xD2, 0x8D, 0x6A, 0x6C, 0x86, 0x7C, 0xA7, 0xC6, 0xD1, 0xC6, 0xF2, 0xBE, 0xD3, 0xBE, 0x93, 0xAE, 0x30, 0x6C, 0x26, 0x7C, 0xC8, 0x7C, 0xE8, 0x7C, 0xA9, 0x8C, 0xEE, 0x8C, 0x70, 0x73, 0xAE, 0x8C, 0x71, 0x9C, 0xD3, 0xCE, 0x7A, 0xAD, 0x76, 0x9C, 0xB3, 0xA4, 0xD3, 0x9C, 0xD4, 0x94, 0xB3, 0xAD, 0x75, 0x9D, 0x12, 0xAD, 0xF4, 0xB6, 0x35, 0xC6, 0x58, 0xBD, 0xF7, 0x9C, 0xD3, 0x6B, 0x4D, 0x42, 0x29, 0x31, 0x86, 0x29, 0x65, 0x29, 0x45, 0x31, 0x86, 0x39, 0xC7, 0x42, 0x28, 0x42, 0x08, 0x21, 0x04, 0x31, 0x86, 0x29, 0x45, 0x4A, 0x28, 0x5A, 0xCB, 0x39, 0xA6, 0x39, 0xC7, 0x5A, 0xCB, 0x41, 0xE7, 0x4A, 0x29, 0x42, 0x08, 0x62, 0xEB, 0x6B, 0x4D, 0x7B, 0xD0, 0x8C, 0x72, 0x9C, 0xD4, 0xA5, 0x14, 0xAD, 0x76, 0xA5, 0x35, 0x73, 0xF1, 0x8C, 0xD4, 0xB5, 0xD8, 0x7C, 0x32, 0x74, 0x32, 0x7C, 0x73, 0x84, 0xB5, 0x8C, 0xD5, 0x84, 0xB5, 0x84, 0xB5, 0x84, 0xB5, 0x84, 0x93, 0x8D, 0x11, 0x8D, 0x4C, 0x8D, 0x4B, 0x8C, 0xEB, 0xC6, 0xB1, 0xCE, 0xAF, 0xD7, 0x0F, 0xB5, 0xE9, 0xB6, 0x29, 0x95, 0x65, 0x85, 0x04, 0x95, 0x66, 0xA5, 0x8B, 0x95, 0x2F, 0x8C, 0xF2, 0x9D, 0x35, 0xB5, 0xF9, 0xDE, 0xFC, 0xF7, 0xBF, 0xFF, 0xDF, 0xEF, 0x7D, 0xCE, 0x79, 0xBD, 0xF7, 0xB5, 0x96, 0xAD, 0x55, 0xBD, 0xD7, 0xC6, 0x38, 0xE7, 0x3C, 0xF7, 0xBE, 0xF7, 0xBD, 0xDF, 0x3A, 0x94, 0xF1, 0x4B, 0x08, 0x32, 0x85, 0x4B, 0x07, 0x32, 0x45, 0x21, 0xE4, 0x2A, 0x25, 0x11, 0x42, 0x19, 0x62, 0x19, 0xA3, 0x21, 0xA4, 0x11, 0x01, 0x32, 0x45, 0x4B, 0x47, 0x2A, 0x43, 0x22, 0x03, 0x22, 0x43, 0x53, 0xA9, 0x74, 0xCD, 0x7C, 0xED, 0x3A, 0xC6, 0x09, 0x20, 0x2A, 0x44, 0x21, 0xE3, 0x83, 0xED, 0x8B, 0xED, 0x7B, 0x4A, 0x8B, 0xEB, 0xA4, 0xAE, 0xA4, 0xAE, 0xA4, 0xAE, 0xA4, 0xAF, 0xA4, 0x8E, 0xB5, 0x10, 0xB5, 0x10, 0xAD, 0x10, 0xB5, 0x10, 0xB5, 0x10, 0xBD, 0x51, 0xBD, 0x51, 0xBD, 0x72, 0xC5, 0xB2, 0xBD, 0x51, 0xB5, 0x10, 0xB5, 0x10, 0xBD, 0x72, 0xCE, 0x36, 0xEF, 0x5C, 0xFF, 0xBE, 0xCE, 0x79, 0xA5, 0x34, 0xD6, 0x9A, 0xF7, 0xBE, 0xE7, 0x1B, 0xC5, 0xB4, 0xA4, 0xAF, 0xB5, 0x32, 0xD6, 0x99, 0xF7, 0x7D, 0xEF, 0x7D, 0xBD, 0xD7, 0xCE, 0x59, 0xFF, 0xBE, 0xF7, 0x7D, 0xE6, 0xD9, 0xE6, 0xD9, 0xF7, 0x7C, 0xFF, 0xDE, 0xE7, 0x1C, 0xD6, 0x99, 0xFF, 0xBE, 0xFF, 0xBE, 0xF7, 0x5B, 0xEF, 0x19, 0xEF, 0x19, 0xEE, 0xF9, 0xF7, 0x7C, 0xF7, 0x9D, 0xFF, 0xDF, 0xE7, 0x3C, 0xEF, 0x7D, 0xFF, 0xDE, 0xEF, 0x7C, 0xD6, 0x57, 0xA4, 0xCF, 0x73, 0x89, 0x74, 0x0B, 0x63, 0xCA, 0x63, 0xCA, 0x9D, 0x91, 0x74, 0x0B, 0x8C, 0xED, 0xAE, 0x11, 0x73, 0xEB, 0x8C, 0x8E, 0xC6, 0x35, 0x7B, 0xCC, 0x8C, 0x2E, 0x9C, 0xD0, 0xB5, 0x92, 0xBE, 0x11, 0xBE, 0x50, 0xBE, 0x6F, 0xBE, 0x6F, 0xC6, 0x70, 0xC6, 0x53, 0x7B, 0x8A, 0xAD, 0x10, 0xAD, 0x11, 0x6B, 0x4B, 0x63, 0x2A, 0x9C, 0xB0, 0xB5, 0x72, 0xB5, 0x52, 0xAD, 0x31, 0xBD, 0x72, 0xBD, 0x72, 0xBD, 0x72, 0x83, 0xEC, 0xC5, 0xF4, 0xAD, 0x50, 0x4B, 0x05, 0x32, 0x82, 0x3A, 0xA2, 0x3A, 0xA3, 0x53, 0x68, 0x7C, 0x6C, 0x84, 0x6D, 0xA5, 0x51, 0x8C, 0x4D, 0xAD, 0x10, 0x9C, 0x8E, 0x9C, 0x6D, 0xB5, 0x52, 0x94, 0x8F, 0x9C, 0xF1, 0xAD, 0x73, 0xAD, 0x73, 0xA5, 0x12, 0x94, 0x90, 0x6B, 0x4B, 0x6B, 0x6C, 0x83, 0xEE, 0xC5, 0xF6, 0xCE, 0x77, 0xA5, 0x32, 0x5B, 0x4A, 0x42, 0xE8, 0x42, 0xC7, 0x6B, 0xEB, 0x9D, 0x71, 0xA5, 0x91, 0xA5, 0x92, 0x7C, 0x6C, 0xBE, 0x72, 0xBE, 0xB2, 0x7C, 0xAA, 0x74, 0x88, 0x9D, 0xCC, 0xA5, 0xED, 0x5B, 0x89, 0xD6, 0xF9, 0x94, 0xF1, 0x9D, 0x51, 0xA5, 0xB1, 0xAE, 0x32, 0x84, 0xEB, 0x8D, 0x2C, 0x95, 0x6D, 0x53, 0xC5, 0x4B, 0xA3, 0x43, 0x43, 0x63, 0x87, 0x8C, 0x8D, 0x7C, 0x2A, 0x7C, 0xA9, 0x53, 0xC4, 0x64, 0x46, 0x64, 0x26, 0x85, 0x29, 0x6C, 0x88, 0x32, 0x63, 0x21, 0xE2, 0x4B, 0x66, 0x74, 0xCA, 0x74, 0xC9, 0x74, 0xC9, 0x95, 0xAD, 0x95, 0x8C, 0x95, 0xAC, 0x7D, 0x09, 0x4B, 0x84, 0x32, 0x63, 0x43, 0x05, 0x3A, 0x84, 0x3A, 0xC5, 0x43, 0x05, 0x4B, 0x27, 0x11, 0x21, 0x11, 0x02, 0x11, 0x01, 0x2A, 0x24, 0x42, 0xC6, 0xAE, 0x11, 0x84, 0xCC, 0x4A, 0xE7, 0x74, 0x4C, 0x8D, 0x2E, 0x8D, 0x4D, 0x7C, 0xCB, 0x5B, 0xE7, 0x64, 0x49, 0x64, 0x48, 0x4B, 0xC4, 0x74, 0xE9, 0x9E, 0x0E, 0xAE, 0x71, 0xAE, 0x50, 0x9D, 0xCE, 0x7D, 0x0A, 0x6C, 0x88, 0x95, 0x4A, 0xBE, 0x8F, 0xA5, 0xEF, 0xC7, 0x14, 0xBE, 0xF4, 0xB6, 0x71, 0x53, 0xC5, 0x54, 0x03, 0x64, 0x63, 0x7C, 0xC7, 0xB6, 0x30, 0x84, 0x6D, 0x63, 0x0C, 0x9C, 0xD3, 0x9C, 0xF4, 0xBD, 0xF8, 0x8C, 0x31, 0x7B, 0x8E, 0x8B, 0xCF, 0xA4, 0xB3, 0xB5, 0x55, 0x8C, 0x51, 0x8C, 0x30, 0xAD, 0x94, 0xA5, 0x54, 0xA5, 0x34, 0x9C, 0xF4, 0x8C, 0x92, 0x52, 0xCB, 0x39, 0xC7, 0x31, 0x65, 0x21, 0x44, 0x29, 0x44, 0x31, 0x85, 0x31, 0x86, 0x52, 0x89, 0x5A, 0xCA, 0x29, 0x45, 0x21, 0x04, 0x31, 0x65, 0x52, 0x8A, 0x62, 0xEB, 0x5A, 0xAB, 0x39, 0xA6, 0x52, 0x8A, 0x6B, 0x2D, 0x41, 0xE8, 0x42, 0x08, 0x4A, 0x49, 0x5A, 0xCC, 0x7B, 0xAF, 0x94, 0x72, 0x94, 0x92, 0x94, 0x92, 0x8C, 0x71, 0x8C, 0x51, 0x94, 0xB3, 0xA5, 0x35, 0x94, 0xD4, 0x74, 0x12, 0x6B, 0xD1, 0x63, 0xB1, 0x63, 0xB1, 0x63, 0xB1, 0x63, 0xB0, 0x6B, 0xD1, 0x63, 0xB0, 0x63, 0x8F, 0x6B, 0xEE, 0x8D, 0x2D, 0x8D, 0x2B, 0x8D, 0x2A, 0xC6, 0xAF, 0xD6, 0xEE, 0xD7, 0x0E, 0xAD, 0xA7, 0xC6, 0xAA, 0xA5, 0xE7, 0x8D, 0x23, 0x8D, 0x25, 0x9D, 0x8B, 0x8C, 0xEF, 0x84, 0xB2, 0x8C, 0xD4, 0x8C, 0xF5, 0xAD, 0x97, 0xEF, 0x5C, 0xEF, 0x7C, 0xEF, 0x7D, 0xF7, 0xBE, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xEF, 0x7D, 0xDF, 0x1B, 0xD6, 0xF7, 0xB6, 0x31, 0x6C, 0x4A, 0x3A, 0xA6, 0x5B, 0xAA, 0x5B, 0xAA, 0x2A, 0x04, 0x2A, 0x04, 0x32, 0x66, 0x19, 0xA3, 0x21, 0xA3, 0x21, 0xE4, 0x19, 0x63, 0x2A, 0x05, 0x6C, 0x4C, 0x5C, 0x09, 0x22, 0x23, 0x22, 0x23, 0x22, 0x23, 0x3A, 0xE6, 0x4B, 0x27, 0x7C, 0xEE, 0x21, 0xC3, 0x19, 0xA3, 0x32, 0x85, 0x21, 0xE3, 0xB5, 0x73, 0x8C, 0x0D, 0x7B, 0x6A, 0x9C, 0x6E, 0xBD, 0x51, 0xB5, 0x30, 0xB5, 0x10, 0xA4, 0xAF, 0xAD, 0x10, 0xBD, 0x92, 0xC5, 0x93, 0xC5, 0x92, 0xCD, 0xF4, 0xBD, 0x72, 0xBD, 0x72, 0xBD, 0x92, 0xBD, 0x51, 0xC5, 0x92, 0xA4, 0x8E, 0x8C, 0x0C, 0x94, 0x2D, 0x9C, 0x4D, 0x9C, 0x8F, 0xC5, 0xD5, 0xE7, 0x1B, 0xF7, 0xBE, 0xFF, 0xFF, 0xFF, 0xDE, 0xF7, 0x7C, 0xE6, 0xB8, 0xD6, 0x14, 0xCD, 0xF3, 0xC5, 0x92, 0xD6, 0x56, 0xE6, 0xF9, 0xF7, 0x9D, 0xFF, 0xDF, 0xFF, 0xBE, 0xEF, 0x3C, 0xDE, 0x78, 0xB5, 0x31, 0xB5, 0x31, 0xC5, 0xF5, 0xE6, 0xFA, 0xF7, 0x9D, 0xF7, 0x9E, 0xE7, 0x3C, 0xCE, 0x37, 0xAD, 0x11, 0xA4, 0x8E, 0x9C, 0x8E, 0xA4, 0xAF, 0xBD, 0x72, 0xCE, 0x37, 0xE7, 0x1B, 0xF7, 0x9D, 0xF7, 0x7D, 0xE7, 0x1A, 0xCE, 0x36, 0xBD, 0x72, 0xA4, 0xAE, 0x8C, 0x2B, 0x63, 0x48, 0x4B, 0x07, 0x74, 0x6C, 0x84, 0xEE, 0x5B, 0x69, 0x84, 0xCC, 0x85, 0x0C, 0xB6, 0x32, 0x84, 0x4C, 0x7C, 0x0D, 0x6B, 0x2A, 0x8C, 0x2E, 0xA5, 0x10, 0xC6, 0x52, 0xBE, 0x0F, 0xB6, 0x0D, 0xB5, 0xCC, 0xB5, 0xCD, 0xB5, 0xEE, 0xAD, 0x6F, 0x7B, 0xCC, 0xB5, 0x52, 0x63, 0x0A, 0x52, 0x88, 0x63, 0x2A, 0x94, 0x8F, 0xB5, 0x92, 0xB5, 0x72, 0xAD, 0x10, 0xB5, 0x52, 0xBD, 0x72, 0xB5, 0x72, 0x7B, 0xCC, 0xCE, 0x15, 0x9C, 0xEF, 0x6C, 0x0A, 0x53, 0xA8, 0x43, 0x05, 0x32, 0x63, 0x3A, 0xC5, 0x74, 0x6C, 0x8D, 0x0F, 0xA5, 0x51, 0x94, 0xCF, 0xAD, 0x31, 0xA4, 0xAE, 0x94, 0x2D, 0xA4, 0xF1, 0xAD, 0x52, 0xB5, 0x53, 0xBD, 0x94, 0xB5, 0x74, 0xAD, 0x33, 0x7B, 0xED, 0x8C, 0x8F, 0x63, 0x6B, 0xA5, 0x53, 0xBD, 0xF5, 0xA5, 0x72, 0x7C, 0x8E, 0x63, 0xEC, 0x53, 0x48, 0x6B, 0xEA, 0x8C, 0xCE, 0xA5, 0x71, 0xAD, 0xD2, 0xA5, 0x90, 0x95, 0x0D, 0x84, 0xAB, 0xAD, 0xEF, 0x9D, 0x8D, 0x64, 0x07, 0x8D, 0x2B, 0x95, 0x2B, 0x7C, 0x8F, 0xCE, 0xD9, 0x84, 0x2F, 0x9D, 0x31, 0xB6, 0x53, 0xA5, 0xF1, 0x5B, 0xE7, 0x5B, 0xC6, 0x85, 0x0B, 0x4B, 0x63, 0x43, 0x03, 0x4A, 0xE6, 0x84, 0x2D, 0x94, 0x6D, 0x9D, 0x0E, 0x74, 0x48, 0x5B, 0xE5, 0x4B, 0x83, 0x7D, 0x09, 0x8D, 0x6A, 0x6C, 0x88, 0x11, 0x60, 0x21, 0xA3, 0x2A, 0x44, 0x3A, 0xC5, 0x2A, 0x23, 0x19, 0xA1, 0x6C, 0x49, 0xAE, 0x4F, 0x85, 0x29, 0x5C, 0x03, 0x74, 0x88, 0x95, 0x4C, 0x63, 0xC8, 0x74, 0x4A, 0x53, 0x67, 0x74, 0x6B, 0x53, 0x47, 0x21, 0x62, 0x19, 0x22, 0x11, 0x01, 0x53, 0x08, 0xA5, 0xAF, 0xBE, 0x91, 0x84, 0x8C, 0x7C, 0x2D, 0x95, 0x10, 0x74, 0x6C, 0x3A, 0x84, 0x22, 0x02, 0x74, 0x8B, 0x85, 0x4D, 0x6C, 0x89, 0x64, 0x66, 0x85, 0x4B, 0xA6, 0x30, 0xAE, 0x51, 0x7D, 0x0B, 0x6C, 0xA9, 0x85, 0x4B, 0x9D, 0xAD, 0x9D, 0xAC, 0x95, 0x6A, 0x7C, 0x68, 0x9D, 0xAF, 0xC7, 0x15, 0xAE, 0x51, 0x7C, 0xCA, 0x6C, 0xC8, 0x75, 0x08, 0x8D, 0x8A, 0xB6, 0x4E, 0x9D, 0x4D, 0x63, 0x4B, 0x8C, 0x71, 0xA5, 0x35, 0xA5, 0x14, 0x62, 0xCB, 0x62, 0xAB, 0x8B, 0xEF, 0xBD, 0x54, 0xAD, 0x33, 0x5A, 0xA9, 0x9C, 0xD2, 0x9C, 0xB2, 0xCE, 0x79, 0xDE, 0xDB, 0xB5, 0x96, 0x73, 0xD0, 0x52, 0xAA, 0x5A, 0xA9, 0x84, 0x0C, 0x4A, 0x46, 0x29, 0x64, 0x39, 0xA6, 0x39, 0xC6, 0x63, 0x0B, 0x7B, 0xAE, 0x5A, 0x8A, 0x18, 0xC3, 0x31, 0x65, 0x42, 0x08, 0x5A, 0xAA, 0x73, 0x6D, 0x52, 0x49, 0x39, 0xA7, 0x5A, 0xCB, 0x5A, 0xCB, 0x41, 0xC7, 0x52, 0x6A, 0x62, 0xCC, 0x7B, 0xD0, 0x84, 0x10, 0x83, 0xEF, 0x83, 0xEF, 0x7B, 0xCF, 0x73, 0x6E, 0x9C, 0xD3, 0xBD, 0xD7, 0xBE, 0x19, 0xB6, 0x3A, 0xB6, 0x1A, 0xAD, 0xFA, 0xAD, 0xB9, 0xA5, 0x98, 0xA5, 0x98, 0xA5, 0x98, 0xA5, 0x98, 0xA5, 0x97, 0xBE, 0x36, 0xC6, 0x73, 0x8C, 0xEB, 0xAD, 0xCC, 0xEF, 0xD2, 0xD6, 0xCE, 0xAD, 0xA8, 0xC6, 0x49, 0xD7, 0x0B, 0xC6, 0xA9, 0x95, 0x44, 0x95, 0x86, 0xBE, 0x8E, 0xA5, 0xB1, 0x95, 0x13, 0x95, 0x35, 0x95, 0x16, 0xB5, 0xB6, 0xEF, 0x79, 0xDE, 0xD6, 0x5A, 0xA9, 0x4A, 0x29, 0x4A, 0x09, 0x5A, 0xCB, 0x8C, 0x51, 0x7B, 0xEF, 0x52, 0xAA, 0x3A, 0x05, 0x9D, 0x6D, 0xB6, 0x4E, 0x8D, 0x6A, 0x64, 0x07, 0x42, 0xE7, 0x7C, 0xAE, 0x5B, 0xAB, 0x11, 0x62, 0x19, 0xA3, 0x32, 0x45, 0x19, 0xA3, 0x11, 0x62, 0x11, 0x22, 0x09, 0x01, 0x42, 0xE7, 0x64, 0x4A, 0x53, 0xC8, 0x2A, 0x43, 0x2A, 0x23, 0x19, 0xA2, 0x09, 0x21, 0x21, 0xA3, 0x42, 0xC8, 0x09, 0x21, 0x21, 0xC3, 0x2A, 0x24, 0x3A, 0x86, 0xBD, 0xB4, 0x8B, 0xCC, 0x83, 0x8A, 0x9C, 0x6E, 0x9C, 0x8E, 0x9C, 0x6E, 0x9C, 0x4E, 0x9C, 0x8E, 0xBD, 0xB3, 0xC5, 0xB3, 0xBD, 0x72, 0xAD, 0x31, 0xB5, 0x52, 0xAD, 0x11, 0xA4, 0xD0, 0xAD, 0x11, 0xAD, 0x11, 0xD6, 0x14, 0xCD, 0xB3, 0xC5, 0x72, 0xCD, 0xD3, 0xCD, 0xF4, 0xC5, 0xB3, 0xD5, 0xF4, 0xD5, 0xF4, 0xA4, 0x6D, 0xB4, 0xEF, 0xDE, 0x54, 0xDE, 0x54, 0xC5, 0x92, 0xC5, 0xB2, 0xD6, 0x34, 0xD6, 0x34, 0xD6, 0x34, 0xD6, 0x14, 0xE6, 0x96, 0xCD, 0xF3, 0xC5, 0x91, 0xC5, 0xB2, 0xD6, 0x34, 0x9C, 0x6E, 0xB5, 0x0F, 0xC5, 0xB2, 0xDE, 0x35, 0xE6, 0x75, 0xDE, 0x34, 0xCD, 0xF3, 0xCD, 0xD3, 0xAC, 0xEF, 0xA4, 0xAD, 0xAD, 0x2F, 0xB5, 0x50, 0xB5, 0x2F, 0xC5, 0xF3, 0xE7, 0x38, 0xD6, 0xD7, 0xB6, 0x33, 0xB5, 0xB1, 0xAD, 0x2F, 0xB5, 0x30, 0xB5, 0x2F, 0x94, 0xAC, 0x6B, 0xE8, 0x42, 0xA6, 0x7C, 0x8D, 0x95, 0x2F, 0x9D, 0x2F, 0x95, 0x4E, 0x74, 0x89, 0x95, 0x4C, 0xB6, 0x31, 0xB5, 0xD2, 0xB5, 0xB3, 0xD6, 0xB6, 0xCE, 0x92, 0xCE, 0x92, 0x94, 0xCB, 0x94, 0xAB, 0x94, 0x6B, 0x94, 0x2A, 0x94, 0x4B, 0x83, 0xEC, 0xA4, 0xD1, 0x6B, 0x4B, 0x6B, 0x0A, 0x83, 0xCC, 0x83, 0xED, 0x9C, 0xAF, 0xAD, 0x10, 0xA4, 0xD0, 0x8C, 0x2D, 0xA4, 0xD0, 0x9C, 0xD0, 0x94, 0x8F, 0x8C, 0x2E, 0xC6, 0x15, 0xBD, 0xD3, 0x8C, 0xED, 0x74, 0x6B, 0x74, 0x6B, 0x6C, 0x2A, 0x74, 0x4B, 0xA5, 0xD1, 0xAD, 0xF2, 0xA5, 0xB2, 0x95, 0x0F, 0xAD, 0x31, 0xAC, 0xF0, 0x8C, 0x2D, 0x9C, 0xAF, 0xAD, 0x32, 0xA4, 0xF1, 0xBD, 0xB4, 0xB5, 0x94, 0xAD, 0x73, 0x84, 0x4E, 0xCE, 0xB6, 0xB6, 0x13, 0x73, 0xCC, 0x42, 0x87, 0x42, 0xC6, 0x43, 0x07, 0x53, 0x48, 0x74, 0x2C, 0xDF, 0x16, 0xE7, 0x36, 0xC6, 0x74, 0x9D, 0x0F, 0x95, 0x0E, 0xA5, 0x6F, 0x63, 0x48, 0x7B, 0xEA, 0x7C, 0x6B, 0x95, 0x30, 0x95, 0x2E, 0x95, 0x4E, 0x84, 0x8F, 0xB5, 0xD6, 0x84, 0x50, 0x94, 0xD0, 0xC6, 0xB6, 0x7C, 0x8D, 0x6C, 0x08, 0x95, 0x6D, 0x53, 0xA6, 0x5B, 0xA7, 0x4A, 0xE6, 0xAD, 0x92, 0xB5, 0xB3, 0x84, 0x2D, 0x84, 0xAB, 0x53, 0x85, 0x3A, 0xE2, 0x5B, 0xE6, 0xA6, 0x0E, 0x95, 0xAB, 0x64, 0x27, 0x11, 0x41, 0x2A, 0x25, 0x19, 0x82, 0x42, 0xE6, 0x3A, 0xA5, 0x4B, 0x06, 0x19, 0x81, 0x64, 0x48, 0x6C, 0x86, 0x6C, 0x86, 0x9D, 0xCD, 0xA5, 0xEF, 0x4A, 0xE5, 0x5B, 0x68, 0x63, 0x88, 0x53, 0x27, 0x42, 0x44, 0x4A, 0x46, 0x5B, 0x08, 0x84, 0x8C, 0xAE, 0x10, 0xB6, 0x2F, 0xA5, 0xAE, 0x3A, 0x65, 0x73, 0xED, 0xA5, 0x73, 0x7C, 0x4E, 0x11, 0x62, 0x2A, 0x23, 0x74, 0xCC, 0x85, 0x4D, 0x85, 0x4C, 0x6C, 0xA9, 0x8D, 0x8D, 0x95, 0xEE, 0x6C, 0x69, 0x43, 0x43, 0x85, 0x6B, 0x95, 0xAD, 0x8D, 0x6C, 0x95, 0x8C, 0x8D, 0x2A, 0x95, 0x4B, 0x8D, 0x2C, 0xAE, 0x71, 0xAE, 0x71, 0x8D, 0x6D, 0x7D, 0x0A, 0x74, 0xE8, 0x8D, 0xAA, 0x8D, 0x69, 0x7C, 0xA7, 0x7C, 0xAC, 0x94, 0xF0, 0x94, 0xB1, 0x73, 0x6D, 0x52, 0x68, 0x94, 0x2E, 0x9C, 0x6E, 0xBD, 0x92, 0xC6, 0x12, 0xAD, 0x8F, 0xB5, 0xB1, 0xAD, 0x72, 0xBD, 0xD6, 0xB5, 0x96, 0xD6, 0xBB, 0xB5, 0x96, 0x63, 0x2C, 0x9C, 0xCF, 0xCE, 0x50, 0xAD, 0x2C, 0x42, 0x05, 0x42, 0x07, 0x42, 0x07, 0x73, 0x6C, 0x83, 0xAE, 0x73, 0x4C, 0x18, 0xA2, 0x29, 0x24, 0x4A, 0x28, 0x5A, 0xAB, 0x73, 0x4D, 0x73, 0x6E, 0x4A, 0x29, 0x52, 0x49, 0x6B, 0x0C, 0x5A, 0x8A, 0x7B, 0x8D, 0x73, 0x4D, 0x7B, 0xAE, 0x73, 0x6D, 0x94, 0x51, 0x83, 0xCF, 0x83, 0xEF, 0x9C, 0xD3, 0xB5, 0x76, 0xC6, 0x18, 0xC6, 0x5A, 0xCE, 0xDC, 0xCE, 0xFD, 0xCE, 0xFE, 0xCE, 0xDE, 0xCE, 0xDD, 0xCE, 0xFD, 0xCE, 0xDD, 0xC6, 0x9C, 0xCE, 0xB9, 0xDF, 0x36, 0xE7, 0x56, 0xBE, 0x10, 0xCE, 0x90, 0xCE, 0xAF, 0x8C, 0xC6, 0xA5, 0x89, 0xD6, 0xED, 0xE7, 0x6D, 0xD7, 0x2B, 0xAE, 0x28, 0xAE, 0x07, 0xB6, 0x6C, 0xC6, 0xD5, 0x9D, 0x74, 0xB6, 0x38, 0xBE, 0x5A, 0xC6, 0x59, 0xC5, 0xF6, 0x83, 0xED, 0x42, 0x07, 0x41, 0xE8, 0x41, 0xE7, 0x83, 0xEF, 0xAD, 0x34, 0x7B, 0xAE, 0x39, 0xE7, 0x63, 0xA9, 0x9D, 0x8C, 0xBE, 0x90, 0x8D, 0x6B, 0x4B, 0x65, 0x4B, 0x48, 0x6C, 0x2C, 0x3A, 0xA7, 0x19, 0xA3, 0x19, 0xA3, 0x2A, 0x04, 0x19, 0x63, 0x08, 0xE1, 0x08, 0xC1, 0x21, 0xC4, 0x32, 0x85, 0x3A, 0xC5, 0x53, 0xA8, 0x2A, 0x63, 0x22, 0x03, 0x11, 0x82, 0x11, 0x42, 0x11, 0x02, 0x11, 0x42, 0x21, 0xC4, 0x21, 0xC4, 0x19, 0xA3, 0x4B, 0x09, 0xBD, 0x93, 0x83, 0xCC, 0x83, 0xCB, 0xA4, 0xAF, 0x9C, 0x4E, 0x8B, 0xED, 0x8C, 0x0D, 0x94, 0x4E, 0x9C, 0xAF, 0x8C, 0x0D, 0xA4, 0xD0, 0xA4, 0xD0, 0xA4, 0xD0, 0x9C, 0x8F, 0x9C, 0xB0, 0x94, 0x6F, 0xAD, 0x11, 0xCD, 0xD4, 0xD5, 0xF4, 0xD5, 0xF4, 0xDE, 0x76, 0xE6, 0x96, 0xDE, 0x75, 0xDE, 0x55, 0xEE, 0x96, 0xBD, 0x10, 0xAC, 0xEF, 0xDE, 0x54, 0xD6, 0x34, 0xCE, 0x13, 0xD6, 0x14, 0xD6, 0x75, 0xD6, 0x55, 0xD6, 0x35, 0xD6, 0x34, 0xDE, 0x75, 0xD6, 0x34, 0xC5, 0xD3, 0xDE, 0x76, 0xE6, 0xB7, 0xB5, 0x31, 0xC5, 0xD3, 0xCE, 0x14, 0xCD, 0xF3, 0xD6, 0x14, 0xD6, 0x34, 0xD6, 0x14, 0xDE, 0x34, 0x9C, 0xAD, 0x84, 0x07, 0x7C, 0x47, 0x84, 0x68, 0x8C, 0x89, 0xA5, 0x6F, 0xCE, 0xF7, 0xAE, 0x14, 0x9D, 0xB1, 0xA5, 0x90, 0x9C, 0x8E, 0x9C, 0x8E, 0x9C, 0x8D, 0x7C, 0x29, 0x74, 0x49, 0x63, 0xC8, 0x74, 0x4B, 0x8C, 0xCD, 0xAD, 0xD0, 0x8C, 0xEB, 0x6C, 0x68, 0x7C, 0xA9, 0xBE, 0x71, 0xC6, 0x53, 0xC6, 0x34, 0xA5, 0x0F, 0x9C, 0xED, 0xB5, 0xCE, 0xC6, 0x70, 0xCE, 0x72, 0xB5, 0x90, 0xA4, 0xCE, 0xAD, 0x11, 0xA4, 0xF1, 0x63, 0x0A, 0x7B, 0xCD, 0x9C, 0xAF, 0x9C, 0x6E, 0x9C, 0x6E, 0x94, 0x4E, 0x9C, 0x4E, 0x9C, 0x6E, 0xA4, 0xAF, 0x94, 0x4E, 0x83, 0xEC, 0x83, 0xCC, 0x83, 0xCC, 0x83, 0xAC, 0x7B, 0x8A, 0x73, 0xAA, 0x63, 0xC9, 0x84, 0xED, 0x8D, 0x2E, 0x8D, 0x0E, 0x9D, 0x70, 0x8D, 0x0F, 0x7C, 0xAD, 0x8C, 0xCE, 0x9C, 0xCF, 0xA4, 0xEF, 0x9C, 0x8E, 0x83, 0xEC, 0x94, 0x6F, 0xA4, 0xF1, 0xAD, 0x73, 0x9C, 0xB0, 0x8C, 0x4F, 0x7C, 0x0D, 0xC6, 0x95, 0xCE, 0xF6, 0x95, 0x70, 0x4B, 0x28, 0x5B, 0xA9, 0x6C, 0x4C, 0x74, 0x6C, 0x7C, 0x6C, 0x84, 0x8D, 0x5B, 0x88, 0x42, 0xE5, 0x84, 0x6E, 0x94, 0xF0, 0xA5, 0x31, 0x7B, 0xEC, 0x6B, 0x6A, 0xA5, 0x53, 0xCE, 0xDB, 0xAD, 0xD6, 0xAD, 0xD4, 0x63, 0xAC, 0x6B, 0xCD, 0x6B, 0xAC, 0x6B, 0xAB, 0x6B, 0x8A, 0x6B, 0x8A, 0x6B, 0xEA, 0x84, 0xEB, 0x84, 0xCB, 0x32, 0x24, 0x5B, 0x09, 0xA5, 0x72, 0x84, 0x6D, 0x6B, 0xEA, 0x63, 0xE8, 0x53, 0xA5, 0x6C, 0x88, 0x6C, 0x87, 0x9D, 0xCD, 0x9D, 0xCD, 0x4B, 0x05, 0x11, 0x21, 0x19, 0xA2, 0x3A, 0x85, 0x4B, 0x66, 0x5B, 0xE8, 0x63, 0xE8, 0x19, 0x41, 0x74, 0xAA, 0x7D, 0x29, 0x95, 0xCD, 0xA6, 0x0F, 0x9D, 0xAE, 0x74, 0x29, 0x29, 0xA2, 0x52, 0xC7, 0x31, 0xE3, 0x4A, 0x45, 0x62, 0xE7, 0x63, 0x48, 0x63, 0xA8, 0xA5, 0xAE, 0xBE, 0x91, 0x6B, 0xC9, 0x21, 0x83, 0x63, 0x6C, 0xA5, 0x53, 0x84, 0x6F, 0x19, 0x82, 0x32, 0x84, 0x53, 0xA7, 0x6C, 0xAA, 0x7D, 0x0C, 0x9D, 0xF0, 0xA6, 0x30, 0x53, 0xC6, 0x32, 0xE3, 0x33, 0x02, 0x4B, 0xA6, 0x64, 0x28, 0x74, 0xAA, 0x85, 0x2B, 0x85, 0x0A, 0x7C, 0xC9, 0x64, 0x27, 0x85, 0x2C, 0xBE, 0xD3, 0xA6, 0x30, 0x95, 0xAE, 0x8D, 0x8C, 0x8D, 0x6A, 0x74, 0xA6, 0x64, 0x45, 0x64, 0x06, 0x7C, 0x4A, 0x9C, 0xCE, 0x6B, 0x09, 0x94, 0x8D, 0x94, 0x8B, 0x94, 0x8B, 0x8C, 0x6A, 0x7C, 0x28, 0xA5, 0x6E, 0x84, 0x4B, 0x8C, 0x8E, 0x9D, 0x11, 0xBD, 0xD6, 0xCE, 0x79, 0xC6, 0x18, 0xC5, 0xF7, 0xC6, 0x14, 0xCE, 0x31, 0xBD, 0xAD, 0x7B, 0xC9, 0x8C, 0x2D, 0x52, 0x48, 0x62, 0xEB, 0x94, 0x70, 0x6B, 0x0B, 0x18, 0xA2, 0x29, 0x24, 0x5A, 0x8A, 0x7B, 0x8E, 0x73, 0x6E, 0x73, 0x6E, 0x6B, 0x2D, 0x52, 0x49, 0x5A, 0xCB, 0x73, 0x4D, 0xAC, 0xF3, 0x94, 0x50, 0x62, 0xEB, 0x5A, 0x8A, 0x73, 0x6D, 0x83, 0xF0, 0x84, 0x10, 0x94, 0x92, 0xAD, 0x55, 0xBD, 0xD6, 0xAD, 0x55, 0xAD, 0x96, 0xB5, 0xF7, 0xBE, 0x7A, 0xBE, 0x5B, 0xBE, 0x5C, 0xBE, 0x5C, 0xBE, 0x7B, 0xCE, 0xDA, 0xBE, 0x55, 0xE7, 0x56, 0xE7, 0x54, 0xD6, 0xF2, 0xCE, 0xB0, 0xB5, 0xEC, 0x8C, 0xE7, 0xB6, 0x2E, 0xCF, 0x10, 0xD6, 0xED, 0xDF, 0x2C, 0xBE, 0x68, 0xB6, 0x47, 0xB6, 0x6C, 0xBE, 0xD5, 0xC6, 0xB9, 0xB6, 0x18, 0xCE, 0xDB, 0xCE, 0xDB, 0xCE, 0x99, 0xA5, 0x34, 0x63, 0x4C, 0x31, 0xA6, 0x5A, 0xCB, 0x9C, 0x91, 0xB5, 0x54, 0x7B, 0xCF, 0x31, 0xA5, 0x74, 0x6A, 0x8D, 0x6B, 0xBE, 0xB2, 0xA6, 0x10, 0x4B, 0x45, 0x32, 0x64, 0x2A, 0x04, 0x42, 0xC7, 0x3A, 0x86, 0x21, 0xE3, 0x2A, 0x05, 0x11, 0x62, 0x11, 0x42, 0x11, 0x22, 0x32, 0x45, 0x2A, 0x44, 0x2A, 0x84, 0x53, 0xE8, 0x2A, 0xA4, 0x11, 0x81, 0x11, 0x42, 0x11, 0x43, 0x19, 0x83, 0x19, 0x83, 0x21, 0xE4, 0x19, 0x83, 0x19, 0xA4, 0x4B, 0x09, 0xC5, 0xB4, 0x8B, 0xEC, 0x83, 0xCB, 0x9C, 0x4D, 0x9C, 0x6E, 0xA4, 0xD0, 0x9C, 0x8F, 0x9C, 0x8F, 0x9C, 0x8F, 0x5A, 0x88, 0x94, 0x6F, 0x9C, 0xB0, 0xA4, 0xB0, 0xA4, 0xB0, 0x9C, 0x8F, 0xA4, 0xD0, 0xAD, 0x11, 0xBD, 0x72, 0xB5, 0x31, 0xA4, 0xAF, 0xC5, 0x92, 0xCD, 0xD3, 0xCD, 0xB3, 0xCD, 0x92, 0xE6, 0x55, 0xC5, 0x72, 0xB5, 0x10, 0xDE, 0x55, 0xD6, 0x34, 0xD6, 0x55, 0xD6, 0x35, 0xD6, 0x75, 0xCE, 0x35, 0xB5, 0x52, 0xC5, 0xF4, 0xDE, 0x76, 0xD6, 0x55, 0xD6, 0x75, 0xDE, 0xB7, 0xE6, 0xD7, 0xC5, 0xD4, 0xB5, 0x52, 0xC5, 0xD3, 0xDE, 0x55, 0xDE, 0x54, 0xDE, 0x74, 0xD6, 0x54, 0xDE, 0x55, 0x9C, 0x8C, 0x94, 0xAA, 0x8C, 0xCA, 0x7C, 0xA8, 0x7C, 0x87, 0x74, 0x88, 0x7C, 0xCC, 0x95, 0x90, 0xA5, 0xD1, 0x8C, 0x8D, 0x83, 0xEB, 0x83, 0xEB, 0x73, 0xC9, 0x9D, 0x2E, 0x7C, 0x8B, 0x74, 0x2A, 0x95, 0x2E, 0x7C, 0x6A, 0x74, 0x68, 0x74, 0xA8, 0x7C, 0xC8, 0x7C, 0xA8, 0xA5, 0xEE, 0xC6, 0x73, 0x8C, 0x4D, 0x94, 0x4C, 0x94, 0x6C, 0xA4, 0xEC, 0xAD, 0x4C, 0xA5, 0x2D, 0x94, 0x6D, 0x94, 0x4E, 0xBD, 0x94, 0x6B, 0x2B, 0x73, 0x8C, 0x84, 0x0E, 0x62, 0xEA, 0x6B, 0x2A, 0x8B, 0xED, 0x62, 0xC9, 0x5A, 0x88, 0x7B, 0x6B, 0x9C, 0x8F, 0x8B, 0xEC, 0xA4, 0xCF, 0x9C, 0x6E, 0x9C, 0x8E, 0xB5, 0x71, 0xA4, 0xCF, 0xAD, 0x30, 0x63, 0xA9, 0x7C, 0xAC, 0x84, 0xCD, 0x95, 0x6F, 0x84, 0xED, 0x84, 0xCD, 0x8D, 0x2E, 0x94, 0xEE, 0x9C, 0xED, 0x9D, 0x0C, 0xA5, 0x2D, 0xA5, 0x2E, 0x9C, 0xEE, 0x94, 0x8E, 0x8C, 0x4D, 0x83, 0xEC, 0x83, 0xEC, 0x94, 0xAF, 0xA5, 0xB2, 0x9D, 0x90, 0xA5, 0xD0, 0x9D, 0xB0, 0x84, 0xEE, 0x8D, 0x2F, 0x7C, 0xAD, 0x4B, 0x47, 0x43, 0x06, 0x3B, 0x06, 0x43, 0x06, 0x84, 0xAE, 0x95, 0x10, 0x8C, 0x6E, 0x73, 0xCC, 0x6B, 0x6A, 0xAD, 0xD5, 0xC6, 0x79, 0xB6, 0x18, 0xAD, 0xF5, 0x7C, 0xAD, 0x84, 0xEC, 0x7C, 0xAB, 0x84, 0xCC, 0x9D, 0x2D, 0xB6, 0x31, 0xAD, 0xF0, 0x6C, 0x48, 0x64, 0x07, 0x4B, 0x26, 0x74, 0x6B, 0x8C, 0xED, 0x85, 0x0D, 0x6C, 0x4A, 0x5B, 0xE7, 0x8D, 0x8C, 0x7D, 0x09, 0x5C, 0x45, 0x4B, 0xA3, 0x53, 0xE5, 0x5B, 0xE8, 0x3A, 0xA4, 0x32, 0x23, 0x4B, 0x26, 0x32, 0xA3, 0x6C, 0x69, 0x2A, 0x23, 0x21, 0xA2, 0x85, 0x0C, 0xAE, 0x70, 0xAE, 0x70, 0xAE, 0x50, 0xA6, 0x0F, 0x7C, 0xCA, 0x4A, 0xC5, 0x63, 0x28, 0x5B, 0x27, 0x52, 0x86, 0x39, 0xA3, 0x42, 0x25, 0x42, 0x45, 0x32, 0x44, 0x4A, 0xE6, 0x32, 0x44, 0x29, 0xE4, 0x32, 0x06, 0x4A, 0xA8, 0x42, 0xA8, 0x32, 0x85, 0x3A, 0xE5, 0x4B, 0xA7, 0x7D, 0x0C, 0x9E, 0x30, 0x9E, 0x10, 0x6C, 0x6A, 0x2A, 0x82, 0x22, 0x41, 0x22, 0x41, 0x22, 0x42, 0x32, 0xC3, 0x43, 0x66, 0x53, 0xC7, 0x64, 0x47, 0x43, 0x64, 0x53, 0xE6, 0x85, 0x4C, 0x9D, 0xEF, 0x7C, 0xEC, 0xA6, 0x51, 0x8D, 0x6E, 0x74, 0xEB, 0x5C, 0x06, 0x5C, 0x27, 0x63, 0xE8, 0x4A, 0xA4, 0x83, 0xEA, 0x9C, 0xCC, 0xA5, 0x4D, 0x8C, 0x49, 0x5B, 0x06, 0x52, 0xA6, 0x5A, 0xC7, 0xA4, 0xAF, 0x94, 0x6F, 0x62, 0xEA, 0x83, 0xEE, 0x83, 0xEF, 0x8C, 0x51, 0xA5, 0x14, 0xDE, 0xFB, 0xC5, 0xF6, 0xA4, 0xF0, 0xB5, 0x6F, 0x94, 0xAD, 0xAD, 0x30, 0x6B, 0x0A, 0x4A, 0x27, 0x73, 0x6C, 0x29, 0x44, 0x18, 0xA2, 0x29, 0x24, 0x5A, 0xAA, 0x8C, 0x30, 0x73, 0x6E, 0x84, 0x10, 0x84, 0x10, 0x6B, 0x0C, 0x52, 0x6A, 0x62, 0xCB, 0x7B, 0xAE, 0xB5, 0x75, 0x7B, 0x8E, 0x73, 0x6D, 0x9C, 0xB3, 0x9C, 0xD3, 0x94, 0x72, 0x8C, 0x31, 0x7B, 0xEF, 0xA5, 0x34, 0x8C, 0x72, 0x84, 0x10, 0x8C, 0x71, 0xB5, 0xD7, 0xBE, 0x19, 0xB5, 0xFA, 0xAD, 0xD8, 0xD6, 0xD9, 0xE7, 0x37, 0xE7, 0x54, 0xCE, 0x8F, 0xD6, 0xCF, 0xD6, 0xF0, 0xCE, 0x8F, 0xC6, 0x4D, 0xB6, 0x2D, 0xC6, 0xD1, 0xB6, 0x6E, 0xAE, 0x09, 0xCE, 0xEA, 0xB6, 0x25, 0xAE, 0x26, 0xAE, 0x4C, 0xAE, 0x32, 0xBE, 0x56, 0xBE, 0x57, 0xD7, 0x19, 0xE7, 0x79, 0xD6, 0xD7, 0xC6, 0x76, 0xB6, 0x34, 0x8C, 0xB0, 0x9C, 0xD3, 0xC5, 0xD6, 0xB5, 0x75, 0x7B, 0xAE, 0x31, 0xE5, 0x7C, 0xCA, 0x7D, 0x07, 0x95, 0x8B, 0x9D, 0xEE, 0x6C, 0x69, 0x19, 0xC2, 0x11, 0x62, 0x21, 0xC4, 0x3A, 0xA7, 0x3A, 0x86, 0x2A, 0x25, 0x19, 0xA3, 0x21, 0xE4, 0x21, 0xC3, 0x32, 0x45, 0x2A, 0x23, 0x32, 0xA4, 0x43, 0x66, 0x32, 0xC4, 0x11, 0x41, 0x11, 0x42, 0x11, 0x62, 0x19, 0xA3, 0x19, 0x83, 0x11, 0x42, 0x11, 0x42, 0x2A, 0x46, 0x4B, 0x29, 0xC5, 0xB3, 0x8B, 0xEC, 0x83, 0xCC, 0x9C, 0x6E, 0x8C, 0x0D, 0x8C, 0x0D, 0x84, 0x0D, 0x94, 0x2E, 0x94, 0x4E, 0x62, 0xE9, 0x83, 0xAC, 0x94, 0x6F, 0x94, 0x6F, 0x94, 0x4E, 0x94, 0x2E, 0x9C, 0x8F, 0xAC, 0xF1, 0xAD, 0x11, 0xBD, 0x52, 0xBD, 0x72, 0xBD, 0x72, 0xC5, 0xB3, 0xC5, 0xB3, 0xCD, 0xB3, 0xDE, 0x55, 0xC5, 0x92, 0xA4, 0xCF, 0xD6, 0x34, 0xCD, 0xF3, 0xC5, 0xF3, 0xCE, 0x34, 0xD6, 0x55, 0xBD, 0xD4, 0x94, 0x90, 0xAD, 0x52, 0xD6, 0x76, 0xDE, 0x96, 0xDE, 0xB7, 0xBD, 0xB3, 0xD6, 0x76, 0xD6, 0x55, 0xC5, 0xD3, 0xCE, 0x14, 0xDE, 0x55, 0xD6, 0x34, 0xD6, 0x54, 0xD6, 0x34, 0xD6, 0x34, 0x9C, 0x8D, 0xA5, 0x0D, 0xA5, 0x4E, 0x84, 0x8A, 0x84, 0xAA, 0x7C, 0x69, 0x53, 0x66, 0x6C, 0x2A, 0xA5, 0xB0, 0x9C, 0xEF, 0x94, 0x6E, 0x94, 0x6D, 0x7C, 0x2A, 0xA5, 0x4F, 0x9D, 0x2F, 0xA5, 0x90, 0x84, 0xAC, 0x4B, 0x44, 0x5C, 0x04, 0x53, 0xE3, 0x6C, 0x87, 0x85, 0x09, 0x8D, 0x2C, 0xCE, 0xB5, 0x7B, 0xCA, 0x9C, 0x6D, 0xA4, 0xEF, 0x9C, 0xAE, 0x94, 0x4D, 0x94, 0x6E, 0x8C, 0x0E, 0xB5, 0x94, 0x7B, 0xAD, 0x73, 0x6C, 0x9C, 0xB1, 0x7B, 0xCD, 0x52, 0x88, 0x7B, 0xAD, 0xA4, 0xD0, 0x9C, 0xB0, 0x83, 0xCC, 0x73, 0x8B, 0x73, 0x4A, 0x6A, 0xE9, 0x5A, 0x88, 0x73, 0xAA, 0x8C, 0xAD, 0xB5, 0xD2, 0xAD, 0x92, 0xA5, 0x30, 0x63, 0x89, 0x74, 0x2B, 0x8D, 0x0E, 0x8D, 0x2E, 0x85, 0x0D, 0x85, 0x0D, 0x6B, 0xEA, 0x63, 0x68, 0x84, 0x8A, 0x84, 0xA9, 0x84, 0xA9, 0x95, 0x2C, 0x9D, 0x6E, 0xAD, 0x90, 0xAD, 0x91, 0x8C, 0x2D, 0x83, 0xEC, 0xC6, 0x35, 0xAD, 0xF3, 0x7C, 0xCC, 0x85, 0x0C, 0x8D, 0x2E, 0x95, 0x6F, 0x7C, 0xAC, 0x5B, 0xE9, 0x42, 0xE6, 0x4B, 0x26, 0x4B, 0x67, 0x53, 0xA8, 0x4B, 0x69, 0x84, 0xCF, 0xA5, 0xB2, 0x9D, 0x30, 0x9D, 0x10, 0x7C, 0x0E, 0x94, 0xF3, 0x9D, 0x54, 0x95, 0x70, 0x84, 0xEA, 0x64, 0x26, 0x5C, 0x06, 0x7D, 0x0A, 0x6C, 0x88, 0x64, 0x47, 0x4B, 0x84, 0x32, 0xE2, 0x3A, 0xE2, 0x6C, 0x48, 0x7C, 0xAB, 0x9D, 0xD0, 0xA6, 0x31, 0x9D, 0xD0, 0x9D, 0xCF, 0x9D, 0xEE, 0x85, 0x6B, 0x74, 0xE8, 0x64, 0x87, 0x74, 0xC9, 0xA6, 0x2F, 0x5C, 0x07, 0x43, 0x24, 0x43, 0x04, 0x5B, 0xE7, 0x6C, 0x49, 0x19, 0x61, 0x19, 0xA2, 0x95, 0x8F, 0xAE, 0x50, 0xAE, 0x51, 0xAE, 0x50, 0xAE, 0x71, 0x8D, 0x4C, 0x53, 0x05, 0x42, 0x85, 0x6B, 0xA9, 0x29, 0x62, 0x4A, 0x46, 0x6B, 0x69, 0x5B, 0x27, 0x3A, 0x85, 0x2A, 0x04, 0x2A, 0x04, 0x32, 0x45, 0x21, 0xC4, 0x19, 0x83, 0x3A, 0x86, 0x4B, 0x87, 0x53, 0xC7, 0x6C, 0xAA, 0x9D, 0xF0, 0x74, 0xAC, 0x3A, 0xC5, 0x2A, 0x83, 0x2A, 0x63, 0x22, 0x42, 0x22, 0x42, 0x32, 0xA3, 0x3A, 0xE4, 0x43, 0x46, 0x53, 0xE7, 0x7C, 0xEA, 0x53, 0xC5, 0x3B, 0x03, 0x3B, 0x24, 0x4B, 0x86, 0x3A, 0xC5, 0x9D, 0xF1, 0x9D, 0xF0, 0x8D, 0x6E, 0x8D, 0x4D, 0x6C, 0x49, 0x9D, 0x6E, 0x6B, 0xA8, 0x9D, 0x2D, 0x95, 0x0C, 0xB6, 0x10, 0xC6, 0x72, 0xAD, 0xB1, 0x5A, 0xC9, 0x62, 0x89, 0x6A, 0xC9, 0xA4, 0x91, 0x9C, 0x50, 0x5A, 0xCA, 0x83, 0xEF, 0x63, 0x2C, 0x94, 0x72, 0xC6, 0x38, 0xD6, 0x79, 0xB5, 0x75, 0xBD, 0xB6, 0xBD, 0xD6, 0xAD, 0x73, 0x6B, 0x2B, 0x6B, 0x2B, 0x62, 0xEB, 0x20, 0xE3, 0x39, 0xC7, 0x18, 0xC2, 0x4A, 0x48, 0x7B, 0xAE, 0x7B, 0xAE, 0x8C, 0x30, 0x94, 0x51, 0x83, 0xF0, 0x73, 0x4D, 0x6B, 0x4D, 0x42, 0x08, 0xA4, 0xF3, 0x8C, 0x30, 0x8C, 0x30, 0xAD, 0x55, 0xA4, 0xD4, 0x9C, 0xD3, 0x9C, 0x93, 0x6B, 0x4D, 0x7B, 0xF0, 0x9C, 0xB3, 0x94, 0x72, 0x94, 0x92, 0xA5, 0x14, 0xC6, 0x38, 0xB5, 0xD6, 0xDF, 0x18, 0xF7, 0x96, 0xEF, 0x32, 0xEF, 0x72, 0xDF, 0x0E, 0xD6, 0xAD, 0xEF, 0x71, 0xAD, 0x6B, 0xD6, 0xEE, 0xB6, 0x4D, 0xBE, 0xB1, 0xC6, 0xD0, 0xA5, 0xE8, 0xAE, 0x05, 0xA6, 0x04, 0x8D, 0x23, 0x95, 0x88, 0x95, 0x6D, 0xB6, 0x54, 0xBE, 0x96, 0xC6, 0x75, 0xD6, 0xD5, 0xE7, 0x97, 0xE7, 0x77, 0xB6, 0x32, 0xAD, 0xD4, 0xB5, 0xB6, 0xBD, 0xB6, 0xA5, 0x13, 0x63, 0x0C, 0x5B, 0x29, 0x95, 0x6D, 0x8D, 0x8A, 0x85, 0x27, 0x85, 0x49, 0x6C, 0x68, 0x19, 0xE2, 0x11, 0x82, 0x11, 0x62, 0x3A, 0xA7, 0x4B, 0x08, 0x32, 0x45, 0x19, 0xC3, 0x22, 0x04, 0x2A, 0x24, 0x21, 0xE3, 0x32, 0x64, 0x32, 0x84, 0x3B, 0x25, 0x22, 0x23, 0x11, 0x41, 0x11, 0x42, 0x11, 0x42, 0x21, 0xC4, 0x19, 0xA3, 0x11, 0x62, 0x21, 0xC4, 0x32, 0x66, 0x42, 0xE8, 0x9C, 0x6E, 0x83, 0x8A, 0x83, 0xAB, 0x7B, 0x8A, 0x6B, 0x29, 0x73, 0x4A, 0x8C, 0x2D, 0xAC, 0xF0, 0xBD, 0x52, 0xAC, 0xF0, 0xAC, 0xD0, 0xAC, 0xF1, 0xB5, 0x11, 0xAC, 0xF1, 0xA4, 0xAF, 0x94, 0x2E, 0xA4, 0xAF, 0xAC, 0xF0, 0xA4, 0xAF, 0x9C, 0x6E, 0xA4, 0xB0, 0xAC, 0xD0, 0xBD, 0x51, 0xC5, 0xB2, 0xE6, 0x76, 0xC5, 0x92, 0xAD, 0x10, 0xCD, 0xF3, 0xCD, 0xF3, 0xC5, 0xD3, 0xC5, 0xF3, 0xC5, 0xF4, 0xAD, 0x52, 0xA5, 0x12, 0xAD, 0x52, 0xC6, 0x15, 0xD6, 0x55, 0xDE, 0xB7, 0xDE, 0x96, 0xD6, 0x55, 0xDE, 0x96, 0xDE, 0x76, 0xCE, 0x34, 0xD6, 0x34, 0xCD, 0xF4, 0xC5, 0xD3, 0xBD, 0xB2, 0xC5, 0xD3, 0xA4, 0xAE, 0xA4, 0xEE, 0xA4, 0xEE, 0x9C, 0xEE, 0xA5, 0x0E, 0x9C, 0xEE, 0x6B, 0xA9, 0x4B, 0x06, 0x74, 0x2B, 0xB5, 0xB2, 0xB5, 0x31, 0xBD, 0x92, 0x9C, 0xEF, 0xBD, 0xF2, 0x9D, 0x0F, 0x6C, 0x2A, 0x43, 0x04, 0x43, 0x23, 0x4B, 0xA3, 0x53, 0xA4, 0x5B, 0xE6, 0x95, 0x4D, 0x84, 0x4C, 0xC6, 0x35, 0x6B, 0x29, 0xAD, 0x10, 0xAD, 0x10, 0x7B, 0xAB, 0x8C, 0x0D, 0x9C, 0xB0, 0xAD, 0x33, 0x84, 0x0E, 0x63, 0x0A, 0x94, 0x90, 0x94, 0x90, 0x62, 0xEA, 0x4A, 0x68, 0x5A, 0xC9, 0x94, 0x6F, 0xA5, 0x11, 0xAD, 0x51, 0x94, 0xAE, 0x94, 0x6E, 0x6B, 0x2A, 0x31, 0xA5, 0x5B, 0x49, 0x9D, 0x70, 0x84, 0xEF, 0x9D, 0x92, 0x94, 0xF0, 0x63, 0x69, 0x6B, 0x8A, 0x74, 0x2C, 0x63, 0xC9, 0x84, 0xED, 0x7C, 0xCC, 0x7C, 0x4B, 0x84, 0x8B, 0x7C, 0xA9, 0x84, 0xC8, 0x7C, 0xC8, 0x84, 0xEA, 0x95, 0x6D, 0xA5, 0xAF, 0xBE, 0x12, 0x5A, 0xE8, 0x84, 0x0E, 0xCE, 0xB7, 0xC6, 0xB5, 0x74, 0x49, 0x7C, 0xAA, 0x95, 0x2D, 0xBE, 0x73, 0x9D, 0x8E, 0x6C, 0x4A, 0x64, 0x2B, 0x64, 0x2B, 0x64, 0x2B, 0x85, 0x0D, 0x7C, 0xCE, 0x84, 0xEE, 0x8D, 0x2F, 0xA5, 0xB2, 0xAD, 0xD3, 0x84, 0x6F, 0x95, 0x12, 0xB6, 0x34, 0x85, 0x0B, 0x5B, 0xE4, 0x5B, 0xE5, 0x74, 0xE8, 0x64, 0x46, 0x4B, 0xA3, 0x43, 0x63, 0x32, 0xE2, 0x5C, 0x27, 0x53, 0xE5, 0x85, 0x2B, 0x8D, 0x4D, 0x9D, 0xF0, 0xA6, 0x11, 0xA6, 0x11, 0xA6, 0x31, 0x7C, 0xEA, 0x7D, 0x2A, 0x74, 0xE9, 0x74, 0xC9, 0x9D, 0xCE, 0x95, 0xAE, 0x74, 0xAA, 0x7D, 0x0B, 0x64, 0x28, 0x85, 0x4C, 0x64, 0x09, 0x19, 0x61, 0x21, 0xA3, 0x42, 0xE6, 0x3A, 0xA4, 0x42, 0xE5, 0x6C, 0x2A, 0xA6, 0x0F, 0x9D, 0xCE, 0x63, 0xE7, 0x4B, 0x25, 0x84, 0xCB, 0x42, 0xC5, 0x31, 0xE3, 0x4A, 0xC6, 0x29, 0xC2, 0x42, 0xA6, 0x32, 0x44, 0x2A, 0x04, 0x3A, 0xA7, 0x32, 0x66, 0x32, 0x45, 0x43, 0x07, 0x53, 0xA8, 0x2A, 0x63, 0x43, 0x05, 0x32, 0x85, 0x2A, 0x24, 0x3A, 0xA5, 0x22, 0x42, 0x22, 0x22, 0x22, 0x22, 0x2A, 0x83, 0x43, 0x25, 0x4B, 0xA6, 0x64, 0x69, 0x74, 0xCA, 0xAE, 0x50, 0x64, 0x47, 0x43, 0x44, 0x2A, 0xA2, 0x2A, 0x62, 0x2A, 0x43, 0x7C, 0xED, 0xAE, 0x93, 0x9D, 0xF1, 0xAE, 0x52, 0x84, 0xED, 0x7C, 0xAB, 0x95, 0x4D, 0x95, 0x6D, 0x95, 0x8E, 0xC7, 0x15, 0xA5, 0xD0, 0x8C, 0xCD, 0x73, 0x6B, 0x5A, 0x48, 0x49, 0xE7, 0x8B, 0xAE, 0xAC, 0xB1, 0x83, 0xAE, 0x5A, 0x8A, 0x52, 0x8A, 0x7B, 0xCE, 0x73, 0x8E, 0x9C, 0xD3, 0xD6, 0x99, 0xD6, 0xBA, 0xBD, 0xD7, 0x84, 0x0F, 0x4A, 0x68, 0x73, 0x6D, 0x6B, 0x0B, 0x29, 0x24, 0x29, 0x45, 0x10, 0x82, 0x31, 0x65, 0x62, 0xCA, 0x7B, 0xAE, 0x94, 0x72, 0xA4, 0xD3, 0xA4, 0xD3, 0x7B, 0xAE, 0x73, 0x4D, 0x73, 0x6D, 0x52, 0x6A, 0x9C, 0x92, 0x7B, 0xAE, 0x8C, 0x51, 0xA5, 0x14, 0x94, 0x72, 0x8C, 0x31, 0x84, 0x10, 0x94, 0x72, 0xAD, 0x55, 0xBD, 0x97, 0xC5, 0xF8, 0xAD, 0x55, 0xAD, 0x55, 0xAD, 0x74, 0xDE, 0xF5, 0xE7, 0x33, 0xEF, 0x72, 0xDF, 0x0F, 0xCE, 0x8C, 0xDF, 0x0E, 0xEF, 0x71, 0x8C, 0xA7, 0xC6, 0xAD, 0xAE, 0x2B, 0xBE, 0xB0, 0xAE, 0x4D, 0x9D, 0xC6, 0x9D, 0xA3, 0xAE, 0x46, 0xA5, 0xE8, 0xA6, 0x0B, 0xB6, 0x8F, 0xB6, 0x93, 0xAD, 0xF2, 0xCE, 0xF7, 0xC6, 0xB5, 0xB6, 0x51, 0xD6, 0xF2, 0xBE, 0x71, 0xA5, 0x92, 0xC6, 0x38, 0xBD, 0xB6, 0x8C, 0x71, 0x4A, 0x49, 0x74, 0x2D, 0xAE, 0x51, 0x9D, 0xED, 0x85, 0x27, 0x8D, 0xAA, 0x7D, 0x2A, 0x43, 0x24, 0x19, 0xC1, 0x11, 0x62, 0x42, 0xC7, 0x5B, 0xCA, 0x32, 0x66, 0x11, 0x21, 0x19, 0xC3, 0x19, 0xA3, 0x11, 0x41, 0x32, 0xA5, 0x22, 0x43, 0x32, 0xC4, 0x11, 0x61, 0x11, 0x22, 0x09, 0x22, 0x11, 0x22, 0x22, 0x04, 0x21, 0xE3, 0x19, 0xA3, 0x2A, 0x25, 0x3A, 0xA7, 0x53, 0x6A, 0x8B, 0xAB, 0x8B, 0xEC, 0x8B, 0xEC, 0x8B, 0xEC, 0x8C, 0x0C, 0x8B, 0xEC, 0x8B, 0xCC, 0x8B, 0xCB, 0x8B, 0xCC, 0x8B, 0xCC, 0x83, 0x8A, 0x7B, 0x6A, 0x7B, 0x6A, 0x7B, 0x6A, 0x83, 0xAB, 0x7B, 0x6A, 0x83, 0x8B, 0x8B, 0xCB, 0x8B, 0xEC, 0x8B, 0xCC, 0x83, 0xAB, 0x9C, 0x4D, 0xB5, 0x10, 0xCD, 0xD3, 0xD5, 0xF3, 0xBD, 0x30, 0xAC, 0xAE, 0xB5, 0x50, 0xC5, 0xB2, 0xC5, 0xD3, 0xC5, 0xF4, 0xBD, 0xB3, 0xAD, 0x32, 0xAD, 0x53, 0xAD, 0x52, 0xB5, 0x93, 0xBD, 0xD3, 0xD6, 0x55, 0xDE, 0xD7, 0xDE, 0xB7, 0xDE, 0x96, 0xD6, 0x55, 0xC5, 0xF3, 0xBD, 0xB3, 0xBD, 0x93, 0xB5, 0x72, 0xAD, 0x31, 0xAD, 0x31, 0xA4, 0xCF, 0xA4, 0xCE, 0xA4, 0xEF, 0xAD, 0x10, 0xA4, 0xCF, 0xAD, 0x30, 0x84, 0x0B, 0x3A, 0xA4, 0x3A, 0x84, 0x94, 0xCF, 0xBD, 0xB3, 0xBD, 0x72, 0xBD, 0xB3, 0xC5, 0xF3, 0xAD, 0x71, 0x42, 0xA4, 0x3A, 0xC3, 0x43, 0x23, 0x4B, 0x85, 0x5B, 0xA7, 0x9D, 0x2F, 0xBD, 0xF3, 0x83, 0xEC, 0xAD, 0x52, 0x5A, 0xA8, 0xAD, 0x10, 0xA4, 0xAE, 0x8C, 0x0D, 0x9C, 0xB0, 0x9C, 0xB0, 0xA4, 0xD1, 0x5A, 0xA9, 0x8C, 0x4F, 0x9C, 0xD1, 0x8C, 0x2F, 0x5A, 0xEA, 0xA5, 0x32, 0xA5, 0x71, 0x94, 0xAE, 0x94, 0xAE, 0xAD, 0xB1, 0xAD, 0x90, 0x94, 0x8E, 0x6B, 0x0A, 0x31, 0xA6, 0x3A, 0x26, 0x9D, 0x91, 0x7C, 0x8D, 0x6C, 0x6C, 0x5B, 0x89, 0x74, 0x0C, 0x5B, 0x29, 0x7C, 0x4D, 0x6B, 0xEB, 0x7C, 0x8B, 0x74, 0x69, 0x7C, 0x89, 0x7C, 0xA9, 0x7C, 0x69, 0x7C, 0x88, 0x7C, 0xA8, 0x84, 0xEA, 0x9D, 0x8E, 0xCE, 0xF5, 0xD7, 0x16, 0xBD, 0xF4, 0xAD, 0x73, 0x8C, 0xCF, 0x63, 0xA9, 0x74, 0x49, 0x95, 0x0C, 0xA5, 0x4E, 0xB5, 0xB1, 0x8D, 0x0D, 0x7C, 0xCC, 0x74, 0x8D, 0x7C, 0xCE, 0x74, 0x6C, 0x64, 0x2A, 0x6C, 0x6B, 0x74, 0x8C, 0x7C, 0xAD, 0x8D, 0x2F, 0x7C, 0xAD, 0x74, 0x0C, 0x95, 0x4F, 0x8D, 0x4C, 0x5C, 0x05, 0x5C, 0x25, 0x7D, 0x09, 0x53, 0xE4, 0x53, 0xC4, 0x64, 0x27, 0x74, 0x8B, 0x63, 0xC8, 0x6C, 0xA8, 0x4B, 0xA4, 0x64, 0x27, 0x74, 0xCA, 0x85, 0x2C, 0x95, 0x8F, 0x9D, 0xF0, 0x95, 0x8E, 0x7D, 0x0A, 0x7D, 0x2A, 0x7D, 0x0A, 0x8D, 0x8D, 0xAE, 0x31, 0x95, 0xAF, 0x8D, 0x6D, 0xAE, 0x71, 0x7C, 0xCA, 0x8D, 0x8D, 0x5B, 0xA8, 0x19, 0x62, 0x19, 0xA3, 0x21, 0xC3, 0x32, 0x44, 0x32, 0x24, 0x2A, 0x03, 0x53, 0x67, 0x7C, 0xCA, 0x5B, 0xE6, 0x4B, 0x64, 0x5C, 0x07, 0x42, 0xE4, 0x53, 0x66, 0x64, 0x08, 0x4B, 0x25, 0x4B, 0x26, 0x32, 0x64, 0x2A, 0x24, 0x3A, 0xC7, 0x42, 0xC7, 0x42, 0xE7, 0x43, 0x06, 0x32, 0x64, 0x2A, 0x23, 0x3A, 0xC5, 0x43, 0x06, 0x5B, 0xCA, 0x5B, 0xCA, 0x2A, 0x43, 0x22, 0x22, 0x2A, 0x42, 0x22, 0x22, 0x32, 0xA3, 0x53, 0xE7, 0x5C, 0x27, 0x85, 0x4D, 0xB6, 0x72, 0x6C, 0x89, 0x64, 0x68, 0x53, 0xC6, 0x4B, 0x85, 0x4B, 0x66, 0x4B, 0x87, 0x8D, 0xB0, 0xA6, 0x52, 0x9D, 0xF1, 0x8D, 0x4E, 0x85, 0x0D, 0xB6, 0x71, 0x85, 0x2D, 0xA6, 0x32, 0xB6, 0x93, 0x7C, 0xAB, 0x3A, 0x04, 0x5A, 0x68, 0x41, 0xA6, 0x52, 0x48, 0x7B, 0x4B, 0xAC, 0x70, 0xAC, 0xB1, 0x7B, 0x8D, 0x52, 0xAA, 0x73, 0x8E, 0x5A, 0xAA, 0x6B, 0x4D, 0xBD, 0xB6, 0x8C, 0x71, 0x5A, 0xCB, 0x4A, 0x49, 0x42, 0x28, 0x5A, 0xCA, 0x5A, 0xAA, 0x84, 0x0E, 0x73, 0x8C, 0x18, 0xA3, 0x18, 0xC3, 0x39, 0x86, 0x62, 0xCB, 0x84, 0x10, 0x9C, 0xD2, 0x9C, 0xD2, 0x7B, 0xCE, 0x6A, 0xEB, 0x6A, 0xEB, 0x5A, 0x8A, 0x83, 0xEF, 0xAD, 0x34, 0x6B, 0x4D, 0xA4, 0xF4, 0x9C, 0xB3, 0xA4, 0xF4, 0xB5, 0x56, 0xB5, 0x56, 0x83, 0xF0, 0x83, 0xF0, 0x94, 0x92, 0x94, 0x72, 0x84, 0x10, 0x6B, 0x4D, 0x6B, 0x6B, 0x84, 0x2B, 0xAD, 0xAE, 0xBE, 0x4D, 0xAD, 0xEA, 0xCE, 0xED, 0xC6, 0xAC, 0x7C, 0xA4, 0x85, 0x26, 0x8D, 0x47, 0x9D, 0xCA, 0xA6, 0x0A, 0x85, 0x03, 0x8D, 0x81, 0xAE, 0x25, 0xB6, 0x69, 0xB6, 0x6A, 0xAE, 0x4B, 0x9D, 0xED, 0x9D, 0xF0, 0xCE, 0xF6, 0xC6, 0xB4, 0xB6, 0x70, 0xBE, 0x8F, 0xDF, 0x54, 0xB5, 0xF4, 0xCE, 0x58, 0xAD, 0x55, 0x73, 0x8E, 0x31, 0xC6, 0x7C, 0x8C, 0x95, 0xCE, 0x95, 0xAB, 0x85, 0x48, 0x6C, 0x66, 0x5C, 0x06, 0x74, 0xC9, 0x43, 0x25, 0x19, 0x82, 0x3A, 0x87, 0x95, 0x51, 0x42, 0xC8, 0x19, 0x83, 0x2A, 0x44, 0x42, 0xE6, 0x19, 0x82, 0x3A, 0xC6, 0x19, 0xA2, 0x21, 0xE3, 0x11, 0x61, 0x11, 0x22, 0x09, 0x02, 0x09, 0x22, 0x21, 0xE4, 0x22, 0x04, 0x2A, 0x25, 0x4B, 0x28, 0x4B, 0x49, 0x5B, 0xEB, 0x7B, 0x8B, 0x7B, 0x8B, 0x7B, 0x8B, 0x7B, 0x6A, 0x83, 0xAB, 0x8B, 0xEC, 0x94, 0x0D, 0x9C, 0x4E, 0x9C, 0x4E, 0x9C, 0x4E, 0x9C, 0x8F, 0xA4, 0x8F, 0xA4, 0x8F, 0x94, 0x0C, 0x94, 0x0C, 0xA4, 0x8E, 0xAC, 0xD0, 0xAC, 0xD0, 0xA4, 0x8E, 0xA4, 0x6E, 0xA4, 0x8F, 0x9C, 0x6E, 0x9C, 0x2D, 0x9C, 0x4D, 0xA4, 0x8D, 0xA4, 0x6D, 0x9C, 0x4D, 0x94, 0x2C, 0x94, 0x0C, 0x8C, 0x0C, 0x94, 0x2C, 0x94, 0x4D, 0x9C, 0x8E, 0x9C, 0x6E, 0x9C, 0x6E, 0x94, 0x8F, 0xA4, 0xD0, 0xAD, 0x31, 0xBD, 0xB3, 0xCE, 0x14, 0xCD, 0xF4, 0xCE, 0x13, 0xCD, 0xF3, 0xC5, 0xB3, 0xC5, 0xD3, 0xBD, 0xB2, 0xAD, 0x10, 0xBD, 0x72, 0xAC, 0xF0, 0xB5, 0x30, 0xB5, 0x51, 0xB5, 0x51, 0xA4, 0xEF, 0xA5, 0x0F, 0x9C, 0xCE, 0x3A, 0x84, 0x42, 0xE5, 0x5B, 0x28, 0xAD, 0x51, 0xD6, 0x76, 0xBD, 0xD3, 0xBD, 0xF3, 0x9D, 0x0F, 0x42, 0xC3, 0x3B, 0x03, 0x53, 0x85, 0x63, 0xC9, 0xAD, 0x71, 0xCE, 0x55, 0xCE, 0x35, 0x8C, 0x0E, 0xAD, 0x32, 0x62, 0xEA, 0x9C, 0x8F, 0x8C, 0x0D, 0x8C, 0x2E, 0x94, 0x6F, 0x94, 0x4E, 0x7B, 0xAC, 0x83, 0xED, 0x9C, 0xB0, 0x9C, 0x90, 0x73, 0x4B, 0x4A, 0x68, 0x7C, 0x2D, 0xA5, 0xD0, 0x8D, 0x0C, 0xA5, 0xAF, 0xC6, 0x92, 0xC6, 0x72, 0x73, 0xAA, 0x52, 0x68, 0x39, 0xA6, 0x3A, 0x27, 0xBE, 0x75, 0x9D, 0x70, 0x4B, 0x27, 0x5B, 0xA9, 0x63, 0xAA, 0x4A, 0xA7, 0x84, 0x8E, 0x84, 0x8D, 0x95, 0x0E, 0x9D, 0x6E, 0x64, 0x06, 0x6C, 0x27, 0x6B, 0xE9, 0x6B, 0xCA, 0x74, 0x0A, 0x84, 0xAC, 0xB6, 0x13, 0xD7, 0x17, 0xCE, 0xB6, 0xB5, 0xF2, 0x6B, 0xEA, 0x63, 0xE9, 0x53, 0x47, 0x53, 0x27, 0x6B, 0x89, 0x9C, 0xEF, 0x73, 0xAA, 0xAD, 0xD2, 0x84, 0xCE, 0x85, 0x0F, 0x7C, 0xCD, 0x6C, 0x4B, 0x6C, 0x2A, 0x74, 0x6B, 0x8D, 0x2E, 0x8D, 0x4F, 0x85, 0x2F, 0x85, 0x0E, 0x5B, 0xC9, 0x74, 0xCA, 0x5C, 0x25, 0x53, 0xC5, 0x85, 0x4B, 0x6C, 0x47, 0x95, 0x8E, 0x7C, 0xAC, 0xA5, 0xF0, 0xB6, 0x32, 0x8D, 0x0D, 0x6C, 0x47, 0x64, 0x46, 0x5C, 0x05, 0x64, 0x48, 0x8D, 0x8D, 0x9E, 0x10, 0x8D, 0x8E, 0x6C, 0x89, 0x74, 0xE9, 0x85, 0x4B, 0x85, 0x4C, 0x9D, 0xEF, 0xA6, 0x31, 0x95, 0xAE, 0x9D, 0xCF, 0x9D, 0xCF, 0x5B, 0xC7, 0x3A, 0xE5, 0x19, 0xA2, 0x21, 0xA3, 0x21, 0xC3, 0x19, 0xA3, 0x32, 0x65, 0x3A, 0xC6, 0x2A, 0x24, 0x21, 0xE2, 0x53, 0xA6, 0x43, 0x44, 0x43, 0x24, 0x5B, 0xE7, 0x43, 0x04, 0x3A, 0xC3, 0x5C, 0x07, 0x6C, 0x68, 0x4B, 0x46, 0x2A, 0x03, 0x32, 0x65, 0x43, 0x08, 0x53, 0x49, 0x4B, 0x48, 0x4B, 0x47, 0x4B, 0x67, 0x43, 0x46, 0x3B, 0x25, 0x3B, 0x05, 0x4B, 0x67, 0x4B, 0x67, 0x3A, 0xC5, 0x2A, 0x43, 0x3A, 0xC5, 0x22, 0x02, 0x22, 0x22, 0x6C, 0xAA, 0x6C, 0xA9, 0x85, 0x4D, 0x9D, 0xF0, 0x74, 0xCA, 0x7D, 0x0A, 0x5C, 0x07, 0x4B, 0x85, 0x43, 0x65, 0x32, 0xE4, 0x3A, 0xE5, 0x64, 0x2A, 0x85, 0x4E, 0x64, 0x49, 0x53, 0x67, 0x8D, 0x6E, 0x8D, 0x8F, 0xBE, 0xD4, 0x95, 0x6F, 0x8D, 0x0D, 0x7C, 0x0A, 0x73, 0x6A, 0x52, 0x46, 0x49, 0xE7, 0x72, 0xEA, 0xA4, 0x0D, 0x72, 0xEA, 0x83, 0xAD, 0x4A, 0x48, 0x62, 0xEB, 0x52, 0x6A, 0x62, 0xEC, 0x83, 0xEF, 0x73, 0x8E, 0x6B, 0x4D, 0x6B, 0x2C, 0x94, 0x71, 0xA5, 0x13, 0x94, 0x71, 0x94, 0xB0, 0x7B, 0xCD, 0x20, 0xE4, 0x18, 0xC3, 0x18, 0xC3, 0x39, 0x86, 0x5A, 0xAA, 0x7B, 0xCE, 0x83, 0xEF, 0x63, 0x0C, 0x7B, 0x8E, 0x62, 0xEB, 0x5A, 0x8A, 0x39, 0xC7, 0x9C, 0xB3, 0xBD, 0x75, 0xBD, 0x96, 0xA4, 0xF4, 0x9C, 0xB3, 0x9C, 0xD3, 0x94, 0x72, 0x94, 0x72, 0xAD, 0x55, 0xAD, 0x55, 0xBD, 0xF7, 0xCE, 0x59, 0x7B, 0xCF, 0x62, 0xEB, 0x6B, 0x2B, 0x7C, 0x0C, 0x8D, 0x0C, 0x9D, 0xAB, 0xB6, 0x6C, 0xA5, 0xE8, 0x64, 0x41, 0x64, 0x41, 0x6C, 0x82, 0x85, 0x26, 0xBE, 0xCF, 0x8D, 0x68, 0x8D, 0x63, 0x9D, 0xC3, 0xA5, 0xE5, 0xA6, 0x06, 0x9D, 0xE6, 0x95, 0xC9, 0xA6, 0x0F, 0xBE, 0x93, 0xC6, 0xD2, 0xA6, 0x0D, 0xAE, 0x4E, 0xBE, 0x93, 0xBE, 0x36, 0xC6, 0x18, 0xB5, 0x96, 0x73, 0xAF, 0x3A, 0x05, 0x84, 0xE9, 0x7D, 0x07, 0x85, 0x68, 0x6C, 0x87, 0x32, 0xC2, 0x2A, 0x82, 0x4B, 0x85, 0x3A, 0xE4, 0x19, 0xC2, 0x4B, 0x08, 0x8D, 0x31, 0x32, 0x45, 0x21, 0xC3, 0x53, 0x88, 0x53, 0x87, 0x2A, 0x23, 0x3A, 0x85, 0x19, 0x82, 0x2A, 0x04, 0x2A, 0x44, 0x3A, 0x86, 0x42, 0xC7, 0x5B, 0xAA, 0x43, 0x28, 0x3A, 0xE7, 0x53, 0x89, 0x5B, 0xEA, 0x4B, 0x48, 0x5B, 0xEB, 0x5A, 0xCA, 0x5A, 0xC9, 0x62, 0xEA, 0x6B, 0x0A, 0x73, 0x4B, 0x83, 0xCC, 0x83, 0xED, 0x94, 0x4E, 0x9C, 0x8F, 0xA4, 0xF0, 0xBD, 0x93, 0xB5, 0x72, 0xAC, 0xF0, 0x94, 0x4D, 0x9C, 0x4E, 0xAC, 0xF0, 0xA4, 0xAF, 0xA4, 0xD0, 0xA4, 0xD0, 0xAC, 0xF0, 0xB5, 0x11, 0xBD, 0x72, 0xB5, 0x31, 0xBD, 0x51, 0xDE, 0x55, 0xDE, 0x35, 0xCD, 0xF3, 0xCD, 0xD3, 0xC5, 0x71, 0xBD, 0x51, 0xB5, 0x31, 0xB5, 0x10, 0xAC, 0xF0, 0xB5, 0x10, 0xB5, 0x31, 0xAC, 0xF0, 0x9C, 0x8E, 0x94, 0x4E, 0x9C, 0xAF, 0xAC, 0xEF, 0xAC, 0xCF, 0xAC, 0xEF, 0xAC, 0xCF, 0xAC, 0xCF, 0xB5, 0x10, 0xB5, 0x51, 0xB5, 0x51, 0xB5, 0x30, 0xB5, 0x10, 0xB5, 0x30, 0xAC, 0xF0, 0x94, 0x4D, 0x94, 0x4D, 0x9C, 0x8E, 0xAD, 0x30, 0x63, 0x48, 0x42, 0xA5, 0x53, 0x06, 0x73, 0xEB, 0xB5, 0xB3, 0x5B, 0x48, 0x4B, 0x47, 0x53, 0x86, 0x4B, 0x44, 0x43, 0x24, 0x6C, 0x09, 0xB5, 0xB2, 0xCE, 0x35, 0xCE, 0x15, 0xCE, 0x14, 0x9C, 0x8F, 0xA4, 0xF1, 0x7B, 0xAC, 0x83, 0xCD, 0x94, 0x4D, 0x8C, 0x4E, 0x8C, 0x4E, 0x9C, 0x8F, 0x9C, 0xB0, 0xAD, 0x11, 0xAD, 0x32, 0x9C, 0x90, 0x73, 0x6C, 0x42, 0x27, 0x42, 0x88, 0x8D, 0x2E, 0x95, 0x6D, 0xA5, 0xEF, 0xC6, 0xD3, 0xAD, 0xAF, 0x52, 0xA7, 0x52, 0xA8, 0x7C, 0x0D, 0xAD, 0xB3, 0xC6, 0xF6, 0xB6, 0x53, 0x74, 0x4C, 0xA5, 0xD2, 0x84, 0x8D, 0x73, 0xEB, 0x84, 0x6D, 0x8C, 0xCE, 0x9D, 0x2F, 0x9D, 0x2D, 0x6C, 0x47, 0x6B, 0xE8, 0x7C, 0x0B, 0x73, 0xAB, 0x6B, 0x8B, 0x8C, 0xAE, 0xDF, 0x59, 0xB6, 0x13, 0x7C, 0x8D, 0x7C, 0x6B, 0x5B, 0xA8, 0x4B, 0x46, 0x74, 0x4B, 0x6B, 0xCA, 0x9D, 0x30, 0xE7, 0x37, 0xAD, 0x70, 0xC6, 0x74, 0x9D, 0x70, 0xAD, 0xF2, 0x9D, 0x6F, 0xAD, 0xF1, 0x9D, 0x90, 0x74, 0x6B, 0x8D, 0x0E, 0x63, 0xEA, 0x74, 0x8C, 0x74, 0xAB, 0x6C, 0x89, 0x5C, 0x26, 0x6C, 0x87, 0x95, 0x8C, 0x9D, 0x8D, 0x63, 0xE7, 0xAD, 0xF0, 0x7C, 0x4B, 0x95, 0x0E, 0xAD, 0xF1, 0x95, 0x4D, 0x6C, 0x68, 0x4B, 0xC4, 0x4B, 0x84, 0x7D, 0x2B, 0x85, 0x4D, 0x53, 0xA7, 0x3A, 0xE4, 0x3B, 0x24, 0x64, 0x68, 0x85, 0x6B, 0x95, 0xCE, 0xA6, 0x10, 0xAE, 0x51, 0x95, 0xAE, 0x85, 0x0C, 0x53, 0xA7, 0x32, 0xA4, 0x21, 0xE3, 0x11, 0x61, 0x21, 0xE3, 0x21, 0xE3, 0x21, 0xE3, 0x3A, 0x85, 0x3A, 0xC5, 0x2A, 0x23, 0x21, 0xE2, 0x5C, 0x27, 0x53, 0xC5, 0x43, 0x24, 0x5C, 0x07, 0x64, 0x28, 0x53, 0xC6, 0x53, 0xC6, 0x64, 0x48, 0x3A, 0xA4, 0x21, 0xC3, 0x32, 0x65, 0x4B, 0x27, 0x53, 0x89, 0x4B, 0x68, 0x6C, 0x6B, 0x64, 0x4A, 0x5C, 0x08, 0x5B, 0xE8, 0x5C, 0x08, 0x74, 0xAB, 0x7C, 0xEC, 0x6C, 0x6A, 0x63, 0xE8, 0x53, 0x87, 0x42, 0xC5, 0x2A, 0x43, 0x7D, 0x0D, 0x95, 0xCF, 0x8D, 0x8E, 0x9D, 0xF0, 0x85, 0x2C, 0x9D, 0xEF, 0x64, 0x28, 0x5C, 0x07, 0x64, 0x68, 0x53, 0xA6, 0x4B, 0x87, 0x64, 0x6A, 0x85, 0x6D, 0x6C, 0x69, 0x3B, 0x05, 0x6C, 0x8B, 0xB6, 0xB4, 0xB6, 0xB4, 0x74, 0x6B, 0x53, 0x86, 0x7C, 0x6A, 0x7B, 0xCA, 0x73, 0xCA, 0x52, 0x66, 0x72, 0xC9, 0x9B, 0xAC, 0x7A, 0xEA, 0x7B, 0x2B, 0x5A, 0xAA, 0x6B, 0x2C, 0x7B, 0xAE, 0x94, 0x51, 0x9C, 0xB2, 0x7B, 0xAE, 0x83, 0xEF, 0xAD, 0x34, 0xC6, 0x18, 0xCE, 0x18, 0xC6, 0x17, 0xC6, 0x18, 0xC5, 0xD7, 0x7B, 0xAF, 0x39, 0x87, 0x29, 0x25, 0x20, 0xE4, 0x39, 0x86, 0x62, 0xCA, 0x6B, 0x0C, 0x73, 0x4C, 0x83, 0xAE, 0x6B, 0x2C, 0x73, 0x6D, 0x62, 0xCB, 0x8C, 0x10, 0xDE, 0x79, 0xD6, 0x38, 0x9C, 0x92, 0x8C, 0x31, 0xA4, 0xF4, 0xB5, 0x76, 0xBD, 0xB7, 0xBD, 0xD8, 0xCE, 0x59, 0xC6, 0x38, 0xCE, 0x38, 0x8C, 0x51, 0x84, 0x10, 0x6B, 0x2B, 0x63, 0x4B, 0x4A, 0xE8, 0x84, 0xED, 0xA6, 0x2E, 0xA5, 0xEB, 0x64, 0x41, 0x6C, 0x82, 0x74, 0xE3, 0x8D, 0x67, 0xCF, 0x32, 0x95, 0xAD, 0x85, 0x26, 0x9D, 0xC5, 0x9D, 0xC4, 0x8D, 0x62, 0x95, 0x83, 0xA6, 0x08, 0xAE, 0x6E, 0xB6, 0x50, 0xBE, 0x8F, 0xA5, 0xE9, 0x9D, 0xEB, 0xA5, 0xF1, 0xBE, 0x37, 0xC6, 0x38, 0xA5, 0x55, 0x63, 0x2C, 0x4A, 0xE6, 0x85, 0x28, 0x75, 0x05, 0x64, 0x85, 0x32, 0xE1, 0x2A, 0x61, 0x3A, 0xE4, 0x53, 0x86, 0x19, 0xC1, 0x32, 0x64, 0x53, 0x89, 0x5B, 0x8A, 0x32, 0x45, 0x19, 0x82, 0x42, 0xE5, 0x21, 0xE2, 0x2A, 0x23, 0x2A, 0x23, 0x21, 0xE3, 0x42, 0xE6, 0x5B, 0xE9, 0x5C, 0x09, 0x4B, 0x87, 0x4B, 0x87, 0x4B, 0x87, 0x43, 0x47, 0x43, 0x47, 0x43, 0x26, 0x32, 0xA5, 0x43, 0x08, 0x7B, 0xAD, 0x73, 0x6C, 0x63, 0x0B, 0x73, 0x6C, 0x7B, 0xCD, 0x94, 0x4F, 0x9C, 0x90, 0x94, 0x4F, 0x83, 0xCD, 0x83, 0xCD, 0x84, 0x0D, 0x7B, 0xCD, 0x73, 0x8B, 0x94, 0x2D, 0x94, 0x0D, 0x94, 0x2D, 0x94, 0x4E, 0x8C, 0x4E, 0x83, 0xED, 0x9C, 0x90, 0xA4, 0xF1, 0xB5, 0x73, 0xBD, 0xB3, 0xCD, 0xF4, 0xCD, 0xF4, 0xC5, 0xB2, 0xD6, 0x14, 0xCD, 0xD3, 0xBD, 0x92, 0xBD, 0x93, 0xC5, 0xF4, 0xCD, 0xF4, 0xD6, 0x35, 0xD6, 0x35, 0xDE, 0x55, 0xDE, 0x55, 0xDE, 0x55, 0xA4, 0xAF, 0xBD, 0x72, 0xCD, 0xF4, 0xA4, 0x8E, 0xAC, 0xF0, 0xB5, 0x10, 0xB5, 0x31, 0xB5, 0x30, 0xAC, 0xCF, 0xB5, 0x10, 0xBD, 0x92, 0xC5, 0xB3, 0xC5, 0xB3, 0xBD, 0x92, 0xCD, 0xD3, 0xC5, 0xB3, 0xC5, 0xB3, 0xBD, 0x71, 0xAC, 0xEF, 0x63, 0x48, 0x42, 0xA5, 0x5B, 0x89, 0x7C, 0x4D, 0x6C, 0x0B, 0x53, 0xA7, 0x43, 0x45, 0x4B, 0x45, 0x53, 0x66, 0x9D, 0x4E, 0xAD, 0x0F, 0x9C, 0xAE, 0x9C, 0x6E, 0x94, 0x6E, 0x8C, 0x4E, 0x8C, 0x2E, 0x94, 0x6F, 0x6B, 0x6A, 0xCE, 0xB5, 0xC6, 0x74, 0x9C, 0xEF, 0xBD, 0xD2, 0x9C, 0xAE, 0x94, 0x4E, 0x94, 0x4E, 0x94, 0x4D, 0x7B, 0xAC, 0x6B, 0x2A, 0x62, 0xE9, 0x5B, 0x09, 0x95, 0x0D, 0x9D, 0x6D, 0xBE, 0xB3, 0xAE, 0x32, 0x8C, 0xCF, 0xBE, 0x74, 0xC6, 0xF4, 0xC6, 0xD4, 0xB6, 0x52, 0xB6, 0x73, 0x74, 0x6C, 0x7C, 0xAD, 0x6B, 0xCA, 0x63, 0xAA, 0x7C, 0x4C, 0x84, 0x8C, 0x94, 0xED, 0x8C, 0xEC, 0x74, 0x68, 0x84, 0xCB, 0xA5, 0x30, 0x84, 0x2D, 0x6B, 0x8B, 0xD6, 0xD7, 0xDF, 0x59, 0x7C, 0x8D, 0x6C, 0x2A, 0x74, 0x6A, 0x7C, 0xAB, 0x74, 0x8B, 0x7C, 0x6C, 0x6B, 0xA9, 0xB6, 0x13, 0xCE, 0xB5, 0xBE, 0x74, 0xBE, 0x54, 0xAD, 0x70, 0xC6, 0x32, 0xD6, 0xD5, 0x8C, 0xED, 0x6C, 0x09, 0x53, 0xA7, 0x74, 0x8B, 0x74, 0x8B, 0x32, 0x83, 0x3A, 0xE4, 0x6C, 0x88, 0x53, 0xE4, 0x64, 0x27, 0x74, 0x29, 0x9D, 0x4E, 0x74, 0x69, 0x84, 0xCB, 0x6B, 0xEA, 0x84, 0xAF, 0xAD, 0xB2, 0x9D, 0x71, 0x74, 0x4B, 0x3B, 0x23, 0x4B, 0xA5, 0x64, 0x47, 0x2A, 0x81, 0x19, 0xE1, 0x22, 0x02, 0x3A, 0xE4, 0x64, 0x68, 0x95, 0xAD, 0xA6, 0x10, 0xAE, 0x51, 0x9D, 0xF0, 0x53, 0x88, 0x19, 0xC2, 0x22, 0x03, 0x2A, 0x44, 0x53, 0xA8, 0x43, 0x06, 0x3A, 0xE5, 0x32, 0xA4, 0x53, 0x87, 0x63, 0xE9, 0x43, 0x05, 0x43, 0x26, 0x2A, 0x42, 0x53, 0xC7, 0x5C, 0x26, 0x4B, 0x64, 0x64, 0x27, 0x7C, 0xEA, 0x6C, 0x69, 0x43, 0x45, 0x6C, 0xA9, 0x42, 0xE5, 0x19, 0xA2, 0x32, 0x65, 0x3A, 0xC5, 0x43, 0x06, 0x53, 0xA9, 0x9D, 0xF1, 0x8D, 0x6F, 0x85, 0x2D, 0x85, 0x4E, 0x8D, 0x8F, 0x9E, 0x11, 0x53, 0x88, 0x4B, 0x66, 0x5B, 0xE8, 0x3A, 0xE4, 0x2A, 0x23, 0x3A, 0xA4, 0x64, 0x69, 0x95, 0xCF, 0x95, 0xAF, 0xA6, 0x31, 0x7D, 0x0C, 0x7C, 0xEB, 0x4B, 0xA6, 0x95, 0xAE, 0x6C, 0x68, 0x5C, 0x47, 0x6C, 0xA9, 0x7D, 0x0B, 0x85, 0x6C, 0x8D, 0x8D, 0x95, 0x8D, 0x6C, 0x8A, 0x8D, 0x4E, 0xAE, 0x52, 0x6C, 0x4A, 0x6C, 0x49, 0x95, 0x6D, 0x63, 0x68, 0x5B, 0x47, 0x63, 0x68, 0x83, 0x69, 0x83, 0x09, 0x6A, 0xA8, 0x62, 0x89, 0x83, 0xCF, 0x94, 0x91, 0x9C, 0xB2, 0x94, 0x92, 0x8C, 0x30, 0x83, 0xEF, 0x9C, 0xB2, 0xA4, 0xD3, 0xBD, 0xB6, 0xBD, 0xB6, 0xAD, 0x34, 0xAD, 0x14, 0xCE, 0x38, 0xD6, 0x99, 0x9C, 0x92, 0x83, 0xAF, 0x5A, 0xAB, 0x20, 0xE4, 0x31, 0x65, 0x5A, 0x8A, 0x73, 0x6D, 0x73, 0x6D, 0x83, 0xAE, 0x73, 0x2C, 0x6B, 0x0C, 0x94, 0x72, 0xD6, 0x58, 0xDE, 0x79, 0xA4, 0xD3, 0xAD, 0x14, 0xAD, 0x55, 0xB5, 0x76, 0xB5, 0x96, 0xD6, 0x9A, 0xDE, 0xBB, 0x9C, 0xD3, 0x73, 0x8E, 0x73, 0x8E, 0x94, 0x71, 0x8C, 0x30, 0x73, 0x8D, 0x63, 0x4B, 0x84, 0xAD, 0x8D, 0x4D, 0x9D, 0xCC, 0x74, 0xC5, 0x74, 0xC2, 0x85, 0x44, 0x9D, 0xE9, 0xB6, 0x71, 0xCF, 0x35, 0x95, 0xAE, 0x95, 0xA8, 0x8D, 0x64, 0x7D, 0x00, 0x85, 0x42, 0x9D, 0xC7, 0xA6, 0x0B, 0xAE, 0x4D, 0xB6, 0x6D, 0xAE, 0x49, 0x95, 0x88, 0xAD, 0xD1, 0xC6, 0x58, 0xC6, 0x38, 0x9D, 0x14, 0x42, 0x49, 0x5B, 0x68, 0x85, 0x48, 0x74, 0xE5, 0x53, 0xE3, 0x32, 0xC1, 0x2A, 0x61, 0x74, 0x8A, 0x85, 0x4B, 0x2A, 0x41, 0x3A, 0xA4, 0x7C, 0xCD, 0xAE, 0x12, 0x5B, 0xAA, 0x21, 0xC3, 0x74, 0x8A, 0x53, 0x66, 0x4B, 0x46, 0x53, 0x68, 0x64, 0x0A, 0x5B, 0xE9, 0x43, 0x46, 0x32, 0xC4, 0x2A, 0x83, 0x2A, 0x63, 0x4B, 0x67, 0x4B, 0x87, 0x53, 0xE8, 0x4B, 0x87, 0x2A, 0x63, 0x32, 0x86, 0xB5, 0x53, 0xA4, 0xF2, 0x83, 0xEE, 0x94, 0x6F, 0xAD, 0x32, 0xC5, 0xD4, 0xCD, 0xF5, 0xC5, 0xB4, 0xAD, 0x32, 0x94, 0x90, 0x94, 0x6F, 0x94, 0x6F, 0x9C, 0xD1, 0x94, 0x6E, 0x94, 0x0C, 0xB5, 0x31, 0xCE, 0x15, 0xD6, 0x76, 0xD6, 0x57, 0xD6, 0x57, 0xD6, 0x77, 0xD6, 0x57, 0xDE, 0x97, 0xC5, 0xD4, 0xD6, 0x15, 0xDE, 0x96, 0xDE, 0x96, 0xD6, 0x75, 0xD6, 0x55, 0xD6, 0x76, 0xD6, 0x77, 0xD6, 0x56, 0xD6, 0x56, 0xD6, 0x76, 0xDE, 0x96, 0xD6, 0x55, 0xDE, 0x76, 0x9C, 0x4D, 0xAC, 0xF0, 0xB5, 0x52, 0x94, 0x4E, 0x9C, 0xB0, 0xAC, 0xF0, 0xB5, 0x31, 0xC5, 0xD4, 0xC5, 0xD4, 0x9C, 0xAF, 0xA4, 0xD0, 0x94, 0x6E, 0x83, 0xCC, 0x7B, 0xAC, 0x8C, 0x0D, 0x8C, 0x2E, 0x9C, 0x8F, 0xBD, 0x92, 0xC5, 0x92, 0x9C, 0xCD, 0x63, 0x88, 0x4B, 0x06, 0x53, 0x27, 0x6C, 0x2B, 0x5B, 0xE8, 0x4B, 0x65, 0x43, 0x45, 0x53, 0x66, 0x9D, 0x2E, 0xB5, 0xAF, 0xB5, 0xAE, 0x94, 0xAC, 0x63, 0x48, 0x8C, 0x6E, 0x9C, 0xAF, 0xAD, 0x11, 0x63, 0x29, 0xC6, 0xB3, 0xC6, 0x71, 0xCE, 0xB3, 0xC6, 0x52, 0xB5, 0x90, 0xA4, 0xEE, 0xA4, 0xEE, 0xAD, 0x2E, 0xC5, 0xF2, 0xB5, 0x51, 0xB5, 0x51, 0xAD, 0x10, 0xA5, 0x0F, 0xAD, 0xD0, 0xBE, 0xB4, 0xC7, 0x16, 0xAE, 0x32, 0x9D, 0xCE, 0x7C, 0xEA, 0x8D, 0x2D, 0xB6, 0x72, 0xB6, 0x32, 0x8D, 0x0E, 0x74, 0x6C, 0x74, 0x2B, 0x63, 0xC9, 0x6B, 0xE9, 0x5B, 0x66, 0x63, 0xA7, 0x8D, 0x0C, 0x7C, 0x89, 0x8C, 0xEB, 0x9D, 0x6F, 0x7C, 0x4C, 0x95, 0x10, 0xE7, 0x79, 0x9D, 0x30, 0x74, 0x6B, 0x74, 0xAB, 0x6C, 0x28, 0x7C, 0xAB, 0x8D, 0x0E, 0x6B, 0xCA, 0x6B, 0xAA, 0xC6, 0x53, 0xAD, 0xD0, 0xBE, 0x94, 0xBE, 0x95, 0xBE, 0x54, 0xB5, 0xB0, 0xD6, 0x93, 0xCE, 0xB3, 0x9D, 0x4E, 0x74, 0x8A, 0x7C, 0xCB, 0xA5, 0xCF, 0x43, 0x26, 0x3A, 0xE4, 0x5B, 0xE5, 0x4B, 0xA4, 0x7C, 0xCA, 0x5B, 0x67, 0x6B, 0xE9, 0x7C, 0xAA, 0x53, 0x86, 0x3A, 0x84, 0x9D, 0x73, 0xAD, 0xB4, 0xA5, 0xB4, 0x6C, 0x0C, 0x43, 0x45, 0x5C, 0x27, 0x32, 0xC2, 0x19, 0xE1, 0x19, 0xA1, 0x11, 0x80, 0x19, 0xE2, 0x3A, 0xC4, 0x8D, 0x6D, 0xA6, 0x51, 0x9D, 0xF0, 0x4A, 0xE7, 0x09, 0x00, 0x19, 0x62, 0x2A, 0x24, 0x4B, 0x27, 0x7D, 0x0C, 0x64, 0x48, 0x5C, 0x07, 0x53, 0xC6, 0x6C, 0x8A, 0x6C, 0x8A, 0x4B, 0x65, 0x53, 0xC7, 0x4B, 0x45, 0x32, 0xA2, 0x4B, 0x84, 0x53, 0xE5, 0x64, 0x47, 0x53, 0xC6, 0x2A, 0x02, 0x09, 0x00, 0x42, 0xE6, 0x42, 0xC6, 0x21, 0xA2, 0x22, 0x03, 0x22, 0x22, 0x2A, 0x43, 0x64, 0x2A, 0x95, 0x90, 0x95, 0xB0, 0x9D, 0xF1, 0xA6, 0x12, 0xA6, 0x52, 0x74, 0x8C, 0x32, 0x85, 0x4B, 0x47, 0x5C, 0x09, 0x4B, 0x46, 0x3A, 0x84, 0x3A, 0xA5, 0x5B, 0xE7, 0x74, 0xCB, 0x95, 0xAF, 0xA6, 0x31, 0x7D, 0x0C, 0x8D, 0x6E, 0x64, 0x49, 0xBE, 0xF3, 0x8D, 0x6C, 0x5C, 0x47, 0x53, 0xE6, 0x43, 0x64, 0x3B, 0x44, 0x8D, 0x4C, 0x9D, 0xCE, 0x9D, 0xCD, 0x85, 0x2B, 0x85, 0x2C, 0x6C, 0x89, 0x95, 0x8C, 0x95, 0x8D, 0x8C, 0xCC, 0x6B, 0xE8, 0x5B, 0x86, 0x73, 0xA7, 0x7B, 0x28, 0x52, 0x07, 0x73, 0x2C, 0x83, 0xEF, 0x94, 0x71, 0x94, 0x50, 0x94, 0x71, 0x8C, 0x0F, 0x8C, 0x30, 0xA4, 0xF3, 0x8C, 0x10, 0x9C, 0xB3, 0x9C, 0x92, 0x94, 0x51, 0xA4, 0xD3, 0xB5, 0x75, 0xC5, 0xF7, 0xAD, 0x55, 0xD6, 0x58, 0xBD, 0xB6, 0x73, 0x8E, 0x4A, 0x08, 0x41, 0xC7, 0x62, 0xEB, 0x62, 0xCA, 0x83, 0xCF, 0x73, 0x2C, 0x52, 0x69, 0xA4, 0xD3, 0xD6, 0x58, 0xCD, 0xF7, 0xAD, 0x14, 0x7B, 0xCF, 0xAD, 0x55, 0xB5, 0x96, 0xDE, 0xBB, 0xDE, 0xBB, 0xB5, 0x96, 0x6B, 0x4D, 0x94, 0x93, 0xAD, 0x35, 0x7B, 0xCF, 0x6B, 0x2C, 0xAD, 0x34, 0x84, 0x2F, 0x63, 0x8A, 0x84, 0xED, 0x85, 0x2B, 0x85, 0x27, 0x7C, 0xE4, 0x95, 0xA7, 0xA6, 0x2B, 0x95, 0xAD, 0xBE, 0xF4, 0xBE, 0xF4, 0x9D, 0xCC, 0x7D, 0x03, 0x74, 0xC0, 0x85, 0x43, 0x8D, 0x86, 0x9D, 0xE9, 0x9E, 0x09, 0x9D, 0xE8, 0xA6, 0x26, 0x95, 0x68, 0xA5, 0xB1, 0xCE, 0x99, 0xC6, 0x38, 0x94, 0xB3, 0x3A, 0x08, 0x74, 0x4B, 0x8D, 0x49, 0x7D, 0x05, 0x4B, 0xA2, 0x32, 0xC2, 0x32, 0xA2, 0x95, 0xAC, 0x95, 0xCA, 0x53, 0xC4, 0x22, 0x01, 0x8D, 0x4F, 0xBE, 0xD5, 0x63, 0xCB, 0x53, 0x47, 0x9D, 0x8B, 0x63, 0xE5, 0x5B, 0xE8, 0x74, 0xAC, 0x6C, 0x6B, 0x3A, 0xE6, 0x11, 0x81, 0x32, 0x44, 0x3A, 0xE5, 0x4B, 0x87, 0x5C, 0x29, 0x53, 0xC7, 0x64, 0x49, 0x4B, 0x86, 0x22, 0x22, 0x4B, 0x07, 0xBD, 0xB4, 0xC5, 0xD4, 0xBD, 0x93, 0xC5, 0xD4, 0xCE, 0x35, 0xC5, 0xD4, 0xBD, 0x73, 0xCE, 0x15, 0xD6, 0x55, 0xCE, 0x35, 0xCE, 0x15, 0xC5, 0xF5, 0xCE, 0x15, 0x94, 0x4E, 0x8B, 0xEC, 0xCD, 0xF3, 0xD6, 0x76, 0xD6, 0x76, 0xDE, 0x97, 0xDE, 0xB7, 0xDE, 0xB8, 0xCE, 0x36, 0xD6, 0x56, 0xCD, 0xF4, 0xBD, 0xB3, 0xC5, 0xF4, 0xD6, 0x76, 0xDE, 0x96, 0xD6, 0x56, 0xD6, 0x76, 0xDE, 0x97, 0xD6, 0x76, 0xD6, 0x76, 0xD6, 0x76, 0xD6, 0x76, 0xD6, 0x56, 0xDE, 0x76, 0x9C, 0x6E, 0xA4, 0xD0, 0xBD, 0x93, 0x94, 0x6F, 0xA4, 0xF1, 0xAC, 0xF1, 0xA4, 0xD0, 0xA4, 0xF1, 0xAD, 0x12, 0xAD, 0x11, 0xBD, 0xB4, 0xBD, 0x93, 0x9C, 0x70, 0x6B, 0x0A, 0x73, 0x6C, 0x73, 0x6C, 0x84, 0x0E, 0x94, 0x4E, 0x8C, 0x0C, 0x8C, 0x4B, 0x5B, 0x47, 0x32, 0x84, 0x32, 0x84, 0x42, 0xE5, 0x53, 0xA7, 0x4B, 0x65, 0x64, 0x28, 0x74, 0x6A, 0x9D, 0x4D, 0xA5, 0xAC, 0x9D, 0xAA, 0x9D, 0x8B, 0x8D, 0x0B, 0x74, 0x4A, 0x84, 0x6D, 0xAD, 0x92, 0x63, 0x4A, 0xAD, 0xD0, 0xAD, 0xEF, 0x9D, 0x0D, 0xA5, 0x2E, 0xA5, 0x0E, 0xAD, 0x4E, 0xA5, 0x6D, 0xAD, 0xAF, 0xC6, 0x12, 0xB5, 0x71, 0xB5, 0x51, 0x94, 0x6E, 0x7B, 0xEC, 0x94, 0xEE, 0xA5, 0xF2, 0xB6, 0x94, 0xAE, 0x12, 0x7C, 0xAB, 0x4B, 0x85, 0x8D, 0x6E, 0x9D, 0x8F, 0x95, 0x4E, 0x95, 0x6F, 0xA5, 0xD2, 0x74, 0x4B, 0x63, 0xA9, 0x8C, 0xCD, 0x84, 0x6A, 0x63, 0xA7, 0x95, 0x4D, 0x84, 0xCB, 0x7C, 0xCA, 0x8C, 0xEB, 0x94, 0xEC, 0xB6, 0x33, 0x9D, 0x50, 0x7C, 0x8C, 0x74, 0x8A, 0x5B, 0xE8, 0x5B, 0xA7, 0x74, 0x8B, 0x84, 0xCD, 0x9D, 0x71, 0xAD, 0xD3, 0xB6, 0x12, 0xB5, 0xF0, 0xBE, 0x53, 0x9D, 0x50, 0xB6, 0x54, 0xC6, 0x95, 0xB5, 0xD0, 0xCE, 0xB2, 0xBE, 0x30, 0x84, 0xAA, 0x63, 0xE8, 0x5B, 0xC7, 0x4B, 0x86, 0x4B, 0x65, 0x5B, 0xE6, 0x3A, 0xE2, 0x53, 0x87, 0x5B, 0xC8, 0x6C, 0x6A, 0x63, 0xE7, 0x43, 0x25, 0x53, 0x28, 0x9D, 0x53, 0xBE, 0x77, 0xBE, 0x77, 0x7C, 0xAE, 0x64, 0x49, 0x43, 0x64, 0x2A, 0x81, 0x19, 0xE1, 0x53, 0x67, 0x42, 0xC5, 0x2A, 0x23, 0x2A, 0x23, 0x32, 0x63, 0x4B, 0x67, 0x32, 0x44, 0x11, 0x21, 0x11, 0x41, 0x19, 0x82, 0x2A, 0x44, 0x43, 0x06, 0x74, 0xAA, 0x74, 0xCA, 0x6C, 0x89, 0x64, 0x28, 0x7C, 0xCB, 0x74, 0xAA, 0x53, 0xC6, 0x53, 0xE6, 0x5B, 0xE7, 0x4B, 0x85, 0x53, 0xA6, 0x5C, 0x26, 0x53, 0xE6, 0x32, 0x82, 0x2A, 0x03, 0x19, 0x82, 0x21, 0xE3, 0x21, 0xA2, 0x3A, 0xA5, 0x3A, 0xA5, 0x19, 0xE1, 0x32, 0xA4, 0x6C, 0x8A, 0x8D, 0x6F, 0xA6, 0x32, 0xAE, 0x53, 0x95, 0xD0, 0x7C, 0xCD, 0x2A, 0x64, 0x32, 0x85, 0x43, 0x26, 0x5B, 0xC8, 0x5C, 0x09, 0x53, 0xA7, 0x74, 0xCB, 0x74, 0xEA, 0x7D, 0x0C, 0x95, 0xD0, 0xA6, 0x31, 0x74, 0xCB, 0x53, 0xC8, 0x7C, 0xCB, 0xAE, 0x70, 0xA6, 0x2F, 0x95, 0xCE, 0x85, 0x4B, 0x7D, 0x0B, 0x53, 0xE6, 0x95, 0x8D, 0xA6, 0x0F, 0x95, 0x8C, 0x95, 0xAC, 0x8D, 0x4C, 0x7D, 0x0A, 0x7C, 0xE9, 0x4B, 0x24, 0x31, 0xA2, 0x42, 0x24, 0x5B, 0x66, 0x74, 0x68, 0x84, 0x2A, 0x8C, 0x0F, 0x9C, 0x92, 0x8C, 0x10, 0x9C, 0xB2, 0xA4, 0xD3, 0xA4, 0xF3, 0x8C, 0x30, 0x83, 0xEF, 0xCE, 0x38, 0xA5, 0x13, 0x62, 0xCB, 0x73, 0x8E, 0x9C, 0x92, 0x8C, 0x51, 0x84, 0x10, 0x94, 0x92, 0xB5, 0x75, 0xD6, 0x79, 0xAD, 0x55, 0xC6, 0x18, 0xBD, 0x96, 0x8C, 0x31, 0x7B, 0xAE, 0x52, 0x49, 0x73, 0x2C, 0x7B, 0xAE, 0x7B, 0xAE, 0xAD, 0x34, 0xD6, 0x38, 0xD6, 0x58, 0xBD, 0x96, 0x94, 0x51, 0x9C, 0xB3, 0xDE, 0xBB, 0xD6, 0x7A, 0xAD, 0x76, 0x73, 0xAF, 0x6B, 0x4D, 0x84, 0x10, 0x94, 0x71, 0x8C, 0x51, 0x7B, 0xCF, 0xA4, 0xF3, 0x7B, 0xEF, 0x5B, 0x0B, 0xA5, 0x92, 0x84, 0xED, 0x85, 0x09, 0x8D, 0x48, 0x95, 0xCA, 0x9D, 0xEB, 0x95, 0x8A, 0x9D, 0xCD, 0xA6, 0x10, 0x9E, 0x0D, 0x7D, 0x26, 0x64, 0x60, 0x6C, 0xC2, 0x8D, 0x46, 0x9E, 0x09, 0x95, 0xA6, 0x95, 0xA4, 0xA6, 0x26, 0x8D, 0x48, 0xA5, 0x92, 0xCE, 0x79, 0xBE, 0x38, 0x84, 0x31, 0x3A, 0x06, 0x84, 0xED, 0x85, 0x29, 0x74, 0xC6, 0x5C, 0x25, 0x32, 0xC1, 0x53, 0xA6, 0x95, 0xCC, 0x85, 0x47, 0x74, 0xE6, 0x32, 0x82, 0x84, 0xED, 0xB6, 0x94, 0x53, 0x69, 0x63, 0xA8, 0x9D, 0xAC, 0x53, 0x65, 0x42, 0xE5, 0x2A, 0x63, 0x22, 0x23, 0x3A, 0xA5, 0x3A, 0xC5, 0x43, 0x27, 0x43, 0x46, 0x3A, 0xC4, 0x3B, 0x05, 0x53, 0xC7, 0x64, 0x29, 0x3A, 0xC4, 0x09, 0x00, 0x21, 0xE4, libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-wrover-kit/main/devices.c000066400000000000000000000141711476025525100277350ustar00rootroot00000000000000/* * devices for ESP WROVER KIT * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #define LWIP_PROVIDE_ERRNO 1 #define _ESP_PLATFORM_ERRNO_H_ #include #include "sdkconfig.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include #include struct lws_led_state *lls; lws_display_state_t lds; struct lws_button_state *bcs; lws_netdev_instance_wifi_t *wnd; /* * Button controller * * On the WROVER KIT, it's a bit overloaded... the two buttons are reset and * gpio0, gpio is also used for one of the RGB LEDs channels control so it's not * really usable as a general user button. * * Instead we use GPIO 14 (available on J1) for a button with the other side * of the switch connected to 0V. */ static const lws_button_map_t bcm[] = { { .gpio = GPIO_NUM_14, .smd_interaction_name = "user" }, }; static const lws_button_controller_t bc = { .smd_bc_name = "bc", .gpio_ops = &lws_gpio_plat, .button_map = &bcm[0], .active_state_bitmap = 0, .count_buttons = LWS_ARRAY_SIZE(bcm), }; /* * pwm controller */ static const lws_pwm_map_t pwm_map[] = { { .gpio = GPIO_NUM_2, .index = 0, .active_level = 1 }, { .gpio = GPIO_NUM_0, .index = 1, .active_level = 1 }, { .gpio = GPIO_NUM_4, .index = 2, .active_level = 1 }, { .gpio = GPIO_NUM_5, .index = 3, .active_level = 0 } }; static const lws_pwm_ops_t pwm_ops = { lws_pwm_plat_ops, .pwm_map = &pwm_map[0], .count_pwm_map = LWS_ARRAY_SIZE(pwm_map) }; /* * led controller */ static const lws_led_gpio_map_t lgm[] = { { .name = "red", .gpio = GPIO_NUM_2, .pwm_ops = &pwm_ops, /* managed by pwm */ .active_level = 1, }, { .name = "green", .gpio = GPIO_NUM_0, .pwm_ops = &pwm_ops, /* managed by pwm */ .active_level = 1, }, { .name = "blue", .gpio = GPIO_NUM_4, .pwm_ops = &pwm_ops, /* managed by pwm */ .active_level = 1, }, { .name = "backlight", .gpio = GPIO_NUM_5, .pwm_ops = &pwm_ops, /* managed by pwm */ .active_level = 0, /* * The wrover kit uses a 2 NPN in series to drive the backlight * which means if the GPIO provides no current, the backlight is * full-on. This causes a white flash during boot... they mark * the first stage with "Modify In ESP-WROVER-KIT!" on the * schematics but on Kit v4.1, it's still like that. */ }, }; static const lws_led_gpio_controller_t lgc = { .led_ops = lws_led_gpio_ops, .gpio_ops = &lws_gpio_plat, .led_map = &lgm[0], .count_leds = LWS_ARRAY_SIZE(lgm) }; /* * Bitbang SPI configuration for display */ static const lws_bb_spi_t lbspi = { .bb_ops = { lws_bb_spi_ops, .bus_mode = LWS_SPI_BUSMODE_CLK_IDLE_LOW_SAMP_RISING }, .gpio = &lws_gpio_plat, .clk = GPIO_NUM_19, .ncs = { GPIO_NUM_22 }, .ncmd = { GPIO_NUM_21 }, .mosi = GPIO_NUM_23, .miso = GPIO_NUM_25, .flags = LWSBBSPI_FLAG_USE_NCS0 | LWSBBSPI_FLAG_USE_NCMD0 }; /* * SPI display */ static const lws_display_ili9341_t disp = { .disp = { lws_display_ili9341_ops, .bl_pwm_ops = &pwm_ops, .bl_active = &lws_pwmseq_static_on, .bl_dim = &lws_pwmseq_static_half, .bl_transition = &lws_pwmseq_linear_wipe, .bl_index = 3, .w = 320, .h = 240, .latency_wake_ms = 150, }, .spi = (lws_spi_ops_t *)&lbspi, .gpio = &lws_gpio_plat, .reset_gpio = GPIO_NUM_18, .spi_index = 0 }; /* * Settings stored in platform nv */ static const lws_settings_ops_t sett = { lws_settings_ops_plat }; /* * Wifi */ static const lws_netdev_ops_t wifi_ops = { lws_netdev_wifi_plat_ops }; int init_plat_devices(struct lws_context *ctx) { lws_settings_instance_t *si; lws_netdevs_t *netdevs = lws_netdevs_from_ctx(ctx); si = lws_settings_init(&sett, (void *)"nvs"); if (!si) { lwsl_err("%s: failed to create settings instance\n", __func__); return 1; } netdevs->si = si; #if 0 /* * This is a temp hack to bootstrap the settings to contain the test * AP ssid and passphrase for one time, so the settings can be stored * while there's no UI atm */ { lws_wifi_creds_t creds; memset(&creds, 0, sizeof(creds)); lws_strncpy(creds.ssid, "xxx", sizeof(creds.ssid)); lws_strncpy(creds.passphrase, "yyy", sizeof(creds.passphrase)); lws_dll2_add_tail(&creds.list, &netdevs->owner_creds); if (lws_netdev_credentials_settings_set(netdevs)) { lwsl_err("%s: failed to write bootstrap creds\n", __func__); return 1; } } #endif // if (lws_netdev_instance_wifi_settings_get(si, "netdev.wl0", &niw, &ac)) { // lwsl_err("%s: unable to fetch wl0 settings\n", __func__); // return 1; // } /* create the wifi network device and configure it */ wnd = (lws_netdev_instance_wifi_t *) wifi_ops.create(ctx, &wifi_ops, "wl0", NULL); if (!wnd) { lwsl_err("%s: failed to create wifi object\n", __func__); return 1; } wnd->flags |= LNDIW_MODE_STA; if (wifi_ops.configure(&wnd->inst, NULL)) { lwsl_err("%s: failed to configure wifi object\n", __func__); return 1; } wifi_ops.up(&wnd->inst); /* bring up the led controller */ lls = lgc.led_ops.create(&lgc.led_ops); if (!lls) { lwsl_err("%s: could not create led\n", __func__); return 1; } /* pwm init must go after the led controller init */ pwm_ops.init(&pwm_ops); /* ... and the button controller */ bcs = lws_button_controller_create(ctx, &bc); if (!bcs) { lwsl_err("%s: could not create buttons\n", __func__); return 1; } lws_button_enable(bcs, 0, lws_button_get_bit(bcs, "user")); /* ... bring up spi bb and the display */ lbspi.bb_ops.init(&lbspi.bb_ops); lws_display_state_init(&lds, ctx, 30000, 10000, lls, &disp.disp); /* * Make the RGB LED do something using sequenced PWM... pressing the * GPIO14 button with single-presses advances the blue channel between * different sequences */ lws_led_transition(lls, "blue", &lws_pwmseq_sine_endless_fast, &lws_pwmseq_linear_wipe); lws_led_transition(lls, "green", &lws_pwmseq_sine_endless_slow, &lws_pwmseq_linear_wipe); lws_led_transition(lls, "red", &lws_pwmseq_sine_endless_slow, &lws_pwmseq_linear_wipe); return 0; } libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-wrover-kit/main/lws-minimal-esp32.c000066400000000000000000000127411476025525100314770ustar00rootroot00000000000000/* * lws-minimal-esp32 * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * Configured for ESP32 WROVER KIT * * What should be notable about this is there are no esp-idf apis used here or * any related files, despite we are running on top of stock esp-idf. */ #define LWIP_PROVIDE_ERRNO 1 #define _ESP_PLATFORM_ERRNO_H_ #include #include "sdkconfig.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include #include struct lws_context *context; extern struct lws_led_state *lls; extern lws_display_state_t lds; extern struct lws_button_state *bcs; extern lws_netdev_instance_wifi_t *wnd; lws_sorted_usec_list_t sul_pass; extern int init_plat_devices(struct lws_context *); static const uint8_t logo[] = { #include "cat-565.h" }; #if defined(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY) #include "static-policy.h" #else #include "policy.h" #endif static uint8_t flip; typedef struct myss { struct lws_ss_handle *ss; void *opaque_data; /* ... application specific state ... */ size_t amount; } myss_t; /* * When we're actually happy we passed, we schedule the actual pass * string to happen a few seconds later, so we can observe what the * code did after the pass. */ static void completion_sul_cb(lws_sorted_usec_list_t *sul) { /* * In CI, we use sai-expect to look for this * string for success */ lwsl_notice("Completed: PASS\n"); } static int myss_rx(void *userobj, const uint8_t *buf, size_t len, int flags) { myss_t *m = (myss_t *)userobj; lwsl_user("%s: len %d, flags: %d\n", __func__, (int)len, flags); // lwsl_hexdump_info(buf, len); m->amount += len; if (flags & LWSSS_FLAG_EOM) { /* * If we received the whole message, for our example it means * we are done. * * Howevere we want to record what happened after we received * the last bit so we can see anything unexpected coming. So * wait 5s before sending the PASS magic. */ lwsl_notice("%s: received %u bytes, passing in 10s\n", __func__, (unsigned int)m->amount); lws_sul_schedule(context, 0, &sul_pass, completion_sul_cb, 5 * LWS_US_PER_SEC); return LWSSSSRET_DESTROY_ME; } return 0; } static int myss_state(void *userobj, void *sh, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { myss_t *m = (myss_t *)userobj; lwsl_user("%s: %s, ord 0x%x\n", __func__, lws_ss_state_name(state), (unsigned int)ack); switch (state) { case LWSSSCS_CREATING: lws_ss_client_connect(m->ss); break; default: break; } return 0; } static const lws_ss_info_t ssi = { .handle_offset = offsetof(myss_t, ss), .opaque_user_data_offset = offsetof(myss_t, opaque_data), .rx = myss_rx, .state = myss_state, .user_alloc = sizeof(myss_t), .streamtype = "test_stream", }; static const lws_led_sequence_def_t *seqs[] = { &lws_pwmseq_static_on, &lws_pwmseq_static_off, &lws_pwmseq_sine_endless_slow, &lws_pwmseq_sine_endless_fast, }; static int smd_cb(void *opaque, lws_smd_class_t _class, lws_usec_t timestamp, void *buf, size_t len) { if (!lws_json_simple_strcmp(buf, len, "\"src\":", "bc/user") && !lws_json_simple_strcmp(buf, len, "\"event\":", "click")) { lws_led_transition(lls, "blue", seqs[flip & 3], &lws_pwmseq_linear_wipe); flip++; } lwsl_hexdump_notice(buf, len); if ((_class & LWSSMDCL_SYSTEM_STATE) && !lws_json_simple_strcmp(buf, len, "\"state\":", "OPERATIONAL")) { /* create the secure stream */ lwsl_notice("%s: creating test secure stream\n", __func__); if (lws_ss_create(context, 0, &ssi, NULL, NULL, NULL, NULL)) { lwsl_err("%s: failed to create secure stream\n", __func__); return -1; } } if (_class & LWSSMDCL_INTERACTION) /* * Any kind of user interaction brings the display back up and * resets the dimming / blanking timers */ lws_display_state_active(&lds); return 0; } void app_main(void) { struct lws_context_creation_info *info; lws_set_log_level(1024 | 15, NULL); lws_netdev_plat_init(); lws_netdev_plat_wifi_init(); info = malloc(sizeof(*info)); if (!info) goto spin; memset(info, 0, sizeof(*info)); lwsl_notice("LWS test for Espressif ESP32 WROVER KIT\n"); #if !defined(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY) info->pss_policies_json = ss_policy; #else info->pss_policies = &_ss_static_policy_entry; #endif info->options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info->port = CONTEXT_PORT_NO_LISTEN; info->early_smd_cb = smd_cb; info->early_smd_class_filter = LWSSMDCL_INTERACTION | LWSSMDCL_SYSTEM_STATE | LWSSMDCL_NETWORK; info->smd_ttl_us = 20 * LWS_USEC_PER_SEC; /* we can spend a long time in display */ context = lws_create_context(info); if (!context) { lwsl_err("lws init failed\n"); goto spin; } /* * We don't need this after context creation... things it pointed to * still need to exist though since the context copied the pointers. */ free(info); /* devices and init are in devices.c */ if (init_plat_devices(context)) goto spin; /* put the cat picture up there and enable the backlight */ lds.disp->blit(lds.disp, logo, 0, 0, 320, 240); lws_display_state_active(&lds); /* the lws event loop */ do { taskYIELD(); lws_service(context, 0); } while (1); lwsl_notice("%s: exited event loop\n", __func__); spin: vTaskDelay(10); taskYIELD(); goto spin; } libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-wrover-kit/main/policy.h000066400000000000000000000071411476025525100276160ustar00rootroot00000000000000 static const char * const ss_policy = "{" "\"release\":" "\"01234567\"," "\"product\":" "\"myproduct\"," "\"schema-version\":" "1," "\"retry\": [" /* named backoff / retry strategies */ "{\"default\": {" "\"backoff\": [" "1000," "2000," "3000," "5000," "10000" "]," "\"conceal\":" "25," "\"jitterpc\":" "20," "\"svalidping\":" "30," "\"svalidhup\":" "35" "}}" "]," "\"certs\": [" /* named individual certificates in BASE64 DER */ /* * Let's Encrypt certs for warmcat.com / libwebsockets.org */ "{\"isrg_root_x1\": \"" "MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw" "TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh" "cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4" "WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu" "ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY" "MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc" "h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+" "0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U" "A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW" "T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH" "B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC" "B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv" "KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn" "OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn" "jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw" "qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI" "rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV" "HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq" "hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL" "ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ" "3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK" "NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5" "ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur" "TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC" "jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc" "oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq" "4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA" "mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d" "emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=" "\"}" "]," "\"trust_stores\": [" /* named cert chains */ "{" "\"name\": \"le_via_isrg\"," "\"stack\": [" "\"isrg_root_x1\"" "]" "}" "]," "\"s\": [" "{\"test_stream\": {" "\"endpoint\":" "\"warmcat.com\"," "\"port\":" "443," "\"protocol\":" "\"h2\"," "\"http_method\":" "\"GET\"," "\"http_url\":" "\"index.html\"," "\"tls\":" "true," "\"opportunistic\":" "true," "\"retry\":" "\"default\"," "\"tls_trust_store\":" "\"le_via_isrg\"" "}},{" /* * "captive_portal_detect" describes * what to do in order to check if the path to * the Internet is being interrupted by a * captive portal. */ "\"captive_portal_detect\": {" "\"endpoint\":" "\"connectivitycheck.android.com\"," "\"http_url\":" "\"generate_204\"," "\"port\":" "80," "\"protocol\":" "\"h1\"," "\"http_method\":" "\"GET\"," "\"opportunistic\":" "true," "\"http_expect\":" "204," "\"http_fail_redirect\": true" "}}" "]}" ; libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-wrover-kit/main/static-policy.h000066400000000000000000000277431476025525100311150ustar00rootroot00000000000000/* * Autogenerated from the following JSON policy */ #if 0 Original JSON size: 13 #endif static const uint32_t _rbo_bo_0[] = { 1000, 2000, 3000, 5000, 10000, }; static const lws_retry_bo_t _rbo_0 = { .retry_ms_table = _rbo_bo_0, .retry_ms_table_count = 5, .conceal_count = 25, .secs_since_valid_ping = 30, .secs_since_valid_hangup = 35, .jitter_percent = 20, }; static const uint8_t _ss_der_isrg_root_x1[] = { /* 0x 0 */ 0x30, 0x82, 0x05, 0x6B, 0x30, 0x82, 0x03, 0x53, /* 0x 8 */ 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x11, 0x00, /* 0x 10 */ 0x82, 0x10, 0xCF, 0xB0, 0xD2, 0x40, 0xE3, 0x59, /* 0x 18 */ 0x44, 0x63, 0xE0, 0xBB, 0x63, 0x82, 0x8B, 0x00, /* 0x 20 */ 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, /* 0x 28 */ 0xF7, 0x0D, 0x01, 0x01, 0x0B, 0x05, 0x00, 0x30, /* 0x 30 */ 0x4F, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, /* 0x 38 */ 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x29, /* 0x 40 */ 0x30, 0x27, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, /* 0x 48 */ 0x20, 0x49, 0x6E, 0x74, 0x65, 0x72, 0x6E, 0x65, /* 0x 50 */ 0x74, 0x20, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, /* 0x 58 */ 0x74, 0x79, 0x20, 0x52, 0x65, 0x73, 0x65, 0x61, /* 0x 60 */ 0x72, 0x63, 0x68, 0x20, 0x47, 0x72, 0x6F, 0x75, /* 0x 68 */ 0x70, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, /* 0x 70 */ 0x04, 0x03, 0x13, 0x0C, 0x49, 0x53, 0x52, 0x47, /* 0x 78 */ 0x20, 0x52, 0x6F, 0x6F, 0x74, 0x20, 0x58, 0x31, /* 0x 80 */ 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x35, 0x30, 0x36, /* 0x 88 */ 0x30, 0x34, 0x31, 0x31, 0x30, 0x34, 0x33, 0x38, /* 0x 90 */ 0x5A, 0x17, 0x0D, 0x33, 0x35, 0x30, 0x36, 0x30, /* 0x 98 */ 0x34, 0x31, 0x31, 0x30, 0x34, 0x33, 0x38, 0x5A, /* 0x a0 */ 0x30, 0x4F, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, /* 0x a8 */ 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, /* 0x b0 */ 0x29, 0x30, 0x27, 0x06, 0x03, 0x55, 0x04, 0x0A, /* 0x b8 */ 0x13, 0x20, 0x49, 0x6E, 0x74, 0x65, 0x72, 0x6E, /* 0x c0 */ 0x65, 0x74, 0x20, 0x53, 0x65, 0x63, 0x75, 0x72, /* 0x c8 */ 0x69, 0x74, 0x79, 0x20, 0x52, 0x65, 0x73, 0x65, /* 0x d0 */ 0x61, 0x72, 0x63, 0x68, 0x20, 0x47, 0x72, 0x6F, /* 0x d8 */ 0x75, 0x70, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, /* 0x e0 */ 0x55, 0x04, 0x03, 0x13, 0x0C, 0x49, 0x53, 0x52, /* 0x e8 */ 0x47, 0x20, 0x52, 0x6F, 0x6F, 0x74, 0x20, 0x58, /* 0x f0 */ 0x31, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0D, 0x06, /* 0x f8 */ 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, /* 0x100 */ 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0F, /* 0x108 */ 0x00, 0x30, 0x82, 0x02, 0x0A, 0x02, 0x82, 0x02, /* 0x110 */ 0x01, 0x00, 0xAD, 0xE8, 0x24, 0x73, 0xF4, 0x14, /* 0x118 */ 0x37, 0xF3, 0x9B, 0x9E, 0x2B, 0x57, 0x28, 0x1C, /* 0x120 */ 0x87, 0xBE, 0xDC, 0xB7, 0xDF, 0x38, 0x90, 0x8C, /* 0x128 */ 0x6E, 0x3C, 0xE6, 0x57, 0xA0, 0x78, 0xF7, 0x75, /* 0x130 */ 0xC2, 0xA2, 0xFE, 0xF5, 0x6A, 0x6E, 0xF6, 0x00, /* 0x138 */ 0x4F, 0x28, 0xDB, 0xDE, 0x68, 0x86, 0x6C, 0x44, /* 0x140 */ 0x93, 0xB6, 0xB1, 0x63, 0xFD, 0x14, 0x12, 0x6B, /* 0x148 */ 0xBF, 0x1F, 0xD2, 0xEA, 0x31, 0x9B, 0x21, 0x7E, /* 0x150 */ 0xD1, 0x33, 0x3C, 0xBA, 0x48, 0xF5, 0xDD, 0x79, /* 0x158 */ 0xDF, 0xB3, 0xB8, 0xFF, 0x12, 0xF1, 0x21, 0x9A, /* 0x160 */ 0x4B, 0xC1, 0x8A, 0x86, 0x71, 0x69, 0x4A, 0x66, /* 0x168 */ 0x66, 0x6C, 0x8F, 0x7E, 0x3C, 0x70, 0xBF, 0xAD, /* 0x170 */ 0x29, 0x22, 0x06, 0xF3, 0xE4, 0xC0, 0xE6, 0x80, /* 0x178 */ 0xAE, 0xE2, 0x4B, 0x8F, 0xB7, 0x99, 0x7E, 0x94, /* 0x180 */ 0x03, 0x9F, 0xD3, 0x47, 0x97, 0x7C, 0x99, 0x48, /* 0x188 */ 0x23, 0x53, 0xE8, 0x38, 0xAE, 0x4F, 0x0A, 0x6F, /* 0x190 */ 0x83, 0x2E, 0xD1, 0x49, 0x57, 0x8C, 0x80, 0x74, /* 0x198 */ 0xB6, 0xDA, 0x2F, 0xD0, 0x38, 0x8D, 0x7B, 0x03, /* 0x1a0 */ 0x70, 0x21, 0x1B, 0x75, 0xF2, 0x30, 0x3C, 0xFA, /* 0x1a8 */ 0x8F, 0xAE, 0xDD, 0xDA, 0x63, 0xAB, 0xEB, 0x16, /* 0x1b0 */ 0x4F, 0xC2, 0x8E, 0x11, 0x4B, 0x7E, 0xCF, 0x0B, /* 0x1b8 */ 0xE8, 0xFF, 0xB5, 0x77, 0x2E, 0xF4, 0xB2, 0x7B, /* 0x1c0 */ 0x4A, 0xE0, 0x4C, 0x12, 0x25, 0x0C, 0x70, 0x8D, /* 0x1c8 */ 0x03, 0x29, 0xA0, 0xE1, 0x53, 0x24, 0xEC, 0x13, /* 0x1d0 */ 0xD9, 0xEE, 0x19, 0xBF, 0x10, 0xB3, 0x4A, 0x8C, /* 0x1d8 */ 0x3F, 0x89, 0xA3, 0x61, 0x51, 0xDE, 0xAC, 0x87, /* 0x1e0 */ 0x07, 0x94, 0xF4, 0x63, 0x71, 0xEC, 0x2E, 0xE2, /* 0x1e8 */ 0x6F, 0x5B, 0x98, 0x81, 0xE1, 0x89, 0x5C, 0x34, /* 0x1f0 */ 0x79, 0x6C, 0x76, 0xEF, 0x3B, 0x90, 0x62, 0x79, /* 0x1f8 */ 0xE6, 0xDB, 0xA4, 0x9A, 0x2F, 0x26, 0xC5, 0xD0, /* 0x200 */ 0x10, 0xE1, 0x0E, 0xDE, 0xD9, 0x10, 0x8E, 0x16, /* 0x208 */ 0xFB, 0xB7, 0xF7, 0xA8, 0xF7, 0xC7, 0xE5, 0x02, /* 0x210 */ 0x07, 0x98, 0x8F, 0x36, 0x08, 0x95, 0xE7, 0xE2, /* 0x218 */ 0x37, 0x96, 0x0D, 0x36, 0x75, 0x9E, 0xFB, 0x0E, /* 0x220 */ 0x72, 0xB1, 0x1D, 0x9B, 0xBC, 0x03, 0xF9, 0x49, /* 0x228 */ 0x05, 0xD8, 0x81, 0xDD, 0x05, 0xB4, 0x2A, 0xD6, /* 0x230 */ 0x41, 0xE9, 0xAC, 0x01, 0x76, 0x95, 0x0A, 0x0F, /* 0x238 */ 0xD8, 0xDF, 0xD5, 0xBD, 0x12, 0x1F, 0x35, 0x2F, /* 0x240 */ 0x28, 0x17, 0x6C, 0xD2, 0x98, 0xC1, 0xA8, 0x09, /* 0x248 */ 0x64, 0x77, 0x6E, 0x47, 0x37, 0xBA, 0xCE, 0xAC, /* 0x250 */ 0x59, 0x5E, 0x68, 0x9D, 0x7F, 0x72, 0xD6, 0x89, /* 0x258 */ 0xC5, 0x06, 0x41, 0x29, 0x3E, 0x59, 0x3E, 0xDD, /* 0x260 */ 0x26, 0xF5, 0x24, 0xC9, 0x11, 0xA7, 0x5A, 0xA3, /* 0x268 */ 0x4C, 0x40, 0x1F, 0x46, 0xA1, 0x99, 0xB5, 0xA7, /* 0x270 */ 0x3A, 0x51, 0x6E, 0x86, 0x3B, 0x9E, 0x7D, 0x72, /* 0x278 */ 0xA7, 0x12, 0x05, 0x78, 0x59, 0xED, 0x3E, 0x51, /* 0x280 */ 0x78, 0x15, 0x0B, 0x03, 0x8F, 0x8D, 0xD0, 0x2F, /* 0x288 */ 0x05, 0xB2, 0x3E, 0x7B, 0x4A, 0x1C, 0x4B, 0x73, /* 0x290 */ 0x05, 0x12, 0xFC, 0xC6, 0xEA, 0xE0, 0x50, 0x13, /* 0x298 */ 0x7C, 0x43, 0x93, 0x74, 0xB3, 0xCA, 0x74, 0xE7, /* 0x2a0 */ 0x8E, 0x1F, 0x01, 0x08, 0xD0, 0x30, 0xD4, 0x5B, /* 0x2a8 */ 0x71, 0x36, 0xB4, 0x07, 0xBA, 0xC1, 0x30, 0x30, /* 0x2b0 */ 0x5C, 0x48, 0xB7, 0x82, 0x3B, 0x98, 0xA6, 0x7D, /* 0x2b8 */ 0x60, 0x8A, 0xA2, 0xA3, 0x29, 0x82, 0xCC, 0xBA, /* 0x2c0 */ 0xBD, 0x83, 0x04, 0x1B, 0xA2, 0x83, 0x03, 0x41, /* 0x2c8 */ 0xA1, 0xD6, 0x05, 0xF1, 0x1B, 0xC2, 0xB6, 0xF0, /* 0x2d0 */ 0xA8, 0x7C, 0x86, 0x3B, 0x46, 0xA8, 0x48, 0x2A, /* 0x2d8 */ 0x88, 0xDC, 0x76, 0x9A, 0x76, 0xBF, 0x1F, 0x6A, /* 0x2e0 */ 0xA5, 0x3D, 0x19, 0x8F, 0xEB, 0x38, 0xF3, 0x64, /* 0x2e8 */ 0xDE, 0xC8, 0x2B, 0x0D, 0x0A, 0x28, 0xFF, 0xF7, /* 0x2f0 */ 0xDB, 0xE2, 0x15, 0x42, 0xD4, 0x22, 0xD0, 0x27, /* 0x2f8 */ 0x5D, 0xE1, 0x79, 0xFE, 0x18, 0xE7, 0x70, 0x88, /* 0x300 */ 0xAD, 0x4E, 0xE6, 0xD9, 0x8B, 0x3A, 0xC6, 0xDD, /* 0x308 */ 0x27, 0x51, 0x6E, 0xFF, 0xBC, 0x64, 0xF5, 0x33, /* 0x310 */ 0x43, 0x4F, 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, /* 0x318 */ 0x42, 0x30, 0x40, 0x30, 0x0E, 0x06, 0x03, 0x55, /* 0x320 */ 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, /* 0x328 */ 0x02, 0x01, 0x06, 0x30, 0x0F, 0x06, 0x03, 0x55, /* 0x330 */ 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x05, 0x30, /* 0x338 */ 0x03, 0x01, 0x01, 0xFF, 0x30, 0x1D, 0x06, 0x03, /* 0x340 */ 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0x79, /* 0x348 */ 0xB4, 0x59, 0xE6, 0x7B, 0xB6, 0xE5, 0xE4, 0x01, /* 0x350 */ 0x73, 0x80, 0x08, 0x88, 0xC8, 0x1A, 0x58, 0xF6, /* 0x358 */ 0xE9, 0x9B, 0x6E, 0x30, 0x0D, 0x06, 0x09, 0x2A, /* 0x360 */ 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0B, /* 0x368 */ 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x55, /* 0x370 */ 0x1F, 0x58, 0xA9, 0xBC, 0xB2, 0xA8, 0x50, 0xD0, /* 0x378 */ 0x0C, 0xB1, 0xD8, 0x1A, 0x69, 0x20, 0x27, 0x29, /* 0x380 */ 0x08, 0xAC, 0x61, 0x75, 0x5C, 0x8A, 0x6E, 0xF8, /* 0x388 */ 0x82, 0xE5, 0x69, 0x2F, 0xD5, 0xF6, 0x56, 0x4B, /* 0x390 */ 0xB9, 0xB8, 0x73, 0x10, 0x59, 0xD3, 0x21, 0x97, /* 0x398 */ 0x7E, 0xE7, 0x4C, 0x71, 0xFB, 0xB2, 0xD2, 0x60, /* 0x3a0 */ 0xAD, 0x39, 0xA8, 0x0B, 0xEA, 0x17, 0x21, 0x56, /* 0x3a8 */ 0x85, 0xF1, 0x50, 0x0E, 0x59, 0xEB, 0xCE, 0xE0, /* 0x3b0 */ 0x59, 0xE9, 0xBA, 0xC9, 0x15, 0xEF, 0x86, 0x9D, /* 0x3b8 */ 0x8F, 0x84, 0x80, 0xF6, 0xE4, 0xE9, 0x91, 0x90, /* 0x3c0 */ 0xDC, 0x17, 0x9B, 0x62, 0x1B, 0x45, 0xF0, 0x66, /* 0x3c8 */ 0x95, 0xD2, 0x7C, 0x6F, 0xC2, 0xEA, 0x3B, 0xEF, /* 0x3d0 */ 0x1F, 0xCF, 0xCB, 0xD6, 0xAE, 0x27, 0xF1, 0xA9, /* 0x3d8 */ 0xB0, 0xC8, 0xAE, 0xFD, 0x7D, 0x7E, 0x9A, 0xFA, /* 0x3e0 */ 0x22, 0x04, 0xEB, 0xFF, 0xD9, 0x7F, 0xEA, 0x91, /* 0x3e8 */ 0x2B, 0x22, 0xB1, 0x17, 0x0E, 0x8F, 0xF2, 0x8A, /* 0x3f0 */ 0x34, 0x5B, 0x58, 0xD8, 0xFC, 0x01, 0xC9, 0x54, /* 0x3f8 */ 0xB9, 0xB8, 0x26, 0xCC, 0x8A, 0x88, 0x33, 0x89, /* 0x400 */ 0x4C, 0x2D, 0x84, 0x3C, 0x82, 0xDF, 0xEE, 0x96, /* 0x408 */ 0x57, 0x05, 0xBA, 0x2C, 0xBB, 0xF7, 0xC4, 0xB7, /* 0x410 */ 0xC7, 0x4E, 0x3B, 0x82, 0xBE, 0x31, 0xC8, 0x22, /* 0x418 */ 0x73, 0x73, 0x92, 0xD1, 0xC2, 0x80, 0xA4, 0x39, /* 0x420 */ 0x39, 0x10, 0x33, 0x23, 0x82, 0x4C, 0x3C, 0x9F, /* 0x428 */ 0x86, 0xB2, 0x55, 0x98, 0x1D, 0xBE, 0x29, 0x86, /* 0x430 */ 0x8C, 0x22, 0x9B, 0x9E, 0xE2, 0x6B, 0x3B, 0x57, /* 0x438 */ 0x3A, 0x82, 0x70, 0x4D, 0xDC, 0x09, 0xC7, 0x89, /* 0x440 */ 0xCB, 0x0A, 0x07, 0x4D, 0x6C, 0xE8, 0x5D, 0x8E, /* 0x448 */ 0xC9, 0xEF, 0xCE, 0xAB, 0xC7, 0xBB, 0xB5, 0x2B, /* 0x450 */ 0x4E, 0x45, 0xD6, 0x4A, 0xD0, 0x26, 0xCC, 0xE5, /* 0x458 */ 0x72, 0xCA, 0x08, 0x6A, 0xA5, 0x95, 0xE3, 0x15, /* 0x460 */ 0xA1, 0xF7, 0xA4, 0xED, 0xC9, 0x2C, 0x5F, 0xA5, /* 0x468 */ 0xFB, 0xFF, 0xAC, 0x28, 0x02, 0x2E, 0xBE, 0xD7, /* 0x470 */ 0x7B, 0xBB, 0xE3, 0x71, 0x7B, 0x90, 0x16, 0xD3, /* 0x478 */ 0x07, 0x5E, 0x46, 0x53, 0x7C, 0x37, 0x07, 0x42, /* 0x480 */ 0x8C, 0xD3, 0xC4, 0x96, 0x9C, 0xD5, 0x99, 0xB5, /* 0x488 */ 0x2A, 0xE0, 0x95, 0x1A, 0x80, 0x48, 0xAE, 0x4C, /* 0x490 */ 0x39, 0x07, 0xCE, 0xCC, 0x47, 0xA4, 0x52, 0x95, /* 0x498 */ 0x2B, 0xBA, 0xB8, 0xFB, 0xAD, 0xD2, 0x33, 0x53, /* 0x4a0 */ 0x7D, 0xE5, 0x1D, 0x4D, 0x6D, 0xD5, 0xA1, 0xB1, /* 0x4a8 */ 0xC7, 0x42, 0x6F, 0xE6, 0x40, 0x27, 0x35, 0x5C, /* 0x4b0 */ 0xA3, 0x28, 0xB7, 0x07, 0x8D, 0xE7, 0x8D, 0x33, /* 0x4b8 */ 0x90, 0xE7, 0x23, 0x9F, 0xFB, 0x50, 0x9C, 0x79, /* 0x4c0 */ 0x6C, 0x46, 0xD5, 0xB4, 0x15, 0xB3, 0x96, 0x6E, /* 0x4c8 */ 0x7E, 0x9B, 0x0C, 0x96, 0x3A, 0xB8, 0x52, 0x2D, /* 0x4d0 */ 0x3F, 0xD6, 0x5B, 0xE1, 0xFB, 0x08, 0xC2, 0x84, /* 0x4d8 */ 0xFE, 0x24, 0xA8, 0xA3, 0x89, 0xDA, 0xAC, 0x6A, /* 0x4e0 */ 0xE1, 0x18, 0x2A, 0xB1, 0xA8, 0x43, 0x61, 0x5B, /* 0x4e8 */ 0xD3, 0x1F, 0xDC, 0x3B, 0x8D, 0x76, 0xF2, 0x2D, /* 0x4f0 */ 0xE8, 0x8D, 0x75, 0xDF, 0x17, 0x33, 0x6C, 0x3D, /* 0x4f8 */ 0x53, 0xFB, 0x7B, 0xCB, 0x41, 0x5F, 0xFF, 0xDC, /* 0x500 */ 0xA2, 0xD0, 0x61, 0x38, 0xE1, 0x96, 0xB8, 0xAC, /* 0x508 */ 0x5D, 0x8B, 0x37, 0xD7, 0x75, 0xD5, 0x33, 0xC0, /* 0x510 */ 0x99, 0x11, 0xAE, 0x9D, 0x41, 0xC1, 0x72, 0x75, /* 0x518 */ 0x84, 0xBE, 0x02, 0x41, 0x42, 0x5F, 0x67, 0x24, /* 0x520 */ 0x48, 0x94, 0xD1, 0x9B, 0x27, 0xBE, 0x07, 0x3F, /* 0x528 */ 0xB9, 0xB8, 0x4F, 0x81, 0x74, 0x51, 0xE1, 0x7A, /* 0x530 */ 0xB7, 0xED, 0x9D, 0x23, 0xE2, 0xBE, 0xE0, 0xD5, /* 0x538 */ 0x28, 0x04, 0x13, 0x3C, 0x31, 0x03, 0x9E, 0xDD, /* 0x540 */ 0x7A, 0x6C, 0x8F, 0xC6, 0x07, 0x18, 0xC6, 0x7F, /* 0x548 */ 0xDE, 0x47, 0x8E, 0x3F, 0x28, 0x9E, 0x04, 0x06, /* 0x550 */ 0xCF, 0xA5, 0x54, 0x34, 0x77, 0xBD, 0xEC, 0x89, /* 0x558 */ 0x9B, 0xE9, 0x17, 0x43, 0xDF, 0x5B, 0xDB, 0x5F, /* 0x560 */ 0xFE, 0x8E, 0x1E, 0x57, 0xA2, 0xCD, 0x40, 0x9D, /* 0x568 */ 0x7E, 0x62, 0x22, 0xDA, 0xDE, 0x18, 0x27, }; static const lws_ss_x509_t _ss_x509_isrg_root_x1 = { .vhost_name = "isrg_root_x1", .ca_der = _ss_der_isrg_root_x1, .ca_der_len = 1391, }; static const lws_ss_trust_store_t _ss_ts_le_via_isrg = { .name = "le_via_isrg", .count = 1, .ssx509 = { &_ss_x509_isrg_root_x1, } }; static const lws_ss_policy_t _ssp_captive_portal_detect = { .streamtype = "captive_portal_detect", .endpoint = "connectivitycheck.android.com", .u = { .http = { .method = "GET", .url = "generate_204", .resp_expect = 204, .fail_redirect = 1, } }, .flags = 0x1, .priority = 0x0, .port = 80, .protocol = 0, }, _ssp_test_stream = { .next = (void *)&_ssp_captive_portal_detect, .streamtype = "test_stream", .endpoint = "warmcat.com", .u = { .http = { .method = "GET", .url = "index.html", } }, .retry_bo = &_rbo_0, .flags = 0x11, .priority = 0x0, .port = 443, .protocol = 1, .trust = {.store = &_ss_ts_le_via_isrg}, }; #define _ss_static_policy_entry _ssp_test_stream /* estimated footprint 2043 (when sizeof void * = 8) */ libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-wrover-kit/partitions.csv000066400000000000000000000003021476025525100301230ustar00rootroot00000000000000# ESP-IDF Partition Table # Name, Type, SubType, Offset, Size, Flags nvs, data, nvs, 0x9000, 0x6000, phy_init, data, phy, 0xf000, 0x1000, factory, app, factory, 0x10000, 2M, libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-wrover-kit/rgb565/000077500000000000000000000000001476025525100262315ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-wrover-kit/rgb565/rgb565.c000066400000000000000000000006531476025525100274130ustar00rootroot00000000000000/* * gcc /tmp/q.c && convert cat-565.png -depth 8 rgb:- | ./a.out > cat-565.h */ #include int main() { int r, g, b, w, m = 0; while (1) { r = getchar(); g = getchar(); b = getchar(); if (r == EOF || g == EOF || b == EOF) return r == EOF; w = (b >> 3) | ((g >> 2) << 5) | ((r >> 3) << 11); printf("0x%02X, 0x%02X, ", (w >> 8) & 0xFF, w & 0xFF); if (((++m) & 3) == 0) printf("\n"); } } libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-wrover-kit/sdkconfig000066400000000000000000001004621476025525100271140ustar00rootroot00000000000000# # Automatically generated file. DO NOT EDIT. # Espressif IoT Development Framework (ESP-IDF) Project Configuration # CONFIG_IDF_CMAKE=y CONFIG_IDF_TARGET="esp32" CONFIG_IDF_TARGET_ESP32=y CONFIG_IDF_FIRMWARE_CHIP_ID=0x0000 # # SDK tool configuration # CONFIG_SDK_TOOLPREFIX="xtensa-esp32-elf-" # CONFIG_SDK_TOOLCHAIN_SUPPORTS_TIME_WIDE_64_BITS is not set # end of SDK tool configuration # # Build type # CONFIG_APP_BUILD_TYPE_APP_2NDBOOT=y # CONFIG_APP_BUILD_TYPE_ELF_RAM is not set CONFIG_APP_BUILD_GENERATE_BINARIES=y CONFIG_APP_BUILD_BOOTLOADER=y CONFIG_APP_BUILD_USE_FLASH_SECTIONS=y # end of Build type # # Application manager # CONFIG_APP_COMPILE_TIME_DATE=y # CONFIG_APP_EXCLUDE_PROJECT_VER_VAR is not set # CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR is not set # CONFIG_APP_PROJECT_VER_FROM_CONFIG is not set CONFIG_APP_RETRIEVE_LEN_ELF_SHA=16 # end of Application manager # # Bootloader config # CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y # CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG is not set # CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_PERF is not set # CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_NONE is not set # CONFIG_BOOTLOADER_LOG_LEVEL_NONE is not set # CONFIG_BOOTLOADER_LOG_LEVEL_ERROR is not set # CONFIG_BOOTLOADER_LOG_LEVEL_WARN is not set CONFIG_BOOTLOADER_LOG_LEVEL_INFO=y # CONFIG_BOOTLOADER_LOG_LEVEL_DEBUG is not set # CONFIG_BOOTLOADER_LOG_LEVEL_VERBOSE is not set CONFIG_BOOTLOADER_LOG_LEVEL=3 # CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_8V is not set CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_9V=y # CONFIG_BOOTLOADER_FACTORY_RESET is not set # CONFIG_BOOTLOADER_APP_TEST is not set CONFIG_BOOTLOADER_WDT_ENABLE=y # CONFIG_BOOTLOADER_WDT_DISABLE_IN_USER_CODE is not set CONFIG_BOOTLOADER_WDT_TIME_MS=9000 # CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE is not set # CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP is not set CONFIG_BOOTLOADER_RESERVE_RTC_SIZE=0 # CONFIG_BOOTLOADER_CUSTOM_RESERVE_RTC is not set # end of Bootloader config # # Security features # # CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT is not set # CONFIG_SECURE_BOOT is not set # CONFIG_SECURE_FLASH_ENC_ENABLED is not set # end of Security features # # Serial flasher config # CONFIG_ESPTOOLPY_BAUD_OTHER_VAL=115200 # CONFIG_ESPTOOLPY_FLASHMODE_QIO is not set # CONFIG_ESPTOOLPY_FLASHMODE_QOUT is not set CONFIG_ESPTOOLPY_FLASHMODE_DIO=y # CONFIG_ESPTOOLPY_FLASHMODE_DOUT is not set CONFIG_ESPTOOLPY_FLASHMODE="dio" # CONFIG_ESPTOOLPY_FLASHFREQ_80M is not set CONFIG_ESPTOOLPY_FLASHFREQ_40M=y # CONFIG_ESPTOOLPY_FLASHFREQ_26M is not set # CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set CONFIG_ESPTOOLPY_FLASHFREQ="40m" # CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set # CONFIG_ESPTOOLPY_FLASHSIZE_2MB is not set CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y # CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set # CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set CONFIG_ESPTOOLPY_FLASHSIZE="4MB" CONFIG_ESPTOOLPY_FLASHSIZE_DETECT=y CONFIG_ESPTOOLPY_BEFORE_RESET=y # CONFIG_ESPTOOLPY_BEFORE_NORESET is not set CONFIG_ESPTOOLPY_BEFORE="default_reset" CONFIG_ESPTOOLPY_AFTER_RESET=y # CONFIG_ESPTOOLPY_AFTER_NORESET is not set CONFIG_ESPTOOLPY_AFTER="hard_reset" # CONFIG_ESPTOOLPY_MONITOR_BAUD_9600B is not set # CONFIG_ESPTOOLPY_MONITOR_BAUD_57600B is not set CONFIG_ESPTOOLPY_MONITOR_BAUD_115200B=y # CONFIG_ESPTOOLPY_MONITOR_BAUD_230400B is not set # CONFIG_ESPTOOLPY_MONITOR_BAUD_921600B is not set # CONFIG_ESPTOOLPY_MONITOR_BAUD_2MB is not set # CONFIG_ESPTOOLPY_MONITOR_BAUD_OTHER is not set CONFIG_ESPTOOLPY_MONITOR_BAUD_OTHER_VAL=115200 CONFIG_ESPTOOLPY_MONITOR_BAUD=115200 # end of Serial flasher config # # Partition Table # # CONFIG_PARTITION_TABLE_SINGLE_APP is not set # CONFIG_PARTITION_TABLE_TWO_OTA is not set CONFIG_PARTITION_TABLE_CUSTOM=y CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv" CONFIG_PARTITION_TABLE_FILENAME="partitions.csv" CONFIG_PARTITION_TABLE_OFFSET=0x8000 CONFIG_PARTITION_TABLE_MD5=y # end of Partition Table # # Compiler options # CONFIG_COMPILER_OPTIMIZATION_DEFAULT=y # CONFIG_COMPILER_OPTIMIZATION_SIZE is not set # CONFIG_COMPILER_OPTIMIZATION_PERF is not set # CONFIG_COMPILER_OPTIMIZATION_NONE is not set CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y # CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set # CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE is not set # CONFIG_COMPILER_CXX_EXCEPTIONS is not set # CONFIG_COMPILER_CXX_RTTI is not set CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y # CONFIG_COMPILER_STACK_CHECK_MODE_NORM is not set # CONFIG_COMPILER_STACK_CHECK_MODE_STRONG is not set # CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set # CONFIG_COMPILER_WARN_WRITE_STRINGS is not set # CONFIG_COMPILER_DISABLE_GCC8_WARNINGS is not set # end of Compiler options # # Component config # # # Application Level Tracing # # CONFIG_APPTRACE_DEST_TRAX is not set CONFIG_APPTRACE_DEST_NONE=y CONFIG_APPTRACE_LOCK_ENABLE=y # end of Application Level Tracing # # Bluetooth # # CONFIG_BT_ENABLED is not set CONFIG_BTDM_CTRL_BR_EDR_SCO_DATA_PATH_EFF=0 CONFIG_BTDM_CTRL_BLE_MAX_CONN_EFF=0 CONFIG_BTDM_CTRL_BR_EDR_MAX_ACL_CONN_EFF=0 CONFIG_BTDM_CTRL_BR_EDR_MAX_SYNC_CONN_EFF=0 CONFIG_BTDM_CTRL_PINNED_TO_CORE=0 CONFIG_BTDM_BLE_SLEEP_CLOCK_ACCURACY_INDEX_EFF=1 CONFIG_BT_RESERVE_DRAM=0 # end of Bluetooth # # CoAP Configuration # CONFIG_COAP_MBEDTLS_PSK=y # CONFIG_COAP_MBEDTLS_PKI is not set # CONFIG_COAP_MBEDTLS_DEBUG is not set CONFIG_COAP_LOG_DEFAULT_LEVEL=0 # end of CoAP Configuration # # Driver configurations # # # ADC configuration # # CONFIG_ADC_FORCE_XPD_FSM is not set CONFIG_ADC_DISABLE_DAC=y # end of ADC configuration # # SPI configuration # # CONFIG_SPI_MASTER_IN_IRAM is not set CONFIG_SPI_MASTER_ISR_IN_IRAM=y # CONFIG_SPI_SLAVE_IN_IRAM is not set CONFIG_SPI_SLAVE_ISR_IN_IRAM=y # end of SPI configuration # # UART configuration # # CONFIG_UART_ISR_IN_IRAM is not set # end of UART configuration # # RTCIO configuration # # CONFIG_RTCIO_SUPPORT_RTC_GPIO_DESC is not set # end of RTCIO configuration # end of Driver configurations # # eFuse Bit Manager # # CONFIG_EFUSE_CUSTOM_TABLE is not set # CONFIG_EFUSE_VIRTUAL is not set # CONFIG_EFUSE_CODE_SCHEME_COMPAT_NONE is not set CONFIG_EFUSE_CODE_SCHEME_COMPAT_3_4=y # CONFIG_EFUSE_CODE_SCHEME_COMPAT_REPEAT is not set CONFIG_EFUSE_MAX_BLK_LEN=192 # end of eFuse Bit Manager # # ESP-TLS # CONFIG_ESP_TLS_USING_MBEDTLS=y # CONFIG_ESP_TLS_USE_SECURE_ELEMENT is not set # CONFIG_ESP_TLS_SERVER is not set # CONFIG_ESP_TLS_PSK_VERIFICATION is not set # end of ESP-TLS # # ESP32-specific # CONFIG_ESP32_REV_MIN_0=y # CONFIG_ESP32_REV_MIN_1 is not set # CONFIG_ESP32_REV_MIN_2 is not set # CONFIG_ESP32_REV_MIN_3 is not set CONFIG_ESP32_REV_MIN=0 CONFIG_ESP32_DPORT_WORKAROUND=y # CONFIG_ESP32_DEFAULT_CPU_FREQ_80 is not set CONFIG_ESP32_DEFAULT_CPU_FREQ_160=y # CONFIG_ESP32_DEFAULT_CPU_FREQ_240 is not set CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=160 # CONFIG_ESP32_SPIRAM_SUPPORT is not set # CONFIG_ESP32_TRAX is not set CONFIG_ESP32_TRACEMEM_RESERVE_DRAM=0x0 # CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_TWO is not set CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_FOUR=y CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES=4 # CONFIG_ESP32_ULP_COPROC_ENABLED is not set CONFIG_ESP32_ULP_COPROC_RESERVE_MEM=0 CONFIG_ESP32_DEBUG_OCDAWARE=y CONFIG_ESP32_BROWNOUT_DET=y CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_0=y # CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_1 is not set # CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_2 is not set # CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_3 is not set # CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_4 is not set # CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_5 is not set # CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_6 is not set # CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_7 is not set CONFIG_ESP32_BROWNOUT_DET_LVL=0 CONFIG_ESP32_REDUCE_PHY_TX_POWER=y CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1=y # CONFIG_ESP32_TIME_SYSCALL_USE_RTC is not set # CONFIG_ESP32_TIME_SYSCALL_USE_FRC1 is not set # CONFIG_ESP32_TIME_SYSCALL_USE_NONE is not set CONFIG_ESP32_RTC_CLK_SRC_INT_RC=y # CONFIG_ESP32_RTC_CLK_SRC_EXT_CRYS is not set # CONFIG_ESP32_RTC_CLK_SRC_EXT_OSC is not set # CONFIG_ESP32_RTC_CLK_SRC_INT_8MD256 is not set CONFIG_ESP32_RTC_CLK_CAL_CYCLES=1024 CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY=2000 CONFIG_ESP32_XTAL_FREQ_40=y # CONFIG_ESP32_XTAL_FREQ_26 is not set # CONFIG_ESP32_XTAL_FREQ_AUTO is not set CONFIG_ESP32_XTAL_FREQ=40 # CONFIG_ESP32_DISABLE_BASIC_ROM_CONSOLE is not set # CONFIG_ESP32_NO_BLOBS is not set # CONFIG_ESP32_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set # CONFIG_ESP32_USE_FIXED_STATIC_RAM_SIZE is not set CONFIG_ESP32_DPORT_DIS_INTERRUPT_LVL=5 # end of ESP32-specific # # Power Management # # CONFIG_PM_ENABLE is not set # end of Power Management # # ADC-Calibration # CONFIG_ADC_CAL_EFUSE_TP_ENABLE=y CONFIG_ADC_CAL_EFUSE_VREF_ENABLE=y CONFIG_ADC_CAL_LUT_ENABLE=y # end of ADC-Calibration # # Common ESP-related # CONFIG_ESP_ERR_TO_NAME_LOOKUP=y CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE=32 CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=2304 CONFIG_ESP_MAIN_TASK_STACK_SIZE=6584 CONFIG_ESP_IPC_TASK_STACK_SIZE=1024 CONFIG_ESP_IPC_USES_CALLERS_PRIORITY=y CONFIG_ESP_MINIMAL_SHARED_STACK_SIZE=2048 CONFIG_ESP_CONSOLE_UART_DEFAULT=y # CONFIG_ESP_CONSOLE_UART_CUSTOM is not set # CONFIG_ESP_CONSOLE_UART_NONE is not set CONFIG_ESP_CONSOLE_UART_NUM=0 CONFIG_ESP_CONSOLE_UART_TX_GPIO=1 CONFIG_ESP_CONSOLE_UART_RX_GPIO=3 CONFIG_ESP_CONSOLE_UART_BAUDRATE=115200 CONFIG_ESP_INT_WDT=y CONFIG_ESP_INT_WDT_TIMEOUT_MS=300 CONFIG_ESP_INT_WDT_CHECK_CPU1=y CONFIG_ESP_TASK_WDT=y # CONFIG_ESP_TASK_WDT_PANIC is not set CONFIG_ESP_TASK_WDT_TIMEOUT_S=5 CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=y CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1=y # CONFIG_ESP_PANIC_HANDLER_IRAM is not set CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_STA=y CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_AP=y CONFIG_ESP_MAC_ADDR_UNIVERSE_BT=y CONFIG_ESP_MAC_ADDR_UNIVERSE_ETH=y # end of Common ESP-related # # Ethernet # CONFIG_ETH_ENABLED=y CONFIG_ETH_USE_ESP32_EMAC=y CONFIG_ETH_PHY_INTERFACE_RMII=y # CONFIG_ETH_PHY_INTERFACE_MII is not set CONFIG_ETH_RMII_CLK_INPUT=y # CONFIG_ETH_RMII_CLK_OUTPUT is not set CONFIG_ETH_RMII_CLK_IN_GPIO=0 CONFIG_ETH_DMA_BUFFER_SIZE=512 CONFIG_ETH_DMA_RX_BUFFER_NUM=10 CONFIG_ETH_DMA_TX_BUFFER_NUM=10 CONFIG_ETH_USE_SPI_ETHERNET=y # CONFIG_ETH_SPI_ETHERNET_DM9051 is not set # CONFIG_ETH_USE_OPENETH is not set # end of Ethernet # # Event Loop Library # # CONFIG_ESP_EVENT_LOOP_PROFILING is not set CONFIG_ESP_EVENT_POST_FROM_ISR=y CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR=y # end of Event Loop Library # # GDB Stub # # end of GDB Stub # # ESP HTTP client # CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS=y # CONFIG_ESP_HTTP_CLIENT_ENABLE_BASIC_AUTH is not set # end of ESP HTTP client # # HTTP Server # CONFIG_HTTPD_MAX_REQ_HDR_LEN=512 CONFIG_HTTPD_MAX_URI_LEN=512 CONFIG_HTTPD_ERR_RESP_NO_DELAY=y CONFIG_HTTPD_PURGE_BUF_LEN=32 # CONFIG_HTTPD_LOG_PURGE_DATA is not set # CONFIG_HTTPD_WS_SUPPORT is not set # end of HTTP Server # # ESP HTTPS OTA # # CONFIG_OTA_ALLOW_HTTP is not set # end of ESP HTTPS OTA # # ESP HTTPS server # # CONFIG_ESP_HTTPS_SERVER_ENABLE is not set # end of ESP HTTPS server # # ESP NETIF Adapter # CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL=120 CONFIG_ESP_NETIF_TCPIP_LWIP=y # CONFIG_ESP_NETIF_LOOPBACK is not set CONFIG_ESP_NETIF_TCPIP_ADAPTER_COMPATIBLE_LAYER=y # end of ESP NETIF Adapter # # ESP System Settings # # CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT is not set CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y # CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set # CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set # end of ESP System Settings # # High resolution timer (esp_timer) # # CONFIG_ESP_TIMER_PROFILING is not set CONFIG_ESP_TIMER_TASK_STACK_SIZE=6584 # CONFIG_ESP_TIMER_IMPL_FRC2 is not set CONFIG_ESP_TIMER_IMPL_TG0_LAC=y # end of High resolution timer (esp_timer) # # Wi-Fi # CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10 CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=32 # CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1 CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32 # CONFIG_ESP32_WIFI_CSI_ENABLED is not set CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y CONFIG_ESP32_WIFI_TX_BA_WIN=6 CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y CONFIG_ESP32_WIFI_RX_BA_WIN=6 CONFIG_ESP32_WIFI_NVS_ENABLED=y CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0=y # CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_1 is not set CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752 CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32 # CONFIG_ESP32_WIFI_DEBUG_LOG_ENABLE is not set CONFIG_ESP32_WIFI_IRAM_OPT=y CONFIG_ESP32_WIFI_RX_IRAM_OPT=y CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE=y # end of Wi-Fi # # PHY # CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y # CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 CONFIG_ESP32_PHY_MAX_TX_POWER=20 # end of PHY # # Core dump # # CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set # CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y # end of Core dump # # FAT Filesystem support # # CONFIG_FATFS_CODEPAGE_DYNAMIC is not set CONFIG_FATFS_CODEPAGE_437=y # CONFIG_FATFS_CODEPAGE_720 is not set # CONFIG_FATFS_CODEPAGE_737 is not set # CONFIG_FATFS_CODEPAGE_771 is not set # CONFIG_FATFS_CODEPAGE_775 is not set # CONFIG_FATFS_CODEPAGE_850 is not set # CONFIG_FATFS_CODEPAGE_852 is not set # CONFIG_FATFS_CODEPAGE_855 is not set # CONFIG_FATFS_CODEPAGE_857 is not set # CONFIG_FATFS_CODEPAGE_860 is not set # CONFIG_FATFS_CODEPAGE_861 is not set # CONFIG_FATFS_CODEPAGE_862 is not set # CONFIG_FATFS_CODEPAGE_863 is not set # CONFIG_FATFS_CODEPAGE_864 is not set # CONFIG_FATFS_CODEPAGE_865 is not set # CONFIG_FATFS_CODEPAGE_866 is not set # CONFIG_FATFS_CODEPAGE_869 is not set # CONFIG_FATFS_CODEPAGE_932 is not set # CONFIG_FATFS_CODEPAGE_936 is not set # CONFIG_FATFS_CODEPAGE_949 is not set # CONFIG_FATFS_CODEPAGE_950 is not set CONFIG_FATFS_CODEPAGE=437 CONFIG_FATFS_LFN_NONE=y # CONFIG_FATFS_LFN_HEAP is not set # CONFIG_FATFS_LFN_STACK is not set CONFIG_FATFS_FS_LOCK=0 CONFIG_FATFS_TIMEOUT_MS=10000 CONFIG_FATFS_PER_FILE_CACHE=y # end of FAT Filesystem support # # Modbus configuration # CONFIG_FMB_COMM_MODE_RTU_EN=y CONFIG_FMB_COMM_MODE_ASCII_EN=y CONFIG_FMB_MASTER_TIMEOUT_MS_RESPOND=150 CONFIG_FMB_MASTER_DELAY_MS_CONVERT=200 CONFIG_FMB_QUEUE_LENGTH=20 CONFIG_FMB_SERIAL_TASK_STACK_SIZE=2048 CONFIG_FMB_SERIAL_BUF_SIZE=256 CONFIG_FMB_SERIAL_ASCII_BITS_PER_SYMB=8 CONFIG_FMB_SERIAL_ASCII_TIMEOUT_RESPOND_MS=1000 CONFIG_FMB_SERIAL_TASK_PRIO=10 # CONFIG_FMB_CONTROLLER_SLAVE_ID_SUPPORT is not set CONFIG_FMB_CONTROLLER_NOTIFY_TIMEOUT=20 CONFIG_FMB_CONTROLLER_NOTIFY_QUEUE_SIZE=20 CONFIG_FMB_CONTROLLER_STACK_SIZE=4096 CONFIG_FMB_EVENT_QUEUE_TIMEOUT=20 CONFIG_FMB_TIMER_PORT_ENABLED=y CONFIG_FMB_TIMER_GROUP=0 CONFIG_FMB_TIMER_INDEX=0 # CONFIG_FMB_TIMER_ISR_IN_IRAM is not set # end of Modbus configuration # # FreeRTOS # # CONFIG_FREERTOS_UNICORE is not set CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF CONFIG_FREERTOS_CORETIMER_0=y # CONFIG_FREERTOS_CORETIMER_1 is not set CONFIG_FREERTOS_HZ=100 CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION=y # CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set # CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y # CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 CONFIG_FREERTOS_ASSERT_FAIL_ABORT=y # CONFIG_FREERTOS_ASSERT_FAIL_PRINT_CONTINUE is not set # CONFIG_FREERTOS_ASSERT_DISABLE is not set CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1536 CONFIG_FREERTOS_ISR_STACKSIZE=1536 # CONFIG_FREERTOS_LEGACY_HOOKS is not set CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16 # CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION is not set CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=6048 CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 # CONFIG_FREERTOS_USE_TRACE_FACILITY is not set # CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER=y CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y # CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set CONFIG_FREERTOS_DEBUG_OCDAWARE=y # CONFIG_FREERTOS_FPU_IN_ISR is not set # end of FreeRTOS # # Heap memory debugging # CONFIG_HEAP_POISONING_DISABLED=y # CONFIG_HEAP_POISONING_LIGHT is not set # CONFIG_HEAP_POISONING_COMPREHENSIVE is not set CONFIG_HEAP_TRACING_OFF=y # CONFIG_HEAP_TRACING_STANDALONE is not set # CONFIG_HEAP_TRACING_TOHOST is not set # CONFIG_HEAP_ABORT_WHEN_ALLOCATION_FAILS is not set # end of Heap memory debugging # # jsmn # # CONFIG_JSMN_PARENT_LINKS is not set # CONFIG_JSMN_STRICT is not set # end of jsmn # # libsodium # # end of libsodium # # Log output # # CONFIG_LOG_DEFAULT_LEVEL_NONE is not set # CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set # CONFIG_LOG_DEFAULT_LEVEL_WARN is not set CONFIG_LOG_DEFAULT_LEVEL_INFO=y # CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set # CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set CONFIG_LOG_DEFAULT_LEVEL=3 CONFIG_LOG_COLORS=y CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y # CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM is not set # end of Log output # # LWIP # CONFIG_LWIP_LOCAL_HOSTNAME="espressif" CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y # CONFIG_LWIP_L2_TO_L3_COPY is not set # CONFIG_LWIP_IRAM_OPTIMIZATION is not set CONFIG_LWIP_TIMERS_ONDEMAND=y CONFIG_LWIP_MAX_SOCKETS=10 # CONFIG_LWIP_USE_ONLY_LWIP_SELECT is not set CONFIG_LWIP_SO_REUSE=y CONFIG_LWIP_SO_REUSE_RXTOALL=y # CONFIG_LWIP_SO_RCVBUF is not set # CONFIG_LWIP_NETBUF_RECVINFO is not set CONFIG_LWIP_IP_FRAG=y # CONFIG_LWIP_IP_REASSEMBLY is not set # CONFIG_LWIP_IP_FORWARD is not set # CONFIG_LWIP_STATS is not set # CONFIG_LWIP_ETHARP_TRUST_IP_MAC is not set CONFIG_LWIP_ESP_GRATUITOUS_ARP=y CONFIG_LWIP_GARP_TMR_INTERVAL=60 CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32 CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y # CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set # # DHCP server # CONFIG_LWIP_DHCPS_LEASE_UNIT=60 CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8 # end of DHCP server # CONFIG_LWIP_AUTOIP is not set # CONFIG_LWIP_IPV6_AUTOCONFIG is not set CONFIG_LWIP_NETIF_LOOPBACK=y CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 # # TCP # CONFIG_LWIP_MAX_ACTIVE_TCP=16 CONFIG_LWIP_MAX_LISTENING_TCP=16 CONFIG_LWIP_TCP_MAXRTX=12 CONFIG_LWIP_TCP_SYNMAXRTX=6 CONFIG_LWIP_TCP_MSS=1440 CONFIG_LWIP_TCP_TMR_INTERVAL=250 CONFIG_LWIP_TCP_MSL=60000 CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744 CONFIG_LWIP_TCP_WND_DEFAULT=5744 CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 CONFIG_LWIP_TCP_QUEUE_OOSEQ=y # CONFIG_LWIP_TCP_SACK_OUT is not set # CONFIG_LWIP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES is not set CONFIG_LWIP_TCP_OVERSIZE_MSS=y # CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set # CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set # end of TCP # # UDP # CONFIG_LWIP_MAX_UDP_PCBS=16 CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 # end of UDP CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072 CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY=y # CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU0 is not set # CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU1 is not set CONFIG_LWIP_TCPIP_TASK_AFFINITY=0x7FFFFFFF # CONFIG_LWIP_PPP_SUPPORT is not set # # ICMP # # CONFIG_LWIP_MULTICAST_PING is not set # CONFIG_LWIP_BROADCAST_PING is not set # end of ICMP # # LWIP RAW API # CONFIG_LWIP_MAX_RAW_PCBS=16 # end of LWIP RAW API # # SNTP # CONFIG_LWIP_DHCP_MAX_NTP_SERVERS=1 CONFIG_LWIP_SNTP_UPDATE_DELAY=3600000 # end of SNTP CONFIG_LWIP_ESP_LWIP_ASSERT=y # end of LWIP # # mbedTLS # CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC=y # CONFIG_MBEDTLS_DEFAULT_MEM_ALLOC is not set # CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC is not set CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=y CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN=16384 CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096 # CONFIG_MBEDTLS_DYNAMIC_BUFFER is not set # CONFIG_MBEDTLS_DEBUG is not set # # Certificate Bundle # CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL=y # CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_CMN is not set # CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_NONE is not set # CONFIG_MBEDTLS_CUSTOM_CERTIFICATE_BUNDLE is not set # end of Certificate Bundle # CONFIG_MBEDTLS_ECP_RESTARTABLE is not set # CONFIG_MBEDTLS_CMAC_C is not set CONFIG_MBEDTLS_HARDWARE_AES=y CONFIG_MBEDTLS_HARDWARE_MPI=y CONFIG_MBEDTLS_HARDWARE_SHA=y # CONFIG_MBEDTLS_ATCA_HW_ECDSA_SIGN is not set # CONFIG_MBEDTLS_ATCA_HW_ECDSA_VERIFY is not set CONFIG_MBEDTLS_HAVE_TIME=y # CONFIG_MBEDTLS_HAVE_TIME_DATE is not set CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=y CONFIG_MBEDTLS_SHA512_C=y CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT=y # CONFIG_MBEDTLS_TLS_SERVER_ONLY is not set # CONFIG_MBEDTLS_TLS_CLIENT_ONLY is not set # CONFIG_MBEDTLS_TLS_DISABLED is not set CONFIG_MBEDTLS_TLS_SERVER=y CONFIG_MBEDTLS_TLS_CLIENT=y CONFIG_MBEDTLS_TLS_ENABLED=y # # TLS Key Exchange Methods # # CONFIG_MBEDTLS_PSK_MODES is not set CONFIG_MBEDTLS_KEY_EXCHANGE_RSA=y CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_RSA=y CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE=y CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA=y CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA=y CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA=y CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA=y # end of TLS Key Exchange Methods CONFIG_MBEDTLS_SSL_RENEGOTIATION=y # CONFIG_MBEDTLS_SSL_PROTO_SSL3 is not set CONFIG_MBEDTLS_SSL_PROTO_TLS1=y CONFIG_MBEDTLS_SSL_PROTO_TLS1_1=y CONFIG_MBEDTLS_SSL_PROTO_TLS1_2=y # CONFIG_MBEDTLS_SSL_PROTO_DTLS is not set CONFIG_MBEDTLS_SSL_ALPN=y CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS=y CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS=y # # Symmetric Ciphers # CONFIG_MBEDTLS_AES_C=y # CONFIG_MBEDTLS_CAMELLIA_C is not set # CONFIG_MBEDTLS_DES_C is not set CONFIG_MBEDTLS_RC4_DISABLED=y # CONFIG_MBEDTLS_RC4_ENABLED_NO_DEFAULT is not set # CONFIG_MBEDTLS_RC4_ENABLED is not set # CONFIG_MBEDTLS_BLOWFISH_C is not set # CONFIG_MBEDTLS_XTEA_C is not set CONFIG_MBEDTLS_CCM_C=y CONFIG_MBEDTLS_GCM_C=y # end of Symmetric Ciphers # CONFIG_MBEDTLS_RIPEMD160_C is not set # # Certificates # CONFIG_MBEDTLS_PEM_PARSE_C=y CONFIG_MBEDTLS_PEM_WRITE_C=y CONFIG_MBEDTLS_X509_CRL_PARSE_C=y CONFIG_MBEDTLS_X509_CSR_PARSE_C=y # end of Certificates CONFIG_MBEDTLS_ECP_C=y CONFIG_MBEDTLS_ECDH_C=y CONFIG_MBEDTLS_ECDSA_C=y # CONFIG_MBEDTLS_ECJPAKE_C is not set CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=y CONFIG_MBEDTLS_ECP_NIST_OPTIM=y # CONFIG_MBEDTLS_POLY1305_C is not set # CONFIG_MBEDTLS_CHACHA20_C is not set # CONFIG_MBEDTLS_HKDF_C is not set # CONFIG_MBEDTLS_THREADING_C is not set # CONFIG_MBEDTLS_SECURITY_RISKS is not set # end of mbedTLS # # mDNS # CONFIG_MDNS_MAX_SERVICES=10 CONFIG_MDNS_TASK_PRIORITY=1 CONFIG_MDNS_TASK_STACK_SIZE=4096 # CONFIG_MDNS_TASK_AFFINITY_NO_AFFINITY is not set CONFIG_MDNS_TASK_AFFINITY_CPU0=y # CONFIG_MDNS_TASK_AFFINITY_CPU1 is not set CONFIG_MDNS_TASK_AFFINITY=0x0 CONFIG_MDNS_SERVICE_ADD_TIMEOUT_MS=2000 CONFIG_MDNS_TIMER_PERIOD_MS=100 # end of mDNS # # ESP-MQTT Configurations # CONFIG_MQTT_PROTOCOL_311=y CONFIG_MQTT_TRANSPORT_SSL=y CONFIG_MQTT_TRANSPORT_WEBSOCKET=y CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE=y # CONFIG_MQTT_USE_CUSTOM_CONFIG is not set # CONFIG_MQTT_TASK_CORE_SELECTION_ENABLED is not set # CONFIG_MQTT_CUSTOM_OUTBOX is not set # end of ESP-MQTT Configurations # # Newlib # CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y # CONFIG_NEWLIB_STDOUT_LINE_ENDING_LF is not set # CONFIG_NEWLIB_STDOUT_LINE_ENDING_CR is not set # CONFIG_NEWLIB_STDIN_LINE_ENDING_CRLF is not set # CONFIG_NEWLIB_STDIN_LINE_ENDING_LF is not set CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y # CONFIG_NEWLIB_NANO_FORMAT is not set # end of Newlib # # NVS # # end of NVS # # OpenSSL # # CONFIG_OPENSSL_DEBUG is not set # CONFIG_OPENSSL_ASSERT_DO_NOTHING is not set CONFIG_OPENSSL_ASSERT_EXIT=y # end of OpenSSL # # PThreads # CONFIG_PTHREAD_TASK_PRIO_DEFAULT=5 CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 CONFIG_PTHREAD_STACK_MIN=768 CONFIG_PTHREAD_DEFAULT_CORE_NO_AFFINITY=y # CONFIG_PTHREAD_DEFAULT_CORE_0 is not set # CONFIG_PTHREAD_DEFAULT_CORE_1 is not set CONFIG_PTHREAD_TASK_CORE_DEFAULT=-1 CONFIG_PTHREAD_TASK_NAME_DEFAULT="pthread" # end of PThreads # # SPI Flash driver # # CONFIG_SPI_FLASH_VERIFY_WRITE is not set # CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS=y # CONFIG_SPI_FLASH_DANGEROUS_WRITE_FAILS is not set # CONFIG_SPI_FLASH_DANGEROUS_WRITE_ALLOWED is not set # CONFIG_SPI_FLASH_USE_LEGACY_IMPL is not set # CONFIG_SPI_FLASH_SHARE_SPI1_BUS is not set # CONFIG_SPI_FLASH_BYPASS_BLOCK_ERASE is not set CONFIG_SPI_FLASH_YIELD_DURING_ERASE=y CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS=20 CONFIG_SPI_FLASH_ERASE_YIELD_TICKS=1 # # Auto-detect flash chips # CONFIG_SPI_FLASH_SUPPORT_ISSI_CHIP=y CONFIG_SPI_FLASH_SUPPORT_MXIC_CHIP=y CONFIG_SPI_FLASH_SUPPORT_GD_CHIP=y # end of Auto-detect flash chips # end of SPI Flash driver # # SPIFFS Configuration # CONFIG_SPIFFS_MAX_PARTITIONS=3 # # SPIFFS Cache Configuration # CONFIG_SPIFFS_CACHE=y CONFIG_SPIFFS_CACHE_WR=y # CONFIG_SPIFFS_CACHE_STATS is not set # end of SPIFFS Cache Configuration CONFIG_SPIFFS_PAGE_CHECK=y CONFIG_SPIFFS_GC_MAX_RUNS=10 # CONFIG_SPIFFS_GC_STATS is not set CONFIG_SPIFFS_PAGE_SIZE=256 CONFIG_SPIFFS_OBJ_NAME_LEN=32 # CONFIG_SPIFFS_FOLLOW_SYMLINKS is not set CONFIG_SPIFFS_USE_MAGIC=y CONFIG_SPIFFS_USE_MAGIC_LENGTH=y CONFIG_SPIFFS_META_LENGTH=4 CONFIG_SPIFFS_USE_MTIME=y # # Debug Configuration # # CONFIG_SPIFFS_DBG is not set # CONFIG_SPIFFS_API_DBG is not set # CONFIG_SPIFFS_GC_DBG is not set # CONFIG_SPIFFS_CACHE_DBG is not set # CONFIG_SPIFFS_CHECK_DBG is not set # CONFIG_SPIFFS_TEST_VISUALISATION is not set # end of Debug Configuration # end of SPIFFS Configuration # # TinyUSB # # # Descriptor configuration # CONFIG_USB_DESC_CUSTOM_VID=0x1234 CONFIG_USB_DESC_CUSTOM_PID=0x5678 # end of Descriptor configuration # end of TinyUSB # # Unity unit testing library # CONFIG_UNITY_ENABLE_FLOAT=y CONFIG_UNITY_ENABLE_DOUBLE=y # CONFIG_UNITY_ENABLE_COLOR is not set CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER=y # CONFIG_UNITY_ENABLE_FIXTURE is not set # CONFIG_UNITY_ENABLE_BACKTRACE_ON_FAIL is not set # end of Unity unit testing library # # Virtual file system # CONFIG_VFS_SUPPORT_IO=y CONFIG_VFS_SUPPORT_DIR=y CONFIG_VFS_SUPPORT_SELECT=y CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT=y CONFIG_VFS_SUPPORT_TERMIOS=y # # Host File System I/O (Semihosting) # CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS=1 CONFIG_VFS_SEMIHOSTFS_HOST_PATH_MAX_LEN=128 # end of Host File System I/O (Semihosting) # end of Virtual file system # # Wear Levelling # # CONFIG_WL_SECTOR_SIZE_512 is not set CONFIG_WL_SECTOR_SIZE_4096=y CONFIG_WL_SECTOR_SIZE=4096 # end of Wear Levelling # # Wi-Fi Provisioning Manager # CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES=16 CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT=30 # end of Wi-Fi Provisioning Manager # # Supplicant # CONFIG_WPA_MBEDTLS_CRYPTO=y # CONFIG_WPA_DEBUG_PRINT is not set # CONFIG_WPA_TESTING_OPTIONS is not set # CONFIG_WPA_TLS_V12 is not set # CONFIG_WPA_WPS_WARS is not set # end of Supplicant # end of Component config # # Compatibility options # # CONFIG_LEGACY_INCLUDE_COMMON_HEADERS is not set # end of Compatibility options # Deprecated options for backward compatibility CONFIG_TOOLPREFIX="xtensa-esp32-elf-" # CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set # CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set # CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set CONFIG_LOG_BOOTLOADER_LEVEL_INFO=y # CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set # CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set CONFIG_LOG_BOOTLOADER_LEVEL=3 # CONFIG_APP_ROLLBACK_ENABLE is not set # CONFIG_FLASH_ENCRYPTION_ENABLED is not set # CONFIG_FLASHMODE_QIO is not set # CONFIG_FLASHMODE_QOUT is not set CONFIG_FLASHMODE_DIO=y # CONFIG_FLASHMODE_DOUT is not set # CONFIG_MONITOR_BAUD_9600B is not set # CONFIG_MONITOR_BAUD_57600B is not set CONFIG_MONITOR_BAUD_115200B=y # CONFIG_MONITOR_BAUD_230400B is not set # CONFIG_MONITOR_BAUD_921600B is not set # CONFIG_MONITOR_BAUD_2MB is not set # CONFIG_MONITOR_BAUD_OTHER is not set CONFIG_MONITOR_BAUD_OTHER_VAL=115200 CONFIG_MONITOR_BAUD=115200 CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG=y # CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE is not set CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y # CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set # CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set # CONFIG_CXX_EXCEPTIONS is not set CONFIG_STACK_CHECK_NONE=y # CONFIG_STACK_CHECK_NORM is not set # CONFIG_STACK_CHECK_STRONG is not set # CONFIG_STACK_CHECK_ALL is not set # CONFIG_WARN_WRITE_STRINGS is not set # CONFIG_DISABLE_GCC8_WARNINGS is not set # CONFIG_ESP32_APPTRACE_DEST_TRAX is not set CONFIG_ESP32_APPTRACE_DEST_NONE=y CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y CONFIG_BTDM_CONTROLLER_BLE_MAX_CONN_EFF=0 CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_ACL_CONN_EFF=0 CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_SYNC_CONN_EFF=0 CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE=0 CONFIG_ADC2_DISABLE_DAC=y # CONFIG_SPIRAM_SUPPORT is not set CONFIG_TRACEMEM_RESERVE_DRAM=0x0 # CONFIG_TWO_UNIVERSAL_MAC_ADDRESS is not set CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS=y CONFIG_NUMBER_OF_UNIVERSAL_MAC_ADDRESS=4 # CONFIG_ULP_COPROC_ENABLED is not set CONFIG_ULP_COPROC_RESERVE_MEM=0 CONFIG_BROWNOUT_DET=y CONFIG_BROWNOUT_DET_LVL_SEL_0=y # CONFIG_BROWNOUT_DET_LVL_SEL_1 is not set # CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set # CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set # CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set # CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set # CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set # CONFIG_BROWNOUT_DET_LVL_SEL_7 is not set CONFIG_BROWNOUT_DET_LVL=0 CONFIG_REDUCE_PHY_TX_POWER=y CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC=y # CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL is not set # CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_OSC is not set # CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_8MD256 is not set # CONFIG_DISABLE_BASIC_ROM_CONSOLE is not set # CONFIG_NO_BLOBS is not set # CONFIG_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2304 CONFIG_MAIN_TASK_STACK_SIZE=3584 CONFIG_IPC_TASK_STACK_SIZE=1024 CONFIG_CONSOLE_UART_DEFAULT=y # CONFIG_CONSOLE_UART_CUSTOM is not set # CONFIG_CONSOLE_UART_NONE is not set CONFIG_CONSOLE_UART_NUM=0 CONFIG_CONSOLE_UART_TX_GPIO=1 CONFIG_CONSOLE_UART_RX_GPIO=3 CONFIG_CONSOLE_UART_BAUDRATE=115200 CONFIG_INT_WDT=y CONFIG_INT_WDT_TIMEOUT_MS=300 CONFIG_INT_WDT_CHECK_CPU1=y CONFIG_TASK_WDT=y # CONFIG_TASK_WDT_PANIC is not set CONFIG_TASK_WDT_TIMEOUT_S=5 CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=y CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1=y # CONFIG_EVENT_LOOP_PROFILING is not set CONFIG_POST_EVENTS_FROM_ISR=y CONFIG_POST_EVENTS_FROM_IRAM_ISR=y # CONFIG_ESP32S2_PANIC_PRINT_HALT is not set CONFIG_ESP32S2_PANIC_PRINT_REBOOT=y # CONFIG_ESP32S2_PANIC_SILENT_REBOOT is not set # CONFIG_ESP32S2_PANIC_GDBSTUB is not set CONFIG_TIMER_TASK_STACK_SIZE=6584 CONFIG_MB_MASTER_TIMEOUT_MS_RESPOND=150 CONFIG_MB_MASTER_DELAY_MS_CONVERT=200 CONFIG_MB_QUEUE_LENGTH=20 CONFIG_MB_SERIAL_TASK_STACK_SIZE=2048 CONFIG_MB_SERIAL_BUF_SIZE=256 CONFIG_MB_SERIAL_TASK_PRIO=10 # CONFIG_MB_CONTROLLER_SLAVE_ID_SUPPORT is not set CONFIG_MB_CONTROLLER_NOTIFY_TIMEOUT=20 CONFIG_MB_CONTROLLER_NOTIFY_QUEUE_SIZE=20 CONFIG_MB_CONTROLLER_STACK_SIZE=4096 CONFIG_MB_EVENT_QUEUE_TIMEOUT=20 CONFIG_MB_TIMER_PORT_ENABLED=y CONFIG_MB_TIMER_GROUP=0 CONFIG_MB_TIMER_INDEX=0 # CONFIG_SUPPORT_STATIC_ALLOCATION is not set CONFIG_TIMER_TASK_PRIORITY=1 CONFIG_TIMER_TASK_STACK_DEPTH=6048 CONFIG_TIMER_QUEUE_LENGTH=10 # CONFIG_L2_TO_L3_COPY is not set # CONFIG_USE_ONLY_LWIP_SELECT is not set CONFIG_ESP_GRATUITOUS_ARP=y CONFIG_GARP_TMR_INTERVAL=60 CONFIG_TCPIP_RECVMBOX_SIZE=32 CONFIG_TCP_MAXRTX=12 CONFIG_TCP_SYNMAXRTX=6 CONFIG_TCP_MSS=1440 CONFIG_TCP_MSL=60000 CONFIG_TCP_SND_BUF_DEFAULT=5744 CONFIG_TCP_WND_DEFAULT=5744 CONFIG_TCP_RECVMBOX_SIZE=6 CONFIG_TCP_QUEUE_OOSEQ=y # CONFIG_ESP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES is not set CONFIG_TCP_OVERSIZE_MSS=y # CONFIG_TCP_OVERSIZE_QUARTER_MSS is not set # CONFIG_TCP_OVERSIZE_DISABLE is not set CONFIG_UDP_RECVMBOX_SIZE=6 CONFIG_TCPIP_TASK_STACK_SIZE=3072 CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY=y # CONFIG_TCPIP_TASK_AFFINITY_CPU0 is not set # CONFIG_TCPIP_TASK_AFFINITY_CPU1 is not set CONFIG_TCPIP_TASK_AFFINITY=0x7FFFFFFF # CONFIG_PPP_SUPPORT is not set CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT=5 CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 CONFIG_ESP32_PTHREAD_STACK_MIN=768 CONFIG_ESP32_DEFAULT_PTHREAD_CORE_NO_AFFINITY=y # CONFIG_ESP32_DEFAULT_PTHREAD_CORE_0 is not set # CONFIG_ESP32_DEFAULT_PTHREAD_CORE_1 is not set CONFIG_ESP32_PTHREAD_TASK_CORE_DEFAULT=-1 CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT="pthread" CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS=y # CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_FAILS is not set # CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ALLOWED is not set CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT=y CONFIG_SUPPORT_TERMIOS=y CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS=1 CONFIG_SEMIHOSTFS_HOST_PATH_MAX_LEN=128 # End of deprecated options libwebsockets-4.3.5/minimal-examples/embedded/esp32/esp-wrover-kit/sdkconfig.h000066400000000000000000000471141476025525100273460ustar00rootroot00000000000000/* * Automatically generated file. DO NOT EDIT. * Espressif IoT Development Framework (ESP-IDF) Configuration Header */ #pragma once #define CONFIG_IDF_CMAKE 1 #define CONFIG_IDF_TARGET "esp32" #define CONFIG_IDF_TARGET_ESP32 1 #define CONFIG_IDF_FIRMWARE_CHIP_ID 0x0000 #define CONFIG_SDK_TOOLPREFIX "xtensa-esp32-elf-" #define CONFIG_APP_BUILD_TYPE_APP_2NDBOOT 1 #define CONFIG_APP_BUILD_GENERATE_BINARIES 1 #define CONFIG_APP_BUILD_BOOTLOADER 1 #define CONFIG_APP_BUILD_USE_FLASH_SECTIONS 1 #define CONFIG_APP_COMPILE_TIME_DATE 1 #define CONFIG_APP_RETRIEVE_LEN_ELF_SHA 16 #define CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE 1 #define CONFIG_BOOTLOADER_LOG_LEVEL_INFO 1 #define CONFIG_BOOTLOADER_LOG_LEVEL 3 #define CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_9V 1 #define CONFIG_BOOTLOADER_WDT_ENABLE 1 #define CONFIG_BOOTLOADER_WDT_TIME_MS 9000 #define CONFIG_BOOTLOADER_RESERVE_RTC_SIZE 0x0 #define CONFIG_ESPTOOLPY_BAUD_OTHER_VAL 115200 #define CONFIG_ESPTOOLPY_FLASHMODE_DIO 1 #define CONFIG_ESPTOOLPY_FLASHMODE "dio" #define CONFIG_ESPTOOLPY_FLASHFREQ_40M 1 #define CONFIG_ESPTOOLPY_FLASHFREQ "40m" #define CONFIG_ESPTOOLPY_FLASHSIZE_4MB 1 #define CONFIG_ESPTOOLPY_FLASHSIZE "4MB" #define CONFIG_ESPTOOLPY_FLASHSIZE_DETECT 1 #define CONFIG_ESPTOOLPY_BEFORE_RESET 1 #define CONFIG_ESPTOOLPY_BEFORE "default_reset" #define CONFIG_ESPTOOLPY_AFTER_RESET 1 #define CONFIG_ESPTOOLPY_AFTER "hard_reset" #define CONFIG_ESPTOOLPY_MONITOR_BAUD_115200B 1 #define CONFIG_ESPTOOLPY_MONITOR_BAUD_OTHER_VAL 115200 #define CONFIG_ESPTOOLPY_MONITOR_BAUD 115200 #define CONFIG_PARTITION_TABLE_SINGLE_APP 1 #define CONFIG_PARTITION_TABLE_CUSTOM_FILENAME "partitions.csv" #define CONFIG_PARTITION_TABLE_FILENAME "partitions_singleapp.csv" #define CONFIG_PARTITION_TABLE_OFFSET 0x8000 #define CONFIG_PARTITION_TABLE_MD5 1 #define CONFIG_COMPILER_OPTIMIZATION_DEFAULT 1 #define CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE 1 #define CONFIG_COMPILER_STACK_CHECK_MODE_NONE 1 #define CONFIG_APPTRACE_DEST_NONE 1 #define CONFIG_APPTRACE_LOCK_ENABLE 1 #define CONFIG_BTDM_CTRL_BR_EDR_SCO_DATA_PATH_EFF 0 #define CONFIG_BTDM_CTRL_BLE_MAX_CONN_EFF 0 #define CONFIG_BTDM_CTRL_BR_EDR_MAX_ACL_CONN_EFF 0 #define CONFIG_BTDM_CTRL_BR_EDR_MAX_SYNC_CONN_EFF 0 #define CONFIG_BTDM_CTRL_PINNED_TO_CORE 0 #define CONFIG_BTDM_BLE_SLEEP_CLOCK_ACCURACY_INDEX_EFF 1 #define CONFIG_BT_RESERVE_DRAM 0x0 #define CONFIG_COAP_MBEDTLS_PSK 1 #define CONFIG_COAP_LOG_DEFAULT_LEVEL 0 #define CONFIG_ADC_DISABLE_DAC 1 #define CONFIG_SPI_MASTER_ISR_IN_IRAM 1 #define CONFIG_SPI_SLAVE_ISR_IN_IRAM 1 #define CONFIG_EFUSE_CODE_SCHEME_COMPAT_3_4 1 #define CONFIG_EFUSE_MAX_BLK_LEN 192 #define CONFIG_ESP_TLS_USING_MBEDTLS 1 #define CONFIG_ESP32_REV_MIN_0 1 #define CONFIG_ESP32_REV_MIN 0 #define CONFIG_ESP32_DPORT_WORKAROUND 1 #define CONFIG_ESP32_DEFAULT_CPU_FREQ_160 1 #define CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ 160 #define CONFIG_ESP32_TRACEMEM_RESERVE_DRAM 0x0 #define CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_FOUR 1 #define CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES 4 #define CONFIG_ESP32_ULP_COPROC_RESERVE_MEM 0 #define CONFIG_ESP32_DEBUG_OCDAWARE 1 #define CONFIG_ESP32_BROWNOUT_DET 1 #define CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_0 1 #define CONFIG_ESP32_BROWNOUT_DET_LVL 0 #define CONFIG_ESP32_REDUCE_PHY_TX_POWER 1 #define CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1 1 #define CONFIG_ESP32_RTC_CLK_SRC_INT_RC 1 #define CONFIG_ESP32_RTC_CLK_CAL_CYCLES 1024 #define CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY 2000 #define CONFIG_ESP32_XTAL_FREQ_40 1 #define CONFIG_ESP32_XTAL_FREQ 40 #define CONFIG_ESP32_DPORT_DIS_INTERRUPT_LVL 5 #define CONFIG_ADC_CAL_EFUSE_TP_ENABLE 1 #define CONFIG_ADC_CAL_EFUSE_VREF_ENABLE 1 #define CONFIG_ADC_CAL_LUT_ENABLE 1 #define CONFIG_ESP_ERR_TO_NAME_LOOKUP 1 #define CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE 32 #define CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE 2304 #define CONFIG_ESP_MAIN_TASK_STACK_SIZE 6584 #define CONFIG_ESP_IPC_TASK_STACK_SIZE 1024 #define CONFIG_ESP_IPC_USES_CALLERS_PRIORITY 1 #define CONFIG_ESP_MINIMAL_SHARED_STACK_SIZE 2048 #define CONFIG_ESP_CONSOLE_UART_DEFAULT 1 #define CONFIG_ESP_CONSOLE_UART_NUM 0 #define CONFIG_ESP_CONSOLE_UART_TX_GPIO 1 #define CONFIG_ESP_CONSOLE_UART_RX_GPIO 3 #define CONFIG_ESP_CONSOLE_UART_BAUDRATE 115200 #define CONFIG_ESP_INT_WDT 1 #define CONFIG_ESP_INT_WDT_TIMEOUT_MS 300 #define CONFIG_ESP_INT_WDT_CHECK_CPU1 1 #define CONFIG_ESP_TASK_WDT 1 #define CONFIG_ESP_TASK_WDT_TIMEOUT_S 5 #define CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0 1 #define CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1 1 #define CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_STA 1 #define CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_AP 1 #define CONFIG_ESP_MAC_ADDR_UNIVERSE_BT 1 #define CONFIG_ESP_MAC_ADDR_UNIVERSE_ETH 1 #define CONFIG_ETH_ENABLED 1 #define CONFIG_ETH_USE_ESP32_EMAC 1 #define CONFIG_ETH_PHY_INTERFACE_RMII 1 #define CONFIG_ETH_RMII_CLK_INPUT 1 #define CONFIG_ETH_RMII_CLK_IN_GPIO 0 #define CONFIG_ETH_DMA_BUFFER_SIZE 512 #define CONFIG_ETH_DMA_RX_BUFFER_NUM 10 #define CONFIG_ETH_DMA_TX_BUFFER_NUM 10 #define CONFIG_ETH_USE_SPI_ETHERNET 1 #define CONFIG_ESP_EVENT_POST_FROM_ISR 1 #define CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR 1 #define CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS 1 #define CONFIG_HTTPD_MAX_REQ_HDR_LEN 512 #define CONFIG_HTTPD_MAX_URI_LEN 512 #define CONFIG_HTTPD_ERR_RESP_NO_DELAY 1 #define CONFIG_HTTPD_PURGE_BUF_LEN 32 #define CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL 120 #define CONFIG_ESP_NETIF_TCPIP_LWIP 1 #define CONFIG_ESP_NETIF_TCPIP_ADAPTER_COMPATIBLE_LAYER 1 #define CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT 1 #define CONFIG_ESP_TIMER_TASK_STACK_SIZE 6584 #define CONFIG_ESP_TIMER_IMPL_TG0_LAC 1 #define CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM 10 #define CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM 32 #define CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER 1 #define CONFIG_ESP32_WIFI_TX_BUFFER_TYPE 1 #define CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM 32 #define CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED 1 #define CONFIG_ESP32_WIFI_TX_BA_WIN 6 #define CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED 1 #define CONFIG_ESP32_WIFI_RX_BA_WIN 6 #define CONFIG_ESP32_WIFI_NVS_ENABLED 1 #define CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0 1 #define CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN 752 #define CONFIG_ESP32_WIFI_MGMT_SBUF_NUM 32 #define CONFIG_ESP32_WIFI_IRAM_OPT 1 #define CONFIG_ESP32_WIFI_RX_IRAM_OPT 1 #define CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE 1 #define CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE 1 #define CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER 20 #define CONFIG_ESP32_PHY_MAX_TX_POWER 20 #define CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE 1 #define CONFIG_FATFS_CODEPAGE_437 1 #define CONFIG_FATFS_CODEPAGE 437 #define CONFIG_FATFS_LFN_NONE 1 #define CONFIG_FATFS_FS_LOCK 0 #define CONFIG_FATFS_TIMEOUT_MS 10000 #define CONFIG_FATFS_PER_FILE_CACHE 1 #define CONFIG_FMB_COMM_MODE_RTU_EN 1 #define CONFIG_FMB_COMM_MODE_ASCII_EN 1 #define CONFIG_FMB_MASTER_TIMEOUT_MS_RESPOND 150 #define CONFIG_FMB_MASTER_DELAY_MS_CONVERT 200 #define CONFIG_FMB_QUEUE_LENGTH 20 #define CONFIG_FMB_SERIAL_TASK_STACK_SIZE 2048 #define CONFIG_FMB_SERIAL_BUF_SIZE 256 #define CONFIG_FMB_SERIAL_ASCII_BITS_PER_SYMB 8 #define CONFIG_FMB_SERIAL_ASCII_TIMEOUT_RESPOND_MS 1000 #define CONFIG_FMB_SERIAL_TASK_PRIO 10 #define CONFIG_FMB_CONTROLLER_NOTIFY_TIMEOUT 20 #define CONFIG_FMB_CONTROLLER_NOTIFY_QUEUE_SIZE 20 #define CONFIG_FMB_CONTROLLER_STACK_SIZE 4096 #define CONFIG_FMB_EVENT_QUEUE_TIMEOUT 20 #define CONFIG_FMB_TIMER_PORT_ENABLED 1 #define CONFIG_FMB_TIMER_GROUP 0 #define CONFIG_FMB_TIMER_INDEX 0 #define CONFIG_FREERTOS_NO_AFFINITY 0x7FFFFFFF #define CONFIG_FREERTOS_CORETIMER_0 1 #define CONFIG_FREERTOS_HZ 100 #define CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION 1 #define CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY 1 #define CONFIG_FREERTOS_INTERRUPT_BACKTRACE 1 #define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1 #define CONFIG_FREERTOS_ASSERT_FAIL_ABORT 1 #define CONFIG_FREERTOS_IDLE_TASK_STACKSIZE 1536 #define CONFIG_FREERTOS_ISR_STACKSIZE 1536 #define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 16 #define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1 #define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 6048 #define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10 #define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0 #define CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER 1 #define CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER 1 #define CONFIG_FREERTOS_DEBUG_OCDAWARE 1 #define CONFIG_HEAP_POISONING_DISABLED 1 #define CONFIG_HEAP_TRACING_OFF 1 #define CONFIG_LOG_DEFAULT_LEVEL_INFO 1 #define CONFIG_LOG_DEFAULT_LEVEL 3 #define CONFIG_LOG_COLORS 1 #define CONFIG_LOG_TIMESTAMP_SOURCE_RTOS 1 #define CONFIG_LWIP_LOCAL_HOSTNAME "espressif" #define CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES 1 #define CONFIG_LWIP_TIMERS_ONDEMAND 1 #define CONFIG_LWIP_MAX_SOCKETS 10 #define CONFIG_LWIP_SO_REUSE 1 #define CONFIG_LWIP_SO_REUSE_RXTOALL 1 #define CONFIG_LWIP_IP_FRAG 1 #define CONFIG_LWIP_ESP_GRATUITOUS_ARP 1 #define CONFIG_LWIP_GARP_TMR_INTERVAL 60 #define CONFIG_LWIP_TCPIP_RECVMBOX_SIZE 32 #define CONFIG_LWIP_DHCP_DOES_ARP_CHECK 1 #define CONFIG_LWIP_DHCPS_LEASE_UNIT 60 #define CONFIG_LWIP_DHCPS_MAX_STATION_NUM 8 #define CONFIG_LWIP_NETIF_LOOPBACK 1 #define CONFIG_LWIP_LOOPBACK_MAX_PBUFS 8 #define CONFIG_LWIP_MAX_ACTIVE_TCP 16 #define CONFIG_LWIP_MAX_LISTENING_TCP 16 #define CONFIG_LWIP_TCP_MAXRTX 12 #define CONFIG_LWIP_TCP_SYNMAXRTX 6 #define CONFIG_LWIP_TCP_MSS 1440 #define CONFIG_LWIP_TCP_TMR_INTERVAL 250 #define CONFIG_LWIP_TCP_MSL 60000 #define CONFIG_LWIP_TCP_SND_BUF_DEFAULT 5744 #define CONFIG_LWIP_TCP_WND_DEFAULT 5744 #define CONFIG_LWIP_TCP_RECVMBOX_SIZE 6 #define CONFIG_LWIP_TCP_QUEUE_OOSEQ 1 #define CONFIG_LWIP_TCP_OVERSIZE_MSS 1 #define CONFIG_LWIP_MAX_UDP_PCBS 16 #define CONFIG_LWIP_UDP_RECVMBOX_SIZE 6 #define CONFIG_LWIP_TCPIP_TASK_STACK_SIZE 3072 #define CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY 1 #define CONFIG_LWIP_TCPIP_TASK_AFFINITY 0x7FFFFFFF #define CONFIG_LWIP_MAX_RAW_PCBS 16 #define CONFIG_LWIP_DHCP_MAX_NTP_SERVERS 1 #define CONFIG_LWIP_SNTP_UPDATE_DELAY 3600000 #define CONFIG_LWIP_ESP_LWIP_ASSERT 1 #define CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC 1 #define CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN 1 #define CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN 16384 #define CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN 4096 #define CONFIG_MBEDTLS_CERTIFICATE_BUNDLE 1 #define CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL 1 #define CONFIG_MBEDTLS_HARDWARE_AES 1 #define CONFIG_MBEDTLS_HARDWARE_MPI 1 #define CONFIG_MBEDTLS_HARDWARE_SHA 1 #define CONFIG_MBEDTLS_HAVE_TIME 1 #define CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT 1 #define CONFIG_MBEDTLS_TLS_SERVER 1 #define CONFIG_MBEDTLS_TLS_CLIENT 1 #define CONFIG_MBEDTLS_TLS_ENABLED 1 #define CONFIG_MBEDTLS_PSK_MODES 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_PSK 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_PSK 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_PSK 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_RSA_PSK 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_RSA 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_RSA 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA 1 #define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA 1 #define CONFIG_MBEDTLS_SSL_RENEGOTIATION 1 #define CONFIG_MBEDTLS_SSL_PROTO_TLS1 1 #define CONFIG_MBEDTLS_SSL_PROTO_TLS1_1 1 #define CONFIG_MBEDTLS_SSL_PROTO_TLS1_2 1 #define CONFIG_MBEDTLS_SSL_PROTO_DTLS 1 #define CONFIG_MBEDTLS_SSL_ALPN 1 #define CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS 1 #define CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS 1 #define CONFIG_MBEDTLS_AES_C 1 #define CONFIG_MBEDTLS_RC4_DISABLED 1 #define CONFIG_MBEDTLS_CCM_C 1 #define CONFIG_MBEDTLS_GCM_C 1 #define CONFIG_MBEDTLS_PEM_PARSE_C 1 #define CONFIG_MBEDTLS_PEM_WRITE_C 1 #define CONFIG_MBEDTLS_X509_CRL_PARSE_C 1 #define CONFIG_MBEDTLS_X509_CSR_PARSE_C 1 #define CONFIG_MBEDTLS_ECP_C 1 #define CONFIG_MBEDTLS_ECDH_C 1 #define CONFIG_MBEDTLS_ECDSA_C 1 #define CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED 1 #define CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED 1 #define CONFIG_MBEDTLS_ECP_NIST_OPTIM 1 #define CONFIG_MDNS_MAX_SERVICES 10 #define CONFIG_MDNS_TASK_PRIORITY 1 #define CONFIG_MDNS_TASK_AFFINITY_CPU0 1 #define CONFIG_MDNS_TASK_AFFINITY 0x0 #define CONFIG_MDNS_SERVICE_ADD_TIMEOUT_MS 2000 #define CONFIG_MDNS_TIMER_PERIOD_MS 100 #define CONFIG_MQTT_PROTOCOL_311 1 #define CONFIG_MQTT_TRANSPORT_SSL 1 #define CONFIG_MQTT_TRANSPORT_WEBSOCKET 1 #define CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE 1 #define CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF 1 #define CONFIG_NEWLIB_STDIN_LINE_ENDING_CR 1 #define CONFIG_OPENSSL_ASSERT_EXIT 1 #define CONFIG_PTHREAD_TASK_PRIO_DEFAULT 5 #define CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT 3072 #define CONFIG_PTHREAD_STACK_MIN 768 #define CONFIG_PTHREAD_DEFAULT_CORE_NO_AFFINITY 1 #define CONFIG_PTHREAD_TASK_CORE_DEFAULT -1 #define CONFIG_PTHREAD_TASK_NAME_DEFAULT "pthread" #define CONFIG_SPI_FLASH_ROM_DRIVER_PATCH 1 #define CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS 1 #define CONFIG_SPI_FLASH_YIELD_DURING_ERASE 1 #define CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS 20 #define CONFIG_SPI_FLASH_ERASE_YIELD_TICKS 1 #define CONFIG_SPI_FLASH_SUPPORT_ISSI_CHIP 1 #define CONFIG_SPI_FLASH_SUPPORT_MXIC_CHIP 1 #define CONFIG_SPI_FLASH_SUPPORT_GD_CHIP 1 #define CONFIG_SPIFFS_MAX_PARTITIONS 3 #define CONFIG_SPIFFS_CACHE 1 #define CONFIG_SPIFFS_CACHE_WR 1 #define CONFIG_SPIFFS_PAGE_CHECK 1 #define CONFIG_SPIFFS_GC_MAX_RUNS 10 #define CONFIG_SPIFFS_PAGE_SIZE 256 #define CONFIG_SPIFFS_OBJ_NAME_LEN 32 #define CONFIG_SPIFFS_USE_MAGIC 1 #define CONFIG_SPIFFS_USE_MAGIC_LENGTH 1 #define CONFIG_SPIFFS_META_LENGTH 4 #define CONFIG_SPIFFS_USE_MTIME 1 #define CONFIG_USB_DESC_CUSTOM_VID 0x1234 #define CONFIG_USB_DESC_CUSTOM_PID 0x5678 #define CONFIG_UNITY_ENABLE_FLOAT 1 #define CONFIG_UNITY_ENABLE_DOUBLE 1 #define CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER 1 #define CONFIG_VFS_SUPPORT_IO 1 #define CONFIG_VFS_SUPPORT_DIR 1 #define CONFIG_VFS_SUPPORT_SELECT 1 #define CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT 1 #define CONFIG_VFS_SUPPORT_TERMIOS 1 #define CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS 1 #define CONFIG_VFS_SEMIHOSTFS_HOST_PATH_MAX_LEN 128 #define CONFIG_WL_SECTOR_SIZE_4096 1 #define CONFIG_WL_SECTOR_SIZE 4096 #define CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES 16 #define CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT 30 #define CONFIG_WPA_MBEDTLS_CRYPTO 1 /* List of deprecated options */ #define CONFIG_ADC2_DISABLE_DAC CONFIG_ADC_DISABLE_DAC #define CONFIG_BROWNOUT_DET CONFIG_ESP32_BROWNOUT_DET #define CONFIG_BROWNOUT_DET_LVL_SEL_0 CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_0 #define CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG CONFIG_COMPILER_OPTIMIZATION_DEFAULT #define CONFIG_CONSOLE_UART_BAUDRATE CONFIG_ESP_CONSOLE_UART_BAUDRATE #define CONFIG_CONSOLE_UART_DEFAULT CONFIG_ESP_CONSOLE_UART_DEFAULT #define CONFIG_CONSOLE_UART_RX_GPIO CONFIG_ESP_CONSOLE_UART_RX_GPIO #define CONFIG_CONSOLE_UART_TX_GPIO CONFIG_ESP_CONSOLE_UART_TX_GPIO #define CONFIG_ESP32S2_PANIC_PRINT_REBOOT CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT #define CONFIG_ESP32_APPTRACE_DEST_NONE CONFIG_APPTRACE_DEST_NONE #define CONFIG_ESP32_DEFAULT_PTHREAD_CORE_NO_AFFINITY CONFIG_PTHREAD_DEFAULT_CORE_NO_AFFINITY #define CONFIG_ESP32_PANIC_PRINT_REBOOT CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT #define CONFIG_ESP32_PTHREAD_STACK_MIN CONFIG_PTHREAD_STACK_MIN #define CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT CONFIG_PTHREAD_TASK_NAME_DEFAULT #define CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT CONFIG_PTHREAD_TASK_PRIO_DEFAULT #define CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT #define CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC CONFIG_ESP32_RTC_CLK_SRC_INT_RC #define CONFIG_ESP_GRATUITOUS_ARP CONFIG_LWIP_ESP_GRATUITOUS_ARP #define CONFIG_FLASHMODE_DIO CONFIG_ESPTOOLPY_FLASHMODE_DIO #define CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_FOUR #define CONFIG_GARP_TMR_INTERVAL CONFIG_LWIP_GARP_TMR_INTERVAL #define CONFIG_INT_WDT CONFIG_ESP_INT_WDT #define CONFIG_INT_WDT_CHECK_CPU1 CONFIG_ESP_INT_WDT_CHECK_CPU1 #define CONFIG_INT_WDT_TIMEOUT_MS CONFIG_ESP_INT_WDT_TIMEOUT_MS #define CONFIG_IPC_TASK_STACK_SIZE CONFIG_ESP_IPC_TASK_STACK_SIZE #define CONFIG_LOG_BOOTLOADER_LEVEL_INFO CONFIG_BOOTLOADER_LOG_LEVEL_INFO #define CONFIG_MAIN_TASK_STACK_SIZE CONFIG_ESP_MAIN_TASK_STACK_SIZE #define CONFIG_MB_CONTROLLER_NOTIFY_QUEUE_SIZE CONFIG_FMB_CONTROLLER_NOTIFY_QUEUE_SIZE #define CONFIG_MB_CONTROLLER_NOTIFY_TIMEOUT CONFIG_FMB_CONTROLLER_NOTIFY_TIMEOUT #define CONFIG_MB_CONTROLLER_STACK_SIZE CONFIG_FMB_CONTROLLER_STACK_SIZE #define CONFIG_MB_EVENT_QUEUE_TIMEOUT CONFIG_FMB_EVENT_QUEUE_TIMEOUT #define CONFIG_MB_MASTER_DELAY_MS_CONVERT CONFIG_FMB_MASTER_DELAY_MS_CONVERT #define CONFIG_MB_MASTER_TIMEOUT_MS_RESPOND CONFIG_FMB_MASTER_TIMEOUT_MS_RESPOND #define CONFIG_MB_QUEUE_LENGTH CONFIG_FMB_QUEUE_LENGTH #define CONFIG_MB_SERIAL_BUF_SIZE CONFIG_FMB_SERIAL_BUF_SIZE #define CONFIG_MB_SERIAL_TASK_PRIO CONFIG_FMB_SERIAL_TASK_PRIO #define CONFIG_MB_SERIAL_TASK_STACK_SIZE CONFIG_FMB_SERIAL_TASK_STACK_SIZE #define CONFIG_MB_TIMER_GROUP CONFIG_FMB_TIMER_GROUP #define CONFIG_MB_TIMER_INDEX CONFIG_FMB_TIMER_INDEX #define CONFIG_MB_TIMER_PORT_ENABLED CONFIG_FMB_TIMER_PORT_ENABLED #define CONFIG_MONITOR_BAUD_115200B CONFIG_ESPTOOLPY_MONITOR_BAUD_115200B #define CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE #define CONFIG_OPTIMIZATION_LEVEL_DEBUG CONFIG_COMPILER_OPTIMIZATION_DEFAULT #define CONFIG_POST_EVENTS_FROM_IRAM_ISR CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR #define CONFIG_POST_EVENTS_FROM_ISR CONFIG_ESP_EVENT_POST_FROM_ISR #define CONFIG_REDUCE_PHY_TX_POWER CONFIG_ESP32_REDUCE_PHY_TX_POWER #define CONFIG_SEMIHOSTFS_HOST_PATH_MAX_LEN CONFIG_VFS_SEMIHOSTFS_HOST_PATH_MAX_LEN #define CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS #define CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS #define CONFIG_STACK_CHECK_NONE CONFIG_COMPILER_STACK_CHECK_MODE_NONE #define CONFIG_SUPPORT_TERMIOS CONFIG_VFS_SUPPORT_TERMIOS #define CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT #define CONFIG_SYSTEM_EVENT_QUEUE_SIZE CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE #define CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE #define CONFIG_TASK_WDT CONFIG_ESP_TASK_WDT #define CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0 CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0 #define CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1 CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1 #define CONFIG_TASK_WDT_TIMEOUT_S CONFIG_ESP_TASK_WDT_TIMEOUT_S #define CONFIG_TCPIP_RECVMBOX_SIZE CONFIG_LWIP_TCPIP_RECVMBOX_SIZE #define CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY #define CONFIG_TCPIP_TASK_STACK_SIZE CONFIG_LWIP_TCPIP_TASK_STACK_SIZE #define CONFIG_TCP_MAXRTX CONFIG_LWIP_TCP_MAXRTX #define CONFIG_TCP_MSL CONFIG_LWIP_TCP_MSL #define CONFIG_TCP_MSS CONFIG_LWIP_TCP_MSS #define CONFIG_TCP_OVERSIZE_MSS CONFIG_LWIP_TCP_OVERSIZE_MSS #define CONFIG_TCP_QUEUE_OOSEQ CONFIG_LWIP_TCP_QUEUE_OOSEQ #define CONFIG_TCP_RECVMBOX_SIZE CONFIG_LWIP_TCP_RECVMBOX_SIZE #define CONFIG_TCP_SND_BUF_DEFAULT CONFIG_LWIP_TCP_SND_BUF_DEFAULT #define CONFIG_TCP_SYNMAXRTX CONFIG_LWIP_TCP_SYNMAXRTX #define CONFIG_TCP_WND_DEFAULT CONFIG_LWIP_TCP_WND_DEFAULT #define CONFIG_TIMER_QUEUE_LENGTH CONFIG_FREERTOS_TIMER_QUEUE_LENGTH #define CONFIG_TIMER_TASK_PRIORITY CONFIG_FREERTOS_TIMER_TASK_PRIORITY #define CONFIG_TIMER_TASK_STACK_DEPTH CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH #define CONFIG_TIMER_TASK_STACK_SIZE CONFIG_ESP_TIMER_TASK_STACK_SIZE #define CONFIG_TOOLPREFIX CONFIG_SDK_TOOLPREFIX #define CONFIG_UDP_RECVMBOX_SIZE CONFIG_LWIP_UDP_RECVMBOX_SIZE libwebsockets-4.3.5/minimal-examples/gtk/000077500000000000000000000000001476025525100204215ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/gtk/minimal-gtk/000077500000000000000000000000001476025525100226325ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/gtk/minimal-gtk/CMakeLists.txt000066400000000000000000000026001476025525100253700ustar00rootroot00000000000000project(lws-minimal-gtk C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-gtk) set(SRCS main.c) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) require_lws_config(LWS_WITH_GLIB 1 requirements) require_lws_config(LWS_WITH_GTK 1 requirements) if (requirements) # gtk pieces include (FindPkgConfig) set(LWS_GTK_INCLUDE_DIRS CACHE PATH "Path to the gtk include directory") set(LWS_GTK_LIBRARIES CACHE PATH "Path to the gtk library") PKG_SEARCH_MODULE(LWS_GTK2 gtk+-3.0) if (LWS_GTK2_FOUND) list(APPEND LWS_GTK_INCLUDE_DIRS "${LWS_GTK2_INCLUDE_DIRS}") list(APPEND LWS_GTK_LIBRARIES "${LWS_GTK2_LIBRARIES}") endif() message("gtk include dir: ${LWS_GTK_INCLUDE_DIRS}") message("gtk libraries: ${LWS_GTK_LIBRARIES}") include_directories("${LWS_GTK_INCLUDE_DIRS}") set(extralibs ${extralibs} ${LWS_GTK_LIBRARIES}) message("Extra libs: ${extralibs}") add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${extralibs} ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${extralibs} ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/gtk/minimal-gtk/README.md000066400000000000000000000016571476025525100241220ustar00rootroot00000000000000# lws minimal http client gtk The application goes to https://warmcat.com and receives the page data, from inside a gtk app using gtk / glib main loop directly. ## build ``` $ cmake . && make ``` ## usage ``` $ t1_main: started [2020/02/08 18:04:07:6647] N: Loading client CA for verification ./warmcat.com.cer [2020/02/08 18:04:07:7744] U: Connected to 46.105.127.147, http response: 200 [2020/02/08 18:04:07:7762] U: RECEIVE_CLIENT_HTTP_READ: read 4087 [2020/02/08 18:04:07:7762] U: RECEIVE_CLIENT_HTTP_READ: read 4096 [2020/02/08 18:04:07:7928] U: RECEIVE_CLIENT_HTTP_READ: read 4087 [2020/02/08 18:04:07:7929] U: RECEIVE_CLIENT_HTTP_READ: read 4096 [2020/02/08 18:04:07:7956] U: RECEIVE_CLIENT_HTTP_READ: read 4087 [2020/02/08 18:04:07:7956] U: RECEIVE_CLIENT_HTTP_READ: read 4096 [2020/02/08 18:04:07:7956] U: RECEIVE_CLIENT_HTTP_READ: read 1971 [2020/02/08 18:04:07:7956] U: LWS_CALLBACK_COMPLETED_CLIENT_HTTP Hello World $ ``` libwebsockets-4.3.5/minimal-examples/gtk/minimal-gtk/main.c000066400000000000000000000117621476025525100237310ustar00rootroot00000000000000#include #include static int status = 0; static void print_hello(GtkWidget *widget, gpointer data) { g_print("Hello World\n"); } static void activate(GtkApplication *app, gpointer user_data) { GtkWidget *window; GtkWidget *button, *bbox; window = gtk_application_window_new(app); gtk_window_set_title(GTK_WINDOW(window), "mywindow"); gtk_window_set_default_size(GTK_WINDOW(window), 200, 200); bbox = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL); gtk_container_add(GTK_CONTAINER(window), bbox); button = gtk_button_new_with_label("Hello World"); g_signal_connect(button, "clicked", G_CALLBACK(print_hello), NULL); g_signal_connect_swapped(button, "clicked", G_CALLBACK(gtk_widget_destroy), window); gtk_container_add(GTK_CONTAINER(bbox), button); gtk_widget_show_all(window); } static int system_notify_cb(lws_state_manager_t *mgr, lws_state_notify_link_t *link, int current, int target) { struct lws_context *context = mgr->parent; struct lws_client_connect_info i; if (current != LWS_SYSTATE_OPERATIONAL || target != LWS_SYSTATE_OPERATIONAL) return 0; lwsl_notice("%s: operational\n", __func__); memset(&i, 0, sizeof i); /* otherwise uninitialized garbage */ i.context = context; i.ssl_connection = LCCSCF_USE_SSL | LCCSCF_H2_QUIRK_OVERFLOWS_TXCR | LCCSCF_H2_QUIRK_NGHTTP2_END_STREAM; i.port = 443; i.address = "warmcat.com"; i.path = "/"; i.host = i.address; i.origin = i.address; i.method = "GET"; i.protocol = "http"; return !lws_client_connect_via_info(&i); } static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { switch (reason) { /* because we are protocols[0] ... */ case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); break; case LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: { char buf[128]; lws_get_peer_simple(wsi, buf, sizeof(buf)); status = lws_http_client_http_response(wsi); lwsl_user("Connected to %s, http response: %d\n", buf, status); } break; /* chunks of chunked content, with header removed */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ: lwsl_user("RECEIVE_CLIENT_HTTP_READ: read %d\n", (int)len); return 0; /* don't passthru */ /* uninterpreted http content */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP: { char buffer[1024 + LWS_PRE]; char *px = buffer + LWS_PRE; int lenx = sizeof(buffer) - LWS_PRE; if (lws_http_client_read(wsi, &px, &lenx) < 0) return -1; } return 0; /* don't passthru */ case LWS_CALLBACK_COMPLETED_CLIENT_HTTP: lwsl_user("LWS_CALLBACK_COMPLETED_CLIENT_HTTP\n"); lws_cancel_service(lws_get_context(wsi)); /* abort poll wait */ break; case LWS_CALLBACK_CLOSED_CLIENT_HTTP: lws_cancel_service(lws_get_context(wsi)); /* abort poll wait */ break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static const struct lws_protocols protocols[] = { { "http", callback_http, 0, 0, }, { NULL, NULL, 0, 0 } }; static gpointer t1_main (gpointer user_data) { lws_state_notify_link_t notifier = { { NULL, NULL, NULL }, system_notify_cb, "app" }; lws_state_notify_link_t *na[] = { ¬ifier, NULL }; GMainContext *t1_mc = (GMainContext *)user_data; struct lws_context_creation_info info; struct lws_context *context; void *foreign_loops[1]; GMainLoop *ml; g_print("%s: started\n", __func__); g_main_context_push_thread_default(t1_mc); ml = g_main_loop_new(t1_mc, FALSE); /* attach our lws activities to the main loop of this thread */ lws_set_log_level(LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE, NULL); memset(&info, 0, sizeof info); info.port = CONTEXT_PORT_NO_LISTEN; info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_GLIB; info.protocols = protocols; foreign_loops[0] = (void *)ml; info.foreign_loops = foreign_loops; info.register_notifier_list = na; #if defined(LWS_WITH_MBEDTLS) || defined(USE_WOLFSSL) /* * OpenSSL uses the system trust store. mbedTLS has to be told which * CA to trust explicitly. */ info.client_ssl_ca_filepath = "./warmcat.com.cer"; #endif context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return NULL; } /* * We created the lws_context and bound it to this thread's main loop, * let's run the thread's main loop now... */ g_main_loop_run(ml); g_main_loop_unref(ml); g_main_context_pop_thread_default(t1_mc); g_main_context_unref(t1_mc); g_print("%s: ending\n", __func__); lws_context_destroy(context); return NULL; } int main(int argc, char **argv) { GMainContext *t1_mc = g_main_context_new(); GtkApplication *app; GThread *t1; int status; t1 = g_thread_new ("t1", t1_main, g_main_context_ref (t1_mc)); (void)t1; app = gtk_application_new("org.gtk.example", G_APPLICATION_FLAGS_NONE); g_signal_connect(app, "activate", G_CALLBACK(activate), NULL); status = g_application_run(G_APPLICATION(app), argc, argv); g_object_unref(app); return status; } libwebsockets-4.3.5/minimal-examples/gtk/minimal-gtk/warmcat.com.cer000066400000000000000000000036241476025525100255450ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ 0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ 3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/http-client/000077500000000000000000000000001476025525100220675ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-client/README.md000066400000000000000000000010321476025525100233420ustar00rootroot00000000000000|name|demonstrates| ---|--- minimal-http-client-certinfo|Shows how to gain detailed information on the peer certificate minimal-http-client-custom-headers|Shows how to send and receive custom headers (h1 only) minimal-http-client-hugeurl|Sends a > 2.5KB URL to warmcat.com minimal-http-client-multi|Connects to and reads https://warmcat.com, 8 times concurrently minimal-http-client-post|POSTs a form containing an uploaded file and a form variable, and captures the response minimal-http-client|Connects to and reads https://warmcat.com libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-attach/000077500000000000000000000000001476025525100272105ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-attach/CMakeLists.txt000066400000000000000000000014751476025525100317570ustar00rootroot00000000000000project(lws-minimal-http-client-attach C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckIncludeFile) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-client-attach) set(SRCS minimal-http-client-attach.c) set(requirements 1) require_pthreads(requirements) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) if (requirements AND NOT WIN32) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${PTHREAD_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${PTHREAD_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-attach/README.md000066400000000000000000000024651476025525100304760ustar00rootroot00000000000000# lws minimal http client attach This demonstrates how other threads can reach out to an existing lws_context and join its event loop cleanly and safely. ## build ``` $ cmake . && make ``` Pthreads is required on your system. ## usage ``` $ ./lws-minimal-http-client-attach [2019/12/31 18:30:49:3495] U: main: main thread tid 0x503e1c0 [2019/12/31 18:30:50:3584] U: LWS minimal http client attach [2019/12/31 18:30:50:4002] U: lws_create: tid 0x5c41700 [2019/12/31 18:30:50:5727] E: callback_ntpc: set up system ops for set_clock [2019/12/31 18:30:50:2110] N: callback_ntpc: Unix time: 1577817053 [2019/12/31 18:30:50:2136] U: attach_callback: called from tid 0x5c41700 [2019/12/31 18:30:51:8733] U: Connected to 46.105.127.147, http response: 200 [2019/12/31 18:30:51:8818] U: RECEIVE_CLIENT_HTTP_READ: read 4087 [2019/12/31 18:30:51:8823] U: RECEIVE_CLIENT_HTTP_READ: read 4096 [2019/12/31 18:30:51:8846] U: RECEIVE_CLIENT_HTTP_READ: read 4087 [2019/12/31 18:30:51:8847] U: RECEIVE_CLIENT_HTTP_READ: read 4096 [2019/12/31 18:30:51:8855] U: RECEIVE_CLIENT_HTTP_READ: read 4087 [2019/12/31 18:30:51:8856] U: RECEIVE_CLIENT_HTTP_READ: read 4096 [2019/12/31 18:30:51:8860] U: RECEIVE_CLIENT_HTTP_READ: read 1971 [2019/12/31 18:30:51:8873] U: LWS_CALLBACK_COMPLETED_CLIENT_HTTP [2019/12/31 18:30:51:9629] U: main: finished ``` minimal-http-client-attach.c000066400000000000000000000145171476025525100344260ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-attach/* * lws-minimal-http-client-attach * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates how to use the lws_system (*attach) api to allow a * different thread to arrange to join an existing lws event loop safely. The * attached stuff does an http client GET from the lws event loop, even though * it was originally requested from a different thread than the lws event loop. */ #include #include #include #if defined(WIN32) #define HAVE_STRUCT_TIMESPEC #if defined(pid_t) #undef pid_t #endif #endif #include static struct lws_context *context; static pthread_t lws_thread; static pthread_mutex_t lock; static int interrupted, bad = 1, status; static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { switch (reason) { /* because we are protocols[0] ... */ case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); interrupted = 1; break; case LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: { char buf[128]; lws_get_peer_simple(wsi, buf, sizeof(buf)); status = (int)lws_http_client_http_response(wsi); lwsl_user("Connected to %s, http response: %d\n", buf, status); } break; /* chunks of chunked content, with header removed */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ: lwsl_user("RECEIVE_CLIENT_HTTP_READ: read %d\n", (int)len); #if 0 /* enable to dump the html */ { const char *p = in; while (len--) if (*p < 0x7f) putchar(*p++); else putchar('.'); } #endif return 0; /* don't passthru */ /* uninterpreted http content */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP: { char buffer[1024 + LWS_PRE]; char *px = buffer + LWS_PRE; int lenx = sizeof(buffer) - LWS_PRE; if (lws_http_client_read(wsi, &px, &lenx) < 0) return -1; } return 0; /* don't passthru */ case LWS_CALLBACK_COMPLETED_CLIENT_HTTP: lwsl_user("LWS_CALLBACK_COMPLETED_CLIENT_HTTP\n"); interrupted = 1; bad = status != 200; lws_cancel_service(lws_get_context(wsi)); /* abort poll wait */ break; case LWS_CALLBACK_CLOSED_CLIENT_HTTP: interrupted = 1; bad = status != 200; lws_cancel_service(lws_get_context(wsi)); /* abort poll wait */ break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static const struct lws_protocols protocols[] = { { "http", callback_http, 0, 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; void sigint_handler(int sig) { interrupted = 1; } static void attach_callback(struct lws_context *context, int tsi, void *opaque) { struct lws_client_connect_info i; /* * Even though it was asked for from a different thread, we are called * back by lws from the lws event loop thread context * * We can set up our operations on the lws event loop and return so * they can happen asynchronously */ memset(&i, 0, sizeof i); /* otherwise uninitialized garbage */ i.context = context; i.ssl_connection = LCCSCF_USE_SSL; i.ssl_connection |= LCCSCF_H2_QUIRK_OVERFLOWS_TXCR | LCCSCF_H2_QUIRK_NGHTTP2_END_STREAM; i.port = 443; i.address = "warmcat.com"; i.path = "/"; i.host = i.address; i.origin = i.address; i.method = "GET"; i.protocol = protocols[0].name; lws_client_connect_via_info(&i); } static int lws_attach_with_pthreads_locking(struct lws_context *context, int tsi, lws_attach_cb_t cb, lws_system_states_t state, void *opaque, struct lws_attach_item **get) { int n; pthread_mutex_lock(&lock); /* * We just provide system-specific locking around the lws non-threadsafe * helper that adds and removes things from the pt list */ n = __lws_system_attach(context, tsi, cb, state, opaque, get); pthread_mutex_unlock(&lock); return n; } lws_system_ops_t ops = { .attach = lws_attach_with_pthreads_locking }; /* * We made this into a different thread to model it being run from completely * different codebase that's all linked together */ static void * lws_create(void *d) { struct lws_context_creation_info info; lwsl_user("%s: tid %p\n", __func__, (void *)(intptr_t)pthread_self()); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = CONTEXT_PORT_NO_LISTEN; info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.system_ops = &ops; info.protocols = protocols; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); goto bail; } /* start the event loop */ while (!interrupted) if (lws_service(context, 0)) interrupted = 1; lws_context_destroy(context); bail: pthread_exit(NULL); return NULL; } int main(int argc, const char **argv) { int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; const char *p; void *retval; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http client attach\n"); pthread_mutex_init(&lock, NULL); /* * The idea of the example is we're going to split the lws context and * event loop off to be created from its own thread... this is like it * was actually started by some completely different code... */ if (pthread_create(&lws_thread, NULL, lws_create, NULL)) { lwsl_err("thread creation failed\n"); goto bail1; } /* * Now on the original / different thread representing a different * codebase that wants to join this existing event loop, we'll ask to * get a callback from the event loop context when the event loop * thread is operational. We have to wait around a bit because we * may run before the lws context was created. */ while (!context && n++ < 30) usleep(10000); if (!context) { lwsl_err("%s: context didn't start\n", __func__); goto bail; } /* * From our different, non event loop thread, ask for our attach * callback to get called when lws system state is OPERATIONAL */ lws_system_get_ops(context)->attach(context, 0, attach_callback, LWS_SYSTATE_OPERATIONAL, NULL, NULL); /* * That's all we wanted to do with our thread. Just wait for the lws * thread to exit as well. */ bail: pthread_join(lws_thread, &retval); bail1: pthread_mutex_destroy(&lock); lwsl_user("%s: finished\n", __func__); return 0; } libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-captive-portal/000077500000000000000000000000001476025525100306765ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-captive-portal/CMakeLists.txt000066400000000000000000000016731476025525100334450ustar00rootroot00000000000000project(lws-minimal-http-client-captive-portal C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckIncludeFile) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-client-captive-portal) set(SRCS minimal-http-client-captive-portal.c) set(requirements 1) require_pthreads(requirements) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_TLS 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) require_lws_config(LWS_WITH_SYS_STATE 1 requirements) if (NOT WIN32 AND requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${PTHREAD_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${PTHREAD_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-captive-portal/README.md000066400000000000000000000034721476025525100321630ustar00rootroot00000000000000# lws minimal http client captive portal detect This demonstrates how to perform captive portal detection integrated with `lws_system` states. After reaching the `lws_system` DHCP state, the application tries to connect through to `http://connectivitycheck.android.com/generate_204` over http... if it succeeds, it will get a 204 response and set the captive portal detection state to `LWS_CPD_INTERNET_OK` and perform a GET from warmcat.com. If there is a problem detected, the captive portal detection state is set accordingly and the app will respond by exiting without trying the read from warmcat.com. The captive portal detection scheme is implemented in the user code and can be modified according to the strategy that's desired for captive portal detection. ## build ``` $ cmake . && make ``` ## usage ``` $ ./bin/lws-minimal-http-client-captive-portal [2020/03/11 13:07:07:4519] U: LWS minimal http client captive portal detect [2020/03/11 13:07:07:4519] N: lws_create_context: using ss proxy bind '(null)', port 0, ads '(null)' [2020/03/11 13:07:07:5022] U: callback_cpd_http: established with resp 204 [2020/03/11 13:07:07:5023] U: app_system_state_nf: OPERATIONAL, cpd 1 [2020/03/11 13:07:07:5896] U: Connected to 46.105.127.147, http response: 200 [2020/03/11 13:07:07:5931] U: RECEIVE_CLIENT_HTTP_READ: read 4087 [2020/03/11 13:07:07:5931] U: RECEIVE_CLIENT_HTTP_READ: read 4096 [2020/03/11 13:07:07:6092] U: RECEIVE_CLIENT_HTTP_READ: read 4087 [2020/03/11 13:07:07:6092] U: RECEIVE_CLIENT_HTTP_READ: read 4096 [2020/03/11 13:07:07:6112] U: RECEIVE_CLIENT_HTTP_READ: read 4087 [2020/03/11 13:07:07:6113] U: RECEIVE_CLIENT_HTTP_READ: read 4096 [2020/03/11 13:07:07:6113] U: RECEIVE_CLIENT_HTTP_READ: read 2657 [2020/03/11 13:07:07:6113] U: LWS_CALLBACK_COMPLETED_CLIENT_HTTP [2020/03/11 13:07:07:6119] U: main: finished OK ``` minimal-http-client-captive-portal.c000066400000000000000000000162421476025525100375770ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-captive-portal/* * lws-minimal-http-client-captive-portal * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates how to use the lws_system captive portal detect integration * * We check for a captive portal by doing a GET from * http://connectivitycheck.android.com/generate_204, if we really are going * out on the Internet he'll return with a 204 response code and we will * understand there's no captive portal. If we get something else, we take it * there is a captive portal. */ #include #include #include static struct lws_context *context; static int interrupted, bad = 1, status; static lws_state_notify_link_t nl; /* * this is the user code http handler */ static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { switch (reason) { /* because we are protocols[0] ... */ case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); interrupted = 1; break; case LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: { char buf[128]; lws_get_peer_simple(wsi, buf, sizeof(buf)); status = (int)lws_http_client_http_response(wsi); lwsl_user("Connected to %s, http response: %d\n", buf, status); } break; /* chunks of chunked content, with header removed */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ: lwsl_user("RECEIVE_CLIENT_HTTP_READ: read %d\n", (int)len); #if 0 /* enable to dump the html */ { const char *p = in; while (len--) if (*p < 0x7f) putchar(*p++); else putchar('.'); } #endif return 0; /* don't passthru */ /* uninterpreted http content */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP: { char buffer[1024 + LWS_PRE]; char *px = buffer + LWS_PRE; int lenx = sizeof(buffer) - LWS_PRE; if (lws_http_client_read(wsi, &px, &lenx) < 0) return -1; } return 0; /* don't passthru */ case LWS_CALLBACK_COMPLETED_CLIENT_HTTP: lwsl_user("LWS_CALLBACK_COMPLETED_CLIENT_HTTP\n"); interrupted = 1; bad = status != 200; lws_cancel_service(lws_get_context(wsi)); /* abort poll wait */ break; case LWS_CALLBACK_CLOSED_CLIENT_HTTP: interrupted = 1; bad = status != 200; lws_cancel_service(lws_get_context(wsi)); /* abort poll wait */ break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } /* * This is the platform's custom captive portal detection handler */ static int callback_cpd_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { int resp; switch (reason) { case LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: resp = (int)lws_http_client_http_response(wsi); if (!resp) break; lwsl_user("%s: established with resp %d\n", __func__, resp); switch (resp) { case HTTP_STATUS_NO_CONTENT: /* * We got the 204 which is used to distinguish the real * endpoint */ lws_system_cpd_set(lws_get_context(wsi), LWS_CPD_INTERNET_OK); return 0; /* also case HTTP_STATUS_OK: ... */ default: break; } /* fallthru */ case LWS_CALLBACK_CLIENT_HTTP_REDIRECT: lws_system_cpd_set(lws_get_context(wsi), LWS_CPD_CAPTIVE_PORTAL); /* don't follow it, just report it */ return 1; case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: case LWS_CALLBACK_CLOSED_CLIENT_HTTP: /* only the first result counts */ lws_system_cpd_set(lws_get_context(wsi), LWS_CPD_NO_INTERNET); break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static const struct lws_protocols protocols[] = { { "http", callback_http, 0, 0, 0, NULL, 0 }, { "lws-cpd-http", callback_cpd_http, 0, 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; void sigint_handler(int sig) { interrupted = 1; } /* * This triggers our platform implementation of captive portal detection, the * actual test can be whatever you need. * * In this example, we detect it using Android's * * http://connectivitycheck.android.com/generate_204 * * and seeing if we get an http 204 back. */ static int captive_portal_detect_request(struct lws_context *context) { struct lws_client_connect_info i; memset(&i, 0, sizeof i); i.context = context; i.port = 80; i.address = "connectivitycheck.android.com"; i.path = "/generate_204"; i.host = i.address; i.origin = i.address; i.method = "GET"; i.protocol = "lws-cpd-http"; return !lws_client_connect_via_info(&i); } lws_system_ops_t ops = { .captive_portal_detect_request = captive_portal_detect_request }; static int app_system_state_nf(lws_state_manager_t *mgr, lws_state_notify_link_t *link, int current, int target) { struct lws_context *cx = lws_system_context_from_system_mgr(mgr); switch (target) { case LWS_SYSTATE_CPD_PRE_TIME: if (lws_system_cpd_state_get(cx)) return 0; /* allow it */ lwsl_info("%s: LWS_SYSTATE_CPD_PRE_TIME\n", __func__); lws_system_cpd_start(cx); /* we'll move the state on when we get a result */ return 1; case LWS_SYSTATE_OPERATIONAL: if (current == LWS_SYSTATE_OPERATIONAL) { struct lws_client_connect_info i; lwsl_user("%s: OPERATIONAL, cpd %d\n", __func__, lws_system_cpd_state_get(cx)); /* * When we reach the OPERATIONAL lws_system state, we * can do our main job knowing we have DHCP, ntpclient, * captive portal testing done. */ if (lws_system_cpd_state_get(cx) != LWS_CPD_INTERNET_OK) { lwsl_warn("%s: There's no internet...\n", __func__); interrupted = 1; break; } memset(&i, 0, sizeof i); i.context = context; i.ssl_connection = LCCSCF_USE_SSL; i.ssl_connection |= LCCSCF_H2_QUIRK_OVERFLOWS_TXCR | LCCSCF_H2_QUIRK_NGHTTP2_END_STREAM; i.port = 443; i.address = "warmcat.com"; i.path = "/"; i.host = i.address; i.origin = i.address; i.method = "GET"; i.protocol = protocols[0].name; lws_client_connect_via_info(&i); break; } default: break; } return 0; } static lws_state_notify_link_t * const app_notifier_list[] = { &nl, NULL }; /* * We made this into a different thread to model it being run from completely * different codebase that's all linked together */ int main(int argc, const char **argv) { int logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; struct lws_context_creation_info info; const char *p; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http client captive portal detect\n"); memset(&info, 0, sizeof info); info.port = CONTEXT_PORT_NO_LISTEN; info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.system_ops = &ops; info.protocols = protocols; /* integrate us with lws system state management when context created */ nl.name = "app"; nl.notify_cb = app_system_state_nf; info.register_notifier_list = app_notifier_list; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (!interrupted) if (lws_service(context, 0)) interrupted = 1; lws_context_destroy(context); lwsl_user("%s: finished %s\n", __func__, bad ? "FAIL": "OK"); return bad; } libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-certinfo/000077500000000000000000000000001476025525100275555ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-certinfo/CMakeLists.txt000066400000000000000000000014161476025525100323170ustar00rootroot00000000000000project(lws-minimal-http-client-certinfo C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-client-certinfo) set(SRCS minimal-http-client-certinfo.c) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) require_lws_config(LWS_WITH_TLS 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-certinfo/README.md000066400000000000000000000106441476025525100310410ustar00rootroot00000000000000# lws minimal http client certinfo This demonstrates how to dump information from the peer certificate largely independent of the tls backend. The application goes to https://warmcat.com and receives the page data. Before receiving the page it dumps information on the server's cert. This works independently of the tls backend being OpenSSL or mbedTLS. However the public keys cannot be compared between the two tls backends, since they produce different representations. ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -l| Connect to https://localhost:7681 and accept selfsigned cert --h1|Specify http/1.1 only using ALPN, rejects h2 even if server supports it ``` $ ./lws-minimal-http-client-certinfo [2018/04/05 21:39:26:5882] USER: LWS minimal http client [2018/04/05 21:39:26:5897] NOTICE: Creating Vhost 'default' (serving disabled), 1 protocols, IPv6 on [2018/04/05 21:39:26:5955] NOTICE: created client ssl context for default [2018/04/05 21:39:28:0824] NOTICE: lws_http_client_http_response 200 [2018/04/05 21:39:28:0824] NOTICE: Peer Cert CN : warmcat.com [2018/04/05 21:39:28:0824] NOTICE: Peer Cert issuer : /C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited [2018/04/05 21:39:28:0825] NOTICE: Peer Cert Valid from: Mon Nov 3 00:00:00 2014 [2018/04/05 21:39:28:0825] NOTICE: Peer Cert Valid to : Sat Nov 2 23:59:59 2019 [2018/04/05 21:39:28:0825] NOTICE: Peer Cert usage bits: 0xa0 [2018/04/05 21:39:28:0825] NOTICE: Peer Cert public key: [2018/04/05 21:39:28:0825] NOTICE: [2018/04/05 21:39:28:0825] NOTICE: 0000: 30 82 01 22 30 0D 06 09 2A 86 48 86 F7 0D 01 01 0.."0...*.H..... [2018/04/05 21:39:28:0825] NOTICE: 0010: 01 05 00 03 82 01 0F 00 30 82 01 0A 02 82 01 01 ........0....... [2018/04/05 21:39:28:0825] NOTICE: 0020: 00 EC 39 C1 98 25 A8 99 AC 01 9B D2 16 C0 CA A3 ..9..%.......... [2018/04/05 21:39:28:0825] NOTICE: 0030: 0E 19 57 E5 3D 23 F3 79 7E 63 BF CD B8 88 D1 16 ..W.=#.y~c...... [2018/04/05 21:39:28:0825] NOTICE: 0040: C6 F0 A6 ED 66 CB F3 C3 D6 7E A7 A3 AB 00 0A 3E ....f....~.....> [2018/04/05 21:39:28:0825] NOTICE: 0050: AD EF 20 44 85 5A 61 F0 71 20 BD E3 D1 4B B6 53 .. D.Za.q ...K.S [2018/04/05 21:39:28:0825] NOTICE: 0060: 57 AA 81 E6 ED 74 36 40 E7 FC 62 24 AD E8 82 1D W....t6@..b$.... [2018/04/05 21:39:28:0826] NOTICE: 0070: 89 C4 3D 64 6C A8 34 4B DB FB DD 7D D2 2D FB 86 ..=dl.4K...}.-.. [2018/04/05 21:39:28:0826] NOTICE: 0080: 97 EA 6B E2 C9 39 D6 19 DE A8 90 E7 86 8F CF 0A ..k..9.......... [2018/04/05 21:39:28:0826] NOTICE: 0090: CD 09 3C AF FB 0A FF 85 E8 93 D1 4B A0 C5 21 AD ..<........K..!. [2018/04/05 21:39:28:0826] NOTICE: 00A0: 58 52 30 0E 4B FE 4F C8 01 B9 BD 0F D4 E4 64 7B XR0.K.O.......d{ [2018/04/05 21:39:28:0826] NOTICE: 00B0: 04 B4 D2 68 69 8F F1 D5 FD B0 1A CE 55 43 08 B7 ...hi.......UC.. [2018/04/05 21:39:28:0826] NOTICE: 00C0: 9F 57 0D 4E E1 CA E8 5C B4 2A 6B AB 05 B5 57 67 .W.N...\.*k...Wg [2018/04/05 21:39:28:0826] NOTICE: 00D0: B8 FD 20 F4 4F 6B 0E 47 7C AD EB B4 99 2C 9B 53 .. .Ok.G|....,.S [2018/04/05 21:39:28:0826] NOTICE: 00E0: DF EA 67 8D 8A 9D A7 17 01 F9 4E BD 56 43 50 53 ..g.......N.VCPS [2018/04/05 21:39:28:0826] NOTICE: 00F0: 08 4E FE 6A 85 4A 4D 45 03 DA 01 00 96 7A C0 A9 .N.j.JME.....z.. [2018/04/05 21:39:28:0826] NOTICE: 0100: C2 32 5E 1A 9F 6F 7B E2 02 5E 70 12 D3 8E 76 6A .2^..o{..^p...vj [2018/04/05 21:39:28:0826] NOTICE: 0110: 0B 59 A4 D7 31 9D C6 86 08 53 2E 02 8A 1E B1 FB .Y..1....S...... [2018/04/05 21:39:28:0826] NOTICE: 0120: 7B 02 03 01 00 01 {..... [2018/04/05 21:39:28:0826] NOTICE: [2018/04/05 21:39:28:0829] USER: RECEIVE_CLIENT_HTTP_READ: read 503 [2018/04/05 21:39:28:0829] USER: RECEIVE_CLIENT_HTTP_READ: read 512 [2018/04/05 21:39:28:0829] USER: RECEIVE_CLIENT_HTTP_READ: read 512 [2018/04/05 21:39:28:0829] USER: RECEIVE_CLIENT_HTTP_READ: read 512 ... [2018/04/05 21:39:28:3777] USER: RECEIVE_CLIENT_HTTP_READ: read 512 [2018/04/05 21:39:28:3777] USER: RECEIVE_CLIENT_HTTP_READ: read 512 [2018/04/05 21:39:28:3778] USER: RECEIVE_CLIENT_HTTP_READ: read 503 [2018/04/05 21:39:28:3778] USER: RECEIVE_CLIENT_HTTP_READ: read 512 [2018/04/05 21:39:28:3778] USER: RECEIVE_CLIENT_HTTP_READ: read 512 [2018/04/05 21:39:28:3778] USER: RECEIVE_CLIENT_HTTP_READ: read 471 [2018/04/05 21:39:28:3778] USER: LWS_CALLBACK_COMPLETED_CLIENT_HTTP [2018/04/05 21:39:28:3787] USER: Completed ``` minimal-http-client-certinfo.c000066400000000000000000000155671476025525100353460ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-certinfo/* * lws-minimal-http-client * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the a minimal http client using lws. * * It visits https://warmcat.com/ and receives the html page there. You * can dump the page data by changing the #if 0 below. */ #include #include #include static int interrupted, bad = 1, status; static struct lws *client_wsi; static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { uint8_t buf[1280]; union lws_tls_cert_info_results *ci = (union lws_tls_cert_info_results *)buf; #if defined(LWS_HAVE_CTIME_R) && !defined(LWS_WITH_NO_LOGS) char date[32]; #endif switch (reason) { /* because we are protocols[0] ... */ case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); client_wsi = NULL; break; case LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: status = (int)lws_http_client_http_response(wsi); lwsl_notice("lws_http_client_http_response %d\n", status); if (!lws_tls_peer_cert_info(wsi, LWS_TLS_CERT_INFO_COMMON_NAME, ci, sizeof(buf) - sizeof(*ci))) lwsl_notice(" Peer Cert CN : %s\n", ci->ns.name); if (!lws_tls_peer_cert_info(wsi, LWS_TLS_CERT_INFO_ISSUER_NAME, ci, sizeof(ci->ns.name))) lwsl_notice(" Peer Cert issuer : %s\n", ci->ns.name); if (!lws_tls_peer_cert_info(wsi, LWS_TLS_CERT_INFO_VALIDITY_FROM, ci, 0)) #if defined(LWS_HAVE_CTIME_R) lwsl_notice(" Peer Cert Valid from: %s", ctime_r(&ci->time, date)); #else lwsl_notice(" Peer Cert Valid from: %s", ctime(&ci->time)); #endif if (!lws_tls_peer_cert_info(wsi, LWS_TLS_CERT_INFO_VALIDITY_TO, ci, 0)) #if defined(LWS_HAVE_CTIME_R) lwsl_notice(" Peer Cert Valid to : %s", ctime_r(&ci->time, date)); #else lwsl_notice(" Peer Cert Valid to : %s", ctime(&ci->time)); #endif if (!lws_tls_peer_cert_info(wsi, LWS_TLS_CERT_INFO_USAGE, ci, 0)) lwsl_notice(" Peer Cert usage bits: 0x%x\n", ci->usage); if (!lws_tls_peer_cert_info(wsi, LWS_TLS_CERT_INFO_OPAQUE_PUBLIC_KEY, ci, sizeof(buf) - sizeof(*ci))) { lwsl_notice(" Peer Cert public key:\n"); lwsl_hexdump_notice(ci->ns.name, (unsigned int)ci->ns.len); } if (!lws_tls_peer_cert_info(wsi, LWS_TLS_CERT_INFO_AUTHORITY_KEY_ID, ci, 0)) { lwsl_notice(" AUTHORITY_KEY_ID\n"); lwsl_hexdump_notice(ci->ns.name, (size_t)ci->ns.len); } if (!lws_tls_peer_cert_info(wsi, LWS_TLS_CERT_INFO_AUTHORITY_KEY_ID_ISSUER, ci, 0)) { lwsl_notice(" AUTHORITY_KEY_ID ISSUER\n"); lwsl_hexdump_notice(ci->ns.name, (size_t)ci->ns.len); } if (!lws_tls_peer_cert_info(wsi, LWS_TLS_CERT_INFO_AUTHORITY_KEY_ID_SERIAL, ci, 0)) { lwsl_notice(" AUTHORITY_KEY_ID SERIAL\n"); lwsl_hexdump_notice(ci->ns.name, (size_t)ci->ns.len); } if (!lws_tls_peer_cert_info(wsi, LWS_TLS_CERT_INFO_SUBJECT_KEY_ID, ci, 0)) { lwsl_notice(" AUTHORITY_KEY_ID SUBJECT_KEY_ID\n"); lwsl_hexdump_notice(ci->ns.name, (size_t)ci->ns.len); } break; /* chunks of chunked content, with header removed */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ: lwsl_user("RECEIVE_CLIENT_HTTP_READ: read %d\n", (int)len); #if 0 /* enable to dump the html */ { const char *p = in; while (len--) if (*p < 0x7f) putchar(*p++); else putchar('.'); } #endif return 0; /* don't passthru */ /* uninterpreted http content */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP: { char buffer[1024 + LWS_PRE]; char *px = buffer + LWS_PRE; int lenx = sizeof(buffer) - LWS_PRE; if (lws_http_client_read(wsi, &px, &lenx) < 0) return -1; } return 0; /* don't passthru */ case LWS_CALLBACK_COMPLETED_CLIENT_HTTP: lwsl_user("LWS_CALLBACK_COMPLETED_CLIENT_HTTP\n"); client_wsi = NULL; bad = status != 200; lws_cancel_service(lws_get_context(wsi)); /* abort poll wait */ break; case LWS_CALLBACK_CLOSED_CLIENT_HTTP: client_wsi = NULL; bad = status != 200; lws_cancel_service(lws_get_context(wsi)); /* abort poll wait */ break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static const struct lws_protocols protocols[] = { { "http", callback_http, 0, 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_client_connect_info i; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* * For LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE * * | LLL_INFO | LLL_PARSER | LLL_HEADER | LLL_EXT | * LLL_CLIENT | LLL_LATENCY | LLL_DEBUG */ ; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http client [<-d ] [-l] [--h1]\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.port = CONTEXT_PORT_NO_LISTEN; /* we do not run any server */ info.protocols = protocols; /* * since we know this lws context is only ever going to be used with * one client wsis / fds / sockets at a time, let lws know it doesn't * have to use the default allocations for fd tables up to ulimit -n. * It will just allocate for 1 internal and 1 (+ 1 http2 nwsi) that we * will use. */ info.fd_limit_per_thread = 1 + 1 + 1; #if defined(LWS_WITH_MBEDTLS) || defined(USE_WOLFSSL) /* * OpenSSL uses the system trust store. mbedTLS has to be told which * CA to trust explicitly. */ info.client_ssl_ca_filepath = "./warmcat.com.cer"; #endif context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } memset(&i, 0, sizeof i); /* otherwise uninitialized garbage */ i.context = context; i.ssl_connection = LCCSCF_USE_SSL; if (lws_cmdline_option(argc, argv, "-l")) { i.port = 7681; i.address = "localhost"; i.ssl_connection |= LCCSCF_ALLOW_SELFSIGNED; } else { i.port = 443; i.address = "warmcat.com"; } if ((p = lws_cmdline_option(argc, argv, "-s"))) i.address = p; i.path = "/"; i.host = i.address; i.origin = i.address; /* force h1 even if h2 available */ if (lws_cmdline_option(argc, argv, "--h1")) i.alpn = "http/1.1"; i.method = "GET"; i.protocol = protocols[0].name; i.pwsi = &client_wsi; lws_client_connect_via_info(&i); while (n >= 0 && client_wsi && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); lwsl_user("Completed: %s\n", bad ? "failed" : "OK"); return bad; } libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-certinfo/warmcat.com.cer000066400000000000000000000036241476025525100324700ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ 0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ 3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-custom-headers/000077500000000000000000000000001476025525100306675ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-custom-headers/CMakeLists.txt000066400000000000000000000013601476025525100334270ustar00rootroot00000000000000project(lws-minimal-http-client-custom-headers C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-client-custom-headers) set(SRCS minimal-http-client-custom-headers.c) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-custom-headers/README.md000066400000000000000000000033401476025525100321460ustar00rootroot00000000000000# lws minimal http client custom headers This http client application shows how to send and receive custom headers. This currently only works on http 1, so the app forces that even if h2 enables. ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -l| Connect to https://localhost:7681 and accept selfsigned cert -n|no TLS The app looks for a custom header "test-custom-header" sent by warmcat.com. ``` $ ./lws-minimal-http-client-custom-headers [2019/03/11 05:46:45:7582] USER: LWS minimal http client Custom Headers [-d] [-l] [--h1] [2019/03/11 05:46:45:7671] NOTICE: created client ssl context for default [2019/03/11 05:46:46:7812] USER: Connected with server response: 200 [2019/03/11 05:46:46:7812] NOTICE: callback_http: custom header: 'hello' [2019/03/11 05:46:46:7814] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 ... ``` You can use the -n and -l to make this test app connect to localhost:7681 over http, and confirm the "dnt:1" header was sent either by tcpdump or by running the test server on :7681 with -d1151 ``` [2019/03/11 05:48:53:6806] PARSER: WSI_TOKEN_NAME_PART 'd' 0x64 (role=0x20000000) wsi->lextable_pos=0 [2019/03/11 05:48:53:6807] PARSER: WSI_TOKEN_NAME_PART 'n' 0x6E (role=0x20000000) wsi->lextable_pos=567 [2019/03/11 05:48:53:6807] PARSER: WSI_TOKEN_NAME_PART 't' 0x74 (role=0x20000000) wsi->lextable_pos=-1 [2019/03/11 05:48:53:6807] PARSER: WSI_TOKEN_NAME_PART ' ' 0x20 (role=0x20000000) wsi->lextable_pos=-1 [2019/03/11 05:48:53:6807] PARSER: WSI_TOKEN_NAME_PART '1' 0x31 (role=0x20000000) wsi->lextable_pos=-1 ' 0x0D (role=0x20000000) wsi->lextable_pos=-1NAME_PART ' [2019/03/11 05:48:53:6807] PARSER: WSI_TOKEN_NAME_PART ' ``` minimal-http-client-custom-headers.c000066400000000000000000000131161476025525100375560ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-custom-headers/* * lws-minimal-http-client * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the a minimal http client using lws. * * It visits https://warmcat.com/ and receives the html page there. You * can dump the page data by changing the #if 0 below. */ #include #include #include static int interrupted, bad = 1, status; static struct lws *client_wsi; static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { char val[32]; int n; switch (reason) { /* because we are protocols[0] ... */ case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); client_wsi = NULL; break; case LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER: { unsigned char **p = (unsigned char **)in, *end = (*p) + len; /* * How to send a custom header in the request to the server */ if (lws_add_http_header_by_name(wsi, (const unsigned char *)"dnt", (const unsigned char *)"1", 1, p, end)) return -1; break; } case LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: status = (int)lws_http_client_http_response(wsi); lwsl_user("Connected with server response: %d\n", status); /* * How to query custom headers (http 1.x only at the momemnt) * * warmcat.com sends a custom header "test-custom-header" for * testing, it has the fixed value "hello". */ n = lws_hdr_custom_length(wsi, "test-custom-header:", 19); if (n < 0) lwsl_notice("%s: Can't find test-custom-header\n", __func__); else { if (lws_hdr_custom_copy(wsi, val, sizeof(val), "test-custom-header:", 19) < 0) lwsl_notice("%s: custom header too long\n", __func__); else lwsl_notice("%s: custom header: '%s'\n", __func__, val); } break; /* chunks of chunked content, with header removed */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ: lwsl_user("RECEIVE_CLIENT_HTTP_READ: read %d\n", (int)len); #if 0 /* enable to dump the html */ { const char *p = in; while (len--) if (*p < 0x7f) putchar(*p++); else putchar('.'); } #endif return 0; /* don't passthru */ /* uninterpreted http content */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP: { char buffer[1024 + LWS_PRE]; char *px = buffer + LWS_PRE; int lenx = sizeof(buffer) - LWS_PRE; if (lws_http_client_read(wsi, &px, &lenx) < 0) return -1; } return 0; /* don't passthru */ case LWS_CALLBACK_COMPLETED_CLIENT_HTTP: lwsl_user("LWS_CALLBACK_COMPLETED_CLIENT_HTTP\n"); client_wsi = NULL; bad = status != 200; lws_cancel_service(lws_get_context(wsi)); /* abort poll wait */ break; case LWS_CALLBACK_CLOSED_CLIENT_HTTP: client_wsi = NULL; bad = status != 200; lws_cancel_service(lws_get_context(wsi)); /* abort poll wait */ break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static const struct lws_protocols protocols[] = { { "http", callback_http, 0, 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_client_connect_info i; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* * For LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE * * | LLL_INFO | LLL_PARSER | LLL_HEADER | LLL_EXT | * LLL_CLIENT | LLL_LATENCY | LLL_DEBUG */ ; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http client Custom Headers [-d] [-l] [--h1]\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.port = CONTEXT_PORT_NO_LISTEN; /* we do not run any server */ info.protocols = protocols; /* * since we know this lws context is only ever going to be used with * one client wsis / fds / sockets at a time, let lws know it doesn't * have to use the default allocations for fd tables up to ulimit -n. * It will just allocate for 1 internal and 1 (+ 1 http2 nwsi) that we * will use. */ info.fd_limit_per_thread = 1 + 1 + 1; #if defined(LWS_WITH_MBEDTLS) || defined(USE_WOLFSSL) /* * OpenSSL uses the system trust store. mbedTLS has to be told which * CA to trust explicitly. */ info.client_ssl_ca_filepath = "./warmcat.com.cer"; #endif context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } memset(&i, 0, sizeof i); /* otherwise uninitialized garbage */ i.context = context; if (!lws_cmdline_option(argc, argv, "-n")) i.ssl_connection = LCCSCF_USE_SSL; if (lws_cmdline_option(argc, argv, "-l")) { i.port = 7681; i.address = "localhost"; i.ssl_connection |= LCCSCF_ALLOW_SELFSIGNED; } else { i.port = 443; i.address = "warmcat.com"; } /* currently custom headers receive only works with h1 */ i.alpn = "http/1.1"; i.path = "/"; i.host = i.address; i.origin = i.address; i.method = "GET"; i.protocol = protocols[0].name; i.pwsi = &client_wsi; lws_client_connect_via_info(&i); while (n >= 0 && client_wsi && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); lwsl_user("Completed: %s\n", bad ? "failed" : "OK"); return bad; } libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-custom-headers/warmcat.com.cer000066400000000000000000000036241476025525100336020ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ 0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ 3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-h2-rxflow/000077500000000000000000000000001476025525100275745ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-h2-rxflow/CMakeLists.txt000066400000000000000000000024251476025525100323370ustar00rootroot00000000000000project(lws-minimal-http-client-h2-rxflow C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-client-h2-rxflow) set(SRCS minimal-http-client.c) set(requirements 1) require_lws_config(LWS_ROLE_H2 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) require_lws_config(LWS_WITH_SYS_STATE 1 requirements) require_lws_config(LWS_WITH_TLS 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (LWS_CTEST_INTERNET_AVAILABLE) add_test(NAME http-client-h2-rxflow-warmcat COMMAND lws-minimal-http-client-h2-rxflow) add_test(NAME http-client-h2-rxflow-warmcat-h1 COMMAND lws-minimal-http-client-h2-rxflow --h1) set_tests_properties(http-client-h2-rxflow-warmcat http-client-h2-rxflow-warmcat-h1 PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/http-client/minimal-http-client-h2-rxflow TIMEOUT 30) endif() if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-h2-rxflow/README.md000066400000000000000000000042041476025525100310530ustar00rootroot00000000000000# lws minimal http client-h2-rxflow The application reads from a server with tightly controlled and rate-limited receive flow control using h2 tx credit. ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -l| Connect to https://localhost:7681 and accept selfsigned cert --server |set server name to connect to --path |URL path to access on server -k|Apply tls option LCCSCF_ALLOW_INSECURE -j|Apply tls option LCCSCF_ALLOW_SELFSIGNED -m|Apply tls option LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK -e|Apply tls option LCCSCF_ALLOW_EXPIRED -v|Connection validity use 3s / 10s instead of default 5m / 5m10s --nossl| disable ssl connection -f |Indicate we will manually manage tx credit and set a new connection-specific initial tx credit RX is constrained to 1024 bytes every 250ms ``` $ ./lws-minimal-http-client-h2-rxflow --server phys.org --path "/" -f 1024 [2019/12/26 13:32:59:6801] U: LWS minimal http client [-d] [-l] [--h1] [2019/12/26 13:33:00:5087] N: system_notify_cb: manual peer tx credit 1024 [2019/12/26 13:33:01:7390] U: Connected to 72.251.236.55, http response: 200 [2019/12/26 13:33:01:7441] U: RECEIVE_CLIENT_HTTP_READ: read 1024 [2019/12/26 13:33:01:0855] U: RECEIVE_CLIENT_HTTP_READ: read 1024 [2019/12/26 13:33:02:3367] U: RECEIVE_CLIENT_HTTP_READ: read 1024 [2019/12/26 13:33:02:5858] U: RECEIVE_CLIENT_HTTP_READ: read 1024 [2019/12/26 13:33:02:8384] U: RECEIVE_CLIENT_HTTP_READ: read 1024 [2019/12/26 13:33:02:0886] U: RECEIVE_CLIENT_HTTP_READ: read 1024 ... [2019/12/26 13:33:46:1152] U: RECEIVE_CLIENT_HTTP_READ: read 1024 [2019/12/26 13:33:47:3650] U: RECEIVE_CLIENT_HTTP_READ: read 1024 [2019/12/26 13:33:47:6150] U: RECEIVE_CLIENT_HTTP_READ: read 1024 [2019/12/26 13:33:47:8666] U: RECEIVE_CLIENT_HTTP_READ: read 1024 [2019/12/26 13:33:47:1154] U: RECEIVE_CLIENT_HTTP_READ: read 1024 [2019/12/26 13:33:48:3656] U: RECEIVE_CLIENT_HTTP_READ: read 1024 [2019/12/26 13:33:48:6157] U: RECEIVE_CLIENT_HTTP_READ: read 380 [2019/12/26 13:33:48:6219] U: LWS_CALLBACK_COMPLETED_CLIENT_HTTP [2019/12/26 13:33:48:7050] U: Completed: OK ``` libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-h2-rxflow/minimal-http-client.c000066400000000000000000000164551476025525100336320ustar00rootroot00000000000000/* * lws-minimal-http-client-h2-rxflow * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the a minimal http client using lws. * * It visits https://warmcat.com/ and receives the html page there. You * can dump the page data by changing the #if 0 below. */ #include #include #include static int interrupted, bad = 1, status, each = 1024; static struct lws *client_wsi; static const lws_retry_bo_t retry = { .secs_since_valid_ping = 3, .secs_since_valid_hangup = 10, }; struct pss { lws_sorted_usec_list_t sul; struct lws *wsi; }; /* * Once we're established, we ask the server for another 1KB every 250ms * until we have it all. */ static void drain_cb(lws_sorted_usec_list_t *sul) { struct pss *pss = lws_container_of(sul, struct pss, sul); lws_wsi_tx_credit(pss->wsi, LWSTXCR_PEER_TO_US, each); lws_sul_schedule(lws_get_context(pss->wsi), 0, &pss->sul, drain_cb, 250 * LWS_US_PER_MS); } static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct pss *pss = (struct pss *)user; switch (reason) { /* because we are protocols[0] ... */ case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); interrupted = 1; break; case LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: { char buf[128]; lws_get_peer_simple(wsi, buf, sizeof(buf)); status = (int)lws_http_client_http_response(wsi); lwsl_user("Connected to %s, http response: %d\n", buf, status); } pss->wsi = wsi; lws_sul_schedule(lws_get_context(wsi), 0, &pss->sul, drain_cb, 250 * LWS_US_PER_MS); break; /* chunks of chunked content, with header removed */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ: lwsl_user("RECEIVE_CLIENT_HTTP_READ: read %d\n", (int)len); #if 0 /* enable to dump the html */ { const char *p = in; while (len--) if (*p < 0x7f) putchar(*p++); else putchar('.'); } #endif return 0; /* don't passthru */ /* uninterpreted http content */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP: { char buffer[1024 + LWS_PRE]; char *px = buffer + LWS_PRE; int lenx = sizeof(buffer) - LWS_PRE; if (lws_http_client_read(wsi, &px, &lenx) < 0) return -1; } return 0; /* don't passthru */ case LWS_CALLBACK_COMPLETED_CLIENT_HTTP: lwsl_user("LWS_CALLBACK_COMPLETED_CLIENT_HTTP\n"); interrupted = 1; bad = status != 200; lws_cancel_service(lws_get_context(wsi)); /* abort poll wait */ break; case LWS_CALLBACK_CLOSED_CLIENT_HTTP: interrupted = 1; bad = status != 200; lws_sul_cancel(&pss->sul); lws_cancel_service(lws_get_context(wsi)); /* abort poll wait */ break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static const struct lws_protocols protocols[] = { { "http", callback_http, sizeof(struct pss), 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; static void sigint_handler(int sig) { interrupted = 1; } struct args { int argc; const char **argv; }; static int system_notify_cb(lws_state_manager_t *mgr, lws_state_notify_link_t *link, int current, int target) { struct lws_context *context = mgr->parent; struct lws_client_connect_info i; struct args *a = lws_context_user(context); const char *p; if (current != LWS_SYSTATE_OPERATIONAL || target != LWS_SYSTATE_OPERATIONAL) return 0; lwsl_info("%s: operational\n", __func__); memset(&i, 0, sizeof i); /* otherwise uninitialized garbage */ i.context = context; if (!lws_cmdline_option(a->argc, a->argv, "-n")) i.ssl_connection = LCCSCF_USE_SSL; if (lws_cmdline_option(a->argc, a->argv, "-l")) { i.port = 7681; i.address = "localhost"; i.ssl_connection |= LCCSCF_ALLOW_SELFSIGNED; } else { i.port = 443; i.address = "warmcat.com"; } if (lws_cmdline_option(a->argc, a->argv, "--nossl")) i.ssl_connection = 0; i.ssl_connection |= LCCSCF_H2_QUIRK_OVERFLOWS_TXCR | LCCSCF_H2_QUIRK_NGHTTP2_END_STREAM; i.alpn = "h2"; if (lws_cmdline_option(a->argc, a->argv, "--h1")) i.alpn = "http/1.1"; if ((p = lws_cmdline_option(a->argc, a->argv, "-p"))) i.port = atoi(p); if (lws_cmdline_option(a->argc, a->argv, "-j")) i.ssl_connection |= LCCSCF_ALLOW_SELFSIGNED; if (lws_cmdline_option(a->argc, a->argv, "-k")) i.ssl_connection |= LCCSCF_ALLOW_INSECURE; if (lws_cmdline_option(a->argc, a->argv, "-m")) i.ssl_connection |= LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK; if (lws_cmdline_option(a->argc, a->argv, "-e")) i.ssl_connection |= LCCSCF_ALLOW_EXPIRED; if ((p = lws_cmdline_option(a->argc, a->argv, "-f"))) { i.ssl_connection |= LCCSCF_H2_MANUAL_RXFLOW; i.manual_initial_tx_credit = atoi(p); lwsl_notice("%s: manual peer tx credit %d\n", __func__, i.manual_initial_tx_credit); } if ((p = lws_cmdline_option(a->argc, a->argv, "--each"))) each = atoi(p); /* the default validity check is 5m / 5m10s... -v = 3s / 10s */ if (lws_cmdline_option(a->argc, a->argv, "-v")) i.retry_and_idle_policy = &retry; if ((p = lws_cmdline_option(a->argc, a->argv, "--server"))) i.address = p; if ((p = lws_cmdline_option(a->argc, a->argv, "--path"))) i.path = p; else i.path = "/"; i.host = i.address; i.origin = i.address; i.method = "GET"; i.protocol = protocols[0].name; i.pwsi = &client_wsi; return !lws_client_connect_via_info(&i); } int main(int argc, const char **argv) { lws_state_notify_link_t notifier = { { NULL, NULL, NULL }, system_notify_cb, "app" }; lws_state_notify_link_t *na[] = { ¬ifier, NULL }; struct lws_context_creation_info info; struct lws_context *context; struct args args; int n = 0; // uint8_t memcert[4096]; args.argc = argc; args.argv = argv; signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ lws_cmdline_option_handle_builtin(argc, argv, &info); lwsl_user("LWS minimal http client [-d] [-l] [--h1]\n"); info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.port = CONTEXT_PORT_NO_LISTEN; /* we do not run any server */ info.protocols = protocols; info.user = &args; info.register_notifier_list = na; info.timeout_secs = 10; info.connect_timeout_secs = 30; /* * since we know this lws context is only ever going to be used with * one client wsis / fds / sockets at a time, let lws know it doesn't * have to use the default allocations for fd tables up to ulimit -n. * It will just allocate for 1 internal and 1 (+ 1 http2 nwsi) that we * will use. */ info.fd_limit_per_thread = 1 + 1 + 1; #if defined(LWS_WITH_MBEDTLS) || defined(USE_WOLFSSL) /* * OpenSSL uses the system trust store. mbedTLS has to be told which * CA to trust explicitly. */ info.client_ssl_ca_filepath = "./warmcat.com.cer"; #endif #if 0 n = open("./warmcat.com.cer", O_RDONLY); if (n >= 0) { info.client_ssl_ca_mem_len = read(n, memcert, sizeof(memcert)); info.client_ssl_ca_mem = memcert; close(n); n = 0; memcert[info.client_ssl_ca_mem_len++] = '\0'; } #endif context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); lwsl_user("Completed: %s\n", bad ? "failed" : "OK"); return bad; } libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-h2-rxflow/warmcat.com.cer000066400000000000000000000036241476025525100325070ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ 0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ 3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-hugeurl/000077500000000000000000000000001476025525100274175ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-hugeurl/CMakeLists.txt000066400000000000000000000030451476025525100321610ustar00rootroot00000000000000project(lws-minimal-http-client-hugeurl C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-client-hugeurl) set(SRCS minimal-http-client-hugeurl.c) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) require_lws_config(LWS_WITH_TLS 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (LWS_CTEST_INTERNET_AVAILABLE) # # creates a fixture res_hchugeurlw to get a lease on the # server resources # sai_resource(warmcat_conns 1 40 hchugeurlw) add_test(NAME http-client-hugeurl-warmcat COMMAND lws-minimal-http-client-hugeurl ) add_test(NAME http-client-hugeurl-warmcat-h1 COMMAND lws-minimal-http-client-hugeurl --h1) set_tests_properties(http-client-hugeurl-warmcat http-client-hugeurl-warmcat-h1 PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/http-client/minimal-http-client-hugeurl TIMEOUT 20) if (DEFINED ENV{SAI_OVN}) set_tests_properties(http-client-hugeurl-warmcat http-client-hugeurl-warmcat-h1 PROPERTIES FIXTURES_REQUIRED "res_hchugeurlw") endif() endif() if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-hugeurl/README.md000066400000000000000000000052631476025525100307040ustar00rootroot00000000000000# lws minimal http client hugeurl ## build ``` $ cmake . && make ``` ## usage The application goes to https://warmcat.com/?fakeparam=<2KB> and receives the page data. ``` $ ./lws-minimal-http-client [2018/03/04 14:43:20:8562] USER: LWS minimal http client hugeurl [2018/03/04 14:43:20:8571] NOTICE: Creating Vhost 'default' port -1, 1 protocols, IPv6 on [2018/03/04 14:43:20:8616] NOTICE: created client ssl context for default [2018/03/04 14:43:20:8617] NOTICE: lws_client_connect_2: 0x1814dc0: address warmcat.com [2018/03/04 14:43:21:1496] NOTICE: lws_client_connect_2: 0x1814dc0: address warmcat.com [2018/03/04 14:43:22:0154] NOTICE: lws_client_interpret_server_handshake: incoming content length 26520 [2018/03/04 14:43:22:0154] NOTICE: lws_client_interpret_server_handshake: client connection up [2018/03/04 14:43:22:0169] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0169] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0169] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0169] USER: RECEIVE_CLIENT_HTTP_READ: read 1015 [2018/03/04 14:43:22:0174] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0174] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0174] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0174] USER: RECEIVE_CLIENT_HTTP_READ: read 1015 [2018/03/04 14:43:22:0179] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0179] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0179] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0179] USER: RECEIVE_CLIENT_HTTP_READ: read 1015 [2018/03/04 14:43:22:3010] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3010] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3010] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3010] USER: RECEIVE_CLIENT_HTTP_READ: read 1015 [2018/03/04 14:43:22:3015] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3015] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3015] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3015] USER: RECEIVE_CLIENT_HTTP_READ: read 1015 [2018/03/04 14:43:22:3020] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3020] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3020] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3020] USER: RECEIVE_CLIENT_HTTP_READ: read 1015 [2018/03/04 14:43:22:3022] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3022] USER: RECEIVE_CLIENT_HTTP_READ: read 974 [2018/03/04 14:43:22:3022] NOTICE: lws_http_client_read: transaction completed says -1 [2018/03/04 14:43:23:3042] USER: Completed ``` minimal-http-client-hugeurl.c000066400000000000000000000147021476025525100350400ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-hugeurl/* * lws-minimal-http-client hugeurl * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the a minimal http client using lws. * * It visits https://warmcat.com/?fakeparam=<2KB> and receives the html * page there. You can dump the page data by changing the #if 0 below. */ #include #include #include static int interrupted, bad = 1, status; static struct lws *client_wsi; static const char * const uri = "/?fakeparam=" "00000000000000000000000000000000000000000000000000" "00000000000000000000000000000000000000000000000000" "00000000000000000000000000000000000000000000000000" "00000000000000000000000000000000000000000000000000" "00000000000000000000000000000000000000000000000000" "00000000000000000000000000000000000000000000000000" "00000000000000000000000000000000000000000000000000" "00000000000000000000000000000000000000000000000000" "00000000000000000000000000000000000000000000000000" "00000000000000000000000000000000000000000000000000" /* 500 */ "11111111111111111111111111111111111111111111111111" "11111111111111111111111111111111111111111111111111" "11111111111111111111111111111111111111111111111111" "11111111111111111111111111111111111111111111111111" "11111111111111111111111111111111111111111111111111" "11111111111111111111111111111111111111111111111111" "11111111111111111111111111111111111111111111111111" "11111111111111111111111111111111111111111111111111" "11111111111111111111111111111111111111111111111111" "11111111111111111111111111111111111111111111111111" /* 1000 */ "22222222222222222222222222222222222222222222222222" "22222222222222222222222222222222222222222222222222" "22222222222222222222222222222222222222222222222222" "22222222222222222222222222222222222222222222222222" "22222222222222222222222222222222222222222222222222" "22222222222222222222222222222222222222222222222222" "22222222222222222222222222222222222222222222222222" "22222222222222222222222222222222222222222222222222" "22222222222222222222222222222222222222222222222222" "22222222222222222222222222222222222222222222222222" /* 1500 */ "33333333333333333333333333333333333333333333333333" "33333333333333333333333333333333333333333333333333" "33333333333333333333333333333333333333333333333333" "33333333333333333333333333333333333333333333333333" "33333333333333333333333333333333333333333333333333" "33333333333333333333333333333333333333333333333333" "33333333333333333333333333333333333333333333333333" "33333333333333333333333333333333333333333333333333" "33333333333333333333333333333333333333333333333333" "33333333333333333333333333333333333333333333333333" /* 2000 */ ; static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { switch (reason) { /* because we are protocols[0] ... */ case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); client_wsi = NULL; break; case LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: status = (int)lws_http_client_http_response(wsi); lwsl_user("Connected with server response: %d\n", status); break; /* chunks of chunked content, with header removed */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ: lwsl_user("RECEIVE_CLIENT_HTTP_READ: read %d\n", (int)len); #if 0 /* enable to dump the html */ { const char *p = in; while (len--) if (*p < 0x7f) putchar(*p++); else putchar('.'); } #endif return 0; /* don't passthru */ /* uninterpreted http content */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP: { char buffer[1024 + LWS_PRE]; char *px = buffer + LWS_PRE; int lenx = sizeof(buffer) - LWS_PRE; if (lws_http_client_read(wsi, &px, &lenx) < 0) return -1; } return 0; /* don't passthru */ case LWS_CALLBACK_COMPLETED_CLIENT_HTTP: client_wsi = NULL; bad = status != 200; lws_cancel_service(lws_get_context(wsi)); /* abort poll wait */ break; case LWS_CALLBACK_CLOSED_CLIENT_HTTP: client_wsi = NULL; bad = status != 200; lws_cancel_service(lws_get_context(wsi)); /* abort poll wait */ break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static const struct lws_protocols protocols[] = { { "http", callback_http, 0, 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_client_connect_info i; struct lws_context *context; int n = 0; signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ lws_cmdline_option_handle_builtin(argc, argv, &info); lwsl_user("LWS minimal http client hugeurl [-d ] [-l] [--h1]\n"); info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.port = CONTEXT_PORT_NO_LISTEN; /* we do not run any server */ info.protocols = protocols; info.pt_serv_buf_size = 8192; info.timeout_secs = 10; info.connect_timeout_secs = 30; /* * since we know this lws context is only ever going to be used with * one client wsis / fds / sockets at a time, let lws know it doesn't * have to use the default allocations for fd tables up to ulimit -n. * It will just allocate for 1 internal and 1 (+ 1 http2 nwsi) that we * will use. */ info.fd_limit_per_thread = 1 + 1 + 1; #if defined(LWS_WITH_MBEDTLS) || defined(USE_WOLFSSL) /* * OpenSSL uses the system trust store. mbedTLS has to be told which * CA to trust explicitly. */ info.client_ssl_ca_filepath = "./warmcat.com.cer"; #endif context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } memset(&i, 0, sizeof i); /* otherwise uninitialized garbage */ i.context = context; i.ssl_connection = LCCSCF_USE_SSL; if (lws_cmdline_option(argc, argv, "-l")) { i.port = 7681; i.address = "localhost"; i.ssl_connection |= LCCSCF_ALLOW_SELFSIGNED; } else { i.port = 443; i.address = "warmcat.com"; } if (lws_cmdline_option(argc, argv, "--h1")) i.alpn = "http/1.1"; i.path = uri; i.host = i.address; i.origin = i.address; i.method = "GET"; i.protocol = protocols[0].name; i.pwsi = &client_wsi; lws_client_connect_via_info(&i); while (n >= 0 && client_wsi && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); lwsl_user("Completed: %s\n", bad? "failed": "OK"); return bad; } libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-hugeurl/warmcat.com.cer000066400000000000000000000036241476025525100323320ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ 0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ 3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-jit-trust/000077500000000000000000000000001476025525100277115ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-jit-trust/CMakeLists.txt000066400000000000000000000146411476025525100324570ustar00rootroot00000000000000project(lws-minimal-http-client-jit-trust C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-client-jit-trust) set(SRCS minimal-http-client.c) set(has_fault_injection 1) set(has_h2 1) set(has_plugins 1) set(has_ss_policy_parse 1) set(has_no_system_vhost 1) set(has_async_dns 1) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) require_lws_config(LWS_WITH_SYS_STATE 1 requirements) require_lws_config(LWS_WITH_TLS_JIT_TRUST 1 requirements) require_lws_config(LWS_ROLE_H2 1 has_h2) require_lws_config(LWS_WITH_SYS_FAULT_INJECTION 1 has_fault_injection) require_lws_config(LWS_WITH_EVLIB_PLUGINS 1 has_plugins) require_lws_config(LWS_WITH_EVENT_LIBS 1 has_plugins) require_lws_config(LWS_WITH_SECURE_STREAMS 1 has_ss_policy_parse) require_lws_config(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY 0 has_ss_policy_parse) require_lws_config(LWS_WITH_SYS_ASYNC_DNS 0 has_no_system_vhost) require_lws_config(LWS_WITH_SYS_NTPCLIENT 0 has_no_system_vhost) require_lws_config(LWS_WITH_SYS_DHCP_CLIENT 0 has_no_system_vhost) require_lws_config(LWS_WITH_SYS_ASYNC_DNS 1 has_async_dns) if (requirements) add_executable(${SAMP} ${SRCS}) find_program(VALGRIND "valgrind") sai_resource(warmcat_conns 1 40 http_client_warmcat) if (LWS_CTEST_INTERNET_AVAILABLE) set(mytests http-client-warmcat-h1) if (has_h2) add_test(NAME http-client-warmcat COMMAND lws-minimal-http-client ) list(APPEND mytests http-client-warmcat) endif() add_test(NAME http-client-warmcat-h1 COMMAND lws-minimal-http-client --h1) if (has_fault_injection) # creation related faults list(APPEND mytests http-client-fi-ctx1) add_test(NAME http-client-fi-ctx1 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "ctx_createfail1") # if (has_plugins) # !!! need to actually select an available evlib plugin to trigger this # list(APPEND mytests http-client-fi-pi) # add_test(NAME http-client-fi-pi COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "ctx_createfail_plugin_init") # endif() list(APPEND mytests http-client-fi-ctx2) add_test(NAME http-client-fi-ctx2 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "ctx_createfail_evlib_sel") list(APPEND mytests http-client-fi-ctx3) add_test(NAME http-client-fi-ctx3 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "ctx_createfail_oom_ctx") list(APPEND mytests http-client-fi-ctx4) add_test(NAME http-client-fi-ctx4 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "ctx_createfail_privdrop") list(APPEND mytests http-client-fi-ctx5) add_test(NAME http-client-fi-ctx5 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "ctx_createfail_maxfds") list(APPEND mytests http-client-fi-ctx6) add_test(NAME http-client-fi-ctx6 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "ctx_createfail_oom_fds") list(APPEND mytests http-client-fi-ctx7) add_test(NAME http-client-fi-ctx7 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "ctx_createfail_plat_init") list(APPEND mytests http-client-fi-ctx8) add_test(NAME http-client-fi-ctx8 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "ctx_createfail_evlib_init") list(APPEND mytests http-client-fi-ctx9) add_test(NAME http-client-fi-ctx9 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "ctx_createfail_evlib_pt") if (NOT has_no_system_vhost) list(APPEND mytests http-client-fi-ctx10) add_test(NAME http-client-fi-ctx10 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "ctx_createfail_sys_vh") list(APPEND mytests http-client-fi-ctx11) add_test(NAME http-client-fi-ctx11 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "ctx_createfail_sys_vh_init") endif() list(APPEND mytests http-client-fi-ctx12) add_test(NAME http-client-fi-ctx12 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "ctx_createfail_def_vh") list(APPEND mytests http-client-fi-vh1) add_test(NAME http-client-fi-vh1 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "vh/vh_create_oom") list(APPEND mytests http-client-fi-vh2) add_test(NAME http-client-fi-vh2 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "vh/vh_create_pcols_oom") list(APPEND mytests http-client-fi-vh3) add_test(NAME http-client-fi-vh3 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "vh/vh_create_ssl_srv") list(APPEND mytests http-client-fi-vh4) add_test(NAME http-client-fi-vh4 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "vh/vh_create_ssl_cli") list(APPEND mytests http-client-fi-vh5) add_test(NAME http-client-fi-vh5 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "vh/vh_create_srv_init") list(APPEND mytests http-client-fi-dnsfail) add_test(NAME http-client-fi-dnsfail COMMAND lws-minimal-http-client --expected-exit 3 --fault-injection "wsi=user/dnsfail") if (has_async_dns) list(APPEND mytests http-client-fi-connfail) add_test(NAME http-client-fi-connfail COMMAND lws-minimal-http-client --expected-exit 3 --fault-injection "wsi=user/connfail") else() list(APPEND mytests http-client-fi-connfail) add_test(NAME http-client-fi-connfail COMMAND lws-minimal-http-client --expected-exit 2 --fault-injection "wsi=user/connfail") endif() list(APPEND mytests http-client-fi-user-est-fail) add_test(NAME http-client-fi-user-est-fail COMMAND lws-minimal-http-client --expected-exit 3 --fault-injection "wsi/user_reject_at_est") endif() set_tests_properties(${mytests} PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/http-client/minimal-http-client TIMEOUT 20) if (DEFINED ENV{SAI_OVN}) set_tests_properties(${mytests} PROPERTIES FIXTURES_REQUIRED "res_http_client_warmcat") endif() endif() if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-jit-trust/README.md000066400000000000000000000116341476025525100311750ustar00rootroot00000000000000# lws minimal http client JIT Trust This example turns off any existing trusted CAs and then tries to connect to a server, by default, warmcat.com. It validates the remote certificates using trusted CAs from a JIT Trust blob compiled into the code. ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -l| Connect to https://localhost:7681 and accept selfsigned cert --h1|Specify http/1.1 only using ALPN, rejects h2 even if server supports it --server |set server name to connect to -k|Apply tls option LCCSCF_ALLOW_INSECURE -j|Apply tls option LCCSCF_ALLOW_SELFSIGNED -m|Apply tls option LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK -e|Apply tls option LCCSCF_ALLOW_EXPIRED -v|Connection validity use 3s / 10s instead of default 5m / 5m10s --nossl| disable ssl connection --user | Set Basic Auth username --password | Set Basic Auth password ``` $ ./bin/lws-minimal-http-client-jit-trust --h1 --server ebay.com --path / ==1302866== [2021/06/17 14:33:54:7500] U: LWS minimal http client JIT Trust [-d] [-l] [--h1] [2021/06/17 14:33:54:7956] N: LWS: 4.2.99-v4.2.0-70-g80e7e39bae, loglevel 1031 [2021/06/17 14:33:54:7960] N: NET CLI SRV H1 H2 WS MbedTLS ConMon IPv6-absent [2021/06/17 14:33:54:8165] N: ++ [wsi|0|pipe] (1) [2021/06/17 14:33:54:8227] N: ++ [vh|0|netlink] (1) [2021/06/17 14:33:54:8319] N: ++ [vh|1|default||-1] (2) [2021/06/17 14:33:55:0107] N: ++ [wsicli|0|GET/h1/ebay.com] (1) [2021/06/17 14:33:56:0291] N: ++ [vh|2|jitt-7F69A044||-1] (3) [2021/06/17 14:33:56:0355] E: CLIENT_CONNECTION_ERROR: server's cert didn't look good, invalidca (use_ssl 0x20000061) X509_V_ERR = 24: CA is not trusted [2021/06/17 14:33:56:0376] N: ++ [wsicli|1|GET/h1/ebay.com] (2) [2021/06/17 14:33:56:0746] N: -- [wsicli|0|GET/h1/ebay.com] (1) 1.061s [2021/06/17 14:33:56:7555] N: lws_client_reset: REDIRECT www.ebay.com:443, path='/', ssl = 1, alpn='http/1.1' [2021/06/17 14:33:57:0205] N: ++ [vh|3|jitt-DFF2B5B4||-1] (4) [2021/06/17 14:33:57:0208] E: CLIENT_CONNECTION_ERROR: server's cert didn't look good, invalidca (use_ssl 0x1) X509_V_ERR = 24: CA is not trusted [2021/06/17 14:33:57:0210] N: ++ [wsicli|2|GET/h1/ebay.com] (2) [2021/06/17 14:33:57:0288] N: -- [wsicli|1|GET/h1/ebay.com] (1) 991.119ms [2021/06/17 14:33:57:7528] N: lws_client_reset: REDIRECT www.ebay.com:443, path='/', ssl = 1, alpn='http/1.1' [2021/06/17 14:33:58:1564] U: Connected to 195.95.193.127, http response: 200 [2021/06/17 14:33:58:1637] U: RECEIVE_CLIENT_HTTP_READ: read 209 [2021/06/17 14:33:58:1796] U: RECEIVE_CLIENT_HTTP_READ: read 197 [2021/06/17 14:33:58:1822] U: RECEIVE_CLIENT_HTTP_READ: read 1014 [2021/06/17 14:33:58:1847] U: RECEIVE_CLIENT_HTTP_READ: read 1024 [2021/06/17 14:33:58:1851] U: RECEIVE_CLIENT_HTTP_READ: read 1022 [2021/06/17 14:33:58:2748] U: RECEIVE_CLIENT_HTTP_READ: read 242 [2021/06/17 14:33:58:2782] U: RECEIVE_CLIENT_HTTP_READ: read 1014 [2021/06/17 14:33:58:2784] U: RECEIVE_CLIENT_HTTP_READ: read 1024 [2021/06/17 14:33:58:2785] U: RECEIVE_CLIENT_HTTP_READ: read 1024 ... [2021/06/17 14:33:58:4661] U: RECEIVE_CLIENT_HTTP_READ: read 1024 [2021/06/17 14:33:58:4662] U: RECEIVE_CLIENT_HTTP_READ: read 1024 [2021/06/17 14:33:58:4663] U: RECEIVE_CLIENT_HTTP_READ: read 1024 [2021/06/17 14:33:58:4664] U: RECEIVE_CLIENT_HTTP_READ: read 1024 [2021/06/17 14:33:58:4665] U: RECEIVE_CLIENT_HTTP_READ: read 1024 [2021/06/17 14:33:58:4666] U: RECEIVE_CLIENT_HTTP_READ: read 1024 [2021/06/17 14:33:58:4667] U: RECEIVE_CLIENT_HTTP_READ: read 1024 [2021/06/17 14:33:58:4668] U: RECEIVE_CLIENT_HTTP_READ: read 1024 [2021/06/17 14:33:58:4669] U: RECEIVE_CLIENT_HTTP_READ: read 1024 [2021/06/17 14:33:58:4670] U: RECEIVE_CLIENT_HTTP_READ: read 1024 [2021/06/17 14:33:58:4671] U: RECEIVE_CLIENT_HTTP_READ: read 1024 [2021/06/17 14:33:58:4672] U: RECEIVE_CLIENT_HTTP_READ: read 1024 [2021/06/17 14:33:58:4673] U: RECEIVE_CLIENT_HTTP_READ: read 286 [2021/06/17 14:33:58:4690] U: LWS_CALLBACK_COMPLETED_CLIENT_HTTP [2021/06/17 14:33:58:4712] E: main: destroying context, interrupted = 1 [2021/06/17 14:33:58:4774] N: -- [wsi|0|pipe] (0) 3.661s [2021/06/17 14:33:58:4780] N: callback_http: LWS_CALLBACK_CLOSED_CLIENT_HTTP [2021/06/17 14:33:58:4829] N: -- [vh|3|jitt-DFF2B5B4||-1] (3) 1.462s [2021/06/17 14:33:58:4833] N: -- [wsicli|2|GET/h1/ebay.com] (0) 1.462s [2021/06/17 14:33:58:4834] N: -- [vh|0|netlink] (2) 3.660s [2021/06/17 14:33:58:4858] N: -- [vh|1|default||-1] (1) 3.654s [2021/06/17 14:33:58:4860] N: -- [vh|2|jitt-7F69A044||-1] (0) 2.456s [2021/06/17 14:33:58:4974] U: Completed: OK (seen expected 0) ``` You can also test the client Basic Auth support against the http-server/minimal-http-server-basicauth example. In one console window run the server and in the other ``` $ lws-minimal-http-client -l --nossl --path /secret/index.html --user user --password password ``` The Basic Auth credentials for the test server are literally username "user" and password "password". libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-jit-trust/minimal-http-client.c000066400000000000000000000262501476025525100337410ustar00rootroot00000000000000/* * lws-minimal-http-client-jit-trust * * Written in 2010-2021 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the a minimal http client using lws. * * It visits https://warmcat.com/ and receives the html page there. You * can dump the page data by changing the #if 0 below. */ #include #include #include static int interrupted, bad = 1, status, conmon; #if defined(LWS_WITH_HTTP2) static int long_poll; #endif static struct lws *client_wsi; static const char *ba_user, *ba_password; static int budget = 6; /* * For this example, we import the C-formatted array version of the trust blob * directly. This is produced by running scripts/mozilla-trust-gen.sh and can * be found in ./_trust after that. */ static uint8_t jit_trust_blob[] = { #include "./trust_blob.h" }; static const lws_retry_bo_t retry = { .secs_since_valid_ping = 3, .secs_since_valid_hangup = 10, }; #if defined(LWS_WITH_CONMON) void dump_conmon_data(struct lws *wsi) { const struct addrinfo *ai; struct lws_conmon cm; char ads[48]; lws_conmon_wsi_take(wsi, &cm); lws_sa46_write_numeric_address(&cm.peer46, ads, sizeof(ads)); lwsl_notice("%s: peer %s, dns: %uus, sockconn: %uus, " "tls: %uus, txn_resp: %uus\n", __func__, ads, (unsigned int)cm.ciu_dns, (unsigned int)cm.ciu_sockconn, (unsigned int)cm.ciu_tls, (unsigned int)cm.ciu_txn_resp); ai = cm.dns_results_copy; while (ai) { lws_sa46_write_numeric_address((lws_sockaddr46 *)ai->ai_addr, ads, sizeof(ads)); lwsl_notice("%s: DNS %s\n", __func__, ads); ai = ai->ai_next; } /* * This destroys the DNS list in the lws_conmon that we took * responsibility for when we used lws_conmon_wsi_take() */ lws_conmon_release(&cm); } #endif struct args { int argc; const char **argv; }; static const struct lws_protocols protocols[]; static int try_connect(struct lws_context *cx) { struct lws_client_connect_info i; struct args *a = lws_context_user(cx); const char *p; memset(&i, 0, sizeof i); /* otherwise uninitialized garbage */ i.context = cx; if (!lws_cmdline_option(a->argc, a->argv, "-n")) { i.ssl_connection = LCCSCF_USE_SSL; #if defined(LWS_WITH_HTTP2) /* requires h2 */ if (lws_cmdline_option(a->argc, a->argv, "--long-poll")) { lwsl_user("%s: long poll mode\n", __func__); long_poll = 1; } #endif } if (lws_cmdline_option(a->argc, a->argv, "-l")) { i.port = 7681; i.address = "localhost"; i.ssl_connection |= LCCSCF_ALLOW_SELFSIGNED; } else { i.port = 443; i.address = "warmcat.com"; } if (lws_cmdline_option(a->argc, a->argv, "--nossl")) i.ssl_connection = 0; i.ssl_connection |= LCCSCF_H2_QUIRK_OVERFLOWS_TXCR | LCCSCF_H2_QUIRK_NGHTTP2_END_STREAM | LCCSCF_ACCEPT_TLS_DOWNGRADE_REDIRECTS; i.alpn = "h2,http/1.1"; if (lws_cmdline_option(a->argc, a->argv, "--h1")) i.alpn = "http/1.1"; if (lws_cmdline_option(a->argc, a->argv, "--h2-prior-knowledge")) i.ssl_connection |= LCCSCF_H2_PRIOR_KNOWLEDGE; if ((p = lws_cmdline_option(a->argc, a->argv, "-p"))) i.port = atoi(p); if ((p = lws_cmdline_option(a->argc, a->argv, "--user"))) ba_user = p; if ((p = lws_cmdline_option(a->argc, a->argv, "--password"))) ba_password = p; if (lws_cmdline_option(a->argc, a->argv, "-j")) i.ssl_connection |= LCCSCF_ALLOW_SELFSIGNED; if (lws_cmdline_option(a->argc, a->argv, "-k")) i.ssl_connection |= LCCSCF_ALLOW_INSECURE; if (lws_cmdline_option(a->argc, a->argv, "-m")) i.ssl_connection |= LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK; if (lws_cmdline_option(a->argc, a->argv, "-e")) i.ssl_connection |= LCCSCF_ALLOW_EXPIRED; if ((p = lws_cmdline_option(a->argc, a->argv, "-f"))) { i.ssl_connection |= LCCSCF_H2_MANUAL_RXFLOW; i.manual_initial_tx_credit = atoi(p); lwsl_notice("%s: manual peer tx credit %d\n", __func__, i.manual_initial_tx_credit); } #if defined(LWS_WITH_CONMON) if (lws_cmdline_option(a->argc, a->argv, "--conmon")) { i.ssl_connection |= LCCSCF_CONMON; conmon = 1; } #endif /* the default validity check is 5m / 5m10s... -v = 3s / 10s */ if (lws_cmdline_option(a->argc, a->argv, "-v")) i.retry_and_idle_policy = &retry; if ((p = lws_cmdline_option(a->argc, a->argv, "--server"))) i.address = p; if ((p = lws_cmdline_option(a->argc, a->argv, "--path"))) i.path = p; else i.path = "/"; i.host = i.address; i.origin = i.address; i.method = "GET"; i.protocol = protocols[0].name; i.pwsi = &client_wsi; i.fi_wsi_name = "user"; if (!lws_client_connect_via_info(&i)) { lwsl_err("Client creation failed\n"); interrupted = 1; bad = 2; /* could not even start client connection */ lws_cancel_service(cx); return 1; } return 0; } static const char *ua = "Mozilla/5.0 (X11; Linux x86_64) " "AppleWebKit/537.36 (KHTML, like Gecko) " "Chrome/51.0.2704.103 Safari/537.36", *acc = "*/*"; static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { switch (reason) { /* because we are protocols[0] ... */ case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); if (budget--) { try_connect(lws_get_context(wsi)); break; } interrupted = 1; bad = 3; /* connection failed before we could make connection */ lws_cancel_service(lws_get_context(wsi)); #if defined(LWS_WITH_CONMON) if (conmon) dump_conmon_data(wsi); #endif break; case LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: { char buf[128]; lws_get_peer_simple(wsi, buf, sizeof(buf)); status = (int)lws_http_client_http_response(wsi); lwsl_user("Connected to %s, http response: %d\n", buf, status); } #if defined(LWS_WITH_HTTP2) if (long_poll) { lwsl_user("%s: Client entering long poll mode\n", __func__); lws_h2_client_stream_long_poll_rxonly(wsi); } #endif if (lws_fi_user_wsi_fi(wsi, "user_reject_at_est")) return -1; break; case LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER: { unsigned char **p = (unsigned char **)in, *end = (*p) + len; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_USER_AGENT, (unsigned char *)ua, (int)strlen(ua), p, end)) return -1; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_ACCEPT, (unsigned char *)acc, (int)strlen(acc), p, end)) return -1; #if defined(LWS_WITH_HTTP_BASIC_AUTH) { char b[128]; /* you only need this if you need to do Basic Auth */ if (!ba_user || !ba_password) break; if (lws_http_basic_auth_gen(ba_user, ba_password, b, sizeof(b))) break; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_AUTHORIZATION, (unsigned char *)b, (int)strlen(b), p, end)) return -1; } #endif break; } /* chunks of chunked content, with header removed */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ: lwsl_user("RECEIVE_CLIENT_HTTP_READ: read %d\n", (int)len); #if defined(LWS_WITH_HTTP2) if (long_poll) { char dotstar[128]; lws_strnncpy(dotstar, (const char *)in, len, sizeof(dotstar)); lwsl_notice("long poll rx: %d '%s'\n", (int)len, dotstar); } #endif #if 0 lwsl_hexdump_notice(in, len); #endif return 0; /* don't passthru */ /* uninterpreted http content */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP: { char buffer[1024 + LWS_PRE]; char *px = buffer + LWS_PRE; int lenx = sizeof(buffer) - LWS_PRE; if (lws_fi_user_wsi_fi(wsi, "user_reject_at_rx")) return -1; if (lws_http_client_read(wsi, &px, &lenx) < 0) return -1; } return 0; /* don't passthru */ case LWS_CALLBACK_COMPLETED_CLIENT_HTTP: lwsl_user("LWS_CALLBACK_COMPLETED_CLIENT_HTTP\n"); interrupted = 1; bad = 0; // we accept 403 or whatever for this test status != 200; lws_cancel_service(lws_get_context(wsi)); /* abort poll wait */ break; case LWS_CALLBACK_CLOSED_CLIENT_HTTP: lwsl_notice("%s: LWS_CALLBACK_CLOSED_CLIENT_HTTP\n", __func__); interrupted = 1; bad = 0; // status != 200; lws_cancel_service(lws_get_context(wsi)); /* abort poll wait */ #if defined(LWS_WITH_CONMON) if (conmon) dump_conmon_data(wsi); #endif break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static const struct lws_protocols protocols[] = { { "http", callback_http, 0, 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; static void sigint_handler(int sig) { interrupted = 1; } static int system_notify_cb(lws_state_manager_t *mgr, lws_state_notify_link_t *link, int current, int target) { struct lws_context *cx = mgr->parent; if (current != LWS_SYSTATE_OPERATIONAL || target != LWS_SYSTATE_OPERATIONAL) return 0; lwsl_info("%s: operational\n", __func__); try_connect(cx); return 0; } static int jit_trust_query(struct lws_context *cx, const uint8_t *skid, size_t skid_len, void *got_opaque) { const uint8_t *der = NULL; size_t der_len = 0; lwsl_info("%s\n", __func__); lwsl_hexdump_info(skid, skid_len); /* * For this example, we look up SKIDs using a trust table that's * compiled in, synchronously. Lws provides the necessary helper. * * DER will remain NULL if no match. */ lws_tls_jit_trust_blob_queury_skid(jit_trust_blob, sizeof(jit_trust_blob), skid, skid_len, &der, &der_len); if (der) lwsl_info("%s: found len %d\n", __func__, (int)der_len); else lwsl_info("%s: not trusted\n", __func__); /* Once we have a result, pass it to the completion helper */ return lws_tls_jit_trust_got_cert_cb(cx, got_opaque, skid, skid_len, der, der_len); } static lws_system_ops_t system_ops = { .jit_trust_query = jit_trust_query }; int main(int argc, const char **argv) { lws_state_notify_link_t notifier = { { NULL, NULL, NULL }, system_notify_cb, "app" }; lws_state_notify_link_t *na[] = { ¬ifier, NULL }; struct lws_context_creation_info info; struct lws_context *context; int n = 0, expected = 0; struct args args; const char *p; args.argc = argc; args.argv = argv; signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ lws_cmdline_option_handle_builtin(argc, argv, &info); lwsl_user("LWS minimal http client JIT Trust [-d] [-l] [--h1]\n"); info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | /* we start off not trusting anything */ LWS_SERVER_OPTION_DISABLE_OS_CA_CERTS | LWS_SERVER_OPTION_H2_JUST_FIX_WINDOW_UPDATE_OVERFLOW; info.port = CONTEXT_PORT_NO_LISTEN; /* we do not run any server */ info.protocols = protocols; info.user = &args; info.register_notifier_list = na; info.connect_timeout_secs = 30; info.system_ops = &system_ops; info.fd_limit_per_thread = 1 + 6 + 1; info.max_http_header_data = 8192; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); bad = 5; goto bail; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lwsl_err("%s: destroying context, interrupted = %d\n", __func__, interrupted); lws_context_destroy(context); bail: if ((p = lws_cmdline_option(argc, argv, "--expected-exit"))) expected = atoi(p); if (bad == expected) { lwsl_user("Completed: OK (seen expected %d)\n", expected); return 0; } lwsl_err("Completed: failed: exit %d, expected %d\n", bad, expected); return 1; } libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-jit-trust/trust_blob.h000066400000000000000000032124401476025525100322470ustar00rootroot000000000000000x54, 0x42, 0x4c, 0x42, 0x00, 0x01, 0x00, 0x80, 0x60, 0xc6, 0xf3, 0x12, 0x00, 0x02, 0x22, 0xd8, 0x00, 0x02, 0x23, 0xd8, 0x00, 0x02, 0x24, 0x58, 0x00, 0x02, 0x2e, 0x30, 0x30, 0x82, 0x05, 0x82, 0x30, 0x82, 0x03, 0x6a, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0b, 0x5a, 0x4b, 0xbd, 0x5a, 0xfb, 0x4f, 0x8a, 0x5b, 0xfa, 0x65, 0xe5, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x4d, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x41, 0x54, 0x31, 0x23, 0x30, 0x21, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x1a, 0x65, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x72, 0x63, 0x65, 0x20, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x47, 0x6d, 0x62, 0x48, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x10, 0x47, 0x4c, 0x4f, 0x42, 0x41, 0x4c, 0x54, 0x52, 0x55, 0x53, 0x54, 0x20, 0x32, 0x30, 0x32, 0x30, 0x30, 0x1e, 0x17, 0x0d, 0x32, 0x30, 0x30, 0x32, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x34, 0x30, 0x30, 0x36, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x4d, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x41, 0x54, 0x31, 0x23, 0x30, 0x21, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x1a, 0x65, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x72, 0x63, 0x65, 0x20, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x47, 0x6d, 0x62, 0x48, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x10, 0x47, 0x4c, 0x4f, 0x42, 0x41, 0x4c, 0x54, 0x52, 0x55, 0x53, 0x54, 0x20, 0x32, 0x30, 0x32, 0x30, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xae, 0x2e, 0x56, 0xad, 0x1b, 0x1c, 0xef, 0xf6, 0x95, 0x8f, 0xa0, 0x77, 0x1b, 0x2b, 0xd3, 0x63, 0x8f, 0x84, 0x4d, 0x45, 0xa2, 0x0f, 0x9f, 0x5b, 0x45, 0xab, 0x59, 0x7b, 0x51, 0x34, 0xf9, 0xec, 0x8b, 0x8a, 0x78, 0xc5, 0xdd, 0x6b, 0xaf, 0xbd, 0xc4, 0xdf, 0x93, 0x45, 0x1e, 0xbf, 0x91, 0x38, 0x0b, 0xae, 0x0e, 0x16, 0xe7, 0x41, 0x73, 0xf8, 0xdb, 0xbb, 0xd1, 0xb8, 0x51, 0xe0, 0xcb, 0x83, 0x3b, 0x73, 0x38, 0x6e, 0x77, 0x8a, 0x0f, 0x59, 0x63, 0x26, 0xcd, 0xa7, 0x2a, 0xce, 0x54, 0xfb, 0xb8, 0xe2, 0xc0, 0x7c, 0x47, 0xce, 0x60, 0x7c, 0x3f, 0xb2, 0x73, 0xf2, 0xc0, 0x19, 0xb6, 0x8a, 0x92, 0x87, 0x35, 0x0d, 0x90, 0x28, 0xa2, 0xe4, 0x15, 0x04, 0x63, 0x3e, 0xba, 0xaf, 0xee, 0x7c, 0x5e, 0xcc, 0xa6, 0x8b, 0x50, 0xb2, 0x38, 0xf7, 0x41, 0x63, 0xca, 0xce, 0xff, 0x69, 0x8f, 0x68, 0x0e, 0x95, 0x36, 0xe5, 0xcc, 0xb9, 0x8c, 0x09, 0xca, 0x4b, 0xdd, 0x31, 0x90, 0x96, 0xc8, 0xcc, 0x1f, 0xfd, 0x56, 0x96, 0x34, 0xdb, 0x8e, 0x1c, 0xea, 0x2c, 0xbe, 0x85, 0x2e, 0x63, 0xdd, 0xaa, 0xa9, 0x95, 0xd3, 0xfd, 0x29, 0x95, 0x13, 0xf0, 0xc8, 0x98, 0x93, 0xd9, 0x2d, 0x16, 0x47, 0x90, 0x11, 0x83, 0xa2, 0x3a, 0x22, 0xa2, 0x28, 0x57, 0xa2, 0xeb, 0xfe, 0xc0, 0x8c, 0x28, 0xa0, 0xa6, 0x7d, 0xe7, 0x2a, 0x42, 0x3b, 0x82, 0x80, 0x63, 0xa5, 0x63, 0x1f, 0x19, 0xcc, 0x7c, 0xb2, 0x66, 0xa8, 0xc2, 0xd3, 0x6d, 0x37, 0x6f, 0xe2, 0x7e, 0x06, 0x51, 0xd9, 0x45, 0x84, 0x1f, 0x12, 0xce, 0x24, 0x52, 0x64, 0x85, 0x0b, 0x48, 0x80, 0x4e, 0x87, 0xb1, 0x22, 0x22, 0x30, 0xaa, 0xeb, 0xae, 0xbe, 0xe0, 0x02, 0xe0, 0x40, 0xe8, 0xb0, 0x42, 0x80, 0x03, 0x51, 0xaa, 0xb4, 0x7e, 0xaa, 0x44, 0xd7, 0x43, 0x61, 0xf3, 0xa2, 0x6b, 0x16, 0x89, 0x49, 0xa4, 0xa3, 0xa4, 0x2b, 0x8a, 0x02, 0xc4, 0x78, 0xf4, 0x68, 0x8a, 0xc1, 0xe4, 0x7a, 0x36, 0xb1, 0x6f, 0x1b, 0x96, 0x1b, 0x77, 0x49, 0x8d, 0xd4, 0xc9, 0x06, 0x72, 0x8f, 0xcf, 0x53, 0xe3, 0xdc, 0x17, 0x85, 0x20, 0x4a, 0xdc, 0x98, 0x27, 0xd3, 0x91, 0x26, 0x2b, 0x47, 0x1e, 0x69, 0x07, 0xaf, 0xde, 0xa2, 0xe4, 0xe4, 0xd4, 0x6b, 0x0b, 0xb3, 0x5e, 0x7c, 0xd4, 0x24, 0x80, 0x47, 0x29, 0x69, 0x3b, 0x6e, 0xe8, 0xac, 0xfd, 0x40, 0xeb, 0xd8, 0xed, 0x71, 0x71, 0x2b, 0xf2, 0xe8, 0x58, 0x1d, 0xeb, 0x41, 0x97, 0x22, 0xc5, 0x1f, 0xd4, 0x39, 0xd0, 0x27, 0x8f, 0x87, 0xe3, 0x18, 0xf4, 0xe0, 0xa9, 0x46, 0x0d, 0xf5, 0x74, 0x3a, 0x82, 0x2e, 0xd0, 0x6e, 0x2c, 0x91, 0xa3, 0x31, 0x5c, 0x3b, 0x46, 0xea, 0x7b, 0x04, 0x10, 0x56, 0x5e, 0x80, 0x1d, 0xf5, 0xa5, 0x65, 0xe8, 0x82, 0xfc, 0xe2, 0x07, 0x8c, 0x62, 0x45, 0xf5, 0x20, 0xde, 0x46, 0x70, 0x86, 0xa1, 0xbc, 0x93, 0xd3, 0x1e, 0x74, 0xa6, 0x6c, 0xb0, 0x2c, 0xf7, 0x03, 0x0c, 0x88, 0x0c, 0xcb, 0xd4, 0x72, 0x53, 0x86, 0xbc, 0x60, 0x46, 0xf3, 0x98, 0x6a, 0xc2, 0xf1, 0xbf, 0x43, 0xf9, 0x70, 0x20, 0x77, 0xca, 0x37, 0x41, 0x79, 0x55, 0x52, 0x63, 0x8d, 0x5b, 0x12, 0x9f, 0xc5, 0x68, 0xc4, 0x88, 0x9d, 0xac, 0xf2, 0x30, 0xab, 0xb7, 0xa3, 0x31, 0x97, 0x67, 0xad, 0x8f, 0x17, 0x0f, 0x6c, 0xc7, 0x73, 0xed, 0x24, 0x94, 0x6b, 0xc8, 0x83, 0x9a, 0xd0, 0x9a, 0x37, 0x49, 0x04, 0xab, 0xb1, 0x16, 0xc8, 0x6c, 0x49, 0x49, 0x2d, 0xab, 0xa1, 0xd0, 0x8c, 0x92, 0xf2, 0x41, 0x4a, 0x79, 0x21, 0x25, 0xdb, 0x63, 0xd7, 0xb6, 0x9c, 0xa7, 0x7e, 0x42, 0x69, 0xfb, 0x3a, 0x63, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x63, 0x30, 0x61, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xdc, 0x2e, 0x1f, 0xd1, 0x61, 0x37, 0x79, 0xe4, 0xab, 0xd5, 0xd5, 0xb3, 0x12, 0x71, 0x68, 0x3d, 0x6a, 0x68, 0x9c, 0x22, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xdc, 0x2e, 0x1f, 0xd1, 0x61, 0x37, 0x79, 0xe4, 0xab, 0xd5, 0xd5, 0xb3, 0x12, 0x71, 0x68, 0x3d, 0x6a, 0x68, 0x9c, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x91, 0xf0, 0x42, 0x02, 0x68, 0x40, 0xee, 0xc3, 0x68, 0xc0, 0x54, 0x2f, 0xdf, 0xec, 0x62, 0xc3, 0xc3, 0x9e, 0x8a, 0xa0, 0x31, 0x28, 0xaa, 0x83, 0x8e, 0xa4, 0x56, 0x96, 0x12, 0x10, 0x86, 0x56, 0xba, 0x97, 0x72, 0xd2, 0x54, 0x30, 0x7c, 0xad, 0x19, 0xd5, 0x1d, 0x68, 0x6f, 0xfb, 0x14, 0x42, 0xd8, 0x8d, 0x0e, 0xf3, 0xb5, 0xd1, 0xa5, 0xe3, 0x02, 0x42, 0x5e, 0xdc, 0xe8, 0x46, 0x58, 0x07, 0x35, 0x02, 0x30, 0xe0, 0xbc, 0x74, 0x4a, 0xc1, 0x43, 0x2a, 0xff, 0xdb, 0x1a, 0xd0, 0xb0, 0xaf, 0x6c, 0xc3, 0xfd, 0xcb, 0xb3, 0xf5, 0x7f, 0x6d, 0x03, 0x2e, 0x59, 0x56, 0x9d, 0x2d, 0x2d, 0x35, 0x8c, 0xb2, 0xd6, 0x43, 0x17, 0x2c, 0x92, 0x0a, 0xcb, 0x5d, 0xe8, 0x8c, 0x0f, 0x4b, 0x70, 0x43, 0xd0, 0x82, 0xff, 0xa8, 0xcc, 0xbf, 0xa4, 0x94, 0xc0, 0xbe, 0x87, 0xbd, 0x8a, 0xe3, 0x93, 0x7b, 0xc6, 0x8f, 0x9b, 0x16, 0x9d, 0x27, 0x65, 0xbc, 0x7a, 0xc5, 0x42, 0x82, 0x6c, 0x5c, 0x07, 0xd0, 0xa9, 0xc1, 0x88, 0x60, 0x44, 0xe9, 0x98, 0x85, 0x16, 0x5f, 0xf8, 0x8f, 0xca, 0x01, 0x10, 0xce, 0x25, 0xc3, 0xf9, 0x60, 0x1b, 0xa0, 0xc5, 0x97, 0xc3, 0xd3, 0x2c, 0x88, 0x31, 0xa2, 0xbd, 0x30, 0xec, 0xd0, 0xd0, 0xc0, 0x12, 0xf1, 0xc1, 0x39, 0xe3, 0xe5, 0xf5, 0xf8, 0xd6, 0x4a, 0xdd, 0x34, 0xcd, 0xfb, 0x6f, 0xc1, 0x4f, 0xe3, 0x00, 0x8b, 0x56, 0xe2, 0x92, 0xf7, 0x28, 0xb2, 0x42, 0x77, 0x72, 0x23, 0x67, 0xc7, 0x3f, 0x11, 0x15, 0xb2, 0xc4, 0x03, 0x05, 0xbe, 0xbb, 0x11, 0x7b, 0x0a, 0xbf, 0xa8, 0x6e, 0xe7, 0xff, 0x58, 0x43, 0xcf, 0x9b, 0x67, 0xa0, 0x80, 0x07, 0xb6, 0x1d, 0xca, 0xad, 0x6d, 0xea, 0x41, 0x11, 0x7e, 0x2d, 0x74, 0x93, 0xfb, 0xc2, 0xbc, 0xbe, 0x51, 0x44, 0xc5, 0xef, 0x68, 0x25, 0x27, 0x80, 0xe3, 0xc8, 0xa0, 0xd4, 0x12, 0xec, 0xd9, 0xa5, 0x37, 0x1d, 0x37, 0x7c, 0xb4, 0x91, 0xca, 0xda, 0xd4, 0xb1, 0x96, 0x81, 0xef, 0x68, 0x5c, 0x76, 0x10, 0x49, 0xaf, 0x7e, 0xa5, 0x37, 0x80, 0xb1, 0x1c, 0x52, 0xbd, 0x33, 0x81, 0x4c, 0x8f, 0xf9, 0xdd, 0x65, 0xd9, 0x14, 0xcd, 0x8a, 0x25, 0x58, 0xf4, 0xe2, 0xc5, 0x83, 0xa5, 0x09, 0x90, 0xd4, 0x6c, 0x14, 0x63, 0xb5, 0x40, 0xdf, 0xeb, 0xc0, 0xfc, 0xc4, 0x58, 0x7e, 0x0d, 0x14, 0x16, 0x87, 0x54, 0x27, 0x6e, 0x56, 0xe4, 0x70, 0x84, 0xb8, 0x6c, 0x32, 0x12, 0x7e, 0x82, 0x31, 0x43, 0xbe, 0xd7, 0xdd, 0x7c, 0xa1, 0xad, 0xae, 0xd6, 0xab, 0x20, 0x12, 0xef, 0x0a, 0xc3, 0x10, 0x8c, 0x49, 0x96, 0x35, 0xdc, 0x0b, 0x75, 0x5e, 0xb1, 0x4f, 0xd5, 0x4f, 0x34, 0x0e, 0x11, 0x20, 0x07, 0x75, 0x43, 0x45, 0xe9, 0xa3, 0x11, 0xda, 0xac, 0xa3, 0x99, 0xc2, 0xb6, 0x79, 0x27, 0xe2, 0xb9, 0xef, 0xc8, 0xe2, 0xf6, 0x35, 0x29, 0x7a, 0x74, 0xfa, 0xc5, 0x7f, 0x82, 0x05, 0x62, 0xa6, 0x0a, 0xea, 0x68, 0xb2, 0x79, 0x47, 0x06, 0x6e, 0xf2, 0x57, 0xa8, 0x15, 0x33, 0xc6, 0xf7, 0x78, 0x4a, 0x3d, 0x42, 0x7b, 0x6b, 0x7e, 0xfe, 0xf7, 0x46, 0xea, 0xd1, 0xeb, 0x8e, 0xef, 0x88, 0x68, 0x5b, 0xe8, 0xc1, 0xd9, 0x71, 0x7e, 0xfd, 0x64, 0xef, 0xff, 0x67, 0x47, 0x88, 0x58, 0x25, 0x2f, 0x3e, 0x86, 0x07, 0xbd, 0xfb, 0xa8, 0xe5, 0x82, 0xa8, 0xac, 0xa5, 0xd3, 0x69, 0x43, 0xcd, 0x31, 0x88, 0x49, 0x84, 0x53, 0x92, 0xc0, 0xb1, 0x39, 0x1b, 0x39, 0x83, 0x01, 0x30, 0xc4, 0xf2, 0xa9, 0xfa, 0xd0, 0x03, 0xbd, 0x72, 0x37, 0x60, 0x56, 0x1f, 0x36, 0x7c, 0xbd, 0x39, 0x91, 0xf5, 0x6d, 0x0d, 0xbf, 0x7b, 0xd7, 0x92, 0x30, 0x82, 0x02, 0x59, 0x30, 0x82, 0x01, 0xdf, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x66, 0xf2, 0x3d, 0xaf, 0x87, 0xde, 0x8b, 0xb1, 0x4a, 0xea, 0x0c, 0x57, 0x31, 0x01, 0xc2, 0xec, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x30, 0x65, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x15, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x36, 0x30, 0x34, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x2d, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x45, 0x43, 0x43, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x32, 0x30, 0x31, 0x37, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x39, 0x31, 0x32, 0x31, 0x38, 0x32, 0x33, 0x30, 0x36, 0x34, 0x35, 0x5a, 0x17, 0x0d, 0x34, 0x32, 0x30, 0x37, 0x31, 0x38, 0x32, 0x33, 0x31, 0x36, 0x30, 0x34, 0x5a, 0x30, 0x65, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x15, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x36, 0x30, 0x34, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x2d, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x45, 0x43, 0x43, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x32, 0x30, 0x31, 0x37, 0x30, 0x76, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x22, 0x03, 0x62, 0x00, 0x04, 0xd4, 0xbc, 0x3d, 0x02, 0x42, 0x75, 0x41, 0x13, 0x23, 0xcd, 0x80, 0x04, 0x86, 0x02, 0x51, 0x2f, 0x6a, 0xa8, 0x81, 0x62, 0x0b, 0x65, 0xcc, 0xf6, 0xca, 0x9d, 0x1e, 0x6f, 0x4a, 0x66, 0x51, 0xa2, 0x03, 0xd9, 0x9d, 0x91, 0xfa, 0xb6, 0x16, 0xb1, 0x8c, 0x6e, 0xde, 0x7c, 0xcd, 0xdb, 0x79, 0xa6, 0x2f, 0xce, 0xbb, 0xce, 0x71, 0x2f, 0xe5, 0xa5, 0xab, 0x28, 0xec, 0x63, 0x04, 0x66, 0x99, 0xf8, 0xfa, 0xf2, 0x93, 0x10, 0x05, 0xe1, 0x81, 0x28, 0x42, 0xe3, 0xc6, 0x68, 0xf4, 0xe6, 0x1b, 0x84, 0x60, 0x4a, 0x89, 0xaf, 0xed, 0x79, 0x0f, 0x3b, 0xce, 0xf1, 0xf6, 0x44, 0xf5, 0x01, 0x78, 0xc0, 0xa3, 0x54, 0x30, 0x52, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xc8, 0xcb, 0x99, 0x72, 0x70, 0x52, 0x0c, 0xf8, 0xe6, 0xbe, 0xb2, 0x04, 0x57, 0x29, 0x2a, 0xcf, 0x42, 0x10, 0xed, 0x35, 0x30, 0x10, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x01, 0x04, 0x03, 0x02, 0x01, 0x00, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x03, 0x68, 0x00, 0x30, 0x65, 0x02, 0x30, 0x58, 0xf2, 0x4d, 0xea, 0x0c, 0xf9, 0x5f, 0x5e, 0xee, 0x60, 0x29, 0xcb, 0x3a, 0xf2, 0xdb, 0xd6, 0x32, 0x84, 0x19, 0x3f, 0x7c, 0xd5, 0x2f, 0xc2, 0xb1, 0xcc, 0x93, 0xae, 0x50, 0xbb, 0x09, 0x32, 0xc6, 0xc6, 0xed, 0x7e, 0xc9, 0x36, 0x94, 0x12, 0xe4, 0x68, 0x85, 0x06, 0xa2, 0x1b, 0xd0, 0x2f, 0x02, 0x31, 0x00, 0x99, 0xe9, 0x16, 0xb4, 0x0e, 0xfa, 0x56, 0x48, 0xd4, 0xa4, 0x30, 0x16, 0x91, 0x78, 0xdb, 0x54, 0x8c, 0x65, 0x01, 0x8a, 0xe7, 0x50, 0x66, 0xc2, 0x31, 0xb7, 0x39, 0xba, 0xb8, 0x1a, 0x22, 0x07, 0x4e, 0xfc, 0x6b, 0x54, 0x16, 0x20, 0xff, 0x2b, 0xb5, 0xe7, 0x4c, 0x0c, 0x4d, 0xa6, 0x4f, 0x73, 0x30, 0x82, 0x05, 0xa8, 0x30, 0x82, 0x03, 0x90, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x1e, 0xd3, 0x97, 0x09, 0x5f, 0xd8, 0xb4, 0xb3, 0x47, 0x70, 0x1e, 0xaa, 0xbe, 0x7f, 0x45, 0xb3, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0c, 0x05, 0x00, 0x30, 0x65, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x15, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x36, 0x30, 0x34, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x2d, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x52, 0x53, 0x41, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x32, 0x30, 0x31, 0x37, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x39, 0x31, 0x32, 0x31, 0x38, 0x32, 0x32, 0x35, 0x31, 0x32, 0x32, 0x5a, 0x17, 0x0d, 0x34, 0x32, 0x30, 0x37, 0x31, 0x38, 0x32, 0x33, 0x30, 0x30, 0x32, 0x33, 0x5a, 0x30, 0x65, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x15, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x36, 0x30, 0x34, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x2d, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x52, 0x53, 0x41, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x32, 0x30, 0x31, 0x37, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xca, 0x5b, 0xbe, 0x94, 0x33, 0x8c, 0x29, 0x95, 0x91, 0x16, 0x0a, 0x95, 0xbd, 0x47, 0x62, 0xc1, 0x89, 0xf3, 0x99, 0x36, 0xdf, 0x46, 0x90, 0xc9, 0xa5, 0xed, 0x78, 0x6a, 0x6f, 0x47, 0x91, 0x68, 0xf8, 0x27, 0x67, 0x50, 0x33, 0x1d, 0xa1, 0xa6, 0xfb, 0xe0, 0xe5, 0x43, 0xa3, 0x84, 0x02, 0x57, 0x01, 0x5d, 0x9c, 0x48, 0x40, 0x82, 0x53, 0x10, 0xbc, 0xbf, 0xc7, 0x3b, 0x68, 0x90, 0xb6, 0x82, 0x2d, 0xe5, 0xf4, 0x65, 0xd0, 0xcc, 0x6d, 0x19, 0xcc, 0x95, 0xf9, 0x7b, 0xac, 0x4a, 0x94, 0xad, 0x0e, 0xde, 0x4b, 0x43, 0x1d, 0x87, 0x07, 0x92, 0x13, 0x90, 0x80, 0x83, 0x64, 0x35, 0x39, 0x04, 0xfc, 0xe5, 0xe9, 0x6c, 0xb3, 0xb6, 0x1f, 0x50, 0x94, 0x38, 0x65, 0x50, 0x5c, 0x17, 0x46, 0xb9, 0xb6, 0x85, 0xb5, 0x1c, 0xb5, 0x17, 0xe8, 0xd6, 0x45, 0x9d, 0xd8, 0xb2, 0x26, 0xb0, 0xca, 0xc4, 0x70, 0x4a, 0xae, 0x60, 0xa4, 0xdd, 0xb3, 0xd9, 0xec, 0xfc, 0x3b, 0xd5, 0x57, 0x72, 0xbc, 0x3f, 0xc8, 0xc9, 0xb2, 0xde, 0x4b, 0x6b, 0xf8, 0x23, 0x6c, 0x03, 0xc0, 0x05, 0xbd, 0x95, 0xc7, 0xcd, 0x73, 0x3b, 0x66, 0x80, 0x64, 0xe3, 0x1a, 0xac, 0x2e, 0xf9, 0x47, 0x05, 0xf2, 0x06, 0xb6, 0x9b, 0x73, 0xf5, 0x78, 0x33, 0x5b, 0xc7, 0xa1, 0xfb, 0x27, 0x2a, 0xa1, 0xb4, 0x9a, 0x91, 0x8c, 0x91, 0xd3, 0x3a, 0x82, 0x3e, 0x76, 0x40, 0xb4, 0xcd, 0x52, 0x61, 0x51, 0x70, 0x28, 0x3f, 0xc5, 0xc5, 0x5a, 0xf2, 0xc9, 0x8c, 0x49, 0xbb, 0x14, 0x5b, 0x4d, 0xc8, 0xff, 0x67, 0x4d, 0x4c, 0x12, 0x96, 0xad, 0xf5, 0xfe, 0x78, 0xa8, 0x97, 0x87, 0xd7, 0xfd, 0x5e, 0x20, 0x80, 0xdc, 0xa1, 0x4b, 0x22, 0xfb, 0xd4, 0x89, 0xad, 0xba, 0xce, 0x47, 0x97, 0x47, 0x55, 0x7b, 0x8f, 0x45, 0xc8, 0x67, 0x28, 0x84, 0x95, 0x1c, 0x68, 0x30, 0xef, 0xef, 0x49, 0xe0, 0x35, 0x7b, 0x64, 0xe7, 0x98, 0xb0, 0x94, 0xda, 0x4d, 0x85, 0x3b, 0x3e, 0x55, 0xc4, 0x28, 0xaf, 0x57, 0xf3, 0x9e, 0x13, 0xdb, 0x46, 0x27, 0x9f, 0x1e, 0xa2, 0x5e, 0x44, 0x83, 0xa4, 0xa5, 0xca, 0xd5, 0x13, 0xb3, 0x4b, 0x3f, 0xc4, 0xe3, 0xc2, 0xe6, 0x86, 0x61, 0xa4, 0x52, 0x30, 0xb9, 0x7a, 0x20, 0x4f, 0x6f, 0x0f, 0x38, 0x53, 0xcb, 0x33, 0x0c, 0x13, 0x2b, 0x8f, 0xd6, 0x9a, 0xbd, 0x2a, 0xc8, 0x2d, 0xb1, 0x1c, 0x7d, 0x4b, 0x51, 0xca, 0x47, 0xd1, 0x48, 0x27, 0x72, 0x5d, 0x87, 0xeb, 0xd5, 0x45, 0xe6, 0x48, 0x65, 0x9d, 0xaf, 0x52, 0x90, 0xba, 0x5b, 0xa2, 0x18, 0x65, 0x57, 0x12, 0x9f, 0x68, 0xb9, 0xd4, 0x15, 0x6b, 0x94, 0xc4, 0x69, 0x22, 0x98, 0xf4, 0x33, 0xe0, 0xed, 0xf9, 0x51, 0x8e, 0x41, 0x50, 0xc9, 0x34, 0x4f, 0x76, 0x90, 0xac, 0xfc, 0x38, 0xc1, 0xd8, 0xe1, 0x7b, 0xb9, 0xe3, 0xe3, 0x94, 0xe1, 0x46, 0x69, 0xcb, 0x0e, 0x0a, 0x50, 0x6b, 0x13, 0xba, 0xac, 0x0f, 0x37, 0x5a, 0xb7, 0x12, 0xb5, 0x90, 0x81, 0x1e, 0x56, 0xae, 0x57, 0x22, 0x86, 0xd9, 0xc9, 0xd2, 0xd1, 0xd7, 0x51, 0xe3, 0xab, 0x3b, 0xc6, 0x55, 0xfd, 0x1e, 0x0e, 0xd3, 0x74, 0x0a, 0xd1, 0xda, 0xaa, 0xea, 0x69, 0xb8, 0x97, 0x28, 0x8f, 0x48, 0xc4, 0x07, 0xf8, 0x52, 0x43, 0x3a, 0xf4, 0xca, 0x55, 0x35, 0x2c, 0xb0, 0xa6, 0x6a, 0xc0, 0x9c, 0xf9, 0xf2, 0x81, 0xe1, 0x12, 0x6a, 0xc0, 0x45, 0xd9, 0x67, 0xb3, 0xce, 0xff, 0x23, 0xa2, 0x89, 0x0a, 0x54, 0xd4, 0x14, 0xb9, 0x2a, 0xa8, 0xd7, 0xec, 0xf9, 0xab, 0xcd, 0x25, 0x58, 0x32, 0x79, 0x8f, 0x90, 0x5b, 0x98, 0x39, 0xc4, 0x08, 0x06, 0xc1, 0xac, 0x7f, 0x0e, 0x3d, 0x00, 0xa5, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x54, 0x30, 0x52, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x09, 0xcb, 0x59, 0x7f, 0x86, 0xb2, 0x70, 0x8f, 0x1a, 0xc3, 0x39, 0xe3, 0xc0, 0xd9, 0xe9, 0xbf, 0xbb, 0x4d, 0xb2, 0x23, 0x30, 0x10, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x01, 0x04, 0x03, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0c, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0xac, 0xaf, 0x3e, 0x5d, 0xc2, 0x11, 0x96, 0x89, 0x8e, 0xa3, 0xe7, 0x92, 0xd6, 0x97, 0x15, 0xb8, 0x13, 0xa2, 0xa6, 0x42, 0x2e, 0x02, 0xcd, 0x16, 0x05, 0x59, 0x27, 0xca, 0x20, 0xe8, 0xba, 0xb8, 0xe8, 0x1a, 0xec, 0x4d, 0xa8, 0x97, 0x56, 0xae, 0x65, 0x43, 0xb1, 0x8f, 0x00, 0x9b, 0x52, 0xcd, 0x55, 0xcd, 0x53, 0x39, 0x6d, 0x62, 0x4c, 0x8b, 0x0d, 0x5b, 0x7c, 0x2e, 0x44, 0xbf, 0x83, 0x10, 0x8f, 0xf3, 0x53, 0x82, 0x80, 0xc3, 0x4f, 0x3a, 0xc7, 0x6e, 0x11, 0x3f, 0xe6, 0xe3, 0x16, 0x91, 0x84, 0xfb, 0x6d, 0x84, 0x7f, 0x34, 0x74, 0xad, 0x89, 0xa7, 0xce, 0xb9, 0xd7, 0xd7, 0x9f, 0x84, 0x64, 0x92, 0xbe, 0x95, 0xa1, 0xad, 0x09, 0x53, 0x33, 0xdd, 0xee, 0x0a, 0xea, 0x4a, 0x51, 0x8e, 0x6f, 0x55, 0xab, 0xba, 0xb5, 0x94, 0x46, 0xae, 0x8c, 0x7f, 0xd8, 0xa2, 0x50, 0x25, 0x65, 0x60, 0x80, 0x46, 0xdb, 0x33, 0x04, 0xae, 0x6c, 0xb5, 0x98, 0x74, 0x54, 0x25, 0xdc, 0x93, 0xe4, 0xf8, 0xe3, 0x55, 0x15, 0x3d, 0xb8, 0x6d, 0xc3, 0x0a, 0xa4, 0x12, 0xc1, 0x69, 0x85, 0x6e, 0xdf, 0x64, 0xf1, 0x53, 0x99, 0xe1, 0x4a, 0x75, 0x20, 0x9d, 0x95, 0x0f, 0xe4, 0xd6, 0xdc, 0x03, 0xf1, 0x59, 0x18, 0xe8, 0x47, 0x89, 0xb2, 0x57, 0x5a, 0x94, 0xb6, 0xa9, 0xd8, 0x17, 0x2b, 0x17, 0x49, 0xe5, 0x76, 0xcb, 0xc1, 0x56, 0x99, 0x3a, 0x37, 0xb1, 0xff, 0x69, 0x2c, 0x91, 0x91, 0x93, 0xe1, 0xdf, 0x4c, 0xa3, 0x37, 0x76, 0x4d, 0xa1, 0x9f, 0xf8, 0x6d, 0x1e, 0x1d, 0xd3, 0xfa, 0xec, 0xfb, 0xf4, 0x45, 0x1d, 0x13, 0x6d, 0xcf, 0xf7, 0x59, 0xe5, 0x22, 0x27, 0x72, 0x2b, 0x86, 0xf3, 0x57, 0xbb, 0x30, 0xed, 0x24, 0x4d, 0xdc, 0x7d, 0x56, 0xbb, 0xa3, 0xb3, 0xf8, 0x34, 0x79, 0x89, 0xc1, 0xe0, 0xf2, 0x02, 0x61, 0xf7, 0xa6, 0xfc, 0x0f, 0xbb, 0x1c, 0x17, 0x0b, 0xae, 0x41, 0xd9, 0x7c, 0xbd, 0x27, 0xa3, 0xfd, 0x2e, 0x3a, 0xd1, 0x93, 0x94, 0xb1, 0x73, 0x1d, 0x24, 0x8b, 0xaf, 0x5b, 0x20, 0x89, 0xad, 0xb7, 0x67, 0x66, 0x79, 0xf5, 0x3a, 0xc6, 0xa6, 0x96, 0x33, 0xfe, 0x53, 0x92, 0xc8, 0x46, 0xb1, 0x11, 0x91, 0xc6, 0x99, 0x7f, 0x8f, 0xc9, 0xd6, 0x66, 0x31, 0x20, 0x41, 0x10, 0x87, 0x2d, 0x0c, 0xd6, 0xc1, 0xaf, 0x34, 0x98, 0xca, 0x64, 0x83, 0xfb, 0x13, 0x57, 0xd1, 0xc1, 0xf0, 0x3c, 0x7a, 0x8c, 0xa5, 0xc1, 0xfd, 0x95, 0x21, 0xa0, 0x71, 0xc1, 0x93, 0x67, 0x71, 0x12, 0xea, 0x8f, 0x88, 0x0a, 0x69, 0x19, 0x64, 0x99, 0x23, 0x56, 0xfb, 0xac, 0x2a, 0x2e, 0x70, 0xbe, 0x66, 0xc4, 0x0c, 0x84, 0xef, 0xe5, 0x8b, 0xf3, 0x93, 0x01, 0xf8, 0x6a, 0x90, 0x93, 0x67, 0x4b, 0xb2, 0x68, 0xa3, 0xb5, 0x62, 0x8f, 0xe9, 0x3f, 0x8c, 0x7a, 0x3b, 0x5e, 0x0f, 0xe7, 0x8c, 0xb8, 0xc6, 0x7c, 0xef, 0x37, 0xfd, 0x74, 0xe2, 0xc8, 0x4f, 0x33, 0x72, 0xe1, 0x94, 0x39, 0x6d, 0xbd, 0x12, 0xaf, 0xbe, 0x0c, 0x4e, 0x70, 0x7c, 0x1b, 0x6f, 0x8d, 0xb3, 0x32, 0x93, 0x73, 0x44, 0x16, 0x6d, 0xe8, 0xf4, 0xf7, 0xe0, 0x95, 0x80, 0x8f, 0x96, 0x5d, 0x38, 0xa4, 0xf4, 0xab, 0xde, 0x0a, 0x30, 0x87, 0x93, 0xd8, 0x4d, 0x00, 0x71, 0x62, 0x45, 0x27, 0x4b, 0x3a, 0x42, 0x84, 0x5b, 0x7f, 0x65, 0xb7, 0x67, 0x34, 0x52, 0x2d, 0x9c, 0x16, 0x6b, 0xaa, 0xa8, 0xd8, 0x7b, 0xa3, 0x42, 0x4c, 0x71, 0xc7, 0x0c, 0xca, 0x3e, 0x83, 0xe4, 0xa6, 0xef, 0xb7, 0x01, 0x30, 0x5e, 0x51, 0xa3, 0x79, 0xf5, 0x70, 0x69, 0xa6, 0x41, 0x44, 0x0f, 0x86, 0xb0, 0x2c, 0x91, 0xc6, 0x3d, 0xea, 0xae, 0x0f, 0x84, 0x30, 0x82, 0x05, 0xef, 0x30, 0x82, 0x03, 0xd7, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x0d, 0xd3, 0xe3, 0xbc, 0x6c, 0xf9, 0x6b, 0xb1, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0x84, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x05, 0x13, 0x09, 0x47, 0x36, 0x33, 0x32, 0x38, 0x37, 0x35, 0x31, 0x30, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x45, 0x53, 0x31, 0x27, 0x30, 0x25, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x1e, 0x41, 0x4e, 0x46, 0x20, 0x41, 0x75, 0x74, 0x6f, 0x72, 0x69, 0x64, 0x61, 0x64, 0x20, 0x64, 0x65, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x63, 0x69, 0x6f, 0x6e, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x0b, 0x41, 0x4e, 0x46, 0x20, 0x43, 0x41, 0x20, 0x52, 0x61, 0x69, 0x7a, 0x31, 0x22, 0x30, 0x20, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x19, 0x41, 0x4e, 0x46, 0x20, 0x53, 0x65, 0x63, 0x75, 0x72, 0x65, 0x20, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x39, 0x30, 0x39, 0x30, 0x34, 0x31, 0x30, 0x30, 0x30, 0x33, 0x38, 0x5a, 0x17, 0x0d, 0x33, 0x39, 0x30, 0x38, 0x33, 0x30, 0x31, 0x30, 0x30, 0x30, 0x33, 0x38, 0x5a, 0x30, 0x81, 0x84, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x05, 0x13, 0x09, 0x47, 0x36, 0x33, 0x32, 0x38, 0x37, 0x35, 0x31, 0x30, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x45, 0x53, 0x31, 0x27, 0x30, 0x25, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x1e, 0x41, 0x4e, 0x46, 0x20, 0x41, 0x75, 0x74, 0x6f, 0x72, 0x69, 0x64, 0x61, 0x64, 0x20, 0x64, 0x65, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x63, 0x69, 0x6f, 0x6e, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x0b, 0x41, 0x4e, 0x46, 0x20, 0x43, 0x41, 0x20, 0x52, 0x61, 0x69, 0x7a, 0x31, 0x22, 0x30, 0x20, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x19, 0x41, 0x4e, 0x46, 0x20, 0x53, 0x65, 0x63, 0x75, 0x72, 0x65, 0x20, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xdb, 0xeb, 0x6b, 0x2b, 0xe6, 0x64, 0x54, 0x95, 0x82, 0x90, 0xa3, 0x72, 0xa4, 0x19, 0x01, 0x9d, 0x9c, 0x0b, 0x81, 0x5f, 0x73, 0x49, 0xba, 0xa7, 0xac, 0xf3, 0x04, 0x4e, 0x7b, 0x96, 0x0b, 0xec, 0x11, 0xe0, 0x5b, 0xa6, 0x1c, 0xce, 0x1b, 0xd2, 0x0d, 0x83, 0x1c, 0x2b, 0xb8, 0x9e, 0x1d, 0x7e, 0x45, 0x32, 0x60, 0x0f, 0x07, 0xe9, 0x77, 0x58, 0x7e, 0x9f, 0x6a, 0xc8, 0x61, 0x4e, 0xb6, 0x26, 0xc1, 0x4c, 0x8d, 0xff, 0x4c, 0xef, 0x34, 0xb2, 0x1f, 0x65, 0xd8, 0xb9, 0x78, 0xf5, 0xad, 0xa9, 0x71, 0xb9, 0xef, 0x4f, 0x58, 0x1d, 0xa5, 0xde, 0x74, 0x20, 0x97, 0xa1, 0xed, 0x68, 0x4c, 0xde, 0x92, 0x17, 0x4b, 0xbc, 0xab, 0xff, 0x65, 0x9a, 0x9e, 0xfb, 0x47, 0xd9, 0x57, 0x72, 0xf3, 0x09, 0xa1, 0xae, 0x76, 0x44, 0x13, 0x6e, 0x9c, 0x2d, 0x44, 0x39, 0xbc, 0xf9, 0xc7, 0x3b, 0xa4, 0x58, 0x3d, 0x41, 0xbd, 0xb4, 0xc2, 0x49, 0xa3, 0xc8, 0x0d, 0xd2, 0x97, 0x2f, 0x07, 0x65, 0x52, 0x00, 0xa7, 0x6e, 0xc8, 0xaf, 0x68, 0xec, 0xf4, 0x14, 0x96, 0xb6, 0x57, 0x1f, 0x56, 0xc3, 0x39, 0x9f, 0x2b, 0x6d, 0xe4, 0xf3, 0x3e, 0xf6, 0x35, 0x64, 0xda, 0x0c, 0x1c, 0xa1, 0x84, 0x4b, 0x2f, 0x4b, 0x4b, 0xe2, 0x2c, 0x24, 0x9d, 0x6d, 0x93, 0x40, 0xeb, 0xb5, 0x23, 0x8e, 0x32, 0xca, 0x6f, 0x45, 0xd3, 0xa8, 0x89, 0x7b, 0x1e, 0xcf, 0x1e, 0xfa, 0x5b, 0x43, 0x8b, 0xcd, 0xcd, 0xa8, 0x0f, 0x6a, 0xca, 0x0c, 0x5e, 0xb9, 0x9e, 0x47, 0x8f, 0xf0, 0xd9, 0xb6, 0x0a, 0x0b, 0x58, 0x65, 0x17, 0x33, 0xb9, 0x23, 0xe4, 0x77, 0x19, 0x7d, 0xcb, 0x4a, 0x2e, 0x92, 0x7b, 0x4f, 0x2f, 0x10, 0x77, 0xb1, 0x8d, 0x2f, 0x68, 0x9c, 0x62, 0xcc, 0xe0, 0x50, 0xf8, 0xec, 0x91, 0xa7, 0x54, 0x4c, 0x57, 0x09, 0xd5, 0x76, 0x63, 0xc5, 0xe8, 0x65, 0x1e, 0xee, 0x6d, 0x6a, 0xcf, 0x09, 0x9d, 0xfa, 0x7c, 0x4f, 0xad, 0x60, 0x08, 0xfd, 0x56, 0x99, 0x0f, 0x15, 0x2c, 0x7b, 0xa9, 0x80, 0xab, 0x8c, 0x61, 0x8f, 0x4a, 0x07, 0x76, 0x42, 0xde, 0x3d, 0xf4, 0xdd, 0xb2, 0x24, 0x33, 0x5b, 0xb8, 0xb5, 0xa3, 0x44, 0xc9, 0xac, 0x7f, 0x77, 0x3c, 0x1d, 0x23, 0xec, 0x82, 0xa9, 0xa6, 0xe2, 0xc8, 0x06, 0x4c, 0x02, 0xfe, 0xac, 0x5c, 0x99, 0x99, 0x0b, 0x2f, 0x10, 0x8a, 0xa6, 0xf4, 0x7f, 0xd5, 0x87, 0x74, 0x0d, 0x59, 0x49, 0x45, 0xf6, 0xf0, 0x71, 0x5c, 0x39, 0x29, 0xd6, 0xbf, 0x4a, 0x23, 0x8b, 0xf5, 0x5f, 0x01, 0x63, 0xd2, 0x87, 0x73, 0x28, 0xb5, 0x4b, 0x0a, 0xf5, 0xf8, 0xab, 0x82, 0x2c, 0x7e, 0x73, 0x25, 0x32, 0x1d, 0x0b, 0x63, 0x0a, 0x17, 0x81, 0x00, 0xff, 0xb6, 0x76, 0x5e, 0xe7, 0xb4, 0xb1, 0x40, 0xca, 0x21, 0xbb, 0xd5, 0x80, 0x51, 0xe5, 0x48, 0x52, 0x67, 0x2c, 0xd2, 0x61, 0x89, 0x07, 0x0d, 0x0f, 0xce, 0x42, 0x77, 0xc0, 0x44, 0x73, 0x9c, 0x44, 0x50, 0xa0, 0xdb, 0x10, 0x0a, 0x2d, 0x95, 0x1c, 0x81, 0xaf, 0xe4, 0x1c, 0xe5, 0x14, 0x1e, 0xf1, 0x36, 0x41, 0x01, 0x02, 0x2f, 0x7d, 0x73, 0xa7, 0xde, 0x42, 0xcc, 0x4c, 0xe9, 0x89, 0x0d, 0x56, 0xf7, 0x9f, 0x91, 0xd4, 0x03, 0xc6, 0x6c, 0xc9, 0x8f, 0xdb, 0xd8, 0x1c, 0xe0, 0x40, 0x98, 0x5d, 0x66, 0x99, 0x98, 0x80, 0x6e, 0x2d, 0xff, 0x01, 0xc5, 0xce, 0xcb, 0x46, 0x1f, 0xac, 0x02, 0xc6, 0x43, 0xe6, 0xae, 0xa2, 0x84, 0x3c, 0xc5, 0x4e, 0x1e, 0x3d, 0x6d, 0xc9, 0x14, 0x4c, 0xe3, 0x2e, 0x41, 0xbb, 0xca, 0x39, 0xbf, 0x36, 0x3c, 0x2a, 0x19, 0xaa, 0x41, 0x87, 0x4e, 0xa5, 0xce, 0x4b, 0x32, 0x79, 0xdd, 0x90, 0x49, 0x7f, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x63, 0x30, 0x61, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x9c, 0x5f, 0xd0, 0x6c, 0x63, 0xa3, 0x5f, 0x93, 0xca, 0x93, 0x98, 0x08, 0xad, 0x8c, 0x87, 0xa5, 0x2c, 0x5c, 0xc1, 0x37, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x9c, 0x5f, 0xd0, 0x6c, 0x63, 0xa3, 0x5f, 0x93, 0xca, 0x93, 0x98, 0x08, 0xad, 0x8c, 0x87, 0xa5, 0x2c, 0x5c, 0xc1, 0x37, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x4e, 0x1e, 0xb9, 0x8a, 0xc6, 0xa0, 0x98, 0x3f, 0x6e, 0xc3, 0x69, 0xc0, 0x6a, 0x5c, 0x49, 0x52, 0xac, 0xcb, 0x2b, 0x5d, 0x78, 0x38, 0xc1, 0xd5, 0x54, 0x84, 0x9f, 0x93, 0xf0, 0x87, 0x19, 0x3d, 0x2c, 0x66, 0x89, 0xeb, 0x0d, 0x42, 0xfc, 0xcc, 0xf0, 0x75, 0x85, 0x3f, 0x8b, 0xf4, 0x80, 0x5d, 0x79, 0xe5, 0x17, 0x67, 0xbd, 0x35, 0x82, 0xe2, 0xf2, 0x3c, 0x8e, 0x7d, 0x5b, 0x36, 0xcb, 0x5a, 0x80, 0x00, 0x29, 0xf2, 0xce, 0x2b, 0x2c, 0xf1, 0x8f, 0xaa, 0x6d, 0x05, 0x93, 0x6c, 0x72, 0xc7, 0x56, 0xeb, 0xdf, 0x50, 0x23, 0x28, 0xe5, 0x45, 0x10, 0x3d, 0xe8, 0x67, 0xa3, 0xaf, 0x0e, 0x55, 0x0f, 0x90, 0x09, 0x62, 0xef, 0x4b, 0x59, 0xa2, 0xf6, 0x53, 0xf1, 0xc0, 0x35, 0xe4, 0x2f, 0xc1, 0x24, 0xbd, 0x79, 0x2f, 0x4e, 0x20, 0x22, 0x3b, 0xfd, 0x1a, 0x20, 0xb0, 0xa4, 0x0e, 0x2c, 0x70, 0xed, 0x74, 0x3f, 0xb8, 0x13, 0x95, 0x06, 0x51, 0xc8, 0xe8, 0x87, 0x26, 0xca, 0xa4, 0x5b, 0x6a, 0x16, 0x21, 0x92, 0xdd, 0x73, 0x60, 0x9e, 0x10, 0x18, 0xde, 0x3c, 0x81, 0xea, 0xe8, 0x18, 0xc3, 0x7c, 0x89, 0xf2, 0x8b, 0x50, 0x3e, 0xbd, 0x11, 0xe2, 0x15, 0x03, 0xa8, 0x36, 0x7d, 0x33, 0x01, 0x6c, 0x48, 0x15, 0xd7, 0x88, 0x90, 0x99, 0x04, 0xc5, 0xcc, 0xe6, 0x07, 0xf4, 0xbc, 0xf4, 0x90, 0xed, 0x13, 0xe2, 0xea, 0x8b, 0xc3, 0x8f, 0xa3, 0x33, 0x0f, 0xc1, 0x29, 0x4c, 0x13, 0x4e, 0xda, 0x15, 0x56, 0x71, 0x73, 0x72, 0x82, 0x50, 0xf6, 0x9a, 0x33, 0x7c, 0xa2, 0xb1, 0xa8, 0x1a, 0x34, 0x74, 0x65, 0x5c, 0xce, 0xd1, 0xeb, 0xab, 0x53, 0xe0, 0x1a, 0x80, 0xd8, 0xea, 0x3a, 0x49, 0xe4, 0x26, 0x30, 0x9b, 0xe5, 0x1c, 0x8a, 0xa8, 0xa9, 0x15, 0x32, 0x86, 0x99, 0x92, 0x0a, 0x10, 0x23, 0x56, 0x12, 0xe0, 0xf6, 0xce, 0x4c, 0xe2, 0xbb, 0xbe, 0xdb, 0x8d, 0x92, 0x73, 0x01, 0x66, 0x2f, 0x62, 0x3e, 0xb2, 0x72, 0x27, 0x45, 0x36, 0xed, 0x4d, 0x56, 0xe3, 0x97, 0x99, 0xff, 0x3a, 0x35, 0x3e, 0xa5, 0x54, 0x4a, 0x52, 0x59, 0x4b, 0x60, 0xdb, 0xee, 0xfe, 0x78, 0x11, 0x7f, 0x4a, 0xdc, 0x14, 0x79, 0x60, 0xb6, 0x6b, 0x64, 0x03, 0xdb, 0x15, 0x83, 0xe1, 0xa2, 0xbe, 0xf6, 0x23, 0x97, 0x50, 0xf0, 0x09, 0x33, 0x36, 0xa7, 0x71, 0x96, 0x25, 0xf3, 0xb9, 0x42, 0x7d, 0xdb, 0x38, 0x3f, 0x2c, 0x58, 0xac, 0xe8, 0x42, 0xe1, 0x0e, 0xd8, 0xd3, 0x3b, 0x4c, 0x2e, 0x82, 0xe9, 0x83, 0x2e, 0x6b, 0x31, 0xd9, 0xdd, 0x47, 0x86, 0x4f, 0x6d, 0x97, 0x91, 0x2e, 0x4f, 0xe2, 0x28, 0x71, 0x35, 0x16, 0xd1, 0xf2, 0x73, 0xfe, 0x25, 0x2b, 0x07, 0x47, 0x24, 0x63, 0x27, 0xc8, 0xf8, 0xf6, 0xd9, 0x6b, 0xfc, 0x12, 0x31, 0x56, 0x08, 0xc0, 0x53, 0x42, 0xaf, 0x9c, 0xd0, 0x33, 0x7e, 0xfc, 0x06, 0xf0, 0x31, 0x44, 0x03, 0x14, 0xf1, 0x58, 0xea, 0xf2, 0x6a, 0x0d, 0xa9, 0x11, 0xb2, 0x83, 0xbe, 0xc5, 0x1a, 0xbf, 0x07, 0xea, 0x59, 0xdc, 0xa3, 0x88, 0x35, 0xef, 0x9c, 0x76, 0x32, 0x3c, 0x4d, 0x06, 0x22, 0xce, 0x15, 0xe5, 0xdd, 0x9e, 0xd8, 0x8f, 0xda, 0xde, 0xd2, 0xc4, 0x39, 0xe5, 0x17, 0x81, 0xcf, 0x38, 0x47, 0xeb, 0x7f, 0x88, 0x6d, 0x59, 0x1b, 0xdf, 0x9f, 0x42, 0x14, 0xae, 0x7e, 0xcf, 0xa8, 0xb0, 0x66, 0x65, 0xda, 0x37, 0xaf, 0x9f, 0xaa, 0x3d, 0xea, 0x28, 0xb6, 0xde, 0xd5, 0x31, 0x58, 0x16, 0x82, 0x5b, 0xea, 0xbb, 0x19, 0x75, 0x02, 0x73, 0x1a, 0xca, 0x48, 0x1a, 0x21, 0x93, 0x90, 0x0a, 0x8e, 0x93, 0x84, 0xa7, 0x7d, 0x3b, 0x23, 0x18, 0x92, 0x89, 0xa0, 0x8d, 0xac, 0x30, 0x82, 0x02, 0x65, 0x30, 0x82, 0x01, 0xeb, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x78, 0x8f, 0x27, 0x5c, 0x81, 0x12, 0x52, 0x20, 0xa5, 0x04, 0xd0, 0x2d, 0xdd, 0xba, 0x73, 0xf4, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x30, 0x74, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x50, 0x4c, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x18, 0x41, 0x73, 0x73, 0x65, 0x63, 0x6f, 0x20, 0x44, 0x61, 0x74, 0x61, 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x53, 0x2e, 0x41, 0x2e, 0x31, 0x27, 0x30, 0x25, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x1e, 0x43, 0x65, 0x72, 0x74, 0x75, 0x6d, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x10, 0x43, 0x65, 0x72, 0x74, 0x75, 0x6d, 0x20, 0x45, 0x43, 0x2d, 0x33, 0x38, 0x34, 0x20, 0x43, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x38, 0x30, 0x33, 0x32, 0x36, 0x30, 0x37, 0x32, 0x34, 0x35, 0x34, 0x5a, 0x17, 0x0d, 0x34, 0x33, 0x30, 0x33, 0x32, 0x36, 0x30, 0x37, 0x32, 0x34, 0x35, 0x34, 0x5a, 0x30, 0x74, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x50, 0x4c, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x18, 0x41, 0x73, 0x73, 0x65, 0x63, 0x6f, 0x20, 0x44, 0x61, 0x74, 0x61, 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x53, 0x2e, 0x41, 0x2e, 0x31, 0x27, 0x30, 0x25, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x1e, 0x43, 0x65, 0x72, 0x74, 0x75, 0x6d, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x10, 0x43, 0x65, 0x72, 0x74, 0x75, 0x6d, 0x20, 0x45, 0x43, 0x2d, 0x33, 0x38, 0x34, 0x20, 0x43, 0x41, 0x30, 0x76, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x22, 0x03, 0x62, 0x00, 0x04, 0xc4, 0x28, 0x8e, 0xab, 0x18, 0x5b, 0x6a, 0xbe, 0x6e, 0x64, 0x37, 0x63, 0xe4, 0xcd, 0xec, 0xab, 0x3a, 0xf7, 0xcc, 0xa1, 0xb8, 0x0e, 0x82, 0x49, 0xd7, 0x86, 0x29, 0x9f, 0xa1, 0x94, 0xf2, 0xe3, 0x60, 0x78, 0x98, 0x81, 0x78, 0x06, 0x4d, 0xf2, 0xec, 0x9a, 0x0e, 0x57, 0x60, 0x83, 0x9f, 0xb4, 0xe6, 0x17, 0x2f, 0x1a, 0xb3, 0x5d, 0x02, 0x5b, 0x89, 0x23, 0x3c, 0xc2, 0x11, 0x05, 0x2a, 0xa7, 0x88, 0x13, 0x18, 0xf3, 0x50, 0x84, 0xd7, 0xbd, 0x34, 0x2c, 0x27, 0x89, 0x55, 0xff, 0xce, 0x4c, 0xe7, 0xdf, 0xa6, 0x1f, 0x28, 0xc4, 0xf0, 0x54, 0xc3, 0xb9, 0x7c, 0xb7, 0x53, 0xad, 0xeb, 0xc2, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x8d, 0x06, 0x66, 0x74, 0x24, 0x76, 0x3a, 0xf3, 0x89, 0xf7, 0xbc, 0xd6, 0xbd, 0x47, 0x7d, 0x2f, 0xbc, 0x10, 0x5f, 0x4b, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x03, 0x68, 0x00, 0x30, 0x65, 0x02, 0x30, 0x03, 0x55, 0x2d, 0xa6, 0xe6, 0x18, 0xc4, 0x7c, 0xef, 0xc9, 0x50, 0x6e, 0xc1, 0x27, 0x0f, 0x9c, 0x87, 0xaf, 0x6e, 0xd5, 0x1b, 0x08, 0x18, 0xbd, 0x92, 0x29, 0xc1, 0xef, 0x94, 0x91, 0x78, 0xd2, 0x3a, 0x1c, 0x55, 0x89, 0x62, 0xe5, 0x1b, 0x09, 0x1e, 0xba, 0x64, 0x6b, 0xf1, 0x76, 0xb4, 0xd4, 0x02, 0x31, 0x00, 0xb4, 0x42, 0x84, 0x99, 0xff, 0xab, 0xe7, 0x9e, 0xfb, 0x91, 0x97, 0x27, 0x5d, 0xdc, 0xb0, 0x5b, 0x30, 0x71, 0xce, 0x5e, 0x38, 0x1a, 0x6a, 0xd9, 0x25, 0xe7, 0xea, 0xf7, 0x61, 0x92, 0x56, 0xf8, 0xea, 0xda, 0x36, 0xc2, 0x87, 0x65, 0x96, 0x2e, 0x72, 0x25, 0x2f, 0x7f, 0xdf, 0xc3, 0x13, 0xc9, 0x30, 0x82, 0x05, 0xc0, 0x30, 0x82, 0x03, 0xa8, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x1e, 0xbf, 0x59, 0x50, 0xb8, 0xc9, 0x80, 0x37, 0x4c, 0x06, 0xf7, 0xeb, 0x55, 0x4f, 0xb5, 0xed, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0d, 0x05, 0x00, 0x30, 0x7a, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x50, 0x4c, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x18, 0x41, 0x73, 0x73, 0x65, 0x63, 0x6f, 0x20, 0x44, 0x61, 0x74, 0x61, 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x53, 0x2e, 0x41, 0x2e, 0x31, 0x27, 0x30, 0x25, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x1e, 0x43, 0x65, 0x72, 0x74, 0x75, 0x6d, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x16, 0x43, 0x65, 0x72, 0x74, 0x75, 0x6d, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x38, 0x30, 0x33, 0x31, 0x36, 0x31, 0x32, 0x31, 0x30, 0x31, 0x33, 0x5a, 0x17, 0x0d, 0x34, 0x33, 0x30, 0x33, 0x31, 0x36, 0x31, 0x32, 0x31, 0x30, 0x31, 0x33, 0x5a, 0x30, 0x7a, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x50, 0x4c, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x18, 0x41, 0x73, 0x73, 0x65, 0x63, 0x6f, 0x20, 0x44, 0x61, 0x74, 0x61, 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x53, 0x2e, 0x41, 0x2e, 0x31, 0x27, 0x30, 0x25, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x1e, 0x43, 0x65, 0x72, 0x74, 0x75, 0x6d, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x16, 0x43, 0x65, 0x72, 0x74, 0x75, 0x6d, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xd1, 0x2d, 0x8e, 0xbb, 0xb7, 0x36, 0xea, 0x6d, 0x37, 0x91, 0x9f, 0x4e, 0x93, 0xa7, 0x05, 0xe4, 0x29, 0x03, 0x25, 0xce, 0x1c, 0x82, 0xf7, 0x7c, 0x99, 0x9f, 0x41, 0x06, 0xcd, 0xed, 0xa3, 0xba, 0xc0, 0xdb, 0x09, 0x2c, 0xc1, 0x7c, 0xdf, 0x29, 0x7e, 0x4b, 0x65, 0x2f, 0x93, 0xa7, 0xd4, 0x01, 0x6b, 0x03, 0x28, 0x18, 0xa3, 0xd8, 0x9d, 0x05, 0xc1, 0x2a, 0xd8, 0x45, 0xf1, 0x91, 0xde, 0xdf, 0x3b, 0xd0, 0x80, 0x02, 0x8c, 0xcf, 0x38, 0x0f, 0xea, 0xa7, 0x5c, 0x78, 0x11, 0xa4, 0xc1, 0xc8, 0x85, 0x5c, 0x25, 0xd3, 0xd3, 0xb2, 0xe7, 0x25, 0xcf, 0x11, 0x54, 0x97, 0xab, 0x35, 0xc0, 0x1e, 0x76, 0x1c, 0xef, 0x00, 0x53, 0x9f, 0x39, 0xdc, 0x14, 0xa5, 0x2c, 0x22, 0x25, 0xb3, 0x72, 0x72, 0xfc, 0x8d, 0xb3, 0xe5, 0x3e, 0x08, 0x1e, 0x14, 0x2a, 0x37, 0x0b, 0x88, 0x3c, 0xca, 0xb0, 0xf4, 0xc8, 0xc2, 0xa1, 0xae, 0xbc, 0xc1, 0xbe, 0x29, 0x67, 0x55, 0xe2, 0xfc, 0xad, 0x59, 0x5c, 0xfe, 0xbd, 0x57, 0x2c, 0xb0, 0x90, 0x8d, 0xc2, 0xed, 0x37, 0xb6, 0x7c, 0x99, 0x88, 0xb5, 0xd5, 0x03, 0x9a, 0x3d, 0x15, 0x0d, 0x3d, 0x3a, 0xa8, 0xa8, 0x45, 0xf0, 0x95, 0x4e, 0x25, 0x59, 0x1d, 0xcd, 0x98, 0x69, 0xbb, 0xd3, 0xcc, 0x32, 0xc9, 0x8d, 0xef, 0x81, 0xfe, 0xad, 0x7d, 0x89, 0xbb, 0xba, 0x60, 0x13, 0xca, 0x65, 0x95, 0x67, 0xa0, 0xf3, 0x19, 0xf6, 0x03, 0x56, 0xd4, 0x6a, 0xd3, 0x27, 0xe2, 0xa1, 0xad, 0x83, 0xf0, 0x4a, 0x12, 0x22, 0x77, 0x1c, 0x05, 0x73, 0xe2, 0x19, 0x71, 0x42, 0xc0, 0xec, 0x75, 0x46, 0x9a, 0x90, 0x58, 0xe0, 0x6a, 0x8e, 0x2b, 0xa5, 0x46, 0x30, 0x04, 0x8e, 0x19, 0xb2, 0x17, 0xe3, 0xbe, 0xa9, 0xba, 0x7f, 0x56, 0xf1, 0x24, 0x03, 0xd7, 0xb2, 0x21, 0x28, 0x76, 0x0e, 0x36, 0x30, 0x4c, 0x79, 0xd5, 0x41, 0x9a, 0x9a, 0xa8, 0xb8, 0x35, 0xba, 0x0c, 0x3a, 0xf2, 0x44, 0x1b, 0x20, 0x88, 0xf7, 0xc5, 0x25, 0xd7, 0x3d, 0xc6, 0xe3, 0x3e, 0x43, 0xdd, 0x87, 0xfe, 0xc4, 0xea, 0xf5, 0x53, 0x3e, 0x4c, 0x65, 0xff, 0x3b, 0x4a, 0xcb, 0x78, 0x5a, 0x6b, 0x17, 0x5f, 0x0d, 0xc7, 0xc3, 0x4f, 0x4e, 0x9a, 0x2a, 0xa2, 0xed, 0x57, 0x4d, 0x22, 0xe2, 0x46, 0x9a, 0x3f, 0x0f, 0x91, 0x34, 0x24, 0x7d, 0x55, 0xe3, 0x8c, 0x95, 0x37, 0xd3, 0x1a, 0xf0, 0x09, 0x2b, 0x2c, 0xd2, 0xc9, 0x8d, 0xb4, 0x0d, 0x00, 0xab, 0x67, 0x29, 0x28, 0xd8, 0x01, 0xf5, 0x19, 0x04, 0xb6, 0x1d, 0xbe, 0x76, 0xfe, 0x72, 0x5c, 0xc4, 0x85, 0xca, 0xd2, 0x80, 0x41, 0xdf, 0x05, 0xa8, 0xa3, 0xd5, 0x84, 0x90, 0x4f, 0x0b, 0xf3, 0xe0, 0x3f, 0x9b, 0x19, 0xd2, 0x37, 0x89, 0x3f, 0xf2, 0x7b, 0x52, 0x1c, 0x8c, 0xf6, 0xe1, 0xf7, 0x3c, 0x07, 0x97, 0x8c, 0x0e, 0xa2, 0x59, 0x81, 0x0c, 0xb2, 0x90, 0x3d, 0xd3, 0xe3, 0x59, 0x46, 0xed, 0x0f, 0xa9, 0xa7, 0xde, 0x80, 0x6b, 0x5a, 0xaa, 0x07, 0xb6, 0x19, 0xcb, 0xbc, 0x57, 0xf3, 0x97, 0x21, 0x7a, 0x0c, 0xb1, 0x2b, 0x74, 0x3e, 0xeb, 0xda, 0xa7, 0x67, 0x2d, 0x4c, 0xc4, 0x98, 0x9e, 0x36, 0x09, 0x76, 0x66, 0x66, 0xfc, 0x1a, 0x3f, 0xea, 0x48, 0x54, 0x1c, 0xbe, 0x30, 0xbd, 0x80, 0x50, 0xbf, 0x7c, 0xb5, 0xce, 0x00, 0xf6, 0x0c, 0x61, 0xd9, 0xe7, 0x24, 0x03, 0xe0, 0xe3, 0x01, 0x81, 0x0e, 0xbd, 0xd8, 0x85, 0x34, 0x88, 0xbd, 0xb2, 0x36, 0xa8, 0x7b, 0x5c, 0x08, 0xe5, 0x44, 0x80, 0x8c, 0x6f, 0xf8, 0x2f, 0xd5, 0x21, 0xca, 0x1d, 0x1c, 0xd0, 0xfb, 0xc4, 0xb5, 0x87, 0xd1, 0x3a, 0x4e, 0xc7, 0x76, 0xb5, 0x35, 0x48, 0xb5, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x8c, 0xfb, 0x1c, 0x75, 0xbc, 0x02, 0xd3, 0x9f, 0x4e, 0x2e, 0x48, 0xd9, 0xf9, 0x60, 0x54, 0xaa, 0xc4, 0xb3, 0x4f, 0xfa, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0d, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x48, 0xa2, 0xd5, 0x00, 0x0b, 0x2e, 0xd0, 0x3f, 0xbc, 0x1c, 0xd5, 0xb5, 0x54, 0x49, 0x1e, 0x5a, 0x6b, 0xf4, 0xe4, 0xf2, 0xe0, 0x40, 0x37, 0xe0, 0xcc, 0x14, 0x7b, 0xb9, 0xc9, 0xfa, 0x35, 0xb5, 0x75, 0x17, 0x93, 0x6a, 0x05, 0x69, 0x85, 0x9c, 0xcd, 0x4f, 0x19, 0x78, 0x5b, 0x19, 0x81, 0xf3, 0x63, 0x3e, 0xc3, 0xce, 0x5b, 0x8f, 0xf5, 0x2f, 0x5e, 0x01, 0x76, 0x13, 0x3f, 0x2c, 0x00, 0xb9, 0xcd, 0x96, 0x52, 0x39, 0x49, 0x6d, 0x04, 0x4e, 0xc5, 0xe9, 0x0f, 0x86, 0x0d, 0xe1, 0xfa, 0xb3, 0x5f, 0x82, 0x12, 0xf1, 0x3a, 0xce, 0x66, 0x06, 0x24, 0x34, 0x2b, 0xe8, 0xcc, 0xca, 0xe7, 0x69, 0xdc, 0x87, 0x9d, 0xc2, 0x34, 0xd7, 0x79, 0xd1, 0xd3, 0x77, 0xb8, 0xaa, 0x59, 0x58, 0xfe, 0x9d, 0x26, 0xfa, 0x38, 0x86, 0x3e, 0x9d, 0x8a, 0x87, 0x64, 0x57, 0xe5, 0x17, 0x3a, 0xe2, 0xf9, 0x8d, 0xb9, 0xe3, 0x33, 0x78, 0xc1, 0x90, 0xd8, 0xb8, 0xdd, 0xb7, 0x83, 0x51, 0xe4, 0xc4, 0xcc, 0x23, 0xd5, 0x06, 0x7c, 0xe6, 0x51, 0xd3, 0xcd, 0x34, 0x31, 0xc0, 0xf6, 0x46, 0xbb, 0x0b, 0xad, 0xfc, 0x3d, 0x10, 0x05, 0x2a, 0x3b, 0x4a, 0x91, 0x25, 0xee, 0x8c, 0xd4, 0x84, 0x87, 0x80, 0x2a, 0xbc, 0x09, 0x8c, 0xaa, 0x3a, 0x13, 0x5f, 0xe8, 0x34, 0x79, 0x50, 0xc1, 0x10, 0x19, 0xf9, 0xd3, 0x28, 0x1e, 0xd4, 0xd1, 0x51, 0x30, 0x29, 0xb3, 0xae, 0x90, 0x67, 0xd6, 0x1f, 0x0a, 0x63, 0xb1, 0xc5, 0xa9, 0xc6, 0x42, 0x31, 0x63, 0x17, 0x94, 0xef, 0x69, 0xcb, 0x2f, 0xfa, 0x8c, 0x14, 0x7d, 0xc4, 0x43, 0x18, 0x89, 0xd9, 0xf0, 0x32, 0x40, 0xe6, 0x80, 0xe2, 0x46, 0x5f, 0xe5, 0xe3, 0xc1, 0x00, 0x59, 0xa8, 0xf9, 0xe8, 0x20, 0xbc, 0x89, 0x2c, 0x0e, 0x47, 0x34, 0x0b, 0xea, 0x57, 0xc2, 0x53, 0x36, 0xfc, 0xa7, 0xd4, 0xaf, 0x31, 0xcd, 0xfe, 0x02, 0xe5, 0x75, 0xfa, 0xb9, 0x27, 0x09, 0xf9, 0xf3, 0xf5, 0x3b, 0xca, 0x7d, 0x9f, 0xa9, 0x22, 0xcb, 0x88, 0xc9, 0xaa, 0xd1, 0x47, 0x3d, 0x36, 0x77, 0xa8, 0x59, 0x64, 0x6b, 0x27, 0xcf, 0xef, 0x27, 0xc1, 0xe3, 0x24, 0xb5, 0x86, 0xf7, 0xae, 0x7e, 0x32, 0x4d, 0xb0, 0x79, 0x68, 0xd1, 0x39, 0xe8, 0x90, 0x58, 0xc3, 0x83, 0xbc, 0x0f, 0x2c, 0xd6, 0x97, 0xeb, 0xce, 0x0c, 0xe1, 0x20, 0xc7, 0xda, 0xb7, 0x3e, 0xc3, 0x3f, 0xbf, 0x2f, 0xdc, 0x34, 0xa4, 0xfb, 0x2b, 0x21, 0xcd, 0x67, 0x8f, 0x4b, 0xf4, 0xe3, 0xea, 0xd4, 0x3f, 0xe7, 0x4f, 0xba, 0xb9, 0xa5, 0x93, 0x45, 0x1c, 0x66, 0x1f, 0x21, 0xfa, 0x64, 0x5e, 0x6f, 0xe0, 0x76, 0x94, 0x32, 0xcb, 0x75, 0xf5, 0x6e, 0xe5, 0xf6, 0x8f, 0xc7, 0xb8, 0xa4, 0xcc, 0xa8, 0x96, 0x7d, 0x64, 0xfb, 0x24, 0x5a, 0x4a, 0x03, 0x6c, 0x6b, 0x38, 0xc6, 0xe8, 0x03, 0x43, 0x9a, 0xf7, 0x57, 0xb9, 0xb3, 0x29, 0x69, 0x93, 0x38, 0xf4, 0x03, 0xf2, 0xbb, 0xfb, 0x82, 0x6b, 0x07, 0x20, 0xd1, 0x52, 0x1f, 0x9a, 0x64, 0x02, 0x7b, 0x98, 0x66, 0xdb, 0x5c, 0x4d, 0x5a, 0x0f, 0xd0, 0x84, 0x95, 0xa0, 0x3c, 0x14, 0x43, 0x06, 0xca, 0xca, 0xdb, 0xb8, 0x41, 0x36, 0xda, 0x6a, 0x44, 0x67, 0x87, 0xaf, 0xaf, 0xe3, 0x45, 0x11, 0x15, 0x69, 0x08, 0xb2, 0xbe, 0x16, 0x39, 0x97, 0x24, 0x6f, 0x12, 0x45, 0xd1, 0x67, 0x5d, 0x09, 0xa8, 0xc9, 0x15, 0xda, 0xfa, 0xd2, 0xa6, 0x5f, 0x13, 0x61, 0x1f, 0xbf, 0x85, 0xac, 0xb4, 0xad, 0xad, 0x05, 0x94, 0x08, 0x83, 0x1e, 0x75, 0x17, 0xd3, 0x71, 0x3b, 0x93, 0x50, 0x23, 0x59, 0xa0, 0xed, 0x3c, 0x91, 0x54, 0x9d, 0x76, 0x00, 0xc5, 0xc3, 0xb8, 0x38, 0xdb, 0x30, 0x82, 0x05, 0xcf, 0x30, 0x82, 0x03, 0xb7, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x14, 0x08, 0x16, 0x5f, 0x8a, 0x4c, 0xa5, 0xec, 0x00, 0xc9, 0x93, 0x40, 0xdf, 0xc4, 0xc6, 0xae, 0x23, 0xb8, 0x1c, 0x5a, 0xa4, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x6f, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x48, 0x4b, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x09, 0x48, 0x6f, 0x6e, 0x67, 0x20, 0x4b, 0x6f, 0x6e, 0x67, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x09, 0x48, 0x6f, 0x6e, 0x67, 0x20, 0x4b, 0x6f, 0x6e, 0x67, 0x31, 0x16, 0x30, 0x14, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0d, 0x48, 0x6f, 0x6e, 0x67, 0x6b, 0x6f, 0x6e, 0x67, 0x20, 0x50, 0x6f, 0x73, 0x74, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x17, 0x48, 0x6f, 0x6e, 0x67, 0x6b, 0x6f, 0x6e, 0x67, 0x20, 0x50, 0x6f, 0x73, 0x74, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x33, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x37, 0x30, 0x36, 0x30, 0x33, 0x30, 0x32, 0x32, 0x39, 0x34, 0x36, 0x5a, 0x17, 0x0d, 0x34, 0x32, 0x30, 0x36, 0x30, 0x33, 0x30, 0x32, 0x32, 0x39, 0x34, 0x36, 0x5a, 0x30, 0x6f, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x48, 0x4b, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x09, 0x48, 0x6f, 0x6e, 0x67, 0x20, 0x4b, 0x6f, 0x6e, 0x67, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x09, 0x48, 0x6f, 0x6e, 0x67, 0x20, 0x4b, 0x6f, 0x6e, 0x67, 0x31, 0x16, 0x30, 0x14, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0d, 0x48, 0x6f, 0x6e, 0x67, 0x6b, 0x6f, 0x6e, 0x67, 0x20, 0x50, 0x6f, 0x73, 0x74, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x17, 0x48, 0x6f, 0x6e, 0x67, 0x6b, 0x6f, 0x6e, 0x67, 0x20, 0x50, 0x6f, 0x73, 0x74, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x33, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xb3, 0x88, 0xd7, 0xea, 0xce, 0x0f, 0x20, 0x4e, 0xbe, 0xe6, 0xd6, 0x03, 0x6d, 0xee, 0x59, 0xfc, 0xc2, 0x57, 0xdf, 0x29, 0x68, 0xa1, 0x83, 0x0e, 0x3e, 0x68, 0xc7, 0x68, 0x58, 0x9c, 0x1c, 0x60, 0x4b, 0x89, 0x43, 0x0c, 0xb9, 0xd4, 0x15, 0xb2, 0xee, 0xc1, 0x4e, 0x75, 0xe9, 0xb5, 0xa7, 0xef, 0xe5, 0xe9, 0x35, 0x99, 0xe4, 0xcc, 0x1c, 0xe7, 0x4b, 0x5f, 0x8d, 0x33, 0x30, 0x20, 0x33, 0x53, 0xd9, 0xa6, 0xbb, 0xd5, 0x3e, 0x13, 0x8e, 0xe9, 0x1f, 0x87, 0x49, 0xad, 0x50, 0x2d, 0x50, 0xca, 0x18, 0xbe, 0x01, 0x58, 0xa2, 0x13, 0x70, 0x96, 0xbb, 0x89, 0x88, 0x56, 0x80, 0x5c, 0xf8, 0xbd, 0x2c, 0x3c, 0xe1, 0x4c, 0x57, 0x88, 0xbb, 0xd3, 0xb9, 0x95, 0xef, 0xcb, 0xc7, 0xf6, 0xda, 0x31, 0x74, 0x28, 0xa6, 0xe6, 0x54, 0x89, 0xf5, 0x41, 0x31, 0xca, 0xe5, 0x26, 0x1a, 0xcd, 0x82, 0xe0, 0x70, 0xda, 0x3b, 0x29, 0xbb, 0xd5, 0x03, 0xf5, 0x99, 0xba, 0x55, 0xf5, 0x64, 0xd1, 0x60, 0x0e, 0xb3, 0x89, 0x49, 0xb8, 0x8a, 0x2f, 0x05, 0xd2, 0x84, 0x45, 0x28, 0x7c, 0x8f, 0x68, 0x50, 0x12, 0x78, 0xfc, 0x0b, 0xb5, 0x53, 0xcb, 0xc2, 0x98, 0x1c, 0x84, 0xa3, 0x9e, 0xb0, 0xbe, 0x23, 0xa4, 0xda, 0xdc, 0xc8, 0x2b, 0x1e, 0xda, 0x6e, 0x45, 0x1e, 0x89, 0x98, 0xda, 0xf9, 0x00, 0x2e, 0x06, 0xe9, 0x0c, 0x3b, 0x70, 0xd5, 0x50, 0x25, 0x88, 0x99, 0xcb, 0xcd, 0x73, 0x60, 0xf7, 0xd5, 0xff, 0x35, 0x67, 0xc5, 0xa1, 0xbc, 0x5e, 0xab, 0xcd, 0x4a, 0xb8, 0x45, 0xeb, 0xc8, 0x68, 0x1e, 0x0d, 0x0d, 0x14, 0x46, 0x12, 0xe3, 0xd2, 0x64, 0x62, 0x8a, 0x42, 0x98, 0xbc, 0xb4, 0xc6, 0x08, 0x08, 0xf8, 0xfd, 0xa8, 0x4c, 0x64, 0x9c, 0x76, 0x01, 0xbd, 0x2f, 0xa9, 0x6c, 0x33, 0x0f, 0xd8, 0x3f, 0x28, 0xb8, 0x3c, 0x69, 0x01, 0x42, 0x86, 0x7e, 0x69, 0xc1, 0xc9, 0x06, 0xca, 0xe5, 0x7a, 0x46, 0x65, 0xe9, 0xc2, 0xd6, 0x50, 0x41, 0x2e, 0x3f, 0xb7, 0xe4, 0xed, 0x6c, 0xd7, 0xbf, 0x26, 0x01, 0x11, 0xa2, 0x16, 0x29, 0x4a, 0x6b, 0x34, 0x06, 0x90, 0xec, 0x13, 0xd2, 0xb6, 0xfb, 0x6a, 0x76, 0xd2, 0x3c, 0xed, 0xf0, 0xd6, 0x2d, 0xdd, 0xe1, 0x15, 0xec, 0xa3, 0x9b, 0x2f, 0x2c, 0xc9, 0x3e, 0x2b, 0xe4, 0x69, 0x3b, 0xff, 0x72, 0x25, 0xb1, 0x36, 0x86, 0x5b, 0xc7, 0x7f, 0x6b, 0x8b, 0x55, 0x1b, 0x4a, 0xc5, 0x20, 0x61, 0x3d, 0xae, 0xcb, 0x50, 0xe1, 0x08, 0x3a, 0xbe, 0xb0, 0x8f, 0x63, 0x41, 0x53, 0x30, 0x08, 0x59, 0x3c, 0x98, 0x1d, 0x77, 0xba, 0x63, 0x91, 0x7a, 0xca, 0x10, 0x50, 0x60, 0xbf, 0xf0, 0xd7, 0xbc, 0x95, 0x87, 0x8f, 0x97, 0xc5, 0xfe, 0x97, 0x6a, 0x01, 0x94, 0xa3, 0x7c, 0x5b, 0x85, 0x1d, 0x2a, 0x39, 0x3a, 0xd0, 0x54, 0xa1, 0xd1, 0x39, 0x71, 0x9d, 0xfd, 0x21, 0xf9, 0xb5, 0x7b, 0xf0, 0xe2, 0xe0, 0x02, 0x8f, 0x6e, 0x96, 0x24, 0x25, 0x2c, 0xa0, 0x1e, 0x2c, 0xa8, 0xc4, 0x89, 0xa7, 0xef, 0xed, 0x99, 0x06, 0x2f, 0xb6, 0x0a, 0x4c, 0x4f, 0xdb, 0xa2, 0xcc, 0x37, 0x1a, 0xaf, 0x47, 0x85, 0x2d, 0x8a, 0x5f, 0xc4, 0x34, 0x34, 0x4c, 0x00, 0xfd, 0x18, 0x93, 0x67, 0x13, 0xd1, 0x37, 0xe6, 0x48, 0xb4, 0x8b, 0x06, 0xc5, 0x57, 0x7b, 0x19, 0x86, 0x0a, 0x79, 0xcb, 0x00, 0xc9, 0x52, 0xaf, 0x42, 0xff, 0x37, 0x8f, 0xe1, 0xa3, 0x1e, 0x7a, 0x3d, 0x50, 0xab, 0x63, 0x06, 0xe7, 0x15, 0xb5, 0x3f, 0xb6, 0x45, 0x37, 0x94, 0x37, 0xb1, 0x7e, 0xf2, 0x48, 0xc3, 0x7f, 0xc5, 0x75, 0xfe, 0x97, 0x8d, 0x45, 0x8f, 0x1a, 0xa7, 0x1a, 0x72, 0x28, 0x1a, 0x40, 0x0f, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x63, 0x30, 0x61, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x17, 0x9d, 0xcd, 0x1e, 0x8b, 0xd6, 0x39, 0x2b, 0x70, 0xd3, 0x5c, 0xd4, 0xa0, 0xb8, 0x1f, 0xb0, 0x00, 0xfc, 0xc5, 0x61, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x17, 0x9d, 0xcd, 0x1e, 0x8b, 0xd6, 0x39, 0x2b, 0x70, 0xd3, 0x5c, 0xd4, 0xa0, 0xb8, 0x1f, 0xb0, 0x00, 0xfc, 0xc5, 0x61, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x56, 0xd5, 0x7b, 0x6e, 0xe6, 0x22, 0x01, 0xd2, 0x42, 0x9b, 0x18, 0xd5, 0x0e, 0xd7, 0x66, 0x23, 0x5c, 0xe3, 0xfe, 0xa0, 0xc7, 0x92, 0xd2, 0xe9, 0x94, 0xad, 0x4b, 0xa2, 0xc6, 0xec, 0x12, 0x7c, 0x74, 0xd5, 0x48, 0xd2, 0x59, 0x14, 0x99, 0xc0, 0xeb, 0xb9, 0xd1, 0xeb, 0xf4, 0x48, 0x30, 0x5b, 0xad, 0xa7, 0x57, 0x73, 0x99, 0xa9, 0xd3, 0xe5, 0xb7, 0xd1, 0x2e, 0x59, 0x24, 0x58, 0xdc, 0x68, 0x2e, 0x2e, 0x62, 0xd8, 0x6a, 0xe4, 0x70, 0x0b, 0x2d, 0x20, 0x50, 0x20, 0xa4, 0x32, 0x95, 0xd1, 0x00, 0x98, 0xbb, 0xd3, 0xfd, 0xf7, 0x32, 0xf2, 0x49, 0xae, 0xc6, 0x7a, 0xe0, 0x47, 0xbe, 0x6e, 0xce, 0xcb, 0xa3, 0x72, 0x3a, 0x2d, 0x69, 0x5d, 0xcb, 0xc8, 0xe8, 0x45, 0x39, 0xd4, 0xfa, 0x42, 0xc1, 0x11, 0x4c, 0x77, 0x5d, 0x92, 0xfb, 0x6a, 0xff, 0x58, 0x44, 0xe5, 0xeb, 0x81, 0x9e, 0xaf, 0xa0, 0x99, 0xad, 0xbe, 0xa9, 0x01, 0x66, 0xcb, 0x38, 0x1d, 0x3c, 0xdf, 0x43, 0x1f, 0xf4, 0x4d, 0x6e, 0xb4, 0xba, 0x17, 0x46, 0xfc, 0x7d, 0xfd, 0x87, 0x81, 0x79, 0x6a, 0x0d, 0x33, 0x0f, 0xfa, 0x2f, 0xf8, 0x14, 0xb9, 0x80, 0xb3, 0x5d, 0x4d, 0xaa, 0x97, 0xe1, 0xf9, 0xe4, 0x18, 0xc5, 0xf8, 0xd5, 0x38, 0x8c, 0x26, 0x3c, 0xfd, 0xf2, 0x28, 0xe2, 0xee, 0x5a, 0x49, 0x88, 0x2c, 0xdf, 0x79, 0x3d, 0x8e, 0x9e, 0x90, 0x3c, 0xbd, 0x41, 0x4a, 0x3a, 0xdd, 0x5b, 0xf6, 0x9a, 0xb4, 0xce, 0x3f, 0x25, 0x30, 0x7f, 0x32, 0x7d, 0xa2, 0x03, 0x94, 0xd0, 0xdc, 0x7a, 0xa1, 0x52, 0xde, 0x6e, 0x93, 0x8d, 0x18, 0x26, 0xfd, 0x55, 0xac, 0xbd, 0x8f, 0x9b, 0xd2, 0xcf, 0xaf, 0xe7, 0x86, 0x2c, 0xcb, 0x1f, 0x09, 0x6f, 0xa3, 0x6f, 0xa9, 0x84, 0xd4, 0x73, 0xbf, 0x4d, 0xa1, 0x74, 0x1b, 0x4e, 0x23, 0x60, 0xf2, 0xcc, 0x0e, 0xaa, 0x7f, 0xa4, 0x9c, 0x4c, 0x25, 0xa8, 0xb2, 0x66, 0x3b, 0x38, 0xff, 0xd9, 0x94, 0x30, 0xf6, 0x72, 0x84, 0xbe, 0x68, 0x55, 0x10, 0x0f, 0xc6, 0x73, 0x2c, 0x16, 0x69, 0x93, 0x07, 0xfe, 0xb1, 0x45, 0xed, 0xbb, 0xa2, 0x55, 0x6a, 0xb0, 0xda, 0xb5, 0x4a, 0x02, 0x25, 0x27, 0x85, 0xd7, 0xb7, 0xb7, 0x86, 0x44, 0x16, 0x89, 0x6c, 0x80, 0x2b, 0x3e, 0x97, 0xa9, 0x9c, 0xd5, 0x7e, 0x55, 0x4c, 0xc6, 0xde, 0x45, 0x10, 0x1c, 0xea, 0xe9, 0x3b, 0x9f, 0x03, 0x53, 0xee, 0xee, 0x7a, 0x01, 0x02, 0x16, 0x78, 0xd4, 0xe8, 0xc2, 0xbe, 0x46, 0x76, 0x88, 0x13, 0x3f, 0x22, 0xbb, 0x48, 0x12, 0x1d, 0x52, 0x00, 0xb4, 0x02, 0x7e, 0x21, 0x1a, 0x1e, 0x9c, 0x25, 0xf4, 0xf3, 0x3d, 0x5e, 0x1e, 0xd2, 0x1c, 0xf9, 0xb3, 0x2d, 0xb6, 0xf7, 0x37, 0x5c, 0xc6, 0xcb, 0x21, 0x4e, 0xb0, 0xf7, 0x99, 0x47, 0x18, 0x85, 0xc1, 0x2b, 0xba, 0x55, 0xae, 0x06, 0xea, 0xd0, 0x07, 0xb2, 0xdc, 0xab, 0xd0, 0x82, 0x96, 0x75, 0xce, 0xd2, 0x50, 0xfe, 0x99, 0xe7, 0xcf, 0x2f, 0x9f, 0xe7, 0x76, 0xd1, 0x61, 0x2a, 0xfb, 0x21, 0xbb, 0x31, 0xd0, 0xaa, 0x9f, 0x47, 0xa4, 0xb2, 0x22, 0xca, 0x16, 0x3a, 0x50, 0x57, 0xc4, 0x5b, 0x43, 0x67, 0xc5, 0x65, 0x62, 0x03, 0x49, 0x01, 0xeb, 0x43, 0xd9, 0xd8, 0xf8, 0x9e, 0xad, 0xcf, 0xb1, 0x63, 0x0e, 0x45, 0xf4, 0xa0, 0x5a, 0x2c, 0x9b, 0x2d, 0xc5, 0xa6, 0xc0, 0xad, 0xa8, 0x47, 0xf4, 0x27, 0x4c, 0x38, 0x0d, 0x2e, 0x1b, 0x49, 0x3b, 0x52, 0xf4, 0xe8, 0x88, 0x83, 0x2b, 0x54, 0x28, 0xd4, 0xf2, 0x35, 0x52, 0xb4, 0x32, 0x83, 0x62, 0x69, 0x64, 0x0c, 0x91, 0x9c, 0x9f, 0x97, 0xea, 0x74, 0x16, 0xfd, 0x1f, 0x11, 0x06, 0x9a, 0x9b, 0xf4, 0x30, 0x82, 0x05, 0xeb, 0x30, 0x82, 0x03, 0xd3, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x56, 0xb6, 0x29, 0xcd, 0x34, 0xbc, 0x78, 0xf6, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0x82, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0e, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x05, 0x54, 0x65, 0x78, 0x61, 0x73, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x07, 0x48, 0x6f, 0x75, 0x73, 0x74, 0x6f, 0x6e, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0f, 0x53, 0x53, 0x4c, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x37, 0x30, 0x35, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x2e, 0x53, 0x53, 0x4c, 0x2e, 0x63, 0x6f, 0x6d, 0x20, 0x45, 0x56, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x52, 0x53, 0x41, 0x20, 0x52, 0x32, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x37, 0x30, 0x35, 0x33, 0x31, 0x31, 0x38, 0x31, 0x34, 0x33, 0x37, 0x5a, 0x17, 0x0d, 0x34, 0x32, 0x30, 0x35, 0x33, 0x30, 0x31, 0x38, 0x31, 0x34, 0x33, 0x37, 0x5a, 0x30, 0x81, 0x82, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0e, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x05, 0x54, 0x65, 0x78, 0x61, 0x73, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x07, 0x48, 0x6f, 0x75, 0x73, 0x74, 0x6f, 0x6e, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0f, 0x53, 0x53, 0x4c, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x37, 0x30, 0x35, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x2e, 0x53, 0x53, 0x4c, 0x2e, 0x63, 0x6f, 0x6d, 0x20, 0x45, 0x56, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x52, 0x53, 0x41, 0x20, 0x52, 0x32, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0x8f, 0x36, 0x65, 0x40, 0xe1, 0xd6, 0x4d, 0xc0, 0xd7, 0xb4, 0xe9, 0x46, 0xda, 0x6b, 0xea, 0x33, 0x47, 0xcd, 0x4c, 0xf9, 0x7d, 0x7d, 0xbe, 0xbd, 0x2d, 0x3d, 0xf0, 0xdb, 0x78, 0xe1, 0x86, 0xa5, 0xd9, 0xba, 0x09, 0x57, 0x68, 0xed, 0x57, 0x3e, 0xa0, 0xd0, 0x08, 0x41, 0x83, 0xe7, 0x28, 0x41, 0x24, 0x1f, 0xe3, 0x72, 0x15, 0xd0, 0x01, 0x1a, 0xfb, 0x5e, 0x70, 0x23, 0xb2, 0xcb, 0x9f, 0x39, 0xe3, 0xcf, 0xc5, 0x4e, 0xc6, 0x92, 0x6d, 0x26, 0xc6, 0x7b, 0xbb, 0xb3, 0xda, 0x27, 0x9d, 0x0a, 0x86, 0xe9, 0x81, 0x37, 0x05, 0xfe, 0xf0, 0x71, 0x71, 0xec, 0xc3, 0x1c, 0xe9, 0x63, 0xa2, 0x17, 0x14, 0x9d, 0xef, 0x1b, 0x67, 0xd3, 0x85, 0x55, 0x02, 0x02, 0xd6, 0x49, 0xc9, 0xcc, 0x5a, 0xe1, 0xb1, 0xf7, 0x6f, 0x32, 0x9f, 0xc9, 0xd4, 0x3b, 0x88, 0x41, 0xa8, 0x9c, 0xbd, 0xcb, 0xab, 0xdb, 0x6d, 0x7b, 0x09, 0x1f, 0xa2, 0x4c, 0x72, 0x90, 0xda, 0x2b, 0x08, 0xfc, 0xcf, 0x3c, 0x54, 0xce, 0x67, 0x0f, 0xa8, 0xcf, 0x5d, 0x96, 0x19, 0x0b, 0xc4, 0xe3, 0x72, 0xeb, 0xad, 0xd1, 0x7d, 0x1d, 0x27, 0xef, 0x92, 0xeb, 0x10, 0xbf, 0x5b, 0xeb, 0x3b, 0xaf, 0xcf, 0x80, 0xdd, 0xc1, 0xd2, 0x96, 0x04, 0x5b, 0x7a, 0x7e, 0xa4, 0xa9, 0x3c, 0x38, 0x76, 0xa4, 0x62, 0x8e, 0xa0, 0x39, 0x5e, 0xea, 0x77, 0xcf, 0x5d, 0x00, 0x59, 0x8f, 0x66, 0x2c, 0x3e, 0x07, 0xa2, 0xa3, 0x05, 0x26, 0x11, 0x69, 0x97, 0xea, 0x85, 0xb7, 0x0f, 0x96, 0x0b, 0x4b, 0xc8, 0x40, 0xe1, 0x50, 0xba, 0x2e, 0x8a, 0xcb, 0xf7, 0x0f, 0x9a, 0x22, 0xe7, 0x7f, 0x9a, 0x37, 0x13, 0xcd, 0xf2, 0x4d, 0x13, 0x6b, 0x21, 0xd1, 0xc0, 0xcc, 0x22, 0xf2, 0xa1, 0x46, 0xf6, 0x44, 0x69, 0x9c, 0xca, 0x61, 0x35, 0x07, 0x00, 0x6f, 0xd6, 0x61, 0x08, 0x11, 0xea, 0xba, 0xb8, 0xf6, 0xe9, 0xb3, 0x60, 0xe5, 0x4d, 0xb9, 0xec, 0x9f, 0x14, 0x66, 0xc9, 0x57, 0x58, 0xdb, 0xcd, 0x87, 0x69, 0xf8, 0x8a, 0x86, 0x12, 0x03, 0x47, 0xbf, 0x66, 0x13, 0x76, 0xac, 0x77, 0x7d, 0x34, 0x24, 0x85, 0x83, 0xcd, 0xd7, 0xaa, 0x9c, 0x90, 0x1a, 0x9f, 0x21, 0x2c, 0x7f, 0x78, 0xb7, 0x64, 0xb8, 0xd8, 0xe8, 0xa6, 0xf4, 0x78, 0xb3, 0x55, 0xcb, 0x84, 0xd2, 0x32, 0xc4, 0x78, 0xae, 0xa3, 0x8f, 0x61, 0xdd, 0xce, 0x08, 0x53, 0xad, 0xec, 0x88, 0xfc, 0x15, 0xe4, 0x9a, 0x0d, 0xe6, 0x9f, 0x1a, 0x77, 0xce, 0x4c, 0x8f, 0xb8, 0x14, 0x15, 0x3d, 0x62, 0x9c, 0x86, 0x38, 0x06, 0x00, 0x66, 0x12, 0xe4, 0x59, 0x76, 0x5a, 0x53, 0xc0, 0x02, 0x98, 0xa2, 0x10, 0x2b, 0x68, 0x44, 0x7b, 0x8e, 0x79, 0xce, 0x33, 0x4a, 0x76, 0xaa, 0x5b, 0x81, 0x16, 0x1b, 0xb5, 0x8a, 0xd8, 0xd0, 0x00, 0x7b, 0x5e, 0x62, 0xb4, 0x09, 0xd6, 0x86, 0x63, 0x0e, 0xa6, 0x05, 0x95, 0x49, 0xba, 0x28, 0x8b, 0x88, 0x93, 0xb2, 0x34, 0x1c, 0xd8, 0xa4, 0x55, 0x6e, 0xb7, 0x1c, 0xd0, 0xde, 0x99, 0x55, 0x3b, 0x23, 0xf4, 0x22, 0xe0, 0xf9, 0x29, 0x66, 0x26, 0xec, 0x20, 0x50, 0x77, 0xdb, 0x4a, 0x0b, 0x8f, 0xbe, 0xe5, 0x02, 0x60, 0x70, 0x41, 0x5e, 0xd4, 0xae, 0x50, 0x39, 0x22, 0x14, 0x26, 0xcb, 0xb2, 0x3b, 0x73, 0x74, 0x55, 0x47, 0x07, 0x79, 0x81, 0x39, 0xa8, 0x30, 0x13, 0x44, 0xe5, 0x04, 0x8a, 0xae, 0x96, 0x13, 0x25, 0x42, 0x0f, 0xb9, 0x53, 0xc4, 0x9b, 0xfc, 0xcd, 0xe4, 0x1c, 0xde, 0x3c, 0xfa, 0xab, 0xd6, 0x06, 0x4a, 0x1f, 0x67, 0xa6, 0x98, 0x30, 0x1c, 0xdd, 0x2c, 0xdb, 0xdc, 0x18, 0x95, 0x57, 0x66, 0xc6, 0xff, 0x5c, 0x8b, 0x56, 0xf5, 0x77, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x63, 0x30, 0x61, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xf9, 0x60, 0xbb, 0xd4, 0xe3, 0xd5, 0x34, 0xf6, 0xb8, 0xf5, 0x06, 0x80, 0x25, 0xa7, 0x73, 0xdb, 0x46, 0x69, 0xa8, 0x9e, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xf9, 0x60, 0xbb, 0xd4, 0xe3, 0xd5, 0x34, 0xf6, 0xb8, 0xf5, 0x06, 0x80, 0x25, 0xa7, 0x73, 0xdb, 0x46, 0x69, 0xa8, 0x9e, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x56, 0xb3, 0x8e, 0xcb, 0x0a, 0x9d, 0x49, 0x8e, 0xbf, 0xa4, 0xc4, 0x91, 0xbb, 0x66, 0x17, 0x05, 0x51, 0x98, 0x75, 0xfb, 0xe5, 0x50, 0x2c, 0x7a, 0x9e, 0xf1, 0x14, 0xfa, 0xab, 0xd3, 0x8a, 0x3e, 0xff, 0x91, 0x29, 0x8f, 0x63, 0x8b, 0xd8, 0xb4, 0xa9, 0x54, 0x01, 0x0d, 0xbe, 0x93, 0x86, 0x2f, 0xf9, 0x4a, 0x6d, 0xc7, 0x5e, 0xf5, 0x57, 0xf9, 0xca, 0x55, 0x1c, 0x12, 0xbe, 0x47, 0x0f, 0x36, 0xc5, 0xdf, 0x6a, 0xb7, 0xdb, 0x75, 0xc2, 0x47, 0x25, 0x7f, 0xb9, 0xf1, 0x63, 0xf8, 0x68, 0x2d, 0x55, 0x04, 0xd1, 0xf2, 0x8d, 0xb0, 0xa4, 0xcf, 0xbc, 0x3c, 0x5e, 0x1f, 0x78, 0xe7, 0xa5, 0xa0, 0x20, 0x70, 0xb0, 0x04, 0xc5, 0xb7, 0xf7, 0x72, 0xa7, 0xde, 0x22, 0x0d, 0xbd, 0x33, 0x25, 0x46, 0x8c, 0x64, 0x92, 0x26, 0xe3, 0x3e, 0x2e, 0x63, 0x96, 0xda, 0x9b, 0x8c, 0x3d, 0xf8, 0x18, 0x09, 0xd7, 0x03, 0xcc, 0x7d, 0x86, 0x82, 0xe0, 0xca, 0x04, 0x07, 0x51, 0x50, 0xd7, 0xff, 0x92, 0xd5, 0x0c, 0xef, 0xda, 0x86, 0x9f, 0x99, 0xd7, 0xeb, 0xb7, 0xaf, 0x68, 0xe2, 0x39, 0x26, 0x94, 0xba, 0x68, 0xb7, 0xbf, 0x83, 0xd3, 0xea, 0x7a, 0x67, 0x3d, 0x62, 0x67, 0xae, 0x25, 0xe5, 0x72, 0xe8, 0xe2, 0xe4, 0xec, 0xae, 0x12, 0xf6, 0x4b, 0x2b, 0x3c, 0x9f, 0xe9, 0xb0, 0x40, 0xf3, 0x38, 0x54, 0xb3, 0xfd, 0xb7, 0x68, 0xc8, 0xda, 0xc6, 0x8f, 0x51, 0x3c, 0xb2, 0xfb, 0x91, 0xdc, 0x1c, 0xe7, 0x9b, 0x9d, 0xe1, 0xb7, 0x0d, 0x72, 0x8f, 0xe2, 0xa4, 0xc4, 0xa9, 0x78, 0xf9, 0xeb, 0x14, 0xac, 0xc6, 0x43, 0x05, 0xc2, 0x65, 0x39, 0x28, 0x18, 0x02, 0xc3, 0x82, 0xb2, 0x9d, 0x05, 0xbe, 0x65, 0xed, 0x96, 0x5f, 0x65, 0x74, 0x3c, 0xfb, 0x09, 0x35, 0x2e, 0x7b, 0x9c, 0x13, 0xfd, 0x1b, 0x0f, 0x5d, 0xc7, 0x6d, 0x81, 0x3a, 0x56, 0x0f, 0xcc, 0x3b, 0xe1, 0xaf, 0x02, 0x2f, 0x22, 0xac, 0x46, 0xca, 0x46, 0x3c, 0xa0, 0x1c, 0x4c, 0xd6, 0x44, 0xb4, 0x5e, 0x2e, 0x5c, 0x15, 0x66, 0x09, 0xe1, 0x26, 0x29, 0xfe, 0xc6, 0x52, 0x61, 0xba, 0xb1, 0x73, 0xff, 0xc3, 0x0c, 0x9c, 0xe5, 0x6c, 0x6a, 0x94, 0x3f, 0x14, 0xca, 0x40, 0x16, 0x95, 0x84, 0xf3, 0x59, 0xa9, 0xac, 0x5f, 0x4c, 0x61, 0x93, 0x6d, 0xd1, 0x3b, 0xcc, 0xa2, 0x95, 0x0c, 0x22, 0xa6, 0x67, 0x67, 0x44, 0x2e, 0xb9, 0xd9, 0xd2, 0x8a, 0x41, 0xb3, 0x66, 0x0b, 0x5a, 0xfb, 0x7d, 0x23, 0xa5, 0xf2, 0x1a, 0xb0, 0xff, 0xde, 0x9b, 0x83, 0x94, 0x2e, 0xd1, 0x3f, 0xdf, 0x92, 0xb7, 0x91, 0xaf, 0x05, 0x3b, 0x65, 0xc7, 0xa0, 0x6c, 0xb1, 0xcd, 0x62, 0x12, 0xc3, 0x90, 0x1b, 0xe3, 0x25, 0xce, 0x34, 0xbc, 0x6f, 0x77, 0x76, 0xb1, 0x10, 0xc3, 0xf7, 0x05, 0x1a, 0xc0, 0xd6, 0xaf, 0x74, 0x62, 0x48, 0x17, 0x77, 0x92, 0x69, 0x90, 0x61, 0x1c, 0xde, 0x95, 0x80, 0x74, 0x54, 0x8f, 0x18, 0x1c, 0xc3, 0xf3, 0x03, 0xd0, 0xbf, 0xa4, 0x43, 0x75, 0x86, 0x53, 0x18, 0x7a, 0x0a, 0x2e, 0x09, 0x1c, 0x36, 0x9f, 0x91, 0xfd, 0x82, 0x8a, 0x22, 0x4b, 0xd1, 0x0e, 0x50, 0x25, 0xdd, 0xcb, 0x03, 0x0c, 0x17, 0xc9, 0x83, 0x00, 0x08, 0x4e, 0x35, 0x4d, 0x8a, 0x8b, 0xed, 0xf0, 0x02, 0x94, 0x66, 0x2c, 0x44, 0x7f, 0xcb, 0x95, 0x27, 0x96, 0x17, 0xad, 0x09, 0x30, 0xac, 0xb6, 0x71, 0x17, 0x6e, 0x8b, 0x17, 0xf6, 0x1c, 0x09, 0xd4, 0x2d, 0x3b, 0x98, 0xa5, 0x71, 0xd3, 0x54, 0x13, 0xd9, 0x60, 0xf3, 0xf5, 0x4b, 0x66, 0x4f, 0xfa, 0xf1, 0xee, 0x20, 0x12, 0x8d, 0xb4, 0xac, 0x57, 0xb1, 0x45, 0x63, 0xa1, 0xac, 0x76, 0xa9, 0xc2, 0xfb, 0x30, 0x82, 0x05, 0x47, 0x30, 0x82, 0x03, 0x2f, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x11, 0x00, 0x34, 0xb6, 0x4e, 0xc6, 0x36, 0x2d, 0x36, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x41, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x52, 0x4f, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0b, 0x43, 0x45, 0x52, 0x54, 0x53, 0x49, 0x47, 0x4e, 0x20, 0x53, 0x41, 0x31, 0x1c, 0x30, 0x1a, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x13, 0x63, 0x65, 0x72, 0x74, 0x53, 0x49, 0x47, 0x4e, 0x20, 0x52, 0x4f, 0x4f, 0x54, 0x20, 0x43, 0x41, 0x20, 0x47, 0x32, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x37, 0x30, 0x32, 0x30, 0x36, 0x30, 0x39, 0x32, 0x37, 0x33, 0x35, 0x5a, 0x17, 0x0d, 0x34, 0x32, 0x30, 0x32, 0x30, 0x36, 0x30, 0x39, 0x32, 0x37, 0x33, 0x35, 0x5a, 0x30, 0x41, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x52, 0x4f, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0b, 0x43, 0x45, 0x52, 0x54, 0x53, 0x49, 0x47, 0x4e, 0x20, 0x53, 0x41, 0x31, 0x1c, 0x30, 0x1a, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x13, 0x63, 0x65, 0x72, 0x74, 0x53, 0x49, 0x47, 0x4e, 0x20, 0x52, 0x4f, 0x4f, 0x54, 0x20, 0x43, 0x41, 0x20, 0x47, 0x32, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xc0, 0xc5, 0x75, 0x19, 0x91, 0x7d, 0x44, 0x74, 0x74, 0x87, 0xfe, 0x0e, 0x3b, 0x96, 0xdc, 0xd8, 0x01, 0x16, 0xcc, 0xee, 0x63, 0x91, 0xe7, 0x0b, 0x6f, 0xce, 0x3b, 0x0a, 0x69, 0x1a, 0x7c, 0xc2, 0xe3, 0xaf, 0x82, 0x8e, 0x86, 0xd7, 0x5e, 0x8f, 0x57, 0xeb, 0xd3, 0x21, 0x59, 0xfd, 0x39, 0x37, 0x42, 0x30, 0xbe, 0x50, 0xea, 0xb6, 0x0f, 0xa9, 0x88, 0xd8, 0x2e, 0x2d, 0x69, 0x21, 0xe7, 0xd1, 0x37, 0x18, 0x4e, 0x7d, 0x91, 0xd5, 0x16, 0x5f, 0x6b, 0x5b, 0x00, 0xc2, 0x39, 0x43, 0x0d, 0x36, 0x85, 0x52, 0xb9, 0x53, 0x65, 0x0f, 0x1d, 0x42, 0xe5, 0x8f, 0xcf, 0x05, 0xd3, 0xee, 0xdc, 0x0c, 0x1a, 0xd9, 0xb8, 0x8b, 0x78, 0x22, 0x67, 0xe4, 0x69, 0xb0, 0x68, 0xc5, 0x3c, 0xe4, 0x6c, 0x5a, 0x46, 0xe7, 0xcd, 0xc7, 0xfa, 0xef, 0xc4, 0xec, 0x4b, 0xbd, 0x6a, 0xa4, 0xac, 0xfd, 0xcc, 0x28, 0x51, 0xef, 0x92, 0xb4, 0x29, 0xab, 0xab, 0x35, 0x9a, 0x4c, 0xe4, 0xc4, 0x08, 0xc6, 0x26, 0xcc, 0xf8, 0x69, 0x9f, 0xe4, 0x9c, 0xf0, 0x29, 0xd3, 0x5c, 0xf9, 0xc6, 0x16, 0x25, 0x9e, 0x23, 0xc3, 0x20, 0xc1, 0x3d, 0x0f, 0x3f, 0x38, 0x40, 0xb0, 0xfe, 0x82, 0x44, 0x38, 0xaa, 0x5a, 0x1a, 0x8a, 0x6b, 0x63, 0x58, 0x38, 0xb4, 0x15, 0xd3, 0xb6, 0x11, 0x69, 0x7b, 0x1e, 0x54, 0xee, 0x8c, 0x1a, 0x22, 0xac, 0x72, 0x97, 0x3f, 0x23, 0x59, 0x9b, 0xc9, 0x22, 0x84, 0xc1, 0x07, 0x4f, 0xcc, 0x7f, 0xe2, 0x57, 0xca, 0x12, 0x70, 0xbb, 0xa6, 0x65, 0xf3, 0x69, 0x75, 0x63, 0xbd, 0x95, 0xfb, 0x1b, 0x97, 0xcd, 0xe4, 0xa8, 0xaf, 0xf6, 0xd1, 0x4e, 0xa8, 0xd9, 0x8a, 0x71, 0x24, 0xcd, 0x36, 0x3d, 0xbc, 0x96, 0xc4, 0xf1, 0x6c, 0xa9, 0xae, 0xe5, 0xcf, 0x0d, 0x6e, 0x28, 0x0d, 0xb0, 0x0e, 0xb5, 0xca, 0x51, 0x7b, 0x78, 0x14, 0xc3, 0x20, 0x2f, 0x7f, 0xfb, 0x14, 0x55, 0xe1, 0x11, 0x99, 0xfd, 0xd5, 0x0a, 0xa1, 0x9e, 0x02, 0xe3, 0x62, 0x5f, 0xeb, 0x35, 0x4b, 0x2c, 0xb8, 0x72, 0xe8, 0x3e, 0x3d, 0x4f, 0xac, 0x2c, 0xbb, 0x2e, 0x86, 0xe2, 0xa3, 0x76, 0x8f, 0xe5, 0x93, 0x2a, 0xcf, 0xa5, 0xab, 0xc8, 0x5c, 0x8d, 0x4b, 0x06, 0xff, 0x12, 0x46, 0xac, 0x78, 0xcb, 0x14, 0x07, 0x35, 0xe0, 0xa9, 0xdf, 0x8b, 0xe9, 0xaf, 0x15, 0x4f, 0x16, 0x89, 0x5b, 0xbd, 0xf6, 0x8d, 0xc6, 0x59, 0xae, 0x88, 0x85, 0x0e, 0xc1, 0x89, 0xeb, 0x1f, 0x67, 0xc5, 0x45, 0x8e, 0xff, 0x6d, 0x37, 0x36, 0x2b, 0x78, 0x66, 0x83, 0x91, 0x51, 0x2b, 0x3d, 0xff, 0x51, 0x77, 0x76, 0x62, 0xa1, 0xec, 0x67, 0x3e, 0x3e, 0x81, 0x83, 0xe0, 0x56, 0xa9, 0x50, 0x1f, 0x1f, 0x7a, 0x99, 0xab, 0x63, 0xbf, 0x84, 0x17, 0x77, 0xf1, 0x0d, 0x3b, 0xdf, 0xf7, 0x9c, 0x61, 0xb3, 0x35, 0x98, 0x8a, 0x3a, 0xb2, 0xec, 0x3c, 0x1a, 0x37, 0x3f, 0x7e, 0x8f, 0x92, 0xcf, 0xd9, 0x12, 0x14, 0x64, 0xda, 0x10, 0x02, 0x15, 0x41, 0xff, 0x4f, 0xc4, 0xeb, 0x1c, 0xa3, 0xc9, 0xfa, 0x99, 0xf7, 0x46, 0xe9, 0xe1, 0x18, 0xd9, 0xb1, 0xb8, 0x32, 0x2d, 0xcb, 0x14, 0x0c, 0x50, 0xd8, 0x83, 0x65, 0x83, 0xee, 0xb9, 0x5c, 0xcf, 0xcb, 0x05, 0x5a, 0x4c, 0xfa, 0x19, 0x97, 0x6b, 0xd6, 0x5d, 0x13, 0xd3, 0xc2, 0x5c, 0x54, 0xbc, 0x32, 0x73, 0xa0, 0x78, 0xf5, 0xf1, 0x6d, 0x1e, 0xcb, 0x9f, 0xa5, 0xa6, 0x9f, 0x22, 0xdc, 0xd1, 0x51, 0x9e, 0x82, 0x79, 0x64, 0x60, 0x29, 0x13, 0x3e, 0xa3, 0xfd, 0x4f, 0x72, 0x6a, 0xab, 0xe2, 0xd4, 0xe5, 0xb8, 0x24, 0x55, 0x2c, 0x44, 0x4b, 0x8a, 0x88, 0x44, 0x9c, 0xca, 0x84, 0xd3, 0x2a, 0x3b, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x82, 0x21, 0x2d, 0x66, 0xc6, 0xd7, 0xa0, 0xe0, 0x15, 0xeb, 0xce, 0x4c, 0x09, 0x77, 0xc4, 0x60, 0x9e, 0x54, 0x6e, 0x03, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x60, 0xde, 0x1a, 0xb8, 0xe7, 0xf2, 0x60, 0x82, 0xd5, 0x03, 0x33, 0x81, 0xcb, 0x06, 0x8a, 0xf1, 0x22, 0x49, 0xe9, 0xe8, 0xea, 0x91, 0x7f, 0xc6, 0x33, 0x5e, 0x68, 0x19, 0x03, 0x86, 0x3b, 0x43, 0x01, 0xcf, 0x07, 0x70, 0xe4, 0x08, 0x1e, 0x65, 0x85, 0x91, 0xe6, 0x11, 0x22, 0xb7, 0xf5, 0x02, 0x23, 0x8e, 0xae, 0xb9, 0x1e, 0x7d, 0x1f, 0x7e, 0x6c, 0xe6, 0xbd, 0x25, 0xd5, 0x95, 0x1a, 0xf2, 0x05, 0xa6, 0xaf, 0x85, 0x02, 0x6f, 0xae, 0xf8, 0xd6, 0x31, 0xff, 0x25, 0xc9, 0x4a, 0xc8, 0xc7, 0x8a, 0xa9, 0xd9, 0x9f, 0x4b, 0x49, 0x9b, 0x11, 0x57, 0x99, 0x92, 0x43, 0x11, 0xde, 0xb6, 0x33, 0xa4, 0xcc, 0xd7, 0x8d, 0x64, 0x7d, 0xd4, 0xcd, 0x3c, 0x28, 0x2c, 0xb4, 0x9a, 0x96, 0xea, 0x4d, 0xf5, 0xc4, 0x44, 0xc4, 0x25, 0xaa, 0x20, 0x80, 0xd8, 0x29, 0x55, 0xf7, 0xe0, 0x41, 0xfc, 0x06, 0x26, 0xff, 0xb9, 0x36, 0xf5, 0x43, 0x14, 0x03, 0x66, 0x78, 0xe1, 0x11, 0xb1, 0xda, 0x20, 0x5f, 0x46, 0x00, 0x78, 0x00, 0x21, 0xa5, 0x1e, 0x00, 0x28, 0x61, 0x78, 0x6f, 0xa8, 0x01, 0x01, 0x8f, 0x9d, 0x34, 0x9a, 0xff, 0xf4, 0x38, 0x90, 0xfb, 0xb8, 0xd1, 0xb3, 0x72, 0x06, 0xc9, 0x71, 0xe6, 0x81, 0xc5, 0x79, 0xed, 0x0b, 0xa6, 0x79, 0xf2, 0x13, 0x0b, 0x9c, 0xf7, 0x5d, 0x0e, 0x7b, 0x24, 0x93, 0xb4, 0x48, 0xdb, 0x86, 0x5f, 0xde, 0x50, 0x86, 0x78, 0xe7, 0x40, 0xe6, 0x31, 0xa8, 0x90, 0x76, 0x70, 0x61, 0xaf, 0x9c, 0x37, 0x2c, 0x11, 0xb5, 0x82, 0xb7, 0xaa, 0xae, 0x24, 0x34, 0x5b, 0x72, 0x0c, 0x69, 0x0d, 0xcd, 0x59, 0x9f, 0xf6, 0x71, 0xaf, 0x9c, 0x0b, 0xd1, 0x0a, 0x38, 0xf9, 0x06, 0x22, 0x83, 0x53, 0x25, 0x0c, 0xfc, 0x51, 0xc4, 0xe6, 0xbe, 0xe2, 0x39, 0x95, 0x0b, 0x24, 0xad, 0xaf, 0xd1, 0x95, 0xe4, 0x96, 0xd7, 0x74, 0x64, 0x6b, 0x71, 0x4e, 0x02, 0x3c, 0xaa, 0x85, 0xf3, 0x20, 0xa3, 0x43, 0x39, 0x76, 0x5b, 0x6c, 0x50, 0xfe, 0x9a, 0x9c, 0x14, 0x1e, 0x65, 0x14, 0x8a, 0x15, 0xbd, 0xa3, 0x82, 0x45, 0x5a, 0x49, 0x56, 0x6a, 0xd2, 0x9c, 0xb1, 0x63, 0x32, 0xe5, 0x61, 0xe0, 0x53, 0x22, 0x0e, 0xa7, 0x0a, 0x49, 0xea, 0xcb, 0x7e, 0x1f, 0xa8, 0xe2, 0x62, 0x80, 0xf6, 0x10, 0x45, 0x52, 0x98, 0x06, 0x18, 0xde, 0xa5, 0xcd, 0x2f, 0x7f, 0xaa, 0xd4, 0xe9, 0x3e, 0x08, 0x72, 0xec, 0x23, 0x03, 0x02, 0x3c, 0xa6, 0xaa, 0xd8, 0xbc, 0x67, 0x74, 0x3d, 0x14, 0x17, 0xfb, 0x54, 0x4b, 0x17, 0xe3, 0xd3, 0x79, 0x3d, 0x6d, 0x6b, 0x49, 0xc9, 0x28, 0x0e, 0x2e, 0x74, 0x50, 0xbf, 0x0c, 0xd9, 0x46, 0x3a, 0x10, 0x86, 0xc9, 0xa7, 0x3f, 0xe9, 0xa0, 0xec, 0x7f, 0xeb, 0xa5, 0x77, 0x58, 0x69, 0x71, 0xe6, 0x83, 0x0a, 0x37, 0xf2, 0x86, 0x49, 0x6a, 0xbe, 0x79, 0x08, 0x90, 0xf6, 0x02, 0x16, 0x64, 0x3e, 0xe5, 0xda, 0x4c, 0x7e, 0x0c, 0x34, 0xc9, 0xf9, 0x5f, 0xb6, 0xb3, 0x28, 0x51, 0xa7, 0xa7, 0x2b, 0xaa, 0x49, 0xfa, 0x8d, 0x65, 0x29, 0x4e, 0xe3, 0x6b, 0x13, 0xa7, 0x94, 0xa3, 0x2d, 0x51, 0x6d, 0x78, 0x0c, 0x44, 0xcb, 0xdf, 0xde, 0x08, 0x6f, 0xce, 0xa3, 0x64, 0xab, 0xd3, 0x95, 0x84, 0xd4, 0xb9, 0x52, 0x54, 0x72, 0x7b, 0x96, 0x25, 0xcc, 0xbc, 0x69, 0xe3, 0x48, 0x6e, 0x0d, 0xd0, 0xc7, 0x9d, 0x27, 0x9a, 0xaa, 0xf8, 0x13, 0x92, 0xdd, 0x1e, 0xdf, 0x63, 0x9f, 0x35, 0xa9, 0x16, 0x36, 0xec, 0x8c, 0xb8, 0x83, 0xf4, 0x3d, 0x89, 0x8f, 0xcd, 0xb4, 0x17, 0x5e, 0xd7, 0xb3, 0x17, 0x41, 0x10, 0x5d, 0x27, 0x73, 0x60, 0x85, 0x57, 0x49, 0x22, 0x07, 0x30, 0x82, 0x02, 0x69, 0x30, 0x82, 0x01, 0xef, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x21, 0x2a, 0x56, 0x0c, 0xae, 0xda, 0x0c, 0xab, 0x40, 0x45, 0xbf, 0x2b, 0xa2, 0x2d, 0x3a, 0xea, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x30, 0x6d, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x48, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x07, 0x57, 0x49, 0x53, 0x65, 0x4b, 0x65, 0x79, 0x31, 0x22, 0x30, 0x20, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x19, 0x4f, 0x49, 0x53, 0x54, 0x45, 0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x6e, 0x64, 0x6f, 0x72, 0x73, 0x65, 0x64, 0x31, 0x28, 0x30, 0x26, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x1f, 0x4f, 0x49, 0x53, 0x54, 0x45, 0x20, 0x57, 0x49, 0x53, 0x65, 0x4b, 0x65, 0x79, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x47, 0x43, 0x20, 0x43, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x37, 0x30, 0x35, 0x30, 0x39, 0x30, 0x39, 0x34, 0x38, 0x33, 0x34, 0x5a, 0x17, 0x0d, 0x34, 0x32, 0x30, 0x35, 0x30, 0x39, 0x30, 0x39, 0x35, 0x38, 0x33, 0x33, 0x5a, 0x30, 0x6d, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x48, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x07, 0x57, 0x49, 0x53, 0x65, 0x4b, 0x65, 0x79, 0x31, 0x22, 0x30, 0x20, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x19, 0x4f, 0x49, 0x53, 0x54, 0x45, 0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x6e, 0x64, 0x6f, 0x72, 0x73, 0x65, 0x64, 0x31, 0x28, 0x30, 0x26, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x1f, 0x4f, 0x49, 0x53, 0x54, 0x45, 0x20, 0x57, 0x49, 0x53, 0x65, 0x4b, 0x65, 0x79, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x47, 0x43, 0x20, 0x43, 0x41, 0x30, 0x76, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x22, 0x03, 0x62, 0x00, 0x04, 0x4c, 0xe9, 0x50, 0xc0, 0xc6, 0x0f, 0x72, 0x18, 0xbc, 0xd8, 0xf1, 0xba, 0xb3, 0x89, 0xe2, 0x79, 0x4a, 0xa3, 0x16, 0xa7, 0x6b, 0x54, 0x24, 0xdb, 0x51, 0xff, 0xea, 0xf4, 0x09, 0x24, 0xc3, 0x0b, 0x22, 0x9f, 0xcb, 0x6a, 0x27, 0x82, 0x81, 0x0d, 0xd2, 0xc0, 0xaf, 0x31, 0xe4, 0x74, 0x82, 0x6e, 0xca, 0x25, 0xd9, 0x8c, 0x75, 0x9d, 0xf1, 0xdb, 0xd0, 0x9a, 0xa2, 0x4b, 0x21, 0x7e, 0x16, 0xa7, 0x63, 0x90, 0xd2, 0x39, 0xd4, 0xb1, 0x87, 0x78, 0x5f, 0x18, 0x96, 0x0f, 0x50, 0x1b, 0x35, 0x37, 0x0f, 0x6a, 0xc6, 0xdc, 0xd9, 0x13, 0x4d, 0xa4, 0x8e, 0x90, 0x37, 0xe6, 0xbd, 0x5b, 0x31, 0x91, 0xa3, 0x54, 0x30, 0x52, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x48, 0x87, 0x14, 0xac, 0xe3, 0xc3, 0x9e, 0x90, 0x60, 0x3a, 0xd7, 0xca, 0x89, 0xee, 0xd3, 0xad, 0x8c, 0xb4, 0x50, 0x66, 0x30, 0x10, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x01, 0x04, 0x03, 0x02, 0x01, 0x00, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x03, 0x68, 0x00, 0x30, 0x65, 0x02, 0x30, 0x26, 0xc7, 0x69, 0x5b, 0xdc, 0xd5, 0xe7, 0xb2, 0xe7, 0xc8, 0x0c, 0x8c, 0x8c, 0xc3, 0xdd, 0x79, 0x8c, 0x1b, 0x63, 0xd5, 0xc9, 0x52, 0x94, 0x4e, 0x4d, 0x82, 0x4a, 0x73, 0x1e, 0xb2, 0x80, 0x84, 0xa9, 0x25, 0xc0, 0x4c, 0x5a, 0x6d, 0x49, 0x29, 0x60, 0x78, 0x13, 0xe2, 0x7e, 0x48, 0xeb, 0x64, 0x02, 0x31, 0x00, 0xdb, 0x34, 0x20, 0x32, 0x08, 0xff, 0x9a, 0x49, 0x02, 0xb6, 0x88, 0xde, 0x14, 0xaf, 0x5d, 0x6c, 0x99, 0x71, 0x8d, 0x1a, 0x3f, 0x8b, 0xd7, 0xe0, 0xa2, 0x36, 0x86, 0x1c, 0x07, 0x82, 0x3a, 0x76, 0x53, 0xfd, 0xc2, 0xa2, 0xed, 0xef, 0x7b, 0xb0, 0x80, 0x4f, 0x58, 0x0f, 0x4b, 0x53, 0x39, 0xbd, 0x30, 0x82, 0x03, 0xb5, 0x30, 0x82, 0x02, 0x9d, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x76, 0xb1, 0x20, 0x52, 0x74, 0xf0, 0x85, 0x87, 0x46, 0xb3, 0xf8, 0x23, 0x1a, 0xf6, 0xc2, 0xc0, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x6d, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x48, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x07, 0x57, 0x49, 0x53, 0x65, 0x4b, 0x65, 0x79, 0x31, 0x22, 0x30, 0x20, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x19, 0x4f, 0x49, 0x53, 0x54, 0x45, 0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x6e, 0x64, 0x6f, 0x72, 0x73, 0x65, 0x64, 0x31, 0x28, 0x30, 0x26, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x1f, 0x4f, 0x49, 0x53, 0x54, 0x45, 0x20, 0x57, 0x49, 0x53, 0x65, 0x4b, 0x65, 0x79, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x47, 0x42, 0x20, 0x43, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x34, 0x31, 0x32, 0x30, 0x31, 0x31, 0x35, 0x30, 0x30, 0x33, 0x32, 0x5a, 0x17, 0x0d, 0x33, 0x39, 0x31, 0x32, 0x30, 0x31, 0x31, 0x35, 0x31, 0x30, 0x33, 0x31, 0x5a, 0x30, 0x6d, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x48, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x07, 0x57, 0x49, 0x53, 0x65, 0x4b, 0x65, 0x79, 0x31, 0x22, 0x30, 0x20, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x19, 0x4f, 0x49, 0x53, 0x54, 0x45, 0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x6e, 0x64, 0x6f, 0x72, 0x73, 0x65, 0x64, 0x31, 0x28, 0x30, 0x26, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x1f, 0x4f, 0x49, 0x53, 0x54, 0x45, 0x20, 0x57, 0x49, 0x53, 0x65, 0x4b, 0x65, 0x79, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x47, 0x42, 0x20, 0x43, 0x41, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xd8, 0x17, 0xb7, 0x1c, 0x4a, 0x24, 0x2a, 0xd6, 0x97, 0xb1, 0xca, 0xe2, 0x1e, 0xfb, 0x7d, 0x38, 0xef, 0x98, 0xf5, 0xb2, 0x39, 0x98, 0x4e, 0x27, 0xb8, 0x11, 0x5d, 0x7b, 0xd2, 0x25, 0x94, 0x88, 0x82, 0x15, 0x26, 0x6a, 0x1b, 0x31, 0xbb, 0xa8, 0x5b, 0x21, 0x21, 0x2b, 0xd8, 0x0f, 0x4e, 0x9f, 0x5a, 0xf1, 0xb1, 0x5a, 0xe4, 0x79, 0xd6, 0x32, 0x23, 0x2b, 0xe1, 0x53, 0xcc, 0x99, 0x45, 0x5c, 0x7b, 0x4f, 0xad, 0xbc, 0xbf, 0x87, 0x4a, 0x0b, 0x4b, 0x97, 0x5a, 0xa8, 0xf6, 0x48, 0xec, 0x7d, 0x7b, 0x0d, 0xcd, 0x21, 0x06, 0xdf, 0x9e, 0x15, 0xfd, 0x41, 0x8a, 0x48, 0xb7, 0x20, 0xf4, 0xa1, 0x7a, 0x1b, 0x57, 0xd4, 0x5d, 0x50, 0xff, 0xba, 0x67, 0xd8, 0x23, 0x99, 0x1f, 0xc8, 0x3f, 0xe3, 0xde, 0xff, 0x6f, 0x5b, 0x77, 0xb1, 0x6b, 0x6e, 0xb8, 0xc9, 0x64, 0xf7, 0xe1, 0xca, 0x41, 0x46, 0x0e, 0x29, 0x71, 0xd0, 0xb9, 0x23, 0xfc, 0xc9, 0x81, 0x5f, 0x4e, 0xf7, 0x6f, 0xdf, 0xbf, 0x84, 0xad, 0x73, 0x64, 0xbb, 0xb7, 0x42, 0x8e, 0x69, 0xf6, 0xd4, 0x76, 0x1d, 0x7e, 0x9d, 0xa7, 0xb8, 0x57, 0x8a, 0x51, 0x67, 0x72, 0xd7, 0xd4, 0xa8, 0xb8, 0x95, 0x54, 0x40, 0x73, 0x03, 0xf6, 0xea, 0xf4, 0xeb, 0xfe, 0x28, 0x42, 0x77, 0x3f, 0x9d, 0x23, 0x1b, 0xb2, 0xb6, 0x3d, 0x80, 0x14, 0x07, 0x4c, 0x2e, 0x4f, 0xf7, 0xd5, 0x0a, 0x16, 0x0d, 0xbd, 0x66, 0x43, 0x37, 0x7e, 0x23, 0x43, 0x79, 0xc3, 0x40, 0x86, 0xf5, 0x4c, 0x29, 0xda, 0x8e, 0x9a, 0xad, 0x0d, 0xa5, 0x04, 0x87, 0x88, 0x1e, 0x85, 0xe3, 0xe9, 0x53, 0xd5, 0x9b, 0xc8, 0x8b, 0x03, 0x63, 0x78, 0xeb, 0xe0, 0x19, 0x4a, 0x6e, 0xbb, 0x2f, 0x6b, 0x33, 0x64, 0x58, 0x93, 0xad, 0x69, 0xbf, 0x8f, 0x1b, 0xef, 0x82, 0x48, 0xc7, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x51, 0x30, 0x4f, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x35, 0x0f, 0xc8, 0x36, 0x63, 0x5e, 0xe2, 0xa3, 0xec, 0xf9, 0x3b, 0x66, 0x15, 0xce, 0x51, 0x52, 0xe3, 0x91, 0x9a, 0x3d, 0x30, 0x10, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x01, 0x04, 0x03, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x40, 0x4c, 0xfb, 0x87, 0xb2, 0x99, 0x81, 0x90, 0x7e, 0x9d, 0xc5, 0xb0, 0xb0, 0x26, 0xcd, 0x88, 0x7b, 0x2b, 0x32, 0x8d, 0x6e, 0xb8, 0x21, 0x71, 0x58, 0x97, 0x7d, 0xae, 0x37, 0x14, 0xaf, 0x3e, 0xe7, 0xf7, 0x9a, 0xe2, 0x7d, 0xf6, 0x71, 0x98, 0x99, 0x04, 0xaa, 0x43, 0x74, 0x78, 0xa3, 0xe3, 0x49, 0x61, 0x3e, 0x73, 0x8c, 0x4d, 0x94, 0xe0, 0xf9, 0x71, 0xc4, 0xb6, 0x16, 0x0e, 0x53, 0x78, 0x1f, 0xd6, 0xa2, 0x87, 0x2f, 0x02, 0x39, 0x81, 0x29, 0x3c, 0xaf, 0x15, 0x98, 0x21, 0x30, 0xfe, 0x28, 0x90, 0x00, 0x8c, 0xd1, 0xe1, 0xcb, 0xfa, 0x5e, 0xc8, 0xfd, 0xf8, 0x10, 0x46, 0x3b, 0xa2, 0x78, 0x42, 0x91, 0x17, 0x74, 0x55, 0x0a, 0xde, 0x50, 0x67, 0x4d, 0x66, 0xd1, 0xa7, 0xff, 0xfd, 0xd9, 0xc0, 0xb5, 0xa8, 0xa3, 0x8a, 0xce, 0x66, 0xf5, 0x0f, 0x43, 0xcd, 0xa7, 0x2b, 0x57, 0x7b, 0x63, 0x46, 0x6a, 0xaa, 0x2e, 0x52, 0xd8, 0xf4, 0xed, 0xe1, 0x6d, 0xad, 0x29, 0x90, 0x78, 0x48, 0xba, 0xe1, 0x23, 0xaa, 0xa3, 0x89, 0xec, 0xb5, 0xab, 0x96, 0xc0, 0xb4, 0x4b, 0xa2, 0x1d, 0x97, 0x9e, 0x7a, 0xf2, 0x6e, 0x40, 0x71, 0xdf, 0x68, 0xf1, 0x65, 0x4d, 0xce, 0x7c, 0x05, 0xdf, 0x53, 0x65, 0xa9, 0xa5, 0xf0, 0xb1, 0x97, 0x04, 0x70, 0x15, 0x46, 0x03, 0x98, 0xd4, 0xd2, 0xbf, 0x54, 0xb4, 0xa0, 0x58, 0x7d, 0x52, 0x6f, 0xda, 0x56, 0x26, 0x62, 0xd4, 0xd8, 0xdb, 0x89, 0x31, 0x6f, 0x1c, 0xf0, 0x22, 0xc2, 0xd3, 0x62, 0x1c, 0x35, 0xcd, 0x4c, 0x69, 0x15, 0x54, 0x1a, 0x90, 0x98, 0xde, 0xeb, 0x1e, 0x5f, 0xca, 0x77, 0xc7, 0xcb, 0x8e, 0x3d, 0x43, 0x69, 0x9c, 0x9a, 0x58, 0xd0, 0x24, 0x3b, 0xdf, 0x1b, 0x40, 0x96, 0x7e, 0x35, 0xad, 0x81, 0xc7, 0x4e, 0x71, 0xba, 0x88, 0x13, 0x30, 0x82, 0x03, 0x72, 0x30, 0x82, 0x02, 0x5a, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x14, 0x3e, 0x8a, 0x5d, 0x07, 0xec, 0x55, 0xd2, 0x32, 0xd5, 0xb7, 0xe3, 0xb6, 0x5f, 0x01, 0xeb, 0x2d, 0xdc, 0xe4, 0xd6, 0xe4, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x51, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x50, 0x4c, 0x31, 0x28, 0x30, 0x26, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x1f, 0x4b, 0x72, 0x61, 0x6a, 0x6f, 0x77, 0x61, 0x20, 0x49, 0x7a, 0x62, 0x61, 0x20, 0x52, 0x6f, 0x7a, 0x6c, 0x69, 0x63, 0x7a, 0x65, 0x6e, 0x69, 0x6f, 0x77, 0x61, 0x20, 0x53, 0x2e, 0x41, 0x2e, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0f, 0x53, 0x5a, 0x41, 0x46, 0x49, 0x52, 0x20, 0x52, 0x4f, 0x4f, 0x54, 0x20, 0x43, 0x41, 0x32, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x35, 0x31, 0x30, 0x31, 0x39, 0x30, 0x37, 0x34, 0x33, 0x33, 0x30, 0x5a, 0x17, 0x0d, 0x33, 0x35, 0x31, 0x30, 0x31, 0x39, 0x30, 0x37, 0x34, 0x33, 0x33, 0x30, 0x5a, 0x30, 0x51, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x50, 0x4c, 0x31, 0x28, 0x30, 0x26, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x1f, 0x4b, 0x72, 0x61, 0x6a, 0x6f, 0x77, 0x61, 0x20, 0x49, 0x7a, 0x62, 0x61, 0x20, 0x52, 0x6f, 0x7a, 0x6c, 0x69, 0x63, 0x7a, 0x65, 0x6e, 0x69, 0x6f, 0x77, 0x61, 0x20, 0x53, 0x2e, 0x41, 0x2e, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0f, 0x53, 0x5a, 0x41, 0x46, 0x49, 0x52, 0x20, 0x52, 0x4f, 0x4f, 0x54, 0x20, 0x43, 0x41, 0x32, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xb7, 0xbc, 0x3e, 0x50, 0xa8, 0x4b, 0xcd, 0x40, 0xb5, 0xce, 0x61, 0xe7, 0x96, 0xca, 0xb4, 0xa1, 0xda, 0x0c, 0x22, 0xb0, 0xfa, 0xb5, 0x7b, 0x76, 0x00, 0x77, 0x8c, 0x0b, 0xcf, 0x7d, 0xa8, 0x86, 0xcc, 0x26, 0x51, 0xe4, 0x20, 0x3d, 0x85, 0x0c, 0xd6, 0x58, 0xe3, 0xe7, 0xf4, 0x2a, 0x18, 0x9d, 0xda, 0xd1, 0xae, 0x26, 0xee, 0xeb, 0x53, 0xdc, 0xf4, 0x90, 0xd6, 0x13, 0x4a, 0x0c, 0x90, 0x3c, 0xc3, 0xf4, 0xda, 0xd2, 0x8e, 0x0d, 0x92, 0x3a, 0xdc, 0xb1, 0xb1, 0xff, 0x38, 0xde, 0xc3, 0xba, 0x2d, 0x5f, 0x80, 0xb9, 0x02, 0xbd, 0x4a, 0x9d, 0x1b, 0x0f, 0xb4, 0xc3, 0xc2, 0xc1, 0x67, 0x03, 0xdd, 0xdc, 0x1b, 0x9c, 0x3d, 0xb3, 0xb0, 0xde, 0x00, 0x1e, 0xa8, 0x34, 0x47, 0xbb, 0x9a, 0xeb, 0xfe, 0x0b, 0x14, 0xbd, 0x36, 0x84, 0xda, 0x0d, 0x20, 0xbf, 0xfa, 0x5b, 0xcb, 0xa9, 0x16, 0x20, 0xad, 0x39, 0x60, 0xee, 0x2f, 0x75, 0xb6, 0xe7, 0x97, 0x9c, 0xf9, 0x3e, 0xfd, 0x7e, 0x4d, 0x6f, 0x4d, 0x2f, 0xef, 0x88, 0x0d, 0x6a, 0xfa, 0xdd, 0xf1, 0x3d, 0x6e, 0x20, 0xa5, 0xa0, 0x12, 0xb4, 0x4d, 0x70, 0xb9, 0xce, 0xd7, 0x72, 0x3b, 0x89, 0x93, 0xa7, 0x80, 0x84, 0x1c, 0x27, 0x49, 0x72, 0x49, 0xb5, 0xff, 0x3b, 0x95, 0x9e, 0xc1, 0xcc, 0xc8, 0x01, 0xec, 0xe8, 0x0e, 0x8a, 0x0a, 0x96, 0xe7, 0xb3, 0xa6, 0x87, 0xe5, 0xd6, 0xf9, 0x05, 0x2b, 0x0d, 0x97, 0x40, 0x70, 0x3c, 0xba, 0xac, 0x75, 0x5a, 0x9c, 0xd5, 0x4d, 0x9d, 0x02, 0x0a, 0xd2, 0x4b, 0x9b, 0x66, 0x4b, 0x46, 0x07, 0x17, 0x65, 0xad, 0x9f, 0x6c, 0x88, 0x00, 0xdc, 0x22, 0x89, 0xe0, 0xe1, 0x64, 0xd4, 0x67, 0xbc, 0x31, 0x79, 0x61, 0x3c, 0xbb, 0xca, 0x41, 0xcd, 0x5c, 0x6a, 0x00, 0xc8, 0x3c, 0x38, 0x8e, 0x58, 0xaf, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x2e, 0x16, 0xa9, 0x4a, 0x18, 0xb5, 0xcb, 0xcc, 0xf5, 0x6f, 0x50, 0xf3, 0x23, 0x5f, 0xf8, 0x5d, 0xe7, 0xac, 0xf0, 0xc8, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0xb5, 0x73, 0xf8, 0x03, 0xdc, 0x59, 0x5b, 0x1d, 0x76, 0xe9, 0xa3, 0x2a, 0x7b, 0x90, 0x28, 0xb2, 0x4d, 0xc0, 0x33, 0x4f, 0xaa, 0x9a, 0xb1, 0xd4, 0xb8, 0xe4, 0x27, 0xff, 0xa9, 0x96, 0x99, 0xce, 0x46, 0xe0, 0x6d, 0x7c, 0x4c, 0xa2, 0x38, 0xa4, 0x06, 0x70, 0xf0, 0xf4, 0x41, 0x11, 0xec, 0x3f, 0x47, 0x8d, 0x3f, 0x72, 0x87, 0xf9, 0x3b, 0xfd, 0xa4, 0x6f, 0x2b, 0x53, 0x00, 0xe0, 0xff, 0x39, 0xb9, 0x6a, 0x07, 0x0e, 0xeb, 0x1d, 0x1c, 0xf6, 0xa2, 0x72, 0x90, 0xcb, 0x82, 0x3d, 0x11, 0x82, 0x8b, 0xd2, 0xbb, 0x9f, 0x2a, 0xaf, 0x21, 0xe6, 0x63, 0x86, 0x9d, 0x79, 0x19, 0xef, 0xf7, 0xbb, 0x0c, 0x35, 0x90, 0xc3, 0x8a, 0xed, 0x4f, 0x0f, 0xf5, 0xcc, 0x12, 0xd9, 0xa4, 0x3e, 0xbb, 0xa0, 0xfc, 0x20, 0x95, 0x5f, 0x4f, 0x26, 0x2f, 0x11, 0x23, 0x83, 0x4e, 0x75, 0x07, 0x0f, 0xbf, 0x9b, 0xd1, 0xb4, 0x1d, 0xe9, 0x10, 0x04, 0xfe, 0xca, 0x60, 0x8f, 0xa2, 0x4c, 0xb8, 0xad, 0xcf, 0xe1, 0x90, 0x0f, 0xcd, 0xae, 0x0a, 0xc7, 0x5d, 0x7b, 0xb7, 0x50, 0xd2, 0xd4, 0x61, 0xfa, 0xd5, 0x15, 0xdb, 0xd7, 0x9f, 0x87, 0x51, 0x54, 0xeb, 0xa5, 0xe3, 0xeb, 0xc9, 0x85, 0xa0, 0x25, 0x20, 0x37, 0xfb, 0x8e, 0xce, 0x0c, 0x34, 0x84, 0xe1, 0x3c, 0x81, 0xb2, 0x77, 0x4e, 0x43, 0xa5, 0x88, 0x5f, 0x86, 0x67, 0xa1, 0x3d, 0xe6, 0xb4, 0x5c, 0x61, 0xb6, 0x3e, 0xdb, 0xfe, 0xb7, 0x28, 0xc5, 0xa2, 0x07, 0xae, 0xb5, 0xca, 0xca, 0x8d, 0x2a, 0x12, 0xef, 0x97, 0xed, 0xc2, 0x30, 0xa4, 0xc9, 0x2a, 0x7a, 0xfb, 0xf3, 0x4d, 0x23, 0x1b, 0x99, 0x33, 0x34, 0xa0, 0x2e, 0xf5, 0xa9, 0x0b, 0x3f, 0xd4, 0x5d, 0xe1, 0xcf, 0x84, 0x9f, 0xe2, 0x19, 0xc2, 0x5f, 0x8a, 0xd6, 0x20, 0x1e, 0xe3, 0x73, 0xb7, 0x30, 0x82, 0x05, 0xd2, 0x30, 0x82, 0x03, 0xba, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x21, 0xd6, 0xd0, 0x4a, 0x4f, 0x25, 0x0f, 0xc9, 0x32, 0x37, 0xfc, 0xaa, 0x5e, 0x12, 0x8d, 0xe9, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0d, 0x05, 0x00, 0x30, 0x81, 0x80, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x50, 0x4c, 0x31, 0x22, 0x30, 0x20, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x19, 0x55, 0x6e, 0x69, 0x7a, 0x65, 0x74, 0x6f, 0x20, 0x54, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, 0x73, 0x20, 0x53, 0x2e, 0x41, 0x2e, 0x31, 0x27, 0x30, 0x25, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x1e, 0x43, 0x65, 0x72, 0x74, 0x75, 0x6d, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x1b, 0x43, 0x65, 0x72, 0x74, 0x75, 0x6d, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x20, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x43, 0x41, 0x20, 0x32, 0x30, 0x22, 0x18, 0x0f, 0x32, 0x30, 0x31, 0x31, 0x31, 0x30, 0x30, 0x36, 0x30, 0x38, 0x33, 0x39, 0x35, 0x36, 0x5a, 0x18, 0x0f, 0x32, 0x30, 0x34, 0x36, 0x31, 0x30, 0x30, 0x36, 0x30, 0x38, 0x33, 0x39, 0x35, 0x36, 0x5a, 0x30, 0x81, 0x80, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x50, 0x4c, 0x31, 0x22, 0x30, 0x20, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x19, 0x55, 0x6e, 0x69, 0x7a, 0x65, 0x74, 0x6f, 0x20, 0x54, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, 0x73, 0x20, 0x53, 0x2e, 0x41, 0x2e, 0x31, 0x27, 0x30, 0x25, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x1e, 0x43, 0x65, 0x72, 0x74, 0x75, 0x6d, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x1b, 0x43, 0x65, 0x72, 0x74, 0x75, 0x6d, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x20, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x43, 0x41, 0x20, 0x32, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xbd, 0xf9, 0x78, 0xf8, 0xe6, 0xd5, 0x80, 0x0c, 0x64, 0x9d, 0x86, 0x1b, 0x96, 0x64, 0x67, 0x3f, 0x22, 0x3a, 0x1e, 0x75, 0x01, 0x7d, 0xef, 0xfb, 0x5c, 0x67, 0x8c, 0xc9, 0xcc, 0x5c, 0x6b, 0xa9, 0x91, 0xe6, 0xb9, 0x42, 0xe5, 0x20, 0x4b, 0x9b, 0xda, 0x9b, 0x7b, 0xb9, 0x99, 0x5d, 0xd9, 0x9b, 0x80, 0x4b, 0xd7, 0x84, 0x40, 0x2b, 0x27, 0xd3, 0xe8, 0xba, 0x30, 0xbb, 0x3e, 0x09, 0x1a, 0xa7, 0x49, 0x95, 0xef, 0x2b, 0x40, 0x24, 0xc2, 0x97, 0xc7, 0xa7, 0xee, 0x9b, 0x25, 0xef, 0xa8, 0x0a, 0x00, 0x97, 0x85, 0x5a, 0xaa, 0x9d, 0xdc, 0x29, 0xc9, 0xe2, 0x35, 0x07, 0xeb, 0x70, 0x4d, 0x4a, 0xd6, 0xc1, 0xb3, 0x56, 0xb8, 0xa1, 0x41, 0x38, 0x9b, 0xd1, 0xfb, 0x31, 0x7f, 0x8f, 0xe0, 0x5f, 0xe1, 0xb1, 0x3f, 0x0f, 0x8e, 0x16, 0x49, 0x60, 0xd7, 0x06, 0x8d, 0x18, 0xf9, 0xaa, 0x26, 0x10, 0xab, 0x2a, 0xd3, 0xd0, 0xd1, 0x67, 0x8d, 0x1b, 0x46, 0xbe, 0x47, 0x30, 0xd5, 0x2e, 0x72, 0xd1, 0xc5, 0x63, 0xda, 0xe7, 0x63, 0x79, 0x44, 0x7e, 0x4b, 0x63, 0x24, 0x89, 0x86, 0x2e, 0x34, 0x3f, 0x29, 0x4c, 0x52, 0x8b, 0x2a, 0xa7, 0xc0, 0xe2, 0x91, 0x28, 0x89, 0xb9, 0xc0, 0x5b, 0xf9, 0x1d, 0xd9, 0xe7, 0x27, 0xad, 0xff, 0x9a, 0x02, 0x97, 0xc1, 0xc6, 0x50, 0x92, 0x9b, 0x02, 0x2c, 0xbd, 0xa9, 0xb9, 0x34, 0x59, 0x0a, 0xbf, 0x84, 0x4a, 0xff, 0xdf, 0xfe, 0xb3, 0x9f, 0xeb, 0xd9, 0x9e, 0xe0, 0x98, 0x23, 0xec, 0xa6, 0x6b, 0x77, 0x16, 0x2a, 0xdb, 0xcc, 0xad, 0x3b, 0x1c, 0xa4, 0x87, 0xdc, 0x46, 0x73, 0x5e, 0x19, 0x62, 0x68, 0x45, 0x57, 0xe4, 0x90, 0x82, 0x42, 0xbb, 0x42, 0xd6, 0xf0, 0x61, 0xe0, 0xc1, 0xa3, 0x3d, 0x66, 0xa3, 0x5d, 0xf4, 0x18, 0xee, 0x88, 0xc9, 0x8d, 0x17, 0x45, 0x29, 0x99, 0x32, 0x75, 0x02, 0x31, 0xee, 0x29, 0x26, 0xc8, 0x6b, 0x02, 0xe6, 0xb5, 0x62, 0x45, 0x7f, 0x37, 0x15, 0x5a, 0x23, 0x68, 0x89, 0xd4, 0x3e, 0xde, 0x4e, 0x27, 0xb0, 0xf0, 0x40, 0x0c, 0xbc, 0x4d, 0x17, 0xcb, 0x4d, 0xa2, 0xb3, 0x1e, 0xd0, 0x06, 0x5a, 0xdd, 0xf6, 0x93, 0xcf, 0x57, 0x75, 0x99, 0xf5, 0xfa, 0x86, 0x1a, 0x67, 0x78, 0xb3, 0xbf, 0x96, 0xfe, 0x34, 0xdc, 0xbd, 0xe7, 0x52, 0x56, 0xe5, 0xb3, 0xe5, 0x75, 0x7b, 0xd7, 0x41, 0x91, 0x05, 0xdc, 0x5d, 0x69, 0xe3, 0x95, 0x0d, 0x43, 0xb9, 0xfc, 0x83, 0x96, 0x39, 0x95, 0x7b, 0x6c, 0x80, 0x5a, 0x4f, 0x13, 0x72, 0xc6, 0xd7, 0x7d, 0x29, 0x7a, 0x44, 0xba, 0x52, 0xa4, 0x2a, 0xd5, 0x41, 0x46, 0x09, 0x20, 0xfe, 0x22, 0xa0, 0xb6, 0x5b, 0x30, 0x8d, 0xbc, 0x89, 0x0c, 0xd5, 0xd7, 0x70, 0xf8, 0x87, 0x52, 0xfd, 0xda, 0xef, 0xac, 0x51, 0x2e, 0x07, 0xb3, 0x4e, 0xfe, 0xd0, 0x09, 0xda, 0x70, 0xef, 0x98, 0xfa, 0x56, 0xe6, 0x6d, 0xdb, 0xb5, 0x57, 0x4b, 0xdc, 0xe5, 0x2c, 0x25, 0x15, 0xc8, 0x9e, 0x2e, 0x78, 0x4e, 0xf8, 0xda, 0x9c, 0x9e, 0x86, 0x2c, 0xca, 0x57, 0xf3, 0x1a, 0xe5, 0xc8, 0x92, 0x8b, 0x1a, 0x82, 0x96, 0x7a, 0xc3, 0xbc, 0x50, 0x12, 0x69, 0xd8, 0x0e, 0x5a, 0x46, 0x8b, 0x3a, 0xeb, 0x26, 0xfa, 0x23, 0xc9, 0xb6, 0xb0, 0x81, 0xbe, 0x42, 0x00, 0xa4, 0xf8, 0xd6, 0xfe, 0x30, 0x2e, 0xc7, 0xd2, 0x46, 0xf6, 0xe5, 0x8e, 0x75, 0xfd, 0xf2, 0xcc, 0xb9, 0xd0, 0x87, 0x5b, 0xcc, 0x06, 0x10, 0x60, 0xbb, 0x83, 0x35, 0xb7, 0x5e, 0x67, 0xde, 0x47, 0xec, 0x99, 0x48, 0xf1, 0xa4, 0xa1, 0x15, 0xfe, 0xad, 0x8c, 0x62, 0x8e, 0x39, 0x55, 0x4f, 0x39, 0x16, 0xb9, 0xb1, 0x63, 0x9d, 0xff, 0xb7, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xb6, 0xa1, 0x54, 0x39, 0x02, 0xc3, 0xa0, 0x3f, 0x8e, 0x8a, 0xbc, 0xfa, 0xd4, 0xf8, 0x1c, 0xa6, 0xd1, 0x3a, 0x0e, 0xfd, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0d, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x71, 0xa5, 0x0e, 0xce, 0xe4, 0xe9, 0xbf, 0x3f, 0x38, 0xd5, 0x89, 0x5a, 0xc4, 0x02, 0x61, 0xfb, 0x4c, 0xc5, 0x14, 0x17, 0x2d, 0x8b, 0x4f, 0x53, 0x6b, 0x10, 0x17, 0xfc, 0x65, 0x84, 0xc7, 0x10, 0x49, 0x90, 0xde, 0xdb, 0xc7, 0x26, 0x93, 0x88, 0x26, 0x6f, 0x70, 0xd6, 0x02, 0x5e, 0x39, 0xa0, 0xf7, 0x8f, 0xab, 0x96, 0xb5, 0xa5, 0x13, 0x5c, 0x81, 0x14, 0x6d, 0x0e, 0x81, 0x82, 0x11, 0x1b, 0x8a, 0x4e, 0xc6, 0x4f, 0xa5, 0xdd, 0x62, 0x1e, 0x44, 0xdf, 0x09, 0x59, 0xf4, 0x5b, 0x77, 0x0b, 0x37, 0xe9, 0x8b, 0x20, 0xc6, 0xf8, 0x0a, 0x4e, 0x2e, 0x58, 0x1c, 0xeb, 0x33, 0xd0, 0xcf, 0x86, 0x60, 0xc9, 0xda, 0xfb, 0x80, 0x2f, 0x9e, 0x4c, 0x60, 0x84, 0x78, 0x3d, 0x21, 0x64, 0xd6, 0xfb, 0x41, 0x1f, 0x18, 0x0f, 0xe7, 0xc9, 0x75, 0x71, 0xbd, 0xbd, 0x5c, 0xde, 0x34, 0x87, 0x3e, 0x41, 0xb0, 0x0e, 0xf6, 0xb9, 0xd6, 0x3f, 0x09, 0x13, 0x96, 0x14, 0x2f, 0xde, 0x9a, 0x1d, 0x5a, 0xb9, 0x56, 0xce, 0x35, 0x3a, 0xb0, 0x5f, 0x70, 0x4d, 0x5e, 0xe3, 0x29, 0xf1, 0x23, 0x28, 0x72, 0x59, 0xb6, 0xab, 0xc2, 0x8c, 0x66, 0x26, 0x1c, 0x77, 0x2c, 0x26, 0x76, 0x35, 0x8b, 0x28, 0xa7, 0x69, 0xa0, 0xf9, 0x3b, 0xf5, 0x23, 0xdd, 0x85, 0x10, 0x74, 0xc9, 0x90, 0x03, 0x56, 0x91, 0xe7, 0xaf, 0xba, 0x47, 0xd4, 0x12, 0x97, 0x11, 0x22, 0xe3, 0xa2, 0x49, 0x94, 0x6c, 0xe7, 0xb7, 0x94, 0x4b, 0xba, 0x2d, 0xa4, 0xda, 0x33, 0x8b, 0x4c, 0xa6, 0x44, 0xff, 0x5a, 0x3c, 0xc6, 0x1d, 0x64, 0xd8, 0xb5, 0x31, 0xe4, 0xa6, 0x3c, 0x7a, 0xa8, 0x57, 0x0b, 0xdb, 0xed, 0x61, 0x1a, 0xcb, 0xf1, 0xce, 0x73, 0x77, 0x63, 0xa4, 0x87, 0x6f, 0x4c, 0x51, 0x38, 0xd6, 0xe4, 0x5f, 0xc7, 0x9f, 0xb6, 0x81, 0x2a, 0xe4, 0x85, 0x48, 0x79, 0x58, 0x5e, 0x3b, 0xf8, 0xdb, 0x02, 0x82, 0x67, 0xc1, 0x39, 0xdb, 0xc3, 0x74, 0x4b, 0x3d, 0x36, 0x1e, 0xf9, 0x29, 0x93, 0x88, 0x68, 0x5b, 0xa8, 0x44, 0x19, 0x21, 0xf0, 0xa7, 0xe8, 0x81, 0x0d, 0x2c, 0xe8, 0x93, 0x36, 0xb4, 0x37, 0xb2, 0xca, 0xb0, 0x1b, 0x26, 0x7a, 0x9a, 0x25, 0x1f, 0x9a, 0x9a, 0x80, 0x9e, 0x4b, 0x2a, 0x3f, 0xfb, 0xa3, 0x9a, 0xfe, 0x73, 0x32, 0x71, 0xc2, 0x9e, 0xc6, 0x72, 0xe1, 0x8a, 0x68, 0x27, 0xf1, 0xe4, 0x0f, 0xb4, 0xc4, 0x4c, 0xa5, 0x61, 0x93, 0xf8, 0x97, 0x10, 0x07, 0x2a, 0x30, 0x25, 0xa9, 0xb9, 0xc8, 0x71, 0xb8, 0xef, 0x68, 0xcc, 0x2d, 0x7e, 0xf5, 0xe0, 0x7e, 0x0f, 0x82, 0xa8, 0x6f, 0xb6, 0xba, 0x6c, 0x83, 0x43, 0x77, 0xcd, 0x8a, 0x92, 0x17, 0xa1, 0x9e, 0x5b, 0x78, 0x16, 0x3d, 0x45, 0xe2, 0x33, 0x72, 0xdd, 0xe1, 0x66, 0xca, 0x99, 0xd3, 0xc9, 0xc5, 0x26, 0xfd, 0x0d, 0x68, 0x04, 0x46, 0xae, 0xb6, 0xd9, 0x9b, 0x8c, 0xbe, 0x19, 0xbe, 0xb1, 0xc6, 0xf2, 0x19, 0xe3, 0x5c, 0x02, 0xca, 0x2c, 0xd8, 0x6f, 0x4a, 0x07, 0xd9, 0xc9, 0x35, 0xda, 0x40, 0x75, 0xf2, 0xc4, 0xa7, 0x19, 0x6f, 0x9e, 0x42, 0x10, 0x98, 0x75, 0xe6, 0x95, 0x8b, 0x60, 0xbc, 0xed, 0xc5, 0x12, 0xd7, 0x8a, 0xce, 0xd5, 0x98, 0x5c, 0x56, 0x96, 0x03, 0xc5, 0xee, 0x77, 0x06, 0x35, 0xff, 0xcf, 0xe4, 0xee, 0x3f, 0x13, 0x61, 0xee, 0xdb, 0xda, 0x2d, 0x85, 0xf0, 0xcd, 0xae, 0x9d, 0xb2, 0x18, 0x09, 0x45, 0xc3, 0x92, 0xa1, 0x72, 0x17, 0xfc, 0x47, 0xb6, 0xa0, 0x0b, 0x2c, 0xf1, 0xc4, 0xde, 0x43, 0x68, 0x08, 0x6a, 0x5f, 0x3b, 0xf0, 0x76, 0x63, 0xfb, 0xcc, 0x06, 0x2c, 0xa6, 0xc6, 0xe2, 0x0e, 0xb5, 0xb9, 0xbe, 0x24, 0x8f, 0x30, 0x82, 0x02, 0x6e, 0x30, 0x82, 0x01, 0xf3, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x62, 0xf6, 0x32, 0x6c, 0xe5, 0xc4, 0xe3, 0x68, 0x5c, 0x1b, 0x62, 0xdd, 0x9c, 0x2e, 0x9d, 0x95, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x30, 0x78, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x45, 0x53, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x08, 0x46, 0x4e, 0x4d, 0x54, 0x2d, 0x52, 0x43, 0x4d, 0x31, 0x0e, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x05, 0x43, 0x65, 0x72, 0x65, 0x73, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 0x61, 0x0c, 0x0f, 0x56, 0x41, 0x54, 0x45, 0x53, 0x2d, 0x51, 0x32, 0x38, 0x32, 0x36, 0x30, 0x30, 0x34, 0x4a, 0x31, 0x2c, 0x30, 0x2a, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x23, 0x41, 0x43, 0x20, 0x52, 0x41, 0x49, 0x5a, 0x20, 0x46, 0x4e, 0x4d, 0x54, 0x2d, 0x52, 0x43, 0x4d, 0x20, 0x53, 0x45, 0x52, 0x56, 0x49, 0x44, 0x4f, 0x52, 0x45, 0x53, 0x20, 0x53, 0x45, 0x47, 0x55, 0x52, 0x4f, 0x53, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x38, 0x31, 0x32, 0x32, 0x30, 0x30, 0x39, 0x33, 0x37, 0x33, 0x33, 0x5a, 0x17, 0x0d, 0x34, 0x33, 0x31, 0x32, 0x32, 0x30, 0x30, 0x39, 0x33, 0x37, 0x33, 0x33, 0x5a, 0x30, 0x78, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x45, 0x53, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x08, 0x46, 0x4e, 0x4d, 0x54, 0x2d, 0x52, 0x43, 0x4d, 0x31, 0x0e, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x05, 0x43, 0x65, 0x72, 0x65, 0x73, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 0x61, 0x0c, 0x0f, 0x56, 0x41, 0x54, 0x45, 0x53, 0x2d, 0x51, 0x32, 0x38, 0x32, 0x36, 0x30, 0x30, 0x34, 0x4a, 0x31, 0x2c, 0x30, 0x2a, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x23, 0x41, 0x43, 0x20, 0x52, 0x41, 0x49, 0x5a, 0x20, 0x46, 0x4e, 0x4d, 0x54, 0x2d, 0x52, 0x43, 0x4d, 0x20, 0x53, 0x45, 0x52, 0x56, 0x49, 0x44, 0x4f, 0x52, 0x45, 0x53, 0x20, 0x53, 0x45, 0x47, 0x55, 0x52, 0x4f, 0x53, 0x30, 0x76, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x22, 0x03, 0x62, 0x00, 0x04, 0xf6, 0xba, 0x57, 0x53, 0xc8, 0xca, 0xab, 0xdf, 0x36, 0x4a, 0x52, 0x21, 0xe4, 0x97, 0xd2, 0x83, 0x67, 0x9e, 0xf0, 0x65, 0x51, 0xd0, 0x5e, 0x87, 0xc7, 0x47, 0xb1, 0x59, 0xf2, 0x57, 0x47, 0x9b, 0x00, 0x02, 0x93, 0x44, 0x17, 0x69, 0xdb, 0x42, 0xc7, 0xb1, 0xb2, 0x3a, 0x18, 0x0e, 0xb4, 0x5d, 0x8c, 0xb3, 0x66, 0x5d, 0xa1, 0x34, 0xf9, 0x36, 0x2c, 0x49, 0xdb, 0xf3, 0x46, 0xfc, 0xb3, 0x44, 0x69, 0x44, 0x13, 0x66, 0xfd, 0xd7, 0xc5, 0xfd, 0xaf, 0x36, 0x4d, 0xce, 0x03, 0x4d, 0x07, 0x71, 0xcf, 0xaf, 0x6a, 0x05, 0xd2, 0xa2, 0x43, 0x5a, 0x0a, 0x52, 0x6f, 0x01, 0x03, 0x4e, 0x8e, 0x8b, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x01, 0xb9, 0x2f, 0xef, 0xbf, 0x11, 0x86, 0x60, 0xf2, 0x4f, 0xd0, 0x41, 0x6e, 0xab, 0x73, 0x1f, 0xe7, 0xd2, 0x6e, 0x49, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x03, 0x69, 0x00, 0x30, 0x66, 0x02, 0x31, 0x00, 0xae, 0x4a, 0xe3, 0x2b, 0x40, 0xc3, 0x74, 0x11, 0xf2, 0x95, 0xad, 0x16, 0x23, 0xde, 0x4e, 0x0c, 0x1a, 0xe6, 0x5d, 0xa5, 0x24, 0x5e, 0x6b, 0x44, 0x7b, 0xfc, 0x38, 0xe2, 0x4f, 0xcb, 0x9c, 0x45, 0x17, 0x11, 0x4c, 0x14, 0x27, 0x26, 0x55, 0x39, 0x75, 0x4a, 0x03, 0xcc, 0x13, 0x90, 0x9f, 0x92, 0x02, 0x31, 0x00, 0xfa, 0x4a, 0x6c, 0x60, 0x88, 0x73, 0xf3, 0xee, 0xb8, 0x98, 0x62, 0xa9, 0xce, 0x2b, 0xc2, 0xd9, 0x8a, 0xa6, 0x70, 0x31, 0x1d, 0xaf, 0xb0, 0x94, 0x4c, 0xeb, 0x4f, 0xc6, 0xe3, 0xd1, 0xf3, 0x62, 0xa7, 0x3c, 0xff, 0x93, 0x2e, 0x07, 0x5c, 0x49, 0x01, 0x67, 0x69, 0x12, 0x02, 0x72, 0xbf, 0xe7, 0x30, 0x82, 0x05, 0x6b, 0x30, 0x82, 0x03, 0x53, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x11, 0x00, 0x82, 0x10, 0xcf, 0xb0, 0xd2, 0x40, 0xe3, 0x59, 0x44, 0x63, 0xe0, 0xbb, 0x63, 0x82, 0x8b, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x4f, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x29, 0x30, 0x27, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x20, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x20, 0x52, 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x0c, 0x49, 0x53, 0x52, 0x47, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x58, 0x31, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x35, 0x30, 0x36, 0x30, 0x34, 0x31, 0x31, 0x30, 0x34, 0x33, 0x38, 0x5a, 0x17, 0x0d, 0x33, 0x35, 0x30, 0x36, 0x30, 0x34, 0x31, 0x31, 0x30, 0x34, 0x33, 0x38, 0x5a, 0x30, 0x4f, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x29, 0x30, 0x27, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x20, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x20, 0x52, 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x0c, 0x49, 0x53, 0x52, 0x47, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x58, 0x31, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xad, 0xe8, 0x24, 0x73, 0xf4, 0x14, 0x37, 0xf3, 0x9b, 0x9e, 0x2b, 0x57, 0x28, 0x1c, 0x87, 0xbe, 0xdc, 0xb7, 0xdf, 0x38, 0x90, 0x8c, 0x6e, 0x3c, 0xe6, 0x57, 0xa0, 0x78, 0xf7, 0x75, 0xc2, 0xa2, 0xfe, 0xf5, 0x6a, 0x6e, 0xf6, 0x00, 0x4f, 0x28, 0xdb, 0xde, 0x68, 0x86, 0x6c, 0x44, 0x93, 0xb6, 0xb1, 0x63, 0xfd, 0x14, 0x12, 0x6b, 0xbf, 0x1f, 0xd2, 0xea, 0x31, 0x9b, 0x21, 0x7e, 0xd1, 0x33, 0x3c, 0xba, 0x48, 0xf5, 0xdd, 0x79, 0xdf, 0xb3, 0xb8, 0xff, 0x12, 0xf1, 0x21, 0x9a, 0x4b, 0xc1, 0x8a, 0x86, 0x71, 0x69, 0x4a, 0x66, 0x66, 0x6c, 0x8f, 0x7e, 0x3c, 0x70, 0xbf, 0xad, 0x29, 0x22, 0x06, 0xf3, 0xe4, 0xc0, 0xe6, 0x80, 0xae, 0xe2, 0x4b, 0x8f, 0xb7, 0x99, 0x7e, 0x94, 0x03, 0x9f, 0xd3, 0x47, 0x97, 0x7c, 0x99, 0x48, 0x23, 0x53, 0xe8, 0x38, 0xae, 0x4f, 0x0a, 0x6f, 0x83, 0x2e, 0xd1, 0x49, 0x57, 0x8c, 0x80, 0x74, 0xb6, 0xda, 0x2f, 0xd0, 0x38, 0x8d, 0x7b, 0x03, 0x70, 0x21, 0x1b, 0x75, 0xf2, 0x30, 0x3c, 0xfa, 0x8f, 0xae, 0xdd, 0xda, 0x63, 0xab, 0xeb, 0x16, 0x4f, 0xc2, 0x8e, 0x11, 0x4b, 0x7e, 0xcf, 0x0b, 0xe8, 0xff, 0xb5, 0x77, 0x2e, 0xf4, 0xb2, 0x7b, 0x4a, 0xe0, 0x4c, 0x12, 0x25, 0x0c, 0x70, 0x8d, 0x03, 0x29, 0xa0, 0xe1, 0x53, 0x24, 0xec, 0x13, 0xd9, 0xee, 0x19, 0xbf, 0x10, 0xb3, 0x4a, 0x8c, 0x3f, 0x89, 0xa3, 0x61, 0x51, 0xde, 0xac, 0x87, 0x07, 0x94, 0xf4, 0x63, 0x71, 0xec, 0x2e, 0xe2, 0x6f, 0x5b, 0x98, 0x81, 0xe1, 0x89, 0x5c, 0x34, 0x79, 0x6c, 0x76, 0xef, 0x3b, 0x90, 0x62, 0x79, 0xe6, 0xdb, 0xa4, 0x9a, 0x2f, 0x26, 0xc5, 0xd0, 0x10, 0xe1, 0x0e, 0xde, 0xd9, 0x10, 0x8e, 0x16, 0xfb, 0xb7, 0xf7, 0xa8, 0xf7, 0xc7, 0xe5, 0x02, 0x07, 0x98, 0x8f, 0x36, 0x08, 0x95, 0xe7, 0xe2, 0x37, 0x96, 0x0d, 0x36, 0x75, 0x9e, 0xfb, 0x0e, 0x72, 0xb1, 0x1d, 0x9b, 0xbc, 0x03, 0xf9, 0x49, 0x05, 0xd8, 0x81, 0xdd, 0x05, 0xb4, 0x2a, 0xd6, 0x41, 0xe9, 0xac, 0x01, 0x76, 0x95, 0x0a, 0x0f, 0xd8, 0xdf, 0xd5, 0xbd, 0x12, 0x1f, 0x35, 0x2f, 0x28, 0x17, 0x6c, 0xd2, 0x98, 0xc1, 0xa8, 0x09, 0x64, 0x77, 0x6e, 0x47, 0x37, 0xba, 0xce, 0xac, 0x59, 0x5e, 0x68, 0x9d, 0x7f, 0x72, 0xd6, 0x89, 0xc5, 0x06, 0x41, 0x29, 0x3e, 0x59, 0x3e, 0xdd, 0x26, 0xf5, 0x24, 0xc9, 0x11, 0xa7, 0x5a, 0xa3, 0x4c, 0x40, 0x1f, 0x46, 0xa1, 0x99, 0xb5, 0xa7, 0x3a, 0x51, 0x6e, 0x86, 0x3b, 0x9e, 0x7d, 0x72, 0xa7, 0x12, 0x05, 0x78, 0x59, 0xed, 0x3e, 0x51, 0x78, 0x15, 0x0b, 0x03, 0x8f, 0x8d, 0xd0, 0x2f, 0x05, 0xb2, 0x3e, 0x7b, 0x4a, 0x1c, 0x4b, 0x73, 0x05, 0x12, 0xfc, 0xc6, 0xea, 0xe0, 0x50, 0x13, 0x7c, 0x43, 0x93, 0x74, 0xb3, 0xca, 0x74, 0xe7, 0x8e, 0x1f, 0x01, 0x08, 0xd0, 0x30, 0xd4, 0x5b, 0x71, 0x36, 0xb4, 0x07, 0xba, 0xc1, 0x30, 0x30, 0x5c, 0x48, 0xb7, 0x82, 0x3b, 0x98, 0xa6, 0x7d, 0x60, 0x8a, 0xa2, 0xa3, 0x29, 0x82, 0xcc, 0xba, 0xbd, 0x83, 0x04, 0x1b, 0xa2, 0x83, 0x03, 0x41, 0xa1, 0xd6, 0x05, 0xf1, 0x1b, 0xc2, 0xb6, 0xf0, 0xa8, 0x7c, 0x86, 0x3b, 0x46, 0xa8, 0x48, 0x2a, 0x88, 0xdc, 0x76, 0x9a, 0x76, 0xbf, 0x1f, 0x6a, 0xa5, 0x3d, 0x19, 0x8f, 0xeb, 0x38, 0xf3, 0x64, 0xde, 0xc8, 0x2b, 0x0d, 0x0a, 0x28, 0xff, 0xf7, 0xdb, 0xe2, 0x15, 0x42, 0xd4, 0x22, 0xd0, 0x27, 0x5d, 0xe1, 0x79, 0xfe, 0x18, 0xe7, 0x70, 0x88, 0xad, 0x4e, 0xe6, 0xd9, 0x8b, 0x3a, 0xc6, 0xdd, 0x27, 0x51, 0x6e, 0xff, 0xbc, 0x64, 0xf5, 0x33, 0x43, 0x4f, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x79, 0xb4, 0x59, 0xe6, 0x7b, 0xb6, 0xe5, 0xe4, 0x01, 0x73, 0x80, 0x08, 0x88, 0xc8, 0x1a, 0x58, 0xf6, 0xe9, 0x9b, 0x6e, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x55, 0x1f, 0x58, 0xa9, 0xbc, 0xb2, 0xa8, 0x50, 0xd0, 0x0c, 0xb1, 0xd8, 0x1a, 0x69, 0x20, 0x27, 0x29, 0x08, 0xac, 0x61, 0x75, 0x5c, 0x8a, 0x6e, 0xf8, 0x82, 0xe5, 0x69, 0x2f, 0xd5, 0xf6, 0x56, 0x4b, 0xb9, 0xb8, 0x73, 0x10, 0x59, 0xd3, 0x21, 0x97, 0x7e, 0xe7, 0x4c, 0x71, 0xfb, 0xb2, 0xd2, 0x60, 0xad, 0x39, 0xa8, 0x0b, 0xea, 0x17, 0x21, 0x56, 0x85, 0xf1, 0x50, 0x0e, 0x59, 0xeb, 0xce, 0xe0, 0x59, 0xe9, 0xba, 0xc9, 0x15, 0xef, 0x86, 0x9d, 0x8f, 0x84, 0x80, 0xf6, 0xe4, 0xe9, 0x91, 0x90, 0xdc, 0x17, 0x9b, 0x62, 0x1b, 0x45, 0xf0, 0x66, 0x95, 0xd2, 0x7c, 0x6f, 0xc2, 0xea, 0x3b, 0xef, 0x1f, 0xcf, 0xcb, 0xd6, 0xae, 0x27, 0xf1, 0xa9, 0xb0, 0xc8, 0xae, 0xfd, 0x7d, 0x7e, 0x9a, 0xfa, 0x22, 0x04, 0xeb, 0xff, 0xd9, 0x7f, 0xea, 0x91, 0x2b, 0x22, 0xb1, 0x17, 0x0e, 0x8f, 0xf2, 0x8a, 0x34, 0x5b, 0x58, 0xd8, 0xfc, 0x01, 0xc9, 0x54, 0xb9, 0xb8, 0x26, 0xcc, 0x8a, 0x88, 0x33, 0x89, 0x4c, 0x2d, 0x84, 0x3c, 0x82, 0xdf, 0xee, 0x96, 0x57, 0x05, 0xba, 0x2c, 0xbb, 0xf7, 0xc4, 0xb7, 0xc7, 0x4e, 0x3b, 0x82, 0xbe, 0x31, 0xc8, 0x22, 0x73, 0x73, 0x92, 0xd1, 0xc2, 0x80, 0xa4, 0x39, 0x39, 0x10, 0x33, 0x23, 0x82, 0x4c, 0x3c, 0x9f, 0x86, 0xb2, 0x55, 0x98, 0x1d, 0xbe, 0x29, 0x86, 0x8c, 0x22, 0x9b, 0x9e, 0xe2, 0x6b, 0x3b, 0x57, 0x3a, 0x82, 0x70, 0x4d, 0xdc, 0x09, 0xc7, 0x89, 0xcb, 0x0a, 0x07, 0x4d, 0x6c, 0xe8, 0x5d, 0x8e, 0xc9, 0xef, 0xce, 0xab, 0xc7, 0xbb, 0xb5, 0x2b, 0x4e, 0x45, 0xd6, 0x4a, 0xd0, 0x26, 0xcc, 0xe5, 0x72, 0xca, 0x08, 0x6a, 0xa5, 0x95, 0xe3, 0x15, 0xa1, 0xf7, 0xa4, 0xed, 0xc9, 0x2c, 0x5f, 0xa5, 0xfb, 0xff, 0xac, 0x28, 0x02, 0x2e, 0xbe, 0xd7, 0x7b, 0xbb, 0xe3, 0x71, 0x7b, 0x90, 0x16, 0xd3, 0x07, 0x5e, 0x46, 0x53, 0x7c, 0x37, 0x07, 0x42, 0x8c, 0xd3, 0xc4, 0x96, 0x9c, 0xd5, 0x99, 0xb5, 0x2a, 0xe0, 0x95, 0x1a, 0x80, 0x48, 0xae, 0x4c, 0x39, 0x07, 0xce, 0xcc, 0x47, 0xa4, 0x52, 0x95, 0x2b, 0xba, 0xb8, 0xfb, 0xad, 0xd2, 0x33, 0x53, 0x7d, 0xe5, 0x1d, 0x4d, 0x6d, 0xd5, 0xa1, 0xb1, 0xc7, 0x42, 0x6f, 0xe6, 0x40, 0x27, 0x35, 0x5c, 0xa3, 0x28, 0xb7, 0x07, 0x8d, 0xe7, 0x8d, 0x33, 0x90, 0xe7, 0x23, 0x9f, 0xfb, 0x50, 0x9c, 0x79, 0x6c, 0x46, 0xd5, 0xb4, 0x15, 0xb3, 0x96, 0x6e, 0x7e, 0x9b, 0x0c, 0x96, 0x3a, 0xb8, 0x52, 0x2d, 0x3f, 0xd6, 0x5b, 0xe1, 0xfb, 0x08, 0xc2, 0x84, 0xfe, 0x24, 0xa8, 0xa3, 0x89, 0xda, 0xac, 0x6a, 0xe1, 0x18, 0x2a, 0xb1, 0xa8, 0x43, 0x61, 0x5b, 0xd3, 0x1f, 0xdc, 0x3b, 0x8d, 0x76, 0xf2, 0x2d, 0xe8, 0x8d, 0x75, 0xdf, 0x17, 0x33, 0x6c, 0x3d, 0x53, 0xfb, 0x7b, 0xcb, 0x41, 0x5f, 0xff, 0xdc, 0xa2, 0xd0, 0x61, 0x38, 0xe1, 0x96, 0xb8, 0xac, 0x5d, 0x8b, 0x37, 0xd7, 0x75, 0xd5, 0x33, 0xc0, 0x99, 0x11, 0xae, 0x9d, 0x41, 0xc1, 0x72, 0x75, 0x84, 0xbe, 0x02, 0x41, 0x42, 0x5f, 0x67, 0x24, 0x48, 0x94, 0xd1, 0x9b, 0x27, 0xbe, 0x07, 0x3f, 0xb9, 0xb8, 0x4f, 0x81, 0x74, 0x51, 0xe1, 0x7a, 0xb7, 0xed, 0x9d, 0x23, 0xe2, 0xbe, 0xe0, 0xd5, 0x28, 0x04, 0x13, 0x3c, 0x31, 0x03, 0x9e, 0xdd, 0x7a, 0x6c, 0x8f, 0xc6, 0x07, 0x18, 0xc6, 0x7f, 0xde, 0x47, 0x8e, 0x3f, 0x28, 0x9e, 0x04, 0x06, 0xcf, 0xa5, 0x54, 0x34, 0x77, 0xbd, 0xec, 0x89, 0x9b, 0xe9, 0x17, 0x43, 0xdf, 0x5b, 0xdb, 0x5f, 0xfe, 0x8e, 0x1e, 0x57, 0xa2, 0xcd, 0x40, 0x9d, 0x7e, 0x62, 0x22, 0xda, 0xde, 0x18, 0x27, 0x30, 0x82, 0x04, 0x63, 0x30, 0x82, 0x03, 0x4b, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x01, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0xd2, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x54, 0x52, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x0f, 0x47, 0x65, 0x62, 0x7a, 0x65, 0x20, 0x2d, 0x20, 0x4b, 0x6f, 0x63, 0x61, 0x65, 0x6c, 0x69, 0x31, 0x42, 0x30, 0x40, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x39, 0x54, 0x75, 0x72, 0x6b, 0x69, 0x79, 0x65, 0x20, 0x42, 0x69, 0x6c, 0x69, 0x6d, 0x73, 0x65, 0x6c, 0x20, 0x76, 0x65, 0x20, 0x54, 0x65, 0x6b, 0x6e, 0x6f, 0x6c, 0x6f, 0x6a, 0x69, 0x6b, 0x20, 0x41, 0x72, 0x61, 0x73, 0x74, 0x69, 0x72, 0x6d, 0x61, 0x20, 0x4b, 0x75, 0x72, 0x75, 0x6d, 0x75, 0x20, 0x2d, 0x20, 0x54, 0x55, 0x42, 0x49, 0x54, 0x41, 0x4b, 0x31, 0x2d, 0x30, 0x2b, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x24, 0x4b, 0x61, 0x6d, 0x75, 0x20, 0x53, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x6b, 0x61, 0x73, 0x79, 0x6f, 0x6e, 0x20, 0x4d, 0x65, 0x72, 0x6b, 0x65, 0x7a, 0x69, 0x20, 0x2d, 0x20, 0x4b, 0x61, 0x6d, 0x75, 0x20, 0x53, 0x4d, 0x31, 0x36, 0x30, 0x34, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x2d, 0x54, 0x55, 0x42, 0x49, 0x54, 0x41, 0x4b, 0x20, 0x4b, 0x61, 0x6d, 0x75, 0x20, 0x53, 0x4d, 0x20, 0x53, 0x53, 0x4c, 0x20, 0x4b, 0x6f, 0x6b, 0x20, 0x53, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x6b, 0x61, 0x73, 0x69, 0x20, 0x2d, 0x20, 0x53, 0x75, 0x72, 0x75, 0x6d, 0x20, 0x31, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x33, 0x31, 0x31, 0x32, 0x35, 0x30, 0x38, 0x32, 0x35, 0x35, 0x35, 0x5a, 0x17, 0x0d, 0x34, 0x33, 0x31, 0x30, 0x32, 0x35, 0x30, 0x38, 0x32, 0x35, 0x35, 0x35, 0x5a, 0x30, 0x81, 0xd2, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x54, 0x52, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x0f, 0x47, 0x65, 0x62, 0x7a, 0x65, 0x20, 0x2d, 0x20, 0x4b, 0x6f, 0x63, 0x61, 0x65, 0x6c, 0x69, 0x31, 0x42, 0x30, 0x40, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x39, 0x54, 0x75, 0x72, 0x6b, 0x69, 0x79, 0x65, 0x20, 0x42, 0x69, 0x6c, 0x69, 0x6d, 0x73, 0x65, 0x6c, 0x20, 0x76, 0x65, 0x20, 0x54, 0x65, 0x6b, 0x6e, 0x6f, 0x6c, 0x6f, 0x6a, 0x69, 0x6b, 0x20, 0x41, 0x72, 0x61, 0x73, 0x74, 0x69, 0x72, 0x6d, 0x61, 0x20, 0x4b, 0x75, 0x72, 0x75, 0x6d, 0x75, 0x20, 0x2d, 0x20, 0x54, 0x55, 0x42, 0x49, 0x54, 0x41, 0x4b, 0x31, 0x2d, 0x30, 0x2b, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x24, 0x4b, 0x61, 0x6d, 0x75, 0x20, 0x53, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x6b, 0x61, 0x73, 0x79, 0x6f, 0x6e, 0x20, 0x4d, 0x65, 0x72, 0x6b, 0x65, 0x7a, 0x69, 0x20, 0x2d, 0x20, 0x4b, 0x61, 0x6d, 0x75, 0x20, 0x53, 0x4d, 0x31, 0x36, 0x30, 0x34, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x2d, 0x54, 0x55, 0x42, 0x49, 0x54, 0x41, 0x4b, 0x20, 0x4b, 0x61, 0x6d, 0x75, 0x20, 0x53, 0x4d, 0x20, 0x53, 0x53, 0x4c, 0x20, 0x4b, 0x6f, 0x6b, 0x20, 0x53, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x6b, 0x61, 0x73, 0x69, 0x20, 0x2d, 0x20, 0x53, 0x75, 0x72, 0x75, 0x6d, 0x20, 0x31, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xaf, 0x75, 0x30, 0x33, 0xaa, 0xbb, 0x6b, 0xd3, 0x99, 0x2c, 0x12, 0x37, 0x84, 0xd9, 0x8d, 0x7b, 0x97, 0x80, 0xd3, 0x6e, 0xe7, 0xff, 0x9b, 0x50, 0x95, 0x3e, 0x90, 0x95, 0x56, 0x42, 0xd7, 0x19, 0x7c, 0x26, 0x84, 0x8d, 0x92, 0xfa, 0x01, 0x1d, 0x3a, 0x0f, 0xe2, 0x64, 0x38, 0xb7, 0x8c, 0xbc, 0xe8, 0x88, 0xf9, 0x8b, 0x24, 0xab, 0x2e, 0xa3, 0xf5, 0x37, 0xe4, 0x40, 0x8e, 0x18, 0x25, 0x79, 0x83, 0x75, 0x1f, 0x3b, 0xff, 0x6c, 0xa8, 0xc5, 0xc6, 0x56, 0xf8, 0xb4, 0xed, 0x8a, 0x44, 0xa3, 0xab, 0x6c, 0x4c, 0xfc, 0x1d, 0xd0, 0xdc, 0xef, 0x68, 0xbd, 0xcf, 0xe4, 0xaa, 0xce, 0xf0, 0x55, 0xf7, 0xa2, 0x34, 0xd4, 0x83, 0x6b, 0x37, 0x7c, 0x1c, 0xc2, 0xfe, 0xb5, 0x03, 0xec, 0x57, 0xce, 0xbc, 0xb4, 0xb5, 0xc5, 0xed, 0x00, 0x0f, 0x53, 0x37, 0x2a, 0x4d, 0xf4, 0x4f, 0x0c, 0x83, 0xfb, 0x86, 0xcf, 0xcb, 0xfe, 0x8c, 0x4e, 0xbd, 0x87, 0xf9, 0xa7, 0x8b, 0x21, 0x57, 0x9c, 0x7a, 0xdf, 0x03, 0x67, 0x89, 0x2c, 0x9d, 0x97, 0x61, 0xa7, 0x10, 0xb8, 0x55, 0x90, 0x7f, 0x0e, 0x2d, 0x27, 0x38, 0x74, 0xdf, 0xe7, 0xfd, 0xda, 0x4e, 0x12, 0xe3, 0x4d, 0x15, 0x22, 0x02, 0xc8, 0xe0, 0xe0, 0xfc, 0x0f, 0xad, 0x8a, 0xd7, 0xc9, 0x54, 0x50, 0xcc, 0x3b, 0x0f, 0xca, 0x16, 0x80, 0x84, 0xd0, 0x51, 0x56, 0xc3, 0x8e, 0x56, 0x7f, 0x89, 0x22, 0x33, 0x2f, 0xe6, 0x85, 0x0a, 0xbd, 0xa5, 0xa8, 0x1b, 0x36, 0xde, 0xd3, 0xdc, 0x2c, 0x6d, 0x3b, 0xc7, 0x13, 0xbd, 0x59, 0x23, 0x2c, 0xe6, 0xe5, 0xa4, 0xf7, 0xd8, 0x0b, 0xed, 0xea, 0x90, 0x40, 0x44, 0xa8, 0x95, 0xbb, 0x93, 0xd5, 0xd0, 0x80, 0x34, 0xb6, 0x46, 0x78, 0x0e, 0x1f, 0x00, 0x93, 0x46, 0xe1, 0xee, 0xe9, 0xf9, 0xec, 0x4f, 0x17, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x65, 0x3f, 0xc7, 0x8a, 0x86, 0xc6, 0x3c, 0xdd, 0x3c, 0x54, 0x5c, 0x35, 0xf8, 0x3a, 0xed, 0x52, 0x0c, 0x47, 0x57, 0xc8, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x2a, 0x3f, 0xe1, 0xf1, 0x32, 0x8e, 0xae, 0xe1, 0x98, 0x5c, 0x4b, 0x5e, 0xcf, 0x6b, 0x1e, 0x6a, 0x09, 0xd2, 0x22, 0xa9, 0x12, 0xc7, 0x5e, 0x57, 0x7d, 0x73, 0x56, 0x64, 0x80, 0x84, 0x7a, 0x93, 0xe4, 0x09, 0xb9, 0x10, 0xcd, 0x9f, 0x2a, 0x27, 0xe1, 0x00, 0x77, 0xbe, 0x48, 0xc8, 0x35, 0xa8, 0x81, 0x9f, 0xe4, 0xb8, 0x2c, 0xc9, 0x7f, 0x0e, 0xb0, 0xd2, 0x4b, 0x37, 0x5d, 0xea, 0xb9, 0xd5, 0x0b, 0x5e, 0x34, 0xbd, 0xf4, 0x73, 0x29, 0xc3, 0xed, 0x26, 0x15, 0x9c, 0x7e, 0x08, 0x53, 0x8a, 0x58, 0x8d, 0xd0, 0x4b, 0x28, 0xdf, 0xc1, 0xb3, 0xdf, 0x20, 0xf3, 0xf9, 0xe3, 0xe3, 0x3a, 0xdf, 0xcc, 0x9c, 0x94, 0xd8, 0x4e, 0x4f, 0xc3, 0x6b, 0x17, 0xb7, 0xf7, 0x72, 0xe8, 0xad, 0x66, 0x33, 0xb5, 0x25, 0x53, 0xab, 0xe0, 0xf8, 0x4c, 0xa9, 0x9d, 0xfd, 0xf2, 0x0d, 0xba, 0xae, 0xb9, 0xd9, 0xaa, 0xc6, 0x6b, 0xf9, 0x93, 0xbb, 0xae, 0xab, 0xb8, 0x97, 0x3c, 0x03, 0x1a, 0xba, 0x43, 0xc6, 0x96, 0xb9, 0x45, 0x72, 0x38, 0xb3, 0xa7, 0xa1, 0x96, 0x3d, 0x91, 0x7b, 0x7e, 0xc0, 0x21, 0x53, 0x4c, 0x87, 0xed, 0xf2, 0x0b, 0x54, 0x95, 0x51, 0x93, 0xd5, 0x22, 0xa5, 0x0d, 0x8a, 0xf1, 0x93, 0x0e, 0x3e, 0x54, 0x0e, 0xb0, 0xd8, 0xc9, 0x4e, 0xdc, 0xf2, 0x31, 0x32, 0x56, 0xea, 0x64, 0xf9, 0xea, 0xb5, 0x9d, 0x16, 0x66, 0x42, 0x72, 0xf3, 0x7f, 0xd3, 0xb1, 0x31, 0x43, 0xfc, 0xa4, 0x8e, 0x17, 0xf1, 0x6d, 0x23, 0xab, 0x94, 0x66, 0xf8, 0xad, 0xfb, 0x0f, 0x08, 0x6e, 0x26, 0x2d, 0x7f, 0x17, 0x07, 0x09, 0xb2, 0x8c, 0xfb, 0x50, 0xc0, 0x9f, 0x96, 0x8d, 0xcf, 0xb6, 0xfd, 0x00, 0x9d, 0x5a, 0x14, 0x9a, 0xbf, 0x02, 0x44, 0xf5, 0xc1, 0xc2, 0x9f, 0x22, 0x5e, 0xa2, 0x0f, 0xa1, 0xe3, 0x30, 0x82, 0x01, 0xb6, 0x30, 0x82, 0x01, 0x5b, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x13, 0x06, 0x6c, 0x9f, 0xd5, 0x74, 0x97, 0x36, 0x66, 0x3f, 0x3b, 0x0b, 0x9a, 0xd9, 0xe8, 0x9e, 0x76, 0x03, 0xf2, 0x4a, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x30, 0x39, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x06, 0x41, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x10, 0x41, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x33, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x35, 0x30, 0x35, 0x32, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x34, 0x30, 0x30, 0x35, 0x32, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x39, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x06, 0x41, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x10, 0x41, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x33, 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0x29, 0x97, 0xa7, 0xc6, 0x41, 0x7f, 0xc0, 0x0d, 0x9b, 0xe8, 0x01, 0x1b, 0x56, 0xc6, 0xf2, 0x52, 0xa5, 0xba, 0x2d, 0xb2, 0x12, 0xe8, 0xd2, 0x2e, 0xd7, 0xfa, 0xc9, 0xc5, 0xd8, 0xaa, 0x6d, 0x1f, 0x73, 0x81, 0x3b, 0x3b, 0x98, 0x6b, 0x39, 0x7c, 0x33, 0xa5, 0xc5, 0x4e, 0x86, 0x8e, 0x80, 0x17, 0x68, 0x62, 0x45, 0x57, 0x7d, 0x44, 0x58, 0x1d, 0xb3, 0x37, 0xe5, 0x67, 0x08, 0xeb, 0x66, 0xde, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xab, 0xb6, 0xdb, 0xd7, 0x06, 0x9e, 0x37, 0xac, 0x30, 0x86, 0x07, 0x91, 0x70, 0xc7, 0x9c, 0xc4, 0x19, 0xb1, 0x78, 0xc0, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x03, 0x49, 0x00, 0x30, 0x46, 0x02, 0x21, 0x00, 0xe0, 0x85, 0x92, 0xa3, 0x17, 0xb7, 0x8d, 0xf9, 0x2b, 0x06, 0xa5, 0x93, 0xac, 0x1a, 0x98, 0x68, 0x61, 0x72, 0xfa, 0xe1, 0xa1, 0xd0, 0xfb, 0x1c, 0x78, 0x60, 0xa6, 0x43, 0x99, 0xc5, 0xb8, 0xc4, 0x02, 0x21, 0x00, 0x9c, 0x02, 0xef, 0xf1, 0x94, 0x9c, 0xb3, 0x96, 0xf9, 0xeb, 0xc6, 0x2a, 0xf8, 0xb6, 0x2c, 0xfe, 0x3a, 0x90, 0x14, 0x16, 0xd7, 0x8c, 0x63, 0x24, 0x48, 0x1c, 0xdf, 0x30, 0x7d, 0xd5, 0x68, 0x3b, 0x30, 0x82, 0x05, 0x88, 0x30, 0x82, 0x03, 0x70, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x7d, 0x09, 0x97, 0xfe, 0xf0, 0x47, 0xea, 0x7a, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x62, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x4e, 0x31, 0x32, 0x30, 0x30, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x29, 0x47, 0x55, 0x41, 0x4e, 0x47, 0x20, 0x44, 0x4f, 0x4e, 0x47, 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x20, 0x41, 0x55, 0x54, 0x48, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x20, 0x43, 0x4f, 0x2e, 0x2c, 0x4c, 0x54, 0x44, 0x2e, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x16, 0x47, 0x44, 0x43, 0x41, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x41, 0x55, 0x54, 0x48, 0x20, 0x52, 0x35, 0x20, 0x52, 0x4f, 0x4f, 0x54, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x34, 0x31, 0x31, 0x32, 0x36, 0x30, 0x35, 0x31, 0x33, 0x31, 0x35, 0x5a, 0x17, 0x0d, 0x34, 0x30, 0x31, 0x32, 0x33, 0x31, 0x31, 0x35, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30, 0x62, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x4e, 0x31, 0x32, 0x30, 0x30, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x29, 0x47, 0x55, 0x41, 0x4e, 0x47, 0x20, 0x44, 0x4f, 0x4e, 0x47, 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x20, 0x41, 0x55, 0x54, 0x48, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x20, 0x43, 0x4f, 0x2e, 0x2c, 0x4c, 0x54, 0x44, 0x2e, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x16, 0x47, 0x44, 0x43, 0x41, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x41, 0x55, 0x54, 0x48, 0x20, 0x52, 0x35, 0x20, 0x52, 0x4f, 0x4f, 0x54, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xd9, 0xa3, 0x16, 0xf0, 0xc8, 0x74, 0x74, 0x77, 0x9b, 0xef, 0x33, 0x0d, 0x3b, 0x06, 0x7e, 0x55, 0xfc, 0xb5, 0x60, 0x8f, 0x76, 0x86, 0x12, 0x42, 0x7d, 0x56, 0x66, 0x3e, 0x88, 0x82, 0xed, 0x72, 0x63, 0x0e, 0x9e, 0x8b, 0xdd, 0x34, 0x2c, 0x02, 0x51, 0x51, 0xc3, 0x19, 0xfd, 0x59, 0x54, 0x84, 0xc9, 0xf1, 0x6b, 0xb3, 0x4c, 0xb0, 0xe9, 0xe8, 0x46, 0x5d, 0x38, 0xc6, 0xa2, 0xa7, 0x2e, 0x11, 0x57, 0xba, 0x82, 0x15, 0xa2, 0x9c, 0x8f, 0x6d, 0xb0, 0x99, 0x4a, 0x0a, 0xf2, 0xeb, 0x89, 0x70, 0x63, 0x4e, 0x79, 0xc4, 0xb7, 0x5b, 0xbd, 0xa2, 0x5d, 0xb1, 0xf2, 0x41, 0x02, 0x2b, 0xad, 0xa9, 0x3a, 0xa3, 0xec, 0x79, 0x0a, 0xec, 0x5f, 0x3a, 0xe3, 0xfd, 0xef, 0x80, 0x3c, 0xad, 0x34, 0x9b, 0x1a, 0xab, 0x88, 0x26, 0x7b, 0x56, 0xa2, 0x82, 0x86, 0x1f, 0xeb, 0x35, 0x89, 0x83, 0x7f, 0x5f, 0xae, 0x29, 0x4e, 0x3d, 0xb6, 0x6e, 0xec, 0xae, 0xc1, 0xf0, 0x27, 0x9b, 0xae, 0xe3, 0xf4, 0xec, 0xef, 0xae, 0x7f, 0xf7, 0x86, 0x3d, 0x72, 0x7a, 0xeb, 0xa5, 0xfb, 0x59, 0x4e, 0xa7, 0xeb, 0x95, 0x8c, 0x22, 0x39, 0x79, 0xe1, 0x2d, 0x08, 0x8f, 0xcc, 0xbc, 0x91, 0xb8, 0x41, 0xf7, 0x14, 0xc1, 0x23, 0xa9, 0xc3, 0xad, 0x9a, 0x45, 0x44, 0xb3, 0xb2, 0xd7, 0x2c, 0xcd, 0xc6, 0x29, 0xe2, 0x50, 0x10, 0xae, 0x5c, 0xcb, 0x82, 0x8e, 0x17, 0x18, 0x36, 0x7d, 0x97, 0xe6, 0x88, 0x9a, 0xb0, 0x4d, 0x34, 0x09, 0xf4, 0x2c, 0xb9, 0x5a, 0x66, 0x2a, 0xb0, 0x17, 0x9b, 0x9e, 0x1e, 0x76, 0x9d, 0x4a, 0x66, 0x31, 0x41, 0xdf, 0x3f, 0xfb, 0xc5, 0x06, 0xef, 0x1b, 0xb6, 0x7e, 0x1a, 0x46, 0x36, 0xf7, 0x64, 0x63, 0x3b, 0xe3, 0x39, 0x18, 0x23, 0xe7, 0x67, 0x75, 0x14, 0xd5, 0x75, 0x57, 0x92, 0x37, 0xbd, 0xbe, 0x6a, 0x1b, 0x26, 0x50, 0xf2, 0x36, 0x26, 0x06, 0x90, 0xc5, 0x70, 0x01, 0x64, 0x6d, 0x76, 0x66, 0xe1, 0x91, 0xdb, 0x6e, 0x07, 0xc0, 0x61, 0x80, 0x2e, 0xb2, 0x2e, 0x2f, 0x8c, 0x70, 0xa7, 0xd1, 0x3b, 0x3c, 0xb3, 0x91, 0xe4, 0x6e, 0xb6, 0xc4, 0x3b, 0x70, 0xf2, 0x6c, 0x92, 0x97, 0x09, 0xcd, 0x47, 0x7d, 0x18, 0xc0, 0xf3, 0xbb, 0x9e, 0x0f, 0xd6, 0x8b, 0xae, 0x07, 0xb6, 0x5a, 0x0f, 0xce, 0x0b, 0x0c, 0x47, 0xa7, 0xe5, 0x3e, 0xb8, 0xbd, 0x7d, 0xc7, 0x9b, 0x35, 0xa0, 0x61, 0x97, 0x3a, 0x41, 0x75, 0x17, 0xcc, 0x2b, 0x96, 0x77, 0x2a, 0x92, 0x21, 0x1e, 0xd9, 0x95, 0x76, 0x20, 0x67, 0x68, 0xcf, 0x0d, 0xbd, 0xdf, 0xd6, 0x1f, 0x09, 0x6a, 0x9a, 0xe2, 0xcc, 0x73, 0x71, 0xa4, 0x2f, 0x7d, 0x12, 0x80, 0xb7, 0x53, 0x30, 0x46, 0x5e, 0x4b, 0x54, 0x99, 0x0f, 0x67, 0xc9, 0xa5, 0xc8, 0xf2, 0x20, 0xc1, 0x82, 0xec, 0x9d, 0x11, 0xdf, 0xc2, 0x02, 0xfb, 0x1a, 0x3b, 0xd1, 0xed, 0x20, 0x9a, 0xef, 0x65, 0x64, 0x92, 0x10, 0x0d, 0x2a, 0xe2, 0xde, 0x70, 0xf1, 0x18, 0x67, 0x82, 0x8c, 0x61, 0xde, 0xb8, 0xbc, 0xd1, 0x2f, 0x9c, 0xfb, 0x0f, 0xd0, 0x2b, 0xed, 0x1b, 0x76, 0xb9, 0xe4, 0x39, 0x55, 0xf8, 0xf8, 0xa1, 0x1d, 0xb8, 0xaa, 0x80, 0x00, 0x4c, 0x82, 0xe7, 0xb2, 0x7f, 0x09, 0xb8, 0xbc, 0x30, 0xa0, 0x2f, 0x0d, 0xf5, 0x52, 0x9e, 0x8e, 0xf7, 0x92, 0xb3, 0x0a, 0x00, 0x1d, 0x00, 0x54, 0x97, 0x06, 0xe0, 0xb1, 0x07, 0xd9, 0xc7, 0x0f, 0x5c, 0x65, 0x7d, 0x3c, 0x6d, 0x59, 0x57, 0xe4, 0xed, 0xa5, 0x8d, 0xe9, 0x40, 0x53, 0x9f, 0x15, 0x4b, 0xa0, 0x71, 0xf6, 0x1a, 0x21, 0xe3, 0xda, 0x70, 0x06, 0x21, 0x58, 0x14, 0x87, 0x85, 0x77, 0x79, 0xaa, 0x82, 0x79, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xe2, 0xc9, 0x40, 0x9f, 0x4d, 0xce, 0xe8, 0x9a, 0xa1, 0x7c, 0xcf, 0x0e, 0x3f, 0x65, 0xc5, 0x29, 0x88, 0x6a, 0x19, 0x51, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0xd1, 0x49, 0x57, 0xe0, 0xa7, 0xcc, 0x68, 0x58, 0xba, 0x01, 0x0f, 0x2b, 0x19, 0xcd, 0x8d, 0xb0, 0x61, 0x45, 0xac, 0x11, 0xed, 0x63, 0x50, 0x69, 0xf8, 0x1f, 0x7f, 0xbe, 0x16, 0x8f, 0xfd, 0x9d, 0xeb, 0x0b, 0xaa, 0x32, 0x47, 0x76, 0xd2, 0x67, 0x24, 0xed, 0xbd, 0x7c, 0x33, 0x32, 0x97, 0x2a, 0xc7, 0x05, 0x86, 0x66, 0x0d, 0x17, 0x7d, 0x14, 0x15, 0x1b, 0xd4, 0xeb, 0xfd, 0x1f, 0x9a, 0xf6, 0x5e, 0x97, 0x69, 0xb7, 0x1a, 0x25, 0xa4, 0x0a, 0xb3, 0x91, 0x3f, 0x5f, 0x36, 0xac, 0x8b, 0xec, 0x57, 0xa8, 0x3e, 0xe7, 0x81, 0x8a, 0x18, 0x57, 0x39, 0x85, 0x74, 0x1a, 0x42, 0xc7, 0xe9, 0x5b, 0x13, 0x5f, 0x8f, 0xf9, 0x08, 0xe9, 0x92, 0x74, 0x8d, 0xf5, 0x47, 0xd2, 0xab, 0x3b, 0xd6, 0xfb, 0x78, 0x66, 0x4e, 0x36, 0x7d, 0xf9, 0xe9, 0x92, 0xe9, 0x04, 0xde, 0xfd, 0x49, 0x63, 0xfc, 0x6d, 0xfb, 0x14, 0x71, 0x93, 0x67, 0x2f, 0x47, 0x4a, 0xb7, 0xb9, 0xff, 0x1e, 0x2a, 0x73, 0x70, 0x46, 0x30, 0xbf, 0x5a, 0xf2, 0x2f, 0x79, 0xa5, 0xe1, 0x8d, 0x0c, 0xd9, 0xf9, 0xb2, 0x63, 0x37, 0x8c, 0x37, 0x65, 0x85, 0x70, 0x6a, 0x5c, 0x5b, 0x09, 0x72, 0xb9, 0xad, 0x63, 0x3c, 0xb1, 0xdd, 0xf8, 0xfc, 0x32, 0xbf, 0x37, 0x86, 0xe4, 0xbb, 0x8e, 0x98, 0x27, 0x7e, 0xba, 0x1f, 0x16, 0xe1, 0x70, 0x11, 0xf2, 0x03, 0xdf, 0x25, 0x62, 0x32, 0x27, 0x26, 0x18, 0x32, 0x84, 0x9f, 0xff, 0x00, 0x3a, 0x13, 0xba, 0x9a, 0x4d, 0xf4, 0x4f, 0xb8, 0x14, 0x70, 0x22, 0xb1, 0xca, 0x2b, 0x90, 0xce, 0x29, 0xc1, 0x70, 0xf4, 0x2f, 0x9d, 0x7f, 0xf2, 0x90, 0x1e, 0xd6, 0x5a, 0xdf, 0xb7, 0x46, 0xfc, 0xe6, 0x86, 0xfa, 0xcb, 0xe0, 0x20, 0x76, 0x7a, 0xba, 0xa6, 0xcb, 0xf5, 0x7c, 0xde, 0x62, 0xa5, 0xb1, 0x8b, 0xee, 0xde, 0x82, 0x66, 0x8a, 0x4e, 0x3a, 0x30, 0x1f, 0x3f, 0x80, 0xcb, 0xad, 0x27, 0xba, 0x0c, 0x5e, 0xd7, 0xd0, 0xb1, 0x56, 0xca, 0x77, 0x71, 0xb2, 0xb5, 0x75, 0xa1, 0x50, 0xa9, 0x40, 0x43, 0x17, 0xc2, 0x28, 0xd9, 0xcf, 0x52, 0x8b, 0x5b, 0xc8, 0x63, 0xd4, 0x42, 0x3e, 0xa0, 0x33, 0x7a, 0x46, 0x2e, 0xf7, 0x0a, 0x20, 0x46, 0x54, 0x7e, 0x6a, 0x4f, 0x31, 0xf1, 0x81, 0x7e, 0x42, 0x74, 0x38, 0x65, 0x73, 0x27, 0xee, 0xc6, 0x7c, 0xb8, 0x8e, 0xd7, 0xa5, 0x3a, 0xd7, 0x98, 0xa1, 0x9c, 0x8c, 0x10, 0x55, 0xd3, 0xdb, 0x4b, 0xec, 0x40, 0x90, 0xf2, 0xcd, 0x6e, 0x57, 0xd2, 0x62, 0x0e, 0x7c, 0x57, 0x93, 0xb1, 0xa7, 0x6d, 0xcd, 0x9d, 0x83, 0xbb, 0x2a, 0xe7, 0xe5, 0xb6, 0x3b, 0x71, 0x58, 0xad, 0xfd, 0xd1, 0x45, 0xbc, 0x5a, 0x91, 0xee, 0x53, 0x15, 0x6f, 0xd3, 0x45, 0x09, 0x75, 0x6e, 0xba, 0x90, 0x5d, 0x1e, 0x04, 0xcf, 0x37, 0xdf, 0x1e, 0xa8, 0x66, 0xb1, 0x8c, 0xe6, 0x20, 0x6a, 0xef, 0xfc, 0x48, 0x4e, 0x74, 0x98, 0x42, 0xaf, 0x29, 0x6f, 0x2e, 0x6a, 0xc7, 0xfb, 0x7d, 0xd1, 0x66, 0x31, 0x22, 0xcc, 0x86, 0x00, 0x7e, 0x66, 0x83, 0x0c, 0x42, 0xf4, 0xbd, 0x34, 0x92, 0xc3, 0x1a, 0xea, 0x4f, 0xca, 0x7e, 0x72, 0x4d, 0x0b, 0x70, 0x8c, 0xa6, 0x48, 0xbb, 0xa6, 0xa1, 0x14, 0xf6, 0xfb, 0x58, 0x44, 0x99, 0x14, 0xae, 0xaa, 0x0b, 0x93, 0x69, 0xa0, 0x29, 0x25, 0x4a, 0xa5, 0xcb, 0x2b, 0xdd, 0x8a, 0x66, 0x07, 0x16, 0x78, 0x15, 0x57, 0x71, 0x1b, 0xec, 0xf5, 0x47, 0x84, 0xf3, 0x9e, 0x31, 0x37, 0x7a, 0xd5, 0x7f, 0x24, 0xad, 0xe4, 0xbc, 0xfd, 0xfd, 0xcc, 0x6e, 0x83, 0xe8, 0x0c, 0xa8, 0xb7, 0x41, 0x6c, 0x07, 0xdd, 0xbd, 0x3c, 0x86, 0x97, 0x2f, 0xd2, 0x30, 0x82, 0x05, 0x41, 0x30, 0x82, 0x03, 0x29, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x13, 0x06, 0x6c, 0x9f, 0xd2, 0x96, 0x35, 0x86, 0x9f, 0x0a, 0x0f, 0xe5, 0x86, 0x78, 0xf8, 0x5b, 0x26, 0xbb, 0x8a, 0x37, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0c, 0x05, 0x00, 0x30, 0x39, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x06, 0x41, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x10, 0x41, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x32, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x35, 0x30, 0x35, 0x32, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x34, 0x30, 0x30, 0x35, 0x32, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x39, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x06, 0x41, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x10, 0x41, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x32, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xad, 0x96, 0x9f, 0x2d, 0x9c, 0x4a, 0x4c, 0x4a, 0x81, 0x79, 0x51, 0x99, 0xec, 0x8a, 0xcb, 0x6b, 0x60, 0x51, 0x13, 0xbc, 0x4d, 0x6d, 0x06, 0xfc, 0xb0, 0x08, 0x8d, 0xdd, 0x19, 0x10, 0x6a, 0xc7, 0x26, 0x0c, 0x35, 0xd8, 0xc0, 0x6f, 0x20, 0x84, 0xe9, 0x94, 0xb1, 0x9b, 0x85, 0x03, 0xc3, 0x5b, 0xdb, 0x4a, 0xe8, 0xc8, 0xf8, 0x90, 0x76, 0xd9, 0x5b, 0x4f, 0xe3, 0x4c, 0xe8, 0x06, 0x36, 0x4d, 0xcc, 0x9a, 0xac, 0x3d, 0x0c, 0x90, 0x2b, 0x92, 0xd4, 0x06, 0x19, 0x60, 0xac, 0x37, 0x44, 0x79, 0x85, 0x81, 0x82, 0xad, 0x5a, 0x37, 0xe0, 0x0d, 0xcc, 0x9d, 0xa6, 0x4c, 0x52, 0x76, 0xea, 0x43, 0x9d, 0xb7, 0x04, 0xd1, 0x50, 0xf6, 0x55, 0xe0, 0xd5, 0xd2, 0xa6, 0x49, 0x85, 0xe9, 0x37, 0xe9, 0xca, 0x7e, 0xae, 0x5c, 0x95, 0x4d, 0x48, 0x9a, 0x3f, 0xae, 0x20, 0x5a, 0x6d, 0x88, 0x95, 0xd9, 0x34, 0xb8, 0x52, 0x1a, 0x43, 0x90, 0xb0, 0xbf, 0x6c, 0x05, 0xb9, 0xb6, 0x78, 0xb7, 0xea, 0xd0, 0xe4, 0x3a, 0x3c, 0x12, 0x53, 0x62, 0xff, 0x4a, 0xf2, 0x7b, 0xbe, 0x35, 0x05, 0xa9, 0x12, 0x34, 0xe3, 0xf3, 0x64, 0x74, 0x62, 0x2c, 0x3d, 0x00, 0x49, 0x5a, 0x28, 0xfe, 0x32, 0x44, 0xbb, 0x87, 0xdd, 0x65, 0x27, 0x02, 0x71, 0x3b, 0xda, 0x4a, 0xf7, 0x1f, 0xda, 0xcd, 0xf7, 0x21, 0x55, 0x90, 0x4f, 0x0f, 0xec, 0xae, 0x82, 0xe1, 0x9f, 0x6b, 0xd9, 0x45, 0xd3, 0xbb, 0xf0, 0x5f, 0x87, 0xed, 0x3c, 0x2c, 0x39, 0x86, 0xda, 0x3f, 0xde, 0xec, 0x72, 0x55, 0xeb, 0x79, 0xa3, 0xad, 0xdb, 0xdd, 0x7c, 0xb0, 0xba, 0x1c, 0xce, 0xfc, 0xde, 0x4f, 0x35, 0x76, 0xcf, 0x0f, 0xf8, 0x78, 0x1f, 0x6a, 0x36, 0x51, 0x46, 0x27, 0x61, 0x5b, 0xe9, 0x9e, 0xcf, 0xf0, 0xa2, 0x55, 0x7d, 0x7c, 0x25, 0x8a, 0x6f, 0x2f, 0xb4, 0xc5, 0xcf, 0x84, 0x2e, 0x2b, 0xfd, 0x0d, 0x51, 0x10, 0x6c, 0xfb, 0x5f, 0x1b, 0xbc, 0x1b, 0x7e, 0xc5, 0xae, 0x3b, 0x98, 0x01, 0x31, 0x92, 0xff, 0x0b, 0x57, 0xf4, 0x9a, 0xb2, 0xb9, 0x57, 0xe9, 0xab, 0xef, 0x0d, 0x76, 0xd1, 0xf0, 0xee, 0xf4, 0xce, 0x86, 0xa7, 0xe0, 0x6e, 0xe9, 0xb4, 0x69, 0xa1, 0xdf, 0x69, 0xf6, 0x33, 0xc6, 0x69, 0x2e, 0x97, 0x13, 0x9e, 0xa5, 0x87, 0xb0, 0x57, 0x10, 0x81, 0x37, 0xc9, 0x53, 0xb3, 0xbb, 0x7f, 0xf6, 0x92, 0xd1, 0x9c, 0xd0, 0x18, 0xf4, 0x92, 0x6e, 0xda, 0x83, 0x4f, 0xa6, 0x63, 0x99, 0x4c, 0xa5, 0xfb, 0x5e, 0xef, 0x21, 0x64, 0x7a, 0x20, 0x5f, 0x6c, 0x64, 0x85, 0x15, 0xcb, 0x37, 0xe9, 0x62, 0x0c, 0x0b, 0x2a, 0x16, 0xdc, 0x01, 0x2e, 0x32, 0xda, 0x3e, 0x4b, 0xf5, 0x9e, 0x3a, 0xf6, 0x17, 0x40, 0x94, 0xef, 0x9e, 0x91, 0x08, 0x86, 0xfa, 0xbe, 0x63, 0xa8, 0x5a, 0x33, 0xec, 0xcb, 0x74, 0x43, 0x95, 0xf9, 0x6c, 0x69, 0x52, 0x36, 0xc7, 0x29, 0x6f, 0xfc, 0x55, 0x03, 0x5c, 0x1f, 0xfb, 0x9f, 0xbd, 0x47, 0xeb, 0xe7, 0x49, 0x47, 0x95, 0x0b, 0x4e, 0x89, 0x22, 0x09, 0x49, 0xe0, 0xf5, 0x61, 0x1e, 0xf1, 0xbf, 0x2e, 0x8a, 0x72, 0x6e, 0x80, 0x59, 0xff, 0x57, 0x3a, 0xf9, 0x75, 0x32, 0xa3, 0x4e, 0x5f, 0xec, 0xed, 0x28, 0x62, 0xd9, 0x4d, 0x73, 0xf2, 0xcc, 0x81, 0x17, 0x60, 0xed, 0xcd, 0xeb, 0xdc, 0xdb, 0xa7, 0xca, 0xc5, 0x7e, 0x02, 0xbd, 0xf2, 0x54, 0x08, 0x54, 0xfd, 0xb4, 0x2d, 0x09, 0x2c, 0x17, 0x54, 0x4a, 0x98, 0xd1, 0x54, 0xe1, 0x51, 0x67, 0x08, 0xd2, 0xed, 0x6e, 0x7e, 0x6f, 0x3f, 0xd2, 0x2d, 0x81, 0x59, 0x29, 0x66, 0xcb, 0x90, 0x39, 0x95, 0x11, 0x1e, 0x74, 0x27, 0xfe, 0xdd, 0xeb, 0xaf, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xb0, 0x0c, 0xf0, 0x4c, 0x30, 0xf4, 0x05, 0x58, 0x02, 0x48, 0xfd, 0x33, 0xe5, 0x52, 0xaf, 0x4b, 0x84, 0xe3, 0x66, 0x52, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0c, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0xaa, 0xa8, 0x80, 0x8f, 0x0e, 0x78, 0xa3, 0xe0, 0xa2, 0xd4, 0xcd, 0xe6, 0xf5, 0x98, 0x7a, 0x3b, 0xea, 0x00, 0x03, 0xb0, 0x97, 0x0e, 0x93, 0xbc, 0x5a, 0xa8, 0xf6, 0x2c, 0x8c, 0x72, 0x87, 0xa9, 0xb1, 0xfc, 0x7f, 0x73, 0xfd, 0x63, 0x71, 0x78, 0xa5, 0x87, 0x59, 0xcf, 0x30, 0xe1, 0x0d, 0x10, 0xb2, 0x13, 0x5a, 0x6d, 0x82, 0xf5, 0x6a, 0xe6, 0x80, 0x9f, 0xa0, 0x05, 0x0b, 0x68, 0xe4, 0x47, 0x6b, 0xc7, 0x6a, 0xdf, 0xb6, 0xfd, 0x77, 0x32, 0x72, 0xe5, 0x18, 0xfa, 0x09, 0xf4, 0xa0, 0x93, 0x2c, 0x5d, 0xd2, 0x8c, 0x75, 0x85, 0x76, 0x65, 0x90, 0x0c, 0x03, 0x79, 0xb7, 0x31, 0x23, 0x63, 0xad, 0x78, 0x83, 0x09, 0x86, 0x68, 0x84, 0xca, 0xff, 0xf9, 0xcf, 0x26, 0x9a, 0x92, 0x79, 0xe7, 0xcd, 0x4b, 0xc5, 0xe7, 0x61, 0xa7, 0x17, 0xcb, 0xf3, 0xa9, 0x12, 0x93, 0x93, 0x6b, 0xa7, 0xe8, 0x2f, 0x53, 0x92, 0xc4, 0x60, 0x58, 0xb0, 0xcc, 0x02, 0x51, 0x18, 0x5b, 0x85, 0x8d, 0x62, 0x59, 0x63, 0xb6, 0xad, 0xb4, 0xde, 0x9a, 0xfb, 0x26, 0xf7, 0x00, 0x27, 0xc0, 0x5d, 0x55, 0x37, 0x74, 0x99, 0xc9, 0x50, 0x7f, 0xe3, 0x59, 0x2e, 0x44, 0xe3, 0x2c, 0x25, 0xee, 0xec, 0x4c, 0x32, 0x77, 0xb4, 0x9f, 0x1a, 0xe9, 0x4b, 0x5d, 0x20, 0xc5, 0xda, 0xfd, 0x1c, 0x87, 0x16, 0xc6, 0x43, 0xe8, 0xd4, 0xbb, 0x26, 0x9a, 0x45, 0x70, 0x5e, 0xa9, 0x0b, 0x37, 0x53, 0xe2, 0x46, 0x7b, 0x27, 0xfd, 0xe0, 0x46, 0xf2, 0x89, 0xb7, 0xcc, 0x42, 0xb6, 0xcb, 0x28, 0x26, 0x6e, 0xd9, 0xa5, 0xc9, 0x3a, 0xc8, 0x41, 0x13, 0x60, 0xf7, 0x50, 0x8c, 0x15, 0xae, 0xb2, 0x6d, 0x1a, 0x15, 0x1a, 0x57, 0x78, 0xe6, 0x92, 0x2a, 0xd9, 0x65, 0x90, 0x82, 0x3f, 0x6c, 0x02, 0xaf, 0xae, 0x12, 0x3a, 0x27, 0x96, 0x36, 0x04, 0xd7, 0x1d, 0xa2, 0x80, 0x63, 0xa9, 0x9b, 0xf1, 0xe5, 0xba, 0xb4, 0x7c, 0x14, 0xb0, 0x4e, 0xc9, 0xb1, 0x1f, 0x74, 0x5f, 0x38, 0xf6, 0x51, 0xea, 0x9b, 0xfa, 0x2c, 0xa2, 0x11, 0xd4, 0xa9, 0x2d, 0x27, 0x1a, 0x45, 0xb1, 0xaf, 0xb2, 0x4e, 0x71, 0x0d, 0xc0, 0x58, 0x46, 0xd6, 0x69, 0x06, 0xcb, 0x53, 0xcb, 0xb3, 0xfe, 0x6b, 0x41, 0xcd, 0x41, 0x7e, 0x7d, 0x4c, 0x0f, 0x7c, 0x72, 0x79, 0x7a, 0x59, 0xcd, 0x5e, 0x4a, 0x0e, 0xac, 0x9b, 0xa9, 0x98, 0x73, 0x79, 0x7c, 0xb4, 0xf4, 0xcc, 0xb9, 0xb8, 0x07, 0x0c, 0xb2, 0x74, 0x5c, 0xb8, 0xc7, 0x6f, 0x88, 0xa1, 0x90, 0xa7, 0xf4, 0xaa, 0xf9, 0xbf, 0x67, 0x3a, 0xf4, 0x1a, 0x15, 0x62, 0x1e, 0xb7, 0x9f, 0xbe, 0x3d, 0xb1, 0x29, 0xaf, 0x67, 0xa1, 0x12, 0xf2, 0x58, 0x10, 0x19, 0x53, 0x03, 0x30, 0x1b, 0xb8, 0x1a, 0x89, 0xf6, 0x9c, 0xbd, 0x97, 0x03, 0x8e, 0xa3, 0x09, 0xf3, 0x1d, 0x8b, 0x21, 0xf1, 0xb4, 0xdf, 0xe4, 0x1c, 0xd1, 0x9f, 0x65, 0x02, 0x06, 0xea, 0x5c, 0xd6, 0x13, 0xb3, 0x84, 0xef, 0xa2, 0xa5, 0x5c, 0x8c, 0x77, 0x29, 0xa7, 0x68, 0xc0, 0x6b, 0xae, 0x40, 0xd2, 0xa8, 0xb4, 0xea, 0xcd, 0xf0, 0x8d, 0x4b, 0x38, 0x9c, 0x19, 0x9a, 0x1b, 0x28, 0x54, 0xb8, 0x89, 0x90, 0xef, 0xca, 0x75, 0x81, 0x3e, 0x1e, 0xf2, 0x64, 0x24, 0xc7, 0x18, 0xaf, 0x4e, 0xff, 0x47, 0x9e, 0x07, 0xf6, 0x35, 0x65, 0xa4, 0xd3, 0x0a, 0x56, 0xff, 0xf5, 0x17, 0x64, 0x6c, 0xef, 0xa8, 0x22, 0x25, 0x49, 0x93, 0xb6, 0xdf, 0x00, 0x17, 0xda, 0x58, 0x7e, 0x5d, 0xee, 0xc5, 0x1b, 0xb0, 0xd1, 0xd1, 0x5f, 0x21, 0x10, 0xc7, 0xf9, 0xf3, 0xba, 0x02, 0x0a, 0x27, 0x07, 0xc5, 0xf1, 0xd6, 0xc7, 0xd3, 0xe0, 0xfb, 0x09, 0x60, 0x6c, 0x30, 0x82, 0x03, 0x41, 0x30, 0x82, 0x02, 0x29, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x13, 0x06, 0x6c, 0x9f, 0xcf, 0x99, 0xbf, 0x8c, 0x0a, 0x39, 0xe2, 0xf0, 0x78, 0x8a, 0x43, 0xe6, 0x96, 0x36, 0x5b, 0xca, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x39, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x06, 0x41, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x10, 0x41, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x31, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x35, 0x30, 0x35, 0x32, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x33, 0x38, 0x30, 0x31, 0x31, 0x37, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x39, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x06, 0x41, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x10, 0x41, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x31, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xb2, 0x78, 0x80, 0x71, 0xca, 0x78, 0xd5, 0xe3, 0x71, 0xaf, 0x47, 0x80, 0x50, 0x74, 0x7d, 0x6e, 0xd8, 0xd7, 0x88, 0x76, 0xf4, 0x99, 0x68, 0xf7, 0x58, 0x21, 0x60, 0xf9, 0x74, 0x84, 0x01, 0x2f, 0xac, 0x02, 0x2d, 0x86, 0xd3, 0xa0, 0x43, 0x7a, 0x4e, 0xb2, 0xa4, 0xd0, 0x36, 0xba, 0x01, 0xbe, 0x8d, 0xdb, 0x48, 0xc8, 0x07, 0x17, 0x36, 0x4c, 0xf4, 0xee, 0x88, 0x23, 0xc7, 0x3e, 0xeb, 0x37, 0xf5, 0xb5, 0x19, 0xf8, 0x49, 0x68, 0xb0, 0xde, 0xd7, 0xb9, 0x76, 0x38, 0x1d, 0x61, 0x9e, 0xa4, 0xfe, 0x82, 0x36, 0xa5, 0xe5, 0x4a, 0x56, 0xe4, 0x45, 0xe1, 0xf9, 0xfd, 0xb4, 0x16, 0xfa, 0x74, 0xda, 0x9c, 0x9b, 0x35, 0x39, 0x2f, 0xfa, 0xb0, 0x20, 0x50, 0x06, 0x6c, 0x7a, 0xd0, 0x80, 0xb2, 0xa6, 0xf9, 0xaf, 0xec, 0x47, 0x19, 0x8f, 0x50, 0x38, 0x07, 0xdc, 0xa2, 0x87, 0x39, 0x58, 0xf8, 0xba, 0xd5, 0xa9, 0xf9, 0x48, 0x67, 0x30, 0x96, 0xee, 0x94, 0x78, 0x5e, 0x6f, 0x89, 0xa3, 0x51, 0xc0, 0x30, 0x86, 0x66, 0xa1, 0x45, 0x66, 0xba, 0x54, 0xeb, 0xa3, 0xc3, 0x91, 0xf9, 0x48, 0xdc, 0xff, 0xd1, 0xe8, 0x30, 0x2d, 0x7d, 0x2d, 0x74, 0x70, 0x35, 0xd7, 0x88, 0x24, 0xf7, 0x9e, 0xc4, 0x59, 0x6e, 0xbb, 0x73, 0x87, 0x17, 0xf2, 0x32, 0x46, 0x28, 0xb8, 0x43, 0xfa, 0xb7, 0x1d, 0xaa, 0xca, 0xb4, 0xf2, 0x9f, 0x24, 0x0e, 0x2d, 0x4b, 0xf7, 0x71, 0x5c, 0x5e, 0x69, 0xff, 0xea, 0x95, 0x02, 0xcb, 0x38, 0x8a, 0xae, 0x50, 0x38, 0x6f, 0xdb, 0xfb, 0x2d, 0x62, 0x1b, 0xc5, 0xc7, 0x1e, 0x54, 0xe1, 0x77, 0xe0, 0x67, 0xc8, 0x0f, 0x9c, 0x87, 0x23, 0xd6, 0x3f, 0x40, 0x20, 0x7f, 0x20, 0x80, 0xc4, 0x80, 0x4c, 0x3e, 0x3b, 0x24, 0x26, 0x8e, 0x04, 0xae, 0x6c, 0x9a, 0xc8, 0xaa, 0x0d, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x84, 0x18, 0xcc, 0x85, 0x34, 0xec, 0xbc, 0x0c, 0x94, 0x94, 0x2e, 0x08, 0x59, 0x9c, 0xc7, 0xb2, 0x10, 0x4e, 0x0a, 0x08, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x98, 0xf2, 0x37, 0x5a, 0x41, 0x90, 0xa1, 0x1a, 0xc5, 0x76, 0x51, 0x28, 0x20, 0x36, 0x23, 0x0e, 0xae, 0xe6, 0x28, 0xbb, 0xaa, 0xf8, 0x94, 0xae, 0x48, 0xa4, 0x30, 0x7f, 0x1b, 0xfc, 0x24, 0x8d, 0x4b, 0xb4, 0xc8, 0xa1, 0x97, 0xf6, 0xb6, 0xf1, 0x7a, 0x70, 0xc8, 0x53, 0x93, 0xcc, 0x08, 0x28, 0xe3, 0x98, 0x25, 0xcf, 0x23, 0xa4, 0xf9, 0xde, 0x21, 0xd3, 0x7c, 0x85, 0x09, 0xad, 0x4e, 0x9a, 0x75, 0x3a, 0xc2, 0x0b, 0x6a, 0x89, 0x78, 0x76, 0x44, 0x47, 0x18, 0x65, 0x6c, 0x8d, 0x41, 0x8e, 0x3b, 0x7f, 0x9a, 0xcb, 0xf4, 0xb5, 0xa7, 0x50, 0xd7, 0x05, 0x2c, 0x37, 0xe8, 0x03, 0x4b, 0xad, 0xe9, 0x61, 0xa0, 0x02, 0x6e, 0xf5, 0xf2, 0xf0, 0xc5, 0xb2, 0xed, 0x5b, 0xb7, 0xdc, 0xfa, 0x94, 0x5c, 0x77, 0x9e, 0x13, 0xa5, 0x7f, 0x52, 0xad, 0x95, 0xf2, 0xf8, 0x93, 0x3b, 0xde, 0x8b, 0x5c, 0x5b, 0xca, 0x5a, 0x52, 0x5b, 0x60, 0xaf, 0x14, 0xf7, 0x4b, 0xef, 0xa3, 0xfb, 0x9f, 0x40, 0x95, 0x6d, 0x31, 0x54, 0xfc, 0x42, 0xd3, 0xc7, 0x46, 0x1f, 0x23, 0xad, 0xd9, 0x0f, 0x48, 0x70, 0x9a, 0xd9, 0x75, 0x78, 0x71, 0xd1, 0x72, 0x43, 0x34, 0x75, 0x6e, 0x57, 0x59, 0xc2, 0x02, 0x5c, 0x26, 0x60, 0x29, 0xcf, 0x23, 0x19, 0x16, 0x8e, 0x88, 0x43, 0xa5, 0xd4, 0xe4, 0xcb, 0x08, 0xfb, 0x23, 0x11, 0x43, 0xe8, 0x43, 0x29, 0x72, 0x62, 0xa1, 0xa9, 0x5d, 0x5e, 0x08, 0xd4, 0x90, 0xae, 0xb8, 0xd8, 0xce, 0x14, 0xc2, 0xd0, 0x55, 0xf2, 0x86, 0xf6, 0xc4, 0x93, 0x43, 0x77, 0x66, 0x61, 0xc0, 0xb9, 0xe8, 0x41, 0xd7, 0x97, 0x78, 0x60, 0x03, 0x6e, 0x4a, 0x72, 0xae, 0xa5, 0xd1, 0x7d, 0xba, 0x10, 0x9e, 0x86, 0x6c, 0x1b, 0x8a, 0xb9, 0x59, 0x33, 0xf8, 0xeb, 0xc4, 0x90, 0xbe, 0xf1, 0xb9, 0x30, 0x82, 0x01, 0xf2, 0x30, 0x82, 0x01, 0x78, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x13, 0x06, 0x6c, 0x9f, 0xd7, 0xc1, 0xbb, 0x10, 0x4c, 0x29, 0x43, 0xe5, 0x71, 0x7b, 0x7b, 0x2c, 0xc8, 0x1a, 0xc1, 0x0e, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x30, 0x39, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x06, 0x41, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x10, 0x41, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x34, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x35, 0x30, 0x35, 0x32, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x34, 0x30, 0x30, 0x35, 0x32, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x39, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x06, 0x41, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x10, 0x41, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x34, 0x30, 0x76, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x22, 0x03, 0x62, 0x00, 0x04, 0xd2, 0xab, 0x8a, 0x37, 0x4f, 0xa3, 0x53, 0x0d, 0xfe, 0xc1, 0x8a, 0x7b, 0x4b, 0xa8, 0x7b, 0x46, 0x4b, 0x63, 0xb0, 0x62, 0xf6, 0x2d, 0x1b, 0xdb, 0x08, 0x71, 0x21, 0xd2, 0x00, 0xe8, 0x63, 0xbd, 0x9a, 0x27, 0xfb, 0xf0, 0x39, 0x6e, 0x5d, 0xea, 0x3d, 0xa5, 0xc9, 0x81, 0xaa, 0xa3, 0x5b, 0x20, 0x98, 0x45, 0x5d, 0x16, 0xdb, 0xfd, 0xe8, 0x10, 0x6d, 0xe3, 0x9c, 0xe0, 0xe3, 0xbd, 0x5f, 0x84, 0x62, 0xf3, 0x70, 0x64, 0x33, 0xa0, 0xcb, 0x24, 0x2f, 0x70, 0xba, 0x88, 0xa1, 0x2a, 0xa0, 0x75, 0xf8, 0x81, 0xae, 0x62, 0x06, 0xc4, 0x81, 0xdb, 0x39, 0x6e, 0x29, 0xb0, 0x1e, 0xfa, 0x2e, 0x5c, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xd3, 0xec, 0xc7, 0x3a, 0x65, 0x6e, 0xcc, 0xe1, 0xda, 0x76, 0x9a, 0x56, 0xfb, 0x9c, 0xf3, 0x86, 0x6d, 0x57, 0xe5, 0x81, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x03, 0x68, 0x00, 0x30, 0x65, 0x02, 0x30, 0x3a, 0x8b, 0x21, 0xf1, 0xbd, 0x7e, 0x11, 0xad, 0xd0, 0xef, 0x58, 0x96, 0x2f, 0xd6, 0xeb, 0x9d, 0x7e, 0x90, 0x8d, 0x2b, 0xcf, 0x66, 0x55, 0xc3, 0x2c, 0xe3, 0x28, 0xa9, 0x70, 0x0a, 0x47, 0x0e, 0xf0, 0x37, 0x59, 0x12, 0xff, 0x2d, 0x99, 0x94, 0x28, 0x4e, 0x2a, 0x4f, 0x35, 0x4d, 0x33, 0x5a, 0x02, 0x31, 0x00, 0xea, 0x75, 0x00, 0x4e, 0x3b, 0xc4, 0x3a, 0x94, 0x12, 0x91, 0xc9, 0x58, 0x46, 0x9d, 0x21, 0x13, 0x72, 0xa7, 0x88, 0x9c, 0x8a, 0xe4, 0x4c, 0x4a, 0xdb, 0x96, 0xd4, 0xac, 0x8b, 0x6b, 0x6b, 0x49, 0x12, 0x53, 0x33, 0xad, 0xd7, 0xe4, 0xbe, 0x24, 0xfc, 0xb5, 0x0a, 0x76, 0xd4, 0xa5, 0xbc, 0x10, 0x30, 0x82, 0x06, 0x0b, 0x30, 0x82, 0x03, 0xf3, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0xa6, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x52, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x06, 0x41, 0x74, 0x68, 0x65, 0x6e, 0x73, 0x31, 0x44, 0x30, 0x42, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x3b, 0x48, 0x65, 0x6c, 0x6c, 0x65, 0x6e, 0x69, 0x63, 0x20, 0x41, 0x63, 0x61, 0x64, 0x65, 0x6d, 0x69, 0x63, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x52, 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x43, 0x65, 0x72, 0x74, 0x2e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x31, 0x40, 0x30, 0x3e, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x37, 0x48, 0x65, 0x6c, 0x6c, 0x65, 0x6e, 0x69, 0x63, 0x20, 0x41, 0x63, 0x61, 0x64, 0x65, 0x6d, 0x69, 0x63, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x52, 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x43, 0x41, 0x20, 0x32, 0x30, 0x31, 0x35, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x35, 0x30, 0x37, 0x30, 0x37, 0x31, 0x30, 0x31, 0x31, 0x32, 0x31, 0x5a, 0x17, 0x0d, 0x34, 0x30, 0x30, 0x36, 0x33, 0x30, 0x31, 0x30, 0x31, 0x31, 0x32, 0x31, 0x5a, 0x30, 0x81, 0xa6, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x52, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x06, 0x41, 0x74, 0x68, 0x65, 0x6e, 0x73, 0x31, 0x44, 0x30, 0x42, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x3b, 0x48, 0x65, 0x6c, 0x6c, 0x65, 0x6e, 0x69, 0x63, 0x20, 0x41, 0x63, 0x61, 0x64, 0x65, 0x6d, 0x69, 0x63, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x52, 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x43, 0x65, 0x72, 0x74, 0x2e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x31, 0x40, 0x30, 0x3e, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x37, 0x48, 0x65, 0x6c, 0x6c, 0x65, 0x6e, 0x69, 0x63, 0x20, 0x41, 0x63, 0x61, 0x64, 0x65, 0x6d, 0x69, 0x63, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x52, 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x43, 0x41, 0x20, 0x32, 0x30, 0x31, 0x35, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xc2, 0xf8, 0xa9, 0x3f, 0x1b, 0x89, 0xfc, 0x3c, 0x3c, 0x04, 0x5d, 0x3d, 0x90, 0x36, 0xb0, 0x91, 0x3a, 0x79, 0x3c, 0x66, 0x5a, 0xef, 0x6d, 0x39, 0x01, 0x49, 0x1a, 0xb4, 0xb7, 0xcf, 0x7f, 0x4d, 0x23, 0x53, 0xb7, 0x90, 0x00, 0xe3, 0x13, 0x2a, 0x28, 0xa6, 0x31, 0xf1, 0x91, 0x00, 0xe3, 0x28, 0xec, 0xae, 0x21, 0x41, 0xce, 0x1f, 0xda, 0xfd, 0x7d, 0x12, 0x5b, 0x01, 0x83, 0x0f, 0xb9, 0xb0, 0x5f, 0x99, 0xe1, 0xf2, 0x12, 0x83, 0x80, 0x4d, 0x06, 0x3e, 0xdf, 0xac, 0xaf, 0xe7, 0xa1, 0x88, 0x6b, 0x31, 0xaf, 0xf0, 0x8b, 0xd0, 0x18, 0x33, 0xb8, 0xdb, 0x45, 0x6a, 0x34, 0xf4, 0x02, 0x80, 0x24, 0x28, 0x0a, 0x02, 0x15, 0x95, 0x5e, 0x76, 0x2a, 0x0d, 0x99, 0x3a, 0x14, 0x5b, 0xf6, 0xcb, 0xcb, 0x53, 0xbc, 0x13, 0x4d, 0x01, 0x88, 0x37, 0x94, 0x25, 0x1b, 0x42, 0xbc, 0x22, 0xd8, 0x8e, 0xa3, 0x96, 0x5e, 0x3a, 0xd9, 0x32, 0xdb, 0x3e, 0xe8, 0xf0, 0x10, 0x65, 0xed, 0x74, 0xe1, 0x2f, 0xa7, 0x7c, 0xaf, 0x27, 0x34, 0xbb, 0x29, 0x7d, 0x9b, 0xb6, 0xcf, 0x09, 0xc8, 0xe5, 0xd3, 0x0a, 0xfc, 0x88, 0x65, 0x65, 0x74, 0x0a, 0xdc, 0x73, 0x1c, 0x5c, 0xcd, 0x40, 0xb1, 0x1c, 0xd4, 0xb6, 0x84, 0x8c, 0x4c, 0x50, 0xcf, 0x68, 0x8e, 0xa8, 0x59, 0xae, 0xc2, 0x27, 0x4e, 0x82, 0xa2, 0x35, 0xdd, 0x14, 0xf4, 0x1f, 0xff, 0xb2, 0x77, 0xd5, 0x87, 0x2f, 0xaa, 0x6e, 0x7d, 0x24, 0x27, 0xe7, 0xc6, 0xcb, 0x26, 0xe6, 0xe5, 0xfe, 0x67, 0x07, 0x63, 0xd8, 0x45, 0x0d, 0xdd, 0x3a, 0x59, 0x65, 0x39, 0x58, 0x7a, 0x92, 0x99, 0x72, 0x3d, 0x9c, 0x84, 0x5e, 0x88, 0x21, 0xb8, 0xd5, 0xf4, 0x2c, 0xfc, 0xd9, 0x70, 0x52, 0x4f, 0x78, 0xb8, 0xbd, 0x3c, 0x2b, 0x8b, 0x95, 0x98, 0xf5, 0xb3, 0xd1, 0x68, 0xcf, 0x20, 0x14, 0x7e, 0x4c, 0x5c, 0x5f, 0xe7, 0x8b, 0xe5, 0xf5, 0x35, 0x81, 0x19, 0x37, 0xd7, 0x11, 0x08, 0xb7, 0x66, 0xbe, 0xd3, 0x4a, 0xce, 0x83, 0x57, 0x00, 0x3a, 0xc3, 0x81, 0xf8, 0x17, 0xcb, 0x92, 0x36, 0x5d, 0xd1, 0xa3, 0xd8, 0x75, 0x1b, 0xe1, 0x8b, 0x27, 0xea, 0x7a, 0x48, 0x41, 0xfd, 0x45, 0x19, 0x06, 0xad, 0x27, 0x99, 0x4e, 0xc1, 0x70, 0x47, 0xdd, 0xb5, 0x9f, 0x81, 0x53, 0x12, 0xe5, 0xb1, 0x8c, 0x48, 0x5d, 0x31, 0x43, 0x17, 0xe3, 0x8c, 0xc6, 0x7a, 0x63, 0x96, 0x4b, 0x29, 0x30, 0x4e, 0x84, 0x4e, 0x62, 0x19, 0x5e, 0x3c, 0xce, 0x97, 0x90, 0xa5, 0x7f, 0x01, 0xeb, 0x9d, 0xe0, 0xf8, 0x8b, 0x89, 0xdd, 0x25, 0x98, 0x3d, 0x92, 0xb6, 0x7e, 0xef, 0xd9, 0xf1, 0x51, 0x51, 0x7d, 0x2d, 0x26, 0xc8, 0x69, 0x59, 0x61, 0xe0, 0xac, 0x6a, 0xb8, 0x2a, 0x36, 0x11, 0x04, 0x7a, 0x50, 0xbd, 0x32, 0x84, 0xbe, 0x2f, 0xdc, 0x72, 0xd5, 0xd7, 0x1d, 0x16, 0x47, 0xe4, 0x47, 0x66, 0x20, 0x3f, 0xf4, 0x96, 0xc5, 0xaf, 0x8e, 0x01, 0x7a, 0xa5, 0x0f, 0x7a, 0x64, 0xf5, 0x0d, 0x18, 0x87, 0xd9, 0xae, 0x88, 0xd5, 0xfa, 0x84, 0xc1, 0x3a, 0xc0, 0x69, 0x28, 0x2d, 0xf2, 0x0d, 0x68, 0x51, 0xaa, 0xe3, 0xa5, 0x77, 0xc6, 0xa4, 0x90, 0x0e, 0xa1, 0x37, 0x8b, 0x31, 0x23, 0x47, 0xc1, 0x09, 0x08, 0xeb, 0x6e, 0xf7, 0x78, 0x9b, 0xd7, 0x82, 0xfc, 0x84, 0x20, 0x99, 0x49, 0x19, 0xb6, 0x12, 0x46, 0xb1, 0xfb, 0x45, 0x55, 0x16, 0xa9, 0xa3, 0x65, 0xac, 0x9c, 0x07, 0x0f, 0xea, 0x6b, 0xdc, 0x1f, 0x2e, 0x06, 0x72, 0xec, 0x86, 0x88, 0x12, 0xe4, 0x2d, 0xdb, 0x5f, 0x05, 0x2f, 0xe4, 0xf0, 0x03, 0xd3, 0x26, 0x33, 0xe7, 0x80, 0xc2, 0xcd, 0x42, 0xa1, 0x17, 0x34, 0x0b, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x71, 0x15, 0x67, 0xc8, 0xc8, 0xc9, 0xbd, 0x75, 0x5d, 0x72, 0xd0, 0x38, 0x18, 0x6a, 0x9d, 0xf3, 0x71, 0x24, 0x54, 0x0b, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x75, 0xbb, 0x6d, 0x54, 0x4b, 0xaa, 0x10, 0x58, 0x46, 0x34, 0xf2, 0x62, 0xd7, 0x16, 0x36, 0x5d, 0x08, 0x5e, 0xd5, 0x6c, 0xc8, 0x87, 0xbd, 0xb4, 0x2e, 0x46, 0xf2, 0x31, 0xf8, 0x7c, 0xea, 0x42, 0xb5, 0x93, 0x16, 0x55, 0xdc, 0xa1, 0x0c, 0x12, 0xa0, 0xda, 0x61, 0x7e, 0x0f, 0x58, 0x58, 0x73, 0x64, 0x72, 0xc7, 0xe8, 0x45, 0x8e, 0xdc, 0xa9, 0xf2, 0x26, 0x3f, 0xc6, 0x79, 0x8c, 0xb1, 0x53, 0x08, 0x33, 0x81, 0xb0, 0x56, 0x13, 0xbe, 0xe6, 0x51, 0x5c, 0xd8, 0x9b, 0x0a, 0x4f, 0x4b, 0x9c, 0x56, 0x53, 0x02, 0xe9, 0x4f, 0xf6, 0x0d, 0x60, 0xea, 0x4d, 0x42, 0x55, 0xe8, 0x7c, 0x1b, 0x21, 0x21, 0xd3, 0x1b, 0x3a, 0xcc, 0x77, 0xf2, 0xb8, 0x90, 0xf1, 0x68, 0xc7, 0xf9, 0x5a, 0xfe, 0xfa, 0x2d, 0xf4, 0xbf, 0xc9, 0xf5, 0x45, 0x1b, 0xce, 0x38, 0x10, 0x2a, 0x37, 0x8a, 0x79, 0xa3, 0xb4, 0xe3, 0x09, 0x6c, 0x85, 0x86, 0x93, 0xff, 0x89, 0x96, 0x27, 0x78, 0x81, 0x8f, 0x67, 0xe3, 0x46, 0x74, 0x54, 0x8e, 0xd9, 0x0d, 0x69, 0xe2, 0x4a, 0xf4, 0x4d, 0x74, 0x03, 0xff, 0xb2, 0x77, 0xed, 0x95, 0x67, 0x97, 0xe4, 0xb1, 0xc5, 0xab, 0xbf, 0x6a, 0x23, 0xe8, 0xd4, 0x94, 0xe2, 0x44, 0x28, 0x62, 0xc4, 0x4b, 0xe2, 0xf0, 0xd8, 0xe2, 0x29, 0x6b, 0x1a, 0x70, 0x7e, 0x24, 0x61, 0x93, 0x7b, 0x4f, 0x03, 0x32, 0x25, 0x0d, 0x45, 0x24, 0x2b, 0x96, 0xb4, 0x46, 0x6a, 0xbf, 0x4a, 0x0b, 0xf7, 0x9a, 0x8f, 0xc1, 0xac, 0x1a, 0xc5, 0x67, 0xf3, 0x6f, 0x34, 0xd2, 0xfa, 0x73, 0x63, 0x8c, 0xef, 0x16, 0xb0, 0xa8, 0xa4, 0x46, 0x2a, 0xf8, 0xeb, 0x12, 0xec, 0x72, 0xb4, 0xef, 0xf8, 0x2b, 0x7e, 0x8c, 0x52, 0xc0, 0x8b, 0x84, 0x54, 0xf9, 0x2f, 0x3e, 0xe3, 0x55, 0xa8, 0xdc, 0x66, 0xb1, 0xd9, 0xe1, 0x5f, 0xd8, 0xb3, 0x8c, 0x59, 0x34, 0x59, 0xa4, 0xab, 0x4f, 0x6c, 0xbb, 0x1f, 0x18, 0xdb, 0x75, 0xab, 0xd8, 0xcb, 0x92, 0xcd, 0x94, 0x38, 0x61, 0x0e, 0x07, 0x06, 0x1f, 0x4b, 0x46, 0x10, 0xf1, 0x15, 0xbe, 0x8d, 0x85, 0x5c, 0x3b, 0x4a, 0x2b, 0x81, 0x79, 0x0f, 0xb4, 0x69, 0x9f, 0x49, 0x50, 0x97, 0x4d, 0xf7, 0x0e, 0x56, 0x5d, 0xc0, 0x95, 0x6a, 0xc2, 0x36, 0xc3, 0x1b, 0x68, 0xc9, 0xf5, 0x2a, 0xdc, 0x47, 0x9a, 0xbe, 0xb2, 0xce, 0xc5, 0x25, 0xe8, 0xfa, 0x03, 0xb9, 0xda, 0xf9, 0x16, 0x6e, 0x91, 0x84, 0xf5, 0x1c, 0x28, 0xc8, 0xfc, 0x26, 0xcc, 0xd7, 0x1c, 0x90, 0x56, 0xa7, 0x5f, 0x6f, 0x3a, 0x04, 0xbc, 0xcd, 0x78, 0x89, 0x0b, 0x8e, 0x0f, 0x2f, 0xa3, 0xaa, 0x4f, 0xa2, 0x1b, 0x12, 0x3d, 0x16, 0x08, 0x40, 0x0f, 0xf1, 0x46, 0x4c, 0xd7, 0xaa, 0x7b, 0x08, 0xc1, 0x0a, 0xf5, 0x6d, 0x27, 0xde, 0x02, 0x8f, 0xca, 0xc3, 0xb5, 0x2b, 0xca, 0xe9, 0xeb, 0xc8, 0x21, 0x53, 0x38, 0xa5, 0xcc, 0x3b, 0xd8, 0x77, 0x37, 0x30, 0xa2, 0x4f, 0xd9, 0x6f, 0xd1, 0xf2, 0x40, 0xad, 0x41, 0x7a, 0x17, 0xc5, 0xd6, 0x4a, 0x35, 0x89, 0xb7, 0x41, 0xd5, 0x7c, 0x86, 0x7f, 0x55, 0x4d, 0x83, 0x4a, 0xa5, 0x73, 0x20, 0xc0, 0x3a, 0xaf, 0x90, 0xf1, 0x9a, 0x24, 0x8e, 0xd9, 0x8e, 0x71, 0xca, 0x7b, 0xb8, 0x86, 0xda, 0xb2, 0x8f, 0x99, 0x3e, 0x1d, 0x13, 0x0d, 0x12, 0x11, 0xee, 0xd4, 0xab, 0xf0, 0xe9, 0x15, 0x76, 0x02, 0xe4, 0xe0, 0xdf, 0xaa, 0x20, 0x1e, 0x5b, 0x61, 0x85, 0x64, 0x40, 0xa9, 0x90, 0x97, 0x0d, 0xad, 0x53, 0xd2, 0x5a, 0x1d, 0x87, 0x6a, 0x00, 0x97, 0x65, 0x62, 0xb4, 0xbe, 0x6f, 0x6a, 0xa7, 0xf5, 0x2c, 0x42, 0xed, 0x32, 0xad, 0xb6, 0x21, 0x9e, 0xbe, 0xbc, 0x30, 0x82, 0x02, 0xc3, 0x30, 0x82, 0x02, 0x4a, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x00, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x30, 0x81, 0xaa, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x52, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x06, 0x41, 0x74, 0x68, 0x65, 0x6e, 0x73, 0x31, 0x44, 0x30, 0x42, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x3b, 0x48, 0x65, 0x6c, 0x6c, 0x65, 0x6e, 0x69, 0x63, 0x20, 0x41, 0x63, 0x61, 0x64, 0x65, 0x6d, 0x69, 0x63, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x52, 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x43, 0x65, 0x72, 0x74, 0x2e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x31, 0x44, 0x30, 0x42, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x3b, 0x48, 0x65, 0x6c, 0x6c, 0x65, 0x6e, 0x69, 0x63, 0x20, 0x41, 0x63, 0x61, 0x64, 0x65, 0x6d, 0x69, 0x63, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x52, 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x45, 0x43, 0x43, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x43, 0x41, 0x20, 0x32, 0x30, 0x31, 0x35, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x35, 0x30, 0x37, 0x30, 0x37, 0x31, 0x30, 0x33, 0x37, 0x31, 0x32, 0x5a, 0x17, 0x0d, 0x34, 0x30, 0x30, 0x36, 0x33, 0x30, 0x31, 0x30, 0x33, 0x37, 0x31, 0x32, 0x5a, 0x30, 0x81, 0xaa, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x52, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x06, 0x41, 0x74, 0x68, 0x65, 0x6e, 0x73, 0x31, 0x44, 0x30, 0x42, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x3b, 0x48, 0x65, 0x6c, 0x6c, 0x65, 0x6e, 0x69, 0x63, 0x20, 0x41, 0x63, 0x61, 0x64, 0x65, 0x6d, 0x69, 0x63, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x52, 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x43, 0x65, 0x72, 0x74, 0x2e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x31, 0x44, 0x30, 0x42, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x3b, 0x48, 0x65, 0x6c, 0x6c, 0x65, 0x6e, 0x69, 0x63, 0x20, 0x41, 0x63, 0x61, 0x64, 0x65, 0x6d, 0x69, 0x63, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x52, 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x45, 0x43, 0x43, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x43, 0x41, 0x20, 0x32, 0x30, 0x31, 0x35, 0x30, 0x76, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x22, 0x03, 0x62, 0x00, 0x04, 0x92, 0xa0, 0x41, 0xe8, 0x4b, 0x82, 0x84, 0x5c, 0xe2, 0xf8, 0x31, 0x11, 0x99, 0x86, 0x64, 0x4e, 0x09, 0x25, 0x2f, 0x9d, 0x41, 0x2f, 0x0a, 0xae, 0x35, 0x4f, 0x74, 0x95, 0xb2, 0x51, 0x64, 0x6b, 0x8d, 0x6b, 0xe6, 0x3f, 0x70, 0x95, 0xf0, 0x05, 0x44, 0x47, 0xa6, 0x72, 0x38, 0x50, 0x76, 0x95, 0x02, 0x5a, 0x8e, 0xae, 0x28, 0x9e, 0xf9, 0x2d, 0x4e, 0x99, 0xef, 0x2c, 0x48, 0x6f, 0x4c, 0x25, 0x29, 0xe8, 0xd1, 0x71, 0x5b, 0xdf, 0x1d, 0xc1, 0x75, 0x37, 0xb4, 0xd7, 0xfa, 0x7b, 0x7a, 0x42, 0x9c, 0x6a, 0x0a, 0x56, 0x5a, 0x7c, 0x69, 0x0b, 0xaa, 0x80, 0x09, 0x24, 0x6c, 0x7e, 0xc1, 0x46, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xb4, 0x22, 0x0b, 0x82, 0x99, 0x24, 0x01, 0x0e, 0x9c, 0xbb, 0xe4, 0x0e, 0xfd, 0xbf, 0xfb, 0x97, 0x20, 0x93, 0x99, 0x2a, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x03, 0x67, 0x00, 0x30, 0x64, 0x02, 0x30, 0x67, 0xce, 0x16, 0x62, 0x38, 0xa2, 0xac, 0x62, 0x45, 0xa7, 0xa9, 0x95, 0x24, 0xc0, 0x1a, 0x27, 0x9c, 0x32, 0x3b, 0xc0, 0xc0, 0xd5, 0xba, 0xa9, 0xe7, 0xf8, 0x04, 0x43, 0x53, 0x85, 0xee, 0x52, 0x21, 0xde, 0x9d, 0xf5, 0x25, 0x83, 0x3e, 0x9e, 0x58, 0x4b, 0x2f, 0xd7, 0x67, 0x13, 0x0e, 0x21, 0x02, 0x30, 0x05, 0xe1, 0x75, 0x01, 0xde, 0x68, 0xed, 0x2a, 0x1f, 0x4d, 0x4c, 0x09, 0x08, 0x0d, 0xec, 0x4b, 0xad, 0x64, 0x17, 0x28, 0xe7, 0x75, 0xce, 0x45, 0x65, 0x72, 0x21, 0x17, 0xcb, 0x22, 0x41, 0x0e, 0x8c, 0x13, 0x98, 0x38, 0x9a, 0x54, 0x6d, 0x9b, 0xca, 0xe2, 0x7c, 0xea, 0x02, 0x58, 0x22, 0x91, 0x30, 0x82, 0x06, 0x5b, 0x30, 0x82, 0x04, 0x43, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x11, 0x00, 0xca, 0xe9, 0x1b, 0x89, 0xf1, 0x55, 0x03, 0x0d, 0xa3, 0xe6, 0x41, 0x6d, 0xc4, 0xe3, 0xa6, 0xe1, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x5a, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x46, 0x52, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x09, 0x44, 0x68, 0x69, 0x6d, 0x79, 0x6f, 0x74, 0x69, 0x73, 0x31, 0x1c, 0x30, 0x1a, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x13, 0x30, 0x30, 0x30, 0x32, 0x20, 0x34, 0x38, 0x31, 0x34, 0x36, 0x33, 0x30, 0x38, 0x31, 0x30, 0x30, 0x30, 0x33, 0x36, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x10, 0x43, 0x65, 0x72, 0x74, 0x69, 0x67, 0x6e, 0x61, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x33, 0x31, 0x30, 0x30, 0x31, 0x30, 0x38, 0x33, 0x32, 0x32, 0x37, 0x5a, 0x17, 0x0d, 0x33, 0x33, 0x31, 0x30, 0x30, 0x31, 0x30, 0x38, 0x33, 0x32, 0x32, 0x37, 0x5a, 0x30, 0x5a, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x46, 0x52, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x09, 0x44, 0x68, 0x69, 0x6d, 0x79, 0x6f, 0x74, 0x69, 0x73, 0x31, 0x1c, 0x30, 0x1a, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x13, 0x30, 0x30, 0x30, 0x32, 0x20, 0x34, 0x38, 0x31, 0x34, 0x36, 0x33, 0x30, 0x38, 0x31, 0x30, 0x30, 0x30, 0x33, 0x36, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x10, 0x43, 0x65, 0x72, 0x74, 0x69, 0x67, 0x6e, 0x61, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xcd, 0x18, 0x39, 0x65, 0x1a, 0x59, 0xb1, 0xea, 0x64, 0x16, 0x0e, 0x8c, 0x94, 0x24, 0x95, 0x7c, 0x83, 0xd3, 0xc5, 0x39, 0x26, 0xdc, 0x0c, 0xef, 0x16, 0x57, 0x8d, 0xd7, 0xd8, 0xac, 0xa3, 0x42, 0x7f, 0x82, 0xca, 0xed, 0xcd, 0x5b, 0xdb, 0x0e, 0xb7, 0x2d, 0xed, 0x45, 0x08, 0x17, 0xb2, 0xd9, 0xb3, 0xcb, 0xd6, 0x17, 0x52, 0x72, 0x28, 0xdb, 0x8e, 0x4e, 0x9e, 0x8a, 0xb6, 0x0b, 0xf9, 0x9e, 0x84, 0x9a, 0x4d, 0x76, 0xde, 0x22, 0x29, 0x5c, 0xd2, 0xb3, 0xd2, 0x06, 0x3e, 0x30, 0x39, 0xa9, 0x74, 0xa3, 0x92, 0x56, 0x1c, 0xa1, 0x6f, 0x4c, 0x0a, 0x20, 0x6d, 0x9f, 0x23, 0x7a, 0xb4, 0xc6, 0xda, 0x2c, 0xe4, 0x1d, 0x2c, 0xdc, 0xb3, 0x28, 0xd0, 0x13, 0xf2, 0x4c, 0x4e, 0x02, 0x49, 0xa1, 0x54, 0x40, 0x9e, 0xe6, 0xe5, 0x05, 0xa0, 0x2d, 0x84, 0xc8, 0xff, 0x98, 0x6c, 0xd0, 0xeb, 0x8a, 0x1a, 0x84, 0x08, 0x1e, 0xb7, 0x68, 0x23, 0xee, 0x23, 0xd5, 0x70, 0xce, 0x6d, 0x51, 0x69, 0x10, 0xee, 0xa1, 0x7a, 0xc2, 0xd1, 0x22, 0x31, 0xc2, 0x82, 0x85, 0xd2, 0xf2, 0x55, 0x76, 0x50, 0x7c, 0x25, 0x7a, 0xc9, 0x84, 0x5c, 0x0b, 0xac, 0xdd, 0x42, 0x4e, 0x2b, 0xe7, 0x82, 0xa2, 0x24, 0x89, 0xcb, 0x90, 0xb2, 0xd0, 0xee, 0x23, 0xba, 0x66, 0x4c, 0xbb, 0x62, 0xa4, 0xf9, 0x53, 0x5a, 0x64, 0x7b, 0x7c, 0x98, 0xfa, 0xa3, 0x48, 0x9e, 0x0f, 0x95, 0xae, 0xa7, 0x18, 0xf4, 0x6a, 0xec, 0x2e, 0x03, 0x45, 0xaf, 0xf0, 0x74, 0xf8, 0x2a, 0xcd, 0x7a, 0x5d, 0xd1, 0xbe, 0x44, 0x26, 0x32, 0x29, 0xf1, 0xf1, 0xf5, 0x6c, 0xcc, 0x7e, 0x02, 0x21, 0x0b, 0x9f, 0x6f, 0xa4, 0x3f, 0xbe, 0x9d, 0x53, 0xe2, 0xcf, 0x7d, 0xa9, 0x2c, 0x7c, 0x58, 0x1a, 0x97, 0xe1, 0x3d, 0x37, 0x37, 0x18, 0x66, 0x28, 0xd2, 0x40, 0xc5, 0x51, 0x8a, 0x8c, 0xc3, 0x2d, 0xce, 0x53, 0x88, 0x24, 0x58, 0x64, 0x30, 0x16, 0xc5, 0xaa, 0xe0, 0xd6, 0x0a, 0xa6, 0x40, 0xdf, 0x78, 0xf6, 0xf5, 0x04, 0x7c, 0x69, 0x13, 0x84, 0xbc, 0xd1, 0xd1, 0xa7, 0x06, 0xcf, 0x01, 0xf7, 0x68, 0xc0, 0xa8, 0x57, 0xbb, 0x3a, 0x61, 0xad, 0x04, 0x8c, 0x93, 0xe3, 0xad, 0xfc, 0xf0, 0xdb, 0x44, 0x6d, 0x59, 0xdc, 0x49, 0x59, 0xae, 0xac, 0x9a, 0x99, 0x36, 0x30, 0x41, 0x7b, 0x76, 0x33, 0x22, 0x87, 0xa3, 0xc2, 0x92, 0x86, 0x6e, 0xf9, 0x70, 0xee, 0xae, 0x87, 0x87, 0x95, 0x1b, 0xc4, 0x7a, 0xbd, 0x31, 0xf3, 0xd4, 0xd2, 0xe5, 0x99, 0xff, 0xbe, 0x48, 0xec, 0x75, 0xf5, 0x78, 0x16, 0x1d, 0xa6, 0x70, 0xc1, 0x7f, 0x3c, 0x1b, 0xa1, 0x92, 0xfb, 0xcf, 0xc8, 0x3c, 0xd6, 0xc5, 0x93, 0x0a, 0x8f, 0xf5, 0x55, 0x3a, 0x76, 0x95, 0xce, 0x59, 0x98, 0x8a, 0x09, 0x95, 0x77, 0x32, 0x9a, 0x83, 0xba, 0x2c, 0x04, 0x3a, 0x97, 0xbd, 0xd4, 0x2f, 0xbe, 0xd7, 0x6c, 0x9b, 0xa2, 0xca, 0x7d, 0x6d, 0x26, 0xc9, 0x55, 0xd5, 0xcf, 0xc3, 0x79, 0x52, 0x08, 0x09, 0x99, 0x07, 0x24, 0x2d, 0x64, 0x25, 0x6b, 0xa6, 0x21, 0x69, 0x9b, 0x6a, 0xdd, 0x74, 0x4d, 0x6b, 0x97, 0x7a, 0x41, 0xbd, 0xab, 0x17, 0xf9, 0x90, 0x17, 0x48, 0x8f, 0x36, 0xf9, 0x2d, 0xd5, 0xc5, 0xdb, 0xee, 0xaa, 0x85, 0x45, 0x41, 0xfa, 0xcd, 0x3a, 0x45, 0xb1, 0x68, 0xe6, 0x36, 0x4c, 0x9b, 0x90, 0x57, 0xec, 0x23, 0xb9, 0x87, 0x08, 0xc2, 0xc4, 0x09, 0xf1, 0x97, 0x86, 0x2a, 0x28, 0x4d, 0xe2, 0x74, 0xc0, 0xda, 0xc4, 0x8c, 0xdb, 0xdf, 0xe2, 0xa1, 0x17, 0x59, 0xce, 0x24, 0x59, 0x74, 0x31, 0xda, 0x7f, 0xfd, 0x30, 0x6d, 0xd9, 0xdc, 0xe1, 0x6a, 0xe1, 0xfc, 0x5f, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x82, 0x01, 0x1a, 0x30, 0x82, 0x01, 0x16, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x18, 0x87, 0x56, 0xe0, 0x6e, 0x77, 0xee, 0x24, 0x35, 0x3c, 0x4e, 0x73, 0x9a, 0x1f, 0xd6, 0xe1, 0xe2, 0x79, 0x7e, 0x2b, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x18, 0x87, 0x56, 0xe0, 0x6e, 0x77, 0xee, 0x24, 0x35, 0x3c, 0x4e, 0x73, 0x9a, 0x1f, 0xd6, 0xe1, 0xe2, 0x79, 0x7e, 0x2b, 0x30, 0x44, 0x06, 0x03, 0x55, 0x1d, 0x20, 0x04, 0x3d, 0x30, 0x3b, 0x30, 0x39, 0x06, 0x04, 0x55, 0x1d, 0x20, 0x00, 0x30, 0x31, 0x30, 0x2f, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x01, 0x16, 0x23, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x77, 0x2e, 0x63, 0x65, 0x72, 0x74, 0x69, 0x67, 0x6e, 0x61, 0x2e, 0x66, 0x72, 0x2f, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x30, 0x6d, 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04, 0x66, 0x30, 0x64, 0x30, 0x2f, 0xa0, 0x2d, 0xa0, 0x2b, 0x86, 0x29, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, 0x72, 0x6c, 0x2e, 0x63, 0x65, 0x72, 0x74, 0x69, 0x67, 0x6e, 0x61, 0x2e, 0x66, 0x72, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x67, 0x6e, 0x61, 0x72, 0x6f, 0x6f, 0x74, 0x63, 0x61, 0x2e, 0x63, 0x72, 0x6c, 0x30, 0x31, 0xa0, 0x2f, 0xa0, 0x2d, 0x86, 0x2b, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, 0x72, 0x6c, 0x2e, 0x64, 0x68, 0x69, 0x6d, 0x79, 0x6f, 0x74, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x67, 0x6e, 0x61, 0x72, 0x6f, 0x6f, 0x74, 0x63, 0x61, 0x2e, 0x63, 0x72, 0x6c, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x94, 0xb8, 0x9e, 0x4f, 0xf0, 0xe3, 0x95, 0x08, 0x22, 0xe7, 0xcd, 0x68, 0x41, 0xf7, 0x1c, 0x55, 0xd5, 0x7c, 0x00, 0xe2, 0x2d, 0x3a, 0x89, 0x5d, 0x68, 0x38, 0x2f, 0x51, 0x22, 0x0b, 0x4a, 0x8d, 0xcb, 0xe9, 0xbb, 0x5d, 0x3e, 0xbb, 0x5c, 0x3d, 0xb1, 0x28, 0xfe, 0xe4, 0x53, 0x55, 0x13, 0xcf, 0xa1, 0x90, 0x1b, 0x02, 0x1d, 0x5f, 0x66, 0x46, 0x09, 0x33, 0x28, 0xe1, 0x0d, 0x24, 0x97, 0x70, 0xd3, 0x10, 0x1f, 0xea, 0x64, 0x57, 0x96, 0xbb, 0x5d, 0xda, 0xe7, 0xc4, 0x8c, 0x4f, 0x4c, 0x64, 0x46, 0x1d, 0x5c, 0x87, 0xe3, 0x59, 0xde, 0x42, 0xd1, 0x9b, 0xa8, 0x7e, 0xa6, 0x89, 0xdd, 0x8f, 0x1c, 0xc9, 0x30, 0x82, 0xed, 0x3b, 0x9c, 0xcd, 0xc0, 0xe9, 0x19, 0xe0, 0x6a, 0xd8, 0x02, 0x75, 0x37, 0xab, 0xf7, 0x34, 0x28, 0x28, 0x91, 0xf2, 0x04, 0x0a, 0x4f, 0x35, 0xe3, 0x60, 0x26, 0x01, 0xfa, 0xd0, 0x11, 0x8c, 0xf9, 0x11, 0x6a, 0xee, 0xaf, 0x3d, 0xc3, 0x50, 0xd3, 0x8f, 0x5f, 0x33, 0x79, 0x3c, 0x86, 0xa8, 0x73, 0x45, 0x90, 0x8c, 0x20, 0xb6, 0x72, 0x73, 0x17, 0x23, 0xbe, 0x07, 0x65, 0xe5, 0x78, 0x92, 0x0d, 0xba, 0x01, 0xc0, 0xeb, 0x8c, 0x1c, 0x66, 0xbf, 0xac, 0x86, 0x77, 0x01, 0x94, 0x0d, 0x9c, 0xe6, 0xe9, 0x39, 0x8d, 0x1f, 0xa6, 0x51, 0x8c, 0x99, 0x0c, 0x39, 0x77, 0xe1, 0xb4, 0x9b, 0xfa, 0x1c, 0x67, 0x57, 0x6f, 0x6a, 0x6a, 0x8e, 0xa9, 0x2b, 0x4c, 0x57, 0x79, 0x7a, 0x57, 0x22, 0xcf, 0xcd, 0x5f, 0x63, 0x46, 0x8d, 0x5c, 0x59, 0x3a, 0x86, 0xf8, 0x32, 0x47, 0x62, 0xa3, 0x67, 0x0d, 0x18, 0x91, 0xdc, 0xfb, 0xa6, 0x6b, 0xf5, 0x48, 0x61, 0x73, 0x23, 0x59, 0x8e, 0x02, 0xa7, 0xbc, 0x44, 0xea, 0xf4, 0x49, 0x9d, 0xf1, 0x54, 0x58, 0xf9, 0x60, 0xaf, 0xda, 0x18, 0xa4, 0x2f, 0x28, 0x45, 0xdc, 0x7a, 0xa0, 0x88, 0x86, 0x5d, 0xf3, 0x3b, 0xe7, 0xff, 0x29, 0x35, 0x80, 0xfc, 0x64, 0x43, 0x94, 0xe6, 0xe3, 0x1c, 0x6f, 0xbe, 0xad, 0x0e, 0x2a, 0x63, 0x99, 0x2b, 0xc9, 0x7e, 0x85, 0xf6, 0x71, 0xe8, 0x06, 0x03, 0x95, 0xfe, 0xde, 0x8f, 0x48, 0x1c, 0x5a, 0xd4, 0x92, 0xe8, 0x2b, 0xee, 0xe7, 0x31, 0xdb, 0xba, 0x04, 0x6a, 0x87, 0x98, 0xe7, 0xc5, 0x5f, 0xef, 0x7d, 0xa7, 0x22, 0xf7, 0x01, 0xd8, 0x4d, 0xf9, 0x89, 0xd0, 0x0e, 0x9a, 0x05, 0x59, 0xa4, 0x9e, 0x98, 0xd9, 0x6f, 0x2b, 0xca, 0x70, 0xbe, 0x64, 0xc2, 0x55, 0xa3, 0xf4, 0xe9, 0xaf, 0xc3, 0x92, 0x29, 0xdc, 0x88, 0x16, 0x24, 0x99, 0x3c, 0x8d, 0x26, 0x98, 0xb6, 0x5b, 0xb7, 0xcc, 0xce, 0xb7, 0x37, 0x07, 0xfd, 0x26, 0xd9, 0x98, 0x85, 0x24, 0xff, 0x59, 0x23, 0x03, 0x9a, 0xed, 0x9d, 0x9d, 0xa8, 0xe4, 0x5e, 0x38, 0xce, 0xd7, 0x52, 0x0d, 0x6f, 0xd2, 0x3f, 0x6d, 0xb1, 0x05, 0x6b, 0x49, 0xce, 0x8a, 0x91, 0x46, 0x73, 0xf4, 0xf6, 0x2f, 0xf0, 0xa8, 0x73, 0x77, 0x0e, 0x65, 0xac, 0xa1, 0x8d, 0x66, 0x52, 0x69, 0x7e, 0x4b, 0x68, 0x0c, 0xc7, 0x1e, 0x37, 0x27, 0x83, 0xa5, 0x8c, 0xc7, 0x02, 0xe4, 0x14, 0xcd, 0x49, 0x01, 0xb0, 0x73, 0xb3, 0xfd, 0xc6, 0x90, 0x3a, 0x6f, 0xd2, 0x6c, 0xed, 0x3b, 0xee, 0xec, 0x91, 0xbe, 0xa2, 0x43, 0x5d, 0x8b, 0x00, 0x4a, 0x66, 0x25, 0x44, 0x70, 0xde, 0x40, 0x0f, 0xf8, 0x7c, 0x15, 0xf7, 0xa2, 0xce, 0x3c, 0xd7, 0x5e, 0x13, 0x8c, 0x81, 0x17, 0x18, 0x17, 0xd1, 0xbd, 0xf1, 0x77, 0x10, 0x3a, 0xd4, 0x65, 0x39, 0xc1, 0x27, 0xac, 0x57, 0x2c, 0x25, 0x54, 0xff, 0xa2, 0xda, 0x4f, 0x8a, 0x61, 0x39, 0x5e, 0xae, 0x3d, 0x4a, 0x8c, 0xbd, 0x30, 0x82, 0x04, 0x20, 0x30, 0x82, 0x03, 0x08, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00, 0x84, 0x82, 0x2c, 0x5f, 0x1c, 0x62, 0xd0, 0x40, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0x9c, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x50, 0x41, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x06, 0x50, 0x61, 0x6e, 0x61, 0x6d, 0x61, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x0b, 0x50, 0x61, 0x6e, 0x61, 0x6d, 0x61, 0x20, 0x43, 0x69, 0x74, 0x79, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x1b, 0x54, 0x72, 0x75, 0x73, 0x74, 0x43, 0x6f, 0x72, 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x53, 0x2e, 0x20, 0x64, 0x65, 0x20, 0x52, 0x2e, 0x4c, 0x2e, 0x31, 0x27, 0x30, 0x25, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x1e, 0x54, 0x72, 0x75, 0x73, 0x74, 0x43, 0x6f, 0x72, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0e, 0x54, 0x72, 0x75, 0x73, 0x74, 0x43, 0x6f, 0x72, 0x20, 0x45, 0x43, 0x41, 0x2d, 0x31, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x36, 0x30, 0x32, 0x30, 0x34, 0x31, 0x32, 0x33, 0x32, 0x33, 0x33, 0x5a, 0x17, 0x0d, 0x32, 0x39, 0x31, 0x32, 0x33, 0x31, 0x31, 0x37, 0x32, 0x38, 0x30, 0x37, 0x5a, 0x30, 0x81, 0x9c, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x50, 0x41, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x06, 0x50, 0x61, 0x6e, 0x61, 0x6d, 0x61, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x0b, 0x50, 0x61, 0x6e, 0x61, 0x6d, 0x61, 0x20, 0x43, 0x69, 0x74, 0x79, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x1b, 0x54, 0x72, 0x75, 0x73, 0x74, 0x43, 0x6f, 0x72, 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x53, 0x2e, 0x20, 0x64, 0x65, 0x20, 0x52, 0x2e, 0x4c, 0x2e, 0x31, 0x27, 0x30, 0x25, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x1e, 0x54, 0x72, 0x75, 0x73, 0x74, 0x43, 0x6f, 0x72, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0e, 0x54, 0x72, 0x75, 0x73, 0x74, 0x43, 0x6f, 0x72, 0x20, 0x45, 0x43, 0x41, 0x2d, 0x31, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xcf, 0x8f, 0xe0, 0x11, 0xb5, 0x9f, 0xa8, 0x76, 0x76, 0xdb, 0xdf, 0x0f, 0x54, 0xef, 0x73, 0x63, 0x29, 0x82, 0xad, 0x47, 0xc6, 0xa3, 0x6b, 0xed, 0xfe, 0x5f, 0x33, 0xf8, 0x43, 0x51, 0xe9, 0x1a, 0x33, 0x91, 0x31, 0x17, 0xa0, 0x74, 0xc4, 0xd4, 0xa7, 0x01, 0xe6, 0xb2, 0x92, 0x3e, 0x6a, 0x9d, 0xed, 0x0e, 0xf9, 0x74, 0x98, 0x40, 0xd3, 0x3f, 0x03, 0x80, 0x06, 0x82, 0x40, 0xe8, 0xb1, 0xe2, 0xa7, 0x51, 0xa7, 0x1d, 0x83, 0x26, 0x6b, 0xab, 0xde, 0xfa, 0x17, 0x91, 0x2b, 0xd8, 0xc6, 0xac, 0x1e, 0xb1, 0x9e, 0x19, 0x01, 0xd5, 0x97, 0xa6, 0xea, 0x0d, 0xb7, 0xc4, 0x55, 0x1f, 0x27, 0x7c, 0xd2, 0x08, 0xd5, 0x76, 0x1f, 0x29, 0x15, 0x87, 0x40, 0x39, 0xdd, 0x38, 0x45, 0x11, 0x75, 0xd0, 0x9a, 0xa7, 0x34, 0xe0, 0xbf, 0xcd, 0xc8, 0x52, 0x1d, 0xb9, 0x47, 0x7e, 0x0d, 0xb8, 0xbb, 0xc6, 0x0c, 0xf6, 0x73, 0x57, 0x16, 0x5a, 0x7e, 0x43, 0x91, 0x1f, 0x55, 0x3a, 0xc6, 0x6d, 0x44, 0x04, 0xaa, 0x9c, 0xa9, 0x9c, 0xa7, 0x4c, 0x89, 0x17, 0x83, 0xae, 0xa3, 0x04, 0x5e, 0x52, 0x80, 0x8b, 0x1e, 0x12, 0x25, 0x11, 0x19, 0xd7, 0x0c, 0x7d, 0x7d, 0x31, 0x44, 0x41, 0xea, 0xdb, 0xaf, 0xb0, 0x1c, 0xef, 0x81, 0xd0, 0x2c, 0xc5, 0x9a, 0x21, 0x9b, 0x3d, 0xed, 0x42, 0x3b, 0x50, 0x26, 0xf2, 0xec, 0xce, 0x71, 0x61, 0x06, 0x62, 0x21, 0x54, 0x4e, 0x7f, 0xc1, 0x9d, 0x3e, 0x7f, 0x20, 0x8c, 0x80, 0xcb, 0x2a, 0xd8, 0x97, 0x62, 0xc8, 0x83, 0x33, 0x91, 0x7d, 0xb0, 0xa2, 0x5a, 0x0f, 0x57, 0xe8, 0x3b, 0xcc, 0xf2, 0x25, 0xb2, 0xd4, 0x7c, 0x2f, 0xec, 0x4d, 0xc6, 0xa1, 0x3a, 0x15, 0x7a, 0xe7, 0xb6, 0x5d, 0x35, 0xf5, 0xf6, 0x48, 0x4a, 0x36, 0x45, 0x66, 0xd4, 0xba, 0x98, 0x58, 0xc1, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x63, 0x30, 0x61, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x44, 0x9e, 0x48, 0xf5, 0xcc, 0x6d, 0x48, 0xd4, 0xa0, 0x4b, 0x7f, 0xfe, 0x59, 0x24, 0x2f, 0x83, 0x97, 0x99, 0x9a, 0x86, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x44, 0x9e, 0x48, 0xf5, 0xcc, 0x6d, 0x48, 0xd4, 0xa0, 0x4b, 0x7f, 0xfe, 0x59, 0x24, 0x2f, 0x83, 0x97, 0x99, 0x9a, 0x86, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x05, 0x3e, 0x35, 0x5c, 0x15, 0x70, 0x9b, 0xc9, 0xc7, 0x73, 0x61, 0x6f, 0x72, 0x2b, 0xd4, 0xc2, 0x8f, 0xf2, 0x43, 0x5d, 0x02, 0xce, 0xc4, 0x94, 0xb9, 0x94, 0x11, 0x83, 0x67, 0x5d, 0xe2, 0x67, 0x6c, 0x75, 0x76, 0xbf, 0xbb, 0x0c, 0xaa, 0x36, 0xc6, 0xad, 0x47, 0x93, 0x63, 0xdc, 0x1e, 0x7e, 0xd6, 0xde, 0x2e, 0xfe, 0xe9, 0x19, 0x32, 0x38, 0x03, 0x7f, 0x14, 0xf6, 0x00, 0x73, 0x2c, 0x59, 0xb1, 0x21, 0x06, 0xe1, 0xfb, 0xac, 0x18, 0x95, 0x0c, 0xa3, 0xff, 0x99, 0x96, 0xf7, 0x2b, 0x27, 0x9b, 0xd5, 0x24, 0xcc, 0x1d, 0xdd, 0xc1, 0x3a, 0xe0, 0x98, 0x44, 0xb0, 0xc4, 0xe4, 0x3e, 0x77, 0xb1, 0x73, 0xa9, 0x64, 0x2c, 0xf6, 0x1c, 0x01, 0x7c, 0x3f, 0x5d, 0x45, 0x85, 0xc0, 0x85, 0xe7, 0x25, 0x8f, 0x95, 0xdc, 0x17, 0xf3, 0x3c, 0x9f, 0x1a, 0x6e, 0xb0, 0xca, 0xe3, 0x1d, 0x2a, 0xe9, 0x4c, 0x63, 0xfa, 0x24, 0x61, 0x62, 0xd6, 0xda, 0x7e, 0xb6, 0x1c, 0x6c, 0xf5, 0x02, 0x1d, 0xd4, 0x2a, 0xdd, 0x55, 0x90, 0xeb, 0x2a, 0x11, 0x47, 0x3c, 0x2e, 0x5e, 0x74, 0xb2, 0x82, 0x22, 0xa5, 0x7d, 0x53, 0x1f, 0x45, 0xec, 0x27, 0x91, 0x7d, 0xe7, 0x22, 0x16, 0xe8, 0xc0, 0x68, 0x36, 0xd8, 0xc6, 0xf1, 0x4f, 0x80, 0x44, 0x32, 0xf9, 0xe1, 0xd1, 0xd1, 0x1d, 0xaa, 0xde, 0xa8, 0xab, 0x9c, 0x04, 0xaf, 0xad, 0x20, 0x0e, 0x64, 0x98, 0x4d, 0xa5, 0x6b, 0xc0, 0x48, 0x58, 0x96, 0x69, 0x4d, 0xdc, 0x07, 0x8c, 0x51, 0x93, 0xa2, 0xdf, 0x9f, 0x0f, 0x3d, 0x8b, 0x60, 0xb4, 0x82, 0x8d, 0xaa, 0x08, 0x4e, 0x62, 0x45, 0xe0, 0xf9, 0x0b, 0xd2, 0xe0, 0xe0, 0x3c, 0x5b, 0xde, 0x5c, 0x71, 0x27, 0x25, 0xc2, 0xe6, 0x03, 0x81, 0x8b, 0x10, 0x53, 0xe3, 0xc7, 0x55, 0xa2, 0xb4, 0x9f, 0xd7, 0xe6, 0x30, 0x82, 0x06, 0x2f, 0x30, 0x82, 0x04, 0x17, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x25, 0xa1, 0xdf, 0xca, 0x33, 0xcb, 0x59, 0x02, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0xa4, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x50, 0x41, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x06, 0x50, 0x61, 0x6e, 0x61, 0x6d, 0x61, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x0b, 0x50, 0x61, 0x6e, 0x61, 0x6d, 0x61, 0x20, 0x43, 0x69, 0x74, 0x79, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x1b, 0x54, 0x72, 0x75, 0x73, 0x74, 0x43, 0x6f, 0x72, 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x53, 0x2e, 0x20, 0x64, 0x65, 0x20, 0x52, 0x2e, 0x4c, 0x2e, 0x31, 0x27, 0x30, 0x25, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x1e, 0x54, 0x72, 0x75, 0x73, 0x74, 0x43, 0x6f, 0x72, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x16, 0x54, 0x72, 0x75, 0x73, 0x74, 0x43, 0x6f, 0x72, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x43, 0x65, 0x72, 0x74, 0x20, 0x43, 0x41, 0x2d, 0x32, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x36, 0x30, 0x32, 0x30, 0x34, 0x31, 0x32, 0x33, 0x32, 0x32, 0x33, 0x5a, 0x17, 0x0d, 0x33, 0x34, 0x31, 0x32, 0x33, 0x31, 0x31, 0x37, 0x32, 0x36, 0x33, 0x39, 0x5a, 0x30, 0x81, 0xa4, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x50, 0x41, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x06, 0x50, 0x61, 0x6e, 0x61, 0x6d, 0x61, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x0b, 0x50, 0x61, 0x6e, 0x61, 0x6d, 0x61, 0x20, 0x43, 0x69, 0x74, 0x79, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x1b, 0x54, 0x72, 0x75, 0x73, 0x74, 0x43, 0x6f, 0x72, 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x53, 0x2e, 0x20, 0x64, 0x65, 0x20, 0x52, 0x2e, 0x4c, 0x2e, 0x31, 0x27, 0x30, 0x25, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x1e, 0x54, 0x72, 0x75, 0x73, 0x74, 0x43, 0x6f, 0x72, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x16, 0x54, 0x72, 0x75, 0x73, 0x74, 0x43, 0x6f, 0x72, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x43, 0x65, 0x72, 0x74, 0x20, 0x43, 0x41, 0x2d, 0x32, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xa7, 0x20, 0x6e, 0xc2, 0x2a, 0xa2, 0x62, 0x24, 0x95, 0x90, 0x76, 0xc8, 0x38, 0x7e, 0x80, 0xd2, 0xab, 0xc1, 0x9b, 0x65, 0x05, 0x94, 0xf4, 0xc1, 0x0a, 0x10, 0xd5, 0x02, 0xac, 0xed, 0x9f, 0x93, 0xc7, 0x87, 0xc8, 0xb0, 0x27, 0x2b, 0x42, 0x0c, 0x3d, 0x0a, 0x3e, 0x41, 0x5a, 0x9e, 0x75, 0xdd, 0x8d, 0xca, 0xe0, 0x9b, 0xec, 0x68, 0x32, 0xa4, 0x69, 0x92, 0x68, 0x8c, 0x0b, 0x81, 0x0e, 0x56, 0xa0, 0x3e, 0x1a, 0xdd, 0x2c, 0x25, 0x14, 0x82, 0x2f, 0x97, 0xd3, 0x64, 0x46, 0xf4, 0x54, 0xa9, 0xdc, 0x3a, 0x54, 0x2d, 0x31, 0x2b, 0x99, 0x82, 0xf2, 0xd9, 0x2a, 0xd7, 0xef, 0x71, 0x00, 0xb8, 0x31, 0xa4, 0xbe, 0x7a, 0x24, 0x07, 0xc3, 0x42, 0x20, 0xf2, 0x8a, 0xd4, 0x92, 0x04, 0x1b, 0x65, 0x56, 0x4c, 0x6c, 0xd4, 0xfb, 0xb6, 0x61, 0x5a, 0x47, 0x23, 0xb4, 0xd8, 0x69, 0xb4, 0xb7, 0x3a, 0xd0, 0x74, 0x3c, 0x0c, 0x75, 0xa1, 0x8c, 0x4e, 0x76, 0xa1, 0xe9, 0xdb, 0x2a, 0xa5, 0x3b, 0xfa, 0xce, 0xb0, 0xff, 0x7e, 0x6a, 0x28, 0xfd, 0x27, 0x1c, 0xc8, 0xb1, 0xe9, 0x29, 0xf1, 0x57, 0x6e, 0x64, 0xb4, 0xd0, 0xc1, 0x15, 0x6d, 0x0e, 0xbe, 0x2e, 0x0e, 0x46, 0xc8, 0x5e, 0xf4, 0x51, 0xfe, 0xef, 0x0e, 0x63, 0x3a, 0x3b, 0x71, 0xba, 0xcf, 0x6f, 0x59, 0xca, 0x0c, 0xe3, 0x9b, 0x5d, 0x49, 0xb8, 0x4c, 0xe2, 0x57, 0xb1, 0x98, 0x8a, 0x42, 0x57, 0x9c, 0x76, 0xef, 0xef, 0xbd, 0xd1, 0x68, 0xa8, 0xd2, 0xf4, 0x09, 0xbb, 0x77, 0x35, 0xbe, 0x25, 0x82, 0x08, 0xc4, 0x16, 0x2c, 0x44, 0x20, 0x56, 0xa9, 0x44, 0x11, 0x77, 0xef, 0x5d, 0xb4, 0x1d, 0xaa, 0x5e, 0x6b, 0x3e, 0x8b, 0x32, 0xf6, 0x07, 0x2f, 0x57, 0x04, 0x92, 0xca, 0xf5, 0xfe, 0x9d, 0xc2, 0xe9, 0xe8, 0xb3, 0x8e, 0x4c, 0x4b, 0x02, 0x31, 0xd9, 0xe4, 0x3c, 0x48, 0x82, 0x27, 0xf7, 0x18, 0x82, 0x76, 0x48, 0x3a, 0x71, 0xb1, 0x13, 0xa1, 0x39, 0xd5, 0x2e, 0xc5, 0x34, 0xc2, 0x1d, 0x62, 0x85, 0xdf, 0x03, 0xfe, 0x4d, 0xf4, 0xaf, 0x3d, 0xdf, 0x5c, 0x5b, 0x8d, 0xfa, 0x70, 0xe1, 0xa5, 0x7e, 0x27, 0xc7, 0x86, 0x2e, 0x6a, 0x8f, 0x12, 0xc6, 0x84, 0x5e, 0x43, 0x51, 0x50, 0x9c, 0x19, 0x9b, 0x78, 0xe6, 0xfc, 0xf6, 0xed, 0x47, 0x7e, 0x7b, 0x3d, 0x66, 0xef, 0x13, 0x13, 0x88, 0x5f, 0x3c, 0xa1, 0x63, 0xfb, 0xf9, 0xac, 0x87, 0x35, 0x9f, 0xf3, 0x82, 0x9e, 0xa4, 0x3f, 0x0a, 0x9c, 0x31, 0x69, 0x8b, 0x99, 0xa4, 0x88, 0x4a, 0x8e, 0x6e, 0x66, 0x4d, 0xef, 0x16, 0xc4, 0x0f, 0x79, 0x28, 0x21, 0x60, 0x0d, 0x85, 0x16, 0x7d, 0xd7, 0x54, 0x38, 0xf1, 0x92, 0x56, 0xfd, 0xb5, 0x33, 0x4c, 0x83, 0xdc, 0xd7, 0x10, 0x9f, 0x4b, 0xfd, 0xc6, 0xf8, 0x42, 0xbd, 0xba, 0x7c, 0x73, 0x02, 0xe0, 0xff, 0x7d, 0xcd, 0x5b, 0xe1, 0xd4, 0xac, 0x61, 0x7b, 0x57, 0xd5, 0x4a, 0x7b, 0x5b, 0xd4, 0x85, 0x58, 0x27, 0x5d, 0xbf, 0xf8, 0x2b, 0x60, 0xac, 0xa0, 0x26, 0xae, 0x14, 0x21, 0x27, 0xc6, 0x77, 0x9a, 0x33, 0x80, 0x3c, 0x5e, 0x46, 0x3f, 0xf7, 0xc3, 0xb1, 0xa3, 0x86, 0x33, 0xc6, 0xe8, 0x5e, 0x0d, 0xb9, 0x35, 0x2c, 0xaa, 0x46, 0xc1, 0x85, 0x02, 0x75, 0x80, 0xa0, 0xeb, 0x24, 0xfb, 0x15, 0xaa, 0xe4, 0x67, 0x7f, 0x6e, 0x77, 0x3f, 0xf4, 0x04, 0x8a, 0x2f, 0x7c, 0x7b, 0xe3, 0x17, 0x61, 0xf0, 0xdd, 0x09, 0xa9, 0x20, 0xc8, 0xbe, 0x09, 0xa4, 0xd0, 0x7e, 0x44, 0xc3, 0xb2, 0x30, 0x4a, 0x38, 0xaa, 0xa9, 0xec, 0x18, 0x9a, 0x07, 0x82, 0x2b, 0xdb, 0xb8, 0x9c, 0x18, 0xad, 0xda, 0xe0, 0x46, 0x17, 0xac, 0xcf, 0x5d, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x63, 0x30, 0x61, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xd9, 0xfe, 0x21, 0x40, 0x6e, 0x94, 0x9e, 0xbc, 0x9b, 0x3d, 0x9c, 0x7d, 0x98, 0x20, 0x19, 0xe5, 0x8c, 0x30, 0x62, 0xb2, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xd9, 0xfe, 0x21, 0x40, 0x6e, 0x94, 0x9e, 0xbc, 0x9b, 0x3d, 0x9c, 0x7d, 0x98, 0x20, 0x19, 0xe5, 0x8c, 0x30, 0x62, 0xb2, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x9e, 0x45, 0x9e, 0x0c, 0x3b, 0xb6, 0xef, 0xe1, 0x3a, 0xc8, 0x7c, 0xd1, 0x00, 0x3d, 0xcf, 0xe2, 0xea, 0x06, 0xb5, 0xb2, 0x3a, 0xbb, 0x06, 0x4b, 0x68, 0x7a, 0xd0, 0x23, 0x97, 0x74, 0xa7, 0x2c, 0xf0, 0x08, 0xd8, 0x79, 0x5a, 0xd7, 0x5a, 0x84, 0x8a, 0xd8, 0x12, 0x9a, 0x1b, 0xd9, 0x7d, 0x5c, 0x4d, 0x70, 0xc5, 0xa5, 0xf9, 0xab, 0xe5, 0xa3, 0x89, 0x89, 0xdd, 0x01, 0xfa, 0xec, 0xdd, 0xf9, 0xe9, 0x92, 0x97, 0xdb, 0xb0, 0x46, 0x42, 0xf3, 0xd3, 0x62, 0xaa, 0x95, 0xfe, 0x31, 0x67, 0x14, 0x69, 0x58, 0x90, 0x0a, 0xaa, 0x0b, 0xee, 0x37, 0x23, 0xc7, 0x50, 0x51, 0xb4, 0xf5, 0x7e, 0x9e, 0xe3, 0x7b, 0xf7, 0xe4, 0xcc, 0x42, 0x32, 0x2d, 0x49, 0x0c, 0xcb, 0xff, 0x49, 0x0c, 0x9b, 0x1e, 0x34, 0xfd, 0x6e, 0x6e, 0x96, 0x8a, 0x79, 0x03, 0xb6, 0x6f, 0xdb, 0x09, 0xcb, 0xfd, 0x5f, 0x65, 0x14, 0x37, 0xe1, 0x38, 0xf5, 0xf3, 0x61, 0x16, 0x58, 0xe4, 0xb5, 0x6d, 0x0d, 0x0b, 0x04, 0x1b, 0x3f, 0x50, 0x2d, 0x7f, 0xb3, 0xc7, 0x7a, 0x1a, 0x16, 0x80, 0x60, 0xf8, 0x8a, 0x1f, 0xe9, 0x1b, 0x2a, 0xc6, 0xf9, 0xba, 0x01, 0x1a, 0x69, 0xbf, 0xd2, 0x58, 0xc7, 0x54, 0x57, 0x08, 0x8f, 0xe1, 0x39, 0x60, 0x77, 0x4b, 0xac, 0x59, 0x84, 0x1a, 0x88, 0xf1, 0xdd, 0xcb, 0x4f, 0x78, 0xd7, 0xe7, 0xe1, 0x33, 0x2d, 0xfc, 0xee, 0x41, 0xfa, 0x20, 0xb0, 0xbe, 0xcb, 0xf7, 0x38, 0x94, 0xc0, 0xe1, 0xd0, 0x85, 0x0f, 0xbb, 0xed, 0x2c, 0x73, 0xab, 0xed, 0xfe, 0x92, 0x76, 0x1a, 0x64, 0x7f, 0x5b, 0x0d, 0x33, 0x09, 0x07, 0x33, 0x7b, 0x06, 0x3f, 0x11, 0xa4, 0x5c, 0x70, 0x3c, 0x85, 0xc0, 0xcf, 0xe3, 0x90, 0xa8, 0x83, 0x77, 0xfa, 0xdb, 0xe6, 0xc5, 0x8c, 0x68, 0x67, 0x10, 0x67, 0xa5, 0x52, 0x2d, 0xf0, 0xc4, 0x99, 0x8f, 0x7f, 0xbf, 0xd1, 0x6b, 0xe2, 0xb5, 0x47, 0xd6, 0xd9, 0xd0, 0x85, 0x99, 0x4d, 0x94, 0x9b, 0x0f, 0x4b, 0x8d, 0xee, 0x00, 0x5a, 0x47, 0x1d, 0x11, 0x03, 0xac, 0x41, 0x18, 0xaf, 0x87, 0xb7, 0x6f, 0x0c, 0x3a, 0x8f, 0xca, 0xcf, 0xdc, 0x03, 0xc1, 0xa2, 0x09, 0xc8, 0xe5, 0xfd, 0x80, 0x5e, 0xc8, 0x60, 0x42, 0x01, 0x1b, 0x1a, 0x53, 0x5a, 0xbb, 0x37, 0xa6, 0xb7, 0xbc, 0xba, 0x84, 0xe9, 0x1e, 0x6c, 0x1a, 0xd4, 0x64, 0xda, 0xd4, 0x43, 0xfe, 0x93, 0x8b, 0x4b, 0xf2, 0x2c, 0x79, 0x16, 0x10, 0xd4, 0x93, 0x0b, 0x88, 0x8f, 0xa1, 0xd8, 0x86, 0x14, 0x46, 0x91, 0x47, 0x9b, 0x28, 0x24, 0xef, 0x57, 0x52, 0x4e, 0x5c, 0x42, 0x9c, 0xaa, 0xf7, 0x49, 0xec, 0x27, 0xe8, 0x40, 0x1e, 0xb3, 0xa6, 0x89, 0x22, 0x72, 0x9c, 0xf5, 0x0d, 0x33, 0xb4, 0x58, 0xa3, 0x30, 0x3b, 0xdd, 0xd4, 0x6a, 0x54, 0x93, 0xbe, 0x1a, 0x4d, 0xf3, 0x93, 0x94, 0xf7, 0xfc, 0x84, 0x0b, 0x3f, 0x84, 0x20, 0x5c, 0x34, 0x03, 0x44, 0xc5, 0xda, 0xad, 0xbc, 0x0a, 0xc1, 0x02, 0xcf, 0x1e, 0xe5, 0x94, 0xd9, 0xf3, 0x8e, 0x5b, 0xd8, 0x4c, 0xf0, 0x9d, 0xec, 0x61, 0x17, 0xbb, 0x14, 0x32, 0x54, 0x0c, 0x02, 0x29, 0x93, 0x1e, 0x92, 0x86, 0xf6, 0x7f, 0xef, 0xe7, 0x92, 0x05, 0x0e, 0x59, 0xdd, 0x99, 0x08, 0x2e, 0x2e, 0xfa, 0x9c, 0x00, 0x52, 0xd3, 0xc5, 0x66, 0x29, 0xe4, 0xa7, 0x97, 0x44, 0xa4, 0x0e, 0x28, 0x81, 0x13, 0x35, 0xc5, 0xf6, 0x6f, 0x64, 0xe6, 0x41, 0xc4, 0xd5, 0x2f, 0xcc, 0x34, 0x45, 0x25, 0xcf, 0x41, 0x00, 0x96, 0x3d, 0x4a, 0x2e, 0xc2, 0x96, 0x98, 0x4f, 0x4e, 0x4a, 0x9c, 0x97, 0xb7, 0xdb, 0x1f, 0x92, 0x32, 0xc8, 0xff, 0x0f, 0x51, 0x6e, 0xd6, 0xec, 0x09, 0x30, 0x82, 0x04, 0x30, 0x30, 0x82, 0x03, 0x18, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00, 0xda, 0x9b, 0xec, 0x71, 0xf3, 0x03, 0xb0, 0x19, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0xa4, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x50, 0x41, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x06, 0x50, 0x61, 0x6e, 0x61, 0x6d, 0x61, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x0b, 0x50, 0x61, 0x6e, 0x61, 0x6d, 0x61, 0x20, 0x43, 0x69, 0x74, 0x79, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x1b, 0x54, 0x72, 0x75, 0x73, 0x74, 0x43, 0x6f, 0x72, 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x53, 0x2e, 0x20, 0x64, 0x65, 0x20, 0x52, 0x2e, 0x4c, 0x2e, 0x31, 0x27, 0x30, 0x25, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x1e, 0x54, 0x72, 0x75, 0x73, 0x74, 0x43, 0x6f, 0x72, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x16, 0x54, 0x72, 0x75, 0x73, 0x74, 0x43, 0x6f, 0x72, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x43, 0x65, 0x72, 0x74, 0x20, 0x43, 0x41, 0x2d, 0x31, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x36, 0x30, 0x32, 0x30, 0x34, 0x31, 0x32, 0x33, 0x32, 0x31, 0x36, 0x5a, 0x17, 0x0d, 0x32, 0x39, 0x31, 0x32, 0x33, 0x31, 0x31, 0x37, 0x32, 0x33, 0x31, 0x36, 0x5a, 0x30, 0x81, 0xa4, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x50, 0x41, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x06, 0x50, 0x61, 0x6e, 0x61, 0x6d, 0x61, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x0b, 0x50, 0x61, 0x6e, 0x61, 0x6d, 0x61, 0x20, 0x43, 0x69, 0x74, 0x79, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x1b, 0x54, 0x72, 0x75, 0x73, 0x74, 0x43, 0x6f, 0x72, 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x53, 0x2e, 0x20, 0x64, 0x65, 0x20, 0x52, 0x2e, 0x4c, 0x2e, 0x31, 0x27, 0x30, 0x25, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x1e, 0x54, 0x72, 0x75, 0x73, 0x74, 0x43, 0x6f, 0x72, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x16, 0x54, 0x72, 0x75, 0x73, 0x74, 0x43, 0x6f, 0x72, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x43, 0x65, 0x72, 0x74, 0x20, 0x43, 0x41, 0x2d, 0x31, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xbf, 0x8e, 0xb7, 0x95, 0xe2, 0xc2, 0x26, 0x12, 0x6b, 0x33, 0x19, 0xc7, 0x40, 0x58, 0x0a, 0xab, 0x59, 0xaa, 0x8d, 0x00, 0xa3, 0xfc, 0x80, 0xc7, 0x50, 0x7b, 0x8e, 0xd4, 0x20, 0x26, 0xba, 0x32, 0x12, 0xd8, 0x23, 0x54, 0x49, 0x25, 0x10, 0x22, 0x98, 0x9d, 0x46, 0xd2, 0xc1, 0xc9, 0x9e, 0x4e, 0x1b, 0x2e, 0x2c, 0x0e, 0x38, 0xf3, 0x1a, 0x25, 0x68, 0x1c, 0xa6, 0x5a, 0x05, 0xe6, 0x1e, 0x8b, 0x48, 0xbf, 0x98, 0x96, 0x74, 0x3e, 0x69, 0xca, 0xe9, 0xb5, 0x78, 0xa5, 0x06, 0xbc, 0xd5, 0x00, 0x5e, 0x09, 0x0a, 0xf2, 0x27, 0x7a, 0x52, 0xfc, 0x2d, 0xd5, 0xb1, 0xea, 0xb4, 0x89, 0x61, 0x24, 0xf3, 0x1a, 0x13, 0xdb, 0xa9, 0xcf, 0x52, 0xed, 0x0c, 0x24, 0xba, 0xb9, 0x9e, 0xec, 0x7e, 0x00, 0x74, 0xfa, 0x93, 0xad, 0x6c, 0x29, 0x92, 0xae, 0x51, 0xb4, 0xbb, 0xd3, 0x57, 0xbf, 0xb3, 0xf3, 0xa8, 0x8d, 0x9c, 0xf4, 0x24, 0x4b, 0x2a, 0xd6, 0x99, 0x9e, 0xf4, 0x9e, 0xfe, 0xc0, 0x7e, 0x42, 0x3a, 0xe7, 0x0b, 0x95, 0x53, 0xda, 0xb7, 0x68, 0x0e, 0x90, 0x4c, 0xfb, 0x70, 0x3f, 0x8f, 0x4a, 0x2c, 0x94, 0xf3, 0x26, 0xdd, 0x63, 0x69, 0xa9, 0x94, 0xd8, 0x10, 0x4e, 0xc5, 0x47, 0x08, 0x90, 0x99, 0x1b, 0x17, 0x4d, 0xb9, 0x6c, 0x6e, 0xef, 0x60, 0x95, 0x11, 0x8e, 0x21, 0x80, 0xb5, 0xbd, 0xa0, 0x73, 0xd8, 0xd0, 0xb2, 0x77, 0xc4, 0x45, 0xea, 0x5a, 0x26, 0xfb, 0x66, 0x76, 0x76, 0xf8, 0x06, 0x1f, 0x61, 0x6d, 0x0f, 0x55, 0xc5, 0x83, 0xb7, 0x10, 0x56, 0x72, 0x06, 0x07, 0xa5, 0xf3, 0xb1, 0x1a, 0x03, 0x05, 0x64, 0x0e, 0x9d, 0x5a, 0x8a, 0xd6, 0x86, 0x70, 0x1b, 0x24, 0xde, 0xfe, 0x28, 0x8a, 0x2b, 0xd0, 0x6a, 0xb0, 0xfc, 0x7a, 0xa2, 0xdc, 0xb2, 0x79, 0x0e, 0x8b, 0x65, 0x0f, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x63, 0x30, 0x61, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xee, 0x6b, 0x49, 0x3c, 0x7a, 0x3f, 0x0d, 0xe3, 0xb1, 0x09, 0xb7, 0x8a, 0xc8, 0xab, 0x19, 0x9f, 0x73, 0x33, 0x50, 0xe7, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xee, 0x6b, 0x49, 0x3c, 0x7a, 0x3f, 0x0d, 0xe3, 0xb1, 0x09, 0xb7, 0x8a, 0xc8, 0xab, 0x19, 0x9f, 0x73, 0x33, 0x50, 0xe7, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x25, 0x18, 0xd4, 0x91, 0x8f, 0x13, 0xee, 0x8f, 0x1e, 0x1d, 0x11, 0x53, 0xda, 0x2d, 0x44, 0x29, 0x19, 0xa0, 0x1e, 0x6b, 0x31, 0x9e, 0x4d, 0x0e, 0x9e, 0xad, 0x3d, 0x5c, 0x41, 0x6f, 0x95, 0x2b, 0x24, 0xa1, 0x79, 0x98, 0x3a, 0x38, 0x36, 0xfb, 0xbb, 0x66, 0x9e, 0x48, 0xff, 0x90, 0x90, 0xef, 0x3d, 0xd4, 0xb8, 0x9b, 0xb4, 0x87, 0x75, 0x3f, 0x20, 0x9b, 0xce, 0x72, 0xcf, 0xa1, 0x55, 0xc1, 0x4d, 0x64, 0xa2, 0x19, 0x06, 0xa1, 0x07, 0x33, 0x0c, 0x0b, 0x29, 0xe5, 0xf1, 0xea, 0xab, 0xa3, 0xec, 0xb5, 0x0a, 0x74, 0x90, 0xc7, 0x7d, 0x72, 0xf2, 0xd7, 0x5c, 0x9f, 0x91, 0xef, 0x91, 0x8b, 0xb7, 0xdc, 0xed, 0x66, 0xa2, 0xcf, 0x8e, 0x66, 0x3b, 0xbc, 0x9f, 0x3a, 0x02, 0xe0, 0x27, 0xdd, 0x16, 0x98, 0xc0, 0x95, 0xd4, 0x0a, 0xa4, 0xe4, 0x81, 0x9a, 0x75, 0x94, 0x35, 0x9c, 0x90, 0x5f, 0x88, 0x37, 0x06, 0xad, 0x59, 0x95, 0x0a, 0xb0, 0xd1, 0x67, 0xd3, 0x19, 0xca, 0x89, 0xe7, 0x32, 0x5a, 0x36, 0x1c, 0x3e, 0x82, 0xa8, 0x5a, 0x93, 0xbe, 0xc6, 0xd0, 0x64, 0x91, 0xb6, 0xcf, 0xd9, 0xb6, 0x18, 0xcf, 0xdb, 0x7e, 0xd2, 0x65, 0xa3, 0xa6, 0xc4, 0x8e, 0x17, 0x31, 0xc1, 0xfb, 0x7e, 0x76, 0xdb, 0xd3, 0x85, 0xe3, 0x58, 0xb2, 0x77, 0x7a, 0x76, 0x3b, 0x6c, 0x2f, 0x50, 0x1c, 0xe7, 0xdb, 0xf6, 0x67, 0x79, 0x1f, 0xf5, 0x82, 0x95, 0x9a, 0x07, 0xa7, 0x14, 0xaf, 0x8f, 0xdc, 0x28, 0x21, 0x67, 0x09, 0xd2, 0xd6, 0x4d, 0x5a, 0x1c, 0x19, 0x1c, 0x8e, 0x77, 0x5c, 0xc3, 0x94, 0x24, 0x3d, 0x32, 0x6b, 0x4b, 0x7e, 0xd4, 0x78, 0x94, 0x83, 0xbe, 0x37, 0x4d, 0xce, 0x5f, 0xc7, 0x1e, 0x4e, 0x3c, 0xe0, 0x89, 0x33, 0x95, 0x0b, 0x0f, 0xa5, 0x32, 0xd6, 0x3c, 0x5a, 0x79, 0x2c, 0x19, 0x30, 0x82, 0x05, 0x5a, 0x30, 0x82, 0x03, 0x42, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x4f, 0xd2, 0x2b, 0x8f, 0xf5, 0x64, 0xc8, 0x33, 0x9e, 0x4f, 0x34, 0x58, 0x66, 0x23, 0x70, 0x60, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x47, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x4e, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x08, 0x55, 0x6e, 0x69, 0x54, 0x72, 0x75, 0x73, 0x74, 0x31, 0x25, 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x1c, 0x55, 0x43, 0x41, 0x20, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x35, 0x30, 0x33, 0x31, 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x33, 0x38, 0x31, 0x32, 0x33, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x47, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x4e, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x08, 0x55, 0x6e, 0x69, 0x54, 0x72, 0x75, 0x73, 0x74, 0x31, 0x25, 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x1c, 0x55, 0x43, 0x41, 0x20, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xa9, 0x09, 0x07, 0x28, 0x13, 0x02, 0xb0, 0x99, 0xe0, 0x64, 0xaa, 0x1e, 0x43, 0x16, 0x7a, 0x73, 0xb1, 0x91, 0xa0, 0x75, 0x3e, 0xa8, 0xfa, 0xe3, 0x38, 0x00, 0x7a, 0xec, 0x89, 0x6a, 0x20, 0x0f, 0x8b, 0xc5, 0xb0, 0x9b, 0x33, 0x03, 0x5a, 0x86, 0xc6, 0x58, 0x86, 0xd5, 0xc1, 0x85, 0xbb, 0x4f, 0xc6, 0x9c, 0x40, 0x4d, 0xca, 0xbe, 0xee, 0x69, 0x96, 0xb8, 0xad, 0x81, 0x30, 0x9a, 0x7c, 0x92, 0x05, 0xeb, 0x05, 0x2b, 0x9a, 0x48, 0xd0, 0xb8, 0x76, 0x3e, 0x96, 0xc8, 0x20, 0xbb, 0xd2, 0xb0, 0xf1, 0x8f, 0xd8, 0xac, 0x45, 0x46, 0xff, 0xaa, 0x67, 0x60, 0xb4, 0x77, 0x7e, 0x6a, 0x1f, 0x3c, 0x1a, 0x52, 0x7a, 0x04, 0x3d, 0x07, 0x3c, 0x85, 0x0d, 0x84, 0xd0, 0x1f, 0x76, 0x0a, 0xf7, 0x6a, 0x14, 0xdf, 0x72, 0xe3, 0x34, 0x7c, 0x57, 0x4e, 0x56, 0x01, 0x3e, 0x79, 0xf1, 0xaa, 0x29, 0x3b, 0x6c, 0xfa, 0xf8, 0x8f, 0x6d, 0x4d, 0xc8, 0x35, 0xdf, 0xae, 0xeb, 0xdc, 0x24, 0xee, 0x79, 0x45, 0xa7, 0x85, 0xb6, 0x05, 0x88, 0xde, 0x88, 0x5d, 0x25, 0x7c, 0x97, 0x64, 0x67, 0x09, 0xd9, 0xbf, 0x5a, 0x15, 0x05, 0x86, 0xf3, 0x09, 0x1e, 0xec, 0x58, 0x32, 0x33, 0x11, 0xf3, 0x77, 0x64, 0xb0, 0x76, 0x1f, 0xe4, 0x10, 0x35, 0x17, 0x1b, 0xf2, 0x0e, 0xb1, 0x6c, 0xa4, 0x2a, 0xa3, 0x73, 0xfc, 0x09, 0x1f, 0x1e, 0x32, 0x19, 0x53, 0x11, 0xe7, 0xd9, 0xb3, 0x2c, 0x2e, 0x76, 0x2e, 0xa1, 0xa3, 0xde, 0x7e, 0x6a, 0x88, 0x09, 0xe8, 0xf2, 0x07, 0x8a, 0xf8, 0xb2, 0xcd, 0x10, 0xe7, 0xe2, 0x73, 0x40, 0x93, 0xbb, 0x08, 0xd1, 0x3f, 0xe1, 0xfc, 0x0b, 0x94, 0xb3, 0x25, 0xef, 0x7c, 0xa6, 0xd7, 0xd1, 0xaf, 0x9f, 0xff, 0x96, 0x9a, 0xf5, 0x91, 0x7b, 0x98, 0x0b, 0x77, 0xd4, 0x7e, 0xe8, 0x07, 0xd2, 0x62, 0xb5, 0x95, 0x39, 0xe3, 0xf3, 0xf1, 0x6d, 0x0f, 0x0e, 0x65, 0x84, 0x8a, 0x63, 0x54, 0xc5, 0x80, 0xb6, 0xe0, 0x9e, 0x4b, 0x7d, 0x47, 0x26, 0xa7, 0x01, 0x08, 0x5d, 0xd1, 0x88, 0x9e, 0xd7, 0xc3, 0x32, 0x44, 0xfa, 0x82, 0x4a, 0x0a, 0x68, 0x54, 0x7f, 0x38, 0x53, 0x03, 0xcc, 0xa4, 0x00, 0x33, 0x64, 0x51, 0x59, 0x0b, 0xa3, 0x82, 0x91, 0x7a, 0x5e, 0xec, 0x16, 0xc2, 0xf3, 0x2a, 0xe6, 0x62, 0xda, 0x2a, 0xdb, 0x59, 0x62, 0x10, 0x25, 0x4a, 0x2a, 0x81, 0x0b, 0x47, 0x07, 0x43, 0x06, 0x70, 0x87, 0xd2, 0xfa, 0x93, 0x11, 0x29, 0x7a, 0x48, 0x4d, 0xeb, 0x94, 0xc7, 0x70, 0x4d, 0xaf, 0x67, 0xd5, 0x51, 0xb1, 0x80, 0x20, 0x01, 0x01, 0xb4, 0x7a, 0x08, 0xa6, 0x90, 0x7f, 0x4e, 0xe0, 0xef, 0x07, 0x41, 0x87, 0xaf, 0x6a, 0xa5, 0x5e, 0x8b, 0xfb, 0xcf, 0x50, 0xb2, 0x9a, 0x54, 0xaf, 0xc3, 0x89, 0xba, 0x58, 0x2d, 0xf5, 0x30, 0x98, 0xb1, 0x36, 0x72, 0x39, 0x7e, 0x49, 0x04, 0xfd, 0x29, 0xa7, 0x4c, 0x79, 0xe4, 0x05, 0x57, 0xdb, 0x94, 0xb9, 0x16, 0x53, 0x8d, 0x46, 0xb3, 0x1d, 0x95, 0x61, 0x57, 0x56, 0x7f, 0xaf, 0xf0, 0x16, 0x5b, 0x61, 0x58, 0x6f, 0x36, 0x50, 0x11, 0x0b, 0xd8, 0xac, 0x2b, 0x95, 0x16, 0x1a, 0x0e, 0x1f, 0x08, 0xcd, 0x36, 0x34, 0x65, 0x10, 0x62, 0x66, 0xd5, 0x80, 0x5f, 0x14, 0x20, 0x5f, 0x2d, 0x0c, 0xa0, 0x78, 0x0a, 0x68, 0xd6, 0x2c, 0xd7, 0xe9, 0x6f, 0x2b, 0xd2, 0x4a, 0x05, 0x93, 0xfc, 0x9e, 0x6f, 0x6b, 0x67, 0xff, 0x88, 0xf1, 0x4e, 0xa5, 0x69, 0x4a, 0x52, 0x37, 0x05, 0xea, 0xc6, 0x16, 0x8d, 0xd2, 0xc4, 0x99, 0xd1, 0x82, 0x2b, 0x3b, 0xba, 0x35, 0x75, 0xf7, 0x51, 0x51, 0x58, 0xf3, 0xc8, 0x07, 0xdd, 0xe4, 0xb4, 0x03, 0x7f, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xd9, 0x74, 0x3a, 0xe4, 0x30, 0x3d, 0x0d, 0xf7, 0x12, 0xdc, 0x7e, 0x5a, 0x05, 0x9f, 0x1e, 0x34, 0x9a, 0xf7, 0xe1, 0x14, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x36, 0x8d, 0x97, 0xcc, 0x42, 0x15, 0x64, 0x29, 0x37, 0x9b, 0x26, 0x2c, 0xd6, 0xfb, 0xae, 0x15, 0x69, 0x2c, 0x6b, 0x1a, 0x1a, 0xf7, 0x5f, 0xb6, 0xf9, 0x07, 0x4c, 0x59, 0xea, 0xf3, 0xc9, 0xc8, 0xb9, 0xae, 0xcc, 0xba, 0x2e, 0x7a, 0xdc, 0xc0, 0xf5, 0xb0, 0x2d, 0xc0, 0x3b, 0xaf, 0x9f, 0x70, 0x05, 0x11, 0x6a, 0x9f, 0x25, 0x4f, 0x01, 0x29, 0x70, 0xe3, 0xe5, 0x0c, 0xe1, 0xea, 0x5a, 0x7c, 0xdc, 0x49, 0xbb, 0xc1, 0x1e, 0x2a, 0x81, 0xf5, 0x16, 0x4b, 0x72, 0x91, 0xc8, 0xa2, 0x31, 0xb9, 0xaa, 0xda, 0xfc, 0x9d, 0x1f, 0xf3, 0x5d, 0x40, 0x02, 0x13, 0xfc, 0x4e, 0x1c, 0x06, 0xca, 0xb3, 0x14, 0x90, 0x54, 0x17, 0x19, 0x12, 0x1a, 0xf1, 0x1f, 0xd7, 0x0c, 0x69, 0x5a, 0xf6, 0x71, 0x78, 0xf4, 0x94, 0x7d, 0x91, 0x0b, 0x8e, 0xec, 0x90, 0x54, 0x8e, 0xbc, 0x6f, 0xa1, 0x4c, 0xab, 0xfc, 0x74, 0x64, 0xfd, 0x71, 0x9a, 0xf8, 0x41, 0x07, 0xa1, 0xcd, 0x91, 0xe4, 0x3c, 0x9a, 0xe0, 0x9b, 0x32, 0x39, 0x73, 0xab, 0x2a, 0xd5, 0x69, 0xc8, 0x78, 0x91, 0x26, 0x31, 0x7d, 0xe2, 0xc7, 0x30, 0xf1, 0xfc, 0x14, 0x78, 0x77, 0x12, 0x0e, 0x13, 0xf4, 0xdd, 0x16, 0x94, 0xbf, 0x4b, 0x67, 0x7b, 0x70, 0x53, 0x85, 0xca, 0xb0, 0xbb, 0xf3, 0x38, 0x4d, 0x2c, 0x90, 0x39, 0xc0, 0x0d, 0xc2, 0x5d, 0x6b, 0xe9, 0xe2, 0xe5, 0xd5, 0x88, 0x8d, 0xd6, 0x2c, 0xbf, 0xab, 0x1b, 0xbe, 0xb5, 0x28, 0x87, 0x12, 0x17, 0x74, 0x6e, 0xfc, 0x7d, 0xfc, 0x8f, 0xd0, 0x87, 0x26, 0xb0, 0x1b, 0xfb, 0xb9, 0x6c, 0xab, 0xe2, 0x9e, 0x3d, 0x15, 0xc1, 0x3b, 0x2e, 0x67, 0x02, 0x58, 0x91, 0x9f, 0xef, 0xf8, 0x42, 0x1f, 0x2c, 0xb7, 0x68, 0xf5, 0x75, 0xad, 0xcf, 0xb5, 0xf6, 0xff, 0x11, 0x7d, 0xc2, 0xf0, 0x24, 0xa5, 0xad, 0xd3, 0xfa, 0xa0, 0x3c, 0xa9, 0xfa, 0x5d, 0xdc, 0xa5, 0xa0, 0xef, 0x44, 0xa4, 0xbe, 0xd6, 0xe8, 0xe5, 0xe4, 0x13, 0x96, 0x17, 0x7b, 0x06, 0x3e, 0x32, 0xed, 0xc7, 0xb7, 0x42, 0xbc, 0x76, 0xa3, 0xd8, 0x65, 0x38, 0x2b, 0x38, 0x35, 0x51, 0x21, 0x0e, 0x0e, 0x6f, 0x2e, 0x34, 0x13, 0x40, 0xe1, 0x2b, 0x67, 0x0c, 0x6d, 0x4a, 0x41, 0x30, 0x18, 0x23, 0x5a, 0x32, 0x55, 0x99, 0xc9, 0x17, 0xe0, 0x3c, 0xde, 0xf6, 0xec, 0x79, 0xad, 0x2b, 0x58, 0x19, 0xa2, 0xad, 0x2c, 0x22, 0x1a, 0x95, 0x8e, 0xbe, 0x96, 0x90, 0x5d, 0x42, 0x57, 0xc4, 0xf9, 0x14, 0x03, 0x35, 0x2b, 0x1c, 0x2d, 0x51, 0x57, 0x08, 0xa7, 0x3a, 0xde, 0x3f, 0xe4, 0xc8, 0xb4, 0x03, 0x73, 0xc2, 0xc1, 0x26, 0x80, 0xbb, 0x0b, 0x42, 0x1f, 0xad, 0x0d, 0xaf, 0x26, 0x72, 0xda, 0xcc, 0xbe, 0xb3, 0xa3, 0x83, 0x58, 0x0d, 0x82, 0xc5, 0x1f, 0x46, 0x51, 0xe3, 0x9c, 0x18, 0xcc, 0x8d, 0x9b, 0x8d, 0xec, 0x49, 0xeb, 0x75, 0x50, 0xd5, 0x8c, 0x28, 0x59, 0xca, 0x74, 0x34, 0xda, 0x8c, 0x0b, 0x21, 0xab, 0x1e, 0xea, 0x1b, 0xe5, 0xc7, 0xfd, 0x15, 0x3e, 0xc0, 0x17, 0xaa, 0xfb, 0x23, 0x6e, 0x26, 0x46, 0xcb, 0xfa, 0xf9, 0xb1, 0x72, 0x6b, 0x69, 0xcf, 0x22, 0x84, 0x0b, 0x62, 0x0f, 0xac, 0xd9, 0x19, 0x00, 0x94, 0xa2, 0x76, 0x3c, 0xd4, 0x2d, 0x9a, 0xed, 0x04, 0x9e, 0x2d, 0x06, 0x62, 0x10, 0x37, 0x52, 0x1c, 0x85, 0x72, 0x1b, 0x27, 0xe5, 0xcc, 0xc6, 0x31, 0xec, 0x37, 0xec, 0x63, 0x59, 0x9b, 0x0b, 0x1d, 0x76, 0xcc, 0x7e, 0x32, 0x9a, 0x88, 0x95, 0x08, 0x36, 0x52, 0xbb, 0xde, 0x76, 0x5f, 0x76, 0x49, 0x49, 0xad, 0x7f, 0xbd, 0x65, 0x20, 0xb2, 0xc9, 0xc1, 0x2b, 0x76, 0x18, 0x76, 0x9f, 0x56, 0xb1, 0x30, 0x82, 0x05, 0x46, 0x30, 0x82, 0x03, 0x2e, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x5d, 0xdf, 0xb1, 0xda, 0x5a, 0xa3, 0xed, 0x5d, 0xbe, 0x5a, 0x65, 0x20, 0x65, 0x03, 0x90, 0xef, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x3d, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x4e, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x08, 0x55, 0x6e, 0x69, 0x54, 0x72, 0x75, 0x73, 0x74, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x12, 0x55, 0x43, 0x41, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x47, 0x32, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x36, 0x30, 0x33, 0x31, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x34, 0x30, 0x31, 0x32, 0x33, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x3d, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x4e, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x08, 0x55, 0x6e, 0x69, 0x54, 0x72, 0x75, 0x73, 0x74, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x12, 0x55, 0x43, 0x41, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x47, 0x32, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xc5, 0xe6, 0x2b, 0x6f, 0x7c, 0xef, 0x26, 0x05, 0x27, 0xa3, 0x81, 0x24, 0xda, 0x6f, 0xcb, 0x01, 0xf9, 0x99, 0x9a, 0xa9, 0x32, 0xc2, 0x22, 0x87, 0x61, 0x41, 0x91, 0x3b, 0xcb, 0xc3, 0x68, 0x1b, 0x06, 0xc5, 0x4c, 0xa9, 0x2b, 0xc1, 0x67, 0x17, 0x22, 0x1d, 0x2b, 0xed, 0xf9, 0x29, 0x89, 0x93, 0xa2, 0x78, 0xbd, 0x92, 0x6b, 0xa0, 0xa3, 0x0d, 0xa2, 0x7e, 0xca, 0x93, 0xb3, 0xa6, 0xd1, 0x8c, 0x35, 0xd5, 0x75, 0xf9, 0x17, 0xf6, 0xcf, 0x45, 0xc5, 0xe5, 0x7a, 0xec, 0x77, 0x93, 0xa0, 0x8f, 0x23, 0xae, 0x0e, 0x1a, 0x03, 0x7f, 0xbe, 0xd4, 0xd0, 0xed, 0x2e, 0x7b, 0xab, 0x46, 0x23, 0x5b, 0xff, 0x2c, 0xe6, 0x54, 0x7a, 0x94, 0xc0, 0x2a, 0x15, 0xf0, 0xc9, 0x8d, 0xb0, 0x7a, 0x3b, 0x24, 0xe1, 0xd7, 0x68, 0xe2, 0x31, 0x3c, 0x06, 0x33, 0x46, 0xb6, 0x54, 0x11, 0xa6, 0xa5, 0x2f, 0x22, 0x54, 0x2a, 0x58, 0x0d, 0x01, 0x02, 0xf1, 0xfa, 0x15, 0x51, 0x67, 0x6c, 0xc0, 0xfa, 0xd7, 0xb6, 0x1b, 0x7f, 0xd1, 0x56, 0x88, 0x2f, 0x1a, 0x3a, 0x8d, 0x3b, 0xbb, 0x82, 0x11, 0xe0, 0x47, 0x00, 0xd0, 0x52, 0x87, 0xab, 0xfb, 0x86, 0x7e, 0x0f, 0x24, 0x6b, 0x40, 0x9d, 0x34, 0x67, 0xbc, 0x8d, 0xc7, 0x2d, 0x86, 0x6f, 0x79, 0x3e, 0x8e, 0xa9, 0x3c, 0x17, 0x4b, 0x7f, 0xb0, 0x99, 0xe3, 0xb0, 0x71, 0x60, 0xdc, 0x0b, 0xf5, 0x64, 0xc3, 0xce, 0x43, 0xbc, 0x6d, 0x71, 0xb9, 0xd2, 0xde, 0x27, 0x5b, 0x8a, 0xe8, 0xd8, 0xc6, 0xae, 0xe1, 0x59, 0x7d, 0xcf, 0x28, 0x2d, 0x35, 0xb8, 0x95, 0x56, 0x1a, 0xf1, 0xb2, 0x58, 0x4b, 0xb7, 0x12, 0x37, 0xc8, 0x7c, 0xb3, 0xed, 0x4b, 0x80, 0xe1, 0x8d, 0xfa, 0x32, 0x23, 0xb6, 0x6f, 0xb7, 0x48, 0x95, 0x08, 0xb1, 0x44, 0x4e, 0x85, 0x8c, 0x3a, 0x02, 0x54, 0x20, 0x2f, 0xdf, 0xbf, 0x57, 0x4f, 0x3b, 0x3a, 0x90, 0x21, 0xd7, 0xc1, 0x26, 0x35, 0x54, 0x20, 0xec, 0xc7, 0x3f, 0x47, 0xec, 0xef, 0x5a, 0xbf, 0x4b, 0x7a, 0xc1, 0xad, 0x3b, 0x17, 0x50, 0x5c, 0x62, 0xd8, 0x0f, 0x4b, 0x4a, 0xdc, 0x2b, 0xfa, 0x6e, 0xbc, 0x73, 0x92, 0xcd, 0xec, 0xc7, 0x50, 0xe8, 0x41, 0x96, 0xd7, 0xa9, 0x7e, 0x6d, 0xd8, 0xe9, 0x1d, 0x8f, 0x8a, 0xb5, 0xb9, 0x58, 0x92, 0xba, 0x4a, 0x92, 0x2b, 0x0c, 0x56, 0xfd, 0x80, 0xeb, 0x08, 0xf0, 0x5e, 0x29, 0x6e, 0x1b, 0x1c, 0x0c, 0xaf, 0x8f, 0x93, 0x89, 0xad, 0xdb, 0xbd, 0xa3, 0x9e, 0x21, 0xca, 0x89, 0x19, 0xec, 0xdf, 0xb5, 0xc3, 0x1a, 0xeb, 0x16, 0xfe, 0x78, 0x36, 0x4c, 0xd6, 0x6e, 0xd0, 0x3e, 0x17, 0x1c, 0x90, 0x17, 0x6b, 0x26, 0xba, 0xfb, 0x7a, 0x2f, 0xbf, 0x11, 0x1c, 0x18, 0x0e, 0x2d, 0x73, 0x03, 0x8f, 0xa0, 0xe5, 0x35, 0xa0, 0x5a, 0xe2, 0x4c, 0x75, 0x1d, 0x71, 0xe1, 0x39, 0x38, 0x53, 0x78, 0x40, 0xcc, 0x83, 0x93, 0xd7, 0x0a, 0x9e, 0x9d, 0x5b, 0x8f, 0x8a, 0xe4, 0xe5, 0xe0, 0x48, 0xe4, 0x48, 0xb2, 0x47, 0xcd, 0x4e, 0x2a, 0x75, 0x2a, 0x7b, 0xf2, 0x22, 0xf6, 0xc9, 0xbe, 0x09, 0x91, 0x96, 0x57, 0x7a, 0x88, 0x88, 0xac, 0xee, 0x70, 0xac, 0xf9, 0xdc, 0x29, 0xe3, 0x0c, 0x1c, 0x3b, 0x12, 0x4e, 0x44, 0xd6, 0xa7, 0x4e, 0xb0, 0x26, 0xc8, 0xf3, 0xd9, 0x1a, 0x97, 0x91, 0x68, 0xea, 0xef, 0x8d, 0x46, 0x06, 0xd2, 0x56, 0x45, 0x58, 0x9a, 0x3c, 0x0c, 0x0f, 0x83, 0xb8, 0x05, 0x25, 0xc3, 0x39, 0xcf, 0x3b, 0xa4, 0x34, 0x89, 0xb7, 0x79, 0x12, 0x2f, 0x47, 0xc5, 0xe7, 0xa9, 0x97, 0x69, 0xfc, 0xa6, 0x77, 0x67, 0xb5, 0xdf, 0x7b, 0xf1, 0x7a, 0x65, 0x15, 0xe4, 0x61, 0x56, 0x65, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x81, 0xc4, 0x8c, 0xcc, 0xf5, 0xe4, 0x30, 0xff, 0xa5, 0x0c, 0x08, 0x5f, 0x8c, 0x15, 0x67, 0x21, 0x74, 0x01, 0xdf, 0xdf, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x13, 0x65, 0x22, 0xf5, 0x8e, 0x2b, 0xad, 0x44, 0xe4, 0xcb, 0xff, 0xb9, 0x68, 0xe6, 0xc3, 0x80, 0x48, 0x3d, 0x04, 0x7b, 0xfa, 0x23, 0x2f, 0x7a, 0xed, 0x36, 0xda, 0xb2, 0xce, 0x6d, 0xf6, 0xe6, 0x9e, 0xe5, 0x5f, 0x58, 0x8f, 0xcb, 0x37, 0x32, 0xa1, 0xc8, 0x65, 0xb6, 0xae, 0x38, 0x3d, 0x35, 0x1b, 0x3e, 0xbc, 0x3b, 0xb6, 0x04, 0xd0, 0xbc, 0xf9, 0x49, 0xf5, 0x9b, 0xf7, 0x85, 0xc5, 0x36, 0xb6, 0xcb, 0xbc, 0xf8, 0xc8, 0x39, 0xd5, 0xe4, 0x5f, 0x07, 0xbd, 0x15, 0x54, 0x97, 0x74, 0xca, 0xca, 0xed, 0x4f, 0xba, 0xba, 0x64, 0x76, 0x9f, 0x81, 0xb8, 0x84, 0x45, 0x49, 0x4c, 0x8d, 0x6f, 0xa2, 0xeb, 0xb1, 0xcc, 0xd1, 0xc3, 0x94, 0xda, 0x44, 0xc2, 0xe6, 0xe2, 0xea, 0x18, 0xe8, 0xa2, 0x1f, 0x27, 0x05, 0xba, 0xd7, 0xe5, 0xd6, 0xa9, 0xcd, 0xdd, 0xef, 0x76, 0x98, 0x8d, 0x00, 0x0e, 0xcd, 0x1b, 0xfa, 0x03, 0xb7, 0x8e, 0x80, 0x58, 0x0e, 0x27, 0x3f, 0x52, 0xfb, 0x94, 0xa2, 0xca, 0x5e, 0x65, 0xc9, 0xd6, 0x84, 0xda, 0xb9, 0x35, 0x71, 0xf3, 0x26, 0xc0, 0x4f, 0x77, 0xe6, 0x81, 0x27, 0xd2, 0x77, 0x3b, 0x9a, 0x14, 0x6f, 0x79, 0xf4, 0xf6, 0xd0, 0xe1, 0xd3, 0x94, 0xba, 0xd0, 0x57, 0x51, 0xbd, 0x27, 0x05, 0x0d, 0xc1, 0xfd, 0xc8, 0x12, 0x30, 0xee, 0x6f, 0x8d, 0x11, 0x2b, 0x08, 0x9d, 0xd4, 0xd4, 0xbf, 0x80, 0x45, 0x14, 0x9a, 0x88, 0x44, 0xda, 0x30, 0xea, 0xb4, 0xa7, 0xe3, 0xee, 0xef, 0x5b, 0x82, 0xd5, 0x3e, 0xd6, 0xad, 0x78, 0x92, 0xdb, 0x5c, 0x3c, 0xf3, 0xd8, 0xad, 0xfa, 0xb8, 0x6b, 0x7f, 0xc4, 0x36, 0x28, 0xb6, 0x02, 0x15, 0x8a, 0x54, 0x2c, 0x9c, 0xb0, 0x17, 0x73, 0x8e, 0xd0, 0x37, 0xa3, 0x14, 0x3c, 0x98, 0x95, 0x00, 0x0c, 0x29, 0x05, 0x5b, 0x9e, 0x49, 0x49, 0xb1, 0x5f, 0xc7, 0xe3, 0xcb, 0xcf, 0x27, 0x65, 0x8e, 0x35, 0x17, 0xb7, 0x57, 0xc8, 0x30, 0xd9, 0x41, 0x5b, 0xb9, 0x14, 0xb6, 0xe8, 0xc2, 0x0f, 0x94, 0x31, 0xa7, 0x94, 0x98, 0xcc, 0x6a, 0xeb, 0xb5, 0xe1, 0x27, 0xf5, 0x10, 0xa8, 0x01, 0xe8, 0x8e, 0x12, 0x62, 0xe8, 0x88, 0xcc, 0xb5, 0x7f, 0x46, 0x97, 0xc0, 0x9b, 0x10, 0x66, 0x38, 0x1a, 0x36, 0x46, 0x5f, 0x22, 0x68, 0x3d, 0xdf, 0xc9, 0xc6, 0x13, 0x27, 0xab, 0x53, 0x06, 0xac, 0xa2, 0x3c, 0x86, 0x06, 0x65, 0x6f, 0xb1, 0x7e, 0xb1, 0x29, 0x44, 0x9a, 0xa3, 0xba, 0x49, 0x69, 0x28, 0x69, 0x8f, 0xd7, 0xe5, 0x5f, 0xad, 0x04, 0x86, 0x64, 0x6f, 0x1a, 0xa0, 0x0c, 0xc5, 0x08, 0x62, 0xce, 0x80, 0xa3, 0xd0, 0xf3, 0xec, 0x68, 0xde, 0xbe, 0x33, 0xc7, 0x17, 0x5b, 0x7f, 0x80, 0xc4, 0x4c, 0x4c, 0xb1, 0xa6, 0x84, 0x8a, 0xc3, 0x3b, 0xb8, 0x09, 0xcd, 0x14, 0x81, 0xba, 0x18, 0xe3, 0x54, 0x57, 0x36, 0xfe, 0xdb, 0x2f, 0x7c, 0x47, 0xa1, 0x3a, 0x33, 0xc8, 0xf9, 0x58, 0x3b, 0x44, 0x4f, 0xb1, 0xca, 0x02, 0x89, 0x04, 0x96, 0x28, 0x68, 0xc5, 0x4b, 0xb8, 0x26, 0x89, 0xbb, 0xd6, 0x33, 0x2f, 0x50, 0xd5, 0xfe, 0x9a, 0x89, 0xba, 0x18, 0x32, 0x92, 0x54, 0xc6, 0x5b, 0xe0, 0x9d, 0xf9, 0x5e, 0xe5, 0x0d, 0x22, 0x9b, 0xf6, 0xda, 0xe2, 0xc8, 0x21, 0xb2, 0x62, 0x21, 0xaa, 0x86, 0x40, 0xb2, 0x2e, 0x64, 0xd3, 0x5f, 0xc8, 0xe3, 0x7e, 0x11, 0x67, 0x45, 0x1f, 0x05, 0xfe, 0xe3, 0xa2, 0xef, 0xb3, 0xa8, 0xb3, 0xf3, 0x7d, 0x8f, 0xf8, 0x0c, 0x1f, 0x22, 0x1f, 0x2d, 0x70, 0xb4, 0xb8, 0x01, 0x34, 0x76, 0x30, 0x00, 0xe5, 0x23, 0x78, 0xa7, 0x56, 0xd7, 0x50, 0x1f, 0x8a, 0xfb, 0x06, 0xf5, 0xc2, 0x19, 0xf0, 0xd0, 0x30, 0x82, 0x02, 0x94, 0x30, 0x82, 0x02, 0x1a, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x2c, 0x29, 0x9c, 0x5b, 0x16, 0xed, 0x05, 0x95, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x30, 0x7f, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0e, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x05, 0x54, 0x65, 0x78, 0x61, 0x73, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x07, 0x48, 0x6f, 0x75, 0x73, 0x74, 0x6f, 0x6e, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0f, 0x53, 0x53, 0x4c, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x34, 0x30, 0x32, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x2b, 0x53, 0x53, 0x4c, 0x2e, 0x63, 0x6f, 0x6d, 0x20, 0x45, 0x56, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x45, 0x43, 0x43, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x36, 0x30, 0x32, 0x31, 0x32, 0x31, 0x38, 0x31, 0x35, 0x32, 0x33, 0x5a, 0x17, 0x0d, 0x34, 0x31, 0x30, 0x32, 0x31, 0x32, 0x31, 0x38, 0x31, 0x35, 0x32, 0x33, 0x5a, 0x30, 0x7f, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0e, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x05, 0x54, 0x65, 0x78, 0x61, 0x73, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x07, 0x48, 0x6f, 0x75, 0x73, 0x74, 0x6f, 0x6e, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0f, 0x53, 0x53, 0x4c, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x34, 0x30, 0x32, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x2b, 0x53, 0x53, 0x4c, 0x2e, 0x63, 0x6f, 0x6d, 0x20, 0x45, 0x56, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x45, 0x43, 0x43, 0x30, 0x76, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x22, 0x03, 0x62, 0x00, 0x04, 0xaa, 0x12, 0x47, 0x90, 0x98, 0x1b, 0xfb, 0xef, 0xc3, 0x40, 0x07, 0x83, 0x20, 0x4e, 0xf1, 0x30, 0x82, 0xa2, 0x06, 0xd1, 0xf2, 0x92, 0x86, 0x61, 0xf2, 0xf6, 0x21, 0x68, 0xca, 0x00, 0xc4, 0xc7, 0xea, 0x43, 0x00, 0x54, 0x86, 0xdc, 0xfd, 0x1f, 0xdf, 0x00, 0xb8, 0x41, 0x62, 0x5c, 0xdc, 0x70, 0x16, 0x32, 0xde, 0x1f, 0x99, 0xd4, 0xcc, 0xc5, 0x07, 0xc8, 0x08, 0x1f, 0x61, 0x16, 0x07, 0x51, 0x3d, 0x7d, 0x5c, 0x07, 0x53, 0xe3, 0x35, 0x38, 0x8c, 0xdf, 0xcd, 0x9f, 0xd9, 0x2e, 0x0d, 0x4a, 0xb6, 0x19, 0x2e, 0x5a, 0x70, 0x5a, 0x06, 0xed, 0xbe, 0xf0, 0xa1, 0xb0, 0xca, 0xd0, 0x09, 0x29, 0xa3, 0x63, 0x30, 0x61, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x5b, 0xca, 0x5e, 0xe5, 0xde, 0xd2, 0x81, 0xaa, 0xcd, 0xa8, 0x2d, 0x64, 0x51, 0xb6, 0xd9, 0x72, 0x9b, 0x97, 0xe6, 0x4f, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x5b, 0xca, 0x5e, 0xe5, 0xde, 0xd2, 0x81, 0xaa, 0xcd, 0xa8, 0x2d, 0x64, 0x51, 0xb6, 0xd9, 0x72, 0x9b, 0x97, 0xe6, 0x4f, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x03, 0x68, 0x00, 0x30, 0x65, 0x02, 0x31, 0x00, 0x8a, 0xe6, 0x40, 0x89, 0x37, 0xeb, 0xe9, 0xd5, 0x13, 0xd9, 0xca, 0xd4, 0x6b, 0x24, 0xf3, 0xb0, 0x3d, 0x87, 0x46, 0x58, 0x1a, 0xec, 0xb1, 0xdf, 0x6f, 0xfb, 0x56, 0xba, 0x70, 0x6b, 0xc7, 0x38, 0xcc, 0xe8, 0xb1, 0x8c, 0x4f, 0x0f, 0xf7, 0xf1, 0x67, 0x76, 0x0e, 0x83, 0xd0, 0x1e, 0x51, 0x8f, 0x02, 0x30, 0x3d, 0xf6, 0x23, 0x28, 0x26, 0x4c, 0xc6, 0x60, 0x87, 0x93, 0x26, 0x9b, 0xb2, 0x35, 0x1e, 0xba, 0xd6, 0xf7, 0x3c, 0xd1, 0x1c, 0xce, 0xfa, 0x25, 0x3c, 0xa6, 0x1a, 0x81, 0x15, 0x5b, 0xf3, 0x12, 0x0f, 0x6c, 0xee, 0x65, 0x8a, 0xc9, 0x87, 0xa8, 0xf9, 0x07, 0xe0, 0x62, 0x9a, 0x8c, 0x5c, 0x4a, 0x30, 0x82, 0x02, 0x8d, 0x30, 0x82, 0x02, 0x14, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x75, 0xe6, 0xdf, 0xcb, 0xc1, 0x68, 0x5b, 0xa8, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x30, 0x7c, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0e, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x05, 0x54, 0x65, 0x78, 0x61, 0x73, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x07, 0x48, 0x6f, 0x75, 0x73, 0x74, 0x6f, 0x6e, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0f, 0x53, 0x53, 0x4c, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x31, 0x30, 0x2f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x28, 0x53, 0x53, 0x4c, 0x2e, 0x63, 0x6f, 0x6d, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x45, 0x43, 0x43, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x36, 0x30, 0x32, 0x31, 0x32, 0x31, 0x38, 0x31, 0x34, 0x30, 0x33, 0x5a, 0x17, 0x0d, 0x34, 0x31, 0x30, 0x32, 0x31, 0x32, 0x31, 0x38, 0x31, 0x34, 0x30, 0x33, 0x5a, 0x30, 0x7c, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0e, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x05, 0x54, 0x65, 0x78, 0x61, 0x73, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x07, 0x48, 0x6f, 0x75, 0x73, 0x74, 0x6f, 0x6e, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0f, 0x53, 0x53, 0x4c, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x31, 0x30, 0x2f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x28, 0x53, 0x53, 0x4c, 0x2e, 0x63, 0x6f, 0x6d, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x45, 0x43, 0x43, 0x30, 0x76, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x22, 0x03, 0x62, 0x00, 0x04, 0x45, 0x6e, 0xa9, 0x50, 0xc4, 0xa6, 0x23, 0x36, 0x9e, 0x5f, 0x28, 0x8d, 0x17, 0xcb, 0x96, 0x22, 0x64, 0x3f, 0xdc, 0x7a, 0x8e, 0x1d, 0xcc, 0x08, 0xb3, 0xa2, 0x71, 0x24, 0xba, 0x8e, 0x49, 0xb9, 0x04, 0x1b, 0x47, 0x96, 0x58, 0xab, 0x2d, 0x95, 0xc8, 0xed, 0x9e, 0x08, 0x35, 0xc8, 0x27, 0xeb, 0x89, 0x8c, 0x53, 0x58, 0xeb, 0x62, 0x8a, 0xfe, 0xf0, 0x5b, 0x0f, 0x6b, 0x31, 0x52, 0x63, 0x41, 0x3b, 0x89, 0xcd, 0xec, 0xec, 0xb6, 0x8d, 0x19, 0xd3, 0x34, 0x07, 0xdc, 0xbb, 0xc6, 0x06, 0x7f, 0xc2, 0x45, 0x95, 0xec, 0xcb, 0x7f, 0xa8, 0x23, 0xe0, 0x09, 0xe9, 0x81, 0xfa, 0xf3, 0x47, 0xd3, 0xa3, 0x63, 0x30, 0x61, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x82, 0xd1, 0x85, 0x73, 0x30, 0xe7, 0x35, 0x04, 0xd3, 0x8e, 0x02, 0x92, 0xfb, 0xe5, 0xa4, 0xd1, 0xc4, 0x21, 0xe8, 0xcd, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x82, 0xd1, 0x85, 0x73, 0x30, 0xe7, 0x35, 0x04, 0xd3, 0x8e, 0x02, 0x92, 0xfb, 0xe5, 0xa4, 0xd1, 0xc4, 0x21, 0xe8, 0xcd, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x03, 0x67, 0x00, 0x30, 0x64, 0x02, 0x30, 0x6f, 0xe7, 0xeb, 0x59, 0x11, 0xa4, 0x60, 0xcf, 0x61, 0xb0, 0x96, 0x7b, 0xed, 0x05, 0xf9, 0x2f, 0x13, 0x91, 0xdc, 0xed, 0xe5, 0xfc, 0x50, 0x6b, 0x11, 0x46, 0x46, 0xb3, 0x1c, 0x21, 0x00, 0x62, 0xbb, 0xbe, 0xc3, 0xe7, 0xe8, 0xcd, 0x07, 0x99, 0xf9, 0x0d, 0x0b, 0x5d, 0x72, 0x3e, 0xc4, 0xaa, 0x02, 0x30, 0x1f, 0xbc, 0xba, 0x0b, 0xe2, 0x30, 0x24, 0xfb, 0x7c, 0x6d, 0x80, 0x55, 0x0a, 0x99, 0x3e, 0x80, 0x0d, 0x33, 0xe5, 0x66, 0xa3, 0xb3, 0xa3, 0xbb, 0xa5, 0xd5, 0x8b, 0x8f, 0x09, 0x2c, 0xa6, 0x5d, 0x7e, 0xe2, 0xf0, 0x07, 0x08, 0x68, 0x6d, 0xd2, 0x7c, 0x69, 0x6e, 0x5f, 0xdf, 0xe5, 0x6a, 0x65, 0x30, 0x82, 0x05, 0xdd, 0x30, 0x82, 0x03, 0xc5, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x7b, 0x2c, 0x9b, 0xd3, 0x16, 0x80, 0x32, 0x99, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x7c, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0e, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x05, 0x54, 0x65, 0x78, 0x61, 0x73, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x07, 0x48, 0x6f, 0x75, 0x73, 0x74, 0x6f, 0x6e, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0f, 0x53, 0x53, 0x4c, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x31, 0x30, 0x2f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x28, 0x53, 0x53, 0x4c, 0x2e, 0x63, 0x6f, 0x6d, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x52, 0x53, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x36, 0x30, 0x32, 0x31, 0x32, 0x31, 0x37, 0x33, 0x39, 0x33, 0x39, 0x5a, 0x17, 0x0d, 0x34, 0x31, 0x30, 0x32, 0x31, 0x32, 0x31, 0x37, 0x33, 0x39, 0x33, 0x39, 0x5a, 0x30, 0x7c, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0e, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x05, 0x54, 0x65, 0x78, 0x61, 0x73, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x07, 0x48, 0x6f, 0x75, 0x73, 0x74, 0x6f, 0x6e, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0f, 0x53, 0x53, 0x4c, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x31, 0x30, 0x2f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x28, 0x53, 0x53, 0x4c, 0x2e, 0x63, 0x6f, 0x6d, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x52, 0x53, 0x41, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xf9, 0x0f, 0xdd, 0xa3, 0x2b, 0x7d, 0xcb, 0xd0, 0x2a, 0xfe, 0xec, 0x67, 0x85, 0xa6, 0xe7, 0x2e, 0x1b, 0xba, 0x77, 0xe1, 0xe3, 0xf5, 0xaf, 0xa4, 0xec, 0xfa, 0x4a, 0x5d, 0x91, 0xc4, 0x57, 0x47, 0x6b, 0x18, 0x77, 0x6b, 0x76, 0xf2, 0xfd, 0x93, 0xe4, 0x3d, 0x0f, 0xc2, 0x16, 0x9e, 0x0b, 0x66, 0xc3, 0x56, 0x94, 0x9e, 0x17, 0x83, 0x85, 0xce, 0x56, 0xef, 0xf2, 0x16, 0xfd, 0x00, 0x62, 0xf5, 0x22, 0x09, 0x54, 0xe8, 0x65, 0x17, 0x4e, 0x41, 0xb9, 0xe0, 0x4f, 0x46, 0x97, 0xaa, 0x1b, 0xc8, 0xb8, 0x6e, 0x62, 0x5e, 0x69, 0xb1, 0x5f, 0xdb, 0x2a, 0x02, 0x7e, 0xfc, 0x6c, 0xca, 0xf3, 0x41, 0xd8, 0xed, 0xd0, 0xe8, 0xfc, 0x3f, 0x61, 0x48, 0xed, 0xb0, 0x03, 0x14, 0x1d, 0x10, 0x0e, 0x4b, 0x19, 0xe0, 0xbb, 0x4e, 0xec, 0x86, 0x65, 0xff, 0x36, 0xf3, 0x5e, 0x67, 0x02, 0x0b, 0x9d, 0x86, 0x55, 0x61, 0xfd, 0x7a, 0x38, 0xed, 0xfe, 0xe2, 0x19, 0x00, 0xb7, 0x6f, 0xa1, 0x50, 0x62, 0x75, 0x74, 0x3c, 0xa0, 0xfa, 0xc8, 0x25, 0x92, 0xb4, 0x6e, 0x7a, 0x22, 0xc7, 0xf8, 0x1e, 0xa1, 0xe3, 0xb2, 0xdd, 0x91, 0x31, 0xab, 0x2b, 0x1d, 0x04, 0xff, 0xa5, 0x4a, 0x04, 0x37, 0xe9, 0x85, 0xa4, 0x33, 0x2b, 0xfd, 0xe2, 0xd6, 0x55, 0x34, 0x7c, 0x19, 0xa4, 0x4a, 0x68, 0xc7, 0xb2, 0xa8, 0xd3, 0xb7, 0xca, 0xa1, 0x93, 0x88, 0xeb, 0xc1, 0x97, 0xbc, 0x8c, 0xf9, 0x1d, 0xd9, 0x22, 0x84, 0x24, 0x74, 0xc7, 0x04, 0x3d, 0x6a, 0xa9, 0x29, 0x93, 0xcc, 0xeb, 0xb8, 0x5b, 0xe1, 0xfe, 0x5f, 0x25, 0xaa, 0x34, 0x58, 0xc8, 0xc1, 0x23, 0x54, 0x9d, 0x1b, 0x98, 0x11, 0xc3, 0x38, 0x9c, 0x7e, 0x3d, 0x86, 0x6c, 0xa5, 0x0f, 0x40, 0x86, 0x7c, 0x02, 0xf4, 0x5c, 0x02, 0x4f, 0x28, 0xcb, 0xae, 0x71, 0x9f, 0x0f, 0x3a, 0xc8, 0x33, 0xfe, 0x11, 0x25, 0x35, 0xea, 0xfc, 0xba, 0xc5, 0x60, 0x3d, 0xd9, 0x7c, 0x18, 0xd5, 0xb2, 0xa9, 0xd3, 0x75, 0x78, 0x03, 0x72, 0x22, 0xca, 0x3a, 0xc3, 0x1f, 0xef, 0x2c, 0xe5, 0x2e, 0xa9, 0xfa, 0x9e, 0x2c, 0xb6, 0x51, 0x46, 0xfd, 0xaf, 0x03, 0xd6, 0xea, 0x60, 0x68, 0xea, 0x85, 0x16, 0x36, 0x6b, 0x85, 0xe9, 0x1e, 0xc0, 0xb3, 0xdd, 0xc4, 0x24, 0xdc, 0x80, 0x2a, 0x81, 0x41, 0x6d, 0x94, 0x3e, 0xc8, 0xe0, 0xc9, 0x81, 0x41, 0x00, 0x9e, 0x5e, 0xbf, 0x7f, 0xc5, 0x08, 0x98, 0xa2, 0x18, 0x2c, 0x42, 0x40, 0xb3, 0xf9, 0x6f, 0x38, 0x27, 0x4b, 0x4e, 0x80, 0xf4, 0x3d, 0x81, 0x47, 0xe0, 0x88, 0x7c, 0xea, 0x1c, 0xce, 0xb5, 0x75, 0x5c, 0x51, 0x2e, 0x1c, 0x2b, 0x7f, 0x1a, 0x72, 0x28, 0xe7, 0x00, 0xb5, 0xd1, 0x74, 0xc6, 0xd7, 0xe4, 0x9f, 0xad, 0x07, 0x93, 0xb6, 0x53, 0x35, 0x35, 0xfc, 0x37, 0xe4, 0xc3, 0xf6, 0x5d, 0x16, 0xbe, 0x21, 0x73, 0xde, 0x92, 0x0a, 0xf8, 0xa0, 0x63, 0x6a, 0xbc, 0x96, 0x92, 0x6a, 0x3e, 0xf8, 0xbc, 0x65, 0x55, 0x9b, 0xde, 0xf5, 0x0d, 0x89, 0x26, 0x04, 0xfc, 0x25, 0x1a, 0xa6, 0x25, 0x69, 0xcb, 0xc2, 0x6d, 0xca, 0x7c, 0xe2, 0x59, 0x5f, 0x97, 0xac, 0xeb, 0xef, 0x2e, 0xc8, 0xbc, 0xd7, 0x1b, 0x59, 0x3c, 0x2b, 0xcc, 0xf2, 0x19, 0xc8, 0x93, 0x6b, 0x27, 0x63, 0x19, 0xcf, 0xfc, 0xe9, 0x26, 0xf8, 0xca, 0x71, 0x9b, 0x7f, 0x93, 0xfe, 0x34, 0x67, 0x84, 0x4e, 0x99, 0xeb, 0xfc, 0xb3, 0x78, 0x09, 0x33, 0x70, 0xba, 0x66, 0xa6, 0x76, 0xed, 0x1b, 0x73, 0xeb, 0x1a, 0xa5, 0x0d, 0xc4, 0x22, 0x13, 0x20, 0x94, 0x56, 0x0a, 0x4e, 0x2c, 0x6c, 0x4e, 0xb1, 0xfd, 0xcf, 0x9c, 0x09, 0xba, 0xa2, 0x33, 0xed, 0x87, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x63, 0x30, 0x61, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xdd, 0x04, 0x09, 0x07, 0xa2, 0xf5, 0x7a, 0x7d, 0x52, 0x53, 0x12, 0x92, 0x95, 0xee, 0x38, 0x80, 0x25, 0x0d, 0xa6, 0x59, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xdd, 0x04, 0x09, 0x07, 0xa2, 0xf5, 0x7a, 0x7d, 0x52, 0x53, 0x12, 0x92, 0x95, 0xee, 0x38, 0x80, 0x25, 0x0d, 0xa6, 0x59, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x20, 0x18, 0x11, 0x94, 0x29, 0xfb, 0x26, 0x9d, 0x1c, 0x1e, 0x1e, 0x70, 0x61, 0xf1, 0x95, 0x72, 0x93, 0x71, 0x24, 0xad, 0x68, 0x93, 0x58, 0x8e, 0x32, 0xaf, 0x1b, 0xb3, 0x70, 0x03, 0xfc, 0x25, 0x2b, 0x74, 0x85, 0x90, 0x3d, 0x78, 0x6a, 0xf4, 0xb9, 0x8b, 0xa5, 0x97, 0x3b, 0xb5, 0x18, 0x91, 0xbb, 0x1e, 0xa7, 0xf9, 0x40, 0x5b, 0x91, 0xf9, 0x55, 0x99, 0xaf, 0x1e, 0x11, 0xd0, 0x5c, 0x1d, 0xa7, 0x66, 0xe3, 0xb1, 0x94, 0x07, 0x0c, 0x32, 0x39, 0xa6, 0xea, 0x1b, 0xb0, 0x79, 0xd8, 0x1d, 0x9c, 0x70, 0x44, 0xe3, 0x8a, 0xdd, 0xc4, 0xf9, 0x95, 0x1f, 0x8a, 0x38, 0x43, 0x3f, 0x01, 0x85, 0xa5, 0x47, 0xa7, 0x3d, 0x46, 0xb2, 0xbc, 0xe5, 0x22, 0x68, 0xf7, 0x7b, 0x9c, 0xd8, 0x2c, 0x3e, 0x0a, 0x21, 0xc8, 0x2d, 0x33, 0xac, 0xbf, 0xc5, 0x81, 0x99, 0x31, 0x74, 0xc1, 0x75, 0x71, 0xc5, 0xbe, 0xb1, 0xf0, 0x23, 0x45, 0xf4, 0x9d, 0x6b, 0xfc, 0x19, 0x63, 0x9d, 0xa3, 0xbc, 0x04, 0xc6, 0x18, 0x0b, 0x25, 0xbb, 0x53, 0x89, 0x0f, 0xb3, 0x80, 0x50, 0xde, 0x45, 0xee, 0x44, 0x7f, 0xab, 0x94, 0x78, 0x64, 0x98, 0xd3, 0xf6, 0x28, 0xdd, 0x87, 0xd8, 0x70, 0x65, 0x74, 0xfb, 0x0e, 0xb9, 0x13, 0xeb, 0xa7, 0x0f, 0x61, 0xa9, 0x32, 0x96, 0xcc, 0xde, 0xbb, 0xed, 0x63, 0x4c, 0x18, 0xbb, 0xa9, 0x40, 0xf7, 0xa0, 0x54, 0x6e, 0x20, 0x88, 0x71, 0x75, 0x18, 0xea, 0x7a, 0xb4, 0x34, 0x72, 0xe0, 0x23, 0x27, 0x77, 0x5c, 0xb6, 0x90, 0xea, 0x86, 0x25, 0x40, 0xab, 0xef, 0x33, 0x0f, 0xcb, 0x9f, 0x82, 0xbe, 0xa2, 0x20, 0xfb, 0xf6, 0xb5, 0x2d, 0x1a, 0xe6, 0xc2, 0x85, 0xb1, 0x74, 0x0f, 0xfb, 0xc8, 0x65, 0x02, 0xa4, 0x52, 0x01, 0x47, 0xdd, 0x49, 0x22, 0xc1, 0xbf, 0xd8, 0xeb, 0x6b, 0xac, 0x7e, 0xde, 0xec, 0x63, 0x33, 0x15, 0xb7, 0x23, 0x08, 0x8f, 0xc6, 0x0f, 0x8d, 0x41, 0x5a, 0xdd, 0x8e, 0xc5, 0xb9, 0x8f, 0xe5, 0x45, 0x3f, 0x78, 0xdb, 0xba, 0xd2, 0x1b, 0x40, 0xb1, 0xfe, 0x71, 0x4d, 0x3f, 0xe0, 0x81, 0xa2, 0xba, 0x5e, 0xb4, 0xec, 0x15, 0xe0, 0x93, 0xdd, 0x08, 0x1f, 0x7e, 0xe1, 0x55, 0x99, 0x0b, 0x21, 0xde, 0x93, 0x9e, 0x0a, 0xfb, 0xe6, 0xa3, 0x49, 0xbd, 0x36, 0x30, 0xfe, 0xe7, 0x77, 0xb2, 0xa0, 0x75, 0x97, 0xb5, 0x2d, 0x81, 0x88, 0x17, 0x65, 0x20, 0xf7, 0xda, 0x90, 0x00, 0x9f, 0xc9, 0x52, 0xcc, 0x32, 0xca, 0x35, 0x7c, 0xf5, 0x3d, 0x0f, 0xd8, 0x2b, 0xd7, 0xf5, 0x26, 0x6c, 0xc9, 0x06, 0x34, 0x96, 0x16, 0xea, 0x70, 0x59, 0x1a, 0x32, 0x79, 0x79, 0x0b, 0xb6, 0x88, 0x7f, 0x0f, 0x52, 0x48, 0x3d, 0xbf, 0x6c, 0xd8, 0xa2, 0x44, 0x2e, 0xd1, 0x4e, 0xb7, 0x72, 0x58, 0xd3, 0x89, 0x13, 0x95, 0xfe, 0x44, 0xab, 0xf8, 0xd7, 0x8b, 0x1b, 0x6e, 0x9c, 0xbc, 0x2c, 0xa0, 0x5b, 0xd5, 0x6a, 0x00, 0xaf, 0x5f, 0x37, 0xe1, 0xd5, 0xfa, 0x10, 0x0b, 0x98, 0x9c, 0x86, 0xe7, 0x26, 0x8f, 0xce, 0xf0, 0xec, 0x6e, 0x8a, 0x57, 0x0b, 0x80, 0xe3, 0x4e, 0xb2, 0xc0, 0xa0, 0x63, 0x61, 0x90, 0xba, 0x55, 0x68, 0x37, 0x74, 0x6a, 0xb6, 0x92, 0xdb, 0x9f, 0xa1, 0x86, 0x22, 0xb6, 0x65, 0x27, 0x0e, 0xec, 0xb6, 0x9f, 0x42, 0x60, 0xe4, 0x67, 0xc2, 0xb5, 0xda, 0x41, 0x0b, 0xc4, 0xd3, 0x8b, 0x61, 0x1b, 0xbc, 0xfa, 0x1f, 0x91, 0x2b, 0xd7, 0x44, 0x07, 0x5e, 0xba, 0x29, 0xac, 0xd9, 0xc5, 0xe9, 0xef, 0x53, 0x48, 0x5a, 0xeb, 0x80, 0xf1, 0x28, 0x58, 0x21, 0xcd, 0xb0, 0x06, 0x55, 0xfb, 0x27, 0x3f, 0x53, 0x90, 0x70, 0xa9, 0x04, 0x1e, 0x57, 0x27, 0xb9, 0x30, 0x82, 0x05, 0x83, 0x30, 0x82, 0x03, 0x6b, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0f, 0x5d, 0x93, 0x8d, 0x30, 0x67, 0x36, 0xc8, 0x06, 0x1d, 0x1a, 0xc7, 0x54, 0x84, 0x69, 0x07, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x3b, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x45, 0x53, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x08, 0x46, 0x4e, 0x4d, 0x54, 0x2d, 0x52, 0x43, 0x4d, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x10, 0x41, 0x43, 0x20, 0x52, 0x41, 0x49, 0x5a, 0x20, 0x46, 0x4e, 0x4d, 0x54, 0x2d, 0x52, 0x43, 0x4d, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x38, 0x31, 0x30, 0x32, 0x39, 0x31, 0x35, 0x35, 0x39, 0x35, 0x36, 0x5a, 0x17, 0x0d, 0x33, 0x30, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x3b, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x45, 0x53, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x08, 0x46, 0x4e, 0x4d, 0x54, 0x2d, 0x52, 0x43, 0x4d, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x10, 0x41, 0x43, 0x20, 0x52, 0x41, 0x49, 0x5a, 0x20, 0x46, 0x4e, 0x4d, 0x54, 0x2d, 0x52, 0x43, 0x4d, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xba, 0x71, 0x80, 0x7a, 0x4c, 0x86, 0x6e, 0x7f, 0xc8, 0x13, 0x6d, 0xc0, 0xc6, 0x7d, 0x1c, 0x00, 0x97, 0x8f, 0x2c, 0x0c, 0x23, 0xbb, 0x10, 0x9a, 0x40, 0xa9, 0x1a, 0xb7, 0x87, 0x88, 0xf8, 0x9b, 0x56, 0x6a, 0xfb, 0xe6, 0x7b, 0x8e, 0x8b, 0x92, 0x8e, 0xa7, 0x25, 0x5d, 0x59, 0x11, 0xdb, 0x36, 0x2e, 0xb7, 0x51, 0x17, 0x1f, 0xa9, 0x08, 0x1f, 0x04, 0x17, 0x24, 0x58, 0xaa, 0x37, 0x4a, 0x18, 0xdf, 0xe5, 0x39, 0xd4, 0x57, 0xfd, 0xd7, 0xc1, 0x2c, 0x91, 0x01, 0x91, 0xe2, 0x22, 0xd4, 0x03, 0xc0, 0x58, 0xfc, 0x77, 0x47, 0xec, 0x8f, 0x3e, 0x74, 0x43, 0xba, 0xac, 0x34, 0x8d, 0x4d, 0x38, 0x76, 0x67, 0x8e, 0xb0, 0xc8, 0x6f, 0x30, 0x33, 0x58, 0x71, 0x5c, 0xb4, 0xf5, 0x6b, 0x6e, 0xd4, 0x01, 0x50, 0xb8, 0x13, 0x7e, 0x6c, 0x4a, 0xa3, 0x49, 0xd1, 0x20, 0x19, 0xee, 0xbc, 0xc0, 0x29, 0x18, 0x65, 0xa7, 0xde, 0xfe, 0xef, 0xdd, 0x0a, 0x90, 0x21, 0xe7, 0x1a, 0x67, 0x92, 0x42, 0x10, 0x98, 0x5f, 0x4f, 0x30, 0xbc, 0x3e, 0x1c, 0x45, 0xb4, 0x10, 0xd7, 0x68, 0x40, 0x14, 0xc0, 0x40, 0xfa, 0xe7, 0x77, 0x17, 0x7a, 0xe6, 0x0b, 0x8f, 0x65, 0x5b, 0x3c, 0xd9, 0x9a, 0x52, 0xdb, 0xb5, 0xbd, 0x9e, 0x46, 0xcf, 0x3d, 0xeb, 0x91, 0x05, 0x02, 0xc0, 0x96, 0xb2, 0x76, 0x4c, 0x4d, 0x10, 0x96, 0x3b, 0x92, 0xfa, 0x9c, 0x7f, 0x0f, 0x99, 0xdf, 0xbe, 0x23, 0x35, 0x45, 0x1e, 0x02, 0x5c, 0xfe, 0xb5, 0xa8, 0x9b, 0x99, 0x25, 0xda, 0x5e, 0xf3, 0x22, 0xc3, 0x39, 0xf5, 0xe4, 0x2a, 0x2e, 0xd3, 0xc6, 0x1f, 0xc4, 0x6c, 0xaa, 0xc5, 0x1c, 0x6a, 0x01, 0x05, 0x4a, 0x2f, 0xd2, 0xc5, 0xc1, 0xa8, 0x34, 0x26, 0x5d, 0x66, 0xa5, 0xd2, 0x02, 0x21, 0xf9, 0x18, 0xb7, 0x06, 0xf5, 0x4e, 0x99, 0x6f, 0xa8, 0xab, 0x4c, 0x51, 0xe8, 0xcf, 0x50, 0x18, 0xc5, 0x77, 0xc8, 0x39, 0x09, 0x2c, 0x49, 0x92, 0x32, 0x99, 0xa8, 0xbb, 0x17, 0x17, 0x79, 0xb0, 0x5a, 0xc5, 0xe6, 0xa3, 0xc4, 0x59, 0x65, 0x47, 0x35, 0x83, 0x5e, 0xa9, 0xe8, 0x35, 0x0b, 0x99, 0xbb, 0xe4, 0xcd, 0x20, 0xc6, 0x9b, 0x4a, 0x06, 0x39, 0xb5, 0x68, 0xfc, 0x22, 0xba, 0xee, 0x55, 0x8c, 0x2b, 0x4e, 0xea, 0xf3, 0xb1, 0xe3, 0xfc, 0xb6, 0x99, 0x9a, 0xd5, 0x42, 0xfa, 0x71, 0x4d, 0x08, 0xcf, 0x87, 0x1e, 0x6a, 0x71, 0x7d, 0xf9, 0xd3, 0xb4, 0xe9, 0xa5, 0x71, 0x81, 0x7b, 0xc2, 0x4e, 0x47, 0x96, 0xa5, 0xf6, 0x76, 0x85, 0xa3, 0x28, 0x8f, 0xe9, 0x80, 0x6e, 0x81, 0x53, 0xa5, 0x6d, 0x5f, 0xb8, 0x48, 0xf9, 0xc2, 0xf9, 0x36, 0xa6, 0x2e, 0x49, 0xff, 0xb8, 0x96, 0xc2, 0x8c, 0x07, 0xb3, 0x9b, 0x88, 0x58, 0xfc, 0xeb, 0x1b, 0x1c, 0xde, 0x2d, 0x70, 0xe2, 0x97, 0x92, 0x30, 0xa1, 0x89, 0xe3, 0xbc, 0x55, 0xa8, 0x27, 0xd6, 0x4b, 0xed, 0x90, 0xad, 0x8b, 0xfa, 0x63, 0x25, 0x59, 0x2d, 0xa8, 0x35, 0xdd, 0xca, 0x97, 0x33, 0xbc, 0xe5, 0xcd, 0xc7, 0x9d, 0xd1, 0xec, 0xef, 0x5e, 0x0e, 0x4a, 0x90, 0x06, 0x26, 0x63, 0xad, 0xb9, 0xd9, 0x35, 0x2d, 0x07, 0xba, 0x76, 0x65, 0x2c, 0xac, 0x57, 0x8f, 0x7d, 0xf4, 0x07, 0x94, 0xd7, 0x81, 0x02, 0x96, 0x5d, 0xa3, 0x07, 0x49, 0xd5, 0x7a, 0xd0, 0x57, 0xf9, 0x1b, 0xe7, 0x53, 0x46, 0x75, 0xaa, 0xb0, 0x79, 0x42, 0xcb, 0x68, 0x71, 0x08, 0xe9, 0x60, 0xbd, 0x39, 0x69, 0xce, 0xf4, 0xaf, 0xc3, 0x56, 0x40, 0xc7, 0xad, 0x52, 0xa2, 0x09, 0xe4, 0x6f, 0x86, 0x47, 0x8a, 0x1f, 0xeb, 0x28, 0x27, 0x5d, 0x83, 0x20, 0xaf, 0x04, 0xc9, 0x6c, 0x56, 0x9a, 0x8b, 0x46, 0xf5, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x81, 0x83, 0x30, 0x81, 0x80, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xf7, 0x7d, 0xc5, 0xfd, 0xc4, 0xe8, 0x9a, 0x1b, 0x77, 0x64, 0xa7, 0xf5, 0x1d, 0xa0, 0xcc, 0xbf, 0x87, 0x60, 0x9a, 0x6d, 0x30, 0x3e, 0x06, 0x03, 0x55, 0x1d, 0x20, 0x04, 0x37, 0x30, 0x35, 0x30, 0x33, 0x06, 0x04, 0x55, 0x1d, 0x20, 0x00, 0x30, 0x2b, 0x30, 0x29, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x01, 0x16, 0x1d, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x63, 0x65, 0x72, 0x74, 0x2e, 0x66, 0x6e, 0x6d, 0x74, 0x2e, 0x65, 0x73, 0x2f, 0x64, 0x70, 0x63, 0x73, 0x2f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x07, 0x90, 0x4a, 0xdf, 0xf3, 0x23, 0x4e, 0xf0, 0xc3, 0x9c, 0x51, 0x65, 0x9b, 0x9c, 0x22, 0xa2, 0x8a, 0x0c, 0x85, 0xf3, 0x73, 0x29, 0x6b, 0x4d, 0xfe, 0x01, 0xe2, 0xa9, 0x0c, 0x63, 0x01, 0xbf, 0x04, 0x67, 0xa5, 0x9d, 0x98, 0x5f, 0xfd, 0x01, 0x13, 0xfa, 0xec, 0x9a, 0x62, 0xe9, 0x86, 0xfe, 0xb6, 0x62, 0xd2, 0x6e, 0x4c, 0x94, 0xfb, 0xc0, 0x75, 0x45, 0x7c, 0x65, 0x0c, 0xf8, 0xb2, 0x37, 0xcf, 0xac, 0x0f, 0xcf, 0x8d, 0x6f, 0xf9, 0x19, 0xf7, 0x8f, 0xec, 0x1e, 0xf2, 0x70, 0x9e, 0xf0, 0xca, 0xb8, 0xef, 0xb7, 0xff, 0x76, 0x37, 0x76, 0x5b, 0xf6, 0x6e, 0x88, 0xf3, 0xaf, 0x62, 0x32, 0x22, 0x93, 0x0d, 0x3a, 0x6a, 0x8e, 0x14, 0x66, 0x0c, 0x2d, 0x53, 0x74, 0x57, 0x65, 0x1e, 0xd5, 0xb2, 0xdd, 0x23, 0x81, 0x3b, 0xa5, 0x66, 0x23, 0x27, 0x67, 0x09, 0x8f, 0xe1, 0x77, 0xaa, 0x43, 0xcd, 0x65, 0x51, 0x08, 0xed, 0x51, 0x58, 0xfe, 0xe6, 0x39, 0xf9, 0xcb, 0x47, 0x84, 0xa4, 0x15, 0xf1, 0x76, 0xbb, 0xa4, 0xee, 0xa4, 0x3b, 0xc4, 0x5f, 0xef, 0xb2, 0x33, 0x96, 0x11, 0x18, 0xb7, 0xc9, 0x65, 0xbe, 0x18, 0xe1, 0xa3, 0xa4, 0xdc, 0xfa, 0x18, 0xf9, 0xd3, 0xbc, 0x13, 0x9b, 0x39, 0x7a, 0x34, 0xba, 0xd3, 0x41, 0xfb, 0xfa, 0x32, 0x8a, 0x2a, 0xb7, 0x2b, 0x86, 0x0b, 0x69, 0x83, 0x38, 0xbe, 0xcd, 0x8a, 0x2e, 0x0b, 0x70, 0xad, 0x8d, 0x26, 0x92, 0xee, 0x1e, 0xf5, 0x01, 0x2b, 0x0a, 0xd9, 0xd6, 0x97, 0x9b, 0x6e, 0xe0, 0xa8, 0x19, 0x1c, 0x3a, 0x21, 0x8b, 0x0c, 0x1e, 0x40, 0xad, 0x03, 0xe7, 0xdd, 0x66, 0x7e, 0xf5, 0xb9, 0x20, 0x0d, 0x03, 0xe8, 0x96, 0xf9, 0x82, 0x45, 0xd4, 0x39, 0xe0, 0xa0, 0x00, 0x5d, 0xd7, 0x98, 0xe6, 0x7d, 0x9e, 0x67, 0x73, 0xc3, 0x9a, 0x2a, 0xf7, 0xab, 0x8b, 0xa1, 0x3a, 0x14, 0xef, 0x34, 0xbc, 0x52, 0x0e, 0x89, 0x98, 0x9a, 0x04, 0x40, 0x84, 0x1d, 0x7e, 0x45, 0x69, 0x93, 0x57, 0xce, 0xeb, 0xce, 0xf8, 0x50, 0x7c, 0x4f, 0x1c, 0x6e, 0x04, 0x43, 0x9b, 0xf9, 0xd6, 0x3b, 0x23, 0x18, 0xe9, 0xea, 0x8e, 0xd1, 0x4d, 0x46, 0x8d, 0xf1, 0x3b, 0xe4, 0x6a, 0xca, 0xba, 0xfb, 0x23, 0xb7, 0x9b, 0xfa, 0x99, 0x01, 0x29, 0x5a, 0x58, 0x5a, 0x2d, 0xe3, 0xf9, 0xd4, 0x6d, 0x0e, 0x26, 0xad, 0xc1, 0x6e, 0x34, 0xbc, 0x32, 0xf8, 0x0c, 0x05, 0xfa, 0x65, 0xa3, 0xdb, 0x3b, 0x37, 0x83, 0x22, 0xe9, 0xd6, 0xdc, 0x72, 0x33, 0xfd, 0x5d, 0xf2, 0x20, 0xbd, 0x76, 0x3c, 0x23, 0xda, 0x28, 0xf7, 0xf9, 0x1b, 0xeb, 0x59, 0x64, 0xd5, 0xdc, 0x5f, 0x72, 0x7e, 0x20, 0xfc, 0xcd, 0x89, 0xb5, 0x90, 0x67, 0x4d, 0x62, 0x7a, 0x3f, 0x4e, 0xad, 0x1d, 0xc3, 0x39, 0xfe, 0x7a, 0xf4, 0x28, 0x16, 0xdf, 0x41, 0xf6, 0x48, 0x80, 0x05, 0xd7, 0x0f, 0x51, 0x79, 0xac, 0x10, 0xab, 0xd4, 0xec, 0x03, 0x66, 0xe6, 0x6a, 0xb0, 0xba, 0x31, 0x92, 0x42, 0x40, 0x6a, 0xbe, 0x3a, 0xd3, 0x72, 0xe1, 0x6a, 0x37, 0x55, 0xbc, 0xac, 0x1d, 0x95, 0xb7, 0x69, 0x61, 0xf2, 0x43, 0x91, 0x74, 0xe6, 0xa0, 0xd3, 0x0a, 0x24, 0x46, 0xa1, 0x08, 0xaf, 0xd6, 0xda, 0x45, 0x19, 0x96, 0xd4, 0x53, 0x1d, 0x5b, 0x84, 0x79, 0xf0, 0xc0, 0xf7, 0x47, 0xef, 0x8b, 0x8f, 0xc5, 0x06, 0xae, 0x9d, 0x4c, 0x62, 0x9d, 0xff, 0x46, 0x04, 0xf8, 0xd3, 0xc9, 0xb6, 0x10, 0x25, 0x40, 0x75, 0xfe, 0x16, 0xaa, 0xc9, 0x4a, 0x60, 0x86, 0x2f, 0xba, 0xef, 0x30, 0x77, 0xe4, 0x54, 0xe2, 0xb8, 0x84, 0x99, 0x58, 0x80, 0xaa, 0x13, 0x8b, 0x51, 0x3a, 0x4f, 0x48, 0xf6, 0x8b, 0xb6, 0xb3, 0x30, 0x82, 0x05, 0x8d, 0x30, 0x82, 0x03, 0x75, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x04, 0x18, 0x4a, 0xcc, 0xd6, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x56, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x4e, 0x31, 0x30, 0x30, 0x2e, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x27, 0x43, 0x68, 0x69, 0x6e, 0x61, 0x20, 0x46, 0x69, 0x6e, 0x61, 0x6e, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0c, 0x43, 0x46, 0x43, 0x41, 0x20, 0x45, 0x56, 0x20, 0x52, 0x4f, 0x4f, 0x54, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x32, 0x30, 0x38, 0x30, 0x38, 0x30, 0x33, 0x30, 0x37, 0x30, 0x31, 0x5a, 0x17, 0x0d, 0x32, 0x39, 0x31, 0x32, 0x33, 0x31, 0x30, 0x33, 0x30, 0x37, 0x30, 0x31, 0x5a, 0x30, 0x56, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x4e, 0x31, 0x30, 0x30, 0x2e, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x27, 0x43, 0x68, 0x69, 0x6e, 0x61, 0x20, 0x46, 0x69, 0x6e, 0x61, 0x6e, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0c, 0x43, 0x46, 0x43, 0x41, 0x20, 0x45, 0x56, 0x20, 0x52, 0x4f, 0x4f, 0x54, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xd7, 0x5d, 0x6b, 0xcd, 0x10, 0x3f, 0x1f, 0x05, 0x59, 0xd5, 0x05, 0x4d, 0x37, 0xb1, 0x0e, 0xec, 0x98, 0x2b, 0x8e, 0x15, 0x1d, 0xfa, 0x93, 0x4b, 0x17, 0x82, 0x21, 0x71, 0x10, 0x52, 0xd7, 0x51, 0x64, 0x70, 0x16, 0xc2, 0x55, 0x69, 0x4d, 0x8e, 0x15, 0x6d, 0x9f, 0xbf, 0x0c, 0x1b, 0xc2, 0xe0, 0xa3, 0x67, 0xd6, 0x0c, 0xac, 0xcf, 0x22, 0xae, 0xaf, 0x77, 0x54, 0x2a, 0x4b, 0x4c, 0x8a, 0x53, 0x52, 0x7a, 0xc3, 0xee, 0x2e, 0xde, 0xb3, 0x71, 0x25, 0xc1, 0xe9, 0x5d, 0x3d, 0xee, 0xa1, 0x2f, 0xa3, 0xf7, 0x2a, 0x3c, 0xc9, 0x23, 0x1d, 0x6a, 0xab, 0x1d, 0xa1, 0xa7, 0xf1, 0xf3, 0xec, 0xa0, 0xd5, 0x44, 0xcf, 0x15, 0xcf, 0x72, 0x2f, 0x1d, 0x63, 0x97, 0xe8, 0x99, 0xf9, 0xfd, 0x93, 0xa4, 0x54, 0x80, 0x4c, 0x52, 0xd4, 0x52, 0xab, 0x2e, 0x49, 0xdf, 0x90, 0xcd, 0xb8, 0x5f, 0xbe, 0x3f, 0xde, 0xa1, 0xca, 0x4d, 0x20, 0xd4, 0x25, 0xe8, 0x84, 0x29, 0x53, 0xb7, 0xb1, 0x88, 0x1f, 0xff, 0xfa, 0xda, 0x90, 0x9f, 0x0a, 0xa9, 0x2d, 0x41, 0x3f, 0xb1, 0xf1, 0x18, 0x29, 0xee, 0x16, 0x59, 0x2c, 0x34, 0x49, 0x1a, 0xa8, 0x06, 0xd7, 0xa8, 0x88, 0xd2, 0x03, 0x72, 0x7a, 0x32, 0xe2, 0xea, 0x68, 0x4d, 0x6e, 0x2c, 0x96, 0x65, 0x7b, 0xca, 0x59, 0xfa, 0xf2, 0xe2, 0xdd, 0xee, 0x30, 0x2c, 0xfb, 0xcc, 0x46, 0xac, 0xc4, 0x63, 0xeb, 0x6f, 0x7f, 0x36, 0x2b, 0x34, 0x73, 0x12, 0x94, 0x7f, 0xdf, 0xcc, 0x26, 0x9e, 0xf1, 0x72, 0x5d, 0x50, 0x65, 0x59, 0x8f, 0x69, 0xb3, 0x87, 0x5e, 0x32, 0x6f, 0xc3, 0x18, 0x8a, 0xb5, 0x95, 0x8f, 0xb0, 0x7a, 0x37, 0xde, 0x5a, 0x45, 0x3b, 0xc7, 0x36, 0xe1, 0xef, 0x67, 0xd1, 0x39, 0xd3, 0x97, 0x5b, 0x73, 0x62, 0x19, 0x48, 0x2d, 0x87, 0x1c, 0x06, 0xfb, 0x74, 0x98, 0x20, 0x49, 0x73, 0xf0, 0x05, 0xd2, 0x1b, 0xb1, 0xa0, 0xa3, 0xb7, 0x1b, 0x70, 0xd3, 0x88, 0x69, 0xb9, 0x5a, 0xd6, 0x38, 0xf4, 0x62, 0xdc, 0x25, 0x8b, 0x78, 0xbf, 0xf8, 0xe8, 0x7e, 0xb8, 0x5c, 0xc9, 0x95, 0x4f, 0x5f, 0xa7, 0x2d, 0xb9, 0x20, 0x6b, 0xcf, 0x6b, 0xdd, 0xf5, 0x0d, 0xf4, 0x82, 0xb7, 0xf4, 0xb2, 0x66, 0x2e, 0x10, 0x28, 0xf6, 0x97, 0x5a, 0x7b, 0x96, 0x16, 0x8f, 0x01, 0x19, 0x2d, 0x6c, 0x6e, 0x7f, 0x39, 0x58, 0x06, 0x64, 0x83, 0x01, 0x83, 0x83, 0xc3, 0x4d, 0x92, 0xdd, 0x32, 0xc6, 0x87, 0xa4, 0x37, 0xe9, 0x16, 0xce, 0xaa, 0x2d, 0x68, 0xaf, 0x0a, 0x81, 0x65, 0x3a, 0x70, 0xc1, 0x9b, 0xad, 0x4d, 0x6d, 0x54, 0xca, 0x2a, 0x2d, 0x4b, 0x85, 0x1b, 0xb3, 0x80, 0xe6, 0x70, 0x45, 0x0d, 0x6b, 0x5e, 0x35, 0xf0, 0x7f, 0x3b, 0xb8, 0x9c, 0xe4, 0x04, 0x70, 0x89, 0x12, 0x25, 0x93, 0xda, 0x0a, 0x99, 0x22, 0x60, 0x6a, 0x63, 0x60, 0x4e, 0x76, 0x06, 0x98, 0x4e, 0xbd, 0x83, 0xad, 0x1d, 0x58, 0x8a, 0x25, 0x85, 0xd2, 0xc7, 0x65, 0x1e, 0x2d, 0x8e, 0xc6, 0xdf, 0xb6, 0xc6, 0xe1, 0x7f, 0x8a, 0x04, 0x21, 0x15, 0x29, 0x74, 0xf0, 0x3e, 0x9c, 0x90, 0x9d, 0x0c, 0x2e, 0xf1, 0x8a, 0x3e, 0x5a, 0xaa, 0x0c, 0x09, 0x1e, 0xc7, 0xd5, 0x3c, 0xa3, 0xed, 0x97, 0xc3, 0x1e, 0x34, 0xfa, 0x38, 0xf9, 0x08, 0x0e, 0xe3, 0xc0, 0x5d, 0x2b, 0x83, 0xd1, 0x56, 0x6a, 0xc9, 0xb6, 0xa8, 0x54, 0x53, 0x2e, 0x78, 0x32, 0x67, 0x3d, 0x82, 0x7f, 0x74, 0xd0, 0xfb, 0xe1, 0xb6, 0x05, 0x60, 0xb9, 0x70, 0xdb, 0x8e, 0x0b, 0xf9, 0x13, 0x58, 0x6f, 0x71, 0x60, 0x10, 0x52, 0x10, 0xb9, 0xc1, 0x41, 0x09, 0xef, 0x72, 0x1f, 0x67, 0x31, 0x78, 0xff, 0x96, 0x05, 0x8d, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x63, 0x30, 0x61, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xe3, 0xfe, 0x2d, 0xfd, 0x28, 0xd0, 0x0b, 0xb5, 0xba, 0xb6, 0xa2, 0xc4, 0xbf, 0x06, 0xaa, 0x05, 0x8c, 0x93, 0xfb, 0x2f, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xe3, 0xfe, 0x2d, 0xfd, 0x28, 0xd0, 0x0b, 0xb5, 0xba, 0xb6, 0xa2, 0xc4, 0xbf, 0x06, 0xaa, 0x05, 0x8c, 0x93, 0xfb, 0x2f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x25, 0xc6, 0xba, 0x6b, 0xeb, 0x87, 0xcb, 0xde, 0x82, 0x39, 0x96, 0x3d, 0xf0, 0x44, 0xa7, 0x6b, 0x84, 0x73, 0x03, 0xde, 0x9d, 0x2b, 0x4f, 0xba, 0x20, 0x7f, 0xbc, 0x78, 0xb2, 0xcf, 0x97, 0xb0, 0x1b, 0x9c, 0xf3, 0xd7, 0x79, 0x2e, 0xf5, 0x48, 0xb6, 0xd2, 0xfb, 0x17, 0x88, 0xe6, 0xd3, 0x7a, 0x3f, 0xed, 0x53, 0x13, 0xd0, 0xe2, 0x2f, 0x6a, 0x79, 0xcb, 0x00, 0x23, 0x28, 0xe6, 0x1e, 0x37, 0x57, 0x35, 0x89, 0x84, 0xc2, 0x76, 0x4f, 0x34, 0x36, 0xad, 0x67, 0xc3, 0xce, 0x41, 0x06, 0x88, 0xc5, 0xf7, 0xee, 0xd8, 0x1a, 0xb8, 0xd6, 0x0b, 0x7f, 0x50, 0xff, 0x93, 0xaa, 0x17, 0x4b, 0x8c, 0xec, 0xed, 0x52, 0x60, 0xb2, 0xa4, 0x06, 0xea, 0x4e, 0xeb, 0xf4, 0x6b, 0x19, 0xfd, 0xeb, 0xf5, 0x1a, 0xe0, 0x25, 0x2a, 0x9a, 0xdc, 0xc7, 0x41, 0x36, 0xf7, 0xc8, 0x74, 0x05, 0x84, 0x39, 0x95, 0x39, 0xd6, 0x0b, 0x3b, 0xa4, 0x27, 0xfa, 0x08, 0xd8, 0x5c, 0x1e, 0xf8, 0x04, 0x60, 0x52, 0x11, 0x28, 0x28, 0x03, 0xff, 0xef, 0x53, 0x66, 0x00, 0xa5, 0x4a, 0x34, 0x16, 0x66, 0x7c, 0xfd, 0x09, 0xa4, 0xae, 0x9e, 0x67, 0x1a, 0x6f, 0x41, 0x0b, 0x6b, 0x06, 0x13, 0x9b, 0x8f, 0x86, 0x71, 0x05, 0xb4, 0x2f, 0x8d, 0x89, 0x66, 0x33, 0x29, 0x76, 0x54, 0x9a, 0x11, 0xf8, 0x27, 0xfa, 0xb2, 0x3f, 0x91, 0xe0, 0xce, 0x0d, 0x1b, 0xf3, 0x30, 0x1a, 0xad, 0xbf, 0x22, 0x5d, 0x1b, 0xd3, 0xbf, 0x25, 0x05, 0x4d, 0xe1, 0x92, 0x1a, 0x7f, 0x99, 0x9f, 0x3c, 0x44, 0x93, 0xca, 0xd4, 0x40, 0x49, 0x6c, 0x80, 0x87, 0xd7, 0x04, 0x3a, 0xc3, 0x32, 0x52, 0x35, 0x0e, 0x56, 0xf8, 0xa5, 0xdd, 0x7d, 0xc4, 0x8b, 0x0d, 0x11, 0x1f, 0x53, 0xcb, 0x1e, 0xb2, 0x17, 0xb6, 0x68, 0x77, 0x5a, 0xe0, 0xd4, 0xcb, 0xc8, 0x07, 0xae, 0xf5, 0x3a, 0x2e, 0x8e, 0x37, 0xb7, 0xd0, 0x01, 0x4b, 0x43, 0x29, 0x77, 0x8c, 0x39, 0x97, 0x8f, 0x82, 0x5a, 0xf8, 0x51, 0xe5, 0x89, 0xa0, 0x18, 0xe7, 0x68, 0x7f, 0x5d, 0x0a, 0x2e, 0xfb, 0xa3, 0x47, 0x0e, 0x3d, 0xa6, 0x23, 0x7a, 0xc6, 0x01, 0xc7, 0x8f, 0xc8, 0x5e, 0xbf, 0x6d, 0x80, 0x56, 0xbe, 0x8a, 0x24, 0xba, 0x33, 0xea, 0x9f, 0xe1, 0x32, 0x11, 0x9e, 0xf1, 0xd2, 0x4f, 0x80, 0xf6, 0x1b, 0x40, 0xaf, 0x38, 0x9e, 0x11, 0x50, 0x79, 0x73, 0x12, 0x12, 0xcd, 0xe6, 0x6c, 0x9d, 0x2c, 0x88, 0x72, 0x3c, 0x30, 0x81, 0x06, 0x91, 0x22, 0xea, 0x59, 0xad, 0xda, 0x19, 0x2e, 0x22, 0xc2, 0x8d, 0xb9, 0x8c, 0x87, 0xe0, 0x66, 0xbc, 0x73, 0x23, 0x5f, 0x21, 0x64, 0x63, 0x80, 0x48, 0xf5, 0xa0, 0x3c, 0x18, 0x3d, 0x94, 0xc8, 0x48, 0x41, 0x1d, 0x40, 0xba, 0x5e, 0xfe, 0xfe, 0x56, 0x39, 0xa1, 0xc8, 0xcf, 0x5e, 0x9e, 0x19, 0x64, 0x46, 0x10, 0xda, 0x17, 0x91, 0xb7, 0x05, 0x80, 0xac, 0x8b, 0x99, 0x92, 0x7d, 0xe7, 0xa2, 0xd8, 0x07, 0x0b, 0x36, 0x27, 0xe7, 0x48, 0x79, 0x60, 0x8a, 0xc3, 0xd7, 0x13, 0x5c, 0xf8, 0x72, 0x40, 0xdf, 0x4a, 0xcb, 0xcf, 0x99, 0x00, 0x0a, 0x00, 0x0b, 0x11, 0x95, 0xda, 0x56, 0x45, 0x03, 0x88, 0x0a, 0x9f, 0x67, 0xd0, 0xd5, 0x79, 0xb1, 0xa8, 0x8d, 0x40, 0x6d, 0x0d, 0xc2, 0x7a, 0x40, 0xfa, 0xf3, 0x5f, 0x64, 0x47, 0x92, 0xcb, 0x53, 0xb9, 0xbb, 0x59, 0xce, 0x4f, 0xfd, 0xd0, 0x15, 0x53, 0x01, 0xd8, 0xdf, 0xeb, 0xd9, 0xe6, 0x76, 0xef, 0xd0, 0x23, 0xbb, 0x3b, 0xa9, 0x79, 0xb3, 0xd5, 0x02, 0x29, 0xcd, 0x89, 0xa3, 0x96, 0x0f, 0x4a, 0x35, 0xe7, 0x4e, 0x42, 0xc0, 0x75, 0xcd, 0x07, 0xcf, 0xe6, 0x2c, 0xeb, 0x7b, 0x2e, 0x30, 0x82, 0x04, 0x15, 0x30, 0x82, 0x02, 0xfd, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x06, 0x49, 0x41, 0x2c, 0xe4, 0x00, 0x10, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0xa7, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x48, 0x55, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x08, 0x42, 0x75, 0x64, 0x61, 0x70, 0x65, 0x73, 0x74, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0c, 0x4e, 0x65, 0x74, 0x4c, 0x6f, 0x63, 0x6b, 0x20, 0x4b, 0x66, 0x74, 0x2e, 0x31, 0x37, 0x30, 0x35, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x2e, 0x54, 0x61, 0x6e, 0xc3, 0xba, 0x73, 0xc3, 0xad, 0x74, 0x76, 0xc3, 0xa1, 0x6e, 0x79, 0x6b, 0x69, 0x61, 0x64, 0xc3, 0xb3, 0x6b, 0x20, 0x28, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x29, 0x31, 0x35, 0x30, 0x33, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x2c, 0x4e, 0x65, 0x74, 0x4c, 0x6f, 0x63, 0x6b, 0x20, 0x41, 0x72, 0x61, 0x6e, 0x79, 0x20, 0x28, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x47, 0x6f, 0x6c, 0x64, 0x29, 0x20, 0x46, 0xc5, 0x91, 0x74, 0x61, 0x6e, 0xc3, 0xba, 0x73, 0xc3, 0xad, 0x74, 0x76, 0xc3, 0xa1, 0x6e, 0x79, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x38, 0x31, 0x32, 0x31, 0x31, 0x31, 0x35, 0x30, 0x38, 0x32, 0x31, 0x5a, 0x17, 0x0d, 0x32, 0x38, 0x31, 0x32, 0x30, 0x36, 0x31, 0x35, 0x30, 0x38, 0x32, 0x31, 0x5a, 0x30, 0x81, 0xa7, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x48, 0x55, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x08, 0x42, 0x75, 0x64, 0x61, 0x70, 0x65, 0x73, 0x74, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0c, 0x4e, 0x65, 0x74, 0x4c, 0x6f, 0x63, 0x6b, 0x20, 0x4b, 0x66, 0x74, 0x2e, 0x31, 0x37, 0x30, 0x35, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x2e, 0x54, 0x61, 0x6e, 0xc3, 0xba, 0x73, 0xc3, 0xad, 0x74, 0x76, 0xc3, 0xa1, 0x6e, 0x79, 0x6b, 0x69, 0x61, 0x64, 0xc3, 0xb3, 0x6b, 0x20, 0x28, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x29, 0x31, 0x35, 0x30, 0x33, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x2c, 0x4e, 0x65, 0x74, 0x4c, 0x6f, 0x63, 0x6b, 0x20, 0x41, 0x72, 0x61, 0x6e, 0x79, 0x20, 0x28, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x47, 0x6f, 0x6c, 0x64, 0x29, 0x20, 0x46, 0xc5, 0x91, 0x74, 0x61, 0x6e, 0xc3, 0xba, 0x73, 0xc3, 0xad, 0x74, 0x76, 0xc3, 0xa1, 0x6e, 0x79, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xc4, 0x24, 0x5e, 0x73, 0xbe, 0x4b, 0x6d, 0x14, 0xc3, 0xa1, 0xf4, 0xe3, 0x97, 0x90, 0x6e, 0xd2, 0x30, 0x45, 0x1e, 0x3c, 0xee, 0x67, 0xd9, 0x64, 0xe0, 0x1a, 0x8a, 0x7f, 0xca, 0x30, 0xca, 0x83, 0xe3, 0x20, 0xc1, 0xe3, 0xf4, 0x3a, 0xd3, 0x94, 0x5f, 0x1a, 0x7c, 0x5b, 0x6d, 0xbf, 0x30, 0x4f, 0x84, 0x27, 0xf6, 0x9f, 0x1f, 0x49, 0xbc, 0xc6, 0x99, 0x0a, 0x90, 0xf2, 0x0f, 0xf5, 0x7f, 0x43, 0x84, 0x37, 0x63, 0x51, 0x8b, 0x7a, 0xa5, 0x70, 0xfc, 0x7a, 0x58, 0xcd, 0x8e, 0x9b, 0xed, 0xc3, 0x46, 0x6c, 0x84, 0x70, 0x5d, 0xda, 0xf3, 0x01, 0x90, 0x23, 0xfc, 0x4e, 0x30, 0xa9, 0x7e, 0xe1, 0x27, 0x63, 0xe7, 0xed, 0x64, 0x3c, 0xa0, 0xb8, 0xc9, 0x33, 0x63, 0xfe, 0x16, 0x90, 0xff, 0xb0, 0xb8, 0xfd, 0xd7, 0xa8, 0xc0, 0xc0, 0x94, 0x43, 0x0b, 0xb6, 0xd5, 0x59, 0xa6, 0x9e, 0x56, 0xd0, 0x24, 0x1f, 0x70, 0x79, 0xaf, 0xdb, 0x39, 0x54, 0x0d, 0x65, 0x75, 0xd9, 0x15, 0x41, 0x94, 0x01, 0xaf, 0x5e, 0xec, 0xf6, 0x8d, 0xf1, 0xff, 0xad, 0x64, 0xfe, 0x20, 0x9a, 0xd7, 0x5c, 0xeb, 0xfe, 0xa6, 0x1f, 0x08, 0x64, 0xa3, 0x8b, 0x76, 0x55, 0xad, 0x1e, 0x3b, 0x28, 0x60, 0x2e, 0x87, 0x25, 0xe8, 0xaa, 0xaf, 0x1f, 0xc6, 0x64, 0x46, 0x20, 0xb7, 0x70, 0x7f, 0x3c, 0xde, 0x48, 0xdb, 0x96, 0x53, 0xb7, 0x39, 0x77, 0xe4, 0x1a, 0xe2, 0xc7, 0x16, 0x84, 0x76, 0x97, 0x5b, 0x2f, 0xbb, 0x19, 0x15, 0x85, 0xf8, 0x69, 0x85, 0xf5, 0x99, 0xa7, 0xa9, 0xf2, 0x34, 0xa7, 0xa9, 0xb6, 0xa6, 0x03, 0xfc, 0x6f, 0x86, 0x3d, 0x54, 0x7c, 0x76, 0x04, 0x9b, 0x6b, 0xf9, 0x40, 0x5d, 0x00, 0x34, 0xc7, 0x2e, 0x99, 0x75, 0x9d, 0xe5, 0x88, 0x03, 0xaa, 0x4d, 0xf8, 0x03, 0xd2, 0x42, 0x76, 0xc0, 0x1b, 0x02, 0x03, 0x00, 0xa8, 0x8b, 0xa3, 0x45, 0x30, 0x43, 0x30, 0x12, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x08, 0x30, 0x06, 0x01, 0x01, 0xff, 0x02, 0x01, 0x04, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xcc, 0xfa, 0x67, 0x93, 0xf0, 0xb6, 0xb8, 0xd0, 0xa5, 0xc0, 0x1e, 0xf3, 0x53, 0xfd, 0x8c, 0x53, 0xdf, 0x83, 0xd7, 0x96, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0xab, 0x7f, 0xee, 0x1c, 0x16, 0xa9, 0x9c, 0x3c, 0x51, 0x00, 0xa0, 0xc0, 0x11, 0x08, 0x05, 0xa7, 0x99, 0xe6, 0x6f, 0x01, 0x88, 0x54, 0x61, 0x6e, 0xf1, 0xb9, 0x18, 0xad, 0x4a, 0xad, 0xfe, 0x81, 0x40, 0x23, 0x94, 0x2f, 0xfb, 0x75, 0x7c, 0x2f, 0x28, 0x4b, 0x62, 0x24, 0x81, 0x82, 0x0b, 0xf5, 0x61, 0xf1, 0x1c, 0x6e, 0xb8, 0x61, 0x38, 0xeb, 0x81, 0xfa, 0x62, 0xa1, 0x3b, 0x5a, 0x62, 0xd3, 0x94, 0x65, 0xc4, 0xe1, 0xe6, 0x6d, 0x82, 0xf8, 0x2f, 0x25, 0x70, 0xb2, 0x21, 0x26, 0xc1, 0x72, 0x51, 0x1f, 0x8c, 0x2c, 0xc3, 0x84, 0x90, 0xc3, 0x5a, 0x8f, 0xba, 0xcf, 0xf4, 0xa7, 0x65, 0xa5, 0xeb, 0x98, 0xd1, 0xfb, 0x05, 0xb2, 0x46, 0x75, 0x15, 0x23, 0x6a, 0x6f, 0x85, 0x63, 0x30, 0x80, 0xf0, 0xd5, 0x9e, 0x1f, 0x29, 0x1c, 0xc2, 0x6c, 0xb0, 0x50, 0x59, 0x5d, 0x90, 0x5b, 0x3b, 0xa8, 0x0d, 0x30, 0xcf, 0xbf, 0x7d, 0x7f, 0xce, 0xf1, 0x9d, 0x83, 0xbd, 0xc9, 0x46, 0x6e, 0x20, 0xa6, 0xf9, 0x61, 0x51, 0xba, 0x21, 0x2f, 0x7b, 0xbe, 0xa5, 0x15, 0x63, 0xa1, 0xd4, 0x95, 0x87, 0xf1, 0x9e, 0xb9, 0xf3, 0x89, 0xf3, 0x3d, 0x85, 0xb8, 0xb8, 0xdb, 0xbe, 0xb5, 0xb9, 0x29, 0xf9, 0xda, 0x37, 0x05, 0x00, 0x49, 0x94, 0x03, 0x84, 0x44, 0xe7, 0xbf, 0x43, 0x31, 0xcf, 0x75, 0x8b, 0x25, 0xd1, 0xf4, 0xa6, 0x64, 0xf5, 0x92, 0xf6, 0xab, 0x05, 0xeb, 0x3d, 0xe9, 0xa5, 0x0b, 0x36, 0x62, 0xda, 0xcc, 0x06, 0x5f, 0x36, 0x8b, 0xb6, 0x5e, 0x31, 0xb8, 0x2a, 0xfb, 0x5e, 0xf6, 0x71, 0xdf, 0x44, 0x26, 0x9e, 0xc4, 0xe6, 0x0d, 0x91, 0xb4, 0x2e, 0x75, 0x95, 0x80, 0x51, 0x6a, 0x4b, 0x30, 0xa6, 0xb0, 0x62, 0xa1, 0x93, 0xf1, 0x9b, 0xd8, 0xce, 0xc4, 0x63, 0x75, 0x3f, 0x59, 0x47, 0xb1, 0x30, 0x82, 0x03, 0x4a, 0x30, 0x82, 0x02, 0x32, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x44, 0xaf, 0xb0, 0x80, 0xd6, 0xa3, 0x27, 0xba, 0x89, 0x30, 0x39, 0x86, 0x2e, 0xf8, 0x40, 0x6b, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x3f, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x1b, 0x44, 0x69, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x43, 0x6f, 0x2e, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x0e, 0x44, 0x53, 0x54, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x58, 0x33, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x30, 0x30, 0x39, 0x33, 0x30, 0x32, 0x31, 0x31, 0x32, 0x31, 0x39, 0x5a, 0x17, 0x0d, 0x32, 0x31, 0x30, 0x39, 0x33, 0x30, 0x31, 0x34, 0x30, 0x31, 0x31, 0x35, 0x5a, 0x30, 0x3f, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x1b, 0x44, 0x69, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x43, 0x6f, 0x2e, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x0e, 0x44, 0x53, 0x54, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x58, 0x33, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xdf, 0xaf, 0xe9, 0x97, 0x50, 0x08, 0x83, 0x57, 0xb4, 0xcc, 0x62, 0x65, 0xf6, 0x90, 0x82, 0xec, 0xc7, 0xd3, 0x2c, 0x6b, 0x30, 0xca, 0x5b, 0xec, 0xd9, 0xc3, 0x7d, 0xc7, 0x40, 0xc1, 0x18, 0x14, 0x8b, 0xe0, 0xe8, 0x33, 0x76, 0x49, 0x2a, 0xe3, 0x3f, 0x21, 0x49, 0x93, 0xac, 0x4e, 0x0e, 0xaf, 0x3e, 0x48, 0xcb, 0x65, 0xee, 0xfc, 0xd3, 0x21, 0x0f, 0x65, 0xd2, 0x2a, 0xd9, 0x32, 0x8f, 0x8c, 0xe5, 0xf7, 0x77, 0xb0, 0x12, 0x7b, 0xb5, 0x95, 0xc0, 0x89, 0xa3, 0xa9, 0xba, 0xed, 0x73, 0x2e, 0x7a, 0x0c, 0x06, 0x32, 0x83, 0xa2, 0x7e, 0x8a, 0x14, 0x30, 0xcd, 0x11, 0xa0, 0xe1, 0x2a, 0x38, 0xb9, 0x79, 0x0a, 0x31, 0xfd, 0x50, 0xbd, 0x80, 0x65, 0xdf, 0xb7, 0x51, 0x63, 0x83, 0xc8, 0xe2, 0x88, 0x61, 0xea, 0x4b, 0x61, 0x81, 0xec, 0x52, 0x6b, 0xb9, 0xa2, 0xe2, 0x4b, 0x1a, 0x28, 0x9f, 0x48, 0xa3, 0x9e, 0x0c, 0xda, 0x09, 0x8e, 0x3e, 0x17, 0x2e, 0x1e, 0xdd, 0x20, 0xdf, 0x5b, 0xc6, 0x2a, 0x8a, 0xab, 0x2e, 0xbd, 0x70, 0xad, 0xc5, 0x0b, 0x1a, 0x25, 0x90, 0x74, 0x72, 0xc5, 0x7b, 0x6a, 0xab, 0x34, 0xd6, 0x30, 0x89, 0xff, 0xe5, 0x68, 0x13, 0x7b, 0x54, 0x0b, 0xc8, 0xd6, 0xae, 0xec, 0x5a, 0x9c, 0x92, 0x1e, 0x3d, 0x64, 0xb3, 0x8c, 0xc6, 0xdf, 0xbf, 0xc9, 0x41, 0x70, 0xec, 0x16, 0x72, 0xd5, 0x26, 0xec, 0x38, 0x55, 0x39, 0x43, 0xd0, 0xfc, 0xfd, 0x18, 0x5c, 0x40, 0xf1, 0x97, 0xeb, 0xd5, 0x9a, 0x9b, 0x8d, 0x1d, 0xba, 0xda, 0x25, 0xb9, 0xc6, 0xd8, 0xdf, 0xc1, 0x15, 0x02, 0x3a, 0xab, 0xda, 0x6e, 0xf1, 0x3e, 0x2e, 0xf5, 0x5c, 0x08, 0x9c, 0x3c, 0xd6, 0x83, 0x69, 0xe4, 0x10, 0x9b, 0x19, 0x2a, 0xb6, 0x29, 0x57, 0xe3, 0xe5, 0x3d, 0x9b, 0x9f, 0xf0, 0x02, 0x5d, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xc4, 0xa7, 0xb1, 0xa4, 0x7b, 0x2c, 0x71, 0xfa, 0xdb, 0xe1, 0x4b, 0x90, 0x75, 0xff, 0xc4, 0x15, 0x60, 0x85, 0x89, 0x10, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0xa3, 0x1a, 0x2c, 0x9b, 0x17, 0x00, 0x5c, 0xa9, 0x1e, 0xee, 0x28, 0x66, 0x37, 0x3a, 0xbf, 0x83, 0xc7, 0x3f, 0x4b, 0xc3, 0x09, 0xa0, 0x95, 0x20, 0x5d, 0xe3, 0xd9, 0x59, 0x44, 0xd2, 0x3e, 0x0d, 0x3e, 0xbd, 0x8a, 0x4b, 0xa0, 0x74, 0x1f, 0xce, 0x10, 0x82, 0x9c, 0x74, 0x1a, 0x1d, 0x7e, 0x98, 0x1a, 0xdd, 0xcb, 0x13, 0x4b, 0xb3, 0x20, 0x44, 0xe4, 0x91, 0xe9, 0xcc, 0xfc, 0x7d, 0xa5, 0xdb, 0x6a, 0xe5, 0xfe, 0xe6, 0xfd, 0xe0, 0x4e, 0xdd, 0xb7, 0x00, 0x3a, 0xb5, 0x70, 0x49, 0xaf, 0xf2, 0xe5, 0xeb, 0x02, 0xf1, 0xd1, 0x02, 0x8b, 0x19, 0xcb, 0x94, 0x3a, 0x5e, 0x48, 0xc4, 0x18, 0x1e, 0x58, 0x19, 0x5f, 0x1e, 0x02, 0x5a, 0xf0, 0x0c, 0xf1, 0xb1, 0xad, 0xa9, 0xdc, 0x59, 0x86, 0x8b, 0x6e, 0xe9, 0x91, 0xf5, 0x86, 0xca, 0xfa, 0xb9, 0x66, 0x33, 0xaa, 0x59, 0x5b, 0xce, 0xe2, 0xa7, 0x16, 0x73, 0x47, 0xcb, 0x2b, 0xcc, 0x99, 0xb0, 0x37, 0x48, 0xcf, 0xe3, 0x56, 0x4b, 0xf5, 0xcf, 0x0f, 0x0c, 0x72, 0x32, 0x87, 0xc6, 0xf0, 0x44, 0xbb, 0x53, 0x72, 0x6d, 0x43, 0xf5, 0x26, 0x48, 0x9a, 0x52, 0x67, 0xb7, 0x58, 0xab, 0xfe, 0x67, 0x76, 0x71, 0x78, 0xdb, 0x0d, 0xa2, 0x56, 0x14, 0x13, 0x39, 0x24, 0x31, 0x85, 0xa2, 0xa8, 0x02, 0x5a, 0x30, 0x47, 0xe1, 0xdd, 0x50, 0x07, 0xbc, 0x02, 0x09, 0x90, 0x00, 0xeb, 0x64, 0x63, 0x60, 0x9b, 0x16, 0xbc, 0x88, 0xc9, 0x12, 0xe6, 0xd2, 0x7d, 0x91, 0x8b, 0xf9, 0x3d, 0x32, 0x8d, 0x65, 0xb4, 0xe9, 0x7c, 0xb1, 0x57, 0x76, 0xea, 0xc5, 0xb6, 0x28, 0x39, 0xbf, 0x15, 0x65, 0x1c, 0xc8, 0xf6, 0x77, 0x96, 0x6a, 0x0a, 0x8d, 0x77, 0x0b, 0xd8, 0x91, 0x0b, 0x04, 0x8e, 0x07, 0xdb, 0x29, 0xb6, 0x0a, 0xee, 0x9d, 0x82, 0x35, 0x35, 0x10, 0x30, 0x82, 0x03, 0xe6, 0x30, 0x82, 0x02, 0xce, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x57, 0xcb, 0x33, 0x6f, 0xc2, 0x5c, 0x16, 0xe6, 0x47, 0x16, 0x17, 0xe3, 0x90, 0x31, 0x68, 0xe0, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x62, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x18, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x53, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x4c, 0x2e, 0x4c, 0x2e, 0x43, 0x2e, 0x31, 0x30, 0x30, 0x2e, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x27, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x53, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x36, 0x31, 0x32, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x32, 0x39, 0x31, 0x32, 0x33, 0x31, 0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30, 0x62, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x18, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x53, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x4c, 0x2e, 0x4c, 0x2e, 0x43, 0x2e, 0x31, 0x30, 0x30, 0x2e, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x27, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x53, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xe4, 0xbc, 0x7e, 0x92, 0x30, 0x6d, 0xc6, 0xd8, 0x8e, 0x2b, 0x0b, 0xbc, 0x46, 0xce, 0xe0, 0x27, 0x96, 0xde, 0xde, 0xf9, 0xfa, 0x12, 0xd3, 0x3c, 0x33, 0x73, 0xb3, 0x04, 0x2f, 0xbc, 0x71, 0x8c, 0xe5, 0x9f, 0xb6, 0x22, 0x60, 0x3e, 0x5f, 0x5d, 0xce, 0x09, 0xff, 0x82, 0x0c, 0x1b, 0x9a, 0x51, 0x50, 0x1a, 0x26, 0x89, 0xdd, 0xd5, 0x61, 0x5d, 0x19, 0xdc, 0x12, 0x0f, 0x2d, 0x0a, 0xa2, 0x43, 0x5d, 0x17, 0xd0, 0x34, 0x92, 0x20, 0xea, 0x73, 0xcf, 0x38, 0x2c, 0x06, 0x26, 0x09, 0x7a, 0x72, 0xf7, 0xfa, 0x50, 0x32, 0xf8, 0xc2, 0x93, 0xd3, 0x69, 0xa2, 0x23, 0xce, 0x41, 0xb1, 0xcc, 0xe4, 0xd5, 0x1f, 0x36, 0xd1, 0x8a, 0x3a, 0xf8, 0x8c, 0x63, 0xe2, 0x14, 0x59, 0x69, 0xed, 0x0d, 0xd3, 0x7f, 0x6b, 0xe8, 0xb8, 0x03, 0xe5, 0x4f, 0x6a, 0xe5, 0x98, 0x63, 0x69, 0x48, 0x05, 0xbe, 0x2e, 0xff, 0x33, 0xb6, 0xe9, 0x97, 0x59, 0x69, 0xf8, 0x67, 0x19, 0xae, 0x93, 0x61, 0x96, 0x44, 0x15, 0xd3, 0x72, 0xb0, 0x3f, 0xbc, 0x6a, 0x7d, 0xec, 0x48, 0x7f, 0x8d, 0xc3, 0xab, 0xaa, 0x71, 0x2b, 0x53, 0x69, 0x41, 0x53, 0x34, 0xb5, 0xb0, 0xb9, 0xc5, 0x06, 0x0a, 0xc4, 0xb0, 0x45, 0xf5, 0x41, 0x5d, 0x6e, 0x89, 0x45, 0x7b, 0x3d, 0x3b, 0x26, 0x8c, 0x74, 0xc2, 0xe5, 0xd2, 0xd1, 0x7d, 0xb2, 0x11, 0xd4, 0xfb, 0x58, 0x32, 0x22, 0x9a, 0x80, 0xc9, 0xdc, 0xfd, 0x0c, 0xe9, 0x7f, 0x5e, 0x03, 0x97, 0xce, 0x3b, 0x00, 0x14, 0x87, 0x27, 0x70, 0x38, 0xa9, 0x8e, 0x6e, 0xb3, 0x27, 0x76, 0x98, 0x51, 0xe0, 0x05, 0xe3, 0x21, 0xab, 0x1a, 0xd5, 0x85, 0x22, 0x3c, 0x29, 0xb5, 0x9a, 0x16, 0xc5, 0x80, 0xa8, 0xf4, 0xbb, 0x6b, 0x30, 0x8f, 0x2f, 0x46, 0x02, 0xa2, 0xb1, 0x0c, 0x22, 0xe0, 0xd3, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x81, 0x97, 0x30, 0x81, 0x94, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x21, 0x30, 0xc9, 0xfb, 0x00, 0xd7, 0x4e, 0x98, 0xda, 0x87, 0xaa, 0x2a, 0xd0, 0xa7, 0x2e, 0xb1, 0x40, 0x31, 0xa7, 0x4c, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x52, 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04, 0x4b, 0x30, 0x49, 0x30, 0x47, 0xa0, 0x45, 0xa0, 0x43, 0x86, 0x41, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, 0x72, 0x6c, 0x2e, 0x6e, 0x65, 0x74, 0x73, 0x6f, 0x6c, 0x73, 0x73, 0x6c, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x63, 0x72, 0x6c, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0xbb, 0xae, 0x4b, 0xe7, 0xb7, 0x57, 0xeb, 0x7f, 0xaa, 0x2d, 0xb7, 0x73, 0x47, 0x85, 0x6a, 0xc1, 0xe4, 0xa5, 0x1d, 0xe4, 0xe7, 0x3c, 0xe9, 0xf4, 0x59, 0x65, 0x77, 0xb5, 0x7a, 0x5b, 0x5a, 0x8d, 0x25, 0x36, 0xe0, 0x7a, 0x97, 0x2e, 0x38, 0xc0, 0x57, 0x60, 0x83, 0x98, 0x06, 0x83, 0x9f, 0xb9, 0x76, 0x7a, 0x6e, 0x50, 0xe0, 0xba, 0x88, 0x2c, 0xfc, 0x45, 0xcc, 0x18, 0xb0, 0x99, 0x95, 0x51, 0x0e, 0xec, 0x1d, 0xb8, 0x88, 0xff, 0x87, 0x50, 0x1c, 0x82, 0xc2, 0xe3, 0xe0, 0x32, 0x80, 0xbf, 0xa0, 0x0b, 0x47, 0xc8, 0xc3, 0x31, 0xef, 0x99, 0x67, 0x32, 0x80, 0x4f, 0x17, 0x21, 0x79, 0x0c, 0x69, 0x5c, 0xde, 0x5e, 0x34, 0xae, 0x02, 0xb5, 0x26, 0xea, 0x50, 0xdf, 0x7f, 0x18, 0x65, 0x2c, 0xc9, 0xf2, 0x63, 0xe1, 0xa9, 0x07, 0xfe, 0x7c, 0x71, 0x1f, 0x6b, 0x33, 0x24, 0x6a, 0x1e, 0x05, 0xf7, 0x05, 0x68, 0xc0, 0x6a, 0x12, 0xcb, 0x2e, 0x5e, 0x61, 0xcb, 0xae, 0x28, 0xd3, 0x7e, 0xc2, 0xb4, 0x66, 0x91, 0x26, 0x5f, 0x3c, 0x2e, 0x24, 0x5f, 0xcb, 0x58, 0x0f, 0xeb, 0x28, 0xec, 0xaf, 0x11, 0x96, 0xf3, 0xdc, 0x7b, 0x6f, 0xc0, 0xa7, 0x88, 0xf2, 0x53, 0x77, 0xb3, 0x60, 0x5e, 0xae, 0xae, 0x28, 0xda, 0x35, 0x2c, 0x6f, 0x34, 0x45, 0xd3, 0x26, 0xe1, 0xde, 0xec, 0x5b, 0x4f, 0x27, 0x6b, 0x16, 0x7c, 0xbd, 0x44, 0x04, 0x18, 0x82, 0xb3, 0x89, 0x79, 0x17, 0x10, 0x71, 0x3d, 0x7a, 0xa2, 0x16, 0x4e, 0xf5, 0x01, 0xcd, 0xa4, 0x6c, 0x65, 0x68, 0xa1, 0x49, 0x76, 0x5c, 0x43, 0xc9, 0xd8, 0xbc, 0x36, 0x67, 0x6c, 0xa5, 0x94, 0xb5, 0xd4, 0xcc, 0xb9, 0xbd, 0x6a, 0x35, 0x56, 0x21, 0xde, 0xd8, 0xc3, 0xeb, 0xfb, 0xcb, 0xa4, 0x60, 0x4c, 0xb0, 0x55, 0xa0, 0xa0, 0x7b, 0x57, 0xb2, 0x30, 0x82, 0x05, 0x60, 0x30, 0x82, 0x03, 0x48, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x14, 0x78, 0x58, 0x5f, 0x2e, 0xad, 0x2c, 0x19, 0x4b, 0xe3, 0x37, 0x07, 0x35, 0x34, 0x13, 0x28, 0xb5, 0x96, 0xd4, 0x65, 0x93, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x48, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x42, 0x4d, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x10, 0x51, 0x75, 0x6f, 0x56, 0x61, 0x64, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x15, 0x51, 0x75, 0x6f, 0x56, 0x61, 0x64, 0x69, 0x73, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x31, 0x20, 0x47, 0x33, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x32, 0x30, 0x31, 0x31, 0x32, 0x31, 0x37, 0x32, 0x37, 0x34, 0x34, 0x5a, 0x17, 0x0d, 0x34, 0x32, 0x30, 0x31, 0x31, 0x32, 0x31, 0x37, 0x32, 0x37, 0x34, 0x34, 0x5a, 0x30, 0x48, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x42, 0x4d, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x10, 0x51, 0x75, 0x6f, 0x56, 0x61, 0x64, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x15, 0x51, 0x75, 0x6f, 0x56, 0x61, 0x64, 0x69, 0x73, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x31, 0x20, 0x47, 0x33, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xa0, 0xbe, 0x50, 0x10, 0x8e, 0xe9, 0xf2, 0x6c, 0x40, 0xb4, 0x04, 0x9c, 0x85, 0xb9, 0x31, 0xca, 0xdc, 0x2d, 0xe4, 0x11, 0xa9, 0x04, 0x3c, 0x1b, 0x55, 0xc1, 0xe7, 0x58, 0x30, 0x1d, 0x24, 0xb4, 0xc3, 0xef, 0x85, 0xde, 0x8c, 0x2c, 0xe1, 0xc1, 0x3d, 0xdf, 0x82, 0xe6, 0x4f, 0xad, 0x47, 0x87, 0x6c, 0xec, 0x5b, 0x49, 0xc1, 0x4a, 0xd5, 0xbb, 0x8f, 0xec, 0x87, 0xac, 0x7f, 0x82, 0x9a, 0x86, 0xec, 0x3d, 0x03, 0x99, 0x52, 0x01, 0xd2, 0x35, 0x9e, 0xac, 0xda, 0xf0, 0x53, 0xc9, 0x66, 0x3c, 0xd4, 0xac, 0x02, 0x01, 0xda, 0x24, 0xd3, 0x3b, 0xa8, 0x02, 0x46, 0xaf, 0xa4, 0x1c, 0xe3, 0xf8, 0x73, 0x58, 0x76, 0xb7, 0xf6, 0x0e, 0x90, 0x0d, 0xb5, 0xf0, 0xcf, 0xcc, 0xfa, 0xf9, 0xc6, 0x4c, 0xe5, 0xc3, 0x86, 0x30, 0x0a, 0x8d, 0x17, 0x7e, 0x35, 0xeb, 0xc5, 0xdf, 0xbb, 0x0e, 0x9c, 0xc0, 0x8d, 0x87, 0xe3, 0x88, 0x38, 0x85, 0x67, 0xfa, 0x3e, 0xc7, 0xab, 0xe0, 0x13, 0x9c, 0x05, 0x18, 0x98, 0xcf, 0x93, 0xf5, 0xb1, 0x92, 0xb4, 0xfc, 0x23, 0xd3, 0xcf, 0xd5, 0xc4, 0x27, 0x49, 0xe0, 0x9e, 0x3c, 0x9b, 0x08, 0xa3, 0x8b, 0x5d, 0x2a, 0x21, 0xe0, 0xfc, 0x39, 0xaa, 0x53, 0xda, 0x7d, 0x7e, 0xcf, 0x1a, 0x09, 0x53, 0xbc, 0x5d, 0x05, 0x04, 0xcf, 0xa1, 0x4a, 0x8f, 0x8b, 0x76, 0x82, 0x0d, 0xa1, 0xf8, 0xd2, 0xc7, 0x14, 0x77, 0x5b, 0x90, 0x36, 0x07, 0x81, 0x9b, 0x3e, 0x06, 0xfa, 0x52, 0x5e, 0x63, 0xc5, 0xa6, 0x00, 0xfe, 0xa5, 0xe9, 0x52, 0x1b, 0x52, 0xb5, 0x92, 0x39, 0x72, 0x03, 0x09, 0x62, 0xbd, 0xb0, 0x60, 0x16, 0x6e, 0xa6, 0xdd, 0x25, 0xc2, 0x03, 0x66, 0xdd, 0xf3, 0x04, 0xd1, 0x40, 0xe2, 0x4e, 0x8b, 0x86, 0xf4, 0x6f, 0xe5, 0x83, 0xa0, 0x27, 0x84, 0x5e, 0x04, 0xc1, 0xf5, 0x90, 0xbd, 0x30, 0x3d, 0xc4, 0xef, 0xa8, 0x69, 0xbc, 0x38, 0x9b, 0xa4, 0xa4, 0x96, 0xd1, 0x62, 0xda, 0x69, 0xc0, 0x01, 0x96, 0xae, 0xcb, 0xc4, 0x51, 0x34, 0xea, 0x0c, 0xaa, 0xff, 0x21, 0x8e, 0x59, 0x8f, 0x4a, 0x5c, 0xe4, 0x61, 0x9a, 0xa7, 0xd2, 0xe9, 0x2a, 0x78, 0x8d, 0x51, 0x3d, 0x3a, 0x15, 0xee, 0xa2, 0x59, 0x8e, 0xa9, 0x5c, 0xde, 0xc5, 0xf9, 0x90, 0x22, 0xe5, 0x88, 0x45, 0x71, 0xdd, 0x91, 0x99, 0x6c, 0x7a, 0x9f, 0x3d, 0x3d, 0x98, 0x7c, 0x5e, 0xf6, 0xbe, 0x16, 0x68, 0xa0, 0x5e, 0xae, 0x0b, 0x23, 0xfc, 0x5a, 0x0f, 0xaa, 0x22, 0x76, 0x2d, 0xc9, 0xa1, 0x10, 0x1d, 0xe4, 0xd3, 0x44, 0x23, 0x90, 0x88, 0x9f, 0xc6, 0x2a, 0xe6, 0xd7, 0xf5, 0x9a, 0xb3, 0x58, 0x1e, 0x2f, 0x30, 0x89, 0x08, 0x1b, 0x54, 0xa2, 0xb5, 0x98, 0x23, 0xec, 0x08, 0x77, 0x1c, 0x95, 0x5d, 0x61, 0xd1, 0xcb, 0x89, 0x9c, 0x5f, 0xa2, 0x4a, 0x91, 0x9a, 0xef, 0x21, 0xaa, 0x49, 0x16, 0x08, 0xa8, 0xbd, 0x61, 0x28, 0x31, 0xc9, 0x74, 0xad, 0x85, 0xf6, 0xd9, 0xc5, 0xb1, 0x8b, 0xd1, 0xe5, 0x10, 0x32, 0x4d, 0x5f, 0x8b, 0x20, 0x3a, 0x3c, 0x49, 0x1f, 0x33, 0x85, 0x59, 0x0d, 0xdb, 0xcb, 0x09, 0x75, 0x43, 0x69, 0x73, 0xfb, 0x6b, 0x71, 0x7d, 0xf0, 0xdf, 0xc4, 0x4c, 0x7d, 0xc6, 0xa3, 0x2e, 0xc8, 0x95, 0x79, 0xcb, 0x73, 0xa2, 0x8e, 0x4e, 0x4d, 0x24, 0xfb, 0x5e, 0xe4, 0x04, 0xbe, 0x72, 0x1b, 0xa6, 0x27, 0x2d, 0x49, 0x5a, 0x99, 0x7a, 0xd7, 0x5c, 0x09, 0x20, 0xb7, 0x7f, 0x94, 0xb9, 0x4f, 0xf1, 0x0d, 0x1c, 0x5e, 0x88, 0x42, 0x1b, 0x11, 0xb7, 0xe7, 0x91, 0xdb, 0x9e, 0x6c, 0xf4, 0x6a, 0xdf, 0x8c, 0x06, 0x98, 0x03, 0xad, 0xcc, 0x28, 0xef, 0xa5, 0x47, 0xf3, 0x53, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xa3, 0x97, 0xd6, 0xf3, 0x5e, 0xa2, 0x10, 0xe1, 0xab, 0x45, 0x9f, 0x3c, 0x17, 0x64, 0x3c, 0xee, 0x01, 0x70, 0x9c, 0xcc, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x18, 0xfa, 0x5b, 0x75, 0xfc, 0x3e, 0x7a, 0xc7, 0x5f, 0x77, 0xc7, 0xca, 0xdf, 0xcf, 0x5f, 0xc3, 0x12, 0xc4, 0x40, 0x5d, 0xd4, 0x32, 0xaa, 0xb8, 0x6a, 0xd7, 0xd5, 0x15, 0x15, 0x46, 0x98, 0x23, 0xa5, 0xe6, 0x90, 0x5b, 0x18, 0x99, 0x4c, 0xe3, 0xad, 0x42, 0xa3, 0x82, 0x31, 0x36, 0x88, 0xcd, 0xe9, 0xfb, 0xc4, 0x04, 0x96, 0x48, 0x8b, 0x01, 0xc7, 0x8d, 0x01, 0xcf, 0x5b, 0x33, 0x06, 0x96, 0x46, 0x66, 0x74, 0x1d, 0x4f, 0xed, 0xc1, 0xb6, 0xb9, 0xb4, 0x0d, 0x61, 0xcc, 0x63, 0x7e, 0xd7, 0x2e, 0x77, 0x8c, 0x96, 0x1c, 0x2a, 0x23, 0x68, 0x6b, 0x85, 0x57, 0x76, 0x70, 0x33, 0x13, 0xfe, 0xe1, 0x4f, 0xa6, 0x23, 0x77, 0x18, 0xfa, 0x1a, 0x8c, 0xe8, 0xbd, 0x65, 0xc9, 0xcf, 0x3f, 0xf4, 0xc9, 0x17, 0xdc, 0xeb, 0xc7, 0xbc, 0xc0, 0x04, 0x2e, 0x2d, 0x46, 0x2f, 0x69, 0x66, 0xc3, 0x1b, 0x8f, 0xfe, 0xec, 0x3e, 0xd3, 0xca, 0x94, 0xbf, 0x76, 0x0a, 0x25, 0x0d, 0xa9, 0x7b, 0x02, 0x1c, 0xa9, 0xd0, 0x3b, 0x5f, 0x0b, 0xc0, 0x81, 0x3a, 0x3d, 0x64, 0xe1, 0xbf, 0xa7, 0x2d, 0x4e, 0xbd, 0x4d, 0xc4, 0xd8, 0x29, 0xc6, 0x22, 0x18, 0xd0, 0xc5, 0xac, 0x72, 0x02, 0x82, 0x3f, 0xaa, 0x3a, 0xa2, 0x3a, 0x22, 0x97, 0x31, 0xdd, 0x08, 0x63, 0xc3, 0x75, 0x14, 0xb9, 0x60, 0x28, 0x2d, 0x5b, 0x68, 0xe0, 0x16, 0xa9, 0x66, 0x82, 0x23, 0x51, 0xf5, 0xeb, 0x53, 0xd8, 0x31, 0x9b, 0x7b, 0xe9, 0xb7, 0x9d, 0x4b, 0xeb, 0x88, 0x16, 0xcf, 0xf9, 0x5d, 0x38, 0x8a, 0x49, 0x30, 0x8f, 0xed, 0xf1, 0xeb, 0x19, 0xf4, 0x77, 0x1a, 0x31, 0x18, 0x4d, 0x67, 0x54, 0x6c, 0x2f, 0x6f, 0x65, 0xf9, 0xdb, 0x3d, 0xec, 0x21, 0xec, 0x5e, 0xf4, 0xf4, 0x8b, 0xca, 0x60, 0x65, 0x54, 0xd1, 0x71, 0x64, 0xf4, 0xf9, 0xa6, 0xa3, 0x81, 0x33, 0x36, 0x33, 0x71, 0xf0, 0xa4, 0x78, 0x5f, 0x4e, 0xad, 0x83, 0x21, 0xde, 0x34, 0x49, 0x8d, 0xe8, 0x59, 0xac, 0x9d, 0xf2, 0x76, 0x5a, 0x36, 0xf2, 0x13, 0xf4, 0xaf, 0xe0, 0x09, 0xc7, 0x61, 0x2a, 0x6c, 0xf7, 0xe0, 0x9d, 0xae, 0xbb, 0x86, 0x4a, 0x28, 0x6f, 0x2e, 0xee, 0xb4, 0x79, 0xcd, 0x90, 0x33, 0xc3, 0xb3, 0x76, 0xfa, 0xf5, 0xf0, 0x6c, 0x9d, 0x01, 0x90, 0xfa, 0x9e, 0x90, 0xf6, 0x9c, 0x72, 0xcf, 0x47, 0xda, 0xc3, 0x1f, 0xe4, 0x35, 0x20, 0x53, 0xf2, 0x54, 0xd1, 0xdf, 0x61, 0x83, 0xa6, 0x02, 0xe2, 0x25, 0x38, 0xde, 0x85, 0x32, 0x2d, 0x5e, 0x73, 0x90, 0x52, 0x5d, 0x42, 0xc4, 0xce, 0x3d, 0x4b, 0xe1, 0xf9, 0x19, 0x84, 0x1d, 0xd5, 0xa2, 0x50, 0xcc, 0x41, 0xfb, 0x41, 0x14, 0xc3, 0xbd, 0xd6, 0xc9, 0x5a, 0xa3, 0x63, 0x66, 0x02, 0x80, 0xbd, 0x05, 0x3a, 0x3b, 0x47, 0x9c, 0xec, 0x00, 0x26, 0x4c, 0xf5, 0x88, 0x51, 0xbf, 0xa8, 0x23, 0x7f, 0x18, 0x07, 0xb0, 0x0b, 0xed, 0x8b, 0x26, 0xa1, 0x64, 0xd3, 0x61, 0x4a, 0xeb, 0x5c, 0x9f, 0xde, 0xb3, 0xaf, 0x67, 0x03, 0xb3, 0x1f, 0xdd, 0x6d, 0x5d, 0x69, 0x68, 0x69, 0xab, 0x5e, 0x3a, 0xec, 0x7c, 0x69, 0xbc, 0xc7, 0x3b, 0x85, 0x4e, 0x9e, 0x15, 0xb9, 0xb4, 0x15, 0x4f, 0xc3, 0x95, 0x7a, 0x58, 0xd7, 0xc9, 0x6c, 0xe9, 0x6c, 0xb9, 0xf3, 0x29, 0x63, 0x5e, 0xb4, 0x2c, 0xf0, 0x2d, 0x3d, 0xed, 0x5a, 0x65, 0xe0, 0xa9, 0x5b, 0x40, 0xc2, 0x48, 0x99, 0x81, 0x6d, 0x9e, 0x1f, 0x06, 0x2a, 0x3c, 0x12, 0xb4, 0x8b, 0x0f, 0x9b, 0xa2, 0x24, 0xf0, 0xa6, 0x8d, 0xd6, 0x7a, 0xe0, 0x4b, 0xb6, 0x64, 0x96, 0x63, 0x95, 0x84, 0xc2, 0x4a, 0xcd, 0x1c, 0x2e, 0x24, 0x87, 0x33, 0x60, 0xe5, 0xc3, 0x30, 0x82, 0x05, 0xb7, 0x30, 0x82, 0x03, 0x9f, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x02, 0x05, 0x09, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x45, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x42, 0x4d, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x10, 0x51, 0x75, 0x6f, 0x56, 0x61, 0x64, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x12, 0x51, 0x75, 0x6f, 0x56, 0x61, 0x64, 0x69, 0x73, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x32, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x36, 0x31, 0x31, 0x32, 0x34, 0x31, 0x38, 0x32, 0x37, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x33, 0x31, 0x31, 0x31, 0x32, 0x34, 0x31, 0x38, 0x32, 0x33, 0x33, 0x33, 0x5a, 0x30, 0x45, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x42, 0x4d, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x10, 0x51, 0x75, 0x6f, 0x56, 0x61, 0x64, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x12, 0x51, 0x75, 0x6f, 0x56, 0x61, 0x64, 0x69, 0x73, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x32, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0x9a, 0x18, 0xca, 0x4b, 0x94, 0x0d, 0x00, 0x2d, 0xaf, 0x03, 0x29, 0x8a, 0xf0, 0x0f, 0x81, 0xc8, 0xae, 0x4c, 0x19, 0x85, 0x1d, 0x08, 0x9f, 0xab, 0x29, 0x44, 0x85, 0xf3, 0x2f, 0x81, 0xad, 0x32, 0x1e, 0x90, 0x46, 0xbf, 0xa3, 0x86, 0x26, 0x1a, 0x1e, 0xfe, 0x7e, 0x1c, 0x18, 0x3a, 0x5c, 0x9c, 0x60, 0x17, 0x2a, 0x3a, 0x74, 0x83, 0x33, 0x30, 0x7d, 0x61, 0x54, 0x11, 0xcb, 0xed, 0xab, 0xe0, 0xe6, 0xd2, 0xa2, 0x7e, 0xf5, 0x6b, 0x6f, 0x18, 0xb7, 0x0a, 0x0b, 0x2d, 0xfd, 0xe9, 0x3e, 0xef, 0x0a, 0xc6, 0xb3, 0x10, 0xe9, 0xdc, 0xc2, 0x46, 0x17, 0xf8, 0x5d, 0xfd, 0xa4, 0xda, 0xff, 0x9e, 0x49, 0x5a, 0x9c, 0xe6, 0x33, 0xe6, 0x24, 0x96, 0xf7, 0x3f, 0xba, 0x5b, 0x2b, 0x1c, 0x7a, 0x35, 0xc2, 0xd6, 0x67, 0xfe, 0xab, 0x66, 0x50, 0x8b, 0x6d, 0x28, 0x60, 0x2b, 0xef, 0xd7, 0x60, 0xc3, 0xc7, 0x93, 0xbc, 0x8d, 0x36, 0x91, 0xf3, 0x7f, 0xf8, 0xdb, 0x11, 0x13, 0xc4, 0x9c, 0x77, 0x76, 0xc1, 0xae, 0xb7, 0x02, 0x6a, 0x81, 0x7a, 0xa9, 0x45, 0x83, 0xe2, 0x05, 0xe6, 0xb9, 0x56, 0xc1, 0x94, 0x37, 0x8f, 0x48, 0x71, 0x63, 0x22, 0xec, 0x17, 0x65, 0x07, 0x95, 0x8a, 0x4b, 0xdf, 0x8f, 0xc6, 0x5a, 0x0a, 0xe5, 0xb0, 0xe3, 0x5f, 0x5e, 0x6b, 0x11, 0xab, 0x0c, 0xf9, 0x85, 0xeb, 0x44, 0xe9, 0xf8, 0x04, 0x73, 0xf2, 0xe9, 0xfe, 0x5c, 0x98, 0x8c, 0xf5, 0x73, 0xaf, 0x6b, 0xb4, 0x7e, 0xcd, 0xd4, 0x5c, 0x02, 0x2b, 0x4c, 0x39, 0xe1, 0xb2, 0x95, 0x95, 0x2d, 0x42, 0x87, 0xd7, 0xd5, 0xb3, 0x90, 0x43, 0xb7, 0x6c, 0x13, 0xf1, 0xde, 0xdd, 0xf6, 0xc4, 0xf8, 0x89, 0x3f, 0xd1, 0x75, 0xf5, 0x92, 0xc3, 0x91, 0xd5, 0x8a, 0x88, 0xd0, 0x90, 0xec, 0xdc, 0x6d, 0xde, 0x89, 0xc2, 0x65, 0x71, 0x96, 0x8b, 0x0d, 0x03, 0xfd, 0x9c, 0xbf, 0x5b, 0x16, 0xac, 0x92, 0xdb, 0xea, 0xfe, 0x79, 0x7c, 0xad, 0xeb, 0xaf, 0xf7, 0x16, 0xcb, 0xdb, 0xcd, 0x25, 0x2b, 0xe5, 0x1f, 0xfb, 0x9a, 0x9f, 0xe2, 0x51, 0xcc, 0x3a, 0x53, 0x0c, 0x48, 0xe6, 0x0e, 0xbd, 0xc9, 0xb4, 0x76, 0x06, 0x52, 0xe6, 0x11, 0x13, 0x85, 0x72, 0x63, 0x03, 0x04, 0xe0, 0x04, 0x36, 0x2b, 0x20, 0x19, 0x02, 0xe8, 0x74, 0xa7, 0x1f, 0xb6, 0xc9, 0x56, 0x66, 0xf0, 0x75, 0x25, 0xdc, 0x67, 0xc1, 0x0e, 0x61, 0x60, 0x88, 0xb3, 0x3e, 0xd1, 0xa8, 0xfc, 0xa3, 0xda, 0x1d, 0xb0, 0xd1, 0xb1, 0x23, 0x54, 0xdf, 0x44, 0x76, 0x6d, 0xed, 0x41, 0xd8, 0xc1, 0xb2, 0x22, 0xb6, 0x53, 0x1c, 0xdf, 0x35, 0x1d, 0xdc, 0xa1, 0x77, 0x2a, 0x31, 0xe4, 0x2d, 0xf5, 0xe5, 0xe5, 0xdb, 0xc8, 0xe0, 0xff, 0xe5, 0x80, 0xd7, 0x0b, 0x63, 0xa0, 0xff, 0x33, 0xa1, 0x0f, 0xba, 0x2c, 0x15, 0x15, 0xea, 0x97, 0xb3, 0xd2, 0xa2, 0xb5, 0xbe, 0xf2, 0x8c, 0x96, 0x1e, 0x1a, 0x8f, 0x1d, 0x6c, 0xa4, 0x61, 0x37, 0xb9, 0x86, 0x73, 0x33, 0xd7, 0x97, 0x96, 0x9e, 0x23, 0x7d, 0x82, 0xa4, 0x4c, 0x81, 0xe2, 0xa1, 0xd1, 0xba, 0x67, 0x5f, 0x95, 0x07, 0xa3, 0x27, 0x11, 0xee, 0x16, 0x10, 0x7b, 0xbc, 0x45, 0x4a, 0x4c, 0xb2, 0x04, 0xd2, 0xab, 0xef, 0xd5, 0xfd, 0x0c, 0x51, 0xce, 0x50, 0x6a, 0x08, 0x31, 0xf9, 0x91, 0xda, 0x0c, 0x8f, 0x64, 0x5c, 0x03, 0xc3, 0x3a, 0x8b, 0x20, 0x3f, 0x6e, 0x8d, 0x67, 0x3d, 0x3a, 0xd6, 0xfe, 0x7d, 0x5b, 0x88, 0xc9, 0x5e, 0xfb, 0xcc, 0x61, 0xdc, 0x8b, 0x33, 0x77, 0xd3, 0x44, 0x32, 0x35, 0x09, 0x62, 0x04, 0x92, 0x16, 0x10, 0xd8, 0x9e, 0x27, 0x47, 0xfb, 0x3b, 0x21, 0xe3, 0xf8, 0xeb, 0x1d, 0x5b, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x81, 0xb0, 0x30, 0x81, 0xad, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x1a, 0x84, 0x62, 0xbc, 0x48, 0x4c, 0x33, 0x25, 0x04, 0xd4, 0xee, 0xd0, 0xf6, 0x03, 0xc4, 0x19, 0x46, 0xd1, 0x94, 0x6b, 0x30, 0x6e, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x67, 0x30, 0x65, 0x80, 0x14, 0x1a, 0x84, 0x62, 0xbc, 0x48, 0x4c, 0x33, 0x25, 0x04, 0xd4, 0xee, 0xd0, 0xf6, 0x03, 0xc4, 0x19, 0x46, 0xd1, 0x94, 0x6b, 0xa1, 0x49, 0xa4, 0x47, 0x30, 0x45, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x42, 0x4d, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x10, 0x51, 0x75, 0x6f, 0x56, 0x61, 0x64, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x12, 0x51, 0x75, 0x6f, 0x56, 0x61, 0x64, 0x69, 0x73, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x32, 0x82, 0x02, 0x05, 0x09, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x3e, 0x0a, 0x16, 0x4d, 0x9f, 0x06, 0x5b, 0xa8, 0xae, 0x71, 0x5d, 0x2f, 0x05, 0x2f, 0x67, 0xe6, 0x13, 0x45, 0x83, 0xc4, 0x36, 0xf6, 0xf3, 0xc0, 0x26, 0x0c, 0x0d, 0xb5, 0x47, 0x64, 0x5d, 0xf8, 0xb4, 0x72, 0xc9, 0x46, 0xa5, 0x03, 0x18, 0x27, 0x55, 0x89, 0x78, 0x7d, 0x76, 0xea, 0x96, 0x34, 0x80, 0x17, 0x20, 0xdc, 0xe7, 0x83, 0xf8, 0x8d, 0xfc, 0x07, 0xb8, 0xda, 0x5f, 0x4d, 0x2e, 0x67, 0xb2, 0x84, 0xfd, 0xd9, 0x44, 0xfc, 0x77, 0x50, 0x81, 0xe6, 0x7c, 0xb4, 0xc9, 0x0d, 0x0b, 0x72, 0x53, 0xf8, 0x76, 0x07, 0x07, 0x41, 0x47, 0x96, 0x0c, 0xfb, 0xe0, 0x82, 0x26, 0x93, 0x55, 0x8c, 0xfe, 0x22, 0x1f, 0x60, 0x65, 0x7c, 0x5f, 0xe7, 0x26, 0xb3, 0xf7, 0x32, 0x90, 0x98, 0x50, 0xd4, 0x37, 0x71, 0x55, 0xf6, 0x92, 0x21, 0x78, 0xf7, 0x95, 0x79, 0xfa, 0xf8, 0x2d, 0x26, 0x87, 0x66, 0x56, 0x30, 0x77, 0xa6, 0x37, 0x78, 0x33, 0x52, 0x10, 0x58, 0xae, 0x3f, 0x61, 0x8e, 0xf2, 0x6a, 0xb1, 0xef, 0x18, 0x7e, 0x4a, 0x59, 0x63, 0xca, 0x8d, 0xa2, 0x56, 0xd5, 0xa7, 0x2f, 0xbc, 0x56, 0x1f, 0xcf, 0x39, 0xc1, 0xe2, 0xfb, 0x0a, 0xa8, 0x15, 0x2c, 0x7d, 0x4d, 0x7a, 0x63, 0xc6, 0x6c, 0x97, 0x44, 0x3c, 0xd2, 0x6f, 0xc3, 0x4a, 0x17, 0x0a, 0xf8, 0x90, 0xd2, 0x57, 0xa2, 0x19, 0x51, 0xa5, 0x2d, 0x97, 0x41, 0xda, 0x07, 0x4f, 0xa9, 0x50, 0xda, 0x90, 0x8d, 0x94, 0x46, 0xe1, 0x3e, 0xf0, 0x94, 0xfd, 0x10, 0x00, 0x38, 0xf5, 0x3b, 0xe8, 0x40, 0xe1, 0xb4, 0x6e, 0x56, 0x1a, 0x20, 0xcc, 0x6f, 0x58, 0x8d, 0xed, 0x2e, 0x45, 0x8f, 0xd6, 0xe9, 0x93, 0x3f, 0xe7, 0xb1, 0x2c, 0xdf, 0x3a, 0xd6, 0x22, 0x8c, 0xdc, 0x84, 0xbb, 0x22, 0x6f, 0xd0, 0xf8, 0xe4, 0xc6, 0x39, 0xe9, 0x04, 0x88, 0x3c, 0xc3, 0xba, 0xeb, 0x55, 0x7a, 0x6d, 0x80, 0x99, 0x24, 0xf5, 0x6c, 0x01, 0xfb, 0xf8, 0x97, 0xb0, 0x94, 0x5b, 0xeb, 0xfd, 0xd2, 0x6f, 0xf1, 0x77, 0x68, 0x0d, 0x35, 0x64, 0x23, 0xac, 0xb8, 0x55, 0xa1, 0x03, 0xd1, 0x4d, 0x42, 0x19, 0xdc, 0xf8, 0x75, 0x59, 0x56, 0xa3, 0xf9, 0xa8, 0x49, 0x79, 0xf8, 0xaf, 0x0e, 0xb9, 0x11, 0xa0, 0x7c, 0xb7, 0x6a, 0xed, 0x34, 0xd0, 0xb6, 0x26, 0x62, 0x38, 0x1a, 0x87, 0x0c, 0xf8, 0xe8, 0xfd, 0x2e, 0xd3, 0x90, 0x7f, 0x07, 0x91, 0x2a, 0x1d, 0xd6, 0x7e, 0x5c, 0x85, 0x83, 0x99, 0xb0, 0x38, 0x08, 0x3f, 0xe9, 0x5e, 0xf9, 0x35, 0x07, 0xe4, 0xc9, 0x62, 0x6e, 0x57, 0x7f, 0xa7, 0x50, 0x95, 0xf7, 0xba, 0xc8, 0x9b, 0xe6, 0x8e, 0xa2, 0x01, 0xc5, 0xd6, 0x66, 0xbf, 0x79, 0x61, 0xf3, 0x3c, 0x1c, 0xe1, 0xb9, 0x82, 0x5c, 0x5d, 0xa0, 0xc3, 0xe9, 0xd8, 0x48, 0xbd, 0x19, 0xa2, 0x11, 0x14, 0x19, 0x6e, 0xb2, 0x86, 0x1b, 0x68, 0x3e, 0x48, 0x37, 0x1a, 0x88, 0xb7, 0x5d, 0x96, 0x5e, 0x9c, 0xc7, 0xef, 0x27, 0x62, 0x08, 0xe2, 0x91, 0x19, 0x5c, 0xd2, 0xf1, 0x21, 0xdd, 0xba, 0x17, 0x42, 0x82, 0x97, 0x71, 0x81, 0x53, 0x31, 0xa9, 0x9f, 0xf6, 0x7d, 0x62, 0xbf, 0x72, 0xe1, 0xa3, 0x93, 0x1d, 0xcc, 0x8a, 0x26, 0x5a, 0x09, 0x38, 0xd0, 0xce, 0xd7, 0x0d, 0x80, 0x16, 0xb4, 0x78, 0xa5, 0x3a, 0x87, 0x4c, 0x8d, 0x8a, 0xa5, 0xd5, 0x46, 0x97, 0xf2, 0x2c, 0x10, 0xb9, 0xbc, 0x54, 0x22, 0xc0, 0x01, 0x50, 0x69, 0x43, 0x9e, 0xf4, 0xb2, 0xef, 0x6d, 0xf8, 0xec, 0xda, 0xf1, 0xe3, 0xb1, 0xef, 0xdf, 0x91, 0x8f, 0x54, 0x2a, 0x0b, 0x25, 0xc1, 0x26, 0x19, 0xc4, 0x52, 0x10, 0x05, 0x65, 0xd5, 0x82, 0x10, 0xea, 0xc2, 0x31, 0xcd, 0x2e, 0x30, 0x82, 0x05, 0x60, 0x30, 0x82, 0x03, 0x48, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x14, 0x44, 0x57, 0x34, 0x24, 0x5b, 0x81, 0x89, 0x9b, 0x35, 0xf2, 0xce, 0xb8, 0x2b, 0x3b, 0x5b, 0xa7, 0x26, 0xf0, 0x75, 0x28, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x48, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x42, 0x4d, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x10, 0x51, 0x75, 0x6f, 0x56, 0x61, 0x64, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x15, 0x51, 0x75, 0x6f, 0x56, 0x61, 0x64, 0x69, 0x73, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x32, 0x20, 0x47, 0x33, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x32, 0x30, 0x31, 0x31, 0x32, 0x31, 0x38, 0x35, 0x39, 0x33, 0x32, 0x5a, 0x17, 0x0d, 0x34, 0x32, 0x30, 0x31, 0x31, 0x32, 0x31, 0x38, 0x35, 0x39, 0x33, 0x32, 0x5a, 0x30, 0x48, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x42, 0x4d, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x10, 0x51, 0x75, 0x6f, 0x56, 0x61, 0x64, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x15, 0x51, 0x75, 0x6f, 0x56, 0x61, 0x64, 0x69, 0x73, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x32, 0x20, 0x47, 0x33, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xa1, 0xae, 0x25, 0xb2, 0x01, 0x18, 0xdc, 0x57, 0x88, 0x3f, 0x46, 0xeb, 0xf9, 0xaf, 0xe2, 0xeb, 0x23, 0x71, 0xe2, 0x9a, 0xd1, 0x61, 0x66, 0x21, 0x5f, 0xaa, 0xaf, 0x27, 0x51, 0xe5, 0x6e, 0x1b, 0x16, 0xd4, 0x2d, 0x7d, 0x50, 0xb0, 0x53, 0x77, 0xbd, 0x78, 0x3a, 0x60, 0xe2, 0x64, 0x02, 0x9b, 0x7c, 0x86, 0x9b, 0xd6, 0x1a, 0x8e, 0xad, 0xff, 0x1f, 0x15, 0x7f, 0xd5, 0x95, 0x1e, 0x12, 0xcb, 0xe6, 0x14, 0x84, 0x04, 0xc1, 0xdf, 0x36, 0xb3, 0x16, 0x9f, 0x8a, 0xe3, 0xc9, 0xdb, 0x98, 0x34, 0xce, 0xd8, 0x33, 0x17, 0x28, 0x46, 0xfc, 0xa7, 0xc9, 0xf0, 0xd2, 0xb4, 0xd5, 0x4d, 0x09, 0x72, 0x49, 0xf9, 0xf2, 0x87, 0xe3, 0xa9, 0xda, 0x7d, 0xa1, 0x7d, 0x6b, 0xb2, 0x3a, 0x25, 0xa9, 0x6d, 0x52, 0x44, 0xac, 0xf8, 0xbe, 0x6e, 0xfb, 0xdc, 0xa6, 0x73, 0x91, 0x90, 0x61, 0xa6, 0x03, 0x14, 0x20, 0xf2, 0xe7, 0x87, 0xa3, 0x88, 0xad, 0xad, 0xa0, 0x8c, 0xff, 0xa6, 0x0b, 0x25, 0x52, 0x25, 0xe7, 0x16, 0x01, 0xd5, 0xcb, 0xb8, 0x35, 0x81, 0x0c, 0xa3, 0x3b, 0xf0, 0xe1, 0xe1, 0xfc, 0x5a, 0x5d, 0xce, 0x80, 0x71, 0x6d, 0xf8, 0x49, 0xab, 0x3e, 0x3b, 0xba, 0xb8, 0xd7, 0x80, 0x01, 0xfb, 0xa5, 0xeb, 0x5b, 0xb3, 0xc5, 0x5e, 0x60, 0x2a, 0x31, 0xa0, 0xaf, 0x37, 0xe8, 0x20, 0x3a, 0x9f, 0xa8, 0x32, 0x2c, 0x0c, 0xcc, 0x09, 0x1d, 0xd3, 0x9e, 0x8e, 0x5d, 0xbc, 0x4c, 0x98, 0xee, 0xc5, 0x1a, 0x68, 0x7b, 0xec, 0x53, 0xa6, 0xe9, 0x14, 0x35, 0xa3, 0xdf, 0xcd, 0x80, 0x9f, 0x0c, 0x48, 0xfb, 0x1c, 0xf4, 0xf1, 0xbf, 0x4a, 0xb8, 0xfa, 0xd5, 0x8c, 0x71, 0x4a, 0xc7, 0x1f, 0xad, 0xfe, 0x41, 0x9a, 0xb3, 0x83, 0x5d, 0xf2, 0x84, 0x56, 0xef, 0xa5, 0x57, 0x43, 0xce, 0x29, 0xad, 0x8c, 0xab, 0x55, 0xbf, 0xc4, 0xfb, 0x5b, 0x01, 0xdd, 0x23, 0x21, 0xa1, 0x58, 0x00, 0x8e, 0xc3, 0xd0, 0x6a, 0x13, 0xed, 0x13, 0xe3, 0x12, 0x2b, 0x80, 0xdc, 0x67, 0xe6, 0x95, 0xb2, 0xcd, 0x1e, 0x22, 0x6e, 0x2a, 0xf8, 0x41, 0xd4, 0xf2, 0xca, 0x14, 0x07, 0x8d, 0x8a, 0x55, 0x12, 0xc6, 0x69, 0xf5, 0xb8, 0x86, 0x68, 0x2f, 0x53, 0x5e, 0xb0, 0xd2, 0xaa, 0x21, 0xc1, 0x98, 0xe6, 0x30, 0xe3, 0x67, 0x55, 0xc7, 0x9b, 0x6e, 0xac, 0x19, 0xa8, 0x55, 0xa6, 0x45, 0x06, 0xd0, 0x23, 0x3a, 0xdb, 0xeb, 0x65, 0x5d, 0x2a, 0x11, 0x11, 0xf0, 0x3b, 0x4f, 0xca, 0x6d, 0xf4, 0x34, 0xc4, 0x71, 0xe4, 0xff, 0x00, 0x5a, 0xf6, 0x5c, 0xae, 0x23, 0x60, 0x85, 0x73, 0xf1, 0xe4, 0x10, 0xb1, 0x25, 0xae, 0xd5, 0x92, 0xbb, 0x13, 0xc1, 0x0c, 0xe0, 0x39, 0xda, 0xb4, 0x39, 0x57, 0xb5, 0xab, 0x35, 0xaa, 0x72, 0x21, 0x3b, 0x83, 0x35, 0xe7, 0x31, 0xdf, 0x7a, 0x21, 0x6e, 0xb8, 0x32, 0x08, 0x7d, 0x1d, 0x32, 0x91, 0x15, 0x4a, 0x62, 0x72, 0xcf, 0xe3, 0x77, 0xa1, 0xbc, 0xd5, 0x11, 0x1b, 0x76, 0x01, 0x67, 0x08, 0xe0, 0x41, 0x0b, 0xc3, 0xeb, 0x15, 0x6e, 0xf8, 0xa4, 0x19, 0xd9, 0xa2, 0xab, 0xaf, 0xe2, 0x27, 0x52, 0x56, 0x2b, 0x02, 0x8a, 0x2c, 0x14, 0x24, 0xf9, 0xbf, 0x42, 0x02, 0xbf, 0x26, 0xc8, 0xc6, 0x8f, 0xe0, 0x6e, 0x38, 0x7d, 0x53, 0x2d, 0xe5, 0xed, 0x98, 0xb3, 0x95, 0x63, 0x68, 0x7f, 0xf9, 0x35, 0xf4, 0xdf, 0x88, 0xc5, 0x60, 0x35, 0x92, 0xc0, 0x7c, 0x69, 0x1c, 0x61, 0x95, 0x16, 0xd0, 0xeb, 0xde, 0x0b, 0xaf, 0x3e, 0x04, 0x10, 0x45, 0x65, 0x58, 0x50, 0x38, 0xaf, 0x48, 0xf2, 0x59, 0xb6, 0x16, 0xf2, 0x3c, 0x0d, 0x90, 0x02, 0xc6, 0x70, 0x2e, 0x01, 0xad, 0x3c, 0x15, 0xd7, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xed, 0xe7, 0x6f, 0x76, 0x5a, 0xbf, 0x60, 0xec, 0x49, 0x5b, 0xc6, 0xa5, 0x77, 0xbb, 0x72, 0x16, 0x71, 0x9b, 0xc4, 0x3d, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x91, 0xdf, 0x80, 0x3f, 0x43, 0x09, 0x7e, 0x71, 0xc2, 0xf7, 0xeb, 0xb3, 0x88, 0x8f, 0xe1, 0x51, 0xb2, 0xbc, 0x3d, 0x75, 0xf9, 0x28, 0x5d, 0xc8, 0xbc, 0x99, 0x9b, 0x7b, 0x5d, 0xaa, 0xe5, 0xca, 0xe1, 0x0a, 0xf7, 0xe8, 0xb2, 0xd3, 0x9f, 0xdd, 0x67, 0x31, 0x7e, 0xba, 0x01, 0xaa, 0xc7, 0x6a, 0x41, 0x3b, 0x90, 0xd4, 0x08, 0x5c, 0xb2, 0x60, 0x6a, 0x90, 0xf0, 0xc8, 0xce, 0x03, 0x62, 0xf9, 0x8b, 0xed, 0xfb, 0x6e, 0x2a, 0xdc, 0x06, 0x4d, 0x3c, 0x29, 0x0f, 0x89, 0x16, 0x8a, 0x58, 0x4c, 0x48, 0x0f, 0xe8, 0x84, 0x61, 0xea, 0x3c, 0x72, 0xa6, 0x77, 0xe4, 0x42, 0xae, 0x88, 0xa3, 0x43, 0x58, 0x79, 0x7e, 0xae, 0xca, 0xa5, 0x53, 0x0d, 0xa9, 0x3d, 0x70, 0xbd, 0x20, 0x19, 0x61, 0xa4, 0x6c, 0x38, 0xfc, 0x43, 0x32, 0xe1, 0xc1, 0x47, 0xff, 0xf8, 0xec, 0xf1, 0x11, 0x22, 0x32, 0x96, 0x9c, 0xc2, 0xf6, 0x5b, 0x69, 0x96, 0x7b, 0x20, 0x0c, 0x43, 0x41, 0x9a, 0x5b, 0xf6, 0x59, 0x19, 0x88, 0xde, 0x55, 0x88, 0x37, 0x51, 0x0b, 0x78, 0x5c, 0x0a, 0x1e, 0xa3, 0x42, 0xfd, 0xc7, 0x9d, 0x88, 0x0f, 0xc0, 0xf2, 0x78, 0x02, 0x24, 0x54, 0x93, 0xaf, 0x89, 0x87, 0x88, 0xc9, 0x4a, 0x80, 0x1d, 0xea, 0xd0, 0x6e, 0x3e, 0x61, 0x2e, 0x36, 0xbb, 0x35, 0x0e, 0x27, 0x96, 0xfd, 0x66, 0x34, 0x3b, 0x61, 0x72, 0x73, 0xf1, 0x16, 0x5c, 0x47, 0x06, 0x54, 0x49, 0x00, 0x7a, 0x58, 0x12, 0xb0, 0x0a, 0xef, 0x85, 0xfd, 0xb1, 0xb8, 0x33, 0x75, 0x6a, 0x93, 0x1c, 0x12, 0xe6, 0x60, 0x5e, 0x6f, 0x1d, 0x7f, 0xc9, 0x1f, 0x23, 0xcb, 0x84, 0x61, 0x9f, 0x1e, 0x82, 0x44, 0xf9, 0x5f, 0xad, 0x62, 0x55, 0x24, 0x9a, 0x52, 0x98, 0xed, 0x51, 0xe7, 0xa1, 0x7e, 0x97, 0x3a, 0xe6, 0x2f, 0x1f, 0x11, 0xda, 0x53, 0x80, 0x2c, 0x85, 0x9e, 0xab, 0x35, 0x10, 0xdb, 0x22, 0x5f, 0x6a, 0xc5, 0x5e, 0x97, 0x53, 0xf2, 0x32, 0x02, 0x09, 0x30, 0xa3, 0x58, 0xf0, 0x0d, 0x01, 0xd5, 0x72, 0xc6, 0xb1, 0x7c, 0x69, 0x7b, 0xc3, 0xf5, 0x36, 0x45, 0xcc, 0x61, 0x6e, 0x5e, 0x4c, 0x94, 0xc5, 0x5e, 0xae, 0xe8, 0x0e, 0x5e, 0x8b, 0xbf, 0xf7, 0xcd, 0xe0, 0xed, 0xa1, 0x0e, 0x1b, 0x33, 0xee, 0x54, 0x18, 0xfe, 0x0f, 0xbe, 0xef, 0x7e, 0x84, 0x6b, 0x43, 0xe3, 0x70, 0x98, 0xdb, 0x5d, 0x75, 0xb2, 0x0d, 0x59, 0x07, 0x85, 0x15, 0x23, 0x39, 0xd6, 0xf1, 0xdf, 0xa9, 0x26, 0x0f, 0xd6, 0x48, 0xc7, 0xb3, 0xa6, 0x22, 0xf5, 0x33, 0x37, 0x5a, 0x95, 0x47, 0x9f, 0x7b, 0xba, 0x18, 0x15, 0x6f, 0xff, 0xd6, 0x14, 0x64, 0x83, 0x49, 0xd2, 0x0a, 0x67, 0x21, 0xdb, 0x0f, 0x35, 0x63, 0x60, 0x28, 0x22, 0xe3, 0xb1, 0x95, 0x83, 0xcd, 0x85, 0xa6, 0xdd, 0x2f, 0x0f, 0xe7, 0x67, 0x52, 0x6e, 0xbb, 0x2f, 0x85, 0x7c, 0xf5, 0x4a, 0x73, 0xe7, 0xc5, 0x3e, 0xc0, 0xbd, 0x21, 0x12, 0x05, 0x3f, 0xfc, 0xb7, 0x03, 0x49, 0x02, 0x5b, 0xc8, 0x25, 0xe6, 0xe2, 0x54, 0x38, 0xf5, 0x79, 0x87, 0x8c, 0x1d, 0x53, 0xb2, 0x4e, 0x85, 0x7b, 0x06, 0x38, 0xc7, 0x2c, 0xf8, 0xf8, 0xb0, 0x72, 0x8d, 0x25, 0xe5, 0x77, 0x52, 0xf4, 0x03, 0x1c, 0x48, 0xa6, 0x50, 0x5f, 0x88, 0x20, 0x30, 0x6e, 0xf2, 0x82, 0x43, 0xab, 0x3d, 0x97, 0x84, 0xe7, 0x53, 0xfb, 0x21, 0xc1, 0x4f, 0x0f, 0x22, 0x9a, 0x86, 0xb8, 0x59, 0x2a, 0xf6, 0x47, 0x3d, 0x19, 0x88, 0x2d, 0xe8, 0x85, 0xe1, 0x9e, 0xec, 0x85, 0x08, 0x6a, 0xb1, 0x6c, 0x34, 0xc9, 0x1d, 0xec, 0x48, 0x2b, 0x3b, 0x78, 0xed, 0x66, 0xc4, 0x8e, 0x79, 0x69, 0x83, 0xde, 0x7f, 0x8c, 0x30, 0x82, 0x06, 0x9d, 0x30, 0x82, 0x04, 0x85, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x02, 0x05, 0xc6, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x45, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x42, 0x4d, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x10, 0x51, 0x75, 0x6f, 0x56, 0x61, 0x64, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x12, 0x51, 0x75, 0x6f, 0x56, 0x61, 0x64, 0x69, 0x73, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x33, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x36, 0x31, 0x31, 0x32, 0x34, 0x31, 0x39, 0x31, 0x31, 0x32, 0x33, 0x5a, 0x17, 0x0d, 0x33, 0x31, 0x31, 0x31, 0x32, 0x34, 0x31, 0x39, 0x30, 0x36, 0x34, 0x34, 0x5a, 0x30, 0x45, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x42, 0x4d, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x10, 0x51, 0x75, 0x6f, 0x56, 0x61, 0x64, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x12, 0x51, 0x75, 0x6f, 0x56, 0x61, 0x64, 0x69, 0x73, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x33, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xcc, 0x57, 0x42, 0x16, 0x54, 0x9c, 0xe6, 0x98, 0xd3, 0xd3, 0x4d, 0xee, 0xfe, 0xed, 0xc7, 0x9f, 0x43, 0x39, 0x4a, 0x65, 0xb3, 0xe8, 0x16, 0x88, 0x34, 0xdb, 0x0d, 0x59, 0x91, 0x74, 0xcf, 0x92, 0xb8, 0x04, 0x40, 0xad, 0x02, 0x4b, 0x31, 0xab, 0xbc, 0x8d, 0x91, 0x68, 0xd8, 0x20, 0x0e, 0x1a, 0x01, 0xe2, 0x1a, 0x7b, 0x4e, 0x17, 0x5d, 0xe2, 0x8a, 0xb7, 0x3f, 0x99, 0x1a, 0xcd, 0xeb, 0x61, 0xab, 0xc2, 0x65, 0xa6, 0x1f, 0xb7, 0xb7, 0xbd, 0xb7, 0x8f, 0xfc, 0xfd, 0x70, 0x8f, 0x0b, 0xa0, 0x67, 0xbe, 0x01, 0xa2, 0x59, 0xcf, 0x71, 0xe6, 0x0f, 0x29, 0x76, 0xff, 0xb1, 0x56, 0x79, 0x45, 0x2b, 0x1f, 0x9e, 0x7a, 0x54, 0xe8, 0xa3, 0x29, 0x35, 0x68, 0xa4, 0x01, 0x4f, 0x0f, 0xa4, 0x2e, 0x37, 0xef, 0x1b, 0xbf, 0xe3, 0x8f, 0x10, 0xa8, 0x72, 0xab, 0x58, 0x57, 0xe7, 0x54, 0x86, 0xc8, 0xc9, 0xf3, 0x5b, 0xda, 0x2c, 0xda, 0x5d, 0x8e, 0x6e, 0x3c, 0xa3, 0x3e, 0xda, 0xfb, 0x82, 0xe5, 0xdd, 0xf2, 0x5c, 0xb2, 0x05, 0x33, 0x6f, 0x8a, 0x36, 0xce, 0xd0, 0x13, 0x4e, 0xff, 0xbf, 0x4a, 0x0c, 0x34, 0x4c, 0xa6, 0xc3, 0x21, 0xbd, 0x50, 0x04, 0x55, 0xeb, 0xb1, 0xbb, 0x9d, 0xfb, 0x45, 0x1e, 0x64, 0x15, 0xde, 0x55, 0x01, 0x8c, 0x02, 0x76, 0xb5, 0xcb, 0xa1, 0x3f, 0x42, 0x69, 0xbc, 0x2f, 0xbd, 0x68, 0x43, 0x16, 0x56, 0x89, 0x2a, 0x37, 0x61, 0x91, 0xfd, 0xa6, 0xae, 0x4e, 0xc0, 0xcb, 0x14, 0x65, 0x94, 0x37, 0x4b, 0x92, 0x06, 0xef, 0x04, 0xd0, 0xc8, 0x9c, 0x88, 0xdb, 0x0b, 0x7b, 0x81, 0xaf, 0xb1, 0x3d, 0x2a, 0xc4, 0x65, 0x3a, 0x78, 0xb6, 0xee, 0xdc, 0x80, 0xb1, 0xd2, 0xd3, 0x99, 0x9c, 0x3a, 0xee, 0x6b, 0x5a, 0x6b, 0xb3, 0x8d, 0xb7, 0xd5, 0xce, 0x9c, 0xc2, 0xbe, 0xa5, 0x4b, 0x2f, 0x16, 0xb1, 0x9e, 0x68, 0x3b, 0x06, 0x6f, 0xae, 0x7d, 0x9f, 0xf8, 0xde, 0xec, 0xcc, 0x29, 0xa7, 0x98, 0xa3, 0x25, 0x43, 0x2f, 0xef, 0xf1, 0x5f, 0x26, 0xe1, 0x88, 0x4d, 0xf8, 0x5e, 0x6e, 0xd7, 0xd9, 0x14, 0x6e, 0x19, 0x33, 0x69, 0xa7, 0x3b, 0x84, 0x89, 0x93, 0xc4, 0x53, 0x55, 0x13, 0xa1, 0x51, 0x78, 0x40, 0xf8, 0xb8, 0xc9, 0xa2, 0xee, 0x7b, 0xba, 0x52, 0x42, 0x83, 0x9e, 0x14, 0xed, 0x05, 0x52, 0x5a, 0x59, 0x56, 0xa7, 0x97, 0xfc, 0x9d, 0x3f, 0x0a, 0x29, 0xd8, 0xdc, 0x4f, 0x91, 0x0e, 0x13, 0xbc, 0xde, 0x95, 0xa4, 0xdf, 0x8b, 0x99, 0xbe, 0xac, 0x9b, 0x33, 0x88, 0xef, 0xb5, 0x81, 0xaf, 0x1b, 0xc6, 0x22, 0x53, 0xc8, 0xf6, 0xc7, 0xee, 0x97, 0x14, 0xb0, 0xc5, 0x7c, 0x78, 0x52, 0xc8, 0xf0, 0xce, 0x6e, 0x77, 0x60, 0x84, 0xa6, 0xe9, 0x2a, 0x76, 0x20, 0xed, 0x58, 0x01, 0x17, 0x30, 0x93, 0xe9, 0x1a, 0x8b, 0xe0, 0x73, 0x63, 0xd9, 0x6a, 0x92, 0x94, 0x49, 0x4e, 0xb4, 0xad, 0x4a, 0x85, 0xc4, 0xa3, 0x22, 0x30, 0xfc, 0x09, 0xed, 0x68, 0x22, 0x73, 0xa6, 0x88, 0x0c, 0x55, 0x21, 0x58, 0xc5, 0xe1, 0x3a, 0x9f, 0x2a, 0xdd, 0xca, 0xe1, 0x90, 0xe0, 0xd9, 0x73, 0xab, 0x6c, 0x80, 0xb8, 0xe8, 0x0b, 0x64, 0x93, 0xa0, 0x9c, 0x8c, 0x19, 0xff, 0xb3, 0xd2, 0x0c, 0xec, 0x91, 0x26, 0x87, 0x8a, 0xb3, 0xa2, 0xe1, 0x70, 0x8f, 0x2c, 0x0a, 0xe5, 0xcd, 0x6d, 0x68, 0x51, 0xeb, 0xda, 0x3f, 0x05, 0x7f, 0x8b, 0x32, 0xe6, 0x13, 0x5c, 0x6b, 0xfe, 0x5f, 0x40, 0xe2, 0x22, 0xc8, 0xb4, 0xb4, 0x64, 0x4f, 0xd6, 0xba, 0x7d, 0x48, 0x3e, 0xa8, 0x69, 0x0c, 0xd7, 0xbb, 0x86, 0x71, 0xc9, 0x73, 0xb8, 0x3f, 0x3b, 0x9d, 0x25, 0x4b, 0xda, 0xff, 0x40, 0xeb, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x82, 0x01, 0x95, 0x30, 0x82, 0x01, 0x91, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x81, 0xe1, 0x06, 0x03, 0x55, 0x1d, 0x20, 0x04, 0x81, 0xd9, 0x30, 0x81, 0xd6, 0x30, 0x81, 0xd3, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0xbe, 0x58, 0x00, 0x03, 0x30, 0x81, 0xc5, 0x30, 0x81, 0x93, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x02, 0x30, 0x81, 0x86, 0x1a, 0x81, 0x83, 0x41, 0x6e, 0x79, 0x20, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x65, 0x73, 0x20, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x51, 0x75, 0x6f, 0x56, 0x61, 0x64, 0x69, 0x73, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x33, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x20, 0x2f, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x50, 0x72, 0x61, 0x63, 0x74, 0x69, 0x63, 0x65, 0x20, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x30, 0x2d, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x01, 0x16, 0x21, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x71, 0x75, 0x6f, 0x76, 0x61, 0x64, 0x69, 0x73, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x70, 0x73, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xf2, 0xc0, 0x13, 0xe0, 0x82, 0x43, 0x3e, 0xfb, 0xee, 0x2f, 0x67, 0x32, 0x96, 0x35, 0x5c, 0xdb, 0xb8, 0xcb, 0x02, 0xd0, 0x30, 0x6e, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x67, 0x30, 0x65, 0x80, 0x14, 0xf2, 0xc0, 0x13, 0xe0, 0x82, 0x43, 0x3e, 0xfb, 0xee, 0x2f, 0x67, 0x32, 0x96, 0x35, 0x5c, 0xdb, 0xb8, 0xcb, 0x02, 0xd0, 0xa1, 0x49, 0xa4, 0x47, 0x30, 0x45, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x42, 0x4d, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x10, 0x51, 0x75, 0x6f, 0x56, 0x61, 0x64, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x12, 0x51, 0x75, 0x6f, 0x56, 0x61, 0x64, 0x69, 0x73, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x33, 0x82, 0x02, 0x05, 0xc6, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x4f, 0xad, 0xa0, 0x2c, 0x4c, 0xfa, 0xc0, 0xf2, 0x6f, 0xf7, 0x66, 0x55, 0xab, 0x23, 0x34, 0xee, 0xe7, 0x29, 0xda, 0xc3, 0x5b, 0xb6, 0xb0, 0x83, 0xd9, 0xd0, 0xd0, 0xe2, 0x21, 0xfb, 0xf3, 0x60, 0xa7, 0x3b, 0x5d, 0x60, 0x53, 0x27, 0xa2, 0x9b, 0xf6, 0x08, 0x22, 0x2a, 0xe7, 0xbf, 0xa0, 0x72, 0xe5, 0x9c, 0x24, 0x6a, 0x31, 0xb1, 0x90, 0x7a, 0x27, 0xdb, 0x84, 0x11, 0x89, 0x27, 0xa6, 0x77, 0x5a, 0x38, 0xd7, 0xbf, 0xac, 0x86, 0xfc, 0xee, 0x5d, 0x83, 0xbc, 0x06, 0xc6, 0xd1, 0x77, 0x6b, 0x0f, 0x6d, 0x24, 0x2f, 0x4b, 0x7a, 0x6c, 0xa7, 0x07, 0x96, 0xca, 0xe3, 0x84, 0x9f, 0xad, 0x88, 0x8b, 0x1d, 0xab, 0x16, 0x8d, 0x5b, 0x66, 0x17, 0xd9, 0x16, 0xf4, 0x8b, 0x80, 0xd2, 0xdd, 0xf8, 0xb2, 0x76, 0xc3, 0xfc, 0x38, 0x13, 0xaa, 0x0c, 0xde, 0x42, 0x69, 0x2b, 0x6e, 0xf3, 0x3c, 0xeb, 0x80, 0x27, 0xdb, 0xf5, 0xa6, 0x44, 0x0d, 0x9f, 0x5a, 0x55, 0x59, 0x0b, 0xd5, 0x0d, 0x52, 0x48, 0xc5, 0xae, 0x9f, 0xf2, 0x2f, 0x80, 0xc5, 0xea, 0x32, 0x50, 0x35, 0x12, 0x97, 0x2e, 0xc1, 0xe1, 0xff, 0xf1, 0x23, 0x88, 0x51, 0x38, 0x9f, 0xf2, 0x66, 0x56, 0x76, 0xe7, 0x0f, 0x51, 0x97, 0xa5, 0x52, 0x0c, 0x4d, 0x49, 0x51, 0x95, 0x36, 0x3d, 0xbf, 0xa2, 0x4b, 0x0c, 0x10, 0x1d, 0x86, 0x99, 0x4c, 0xaa, 0xf3, 0x72, 0x11, 0x93, 0xe4, 0xea, 0xf6, 0x9b, 0xda, 0xa8, 0x5d, 0xa7, 0x4d, 0xb7, 0x9e, 0x02, 0xae, 0x73, 0x00, 0xc8, 0xda, 0x23, 0x03, 0xe8, 0xf9, 0xea, 0x19, 0x74, 0x62, 0x00, 0x94, 0xcb, 0x22, 0x20, 0xbe, 0x94, 0xa7, 0x59, 0xb5, 0x82, 0x6a, 0xbe, 0x99, 0x79, 0x7a, 0xa9, 0xf2, 0x4a, 0x24, 0x52, 0xf7, 0x74, 0xfd, 0xba, 0x4e, 0xe6, 0xa8, 0x1d, 0x02, 0x6e, 0xb1, 0x0d, 0x80, 0x44, 0xc1, 0xae, 0xd3, 0x23, 0x37, 0x5f, 0xbb, 0x85, 0x7c, 0x2b, 0x92, 0x2e, 0xe8, 0x7e, 0xa5, 0x8b, 0xdd, 0x99, 0xe1, 0xbf, 0x27, 0x6f, 0x2d, 0x5d, 0xaa, 0x7b, 0x87, 0xfe, 0x0a, 0xdd, 0x4b, 0xfc, 0x8e, 0xf5, 0x26, 0xe4, 0x6e, 0x70, 0x42, 0x6e, 0x33, 0xec, 0x31, 0x9e, 0x7b, 0x93, 0xc1, 0xe4, 0xc9, 0x69, 0x1a, 0x3d, 0xc0, 0x6b, 0x4e, 0x22, 0x6d, 0xee, 0xab, 0x58, 0x4d, 0xc6, 0xd0, 0x41, 0xc1, 0x2b, 0xea, 0x4f, 0x12, 0x87, 0x5e, 0xeb, 0x45, 0xd8, 0x6c, 0xf5, 0x98, 0x02, 0xd3, 0xa0, 0xd8, 0x55, 0x8a, 0x06, 0x99, 0x19, 0xa2, 0xa0, 0x77, 0xd1, 0x30, 0x9e, 0xac, 0xcc, 0x75, 0xee, 0x83, 0xf5, 0xb0, 0x62, 0x39, 0xcf, 0x6c, 0x57, 0xe2, 0x4c, 0xd2, 0x91, 0x0b, 0x0e, 0x75, 0x28, 0x1b, 0x9a, 0xbf, 0xfd, 0x1a, 0x43, 0xf1, 0xca, 0x77, 0xfb, 0x3b, 0x8f, 0x61, 0xb8, 0x69, 0x28, 0x16, 0x42, 0x04, 0x5e, 0x70, 0x2a, 0x1c, 0x21, 0xd8, 0x8f, 0xe1, 0xbd, 0x23, 0x5b, 0x2d, 0x74, 0x40, 0x92, 0xd9, 0x63, 0x19, 0x0d, 0x73, 0xdd, 0x69, 0xbc, 0x62, 0x47, 0xbc, 0xe0, 0x74, 0x2b, 0xb2, 0xeb, 0x7d, 0xbe, 0x41, 0x1b, 0xb5, 0xc0, 0x46, 0xc5, 0xa1, 0x22, 0xcb, 0x5f, 0x4e, 0xc1, 0x28, 0x92, 0xde, 0x18, 0xba, 0xd5, 0x2a, 0x28, 0xbb, 0x11, 0x8b, 0x17, 0x93, 0x98, 0x99, 0x60, 0x94, 0x5c, 0x23, 0xcf, 0x5a, 0x27, 0x97, 0x5e, 0x0b, 0x05, 0x06, 0x93, 0x37, 0x1e, 0x3b, 0x69, 0x36, 0xeb, 0xa9, 0x9e, 0x61, 0x1d, 0x8f, 0x32, 0xda, 0x8e, 0x0c, 0xd6, 0x74, 0x3e, 0x7b, 0x09, 0x24, 0xda, 0x01, 0x77, 0x47, 0xc4, 0x3b, 0xcd, 0x34, 0x8c, 0x99, 0xf5, 0xca, 0xe1, 0x25, 0x61, 0x33, 0xb2, 0x59, 0x1b, 0xe2, 0x6e, 0xd7, 0x37, 0x57, 0xb6, 0x0d, 0xa9, 0x12, 0xda, 0x30, 0x82, 0x05, 0x60, 0x30, 0x82, 0x03, 0x48, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x14, 0x2e, 0xf5, 0x9b, 0x02, 0x28, 0xa7, 0xdb, 0x7a, 0xff, 0xd5, 0xa3, 0xa9, 0xee, 0xbd, 0x03, 0xa0, 0xcf, 0x12, 0x6a, 0x1d, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x48, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x42, 0x4d, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x10, 0x51, 0x75, 0x6f, 0x56, 0x61, 0x64, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x15, 0x51, 0x75, 0x6f, 0x56, 0x61, 0x64, 0x69, 0x73, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x33, 0x20, 0x47, 0x33, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x32, 0x30, 0x31, 0x31, 0x32, 0x32, 0x30, 0x32, 0x36, 0x33, 0x32, 0x5a, 0x17, 0x0d, 0x34, 0x32, 0x30, 0x31, 0x31, 0x32, 0x32, 0x30, 0x32, 0x36, 0x33, 0x32, 0x5a, 0x30, 0x48, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x42, 0x4d, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x10, 0x51, 0x75, 0x6f, 0x56, 0x61, 0x64, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x15, 0x51, 0x75, 0x6f, 0x56, 0x61, 0x64, 0x69, 0x73, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x33, 0x20, 0x47, 0x33, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xb3, 0xcb, 0x0e, 0x10, 0x67, 0x8e, 0xea, 0x14, 0x97, 0xa7, 0x32, 0x2a, 0x0a, 0x56, 0x36, 0x7f, 0x68, 0x4c, 0xc7, 0xb3, 0x6f, 0x3a, 0x23, 0x14, 0x91, 0xff, 0x19, 0x7f, 0xa5, 0xca, 0xac, 0xee, 0xb3, 0x76, 0x9d, 0x7a, 0xe9, 0x8b, 0x1b, 0xab, 0x6b, 0x31, 0xdb, 0xfa, 0x0b, 0x53, 0x4c, 0xaf, 0xc5, 0xa5, 0x1a, 0x79, 0x3c, 0x8a, 0x4c, 0xff, 0xac, 0xdf, 0x25, 0xde, 0x4e, 0xd9, 0x82, 0x32, 0x0b, 0x44, 0xde, 0xca, 0xdb, 0x8c, 0xac, 0xa3, 0x6e, 0x16, 0x83, 0x3b, 0xa6, 0x64, 0x4b, 0x32, 0x89, 0xfb, 0x16, 0x16, 0x38, 0x7e, 0xeb, 0x43, 0xe2, 0xd3, 0x74, 0x4a, 0xc2, 0x62, 0x0a, 0x73, 0x0a, 0xdd, 0x49, 0xb3, 0x57, 0xd2, 0xb0, 0x0a, 0x85, 0x9d, 0x71, 0x3c, 0xde, 0xa3, 0xcb, 0xc0, 0x32, 0xf3, 0x01, 0x39, 0x20, 0x43, 0x1b, 0x35, 0xd1, 0x53, 0xb3, 0xb1, 0xee, 0xc5, 0x93, 0x69, 0x82, 0x3e, 0x16, 0xb5, 0x28, 0x46, 0xa1, 0xde, 0xea, 0x89, 0x09, 0xed, 0x43, 0xb8, 0x05, 0x46, 0x8a, 0x86, 0xf5, 0x59, 0x47, 0xbe, 0x1b, 0x6f, 0x01, 0x21, 0x10, 0xb9, 0xfd, 0xa9, 0xd2, 0x28, 0xca, 0x10, 0x39, 0x09, 0xca, 0x13, 0x36, 0xcf, 0x9c, 0xad, 0xad, 0x40, 0x74, 0x79, 0x2b, 0x02, 0x3f, 0x34, 0xff, 0xfa, 0x20, 0x69, 0x7d, 0xd3, 0xee, 0x61, 0xf5, 0xba, 0xb3, 0xe7, 0x30, 0xd0, 0x37, 0x23, 0x86, 0x72, 0x61, 0x45, 0x29, 0x48, 0x59, 0x68, 0x6f, 0x77, 0xa6, 0x2e, 0x81, 0xbe, 0x07, 0x4d, 0x6f, 0xaf, 0xce, 0xc4, 0x45, 0x13, 0x91, 0x14, 0x70, 0x06, 0x8f, 0x1f, 0x9f, 0xf8, 0x87, 0x69, 0xb1, 0x0e, 0xef, 0xc3, 0x89, 0x19, 0xeb, 0xea, 0x1c, 0x61, 0xfc, 0x7a, 0x6c, 0x8a, 0xdc, 0xd6, 0x03, 0x0b, 0x9e, 0x26, 0xba, 0x12, 0xdd, 0xd4, 0x54, 0x39, 0xab, 0x26, 0xa3, 0x33, 0xea, 0x75, 0x81, 0xda, 0x2d, 0xcd, 0x0f, 0x4f, 0xe4, 0x03, 0xd1, 0xef, 0x15, 0x97, 0x1b, 0x6b, 0x90, 0xc5, 0x02, 0x90, 0x93, 0x66, 0x02, 0x21, 0xb1, 0x47, 0xde, 0x8b, 0x9a, 0x4a, 0x80, 0xb9, 0x55, 0x8f, 0xb5, 0xa2, 0x2f, 0xc0, 0xd6, 0x33, 0x67, 0xda, 0x7e, 0xc4, 0xa7, 0xb4, 0x04, 0x44, 0xeb, 0x47, 0xfb, 0xe6, 0x58, 0xb9, 0xf7, 0x0c, 0xf0, 0x7b, 0x2b, 0xb1, 0xc0, 0x70, 0x29, 0xc3, 0x40, 0x62, 0x2d, 0x3b, 0x48, 0x69, 0xdc, 0x23, 0x3c, 0x48, 0xeb, 0x7b, 0x09, 0x79, 0xa9, 0x6d, 0xda, 0xa8, 0x30, 0x98, 0xcf, 0x80, 0x72, 0x03, 0x88, 0xa6, 0x5b, 0x46, 0xae, 0x72, 0x79, 0x7c, 0x08, 0x03, 0x21, 0x65, 0xae, 0xb7, 0xe1, 0x1c, 0xa5, 0xb1, 0x2a, 0xa2, 0x31, 0xde, 0x66, 0x04, 0xf7, 0xc0, 0x74, 0xe8, 0x71, 0xde, 0xff, 0x3d, 0x59, 0xcc, 0x96, 0x26, 0x12, 0x8b, 0x85, 0x95, 0x57, 0x1a, 0xab, 0x6b, 0x75, 0x0b, 0x44, 0x3d, 0x11, 0x28, 0x3c, 0x7b, 0x61, 0xb7, 0xe2, 0x8f, 0x67, 0x4f, 0xe5, 0xec, 0x3c, 0x4c, 0x60, 0x80, 0x69, 0x57, 0x38, 0x1e, 0x01, 0x5b, 0x8d, 0x55, 0xe8, 0xc7, 0xdf, 0xc0, 0xcc, 0x77, 0x23, 0x34, 0x49, 0x75, 0x7c, 0xf6, 0x98, 0x11, 0xeb, 0x2d, 0xde, 0xed, 0x41, 0x2e, 0x14, 0x05, 0x02, 0x7f, 0xe0, 0xfe, 0x20, 0xeb, 0x35, 0xe7, 0x11, 0xac, 0x22, 0xce, 0x57, 0x3d, 0xde, 0xc9, 0x30, 0x6d, 0x10, 0x03, 0x85, 0xcd, 0xf1, 0xff, 0x8c, 0x16, 0xb5, 0xc1, 0xb2, 0x3e, 0x88, 0x6c, 0x60, 0x7f, 0x90, 0x4f, 0x95, 0xf7, 0xf6, 0x2d, 0xad, 0x01, 0x39, 0x07, 0x04, 0xfa, 0x75, 0x80, 0x7d, 0xbf, 0x49, 0x50, 0xed, 0xef, 0xc9, 0xc4, 0x7c, 0x1c, 0xeb, 0x80, 0x7e, 0xdb, 0xb6, 0xd0, 0xdd, 0x13, 0xfe, 0xc9, 0xd3, 0x9c, 0xd7, 0xb2, 0x97, 0xa9, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xc6, 0x17, 0xd0, 0xbc, 0xa8, 0xea, 0x02, 0x43, 0xf2, 0x1b, 0x06, 0x99, 0x5d, 0x2b, 0x90, 0x20, 0xb9, 0xd7, 0x9c, 0xe4, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x34, 0x61, 0xd9, 0x56, 0xb5, 0x12, 0x87, 0x55, 0x4d, 0xdd, 0xa3, 0x35, 0x31, 0x46, 0xbb, 0xa4, 0x07, 0x72, 0xbc, 0x5f, 0x61, 0x62, 0xe8, 0xa5, 0xfb, 0x0b, 0x37, 0xb1, 0x3c, 0xb6, 0xb3, 0xfa, 0x29, 0x9d, 0x7f, 0x02, 0xf5, 0xa4, 0xc9, 0xa8, 0x93, 0xb7, 0x7a, 0x71, 0x28, 0x69, 0x8f, 0x73, 0xe1, 0x52, 0x90, 0xda, 0xd5, 0xbe, 0x3a, 0xe5, 0xb7, 0x76, 0x6a, 0x56, 0x80, 0x21, 0xdf, 0x5d, 0xe6, 0xe9, 0x3a, 0x9e, 0xe5, 0x3e, 0xf6, 0xa2, 0x69, 0xc7, 0x2a, 0x0a, 0xb0, 0x18, 0x47, 0xdc, 0x20, 0x70, 0x7d, 0x52, 0xa3, 0x3e, 0x59, 0x7c, 0xc1, 0xba, 0xc9, 0xc8, 0x15, 0x40, 0x61, 0xca, 0x72, 0xd6, 0x70, 0xac, 0xd2, 0xb7, 0xf0, 0x1c, 0xe4, 0x86, 0x29, 0xf0, 0xce, 0xef, 0x68, 0x63, 0xd0, 0xb5, 0x20, 0x8a, 0x15, 0x61, 0x9a, 0x7e, 0x86, 0x98, 0xb4, 0xc9, 0xc2, 0x76, 0xfb, 0xcc, 0xba, 0x30, 0x16, 0xcc, 0xa3, 0x61, 0xc6, 0x74, 0x13, 0xe5, 0x6b, 0xef, 0xa3, 0x15, 0xea, 0x03, 0xfe, 0x13, 0x8b, 0x64, 0xe4, 0xd3, 0xc1, 0xd2, 0xe8, 0x84, 0xfb, 0x49, 0xd1, 0x10, 0x4d, 0x79, 0x66, 0xeb, 0xaa, 0xfd, 0xf4, 0x8d, 0x31, 0x1e, 0x70, 0x14, 0xad, 0xdc, 0xde, 0x67, 0x13, 0x4c, 0x81, 0x15, 0x61, 0xbc, 0xb7, 0xd9, 0x91, 0x77, 0x71, 0x19, 0x81, 0x60, 0xbb, 0xf0, 0x58, 0xa5, 0xb5, 0x9c, 0x0b, 0xf7, 0x8f, 0x22, 0x55, 0x27, 0xc0, 0x4b, 0x01, 0x6d, 0x3b, 0x99, 0x0d, 0xd4, 0x1d, 0x9b, 0x63, 0x67, 0x2f, 0xd0, 0xee, 0x0d, 0xca, 0x66, 0xbc, 0x94, 0x4f, 0xa6, 0xad, 0xed, 0xfc, 0xee, 0x63, 0xac, 0x57, 0x3f, 0x65, 0x25, 0xcf, 0xb2, 0x86, 0x8f, 0xd0, 0x08, 0xff, 0xb8, 0x76, 0x14, 0x6e, 0xde, 0xe5, 0x27, 0xec, 0xab, 0x78, 0xb5, 0x53, 0xb9, 0xb6, 0x3f, 0xe8, 0x20, 0xf9, 0xd2, 0xa8, 0xbe, 0x61, 0x46, 0xca, 0x87, 0x8c, 0x84, 0xf3, 0xf9, 0xf1, 0xa0, 0x68, 0x9b, 0x22, 0x1e, 0x81, 0x26, 0x9b, 0x10, 0x04, 0x91, 0x71, 0xc0, 0x06, 0x1f, 0xdc, 0xa0, 0xd3, 0xb9, 0x56, 0xa7, 0xe3, 0x98, 0x2d, 0x7f, 0x83, 0x9d, 0xdf, 0x8c, 0x2b, 0x9c, 0x32, 0x8e, 0x32, 0x94, 0xf0, 0x01, 0x3c, 0x22, 0x2a, 0x9f, 0x43, 0xc2, 0x2e, 0xc3, 0x98, 0x39, 0x07, 0x38, 0x7b, 0xfc, 0x5e, 0x00, 0x42, 0x1f, 0xf3, 0x32, 0x26, 0x79, 0x83, 0x84, 0xf6, 0xe5, 0xf0, 0xc1, 0x51, 0x12, 0xc0, 0x0b, 0x1e, 0x04, 0x23, 0x0c, 0x54, 0xa5, 0x4c, 0x2f, 0x49, 0xc5, 0x4a, 0xd1, 0xb6, 0x6e, 0x60, 0x0d, 0x6b, 0xfc, 0x6b, 0x8b, 0x85, 0x24, 0x64, 0xb7, 0x89, 0x0e, 0xab, 0x25, 0x47, 0x5b, 0x3c, 0xcf, 0x7e, 0x49, 0xbd, 0xc7, 0xe9, 0x0a, 0xc6, 0xda, 0xf7, 0x7e, 0x0e, 0x17, 0x08, 0xd3, 0x48, 0x97, 0xd0, 0x71, 0x92, 0xf0, 0x0f, 0x39, 0x3e, 0x34, 0x6a, 0x1c, 0x7d, 0xd8, 0xf2, 0x22, 0xae, 0xbb, 0x69, 0xf4, 0x33, 0xb4, 0xa6, 0x48, 0x55, 0xd1, 0x0f, 0x0e, 0x26, 0xe8, 0xec, 0xb6, 0x0b, 0x2d, 0xa7, 0x85, 0x35, 0xcd, 0xfd, 0x59, 0xc8, 0x9f, 0xd1, 0xcd, 0x3e, 0x5a, 0x29, 0x34, 0xb9, 0x3d, 0x84, 0xce, 0xb1, 0x65, 0xd4, 0x59, 0x91, 0x91, 0x56, 0x75, 0x21, 0xc1, 0x77, 0x9e, 0xf9, 0x7a, 0xe1, 0x60, 0x9d, 0xd3, 0xad, 0x04, 0x18, 0xf4, 0x7c, 0xeb, 0x5e, 0x93, 0x8f, 0x53, 0x4a, 0x22, 0x29, 0xf8, 0x48, 0x2b, 0x3e, 0x4d, 0x86, 0xac, 0x5b, 0x7f, 0xcb, 0x06, 0x99, 0x59, 0x60, 0xd8, 0x58, 0x65, 0x95, 0x8d, 0x44, 0xd1, 0xf7, 0x7f, 0x7e, 0x27, 0x7f, 0x7d, 0xae, 0x80, 0xf5, 0x07, 0x4c, 0xb6, 0x3e, 0x9c, 0x71, 0x54, 0x99, 0x04, 0x4b, 0xfd, 0x58, 0xf9, 0x98, 0xf4, 0x30, 0x82, 0x03, 0x6d, 0x30, 0x82, 0x02, 0x55, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x01, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x58, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x4a, 0x50, 0x31, 0x2b, 0x30, 0x29, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x22, 0x4a, 0x61, 0x70, 0x61, 0x6e, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x31, 0x1c, 0x30, 0x1a, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x13, 0x53, 0x65, 0x63, 0x75, 0x72, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x43, 0x41, 0x31, 0x31, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x39, 0x30, 0x34, 0x30, 0x38, 0x30, 0x34, 0x35, 0x36, 0x34, 0x37, 0x5a, 0x17, 0x0d, 0x32, 0x39, 0x30, 0x34, 0x30, 0x38, 0x30, 0x34, 0x35, 0x36, 0x34, 0x37, 0x5a, 0x30, 0x58, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x4a, 0x50, 0x31, 0x2b, 0x30, 0x29, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x22, 0x4a, 0x61, 0x70, 0x61, 0x6e, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x31, 0x1c, 0x30, 0x1a, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x13, 0x53, 0x65, 0x63, 0x75, 0x72, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x43, 0x41, 0x31, 0x31, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xfd, 0x77, 0xaa, 0xa5, 0x1c, 0x90, 0x05, 0x3b, 0xcb, 0x4c, 0x9b, 0x33, 0x8b, 0x5a, 0x14, 0x45, 0xa4, 0xe7, 0x90, 0x16, 0xd1, 0xdf, 0x57, 0xd2, 0x21, 0x10, 0xa4, 0x17, 0xfd, 0xdf, 0xac, 0xd6, 0x1f, 0xa7, 0xe4, 0xdb, 0x7c, 0xf7, 0xec, 0xdf, 0xb8, 0x03, 0xda, 0x94, 0x58, 0xfd, 0x5d, 0x72, 0x7c, 0x8c, 0x3f, 0x5f, 0x01, 0x67, 0x74, 0x15, 0x96, 0xe3, 0x02, 0x3c, 0x87, 0xdb, 0xae, 0xcb, 0x01, 0x8e, 0xc2, 0xf3, 0x66, 0xc6, 0x85, 0x45, 0xf4, 0x02, 0xc6, 0x3a, 0xb5, 0x62, 0xb2, 0xaf, 0xfa, 0x9c, 0xbf, 0xa4, 0xe6, 0xd4, 0x80, 0x30, 0x98, 0xf3, 0x0d, 0xb6, 0x93, 0x8f, 0xa9, 0xd4, 0xd8, 0x36, 0xf2, 0xb0, 0xfc, 0x8a, 0xca, 0x2c, 0xa1, 0x15, 0x33, 0x95, 0x31, 0xda, 0xc0, 0x1b, 0xf2, 0xee, 0x62, 0x99, 0x86, 0x63, 0x3f, 0xbf, 0xdd, 0x93, 0x2a, 0x83, 0xa8, 0x76, 0xb9, 0x13, 0x1f, 0xb7, 0xce, 0x4e, 0x42, 0x85, 0x8f, 0x22, 0xe7, 0x2e, 0x1a, 0xf2, 0x95, 0x09, 0xb2, 0x05, 0xb5, 0x44, 0x4e, 0x77, 0xa1, 0x20, 0xbd, 0xa9, 0xf2, 0x4e, 0x0a, 0x7d, 0x50, 0xad, 0xf5, 0x05, 0x0d, 0x45, 0x4f, 0x46, 0x71, 0xfd, 0x28, 0x3e, 0x53, 0xfb, 0x04, 0xd8, 0x2d, 0xd7, 0x65, 0x1d, 0x4a, 0x1b, 0xfa, 0xcf, 0x3b, 0xb0, 0x31, 0x9a, 0x35, 0x6e, 0xc8, 0x8b, 0x06, 0xd3, 0x00, 0x91, 0xf2, 0x94, 0x08, 0x65, 0x4c, 0xb1, 0x34, 0x06, 0x00, 0x7a, 0x89, 0xe2, 0xf0, 0xc7, 0x03, 0x59, 0xcf, 0xd5, 0xd6, 0xe8, 0xa7, 0x32, 0xb3, 0xe6, 0x98, 0x40, 0x86, 0xc5, 0xcd, 0x27, 0x12, 0x8b, 0xcc, 0x7b, 0xce, 0xb7, 0x11, 0x3c, 0x62, 0x60, 0x07, 0x23, 0x3e, 0x2b, 0x40, 0x6e, 0x94, 0x80, 0x09, 0x6d, 0xb6, 0xb3, 0x6f, 0x77, 0x6f, 0x35, 0x08, 0x50, 0xfb, 0x02, 0x87, 0xc5, 0x3e, 0x89, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x5b, 0xf8, 0x4d, 0x4f, 0xb2, 0xa5, 0x86, 0xd4, 0x3a, 0xd2, 0xf1, 0x63, 0x9a, 0xa0, 0xbe, 0x09, 0xf6, 0x57, 0xb7, 0xde, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0xa0, 0xa1, 0x38, 0x16, 0x66, 0x2e, 0xa7, 0x56, 0x1f, 0x21, 0x9c, 0x06, 0xfa, 0x1d, 0xed, 0xb9, 0x22, 0xc5, 0x38, 0x26, 0xd8, 0x4e, 0x4f, 0xec, 0xa3, 0x7f, 0x79, 0xde, 0x46, 0x21, 0xa1, 0x87, 0x77, 0x8f, 0x07, 0x08, 0x9a, 0xb2, 0xa4, 0xc5, 0xaf, 0x0f, 0x32, 0x98, 0x0b, 0x7c, 0x66, 0x29, 0xb6, 0x9b, 0x7d, 0x25, 0x52, 0x49, 0x43, 0xab, 0x4c, 0x2e, 0x2b, 0x6e, 0x7a, 0x70, 0xaf, 0x16, 0x0e, 0xe3, 0x02, 0x6c, 0xfb, 0x42, 0xe6, 0x18, 0x9d, 0x45, 0xd8, 0x55, 0xc8, 0xe8, 0x3b, 0xdd, 0xe7, 0xe1, 0xf4, 0x2e, 0x0b, 0x1c, 0x34, 0x5c, 0x6c, 0x58, 0x4a, 0xfb, 0x8c, 0x88, 0x50, 0x5f, 0x95, 0x1c, 0xbf, 0xed, 0xab, 0x22, 0xb5, 0x65, 0xb3, 0x85, 0xba, 0x9e, 0x0f, 0xb8, 0xad, 0xe5, 0x7a, 0x1b, 0x8a, 0x50, 0x3a, 0x1d, 0xbd, 0x0d, 0xbc, 0x7b, 0x54, 0x50, 0x0b, 0xb9, 0x42, 0xaf, 0x55, 0xa0, 0x18, 0x81, 0xad, 0x65, 0x99, 0xef, 0xbe, 0xe4, 0x9c, 0xbf, 0xc4, 0x85, 0xab, 0x41, 0xb2, 0x54, 0x6f, 0xdc, 0x25, 0xcd, 0xed, 0x78, 0xe2, 0x8e, 0x0c, 0x8d, 0x09, 0x49, 0xdd, 0x63, 0x7b, 0x5a, 0x69, 0x96, 0x02, 0x21, 0xa8, 0xbd, 0x52, 0x59, 0xe9, 0x7d, 0x35, 0xcb, 0xc8, 0x52, 0xca, 0x7f, 0x81, 0xfe, 0xd9, 0x6b, 0xd3, 0xf7, 0x11, 0xed, 0x25, 0xdf, 0xf8, 0xe7, 0xf9, 0xa4, 0xfa, 0x72, 0x97, 0x84, 0x53, 0x0d, 0xa5, 0xd0, 0x32, 0x18, 0x51, 0x76, 0x59, 0x14, 0x6c, 0x0f, 0xeb, 0xec, 0x5f, 0x80, 0x8c, 0x75, 0x43, 0x83, 0xc3, 0x85, 0x98, 0xff, 0x4c, 0x9e, 0x2d, 0x0d, 0xe4, 0x77, 0x83, 0x93, 0x4e, 0xb5, 0x96, 0x07, 0x8b, 0x28, 0x13, 0x9b, 0x8c, 0x19, 0x8d, 0x41, 0x27, 0x49, 0x40, 0xee, 0xde, 0xe6, 0x23, 0x44, 0x39, 0xdc, 0xa1, 0x22, 0xd6, 0xba, 0x03, 0xf2, 0x30, 0x82, 0x03, 0x5a, 0x30, 0x82, 0x02, 0x42, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x50, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x4a, 0x50, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0f, 0x53, 0x45, 0x43, 0x4f, 0x4d, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x6e, 0x65, 0x74, 0x31, 0x27, 0x30, 0x25, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x1e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x20, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x43, 0x41, 0x31, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x33, 0x30, 0x39, 0x33, 0x30, 0x30, 0x34, 0x32, 0x30, 0x34, 0x39, 0x5a, 0x17, 0x0d, 0x32, 0x33, 0x30, 0x39, 0x33, 0x30, 0x30, 0x34, 0x32, 0x30, 0x34, 0x39, 0x5a, 0x30, 0x50, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x4a, 0x50, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0f, 0x53, 0x45, 0x43, 0x4f, 0x4d, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x6e, 0x65, 0x74, 0x31, 0x27, 0x30, 0x25, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x1e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x20, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x43, 0x41, 0x31, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xb3, 0xb3, 0xfe, 0x7f, 0xd3, 0x6d, 0xb1, 0xef, 0x16, 0x7c, 0x57, 0xa5, 0x0c, 0x6d, 0x76, 0x8a, 0x2f, 0x4b, 0xbf, 0x64, 0xfb, 0x4c, 0xee, 0x8a, 0xf0, 0xf3, 0x29, 0x7c, 0xf5, 0xff, 0xee, 0x2a, 0xe0, 0xe9, 0xe9, 0xba, 0x5b, 0x64, 0x22, 0x9a, 0x9a, 0x6f, 0x2c, 0x3a, 0x26, 0x69, 0x51, 0x05, 0x99, 0x26, 0xdc, 0xd5, 0x1c, 0x6a, 0x71, 0xc6, 0x9a, 0x7d, 0x1e, 0x9d, 0xdd, 0x7c, 0x6c, 0xc6, 0x8c, 0x67, 0x67, 0x4a, 0x3e, 0xf8, 0x71, 0xb0, 0x19, 0x27, 0xa9, 0x09, 0x0c, 0xa6, 0x95, 0xbf, 0x4b, 0x8c, 0x0c, 0xfa, 0x55, 0x98, 0x3b, 0xd8, 0xe8, 0x22, 0xa1, 0x4b, 0x71, 0x38, 0x79, 0xac, 0x97, 0x92, 0x69, 0xb3, 0x89, 0x7e, 0xea, 0x21, 0x68, 0x06, 0x98, 0x14, 0x96, 0x87, 0xd2, 0x61, 0x36, 0xbc, 0x6d, 0x27, 0x56, 0x9e, 0x57, 0xee, 0xc0, 0xc0, 0x56, 0xfd, 0x32, 0xcf, 0xa4, 0xd9, 0x8e, 0xc2, 0x23, 0xd7, 0x8d, 0xa8, 0xf3, 0xd8, 0x25, 0xac, 0x97, 0xe4, 0x70, 0x38, 0xf4, 0xb6, 0x3a, 0xb4, 0x9d, 0x3b, 0x97, 0x26, 0x43, 0xa3, 0xa1, 0xbc, 0x49, 0x59, 0x72, 0x4c, 0x23, 0x30, 0x87, 0x01, 0x58, 0xf6, 0x4e, 0xbe, 0x1c, 0x68, 0x56, 0x66, 0xaf, 0xcd, 0x41, 0x5d, 0xc8, 0xb3, 0x4d, 0x2a, 0x55, 0x46, 0xab, 0x1f, 0xda, 0x1e, 0xe2, 0x40, 0x3d, 0xdb, 0xcd, 0x7d, 0xb9, 0x92, 0x80, 0x9c, 0x37, 0xdd, 0x0c, 0x96, 0x64, 0x9d, 0xdc, 0x22, 0xf7, 0x64, 0x8b, 0xdf, 0x61, 0xde, 0x15, 0x94, 0x52, 0x15, 0xa0, 0x7d, 0x52, 0xc9, 0x4b, 0xa8, 0x21, 0xc9, 0xc6, 0xb1, 0xed, 0xcb, 0xc3, 0x95, 0x60, 0xd1, 0x0f, 0xf0, 0xab, 0x70, 0xf8, 0xdf, 0xcb, 0x4d, 0x7e, 0xec, 0xd6, 0xfa, 0xab, 0xd9, 0xbd, 0x7f, 0x54, 0xf2, 0xa5, 0xe9, 0x79, 0xfa, 0xd9, 0xd6, 0x76, 0x24, 0x28, 0x73, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x3f, 0x30, 0x3d, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xa0, 0x73, 0x49, 0x99, 0x68, 0xdc, 0x85, 0x5b, 0x65, 0xe3, 0x9b, 0x28, 0x2f, 0x57, 0x9f, 0xbd, 0x33, 0xbc, 0x07, 0x48, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x68, 0x40, 0xa9, 0xa8, 0xbb, 0xe4, 0x4f, 0x5d, 0x79, 0xb3, 0x05, 0xb5, 0x17, 0xb3, 0x60, 0x13, 0xeb, 0xc6, 0x92, 0x5d, 0xe0, 0xd1, 0xd3, 0x6a, 0xfe, 0xfb, 0xbe, 0x9b, 0x6d, 0xbf, 0xc7, 0x05, 0x6d, 0x59, 0x20, 0xc4, 0x1c, 0xf0, 0xb7, 0xda, 0x84, 0x58, 0x02, 0x63, 0xfa, 0x48, 0x16, 0xef, 0x4f, 0xa5, 0x0b, 0xf7, 0x4a, 0x98, 0xf2, 0x3f, 0x9e, 0x1b, 0xad, 0x47, 0x6b, 0x63, 0xce, 0x08, 0x47, 0xeb, 0x52, 0x3f, 0x78, 0x9c, 0xaf, 0x4d, 0xae, 0xf8, 0xd5, 0x4f, 0xcf, 0x9a, 0x98, 0x2a, 0x10, 0x41, 0x39, 0x52, 0xc4, 0xdd, 0xd9, 0x9b, 0x0e, 0xef, 0x93, 0x01, 0xae, 0xb2, 0x2e, 0xca, 0x68, 0x42, 0x24, 0x42, 0x6c, 0xb0, 0xb3, 0x3a, 0x3e, 0xcd, 0xe9, 0xda, 0x48, 0xc4, 0x15, 0xcb, 0xe9, 0xf9, 0x07, 0x0f, 0x92, 0x50, 0x49, 0x8a, 0xdd, 0x31, 0x97, 0x5f, 0xc9, 0xe9, 0x37, 0xaa, 0x3b, 0x59, 0x65, 0x97, 0x94, 0x32, 0xc9, 0xb3, 0x9f, 0x3e, 0x3a, 0x62, 0x58, 0xc5, 0x49, 0xad, 0x62, 0x0e, 0x71, 0xa5, 0x32, 0xaa, 0x2f, 0xc6, 0x89, 0x76, 0x43, 0x40, 0x13, 0x13, 0x67, 0x3d, 0xa2, 0x54, 0x25, 0x10, 0xcb, 0xf1, 0x3a, 0xf2, 0xd9, 0xfa, 0xdb, 0x49, 0x56, 0xbb, 0xa6, 0xfe, 0xa7, 0x41, 0x35, 0xc3, 0xe0, 0x88, 0x61, 0xc9, 0x88, 0xc7, 0xdf, 0x36, 0x10, 0x22, 0x98, 0x59, 0xea, 0xb0, 0x4a, 0xfb, 0x56, 0x16, 0x73, 0x6e, 0xac, 0x4d, 0xf7, 0x22, 0xa1, 0x4f, 0xad, 0x1d, 0x7a, 0x2d, 0x45, 0x27, 0xe5, 0x30, 0xc1, 0x5e, 0xf2, 0xda, 0x13, 0xcb, 0x25, 0x42, 0x51, 0x95, 0x47, 0x03, 0x8c, 0x6c, 0x21, 0xcc, 0x74, 0x42, 0xed, 0x53, 0xff, 0x33, 0x8b, 0x8f, 0x0f, 0x57, 0x01, 0x16, 0x2f, 0xcf, 0xa6, 0xee, 0xc9, 0x70, 0x22, 0x14, 0xbd, 0xfd, 0xbe, 0x6c, 0x0b, 0x03, 0x30, 0x82, 0x03, 0x77, 0x30, 0x82, 0x02, 0x5f, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x5d, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x4a, 0x50, 0x31, 0x25, 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x1c, 0x53, 0x45, 0x43, 0x4f, 0x4d, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x43, 0x4f, 0x2e, 0x2c, 0x4c, 0x54, 0x44, 0x2e, 0x31, 0x27, 0x30, 0x25, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x1e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x20, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x43, 0x41, 0x32, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x39, 0x30, 0x35, 0x32, 0x39, 0x30, 0x35, 0x30, 0x30, 0x33, 0x39, 0x5a, 0x17, 0x0d, 0x32, 0x39, 0x30, 0x35, 0x32, 0x39, 0x30, 0x35, 0x30, 0x30, 0x33, 0x39, 0x5a, 0x30, 0x5d, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x4a, 0x50, 0x31, 0x25, 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x1c, 0x53, 0x45, 0x43, 0x4f, 0x4d, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x43, 0x4f, 0x2e, 0x2c, 0x4c, 0x54, 0x44, 0x2e, 0x31, 0x27, 0x30, 0x25, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x1e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x20, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x43, 0x41, 0x32, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xd0, 0x15, 0x39, 0x52, 0xb1, 0x52, 0xb3, 0xba, 0xc5, 0x59, 0x82, 0xc4, 0x5d, 0x52, 0xae, 0x3a, 0x43, 0x65, 0x80, 0x4b, 0xc7, 0xf2, 0x96, 0xbc, 0xdb, 0x36, 0x97, 0xd6, 0xa6, 0x64, 0x8c, 0xa8, 0x5e, 0xf0, 0xe3, 0x0a, 0x1c, 0xf7, 0xdf, 0x97, 0x3d, 0x4b, 0xae, 0xf6, 0x5d, 0xec, 0x21, 0xb5, 0x41, 0xab, 0xcd, 0xb9, 0x7e, 0x76, 0x9f, 0xbe, 0xf9, 0x3e, 0x36, 0x34, 0xa0, 0x3b, 0xc1, 0xf6, 0x31, 0x11, 0x45, 0x74, 0x93, 0x3d, 0x57, 0x80, 0xc5, 0xf9, 0x89, 0x99, 0xca, 0xe5, 0xab, 0x6a, 0xd4, 0xb5, 0xda, 0x41, 0x90, 0x10, 0xc1, 0xd6, 0xd6, 0x42, 0x89, 0xc2, 0xbf, 0xf4, 0x38, 0x12, 0x95, 0x4c, 0x54, 0x05, 0xf7, 0x36, 0xe4, 0x45, 0x83, 0x7b, 0x14, 0x65, 0xd6, 0xdc, 0x0c, 0x4d, 0xd1, 0xde, 0x7e, 0x0c, 0xab, 0x3b, 0xc4, 0x15, 0xbe, 0x3a, 0x56, 0xa6, 0x5a, 0x6f, 0x76, 0x69, 0x52, 0xa9, 0x7a, 0xb9, 0xc8, 0xeb, 0x6a, 0x9a, 0x5d, 0x52, 0xd0, 0x2d, 0x0a, 0x6b, 0x35, 0x16, 0x09, 0x10, 0x84, 0xd0, 0x6a, 0xca, 0x3a, 0x06, 0x00, 0x37, 0x47, 0xe4, 0x7e, 0x57, 0x4f, 0x3f, 0x8b, 0xeb, 0x67, 0xb8, 0x88, 0xaa, 0xc5, 0xbe, 0x53, 0x55, 0xb2, 0x91, 0xc4, 0x7d, 0xb9, 0xb0, 0x85, 0x19, 0x06, 0x78, 0x2e, 0xdb, 0x61, 0x1a, 0xfa, 0x85, 0xf5, 0x4a, 0x91, 0xa1, 0xe7, 0x16, 0xd5, 0x8e, 0xa2, 0x39, 0xdf, 0x94, 0xb8, 0x70, 0x1f, 0x28, 0x3f, 0x8b, 0xfc, 0x40, 0x5e, 0x63, 0x83, 0x3c, 0x83, 0x2a, 0x1a, 0x99, 0x6b, 0xcf, 0xde, 0x59, 0x6a, 0x3b, 0xfc, 0x6f, 0x16, 0xd7, 0x1f, 0xfd, 0x4a, 0x10, 0xeb, 0x4e, 0x82, 0x16, 0x3a, 0xac, 0x27, 0x0c, 0x53, 0xf1, 0xad, 0xd5, 0x24, 0xb0, 0x6b, 0x03, 0x50, 0xc1, 0x2d, 0x3c, 0x16, 0xdd, 0x44, 0x34, 0x27, 0x1a, 0x75, 0xfb, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x0a, 0x85, 0xa9, 0x77, 0x65, 0x05, 0x98, 0x7c, 0x40, 0x81, 0xf8, 0x0f, 0x97, 0x2c, 0x38, 0xf1, 0x0a, 0xec, 0x3c, 0xcf, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x4c, 0x3a, 0xa3, 0x44, 0xac, 0xb9, 0x45, 0xb1, 0xc7, 0x93, 0x7e, 0xc8, 0x0b, 0x0a, 0x42, 0xdf, 0x64, 0xea, 0x1c, 0xee, 0x59, 0x6c, 0x08, 0xba, 0x89, 0x5f, 0x6a, 0xca, 0x4a, 0x95, 0x9e, 0x7a, 0x8f, 0x07, 0xc5, 0xda, 0x45, 0x72, 0x82, 0x71, 0x0e, 0x3a, 0xd2, 0xcc, 0x6f, 0xa7, 0xb4, 0xa1, 0x23, 0xbb, 0xf6, 0x24, 0x9f, 0xcb, 0x17, 0xfe, 0x8c, 0xa6, 0xce, 0xc2, 0xd2, 0xdb, 0xcc, 0x8d, 0xfc, 0x71, 0xfc, 0x03, 0x29, 0xc1, 0x6c, 0x5d, 0x33, 0x5f, 0x64, 0xb6, 0x65, 0x3b, 0x89, 0x6f, 0x18, 0x76, 0x78, 0xf5, 0xdc, 0xa2, 0x48, 0x1f, 0x19, 0x3f, 0x8e, 0x93, 0xeb, 0xf1, 0xfa, 0x17, 0xee, 0xcd, 0x4e, 0xe3, 0x04, 0x12, 0x55, 0xd6, 0xe5, 0xe4, 0xdd, 0xfb, 0x3e, 0x05, 0x7c, 0xe2, 0x1d, 0x5e, 0xc6, 0xa7, 0xbc, 0x97, 0x4f, 0x68, 0x3a, 0xf5, 0xe9, 0x2e, 0x0a, 0x43, 0xb6, 0xaf, 0x57, 0x5c, 0x62, 0x68, 0x7c, 0xb7, 0xfd, 0xa3, 0x8a, 0x84, 0xa0, 0xac, 0x62, 0xbe, 0x2b, 0x09, 0x87, 0x34, 0xf0, 0x6a, 0x01, 0xbb, 0x9b, 0x29, 0x56, 0x3c, 0xfe, 0x00, 0x37, 0xcf, 0x23, 0x6c, 0xf1, 0x4e, 0xaa, 0xb6, 0x74, 0x46, 0x12, 0x6c, 0x91, 0xee, 0x34, 0xd5, 0xec, 0x9a, 0x91, 0xe7, 0x44, 0xbe, 0x90, 0x31, 0x72, 0xd5, 0x49, 0x02, 0xf6, 0x02, 0xe5, 0xf4, 0x1f, 0xeb, 0x7c, 0xd9, 0x96, 0x55, 0xa9, 0xff, 0xec, 0x8a, 0xf9, 0x99, 0x47, 0xff, 0x35, 0x5a, 0x02, 0xaa, 0x04, 0xcb, 0x8a, 0x5b, 0x87, 0x71, 0x29, 0x91, 0xbd, 0xa4, 0xb4, 0x7a, 0x0d, 0xbd, 0x9a, 0xf5, 0x57, 0x23, 0x00, 0x07, 0x21, 0x17, 0x3f, 0x4a, 0x39, 0xd1, 0x05, 0x49, 0x0b, 0xa7, 0xb6, 0x37, 0x81, 0xa5, 0x5d, 0x8c, 0xaa, 0x33, 0x5e, 0x81, 0x28, 0x7c, 0xa7, 0x7d, 0x27, 0xeb, 0x00, 0xae, 0x8d, 0x37, 0x30, 0x82, 0x05, 0xd8, 0x30, 0x82, 0x03, 0xc0, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x4c, 0xaa, 0xf9, 0xca, 0xdb, 0x63, 0x6f, 0xe0, 0x1f, 0xf7, 0x4e, 0xd8, 0x5b, 0x03, 0x86, 0x9d, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0c, 0x05, 0x00, 0x30, 0x81, 0x85, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x42, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x12, 0x47, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x4d, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x74, 0x65, 0x72, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x53, 0x61, 0x6c, 0x66, 0x6f, 0x72, 0x64, 0x31, 0x1a, 0x30, 0x18, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x11, 0x43, 0x4f, 0x4d, 0x4f, 0x44, 0x4f, 0x20, 0x43, 0x41, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x31, 0x2b, 0x30, 0x29, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x22, 0x43, 0x4f, 0x4d, 0x4f, 0x44, 0x4f, 0x20, 0x52, 0x53, 0x41, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x30, 0x30, 0x31, 0x31, 0x39, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x33, 0x38, 0x30, 0x31, 0x31, 0x38, 0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30, 0x81, 0x85, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x42, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x12, 0x47, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x4d, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x74, 0x65, 0x72, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x53, 0x61, 0x6c, 0x66, 0x6f, 0x72, 0x64, 0x31, 0x1a, 0x30, 0x18, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x11, 0x43, 0x4f, 0x4d, 0x4f, 0x44, 0x4f, 0x20, 0x43, 0x41, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x31, 0x2b, 0x30, 0x29, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x22, 0x43, 0x4f, 0x4d, 0x4f, 0x44, 0x4f, 0x20, 0x52, 0x53, 0x41, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0x91, 0xe8, 0x54, 0x92, 0xd2, 0x0a, 0x56, 0xb1, 0xac, 0x0d, 0x24, 0xdd, 0xc5, 0xcf, 0x44, 0x67, 0x74, 0x99, 0x2b, 0x37, 0xa3, 0x7d, 0x23, 0x70, 0x00, 0x71, 0xbc, 0x53, 0xdf, 0xc4, 0xfa, 0x2a, 0x12, 0x8f, 0x4b, 0x7f, 0x10, 0x56, 0xbd, 0x9f, 0x70, 0x72, 0xb7, 0x61, 0x7f, 0xc9, 0x4b, 0x0f, 0x17, 0xa7, 0x3d, 0xe3, 0xb0, 0x04, 0x61, 0xee, 0xff, 0x11, 0x97, 0xc7, 0xf4, 0x86, 0x3e, 0x0a, 0xfa, 0x3e, 0x5c, 0xf9, 0x93, 0xe6, 0x34, 0x7a, 0xd9, 0x14, 0x6b, 0xe7, 0x9c, 0xb3, 0x85, 0xa0, 0x82, 0x7a, 0x76, 0xaf, 0x71, 0x90, 0xd7, 0xec, 0xfd, 0x0d, 0xfa, 0x9c, 0x6c, 0xfa, 0xdf, 0xb0, 0x82, 0xf4, 0x14, 0x7e, 0xf9, 0xbe, 0xc4, 0xa6, 0x2f, 0x4f, 0x7f, 0x99, 0x7f, 0xb5, 0xfc, 0x67, 0x43, 0x72, 0xbd, 0x0c, 0x00, 0xd6, 0x89, 0xeb, 0x6b, 0x2c, 0xd3, 0xed, 0x8f, 0x98, 0x1c, 0x14, 0xab, 0x7e, 0xe5, 0xe3, 0x6e, 0xfc, 0xd8, 0xa8, 0xe4, 0x92, 0x24, 0xda, 0x43, 0x6b, 0x62, 0xb8, 0x55, 0xfd, 0xea, 0xc1, 0xbc, 0x6c, 0xb6, 0x8b, 0xf3, 0x0e, 0x8d, 0x9a, 0xe4, 0x9b, 0x6c, 0x69, 0x99, 0xf8, 0x78, 0x48, 0x30, 0x45, 0xd5, 0xad, 0xe1, 0x0d, 0x3c, 0x45, 0x60, 0xfc, 0x32, 0x96, 0x51, 0x27, 0xbc, 0x67, 0xc3, 0xca, 0x2e, 0xb6, 0x6b, 0xea, 0x46, 0xc7, 0xc7, 0x20, 0xa0, 0xb1, 0x1f, 0x65, 0xde, 0x48, 0x08, 0xba, 0xa4, 0x4e, 0xa9, 0xf2, 0x83, 0x46, 0x37, 0x84, 0xeb, 0xe8, 0xcc, 0x81, 0x48, 0x43, 0x67, 0x4e, 0x72, 0x2a, 0x9b, 0x5c, 0xbd, 0x4c, 0x1b, 0x28, 0x8a, 0x5c, 0x22, 0x7b, 0xb4, 0xab, 0x98, 0xd9, 0xee, 0xe0, 0x51, 0x83, 0xc3, 0x09, 0x46, 0x4e, 0x6d, 0x3e, 0x99, 0xfa, 0x95, 0x17, 0xda, 0x7c, 0x33, 0x57, 0x41, 0x3c, 0x8d, 0x51, 0xed, 0x0b, 0xb6, 0x5c, 0xaf, 0x2c, 0x63, 0x1a, 0xdf, 0x57, 0xc8, 0x3f, 0xbc, 0xe9, 0x5d, 0xc4, 0x9b, 0xaf, 0x45, 0x99, 0xe2, 0xa3, 0x5a, 0x24, 0xb4, 0xba, 0xa9, 0x56, 0x3d, 0xcf, 0x6f, 0xaa, 0xff, 0x49, 0x58, 0xbe, 0xf0, 0xa8, 0xff, 0xf4, 0xb8, 0xad, 0xe9, 0x37, 0xfb, 0xba, 0xb8, 0xf4, 0x0b, 0x3a, 0xf9, 0xe8, 0x43, 0x42, 0x1e, 0x89, 0xd8, 0x84, 0xcb, 0x13, 0xf1, 0xd9, 0xbb, 0xe1, 0x89, 0x60, 0xb8, 0x8c, 0x28, 0x56, 0xac, 0x14, 0x1d, 0x9c, 0x0a, 0xe7, 0x71, 0xeb, 0xcf, 0x0e, 0xdd, 0x3d, 0xa9, 0x96, 0xa1, 0x48, 0xbd, 0x3c, 0xf7, 0xaf, 0xb5, 0x0d, 0x22, 0x4c, 0xc0, 0x11, 0x81, 0xec, 0x56, 0x3b, 0xf6, 0xd3, 0xa2, 0xe2, 0x5b, 0xb7, 0xb2, 0x04, 0x22, 0x52, 0x95, 0x80, 0x93, 0x69, 0xe8, 0x8e, 0x4c, 0x65, 0xf1, 0x91, 0x03, 0x2d, 0x70, 0x74, 0x02, 0xea, 0x8b, 0x67, 0x15, 0x29, 0x69, 0x52, 0x02, 0xbb, 0xd7, 0xdf, 0x50, 0x6a, 0x55, 0x46, 0xbf, 0xa0, 0xa3, 0x28, 0x61, 0x7f, 0x70, 0xd0, 0xc3, 0xa2, 0xaa, 0x2c, 0x21, 0xaa, 0x47, 0xce, 0x28, 0x9c, 0x06, 0x45, 0x76, 0xbf, 0x82, 0x18, 0x27, 0xb4, 0xd5, 0xae, 0xb4, 0xcb, 0x50, 0xe6, 0x6b, 0xf4, 0x4c, 0x86, 0x71, 0x30, 0xe9, 0xa6, 0xdf, 0x16, 0x86, 0xe0, 0xd8, 0xff, 0x40, 0xdd, 0xfb, 0xd0, 0x42, 0x88, 0x7f, 0xa3, 0x33, 0x3a, 0x2e, 0x5c, 0x1e, 0x41, 0x11, 0x81, 0x63, 0xce, 0x18, 0x71, 0x6b, 0x2b, 0xec, 0xa6, 0x8a, 0xb7, 0x31, 0x5c, 0x3a, 0x6a, 0x47, 0xe0, 0xc3, 0x79, 0x59, 0xd6, 0x20, 0x1a, 0xaf, 0xf2, 0x6a, 0x98, 0xaa, 0x72, 0xbc, 0x57, 0x4a, 0xd2, 0x4b, 0x9d, 0xbb, 0x10, 0xfc, 0xb0, 0x4c, 0x41, 0xe5, 0xed, 0x1d, 0x3d, 0x5e, 0x28, 0x9d, 0x9c, 0xcc, 0xbf, 0xb3, 0x51, 0xda, 0xa7, 0x47, 0xe5, 0x84, 0x53, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xbb, 0xaf, 0x7e, 0x02, 0x3d, 0xfa, 0xa6, 0xf1, 0x3c, 0x84, 0x8e, 0xad, 0xee, 0x38, 0x98, 0xec, 0xd9, 0x32, 0x32, 0xd4, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0c, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x0a, 0xf1, 0xd5, 0x46, 0x84, 0xb7, 0xae, 0x51, 0xbb, 0x6c, 0xb2, 0x4d, 0x41, 0x14, 0x00, 0x93, 0x4c, 0x9c, 0xcb, 0xe5, 0xc0, 0x54, 0xcf, 0xa0, 0x25, 0x8e, 0x02, 0xf9, 0xfd, 0xb0, 0xa2, 0x0d, 0xf5, 0x20, 0x98, 0x3c, 0x13, 0x2d, 0xac, 0x56, 0xa2, 0xb0, 0xd6, 0x7e, 0x11, 0x92, 0xe9, 0x2e, 0xba, 0x9e, 0x2e, 0x9a, 0x72, 0xb1, 0xbd, 0x19, 0x44, 0x6c, 0x61, 0x35, 0xa2, 0x9a, 0xb4, 0x16, 0x12, 0x69, 0x5a, 0x8c, 0xe1, 0xd7, 0x3e, 0xa4, 0x1a, 0xe8, 0x2f, 0x03, 0xf4, 0xae, 0x61, 0x1d, 0x10, 0x1b, 0x2a, 0xa4, 0x8b, 0x7a, 0xc5, 0xfe, 0x05, 0xa6, 0xe1, 0xc0, 0xd6, 0xc8, 0xfe, 0x9e, 0xae, 0x8f, 0x2b, 0xba, 0x3d, 0x99, 0xf8, 0xd8, 0x73, 0x09, 0x58, 0x46, 0x6e, 0xa6, 0x9c, 0xf4, 0xd7, 0x27, 0xd3, 0x95, 0xda, 0x37, 0x83, 0x72, 0x1c, 0xd3, 0x73, 0xe0, 0xa2, 0x47, 0x99, 0x03, 0x38, 0x5d, 0xd5, 0x49, 0x79, 0x00, 0x29, 0x1c, 0xc7, 0xec, 0x9b, 0x20, 0x1c, 0x07, 0x24, 0x69, 0x57, 0x78, 0xb2, 0x39, 0xfc, 0x3a, 0x84, 0xa0, 0xb5, 0x9c, 0x7c, 0x8d, 0xbf, 0x2e, 0x93, 0x62, 0x27, 0xb7, 0x39, 0xda, 0x17, 0x18, 0xae, 0xbd, 0x3c, 0x09, 0x68, 0xff, 0x84, 0x9b, 0x3c, 0xd5, 0xd6, 0x0b, 0x03, 0xe3, 0x57, 0x9e, 0x14, 0xf7, 0xd1, 0xeb, 0x4f, 0xc8, 0xbd, 0x87, 0x23, 0xb7, 0xb6, 0x49, 0x43, 0x79, 0x85, 0x5c, 0xba, 0xeb, 0x92, 0x0b, 0xa1, 0xc6, 0xe8, 0x68, 0xa8, 0x4c, 0x16, 0xb1, 0x1a, 0x99, 0x0a, 0xe8, 0x53, 0x2c, 0x92, 0xbb, 0xa1, 0x09, 0x18, 0x75, 0x0c, 0x65, 0xa8, 0x7b, 0xcb, 0x23, 0xb7, 0x1a, 0xc2, 0x28, 0x85, 0xc3, 0x1b, 0xff, 0xd0, 0x2b, 0x62, 0xef, 0xa4, 0x7b, 0x09, 0x91, 0x98, 0x67, 0x8c, 0x14, 0x01, 0xcd, 0x68, 0x06, 0x6a, 0x63, 0x21, 0x75, 0x03, 0x80, 0x88, 0x8a, 0x6e, 0x81, 0xc6, 0x85, 0xf2, 0xa9, 0xa4, 0x2d, 0xe7, 0xf4, 0xa5, 0x24, 0x10, 0x47, 0x83, 0xca, 0xcd, 0xf4, 0x8d, 0x79, 0x58, 0xb1, 0x06, 0x9b, 0xe7, 0x1a, 0x2a, 0xd9, 0x9d, 0x01, 0xd7, 0x94, 0x7d, 0xed, 0x03, 0x4a, 0xca, 0xf0, 0xdb, 0xe8, 0xa9, 0x01, 0x3e, 0xf5, 0x56, 0x99, 0xc9, 0x1e, 0x8e, 0x49, 0x3d, 0xbb, 0xe5, 0x09, 0xb9, 0xe0, 0x4f, 0x49, 0x92, 0x3d, 0x16, 0x82, 0x40, 0xcc, 0xcc, 0x59, 0xc6, 0xe6, 0x3a, 0xed, 0x12, 0x2e, 0x69, 0x3c, 0x6c, 0x95, 0xb1, 0xfd, 0xaa, 0x1d, 0x7b, 0x7f, 0x86, 0xbe, 0x1e, 0x0e, 0x32, 0x46, 0xfb, 0xfb, 0x13, 0x8f, 0x75, 0x7f, 0x4c, 0x8b, 0x4b, 0x46, 0x63, 0xfe, 0x00, 0x34, 0x40, 0x70, 0xc1, 0xc3, 0xb9, 0xa1, 0xdd, 0xa6, 0x70, 0xe2, 0x04, 0xb3, 0x41, 0xbc, 0xe9, 0x80, 0x91, 0xea, 0x64, 0x9c, 0x7a, 0xe1, 0x22, 0x03, 0xa9, 0x9c, 0x6e, 0x6f, 0x0e, 0x65, 0x4f, 0x6c, 0x87, 0x87, 0x5e, 0xf3, 0x6e, 0xa0, 0xf9, 0x75, 0xa5, 0x9b, 0x40, 0xe8, 0x53, 0xb2, 0x27, 0x9d, 0x4a, 0xb9, 0xc0, 0x77, 0x21, 0x8d, 0xff, 0x87, 0xf2, 0xde, 0xbc, 0x8c, 0xef, 0x17, 0xdf, 0xb7, 0x49, 0x0b, 0xd1, 0xf2, 0x6e, 0x30, 0x0b, 0x1a, 0x0e, 0x4e, 0x76, 0xed, 0x11, 0xfc, 0xf5, 0xe9, 0x56, 0xb2, 0x7d, 0xbf, 0xc7, 0x6d, 0x0a, 0x93, 0x8c, 0xa5, 0xd0, 0xc0, 0xb6, 0x1d, 0xbe, 0x3a, 0x4e, 0x94, 0xa2, 0xd7, 0x6e, 0x6c, 0x0b, 0xc2, 0x8a, 0x7c, 0xfa, 0x20, 0xf3, 0xc4, 0xe4, 0xe5, 0xcd, 0x0d, 0xa8, 0xcb, 0x91, 0x92, 0xb1, 0x7c, 0x85, 0xec, 0xb5, 0x14, 0x69, 0x66, 0x0e, 0x82, 0xe7, 0xcd, 0xce, 0xc8, 0x2d, 0xa6, 0x51, 0x7f, 0x21, 0xc1, 0x35, 0x53, 0x85, 0x06, 0x4a, 0x5d, 0x9f, 0xad, 0xbb, 0x1b, 0x5f, 0x74, 0x30, 0x82, 0x04, 0x0f, 0x30, 0x82, 0x02, 0xf7, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x68, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x25, 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x1c, 0x53, 0x74, 0x61, 0x72, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x54, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, 0x73, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x31, 0x32, 0x30, 0x30, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x29, 0x53, 0x74, 0x61, 0x72, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x32, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x34, 0x30, 0x36, 0x32, 0x39, 0x31, 0x37, 0x33, 0x39, 0x31, 0x36, 0x5a, 0x17, 0x0d, 0x33, 0x34, 0x30, 0x36, 0x32, 0x39, 0x31, 0x37, 0x33, 0x39, 0x31, 0x36, 0x5a, 0x30, 0x68, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x25, 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x1c, 0x53, 0x74, 0x61, 0x72, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x54, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, 0x73, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x31, 0x32, 0x30, 0x30, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x29, 0x53, 0x74, 0x61, 0x72, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x32, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x82, 0x01, 0x20, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0d, 0x00, 0x30, 0x82, 0x01, 0x08, 0x02, 0x82, 0x01, 0x01, 0x00, 0xb7, 0x32, 0xc8, 0xfe, 0xe9, 0x71, 0xa6, 0x04, 0x85, 0xad, 0x0c, 0x11, 0x64, 0xdf, 0xce, 0x4d, 0xef, 0xc8, 0x03, 0x18, 0x87, 0x3f, 0xa1, 0xab, 0xfb, 0x3c, 0xa6, 0x9f, 0xf0, 0xc3, 0xa1, 0xda, 0xd4, 0xd8, 0x6e, 0x2b, 0x53, 0x90, 0xfb, 0x24, 0xa4, 0x3e, 0x84, 0xf0, 0x9e, 0xe8, 0x5f, 0xec, 0xe5, 0x27, 0x44, 0xf5, 0x28, 0xa6, 0x3f, 0x7b, 0xde, 0xe0, 0x2a, 0xf0, 0xc8, 0xaf, 0x53, 0x2f, 0x9e, 0xca, 0x05, 0x01, 0x93, 0x1e, 0x8f, 0x66, 0x1c, 0x39, 0xa7, 0x4d, 0xfa, 0x5a, 0xb6, 0x73, 0x04, 0x25, 0x66, 0xeb, 0x77, 0x7f, 0xe7, 0x59, 0xc6, 0x4a, 0x99, 0x25, 0x14, 0x54, 0xeb, 0x26, 0xc7, 0xf3, 0x7f, 0x19, 0xd5, 0x30, 0x70, 0x8f, 0xaf, 0xb0, 0x46, 0x2a, 0xff, 0xad, 0xeb, 0x29, 0xed, 0xd7, 0x9f, 0xaa, 0x04, 0x87, 0xa3, 0xd4, 0xf9, 0x89, 0xa5, 0x34, 0x5f, 0xdb, 0x43, 0x91, 0x82, 0x36, 0xd9, 0x66, 0x3c, 0xb1, 0xb8, 0xb9, 0x82, 0xfd, 0x9c, 0x3a, 0x3e, 0x10, 0xc8, 0x3b, 0xef, 0x06, 0x65, 0x66, 0x7a, 0x9b, 0x19, 0x18, 0x3d, 0xff, 0x71, 0x51, 0x3c, 0x30, 0x2e, 0x5f, 0xbe, 0x3d, 0x77, 0x73, 0xb2, 0x5d, 0x06, 0x6c, 0xc3, 0x23, 0x56, 0x9a, 0x2b, 0x85, 0x26, 0x92, 0x1c, 0xa7, 0x02, 0xb3, 0xe4, 0x3f, 0x0d, 0xaf, 0x08, 0x79, 0x82, 0xb8, 0x36, 0x3d, 0xea, 0x9c, 0xd3, 0x35, 0xb3, 0xbc, 0x69, 0xca, 0xf5, 0xcc, 0x9d, 0xe8, 0xfd, 0x64, 0x8d, 0x17, 0x80, 0x33, 0x6e, 0x5e, 0x4a, 0x5d, 0x99, 0xc9, 0x1e, 0x87, 0xb4, 0x9d, 0x1a, 0xc0, 0xd5, 0x6e, 0x13, 0x35, 0x23, 0x5e, 0xdf, 0x9b, 0x5f, 0x3d, 0xef, 0xd6, 0xf7, 0x76, 0xc2, 0xea, 0x3e, 0xbb, 0x78, 0x0d, 0x1c, 0x42, 0x67, 0x6b, 0x04, 0xd8, 0xf8, 0xd6, 0xda, 0x6f, 0x8b, 0xf2, 0x44, 0xa0, 0x01, 0xab, 0x02, 0x01, 0x03, 0xa3, 0x81, 0xc5, 0x30, 0x81, 0xc2, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xbf, 0x5f, 0xb7, 0xd1, 0xce, 0xdd, 0x1f, 0x86, 0xf4, 0x5b, 0x55, 0xac, 0xdc, 0xd7, 0x10, 0xc2, 0x0e, 0xa9, 0x88, 0xe7, 0x30, 0x81, 0x92, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x81, 0x8a, 0x30, 0x81, 0x87, 0x80, 0x14, 0xbf, 0x5f, 0xb7, 0xd1, 0xce, 0xdd, 0x1f, 0x86, 0xf4, 0x5b, 0x55, 0xac, 0xdc, 0xd7, 0x10, 0xc2, 0x0e, 0xa9, 0x88, 0xe7, 0xa1, 0x6c, 0xa4, 0x6a, 0x30, 0x68, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x25, 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x1c, 0x53, 0x74, 0x61, 0x72, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x54, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, 0x73, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x31, 0x32, 0x30, 0x30, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x29, 0x53, 0x74, 0x61, 0x72, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x32, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x82, 0x01, 0x00, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x05, 0x9d, 0x3f, 0x88, 0x9d, 0xd1, 0xc9, 0x1a, 0x55, 0xa1, 0xac, 0x69, 0xf3, 0xf3, 0x59, 0xda, 0x9b, 0x01, 0x87, 0x1a, 0x4f, 0x57, 0xa9, 0xa1, 0x79, 0x09, 0x2a, 0xdb, 0xf7, 0x2f, 0xb2, 0x1e, 0xcc, 0xc7, 0x5e, 0x6a, 0xd8, 0x83, 0x87, 0xa1, 0x97, 0xef, 0x49, 0x35, 0x3e, 0x77, 0x06, 0x41, 0x58, 0x62, 0xbf, 0x8e, 0x58, 0xb8, 0x0a, 0x67, 0x3f, 0xec, 0xb3, 0xdd, 0x21, 0x66, 0x1f, 0xc9, 0x54, 0xfa, 0x72, 0xcc, 0x3d, 0x4c, 0x40, 0xd8, 0x81, 0xaf, 0x77, 0x9e, 0x83, 0x7a, 0xbb, 0xa2, 0xc7, 0xf5, 0x34, 0x17, 0x8e, 0xd9, 0x11, 0x40, 0xf4, 0xfc, 0x2c, 0x2a, 0x4d, 0x15, 0x7f, 0xa7, 0x62, 0x5d, 0x2e, 0x25, 0xd3, 0x00, 0x0b, 0x20, 0x1a, 0x1d, 0x68, 0xf9, 0x17, 0xb8, 0xf4, 0xbd, 0x8b, 0xed, 0x28, 0x59, 0xdd, 0x4d, 0x16, 0x8b, 0x17, 0x83, 0xc8, 0xb2, 0x65, 0xc7, 0x2d, 0x7a, 0xa5, 0xaa, 0xbc, 0x53, 0x86, 0x6d, 0xdd, 0x57, 0xa4, 0xca, 0xf8, 0x20, 0x41, 0x0b, 0x68, 0xf0, 0xf4, 0xfb, 0x74, 0xbe, 0x56, 0x5d, 0x7a, 0x79, 0xf5, 0xf9, 0x1d, 0x85, 0xe3, 0x2d, 0x95, 0xbe, 0xf5, 0x71, 0x90, 0x43, 0xcc, 0x8d, 0x1f, 0x9a, 0x00, 0x0a, 0x87, 0x29, 0xe9, 0x55, 0x22, 0x58, 0x00, 0x23, 0xea, 0xe3, 0x12, 0x43, 0x29, 0x5b, 0x47, 0x08, 0xdd, 0x8c, 0x41, 0x6a, 0x65, 0x06, 0xa8, 0xe5, 0x21, 0xaa, 0x41, 0xb4, 0x95, 0x21, 0x95, 0xb9, 0x7d, 0xd1, 0x34, 0xab, 0x13, 0xd6, 0xad, 0xbc, 0xdc, 0xe2, 0x3d, 0x39, 0xcd, 0xbd, 0x3e, 0x75, 0x70, 0xa1, 0x18, 0x59, 0x03, 0xc9, 0x22, 0xb4, 0x8f, 0x9c, 0xd5, 0x5e, 0x2a, 0xd7, 0xa5, 0xb6, 0xd4, 0x0a, 0x6d, 0xf8, 0xb7, 0x40, 0x11, 0x46, 0x9a, 0x1f, 0x79, 0x0e, 0x62, 0xbf, 0x0f, 0x97, 0xec, 0xe0, 0x2f, 0x1f, 0x17, 0x94, 0x30, 0x82, 0x03, 0xdd, 0x30, 0x82, 0x02, 0xc5, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0x8f, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x07, 0x41, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x61, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x0a, 0x53, 0x63, 0x6f, 0x74, 0x74, 0x73, 0x64, 0x61, 0x6c, 0x65, 0x31, 0x25, 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x1c, 0x53, 0x74, 0x61, 0x72, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x54, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, 0x73, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x31, 0x32, 0x30, 0x30, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x29, 0x53, 0x74, 0x61, 0x72, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x2d, 0x20, 0x47, 0x32, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x39, 0x30, 0x39, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x33, 0x37, 0x31, 0x32, 0x33, 0x31, 0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30, 0x81, 0x8f, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x07, 0x41, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x61, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x0a, 0x53, 0x63, 0x6f, 0x74, 0x74, 0x73, 0x64, 0x61, 0x6c, 0x65, 0x31, 0x25, 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x1c, 0x53, 0x74, 0x61, 0x72, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x54, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, 0x73, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x31, 0x32, 0x30, 0x30, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x29, 0x53, 0x74, 0x61, 0x72, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x2d, 0x20, 0x47, 0x32, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xbd, 0xed, 0xc1, 0x03, 0xfc, 0xf6, 0x8f, 0xfc, 0x02, 0xb1, 0x6f, 0x5b, 0x9f, 0x48, 0xd9, 0x9d, 0x79, 0xe2, 0xa2, 0xb7, 0x03, 0x61, 0x56, 0x18, 0xc3, 0x47, 0xb6, 0xd7, 0xca, 0x3d, 0x35, 0x2e, 0x89, 0x43, 0xf7, 0xa1, 0x69, 0x9b, 0xde, 0x8a, 0x1a, 0xfd, 0x13, 0x20, 0x9c, 0xb4, 0x49, 0x77, 0x32, 0x29, 0x56, 0xfd, 0xb9, 0xec, 0x8c, 0xdd, 0x22, 0xfa, 0x72, 0xdc, 0x27, 0x61, 0x97, 0xee, 0xf6, 0x5a, 0x84, 0xec, 0x6e, 0x19, 0xb9, 0x89, 0x2c, 0xdc, 0x84, 0x5b, 0xd5, 0x74, 0xfb, 0x6b, 0x5f, 0xc5, 0x89, 0xa5, 0x10, 0x52, 0x89, 0x46, 0x55, 0xf4, 0xb8, 0x75, 0x1c, 0xe6, 0x7f, 0xe4, 0x54, 0xae, 0x4b, 0xf8, 0x55, 0x72, 0x57, 0x02, 0x19, 0xf8, 0x17, 0x71, 0x59, 0xeb, 0x1e, 0x28, 0x07, 0x74, 0xc5, 0x9d, 0x48, 0xbe, 0x6c, 0xb4, 0xf4, 0xa4, 0xb0, 0xf3, 0x64, 0x37, 0x79, 0x92, 0xc0, 0xec, 0x46, 0x5e, 0x7f, 0xe1, 0x6d, 0x53, 0x4c, 0x62, 0xaf, 0xcd, 0x1f, 0x0b, 0x63, 0xbb, 0x3a, 0x9d, 0xfb, 0xfc, 0x79, 0x00, 0x98, 0x61, 0x74, 0xcf, 0x26, 0x82, 0x40, 0x63, 0xf3, 0xb2, 0x72, 0x6a, 0x19, 0x0d, 0x99, 0xca, 0xd4, 0x0e, 0x75, 0xcc, 0x37, 0xfb, 0x8b, 0x89, 0xc1, 0x59, 0xf1, 0x62, 0x7f, 0x5f, 0xb3, 0x5f, 0x65, 0x30, 0xf8, 0xa7, 0xb7, 0x4d, 0x76, 0x5a, 0x1e, 0x76, 0x5e, 0x34, 0xc0, 0xe8, 0x96, 0x56, 0x99, 0x8a, 0xb3, 0xf0, 0x7f, 0xa4, 0xcd, 0xbd, 0xdc, 0x32, 0x31, 0x7c, 0x91, 0xcf, 0xe0, 0x5f, 0x11, 0xf8, 0x6b, 0xaa, 0x49, 0x5c, 0xd1, 0x99, 0x94, 0xd1, 0xa2, 0xe3, 0x63, 0x5b, 0x09, 0x76, 0xb5, 0x56, 0x62, 0xe1, 0x4b, 0x74, 0x1d, 0x96, 0xd4, 0x26, 0xd4, 0x08, 0x04, 0x59, 0xd0, 0x98, 0x0e, 0x0e, 0xe6, 0xde, 0xfc, 0xc3, 0xec, 0x1f, 0x90, 0xf1, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x7c, 0x0c, 0x32, 0x1f, 0xa7, 0xd9, 0x30, 0x7f, 0xc4, 0x7d, 0x68, 0xa3, 0x62, 0xa8, 0xa1, 0xce, 0xab, 0x07, 0x5b, 0x27, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x11, 0x59, 0xfa, 0x25, 0x4f, 0x03, 0x6f, 0x94, 0x99, 0x3b, 0x9a, 0x1f, 0x82, 0x85, 0x39, 0xd4, 0x76, 0x05, 0x94, 0x5e, 0xe1, 0x28, 0x93, 0x6d, 0x62, 0x5d, 0x09, 0xc2, 0xa0, 0xa8, 0xd4, 0xb0, 0x75, 0x38, 0xf1, 0x34, 0x6a, 0x9d, 0xe4, 0x9f, 0x8a, 0x86, 0x26, 0x51, 0xe6, 0x2c, 0xd1, 0xc6, 0x2d, 0x6e, 0x95, 0x20, 0x4a, 0x92, 0x01, 0xec, 0xb8, 0x8a, 0x67, 0x7b, 0x31, 0xe2, 0x67, 0x2e, 0x8c, 0x95, 0x03, 0x26, 0x2e, 0x43, 0x9d, 0x4a, 0x31, 0xf6, 0x0e, 0xb5, 0x0c, 0xbb, 0xb7, 0xe2, 0x37, 0x7f, 0x22, 0xba, 0x00, 0xa3, 0x0e, 0x7b, 0x52, 0xfb, 0x6b, 0xbb, 0x3b, 0xc4, 0xd3, 0x79, 0x51, 0x4e, 0xcd, 0x90, 0xf4, 0x67, 0x07, 0x19, 0xc8, 0x3c, 0x46, 0x7a, 0x0d, 0x01, 0x7d, 0xc5, 0x58, 0xe7, 0x6d, 0xe6, 0x85, 0x30, 0x17, 0x9a, 0x24, 0xc4, 0x10, 0xe0, 0x04, 0xf7, 0xe0, 0xf2, 0x7f, 0xd4, 0xaa, 0x0a, 0xff, 0x42, 0x1d, 0x37, 0xed, 0x94, 0xe5, 0x64, 0x59, 0x12, 0x20, 0x77, 0x38, 0xd3, 0x32, 0x3e, 0x38, 0x81, 0x75, 0x96, 0x73, 0xfa, 0x68, 0x8f, 0xb1, 0xcb, 0xce, 0x1f, 0xc5, 0xec, 0xfa, 0x9c, 0x7e, 0xcf, 0x7e, 0xb1, 0xf1, 0x07, 0x2d, 0xb6, 0xfc, 0xbf, 0xca, 0xa4, 0xbf, 0xd0, 0x97, 0x05, 0x4a, 0xbc, 0xea, 0x18, 0x28, 0x02, 0x90, 0xbd, 0x54, 0x78, 0x09, 0x21, 0x71, 0xd3, 0xd1, 0x7d, 0x1d, 0xd9, 0x16, 0xb0, 0xa9, 0x61, 0x3d, 0xd0, 0x0a, 0x00, 0x22, 0xfc, 0xc7, 0x7b, 0xcb, 0x09, 0x64, 0x45, 0x0b, 0x3b, 0x40, 0x81, 0xf7, 0x7d, 0x7c, 0x32, 0xf5, 0x98, 0xca, 0x58, 0x8e, 0x7d, 0x2a, 0xee, 0x90, 0x59, 0x73, 0x64, 0xf9, 0x36, 0x74, 0x5e, 0x25, 0xa1, 0xf5, 0x66, 0x05, 0x2e, 0x7f, 0x39, 0x15, 0xa9, 0x2a, 0xfb, 0x50, 0x8b, 0x8e, 0x85, 0x69, 0xf4, 0x30, 0x82, 0x03, 0xef, 0x30, 0x82, 0x02, 0xd7, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0x98, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x07, 0x41, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x61, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x0a, 0x53, 0x63, 0x6f, 0x74, 0x74, 0x73, 0x64, 0x61, 0x6c, 0x65, 0x31, 0x25, 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x1c, 0x53, 0x74, 0x61, 0x72, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x54, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, 0x73, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x31, 0x3b, 0x30, 0x39, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x32, 0x53, 0x74, 0x61, 0x72, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x2d, 0x20, 0x47, 0x32, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x39, 0x30, 0x39, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x33, 0x37, 0x31, 0x32, 0x33, 0x31, 0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30, 0x81, 0x98, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x07, 0x41, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x61, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x0a, 0x53, 0x63, 0x6f, 0x74, 0x74, 0x73, 0x64, 0x61, 0x6c, 0x65, 0x31, 0x25, 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x1c, 0x53, 0x74, 0x61, 0x72, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x54, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, 0x73, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x31, 0x3b, 0x30, 0x39, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x32, 0x53, 0x74, 0x61, 0x72, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x2d, 0x20, 0x47, 0x32, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xd5, 0x0c, 0x3a, 0xc4, 0x2a, 0xf9, 0x4e, 0xe2, 0xf5, 0xbe, 0x19, 0x97, 0x5f, 0x8e, 0x88, 0x53, 0xb1, 0x1f, 0x3f, 0xcb, 0xcf, 0x9f, 0x20, 0x13, 0x6d, 0x29, 0x3a, 0xc8, 0x0f, 0x7d, 0x3c, 0xf7, 0x6b, 0x76, 0x38, 0x63, 0xd9, 0x36, 0x60, 0xa8, 0x9b, 0x5e, 0x5c, 0x00, 0x80, 0xb2, 0x2f, 0x59, 0x7f, 0xf6, 0x87, 0xf9, 0x25, 0x43, 0x86, 0xe7, 0x69, 0x1b, 0x52, 0x9a, 0x90, 0xe1, 0x71, 0xe3, 0xd8, 0x2d, 0x0d, 0x4e, 0x6f, 0xf6, 0xc8, 0x49, 0xd9, 0xb6, 0xf3, 0x1a, 0x56, 0xae, 0x2b, 0xb6, 0x74, 0x14, 0xeb, 0xcf, 0xfb, 0x26, 0xe3, 0x1a, 0xba, 0x1d, 0x96, 0x2e, 0x6a, 0x3b, 0x58, 0x94, 0x89, 0x47, 0x56, 0xff, 0x25, 0xa0, 0x93, 0x70, 0x53, 0x83, 0xda, 0x84, 0x74, 0x14, 0xc3, 0x67, 0x9e, 0x04, 0x68, 0x3a, 0xdf, 0x8e, 0x40, 0x5a, 0x1d, 0x4a, 0x4e, 0xcf, 0x43, 0x91, 0x3b, 0xe7, 0x56, 0xd6, 0x00, 0x70, 0xcb, 0x52, 0xee, 0x7b, 0x7d, 0xae, 0x3a, 0xe7, 0xbc, 0x31, 0xf9, 0x45, 0xf6, 0xc2, 0x60, 0xcf, 0x13, 0x59, 0x02, 0x2b, 0x80, 0xcc, 0x34, 0x47, 0xdf, 0xb9, 0xde, 0x90, 0x65, 0x6d, 0x02, 0xcf, 0x2c, 0x91, 0xa6, 0xa6, 0xe7, 0xde, 0x85, 0x18, 0x49, 0x7c, 0x66, 0x4e, 0xa3, 0x3a, 0x6d, 0xa9, 0xb5, 0xee, 0x34, 0x2e, 0xba, 0x0d, 0x03, 0xb8, 0x33, 0xdf, 0x47, 0xeb, 0xb1, 0x6b, 0x8d, 0x25, 0xd9, 0x9b, 0xce, 0x81, 0xd1, 0x45, 0x46, 0x32, 0x96, 0x70, 0x87, 0xde, 0x02, 0x0e, 0x49, 0x43, 0x85, 0xb6, 0x6c, 0x73, 0xbb, 0x64, 0xea, 0x61, 0x41, 0xac, 0xc9, 0xd4, 0x54, 0xdf, 0x87, 0x2f, 0xc7, 0x22, 0xb2, 0x26, 0xcc, 0x9f, 0x59, 0x54, 0x68, 0x9f, 0xfc, 0xbe, 0x2a, 0x2f, 0xc4, 0x55, 0x1c, 0x75, 0x40, 0x60, 0x17, 0x85, 0x02, 0x55, 0x39, 0x8b, 0x7f, 0x05, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x9c, 0x5f, 0x00, 0xdf, 0xaa, 0x01, 0xd7, 0x30, 0x2b, 0x38, 0x88, 0xa2, 0xb8, 0x6d, 0x4a, 0x9c, 0xf2, 0x11, 0x91, 0x83, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x4b, 0x36, 0xa6, 0x84, 0x77, 0x69, 0xdd, 0x3b, 0x19, 0x9f, 0x67, 0x23, 0x08, 0x6f, 0x0e, 0x61, 0xc9, 0xfd, 0x84, 0xdc, 0x5f, 0xd8, 0x36, 0x81, 0xcd, 0xd8, 0x1b, 0x41, 0x2d, 0x9f, 0x60, 0xdd, 0xc7, 0x1a, 0x68, 0xd9, 0xd1, 0x6e, 0x86, 0xe1, 0x88, 0x23, 0xcf, 0x13, 0xde, 0x43, 0xcf, 0xe2, 0x34, 0xb3, 0x04, 0x9d, 0x1f, 0x29, 0xd5, 0xbf, 0xf8, 0x5e, 0xc8, 0xd5, 0xc1, 0xbd, 0xee, 0x92, 0x6f, 0x32, 0x74, 0xf2, 0x91, 0x82, 0x2f, 0xbd, 0x82, 0x42, 0x7a, 0xad, 0x2a, 0xb7, 0x20, 0x7d, 0x4d, 0xbc, 0x7a, 0x55, 0x12, 0xc2, 0x15, 0xea, 0xbd, 0xf7, 0x6a, 0x95, 0x2e, 0x6c, 0x74, 0x9f, 0xcf, 0x1c, 0xb4, 0xf2, 0xc5, 0x01, 0xa3, 0x85, 0xd0, 0x72, 0x3e, 0xad, 0x73, 0xab, 0x0b, 0x9b, 0x75, 0x0c, 0x6d, 0x45, 0xb7, 0x8e, 0x94, 0xac, 0x96, 0x37, 0xb5, 0xa0, 0xd0, 0x8f, 0x15, 0x47, 0x0e, 0xe3, 0xe8, 0x83, 0xdd, 0x8f, 0xfd, 0xef, 0x41, 0x01, 0x77, 0xcc, 0x27, 0xa9, 0x62, 0x85, 0x33, 0xf2, 0x37, 0x08, 0xef, 0x71, 0xcf, 0x77, 0x06, 0xde, 0xc8, 0x19, 0x1d, 0x88, 0x40, 0xcf, 0x7d, 0x46, 0x1d, 0xff, 0x1e, 0xc7, 0xe1, 0xce, 0xff, 0x23, 0xdb, 0xc6, 0xfa, 0x8d, 0x55, 0x4e, 0xa9, 0x02, 0xe7, 0x47, 0x11, 0x46, 0x3e, 0xf4, 0xfd, 0xbd, 0x7b, 0x29, 0x26, 0xbb, 0xa9, 0x61, 0x62, 0x37, 0x28, 0xb6, 0x2d, 0x2a, 0xf6, 0x10, 0x86, 0x64, 0xc9, 0x70, 0xa7, 0xd2, 0xad, 0xb7, 0x29, 0x70, 0x79, 0xea, 0x3c, 0xda, 0x63, 0x25, 0x9f, 0xfd, 0x68, 0xb7, 0x30, 0xec, 0x70, 0xfb, 0x75, 0x8a, 0xb7, 0x6d, 0x60, 0x67, 0xb2, 0x1e, 0xc8, 0xb9, 0xe9, 0xd8, 0xa8, 0x6f, 0x02, 0x8b, 0x67, 0x0d, 0x4d, 0x26, 0x57, 0x71, 0xda, 0x20, 0xfc, 0xc1, 0x4a, 0x50, 0x8d, 0xb1, 0x28, 0xba, 0x30, 0x82, 0x05, 0xde, 0x30, 0x82, 0x03, 0xc6, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x01, 0xfd, 0x6d, 0x30, 0xfc, 0xa3, 0xca, 0x51, 0xa8, 0x1b, 0xbc, 0x64, 0x0e, 0x35, 0x03, 0x2d, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0c, 0x05, 0x00, 0x30, 0x81, 0x88, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a, 0x4e, 0x65, 0x77, 0x20, 0x4a, 0x65, 0x72, 0x73, 0x65, 0x79, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x0b, 0x4a, 0x65, 0x72, 0x73, 0x65, 0x79, 0x20, 0x43, 0x69, 0x74, 0x79, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x15, 0x54, 0x68, 0x65, 0x20, 0x55, 0x53, 0x45, 0x52, 0x54, 0x52, 0x55, 0x53, 0x54, 0x20, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x31, 0x2e, 0x30, 0x2c, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x25, 0x55, 0x53, 0x45, 0x52, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x52, 0x53, 0x41, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x30, 0x30, 0x32, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x33, 0x38, 0x30, 0x31, 0x31, 0x38, 0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30, 0x81, 0x88, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a, 0x4e, 0x65, 0x77, 0x20, 0x4a, 0x65, 0x72, 0x73, 0x65, 0x79, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x0b, 0x4a, 0x65, 0x72, 0x73, 0x65, 0x79, 0x20, 0x43, 0x69, 0x74, 0x79, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x15, 0x54, 0x68, 0x65, 0x20, 0x55, 0x53, 0x45, 0x52, 0x54, 0x52, 0x55, 0x53, 0x54, 0x20, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x31, 0x2e, 0x30, 0x2c, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x25, 0x55, 0x53, 0x45, 0x52, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x52, 0x53, 0x41, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0x80, 0x12, 0x65, 0x17, 0x36, 0x0e, 0xc3, 0xdb, 0x08, 0xb3, 0xd0, 0xac, 0x57, 0x0d, 0x76, 0xed, 0xcd, 0x27, 0xd3, 0x4c, 0xad, 0x50, 0x83, 0x61, 0xe2, 0xaa, 0x20, 0x4d, 0x09, 0x2d, 0x64, 0x09, 0xdc, 0xce, 0x89, 0x9f, 0xcc, 0x3d, 0xa9, 0xec, 0xf6, 0xcf, 0xc1, 0xdc, 0xf1, 0xd3, 0xb1, 0xd6, 0x7b, 0x37, 0x28, 0x11, 0x2b, 0x47, 0xda, 0x39, 0xc6, 0xbc, 0x3a, 0x19, 0xb4, 0x5f, 0xa6, 0xbd, 0x7d, 0x9d, 0xa3, 0x63, 0x42, 0xb6, 0x76, 0xf2, 0xa9, 0x3b, 0x2b, 0x91, 0xf8, 0xe2, 0x6f, 0xd0, 0xec, 0x16, 0x20, 0x90, 0x09, 0x3e, 0xe2, 0xe8, 0x74, 0xc9, 0x18, 0xb4, 0x91, 0xd4, 0x62, 0x64, 0xdb, 0x7f, 0xa3, 0x06, 0xf1, 0x88, 0x18, 0x6a, 0x90, 0x22, 0x3c, 0xbc, 0xfe, 0x13, 0xf0, 0x87, 0x14, 0x7b, 0xf6, 0xe4, 0x1f, 0x8e, 0xd4, 0xe4, 0x51, 0xc6, 0x11, 0x67, 0x46, 0x08, 0x51, 0xcb, 0x86, 0x14, 0x54, 0x3f, 0xbc, 0x33, 0xfe, 0x7e, 0x6c, 0x9c, 0xff, 0x16, 0x9d, 0x18, 0xbd, 0x51, 0x8e, 0x35, 0xa6, 0xa7, 0x66, 0xc8, 0x72, 0x67, 0xdb, 0x21, 0x66, 0xb1, 0xd4, 0x9b, 0x78, 0x03, 0xc0, 0x50, 0x3a, 0xe8, 0xcc, 0xf0, 0xdc, 0xbc, 0x9e, 0x4c, 0xfe, 0xaf, 0x05, 0x96, 0x35, 0x1f, 0x57, 0x5a, 0xb7, 0xff, 0xce, 0xf9, 0x3d, 0xb7, 0x2c, 0xb6, 0xf6, 0x54, 0xdd, 0xc8, 0xe7, 0x12, 0x3a, 0x4d, 0xae, 0x4c, 0x8a, 0xb7, 0x5c, 0x9a, 0xb4, 0xb7, 0x20, 0x3d, 0xca, 0x7f, 0x22, 0x34, 0xae, 0x7e, 0x3b, 0x68, 0x66, 0x01, 0x44, 0xe7, 0x01, 0x4e, 0x46, 0x53, 0x9b, 0x33, 0x60, 0xf7, 0x94, 0xbe, 0x53, 0x37, 0x90, 0x73, 0x43, 0xf3, 0x32, 0xc3, 0x53, 0xef, 0xdb, 0xaa, 0xfe, 0x74, 0x4e, 0x69, 0xc7, 0x6b, 0x8c, 0x60, 0x93, 0xde, 0xc4, 0xc7, 0x0c, 0xdf, 0xe1, 0x32, 0xae, 0xcc, 0x93, 0x3b, 0x51, 0x78, 0x95, 0x67, 0x8b, 0xee, 0x3d, 0x56, 0xfe, 0x0c, 0xd0, 0x69, 0x0f, 0x1b, 0x0f, 0xf3, 0x25, 0x26, 0x6b, 0x33, 0x6d, 0xf7, 0x6e, 0x47, 0xfa, 0x73, 0x43, 0xe5, 0x7e, 0x0e, 0xa5, 0x66, 0xb1, 0x29, 0x7c, 0x32, 0x84, 0x63, 0x55, 0x89, 0xc4, 0x0d, 0xc1, 0x93, 0x54, 0x30, 0x19, 0x13, 0xac, 0xd3, 0x7d, 0x37, 0xa7, 0xeb, 0x5d, 0x3a, 0x6c, 0x35, 0x5c, 0xdb, 0x41, 0xd7, 0x12, 0xda, 0xa9, 0x49, 0x0b, 0xdf, 0xd8, 0x80, 0x8a, 0x09, 0x93, 0x62, 0x8e, 0xb5, 0x66, 0xcf, 0x25, 0x88, 0xcd, 0x84, 0xb8, 0xb1, 0x3f, 0xa4, 0x39, 0x0f, 0xd9, 0x02, 0x9e, 0xeb, 0x12, 0x4c, 0x95, 0x7c, 0xf3, 0x6b, 0x05, 0xa9, 0x5e, 0x16, 0x83, 0xcc, 0xb8, 0x67, 0xe2, 0xe8, 0x13, 0x9d, 0xcc, 0x5b, 0x82, 0xd3, 0x4c, 0xb3, 0xed, 0x5b, 0xff, 0xde, 0xe5, 0x73, 0xac, 0x23, 0x3b, 0x2d, 0x00, 0xbf, 0x35, 0x55, 0x74, 0x09, 0x49, 0xd8, 0x49, 0x58, 0x1a, 0x7f, 0x92, 0x36, 0xe6, 0x51, 0x92, 0x0e, 0xf3, 0x26, 0x7d, 0x1c, 0x4d, 0x17, 0xbc, 0xc9, 0xec, 0x43, 0x26, 0xd0, 0xbf, 0x41, 0x5f, 0x40, 0xa9, 0x44, 0x44, 0xf4, 0x99, 0xe7, 0x57, 0x87, 0x9e, 0x50, 0x1f, 0x57, 0x54, 0xa8, 0x3e, 0xfd, 0x74, 0x63, 0x2f, 0xb1, 0x50, 0x65, 0x09, 0xe6, 0x58, 0x42, 0x2e, 0x43, 0x1a, 0x4c, 0xb4, 0xf0, 0x25, 0x47, 0x59, 0xfa, 0x04, 0x1e, 0x93, 0xd4, 0x26, 0x46, 0x4a, 0x50, 0x81, 0xb2, 0xde, 0xbe, 0x78, 0xb7, 0xfc, 0x67, 0x15, 0xe1, 0xc9, 0x57, 0x84, 0x1e, 0x0f, 0x63, 0xd6, 0xe9, 0x62, 0xba, 0xd6, 0x5f, 0x55, 0x2e, 0xea, 0x5c, 0xc6, 0x28, 0x08, 0x04, 0x25, 0x39, 0xb8, 0x0e, 0x2b, 0xa9, 0xf2, 0x4c, 0x97, 0x1c, 0x07, 0x3f, 0x0d, 0x52, 0xf5, 0xed, 0xef, 0x2f, 0x82, 0x0f, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x53, 0x79, 0xbf, 0x5a, 0xaa, 0x2b, 0x4a, 0xcf, 0x54, 0x80, 0xe1, 0xd8, 0x9b, 0xc0, 0x9d, 0xf2, 0xb2, 0x03, 0x66, 0xcb, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0c, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x5c, 0xd4, 0x7c, 0x0d, 0xcf, 0xf7, 0x01, 0x7d, 0x41, 0x99, 0x65, 0x0c, 0x73, 0xc5, 0x52, 0x9f, 0xcb, 0xf8, 0xcf, 0x99, 0x06, 0x7f, 0x1b, 0xda, 0x43, 0x15, 0x9f, 0x9e, 0x02, 0x55, 0x57, 0x96, 0x14, 0xf1, 0x52, 0x3c, 0x27, 0x87, 0x94, 0x28, 0xed, 0x1f, 0x3a, 0x01, 0x37, 0xa2, 0x76, 0xfc, 0x53, 0x50, 0xc0, 0x84, 0x9b, 0xc6, 0x6b, 0x4e, 0xba, 0x8c, 0x21, 0x4f, 0xa2, 0x8e, 0x55, 0x62, 0x91, 0xf3, 0x69, 0x15, 0xd8, 0xbc, 0x88, 0xe3, 0xc4, 0xaa, 0x0b, 0xfd, 0xef, 0xa8, 0xe9, 0x4b, 0x55, 0x2a, 0x06, 0x20, 0x6d, 0x55, 0x78, 0x29, 0x19, 0xee, 0x5f, 0x30, 0x5c, 0x4b, 0x24, 0x11, 0x55, 0xff, 0x24, 0x9a, 0x6e, 0x5e, 0x2a, 0x2b, 0xee, 0x0b, 0x4d, 0x9f, 0x7f, 0xf7, 0x01, 0x38, 0x94, 0x14, 0x95, 0x43, 0x07, 0x09, 0xfb, 0x60, 0xa9, 0xee, 0x1c, 0xab, 0x12, 0x8c, 0xa0, 0x9a, 0x5e, 0xa7, 0x98, 0x6a, 0x59, 0x6d, 0x8b, 0x3f, 0x08, 0xfb, 0xc8, 0xd1, 0x45, 0xaf, 0x18, 0x15, 0x64, 0x90, 0x12, 0x0f, 0x73, 0x28, 0x2e, 0xc5, 0xe2, 0x24, 0x4e, 0xfc, 0x58, 0xec, 0xf0, 0xf4, 0x45, 0xfe, 0x22, 0xb3, 0xeb, 0x2f, 0x8e, 0xd2, 0xd9, 0x45, 0x61, 0x05, 0xc1, 0x97, 0x6f, 0xa8, 0x76, 0x72, 0x8f, 0x8b, 0x8c, 0x36, 0xaf, 0xbf, 0x0d, 0x05, 0xce, 0x71, 0x8d, 0xe6, 0xa6, 0x6f, 0x1f, 0x6c, 0xa6, 0x71, 0x62, 0xc5, 0xd8, 0xd0, 0x83, 0x72, 0x0c, 0xf1, 0x67, 0x11, 0x89, 0x0c, 0x9c, 0x13, 0x4c, 0x72, 0x34, 0xdf, 0xbc, 0xd5, 0x71, 0xdf, 0xaa, 0x71, 0xdd, 0xe1, 0xb9, 0x6c, 0x8c, 0x3c, 0x12, 0x5d, 0x65, 0xda, 0xbd, 0x57, 0x12, 0xb6, 0x43, 0x6b, 0xff, 0xe5, 0xde, 0x4d, 0x66, 0x11, 0x51, 0xcf, 0x99, 0xae, 0xec, 0x17, 0xb6, 0xe8, 0x71, 0x91, 0x8c, 0xde, 0x49, 0xfe, 0xdd, 0x35, 0x71, 0xa2, 0x15, 0x27, 0x94, 0x1c, 0xcf, 0x61, 0xe3, 0x26, 0xbb, 0x6f, 0xa3, 0x67, 0x25, 0x21, 0x5d, 0xe6, 0xdd, 0x1d, 0x0b, 0x2e, 0x68, 0x1b, 0x3b, 0x82, 0xaf, 0xec, 0x83, 0x67, 0x85, 0xd4, 0x98, 0x51, 0x74, 0xb1, 0xb9, 0x99, 0x80, 0x89, 0xff, 0x7f, 0x78, 0x19, 0x5c, 0x79, 0x4a, 0x60, 0x2e, 0x92, 0x40, 0xae, 0x4c, 0x37, 0x2a, 0x2c, 0xc9, 0xc7, 0x62, 0xc8, 0x0e, 0x5d, 0xf7, 0x36, 0x5b, 0xca, 0xe0, 0x25, 0x25, 0x01, 0xb4, 0xdd, 0x1a, 0x07, 0x9c, 0x77, 0x00, 0x3f, 0xd0, 0xdc, 0xd5, 0xec, 0x3d, 0xd4, 0xfa, 0xbb, 0x3f, 0xcc, 0x85, 0xd6, 0x6f, 0x7f, 0xa9, 0x2d, 0xdf, 0xb9, 0x02, 0xf7, 0xf5, 0x97, 0x9a, 0xb5, 0x35, 0xda, 0xc3, 0x67, 0xb0, 0x87, 0x4a, 0xa9, 0x28, 0x9e, 0x23, 0x8e, 0xff, 0x5c, 0x27, 0x6b, 0xe1, 0xb0, 0x4f, 0xf3, 0x07, 0xee, 0x00, 0x2e, 0xd4, 0x59, 0x87, 0xcb, 0x52, 0x41, 0x95, 0xea, 0xf4, 0x47, 0xd7, 0xee, 0x64, 0x41, 0x55, 0x7c, 0x8d, 0x59, 0x02, 0x95, 0xdd, 0x62, 0x9d, 0xc2, 0xb9, 0xee, 0x5a, 0x28, 0x74, 0x84, 0xa5, 0x9b, 0xb7, 0x90, 0xc7, 0x0c, 0x07, 0xdf, 0xf5, 0x89, 0x36, 0x74, 0x32, 0xd6, 0x28, 0xc1, 0xb0, 0xb0, 0x0b, 0xe0, 0x9c, 0x4c, 0xc3, 0x1c, 0xd6, 0xfc, 0xe3, 0x69, 0xb5, 0x47, 0x46, 0x81, 0x2f, 0xa2, 0x82, 0xab, 0xd3, 0x63, 0x44, 0x70, 0xc4, 0x8d, 0xff, 0x2d, 0x33, 0xba, 0xad, 0x8f, 0x7b, 0xb5, 0x70, 0x88, 0xae, 0x3e, 0x19, 0xcf, 0x40, 0x28, 0xd8, 0xfc, 0xc8, 0x90, 0xbb, 0x5d, 0x99, 0x22, 0xf5, 0x52, 0xe6, 0x58, 0xc5, 0x1f, 0x88, 0x31, 0x43, 0xee, 0x88, 0x1d, 0xd7, 0xc6, 0x8e, 0x3c, 0x43, 0x6a, 0x1d, 0xa7, 0x18, 0xde, 0x7d, 0x3d, 0x16, 0xf1, 0x62, 0xf9, 0xca, 0x90, 0xa8, 0xfd, 0x30, 0x82, 0x02, 0x8f, 0x30, 0x82, 0x02, 0x15, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x5c, 0x8b, 0x99, 0xc5, 0x5a, 0x94, 0xc5, 0xd2, 0x71, 0x56, 0xde, 0xcd, 0x89, 0x80, 0xcc, 0x26, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x30, 0x81, 0x88, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a, 0x4e, 0x65, 0x77, 0x20, 0x4a, 0x65, 0x72, 0x73, 0x65, 0x79, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x0b, 0x4a, 0x65, 0x72, 0x73, 0x65, 0x79, 0x20, 0x43, 0x69, 0x74, 0x79, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x15, 0x54, 0x68, 0x65, 0x20, 0x55, 0x53, 0x45, 0x52, 0x54, 0x52, 0x55, 0x53, 0x54, 0x20, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x31, 0x2e, 0x30, 0x2c, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x25, 0x55, 0x53, 0x45, 0x52, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x45, 0x43, 0x43, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x30, 0x30, 0x32, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x33, 0x38, 0x30, 0x31, 0x31, 0x38, 0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30, 0x81, 0x88, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a, 0x4e, 0x65, 0x77, 0x20, 0x4a, 0x65, 0x72, 0x73, 0x65, 0x79, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x0b, 0x4a, 0x65, 0x72, 0x73, 0x65, 0x79, 0x20, 0x43, 0x69, 0x74, 0x79, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x15, 0x54, 0x68, 0x65, 0x20, 0x55, 0x53, 0x45, 0x52, 0x54, 0x52, 0x55, 0x53, 0x54, 0x20, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x31, 0x2e, 0x30, 0x2c, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x25, 0x55, 0x53, 0x45, 0x52, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x45, 0x43, 0x43, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x76, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x22, 0x03, 0x62, 0x00, 0x04, 0x1a, 0xac, 0x54, 0x5a, 0xa9, 0xf9, 0x68, 0x23, 0xe7, 0x7a, 0xd5, 0x24, 0x6f, 0x53, 0xc6, 0x5a, 0xd8, 0x4b, 0xab, 0xc6, 0xd5, 0xb6, 0xd1, 0xe6, 0x73, 0x71, 0xae, 0xdd, 0x9c, 0xd6, 0x0c, 0x61, 0xfd, 0xdb, 0xa0, 0x89, 0x03, 0xb8, 0x05, 0x14, 0xec, 0x57, 0xce, 0xee, 0x5d, 0x3f, 0xe2, 0x21, 0xb3, 0xce, 0xf7, 0xd4, 0x8a, 0x79, 0xe0, 0xa3, 0x83, 0x7e, 0x2d, 0x97, 0xd0, 0x61, 0xc4, 0xf1, 0x99, 0xdc, 0x25, 0x91, 0x63, 0xab, 0x7f, 0x30, 0xa3, 0xb4, 0x70, 0xe2, 0xc7, 0xa1, 0x33, 0x9c, 0xf3, 0xbf, 0x2e, 0x5c, 0x53, 0xb1, 0x5f, 0xb3, 0x7d, 0x32, 0x7f, 0x8a, 0x34, 0xe3, 0x79, 0x79, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x3a, 0xe1, 0x09, 0x86, 0xd4, 0xcf, 0x19, 0xc2, 0x96, 0x76, 0x74, 0x49, 0x76, 0xdc, 0xe0, 0x35, 0xc6, 0x63, 0x63, 0x9a, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x03, 0x68, 0x00, 0x30, 0x65, 0x02, 0x30, 0x36, 0x67, 0xa1, 0x16, 0x08, 0xdc, 0xe4, 0x97, 0x00, 0x41, 0x1d, 0x4e, 0xbe, 0xe1, 0x63, 0x01, 0xcf, 0x3b, 0xaa, 0x42, 0x11, 0x64, 0xa0, 0x9d, 0x94, 0x39, 0x02, 0x11, 0x79, 0x5c, 0x7b, 0x1d, 0xfa, 0x64, 0xb9, 0xee, 0x16, 0x42, 0xb3, 0xbf, 0x8a, 0xc2, 0x09, 0xc4, 0xec, 0xe4, 0xb1, 0x4d, 0x02, 0x31, 0x00, 0xe9, 0x2a, 0x61, 0x47, 0x8c, 0x52, 0x4a, 0x4b, 0x4e, 0x18, 0x70, 0xf6, 0xd6, 0x44, 0xd6, 0x6e, 0xf5, 0x83, 0xba, 0x6d, 0x58, 0xbd, 0x24, 0xd9, 0x56, 0x48, 0xea, 0xef, 0xc4, 0xa2, 0x46, 0x81, 0x88, 0x6a, 0x3a, 0x46, 0xd1, 0xa9, 0x9b, 0x4d, 0xc9, 0x61, 0xda, 0xd1, 0x5d, 0x57, 0x6a, 0x18, 0x30, 0x82, 0x04, 0x91, 0x30, 0x82, 0x03, 0x79, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x04, 0x45, 0x6b, 0x50, 0x54, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x81, 0xb0, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x16, 0x30, 0x14, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0d, 0x45, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x31, 0x39, 0x30, 0x37, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x30, 0x77, 0x77, 0x77, 0x2e, 0x65, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x6e, 0x65, 0x74, 0x2f, 0x43, 0x50, 0x53, 0x20, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x16, 0x28, 0x63, 0x29, 0x20, 0x32, 0x30, 0x30, 0x36, 0x20, 0x45, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x31, 0x2d, 0x30, 0x2b, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x24, 0x45, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x36, 0x31, 0x31, 0x32, 0x37, 0x32, 0x30, 0x32, 0x33, 0x34, 0x32, 0x5a, 0x17, 0x0d, 0x32, 0x36, 0x31, 0x31, 0x32, 0x37, 0x32, 0x30, 0x35, 0x33, 0x34, 0x32, 0x5a, 0x30, 0x81, 0xb0, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x16, 0x30, 0x14, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0d, 0x45, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x31, 0x39, 0x30, 0x37, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x30, 0x77, 0x77, 0x77, 0x2e, 0x65, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x6e, 0x65, 0x74, 0x2f, 0x43, 0x50, 0x53, 0x20, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x16, 0x28, 0x63, 0x29, 0x20, 0x32, 0x30, 0x30, 0x36, 0x20, 0x45, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x31, 0x2d, 0x30, 0x2b, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x24, 0x45, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xb6, 0x95, 0xb6, 0x43, 0x42, 0xfa, 0xc6, 0x6d, 0x2a, 0x6f, 0x48, 0xdf, 0x94, 0x4c, 0x39, 0x57, 0x05, 0xee, 0xc3, 0x79, 0x11, 0x41, 0x68, 0x36, 0xed, 0xec, 0xfe, 0x9a, 0x01, 0x8f, 0xa1, 0x38, 0x28, 0xfc, 0xf7, 0x10, 0x46, 0x66, 0x2e, 0x4d, 0x1e, 0x1a, 0xb1, 0x1a, 0x4e, 0xc6, 0xd1, 0xc0, 0x95, 0x88, 0xb0, 0xc9, 0xff, 0x31, 0x8b, 0x33, 0x03, 0xdb, 0xb7, 0x83, 0x7b, 0x3e, 0x20, 0x84, 0x5e, 0xed, 0xb2, 0x56, 0x28, 0xa7, 0xf8, 0xe0, 0xb9, 0x40, 0x71, 0x37, 0xc5, 0xcb, 0x47, 0x0e, 0x97, 0x2a, 0x68, 0xc0, 0x22, 0x95, 0x62, 0x15, 0xdb, 0x47, 0xd9, 0xf5, 0xd0, 0x2b, 0xff, 0x82, 0x4b, 0xc9, 0xad, 0x3e, 0xde, 0x4c, 0xdb, 0x90, 0x80, 0x50, 0x3f, 0x09, 0x8a, 0x84, 0x00, 0xec, 0x30, 0x0a, 0x3d, 0x18, 0xcd, 0xfb, 0xfd, 0x2a, 0x59, 0x9a, 0x23, 0x95, 0x17, 0x2c, 0x45, 0x9e, 0x1f, 0x6e, 0x43, 0x79, 0x6d, 0x0c, 0x5c, 0x98, 0xfe, 0x48, 0xa7, 0xc5, 0x23, 0x47, 0x5c, 0x5e, 0xfd, 0x6e, 0xe7, 0x1e, 0xb4, 0xf6, 0x68, 0x45, 0xd1, 0x86, 0x83, 0x5b, 0xa2, 0x8a, 0x8d, 0xb1, 0xe3, 0x29, 0x80, 0xfe, 0x25, 0x71, 0x88, 0xad, 0xbe, 0xbc, 0x8f, 0xac, 0x52, 0x96, 0x4b, 0xaa, 0x51, 0x8d, 0xe4, 0x13, 0x31, 0x19, 0xe8, 0x4e, 0x4d, 0x9f, 0xdb, 0xac, 0xb3, 0x6a, 0xd5, 0xbc, 0x39, 0x54, 0x71, 0xca, 0x7a, 0x7a, 0x7f, 0x90, 0xdd, 0x7d, 0x1d, 0x80, 0xd9, 0x81, 0xbb, 0x59, 0x26, 0xc2, 0x11, 0xfe, 0xe6, 0x93, 0xe2, 0xf7, 0x80, 0xe4, 0x65, 0xfb, 0x34, 0x37, 0x0e, 0x29, 0x80, 0x70, 0x4d, 0xaf, 0x38, 0x86, 0x2e, 0x9e, 0x7f, 0x57, 0xaf, 0x9e, 0x17, 0xae, 0xeb, 0x1c, 0xcb, 0x28, 0x21, 0x5f, 0xb6, 0x1c, 0xd8, 0xe7, 0xa2, 0x04, 0x22, 0xf9, 0xd3, 0xda, 0xd8, 0xcb, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x81, 0xb0, 0x30, 0x81, 0xad, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x2b, 0x06, 0x03, 0x55, 0x1d, 0x10, 0x04, 0x24, 0x30, 0x22, 0x80, 0x0f, 0x32, 0x30, 0x30, 0x36, 0x31, 0x31, 0x32, 0x37, 0x32, 0x30, 0x32, 0x33, 0x34, 0x32, 0x5a, 0x81, 0x0f, 0x32, 0x30, 0x32, 0x36, 0x31, 0x31, 0x32, 0x37, 0x32, 0x30, 0x35, 0x33, 0x34, 0x32, 0x5a, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x68, 0x90, 0xe4, 0x67, 0xa4, 0xa6, 0x53, 0x80, 0xc7, 0x86, 0x66, 0xa4, 0xf1, 0xf7, 0x4b, 0x43, 0xfb, 0x84, 0xbd, 0x6d, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x68, 0x90, 0xe4, 0x67, 0xa4, 0xa6, 0x53, 0x80, 0xc7, 0x86, 0x66, 0xa4, 0xf1, 0xf7, 0x4b, 0x43, 0xfb, 0x84, 0xbd, 0x6d, 0x30, 0x1d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf6, 0x7d, 0x07, 0x41, 0x00, 0x04, 0x10, 0x30, 0x0e, 0x1b, 0x08, 0x56, 0x37, 0x2e, 0x31, 0x3a, 0x34, 0x2e, 0x30, 0x03, 0x02, 0x04, 0x90, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x93, 0xd4, 0x30, 0xb0, 0xd7, 0x03, 0x20, 0x2a, 0xd0, 0xf9, 0x63, 0xe8, 0x91, 0x0c, 0x05, 0x20, 0xa9, 0x5f, 0x19, 0xca, 0x7b, 0x72, 0x4e, 0xd4, 0xb1, 0xdb, 0xd0, 0x96, 0xfb, 0x54, 0x5a, 0x19, 0x2c, 0x0c, 0x08, 0xf7, 0xb2, 0xbc, 0x85, 0xa8, 0x9d, 0x7f, 0x6d, 0x3b, 0x52, 0xb3, 0x2a, 0xdb, 0xe7, 0xd4, 0x84, 0x8c, 0x63, 0xf6, 0x0f, 0xcb, 0x26, 0x01, 0x91, 0x50, 0x6c, 0xf4, 0x5f, 0x14, 0xe2, 0x93, 0x74, 0xc0, 0x13, 0x9e, 0x30, 0x3a, 0x50, 0xe3, 0xb4, 0x60, 0xc5, 0x1c, 0xf0, 0x22, 0x44, 0x8d, 0x71, 0x47, 0xac, 0xc8, 0x1a, 0xc9, 0xe9, 0x9b, 0x9a, 0x00, 0x60, 0x13, 0xff, 0x70, 0x7e, 0x5f, 0x11, 0x4d, 0x49, 0x1b, 0xb3, 0x15, 0x52, 0x7b, 0xc9, 0x54, 0xda, 0xbf, 0x9d, 0x95, 0xaf, 0x6b, 0x9a, 0xd8, 0x9e, 0xe9, 0xf1, 0xe4, 0x43, 0x8d, 0xe2, 0x11, 0x44, 0x3a, 0xbf, 0xaf, 0xbd, 0x83, 0x42, 0x73, 0x52, 0x8b, 0xaa, 0xbb, 0xa7, 0x29, 0xcf, 0xf5, 0x64, 0x1c, 0x0a, 0x4d, 0xd1, 0xbc, 0xaa, 0xac, 0x9f, 0x2a, 0xd0, 0xff, 0x7f, 0x7f, 0xda, 0x7d, 0xea, 0xb1, 0xed, 0x30, 0x25, 0xc1, 0x84, 0xda, 0x34, 0xd2, 0x5b, 0x78, 0x83, 0x56, 0xec, 0x9c, 0x36, 0xc3, 0x26, 0xe2, 0x11, 0xf6, 0x67, 0x49, 0x1d, 0x92, 0xab, 0x8c, 0xfb, 0xeb, 0xff, 0x7a, 0xee, 0x85, 0x4a, 0xa7, 0x50, 0x80, 0xf0, 0xa7, 0x5c, 0x4a, 0x94, 0x2e, 0x5f, 0x05, 0x99, 0x3c, 0x52, 0x41, 0xe0, 0xcd, 0xb4, 0x63, 0xcf, 0x01, 0x43, 0xba, 0x9c, 0x83, 0xdc, 0x8f, 0x60, 0x3b, 0xf3, 0x5a, 0xb4, 0xb4, 0x7b, 0xae, 0xda, 0x0b, 0x90, 0x38, 0x75, 0xef, 0x81, 0x1d, 0x66, 0xd2, 0xf7, 0x57, 0x70, 0x36, 0xb3, 0xbf, 0xfc, 0x28, 0xaf, 0x71, 0x25, 0x85, 0x5b, 0x13, 0xfe, 0x1e, 0x7f, 0x5a, 0xb4, 0x3c, 0x30, 0x82, 0x05, 0x56, 0x30, 0x82, 0x04, 0x3e, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0xee, 0x2b, 0x3d, 0xeb, 0xd4, 0x21, 0xde, 0x14, 0xa8, 0x62, 0xac, 0x04, 0xf3, 0xdd, 0xc4, 0x01, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x81, 0xf3, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x45, 0x53, 0x31, 0x3b, 0x30, 0x39, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x32, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x69, 0x61, 0x20, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x61, 0x6e, 0x61, 0x20, 0x64, 0x65, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x63, 0x69, 0x6f, 0x20, 0x28, 0x4e, 0x49, 0x46, 0x20, 0x51, 0x2d, 0x30, 0x38, 0x30, 0x31, 0x31, 0x37, 0x36, 0x2d, 0x49, 0x29, 0x31, 0x28, 0x30, 0x26, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x1f, 0x53, 0x65, 0x72, 0x76, 0x65, 0x69, 0x73, 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x73, 0x20, 0x64, 0x65, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x63, 0x69, 0x6f, 0x31, 0x35, 0x30, 0x33, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x2c, 0x56, 0x65, 0x67, 0x65, 0x75, 0x20, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x63, 0x61, 0x74, 0x63, 0x65, 0x72, 0x74, 0x2e, 0x6e, 0x65, 0x74, 0x2f, 0x76, 0x65, 0x72, 0x61, 0x72, 0x72, 0x65, 0x6c, 0x20, 0x28, 0x63, 0x29, 0x30, 0x33, 0x31, 0x35, 0x30, 0x33, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x2c, 0x4a, 0x65, 0x72, 0x61, 0x72, 0x71, 0x75, 0x69, 0x61, 0x20, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x61, 0x74, 0x73, 0x20, 0x64, 0x65, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x63, 0x69, 0x6f, 0x20, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x61, 0x6e, 0x65, 0x73, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x06, 0x45, 0x43, 0x2d, 0x41, 0x43, 0x43, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x33, 0x30, 0x31, 0x30, 0x37, 0x32, 0x33, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x33, 0x31, 0x30, 0x31, 0x30, 0x37, 0x32, 0x32, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30, 0x81, 0xf3, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x45, 0x53, 0x31, 0x3b, 0x30, 0x39, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x32, 0x41, 0x67, 0x65, 0x6e, 0x63, 0x69, 0x61, 0x20, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x61, 0x6e, 0x61, 0x20, 0x64, 0x65, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x63, 0x69, 0x6f, 0x20, 0x28, 0x4e, 0x49, 0x46, 0x20, 0x51, 0x2d, 0x30, 0x38, 0x30, 0x31, 0x31, 0x37, 0x36, 0x2d, 0x49, 0x29, 0x31, 0x28, 0x30, 0x26, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x1f, 0x53, 0x65, 0x72, 0x76, 0x65, 0x69, 0x73, 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x73, 0x20, 0x64, 0x65, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x63, 0x69, 0x6f, 0x31, 0x35, 0x30, 0x33, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x2c, 0x56, 0x65, 0x67, 0x65, 0x75, 0x20, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x63, 0x61, 0x74, 0x63, 0x65, 0x72, 0x74, 0x2e, 0x6e, 0x65, 0x74, 0x2f, 0x76, 0x65, 0x72, 0x61, 0x72, 0x72, 0x65, 0x6c, 0x20, 0x28, 0x63, 0x29, 0x30, 0x33, 0x31, 0x35, 0x30, 0x33, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x2c, 0x4a, 0x65, 0x72, 0x61, 0x72, 0x71, 0x75, 0x69, 0x61, 0x20, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x61, 0x74, 0x73, 0x20, 0x64, 0x65, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x63, 0x69, 0x6f, 0x20, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x61, 0x6e, 0x65, 0x73, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x06, 0x45, 0x43, 0x2d, 0x41, 0x43, 0x43, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xb3, 0x22, 0xc7, 0x4f, 0xe2, 0x97, 0x42, 0x95, 0x88, 0x47, 0x83, 0x40, 0xf6, 0x1d, 0x17, 0xf3, 0x83, 0x73, 0x24, 0x1e, 0x51, 0xf3, 0x98, 0x8a, 0xc3, 0x92, 0xb8, 0xff, 0x40, 0x90, 0x05, 0x70, 0x87, 0x60, 0xc9, 0x00, 0xa9, 0xb5, 0x94, 0x65, 0x19, 0x22, 0x15, 0x17, 0xc2, 0x43, 0x6c, 0x66, 0x44, 0x9a, 0x0d, 0x04, 0x3e, 0x39, 0x6f, 0xa5, 0x4b, 0x7a, 0xaa, 0x63, 0xb7, 0x8a, 0x44, 0x9d, 0xd9, 0x63, 0x91, 0x84, 0x66, 0xe0, 0x28, 0x0f, 0xba, 0x42, 0xe3, 0x6e, 0x8e, 0xf7, 0x14, 0x27, 0x93, 0x69, 0xee, 0x91, 0x0e, 0xa3, 0x5f, 0x0e, 0xb1, 0xeb, 0x66, 0xa2, 0x72, 0x4f, 0x12, 0x13, 0x86, 0x65, 0x7a, 0x3e, 0xdb, 0x4f, 0x07, 0xf4, 0xa7, 0x09, 0x60, 0xda, 0x3a, 0x42, 0x99, 0xc7, 0xb2, 0x7f, 0xb3, 0x16, 0x95, 0x1c, 0xc7, 0xf9, 0x34, 0xb5, 0x94, 0x85, 0xd5, 0x99, 0x5e, 0xa0, 0x48, 0xa0, 0x7e, 0xe7, 0x17, 0x65, 0xb8, 0xa2, 0x75, 0xb8, 0x1e, 0xf3, 0xe5, 0x42, 0x7d, 0xaf, 0xed, 0xf3, 0x8a, 0x48, 0x64, 0x5d, 0x82, 0x14, 0x93, 0xd8, 0xc0, 0xe4, 0xff, 0xb3, 0x50, 0x72, 0xf2, 0x76, 0xf6, 0xb3, 0x5d, 0x42, 0x50, 0x79, 0xd0, 0x94, 0x3e, 0x6b, 0x0c, 0x00, 0xbe, 0xd8, 0x6b, 0x0e, 0x4e, 0x2a, 0xec, 0x3e, 0xd2, 0xcc, 0x82, 0xa2, 0x18, 0x65, 0x33, 0x13, 0x77, 0x9e, 0x9a, 0x5d, 0x1a, 0x13, 0xd8, 0xc3, 0xdb, 0x3d, 0xc8, 0x97, 0x7a, 0xee, 0x70, 0xed, 0xa7, 0xe6, 0x7c, 0xdb, 0x71, 0xcf, 0x2d, 0x94, 0x62, 0xdf, 0x6d, 0xd6, 0xf5, 0x38, 0xbe, 0x3f, 0xa5, 0x85, 0x0a, 0x19, 0xb8, 0xa8, 0xd8, 0x09, 0x75, 0x42, 0x70, 0xc4, 0xea, 0xef, 0xcb, 0x0e, 0xc8, 0x34, 0xa8, 0x12, 0x22, 0x98, 0x0c, 0xb8, 0x13, 0x94, 0xb6, 0x4b, 0xec, 0xf0, 0xd0, 0x90, 0xe7, 0x27, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x81, 0xe3, 0x30, 0x81, 0xe0, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x11, 0x04, 0x16, 0x30, 0x14, 0x81, 0x12, 0x65, 0x63, 0x5f, 0x61, 0x63, 0x63, 0x40, 0x63, 0x61, 0x74, 0x63, 0x65, 0x72, 0x74, 0x2e, 0x6e, 0x65, 0x74, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xa0, 0xc3, 0x8b, 0x44, 0xaa, 0x37, 0xa5, 0x45, 0xbf, 0x97, 0x80, 0x5a, 0xd1, 0xf1, 0x78, 0xa2, 0x9b, 0xe9, 0x5d, 0x8d, 0x30, 0x7f, 0x06, 0x03, 0x55, 0x1d, 0x20, 0x04, 0x78, 0x30, 0x76, 0x30, 0x74, 0x06, 0x0b, 0x2b, 0x06, 0x01, 0x04, 0x01, 0xf5, 0x78, 0x01, 0x03, 0x01, 0x0a, 0x30, 0x65, 0x30, 0x2c, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x01, 0x16, 0x20, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x63, 0x61, 0x74, 0x63, 0x65, 0x72, 0x74, 0x2e, 0x6e, 0x65, 0x74, 0x2f, 0x76, 0x65, 0x72, 0x61, 0x72, 0x72, 0x65, 0x6c, 0x30, 0x35, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x02, 0x30, 0x29, 0x1a, 0x27, 0x56, 0x65, 0x67, 0x65, 0x75, 0x20, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x63, 0x61, 0x74, 0x63, 0x65, 0x72, 0x74, 0x2e, 0x6e, 0x65, 0x74, 0x2f, 0x76, 0x65, 0x72, 0x61, 0x72, 0x72, 0x65, 0x6c, 0x20, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0xa0, 0x48, 0x5b, 0x82, 0x01, 0xf6, 0x4d, 0x48, 0xb8, 0x39, 0x55, 0x35, 0x9c, 0x80, 0x7a, 0x53, 0x99, 0xd5, 0x5a, 0xff, 0xb1, 0x71, 0x3b, 0xcc, 0x39, 0x09, 0x94, 0x5e, 0xd6, 0xda, 0xef, 0xbe, 0x01, 0x5b, 0x5d, 0xd3, 0x1e, 0xd8, 0xfd, 0x7d, 0x4f, 0xcd, 0xa0, 0x41, 0xe0, 0x34, 0x93, 0xbf, 0xcb, 0xe2, 0x86, 0x9c, 0x37, 0x92, 0x90, 0x56, 0x1c, 0xdc, 0xeb, 0x29, 0x05, 0xe5, 0xc4, 0x9e, 0xc7, 0x35, 0xdf, 0x8a, 0x0c, 0xcd, 0xc5, 0x21, 0x43, 0xe9, 0xaa, 0x88, 0xe5, 0x35, 0xc0, 0x19, 0x42, 0x63, 0x5a, 0x02, 0x5e, 0xa4, 0x48, 0x18, 0x3a, 0x85, 0x6f, 0xdc, 0x9d, 0xbc, 0x3f, 0x9d, 0x9c, 0xc1, 0x87, 0xb8, 0x7a, 0x61, 0x08, 0xe9, 0x77, 0x0b, 0x7f, 0x70, 0xab, 0x7a, 0xdd, 0xd9, 0x97, 0x2c, 0x64, 0x1e, 0x85, 0xbf, 0xbc, 0x74, 0x96, 0xa1, 0xc3, 0x7a, 0x12, 0xec, 0x0c, 0x1a, 0x6e, 0x83, 0x0c, 0x3c, 0xe8, 0x72, 0x46, 0x9f, 0xfb, 0x48, 0xd5, 0x5e, 0x97, 0xe6, 0xb1, 0xa1, 0xf8, 0xe4, 0xef, 0x46, 0x25, 0x94, 0x9c, 0x89, 0xdb, 0x69, 0x38, 0xbe, 0xec, 0x5c, 0x0e, 0x56, 0xc7, 0x65, 0x51, 0xe5, 0x50, 0x88, 0x88, 0xbf, 0x42, 0xd5, 0x2b, 0x3d, 0xe5, 0xf9, 0xba, 0x9e, 0x2e, 0xb3, 0xca, 0xf4, 0x73, 0x92, 0x02, 0x0b, 0xbe, 0x4c, 0x66, 0xeb, 0x20, 0xfe, 0xb9, 0xcb, 0xb5, 0x99, 0x7f, 0xe6, 0xb6, 0x13, 0xfa, 0xca, 0x4b, 0x4d, 0xd9, 0xee, 0x53, 0x46, 0x06, 0x3b, 0xc6, 0x4e, 0xad, 0x93, 0x5a, 0x81, 0x7e, 0x6c, 0x2a, 0x4b, 0x6a, 0x05, 0x45, 0x8c, 0xf2, 0x21, 0xa4, 0x31, 0x90, 0x87, 0x6c, 0x65, 0x9c, 0x9d, 0xa5, 0x60, 0x95, 0x3a, 0x52, 0x7f, 0xf5, 0xd1, 0xab, 0x08, 0x6e, 0xf3, 0xee, 0x5b, 0xf9, 0x88, 0x3d, 0x7e, 0xb8, 0x6f, 0x6e, 0x03, 0xe4, 0x42, 0x30, 0x82, 0x04, 0x2a, 0x30, 0x82, 0x03, 0x12, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x04, 0x38, 0x63, 0xde, 0xf8, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x81, 0xb4, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0b, 0x45, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x6e, 0x65, 0x74, 0x31, 0x40, 0x30, 0x3e, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x14, 0x37, 0x77, 0x77, 0x77, 0x2e, 0x65, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x6e, 0x65, 0x74, 0x2f, 0x43, 0x50, 0x53, 0x5f, 0x32, 0x30, 0x34, 0x38, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x20, 0x62, 0x79, 0x20, 0x72, 0x65, 0x66, 0x2e, 0x20, 0x28, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x20, 0x6c, 0x69, 0x61, 0x62, 0x2e, 0x29, 0x31, 0x25, 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x1c, 0x28, 0x63, 0x29, 0x20, 0x31, 0x39, 0x39, 0x39, 0x20, 0x45, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x6e, 0x65, 0x74, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x31, 0x33, 0x30, 0x31, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x2a, 0x45, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x6e, 0x65, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x28, 0x32, 0x30, 0x34, 0x38, 0x29, 0x30, 0x1e, 0x17, 0x0d, 0x39, 0x39, 0x31, 0x32, 0x32, 0x34, 0x31, 0x37, 0x35, 0x30, 0x35, 0x31, 0x5a, 0x17, 0x0d, 0x32, 0x39, 0x30, 0x37, 0x32, 0x34, 0x31, 0x34, 0x31, 0x35, 0x31, 0x32, 0x5a, 0x30, 0x81, 0xb4, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0b, 0x45, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x6e, 0x65, 0x74, 0x31, 0x40, 0x30, 0x3e, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x14, 0x37, 0x77, 0x77, 0x77, 0x2e, 0x65, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x6e, 0x65, 0x74, 0x2f, 0x43, 0x50, 0x53, 0x5f, 0x32, 0x30, 0x34, 0x38, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x20, 0x62, 0x79, 0x20, 0x72, 0x65, 0x66, 0x2e, 0x20, 0x28, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x20, 0x6c, 0x69, 0x61, 0x62, 0x2e, 0x29, 0x31, 0x25, 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x1c, 0x28, 0x63, 0x29, 0x20, 0x31, 0x39, 0x39, 0x39, 0x20, 0x45, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x6e, 0x65, 0x74, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x31, 0x33, 0x30, 0x31, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x2a, 0x45, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x6e, 0x65, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x28, 0x32, 0x30, 0x34, 0x38, 0x29, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xad, 0x4d, 0x4b, 0xa9, 0x12, 0x86, 0xb2, 0xea, 0xa3, 0x20, 0x07, 0x15, 0x16, 0x64, 0x2a, 0x2b, 0x4b, 0xd1, 0xbf, 0x0b, 0x4a, 0x4d, 0x8e, 0xed, 0x80, 0x76, 0xa5, 0x67, 0xb7, 0x78, 0x40, 0xc0, 0x73, 0x42, 0xc8, 0x68, 0xc0, 0xdb, 0x53, 0x2b, 0xdd, 0x5e, 0xb8, 0x76, 0x98, 0x35, 0x93, 0x8b, 0x1a, 0x9d, 0x7c, 0x13, 0x3a, 0x0e, 0x1f, 0x5b, 0xb7, 0x1e, 0xcf, 0xe5, 0x24, 0x14, 0x1e, 0xb1, 0x81, 0xa9, 0x8d, 0x7d, 0xb8, 0xcc, 0x6b, 0x4b, 0x03, 0xf1, 0x02, 0x0c, 0xdc, 0xab, 0xa5, 0x40, 0x24, 0x00, 0x7f, 0x74, 0x94, 0xa1, 0x9d, 0x08, 0x29, 0xb3, 0x88, 0x0b, 0xf5, 0x87, 0x77, 0x9d, 0x55, 0xcd, 0xe4, 0xc3, 0x7e, 0xd7, 0x6a, 0x64, 0xab, 0x85, 0x14, 0x86, 0x95, 0x5b, 0x97, 0x32, 0x50, 0x6f, 0x3d, 0xc8, 0xba, 0x66, 0x0c, 0xe3, 0xfc, 0xbd, 0xb8, 0x49, 0xc1, 0x76, 0x89, 0x49, 0x19, 0xfd, 0xc0, 0xa8, 0xbd, 0x89, 0xa3, 0x67, 0x2f, 0xc6, 0x9f, 0xbc, 0x71, 0x19, 0x60, 0xb8, 0x2d, 0xe9, 0x2c, 0xc9, 0x90, 0x76, 0x66, 0x7b, 0x94, 0xe2, 0xaf, 0x78, 0xd6, 0x65, 0x53, 0x5d, 0x3c, 0xd6, 0x9c, 0xb2, 0xcf, 0x29, 0x03, 0xf9, 0x2f, 0xa4, 0x50, 0xb2, 0xd4, 0x48, 0xce, 0x05, 0x32, 0x55, 0x8a, 0xfd, 0xb2, 0x64, 0x4c, 0x0e, 0xe4, 0x98, 0x07, 0x75, 0xdb, 0x7f, 0xdf, 0xb9, 0x08, 0x55, 0x60, 0x85, 0x30, 0x29, 0xf9, 0x7b, 0x48, 0xa4, 0x69, 0x86, 0xe3, 0x35, 0x3f, 0x1e, 0x86, 0x5d, 0x7a, 0x7a, 0x15, 0xbd, 0xef, 0x00, 0x8e, 0x15, 0x22, 0x54, 0x17, 0x00, 0x90, 0x26, 0x93, 0xbc, 0x0e, 0x49, 0x68, 0x91, 0xbf, 0xf8, 0x47, 0xd3, 0x9d, 0x95, 0x42, 0xc1, 0x0e, 0x4d, 0xdf, 0x6f, 0x26, 0xcf, 0xc3, 0x18, 0x21, 0x62, 0x66, 0x43, 0x70, 0xd6, 0xd5, 0xc0, 0x07, 0xe1, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x55, 0xe4, 0x81, 0xd1, 0x11, 0x80, 0xbe, 0xd8, 0x89, 0xb9, 0x08, 0xa3, 0x31, 0xf9, 0xa1, 0x24, 0x09, 0x16, 0xb9, 0x70, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x3b, 0x9b, 0x8f, 0x56, 0x9b, 0x30, 0xe7, 0x53, 0x99, 0x7c, 0x7a, 0x79, 0xa7, 0x4d, 0x97, 0xd7, 0x19, 0x95, 0x90, 0xfb, 0x06, 0x1f, 0xca, 0x33, 0x7c, 0x46, 0x63, 0x8f, 0x96, 0x66, 0x24, 0xfa, 0x40, 0x1b, 0x21, 0x27, 0xca, 0xe6, 0x72, 0x73, 0xf2, 0x4f, 0xfe, 0x31, 0x99, 0xfd, 0xc8, 0x0c, 0x4c, 0x68, 0x53, 0xc6, 0x80, 0x82, 0x13, 0x98, 0xfa, 0xb6, 0xad, 0xda, 0x5d, 0x3d, 0xf1, 0xce, 0x6e, 0xf6, 0x15, 0x11, 0x94, 0x82, 0x0c, 0xee, 0x3f, 0x95, 0xaf, 0x11, 0xab, 0x0f, 0xd7, 0x2f, 0xde, 0x1f, 0x03, 0x8f, 0x57, 0x2c, 0x1e, 0xc9, 0xbb, 0x9a, 0x1a, 0x44, 0x95, 0xeb, 0x18, 0x4f, 0xa6, 0x1f, 0xcd, 0x7d, 0x57, 0x10, 0x2f, 0x9b, 0x04, 0x09, 0x5a, 0x84, 0xb5, 0x6e, 0xd8, 0x1d, 0x3a, 0xe1, 0xd6, 0x9e, 0xd1, 0x6c, 0x79, 0x5e, 0x79, 0x1c, 0x14, 0xc5, 0xe3, 0xd0, 0x4c, 0x93, 0x3b, 0x65, 0x3c, 0xed, 0xdf, 0x3d, 0xbe, 0xa6, 0xe5, 0x95, 0x1a, 0xc3, 0xb5, 0x19, 0xc3, 0xbd, 0x5e, 0x5b, 0xbb, 0xff, 0x23, 0xef, 0x68, 0x19, 0xcb, 0x12, 0x93, 0x27, 0x5c, 0x03, 0x2d, 0x6f, 0x30, 0xd0, 0x1e, 0xb6, 0x1a, 0xac, 0xde, 0x5a, 0xf7, 0xd1, 0xaa, 0xa8, 0x27, 0xa6, 0xfe, 0x79, 0x81, 0xc4, 0x79, 0x99, 0x33, 0x57, 0xba, 0x12, 0xb0, 0xa9, 0xe0, 0x42, 0x6c, 0x93, 0xca, 0x56, 0xde, 0xfe, 0x6d, 0x84, 0x0b, 0x08, 0x8b, 0x7e, 0x8d, 0xea, 0xd7, 0x98, 0x21, 0xc6, 0xf3, 0xe7, 0x3c, 0x79, 0x2f, 0x5e, 0x9c, 0xd1, 0x4c, 0x15, 0x8d, 0xe1, 0xec, 0x22, 0x37, 0xcc, 0x9a, 0x43, 0x0b, 0x97, 0xdc, 0x80, 0x90, 0x8d, 0xb3, 0x67, 0x9b, 0x6f, 0x48, 0x08, 0x15, 0x56, 0xcf, 0xbf, 0xf1, 0x2b, 0x7c, 0x5e, 0x9a, 0x76, 0xe9, 0x59, 0x90, 0xc5, 0x7c, 0x83, 0x35, 0x11, 0x65, 0x51, 0x30, 0x82, 0x04, 0x32, 0x30, 0x82, 0x03, 0x1a, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x01, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x7b, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x42, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x12, 0x47, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x4d, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x74, 0x65, 0x72, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x07, 0x53, 0x61, 0x6c, 0x66, 0x6f, 0x72, 0x64, 0x31, 0x1a, 0x30, 0x18, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x11, 0x43, 0x6f, 0x6d, 0x6f, 0x64, 0x6f, 0x20, 0x43, 0x41, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x18, 0x41, 0x41, 0x41, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x34, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x32, 0x38, 0x31, 0x32, 0x33, 0x31, 0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30, 0x7b, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x42, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x12, 0x47, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x4d, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x74, 0x65, 0x72, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x07, 0x53, 0x61, 0x6c, 0x66, 0x6f, 0x72, 0x64, 0x31, 0x1a, 0x30, 0x18, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x11, 0x43, 0x6f, 0x6d, 0x6f, 0x64, 0x6f, 0x20, 0x43, 0x41, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x18, 0x41, 0x41, 0x41, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xbe, 0x40, 0x9d, 0xf4, 0x6e, 0xe1, 0xea, 0x76, 0x87, 0x1c, 0x4d, 0x45, 0x44, 0x8e, 0xbe, 0x46, 0xc8, 0x83, 0x06, 0x9d, 0xc1, 0x2a, 0xfe, 0x18, 0x1f, 0x8e, 0xe4, 0x02, 0xfa, 0xf3, 0xab, 0x5d, 0x50, 0x8a, 0x16, 0x31, 0x0b, 0x9a, 0x06, 0xd0, 0xc5, 0x70, 0x22, 0xcd, 0x49, 0x2d, 0x54, 0x63, 0xcc, 0xb6, 0x6e, 0x68, 0x46, 0x0b, 0x53, 0xea, 0xcb, 0x4c, 0x24, 0xc0, 0xbc, 0x72, 0x4e, 0xea, 0xf1, 0x15, 0xae, 0xf4, 0x54, 0x9a, 0x12, 0x0a, 0xc3, 0x7a, 0xb2, 0x33, 0x60, 0xe2, 0xda, 0x89, 0x55, 0xf3, 0x22, 0x58, 0xf3, 0xde, 0xdc, 0xcf, 0xef, 0x83, 0x86, 0xa2, 0x8c, 0x94, 0x4f, 0x9f, 0x68, 0xf2, 0x98, 0x90, 0x46, 0x84, 0x27, 0xc7, 0x76, 0xbf, 0xe3, 0xcc, 0x35, 0x2c, 0x8b, 0x5e, 0x07, 0x64, 0x65, 0x82, 0xc0, 0x48, 0xb0, 0xa8, 0x91, 0xf9, 0x61, 0x9f, 0x76, 0x20, 0x50, 0xa8, 0x91, 0xc7, 0x66, 0xb5, 0xeb, 0x78, 0x62, 0x03, 0x56, 0xf0, 0x8a, 0x1a, 0x13, 0xea, 0x31, 0xa3, 0x1e, 0xa0, 0x99, 0xfd, 0x38, 0xf6, 0xf6, 0x27, 0x32, 0x58, 0x6f, 0x07, 0xf5, 0x6b, 0xb8, 0xfb, 0x14, 0x2b, 0xaf, 0xb7, 0xaa, 0xcc, 0xd6, 0x63, 0x5f, 0x73, 0x8c, 0xda, 0x05, 0x99, 0xa8, 0x38, 0xa8, 0xcb, 0x17, 0x78, 0x36, 0x51, 0xac, 0xe9, 0x9e, 0xf4, 0x78, 0x3a, 0x8d, 0xcf, 0x0f, 0xd9, 0x42, 0xe2, 0x98, 0x0c, 0xab, 0x2f, 0x9f, 0x0e, 0x01, 0xde, 0xef, 0x9f, 0x99, 0x49, 0xf1, 0x2d, 0xdf, 0xac, 0x74, 0x4d, 0x1b, 0x98, 0xb5, 0x47, 0xc5, 0xe5, 0x29, 0xd1, 0xf9, 0x90, 0x18, 0xc7, 0x62, 0x9c, 0xbe, 0x83, 0xc7, 0x26, 0x7b, 0x3e, 0x8a, 0x25, 0xc7, 0xc0, 0xdd, 0x9d, 0xe6, 0x35, 0x68, 0x10, 0x20, 0x9d, 0x8f, 0xd8, 0xde, 0xd2, 0xc3, 0x84, 0x9c, 0x0d, 0x5e, 0xe8, 0x2f, 0xc9, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x81, 0xc0, 0x30, 0x81, 0xbd, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xa0, 0x11, 0x0a, 0x23, 0x3e, 0x96, 0xf1, 0x07, 0xec, 0xe2, 0xaf, 0x29, 0xef, 0x82, 0xa5, 0x7f, 0xd0, 0x30, 0xa4, 0xb4, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x7b, 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04, 0x74, 0x30, 0x72, 0x30, 0x38, 0xa0, 0x36, 0xa0, 0x34, 0x86, 0x32, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, 0x72, 0x6c, 0x2e, 0x63, 0x6f, 0x6d, 0x6f, 0x64, 0x6f, 0x63, 0x61, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x41, 0x41, 0x41, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x72, 0x6c, 0x30, 0x36, 0xa0, 0x34, 0xa0, 0x32, 0x86, 0x30, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, 0x72, 0x6c, 0x2e, 0x63, 0x6f, 0x6d, 0x6f, 0x64, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x2f, 0x41, 0x41, 0x41, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x72, 0x6c, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x08, 0x56, 0xfc, 0x02, 0xf0, 0x9b, 0xe8, 0xff, 0xa4, 0xfa, 0xd6, 0x7b, 0xc6, 0x44, 0x80, 0xce, 0x4f, 0xc4, 0xc5, 0xf6, 0x00, 0x58, 0xcc, 0xa6, 0xb6, 0xbc, 0x14, 0x49, 0x68, 0x04, 0x76, 0xe8, 0xe6, 0xee, 0x5d, 0xec, 0x02, 0x0f, 0x60, 0xd6, 0x8d, 0x50, 0x18, 0x4f, 0x26, 0x4e, 0x01, 0xe3, 0xe6, 0xb0, 0xa5, 0xee, 0xbf, 0xbc, 0x74, 0x54, 0x41, 0xbf, 0xfd, 0xfc, 0x12, 0xb8, 0xc7, 0x4f, 0x5a, 0xf4, 0x89, 0x60, 0x05, 0x7f, 0x60, 0xb7, 0x05, 0x4a, 0xf3, 0xf6, 0xf1, 0xc2, 0xbf, 0xc4, 0xb9, 0x74, 0x86, 0xb6, 0x2d, 0x7d, 0x6b, 0xcc, 0xd2, 0xf3, 0x46, 0xdd, 0x2f, 0xc6, 0xe0, 0x6a, 0xc3, 0xc3, 0x34, 0x03, 0x2c, 0x7d, 0x96, 0xdd, 0x5a, 0xc2, 0x0e, 0xa7, 0x0a, 0x99, 0xc1, 0x05, 0x8b, 0xab, 0x0c, 0x2f, 0xf3, 0x5c, 0x3a, 0xcf, 0x6c, 0x37, 0x55, 0x09, 0x87, 0xde, 0x53, 0x40, 0x6c, 0x58, 0xef, 0xfc, 0xb6, 0xab, 0x65, 0x6e, 0x04, 0xf6, 0x1b, 0xdc, 0x3c, 0xe0, 0x5a, 0x15, 0xc6, 0x9e, 0xd9, 0xf1, 0x59, 0x48, 0x30, 0x21, 0x65, 0x03, 0x6c, 0xec, 0xe9, 0x21, 0x73, 0xec, 0x9b, 0x03, 0xa1, 0xe0, 0x37, 0xad, 0xa0, 0x15, 0x18, 0x8f, 0xfa, 0xba, 0x02, 0xce, 0xa7, 0x2c, 0xa9, 0x10, 0x13, 0x2c, 0xd4, 0xe5, 0x08, 0x26, 0xab, 0x22, 0x97, 0x60, 0xf8, 0x90, 0x5e, 0x74, 0xd4, 0xa2, 0x9a, 0x53, 0xbd, 0xf2, 0xa9, 0x68, 0xe0, 0xa2, 0x6e, 0xc2, 0xd7, 0x6c, 0xb1, 0xa3, 0x0f, 0x9e, 0xbf, 0xeb, 0x68, 0xe7, 0x56, 0xf2, 0xae, 0xf2, 0xe3, 0x2b, 0x38, 0x3a, 0x09, 0x81, 0xb5, 0x6b, 0x85, 0xd7, 0xbe, 0x2d, 0xed, 0x3f, 0x1a, 0xb7, 0xb2, 0x63, 0xe2, 0xf5, 0x62, 0x2c, 0x82, 0xd4, 0x6a, 0x00, 0x41, 0x50, 0xf1, 0x39, 0x83, 0x9f, 0x95, 0xe9, 0x36, 0x96, 0x98, 0x6e, 0x30, 0x82, 0x07, 0xd3, 0x30, 0x82, 0x05, 0xbb, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x5e, 0xc3, 0xb7, 0xa6, 0x43, 0x7f, 0xa4, 0xe0, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x42, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x09, 0x41, 0x43, 0x43, 0x56, 0x52, 0x41, 0x49, 0x5a, 0x31, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x07, 0x50, 0x4b, 0x49, 0x41, 0x43, 0x43, 0x56, 0x31, 0x0d, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x04, 0x41, 0x43, 0x43, 0x56, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x45, 0x53, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x31, 0x30, 0x35, 0x30, 0x35, 0x30, 0x39, 0x33, 0x37, 0x33, 0x37, 0x5a, 0x17, 0x0d, 0x33, 0x30, 0x31, 0x32, 0x33, 0x31, 0x30, 0x39, 0x33, 0x37, 0x33, 0x37, 0x5a, 0x30, 0x42, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x09, 0x41, 0x43, 0x43, 0x56, 0x52, 0x41, 0x49, 0x5a, 0x31, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x07, 0x50, 0x4b, 0x49, 0x41, 0x43, 0x43, 0x56, 0x31, 0x0d, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x04, 0x41, 0x43, 0x43, 0x56, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x45, 0x53, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0x9b, 0xa9, 0xab, 0xbf, 0x61, 0x4a, 0x97, 0xaf, 0x2f, 0x97, 0x66, 0x9a, 0x74, 0x5f, 0xd0, 0xd9, 0x96, 0xfd, 0xcf, 0xe2, 0xe4, 0x66, 0xef, 0x1f, 0x1f, 0x47, 0x33, 0xc2, 0x44, 0xa3, 0xdf, 0x9a, 0xde, 0x1f, 0xb5, 0x54, 0xdd, 0x15, 0x7c, 0x69, 0x35, 0x11, 0x6f, 0xbb, 0xc8, 0x0c, 0x8e, 0x6a, 0x18, 0x1e, 0xd8, 0x8f, 0xd9, 0x16, 0xbc, 0x10, 0x48, 0x36, 0x5c, 0xf0, 0x63, 0xb3, 0x90, 0x5a, 0x5c, 0x24, 0x37, 0xd7, 0xa3, 0xd6, 0xcb, 0x09, 0x71, 0xb9, 0xf1, 0x01, 0x72, 0x84, 0xb0, 0x7d, 0xdb, 0x4d, 0x80, 0xcd, 0xfc, 0xd3, 0x6f, 0xc9, 0xf8, 0xda, 0xb6, 0x0e, 0x82, 0xd2, 0x45, 0x85, 0xa8, 0x1b, 0x68, 0xa8, 0x3d, 0xe8, 0xf4, 0x44, 0x6c, 0xbd, 0xa1, 0xc2, 0xcb, 0x03, 0xbe, 0x8c, 0x3e, 0x13, 0x00, 0x84, 0xdf, 0x4a, 0x48, 0xc0, 0xe3, 0x22, 0x0a, 0xe8, 0xe9, 0x37, 0xa7, 0x18, 0x4c, 0xb1, 0x09, 0x0d, 0x23, 0x56, 0x7f, 0x04, 0x4d, 0xd9, 0x17, 0x84, 0x18, 0xa5, 0xc8, 0xda, 0x40, 0x94, 0x73, 0xeb, 0xce, 0x0e, 0x57, 0x3c, 0x03, 0x81, 0x3a, 0x9d, 0x0a, 0xa1, 0x57, 0x43, 0x69, 0xac, 0x57, 0x6d, 0x79, 0x90, 0x78, 0xe5, 0xb5, 0xb4, 0x3b, 0xd8, 0xbc, 0x4c, 0x8d, 0x28, 0xa1, 0xa7, 0xa3, 0xa7, 0xba, 0x02, 0x4e, 0x25, 0xd1, 0x2a, 0xae, 0xed, 0xae, 0x03, 0x22, 0xb8, 0x6b, 0x20, 0x0f, 0x30, 0x28, 0x54, 0x95, 0x7f, 0xe0, 0xee, 0xce, 0x0a, 0x66, 0x9d, 0xd1, 0x40, 0x2d, 0x6e, 0x22, 0xaf, 0x9d, 0x1a, 0xc1, 0x05, 0x19, 0xd2, 0x6f, 0xc0, 0xf2, 0x9f, 0xf8, 0x7b, 0xb3, 0x02, 0x42, 0xfb, 0x50, 0xa9, 0x1d, 0x2d, 0x93, 0x0f, 0x23, 0xab, 0xc6, 0xc1, 0x0f, 0x92, 0xff, 0xd0, 0xa2, 0x15, 0xf5, 0x53, 0x09, 0x71, 0x1c, 0xff, 0x45, 0x13, 0x84, 0xe6, 0x26, 0x5e, 0xf8, 0xe0, 0x88, 0x1c, 0x0a, 0xfc, 0x16, 0xb6, 0xa8, 0x73, 0x06, 0xb8, 0xf0, 0x63, 0x84, 0x02, 0xa0, 0xc6, 0x5a, 0xec, 0xe7, 0x74, 0xdf, 0x70, 0xae, 0xa3, 0x83, 0x25, 0xea, 0xd6, 0xc7, 0x97, 0x87, 0x93, 0xa7, 0xc6, 0x8a, 0x8a, 0x33, 0x97, 0x60, 0x37, 0x10, 0x3e, 0x97, 0x3e, 0x6e, 0x29, 0x15, 0xd6, 0xa1, 0x0f, 0xd1, 0x88, 0x2c, 0x12, 0x9f, 0x6f, 0xaa, 0xa4, 0xc6, 0x42, 0xeb, 0x41, 0xa2, 0xe3, 0x95, 0x43, 0xd3, 0x01, 0x85, 0x6d, 0x8e, 0xbb, 0x3b, 0xf3, 0x23, 0x36, 0xc7, 0xfe, 0x3b, 0xe0, 0xa1, 0x25, 0x07, 0x48, 0xab, 0xc9, 0x89, 0x74, 0xff, 0x08, 0x8f, 0x80, 0xbf, 0xc0, 0x96, 0x65, 0xf3, 0xee, 0xec, 0x4b, 0x68, 0xbd, 0x9d, 0x88, 0xc3, 0x31, 0xb3, 0x40, 0xf1, 0xe8, 0xcf, 0xf6, 0x38, 0xbb, 0x9c, 0xe4, 0xd1, 0x7f, 0xd4, 0xe5, 0x58, 0x9b, 0x7c, 0xfa, 0xd4, 0xf3, 0x0e, 0x9b, 0x75, 0x91, 0xe4, 0xba, 0x52, 0x2e, 0x19, 0x7e, 0xd1, 0xf5, 0xcd, 0x5a, 0x19, 0xfc, 0xba, 0x06, 0xf6, 0xfb, 0x52, 0xa8, 0x4b, 0x99, 0x04, 0xdd, 0xf8, 0xf9, 0xb4, 0x8b, 0x50, 0xa3, 0x4e, 0x62, 0x89, 0xf0, 0x87, 0x24, 0xfa, 0x83, 0x42, 0xc1, 0x87, 0xfa, 0xd5, 0x2d, 0x29, 0x2a, 0x5a, 0x71, 0x7a, 0x64, 0x6a, 0xd7, 0x27, 0x60, 0x63, 0x0d, 0xdb, 0xce, 0x49, 0xf5, 0x8d, 0x1f, 0x90, 0x89, 0x32, 0x17, 0xf8, 0x73, 0x43, 0xb8, 0xd2, 0x5a, 0x93, 0x86, 0x61, 0xd6, 0xe1, 0x75, 0x0a, 0xea, 0x79, 0x66, 0x76, 0x88, 0x4f, 0x71, 0xeb, 0x04, 0x25, 0xd6, 0x0a, 0x5a, 0x7a, 0x93, 0xe5, 0xb9, 0x4b, 0x17, 0x40, 0x0f, 0xb1, 0xb6, 0xb9, 0xf5, 0xde, 0x4f, 0xdc, 0xe0, 0xb3, 0xac, 0x3b, 0x11, 0x70, 0x60, 0x84, 0x4a, 0x43, 0x6e, 0x99, 0x20, 0xc0, 0x29, 0x71, 0x0a, 0xc0, 0x65, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x82, 0x02, 0xcb, 0x30, 0x82, 0x02, 0xc7, 0x30, 0x7d, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 0x71, 0x30, 0x6f, 0x30, 0x4c, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0x40, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x61, 0x63, 0x63, 0x76, 0x2e, 0x65, 0x73, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x6f, 0x73, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x64, 0x6f, 0x73, 0x2f, 0x72, 0x61, 0x69, 0x7a, 0x61, 0x63, 0x63, 0x76, 0x31, 0x2e, 0x63, 0x72, 0x74, 0x30, 0x1f, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x01, 0x86, 0x13, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6f, 0x63, 0x73, 0x70, 0x2e, 0x61, 0x63, 0x63, 0x76, 0x2e, 0x65, 0x73, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xd2, 0x87, 0xb4, 0xe3, 0xdf, 0x37, 0x27, 0x93, 0x55, 0xf6, 0x56, 0xea, 0x81, 0xe5, 0x36, 0xcc, 0x8c, 0x1e, 0x3f, 0xbd, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xd2, 0x87, 0xb4, 0xe3, 0xdf, 0x37, 0x27, 0x93, 0x55, 0xf6, 0x56, 0xea, 0x81, 0xe5, 0x36, 0xcc, 0x8c, 0x1e, 0x3f, 0xbd, 0x30, 0x82, 0x01, 0x73, 0x06, 0x03, 0x55, 0x1d, 0x20, 0x04, 0x82, 0x01, 0x6a, 0x30, 0x82, 0x01, 0x66, 0x30, 0x82, 0x01, 0x62, 0x06, 0x04, 0x55, 0x1d, 0x20, 0x00, 0x30, 0x82, 0x01, 0x58, 0x30, 0x82, 0x01, 0x22, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x02, 0x30, 0x82, 0x01, 0x14, 0x1e, 0x82, 0x01, 0x10, 0x00, 0x41, 0x00, 0x75, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x69, 0x00, 0x64, 0x00, 0x61, 0x00, 0x64, 0x00, 0x20, 0x00, 0x64, 0x00, 0x65, 0x00, 0x20, 0x00, 0x43, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x69, 0x00, 0x66, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x63, 0x00, 0x69, 0x00, 0xf3, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x52, 0x00, 0x61, 0x00, 0xed, 0x00, 0x7a, 0x00, 0x20, 0x00, 0x64, 0x00, 0x65, 0x00, 0x20, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x20, 0x00, 0x41, 0x00, 0x43, 0x00, 0x43, 0x00, 0x56, 0x00, 0x20, 0x00, 0x28, 0x00, 0x41, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x69, 0x00, 0x61, 0x00, 0x20, 0x00, 0x64, 0x00, 0x65, 0x00, 0x20, 0x00, 0x54, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6e, 0x00, 0x6f, 0x00, 0x6c, 0x00, 0x6f, 0x00, 0x67, 0x00, 0xed, 0x00, 0x61, 0x00, 0x20, 0x00, 0x79, 0x00, 0x20, 0x00, 0x43, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x69, 0x00, 0x66, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x63, 0x00, 0x69, 0x00, 0xf3, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x45, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x72, 0x00, 0xf3, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x2c, 0x00, 0x20, 0x00, 0x43, 0x00, 0x49, 0x00, 0x46, 0x00, 0x20, 0x00, 0x51, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x45, 0x00, 0x29, 0x00, 0x2e, 0x00, 0x20, 0x00, 0x43, 0x00, 0x50, 0x00, 0x53, 0x00, 0x20, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x68, 0x00, 0x74, 0x00, 0x74, 0x00, 0x70, 0x00, 0x3a, 0x00, 0x2f, 0x00, 0x2f, 0x00, 0x77, 0x00, 0x77, 0x00, 0x77, 0x00, 0x2e, 0x00, 0x61, 0x00, 0x63, 0x00, 0x63, 0x00, 0x76, 0x00, 0x2e, 0x00, 0x65, 0x00, 0x73, 0x30, 0x30, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x01, 0x16, 0x24, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x61, 0x63, 0x63, 0x76, 0x2e, 0x65, 0x73, 0x2f, 0x6c, 0x65, 0x67, 0x69, 0x73, 0x6c, 0x61, 0x63, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x2e, 0x68, 0x74, 0x6d, 0x30, 0x55, 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04, 0x4e, 0x30, 0x4c, 0x30, 0x4a, 0xa0, 0x48, 0xa0, 0x46, 0x86, 0x44, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x61, 0x63, 0x63, 0x76, 0x2e, 0x65, 0x73, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x6f, 0x73, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x64, 0x6f, 0x73, 0x2f, 0x72, 0x61, 0x69, 0x7a, 0x61, 0x63, 0x63, 0x76, 0x31, 0x5f, 0x64, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x6c, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x17, 0x06, 0x03, 0x55, 0x1d, 0x11, 0x04, 0x10, 0x30, 0x0e, 0x81, 0x0c, 0x61, 0x63, 0x63, 0x76, 0x40, 0x61, 0x63, 0x63, 0x76, 0x2e, 0x65, 0x73, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x97, 0x31, 0x02, 0x9f, 0xe7, 0xfd, 0x43, 0x67, 0x48, 0x44, 0x14, 0xe4, 0x29, 0x87, 0xed, 0x4c, 0x28, 0x66, 0xd0, 0x8f, 0x35, 0xda, 0x4d, 0x61, 0xb7, 0x4a, 0x97, 0x4d, 0xb5, 0xdb, 0x90, 0xe0, 0x05, 0x2e, 0x0e, 0xc6, 0x79, 0xd0, 0xf2, 0x97, 0x69, 0x0f, 0xbd, 0x04, 0x47, 0xd9, 0xbe, 0xdb, 0xb5, 0x29, 0xda, 0x9b, 0xd9, 0xae, 0xa9, 0x99, 0xd5, 0xd3, 0x3c, 0x30, 0x93, 0xf5, 0x8d, 0xa1, 0xa8, 0xfc, 0x06, 0x8d, 0x44, 0xf4, 0xca, 0x16, 0x95, 0x7c, 0x33, 0xdc, 0x62, 0x8b, 0xa8, 0x37, 0xf8, 0x27, 0xd8, 0x09, 0x2d, 0x1b, 0xef, 0xc8, 0x14, 0x27, 0x20, 0xa9, 0x64, 0x44, 0xff, 0x2e, 0xd6, 0x75, 0xaa, 0x6c, 0x4d, 0x60, 0x40, 0x19, 0x49, 0x43, 0x54, 0x63, 0xda, 0xe2, 0xcc, 0xba, 0x66, 0xe5, 0x4f, 0x44, 0x7a, 0x5b, 0xd9, 0x6a, 0x81, 0x2b, 0x40, 0xd5, 0x7f, 0xf9, 0x01, 0x27, 0x58, 0x2c, 0xc8, 0xed, 0x48, 0x91, 0x7c, 0x3f, 0xa6, 0x00, 0xcf, 0xc4, 0x29, 0x73, 0x11, 0x36, 0xde, 0x86, 0x19, 0x3e, 0x9d, 0xee, 0x19, 0x8a, 0x1b, 0xd5, 0xb0, 0xed, 0x8e, 0x3d, 0x9c, 0x2a, 0xc0, 0x0d, 0xd8, 0x3d, 0x66, 0xe3, 0x3c, 0x0d, 0xbd, 0xd5, 0x94, 0x5c, 0xe2, 0xe2, 0xa7, 0x35, 0x1b, 0x04, 0x00, 0xf6, 0x3f, 0x5a, 0x8d, 0xea, 0x43, 0xbd, 0x5f, 0x89, 0x1d, 0xa9, 0xc1, 0xb0, 0xcc, 0x99, 0xe2, 0x4d, 0x00, 0x0a, 0xda, 0xc9, 0x27, 0x5b, 0xe7, 0x13, 0x90, 0x5c, 0xe4, 0xf5, 0x33, 0xa2, 0x55, 0x6d, 0xdc, 0xe0, 0x09, 0x4d, 0x2f, 0xb1, 0x26, 0x5b, 0x27, 0x75, 0x00, 0x09, 0xc4, 0x62, 0x77, 0x29, 0x08, 0x5f, 0x9e, 0x59, 0xac, 0xb6, 0x7e, 0xad, 0x9f, 0x54, 0x30, 0x22, 0x03, 0xc1, 0x1e, 0x71, 0x64, 0xfe, 0xf9, 0x38, 0x0a, 0x96, 0x18, 0xdd, 0x02, 0x14, 0xac, 0x23, 0xcb, 0x06, 0x1c, 0x1e, 0xa4, 0x7d, 0x8d, 0x0d, 0xde, 0x27, 0x41, 0xe8, 0xad, 0xda, 0x15, 0xb7, 0xb0, 0x23, 0xdd, 0x2b, 0xa8, 0xd3, 0xda, 0x25, 0x87, 0xed, 0xe8, 0x55, 0x44, 0x4d, 0x88, 0xf4, 0x36, 0x7e, 0x84, 0x9a, 0x78, 0xac, 0xf7, 0x0e, 0x56, 0x49, 0x0e, 0xd6, 0x33, 0x25, 0xd6, 0x84, 0x50, 0x42, 0x6c, 0x20, 0x12, 0x1d, 0x2a, 0xd5, 0xbe, 0xbc, 0xf2, 0x70, 0x81, 0xa4, 0x70, 0x60, 0xbe, 0x05, 0xb5, 0x9b, 0x9e, 0x04, 0x44, 0xbe, 0x61, 0x23, 0xac, 0xe9, 0xa5, 0x24, 0x8c, 0x11, 0x80, 0x94, 0x5a, 0xa2, 0xa2, 0xb9, 0x49, 0xd2, 0xc1, 0xdc, 0xd1, 0xa7, 0xed, 0x31, 0x11, 0x2c, 0x9e, 0x19, 0xa6, 0xee, 0xe1, 0x55, 0xe1, 0xc0, 0xea, 0xcf, 0x0d, 0x84, 0xe4, 0x17, 0xb7, 0xa2, 0x7c, 0xa5, 0xde, 0x55, 0x25, 0x06, 0xee, 0xcc, 0xc0, 0x87, 0x5c, 0x40, 0xda, 0xcc, 0x95, 0x3f, 0x55, 0xe0, 0x35, 0xc7, 0xb8, 0x84, 0xbe, 0xb4, 0x5d, 0xcd, 0x7a, 0x83, 0x01, 0x72, 0xee, 0x87, 0xe6, 0x5f, 0x1d, 0xae, 0xb5, 0x85, 0xc6, 0x26, 0xdf, 0xe6, 0xc1, 0x9a, 0xe9, 0x1e, 0x02, 0x47, 0x9f, 0x2a, 0xa8, 0x6d, 0xa9, 0x5b, 0xcf, 0xec, 0x45, 0x77, 0x7f, 0x98, 0x27, 0x9a, 0x32, 0x5d, 0x2a, 0xe3, 0x84, 0xee, 0xc5, 0x98, 0x66, 0x2f, 0x96, 0x20, 0x1d, 0xdd, 0xd8, 0xc3, 0x27, 0xd7, 0xb0, 0xf9, 0xfe, 0xd9, 0x7d, 0xcd, 0xd0, 0x9f, 0x8f, 0x0b, 0x14, 0x58, 0x51, 0x9f, 0x2f, 0x8b, 0xc3, 0x38, 0x2d, 0xde, 0xe8, 0x8f, 0xd6, 0x8d, 0x87, 0xa4, 0xf5, 0x56, 0x43, 0x16, 0x99, 0x2c, 0xf4, 0xa4, 0x56, 0xb4, 0x34, 0xb8, 0x61, 0x37, 0xc9, 0xc2, 0x58, 0x80, 0x1b, 0xa0, 0x97, 0xa1, 0xfc, 0x59, 0x8d, 0xe9, 0x11, 0xf6, 0xd1, 0x0f, 0x4b, 0x55, 0x34, 0x46, 0x2a, 0x8b, 0x86, 0x3b, 0x30, 0x82, 0x05, 0xbb, 0x30, 0x82, 0x03, 0xa3, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x57, 0x0a, 0x11, 0x97, 0x42, 0xc4, 0xe3, 0xcc, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x6b, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x49, 0x54, 0x31, 0x0e, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x05, 0x4d, 0x69, 0x6c, 0x61, 0x6e, 0x31, 0x23, 0x30, 0x21, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x1a, 0x41, 0x63, 0x74, 0x61, 0x6c, 0x69, 0x73, 0x20, 0x53, 0x2e, 0x70, 0x2e, 0x41, 0x2e, 0x2f, 0x30, 0x33, 0x33, 0x35, 0x38, 0x35, 0x32, 0x30, 0x39, 0x36, 0x37, 0x31, 0x27, 0x30, 0x25, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x1e, 0x41, 0x63, 0x74, 0x61, 0x6c, 0x69, 0x73, 0x20, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x31, 0x30, 0x39, 0x32, 0x32, 0x31, 0x31, 0x32, 0x32, 0x30, 0x32, 0x5a, 0x17, 0x0d, 0x33, 0x30, 0x30, 0x39, 0x32, 0x32, 0x31, 0x31, 0x32, 0x32, 0x30, 0x32, 0x5a, 0x30, 0x6b, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x49, 0x54, 0x31, 0x0e, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x05, 0x4d, 0x69, 0x6c, 0x61, 0x6e, 0x31, 0x23, 0x30, 0x21, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x1a, 0x41, 0x63, 0x74, 0x61, 0x6c, 0x69, 0x73, 0x20, 0x53, 0x2e, 0x70, 0x2e, 0x41, 0x2e, 0x2f, 0x30, 0x33, 0x33, 0x35, 0x38, 0x35, 0x32, 0x30, 0x39, 0x36, 0x37, 0x31, 0x27, 0x30, 0x25, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x1e, 0x41, 0x63, 0x74, 0x61, 0x6c, 0x69, 0x73, 0x20, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xa7, 0xc6, 0xc4, 0xa5, 0x29, 0xa4, 0x2c, 0xef, 0xe5, 0x18, 0xc5, 0xb0, 0x50, 0xa3, 0x6f, 0x51, 0x3b, 0x9f, 0x0a, 0x5a, 0xc9, 0xc2, 0x48, 0x38, 0x0a, 0xc2, 0x1c, 0xa0, 0x18, 0x7f, 0x91, 0xb5, 0x87, 0xb9, 0x40, 0x3f, 0xdd, 0x1d, 0x68, 0x1f, 0x08, 0x83, 0xd5, 0x2d, 0x1e, 0x88, 0xa0, 0xf8, 0x8f, 0x56, 0x8f, 0x6d, 0x99, 0x02, 0x92, 0x90, 0x16, 0xd5, 0x5f, 0x08, 0x6c, 0x89, 0xd7, 0xe1, 0xac, 0xbc, 0x20, 0xc2, 0xb1, 0xe0, 0x83, 0x51, 0x8a, 0x69, 0x4d, 0x00, 0x96, 0x5a, 0x6f, 0x2f, 0xc0, 0x44, 0x7e, 0xa3, 0x0e, 0xe4, 0x91, 0xcd, 0x58, 0xee, 0xdc, 0xfb, 0xc7, 0x1e, 0x45, 0x47, 0xdd, 0x27, 0xb9, 0x08, 0x01, 0x9f, 0xa6, 0x21, 0x1d, 0xf5, 0x41, 0x2d, 0x2f, 0x4c, 0xfd, 0x28, 0xad, 0xe0, 0x8a, 0xad, 0x22, 0xb4, 0x56, 0x65, 0x8e, 0x86, 0x54, 0x8f, 0x93, 0x43, 0x29, 0xde, 0x39, 0x46, 0x78, 0xa3, 0x30, 0x23, 0xba, 0xcd, 0xf0, 0x7d, 0x13, 0x57, 0xc0, 0x5d, 0xd2, 0x83, 0x6b, 0x48, 0x4c, 0xc4, 0xab, 0x9f, 0x80, 0x5a, 0x5b, 0x3a, 0xbd, 0xc9, 0xa7, 0x22, 0x3f, 0x80, 0x27, 0x33, 0x5b, 0x0e, 0xb7, 0x8a, 0x0c, 0x5d, 0x07, 0x37, 0x08, 0xcb, 0x6c, 0xd2, 0x7a, 0x47, 0x22, 0x44, 0x35, 0xc5, 0xcc, 0xcc, 0x2e, 0x8e, 0xdd, 0x2a, 0xed, 0xb7, 0x7d, 0x66, 0x0d, 0x5f, 0x61, 0x51, 0x22, 0x55, 0x1b, 0xe3, 0x46, 0xe3, 0xe3, 0x3d, 0xd0, 0x35, 0x62, 0x9a, 0xdb, 0xaf, 0x14, 0xc8, 0x5b, 0xa1, 0xcc, 0x89, 0x1b, 0xe1, 0x30, 0x26, 0xfc, 0xa0, 0x9b, 0x1f, 0x81, 0xa7, 0x47, 0x1f, 0x04, 0xeb, 0xa3, 0x39, 0x92, 0x06, 0x9f, 0x99, 0xd3, 0xbf, 0xd3, 0xea, 0x4f, 0x50, 0x9c, 0x19, 0xfe, 0x96, 0x87, 0x1e, 0x3c, 0x65, 0xf6, 0xa3, 0x18, 0x24, 0x83, 0x86, 0x10, 0xe7, 0x54, 0x3e, 0xa8, 0x3a, 0x76, 0x24, 0x4f, 0x81, 0x21, 0xc5, 0xe3, 0x0f, 0x02, 0xf8, 0x93, 0x94, 0x47, 0x20, 0xbb, 0xfe, 0xd4, 0x0e, 0xd3, 0x68, 0xb9, 0xdd, 0xc4, 0x7a, 0x84, 0x82, 0xe3, 0x53, 0x54, 0x79, 0xdd, 0xdb, 0x9c, 0xd2, 0xf2, 0x07, 0x9b, 0x2e, 0xb6, 0xbc, 0x3e, 0xed, 0x85, 0x6d, 0xef, 0x25, 0x11, 0xf2, 0x97, 0x1a, 0x42, 0x61, 0xf7, 0x4a, 0x97, 0xe8, 0x8b, 0xb1, 0x10, 0x07, 0xfa, 0x65, 0x81, 0xb2, 0xa2, 0x39, 0xcf, 0xf7, 0x3c, 0xff, 0x18, 0xfb, 0xc6, 0xf1, 0x5a, 0x8b, 0x59, 0xe2, 0x02, 0xac, 0x7b, 0x92, 0xd0, 0x4e, 0x14, 0x4f, 0x59, 0x45, 0xf6, 0x0c, 0x5e, 0x28, 0x5f, 0xb0, 0xe8, 0x3f, 0x45, 0xcf, 0xcf, 0xaf, 0x9b, 0x6f, 0xfb, 0x84, 0xd3, 0x77, 0x5a, 0x95, 0x6f, 0xac, 0x94, 0x84, 0x9e, 0xee, 0xbc, 0xc0, 0x4a, 0x8f, 0x4a, 0x93, 0xf8, 0x44, 0x21, 0xe2, 0x31, 0x45, 0x61, 0x50, 0x4e, 0x10, 0xd8, 0xe3, 0x35, 0x7c, 0x4c, 0x19, 0xb4, 0xde, 0x05, 0xbf, 0xa3, 0x06, 0x9f, 0xc8, 0xb5, 0xcd, 0xe4, 0x1f, 0xd7, 0x17, 0x06, 0x0d, 0x7a, 0x95, 0x74, 0x55, 0x0d, 0x68, 0x1a, 0xfc, 0x10, 0x1b, 0x62, 0x64, 0x9d, 0x6d, 0xe0, 0x95, 0xa0, 0xc3, 0x94, 0x07, 0x57, 0x0d, 0x14, 0xe6, 0xbd, 0x05, 0xfb, 0xb8, 0x9f, 0xe6, 0xdf, 0x8b, 0xe2, 0xc6, 0xe7, 0x7e, 0x96, 0xf6, 0x53, 0xc5, 0x80, 0x34, 0x50, 0x28, 0x58, 0xf0, 0x12, 0x50, 0x71, 0x17, 0x30, 0xba, 0xe6, 0x78, 0x63, 0xbc, 0xf4, 0xb2, 0xad, 0x9b, 0x2b, 0xb2, 0xfe, 0xe1, 0x39, 0x8c, 0x5e, 0xba, 0x0b, 0x20, 0x94, 0xde, 0x7b, 0x83, 0xb8, 0xff, 0xe3, 0x56, 0x8d, 0xb7, 0x11, 0xe9, 0x3b, 0x8c, 0xf2, 0xb1, 0xc1, 0x5d, 0x9d, 0xa4, 0x0b, 0x4c, 0x2b, 0xd9, 0xb2, 0x18, 0xf5, 0xb5, 0x9f, 0x4b, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x63, 0x30, 0x61, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x52, 0xd8, 0x88, 0x3a, 0xc8, 0x9f, 0x78, 0x66, 0xed, 0x89, 0xf3, 0x7b, 0x38, 0x70, 0x94, 0xc9, 0x02, 0x02, 0x36, 0xd0, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x52, 0xd8, 0x88, 0x3a, 0xc8, 0x9f, 0x78, 0x66, 0xed, 0x89, 0xf3, 0x7b, 0x38, 0x70, 0x94, 0xc9, 0x02, 0x02, 0x36, 0xd0, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x0b, 0x7b, 0x72, 0x87, 0xc0, 0x60, 0xa6, 0x49, 0x4c, 0x88, 0x58, 0xe6, 0x1d, 0x88, 0xf7, 0x14, 0x64, 0x48, 0xa6, 0xd8, 0x58, 0x0a, 0x0e, 0x4f, 0x13, 0x35, 0xdf, 0x35, 0x1d, 0xd4, 0xed, 0x06, 0x31, 0xc8, 0x81, 0x3e, 0x6a, 0xd5, 0xdd, 0x3b, 0x1a, 0x32, 0xee, 0x90, 0x3d, 0x11, 0xd2, 0x2e, 0xf4, 0x8e, 0xc3, 0x63, 0x2e, 0x23, 0x66, 0xb0, 0x67, 0xbe, 0x6f, 0xb6, 0xc0, 0x13, 0x39, 0x60, 0xaa, 0xa2, 0x34, 0x25, 0x93, 0x75, 0x52, 0xde, 0xa7, 0x9d, 0xad, 0x0e, 0x87, 0x89, 0x52, 0x71, 0x6a, 0x16, 0x3c, 0x19, 0x1d, 0x83, 0xf8, 0x9a, 0x29, 0x65, 0xbe, 0xf4, 0x3f, 0x9a, 0xd9, 0xf0, 0xf3, 0x5a, 0x87, 0x21, 0x71, 0x80, 0x4d, 0xcb, 0xe0, 0x38, 0x9b, 0x3f, 0xbb, 0xfa, 0xe0, 0x30, 0x4d, 0xcf, 0x86, 0xd3, 0x65, 0x10, 0x19, 0x18, 0xd1, 0x97, 0x02, 0xb1, 0x2b, 0x72, 0x42, 0x68, 0xac, 0xa0, 0xbd, 0x4e, 0x5a, 0xda, 0x18, 0xbf, 0x6b, 0x98, 0x81, 0xd0, 0xfd, 0x9a, 0xbe, 0x5e, 0x15, 0x48, 0xcd, 0x11, 0x15, 0xb9, 0xc0, 0x29, 0x5c, 0xb4, 0xe8, 0x88, 0xf7, 0x3e, 0x36, 0xae, 0xb7, 0x62, 0xfd, 0x1e, 0x62, 0xde, 0x70, 0x78, 0x10, 0x1c, 0x48, 0x5b, 0xda, 0xbc, 0xa4, 0x38, 0xba, 0x67, 0xed, 0x55, 0x3e, 0x5e, 0x57, 0xdf, 0xd4, 0x03, 0x40, 0x4c, 0x81, 0xa4, 0xd2, 0x4f, 0x63, 0xa7, 0x09, 0x42, 0x09, 0x14, 0xfc, 0x00, 0xa9, 0xc2, 0x80, 0x73, 0x4f, 0x2e, 0xc0, 0x40, 0xd9, 0x11, 0x7b, 0x48, 0xea, 0x7a, 0x02, 0xc0, 0xd3, 0xeb, 0x28, 0x01, 0x26, 0x58, 0x74, 0xc1, 0xc0, 0x73, 0x22, 0x6d, 0x93, 0x95, 0xfd, 0x39, 0x7d, 0xbb, 0x2a, 0xe3, 0xf6, 0x82, 0xe3, 0x2c, 0x97, 0x5f, 0x4e, 0x1f, 0x91, 0x94, 0xfa, 0xfe, 0x2c, 0xa3, 0xd8, 0x76, 0x1a, 0xb8, 0x4d, 0xb2, 0x38, 0x4f, 0x9b, 0xfa, 0x1d, 0x48, 0x60, 0x79, 0x26, 0xe2, 0xf3, 0xfd, 0xa9, 0xd0, 0x9a, 0xe8, 0x70, 0x8f, 0x49, 0x7a, 0xd6, 0xe5, 0xbd, 0x0a, 0x0e, 0xdb, 0x2d, 0xf3, 0x8d, 0xbf, 0xeb, 0xe3, 0xa4, 0x7d, 0xcb, 0xc7, 0x95, 0x71, 0xe8, 0xda, 0xa3, 0x7c, 0xc5, 0xc2, 0xf8, 0x74, 0x92, 0x04, 0x1b, 0x86, 0xac, 0xa4, 0x22, 0x53, 0x40, 0xb6, 0xac, 0xfe, 0x4c, 0x76, 0xcf, 0xfb, 0x94, 0x32, 0xc0, 0x35, 0x9f, 0x76, 0x3f, 0x6e, 0xe5, 0x90, 0x6e, 0xa0, 0xa6, 0x26, 0xa2, 0xb8, 0x2c, 0xbe, 0xd1, 0x2b, 0x85, 0xfd, 0xa7, 0x68, 0xc8, 0xba, 0x01, 0x2b, 0xb1, 0x6c, 0x74, 0x1d, 0xb8, 0x73, 0x95, 0xe7, 0xee, 0xb7, 0xc7, 0x25, 0xf0, 0x00, 0x4c, 0x00, 0xb2, 0x7e, 0xb6, 0x0b, 0x8b, 0x1c, 0xf3, 0xc0, 0x50, 0x9e, 0x25, 0xb9, 0xe0, 0x08, 0xde, 0x36, 0x66, 0xff, 0x37, 0xa5, 0xd1, 0xbb, 0x54, 0x64, 0x2c, 0xc9, 0x27, 0xb5, 0x4b, 0x92, 0x7e, 0x65, 0xff, 0xd3, 0x2d, 0xe1, 0xb9, 0x4e, 0xbc, 0x7f, 0xa4, 0x41, 0x21, 0x90, 0x41, 0x77, 0xa6, 0x39, 0x1f, 0xea, 0x9e, 0xe3, 0x9f, 0xd0, 0x66, 0x6f, 0x05, 0xec, 0xaa, 0x76, 0x7e, 0xbf, 0x6b, 0x16, 0xa0, 0xeb, 0xb5, 0xc7, 0xfc, 0x92, 0x54, 0x2f, 0x2b, 0x11, 0x27, 0x25, 0x37, 0x78, 0x4c, 0x51, 0x6a, 0xb0, 0xf3, 0xcc, 0x58, 0x5d, 0x14, 0xf1, 0x6a, 0x48, 0x15, 0xff, 0xc2, 0x07, 0xb6, 0xb1, 0x8d, 0x0f, 0x8e, 0x5c, 0x50, 0x46, 0xb3, 0x3d, 0xbf, 0x01, 0x98, 0x4f, 0xb2, 0x59, 0x54, 0x47, 0x3e, 0x34, 0x7b, 0x78, 0x6d, 0x56, 0x93, 0x2e, 0x73, 0xea, 0x66, 0x28, 0x78, 0xcd, 0x1d, 0x14, 0xbf, 0xa0, 0x8f, 0x2f, 0x2e, 0xb8, 0x2e, 0x8e, 0xf2, 0x14, 0x8a, 0xcc, 0xe9, 0xb5, 0x7c, 0xfb, 0x6c, 0x9d, 0x0c, 0xa5, 0xe1, 0x96, 0x30, 0x82, 0x03, 0x4c, 0x30, 0x82, 0x02, 0x34, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x77, 0x77, 0x06, 0x27, 0x26, 0xa9, 0xb1, 0x7c, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x44, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0b, 0x41, 0x66, 0x66, 0x69, 0x72, 0x6d, 0x54, 0x72, 0x75, 0x73, 0x74, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x16, 0x41, 0x66, 0x66, 0x69, 0x72, 0x6d, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x72, 0x63, 0x69, 0x61, 0x6c, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x30, 0x30, 0x31, 0x32, 0x39, 0x31, 0x34, 0x30, 0x36, 0x30, 0x36, 0x5a, 0x17, 0x0d, 0x33, 0x30, 0x31, 0x32, 0x33, 0x31, 0x31, 0x34, 0x30, 0x36, 0x30, 0x36, 0x5a, 0x30, 0x44, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0b, 0x41, 0x66, 0x66, 0x69, 0x72, 0x6d, 0x54, 0x72, 0x75, 0x73, 0x74, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x16, 0x41, 0x66, 0x66, 0x69, 0x72, 0x6d, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x72, 0x63, 0x69, 0x61, 0x6c, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xf6, 0x1b, 0x4f, 0x67, 0x07, 0x2b, 0xa1, 0x15, 0xf5, 0x06, 0x22, 0xcb, 0x1f, 0x01, 0xb2, 0xe3, 0x73, 0x45, 0x06, 0x44, 0x49, 0x2c, 0xbb, 0x49, 0x25, 0x14, 0xd6, 0xce, 0xc3, 0xb7, 0xab, 0x2c, 0x4f, 0xc6, 0x41, 0x32, 0x94, 0x57, 0xfa, 0x12, 0xa7, 0x5b, 0x0e, 0xe2, 0x8f, 0x1f, 0x1e, 0x86, 0x19, 0xa7, 0xaa, 0xb5, 0x2d, 0xb9, 0x5f, 0x0d, 0x8a, 0xc2, 0xaf, 0x85, 0x35, 0x79, 0x32, 0x2d, 0xbb, 0x1c, 0x62, 0x37, 0xf2, 0xb1, 0x5b, 0x4a, 0x3d, 0xca, 0xcd, 0x71, 0x5f, 0xe9, 0x42, 0xbe, 0x94, 0xe8, 0xc8, 0xde, 0xf9, 0x22, 0x48, 0x64, 0xc6, 0xe5, 0xab, 0xc6, 0x2b, 0x6d, 0xad, 0x05, 0xf0, 0xfa, 0xd5, 0x0b, 0xcf, 0x9a, 0xe5, 0xf0, 0x50, 0xa4, 0x8b, 0x3b, 0x47, 0xa5, 0x23, 0x5b, 0x7a, 0x7a, 0xf8, 0x33, 0x3f, 0xb8, 0xef, 0x99, 0x97, 0xe3, 0x20, 0xc1, 0xd6, 0x28, 0x89, 0xcf, 0x94, 0xfb, 0xb9, 0x45, 0xed, 0xe3, 0x40, 0x17, 0x11, 0xd4, 0x74, 0xf0, 0x0b, 0x31, 0xe2, 0x2b, 0x26, 0x6a, 0x9b, 0x4c, 0x57, 0xae, 0xac, 0x20, 0x3e, 0xba, 0x45, 0x7a, 0x05, 0xf3, 0xbd, 0x9b, 0x69, 0x15, 0xae, 0x7d, 0x4e, 0x20, 0x63, 0xc4, 0x35, 0x76, 0x3a, 0x07, 0x02, 0xc9, 0x37, 0xfd, 0xc7, 0x47, 0xee, 0xe8, 0xf1, 0x76, 0x1d, 0x73, 0x15, 0xf2, 0x97, 0xa4, 0xb5, 0xc8, 0x7a, 0x79, 0xd9, 0x42, 0xaa, 0x2b, 0x7f, 0x5c, 0xfe, 0xce, 0x26, 0x4f, 0xa3, 0x66, 0x81, 0x35, 0xaf, 0x44, 0xba, 0x54, 0x1e, 0x1c, 0x30, 0x32, 0x65, 0x9d, 0xe6, 0x3c, 0x93, 0x5e, 0x50, 0x4e, 0x7a, 0xe3, 0x3a, 0xd4, 0x6e, 0xcc, 0x1a, 0xfb, 0xf9, 0xd2, 0x37, 0xae, 0x24, 0x2a, 0xab, 0x57, 0x03, 0x22, 0x28, 0x0d, 0x49, 0x75, 0x7f, 0xb7, 0x28, 0xda, 0x75, 0xbf, 0x8e, 0xe3, 0xdc, 0x0e, 0x79, 0x31, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x9d, 0x93, 0xc6, 0x53, 0x8b, 0x5e, 0xca, 0xaf, 0x3f, 0x9f, 0x1e, 0x0f, 0xe5, 0x99, 0x95, 0xbc, 0x24, 0xf6, 0x94, 0x8f, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x58, 0xac, 0xf4, 0x04, 0x0e, 0xcd, 0xc0, 0x0d, 0xff, 0x0a, 0xfd, 0xd4, 0xba, 0x16, 0x5f, 0x29, 0xbd, 0x7b, 0x68, 0x99, 0x58, 0x49, 0xd2, 0xb4, 0x1d, 0x37, 0x4d, 0x7f, 0x27, 0x7d, 0x46, 0x06, 0x5d, 0x43, 0xc6, 0x86, 0x2e, 0x3e, 0x73, 0xb2, 0x26, 0x7d, 0x4f, 0x93, 0xa9, 0xb6, 0xc4, 0x2a, 0x9a, 0xab, 0x21, 0x97, 0x14, 0xb1, 0xde, 0x8c, 0xd3, 0xab, 0x89, 0x15, 0xd8, 0x6b, 0x24, 0xd4, 0xf1, 0x16, 0xae, 0xd8, 0xa4, 0x5c, 0xd4, 0x7f, 0x51, 0x8e, 0xed, 0x18, 0x01, 0xb1, 0x93, 0x63, 0xbd, 0xbc, 0xf8, 0x61, 0x80, 0x9a, 0x9e, 0xb1, 0xce, 0x42, 0x70, 0xe2, 0xa9, 0x7d, 0x06, 0x25, 0x7d, 0x27, 0xa1, 0xfe, 0x6f, 0xec, 0xb3, 0x1e, 0x24, 0xda, 0xe3, 0x4b, 0x55, 0x1a, 0x00, 0x3b, 0x35, 0xb4, 0x3b, 0xd9, 0xd7, 0x5d, 0x30, 0xfd, 0x81, 0x13, 0x89, 0xf2, 0xc2, 0x06, 0x2b, 0xed, 0x67, 0xc4, 0x8e, 0xc9, 0x43, 0xb2, 0x5c, 0x6b, 0x15, 0x89, 0x02, 0xbc, 0x62, 0xfc, 0x4e, 0xf2, 0xb5, 0x33, 0xaa, 0xb2, 0x6f, 0xd3, 0x0a, 0xa2, 0x50, 0xe3, 0xf6, 0x3b, 0xe8, 0x2e, 0x44, 0xc2, 0xdb, 0x66, 0x38, 0xa9, 0x33, 0x56, 0x48, 0xf1, 0x6d, 0x1b, 0x33, 0x8d, 0x0d, 0x8c, 0x3f, 0x60, 0x37, 0x9d, 0xd3, 0xca, 0x6d, 0x7e, 0x34, 0x7e, 0x0d, 0x9f, 0x72, 0x76, 0x8b, 0x1b, 0x9f, 0x72, 0xfd, 0x52, 0x35, 0x41, 0x45, 0x02, 0x96, 0x2f, 0x1c, 0xb2, 0x9a, 0x73, 0x49, 0x21, 0xb1, 0x49, 0x47, 0x45, 0x47, 0xb4, 0xef, 0x6a, 0x34, 0x11, 0xc9, 0x4d, 0x9a, 0xcc, 0x59, 0xb7, 0xd6, 0x02, 0x9e, 0x5a, 0x4e, 0x65, 0xb5, 0x94, 0xae, 0x1b, 0xdf, 0x29, 0xb0, 0x16, 0xf1, 0xbf, 0x00, 0x9e, 0x07, 0x3a, 0x17, 0x64, 0xb5, 0x04, 0xb5, 0x23, 0x21, 0x99, 0x0a, 0x95, 0x3b, 0x97, 0x7c, 0xef, 0x30, 0x82, 0x05, 0xb0, 0x30, 0x82, 0x03, 0x98, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x15, 0xc8, 0xbd, 0x65, 0x47, 0x5c, 0xaf, 0xb8, 0x97, 0x00, 0x5e, 0xe4, 0x06, 0xd2, 0xbc, 0x9d, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x5e, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x54, 0x57, 0x31, 0x23, 0x30, 0x21, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x1a, 0x43, 0x68, 0x75, 0x6e, 0x67, 0x68, 0x77, 0x61, 0x20, 0x54, 0x65, 0x6c, 0x65, 0x63, 0x6f, 0x6d, 0x20, 0x43, 0x6f, 0x2e, 0x2c, 0x20, 0x4c, 0x74, 0x64, 0x2e, 0x31, 0x2a, 0x30, 0x28, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x21, 0x65, 0x50, 0x4b, 0x49, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x34, 0x31, 0x32, 0x32, 0x30, 0x30, 0x32, 0x33, 0x31, 0x32, 0x37, 0x5a, 0x17, 0x0d, 0x33, 0x34, 0x31, 0x32, 0x32, 0x30, 0x30, 0x32, 0x33, 0x31, 0x32, 0x37, 0x5a, 0x30, 0x5e, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x54, 0x57, 0x31, 0x23, 0x30, 0x21, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x1a, 0x43, 0x68, 0x75, 0x6e, 0x67, 0x68, 0x77, 0x61, 0x20, 0x54, 0x65, 0x6c, 0x65, 0x63, 0x6f, 0x6d, 0x20, 0x43, 0x6f, 0x2e, 0x2c, 0x20, 0x4c, 0x74, 0x64, 0x2e, 0x31, 0x2a, 0x30, 0x28, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x21, 0x65, 0x50, 0x4b, 0x49, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xe1, 0x25, 0x0f, 0xee, 0x8d, 0xdb, 0x88, 0x33, 0x75, 0x67, 0xcd, 0xad, 0x1f, 0x7d, 0x3a, 0x4e, 0x6d, 0x9d, 0xd3, 0x2f, 0x14, 0xf3, 0x63, 0x74, 0xcb, 0x01, 0x21, 0x6a, 0x37, 0xea, 0x84, 0x50, 0x07, 0x4b, 0x26, 0x5b, 0x09, 0x43, 0x6c, 0x21, 0x9e, 0x6a, 0xc8, 0xd5, 0x03, 0xf5, 0x60, 0x69, 0x8f, 0xcc, 0xf0, 0x22, 0xe4, 0x1f, 0xe7, 0xf7, 0x6a, 0x22, 0x31, 0xb7, 0x2c, 0x15, 0xf2, 0xe0, 0xfe, 0x00, 0x6a, 0x43, 0xff, 0x87, 0x65, 0xc6, 0xb5, 0x1a, 0xc1, 0xa7, 0x4c, 0x6d, 0x22, 0x70, 0x21, 0x8a, 0x31, 0xf2, 0x97, 0x74, 0x89, 0x09, 0x12, 0x26, 0x1c, 0x9e, 0xca, 0xd9, 0x12, 0xa2, 0x95, 0x3c, 0xda, 0xe9, 0x67, 0xbf, 0x08, 0xa0, 0x64, 0xe3, 0xd6, 0x42, 0xb7, 0x45, 0xef, 0x97, 0xf4, 0xf6, 0xf5, 0xd7, 0xb5, 0x4a, 0x15, 0x02, 0x58, 0x7d, 0x98, 0x58, 0x4b, 0x60, 0xbc, 0xcd, 0xd7, 0x0d, 0x9a, 0x13, 0x33, 0x53, 0xd1, 0x61, 0xf9, 0x7a, 0xd5, 0xd7, 0x78, 0xb3, 0x9a, 0x33, 0xf7, 0x00, 0x86, 0xce, 0x1d, 0x4d, 0x94, 0x38, 0xaf, 0xa8, 0xec, 0x78, 0x51, 0x70, 0x8a, 0x5c, 0x10, 0x83, 0x51, 0x21, 0xf7, 0x11, 0x3d, 0x34, 0x86, 0x5e, 0xe5, 0x48, 0xcd, 0x97, 0x81, 0x82, 0x35, 0x4c, 0x19, 0xec, 0x65, 0xf6, 0x6b, 0xc5, 0x05, 0xa1, 0xee, 0x47, 0x13, 0xd6, 0xb3, 0x21, 0x27, 0x94, 0x10, 0x0a, 0xd9, 0x24, 0x3b, 0xba, 0xbe, 0x44, 0x13, 0x46, 0x30, 0x3f, 0x97, 0x3c, 0xd8, 0xd7, 0xd7, 0x6a, 0xee, 0x3b, 0x38, 0xe3, 0x2b, 0xd4, 0x97, 0x0e, 0xb9, 0x1b, 0xe7, 0x07, 0x49, 0x7f, 0x37, 0x2a, 0xf9, 0x77, 0x78, 0xcf, 0x54, 0xed, 0x5b, 0x46, 0x9d, 0xa3, 0x80, 0x0e, 0x91, 0x43, 0xc1, 0xd6, 0x5b, 0x5f, 0x14, 0xba, 0x9f, 0xa6, 0x8d, 0x24, 0x47, 0x40, 0x59, 0xbf, 0x72, 0x38, 0xb2, 0x36, 0x6c, 0x37, 0xff, 0x99, 0xd1, 0x5d, 0x0e, 0x59, 0x0a, 0xab, 0x69, 0xf7, 0xc0, 0xb2, 0x04, 0x45, 0x7a, 0x54, 0x00, 0xae, 0xbe, 0x53, 0xf6, 0xb5, 0xe7, 0xe1, 0xf8, 0x3c, 0xa3, 0x31, 0xd2, 0xa9, 0xfe, 0x21, 0x52, 0x64, 0xc5, 0xa6, 0x67, 0xf0, 0x75, 0x07, 0x06, 0x94, 0x14, 0x81, 0x55, 0xc6, 0x27, 0xe4, 0x01, 0x8f, 0x17, 0xc1, 0x6a, 0x71, 0xd7, 0xbe, 0x4b, 0xfb, 0x94, 0x58, 0x7d, 0x7e, 0x11, 0x33, 0xb1, 0x42, 0xf7, 0x62, 0x6c, 0x18, 0xd6, 0xcf, 0x09, 0x68, 0x3e, 0x7f, 0x6c, 0xf6, 0x1e, 0x8f, 0x62, 0xad, 0xa5, 0x63, 0xdb, 0x09, 0xa7, 0x1f, 0x22, 0x42, 0x41, 0x1e, 0x6f, 0x99, 0x8a, 0x3e, 0xd7, 0xf9, 0x3f, 0x40, 0x7a, 0x79, 0xb0, 0xa5, 0x01, 0x92, 0xd2, 0x9d, 0x3d, 0x08, 0x15, 0xa5, 0x10, 0x01, 0x2d, 0xb3, 0x32, 0x76, 0xa8, 0x95, 0x0d, 0xb3, 0x7a, 0x9a, 0xfb, 0x07, 0x10, 0x78, 0x11, 0x6f, 0xe1, 0x8f, 0xc7, 0xba, 0x0f, 0x25, 0x1a, 0x74, 0x2a, 0xe5, 0x1c, 0x98, 0x41, 0x99, 0xdf, 0x21, 0x87, 0xe8, 0x95, 0x06, 0x6a, 0x0a, 0xb3, 0x6a, 0x47, 0x76, 0x65, 0xf6, 0x3a, 0xcf, 0x8f, 0x62, 0x17, 0x19, 0x7b, 0x0a, 0x28, 0xcd, 0x1a, 0xd2, 0x83, 0x1e, 0x21, 0xc7, 0x2c, 0xbf, 0xbe, 0xff, 0x61, 0x68, 0xb7, 0x67, 0x1b, 0xbb, 0x78, 0x4d, 0x8d, 0xce, 0x67, 0xe5, 0xe4, 0xc1, 0x8e, 0xb7, 0x23, 0x66, 0xe2, 0x9d, 0x90, 0x75, 0x34, 0x98, 0xa9, 0x36, 0x2b, 0x8a, 0x9a, 0x94, 0xb9, 0x9d, 0xec, 0xcc, 0x8a, 0xb1, 0xf8, 0x25, 0x89, 0x5c, 0x5a, 0xb6, 0x2f, 0x8c, 0x1f, 0x6d, 0x79, 0x24, 0xa7, 0x52, 0x68, 0xc3, 0x84, 0x35, 0xe2, 0x66, 0x8d, 0x63, 0x0e, 0x25, 0x4d, 0xd5, 0x19, 0xb2, 0xe6, 0x79, 0x37, 0xa7, 0x22, 0x9d, 0x54, 0x31, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x6a, 0x30, 0x68, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x1e, 0x0c, 0xf7, 0xb6, 0x67, 0xf2, 0xe1, 0x92, 0x26, 0x09, 0x45, 0xc0, 0x55, 0x39, 0x2e, 0x77, 0x3f, 0x42, 0x4a, 0xa2, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x39, 0x06, 0x04, 0x67, 0x2a, 0x07, 0x00, 0x04, 0x31, 0x30, 0x2f, 0x30, 0x2d, 0x02, 0x01, 0x00, 0x30, 0x09, 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02, 0x1a, 0x05, 0x00, 0x30, 0x07, 0x06, 0x05, 0x67, 0x2a, 0x03, 0x00, 0x00, 0x04, 0x14, 0x45, 0xb0, 0xc2, 0xc7, 0x0a, 0x56, 0x7c, 0xee, 0x5b, 0x78, 0x0c, 0x95, 0xf9, 0x18, 0x53, 0xc1, 0xa6, 0x1c, 0xd8, 0x10, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x09, 0xb3, 0x83, 0x53, 0x59, 0x01, 0x3e, 0x95, 0x49, 0xb9, 0xf1, 0x81, 0xba, 0xf9, 0x76, 0x20, 0x23, 0xb5, 0x27, 0x60, 0x74, 0xd4, 0x6a, 0x99, 0x34, 0x5e, 0x6c, 0x00, 0x53, 0xd9, 0x9f, 0xf2, 0xa6, 0xb1, 0x24, 0x07, 0x44, 0x6a, 0x2a, 0xc6, 0xa5, 0x8e, 0x78, 0x12, 0xe8, 0x47, 0xd9, 0x58, 0x1b, 0x13, 0x2a, 0x5e, 0x79, 0x9b, 0x9f, 0x0a, 0x2a, 0x67, 0xa6, 0x25, 0x3f, 0x06, 0x69, 0x56, 0x73, 0xc3, 0x8a, 0x66, 0x48, 0xfb, 0x29, 0x81, 0x57, 0x74, 0x06, 0xca, 0x9c, 0xea, 0x28, 0xe8, 0x38, 0x67, 0x26, 0x2b, 0xf1, 0xd5, 0xb5, 0x3f, 0x65, 0x93, 0xf8, 0x36, 0x5d, 0x8e, 0x8d, 0x8d, 0x40, 0x20, 0x87, 0x19, 0xea, 0xef, 0x27, 0xc0, 0x3d, 0xb4, 0x39, 0x0f, 0x25, 0x7b, 0x68, 0x50, 0x74, 0x55, 0x9c, 0x0c, 0x59, 0x7d, 0x5a, 0x3d, 0x41, 0x94, 0x25, 0x52, 0x08, 0xe0, 0x47, 0x2c, 0x15, 0x31, 0x19, 0xd5, 0xbf, 0x07, 0x55, 0xc6, 0xbb, 0x12, 0xb5, 0x97, 0xf4, 0x5f, 0x83, 0x85, 0xba, 0x71, 0xc1, 0xd9, 0x6c, 0x81, 0x11, 0x76, 0x0a, 0x0a, 0xb0, 0xbf, 0x82, 0x97, 0xf7, 0xea, 0x3d, 0xfa, 0xfa, 0xec, 0x2d, 0xa9, 0x28, 0x94, 0x3b, 0x56, 0xdd, 0xd2, 0x51, 0x2e, 0xae, 0xc0, 0xbd, 0x08, 0x15, 0x8c, 0x77, 0x52, 0x34, 0x96, 0xd6, 0x9b, 0xac, 0xd3, 0x1d, 0x8e, 0x61, 0x0f, 0x35, 0x7b, 0x9b, 0xae, 0x39, 0x69, 0x0b, 0x62, 0x60, 0x40, 0x20, 0x36, 0x8f, 0xaf, 0xfb, 0x36, 0xee, 0x2d, 0x08, 0x4a, 0x1d, 0xb8, 0xbf, 0x9b, 0x5c, 0xf8, 0xea, 0xa5, 0x1b, 0xa0, 0x73, 0xa6, 0xd8, 0xf8, 0x6e, 0xe0, 0x33, 0x04, 0x5f, 0x68, 0xaa, 0x27, 0x87, 0xed, 0xd9, 0xc1, 0x90, 0x9c, 0xed, 0xbd, 0xe3, 0x6a, 0x35, 0xaf, 0x63, 0xdf, 0xab, 0x18, 0xd9, 0xba, 0xe6, 0xe9, 0x4a, 0xea, 0x50, 0x8a, 0x0f, 0x61, 0x93, 0x1e, 0xe2, 0x2d, 0x19, 0xe2, 0x30, 0x94, 0x35, 0x92, 0x5d, 0x0e, 0xb6, 0x07, 0xaf, 0x19, 0x80, 0x8f, 0x47, 0x90, 0x51, 0x4b, 0x2e, 0x4d, 0xdd, 0x85, 0xe2, 0xd2, 0x0a, 0x52, 0x0a, 0x17, 0x9a, 0xfc, 0x1a, 0xb0, 0x50, 0x02, 0xe5, 0x01, 0xa3, 0x63, 0x37, 0x21, 0x4c, 0x44, 0xc4, 0x9b, 0x51, 0x99, 0x11, 0x0e, 0x73, 0x9c, 0x06, 0x8f, 0x54, 0x2e, 0xa7, 0x28, 0x5e, 0x44, 0x39, 0x87, 0x56, 0x2d, 0x37, 0xbd, 0x85, 0x44, 0x94, 0xe1, 0x0c, 0x4b, 0x2c, 0x9c, 0xc3, 0x92, 0x85, 0x34, 0x61, 0xcb, 0x0f, 0xb8, 0x9b, 0x4a, 0x43, 0x52, 0xfe, 0x34, 0x3a, 0x7d, 0xb8, 0xe9, 0x29, 0xdc, 0x76, 0xa9, 0xc8, 0x30, 0xf8, 0x14, 0x71, 0x80, 0xc6, 0x1e, 0x36, 0x48, 0x74, 0x22, 0x41, 0x5c, 0x87, 0x82, 0xe8, 0x18, 0x71, 0x8b, 0x41, 0x89, 0x44, 0xe7, 0x7e, 0x58, 0x5b, 0xa8, 0xb8, 0x8d, 0x13, 0xe9, 0xa7, 0x6c, 0xc3, 0x47, 0xed, 0xb3, 0x1a, 0x9d, 0x62, 0xae, 0x8d, 0x82, 0xea, 0x94, 0x9e, 0xdd, 0x59, 0x10, 0xc3, 0xad, 0xdd, 0xe2, 0x4d, 0xe3, 0x31, 0xd5, 0xc7, 0xec, 0xe8, 0xf2, 0xb0, 0xfe, 0x92, 0x1e, 0x16, 0x0a, 0x1a, 0xfc, 0xd9, 0xf3, 0xf8, 0x27, 0xb6, 0xc9, 0xbe, 0x1d, 0xb4, 0x6c, 0x64, 0x90, 0x7f, 0xf4, 0xe4, 0xc4, 0x5b, 0xd7, 0x37, 0xae, 0x42, 0x0e, 0xdd, 0xa4, 0x1a, 0x6f, 0x7c, 0x88, 0x54, 0xc5, 0x16, 0x6e, 0xe1, 0x7a, 0x68, 0x2e, 0xf8, 0x3a, 0xbf, 0x0d, 0xa4, 0x3c, 0x89, 0x3b, 0x78, 0xa7, 0x4e, 0x63, 0x83, 0x04, 0x21, 0x08, 0x67, 0x8d, 0xf2, 0x82, 0x49, 0xd0, 0x5b, 0xfd, 0xb1, 0xcd, 0x0f, 0x83, 0x84, 0xd4, 0x3e, 0x20, 0x85, 0xf7, 0x4a, 0x3d, 0x2b, 0x9c, 0xfd, 0x2a, 0x0a, 0x09, 0x4d, 0xea, 0x81, 0xf8, 0x11, 0x9c, 0x30, 0x82, 0x05, 0x46, 0x30, 0x82, 0x03, 0x2e, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x6d, 0x8c, 0x14, 0x46, 0xb1, 0xa6, 0x0a, 0xee, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0c, 0x05, 0x00, 0x30, 0x41, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0b, 0x41, 0x66, 0x66, 0x69, 0x72, 0x6d, 0x54, 0x72, 0x75, 0x73, 0x74, 0x31, 0x1c, 0x30, 0x1a, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x13, 0x41, 0x66, 0x66, 0x69, 0x72, 0x6d, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x75, 0x6d, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x30, 0x30, 0x31, 0x32, 0x39, 0x31, 0x34, 0x31, 0x30, 0x33, 0x36, 0x5a, 0x17, 0x0d, 0x34, 0x30, 0x31, 0x32, 0x33, 0x31, 0x31, 0x34, 0x31, 0x30, 0x33, 0x36, 0x5a, 0x30, 0x41, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0b, 0x41, 0x66, 0x66, 0x69, 0x72, 0x6d, 0x54, 0x72, 0x75, 0x73, 0x74, 0x31, 0x1c, 0x30, 0x1a, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x13, 0x41, 0x66, 0x66, 0x69, 0x72, 0x6d, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x75, 0x6d, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xc4, 0x12, 0xdf, 0xa9, 0x5f, 0xfe, 0x41, 0xdd, 0xdd, 0xf5, 0x9f, 0x8a, 0xe3, 0xf6, 0xac, 0xe1, 0x3c, 0x78, 0x9a, 0xbc, 0xd8, 0xf0, 0x7f, 0x7a, 0xa0, 0x33, 0x2a, 0xdc, 0x8d, 0x20, 0x5b, 0xae, 0x2d, 0x6f, 0xe7, 0x93, 0xd9, 0x36, 0x70, 0x6a, 0x68, 0xcf, 0x8e, 0x51, 0xa3, 0x85, 0x5b, 0x67, 0x04, 0xa0, 0x10, 0x24, 0x6f, 0x5d, 0x28, 0x82, 0xc1, 0x97, 0x57, 0xd8, 0x48, 0x29, 0x13, 0xb6, 0xe1, 0xbe, 0x91, 0x4d, 0xdf, 0x85, 0x0c, 0x53, 0x18, 0x9a, 0x1e, 0x24, 0xa2, 0x4f, 0x8f, 0xf0, 0xa2, 0x85, 0x0b, 0xcb, 0xf4, 0x29, 0x7f, 0xd2, 0xa4, 0x58, 0xee, 0x26, 0x4d, 0xc9, 0xaa, 0xa8, 0x7b, 0x9a, 0xd9, 0xfa, 0x38, 0xde, 0x44, 0x57, 0x15, 0xe5, 0xf8, 0x8c, 0xc8, 0xd9, 0x48, 0xe2, 0x0d, 0x16, 0x27, 0x1d, 0x1e, 0xc8, 0x83, 0x85, 0x25, 0xb7, 0xba, 0xaa, 0x55, 0x41, 0xcc, 0x03, 0x22, 0x4b, 0x2d, 0x91, 0x8d, 0x8b, 0xe6, 0x89, 0xaf, 0x66, 0xc7, 0xe9, 0xff, 0x2b, 0xe9, 0x3c, 0xac, 0xda, 0xd2, 0xb3, 0xc3, 0xe1, 0x68, 0x9c, 0x89, 0xf8, 0x7a, 0x00, 0x56, 0xde, 0xf4, 0x55, 0x95, 0x6c, 0xfb, 0xba, 0x64, 0xdd, 0x62, 0x8b, 0xdf, 0x0b, 0x77, 0x32, 0xeb, 0x62, 0xcc, 0x26, 0x9a, 0x9b, 0xbb, 0xaa, 0x62, 0x83, 0x4c, 0xb4, 0x06, 0x7a, 0x30, 0xc8, 0x29, 0xbf, 0xed, 0x06, 0x4d, 0x97, 0xb9, 0x1c, 0xc4, 0x31, 0x2b, 0xd5, 0x5f, 0xbc, 0x53, 0x12, 0x17, 0x9c, 0x99, 0x57, 0x29, 0x66, 0x77, 0x61, 0x21, 0x31, 0x07, 0x2e, 0x25, 0x49, 0x9d, 0x18, 0xf2, 0xee, 0xf3, 0x2b, 0x71, 0x8c, 0xb5, 0xba, 0x39, 0x07, 0x49, 0x77, 0xfc, 0xef, 0x2e, 0x92, 0x90, 0x05, 0x8d, 0x2d, 0x2f, 0x77, 0x7b, 0xef, 0x43, 0xbf, 0x35, 0xbb, 0x9a, 0xd8, 0xf9, 0x73, 0xa7, 0x2c, 0xf2, 0xd0, 0x57, 0xee, 0x28, 0x4e, 0x26, 0x5f, 0x8f, 0x90, 0x68, 0x09, 0x2f, 0xb8, 0xf8, 0xdc, 0x06, 0xe9, 0x2e, 0x9a, 0x3e, 0x51, 0xa7, 0xd1, 0x22, 0xc4, 0x0a, 0xa7, 0x38, 0x48, 0x6c, 0xb3, 0xf9, 0xff, 0x7d, 0xab, 0x86, 0x57, 0xe3, 0xba, 0xd6, 0x85, 0x78, 0x77, 0xba, 0x43, 0xea, 0x48, 0x7f, 0xf6, 0xd8, 0xbe, 0x23, 0x6d, 0x1e, 0xbf, 0xd1, 0x36, 0x6c, 0x58, 0x5c, 0xf1, 0xee, 0xa4, 0x19, 0x54, 0x1a, 0xf5, 0x03, 0xd2, 0x76, 0xe6, 0xe1, 0x8c, 0xbd, 0x3c, 0xb3, 0xd3, 0x48, 0x4b, 0xe2, 0xc8, 0xf8, 0x7f, 0x92, 0xa8, 0x76, 0x46, 0x9c, 0x42, 0x65, 0x3e, 0xa4, 0x1e, 0xc1, 0x07, 0x03, 0x5a, 0x46, 0x2d, 0xb8, 0x97, 0xf3, 0xb7, 0xd5, 0xb2, 0x55, 0x21, 0xef, 0xba, 0xdc, 0x4c, 0x00, 0x97, 0xfb, 0x14, 0x95, 0x27, 0x33, 0xbf, 0xe8, 0x43, 0x47, 0x46, 0xd2, 0x08, 0x99, 0x16, 0x60, 0x3b, 0x9a, 0x7e, 0xd2, 0xe6, 0xed, 0x38, 0xea, 0xec, 0x01, 0x1e, 0x3c, 0x48, 0x56, 0x49, 0x09, 0xc7, 0x4c, 0x37, 0x00, 0x9e, 0x88, 0x0e, 0xc0, 0x73, 0xe1, 0x6f, 0x66, 0xe9, 0x72, 0x47, 0x30, 0x3e, 0x10, 0xe5, 0x0b, 0x03, 0xc9, 0x9a, 0x42, 0x00, 0x6c, 0xc5, 0x94, 0x7e, 0x61, 0xc4, 0x8a, 0xdf, 0x7f, 0x82, 0x1a, 0x0b, 0x59, 0xc4, 0x59, 0x32, 0x77, 0xb3, 0xbc, 0x60, 0x69, 0x56, 0x39, 0xfd, 0xb4, 0x06, 0x7b, 0x2c, 0xd6, 0x64, 0x36, 0xd9, 0xbd, 0x48, 0xed, 0x84, 0x1f, 0x7e, 0xa5, 0x22, 0x8f, 0x2a, 0xb8, 0x42, 0xf4, 0x82, 0xb7, 0xd4, 0x53, 0x90, 0x78, 0x4e, 0x2d, 0x1a, 0xfd, 0x81, 0x6f, 0x44, 0xd7, 0x3b, 0x01, 0x74, 0x96, 0x42, 0xe0, 0x00, 0xe2, 0x2e, 0x6b, 0xea, 0xc5, 0xee, 0x72, 0xac, 0xbb, 0xbf, 0xfe, 0xea, 0xaa, 0xa8, 0xf8, 0xdc, 0xf6, 0xb2, 0x79, 0x8a, 0xb6, 0x67, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x9d, 0xc0, 0x67, 0xa6, 0x0c, 0x22, 0xd9, 0x26, 0xf5, 0x45, 0xab, 0xa6, 0x65, 0x52, 0x11, 0x27, 0xd8, 0x45, 0xac, 0x63, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0c, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0xb3, 0x57, 0x4d, 0x10, 0x62, 0x4e, 0x3a, 0xe4, 0xac, 0xea, 0xb8, 0x1c, 0xaf, 0x32, 0x23, 0xc8, 0xb3, 0x49, 0x5a, 0x51, 0x9c, 0x76, 0x28, 0x8d, 0x79, 0xaa, 0x57, 0x46, 0x17, 0xd5, 0xf5, 0x52, 0xf6, 0xb7, 0x44, 0xe8, 0x08, 0x44, 0xbf, 0x18, 0x84, 0xd2, 0x0b, 0x80, 0xcd, 0xc5, 0x12, 0xfd, 0x00, 0x55, 0x05, 0x61, 0x87, 0x41, 0xdc, 0xb5, 0x24, 0x9e, 0x3c, 0xc4, 0xd8, 0xc8, 0xfb, 0x70, 0x9e, 0x2f, 0x78, 0x96, 0x83, 0x20, 0x36, 0xde, 0x7c, 0x0f, 0x69, 0x13, 0x88, 0xa5, 0x75, 0x36, 0x98, 0x08, 0xa6, 0xc6, 0xdf, 0xac, 0xce, 0xe3, 0x58, 0xd6, 0xb7, 0x3e, 0xde, 0xba, 0xf3, 0xeb, 0x34, 0x40, 0xd8, 0xa2, 0x81, 0xf5, 0x78, 0x3f, 0x2f, 0xd5, 0xa5, 0xfc, 0xd9, 0xa2, 0xd4, 0x5e, 0x04, 0x0e, 0x17, 0xad, 0xfe, 0x41, 0xf0, 0xe5, 0xb2, 0x72, 0xfa, 0x44, 0x82, 0x33, 0x42, 0xe8, 0x2d, 0x58, 0xf7, 0x56, 0x8c, 0x62, 0x3f, 0xba, 0x42, 0xb0, 0x9c, 0x0c, 0x5c, 0x7e, 0x2e, 0x65, 0x26, 0x5c, 0x53, 0x4f, 0x00, 0xb2, 0x78, 0x7e, 0xa1, 0x0d, 0x99, 0x2d, 0x8d, 0xb8, 0x1d, 0x8e, 0xa2, 0xc4, 0xb0, 0xfd, 0x60, 0xd0, 0x30, 0xa4, 0x8e, 0xc8, 0x04, 0x62, 0xa9, 0xc4, 0xed, 0x35, 0xde, 0x7a, 0x97, 0xed, 0x0e, 0x38, 0x5e, 0x92, 0x2f, 0x93, 0x70, 0xa5, 0xa9, 0x9c, 0x6f, 0xa7, 0x7d, 0x13, 0x1d, 0x7e, 0xc6, 0x08, 0x48, 0xb1, 0x5e, 0x67, 0xeb, 0x51, 0x08, 0x25, 0xe9, 0xe6, 0x25, 0x6b, 0x52, 0x29, 0x91, 0x9c, 0xd2, 0x39, 0x73, 0x08, 0x57, 0xde, 0x99, 0x06, 0xb4, 0x5b, 0x9d, 0x10, 0x06, 0xe1, 0xc2, 0x00, 0xa8, 0xb8, 0x1c, 0x4a, 0x02, 0x0a, 0x14, 0xd0, 0xc1, 0x41, 0xca, 0xfb, 0x8c, 0x35, 0x21, 0x7d, 0x82, 0x38, 0xf2, 0xa9, 0x54, 0x91, 0x19, 0x35, 0x93, 0x94, 0x6d, 0x6a, 0x3a, 0xc5, 0xb2, 0xd0, 0xbb, 0x89, 0x86, 0x93, 0xe8, 0x9b, 0xc9, 0x0f, 0x3a, 0xa7, 0x7a, 0xb8, 0xa1, 0xf0, 0x78, 0x46, 0xfa, 0xfc, 0x37, 0x2f, 0xe5, 0x8a, 0x84, 0xf3, 0xdf, 0xfe, 0x04, 0xd9, 0xa1, 0x68, 0xa0, 0x2f, 0x24, 0xe2, 0x09, 0x95, 0x06, 0xd5, 0x95, 0xca, 0xe1, 0x24, 0x96, 0xeb, 0x7c, 0xf6, 0x93, 0x05, 0xbb, 0xed, 0x73, 0xe9, 0x2d, 0xd1, 0x75, 0x39, 0xd7, 0xe7, 0x24, 0xdb, 0xd8, 0x4e, 0x5f, 0x43, 0x8f, 0x9e, 0xd0, 0x14, 0x39, 0xbf, 0x55, 0x70, 0x48, 0x99, 0x57, 0x31, 0xb4, 0x9c, 0xee, 0x4a, 0x98, 0x03, 0x96, 0x30, 0x1f, 0x60, 0x06, 0xee, 0x1b, 0x23, 0xfe, 0x81, 0x60, 0x23, 0x1a, 0x47, 0x62, 0x85, 0xa5, 0xcc, 0x19, 0x34, 0x80, 0x6f, 0xb3, 0xac, 0x1a, 0xe3, 0x9f, 0xf0, 0x7b, 0x48, 0xad, 0xd5, 0x01, 0xd9, 0x67, 0xb6, 0xa9, 0x72, 0x93, 0xea, 0x2d, 0x66, 0xb5, 0xb2, 0xb8, 0xe4, 0x3d, 0x3c, 0xb2, 0xef, 0x4c, 0x8c, 0xea, 0xeb, 0x07, 0xbf, 0xab, 0x35, 0x9a, 0x55, 0x86, 0xbc, 0x18, 0xa6, 0xb5, 0xa8, 0x5e, 0xb4, 0x83, 0x6c, 0x6b, 0x69, 0x40, 0xd3, 0x9f, 0xdc, 0xf1, 0xc3, 0x69, 0x6b, 0xb9, 0xe1, 0x6d, 0x09, 0xf4, 0xf1, 0xaa, 0x50, 0x76, 0x0a, 0x7a, 0x7d, 0x7a, 0x17, 0xa1, 0x55, 0x96, 0x42, 0x99, 0x31, 0x09, 0xdd, 0x60, 0x11, 0x8d, 0x05, 0x30, 0x7e, 0xe6, 0x8e, 0x46, 0xd1, 0x9d, 0x14, 0xda, 0xc7, 0x17, 0xe4, 0x05, 0x96, 0x8c, 0xc4, 0x24, 0xb5, 0x1b, 0xcf, 0x14, 0x07, 0xb2, 0x40, 0xf8, 0xa3, 0x9e, 0x41, 0x86, 0xbc, 0x04, 0xd0, 0x6b, 0x96, 0xc8, 0x2a, 0x80, 0x34, 0xfd, 0xbf, 0xef, 0x06, 0xa3, 0xdd, 0x58, 0xc5, 0x85, 0x3d, 0x3e, 0x8f, 0xfe, 0x9e, 0x29, 0xe0, 0xb6, 0xb8, 0x09, 0x68, 0x19, 0x1c, 0x18, 0x43, 0x30, 0x82, 0x01, 0xfe, 0x30, 0x82, 0x01, 0x85, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x74, 0x97, 0x25, 0x8a, 0xc7, 0x3f, 0x7a, 0x54, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x30, 0x45, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0b, 0x41, 0x66, 0x66, 0x69, 0x72, 0x6d, 0x54, 0x72, 0x75, 0x73, 0x74, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x17, 0x41, 0x66, 0x66, 0x69, 0x72, 0x6d, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x75, 0x6d, 0x20, 0x45, 0x43, 0x43, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x30, 0x30, 0x31, 0x32, 0x39, 0x31, 0x34, 0x32, 0x30, 0x32, 0x34, 0x5a, 0x17, 0x0d, 0x34, 0x30, 0x31, 0x32, 0x33, 0x31, 0x31, 0x34, 0x32, 0x30, 0x32, 0x34, 0x5a, 0x30, 0x45, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0b, 0x41, 0x66, 0x66, 0x69, 0x72, 0x6d, 0x54, 0x72, 0x75, 0x73, 0x74, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x17, 0x41, 0x66, 0x66, 0x69, 0x72, 0x6d, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x75, 0x6d, 0x20, 0x45, 0x43, 0x43, 0x30, 0x76, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x22, 0x03, 0x62, 0x00, 0x04, 0x0d, 0x30, 0x5e, 0x1b, 0x15, 0x9d, 0x03, 0xd0, 0xa1, 0x79, 0x35, 0xb7, 0x3a, 0x3c, 0x92, 0x7a, 0xca, 0x15, 0x1c, 0xcd, 0x62, 0xf3, 0x9c, 0x26, 0x5c, 0x07, 0x3d, 0xe5, 0x54, 0xfa, 0xa3, 0xd6, 0xcc, 0x12, 0xea, 0xf4, 0x14, 0x5f, 0xe8, 0x8e, 0x19, 0xab, 0x2f, 0x2e, 0x48, 0xe6, 0xac, 0x18, 0x43, 0x78, 0xac, 0xd0, 0x37, 0xc3, 0xbd, 0xb2, 0xcd, 0x2c, 0xe6, 0x47, 0xe2, 0x1a, 0xe6, 0x63, 0xb8, 0x3d, 0x2e, 0x2f, 0x78, 0xc4, 0x4f, 0xdb, 0xf4, 0x0f, 0xa4, 0x68, 0x4c, 0x55, 0x72, 0x6b, 0x95, 0x1d, 0x4e, 0x18, 0x42, 0x95, 0x78, 0xcc, 0x37, 0x3c, 0x91, 0xe2, 0x9b, 0x65, 0x2b, 0x29, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x9a, 0xaf, 0x29, 0x7a, 0xc0, 0x11, 0x35, 0x35, 0x26, 0x51, 0x30, 0x00, 0xc3, 0x6a, 0xfe, 0x40, 0xd5, 0xae, 0xd6, 0x3c, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x03, 0x67, 0x00, 0x30, 0x64, 0x02, 0x30, 0x17, 0x09, 0xf3, 0x87, 0x88, 0x50, 0x5a, 0xaf, 0xc8, 0xc0, 0x42, 0xbf, 0x47, 0x5f, 0xf5, 0x6c, 0x6a, 0x86, 0xe0, 0xc4, 0x27, 0x74, 0xe4, 0x38, 0x53, 0xd7, 0x05, 0x7f, 0x1b, 0x34, 0xe3, 0xc6, 0x2f, 0xb3, 0xca, 0x09, 0x3c, 0x37, 0x9d, 0xd7, 0xe7, 0xb8, 0x46, 0xf1, 0xfd, 0xa1, 0xe2, 0x71, 0x02, 0x30, 0x42, 0x59, 0x87, 0x43, 0xd4, 0x51, 0xdf, 0xba, 0xd3, 0x09, 0x32, 0x5a, 0xce, 0x88, 0x7e, 0x57, 0x3d, 0x9c, 0x5f, 0x42, 0x6b, 0xf5, 0x07, 0x2d, 0xb5, 0xf0, 0x82, 0x93, 0xf9, 0x59, 0x6f, 0xae, 0x64, 0xfa, 0x58, 0xe5, 0x8b, 0x1e, 0xe3, 0x63, 0xbe, 0xb5, 0x81, 0xcd, 0x6f, 0x02, 0x8c, 0x79, 0x30, 0x82, 0x03, 0x4c, 0x30, 0x82, 0x02, 0x34, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x7c, 0x4f, 0x04, 0x39, 0x1c, 0xd4, 0x99, 0x2d, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x44, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0b, 0x41, 0x66, 0x66, 0x69, 0x72, 0x6d, 0x54, 0x72, 0x75, 0x73, 0x74, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x16, 0x41, 0x66, 0x66, 0x69, 0x72, 0x6d, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x30, 0x30, 0x31, 0x32, 0x39, 0x31, 0x34, 0x30, 0x38, 0x32, 0x34, 0x5a, 0x17, 0x0d, 0x33, 0x30, 0x31, 0x32, 0x33, 0x31, 0x31, 0x34, 0x30, 0x38, 0x32, 0x34, 0x5a, 0x30, 0x44, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0b, 0x41, 0x66, 0x66, 0x69, 0x72, 0x6d, 0x54, 0x72, 0x75, 0x73, 0x74, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x16, 0x41, 0x66, 0x66, 0x69, 0x72, 0x6d, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xb4, 0x84, 0xcc, 0x33, 0x17, 0x2e, 0x6b, 0x94, 0x6c, 0x6b, 0x61, 0x52, 0xa0, 0xeb, 0xa3, 0xcf, 0x79, 0x94, 0x4c, 0xe5, 0x94, 0x80, 0x99, 0xcb, 0x55, 0x64, 0x44, 0x65, 0x8f, 0x67, 0x64, 0xe2, 0x06, 0xe3, 0x5c, 0x37, 0x49, 0xf6, 0x2f, 0x9b, 0x84, 0x84, 0x1e, 0x2d, 0xf2, 0x60, 0x9d, 0x30, 0x4e, 0xcc, 0x84, 0x85, 0xe2, 0x2c, 0xcf, 0x1e, 0x9e, 0xfe, 0x36, 0xab, 0x33, 0x77, 0x35, 0x44, 0xd8, 0x35, 0x96, 0x1a, 0x3d, 0x36, 0xe8, 0x7a, 0x0e, 0xd8, 0xd5, 0x47, 0xa1, 0x6a, 0x69, 0x8b, 0xd9, 0xfc, 0xbb, 0x3a, 0xae, 0x79, 0x5a, 0xd5, 0xf4, 0xd6, 0x71, 0xbb, 0x9a, 0x90, 0x23, 0x6b, 0x9a, 0xb7, 0x88, 0x74, 0x87, 0x0c, 0x1e, 0x5f, 0xb9, 0x9e, 0x2d, 0xfa, 0xab, 0x53, 0x2b, 0xdc, 0xbb, 0x76, 0x3e, 0x93, 0x4c, 0x08, 0x08, 0x8c, 0x1e, 0xa2, 0x23, 0x1c, 0xd4, 0x6a, 0xad, 0x22, 0xba, 0x99, 0x01, 0x2e, 0x6d, 0x65, 0xcb, 0xbe, 0x24, 0x66, 0x55, 0x24, 0x4b, 0x40, 0x44, 0xb1, 0x1b, 0xd7, 0xe1, 0xc2, 0x85, 0xc0, 0xde, 0x10, 0x3f, 0x3d, 0xed, 0xb8, 0xfc, 0xf1, 0xf1, 0x23, 0x53, 0xdc, 0xbf, 0x65, 0x97, 0x6f, 0xd9, 0xf9, 0x40, 0x71, 0x8d, 0x7d, 0xbd, 0x95, 0xd4, 0xce, 0xbe, 0xa0, 0x5e, 0x27, 0x23, 0xde, 0xfd, 0xa6, 0xd0, 0x26, 0x0e, 0x00, 0x29, 0xeb, 0x3c, 0x46, 0xf0, 0x3d, 0x60, 0xbf, 0x3f, 0x50, 0xd2, 0xdc, 0x26, 0x41, 0x51, 0x9e, 0x14, 0x37, 0x42, 0x04, 0xa3, 0x70, 0x57, 0xa8, 0x1b, 0x87, 0xed, 0x2d, 0xfa, 0x7b, 0xee, 0x8c, 0x0a, 0xe3, 0xa9, 0x66, 0x89, 0x19, 0xcb, 0x41, 0xf9, 0xdd, 0x44, 0x36, 0x61, 0xcf, 0xe2, 0x77, 0x46, 0xc8, 0x7d, 0xf6, 0xf4, 0x92, 0x81, 0x36, 0xfd, 0xdb, 0x34, 0xf1, 0x72, 0x7e, 0xf3, 0x0c, 0x16, 0xbd, 0xb4, 0x15, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x07, 0x1f, 0xd2, 0xe7, 0x9c, 0xda, 0xc2, 0x6e, 0xa2, 0x40, 0xb4, 0xb0, 0x7a, 0x50, 0x10, 0x50, 0x74, 0xc4, 0xc8, 0xbd, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x89, 0x57, 0xb2, 0x16, 0x7a, 0xa8, 0xc2, 0xfd, 0xd6, 0xd9, 0x9b, 0x9b, 0x34, 0xc2, 0x9c, 0xb4, 0x32, 0x14, 0x4d, 0xa7, 0xa4, 0xdf, 0xec, 0xbe, 0xa7, 0xbe, 0xf8, 0x43, 0xdb, 0x91, 0x37, 0xce, 0xb4, 0x32, 0x2e, 0x50, 0x55, 0x1a, 0x35, 0x4e, 0x76, 0x43, 0x71, 0x20, 0xef, 0x93, 0x77, 0x4e, 0x15, 0x70, 0x2e, 0x87, 0xc3, 0xc1, 0x1d, 0x6d, 0xdc, 0xcb, 0xb5, 0x27, 0xd4, 0x2c, 0x56, 0xd1, 0x52, 0x53, 0x3a, 0x44, 0xd2, 0x73, 0xc8, 0xc4, 0x1b, 0x05, 0x65, 0x5a, 0x62, 0x92, 0x9c, 0xee, 0x41, 0x8d, 0x31, 0xdb, 0xe7, 0x34, 0xea, 0x59, 0x21, 0xd5, 0x01, 0x7a, 0xd7, 0x64, 0xb8, 0x64, 0x39, 0xcd, 0xc9, 0xed, 0xaf, 0xed, 0x4b, 0x03, 0x48, 0xa7, 0xa0, 0x99, 0x01, 0x80, 0xdc, 0x65, 0xa3, 0x36, 0xae, 0x65, 0x59, 0x48, 0x4f, 0x82, 0x4b, 0xc8, 0x65, 0xf1, 0x57, 0x1d, 0xe5, 0x59, 0x2e, 0x0a, 0x3f, 0x6c, 0xd8, 0xd1, 0xf5, 0xe5, 0x09, 0xb4, 0x6c, 0x54, 0x00, 0x0a, 0xe0, 0x15, 0x4d, 0x87, 0x75, 0x6d, 0xb7, 0x58, 0x96, 0x5a, 0xdd, 0x6d, 0xd2, 0x00, 0xa0, 0xf4, 0x9b, 0x48, 0xbe, 0xc3, 0x37, 0xa4, 0xba, 0x36, 0xe0, 0x7c, 0x87, 0x85, 0x97, 0x1a, 0x15, 0xa2, 0xde, 0x2e, 0xa2, 0x5b, 0xbd, 0xaf, 0x18, 0xf9, 0x90, 0x50, 0xcd, 0x70, 0x59, 0xf8, 0x27, 0x67, 0x47, 0xcb, 0xc7, 0xa0, 0x07, 0x3a, 0x7d, 0xd1, 0x2c, 0x5d, 0x6c, 0x19, 0x3a, 0x66, 0xb5, 0x7d, 0xfd, 0x91, 0x6f, 0x82, 0xb1, 0xbe, 0x08, 0x93, 0xdb, 0x14, 0x47, 0xf1, 0xa2, 0x37, 0xc7, 0x45, 0x9e, 0x3c, 0xc7, 0x77, 0xaf, 0x64, 0xa8, 0x93, 0xdf, 0xf6, 0x69, 0x83, 0x82, 0x60, 0xf2, 0x49, 0x42, 0x34, 0xed, 0x5a, 0x00, 0x54, 0x85, 0x1c, 0x16, 0x36, 0x92, 0x0c, 0x5c, 0xfa, 0xa6, 0xad, 0xbf, 0xdb, 0x30, 0x82, 0x06, 0x14, 0x30, 0x82, 0x03, 0xfc, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x53, 0xec, 0x3b, 0xee, 0xfb, 0xb2, 0x48, 0x5f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x51, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x45, 0x53, 0x31, 0x42, 0x30, 0x40, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x39, 0x41, 0x75, 0x74, 0x6f, 0x72, 0x69, 0x64, 0x61, 0x64, 0x20, 0x64, 0x65, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x63, 0x69, 0x6f, 0x6e, 0x20, 0x46, 0x69, 0x72, 0x6d, 0x61, 0x70, 0x72, 0x6f, 0x66, 0x65, 0x73, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x43, 0x49, 0x46, 0x20, 0x41, 0x36, 0x32, 0x36, 0x33, 0x34, 0x30, 0x36, 0x38, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x39, 0x30, 0x35, 0x32, 0x30, 0x30, 0x38, 0x33, 0x38, 0x31, 0x35, 0x5a, 0x17, 0x0d, 0x33, 0x30, 0x31, 0x32, 0x33, 0x31, 0x30, 0x38, 0x33, 0x38, 0x31, 0x35, 0x5a, 0x30, 0x51, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x45, 0x53, 0x31, 0x42, 0x30, 0x40, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x39, 0x41, 0x75, 0x74, 0x6f, 0x72, 0x69, 0x64, 0x61, 0x64, 0x20, 0x64, 0x65, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x63, 0x69, 0x6f, 0x6e, 0x20, 0x46, 0x69, 0x72, 0x6d, 0x61, 0x70, 0x72, 0x6f, 0x66, 0x65, 0x73, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x43, 0x49, 0x46, 0x20, 0x41, 0x36, 0x32, 0x36, 0x33, 0x34, 0x30, 0x36, 0x38, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xca, 0x96, 0x6b, 0x8e, 0xea, 0xf8, 0xfb, 0xf1, 0xa2, 0x35, 0xe0, 0x7f, 0x4c, 0xda, 0xe0, 0xc3, 0x52, 0xd7, 0x7d, 0xb6, 0x10, 0xc8, 0x02, 0x5e, 0xb3, 0x43, 0x2a, 0xc4, 0x4f, 0x6a, 0xb2, 0xca, 0x1c, 0x5d, 0x28, 0x9a, 0x78, 0x11, 0x1a, 0x69, 0x59, 0x57, 0xaf, 0xb5, 0x20, 0x42, 0xe4, 0x8b, 0x0f, 0xe6, 0xdf, 0x5b, 0xa6, 0x03, 0x92, 0x2f, 0xf5, 0x11, 0xe4, 0x62, 0xd7, 0x32, 0x71, 0x38, 0xd9, 0x04, 0x0c, 0x71, 0xab, 0x3d, 0x51, 0x7e, 0x0f, 0x07, 0xdf, 0x63, 0x05, 0x5c, 0xe9, 0xbf, 0x94, 0x6f, 0xc1, 0x29, 0x82, 0xc0, 0xb4, 0xda, 0x51, 0xb0, 0xc1, 0x3c, 0xbb, 0xad, 0x37, 0x4a, 0x5c, 0xca, 0xf1, 0x4b, 0x36, 0x0e, 0x24, 0xab, 0xbf, 0xc3, 0x84, 0x77, 0xfd, 0xa8, 0x50, 0xf4, 0xb1, 0xe7, 0xc6, 0x2f, 0xd2, 0x2d, 0x59, 0x8d, 0x7a, 0x0a, 0x4e, 0x96, 0x69, 0x52, 0x02, 0xaa, 0x36, 0x98, 0xec, 0xfc, 0xfa, 0x14, 0x83, 0x0c, 0x37, 0x1f, 0xc9, 0x92, 0x37, 0x7f, 0xd7, 0x81, 0x2d, 0xe5, 0xc4, 0xb9, 0xe0, 0x3e, 0x34, 0xfe, 0x67, 0xf4, 0x3e, 0x66, 0xd1, 0xd3, 0xf4, 0x40, 0xcf, 0x5e, 0x62, 0x34, 0x0f, 0x70, 0x06, 0x3e, 0x20, 0x18, 0x5a, 0xce, 0xf7, 0x72, 0x1b, 0x25, 0x6c, 0x93, 0x74, 0x14, 0x93, 0xa3, 0x73, 0xb1, 0x0e, 0xaa, 0x87, 0x10, 0x23, 0x59, 0x5f, 0x20, 0x05, 0x19, 0x47, 0xed, 0x68, 0x8e, 0x92, 0x12, 0xca, 0x5d, 0xfc, 0xd6, 0x2b, 0xb2, 0x92, 0x3c, 0x20, 0xcf, 0xe1, 0x5f, 0xaf, 0x20, 0xbe, 0xa0, 0x76, 0x7f, 0x76, 0xe5, 0xec, 0x1a, 0x86, 0x61, 0x33, 0x3e, 0xe7, 0x7b, 0xb4, 0x3f, 0xa0, 0x0f, 0x8e, 0xa2, 0xb9, 0x6a, 0x6f, 0xb9, 0x87, 0x26, 0x6f, 0x41, 0x6c, 0x88, 0xa6, 0x50, 0xfd, 0x6a, 0x63, 0x0b, 0xf5, 0x93, 0x16, 0x1b, 0x19, 0x8f, 0xb2, 0xed, 0x9b, 0x9b, 0xc9, 0x90, 0xf5, 0x01, 0x0c, 0xdf, 0x19, 0x3d, 0x0f, 0x3e, 0x38, 0x23, 0xc9, 0x2f, 0x8f, 0x0c, 0xd1, 0x02, 0xfe, 0x1b, 0x55, 0xd6, 0x4e, 0xd0, 0x8d, 0x3c, 0xaf, 0x4f, 0xa4, 0xf3, 0xfe, 0xaf, 0x2a, 0xd3, 0x05, 0x9d, 0x79, 0x08, 0xa1, 0xcb, 0x57, 0x31, 0xb4, 0x9c, 0xc8, 0x90, 0xb2, 0x67, 0xf4, 0x18, 0x16, 0x93, 0x3a, 0xfc, 0x47, 0xd8, 0xd1, 0x78, 0x96, 0x31, 0x1f, 0xba, 0x2b, 0x0c, 0x5f, 0x5d, 0x99, 0xad, 0x63, 0x89, 0x5a, 0x24, 0x20, 0x76, 0xd8, 0xdf, 0xfd, 0xab, 0x4e, 0xa6, 0x22, 0xaa, 0x9d, 0x5e, 0xe6, 0x27, 0x8a, 0x7d, 0x68, 0x29, 0xa3, 0xe7, 0x8a, 0xb8, 0xda, 0x11, 0xbb, 0x17, 0x2d, 0x99, 0x9d, 0x13, 0x24, 0x46, 0xf7, 0xc5, 0xe2, 0xd8, 0x9f, 0x8e, 0x7f, 0xc7, 0x8f, 0x74, 0x6d, 0x5a, 0xb2, 0xe8, 0x72, 0xf5, 0xac, 0xee, 0x24, 0x10, 0xad, 0x2f, 0x14, 0xda, 0xff, 0x2d, 0x9a, 0x46, 0x71, 0x47, 0xbe, 0x42, 0xdf, 0xbb, 0x01, 0xdb, 0xf4, 0x7f, 0xd3, 0x28, 0x8f, 0x31, 0x59, 0x5b, 0xd3, 0xc9, 0x02, 0xa6, 0xb4, 0x52, 0xca, 0x6e, 0x97, 0xfb, 0x43, 0xc5, 0x08, 0x26, 0x6f, 0x8a, 0xf4, 0xbb, 0xfd, 0x9f, 0x28, 0xaa, 0x0d, 0xd5, 0x45, 0xf3, 0x13, 0x3a, 0x1d, 0xd8, 0xc0, 0x78, 0x8f, 0x41, 0x67, 0x3c, 0x1e, 0x94, 0x64, 0xae, 0x7b, 0x0b, 0xc5, 0xe8, 0xd9, 0x01, 0x88, 0x39, 0x1a, 0x97, 0x86, 0x64, 0x41, 0xd5, 0x3b, 0x87, 0x0c, 0x6e, 0xfa, 0x0f, 0xc6, 0xbd, 0x48, 0x14, 0xbf, 0x39, 0x4d, 0xd4, 0x9e, 0x41, 0xb6, 0x8f, 0x96, 0x1d, 0x63, 0x96, 0x93, 0xd9, 0x95, 0x06, 0x78, 0x31, 0x68, 0x9e, 0x37, 0x06, 0x3b, 0x80, 0x89, 0x45, 0x61, 0x39, 0x23, 0xc7, 0x1b, 0x44, 0xa3, 0x15, 0xe5, 0x1c, 0xf8, 0x92, 0x30, 0xbb, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x81, 0xef, 0x30, 0x81, 0xec, 0x30, 0x12, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x08, 0x30, 0x06, 0x01, 0x01, 0xff, 0x02, 0x01, 0x01, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x65, 0xcd, 0xeb, 0xab, 0x35, 0x1e, 0x00, 0x3e, 0x7e, 0xd5, 0x74, 0xc0, 0x1c, 0xb4, 0x73, 0x47, 0x0e, 0x1a, 0x64, 0x2f, 0x30, 0x81, 0xa6, 0x06, 0x03, 0x55, 0x1d, 0x20, 0x04, 0x81, 0x9e, 0x30, 0x81, 0x9b, 0x30, 0x81, 0x98, 0x06, 0x04, 0x55, 0x1d, 0x20, 0x00, 0x30, 0x81, 0x8f, 0x30, 0x2f, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x01, 0x16, 0x23, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x70, 0x72, 0x6f, 0x66, 0x65, 0x73, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x70, 0x73, 0x30, 0x5c, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x02, 0x30, 0x50, 0x1e, 0x4e, 0x00, 0x50, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x64, 0x00, 0x65, 0x00, 0x20, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x20, 0x00, 0x42, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6f, 0x00, 0x76, 0x00, 0x61, 0x00, 0x20, 0x00, 0x34, 0x00, 0x37, 0x00, 0x20, 0x00, 0x42, 0x00, 0x61, 0x00, 0x72, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x30, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x17, 0x7d, 0xa0, 0xf9, 0xb4, 0xdd, 0xc5, 0xc5, 0xeb, 0xad, 0x4b, 0x24, 0xb5, 0xa1, 0x02, 0xab, 0xdd, 0xa5, 0x88, 0x4a, 0xb2, 0x0f, 0x55, 0x4b, 0x2b, 0x57, 0x8c, 0x3b, 0xe5, 0x31, 0xdd, 0xfe, 0xc4, 0x32, 0xf1, 0xe7, 0x5b, 0x64, 0x96, 0x36, 0x32, 0x18, 0xec, 0xa5, 0x32, 0x77, 0xd7, 0xe3, 0x44, 0xb6, 0xc0, 0x11, 0x2a, 0x80, 0xb9, 0x3d, 0x6a, 0x6e, 0x7c, 0x9b, 0xd3, 0xad, 0xfc, 0xc3, 0xd6, 0xa3, 0xe6, 0x64, 0x29, 0x7c, 0xd1, 0xe1, 0x38, 0x1e, 0x82, 0x2b, 0xff, 0x27, 0x65, 0xaf, 0xfb, 0x16, 0x15, 0xc4, 0x2e, 0x71, 0x84, 0xe5, 0xb5, 0xff, 0xfa, 0xa4, 0x47, 0xbd, 0x64, 0x32, 0xbb, 0xf6, 0x25, 0x84, 0xa2, 0x27, 0x42, 0xf5, 0x20, 0xb0, 0xc2, 0x13, 0x10, 0x11, 0xcd, 0x10, 0x15, 0xba, 0x42, 0x90, 0x2a, 0xd2, 0x44, 0xe1, 0x96, 0x26, 0xeb, 0x31, 0x48, 0x12, 0xfd, 0x2a, 0xda, 0xc9, 0x06, 0xcf, 0x74, 0x1e, 0xa9, 0x4b, 0xd5, 0x87, 0x28, 0xf9, 0x79, 0x34, 0x92, 0x3e, 0x2e, 0x44, 0xe8, 0xf6, 0x8f, 0x4f, 0x8f, 0x35, 0x3f, 0x25, 0xb3, 0x39, 0xdc, 0x63, 0x2a, 0x90, 0x6b, 0x20, 0x5f, 0xc4, 0x52, 0x12, 0x4e, 0x97, 0x2c, 0x2a, 0xac, 0x9d, 0x97, 0xde, 0x48, 0xf2, 0xa3, 0x66, 0xdb, 0xc2, 0xd2, 0x83, 0x95, 0xa6, 0x66, 0xa7, 0x9e, 0x25, 0x0f, 0xe9, 0x0b, 0x33, 0x91, 0x65, 0x0a, 0x5a, 0xc3, 0xd9, 0x54, 0x12, 0xdd, 0xaf, 0xc3, 0x4e, 0x0e, 0x1f, 0x26, 0x5e, 0x0d, 0xdc, 0xb3, 0x8d, 0xec, 0xd5, 0x81, 0x70, 0xde, 0xd2, 0x4f, 0x24, 0x05, 0xf3, 0x6c, 0x4e, 0xf5, 0x4c, 0x49, 0x66, 0x8d, 0xd1, 0xff, 0xd2, 0x0b, 0x25, 0x41, 0x48, 0xfe, 0x51, 0x84, 0xc6, 0x42, 0xaf, 0x80, 0x04, 0xcf, 0xd0, 0x7e, 0x64, 0x49, 0xe4, 0xf2, 0xdf, 0xa2, 0xec, 0xb1, 0x4c, 0xc0, 0x2a, 0x1d, 0xe7, 0xb4, 0xb1, 0x65, 0xa2, 0xc4, 0xbc, 0xf1, 0x98, 0xf4, 0xaa, 0x70, 0x07, 0x63, 0xb4, 0xb8, 0xda, 0x3b, 0x4c, 0xfa, 0x40, 0x22, 0x30, 0x5b, 0x11, 0xa6, 0xf0, 0x05, 0x0e, 0xc6, 0x02, 0x03, 0x48, 0xab, 0x86, 0x9b, 0x85, 0xdd, 0xdb, 0xdd, 0xea, 0xa2, 0x76, 0x80, 0x73, 0x7d, 0xf5, 0x9c, 0x04, 0xc4, 0x45, 0x8d, 0xe7, 0xb9, 0x1c, 0x8b, 0x9e, 0xea, 0xd7, 0x75, 0xd1, 0x72, 0xb1, 0xde, 0x75, 0x44, 0xe7, 0x42, 0x7d, 0xe2, 0x57, 0x6b, 0x7d, 0xdc, 0x99, 0xbc, 0x3d, 0x83, 0x28, 0xea, 0x80, 0x93, 0x8d, 0xc5, 0x4c, 0x65, 0xc1, 0x70, 0x81, 0xb8, 0x38, 0xfc, 0x43, 0x31, 0xb2, 0xf6, 0x03, 0x34, 0x47, 0xb2, 0xac, 0xfb, 0x22, 0x06, 0xcb, 0x1e, 0xdd, 0x17, 0x47, 0x1c, 0x5f, 0x66, 0xb9, 0xd3, 0x1a, 0xa2, 0xda, 0x11, 0xb1, 0xa4, 0xbc, 0x23, 0xc9, 0xe4, 0xbe, 0x87, 0xff, 0xb9, 0x94, 0xb6, 0xf8, 0x5d, 0x20, 0x4a, 0xd4, 0x5f, 0xe7, 0xbd, 0x68, 0x7b, 0x65, 0xf2, 0x15, 0x1e, 0xd2, 0x3a, 0xa9, 0x2d, 0xe9, 0xd8, 0x6b, 0x24, 0xac, 0x97, 0x58, 0x44, 0x47, 0xad, 0x59, 0x18, 0xf1, 0x21, 0x65, 0x70, 0xde, 0xce, 0x34, 0x60, 0xa8, 0x40, 0xf1, 0xf3, 0x3c, 0xa4, 0xc3, 0x28, 0x23, 0x8c, 0xfe, 0x27, 0x33, 0x43, 0x40, 0xa0, 0x17, 0x3c, 0xeb, 0xea, 0x3b, 0xb0, 0x72, 0xa6, 0xa3, 0xb9, 0x4a, 0x4b, 0x5e, 0x16, 0x48, 0xf4, 0xb2, 0xbc, 0xc8, 0x8c, 0x92, 0xc5, 0x9d, 0x9f, 0xac, 0x72, 0x36, 0xbc, 0x34, 0x80, 0x34, 0x6b, 0xa9, 0x8b, 0x92, 0xc0, 0xb8, 0x17, 0xed, 0xec, 0x76, 0x53, 0xf5, 0x24, 0x01, 0x8c, 0xb3, 0x22, 0xe8, 0x4b, 0x7c, 0x55, 0xc6, 0x9d, 0xfa, 0xa3, 0x14, 0xbb, 0x65, 0x85, 0x6e, 0x6e, 0x4f, 0x12, 0x7e, 0x0a, 0x3c, 0x9d, 0x95, 0x30, 0x82, 0x03, 0x77, 0x30, 0x82, 0x02, 0x5f, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x04, 0x02, 0x00, 0x00, 0xb9, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x5a, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x49, 0x45, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x09, 0x42, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x72, 0x65, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x0a, 0x43, 0x79, 0x62, 0x65, 0x72, 0x54, 0x72, 0x75, 0x73, 0x74, 0x31, 0x22, 0x30, 0x20, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x19, 0x42, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x43, 0x79, 0x62, 0x65, 0x72, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x30, 0x30, 0x35, 0x31, 0x32, 0x31, 0x38, 0x34, 0x36, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x32, 0x35, 0x30, 0x35, 0x31, 0x32, 0x32, 0x33, 0x35, 0x39, 0x30, 0x30, 0x5a, 0x30, 0x5a, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x49, 0x45, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x09, 0x42, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x72, 0x65, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x0a, 0x43, 0x79, 0x62, 0x65, 0x72, 0x54, 0x72, 0x75, 0x73, 0x74, 0x31, 0x22, 0x30, 0x20, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x19, 0x42, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x43, 0x79, 0x62, 0x65, 0x72, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xa3, 0x04, 0xbb, 0x22, 0xab, 0x98, 0x3d, 0x57, 0xe8, 0x26, 0x72, 0x9a, 0xb5, 0x79, 0xd4, 0x29, 0xe2, 0xe1, 0xe8, 0x95, 0x80, 0xb1, 0xb0, 0xe3, 0x5b, 0x8e, 0x2b, 0x29, 0x9a, 0x64, 0xdf, 0xa1, 0x5d, 0xed, 0xb0, 0x09, 0x05, 0x6d, 0xdb, 0x28, 0x2e, 0xce, 0x62, 0xa2, 0x62, 0xfe, 0xb4, 0x88, 0xda, 0x12, 0xeb, 0x38, 0xeb, 0x21, 0x9d, 0xc0, 0x41, 0x2b, 0x01, 0x52, 0x7b, 0x88, 0x77, 0xd3, 0x1c, 0x8f, 0xc7, 0xba, 0xb9, 0x88, 0xb5, 0x6a, 0x09, 0xe7, 0x73, 0xe8, 0x11, 0x40, 0xa7, 0xd1, 0xcc, 0xca, 0x62, 0x8d, 0x2d, 0xe5, 0x8f, 0x0b, 0xa6, 0x50, 0xd2, 0xa8, 0x50, 0xc3, 0x28, 0xea, 0xf5, 0xab, 0x25, 0x87, 0x8a, 0x9a, 0x96, 0x1c, 0xa9, 0x67, 0xb8, 0x3f, 0x0c, 0xd5, 0xf7, 0xf9, 0x52, 0x13, 0x2f, 0xc2, 0x1b, 0xd5, 0x70, 0x70, 0xf0, 0x8f, 0xc0, 0x12, 0xca, 0x06, 0xcb, 0x9a, 0xe1, 0xd9, 0xca, 0x33, 0x7a, 0x77, 0xd6, 0xf8, 0xec, 0xb9, 0xf1, 0x68, 0x44, 0x42, 0x48, 0x13, 0xd2, 0xc0, 0xc2, 0xa4, 0xae, 0x5e, 0x60, 0xfe, 0xb6, 0xa6, 0x05, 0xfc, 0xb4, 0xdd, 0x07, 0x59, 0x02, 0xd4, 0x59, 0x18, 0x98, 0x63, 0xf5, 0xa5, 0x63, 0xe0, 0x90, 0x0c, 0x7d, 0x5d, 0xb2, 0x06, 0x7a, 0xf3, 0x85, 0xea, 0xeb, 0xd4, 0x03, 0xae, 0x5e, 0x84, 0x3e, 0x5f, 0xff, 0x15, 0xed, 0x69, 0xbc, 0xf9, 0x39, 0x36, 0x72, 0x75, 0xcf, 0x77, 0x52, 0x4d, 0xf3, 0xc9, 0x90, 0x2c, 0xb9, 0x3d, 0xe5, 0xc9, 0x23, 0x53, 0x3f, 0x1f, 0x24, 0x98, 0x21, 0x5c, 0x07, 0x99, 0x29, 0xbd, 0xc6, 0x3a, 0xec, 0xe7, 0x6e, 0x86, 0x3a, 0x6b, 0x97, 0x74, 0x63, 0x33, 0xbd, 0x68, 0x18, 0x31, 0xf0, 0x78, 0x8d, 0x76, 0xbf, 0xfc, 0x9e, 0x8e, 0x5d, 0x2a, 0x86, 0xa7, 0x4d, 0x90, 0xdc, 0x27, 0x1a, 0x39, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x45, 0x30, 0x43, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xe5, 0x9d, 0x59, 0x30, 0x82, 0x47, 0x58, 0xcc, 0xac, 0xfa, 0x08, 0x54, 0x36, 0x86, 0x7b, 0x3a, 0xb5, 0x04, 0x4d, 0xf0, 0x30, 0x12, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x08, 0x30, 0x06, 0x01, 0x01, 0xff, 0x02, 0x01, 0x03, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x85, 0x0c, 0x5d, 0x8e, 0xe4, 0x6f, 0x51, 0x68, 0x42, 0x05, 0xa0, 0xdd, 0xbb, 0x4f, 0x27, 0x25, 0x84, 0x03, 0xbd, 0xf7, 0x64, 0xfd, 0x2d, 0xd7, 0x30, 0xe3, 0xa4, 0x10, 0x17, 0xeb, 0xda, 0x29, 0x29, 0xb6, 0x79, 0x3f, 0x76, 0xf6, 0x19, 0x13, 0x23, 0xb8, 0x10, 0x0a, 0xf9, 0x58, 0xa4, 0xd4, 0x61, 0x70, 0xbd, 0x04, 0x61, 0x6a, 0x12, 0x8a, 0x17, 0xd5, 0x0a, 0xbd, 0xc5, 0xbc, 0x30, 0x7c, 0xd6, 0xe9, 0x0c, 0x25, 0x8d, 0x86, 0x40, 0x4f, 0xec, 0xcc, 0xa3, 0x7e, 0x38, 0xc6, 0x37, 0x11, 0x4f, 0xed, 0xdd, 0x68, 0x31, 0x8e, 0x4c, 0xd2, 0xb3, 0x01, 0x74, 0xee, 0xbe, 0x75, 0x5e, 0x07, 0x48, 0x1a, 0x7f, 0x70, 0xff, 0x16, 0x5c, 0x84, 0xc0, 0x79, 0x85, 0xb8, 0x05, 0xfd, 0x7f, 0xbe, 0x65, 0x11, 0xa3, 0x0f, 0xc0, 0x02, 0xb4, 0xf8, 0x52, 0x37, 0x39, 0x04, 0xd5, 0xa9, 0x31, 0x7a, 0x18, 0xbf, 0xa0, 0x2a, 0xf4, 0x12, 0x99, 0xf7, 0xa3, 0x45, 0x82, 0xe3, 0x3c, 0x5e, 0xf5, 0x9d, 0x9e, 0xb5, 0xc8, 0x9e, 0x7c, 0x2e, 0xc8, 0xa4, 0x9e, 0x4e, 0x08, 0x14, 0x4b, 0x6d, 0xfd, 0x70, 0x6d, 0x6b, 0x1a, 0x63, 0xbd, 0x64, 0xe6, 0x1f, 0xb7, 0xce, 0xf0, 0xf2, 0x9f, 0x2e, 0xbb, 0x1b, 0xb7, 0xf2, 0x50, 0x88, 0x73, 0x92, 0xc2, 0xe2, 0xe3, 0x16, 0x8d, 0x9a, 0x32, 0x02, 0xab, 0x8e, 0x18, 0xdd, 0xe9, 0x10, 0x11, 0xee, 0x7e, 0x35, 0xab, 0x90, 0xaf, 0x3e, 0x30, 0x94, 0x7a, 0xd0, 0x33, 0x3d, 0xa7, 0x65, 0x0f, 0xf5, 0xfc, 0x8e, 0x9e, 0x62, 0xcf, 0x47, 0x44, 0x2c, 0x01, 0x5d, 0xbb, 0x1d, 0xb5, 0x32, 0xd2, 0x47, 0xd2, 0x38, 0x2e, 0xd0, 0xfe, 0x81, 0xdc, 0x32, 0x6a, 0x1e, 0xb5, 0xee, 0x3c, 0xd5, 0xfc, 0xe7, 0x81, 0x1d, 0x19, 0xc3, 0x24, 0x42, 0xea, 0x63, 0x39, 0xa9, 0x30, 0x82, 0x05, 0x59, 0x30, 0x82, 0x03, 0x41, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x02, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x4e, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x4e, 0x4f, 0x31, 0x1d, 0x30, 0x1b, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x14, 0x42, 0x75, 0x79, 0x70, 0x61, 0x73, 0x73, 0x20, 0x41, 0x53, 0x2d, 0x39, 0x38, 0x33, 0x31, 0x36, 0x33, 0x33, 0x32, 0x37, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x17, 0x42, 0x75, 0x79, 0x70, 0x61, 0x73, 0x73, 0x20, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x32, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x30, 0x31, 0x30, 0x32, 0x36, 0x30, 0x38, 0x33, 0x38, 0x30, 0x33, 0x5a, 0x17, 0x0d, 0x34, 0x30, 0x31, 0x30, 0x32, 0x36, 0x30, 0x38, 0x33, 0x38, 0x30, 0x33, 0x5a, 0x30, 0x4e, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x4e, 0x4f, 0x31, 0x1d, 0x30, 0x1b, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x14, 0x42, 0x75, 0x79, 0x70, 0x61, 0x73, 0x73, 0x20, 0x41, 0x53, 0x2d, 0x39, 0x38, 0x33, 0x31, 0x36, 0x33, 0x33, 0x32, 0x37, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x17, 0x42, 0x75, 0x79, 0x70, 0x61, 0x73, 0x73, 0x20, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x32, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xd7, 0xc7, 0x5e, 0xf7, 0xc1, 0x07, 0xd4, 0x77, 0xfb, 0x43, 0x21, 0xf4, 0xf4, 0xf5, 0x69, 0xe4, 0xee, 0x32, 0x01, 0xdb, 0xa3, 0x86, 0x1f, 0xe4, 0x59, 0x0d, 0xba, 0xe7, 0x75, 0x83, 0x52, 0xeb, 0xea, 0x1c, 0x61, 0x15, 0x48, 0xbb, 0x1d, 0x07, 0xca, 0x8c, 0xae, 0xb0, 0xdc, 0x96, 0x9d, 0xea, 0xc3, 0x60, 0x92, 0x86, 0x82, 0x28, 0x73, 0x9c, 0x56, 0x06, 0xff, 0x4b, 0x64, 0xf0, 0x0c, 0x2a, 0x37, 0x49, 0xb5, 0xe5, 0xcf, 0x0c, 0x7c, 0xee, 0xf1, 0x4a, 0xbb, 0x73, 0x30, 0x65, 0xf3, 0xd5, 0x2f, 0x83, 0xb6, 0x7e, 0xe3, 0xe7, 0xf5, 0x9e, 0xab, 0x60, 0xf9, 0xd3, 0xf1, 0x9d, 0x92, 0x74, 0x8a, 0xe4, 0x1c, 0x96, 0xac, 0x5b, 0x80, 0xe9, 0xb5, 0xf4, 0x31, 0x87, 0xa3, 0x51, 0xfc, 0xc7, 0x7e, 0xa1, 0x6f, 0x8e, 0x53, 0x77, 0xd4, 0x97, 0xc1, 0x55, 0x33, 0x92, 0x3e, 0x18, 0x2f, 0x75, 0xd4, 0xad, 0x86, 0x49, 0xcb, 0x95, 0xaf, 0x54, 0x06, 0x6c, 0xd8, 0x06, 0x13, 0x8d, 0x5b, 0xff, 0xe1, 0x26, 0x19, 0x59, 0xc0, 0x24, 0xba, 0x81, 0x71, 0x79, 0x90, 0x44, 0x50, 0x68, 0x24, 0x94, 0x5f, 0xb8, 0xb3, 0x11, 0xf1, 0x29, 0x41, 0x61, 0xa3, 0x41, 0xcb, 0x23, 0x36, 0xd5, 0xc1, 0xf1, 0x32, 0x50, 0x10, 0x4e, 0x7f, 0xf4, 0x86, 0x93, 0xec, 0x84, 0xd3, 0x8e, 0xbc, 0x4b, 0xbf, 0x5c, 0x01, 0x4e, 0x07, 0x3d, 0xdc, 0x14, 0x8a, 0x94, 0x0a, 0xa4, 0xea, 0x73, 0xfb, 0x0b, 0x51, 0xe8, 0x13, 0x07, 0x18, 0xfa, 0x0e, 0xf1, 0x2b, 0xd1, 0x54, 0x15, 0x7d, 0x3c, 0xe1, 0xf7, 0xb4, 0x19, 0x42, 0x67, 0x62, 0x5e, 0x77, 0xe0, 0xa2, 0x55, 0xec, 0xb6, 0xd9, 0x69, 0x17, 0xd5, 0x3a, 0xaf, 0x44, 0xed, 0x4a, 0xc5, 0x9e, 0xe4, 0x7a, 0x27, 0x7c, 0xe5, 0x75, 0xd7, 0xaa, 0xcb, 0x25, 0xe7, 0xdf, 0x6b, 0x0a, 0xdb, 0x0f, 0x4d, 0x93, 0x4e, 0xa8, 0xa0, 0xcd, 0x7b, 0x2e, 0xf2, 0x59, 0x01, 0x6a, 0xb7, 0x0d, 0xb8, 0x07, 0x81, 0x7e, 0x8b, 0x38, 0x1b, 0x38, 0xe6, 0x0a, 0x57, 0x99, 0x3d, 0xee, 0x21, 0xe8, 0xa3, 0xf5, 0x0c, 0x16, 0xdd, 0x8b, 0xec, 0x34, 0x8e, 0x9c, 0x2a, 0x1c, 0x00, 0x15, 0x17, 0x8d, 0x68, 0x83, 0xd2, 0x70, 0x9f, 0x18, 0x08, 0xcd, 0x11, 0x68, 0xd5, 0xc9, 0x6b, 0x52, 0xcd, 0xc4, 0x46, 0x8f, 0xdc, 0xb5, 0xf3, 0xd8, 0x57, 0x73, 0x1e, 0xe9, 0x94, 0x39, 0x04, 0xbf, 0xd3, 0xde, 0x38, 0xde, 0xb4, 0x53, 0xec, 0x69, 0x1c, 0xa2, 0x7e, 0xc4, 0x8f, 0xe4, 0x1b, 0x70, 0xad, 0xf2, 0xa2, 0xf9, 0xfb, 0xf7, 0x16, 0x64, 0x66, 0x69, 0x9f, 0x49, 0x51, 0xa2, 0xe2, 0x15, 0x18, 0x67, 0x06, 0x4a, 0x7f, 0xd5, 0x6c, 0xb5, 0x4d, 0xb3, 0x33, 0xe0, 0x61, 0xeb, 0x5d, 0xbe, 0xe9, 0x98, 0x0f, 0x32, 0xd7, 0x1d, 0x4b, 0x3c, 0x2e, 0x5a, 0x01, 0x52, 0x91, 0x09, 0xf2, 0xdf, 0xea, 0x8d, 0xd8, 0x06, 0x40, 0x63, 0xaa, 0x11, 0xe4, 0xfe, 0xc3, 0x37, 0x9e, 0x14, 0x52, 0x3f, 0xf4, 0xe2, 0xcc, 0xf2, 0x61, 0x93, 0xd1, 0xfd, 0x67, 0x6b, 0xd7, 0x52, 0xae, 0xbf, 0x68, 0xab, 0x40, 0x43, 0xa0, 0x57, 0x35, 0x53, 0x78, 0xf0, 0x53, 0xf8, 0x61, 0x42, 0x07, 0x64, 0xc6, 0xd7, 0x6f, 0x9b, 0x4c, 0x38, 0x0d, 0x63, 0xac, 0x62, 0xaf, 0x36, 0x8b, 0xa2, 0x73, 0x0a, 0x0d, 0xf5, 0x21, 0xbd, 0x74, 0xaa, 0x4d, 0xea, 0x72, 0x03, 0x49, 0xdb, 0xc7, 0x5f, 0x1d, 0x62, 0x63, 0xc7, 0xfd, 0xdd, 0x91, 0xec, 0x33, 0xee, 0xf5, 0x6d, 0xb4, 0x6e, 0x30, 0x68, 0xde, 0xc8, 0xd6, 0x26, 0xb0, 0x75, 0x5e, 0x7b, 0xb4, 0x07, 0x20, 0x98, 0xa1, 0x76, 0x32, 0xb8, 0x4d, 0x6c, 0x4f, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xc9, 0x80, 0x77, 0xe0, 0x62, 0x92, 0x82, 0xf5, 0x46, 0x9c, 0xf3, 0xba, 0xf7, 0x4c, 0xc3, 0xde, 0xb8, 0xa3, 0xad, 0x39, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x53, 0x5f, 0x21, 0xf5, 0xba, 0xb0, 0x3a, 0x52, 0x39, 0x2c, 0x92, 0xb0, 0x6c, 0x00, 0xc9, 0xef, 0xce, 0x20, 0xef, 0x06, 0xf2, 0x96, 0x9e, 0xe9, 0xa4, 0x74, 0x7f, 0x7a, 0x16, 0xfc, 0xb7, 0xf5, 0xb6, 0xfb, 0x15, 0x1b, 0x3f, 0xab, 0xa6, 0xc0, 0x72, 0x5d, 0x10, 0xb1, 0x71, 0xee, 0xbc, 0x4f, 0xe3, 0xad, 0xac, 0x03, 0x6d, 0x2e, 0x71, 0x2e, 0xaf, 0xc4, 0xe3, 0xad, 0xa3, 0xbd, 0x0c, 0x11, 0xa7, 0xb4, 0xff, 0x4a, 0xb2, 0x7b, 0x10, 0x10, 0x1f, 0xa7, 0x57, 0x41, 0xb2, 0xc0, 0xae, 0xf4, 0x2c, 0x59, 0xd6, 0x47, 0x10, 0x88, 0xf3, 0x21, 0x51, 0x29, 0x30, 0xca, 0x60, 0x86, 0xaf, 0x46, 0xab, 0x1d, 0xed, 0x3a, 0x5b, 0xb0, 0x94, 0xde, 0x44, 0xe3, 0x41, 0x08, 0xa2, 0xc1, 0xec, 0x1d, 0xd6, 0xfd, 0x4f, 0xb6, 0xd6, 0x47, 0xd0, 0x14, 0x0b, 0xca, 0xe6, 0xca, 0xb5, 0x7b, 0x77, 0x7e, 0x41, 0x1f, 0x5e, 0x83, 0xc7, 0xb6, 0x8c, 0x39, 0x96, 0xb0, 0x3f, 0x96, 0x81, 0x41, 0x6f, 0x60, 0x90, 0xe2, 0xe8, 0xf9, 0xfb, 0x22, 0x71, 0xd9, 0x7d, 0xb3, 0x3d, 0x46, 0xbf, 0xb4, 0x84, 0xaf, 0x90, 0x1c, 0x0f, 0x8f, 0x12, 0x6a, 0xaf, 0xef, 0xee, 0x1e, 0x7a, 0xae, 0x02, 0x4a, 0x8a, 0x17, 0x2b, 0x76, 0xfe, 0xac, 0x54, 0x89, 0x24, 0x2c, 0x4f, 0x3f, 0xb6, 0xb2, 0xa7, 0x4e, 0x8c, 0xa8, 0x91, 0x97, 0xfb, 0x29, 0xc6, 0x7b, 0x5c, 0x2d, 0xb9, 0xcb, 0x66, 0xb6, 0xb7, 0xa8, 0x5b, 0x12, 0x51, 0x85, 0xb5, 0x09, 0x7e, 0x62, 0x78, 0x70, 0xfe, 0xa9, 0x6a, 0x60, 0xb6, 0x1d, 0x0e, 0x79, 0x0c, 0xfd, 0xca, 0xea, 0x24, 0x80, 0x72, 0xc3, 0x97, 0x3f, 0xf2, 0x77, 0xab, 0x43, 0x22, 0x0a, 0xc7, 0xeb, 0xb6, 0x0c, 0x84, 0x82, 0x2c, 0x80, 0x6b, 0x41, 0x8a, 0x08, 0xc0, 0xeb, 0xa5, 0x6b, 0xdf, 0x99, 0x12, 0xcb, 0x8a, 0xd5, 0x5e, 0x80, 0x0c, 0x91, 0xe0, 0x26, 0x08, 0x36, 0x48, 0xc5, 0xfa, 0x38, 0x11, 0x35, 0xff, 0x25, 0x83, 0x2d, 0xf2, 0x7a, 0xbf, 0xda, 0xfd, 0x8e, 0xfe, 0xa5, 0xcb, 0x45, 0x2c, 0x1f, 0xc4, 0x88, 0x53, 0xae, 0x77, 0x0e, 0xd9, 0x9a, 0x76, 0xc5, 0x8e, 0x2c, 0x1d, 0xa3, 0xba, 0xd5, 0xec, 0x32, 0xae, 0xc0, 0xaa, 0xac, 0xf7, 0xd1, 0x7a, 0x4d, 0xeb, 0xd4, 0x07, 0xe2, 0x48, 0xf7, 0x22, 0x8e, 0xb0, 0xa4, 0x9f, 0x6a, 0xce, 0x8e, 0xb2, 0xb2, 0x60, 0xf4, 0xa3, 0x22, 0xd0, 0x23, 0xeb, 0x94, 0x5a, 0x7a, 0x69, 0xdd, 0x0f, 0xbf, 0x40, 0x57, 0xac, 0x6b, 0x59, 0x50, 0xd9, 0xa3, 0x99, 0xe1, 0x6e, 0xfe, 0x8d, 0x01, 0x79, 0x27, 0x23, 0x15, 0xde, 0x92, 0x9d, 0x7b, 0x09, 0x4d, 0x5a, 0xe7, 0x4b, 0x48, 0x30, 0x5a, 0x18, 0xe6, 0x0a, 0x6d, 0xe6, 0x8f, 0xe0, 0xd2, 0xbb, 0xe6, 0xdf, 0x7c, 0x6e, 0x21, 0x82, 0xc1, 0x68, 0x39, 0x4d, 0xb4, 0x98, 0x58, 0x66, 0x62, 0xcc, 0x4a, 0x90, 0x5e, 0xc3, 0xfa, 0x27, 0x04, 0xb1, 0x79, 0x15, 0x74, 0x99, 0xcc, 0xbe, 0xad, 0x20, 0xde, 0x26, 0x60, 0x1c, 0xeb, 0x56, 0x51, 0xa6, 0xa3, 0xea, 0xe4, 0xa3, 0x3f, 0xa7, 0xff, 0x61, 0xdc, 0xf1, 0x5a, 0x4d, 0x6c, 0x32, 0x23, 0x43, 0xee, 0xac, 0xa8, 0xee, 0xee, 0x4a, 0x12, 0x09, 0x3c, 0x5d, 0x71, 0xc2, 0xbe, 0x79, 0xfa, 0xc2, 0x87, 0x68, 0x1d, 0x0b, 0xfd, 0x5c, 0x69, 0xcc, 0x06, 0xd0, 0x9a, 0x7d, 0x54, 0x99, 0x2a, 0xc9, 0x39, 0x1a, 0x19, 0xaf, 0x4b, 0x2a, 0x43, 0xf3, 0x63, 0x5d, 0x5a, 0x58, 0xe2, 0x2f, 0xe3, 0x1d, 0xe4, 0xa9, 0xd6, 0xd0, 0x0a, 0xd0, 0x9e, 0xbf, 0xd7, 0x81, 0x09, 0xf1, 0xc9, 0xc7, 0x26, 0x0d, 0xac, 0x98, 0x16, 0x56, 0xa0, 0x30, 0x82, 0x03, 0x77, 0x30, 0x82, 0x02, 0x5f, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x5c, 0x33, 0xcb, 0x62, 0x2c, 0x5f, 0xb3, 0x32, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x3c, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x15, 0x41, 0x74, 0x6f, 0x73, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x32, 0x30, 0x31, 0x31, 0x31, 0x0d, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x04, 0x41, 0x74, 0x6f, 0x73, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x44, 0x45, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x31, 0x30, 0x37, 0x30, 0x37, 0x31, 0x34, 0x35, 0x38, 0x33, 0x30, 0x5a, 0x17, 0x0d, 0x33, 0x30, 0x31, 0x32, 0x33, 0x31, 0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30, 0x3c, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x15, 0x41, 0x74, 0x6f, 0x73, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x32, 0x30, 0x31, 0x31, 0x31, 0x0d, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x04, 0x41, 0x74, 0x6f, 0x73, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x44, 0x45, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0x95, 0x85, 0x3b, 0x97, 0x6f, 0x2a, 0x3b, 0x2e, 0x3b, 0xcf, 0xa6, 0xf3, 0x29, 0x35, 0xbe, 0xcf, 0x18, 0xac, 0x3e, 0xaa, 0xd9, 0xf8, 0x4d, 0xa0, 0x3e, 0x1a, 0x47, 0xb9, 0xbc, 0x9a, 0xdf, 0xf2, 0xfe, 0xcc, 0x3e, 0x47, 0xe8, 0x7a, 0x96, 0xc2, 0x24, 0x8e, 0x35, 0xf4, 0xa9, 0x0c, 0xfc, 0x82, 0xfd, 0x6d, 0xc1, 0x72, 0x62, 0x27, 0xbd, 0xea, 0x6b, 0xeb, 0xe7, 0x8a, 0xcc, 0x54, 0x3e, 0x90, 0x50, 0xcf, 0x80, 0xd4, 0x95, 0xfb, 0xe8, 0xb5, 0x82, 0xd4, 0x14, 0xc5, 0xb6, 0xa9, 0x55, 0x25, 0x57, 0xdb, 0xb1, 0x50, 0xf6, 0xb0, 0x60, 0x64, 0x59, 0x7a, 0x69, 0xcf, 0x03, 0xb7, 0x6f, 0x0d, 0xbe, 0xca, 0x3e, 0x6f, 0x74, 0x72, 0xea, 0xaa, 0x30, 0x2a, 0x73, 0x62, 0xbe, 0x49, 0x91, 0x61, 0xc8, 0x11, 0xfe, 0x0e, 0x03, 0x2a, 0xf7, 0x6a, 0x20, 0xdc, 0x02, 0x15, 0x0d, 0x5e, 0x15, 0x6a, 0xfc, 0xe3, 0x82, 0xc1, 0xb5, 0xc5, 0x9d, 0x64, 0x09, 0x6c, 0xa3, 0x59, 0x98, 0x07, 0x27, 0xc7, 0x1b, 0x96, 0x2b, 0x61, 0x74, 0x71, 0x6c, 0x43, 0xf1, 0xf7, 0x35, 0x89, 0x10, 0xe0, 0x9e, 0xec, 0x55, 0xa1, 0x37, 0x22, 0xa2, 0x87, 0x04, 0x05, 0x2c, 0x47, 0x7d, 0xb4, 0x1c, 0xb9, 0x62, 0x29, 0x66, 0x28, 0xca, 0xb7, 0xe1, 0x93, 0xf5, 0xa4, 0x94, 0x03, 0x99, 0xb9, 0x70, 0x85, 0xb5, 0xe6, 0x48, 0xea, 0x8d, 0x50, 0xfc, 0xd9, 0xde, 0xcc, 0x6f, 0x07, 0x0e, 0xdd, 0x0b, 0x72, 0x9d, 0x80, 0x30, 0x16, 0x07, 0x95, 0x3f, 0x28, 0x0e, 0xfd, 0xc5, 0x75, 0x4f, 0x53, 0xd6, 0x74, 0x9a, 0xb4, 0x24, 0x2e, 0x8e, 0x02, 0x91, 0xcf, 0x76, 0xc5, 0x9b, 0x1e, 0x55, 0x74, 0x9c, 0x78, 0x21, 0xb1, 0xf0, 0x2d, 0xf1, 0x0b, 0x9f, 0xc2, 0xd5, 0x96, 0x18, 0x1f, 0xf0, 0x54, 0x22, 0x7a, 0x8c, 0x07, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x7d, 0x30, 0x7b, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xa7, 0xa5, 0x06, 0xb1, 0x2c, 0xa6, 0x09, 0x60, 0xee, 0xd1, 0x97, 0xe9, 0x70, 0xae, 0xbc, 0x3b, 0x19, 0x6c, 0xdb, 0x21, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xa7, 0xa5, 0x06, 0xb1, 0x2c, 0xa6, 0x09, 0x60, 0xee, 0xd1, 0x97, 0xe9, 0x70, 0xae, 0xbc, 0x3b, 0x19, 0x6c, 0xdb, 0x21, 0x30, 0x18, 0x06, 0x03, 0x55, 0x1d, 0x20, 0x04, 0x11, 0x30, 0x0f, 0x30, 0x0d, 0x06, 0x0b, 0x2b, 0x06, 0x01, 0x04, 0x01, 0xb0, 0x2d, 0x03, 0x04, 0x01, 0x01, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x26, 0x77, 0x34, 0xdb, 0x94, 0x48, 0x86, 0x2a, 0x41, 0x9d, 0x2c, 0x3e, 0x06, 0x90, 0x60, 0xc4, 0x8c, 0xac, 0x0b, 0x54, 0xb8, 0x1f, 0xb9, 0x7b, 0xd3, 0x07, 0x39, 0xe4, 0xfa, 0x3e, 0x7b, 0xb2, 0x3d, 0x4e, 0xed, 0x9f, 0x23, 0xbd, 0x97, 0xf3, 0x6b, 0x5c, 0xef, 0xee, 0xfd, 0x40, 0xa6, 0xdf, 0xa1, 0x93, 0xa1, 0x0a, 0x86, 0xac, 0xef, 0x20, 0xd0, 0x79, 0x01, 0xbd, 0x78, 0xf7, 0x19, 0xd8, 0x24, 0x31, 0x34, 0x04, 0x01, 0xa6, 0xba, 0x15, 0x9a, 0xc3, 0x27, 0xdc, 0xd8, 0x4f, 0x0f, 0xcc, 0x18, 0x63, 0xff, 0x99, 0x0f, 0x0e, 0x91, 0x6b, 0x75, 0x16, 0xe1, 0x21, 0xfc, 0xd8, 0x26, 0xc7, 0x47, 0xb7, 0xa6, 0xcf, 0x58, 0x72, 0x71, 0x7e, 0xba, 0xe1, 0x4d, 0x95, 0x47, 0x3b, 0xc9, 0xaf, 0x6d, 0xa1, 0xb4, 0xc1, 0xec, 0x89, 0xf6, 0xb4, 0x0f, 0x38, 0xb5, 0xe2, 0x64, 0xdc, 0x25, 0xcf, 0xa6, 0xdb, 0xeb, 0x9a, 0x5c, 0x99, 0xa1, 0xc5, 0x08, 0xde, 0xfd, 0xe6, 0xda, 0xd5, 0xd6, 0x5a, 0x45, 0x0c, 0xc4, 0xb7, 0xc2, 0xb5, 0x14, 0xef, 0xb4, 0x11, 0xff, 0x0e, 0x15, 0xb5, 0xf5, 0xf5, 0xdb, 0xc6, 0xbd, 0xeb, 0x5a, 0xa7, 0xf0, 0x56, 0x22, 0xa9, 0x3c, 0x65, 0x54, 0xc6, 0x15, 0xa8, 0xbd, 0x86, 0x9e, 0xcd, 0x83, 0x96, 0x68, 0x7a, 0x71, 0x81, 0x89, 0xe1, 0x0b, 0xe1, 0xea, 0x11, 0x1b, 0x68, 0x08, 0xcc, 0x69, 0x9e, 0xec, 0x9e, 0x41, 0x9e, 0x44, 0x32, 0x26, 0x7a, 0xe2, 0x87, 0x0a, 0x71, 0x3d, 0xeb, 0xe4, 0x5a, 0xa4, 0xd2, 0xdb, 0xc5, 0xcd, 0xc6, 0xde, 0x60, 0x7f, 0xb9, 0xf3, 0x4f, 0x44, 0x92, 0xef, 0x2a, 0xb7, 0x18, 0x3e, 0xa7, 0x19, 0xd9, 0x0b, 0x7d, 0xb1, 0x37, 0x41, 0x42, 0xb0, 0xba, 0x60, 0x1d, 0xf2, 0xfe, 0x09, 0x11, 0xb0, 0xf0, 0x87, 0x7b, 0xa7, 0x9d, 0x30, 0x82, 0x05, 0x59, 0x30, 0x82, 0x03, 0x41, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x02, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x4e, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x4e, 0x4f, 0x31, 0x1d, 0x30, 0x1b, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x14, 0x42, 0x75, 0x79, 0x70, 0x61, 0x73, 0x73, 0x20, 0x41, 0x53, 0x2d, 0x39, 0x38, 0x33, 0x31, 0x36, 0x33, 0x33, 0x32, 0x37, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x17, 0x42, 0x75, 0x79, 0x70, 0x61, 0x73, 0x73, 0x20, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x33, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x30, 0x31, 0x30, 0x32, 0x36, 0x30, 0x38, 0x32, 0x38, 0x35, 0x38, 0x5a, 0x17, 0x0d, 0x34, 0x30, 0x31, 0x30, 0x32, 0x36, 0x30, 0x38, 0x32, 0x38, 0x35, 0x38, 0x5a, 0x30, 0x4e, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x4e, 0x4f, 0x31, 0x1d, 0x30, 0x1b, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x14, 0x42, 0x75, 0x79, 0x70, 0x61, 0x73, 0x73, 0x20, 0x41, 0x53, 0x2d, 0x39, 0x38, 0x33, 0x31, 0x36, 0x33, 0x33, 0x32, 0x37, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x17, 0x42, 0x75, 0x79, 0x70, 0x61, 0x73, 0x73, 0x20, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x33, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xa5, 0xda, 0x0a, 0x95, 0x16, 0x50, 0xe3, 0x95, 0xf2, 0x5e, 0x9d, 0x76, 0x31, 0x06, 0x32, 0x7a, 0x9b, 0xf1, 0x10, 0x76, 0xb8, 0x00, 0x9a, 0xb5, 0x52, 0x36, 0xcd, 0x24, 0x47, 0xb0, 0x9f, 0x18, 0x64, 0xbc, 0x9a, 0xf6, 0xfa, 0xd5, 0x79, 0xd8, 0x90, 0x62, 0x4c, 0x22, 0x2f, 0xde, 0x38, 0x3d, 0xd6, 0xe0, 0xa8, 0xe9, 0x1c, 0x2c, 0xdb, 0x78, 0x11, 0xe9, 0x8e, 0x68, 0x51, 0x15, 0x72, 0xc7, 0xf3, 0x33, 0x87, 0xe4, 0xa0, 0x5d, 0x0b, 0x5c, 0xe0, 0x57, 0x07, 0x2a, 0x30, 0xf5, 0xcd, 0xc4, 0x37, 0x77, 0x28, 0x4d, 0x18, 0x91, 0xe6, 0xbf, 0xd5, 0x52, 0xfd, 0x71, 0x2d, 0x70, 0x3e, 0xe7, 0xc6, 0xc4, 0x8a, 0xe3, 0xf0, 0x28, 0x0b, 0xf4, 0x76, 0x98, 0xa1, 0x8b, 0x87, 0x55, 0xb2, 0x3a, 0x13, 0xfc, 0xb7, 0x3e, 0x27, 0x37, 0x8e, 0x22, 0xe3, 0xa8, 0x4f, 0x2a, 0xef, 0x60, 0xbb, 0x3d, 0xb7, 0x39, 0xc3, 0x0e, 0x01, 0x47, 0x99, 0x5d, 0x12, 0x4f, 0xdb, 0x43, 0xfa, 0x57, 0xa1, 0xed, 0xf9, 0x9d, 0xbe, 0x11, 0x47, 0x26, 0x5b, 0x13, 0x98, 0xab, 0x5d, 0x16, 0x8a, 0xb0, 0x37, 0x1c, 0x57, 0x9d, 0x45, 0xff, 0x88, 0x96, 0x36, 0xbf, 0xbb, 0xca, 0x07, 0x7b, 0x6f, 0x87, 0x63, 0xd7, 0xd0, 0x32, 0x6a, 0xd6, 0x5d, 0x6c, 0x0c, 0xf1, 0xb3, 0x6e, 0x39, 0xe2, 0x6b, 0x31, 0x2e, 0x39, 0x00, 0x27, 0x14, 0xde, 0x38, 0xc0, 0xec, 0x19, 0x66, 0x86, 0x12, 0xe8, 0x9d, 0x72, 0x16, 0x13, 0x64, 0x52, 0xc7, 0xa9, 0x37, 0x1c, 0xfd, 0x82, 0x30, 0xed, 0x84, 0x18, 0x1d, 0xf4, 0xae, 0x5c, 0xff, 0x70, 0x13, 0x00, 0xeb, 0xb1, 0xf5, 0x33, 0x7a, 0x4b, 0xd6, 0x55, 0xf8, 0x05, 0x8d, 0x4b, 0x69, 0xb0, 0xf5, 0xb3, 0x28, 0x36, 0x5c, 0x14, 0xc4, 0x51, 0x73, 0x4d, 0x6b, 0x0b, 0xf1, 0x34, 0x07, 0xdb, 0x17, 0x39, 0xd7, 0xdc, 0x28, 0x7b, 0x6b, 0xf5, 0x9f, 0xf3, 0x2e, 0xc1, 0x4f, 0x17, 0x2a, 0x10, 0xf3, 0xcc, 0xca, 0xe8, 0xeb, 0xfd, 0x6b, 0xab, 0x2e, 0x9a, 0x9f, 0x2d, 0x82, 0x6e, 0x04, 0xd4, 0x52, 0x01, 0x93, 0x2d, 0x3d, 0x86, 0xfc, 0x7e, 0xfc, 0xdf, 0xef, 0x42, 0x1d, 0xa6, 0x6b, 0xef, 0xb9, 0x20, 0xc6, 0xf7, 0xbd, 0xa0, 0xa7, 0x95, 0xfd, 0xa7, 0xe6, 0x89, 0x24, 0xd8, 0xcc, 0x8c, 0x34, 0x6c, 0xe2, 0x23, 0x2f, 0xd9, 0x12, 0x1a, 0x21, 0xb9, 0x55, 0x91, 0x6f, 0x0b, 0x91, 0x79, 0x19, 0x0c, 0xad, 0x40, 0x88, 0x0b, 0x70, 0xe2, 0x7a, 0xd2, 0x0e, 0xd8, 0x68, 0x48, 0xbb, 0x82, 0x13, 0x39, 0x10, 0x58, 0xe9, 0xd8, 0x2a, 0x07, 0xc6, 0x12, 0xdb, 0x58, 0xdb, 0xd2, 0x3b, 0x55, 0x10, 0x47, 0x05, 0x15, 0x67, 0x62, 0x7e, 0x18, 0x63, 0xa6, 0x46, 0x3f, 0x09, 0x0e, 0x54, 0x32, 0x5e, 0xbf, 0x0d, 0x62, 0x7a, 0x27, 0xef, 0x80, 0xe8, 0xdb, 0xd9, 0x4b, 0x06, 0x5a, 0x37, 0x5a, 0x25, 0xd0, 0x08, 0x12, 0x77, 0xd4, 0x6f, 0x09, 0x50, 0x97, 0x3d, 0xc8, 0x1d, 0xc3, 0xdf, 0x8c, 0x45, 0x30, 0x56, 0xc6, 0xd3, 0x64, 0xab, 0x66, 0xf3, 0xc0, 0x5e, 0x96, 0x9c, 0xc3, 0xc4, 0xef, 0xc3, 0x7c, 0x6b, 0x8b, 0x3a, 0x79, 0x7f, 0xb3, 0x49, 0xcf, 0x3d, 0xe2, 0x89, 0x9f, 0xa0, 0x30, 0x4b, 0x85, 0xb9, 0x9c, 0x94, 0x24, 0x79, 0x8f, 0x7d, 0x6b, 0xa9, 0x45, 0x68, 0x0f, 0x2b, 0xd0, 0xf1, 0xda, 0x1c, 0xcb, 0x69, 0xb8, 0xca, 0x49, 0x62, 0x6d, 0xc8, 0xd0, 0x63, 0x62, 0xdd, 0x60, 0x0f, 0x58, 0xaa, 0x8f, 0xa1, 0xbc, 0x05, 0xa5, 0x66, 0xa2, 0xcf, 0x1b, 0x76, 0xb2, 0x84, 0x64, 0xb1, 0x4c, 0x39, 0x52, 0xc0, 0x30, 0xba, 0xf0, 0x8c, 0x4b, 0x02, 0xb0, 0xb6, 0xb7, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x47, 0xb8, 0xcd, 0xff, 0xe5, 0x6f, 0xee, 0xf8, 0xb2, 0xec, 0x2f, 0x4e, 0x0e, 0xf9, 0x25, 0xb0, 0x8e, 0x3c, 0x6b, 0xc3, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x00, 0x20, 0x23, 0x41, 0x35, 0x04, 0x90, 0xc2, 0x40, 0x62, 0x60, 0xef, 0xe2, 0x35, 0x4c, 0xd7, 0x3f, 0xac, 0xe2, 0x34, 0x90, 0xb8, 0xa1, 0x6f, 0x76, 0xfa, 0x16, 0x16, 0xa4, 0x48, 0x37, 0x2c, 0xe9, 0x90, 0xc2, 0xf2, 0x3c, 0xf8, 0x0a, 0x9f, 0xd8, 0x81, 0xe5, 0xbb, 0x5b, 0xda, 0x25, 0x2c, 0xa4, 0xa7, 0x55, 0x71, 0x24, 0x32, 0xf6, 0xc8, 0x0b, 0xf2, 0xbc, 0x6a, 0xf8, 0x93, 0xac, 0xb2, 0x07, 0xc2, 0x5f, 0x9f, 0xdb, 0xcc, 0xc8, 0x8a, 0xaa, 0xbe, 0x6a, 0x6f, 0xe1, 0x49, 0x10, 0xcc, 0x31, 0xd7, 0x80, 0xbb, 0xbb, 0xc8, 0xd8, 0xa2, 0x0e, 0x64, 0x57, 0xea, 0xa2, 0xf5, 0xc2, 0xa9, 0x31, 0x15, 0xd2, 0x20, 0x6a, 0xec, 0xfc, 0x22, 0x01, 0x28, 0xcf, 0x86, 0xb8, 0x80, 0x1e, 0xa9, 0xcc, 0x11, 0xa5, 0x3c, 0xf2, 0x16, 0xb3, 0x47, 0x9d, 0xfc, 0xd2, 0x80, 0x21, 0xc4, 0xcb, 0xd0, 0x47, 0x70, 0x41, 0xa1, 0xca, 0x83, 0x19, 0x08, 0x2c, 0x6d, 0xf2, 0x5d, 0x77, 0x9c, 0x8a, 0x14, 0x13, 0xd4, 0x36, 0x1c, 0x92, 0xf0, 0xe5, 0x06, 0x37, 0xdc, 0xa6, 0xe6, 0x90, 0x9b, 0x38, 0x8f, 0x5c, 0x6b, 0x1b, 0x46, 0x86, 0x43, 0x42, 0x5f, 0x3e, 0x01, 0x07, 0x53, 0x54, 0x5d, 0x65, 0x7d, 0xf7, 0x8a, 0x73, 0xa1, 0x9a, 0x54, 0x5a, 0x1f, 0x29, 0x43, 0x14, 0x27, 0xc2, 0x85, 0x0f, 0xb5, 0x88, 0x7b, 0x1a, 0x3b, 0x94, 0xb7, 0x1d, 0x60, 0xa7, 0xb5, 0x9c, 0xe7, 0x29, 0x69, 0x57, 0x5a, 0x9b, 0x93, 0x7a, 0x43, 0x30, 0x1b, 0x03, 0xd7, 0x62, 0xc8, 0x40, 0xa6, 0xaa, 0xfc, 0x64, 0xe4, 0x4a, 0xd7, 0x91, 0x53, 0x01, 0xa8, 0x20, 0x88, 0x6e, 0x9c, 0x5f, 0x44, 0xb9, 0xcb, 0x60, 0x81, 0x34, 0xec, 0x6f, 0xd3, 0x7d, 0xda, 0x48, 0x5f, 0xeb, 0xb4, 0x90, 0xbc, 0x2d, 0xa9, 0x1c, 0x0b, 0xac, 0x1c, 0xd5, 0xa2, 0x68, 0x20, 0x80, 0x04, 0xd6, 0xfc, 0xb1, 0x8f, 0x2f, 0xbb, 0x4a, 0x31, 0x0d, 0x4a, 0x86, 0x1c, 0xeb, 0xe2, 0x36, 0x29, 0x26, 0xf5, 0xda, 0xd8, 0xc4, 0xf2, 0x75, 0x61, 0xcf, 0x7e, 0xae, 0x76, 0x63, 0x4a, 0x7a, 0x40, 0x65, 0x93, 0x87, 0xf8, 0x1e, 0x80, 0x8c, 0x86, 0xe5, 0x86, 0xd6, 0x8f, 0x0e, 0xfc, 0x53, 0x2c, 0x60, 0xe8, 0x16, 0x61, 0x1a, 0xa2, 0x3e, 0x43, 0x7b, 0xcd, 0x39, 0x60, 0x54, 0x6a, 0xf5, 0xf2, 0x89, 0x26, 0x01, 0x68, 0x83, 0x48, 0xa2, 0x33, 0xe8, 0xc9, 0x04, 0x91, 0xb2, 0x11, 0x34, 0x11, 0x3e, 0xea, 0xd0, 0x43, 0x19, 0x1f, 0x03, 0x93, 0x90, 0x0c, 0xff, 0x51, 0x3d, 0x57, 0xf4, 0x41, 0x6e, 0xe1, 0xcb, 0xa0, 0xbe, 0xeb, 0xc9, 0x63, 0xcd, 0x6d, 0xcc, 0xe4, 0xf8, 0x36, 0xaa, 0x68, 0x9d, 0xed, 0xbd, 0x5d, 0x97, 0x70, 0x44, 0x0d, 0xb6, 0x0e, 0x35, 0xdc, 0xe1, 0x0c, 0x5d, 0xbb, 0xa0, 0x51, 0x94, 0xcb, 0x7e, 0x16, 0xeb, 0x11, 0x2f, 0xa3, 0x92, 0x45, 0xc8, 0x4c, 0x71, 0xd9, 0xbc, 0xc9, 0x99, 0x52, 0x57, 0x46, 0x2f, 0x50, 0xcf, 0xbd, 0x35, 0x69, 0xf4, 0x3d, 0x15, 0xce, 0x06, 0xa5, 0x2c, 0x0f, 0x3e, 0xf6, 0x81, 0xba, 0x94, 0xbb, 0xc3, 0xbb, 0xbf, 0x65, 0x78, 0xd2, 0x86, 0x79, 0xff, 0x49, 0x3b, 0x1a, 0x83, 0x0c, 0xf0, 0xde, 0x78, 0xec, 0xc8, 0xf2, 0x4d, 0x4c, 0x1a, 0xde, 0x82, 0x29, 0xf8, 0xc1, 0x5a, 0xda, 0xed, 0xee, 0xe6, 0x27, 0x5e, 0xe8, 0x45, 0xd0, 0x9d, 0x1c, 0x51, 0xa8, 0x68, 0xab, 0x44, 0xe3, 0xd0, 0x8b, 0x6a, 0xe3, 0xf8, 0x3b, 0xbb, 0xdc, 0x4d, 0xd7, 0x64, 0xf2, 0x51, 0xbe, 0xe6, 0xaa, 0xab, 0x5a, 0xe9, 0x31, 0xee, 0x06, 0xbc, 0x73, 0xbf, 0x13, 0x62, 0x0a, 0x9f, 0xc7, 0xb9, 0x97, 0x30, 0x82, 0x05, 0x69, 0x30, 0x82, 0x03, 0x51, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00, 0x92, 0xb8, 0x88, 0xdb, 0xb0, 0x8a, 0xc1, 0x63, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x52, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x53, 0x4b, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x0a, 0x42, 0x72, 0x61, 0x74, 0x69, 0x73, 0x6c, 0x61, 0x76, 0x61, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0a, 0x44, 0x69, 0x73, 0x69, 0x67, 0x20, 0x61, 0x2e, 0x73, 0x2e, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x10, 0x43, 0x41, 0x20, 0x44, 0x69, 0x73, 0x69, 0x67, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x52, 0x32, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x32, 0x30, 0x37, 0x31, 0x39, 0x30, 0x39, 0x31, 0x35, 0x33, 0x30, 0x5a, 0x17, 0x0d, 0x34, 0x32, 0x30, 0x37, 0x31, 0x39, 0x30, 0x39, 0x31, 0x35, 0x33, 0x30, 0x5a, 0x30, 0x52, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x53, 0x4b, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x0a, 0x42, 0x72, 0x61, 0x74, 0x69, 0x73, 0x6c, 0x61, 0x76, 0x61, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0a, 0x44, 0x69, 0x73, 0x69, 0x67, 0x20, 0x61, 0x2e, 0x73, 0x2e, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x10, 0x43, 0x41, 0x20, 0x44, 0x69, 0x73, 0x69, 0x67, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x52, 0x32, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xa2, 0xa3, 0xc4, 0x00, 0x09, 0xd6, 0x85, 0x5d, 0x2d, 0x6d, 0x14, 0xf6, 0xc2, 0xc3, 0x73, 0x9e, 0x35, 0xc2, 0x71, 0x55, 0x7e, 0x81, 0xfb, 0xab, 0x46, 0x50, 0xe0, 0xc1, 0x7c, 0x49, 0x78, 0xe6, 0xab, 0x79, 0x58, 0x3c, 0xda, 0xff, 0x7c, 0x1c, 0x9f, 0xd8, 0x97, 0x02, 0x78, 0x3e, 0x6b, 0x41, 0x04, 0xe9, 0x41, 0xbd, 0xbe, 0x03, 0x2c, 0x45, 0xf6, 0x2f, 0x64, 0xd4, 0xab, 0x5d, 0xa3, 0x47, 0x3d, 0x64, 0x9b, 0xe9, 0x68, 0x9a, 0xc6, 0xcc, 0x1b, 0x3f, 0xba, 0xbe, 0xb2, 0x8b, 0x34, 0x02, 0x2e, 0x98, 0x55, 0x19, 0xfc, 0x8c, 0x6f, 0xaa, 0x5f, 0xda, 0x4c, 0xce, 0x4d, 0x03, 0x21, 0xa3, 0xd8, 0xd2, 0x34, 0x93, 0x56, 0x96, 0xcb, 0x4c, 0x0c, 0x00, 0x16, 0x3c, 0x5f, 0x1a, 0xcd, 0xc8, 0xc7, 0x6c, 0xa6, 0xad, 0xd3, 0x31, 0xa7, 0xbc, 0xe8, 0xe5, 0xe1, 0x66, 0xd6, 0xd2, 0xfb, 0x03, 0xb4, 0x41, 0x65, 0xc9, 0x10, 0xae, 0x0e, 0x05, 0x63, 0xc6, 0x80, 0x6a, 0x69, 0x30, 0xfd, 0xd2, 0xee, 0x90, 0xef, 0x0d, 0x27, 0xdf, 0x9f, 0x95, 0x73, 0xf4, 0xe1, 0x25, 0xda, 0x6c, 0x16, 0xde, 0x41, 0x38, 0x34, 0xea, 0x8b, 0xfc, 0xd1, 0xe8, 0x04, 0x14, 0x61, 0x2d, 0x41, 0x7e, 0xac, 0xc7, 0x77, 0x4e, 0xcb, 0x51, 0x54, 0xfb, 0x5e, 0x92, 0x18, 0x1b, 0x04, 0x5a, 0x68, 0xc6, 0xc9, 0xc4, 0xfa, 0xb7, 0x13, 0xa0, 0x98, 0xb7, 0x11, 0x2b, 0xb7, 0xd6, 0x57, 0xcc, 0x7c, 0x9e, 0x17, 0xd1, 0xcb, 0x25, 0xfe, 0x86, 0x4e, 0x24, 0x2e, 0x56, 0x0c, 0x78, 0x4d, 0x9e, 0x01, 0x12, 0xa6, 0x2b, 0xa7, 0x01, 0x65, 0x6e, 0x7c, 0x62, 0x1d, 0x84, 0x84, 0xdf, 0xea, 0xc0, 0x6b, 0xb5, 0xa5, 0x2a, 0x95, 0x83, 0xc3, 0x53, 0x11, 0x0c, 0x73, 0x1d, 0x0b, 0xb2, 0x46, 0x90, 0xd1, 0x42, 0x3a, 0xce, 0x40, 0x6e, 0x95, 0xad, 0xff, 0xc6, 0x94, 0xad, 0x6e, 0x97, 0x84, 0x8e, 0x7d, 0x6f, 0x9e, 0x8a, 0x80, 0x0d, 0x49, 0x6d, 0x73, 0xe2, 0x7b, 0x92, 0x1e, 0xc3, 0xf3, 0xc1, 0xf3, 0xeb, 0x2e, 0x05, 0x6f, 0xd9, 0x1b, 0xcf, 0x37, 0x76, 0x04, 0xc8, 0xb4, 0x5a, 0xe4, 0x17, 0xa7, 0xcb, 0xdd, 0x76, 0x1f, 0xd0, 0x19, 0x76, 0xe8, 0x2c, 0x05, 0xb3, 0xd6, 0x9c, 0x34, 0xd8, 0x96, 0xdc, 0x61, 0x87, 0x91, 0x05, 0xe4, 0x44, 0x08, 0x33, 0xc1, 0xda, 0xb9, 0x08, 0x65, 0xd4, 0xae, 0xb2, 0x36, 0x0d, 0xeb, 0xba, 0x38, 0xba, 0x0c, 0xe5, 0x9b, 0x9e, 0xeb, 0x8d, 0x66, 0xdd, 0x99, 0xcf, 0xd6, 0x89, 0x41, 0xf6, 0x04, 0x92, 0x8a, 0x29, 0x29, 0x6d, 0x6b, 0x3a, 0x1c, 0xe7, 0x75, 0x7d, 0x02, 0x71, 0x0e, 0xf3, 0xc0, 0xe7, 0xbd, 0xcb, 0x19, 0xdd, 0x9d, 0x60, 0xb2, 0xc2, 0x66, 0x60, 0xb6, 0xb1, 0x04, 0xee, 0xc9, 0xe6, 0x86, 0xb9, 0x9a, 0x66, 0x40, 0xa8, 0xe7, 0x11, 0xed, 0x81, 0x45, 0x03, 0x8b, 0xf6, 0x67, 0x59, 0xe8, 0xc1, 0x06, 0x11, 0xbd, 0xdd, 0xcf, 0x80, 0x02, 0x4f, 0x65, 0x40, 0x78, 0x5c, 0x47, 0x50, 0xc8, 0x9b, 0xe6, 0x1f, 0x81, 0x7b, 0xe4, 0x44, 0xa8, 0x5b, 0x85, 0x9a, 0xe2, 0xde, 0x5a, 0xd5, 0xc7, 0xf9, 0x3a, 0x44, 0x66, 0x4b, 0xe4, 0x32, 0x54, 0x7c, 0xe4, 0x6c, 0x9c, 0xb3, 0x0e, 0x3d, 0x17, 0xa2, 0xb2, 0x34, 0x12, 0xd6, 0x7e, 0xb2, 0xa8, 0x49, 0xbb, 0xd1, 0x7a, 0x28, 0x40, 0xbe, 0xa2, 0x16, 0x1f, 0xdf, 0xe4, 0x37, 0x1f, 0x11, 0x73, 0xfb, 0x90, 0x0a, 0x65, 0x43, 0xa2, 0x0d, 0x7c, 0xf8, 0x06, 0x01, 0x55, 0x33, 0x7d, 0xb0, 0x0d, 0xb8, 0xf4, 0xf5, 0xae, 0xa5, 0x42, 0x57, 0x7c, 0x36, 0x11, 0x8c, 0x7b, 0x5e, 0xc4, 0x03, 0x9d, 0x8c, 0x79, 0x9d, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xb5, 0x99, 0xf8, 0xaf, 0xb0, 0x94, 0xf5, 0xe3, 0x20, 0xd6, 0x0a, 0xad, 0xce, 0x4e, 0x56, 0xa4, 0x2e, 0x6e, 0x42, 0xed, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x26, 0x06, 0x5e, 0x70, 0xe7, 0x65, 0x33, 0xc8, 0x82, 0x6e, 0xd9, 0x9c, 0x17, 0x3a, 0x1b, 0x7a, 0x66, 0xb2, 0x01, 0xf6, 0x78, 0x3b, 0x69, 0x5e, 0x2f, 0xea, 0xff, 0x4e, 0xf9, 0x28, 0xc3, 0x98, 0x2a, 0x61, 0x4c, 0xb4, 0x24, 0x12, 0x8a, 0x7d, 0x6d, 0x11, 0x14, 0xf7, 0x9c, 0xb5, 0xca, 0xe6, 0xbc, 0x9e, 0x27, 0x8e, 0x4c, 0x19, 0xc8, 0xa9, 0xbd, 0x7a, 0xc0, 0xd7, 0x36, 0x0e, 0x6d, 0x85, 0x72, 0x6e, 0xa8, 0xc6, 0xa2, 0x6d, 0xf6, 0xfa, 0x73, 0x63, 0x7f, 0xbc, 0x6e, 0x79, 0x08, 0x1c, 0x9d, 0x8a, 0x9f, 0x1a, 0x8a, 0x53, 0xa6, 0xd8, 0xbb, 0xd9, 0x35, 0x55, 0xb1, 0x11, 0xc5, 0xa9, 0x03, 0xb3, 0x56, 0x3b, 0xb9, 0x84, 0x93, 0x22, 0x5e, 0x7e, 0xc1, 0xf6, 0x12, 0x52, 0x8b, 0xea, 0x2c, 0x67, 0xbc, 0xfe, 0x36, 0x4c, 0xf5, 0xb8, 0xcf, 0xd1, 0xb3, 0x49, 0x92, 0x3b, 0xd3, 0x29, 0x0e, 0x99, 0x1b, 0x96, 0xf7, 0x61, 0xb8, 0x3b, 0xc4, 0x2b, 0xb6, 0x78, 0x6c, 0xb4, 0x23, 0x6f, 0xf0, 0xfd, 0xd3, 0xb2, 0x5e, 0x75, 0x1f, 0x99, 0x95, 0xa8, 0xac, 0xf6, 0xda, 0xe1, 0xc5, 0x31, 0x7b, 0xfb, 0xd1, 0x46, 0xb3, 0xd2, 0xbc, 0x67, 0xb4, 0x62, 0x54, 0xba, 0x09, 0xf7, 0x63, 0xb0, 0x93, 0xa2, 0x9a, 0xf9, 0xe9, 0x52, 0x2e, 0x8b, 0x60, 0x12, 0xab, 0xfc, 0xf5, 0x60, 0x56, 0xef, 0x10, 0x5c, 0x8b, 0xc4, 0x1a, 0x42, 0xdc, 0x83, 0x5b, 0x64, 0x0e, 0xcb, 0xb5, 0xbc, 0xd6, 0x4f, 0xc1, 0x7c, 0x3c, 0x6e, 0x8d, 0x13, 0x6d, 0xfb, 0x7b, 0xeb, 0x30, 0xd0, 0xdc, 0x4d, 0xaf, 0xc5, 0xd5, 0xb6, 0xa5, 0x4c, 0x5b, 0x71, 0xc9, 0xe8, 0x31, 0xbe, 0xe8, 0x38, 0x06, 0x48, 0xa1, 0x1a, 0xe2, 0xea, 0xd2, 0xde, 0x12, 0x39, 0x58, 0x1a, 0xff, 0x80, 0x0e, 0x82, 0x75, 0xe6, 0xb7, 0xc9, 0x07, 0x6c, 0x0e, 0xef, 0xff, 0x38, 0xf1, 0x98, 0x71, 0xc4, 0xb7, 0x7f, 0x0e, 0x15, 0xd0, 0x25, 0x69, 0xbd, 0x22, 0x9d, 0x2b, 0xed, 0x05, 0xf6, 0x46, 0x47, 0xac, 0xed, 0xc0, 0xf0, 0xd4, 0x3b, 0xe2, 0xec, 0xee, 0x96, 0x5b, 0x90, 0x13, 0x4e, 0x1e, 0x56, 0x3a, 0xeb, 0xb0, 0xef, 0x96, 0xbb, 0x96, 0x23, 0x11, 0xba, 0xf2, 0x43, 0x86, 0x74, 0x64, 0x95, 0xc8, 0x28, 0x75, 0xdf, 0x1d, 0x35, 0xba, 0xd2, 0x37, 0x83, 0x38, 0x53, 0x38, 0x36, 0x3b, 0xcf, 0x6c, 0xe9, 0xf9, 0x6b, 0x0e, 0xd0, 0xfb, 0x04, 0xe8, 0x4f, 0x77, 0xd7, 0x65, 0x01, 0x78, 0x86, 0x0c, 0x7a, 0x3e, 0x21, 0x62, 0xf1, 0x7f, 0x63, 0x71, 0x0c, 0xc9, 0x9f, 0x44, 0xdb, 0xa8, 0x27, 0xa2, 0x75, 0xbe, 0x6e, 0x81, 0x3e, 0xd7, 0xc0, 0xeb, 0x1b, 0x98, 0x0f, 0x70, 0x5c, 0x34, 0xb2, 0x8a, 0xcc, 0xc0, 0x85, 0x18, 0xeb, 0x6e, 0x7a, 0xb3, 0xf7, 0x5a, 0xa1, 0x07, 0xbf, 0xa9, 0x42, 0x92, 0xf3, 0x60, 0x22, 0x97, 0xe4, 0x14, 0xa1, 0x07, 0x9b, 0x4e, 0x76, 0xc0, 0x8e, 0x7d, 0xfd, 0xa4, 0x25, 0xc7, 0x47, 0xed, 0xff, 0x1f, 0x73, 0xac, 0xcc, 0xc3, 0xa5, 0xe9, 0x6f, 0x0a, 0x8e, 0x9b, 0x65, 0xc2, 0x50, 0x85, 0xb5, 0xa3, 0xa0, 0x53, 0x12, 0xcc, 0x55, 0x87, 0x61, 0xf3, 0x81, 0xae, 0x10, 0x46, 0x61, 0xbd, 0x44, 0x21, 0xb8, 0xc2, 0x3d, 0x74, 0xcf, 0x7e, 0x24, 0x35, 0xfa, 0x1c, 0x07, 0x0e, 0x9b, 0x3d, 0x22, 0xca, 0xef, 0x31, 0x2f, 0x8c, 0xac, 0x12, 0xbd, 0xef, 0x40, 0x28, 0xfc, 0x29, 0x67, 0x9f, 0xb2, 0x13, 0x4f, 0x66, 0x24, 0xc4, 0x53, 0x19, 0xe9, 0x1e, 0x29, 0x15, 0xef, 0xe6, 0x6d, 0xb0, 0x7f, 0x2d, 0x67, 0xfd, 0xf3, 0x6c, 0x1b, 0x75, 0x46, 0xa3, 0xe5, 0x4a, 0x17, 0xe9, 0xa4, 0xd7, 0x0b, 0x30, 0x82, 0x03, 0xa8, 0x30, 0x82, 0x02, 0x90, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00, 0xfe, 0xdc, 0xe3, 0x01, 0x0f, 0xc9, 0x48, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x34, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x46, 0x52, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x09, 0x44, 0x68, 0x69, 0x6d, 0x79, 0x6f, 0x74, 0x69, 0x73, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x08, 0x43, 0x65, 0x72, 0x74, 0x69, 0x67, 0x6e, 0x61, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x37, 0x30, 0x36, 0x32, 0x39, 0x31, 0x35, 0x31, 0x33, 0x30, 0x35, 0x5a, 0x17, 0x0d, 0x32, 0x37, 0x30, 0x36, 0x32, 0x39, 0x31, 0x35, 0x31, 0x33, 0x30, 0x35, 0x5a, 0x30, 0x34, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x46, 0x52, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x09, 0x44, 0x68, 0x69, 0x6d, 0x79, 0x6f, 0x74, 0x69, 0x73, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x08, 0x43, 0x65, 0x72, 0x74, 0x69, 0x67, 0x6e, 0x61, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xc8, 0x68, 0xf1, 0xc9, 0xd6, 0xd6, 0xb3, 0x34, 0x75, 0x26, 0x82, 0x1e, 0xec, 0xb4, 0xbe, 0xea, 0x5c, 0xe1, 0x26, 0xed, 0x11, 0x47, 0x61, 0xe1, 0xa2, 0x7c, 0x16, 0x78, 0x40, 0x21, 0xe4, 0x60, 0x9e, 0x5a, 0xc8, 0x63, 0xe1, 0xc4, 0xb1, 0x96, 0x92, 0xff, 0x18, 0x6d, 0x69, 0x23, 0xe1, 0x2b, 0x62, 0xf7, 0xdd, 0xe2, 0x36, 0x2f, 0x91, 0x07, 0xb9, 0x48, 0xcf, 0x0e, 0xec, 0x79, 0xb6, 0x2c, 0xe7, 0x34, 0x4b, 0x70, 0x08, 0x25, 0xa3, 0x3c, 0x87, 0x1b, 0x19, 0xf2, 0x81, 0x07, 0x0f, 0x38, 0x90, 0x19, 0xd3, 0x11, 0xfe, 0x86, 0xb4, 0xf2, 0xd1, 0x5e, 0x1e, 0x1e, 0x96, 0xcd, 0x80, 0x6c, 0xce, 0x3b, 0x31, 0x93, 0xb6, 0xf2, 0xa0, 0xd0, 0xa9, 0x95, 0x12, 0x7d, 0xa5, 0x9a, 0xcc, 0x6b, 0xc8, 0x84, 0x56, 0x8a, 0x33, 0xa9, 0xe7, 0x22, 0x15, 0x53, 0x16, 0xf0, 0xcc, 0x17, 0xec, 0x57, 0x5f, 0xe9, 0xa2, 0x0a, 0x98, 0x09, 0xde, 0xe3, 0x5f, 0x9c, 0x6f, 0xdc, 0x48, 0xe3, 0x85, 0x0b, 0x15, 0x5a, 0xa6, 0xba, 0x9f, 0xac, 0x48, 0xe3, 0x09, 0xb2, 0xf7, 0xf4, 0x32, 0xde, 0x5e, 0x34, 0xbe, 0x1c, 0x78, 0x5d, 0x42, 0x5b, 0xce, 0x0e, 0x22, 0x8f, 0x4d, 0x90, 0xd7, 0x7d, 0x32, 0x18, 0xb3, 0x0b, 0x2c, 0x6a, 0xbf, 0x8e, 0x3f, 0x14, 0x11, 0x89, 0x20, 0x0e, 0x77, 0x14, 0xb5, 0x3d, 0x94, 0x08, 0x87, 0xf7, 0x25, 0x1e, 0xd5, 0xb2, 0x60, 0x00, 0xec, 0x6f, 0x2a, 0x28, 0x25, 0x6e, 0x2a, 0x3e, 0x18, 0x63, 0x17, 0x25, 0x3f, 0x3e, 0x44, 0x20, 0x16, 0xf6, 0x26, 0xc8, 0x25, 0xae, 0x05, 0x4a, 0xb4, 0xe7, 0x63, 0x2c, 0xf3, 0x8c, 0x16, 0x53, 0x7e, 0x5c, 0xfb, 0x11, 0x1a, 0x08, 0xc1, 0x46, 0x62, 0x9f, 0x22, 0xb8, 0xf1, 0xc2, 0x8d, 0x69, 0xdc, 0xfa, 0x3a, 0x58, 0x06, 0xdf, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x81, 0xbc, 0x30, 0x81, 0xb9, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x1a, 0xed, 0xfe, 0x41, 0x39, 0x90, 0xb4, 0x24, 0x59, 0xbe, 0x01, 0xf2, 0x52, 0xd5, 0x45, 0xf6, 0x5a, 0x39, 0xdc, 0x11, 0x30, 0x64, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x5d, 0x30, 0x5b, 0x80, 0x14, 0x1a, 0xed, 0xfe, 0x41, 0x39, 0x90, 0xb4, 0x24, 0x59, 0xbe, 0x01, 0xf2, 0x52, 0xd5, 0x45, 0xf6, 0x5a, 0x39, 0xdc, 0x11, 0xa1, 0x38, 0xa4, 0x36, 0x30, 0x34, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x46, 0x52, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x09, 0x44, 0x68, 0x69, 0x6d, 0x79, 0x6f, 0x74, 0x69, 0x73, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x08, 0x43, 0x65, 0x72, 0x74, 0x69, 0x67, 0x6e, 0x61, 0x82, 0x09, 0x00, 0xfe, 0xdc, 0xe3, 0x01, 0x0f, 0xc9, 0x48, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x11, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x86, 0xf8, 0x42, 0x01, 0x01, 0x04, 0x04, 0x03, 0x02, 0x00, 0x07, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x85, 0x03, 0x1e, 0x92, 0x71, 0xf6, 0x42, 0xaf, 0xe1, 0xa3, 0x61, 0x9e, 0xeb, 0xf3, 0xc0, 0x0f, 0xf2, 0xa5, 0xd4, 0xda, 0x95, 0xe6, 0xd6, 0xbe, 0x68, 0x36, 0x3d, 0x7e, 0x6e, 0x1f, 0x4c, 0x8a, 0xef, 0xd1, 0x0f, 0x21, 0x6d, 0x5e, 0xa5, 0x52, 0x63, 0xce, 0x12, 0xf8, 0xef, 0x2a, 0xda, 0x6f, 0xeb, 0x37, 0xfe, 0x13, 0x02, 0xc7, 0xcb, 0x3b, 0x3e, 0x22, 0x6b, 0xda, 0x61, 0x2e, 0x7f, 0xd4, 0x72, 0x3d, 0xdd, 0x30, 0xe1, 0x1e, 0x4c, 0x40, 0x19, 0x8c, 0x0f, 0xd7, 0x9c, 0xd1, 0x83, 0x30, 0x7b, 0x98, 0x59, 0xdc, 0x7d, 0xc6, 0xb9, 0x0c, 0x29, 0x4c, 0xa1, 0x33, 0xa2, 0xeb, 0x67, 0x3a, 0x65, 0x84, 0xd3, 0x96, 0xe2, 0xed, 0x76, 0x45, 0x70, 0x8f, 0xb5, 0x2b, 0xde, 0xf9, 0x23, 0xd6, 0x49, 0x6e, 0x3c, 0x14, 0xb5, 0xc6, 0x9f, 0x35, 0x1e, 0x50, 0xd0, 0xc1, 0x8f, 0x6a, 0x70, 0x44, 0x02, 0x62, 0xcb, 0xae, 0x1d, 0x68, 0x41, 0xa7, 0xaa, 0x57, 0xe8, 0x53, 0xaa, 0x07, 0xd2, 0x06, 0xf6, 0xd5, 0x14, 0x06, 0x0b, 0x91, 0x03, 0x75, 0x2c, 0x6c, 0x72, 0xb5, 0x61, 0x95, 0x9a, 0x0d, 0x8b, 0xb9, 0x0d, 0xe7, 0xf5, 0xdf, 0x54, 0xcd, 0xde, 0xe6, 0xd8, 0xd6, 0x09, 0x08, 0x97, 0x63, 0xe5, 0xc1, 0x2e, 0xb0, 0xb7, 0x44, 0x26, 0xc0, 0x26, 0xc0, 0xaf, 0x55, 0x30, 0x9e, 0x3b, 0xd5, 0x36, 0x2a, 0x19, 0x04, 0xf4, 0x5c, 0x1e, 0xff, 0xcf, 0x2c, 0xb7, 0xff, 0xd0, 0xfd, 0x87, 0x40, 0x11, 0xd5, 0x11, 0x23, 0xbb, 0x48, 0xc0, 0x21, 0xa9, 0xa4, 0x28, 0x2d, 0xfd, 0x15, 0xf8, 0xb0, 0x4e, 0x2b, 0xf4, 0x30, 0x5b, 0x21, 0xfc, 0x11, 0x91, 0x34, 0xbe, 0x41, 0xef, 0x7b, 0x9d, 0x97, 0x75, 0xff, 0x97, 0x95, 0xc0, 0x96, 0x58, 0x2f, 0xea, 0xbb, 0x46, 0xd7, 0xbb, 0xe4, 0xd9, 0x2e, 0x30, 0x82, 0x05, 0x38, 0x30, 0x82, 0x03, 0x20, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x11, 0x00, 0x95, 0xbe, 0x16, 0xa0, 0xf7, 0x2e, 0x46, 0xf1, 0x7b, 0x39, 0x82, 0x72, 0xfa, 0x8b, 0xcd, 0x96, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x37, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0b, 0x54, 0x65, 0x6c, 0x69, 0x61, 0x53, 0x6f, 0x6e, 0x65, 0x72, 0x61, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x16, 0x54, 0x65, 0x6c, 0x69, 0x61, 0x53, 0x6f, 0x6e, 0x65, 0x72, 0x61, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x76, 0x31, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x37, 0x31, 0x30, 0x31, 0x38, 0x31, 0x32, 0x30, 0x30, 0x35, 0x30, 0x5a, 0x17, 0x0d, 0x33, 0x32, 0x31, 0x30, 0x31, 0x38, 0x31, 0x32, 0x30, 0x30, 0x35, 0x30, 0x5a, 0x30, 0x37, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0b, 0x54, 0x65, 0x6c, 0x69, 0x61, 0x53, 0x6f, 0x6e, 0x65, 0x72, 0x61, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x16, 0x54, 0x65, 0x6c, 0x69, 0x61, 0x53, 0x6f, 0x6e, 0x65, 0x72, 0x61, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x76, 0x31, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xc2, 0xbe, 0xeb, 0x27, 0xf0, 0x21, 0xa3, 0xf3, 0x69, 0x26, 0x55, 0x7e, 0x9d, 0xc5, 0x55, 0x16, 0x91, 0x5c, 0xfd, 0xef, 0x21, 0xbf, 0x53, 0x80, 0x7a, 0x2d, 0xd2, 0x91, 0x8c, 0x63, 0x31, 0xf0, 0xec, 0x24, 0xf0, 0xc3, 0xa5, 0xd2, 0x72, 0x7c, 0x10, 0x6d, 0xf4, 0x37, 0xb7, 0xe5, 0xe6, 0x7c, 0x79, 0xea, 0x8c, 0xb5, 0x82, 0x8b, 0xae, 0x48, 0xb6, 0xac, 0x00, 0xdc, 0x65, 0x75, 0xec, 0x2a, 0x4d, 0x5f, 0xc1, 0x87, 0xf5, 0x20, 0x65, 0x2b, 0x81, 0xa8, 0x47, 0x3e, 0x89, 0x23, 0x95, 0x30, 0x16, 0x90, 0x7f, 0xe8, 0x57, 0x07, 0x48, 0xe7, 0x19, 0xae, 0xbf, 0x45, 0x67, 0xb1, 0x37, 0x1b, 0x06, 0x2a, 0xfe, 0xde, 0xf9, 0xac, 0x7d, 0x83, 0xfb, 0x5e, 0xba, 0xe4, 0x8f, 0x97, 0x67, 0xbe, 0x4b, 0x8e, 0x8d, 0x64, 0x07, 0x57, 0x38, 0x55, 0x69, 0x34, 0x36, 0x3d, 0x13, 0x48, 0xef, 0x4f, 0xe2, 0xd3, 0x66, 0x1e, 0xa4, 0xcf, 0x1a, 0xb7, 0x5e, 0x36, 0x33, 0xd4, 0xb4, 0x06, 0xbd, 0x18, 0x01, 0xfd, 0x77, 0x84, 0x50, 0x00, 0x45, 0xf5, 0x8c, 0x5d, 0xe8, 0x23, 0xbc, 0x7e, 0xfe, 0x35, 0xe1, 0xed, 0x50, 0x7b, 0xa9, 0x30, 0x8d, 0x19, 0xd3, 0x09, 0x8e, 0x68, 0x67, 0x5d, 0xbf, 0x3c, 0x97, 0x18, 0x53, 0xbb, 0x29, 0x62, 0xc5, 0xca, 0x5e, 0x72, 0xc1, 0xc7, 0x96, 0xd4, 0xdb, 0x2d, 0xa0, 0xb4, 0x1f, 0x69, 0x03, 0xec, 0xea, 0xe2, 0x50, 0xf1, 0x0c, 0x3c, 0xf0, 0xac, 0xf3, 0x53, 0x2d, 0xf0, 0x1c, 0xf5, 0xed, 0x6c, 0x39, 0x39, 0x73, 0x80, 0x16, 0xc8, 0x52, 0xb0, 0x23, 0xcd, 0xe0, 0x3e, 0xdc, 0xdd, 0x3c, 0x47, 0xa0, 0xbb, 0x35, 0x8a, 0xe2, 0x98, 0x68, 0x8b, 0xbe, 0xe5, 0xbf, 0x72, 0xee, 0xd2, 0xfa, 0xa5, 0xed, 0x12, 0xed, 0xfc, 0x98, 0x18, 0xa9, 0x26, 0x76, 0xdc, 0x28, 0x4b, 0x10, 0x20, 0x1c, 0xd3, 0x7f, 0x16, 0x77, 0x2d, 0xed, 0x6f, 0x80, 0xf7, 0x49, 0xbb, 0x53, 0x05, 0xbb, 0x5d, 0x68, 0xc7, 0xd4, 0xc8, 0x75, 0x16, 0x3f, 0x89, 0x5a, 0x8b, 0xf7, 0x17, 0x47, 0xd4, 0x4c, 0xf1, 0xd2, 0x89, 0x79, 0x3e, 0x4d, 0x3d, 0x98, 0xa8, 0x61, 0xde, 0x3a, 0x1e, 0xd2, 0xf8, 0x5e, 0x03, 0xe0, 0xc1, 0xc9, 0x1c, 0x8c, 0xd3, 0x8d, 0x4d, 0xd3, 0x95, 0x36, 0xb3, 0x37, 0x5f, 0x63, 0x63, 0x9b, 0x33, 0x14, 0xf0, 0x2d, 0x26, 0x6b, 0x53, 0x7c, 0x89, 0x8c, 0x32, 0xc2, 0x6e, 0xec, 0x3d, 0x21, 0x00, 0x39, 0xc9, 0xa1, 0x68, 0xe2, 0x50, 0x83, 0x2e, 0xb0, 0x3a, 0x2b, 0xf3, 0x36, 0xa0, 0xac, 0x2f, 0xe4, 0x6f, 0x61, 0xc2, 0x51, 0x09, 0x39, 0x3e, 0x8b, 0x53, 0xb9, 0xbb, 0x67, 0xda, 0xdc, 0x53, 0xb9, 0x76, 0x59, 0x36, 0x9d, 0x43, 0xe5, 0x20, 0xe0, 0x3d, 0x32, 0x60, 0x85, 0x22, 0x51, 0xb7, 0xc7, 0x33, 0xbb, 0xdd, 0x15, 0x2f, 0xa4, 0x78, 0xa6, 0x07, 0x7b, 0x81, 0x46, 0x36, 0x04, 0x86, 0xdd, 0x79, 0x35, 0xc7, 0x95, 0x2c, 0x3b, 0xb0, 0xa3, 0x17, 0x35, 0xe5, 0x73, 0x1f, 0xb4, 0x5c, 0x59, 0xef, 0xda, 0xea, 0x10, 0x65, 0x7b, 0x7a, 0xd0, 0x7f, 0x9f, 0xb3, 0xb4, 0x2a, 0x37, 0x3b, 0x70, 0x8b, 0x9b, 0x5b, 0xb9, 0x2b, 0xb7, 0xec, 0xb2, 0x51, 0x12, 0x97, 0x53, 0x29, 0x5a, 0xd4, 0xf0, 0x12, 0x10, 0xdc, 0x4f, 0x02, 0xbb, 0x12, 0x92, 0x2f, 0x62, 0xd4, 0x3f, 0x69, 0x43, 0x7c, 0x0d, 0xd6, 0xfc, 0x58, 0x75, 0x01, 0x88, 0x9d, 0x58, 0x16, 0x4b, 0xde, 0xba, 0x90, 0xff, 0x47, 0x01, 0x89, 0x06, 0x6a, 0xf6, 0x5f, 0xb2, 0x90, 0x6a, 0xb3, 0x02, 0xa6, 0x02, 0x88, 0xbf, 0xb3, 0x47, 0x7e, 0x2a, 0xd9, 0xd5, 0xfa, 0x68, 0x78, 0x35, 0x4d, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x3f, 0x30, 0x3d, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xf0, 0x8f, 0x59, 0x38, 0x00, 0xb3, 0xf5, 0x8f, 0x9a, 0x96, 0x0c, 0xd5, 0xeb, 0xfa, 0x7b, 0xaa, 0x17, 0xe8, 0x13, 0x12, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0xbe, 0xe4, 0x5c, 0x62, 0x4e, 0x24, 0xf4, 0x0c, 0x08, 0xff, 0xf0, 0xd3, 0x0c, 0x68, 0xe4, 0x93, 0x49, 0x22, 0x3f, 0x44, 0x27, 0x6f, 0xbb, 0x6d, 0xde, 0x83, 0x66, 0xce, 0xa8, 0xcc, 0x0d, 0xfc, 0xf5, 0x9a, 0x06, 0xe5, 0x77, 0x14, 0x91, 0xeb, 0x9d, 0x41, 0x7b, 0x99, 0x2a, 0x84, 0xe5, 0xff, 0xfc, 0x21, 0xc1, 0x5d, 0xf0, 0xe4, 0x1f, 0x57, 0xb7, 0x75, 0xa9, 0xa1, 0x5f, 0x02, 0x26, 0xff, 0xd7, 0xc7, 0xf7, 0x4e, 0xde, 0x4f, 0xf8, 0xf7, 0x1c, 0x46, 0xc0, 0x7a, 0x4f, 0x40, 0x2c, 0x22, 0x35, 0xf0, 0x19, 0xb1, 0xd0, 0x6b, 0x67, 0x2c, 0xb0, 0xa8, 0xe0, 0xc0, 0x40, 0x37, 0x35, 0xf6, 0x84, 0x5c, 0x5c, 0xe3, 0xaf, 0x42, 0x78, 0xfe, 0xa7, 0xc9, 0x0d, 0x50, 0xea, 0x0d, 0x84, 0x76, 0xf6, 0x51, 0xef, 0x83, 0x53, 0xc6, 0x7a, 0xff, 0x0e, 0x56, 0x49, 0x2e, 0x8f, 0x7a, 0xd6, 0x0c, 0xe6, 0x27, 0x54, 0xe3, 0x4d, 0x0a, 0x60, 0x72, 0x62, 0xcd, 0x91, 0x07, 0xd6, 0xa5, 0xbf, 0xc8, 0x99, 0x6b, 0xed, 0xc4, 0x19, 0xe6, 0xab, 0x4c, 0x11, 0x38, 0xc5, 0x6f, 0x31, 0xe2, 0x6e, 0x49, 0xc8, 0x3f, 0x76, 0x80, 0x26, 0x03, 0x26, 0x29, 0xe0, 0x36, 0xf6, 0xf6, 0x20, 0x53, 0xe3, 0x17, 0x70, 0x34, 0x17, 0x9d, 0x63, 0x68, 0x1e, 0x6b, 0xec, 0xc3, 0x4d, 0x86, 0xb8, 0x13, 0x30, 0x2f, 0x5d, 0x46, 0x0d, 0x47, 0x43, 0xd5, 0x1b, 0xaa, 0x59, 0x0e, 0xb9, 0x5c, 0x8d, 0x06, 0x48, 0xad, 0x74, 0x87, 0x5f, 0xc7, 0xfc, 0x31, 0x54, 0x41, 0x13, 0xe2, 0xc7, 0x21, 0x0e, 0x9e, 0xe0, 0x1e, 0x0d, 0xe1, 0xc0, 0x7b, 0x43, 0x85, 0x90, 0xc5, 0x8a, 0x58, 0xc6, 0x65, 0x0a, 0x78, 0x57, 0xf2, 0xc6, 0x23, 0x0f, 0x01, 0xd9, 0x20, 0x4b, 0xde, 0x0f, 0xfb, 0x92, 0x85, 0x75, 0x2a, 0x5c, 0x73, 0x8d, 0x6d, 0x7b, 0x25, 0x91, 0xca, 0xee, 0x45, 0xae, 0x06, 0x4b, 0x00, 0xcc, 0xd3, 0xb1, 0x59, 0x50, 0xda, 0x3a, 0x88, 0x3b, 0x29, 0x43, 0x46, 0x5e, 0x97, 0x2b, 0x54, 0xce, 0x53, 0x6f, 0x8d, 0x4a, 0xe7, 0x96, 0xfa, 0xbf, 0x71, 0x0e, 0x42, 0x8b, 0x7c, 0xfd, 0x28, 0xa0, 0xd0, 0x48, 0xca, 0xda, 0xc4, 0x81, 0x4c, 0xbb, 0xa2, 0x73, 0x93, 0x26, 0xc8, 0xeb, 0x0c, 0xd6, 0x26, 0x88, 0xb6, 0xc0, 0x24, 0xcf, 0xbb, 0xbd, 0x5b, 0xeb, 0x75, 0x7d, 0xe9, 0x08, 0x8e, 0x86, 0x33, 0x2c, 0x79, 0x77, 0x09, 0x69, 0xa5, 0x89, 0xfc, 0xb3, 0x70, 0x90, 0x87, 0x76, 0x8f, 0xd3, 0x22, 0xbb, 0x42, 0xce, 0xbd, 0x73, 0x0b, 0x20, 0x26, 0x2a, 0xd0, 0x9b, 0x3d, 0x70, 0x1e, 0x24, 0x6c, 0xcd, 0x87, 0x76, 0xa9, 0x17, 0x96, 0xb7, 0xcf, 0x0d, 0x92, 0xfb, 0x8e, 0x18, 0xa9, 0x98, 0x49, 0xd1, 0x9e, 0xfe, 0x60, 0x44, 0x72, 0x21, 0xb9, 0x19, 0xed, 0xc2, 0xf5, 0x31, 0xf1, 0x39, 0x48, 0x88, 0x90, 0x24, 0x75, 0x54, 0x16, 0xad, 0xce, 0xf4, 0xf8, 0x69, 0x14, 0x64, 0x39, 0xfb, 0xa3, 0xb8, 0xba, 0x70, 0x40, 0xc7, 0x27, 0x1c, 0xbf, 0xc4, 0x56, 0x53, 0xfa, 0x63, 0x65, 0xd0, 0xf3, 0x1c, 0x0e, 0x16, 0xf5, 0x6b, 0x86, 0x58, 0x4d, 0x18, 0xd4, 0xe4, 0x0d, 0x8e, 0xa5, 0x9d, 0x5b, 0x91, 0xdc, 0x76, 0x24, 0x50, 0x3f, 0xc6, 0x2a, 0xfb, 0xd9, 0xb7, 0x9c, 0xb5, 0xd6, 0xe6, 0xd0, 0xd9, 0xe8, 0x19, 0x8b, 0x15, 0x71, 0x48, 0xad, 0xb7, 0xea, 0xd8, 0x59, 0x88, 0xd4, 0x90, 0xbf, 0x16, 0xb3, 0xd9, 0xe9, 0xac, 0x59, 0x61, 0x54, 0xc8, 0x1c, 0xba, 0xca, 0xc1, 0xca, 0xe1, 0xb9, 0x20, 0x4c, 0x8f, 0x3a, 0x93, 0x89, 0xa5, 0xa0, 0xcc, 0xbf, 0xd3, 0xf6, 0x75, 0xa4, 0x75, 0x96, 0x6d, 0x56, 0x30, 0x82, 0x05, 0x60, 0x30, 0x82, 0x03, 0x48, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x0a, 0x01, 0x42, 0x80, 0x00, 0x00, 0x01, 0x45, 0x23, 0xc8, 0x44, 0xb5, 0x00, 0x00, 0x00, 0x02, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x4a, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x09, 0x49, 0x64, 0x65, 0x6e, 0x54, 0x72, 0x75, 0x73, 0x74, 0x31, 0x27, 0x30, 0x25, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x1e, 0x49, 0x64, 0x65, 0x6e, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x72, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x31, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x34, 0x30, 0x31, 0x31, 0x36, 0x31, 0x38, 0x31, 0x32, 0x32, 0x33, 0x5a, 0x17, 0x0d, 0x33, 0x34, 0x30, 0x31, 0x31, 0x36, 0x31, 0x38, 0x31, 0x32, 0x32, 0x33, 0x5a, 0x30, 0x4a, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x09, 0x49, 0x64, 0x65, 0x6e, 0x54, 0x72, 0x75, 0x73, 0x74, 0x31, 0x27, 0x30, 0x25, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x1e, 0x49, 0x64, 0x65, 0x6e, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x72, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x31, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xa7, 0x50, 0x19, 0xde, 0x3f, 0x99, 0x3d, 0xd4, 0x33, 0x46, 0xf1, 0x6f, 0x51, 0x61, 0x82, 0xb2, 0xa9, 0x4f, 0x8f, 0x67, 0x89, 0x5d, 0x84, 0xd9, 0x53, 0xdd, 0x0c, 0x28, 0xd9, 0xd7, 0xf0, 0xff, 0xae, 0x95, 0x43, 0x72, 0x99, 0xf9, 0xb5, 0x5d, 0x7c, 0x8a, 0xc1, 0x42, 0xe1, 0x31, 0x50, 0x74, 0xd1, 0x81, 0x0d, 0x7c, 0xcd, 0x9b, 0x21, 0xab, 0x43, 0xe2, 0xac, 0xad, 0x5e, 0x86, 0x6e, 0xf3, 0x09, 0x8a, 0x1f, 0x5a, 0x32, 0xbd, 0xa2, 0xeb, 0x94, 0xf9, 0xe8, 0x5c, 0x0a, 0xec, 0xff, 0x98, 0xd2, 0xaf, 0x71, 0xb3, 0xb4, 0x53, 0x9f, 0x4e, 0x87, 0xef, 0x92, 0xbc, 0xbd, 0xec, 0x4f, 0x32, 0x30, 0x88, 0x4b, 0x17, 0x5e, 0x57, 0xc4, 0x53, 0xc2, 0xf6, 0x02, 0x97, 0x8d, 0xd9, 0x62, 0x2b, 0xbf, 0x24, 0x1f, 0x62, 0x8d, 0xdf, 0xc3, 0xb8, 0x29, 0x4b, 0x49, 0x78, 0x3c, 0x93, 0x60, 0x88, 0x22, 0xfc, 0x99, 0xda, 0x36, 0xc8, 0xc2, 0xa2, 0xd4, 0x2c, 0x54, 0x00, 0x67, 0x35, 0x6e, 0x73, 0xbf, 0x02, 0x58, 0xf0, 0xa4, 0xdd, 0xe5, 0xb0, 0xa2, 0x26, 0x7a, 0xca, 0xe0, 0x36, 0xa5, 0x19, 0x16, 0xf5, 0xfd, 0xb7, 0xef, 0xae, 0x3f, 0x40, 0xf5, 0x6d, 0x5a, 0x04, 0xfd, 0xce, 0x34, 0xca, 0x24, 0xdc, 0x74, 0x23, 0x1b, 0x5d, 0x33, 0x13, 0x12, 0x5d, 0xc4, 0x01, 0x25, 0xf6, 0x30, 0xdd, 0x02, 0x5d, 0x9f, 0xe0, 0xd5, 0x47, 0xbd, 0xb4, 0xeb, 0x1b, 0xa1, 0xbb, 0x49, 0x49, 0xd8, 0x9f, 0x5b, 0x02, 0xf3, 0x8a, 0xe4, 0x24, 0x90, 0xe4, 0x62, 0x4f, 0x4f, 0xc1, 0xaf, 0x8b, 0x0e, 0x74, 0x17, 0xa8, 0xd1, 0x72, 0x88, 0x6a, 0x7a, 0x01, 0x49, 0xcc, 0xb4, 0x46, 0x79, 0xc6, 0x17, 0xb1, 0xda, 0x98, 0x1e, 0x07, 0x59, 0xfa, 0x75, 0x21, 0x85, 0x65, 0xdd, 0x90, 0x56, 0xce, 0xfb, 0xab, 0xa5, 0x60, 0x9d, 0xc4, 0x9d, 0xf9, 0x52, 0xb0, 0x8b, 0xbd, 0x87, 0xf9, 0x8f, 0x2b, 0x23, 0x0a, 0x23, 0x76, 0x3b, 0xf7, 0x33, 0xe1, 0xc9, 0x00, 0xf3, 0x69, 0xf9, 0x4b, 0xa2, 0xe0, 0x4e, 0xbc, 0x7e, 0x93, 0x39, 0x84, 0x07, 0xf7, 0x44, 0x70, 0x7e, 0xfe, 0x07, 0x5a, 0xe5, 0xb1, 0xac, 0xd1, 0x18, 0xcc, 0xf2, 0x35, 0xe5, 0x49, 0x49, 0x08, 0xca, 0x56, 0xc9, 0x3d, 0xfb, 0x0f, 0x18, 0x7d, 0x8b, 0x3b, 0xc1, 0x13, 0xc2, 0x4d, 0x8f, 0xc9, 0x4f, 0x0e, 0x37, 0xe9, 0x1f, 0xa1, 0x0e, 0x6a, 0xdf, 0x62, 0x2e, 0xcb, 0x35, 0x06, 0x51, 0x79, 0x2c, 0xc8, 0x25, 0x38, 0xf4, 0xfa, 0x4b, 0xa7, 0x89, 0x5c, 0x9c, 0xd2, 0xe3, 0x0d, 0x39, 0x86, 0x4a, 0x74, 0x7c, 0xd5, 0x59, 0x87, 0xc2, 0x3f, 0x4e, 0x0c, 0x5c, 0x52, 0xf4, 0x3d, 0xf7, 0x52, 0x82, 0xf1, 0xea, 0xa3, 0xac, 0xfd, 0x49, 0x34, 0x1a, 0x28, 0xf3, 0x41, 0x88, 0x3a, 0x13, 0xee, 0xe8, 0xde, 0xff, 0x99, 0x1d, 0x5f, 0xba, 0xcb, 0xe8, 0x1e, 0xf2, 0xb9, 0x50, 0x60, 0xc0, 0x31, 0xd3, 0x73, 0xe5, 0xef, 0xbe, 0xa0, 0xed, 0x33, 0x0b, 0x74, 0xbe, 0x20, 0x20, 0xc4, 0x67, 0x6c, 0xf0, 0x08, 0x03, 0x7a, 0x55, 0x80, 0x7f, 0x46, 0x4e, 0x96, 0xa7, 0xf4, 0x1e, 0x3e, 0xe1, 0xf6, 0xd8, 0x09, 0xe1, 0x33, 0x64, 0x2b, 0x63, 0xd7, 0x32, 0x5e, 0x9f, 0xf9, 0xc0, 0x7b, 0x0f, 0x78, 0x6f, 0x97, 0xbc, 0x93, 0x9a, 0xf9, 0x9c, 0x12, 0x90, 0x78, 0x7a, 0x80, 0x87, 0x15, 0xd7, 0x72, 0x74, 0x9c, 0x55, 0x74, 0x78, 0xb1, 0xba, 0xe1, 0x6e, 0x70, 0x04, 0xba, 0x4f, 0xa0, 0xba, 0x68, 0xc3, 0x7b, 0xff, 0x31, 0xf0, 0x73, 0x3d, 0x3d, 0x94, 0x2a, 0xb1, 0x0b, 0x41, 0x0e, 0xa0, 0xfe, 0x4d, 0x88, 0x65, 0x6b, 0x79, 0x33, 0xb4, 0xd7, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xed, 0x44, 0x19, 0xc0, 0xd3, 0xf0, 0x06, 0x8b, 0xee, 0xa4, 0x7b, 0xbe, 0x42, 0xe7, 0x26, 0x54, 0xc8, 0x8e, 0x36, 0x76, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x0d, 0xae, 0x90, 0x32, 0xf6, 0xa6, 0x4b, 0x7c, 0x44, 0x76, 0x19, 0x61, 0x1e, 0x27, 0x28, 0xcd, 0x5e, 0x54, 0xef, 0x25, 0xbc, 0xe3, 0x08, 0x90, 0xf9, 0x29, 0xd7, 0xae, 0x68, 0x08, 0xe1, 0x94, 0x00, 0x58, 0xef, 0x2e, 0x2e, 0x7e, 0x53, 0x52, 0x8c, 0xb6, 0x5c, 0x07, 0xea, 0x88, 0xba, 0x99, 0x8b, 0x50, 0x94, 0xd7, 0x82, 0x80, 0xdf, 0x61, 0x09, 0x00, 0x93, 0xad, 0x0d, 0x14, 0xe6, 0xce, 0xc1, 0xf2, 0x37, 0x94, 0x78, 0xb0, 0x5f, 0x9c, 0xb3, 0xa2, 0x73, 0xb8, 0x8f, 0x05, 0x93, 0x38, 0xcd, 0x8d, 0x3e, 0xb0, 0xb8, 0xfb, 0xc0, 0xcf, 0xb1, 0xf2, 0xec, 0x2d, 0x2d, 0x1b, 0xcc, 0xec, 0xaa, 0x9a, 0xb3, 0xaa, 0x60, 0x82, 0x1b, 0x2d, 0x3b, 0xc3, 0x84, 0x3d, 0x57, 0x8a, 0x96, 0x1e, 0x9c, 0x75, 0xb8, 0xd3, 0x30, 0xcd, 0x60, 0x08, 0x83, 0x90, 0xd3, 0x8e, 0x54, 0xf1, 0x4d, 0x66, 0xc0, 0x5d, 0x74, 0x03, 0x40, 0xa3, 0xee, 0x85, 0x7e, 0xc2, 0x1f, 0x77, 0x9c, 0x06, 0xe8, 0xc1, 0xa7, 0x18, 0x5d, 0x52, 0x95, 0xed, 0xc9, 0xdd, 0x25, 0x9e, 0x6d, 0xfa, 0xa9, 0xed, 0xa3, 0x3a, 0x34, 0xd0, 0x59, 0x7b, 0xda, 0xed, 0x50, 0xf3, 0x35, 0xbf, 0xed, 0xeb, 0x14, 0x4d, 0x31, 0xc7, 0x60, 0xf4, 0xda, 0xf1, 0x87, 0x9c, 0xe2, 0x48, 0xe2, 0xc6, 0xc5, 0x37, 0xfb, 0x06, 0x10, 0xfa, 0x75, 0x59, 0x66, 0x31, 0x47, 0x29, 0xda, 0x76, 0x9a, 0x1c, 0xe9, 0x82, 0xae, 0xef, 0x9a, 0xb9, 0x51, 0xf7, 0x88, 0x23, 0x9a, 0x69, 0x95, 0x62, 0x3c, 0xe5, 0x55, 0x80, 0x36, 0xd7, 0x54, 0x02, 0xff, 0xf1, 0xb9, 0x5d, 0xce, 0xd4, 0x23, 0x6f, 0xd8, 0x45, 0x84, 0x4a, 0x5b, 0x65, 0xef, 0x89, 0x0c, 0xdd, 0x14, 0xa7, 0x20, 0xcb, 0x18, 0xa5, 0x25, 0xb4, 0x0d, 0xf9, 0x01, 0xf0, 0xa2, 0xd2, 0xf4, 0x00, 0xc8, 0x74, 0x8e, 0xa1, 0x2a, 0x48, 0x8e, 0x65, 0xdb, 0x13, 0xc4, 0xe2, 0x25, 0x17, 0x7d, 0xeb, 0xbe, 0x87, 0x5b, 0x17, 0x20, 0x54, 0x51, 0x93, 0x4a, 0x53, 0x03, 0x0b, 0xec, 0x5d, 0xca, 0x33, 0xed, 0x62, 0xfd, 0x45, 0xc7, 0x2f, 0x5b, 0xdc, 0x58, 0xa0, 0x80, 0x39, 0xe6, 0xfa, 0xd7, 0xfe, 0x13, 0x14, 0xa6, 0xed, 0x3d, 0x94, 0x4a, 0x42, 0x74, 0xd4, 0xc3, 0x77, 0x59, 0x73, 0xcd, 0x8f, 0x46, 0xbe, 0x55, 0x38, 0xef, 0xfa, 0xe8, 0x91, 0x32, 0xea, 0x97, 0x58, 0x04, 0x22, 0xde, 0x38, 0xc3, 0xcc, 0xbc, 0x6d, 0xc9, 0x33, 0x3a, 0x6a, 0x0a, 0x69, 0x3f, 0xa0, 0xc8, 0xea, 0x72, 0x8f, 0x8c, 0x63, 0x86, 0x23, 0xbd, 0x6d, 0x3c, 0x96, 0x9e, 0x95, 0xe0, 0x49, 0x4c, 0xaa, 0xa2, 0xb9, 0x2a, 0x1b, 0x9c, 0x36, 0x81, 0x78, 0xed, 0xc3, 0xe8, 0x46, 0xe2, 0x26, 0x59, 0x44, 0x75, 0x1e, 0xd9, 0x75, 0x89, 0x51, 0xcd, 0x10, 0x84, 0x9d, 0x61, 0x60, 0xcb, 0x5d, 0xf9, 0x97, 0x22, 0x4d, 0x8e, 0x98, 0xe6, 0xe3, 0x7f, 0xf6, 0x5b, 0xbb, 0xae, 0xcd, 0xca, 0x4a, 0x81, 0x6b, 0x5e, 0x0b, 0xf3, 0x51, 0xe1, 0x74, 0x2b, 0xe9, 0x7e, 0x27, 0xa7, 0xd9, 0x99, 0x49, 0x4e, 0xf8, 0xa5, 0x80, 0xdb, 0x25, 0x0f, 0x1c, 0x63, 0x62, 0x8a, 0xc9, 0x33, 0x67, 0x6b, 0x3c, 0x10, 0x83, 0xc6, 0xad, 0xde, 0xa8, 0xcd, 0x16, 0x8e, 0x8d, 0xf0, 0x07, 0x37, 0x71, 0x9f, 0xf2, 0xab, 0xfc, 0x41, 0xf5, 0xc1, 0x8b, 0xec, 0x00, 0x37, 0x5d, 0x09, 0xe5, 0x4e, 0x80, 0xef, 0xfa, 0xb1, 0x5c, 0x38, 0x06, 0xa5, 0x1b, 0x4a, 0xe1, 0xdc, 0x38, 0x2d, 0x3c, 0xdc, 0xab, 0x1f, 0x90, 0x1a, 0xd5, 0x4a, 0x9c, 0xee, 0xd1, 0x70, 0x6c, 0xcc, 0xee, 0xf4, 0x57, 0xf8, 0x18, 0xba, 0x84, 0x6e, 0x87, 0x30, 0x82, 0x05, 0x66, 0x30, 0x82, 0x03, 0x4e, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x0a, 0x01, 0x42, 0x80, 0x00, 0x00, 0x01, 0x45, 0x23, 0xcf, 0x46, 0x7c, 0x00, 0x00, 0x00, 0x02, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x4d, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x09, 0x49, 0x64, 0x65, 0x6e, 0x54, 0x72, 0x75, 0x73, 0x74, 0x31, 0x2a, 0x30, 0x28, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x21, 0x49, 0x64, 0x65, 0x6e, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x53, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x31, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x34, 0x30, 0x31, 0x31, 0x36, 0x31, 0x37, 0x35, 0x33, 0x33, 0x32, 0x5a, 0x17, 0x0d, 0x33, 0x34, 0x30, 0x31, 0x31, 0x36, 0x31, 0x37, 0x35, 0x33, 0x33, 0x32, 0x5a, 0x30, 0x4d, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x09, 0x49, 0x64, 0x65, 0x6e, 0x54, 0x72, 0x75, 0x73, 0x74, 0x31, 0x2a, 0x30, 0x28, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x21, 0x49, 0x64, 0x65, 0x6e, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x53, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x31, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xb6, 0x22, 0x94, 0xfc, 0xa4, 0x48, 0xaf, 0xe8, 0x47, 0x6b, 0x0a, 0xfb, 0x27, 0x76, 0xe4, 0xf2, 0x3f, 0x8a, 0x3b, 0x7a, 0x4a, 0x2c, 0x31, 0x2a, 0x8c, 0x8d, 0xb0, 0xa9, 0xc3, 0x31, 0x6b, 0xa8, 0x77, 0x76, 0x84, 0x26, 0xb6, 0xac, 0x81, 0x42, 0x0d, 0x08, 0xeb, 0x55, 0x58, 0xbb, 0x7a, 0xf8, 0xbc, 0x65, 0x7d, 0xf2, 0xa0, 0x6d, 0x8b, 0xa8, 0x47, 0xe9, 0x62, 0x76, 0x1e, 0x11, 0xee, 0x08, 0x14, 0xd1, 0xb2, 0x44, 0x16, 0xf4, 0xea, 0xd0, 0xfa, 0x1e, 0x2f, 0x5e, 0xdb, 0xcb, 0x73, 0x41, 0xae, 0xbc, 0x00, 0xb0, 0x4a, 0x2b, 0x40, 0xb2, 0xac, 0xe1, 0x3b, 0x4b, 0xc2, 0x2d, 0x9d, 0xe4, 0xa1, 0x9b, 0xec, 0x1a, 0x3a, 0x1e, 0xf0, 0x08, 0xb3, 0xd0, 0xe4, 0x24, 0x35, 0x07, 0x9f, 0x9c, 0xb4, 0xc9, 0x52, 0x6d, 0xdb, 0x07, 0xca, 0x8f, 0xb5, 0x5b, 0xf0, 0x83, 0xf3, 0x4f, 0xc7, 0x2d, 0xa5, 0xc8, 0xad, 0xcb, 0x95, 0x20, 0xa4, 0x31, 0x28, 0x57, 0x58, 0x5a, 0xe4, 0x8d, 0x1b, 0x9a, 0xab, 0x9e, 0x0d, 0x0c, 0xf2, 0x0a, 0x33, 0x39, 0x22, 0x39, 0x0a, 0x97, 0x2e, 0xf3, 0x53, 0x77, 0xb9, 0x44, 0x45, 0xfd, 0x84, 0xcb, 0x36, 0x20, 0x81, 0x59, 0x2d, 0x9a, 0x6f, 0x6d, 0x48, 0x48, 0x61, 0xca, 0x4c, 0xdf, 0x53, 0xd1, 0xaf, 0x52, 0xbc, 0x44, 0x9f, 0xab, 0x2f, 0x6b, 0x83, 0x72, 0xef, 0x75, 0x80, 0xda, 0x06, 0x33, 0x1b, 0x5d, 0xc8, 0xda, 0x63, 0xc6, 0x4d, 0xcd, 0xac, 0x66, 0x31, 0xcd, 0xd1, 0xde, 0x3e, 0x87, 0x10, 0x36, 0xe1, 0xb9, 0xa4, 0x7a, 0xef, 0x60, 0x50, 0xb2, 0xcb, 0xca, 0xa6, 0x56, 0xe0, 0x37, 0xaf, 0xab, 0x34, 0x13, 0x39, 0x25, 0xe8, 0x39, 0x66, 0xe4, 0x98, 0x7a, 0xaa, 0x12, 0x98, 0x9c, 0x59, 0x66, 0x86, 0x3e, 0xad, 0xf1, 0xb0, 0xca, 0x3e, 0x06, 0x0f, 0x7b, 0xf0, 0x11, 0x4b, 0x37, 0xa0, 0x44, 0x6d, 0x7b, 0xcb, 0xa8, 0x8c, 0x71, 0xf4, 0xd5, 0xb5, 0x91, 0x36, 0xcc, 0xf0, 0x15, 0xc6, 0x2b, 0xde, 0x51, 0x17, 0xb1, 0x97, 0x4c, 0x50, 0x3d, 0xb1, 0x95, 0x59, 0x7c, 0x05, 0x7d, 0x2d, 0x21, 0xd5, 0x00, 0xbf, 0x01, 0x67, 0xa2, 0x5e, 0x7b, 0xa6, 0x5c, 0xf2, 0xf7, 0x22, 0xf1, 0x90, 0x0d, 0x93, 0xdb, 0xaa, 0x44, 0x51, 0x66, 0xcc, 0x7d, 0x76, 0x03, 0xeb, 0x6a, 0xa8, 0x2a, 0x38, 0x19, 0x97, 0x76, 0x0d, 0x6b, 0x8a, 0x61, 0xf9, 0xbc, 0xf6, 0xee, 0x76, 0xfd, 0x70, 0x2b, 0xdd, 0x29, 0x3c, 0xf8, 0x0a, 0x1e, 0x5b, 0x42, 0x1c, 0x8b, 0x56, 0x2f, 0x55, 0x1b, 0x1c, 0xa1, 0x2e, 0xb5, 0xc7, 0x16, 0xe6, 0xf8, 0xaa, 0x3c, 0x92, 0x8e, 0x69, 0xb6, 0x01, 0xc1, 0xb5, 0x86, 0x9d, 0x89, 0x0f, 0x0b, 0x38, 0x94, 0x54, 0xe8, 0xea, 0xdc, 0x9e, 0x3d, 0x25, 0xbc, 0x53, 0x26, 0xed, 0xd5, 0xab, 0x39, 0xaa, 0xc5, 0x40, 0x4c, 0x54, 0xab, 0xb2, 0xb4, 0xd9, 0xd9, 0xf8, 0xd7, 0x72, 0xdb, 0x1c, 0xbc, 0x6d, 0xbd, 0x65, 0x5f, 0xef, 0x88, 0x35, 0x2a, 0x66, 0x2f, 0xee, 0xf6, 0xb3, 0x65, 0xf0, 0x33, 0x8d, 0x7c, 0x98, 0x41, 0x69, 0x46, 0x0f, 0x43, 0x1c, 0x69, 0xfa, 0x9b, 0xb5, 0xd0, 0x61, 0x6a, 0xcd, 0xca, 0x4b, 0xd9, 0x4c, 0x90, 0x46, 0xab, 0x15, 0x59, 0xa1, 0x47, 0x54, 0x29, 0x2e, 0x83, 0x28, 0x5f, 0x1c, 0xc2, 0xa2, 0xab, 0x72, 0x17, 0x00, 0x06, 0x8e, 0x45, 0xec, 0x8b, 0xe2, 0x33, 0x3d, 0x7f, 0xda, 0x19, 0x44, 0xe4, 0x62, 0x72, 0xc3, 0xdf, 0x22, 0xc6, 0xf2, 0x56, 0xd4, 0xdd, 0x5f, 0x95, 0x72, 0xed, 0x6d, 0x5f, 0xf7, 0x48, 0x03, 0x5b, 0xfd, 0xc5, 0x2a, 0xa0, 0xf6, 0x73, 0x23, 0x84, 0x10, 0x1b, 0x01, 0xe7, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xe3, 0x71, 0xe0, 0x9e, 0xd8, 0xa7, 0x42, 0xd9, 0xdb, 0x71, 0x91, 0x6b, 0x94, 0x93, 0xeb, 0xc3, 0xa3, 0xd1, 0x14, 0xa3, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x47, 0xfa, 0xdd, 0x0a, 0xb0, 0x11, 0x91, 0x38, 0xad, 0x4d, 0x5d, 0xf7, 0xe5, 0x0e, 0x97, 0x54, 0x19, 0x82, 0x48, 0x87, 0x54, 0x8c, 0xaa, 0x64, 0x99, 0xd8, 0x5a, 0xfe, 0x88, 0x01, 0xc5, 0x58, 0xa5, 0x99, 0xb1, 0x23, 0x54, 0x23, 0xb7, 0x6a, 0x1d, 0x20, 0x57, 0xe5, 0x01, 0x62, 0x41, 0x17, 0xd3, 0x09, 0xdb, 0x75, 0xcb, 0x6e, 0x54, 0x90, 0x75, 0xfe, 0x1a, 0x9f, 0x81, 0x0a, 0xc2, 0xdd, 0xd7, 0xf7, 0x09, 0xd0, 0x5b, 0x72, 0x15, 0xe4, 0x1e, 0x09, 0x6a, 0x3d, 0x33, 0xf3, 0x21, 0x9a, 0xe6, 0x15, 0x7e, 0xad, 0x51, 0xd5, 0x0d, 0x10, 0xed, 0x7d, 0x42, 0xc0, 0x8f, 0xee, 0xc0, 0x9a, 0x08, 0xd5, 0x41, 0xd6, 0x5c, 0x0e, 0x21, 0x69, 0x6e, 0x80, 0x61, 0x0e, 0x15, 0xc0, 0xb8, 0xcf, 0xc5, 0x49, 0x12, 0x52, 0xcc, 0xbe, 0x3a, 0xcc, 0xd4, 0x2e, 0x38, 0x05, 0xde, 0x35, 0xfd, 0x1f, 0x6f, 0xb8, 0x80, 0x68, 0x98, 0x3d, 0x4d, 0xa0, 0xca, 0x40, 0x65, 0xd2, 0x73, 0x7c, 0xf5, 0x8b, 0xd9, 0x0a, 0x95, 0x3f, 0xd8, 0x3f, 0x23, 0x6d, 0x1a, 0xd1, 0x2a, 0x24, 0x19, 0xd9, 0x85, 0xb3, 0x17, 0xef, 0x78, 0x6e, 0xa9, 0x58, 0xd1, 0x23, 0xd3, 0xc7, 0x13, 0xed, 0x72, 0x25, 0x7f, 0x5d, 0xb1, 0x73, 0x70, 0xd0, 0x7f, 0x06, 0x97, 0x09, 0x84, 0x29, 0x80, 0x61, 0x1d, 0xfa, 0x5e, 0xff, 0x73, 0xac, 0xa0, 0xe3, 0x89, 0xb8, 0x1c, 0x71, 0x15, 0xc6, 0xde, 0x31, 0x7f, 0x12, 0xdc, 0xe1, 0x6d, 0x9b, 0xaf, 0xe7, 0xe8, 0x9f, 0x75, 0x78, 0x4c, 0xab, 0x46, 0x3b, 0x9a, 0xce, 0xbf, 0x05, 0x18, 0x5d, 0x4d, 0x15, 0x3c, 0x16, 0x9a, 0x19, 0x50, 0x04, 0x9a, 0xb2, 0x9a, 0x6f, 0x65, 0x8b, 0x52, 0x5f, 0x3c, 0x58, 0x04, 0x28, 0x25, 0xc0, 0x66, 0x61, 0x31, 0x7e, 0xb9, 0xe0, 0x75, 0xb9, 0x1a, 0xa8, 0x81, 0xd6, 0x72, 0x17, 0xb3, 0xc5, 0x03, 0x31, 0x35, 0x11, 0x78, 0x78, 0xa2, 0xe0, 0xe9, 0x30, 0x8c, 0x7f, 0x80, 0xdf, 0x58, 0xdf, 0x3c, 0xba, 0x27, 0x96, 0xe2, 0x80, 0x34, 0x6d, 0xe3, 0x98, 0xd3, 0x64, 0x27, 0xac, 0x48, 0x7e, 0x28, 0x77, 0x5c, 0xc6, 0x25, 0x61, 0x25, 0xf8, 0x85, 0x0c, 0x65, 0xfa, 0xc4, 0x32, 0x2f, 0xa5, 0x98, 0x05, 0xe4, 0xf8, 0x0b, 0x67, 0x16, 0x16, 0xc6, 0x82, 0xb8, 0x32, 0x19, 0xf9, 0xf9, 0xb9, 0x79, 0xdc, 0x1f, 0xcd, 0xeb, 0xaf, 0xab, 0x0e, 0xdd, 0x1b, 0xdb, 0x45, 0xe4, 0x7a, 0xe7, 0x02, 0xe2, 0x95, 0x5d, 0xfc, 0x69, 0xf0, 0x53, 0x69, 0x61, 0x95, 0x75, 0x79, 0x0b, 0x5e, 0x55, 0xe6, 0x38, 0x1c, 0x94, 0xa9, 0x59, 0x33, 0x9e, 0xc8, 0x71, 0x74, 0x79, 0x7f, 0x51, 0x89, 0xb6, 0xc8, 0x6a, 0xb8, 0x30, 0xc8, 0x6a, 0x38, 0xc3, 0x6e, 0x9e, 0xe1, 0x37, 0x16, 0xea, 0x05, 0x62, 0x4c, 0x5b, 0x12, 0x47, 0xed, 0xa7, 0xb4, 0xb3, 0x58, 0x56, 0xc7, 0x49, 0xf3, 0x7f, 0x12, 0x68, 0x09, 0x31, 0x71, 0xf0, 0x6d, 0xf8, 0x4e, 0x47, 0xfb, 0xd6, 0x85, 0xee, 0xc5, 0x58, 0x40, 0x19, 0xa4, 0x1d, 0xa7, 0xf9, 0x4b, 0x43, 0x37, 0xdc, 0x68, 0x5a, 0x4f, 0xcf, 0xeb, 0xc2, 0x64, 0x74, 0xde, 0xb4, 0x15, 0xd9, 0xf4, 0x54, 0x54, 0x1a, 0x2f, 0x1c, 0xd7, 0x97, 0x71, 0x54, 0x90, 0x8e, 0xd9, 0x20, 0x9d, 0x53, 0x2b, 0x7f, 0xab, 0x8f, 0xe2, 0xea, 0x30, 0xbc, 0x50, 0x37, 0xef, 0xf1, 0x47, 0xb5, 0x7d, 0x7c, 0x2c, 0x04, 0xec, 0x68, 0x9d, 0xb4, 0x49, 0x44, 0x10, 0xf4, 0x72, 0x4b, 0x1c, 0x64, 0xe7, 0xfc, 0xe6, 0x6b, 0x90, 0xdd, 0x69, 0x7d, 0x69, 0xfd, 0x00, 0x56, 0xa5, 0xb7, 0xac, 0xb6, 0xad, 0xb7, 0xca, 0x3e, 0x01, 0xef, 0x9c, 0x30, 0x82, 0x05, 0x70, 0x30, 0x82, 0x03, 0x58, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x04, 0x00, 0x98, 0x96, 0x8d, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x58, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x4e, 0x4c, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x15, 0x53, 0x74, 0x61, 0x61, 0x74, 0x20, 0x64, 0x65, 0x72, 0x20, 0x4e, 0x65, 0x64, 0x65, 0x72, 0x6c, 0x61, 0x6e, 0x64, 0x65, 0x6e, 0x31, 0x29, 0x30, 0x27, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x20, 0x53, 0x74, 0x61, 0x61, 0x74, 0x20, 0x64, 0x65, 0x72, 0x20, 0x4e, 0x65, 0x64, 0x65, 0x72, 0x6c, 0x61, 0x6e, 0x64, 0x65, 0x6e, 0x20, 0x45, 0x56, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x30, 0x31, 0x32, 0x30, 0x38, 0x31, 0x31, 0x31, 0x39, 0x32, 0x39, 0x5a, 0x17, 0x0d, 0x32, 0x32, 0x31, 0x32, 0x30, 0x38, 0x31, 0x31, 0x31, 0x30, 0x32, 0x38, 0x5a, 0x30, 0x58, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x4e, 0x4c, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x15, 0x53, 0x74, 0x61, 0x61, 0x74, 0x20, 0x64, 0x65, 0x72, 0x20, 0x4e, 0x65, 0x64, 0x65, 0x72, 0x6c, 0x61, 0x6e, 0x64, 0x65, 0x6e, 0x31, 0x29, 0x30, 0x27, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x20, 0x53, 0x74, 0x61, 0x61, 0x74, 0x20, 0x64, 0x65, 0x72, 0x20, 0x4e, 0x65, 0x64, 0x65, 0x72, 0x6c, 0x61, 0x6e, 0x64, 0x65, 0x6e, 0x20, 0x45, 0x56, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xe3, 0xc7, 0x7e, 0x89, 0xf9, 0x24, 0x4b, 0x3a, 0xd2, 0x33, 0x83, 0x35, 0x2c, 0x69, 0xec, 0xdc, 0x09, 0xa4, 0xe3, 0x51, 0xa8, 0x25, 0x2b, 0x79, 0xb8, 0x08, 0x3d, 0xe0, 0x91, 0xba, 0x84, 0x85, 0xc6, 0x85, 0xa4, 0xca, 0xe6, 0xc9, 0x2e, 0x53, 0xa4, 0xc9, 0x24, 0x1e, 0xfd, 0x55, 0x66, 0x71, 0x5d, 0x2c, 0xc5, 0x60, 0x68, 0x04, 0xb7, 0xd9, 0xc2, 0x52, 0x26, 0x38, 0x88, 0xa4, 0xd6, 0x3b, 0x40, 0xa6, 0xc2, 0xcd, 0x3f, 0xcd, 0x98, 0x93, 0xb3, 0x54, 0x14, 0x58, 0x96, 0x55, 0xd5, 0x50, 0xfe, 0x86, 0xad, 0xa4, 0x63, 0x7f, 0x5c, 0x87, 0xf6, 0x8e, 0xe6, 0x27, 0x92, 0x67, 0x17, 0x92, 0x02, 0x03, 0x2c, 0xdc, 0xd6, 0x66, 0x74, 0xed, 0xdd, 0x67, 0xff, 0xc1, 0x61, 0x8d, 0x63, 0x4f, 0x0f, 0x9b, 0x6d, 0x17, 0x30, 0x26, 0xef, 0xab, 0xd2, 0x1f, 0x10, 0xa0, 0xf9, 0xc5, 0x7f, 0x16, 0x69, 0x81, 0x03, 0x47, 0xed, 0x1e, 0x68, 0x8d, 0x72, 0xa1, 0x4d, 0xb2, 0x26, 0xc6, 0xba, 0x6c, 0x5f, 0x6d, 0xd6, 0xaf, 0xd1, 0xb1, 0x13, 0x8e, 0xa9, 0xad, 0xf3, 0x5e, 0x69, 0x75, 0x26, 0x18, 0x3e, 0x41, 0x2b, 0x21, 0x7f, 0xee, 0x8b, 0x5d, 0x07, 0x06, 0x9d, 0x43, 0xc4, 0x29, 0x0a, 0x2b, 0xfc, 0x2a, 0x3e, 0x86, 0xcb, 0x3c, 0x83, 0x3a, 0xf9, 0xc9, 0x0d, 0xda, 0xc5, 0x99, 0xe2, 0xbc, 0x78, 0x41, 0x33, 0x76, 0xe1, 0xbf, 0x2f, 0x5d, 0xe5, 0xa4, 0x98, 0x50, 0x0c, 0x15, 0xdd, 0xe0, 0xfa, 0x9c, 0x7f, 0x38, 0x68, 0xd0, 0xb2, 0xa6, 0x7a, 0xa7, 0xd1, 0x31, 0xbd, 0x7e, 0x8a, 0x58, 0x27, 0x43, 0xb3, 0xba, 0x33, 0x91, 0xd3, 0xa7, 0x98, 0x15, 0x5c, 0x9a, 0xe6, 0xd3, 0x0f, 0x75, 0xd9, 0xfc, 0x41, 0x98, 0x97, 0x3e, 0xaa, 0x25, 0xdb, 0x8f, 0x92, 0x2e, 0xb0, 0x7b, 0x0c, 0x5f, 0xf1, 0x63, 0xa9, 0x37, 0xf9, 0x9b, 0x75, 0x69, 0x4c, 0x28, 0x26, 0x25, 0xda, 0xd5, 0xf2, 0x12, 0x70, 0x45, 0x55, 0xe3, 0xdf, 0x73, 0x5e, 0x37, 0xf5, 0x21, 0x6c, 0x90, 0x8e, 0x35, 0x5a, 0xc9, 0xd3, 0x23, 0xeb, 0xd3, 0xc0, 0xbe, 0x78, 0xac, 0x42, 0x28, 0x58, 0x66, 0xa5, 0x46, 0x6d, 0x70, 0x02, 0xd7, 0x10, 0xf9, 0x4b, 0x54, 0xfc, 0x5d, 0x86, 0x4a, 0x87, 0xcf, 0x7f, 0xca, 0x45, 0xac, 0x11, 0x5a, 0xb5, 0x20, 0x51, 0x8d, 0x2f, 0x88, 0x47, 0x97, 0x39, 0xc0, 0xcf, 0xba, 0xc0, 0x42, 0x01, 0x40, 0x99, 0x48, 0x21, 0x0b, 0x6b, 0xa7, 0xd2, 0xfd, 0x96, 0xd5, 0xd1, 0xbe, 0x46, 0x9d, 0x49, 0xe0, 0x0b, 0xa6, 0xa0, 0x22, 0x4e, 0x38, 0xd0, 0xc1, 0x3c, 0x30, 0xbc, 0x70, 0x8f, 0x2c, 0x75, 0xcc, 0xd0, 0xc5, 0x8c, 0x51, 0x3b, 0x3d, 0x94, 0x08, 0x64, 0x26, 0x61, 0x7d, 0xb9, 0xc3, 0x65, 0x8f, 0x14, 0x9c, 0x21, 0xd0, 0xaa, 0xfd, 0x17, 0x72, 0x03, 0x8f, 0xbd, 0x9b, 0x8c, 0xe6, 0x5e, 0x53, 0x9e, 0xb9, 0x9d, 0xef, 0x82, 0xbb, 0xe1, 0xbc, 0xe2, 0x72, 0x41, 0x5b, 0x21, 0x94, 0xd3, 0x45, 0x37, 0x94, 0xd1, 0xdf, 0x09, 0x39, 0x5d, 0xe7, 0x23, 0xaa, 0x9a, 0x1d, 0xca, 0x6d, 0xa8, 0x0a, 0x86, 0x85, 0x8a, 0x82, 0xbe, 0x42, 0x07, 0xd6, 0xf2, 0x38, 0x82, 0x73, 0xda, 0x87, 0x5b, 0xe5, 0x3c, 0xd3, 0x9e, 0x3e, 0xa7, 0x3b, 0x9e, 0xf4, 0x03, 0xb3, 0xf9, 0xf1, 0x7d, 0x13, 0x74, 0x02, 0xff, 0xbb, 0xa1, 0xe5, 0xfa, 0x00, 0x79, 0x1c, 0xa6, 0x66, 0x41, 0x88, 0x5c, 0x60, 0x57, 0xa6, 0x2e, 0x09, 0xc4, 0xba, 0xfd, 0x9a, 0xcf, 0xa7, 0x1f, 0x40, 0xc3, 0xbb, 0xcc, 0x5a, 0x0a, 0x55, 0x4b, 0x3b, 0x38, 0x76, 0x51, 0xb8, 0x63, 0x8b, 0x84, 0x94, 0x16, 0xe6, 0x56, 0xf3, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xfe, 0xab, 0x00, 0x90, 0x98, 0x9e, 0x24, 0xfc, 0xa9, 0xcc, 0x1a, 0x8a, 0xfb, 0x27, 0xb8, 0xbf, 0x30, 0x6e, 0xa8, 0x3b, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0xcf, 0x77, 0x2c, 0x6e, 0x56, 0xbe, 0x4e, 0xb3, 0xb6, 0x84, 0x00, 0x94, 0xab, 0x47, 0xc9, 0x0d, 0xd2, 0x76, 0xc7, 0x86, 0x9f, 0x1d, 0x07, 0xd3, 0xb6, 0xb4, 0xbb, 0x08, 0x78, 0xaf, 0x69, 0xd2, 0x0b, 0x49, 0xde, 0x33, 0xc5, 0xac, 0xad, 0xc2, 0x88, 0x02, 0x7d, 0x06, 0xb7, 0x35, 0x02, 0xc1, 0x60, 0xc9, 0xbf, 0xc4, 0xe8, 0x94, 0xde, 0xd4, 0xd3, 0xa9, 0x13, 0x25, 0x5a, 0xfe, 0x6e, 0xa2, 0xae, 0x7d, 0x05, 0xdc, 0x7d, 0xf3, 0x6c, 0xf0, 0x7e, 0xa6, 0x8d, 0xee, 0xd9, 0xd7, 0xce, 0x58, 0x17, 0xe8, 0xa9, 0x29, 0xae, 0x73, 0x48, 0x87, 0xe7, 0x9b, 0xca, 0x6e, 0x29, 0xa1, 0x64, 0x5f, 0x19, 0x13, 0xf7, 0xae, 0x06, 0x10, 0xff, 0x51, 0xc6, 0x9b, 0x4d, 0x55, 0x25, 0x4f, 0x93, 0x99, 0x10, 0x01, 0x53, 0x75, 0xf1, 0x13, 0xce, 0xc7, 0xa6, 0x41, 0x41, 0xd2, 0xbf, 0x88, 0xa5, 0x7f, 0x45, 0xfc, 0xac, 0xb8, 0xa5, 0xb5, 0x33, 0x0c, 0x82, 0xc4, 0xfb, 0x07, 0xf6, 0x6a, 0xe5, 0x25, 0x84, 0x5f, 0x06, 0xca, 0xc1, 0x86, 0x39, 0x11, 0xdb, 0x58, 0xcd, 0x77, 0x3b, 0x2c, 0xc2, 0x4c, 0x0f, 0x5e, 0x9a, 0xe3, 0xf0, 0xab, 0x3e, 0x61, 0x1b, 0x50, 0x24, 0xc2, 0xc0, 0xf4, 0xf1, 0x19, 0xf0, 0x11, 0x29, 0xb6, 0xa5, 0x18, 0x02, 0x9b, 0xd7, 0x63, 0x4c, 0x70, 0x8c, 0x47, 0xa3, 0x03, 0x43, 0x5c, 0xb9, 0x5d, 0x46, 0xa0, 0x0d, 0x6f, 0xff, 0x59, 0x8e, 0xbe, 0xdd, 0x9f, 0x72, 0xc3, 0x5b, 0x2b, 0xdf, 0x8c, 0x5b, 0xce, 0xe5, 0x0c, 0x46, 0x6c, 0x92, 0xb2, 0x0a, 0xa3, 0x4c, 0x54, 0x42, 0x18, 0x15, 0x12, 0x18, 0xbd, 0xda, 0xfc, 0xba, 0x74, 0x6e, 0xff, 0xc1, 0xb6, 0xa0, 0x64, 0xd8, 0xa9, 0x5f, 0x55, 0xae, 0x9f, 0x5c, 0x6a, 0x76, 0x96, 0xd8, 0x73, 0x67, 0x87, 0xfb, 0x4d, 0x7f, 0x5c, 0xee, 0x69, 0xca, 0x73, 0x10, 0xfb, 0x8a, 0xa9, 0xfd, 0x9e, 0xbd, 0x36, 0x38, 0x49, 0x49, 0x87, 0xf4, 0x0e, 0x14, 0xf0, 0xe9, 0x87, 0xb8, 0x3f, 0xa7, 0x4f, 0x7a, 0x5a, 0x8e, 0x79, 0xd4, 0x93, 0xe4, 0xbb, 0x68, 0x52, 0x84, 0xac, 0x6c, 0xe9, 0xf3, 0x98, 0x70, 0x55, 0x72, 0x32, 0xf9, 0x34, 0xab, 0x2b, 0x49, 0xb5, 0xcd, 0x20, 0x62, 0xe4, 0x3a, 0x7a, 0x67, 0x63, 0xab, 0x96, 0xdc, 0x6d, 0xae, 0x97, 0xec, 0xfc, 0x9f, 0x76, 0x56, 0x88, 0x2e, 0x66, 0xcf, 0x5b, 0xb6, 0xc9, 0xa4, 0xb0, 0xd7, 0x05, 0xba, 0xe1, 0x27, 0x2f, 0x93, 0xbb, 0x26, 0x2a, 0xa2, 0x93, 0xb0, 0x1b, 0xf3, 0x8e, 0xbe, 0x1d, 0x40, 0xa3, 0xb9, 0x36, 0x8f, 0x3e, 0x82, 0x1a, 0x1a, 0x5e, 0x88, 0xea, 0x50, 0xf8, 0x59, 0xe2, 0x83, 0x46, 0x29, 0x0b, 0xe3, 0x44, 0x5c, 0xe1, 0x95, 0xb6, 0x69, 0x90, 0x9a, 0x14, 0x6f, 0x97, 0xae, 0x81, 0xcf, 0x68, 0xef, 0x99, 0x9a, 0xbe, 0xb5, 0xe7, 0xe1, 0x7f, 0xf8, 0xfa, 0x13, 0x47, 0x16, 0x4c, 0xcc, 0x6d, 0x08, 0x40, 0xe7, 0x8b, 0x78, 0x6f, 0x50, 0x82, 0x44, 0x50, 0x3f, 0x66, 0x06, 0x8a, 0xab, 0x43, 0x84, 0x56, 0x4a, 0x0f, 0x20, 0x2d, 0x86, 0x0e, 0xf5, 0xd2, 0xdb, 0xd2, 0x7a, 0x8a, 0x4b, 0xcd, 0xa5, 0xe8, 0x4e, 0xf1, 0x5e, 0x26, 0x25, 0x01, 0x59, 0x23, 0xa0, 0x7e, 0xd2, 0xf6, 0x7e, 0x21, 0x57, 0xd7, 0x27, 0xbc, 0x15, 0x57, 0x4c, 0xa4, 0x46, 0xc1, 0xe0, 0x83, 0x1e, 0x0c, 0x4c, 0x4d, 0x1f, 0x4f, 0x06, 0x19, 0xe2, 0xf9, 0xa8, 0xf4, 0x3a, 0x82, 0xa1, 0xb2, 0x79, 0x43, 0x79, 0xd6, 0xad, 0x6f, 0x7a, 0x27, 0x90, 0x03, 0xa4, 0xea, 0x24, 0x87, 0x3f, 0xd9, 0xbd, 0xd9, 0xe9, 0xf2, 0x5f, 0x50, 0x49, 0x1c, 0xee, 0xec, 0xd7, 0x2e, 0x30, 0x82, 0x04, 0x3e, 0x30, 0x82, 0x03, 0x26, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x04, 0x4a, 0x53, 0x8c, 0x28, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0xbe, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x16, 0x30, 0x14, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0d, 0x45, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x31, 0x28, 0x30, 0x26, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x1f, 0x53, 0x65, 0x65, 0x20, 0x77, 0x77, 0x77, 0x2e, 0x65, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x6e, 0x65, 0x74, 0x2f, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x2d, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x31, 0x39, 0x30, 0x37, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x30, 0x28, 0x63, 0x29, 0x20, 0x32, 0x30, 0x30, 0x39, 0x20, 0x45, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x20, 0x2d, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x31, 0x32, 0x30, 0x30, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x29, 0x45, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x2d, 0x20, 0x47, 0x32, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x39, 0x30, 0x37, 0x30, 0x37, 0x31, 0x37, 0x32, 0x35, 0x35, 0x34, 0x5a, 0x17, 0x0d, 0x33, 0x30, 0x31, 0x32, 0x30, 0x37, 0x31, 0x37, 0x35, 0x35, 0x35, 0x34, 0x5a, 0x30, 0x81, 0xbe, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x16, 0x30, 0x14, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0d, 0x45, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x31, 0x28, 0x30, 0x26, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x1f, 0x53, 0x65, 0x65, 0x20, 0x77, 0x77, 0x77, 0x2e, 0x65, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x6e, 0x65, 0x74, 0x2f, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x2d, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x31, 0x39, 0x30, 0x37, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x30, 0x28, 0x63, 0x29, 0x20, 0x32, 0x30, 0x30, 0x39, 0x20, 0x45, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x20, 0x2d, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x31, 0x32, 0x30, 0x30, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x29, 0x45, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x2d, 0x20, 0x47, 0x32, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xba, 0x84, 0xb6, 0x72, 0xdb, 0x9e, 0x0c, 0x6b, 0xe2, 0x99, 0xe9, 0x30, 0x01, 0xa7, 0x76, 0xea, 0x32, 0xb8, 0x95, 0x41, 0x1a, 0xc9, 0xda, 0x61, 0x4e, 0x58, 0x72, 0xcf, 0xfe, 0xf6, 0x82, 0x79, 0xbf, 0x73, 0x61, 0x06, 0x0a, 0xa5, 0x27, 0xd8, 0xb3, 0x5f, 0xd3, 0x45, 0x4e, 0x1c, 0x72, 0xd6, 0x4e, 0x32, 0xf2, 0x72, 0x8a, 0x0f, 0xf7, 0x83, 0x19, 0xd0, 0x6a, 0x80, 0x80, 0x00, 0x45, 0x1e, 0xb0, 0xc7, 0xe7, 0x9a, 0xbf, 0x12, 0x57, 0x27, 0x1c, 0xa3, 0x68, 0x2f, 0x0a, 0x87, 0xbd, 0x6a, 0x6b, 0x0e, 0x5e, 0x65, 0xf3, 0x1c, 0x77, 0xd5, 0xd4, 0x85, 0x8d, 0x70, 0x21, 0xb4, 0xb3, 0x32, 0xe7, 0x8b, 0xa2, 0xd5, 0x86, 0x39, 0x02, 0xb1, 0xb8, 0xd2, 0x47, 0xce, 0xe4, 0xc9, 0x49, 0xc4, 0x3b, 0xa7, 0xde, 0xfb, 0x54, 0x7d, 0x57, 0xbe, 0xf0, 0xe8, 0x6e, 0xc2, 0x79, 0xb2, 0x3a, 0x0b, 0x55, 0xe2, 0x50, 0x98, 0x16, 0x32, 0x13, 0x5c, 0x2f, 0x78, 0x56, 0xc1, 0xc2, 0x94, 0xb3, 0xf2, 0x5a, 0xe4, 0x27, 0x9a, 0x9f, 0x24, 0xd7, 0xc6, 0xec, 0xd0, 0x9b, 0x25, 0x82, 0xe3, 0xcc, 0xc2, 0xc4, 0x45, 0xc5, 0x8c, 0x97, 0x7a, 0x06, 0x6b, 0x2a, 0x11, 0x9f, 0xa9, 0x0a, 0x6e, 0x48, 0x3b, 0x6f, 0xdb, 0xd4, 0x11, 0x19, 0x42, 0xf7, 0x8f, 0x07, 0xbf, 0xf5, 0x53, 0x5f, 0x9c, 0x3e, 0xf4, 0x17, 0x2c, 0xe6, 0x69, 0xac, 0x4e, 0x32, 0x4c, 0x62, 0x77, 0xea, 0xb7, 0xe8, 0xe5, 0xbb, 0x34, 0xbc, 0x19, 0x8b, 0xae, 0x9c, 0x51, 0xe7, 0xb7, 0x7e, 0xb5, 0x53, 0xb1, 0x33, 0x22, 0xe5, 0x6d, 0xcf, 0x70, 0x3c, 0x1a, 0xfa, 0xe2, 0x9b, 0x67, 0xb6, 0x83, 0xf4, 0x8d, 0xa5, 0xaf, 0x62, 0x4c, 0x4d, 0xe0, 0x58, 0xac, 0x64, 0x34, 0x12, 0x03, 0xf8, 0xb6, 0x8d, 0x94, 0x63, 0x24, 0xa4, 0x71, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x6a, 0x72, 0x26, 0x7a, 0xd0, 0x1e, 0xef, 0x7d, 0xe7, 0x3b, 0x69, 0x51, 0xd4, 0x6c, 0x8d, 0x9f, 0x90, 0x12, 0x66, 0xab, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x79, 0x9f, 0x1d, 0x96, 0xc6, 0xb6, 0x79, 0x3f, 0x22, 0x8d, 0x87, 0xd3, 0x87, 0x03, 0x04, 0x60, 0x6a, 0x6b, 0x9a, 0x2e, 0x59, 0x89, 0x73, 0x11, 0xac, 0x43, 0xd1, 0xf5, 0x13, 0xff, 0x8d, 0x39, 0x2b, 0xc0, 0xf2, 0xbd, 0x4f, 0x70, 0x8c, 0xa9, 0x2f, 0xea, 0x17, 0xc4, 0x0b, 0x54, 0x9e, 0xd4, 0x1b, 0x96, 0x98, 0x33, 0x3c, 0xa8, 0xad, 0x62, 0xa2, 0x00, 0x76, 0xab, 0x59, 0x69, 0x6e, 0x06, 0x1d, 0x7e, 0xc4, 0xb9, 0x44, 0x8d, 0x98, 0xaf, 0x12, 0xd4, 0x61, 0xdb, 0x0a, 0x19, 0x46, 0x47, 0xf3, 0xeb, 0xf7, 0x63, 0xc1, 0x40, 0x05, 0x40, 0xa5, 0xd2, 0xb7, 0xf4, 0xb5, 0x9a, 0x36, 0xbf, 0xa9, 0x88, 0x76, 0x88, 0x04, 0x55, 0x04, 0x2b, 0x9c, 0x87, 0x7f, 0x1a, 0x37, 0x3c, 0x7e, 0x2d, 0xa5, 0x1a, 0xd8, 0xd4, 0x89, 0x5e, 0xca, 0xbd, 0xac, 0x3d, 0x6c, 0xd8, 0x6d, 0xaf, 0xd5, 0xf3, 0x76, 0x0f, 0xcd, 0x3b, 0x88, 0x38, 0x22, 0x9d, 0x6c, 0x93, 0x9a, 0xc4, 0x3d, 0xbf, 0x82, 0x1b, 0x65, 0x3f, 0xa6, 0x0f, 0x5d, 0xaa, 0xfc, 0xe5, 0xb2, 0x15, 0xca, 0xb5, 0xad, 0xc6, 0xbc, 0x3d, 0xd0, 0x84, 0xe8, 0xea, 0x06, 0x72, 0xb0, 0x4d, 0x39, 0x32, 0x78, 0xbf, 0x3e, 0x11, 0x9c, 0x0b, 0xa4, 0x9d, 0x9a, 0x21, 0xf3, 0xf0, 0x9b, 0x0b, 0x30, 0x78, 0xdb, 0xc1, 0xdc, 0x87, 0x43, 0xfe, 0xbc, 0x63, 0x9a, 0xca, 0xc5, 0xc2, 0x1c, 0xc9, 0xc7, 0x8d, 0xff, 0x3b, 0x12, 0x58, 0x08, 0xe6, 0xb6, 0x3d, 0xec, 0x7a, 0x2c, 0x4e, 0xfb, 0x83, 0x96, 0xce, 0x0c, 0x3c, 0x69, 0x87, 0x54, 0x73, 0xa4, 0x73, 0xc2, 0x93, 0xff, 0x51, 0x10, 0xac, 0x15, 0x54, 0x01, 0xd8, 0xfc, 0x05, 0xb1, 0x89, 0xa1, 0x7f, 0x74, 0x83, 0x9a, 0x49, 0xd7, 0xdc, 0x4e, 0x7b, 0x8a, 0x48, 0x6f, 0x8b, 0x45, 0xf6, 0x30, 0x82, 0x02, 0xf9, 0x30, 0x82, 0x02, 0x80, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0d, 0x00, 0xa6, 0x8b, 0x79, 0x29, 0x00, 0x00, 0x00, 0x00, 0x50, 0xd0, 0x91, 0xf9, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x30, 0x81, 0xbf, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x16, 0x30, 0x14, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0d, 0x45, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x31, 0x28, 0x30, 0x26, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x1f, 0x53, 0x65, 0x65, 0x20, 0x77, 0x77, 0x77, 0x2e, 0x65, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x6e, 0x65, 0x74, 0x2f, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x2d, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x31, 0x39, 0x30, 0x37, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x30, 0x28, 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x32, 0x20, 0x45, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x20, 0x2d, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x31, 0x33, 0x30, 0x31, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x2a, 0x45, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x2d, 0x20, 0x45, 0x43, 0x31, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x32, 0x31, 0x32, 0x31, 0x38, 0x31, 0x35, 0x32, 0x35, 0x33, 0x36, 0x5a, 0x17, 0x0d, 0x33, 0x37, 0x31, 0x32, 0x31, 0x38, 0x31, 0x35, 0x35, 0x35, 0x33, 0x36, 0x5a, 0x30, 0x81, 0xbf, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x16, 0x30, 0x14, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0d, 0x45, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x31, 0x28, 0x30, 0x26, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x1f, 0x53, 0x65, 0x65, 0x20, 0x77, 0x77, 0x77, 0x2e, 0x65, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x6e, 0x65, 0x74, 0x2f, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x2d, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x31, 0x39, 0x30, 0x37, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x30, 0x28, 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x32, 0x20, 0x45, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x20, 0x2d, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x31, 0x33, 0x30, 0x31, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x2a, 0x45, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x2d, 0x20, 0x45, 0x43, 0x31, 0x30, 0x76, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x22, 0x03, 0x62, 0x00, 0x04, 0x84, 0x13, 0xc9, 0xd0, 0xba, 0x6d, 0x41, 0x7b, 0xe2, 0x6c, 0xd0, 0xeb, 0x55, 0x5f, 0x66, 0x02, 0x1a, 0x24, 0xf4, 0x5b, 0x89, 0x69, 0x47, 0xe3, 0xb8, 0xc2, 0x7d, 0xf1, 0xf2, 0x02, 0xc5, 0x9f, 0xa0, 0xf6, 0x5b, 0xd5, 0x8b, 0x06, 0x19, 0x86, 0x4f, 0x53, 0x10, 0x6d, 0x07, 0x24, 0x27, 0xa1, 0xa0, 0xf8, 0xd5, 0x47, 0x19, 0x61, 0x4c, 0x7d, 0xca, 0x93, 0x27, 0xea, 0x74, 0x0c, 0xef, 0x6f, 0x96, 0x09, 0xfe, 0x63, 0xec, 0x70, 0x5d, 0x36, 0xad, 0x67, 0x77, 0xae, 0xc9, 0x9d, 0x7c, 0x55, 0x44, 0x3a, 0xa2, 0x63, 0x51, 0x1f, 0xf5, 0xe3, 0x62, 0xd4, 0xa9, 0x47, 0x07, 0x3e, 0xcc, 0x20, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xb7, 0x63, 0xe7, 0x1a, 0xdd, 0x8d, 0xe9, 0x08, 0xa6, 0x55, 0x83, 0xa4, 0xe0, 0x6a, 0x50, 0x41, 0x65, 0x11, 0x42, 0x49, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x03, 0x67, 0x00, 0x30, 0x64, 0x02, 0x30, 0x61, 0x79, 0xd8, 0xe5, 0x42, 0x47, 0xdf, 0x1c, 0xae, 0x53, 0x99, 0x17, 0xb6, 0x6f, 0x1c, 0x7d, 0xe1, 0xbf, 0x11, 0x94, 0xd1, 0x03, 0x88, 0x75, 0xe4, 0x8d, 0x89, 0xa4, 0x8a, 0x77, 0x46, 0xde, 0x6d, 0x61, 0xef, 0x02, 0xf5, 0xfb, 0xb5, 0xdf, 0xcc, 0xfe, 0x4e, 0xff, 0xfe, 0xa9, 0xe6, 0xa7, 0x02, 0x30, 0x5b, 0x99, 0xd7, 0x85, 0x37, 0x06, 0xb5, 0x7b, 0x08, 0xfd, 0xeb, 0x27, 0x8b, 0x4a, 0x94, 0xf9, 0xe1, 0xfa, 0xa7, 0x8e, 0x26, 0x08, 0xe8, 0x7c, 0x92, 0x68, 0x6d, 0x73, 0xd8, 0x6f, 0x26, 0xac, 0x21, 0x02, 0xb8, 0x99, 0xb7, 0x26, 0x41, 0x5b, 0x25, 0x60, 0xae, 0xd0, 0x48, 0x1a, 0xee, 0x06, 0x30, 0x82, 0x03, 0x38, 0x30, 0x82, 0x02, 0x20, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x06, 0x20, 0x06, 0x05, 0x16, 0x70, 0x02, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x3b, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x52, 0x4f, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x08, 0x63, 0x65, 0x72, 0x74, 0x53, 0x49, 0x47, 0x4e, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x10, 0x63, 0x65, 0x72, 0x74, 0x53, 0x49, 0x47, 0x4e, 0x20, 0x52, 0x4f, 0x4f, 0x54, 0x20, 0x43, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x36, 0x30, 0x37, 0x30, 0x34, 0x31, 0x37, 0x32, 0x30, 0x30, 0x34, 0x5a, 0x17, 0x0d, 0x33, 0x31, 0x30, 0x37, 0x30, 0x34, 0x31, 0x37, 0x32, 0x30, 0x30, 0x34, 0x5a, 0x30, 0x3b, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x52, 0x4f, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x08, 0x63, 0x65, 0x72, 0x74, 0x53, 0x49, 0x47, 0x4e, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x10, 0x63, 0x65, 0x72, 0x74, 0x53, 0x49, 0x47, 0x4e, 0x20, 0x52, 0x4f, 0x4f, 0x54, 0x20, 0x43, 0x41, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xb7, 0x33, 0xb9, 0x7e, 0xc8, 0x25, 0x4a, 0x8e, 0xb5, 0xdb, 0xb4, 0x28, 0x1b, 0xaa, 0x57, 0x90, 0xe8, 0xd1, 0x22, 0xd3, 0x64, 0xba, 0xd3, 0x93, 0xe8, 0xd4, 0xac, 0x86, 0x61, 0x40, 0x6a, 0x60, 0x57, 0x68, 0x54, 0x84, 0x4d, 0xbc, 0x6a, 0x54, 0x02, 0x05, 0xff, 0xdf, 0x9b, 0x9a, 0x2a, 0xae, 0x5d, 0x07, 0x8f, 0x4a, 0xc3, 0x28, 0x7f, 0xef, 0xfb, 0x2b, 0xfa, 0x79, 0xf1, 0xc7, 0xad, 0xf0, 0x10, 0x53, 0x24, 0x90, 0x8b, 0x66, 0xc9, 0xa8, 0x88, 0xab, 0xaf, 0x5a, 0xa3, 0x00, 0xe9, 0xbe, 0xba, 0x46, 0xee, 0x5b, 0x73, 0x7b, 0x2c, 0x17, 0x82, 0x81, 0x5e, 0x62, 0x2c, 0xa1, 0x02, 0x65, 0xb3, 0xbd, 0xc5, 0x2b, 0x00, 0x7e, 0xc4, 0xfc, 0x03, 0x33, 0x57, 0x0d, 0xed, 0xe2, 0xfa, 0xce, 0x5d, 0x45, 0xd6, 0x38, 0xcd, 0x35, 0xb6, 0xb2, 0xc1, 0xd0, 0x9c, 0x81, 0x4a, 0xaa, 0xe4, 0xb2, 0x01, 0x5c, 0x1d, 0x8f, 0x5f, 0x99, 0xc4, 0xb1, 0xad, 0xdb, 0x88, 0x21, 0xeb, 0x90, 0x08, 0x82, 0x80, 0xf3, 0x30, 0xa3, 0x43, 0xe6, 0x90, 0x82, 0xae, 0x55, 0x28, 0x49, 0xed, 0x5b, 0xd7, 0xa9, 0x10, 0x38, 0x0e, 0xfe, 0x8f, 0x4c, 0x5b, 0x9b, 0x46, 0xea, 0x41, 0xf5, 0xb0, 0x08, 0x74, 0xc3, 0xd0, 0x88, 0x33, 0xb6, 0x7c, 0xd7, 0x74, 0xdf, 0xdc, 0x84, 0xd1, 0x43, 0x0e, 0x75, 0x39, 0xa1, 0x25, 0x40, 0x28, 0xea, 0x78, 0xcb, 0x0e, 0x2c, 0x2e, 0x39, 0x9d, 0x8c, 0x8b, 0x6e, 0x16, 0x1c, 0x2f, 0x26, 0x82, 0x10, 0xe2, 0xe3, 0x65, 0x94, 0x0a, 0x04, 0xc0, 0x5e, 0xf7, 0x5d, 0x5b, 0xf8, 0x10, 0xe2, 0xd0, 0xba, 0x7a, 0x4b, 0xfb, 0xde, 0x37, 0x00, 0x00, 0x1a, 0x5b, 0x28, 0xe3, 0xd2, 0x9c, 0x73, 0x3e, 0x32, 0x87, 0x98, 0xa1, 0xc9, 0x51, 0x2f, 0xd7, 0xde, 0xac, 0x33, 0xb3, 0x4f, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0xc6, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xe0, 0x8c, 0x9b, 0xdb, 0x25, 0x49, 0xb3, 0xf1, 0x7c, 0x86, 0xd6, 0xb2, 0x42, 0x87, 0x0b, 0xd0, 0x6b, 0xa0, 0xd9, 0xe4, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x3e, 0xd2, 0x1c, 0x89, 0x2e, 0x35, 0xfc, 0xf8, 0x75, 0xdd, 0xe6, 0x7f, 0x65, 0x88, 0xf4, 0x72, 0x4c, 0xc9, 0x2c, 0xd7, 0x32, 0x4e, 0xf3, 0xdd, 0x19, 0x79, 0x47, 0xbd, 0x8e, 0x3b, 0x5b, 0x93, 0x0f, 0x50, 0x49, 0x24, 0x13, 0x6b, 0x14, 0x06, 0x72, 0xef, 0x09, 0xd3, 0xa1, 0xa1, 0xe3, 0x40, 0x84, 0xc9, 0xe7, 0x18, 0x32, 0x74, 0x3c, 0x48, 0x6e, 0x0f, 0x9f, 0x4b, 0xd4, 0xf7, 0x1e, 0xd3, 0x93, 0x86, 0x64, 0x54, 0x97, 0x63, 0x72, 0x50, 0xd5, 0x55, 0xcf, 0xfa, 0x20, 0x93, 0x02, 0xa2, 0x9b, 0xc3, 0x23, 0x93, 0x4e, 0x16, 0x55, 0x76, 0xa0, 0x70, 0x79, 0x6d, 0xcd, 0x21, 0x1f, 0xcf, 0x2f, 0x2d, 0xbc, 0x19, 0xe3, 0x88, 0x31, 0xf8, 0x59, 0x1a, 0x81, 0x09, 0xc8, 0x97, 0xa6, 0x74, 0xc7, 0x60, 0xc4, 0x5b, 0xcc, 0x57, 0x8e, 0xb2, 0x75, 0xfd, 0x1b, 0x02, 0x09, 0xdb, 0x59, 0x6f, 0x72, 0x93, 0x69, 0xf7, 0x31, 0x41, 0xd6, 0x88, 0x38, 0xbf, 0x87, 0xb2, 0xbd, 0x16, 0x79, 0xf9, 0xaa, 0xe4, 0xbe, 0x88, 0x25, 0xdd, 0x61, 0x27, 0x23, 0x1c, 0xb5, 0x31, 0x07, 0x04, 0x36, 0xb4, 0x1a, 0x90, 0xbd, 0xa0, 0x74, 0x71, 0x50, 0x89, 0x6d, 0xbc, 0x14, 0xe3, 0x0f, 0x86, 0xae, 0xf1, 0xab, 0x3e, 0xc7, 0xa0, 0x09, 0xcc, 0xa3, 0x48, 0xd1, 0xe0, 0xdb, 0x64, 0xe7, 0x92, 0xb5, 0xcf, 0xaf, 0x72, 0x43, 0x70, 0x8b, 0xf9, 0xc3, 0x84, 0x3c, 0x13, 0xaa, 0x7e, 0x92, 0x9b, 0x57, 0x53, 0x93, 0xfa, 0x70, 0xc2, 0x91, 0x0e, 0x31, 0xf9, 0x9b, 0x67, 0x5d, 0xe9, 0x96, 0x38, 0x5e, 0x5f, 0xb3, 0x73, 0x4e, 0x88, 0x15, 0x67, 0xde, 0x9e, 0x76, 0x10, 0x62, 0x20, 0xbe, 0x55, 0x69, 0x95, 0x43, 0x00, 0x39, 0x4d, 0xf6, 0xee, 0xb0, 0x5a, 0x4e, 0x49, 0x44, 0x54, 0x58, 0x5f, 0x42, 0x83, 0x30, 0x82, 0x03, 0xbb, 0x30, 0x82, 0x02, 0xa3, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x03, 0x04, 0x44, 0xc0, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x7e, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x50, 0x4c, 0x31, 0x22, 0x30, 0x20, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x19, 0x55, 0x6e, 0x69, 0x7a, 0x65, 0x74, 0x6f, 0x20, 0x54, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, 0x73, 0x20, 0x53, 0x2e, 0x41, 0x2e, 0x31, 0x27, 0x30, 0x25, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x1e, 0x43, 0x65, 0x72, 0x74, 0x75, 0x6d, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x31, 0x22, 0x30, 0x20, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x19, 0x43, 0x65, 0x72, 0x74, 0x75, 0x6d, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x20, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x43, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x38, 0x31, 0x30, 0x32, 0x32, 0x31, 0x32, 0x30, 0x37, 0x33, 0x37, 0x5a, 0x17, 0x0d, 0x32, 0x39, 0x31, 0x32, 0x33, 0x31, 0x31, 0x32, 0x30, 0x37, 0x33, 0x37, 0x5a, 0x30, 0x7e, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x50, 0x4c, 0x31, 0x22, 0x30, 0x20, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x19, 0x55, 0x6e, 0x69, 0x7a, 0x65, 0x74, 0x6f, 0x20, 0x54, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, 0x73, 0x20, 0x53, 0x2e, 0x41, 0x2e, 0x31, 0x27, 0x30, 0x25, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x1e, 0x43, 0x65, 0x72, 0x74, 0x75, 0x6d, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x31, 0x22, 0x30, 0x20, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x19, 0x43, 0x65, 0x72, 0x74, 0x75, 0x6d, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x20, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x43, 0x41, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xe3, 0xfb, 0x7d, 0xa3, 0x72, 0xba, 0xc2, 0xf0, 0xc9, 0x14, 0x87, 0xf5, 0x6b, 0x01, 0x4e, 0xe1, 0x6e, 0x40, 0x07, 0xba, 0x6d, 0x27, 0x5d, 0x7f, 0xf7, 0x5b, 0x2d, 0xb3, 0x5a, 0xc7, 0x51, 0x5f, 0xab, 0xa4, 0x32, 0xa6, 0x61, 0x87, 0xb6, 0x6e, 0x0f, 0x86, 0xd2, 0x30, 0x02, 0x97, 0xf8, 0xd7, 0x69, 0x57, 0xa1, 0x18, 0x39, 0x5d, 0x6a, 0x64, 0x79, 0xc6, 0x01, 0x59, 0xac, 0x3c, 0x31, 0x4a, 0x38, 0x7c, 0xd2, 0x04, 0xd2, 0x4b, 0x28, 0xe8, 0x20, 0x5f, 0x3b, 0x07, 0xa2, 0xcc, 0x4d, 0x73, 0xdb, 0xf3, 0xae, 0x4f, 0xc7, 0x56, 0xd5, 0x5a, 0xa7, 0x96, 0x89, 0xfa, 0xf3, 0xab, 0x68, 0xd4, 0x23, 0x86, 0x59, 0x27, 0xcf, 0x09, 0x27, 0xbc, 0xac, 0x6e, 0x72, 0x83, 0x1c, 0x30, 0x72, 0xdf, 0xe0, 0xa2, 0xe9, 0xd2, 0xe1, 0x74, 0x75, 0x19, 0xbd, 0x2a, 0x9e, 0x7b, 0x15, 0x54, 0x04, 0x1b, 0xd7, 0x43, 0x39, 0xad, 0x55, 0x28, 0xc5, 0xe2, 0x1a, 0xbb, 0xf4, 0xc0, 0xe4, 0xae, 0x38, 0x49, 0x33, 0xcc, 0x76, 0x85, 0x9f, 0x39, 0x45, 0xd2, 0xa4, 0x9e, 0xf2, 0x12, 0x8c, 0x51, 0xf8, 0x7c, 0xe4, 0x2d, 0x7f, 0xf5, 0xac, 0x5f, 0xeb, 0x16, 0x9f, 0xb1, 0x2d, 0xd1, 0xba, 0xcc, 0x91, 0x42, 0x77, 0x4c, 0x25, 0xc9, 0x90, 0x38, 0x6f, 0xdb, 0xf0, 0xcc, 0xfb, 0x8e, 0x1e, 0x97, 0x59, 0x3e, 0xd5, 0x60, 0x4e, 0xe6, 0x05, 0x28, 0xed, 0x49, 0x79, 0x13, 0x4b, 0xba, 0x48, 0xdb, 0x2f, 0xf9, 0x72, 0xd3, 0x39, 0xca, 0xfe, 0x1f, 0xd8, 0x34, 0x72, 0xf5, 0xb4, 0x40, 0xcf, 0x31, 0x01, 0xc3, 0xec, 0xde, 0x11, 0x2d, 0x17, 0x5d, 0x1f, 0xb8, 0x50, 0xd1, 0x5e, 0x19, 0xa7, 0x69, 0xde, 0x07, 0x33, 0x28, 0xca, 0x50, 0x95, 0xf9, 0xa7, 0x54, 0xcb, 0x54, 0x86, 0x50, 0x45, 0xa9, 0xf9, 0x49, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x08, 0x76, 0xcd, 0xcb, 0x07, 0xff, 0x24, 0xf6, 0xc5, 0xcd, 0xed, 0xbb, 0x90, 0xbc, 0xe2, 0x84, 0x37, 0x46, 0x75, 0xf7, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0xa6, 0xa8, 0xad, 0x22, 0xce, 0x01, 0x3d, 0xa6, 0xa3, 0xff, 0x62, 0xd0, 0x48, 0x9d, 0x8b, 0x5e, 0x72, 0xb0, 0x78, 0x44, 0xe3, 0xdc, 0x1c, 0xaf, 0x09, 0xfd, 0x23, 0x48, 0xfa, 0xbd, 0x2a, 0xc4, 0xb9, 0x55, 0x04, 0xb5, 0x10, 0xa3, 0x8d, 0x27, 0xde, 0x0b, 0x82, 0x63, 0xd0, 0xee, 0xde, 0x0c, 0x37, 0x79, 0x41, 0x5b, 0x22, 0xb2, 0xb0, 0x9a, 0x41, 0x5c, 0xa6, 0x70, 0xe0, 0xd4, 0xd0, 0x77, 0xcb, 0x23, 0xd3, 0x00, 0xe0, 0x6c, 0x56, 0x2f, 0xe1, 0x69, 0x0d, 0x0d, 0xd9, 0xaa, 0xbf, 0x21, 0x81, 0x50, 0xd9, 0x06, 0xa5, 0xa8, 0xff, 0x95, 0x37, 0xd0, 0xaa, 0xfe, 0xe2, 0xb3, 0xf5, 0x99, 0x2d, 0x45, 0x84, 0x8a, 0xe5, 0x42, 0x09, 0xd7, 0x74, 0x02, 0x2f, 0xf7, 0x89, 0xd8, 0x99, 0xe9, 0xbc, 0x27, 0xd4, 0x47, 0x8d, 0xba, 0x0d, 0x46, 0x1c, 0x77, 0xcf, 0x14, 0xa4, 0x1c, 0xb9, 0xa4, 0x31, 0xc4, 0x9c, 0x28, 0x74, 0x03, 0x34, 0xff, 0x33, 0x19, 0x26, 0xa5, 0xe9, 0x0d, 0x74, 0xb7, 0x3e, 0x97, 0xc6, 0x76, 0xe8, 0x27, 0x96, 0xa3, 0x66, 0xdd, 0xe1, 0xae, 0xf2, 0x41, 0x5b, 0xca, 0x98, 0x56, 0x83, 0x73, 0x70, 0xe4, 0x86, 0x1a, 0xd2, 0x31, 0x41, 0xba, 0x2f, 0xbe, 0x2d, 0x13, 0x5a, 0x76, 0x6f, 0x4e, 0xe8, 0x4e, 0x81, 0x0e, 0x3f, 0x5b, 0x03, 0x22, 0xa0, 0x12, 0xbe, 0x66, 0x58, 0x11, 0x4a, 0xcb, 0x03, 0xc4, 0xb4, 0x2a, 0x2a, 0x2d, 0x96, 0x17, 0xe0, 0x39, 0x54, 0xbc, 0x48, 0xd3, 0x76, 0x27, 0x9d, 0x9a, 0x2d, 0x06, 0xa6, 0xc9, 0xec, 0x39, 0xd2, 0xab, 0xdb, 0x9f, 0x9a, 0x0b, 0x27, 0x02, 0x35, 0x29, 0xb1, 0x40, 0x95, 0xe7, 0xf9, 0xe8, 0x9c, 0x55, 0x88, 0x19, 0x46, 0xd6, 0xb7, 0x34, 0xf5, 0x7e, 0xce, 0x39, 0x9a, 0xd9, 0x38, 0xf1, 0x51, 0xf7, 0x4f, 0x2c, 0x30, 0x82, 0x04, 0x1d, 0x30, 0x82, 0x03, 0x05, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x4e, 0x81, 0x2d, 0x8a, 0x82, 0x65, 0xe0, 0x0b, 0x02, 0xee, 0x3e, 0x35, 0x02, 0x46, 0xe5, 0x3d, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x81, 0x81, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x42, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x12, 0x47, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x4d, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x74, 0x65, 0x72, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x53, 0x61, 0x6c, 0x66, 0x6f, 0x72, 0x64, 0x31, 0x1a, 0x30, 0x18, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x11, 0x43, 0x4f, 0x4d, 0x4f, 0x44, 0x4f, 0x20, 0x43, 0x41, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x31, 0x27, 0x30, 0x25, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x1e, 0x43, 0x4f, 0x4d, 0x4f, 0x44, 0x4f, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x36, 0x31, 0x32, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x32, 0x39, 0x31, 0x32, 0x33, 0x31, 0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30, 0x81, 0x81, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x42, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x12, 0x47, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x4d, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x74, 0x65, 0x72, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x53, 0x61, 0x6c, 0x66, 0x6f, 0x72, 0x64, 0x31, 0x1a, 0x30, 0x18, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x11, 0x43, 0x4f, 0x4d, 0x4f, 0x44, 0x4f, 0x20, 0x43, 0x41, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x31, 0x27, 0x30, 0x25, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x1e, 0x43, 0x4f, 0x4d, 0x4f, 0x44, 0x4f, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xd0, 0x40, 0x8b, 0x8b, 0x72, 0xe3, 0x91, 0x1b, 0xf7, 0x51, 0xc1, 0x1b, 0x54, 0x04, 0x98, 0xd3, 0xa9, 0xbf, 0xc1, 0xe6, 0x8a, 0x5d, 0x3b, 0x87, 0xfb, 0xbb, 0x88, 0xce, 0x0d, 0xe3, 0x2f, 0x3f, 0x06, 0x96, 0xf0, 0xa2, 0x29, 0x50, 0x99, 0xae, 0xdb, 0x3b, 0xa1, 0x57, 0xb0, 0x74, 0x51, 0x71, 0xcd, 0xed, 0x42, 0x91, 0x4d, 0x41, 0xfe, 0xa9, 0xc8, 0xd8, 0x6a, 0x86, 0x77, 0x44, 0xbb, 0x59, 0x66, 0x97, 0x50, 0x5e, 0xb4, 0xd4, 0x2c, 0x70, 0x44, 0xcf, 0xda, 0x37, 0x95, 0x42, 0x69, 0x3c, 0x30, 0xc4, 0x71, 0xb3, 0x52, 0xf0, 0x21, 0x4d, 0xa1, 0xd8, 0xba, 0x39, 0x7c, 0x1c, 0x9e, 0xa3, 0x24, 0x9d, 0xf2, 0x83, 0x16, 0x98, 0xaa, 0x16, 0x7c, 0x43, 0x9b, 0x15, 0x5b, 0xb7, 0xae, 0x34, 0x91, 0xfe, 0xd4, 0x62, 0x26, 0x18, 0x46, 0x9a, 0x3f, 0xeb, 0xc1, 0xf9, 0xf1, 0x90, 0x57, 0xeb, 0xac, 0x7a, 0x0d, 0x8b, 0xdb, 0x72, 0x30, 0x6a, 0x66, 0xd5, 0xe0, 0x46, 0xa3, 0x70, 0xdc, 0x68, 0xd9, 0xff, 0x04, 0x48, 0x89, 0x77, 0xde, 0xb5, 0xe9, 0xfb, 0x67, 0x6d, 0x41, 0xe9, 0xbc, 0x39, 0xbd, 0x32, 0xd9, 0x62, 0x02, 0xf1, 0xb1, 0xa8, 0x3d, 0x6e, 0x37, 0x9c, 0xe2, 0x2f, 0xe2, 0xd3, 0xa2, 0x26, 0x8b, 0xc6, 0xb8, 0x55, 0x43, 0x88, 0xe1, 0x23, 0x3e, 0xa5, 0xd2, 0x24, 0x39, 0x6a, 0x47, 0xab, 0x00, 0xd4, 0xa1, 0xb3, 0xa9, 0x25, 0xfe, 0x0d, 0x3f, 0xa7, 0x1d, 0xba, 0xd3, 0x51, 0xc1, 0x0b, 0xa4, 0xda, 0xac, 0x38, 0xef, 0x55, 0x50, 0x24, 0x05, 0x65, 0x46, 0x93, 0x34, 0x4f, 0x2d, 0x8d, 0xad, 0xc6, 0xd4, 0x21, 0x19, 0xd2, 0x8e, 0xca, 0x05, 0x61, 0x71, 0x07, 0x73, 0x47, 0xe5, 0x8a, 0x19, 0x12, 0xbd, 0x04, 0x4d, 0xce, 0x4e, 0x9c, 0xa5, 0x48, 0xac, 0xbb, 0x26, 0xf7, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x81, 0x8e, 0x30, 0x81, 0x8b, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x0b, 0x58, 0xe5, 0x8b, 0xc6, 0x4c, 0x15, 0x37, 0xa4, 0x40, 0xa9, 0x30, 0xa9, 0x21, 0xbe, 0x47, 0x36, 0x5a, 0x56, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x49, 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04, 0x42, 0x30, 0x40, 0x30, 0x3e, 0xa0, 0x3c, 0xa0, 0x3a, 0x86, 0x38, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, 0x72, 0x6c, 0x2e, 0x63, 0x6f, 0x6d, 0x6f, 0x64, 0x6f, 0x63, 0x61, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x4f, 0x4d, 0x4f, 0x44, 0x4f, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x63, 0x72, 0x6c, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x3e, 0x98, 0x9e, 0x9b, 0xf6, 0x1b, 0xe9, 0xd7, 0x39, 0xb7, 0x78, 0xae, 0x1d, 0x72, 0x18, 0x49, 0xd3, 0x87, 0xe4, 0x43, 0x82, 0xeb, 0x3f, 0xc9, 0xaa, 0xf5, 0xa8, 0xb5, 0xef, 0x55, 0x7c, 0x21, 0x52, 0x65, 0xf9, 0xd5, 0x0d, 0xe1, 0x6c, 0xf4, 0x3e, 0x8c, 0x93, 0x73, 0x91, 0x2e, 0x02, 0xc4, 0x4e, 0x07, 0x71, 0x6f, 0xc0, 0x8f, 0x38, 0x61, 0x08, 0xa8, 0x1e, 0x81, 0x0a, 0xc0, 0x2f, 0x20, 0x2f, 0x41, 0x8b, 0x91, 0xdc, 0x48, 0x45, 0xbc, 0xf1, 0xc6, 0xde, 0xba, 0x76, 0x6b, 0x33, 0xc8, 0x00, 0x2d, 0x31, 0x46, 0x4c, 0xed, 0xe7, 0x9d, 0xcf, 0x88, 0x94, 0xff, 0x33, 0xc0, 0x56, 0xe8, 0x24, 0x86, 0x26, 0xb8, 0xd8, 0x38, 0x38, 0xdf, 0x2a, 0x6b, 0xdd, 0x12, 0xcc, 0xc7, 0x3f, 0x47, 0x17, 0x4c, 0xa2, 0xc2, 0x06, 0x96, 0x09, 0xd6, 0xdb, 0xfe, 0x3f, 0x3c, 0x46, 0x41, 0xdf, 0x58, 0xe2, 0x56, 0x0f, 0x3c, 0x3b, 0xc1, 0x1c, 0x93, 0x35, 0xd9, 0x38, 0x52, 0xac, 0xee, 0xc8, 0xec, 0x2e, 0x30, 0x4e, 0x94, 0x35, 0xb4, 0x24, 0x1f, 0x4b, 0x78, 0x69, 0xda, 0xf2, 0x02, 0x38, 0xcc, 0x95, 0x52, 0x93, 0xf0, 0x70, 0x25, 0x59, 0x9c, 0x20, 0x67, 0xc4, 0xee, 0xf9, 0x8b, 0x57, 0x61, 0xf4, 0x92, 0x76, 0x7d, 0x3f, 0x84, 0x8d, 0x55, 0xb7, 0xe8, 0xe5, 0xac, 0xd5, 0xf1, 0xf5, 0x19, 0x56, 0xa6, 0x5a, 0xfb, 0x90, 0x1c, 0xaf, 0x93, 0xeb, 0xe5, 0x1c, 0xd4, 0x67, 0x97, 0x5d, 0x04, 0x0e, 0xbe, 0x0b, 0x83, 0xa6, 0x17, 0x83, 0xb9, 0x30, 0x12, 0xa0, 0xc5, 0x33, 0x15, 0x05, 0xb9, 0x0d, 0xfb, 0xc7, 0x05, 0x76, 0xe3, 0xd8, 0x4a, 0x8d, 0xfc, 0x34, 0x17, 0xa3, 0xc6, 0x21, 0x28, 0xbe, 0x30, 0x45, 0x31, 0x1e, 0xc7, 0x78, 0xbe, 0x58, 0x61, 0x38, 0xac, 0x3b, 0xe2, 0x01, 0x65, 0x30, 0x82, 0x03, 0xa1, 0x30, 0x82, 0x02, 0x89, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0b, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x85, 0xaa, 0x2d, 0x48, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x3b, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0f, 0x43, 0x79, 0x62, 0x65, 0x72, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x16, 0x43, 0x79, 0x62, 0x65, 0x72, 0x74, 0x72, 0x75, 0x73, 0x74, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x36, 0x31, 0x32, 0x31, 0x35, 0x30, 0x38, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x32, 0x31, 0x31, 0x32, 0x31, 0x35, 0x30, 0x38, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x3b, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0f, 0x43, 0x79, 0x62, 0x65, 0x72, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x16, 0x43, 0x79, 0x62, 0x65, 0x72, 0x74, 0x72, 0x75, 0x73, 0x74, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xf8, 0xc8, 0xbc, 0xbd, 0x14, 0x50, 0x66, 0x13, 0xff, 0xf0, 0xd3, 0x79, 0xec, 0x23, 0xf2, 0xb7, 0x1a, 0xc7, 0x8e, 0x85, 0xf1, 0x12, 0x73, 0xa6, 0x19, 0xaa, 0x10, 0xdb, 0x9c, 0xa2, 0x65, 0x74, 0x5a, 0x77, 0x3e, 0x51, 0x7d, 0x56, 0xf6, 0xdc, 0x23, 0xb6, 0xd4, 0xed, 0x5f, 0x58, 0xb1, 0x37, 0x4d, 0xd5, 0x49, 0x0e, 0x6e, 0xf5, 0x6a, 0x87, 0xd6, 0xd2, 0x8c, 0xd2, 0x27, 0xc6, 0xe2, 0xff, 0x36, 0x9f, 0x98, 0x65, 0xa0, 0x13, 0x4e, 0xc6, 0x2a, 0x64, 0x9b, 0xd5, 0x90, 0x12, 0xcf, 0x14, 0x06, 0xf4, 0x3b, 0xe3, 0xd4, 0x28, 0xbe, 0xe8, 0x0e, 0xf8, 0xab, 0x4e, 0x48, 0x94, 0x6d, 0x8e, 0x95, 0x31, 0x10, 0x5c, 0xed, 0xa2, 0x2d, 0xbd, 0xd5, 0x3a, 0x6d, 0xb2, 0x1c, 0xbb, 0x60, 0xc0, 0x46, 0x4b, 0x01, 0xf5, 0x49, 0xae, 0x7e, 0x46, 0x8a, 0xd0, 0x74, 0x8d, 0xa1, 0x0c, 0x02, 0xce, 0xee, 0xfc, 0xe7, 0x8f, 0xb8, 0x6b, 0x66, 0xf3, 0x7f, 0x44, 0x00, 0xbf, 0x66, 0x25, 0x14, 0x2b, 0xdd, 0x10, 0x30, 0x1d, 0x07, 0x96, 0x3f, 0x4d, 0xf6, 0x6b, 0xb8, 0x8f, 0xb7, 0x7b, 0x0c, 0xa5, 0x38, 0xeb, 0xde, 0x47, 0xdb, 0xd5, 0x5d, 0x39, 0xfc, 0x88, 0xa7, 0xf3, 0xd7, 0x2a, 0x74, 0xf1, 0xe8, 0x5a, 0xa2, 0x3b, 0x9f, 0x50, 0xba, 0xa6, 0x8c, 0x45, 0x35, 0xc2, 0x50, 0x65, 0x95, 0xdc, 0x63, 0x82, 0xef, 0xdd, 0xbf, 0x77, 0x4d, 0x9c, 0x62, 0xc9, 0x63, 0x73, 0x16, 0xd0, 0x29, 0x0f, 0x49, 0xa9, 0x48, 0xf0, 0xb3, 0xaa, 0xb7, 0x6c, 0xc5, 0xa7, 0x30, 0x39, 0x40, 0x5d, 0xae, 0xc4, 0xe2, 0x5d, 0x26, 0x53, 0xf0, 0xce, 0x1c, 0x23, 0x08, 0x61, 0xa8, 0x94, 0x19, 0xba, 0x04, 0x62, 0x40, 0xec, 0x1f, 0x38, 0x70, 0x77, 0x12, 0x06, 0x71, 0xa7, 0x30, 0x18, 0x5d, 0x25, 0x27, 0xa5, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x81, 0xa5, 0x30, 0x81, 0xa2, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xb6, 0x08, 0x7b, 0x0d, 0x7a, 0xcc, 0xac, 0x20, 0x4c, 0x86, 0x56, 0x32, 0x5e, 0xcf, 0xab, 0x6e, 0x85, 0x2d, 0x70, 0x57, 0x30, 0x3f, 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04, 0x38, 0x30, 0x36, 0x30, 0x34, 0xa0, 0x32, 0xa0, 0x30, 0x86, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x32, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2d, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x72, 0x6c, 0x2f, 0x63, 0x74, 0x2f, 0x63, 0x74, 0x72, 0x6f, 0x6f, 0x74, 0x2e, 0x63, 0x72, 0x6c, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xb6, 0x08, 0x7b, 0x0d, 0x7a, 0xcc, 0xac, 0x20, 0x4c, 0x86, 0x56, 0x32, 0x5e, 0xcf, 0xab, 0x6e, 0x85, 0x2d, 0x70, 0x57, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x56, 0xef, 0x0a, 0x23, 0xa0, 0x54, 0x4e, 0x95, 0x97, 0xc9, 0xf8, 0x89, 0xda, 0x45, 0xc1, 0xd4, 0xa3, 0x00, 0x25, 0xf4, 0x1f, 0x13, 0xab, 0xb7, 0xa3, 0x85, 0x58, 0x69, 0xc2, 0x30, 0xad, 0xd8, 0x15, 0x8a, 0x2d, 0xe3, 0xc9, 0xcd, 0x81, 0x5a, 0xf8, 0x73, 0x23, 0x5a, 0xa7, 0x7c, 0x05, 0xf3, 0xfd, 0x22, 0x3b, 0x0e, 0xd1, 0x06, 0xc4, 0xdb, 0x36, 0x4c, 0x73, 0x04, 0x8e, 0xe5, 0xb0, 0x22, 0xe4, 0xc5, 0xf3, 0x2e, 0xa5, 0xd9, 0x23, 0xe3, 0xb8, 0x4e, 0x4a, 0x20, 0xa7, 0x6e, 0x02, 0x24, 0x9f, 0x22, 0x60, 0x67, 0x7b, 0x8b, 0x1d, 0x72, 0x09, 0xc5, 0x31, 0x5c, 0xe9, 0x79, 0x9f, 0x80, 0x47, 0x3d, 0xad, 0xa1, 0x0b, 0x07, 0x14, 0x3d, 0x47, 0xff, 0x03, 0x69, 0x1a, 0x0c, 0x0b, 0x44, 0xe7, 0x63, 0x25, 0xa7, 0x7f, 0xb2, 0xc9, 0xb8, 0x76, 0x84, 0xed, 0x23, 0xf6, 0x7d, 0x07, 0xab, 0x45, 0x7e, 0xd3, 0xdf, 0xb3, 0xbf, 0xe9, 0x8a, 0xb6, 0xcd, 0xa8, 0xa2, 0x67, 0x2b, 0x52, 0xd5, 0xb7, 0x65, 0xf0, 0x39, 0x4c, 0x63, 0xa0, 0x91, 0x79, 0x93, 0x52, 0x0f, 0x54, 0xdd, 0x83, 0xbb, 0x9f, 0xd1, 0x8f, 0xa7, 0x53, 0x73, 0xc3, 0xcb, 0xff, 0x30, 0xec, 0x7c, 0x04, 0xb8, 0xd8, 0x44, 0x1f, 0x93, 0x5f, 0x71, 0x09, 0x22, 0xb7, 0x6e, 0x3e, 0xea, 0x1c, 0x03, 0x4e, 0x9d, 0x1a, 0x20, 0x61, 0xfb, 0x81, 0x37, 0xec, 0x5e, 0xfc, 0x0a, 0x45, 0xab, 0xd7, 0xe7, 0x17, 0x55, 0xd0, 0xa0, 0xea, 0x60, 0x9b, 0xa6, 0xf6, 0xe3, 0x8c, 0x5b, 0x29, 0xc2, 0x06, 0x60, 0x14, 0x9d, 0x2d, 0x97, 0x4c, 0xa9, 0x93, 0x15, 0x9d, 0x61, 0xc4, 0x01, 0x5f, 0x48, 0xd6, 0x58, 0xbd, 0x56, 0x31, 0x12, 0x4e, 0x11, 0xc8, 0x21, 0xe0, 0xb3, 0x11, 0x91, 0x65, 0xdb, 0xb4, 0xa6, 0x88, 0x38, 0xce, 0x55, 0x30, 0x82, 0x02, 0x89, 0x30, 0x82, 0x02, 0x0f, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x1f, 0x47, 0xaf, 0xaa, 0x62, 0x00, 0x70, 0x50, 0x54, 0x4c, 0x01, 0x9e, 0x9b, 0x63, 0x99, 0x2a, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x30, 0x81, 0x85, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x42, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x12, 0x47, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x4d, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x74, 0x65, 0x72, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x53, 0x61, 0x6c, 0x66, 0x6f, 0x72, 0x64, 0x31, 0x1a, 0x30, 0x18, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x11, 0x43, 0x4f, 0x4d, 0x4f, 0x44, 0x4f, 0x20, 0x43, 0x41, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x31, 0x2b, 0x30, 0x29, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x22, 0x43, 0x4f, 0x4d, 0x4f, 0x44, 0x4f, 0x20, 0x45, 0x43, 0x43, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x38, 0x30, 0x33, 0x30, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x33, 0x38, 0x30, 0x31, 0x31, 0x38, 0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30, 0x81, 0x85, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x42, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x12, 0x47, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x4d, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x74, 0x65, 0x72, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x53, 0x61, 0x6c, 0x66, 0x6f, 0x72, 0x64, 0x31, 0x1a, 0x30, 0x18, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x11, 0x43, 0x4f, 0x4d, 0x4f, 0x44, 0x4f, 0x20, 0x43, 0x41, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x31, 0x2b, 0x30, 0x29, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x22, 0x43, 0x4f, 0x4d, 0x4f, 0x44, 0x4f, 0x20, 0x45, 0x43, 0x43, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x76, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x22, 0x03, 0x62, 0x00, 0x04, 0x03, 0x47, 0x7b, 0x2f, 0x75, 0xc9, 0x82, 0x15, 0x85, 0xfb, 0x75, 0xe4, 0x91, 0x16, 0xd4, 0xab, 0x62, 0x99, 0xf5, 0x3e, 0x52, 0x0b, 0x06, 0xce, 0x41, 0x00, 0x7f, 0x97, 0xe1, 0x0a, 0x24, 0x3c, 0x1d, 0x01, 0x04, 0xee, 0x3d, 0xd2, 0x8d, 0x09, 0x97, 0x0c, 0xe0, 0x75, 0xe4, 0xfa, 0xfb, 0x77, 0x8a, 0x2a, 0xf5, 0x03, 0x60, 0x4b, 0x36, 0x8b, 0x16, 0x23, 0x16, 0xad, 0x09, 0x71, 0xf4, 0x4a, 0xf4, 0x28, 0x50, 0xb4, 0xfe, 0x88, 0x1c, 0x6e, 0x3f, 0x6c, 0x2f, 0x2f, 0x09, 0x59, 0x5b, 0xa5, 0x5b, 0x0b, 0x33, 0x99, 0xe2, 0xc3, 0x3d, 0x89, 0xf9, 0x6a, 0x2c, 0xef, 0xb2, 0xd3, 0x06, 0xe9, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x75, 0x71, 0xa7, 0x19, 0x48, 0x19, 0xbc, 0x9d, 0x9d, 0xea, 0x41, 0x47, 0xdf, 0x94, 0xc4, 0x48, 0x77, 0x99, 0xd3, 0x79, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x03, 0x68, 0x00, 0x30, 0x65, 0x02, 0x31, 0x00, 0xef, 0x03, 0x5b, 0x7a, 0xac, 0xb7, 0x78, 0x0a, 0x72, 0xb7, 0x88, 0xdf, 0xff, 0xb5, 0x46, 0x14, 0x09, 0x0a, 0xfa, 0xa0, 0xe6, 0x7d, 0x08, 0xc6, 0x1a, 0x87, 0xbd, 0x18, 0xa8, 0x73, 0xbd, 0x26, 0xca, 0x60, 0x0c, 0x9d, 0xce, 0x99, 0x9f, 0xcf, 0x5c, 0x0f, 0x30, 0xe1, 0xbe, 0x14, 0x31, 0xea, 0x02, 0x30, 0x14, 0xf4, 0x93, 0x3c, 0x49, 0xa7, 0x33, 0x7a, 0x90, 0x46, 0x47, 0xb3, 0x63, 0x7d, 0x13, 0x9b, 0x4e, 0xb7, 0x6f, 0x18, 0x37, 0x80, 0x53, 0xfe, 0xdd, 0x20, 0xe0, 0x35, 0x9a, 0x36, 0xd1, 0xc7, 0x01, 0xb9, 0xe6, 0xdc, 0xdd, 0xf3, 0xff, 0x1d, 0x2c, 0x3a, 0x16, 0x57, 0xd9, 0x92, 0x39, 0xd6, 0x30, 0x82, 0x03, 0xb7, 0x30, 0x82, 0x02, 0x9f, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x0c, 0xe7, 0xe0, 0xe5, 0x17, 0xd8, 0x46, 0xfe, 0x8f, 0xe5, 0x60, 0xfc, 0x1b, 0xf0, 0x30, 0x39, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x65, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0c, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x49, 0x6e, 0x63, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x10, 0x77, 0x77, 0x77, 0x2e, 0x64, 0x69, 0x67, 0x69, 0x63, 0x65, 0x72, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x1b, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x41, 0x73, 0x73, 0x75, 0x72, 0x65, 0x64, 0x20, 0x49, 0x44, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x36, 0x31, 0x31, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x33, 0x31, 0x31, 0x31, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x65, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0c, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x49, 0x6e, 0x63, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x10, 0x77, 0x77, 0x77, 0x2e, 0x64, 0x69, 0x67, 0x69, 0x63, 0x65, 0x72, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x1b, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x41, 0x73, 0x73, 0x75, 0x72, 0x65, 0x64, 0x20, 0x49, 0x44, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xad, 0x0e, 0x15, 0xce, 0xe4, 0x43, 0x80, 0x5c, 0xb1, 0x87, 0xf3, 0xb7, 0x60, 0xf9, 0x71, 0x12, 0xa5, 0xae, 0xdc, 0x26, 0x94, 0x88, 0xaa, 0xf4, 0xce, 0xf5, 0x20, 0x39, 0x28, 0x58, 0x60, 0x0c, 0xf8, 0x80, 0xda, 0xa9, 0x15, 0x95, 0x32, 0x61, 0x3c, 0xb5, 0xb1, 0x28, 0x84, 0x8a, 0x8a, 0xdc, 0x9f, 0x0a, 0x0c, 0x83, 0x17, 0x7a, 0x8f, 0x90, 0xac, 0x8a, 0xe7, 0x79, 0x53, 0x5c, 0x31, 0x84, 0x2a, 0xf6, 0x0f, 0x98, 0x32, 0x36, 0x76, 0xcc, 0xde, 0xdd, 0x3c, 0xa8, 0xa2, 0xef, 0x6a, 0xfb, 0x21, 0xf2, 0x52, 0x61, 0xdf, 0x9f, 0x20, 0xd7, 0x1f, 0xe2, 0xb1, 0xd9, 0xfe, 0x18, 0x64, 0xd2, 0x12, 0x5b, 0x5f, 0xf9, 0x58, 0x18, 0x35, 0xbc, 0x47, 0xcd, 0xa1, 0x36, 0xf9, 0x6b, 0x7f, 0xd4, 0xb0, 0x38, 0x3e, 0xc1, 0x1b, 0xc3, 0x8c, 0x33, 0xd9, 0xd8, 0x2f, 0x18, 0xfe, 0x28, 0x0f, 0xb3, 0xa7, 0x83, 0xd6, 0xc3, 0x6e, 0x44, 0xc0, 0x61, 0x35, 0x96, 0x16, 0xfe, 0x59, 0x9c, 0x8b, 0x76, 0x6d, 0xd7, 0xf1, 0xa2, 0x4b, 0x0d, 0x2b, 0xff, 0x0b, 0x72, 0xda, 0x9e, 0x60, 0xd0, 0x8e, 0x90, 0x35, 0xc6, 0x78, 0x55, 0x87, 0x20, 0xa1, 0xcf, 0xe5, 0x6d, 0x0a, 0xc8, 0x49, 0x7c, 0x31, 0x98, 0x33, 0x6c, 0x22, 0xe9, 0x87, 0xd0, 0x32, 0x5a, 0xa2, 0xba, 0x13, 0x82, 0x11, 0xed, 0x39, 0x17, 0x9d, 0x99, 0x3a, 0x72, 0xa1, 0xe6, 0xfa, 0xa4, 0xd9, 0xd5, 0x17, 0x31, 0x75, 0xae, 0x85, 0x7d, 0x22, 0xae, 0x3f, 0x01, 0x46, 0x86, 0xf6, 0x28, 0x79, 0xc8, 0xb1, 0xda, 0xe4, 0x57, 0x17, 0xc4, 0x7e, 0x1c, 0x0e, 0xb0, 0xb4, 0x92, 0xa6, 0x56, 0xb3, 0xbd, 0xb2, 0x97, 0xed, 0xaa, 0xa7, 0xf0, 0xb7, 0xc5, 0xa8, 0x3f, 0x95, 0x16, 0xd0, 0xff, 0xa1, 0x96, 0xeb, 0x08, 0x5f, 0x18, 0x77, 0x4f, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x63, 0x30, 0x61, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x45, 0xeb, 0xa2, 0xaf, 0xf4, 0x92, 0xcb, 0x82, 0x31, 0x2d, 0x51, 0x8b, 0xa7, 0xa7, 0x21, 0x9d, 0xf3, 0x6d, 0xc8, 0x0f, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x45, 0xeb, 0xa2, 0xaf, 0xf4, 0x92, 0xcb, 0x82, 0x31, 0x2d, 0x51, 0x8b, 0xa7, 0xa7, 0x21, 0x9d, 0xf3, 0x6d, 0xc8, 0x0f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0xa2, 0x0e, 0xbc, 0xdf, 0xe2, 0xed, 0xf0, 0xe3, 0x72, 0x73, 0x7a, 0x64, 0x94, 0xbf, 0xf7, 0x72, 0x66, 0xd8, 0x32, 0xe4, 0x42, 0x75, 0x62, 0xae, 0x87, 0xeb, 0xf2, 0xd5, 0xd9, 0xde, 0x56, 0xb3, 0x9f, 0xcc, 0xce, 0x14, 0x28, 0xb9, 0x0d, 0x97, 0x60, 0x5c, 0x12, 0x4c, 0x58, 0xe4, 0xd3, 0x3d, 0x83, 0x49, 0x45, 0x58, 0x97, 0x35, 0x69, 0x1a, 0xa8, 0x47, 0xea, 0x56, 0xc6, 0x79, 0xab, 0x12, 0xd8, 0x67, 0x81, 0x84, 0xdf, 0x7f, 0x09, 0x3c, 0x94, 0xe6, 0xb8, 0x26, 0x2c, 0x20, 0xbd, 0x3d, 0xb3, 0x28, 0x89, 0xf7, 0x5f, 0xff, 0x22, 0xe2, 0x97, 0x84, 0x1f, 0xe9, 0x65, 0xef, 0x87, 0xe0, 0xdf, 0xc1, 0x67, 0x49, 0xb3, 0x5d, 0xeb, 0xb2, 0x09, 0x2a, 0xeb, 0x26, 0xed, 0x78, 0xbe, 0x7d, 0x3f, 0x2b, 0xf3, 0xb7, 0x26, 0x35, 0x6d, 0x5f, 0x89, 0x01, 0xb6, 0x49, 0x5b, 0x9f, 0x01, 0x05, 0x9b, 0xab, 0x3d, 0x25, 0xc1, 0xcc, 0xb6, 0x7f, 0xc2, 0xf1, 0x6f, 0x86, 0xc6, 0xfa, 0x64, 0x68, 0xeb, 0x81, 0x2d, 0x94, 0xeb, 0x42, 0xb7, 0xfa, 0x8c, 0x1e, 0xdd, 0x62, 0xf1, 0xbe, 0x50, 0x67, 0xb7, 0x6c, 0xbd, 0xf3, 0xf1, 0x1f, 0x6b, 0x0c, 0x36, 0x07, 0x16, 0x7f, 0x37, 0x7c, 0xa9, 0x5b, 0x6d, 0x7a, 0xf1, 0x12, 0x46, 0x60, 0x83, 0xd7, 0x27, 0x04, 0xbe, 0x4b, 0xce, 0x97, 0xbe, 0xc3, 0x67, 0x2a, 0x68, 0x11, 0xdf, 0x80, 0xe7, 0x0c, 0x33, 0x66, 0xbf, 0x13, 0x0d, 0x14, 0x6e, 0xf3, 0x7f, 0x1f, 0x63, 0x10, 0x1e, 0xfa, 0x8d, 0x1b, 0x25, 0x6d, 0x6c, 0x8f, 0xa5, 0xb7, 0x61, 0x01, 0xb1, 0xd2, 0xa3, 0x26, 0xa1, 0x10, 0x71, 0x9d, 0xad, 0xe2, 0xc3, 0xf9, 0xc3, 0x99, 0x51, 0xb7, 0x2b, 0x07, 0x08, 0xce, 0x2e, 0xe6, 0x50, 0xb2, 0xa7, 0xfa, 0x0a, 0x45, 0x2f, 0xa2, 0xf0, 0xf2, 0x30, 0x82, 0x03, 0x96, 0x30, 0x82, 0x02, 0x7e, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x0b, 0x93, 0x1c, 0x3a, 0xd6, 0x39, 0x67, 0xea, 0x67, 0x23, 0xbf, 0xc3, 0xaf, 0x9a, 0xf4, 0x4b, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x65, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0c, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x49, 0x6e, 0x63, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x10, 0x77, 0x77, 0x77, 0x2e, 0x64, 0x69, 0x67, 0x69, 0x63, 0x65, 0x72, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x1b, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x41, 0x73, 0x73, 0x75, 0x72, 0x65, 0x64, 0x20, 0x49, 0x44, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x47, 0x32, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x33, 0x30, 0x38, 0x30, 0x31, 0x31, 0x32, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x33, 0x38, 0x30, 0x31, 0x31, 0x35, 0x31, 0x32, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x65, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0c, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x49, 0x6e, 0x63, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x10, 0x77, 0x77, 0x77, 0x2e, 0x64, 0x69, 0x67, 0x69, 0x63, 0x65, 0x72, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x1b, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x41, 0x73, 0x73, 0x75, 0x72, 0x65, 0x64, 0x20, 0x49, 0x44, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x47, 0x32, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xd9, 0xe7, 0x28, 0x2f, 0x52, 0x3f, 0x36, 0x72, 0x49, 0x88, 0x93, 0x34, 0xf3, 0xf8, 0x6a, 0x1e, 0x31, 0x54, 0x80, 0x9f, 0xad, 0x54, 0x41, 0xb5, 0x47, 0xdf, 0x96, 0xa8, 0xd4, 0xaf, 0x80, 0x2d, 0xb9, 0x0a, 0xcf, 0x75, 0xfd, 0x89, 0xa5, 0x7d, 0x24, 0xfa, 0xe3, 0x22, 0x0c, 0x2b, 0xbc, 0x95, 0x17, 0x0b, 0x33, 0xbf, 0x19, 0x4d, 0x41, 0x06, 0x90, 0x00, 0xbd, 0x0c, 0x4d, 0x10, 0xfe, 0x07, 0xb5, 0xe7, 0x1c, 0x6e, 0x22, 0x55, 0x31, 0x65, 0x97, 0xbd, 0xd3, 0x17, 0xd2, 0x1e, 0x62, 0xf3, 0xdb, 0xea, 0x6c, 0x50, 0x8c, 0x3f, 0x84, 0x0c, 0x96, 0xcf, 0xb7, 0xcb, 0x03, 0xe0, 0xca, 0x6d, 0xa1, 0x14, 0x4c, 0x1b, 0x89, 0xdd, 0xed, 0x00, 0xb0, 0x52, 0x7c, 0xaf, 0x91, 0x6c, 0xb1, 0x38, 0x13, 0xd1, 0xe9, 0x12, 0x08, 0xc0, 0x00, 0xb0, 0x1c, 0x2b, 0x11, 0xda, 0x77, 0x70, 0x36, 0x9b, 0xae, 0xce, 0x79, 0x87, 0xdc, 0x82, 0x70, 0xe6, 0x09, 0x74, 0x70, 0x55, 0x69, 0xaf, 0xa3, 0x68, 0x9f, 0xbf, 0xdd, 0xb6, 0x79, 0xb3, 0xf2, 0x9d, 0x70, 0x29, 0x55, 0xf4, 0xab, 0xff, 0x95, 0x61, 0xf3, 0xc9, 0x40, 0x6f, 0x1d, 0xd1, 0xbe, 0x93, 0xbb, 0xd3, 0x88, 0x2a, 0xbb, 0x9d, 0xbf, 0x72, 0x5a, 0x56, 0x71, 0x3b, 0x3f, 0xd4, 0xf3, 0xd1, 0x0a, 0xfe, 0x28, 0xef, 0xa3, 0xee, 0xd9, 0x99, 0xaf, 0x03, 0xd3, 0x8f, 0x60, 0xb7, 0xf2, 0x92, 0xa1, 0xb1, 0xbd, 0x89, 0x89, 0x1f, 0x30, 0xcd, 0xc3, 0xa6, 0x2e, 0x62, 0x33, 0xae, 0x16, 0x02, 0x77, 0x44, 0x5a, 0xe7, 0x81, 0x0a, 0x3c, 0xa7, 0x44, 0x2e, 0x79, 0xb8, 0x3f, 0x04, 0xbc, 0x5c, 0xa0, 0x87, 0xe1, 0x1b, 0xaf, 0x51, 0x8e, 0xcd, 0xec, 0x2c, 0xfa, 0xf8, 0xfe, 0x6d, 0xf0, 0x3a, 0x7c, 0xaa, 0x8b, 0xe4, 0x67, 0x95, 0x31, 0x8d, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xce, 0xc3, 0x4a, 0xb9, 0x99, 0x55, 0xf2, 0xb8, 0xdb, 0x60, 0xbf, 0xa9, 0x7e, 0xbd, 0x56, 0xb5, 0x97, 0x36, 0xa7, 0xd6, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0xca, 0xa5, 0x55, 0x8c, 0xe3, 0xc8, 0x41, 0x6e, 0x69, 0x27, 0xa7, 0x75, 0x11, 0xef, 0x3c, 0x86, 0x36, 0x6f, 0xd2, 0x9d, 0xc6, 0x78, 0x38, 0x1d, 0x69, 0x96, 0xa2, 0x92, 0x69, 0x2e, 0x38, 0x6c, 0x9b, 0x7d, 0x04, 0xd4, 0x89, 0xa5, 0xb1, 0x31, 0x37, 0x8a, 0xc9, 0x21, 0xcc, 0xab, 0x6c, 0xcd, 0x8b, 0x1c, 0x9a, 0xd6, 0xbf, 0x48, 0xd2, 0x32, 0x66, 0xc1, 0x8a, 0xc0, 0xf3, 0x2f, 0x3a, 0xef, 0xc0, 0xe3, 0xd4, 0x91, 0x86, 0xd1, 0x50, 0xe3, 0x03, 0xdb, 0x73, 0x77, 0x6f, 0x4a, 0x39, 0x53, 0xed, 0xde, 0x26, 0xc7, 0xb5, 0x7d, 0xaf, 0x2b, 0x42, 0xd1, 0x75, 0x62, 0xe3, 0x4a, 0x2b, 0x02, 0xc7, 0x50, 0x4b, 0xe0, 0x69, 0xe2, 0x96, 0x6c, 0x0e, 0x44, 0x66, 0x10, 0x44, 0x8f, 0xad, 0x05, 0xeb, 0xf8, 0x79, 0xac, 0xa6, 0x1b, 0xe8, 0x37, 0x34, 0x9d, 0x53, 0xc9, 0x61, 0xaa, 0xa2, 0x52, 0xaf, 0x4a, 0x70, 0x16, 0x86, 0xc2, 0x3a, 0xc8, 0xb1, 0x13, 0x70, 0x36, 0xd8, 0xcf, 0xee, 0xf4, 0x0a, 0x34, 0xd5, 0x5b, 0x4c, 0xfd, 0x07, 0x9c, 0xa2, 0xba, 0xd9, 0x01, 0x72, 0x5c, 0xf3, 0x4d, 0xc1, 0xdd, 0x0e, 0xb1, 0x1c, 0x0d, 0xc4, 0x63, 0xbe, 0xad, 0xf4, 0x14, 0xfb, 0x89, 0xec, 0xa2, 0x41, 0x0e, 0x4c, 0xcc, 0xc8, 0x57, 0x40, 0xd0, 0x6e, 0x03, 0xaa, 0xcd, 0x0c, 0x8e, 0x89, 0x99, 0x99, 0x6c, 0xf0, 0x3c, 0x30, 0xaf, 0x38, 0xdf, 0x6f, 0xbc, 0xa3, 0xbe, 0x29, 0x20, 0x27, 0xab, 0x74, 0xff, 0x13, 0x22, 0x78, 0xde, 0x97, 0x52, 0x55, 0x1e, 0x83, 0xb5, 0x54, 0x20, 0x03, 0xee, 0xae, 0xc0, 0x4f, 0x56, 0xde, 0x37, 0xcc, 0xc3, 0x7f, 0xaa, 0x04, 0x27, 0xbb, 0xd3, 0x77, 0xb8, 0x62, 0xdb, 0x17, 0x7c, 0x9c, 0x28, 0x22, 0x13, 0x73, 0x6c, 0xcf, 0x26, 0xf5, 0x8a, 0x29, 0xe7, 0x30, 0x82, 0x03, 0xaf, 0x30, 0x82, 0x02, 0x97, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x08, 0x3b, 0xe0, 0x56, 0x90, 0x42, 0x46, 0xb1, 0xa1, 0x75, 0x6a, 0xc9, 0x59, 0x91, 0xc7, 0x4a, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x61, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0c, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x49, 0x6e, 0x63, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x10, 0x77, 0x77, 0x77, 0x2e, 0x64, 0x69, 0x67, 0x69, 0x63, 0x65, 0x72, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x17, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x36, 0x31, 0x31, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x33, 0x31, 0x31, 0x31, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x61, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0c, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x49, 0x6e, 0x63, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x10, 0x77, 0x77, 0x77, 0x2e, 0x64, 0x69, 0x67, 0x69, 0x63, 0x65, 0x72, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x17, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xe2, 0x3b, 0xe1, 0x11, 0x72, 0xde, 0xa8, 0xa4, 0xd3, 0xa3, 0x57, 0xaa, 0x50, 0xa2, 0x8f, 0x0b, 0x77, 0x90, 0xc9, 0xa2, 0xa5, 0xee, 0x12, 0xce, 0x96, 0x5b, 0x01, 0x09, 0x20, 0xcc, 0x01, 0x93, 0xa7, 0x4e, 0x30, 0xb7, 0x53, 0xf7, 0x43, 0xc4, 0x69, 0x00, 0x57, 0x9d, 0xe2, 0x8d, 0x22, 0xdd, 0x87, 0x06, 0x40, 0x00, 0x81, 0x09, 0xce, 0xce, 0x1b, 0x83, 0xbf, 0xdf, 0xcd, 0x3b, 0x71, 0x46, 0xe2, 0xd6, 0x66, 0xc7, 0x05, 0xb3, 0x76, 0x27, 0x16, 0x8f, 0x7b, 0x9e, 0x1e, 0x95, 0x7d, 0xee, 0xb7, 0x48, 0xa3, 0x08, 0xda, 0xd6, 0xaf, 0x7a, 0x0c, 0x39, 0x06, 0x65, 0x7f, 0x4a, 0x5d, 0x1f, 0xbc, 0x17, 0xf8, 0xab, 0xbe, 0xee, 0x28, 0xd7, 0x74, 0x7f, 0x7a, 0x78, 0x99, 0x59, 0x85, 0x68, 0x6e, 0x5c, 0x23, 0x32, 0x4b, 0xbf, 0x4e, 0xc0, 0xe8, 0x5a, 0x6d, 0xe3, 0x70, 0xbf, 0x77, 0x10, 0xbf, 0xfc, 0x01, 0xf6, 0x85, 0xd9, 0xa8, 0x44, 0x10, 0x58, 0x32, 0xa9, 0x75, 0x18, 0xd5, 0xd1, 0xa2, 0xbe, 0x47, 0xe2, 0x27, 0x6a, 0xf4, 0x9a, 0x33, 0xf8, 0x49, 0x08, 0x60, 0x8b, 0xd4, 0x5f, 0xb4, 0x3a, 0x84, 0xbf, 0xa1, 0xaa, 0x4a, 0x4c, 0x7d, 0x3e, 0xcf, 0x4f, 0x5f, 0x6c, 0x76, 0x5e, 0xa0, 0x4b, 0x37, 0x91, 0x9e, 0xdc, 0x22, 0xe6, 0x6d, 0xce, 0x14, 0x1a, 0x8e, 0x6a, 0xcb, 0xfe, 0xcd, 0xb3, 0x14, 0x64, 0x17, 0xc7, 0x5b, 0x29, 0x9e, 0x32, 0xbf, 0xf2, 0xee, 0xfa, 0xd3, 0x0b, 0x42, 0xd4, 0xab, 0xb7, 0x41, 0x32, 0xda, 0x0c, 0xd4, 0xef, 0xf8, 0x81, 0xd5, 0xbb, 0x8d, 0x58, 0x3f, 0xb5, 0x1b, 0xe8, 0x49, 0x28, 0xa2, 0x70, 0xda, 0x31, 0x04, 0xdd, 0xf7, 0xb2, 0x16, 0xf2, 0x4c, 0x0a, 0x4e, 0x07, 0xa8, 0xed, 0x4a, 0x3d, 0x5e, 0xb5, 0x7f, 0xa3, 0x90, 0xc3, 0xaf, 0x27, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x63, 0x30, 0x61, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x03, 0xde, 0x50, 0x35, 0x56, 0xd1, 0x4c, 0xbb, 0x66, 0xf0, 0xa3, 0xe2, 0x1b, 0x1b, 0xc3, 0x97, 0xb2, 0x3d, 0xd1, 0x55, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x03, 0xde, 0x50, 0x35, 0x56, 0xd1, 0x4c, 0xbb, 0x66, 0xf0, 0xa3, 0xe2, 0x1b, 0x1b, 0xc3, 0x97, 0xb2, 0x3d, 0xd1, 0x55, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0xcb, 0x9c, 0x37, 0xaa, 0x48, 0x13, 0x12, 0x0a, 0xfa, 0xdd, 0x44, 0x9c, 0x4f, 0x52, 0xb0, 0xf4, 0xdf, 0xae, 0x04, 0xf5, 0x79, 0x79, 0x08, 0xa3, 0x24, 0x18, 0xfc, 0x4b, 0x2b, 0x84, 0xc0, 0x2d, 0xb9, 0xd5, 0xc7, 0xfe, 0xf4, 0xc1, 0x1f, 0x58, 0xcb, 0xb8, 0x6d, 0x9c, 0x7a, 0x74, 0xe7, 0x98, 0x29, 0xab, 0x11, 0xb5, 0xe3, 0x70, 0xa0, 0xa1, 0xcd, 0x4c, 0x88, 0x99, 0x93, 0x8c, 0x91, 0x70, 0xe2, 0xab, 0x0f, 0x1c, 0xbe, 0x93, 0xa9, 0xff, 0x63, 0xd5, 0xe4, 0x07, 0x60, 0xd3, 0xa3, 0xbf, 0x9d, 0x5b, 0x09, 0xf1, 0xd5, 0x8e, 0xe3, 0x53, 0xf4, 0x8e, 0x63, 0xfa, 0x3f, 0xa7, 0xdb, 0xb4, 0x66, 0xdf, 0x62, 0x66, 0xd6, 0xd1, 0x6e, 0x41, 0x8d, 0xf2, 0x2d, 0xb5, 0xea, 0x77, 0x4a, 0x9f, 0x9d, 0x58, 0xe2, 0x2b, 0x59, 0xc0, 0x40, 0x23, 0xed, 0x2d, 0x28, 0x82, 0x45, 0x3e, 0x79, 0x54, 0x92, 0x26, 0x98, 0xe0, 0x80, 0x48, 0xa8, 0x37, 0xef, 0xf0, 0xd6, 0x79, 0x60, 0x16, 0xde, 0xac, 0xe8, 0x0e, 0xcd, 0x6e, 0xac, 0x44, 0x17, 0x38, 0x2f, 0x49, 0xda, 0xe1, 0x45, 0x3e, 0x2a, 0xb9, 0x36, 0x53, 0xcf, 0x3a, 0x50, 0x06, 0xf7, 0x2e, 0xe8, 0xc4, 0x57, 0x49, 0x6c, 0x61, 0x21, 0x18, 0xd5, 0x04, 0xad, 0x78, 0x3c, 0x2c, 0x3a, 0x80, 0x6b, 0xa7, 0xeb, 0xaf, 0x15, 0x14, 0xe9, 0xd8, 0x89, 0xc1, 0xb9, 0x38, 0x6c, 0xe2, 0x91, 0x6c, 0x8a, 0xff, 0x64, 0xb9, 0x77, 0x25, 0x57, 0x30, 0xc0, 0x1b, 0x24, 0xa3, 0xe1, 0xdc, 0xe9, 0xdf, 0x47, 0x7c, 0xb5, 0xb4, 0x24, 0x08, 0x05, 0x30, 0xec, 0x2d, 0xbd, 0x0b, 0xbf, 0x45, 0xbf, 0x50, 0xb9, 0xa9, 0xf3, 0xeb, 0x98, 0x01, 0x12, 0xad, 0xc8, 0x88, 0xc6, 0x98, 0x34, 0x5f, 0x8d, 0x0a, 0x3c, 0xc6, 0xe9, 0xd5, 0x95, 0x95, 0x6d, 0xde, 0x30, 0x82, 0x03, 0x8e, 0x30, 0x82, 0x02, 0x76, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x03, 0x3a, 0xf1, 0xe6, 0xa7, 0x11, 0xa9, 0xa0, 0xbb, 0x28, 0x64, 0xb1, 0x1d, 0x09, 0xfa, 0xe5, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x61, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0c, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x49, 0x6e, 0x63, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x10, 0x77, 0x77, 0x77, 0x2e, 0x64, 0x69, 0x67, 0x69, 0x63, 0x65, 0x72, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x17, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x47, 0x32, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x33, 0x30, 0x38, 0x30, 0x31, 0x31, 0x32, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x33, 0x38, 0x30, 0x31, 0x31, 0x35, 0x31, 0x32, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x61, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0c, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x49, 0x6e, 0x63, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x10, 0x77, 0x77, 0x77, 0x2e, 0x64, 0x69, 0x67, 0x69, 0x63, 0x65, 0x72, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x17, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x47, 0x32, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xbb, 0x37, 0xcd, 0x34, 0xdc, 0x7b, 0x6b, 0xc9, 0xb2, 0x68, 0x90, 0xad, 0x4a, 0x75, 0xff, 0x46, 0xba, 0x21, 0x0a, 0x08, 0x8d, 0xf5, 0x19, 0x54, 0xc9, 0xfb, 0x88, 0xdb, 0xf3, 0xae, 0xf2, 0x3a, 0x89, 0x91, 0x3c, 0x7a, 0xe6, 0xab, 0x06, 0x1a, 0x6b, 0xcf, 0xac, 0x2d, 0xe8, 0x5e, 0x09, 0x24, 0x44, 0xba, 0x62, 0x9a, 0x7e, 0xd6, 0xa3, 0xa8, 0x7e, 0xe0, 0x54, 0x75, 0x20, 0x05, 0xac, 0x50, 0xb7, 0x9c, 0x63, 0x1a, 0x6c, 0x30, 0xdc, 0xda, 0x1f, 0x19, 0xb1, 0xd7, 0x1e, 0xde, 0xfd, 0xd7, 0xe0, 0xcb, 0x94, 0x83, 0x37, 0xae, 0xec, 0x1f, 0x43, 0x4e, 0xdd, 0x7b, 0x2c, 0xd2, 0xbd, 0x2e, 0xa5, 0x2f, 0xe4, 0xa9, 0xb8, 0xad, 0x3a, 0xd4, 0x99, 0xa4, 0xb6, 0x25, 0xe9, 0x9b, 0x6b, 0x00, 0x60, 0x92, 0x60, 0xff, 0x4f, 0x21, 0x49, 0x18, 0xf7, 0x67, 0x90, 0xab, 0x61, 0x06, 0x9c, 0x8f, 0xf2, 0xba, 0xe9, 0xb4, 0xe9, 0x92, 0x32, 0x6b, 0xb5, 0xf3, 0x57, 0xe8, 0x5d, 0x1b, 0xcd, 0x8c, 0x1d, 0xab, 0x95, 0x04, 0x95, 0x49, 0xf3, 0x35, 0x2d, 0x96, 0xe3, 0x49, 0x6d, 0xdd, 0x77, 0xe3, 0xfb, 0x49, 0x4b, 0xb4, 0xac, 0x55, 0x07, 0xa9, 0x8f, 0x95, 0xb3, 0xb4, 0x23, 0xbb, 0x4c, 0x6d, 0x45, 0xf0, 0xf6, 0xa9, 0xb2, 0x95, 0x30, 0xb4, 0xfd, 0x4c, 0x55, 0x8c, 0x27, 0x4a, 0x57, 0x14, 0x7c, 0x82, 0x9d, 0xcd, 0x73, 0x92, 0xd3, 0x16, 0x4a, 0x06, 0x0c, 0x8c, 0x50, 0xd1, 0x8f, 0x1e, 0x09, 0xbe, 0x17, 0xa1, 0xe6, 0x21, 0xca, 0xfd, 0x83, 0xe5, 0x10, 0xbc, 0x83, 0xa5, 0x0a, 0xc4, 0x67, 0x28, 0xf6, 0x73, 0x14, 0x14, 0x3d, 0x46, 0x76, 0xc3, 0x87, 0x14, 0x89, 0x21, 0x34, 0x4d, 0xaf, 0x0f, 0x45, 0x0c, 0xa6, 0x49, 0xa1, 0xba, 0xbb, 0x9c, 0xc5, 0xb1, 0x33, 0x83, 0x29, 0x85, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x4e, 0x22, 0x54, 0x20, 0x18, 0x95, 0xe6, 0xe3, 0x6e, 0xe6, 0x0f, 0xfa, 0xfa, 0xb9, 0x12, 0xed, 0x06, 0x17, 0x8f, 0x39, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x60, 0x67, 0x28, 0x94, 0x6f, 0x0e, 0x48, 0x63, 0xeb, 0x31, 0xdd, 0xea, 0x67, 0x18, 0xd5, 0x89, 0x7d, 0x3c, 0xc5, 0x8b, 0x4a, 0x7f, 0xe9, 0xbe, 0xdb, 0x2b, 0x17, 0xdf, 0xb0, 0x5f, 0x73, 0x77, 0x2a, 0x32, 0x13, 0x39, 0x81, 0x67, 0x42, 0x84, 0x23, 0xf2, 0x45, 0x67, 0x35, 0xec, 0x88, 0xbf, 0xf8, 0x8f, 0xb0, 0x61, 0x0c, 0x34, 0xa4, 0xae, 0x20, 0x4c, 0x84, 0xc6, 0xdb, 0xf8, 0x35, 0xe1, 0x76, 0xd9, 0xdf, 0xa6, 0x42, 0xbb, 0xc7, 0x44, 0x08, 0x86, 0x7f, 0x36, 0x74, 0x24, 0x5a, 0xda, 0x6c, 0x0d, 0x14, 0x59, 0x35, 0xbd, 0xf2, 0x49, 0xdd, 0xb6, 0x1f, 0xc9, 0xb3, 0x0d, 0x47, 0x2a, 0x3d, 0x99, 0x2f, 0xbb, 0x5c, 0xbb, 0xb5, 0xd4, 0x20, 0xe1, 0x99, 0x5f, 0x53, 0x46, 0x15, 0xdb, 0x68, 0x9b, 0xf0, 0xf3, 0x30, 0xd5, 0x3e, 0x31, 0xe2, 0x8d, 0x84, 0x9e, 0xe3, 0x8a, 0xda, 0xda, 0x96, 0x3e, 0x35, 0x13, 0xa5, 0x5f, 0xf0, 0xf9, 0x70, 0x50, 0x70, 0x47, 0x41, 0x11, 0x57, 0x19, 0x4e, 0xc0, 0x8f, 0xae, 0x06, 0xc4, 0x95, 0x13, 0x17, 0x2f, 0x1b, 0x25, 0x9f, 0x75, 0xf2, 0xb1, 0x8e, 0x99, 0xa1, 0x6f, 0x13, 0xb1, 0x41, 0x71, 0xfe, 0x88, 0x2a, 0xc8, 0x4f, 0x10, 0x20, 0x55, 0xd7, 0xf3, 0x14, 0x45, 0xe5, 0xe0, 0x44, 0xf4, 0xea, 0x87, 0x95, 0x32, 0x93, 0x0e, 0xfe, 0x53, 0x46, 0xfa, 0x2c, 0x9d, 0xff, 0x8b, 0x22, 0xb9, 0x4b, 0xd9, 0x09, 0x45, 0xa4, 0xde, 0xa4, 0xb8, 0x9a, 0x58, 0xdd, 0x1b, 0x7d, 0x52, 0x9f, 0x8e, 0x59, 0x43, 0x88, 0x81, 0xa4, 0x9e, 0x26, 0xd5, 0x6f, 0xad, 0xdd, 0x0d, 0xc6, 0x37, 0x7d, 0xed, 0x03, 0x92, 0x1b, 0xe5, 0x77, 0x5f, 0x76, 0xee, 0x3c, 0x8d, 0xc4, 0x5d, 0x56, 0x5b, 0xa2, 0xd9, 0x66, 0x6e, 0xb3, 0x35, 0x37, 0xe5, 0x32, 0xb6, 0x30, 0x82, 0x02, 0x3f, 0x30, 0x82, 0x01, 0xc5, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x05, 0x55, 0x56, 0xbc, 0xf2, 0x5e, 0xa4, 0x35, 0x35, 0xc3, 0xa4, 0x0f, 0xd5, 0xab, 0x45, 0x72, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x30, 0x61, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0c, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x49, 0x6e, 0x63, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x10, 0x77, 0x77, 0x77, 0x2e, 0x64, 0x69, 0x67, 0x69, 0x63, 0x65, 0x72, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x17, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x47, 0x33, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x33, 0x30, 0x38, 0x30, 0x31, 0x31, 0x32, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x33, 0x38, 0x30, 0x31, 0x31, 0x35, 0x31, 0x32, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x61, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0c, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x49, 0x6e, 0x63, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x10, 0x77, 0x77, 0x77, 0x2e, 0x64, 0x69, 0x67, 0x69, 0x63, 0x65, 0x72, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x17, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x47, 0x33, 0x30, 0x76, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x22, 0x03, 0x62, 0x00, 0x04, 0xdd, 0xa7, 0xd9, 0xbb, 0x8a, 0xb8, 0x0b, 0xfb, 0x0b, 0x7f, 0x21, 0xd2, 0xf0, 0xbe, 0xbe, 0x73, 0xf3, 0x33, 0x5d, 0x1a, 0xbc, 0x34, 0xea, 0xde, 0xc6, 0x9b, 0xbc, 0xd0, 0x95, 0xf6, 0xf0, 0xcc, 0xd0, 0x0b, 0xba, 0x61, 0x5b, 0x51, 0x46, 0x7e, 0x9e, 0x2d, 0x9f, 0xee, 0x8e, 0x63, 0x0c, 0x17, 0xec, 0x07, 0x70, 0xf5, 0xcf, 0x84, 0x2e, 0x40, 0x83, 0x9c, 0xe8, 0x3f, 0x41, 0x6d, 0x3b, 0xad, 0xd3, 0xa4, 0x14, 0x59, 0x36, 0x78, 0x9d, 0x03, 0x43, 0xee, 0x10, 0x13, 0x6c, 0x72, 0xde, 0xae, 0x88, 0xa7, 0xa1, 0x6b, 0xb5, 0x43, 0xce, 0x67, 0xdc, 0x23, 0xff, 0x03, 0x1c, 0xa3, 0xe2, 0x3e, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xb3, 0xdb, 0x48, 0xa4, 0xf9, 0xa1, 0xc5, 0xd8, 0xae, 0x36, 0x41, 0xcc, 0x11, 0x63, 0x69, 0x62, 0x29, 0xbc, 0x4b, 0xc6, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x03, 0x68, 0x00, 0x30, 0x65, 0x02, 0x31, 0x00, 0xad, 0xbc, 0xf2, 0x6c, 0x3f, 0x12, 0x4a, 0xd1, 0x2d, 0x39, 0xc3, 0x0a, 0x09, 0x97, 0x73, 0xf4, 0x88, 0x36, 0x8c, 0x88, 0x27, 0xbb, 0xe6, 0x88, 0x8d, 0x50, 0x85, 0xa7, 0x63, 0xf9, 0x9e, 0x32, 0xde, 0x66, 0x93, 0x0f, 0xf1, 0xcc, 0xb1, 0x09, 0x8f, 0xdd, 0x6c, 0xab, 0xfa, 0x6b, 0x7f, 0xa0, 0x02, 0x30, 0x39, 0x66, 0x5b, 0xc2, 0x64, 0x8d, 0xb8, 0x9e, 0x50, 0xdc, 0xa8, 0xd5, 0x49, 0xa2, 0xed, 0xc7, 0xdc, 0xd1, 0x49, 0x7f, 0x17, 0x01, 0xb8, 0xc8, 0x86, 0x8f, 0x4e, 0x8c, 0x88, 0x2b, 0xa8, 0x9a, 0xa9, 0x8a, 0xc5, 0xd1, 0x00, 0xbd, 0xf8, 0x54, 0xe2, 0x9a, 0xe5, 0x5b, 0x7c, 0xb3, 0x27, 0x17, 0x30, 0x82, 0x03, 0xc5, 0x30, 0x82, 0x02, 0xad, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x02, 0xac, 0x5c, 0x26, 0x6a, 0x0b, 0x40, 0x9b, 0x8f, 0x0b, 0x79, 0xf2, 0xae, 0x46, 0x25, 0x77, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x6c, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0c, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x49, 0x6e, 0x63, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x10, 0x77, 0x77, 0x77, 0x2e, 0x64, 0x69, 0x67, 0x69, 0x63, 0x65, 0x72, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x31, 0x2b, 0x30, 0x29, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x22, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x48, 0x69, 0x67, 0x68, 0x20, 0x41, 0x73, 0x73, 0x75, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x45, 0x56, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x36, 0x31, 0x31, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x33, 0x31, 0x31, 0x31, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x6c, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0c, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x49, 0x6e, 0x63, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x10, 0x77, 0x77, 0x77, 0x2e, 0x64, 0x69, 0x67, 0x69, 0x63, 0x65, 0x72, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x31, 0x2b, 0x30, 0x29, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x22, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x48, 0x69, 0x67, 0x68, 0x20, 0x41, 0x73, 0x73, 0x75, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x45, 0x56, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xc6, 0xcc, 0xe5, 0x73, 0xe6, 0xfb, 0xd4, 0xbb, 0xe5, 0x2d, 0x2d, 0x32, 0xa6, 0xdf, 0xe5, 0x81, 0x3f, 0xc9, 0xcd, 0x25, 0x49, 0xb6, 0x71, 0x2a, 0xc3, 0xd5, 0x94, 0x34, 0x67, 0xa2, 0x0a, 0x1c, 0xb0, 0x5f, 0x69, 0xa6, 0x40, 0xb1, 0xc4, 0xb7, 0xb2, 0x8f, 0xd0, 0x98, 0xa4, 0xa9, 0x41, 0x59, 0x3a, 0xd3, 0xdc, 0x94, 0xd6, 0x3c, 0xdb, 0x74, 0x38, 0xa4, 0x4a, 0xcc, 0x4d, 0x25, 0x82, 0xf7, 0x4a, 0xa5, 0x53, 0x12, 0x38, 0xee, 0xf3, 0x49, 0x6d, 0x71, 0x91, 0x7e, 0x63, 0xb6, 0xab, 0xa6, 0x5f, 0xc3, 0xa4, 0x84, 0xf8, 0x4f, 0x62, 0x51, 0xbe, 0xf8, 0xc5, 0xec, 0xdb, 0x38, 0x92, 0xe3, 0x06, 0xe5, 0x08, 0x91, 0x0c, 0xc4, 0x28, 0x41, 0x55, 0xfb, 0xcb, 0x5a, 0x89, 0x15, 0x7e, 0x71, 0xe8, 0x35, 0xbf, 0x4d, 0x72, 0x09, 0x3d, 0xbe, 0x3a, 0x38, 0x50, 0x5b, 0x77, 0x31, 0x1b, 0x8d, 0xb3, 0xc7, 0x24, 0x45, 0x9a, 0xa7, 0xac, 0x6d, 0x00, 0x14, 0x5a, 0x04, 0xb7, 0xba, 0x13, 0xeb, 0x51, 0x0a, 0x98, 0x41, 0x41, 0x22, 0x4e, 0x65, 0x61, 0x87, 0x81, 0x41, 0x50, 0xa6, 0x79, 0x5c, 0x89, 0xde, 0x19, 0x4a, 0x57, 0xd5, 0x2e, 0xe6, 0x5d, 0x1c, 0x53, 0x2c, 0x7e, 0x98, 0xcd, 0x1a, 0x06, 0x16, 0xa4, 0x68, 0x73, 0xd0, 0x34, 0x04, 0x13, 0x5c, 0xa1, 0x71, 0xd3, 0x5a, 0x7c, 0x55, 0xdb, 0x5e, 0x64, 0xe1, 0x37, 0x87, 0x30, 0x56, 0x04, 0xe5, 0x11, 0xb4, 0x29, 0x80, 0x12, 0xf1, 0x79, 0x39, 0x88, 0xa2, 0x02, 0x11, 0x7c, 0x27, 0x66, 0xb7, 0x88, 0xb7, 0x78, 0xf2, 0xca, 0x0a, 0xa8, 0x38, 0xab, 0x0a, 0x64, 0xc2, 0xbf, 0x66, 0x5d, 0x95, 0x84, 0xc1, 0xa1, 0x25, 0x1e, 0x87, 0x5d, 0x1a, 0x50, 0x0b, 0x20, 0x12, 0xcc, 0x41, 0xbb, 0x6e, 0x0b, 0x51, 0x38, 0xb8, 0x4b, 0xcb, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x63, 0x30, 0x61, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xb1, 0x3e, 0xc3, 0x69, 0x03, 0xf8, 0xbf, 0x47, 0x01, 0xd4, 0x98, 0x26, 0x1a, 0x08, 0x02, 0xef, 0x63, 0x64, 0x2b, 0xc3, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xb1, 0x3e, 0xc3, 0x69, 0x03, 0xf8, 0xbf, 0x47, 0x01, 0xd4, 0x98, 0x26, 0x1a, 0x08, 0x02, 0xef, 0x63, 0x64, 0x2b, 0xc3, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x1c, 0x1a, 0x06, 0x97, 0xdc, 0xd7, 0x9c, 0x9f, 0x3c, 0x88, 0x66, 0x06, 0x08, 0x57, 0x21, 0xdb, 0x21, 0x47, 0xf8, 0x2a, 0x67, 0xaa, 0xbf, 0x18, 0x32, 0x76, 0x40, 0x10, 0x57, 0xc1, 0x8a, 0xf3, 0x7a, 0xd9, 0x11, 0x65, 0x8e, 0x35, 0xfa, 0x9e, 0xfc, 0x45, 0xb5, 0x9e, 0xd9, 0x4c, 0x31, 0x4b, 0xb8, 0x91, 0xe8, 0x43, 0x2c, 0x8e, 0xb3, 0x78, 0xce, 0xdb, 0xe3, 0x53, 0x79, 0x71, 0xd6, 0xe5, 0x21, 0x94, 0x01, 0xda, 0x55, 0x87, 0x9a, 0x24, 0x64, 0xf6, 0x8a, 0x66, 0xcc, 0xde, 0x9c, 0x37, 0xcd, 0xa8, 0x34, 0xb1, 0x69, 0x9b, 0x23, 0xc8, 0x9e, 0x78, 0x22, 0x2b, 0x70, 0x43, 0xe3, 0x55, 0x47, 0x31, 0x61, 0x19, 0xef, 0x58, 0xc5, 0x85, 0x2f, 0x4e, 0x30, 0xf6, 0xa0, 0x31, 0x16, 0x23, 0xc8, 0xe7, 0xe2, 0x65, 0x16, 0x33, 0xcb, 0xbf, 0x1a, 0x1b, 0xa0, 0x3d, 0xf8, 0xca, 0x5e, 0x8b, 0x31, 0x8b, 0x60, 0x08, 0x89, 0x2d, 0x0c, 0x06, 0x5c, 0x52, 0xb7, 0xc4, 0xf9, 0x0a, 0x98, 0xd1, 0x15, 0x5f, 0x9f, 0x12, 0xbe, 0x7c, 0x36, 0x63, 0x38, 0xbd, 0x44, 0xa4, 0x7f, 0xe4, 0x26, 0x2b, 0x0a, 0xc4, 0x97, 0x69, 0x0d, 0xe9, 0x8c, 0xe2, 0xc0, 0x10, 0x57, 0xb8, 0xc8, 0x76, 0x12, 0x91, 0x55, 0xf2, 0x48, 0x69, 0xd8, 0xbc, 0x2a, 0x02, 0x5b, 0x0f, 0x44, 0xd4, 0x20, 0x31, 0xdb, 0xf4, 0xba, 0x70, 0x26, 0x5d, 0x90, 0x60, 0x9e, 0xbc, 0x4b, 0x17, 0x09, 0x2f, 0xb4, 0xcb, 0x1e, 0x43, 0x68, 0xc9, 0x07, 0x27, 0xc1, 0xd2, 0x5c, 0xf7, 0xea, 0x21, 0xb9, 0x68, 0x12, 0x9c, 0x3c, 0x9c, 0xbf, 0x9e, 0xfc, 0x80, 0x5c, 0x9b, 0x63, 0xcd, 0xec, 0x47, 0xaa, 0x25, 0x27, 0x67, 0xa0, 0x37, 0xf3, 0x00, 0x82, 0x7d, 0x54, 0xd7, 0xa9, 0xf8, 0xe9, 0x2e, 0x13, 0xa3, 0x77, 0xe8, 0x1f, 0x4a, 0x30, 0x82, 0x05, 0x90, 0x30, 0x82, 0x03, 0x78, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x05, 0x9b, 0x1b, 0x57, 0x9e, 0x8e, 0x21, 0x32, 0xe2, 0x39, 0x07, 0xbd, 0xa7, 0x77, 0x75, 0x5c, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0c, 0x05, 0x00, 0x30, 0x62, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0c, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x49, 0x6e, 0x63, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x10, 0x77, 0x77, 0x77, 0x2e, 0x64, 0x69, 0x67, 0x69, 0x63, 0x65, 0x72, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x18, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x47, 0x34, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x33, 0x30, 0x38, 0x30, 0x31, 0x31, 0x32, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x33, 0x38, 0x30, 0x31, 0x31, 0x35, 0x31, 0x32, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x62, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0c, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x49, 0x6e, 0x63, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x10, 0x77, 0x77, 0x77, 0x2e, 0x64, 0x69, 0x67, 0x69, 0x63, 0x65, 0x72, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x18, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x47, 0x34, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xbf, 0xe6, 0x90, 0x73, 0x68, 0xde, 0xbb, 0xe4, 0x5d, 0x4a, 0x3c, 0x30, 0x22, 0x30, 0x69, 0x33, 0xec, 0xc2, 0xa7, 0x25, 0x2e, 0xc9, 0x21, 0x3d, 0xf2, 0x8a, 0xd8, 0x59, 0xc2, 0xe1, 0x29, 0xa7, 0x3d, 0x58, 0xab, 0x76, 0x9a, 0xcd, 0xae, 0x7b, 0x1b, 0x84, 0x0d, 0xc4, 0x30, 0x1f, 0xf3, 0x1b, 0xa4, 0x38, 0x16, 0xeb, 0x56, 0xc6, 0x97, 0x6d, 0x1d, 0xab, 0xb2, 0x79, 0xf2, 0xca, 0x11, 0xd2, 0xe4, 0x5f, 0xd6, 0x05, 0x3c, 0x52, 0x0f, 0x52, 0x1f, 0xc6, 0x9e, 0x15, 0xa5, 0x7e, 0xbe, 0x9f, 0xa9, 0x57, 0x16, 0x59, 0x55, 0x72, 0xaf, 0x68, 0x93, 0x70, 0xc2, 0xb2, 0xba, 0x75, 0x99, 0x6a, 0x73, 0x32, 0x94, 0xd1, 0x10, 0x44, 0x10, 0x2e, 0xdf, 0x82, 0xf3, 0x07, 0x84, 0xe6, 0x74, 0x3b, 0x6d, 0x71, 0xe2, 0x2d, 0x0c, 0x1b, 0xee, 0x20, 0xd5, 0xc9, 0x20, 0x1d, 0x63, 0x29, 0x2d, 0xce, 0xec, 0x5e, 0x4e, 0xc8, 0x93, 0xf8, 0x21, 0x61, 0x9b, 0x34, 0xeb, 0x05, 0xc6, 0x5e, 0xec, 0x5b, 0x1a, 0xbc, 0xeb, 0xc9, 0xcf, 0xcd, 0xac, 0x34, 0x40, 0x5f, 0xb1, 0x7a, 0x66, 0xee, 0x77, 0xc8, 0x48, 0xa8, 0x66, 0x57, 0x57, 0x9f, 0x54, 0x58, 0x8e, 0x0c, 0x2b, 0xb7, 0x4f, 0xa7, 0x30, 0xd9, 0x56, 0xee, 0xca, 0x7b, 0x5d, 0xe3, 0xad, 0xc9, 0x4f, 0x5e, 0xe5, 0x35, 0xe7, 0x31, 0xcb, 0xda, 0x93, 0x5e, 0xdc, 0x8e, 0x8f, 0x80, 0xda, 0xb6, 0x91, 0x98, 0x40, 0x90, 0x79, 0xc3, 0x78, 0xc7, 0xb6, 0xb1, 0xc4, 0xb5, 0x6a, 0x18, 0x38, 0x03, 0x10, 0x8d, 0xd8, 0xd4, 0x37, 0xa4, 0x2e, 0x05, 0x7d, 0x88, 0xf5, 0x82, 0x3e, 0x10, 0x91, 0x70, 0xab, 0x55, 0x82, 0x41, 0x32, 0xd7, 0xdb, 0x04, 0x73, 0x2a, 0x6e, 0x91, 0x01, 0x7c, 0x21, 0x4c, 0xd4, 0xbc, 0xae, 0x1b, 0x03, 0x75, 0x5d, 0x78, 0x66, 0xd9, 0x3a, 0x31, 0x44, 0x9a, 0x33, 0x40, 0xbf, 0x08, 0xd7, 0x5a, 0x49, 0xa4, 0xc2, 0xe6, 0xa9, 0xa0, 0x67, 0xdd, 0xa4, 0x27, 0xbc, 0xa1, 0x4f, 0x39, 0xb5, 0x11, 0x58, 0x17, 0xf7, 0x24, 0x5c, 0x46, 0x8f, 0x64, 0xf7, 0xc1, 0x69, 0x88, 0x76, 0x98, 0x76, 0x3d, 0x59, 0x5d, 0x42, 0x76, 0x87, 0x89, 0x97, 0x69, 0x7a, 0x48, 0xf0, 0xe0, 0xa2, 0x12, 0x1b, 0x66, 0x9a, 0x74, 0xca, 0xde, 0x4b, 0x1e, 0xe7, 0x0e, 0x63, 0xae, 0xe6, 0xd4, 0xef, 0x92, 0x92, 0x3a, 0x9e, 0x3d, 0xdc, 0x00, 0xe4, 0x45, 0x25, 0x89, 0xb6, 0x9a, 0x44, 0x19, 0x2b, 0x7e, 0xc0, 0x94, 0xb4, 0xd2, 0x61, 0x6d, 0xeb, 0x33, 0xd9, 0xc5, 0xdf, 0x4b, 0x04, 0x00, 0xcc, 0x7d, 0x1c, 0x95, 0xc3, 0x8f, 0xf7, 0x21, 0xb2, 0xb2, 0x11, 0xb7, 0xbb, 0x7f, 0xf2, 0xd5, 0x8c, 0x70, 0x2c, 0x41, 0x60, 0xaa, 0xb1, 0x63, 0x18, 0x44, 0x95, 0x1a, 0x76, 0x62, 0x7e, 0xf6, 0x80, 0xb0, 0xfb, 0xe8, 0x64, 0xa6, 0x33, 0xd1, 0x89, 0x07, 0xe1, 0xbd, 0xb7, 0xe6, 0x43, 0xa4, 0x18, 0xb8, 0xa6, 0x77, 0x01, 0xe1, 0x0f, 0x94, 0x0c, 0x21, 0x1d, 0xb2, 0x54, 0x29, 0x25, 0x89, 0x6c, 0xe5, 0x0e, 0x52, 0x51, 0x47, 0x74, 0xbe, 0x26, 0xac, 0xb6, 0x41, 0x75, 0xde, 0x7a, 0xac, 0x5f, 0x8d, 0x3f, 0xc9, 0xbc, 0xd3, 0x41, 0x11, 0x12, 0x5b, 0xe5, 0x10, 0x50, 0xeb, 0x31, 0xc5, 0xca, 0x72, 0x16, 0x22, 0x09, 0xdf, 0x7c, 0x4c, 0x75, 0x3f, 0x63, 0xec, 0x21, 0x5f, 0xc4, 0x20, 0x51, 0x6b, 0x6f, 0xb1, 0xab, 0x86, 0x8b, 0x4f, 0xc2, 0xd6, 0x45, 0x5f, 0x9d, 0x20, 0xfc, 0xa1, 0x1e, 0xc5, 0xc0, 0x8f, 0xa2, 0xb1, 0x7e, 0x0a, 0x26, 0x99, 0xf5, 0xe4, 0x69, 0x2f, 0x98, 0x1d, 0x2d, 0xf5, 0xd9, 0xa9, 0xb2, 0x1d, 0xe5, 0x1b, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xec, 0xd7, 0xe3, 0x82, 0xd2, 0x71, 0x5d, 0x64, 0x4c, 0xdf, 0x2e, 0x67, 0x3f, 0xe7, 0xba, 0x98, 0xae, 0x1c, 0x0f, 0x4f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0c, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0xbb, 0x61, 0xd9, 0x7d, 0xa9, 0x6c, 0xbe, 0x17, 0xc4, 0x91, 0x1b, 0xc3, 0xa1, 0xa2, 0x00, 0x8d, 0xe3, 0x64, 0x68, 0x0f, 0x56, 0xcf, 0x77, 0xae, 0x70, 0xf9, 0xfd, 0x9a, 0x4a, 0x99, 0xb9, 0xc9, 0x78, 0x5c, 0x0c, 0x0c, 0x5f, 0xe4, 0xe6, 0x14, 0x29, 0x56, 0x0b, 0x36, 0x49, 0x5d, 0x44, 0x63, 0xe0, 0xad, 0x9c, 0x96, 0x18, 0x66, 0x1b, 0x23, 0x0d, 0x3d, 0x79, 0xe9, 0x6d, 0x6b, 0xd6, 0x54, 0xf8, 0xd2, 0x3c, 0xc1, 0x43, 0x40, 0xae, 0x1d, 0x50, 0xf5, 0x52, 0xfc, 0x90, 0x3b, 0xbb, 0x98, 0x99, 0x69, 0x6b, 0xc7, 0xc1, 0xa7, 0xa8, 0x68, 0xa4, 0x27, 0xdc, 0x9d, 0xf9, 0x27, 0xae, 0x30, 0x85, 0xb9, 0xf6, 0x67, 0x4d, 0x3a, 0x3e, 0x8f, 0x59, 0x39, 0x22, 0x53, 0x44, 0xeb, 0xc8, 0x5d, 0x03, 0xca, 0xed, 0x50, 0x7a, 0x7d, 0x62, 0x21, 0x0a, 0x80, 0xc8, 0x73, 0x66, 0xd1, 0xa0, 0x05, 0x60, 0x5f, 0xe8, 0xa5, 0xb4, 0xa7, 0xaf, 0xa8, 0xf7, 0x6d, 0x35, 0x9c, 0x7c, 0x5a, 0x8a, 0xd6, 0xa2, 0x38, 0x99, 0xf3, 0x78, 0x8b, 0xf4, 0x4d, 0xd2, 0x20, 0x0b, 0xde, 0x04, 0xee, 0x8c, 0x9b, 0x47, 0x81, 0x72, 0x0d, 0xc0, 0x14, 0x32, 0xef, 0x30, 0x59, 0x2e, 0xae, 0xe0, 0x71, 0xf2, 0x56, 0xe4, 0x6a, 0x97, 0x6f, 0x92, 0x50, 0x6d, 0x96, 0x8d, 0x68, 0x7a, 0x9a, 0xb2, 0x36, 0x14, 0x7a, 0x06, 0xf2, 0x24, 0xb9, 0x09, 0x11, 0x50, 0xd7, 0x08, 0xb1, 0xb8, 0x89, 0x7a, 0x84, 0x23, 0x61, 0x42, 0x29, 0xe5, 0xa3, 0xcd, 0xa2, 0x20, 0x41, 0xd7, 0xd1, 0x9c, 0x64, 0xd9, 0xea, 0x26, 0xa1, 0x8b, 0x14, 0xd7, 0x4c, 0x19, 0xb2, 0x50, 0x41, 0x71, 0x3d, 0x3f, 0x4d, 0x70, 0x23, 0x86, 0x0c, 0x4a, 0xdc, 0x81, 0xd2, 0xcc, 0x32, 0x94, 0x84, 0x0d, 0x08, 0x09, 0x97, 0x1c, 0x4f, 0xc0, 0xee, 0x6b, 0x20, 0x74, 0x30, 0xd2, 0xe0, 0x39, 0x34, 0x10, 0x85, 0x21, 0x15, 0x01, 0x08, 0xe8, 0x55, 0x32, 0xde, 0x71, 0x49, 0xd9, 0x28, 0x17, 0x50, 0x4d, 0xe6, 0xbe, 0x4d, 0xd1, 0x75, 0xac, 0xd0, 0xca, 0xfb, 0x41, 0xb8, 0x43, 0xa5, 0xaa, 0xd3, 0xc3, 0x05, 0x44, 0x4f, 0x2c, 0x36, 0x9b, 0xe2, 0xfa, 0xe2, 0x45, 0xb8, 0x23, 0x53, 0x6c, 0x06, 0x6f, 0x67, 0x55, 0x7f, 0x46, 0xb5, 0x4c, 0x3f, 0x6e, 0x28, 0x5a, 0x79, 0x26, 0xd2, 0xa4, 0xa8, 0x62, 0x97, 0xd2, 0x1e, 0xe2, 0xed, 0x4a, 0x8b, 0xbc, 0x1b, 0xfd, 0x47, 0x4a, 0x0d, 0xdf, 0x67, 0x66, 0x7e, 0xb2, 0x5b, 0x41, 0xd0, 0x3b, 0xe4, 0xf4, 0x3b, 0xf4, 0x04, 0x63, 0xe9, 0xef, 0xc2, 0x54, 0x00, 0x51, 0xa0, 0x8a, 0x2a, 0xc9, 0xce, 0x78, 0xcc, 0xd5, 0xea, 0x87, 0x04, 0x18, 0xb3, 0xce, 0xaf, 0x49, 0x88, 0xaf, 0xf3, 0x92, 0x99, 0xb6, 0xb3, 0xe6, 0x61, 0x0f, 0xd2, 0x85, 0x00, 0xe7, 0x50, 0x1a, 0xe4, 0x1b, 0x95, 0x9d, 0x19, 0xa1, 0xb9, 0x9c, 0xb1, 0x9b, 0xb1, 0x00, 0x1e, 0xef, 0xd0, 0x0f, 0x4f, 0x42, 0x6c, 0xc9, 0x0a, 0xbc, 0xee, 0x43, 0xfa, 0x3a, 0x71, 0xa5, 0xc8, 0x4d, 0x26, 0xa5, 0x35, 0xfd, 0x89, 0x5d, 0xbc, 0x85, 0x62, 0x1d, 0x32, 0xd2, 0xa0, 0x2b, 0x54, 0xed, 0x9a, 0x57, 0xc1, 0xdb, 0xfa, 0x10, 0xcf, 0x19, 0xb7, 0x8b, 0x4a, 0x1b, 0x8f, 0x01, 0xb6, 0x27, 0x95, 0x53, 0xe8, 0xb6, 0x89, 0x6d, 0x5b, 0xbc, 0x68, 0xd4, 0x23, 0xe8, 0x8b, 0x51, 0xa2, 0x56, 0xf9, 0xf0, 0xa6, 0x80, 0xa0, 0xd6, 0x1e, 0xb3, 0xbc, 0x0f, 0x0f, 0x53, 0x75, 0x29, 0xaa, 0xea, 0x13, 0x77, 0xe4, 0xde, 0x8c, 0x81, 0x21, 0xad, 0x07, 0x10, 0x47, 0x11, 0xad, 0x87, 0x3d, 0x07, 0xd1, 0x75, 0xbc, 0xcf, 0xf3, 0x66, 0x7e, 0x30, 0x82, 0x02, 0x46, 0x30, 0x82, 0x01, 0xcd, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x0b, 0xa1, 0x5a, 0xfa, 0x1d, 0xdf, 0xa0, 0xb5, 0x49, 0x44, 0xaf, 0xcd, 0x24, 0xa0, 0x6c, 0xec, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x30, 0x65, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0c, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x49, 0x6e, 0x63, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x10, 0x77, 0x77, 0x77, 0x2e, 0x64, 0x69, 0x67, 0x69, 0x63, 0x65, 0x72, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x1b, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x41, 0x73, 0x73, 0x75, 0x72, 0x65, 0x64, 0x20, 0x49, 0x44, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x47, 0x33, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x33, 0x30, 0x38, 0x30, 0x31, 0x31, 0x32, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x33, 0x38, 0x30, 0x31, 0x31, 0x35, 0x31, 0x32, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x65, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0c, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x49, 0x6e, 0x63, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x10, 0x77, 0x77, 0x77, 0x2e, 0x64, 0x69, 0x67, 0x69, 0x63, 0x65, 0x72, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x1b, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x41, 0x73, 0x73, 0x75, 0x72, 0x65, 0x64, 0x20, 0x49, 0x44, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x47, 0x33, 0x30, 0x76, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x22, 0x03, 0x62, 0x00, 0x04, 0x19, 0xe7, 0xbc, 0xac, 0x44, 0x65, 0xed, 0xcd, 0xb8, 0x3f, 0x58, 0xfb, 0x8d, 0xb1, 0x57, 0xa9, 0x44, 0x2d, 0x05, 0x15, 0xf2, 0xef, 0x0b, 0xff, 0x10, 0x74, 0x9f, 0xb5, 0x62, 0x52, 0x5f, 0x66, 0x7e, 0x1f, 0xe5, 0xdc, 0x1b, 0x45, 0x79, 0x0b, 0xcc, 0xc6, 0x53, 0x0a, 0x9d, 0x8d, 0x5d, 0x02, 0xd9, 0xa9, 0x59, 0xde, 0x02, 0x5a, 0xf6, 0x95, 0x2a, 0x0e, 0x8d, 0x38, 0x4a, 0x8a, 0x49, 0xc6, 0xbc, 0xc6, 0x03, 0x38, 0x07, 0x5f, 0x55, 0xda, 0x7e, 0x09, 0x6e, 0xe2, 0x7f, 0x5e, 0xd0, 0x45, 0x20, 0x0f, 0x59, 0x76, 0x10, 0xd6, 0xa0, 0x24, 0xf0, 0x2d, 0xde, 0x36, 0xf2, 0x6c, 0x29, 0x39, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xcb, 0xd0, 0xbd, 0xa9, 0xe1, 0x98, 0x05, 0x51, 0xa1, 0x4d, 0x37, 0xa2, 0x83, 0x79, 0xce, 0x8d, 0x1d, 0x2a, 0xe4, 0x84, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x03, 0x67, 0x00, 0x30, 0x64, 0x02, 0x30, 0x25, 0xa4, 0x81, 0x45, 0x02, 0x6b, 0x12, 0x4b, 0x75, 0x74, 0x4f, 0xc8, 0x23, 0xe3, 0x70, 0xf2, 0x75, 0x72, 0xde, 0x7c, 0x89, 0xf0, 0xcf, 0x91, 0x72, 0x61, 0x9e, 0x5e, 0x10, 0x92, 0x59, 0x56, 0xb9, 0x83, 0xc7, 0x10, 0xe7, 0x38, 0xe9, 0x58, 0x26, 0x36, 0x7d, 0xd5, 0xe4, 0x34, 0x86, 0x39, 0x02, 0x30, 0x7c, 0x36, 0x53, 0xf0, 0x30, 0xe5, 0x62, 0x63, 0x3a, 0x99, 0xe2, 0xb6, 0xa3, 0x3b, 0x9b, 0x34, 0xfa, 0x1e, 0xda, 0x10, 0x92, 0x71, 0x5e, 0x91, 0x13, 0xa7, 0xdd, 0xa4, 0x6e, 0x92, 0xcc, 0x32, 0xd6, 0xf5, 0x21, 0x66, 0xc7, 0x2f, 0xea, 0x96, 0x63, 0x6a, 0x65, 0x45, 0x92, 0x95, 0x01, 0xb4, 0x30, 0x82, 0x04, 0x00, 0x30, 0x82, 0x02, 0xe8, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x63, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x18, 0x54, 0x68, 0x65, 0x20, 0x47, 0x6f, 0x20, 0x44, 0x61, 0x64, 0x64, 0x79, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x31, 0x31, 0x30, 0x2f, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x28, 0x47, 0x6f, 0x20, 0x44, 0x61, 0x64, 0x64, 0x79, 0x20, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x32, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x34, 0x30, 0x36, 0x32, 0x39, 0x31, 0x37, 0x30, 0x36, 0x32, 0x30, 0x5a, 0x17, 0x0d, 0x33, 0x34, 0x30, 0x36, 0x32, 0x39, 0x31, 0x37, 0x30, 0x36, 0x32, 0x30, 0x5a, 0x30, 0x63, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x18, 0x54, 0x68, 0x65, 0x20, 0x47, 0x6f, 0x20, 0x44, 0x61, 0x64, 0x64, 0x79, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x31, 0x31, 0x30, 0x2f, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x28, 0x47, 0x6f, 0x20, 0x44, 0x61, 0x64, 0x64, 0x79, 0x20, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x32, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x82, 0x01, 0x20, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0d, 0x00, 0x30, 0x82, 0x01, 0x08, 0x02, 0x82, 0x01, 0x01, 0x00, 0xde, 0x9d, 0xd7, 0xea, 0x57, 0x18, 0x49, 0xa1, 0x5b, 0xeb, 0xd7, 0x5f, 0x48, 0x86, 0xea, 0xbe, 0xdd, 0xff, 0xe4, 0xef, 0x67, 0x1c, 0xf4, 0x65, 0x68, 0xb3, 0x57, 0x71, 0xa0, 0x5e, 0x77, 0xbb, 0xed, 0x9b, 0x49, 0xe9, 0x70, 0x80, 0x3d, 0x56, 0x18, 0x63, 0x08, 0x6f, 0xda, 0xf2, 0xcc, 0xd0, 0x3f, 0x7f, 0x02, 0x54, 0x22, 0x54, 0x10, 0xd8, 0xb2, 0x81, 0xd4, 0xc0, 0x75, 0x3d, 0x4b, 0x7f, 0xc7, 0x77, 0xc3, 0x3e, 0x78, 0xab, 0x1a, 0x03, 0xb5, 0x20, 0x6b, 0x2f, 0x6a, 0x2b, 0xb1, 0xc5, 0x88, 0x7e, 0xc4, 0xbb, 0x1e, 0xb0, 0xc1, 0xd8, 0x45, 0x27, 0x6f, 0xaa, 0x37, 0x58, 0xf7, 0x87, 0x26, 0xd7, 0xd8, 0x2d, 0xf6, 0xa9, 0x17, 0xb7, 0x1f, 0x72, 0x36, 0x4e, 0xa6, 0x17, 0x3f, 0x65, 0x98, 0x92, 0xdb, 0x2a, 0x6e, 0x5d, 0xa2, 0xfe, 0x88, 0xe0, 0x0b, 0xde, 0x7f, 0xe5, 0x8d, 0x15, 0xe1, 0xeb, 0xcb, 0x3a, 0xd5, 0xe2, 0x12, 0xa2, 0x13, 0x2d, 0xd8, 0x8e, 0xaf, 0x5f, 0x12, 0x3d, 0xa0, 0x08, 0x05, 0x08, 0xb6, 0x5c, 0xa5, 0x65, 0x38, 0x04, 0x45, 0x99, 0x1e, 0xa3, 0x60, 0x60, 0x74, 0xc5, 0x41, 0xa5, 0x72, 0x62, 0x1b, 0x62, 0xc5, 0x1f, 0x6f, 0x5f, 0x1a, 0x42, 0xbe, 0x02, 0x51, 0x65, 0xa8, 0xae, 0x23, 0x18, 0x6a, 0xfc, 0x78, 0x03, 0xa9, 0x4d, 0x7f, 0x80, 0xc3, 0xfa, 0xab, 0x5a, 0xfc, 0xa1, 0x40, 0xa4, 0xca, 0x19, 0x16, 0xfe, 0xb2, 0xc8, 0xef, 0x5e, 0x73, 0x0d, 0xee, 0x77, 0xbd, 0x9a, 0xf6, 0x79, 0x98, 0xbc, 0xb1, 0x07, 0x67, 0xa2, 0x15, 0x0d, 0xdd, 0xa0, 0x58, 0xc6, 0x44, 0x7b, 0x0a, 0x3e, 0x62, 0x28, 0x5f, 0xba, 0x41, 0x07, 0x53, 0x58, 0xcf, 0x11, 0x7e, 0x38, 0x74, 0xc5, 0xf8, 0xff, 0xb5, 0x69, 0x90, 0x8f, 0x84, 0x74, 0xea, 0x97, 0x1b, 0xaf, 0x02, 0x01, 0x03, 0xa3, 0x81, 0xc0, 0x30, 0x81, 0xbd, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xd2, 0xc4, 0xb0, 0xd2, 0x91, 0xd4, 0x4c, 0x11, 0x71, 0xb3, 0x61, 0xcb, 0x3d, 0xa1, 0xfe, 0xdd, 0xa8, 0x6a, 0xd4, 0xe3, 0x30, 0x81, 0x8d, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x81, 0x85, 0x30, 0x81, 0x82, 0x80, 0x14, 0xd2, 0xc4, 0xb0, 0xd2, 0x91, 0xd4, 0x4c, 0x11, 0x71, 0xb3, 0x61, 0xcb, 0x3d, 0xa1, 0xfe, 0xdd, 0xa8, 0x6a, 0xd4, 0xe3, 0xa1, 0x67, 0xa4, 0x65, 0x30, 0x63, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x18, 0x54, 0x68, 0x65, 0x20, 0x47, 0x6f, 0x20, 0x44, 0x61, 0x64, 0x64, 0x79, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x31, 0x31, 0x30, 0x2f, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x28, 0x47, 0x6f, 0x20, 0x44, 0x61, 0x64, 0x64, 0x79, 0x20, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x32, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x82, 0x01, 0x00, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x32, 0x4b, 0xf3, 0xb2, 0xca, 0x3e, 0x91, 0xfc, 0x12, 0xc6, 0xa1, 0x07, 0x8c, 0x8e, 0x77, 0xa0, 0x33, 0x06, 0x14, 0x5c, 0x90, 0x1e, 0x18, 0xf7, 0x08, 0xa6, 0x3d, 0x0a, 0x19, 0xf9, 0x87, 0x80, 0x11, 0x6e, 0x69, 0xe4, 0x96, 0x17, 0x30, 0xff, 0x34, 0x91, 0x63, 0x72, 0x38, 0xee, 0xcc, 0x1c, 0x01, 0xa3, 0x1d, 0x94, 0x28, 0xa4, 0x31, 0xf6, 0x7a, 0xc4, 0x54, 0xd7, 0xf6, 0xe5, 0x31, 0x58, 0x03, 0xa2, 0xcc, 0xce, 0x62, 0xdb, 0x94, 0x45, 0x73, 0xb5, 0xbf, 0x45, 0xc9, 0x24, 0xb5, 0xd5, 0x82, 0x02, 0xad, 0x23, 0x79, 0x69, 0x8d, 0xb8, 0xb6, 0x4d, 0xce, 0xcf, 0x4c, 0xca, 0x33, 0x23, 0xe8, 0x1c, 0x88, 0xaa, 0x9d, 0x8b, 0x41, 0x6e, 0x16, 0xc9, 0x20, 0xe5, 0x89, 0x9e, 0xcd, 0x3b, 0xda, 0x70, 0xf7, 0x7e, 0x99, 0x26, 0x20, 0x14, 0x54, 0x25, 0xab, 0x6e, 0x73, 0x85, 0xe6, 0x9b, 0x21, 0x9d, 0x0a, 0x6c, 0x82, 0x0e, 0xa8, 0xf8, 0xc2, 0x0c, 0xfa, 0x10, 0x1e, 0x6c, 0x96, 0xef, 0x87, 0x0d, 0xc4, 0x0f, 0x61, 0x8b, 0xad, 0xee, 0x83, 0x2b, 0x95, 0xf8, 0x8e, 0x92, 0x84, 0x72, 0x39, 0xeb, 0x20, 0xea, 0x83, 0xed, 0x83, 0xcd, 0x97, 0x6e, 0x08, 0xbc, 0xeb, 0x4e, 0x26, 0xb6, 0x73, 0x2b, 0xe4, 0xd3, 0xf6, 0x4c, 0xfe, 0x26, 0x71, 0xe2, 0x61, 0x11, 0x74, 0x4a, 0xff, 0x57, 0x1a, 0x87, 0x0f, 0x75, 0x48, 0x2e, 0xcf, 0x51, 0x69, 0x17, 0xa0, 0x02, 0x12, 0x61, 0x95, 0xd5, 0xd1, 0x40, 0xb2, 0x10, 0x4c, 0xee, 0xc4, 0xac, 0x10, 0x43, 0xa6, 0xa5, 0x9e, 0x0a, 0xd5, 0x95, 0x62, 0x9a, 0x0d, 0xcf, 0x88, 0x82, 0xc5, 0x32, 0x0c, 0xe4, 0x2b, 0x9f, 0x45, 0xe6, 0x0d, 0x9f, 0x28, 0x9c, 0xb1, 0xb9, 0x2a, 0x5a, 0x57, 0xad, 0x37, 0x0f, 0xaf, 0x1d, 0x7f, 0xdb, 0xbd, 0x9f, 0x30, 0x82, 0x03, 0xc5, 0x30, 0x82, 0x02, 0xad, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0x83, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x07, 0x41, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x61, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x0a, 0x53, 0x63, 0x6f, 0x74, 0x74, 0x73, 0x64, 0x61, 0x6c, 0x65, 0x31, 0x1a, 0x30, 0x18, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x11, 0x47, 0x6f, 0x44, 0x61, 0x64, 0x64, 0x79, 0x2e, 0x63, 0x6f, 0x6d, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x31, 0x31, 0x30, 0x2f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x28, 0x47, 0x6f, 0x20, 0x44, 0x61, 0x64, 0x64, 0x79, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x2d, 0x20, 0x47, 0x32, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x39, 0x30, 0x39, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x33, 0x37, 0x31, 0x32, 0x33, 0x31, 0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30, 0x81, 0x83, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x07, 0x41, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x61, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x0a, 0x53, 0x63, 0x6f, 0x74, 0x74, 0x73, 0x64, 0x61, 0x6c, 0x65, 0x31, 0x1a, 0x30, 0x18, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x11, 0x47, 0x6f, 0x44, 0x61, 0x64, 0x64, 0x79, 0x2e, 0x63, 0x6f, 0x6d, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x31, 0x31, 0x30, 0x2f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x28, 0x47, 0x6f, 0x20, 0x44, 0x61, 0x64, 0x64, 0x79, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x2d, 0x20, 0x47, 0x32, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xbf, 0x71, 0x62, 0x08, 0xf1, 0xfa, 0x59, 0x34, 0xf7, 0x1b, 0xc9, 0x18, 0xa3, 0xf7, 0x80, 0x49, 0x58, 0xe9, 0x22, 0x83, 0x13, 0xa6, 0xc5, 0x20, 0x43, 0x01, 0x3b, 0x84, 0xf1, 0xe6, 0x85, 0x49, 0x9f, 0x27, 0xea, 0xf6, 0x84, 0x1b, 0x4e, 0xa0, 0xb4, 0xdb, 0x70, 0x98, 0xc7, 0x32, 0x01, 0xb1, 0x05, 0x3e, 0x07, 0x4e, 0xee, 0xf4, 0xfa, 0x4f, 0x2f, 0x59, 0x30, 0x22, 0xe7, 0xab, 0x19, 0x56, 0x6b, 0xe2, 0x80, 0x07, 0xfc, 0xf3, 0x16, 0x75, 0x80, 0x39, 0x51, 0x7b, 0xe5, 0xf9, 0x35, 0xb6, 0x74, 0x4e, 0xa9, 0x8d, 0x82, 0x13, 0xe4, 0xb6, 0x3f, 0xa9, 0x03, 0x83, 0xfa, 0xa2, 0xbe, 0x8a, 0x15, 0x6a, 0x7f, 0xde, 0x0b, 0xc3, 0xb6, 0x19, 0x14, 0x05, 0xca, 0xea, 0xc3, 0xa8, 0x04, 0x94, 0x3b, 0x46, 0x7c, 0x32, 0x0d, 0xf3, 0x00, 0x66, 0x22, 0xc8, 0x8d, 0x69, 0x6d, 0x36, 0x8c, 0x11, 0x18, 0xb7, 0xd3, 0xb2, 0x1c, 0x60, 0xb4, 0x38, 0xfa, 0x02, 0x8c, 0xce, 0xd3, 0xdd, 0x46, 0x07, 0xde, 0x0a, 0x3e, 0xeb, 0x5d, 0x7c, 0xc8, 0x7c, 0xfb, 0xb0, 0x2b, 0x53, 0xa4, 0x92, 0x62, 0x69, 0x51, 0x25, 0x05, 0x61, 0x1a, 0x44, 0x81, 0x8c, 0x2c, 0xa9, 0x43, 0x96, 0x23, 0xdf, 0xac, 0x3a, 0x81, 0x9a, 0x0e, 0x29, 0xc5, 0x1c, 0xa9, 0xe9, 0x5d, 0x1e, 0xb6, 0x9e, 0x9e, 0x30, 0x0a, 0x39, 0xce, 0xf1, 0x88, 0x80, 0xfb, 0x4b, 0x5d, 0xcc, 0x32, 0xec, 0x85, 0x62, 0x43, 0x25, 0x34, 0x02, 0x56, 0x27, 0x01, 0x91, 0xb4, 0x3b, 0x70, 0x2a, 0x3f, 0x6e, 0xb1, 0xe8, 0x9c, 0x88, 0x01, 0x7d, 0x9f, 0xd4, 0xf9, 0xdb, 0x53, 0x6d, 0x60, 0x9d, 0xbf, 0x2c, 0xe7, 0x58, 0xab, 0xb8, 0x5f, 0x46, 0xfc, 0xce, 0xc4, 0x1b, 0x03, 0x3c, 0x09, 0xeb, 0x49, 0x31, 0x5c, 0x69, 0x46, 0xb3, 0xe0, 0x47, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x3a, 0x9a, 0x85, 0x07, 0x10, 0x67, 0x28, 0xb6, 0xef, 0xf6, 0xbd, 0x05, 0x41, 0x6e, 0x20, 0xc1, 0x94, 0xda, 0x0f, 0xde, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x99, 0xdb, 0x5d, 0x79, 0xd5, 0xf9, 0x97, 0x59, 0x67, 0x03, 0x61, 0xf1, 0x7e, 0x3b, 0x06, 0x31, 0x75, 0x2d, 0xa1, 0x20, 0x8e, 0x4f, 0x65, 0x87, 0xb4, 0xf7, 0xa6, 0x9c, 0xbc, 0xd8, 0xe9, 0x2f, 0xd0, 0xdb, 0x5a, 0xee, 0xcf, 0x74, 0x8c, 0x73, 0xb4, 0x38, 0x42, 0xda, 0x05, 0x7b, 0xf8, 0x02, 0x75, 0xb8, 0xfd, 0xa5, 0xb1, 0xd7, 0xae, 0xf6, 0xd7, 0xde, 0x13, 0xcb, 0x53, 0x10, 0x7e, 0x8a, 0x46, 0xd1, 0x97, 0xfa, 0xb7, 0x2e, 0x2b, 0x11, 0xab, 0x90, 0xb0, 0x27, 0x80, 0xf9, 0xe8, 0x9f, 0x5a, 0xe9, 0x37, 0x9f, 0xab, 0xe4, 0xdf, 0x6c, 0xb3, 0x85, 0x17, 0x9d, 0x3d, 0xd9, 0x24, 0x4f, 0x79, 0x91, 0x35, 0xd6, 0x5f, 0x04, 0xeb, 0x80, 0x83, 0xab, 0x9a, 0x02, 0x2d, 0xb5, 0x10, 0xf4, 0xd8, 0x90, 0xc7, 0x04, 0x73, 0x40, 0xed, 0x72, 0x25, 0xa0, 0xa9, 0x9f, 0xec, 0x9e, 0xab, 0x68, 0x12, 0x99, 0x57, 0xc6, 0x8f, 0x12, 0x3a, 0x09, 0xa4, 0xbd, 0x44, 0xfd, 0x06, 0x15, 0x37, 0xc1, 0x9b, 0xe4, 0x32, 0xa3, 0xed, 0x38, 0xe8, 0xd8, 0x64, 0xf3, 0x2c, 0x7e, 0x14, 0xfc, 0x02, 0xea, 0x9f, 0xcd, 0xff, 0x07, 0x68, 0x17, 0xdb, 0x22, 0x90, 0x38, 0x2d, 0x7a, 0x8d, 0xd1, 0x54, 0xf1, 0x69, 0xe3, 0x5f, 0x33, 0xca, 0x7a, 0x3d, 0x7b, 0x0a, 0xe3, 0xca, 0x7f, 0x5f, 0x39, 0xe5, 0xe2, 0x75, 0xba, 0xc5, 0x76, 0x18, 0x33, 0xce, 0x2c, 0xf0, 0x2f, 0x4c, 0xad, 0xf7, 0xb1, 0xe7, 0xce, 0x4f, 0xa8, 0xc4, 0x9b, 0x4a, 0x54, 0x06, 0xc5, 0x7f, 0x7d, 0xd5, 0x08, 0x0f, 0xe2, 0x1c, 0xfe, 0x7e, 0x17, 0xb8, 0xac, 0x5e, 0xf6, 0xd4, 0x16, 0xb2, 0x43, 0x09, 0x0c, 0x4d, 0xf6, 0xa7, 0x6b, 0xb4, 0x99, 0x84, 0x65, 0xca, 0x7a, 0x88, 0xe2, 0xe2, 0x44, 0xbe, 0x5c, 0xf7, 0xea, 0x1c, 0xf5, 0x30, 0x82, 0x04, 0x31, 0x30, 0x82, 0x03, 0x19, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x81, 0x95, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x52, 0x31, 0x44, 0x30, 0x42, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x3b, 0x48, 0x65, 0x6c, 0x6c, 0x65, 0x6e, 0x69, 0x63, 0x20, 0x41, 0x63, 0x61, 0x64, 0x65, 0x6d, 0x69, 0x63, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x52, 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x43, 0x65, 0x72, 0x74, 0x2e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x31, 0x40, 0x30, 0x3e, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x37, 0x48, 0x65, 0x6c, 0x6c, 0x65, 0x6e, 0x69, 0x63, 0x20, 0x41, 0x63, 0x61, 0x64, 0x65, 0x6d, 0x69, 0x63, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x52, 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x43, 0x41, 0x20, 0x32, 0x30, 0x31, 0x31, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x31, 0x31, 0x32, 0x30, 0x36, 0x31, 0x33, 0x34, 0x39, 0x35, 0x32, 0x5a, 0x17, 0x0d, 0x33, 0x31, 0x31, 0x32, 0x30, 0x31, 0x31, 0x33, 0x34, 0x39, 0x35, 0x32, 0x5a, 0x30, 0x81, 0x95, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x52, 0x31, 0x44, 0x30, 0x42, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x3b, 0x48, 0x65, 0x6c, 0x6c, 0x65, 0x6e, 0x69, 0x63, 0x20, 0x41, 0x63, 0x61, 0x64, 0x65, 0x6d, 0x69, 0x63, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x52, 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x43, 0x65, 0x72, 0x74, 0x2e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x31, 0x40, 0x30, 0x3e, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x37, 0x48, 0x65, 0x6c, 0x6c, 0x65, 0x6e, 0x69, 0x63, 0x20, 0x41, 0x63, 0x61, 0x64, 0x65, 0x6d, 0x69, 0x63, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x52, 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x43, 0x41, 0x20, 0x32, 0x30, 0x31, 0x31, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xa9, 0x53, 0x00, 0xe3, 0x2e, 0xa6, 0xf6, 0x8e, 0xfa, 0x60, 0xd8, 0x2d, 0x95, 0x3e, 0xf8, 0x2c, 0x2a, 0x54, 0x4e, 0xcd, 0xb9, 0x84, 0x61, 0x94, 0x58, 0x4f, 0x8f, 0x3d, 0x8b, 0xe4, 0x43, 0xf3, 0x75, 0x89, 0x8d, 0x51, 0xe4, 0xc3, 0x37, 0xd2, 0x8a, 0x88, 0x4d, 0x79, 0x1e, 0xb7, 0x12, 0xdd, 0x43, 0x78, 0x4a, 0x8a, 0x92, 0xe6, 0xd7, 0x48, 0xd5, 0x0f, 0xa4, 0x3a, 0x29, 0x44, 0x35, 0xb8, 0x07, 0xf6, 0x68, 0x1d, 0x55, 0xcd, 0x38, 0x51, 0xf0, 0x8c, 0x24, 0x31, 0x85, 0xaf, 0x83, 0xc9, 0x7d, 0xe9, 0x77, 0xaf, 0xed, 0x1a, 0x7b, 0x9d, 0x17, 0xf9, 0xb3, 0x9d, 0x38, 0x50, 0x0f, 0xa6, 0x5a, 0x79, 0x91, 0x80, 0xaf, 0x37, 0xae, 0xa6, 0xd3, 0x31, 0xfb, 0xb5, 0x26, 0x09, 0x9d, 0x3c, 0x5a, 0xef, 0x51, 0xc5, 0x2b, 0xdf, 0x96, 0x5d, 0xeb, 0x32, 0x1e, 0x02, 0xda, 0x70, 0x49, 0xec, 0x6e, 0x0c, 0xc8, 0x9a, 0x37, 0x8d, 0xf7, 0xf1, 0x36, 0x60, 0x4b, 0x26, 0x2c, 0x82, 0x9e, 0xd0, 0x78, 0xf3, 0x0d, 0x0f, 0x63, 0xa4, 0x51, 0x30, 0xe1, 0xf9, 0x2b, 0x27, 0x12, 0x07, 0xd8, 0xea, 0xbd, 0x18, 0x62, 0x98, 0xb0, 0x59, 0x37, 0x7d, 0xbe, 0xee, 0xf3, 0x20, 0x51, 0x42, 0x5a, 0x83, 0xef, 0x93, 0xba, 0x69, 0x15, 0xf1, 0x62, 0x9d, 0x9f, 0x99, 0x39, 0x82, 0xa1, 0xb7, 0x74, 0x2e, 0x8b, 0xd4, 0xc5, 0x0b, 0x7b, 0x2f, 0xf0, 0xc8, 0x0a, 0xda, 0x3d, 0x79, 0x0a, 0x9a, 0x93, 0x1c, 0xa5, 0x28, 0x72, 0x73, 0x91, 0x43, 0x9a, 0xa7, 0xd1, 0x4d, 0x85, 0x84, 0xb9, 0xa9, 0x74, 0x8f, 0x14, 0x40, 0xc7, 0xdc, 0xde, 0xac, 0x41, 0x64, 0x6c, 0xb4, 0x19, 0x9b, 0x02, 0x63, 0x6d, 0x24, 0x64, 0x8f, 0x44, 0xb2, 0x25, 0xea, 0xce, 0x5d, 0x74, 0x0c, 0x63, 0x32, 0x5c, 0x8d, 0x87, 0xe5, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x81, 0x89, 0x30, 0x81, 0x86, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xa6, 0x91, 0x42, 0xfd, 0x13, 0x61, 0x4a, 0x23, 0x9e, 0x08, 0xa4, 0x29, 0xe5, 0xd8, 0x13, 0x04, 0x23, 0xee, 0x41, 0x25, 0x30, 0x47, 0x06, 0x03, 0x55, 0x1d, 0x1e, 0x04, 0x40, 0x30, 0x3e, 0xa0, 0x3c, 0x30, 0x05, 0x82, 0x03, 0x2e, 0x67, 0x72, 0x30, 0x05, 0x82, 0x03, 0x2e, 0x65, 0x75, 0x30, 0x06, 0x82, 0x04, 0x2e, 0x65, 0x64, 0x75, 0x30, 0x06, 0x82, 0x04, 0x2e, 0x6f, 0x72, 0x67, 0x30, 0x05, 0x81, 0x03, 0x2e, 0x67, 0x72, 0x30, 0x05, 0x81, 0x03, 0x2e, 0x65, 0x75, 0x30, 0x06, 0x81, 0x04, 0x2e, 0x65, 0x64, 0x75, 0x30, 0x06, 0x81, 0x04, 0x2e, 0x6f, 0x72, 0x67, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x1f, 0xef, 0x79, 0x41, 0xe1, 0x7b, 0x6e, 0x3f, 0xb2, 0x8c, 0x86, 0x37, 0x42, 0x4a, 0x4e, 0x1c, 0x37, 0x1e, 0x8d, 0x66, 0xba, 0x24, 0x81, 0xc9, 0x4f, 0x12, 0x0f, 0x21, 0xc0, 0x03, 0x97, 0x86, 0x25, 0x6d, 0x5d, 0xd3, 0x22, 0x29, 0xa8, 0x6c, 0xa2, 0x0d, 0xa9, 0xeb, 0x3d, 0x06, 0x5b, 0x99, 0x3a, 0xc7, 0xcc, 0xc3, 0x9a, 0x34, 0x7f, 0xab, 0x0e, 0xc8, 0x4e, 0x1c, 0xe1, 0xfa, 0xe4, 0xdc, 0xcd, 0x0d, 0xbe, 0xbf, 0x24, 0xfe, 0x6c, 0xe7, 0x6b, 0xc2, 0x0d, 0xc8, 0x06, 0x9e, 0x4e, 0x8d, 0x61, 0x28, 0xa6, 0x6a, 0xfd, 0xe5, 0xf6, 0x62, 0xea, 0x18, 0x3c, 0x4e, 0xa0, 0x53, 0x9d, 0xb2, 0x3a, 0x9c, 0xeb, 0xa5, 0x9c, 0x91, 0x16, 0xb6, 0x4d, 0x82, 0xe0, 0x0c, 0x05, 0x48, 0xa9, 0x6c, 0xf5, 0xcc, 0xf8, 0xcb, 0x9d, 0x49, 0xb4, 0xf0, 0x02, 0xa5, 0xfd, 0x70, 0x03, 0xed, 0x8a, 0x21, 0xa5, 0xae, 0x13, 0x86, 0x49, 0xc3, 0x33, 0x73, 0xbe, 0x87, 0x3b, 0x74, 0x8b, 0x17, 0x45, 0x26, 0x4c, 0x16, 0x91, 0x83, 0xfe, 0x67, 0x7d, 0xcd, 0x4d, 0x63, 0x67, 0xfa, 0xf3, 0x03, 0x12, 0x96, 0x78, 0x06, 0x8d, 0xb1, 0x67, 0xed, 0x8e, 0x3f, 0xbe, 0x9f, 0x4f, 0x02, 0xf5, 0xb3, 0x09, 0x2f, 0xf3, 0x4c, 0x87, 0xdf, 0x2a, 0xcb, 0x95, 0x7c, 0x01, 0xcc, 0xac, 0x36, 0x7a, 0xbf, 0xa2, 0x73, 0x7a, 0xf7, 0x8f, 0xc1, 0xb5, 0x9a, 0xa1, 0x14, 0xb2, 0x8f, 0x33, 0x9f, 0x0d, 0xef, 0x22, 0xdc, 0x66, 0x7b, 0x84, 0xbd, 0x45, 0x17, 0x06, 0x3d, 0x3c, 0xca, 0xb9, 0x77, 0x34, 0x8f, 0xca, 0xea, 0xcf, 0x3f, 0x31, 0x3e, 0xe3, 0x88, 0xe3, 0x80, 0x49, 0x25, 0xc8, 0x97, 0xb5, 0x9d, 0x9a, 0x99, 0x4d, 0xb0, 0x3c, 0xf8, 0x4a, 0x00, 0x9b, 0x64, 0xdd, 0x9f, 0x39, 0x4b, 0xd1, 0x27, 0xd7, 0xb8, 0x30, 0x82, 0x03, 0x30, 0x30, 0x82, 0x02, 0x18, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x02, 0x03, 0xe8, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x47, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x48, 0x4b, 0x31, 0x16, 0x30, 0x14, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0d, 0x48, 0x6f, 0x6e, 0x67, 0x6b, 0x6f, 0x6e, 0x67, 0x20, 0x50, 0x6f, 0x73, 0x74, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x17, 0x48, 0x6f, 0x6e, 0x67, 0x6b, 0x6f, 0x6e, 0x67, 0x20, 0x50, 0x6f, 0x73, 0x74, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x31, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x33, 0x30, 0x35, 0x31, 0x35, 0x30, 0x35, 0x31, 0x33, 0x31, 0x34, 0x5a, 0x17, 0x0d, 0x32, 0x33, 0x30, 0x35, 0x31, 0x35, 0x30, 0x34, 0x35, 0x32, 0x32, 0x39, 0x5a, 0x30, 0x47, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x48, 0x4b, 0x31, 0x16, 0x30, 0x14, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0d, 0x48, 0x6f, 0x6e, 0x67, 0x6b, 0x6f, 0x6e, 0x67, 0x20, 0x50, 0x6f, 0x73, 0x74, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x17, 0x48, 0x6f, 0x6e, 0x67, 0x6b, 0x6f, 0x6e, 0x67, 0x20, 0x50, 0x6f, 0x73, 0x74, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x31, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xac, 0xff, 0x38, 0xb6, 0xe9, 0x66, 0x02, 0x49, 0xe3, 0xa2, 0xb4, 0xe1, 0x90, 0xf9, 0x40, 0x8f, 0x79, 0xf9, 0xe2, 0xbd, 0x79, 0xfe, 0x02, 0xbd, 0xee, 0x24, 0x92, 0x1d, 0x22, 0xf6, 0xda, 0x85, 0x72, 0x69, 0xfe, 0xd7, 0x3f, 0x09, 0xd4, 0xdd, 0x91, 0xb5, 0x02, 0x9c, 0xd0, 0x8d, 0x5a, 0xe1, 0x55, 0xc3, 0x50, 0x86, 0xb9, 0x29, 0x26, 0xc2, 0xe3, 0xd9, 0xa0, 0xf1, 0x69, 0x03, 0x28, 0x20, 0x80, 0x45, 0x22, 0x2d, 0x56, 0xa7, 0x3b, 0x54, 0x95, 0x56, 0x22, 0x59, 0x1f, 0x28, 0xdf, 0x1f, 0x20, 0x3d, 0x6d, 0xa2, 0x36, 0xbe, 0x23, 0xa0, 0xb1, 0x6e, 0xb5, 0xb1, 0x27, 0x3f, 0x39, 0x53, 0x09, 0xea, 0xab, 0x6a, 0xe8, 0x74, 0xb2, 0xc2, 0x65, 0x5c, 0x8e, 0xbf, 0x7c, 0xc3, 0x78, 0x84, 0xcd, 0x9e, 0x16, 0xfc, 0xf5, 0x2e, 0x4f, 0x20, 0x2a, 0x08, 0x9f, 0x77, 0xf3, 0xc5, 0x1e, 0xc4, 0x9a, 0x52, 0x66, 0x1e, 0x48, 0x5e, 0xe3, 0x10, 0x06, 0x8f, 0x22, 0x98, 0xe1, 0x65, 0x8e, 0x1b, 0x5d, 0x23, 0x66, 0x3b, 0xb8, 0xa5, 0x32, 0x51, 0xc8, 0x86, 0xaa, 0xa1, 0xa9, 0x9e, 0x7f, 0x76, 0x94, 0xc2, 0xa6, 0x6c, 0xb7, 0x41, 0xf0, 0xd5, 0xc8, 0x06, 0x38, 0xe6, 0xd4, 0x0c, 0xe2, 0xf3, 0x3b, 0x4c, 0x6d, 0x50, 0x8c, 0xc4, 0x83, 0x27, 0xc1, 0x13, 0x84, 0x59, 0x3d, 0x9e, 0x75, 0x74, 0xb6, 0xd8, 0x02, 0x5e, 0x3a, 0x90, 0x7a, 0xc0, 0x42, 0x36, 0x72, 0xec, 0x6a, 0x4d, 0xdc, 0xef, 0xc4, 0x00, 0xdf, 0x13, 0x18, 0x57, 0x5f, 0x26, 0x78, 0xc8, 0xd6, 0x0a, 0x79, 0x77, 0xbf, 0xf7, 0xaf, 0xb7, 0x76, 0xb9, 0xa5, 0x0b, 0x84, 0x17, 0x5d, 0x10, 0xea, 0x6f, 0xe1, 0xab, 0x95, 0x11, 0x5f, 0x6d, 0x3c, 0xa3, 0x5c, 0x4d, 0x83, 0x5b, 0xf2, 0xb3, 0x19, 0x8a, 0x80, 0x8b, 0x0b, 0x87, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x26, 0x30, 0x24, 0x30, 0x12, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x08, 0x30, 0x06, 0x01, 0x01, 0xff, 0x02, 0x01, 0x03, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0xc6, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x0e, 0x46, 0xd5, 0x3c, 0xae, 0xe2, 0x87, 0xd9, 0x5e, 0x81, 0x8b, 0x02, 0x98, 0x41, 0x08, 0x8c, 0x4c, 0xbc, 0xda, 0xdb, 0xee, 0x27, 0x1b, 0x82, 0xe7, 0x6a, 0x45, 0xec, 0x16, 0x8b, 0x4f, 0x85, 0xa0, 0xf3, 0xb2, 0x70, 0xbd, 0x5a, 0x96, 0xba, 0xca, 0x6e, 0x6d, 0xee, 0x46, 0x8b, 0x6e, 0xe7, 0x2a, 0x2e, 0x96, 0xb3, 0x19, 0x33, 0xeb, 0xb4, 0x9f, 0xa8, 0xb2, 0x37, 0xee, 0x98, 0xa8, 0x97, 0xb6, 0x2e, 0xb6, 0x67, 0x27, 0xd4, 0xa6, 0x49, 0xfd, 0x1c, 0x93, 0x65, 0x76, 0x9e, 0x42, 0x2f, 0xdc, 0x22, 0x6c, 0x9a, 0x4f, 0xf2, 0x5a, 0x15, 0x39, 0xb1, 0x71, 0xd7, 0x2b, 0x51, 0xe8, 0x6d, 0x1c, 0x98, 0xc0, 0xd9, 0x2a, 0xf4, 0xa1, 0x82, 0x7b, 0xd5, 0xc9, 0x41, 0xa2, 0x23, 0x01, 0x74, 0x38, 0x55, 0x8b, 0x0f, 0xb9, 0x2e, 0x67, 0xa2, 0x20, 0x04, 0x37, 0xda, 0x9c, 0x0b, 0xd3, 0x17, 0x21, 0xe0, 0x8f, 0x97, 0x79, 0x34, 0x6f, 0x84, 0x48, 0x02, 0x20, 0x33, 0x1b, 0xe6, 0x34, 0x44, 0x9f, 0x91, 0x70, 0xf4, 0x80, 0x5e, 0x84, 0x43, 0xc2, 0x29, 0xd2, 0x6c, 0x12, 0x14, 0xe4, 0x61, 0x8d, 0xac, 0x10, 0x90, 0x9e, 0x84, 0x50, 0xbb, 0xf0, 0x96, 0x6f, 0x45, 0x9f, 0x8a, 0xf3, 0xca, 0x6c, 0x4f, 0xfa, 0x11, 0x3a, 0x15, 0x15, 0x46, 0xc3, 0xcd, 0x1f, 0x83, 0x5b, 0x2d, 0x41, 0x12, 0xed, 0x50, 0x67, 0x41, 0x13, 0x3d, 0x21, 0xab, 0x94, 0x8a, 0xaa, 0x4e, 0x7c, 0xc1, 0xb1, 0xfb, 0xa7, 0xd6, 0xb5, 0x27, 0x2f, 0x97, 0xab, 0x6e, 0xe0, 0x1d, 0xe2, 0xd1, 0x1c, 0x2c, 0x1f, 0x44, 0xe2, 0xfc, 0xbe, 0x91, 0xa1, 0x9c, 0xfb, 0xd6, 0x29, 0x53, 0x73, 0x86, 0x9f, 0x53, 0xd8, 0x43, 0x0e, 0x5d, 0xd6, 0x63, 0x82, 0x71, 0x1d, 0x80, 0x74, 0xca, 0xf6, 0xe2, 0x02, 0x6b, 0xd9, 0x5a, 0x30, 0x82, 0x05, 0xf1, 0x30, 0x82, 0x03, 0xd9, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x00, 0xb0, 0xb7, 0x5a, 0x16, 0x48, 0x5f, 0xbf, 0xe1, 0xcb, 0xf5, 0x8b, 0xd7, 0x19, 0xe6, 0x7d, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x38, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x45, 0x53, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0b, 0x49, 0x5a, 0x45, 0x4e, 0x50, 0x45, 0x20, 0x53, 0x2e, 0x41, 0x2e, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0a, 0x49, 0x7a, 0x65, 0x6e, 0x70, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x37, 0x31, 0x32, 0x31, 0x33, 0x31, 0x33, 0x30, 0x38, 0x32, 0x38, 0x5a, 0x17, 0x0d, 0x33, 0x37, 0x31, 0x32, 0x31, 0x33, 0x30, 0x38, 0x32, 0x37, 0x32, 0x35, 0x5a, 0x30, 0x38, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x45, 0x53, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0b, 0x49, 0x5a, 0x45, 0x4e, 0x50, 0x45, 0x20, 0x53, 0x2e, 0x41, 0x2e, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0a, 0x49, 0x7a, 0x65, 0x6e, 0x70, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xc9, 0xd3, 0x7a, 0xca, 0x0f, 0x1e, 0xac, 0xa7, 0x86, 0xe8, 0x16, 0x65, 0x6a, 0xb1, 0xc2, 0x1b, 0x45, 0x32, 0x71, 0x95, 0xd9, 0xfe, 0x10, 0x5b, 0xcc, 0xaf, 0xe7, 0xa5, 0x79, 0x01, 0x8f, 0x89, 0xc3, 0xca, 0xf2, 0x55, 0x71, 0xf7, 0x77, 0xbe, 0x77, 0x94, 0xf3, 0x72, 0xa4, 0x2c, 0x44, 0xd8, 0x9e, 0x92, 0x9b, 0x14, 0x3a, 0xa1, 0xe7, 0x24, 0x90, 0x0a, 0x0a, 0x56, 0x8e, 0xc5, 0xd8, 0x26, 0x94, 0xe1, 0xd9, 0x48, 0xe1, 0x2d, 0x3e, 0xda, 0x0a, 0x72, 0xdd, 0xa3, 0x99, 0x15, 0xda, 0x81, 0xa2, 0x87, 0xf4, 0x7b, 0x6e, 0x26, 0x77, 0x89, 0x58, 0xad, 0xd6, 0xeb, 0x0c, 0xb2, 0x41, 0x7a, 0x73, 0x6e, 0x6d, 0xdb, 0x7a, 0x78, 0x41, 0xe9, 0x08, 0x88, 0x12, 0x7e, 0x87, 0x2e, 0x66, 0x11, 0x63, 0x6c, 0x54, 0xfb, 0x3c, 0x9d, 0x72, 0xc0, 0xbc, 0x2e, 0xff, 0xc2, 0xb7, 0xdd, 0x0d, 0x76, 0xe3, 0x3a, 0xd7, 0xf7, 0xb4, 0x68, 0xbe, 0xa2, 0xf5, 0xe3, 0x81, 0x6e, 0xc1, 0x46, 0x6f, 0x5d, 0x8d, 0xe0, 0x4d, 0xc6, 0x54, 0x55, 0x89, 0x1a, 0x33, 0x31, 0x0a, 0xb1, 0x57, 0xb9, 0xa3, 0x8a, 0x98, 0xc3, 0xec, 0x3b, 0x34, 0xc5, 0x95, 0x41, 0x69, 0x7e, 0x75, 0xc2, 0x3c, 0x20, 0xc5, 0x61, 0xba, 0x51, 0x47, 0xa0, 0x20, 0x90, 0x93, 0xa1, 0x90, 0x4b, 0xf3, 0x4e, 0x7c, 0x85, 0x45, 0x54, 0x9a, 0xd1, 0x05, 0x26, 0x41, 0xb0, 0xb5, 0x4d, 0x1d, 0x33, 0xbe, 0xc4, 0x03, 0xc8, 0x25, 0x7c, 0xc1, 0x70, 0xdb, 0x3b, 0xf4, 0x09, 0x2d, 0x54, 0x27, 0x48, 0xac, 0x2f, 0xe1, 0xc4, 0xac, 0x3e, 0xc8, 0xcb, 0x92, 0x4c, 0x53, 0x39, 0x37, 0x23, 0xec, 0xd3, 0x01, 0xf9, 0xe0, 0x09, 0x44, 0x4d, 0x4d, 0x64, 0xc0, 0xe1, 0x0d, 0x5a, 0x87, 0x22, 0xbc, 0xad, 0x1b, 0xa3, 0xfe, 0x26, 0xb5, 0x15, 0xf3, 0xa7, 0xfc, 0x84, 0x19, 0xe9, 0xec, 0xa1, 0x88, 0xb4, 0x44, 0x69, 0x84, 0x83, 0xf3, 0x89, 0xd1, 0x74, 0x06, 0xa9, 0xcc, 0x0b, 0xd6, 0xc2, 0xde, 0x27, 0x85, 0x50, 0x26, 0xca, 0x17, 0xb8, 0xc9, 0x7a, 0x87, 0x56, 0x2c, 0x1a, 0x01, 0x1e, 0x6c, 0xbe, 0x13, 0xad, 0x10, 0xac, 0xb5, 0x24, 0xf5, 0x38, 0x91, 0xa1, 0xd6, 0x4b, 0xda, 0xf1, 0xbb, 0xd2, 0xde, 0x47, 0xb5, 0xf1, 0xbc, 0x81, 0xf6, 0x59, 0x6b, 0xcf, 0x19, 0x53, 0xe9, 0x8d, 0x15, 0xcb, 0x4a, 0xcb, 0xa9, 0x6f, 0x44, 0xe5, 0x1b, 0x41, 0xcf, 0xe1, 0x86, 0xa7, 0xca, 0xd0, 0x6a, 0x9f, 0xbc, 0x4c, 0x8d, 0x06, 0x33, 0x5a, 0xa2, 0x85, 0xe5, 0x90, 0x35, 0xa0, 0x62, 0x5c, 0x16, 0x4e, 0xf0, 0xe3, 0xa2, 0xfa, 0x03, 0x1a, 0xb4, 0x2c, 0x71, 0xb3, 0x58, 0x2c, 0xde, 0x7b, 0x0b, 0xdb, 0x1a, 0x0f, 0xeb, 0xde, 0x21, 0x1f, 0x06, 0x77, 0x06, 0x03, 0xb0, 0xc9, 0xef, 0x99, 0xfc, 0xc0, 0xb9, 0x4f, 0x0b, 0x86, 0x28, 0xfe, 0xd2, 0xb9, 0xea, 0xe3, 0xda, 0xa5, 0xc3, 0x47, 0x69, 0x12, 0xe0, 0xdb, 0xf0, 0xf6, 0x19, 0x8b, 0xed, 0x7b, 0x70, 0xd7, 0x02, 0xd6, 0xed, 0x87, 0x18, 0x28, 0x2c, 0x04, 0x24, 0x4c, 0x77, 0xe4, 0x48, 0x8a, 0x1a, 0xc6, 0x3b, 0x9a, 0xd4, 0x0f, 0xca, 0xfa, 0x75, 0xd2, 0x01, 0x40, 0x5a, 0x8d, 0x79, 0xbf, 0x8b, 0xcf, 0x4b, 0xcf, 0xaa, 0x16, 0xc1, 0x95, 0xe4, 0xad, 0x4c, 0x8a, 0x3e, 0x17, 0x91, 0xd4, 0xb1, 0x62, 0xe5, 0x82, 0xe5, 0x80, 0x04, 0xa4, 0x03, 0x7e, 0x8d, 0xbf, 0xda, 0x7f, 0xa2, 0x0f, 0x97, 0x4f, 0x0c, 0xd3, 0x0d, 0xfb, 0xd7, 0xd1, 0xe5, 0x72, 0x7e, 0x1c, 0xc8, 0x77, 0xff, 0x5b, 0x9a, 0x0f, 0xb7, 0xae, 0x05, 0x46, 0xe5, 0xf1, 0xa8, 0x16, 0xec, 0x47, 0xa4, 0x17, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x81, 0xf6, 0x30, 0x81, 0xf3, 0x30, 0x81, 0xb0, 0x06, 0x03, 0x55, 0x1d, 0x11, 0x04, 0x81, 0xa8, 0x30, 0x81, 0xa5, 0x81, 0x0f, 0x69, 0x6e, 0x66, 0x6f, 0x40, 0x69, 0x7a, 0x65, 0x6e, 0x70, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0xa4, 0x81, 0x91, 0x30, 0x81, 0x8e, 0x31, 0x47, 0x30, 0x45, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x3e, 0x49, 0x5a, 0x45, 0x4e, 0x50, 0x45, 0x20, 0x53, 0x2e, 0x41, 0x2e, 0x20, 0x2d, 0x20, 0x43, 0x49, 0x46, 0x20, 0x41, 0x30, 0x31, 0x33, 0x33, 0x37, 0x32, 0x36, 0x30, 0x2d, 0x52, 0x4d, 0x65, 0x72, 0x63, 0x2e, 0x56, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x2d, 0x47, 0x61, 0x73, 0x74, 0x65, 0x69, 0x7a, 0x20, 0x54, 0x31, 0x30, 0x35, 0x35, 0x20, 0x46, 0x36, 0x32, 0x20, 0x53, 0x38, 0x31, 0x43, 0x30, 0x41, 0x06, 0x03, 0x55, 0x04, 0x09, 0x0c, 0x3a, 0x41, 0x76, 0x64, 0x61, 0x20, 0x64, 0x65, 0x6c, 0x20, 0x4d, 0x65, 0x64, 0x69, 0x74, 0x65, 0x72, 0x72, 0x61, 0x6e, 0x65, 0x6f, 0x20, 0x45, 0x74, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x65, 0x61, 0x20, 0x31, 0x34, 0x20, 0x2d, 0x20, 0x30, 0x31, 0x30, 0x31, 0x30, 0x20, 0x56, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x2d, 0x47, 0x61, 0x73, 0x74, 0x65, 0x69, 0x7a, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x1d, 0x1c, 0x65, 0x0e, 0xa8, 0xf2, 0x25, 0x7b, 0xb4, 0x91, 0xcf, 0xe4, 0xb1, 0xb1, 0xe6, 0xbd, 0x55, 0x74, 0x6c, 0x05, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x78, 0xa6, 0x0c, 0x16, 0x4a, 0x9f, 0x4c, 0x88, 0x3a, 0xc0, 0xcb, 0x0e, 0xa5, 0x16, 0x7d, 0x9f, 0xb9, 0x48, 0x5f, 0x18, 0x8f, 0x0d, 0x62, 0x36, 0xf6, 0xcd, 0x19, 0x6b, 0xac, 0xab, 0xd5, 0xf6, 0x91, 0x7d, 0xae, 0x71, 0xf3, 0x3f, 0xb3, 0x0e, 0x78, 0x85, 0x9b, 0x95, 0xa4, 0x27, 0x21, 0x47, 0x42, 0x4a, 0x7c, 0x48, 0x3a, 0xf5, 0x45, 0x7c, 0xb3, 0x0c, 0x8e, 0x51, 0x78, 0xac, 0x95, 0x13, 0xde, 0xc6, 0xfd, 0x7d, 0xb8, 0x1a, 0x90, 0x4c, 0xab, 0x92, 0x03, 0xc7, 0xed, 0x42, 0x01, 0xce, 0x0f, 0xd8, 0xb1, 0xfa, 0xa2, 0x92, 0xe1, 0x60, 0x6d, 0xae, 0x7a, 0x6b, 0x09, 0xaa, 0xc6, 0x29, 0xee, 0x68, 0x49, 0x67, 0x30, 0x80, 0x24, 0x7a, 0x31, 0x16, 0x39, 0x5b, 0x7e, 0xf1, 0x1c, 0x2e, 0xdd, 0x6c, 0x09, 0xad, 0xf2, 0x31, 0xc1, 0x82, 0x4e, 0xb9, 0xbb, 0xf9, 0xbe, 0xbf, 0x2a, 0x85, 0x3f, 0xc0, 0x40, 0xa3, 0x3a, 0x59, 0xfc, 0x59, 0x4b, 0x3c, 0x28, 0x24, 0xdb, 0xb4, 0x15, 0x75, 0xae, 0x0d, 0x88, 0xba, 0x2e, 0x73, 0xc0, 0xbd, 0x58, 0x87, 0xe5, 0x42, 0xf2, 0xeb, 0x5e, 0xee, 0x1e, 0x30, 0x22, 0x99, 0xcb, 0x37, 0xd1, 0xc4, 0x21, 0x6c, 0x81, 0xec, 0xbe, 0x6d, 0x26, 0xe6, 0x1c, 0xe4, 0x42, 0x20, 0x9e, 0x47, 0xb0, 0xac, 0x83, 0x59, 0x70, 0x2c, 0x35, 0xd6, 0xaf, 0x36, 0x34, 0xb4, 0xcd, 0x3b, 0xf8, 0x32, 0xa8, 0xef, 0xe3, 0x78, 0x89, 0xfb, 0x8d, 0x45, 0x2c, 0xda, 0x9c, 0xb8, 0x7e, 0x40, 0x1c, 0x61, 0xe7, 0x3e, 0xa2, 0x92, 0x2c, 0x4b, 0xf2, 0xcd, 0xfa, 0x98, 0xb6, 0x29, 0xff, 0xf3, 0xf2, 0x7b, 0xa9, 0x1f, 0x2e, 0xa0, 0x93, 0x57, 0x2b, 0xde, 0x85, 0x03, 0xf9, 0x69, 0x37, 0xcb, 0x9e, 0x78, 0x6a, 0x05, 0xb4, 0xc5, 0x31, 0x78, 0x89, 0xec, 0x7a, 0xa7, 0x85, 0xe1, 0xb9, 0x7b, 0x3c, 0xde, 0xbe, 0x1e, 0x79, 0x84, 0xce, 0x9f, 0x70, 0x0e, 0x59, 0xc2, 0x35, 0x2e, 0x90, 0x2a, 0x31, 0xd9, 0xe4, 0x45, 0x7a, 0x41, 0xa4, 0x2e, 0x13, 0x9b, 0x34, 0x0e, 0x66, 0x7b, 0x49, 0xab, 0x64, 0x97, 0xd0, 0x46, 0xc3, 0x79, 0x9d, 0x72, 0x50, 0x63, 0xa6, 0x98, 0x5b, 0x06, 0xbd, 0x48, 0x6d, 0xd8, 0x39, 0x83, 0x70, 0xe8, 0x35, 0xf0, 0x05, 0xd1, 0xaa, 0xbc, 0xe3, 0xdb, 0xc8, 0x02, 0xea, 0x7c, 0xfd, 0x82, 0xda, 0xc2, 0x5b, 0x52, 0x35, 0xae, 0x98, 0x3a, 0xad, 0xba, 0x35, 0x93, 0x23, 0xa7, 0x1f, 0x48, 0xdd, 0x35, 0x46, 0x98, 0xb2, 0x10, 0x68, 0xe4, 0xa5, 0x31, 0xc2, 0x0a, 0x58, 0x2e, 0x19, 0x81, 0x10, 0xc9, 0x50, 0x75, 0xfc, 0xea, 0x5a, 0x16, 0xce, 0x11, 0xd7, 0xee, 0xef, 0x50, 0x88, 0x2d, 0x61, 0xff, 0x3f, 0x42, 0x73, 0x05, 0x94, 0x43, 0xd5, 0x8e, 0x3c, 0x4e, 0x01, 0x3a, 0x19, 0xa5, 0x1f, 0x46, 0x4e, 0x77, 0xd0, 0x5d, 0xe5, 0x81, 0x22, 0x21, 0x87, 0xfe, 0x94, 0x7d, 0x84, 0xd8, 0x93, 0xad, 0xd6, 0x68, 0x43, 0x48, 0xb2, 0xdb, 0xeb, 0x73, 0x24, 0xe7, 0x91, 0x7f, 0x54, 0xa4, 0xb6, 0x80, 0x3e, 0x9d, 0xa3, 0x3c, 0x4c, 0x72, 0xc2, 0x57, 0xc4, 0xa0, 0xd4, 0xcc, 0x38, 0x27, 0xce, 0xd5, 0x06, 0x9e, 0xa2, 0x48, 0xd9, 0xe9, 0x9f, 0xce, 0x82, 0x70, 0x36, 0x93, 0x9a, 0x3b, 0xdf, 0x96, 0x21, 0xe3, 0x59, 0xb7, 0x0c, 0xda, 0x91, 0x37, 0xf0, 0xfd, 0x59, 0x5a, 0xb3, 0x99, 0xc8, 0x69, 0x6c, 0x43, 0x26, 0x01, 0x35, 0x63, 0x60, 0x55, 0x89, 0x03, 0x3a, 0x75, 0xd8, 0xba, 0x4a, 0xd9, 0x54, 0xff, 0xee, 0xde, 0x80, 0xd8, 0x2d, 0xd1, 0x38, 0xd5, 0x5e, 0x2d, 0x0b, 0x98, 0x7d, 0x3e, 0x6c, 0xdb, 0xfc, 0x26, 0x88, 0xc7, 0x30, 0x82, 0x03, 0xc3, 0x30, 0x82, 0x02, 0xab, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x01, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0x82, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x44, 0x45, 0x31, 0x2b, 0x30, 0x29, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x22, 0x54, 0x2d, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x20, 0x47, 0x6d, 0x62, 0x48, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x16, 0x54, 0x2d, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x43, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x31, 0x25, 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x1c, 0x54, 0x2d, 0x54, 0x65, 0x6c, 0x65, 0x53, 0x65, 0x63, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x32, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x38, 0x31, 0x30, 0x30, 0x31, 0x31, 0x30, 0x34, 0x30, 0x31, 0x34, 0x5a, 0x17, 0x0d, 0x33, 0x33, 0x31, 0x30, 0x30, 0x31, 0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30, 0x81, 0x82, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x44, 0x45, 0x31, 0x2b, 0x30, 0x29, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x22, 0x54, 0x2d, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x20, 0x47, 0x6d, 0x62, 0x48, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x16, 0x54, 0x2d, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x43, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x31, 0x25, 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x1c, 0x54, 0x2d, 0x54, 0x65, 0x6c, 0x65, 0x53, 0x65, 0x63, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x32, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xaa, 0x5f, 0xda, 0x1b, 0x5f, 0xe8, 0x73, 0x91, 0xe5, 0xda, 0x5c, 0xf4, 0xa2, 0xe6, 0x47, 0xe5, 0xf3, 0x68, 0x55, 0x60, 0x05, 0x1d, 0x02, 0xa4, 0xb3, 0x9b, 0x59, 0xf3, 0x1e, 0x8a, 0xaf, 0x34, 0xad, 0xfc, 0x0d, 0xc2, 0xd9, 0x48, 0x19, 0xee, 0x69, 0x8f, 0xc9, 0x20, 0xfc, 0x21, 0xaa, 0x07, 0x19, 0xed, 0xb0, 0x5c, 0xac, 0x65, 0xc7, 0x5f, 0xed, 0x02, 0x7c, 0x7b, 0x7c, 0x2d, 0x1b, 0xd6, 0xba, 0xb9, 0x80, 0xc2, 0x18, 0x82, 0x16, 0x84, 0xfa, 0x66, 0xb0, 0x08, 0xc6, 0x54, 0x23, 0x81, 0xe4, 0xcd, 0xb9, 0x49, 0x3f, 0xf6, 0x4f, 0x6e, 0x37, 0x48, 0x28, 0x38, 0x0f, 0xc5, 0xbe, 0xe7, 0x68, 0x70, 0xfd, 0x39, 0x97, 0x4d, 0xd2, 0xc7, 0x98, 0x91, 0x50, 0xaa, 0xc4, 0x44, 0xb3, 0x23, 0x7d, 0x39, 0x47, 0xe9, 0x52, 0x62, 0xd6, 0x12, 0x93, 0x5e, 0xb7, 0x31, 0x96, 0x42, 0x05, 0xfb, 0x76, 0xa7, 0x1e, 0xa3, 0xf5, 0xc2, 0xfc, 0xe9, 0x7a, 0xc5, 0x6c, 0xa9, 0x71, 0x4f, 0xea, 0xcb, 0x78, 0xbc, 0x60, 0xaf, 0xc7, 0xde, 0xf4, 0xd9, 0xcb, 0xbe, 0x7e, 0x33, 0xa5, 0x6e, 0x94, 0x83, 0xf0, 0x34, 0xfa, 0x21, 0xab, 0xea, 0x8e, 0x72, 0xa0, 0x3f, 0xa4, 0xde, 0x30, 0x5b, 0xef, 0x86, 0x4d, 0x6a, 0x95, 0x5b, 0x43, 0x44, 0xa8, 0x10, 0x15, 0x1c, 0xe5, 0x01, 0x57, 0xc5, 0x98, 0xf1, 0xe6, 0x06, 0x28, 0x91, 0xaa, 0x20, 0xc5, 0xb7, 0x53, 0x26, 0x51, 0x43, 0xb2, 0x0b, 0x11, 0x95, 0x58, 0xe1, 0xc0, 0x0f, 0x76, 0xd9, 0xc0, 0x8d, 0x7c, 0x81, 0xf3, 0x72, 0x70, 0x9e, 0x6f, 0xfe, 0x1a, 0x8e, 0xd9, 0x5f, 0x35, 0xc6, 0xb2, 0x6f, 0x34, 0x7c, 0xbe, 0x48, 0x4f, 0xe2, 0x5a, 0x39, 0xd7, 0xd8, 0x9d, 0x78, 0x9e, 0x9f, 0x86, 0x3e, 0x03, 0x5e, 0x19, 0x8b, 0x44, 0xa2, 0xd5, 0xc7, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xbf, 0x59, 0x20, 0x36, 0x00, 0x79, 0xa0, 0xa0, 0x22, 0x6b, 0x8c, 0xd5, 0xf2, 0x61, 0xd2, 0xb8, 0x2c, 0xcb, 0x82, 0x4a, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x31, 0x03, 0xa2, 0x61, 0x0b, 0x1f, 0x74, 0xe8, 0x72, 0x36, 0xc6, 0x6d, 0xf9, 0x4d, 0x9e, 0xfa, 0x22, 0xa8, 0xe1, 0x81, 0x56, 0xcf, 0xcd, 0xbb, 0x9f, 0xea, 0xab, 0x91, 0x19, 0x38, 0xaf, 0xaa, 0x7c, 0x15, 0x4d, 0xf3, 0xb6, 0xa3, 0x8d, 0xa5, 0xf4, 0x8e, 0xf6, 0x44, 0xa9, 0xa7, 0xe8, 0x21, 0x95, 0xad, 0x3e, 0x00, 0x62, 0x16, 0x88, 0xf0, 0x02, 0xba, 0xfc, 0x61, 0x23, 0xe6, 0x33, 0x9b, 0x30, 0x7a, 0x6b, 0x36, 0x62, 0x7b, 0xad, 0x04, 0x23, 0x84, 0x58, 0x65, 0xe2, 0xdb, 0x2b, 0x8a, 0xe7, 0x25, 0x53, 0x37, 0x62, 0x53, 0x5f, 0xbc, 0xda, 0x01, 0x62, 0x29, 0xa2, 0xa6, 0x27, 0x71, 0xe6, 0x3a, 0x22, 0x7e, 0xc1, 0x6f, 0x1d, 0x95, 0x70, 0x20, 0x4a, 0x07, 0x34, 0xdf, 0xea, 0xff, 0x15, 0x80, 0xe5, 0xba, 0xd7, 0x7a, 0xd8, 0x5b, 0x75, 0x7c, 0x05, 0x7a, 0x29, 0x47, 0x7e, 0x40, 0xa8, 0x31, 0x13, 0x77, 0xcd, 0x40, 0x3b, 0xb4, 0x51, 0x47, 0x7a, 0x2e, 0x11, 0xe3, 0x47, 0x11, 0xde, 0x9d, 0x66, 0xd0, 0x8b, 0xd5, 0x54, 0x66, 0xfa, 0x83, 0x55, 0xea, 0x7c, 0xc2, 0x29, 0x89, 0x1b, 0xe9, 0x6f, 0xb3, 0xce, 0xe2, 0x05, 0x84, 0xc9, 0x2f, 0x3e, 0x78, 0x85, 0x62, 0x6e, 0xc9, 0x5f, 0xc1, 0x78, 0x63, 0x74, 0x58, 0xc0, 0x48, 0x18, 0x0c, 0x99, 0x39, 0xeb, 0xa4, 0xcc, 0x1a, 0xb5, 0x79, 0x5a, 0x8d, 0x15, 0x9c, 0xd8, 0x14, 0x0d, 0xf6, 0x7a, 0x07, 0x57, 0xc7, 0x22, 0x83, 0x05, 0x2d, 0x3c, 0x9b, 0x25, 0x26, 0x3d, 0x18, 0xb3, 0xa9, 0x43, 0x7c, 0xc8, 0xc8, 0xab, 0x64, 0x8f, 0x0e, 0xa3, 0xbf, 0x9c, 0x1b, 0x9d, 0x30, 0xdb, 0xda, 0xd0, 0x19, 0x2e, 0xaa, 0x3c, 0xf1, 0xfb, 0x33, 0x80, 0x76, 0xe4, 0xcd, 0xad, 0x19, 0x4f, 0x05, 0x27, 0x8e, 0x13, 0xa1, 0x6e, 0xc2, 0x30, 0x82, 0x03, 0xc3, 0x30, 0x82, 0x02, 0xab, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x01, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0x82, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x44, 0x45, 0x31, 0x2b, 0x30, 0x29, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x22, 0x54, 0x2d, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x20, 0x47, 0x6d, 0x62, 0x48, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x16, 0x54, 0x2d, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x43, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x31, 0x25, 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x1c, 0x54, 0x2d, 0x54, 0x65, 0x6c, 0x65, 0x53, 0x65, 0x63, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x33, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x38, 0x31, 0x30, 0x30, 0x31, 0x31, 0x30, 0x32, 0x39, 0x35, 0x36, 0x5a, 0x17, 0x0d, 0x33, 0x33, 0x31, 0x30, 0x30, 0x31, 0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30, 0x81, 0x82, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x44, 0x45, 0x31, 0x2b, 0x30, 0x29, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x22, 0x54, 0x2d, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x20, 0x47, 0x6d, 0x62, 0x48, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x16, 0x54, 0x2d, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x43, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x31, 0x25, 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x1c, 0x54, 0x2d, 0x54, 0x65, 0x6c, 0x65, 0x53, 0x65, 0x63, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x33, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xbd, 0x75, 0x93, 0xf0, 0x62, 0x22, 0x6f, 0x24, 0xae, 0xe0, 0x7a, 0x76, 0xac, 0x7d, 0xbd, 0xd9, 0x24, 0xd5, 0xb8, 0xb7, 0xfc, 0xcd, 0xf0, 0x42, 0xe0, 0xeb, 0x78, 0x88, 0x56, 0x5e, 0x9b, 0x9a, 0x54, 0x1d, 0x4d, 0x0c, 0x8a, 0xf6, 0xd3, 0xcf, 0x70, 0xf4, 0x52, 0xb5, 0xd8, 0x93, 0x04, 0xe3, 0x46, 0x86, 0x71, 0x41, 0x4a, 0x2b, 0xf0, 0x2a, 0x2c, 0x55, 0x03, 0xd6, 0x48, 0xc3, 0xe0, 0x39, 0x38, 0xed, 0xf2, 0x5c, 0x3c, 0x3f, 0x44, 0xbc, 0x93, 0x3d, 0x61, 0xab, 0x4e, 0xcd, 0x0d, 0xbe, 0xf0, 0x20, 0x27, 0x58, 0x0e, 0x44, 0x7f, 0x04, 0x1a, 0x87, 0xa5, 0xd7, 0x96, 0x14, 0x36, 0x90, 0xd0, 0x49, 0x7b, 0xa1, 0x75, 0xfb, 0x1a, 0x6b, 0x73, 0xb1, 0xf8, 0xce, 0xa9, 0x09, 0x2c, 0xf2, 0x53, 0xd5, 0xc3, 0x14, 0x44, 0xb8, 0x86, 0xa5, 0xf6, 0x8b, 0x2b, 0x39, 0xda, 0xa3, 0x33, 0x54, 0xd9, 0xfa, 0x72, 0x1a, 0xf7, 0x22, 0x15, 0x1c, 0x88, 0x91, 0x6b, 0x7f, 0x66, 0xe5, 0xc3, 0x6a, 0x80, 0xb0, 0x24, 0xf3, 0xdf, 0x86, 0x45, 0x88, 0xfd, 0x19, 0x7f, 0x75, 0x87, 0x1f, 0x1f, 0xb1, 0x1b, 0x0a, 0x73, 0x24, 0x5b, 0xb9, 0x65, 0xe0, 0x2c, 0x54, 0xc8, 0x60, 0xd3, 0x66, 0x17, 0x3f, 0xe1, 0xcc, 0x54, 0x33, 0x73, 0x91, 0x02, 0x3a, 0xa6, 0x7f, 0x7b, 0x76, 0x39, 0xa2, 0x1f, 0x96, 0xb6, 0x38, 0xae, 0xb5, 0xc8, 0x93, 0x74, 0x1d, 0x9e, 0xb9, 0xb4, 0xe5, 0x60, 0x9d, 0x2f, 0x56, 0xd1, 0xe0, 0xeb, 0x5e, 0x5b, 0x4c, 0x12, 0x70, 0x0c, 0x6c, 0x44, 0x20, 0xab, 0x11, 0xd8, 0xf4, 0x19, 0xf6, 0xd2, 0x9c, 0x52, 0x37, 0xe7, 0xfa, 0xb6, 0xc2, 0x31, 0x3b, 0x4a, 0xd4, 0x14, 0x99, 0xad, 0xc7, 0x1a, 0xf5, 0x5d, 0x5f, 0xfa, 0x07, 0xb8, 0x7c, 0x0d, 0x1f, 0xd6, 0x83, 0x1e, 0xb3, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xb5, 0x03, 0xf7, 0x76, 0x3b, 0x61, 0x82, 0x6a, 0x12, 0xaa, 0x18, 0x53, 0xeb, 0x03, 0x21, 0x94, 0xbf, 0xfe, 0xce, 0xca, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x56, 0x3d, 0xef, 0x94, 0xd5, 0xbd, 0xda, 0x73, 0xb2, 0x58, 0xbe, 0xae, 0x90, 0xad, 0x98, 0x27, 0x97, 0xfe, 0x01, 0xb1, 0xb0, 0x52, 0x00, 0xb8, 0x4d, 0xe4, 0x1b, 0x21, 0x74, 0x1b, 0x7e, 0xc0, 0xee, 0x5e, 0x69, 0x2a, 0x25, 0xaf, 0x5c, 0xd6, 0x1d, 0xda, 0xd2, 0x79, 0xc9, 0xf3, 0x97, 0x29, 0xe0, 0x86, 0x87, 0xde, 0x04, 0x59, 0x0f, 0xf1, 0x59, 0xd4, 0x64, 0x85, 0x4b, 0x99, 0xaf, 0x25, 0x04, 0x1e, 0xc9, 0x46, 0xa9, 0x97, 0xde, 0x82, 0xb2, 0x1b, 0x70, 0x9f, 0x9c, 0xf6, 0xaf, 0x71, 0x31, 0xdd, 0x7b, 0x05, 0xa5, 0x2c, 0xd3, 0xb9, 0xca, 0x47, 0xf6, 0xca, 0xf2, 0xf6, 0xe7, 0xad, 0xb9, 0x48, 0x3f, 0xbc, 0x16, 0xb7, 0xc1, 0x6d, 0xf4, 0xea, 0x09, 0xaf, 0xec, 0xf3, 0xb5, 0xe7, 0x05, 0x9e, 0xa6, 0x1e, 0x8a, 0x53, 0x51, 0xd6, 0x93, 0x81, 0xcc, 0x74, 0x93, 0xf6, 0xb9, 0xda, 0xa6, 0x25, 0x05, 0x74, 0x79, 0x5a, 0x7e, 0x40, 0x3e, 0x82, 0x4b, 0x26, 0x11, 0x30, 0x6e, 0xe1, 0x3f, 0x41, 0xc7, 0x47, 0x00, 0x35, 0xd5, 0xf5, 0xd3, 0xf7, 0x54, 0x3e, 0x81, 0x3d, 0xda, 0x49, 0x6a, 0x9a, 0xb3, 0xef, 0x10, 0x3d, 0xe6, 0xeb, 0x6f, 0xd1, 0xc8, 0x22, 0x47, 0xcb, 0xcc, 0xcf, 0x01, 0x31, 0x92, 0xd9, 0x18, 0xe3, 0x22, 0xbe, 0x09, 0x1e, 0x1a, 0x3e, 0x5a, 0xb2, 0xe4, 0x6b, 0x0c, 0x54, 0x7a, 0x7d, 0x43, 0x4e, 0xb8, 0x89, 0xa5, 0x7b, 0xd7, 0xa2, 0x3d, 0x96, 0x86, 0xcc, 0xf2, 0x26, 0x34, 0x2d, 0x6a, 0x92, 0x9d, 0x9a, 0x1a, 0xd0, 0x30, 0xe2, 0x5d, 0x4e, 0x04, 0xb0, 0x5f, 0x8b, 0x20, 0x7e, 0x77, 0xc1, 0x3d, 0x95, 0x82, 0xd1, 0x46, 0x9a, 0x3b, 0x3c, 0x78, 0xb8, 0x6f, 0xa1, 0xd0, 0x0d, 0x64, 0xa2, 0x78, 0x1e, 0x29, 0x4e, 0x93, 0xc3, 0xa4, 0x54, 0x14, 0x5b, 0x30, 0x82, 0x05, 0x41, 0x30, 0x82, 0x03, 0x29, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x02, 0x0c, 0xbe, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x51, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x54, 0x57, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x09, 0x54, 0x41, 0x49, 0x57, 0x41, 0x4e, 0x2d, 0x43, 0x41, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x07, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x31, 0x1c, 0x30, 0x1a, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x13, 0x54, 0x57, 0x43, 0x41, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x32, 0x30, 0x36, 0x32, 0x37, 0x30, 0x36, 0x32, 0x38, 0x33, 0x33, 0x5a, 0x17, 0x0d, 0x33, 0x30, 0x31, 0x32, 0x33, 0x31, 0x31, 0x35, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30, 0x51, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x54, 0x57, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x09, 0x54, 0x41, 0x49, 0x57, 0x41, 0x4e, 0x2d, 0x43, 0x41, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x07, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x31, 0x1c, 0x30, 0x1a, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x13, 0x54, 0x57, 0x43, 0x41, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xb0, 0x05, 0xdb, 0xc8, 0xeb, 0x8c, 0xc4, 0x6e, 0x8a, 0x21, 0xef, 0x8e, 0x4d, 0x9c, 0x71, 0x0a, 0x1f, 0x52, 0x70, 0xed, 0x6d, 0x82, 0x9c, 0x97, 0xc5, 0xd7, 0x4c, 0x4e, 0x45, 0x49, 0xcb, 0x40, 0x42, 0xb5, 0x12, 0x34, 0x6c, 0x19, 0xc2, 0x74, 0xa4, 0x31, 0x5f, 0x85, 0x02, 0x97, 0xec, 0x43, 0x33, 0x0a, 0x53, 0xd2, 0x9c, 0x8c, 0x8e, 0xb7, 0xb8, 0x79, 0xdb, 0x2b, 0xd5, 0x6a, 0xf2, 0x8e, 0x66, 0xc4, 0xee, 0x2b, 0x01, 0x07, 0x92, 0xd4, 0xb3, 0xd0, 0x02, 0xdf, 0x50, 0xf6, 0x55, 0xaf, 0x66, 0x0e, 0xcb, 0xe0, 0x47, 0x60, 0x2f, 0x2b, 0x32, 0x39, 0x35, 0x52, 0x3a, 0x28, 0x83, 0xf8, 0x7b, 0x16, 0xc6, 0x18, 0xb8, 0x62, 0xd6, 0x47, 0x25, 0x91, 0xce, 0xf0, 0x19, 0x12, 0x4d, 0xad, 0x63, 0xf5, 0xd3, 0x3f, 0x75, 0x5f, 0x29, 0xf0, 0xa1, 0x30, 0x1c, 0x2a, 0xa0, 0x98, 0xa6, 0x15, 0xbd, 0xee, 0xfd, 0x19, 0x36, 0xf0, 0xe2, 0x91, 0x43, 0x8f, 0xfa, 0xca, 0xd6, 0x10, 0x27, 0x49, 0x4c, 0xef, 0xdd, 0xc1, 0xf1, 0x85, 0x70, 0x9b, 0xca, 0xea, 0xa8, 0x5a, 0x43, 0xfc, 0x6d, 0x86, 0x6f, 0x73, 0xe9, 0x37, 0x45, 0xa9, 0xf0, 0x36, 0xc7, 0xcc, 0x88, 0x75, 0x1e, 0xbb, 0x6c, 0x06, 0xff, 0x9b, 0x6b, 0x3e, 0x17, 0xec, 0x61, 0xaa, 0x71, 0x7c, 0xc6, 0x1d, 0xa2, 0xf7, 0x49, 0xe9, 0x15, 0xb5, 0x3c, 0xd6, 0xa1, 0x61, 0xf5, 0x11, 0xf7, 0x05, 0x6f, 0x1d, 0xfd, 0x11, 0xbe, 0xd0, 0x30, 0x07, 0xc2, 0x29, 0xb0, 0x09, 0x4e, 0x26, 0xdc, 0xe3, 0xa2, 0xa8, 0x91, 0x6a, 0x1f, 0xc2, 0x91, 0x45, 0x88, 0x5c, 0xe5, 0x98, 0xb8, 0x71, 0xa5, 0x15, 0x19, 0xc9, 0x7c, 0x75, 0x11, 0xcc, 0x70, 0x74, 0x4f, 0x2d, 0x9b, 0x1d, 0x91, 0x44, 0xfd, 0x56, 0x28, 0xa0, 0xfe, 0xbb, 0x86, 0x6a, 0xc8, 0xfa, 0x5c, 0x0b, 0x58, 0xdc, 0xc6, 0x4b, 0x76, 0xc8, 0xab, 0x22, 0xd9, 0x73, 0x0f, 0xa5, 0xf4, 0x5a, 0x02, 0x89, 0x3f, 0x4f, 0x9e, 0x22, 0x82, 0xee, 0xa2, 0x74, 0x53, 0x2a, 0x3d, 0x53, 0x27, 0x69, 0x1d, 0x6c, 0x8e, 0x32, 0x2c, 0x64, 0x00, 0x26, 0x63, 0x61, 0x36, 0x4e, 0xa3, 0x46, 0xb7, 0x3f, 0x7d, 0xb3, 0x2d, 0xac, 0x6d, 0x90, 0xa2, 0x95, 0xa2, 0xce, 0xcf, 0xda, 0x82, 0xe7, 0x07, 0x34, 0x19, 0x96, 0xe9, 0xb8, 0x21, 0xaa, 0x29, 0x7e, 0xa6, 0x38, 0xbe, 0x8e, 0x29, 0x4a, 0x21, 0x66, 0x79, 0x1f, 0xb3, 0xc3, 0xb5, 0x09, 0x67, 0xde, 0xd6, 0xd4, 0x07, 0x46, 0xf3, 0x2a, 0xda, 0xe6, 0x22, 0x37, 0x60, 0xcb, 0x81, 0xb6, 0x0f, 0xa0, 0x0f, 0xe9, 0xc8, 0x95, 0x7f, 0xbf, 0x55, 0x91, 0x05, 0x7a, 0xcf, 0x3d, 0x15, 0xc0, 0x6f, 0xde, 0x09, 0x94, 0x01, 0x83, 0xd7, 0x34, 0x1b, 0xcc, 0x40, 0xa5, 0xf0, 0xb8, 0x9b, 0x67, 0xd5, 0x98, 0x91, 0x3b, 0xa7, 0x84, 0x78, 0x95, 0x26, 0xa4, 0x5a, 0x08, 0xf8, 0x2b, 0x74, 0xb4, 0x00, 0x04, 0x3c, 0xdf, 0xb8, 0x14, 0x8e, 0xe8, 0xdf, 0xa9, 0x8d, 0x6c, 0x67, 0x92, 0x33, 0x1d, 0xc0, 0xb7, 0xd2, 0xec, 0x92, 0xc8, 0xbe, 0x09, 0xbf, 0x2c, 0x29, 0x05, 0x6f, 0x02, 0x6b, 0x9e, 0xef, 0xbc, 0xbf, 0x2a, 0xbc, 0x5b, 0xc0, 0x50, 0x8f, 0x41, 0x70, 0x71, 0x87, 0xb2, 0x4d, 0xb7, 0x04, 0xa9, 0x84, 0xa3, 0x32, 0xaf, 0xae, 0xee, 0x6b, 0x17, 0x8b, 0xb2, 0xb1, 0xfe, 0x6c, 0xe1, 0x90, 0x8c, 0x88, 0xa8, 0x97, 0x48, 0xce, 0xc8, 0x4d, 0xcb, 0xf3, 0x06, 0xcf, 0x5f, 0x6a, 0x0a, 0x42, 0xb1, 0x1e, 0x1e, 0x77, 0x2f, 0x8e, 0xa0, 0xe6, 0x92, 0x0e, 0x06, 0xfc, 0x05, 0x22, 0xd2, 0x26, 0xe1, 0x31, 0x51, 0x7d, 0x32, 0xdc, 0x0f, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x23, 0x30, 0x21, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x5f, 0x34, 0x81, 0x76, 0xef, 0x96, 0x1d, 0xd5, 0xe5, 0xb5, 0xd9, 0x02, 0x63, 0x84, 0x16, 0xc1, 0xae, 0xa0, 0x70, 0x51, 0xa7, 0xf7, 0x4c, 0x47, 0x35, 0xc8, 0x0b, 0xd7, 0x28, 0x3d, 0x89, 0x71, 0xd9, 0xaa, 0x33, 0x41, 0xea, 0x14, 0x1b, 0x6c, 0x21, 0x00, 0xc0, 0x6c, 0x42, 0x19, 0x7e, 0x9f, 0x69, 0x5b, 0x20, 0x42, 0xdf, 0xa2, 0xd2, 0xda, 0xc4, 0x7c, 0x97, 0x4b, 0x8d, 0xb0, 0xe8, 0xac, 0xc8, 0xee, 0xa5, 0x69, 0x04, 0x99, 0x0a, 0x92, 0xa6, 0xab, 0x27, 0x2e, 0x1a, 0x4d, 0x81, 0xbf, 0x84, 0xd4, 0x70, 0x1e, 0xad, 0x47, 0xfe, 0xfd, 0x4a, 0x9d, 0x33, 0xe0, 0xf2, 0xb9, 0xc4, 0x45, 0x08, 0x21, 0x0a, 0xda, 0x69, 0x69, 0x73, 0x72, 0x0d, 0xbe, 0x34, 0xfe, 0x94, 0x8b, 0xad, 0xc3, 0x1e, 0x35, 0xd7, 0xa2, 0x83, 0xef, 0xe5, 0x38, 0xc7, 0xa5, 0x85, 0x1f, 0xab, 0xcf, 0x34, 0xec, 0x3f, 0x28, 0xfe, 0x0c, 0xf1, 0x57, 0x86, 0x4e, 0xc9, 0x55, 0xf7, 0x1c, 0xd4, 0xd8, 0xa5, 0x7d, 0x06, 0x7a, 0x6f, 0xd5, 0xdf, 0x10, 0xdf, 0x81, 0x4e, 0x21, 0x65, 0xb1, 0xb6, 0xe1, 0x17, 0x79, 0x95, 0x45, 0x06, 0xce, 0x5f, 0xcc, 0xdc, 0x46, 0x89, 0x63, 0x68, 0x44, 0x8d, 0x93, 0xf4, 0x64, 0x70, 0xa0, 0x3d, 0x9d, 0x28, 0x05, 0xc3, 0x39, 0x70, 0xb8, 0x62, 0x7b, 0x20, 0xfd, 0xe4, 0xdb, 0xe9, 0x08, 0xa1, 0xb8, 0x9e, 0x3d, 0x09, 0xc7, 0x4f, 0xfb, 0x2c, 0xf8, 0x93, 0x76, 0x41, 0xde, 0x52, 0xe0, 0xe1, 0x57, 0xd2, 0x9d, 0x03, 0xbc, 0x77, 0x9e, 0xfe, 0x9e, 0x29, 0x5e, 0xf7, 0xc1, 0x51, 0x60, 0x1f, 0xde, 0xda, 0x0b, 0xb2, 0x2d, 0x75, 0xb7, 0x43, 0x48, 0x93, 0xe7, 0xf6, 0x79, 0xc6, 0x84, 0x5d, 0x80, 0x59, 0x60, 0x94, 0xfc, 0x78, 0x98, 0x8f, 0x3c, 0x93, 0x51, 0xed, 0x40, 0x90, 0x07, 0xdf, 0x64, 0x63, 0x24, 0xcb, 0x4e, 0x71, 0x05, 0xa1, 0xd7, 0x94, 0x1a, 0x88, 0x32, 0xf1, 0x22, 0x74, 0x22, 0xae, 0xa5, 0xa6, 0xd8, 0x12, 0x69, 0x4c, 0x60, 0xa3, 0x02, 0xee, 0x2b, 0xec, 0xd4, 0x63, 0x92, 0x0b, 0x5e, 0xbe, 0x2f, 0x76, 0x6b, 0xa3, 0xb6, 0x26, 0xbc, 0x8f, 0x03, 0xd8, 0x0a, 0xf2, 0x4c, 0x64, 0x46, 0xbd, 0x39, 0x62, 0xe5, 0x96, 0xeb, 0x34, 0x63, 0x11, 0x28, 0xcc, 0x95, 0xf1, 0xad, 0xef, 0xef, 0xdc, 0x80, 0x58, 0x48, 0xe9, 0x4b, 0xb8, 0xea, 0x65, 0xac, 0xe9, 0xfc, 0x80, 0xb5, 0xb5, 0xc8, 0x45, 0xf9, 0xac, 0xc1, 0x9f, 0xd9, 0xb9, 0xea, 0x62, 0x88, 0x8e, 0xc4, 0xf1, 0x4b, 0x83, 0x12, 0xad, 0xe6, 0x8b, 0x84, 0xd6, 0x9e, 0xc2, 0xeb, 0x83, 0x18, 0x9f, 0x6a, 0xbb, 0x1b, 0x24, 0x60, 0x33, 0x70, 0xcc, 0xec, 0xf7, 0x32, 0xf3, 0x5c, 0xd9, 0x79, 0x7d, 0xef, 0x9e, 0xa4, 0xfe, 0xc9, 0x23, 0xc3, 0x24, 0xee, 0x15, 0x92, 0xb1, 0x3d, 0x91, 0x4f, 0x26, 0x86, 0xbd, 0x66, 0x73, 0x24, 0x13, 0xea, 0xa4, 0xae, 0x63, 0xc1, 0xad, 0x7d, 0x84, 0x03, 0x3c, 0x10, 0x78, 0x86, 0x1b, 0x79, 0xe3, 0xc4, 0xf3, 0xf2, 0x04, 0x95, 0x20, 0xae, 0x23, 0x82, 0xc4, 0xb3, 0x3a, 0x00, 0x62, 0xbf, 0xe6, 0x36, 0x24, 0xe1, 0x57, 0xba, 0xc7, 0x1e, 0x90, 0x75, 0xd5, 0x5f, 0x3f, 0x95, 0x61, 0x2b, 0xc1, 0x3b, 0xcd, 0xe5, 0xb3, 0x68, 0x61, 0xd0, 0x46, 0x26, 0xa9, 0x21, 0x52, 0x69, 0x2d, 0xeb, 0x2e, 0xc7, 0xeb, 0x77, 0xce, 0xa6, 0x3a, 0xb5, 0x03, 0x33, 0x4f, 0x76, 0xd1, 0xe7, 0x5c, 0x54, 0x01, 0x5d, 0xcb, 0x78, 0xf4, 0xc9, 0x0c, 0xbf, 0xcf, 0x12, 0x8e, 0x17, 0x2d, 0x23, 0x68, 0x94, 0xe7, 0xab, 0xfe, 0xa9, 0xb2, 0x2b, 0x06, 0xd0, 0x04, 0xcd, 0x30, 0x82, 0x03, 0x7b, 0x30, 0x82, 0x02, 0x63, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x01, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x5f, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x54, 0x57, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x09, 0x54, 0x41, 0x49, 0x57, 0x41, 0x4e, 0x2d, 0x43, 0x41, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x07, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x31, 0x2a, 0x30, 0x28, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x21, 0x54, 0x57, 0x43, 0x41, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x38, 0x30, 0x38, 0x32, 0x38, 0x30, 0x37, 0x32, 0x34, 0x33, 0x33, 0x5a, 0x17, 0x0d, 0x33, 0x30, 0x31, 0x32, 0x33, 0x31, 0x31, 0x35, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30, 0x5f, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x54, 0x57, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x09, 0x54, 0x41, 0x49, 0x57, 0x41, 0x4e, 0x2d, 0x43, 0x41, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x07, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x31, 0x2a, 0x30, 0x28, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x21, 0x54, 0x57, 0x43, 0x41, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xb0, 0x7e, 0x72, 0xb8, 0xa4, 0x03, 0x94, 0xe6, 0xa7, 0xde, 0x09, 0x38, 0x91, 0x4a, 0x11, 0x40, 0x87, 0xa7, 0x7c, 0x59, 0x64, 0x14, 0x7b, 0xb5, 0x11, 0x10, 0xdd, 0xfe, 0xbf, 0xd5, 0xc0, 0xbb, 0x56, 0xe2, 0x85, 0x25, 0xf4, 0x35, 0x72, 0x0f, 0xf8, 0x53, 0xd0, 0x41, 0xe1, 0x44, 0x01, 0xc2, 0xb4, 0x1c, 0xc3, 0x31, 0x42, 0x16, 0x47, 0x85, 0x33, 0x22, 0x76, 0xb2, 0x0a, 0x6f, 0x0f, 0xe5, 0x25, 0x50, 0x4f, 0x85, 0x86, 0xbe, 0xbf, 0x98, 0x2e, 0x10, 0x67, 0x1e, 0xbe, 0x11, 0x05, 0x86, 0x05, 0x90, 0xc4, 0x59, 0xd0, 0x7c, 0x78, 0x10, 0xb0, 0x80, 0x5c, 0xb7, 0xe1, 0xc7, 0x2b, 0x75, 0xcb, 0x7c, 0x9f, 0xae, 0xb5, 0xd1, 0x9d, 0x23, 0x37, 0x63, 0xa7, 0xdc, 0x42, 0xa2, 0x2d, 0x92, 0x04, 0x1b, 0x50, 0xc1, 0x7b, 0xb8, 0x3e, 0x1b, 0xc9, 0x56, 0x04, 0x8b, 0x2f, 0x52, 0x9b, 0xad, 0xa9, 0x56, 0xe9, 0xc1, 0xff, 0xad, 0xa9, 0x58, 0x87, 0x30, 0xb6, 0x81, 0xf7, 0x97, 0x45, 0xfc, 0x19, 0x57, 0x3b, 0x2b, 0x6f, 0xe4, 0x47, 0xf4, 0x99, 0x45, 0xfe, 0x1d, 0xf1, 0xf8, 0x97, 0xa3, 0x88, 0x1d, 0x37, 0x1c, 0x5c, 0x8f, 0xe0, 0x76, 0x25, 0x9a, 0x50, 0xf8, 0xa0, 0x54, 0xff, 0x44, 0x90, 0x76, 0x23, 0xd2, 0x32, 0xc6, 0xc3, 0xab, 0x06, 0xbf, 0xfc, 0xfb, 0xbf, 0xf3, 0xad, 0x7d, 0x92, 0x62, 0x02, 0x5b, 0x29, 0xd3, 0x35, 0xa3, 0x93, 0x9a, 0x43, 0x64, 0x60, 0x5d, 0xb2, 0xfa, 0x32, 0xff, 0x3b, 0x04, 0xaf, 0x4d, 0x40, 0x6a, 0xf9, 0xc7, 0xe3, 0xef, 0x23, 0xfd, 0x6b, 0xcb, 0xe5, 0x0f, 0x8b, 0x38, 0x0d, 0xee, 0x0a, 0xfc, 0xfe, 0x0f, 0x98, 0x9f, 0x30, 0x31, 0xdd, 0x6c, 0x52, 0x65, 0xf9, 0x8b, 0x81, 0xbe, 0x22, 0xe1, 0x1c, 0x58, 0x03, 0xba, 0x91, 0x1b, 0x89, 0x07, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x6a, 0x38, 0x5b, 0x26, 0x8d, 0xde, 0x8b, 0x5a, 0xf2, 0x4f, 0x7a, 0x54, 0x83, 0x19, 0x18, 0xe3, 0x08, 0x35, 0xa6, 0xba, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x3c, 0xd5, 0x77, 0x3d, 0xda, 0xdf, 0x89, 0xba, 0x87, 0x0c, 0x08, 0x54, 0x6a, 0x20, 0x50, 0x92, 0xbe, 0xb0, 0x41, 0x3d, 0xb9, 0x26, 0x64, 0x83, 0x0a, 0x2f, 0xe8, 0x40, 0xc0, 0x97, 0x28, 0x27, 0x82, 0x30, 0x4a, 0xc9, 0x93, 0xff, 0x6a, 0xe7, 0xa6, 0x00, 0x7f, 0x89, 0x42, 0x9a, 0xd6, 0x11, 0xe5, 0x53, 0xce, 0x2f, 0xcc, 0xf2, 0xda, 0x05, 0xc4, 0xfe, 0xe2, 0x50, 0xc4, 0x3a, 0x86, 0x7d, 0xcc, 0xda, 0x7e, 0x10, 0x09, 0x3b, 0x92, 0x35, 0x2a, 0x53, 0xb2, 0xfe, 0xeb, 0x2b, 0x05, 0xd9, 0x6c, 0x5d, 0xe6, 0xd0, 0xef, 0xd3, 0x6a, 0x66, 0x9e, 0x15, 0x28, 0x85, 0x7a, 0xe8, 0x82, 0x00, 0xac, 0x1e, 0xa7, 0x09, 0x69, 0x56, 0x42, 0xd3, 0x68, 0x51, 0x18, 0xbe, 0x54, 0x9a, 0xbf, 0x44, 0x41, 0xba, 0x49, 0xbe, 0x20, 0xba, 0x69, 0x5c, 0xee, 0xb8, 0x77, 0xcd, 0xce, 0x6c, 0x1f, 0xad, 0x83, 0x96, 0x18, 0x7d, 0x0e, 0xb5, 0x14, 0x39, 0x84, 0xf1, 0x28, 0xe9, 0x2d, 0xa3, 0x9e, 0x7b, 0x1e, 0x7a, 0x72, 0x5a, 0x83, 0xb3, 0x79, 0x6f, 0xef, 0xb4, 0xfc, 0xd0, 0x0a, 0xa5, 0x58, 0x4f, 0x46, 0xdf, 0xfb, 0x6d, 0x79, 0x59, 0xf2, 0x84, 0x22, 0x52, 0xae, 0x0f, 0xcc, 0xfb, 0x7c, 0x3b, 0xe7, 0x6a, 0xca, 0x47, 0x61, 0xc3, 0x7a, 0xf8, 0xd3, 0x92, 0x04, 0x1f, 0xb8, 0x20, 0x84, 0xe1, 0x36, 0x54, 0x16, 0xc7, 0x40, 0xde, 0x3b, 0x8a, 0x73, 0xdc, 0xdf, 0xc6, 0x09, 0x4c, 0xdf, 0xec, 0xda, 0xff, 0xd4, 0x53, 0x42, 0xa1, 0xc9, 0xf2, 0x62, 0x1d, 0x22, 0x83, 0x3c, 0x97, 0xc5, 0xf9, 0x19, 0x62, 0x27, 0xac, 0x65, 0x22, 0xd7, 0xd3, 0x3c, 0xc6, 0xe5, 0x8e, 0xb2, 0x53, 0xcc, 0x49, 0xce, 0xbc, 0x30, 0xfe, 0x7b, 0x0e, 0x33, 0x90, 0xfb, 0xed, 0xd2, 0x14, 0x91, 0x1f, 0x07, 0xaf, 0x30, 0x82, 0x05, 0xa2, 0x30, 0x82, 0x03, 0x8a, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x14, 0x01, 0x94, 0x30, 0x1e, 0xa2, 0x0b, 0xdd, 0xf5, 0xc5, 0x33, 0x2a, 0xb1, 0x43, 0x44, 0x71, 0xf8, 0xd6, 0x50, 0x4d, 0x0d, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0c, 0x05, 0x00, 0x30, 0x69, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x4b, 0x52, 0x31, 0x26, 0x30, 0x24, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x1d, 0x4e, 0x41, 0x56, 0x45, 0x52, 0x20, 0x42, 0x55, 0x53, 0x49, 0x4e, 0x45, 0x53, 0x53, 0x20, 0x50, 0x4c, 0x41, 0x54, 0x46, 0x4f, 0x52, 0x4d, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x2e, 0x31, 0x32, 0x30, 0x30, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x29, 0x4e, 0x41, 0x56, 0x45, 0x52, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x37, 0x30, 0x38, 0x31, 0x38, 0x30, 0x38, 0x35, 0x38, 0x34, 0x32, 0x5a, 0x17, 0x0d, 0x33, 0x37, 0x30, 0x38, 0x31, 0x38, 0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30, 0x69, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x4b, 0x52, 0x31, 0x26, 0x30, 0x24, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x1d, 0x4e, 0x41, 0x56, 0x45, 0x52, 0x20, 0x42, 0x55, 0x53, 0x49, 0x4e, 0x45, 0x53, 0x53, 0x20, 0x50, 0x4c, 0x41, 0x54, 0x46, 0x4f, 0x52, 0x4d, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x2e, 0x31, 0x32, 0x30, 0x30, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x29, 0x4e, 0x41, 0x56, 0x45, 0x52, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xb6, 0xd4, 0xf1, 0x93, 0x5c, 0xb5, 0x40, 0x89, 0x0a, 0xab, 0x0d, 0x90, 0x5b, 0x50, 0x63, 0xae, 0x90, 0x94, 0x74, 0x17, 0x45, 0x72, 0xd6, 0x7b, 0x65, 0x5a, 0x29, 0x4b, 0xa7, 0x56, 0xa0, 0x4b, 0xb8, 0x2f, 0x42, 0x75, 0xe9, 0xd9, 0x7b, 0x24, 0x5a, 0x31, 0x65, 0xab, 0x17, 0x17, 0xd1, 0x33, 0x3a, 0xd9, 0x11, 0xdc, 0x40, 0x36, 0x87, 0xdf, 0xc7, 0x6a, 0xe9, 0x26, 0x5e, 0x59, 0x8a, 0x77, 0xe3, 0xe8, 0x48, 0x9c, 0x31, 0x16, 0xfa, 0x3e, 0x91, 0xb1, 0xca, 0xc9, 0xa3, 0xe2, 0x9f, 0xce, 0x21, 0x53, 0xa3, 0x02, 0x36, 0x30, 0xcb, 0x52, 0x02, 0xe5, 0xda, 0x32, 0x5d, 0xc3, 0xc5, 0xe6, 0xf9, 0xee, 0x11, 0xc7, 0x8b, 0xc9, 0x44, 0x1e, 0x84, 0x93, 0x18, 0x4a, 0xb4, 0x9f, 0xe5, 0x12, 0x64, 0x69, 0xd0, 0x26, 0x85, 0x62, 0x01, 0xb6, 0xc9, 0x02, 0x1d, 0xbe, 0x83, 0x51, 0xbb, 0x5c, 0xda, 0xf8, 0xad, 0x15, 0x6a, 0x99, 0xf7, 0x92, 0x54, 0xf7, 0x34, 0x5b, 0xe9, 0xbf, 0xea, 0x29, 0x81, 0x12, 0xd4, 0x53, 0x91, 0x96, 0xb3, 0x91, 0x5a, 0xdd, 0xfe, 0x90, 0x73, 0x28, 0xfb, 0x30, 0x46, 0xb5, 0xca, 0x08, 0x07, 0xc7, 0x71, 0x72, 0xc9, 0x66, 0xd3, 0x34, 0x97, 0xf6, 0x8c, 0xf4, 0x18, 0x4a, 0xe1, 0xd0, 0x3d, 0x5a, 0x45, 0xb6, 0x69, 0xa7, 0x29, 0xfb, 0x23, 0xce, 0x88, 0xd8, 0x12, 0x9c, 0x00, 0x48, 0xa8, 0xa6, 0x0f, 0xb3, 0x3b, 0x92, 0x8d, 0x71, 0x0e, 0x74, 0xc5, 0x8b, 0xc8, 0x4c, 0xf9, 0xf4, 0x9b, 0x8e, 0xb8, 0x3c, 0x69, 0xed, 0x6f, 0x3b, 0x50, 0x2f, 0x58, 0xed, 0xc4, 0xb0, 0xd0, 0x1c, 0x1b, 0x6a, 0x0c, 0xe2, 0xbc, 0x44, 0xaa, 0xd8, 0xcd, 0x14, 0x5d, 0x94, 0x78, 0x61, 0xbf, 0x0e, 0x6e, 0xda, 0x2a, 0xbc, 0x2f, 0x0c, 0x0b, 0x71, 0xa6, 0xb3, 0x16, 0x3f, 0x9c, 0xe6, 0xf9, 0xcc, 0x9f, 0x53, 0x35, 0xe2, 0x03, 0xa0, 0xa0, 0x18, 0xbf, 0xbb, 0xf1, 0xbe, 0xf4, 0xd6, 0x8c, 0x87, 0x0d, 0x42, 0xf7, 0x06, 0xb9, 0xf1, 0x6d, 0xed, 0x04, 0x94, 0xa8, 0xfe, 0xb6, 0xd3, 0x06, 0xc6, 0x40, 0x61, 0xdf, 0x9d, 0x9d, 0xf3, 0x54, 0x76, 0xce, 0x53, 0x3a, 0x01, 0xa6, 0x92, 0x41, 0xec, 0x04, 0xa3, 0x8f, 0x0d, 0xa2, 0xd5, 0x09, 0xca, 0xd6, 0xcb, 0x9a, 0xf1, 0xef, 0x43, 0x5d, 0xc0, 0xab, 0xa5, 0x41, 0xcf, 0x5c, 0x53, 0x70, 0x70, 0xc9, 0x88, 0xa6, 0x2d, 0xd4, 0x6b, 0x61, 0x73, 0x50, 0x26, 0x86, 0x61, 0x0e, 0x5f, 0x1b, 0xc2, 0x2b, 0xe2, 0x8c, 0xd5, 0xbb, 0x9d, 0xc1, 0x03, 0x42, 0xba, 0x94, 0xda, 0x5f, 0xa9, 0xb0, 0xca, 0xcc, 0x4d, 0x0a, 0xef, 0x47, 0x69, 0x03, 0x2f, 0x22, 0xfb, 0xf1, 0x28, 0xce, 0xbf, 0x5d, 0x50, 0x65, 0xa8, 0x90, 0x6d, 0xb3, 0x74, 0xb0, 0x08, 0xc7, 0xac, 0xa8, 0xd1, 0xeb, 0x3e, 0x9c, 0xfc, 0x5d, 0x1a, 0x83, 0x2e, 0x2b, 0xcb, 0xb5, 0xf3, 0x44, 0x9d, 0x3a, 0xa7, 0x17, 0x61, 0x96, 0xa2, 0x71, 0xd3, 0x70, 0x96, 0x15, 0x4d, 0xb7, 0x4c, 0x73, 0xee, 0x19, 0x5c, 0xc5, 0x5b, 0x3e, 0x41, 0xfe, 0xac, 0x75, 0x60, 0x3b, 0x1b, 0x63, 0xce, 0x00, 0xdd, 0xda, 0x08, 0x90, 0x62, 0xb4, 0xe5, 0x2d, 0xee, 0x48, 0xa7, 0x6b, 0x17, 0x99, 0x54, 0xbe, 0x87, 0x4a, 0xe3, 0xa9, 0x5e, 0x04, 0x4c, 0xeb, 0x10, 0x6d, 0x54, 0xd6, 0xef, 0xf1, 0xe8, 0xf2, 0x62, 0x16, 0xcb, 0x80, 0x6b, 0xed, 0x3d, 0xed, 0xf5, 0x1f, 0x30, 0xa5, 0xae, 0x4b, 0xc9, 0x13, 0xed, 0x8a, 0x01, 0x01, 0xc9, 0xb8, 0x51, 0x58, 0xc0, 0x66, 0x3a, 0xb1, 0x66, 0x4b, 0xc4, 0xd5, 0x31, 0x02, 0x62, 0xe9, 0x74, 0x84, 0x0c, 0xdb, 0x4d, 0x46, 0x2d, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xd2, 0x9f, 0x88, 0xdf, 0xa1, 0xcd, 0x2c, 0xbd, 0xec, 0xf5, 0x3b, 0x01, 0x01, 0x93, 0x33, 0x27, 0xb2, 0xeb, 0x60, 0x4b, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0c, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x32, 0xca, 0x80, 0xb3, 0x9d, 0x3d, 0x54, 0x06, 0xdd, 0xd2, 0xd2, 0x2e, 0xf0, 0xa4, 0x01, 0x21, 0x0b, 0x67, 0x48, 0xca, 0x6d, 0x8e, 0xe0, 0xc8, 0xaa, 0x0d, 0xaa, 0x8d, 0x21, 0x57, 0x8f, 0xc6, 0x3e, 0x7a, 0xca, 0xdb, 0x51, 0xd4, 0x52, 0xb3, 0xd4, 0x96, 0x84, 0xa5, 0x58, 0x60, 0x7f, 0xe5, 0x0b, 0x8e, 0x1f, 0xf5, 0xdc, 0x0a, 0x15, 0x81, 0xe5, 0x3b, 0xb6, 0xb7, 0x22, 0x2f, 0x09, 0x9c, 0x13, 0x16, 0xb1, 0x6c, 0x0c, 0x35, 0x08, 0x6d, 0xab, 0x63, 0x72, 0xed, 0xdc, 0xbe, 0xec, 0xc7, 0x57, 0xe6, 0x30, 0x20, 0x71, 0xd6, 0xd7, 0x10, 0xc1, 0x13, 0x55, 0x01, 0x8c, 0x2a, 0x43, 0xe4, 0x41, 0xf1, 0xcf, 0x3a, 0x7a, 0x53, 0x92, 0xce, 0xa2, 0x03, 0x05, 0x0d, 0x38, 0xdf, 0x02, 0xbb, 0x10, 0x2e, 0xd9, 0x3b, 0xd2, 0x9b, 0x7a, 0xc0, 0xa1, 0xa6, 0xf8, 0xb5, 0x31, 0xe6, 0xf4, 0x75, 0xc9, 0xb9, 0x53, 0x99, 0x75, 0x47, 0x22, 0x5a, 0x14, 0x15, 0xc7, 0x78, 0x1b, 0xb6, 0x9d, 0xe9, 0x0c, 0xf8, 0x1b, 0x76, 0xf1, 0x85, 0x84, 0xde, 0xa1, 0xda, 0x12, 0xef, 0xa4, 0xe2, 0x10, 0x97, 0x7a, 0x78, 0xde, 0x0c, 0x51, 0x97, 0xa8, 0x21, 0x40, 0x8b, 0x86, 0xbd, 0x0d, 0xf0, 0x5e, 0x4e, 0x4b, 0x36, 0xbb, 0x3b, 0x20, 0x1f, 0x8a, 0x42, 0x56, 0xe1, 0x0b, 0x1a, 0xbf, 0x7b, 0xd0, 0x22, 0x43, 0x2c, 0x44, 0x8c, 0xfb, 0xe5, 0x2a, 0xb4, 0x6c, 0x1c, 0x1c, 0xba, 0x94, 0xe0, 0x13, 0x7e, 0x21, 0xe6, 0x9a, 0xc2, 0xcb, 0xc5, 0x42, 0x64, 0xb4, 0x1e, 0x94, 0x7b, 0x08, 0x25, 0xc8, 0x71, 0xcc, 0x87, 0x45, 0x57, 0x85, 0xd3, 0x9f, 0x29, 0x62, 0x22, 0x83, 0x51, 0x97, 0x00, 0x18, 0x97, 0x77, 0x6a, 0x98, 0x92, 0xc9, 0x7c, 0x60, 0x6c, 0xdf, 0x6c, 0x7d, 0x4a, 0xe4, 0x70, 0x4c, 0xc2, 0x9e, 0xb8, 0x1d, 0xf7, 0xd0, 0x34, 0xc7, 0x0f, 0xcc, 0xfb, 0xa7, 0xff, 0x03, 0xbe, 0xad, 0x70, 0x90, 0xda, 0x0b, 0xdd, 0xc8, 0x6d, 0x97, 0x5f, 0x9a, 0x7f, 0x09, 0x32, 0x41, 0xfd, 0xcd, 0xa2, 0xcc, 0x5a, 0x6d, 0x4c, 0xf2, 0xaa, 0x49, 0xfe, 0x66, 0xf8, 0xe9, 0xd8, 0x35, 0xeb, 0x0e, 0x28, 0x1e, 0xee, 0x48, 0x2f, 0x3a, 0xd0, 0x79, 0x09, 0x38, 0x7c, 0xa6, 0x22, 0x82, 0x93, 0x95, 0xd0, 0x03, 0xbe, 0xbe, 0x02, 0xa0, 0x05, 0xdd, 0x20, 0x22, 0xe3, 0x6f, 0x1d, 0x88, 0x34, 0x60, 0xc6, 0xe6, 0x0a, 0xb9, 0x09, 0x75, 0x0b, 0xf0, 0x07, 0xe8, 0x69, 0x96, 0x35, 0xc7, 0xfb, 0x23, 0x81, 0x8e, 0x38, 0x39, 0xb8, 0x45, 0x2b, 0x43, 0x78, 0xa2, 0xd1, 0x2c, 0x14, 0xff, 0x0d, 0x28, 0x72, 0x72, 0x95, 0x9b, 0x5e, 0x09, 0xdb, 0x89, 0x44, 0x98, 0xaa, 0xa1, 0x49, 0xbb, 0x71, 0x52, 0xf2, 0xbf, 0xf6, 0xff, 0x27, 0xa1, 0x36, 0xaf, 0xb8, 0xb6, 0x77, 0x88, 0xdd, 0x3a, 0xa4, 0x6d, 0x9b, 0x34, 0x90, 0xdc, 0x14, 0x5d, 0x30, 0xbf, 0xb7, 0xeb, 0x17, 0xe4, 0x87, 0xb7, 0x71, 0xd0, 0xa1, 0xd7, 0x77, 0x15, 0xd4, 0x42, 0xd7, 0xf2, 0xf3, 0x31, 0x99, 0x5d, 0x9b, 0xdd, 0x16, 0x6d, 0x3f, 0xea, 0x06, 0x23, 0xf8, 0x46, 0xa2, 0x22, 0xed, 0x93, 0xf6, 0xdd, 0x9a, 0xe6, 0x2a, 0x87, 0xb1, 0x98, 0x54, 0xf1, 0x22, 0xf7, 0x6b, 0x45, 0xe3, 0xe2, 0x8e, 0x76, 0x1d, 0x9a, 0x8d, 0xc4, 0x06, 0x8d, 0x36, 0xb7, 0x14, 0xf3, 0x9d, 0x54, 0x69, 0xb7, 0x8e, 0x3c, 0xd5, 0xa4, 0x6d, 0x93, 0x81, 0xb7, 0xad, 0xf6, 0xbd, 0x64, 0x7b, 0xc2, 0xc9, 0x68, 0x39, 0xa0, 0x92, 0x9c, 0xcd, 0x34, 0x86, 0x91, 0x90, 0xfa, 0x64, 0x51, 0x9d, 0xfe, 0xfe, 0xeb, 0xa5, 0xf5, 0x75, 0xde, 0x89, 0xf7, 0x72, 0x30, 0x82, 0x05, 0x5a, 0x30, 0x82, 0x03, 0x42, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x6e, 0x47, 0xa9, 0xc6, 0x5a, 0xb3, 0xe7, 0x20, 0xc5, 0x30, 0x9a, 0x3f, 0x68, 0x52, 0xf2, 0x6f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0c, 0x05, 0x00, 0x30, 0x47, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x22, 0x30, 0x20, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x19, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x20, 0x4c, 0x4c, 0x43, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x0b, 0x47, 0x54, 0x53, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x52, 0x32, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x36, 0x30, 0x36, 0x32, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x33, 0x36, 0x30, 0x36, 0x32, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x47, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x22, 0x30, 0x20, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x19, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x20, 0x4c, 0x4c, 0x43, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x0b, 0x47, 0x54, 0x53, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x52, 0x32, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xce, 0xde, 0xfd, 0xa6, 0xfb, 0xec, 0xec, 0x14, 0x34, 0x3c, 0x07, 0x06, 0x5a, 0x6c, 0x59, 0xf7, 0x19, 0x35, 0xdd, 0xf7, 0xc1, 0x9d, 0x55, 0xaa, 0xd3, 0xcd, 0x3b, 0xa4, 0x93, 0x72, 0xef, 0x0a, 0xfa, 0x6d, 0x9d, 0xf6, 0xf0, 0x85, 0x80, 0x5b, 0xa1, 0x48, 0x52, 0x9f, 0x39, 0xc5, 0xb7, 0xee, 0x28, 0xac, 0xef, 0xcb, 0x76, 0x68, 0x14, 0xb9, 0xdf, 0xad, 0x01, 0x6c, 0x99, 0x1f, 0xc4, 0x22, 0x1d, 0x9f, 0xfe, 0x72, 0x77, 0xe0, 0x2c, 0x5b, 0xaf, 0xe4, 0x04, 0xbf, 0x4f, 0x72, 0xa0, 0x1a, 0x34, 0x98, 0xe8, 0x39, 0x68, 0xec, 0x95, 0x25, 0x7b, 0x76, 0xa1, 0xe6, 0x69, 0xb9, 0x85, 0x19, 0xbd, 0x89, 0x8c, 0xfe, 0xad, 0xed, 0x36, 0xea, 0x73, 0xbc, 0xff, 0x83, 0xe2, 0xcb, 0x7d, 0xc1, 0xd2, 0xce, 0x4a, 0xb3, 0x8d, 0x05, 0x9e, 0x8b, 0x49, 0x93, 0xdf, 0xc1, 0x5b, 0xd0, 0x6e, 0x5e, 0xf0, 0x2e, 0x30, 0x2e, 0x82, 0xfc, 0xfa, 0xbc, 0xb4, 0x17, 0x0a, 0x48, 0xe5, 0x88, 0x9b, 0xc5, 0x9b, 0x6b, 0xde, 0xb0, 0xca, 0xb4, 0x03, 0xf0, 0xda, 0xf4, 0x90, 0xb8, 0x65, 0x64, 0xf7, 0x5c, 0x4c, 0xad, 0xe8, 0x7e, 0x66, 0x5e, 0x99, 0xd7, 0xb8, 0xc2, 0x3e, 0xc8, 0xd0, 0x13, 0x9d, 0xad, 0xee, 0xe4, 0x45, 0x7b, 0x89, 0x55, 0xf7, 0x8a, 0x1f, 0x62, 0x52, 0x84, 0x12, 0xb3, 0xc2, 0x40, 0x97, 0xe3, 0x8a, 0x1f, 0x47, 0x91, 0xa6, 0x74, 0x5a, 0xd2, 0xf8, 0xb1, 0x63, 0x28, 0x10, 0xb8, 0xb3, 0x09, 0xb8, 0x56, 0x77, 0x40, 0xa2, 0x26, 0x98, 0x79, 0xc6, 0xfe, 0xdf, 0x25, 0xee, 0x3e, 0xe5, 0xa0, 0x7f, 0xd4, 0x61, 0x0f, 0x51, 0x4b, 0x3c, 0x3f, 0x8c, 0xda, 0xe1, 0x70, 0x74, 0xd8, 0xc2, 0x68, 0xa1, 0xf9, 0xc1, 0x0c, 0xe9, 0xa1, 0xe2, 0x7f, 0xbb, 0x55, 0x3c, 0x76, 0x06, 0xee, 0x6a, 0x4e, 0xcc, 0x92, 0x88, 0x30, 0x4d, 0x9a, 0xbd, 0x4f, 0x0b, 0x48, 0x9a, 0x84, 0xb5, 0x98, 0xa3, 0xd5, 0xfb, 0x73, 0xc1, 0x57, 0x61, 0xdd, 0x28, 0x56, 0x75, 0x13, 0xae, 0x87, 0x8e, 0xe7, 0x0c, 0x51, 0x09, 0x10, 0x75, 0x88, 0x4c, 0xbc, 0x8d, 0xf9, 0x7b, 0x3c, 0xd4, 0x22, 0x48, 0x1f, 0x2a, 0xdc, 0xeb, 0x6b, 0xbb, 0x44, 0xb1, 0xcb, 0x33, 0x71, 0x32, 0x46, 0xaf, 0xad, 0x4a, 0xf1, 0x8c, 0xe8, 0x74, 0x3a, 0xac, 0xe7, 0x1a, 0x22, 0x73, 0x80, 0xd2, 0x30, 0xf7, 0x25, 0x42, 0xc7, 0x22, 0x3b, 0x3b, 0x12, 0xad, 0x96, 0x2e, 0xc6, 0xc3, 0x76, 0x07, 0xaa, 0x20, 0xb7, 0x35, 0x49, 0x57, 0xe9, 0x92, 0x49, 0xe8, 0x76, 0x16, 0x72, 0x31, 0x67, 0x2b, 0x96, 0x7e, 0x8a, 0xa3, 0xc7, 0x94, 0x56, 0x22, 0xbf, 0x6a, 0x4b, 0x7e, 0x01, 0x21, 0xb2, 0x23, 0x32, 0xdf, 0xe4, 0x9a, 0x44, 0x6d, 0x59, 0x5b, 0x5d, 0xf5, 0x00, 0xa0, 0x1c, 0x9b, 0xc6, 0x78, 0x97, 0x8d, 0x90, 0xff, 0x9b, 0xc8, 0xaa, 0xb4, 0xaf, 0x11, 0x51, 0x39, 0x5e, 0xd9, 0xfb, 0x67, 0xad, 0xd5, 0x5b, 0x11, 0x9d, 0x32, 0x9a, 0x1b, 0xbd, 0xd5, 0xba, 0x5b, 0xa5, 0xc9, 0xcb, 0x25, 0x69, 0x53, 0x55, 0x27, 0x5c, 0xe0, 0xca, 0x36, 0xcb, 0x88, 0x61, 0xfb, 0x1e, 0xb7, 0xd0, 0xcb, 0xee, 0x16, 0xfb, 0xd3, 0xa6, 0x4c, 0xde, 0x92, 0xa5, 0xd4, 0xe2, 0xdf, 0xf5, 0x06, 0x54, 0xde, 0x2e, 0x9d, 0x4b, 0xb4, 0x93, 0x30, 0xaa, 0x81, 0xce, 0xdd, 0x1a, 0xdc, 0x51, 0x73, 0x0d, 0x4f, 0x70, 0xe9, 0xe5, 0xb6, 0x16, 0x21, 0x19, 0x79, 0xb2, 0xe6, 0x89, 0x0b, 0x75, 0x64, 0xca, 0xd5, 0xab, 0xbc, 0x09, 0xc1, 0x18, 0xa1, 0xff, 0xd4, 0x54, 0xa1, 0x85, 0x3c, 0xfd, 0x14, 0x24, 0x03, 0xb2, 0x87, 0xd3, 0xa4, 0xb7, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xbb, 0xff, 0xca, 0x8e, 0x23, 0x9f, 0x4f, 0x99, 0xca, 0xdb, 0xe2, 0x68, 0xa6, 0xa5, 0x15, 0x27, 0x17, 0x1e, 0xd9, 0x0e, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0c, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0xb6, 0x69, 0xf0, 0xa6, 0x77, 0xfe, 0x9e, 0xee, 0x0b, 0x81, 0xad, 0xe1, 0xc0, 0xa9, 0xc7, 0xf9, 0x35, 0x1d, 0x40, 0x82, 0xab, 0xe6, 0x04, 0xb4, 0xdf, 0xcb, 0xf7, 0x1d, 0x0f, 0x83, 0xf0, 0x7e, 0x13, 0x4d, 0x8d, 0x8c, 0xee, 0xe3, 0x33, 0x22, 0xc3, 0x39, 0xfc, 0x40, 0xdf, 0x6e, 0x41, 0x4b, 0x42, 0x53, 0xbe, 0x16, 0x88, 0xf1, 0xd2, 0x38, 0x5e, 0xc4, 0x68, 0x99, 0x1c, 0x98, 0x52, 0x93, 0x8c, 0xe7, 0x68, 0xed, 0x1b, 0x6a, 0x73, 0x7a, 0x05, 0x40, 0x4d, 0x7f, 0x65, 0x3b, 0xd6, 0x58, 0xf1, 0xce, 0x83, 0x47, 0x60, 0xe3, 0xff, 0x97, 0xa9, 0x9c, 0x60, 0x77, 0x18, 0x55, 0xb5, 0x7e, 0x08, 0x93, 0xcf, 0xd0, 0xf6, 0x3c, 0x67, 0x03, 0x15, 0x61, 0x09, 0xf9, 0x81, 0x79, 0xf5, 0xec, 0x53, 0xa4, 0x9f, 0xc9, 0x8f, 0x01, 0x8b, 0x73, 0xc4, 0x77, 0x76, 0xdc, 0x83, 0xa2, 0xf5, 0x0c, 0x49, 0x1a, 0xa8, 0x76, 0xde, 0x92, 0x9b, 0x64, 0xf8, 0xb3, 0x2c, 0xc5, 0x27, 0xd3, 0x07, 0xc0, 0x08, 0x80, 0xa4, 0x98, 0x92, 0xe3, 0x01, 0x96, 0x02, 0xaa, 0x02, 0xee, 0x8f, 0x3b, 0xc5, 0xd1, 0x6d, 0x0a, 0x33, 0x30, 0x73, 0x78, 0xb9, 0x4f, 0x54, 0x16, 0xbf, 0x0b, 0x07, 0xa1, 0xa4, 0x5c, 0xe6, 0xcb, 0xc9, 0x5c, 0x84, 0x8f, 0x0f, 0xe0, 0x15, 0x77, 0x2c, 0x7e, 0x26, 0x7e, 0xda, 0xc4, 0x4b, 0xdb, 0xa7, 0x16, 0x77, 0x07, 0xb0, 0xcd, 0x75, 0xe8, 0x72, 0x42, 0xd6, 0x95, 0x84, 0x9d, 0x86, 0x83, 0xf2, 0xe4, 0x90, 0xcd, 0x09, 0x47, 0xd4, 0x8b, 0x03, 0x70, 0xda, 0x5a, 0xc6, 0x03, 0x42, 0xf4, 0xed, 0x37, 0xa2, 0xf0, 0x1b, 0x50, 0x54, 0x4b, 0x0e, 0xd8, 0x84, 0xde, 0x19, 0x28, 0x99, 0x81, 0x47, 0xae, 0x09, 0x1b, 0x3f, 0x48, 0xd1, 0xc3, 0x6f, 0xe2, 0xb0, 0x60, 0x17, 0xf5, 0xee, 0x23, 0x02, 0xa5, 0xda, 0x00, 0x5b, 0x6d, 0x90, 0xab, 0xee, 0xa2, 0xe9, 0x1b, 0x3b, 0xe9, 0xc7, 0x44, 0x27, 0x45, 0x8e, 0x6b, 0x9f, 0xf5, 0xa4, 0x84, 0xbc, 0x77, 0xf9, 0x6b, 0x97, 0xac, 0x3e, 0x51, 0x45, 0xa2, 0x11, 0xa6, 0xcc, 0x85, 0xee, 0x0a, 0x68, 0xf2, 0x3e, 0x50, 0x38, 0x7a, 0x24, 0x62, 0x1e, 0x17, 0x20, 0x37, 0x6d, 0x6a, 0x4d, 0xb7, 0x09, 0x9b, 0xc9, 0xfc, 0xa4, 0x58, 0xf5, 0xb6, 0xfb, 0x9c, 0x4e, 0x18, 0xbb, 0x95, 0x02, 0xe7, 0xa1, 0xad, 0x9b, 0x07, 0xee, 0x36, 0x6b, 0x24, 0xd2, 0x39, 0x86, 0xc1, 0x93, 0x83, 0x50, 0xd2, 0x81, 0x46, 0xa8, 0x5f, 0x62, 0x57, 0x2c, 0xbb, 0x6c, 0x64, 0x88, 0x08, 0x6e, 0xef, 0x13, 0x54, 0x5f, 0xdd, 0x2d, 0xc4, 0x67, 0x63, 0xd3, 0xcf, 0x89, 0x37, 0xbf, 0x9d, 0x20, 0xf4, 0xfb, 0x7a, 0x83, 0x9b, 0xa0, 0x1e, 0x81, 0x00, 0x50, 0xc2, 0xe4, 0x0c, 0x22, 0x59, 0x52, 0x10, 0xed, 0x43, 0x56, 0x87, 0x00, 0xf8, 0x14, 0x52, 0xa7, 0x1d, 0x8b, 0x93, 0x8c, 0xa2, 0x4d, 0x46, 0x7f, 0x27, 0xc6, 0x71, 0x9b, 0x24, 0xde, 0xe4, 0xda, 0x86, 0x8b, 0x0d, 0x7e, 0x6b, 0x20, 0xc1, 0xc0, 0x9e, 0xe1, 0x65, 0xd8, 0x6a, 0xa3, 0xa6, 0xe8, 0x85, 0x8b, 0x3a, 0x07, 0x08, 0x1c, 0xba, 0xf5, 0x8f, 0x55, 0x9a, 0x18, 0x75, 0x7e, 0xe5, 0xec, 0x81, 0x66, 0xd1, 0x21, 0x73, 0xa1, 0x35, 0x44, 0x0b, 0x80, 0x3d, 0x5b, 0x9c, 0x5e, 0x6f, 0x2a, 0x17, 0x96, 0xd1, 0x83, 0x23, 0x88, 0x66, 0x6d, 0xe6, 0x86, 0xe2, 0x70, 0x32, 0x2f, 0x52, 0x22, 0xe7, 0xc8, 0xe7, 0x7f, 0xc4, 0x2c, 0x60, 0x5d, 0x2f, 0xc3, 0xaf, 0x9e, 0x45, 0x05, 0xc3, 0x84, 0x02, 0xb7, 0xfd, 0x2c, 0x08, 0x52, 0x4f, 0x82, 0xdd, 0xa3, 0xf0, 0xd4, 0x86, 0x09, 0x02, 0x30, 0x82, 0x02, 0x0c, 0x30, 0x82, 0x01, 0x91, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x6e, 0x47, 0xa9, 0xc7, 0x6c, 0xa9, 0x73, 0x24, 0x40, 0x89, 0x0f, 0x03, 0x55, 0xdd, 0x8d, 0x1d, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x30, 0x47, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x22, 0x30, 0x20, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x19, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x20, 0x4c, 0x4c, 0x43, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x0b, 0x47, 0x54, 0x53, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x52, 0x33, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x36, 0x30, 0x36, 0x32, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x33, 0x36, 0x30, 0x36, 0x32, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x47, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x22, 0x30, 0x20, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x19, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x20, 0x4c, 0x4c, 0x43, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x0b, 0x47, 0x54, 0x53, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x52, 0x33, 0x30, 0x76, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x22, 0x03, 0x62, 0x00, 0x04, 0x1f, 0x4f, 0x33, 0x87, 0x33, 0x29, 0x8a, 0xa1, 0x84, 0xde, 0xcb, 0xc7, 0x21, 0x58, 0x41, 0x89, 0xea, 0x56, 0x9d, 0x2b, 0x4b, 0x85, 0xc6, 0x1d, 0x4c, 0x27, 0xbc, 0x7f, 0x26, 0x51, 0x72, 0x6f, 0xe2, 0x9f, 0xd6, 0xa3, 0xca, 0xcc, 0x45, 0x14, 0x46, 0x8b, 0xad, 0xef, 0x7e, 0x86, 0x8c, 0xec, 0xb1, 0x7e, 0x2f, 0xff, 0xa9, 0x71, 0x9d, 0x18, 0x84, 0x45, 0x04, 0x41, 0x55, 0x6e, 0x2b, 0xea, 0x26, 0x7f, 0xbb, 0x90, 0x01, 0xe3, 0x4b, 0x19, 0xba, 0xe4, 0x54, 0x96, 0x45, 0x09, 0xb1, 0xd5, 0x6c, 0x91, 0x44, 0xad, 0x84, 0x13, 0x8e, 0x9a, 0x8c, 0x0d, 0x80, 0x0c, 0x32, 0xf6, 0xe0, 0x27, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xc1, 0xf1, 0x26, 0xba, 0xa0, 0x2d, 0xae, 0x85, 0x81, 0xcf, 0xd3, 0xf1, 0x2a, 0x12, 0xbd, 0xb8, 0x0a, 0x67, 0xfd, 0xbc, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x03, 0x69, 0x00, 0x30, 0x66, 0x02, 0x31, 0x00, 0x80, 0x5b, 0xa4, 0x7c, 0x23, 0xc0, 0x95, 0xa5, 0x2c, 0xdc, 0xbe, 0x89, 0x6f, 0x23, 0xb9, 0xa3, 0xdd, 0x65, 0x00, 0x52, 0x5e, 0x91, 0xac, 0xc8, 0x9d, 0x72, 0x74, 0x82, 0x53, 0x0b, 0x7d, 0xa9, 0x40, 0xbd, 0x68, 0x60, 0xc5, 0xe1, 0xb8, 0x54, 0x3b, 0xc1, 0x36, 0x17, 0x25, 0xd8, 0xc1, 0xbd, 0x02, 0x31, 0x00, 0x9e, 0x35, 0x92, 0x74, 0x85, 0x25, 0x51, 0xf5, 0x24, 0xec, 0x64, 0x52, 0x24, 0x50, 0xa5, 0x1f, 0xdb, 0xe8, 0xcb, 0xc9, 0x76, 0xec, 0xec, 0x82, 0x6e, 0xf5, 0x85, 0x18, 0x53, 0xe8, 0xb8, 0xe3, 0x9a, 0x29, 0xaa, 0x96, 0xd3, 0x83, 0x23, 0xc9, 0xa4, 0x7b, 0x61, 0xb3, 0xcc, 0x02, 0xe8, 0x5d, 0x30, 0x82, 0x02, 0x0a, 0x30, 0x82, 0x01, 0x91, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x6e, 0x47, 0xa9, 0xc8, 0x8b, 0x94, 0xb6, 0xe8, 0xbb, 0x3b, 0x2a, 0xd8, 0xa2, 0xb2, 0xc1, 0x99, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x30, 0x47, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x22, 0x30, 0x20, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x19, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x20, 0x4c, 0x4c, 0x43, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x0b, 0x47, 0x54, 0x53, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x52, 0x34, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x36, 0x30, 0x36, 0x32, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x33, 0x36, 0x30, 0x36, 0x32, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x47, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x22, 0x30, 0x20, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x19, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x20, 0x4c, 0x4c, 0x43, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x0b, 0x47, 0x54, 0x53, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x52, 0x34, 0x30, 0x76, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x22, 0x03, 0x62, 0x00, 0x04, 0xf3, 0x74, 0x73, 0xa7, 0x68, 0x8b, 0x60, 0xae, 0x43, 0xb8, 0x35, 0xc5, 0x81, 0x30, 0x7b, 0x4b, 0x49, 0x9d, 0xfb, 0xc1, 0x61, 0xce, 0xe6, 0xde, 0x46, 0xbd, 0x6b, 0xd5, 0x61, 0x18, 0x35, 0xae, 0x40, 0xdd, 0x73, 0xf7, 0x89, 0x91, 0x30, 0x5a, 0xeb, 0x3c, 0xee, 0x85, 0x7c, 0xa2, 0x40, 0x76, 0x3b, 0xa9, 0xc6, 0xb8, 0x47, 0xd8, 0x2a, 0xe7, 0x92, 0x91, 0x6a, 0x73, 0xe9, 0xb1, 0x72, 0x39, 0x9f, 0x29, 0x9f, 0xa2, 0x98, 0xd3, 0x5f, 0x5e, 0x58, 0x86, 0x65, 0x0f, 0xa1, 0x84, 0x65, 0x06, 0xd1, 0xdc, 0x8b, 0xc9, 0xc7, 0x73, 0xc8, 0x8c, 0x6a, 0x2f, 0xe5, 0xc4, 0xab, 0xd1, 0x1d, 0x8a, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x80, 0x4c, 0xd6, 0xeb, 0x74, 0xff, 0x49, 0x36, 0xa3, 0xd5, 0xd8, 0xfc, 0xb5, 0x3e, 0xc5, 0x6a, 0xf0, 0x94, 0x1d, 0x8c, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x03, 0x67, 0x00, 0x30, 0x64, 0x02, 0x30, 0x6a, 0x50, 0x52, 0x74, 0x08, 0xc4, 0x70, 0xdc, 0x9e, 0x50, 0x74, 0x21, 0xe8, 0x8d, 0x7a, 0x21, 0xc3, 0x4f, 0x96, 0x6e, 0x15, 0xd1, 0x22, 0x35, 0x61, 0x2d, 0xfa, 0x08, 0x37, 0xee, 0x19, 0x6d, 0xad, 0xdb, 0xb2, 0xcc, 0x7d, 0x07, 0x34, 0xf5, 0x60, 0x19, 0x2c, 0xb5, 0x34, 0xd9, 0x6f, 0x20, 0x02, 0x30, 0x03, 0x71, 0xb1, 0xba, 0xa3, 0x60, 0x0b, 0x86, 0xed, 0x9a, 0x08, 0x6a, 0x95, 0x68, 0x9f, 0xe2, 0xb3, 0xe1, 0x93, 0x64, 0x7c, 0x5e, 0x93, 0xa6, 0xdf, 0x79, 0x2d, 0x8d, 0x85, 0xe3, 0x94, 0xcf, 0x23, 0x5d, 0x71, 0xcc, 0xf2, 0xb0, 0x4d, 0xd6, 0xfe, 0x99, 0xc8, 0x94, 0xa9, 0x75, 0xa2, 0xe3, 0x30, 0x82, 0x05, 0x5a, 0x30, 0x82, 0x03, 0x42, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x6e, 0x47, 0xa9, 0xc5, 0x4b, 0x47, 0x0c, 0x0d, 0xec, 0x33, 0xd0, 0x89, 0xb9, 0x1c, 0xf4, 0xe1, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0c, 0x05, 0x00, 0x30, 0x47, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x22, 0x30, 0x20, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x19, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x20, 0x4c, 0x4c, 0x43, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x0b, 0x47, 0x54, 0x53, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x52, 0x31, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x36, 0x30, 0x36, 0x32, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x33, 0x36, 0x30, 0x36, 0x32, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x47, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x22, 0x30, 0x20, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x19, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x20, 0x4c, 0x4c, 0x43, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x0b, 0x47, 0x54, 0x53, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x52, 0x31, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xb6, 0x11, 0x02, 0x8b, 0x1e, 0xe3, 0xa1, 0x77, 0x9b, 0x3b, 0xdc, 0xbf, 0x94, 0x3e, 0xb7, 0x95, 0xa7, 0x40, 0x3c, 0xa1, 0xfd, 0x82, 0xf9, 0x7d, 0x32, 0x06, 0x82, 0x71, 0xf6, 0xf6, 0x8c, 0x7f, 0xfb, 0xe8, 0xdb, 0xbc, 0x6a, 0x2e, 0x97, 0x97, 0xa3, 0x8c, 0x4b, 0xf9, 0x2b, 0xf6, 0xb1, 0xf9, 0xce, 0x84, 0x1d, 0xb1, 0xf9, 0xc5, 0x97, 0xde, 0xef, 0xb9, 0xf2, 0xa3, 0xe9, 0xbc, 0x12, 0x89, 0x5e, 0xa7, 0xaa, 0x52, 0xab, 0xf8, 0x23, 0x27, 0xcb, 0xa4, 0xb1, 0x9c, 0x63, 0xdb, 0xd7, 0x99, 0x7e, 0xf0, 0x0a, 0x5e, 0xeb, 0x68, 0xa6, 0xf4, 0xc6, 0x5a, 0x47, 0x0d, 0x4d, 0x10, 0x33, 0xe3, 0x4e, 0xb1, 0x13, 0xa3, 0xc8, 0x18, 0x6c, 0x4b, 0xec, 0xfc, 0x09, 0x90, 0xdf, 0x9d, 0x64, 0x29, 0x25, 0x23, 0x07, 0xa1, 0xb4, 0xd2, 0x3d, 0x2e, 0x60, 0xe0, 0xcf, 0xd2, 0x09, 0x87, 0xbb, 0xcd, 0x48, 0xf0, 0x4d, 0xc2, 0xc2, 0x7a, 0x88, 0x8a, 0xbb, 0xba, 0xcf, 0x59, 0x19, 0xd6, 0xaf, 0x8f, 0xb0, 0x07, 0xb0, 0x9e, 0x31, 0xf1, 0x82, 0xc1, 0xc0, 0xdf, 0x2e, 0xa6, 0x6d, 0x6c, 0x19, 0x0e, 0xb5, 0xd8, 0x7e, 0x26, 0x1a, 0x45, 0x03, 0x3d, 0xb0, 0x79, 0xa4, 0x94, 0x28, 0xad, 0x0f, 0x7f, 0x26, 0xe5, 0xa8, 0x08, 0xfe, 0x96, 0xe8, 0x3c, 0x68, 0x94, 0x53, 0xee, 0x83, 0x3a, 0x88, 0x2b, 0x15, 0x96, 0x09, 0xb2, 0xe0, 0x7a, 0x8c, 0x2e, 0x75, 0xd6, 0x9c, 0xeb, 0xa7, 0x56, 0x64, 0x8f, 0x96, 0x4f, 0x68, 0xae, 0x3d, 0x97, 0xc2, 0x84, 0x8f, 0xc0, 0xbc, 0x40, 0xc0, 0x0b, 0x5c, 0xbd, 0xf6, 0x87, 0xb3, 0x35, 0x6c, 0xac, 0x18, 0x50, 0x7f, 0x84, 0xe0, 0x4c, 0xcd, 0x92, 0xd3, 0x20, 0xe9, 0x33, 0xbc, 0x52, 0x99, 0xaf, 0x32, 0xb5, 0x29, 0xb3, 0x25, 0x2a, 0xb4, 0x48, 0xf9, 0x72, 0xe1, 0xca, 0x64, 0xf7, 0xe6, 0x82, 0x10, 0x8d, 0xe8, 0x9d, 0xc2, 0x8a, 0x88, 0xfa, 0x38, 0x66, 0x8a, 0xfc, 0x63, 0xf9, 0x01, 0xf9, 0x78, 0xfd, 0x7b, 0x5c, 0x77, 0xfa, 0x76, 0x87, 0xfa, 0xec, 0xdf, 0xb1, 0x0e, 0x79, 0x95, 0x57, 0xb4, 0xbd, 0x26, 0xef, 0xd6, 0x01, 0xd1, 0xeb, 0x16, 0x0a, 0xbb, 0x8e, 0x0b, 0xb5, 0xc5, 0xc5, 0x8a, 0x55, 0xab, 0xd3, 0xac, 0xea, 0x91, 0x4b, 0x29, 0xcc, 0x19, 0xa4, 0x32, 0x25, 0x4e, 0x2a, 0xf1, 0x65, 0x44, 0xd0, 0x02, 0xce, 0xaa, 0xce, 0x49, 0xb4, 0xea, 0x9f, 0x7c, 0x83, 0xb0, 0x40, 0x7b, 0xe7, 0x43, 0xab, 0xa7, 0x6c, 0xa3, 0x8f, 0x7d, 0x89, 0x81, 0xfa, 0x4c, 0xa5, 0xff, 0xd5, 0x8e, 0xc3, 0xce, 0x4b, 0xe0, 0xb5, 0xd8, 0xb3, 0x8e, 0x45, 0xcf, 0x76, 0xc0, 0xed, 0x40, 0x2b, 0xfd, 0x53, 0x0f, 0xb0, 0xa7, 0xd5, 0x3b, 0x0d, 0xb1, 0x8a, 0xa2, 0x03, 0xde, 0x31, 0xad, 0xcc, 0x77, 0xea, 0x6f, 0x7b, 0x3e, 0xd6, 0xdf, 0x91, 0x22, 0x12, 0xe6, 0xbe, 0xfa, 0xd8, 0x32, 0xfc, 0x10, 0x63, 0x14, 0x51, 0x72, 0xde, 0x5d, 0xd6, 0x16, 0x93, 0xbd, 0x29, 0x68, 0x33, 0xef, 0x3a, 0x66, 0xec, 0x07, 0x8a, 0x26, 0xdf, 0x13, 0xd7, 0x57, 0x65, 0x78, 0x27, 0xde, 0x5e, 0x49, 0x14, 0x00, 0xa2, 0x00, 0x7f, 0x9a, 0xa8, 0x21, 0xb6, 0xa9, 0xb1, 0x95, 0xb0, 0xa5, 0xb9, 0x0d, 0x16, 0x11, 0xda, 0xc7, 0x6c, 0x48, 0x3c, 0x40, 0xe0, 0x7e, 0x0d, 0x5a, 0xcd, 0x56, 0x3c, 0xd1, 0x97, 0x05, 0xb9, 0xcb, 0x4b, 0xed, 0x39, 0x4b, 0x9c, 0xc4, 0x3f, 0xd2, 0x55, 0x13, 0x6e, 0x24, 0xb0, 0xd6, 0x71, 0xfa, 0xf4, 0xc1, 0xba, 0xcc, 0xed, 0x1b, 0xf5, 0xfe, 0x81, 0x41, 0xd8, 0x00, 0x98, 0x3d, 0x3a, 0xc8, 0xae, 0x7a, 0x98, 0x37, 0x18, 0x05, 0x95, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xe4, 0xaf, 0x2b, 0x26, 0x71, 0x1a, 0x2b, 0x48, 0x27, 0x85, 0x2f, 0x52, 0x66, 0x2c, 0xef, 0xf0, 0x89, 0x13, 0x71, 0x3e, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0c, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x38, 0x96, 0x0a, 0xee, 0x3d, 0xb4, 0x96, 0x1e, 0x5f, 0xef, 0x9d, 0x9c, 0x0b, 0x33, 0x9f, 0x2b, 0xe0, 0xca, 0xfd, 0xd2, 0x8e, 0x0a, 0x1f, 0x41, 0x74, 0xa5, 0x7c, 0xaa, 0x84, 0xd4, 0xe5, 0xf2, 0x1e, 0xe6, 0x37, 0x52, 0x32, 0x9c, 0x0b, 0xd1, 0x61, 0x1d, 0xbf, 0x28, 0xc1, 0xb6, 0x44, 0x29, 0x35, 0x75, 0x77, 0x98, 0xb2, 0x7c, 0xd9, 0xbd, 0x74, 0xac, 0x8a, 0x68, 0xe3, 0xa9, 0x31, 0x09, 0x29, 0x01, 0x60, 0x73, 0xe3, 0x47, 0x7c, 0x53, 0xa8, 0x90, 0x4a, 0x27, 0xef, 0x4b, 0xd7, 0x9f, 0x93, 0xe7, 0x82, 0x36, 0xce, 0x9a, 0x68, 0x0c, 0x82, 0xe7, 0xcf, 0xd4, 0x10, 0x16, 0x6f, 0x5f, 0x0e, 0x99, 0x5c, 0xf6, 0x1f, 0x71, 0x7d, 0xef, 0xef, 0x7b, 0x2f, 0x7e, 0xea, 0x36, 0xd6, 0x97, 0x70, 0x0b, 0x15, 0xee, 0xd7, 0x5c, 0x56, 0x6a, 0x33, 0xa5, 0xe3, 0x49, 0x38, 0x0c, 0xb8, 0x7d, 0xfb, 0x8d, 0x85, 0xa4, 0xb1, 0x59, 0x5e, 0xf4, 0x6a, 0xe1, 0xdd, 0xa1, 0xf6, 0x64, 0x44, 0xae, 0xe6, 0x51, 0x83, 0x21, 0x66, 0xc6, 0x11, 0x3e, 0xf3, 0xce, 0x47, 0xee, 0x9c, 0x28, 0x1f, 0x25, 0xda, 0xff, 0xac, 0x66, 0x95, 0xdd, 0x35, 0x0f, 0x5c, 0xef, 0x20, 0x2c, 0x62, 0xfd, 0x91, 0xba, 0xa9, 0xcc, 0xfc, 0x5a, 0x9c, 0x93, 0x81, 0x83, 0x29, 0x97, 0x4a, 0x7c, 0x5a, 0x72, 0xb4, 0x39, 0xd0, 0xb7, 0x77, 0xcb, 0x79, 0xfd, 0x69, 0x3a, 0x92, 0x37, 0xed, 0x6e, 0x38, 0x65, 0x46, 0x7e, 0xe9, 0x60, 0xbd, 0x79, 0x88, 0x97, 0x5f, 0x38, 0x12, 0xf4, 0xee, 0xaf, 0x5b, 0x82, 0xc8, 0x86, 0xd5, 0xe1, 0x99, 0x6d, 0x8c, 0x04, 0xf2, 0x76, 0xba, 0x49, 0xf6, 0x6e, 0xe9, 0x6d, 0x1e, 0x5f, 0xa0, 0xef, 0x27, 0x82, 0x76, 0x40, 0xf8, 0xa6, 0xd3, 0x58, 0x5c, 0x0f, 0x2c, 0x42, 0xda, 0x42, 0xc6, 0x7b, 0x88, 0x34, 0xc7, 0xc1, 0xd8, 0x45, 0x9b, 0xc1, 0x3e, 0xc5, 0x61, 0x1d, 0xd9, 0x63, 0x50, 0x49, 0xf6, 0x34, 0x85, 0x6a, 0xe0, 0x18, 0xc5, 0x6e, 0x47, 0xab, 0x41, 0x42, 0x29, 0x9b, 0xf6, 0x60, 0x0d, 0xd2, 0x31, 0xd3, 0x63, 0x98, 0x23, 0x93, 0x5a, 0x00, 0x81, 0x48, 0xb4, 0xef, 0xcd, 0x8a, 0xcd, 0xc9, 0xcf, 0x99, 0xee, 0xd9, 0x9e, 0xaa, 0x36, 0xe1, 0x68, 0x4b, 0x71, 0x49, 0x14, 0x36, 0x28, 0x3a, 0x3d, 0x1d, 0xce, 0x9a, 0x8f, 0x25, 0xe6, 0x80, 0x71, 0x61, 0x2b, 0xb5, 0x7b, 0xcc, 0xf9, 0x25, 0x16, 0x81, 0xe1, 0x31, 0x5f, 0xa1, 0xa3, 0x7e, 0x16, 0xa4, 0x9c, 0x16, 0x6a, 0x97, 0x18, 0xbd, 0x76, 0x72, 0xa5, 0x0b, 0x9e, 0x1d, 0x36, 0xe6, 0x2f, 0xa1, 0x2f, 0xbe, 0x70, 0x91, 0x0f, 0xa8, 0xe6, 0xda, 0xf8, 0xc4, 0x92, 0x40, 0x6c, 0x25, 0x7e, 0x7b, 0xb3, 0x09, 0xdc, 0xb2, 0x17, 0xad, 0x80, 0x44, 0xf0, 0x68, 0xa5, 0x8f, 0x94, 0x75, 0xff, 0x74, 0x5a, 0xe8, 0xa8, 0x02, 0x7c, 0x0c, 0x09, 0xe2, 0xa9, 0x4b, 0x0b, 0xa0, 0x85, 0x0b, 0x62, 0xb9, 0xef, 0xa1, 0x31, 0x92, 0xfb, 0xef, 0xf6, 0x51, 0x04, 0x89, 0x6c, 0xe8, 0xa9, 0x74, 0xa1, 0xbb, 0x17, 0xb3, 0xb5, 0xfd, 0x49, 0x0f, 0x7c, 0x3c, 0xec, 0x83, 0x18, 0x20, 0x43, 0x4e, 0xd5, 0x93, 0xba, 0xb4, 0x34, 0xb1, 0x1f, 0x16, 0x36, 0x1f, 0x0c, 0xe6, 0x64, 0x39, 0x16, 0x4c, 0xdc, 0xe0, 0xfe, 0x1d, 0xc8, 0xa9, 0x62, 0x3d, 0x40, 0xea, 0xca, 0xc5, 0x34, 0x02, 0xb4, 0xae, 0x89, 0x88, 0x33, 0x35, 0xdc, 0x2c, 0x13, 0x73, 0xd8, 0x27, 0xf1, 0xd0, 0x72, 0xee, 0x75, 0x3b, 0x22, 0xde, 0x98, 0x68, 0x66, 0x5b, 0xf1, 0xc6, 0x63, 0x47, 0x55, 0x1c, 0xba, 0xa5, 0x08, 0x51, 0x75, 0xa6, 0x48, 0x25, 0x30, 0x82, 0x05, 0x5a, 0x30, 0x82, 0x03, 0x42, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x12, 0x11, 0xd2, 0xbb, 0xb9, 0xd7, 0x23, 0x18, 0x9e, 0x40, 0x5f, 0x0a, 0x9d, 0x2d, 0xd0, 0xdf, 0x25, 0x67, 0xd1, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0c, 0x05, 0x00, 0x30, 0x46, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x42, 0x45, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x10, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x6e, 0x76, 0x2d, 0x73, 0x61, 0x31, 0x1c, 0x30, 0x1a, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x13, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x52, 0x34, 0x36, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x39, 0x30, 0x33, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x34, 0x36, 0x30, 0x33, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x46, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x42, 0x45, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x10, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x6e, 0x76, 0x2d, 0x73, 0x61, 0x31, 0x1c, 0x30, 0x1a, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x13, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x52, 0x34, 0x36, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xac, 0xac, 0x74, 0x32, 0xe8, 0xb3, 0x65, 0xe5, 0xba, 0xed, 0x43, 0x26, 0x1d, 0xa6, 0x89, 0x0d, 0x45, 0xba, 0x29, 0x88, 0xb2, 0xa4, 0x1d, 0x63, 0xdd, 0xd3, 0xc1, 0x2c, 0x09, 0x57, 0x89, 0x39, 0xa1, 0x55, 0xe9, 0x67, 0x34, 0x77, 0x0c, 0x6e, 0xe4, 0x55, 0x1d, 0x52, 0x25, 0xd2, 0x13, 0x6b, 0x5e, 0xe1, 0x1d, 0xa9, 0xb7, 0x7d, 0x89, 0x32, 0x5f, 0x0d, 0x9e, 0x9f, 0x2c, 0x7a, 0x63, 0x60, 0x40, 0x1f, 0xa6, 0xb0, 0xb6, 0x78, 0x8f, 0x99, 0x54, 0x96, 0x08, 0x58, 0xae, 0xe4, 0x06, 0xbc, 0x62, 0x05, 0x02, 0x16, 0xbf, 0xaf, 0xa8, 0x23, 0x03, 0xb6, 0x94, 0x0f, 0xbc, 0x6e, 0x6c, 0xc2, 0xcb, 0xd5, 0xa6, 0xbb, 0x0c, 0xe9, 0xf6, 0xc1, 0x02, 0xfb, 0x21, 0xde, 0x66, 0xdd, 0x17, 0xab, 0x74, 0x42, 0xef, 0xf0, 0x74, 0x2f, 0x25, 0xf4, 0xea, 0x6b, 0x55, 0x5b, 0x90, 0xdb, 0x9d, 0xdf, 0x5e, 0x87, 0x0a, 0x40, 0xfb, 0xad, 0x19, 0x6b, 0xfb, 0xf7, 0xca, 0x60, 0x88, 0xde, 0xda, 0xc1, 0x8f, 0xd6, 0xae, 0xd5, 0x7f, 0xd4, 0x3c, 0x83, 0xee, 0xd7, 0x16, 0x4c, 0x83, 0x45, 0x33, 0x6b, 0x27, 0xd0, 0x86, 0xd0, 0x1c, 0x2d, 0x6b, 0xf3, 0xab, 0x7d, 0xf1, 0x85, 0xa9, 0xf5, 0x28, 0xd2, 0xad, 0xef, 0xf3, 0x84, 0x4b, 0x1c, 0x87, 0xfc, 0x13, 0xa3, 0x3a, 0x72, 0xa2, 0x5a, 0x11, 0x2b, 0xd6, 0x27, 0x71, 0x27, 0xed, 0x81, 0x2d, 0x6d, 0x66, 0x81, 0x92, 0x87, 0xb4, 0x1b, 0x58, 0x7a, 0xcc, 0x3f, 0x0a, 0xfa, 0x46, 0x4f, 0x4d, 0x78, 0x5c, 0xf8, 0x2b, 0x48, 0xe3, 0x04, 0x84, 0xcb, 0x5d, 0xf6, 0xb4, 0x6a, 0xb3, 0x65, 0xfc, 0x42, 0x9e, 0x51, 0x26, 0x23, 0x20, 0xcb, 0x3d, 0x14, 0xf9, 0x81, 0xed, 0x65, 0x16, 0x00, 0x4f, 0x1a, 0x64, 0x97, 0x66, 0x08, 0xcf, 0x8c, 0x7b, 0xe3, 0x2b, 0xc0, 0x9d, 0xf9, 0x14, 0xf2, 0x1b, 0xf1, 0x56, 0x6a, 0x16, 0xbf, 0x2c, 0x85, 0x85, 0xcd, 0x78, 0x38, 0x9a, 0xeb, 0x42, 0x6a, 0x02, 0x34, 0x18, 0x83, 0x17, 0x4e, 0x94, 0x56, 0xf8, 0xb6, 0x82, 0xb5, 0xf3, 0x96, 0xdd, 0x3d, 0xf3, 0xbe, 0x7f, 0x20, 0x77, 0x3e, 0x7b, 0x19, 0x23, 0x6b, 0x2c, 0xd4, 0x72, 0x73, 0x43, 0x57, 0x7d, 0xe0, 0xf8, 0xd7, 0x69, 0x4f, 0x17, 0x36, 0x04, 0xf9, 0xc0, 0x90, 0x60, 0x37, 0x45, 0xde, 0xe6, 0x0c, 0xd8, 0x74, 0x8d, 0xae, 0x9c, 0xa2, 0x6d, 0x74, 0x5d, 0x42, 0xbe, 0x06, 0xf5, 0xd9, 0x64, 0x6e, 0x02, 0x10, 0xac, 0x89, 0xb0, 0x4c, 0x3b, 0x07, 0x4d, 0x40, 0x7e, 0x24, 0xc5, 0x8a, 0x98, 0x82, 0x79, 0x8e, 0xa4, 0xa7, 0x82, 0x20, 0x8d, 0x23, 0xfa, 0x27, 0x71, 0xc9, 0xdf, 0xc6, 0x41, 0x74, 0xa0, 0x4d, 0xf6, 0x91, 0x16, 0xdc, 0x46, 0x8c, 0x5f, 0x29, 0x63, 0x31, 0x59, 0x71, 0x0c, 0xd8, 0x6f, 0xc2, 0xb6, 0x32, 0x7d, 0xfb, 0xe6, 0x5d, 0x53, 0xa6, 0x7e, 0x15, 0xfc, 0xbb, 0x75, 0x7c, 0x5d, 0xec, 0xf8, 0xf6, 0x17, 0x1c, 0xec, 0xc7, 0x6b, 0x19, 0xcb, 0xf3, 0x7b, 0xf0, 0x2b, 0x07, 0xa5, 0xd9, 0x6c, 0x79, 0x54, 0x76, 0x6c, 0x9d, 0x1c, 0xa6, 0x6e, 0x0e, 0xe9, 0x79, 0x0c, 0xa8, 0x23, 0x6a, 0xa3, 0xdf, 0x1b, 0x30, 0x31, 0x9f, 0xb1, 0x54, 0x7b, 0xfe, 0x6a, 0xcb, 0x66, 0xaa, 0xdc, 0x65, 0xd0, 0xa2, 0x9e, 0x4a, 0x9a, 0x07, 0x21, 0x6b, 0x81, 0x8f, 0xdb, 0xc4, 0x59, 0xfa, 0xde, 0x22, 0xc0, 0x04, 0x9c, 0xe3, 0xaa, 0x5b, 0x36, 0x93, 0xe8, 0x3d, 0xbd, 0x7a, 0xa1, 0x9d, 0x0b, 0x76, 0xb1, 0x0b, 0xc7, 0x9d, 0xfd, 0xcf, 0x98, 0xa8, 0x06, 0xc2, 0xf8, 0x2a, 0xa3, 0xa1, 0x83, 0xa0, 0xb7, 0x25, 0x72, 0xa5, 0x02, 0xe3, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x03, 0x5c, 0xab, 0x73, 0x81, 0x87, 0xa8, 0xcc, 0xb0, 0xa6, 0xd5, 0x94, 0xe2, 0x36, 0x96, 0x49, 0xff, 0x05, 0x99, 0x2c, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0c, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x7c, 0x78, 0xec, 0xf6, 0x02, 0x2c, 0xbb, 0x5b, 0x7e, 0x92, 0x2b, 0x5d, 0x39, 0xdc, 0xbe, 0xd8, 0x1d, 0xa2, 0x42, 0x33, 0x4d, 0xf9, 0xef, 0xa4, 0x2a, 0x3b, 0x44, 0x69, 0x1e, 0xac, 0xd9, 0x45, 0xa3, 0x4e, 0x3c, 0xa7, 0xd8, 0x24, 0x51, 0xb2, 0x54, 0x1c, 0x93, 0x4e, 0xc4, 0xef, 0x7b, 0x93, 0x85, 0x60, 0x26, 0xea, 0x09, 0x48, 0xe0, 0xf5, 0xbb, 0xc7, 0xe9, 0x68, 0xd2, 0xbb, 0x6a, 0x31, 0x71, 0xcc, 0x79, 0xae, 0x11, 0xa8, 0xf0, 0x99, 0xfd, 0xe5, 0x1f, 0xbc, 0x2f, 0xa8, 0xcc, 0x57, 0xeb, 0x76, 0xc4, 0x21, 0xa6, 0x47, 0x53, 0x55, 0x4d, 0x68, 0xbf, 0x05, 0xa4, 0xee, 0xd7, 0x26, 0xab, 0x62, 0xda, 0x43, 0x37, 0x4b, 0xe2, 0xc6, 0xb5, 0xe5, 0xb2, 0x83, 0x19, 0x3a, 0xc7, 0xd3, 0xdb, 0x4d, 0x9e, 0x08, 0x7a, 0xf3, 0xee, 0xcf, 0x3e, 0x62, 0xfb, 0xac, 0xe8, 0x60, 0xcc, 0xd1, 0xc7, 0xa1, 0x5c, 0x83, 0x45, 0xc4, 0x45, 0xcc, 0xf3, 0x17, 0x6b, 0x14, 0xc9, 0x04, 0x02, 0x3e, 0xd2, 0x24, 0xa6, 0x79, 0xe9, 0x1e, 0xce, 0xa2, 0xe7, 0xc1, 0x59, 0x15, 0x9f, 0x1d, 0xe2, 0x4b, 0x9a, 0x3e, 0x9f, 0x76, 0x08, 0x2d, 0x6b, 0xd8, 0xba, 0x57, 0x14, 0xda, 0x83, 0xea, 0xfe, 0x8c, 0x55, 0xe9, 0xd0, 0x4e, 0xa9, 0xcc, 0x77, 0x31, 0xb1, 0x44, 0x11, 0x7a, 0x5c, 0xb1, 0x3e, 0xd3, 0x14, 0x45, 0x15, 0x18, 0x62, 0x24, 0x13, 0xd2, 0xcb, 0x4d, 0xce, 0x5c, 0x83, 0xc1, 0x36, 0xf2, 0x10, 0xb5, 0x0e, 0x88, 0x6d, 0xb8, 0xe1, 0x56, 0x9f, 0x89, 0xde, 0x96, 0x66, 0x39, 0x47, 0x64, 0x2c, 0x6e, 0x4d, 0xae, 0x62, 0x7b, 0xbf, 0x60, 0x74, 0x19, 0xb8, 0x56, 0xac, 0x92, 0xac, 0x16, 0x32, 0xed, 0xad, 0x68, 0x55, 0xfe, 0x98, 0xba, 0xd3, 0x34, 0xde, 0xf4, 0xc9, 0x61, 0xc3, 0x0e, 0x86, 0xf6, 0x4b, 0x84, 0x60, 0xee, 0x0d, 0x7b, 0xb5, 0x32, 0x58, 0x79, 0x91, 0x55, 0x2c, 0x81, 0x43, 0xb3, 0x74, 0x1f, 0x7a, 0xaa, 0x25, 0x9e, 0x1d, 0xd7, 0xa1, 0x8b, 0xb9, 0xcd, 0x42, 0x2e, 0x04, 0xa4, 0x66, 0x83, 0x4d, 0x89, 0x35, 0xb6, 0x6c, 0xa8, 0x36, 0x4a, 0x79, 0x21, 0x78, 0x22, 0xd0, 0x42, 0xbc, 0xd1, 0x40, 0x31, 0x90, 0xa1, 0xbe, 0x04, 0xcf, 0xca, 0x67, 0xed, 0xf5, 0xf0, 0x80, 0xd3, 0x60, 0xc9, 0x83, 0x2a, 0x22, 0x05, 0xd0, 0x07, 0x3b, 0x52, 0xbf, 0x0c, 0x9e, 0xaa, 0x2b, 0xf9, 0xbb, 0xe6, 0x1f, 0x8f, 0x25, 0xba, 0x85, 0x8d, 0x17, 0x1e, 0x02, 0xfe, 0x5d, 0x50, 0x04, 0x57, 0xcf, 0xfe, 0x2d, 0xbc, 0xef, 0x5c, 0xc0, 0x1a, 0xab, 0xb6, 0x9f, 0x24, 0xc6, 0xdf, 0x73, 0x68, 0x48, 0x90, 0x2c, 0x14, 0xf4, 0x3f, 0x52, 0x1a, 0xe4, 0xd2, 0xcb, 0x14, 0xc3, 0x61, 0x69, 0xcf, 0xe2, 0xf9, 0x18, 0xc5, 0xba, 0x33, 0x9f, 0x14, 0xa3, 0x04, 0x5d, 0xb9, 0x71, 0xf7, 0xb5, 0x94, 0xd8, 0xf6, 0x33, 0xc1, 0x5a, 0xc1, 0x34, 0x8b, 0x7c, 0x9b, 0xdd, 0x93, 0x3a, 0xe7, 0x13, 0xa2, 0x70, 0x61, 0x9f, 0xaf, 0x8f, 0xeb, 0xd8, 0xc5, 0x75, 0xf8, 0x33, 0x66, 0xd4, 0x74, 0x67, 0x3a, 0x37, 0x77, 0x9c, 0xe7, 0xdd, 0xa4, 0x0f, 0x76, 0x43, 0x66, 0x8a, 0x43, 0xf2, 0x9f, 0xfb, 0x0c, 0x42, 0x78, 0x63, 0xd1, 0xe2, 0x0f, 0x6f, 0x7b, 0xd4, 0xa1, 0x3d, 0x74, 0x97, 0x85, 0xb7, 0x48, 0x39, 0x41, 0xd6, 0x20, 0xfc, 0xd0, 0x3a, 0xb3, 0xfa, 0xe8, 0x6f, 0xc4, 0x8a, 0xba, 0x71, 0x37, 0xbe, 0x8b, 0x97, 0xb1, 0x78, 0x31, 0x4f, 0xb3, 0xe7, 0xb6, 0x03, 0x13, 0xce, 0x54, 0x9d, 0xae, 0x25, 0x59, 0xcc, 0x7f, 0x35, 0x5f, 0x08, 0xf7, 0x40, 0x45, 0x31, 0x78, 0x2a, 0x7a, 0x30, 0x82, 0x02, 0x0b, 0x30, 0x82, 0x01, 0x91, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x12, 0x11, 0xd2, 0xbb, 0xba, 0x33, 0x6e, 0xd4, 0xbc, 0xe6, 0x24, 0x68, 0xc5, 0x0d, 0x84, 0x1d, 0x98, 0xe8, 0x43, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x30, 0x46, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x42, 0x45, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x10, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x6e, 0x76, 0x2d, 0x73, 0x61, 0x31, 0x1c, 0x30, 0x1a, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x13, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x45, 0x34, 0x36, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x39, 0x30, 0x33, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x34, 0x36, 0x30, 0x33, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x46, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x42, 0x45, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x10, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x6e, 0x76, 0x2d, 0x73, 0x61, 0x31, 0x1c, 0x30, 0x1a, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x13, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x45, 0x34, 0x36, 0x30, 0x76, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x22, 0x03, 0x62, 0x00, 0x04, 0x9c, 0x0e, 0xb1, 0xcf, 0xb7, 0xe8, 0x9e, 0x52, 0x77, 0x75, 0x34, 0xfa, 0xa5, 0x46, 0xa7, 0xad, 0x32, 0x19, 0x32, 0xb4, 0x07, 0xa9, 0x27, 0xca, 0x94, 0xbb, 0x0c, 0xd2, 0x0a, 0x10, 0xc7, 0xda, 0x89, 0xb0, 0x97, 0x0c, 0x70, 0x13, 0x09, 0x01, 0x8e, 0xd8, 0xea, 0x47, 0xea, 0xbe, 0xb2, 0x80, 0x2b, 0xcd, 0xfc, 0x28, 0x0d, 0xdb, 0xac, 0xbc, 0xa4, 0x86, 0x37, 0xed, 0x70, 0x08, 0x00, 0x75, 0xea, 0x93, 0x0b, 0x7b, 0x2e, 0x52, 0x9c, 0x23, 0x68, 0x23, 0x06, 0x43, 0xec, 0x92, 0x2f, 0x53, 0x84, 0xdb, 0xfb, 0x47, 0x14, 0x07, 0xe8, 0x5f, 0x94, 0x67, 0x5d, 0xc9, 0x7a, 0x81, 0x3c, 0x20, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x31, 0x0a, 0x90, 0x8f, 0xb6, 0xc6, 0x9d, 0xd2, 0x44, 0x4b, 0x80, 0xb5, 0xa2, 0xe6, 0x1f, 0xb1, 0x12, 0x4f, 0x1b, 0x95, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x03, 0x68, 0x00, 0x30, 0x65, 0x02, 0x31, 0x00, 0xdf, 0x54, 0x90, 0xed, 0x9b, 0xef, 0x8b, 0x94, 0x02, 0x93, 0x17, 0x82, 0x99, 0xbe, 0xb3, 0x9e, 0x2c, 0xf6, 0x0b, 0x91, 0x8c, 0x9f, 0x4a, 0x14, 0xb1, 0xf6, 0x64, 0xbc, 0xbb, 0x68, 0x51, 0x13, 0x0c, 0x03, 0xf7, 0x15, 0x8b, 0x84, 0x60, 0xb9, 0x8b, 0xff, 0x52, 0x8e, 0xe7, 0x8c, 0xbc, 0x1c, 0x02, 0x30, 0x3c, 0xf9, 0x11, 0xd4, 0x8c, 0x4e, 0xc0, 0xc1, 0x61, 0xc2, 0x15, 0x4c, 0xaa, 0xab, 0x1d, 0x0b, 0x31, 0x5f, 0x3b, 0x1c, 0xe2, 0x00, 0x97, 0x44, 0x31, 0xe6, 0xfe, 0x73, 0x96, 0x2f, 0xda, 0x96, 0xd3, 0xfe, 0x08, 0x07, 0xb3, 0x34, 0x89, 0xbc, 0x05, 0x9f, 0xf7, 0x1e, 0x86, 0xee, 0x8b, 0x70, 0x30, 0x82, 0x03, 0xba, 0x30, 0x82, 0x02, 0xa2, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0b, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x86, 0x26, 0xe6, 0x0d, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x4c, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x17, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x2d, 0x20, 0x52, 0x32, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0a, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x0a, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x36, 0x31, 0x32, 0x31, 0x35, 0x30, 0x38, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x32, 0x31, 0x31, 0x32, 0x31, 0x35, 0x30, 0x38, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x4c, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x17, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x2d, 0x20, 0x52, 0x32, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0a, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x0a, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xa6, 0xcf, 0x24, 0x0e, 0xbe, 0x2e, 0x6f, 0x28, 0x99, 0x45, 0x42, 0xc4, 0xab, 0x3e, 0x21, 0x54, 0x9b, 0x0b, 0xd3, 0x7f, 0x84, 0x70, 0xfa, 0x12, 0xb3, 0xcb, 0xbf, 0x87, 0x5f, 0xc6, 0x7f, 0x86, 0xd3, 0xb2, 0x30, 0x5c, 0xd6, 0xfd, 0xad, 0xf1, 0x7b, 0xdc, 0xe5, 0xf8, 0x60, 0x96, 0x09, 0x92, 0x10, 0xf5, 0xd0, 0x53, 0xde, 0xfb, 0x7b, 0x7e, 0x73, 0x88, 0xac, 0x52, 0x88, 0x7b, 0x4a, 0xa6, 0xca, 0x49, 0xa6, 0x5e, 0xa8, 0xa7, 0x8c, 0x5a, 0x11, 0xbc, 0x7a, 0x82, 0xeb, 0xbe, 0x8c, 0xe9, 0xb3, 0xac, 0x96, 0x25, 0x07, 0x97, 0x4a, 0x99, 0x2a, 0x07, 0x2f, 0xb4, 0x1e, 0x77, 0xbf, 0x8a, 0x0f, 0xb5, 0x02, 0x7c, 0x1b, 0x96, 0xb8, 0xc5, 0xb9, 0x3a, 0x2c, 0xbc, 0xd6, 0x12, 0xb9, 0xeb, 0x59, 0x7d, 0xe2, 0xd0, 0x06, 0x86, 0x5f, 0x5e, 0x49, 0x6a, 0xb5, 0x39, 0x5e, 0x88, 0x34, 0xec, 0xbc, 0x78, 0x0c, 0x08, 0x98, 0x84, 0x6c, 0xa8, 0xcd, 0x4b, 0xb4, 0xa0, 0x7d, 0x0c, 0x79, 0x4d, 0xf0, 0xb8, 0x2d, 0xcb, 0x21, 0xca, 0xd5, 0x6c, 0x5b, 0x7d, 0xe1, 0xa0, 0x29, 0x84, 0xa1, 0xf9, 0xd3, 0x94, 0x49, 0xcb, 0x24, 0x62, 0x91, 0x20, 0xbc, 0xdd, 0x0b, 0xd5, 0xd9, 0xcc, 0xf9, 0xea, 0x27, 0x0a, 0x2b, 0x73, 0x91, 0xc6, 0x9d, 0x1b, 0xac, 0xc8, 0xcb, 0xe8, 0xe0, 0xa0, 0xf4, 0x2f, 0x90, 0x8b, 0x4d, 0xfb, 0xb0, 0x36, 0x1b, 0xf6, 0x19, 0x7a, 0x85, 0xe0, 0x6d, 0xf2, 0x61, 0x13, 0x88, 0x5c, 0x9f, 0xe0, 0x93, 0x0a, 0x51, 0x97, 0x8a, 0x5a, 0xce, 0xaf, 0xab, 0xd5, 0xf7, 0xaa, 0x09, 0xaa, 0x60, 0xbd, 0xdc, 0xd9, 0x5f, 0xdf, 0x72, 0xa9, 0x60, 0x13, 0x5e, 0x00, 0x01, 0xc9, 0x4a, 0xfa, 0x3f, 0xa4, 0xea, 0x07, 0x03, 0x21, 0x02, 0x8e, 0x82, 0xca, 0x03, 0xc2, 0x9b, 0x8f, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x81, 0x9c, 0x30, 0x81, 0x99, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x9b, 0xe2, 0x07, 0x57, 0x67, 0x1c, 0x1e, 0xc0, 0x6a, 0x06, 0xde, 0x59, 0xb4, 0x9a, 0x2d, 0xdf, 0xdc, 0x19, 0x86, 0x2e, 0x30, 0x36, 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04, 0x2f, 0x30, 0x2d, 0x30, 0x2b, 0xa0, 0x29, 0xa0, 0x27, 0x86, 0x25, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, 0x72, 0x6c, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x73, 0x69, 0x67, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x2f, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x72, 0x32, 0x2e, 0x63, 0x72, 0x6c, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x9b, 0xe2, 0x07, 0x57, 0x67, 0x1c, 0x1e, 0xc0, 0x6a, 0x06, 0xde, 0x59, 0xb4, 0x9a, 0x2d, 0xdf, 0xdc, 0x19, 0x86, 0x2e, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x99, 0x81, 0x53, 0x87, 0x1c, 0x68, 0x97, 0x86, 0x91, 0xec, 0xe0, 0x4a, 0xb8, 0x44, 0x0b, 0xab, 0x81, 0xac, 0x27, 0x4f, 0xd6, 0xc1, 0xb8, 0x1c, 0x43, 0x78, 0xb3, 0x0c, 0x9a, 0xfc, 0xea, 0x2c, 0x3c, 0x6e, 0x61, 0x1b, 0x4d, 0x4b, 0x29, 0xf5, 0x9f, 0x05, 0x1d, 0x26, 0xc1, 0xb8, 0xe9, 0x83, 0x00, 0x62, 0x45, 0xb6, 0xa9, 0x08, 0x93, 0xb9, 0xa9, 0x33, 0x4b, 0x18, 0x9a, 0xc2, 0xf8, 0x87, 0x88, 0x4e, 0xdb, 0xdd, 0x71, 0x34, 0x1a, 0xc1, 0x54, 0xda, 0x46, 0x3f, 0xe0, 0xd3, 0x2a, 0xab, 0x6d, 0x54, 0x22, 0xf5, 0x3a, 0x62, 0xcd, 0x20, 0x6f, 0xba, 0x29, 0x89, 0xd7, 0xdd, 0x91, 0xee, 0xd3, 0x5c, 0xa2, 0x3e, 0xa1, 0x5b, 0x41, 0xf5, 0xdf, 0xe5, 0x64, 0x43, 0x2d, 0xe9, 0xd5, 0x39, 0xab, 0xd2, 0xa2, 0xdf, 0xb7, 0x8b, 0xd0, 0xc0, 0x80, 0x19, 0x1c, 0x45, 0xc0, 0x2d, 0x8c, 0xe8, 0xf8, 0x2d, 0xa4, 0x74, 0x56, 0x49, 0xc5, 0x05, 0xb5, 0x4f, 0x15, 0xde, 0x6e, 0x44, 0x78, 0x39, 0x87, 0xa8, 0x7e, 0xbb, 0xf3, 0x79, 0x18, 0x91, 0xbb, 0xf4, 0x6f, 0x9d, 0xc1, 0xf0, 0x8c, 0x35, 0x8c, 0x5d, 0x01, 0xfb, 0xc3, 0x6d, 0xb9, 0xef, 0x44, 0x6d, 0x79, 0x46, 0x31, 0x7e, 0x0a, 0xfe, 0xa9, 0x82, 0xc1, 0xff, 0xef, 0xab, 0x6e, 0x20, 0xc4, 0x50, 0xc9, 0x5f, 0x9d, 0x4d, 0x9b, 0x17, 0x8c, 0x0c, 0xe5, 0x01, 0xc9, 0xa0, 0x41, 0x6a, 0x73, 0x53, 0xfa, 0xa5, 0x50, 0xb4, 0x6e, 0x25, 0x0f, 0xfb, 0x4c, 0x18, 0xf4, 0xfd, 0x52, 0xd9, 0x8e, 0x69, 0xb1, 0xe8, 0x11, 0x0f, 0xde, 0x88, 0xd8, 0xfb, 0x1d, 0x49, 0xf7, 0xaa, 0xde, 0x95, 0xcf, 0x20, 0x78, 0xc2, 0x60, 0x12, 0xdb, 0x25, 0x40, 0x8c, 0x6a, 0xfc, 0x7e, 0x42, 0x38, 0x40, 0x64, 0x12, 0xf7, 0x9e, 0x81, 0xe1, 0x93, 0x2e, 0x30, 0x82, 0x03, 0x5f, 0x30, 0x82, 0x02, 0x47, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0b, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x21, 0x58, 0x53, 0x08, 0xa2, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x4c, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x17, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x2d, 0x20, 0x52, 0x33, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0a, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x0a, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x39, 0x30, 0x33, 0x31, 0x38, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x32, 0x39, 0x30, 0x33, 0x31, 0x38, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x4c, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x17, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x2d, 0x20, 0x52, 0x33, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0a, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x0a, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xcc, 0x25, 0x76, 0x90, 0x79, 0x06, 0x78, 0x22, 0x16, 0xf5, 0xc0, 0x83, 0xb6, 0x84, 0xca, 0x28, 0x9e, 0xfd, 0x05, 0x76, 0x11, 0xc5, 0xad, 0x88, 0x72, 0xfc, 0x46, 0x02, 0x43, 0xc7, 0xb2, 0x8a, 0x9d, 0x04, 0x5f, 0x24, 0xcb, 0x2e, 0x4b, 0xe1, 0x60, 0x82, 0x46, 0xe1, 0x52, 0xab, 0x0c, 0x81, 0x47, 0x70, 0x6c, 0xdd, 0x64, 0xd1, 0xeb, 0xf5, 0x2c, 0xa3, 0x0f, 0x82, 0x3d, 0x0c, 0x2b, 0xae, 0x97, 0xd7, 0xb6, 0x14, 0x86, 0x10, 0x79, 0xbb, 0x3b, 0x13, 0x80, 0x77, 0x8c, 0x08, 0xe1, 0x49, 0xd2, 0x6a, 0x62, 0x2f, 0x1f, 0x5e, 0xfa, 0x96, 0x68, 0xdf, 0x89, 0x27, 0x95, 0x38, 0x9f, 0x06, 0xd7, 0x3e, 0xc9, 0xcb, 0x26, 0x59, 0x0d, 0x73, 0xde, 0xb0, 0xc8, 0xe9, 0x26, 0x0e, 0x83, 0x15, 0xc6, 0xef, 0x5b, 0x8b, 0xd2, 0x04, 0x60, 0xca, 0x49, 0xa6, 0x28, 0xf6, 0x69, 0x3b, 0xf6, 0xcb, 0xc8, 0x28, 0x91, 0xe5, 0x9d, 0x8a, 0x61, 0x57, 0x37, 0xac, 0x74, 0x14, 0xdc, 0x74, 0xe0, 0x3a, 0xee, 0x72, 0x2f, 0x2e, 0x9c, 0xfb, 0xd0, 0xbb, 0xbf, 0xf5, 0x3d, 0x00, 0xe1, 0x06, 0x33, 0xe8, 0x82, 0x2b, 0xae, 0x53, 0xa6, 0x3a, 0x16, 0x73, 0x8c, 0xdd, 0x41, 0x0e, 0x20, 0x3a, 0xc0, 0xb4, 0xa7, 0xa1, 0xe9, 0xb2, 0x4f, 0x90, 0x2e, 0x32, 0x60, 0xe9, 0x57, 0xcb, 0xb9, 0x04, 0x92, 0x68, 0x68, 0xe5, 0x38, 0x26, 0x60, 0x75, 0xb2, 0x9f, 0x77, 0xff, 0x91, 0x14, 0xef, 0xae, 0x20, 0x49, 0xfc, 0xad, 0x40, 0x15, 0x48, 0xd1, 0x02, 0x31, 0x61, 0x19, 0x5e, 0xb8, 0x97, 0xef, 0xad, 0x77, 0xb7, 0x64, 0x9a, 0x7a, 0xbf, 0x5f, 0xc1, 0x13, 0xef, 0x9b, 0x62, 0xfb, 0x0d, 0x6c, 0xe0, 0x54, 0x69, 0x16, 0xa9, 0x03, 0xda, 0x6e, 0xe9, 0x83, 0x93, 0x71, 0x76, 0xc6, 0x69, 0x85, 0x82, 0x17, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x8f, 0xf0, 0x4b, 0x7f, 0xa8, 0x2e, 0x45, 0x24, 0xae, 0x4d, 0x50, 0xfa, 0x63, 0x9a, 0x8b, 0xde, 0xe2, 0xdd, 0x1b, 0xbc, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x4b, 0x40, 0xdb, 0xc0, 0x50, 0xaa, 0xfe, 0xc8, 0x0c, 0xef, 0xf7, 0x96, 0x54, 0x45, 0x49, 0xbb, 0x96, 0x00, 0x09, 0x41, 0xac, 0xb3, 0x13, 0x86, 0x86, 0x28, 0x07, 0x33, 0xca, 0x6b, 0xe6, 0x74, 0xb9, 0xba, 0x00, 0x2d, 0xae, 0xa4, 0x0a, 0xd3, 0xf5, 0xf1, 0xf1, 0x0f, 0x8a, 0xbf, 0x73, 0x67, 0x4a, 0x83, 0xc7, 0x44, 0x7b, 0x78, 0xe0, 0xaf, 0x6e, 0x6c, 0x6f, 0x03, 0x29, 0x8e, 0x33, 0x39, 0x45, 0xc3, 0x8e, 0xe4, 0xb9, 0x57, 0x6c, 0xaa, 0xfc, 0x12, 0x96, 0xec, 0x53, 0xc6, 0x2d, 0xe4, 0x24, 0x6c, 0xb9, 0x94, 0x63, 0xfb, 0xdc, 0x53, 0x68, 0x67, 0x56, 0x3e, 0x83, 0xb8, 0xcf, 0x35, 0x21, 0xc3, 0xc9, 0x68, 0xfe, 0xce, 0xda, 0xc2, 0x53, 0xaa, 0xcc, 0x90, 0x8a, 0xe9, 0xf0, 0x5d, 0x46, 0x8c, 0x95, 0xdd, 0x7a, 0x58, 0x28, 0x1a, 0x2f, 0x1d, 0xde, 0xcd, 0x00, 0x37, 0x41, 0x8f, 0xed, 0x44, 0x6d, 0xd7, 0x53, 0x28, 0x97, 0x7e, 0xf3, 0x67, 0x04, 0x1e, 0x15, 0xd7, 0x8a, 0x96, 0xb4, 0xd3, 0xde, 0x4c, 0x27, 0xa4, 0x4c, 0x1b, 0x73, 0x73, 0x76, 0xf4, 0x17, 0x99, 0xc2, 0x1f, 0x7a, 0x0e, 0xe3, 0x2d, 0x08, 0xad, 0x0a, 0x1c, 0x2c, 0xff, 0x3c, 0xab, 0x55, 0x0e, 0x0f, 0x91, 0x7e, 0x36, 0xeb, 0xc3, 0x57, 0x49, 0xbe, 0xe1, 0x2e, 0x2d, 0x7c, 0x60, 0x8b, 0xc3, 0x41, 0x51, 0x13, 0x23, 0x9d, 0xce, 0xf7, 0x32, 0x6b, 0x94, 0x01, 0xa8, 0x99, 0xe7, 0x2c, 0x33, 0x1f, 0x3a, 0x3b, 0x25, 0xd2, 0x86, 0x40, 0xce, 0x3b, 0x2c, 0x86, 0x78, 0xc9, 0x61, 0x2f, 0x14, 0xba, 0xee, 0xdb, 0x55, 0x6f, 0xdf, 0x84, 0xee, 0x05, 0x09, 0x4d, 0xbd, 0x28, 0xd8, 0x72, 0xce, 0xd3, 0x62, 0x50, 0x65, 0x1e, 0xeb, 0x92, 0x97, 0x83, 0x31, 0xd9, 0xb3, 0xb5, 0xca, 0x47, 0x58, 0x3f, 0x5f, 0x30, 0x82, 0x03, 0x75, 0x30, 0x82, 0x02, 0x5d, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0b, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x15, 0x4b, 0x5a, 0xc3, 0x94, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x57, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x42, 0x45, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x10, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x6e, 0x76, 0x2d, 0x73, 0x61, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x07, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x12, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x39, 0x38, 0x30, 0x39, 0x30, 0x31, 0x31, 0x32, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x32, 0x38, 0x30, 0x31, 0x32, 0x38, 0x31, 0x32, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x57, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x42, 0x45, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x10, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x6e, 0x76, 0x2d, 0x73, 0x61, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x07, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x12, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xda, 0x0e, 0xe6, 0x99, 0x8d, 0xce, 0xa3, 0xe3, 0x4f, 0x8a, 0x7e, 0xfb, 0xf1, 0x8b, 0x83, 0x25, 0x6b, 0xea, 0x48, 0x1f, 0xf1, 0x2a, 0xb0, 0xb9, 0x95, 0x11, 0x04, 0xbd, 0xf0, 0x63, 0xd1, 0xe2, 0x67, 0x66, 0xcf, 0x1c, 0xdd, 0xcf, 0x1b, 0x48, 0x2b, 0xee, 0x8d, 0x89, 0x8e, 0x9a, 0xaf, 0x29, 0x80, 0x65, 0xab, 0xe9, 0xc7, 0x2d, 0x12, 0xcb, 0xab, 0x1c, 0x4c, 0x70, 0x07, 0xa1, 0x3d, 0x0a, 0x30, 0xcd, 0x15, 0x8d, 0x4f, 0xf8, 0xdd, 0xd4, 0x8c, 0x50, 0x15, 0x1c, 0xef, 0x50, 0xee, 0xc4, 0x2e, 0xf7, 0xfc, 0xe9, 0x52, 0xf2, 0x91, 0x7d, 0xe0, 0x6d, 0xd5, 0x35, 0x30, 0x8e, 0x5e, 0x43, 0x73, 0xf2, 0x41, 0xe9, 0xd5, 0x6a, 0xe3, 0xb2, 0x89, 0x3a, 0x56, 0x39, 0x38, 0x6f, 0x06, 0x3c, 0x88, 0x69, 0x5b, 0x2a, 0x4d, 0xc5, 0xa7, 0x54, 0xb8, 0x6c, 0x89, 0xcc, 0x9b, 0xf9, 0x3c, 0xca, 0xe5, 0xfd, 0x89, 0xf5, 0x12, 0x3c, 0x92, 0x78, 0x96, 0xd6, 0xdc, 0x74, 0x6e, 0x93, 0x44, 0x61, 0xd1, 0x8d, 0xc7, 0x46, 0xb2, 0x75, 0x0e, 0x86, 0xe8, 0x19, 0x8a, 0xd5, 0x6d, 0x6c, 0xd5, 0x78, 0x16, 0x95, 0xa2, 0xe9, 0xc8, 0x0a, 0x38, 0xeb, 0xf2, 0x24, 0x13, 0x4f, 0x73, 0x54, 0x93, 0x13, 0x85, 0x3a, 0x1b, 0xbc, 0x1e, 0x34, 0xb5, 0x8b, 0x05, 0x8c, 0xb9, 0x77, 0x8b, 0xb1, 0xdb, 0x1f, 0x20, 0x91, 0xab, 0x09, 0x53, 0x6e, 0x90, 0xce, 0x7b, 0x37, 0x74, 0xb9, 0x70, 0x47, 0x91, 0x22, 0x51, 0x63, 0x16, 0x79, 0xae, 0xb1, 0xae, 0x41, 0x26, 0x08, 0xc8, 0x19, 0x2b, 0xd1, 0x46, 0xaa, 0x48, 0xd6, 0x64, 0x2a, 0xd7, 0x83, 0x34, 0xff, 0x2c, 0x2a, 0xc1, 0x6c, 0x19, 0x43, 0x4a, 0x07, 0x85, 0xe7, 0xd3, 0x7c, 0xf6, 0x21, 0x68, 0xef, 0xea, 0xf2, 0x52, 0x9f, 0x7f, 0x93, 0x90, 0xcf, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x60, 0x7b, 0x66, 0x1a, 0x45, 0x0d, 0x97, 0xca, 0x89, 0x50, 0x2f, 0x7d, 0x04, 0xcd, 0x34, 0xa8, 0xff, 0xfc, 0xfd, 0x4b, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0xd6, 0x73, 0xe7, 0x7c, 0x4f, 0x76, 0xd0, 0x8d, 0xbf, 0xec, 0xba, 0xa2, 0xbe, 0x34, 0xc5, 0x28, 0x32, 0xb5, 0x7c, 0xfc, 0x6c, 0x9c, 0x2c, 0x2b, 0xbd, 0x09, 0x9e, 0x53, 0xbf, 0x6b, 0x5e, 0xaa, 0x11, 0x48, 0xb6, 0xe5, 0x08, 0xa3, 0xb3, 0xca, 0x3d, 0x61, 0x4d, 0xd3, 0x46, 0x09, 0xb3, 0x3e, 0xc3, 0xa0, 0xe3, 0x63, 0x55, 0x1b, 0xf2, 0xba, 0xef, 0xad, 0x39, 0xe1, 0x43, 0xb9, 0x38, 0xa3, 0xe6, 0x2f, 0x8a, 0x26, 0x3b, 0xef, 0xa0, 0x50, 0x56, 0xf9, 0xc6, 0x0a, 0xfd, 0x38, 0xcd, 0xc4, 0x0b, 0x70, 0x51, 0x94, 0x97, 0x98, 0x04, 0xdf, 0xc3, 0x5f, 0x94, 0xd5, 0x15, 0xc9, 0x14, 0x41, 0x9c, 0xc4, 0x5d, 0x75, 0x64, 0x15, 0x0d, 0xff, 0x55, 0x30, 0xec, 0x86, 0x8f, 0xff, 0x0d, 0xef, 0x2c, 0xb9, 0x63, 0x46, 0xf6, 0xaa, 0xfc, 0xdf, 0xbc, 0x69, 0xfd, 0x2e, 0x12, 0x48, 0x64, 0x9a, 0xe0, 0x95, 0xf0, 0xa6, 0xef, 0x29, 0x8f, 0x01, 0xb1, 0x15, 0xb5, 0x0c, 0x1d, 0xa5, 0xfe, 0x69, 0x2c, 0x69, 0x24, 0x78, 0x1e, 0xb3, 0xa7, 0x1c, 0x71, 0x62, 0xee, 0xca, 0xc8, 0x97, 0xac, 0x17, 0x5d, 0x8a, 0xc2, 0xf8, 0x47, 0x86, 0x6e, 0x2a, 0xc4, 0x56, 0x31, 0x95, 0xd0, 0x67, 0x89, 0x85, 0x2b, 0xf9, 0x6c, 0xa6, 0x5d, 0x46, 0x9d, 0x0c, 0xaa, 0x82, 0xe4, 0x99, 0x51, 0xdd, 0x70, 0xb7, 0xdb, 0x56, 0x3d, 0x61, 0xe4, 0x6a, 0xe1, 0x5c, 0xd6, 0xf6, 0xfe, 0x3d, 0xde, 0x41, 0xcc, 0x07, 0xae, 0x63, 0x52, 0xbf, 0x53, 0x53, 0xf4, 0x2b, 0xe9, 0xc7, 0xfd, 0xb6, 0xf7, 0x82, 0x5f, 0x85, 0xd2, 0x41, 0x18, 0xdb, 0x81, 0xb3, 0x04, 0x1c, 0xc5, 0x1f, 0xa4, 0x80, 0x6f, 0x15, 0x20, 0xc9, 0xde, 0x0c, 0x88, 0x0a, 0x1d, 0xd6, 0x66, 0x55, 0xe2, 0xfc, 0x48, 0xc9, 0x29, 0x26, 0x69, 0xe0, 0x30, 0x82, 0x02, 0x1e, 0x30, 0x82, 0x01, 0xa4, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x11, 0x60, 0x59, 0x49, 0xe0, 0x26, 0x2e, 0xbb, 0x55, 0xf9, 0x0a, 0x77, 0x8a, 0x71, 0xf9, 0x4a, 0xd8, 0x6c, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x30, 0x50, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x1b, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x45, 0x43, 0x43, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x2d, 0x20, 0x52, 0x35, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0a, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x0a, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x32, 0x31, 0x31, 0x31, 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x33, 0x38, 0x30, 0x31, 0x31, 0x39, 0x30, 0x33, 0x31, 0x34, 0x30, 0x37, 0x5a, 0x30, 0x50, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x1b, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x45, 0x43, 0x43, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x2d, 0x20, 0x52, 0x35, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0a, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x0a, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x30, 0x76, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x22, 0x03, 0x62, 0x00, 0x04, 0x47, 0x45, 0x0e, 0x96, 0xfb, 0x7d, 0x5d, 0xbf, 0xe9, 0x39, 0xd1, 0x21, 0xf8, 0x9f, 0x0b, 0xb6, 0xd5, 0x7b, 0x1e, 0x92, 0x3a, 0x48, 0x59, 0x1c, 0xf0, 0x62, 0x31, 0x2d, 0xc0, 0x7a, 0x28, 0xfe, 0x1a, 0xa7, 0x5c, 0xb3, 0xb6, 0xcc, 0x97, 0xe7, 0x45, 0xd4, 0x58, 0xfa, 0xd1, 0x77, 0x6d, 0x43, 0xa2, 0xc0, 0x87, 0x65, 0x34, 0x0a, 0x1f, 0x7a, 0xdd, 0xeb, 0x3c, 0x33, 0xa1, 0xc5, 0x9d, 0x4d, 0xa4, 0x6f, 0x41, 0x95, 0x38, 0x7f, 0xc9, 0x1e, 0x84, 0xeb, 0xd1, 0x9e, 0x49, 0x92, 0x87, 0x94, 0x87, 0x0c, 0x3a, 0x85, 0x4a, 0x66, 0x9f, 0x9d, 0x59, 0x93, 0x4d, 0x97, 0x61, 0x06, 0x86, 0x4a, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x3d, 0xe6, 0x29, 0x48, 0x9b, 0xea, 0x07, 0xca, 0x21, 0x44, 0x4a, 0x26, 0xde, 0x6e, 0xde, 0xd2, 0x83, 0xd0, 0x9f, 0x59, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x03, 0x68, 0x00, 0x30, 0x65, 0x02, 0x31, 0x00, 0xe5, 0x69, 0x12, 0xc9, 0x6e, 0xdb, 0xc6, 0x31, 0xba, 0x09, 0x41, 0xe1, 0x97, 0xf8, 0xfb, 0xfd, 0x9a, 0xe2, 0x7d, 0x12, 0xc9, 0xed, 0x7c, 0x64, 0xd3, 0xcb, 0x05, 0x25, 0x8b, 0x56, 0xd9, 0xa0, 0xe7, 0x5e, 0x5d, 0x4e, 0x0b, 0x83, 0x9c, 0x5b, 0x76, 0x29, 0xa0, 0x09, 0x26, 0x21, 0x6a, 0x62, 0x02, 0x30, 0x71, 0xd2, 0xb5, 0x8f, 0x5c, 0xea, 0x3b, 0xe1, 0x78, 0x09, 0x85, 0xa8, 0x75, 0x92, 0x3b, 0xc8, 0x5c, 0xfd, 0x48, 0xef, 0x0d, 0x74, 0x22, 0xa8, 0x08, 0xe2, 0x6e, 0xc5, 0x49, 0xce, 0xc7, 0x0c, 0xbc, 0xa7, 0x61, 0x69, 0xf1, 0xf7, 0x3b, 0xe1, 0x2a, 0xcb, 0xf9, 0x2b, 0xf3, 0x66, 0x90, 0x37, 0x30, 0x82, 0x05, 0x83, 0x30, 0x82, 0x03, 0x6b, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0e, 0x45, 0xe6, 0xbb, 0x03, 0x83, 0x33, 0xc3, 0x85, 0x65, 0x48, 0xe6, 0xff, 0x45, 0x51, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0c, 0x05, 0x00, 0x30, 0x4c, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x17, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x2d, 0x20, 0x52, 0x36, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0a, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x0a, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x34, 0x31, 0x32, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x33, 0x34, 0x31, 0x32, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x4c, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x17, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x2d, 0x20, 0x52, 0x36, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0a, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x0a, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0x95, 0x07, 0xe8, 0x73, 0xca, 0x66, 0xf9, 0xec, 0x14, 0xca, 0x7b, 0x3c, 0xf7, 0x0d, 0x08, 0xf1, 0xb4, 0x45, 0x0b, 0x2c, 0x82, 0xb4, 0x48, 0xc6, 0xeb, 0x5b, 0x3c, 0xae, 0x83, 0xb8, 0x41, 0x92, 0x33, 0x14, 0xa4, 0x6f, 0x7f, 0xe9, 0x2a, 0xcc, 0xc6, 0xb0, 0x88, 0x6b, 0xc5, 0xb6, 0x89, 0xd1, 0xc6, 0xb2, 0xff, 0x14, 0xce, 0x51, 0x14, 0x21, 0xec, 0x4a, 0xdd, 0x1b, 0x5a, 0xc6, 0xd6, 0x87, 0xee, 0x4d, 0x3a, 0x15, 0x06, 0xed, 0x64, 0x66, 0x0b, 0x92, 0x80, 0xca, 0x44, 0xde, 0x73, 0x94, 0x4e, 0xf3, 0xa7, 0x89, 0x7f, 0x4f, 0x78, 0x63, 0x08, 0xc8, 0x12, 0x50, 0x6d, 0x42, 0x66, 0x2f, 0x4d, 0xb9, 0x79, 0x28, 0x4d, 0x52, 0x1a, 0x8a, 0x1a, 0x80, 0xb7, 0x19, 0x81, 0x0e, 0x7e, 0xc4, 0x8a, 0xbc, 0x64, 0x4c, 0x21, 0x1c, 0x43, 0x68, 0xd7, 0x3d, 0x3c, 0x8a, 0xc5, 0xb2, 0x66, 0xd5, 0x90, 0x9a, 0xb7, 0x31, 0x06, 0xc5, 0xbe, 0xe2, 0x6d, 0x32, 0x06, 0xa6, 0x1e, 0xf9, 0xb9, 0xeb, 0xaa, 0xa3, 0xb8, 0xbf, 0xbe, 0x82, 0x63, 0x50, 0xd0, 0xf0, 0x18, 0x89, 0xdf, 0xe4, 0x0f, 0x79, 0xf5, 0xea, 0xa2, 0x1f, 0x2a, 0xd2, 0x70, 0x2e, 0x7b, 0xe7, 0xbc, 0x93, 0xbb, 0x6d, 0x53, 0xe2, 0x48, 0x7c, 0x8c, 0x10, 0x07, 0x38, 0xff, 0x66, 0xb2, 0x77, 0x61, 0x7e, 0xe0, 0xea, 0x8c, 0x3c, 0xaa, 0xb4, 0xa4, 0xf6, 0xf3, 0x95, 0x4a, 0x12, 0x07, 0x6d, 0xfd, 0x8c, 0xb2, 0x89, 0xcf, 0xd0, 0xa0, 0x61, 0x77, 0xc8, 0x58, 0x74, 0xb0, 0xd4, 0x23, 0x3a, 0xf7, 0x5d, 0x3a, 0xca, 0xa2, 0xdb, 0x9d, 0x09, 0xde, 0x5d, 0x44, 0x2d, 0x90, 0xf1, 0x81, 0xcd, 0x57, 0x92, 0xfa, 0x7e, 0xbc, 0x50, 0x04, 0x63, 0x34, 0xdf, 0x6b, 0x93, 0x18, 0xbe, 0x6b, 0x36, 0xb2, 0x39, 0xe4, 0xac, 0x24, 0x36, 0xb7, 0xf0, 0xef, 0xb6, 0x1c, 0x13, 0x57, 0x93, 0xb6, 0xde, 0xb2, 0xf8, 0xe2, 0x85, 0xb7, 0x73, 0xa2, 0xb8, 0x35, 0xaa, 0x45, 0xf2, 0xe0, 0x9d, 0x36, 0xa1, 0x6f, 0x54, 0x8a, 0xf1, 0x72, 0x56, 0x6e, 0x2e, 0x88, 0xc5, 0x51, 0x42, 0x44, 0x15, 0x94, 0xee, 0xa3, 0xc5, 0x38, 0x96, 0x9b, 0x4e, 0x4e, 0x5a, 0x0b, 0x47, 0xf3, 0x06, 0x36, 0x49, 0x77, 0x30, 0xbc, 0x71, 0x37, 0xe5, 0xa6, 0xec, 0x21, 0x08, 0x75, 0xfc, 0xe6, 0x61, 0x16, 0x3f, 0x77, 0xd5, 0xd9, 0x91, 0x97, 0x84, 0x0a, 0x6c, 0xd4, 0x02, 0x4d, 0x74, 0xc0, 0x14, 0xed, 0xfd, 0x39, 0xfb, 0x83, 0xf2, 0x5e, 0x14, 0xa1, 0x04, 0xb0, 0x0b, 0xe9, 0xfe, 0xee, 0x8f, 0xe1, 0x6e, 0x0b, 0xb2, 0x08, 0xb3, 0x61, 0x66, 0x09, 0x6a, 0xb1, 0x06, 0x3a, 0x65, 0x96, 0x59, 0xc0, 0xf0, 0x35, 0xfd, 0xc9, 0xda, 0x28, 0x8d, 0x1a, 0x11, 0x87, 0x70, 0x81, 0x0a, 0xa8, 0x9a, 0x75, 0x1d, 0x9e, 0x3a, 0x86, 0x05, 0x00, 0x9e, 0xdb, 0x80, 0xd6, 0x25, 0xf9, 0xdc, 0x05, 0x9e, 0x27, 0x59, 0x4c, 0x76, 0x39, 0x5b, 0xea, 0xf9, 0xa5, 0xa1, 0xd8, 0x83, 0x0f, 0xd1, 0xff, 0xdf, 0x30, 0x11, 0xf9, 0x85, 0xcf, 0x33, 0x48, 0xf5, 0xca, 0x6d, 0x64, 0x14, 0x2c, 0x7a, 0x58, 0x4f, 0xd3, 0x4b, 0x08, 0x49, 0xc5, 0x95, 0x64, 0x1a, 0x63, 0x0e, 0x79, 0x3d, 0xf5, 0xb3, 0x8c, 0xca, 0x58, 0xad, 0x9c, 0x42, 0x45, 0x79, 0x6e, 0x0e, 0x87, 0x19, 0x5c, 0x54, 0xb1, 0x65, 0xb6, 0xbf, 0x8c, 0x9b, 0xdc, 0x13, 0xe9, 0x0d, 0x6f, 0xb8, 0x2e, 0xdc, 0x67, 0x6e, 0xc9, 0x8b, 0x11, 0xb5, 0x84, 0x14, 0x8a, 0x00, 0x19, 0x70, 0x83, 0x79, 0x91, 0x97, 0x91, 0xd4, 0x1a, 0x27, 0xbf, 0x37, 0x1e, 0x32, 0x07, 0xd8, 0x14, 0x63, 0x3c, 0x28, 0x4c, 0xaf, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x63, 0x30, 0x61, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xae, 0x6c, 0x05, 0xa3, 0x93, 0x13, 0xe2, 0xa2, 0xe7, 0xe2, 0xd7, 0x1c, 0xd6, 0xc7, 0xf0, 0x7f, 0xc8, 0x67, 0x53, 0xa0, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xae, 0x6c, 0x05, 0xa3, 0x93, 0x13, 0xe2, 0xa2, 0xe7, 0xe2, 0xd7, 0x1c, 0xd6, 0xc7, 0xf0, 0x7f, 0xc8, 0x67, 0x53, 0xa0, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0c, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x83, 0x25, 0xed, 0xe8, 0xd1, 0xfd, 0x95, 0x52, 0xcd, 0x9e, 0xc0, 0x04, 0xa0, 0x91, 0x69, 0xe6, 0x5c, 0xd0, 0x84, 0xde, 0xdc, 0xad, 0xa2, 0x4f, 0xe8, 0x47, 0x78, 0xd6, 0x65, 0x98, 0xa9, 0x5b, 0xa8, 0x3c, 0x87, 0x7c, 0x02, 0x8a, 0xd1, 0x6e, 0xb7, 0x16, 0x73, 0xe6, 0x5f, 0xc0, 0x54, 0x98, 0xd5, 0x74, 0xbe, 0xc1, 0xcd, 0xe2, 0x11, 0x91, 0xad, 0x23, 0x18, 0x3d, 0xdd, 0xe1, 0x72, 0x44, 0x96, 0xb4, 0x95, 0x5e, 0xc0, 0x7b, 0x8e, 0x99, 0x78, 0x16, 0x43, 0x13, 0x56, 0x57, 0xb3, 0xa2, 0xb3, 0x3b, 0xb5, 0x77, 0xdc, 0x40, 0x72, 0xac, 0xa3, 0xeb, 0x9b, 0x35, 0x3e, 0xb1, 0x08, 0x21, 0xa1, 0xe7, 0xc4, 0x43, 0x37, 0x79, 0x32, 0xbe, 0xb5, 0xe7, 0x9c, 0x2c, 0x4c, 0xbc, 0x43, 0x29, 0x99, 0x8e, 0x30, 0xd3, 0xac, 0x21, 0xe0, 0xe3, 0x1d, 0xfa, 0xd8, 0x07, 0x33, 0x76, 0x54, 0x00, 0x22, 0x2a, 0xb9, 0x4d, 0x20, 0x2e, 0x70, 0x68, 0xda, 0xe5, 0x53, 0xfc, 0x83, 0x5c, 0xd3, 0x9d, 0xf2, 0xff, 0x44, 0x0c, 0x44, 0x66, 0xf2, 0xd2, 0xe3, 0xbd, 0x46, 0x00, 0x1a, 0x6d, 0x02, 0xba, 0x25, 0x5d, 0x8d, 0xa1, 0x31, 0x51, 0xdd, 0x54, 0x46, 0x1c, 0x4d, 0xdb, 0x99, 0x96, 0xef, 0x1a, 0x1c, 0x04, 0x5c, 0xa6, 0x15, 0xef, 0x78, 0xe0, 0x79, 0xfe, 0x5d, 0xdb, 0x3e, 0xaa, 0x4c, 0x55, 0xfd, 0x9a, 0x15, 0xa9, 0x6f, 0xe1, 0xa6, 0xfb, 0xdf, 0x70, 0x30, 0xe9, 0xc3, 0xee, 0x42, 0x46, 0xed, 0xc2, 0x93, 0x05, 0x89, 0xfa, 0x7d, 0x63, 0x7b, 0x3f, 0xd0, 0x71, 0x81, 0x7c, 0x00, 0xe8, 0x98, 0xae, 0x0e, 0x78, 0x34, 0xc3, 0x25, 0xfb, 0xaf, 0x0a, 0x9f, 0x20, 0x6b, 0xdd, 0x3b, 0x13, 0x8f, 0x12, 0x8c, 0xe2, 0x41, 0x1a, 0x48, 0x7a, 0x73, 0xa0, 0x77, 0x69, 0xc7, 0xb6, 0x5c, 0x7f, 0x82, 0xc8, 0x1e, 0xfe, 0x58, 0x1b, 0x28, 0x2b, 0xa8, 0x6c, 0xad, 0x5e, 0x6d, 0xc0, 0x05, 0xd2, 0x7b, 0xb7, 0xeb, 0x80, 0xfe, 0x25, 0x37, 0xfe, 0x02, 0x9b, 0x68, 0xac, 0x42, 0x5d, 0xc3, 0xee, 0xf5, 0xcc, 0xdc, 0xf0, 0x50, 0x75, 0xd2, 0x36, 0x69, 0x9c, 0xe6, 0x7b, 0x04, 0xdf, 0x6e, 0x06, 0x69, 0xb6, 0xde, 0x0a, 0x09, 0x48, 0x59, 0x87, 0xeb, 0x7b, 0x14, 0x60, 0x7a, 0x64, 0xaa, 0x69, 0x43, 0xef, 0x91, 0xc7, 0x4c, 0xec, 0x18, 0xdd, 0x6c, 0xef, 0x53, 0x2d, 0x8c, 0x99, 0xe1, 0x5e, 0xf2, 0x72, 0x3e, 0xcf, 0x54, 0xc8, 0xbd, 0x67, 0xec, 0xa4, 0x0f, 0x4c, 0x45, 0xff, 0xd3, 0xb9, 0x30, 0x23, 0x07, 0x4c, 0x8f, 0x10, 0xbf, 0x86, 0x96, 0xd9, 0x99, 0x5a, 0xb4, 0x99, 0x57, 0x1c, 0xa4, 0xcc, 0xbb, 0x15, 0x89, 0x53, 0xba, 0x2c, 0x05, 0x0f, 0xe4, 0xc4, 0x9e, 0x19, 0xb1, 0x18, 0x34, 0xd5, 0x4c, 0x9d, 0xba, 0xed, 0xf7, 0x1f, 0xaf, 0x24, 0x95, 0x04, 0x78, 0xa8, 0x03, 0xbb, 0xee, 0x81, 0xe5, 0xda, 0x5f, 0x7c, 0x8b, 0x4a, 0xa1, 0x90, 0x74, 0x25, 0xa7, 0xb3, 0x3e, 0x4b, 0xc8, 0x2c, 0x56, 0xbd, 0xc7, 0xc8, 0xef, 0x38, 0xe2, 0x5c, 0x92, 0xf0, 0x79, 0xf7, 0x9c, 0x84, 0xba, 0x74, 0x2d, 0x61, 0x01, 0x20, 0x7e, 0x7e, 0xd1, 0xf2, 0x4f, 0x07, 0x59, 0x5f, 0x8b, 0x2d, 0x43, 0x52, 0xeb, 0x46, 0x0c, 0x94, 0xe1, 0xf5, 0x66, 0x47, 0x79, 0x77, 0xd5, 0x54, 0x5b, 0x1f, 0xad, 0x24, 0x37, 0xcb, 0x45, 0x5a, 0x4e, 0xa0, 0x44, 0x48, 0xc8, 0xd8, 0xb0, 0x99, 0xc5, 0x15, 0x84, 0x09, 0xf6, 0xd6, 0x49, 0x49, 0xc0, 0x65, 0xb8, 0xe6, 0x1a, 0x71, 0x6e, 0xa0, 0xa8, 0xf1, 0x82, 0xe8, 0x45, 0x3e, 0x6c, 0xd6, 0x02, 0xd7, 0x0a, 0x67, 0x83, 0x05, 0x5a, 0xc9, 0xa4, 0x10, 0x30, 0x82, 0x04, 0x0a, 0x30, 0x82, 0x02, 0xf2, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00, 0xc2, 0x7e, 0x43, 0x04, 0x4e, 0x47, 0x3f, 0x19, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0x82, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x48, 0x55, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x08, 0x42, 0x75, 0x64, 0x61, 0x70, 0x65, 0x73, 0x74, 0x31, 0x16, 0x30, 0x14, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0d, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x65, 0x63, 0x20, 0x4c, 0x74, 0x64, 0x2e, 0x31, 0x27, 0x30, 0x25, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x1e, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x65, 0x63, 0x20, 0x65, 0x2d, 0x53, 0x7a, 0x69, 0x67, 0x6e, 0x6f, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x32, 0x30, 0x30, 0x39, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x01, 0x16, 0x10, 0x69, 0x6e, 0x66, 0x6f, 0x40, 0x65, 0x2d, 0x73, 0x7a, 0x69, 0x67, 0x6e, 0x6f, 0x2e, 0x68, 0x75, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x39, 0x30, 0x36, 0x31, 0x36, 0x31, 0x31, 0x33, 0x30, 0x31, 0x38, 0x5a, 0x17, 0x0d, 0x32, 0x39, 0x31, 0x32, 0x33, 0x30, 0x31, 0x31, 0x33, 0x30, 0x31, 0x38, 0x5a, 0x30, 0x81, 0x82, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x48, 0x55, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x08, 0x42, 0x75, 0x64, 0x61, 0x70, 0x65, 0x73, 0x74, 0x31, 0x16, 0x30, 0x14, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0d, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x65, 0x63, 0x20, 0x4c, 0x74, 0x64, 0x2e, 0x31, 0x27, 0x30, 0x25, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x1e, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x65, 0x63, 0x20, 0x65, 0x2d, 0x53, 0x7a, 0x69, 0x67, 0x6e, 0x6f, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x32, 0x30, 0x30, 0x39, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x01, 0x16, 0x10, 0x69, 0x6e, 0x66, 0x6f, 0x40, 0x65, 0x2d, 0x73, 0x7a, 0x69, 0x67, 0x6e, 0x6f, 0x2e, 0x68, 0x75, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xe9, 0xf8, 0x8f, 0xf3, 0x63, 0xad, 0xda, 0x86, 0xd8, 0xa7, 0xe0, 0x42, 0xfb, 0xcf, 0x91, 0xde, 0xa6, 0x26, 0xf8, 0x99, 0xa5, 0x63, 0x70, 0xad, 0x9b, 0xae, 0xca, 0x33, 0x40, 0x7d, 0x6d, 0x96, 0x6e, 0xa1, 0x0e, 0x44, 0xee, 0xe1, 0x13, 0x9d, 0x94, 0x42, 0x52, 0x9a, 0xbd, 0x75, 0x85, 0x74, 0x2c, 0xa8, 0x0e, 0x1d, 0x93, 0xb6, 0x18, 0xb7, 0x8c, 0x2c, 0xa8, 0xcf, 0xfb, 0x5c, 0x71, 0xb9, 0xda, 0xec, 0xfe, 0xe8, 0x7e, 0x8f, 0xe4, 0x2f, 0x1d, 0xb2, 0xa8, 0x75, 0x87, 0xd8, 0xb7, 0xa1, 0xe5, 0x3b, 0xcf, 0x99, 0x4a, 0x46, 0xd0, 0x83, 0x19, 0x7d, 0xc0, 0xa1, 0x12, 0x1c, 0x95, 0x6d, 0x4a, 0xf4, 0xd8, 0xc7, 0xa5, 0x4d, 0x33, 0x2e, 0x85, 0x39, 0x40, 0x75, 0x7e, 0x14, 0x7c, 0x80, 0x12, 0x98, 0x50, 0xc7, 0x41, 0x67, 0xb8, 0xa0, 0x80, 0x61, 0x54, 0xa6, 0x6c, 0x4e, 0x1f, 0xe0, 0x9d, 0x0e, 0x07, 0xe9, 0xc9, 0xba, 0x33, 0xe7, 0xfe, 0xc0, 0x55, 0x28, 0x2c, 0x02, 0x80, 0xa7, 0x19, 0xf5, 0x9e, 0xdc, 0x55, 0x53, 0x03, 0x97, 0x7b, 0x07, 0x48, 0xff, 0x99, 0xfb, 0x37, 0x8a, 0x24, 0xc4, 0x59, 0xcc, 0x50, 0x10, 0x63, 0x8e, 0xaa, 0xa9, 0x1a, 0xb0, 0x84, 0x1a, 0x86, 0xf9, 0x5f, 0xbb, 0xb1, 0x50, 0x6e, 0xa4, 0xd1, 0x0a, 0xcc, 0xd5, 0x71, 0x7e, 0x1f, 0xa7, 0x1b, 0x7c, 0xf5, 0x53, 0x6e, 0x22, 0x5f, 0xcb, 0x2b, 0xe6, 0xd4, 0x7c, 0x5d, 0xae, 0xd6, 0xc2, 0xc6, 0x4c, 0xe5, 0x05, 0x01, 0xd9, 0xed, 0x57, 0xfc, 0xc1, 0x23, 0x79, 0xfc, 0xfa, 0xc8, 0x24, 0x83, 0x95, 0xf3, 0xb5, 0x6a, 0x51, 0x01, 0xd0, 0x77, 0xd6, 0xe9, 0x12, 0xa1, 0xf9, 0x1a, 0x83, 0xfb, 0x82, 0x1b, 0xb9, 0xb0, 0x97, 0xf4, 0x76, 0x06, 0x33, 0x43, 0x49, 0xa0, 0xff, 0x0b, 0xb5, 0xfa, 0xb5, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x81, 0x80, 0x30, 0x7e, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xcb, 0x0f, 0xc6, 0xdf, 0x42, 0x43, 0xcc, 0x3d, 0xcb, 0xb5, 0x48, 0x23, 0xa1, 0x1a, 0x7a, 0xa6, 0x2a, 0xbb, 0x34, 0x68, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xcb, 0x0f, 0xc6, 0xdf, 0x42, 0x43, 0xcc, 0x3d, 0xcb, 0xb5, 0x48, 0x23, 0xa1, 0x1a, 0x7a, 0xa6, 0x2a, 0xbb, 0x34, 0x68, 0x30, 0x1b, 0x06, 0x03, 0x55, 0x1d, 0x11, 0x04, 0x14, 0x30, 0x12, 0x81, 0x10, 0x69, 0x6e, 0x66, 0x6f, 0x40, 0x65, 0x2d, 0x73, 0x7a, 0x69, 0x67, 0x6e, 0x6f, 0x2e, 0x68, 0x75, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0xc9, 0xd1, 0x0e, 0x5e, 0x2e, 0xd5, 0xcc, 0xb3, 0x7c, 0x3e, 0xcb, 0xfc, 0x3d, 0xff, 0x0d, 0x28, 0x95, 0x93, 0x04, 0xc8, 0xbf, 0xda, 0xcd, 0x79, 0xb8, 0x43, 0x90, 0xf0, 0xa4, 0xbe, 0xef, 0xf2, 0xef, 0x21, 0x98, 0xbc, 0xd4, 0xd4, 0x5d, 0x06, 0xf6, 0xee, 0x42, 0xec, 0x30, 0x6c, 0xa0, 0xaa, 0xa9, 0xca, 0xf1, 0xaf, 0x8a, 0xfa, 0x3f, 0x0b, 0x73, 0x6a, 0x3e, 0xea, 0x2e, 0x40, 0x7e, 0x1f, 0xae, 0x54, 0x61, 0x79, 0xeb, 0x2e, 0x08, 0x37, 0xd7, 0x23, 0xf3, 0x8c, 0x9f, 0xbe, 0x1d, 0xb1, 0xe1, 0xa4, 0x75, 0xdb, 0xa0, 0xe2, 0x54, 0x14, 0xb1, 0xba, 0x1c, 0x29, 0xa4, 0x18, 0xf6, 0x12, 0xba, 0xa2, 0x14, 0x14, 0xe3, 0x31, 0x35, 0xc8, 0x40, 0xff, 0xb7, 0xe0, 0x05, 0x76, 0x57, 0xc1, 0x1c, 0x59, 0xf2, 0xf8, 0xbf, 0xe4, 0xed, 0x25, 0x62, 0x5c, 0x84, 0xf0, 0x7e, 0x7e, 0x1f, 0xb3, 0xbe, 0xf9, 0xb7, 0x21, 0x11, 0xcc, 0x03, 0x01, 0x56, 0x70, 0xa7, 0x10, 0x92, 0x1e, 0x1b, 0x34, 0x81, 0x1e, 0xad, 0x9c, 0x1a, 0xc3, 0x04, 0x3c, 0xed, 0x02, 0x61, 0xd6, 0x1e, 0x06, 0xf3, 0x5f, 0x3a, 0x87, 0xf2, 0x2b, 0xf1, 0x45, 0x87, 0xe5, 0x3d, 0xac, 0xd1, 0xc7, 0x57, 0x84, 0xbd, 0x6b, 0xae, 0xdc, 0xd8, 0xf9, 0xb6, 0x1b, 0x62, 0x70, 0x0b, 0x3d, 0x36, 0xc9, 0x42, 0xf2, 0x32, 0xd7, 0x7a, 0x61, 0xe6, 0xd2, 0xdb, 0x3d, 0xcf, 0xc8, 0xa9, 0xc9, 0x9b, 0xdc, 0xdb, 0x58, 0x44, 0xd7, 0x6f, 0x38, 0xaf, 0x7f, 0x78, 0xd3, 0xa3, 0xad, 0x1a, 0x75, 0xba, 0x1c, 0xc1, 0x36, 0x7c, 0x8f, 0x1e, 0x6d, 0x1c, 0xc3, 0x75, 0x46, 0xae, 0x35, 0x05, 0xa6, 0xf6, 0x5c, 0x3d, 0x21, 0xee, 0x56, 0xf0, 0xc9, 0x82, 0x22, 0x2d, 0x7a, 0x54, 0xab, 0x70, 0xc3, 0x7d, 0x22, 0x65, 0x82, 0x70, 0x96, 0x30, 0x82, 0x03, 0xbc, 0x30, 0x82, 0x02, 0xa4, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x07, 0x56, 0x22, 0xa4, 0xe8, 0xd4, 0x8a, 0x89, 0x4d, 0xf4, 0x13, 0xc8, 0xf0, 0xf8, 0xea, 0xa5, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x4a, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x17, 0x53, 0x65, 0x63, 0x75, 0x72, 0x65, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x10, 0x53, 0x65, 0x63, 0x75, 0x72, 0x65, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x43, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x36, 0x31, 0x31, 0x30, 0x37, 0x31, 0x39, 0x34, 0x32, 0x32, 0x38, 0x5a, 0x17, 0x0d, 0x32, 0x39, 0x31, 0x32, 0x33, 0x31, 0x31, 0x39, 0x35, 0x32, 0x30, 0x36, 0x5a, 0x30, 0x4a, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x17, 0x53, 0x65, 0x63, 0x75, 0x72, 0x65, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x10, 0x53, 0x65, 0x63, 0x75, 0x72, 0x65, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x43, 0x41, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xaf, 0x35, 0x2e, 0xd8, 0xac, 0x6c, 0x55, 0x69, 0x06, 0x71, 0xe5, 0x13, 0x68, 0x24, 0xb3, 0x4f, 0xd8, 0xcc, 0x21, 0x47, 0xf8, 0xf1, 0x60, 0x38, 0x89, 0x89, 0x03, 0xe9, 0xbd, 0xea, 0x5e, 0x46, 0x53, 0x09, 0xdc, 0x5c, 0xf5, 0x5a, 0xe8, 0xf7, 0x45, 0x2a, 0x02, 0xeb, 0x31, 0x61, 0xd7, 0x29, 0x33, 0x4c, 0xce, 0xc7, 0x7c, 0x0a, 0x37, 0x7e, 0x0f, 0xba, 0x32, 0x98, 0xe1, 0x1d, 0x97, 0xaf, 0x8f, 0xc7, 0xdc, 0xc9, 0x38, 0x96, 0xf3, 0xdb, 0x1a, 0xfc, 0x51, 0xed, 0x68, 0xc6, 0xd0, 0x6e, 0xa4, 0x7c, 0x24, 0xd1, 0xae, 0x42, 0xc8, 0x96, 0x50, 0x63, 0x2e, 0xe0, 0xfe, 0x75, 0xfe, 0x98, 0xa7, 0x5f, 0x49, 0x2e, 0x95, 0xe3, 0x39, 0x33, 0x64, 0x8e, 0x1e, 0xa4, 0x5f, 0x90, 0xd2, 0x67, 0x3c, 0xb2, 0xd9, 0xfe, 0x41, 0xb9, 0x55, 0xa7, 0x09, 0x8e, 0x72, 0x05, 0x1e, 0x8b, 0xdd, 0x44, 0x85, 0x82, 0x42, 0xd0, 0x49, 0xc0, 0x1d, 0x60, 0xf0, 0xd1, 0x17, 0x2c, 0x95, 0xeb, 0xf6, 0xa5, 0xc1, 0x92, 0xa3, 0xc5, 0xc2, 0xa7, 0x08, 0x60, 0x0d, 0x60, 0x04, 0x10, 0x96, 0x79, 0x9e, 0x16, 0x34, 0xe6, 0xa9, 0xb6, 0xfa, 0x25, 0x45, 0x39, 0xc8, 0x1e, 0x65, 0xf9, 0x93, 0xf5, 0xaa, 0xf1, 0x52, 0xdc, 0x99, 0x98, 0x3d, 0xa5, 0x86, 0x1a, 0x0c, 0x35, 0x33, 0xfa, 0x4b, 0xa5, 0x04, 0x06, 0x15, 0x1c, 0x31, 0x80, 0xef, 0xaa, 0x18, 0x6b, 0xc2, 0x7b, 0xd7, 0xda, 0xce, 0xf9, 0x33, 0x20, 0xd5, 0xf5, 0xbd, 0x6a, 0x33, 0x2d, 0x81, 0x04, 0xfb, 0xb0, 0x5c, 0xd4, 0x9c, 0xa3, 0xe2, 0x5c, 0x1d, 0xe3, 0xa9, 0x42, 0x75, 0x5e, 0x7b, 0xd4, 0x77, 0xef, 0x39, 0x54, 0xba, 0xc9, 0x0a, 0x18, 0x1b, 0x12, 0x99, 0x49, 0x2f, 0x88, 0x4b, 0xfd, 0x50, 0x62, 0xd1, 0x73, 0xe7, 0x8f, 0x7a, 0x43, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x81, 0x9d, 0x30, 0x81, 0x9a, 0x30, 0x13, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x14, 0x02, 0x04, 0x06, 0x1e, 0x04, 0x00, 0x43, 0x00, 0x41, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xaf, 0x44, 0x04, 0xc2, 0x41, 0x7e, 0x48, 0x83, 0xdb, 0x4e, 0x39, 0x02, 0xec, 0xec, 0x84, 0x7a, 0xe6, 0xce, 0xc9, 0xa4, 0x30, 0x34, 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04, 0x2d, 0x30, 0x2b, 0x30, 0x29, 0xa0, 0x27, 0xa0, 0x25, 0x86, 0x23, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, 0x72, 0x6c, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x53, 0x47, 0x43, 0x41, 0x2e, 0x63, 0x72, 0x6c, 0x30, 0x10, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x01, 0x04, 0x03, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x63, 0x1a, 0x08, 0x40, 0x7d, 0xa4, 0x5e, 0x53, 0x0d, 0x77, 0xd8, 0x7a, 0xae, 0x1f, 0x0d, 0x0b, 0x51, 0x16, 0x03, 0xef, 0x18, 0x7c, 0xc8, 0xe3, 0xaf, 0x6a, 0x58, 0x93, 0x14, 0x60, 0x91, 0xb2, 0x84, 0xdc, 0x88, 0x4e, 0xbe, 0x39, 0x8a, 0x3a, 0xf3, 0xe6, 0x82, 0x89, 0x5d, 0x01, 0x37, 0xb3, 0xab, 0x24, 0xa4, 0x15, 0x0e, 0x92, 0x35, 0x5a, 0x4a, 0x44, 0x5e, 0x4e, 0x57, 0xfa, 0x75, 0xce, 0x1f, 0x48, 0xce, 0x66, 0xf4, 0x3c, 0x40, 0x26, 0x92, 0x98, 0x6c, 0x1b, 0xee, 0x24, 0x46, 0x0c, 0x17, 0xb3, 0x52, 0xa5, 0xdb, 0xa5, 0x91, 0x91, 0xcf, 0x37, 0xd3, 0x6f, 0xe7, 0x27, 0x08, 0x3a, 0x4e, 0x19, 0x1f, 0x3a, 0xa7, 0x58, 0x5c, 0x17, 0xcf, 0x79, 0x3f, 0x8b, 0xe4, 0xa7, 0xd3, 0x26, 0x23, 0x9d, 0x26, 0x0f, 0x58, 0x69, 0xfc, 0x47, 0x7e, 0xb2, 0xd0, 0x8d, 0x8b, 0x93, 0xbf, 0x29, 0x4f, 0x43, 0x69, 0x74, 0x76, 0x67, 0x4b, 0xcf, 0x07, 0x8c, 0xe6, 0x02, 0xf7, 0xb5, 0xe1, 0xb4, 0x43, 0xb5, 0x4b, 0x2d, 0x14, 0x9f, 0xf9, 0xdc, 0x26, 0x0d, 0xbf, 0xa6, 0x47, 0x74, 0x06, 0xd8, 0x88, 0xd1, 0x3a, 0x29, 0x30, 0x84, 0xce, 0xd2, 0x39, 0x80, 0x62, 0x1b, 0xa8, 0xc7, 0x57, 0x49, 0xbc, 0x6a, 0x55, 0x51, 0x67, 0x15, 0x4a, 0xbe, 0x35, 0x07, 0xe4, 0xd5, 0x75, 0x98, 0x37, 0x79, 0x30, 0x14, 0xdb, 0x29, 0x9d, 0x6c, 0xc5, 0x69, 0xcc, 0x47, 0x55, 0xa2, 0x30, 0xf7, 0xcc, 0x5c, 0x7f, 0xc2, 0xc3, 0x98, 0x1c, 0x6b, 0x4e, 0x16, 0x80, 0xeb, 0x7a, 0x78, 0x65, 0x45, 0xa2, 0x00, 0x1a, 0xaf, 0x0c, 0x0d, 0x55, 0x64, 0x34, 0x48, 0xb8, 0x92, 0xb9, 0xf1, 0xb4, 0x50, 0x29, 0xf2, 0x4f, 0x23, 0x1f, 0xda, 0x6c, 0xac, 0x1f, 0x44, 0xe1, 0xdd, 0x23, 0x78, 0x51, 0x5b, 0xc7, 0x16, 0x30, 0x82, 0x03, 0xb8, 0x30, 0x82, 0x02, 0xa0, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x0c, 0xf0, 0x8e, 0x5c, 0x08, 0x16, 0xa5, 0xad, 0x42, 0x7f, 0xf0, 0xeb, 0x27, 0x18, 0x59, 0xd0, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x48, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x17, 0x53, 0x65, 0x63, 0x75, 0x72, 0x65, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x0e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x65, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x43, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x36, 0x31, 0x31, 0x30, 0x37, 0x31, 0x39, 0x33, 0x31, 0x31, 0x38, 0x5a, 0x17, 0x0d, 0x32, 0x39, 0x31, 0x32, 0x33, 0x31, 0x31, 0x39, 0x34, 0x30, 0x35, 0x35, 0x5a, 0x30, 0x48, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x17, 0x53, 0x65, 0x63, 0x75, 0x72, 0x65, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x0e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x65, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x43, 0x41, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xab, 0xa4, 0x81, 0xe5, 0x95, 0xcd, 0xf5, 0xf6, 0x14, 0x8e, 0xc2, 0x4f, 0xca, 0xd4, 0xe2, 0x78, 0x95, 0x58, 0x9c, 0x41, 0xe1, 0x0d, 0x99, 0x40, 0x24, 0x17, 0x39, 0x91, 0x33, 0x66, 0xe9, 0xbe, 0xe1, 0x83, 0xaf, 0x62, 0x5c, 0x89, 0xd1, 0xfc, 0x24, 0x5b, 0x61, 0xb3, 0xe0, 0x11, 0x11, 0x41, 0x1c, 0x1d, 0x6e, 0xf0, 0xb8, 0xbb, 0xf8, 0xde, 0xa7, 0x81, 0xba, 0xa6, 0x48, 0xc6, 0x9f, 0x1d, 0xbd, 0xbe, 0x8e, 0xa9, 0x41, 0x3e, 0xb8, 0x94, 0xed, 0x29, 0x1a, 0xd4, 0x8e, 0xd2, 0x03, 0x1d, 0x03, 0xef, 0x6d, 0x0d, 0x67, 0x1c, 0x57, 0xd7, 0x06, 0xad, 0xca, 0xc8, 0xf5, 0xfe, 0x0e, 0xaf, 0x66, 0x25, 0x48, 0x04, 0x96, 0x0b, 0x5d, 0xa3, 0xba, 0x16, 0xc3, 0x08, 0x4f, 0xd1, 0x46, 0xf8, 0x14, 0x5c, 0xf2, 0xc8, 0x5e, 0x01, 0x99, 0x6d, 0xfd, 0x88, 0xcc, 0x86, 0xa8, 0xc1, 0x6f, 0x31, 0x42, 0x6c, 0x52, 0x3e, 0x68, 0xcb, 0xf3, 0x19, 0x34, 0xdf, 0xbb, 0x87, 0x18, 0x56, 0x80, 0x26, 0xc4, 0xd0, 0xdc, 0xc0, 0x6f, 0xdf, 0xde, 0xa0, 0xc2, 0x91, 0x16, 0xa0, 0x64, 0x11, 0x4b, 0x44, 0xbc, 0x1e, 0xf6, 0xe7, 0xfa, 0x63, 0xde, 0x66, 0xac, 0x76, 0xa4, 0x71, 0xa3, 0xec, 0x36, 0x94, 0x68, 0x7a, 0x77, 0xa4, 0xb1, 0xe7, 0x0e, 0x2f, 0x81, 0x7a, 0xe2, 0xb5, 0x72, 0x86, 0xef, 0xa2, 0x6b, 0x8b, 0xf0, 0x0f, 0xdb, 0xd3, 0x59, 0x3f, 0xba, 0x72, 0xbc, 0x44, 0x24, 0x9c, 0xe3, 0x73, 0xb3, 0xf7, 0xaf, 0x57, 0x2f, 0x42, 0x26, 0x9d, 0xa9, 0x74, 0xba, 0x00, 0x52, 0xf2, 0x4b, 0xcd, 0x53, 0x7c, 0x47, 0x0b, 0x36, 0x85, 0x0e, 0x66, 0xa9, 0x08, 0x97, 0x16, 0x34, 0x57, 0xc1, 0x66, 0xf7, 0x80, 0xe3, 0xed, 0x70, 0x54, 0xc7, 0x93, 0xe0, 0x2e, 0x28, 0x15, 0x59, 0x87, 0xba, 0xbb, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x81, 0x9d, 0x30, 0x81, 0x9a, 0x30, 0x13, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x14, 0x02, 0x04, 0x06, 0x1e, 0x04, 0x00, 0x43, 0x00, 0x41, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x42, 0x32, 0xb6, 0x16, 0xfa, 0x04, 0xfd, 0xfe, 0x5d, 0x4b, 0x7a, 0xc3, 0xfd, 0xf7, 0x4c, 0x40, 0x1d, 0x5a, 0x43, 0xaf, 0x30, 0x34, 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04, 0x2d, 0x30, 0x2b, 0x30, 0x29, 0xa0, 0x27, 0xa0, 0x25, 0x86, 0x23, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, 0x72, 0x6c, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x53, 0x54, 0x43, 0x41, 0x2e, 0x63, 0x72, 0x6c, 0x30, 0x10, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x01, 0x04, 0x03, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x30, 0xed, 0x4f, 0x4a, 0xe1, 0x58, 0x3a, 0x52, 0x72, 0x5b, 0xb5, 0xa6, 0xa3, 0x65, 0x18, 0xa6, 0xbb, 0x51, 0x3b, 0x77, 0xe9, 0x9d, 0xea, 0xd3, 0x9f, 0x5c, 0xe0, 0x45, 0x65, 0x7b, 0x0d, 0xca, 0x5b, 0xe2, 0x70, 0x50, 0xb2, 0x94, 0x05, 0x14, 0xae, 0x49, 0xc7, 0x8d, 0x41, 0x07, 0x12, 0x73, 0x94, 0x7e, 0x0c, 0x23, 0x21, 0xfd, 0xbc, 0x10, 0x7f, 0x60, 0x10, 0x5a, 0x72, 0xf5, 0x98, 0x0e, 0xac, 0xec, 0xb9, 0x7f, 0xdd, 0x7a, 0x6f, 0x5d, 0xd3, 0x1c, 0xf4, 0xff, 0x88, 0x05, 0x69, 0x42, 0xa9, 0x05, 0x71, 0xc8, 0xb7, 0xac, 0x26, 0xe8, 0x2e, 0xb4, 0x8c, 0x6a, 0xff, 0x71, 0xdc, 0xb8, 0xb1, 0xdf, 0x99, 0xbc, 0x7c, 0x21, 0x54, 0x2b, 0xe4, 0x58, 0xa2, 0xbb, 0x57, 0x29, 0xae, 0x9e, 0xa9, 0xa3, 0x19, 0x26, 0x0f, 0x99, 0x2e, 0x08, 0xb0, 0xef, 0xfd, 0x69, 0xcf, 0x99, 0x1a, 0x09, 0x8d, 0xe3, 0xa7, 0x9f, 0x2b, 0xc9, 0x36, 0x34, 0x7b, 0x24, 0xb3, 0x78, 0x4c, 0x95, 0x17, 0xa4, 0x06, 0x26, 0x1e, 0xb6, 0x64, 0x52, 0x36, 0x5f, 0x60, 0x67, 0xd9, 0x9c, 0xc5, 0x05, 0x74, 0x0b, 0xe7, 0x67, 0x23, 0xd2, 0x08, 0xfc, 0x88, 0xe9, 0xae, 0x8b, 0x7f, 0xe1, 0x30, 0xf4, 0x37, 0x7e, 0xfd, 0xc6, 0x32, 0xda, 0x2d, 0x9e, 0x44, 0x30, 0x30, 0x6c, 0xee, 0x07, 0xde, 0xd2, 0x34, 0xfc, 0xd2, 0xff, 0x40, 0xf6, 0x4b, 0xf4, 0x66, 0x46, 0x06, 0x54, 0xa6, 0xf2, 0x32, 0x0a, 0x63, 0x26, 0x30, 0x6b, 0x9b, 0xd1, 0xdc, 0x8b, 0x47, 0xba, 0xe1, 0xb9, 0xd5, 0x62, 0xd0, 0xa2, 0xa0, 0xf4, 0x67, 0x05, 0x78, 0x29, 0x63, 0x1a, 0x6f, 0x04, 0xd6, 0xf8, 0xc6, 0x4c, 0xa3, 0x9a, 0xb1, 0x37, 0xb4, 0x8d, 0xe5, 0x28, 0x4b, 0x1d, 0x9e, 0x2c, 0xc2, 0xb8, 0x68, 0xbc, 0xed, 0x02, 0xee, 0x31, 0x30, 0x82, 0x05, 0xba, 0x30, 0x82, 0x03, 0xa2, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00, 0xbb, 0x40, 0x1c, 0x43, 0xf5, 0x5e, 0x4f, 0xb0, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x45, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x48, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0c, 0x53, 0x77, 0x69, 0x73, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x41, 0x47, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x16, 0x53, 0x77, 0x69, 0x73, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x47, 0x6f, 0x6c, 0x64, 0x20, 0x43, 0x41, 0x20, 0x2d, 0x20, 0x47, 0x32, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x36, 0x31, 0x30, 0x32, 0x35, 0x30, 0x38, 0x33, 0x30, 0x33, 0x35, 0x5a, 0x17, 0x0d, 0x33, 0x36, 0x31, 0x30, 0x32, 0x35, 0x30, 0x38, 0x33, 0x30, 0x33, 0x35, 0x5a, 0x30, 0x45, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x48, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0c, 0x53, 0x77, 0x69, 0x73, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x41, 0x47, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x16, 0x53, 0x77, 0x69, 0x73, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x47, 0x6f, 0x6c, 0x64, 0x20, 0x43, 0x41, 0x20, 0x2d, 0x20, 0x47, 0x32, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xaf, 0xe4, 0xee, 0x7e, 0x8b, 0x24, 0x0e, 0x12, 0x6e, 0xa9, 0x50, 0x2d, 0x16, 0x44, 0x3b, 0x92, 0x92, 0x5c, 0xca, 0xb8, 0x5d, 0x84, 0x92, 0x42, 0x13, 0x2a, 0xbc, 0x65, 0x57, 0x82, 0x40, 0x3e, 0x57, 0x24, 0xcd, 0x50, 0x8b, 0x25, 0x2a, 0xb7, 0x6f, 0xfc, 0xef, 0xa2, 0xd0, 0xc0, 0x1f, 0x02, 0x24, 0x4a, 0x13, 0x96, 0x8f, 0x23, 0x13, 0xe6, 0x28, 0x58, 0x00, 0xa3, 0x47, 0xc7, 0x06, 0xa7, 0x84, 0x23, 0x2b, 0xbb, 0xbd, 0x96, 0x2b, 0x7f, 0x55, 0xcc, 0x8b, 0xc1, 0x57, 0x1f, 0x0e, 0x62, 0x65, 0x0f, 0xdd, 0x3d, 0x56, 0x8a, 0x73, 0xda, 0xae, 0x7e, 0x6d, 0xba, 0x81, 0x1c, 0x7e, 0x42, 0x8c, 0x20, 0x35, 0xd9, 0x43, 0x4d, 0x84, 0xfa, 0x84, 0xdb, 0x52, 0x2c, 0xf3, 0x0e, 0x27, 0x77, 0x0b, 0x6b, 0xbf, 0x11, 0x2f, 0x72, 0x78, 0x9f, 0x2e, 0xd8, 0x3e, 0xe6, 0x18, 0x37, 0x5a, 0x2a, 0x72, 0xf9, 0xda, 0x62, 0x90, 0x92, 0x95, 0xca, 0x1f, 0x9c, 0xe9, 0xb3, 0x3c, 0x2b, 0xcb, 0xf3, 0x01, 0x13, 0xbf, 0x5a, 0xcf, 0xc1, 0xb5, 0x0a, 0x60, 0xbd, 0xdd, 0xb5, 0x99, 0x64, 0x53, 0xb8, 0xa0, 0x96, 0xb3, 0x6f, 0xe2, 0x26, 0x77, 0x91, 0x8c, 0xe0, 0x62, 0x10, 0x02, 0x9f, 0x34, 0x0f, 0xa4, 0xd5, 0x92, 0x33, 0x51, 0xde, 0xbe, 0x8d, 0xba, 0x84, 0x7a, 0x60, 0x3c, 0x6a, 0xdb, 0x9f, 0x2b, 0xec, 0xde, 0xde, 0x01, 0x3f, 0x6e, 0x4d, 0xe5, 0x50, 0x86, 0xcb, 0xb4, 0xaf, 0xed, 0x44, 0x40, 0xc5, 0xca, 0x5a, 0x8c, 0xda, 0xd2, 0x2b, 0x7c, 0xa8, 0xee, 0xbe, 0xa6, 0xe5, 0x0a, 0xaa, 0x0e, 0xa5, 0xdf, 0x05, 0x52, 0xb7, 0x55, 0xc7, 0x22, 0x5d, 0x32, 0x6a, 0x97, 0x97, 0x63, 0x13, 0xdb, 0xc9, 0xdb, 0x79, 0x36, 0x7b, 0x85, 0x3a, 0x4a, 0xc5, 0x52, 0x89, 0xf9, 0x24, 0xe7, 0x9d, 0x77, 0xa9, 0x82, 0xff, 0x55, 0x1c, 0xa5, 0x71, 0x69, 0x2b, 0xd1, 0x02, 0x24, 0xf2, 0xb3, 0x26, 0xd4, 0x6b, 0xda, 0x04, 0x55, 0xe5, 0xc1, 0x0a, 0xc7, 0x6d, 0x30, 0x37, 0x90, 0x2a, 0xe4, 0x9e, 0x14, 0x33, 0x5e, 0x16, 0x17, 0x55, 0xc5, 0x5b, 0xb5, 0xcb, 0x34, 0x89, 0x92, 0xf1, 0x9d, 0x26, 0x8f, 0xa1, 0x07, 0xd4, 0xc6, 0xb2, 0x78, 0x50, 0xdb, 0x0c, 0x0c, 0x0b, 0x7c, 0x0b, 0x8c, 0x41, 0xd7, 0xb9, 0xe9, 0xdd, 0x8c, 0x88, 0xf7, 0xa3, 0x4d, 0xb2, 0x32, 0xcc, 0xd8, 0x17, 0xda, 0xcd, 0xb7, 0xce, 0x66, 0x9d, 0xd4, 0xfd, 0x5e, 0xff, 0xbd, 0x97, 0x3e, 0x29, 0x75, 0xe7, 0x7e, 0xa7, 0x62, 0x58, 0xaf, 0x25, 0x34, 0xa5, 0x41, 0xc7, 0x3d, 0xbc, 0x0d, 0x50, 0xca, 0x03, 0x03, 0x0f, 0x08, 0x5a, 0x1f, 0x95, 0x73, 0x78, 0x62, 0xbf, 0xaf, 0x72, 0x14, 0x69, 0x0e, 0xa5, 0xe5, 0x03, 0x0e, 0x78, 0x8e, 0x26, 0x28, 0x42, 0xf0, 0x07, 0x0b, 0x62, 0x20, 0x10, 0x67, 0x39, 0x46, 0xfa, 0xa9, 0x03, 0xcc, 0x04, 0x38, 0x7a, 0x66, 0xef, 0x20, 0x83, 0xb5, 0x8c, 0x4a, 0x56, 0x8e, 0x91, 0x00, 0xfc, 0x8e, 0x5c, 0x82, 0xde, 0x88, 0xa0, 0xc3, 0xe2, 0x68, 0x6e, 0x7d, 0x8d, 0xef, 0x3c, 0xdd, 0x65, 0xf4, 0x5d, 0xac, 0x51, 0xef, 0x24, 0x80, 0xae, 0xaa, 0x56, 0x97, 0x6f, 0xf9, 0xad, 0x7d, 0xda, 0x61, 0x3f, 0x98, 0x77, 0x3c, 0xa5, 0x91, 0xb6, 0x1c, 0x8c, 0x26, 0xda, 0x65, 0xa2, 0x09, 0x6d, 0xc1, 0xe2, 0x54, 0xe3, 0xb9, 0xca, 0x4c, 0x4c, 0x80, 0x8f, 0x77, 0x7b, 0x60, 0x9a, 0x1e, 0xdf, 0xb6, 0xf2, 0x48, 0x1e, 0x0e, 0xba, 0x4e, 0x54, 0x6d, 0x98, 0xe0, 0xe1, 0xa2, 0x1a, 0xa2, 0x77, 0x50, 0xcf, 0xc4, 0x63, 0x92, 0xec, 0x47, 0x19, 0x9d, 0xeb, 0xe6, 0x6b, 0xce, 0xc1, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x81, 0xac, 0x30, 0x81, 0xa9, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x5b, 0x25, 0x7b, 0x96, 0xa4, 0x65, 0x51, 0x7e, 0xb8, 0x39, 0xf3, 0xc0, 0x78, 0x66, 0x5e, 0xe8, 0x3a, 0xe7, 0xf0, 0xee, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x5b, 0x25, 0x7b, 0x96, 0xa4, 0x65, 0x51, 0x7e, 0xb8, 0x39, 0xf3, 0xc0, 0x78, 0x66, 0x5e, 0xe8, 0x3a, 0xe7, 0xf0, 0xee, 0x30, 0x46, 0x06, 0x03, 0x55, 0x1d, 0x20, 0x04, 0x3f, 0x30, 0x3d, 0x30, 0x3b, 0x06, 0x09, 0x60, 0x85, 0x74, 0x01, 0x59, 0x01, 0x02, 0x01, 0x01, 0x30, 0x2e, 0x30, 0x2c, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x01, 0x16, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x2e, 0x73, 0x77, 0x69, 0x73, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x27, 0xba, 0xe3, 0x94, 0x7c, 0xf1, 0xae, 0xc0, 0xde, 0x17, 0xe6, 0xe5, 0xd8, 0xd5, 0xf5, 0x54, 0xb0, 0x83, 0xf4, 0xbb, 0xcd, 0x5e, 0x05, 0x7b, 0x4f, 0x9f, 0x75, 0x66, 0xaf, 0x3c, 0xe8, 0x56, 0x7e, 0xfc, 0x72, 0x78, 0x38, 0x03, 0xd9, 0x2b, 0x62, 0x1b, 0x00, 0xb9, 0xf8, 0xe9, 0x60, 0xcd, 0xcc, 0xce, 0x51, 0x8a, 0xc7, 0x50, 0x31, 0x6e, 0xe1, 0x4a, 0x7e, 0x18, 0x2f, 0x69, 0x59, 0xb6, 0x3d, 0x64, 0x81, 0x2b, 0xe3, 0x83, 0x84, 0xe6, 0x22, 0x87, 0x8e, 0x7d, 0xe0, 0xee, 0x02, 0x99, 0x61, 0xb8, 0x1e, 0xf4, 0xb8, 0x2b, 0x88, 0x12, 0x16, 0x84, 0xc2, 0x31, 0x93, 0x38, 0x96, 0x31, 0xa6, 0xb9, 0x3b, 0x53, 0x3f, 0xc3, 0x24, 0x93, 0x56, 0x5b, 0x69, 0x92, 0xec, 0xc5, 0xc1, 0xbb, 0x38, 0x00, 0xe3, 0xec, 0x17, 0xa9, 0xb8, 0xdc, 0xc7, 0x7c, 0x01, 0x83, 0x9f, 0x32, 0x47, 0xba, 0x52, 0x22, 0x34, 0x1d, 0x32, 0x7a, 0x09, 0x56, 0xa7, 0x7c, 0x25, 0x36, 0xa9, 0x3d, 0x4b, 0xda, 0xc0, 0x82, 0x6f, 0x0a, 0xbb, 0x12, 0xc8, 0x87, 0x4b, 0x27, 0x11, 0xf9, 0x1e, 0x2d, 0xc7, 0x93, 0x3f, 0x9e, 0xdb, 0x5f, 0x26, 0x6b, 0x52, 0xd9, 0x2e, 0x8a, 0xf1, 0x14, 0xc6, 0x44, 0x8d, 0x15, 0xa9, 0xb7, 0xbf, 0xbd, 0xde, 0xa6, 0x1a, 0xee, 0xae, 0x2d, 0xfb, 0x48, 0x77, 0x17, 0xfe, 0xbb, 0xec, 0xaf, 0x18, 0xf5, 0x2a, 0x51, 0xf0, 0x39, 0x84, 0x97, 0x95, 0x6c, 0x6e, 0x1b, 0xc3, 0x2b, 0xc4, 0x74, 0x60, 0x79, 0x25, 0xb0, 0x0a, 0x27, 0xdf, 0xdf, 0x5e, 0xd2, 0x39, 0xcf, 0x45, 0x7d, 0x42, 0x4b, 0xdf, 0xb3, 0x2c, 0x1e, 0xc5, 0xc6, 0x5d, 0xca, 0x55, 0x3a, 0xa0, 0x9c, 0x69, 0x9a, 0x8f, 0xda, 0xef, 0xb2, 0xb0, 0x3c, 0x9f, 0x87, 0x6c, 0x12, 0x2b, 0x65, 0x70, 0x15, 0x52, 0x31, 0x1a, 0x24, 0xcf, 0x6f, 0x31, 0x23, 0x50, 0x1f, 0x8c, 0x4f, 0x8f, 0x23, 0xc3, 0x74, 0x41, 0x63, 0x1c, 0x55, 0xa8, 0x14, 0xdd, 0x3e, 0xe0, 0x51, 0x50, 0xcf, 0xf1, 0x1b, 0x30, 0x56, 0x0e, 0x92, 0xb0, 0x82, 0x85, 0xd8, 0x83, 0xcb, 0x22, 0x64, 0xbc, 0x2d, 0xb8, 0x25, 0xd5, 0x54, 0xa2, 0xb8, 0x06, 0xea, 0xad, 0x92, 0xa4, 0x24, 0xa0, 0xc1, 0x86, 0xb5, 0x4a, 0x13, 0x6a, 0x47, 0xcf, 0x2e, 0x0b, 0x56, 0x95, 0x54, 0xcb, 0xce, 0x9a, 0xdb, 0x6a, 0xb4, 0xa6, 0xb2, 0xdb, 0x41, 0x08, 0x86, 0x27, 0x77, 0xf7, 0x6a, 0xa0, 0x42, 0x6c, 0x0b, 0x38, 0xce, 0xd7, 0x75, 0x50, 0x32, 0x92, 0xc2, 0xdf, 0x2b, 0x30, 0x22, 0x48, 0xd0, 0xd5, 0x41, 0x38, 0x25, 0x5d, 0xa4, 0xe9, 0x5d, 0x9f, 0xc6, 0x94, 0x75, 0xd0, 0x45, 0xfd, 0x30, 0x97, 0x43, 0x8f, 0x90, 0xab, 0x0a, 0xc7, 0x86, 0x73, 0x60, 0x4a, 0x69, 0x2d, 0xde, 0xa5, 0x78, 0xd7, 0x06, 0xda, 0x6a, 0x9e, 0x4b, 0x3e, 0x77, 0x3a, 0x20, 0x13, 0x22, 0x01, 0xd0, 0xbf, 0x68, 0x9e, 0x63, 0x60, 0x6b, 0x35, 0x4d, 0x0b, 0x6d, 0xba, 0xa1, 0x3d, 0xc0, 0x93, 0xe0, 0x7f, 0x23, 0xb3, 0x55, 0xad, 0x72, 0x25, 0x4e, 0x46, 0xf9, 0xd2, 0x16, 0xef, 0xb0, 0x64, 0xc1, 0x01, 0x9e, 0xe9, 0xca, 0xa0, 0x6a, 0x98, 0x0e, 0xcf, 0xd8, 0x60, 0xf2, 0x2f, 0x49, 0xb8, 0xe4, 0x42, 0xe1, 0x38, 0x35, 0x16, 0xf4, 0xc8, 0x6e, 0x4f, 0xf7, 0x81, 0x56, 0xe8, 0xba, 0xa3, 0xbe, 0x23, 0xaf, 0xae, 0xfd, 0x6f, 0x03, 0xe0, 0x02, 0x3b, 0x30, 0x76, 0xfa, 0x1b, 0x6d, 0x41, 0xcf, 0x01, 0xb1, 0xe9, 0xb8, 0xc9, 0x66, 0xf4, 0xdb, 0x26, 0xf3, 0x3a, 0xa4, 0x74, 0xf2, 0x49, 0x24, 0x5b, 0xc9, 0xb0, 0xd0, 0x57, 0xc1, 0xfa, 0x3e, 0x7a, 0xe1, 0x97, 0xc9, 0x30, 0x82, 0x02, 0x40, 0x30, 0x82, 0x01, 0xe5, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0c, 0x01, 0x54, 0x48, 0xef, 0x21, 0xfd, 0x97, 0x59, 0x0d, 0xf5, 0x04, 0x0a, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x30, 0x71, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x48, 0x55, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x08, 0x42, 0x75, 0x64, 0x61, 0x70, 0x65, 0x73, 0x74, 0x31, 0x16, 0x30, 0x14, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0d, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x65, 0x63, 0x20, 0x4c, 0x74, 0x64, 0x2e, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55, 0x04, 0x61, 0x0c, 0x0e, 0x56, 0x41, 0x54, 0x48, 0x55, 0x2d, 0x32, 0x33, 0x35, 0x38, 0x34, 0x34, 0x39, 0x37, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x15, 0x65, 0x2d, 0x53, 0x7a, 0x69, 0x67, 0x6e, 0x6f, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x32, 0x30, 0x31, 0x37, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x37, 0x30, 0x38, 0x32, 0x32, 0x31, 0x32, 0x30, 0x37, 0x30, 0x36, 0x5a, 0x17, 0x0d, 0x34, 0x32, 0x30, 0x38, 0x32, 0x32, 0x31, 0x32, 0x30, 0x37, 0x30, 0x36, 0x5a, 0x30, 0x71, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x48, 0x55, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x08, 0x42, 0x75, 0x64, 0x61, 0x70, 0x65, 0x73, 0x74, 0x31, 0x16, 0x30, 0x14, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0d, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x65, 0x63, 0x20, 0x4c, 0x74, 0x64, 0x2e, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55, 0x04, 0x61, 0x0c, 0x0e, 0x56, 0x41, 0x54, 0x48, 0x55, 0x2d, 0x32, 0x33, 0x35, 0x38, 0x34, 0x34, 0x39, 0x37, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x15, 0x65, 0x2d, 0x53, 0x7a, 0x69, 0x67, 0x6e, 0x6f, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x32, 0x30, 0x31, 0x37, 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0x96, 0xdc, 0x3d, 0x8a, 0xd8, 0xb0, 0x7b, 0x6f, 0xc6, 0x27, 0xbe, 0x44, 0x90, 0xb1, 0xb3, 0x56, 0x15, 0x7b, 0x8e, 0x43, 0x24, 0x7d, 0x1a, 0x84, 0x59, 0xee, 0x63, 0x68, 0xb2, 0xc6, 0x5e, 0x87, 0xd0, 0x15, 0x48, 0x1e, 0xa8, 0x90, 0xad, 0xbd, 0x53, 0xa2, 0xda, 0xde, 0x3a, 0x90, 0xa6, 0x60, 0x5f, 0x68, 0x32, 0xb5, 0x86, 0x41, 0xdf, 0x87, 0x5b, 0x2c, 0x7b, 0xc5, 0xfe, 0x7c, 0x7a, 0xda, 0xa3, 0x63, 0x30, 0x61, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x87, 0x11, 0x15, 0x08, 0xd1, 0xaa, 0xc1, 0x78, 0x0c, 0xb1, 0xaf, 0xce, 0xc6, 0xc9, 0x90, 0xef, 0xbf, 0x30, 0x04, 0xc0, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x87, 0x11, 0x15, 0x08, 0xd1, 0xaa, 0xc1, 0x78, 0x0c, 0xb1, 0xaf, 0xce, 0xc6, 0xc9, 0x90, 0xef, 0xbf, 0x30, 0x04, 0xc0, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x03, 0x49, 0x00, 0x30, 0x46, 0x02, 0x21, 0x00, 0xb5, 0x57, 0xdd, 0xd7, 0x8a, 0x55, 0x0b, 0x36, 0xe1, 0x86, 0x44, 0xfa, 0xd4, 0xd9, 0x68, 0x8d, 0xb8, 0xdc, 0x23, 0x8a, 0x8a, 0x0d, 0xd4, 0x2f, 0x7d, 0xea, 0x73, 0xec, 0xbf, 0x4d, 0x6c, 0xa8, 0x02, 0x21, 0x00, 0xcb, 0xa5, 0xb4, 0x12, 0xfa, 0xe7, 0xb5, 0xe8, 0xcf, 0x7e, 0x93, 0xfc, 0xf3, 0x35, 0x8f, 0x6f, 0x4e, 0x5a, 0x7c, 0xb4, 0xbc, 0x4e, 0xb2, 0xfc, 0x72, 0xaa, 0x5b, 0x59, 0xf9, 0xe7, 0xdc, 0x31, 0x30, 0x82, 0x02, 0x60, 0x30, 0x82, 0x02, 0x07, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0c, 0x0d, 0x6a, 0x5f, 0x08, 0x3f, 0x28, 0x5c, 0x3e, 0x51, 0x95, 0xdf, 0x5d, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x30, 0x81, 0x91, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x08, 0x49, 0x6c, 0x6c, 0x69, 0x6e, 0x6f, 0x69, 0x73, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x43, 0x68, 0x69, 0x63, 0x61, 0x67, 0x6f, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x18, 0x54, 0x72, 0x75, 0x73, 0x74, 0x77, 0x61, 0x76, 0x65, 0x20, 0x48, 0x6f, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x31, 0x3a, 0x30, 0x38, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x31, 0x54, 0x72, 0x75, 0x73, 0x74, 0x77, 0x61, 0x76, 0x65, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x45, 0x43, 0x43, 0x20, 0x50, 0x32, 0x35, 0x36, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x37, 0x30, 0x38, 0x32, 0x33, 0x31, 0x39, 0x33, 0x35, 0x31, 0x30, 0x5a, 0x17, 0x0d, 0x34, 0x32, 0x30, 0x38, 0x32, 0x33, 0x31, 0x39, 0x33, 0x35, 0x31, 0x30, 0x5a, 0x30, 0x81, 0x91, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x08, 0x49, 0x6c, 0x6c, 0x69, 0x6e, 0x6f, 0x69, 0x73, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x43, 0x68, 0x69, 0x63, 0x61, 0x67, 0x6f, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x18, 0x54, 0x72, 0x75, 0x73, 0x74, 0x77, 0x61, 0x76, 0x65, 0x20, 0x48, 0x6f, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x31, 0x3a, 0x30, 0x38, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x31, 0x54, 0x72, 0x75, 0x73, 0x74, 0x77, 0x61, 0x76, 0x65, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x45, 0x43, 0x43, 0x20, 0x50, 0x32, 0x35, 0x36, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0x7e, 0xfb, 0x6c, 0xe6, 0x23, 0xe3, 0x73, 0x32, 0x08, 0xca, 0x60, 0xe6, 0x53, 0x9c, 0xba, 0x74, 0x8d, 0x18, 0xb0, 0x78, 0x90, 0x52, 0x80, 0xdd, 0x38, 0xc0, 0x4a, 0x1d, 0xd1, 0xa8, 0xcc, 0x93, 0xa4, 0x97, 0x06, 0x38, 0xca, 0x0d, 0x15, 0x62, 0xc6, 0x8e, 0x01, 0x2a, 0x65, 0x9d, 0xaa, 0xdf, 0x34, 0x91, 0x2e, 0x81, 0xc1, 0xe4, 0x33, 0x92, 0x31, 0xc4, 0xfd, 0x09, 0x3a, 0xa6, 0x3f, 0xad, 0xa3, 0x43, 0x30, 0x41, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x05, 0x03, 0x03, 0x07, 0x06, 0x00, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xa3, 0x41, 0x06, 0xac, 0x90, 0x6d, 0xd1, 0x4a, 0xeb, 0x75, 0xa5, 0x4a, 0x10, 0x99, 0xb3, 0xb1, 0xa1, 0x8b, 0x4a, 0xf7, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x03, 0x47, 0x00, 0x30, 0x44, 0x02, 0x20, 0x07, 0xe6, 0x54, 0xda, 0x0e, 0xa0, 0x5a, 0xb2, 0xae, 0x11, 0x9f, 0x87, 0xc5, 0xb6, 0xff, 0x69, 0xde, 0x25, 0xbe, 0xf8, 0xa0, 0xb7, 0x08, 0xf3, 0x44, 0xce, 0x2a, 0xdf, 0x08, 0x21, 0x0c, 0x37, 0x02, 0x20, 0x2d, 0x26, 0x03, 0xa0, 0x05, 0xbd, 0x6b, 0xd1, 0xf6, 0x5c, 0xf8, 0x65, 0xcc, 0x86, 0x6d, 0xb3, 0x9c, 0x34, 0x48, 0x63, 0x84, 0x09, 0xc5, 0x8d, 0x77, 0x1a, 0xe2, 0xcc, 0x9c, 0xe1, 0x74, 0x7b, 0x30, 0x82, 0x05, 0xda, 0x30, 0x82, 0x03, 0xc2, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0c, 0x05, 0xf7, 0x0e, 0x86, 0xda, 0x49, 0xf3, 0x46, 0x35, 0x2e, 0xba, 0xb2, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0x88, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x08, 0x49, 0x6c, 0x6c, 0x69, 0x6e, 0x6f, 0x69, 0x73, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x07, 0x43, 0x68, 0x69, 0x63, 0x61, 0x67, 0x6f, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x18, 0x54, 0x72, 0x75, 0x73, 0x74, 0x77, 0x61, 0x76, 0x65, 0x20, 0x48, 0x6f, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x31, 0x31, 0x30, 0x2f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x28, 0x54, 0x72, 0x75, 0x73, 0x74, 0x77, 0x61, 0x76, 0x65, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x37, 0x30, 0x38, 0x32, 0x33, 0x31, 0x39, 0x33, 0x34, 0x31, 0x32, 0x5a, 0x17, 0x0d, 0x34, 0x32, 0x30, 0x38, 0x32, 0x33, 0x31, 0x39, 0x33, 0x34, 0x31, 0x32, 0x5a, 0x30, 0x81, 0x88, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x08, 0x49, 0x6c, 0x6c, 0x69, 0x6e, 0x6f, 0x69, 0x73, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x07, 0x43, 0x68, 0x69, 0x63, 0x61, 0x67, 0x6f, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x18, 0x54, 0x72, 0x75, 0x73, 0x74, 0x77, 0x61, 0x76, 0x65, 0x20, 0x48, 0x6f, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x31, 0x31, 0x30, 0x2f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x28, 0x54, 0x72, 0x75, 0x73, 0x74, 0x77, 0x61, 0x76, 0x65, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xb9, 0x5d, 0x51, 0x28, 0x4b, 0x3c, 0x37, 0x92, 0xd1, 0x82, 0xce, 0xbd, 0x1d, 0xbd, 0xcd, 0xdd, 0xb8, 0xab, 0xcf, 0x0a, 0x3e, 0xe1, 0x5d, 0xe5, 0xdc, 0xaa, 0x09, 0xb9, 0x57, 0x02, 0x3e, 0xe6, 0x63, 0x61, 0xdf, 0xf2, 0x0f, 0x82, 0x63, 0xae, 0xa3, 0xf7, 0xac, 0x73, 0xd1, 0x7c, 0xe7, 0xb3, 0x0b, 0xaf, 0x08, 0x00, 0x09, 0x59, 0x7f, 0xcd, 0x29, 0x2a, 0x88, 0x93, 0x87, 0x17, 0x18, 0x80, 0xed, 0x88, 0xb2, 0xb4, 0xb6, 0x10, 0x1f, 0x2d, 0xd6, 0x5f, 0x55, 0xa2, 0x13, 0x5d, 0xd1, 0xc6, 0xeb, 0x06, 0x56, 0x89, 0x88, 0xfe, 0xac, 0x32, 0x9d, 0xfd, 0x5c, 0xc3, 0x05, 0xc7, 0x6e, 0xee, 0x86, 0x89, 0xba, 0x88, 0x03, 0x9d, 0x72, 0x21, 0x86, 0x90, 0xae, 0x8f, 0x03, 0xa5, 0xdc, 0x9f, 0x88, 0x28, 0xcb, 0xa3, 0x92, 0x49, 0x0f, 0xec, 0xd0, 0x0f, 0xe2, 0x6d, 0x44, 0x4f, 0x80, 0x6a, 0xb2, 0xd4, 0xe7, 0xa0, 0x0a, 0x53, 0x01, 0xba, 0x8e, 0x97, 0x91, 0x76, 0x6e, 0xbc, 0xfc, 0xd5, 0x6b, 0x36, 0xe6, 0x40, 0x88, 0xd6, 0x7b, 0x2f, 0x5f, 0x05, 0xe8, 0x2c, 0x6d, 0x11, 0xf3, 0xe7, 0xb2, 0xbe, 0x92, 0x44, 0x4c, 0xd2, 0x97, 0xa4, 0xfe, 0xd2, 0x72, 0x81, 0x43, 0x07, 0x9c, 0xe9, 0x11, 0x3e, 0xf5, 0x8b, 0x1a, 0x59, 0x7d, 0x1f, 0x68, 0x58, 0xdd, 0x04, 0x00, 0x2c, 0x96, 0xf3, 0x43, 0xb3, 0x7e, 0x98, 0x19, 0x74, 0xd9, 0x9c, 0x73, 0xd9, 0x18, 0xbe, 0x41, 0xc7, 0x34, 0x79, 0xd9, 0xf4, 0x62, 0xc2, 0x43, 0xb9, 0xb3, 0x27, 0xb0, 0x22, 0xcb, 0xf9, 0x3d, 0x52, 0xc7, 0x30, 0x47, 0xb3, 0xc9, 0x3e, 0xb8, 0x6a, 0xe2, 0xe7, 0xe8, 0x81, 0x70, 0x5e, 0x42, 0x8b, 0x4f, 0x26, 0xa5, 0xfe, 0x3a, 0xc2, 0x20, 0x6e, 0xbb, 0xf8, 0x16, 0x8e, 0xcd, 0x0c, 0xa9, 0xb4, 0x1b, 0x6c, 0x76, 0x10, 0xe1, 0x58, 0x79, 0x46, 0x3e, 0x54, 0xce, 0x80, 0xa8, 0x57, 0x09, 0x37, 0x29, 0x1b, 0x99, 0x13, 0x8f, 0x0c, 0xc8, 0xd6, 0x2c, 0x1c, 0xfb, 0x05, 0xe8, 0x08, 0x95, 0x3d, 0x65, 0x46, 0xdc, 0xee, 0xcd, 0x69, 0xe2, 0x4d, 0x8f, 0x87, 0x28, 0x4e, 0x34, 0x0b, 0x3e, 0xcf, 0x14, 0xd9, 0xbb, 0xdd, 0xb6, 0x50, 0x9a, 0xad, 0x77, 0xd4, 0x19, 0xd6, 0xda, 0x1a, 0x88, 0xc8, 0x4e, 0x1b, 0x27, 0x75, 0xd8, 0xb2, 0x08, 0xf1, 0xae, 0x83, 0x30, 0xb9, 0x11, 0x0e, 0xcd, 0x87, 0xf0, 0x84, 0x8d, 0x15, 0x72, 0x7c, 0xa1, 0xef, 0xcc, 0xf2, 0x88, 0x61, 0xba, 0xf4, 0x69, 0xbb, 0x0c, 0x8c, 0x0b, 0x75, 0x57, 0x04, 0xb8, 0x4e, 0x2a, 0x14, 0x2e, 0x3d, 0x0f, 0x1c, 0x1e, 0x32, 0xa6, 0x62, 0x36, 0xee, 0x66, 0xe2, 0x22, 0xb8, 0x05, 0x40, 0x63, 0x10, 0x22, 0xf3, 0x33, 0x1d, 0x74, 0x72, 0x8a, 0x2c, 0xf5, 0x39, 0x29, 0xa0, 0xd3, 0xe7, 0x1b, 0x80, 0x84, 0x2d, 0xc5, 0x3d, 0xe3, 0x4d, 0xb1, 0xfd, 0x1a, 0x6f, 0xba, 0x65, 0x07, 0x3b, 0x58, 0xec, 0x42, 0x45, 0x26, 0xfb, 0xd8, 0xda, 0x25, 0x72, 0xc4, 0xf6, 0x00, 0xb1, 0x22, 0x79, 0xbd, 0xe3, 0x7c, 0x59, 0x62, 0x4a, 0x9c, 0x05, 0x6f, 0x3d, 0xce, 0xe6, 0xd6, 0x47, 0x63, 0x99, 0xc6, 0x24, 0x6f, 0x72, 0x12, 0xc8, 0xac, 0x7f, 0x90, 0xb4, 0x0b, 0x91, 0x70, 0xe8, 0xb7, 0xe6, 0x16, 0x10, 0x71, 0x17, 0xce, 0xde, 0x06, 0x4f, 0x48, 0x41, 0x7d, 0x35, 0x4a, 0xa3, 0x89, 0xf2, 0xc9, 0x4b, 0x7b, 0x41, 0x11, 0x6d, 0x67, 0xb7, 0x08, 0x98, 0x4c, 0xe5, 0x11, 0x19, 0xae, 0x42, 0x80, 0xdc, 0xfb, 0x90, 0x05, 0xd4, 0xf8, 0x50, 0xca, 0xbe, 0xe4, 0xad, 0xc7, 0xc2, 0x94, 0xd7, 0x16, 0x9d, 0xe6, 0x17, 0x8f, 0xaf, 0x36, 0xfb, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x99, 0xe0, 0x19, 0x67, 0x0d, 0x62, 0xdb, 0x76, 0xb3, 0xda, 0x3d, 0xb8, 0x5b, 0xe8, 0xfd, 0x42, 0xd2, 0x31, 0x0e, 0x87, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x98, 0x73, 0x70, 0xe2, 0xb0, 0xd3, 0xed, 0x39, 0xec, 0x4c, 0x60, 0xd9, 0xa9, 0x12, 0x86, 0x17, 0x1e, 0x96, 0xd0, 0xe8, 0x54, 0x28, 0x3b, 0x64, 0x2d, 0x21, 0xa6, 0xf8, 0x9d, 0x56, 0x13, 0x6a, 0x48, 0x3d, 0x4f, 0xc7, 0x3e, 0x29, 0xdb, 0x6d, 0x58, 0x83, 0x54, 0x3d, 0x87, 0x7d, 0x23, 0x05, 0xd4, 0xe4, 0x1c, 0xdc, 0xe8, 0x38, 0x65, 0x86, 0xc5, 0x75, 0xa7, 0x5a, 0xdb, 0x35, 0x05, 0xbd, 0x77, 0xde, 0xbb, 0x29, 0x37, 0x40, 0x05, 0x07, 0xc3, 0x94, 0x52, 0x9f, 0xca, 0x64, 0xdd, 0xf1, 0x1b, 0x2b, 0xdc, 0x46, 0x0a, 0x10, 0x02, 0x31, 0xfd, 0x4a, 0x68, 0x0d, 0x07, 0x64, 0x90, 0xe6, 0x1e, 0xf5, 0x2a, 0xa1, 0xa8, 0xbb, 0x3c, 0x5d, 0xf9, 0xa3, 0x08, 0x0b, 0x11, 0x0c, 0xf1, 0x3f, 0x2d, 0x10, 0x94, 0x6f, 0xfe, 0xe2, 0x34, 0x87, 0x83, 0xd6, 0xcf, 0xe5, 0x1b, 0x35, 0x6d, 0xd2, 0x03, 0xe1, 0xb0, 0x0d, 0xa8, 0xa0, 0xaa, 0x46, 0x27, 0x82, 0x36, 0xa7, 0x15, 0xb6, 0x08, 0xa6, 0x42, 0x54, 0x57, 0xb6, 0x99, 0x5a, 0xe2, 0x0b, 0x79, 0x90, 0xd7, 0x57, 0x12, 0x51, 0x35, 0x19, 0x88, 0x41, 0x68, 0x25, 0xd4, 0x37, 0x17, 0x84, 0x15, 0xfb, 0x01, 0x72, 0xdc, 0x95, 0xde, 0x52, 0x26, 0x20, 0x98, 0x26, 0xe2, 0x76, 0xf5, 0x27, 0x6f, 0xfa, 0x00, 0x3b, 0x4a, 0x61, 0xd9, 0x0d, 0xcb, 0x51, 0x93, 0x2a, 0xfd, 0x16, 0x06, 0x96, 0xa7, 0x23, 0x9a, 0x23, 0x48, 0xfe, 0x51, 0xbd, 0xb6, 0xc4, 0xb0, 0xb1, 0x54, 0xce, 0xde, 0x6c, 0x41, 0xad, 0x16, 0x67, 0x7e, 0xdb, 0xfd, 0x38, 0xcd, 0xb9, 0x38, 0x4e, 0xb2, 0xc1, 0x60, 0xcb, 0x9d, 0x17, 0xdf, 0x58, 0x9e, 0x7a, 0x62, 0xb2, 0x26, 0x8f, 0x74, 0x95, 0x9b, 0xe4, 0x5b, 0x1d, 0xd2, 0x0f, 0xdd, 0x98, 0x1c, 0x9b, 0x59, 0xb9, 0x23, 0xd3, 0x31, 0xa0, 0xa6, 0xff, 0x38, 0xdd, 0xcf, 0x20, 0x4f, 0xe9, 0x58, 0x56, 0x3a, 0x67, 0xc3, 0xd1, 0xf6, 0x99, 0x99, 0x9d, 0xba, 0x36, 0xb6, 0x80, 0x2f, 0x88, 0x47, 0x4f, 0x86, 0xbf, 0x44, 0x3a, 0x80, 0xe4, 0x37, 0x1c, 0xa6, 0xba, 0xea, 0x97, 0x98, 0x11, 0xd0, 0x84, 0x62, 0x47, 0x64, 0x1e, 0xaa, 0xee, 0x40, 0xbf, 0x34, 0xb1, 0x9c, 0x8f, 0x4e, 0xe1, 0xf2, 0x92, 0x4f, 0x1f, 0x8e, 0xf3, 0x9e, 0x97, 0xde, 0xf3, 0xa6, 0x79, 0x6a, 0x89, 0x71, 0x4f, 0x4b, 0x27, 0x17, 0x48, 0xfe, 0xec, 0xf4, 0x50, 0x0f, 0x4f, 0x49, 0x7d, 0xcc, 0x45, 0xe3, 0xbd, 0x7a, 0x40, 0xc5, 0x41, 0xdc, 0x61, 0x56, 0x27, 0x06, 0x69, 0xe5, 0x72, 0x41, 0x81, 0xd3, 0xb6, 0x01, 0x89, 0xa0, 0x2f, 0x3a, 0x72, 0x79, 0xfe, 0x3a, 0x30, 0xbf, 0x41, 0xec, 0xc7, 0x62, 0x3e, 0x91, 0x4b, 0xc7, 0xd9, 0x31, 0x76, 0x42, 0xf9, 0xf7, 0x3c, 0x63, 0xec, 0x26, 0x8c, 0x73, 0x0c, 0x7d, 0x1a, 0x1d, 0xea, 0xa8, 0x7c, 0x87, 0xa8, 0xc2, 0x27, 0x7c, 0xe1, 0x33, 0x41, 0x0f, 0xcf, 0xcf, 0xfc, 0x00, 0xa0, 0x22, 0x80, 0x9e, 0x4a, 0xa7, 0x6f, 0x00, 0xb0, 0x41, 0x45, 0xb7, 0x22, 0xca, 0x68, 0x48, 0xc5, 0x42, 0xa2, 0xae, 0xdd, 0x1d, 0xf2, 0xe0, 0x6e, 0x4e, 0x05, 0x58, 0xb1, 0xc0, 0x90, 0x16, 0x2a, 0xa4, 0x3d, 0x10, 0x40, 0xbe, 0x8f, 0x62, 0x63, 0x83, 0xa9, 0x9c, 0x82, 0x7d, 0x2d, 0x02, 0xe9, 0x83, 0x30, 0x7c, 0xcb, 0x27, 0xc9, 0xfd, 0x1e, 0x66, 0x00, 0xb0, 0x2e, 0xd3, 0x21, 0x2f, 0x8e, 0x33, 0x16, 0x6c, 0x98, 0xed, 0x10, 0xa8, 0x07, 0xd6, 0xcc, 0x93, 0xcf, 0xdb, 0xd1, 0x69, 0x1c, 0xe4, 0xca, 0xc9, 0xe0, 0xb6, 0x9c, 0xe9, 0xce, 0x71, 0x71, 0xde, 0x6c, 0x3f, 0x16, 0xa4, 0x79, 0x30, 0x82, 0x02, 0x9d, 0x30, 0x82, 0x02, 0x24, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0c, 0x08, 0xbd, 0x85, 0x97, 0x6c, 0x99, 0x27, 0xa4, 0x80, 0x68, 0x47, 0x3b, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x30, 0x81, 0x91, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x08, 0x49, 0x6c, 0x6c, 0x69, 0x6e, 0x6f, 0x69, 0x73, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x43, 0x68, 0x69, 0x63, 0x61, 0x67, 0x6f, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x18, 0x54, 0x72, 0x75, 0x73, 0x74, 0x77, 0x61, 0x76, 0x65, 0x20, 0x48, 0x6f, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x31, 0x3a, 0x30, 0x38, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x31, 0x54, 0x72, 0x75, 0x73, 0x74, 0x77, 0x61, 0x76, 0x65, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x45, 0x43, 0x43, 0x20, 0x50, 0x33, 0x38, 0x34, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x37, 0x30, 0x38, 0x32, 0x33, 0x31, 0x39, 0x33, 0x36, 0x34, 0x33, 0x5a, 0x17, 0x0d, 0x34, 0x32, 0x30, 0x38, 0x32, 0x33, 0x31, 0x39, 0x33, 0x36, 0x34, 0x33, 0x5a, 0x30, 0x81, 0x91, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x08, 0x49, 0x6c, 0x6c, 0x69, 0x6e, 0x6f, 0x69, 0x73, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x43, 0x68, 0x69, 0x63, 0x61, 0x67, 0x6f, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x18, 0x54, 0x72, 0x75, 0x73, 0x74, 0x77, 0x61, 0x76, 0x65, 0x20, 0x48, 0x6f, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x31, 0x3a, 0x30, 0x38, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x31, 0x54, 0x72, 0x75, 0x73, 0x74, 0x77, 0x61, 0x76, 0x65, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x45, 0x43, 0x43, 0x20, 0x50, 0x33, 0x38, 0x34, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x76, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x22, 0x03, 0x62, 0x00, 0x04, 0x6b, 0xda, 0x0d, 0x75, 0x35, 0x08, 0x31, 0x47, 0x05, 0xae, 0x45, 0x99, 0x55, 0xf1, 0x11, 0x13, 0x2e, 0x4a, 0xf8, 0x10, 0x31, 0x23, 0xa3, 0x7e, 0x83, 0xd3, 0x7f, 0x28, 0x08, 0x3a, 0x26, 0x1a, 0x3a, 0xcf, 0x97, 0x82, 0x1f, 0x80, 0xb7, 0x27, 0x09, 0x8f, 0xd1, 0x8e, 0x30, 0xc4, 0x0a, 0x9b, 0x0e, 0xac, 0x58, 0x04, 0xab, 0xf7, 0x36, 0x7d, 0x94, 0x23, 0xa4, 0x9b, 0x0a, 0x8a, 0x8b, 0xab, 0xeb, 0xfd, 0x39, 0x25, 0x66, 0xf1, 0x5e, 0xfe, 0x8c, 0xae, 0x8d, 0x41, 0x79, 0x9d, 0x09, 0x60, 0xce, 0x28, 0xa9, 0xd3, 0x8a, 0x6d, 0xf3, 0xd6, 0x45, 0xd4, 0xf2, 0x98, 0x84, 0x38, 0x65, 0xa0, 0xa3, 0x43, 0x30, 0x41, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x05, 0x03, 0x03, 0x07, 0x06, 0x00, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x55, 0xa9, 0x84, 0x89, 0xd2, 0xc1, 0x32, 0xbd, 0x18, 0xcb, 0x6c, 0xa6, 0x07, 0x4e, 0xc8, 0xe7, 0x9d, 0xbe, 0x82, 0x90, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x03, 0x67, 0x00, 0x30, 0x64, 0x02, 0x30, 0x37, 0x01, 0x92, 0x97, 0x45, 0x12, 0x7e, 0xa0, 0xf3, 0x3e, 0xad, 0x19, 0x3a, 0x72, 0xdd, 0xf4, 0x50, 0x93, 0x03, 0x12, 0xbe, 0x44, 0xd2, 0x4f, 0x41, 0xa4, 0x8c, 0x9c, 0x9d, 0x1f, 0xa3, 0xf6, 0xc2, 0x92, 0xe7, 0x48, 0x14, 0xfe, 0x4e, 0x9b, 0xa5, 0x91, 0x57, 0xae, 0xc6, 0x37, 0x72, 0xbb, 0x02, 0x30, 0x67, 0x25, 0x0a, 0xb1, 0x0c, 0x5e, 0xee, 0xa9, 0x63, 0x92, 0x6f, 0xe5, 0x90, 0x0b, 0xfe, 0x66, 0x22, 0xca, 0x47, 0xfd, 0x8a, 0x31, 0xf7, 0x83, 0xfe, 0x7a, 0xbf, 0x10, 0xbe, 0x18, 0x2b, 0x1e, 0x8f, 0xf6, 0x29, 0x1e, 0x94, 0x59, 0xef, 0x8e, 0x21, 0x37, 0xcb, 0x51, 0x98, 0xa5, 0x6e, 0x4b, 0x30, 0x82, 0x04, 0x33, 0x30, 0x82, 0x03, 0x1b, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x03, 0x09, 0x83, 0xf3, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x4d, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x44, 0x45, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0c, 0x44, 0x2d, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x47, 0x6d, 0x62, 0x48, 0x31, 0x27, 0x30, 0x25, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x1e, 0x44, 0x2d, 0x54, 0x52, 0x55, 0x53, 0x54, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x33, 0x20, 0x43, 0x41, 0x20, 0x32, 0x20, 0x32, 0x30, 0x30, 0x39, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x39, 0x31, 0x31, 0x30, 0x35, 0x30, 0x38, 0x33, 0x35, 0x35, 0x38, 0x5a, 0x17, 0x0d, 0x32, 0x39, 0x31, 0x31, 0x30, 0x35, 0x30, 0x38, 0x33, 0x35, 0x35, 0x38, 0x5a, 0x30, 0x4d, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x44, 0x45, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0c, 0x44, 0x2d, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x47, 0x6d, 0x62, 0x48, 0x31, 0x27, 0x30, 0x25, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x1e, 0x44, 0x2d, 0x54, 0x52, 0x55, 0x53, 0x54, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x33, 0x20, 0x43, 0x41, 0x20, 0x32, 0x20, 0x32, 0x30, 0x30, 0x39, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xd3, 0xb2, 0x4a, 0xcf, 0x7a, 0x47, 0xef, 0x75, 0x9b, 0x23, 0xfa, 0x3a, 0x2f, 0xd6, 0x50, 0x45, 0x89, 0x35, 0x3a, 0xc6, 0x6b, 0xdb, 0xfe, 0xdb, 0x00, 0x68, 0xa8, 0xe0, 0x03, 0x11, 0x1d, 0x37, 0x50, 0x08, 0x9f, 0x4d, 0x4a, 0x68, 0x94, 0x35, 0xb3, 0x53, 0xd1, 0x94, 0x63, 0xa7, 0x20, 0x56, 0xaf, 0xde, 0x51, 0x78, 0xec, 0x2a, 0x3d, 0xf3, 0x48, 0x48, 0x50, 0x3e, 0x0a, 0xdf, 0x46, 0x55, 0x8b, 0x27, 0x6d, 0xc3, 0x10, 0x4d, 0x0d, 0x91, 0x52, 0x43, 0xd8, 0x87, 0xe0, 0x5d, 0x4e, 0x36, 0xb5, 0x21, 0xca, 0x5f, 0x39, 0x40, 0x04, 0x5f, 0x5b, 0x7e, 0xcc, 0xa3, 0xc6, 0x2b, 0xa9, 0x40, 0x1e, 0xd9, 0x36, 0x84, 0xd6, 0x48, 0xf3, 0x92, 0x1e, 0x34, 0x46, 0x20, 0x24, 0xc1, 0xa4, 0x51, 0x8e, 0x4a, 0x1a, 0xef, 0x50, 0x3f, 0x69, 0x5d, 0x19, 0x7f, 0x45, 0xc3, 0xc7, 0x01, 0x8f, 0x51, 0xc9, 0x23, 0xe8, 0x72, 0xae, 0xb4, 0xbc, 0x56, 0x09, 0x7f, 0x12, 0xcb, 0x1c, 0xb1, 0xaf, 0x29, 0x90, 0x0a, 0xc9, 0x55, 0xcc, 0x0f, 0xd3, 0xb4, 0x1a, 0xed, 0x47, 0x35, 0x5a, 0x4a, 0xed, 0x9c, 0x73, 0x04, 0x21, 0xd0, 0xaa, 0xbd, 0x0c, 0x13, 0xb5, 0x00, 0xca, 0x26, 0x6c, 0xc4, 0x6b, 0x0c, 0x94, 0x5a, 0x95, 0x94, 0xda, 0x50, 0x9a, 0xf1, 0xff, 0xa5, 0x2b, 0x66, 0x31, 0xa4, 0xc9, 0x38, 0xa0, 0xdf, 0x1d, 0x1f, 0xb8, 0x09, 0x2e, 0xf3, 0xa7, 0xe8, 0x67, 0x52, 0xab, 0x95, 0x1f, 0xe0, 0x46, 0x3e, 0xd8, 0xa4, 0xc3, 0xca, 0x5a, 0xc5, 0x31, 0x80, 0xe8, 0x48, 0x9a, 0x9f, 0x94, 0x69, 0xfe, 0x19, 0xdd, 0xd8, 0x73, 0x7c, 0x81, 0xca, 0x96, 0xde, 0x8e, 0xed, 0xb3, 0x32, 0x05, 0x65, 0x84, 0x34, 0xe6, 0xe6, 0xfd, 0x57, 0x10, 0xb5, 0x5f, 0x76, 0xbf, 0x2f, 0xb0, 0x10, 0x0d, 0xc5, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x82, 0x01, 0x1a, 0x30, 0x82, 0x01, 0x16, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xfd, 0xda, 0x14, 0xc4, 0x9f, 0x30, 0xde, 0x21, 0xbd, 0x1e, 0x42, 0x39, 0xfc, 0xab, 0x63, 0x23, 0x49, 0xe0, 0xf1, 0x84, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x81, 0xd3, 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04, 0x81, 0xcb, 0x30, 0x81, 0xc8, 0x30, 0x81, 0x80, 0xa0, 0x7e, 0xa0, 0x7c, 0x86, 0x7a, 0x6c, 0x64, 0x61, 0x70, 0x3a, 0x2f, 0x2f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x2e, 0x64, 0x2d, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x6e, 0x65, 0x74, 0x2f, 0x43, 0x4e, 0x3d, 0x44, 0x2d, 0x54, 0x52, 0x55, 0x53, 0x54, 0x25, 0x32, 0x30, 0x52, 0x6f, 0x6f, 0x74, 0x25, 0x32, 0x30, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x25, 0x32, 0x30, 0x33, 0x25, 0x32, 0x30, 0x43, 0x41, 0x25, 0x32, 0x30, 0x32, 0x25, 0x32, 0x30, 0x32, 0x30, 0x30, 0x39, 0x2c, 0x4f, 0x3d, 0x44, 0x2d, 0x54, 0x72, 0x75, 0x73, 0x74, 0x25, 0x32, 0x30, 0x47, 0x6d, 0x62, 0x48, 0x2c, 0x43, 0x3d, 0x44, 0x45, 0x3f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x72, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6c, 0x69, 0x73, 0x74, 0x30, 0x43, 0xa0, 0x41, 0xa0, 0x3f, 0x86, 0x3d, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x64, 0x2d, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x6e, 0x65, 0x74, 0x2f, 0x63, 0x72, 0x6c, 0x2f, 0x64, 0x2d, 0x74, 0x72, 0x75, 0x73, 0x74, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x33, 0x5f, 0x63, 0x61, 0x5f, 0x32, 0x5f, 0x32, 0x30, 0x30, 0x39, 0x2e, 0x63, 0x72, 0x6c, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x7f, 0x97, 0xdb, 0x30, 0xc8, 0xdf, 0xa4, 0x9c, 0x7d, 0x21, 0x7a, 0x80, 0x70, 0xce, 0x14, 0x12, 0x69, 0x88, 0x14, 0x95, 0x60, 0x44, 0x01, 0xac, 0xb2, 0xe9, 0x30, 0x4f, 0x9b, 0x50, 0xc2, 0x66, 0xd8, 0x7e, 0x8d, 0x30, 0xb5, 0x70, 0x31, 0xe9, 0xe2, 0x69, 0xc7, 0xf3, 0x70, 0xdb, 0x20, 0x15, 0x86, 0xd0, 0x0d, 0xf0, 0xbe, 0xac, 0x01, 0x75, 0x84, 0xce, 0x7e, 0x9f, 0x4d, 0xbf, 0xb7, 0x60, 0x3b, 0x9c, 0xf3, 0xca, 0x1d, 0xe2, 0x5e, 0x68, 0xd8, 0xa3, 0x9d, 0x97, 0xe5, 0x40, 0x60, 0xd2, 0x36, 0x21, 0xfe, 0xd0, 0xb4, 0xb8, 0x17, 0xda, 0x74, 0xa3, 0x7f, 0xd4, 0xdf, 0xb0, 0x98, 0x02, 0xac, 0x6f, 0x6b, 0x6b, 0x2c, 0x25, 0x24, 0x72, 0xa1, 0x65, 0xee, 0x25, 0x5a, 0xe5, 0xe6, 0x32, 0xe7, 0xf2, 0xdf, 0xab, 0x49, 0xfa, 0xf3, 0x90, 0x69, 0x23, 0xdb, 0x04, 0xd9, 0xe7, 0x5c, 0x58, 0xfc, 0x65, 0xd4, 0x97, 0xbe, 0xcc, 0xfc, 0x2e, 0x0a, 0xcc, 0x25, 0x2a, 0x35, 0x04, 0xf8, 0x60, 0x91, 0x15, 0x75, 0x3d, 0x41, 0xff, 0x23, 0x1f, 0x19, 0xc8, 0x6c, 0xeb, 0x82, 0x53, 0x04, 0xa6, 0xe4, 0x4c, 0x22, 0x4d, 0x8d, 0x8c, 0xba, 0xce, 0x5b, 0x73, 0xec, 0x64, 0x54, 0x50, 0x6d, 0xd1, 0x9c, 0x55, 0xfb, 0x69, 0xc3, 0x36, 0xc3, 0x8c, 0xbc, 0x3c, 0x85, 0xa6, 0x6b, 0x0a, 0x26, 0x0d, 0xe0, 0x93, 0x98, 0x60, 0xae, 0x7e, 0xc6, 0x24, 0x97, 0x8a, 0x61, 0x5f, 0x91, 0x8e, 0x66, 0x92, 0x09, 0x87, 0x36, 0xcd, 0x8b, 0x9b, 0x2d, 0x3e, 0xf6, 0x51, 0xd4, 0x50, 0xd4, 0x59, 0x28, 0xbd, 0x83, 0xf2, 0xcc, 0x28, 0x7b, 0x53, 0x86, 0x6d, 0xd8, 0x26, 0x88, 0x70, 0xd7, 0xea, 0x91, 0xcd, 0x3e, 0xb9, 0xca, 0xc0, 0x90, 0x6e, 0x5a, 0xc6, 0x5e, 0x74, 0x65, 0xd7, 0x5c, 0xfe, 0xa3, 0xe2, 0x30, 0x82, 0x04, 0x43, 0x30, 0x82, 0x03, 0x2b, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x03, 0x09, 0x83, 0xf4, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x50, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x44, 0x45, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0c, 0x44, 0x2d, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x47, 0x6d, 0x62, 0x48, 0x31, 0x2a, 0x30, 0x28, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x21, 0x44, 0x2d, 0x54, 0x52, 0x55, 0x53, 0x54, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x33, 0x20, 0x43, 0x41, 0x20, 0x32, 0x20, 0x45, 0x56, 0x20, 0x32, 0x30, 0x30, 0x39, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x39, 0x31, 0x31, 0x30, 0x35, 0x30, 0x38, 0x35, 0x30, 0x34, 0x36, 0x5a, 0x17, 0x0d, 0x32, 0x39, 0x31, 0x31, 0x30, 0x35, 0x30, 0x38, 0x35, 0x30, 0x34, 0x36, 0x5a, 0x30, 0x50, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x44, 0x45, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0c, 0x44, 0x2d, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x47, 0x6d, 0x62, 0x48, 0x31, 0x2a, 0x30, 0x28, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x21, 0x44, 0x2d, 0x54, 0x52, 0x55, 0x53, 0x54, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x33, 0x20, 0x43, 0x41, 0x20, 0x32, 0x20, 0x45, 0x56, 0x20, 0x32, 0x30, 0x30, 0x39, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0x99, 0xf1, 0x84, 0x34, 0x70, 0xba, 0x2f, 0xb7, 0x30, 0xa0, 0x8e, 0xbd, 0x7c, 0x04, 0xcf, 0xbe, 0x62, 0xbc, 0x99, 0xfd, 0x82, 0x97, 0xd2, 0x7a, 0x0a, 0x67, 0x96, 0x38, 0x09, 0xf6, 0x10, 0x4e, 0x95, 0x22, 0x73, 0x99, 0x8d, 0xda, 0x15, 0x2d, 0xe7, 0x05, 0xfc, 0x19, 0x73, 0x22, 0xb7, 0x8e, 0x98, 0x00, 0xbc, 0x3c, 0x3d, 0xac, 0xa1, 0x6c, 0xfb, 0xd6, 0x79, 0x25, 0x4b, 0xad, 0xf0, 0xcc, 0x64, 0xda, 0x88, 0x3e, 0x29, 0xb8, 0x0f, 0x09, 0xd3, 0x34, 0xdd, 0x33, 0xf5, 0x62, 0xd1, 0xe1, 0xcd, 0x19, 0xe9, 0xee, 0x18, 0x4f, 0x4c, 0x58, 0xae, 0xe2, 0x1e, 0xd6, 0x0c, 0x5b, 0x15, 0x5a, 0xd8, 0x3a, 0xb8, 0xc4, 0x18, 0x64, 0x1e, 0xe3, 0x33, 0xb2, 0xb5, 0x89, 0x77, 0x4e, 0x0c, 0xbf, 0xd9, 0x94, 0x6b, 0x13, 0x97, 0x6f, 0x12, 0xa3, 0xfe, 0x99, 0xa9, 0x04, 0xcc, 0x15, 0xec, 0x60, 0x68, 0x36, 0xed, 0x08, 0x7b, 0xb7, 0xf5, 0xbf, 0x93, 0xed, 0x66, 0x31, 0x83, 0x8c, 0xc6, 0x71, 0x34, 0x87, 0x4e, 0x17, 0xea, 0xaf, 0x8b, 0x91, 0x8d, 0x1c, 0x56, 0x41, 0xae, 0x22, 0x37, 0x5e, 0x37, 0xf2, 0x1d, 0xd9, 0xd1, 0x2d, 0x0d, 0x2f, 0x69, 0x51, 0xa7, 0xbe, 0x66, 0xa6, 0x8a, 0x3a, 0x2a, 0xbd, 0xc7, 0x1a, 0xb1, 0xe1, 0x14, 0xf0, 0xbe, 0x3a, 0x1d, 0xb9, 0xcf, 0x5b, 0xb1, 0x6a, 0xfe, 0xb4, 0xb1, 0x46, 0x20, 0xa2, 0xfb, 0x1e, 0x3b, 0x70, 0xef, 0x93, 0x98, 0x7d, 0x8c, 0x73, 0x96, 0xf2, 0xc5, 0xef, 0x85, 0x70, 0xad, 0x29, 0x26, 0xfc, 0x1e, 0x04, 0x3e, 0x1c, 0xa0, 0xd8, 0x0f, 0xcb, 0x52, 0x83, 0x62, 0x7c, 0xee, 0x8b, 0x53, 0x95, 0x90, 0xa9, 0x57, 0xa2, 0xea, 0x61, 0x05, 0xd8, 0xf9, 0x4d, 0xc4, 0x27, 0xfa, 0x6e, 0xad, 0xed, 0xf9, 0xd7, 0x51, 0xf7, 0x6b, 0xa5, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x82, 0x01, 0x24, 0x30, 0x82, 0x01, 0x20, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xd3, 0x94, 0x8a, 0x4c, 0x62, 0x13, 0x2a, 0x19, 0x2e, 0xcc, 0xaf, 0x72, 0x8a, 0x7d, 0x36, 0xd7, 0x9a, 0x1c, 0xdc, 0x67, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x81, 0xdd, 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04, 0x81, 0xd5, 0x30, 0x81, 0xd2, 0x30, 0x81, 0x87, 0xa0, 0x81, 0x84, 0xa0, 0x81, 0x81, 0x86, 0x7f, 0x6c, 0x64, 0x61, 0x70, 0x3a, 0x2f, 0x2f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x2e, 0x64, 0x2d, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x6e, 0x65, 0x74, 0x2f, 0x43, 0x4e, 0x3d, 0x44, 0x2d, 0x54, 0x52, 0x55, 0x53, 0x54, 0x25, 0x32, 0x30, 0x52, 0x6f, 0x6f, 0x74, 0x25, 0x32, 0x30, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x25, 0x32, 0x30, 0x33, 0x25, 0x32, 0x30, 0x43, 0x41, 0x25, 0x32, 0x30, 0x32, 0x25, 0x32, 0x30, 0x45, 0x56, 0x25, 0x32, 0x30, 0x32, 0x30, 0x30, 0x39, 0x2c, 0x4f, 0x3d, 0x44, 0x2d, 0x54, 0x72, 0x75, 0x73, 0x74, 0x25, 0x32, 0x30, 0x47, 0x6d, 0x62, 0x48, 0x2c, 0x43, 0x3d, 0x44, 0x45, 0x3f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x72, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6c, 0x69, 0x73, 0x74, 0x30, 0x46, 0xa0, 0x44, 0xa0, 0x42, 0x86, 0x40, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x64, 0x2d, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x6e, 0x65, 0x74, 0x2f, 0x63, 0x72, 0x6c, 0x2f, 0x64, 0x2d, 0x74, 0x72, 0x75, 0x73, 0x74, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x33, 0x5f, 0x63, 0x61, 0x5f, 0x32, 0x5f, 0x65, 0x76, 0x5f, 0x32, 0x30, 0x30, 0x39, 0x2e, 0x63, 0x72, 0x6c, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x34, 0xed, 0x7b, 0x5a, 0x3c, 0xa4, 0x94, 0x88, 0xef, 0x1a, 0x11, 0x75, 0x07, 0x2f, 0xb3, 0xfe, 0x3c, 0xfa, 0x1e, 0x51, 0x26, 0xeb, 0x87, 0xf6, 0x29, 0xde, 0xe0, 0xf1, 0xd4, 0xc6, 0x24, 0x09, 0xe9, 0xc1, 0xcf, 0x55, 0x1b, 0xb4, 0x30, 0xd9, 0xce, 0x1a, 0xfe, 0x06, 0x51, 0xa6, 0x15, 0xa4, 0x2d, 0xef, 0xb2, 0x4b, 0xbf, 0x20, 0x28, 0x25, 0x49, 0xd1, 0xa6, 0x36, 0x77, 0x34, 0xe8, 0x64, 0xdf, 0x52, 0xb1, 0x11, 0xc7, 0x73, 0x7a, 0xcd, 0x39, 0x9e, 0xc2, 0xad, 0x8c, 0x71, 0x21, 0xf2, 0x5a, 0x6b, 0xaf, 0xdf, 0x3c, 0x4e, 0x55, 0xaf, 0xb2, 0x84, 0x65, 0x14, 0x89, 0xb9, 0x77, 0xcb, 0x2a, 0x31, 0xbe, 0xcf, 0xa3, 0x6d, 0xcf, 0x6f, 0x48, 0x94, 0x32, 0x46, 0x6f, 0xe7, 0x71, 0x8c, 0xa0, 0xa6, 0x84, 0x19, 0x37, 0x07, 0xf2, 0x03, 0x45, 0x09, 0x2b, 0x86, 0x75, 0x7c, 0xdf, 0x5f, 0x69, 0x57, 0x00, 0xdb, 0x6e, 0xd8, 0xa6, 0x72, 0x22, 0x4b, 0x50, 0xd4, 0x75, 0x98, 0x56, 0xdf, 0xb7, 0x18, 0xff, 0x43, 0x43, 0x50, 0xae, 0x7a, 0x44, 0x7b, 0xf0, 0x79, 0x51, 0xd7, 0x43, 0x3d, 0xa7, 0xd3, 0x81, 0xd3, 0xf0, 0xc9, 0x4f, 0xb9, 0xda, 0xc6, 0x97, 0x86, 0xd0, 0x82, 0xc3, 0xe4, 0x42, 0x6d, 0xfe, 0xb0, 0xe2, 0x64, 0x4e, 0x0e, 0x26, 0xe7, 0x40, 0x34, 0x26, 0xb5, 0x08, 0x89, 0xd7, 0x08, 0x63, 0x63, 0x38, 0x27, 0x75, 0x1e, 0x33, 0xea, 0x6e, 0xa8, 0xdd, 0x9f, 0x99, 0x4f, 0x74, 0x4d, 0x81, 0x89, 0x80, 0x4b, 0xdd, 0x9a, 0x97, 0x29, 0x5c, 0x2f, 0xbe, 0x81, 0x41, 0xb9, 0x8c, 0xff, 0xea, 0x7d, 0x60, 0x06, 0x9e, 0xcd, 0xd7, 0x3d, 0xd3, 0x2e, 0xa3, 0x15, 0xbc, 0xa8, 0xe6, 0x26, 0xe5, 0x6f, 0xc3, 0xdc, 0xb8, 0x03, 0x21, 0xea, 0x9f, 0x16, 0xf1, 0x2c, 0x54, 0xb5, 0x30, 0x82, 0x06, 0x4b, 0x30, 0x82, 0x04, 0x33, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x6a, 0x68, 0x3e, 0x9c, 0x51, 0x9b, 0xcb, 0x53, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0xb2, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x54, 0x52, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x06, 0x41, 0x6e, 0x6b, 0x61, 0x72, 0x61, 0x31, 0x40, 0x30, 0x3e, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x37, 0x45, 0x2d, 0x54, 0x75, 0xc4, 0x9f, 0x72, 0x61, 0x20, 0x45, 0x42, 0x47, 0x20, 0x42, 0x69, 0x6c, 0x69, 0xc5, 0x9f, 0x69, 0x6d, 0x20, 0x54, 0x65, 0x6b, 0x6e, 0x6f, 0x6c, 0x6f, 0x6a, 0x69, 0x6c, 0x65, 0x72, 0x69, 0x20, 0x76, 0x65, 0x20, 0x48, 0x69, 0x7a, 0x6d, 0x65, 0x74, 0x6c, 0x65, 0x72, 0x69, 0x20, 0x41, 0x2e, 0xc5, 0x9e, 0x2e, 0x31, 0x26, 0x30, 0x24, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x1d, 0x45, 0x2d, 0x54, 0x75, 0x67, 0x72, 0x61, 0x20, 0x53, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x6b, 0x61, 0x73, 0x79, 0x6f, 0x6e, 0x20, 0x4d, 0x65, 0x72, 0x6b, 0x65, 0x7a, 0x69, 0x31, 0x28, 0x30, 0x26, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x1f, 0x45, 0x2d, 0x54, 0x75, 0x67, 0x72, 0x61, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x33, 0x30, 0x33, 0x30, 0x35, 0x31, 0x32, 0x30, 0x39, 0x34, 0x38, 0x5a, 0x17, 0x0d, 0x32, 0x33, 0x30, 0x33, 0x30, 0x33, 0x31, 0x32, 0x30, 0x39, 0x34, 0x38, 0x5a, 0x30, 0x81, 0xb2, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x54, 0x52, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x06, 0x41, 0x6e, 0x6b, 0x61, 0x72, 0x61, 0x31, 0x40, 0x30, 0x3e, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x37, 0x45, 0x2d, 0x54, 0x75, 0xc4, 0x9f, 0x72, 0x61, 0x20, 0x45, 0x42, 0x47, 0x20, 0x42, 0x69, 0x6c, 0x69, 0xc5, 0x9f, 0x69, 0x6d, 0x20, 0x54, 0x65, 0x6b, 0x6e, 0x6f, 0x6c, 0x6f, 0x6a, 0x69, 0x6c, 0x65, 0x72, 0x69, 0x20, 0x76, 0x65, 0x20, 0x48, 0x69, 0x7a, 0x6d, 0x65, 0x74, 0x6c, 0x65, 0x72, 0x69, 0x20, 0x41, 0x2e, 0xc5, 0x9e, 0x2e, 0x31, 0x26, 0x30, 0x24, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x1d, 0x45, 0x2d, 0x54, 0x75, 0x67, 0x72, 0x61, 0x20, 0x53, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x6b, 0x61, 0x73, 0x79, 0x6f, 0x6e, 0x20, 0x4d, 0x65, 0x72, 0x6b, 0x65, 0x7a, 0x69, 0x31, 0x28, 0x30, 0x26, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x1f, 0x45, 0x2d, 0x54, 0x75, 0x67, 0x72, 0x61, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xe2, 0xf5, 0x3f, 0x93, 0x05, 0x51, 0x1e, 0x85, 0x62, 0x54, 0x5e, 0x7a, 0x0b, 0xf5, 0x18, 0x07, 0x83, 0xae, 0x7e, 0xaf, 0x7c, 0xf7, 0xd4, 0x8a, 0x6b, 0xa5, 0x63, 0x43, 0x39, 0xb9, 0x4b, 0xf7, 0xc3, 0xc6, 0x64, 0x89, 0x3d, 0x94, 0x2e, 0x54, 0x80, 0x52, 0x39, 0x39, 0x07, 0x4b, 0x4b, 0xdd, 0x85, 0x07, 0x76, 0x87, 0xcc, 0xbf, 0x2f, 0x95, 0x4c, 0xcc, 0x7d, 0xa7, 0x3d, 0xbc, 0x47, 0x0f, 0x98, 0x70, 0xf8, 0x8c, 0x85, 0x1e, 0x74, 0x8e, 0x92, 0x6d, 0x1b, 0x40, 0xd1, 0x99, 0x0d, 0xbb, 0x75, 0x6e, 0xc8, 0xa9, 0x6b, 0x9a, 0xc0, 0x84, 0x31, 0xaf, 0xca, 0x43, 0xcb, 0xeb, 0x2b, 0x34, 0xe8, 0x8f, 0x97, 0x6b, 0x01, 0x9b, 0xd5, 0x0e, 0x4a, 0x08, 0xaa, 0x5b, 0x92, 0x74, 0x85, 0x43, 0xd3, 0x80, 0xae, 0xa1, 0x88, 0x5b, 0xae, 0xb3, 0xea, 0x5e, 0xcb, 0x16, 0x9a, 0x77, 0x44, 0xc8, 0xa1, 0xf6, 0x54, 0x68, 0xce, 0xde, 0x8f, 0x97, 0x2b, 0xba, 0x5b, 0x40, 0x02, 0x0c, 0x64, 0x17, 0xc0, 0xb5, 0x93, 0xcd, 0xe1, 0xf1, 0x13, 0x66, 0xce, 0x0c, 0x79, 0xef, 0xd1, 0x91, 0x28, 0xab, 0x5f, 0xa0, 0x12, 0x52, 0x30, 0x73, 0x19, 0x8e, 0x8f, 0xe1, 0x8c, 0x07, 0xa2, 0xc3, 0xbb, 0x4a, 0xf0, 0xea, 0x1f, 0x15, 0xa8, 0xee, 0x25, 0xcc, 0xa4, 0x46, 0xf8, 0x1b, 0x22, 0xef, 0xb3, 0x0e, 0x43, 0xba, 0x2c, 0x24, 0xb8, 0xc5, 0x2c, 0x5c, 0xd4, 0x1c, 0xf8, 0x5d, 0x64, 0xbd, 0xc3, 0x93, 0x5e, 0x28, 0xa7, 0x3f, 0x27, 0xf1, 0x8e, 0x1e, 0xd3, 0x2a, 0x50, 0x05, 0xa3, 0x55, 0xd9, 0xcb, 0xe7, 0x39, 0x53, 0xc0, 0x98, 0x9e, 0x8c, 0x54, 0x62, 0x8b, 0x26, 0xb0, 0xf7, 0x7d, 0x8d, 0x7c, 0xe4, 0xc6, 0x9e, 0x66, 0x42, 0x55, 0x82, 0x47, 0xe7, 0xb2, 0x58, 0x8d, 0x66, 0xf7, 0x07, 0x7c, 0x2e, 0x36, 0xe6, 0x50, 0x1c, 0x3f, 0xdb, 0x43, 0x24, 0xc5, 0xbf, 0x86, 0x47, 0x79, 0xb3, 0x79, 0x1c, 0xf7, 0x5a, 0xf4, 0x13, 0xec, 0x6c, 0xf8, 0x3f, 0xe2, 0x59, 0x1f, 0x95, 0xee, 0x42, 0x3e, 0xb9, 0xad, 0xa8, 0x32, 0x85, 0x49, 0x97, 0x46, 0xfe, 0x4b, 0x31, 0x8f, 0x5a, 0xcb, 0xad, 0x74, 0x47, 0x1f, 0xe9, 0x91, 0xb7, 0xdf, 0x28, 0x04, 0x22, 0xa0, 0xd4, 0x0f, 0x5d, 0xe2, 0x79, 0x4f, 0xea, 0x6c, 0x85, 0x86, 0xbd, 0xa8, 0xa6, 0xce, 0xe4, 0xfa, 0xc3, 0xe1, 0xb3, 0xae, 0xde, 0x3c, 0x51, 0xee, 0xcb, 0x13, 0x7c, 0x01, 0x7f, 0x84, 0x0e, 0x5d, 0x51, 0x94, 0x9e, 0x13, 0x0c, 0xb6, 0x2e, 0xa5, 0x4c, 0xf9, 0x39, 0x70, 0x36, 0x6f, 0x96, 0xca, 0x2e, 0x0c, 0x44, 0x55, 0xc5, 0xca, 0xfa, 0x5d, 0x02, 0xa3, 0xdf, 0xd6, 0x64, 0x8c, 0x5a, 0xb3, 0x01, 0x0a, 0xa9, 0xb5, 0x0a, 0x47, 0x17, 0xff, 0xef, 0x91, 0x40, 0x2a, 0x8e, 0xa1, 0x46, 0x3a, 0x31, 0x98, 0xe5, 0x11, 0xfc, 0xcc, 0xbb, 0x49, 0x56, 0x8a, 0xfc, 0xb9, 0xd0, 0x61, 0x9a, 0x6f, 0x65, 0x6c, 0xe6, 0xc3, 0xcb, 0x3e, 0x75, 0x49, 0xfe, 0x8f, 0xa7, 0xe2, 0x89, 0xc5, 0x67, 0xd7, 0x9d, 0x46, 0x13, 0x4e, 0x31, 0x76, 0x3b, 0x24, 0xb3, 0x9e, 0x11, 0x65, 0x86, 0xab, 0x7f, 0xef, 0x1d, 0xd4, 0xf8, 0xbc, 0xe7, 0xac, 0x5a, 0x5c, 0xb7, 0x5a, 0x47, 0x5c, 0x55, 0xce, 0x55, 0xb4, 0x22, 0x71, 0x5b, 0x5b, 0x0b, 0xf0, 0xcf, 0xdc, 0xa0, 0x61, 0x64, 0xea, 0xa9, 0xd7, 0x68, 0x0a, 0x63, 0xa7, 0xe0, 0x0d, 0x3f, 0xa0, 0xaf, 0xd3, 0xaa, 0xd2, 0x7e, 0xef, 0x51, 0xa0, 0xe6, 0x51, 0x2b, 0x55, 0x92, 0x15, 0x17, 0x53, 0xcb, 0xb7, 0x66, 0x0e, 0x66, 0x4c, 0xf8, 0xf9, 0x75, 0x4c, 0x90, 0xe7, 0x12, 0x70, 0xc7, 0x45, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x63, 0x30, 0x61, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x2e, 0xe3, 0xdb, 0xb2, 0x49, 0xd0, 0x9c, 0x54, 0x79, 0x5c, 0xfa, 0x27, 0x2a, 0xfe, 0xcc, 0x4e, 0xd2, 0xe8, 0x4e, 0x54, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x2e, 0xe3, 0xdb, 0xb2, 0x49, 0xd0, 0x9c, 0x54, 0x79, 0x5c, 0xfa, 0x27, 0x2a, 0xfe, 0xcc, 0x4e, 0xd2, 0xe8, 0x4e, 0x54, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x05, 0x37, 0x3a, 0xf4, 0x4d, 0xb7, 0x45, 0xe2, 0x45, 0x75, 0x24, 0x8f, 0xb6, 0x77, 0x52, 0xe8, 0x1c, 0xd8, 0x10, 0x93, 0x65, 0xf3, 0xf2, 0x59, 0x06, 0xa4, 0x3e, 0x1e, 0x29, 0xec, 0x5d, 0xd1, 0xd0, 0xab, 0x7c, 0xe0, 0x0a, 0x90, 0x48, 0x78, 0xed, 0x4e, 0x98, 0x03, 0x99, 0xfe, 0x28, 0x60, 0x91, 0x1d, 0x30, 0x1d, 0xb8, 0x63, 0x7c, 0xa8, 0xe6, 0x35, 0xb5, 0xfa, 0xd3, 0x61, 0x76, 0xe6, 0xd6, 0x07, 0x4b, 0xca, 0x69, 0x9a, 0xb2, 0x84, 0x7a, 0x77, 0x93, 0x45, 0x17, 0x15, 0x9f, 0x24, 0xd0, 0x98, 0x13, 0x12, 0xff, 0xbb, 0xa0, 0x2e, 0xfd, 0x4e, 0x4c, 0x87, 0xf8, 0xce, 0x5c, 0xaa, 0x98, 0x1b, 0x05, 0xe0, 0x00, 0x46, 0x4a, 0x82, 0x80, 0xa5, 0x33, 0x8b, 0x28, 0xdc, 0xed, 0x38, 0xd3, 0xdf, 0xe5, 0x3e, 0xe9, 0xfe, 0xfb, 0x59, 0xdd, 0x61, 0x84, 0x4f, 0xd2, 0x54, 0x96, 0x13, 0x61, 0x13, 0x3e, 0x8f, 0x80, 0x69, 0xbe, 0x93, 0x47, 0xb5, 0x35, 0x43, 0xd2, 0x5a, 0xbb, 0x3d, 0x5c, 0xef, 0xb3, 0x42, 0x47, 0xcd, 0x3b, 0x55, 0x13, 0x06, 0xb0, 0x09, 0xdb, 0xfd, 0x63, 0xf6, 0x3a, 0x88, 0x0a, 0x99, 0x6f, 0x7e, 0xe1, 0xce, 0x1b, 0x53, 0x6a, 0x44, 0x66, 0x23, 0x51, 0x08, 0x7b, 0xbc, 0x5b, 0x52, 0xa2, 0xfd, 0x06, 0x37, 0x38, 0x40, 0x61, 0x8f, 0x4a, 0x96, 0xb8, 0x90, 0x37, 0xf8, 0x66, 0xc7, 0x78, 0x90, 0x00, 0x15, 0x2e, 0x8b, 0xad, 0x51, 0x35, 0x53, 0x07, 0xa8, 0x6b, 0x68, 0xae, 0xf9, 0x4e, 0x3c, 0x07, 0x26, 0xcd, 0x08, 0x05, 0x70, 0xcc, 0x39, 0x3f, 0x76, 0xbd, 0xa5, 0xd3, 0x67, 0x26, 0x01, 0x86, 0xa6, 0x53, 0xd2, 0x60, 0x3b, 0x7c, 0x43, 0x7f, 0x55, 0x8a, 0xbc, 0x95, 0x1a, 0xc1, 0x28, 0x39, 0x4c, 0x1f, 0x43, 0xd2, 0x91, 0xf4, 0x72, 0x59, 0x8a, 0xb9, 0x56, 0xfc, 0x3f, 0xb4, 0x9d, 0xda, 0x70, 0x9c, 0x76, 0x5a, 0x8c, 0x43, 0x50, 0xee, 0x8e, 0x30, 0x72, 0x4d, 0xdf, 0xff, 0x49, 0xf7, 0xc6, 0xa9, 0x67, 0xd9, 0x6d, 0xac, 0x02, 0x11, 0xe2, 0x3a, 0x16, 0x25, 0xa7, 0x58, 0x08, 0xcb, 0x6f, 0x53, 0x41, 0x9c, 0x48, 0x38, 0x47, 0x68, 0x33, 0xd1, 0xd7, 0xc7, 0x8f, 0xd4, 0x74, 0x21, 0xd4, 0xc3, 0x05, 0x90, 0x7a, 0xff, 0xce, 0x96, 0x88, 0xb1, 0x15, 0x29, 0x5d, 0x23, 0xab, 0xd0, 0x60, 0xa1, 0x12, 0x4f, 0xde, 0xf4, 0x17, 0xcd, 0x32, 0xe5, 0xc9, 0xbf, 0xc8, 0x43, 0xad, 0xfd, 0x2e, 0x8e, 0xf1, 0xaf, 0xe2, 0xf4, 0x98, 0xfa, 0x12, 0x1f, 0x20, 0xd8, 0xc0, 0xa7, 0x0c, 0x85, 0xc5, 0x90, 0xf4, 0x3b, 0x2d, 0x96, 0x26, 0xb1, 0x2c, 0xbe, 0x4c, 0xab, 0xeb, 0xb1, 0xd2, 0x8a, 0xc9, 0xdb, 0x78, 0x13, 0x0f, 0x1e, 0x09, 0x9d, 0x6d, 0x8f, 0x00, 0x9f, 0x02, 0xda, 0xc1, 0xfa, 0x1f, 0x7a, 0x7a, 0x09, 0xc4, 0x4a, 0xe6, 0x88, 0x2a, 0x97, 0x9f, 0x89, 0x8b, 0xfd, 0x37, 0x5f, 0x5f, 0x3a, 0xce, 0x38, 0x59, 0x86, 0x4b, 0xaf, 0x71, 0x0b, 0xb4, 0xd8, 0xf2, 0x70, 0x4f, 0x9f, 0x32, 0x13, 0xe3, 0xb0, 0xa7, 0x57, 0xe5, 0xda, 0xda, 0x43, 0xcb, 0x84, 0x34, 0xf2, 0x28, 0xc4, 0xea, 0x6d, 0xf4, 0x2a, 0xef, 0xc1, 0x6b, 0x76, 0xda, 0xfb, 0x7e, 0xbb, 0x85, 0x3c, 0xd2, 0x53, 0xc2, 0x4d, 0xbe, 0x71, 0xe1, 0x45, 0xd1, 0xfd, 0x23, 0x67, 0x0d, 0x13, 0x75, 0xfb, 0xcf, 0x65, 0x67, 0x22, 0x9d, 0xae, 0xb0, 0x09, 0xd1, 0x09, 0xff, 0x1d, 0x34, 0xbf, 0xfe, 0x23, 0x97, 0x37, 0xd2, 0x39, 0xfa, 0x3d, 0x0d, 0x06, 0x0b, 0xb4, 0xdb, 0x3b, 0xa3, 0xab, 0x6f, 0x5c, 0x1d, 0xb6, 0x7e, 0xe8, 0xb3, 0x82, 0x34, 0xed, 0x06, 0x5c, 0x24, 0x30, 0x82, 0x05, 0xbd, 0x30, 0x82, 0x03, 0xa5, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x4f, 0x1b, 0xd4, 0x2f, 0x54, 0xbb, 0x2f, 0x4b, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x47, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x48, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0c, 0x53, 0x77, 0x69, 0x73, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x41, 0x47, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x18, 0x53, 0x77, 0x69, 0x73, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x53, 0x69, 0x6c, 0x76, 0x65, 0x72, 0x20, 0x43, 0x41, 0x20, 0x2d, 0x20, 0x47, 0x32, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x36, 0x31, 0x30, 0x32, 0x35, 0x30, 0x38, 0x33, 0x32, 0x34, 0x36, 0x5a, 0x17, 0x0d, 0x33, 0x36, 0x31, 0x30, 0x32, 0x35, 0x30, 0x38, 0x33, 0x32, 0x34, 0x36, 0x5a, 0x30, 0x47, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x48, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0c, 0x53, 0x77, 0x69, 0x73, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x41, 0x47, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x18, 0x53, 0x77, 0x69, 0x73, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x53, 0x69, 0x6c, 0x76, 0x65, 0x72, 0x20, 0x43, 0x41, 0x20, 0x2d, 0x20, 0x47, 0x32, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xc4, 0xf1, 0x87, 0x7f, 0xd3, 0x78, 0x31, 0xf7, 0x38, 0xc9, 0xf8, 0xc3, 0x99, 0x43, 0xbc, 0xc7, 0xf7, 0xbc, 0x37, 0xe7, 0x4e, 0x71, 0xba, 0x4b, 0x8f, 0xa5, 0x73, 0x1d, 0x5c, 0x6e, 0x98, 0xae, 0x03, 0x57, 0xae, 0x38, 0x37, 0x43, 0x2f, 0x17, 0x3d, 0x1f, 0xc8, 0xce, 0x68, 0x10, 0xc1, 0x78, 0xae, 0x19, 0x03, 0x2b, 0x10, 0xfa, 0x2c, 0x79, 0x83, 0xf6, 0xe8, 0xb9, 0x68, 0xb9, 0x55, 0xf2, 0x04, 0x44, 0xa7, 0x39, 0xf9, 0xfc, 0x04, 0x8b, 0x1e, 0xf1, 0xa2, 0x4d, 0x27, 0xf9, 0x61, 0x7b, 0xba, 0xb7, 0xe5, 0xa2, 0x13, 0xb6, 0xeb, 0x61, 0x3e, 0xd0, 0x6c, 0xd1, 0xe6, 0xfb, 0xfa, 0x5e, 0xed, 0x1d, 0xb4, 0x9e, 0xa0, 0x35, 0x5b, 0xa1, 0x92, 0xcb, 0xf0, 0x49, 0x92, 0xfe, 0x85, 0x0a, 0x05, 0x3e, 0xe6, 0xd9, 0x0b, 0xe2, 0x4f, 0xbb, 0xdc, 0x95, 0x37, 0xfc, 0x91, 0xe9, 0x32, 0x35, 0x22, 0xd1, 0x1f, 0x3a, 0x4e, 0x27, 0x85, 0x9d, 0xb0, 0x15, 0x94, 0x32, 0xda, 0x61, 0x0d, 0x47, 0x4d, 0x60, 0x42, 0xae, 0x92, 0x47, 0xe8, 0x83, 0x5a, 0x50, 0x58, 0xe9, 0x8a, 0x8b, 0xb9, 0x5d, 0xa1, 0xdc, 0xdd, 0x99, 0x4a, 0x1f, 0x36, 0x67, 0xbb, 0x48, 0xe4, 0x83, 0xb6, 0x37, 0xeb, 0x48, 0x3a, 0xaf, 0x0f, 0x67, 0x8f, 0x17, 0x07, 0xe8, 0x04, 0xca, 0xef, 0x6a, 0x31, 0x87, 0xd4, 0xc0, 0xb6, 0xf9, 0x94, 0x71, 0x7b, 0x67, 0x64, 0xb8, 0xb6, 0x91, 0x4a, 0x42, 0x7b, 0x65, 0x2e, 0x30, 0x6a, 0x0c, 0xf5, 0x90, 0xee, 0x95, 0xe6, 0xf2, 0xcd, 0x82, 0xec, 0xd9, 0xa1, 0x4a, 0xec, 0xf6, 0xb2, 0x4b, 0xe5, 0x45, 0x85, 0xe6, 0x6d, 0x78, 0x93, 0x04, 0x2e, 0x9c, 0x82, 0x6d, 0x36, 0xa9, 0xc4, 0x31, 0x64, 0x1f, 0x86, 0x83, 0x0b, 0x2a, 0xf4, 0x35, 0x0a, 0x78, 0xc9, 0x55, 0xcf, 0x41, 0xb0, 0x47, 0xe9, 0x30, 0x9f, 0x99, 0xbe, 0x61, 0xa8, 0x06, 0x84, 0xb9, 0x28, 0x7a, 0x5f, 0x38, 0xd9, 0x1b, 0xa9, 0x38, 0xb0, 0x83, 0x7f, 0x73, 0xc1, 0xc3, 0x3b, 0x48, 0x2a, 0x82, 0x0f, 0x21, 0x9b, 0xb8, 0xcc, 0xa8, 0x35, 0xc3, 0x84, 0x1b, 0x83, 0xb3, 0x3e, 0xbe, 0xa4, 0x95, 0x69, 0x01, 0x3a, 0x89, 0x00, 0x78, 0x04, 0xd9, 0xc9, 0xf4, 0x99, 0x19, 0xab, 0x56, 0x7e, 0x5b, 0x8b, 0x86, 0x39, 0x15, 0x91, 0xa4, 0x10, 0x2c, 0x09, 0x32, 0x80, 0x60, 0xb3, 0x93, 0xc0, 0x2a, 0xb6, 0x18, 0x0b, 0x9d, 0x7e, 0x8d, 0x49, 0xf2, 0x10, 0x4a, 0x7f, 0xf9, 0xd5, 0x46, 0x2f, 0x19, 0x92, 0xa3, 0x99, 0xa7, 0x26, 0xac, 0xbb, 0x8c, 0x3c, 0xe6, 0x0e, 0xbc, 0x47, 0x07, 0xdc, 0x73, 0x51, 0xf1, 0x70, 0x64, 0x2f, 0x08, 0xf9, 0xb4, 0x47, 0x1d, 0x30, 0x6c, 0x44, 0xea, 0x29, 0x37, 0x85, 0x92, 0x68, 0x66, 0xbc, 0x83, 0x38, 0xfe, 0x7b, 0x39, 0x2e, 0xd3, 0x50, 0xf0, 0x1f, 0xfb, 0x5e, 0x60, 0xb6, 0xa9, 0xa6, 0xfa, 0x27, 0x41, 0xf1, 0x9b, 0x18, 0x72, 0xf2, 0xf5, 0x84, 0x74, 0x4a, 0xc9, 0x67, 0xc4, 0x54, 0xae, 0x48, 0x64, 0xdf, 0x8c, 0xd1, 0x6e, 0xb0, 0x1d, 0xe1, 0x07, 0x8f, 0x08, 0x1e, 0x99, 0x9c, 0x71, 0xe9, 0x4c, 0xd8, 0xa5, 0xf7, 0x47, 0x12, 0x1f, 0x74, 0xd1, 0x51, 0x9e, 0x86, 0xf3, 0xc2, 0xa2, 0x23, 0x40, 0x0b, 0x73, 0xdb, 0x4b, 0xa6, 0xe7, 0x73, 0x06, 0x8c, 0xc1, 0xa0, 0xe9, 0xc1, 0x59, 0xac, 0x46, 0xfa, 0xe6, 0x2f, 0xf8, 0xcf, 0x71, 0x9c, 0x46, 0x6d, 0xb9, 0xc4, 0x15, 0x8d, 0x38, 0x79, 0x03, 0x45, 0x48, 0xef, 0xc4, 0x5d, 0xd7, 0x08, 0xee, 0x87, 0x39, 0x22, 0x86, 0xb2, 0x0d, 0x0f, 0x58, 0x43, 0xf7, 0x71, 0xa9, 0x48, 0x2e, 0xfd, 0xea, 0xd6, 0x1f, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x81, 0xac, 0x30, 0x81, 0xa9, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x17, 0xa0, 0xcd, 0xc1, 0xe4, 0x41, 0xb6, 0x3a, 0x5b, 0x3b, 0xcb, 0x45, 0x9d, 0xbd, 0x1c, 0xc2, 0x98, 0xfa, 0x86, 0x58, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x17, 0xa0, 0xcd, 0xc1, 0xe4, 0x41, 0xb6, 0x3a, 0x5b, 0x3b, 0xcb, 0x45, 0x9d, 0xbd, 0x1c, 0xc2, 0x98, 0xfa, 0x86, 0x58, 0x30, 0x46, 0x06, 0x03, 0x55, 0x1d, 0x20, 0x04, 0x3f, 0x30, 0x3d, 0x30, 0x3b, 0x06, 0x09, 0x60, 0x85, 0x74, 0x01, 0x59, 0x01, 0x03, 0x01, 0x01, 0x30, 0x2e, 0x30, 0x2c, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x01, 0x16, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x2e, 0x73, 0x77, 0x69, 0x73, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x73, 0xc6, 0x81, 0xe0, 0x27, 0xd2, 0x2d, 0x0f, 0xe0, 0x95, 0x30, 0xe2, 0x9a, 0x41, 0x7f, 0x50, 0x2c, 0x5f, 0x5f, 0x62, 0x61, 0xa9, 0x86, 0x6a, 0x69, 0x18, 0x0c, 0x74, 0x49, 0xd6, 0x5d, 0x84, 0xea, 0x41, 0x52, 0x18, 0x6f, 0x58, 0xad, 0x50, 0x56, 0x20, 0x6a, 0xc6, 0xbd, 0x28, 0x69, 0x58, 0x91, 0xdc, 0x91, 0x11, 0x35, 0xa9, 0x3a, 0x1d, 0xbc, 0x1a, 0xa5, 0x60, 0x9e, 0xd8, 0x1f, 0x7f, 0x45, 0x91, 0x69, 0xd9, 0x7e, 0xbb, 0x78, 0x72, 0xc1, 0x06, 0x0f, 0x2a, 0xce, 0x8f, 0x85, 0x70, 0x61, 0xac, 0xa0, 0xcd, 0x0b, 0xb8, 0x39, 0x29, 0x56, 0x84, 0x32, 0x4e, 0x86, 0xbb, 0x3d, 0xc4, 0x2a, 0xd9, 0xd7, 0x1f, 0x72, 0xee, 0xfe, 0x51, 0xa1, 0x22, 0x41, 0xb1, 0x71, 0x02, 0x63, 0x1a, 0x82, 0xb0, 0x62, 0xab, 0x5e, 0x57, 0x12, 0x1f, 0xdf, 0xcb, 0xdd, 0x75, 0xa0, 0xc0, 0x5d, 0x79, 0x90, 0x8c, 0x1b, 0xe0, 0x50, 0xe6, 0xde, 0x31, 0xfe, 0x98, 0x7b, 0x70, 0x5f, 0xa5, 0x90, 0xd8, 0xad, 0xf8, 0x02, 0xb6, 0x6f, 0xd3, 0x60, 0xdd, 0x40, 0x4b, 0x22, 0xc5, 0x3d, 0xad, 0x3a, 0x7a, 0x9f, 0x1a, 0x1a, 0x47, 0x91, 0x79, 0x33, 0xba, 0x82, 0xdc, 0x32, 0x69, 0x03, 0x96, 0x6e, 0x1f, 0x4b, 0xf0, 0x71, 0xfe, 0xe3, 0x67, 0x72, 0xa0, 0xb1, 0xbf, 0x5c, 0x8b, 0xe4, 0xfa, 0x99, 0x22, 0xc7, 0x84, 0xb9, 0x1b, 0x8d, 0x23, 0x97, 0x3f, 0xed, 0x25, 0xe0, 0xcf, 0x65, 0xbb, 0xf5, 0x61, 0x04, 0xef, 0xdd, 0x1e, 0xb2, 0x5a, 0x41, 0x22, 0x5a, 0xa1, 0x9f, 0x5d, 0x2c, 0xe8, 0x5b, 0xc9, 0x6d, 0xa9, 0x0c, 0x0c, 0x78, 0xaa, 0x60, 0xc6, 0x56, 0x8f, 0x01, 0x5a, 0x0c, 0x68, 0xbc, 0x69, 0x19, 0x79, 0xc4, 0x1f, 0x7e, 0x97, 0x05, 0xbf, 0xc5, 0xe9, 0x24, 0x51, 0x5e, 0xd4, 0xd5, 0x4b, 0x53, 0xed, 0xd9, 0x23, 0x5a, 0x36, 0x03, 0x65, 0xa3, 0xc1, 0x03, 0xad, 0x41, 0x30, 0xf3, 0x46, 0x1b, 0x85, 0x90, 0xaf, 0x65, 0xb5, 0xd5, 0xb1, 0xe4, 0x16, 0x5b, 0x78, 0x75, 0x1d, 0x97, 0x7a, 0x6d, 0x59, 0xa9, 0x2a, 0x8f, 0x7b, 0xde, 0xc3, 0x87, 0x89, 0x10, 0x99, 0x49, 0x73, 0x78, 0xc8, 0x3d, 0xbd, 0x51, 0x35, 0x74, 0x2a, 0xd5, 0xf1, 0x7e, 0x69, 0x1b, 0x2a, 0xbb, 0x3b, 0xbd, 0x25, 0xb8, 0x9a, 0x5a, 0x3d, 0x72, 0x61, 0x90, 0x66, 0x87, 0xee, 0x0c, 0xd6, 0x4d, 0xd4, 0x11, 0x74, 0x0b, 0x6a, 0xfe, 0x0b, 0x03, 0xfc, 0xa3, 0x55, 0x57, 0x89, 0xfe, 0x4a, 0xcb, 0xae, 0x5b, 0x17, 0x05, 0xc8, 0xf2, 0x8d, 0x23, 0x31, 0x53, 0x38, 0xd2, 0x2d, 0x6a, 0x3f, 0x82, 0xb9, 0x8d, 0x08, 0x6a, 0xf7, 0x5e, 0x41, 0x74, 0x6e, 0xc3, 0x11, 0x7e, 0x07, 0xac, 0x29, 0x60, 0x91, 0x3f, 0x38, 0xca, 0x57, 0x10, 0x0d, 0xbd, 0x30, 0x2f, 0xc7, 0xa5, 0xe6, 0x41, 0xa0, 0xda, 0xae, 0x05, 0x87, 0x9a, 0xa0, 0xa4, 0x65, 0x6c, 0x4c, 0x09, 0x0c, 0x89, 0xba, 0xb8, 0xd3, 0xb9, 0xc0, 0x93, 0x8a, 0x30, 0xfa, 0x8d, 0xe5, 0x9a, 0x6b, 0x15, 0x01, 0x4e, 0x67, 0xaa, 0xda, 0x62, 0x56, 0x3e, 0x84, 0x08, 0x66, 0xd2, 0xc4, 0x36, 0x7d, 0xa7, 0x3e, 0x10, 0xfc, 0x88, 0xe0, 0xd4, 0x80, 0xe5, 0x00, 0xbd, 0xaa, 0xf3, 0x4e, 0x06, 0xa3, 0x7a, 0x6a, 0xf9, 0x62, 0x72, 0xe3, 0x09, 0x4f, 0xeb, 0x9b, 0x0e, 0x01, 0x23, 0xf1, 0x9f, 0xbb, 0x7c, 0xdc, 0xdc, 0x6c, 0x11, 0x97, 0x25, 0xb2, 0xf2, 0xb4, 0x63, 0x14, 0xd2, 0x06, 0x2a, 0x67, 0x8c, 0x83, 0xf5, 0xce, 0xea, 0x07, 0xd8, 0x9a, 0x6a, 0x1e, 0xec, 0xe4, 0x0a, 0xbb, 0x2a, 0x4c, 0xeb, 0x09, 0x60, 0x39, 0xce, 0xca, 0x62, 0xd8, 0x2e, 0x6e, 0x30, 0x82, 0x04, 0x30, 0x30, 0x82, 0x03, 0x18, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x50, 0x94, 0x6c, 0xec, 0x18, 0xea, 0xd5, 0x9c, 0x4d, 0xd5, 0x97, 0xef, 0x75, 0x8f, 0xa0, 0xad, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x81, 0x82, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x15, 0x77, 0x77, 0x77, 0x2e, 0x78, 0x72, 0x61, 0x6d, 0x70, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x63, 0x6f, 0x6d, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x1b, 0x58, 0x52, 0x61, 0x6d, 0x70, 0x20, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x20, 0x49, 0x6e, 0x63, 0x31, 0x2d, 0x30, 0x2b, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x24, 0x58, 0x52, 0x61, 0x6d, 0x70, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x34, 0x31, 0x31, 0x30, 0x31, 0x31, 0x37, 0x31, 0x34, 0x30, 0x34, 0x5a, 0x17, 0x0d, 0x33, 0x35, 0x30, 0x31, 0x30, 0x31, 0x30, 0x35, 0x33, 0x37, 0x31, 0x39, 0x5a, 0x30, 0x81, 0x82, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x15, 0x77, 0x77, 0x77, 0x2e, 0x78, 0x72, 0x61, 0x6d, 0x70, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x63, 0x6f, 0x6d, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x1b, 0x58, 0x52, 0x61, 0x6d, 0x70, 0x20, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x20, 0x49, 0x6e, 0x63, 0x31, 0x2d, 0x30, 0x2b, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x24, 0x58, 0x52, 0x61, 0x6d, 0x70, 0x20, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0x98, 0x24, 0x1e, 0xbd, 0x15, 0xb4, 0xba, 0xdf, 0xc7, 0x8c, 0xa5, 0x27, 0xb6, 0x38, 0x0b, 0x69, 0xf3, 0xb6, 0x4e, 0xa8, 0x2c, 0x2e, 0x21, 0x1d, 0x5c, 0x44, 0xdf, 0x21, 0x5d, 0x7e, 0x23, 0x74, 0xfe, 0x5e, 0x7e, 0xb4, 0x4a, 0xb7, 0xa6, 0xad, 0x1f, 0xae, 0xe0, 0x06, 0x16, 0xe2, 0x9b, 0x5b, 0xd9, 0x67, 0x74, 0x6b, 0x5d, 0x80, 0x8f, 0x29, 0x9d, 0x86, 0x1b, 0xd9, 0x9c, 0x0d, 0x98, 0x6d, 0x76, 0x10, 0x28, 0x58, 0xe4, 0x65, 0xb0, 0x7f, 0x4a, 0x98, 0x79, 0x9f, 0xe0, 0xc3, 0x31, 0x7e, 0x80, 0x2b, 0xb5, 0x8c, 0xc0, 0x40, 0x3b, 0x11, 0x86, 0xd0, 0xcb, 0xa2, 0x86, 0x36, 0x60, 0xa4, 0xd5, 0x30, 0x82, 0x6d, 0xd9, 0x6e, 0xd0, 0x0f, 0x12, 0x04, 0x33, 0x97, 0x5f, 0x4f, 0x61, 0x5a, 0xf0, 0xe4, 0xf9, 0x91, 0xab, 0xe7, 0x1d, 0x3b, 0xbc, 0xe8, 0xcf, 0xf4, 0x6b, 0x2d, 0x34, 0x7c, 0xe2, 0x48, 0x61, 0x1c, 0x8e, 0xf3, 0x61, 0x44, 0xcc, 0x6f, 0xa0, 0x4a, 0xa9, 0x94, 0xb0, 0x4d, 0xda, 0xe7, 0xa9, 0x34, 0x7a, 0x72, 0x38, 0xa8, 0x41, 0xcc, 0x3c, 0x94, 0x11, 0x7d, 0xeb, 0xc8, 0xa6, 0x8c, 0xb7, 0x86, 0xcb, 0xca, 0x33, 0x3b, 0xd9, 0x3d, 0x37, 0x8b, 0xfb, 0x7a, 0x3e, 0x86, 0x2c, 0xe7, 0x73, 0xd7, 0x0a, 0x57, 0xac, 0x64, 0x9b, 0x19, 0xeb, 0xf4, 0x0f, 0x04, 0x08, 0x8a, 0xac, 0x03, 0x17, 0x19, 0x64, 0xf4, 0x5a, 0x25, 0x22, 0x8d, 0x34, 0x2c, 0xb2, 0xf6, 0x68, 0x1d, 0x12, 0x6d, 0xd3, 0x8a, 0x1e, 0x14, 0xda, 0xc4, 0x8f, 0xa6, 0xe2, 0x23, 0x85, 0xd5, 0x7a, 0x0d, 0xbd, 0x6a, 0xe0, 0xe9, 0xec, 0xec, 0x17, 0xbb, 0x42, 0x1b, 0x67, 0xaa, 0x25, 0xed, 0x45, 0x83, 0x21, 0xfc, 0xc1, 0xc9, 0x7c, 0xd5, 0x62, 0x3e, 0xfa, 0xf2, 0xc5, 0x2d, 0xd3, 0xfd, 0xd4, 0x65, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x81, 0x9f, 0x30, 0x81, 0x9c, 0x30, 0x13, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x14, 0x02, 0x04, 0x06, 0x1e, 0x04, 0x00, 0x43, 0x00, 0x41, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xc6, 0x4f, 0xa2, 0x3d, 0x06, 0x63, 0x84, 0x09, 0x9c, 0xce, 0x62, 0xe4, 0x04, 0xac, 0x8d, 0x5c, 0xb5, 0xe9, 0xb6, 0x1b, 0x30, 0x36, 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04, 0x2f, 0x30, 0x2d, 0x30, 0x2b, 0xa0, 0x29, 0xa0, 0x27, 0x86, 0x25, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, 0x72, 0x6c, 0x2e, 0x78, 0x72, 0x61, 0x6d, 0x70, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x58, 0x47, 0x43, 0x41, 0x2e, 0x63, 0x72, 0x6c, 0x30, 0x10, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x01, 0x04, 0x03, 0x02, 0x01, 0x01, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x91, 0x15, 0x39, 0x03, 0x01, 0x1b, 0x67, 0xfb, 0x4a, 0x1c, 0xf9, 0x0a, 0x60, 0x5b, 0xa1, 0xda, 0x4d, 0x97, 0x62, 0xf9, 0x24, 0x53, 0x27, 0xd7, 0x82, 0x64, 0x4e, 0x90, 0x2e, 0xc3, 0x49, 0x1b, 0x2b, 0x9a, 0xdc, 0xfc, 0xa8, 0x78, 0x67, 0x35, 0xf1, 0x1d, 0xf0, 0x11, 0xbd, 0xb7, 0x48, 0xe3, 0x10, 0xf6, 0x0d, 0xdf, 0x3f, 0xd2, 0xc9, 0xb6, 0xaa, 0x55, 0xa4, 0x48, 0xba, 0x02, 0xdb, 0xde, 0x59, 0x2e, 0x15, 0x5b, 0x3b, 0x9d, 0x16, 0x7d, 0x47, 0xd7, 0x37, 0xea, 0x5f, 0x4d, 0x76, 0x12, 0x36, 0xbb, 0x1f, 0xd7, 0xa1, 0x81, 0x04, 0x46, 0x20, 0xa3, 0x2c, 0x6d, 0xa9, 0x9e, 0x01, 0x7e, 0x3f, 0x29, 0xce, 0x00, 0x93, 0xdf, 0xfd, 0xc9, 0x92, 0x73, 0x89, 0x89, 0x64, 0x9e, 0xe7, 0x2b, 0xe4, 0x1c, 0x91, 0x2c, 0xd2, 0xb9, 0xce, 0x7d, 0xce, 0x6f, 0x31, 0x99, 0xd3, 0xe6, 0xbe, 0xd2, 0x1e, 0x90, 0xf0, 0x09, 0x14, 0x79, 0x5c, 0x23, 0xab, 0x4d, 0xd2, 0xda, 0x21, 0x1f, 0x4d, 0x99, 0x79, 0x9d, 0xe1, 0xcf, 0x27, 0x9f, 0x10, 0x9b, 0x1c, 0x88, 0x0d, 0xb0, 0x8a, 0x64, 0x41, 0x31, 0xb8, 0x0e, 0x6c, 0x90, 0x24, 0xa4, 0x9b, 0x5c, 0x71, 0x8f, 0xba, 0xbb, 0x7e, 0x1c, 0x1b, 0xdb, 0x6a, 0x80, 0x0f, 0x21, 0xbc, 0xe9, 0xdb, 0xa6, 0xb7, 0x40, 0xf4, 0xb2, 0x8b, 0xa9, 0xb1, 0xe4, 0xef, 0x9a, 0x1a, 0xd0, 0x3d, 0x69, 0x99, 0xee, 0xa8, 0x28, 0xa3, 0xe1, 0x3c, 0xb3, 0xf0, 0xb2, 0x11, 0x9c, 0xcf, 0x7c, 0x40, 0xe6, 0xdd, 0xe7, 0x43, 0x7d, 0xa2, 0xd8, 0x3a, 0xb5, 0xa9, 0x8d, 0xf2, 0x34, 0x99, 0xc4, 0xd4, 0x10, 0xe1, 0x06, 0xfd, 0x09, 0x84, 0x10, 0x3b, 0xee, 0xc4, 0x4c, 0xf4, 0xec, 0x27, 0x7c, 0x42, 0xc2, 0x74, 0x7c, 0x82, 0x8a, 0x09, 0xc9, 0xb4, 0x03, 0x25, 0xbc, 0x30, 0x82, 0x01, 0xe1, 0x30, 0x82, 0x01, 0x87, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x11, 0x2a, 0x38, 0xa4, 0x1c, 0x96, 0x0a, 0x04, 0xde, 0x42, 0xb2, 0x28, 0xa5, 0x0b, 0xe8, 0x34, 0x98, 0x02, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x30, 0x50, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x1b, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x45, 0x43, 0x43, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x2d, 0x20, 0x52, 0x34, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0a, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x0a, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x32, 0x31, 0x31, 0x31, 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x33, 0x38, 0x30, 0x31, 0x31, 0x39, 0x30, 0x33, 0x31, 0x34, 0x30, 0x37, 0x5a, 0x30, 0x50, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x1b, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x45, 0x43, 0x43, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x2d, 0x20, 0x52, 0x34, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0a, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x0a, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0xb8, 0xc6, 0x79, 0xd3, 0x8f, 0x6c, 0x25, 0x0e, 0x9f, 0x2e, 0x39, 0x19, 0x1c, 0x03, 0xa4, 0xae, 0x9a, 0xe5, 0x39, 0x07, 0x09, 0x16, 0xca, 0x63, 0xb1, 0xb9, 0x86, 0xf8, 0x8a, 0x57, 0xc1, 0x57, 0xce, 0x42, 0xfa, 0x73, 0xa1, 0xf7, 0x65, 0x42, 0xff, 0x1e, 0xc1, 0x00, 0xb2, 0x6e, 0x73, 0x0e, 0xff, 0xc7, 0x21, 0xe5, 0x18, 0xa4, 0xaa, 0xd9, 0x71, 0x3f, 0xa8, 0xd4, 0xb9, 0xce, 0x8c, 0x1d, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x54, 0xb0, 0x7b, 0xad, 0x45, 0xb8, 0xe2, 0x40, 0x7f, 0xfb, 0x0a, 0x6e, 0xfb, 0xbe, 0x33, 0xc9, 0x3c, 0xa3, 0x84, 0xd5, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x03, 0x48, 0x00, 0x30, 0x45, 0x02, 0x21, 0x00, 0xdc, 0x92, 0xa1, 0xa0, 0x13, 0xa6, 0xcf, 0x03, 0xb0, 0xe6, 0xc4, 0x21, 0x97, 0x90, 0xfa, 0x14, 0x57, 0x2d, 0x03, 0xec, 0xee, 0x3c, 0xd3, 0x6e, 0xca, 0xa8, 0x6c, 0x76, 0xbc, 0xa2, 0xde, 0xbb, 0x02, 0x20, 0x27, 0xa8, 0x85, 0x27, 0x35, 0x9b, 0x56, 0xc6, 0xa3, 0xf2, 0x47, 0xd2, 0xb7, 0x6e, 0x1b, 0x02, 0x00, 0x17, 0xaa, 0x67, 0xa6, 0x15, 0x91, 0xde, 0xfa, 0x94, 0xec, 0x7b, 0x0b, 0xf8, 0x9f, 0x84, 0x30, 0x82, 0x06, 0x4b, 0x30, 0x82, 0x04, 0x33, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x11, 0x00, 0xd9, 0xb5, 0x43, 0x7f, 0xaf, 0xa9, 0x39, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x55, 0x65, 0xad, 0x58, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0xbe, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x16, 0x30, 0x14, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0d, 0x45, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x31, 0x28, 0x30, 0x26, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x1f, 0x53, 0x65, 0x65, 0x20, 0x77, 0x77, 0x77, 0x2e, 0x65, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x6e, 0x65, 0x74, 0x2f, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x2d, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x31, 0x39, 0x30, 0x37, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x30, 0x28, 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x35, 0x20, 0x45, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x20, 0x2d, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x31, 0x32, 0x30, 0x30, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x29, 0x45, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x2d, 0x20, 0x47, 0x34, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x35, 0x30, 0x35, 0x32, 0x37, 0x31, 0x31, 0x31, 0x31, 0x31, 0x36, 0x5a, 0x17, 0x0d, 0x33, 0x37, 0x31, 0x32, 0x32, 0x37, 0x31, 0x31, 0x34, 0x31, 0x31, 0x36, 0x5a, 0x30, 0x81, 0xbe, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x16, 0x30, 0x14, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0d, 0x45, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x31, 0x28, 0x30, 0x26, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x1f, 0x53, 0x65, 0x65, 0x20, 0x77, 0x77, 0x77, 0x2e, 0x65, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x6e, 0x65, 0x74, 0x2f, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x2d, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x31, 0x39, 0x30, 0x37, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x30, 0x28, 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x35, 0x20, 0x45, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x20, 0x2d, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x31, 0x32, 0x30, 0x30, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x29, 0x45, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x2d, 0x20, 0x47, 0x34, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xb1, 0xec, 0x2c, 0x42, 0xee, 0xe2, 0xd1, 0x30, 0xff, 0xa5, 0x92, 0x47, 0xe2, 0x2d, 0xc3, 0xba, 0x64, 0x97, 0x6d, 0xca, 0xf7, 0x0d, 0xb5, 0x59, 0xc1, 0xb3, 0xcb, 0xa8, 0x68, 0x19, 0xd8, 0xaf, 0x84, 0x6d, 0x30, 0x70, 0x5d, 0x7e, 0xf3, 0x2e, 0xd2, 0x53, 0x99, 0xe1, 0xfe, 0x1f, 0x5e, 0xd9, 0x48, 0xaf, 0x5d, 0x13, 0x8d, 0xdb, 0xff, 0x63, 0x33, 0x4d, 0xd3, 0x00, 0x02, 0xbc, 0xc4, 0xf8, 0xd1, 0x06, 0x08, 0x94, 0x79, 0x58, 0x8a, 0x15, 0xde, 0x29, 0xb3, 0xfd, 0xfd, 0xc4, 0x4f, 0xe8, 0xaa, 0xe2, 0xa0, 0x3b, 0x79, 0xcd, 0xbf, 0x6b, 0x43, 0x32, 0xdd, 0xd9, 0x74, 0x10, 0xb9, 0xf7, 0xf4, 0x68, 0xd4, 0xbb, 0xd0, 0x87, 0xd5, 0xaa, 0x4b, 0x8a, 0x2a, 0x6f, 0x2a, 0x04, 0xb5, 0xb2, 0xa6, 0xc7, 0xa0, 0x7a, 0xe6, 0x48, 0xab, 0xd2, 0xd1, 0x59, 0xcc, 0xd6, 0x7e, 0x23, 0xe6, 0x97, 0x6c, 0xf0, 0x42, 0xe5, 0xdc, 0x51, 0x4b, 0x15, 0x41, 0xed, 0x49, 0x4a, 0xc9, 0xde, 0x10, 0x97, 0xd6, 0x76, 0xc1, 0xef, 0xa5, 0xb5, 0x36, 0x14, 0x97, 0x35, 0xd8, 0x78, 0x22, 0x35, 0x52, 0xef, 0x43, 0xbd, 0xdb, 0x27, 0xdb, 0x61, 0x56, 0x82, 0x34, 0xdc, 0xcb, 0x88, 0x60, 0x0c, 0x0b, 0x5a, 0xe5, 0x2c, 0x01, 0xc6, 0x54, 0xaf, 0xd7, 0xaa, 0xc1, 0x10, 0x7b, 0xd2, 0x05, 0x5a, 0xb8, 0x40, 0x9e, 0x86, 0xa7, 0xc3, 0x90, 0x86, 0x02, 0x56, 0x52, 0x09, 0x7a, 0x9c, 0xd2, 0x27, 0x82, 0x53, 0x4a, 0x65, 0x52, 0x6a, 0xf5, 0x3c, 0xe7, 0xa8, 0xf2, 0x9c, 0xaf, 0x8b, 0xbd, 0xd3, 0x0e, 0xd4, 0xd4, 0x5e, 0x6e, 0x87, 0x9e, 0x6a, 0x3d, 0x45, 0x1d, 0xd1, 0x5d, 0x1b, 0xf4, 0xe9, 0x0a, 0xac, 0x60, 0x99, 0xfb, 0x89, 0xb4, 0xff, 0x98, 0x2c, 0xcf, 0x7c, 0x1d, 0xe9, 0x02, 0xaa, 0x04, 0x9a, 0x1e, 0xb8, 0xdc, 0x88, 0x6e, 0x25, 0xb3, 0x6c, 0x66, 0xf7, 0x3c, 0x90, 0xf3, 0x57, 0xc1, 0xb3, 0x2f, 0xf5, 0x6d, 0xf2, 0xfb, 0xca, 0xa1, 0xf8, 0x29, 0x9d, 0x46, 0x8b, 0xb3, 0x6a, 0xf6, 0xe6, 0x67, 0x07, 0xbe, 0x2c, 0x67, 0x0a, 0x2a, 0x1f, 0x5a, 0xb2, 0x3e, 0x57, 0xc4, 0xd3, 0x21, 0x21, 0x63, 0x65, 0x52, 0x91, 0x1b, 0xb1, 0x99, 0x8e, 0x79, 0x7e, 0xe6, 0xeb, 0x8d, 0x00, 0xd9, 0x5a, 0xaa, 0xea, 0x73, 0xe8, 0xa4, 0x82, 0x02, 0x47, 0x96, 0xfe, 0x5b, 0x8e, 0x54, 0x61, 0xa3, 0xeb, 0x2f, 0x4b, 0x30, 0xb0, 0x8b, 0x23, 0x75, 0x72, 0x7c, 0x21, 0x3c, 0xc8, 0xf6, 0xf1, 0x74, 0xd4, 0x1c, 0x7b, 0xa3, 0x05, 0x55, 0xee, 0xbb, 0x4d, 0x3b, 0x32, 0xbe, 0x9a, 0x77, 0x66, 0x9e, 0xac, 0x69, 0x90, 0x22, 0x07, 0x1f, 0x61, 0x3a, 0x96, 0xbe, 0xe5, 0x9a, 0x4f, 0xcc, 0x05, 0x3c, 0x28, 0x59, 0xd3, 0xc1, 0x0c, 0x54, 0xa8, 0x59, 0x61, 0xbd, 0xc8, 0x72, 0x4c, 0xe8, 0xdc, 0x9f, 0x87, 0x7f, 0xbd, 0x9c, 0x48, 0x36, 0x5e, 0x95, 0xa3, 0x0e, 0xb9, 0x38, 0x24, 0x55, 0xfc, 0x75, 0x66, 0xeb, 0x02, 0xe3, 0x08, 0x34, 0x29, 0x4a, 0xc6, 0xe3, 0x2b, 0x2f, 0x33, 0xa0, 0xda, 0xa3, 0x86, 0xa5, 0x12, 0x97, 0xfd, 0x80, 0x2b, 0xda, 0x14, 0x42, 0xe3, 0x92, 0xbd, 0x3e, 0xf2, 0x5d, 0x5e, 0x67, 0x74, 0x2e, 0x1c, 0x88, 0x47, 0x29, 0x34, 0x5f, 0xe2, 0x32, 0xa8, 0x9c, 0x25, 0x37, 0x8c, 0xba, 0x98, 0x00, 0x97, 0x8b, 0x49, 0x96, 0x1e, 0xfd, 0x25, 0x8a, 0xac, 0xdc, 0xda, 0xd8, 0x5d, 0x74, 0x6e, 0x66, 0xb0, 0xff, 0x44, 0xdf, 0xa1, 0x18, 0xc6, 0xbe, 0x48, 0x2f, 0x37, 0x94, 0x78, 0xf8, 0x95, 0x4a, 0x3f, 0x7f, 0x13, 0x5e, 0x5d, 0x59, 0xfd, 0x74, 0x86, 0x43, 0x63, 0x73, 0x49, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x9f, 0x38, 0xc4, 0x56, 0x23, 0xc3, 0x39, 0xe8, 0xa0, 0x71, 0x6c, 0xe8, 0x54, 0x4c, 0xe4, 0xe8, 0x3a, 0xb1, 0xbf, 0x67, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x12, 0xe5, 0x42, 0xa6, 0x7b, 0x8b, 0x0f, 0x0c, 0xe4, 0x46, 0xa5, 0xb6, 0x60, 0x40, 0x87, 0x8c, 0x25, 0x7e, 0xad, 0xb8, 0x68, 0x2e, 0x5b, 0xc6, 0x40, 0x76, 0x3c, 0x03, 0xf8, 0xc9, 0x59, 0xf4, 0xf3, 0xab, 0x62, 0xce, 0x10, 0x8d, 0xb4, 0x5a, 0x64, 0x8c, 0x68, 0xc0, 0xb0, 0x72, 0x43, 0x34, 0xd2, 0x1b, 0x0b, 0xf6, 0x2c, 0x53, 0xd2, 0xca, 0x90, 0x4b, 0x86, 0x66, 0xfc, 0xaa, 0x83, 0x22, 0xf4, 0x8b, 0x1a, 0x6f, 0x26, 0x48, 0xac, 0x76, 0x77, 0x08, 0xbf, 0xc5, 0x98, 0x5c, 0xf4, 0x26, 0x89, 0x9e, 0x7b, 0xc3, 0xb9, 0x64, 0x32, 0x01, 0x7f, 0xd3, 0xc3, 0xdd, 0x58, 0x6d, 0xec, 0xb1, 0xab, 0x84, 0x55, 0x74, 0x77, 0x84, 0x04, 0x27, 0x52, 0x6b, 0x86, 0x4c, 0xce, 0xdd, 0xb9, 0x65, 0xff, 0xd6, 0xc6, 0x5e, 0x9f, 0x9a, 0x10, 0x99, 0x4b, 0x75, 0x6a, 0xfe, 0x6a, 0xe9, 0x97, 0x20, 0xe4, 0xe4, 0x76, 0x7a, 0xc6, 0xd0, 0x24, 0xaa, 0x90, 0xcd, 0x20, 0x90, 0xba, 0x47, 0x64, 0xfb, 0x7f, 0x07, 0xb3, 0x53, 0x78, 0xb5, 0x0a, 0x62, 0xf2, 0x73, 0x43, 0xce, 0x41, 0x2b, 0x81, 0x6a, 0x2e, 0x85, 0x16, 0x94, 0x53, 0xd4, 0x6b, 0x5f, 0x72, 0x22, 0xab, 0x51, 0x2d, 0x42, 0xd5, 0x00, 0x9c, 0x99, 0xbf, 0xde, 0xbb, 0x94, 0x3b, 0x57, 0xfd, 0x9a, 0xf5, 0x86, 0xcb, 0x56, 0x3b, 0x5b, 0x88, 0x01, 0xe5, 0x7c, 0x28, 0x4b, 0x03, 0xf9, 0x49, 0x83, 0x7c, 0xb2, 0x7f, 0x7c, 0xe3, 0xed, 0x8e, 0xa1, 0x7f, 0x60, 0x53, 0x8e, 0x55, 0x9d, 0x50, 0x34, 0x12, 0x0f, 0xb7, 0x97, 0x7b, 0x6c, 0x87, 0x4a, 0x44, 0xe7, 0xf5, 0x6d, 0xec, 0x80, 0x37, 0xf0, 0x58, 0x19, 0x6e, 0x4a, 0x68, 0x76, 0xf0, 0x1f, 0x92, 0xe4, 0xea, 0xb5, 0x92, 0xd3, 0x61, 0x51, 0x10, 0x0b, 0xad, 0xa7, 0xd9, 0x5f, 0xc7, 0x5f, 0xdc, 0x1f, 0xa3, 0x5c, 0x8c, 0xa1, 0x7e, 0x9b, 0xb7, 0x9e, 0xd3, 0x56, 0x6f, 0x66, 0x5e, 0x07, 0x96, 0x20, 0xed, 0x0b, 0x74, 0xfb, 0x66, 0x4e, 0x8b, 0x11, 0x15, 0xe9, 0x81, 0x49, 0x7e, 0x6f, 0xb0, 0xd4, 0x50, 0x7f, 0x22, 0xd7, 0x5f, 0x65, 0x02, 0x0d, 0xa6, 0xf4, 0x85, 0x1e, 0xd8, 0xae, 0x06, 0x4b, 0x4a, 0xa7, 0xd2, 0x31, 0x66, 0xc2, 0xf8, 0xce, 0xe5, 0x08, 0xa6, 0xa4, 0x02, 0x96, 0x44, 0x68, 0x57, 0xc4, 0xd5, 0x33, 0xcf, 0x19, 0x2f, 0x14, 0xc4, 0x94, 0x1c, 0x7b, 0xa4, 0xd9, 0xf0, 0x9f, 0x0e, 0xb1, 0x80, 0xe2, 0xd1, 0x9e, 0x11, 0x64, 0xa9, 0x88, 0x11, 0x3a, 0x76, 0x82, 0xe5, 0x62, 0xc2, 0x80, 0xd8, 0xa4, 0x83, 0xed, 0x93, 0xef, 0x7c, 0x2f, 0x90, 0xb0, 0x32, 0x4c, 0x96, 0x15, 0x68, 0x48, 0x52, 0xd4, 0x99, 0x08, 0xc0, 0x24, 0xe8, 0x1c, 0xe3, 0xb3, 0xa5, 0x21, 0x0e, 0x92, 0xc0, 0x90, 0x1f, 0xcf, 0x20, 0x5f, 0xca, 0x3b, 0x38, 0xc7, 0xb7, 0x6d, 0x3a, 0xf3, 0xe6, 0x44, 0xb8, 0x0e, 0x31, 0x6b, 0x88, 0x8e, 0x70, 0xeb, 0x9c, 0x17, 0x52, 0xa8, 0x41, 0x94, 0x2e, 0x87, 0xb6, 0xe7, 0xa6, 0x12, 0xc5, 0x75, 0xdf, 0x5b, 0xc0, 0x0a, 0x6e, 0x7b, 0xa4, 0xe4, 0x5e, 0x86, 0xf9, 0x36, 0x94, 0xdf, 0x77, 0xc3, 0xe9, 0x0d, 0xc0, 0x39, 0xf1, 0x79, 0xbb, 0x46, 0x8e, 0xab, 0x43, 0x59, 0x27, 0xb7, 0x20, 0xbb, 0x23, 0xe9, 0x56, 0x40, 0x21, 0xec, 0x31, 0x3d, 0x65, 0xaa, 0x43, 0xf2, 0x3d, 0xdf, 0x70, 0x44, 0xe1, 0xba, 0x4d, 0x26, 0x10, 0x3b, 0x98, 0x9f, 0xf3, 0xc8, 0x8e, 0x1b, 0x38, 0x56, 0x21, 0x6a, 0x51, 0x93, 0xd3, 0x91, 0xca, 0x46, 0xda, 0x89, 0xb7, 0x3d, 0x53, 0x83, 0x2c, 0x08, 0x1f, 0x8b, 0x8f, 0x53, 0xdd, 0xff, 0xac, 0x1f, 0x30, 0x82, 0x03, 0x94, 0x30, 0x82, 0x02, 0x7c, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0a, 0x31, 0xf5, 0xe4, 0x62, 0x0c, 0x6c, 0x58, 0xed, 0xd6, 0xd8, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x67, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x49, 0x4e, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x0a, 0x65, 0x6d, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x50, 0x4b, 0x49, 0x31, 0x25, 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x1c, 0x65, 0x4d, 0x75, 0x64, 0x68, 0x72, 0x61, 0x20, 0x54, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, 0x73, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x31, 0x1c, 0x30, 0x1a, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x13, 0x65, 0x6d, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x2d, 0x20, 0x47, 0x31, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x38, 0x30, 0x32, 0x31, 0x38, 0x31, 0x38, 0x33, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x34, 0x33, 0x30, 0x32, 0x31, 0x38, 0x31, 0x38, 0x33, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x67, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x49, 0x4e, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x0a, 0x65, 0x6d, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x50, 0x4b, 0x49, 0x31, 0x25, 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x1c, 0x65, 0x4d, 0x75, 0x64, 0x68, 0x72, 0x61, 0x20, 0x54, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, 0x73, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x31, 0x1c, 0x30, 0x1a, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x13, 0x65, 0x6d, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x2d, 0x20, 0x47, 0x31, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0x93, 0x4b, 0xbb, 0xe9, 0x66, 0x8a, 0xee, 0x9d, 0x5b, 0xd5, 0x34, 0x93, 0xd0, 0x1b, 0x1e, 0xc3, 0xe7, 0x9e, 0xb8, 0x64, 0x33, 0x7f, 0x63, 0x78, 0x68, 0xb4, 0xcd, 0x2e, 0x71, 0x75, 0xd7, 0x9b, 0x20, 0xc6, 0x4d, 0x29, 0xbc, 0xb6, 0x68, 0x60, 0x8a, 0xf7, 0x21, 0x9a, 0x56, 0x35, 0x5a, 0xf3, 0x76, 0xbd, 0xd8, 0xcd, 0x9a, 0xff, 0x93, 0x56, 0x4b, 0xa5, 0x59, 0x06, 0xa1, 0x93, 0x34, 0x29, 0xdd, 0x16, 0x34, 0x75, 0x4e, 0xf2, 0x81, 0xb4, 0xc7, 0x96, 0x4e, 0xad, 0x19, 0x15, 0x52, 0x4a, 0xfe, 0x3c, 0x70, 0x75, 0x70, 0xcd, 0xaf, 0x2b, 0xab, 0x15, 0x9a, 0x33, 0x3c, 0xaa, 0xb3, 0x8b, 0xaa, 0xcd, 0x43, 0xfd, 0xf5, 0xea, 0x70, 0xff, 0xed, 0xcf, 0x11, 0x3b, 0x94, 0xce, 0x4e, 0x32, 0x16, 0xd3, 0x23, 0x40, 0x2a, 0x77, 0xb3, 0xaf, 0x3c, 0x01, 0x2c, 0x6c, 0xed, 0x99, 0x2c, 0x8b, 0xd9, 0x4e, 0x69, 0x98, 0xb2, 0xf7, 0x8f, 0x41, 0xb0, 0x32, 0x78, 0x61, 0xd6, 0x0d, 0x5f, 0xc3, 0xfa, 0xa2, 0x40, 0x92, 0x1d, 0x5c, 0x17, 0xe6, 0x70, 0x3e, 0x35, 0xe7, 0xa2, 0xb7, 0xc2, 0x62, 0xe2, 0xab, 0xa4, 0x38, 0x4c, 0xb5, 0x39, 0x35, 0x6f, 0xea, 0x03, 0x69, 0xfa, 0x3a, 0x54, 0x68, 0x85, 0x6d, 0xd6, 0xf2, 0x2f, 0x43, 0x55, 0x1e, 0x91, 0x0d, 0x0e, 0xd8, 0xd5, 0x6a, 0xa4, 0x96, 0xd1, 0x13, 0x3c, 0x2c, 0x78, 0x50, 0xe8, 0x3a, 0x92, 0xd2, 0x17, 0x56, 0xe5, 0x35, 0x1a, 0x40, 0x1c, 0x3e, 0x8d, 0x2c, 0xed, 0x39, 0xdf, 0x42, 0xe0, 0x83, 0x41, 0x74, 0xdf, 0xa3, 0xcd, 0xc2, 0x86, 0x60, 0x48, 0x68, 0xe3, 0x69, 0x0b, 0x54, 0x00, 0x8b, 0xe4, 0x76, 0x69, 0x21, 0x0d, 0x79, 0x4e, 0x34, 0x08, 0x5e, 0x14, 0xc2, 0xcc, 0xb1, 0xb7, 0xad, 0xd7, 0x7c, 0x70, 0x8a, 0xc7, 0x85, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xfb, 0xef, 0x0d, 0x86, 0x9e, 0xb0, 0xe3, 0xdd, 0xa9, 0xb9, 0xf1, 0x21, 0x17, 0x7f, 0x3e, 0xfc, 0xf0, 0x77, 0x2b, 0x1a, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x59, 0xff, 0xf2, 0x8c, 0xf5, 0x87, 0x7d, 0x71, 0x3d, 0xa3, 0x9f, 0x1b, 0x5b, 0xd1, 0xda, 0xf8, 0xd3, 0x9c, 0x6b, 0x36, 0xbd, 0x9b, 0xa9, 0x61, 0xeb, 0xde, 0x16, 0x2c, 0x74, 0x3d, 0x9e, 0xe6, 0x75, 0xda, 0xd7, 0xba, 0xa7, 0xbc, 0x42, 0x17, 0xe7, 0x3d, 0x91, 0xeb, 0xe5, 0x7d, 0xdd, 0x3e, 0x9c, 0xf1, 0xcf, 0x92, 0xac, 0x6c, 0x48, 0xcc, 0xc2, 0x22, 0x3f, 0x69, 0x3b, 0xc5, 0xb6, 0x15, 0x2f, 0xa3, 0x35, 0xc6, 0x68, 0x2a, 0x1c, 0x57, 0xaf, 0x39, 0xef, 0x8d, 0xd0, 0x35, 0xc3, 0x18, 0x0c, 0x7b, 0x00, 0x56, 0x1c, 0xcd, 0x8b, 0x19, 0x74, 0xde, 0xbe, 0x0f, 0x12, 0xe0, 0xd0, 0xaa, 0xa1, 0x3f, 0x02, 0x34, 0xb1, 0x70, 0xce, 0x9d, 0x18, 0xd6, 0x08, 0x03, 0x09, 0x46, 0xee, 0x60, 0xe0, 0x7e, 0xb6, 0xc4, 0x49, 0x04, 0x51, 0x7d, 0x70, 0x60, 0xbc, 0xaa, 0xb2, 0xff, 0x79, 0x72, 0x7a, 0xa6, 0x1d, 0x3d, 0x5f, 0x2a, 0xf8, 0xca, 0xe2, 0xfd, 0x39, 0xb7, 0x47, 0xb9, 0xeb, 0x7e, 0xdf, 0x04, 0x23, 0xaf, 0xfa, 0x9c, 0x06, 0x07, 0xe9, 0xfb, 0x63, 0x93, 0x80, 0x40, 0xb5, 0xc6, 0x6c, 0x0a, 0x31, 0x28, 0xce, 0x0c, 0x9f, 0xcf, 0xb3, 0x23, 0x35, 0x80, 0x41, 0x8d, 0x6c, 0xc4, 0x37, 0x7b, 0x81, 0x2f, 0x80, 0xa1, 0x40, 0x42, 0x85, 0xe9, 0xd9, 0x38, 0x8d, 0xe8, 0xa1, 0x53, 0xcd, 0x01, 0xbf, 0x69, 0xe8, 0x5a, 0x06, 0xf2, 0x45, 0x0b, 0x90, 0xfa, 0xae, 0xe1, 0xbf, 0x9d, 0xf2, 0xae, 0x57, 0x3c, 0xa5, 0xae, 0xb2, 0x56, 0xf4, 0x8b, 0x65, 0x40, 0xe9, 0xfd, 0x31, 0x81, 0x2c, 0xf4, 0x39, 0x09, 0xd8, 0xee, 0x6b, 0xa7, 0xb4, 0xa6, 0x1d, 0x15, 0xa5, 0x98, 0xf7, 0x01, 0x81, 0xd8, 0x85, 0x7d, 0xf3, 0x51, 0x5c, 0x71, 0x88, 0xde, 0xba, 0xcc, 0x1f, 0x80, 0x7e, 0x4a, 0x30, 0x82, 0x02, 0x4e, 0x30, 0x82, 0x01, 0xd3, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0a, 0x3c, 0xf6, 0x07, 0xa9, 0x68, 0x70, 0x0e, 0xda, 0x8b, 0x84, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x30, 0x6b, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x49, 0x4e, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x0a, 0x65, 0x6d, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x50, 0x4b, 0x49, 0x31, 0x25, 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x1c, 0x65, 0x4d, 0x75, 0x64, 0x68, 0x72, 0x61, 0x20, 0x54, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, 0x73, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x17, 0x65, 0x6d, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x45, 0x43, 0x43, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x2d, 0x20, 0x47, 0x33, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x38, 0x30, 0x32, 0x31, 0x38, 0x31, 0x38, 0x33, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x34, 0x33, 0x30, 0x32, 0x31, 0x38, 0x31, 0x38, 0x33, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x6b, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x49, 0x4e, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x0a, 0x65, 0x6d, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x50, 0x4b, 0x49, 0x31, 0x25, 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x1c, 0x65, 0x4d, 0x75, 0x64, 0x68, 0x72, 0x61, 0x20, 0x54, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, 0x73, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x17, 0x65, 0x6d, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x45, 0x43, 0x43, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x2d, 0x20, 0x47, 0x33, 0x30, 0x76, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x22, 0x03, 0x62, 0x00, 0x04, 0x23, 0xa5, 0x0c, 0xb8, 0x2d, 0x12, 0xf5, 0x28, 0xf3, 0xb1, 0xb2, 0xdd, 0xe2, 0x02, 0x12, 0x80, 0x9e, 0x39, 0x5f, 0x49, 0x4d, 0x9f, 0xc9, 0x25, 0x34, 0x59, 0x74, 0xec, 0xbb, 0x06, 0x1c, 0xe7, 0xc0, 0x72, 0xaf, 0xe8, 0xae, 0x2f, 0xe1, 0x41, 0x54, 0x87, 0x14, 0xa8, 0x4a, 0xb2, 0xe8, 0x7c, 0x82, 0xe6, 0x5b, 0x6a, 0xb5, 0xdc, 0xb3, 0x75, 0xce, 0x8b, 0x06, 0xd0, 0x86, 0x23, 0xbf, 0x46, 0xd5, 0x8e, 0x0f, 0x3f, 0x04, 0xf4, 0xd7, 0x1c, 0x92, 0x7e, 0xf6, 0xa5, 0x63, 0xc2, 0xf5, 0x5f, 0x8e, 0x2e, 0x4f, 0xa1, 0x18, 0x19, 0x02, 0x2b, 0x32, 0x0a, 0x82, 0x64, 0x7d, 0x16, 0x93, 0xd1, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x7c, 0x5d, 0x02, 0x84, 0x13, 0xd4, 0xcc, 0x8a, 0x9b, 0x81, 0xce, 0x17, 0x1c, 0x2e, 0x29, 0x1e, 0x9c, 0x48, 0x63, 0x42, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x03, 0x69, 0x00, 0x30, 0x66, 0x02, 0x31, 0x00, 0xbe, 0xf3, 0x61, 0xcf, 0x02, 0x10, 0x1d, 0x64, 0x95, 0x07, 0xb8, 0x18, 0x6e, 0x88, 0x85, 0x05, 0x2f, 0x83, 0x08, 0x17, 0x90, 0xca, 0x1f, 0x8a, 0x4c, 0xe8, 0x0d, 0x1b, 0x7a, 0xb1, 0xad, 0xd5, 0x81, 0x09, 0x47, 0xef, 0x3b, 0xac, 0x08, 0x04, 0x7c, 0x5c, 0x99, 0xb1, 0xed, 0x47, 0x07, 0xd2, 0x02, 0x31, 0x00, 0x9d, 0xba, 0x55, 0xfc, 0xa9, 0x4a, 0xe8, 0xed, 0xed, 0xe6, 0x76, 0x01, 0x42, 0x7b, 0xc8, 0xf8, 0x60, 0xd9, 0x8d, 0x51, 0x8b, 0x55, 0x3b, 0xfb, 0x8c, 0x7b, 0xeb, 0x65, 0x09, 0xc3, 0xf8, 0x96, 0xcd, 0x47, 0xa8, 0x82, 0xf2, 0x16, 0x55, 0x77, 0x24, 0x7e, 0x12, 0x10, 0x95, 0x04, 0x2c, 0xa3, 0x30, 0x82, 0x03, 0x73, 0x30, 0x82, 0x02, 0x5b, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0b, 0x00, 0xae, 0xcf, 0x00, 0xba, 0xc4, 0xcf, 0x32, 0xf8, 0x43, 0xb2, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x56, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x0a, 0x65, 0x6d, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x50, 0x4b, 0x49, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0b, 0x65, 0x4d, 0x75, 0x64, 0x68, 0x72, 0x61, 0x20, 0x49, 0x6e, 0x63, 0x31, 0x1c, 0x30, 0x1a, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x13, 0x65, 0x6d, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x2d, 0x20, 0x43, 0x31, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x38, 0x30, 0x32, 0x31, 0x38, 0x31, 0x38, 0x33, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x34, 0x33, 0x30, 0x32, 0x31, 0x38, 0x31, 0x38, 0x33, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x56, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x0a, 0x65, 0x6d, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x50, 0x4b, 0x49, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0b, 0x65, 0x4d, 0x75, 0x64, 0x68, 0x72, 0x61, 0x20, 0x49, 0x6e, 0x63, 0x31, 0x1c, 0x30, 0x1a, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x13, 0x65, 0x6d, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x2d, 0x20, 0x43, 0x31, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xcf, 0xeb, 0xa9, 0xb9, 0xf1, 0x99, 0x05, 0xcc, 0xd8, 0x28, 0x21, 0x4a, 0xf3, 0x73, 0x34, 0x51, 0x84, 0x56, 0x10, 0xf5, 0xa0, 0x4f, 0x2c, 0x12, 0xe3, 0xfa, 0x13, 0x9a, 0x27, 0xd0, 0xcf, 0xf9, 0x79, 0x1a, 0x74, 0x5f, 0x1d, 0x79, 0x39, 0xfc, 0x5b, 0xf8, 0x70, 0x8e, 0xe0, 0x92, 0x52, 0xf7, 0xe4, 0x25, 0xf9, 0x54, 0x83, 0xd9, 0x1d, 0xd3, 0xc8, 0x5a, 0x85, 0x3f, 0x5e, 0xc7, 0xb6, 0x07, 0xee, 0x3e, 0xc0, 0xce, 0x9a, 0xaf, 0xac, 0x56, 0x42, 0x2a, 0x39, 0x25, 0x70, 0xd6, 0xbf, 0xb5, 0x7b, 0x36, 0xad, 0xac, 0xf6, 0x73, 0xdc, 0xcd, 0xd7, 0x1d, 0x8a, 0x83, 0xa5, 0xfb, 0x2b, 0x90, 0x15, 0x37, 0x6b, 0x1c, 0x26, 0x47, 0xdc, 0x3b, 0x29, 0x56, 0x93, 0x6a, 0xb3, 0xc1, 0x6a, 0x3a, 0x9d, 0x3d, 0xf5, 0xc1, 0x97, 0x38, 0x58, 0x05, 0x8b, 0x1c, 0x11, 0xe3, 0xe4, 0xb4, 0xb8, 0x5d, 0x85, 0x1d, 0x83, 0xfe, 0x78, 0x5f, 0x0b, 0x45, 0x68, 0x18, 0x48, 0xa5, 0x46, 0x73, 0x34, 0x3b, 0xfe, 0x0f, 0xc8, 0x76, 0xbb, 0xc7, 0x18, 0xf3, 0x05, 0xd1, 0x86, 0xf3, 0x85, 0xed, 0xe7, 0xb9, 0xd9, 0x32, 0xad, 0x55, 0x88, 0xce, 0xa6, 0xb6, 0x91, 0xb0, 0x4f, 0xac, 0x7e, 0x15, 0x23, 0x96, 0xf6, 0x3f, 0xf0, 0x20, 0x34, 0x16, 0xde, 0x0a, 0xc6, 0xc4, 0x04, 0x45, 0x79, 0x7f, 0xa7, 0xfd, 0xbe, 0xd2, 0xa9, 0xa5, 0xaf, 0x9c, 0xc5, 0x23, 0x2a, 0xf7, 0x3c, 0x21, 0x6c, 0xbd, 0xaf, 0x8f, 0x4e, 0xc5, 0x3a, 0xb2, 0xf3, 0x34, 0x12, 0xfc, 0xdf, 0x80, 0x1a, 0x49, 0xa4, 0xd4, 0xa9, 0x95, 0xf7, 0x9e, 0x89, 0x5e, 0xa2, 0x89, 0xac, 0x94, 0xcb, 0xa8, 0x68, 0x9b, 0xaf, 0x8a, 0x65, 0x27, 0xcd, 0x89, 0xee, 0xdd, 0x8c, 0xb5, 0x6b, 0x29, 0x70, 0x43, 0xa0, 0x69, 0x0b, 0xe4, 0xb9, 0x0f, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xfe, 0xa1, 0xe0, 0x70, 0x1e, 0x2a, 0x03, 0x39, 0x52, 0x5a, 0x42, 0xbe, 0x5c, 0x91, 0x85, 0x7a, 0x18, 0xaa, 0x4d, 0xb5, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0xc2, 0x4a, 0x56, 0xfa, 0x15, 0x21, 0x7b, 0x28, 0xa2, 0xe9, 0xe5, 0x1d, 0xfb, 0xf8, 0x2d, 0xc4, 0x39, 0x96, 0x41, 0x4c, 0x3b, 0x27, 0x2c, 0xc4, 0x6c, 0x18, 0x15, 0x80, 0xc6, 0xac, 0xaf, 0x47, 0x59, 0x2f, 0x26, 0x0b, 0xe3, 0x36, 0xb0, 0xef, 0x3b, 0xfe, 0x43, 0x97, 0x49, 0x32, 0x99, 0x12, 0x15, 0x5b, 0xdf, 0x11, 0x29, 0xff, 0xab, 0x53, 0xf8, 0xbb, 0xc1, 0x78, 0x0f, 0xac, 0x9c, 0x53, 0xaf, 0x57, 0xbd, 0x68, 0x8c, 0x3d, 0x69, 0x33, 0xf0, 0xa3, 0xa0, 0x23, 0x63, 0x3b, 0x64, 0x67, 0x22, 0x44, 0xad, 0xd5, 0x71, 0xcb, 0x56, 0x2a, 0x78, 0x92, 0xa3, 0x4f, 0x12, 0x31, 0x36, 0x36, 0xe2, 0xde, 0xfe, 0x00, 0xc4, 0xa3, 0x60, 0x0f, 0x27, 0xad, 0xa0, 0xb0, 0x8a, 0xb5, 0x36, 0x7a, 0x52, 0xa1, 0xbd, 0x27, 0xf4, 0x20, 0x27, 0x62, 0xe8, 0x4d, 0x94, 0x24, 0x13, 0xe4, 0x0a, 0x04, 0xe9, 0x3c, 0xab, 0x2e, 0xc8, 0x43, 0x09, 0x4a, 0xc6, 0x61, 0x04, 0xe5, 0x49, 0x34, 0x7e, 0xd3, 0xc4, 0xc8, 0xf5, 0x0f, 0xc0, 0xaa, 0xe9, 0xba, 0x54, 0x5e, 0xf3, 0x63, 0x2b, 0x4f, 0x4f, 0x50, 0xd4, 0xfe, 0xb9, 0x7b, 0x99, 0x8c, 0x3d, 0xc0, 0x2e, 0xbc, 0x02, 0x2b, 0xd3, 0xc4, 0x40, 0xe4, 0x8a, 0x07, 0x31, 0x1e, 0x9b, 0xce, 0x26, 0x99, 0x13, 0xfb, 0x11, 0xea, 0x9a, 0x22, 0x0c, 0x11, 0x19, 0xc7, 0x5e, 0x1b, 0x81, 0x50, 0x30, 0xc8, 0x96, 0x12, 0x6e, 0xe7, 0xcb, 0x41, 0x7f, 0x91, 0x3b, 0xa2, 0x47, 0xb7, 0x54, 0x80, 0x1b, 0xdc, 0x00, 0xcc, 0x9a, 0x90, 0xea, 0xc3, 0xc3, 0x50, 0x06, 0x62, 0x0c, 0x30, 0xc0, 0x15, 0x48, 0xa7, 0xa8, 0x59, 0x7c, 0xe1, 0xae, 0x22, 0xa2, 0xe2, 0x0a, 0x7a, 0x0f, 0xfa, 0x62, 0xab, 0x52, 0x4c, 0xe1, 0xf1, 0xdf, 0xca, 0xbe, 0x83, 0x0d, 0x42, 0x30, 0x82, 0x02, 0x2b, 0x30, 0x82, 0x01, 0xb1, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0a, 0x7b, 0x71, 0xb6, 0x82, 0x56, 0xb8, 0x12, 0x7c, 0x9c, 0xa8, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x30, 0x5a, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x0a, 0x65, 0x6d, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x50, 0x4b, 0x49, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0b, 0x65, 0x4d, 0x75, 0x64, 0x68, 0x72, 0x61, 0x20, 0x49, 0x6e, 0x63, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x17, 0x65, 0x6d, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x45, 0x43, 0x43, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x2d, 0x20, 0x43, 0x33, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x38, 0x30, 0x32, 0x31, 0x38, 0x31, 0x38, 0x33, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x34, 0x33, 0x30, 0x32, 0x31, 0x38, 0x31, 0x38, 0x33, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x5a, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x0a, 0x65, 0x6d, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x50, 0x4b, 0x49, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0b, 0x65, 0x4d, 0x75, 0x64, 0x68, 0x72, 0x61, 0x20, 0x49, 0x6e, 0x63, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x17, 0x65, 0x6d, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x45, 0x43, 0x43, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x2d, 0x20, 0x43, 0x33, 0x30, 0x76, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x22, 0x03, 0x62, 0x00, 0x04, 0xfd, 0xa5, 0x61, 0xae, 0x7b, 0x26, 0x10, 0x1d, 0xe9, 0xb7, 0x22, 0x30, 0xae, 0x06, 0xf4, 0x81, 0xb3, 0xb1, 0x42, 0x71, 0x95, 0x39, 0xbc, 0xd3, 0x52, 0xe3, 0xaf, 0xaf, 0xf9, 0xf2, 0x97, 0x35, 0x92, 0x36, 0x46, 0x0e, 0x87, 0x95, 0x8d, 0xb9, 0x39, 0x5a, 0xe9, 0xbb, 0xdf, 0xd0, 0xfe, 0xc8, 0x07, 0x41, 0x3c, 0xbb, 0x55, 0x6f, 0x83, 0xa3, 0x6a, 0xfb, 0x62, 0xb0, 0x81, 0x89, 0x02, 0x70, 0x7d, 0x48, 0xc5, 0x4a, 0xe3, 0xe9, 0x22, 0x54, 0x22, 0x4d, 0x93, 0xbb, 0x42, 0x0c, 0xaf, 0x77, 0x9c, 0x23, 0xa6, 0x7d, 0xd7, 0x61, 0x11, 0xce, 0x65, 0xc7, 0xf8, 0x7f, 0xfe, 0xf5, 0xf2, 0xa9, 0xa3, 0x42, 0x30, 0x40, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xfb, 0x5a, 0x48, 0xd0, 0x80, 0x20, 0x40, 0xf2, 0xa8, 0xe9, 0x00, 0x07, 0x69, 0x19, 0x77, 0xa7, 0xe6, 0xc3, 0xf4, 0xcf, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x03, 0x03, 0x68, 0x00, 0x30, 0x65, 0x02, 0x31, 0x00, 0xb4, 0xd8, 0x2f, 0x02, 0x89, 0xfd, 0xb6, 0x4c, 0x62, 0xba, 0x43, 0x4e, 0x13, 0x84, 0x72, 0xb5, 0xae, 0xdd, 0x1c, 0xde, 0xd6, 0xb5, 0xdc, 0x56, 0x8f, 0x58, 0x40, 0x5a, 0x2d, 0xde, 0x20, 0x4c, 0x22, 0x83, 0xca, 0x93, 0xa8, 0x7e, 0xee, 0x12, 0x40, 0xc7, 0xd6, 0x87, 0x4f, 0xf8, 0xdf, 0x85, 0x02, 0x30, 0x1c, 0x14, 0x64, 0xe4, 0x7c, 0x96, 0x83, 0x11, 0x9c, 0xb0, 0xd1, 0x5a, 0x61, 0x4b, 0xa6, 0x0f, 0x49, 0xd3, 0x00, 0xfc, 0xa1, 0xfc, 0xe4, 0xa5, 0xff, 0x7f, 0xad, 0xd7, 0x30, 0xd0, 0xc7, 0x77, 0x7f, 0xbe, 0x81, 0x07, 0x55, 0x30, 0x50, 0x20, 0x14, 0xf5, 0x57, 0x38, 0x0a, 0xa8, 0x31, 0x51, 0x05, 0x86, 0x02, 0x5d, 0x05, 0xac, 0x05, 0xf3, 0x02, 0x69, 0x05, 0xc4, 0x05, 0xd3, 0x05, 0xef, 0x05, 0x4b, 0x02, 0x6d, 0x03, 0xb9, 0x03, 0x76, 0x05, 0xd6, 0x02, 0x72, 0x05, 0x6f, 0x04, 0x67, 0x01, 0xba, 0x05, 0x8c, 0x05, 0x45, 0x03, 0x45, 0x01, 0xf6, 0x06, 0x0f, 0x02, 0xc7, 0x06, 0x5f, 0x04, 0x24, 0x06, 0x33, 0x04, 0x34, 0x05, 0x5e, 0x05, 0x4a, 0x02, 0x98, 0x02, 0x91, 0x05, 0xe1, 0x05, 0x87, 0x05, 0x91, 0x04, 0x19, 0x03, 0x4e, 0x03, 0xea, 0x05, 0x64, 0x05, 0xbb, 0x05, 0x64, 0x06, 0xa1, 0x05, 0x64, 0x03, 0x71, 0x03, 0x5e, 0x03, 0x7b, 0x05, 0xdc, 0x04, 0x13, 0x03, 0xe1, 0x03, 0xf3, 0x05, 0xe2, 0x02, 0x93, 0x04, 0x95, 0x05, 0x5a, 0x04, 0x2e, 0x04, 0x36, 0x07, 0xd7, 0x05, 0xbf, 0x03, 0x50, 0x05, 0xb4, 0x05, 0x4a, 0x02, 0x02, 0x03, 0x50, 0x06, 0x18, 0x03, 0x7b, 0x05, 0x5d, 0x03, 0x7b, 0x05, 0x5d, 0x05, 0x6d, 0x03, 0xac, 0x05, 0x3c, 0x05, 0x64, 0x05, 0x6a, 0x05, 0x74, 0x04, 0x42, 0x02, 0xfd, 0x03, 0x3c, 0x03, 0xbf, 0x04, 0x21, 0x03, 0xa5, 0x02, 0x8d, 0x03, 0xbb, 0x03, 0x9a, 0x03, 0xb3, 0x03, 0x92, 0x02, 0x43, 0x03, 0xc9, 0x05, 0x94, 0x02, 0x4a, 0x04, 0x04, 0x03, 0xc9, 0x04, 0x35, 0x03, 0x34, 0x05, 0xf5, 0x03, 0xc7, 0x03, 0xc7, 0x05, 0x45, 0x03, 0x7f, 0x05, 0xa6, 0x05, 0x5e, 0x02, 0x10, 0x02, 0x0e, 0x05, 0x5e, 0x05, 0x5e, 0x02, 0x0f, 0x03, 0xbe, 0x03, 0x63, 0x03, 0x79, 0x02, 0x22, 0x05, 0x87, 0x04, 0x0e, 0x03, 0xc0, 0x03, 0xbc, 0x05, 0xbe, 0x02, 0x44, 0x02, 0x64, 0x05, 0xde, 0x02, 0xa1, 0x04, 0x37, 0x04, 0x47, 0x06, 0x4f, 0x05, 0xc1, 0x04, 0x34, 0x01, 0xe5, 0x06, 0x4f, 0x03, 0x98, 0x02, 0x52, 0x03, 0x77, 0x02, 0x2f, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, 0x14, 0x14, 0x14, 0x00, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xdc, 0x2e, 0x1f, 0xd1, 0x61, 0x37, 0x79, 0xe4, 0xab, 0xd5, 0xd5, 0xb3, 0x12, 0x71, 0x68, 0x3d, 0x6a, 0x68, 0x9c, 0x22, 0xc8, 0xcb, 0x99, 0x72, 0x70, 0x52, 0x0c, 0xf8, 0xe6, 0xbe, 0xb2, 0x04, 0x57, 0x29, 0x2a, 0xcf, 0x42, 0x10, 0xed, 0x35, 0x09, 0xcb, 0x59, 0x7f, 0x86, 0xb2, 0x70, 0x8f, 0x1a, 0xc3, 0x39, 0xe3, 0xc0, 0xd9, 0xe9, 0xbf, 0xbb, 0x4d, 0xb2, 0x23, 0x9c, 0x5f, 0xd0, 0x6c, 0x63, 0xa3, 0x5f, 0x93, 0xca, 0x93, 0x98, 0x08, 0xad, 0x8c, 0x87, 0xa5, 0x2c, 0x5c, 0xc1, 0x37, 0x8d, 0x06, 0x66, 0x74, 0x24, 0x76, 0x3a, 0xf3, 0x89, 0xf7, 0xbc, 0xd6, 0xbd, 0x47, 0x7d, 0x2f, 0xbc, 0x10, 0x5f, 0x4b, 0x8c, 0xfb, 0x1c, 0x75, 0xbc, 0x02, 0xd3, 0x9f, 0x4e, 0x2e, 0x48, 0xd9, 0xf9, 0x60, 0x54, 0xaa, 0xc4, 0xb3, 0x4f, 0xfa, 0x17, 0x9d, 0xcd, 0x1e, 0x8b, 0xd6, 0x39, 0x2b, 0x70, 0xd3, 0x5c, 0xd4, 0xa0, 0xb8, 0x1f, 0xb0, 0x00, 0xfc, 0xc5, 0x61, 0xf9, 0x60, 0xbb, 0xd4, 0xe3, 0xd5, 0x34, 0xf6, 0xb8, 0xf5, 0x06, 0x80, 0x25, 0xa7, 0x73, 0xdb, 0x46, 0x69, 0xa8, 0x9e, 0x82, 0x21, 0x2d, 0x66, 0xc6, 0xd7, 0xa0, 0xe0, 0x15, 0xeb, 0xce, 0x4c, 0x09, 0x77, 0xc4, 0x60, 0x9e, 0x54, 0x6e, 0x03, 0x48, 0x87, 0x14, 0xac, 0xe3, 0xc3, 0x9e, 0x90, 0x60, 0x3a, 0xd7, 0xca, 0x89, 0xee, 0xd3, 0xad, 0x8c, 0xb4, 0x50, 0x66, 0x35, 0x0f, 0xc8, 0x36, 0x63, 0x5e, 0xe2, 0xa3, 0xec, 0xf9, 0x3b, 0x66, 0x15, 0xce, 0x51, 0x52, 0xe3, 0x91, 0x9a, 0x3d, 0x2e, 0x16, 0xa9, 0x4a, 0x18, 0xb5, 0xcb, 0xcc, 0xf5, 0x6f, 0x50, 0xf3, 0x23, 0x5f, 0xf8, 0x5d, 0xe7, 0xac, 0xf0, 0xc8, 0xb6, 0xa1, 0x54, 0x39, 0x02, 0xc3, 0xa0, 0x3f, 0x8e, 0x8a, 0xbc, 0xfa, 0xd4, 0xf8, 0x1c, 0xa6, 0xd1, 0x3a, 0x0e, 0xfd, 0x01, 0xb9, 0x2f, 0xef, 0xbf, 0x11, 0x86, 0x60, 0xf2, 0x4f, 0xd0, 0x41, 0x6e, 0xab, 0x73, 0x1f, 0xe7, 0xd2, 0x6e, 0x49, 0x79, 0xb4, 0x59, 0xe6, 0x7b, 0xb6, 0xe5, 0xe4, 0x01, 0x73, 0x80, 0x08, 0x88, 0xc8, 0x1a, 0x58, 0xf6, 0xe9, 0x9b, 0x6e, 0x65, 0x3f, 0xc7, 0x8a, 0x86, 0xc6, 0x3c, 0xdd, 0x3c, 0x54, 0x5c, 0x35, 0xf8, 0x3a, 0xed, 0x52, 0x0c, 0x47, 0x57, 0xc8, 0xab, 0xb6, 0xdb, 0xd7, 0x06, 0x9e, 0x37, 0xac, 0x30, 0x86, 0x07, 0x91, 0x70, 0xc7, 0x9c, 0xc4, 0x19, 0xb1, 0x78, 0xc0, 0xe2, 0xc9, 0x40, 0x9f, 0x4d, 0xce, 0xe8, 0x9a, 0xa1, 0x7c, 0xcf, 0x0e, 0x3f, 0x65, 0xc5, 0x29, 0x88, 0x6a, 0x19, 0x51, 0xb0, 0x0c, 0xf0, 0x4c, 0x30, 0xf4, 0x05, 0x58, 0x02, 0x48, 0xfd, 0x33, 0xe5, 0x52, 0xaf, 0x4b, 0x84, 0xe3, 0x66, 0x52, 0x84, 0x18, 0xcc, 0x85, 0x34, 0xec, 0xbc, 0x0c, 0x94, 0x94, 0x2e, 0x08, 0x59, 0x9c, 0xc7, 0xb2, 0x10, 0x4e, 0x0a, 0x08, 0xd3, 0xec, 0xc7, 0x3a, 0x65, 0x6e, 0xcc, 0xe1, 0xda, 0x76, 0x9a, 0x56, 0xfb, 0x9c, 0xf3, 0x86, 0x6d, 0x57, 0xe5, 0x81, 0x71, 0x15, 0x67, 0xc8, 0xc8, 0xc9, 0xbd, 0x75, 0x5d, 0x72, 0xd0, 0x38, 0x18, 0x6a, 0x9d, 0xf3, 0x71, 0x24, 0x54, 0x0b, 0xb4, 0x22, 0x0b, 0x82, 0x99, 0x24, 0x01, 0x0e, 0x9c, 0xbb, 0xe4, 0x0e, 0xfd, 0xbf, 0xfb, 0x97, 0x20, 0x93, 0x99, 0x2a, 0x18, 0x87, 0x56, 0xe0, 0x6e, 0x77, 0xee, 0x24, 0x35, 0x3c, 0x4e, 0x73, 0x9a, 0x1f, 0xd6, 0xe1, 0xe2, 0x79, 0x7e, 0x2b, 0x44, 0x9e, 0x48, 0xf5, 0xcc, 0x6d, 0x48, 0xd4, 0xa0, 0x4b, 0x7f, 0xfe, 0x59, 0x24, 0x2f, 0x83, 0x97, 0x99, 0x9a, 0x86, 0xd9, 0xfe, 0x21, 0x40, 0x6e, 0x94, 0x9e, 0xbc, 0x9b, 0x3d, 0x9c, 0x7d, 0x98, 0x20, 0x19, 0xe5, 0x8c, 0x30, 0x62, 0xb2, 0xee, 0x6b, 0x49, 0x3c, 0x7a, 0x3f, 0x0d, 0xe3, 0xb1, 0x09, 0xb7, 0x8a, 0xc8, 0xab, 0x19, 0x9f, 0x73, 0x33, 0x50, 0xe7, 0xd9, 0x74, 0x3a, 0xe4, 0x30, 0x3d, 0x0d, 0xf7, 0x12, 0xdc, 0x7e, 0x5a, 0x05, 0x9f, 0x1e, 0x34, 0x9a, 0xf7, 0xe1, 0x14, 0x81, 0xc4, 0x8c, 0xcc, 0xf5, 0xe4, 0x30, 0xff, 0xa5, 0x0c, 0x08, 0x5f, 0x8c, 0x15, 0x67, 0x21, 0x74, 0x01, 0xdf, 0xdf, 0x5b, 0xca, 0x5e, 0xe5, 0xde, 0xd2, 0x81, 0xaa, 0xcd, 0xa8, 0x2d, 0x64, 0x51, 0xb6, 0xd9, 0x72, 0x9b, 0x97, 0xe6, 0x4f, 0x82, 0xd1, 0x85, 0x73, 0x30, 0xe7, 0x35, 0x04, 0xd3, 0x8e, 0x02, 0x92, 0xfb, 0xe5, 0xa4, 0xd1, 0xc4, 0x21, 0xe8, 0xcd, 0xdd, 0x04, 0x09, 0x07, 0xa2, 0xf5, 0x7a, 0x7d, 0x52, 0x53, 0x12, 0x92, 0x95, 0xee, 0x38, 0x80, 0x25, 0x0d, 0xa6, 0x59, 0xf7, 0x7d, 0xc5, 0xfd, 0xc4, 0xe8, 0x9a, 0x1b, 0x77, 0x64, 0xa7, 0xf5, 0x1d, 0xa0, 0xcc, 0xbf, 0x87, 0x60, 0x9a, 0x6d, 0xe3, 0xfe, 0x2d, 0xfd, 0x28, 0xd0, 0x0b, 0xb5, 0xba, 0xb6, 0xa2, 0xc4, 0xbf, 0x06, 0xaa, 0x05, 0x8c, 0x93, 0xfb, 0x2f, 0xcc, 0xfa, 0x67, 0x93, 0xf0, 0xb6, 0xb8, 0xd0, 0xa5, 0xc0, 0x1e, 0xf3, 0x53, 0xfd, 0x8c, 0x53, 0xdf, 0x83, 0xd7, 0x96, 0xc4, 0xa7, 0xb1, 0xa4, 0x7b, 0x2c, 0x71, 0xfa, 0xdb, 0xe1, 0x4b, 0x90, 0x75, 0xff, 0xc4, 0x15, 0x60, 0x85, 0x89, 0x10, 0x21, 0x30, 0xc9, 0xfb, 0x00, 0xd7, 0x4e, 0x98, 0xda, 0x87, 0xaa, 0x2a, 0xd0, 0xa7, 0x2e, 0xb1, 0x40, 0x31, 0xa7, 0x4c, 0xa3, 0x97, 0xd6, 0xf3, 0x5e, 0xa2, 0x10, 0xe1, 0xab, 0x45, 0x9f, 0x3c, 0x17, 0x64, 0x3c, 0xee, 0x01, 0x70, 0x9c, 0xcc, 0x1a, 0x84, 0x62, 0xbc, 0x48, 0x4c, 0x33, 0x25, 0x04, 0xd4, 0xee, 0xd0, 0xf6, 0x03, 0xc4, 0x19, 0x46, 0xd1, 0x94, 0x6b, 0xed, 0xe7, 0x6f, 0x76, 0x5a, 0xbf, 0x60, 0xec, 0x49, 0x5b, 0xc6, 0xa5, 0x77, 0xbb, 0x72, 0x16, 0x71, 0x9b, 0xc4, 0x3d, 0xf2, 0xc0, 0x13, 0xe0, 0x82, 0x43, 0x3e, 0xfb, 0xee, 0x2f, 0x67, 0x32, 0x96, 0x35, 0x5c, 0xdb, 0xb8, 0xcb, 0x02, 0xd0, 0xc6, 0x17, 0xd0, 0xbc, 0xa8, 0xea, 0x02, 0x43, 0xf2, 0x1b, 0x06, 0x99, 0x5d, 0x2b, 0x90, 0x20, 0xb9, 0xd7, 0x9c, 0xe4, 0x5b, 0xf8, 0x4d, 0x4f, 0xb2, 0xa5, 0x86, 0xd4, 0x3a, 0xd2, 0xf1, 0x63, 0x9a, 0xa0, 0xbe, 0x09, 0xf6, 0x57, 0xb7, 0xde, 0xa0, 0x73, 0x49, 0x99, 0x68, 0xdc, 0x85, 0x5b, 0x65, 0xe3, 0x9b, 0x28, 0x2f, 0x57, 0x9f, 0xbd, 0x33, 0xbc, 0x07, 0x48, 0x0a, 0x85, 0xa9, 0x77, 0x65, 0x05, 0x98, 0x7c, 0x40, 0x81, 0xf8, 0x0f, 0x97, 0x2c, 0x38, 0xf1, 0x0a, 0xec, 0x3c, 0xcf, 0xbb, 0xaf, 0x7e, 0x02, 0x3d, 0xfa, 0xa6, 0xf1, 0x3c, 0x84, 0x8e, 0xad, 0xee, 0x38, 0x98, 0xec, 0xd9, 0x32, 0x32, 0xd4, 0xbf, 0x5f, 0xb7, 0xd1, 0xce, 0xdd, 0x1f, 0x86, 0xf4, 0x5b, 0x55, 0xac, 0xdc, 0xd7, 0x10, 0xc2, 0x0e, 0xa9, 0x88, 0xe7, 0x7c, 0x0c, 0x32, 0x1f, 0xa7, 0xd9, 0x30, 0x7f, 0xc4, 0x7d, 0x68, 0xa3, 0x62, 0xa8, 0xa1, 0xce, 0xab, 0x07, 0x5b, 0x27, 0x9c, 0x5f, 0x00, 0xdf, 0xaa, 0x01, 0xd7, 0x30, 0x2b, 0x38, 0x88, 0xa2, 0xb8, 0x6d, 0x4a, 0x9c, 0xf2, 0x11, 0x91, 0x83, 0x53, 0x79, 0xbf, 0x5a, 0xaa, 0x2b, 0x4a, 0xcf, 0x54, 0x80, 0xe1, 0xd8, 0x9b, 0xc0, 0x9d, 0xf2, 0xb2, 0x03, 0x66, 0xcb, 0x3a, 0xe1, 0x09, 0x86, 0xd4, 0xcf, 0x19, 0xc2, 0x96, 0x76, 0x74, 0x49, 0x76, 0xdc, 0xe0, 0x35, 0xc6, 0x63, 0x63, 0x9a, 0x68, 0x90, 0xe4, 0x67, 0xa4, 0xa6, 0x53, 0x80, 0xc7, 0x86, 0x66, 0xa4, 0xf1, 0xf7, 0x4b, 0x43, 0xfb, 0x84, 0xbd, 0x6d, 0xa0, 0xc3, 0x8b, 0x44, 0xaa, 0x37, 0xa5, 0x45, 0xbf, 0x97, 0x80, 0x5a, 0xd1, 0xf1, 0x78, 0xa2, 0x9b, 0xe9, 0x5d, 0x8d, 0x55, 0xe4, 0x81, 0xd1, 0x11, 0x80, 0xbe, 0xd8, 0x89, 0xb9, 0x08, 0xa3, 0x31, 0xf9, 0xa1, 0x24, 0x09, 0x16, 0xb9, 0x70, 0xa0, 0x11, 0x0a, 0x23, 0x3e, 0x96, 0xf1, 0x07, 0xec, 0xe2, 0xaf, 0x29, 0xef, 0x82, 0xa5, 0x7f, 0xd0, 0x30, 0xa4, 0xb4, 0xd2, 0x87, 0xb4, 0xe3, 0xdf, 0x37, 0x27, 0x93, 0x55, 0xf6, 0x56, 0xea, 0x81, 0xe5, 0x36, 0xcc, 0x8c, 0x1e, 0x3f, 0xbd, 0x52, 0xd8, 0x88, 0x3a, 0xc8, 0x9f, 0x78, 0x66, 0xed, 0x89, 0xf3, 0x7b, 0x38, 0x70, 0x94, 0xc9, 0x02, 0x02, 0x36, 0xd0, 0x9d, 0x93, 0xc6, 0x53, 0x8b, 0x5e, 0xca, 0xaf, 0x3f, 0x9f, 0x1e, 0x0f, 0xe5, 0x99, 0x95, 0xbc, 0x24, 0xf6, 0x94, 0x8f, 0x1e, 0x0c, 0xf7, 0xb6, 0x67, 0xf2, 0xe1, 0x92, 0x26, 0x09, 0x45, 0xc0, 0x55, 0x39, 0x2e, 0x77, 0x3f, 0x42, 0x4a, 0xa2, 0x9d, 0xc0, 0x67, 0xa6, 0x0c, 0x22, 0xd9, 0x26, 0xf5, 0x45, 0xab, 0xa6, 0x65, 0x52, 0x11, 0x27, 0xd8, 0x45, 0xac, 0x63, 0x9a, 0xaf, 0x29, 0x7a, 0xc0, 0x11, 0x35, 0x35, 0x26, 0x51, 0x30, 0x00, 0xc3, 0x6a, 0xfe, 0x40, 0xd5, 0xae, 0xd6, 0x3c, 0x07, 0x1f, 0xd2, 0xe7, 0x9c, 0xda, 0xc2, 0x6e, 0xa2, 0x40, 0xb4, 0xb0, 0x7a, 0x50, 0x10, 0x50, 0x74, 0xc4, 0xc8, 0xbd, 0x65, 0xcd, 0xeb, 0xab, 0x35, 0x1e, 0x00, 0x3e, 0x7e, 0xd5, 0x74, 0xc0, 0x1c, 0xb4, 0x73, 0x47, 0x0e, 0x1a, 0x64, 0x2f, 0xe5, 0x9d, 0x59, 0x30, 0x82, 0x47, 0x58, 0xcc, 0xac, 0xfa, 0x08, 0x54, 0x36, 0x86, 0x7b, 0x3a, 0xb5, 0x04, 0x4d, 0xf0, 0xc9, 0x80, 0x77, 0xe0, 0x62, 0x92, 0x82, 0xf5, 0x46, 0x9c, 0xf3, 0xba, 0xf7, 0x4c, 0xc3, 0xde, 0xb8, 0xa3, 0xad, 0x39, 0xa7, 0xa5, 0x06, 0xb1, 0x2c, 0xa6, 0x09, 0x60, 0xee, 0xd1, 0x97, 0xe9, 0x70, 0xae, 0xbc, 0x3b, 0x19, 0x6c, 0xdb, 0x21, 0x47, 0xb8, 0xcd, 0xff, 0xe5, 0x6f, 0xee, 0xf8, 0xb2, 0xec, 0x2f, 0x4e, 0x0e, 0xf9, 0x25, 0xb0, 0x8e, 0x3c, 0x6b, 0xc3, 0xb5, 0x99, 0xf8, 0xaf, 0xb0, 0x94, 0xf5, 0xe3, 0x20, 0xd6, 0x0a, 0xad, 0xce, 0x4e, 0x56, 0xa4, 0x2e, 0x6e, 0x42, 0xed, 0x1a, 0xed, 0xfe, 0x41, 0x39, 0x90, 0xb4, 0x24, 0x59, 0xbe, 0x01, 0xf2, 0x52, 0xd5, 0x45, 0xf6, 0x5a, 0x39, 0xdc, 0x11, 0xf0, 0x8f, 0x59, 0x38, 0x00, 0xb3, 0xf5, 0x8f, 0x9a, 0x96, 0x0c, 0xd5, 0xeb, 0xfa, 0x7b, 0xaa, 0x17, 0xe8, 0x13, 0x12, 0xed, 0x44, 0x19, 0xc0, 0xd3, 0xf0, 0x06, 0x8b, 0xee, 0xa4, 0x7b, 0xbe, 0x42, 0xe7, 0x26, 0x54, 0xc8, 0x8e, 0x36, 0x76, 0xe3, 0x71, 0xe0, 0x9e, 0xd8, 0xa7, 0x42, 0xd9, 0xdb, 0x71, 0x91, 0x6b, 0x94, 0x93, 0xeb, 0xc3, 0xa3, 0xd1, 0x14, 0xa3, 0xfe, 0xab, 0x00, 0x90, 0x98, 0x9e, 0x24, 0xfc, 0xa9, 0xcc, 0x1a, 0x8a, 0xfb, 0x27, 0xb8, 0xbf, 0x30, 0x6e, 0xa8, 0x3b, 0x6a, 0x72, 0x26, 0x7a, 0xd0, 0x1e, 0xef, 0x7d, 0xe7, 0x3b, 0x69, 0x51, 0xd4, 0x6c, 0x8d, 0x9f, 0x90, 0x12, 0x66, 0xab, 0xb7, 0x63, 0xe7, 0x1a, 0xdd, 0x8d, 0xe9, 0x08, 0xa6, 0x55, 0x83, 0xa4, 0xe0, 0x6a, 0x50, 0x41, 0x65, 0x11, 0x42, 0x49, 0xe0, 0x8c, 0x9b, 0xdb, 0x25, 0x49, 0xb3, 0xf1, 0x7c, 0x86, 0xd6, 0xb2, 0x42, 0x87, 0x0b, 0xd0, 0x6b, 0xa0, 0xd9, 0xe4, 0x08, 0x76, 0xcd, 0xcb, 0x07, 0xff, 0x24, 0xf6, 0xc5, 0xcd, 0xed, 0xbb, 0x90, 0xbc, 0xe2, 0x84, 0x37, 0x46, 0x75, 0xf7, 0x0b, 0x58, 0xe5, 0x8b, 0xc6, 0x4c, 0x15, 0x37, 0xa4, 0x40, 0xa9, 0x30, 0xa9, 0x21, 0xbe, 0x47, 0x36, 0x5a, 0x56, 0xff, 0xb6, 0x08, 0x7b, 0x0d, 0x7a, 0xcc, 0xac, 0x20, 0x4c, 0x86, 0x56, 0x32, 0x5e, 0xcf, 0xab, 0x6e, 0x85, 0x2d, 0x70, 0x57, 0x75, 0x71, 0xa7, 0x19, 0x48, 0x19, 0xbc, 0x9d, 0x9d, 0xea, 0x41, 0x47, 0xdf, 0x94, 0xc4, 0x48, 0x77, 0x99, 0xd3, 0x79, 0x45, 0xeb, 0xa2, 0xaf, 0xf4, 0x92, 0xcb, 0x82, 0x31, 0x2d, 0x51, 0x8b, 0xa7, 0xa7, 0x21, 0x9d, 0xf3, 0x6d, 0xc8, 0x0f, 0xce, 0xc3, 0x4a, 0xb9, 0x99, 0x55, 0xf2, 0xb8, 0xdb, 0x60, 0xbf, 0xa9, 0x7e, 0xbd, 0x56, 0xb5, 0x97, 0x36, 0xa7, 0xd6, 0x03, 0xde, 0x50, 0x35, 0x56, 0xd1, 0x4c, 0xbb, 0x66, 0xf0, 0xa3, 0xe2, 0x1b, 0x1b, 0xc3, 0x97, 0xb2, 0x3d, 0xd1, 0x55, 0x4e, 0x22, 0x54, 0x20, 0x18, 0x95, 0xe6, 0xe3, 0x6e, 0xe6, 0x0f, 0xfa, 0xfa, 0xb9, 0x12, 0xed, 0x06, 0x17, 0x8f, 0x39, 0xb3, 0xdb, 0x48, 0xa4, 0xf9, 0xa1, 0xc5, 0xd8, 0xae, 0x36, 0x41, 0xcc, 0x11, 0x63, 0x69, 0x62, 0x29, 0xbc, 0x4b, 0xc6, 0xb1, 0x3e, 0xc3, 0x69, 0x03, 0xf8, 0xbf, 0x47, 0x01, 0xd4, 0x98, 0x26, 0x1a, 0x08, 0x02, 0xef, 0x63, 0x64, 0x2b, 0xc3, 0xec, 0xd7, 0xe3, 0x82, 0xd2, 0x71, 0x5d, 0x64, 0x4c, 0xdf, 0x2e, 0x67, 0x3f, 0xe7, 0xba, 0x98, 0xae, 0x1c, 0x0f, 0x4f, 0xcb, 0xd0, 0xbd, 0xa9, 0xe1, 0x98, 0x05, 0x51, 0xa1, 0x4d, 0x37, 0xa2, 0x83, 0x79, 0xce, 0x8d, 0x1d, 0x2a, 0xe4, 0x84, 0xd2, 0xc4, 0xb0, 0xd2, 0x91, 0xd4, 0x4c, 0x11, 0x71, 0xb3, 0x61, 0xcb, 0x3d, 0xa1, 0xfe, 0xdd, 0xa8, 0x6a, 0xd4, 0xe3, 0x3a, 0x9a, 0x85, 0x07, 0x10, 0x67, 0x28, 0xb6, 0xef, 0xf6, 0xbd, 0x05, 0x41, 0x6e, 0x20, 0xc1, 0x94, 0xda, 0x0f, 0xde, 0xa6, 0x91, 0x42, 0xfd, 0x13, 0x61, 0x4a, 0x23, 0x9e, 0x08, 0xa4, 0x29, 0xe5, 0xd8, 0x13, 0x04, 0x23, 0xee, 0x41, 0x25, 0x1d, 0x1c, 0x65, 0x0e, 0xa8, 0xf2, 0x25, 0x7b, 0xb4, 0x91, 0xcf, 0xe4, 0xb1, 0xb1, 0xe6, 0xbd, 0x55, 0x74, 0x6c, 0x05, 0xbf, 0x59, 0x20, 0x36, 0x00, 0x79, 0xa0, 0xa0, 0x22, 0x6b, 0x8c, 0xd5, 0xf2, 0x61, 0xd2, 0xb8, 0x2c, 0xcb, 0x82, 0x4a, 0xb5, 0x03, 0xf7, 0x76, 0x3b, 0x61, 0x82, 0x6a, 0x12, 0xaa, 0x18, 0x53, 0xeb, 0x03, 0x21, 0x94, 0xbf, 0xfe, 0xce, 0xca, 0x6a, 0x38, 0x5b, 0x26, 0x8d, 0xde, 0x8b, 0x5a, 0xf2, 0x4f, 0x7a, 0x54, 0x83, 0x19, 0x18, 0xe3, 0x08, 0x35, 0xa6, 0xba, 0xd2, 0x9f, 0x88, 0xdf, 0xa1, 0xcd, 0x2c, 0xbd, 0xec, 0xf5, 0x3b, 0x01, 0x01, 0x93, 0x33, 0x27, 0xb2, 0xeb, 0x60, 0x4b, 0xbb, 0xff, 0xca, 0x8e, 0x23, 0x9f, 0x4f, 0x99, 0xca, 0xdb, 0xe2, 0x68, 0xa6, 0xa5, 0x15, 0x27, 0x17, 0x1e, 0xd9, 0x0e, 0xc1, 0xf1, 0x26, 0xba, 0xa0, 0x2d, 0xae, 0x85, 0x81, 0xcf, 0xd3, 0xf1, 0x2a, 0x12, 0xbd, 0xb8, 0x0a, 0x67, 0xfd, 0xbc, 0x80, 0x4c, 0xd6, 0xeb, 0x74, 0xff, 0x49, 0x36, 0xa3, 0xd5, 0xd8, 0xfc, 0xb5, 0x3e, 0xc5, 0x6a, 0xf0, 0x94, 0x1d, 0x8c, 0xe4, 0xaf, 0x2b, 0x26, 0x71, 0x1a, 0x2b, 0x48, 0x27, 0x85, 0x2f, 0x52, 0x66, 0x2c, 0xef, 0xf0, 0x89, 0x13, 0x71, 0x3e, 0x03, 0x5c, 0xab, 0x73, 0x81, 0x87, 0xa8, 0xcc, 0xb0, 0xa6, 0xd5, 0x94, 0xe2, 0x36, 0x96, 0x49, 0xff, 0x05, 0x99, 0x2c, 0x31, 0x0a, 0x90, 0x8f, 0xb6, 0xc6, 0x9d, 0xd2, 0x44, 0x4b, 0x80, 0xb5, 0xa2, 0xe6, 0x1f, 0xb1, 0x12, 0x4f, 0x1b, 0x95, 0x9b, 0xe2, 0x07, 0x57, 0x67, 0x1c, 0x1e, 0xc0, 0x6a, 0x06, 0xde, 0x59, 0xb4, 0x9a, 0x2d, 0xdf, 0xdc, 0x19, 0x86, 0x2e, 0x8f, 0xf0, 0x4b, 0x7f, 0xa8, 0x2e, 0x45, 0x24, 0xae, 0x4d, 0x50, 0xfa, 0x63, 0x9a, 0x8b, 0xde, 0xe2, 0xdd, 0x1b, 0xbc, 0x60, 0x7b, 0x66, 0x1a, 0x45, 0x0d, 0x97, 0xca, 0x89, 0x50, 0x2f, 0x7d, 0x04, 0xcd, 0x34, 0xa8, 0xff, 0xfc, 0xfd, 0x4b, 0x3d, 0xe6, 0x29, 0x48, 0x9b, 0xea, 0x07, 0xca, 0x21, 0x44, 0x4a, 0x26, 0xde, 0x6e, 0xde, 0xd2, 0x83, 0xd0, 0x9f, 0x59, 0xae, 0x6c, 0x05, 0xa3, 0x93, 0x13, 0xe2, 0xa2, 0xe7, 0xe2, 0xd7, 0x1c, 0xd6, 0xc7, 0xf0, 0x7f, 0xc8, 0x67, 0x53, 0xa0, 0xcb, 0x0f, 0xc6, 0xdf, 0x42, 0x43, 0xcc, 0x3d, 0xcb, 0xb5, 0x48, 0x23, 0xa1, 0x1a, 0x7a, 0xa6, 0x2a, 0xbb, 0x34, 0x68, 0xaf, 0x44, 0x04, 0xc2, 0x41, 0x7e, 0x48, 0x83, 0xdb, 0x4e, 0x39, 0x02, 0xec, 0xec, 0x84, 0x7a, 0xe6, 0xce, 0xc9, 0xa4, 0x42, 0x32, 0xb6, 0x16, 0xfa, 0x04, 0xfd, 0xfe, 0x5d, 0x4b, 0x7a, 0xc3, 0xfd, 0xf7, 0x4c, 0x40, 0x1d, 0x5a, 0x43, 0xaf, 0x5b, 0x25, 0x7b, 0x96, 0xa4, 0x65, 0x51, 0x7e, 0xb8, 0x39, 0xf3, 0xc0, 0x78, 0x66, 0x5e, 0xe8, 0x3a, 0xe7, 0xf0, 0xee, 0x87, 0x11, 0x15, 0x08, 0xd1, 0xaa, 0xc1, 0x78, 0x0c, 0xb1, 0xaf, 0xce, 0xc6, 0xc9, 0x90, 0xef, 0xbf, 0x30, 0x04, 0xc0, 0xa3, 0x41, 0x06, 0xac, 0x90, 0x6d, 0xd1, 0x4a, 0xeb, 0x75, 0xa5, 0x4a, 0x10, 0x99, 0xb3, 0xb1, 0xa1, 0x8b, 0x4a, 0xf7, 0x99, 0xe0, 0x19, 0x67, 0x0d, 0x62, 0xdb, 0x76, 0xb3, 0xda, 0x3d, 0xb8, 0x5b, 0xe8, 0xfd, 0x42, 0xd2, 0x31, 0x0e, 0x87, 0x55, 0xa9, 0x84, 0x89, 0xd2, 0xc1, 0x32, 0xbd, 0x18, 0xcb, 0x6c, 0xa6, 0x07, 0x4e, 0xc8, 0xe7, 0x9d, 0xbe, 0x82, 0x90, 0xfd, 0xda, 0x14, 0xc4, 0x9f, 0x30, 0xde, 0x21, 0xbd, 0x1e, 0x42, 0x39, 0xfc, 0xab, 0x63, 0x23, 0x49, 0xe0, 0xf1, 0x84, 0xd3, 0x94, 0x8a, 0x4c, 0x62, 0x13, 0x2a, 0x19, 0x2e, 0xcc, 0xaf, 0x72, 0x8a, 0x7d, 0x36, 0xd7, 0x9a, 0x1c, 0xdc, 0x67, 0x2e, 0xe3, 0xdb, 0xb2, 0x49, 0xd0, 0x9c, 0x54, 0x79, 0x5c, 0xfa, 0x27, 0x2a, 0xfe, 0xcc, 0x4e, 0xd2, 0xe8, 0x4e, 0x54, 0x17, 0xa0, 0xcd, 0xc1, 0xe4, 0x41, 0xb6, 0x3a, 0x5b, 0x3b, 0xcb, 0x45, 0x9d, 0xbd, 0x1c, 0xc2, 0x98, 0xfa, 0x86, 0x58, 0xc6, 0x4f, 0xa2, 0x3d, 0x06, 0x63, 0x84, 0x09, 0x9c, 0xce, 0x62, 0xe4, 0x04, 0xac, 0x8d, 0x5c, 0xb5, 0xe9, 0xb6, 0x1b, 0x54, 0xb0, 0x7b, 0xad, 0x45, 0xb8, 0xe2, 0x40, 0x7f, 0xfb, 0x0a, 0x6e, 0xfb, 0xbe, 0x33, 0xc9, 0x3c, 0xa3, 0x84, 0xd5, 0x9f, 0x38, 0xc4, 0x56, 0x23, 0xc3, 0x39, 0xe8, 0xa0, 0x71, 0x6c, 0xe8, 0x54, 0x4c, 0xe4, 0xe8, 0x3a, 0xb1, 0xbf, 0x67, 0xfb, 0xef, 0x0d, 0x86, 0x9e, 0xb0, 0xe3, 0xdd, 0xa9, 0xb9, 0xf1, 0x21, 0x17, 0x7f, 0x3e, 0xfc, 0xf0, 0x77, 0x2b, 0x1a, 0x7c, 0x5d, 0x02, 0x84, 0x13, 0xd4, 0xcc, 0x8a, 0x9b, 0x81, 0xce, 0x17, 0x1c, 0x2e, 0x29, 0x1e, 0x9c, 0x48, 0x63, 0x42, 0xfe, 0xa1, 0xe0, 0x70, 0x1e, 0x2a, 0x03, 0x39, 0x52, 0x5a, 0x42, 0xbe, 0x5c, 0x91, 0x85, 0x7a, 0x18, 0xaa, 0x4d, 0xb5, 0xfb, 0x5a, 0x48, 0xd0, 0x80, 0x20, 0x40, 0xf2, 0xa8, 0xe9, 0x00, 0x07, 0x69, 0x19, 0x77, 0xa7, 0xe6, 0xc3, 0xf4, 0xcf, libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-jit-trust/warmcat.com.cer000066400000000000000000000036241476025525100326240ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ 0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ 3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-multi/000077500000000000000000000000001476025525100270765ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-multi/CMakeLists.txt000066400000000000000000000215431476025525100316430ustar00rootroot00000000000000project(lws-minimal-http-client-multi C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-client-multi) set(SRCS minimal-http-client-multi.c) set(requirements 1) set(MBEDTLS 0) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) require_lws_config(LWS_WITH_TLS 1 requirements) require_lws_config(LWS_WITH_SYS_STATE 1 requirements) require_lws_config(LWS_WITH_MBEDTLS 1 MBEDTLS) if (requirements) add_executable(${SAMP} ${SRCS}) find_program(VALGRIND "valgrind") # # instantiate the server per sai builder instance, they are running in the same # machine context in parallel so they can tread on each other otherwise # set(PORT_HCM_SRV "7670") if ("$ENV{SAI_INSTANCE_IDX}" STREQUAL "0") set(PORT_HCM_SRV 7671) endif() if ("$ENV{SAI_INSTANCE_IDX}" STREQUAL "1") set(PORT_HCM_SRV 7672) endif() if ("$ENV{SAI_INSTANCE_IDX}" STREQUAL "2") set(PORT_HCM_SRV 7673) endif() if ("$ENV{SAI_INSTANCE_IDX}" STREQUAL "3") set(PORT_HCM_SRV 7674) endif() # hack if (NOT WIN32 AND LWS_WITH_SERVER) # # Tests against built server running locally (needs daemonization...) # if (WIN32) add_test(NAME st_hcm_srv COMMAND cmd.exe /c start /b $ --port ${PORT_HCM_SRV}) add_test(NAME ki_hcm_srv COMMAND taskkill /F /IM $ /T) add_test(NAME st_hcmp_srv COMMAND cmd.exe /c start /b $ -s --port 1${PORT_HCM_SRV}) add_test(NAME ki_hcmp_srv COMMAND taskkill /F /IM $ /T) else() # # mbedtls is too slow to keep up on some targets, when ctest is in parallel # if (VALGRIND AND NOT MBEDTLS) add_test(NAME st_hcm_srv COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background.sh hcm_srv ${VALGRIND} --tool=memcheck $ --port ${PORT_HCM_SRV}) add_test(NAME ki_hcm_srv COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background-kill.sh hcm_srv ${VALGRIND} $ --port ${PORT_HCM_SRV}) add_test(NAME st_hcmp_srv COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background.sh hcmp_srv ${VALGRIND} --tool=memcheck $ -s -r ${CMAKE_SOURCE_DIR}/destdir/usr/local/share/libwebsockets-test-server/ --port 1${PORT_HCM_SRV}) add_test(NAME ki_hcmp_srv COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background-kill.sh hcmp_srv ${VALGRIND} $ --port 1${PORT_HCM_SRV}) else() add_test(NAME st_hcm_srv COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background.sh hcm_srv $ --port ${PORT_HCM_SRV} ) add_test(NAME ki_hcm_srv COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background-kill.sh hcm_srv $ --port ${PORT_HCM_SRV}) add_test(NAME st_hcmp_srv COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background.sh hcmp_srv $ -s -r ${CMAKE_SOURCE_DIR}/destdir/usr/local/share/libwebsockets-test-server/ --port 1${PORT_HCM_SRV} ) add_test(NAME ki_hcmp_srv COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background-kill.sh hcmp_srv $ --port 1${PORT_HCM_SRV}) endif() endif() set_tests_properties(st_hcm_srv PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/http-server/minimal-http-server-tls FIXTURES_SETUP hcm_srv TIMEOUT 800) set_tests_properties(ki_hcm_srv PROPERTIES FIXTURES_CLEANUP hcm_srv) set_tests_properties(st_hcmp_srv PROPERTIES WORKING_DIRECTORY . FIXTURES_SETUP hcmp_srv TIMEOUT 800) set_tests_properties(ki_hcmp_srv PROPERTIES FIXTURES_CLEANUP hcmp_srv) # # Tests against local server peer # add_test(NAME http-client-multi COMMAND lws-minimal-http-client-multi -l --port ${PORT_HCM_SRV} -d 1151) add_test(NAME http-client-multi-h1 COMMAND lws-minimal-http-client-multi --h1 -l --port ${PORT_HCM_SRV} -d1151) add_test(NAME http-client-multi-pipe COMMAND lws-minimal-http-client-multi -p -l --port ${PORT_HCM_SRV} -d1151) add_test(NAME http-client-multi-h1-pipe COMMAND lws-minimal-http-client-multi --h1 -p -l --port ${PORT_HCM_SRV} -d1151) add_test(NAME http-client-multi-stag COMMAND lws-minimal-http-client-multi -s -l --port ${PORT_HCM_SRV} -d1151) add_test(NAME http-client-multi-stag-h1 COMMAND lws-minimal-http-client-multi --h1 -s -l --port ${PORT_HCM_SRV} -d1151) add_test(NAME http-client-multi-stag-pipe COMMAND lws-minimal-http-client-multi -p -s -l --port ${PORT_HCM_SRV} -d1151) add_test(NAME http-client-multi-stag-h1-pipe COMMAND lws-minimal-http-client-multi --h1 -p -s -l --port ${PORT_HCM_SRV} -d1151) # confirm that the pipelined mode really is doing it in one connection add_test(NAME http-client-multi-restrict-pipe COMMAND lws-minimal-http-client-multi -d1151 --limit 1 -p -l --port ${PORT_HCM_SRV}) add_test(NAME http-client-multi-restrict-h1-pipe COMMAND lws-minimal-http-client-multi -d1151 --limit 1 --h1 -p -l --port ${PORT_HCM_SRV}) add_test(NAME http-client-multi-restrict-stag-pipe COMMAND lws-minimal-http-client-multi -d1151 --limit 1 -p -s -l --port ${PORT_HCM_SRV}) add_test(NAME http-client-multi-restrict-stag-h1-pipe COMMAND lws-minimal-http-client-multi -d1151 --limit 1 --h1 -p -s -l --port ${PORT_HCM_SRV}) # confirm that we do fail with a one connection limit and no pipelining add_test(NAME http-client-multi-restrict-nopipe-fail COMMAND lws-minimal-http-client-multi --limit 1 -l --port ${PORT_HCM_SRV} -d1151) set_property(TEST http-client-multi-restrict-nopipe-fail PROPERTY WILL_FAIL TRUE) add_test(NAME http-client-multi-restrict-h1-nopipe-fail COMMAND lws-minimal-http-client-multi --limit 1 --h1 -l --port ${PORT_HCM_SRV} -d1151) set_property(TEST http-client-multi-restrict-h1-nopipe-fail PROPERTY WILL_FAIL TRUE) set_tests_properties(http-client-multi-restrict-pipe http-client-multi-restrict-h1-pipe http-client-multi-restrict-stag-pipe http-client-multi-restrict-stag-h1-pipe http-client-multi-restrict-nopipe-fail http-client-multi-restrict-h1-nopipe-fail http-client-multi http-client-multi-h1 http-client-multi-pipe http-client-multi-h1-pipe http-client-multi-stag http-client-multi-stag-h1 http-client-multi-stag-pipe http-client-multi-stag-h1-pipe PROPERTIES FIXTURES_REQUIRED "hcm_srv" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/http-client/minimal-http-client-multi TIMEOUT 50) # POSTs against local http-server-form-post add_test(NAME http-client-multi-post COMMAND lws-minimal-http-client-multi --post -l --port 1${PORT_HCM_SRV} -d1151) add_test(NAME http-client-multi-post-h1 COMMAND lws-minimal-http-client-multi --post --h1 -l --port 1${PORT_HCM_SRV} -d1151) add_test(NAME http-client-multi-post-pipe COMMAND lws-minimal-http-client-multi --post -p -l --port 1${PORT_HCM_SRV} -d1151) if (VALGRIND) add_test(NAME http-client-multi-post-h1-pipe COMMAND ${VALGRIND} --tool=memcheck $ --post --h1 -p -l --port 1${PORT_HCM_SRV} -d1151) else() add_test(NAME http-client-multi-post-h1-pipe COMMAND lws-minimal-http-client-multi --post --h1 -p -l --port 1${PORT_HCM_SRV} -d1151) endif() add_test(NAME http-client-multi-post-stag COMMAND lws-minimal-http-client-multi --post -s -l -d1151 --port 1${PORT_HCM_SRV} -d1151) add_test(NAME http-client-multi-post-stag-h1 COMMAND lws-minimal-http-client-multi --post --h1 -d1151 -s -l --port 1${PORT_HCM_SRV} -d1151) add_test(NAME http-client-multi-post-stag-pipe COMMAND lws-minimal-http-client-multi --post -p -s -l --port 1${PORT_HCM_SRV} -d1151) add_test(NAME http-client-multi-post-stag-h1-pipe COMMAND lws-minimal-http-client-multi --post --h1 -p -s -l --port 1${PORT_HCM_SRV} -d1151) set_tests_properties(http-client-multi-post http-client-multi-post-h1 http-client-multi-post-pipe http-client-multi-post-h1-pipe http-client-multi-post-stag http-client-multi-post-stag-h1 http-client-multi-post-stag-pipe http-client-multi-post-stag-h1-pipe PROPERTIES FIXTURES_REQUIRED "hcmp_srv" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/http-client/minimal-http-client-multi TIMEOUT 20) endif(NOT WIN32 AND LWS_WITH_SERVER) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-multi/README.md000066400000000000000000000015301476025525100303540ustar00rootroot00000000000000# lws minimal http client multi ## build ``` $ cmake . && make ``` ## usage The application goes to https://warmcat.com and receives the page data same as minimal http client. However it does it for 8 client connections concurrently. ## Commandline Options Option|Meaning ---|--- -s|Stagger the connections by 100ms, the last by 1s -p|Use http/1.1 pipelining or h2 simultaneous streams --h1|Force http/1 only -l|Connect to server on https://localhost:7681 instead of https://warmcat.com:443 -n|Read numbered files like /1.png, /2.png etc. Default is just read / --uv|Use libuv event loop if lws built for it --event|Use libevent event loop if lws built for it --ev|Use libev event loop if lws built for it --post|POST to the server rather than GET -c|Create n connections (n can be 1 .. 8) --path |Force the URL path (should start with /)minimal-http-client-multi.c000066400000000000000000000441711476025525100342010ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-multi/* * lws-minimal-http-client-multi * * Written in 2010-2021 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the a minimal http client using lws, which makes * 8 downloads simultaneously from warmcat.com. * * Currently that takes the form of 8 individual simultaneous tcp and * tls connections, which happen concurrently. Notice that the ordering * of the returned payload may be intermingled for the various connections. * * By default the connections happen all together at the beginning and operate * concurrently, which is fast. However this is resource-intenstive, there are * 8 tcp connections, 8 tls tunnels on both the client and server. You can * instead opt to have the connections happen one after the other inside a * single tcp connection and tls tunnel, using HTTP/1.1 pipelining. To be * eligible to be pipelined on another existing connection to the same server, * the client connection must have the LCCSCF_PIPELINE flag on its * info.ssl_connection member (this is independent of whether the connection * is in ssl mode or not). * * HTTP/1.0: Pipelining only possible if Keep-Alive: yes sent by server * HTTP/1.1: always possible... serializes requests * HTTP/2: always possible... all requests sent as individual streams in parallel * * Note: stats are kept on tls session reuse and checked depending on mode * * - default: no reuse expected (connections made too quickly at once) * - staggered, no pipeline: n - 1 reuse expected * - staggered, pipelined: no reuse expected */ #include #include #include #include #include #if !defined(WIN32) #include #include #include #endif #define COUNT 8 struct cliuser { int index; }; static int completed, failed, numbered, stagger_idx, posting, count = COUNT, #if defined(LWS_WITH_TLS_SESSIONS) reuse, #endif staggered; static lws_sorted_usec_list_t sul_stagger; static struct lws_client_connect_info i; static struct lws *client_wsi[COUNT]; static char urlpath[64], intr; static struct lws_context *context; /* we only need this for tracking POST emit state */ struct pss { char body_part; }; #if defined(LWS_WITH_TLS_SESSIONS) && !defined(LWS_WITH_MBEDTLS) && !defined(WIN32) /* this should work OK on win32, but not adapted for non-posix file apis */ static int sess_save_cb(struct lws_context *cx, struct lws_tls_session_dump *info) { char path[128]; int fd, n; lws_snprintf(path, sizeof(path), "%s/lws_tls_sess_%s", (const char *)info->opaque, info->tag); fd = open(path, LWS_O_WRONLY | O_CREAT | O_TRUNC, 0600); if (fd < 0) { lwsl_warn("%s: cannot open %s\n", __func__, path); return 1; } n = (int)write(fd, info->blob, info->blob_len); close(fd); return n != (int)info->blob_len; } static int sess_load_cb(struct lws_context *cx, struct lws_tls_session_dump *info) { struct stat sta; char path[128]; int fd, n; lws_snprintf(path, sizeof(path), "%s/lws_tls_sess_%s", (const char *)info->opaque, info->tag); fd = open(path, LWS_O_RDONLY); if (fd < 0) return 1; if (fstat(fd, &sta) || !sta.st_size) goto bail; info->blob = malloc((size_t)sta.st_size); /* caller will free this */ if (!info->blob) goto bail; info->blob_len = (size_t)sta.st_size; n = (int)read(fd, info->blob, info->blob_len); close(fd); return n != (int)info->blob_len; bail: close(fd); return 1; } #endif #if defined(LWS_WITH_CONMON) void dump_conmon_data(struct lws *wsi) { const struct addrinfo *ai; struct lws_conmon cm; char ads[48]; lws_conmon_wsi_take(wsi, &cm); lws_sa46_write_numeric_address(&cm.peer46, ads, sizeof(ads)); lwsl_notice("%s: peer %s, dns: %uus, sockconn: %uus, tls: %uus, txn_resp: %uus\n", __func__, ads, (unsigned int)cm.ciu_dns, (unsigned int)cm.ciu_sockconn, (unsigned int)cm.ciu_tls, (unsigned int)cm.ciu_txn_resp); ai = cm.dns_results_copy; while (ai) { lws_sa46_write_numeric_address((lws_sockaddr46 *)ai->ai_addr, ads, sizeof(ads)); lwsl_notice("%s: DNS %s\n", __func__, ads); ai = ai->ai_next; } /* * This destroys the DNS list in the lws_conmon that we took * responsibility for when we used lws_conmon_wsi_take() */ lws_conmon_release(&cm); } #endif static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { char buf[LWS_PRE + 1024], *start = &buf[LWS_PRE], *p = start, *end = &buf[sizeof(buf) - 1]; int n, idx = (int)(intptr_t)lws_get_opaque_user_data(wsi); struct pss *pss = (struct pss *)user; switch (reason) { case LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: lwsl_user("LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: idx: %d, resp %u\n", idx, lws_http_client_http_response(wsi)); #if defined(LWS_WITH_TLS_SESSIONS) && !defined(LWS_WITH_MBEDTLS) && !defined(WIN32) if (lws_tls_session_is_reused(wsi)) reuse++; else /* * Attempt to store any new session into * external storage */ if (lws_tls_session_dump_save(lws_get_vhost_by_name(context, "default"), i.host, (uint16_t)i.port, sess_save_cb, "/tmp")) lwsl_warn("%s: session save failed\n", __func__); #endif break; /* because we are protocols[0] ... */ case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); client_wsi[idx] = NULL; failed++; #if defined(LWS_WITH_CONMON) dump_conmon_data(wsi); #endif goto finished; /* chunks of chunked content, with header removed */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ: lwsl_user("RECEIVE_CLIENT_HTTP_READ: conn %d: read %d\n", idx, (int)len); lwsl_hexdump_info(in, len); return 0; /* don't passthru */ case LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER: /* * Tell lws we are going to send the body next... */ if (posting && !lws_http_is_redirected_to_get(wsi)) { lwsl_user("%s: conn %d, doing POST flow\n", __func__, idx); lws_client_http_body_pending(wsi, 1); lws_callback_on_writable(wsi); } else lwsl_user("%s: conn %d, doing GET flow\n", __func__, idx); break; /* uninterpreted http content */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP: { char buffer[1024 + LWS_PRE]; char *px = buffer + LWS_PRE; int lenx = sizeof(buffer) - LWS_PRE; if (lws_http_client_read(wsi, &px, &lenx) < 0) return -1; } return 0; /* don't passthru */ case LWS_CALLBACK_COMPLETED_CLIENT_HTTP: lwsl_user("LWS_CALLBACK_COMPLETED_CLIENT_HTTP %s: idx %d\n", lws_wsi_tag(wsi), idx); client_wsi[idx] = NULL; goto finished; case LWS_CALLBACK_CLOSED_CLIENT_HTTP: lwsl_info("%s: closed: %s\n", __func__, lws_wsi_tag(client_wsi[idx])); #if defined(LWS_WITH_CONMON) dump_conmon_data(wsi); #endif if (client_wsi[idx]) { /* * If it completed normally, it will have been set to * NULL then already. So we are dealing with an * abnormal, failing, close */ client_wsi[idx] = NULL; failed++; goto finished; } break; case LWS_CALLBACK_CLIENT_HTTP_WRITEABLE: if (!posting) break; if (lws_http_is_redirected_to_get(wsi)) break; lwsl_info("LWS_CALLBACK_CLIENT_HTTP_WRITEABLE: %s, idx %d," " part %d\n", lws_wsi_tag(wsi), idx, pss->body_part); n = LWS_WRITE_HTTP; /* * For a small body like this, we could prepare it in memory and * send it all at once. But to show how to handle, eg, * arbitrary-sized file payloads, or huge form-data fields, the * sending is done in multiple passes through the event loop. */ switch (pss->body_part++) { case 0: if (lws_client_http_multipart(wsi, "text", NULL, NULL, &p, end)) return -1; /* notice every usage of the boundary starts with -- */ p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "my text field\xd\xa"); break; case 1: if (lws_client_http_multipart(wsi, "file", "myfile.txt", "text/plain", &p, end)) return -1; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "This is the contents of the " "uploaded file.\xd\xa" "\xd\xa"); break; case 2: if (lws_client_http_multipart(wsi, NULL, NULL, NULL, &p, end)) return -1; lws_client_http_body_pending(wsi, 0); /* necessary to support H2, it means we will write no * more on this stream */ n = LWS_WRITE_HTTP_FINAL; break; default: /* * We can get extra callbacks here, if nothing to do, * then do nothing. */ return 0; } if (lws_write(wsi, (uint8_t *)start, lws_ptr_diff_size_t(p, start), (enum lws_write_protocol)n) != lws_ptr_diff(p, start)) return 1; if (n != LWS_WRITE_HTTP_FINAL) lws_callback_on_writable(wsi); break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); finished: if (++completed == count) { if (!failed) lwsl_user("Done: all OK\n"); else lwsl_err("Done: failed: %d\n", failed); intr = 1; /* * This is how we can exit the event loop even when it's an * event library backing it... it will start and stage the * destroy to happen after we exited this service for each pt */ lws_context_destroy(lws_get_context(wsi)); } return 0; } static const struct lws_protocols protocols[] = { { "http", callback_http, sizeof(struct pss), 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; #if defined(LWS_WITH_SYS_METRICS) static int my_metric_report(lws_metric_pub_t *mp) { lws_metric_bucket_t *sub = mp->u.hist.head; char buf[192]; do { if (lws_metrics_format(mp, &sub, buf, sizeof(buf))) lwsl_user("%s: %s\n", __func__, buf); } while ((mp->flags & LWSMTFL_REPORT_HIST) && sub); /* 0 = leave metric to accumulate, 1 = reset the metric */ return 1; } static const lws_system_ops_t system_ops = { .metric_report = my_metric_report, }; #endif static void stagger_cb(lws_sorted_usec_list_t *sul); static void lws_try_client_connection(struct lws_client_connect_info *i, int m) { char path[128]; if (numbered) { lws_snprintf(path, sizeof(path), "/%d.png", m + 1); i->path = path; } else i->path = urlpath; i->pwsi = &client_wsi[m]; i->opaque_user_data = (void *)(intptr_t)m; if (!lws_client_connect_via_info(i)) { failed++; lwsl_user("%s: failed: conn idx %d\n", __func__, m); if (++completed == count) { lwsl_user("Done: failed: %d\n", failed); lws_context_destroy(context); } } else lwsl_user("started connection %s: idx %d (%s)\n", lws_wsi_tag(client_wsi[m]), m, i->path); } static int system_notify_cb(lws_state_manager_t *mgr, lws_state_notify_link_t *link, int current, int target) { struct lws_context *context = mgr->parent; int m; if (current != LWS_SYSTATE_OPERATIONAL || target != LWS_SYSTATE_OPERATIONAL) return 0; /* all the system prerequisites are ready */ if (!staggered) /* * just pile on all the connections at once, testing the * pipeline queuing before the first is connected */ for (m = 0; m < count; m++) lws_try_client_connection(&i, m); else /* * delay the connections slightly */ lws_sul_schedule(context, 0, &sul_stagger, stagger_cb, 50 * LWS_US_PER_MS); return 0; } static void signal_cb(void *handle, int signum) { switch (signum) { case SIGTERM: case SIGINT: break; default: lwsl_err("%s: signal %d\n", __func__, signum); break; } lws_context_destroy(context); } static void sigint_handler(int sig) { signal_cb(NULL, sig); } #if defined(WIN32) int gettimeofday(struct timeval * tp, struct timezone * tzp) { // Note: some broken versions only have 8 trailing zero's, the correct epoch has 9 trailing zero's // This magic number is the number of 100 nanosecond intervals since January 1, 1601 (UTC) // until 00:00:00 January 1, 1970 static const uint64_t EPOCH = ((uint64_t) 116444736000000000ULL); SYSTEMTIME system_time; FILETIME file_time; uint64_t time; GetSystemTime( &system_time ); SystemTimeToFileTime( &system_time, &file_time ); time = ((uint64_t)file_time.dwLowDateTime ) ; time += ((uint64_t)file_time.dwHighDateTime) << 32; tp->tv_sec = (long) ((time - EPOCH) / 10000000L); tp->tv_usec = (long) (system_time.wMilliseconds * 1000); return 0; } #endif unsigned long long us(void) { struct timeval t; gettimeofday(&t, NULL); return ((unsigned long long)t.tv_sec * 1000000ull) + (unsigned long long)t.tv_usec; } static void stagger_cb(lws_sorted_usec_list_t *sul) { lws_usec_t next; /* * open the connections at 100ms intervals, with the * last one being after 1s, testing both queuing, and * direct H2 stream addition stability */ lws_try_client_connection(&i, stagger_idx++); if (stagger_idx == count) return; next = 150 * LWS_US_PER_MS; if (stagger_idx == count - 1) next += 400 * LWS_US_PER_MS; #if defined(LWS_WITH_TLS_SESSIONS) if (stagger_idx == 1) next += 600 * LWS_US_PER_MS; #endif lws_sul_schedule(context, 0, &sul_stagger, stagger_cb, next); } int main(int argc, const char **argv) { lws_state_notify_link_t notifier = { { NULL, NULL, NULL }, system_notify_cb, "app" }; lws_state_notify_link_t *na[] = { ¬ifier, NULL }; struct lws_context_creation_info info; unsigned long long start; const char *p; #if defined(LWS_WITH_TLS_SESSIONS) int pl = 0; #endif memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ memset(&i, 0, sizeof i); /* otherwise uninitialized garbage */ lws_cmdline_option_handle_builtin(argc, argv, &info); info.signal_cb = signal_cb; info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; if (lws_cmdline_option(argc, argv, "--uv")) info.options |= LWS_SERVER_OPTION_LIBUV; else if (lws_cmdline_option(argc, argv, "--event")) info.options |= LWS_SERVER_OPTION_LIBEVENT; else if (lws_cmdline_option(argc, argv, "--ev")) info.options |= LWS_SERVER_OPTION_LIBEV; else if (lws_cmdline_option(argc, argv, "--glib")) info.options |= LWS_SERVER_OPTION_GLIB; else signal(SIGINT, sigint_handler); staggered = !!lws_cmdline_option(argc, argv, "-s"); lwsl_user("LWS minimal http client [-s (staggered)] [-p (pipeline)]\n"); lwsl_user(" [--h1 (http/1 only)] [-l (localhost)] [-d ]\n"); lwsl_user(" [-n (numbered)] [--post]\n"); info.port = CONTEXT_PORT_NO_LISTEN; /* we do not run any server */ info.protocols = protocols; /* * since we know this lws context is only ever going to be used with * COUNT client wsis / fds / sockets at a time, let lws know it doesn't * have to use the default allocations for fd tables up to ulimit -n. * It will just allocate for 1 internal and COUNT + 1 (allowing for h2 * network wsi) that we will use. */ info.fd_limit_per_thread = 1 + COUNT + 1; info.register_notifier_list = na; info.pcontext = &context; #if defined(LWS_WITH_SYS_METRICS) info.system_ops = &system_ops; #endif #if defined(LWS_WITH_MBEDTLS) || defined(USE_WOLFSSL) /* * OpenSSL uses the system trust store. mbedTLS has to be told which * CA to trust explicitly. */ info.client_ssl_ca_filepath = "./warmcat.com.cer"; #endif /* vhost option allowing tls session reuse, requires * LWS_WITH_TLS_SESSIONS build option */ if (lws_cmdline_option(argc, argv, "--no-tls-session-reuse")) info.options |= LWS_SERVER_OPTION_DISABLE_TLS_SESSION_CACHE; if ((p = lws_cmdline_option(argc, argv, "--limit"))) info.simultaneous_ssl_restriction = atoi(p); if ((p = lws_cmdline_option(argc, argv, "--ssl-handshake-serialize"))) /* We only consider simultaneous_ssl_restriction > 1 use cases. * If ssl isn't limited or only 1 is allowed, we don't care. */ info.simultaneous_ssl_handshake_restriction = atoi(p); context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } #if defined(LWS_ROLE_H2) && defined(LWS_ROLE_H1) i.alpn = "h2,http/1.1"; #elif defined(LWS_ROLE_H2) i.alpn = "h2"; #elif defined(LWS_ROLE_H1) i.alpn = "http/1.1"; #endif i.context = context; i.ssl_connection = LCCSCF_USE_SSL | LCCSCF_H2_QUIRK_OVERFLOWS_TXCR | LCCSCF_H2_QUIRK_NGHTTP2_END_STREAM; if (lws_cmdline_option(argc, argv, "--post")) { posting = 1; i.method = "POST"; i.ssl_connection |= LCCSCF_HTTP_MULTIPART_MIME; } else i.method = "GET"; /* enables h1 or h2 connection sharing */ if (lws_cmdline_option(argc, argv, "-p")) { i.ssl_connection |= LCCSCF_PIPELINE; #if defined(LWS_WITH_TLS_SESSIONS) pl = 1; #endif } #if defined(LWS_WITH_CONMON) if (lws_cmdline_option(argc, argv, "--conmon")) i.ssl_connection |= LCCSCF_CONMON; #endif /* force h1 even if h2 available */ if (lws_cmdline_option(argc, argv, "--h1")) i.alpn = "http/1.1"; strcpy(urlpath, "/"); if (lws_cmdline_option(argc, argv, "-l")) { i.port = 7681; i.address = "localhost"; i.ssl_connection |= LCCSCF_ALLOW_SELFSIGNED; if (posting) strcpy(urlpath, "/formtest"); } else { i.port = 443; i.address = "libwebsockets.org"; if (posting) strcpy(urlpath, "/testserver/formtest"); } if (lws_cmdline_option(argc, argv, "--no-tls")) i.ssl_connection &= ~(LCCSCF_USE_SSL); if (lws_cmdline_option(argc, argv, "-n")) numbered = 1; if ((p = lws_cmdline_option(argc, argv, "--server"))) i.address = p; if ((p = lws_cmdline_option(argc, argv, "--port"))) i.port = atoi(p); if ((p = lws_cmdline_option(argc, argv, "--path"))) lws_strncpy(urlpath, p, sizeof(urlpath)); if ((p = lws_cmdline_option(argc, argv, "-c"))) if (atoi(p) <= COUNT && atoi(p)) count = atoi(p); i.host = i.address; i.origin = i.address; i.protocol = protocols[0].name; #if defined(LWS_WITH_TLS_SESSIONS) && !defined(LWS_WITH_MBEDTLS) && !defined(WIN32) /* * Attempt to preload a session from external storage */ if (lws_tls_session_dump_load(lws_get_vhost_by_name(context, "default"), i.host, (uint16_t)i.port, sess_load_cb, "/tmp")) lwsl_warn("%s: session load failed\n", __func__); #endif start = us(); while (!intr && !lws_service(context, 0)) ; #if defined(LWS_WITH_TLS_SESSIONS) lwsl_user("%s: session reuse count %d\n", __func__, reuse); if (staggered && !pl && !reuse) { lwsl_err("%s: failing, expected 1 .. %d reused\n", __func__, count - 1); // too difficult to reproduce in CI // failed = 1; } #endif lwsl_user("Duration: %lldms\n", (us() - start) / 1000); lws_context_destroy(context); lwsl_user("Exiting with %d\n", failed || completed != count); return failed || completed != count; } libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-multi/warmcat.com.cer000066400000000000000000000036241476025525100320110ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ 0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ 3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-post/000077500000000000000000000000001476025525100267315ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-post/CMakeLists.txt000066400000000000000000000070011476025525100314670ustar00rootroot00000000000000project(lws-minimal-http-client-post C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-client-post) set(SRCS minimal-http-client-post.c) set(requirements 1) set(MBEDTLS 0) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) require_lws_config(LWS_WITH_MBEDTLS 1 MBEDTLS) if (requirements) add_executable(${SAMP} ${SRCS}) find_program(VALGRIND "valgrind") # # instantiate the server per sai builder instance, they are running in the same # machine context in parallel so they can tread on each other otherwise # set(PORT_HCP_SRV "7640") if ("$ENV{SAI_INSTANCE_IDX}" STREQUAL "0") set(PORT_HCP_SRV 7641) endif() if ("$ENV{SAI_INSTANCE_IDX}" STREQUAL "1") set(PORT_HCP_SRV 7642) endif() if ("$ENV{SAI_INSTANCE_IDX}" STREQUAL "2") set(PORT_HCP_SRV 7643) endif() if ("$ENV{SAI_INSTANCE_IDX}" STREQUAL "3") set(PORT_HCP_SRV 7644) endif() # hack if (NOT WIN32 AND LWS_WITH_SERVER) # # Tests against built server running locally (needs daemonization...) # if (WIN32) add_test(NAME st_hcp_srv COMMAND cmd.exe /c start /b $ -s --port ${PORT_HCP_SRV}) add_test(NAME ki_hcp_srv COMMAND taskkill /F /IM $ /T) else() # # mbedtls is too slow to keep up on some targets, when ctest is in parallel # if (VALGRIND AND NOT MBEDTLS) add_test(NAME st_hcp_srv COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background.sh hcp_srv ${VALGRIND} --tool=memcheck $ -r ${CMAKE_SOURCE_DIR}/destdir/usr/local/share/libwebsockets-test-server/ -s --port ${PORT_HCP_SRV} -d1151) add_test(NAME ki_hcp_srv COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background-kill.sh hcp_srv ${VALGRIND} $ --port ${PORT_HCP_SRV}) else() add_test(NAME st_hcp_srv COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background.sh hcp_srv $ -r ${CMAKE_SOURCE_DIR}/destdir/usr/local/share/libwebsockets-test-server/ -s --port ${PORT_HCP_SRV} ) add_test(NAME ki_hcp_srv COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background-kill.sh hcp_srv $ --port ${PORT_HCP_SRV}) endif() endif() set_tests_properties(st_hcp_srv PROPERTIES WORKING_DIRECTORY . FIXTURES_SETUP hcp_srv TIMEOUT 800) set_tests_properties(ki_hcp_srv PROPERTIES FIXTURES_CLEANUP hcp_srv) add_test(NAME http-client-post COMMAND lws-minimal-http-client-post -l --port ${PORT_HCP_SRV}) add_test(NAME http-client-post-m COMMAND lws-minimal-http-client-post -l -m --port ${PORT_HCP_SRV}) add_test(NAME http-client-post-h1 COMMAND lws-minimal-http-client-post -l --h1 --port ${PORT_HCP_SRV}) add_test(NAME http-client-post-m-h1 COMMAND lws-minimal-http-client-post -l -m --h1 --port ${PORT_HCP_SRV}) set_tests_properties(http-client-post http-client-post-m http-client-post-h1 http-client-post-m-h1 PROPERTIES FIXTURES_REQUIRED "hcp_srv" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/http-client/minimal-http-client-post TIMEOUT 20) endif() if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-post/README.md000066400000000000000000000103631476025525100302130ustar00rootroot00000000000000# lws minimal http client POST This example demonstrates a multipart POST to https://libwebsockets.org/testserver/formtest setting both a form variable and uploading a short file. The result of the POST form processing is captured and displayed in a hexdump. This is programmatically POSTing to the same form you can access at https://libwebsockets.org/testserver in the "POST" tab with file upload. By default the client action occurs using http/2 if your lws was built with `-DLWS_WITH_HTTP2=1`. ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-client-post [2018/04/03 13:13:10:7891] USER: LWS minimal http client - POST [2018/04/03 13:13:10:7905] NOTICE: Creating Vhost 'default' (serving disabled), 1 protocols, IPv6 on [2018/04/03 13:13:10:7984] NOTICE: created client ssl context for default [2018/04/03 13:13:12:8444] USER: LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER [2018/04/03 13:13:12:8444] USER: LWS_CALLBACK_CLIENT_HTTP_WRITEABLE [2018/04/03 13:13:12:8445] USER: LWS_CALLBACK_CLIENT_HTTP_WRITEABLE [2018/04/03 13:13:12:8445] USER: LWS_CALLBACK_CLIENT_HTTP_WRITEABLE [2018/04/03 13:13:13:1437] USER: LWS_CALLBACK_CLIENT_HTTP_WRITEABLE [2018/04/03 13:13:13:1440] USER: LWS_CALLBACK_CLIENT_HTTP_WRITEABLE [2018/04/03 13:13:13:1440] USER: RECEIVE_CLIENT_HTTP_READ: read 402 [2018/04/03 13:13:13:1441] NOTICE: [2018/04/03 13:13:13:1441] NOTICE: 0000: 3C 68 74 6D 6C 3E 3C 62 6F 64 79 3E 3C 68 31 3E

    [2018/04/03 13:13:13:1441] NOTICE: 0010: 46 6F 72 6D 20 72 65 73 75 6C 74 73 20 28 61 66 Form results (af [2018/04/03 13:13:13:1441] NOTICE: 0020: 74 65 72 20 75 72 6C 64 65 63 6F 64 69 6E 67 29 ter urldecoding) [2018/04/03 13:13:13:1441] NOTICE: 0030: 3C 2F 68 31 3E 3C 74 61 62 6C 65 3E 3C 74 72 3E

    [2018/04/03 13:13:13:1441] NOTICE: 0040: 3C 74 64 3E 4E 61 6D 65 3C 2F 74 64 3E 3C 74 64 < [2018/04/03 13:13:13:1441] NOTICE: 0070: 74 72 3E 3C 74 64 3E 3C 62 3E 74 65 78 74 3C 2F tr>< [2018/04/03 13:13:13:1442] NOTICE: 00D0: 74 64 3E 4E 55 4C 4C 3C 2F 74 64 3E 3C 2F 74 72 td>NULL [2018/04/03 13:13:13:1442] NOTICE: 0110: 3C 2F 74 72 3E 3C 74 72 3E 3C 74 64 3E 3C 62 3E < [2018/04/03 13:13:13:1442] NOTICE: 0130: 74 64 3E 30 3C 2F 74 64 3E 3C 74 64 3E 4E 55 4C td>0
    filena [2018/04/03 13:13:13:1442] NOTICE: 0160: 6D 65 3A 3C 2F 62 3E 20 6D 79 66 69 6C 65 2E 74 me: myfile.t [2018/04/03 13:13:13:1442] NOTICE: 0170: 78 74 2C 20 3C 62 3E 6C 65 6E 67 74 68 3C 2F 62 xt, length 44 [2018/04/03 13:13:13:1442] NOTICE: [2018/04/03 13:13:13:1442] USER: LWS_CALLBACK_COMPLETED_CLIENT_HTTP [2018/04/03 13:13:13:1455] USER: Completed ``` libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-post/libwebsockets.org.cer000066400000000000000000000036241476025525100330570ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ 0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ 3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client-post/minimal-http-client-post.c000066400000000000000000000163461476025525100337510ustar00rootroot00000000000000/* * lws-minimal-http-client-post * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the a minimal http client using lws and POST. * * It POSTs both form data and a file to the form at * https://libwebsockets.org/testserver/formtest and dumps * the html page received generated by the POST handler. */ #include #include #include static int interrupted, bad = 0, status, count_clients = 1, completed; static struct lws *client_wsi[4]; struct pss { char body_part; }; static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct pss *pss = (struct pss *)user; char buf[LWS_PRE + 1024], *start = &buf[LWS_PRE], *p = start, *end = &buf[sizeof(buf) - 1]; int n; switch (reason) { /* because we are protocols[0] ... */ case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); bad = 1; if (++completed == count_clients) lws_cancel_service(lws_get_context(wsi)); break; case LWS_CALLBACK_CLOSED_CLIENT_HTTP: for (n = 0; n < count_clients; n++) if (client_wsi[n] == wsi) { client_wsi[n] = NULL; bad |= status != 200; if (++completed == count_clients) /* abort poll wait */ lws_cancel_service(lws_get_context(wsi)); } break; /* ...callbacks related to receiving the result... */ case LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: status = (int)lws_http_client_http_response(wsi); lwsl_user("Connected with server response: %d\n", status); break; case LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ: lwsl_user("RECEIVE_CLIENT_HTTP_READ: read %d\n", (int)len); lwsl_hexdump_notice(in, len); return 0; /* don't passthru */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP: n = sizeof(buf) - LWS_PRE; if (lws_http_client_read(wsi, &p, &n) < 0) return -1; return 0; /* don't passthru */ case LWS_CALLBACK_COMPLETED_CLIENT_HTTP: lwsl_user("LWS_CALLBACK_COMPLETED_CLIENT_HTTP\n"); bad |= status != 200; /* * Do this to mark us as having processed the completion * so close doesn't duplicate (with pipelining, completion != * connection close */ for (n = 0; n < count_clients; n++) if (client_wsi[n] == wsi) client_wsi[n] = NULL; if (++completed == count_clients) /* abort poll wait */ lws_cancel_service(lws_get_context(wsi)); break; /* ...callbacks related to generating the POST... */ case LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER: /* * Tell lws we are going to send the body next... */ if (!lws_http_is_redirected_to_get(wsi)) { lwsl_user("%s: doing POST flow\n", __func__); lws_client_http_body_pending(wsi, 1); lws_callback_on_writable(wsi); } else lwsl_user("%s: doing GET flow\n", __func__); break; case LWS_CALLBACK_CLIENT_HTTP_WRITEABLE: if (lws_http_is_redirected_to_get(wsi)) break; lwsl_user("LWS_CALLBACK_CLIENT_HTTP_WRITEABLE\n"); n = LWS_WRITE_HTTP; /* * For a small body like this, we could prepare it in memory and * send it all at once. But to show how to handle, eg, * arbitrary-sized file payloads, or huge form-data fields, the * sending is done in multiple passes through the event loop. */ switch (pss->body_part++) { case 0: if (lws_client_http_multipart(wsi, "text", NULL, NULL, &p, end)) return -1; /* notice every usage of the boundary starts with -- */ p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "my text field\xd\xa"); break; case 1: if (lws_client_http_multipart(wsi, "file", "myfile.txt", "text/plain", &p, end)) return -1; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "This is the contents of the " "uploaded file.\xd\xa" "\xd\xa"); break; case 2: if (lws_client_http_multipart(wsi, NULL, NULL, NULL, &p, end)) return -1; lws_client_http_body_pending(wsi, 0); /* necessary to support H2, it means we will write no * more on this stream */ n = LWS_WRITE_HTTP_FINAL; break; default: /* * We can get extra callbacks here, if nothing to do, * then do nothing. */ return 0; } if (lws_write(wsi, (uint8_t *)start, lws_ptr_diff_size_t(p, start), (enum lws_write_protocol)n) != lws_ptr_diff(p, start)) return 1; if (n != LWS_WRITE_HTTP_FINAL) lws_callback_on_writable(wsi); return 0; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static const struct lws_protocols protocols[] = { { "http", callback_http, sizeof(struct pss), 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_client_connect_info i; struct lws_context *context; const char *p; int n = 0; signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ lws_cmdline_option_handle_builtin(argc, argv, &info); lwsl_user("LWS minimal http client - POST [-d] [-l] [--h1]\n"); if (lws_cmdline_option(argc, argv, "-m")) count_clients = LWS_ARRAY_SIZE(client_wsi); info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.port = CONTEXT_PORT_NO_LISTEN; /* we do not run any server */ info.protocols = protocols; /* * since we know this lws context is only ever going to be used with * one client wsis / fds / sockets at a time, let lws know it doesn't * have to use the default allocations for fd tables up to ulimit -n. * It will just allocate for 1 internal and 1 (+ 1 http2 nwsi) that we * will use. */ info.fd_limit_per_thread = (unsigned int)(1 + count_clients + 1); #if defined(LWS_WITH_MBEDTLS) || defined(USE_WOLFSSL) /* * OpenSSL uses the system trust store. mbedTLS has to be told which * CA to trust explicitly. */ if (!lws_cmdline_option(argc, argv, "-l")) info.client_ssl_ca_filepath = "./libwebsockets.org.cer"; #endif context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } memset(&i, 0, sizeof i); /* otherwise uninitialized garbage */ i.context = context; i.ssl_connection = LCCSCF_USE_SSL | LCCSCF_HTTP_MULTIPART_MIME; if (lws_cmdline_option(argc, argv, "-l")) { i.port = 7681; i.address = "localhost"; i.ssl_connection |= LCCSCF_ALLOW_SELFSIGNED; i.path = "/formtest"; } else { i.port = 443; i.address = "libwebsockets.org"; i.path = "/testserver/formtest"; } if (lws_cmdline_option(argc, argv, "--form1")) i.path = "/form1"; if ((p = lws_cmdline_option(argc, argv, "--port"))) i.port = atoi(p); i.host = i.address; i.origin = i.address; i.method = "POST"; /* force h1 even if h2 available */ if (lws_cmdline_option(argc, argv, "--h1")) i.alpn = "http/1.1"; i.protocol = protocols[0].name; for (n = 0; n < count_clients; n++) { i.pwsi = &client_wsi[n]; lwsl_notice("%s: connecting to %s:%d\n", __func__, i.address, i.port); if (!lws_client_connect_via_info(&i)) completed++; } while (n >= 0 && completed != count_clients && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); lwsl_user("Completed: %s\n", bad ? "failed" : "OK"); return bad; } libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client/000077500000000000000000000000001476025525100257465ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client/CMakeLists.txt000066400000000000000000000152641476025525100305160ustar00rootroot00000000000000project(lws-minimal-http-client C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-client) set(SRCS minimal-http-client.c) set(has_fault_injection 1) set(has_h2 1) set(has_plugins 1) set(has_ss_policy_parse 1) set(has_no_system_vhost 1) set(has_async_dns 1) set(has_mbedtls 1) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) require_lws_config(LWS_WITH_SYS_STATE 1 requirements) require_lws_config(LWS_ROLE_H2 1 has_h2) require_lws_config(LWS_WITH_SYS_FAULT_INJECTION 1 has_fault_injection) require_lws_config(LWS_WITH_EVLIB_PLUGINS 1 has_plugins) require_lws_config(LWS_WITH_EVENT_LIBS 1 has_plugins) require_lws_config(LWS_WITH_SECURE_STREAMS 1 has_ss_policy_parse) require_lws_config(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY 0 has_ss_policy_parse) require_lws_config(LWS_WITH_SYS_ASYNC_DNS 0 has_no_system_vhost) require_lws_config(LWS_WITH_SYS_NTPCLIENT 0 has_no_system_vhost) require_lws_config(LWS_WITH_SYS_DHCP_CLIENT 0 has_no_system_vhost) require_lws_config(LWS_WITH_SYS_ASYNC_DNS 1 has_async_dns) require_lws_config(LWS_WITH_MBEDTLS 1 has_mbedtls) if (requirements) add_executable(${SAMP} ${SRCS}) find_program(VALGRIND "valgrind") sai_resource(warmcat_conns 1 40 http_client_warmcat) if (LWS_CTEST_INTERNET_AVAILABLE) set(mytests http-client-warmcat-h1) if (has_h2) add_test(NAME http-client-warmcat COMMAND lws-minimal-http-client ) list(APPEND mytests http-client-warmcat) endif() add_test(NAME http-client-warmcat-h1 COMMAND lws-minimal-http-client --h1) if (has_fault_injection) # creation related faults list(APPEND mytests http-client-fi-ctx1) add_test(NAME http-client-fi-ctx1 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "ctx_createfail1") # if (has_plugins) # !!! need to actually select an available evlib plugin to trigger this # list(APPEND mytests http-client-fi-pi) # add_test(NAME http-client-fi-pi COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "ctx_createfail_plugin_init") # endif() list(APPEND mytests http-client-fi-ctx2) add_test(NAME http-client-fi-ctx2 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "ctx_createfail_evlib_sel") list(APPEND mytests http-client-fi-ctx3) add_test(NAME http-client-fi-ctx3 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "ctx_createfail_oom_ctx") list(APPEND mytests http-client-fi-ctx4) add_test(NAME http-client-fi-ctx4 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "ctx_createfail_privdrop") list(APPEND mytests http-client-fi-ctx5) add_test(NAME http-client-fi-ctx5 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "ctx_createfail_maxfds") list(APPEND mytests http-client-fi-ctx6) add_test(NAME http-client-fi-ctx6 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "ctx_createfail_oom_fds") list(APPEND mytests http-client-fi-ctx7) add_test(NAME http-client-fi-ctx7 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "ctx_createfail_plat_init") list(APPEND mytests http-client-fi-ctx8) add_test(NAME http-client-fi-ctx8 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "ctx_createfail_evlib_init") list(APPEND mytests http-client-fi-ctx9) add_test(NAME http-client-fi-ctx9 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "ctx_createfail_evlib_pt") if (NOT has_no_system_vhost) list(APPEND mytests http-client-fi-ctx10) add_test(NAME http-client-fi-ctx10 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "ctx_createfail_sys_vh") list(APPEND mytests http-client-fi-ctx11) add_test(NAME http-client-fi-ctx11 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "ctx_createfail_sys_vh_init") endif() list(APPEND mytests http-client-fi-ctx12) add_test(NAME http-client-fi-ctx12 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "ctx_createfail_def_vh") list(APPEND mytests http-client-fi-vh1) add_test(NAME http-client-fi-vh1 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "vh/vh_create_oom") list(APPEND mytests http-client-fi-vh2) add_test(NAME http-client-fi-vh2 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "vh/vh_create_pcols_oom") list(APPEND mytests http-client-fi-vh3) add_test(NAME http-client-fi-vh3 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "vh/vh_create_ssl_srv") list(APPEND mytests http-client-fi-vh4) add_test(NAME http-client-fi-vh4 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "vh/vh_create_ssl_cli") list(APPEND mytests http-client-fi-vh5) add_test(NAME http-client-fi-vh5 COMMAND lws-minimal-http-client --expected-exit 5 --fault-injection "vh/vh_create_srv_init") list(APPEND mytests http-client-fi-dnsfail) add_test(NAME http-client-fi-dnsfail COMMAND lws-minimal-http-client --expected-exit 3 --fault-injection "wsi=user/dnsfail") if (has_async_dns) list(APPEND mytests http-client-fi-connfail) add_test(NAME http-client-fi-connfail COMMAND lws-minimal-http-client --expected-exit 2 --fault-injection "wsi=user/connfail") else() list(APPEND mytests http-client-fi-connfail) add_test(NAME http-client-fi-connfail COMMAND lws-minimal-http-client --expected-exit 2 --fault-injection "wsi=user/connfail") endif() list(APPEND mytests http-client-fi-user-est-fail) add_test(NAME http-client-fi-user-est-fail COMMAND lws-minimal-http-client --expected-exit 3 --fault-injection "wsi/user_reject_at_est") endif() if (has_mbedtls) list(APPEND mytests http-client-mbedtls-wrong-ca) add_test(NAME http-client-mbedtls-wrong-ca COMMAND lws-minimal-http-client -w --expected-exit 3) message("... adding mbedtls wrong CA test") else() message("... skipping mbedtls wrong CA test") endif() set_tests_properties(${mytests} PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/http-client/minimal-http-client TIMEOUT 20) if (DEFINED ENV{SAI_OVN}) set_tests_properties(${mytests} PROPERTIES FIXTURES_REQUIRED "res_http_client_warmcat") endif() endif() if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client/README.md000066400000000000000000000075421476025525100272350ustar00rootroot00000000000000# lws minimal http client The application goes to either https://warmcat.com or https://localhost:7681 (with `-l` option) and receives the page data. ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -l| Connect to https://localhost:7681 and accept selfsigned cert --h1|Specify http/1.1 only using ALPN, rejects h2 even if server supports it --server |set server name to connect to -k|Apply tls option LCCSCF_ALLOW_INSECURE -j|Apply tls option LCCSCF_ALLOW_SELFSIGNED -m|Apply tls option LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK -e|Apply tls option LCCSCF_ALLOW_EXPIRED -b|Apply tls option LCCSCF_CACHE_COOKIES -w|For mbedtls/wolfssl, load wrong CA cert (expected to fail) -c |Set filepath used for cookie jar -v|Connection validity use 3s / 10s instead of default 5m / 5m10s --nossl| disable ssl connection --user | Set Basic Auth username --password | Set Basic Auth password ``` $ ./lws-minimal-http-client [2018/03/04 14:43:20:8562] USER: LWS minimal http client [2018/03/04 14:43:20:8571] NOTICE: Creating Vhost 'default' port -1, 1 protocols, IPv6 on [2018/03/04 14:43:20:8616] NOTICE: created client ssl context for default [2018/03/04 14:43:20:8617] NOTICE: lws_client_connect_2: 0x1814dc0: address warmcat.com [2018/03/04 14:43:21:1496] NOTICE: lws_client_connect_2: 0x1814dc0: address warmcat.com [2018/03/04 14:43:22:0154] NOTICE: lws_client_interpret_server_handshake: incoming content length 26520 [2018/03/04 14:43:22:0154] NOTICE: lws_client_interpret_server_handshake: client connection up [2018/03/04 14:43:22:0169] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0169] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0169] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0169] USER: RECEIVE_CLIENT_HTTP_READ: read 1015 [2018/03/04 14:43:22:0174] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0174] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0174] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0174] USER: RECEIVE_CLIENT_HTTP_READ: read 1015 [2018/03/04 14:43:22:0179] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0179] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0179] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0179] USER: RECEIVE_CLIENT_HTTP_READ: read 1015 [2018/03/04 14:43:22:3010] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3010] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3010] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3010] USER: RECEIVE_CLIENT_HTTP_READ: read 1015 [2018/03/04 14:43:22:3015] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3015] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3015] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3015] USER: RECEIVE_CLIENT_HTTP_READ: read 1015 [2018/03/04 14:43:22:3020] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3020] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3020] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3020] USER: RECEIVE_CLIENT_HTTP_READ: read 1015 [2018/03/04 14:43:22:3022] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3022] USER: RECEIVE_CLIENT_HTTP_READ: read 974 [2018/03/04 14:43:22:3022] NOTICE: lws_http_client_read: transaction completed says -1 [2018/03/04 14:43:23:3042] USER: Completed ``` You can also test the client Basic Auth support against the http-server/minimal-http-server-basicauth example. In one console window run the server and in the other ``` $ lws-minimal-http-client -l --nossl --path /secret/index.html --user user --password password ``` The Basic Auth credentials for the test server are literally username "user" and password "password". libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client/minimal-http-client.c000066400000000000000000000252011476025525100317710ustar00rootroot00000000000000/* * lws-minimal-http-client * * Written in 2010-2021 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the a minimal http client using lws. * * It visits https://warmcat.com/ and receives the html page there. You * can dump the page data by changing the #if 0 below. */ #include #include #include static int interrupted, bad = 1, status, conmon; #if defined(LWS_WITH_HTTP2) static int long_poll; #endif static struct lws *client_wsi; static const char *ba_user, *ba_password; static const lws_retry_bo_t retry = { .secs_since_valid_ping = 3, .secs_since_valid_hangup = 10, }; #if defined(LWS_WITH_CONMON) void dump_conmon_data(struct lws *wsi) { const struct addrinfo *ai; struct lws_conmon cm; char ads[48]; lws_conmon_wsi_take(wsi, &cm); lws_sa46_write_numeric_address(&cm.peer46, ads, sizeof(ads)); lwsl_notice("%s: peer %s, dns: %uus, sockconn: %uus, tls: %uus, txn_resp: %uus\n", __func__, ads, (unsigned int)cm.ciu_dns, (unsigned int)cm.ciu_sockconn, (unsigned int)cm.ciu_tls, (unsigned int)cm.ciu_txn_resp); ai = cm.dns_results_copy; while (ai) { lws_sa46_write_numeric_address((lws_sockaddr46 *)ai->ai_addr, ads, sizeof(ads)); lwsl_notice("%s: DNS %s\n", __func__, ads); ai = ai->ai_next; } /* * This destroys the DNS list in the lws_conmon that we took * responsibility for when we used lws_conmon_wsi_take() */ lws_conmon_release(&cm); } #endif static const char *ua = "Mozilla/5.0 (X11; Linux x86_64) " "AppleWebKit/537.36 (KHTML, like Gecko) " "Chrome/51.0.2704.103 Safari/537.36", *acc = "*/*"; static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { switch (reason) { /* because we are protocols[0] ... */ case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); interrupted = 1; bad = 3; /* connection failed before we could make connection */ lws_cancel_service(lws_get_context(wsi)); #if defined(LWS_WITH_CONMON) if (conmon) dump_conmon_data(wsi); #endif break; case LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: { char buf[128]; lws_get_peer_simple(wsi, buf, sizeof(buf)); status = (int)lws_http_client_http_response(wsi); lwsl_user("Connected to %s, http response: %d\n", buf, status); } #if defined(LWS_WITH_HTTP2) if (long_poll) { lwsl_user("%s: Client entering long poll mode\n", __func__); lws_h2_client_stream_long_poll_rxonly(wsi); } #endif if (lws_fi_user_wsi_fi(wsi, "user_reject_at_est")) return -1; break; /* you only need this if you need to do Basic Auth */ case LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER: { unsigned char **p = (unsigned char **)in, *end = (*p) + len; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_USER_AGENT, (unsigned char *)ua, (int)strlen(ua), p, end)) return -1; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_ACCEPT, (unsigned char *)acc, (int)strlen(acc), p, end)) return -1; #if defined(LWS_WITH_HTTP_BASIC_AUTH) { char b[128]; if (!ba_user || !ba_password) break; if (lws_http_basic_auth_gen(ba_user, ba_password, b, sizeof(b))) break; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_AUTHORIZATION, (unsigned char *)b, (int)strlen(b), p, end)) return -1; } #endif break; } /* chunks of chunked content, with header removed */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ: lwsl_user("RECEIVE_CLIENT_HTTP_READ: read %d\n", (int)len); #if defined(LWS_WITH_HTTP2) if (long_poll) { char dotstar[128]; lws_strnncpy(dotstar, (const char *)in, len, sizeof(dotstar)); lwsl_notice("long poll rx: %d '%s'\n", (int)len, dotstar); } #endif #if 0 lwsl_hexdump_notice(in, len); #endif return 0; /* don't passthru */ /* uninterpreted http content */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP: { char buffer[1024 + LWS_PRE]; char *px = buffer + LWS_PRE; int lenx = sizeof(buffer) - LWS_PRE; if (lws_fi_user_wsi_fi(wsi, "user_reject_at_rx")) return -1; if (lws_http_client_read(wsi, &px, &lenx) < 0) return -1; } return 0; /* don't passthru */ case LWS_CALLBACK_COMPLETED_CLIENT_HTTP: lwsl_user("LWS_CALLBACK_COMPLETED_CLIENT_HTTP\n"); interrupted = 1; bad = status != 200; lws_cancel_service(lws_get_context(wsi)); /* abort poll wait */ break; case LWS_CALLBACK_CLOSED_CLIENT_HTTP: interrupted = 1; bad = status != 200; lws_cancel_service(lws_get_context(wsi)); /* abort poll wait */ #if defined(LWS_WITH_CONMON) if (conmon) dump_conmon_data(wsi); #endif break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static const struct lws_protocols protocols[] = { { "http", callback_http, 0, 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; static void sigint_handler(int sig) { interrupted = 1; } struct args { int argc; const char **argv; }; static int system_notify_cb(lws_state_manager_t *mgr, lws_state_notify_link_t *link, int current, int target) { struct lws_context *context = mgr->parent; struct lws_client_connect_info i; struct args *a = lws_context_user(context); const char *p; if (current != LWS_SYSTATE_OPERATIONAL || target != LWS_SYSTATE_OPERATIONAL) return 0; lwsl_info("%s: operational\n", __func__); memset(&i, 0, sizeof i); /* otherwise uninitialized garbage */ i.context = context; if (!lws_cmdline_option(a->argc, a->argv, "-n")) { i.ssl_connection = LCCSCF_USE_SSL; #if defined(LWS_WITH_HTTP2) /* requires h2 */ if (lws_cmdline_option(a->argc, a->argv, "--long-poll")) { lwsl_user("%s: long poll mode\n", __func__); long_poll = 1; } #endif } if (lws_cmdline_option(a->argc, a->argv, "-l")) { i.port = 7681; i.address = "localhost"; i.ssl_connection |= LCCSCF_ALLOW_SELFSIGNED; } else { i.port = 443; i.address = "warmcat.com"; } if (lws_cmdline_option(a->argc, a->argv, "--nossl")) i.ssl_connection = 0; i.ssl_connection |= LCCSCF_H2_QUIRK_OVERFLOWS_TXCR | LCCSCF_ACCEPT_TLS_DOWNGRADE_REDIRECTS | LCCSCF_H2_QUIRK_NGHTTP2_END_STREAM; i.alpn = "h2,http/1.1"; if (lws_cmdline_option(a->argc, a->argv, "--h1")) i.alpn = "http/1.1"; if (lws_cmdline_option(a->argc, a->argv, "--h2-prior-knowledge")) i.ssl_connection |= LCCSCF_H2_PRIOR_KNOWLEDGE; if ((p = lws_cmdline_option(a->argc, a->argv, "-p"))) i.port = atoi(p); if ((p = lws_cmdline_option(a->argc, a->argv, "--user"))) ba_user = p; if ((p = lws_cmdline_option(a->argc, a->argv, "--password"))) ba_password = p; if (lws_cmdline_option(a->argc, a->argv, "-j")) i.ssl_connection |= LCCSCF_ALLOW_SELFSIGNED; if (lws_cmdline_option(a->argc, a->argv, "-k")) i.ssl_connection |= LCCSCF_ALLOW_INSECURE; if (lws_cmdline_option(a->argc, a->argv, "-b")) i.ssl_connection |= LCCSCF_CACHE_COOKIES; if (lws_cmdline_option(a->argc, a->argv, "-m")) i.ssl_connection |= LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK; if (lws_cmdline_option(a->argc, a->argv, "-e")) i.ssl_connection |= LCCSCF_ALLOW_EXPIRED; if ((p = lws_cmdline_option(a->argc, a->argv, "-f"))) { i.ssl_connection |= LCCSCF_H2_MANUAL_RXFLOW; i.manual_initial_tx_credit = atoi(p); lwsl_notice("%s: manual peer tx credit %d\n", __func__, i.manual_initial_tx_credit); } #if defined(LWS_WITH_CONMON) if (lws_cmdline_option(a->argc, a->argv, "--conmon")) { i.ssl_connection |= LCCSCF_CONMON; conmon = 1; } #endif /* the default validity check is 5m / 5m10s... -v = 3s / 10s */ if (lws_cmdline_option(a->argc, a->argv, "-v")) i.retry_and_idle_policy = &retry; if ((p = lws_cmdline_option(a->argc, a->argv, "--server"))) i.address = p; if ((p = lws_cmdline_option(a->argc, a->argv, "--path"))) i.path = p; else i.path = "/"; i.host = i.address; i.origin = i.address; i.method = "GET"; i.protocol = protocols[0].name; i.pwsi = &client_wsi; i.fi_wsi_name = "user"; if (!lws_client_connect_via_info(&i)) { lwsl_err("Client creation failed\n"); interrupted = 1; bad = 2; /* could not even start client connection */ lws_cancel_service(context); return 1; } return 0; } int main(int argc, const char **argv) { lws_state_notify_link_t notifier = { { NULL, NULL, NULL }, system_notify_cb, "app" }; lws_state_notify_link_t *na[] = { ¬ifier, NULL }; struct lws_context_creation_info info; struct lws_context *context; int n = 0, expected = 0; struct args args; const char *p; // uint8_t memcert[4096]; args.argc = argc; args.argv = argv; signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ lws_cmdline_option_handle_builtin(argc, argv, &info); lwsl_user("LWS minimal http client [-d] [-l] [--h1]\n"); info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_H2_JUST_FIX_WINDOW_UPDATE_OVERFLOW; info.port = CONTEXT_PORT_NO_LISTEN; /* we do not run any server */ info.protocols = protocols; info.user = &args; info.register_notifier_list = na; info.connect_timeout_secs = 30; #if defined(LWS_WITH_CACHE_NSCOOKIEJAR) info.http_nsc_filepath = "./cookies.txt"; if ((p = lws_cmdline_option(argc, argv, "-c"))) info.http_nsc_filepath = p; #endif /* * since we know this lws context is only ever going to be used with * one client wsis / fds / sockets at a time, let lws know it doesn't * have to use the default allocations for fd tables up to ulimit -n. * It will just allocate for 1 internal and 1 (+ 1 http2 nwsi) that we * will use. */ info.fd_limit_per_thread = 1 + 1 + 1; #if defined(LWS_WITH_MBEDTLS) || defined(USE_WOLFSSL) /* * OpenSSL uses the system trust store. mbedTLS has to be told which * CA to trust explicitly. */ if (lws_cmdline_option(argc, argv, "-w")) /* option to confirm we are validating against the right cert */ info.client_ssl_ca_filepath = "./wrong.cer"; else info.client_ssl_ca_filepath = "./warmcat.com.cer"; #endif #if 0 n = open("./warmcat.com.cer", O_RDONLY); if (n >= 0) { info.client_ssl_ca_mem_len = read(n, memcert, sizeof(memcert)); info.client_ssl_ca_mem = memcert; close(n); n = 0; memcert[info.client_ssl_ca_mem_len++] = '\0'; } #endif context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); bad = 5; goto bail; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); bail: if ((p = lws_cmdline_option(argc, argv, "--expected-exit"))) expected = atoi(p); if (bad == expected) { lwsl_user("Completed: OK (seen expected %d)\n", expected); return 0; } else lwsl_err("Completed: failed: exit %d, expected %d\n", bad, expected); return 1; } libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client/warmcat.com.cer000066400000000000000000000036241476025525100306610ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ 0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ 3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/http-client/minimal-http-client/wrong.cer000066400000000000000000000022451476025525100276000ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM 9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6 VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L 93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU 5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy rqXRfboQnoZsG4q5WTP468SQvvG5 -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/http-server/000077500000000000000000000000001476025525100221175ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/README.md000066400000000000000000000033711476025525100234020ustar00rootroot00000000000000|Example|Demonstrates| ---|--- minimal-http-server-basicauth|Shows how to protect a mount using a password file and basic auth minimal-http-server-custom-headers|Shows how to query custom headers that lws doesn't already know minimal-http-server-deaddrop|Shows how to use the deaddrop drag and drop file upload + sharing plugin minimal-http-server-dynamic|Serves both static and dynamically generated http content minimal-http-server-eventlib-foreign|Demonstrates integrating lws with a foreign event library minimal-http-server-eventlib-demos|Using the demo plugins with event libraries minimal-http-server-eventlib|Same as minimal-http-server but works with a supported event library minimal-http-server-form-get|Process a GET form minimal-http-server-form-post-file|Process a multipart POST form with file transfer minimal-http-server-form-post|Process a POST form (no file transfer) minimal-http-server-fulltext-search|Demonstrates using lws Fulltext Search minimal-http-server-mimetypes|Shows how to add support for additional mimetypes at runtime minimal-http-server-multivhost|Same as minimal-http-server but three different vhosts minimal-http-server-proxy|Reverse Proxy minimal-http-server-smp|Multiple service threads minimal-http-server-sse-ring|Server Side Events with ringbuffer and threaded event sources minimal-http-server-sse|Simple Server Side Events minimal-http-server-tls-80|Serves a directory over http/1 or http/2 with TLS (SSL), custom 404 handler, redirect to https on port 80 minimal-http-server-tls-mem|Serves using TLS with the cert and key provided as memory buffers instead of files minimal-http-server-tls|Serves a directory over http/1 or http/2 with TLS (SSL), custom 404 handler minimal-http-server|Serves a directory over http/1, custom 404 handler libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-basicauth/000077500000000000000000000000001476025525100277675ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-basicauth/CMakeLists.txt000066400000000000000000000014351476025525100325320ustar00rootroot00000000000000project(lws-minimal-http-server-basicauth C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-server-basicauth) set(SRCS minimal-http-server-basicauth.c) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) require_lws_config(LWS_WITH_HTTP_BASIC_AUTH 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-basicauth/README.md000066400000000000000000000015441476025525100312520ustar00rootroot00000000000000# lws minimal http server basic auth This demonstrates how to protect a mount using a password file outside of the mount itself. The demo has two mounts, a normal one at / and one protected by basic auth at /secret. The file at ./ba-passwords contains valid user:password combinations. ## Discovering the authenticated user After a successful authentication, the `WSI_TOKEN_HTTP_AUTHORIZATION` token contains the authenticated username. ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server-basic-auth [2018/04/19 08:40:05:1333] USER: LWS minimal http server basic auth | visit http://localhost:7681 [2018/04/19 08:40:05:1333] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off ``` Visit http://localhost:7681, and follow the link there to the secret area. Give your browser "user" and "password" as the credentials. libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-basicauth/ba-passwords000066400000000000000000000000161476025525100323140ustar00rootroot00000000000000user:password minimal-http-server-basicauth.c000066400000000000000000000062471476025525100357350ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-basicauth/* * lws-minimal-http-server-basicauth * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal http server with a second mount that * is protected using a password file and basic auth. * * To keep it simple, it serves the static stuff from the subdirectory * "./mount-origin" of the directory it was started in. * * You can change that by changing mount.origin below. */ #include #include #include #include static int interrupted; /* override the default mount for /secret in the URL space */ static const struct lws_http_mount mount_secret = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/secret", /* mountpoint URL */ /* .origin */ "./mount-secret-origin", /* .def */ "index.html", /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* dynamic */ /* .mountpoint_len */ 7, /* char count */ /* .basic_auth_login_file */ "./ba-passwords", }; /* default mount serves the URL space from ./mount-origin */ static const struct lws_http_mount mount = { /* .mount_next */ &mount_secret, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server basic auth | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-basicauth/mount-origin/000077500000000000000000000000001476025525100324165ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-basicauth/mount-origin/404.html000066400000000000000000000002271476025525100336140ustar00rootroot00000000000000

    404

    Sorry, that file doesn't exist. favicon.ico000066400000000000000000000025761476025525100344720ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-basicauth/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’index.html000066400000000000000000000015241476025525100343360ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-basicauth/mount-origin
    Hello from the minimal http server basic auth example.

    This is a static page served from ./mount-origin/index.html.

    Stuff down /secret in the URL space is protected by Basic Auth.
    Your browser will ask for a username / password combination, and
    lws will check it against ./ba-passwords, which contains a list of
    "username:password" one per line.

    The example content for ba-passwords is literally "user:password".
    Click on the link into the protected area of the URL space below
    and give your browser the credentials "user" and "password".

    /secret libwebsockets.org-logo.svg000066400000000000000000000226061476025525100374520ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-basicauth/mount-origin image/svg+xml strict-csp.svg000066400000000000000000000302361476025525100351570ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-basicauth/mount-origin libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-basicauth/mount-secret-origin/000077500000000000000000000000001476025525100337015ustar00rootroot00000000000000index.html000066400000000000000000000003341476025525100356170ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-basicauth/mount-secret-origin
    This is the big secret protected by basic auth. libwebsockets.org-logo.svg000066400000000000000000000226061476025525100407350ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-basicauth/mount-secret-origin image/svg+xml libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-cgi/000077500000000000000000000000001476025525100265665ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-cgi/CMakeLists.txt000066400000000000000000000013761476025525100313350ustar00rootroot00000000000000project(lws-minimal-http-server-cgi C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-server-cgi) set(SRCS minimal-http-server.c) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_CGI 1 requirements) require_lws_config(LWS_WITHOUT_SERVER 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-cgi/README.md000066400000000000000000000012421476025525100300440ustar00rootroot00000000000000# lws minimal http server-cgi ## build ``` $ cmake . && make ``` ## usage This example runs a script ./my-cgi-script.sh when you vist / The script dumps some information from /proc on stdout, which is proxied back to the browser, script output on stderr is printed in the console. It's able to serve the script output over h1 using chunked encoding, and over h2 having stripped the chunked encoding from the script output. ``` $ ./lws-minimal-http-server-cgi [2019/11/18 16:31:29:5481] U: LWS minimal http server | visit http://localhost:7681 [2019/11/18 16:31:40:2176] N: CGI-stderr: lwstest script stderr: REQUEST_METHOD was GET ``` Visit http://localhost:7681 libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-cgi/minimal-http-server.c000066400000000000000000000054431476025525100326470ustar00rootroot00000000000000/* * lws-minimal-http-server-cgi * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws. * * To keep it simple, it serves stuff from the subdirectory * "./mount-origin" of the directory it was started in. * You can change that by changing mount.origin below. */ #include #include #include static int interrupted; static char cgi_script_fullpath[256]; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ cgi_script_fullpath, /* cgi script */ /* .def */ "/", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_CGI, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server | visit http://localhost:7681\n"); { char cwd[128]; cwd[0] = '\0'; getcwd(cwd, sizeof(cwd)); lws_snprintf(cgi_script_fullpath, sizeof(cgi_script_fullpath), "%s/my-cgi-script.sh", cwd); } memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.error_document_404 = "/404.html"; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; #if defined(LWS_WITH_TLS) if (lws_cmdline_option(argc, argv, "-s")) { info.options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; } #endif context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 1000); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-cgi/my-cgi-script.sh000077500000000000000000000016021476025525100316130ustar00rootroot00000000000000#!/bin/sh echo -e -n "content-type: text/html\x0d\x0a" echo -e -n "transfer-encoding: chunked\x0d\x0a" echo -e -n "\x0d\x0a" echo "" echo "

    lwstest script stdout

    " >&2 echo -n "lwstest script stderr: REQUEST_METHOD was $REQUEST_METHOD" echo "

    REQUEST_METHOD=$REQUEST_METHOD

    " if [ "$REQUEST_METHOD" = "POST" ] ; then >&2 echo "lwstest script stderr: doing read" echo "CONTENT_LENGTH=$CONTENT_LENGTH" read -n $CONTENT_LENGTH line >&2 echo "lwstest script stderr: done read $line" echo "read=\"$line\"" else echo "
    NameLength [2018/04/03 13:13:13:1441] NOTICE: 0060: 56 61 6C 75 65 3C 2F 74 64 3E 3C 2F 74 72 3E 3C Value
    text13my text fi [2018/04/03 13:13:13:1441] NOTICE: 00A0: 65 6C 64 3C 2F 74 64 3E 3C 2F 74 72 3E 3C 74 72 eld
    send [2018/04/03 13:13:13:1441] NOTICE: 00C0: 3C 2F 74 64 3E 3C 74 64 3E 30 3C 2F 74 64 3E 3C 0
    file [2018/04/03 13:13:13:1442] NOTICE: 00F0: 3C 2F 62 3E 3C 2F 74 64 3E 3C 74 64 3E 30 3C 2F 0NULL
    [2018/04/03 13:13:13:1442] NOTICE: 0120: 75 70 6C 6F 61 64 3C 2F 62 3E 3C 2F 74 64 3E 3C uploadNUL [2018/04/03 13:13:13:1442] NOTICE: 0140: 4C 3C 2F 74 64 3E 3C 2F 74 72 3E 3C 2F 74 61 62 L
    " echo "" cat /proc/meminfo | while read line ; do A=`echo "$line" | cut -d: -f1` B=`echo "$line" | tr -s ' ' | cut -d' ' -f2-` echo -e "" echo -e "" done echo "
    /proc/meminfo
    $A$B
    " fi echo "
    done" echo "" sleep 0.5 exit 0 libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-custom-headers/000077500000000000000000000000001476025525100307475ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-custom-headers/CMakeLists.txt000066400000000000000000000014531476025525100335120ustar00rootroot00000000000000project(lws-minimal-http-server-custom-headers C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-server-custom-headers) set(SRCS minimal-http-server-custom-headers.c) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_CUSTOM_HEADERS 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-custom-headers/README.md000066400000000000000000000007331476025525100322310ustar00rootroot00000000000000# lws minimal http server dynamic content ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server-dynamic [2018/03/20 10:24:24:7099] USER: LWS minimal http server dynamic | visit http://localhost:7681 [2018/03/20 10:24:24:7099] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off ``` Visit http://localhost:7681, which is all static content. Click on the link to /dyn/anything, this opens a new tab with dynamicly-produced content. localhost-100y.cert000066400000000000000000000040721476025525100342310ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-custom-headers-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- localhost-100y.key000066400000000000000000000063101476025525100340610ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-custom-headers-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- minimal-http-server-custom-headers.c000066400000000000000000000132211476025525100376630ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-custom-headers/* * lws-minimal-http-server-custom-headers * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal http server that can produce dynamic http * content as well as static content. * * To keep it simple, it serves the static stuff from the subdirectory * "./mount-origin" of the directory it was started in. * * You can change that by changing mount.origin below. */ #include #include #include #include static int interrupted; struct pss { char result[128 + LWS_PRE]; int len; }; /* * This just lets us override LWS_CALLBACK_HTTP handling before passing it * and everything else to the default handler. */ static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { uint8_t buf[LWS_PRE + 2048], *start = &buf[LWS_PRE], *p = start, *end = &buf[sizeof(buf) - 1]; struct pss *pss = (struct pss *)user; char value[32], *pr = &pss->result[LWS_PRE]; size_t e = sizeof(pss->result) - LWS_PRE; int n; switch (reason) { case LWS_CALLBACK_HTTP: /* * LWS doesn't have the "DNT" header built-in. But we can * query it using the "custom" versions of the header apis. * * You can set your modern browser to issue DNT, look in the * privacy settings of your browser. */ pss->len = 0; n = lws_hdr_custom_length(wsi, "dnt:", 4); if (n < 0) pss->len = lws_snprintf(pr, e, "%s: DNT header not found\n", __func__); else { pss->len = lws_snprintf(pr, e, "%s: DNT length %d
    ", __func__, n); n = lws_hdr_custom_copy(wsi, value, sizeof(value), "dnt:", 4); if (n < 0) pss->len += lws_snprintf(pr + pss->len, e - (unsigned int)pss->len, "%s: unable to get DNT value\n", __func__); else pss->len += lws_snprintf(pr + pss->len , e - (unsigned int)pss->len, "%s: DNT value '%s'\n", __func__, value); } lwsl_user("%s\n", pr); if (lws_add_http_common_headers(wsi, HTTP_STATUS_OK, "text/html", (lws_filepos_t)pss->len, &p, end)) return 1; if (lws_finalize_write_http_header(wsi, start, &p, end)) return 1; /* write the body separately */ lws_callback_on_writable(wsi); return 0; case LWS_CALLBACK_HTTP_WRITEABLE: strcpy((char *)start, "hello"); if (lws_write(wsi, (uint8_t *)pr, (unsigned int)pss->len, LWS_WRITE_HTTP_FINAL) != pss->len) return 1; if (lws_http_transaction_completed(wsi)) return -1; return 0; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static struct lws_protocols protocols[] = { { "http", callback_http, sizeof(struct pss), 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; static const struct lws_http_mount mount_dyn = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/dyn", /* mountpoint URL */ /* .origin */ NULL, /* protocol */ /* .def */ NULL, /* .protocol */ "http", /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_CALLBACK, /* dynamic */ /* .mountpoint_len */ 4, /* char count */ /* .basic_auth_login_file */ NULL, }; /* default mount serves the URL space from ./mount-origin */ static const struct lws_http_mount mount = { /* .mount_next */ &mount_dyn, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server custom headers | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; /* for testing ah queue, not useful in real world */ if (lws_cmdline_option(argc, argv, "--ah1")) info.max_http_header_pool = 1; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } /* http on 7681 */ info.port = 7681; info.protocols = protocols; info.mounts = &mount; info.vhost_name = "http"; if (!lws_create_vhost(context, &info)) { lwsl_err("Failed to create tls vhost\n"); goto bail; } /* https on 7682 */ info.port = 7682; info.error_document_404 = "/404.html"; #if defined(LWS_WITH_TLS) info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; #endif info.vhost_name = "https"; if (!lws_create_vhost(context, &info)) { lwsl_err("Failed to create tls vhost\n"); goto bail; } while (n >= 0 && !interrupted) n = lws_service(context, 0); bail: lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-custom-headers/mount-origin/000077500000000000000000000000001476025525100333765ustar00rootroot00000000000000404.html000066400000000000000000000002261476025525100345140ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-custom-headers/mount-origin

    404

    Sorry, that file doesn't exist. error.css000066400000000000000000000000001476025525100351500ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-custom-headers/mount-originfavicon.ico000066400000000000000000000025761476025525100354520ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-custom-headers/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’index.html000066400000000000000000000011571476025525100353200ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-custom-headers/mount-origin
    Hello from the minimal http server custom headers example.

    The idea is it will tell you what your browser sent for DNT, a header lws doesn't already know.

    At the moment the custom header api only works on h1.

    Show DNT header using h1 over http
    Show DNT header using h1 (h2 if enabled) over https
    libwebsockets.org-logo.svg000066400000000000000000000226061476025525100404320ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-custom-headers/mount-origin image/svg+xml strict-csp.svg000066400000000000000000000302361476025525100361370ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-custom-headers/mount-origin libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-deaddrop/000077500000000000000000000000001476025525100276065ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-deaddrop/CMakeLists.txt000066400000000000000000000021421476025525100323450ustar00rootroot00000000000000project(lws-minimal-http-server-deaddrop C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-server-deaddrop) set(SRCS minimal-http-server-deaddrop.c) # NOTE... if you are building this standalone, you must point LWS_PLUGINS_DIR # to the lws plugins dir so it can pick up the plugin source. Eg, # cmake . -DLWS_PLUGINS_DIR=~/libwebsockets/plugins set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) require_lws_config(LWS_WITH_HTTP_BASIC_AUTH 1 requirements) if (requirements AND UNIX) add_executable(${SAMP} ${SRCS}) if (LWS_PLUGINS_DIR) include_directories(${LWS_PLUGINS_DIR}) endif() if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-deaddrop/README.md000066400000000000000000000040711476025525100310670ustar00rootroot00000000000000# lws minimal http server deaddrop This demonstrates how you can leverage the lws deaddrop plugin to make a secure, modern html5 file upload and sharing application. The demo is protected by basic auth credentials defined in the file at ./ba-passwords - by default the credentials are user: user1, password: password; and user: user2, password: password again. You can upload files and have them appear on a shared, downloadable list that is dynamically updated to all clients open on the page. Only the authenticated uploader is able to delete the files he uploaded. Multiple simultaneous ongoing file uploads are supported. ## build To build this standalone, you must tell cmake where the lws source tree ./plugins directory can be found, since it relies on including the source of the raw-proxy plugin. ``` $ cmake . -DLWS_PLUGINS_DIR=~/libwebsockets/plugins && make ``` ## usage ``` $ ./lws-minimal-http-server-deaddrop [2018/12/01 10:31:09:7108] USER: LWS minimal http server deaddrop | visit https://localhost:7681 [2018/12/01 10:31:09:8511] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off [2018/12/01 10:31:09:8522] NOTICE: Using SSL mode [2018/12/01 10:31:10:0755] NOTICE: SSL ECDH curve 'prime256v1' [2018/12/01 10:31:10:2562] NOTICE: lws_tls_client_create_vhost_context: doing cert filepath localhost-100y.cert [2018/12/01 10:31:10:2581] NOTICE: Loaded client cert localhost-100y.cert [2018/12/01 10:31:10:2583] NOTICE: lws_tls_client_create_vhost_context: doing private key filepath [2018/12/01 10:31:10:2593] NOTICE: Loaded client cert private key localhost-100y.key [2018/12/01 10:31:10:2596] NOTICE: created client ssl context for default [2018/12/01 10:31:10:5290] NOTICE: deaddrop: vh default, upload dir ./uploads, max size 10000000 [2018/12/01 10:31:10:5376] NOTICE: vhost default: cert expiry: 730203d ... ``` Visit https://localhost:7681, and follow the link there to the secret area. Give your browser "user1" and "password" as the credentials. For testing to confirm what a different user sees, you can also log in as "user2" and "password". libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-deaddrop/ba-passwords000066400000000000000000000000361476025525100321350ustar00rootroot00000000000000user1:password user2:password libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-deaddrop/localhost-100y.cert000066400000000000000000000040721476025525100331470ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-deaddrop/localhost-100y.key000066400000000000000000000063101476025525100327770ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- minimal-http-server-deaddrop.c000066400000000000000000000116321476025525100353650ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-deaddrop/* * lws-minimal-http-server-deaddrop * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates how you can leverage the lws deaddrop plugin to make a * secure, modern html5 file upload and sharing application. * * Because the guts are in a plugin, you can avoid all this setup by using the * plugin from lwsws and do the config in JSON. */ #include #include #include #include #define LWS_PLUGIN_STATIC #include "../plugins/deaddrop/protocol_lws_deaddrop.c" static struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_DEADDROP, LWS_PROTOCOL_LIST_TERM }; static int interrupted; /* * teach the /get mount how to present various filetypes to the client... * lws won't serve files it doesn't know the mimetype for as a security * measure. */ static struct lws_protocol_vhost_options em3 = { NULL, NULL, ".zip", "application/zip" }, em2 = { &em3, NULL, ".pdf", "application/pdf" }, extra_mimetypes = { &em2, NULL, ".tar.gz", "application/x-gzip" }; /* wire up /upload URLs to the plugin (protected by basic auth) */ static const struct lws_http_mount mount_upload = { /* .mount_next */ NULL, /* .mountpoint */ "/upload", /* mountpoint URL */ /* .origin */ "lws-deaddrop", /* .def */ "", /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_CALLBACK, /* .mountpoint_len */ 7, /* char count */ /* .basic_auth_login_file */ "./ba-passwords", }; /* wire up /get URLs to the upload directory (protected by basic auth) */ static const struct lws_http_mount mount_get = { /* .mount_next */ &mount_upload, /* linked-list "next" */ /* .mountpoint */ "/get", /* mountpoint URL */ /* .origin */ "./uploads", /* .def */ "", /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ &extra_mimetypes, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* dynamic */ /* .mountpoint_len */ 4, /* char count */ /* .basic_auth_login_file */ "./ba-passwords", }; /* wire up / to serve from ./mount-origin (protected by basic auth) */ static const struct lws_http_mount mount = { /* .mount_next */ &mount_get, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ "./ba-passwords", }; /* pass config options to the deaddrop plugin using pvos */ static struct lws_protocol_vhost_options pvo3 = { /* make the wss also require to pass basic auth */ NULL, NULL, "basic-auth", "./ba-passwords" }, pvo2 = { &pvo3, NULL, "max-size", "10000000" }, pvo1 = { &pvo2, NULL, "upload-dir", "./uploads" /* would be an absolute path */ }, pvo = { NULL, /* "next" pvo linked-list */ &pvo1, /* "child" pvo linked-list */ "lws-deaddrop", /* protocol name we belong to on this vhost */ "" /* ignored */ }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server deaddrop | visit https://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.pvo = &pvo; info.protocols = protocols; info.error_document_404 = "/404.html"; info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; #if defined(LWS_WITH_TLS) info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; #endif context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-deaddrop/mount-origin/000077500000000000000000000000001476025525100322355ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-deaddrop/mount-origin/404.html000066400000000000000000000002271476025525100334330ustar00rootroot00000000000000

    404

    Sorry, that file doesn't exist. deaddrop.css000066400000000000000000000127351476025525100344620ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-deaddrop/mount-origin.td { padding: 8px } .h1 { } .dd-fileinfo { font-size: 8pt; } table td { display: table-cell; vertical-align: top; background-color: rgba(247, 247, 232, 0.6); text-align: center } table { border: 2px solid #ccc; padding: 4px; border-radius: 12px; transition: background-color 0.5s ease; } table.nb { border: 0px; border-radius: 0px; transition: opacity 0.5s; } table.noconn { background-color: #ddd; } div { transition: opacity 0.5s; } div.da { padding-left: 20px; padding-right:20px; } div.trot { animation: scale 0.5s linear infinite; } div.uplbox { padding-bottom: 8px; } div.disa { opacity: 0.2; } td.ogn { text-align:left; font-size: 8pt; padding-left: 4px; padding-right: 4px;} td.dow { text-align:left; font-size: 9pt; padding-left: 4px; padding-right: 4px;} td.r { text-align: right; } td.err { color: red; font-weight: bold; } td.vm { display: table-cell; vertical-align: middle; padding-top: 12px; padding-bottom: 12px; } h3 { font-size: 12pt; margin-bottom: 6px; } span { font-size: 9pt; } a { font-size: 9pt; } input.ubtn { font-size: 16pt; margin-top: 4px; text-align: center } img.working { display: inline-block; float:left; background: url("data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKICAgICB3aWR0aD0iMjRweCIgaGVpZ2h0PSIzMHB4IiB2aWV3Qm94PSIwIDAgMjQgMzAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDUwIDUwOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CiAgICA8cmVjdCB4PSIwIiB5PSIxMCIgd2lkdGg9IjQiIGhlaWdodD0iMTAiIGZpbGw9IiMzMzMiIG9wYWNpdHk9IjAuMiI+CiAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9Im9wYWNpdHkiIGF0dHJpYnV0ZVR5cGU9IlhNTCIgdmFsdWVzPSIwLjI7IDE7IC4yIiBiZWdpbj0iMHMiIGR1cj0iMC42cyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIC8+CiAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImhlaWdodCIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjEwOyAyMDsgMTAiIGJlZ2luPSIwcyIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ieSIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjEwOyA1OyAxMCIgYmVnaW49IjBzIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogICAgPC9yZWN0PgogICAgPHJlY3QgeD0iOCIgeT0iMTAiIHdpZHRoPSI0IiBoZWlnaHQ9IjEwIiBmaWxsPSIjMzMzIiAgb3BhY2l0eT0iMC4yIj4KICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ib3BhY2l0eSIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjAuMjsgMTsgLjIiIGJlZ2luPSIwLjE1cyIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iaGVpZ2h0IiBhdHRyaWJ1dGVUeXBlPSJYTUwiIHZhbHVlcz0iMTA7IDIwOyAxMCIgYmVnaW49IjAuMTVzIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogICAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJ5IiBhdHRyaWJ1dGVUeXBlPSJYTUwiIHZhbHVlcz0iMTA7IDU7IDEwIiBiZWdpbj0iMC4xNXMiIGR1cj0iMC42cyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIC8+CiAgICA8L3JlY3Q+CiAgICA8cmVjdCB4PSIxNiIgeT0iMTAiIHdpZHRoPSI0IiBoZWlnaHQ9IjEwIiBmaWxsPSIjMzMzIiAgb3BhY2l0eT0iMC4yIj4KICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ib3BhY2l0eSIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjAuMjsgMTsgLjIiIGJlZ2luPSIwLjNzIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogICAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJoZWlnaHQiIGF0dHJpYnV0ZVR5cGU9IlhNTCIgdmFsdWVzPSIxMDsgMjA7IDEwIiBiZWdpbj0iMC4zcyIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ieSIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjEwOyA1OyAxMCIgYmVnaW49IjAuM3MiIGR1cj0iMC42cyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIC8+CiAgICA8L3JlY3Q+Cjwvc3ZnPg=="); width:0px; height:0px; cursor:pointer; padding:0.6em 1em; background-repeat: no-repeat; vertical-align:middle; color: rgba(0, 0, 0, 0); } img.delbtn { display: inline-block; float:left; background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzNC4yMTcxMzMgMzQuMTQ0MjQ5IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KCTxkZWZzPgoJCTxyYWRpYWxHcmFkaWVudCBpZD0iYSIgY3g9IjEzNTguNSIgY3k9Ijk3Ny43MiIgcj0iNC4xMTYiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS41MDM1IDAgMCAyLjQ5NDQgLTI1NzcuNCAtMTgyMy44KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCQk8c3RvcCBzdG9wLWNvbG9yPSIjZmZmIiBvZmZzZXQ9IjAiLz4KCQkJPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZiIgc3RvcC1vcGFjaXR5PSIwIiBvZmZzZXQ9IjEiLz4KCQk8L3JhZGlhbEdyYWRpZW50PgoJCTxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjEzNjYuMyIgeDI9IjEzNDQuOCIgeTE9Ijk3OC4xOSIgeTI9Ijk1OC43MyIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgtMjE3NCAtMTA3Ni4xKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCQk8c3RvcCBzdG9wLWNvbG9yPSIjOWM5NzlkIiBvZmZzZXQ9IjAiLz4KCQkJPHN0b3Agc3RvcC1jb2xvcj0iI2Y0ZmVmMyIgc3RvcC1vcGFjaXR5PSIuNzQwMTYiIG9mZnNldD0iMSIvPgoJCTwvbGluZWFyR3JhZGllbnQ+Cgk8L2RlZnM+Cgk8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4MzQuMjkgMTIzLjc1KSI+CgkJPGcgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj4KCQkJPGNpcmNsZSBjeD0iLTgxNy4yMiIgY3k9Ii0xMDYuNjgiIHI9IjE2LjA5IiBmaWxsPSJ1cmwoI2IpIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS45NjUiLz4KCQkJPHBhdGggZD0ibS04MjUuNjctMTE0LjcxYzE3LjMzIDE3LjMzIDE3IDE2Ljk5OSAxNyAxNi45OTkiIGZpbGw9IiNmNTUiIHN0cm9rZT0iI2EwMCIgc3Ryb2tlLXdpZHRoPSIxLjY2NSIvPgoJCQk8cGF0aCBkPSJtLTgwOC45Ni0xMTQuNjFjLTE3LjMzIDE3LjMzLTE3IDE2Ljk5OS0xNyAxNi45OTkiIGZpbGw9IiNmNTUiIHN0cm9rZT0iI2EwMCIgc3Ryb2tlLXdpZHRoPSIxLjY2NSIvPgoJCTwvZz4KCQk8ZWxsaXBzZSB0cmFuc2Zvcm09InJvdGF0ZSg1NS44ODUpIiBjeD0iLTUzNC45NiIgY3k9IjYxNS4wNyIgcng9IjYuMTg4MyIgcnk9IjEwLjI2NyIgZmlsbD0idXJsKCNhKSIvPgoJPC9nPgo8L3N2Zz4="); width:0px; height:0px; cursor:pointer; padding:0.45em; background-repeat: no-repeat; vertical-align:middle; color: rgba(0, 0, 0, 0); } @keyframes scale { 50% { opacity: 0.5; transform:scale(1.1) rotate(2deg); } } deaddrop.js000066400000000000000000000144501476025525100343020ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-deaddrop/mount-origin(function() { var server_max_size = 0, ws; function san(s) { if (!s) return ""; return s.replace(/&/g, "&"). replace(/\/g, ">"). replace(/\"/g, """). replace(/%/g, "%"); } function lws_urlencode(s) { return encodeURI(s).replace(/@/g, "%40"); } function trim(num) { var s = num.toString(); if (!s.indexOf(".")) return s; while (s.length && s[s.length - 1] === "0") s = s.substring(0, s.length - 1); if (s[s.length - 1] === ".") s = s.substring(0, s.length - 1); return s; } function humanize(n) { if (n < 1024) return n + "B"; if (n < 1024 * 1024) return trim((n / 1024).toFixed(2)) + "KiB"; if (n < 1024 * 1024 * 1024) return trim((n / (1024 * 1024)).toFixed(2)) + "MiB"; return trim((n / (1024 * 1024 * 1024)).toFixed(2)) + "GiB"; } function da_enter(e) { var da = document.getElementById("da"); e.preventDefault(); da.classList.add("trot"); } function da_leave(e) { var da = document.getElementById("da"); e.preventDefault(); da.classList.remove("trot"); } function da_over(e) { var da = document.getElementById("da"); e.preventDefault(); da.classList.add("trot"); } function clear_errors() { var n, t = document.getElementById("ongoing"); for (n = 0; n < t.rows.length; n++) if (t.rows[n].cells[0].classList.contains("err")) t.deleteRow(n); } function do_upload(file) { var formData = new FormData(); var t = document.getElementById("ongoing"); formData.append("file", file); var row = t.insertRow(0), c1 = row.insertCell(0), c2 = row.insertCell(1), c3 = row.insertCell(2); c1.classList.add("ogn"); c1.classList.add("r"); if (file.size > server_max_size) { c1.innerHTML = "Too Large"; c1.classList.add("err"); } else c1.innerHTML = ""; c2.classList.add("ogn"); c2.classList.add("r"); c2.innerHTML = humanize(file.size); c3.classList.add("ogn"); c3.innerHTML = file.name; if (file.size > server_max_size) return; fetch("upload/" + lws_urlencode(file.name), { method: "POST", body: formData }) .then((e) => { /* this just means we got a response code */ var us = e.url.split("/"), ul = us[us.length - 1], n; for (n = 0; n < t.rows.length; n++) if (ul === lws_urlencode( t.rows[n].cells[2].textContent)) { if (e.ok === true) { t.deleteRow(n); } else { t.rows[n].cells[0].textContent = "Failed " + san(e.status.toString()); t.rows[n].cells[0]. classList.add("err"); } break; } }) .catch((e) => { var us = e.url.split("/"), ul = us[us.length - 1], n; for (n = 0; n < t.rows.length; n++) if (ul === lws_urlencode( t.rows[n].cells[2].textContent)) { t.rows[n].cells[0] = "FAIL"; break; } }); } function da_drop(e) { var da = document.getElementById("da"); e.preventDefault(); da.classList.remove("trot"); clear_errors(); ([...e.dataTransfer.files]).forEach(do_upload); } function upl_button(e) { var fi = document.getElementById("file"); clear_errors(); e.preventDefault(); ([...fi.files]).forEach(do_upload); } function body_drop(e) { e.preventDefault(); } function inp() { var fi = document.getElementById("file"), upl = document.getElementById("upl"); console.log("inp"); upl.disabled = !fi.files.length; } function delfile(e) { e.stopPropagation(); e.preventDefault(); ws.send("{\"del\":\"" + decodeURI(e.target.getAttribute("file")) + "\"}"); } function get_appropriate_ws_url(extra_url) { var pcol; var u = document.URL; /* * We open the websocket encrypted if this page came on an * https:// url itself, otherwise unencrypted */ if (u.substring(0, 5) === "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) === "http") u = u.substr(7); } u = u.split("/"); /* + "/xxx" bit is for IE10 workaround */ return pcol + u[0] + "/" + extra_url; } function new_ws(urlpath, protocol) { return new WebSocket(urlpath, protocol); } document.addEventListener("DOMContentLoaded", function() { var da = document.getElementById("da"), fi = document.getElementById("file"), upl = document.getElementById("upl"); da.addEventListener("dragenter", da_enter, false); da.addEventListener("dragleave", da_leave, false); da.addEventListener("dragover", da_over, false); da.addEventListener("drop", da_drop, false); upl.addEventListener("click", upl_button, false); fi.addEventListener("change", inp, false); window.addEventListener("dragover", body_drop, false); window.addEventListener("drop", body_drop, false); ws = new_ws(get_appropriate_ws_url(""), "lws-deaddrop"); try { ws.onopen = function() { var dd = document.getElementById("ddrop"), da = document.getElementById("da"); dd.classList.remove("noconn"); da.classList.remove("disa"); }; ws.onmessage = function got_packet(msg) { var j = JSON.parse(msg.data), s = "", n, t = document.getElementById("dd-list"); server_max_size = j.max_size; document.getElementById("size").innerHTML = "Server maximum file size " + humanize(j.max_size); s += ""; for (n = 0; n < j.files.length; n++) { var date = new Date(j.files[n].mtime * 1000); s += ""; } s += "
    " + humanize(j.files[n].size) + "" + date.toDateString() + " " + date.toLocaleTimeString() + ""; if (j.files[n].yours === 1) s += ""; else s += " "; s += "" + san(j.files[n].name) + "
    "; t.innerHTML = s; for (n = 0; n < j.files.length; n++) { var d = document.getElementById("d" + n); if (d) d.addEventListener("click", delfile, false); } }; ws.onclose = function() { var dd = document.getElementById("ddrop"), da = document.getElementById("da"); dd.classList.add("noconn"); da.classList.add("disa"); }; } catch(exception) { alert("

    Error " + exception); } }); }()); libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-deaddrop/mount-origin/drop.svg000066400000000000000000000463171476025525100337350ustar00rootroot00000000000000 favicon.ico000066400000000000000000000025761476025525100343110ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-deaddrop/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’index.html000066400000000000000000000020261476025525100341530ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-deaddrop/mount-origin  

    ...or select files to upload:



    libwebsockets.org-logo.svg000066400000000000000000000226061476025525100372710ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-deaddrop/mount-origin image/svg+xml strict-csp.svg000066400000000000000000000302361476025525100347760ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-deaddrop/mount-origin libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-deaddrop/uploads/000077500000000000000000000000001476025525100312555ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-deaddrop/uploads/user1/000077500000000000000000000000001476025525100323145ustar00rootroot00000000000000placeholder.txt000066400000000000000000000000421476025525100352540ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-deaddrop/uploads/user1git doesn't support empty dirs... libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-dynamic/000077500000000000000000000000001476025525100274505ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-dynamic/CMakeLists.txt000066400000000000000000000013331476025525100322100ustar00rootroot00000000000000project(lws-minimal-http-server-dynamic C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-server-dynamic) set(SRCS minimal-http-server-dynamic.c) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-dynamic/README.md000066400000000000000000000007331476025525100307320ustar00rootroot00000000000000# lws minimal http server dynamic content ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server-dynamic [2018/03/20 10:24:24:7099] USER: LWS minimal http server dynamic | visit http://localhost:7681 [2018/03/20 10:24:24:7099] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off ``` Visit http://localhost:7681, which is all static content. Click on the link to /dyn/anything, this opens a new tab with dynamicly-produced content. libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-dynamic/localhost-100y.cert000066400000000000000000000040721476025525100330110ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-dynamic/localhost-100y.key000066400000000000000000000063101476025525100326410ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- minimal-http-server-dynamic.c000066400000000000000000000226271476025525100350770ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-dynamic/* * lws-minimal-http-server-dynamic * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal http server that can produce dynamic http * content as well as static content. * * To keep it simple, it serves the static stuff from the subdirectory * "./mount-origin" of the directory it was started in. * * You can change that by changing mount.origin below. */ #include #include #include #include /* * Unlike ws, http is a stateless protocol. This pss only exists for the * duration of a single http transaction. With http/1.1 keep-alive and http/2, * that is unrelated to (shorter than) the lifetime of the network connection. */ struct pss { char path[128]; int times; int budget; int content_lines; }; static int interrupted; static int callback_dynamic_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct pss *pss = (struct pss *)user; uint8_t buf[LWS_PRE + 2048], *start = &buf[LWS_PRE], *p = start, *end = &buf[sizeof(buf) - 1]; time_t t; int n; #if defined(LWS_HAVE_CTIME_R) char date[32]; #endif switch (reason) { case LWS_CALLBACK_HTTP: /* * If you want to know the full url path used, you can get it * like this * * n = lws_hdr_copy(wsi, buf, sizeof(buf), WSI_TOKEN_GET_URI); * * The base path is the first (n - strlen((const char *)in)) * chars in buf. */ /* * In contains the url part after the place the mount was * positioned at, eg, if positioned at "/dyn" and given * "/dyn/mypath", in will contain /mypath */ lws_snprintf(pss->path, sizeof(pss->path), "%s", (const char *)in); lws_get_peer_simple(wsi, (char *)buf, sizeof(buf)); lwsl_notice("%s: HTTP: connection %s, path %s\n", __func__, (const char *)buf, pss->path); /* * Demonstrates how to retreive a urlarg x=value */ { char value[100]; int z = lws_get_urlarg_by_name_safe(wsi, "x", value, sizeof(value) - 1); if (z >= 0) lwsl_hexdump_notice(value, (size_t)z); } /* * prepare and write http headers... with regards to content- * length, there are three approaches: * * - http/1.0 or connection:close: no need, but no pipelining * - http/1.1 or connected:keep-alive * (keep-alive is default for 1.1): content-length required * - http/2: no need, LWS_WRITE_HTTP_FINAL closes the stream * * giving the api below LWS_ILLEGAL_HTTP_CONTENT_LEN instead of * a content length forces the connection response headers to * send back "connection: close", disabling keep-alive. * * If you know the final content-length, it's always OK to give * it and keep-alive can work then if otherwise possible. But * often you don't know it and avoiding having to compute it * at header-time makes life easier at the server. */ if (lws_add_http_common_headers(wsi, HTTP_STATUS_OK, "text/html", LWS_ILLEGAL_HTTP_CONTENT_LEN, /* no content len */ &p, end)) return 1; if (lws_finalize_write_http_header(wsi, start, &p, end)) return 1; pss->times = 0; pss->budget = atoi((char *)in + 1); pss->content_lines = 0; if (!pss->budget) pss->budget = 10; /* write the body separately */ lws_callback_on_writable(wsi); return 0; case LWS_CALLBACK_HTTP_WRITEABLE: if (!pss || pss->times > pss->budget) break; /* * We send a large reply in pieces of around 2KB each. * * For http/1, it's possible to send a large buffer at once, * but lws will malloc() up a temp buffer to hold any data * that the kernel didn't accept in one go. This is expensive * in memory and cpu, so it's better to stage the creation of * the data to be sent each time. * * For http/2, large data frames would block the whole * connection, not just the stream and are not allowed. Lws * will call back on writable when the stream both has transmit * credit and the round-robin fair access for sibling streams * allows it. * * For http/2, we must send the last part with * LWS_WRITE_HTTP_FINAL to close the stream representing * this transaction. */ n = LWS_WRITE_HTTP; if (pss->times == pss->budget) n = LWS_WRITE_HTTP_FINAL; if (!pss->times) { /* * the first time, we print some html title */ t = time(NULL); /* * to work with http/2, we must take care about LWS_PRE * valid behind the buffer we will send. */ p += lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), "" "" "" "
    Dynamic content for '%s' from mountpoint." "
    Time: %s

    " "", pss->path, #if defined(LWS_HAVE_CTIME_R) ctime_r(&t, date)); #else ctime(&t)); #endif } else { /* * after the first time, we create bulk content. * * Again we take care about LWS_PRE valid behind the * buffer we will send. */ while (lws_ptr_diff(end, p) > 80) p += lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), "%d.%d: this is some content... ", pss->times, pss->content_lines++); p += lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), "

    "); } pss->times++; if (lws_write(wsi, (uint8_t *)start, lws_ptr_diff_size_t(p, start), (enum lws_write_protocol)n) != lws_ptr_diff(p, start)) return 1; /* * HTTP/1.0 no keepalive: close network connection * HTTP/1.1 or HTTP1.0 + KA: wait / process next transaction * HTTP/2: stream ended, parent connection remains up */ if (n == LWS_WRITE_HTTP_FINAL) { if (lws_http_transaction_completed(wsi)) return -1; } else lws_callback_on_writable(wsi); return 0; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static const struct lws_protocols defprot = { "defprot", lws_callback_http_dummy, 0, 0, 0, NULL, 0 }, protocol = { "http", callback_dynamic_http, sizeof(struct pss), 0, 0, NULL, 0 }; static const struct lws_protocols *pprotocols[] = { &defprot, &protocol, NULL }; /* override the default mount for /dyn in the URL space */ static const struct lws_http_mount mount_dyn = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/dyn", /* mountpoint URL */ /* .origin */ NULL, /* protocol */ /* .def */ NULL, /* .protocol */ "http", /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_CALLBACK, /* dynamic */ /* .mountpoint_len */ 4, /* char count */ /* .basic_auth_login_file */ NULL, }; /* default mount serves the URL space from ./mount-origin */ static const struct lws_http_mount mount = { /* .mount_next */ &mount_dyn, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server dynamic | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; /* for testing ah queue, not useful in real world */ if (lws_cmdline_option(argc, argv, "--ah1")) info.max_http_header_pool = 1; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } /* http on 7681 */ info.port = 7681; info.pprotocols = pprotocols; info.mounts = &mount; info.vhost_name = "http"; if (!lws_create_vhost(context, &info)) { lwsl_err("Failed to create tls vhost\n"); goto bail; } /* https on 7682 */ info.port = 7682; info.error_document_404 = "/404.html"; #if defined(LWS_WITH_TLS) info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; #endif info.vhost_name = "localhost"; if (!lws_create_vhost(context, &info)) { lwsl_err("Failed to create tls vhost\n"); goto bail; } while (n >= 0 && !interrupted) n = lws_service(context, 0); bail: lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-dynamic/mount-origin/000077500000000000000000000000001476025525100320775ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-dynamic/mount-origin/404.html000066400000000000000000000002271476025525100332750ustar00rootroot00000000000000

    404

    Sorry, that file doesn't exist. favicon.ico000066400000000000000000000025761476025525100341530ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-dynamic/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-dynamic/mount-origin/index.html000066400000000000000000000010161476025525100340720ustar00rootroot00000000000000
    Hello from the minimal http server dynamic content example.

    This is a static page served from ./mount-origin/index.html.

    Stuff down /dyn in the URL space is generated dynamically
    by the callback. For example, click on /dyn/anything to see dynamic content. libwebsockets.org-logo.svg000066400000000000000000000226061476025525100371330ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-dynamic/mount-origin image/svg+xml strict-csp.svg000066400000000000000000000302361476025525100346400ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-dynamic/mount-origin libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-custom/000077500000000000000000000000001476025525100311445ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-custom/CMakeLists.txt000066400000000000000000000014751476025525100337130ustar00rootroot00000000000000project(lws-minimal-http-server-eventlib-custom C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-server-eventlib-custom) set(SRCS minimal-http-server.c) if (WIN32) else() set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() endif() libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-custom/README.md000066400000000000000000000005011476025525100324170ustar00rootroot00000000000000# lws minimal http server ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server [2018/03/04 09:30:02:7986] USER: LWS minimal http server | visit http://localhost:7681 [2018/03/04 09:30:02:7986] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 on ``` Visit http://localhost:7681 minimal-http-server.c000066400000000000000000000261351476025525100351470ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-custom/* * lws-minimal-http-server-eventlib-custom * * Written in 2010-2021 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal http server using lws, on top of a custom "event * library" that uses an existing application POLL loop. * * To keep it simple, it serves stuff from the subdirectory "./mount-origin" of * the dir it was started in. Change mount.origin to serve from elsewhere. */ #include #include #include static int interrupted; static struct lws_context *context; #define MAX_CUSTOM_POLLFDS 64 /* this represents the existing application poll loop context we want lws * to cooperate with */ typedef struct custom_poll_ctx { struct lws_pollfd pollfds[MAX_CUSTOM_POLLFDS]; int count_pollfds; } custom_poll_ctx_t; /* for this example we just have the one, but it is passed into lws as a * foreign loop pointer, and all callbacks have access to it via that, so it * is not needed to be defined at file scope. */ static custom_poll_ctx_t a_cpcx; /* * These are the custom event loop operators that just make the custom event * loop able to work by itself. These would already exist in some form in an * existing application. */ static struct lws_pollfd * custom_poll_find_fd(custom_poll_ctx_t *cpcx, lws_sockfd_type fd) { int n; for (n = 0; n < cpcx->count_pollfds; n++) if (cpcx->pollfds[n].fd == fd) return &cpcx->pollfds[n]; return NULL; } static int custom_poll_add_fd(custom_poll_ctx_t *cpcx, lws_sockfd_type fd, int events) { struct lws_pollfd *pfd; lwsl_info("%s: ADD fd %d, ev %d\n", __func__, fd, events); pfd = custom_poll_find_fd(cpcx, fd); if (pfd) { lwsl_err("%s: ADD fd %d already in ext table\n", __func__, fd); return 1; } if (cpcx->count_pollfds == LWS_ARRAY_SIZE(cpcx->pollfds)) { lwsl_err("%s: no room left\n", __func__); return 1; } pfd = &cpcx->pollfds[cpcx->count_pollfds++]; pfd->fd = fd; pfd->events = (short)events; pfd->revents = 0; return 0; } static int custom_poll_del_fd(custom_poll_ctx_t *cpcx, lws_sockfd_type fd) { struct lws_pollfd *pfd; lwsl_info("%s: DEL fd %d\n", __func__, fd); pfd = custom_poll_find_fd(cpcx, fd); if (!pfd) { lwsl_err("%s: DEL fd %d missing in ext table\n", __func__, fd); return 1; } if (cpcx->count_pollfds > 1) *pfd = cpcx->pollfds[cpcx->count_pollfds - 1]; cpcx->count_pollfds--; return 0; } static int custom_poll_change_fd(custom_poll_ctx_t *cpcx, lws_sockfd_type fd, int events_add, int events_remove) { struct lws_pollfd *pfd; lwsl_info("%s: CHG fd %d, ev_add %d, ev_rem %d\n", __func__, fd, events_add, events_remove); pfd = custom_poll_find_fd(cpcx, fd); if (!pfd) return 1; pfd->events = (short)((pfd->events & (~events_remove)) | events_add); return 0; } int custom_poll_run(custom_poll_ctx_t *cpcx) { int n; while (!interrupted) { /* * Notice that the existing loop must consult with lws about * the maximum wait timeout to use. Lws will reduce the * timeout to the earliest scheduled event time if any earlier * than the provided timeout. */ n = lws_service_adjust_timeout(context, 5000, 0); lwsl_debug("%s: entering poll wait %dms\n", __func__, n); n = poll(cpcx->pollfds, (nfds_t)cpcx->count_pollfds, n); lwsl_debug("%s: exiting poll ret %d\n", __func__, n); if (n <= 0) continue; for (n = 0; n < cpcx->count_pollfds; n++) { lws_sockfd_type fd = cpcx->pollfds[n].fd; int m; if (!cpcx->pollfds[n].revents) continue; m = lws_service_fd(context, &cpcx->pollfds[n]); /* if something closed, retry this slot since may have been * swapped with end fd */ if (m && cpcx->pollfds[n].fd != fd) n--; if (m < 0) /* lws feels something bad happened, but * the outer application may not care */ continue; if (!m) { /* check if it is an fd owned by the * application */ } } } return 0; } /* * These is the custom "event library" interface layer between lws event lib * support and the custom loop implementation above. We only need to support * a few key apis. * * We are user code, so all the internal lws objects are opaque. But there are * enough public helpers to get everything done. */ /* one of these is appended to each pt for our use */ struct pt_eventlibs_custom { custom_poll_ctx_t *io_loop; }; /* * During lws context creation, we get called with the foreign loop pointer * that was passed in the creation info struct. Stash it in our private part * of the pt, so we can reference it in the other callbacks subsequently. */ static int init_pt_custom(struct lws_context *cx, void *_loop, int tsi) { struct pt_eventlibs_custom *priv = (struct pt_eventlibs_custom *) lws_evlib_tsi_to_evlib_pt(cx, tsi); /* store the loop we are bound to in our private part of the pt */ priv->io_loop = (custom_poll_ctx_t *)_loop; return 0; } static int sock_accept_custom(struct lws *wsi) { struct pt_eventlibs_custom *priv = (struct pt_eventlibs_custom *) lws_evlib_wsi_to_evlib_pt(wsi); return custom_poll_add_fd(priv->io_loop, lws_get_socket_fd(wsi), POLLIN); } static void io_custom(struct lws *wsi, unsigned int flags) { struct pt_eventlibs_custom *priv = (struct pt_eventlibs_custom *) lws_evlib_wsi_to_evlib_pt(wsi); int e_add = 0, e_remove = 0; if (flags & LWS_EV_START) { if (flags & LWS_EV_WRITE) e_add |= POLLOUT; if (flags & LWS_EV_READ) e_add |= POLLIN; } else { if (flags & LWS_EV_WRITE) e_remove |= POLLOUT; if (flags & LWS_EV_READ) e_remove |= POLLIN; } custom_poll_change_fd(priv->io_loop, lws_get_socket_fd(wsi), e_add, e_remove); } static int wsi_logical_close_custom(struct lws *wsi) { struct pt_eventlibs_custom *priv = (struct pt_eventlibs_custom *) lws_evlib_wsi_to_evlib_pt(wsi); if (lws_get_socket_fd(wsi) == LWS_SOCK_INVALID) return 0; return custom_poll_del_fd(priv->io_loop, lws_get_socket_fd(wsi)); } static const struct lws_event_loop_ops event_loop_ops_custom = { .name = "custom", .init_pt = init_pt_custom, .init_vhost_listen_wsi = sock_accept_custom, .sock_accept = sock_accept_custom, .io = io_custom, .wsi_logical_close = wsi_logical_close_custom, .evlib_size_pt = sizeof(struct pt_eventlibs_custom) }; static const lws_plugin_evlib_t evlib_custom = { .hdr = { "custom event loop", "lws_evlib_plugin", LWS_BUILD_HASH, LWS_PLUGIN_API_MAGIC }, .ops = &event_loop_ops_custom }; /* * The rest is just the normal minimal example for lws, with a couple of extra * lines wiring up the custom event library handlers above. */ static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; /* * This demonstrates a client connection operating on the same loop * It's optional... */ static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { switch (reason) { case LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: lwsl_user("LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: resp %u\n", lws_http_client_http_response(wsi)); break; /* because we are protocols[0] ... */ case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); break; /* chunks of chunked content, with header removed */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ: lwsl_user("RECEIVE_CLIENT_HTTP_READ: read %d\n", (int)len); lwsl_hexdump_info(in, len); return 0; /* don't passthru */ /* uninterpreted http content */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP: { char buffer[1024 + LWS_PRE]; char *px = buffer + LWS_PRE; int lenx = sizeof(buffer) - LWS_PRE; if (lws_http_client_read(wsi, &px, &lenx) < 0) return -1; } return 0; /* don't passthru */ case LWS_CALLBACK_COMPLETED_CLIENT_HTTP: lwsl_user("LWS_CALLBACK_COMPLETED_CLIENT_HTTP %s\n", lws_wsi_tag(wsi)); break; case LWS_CALLBACK_CLOSED_CLIENT_HTTP: lwsl_info("%s: closed: %s\n", __func__, lws_wsi_tag(wsi)); break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static const struct lws_protocols protocols[] = { { "httptest", callback_http, 0, 0, 0, NULL, 0}, LWS_PROTOCOL_LIST_TERM }; static int do_client_conn(void) { struct lws_client_connect_info i; memset(&i, 0, sizeof i); /* otherwise uninitialized garbage */ i.context = context; i.ssl_connection = LCCSCF_USE_SSL; i.port = 443; i.address = "warmcat.com"; i.ssl_connection |= LCCSCF_H2_QUIRK_OVERFLOWS_TXCR | LCCSCF_H2_QUIRK_NGHTTP2_END_STREAM; i.path = "/"; i.host = i.address; i.origin = i.address; i.method = "GET"; i.protocol = protocols[0].name; #if defined(LWS_WITH_SYS_FAULT_INJECTION) i.fi_wsi_name = "user"; #endif if (!lws_client_connect_via_info(&i)) { lwsl_err("Client creation failed\n"); return 1; } lwsl_notice("Client creation OK\n"); return 0; } /* * End of client part * * Initialization part --> */ void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; const char *p; int logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; void *foreign_loops[1]; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); /* * init the existing custom event loop here if anything to do, don't * run it yet. In our example, no init required. */ lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.error_document_404 = "/404.html"; info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; info.event_lib_custom = &evlib_custom; /* bind lws to our custom event * lib implementation above */ foreign_loops[0] = &a_cpcx; /* pass in the custom poll object as the * foreign loop object we will bind to */ info.foreign_loops = foreign_loops; /* optional to demonstrate client connection */ info.protocols = protocols; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } /* optional to demonstrate client connection */ do_client_conn(); /* * We're going to run the custom loop now, instead of the lws loop. * We have told lws to cooperate with this loop to get stuff done. * * We only come back from this when interrupted gets set by SIGINT */ custom_poll_run(&a_cpcx); /* clean up lws part */ lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-custom/mount-origin/000077500000000000000000000000001476025525100335735ustar00rootroot00000000000000404.html000066400000000000000000000002271476025525100347120ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-custom/mount-origin

    404

    Sorry, that file doesn't exist. favicon.ico000066400000000000000000000025761476025525100356470ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-custom/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’index.html000066400000000000000000000005451476025525100355150ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-custom/mount-origin
    Hello from the minimal http server example.
    You can confirm the 404 page handler by going to this nonexistant page. libwebsockets.org-logo.svg000066400000000000000000000226061476025525100406270ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-custom/mount-origin image/svg+xml strict-csp.svg000066400000000000000000000302361476025525100363340ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-custom/mount-origin symlink.html000077700000000000000000000000001476025525100400602index.htmlustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-custom/mount-originlibwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-demos/000077500000000000000000000000001476025525100307415ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-demos/CMakeLists.txt000066400000000000000000000014371476025525100335060ustar00rootroot00000000000000project(lws-minimal-http-server-eventlib-demos C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-server-eventlib-demos) set(SRCS minimal-http-server-eventlib-demos.c) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-demos/README.md000066400000000000000000000016211476025525100322200ustar00rootroot00000000000000# lws minimal http server eventlib demos This demonstrates a slightly more complex demo that can use any of the event loops (it defaults to poll) It uses statically included plugins to provide the lws test server functions Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 --uv|Use the libuv event library (lws must have been configured with `-DLWS_WITH_LIBUV=1`) --event|Use the libevent library (lws must have been configured with `-DLWS_WITH_LIBEVENT=1`) --ev|Use the libev event library (lws must have been configured with `-DLWS_WITH_LIBEV=1`) ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server-eventlib-demos [2018/03/04 09:30:02:7986] USER: LWS minimal http server-eventlib-demos | visit http://localhost:7681 [2018/03/04 09:30:02:7986] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 on ``` Visit http://localhost:7681 localhost-100y.cert000066400000000000000000000040721476025525100342230ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-demos-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- localhost-100y.key000066400000000000000000000063101476025525100340530ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-demos-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- minimal-http-server-eventlib-demos.c000066400000000000000000000123631476025525100376550ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-demos/* * lws-minimal-http-server-eventlib * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal http[s] server that can work with any of the * supported event loop backends, or the default poll() one. * * To keep it simple, it serves stuff from the subdirectory * "./mount-origin" of the directory it was started in. * You can change that by changing mount.origin below. */ #include #include #include #define LWS_PLUGIN_STATIC #include "../../../plugins/protocol_lws_mirror.c" #include "../../../plugins/protocol_lws_status.c" #include "../../../plugins/protocol_dumb_increment.c" #include "../../../plugins/protocol_post_demo.c" static struct lws_context *context; static struct lws_protocols protocols[] = { /* first protocol must always be HTTP handler */ { "http-only", lws_callback_http_dummy, 0, 0, 0, NULL, 0 }, LWS_PLUGIN_PROTOCOL_DUMB_INCREMENT, LWS_PLUGIN_PROTOCOL_MIRROR, LWS_PLUGIN_PROTOCOL_LWS_STATUS, LWS_PLUGIN_PROTOCOL_POST_DEMO, LWS_PROTOCOL_LIST_TERM }; /* * mount handlers for sections of the URL space */ static const struct lws_http_mount mount_ziptest_uncomm = { NULL, /* linked-list pointer to next*/ "/uncommziptest", /* mountpoint in URL namespace on this vhost */ "./mount-origin/candide-uncompressed.zip", /* handler */ NULL, /* default filename if none given */ NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0, 0, LWSMPRO_FILE, /* origin points to a callback */ 14, /* strlen("/ziptest"), ie length of the mountpoint */ NULL, }, mount_ziptest = { (struct lws_http_mount *)&mount_ziptest_uncomm, /* linked-list pointer to next*/ "/ziptest", /* mountpoint in URL namespace on this vhost */ "./mount-origin/candide.zip", /* handler */ NULL, /* default filename if none given */ NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0, 0, LWSMPRO_FILE, /* origin points to a callback */ 8, /* strlen("/ziptest"), ie length of the mountpoint */ NULL, }, mount_post = { (struct lws_http_mount *)&mount_ziptest, /* linked-list pointer to next*/ "/formtest", /* mountpoint in URL namespace on this vhost */ "protocol-post-demo", /* handler */ NULL, /* default filename if none given */ NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0, 0, LWSMPRO_CALLBACK, /* origin points to a callback */ 9, /* strlen("/formtest"), ie length of the mountpoint */ NULL, }, mount = { /* .mount_next */ &mount_post, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "test.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void signal_cb(void *handle, int signum) { lwsl_err("%s: signal %d\n", __func__, signum); switch (signum) { case SIGTERM: case SIGINT: break; default: break; } lws_context_destroy(context); } void sigint_handler(int sig) { signal_cb(NULL, sig); } int main(int argc, const char **argv) { struct lws_context_creation_info info; const char *p; int logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server eventlib | visit http://localhost:7681\n"); lwsl_user(" [-s (ssl)] [--uv (libuv)] [--ev (libev)] [--event (libevent)]\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.error_document_404 = "/404.html"; info.pcontext = &context; info.protocols = protocols; info.signal_cb = signal_cb; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; if (lws_cmdline_option(argc, argv, "-s")) { info.options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; #if defined(LWS_WITH_TLS) info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; #endif } if (lws_cmdline_option(argc, argv, "--uv")) info.options |= LWS_SERVER_OPTION_LIBUV; else if (lws_cmdline_option(argc, argv, "--event")) info.options |= LWS_SERVER_OPTION_LIBEVENT; else if (lws_cmdline_option(argc, argv, "--ev")) info.options |= LWS_SERVER_OPTION_LIBEV; else if (lws_cmdline_option(argc, argv, "--glib")) info.options |= LWS_SERVER_OPTION_GLIB; else signal(SIGINT, sigint_handler); context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (!lws_service(context, 0)) ; lwsl_info("calling external context destroy\n"); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-origin/000077500000000000000000000000001476025525100333705ustar00rootroot00000000000000404.html000066400000000000000000000002271476025525100345070ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-origin

    404

    Sorry, that file doesn't exist. candide-uncompressed.zip000066400000000000000000013460441476025525100401450ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-originPK é€eAI’‰‰ candide.htmlUT &֗P&֗Pux  The Project Gutenberg eBook of Candide, by Voltaire.
    
    The Project Gutenberg EBook of Candide, by Voltaire
    
    This eBook is for the use of anyone anywhere at no cost and with
    almost no restrictions whatsoever.  You may copy it, give it away or
    re-use it under the terms of the Project Gutenberg License included
    with this eBook or online at www.gutenberg.org
    
    
    Title: Candide
    
    Author: Voltaire
    
    Commentator: Philip Littell
    
    Release Date: November 27, 2006 [EBook #19942]
    
    Language: English
    
    Character set encoding: ISO-8859-1
    
    *** START OF THIS PROJECT GUTENBERG EBOOK CANDIDE ***
    
    
    
    
    Produced by Chuck Greif, Fox in the Stars and the Online
    Distributed Proofreading Team at http://www.pgdp.net
    
    
    
    
    
    
    

    Transcriber's Note:

    Obvious typographical errors have been corrected in this text. For a complete list, please see the bottom of this document.


    THE MODERN LIBRARY

    OF THE WORLD'S BEST BOOKS

    CANDIDE BY VOLTAIRE

    The Publishers will be glad to mail complete list of titles in the Modern Library. The list is representative of the Great Moderns and is one of the most important contributions to publishing that has been made for many years. Every reader of books will find titles he needs at a low price in an attractive form.

    Voltaire.

    CANDIDE

    By VOLTAIRE

    INTRODUCTION BY PHILIP LITTELL

    BONI AND LIVERIGHT, INC.
    PUBLISHERS NEW YORK

    Copyright, 1918, by
    Boni & Liveright, Inc.
    Printed in the United States of America [Pg vii]


    INTRODUCTION

    Ever since 1759, when Voltaire wrote "Candide" in ridicule of the notion that this is the best of all possible worlds, this world has been a gayer place for readers. Voltaire wrote it in three days, and five or six generations have found that its laughter does not grow old.

    "Candide" has not aged. Yet how different the book would have looked if Voltaire had written it a hundred and fifty years later than 1759. It would have been, among other things, a book of sights and sounds. A modern writer would have tried to catch and fix in words some of those Atlantic changes which broke the Atlantic monotony of that voyage from Cadiz to Buenos Ayres. When Martin and Candide were sailing the length of the Mediterranean we should have had a contrast between naked scarped Balearic cliffs and headlands of Calabria in their mists. We should have had quarter distances, far horizons, the altering silhouettes of an Ionian island. Colored birds would have filled Paraguay with their silver or acid cries.

    Dr. Pangloss, to prove the existence of design in the universe, says [Pg viii]that noses were made to carry spectacles, and so we have spectacles. A modern satirist would not try to paint with Voltaire's quick brush the doctrine that he wanted to expose. And he would choose a more complicated doctrine than Dr. Pangloss's optimism, would study it more closely, feel his destructive way about it with a more learned and caressing malice. His attack, stealthier, more flexible and more patient than Voltaire's, would call upon us, especially when his learning got a little out of control, to be more than patient. Now and then he would bore us. "Candide" never bored anybody except William Wordsworth.

    Voltaire's men and women point his case against optimism by starting high and falling low. A modern could not go about it after this fashion. He would not plunge his people into an unfamiliar misery. He would just keep them in the misery they were born to.

    But such an account of Voltaire's procedure is as misleading as the plaster cast of a dance. Look at his procedure again. Mademoiselle Cunégonde, the illustrious Westphalian, sprung from a family that could prove seventy-one quarterings, descends and descends until we find her earning her keep by washing dishes in the Propontis. The aged faithful attendant, victim of a hundred acts of rape by negro pirates, remembers [Pg ix]that she is the daughter of a pope, and that in honor of her approaching marriage with a Prince of Massa-Carrara all Italy wrote sonnets of which not one was passable. We do not need to know French literature before Voltaire in order to feel, although the lurking parody may escape us, that he is poking fun at us and at himself. His laughter at his own methods grows more unmistakable at the last, when he caricatures them by casually assembling six fallen monarchs in an inn at Venice.

    A modern assailant of optimism would arm himself with social pity. There is no social pity in "Candide." Voltaire, whose light touch on familiar institutions opens them and reveals their absurdity, likes to remind us that the slaughter and pillage and murder which Candide witnessed among the Bulgarians was perfectly regular, having been conducted according to the laws and usages of war. Had Voltaire lived to-day he would have done to poverty what he did to war. Pitying the poor, he would have shown us poverty as a ridiculous anachronism, and both the ridicule and the pity would have expressed his indignation.

    Almost any modern, essaying a philosophic tale, would make it long. "Candide" is only a "Hamlet" and a half long. It would hardly have been shorter if Voltaire had spent three months on it, instead of those three days. A[Pg x] conciseness to be matched in English by nobody except Pope, who can say a plagiarizing enemy "steals much, spends little, and has nothing left," a conciseness which Pope toiled and sweated for, came as easy as wit to Voltaire. He can afford to be witty, parenthetically, by the way, prodigally, without saving, because he knows there is more wit where that came from.

    One of Max Beerbohm's cartoons shows us the young Twentieth Century going at top speed, and watched by two of his predecessors. Underneath is this legend: "The Grave Misgivings of the Nineteenth Century, and the Wicked Amusement of the Eighteenth, in Watching the Progress (or whatever it is) of the Twentieth." This Eighteenth Century snuff-taking and malicious, is like Voltaire, who nevertheless must know, if he happens to think of it, that not yet in the Twentieth Century, not for all its speed mania, has any one come near to equalling the speed of a prose tale by Voltaire. "Candide" is a full book. It is filled with mockery, with inventiveness, with things as concrete as things to eat and coins, it has time for the neatest intellectual clickings, it is never hurried, and it moves with the most amazing rapidity. It has the rapidity of high spirits playing a game. The dry high spirits of this destroyer of optimism make most optimists look damp and depressed.[Pg xi] Contemplation of the stupidity which deems happiness possible almost made Voltaire happy. His attack on optimism is one of the gayest books in the world. Gaiety has been scattered everywhere up and down its pages by Voltaire's lavish hand, by his thin fingers.

    Many propagandist satirical books have been written with "Candide" in mind, but not too many. To-day, especially, when new faiths are changing the structure of the world, faiths which are still plastic enough to be deformed by every disciple, each disciple for himself, and which have not yet received the final deformation known as universal acceptance, to-day "Candide" is an inspiration to every narrative satirist who hates one of these new faiths, or hates every interpretation of it but his own. Either hatred will serve as a motive to satire.

    That is why the present is one of the right moments to republish "Candide." I hope it will inspire younger men and women, the only ones who can be inspired, to have a try at Theodore, or Militarism; Jane, or Pacifism; at So-and-So, the Pragmatist or the Freudian. And I hope, too, that they will without trying hold their pens with an eighteenth century lightness, not inappropriate to a philosophic tale. In Voltaire's fingers, as Anatole France has said, the pen runs and laughs.

    Philip Littell.[Pg xii]


    CONTENTS

    [Pg xiii]

    CHAPTERPAGE
    I.How Candide was brought up in a Magnificent Castle, and how he was expelled thence1
    II.What became of Candide among the Bulgarians5
    III.How Candide made his escape from the Bulgarians, and what afterwards became of him9
    IV.How Candide found his old Master Pangloss, and what happened to them13
    V.Tempest, Shipwreck, Earthquake, and what became of Doctor Pangloss, Candide, and James the Anabaptist18
    VI.How the Portuguese made a Beautiful Auto-da-fé, to prevent any further Earthquakes: and how Candide was publicly whipped23
    VII.How the Old Woman took care of Candide, and how he found the Object he loved26
    VIII.The History of Cunegonde30
    IX.What became of Cunegonde, Candide, the Grand Inquisitor, and the Jew35[Pg xiv]
    X.In what distress Candide, Cunegonde, and the Old Woman arrived at Cadiz; and of their Embarkation38
    XI.History of the Old Woman42
    XII.The Adventures of the Old Woman continued48
    XIII.How Candide was forced away from his fair Cunegonde and the Old Woman54
    XIV.How Candide and Cacambo were received by the Jesuits of Paraguay58
    XV.How Candide killed the brother of his dear Cunegonde64
    XVI.Adventures of the Two Travellers, with Two Girls, Two Monkeys, and the Savages called Oreillons68
    XVII.Arrival of Candide and his Valet at El Dorado, and what they saw there74
    XVIII.What they saw in the Country of El Dorado80
    XIX.What happened to them at Surinam and how Candide got acquainted with Martin89
    XX.What happened at Sea to Candide and Martin98
    XXI.Candide and Martin, reasoning, draw near the Coast of France102[Pg xv]
    XXII.What happened in France to Candide and Martin105
    XXIII.Candide and Martin touched upon the Coast of England, and what they saw there122
    XXIV.Of Paquette and Friar Giroflée125
    XXV.The Visit to Lord Pococurante, a Noble Venetian133
    XXVI.Of a Supper which Candide and Martin took with Six Strangers, and who they were142
    XXVII.Candide's Voyage to Constantinople148
    XXVIII.What happened to Candide, Cunegonde, Pangloss, Martin, etc.154
    XXIX.How Candide found Cunegonde and the Old Woman again159
    XXX. The Conclusion161

    [Pg xvi]


    [Pg xvii]

    VOLTAIRE'S CANDIDE

    [Pg xviii]

    [Pg 1]

    CANDIDE

    I

    HOW CANDIDE WAS BROUGHT UP IN A MAGNIFICENT CASTLE, AND HOW HE WAS EXPELLED THENCE.

    In a castle of Westphalia, belonging to the Baron of Thunder-ten-Tronckh, lived a youth, whom nature had endowed with the most gentle manners. His countenance was a true picture of his soul. He combined a true judgment with simplicity of spirit, which was the reason, I apprehend, of his being called Candide. The old servants of the family suspected him to have been the son of the Baron's sister, by a good, honest gentleman of the neighborhood, whom that young lady would never marry because he had been able to prove only seventy-one quarterings, the rest of his genealogical tree having been lost through the injuries of time.

    The Baron was one of the most powerful lords in Westphalia, for his castle had not only a gate, but windows. His great hall, even, was[Pg 2] hung with tapestry. All the dogs of his farm-yards formed a pack of hounds at need; his grooms were his huntsmen; and the curate of the village was his grand almoner. They called him "My Lord," and laughed at all his stories.

    The Baron's lady weighed about three hundred and fifty pounds, and was therefore a person of great consideration, and she did the honours of the house with a dignity that commanded still greater respect. Her daughter Cunegonde was seventeen years of age, fresh-coloured, comely, plump, and desirable. The Baron's son seemed to be in every respect worthy of his father. The Preceptor Pangloss[1] was the oracle of the family, and little Candide heard his lessons with all the good faith of his age and character.

    Pangloss was professor of metaphysico-theologico-cosmolo-nigology. He proved admirably that there is no effect without a cause, and that, in this best of all possible worlds, the Baron's castle was the most magnificent of castles, and his lady the best of all possible Baronesses.

    "It is demonstrable," said he, "that things cannot be otherwise than as they are; for all being created for an end, all is necessarily for the best end. Observe, that the nose has been formed to bear spectacles—thus we have spectacles. Legs are visibly designed for stockings[Pg 3]—and we have stockings. Stones were made to be hewn, and to construct castles—therefore my lord has a magnificent castle; for the greatest baron in the province ought to be the best lodged. Pigs were made to be eaten—therefore we eat pork all the year round. Consequently they who assert that all is well have said a foolish thing, they should have said all is for the best."

    Candide listened attentively and believed innocently; for he thought Miss Cunegonde extremely beautiful, though he never had the courage to tell her so. He concluded that after the happiness of being born of Baron of Thunder-ten-Tronckh, the second degree of happiness was to be Miss Cunegonde, the third that of seeing her every day, and the fourth that of hearing Master Pangloss, the greatest philosopher of the whole province, and consequently of the whole world.

    One day Cunegonde, while walking near the castle, in a little wood which they called a park, saw between the bushes, Dr. Pangloss giving a lesson in experimental natural philosophy to her mother's chamber-maid, a little brown wench, very pretty and very docile. As Miss Cunegonde had a great disposition for the sciences, she breathlessly observed the repeated experiments of which she was a witness; she clearly perceived [Pg 4]the force of the Doctor's reasons, the effects, and the causes; she turned back greatly flurried, quite pensive, and filled with the desire to be learned; dreaming that she might well be a sufficient reason for young Candide, and he for her.

    She met Candide on reaching the castle and blushed; Candide blushed also; she wished him good morrow in a faltering tone, and Candide spoke to her without knowing what he said. The next day after dinner, as they went from table, Cunegonde and Candide found themselves behind a screen; Cunegonde let fall her handkerchief, Candide picked it up, she took him innocently by the hand, the youth as innocently kissed the young lady's hand with particular vivacity, sensibility, and grace; their lips met, their eyes sparkled, their knees trembled, their hands strayed. Baron Thunder-ten-Tronckh passed near the screen and beholding this cause and effect chased Candide from the castle with great kicks on the backside; Cunegonde fainted away; she was boxed on the ears by the Baroness, as soon as she came to herself; and all was consternation in this most magnificent and most agreeable of all possible castles.[Pg 5]


    II

    WHAT BECAME OF CANDIDE AMONG THE BULGARIANS.

    Candide, driven from terrestrial paradise, walked a long while without knowing where, weeping, raising his eyes to heaven, turning them often towards the most magnificent of castles which imprisoned the purest of noble young ladies. He lay down to sleep without supper, in the middle of a field between two furrows. The snow fell in large flakes. Next day Candide, all benumbed, dragged himself towards the neighbouring town which was called Waldberghofftrarbk-dikdorff, having no money, dying of hunger and fatigue, he stopped sorrowfully at the door of an inn. Two men dressed in blue observed him.

    "Comrade," said one, "here is a well-built young fellow, and of proper height."

    They went up to Candide and very civilly invited him to dinner.

    "Gentlemen," replied Candide, with a most engaging modesty, "you do me great honour, but I have not wherewithal to pay my share."[Pg 6]

    "Oh, sir," said one of the blues to him, "people of your appearance and of your merit never pay anything: are you not five feet five inches high?"

    "Yes, sir, that is my height," answered he, making a low bow.

    "Come, sir, seat yourself; not only will we pay your reckoning, but we will never suffer such a man as you to want money; men are only born to assist one another."

    "You are right," said Candide; "this is what I was always taught by Mr. Pangloss, and I see plainly that all is for the best."

    They begged of him to accept a few crowns. He took them, and wished to give them his note; they refused; they seated themselves at table.

    "Love you not deeply?"

    "Oh yes," answered he; "I deeply love Miss Cunegonde."

    "No," said one of the gentlemen, "we ask you if you do not deeply love the King of the Bulgarians?"

    "Not at all," said he; "for I have never seen him."

    "What! he is the best of kings, and we must drink his health."

    "Oh! very willingly, gentlemen," and he drank.

    "That is enough," they tell him. "Now you[Pg 7] are the help, the support, the defender, the hero of the Bulgarians. Your fortune is made, and your glory is assured."

    Instantly they fettered him, and carried him away to the regiment. There he was made to wheel about to the right, and to the left, to draw his rammer, to return his rammer, to present, to fire, to march, and they gave him thirty blows with a cudgel. The next day he did his exercise a little less badly, and he received but twenty blows. The day following they gave him only ten, and he was regarded by his comrades as a prodigy.

    Candide, all stupefied, could not yet very well realise how he was a hero. He resolved one fine day in spring to go for a walk, marching straight before him, believing that it was a privilege of the human as well as of the animal species to make use of their legs as they pleased. He had advanced two leagues when he was overtaken by four others, heroes of six feet, who bound him and carried him to a dungeon. He was asked which he would like the best, to be whipped six-and-thirty times through all the regiment, or to receive at once twelve balls of lead in his brain. He vainly said that human will is free, and that he chose neither the one nor the other. He was forced to make a choice; he determined, in virtue of that gift of God[Pg 8] called liberty, to run the gauntlet six-and-thirty times. He bore this twice. The regiment was composed of two thousand men; that composed for him four thousand strokes, which laid bare all his muscles and nerves, from the nape of his neck quite down to his rump. As they were going to proceed to a third whipping, Candide, able to bear no more, begged as a favour that they would be so good as to shoot him. He obtained this favour; they bandaged his eyes, and bade him kneel down. The King of the Bulgarians passed at this moment and ascertained the nature of the crime. As he had great talent, he understood from all that he learnt of Candide that he was a young metaphysician, extremely ignorant of the things of this world, and he accorded him his pardon with a clemency which will bring him praise in all the journals, and throughout all ages.

    An able surgeon cured Candide in three weeks by means of emollients taught by Dioscorides. He had already a little skin, and was able to march when the King of the Bulgarians gave battle to the King of the Abares.[2][Pg 9]


    III

    HOW CANDIDE MADE HIS ESCAPE FROM THE BULGARIANS, AND WHAT AFTERWARDS BECAME OF HIM.

    There was never anything so gallant, so spruce, so brilliant, and so well disposed as the two armies. Trumpets, fifes, hautboys, drums, and cannon made music such as Hell itself had never heard. The cannons first of all laid flat about six thousand men on each side; the muskets swept away from this best of worlds nine or ten thousand ruffians who infested its surface. The bayonet was also a sufficient reason for the death of several thousands. The whole might amount to thirty thousand souls. Candide, who trembled like a philosopher, hid himself as well as he could during this heroic butchery.

    At length, while the two kings were causing Te Deum to be sung each in his own camp, Candide resolved to go and reason elsewhere on effects and causes. He passed over heaps of dead and dying, and first reached a neighbouring village; it was in cinders, it was an Abare village which the Bulgarians had burnt according[Pg 10] to the laws of war. Here, old men covered with wounds, beheld their wives, hugging their children to their bloody breasts, massacred before their faces; there, their daughters, disembowelled and breathing their last after having satisfied the natural wants of Bulgarian heroes; while others, half burnt in the flames, begged to be despatched. The earth was strewed with brains, arms, and legs.

    Candide fled quickly to another village; it belonged to the Bulgarians; and the Abarian heroes had treated it in the same way. Candide, walking always over palpitating limbs or across ruins, arrived at last beyond the seat of war, with a few provisions in his knapsack, and Miss Cunegonde always in his heart. His provisions failed him when he arrived in Holland; but having heard that everybody was rich in that country, and that they were Christians, he did not doubt but he should meet with the same treatment from them as he had met with in the Baron's castle, before Miss Cunegonde's bright eyes were the cause of his expulsion thence.

    He asked alms of several grave-looking people, who all answered him, that if he continued to follow this trade they would confine him to the house of correction, where he should be taught to get a living.[Pg 11]

    The next he addressed was a man who had been haranguing a large assembly for a whole hour on the subject of charity. But the orator, looking askew, said:

    "What are you doing here? Are you for the good cause?"

    "There can be no effect without a cause," modestly answered Candide; "the whole is necessarily concatenated and arranged for the best. It was necessary for me to have been banished from the presence of Miss Cunegonde, to have afterwards run the gauntlet, and now it is necessary I should beg my bread until I learn to earn it; all this cannot be otherwise."

    "My friend," said the orator to him, "do you believe the Pope to be Anti-Christ?"

    "I have not heard it," answered Candide; "but whether he be, or whether he be not, I want bread."

    "Thou dost not deserve to eat," said the other. "Begone, rogue; begone, wretch; do not come near me again."

    The orator's wife, putting her head out of the window, and spying a man that doubted whether the Pope was Anti-Christ, poured over him a full.... Oh, heavens! to what excess does religious zeal carry the ladies.

    A man who had never been christened, a good Anabaptist, named James, beheld the cruel and[Pg 12] ignominious treatment shown to one of his brethren, an unfeathered biped with a rational soul, he took him home, cleaned him, gave him bread and beer, presented him with two florins, and even wished to teach him the manufacture of Persian stuffs which they make in Holland. Candide, almost prostrating himself before him, cried:

    "Master Pangloss has well said that all is for the best in this world, for I am infinitely more touched by your extreme generosity than with the inhumanity of that gentleman in the black coat and his lady."

    The next day, as he took a walk, he met a beggar all covered with scabs, his eyes diseased, the end of his nose eaten away, his mouth distorted, his teeth black, choking in his throat, tormented with a violent cough, and spitting out a tooth at each effort.[Pg 13]


    IV

    HOW CANDIDE FOUND HIS OLD MASTER PANGLOSS, AND WHAT HAPPENED TO THEM.

    Candide, yet more moved with compassion than with horror, gave to this shocking beggar the two florins which he had received from the honest Anabaptist James. The spectre looked at him very earnestly, dropped a few tears, and fell upon his neck. Candide recoiled in disgust.

    "Alas!" said one wretch to the other, "do you no longer know your dear Pangloss?"

    "What do I hear? You, my dear master! you in this terrible plight! What misfortune has happened to you? Why are you no longer in the most magnificent of castles? What has become of Miss Cunegonde, the pearl of girls, and nature's masterpiece?"

    "I am so weak that I cannot stand," said Pangloss.

    Upon which Candide carried him to the Anabaptist's stable, and gave him a crust of bread. As soon as Pangloss had refreshed himself a little:

    "Well," said Candide, "Cunegonde?"[Pg 14]

    "She is dead," replied the other.

    Candide fainted at this word; his friend recalled his senses with a little bad vinegar which he found by chance in the stable. Candide reopened his eyes.

    "Cunegonde is dead! Ah, best of worlds, where art thou? But of what illness did she die? Was it not for grief, upon seeing her father kick me out of his magnificent castle?"

    "No," said Pangloss, "she was ripped open by the Bulgarian soldiers, after having been violated by many; they broke the Baron's head for attempting to defend her; my lady, her mother, was cut in pieces; my poor pupil was served just in the same manner as his sister; and as for the castle, they have not left one stone upon another, not a barn, nor a sheep, nor a duck, nor a tree; but we have had our revenge, for the Abares have done the very same thing to a neighbouring barony, which belonged to a Bulgarian lord."

    At this discourse Candide fainted again; but coming to himself, and having said all that it became him to say, inquired into the cause and effect, as well as into the sufficient reason that had reduced Pangloss to so miserable a plight.

    "Alas!" said the other, "it was love; love, the comfort of the human species, the preserver of the universe, the soul of all sensible beings, love, tender love."[Pg 15]

    "Alas!" said Candide, "I know this love, that sovereign of hearts, that soul of our souls; yet it never cost me more than a kiss and twenty kicks on the backside. How could this beautiful cause produce in you an effect so abominable?"

    Pangloss made answer in these terms: "Oh, my dear Candide, you remember Paquette, that pretty wench who waited on our noble Baroness; in her arms I tasted the delights of paradise, which produced in me those hell torments with which you see me devoured; she was infected with them, she is perhaps dead of them. This present Paquette received of a learned Grey Friar, who had traced it to its source; he had had it of an old countess, who had received it from a cavalry captain, who owed it to a marchioness, who took it from a page, who had received it from a Jesuit, who when a novice had it in a direct line from one of the companions of Christopher Columbus.[3] For my part I shall give it to nobody, I am dying."

    "Oh, Pangloss!" cried Candide, "what a strange genealogy! Is not the Devil the original stock of it?"

    "Not at all," replied this great man, "it was a thing unavoidable, a necessary ingredient in the best of worlds; for if Columbus had not in an island of America caught this disease, which contaminates the source of life, frequently even[Pg 16] hinders generation, and which is evidently opposed to the great end of nature, we should have neither chocolate nor cochineal. We are also to observe that upon our continent, this distemper is like religious controversy, confined to a particular spot. The Turks, the Indians, the Persians, the Chinese, the Siamese, the Japanese, know nothing of it; but there is a sufficient reason for believing that they will know it in their turn in a few centuries. In the meantime, it has made marvellous progress among us, especially in those great armies composed of honest well-disciplined hirelings, who decide the destiny of states; for we may safely affirm that when an army of thirty thousand men fights another of an equal number, there are about twenty thousand of them p-x-d on each side."

    "Well, this is wonderful!" said Candide, "but you must get cured."

    "Alas! how can I?" said Pangloss, "I have not a farthing, my friend, and all over the globe there is no letting of blood or taking a glister, without paying, or somebody paying for you."

    These last words determined Candide; he went and flung himself at the feet of the charitable Anabaptist James, and gave him so touching a picture of the state to which his friend was reduced, that the good man did not scruple to take Dr. Pangloss into his house, and had[Pg 17] him cured at his expense. In the cure Pangloss lost only an eye and an ear. He wrote well, and knew arithmetic perfectly. The Anabaptist James made him his bookkeeper. At the end of two months, being obliged to go to Lisbon about some mercantile affairs, he took the two philosophers with him in his ship. Pangloss explained to him how everything was so constituted that it could not be better. James was not of this opinion.

    "It is more likely," said he, "mankind have a little corrupted nature, for they were not born wolves, and they have become wolves; God has given them neither cannon of four-and-twenty pounders, nor bayonets; and yet they have made cannon and bayonets to destroy one another. Into this account I might throw not only bankrupts, but Justice which seizes on the effects of bankrupts to cheat the creditors."

    "All this was indispensable," replied the one-eyed doctor, "for private misfortunes make the general good, so that the more private misfortunes there are the greater is the general good."

    While he reasoned, the sky darkened, the winds blew from the four quarters, and the ship was assailed by a most terrible tempest within sight of the port of Lisbon.[Pg 18]


    V

    TEMPEST, SHIPWRECK, EARTHQUAKE, AND WHAT BECAME OF DOCTOR PANGLOSS, CANDIDE, AND JAMES THE ANABAPTIST.

    Half dead of that inconceivable anguish which the rolling of a ship produces, one-half of the passengers were not even sensible of the danger. The other half shrieked and prayed. The sheets were rent, the masts broken, the vessel gaped. Work who would, no one heard, no one commanded. The Anabaptist being upon deck bore a hand; when a brutish sailor struck him roughly and laid him sprawling; but with the violence of the blow he himself tumbled head foremost overboard, and stuck upon a piece of the broken mast. Honest James ran to his assistance, hauled him up, and from the effort he made was precipitated into the sea in sight of the sailor, who left him to perish, without deigning to look at him. Candide drew near and saw his benefactor, who rose above the water one moment and was then swallowed up for ever. He was just going to jump after him, but was prevented by the philosopher Pangloss, who[Pg 19] demonstrated to him that the Bay of Lisbon had been made on purpose for the Anabaptist to be drowned. While he was proving this à priori, the ship foundered; all perished except Pangloss, Candide, and that brutal sailor who had drowned the good Anabaptist. The villain swam safely to the shore, while Pangloss and Candide were borne thither upon a plank.

    As soon as they recovered themselves a little they walked toward Lisbon. They had some money left, with which they hoped to save themselves from starving, after they had escaped drowning. Scarcely had they reached the city, lamenting the death of their benefactor, when they felt the earth tremble under their feet. The sea swelled and foamed in the harbour, and beat to pieces the vessels riding at anchor. Whirlwinds of fire and ashes covered the streets and public places; houses fell, roofs were flung upon the pavements, and the pavements were scattered. Thirty thousand inhabitants of all ages and sexes were crushed under the ruins.[4] The sailor, whistling and swearing, said there was booty to be gained here.

    "What can be the sufficient reason of this phenomenon?" said Pangloss.

    "This is the Last Day!" cried Candide.

    The sailor ran among the ruins, facing death to find money; finding it, he took it, got drunk,[Pg 20] and having slept himself sober, purchased the favours of the first good-natured wench whom he met on the ruins of the destroyed houses, and in the midst of the dying and the dead. Pangloss pulled him by the sleeve.

    "My friend," said he, "this is not right. You sin against the universal reason; you choose your time badly."

    "S'blood and fury!" answered the other; "I am a sailor and born at Batavia. Four times have I trampled upon the crucifix in four voyages to Japan[5]; a fig for thy universal reason."

    Some falling stones had wounded Candide. He lay stretched in the street covered with rubbish.

    "Alas!" said he to Pangloss, "get me a little wine and oil; I am dying."

    "This concussion of the earth is no new thing," answered Pangloss. "The city of Lima, in America, experienced the same convulsions last year; the same cause, the same effects; there is certainly a train of sulphur under ground from Lima to Lisbon."

    "Nothing more probable," said Candide; "but for the love of God a little oil and wine."

    "How, probable?" replied the philosopher. "I maintain that the point is capable of being demonstrated."

    Candide fainted away, and Pangloss fetched[Pg 21] him some water from a neighbouring fountain. The following day they rummaged among the ruins and found provisions, with which they repaired their exhausted strength. After this they joined with others in relieving those inhabitants who had escaped death. Some, whom they had succoured, gave them as good a dinner as they could in such disastrous circumstances; true, the repast was mournful, and the company moistened their bread with tears; but Pangloss consoled them, assuring them that things could not be otherwise.

    "For," said he, "all that is is for the best. If there is a volcano at Lisbon it cannot be elsewhere. It is impossible that things should be other than they are; for everything is right."

    A little man dressed in black, Familiar of the Inquisition, who sat by him, politely took up his word and said:

    "Apparently, then, sir, you do not believe in original sin; for if all is for the best there has then been neither Fall nor punishment."

    "I humbly ask your Excellency's pardon," answered Pangloss, still more politely; "for the Fall and curse of man necessarily entered into the system of the best of worlds."

    "Sir," said the Familiar, "you do not then believe in liberty?"

    "Your Excellency will excuse me," said Pangloss;[Pg 22] "liberty is consistent with absolute necessity, for it was necessary we should be free; for, in short, the determinate will——"

    Pangloss was in the middle of his sentence, when the Familiar beckoned to his footman, who gave him a glass of wine from Porto or Opporto.[Pg 23]


    VI

    HOW THE PORTUGUESE MADE A BEAUTIFUL AUTO-DA-FÉ, TO PREVENT ANY FURTHER EARTHQUAKES; AND HOW CANDIDE WAS PUBLICLY WHIPPED.

    After the earthquake had destroyed three-fourths of Lisbon, the sages of that country could think of no means more effectual to prevent utter ruin than to give the people a beautiful auto-da-fé[6]; for it had been decided by the University of Coimbra, that the burning of a few people alive by a slow fire, and with great ceremony, is an infallible secret to hinder the earth from quaking.

    In consequence hereof, they had seized on a Biscayner, convicted of having married his godmother, and on two Portuguese, for rejecting the bacon which larded a chicken they were eating[7]; after dinner, they came and secured Dr. Pangloss, and his disciple Candide, the one for speaking his mind, the other for having listened with an air of approbation. They were conducted to separate apartments, extremely cold, as they were never incommoded by the sun.[Pg 24] Eight days after they were dressed in san-benitos[8] and their heads ornamented with paper mitres. The mitre and san-benito belonging to Candide were painted with reversed flames and with devils that had neither tails nor claws; but Pangloss's devils had claws and tails and the flames were upright. They marched in procession thus habited and heard a very pathetic sermon, followed by fine church music. Candide was whipped in cadence while they were singing; the Biscayner, and the two men who had refused to eat bacon, were burnt; and Pangloss was hanged, though that was not the custom. The same day the earth sustained a most violent concussion.

    Candide, terrified, amazed, desperate, all bloody, all palpitating, said to himself:

    "If this is the best of possible worlds, what then are the others? Well, if I had been only whipped I could put up with it, for I experienced that among the Bulgarians; but oh, my dear Pangloss! thou greatest of philosophers, that I should have seen you hanged, without knowing for what! Oh, my dear Anabaptist, thou best of men, that thou should'st have been drowned in the very harbour! Oh, Miss Cunegonde, thou pearl of girls! that thou should'st have had thy belly ripped open!"[Pg 25]

    Thus he was musing, scarce able to stand, preached at, whipped, absolved, and blessed, when an old woman accosted him saying:

    "My son, take courage and follow me."[Pg 26]


    VII

    HOW THE OLD WOMAN TOOK CARE OF CANDIDE, AND HOW HE FOUND THE OBJECT HE LOVED.

    Candide did not take courage, but followed the old woman to a decayed house, where she gave him a pot of pomatum to anoint his sores, showed him a very neat little bed, with a suit of clothes hanging up, and left him something to eat and drink.

    "Eat, drink, sleep," said she, "and may our lady of Atocha,[9] the great St. Anthony of Padua, and the great St. James of Compostella, receive you under their protection. I shall be back to-morrow."

    Candide, amazed at all he had suffered and still more with the charity of the old woman, wished to kiss her hand.

    "It is not my hand you must kiss," said the old woman; "I shall be back to-morrow. Anoint yourself with the pomatum, eat and sleep."

    Candide, notwithstanding so many disasters, ate and slept. The next morning the old woman brought him his breakfast, looked at his back, and rubbed it herself with another ointment: in[Pg 27] like manner she brought him his dinner; and at night she returned with his supper. The day following she went through the very same ceremonies.

    "Who are you?" said Candide; "who has inspired you with so much goodness? What return can I make you?"

    The good woman made no answer; she returned in the evening, but brought no supper.

    "Come with me," she said, "and say nothing."

    She took him by the arm, and walked with him about a quarter of a mile into the country; they arrived at a lonely house, surrounded with gardens and canals. The old woman knocked at a little door, it opened, she led Candide up a private staircase into a small apartment richly furnished. She left him on a brocaded sofa, shut the door and went away. Candide thought himself in a dream; indeed, that he had been dreaming unluckily all his life, and that the present moment was the only agreeable part of it all.

    The old woman returned very soon, supporting with difficulty a trembling woman of a majestic figure, brilliant with jewels, and covered with a veil.

    "Take off that veil," said the old woman to Candide.

    The young man approaches, he raises the veil[Pg 28] with a timid hand. Oh! what a moment! what surprise! he believes he beholds Miss Cunegonde? he really sees her! it is herself! His strength fails him, he cannot utter a word, but drops at her feet. Cunegonde falls upon the sofa. The old woman supplies a smelling bottle; they come to themselves and recover their speech. As they began with broken accents, with questions and answers interchangeably interrupted with sighs, with tears, and cries. The old woman desired they would make less noise and then she left them to themselves.

    "What, is it you?" said Candide, "you live? I find you again in Portugal? then you have not been ravished? then they did not rip open your belly as Doctor Pangloss informed me?"

    "Yes, they did," said the beautiful Cunegonde; "but those two accidents are not always mortal."

    "But were your father and mother killed?"

    "It is but too true," answered Cunegonde, in tears.

    "And your brother?"

    "My brother also was killed."

    "And why are you in Portugal? and how did you know of my being here? and by what strange adventure did you contrive to bring me to this house?"

    "I will tell you all that," replied the lady, "but first of all let me know your history, since[Pg 29] the innocent kiss you gave me and the kicks which you received."

    Candide respectfully obeyed her, and though he was still in a surprise, though his voice was feeble and trembling, though his back still pained him, yet he gave her a most ingenuous account of everything that had befallen him since the moment of their separation. Cunegonde lifted up her eyes to heaven; shed tears upon hearing of the death of the good Anabaptist and of Pangloss; after which she spoke as follows to Candide, who did not lose a word and devoured her with his eyes.[Pg 30]


    VIII

    THE HISTORY OF CUNEGONDE.

    "I was in bed and fast asleep when it pleased God to send the Bulgarians to our delightful castle of Thunder-ten-Tronckh; they slew my father and brother, and cut my mother in pieces. A tall Bulgarian, six feet high, perceiving that I had fainted away at this sight, began to ravish me; this made me recover; I regained my senses, I cried, I struggled, I bit, I scratched, I wanted to tear out the tall Bulgarian's eyes—not knowing that what happened at my father's house was the usual practice of war. The brute gave me a cut in the left side with his hanger, and the mark is still upon me."

    "Ah! I hope I shall see it," said honest Candide.

    "You shall," said Cunegonde, "but let us continue."

    "Do so," replied Candide.

    Thus she resumed the thread of her story:

    "A Bulgarian captain came in, saw me all bleeding, and the soldier not in the least disconcerted. The captain flew into a passion at[Pg 31] the disrespectful behaviour of the brute, and slew him on my body. He ordered my wounds to be dressed, and took me to his quarters as a prisoner of war. I washed the few shirts that he had, I did his cooking; he thought me very pretty—he avowed it; on the other hand, I must own he had a good shape, and a soft and white skin; but he had little or no mind or philosophy, and you might see plainly that he had never been instructed by Doctor Pangloss. In three months time, having lost all his money, and being grown tired of my company, he sold me to a Jew, named Don Issachar, who traded to Holland and Portugal, and had a strong passion for women. This Jew was much attached to my person, but could not triumph over it; I resisted him better than the Bulgarian soldier. A modest woman may be ravished once, but her virtue is strengthened by it. In order to render me more tractable, he brought me to this country house. Hitherto I had imagined that nothing could equal the beauty of Thunder-ten-Tronckh Castle; but I found I was mistaken.

    "The Grand Inquisitor, seeing me one day at Mass, stared long at me, and sent to tell me that he wished to speak on private matters. I was conducted to his palace, where I acquainted him with the history of my family, and he represented to me how much it was beneath my rank[Pg 32] to belong to an Israelite. A proposal was then made to Don Issachar that he should resign me to my lord. Don Issachar, being the court banker, and a man of credit, would hear nothing of it. The Inquisitor threatened him with an auto-da-fé. At last my Jew, intimidated, concluded a bargain, by which the house and myself should belong to both in common; the Jew should have for himself Monday, Wednesday, and Saturday, and the Inquisitor should have the rest of the week. It is now six months since this agreement was made. Quarrels have not been wanting, for they could not decide whether the night from Saturday to Sunday belonged to the old law or to the new. For my part, I have so far held out against both, and I verily believe that this is the reason why I am still beloved.

    "At length, to avert the scourge of earthquakes, and to intimidate Don Issachar, my Lord Inquisitor was pleased to celebrate an auto-da-fé. He did me the honour to invite me to the ceremony. I had a very good seat, and the ladies were served with refreshments between Mass and the execution. I was in truth seized with horror at the burning of those two Jews, and of the honest Biscayner who had married his godmother; but what was my surprise, my fright, my trouble, when I saw in a san-benito and mitre a figure which resembled that[Pg 33] of Pangloss! I rubbed my eyes, I looked at him attentively, I saw him hung; I fainted. Scarcely had I recovered my senses than I saw you stripped, stark naked, and this was the height of my horror, consternation, grief, and despair. I tell you, truthfully, that your skin is yet whiter and of a more perfect colour than that of my Bulgarian captain. This spectacle redoubled all the feelings which overwhelmed and devoured me. I screamed out, and would have said, 'Stop, barbarians!' but my voice failed me, and my cries would have been useless after you had been severely whipped. How is it possible, said I, that the beloved Candide and the wise Pangloss should both be at Lisbon, the one to receive a hundred lashes, and the other to be hanged by the Grand Inquisitor, of whom I am the well-beloved? Pangloss most cruelly deceived me when he said that everything in the world is for the best.

    "Agitated, lost, sometimes beside myself, and sometimes ready to die of weakness, my mind was filled with the massacre of my father, mother, and brother, with the insolence of the ugly Bulgarian soldier, with the stab that he gave me, with my servitude under the Bulgarian captain, with my hideous Don Issachar, with my abominable Inquisitor, with the execution of Doctor Pangloss, with the grand Miserere to[Pg 34] which they whipped you, and especially with the kiss I gave you behind the screen the day that I had last seen you. I praised God for bringing you back to me after so many trials, and I charged my old woman to take care of you, and to conduct you hither as soon as possible. She has executed her commission perfectly well; I have tasted the inexpressible pleasure of seeing you again, of hearing you, of speaking with you. But you must be hungry, for myself, I am famished; let us have supper."

    They both sat down to table, and, when supper was over, they placed themselves once more on the sofa; where they were when Signor Don Issachar arrived. It was the Jewish Sabbath, and Issachar had come to enjoy his rights, and to explain his tender love.[Pg 35]


    IX

    WHAT BECAME OF CUNEGONDE, CANDIDE, THE GRAND INQUISITOR, AND THE JEW.

    This Issachar was the most choleric Hebrew that had ever been seen in Israel since the Captivity in Babylon.

    "What!" said he, "thou bitch of a Galilean, was not the Inquisitor enough for thee? Must this rascal also share with me?"

    In saying this he drew a long poniard which he always carried about him; and not imagining that his adversary had any arms he threw himself upon Candide: but our honest Westphalian had received a handsome sword from the old woman along with the suit of clothes. He drew his rapier, despite his gentleness, and laid the Israelite stone dead upon the cushions at Cunegonde's feet.

    "Holy Virgin!" cried she, "what will become of us? A man killed in my apartment! If the officers of justice come, we are lost!"

    "Had not Pangloss been hanged," said Candide, "he would give us good counsel in this[Pg 36] emergency, for he was a profound philosopher. Failing him let us consult the old woman."

    She was very prudent and commenced to give her opinion when suddenly another little door opened. It was an hour after midnight, it was the beginning of Sunday. This day belonged to my lord the Inquisitor. He entered, and saw the whipped Candide, sword in hand, a dead man upon the floor, Cunegonde aghast, and the old woman giving counsel.

    At this moment, the following is what passed in the soul of Candide, and how he reasoned:

    If this holy man call in assistance, he will surely have me burnt; and Cunegonde will perhaps be served in the same manner; he was the cause of my being cruelly whipped; he is my rival; and, as I have now begun to kill, I will kill away, for there is no time to hesitate. This reasoning was clear and instantaneous; so that without giving time to the Inquisitor to recover from his surprise, he pierced him through and through, and cast him beside the Jew.

    "Yet again!" said Cunegonde, "now there is no mercy for us, we are excommunicated, our last hour has come. How could you do it? you, naturally so gentle, to slay a Jew and a prelate in two minutes!"

    "My beautiful young lady," responded Candide,[Pg 37] "when one is a lover, jealous and whipped by the Inquisition, one stops at nothing."

    The old woman then put in her word, saying:

    "There are three Andalusian horses in the stable with bridles and saddles, let the brave Candide get them ready; madame has money, jewels; let us therefore mount quickly on horseback, though I can sit only on one buttock; let us set out for Cadiz, it is the finest weather in the world, and there is great pleasure in travelling in the cool of the night."

    Immediately Candide saddled the three horses, and Cunegonde, the old woman and he, travelled thirty miles at a stretch. While they were journeying, the Holy Brotherhood entered the house; my lord the Inquisitor was interred in a handsome church, and Issachar's body was thrown upon a dunghill.

    Candide, Cunegonde, and the old woman, had now reached the little town of Avacena in the midst of the mountains of the Sierra Morena, and were speaking as follows in a public inn.[Pg 38]


    X

    IN WHAT DISTRESS CANDIDE, CUNEGONDE, AND THE OLD WOMAN ARRIVED AT CADIZ; AND OF THEIR EMBARKATION.

    "Who was it that robbed me of my money and jewels?" said Cunegonde, all bathed in tears. "How shall we live? What shall we do? Where find Inquisitors or Jews who will give me more?"

    "Alas!" said the old woman, "I have a shrewd suspicion of a reverend Grey Friar, who stayed last night in the same inn with us at Badajos. God preserve me from judging rashly, but he came into our room twice, and he set out upon his journey long before us."

    "Alas!" said Candide, "dear Pangloss has often demonstrated to me that the goods of this world are common to all men, and that each has an equal right to them. But according to these principles the Grey Friar ought to have left us enough to carry us through our journey. Have you nothing at all left, my dear Cunegonde?"

    "Not a farthing," said she.

    "What then must we do?" said Candide.

    "Sell one of the horses," replied the old[Pg 39] woman. "I will ride behind Miss Cunegonde, though I can hold myself only on one buttock, and we shall reach Cadiz."

    In the same inn there was a Benedictine prior who bought the horse for a cheap price. Candide, Cunegonde, and the old woman, having passed through Lucena, Chillas, and Lebrixa, arrived at length at Cadiz. A fleet was there getting ready, and troops assembling to bring to reason the reverend Jesuit Fathers of Paraguay, accused of having made one of the native tribes in the neighborhood of San Sacrament revolt against the Kings of Spain and Portugal. Candide having been in the Bulgarian service, performed the military exercise before the general of this little army with so graceful an address, with so intrepid an air, and with such agility and expedition, that he was given the command of a company of foot. Now, he was a captain! He set sail with Miss Cunegonde, the old woman, two valets, and the two Andalusian horses, which had belonged to the grand Inquisitor of Portugal.

    During their voyage they reasoned a good deal on the philosophy of poor Pangloss.

    "We are going into another world," said Candide; "and surely it must be there that all is for the best. For I must confess there is reason to complain a little of what passeth in[Pg 40] our world in regard to both natural and moral philosophy."

    "I love you with all my heart," said Cunegonde; "but my soul is still full of fright at that which I have seen and experienced."

    "All will be well," replied Candide; "the sea of this new world is already better than our European sea; it is calmer, the winds more regular. It is certainly the New World which is the best of all possible worlds."

    "God grant it," said Cunegonde; "but I have been so horribly unhappy there that my heart is almost closed to hope."

    "You complain," said the old woman; "alas! you have not known such misfortunes as mine."

    Cunegonde almost broke out laughing, finding the good woman very amusing, for pretending to have been as unfortunate as she.

    "Alas!" said Cunegonde, "my good mother, unless you have been ravished by two Bulgarians, have received two deep wounds in your belly, have had two castles demolished, have had two mothers cut to pieces before your eyes, and two of your lovers whipped at an auto-da-fé, I do not conceive how you could be more unfortunate than I. Add that I was born a baroness of seventy-two quarterings—and have been a cook!"

    "Miss," replied the old woman, "you do not[Pg 41] know my birth; and were I to show you my backside, you would not talk in that manner, but would suspend your judgment."

    This speech having raised extreme curiosity in the minds of Cunegonde and Candide, the old woman spoke to them as follows.[Pg 42]


    XI

    HISTORY OF THE OLD WOMAN.

    "I had not always bleared eyes and red eyelids; neither did my nose always touch my chin; nor was I always a servant. I am the daughter of Pope Urban X,[10] and of the Princess of Palestrina. Until the age of fourteen I was brought up in a palace, to which all the castles of your German barons would scarcely have served for stables; and one of my robes was worth more than all the magnificence of Westphalia. As I grew up I improved in beauty, wit, and every graceful accomplishment, in the midst of pleasures, hopes, and respectful homage. Already I inspired love. My throat was formed, and such a throat! white, firm, and shaped like that of the Venus of Medici; and what eyes! what eyelids! what black eyebrows! such flames darted from my dark pupils that they eclipsed the scintillation of the stars—as I was told by the poets in our part of the world. My waiting women, when dressing and undressing me, used to fall into an ecstasy, whether they viewed me before[Pg 43] or behind; how glad would the gentlemen have been to perform that office for them!

    "I was affianced to the most excellent Prince of Massa Carara. Such a prince! as handsome as myself, sweet-tempered, agreeable, brilliantly witty, and sparkling with love. I loved him as one loves for the first time—with idolatry, with transport. The nuptials were prepared. There was surprising pomp and magnificence; there were fêtes, carousals, continual opera bouffe; and all Italy composed sonnets in my praise, though not one of them was passable. I was just upon the point of reaching the summit of bliss, when an old marchioness who had been mistress to the Prince, my husband, invited him to drink chocolate with her. He died in less than two hours of most terrible convulsions. But this is only a bagatelle. My mother, in despair, and scarcely less afflicted than myself, determined to absent herself for some time from so fatal a place. She had a very fine estate in the neighbourhood of Gaeta. We embarked on board a galley of the country which was gilded like the great altar of St. Peter's at Rome. A Sallee corsair swooped down and boarded us. Our men defended themselves like the Pope's soldiers; they flung themselves upon their knees, and threw down their arms, begging of the corsair an absolution in articulo mortis.[Pg 44]

    "Instantly they were stripped as bare as monkeys; my mother, our maids of honour, and myself were all served in the same manner. It is amazing with what expedition those gentry undress people. But what surprised me most was, that they thrust their fingers into the part of our bodies which the generality of women suffer no other instrument but—pipes to enter. It appeared to me a very strange kind of ceremony; but thus one judges of things when one has not seen the world. I afterwards learnt that it was to try whether we had concealed any diamonds. This is the practice established from time immemorial, among civilised nations that scour the seas. I was informed that the very religious Knights of Malta never fail to make this search when they take any Turkish prisoners of either sex. It is a law of nations from which they never deviate.

    "I need not tell you how great a hardship it was for a young princess and her mother to be made slaves and carried to Morocco. You may easily imagine all we had to suffer on board the pirate vessel. My mother was still very handsome; our maids of honour, and even our waiting women, had more charms than are to be found in all Africa. As for myself, I was ravishing, was exquisite, grace itself, and I was a virgin! I did not remain so long; this flower,[Pg 45] which had been reserved for the handsome Prince of Massa Carara, was plucked by the corsair captain. He was an abominable negro, and yet believed that he did me a great deal of honour. Certainly the Princess of Palestrina and myself must have been very strong to go through all that we experienced until our arrival at Morocco. But let us pass on; these are such common things as not to be worth mentioning.

    "Morocco swam in blood when we arrived. Fifty sons of the Emperor Muley-Ismael[11] had each their adherents; this produced fifty civil wars, of blacks against blacks, and blacks against tawnies, and tawnies against tawnies, and mulattoes against mulattoes. In short it was a continual carnage throughout the empire.

    "No sooner were we landed, than the blacks of a contrary faction to that of my captain attempted to rob him of his booty. Next to jewels and gold we were the most valuable things he had. I was witness to such a battle as you have never seen in your European climates. The northern nations have not that heat in their blood, nor that raging lust for women, so common in Africa. It seems that you Europeans have only milk in your veins; but it is vitriol, it is fire which runs in those of the inhabitants of Mount Atlas and the neighbouring countries. They fought with the fury of the lions, tigers,[Pg 46] and serpents of the country, to see who should have us. A Moor seized my mother by the right arm, while my captain's lieutenant held her by the left; a Moorish soldier had hold of her by one leg, and one of our corsairs held her by the other. Thus almost all our women were drawn in quarters by four men. My captain concealed me behind him; and with his drawn scimitar cut and slashed every one that opposed his fury. At length I saw all our Italian women, and my mother herself, torn, mangled, massacred, by the monsters who disputed over them. The slaves, my companions, those who had taken them, soldiers, sailors, blacks, whites, mulattoes, and at last my captain, all were killed, and I remained dying on a heap of dead. Such scenes as this were transacted through an extent of three hundred leagues—and yet they never missed the five prayers a day ordained by Mahomet.

    "With difficulty I disengaged myself from such a heap of slaughtered bodies, and crawled to a large orange tree on the bank of a neighbouring rivulet, where I fell, oppressed with fright, fatigue, horror, despair, and hunger. Immediately after, my senses, overpowered, gave themselves up to sleep, which was yet more swooning than repose. I was in this state of weakness and insensibility, between life and[Pg 47] death, when I felt myself pressed by something that moved upon my body. I opened my eyes, and saw a white man, of good countenance, who sighed, and who said between his teeth: 'O che sciagura d'essere senza coglioni!'"[12][Pg 48]


    XII

    THE ADVENTURES OF THE OLD WOMAN CONTINUED.

    "Astonished and delighted to hear my native language, and no less surprised at what this man said, I made answer that there were much greater misfortunes than that of which he complained. I told him in a few words of the horrors which I had endured, and fainted a second time. He carried me to a neighbouring house, put me to bed, gave me food, waited upon me, consoled me, flattered me; he told me that he had never seen any one so beautiful as I, and that he never so much regretted the loss of what it was impossible to recover.

    "'I was born at Naples,' said he, 'there they geld two or three thousand children every year; some die of the operation, others acquire a voice more beautiful than that of women, and others are raised to offices of state.[13] This operation was performed on me with great success and I was chapel musician to madam, the Princess of Palestrina.'

    "'To my mother!' cried I.

    "'Your mother!' cried he, weeping. 'What![Pg 49] can you be that young princess whom I brought up until the age of six years, and who promised so early to be as beautiful as you?'

    "'It is I, indeed; but my mother lies four hundred yards hence, torn in quarters, under a heap of dead bodies.'

    "I told him all my adventures, and he made me acquainted with his; telling me that he had been sent to the Emperor of Morocco by a Christian power, to conclude a treaty with that prince, in consequence of which he was to be furnished with military stores and ships to help to demolish the commerce of other Christian Governments.

    "'My mission is done,' said this honest eunuch; 'I go to embark for Ceuta, and will take you to Italy. Ma che sciagura d'essere senza coglioni!'

    "I thanked him with tears of commiseration; and instead of taking me to Italy he conducted me to Algiers, where he sold me to the Dey. Scarcely was I sold, than the plague which had made the tour of Africa, Asia, and Europe, broke out with great malignancy in Algiers. You have seen earthquakes; but pray, miss, have you ever had the plague?"

    "Never," answered Cunegonde.

    "If you had," said the old woman, "you would acknowledge that it is far more terrible[Pg 50] than an earthquake. It is common in Africa, and I caught it. Imagine to yourself the distressed situation of the daughter of a Pope, only fifteen years old, who, in less than three months, had felt the miseries of poverty and slavery, had been ravished almost every day, had beheld her mother drawn in quarters, had experienced famine and war, and was dying of the plague in Algiers. I did not die, however, but my eunuch, and the Dey, and almost the whole seraglio of Algiers perished.

    "As soon as the first fury of this terrible pestilence was over, a sale was made of the Dey's slaves; I was purchased by a merchant, and carried to Tunis; this man sold me to another merchant, who sold me again to another at Tripoli; from Tripoli I was sold to Alexandria, from Alexandria to Smyrna, and from Smyrna to Constantinople. At length I became the property of an Aga of the Janissaries, who was soon ordered away to the defence of Azof, then besieged by the Russians.

    "The Aga, who was a very gallant man, took his whole seraglio with him, and lodged us in a small fort on the Palus Méotides, guarded by two black eunuchs and twenty soldiers. The Turks killed prodigious numbers of the Russians, but the latter had their revenge. Azof was destroyed by fire, the inhabitants put to[Pg 51] the sword, neither sex nor age was spared; until there remained only our little fort, and the enemy wanted to starve us out. The twenty Janissaries had sworn they would never surrender. The extremities of famine to which they were reduced, obliged them to eat our two eunuchs, for fear of violating their oath. And at the end of a few days they resolved also to devour the women.

    "We had a very pious and humane Iman, who preached an excellent sermon, exhorting them not to kill us all at once.

    "'Only cut off a buttock of each of those ladies,' said he, 'and you'll fare extremely well; if you must go to it again, there will be the same entertainment a few days hence; heaven will accept of so charitable an action, and send you relief.'

    "He had great eloquence; he persuaded them; we underwent this terrible operation. The Iman applied the same balsam to us, as he does to children after circumcision; and we all nearly died.

    "Scarcely had the Janissaries finished the repast with which we had furnished them, than the Russians came in flat-bottomed boats; not a Janissary escaped. The Russians paid no attention to the condition we were in. There are French surgeons in all parts of the world; one[Pg 52] of them who was very clever took us under his care—he cured us; and as long as I live I shall remember that as soon as my wounds were healed he made proposals to me. He bid us all be of good cheer, telling us that the like had happened in many sieges, and that it was according to the laws of war.

    "As soon as my companions could walk, they were obliged to set out for Moscow. I fell to the share of a Boyard who made me his gardener, and gave me twenty lashes a day. But this nobleman having in two years' time been broke upon the wheel along with thirty more Boyards for some broils at court, I profited by that event; I fled. I traversed all Russia; I was a long time an inn-holder's servant at Riga, the same at Rostock, at Vismar, at Leipzig, at Cassel, at Utrecht, at Leyden, at the Hague, at Rotterdam. I waxed old in misery and disgrace, having only one-half of my posteriors, and always remembering I was a Pope's daughter. A hundred times I was upon the point of killing myself; but still I loved life. This ridiculous foible is perhaps one of our most fatal characteristics; for is there anything more absurd than to wish to carry continually a burden which one can always throw down? to detest existence and yet to cling to one's existence? in brief, to caress[Pg 53] the serpent which devours us, till he has eaten our very heart?

    "In the different countries which it has been my lot to traverse, and the numerous inns where I have been servant, I have taken notice of a vast number of people who held their own existence in abhorrence, and yet I never knew of more than eight who voluntarily put an end to their misery; three negroes, four Englishmen, and a German professor named Robek.[14] I ended by being servant to the Jew, Don Issachar, who placed me near your presence, my fair lady. I am determined to share your fate, and have been much more affected with your misfortunes than with my own. I would never even have spoken to you of my misfortunes, had you not piqued me a little, and if it were not customary to tell stories on board a ship in order to pass away the time. In short, Miss Cunegonde, I have had experience, I know the world; therefore I advise you to divert yourself, and prevail upon each passenger to tell his story; and if there be one of them all, that has not cursed his life many a time, that has not frequently looked upon himself as the unhappiest of mortals, I give you leave to throw me headforemost into the sea."[Pg 54]


    XIII

    HOW CANDIDE WAS FORCED AWAY FROM HIS FAIR CUNEGONDE AND THE OLD WOMAN.

    The beautiful Cunegonde having heard the old woman's history, paid her all the civilities due to a person of her rank and merit. She likewise accepted her proposal, and engaged all the passengers, one after the other, to relate their adventures; and then both she and Candide allowed that the old woman was in the right.

    "It is a great pity," said Candide, "that the sage Pangloss was hanged contrary to custom at an auto-da-fé; he would tell us most amazing things in regard to the physical and moral evils that overspread earth and sea, and I should be able, with due respect, to make a few objections."

    While each passenger was recounting his story, the ship made her way. They landed at Buenos Ayres. Cunegonde, Captain Candide, and the old woman, waited on the Governor, Don Fernando d'Ibaraa, y Figueora, y Mascarenes, y Lampourdos, y Souza. This nobleman had a stateliness becoming a person who bore so many[Pg 55] names. He spoke to men with so noble a disdain, carried his nose so loftily, raised his voice so unmercifully, assumed so imperious an air, and stalked with such intolerable pride, that those who saluted him were strongly inclined to give him a good drubbing. Cunegonde appeared to him the most beautiful he had ever met. The first thing he did was to ask whether she was not the captain's wife. The manner in which he asked the question alarmed Candide; he durst not say she was his wife, because indeed she was not; neither durst he say she was his sister, because it was not so; and although this obliging lie had been formerly much in favour among the ancients, and although it could be useful to the moderns, his soul was too pure to betray the truth.

    "Miss Cunegonde," said he, "is to do me the honour to marry me, and we beseech your excellency to deign to sanction our marriage."

    Don Fernando d'Ibaraa, y Figueora, y Mascarenes, y Lampourdos, y Souza, turning up his moustachios, smiled mockingly, and ordered Captain Candide to go and review his company. Candide obeyed, and the Governor remained alone with Miss Cunegonde. He declared his passion, protesting he would marry her the next day in the face of the church, or otherwise, just as should be agreeable to herself. Cunegonde[Pg 56] asked a quarter of an hour to consider of it, to consult the old woman, and to take her resolution.

    The old woman spoke thus to Cunegonde:

    "Miss, you have seventy-two quarterings, and not a farthing; it is now in your power to be wife to the greatest lord in South America, who has very beautiful moustachios. Is it for you to pique yourself upon inviolable fidelity? You have been ravished by Bulgarians; a Jew and an Inquisitor have enjoyed your favours. Misfortune gives sufficient excuse. I own, that if I were in your place, I should have no scruple in marrying the Governor and in making the fortune of Captain Candide."

    While the old woman spoke with all the prudence which age and experience gave, a small ship entered the port on board of which were an Alcalde and his alguazils, and this was what had happened.

    As the old woman had shrewdly guessed, it was a Grey Friar who stole Cunegonde's money and jewels in the town of Badajos, when she and Candide were escaping. The Friar wanted to sell some of the diamonds to a jeweller; the jeweller knew them to be the Grand Inquisitor's. The Friar before he was hanged confessed he had stolen them. He described the persons, and the route they had taken. The flight of Cunegonde[Pg 57] and Candide was already known. They were traced to Cadiz. A vessel was immediately sent in pursuit of them. The vessel was already in the port of Buenos Ayres. The report spread that the Alcalde was going to land, and that he was in pursuit of the murderers of my lord the Grand Inquisitor. The prudent old woman saw at once what was to be done.

    "You cannot run away," said she to Cunegonde, "and you have nothing to fear, for it was not you that killed my lord; besides the Governor who loves you will not suffer you to be ill-treated; therefore stay."

    She then ran immediately to Candide.

    "Fly," said she, "or in an hour you will be burnt."

    There was not a moment to lose; but how could he part from Cunegonde, and where could he flee for shelter?[Pg 58]


    XIV

    HOW CANDIDE AND CACAMBO WERE RECEIVED BY THE JESUITS OF PARAGUAY.

    Candide had brought such a valet with him from Cadiz, as one often meets with on the coasts of Spain and in the American colonies. He was a quarter Spaniard, born of a mongrel in Tucuman; he had been singing-boy, sacristan, sailor, monk, pedlar, soldier, and lackey. His name was Cacambo, and he loved his master, because his master was a very good man. He quickly saddled the two Andalusian horses.

    "Come, master, let us follow the old woman's advice; let us start, and run without looking behind us."

    Candide shed tears.

    "Oh! my dear Cunegonde! must I leave you just at a time when the Governor was going to sanction our nuptials? Cunegonde, brought to such a distance what will become of you?"

    "She will do as well as she can," said Cacambo; "the women are never at a loss, God provides for them, let us run."

    "Whither art thou carrying me? Where shall[Pg 59] we go? What shall we do without Cunegonde?" said Candide.

    "By St. James of Compostella," said Cacambo, "you were going to fight against the Jesuits; let us go to fight for them; I know the road well, I'll conduct you to their kingdom, where they will be charmed to have a captain that understands the Bulgarian exercise. You'll make a prodigious fortune; if we cannot find our account in one world we shall in another. It is a great pleasure to see and do new things."

    "You have before been in Paraguay, then?" said Candide.

    "Ay, sure," answered Cacambo, "I was servant in the College of the Assumption, and am acquainted with the government of the good Fathers as well as I am with the streets of Cadiz. It is an admirable government. The kingdom is upwards of three hundred leagues in diameter, and divided into thirty provinces; there the Fathers possess all, and the people nothing; it is a masterpiece of reason and justice. For my part I see nothing so divine as the Fathers who here make war upon the kings of Spain and Portugal, and in Europe confess those kings; who here kill Spaniards, and in Madrid send them to heaven; this delights me, let us push forward. You are going to be the happiest of mortals. What pleasure will it be to those[Pg 60] Fathers to hear that a captain who knows the Bulgarian exercise has come to them!"

    As soon as they reached the first barrier, Cacambo told the advanced guard that a captain wanted to speak with my lord the Commandant. Notice was given to the main guard, and immediately a Paraguayan officer ran and laid himself at the feet of the Commandant, to impart this news to him. Candide and Cacambo were disarmed, and their two Andalusian horses seized. The strangers were introduced between two files of musketeers; the Commandant was at the further end, with the three-cornered cap on his head, his gown tucked up, a sword by his side, and a spontoon[15] in his hand. He beckoned, and straightway the new-comers were encompassed by four-and-twenty soldiers. A sergeant told them they must wait, that the Commandant could not speak to them, and that the reverend Father Provincial does not suffer any Spaniard to open his mouth but in his presence, or to stay above three hours in the province.

    "And where is the reverend Father Provincial?" said Cacambo.

    "He is upon the parade just after celebrating mass," answered the sergeant, "and you cannot kiss his spurs till three hours hence."

    "However," said Cacambo, "the captain is not a Spaniard, but a German, he is ready to perish[Pg 61] with hunger as well as myself; cannot we have something for breakfast, while we wait for his reverence?"

    The sergeant went immediately to acquaint the Commandant with what he had heard.

    "God be praised!" said the reverend Commandant, "since he is a German, I may speak to him; take him to my arbour."

    Candide was at once conducted to a beautiful summer-house, ornamented with a very pretty colonnade of green and gold marble, and with trellises, enclosing parraquets, humming-birds, fly-birds, guinea-hens, and all other rare birds. An excellent breakfast was provided in vessels of gold; and while the Paraguayans were eating maize out of wooden dishes, in the open fields and exposed to the heat of the sun, the reverend Father Commandant retired to his arbour.

    He was a very handsome young man, with a full face, white skin but high in colour; he had an arched eyebrow, a lively eye, red ears, vermilion lips, a bold air, but such a boldness as neither belonged to a Spaniard nor a Jesuit. They returned their arms to Candide and Cacambo, and also the two Andalusian horses; to whom Cacambo gave some oats to eat just by the arbour, having an eye upon them all the while for fear of a surprise.[Pg 62]

    Candide first kissed the hem of the Commandant's robe, then they sat down to table.

    "You are, then, a German?" said the Jesuit to him in that language.

    "Yes, reverend Father," answered Candide.

    As they pronounced these words they looked at each other with great amazement, and with such an emotion as they could not conceal.

    "And from what part of Germany do you come?" said the Jesuit.

    "I am from the dirty province of Westphalia," answered Candide; "I was born in the Castle of Thunder-ten-Tronckh."

    "Oh! Heavens! is it possible?" cried the Commandant.

    "What a miracle!" cried Candide.

    "Is it really you?" said the Commandant.

    "It is not possible!" said Candide.

    They drew back; they embraced; they shed rivulets of tears.

    "What, is it you, reverend Father? You, the brother of the fair Cunegonde! You, that was slain by the Bulgarians! You, the Baron's son! You, a Jesuit in Paraguay! I must confess this is a strange world that we live in. Oh, Pangloss! Pangloss! how glad you would be if you had not been hanged!"

    The Commandant sent away the negro slaves and the Paraguayans, who served them with[Pg 63] liquors in goblets of rock-crystal. He thanked God and St. Ignatius a thousand times; he clasped Candide in his arms; and their faces were all bathed with tears.

    "You will be more surprised, more affected, and transported," said Candide, "when I tell you that Cunegonde, your sister, whom you believe to have been ripped open, is in perfect health."

    "Where?"

    "In your neighbourhood, with the Governor of Buenos Ayres; and I was going to fight against you."

    Every word which they uttered in this long conversation but added wonder to wonder. Their souls fluttered on their tongues, listened in their ears, and sparkled in their eyes. As they were Germans, they sat a good while at table, waiting for the reverend Father Provincial, and the Commandant spoke to his dear Candide as follows.[Pg 64]


    XV

    HOW CANDIDE KILLED THE BROTHER OF HIS DEAR CUNEGONDE.

    "I shall have ever present to my memory the dreadful day, on which I saw my father and mother killed, and my sister ravished. When the Bulgarians retired, my dear sister could not be found; but my mother, my father, and myself, with two maid-servants and three little boys all of whom had been slain, were put in a hearse, to be conveyed for interment to a chapel belonging to the Jesuits, within two leagues of our family seat. A Jesuit sprinkled us with some holy water; it was horribly salt; a few drops of it fell into my eyes; the father perceived that my eyelids stirred a little; he put his hand upon my heart and felt it beat. I received assistance, and at the end of three weeks I recovered. You know, my dear Candide, I was very pretty; but I grew much prettier, and the reverend Father Didrie,[16] Superior of that House, conceived the tenderest friendship for me; he gave me the habit of the order, some years after I was sent to Rome. The Father-General[Pg 65] needed new levies of young German-Jesuits. The sovereigns of Paraguay admit as few Spanish Jesuits as possible; they prefer those of other nations as being more subordinate to their commands. I was judged fit by the reverend Father-General to go and work in this vineyard. We set out—a Pole, a Tyrolese, and myself. Upon my arrival I was honoured with a sub-deaconship and a lieutenancy. I am to-day colonel and priest. We shall give a warm reception to the King of Spain's troops; I will answer for it that they shall be excommunicated and well beaten. Providence sends you here to assist us. But is it, indeed, true that my dear sister Cunegonde is in the neighbourhood, with the Governor of Buenos Ayres?"

    Candide assured him on oath that nothing was more true, and their tears began afresh.

    The Baron could not refrain from embracing Candide; he called him his brother, his saviour.

    "Ah! perhaps," said he, "we shall together, my dear Candide, enter the town as conquerors, and recover my sister Cunegonde."

    "That is all I want," said Candide, "for I intended to marry her, and I still hope to do so."

    "You insolent!" replied the Baron, "would you have the impudence to marry my sister who has seventy-two quarterings! I find thou hast[Pg 66] the most consummate effrontery to dare to mention so presumptuous a design!"

    Candide, petrified at this speech, made answer:

    "Reverend Father, all the quarterings in the world signify nothing; I rescued your sister from the arms of a Jew and of an Inquisitor; she has great obligations to me, she wishes to marry me; Master Pangloss always told me that all men are equal, and certainly I will marry her."

    "We shall see that, thou scoundrel!" said the Jesuit Baron de Thunder-ten-Tronckh, and that instant struck him across the face with the flat of his sword. Candide in an instant drew his rapier, and plunged it up to the hilt in the Jesuit's belly; but in pulling it out reeking hot, he burst into tears.

    "Good God!" said he, "I have killed my old master, my friend, my brother-in-law! I am the best-natured creature in the world, and yet I have already killed three men, and of these three two were priests."

    Cacambo, who stood sentry by the door of the arbour, ran to him.

    "We have nothing more for it than to sell our lives as dearly as we can," said his master to him, "without doubt some one will soon enter the arbour, and we must die sword in hand."

    Cacambo, who had been in a great many[Pg 67] scrapes in his lifetime, did not lose his head; he took the Baron's Jesuit habit, put it on Candide, gave him the square cap, and made him mount on horseback. All this was done in the twinkling of an eye.

    "Let us gallop fast, master, everybody will take you for a Jesuit, going to give directions to your men, and we shall have passed the frontiers before they will be able to overtake us."

    He flew as he spoke these words, crying out aloud in Spanish:

    "Make way, make way, for the reverend Father Colonel."[Pg 68]


    XVI

    ADVENTURES OF THE TWO TRAVELLERS, WITH TWO GIRLS, TWO MONKEYS, AND THE SAVAGES CALLED OREILLONS.

    Candide and his valet had got beyond the barrier, before it was known in the camp that the German Jesuit was dead. The wary Cacambo had taken care to fill his wallet with bread, chocolate, bacon, fruit, and a few bottles of wine. With their Andalusian horses they penetrated into an unknown country, where they perceived no beaten track. At length they came to a beautiful meadow intersected with purling rills. Here our two adventurers fed their horses. Cacambo proposed to his master to take some food, and he set him an example.

    "How can you ask me to eat ham," said Candide, "after killing the Baron's son, and being doomed never more to see the beautiful Cunegonde? What will it avail me to spin out my wretched days and drag them far from her in remorse and despair? And what will the Journal of Trevoux[17] say?"

    While he was thus lamenting his fate, he[Pg 69] went on eating. The sun went down. The two wanderers heard some little cries which seemed to be uttered by women. They did not know whether they were cries of pain or joy; but they started up precipitately with that inquietude and alarm which every little thing inspires in an unknown country. The noise was made by two naked girls, who tripped along the mead, while two monkeys were pursuing them and biting their buttocks. Candide was moved with pity; he had learned to fire a gun in the Bulgarian service, and he was so clever at it, that he could hit a filbert in a hedge without touching a leaf of the tree. He took up his double-barrelled Spanish fusil, let it off, and killed the two monkeys.

    "God be praised! My dear Cacambo, I have rescued those two poor creatures from a most perilous situation. If I have committed a sin in killing an Inquisitor and a Jesuit, I have made ample amends by saving the lives of these girls. Perhaps they are young ladies of family; and this adventure may procure us great advantages in this country."

    He was continuing, but stopped short when he saw the two girls tenderly embracing the monkeys, bathing their bodies in tears, and rending the air with the most dismal lamentations.

    "Little did I expect to see such good-nature,"[Pg 70] said he at length to Cacambo; who made answer:

    "Master, you have done a fine thing now; you have slain the sweethearts of those two young ladies."

    "The sweethearts! Is it possible? You are jesting, Cacambo, I can never believe it!"

    "Dear master," replied Cacambo; "you are surprised at everything. Why should you think it so strange that in some countries there are monkeys which insinuate themselves into the good graces of the ladies; they are a fourth part human, as I am a fourth part Spaniard."

    "Alas!" replied Candide, "I remember to have heard Master Pangloss say, that formerly such accidents used to happen; that these mixtures were productive of Centaurs, Fauns, and Satyrs; and that many of the ancients had seen such monsters, but I looked upon the whole as fabulous."

    "You ought now to be convinced," said Cacambo, "that it is the truth, and you see what use is made of those creatures, by persons that have not had a proper education; all I fear is that those ladies will play us some ugly trick."

    These sound reflections induced Candide to leave the meadow and to plunge into a wood. He supped there with Cacambo; and after cursing the Portuguese inquisitor, the Governor of Buenos Ayres, and the Baron, they fell asleep[Pg 71] on moss. On awaking they felt that they could not move; for during the night the Oreillons, who inhabited that country, and to whom the ladies had denounced them, had bound them with cords made of the bark of trees. They were encompassed by fifty naked Oreillons, armed with bows and arrows, with clubs and flint hatchets. Some were making a large cauldron boil, others were preparing spits, and all cried:

    "A Jesuit! a Jesuit! we shall be revenged, we shall have excellent cheer, let us eat the Jesuit, let us eat him up!"

    "I told you, my dear master," cried Cacambo sadly, "that those two girls would play us some ugly trick."

    Candide seeing the cauldron and the spits, cried:

    "We are certainly going to be either roasted or boiled. Ah! what would Master Pangloss say, were he to see how pure nature is formed? Everything is right, may be, but I declare it is very hard to have lost Miss Cunegonde and to be put upon a spit by Oreillons."

    Cacambo never lost his head.

    "Do not despair," said he to the disconsolate Candide, "I understand a little of the jargon of these people, I will speak to them."

    "Be sure," said Candide, "to represent to them[Pg 72] how frightfully inhuman it is to cook men, and how very un-Christian."

    "Gentlemen," said Cacambo, "you reckon you are to-day going to feast upon a Jesuit. It is all very well, nothing is more unjust than thus to treat your enemies. Indeed, the law of nature teaches us to kill our neighbour, and such is the practice all over the world. If we do not accustom ourselves to eating them, it is because we have better fare. But you have not the same resources as we; certainly it is much better to devour your enemies than to resign to the crows and rooks the fruits of your victory. But, gentlemen, surely you would not choose to eat your friends. You believe that you are going to spit a Jesuit, and he is your defender. It is the enemy of your enemies that you are going to roast. As for myself, I was born in your country; this gentleman is my master, and, far from being a Jesuit, he has just killed one, whose spoils he wears; and thence comes your mistake. To convince you of the truth of what I say, take his habit and carry it to the first barrier of the Jesuit kingdom, and inform yourselves whether my master did not kill a Jesuit officer. It will not take you long, and you can always eat us if you find that I have lied to you. But I have told you the truth. You are too well acquainted[Pg 73] with the principles of public law, humanity, and justice not to pardon us."

    The Oreillons found this speech very reasonable. They deputed two of their principal people with all expedition to inquire into the truth of the matter; these executed their commission like men of sense, and soon returned with good news. The Oreillons untied their prisoners, showed them all sorts of civilities, offered them girls, gave them refreshment, and reconducted them to the confines of their territories, proclaiming with great joy:

    "He is no Jesuit! He is no Jesuit!"

    Candide could not help being surprised at the cause of his deliverance.

    "What people!" said he; "what men! what manners! If I had not been so lucky as to run Miss Cunegonde's brother through the body, I should have been devoured without redemption. But, after all, pure nature is good, since these people, instead of feasting upon my flesh, have shown me a thousand civilities, when then I was not a Jesuit."[Pg 74]


    XVII

    ARRIVAL OF CANDIDE AND HIS VALET AT EL DORADO, AND WHAT THEY SAW THERE.

    "You see," said Cacambo to Candide, as soon as they had reached the frontiers of the Oreillons, "that this hemisphere is not better than the others, take my word for it; let us go back to Europe by the shortest way."

    "How go back?" said Candide, "and where shall we go? to my own country? The Bulgarians and the Abares are slaying all; to Portugal? there I shall be burnt; and if we abide here we are every moment in danger of being spitted. But how can I resolve to quit a part of the world where my dear Cunegonde resides?"

    "Let us turn towards Cayenne," said Cacambo, "there we shall find Frenchmen, who wander all over the world; they may assist us; God will perhaps have pity on us."

    It was not easy to get to Cayenne; they knew vaguely in which direction to go, but rivers, precipices, robbers, savages, obstructed them all the way. Their horses died of fatigue. Their provisions were consumed; they fed a whole[Pg 75] month upon wild fruits, and found themselves at last near a little river bordered with cocoa trees, which sustained their lives and their hopes.

    Cacambo, who was as good a counsellor as the old woman, said to Candide:

    "We are able to hold out no longer; we have walked enough. I see an empty canoe near the river-side; let us fill it with cocoanuts, throw ourselves into it, and go with the current; a river always leads to some inhabited spot. If we do not find pleasant things we shall at least find new things."

    "With all my heart," said Candide, "let us recommend ourselves to Providence."

    They rowed a few leagues, between banks, in some places flowery, in others barren; in some parts smooth, in others rugged. The stream ever widened, and at length lost itself under an arch of frightful rocks which reached to the sky. The two travellers had the courage to commit themselves to the current. The river, suddenly contracting at this place, whirled them along with a dreadful noise and rapidity. At the end of four-and-twenty hours they saw daylight again, but their canoe was dashed to pieces against the rocks. For a league they had to creep from rock to rock, until at length they discovered an extensive plain, bounded by inaccessible mountains. The country was cultivated[Pg 76] as much for pleasure as for necessity. On all sides the useful was also the beautiful. The roads were covered, or rather adorned, with carriages of a glittering form and substance, in which were men and women of surprising beauty, drawn by large red sheep which surpassed in fleetness the finest coursers of Andalusia, Tetuan, and Mequinez.[18]

    "Here, however, is a country," said Candide, "which is better than Westphalia."

    He stepped out with Cacambo towards the first village which he saw. Some children dressed in tattered brocades played at quoits on the outskirts. Our travellers from the other world amused themselves by looking on. The quoits were large round pieces, yellow, red, and green, which cast a singular lustre! The travellers picked a few of them off the ground; this was of gold, that of emeralds, the other of rubies—the least of them would have been the greatest ornament on the Mogul's throne.

    "Without doubt," said Cacambo, "these children must be the king's sons that are playing at quoits!"

    The village schoolmaster appeared at this moment and called them to school.

    "There," said Candide, "is the preceptor of the royal family."

    The little truants immediately quitted their[Pg 77] game, leaving the quoits on the ground with all their other playthings. Candide gathered them up, ran to the master, and presented them to him in a most humble manner, giving him to understand by signs that their royal highnesses had forgotten their gold and jewels. The schoolmaster, smiling, flung them upon the ground; then, looking at Candide with a good deal of surprise, went about his business.

    The travellers, however, took care to gather up the gold, the rubies, and the emeralds.

    "Where are we?" cried Candide. "The king's children in this country must be well brought up, since they are taught to despise gold and precious stones."

    Cacambo was as much surprised as Candide. At length they drew near the first house in the village. It was built like an European palace. A crowd of people pressed about the door, and there were still more in the house. They heard most agreeable music, and were aware of a delicious odour of cooking. Cacambo went up to the door and heard they were talking Peruvian; it was his mother tongue, for it is well known that Cacambo was born in Tucuman, in a village where no other language was spoken.

    "I will be your interpreter here," said he to Candide; "let us go in, it is a public-house."

    Immediately two waiters and two girls,[Pg 78] dressed in cloth of gold, and their hair tied up with ribbons, invited them to sit down to table with the landlord. They served four dishes of soup, each garnished with two young parrots; a boiled condor[19] which weighed two hundred pounds; two roasted monkeys, of excellent flavour; three hundred humming-birds in one dish, and six hundred fly-birds in another; exquisite ragouts; delicious pastries; the whole served up in dishes of a kind of rock-crystal. The waiters and girls poured out several liqueurs drawn from the sugar-cane.

    Most of the company were chapmen and waggoners, all extremely polite; they asked Cacambo a few questions with the greatest circumspection, and answered his in the most obliging manner.

    As soon as dinner was over, Cacambo believed as well as Candide that they might well pay their reckoning by laying down two of those large gold pieces which they had picked up. The landlord and landlady shouted with laughter and held their sides. When the fit was over:

    "Gentlemen," said the landlord, "it is plain you are strangers, and such guests we are not accustomed to see; pardon us therefore for laughing when you offered us the pebbles from our highroads in payment of your reckoning. You doubtless have not the money of the country;[Pg 79] but it is not necessary to have any money at all to dine in this house. All hostelries established for the convenience of commerce are paid by the government. You have fared but very indifferently because this is a poor village; but everywhere else, you will be received as you deserve."

    Cacambo explained this whole discourse with great astonishment to Candide, who was as greatly astonished to hear it.

    "What sort of a country then is this," said they to one another; "a country unknown to all the rest of the world, and where nature is of a kind so different from ours? It is probably the country where all is well; for there absolutely must be one such place. And, whatever Master Pangloss might say, I often found that things went very ill in Westphalia."[Pg 80]


    XVIII

    WHAT THEY SAW IN THE COUNTRY OF EL DORADO.

    Cacambo expressed his curiosity to the landlord, who made answer:

    "I am very ignorant, but not the worse on that account. However, we have in this neighbourhood an old man retired from Court who is the most learned and most communicative person in the kingdom."

    At once he took Cacambo to the old man. Candide acted now only a second character, and accompanied his valet. They entered a very plain house, for the door was only of silver, and the ceilings were only of gold, but wrought in so elegant a taste as to vie with the richest. The antechamber, indeed, was only encrusted with rubies and emeralds, but the order in which everything was arranged made amends for this great simplicity.

    The old man received the strangers on his sofa, which was stuffed with humming-birds' feathers, and ordered his servants to present them with liqueurs in diamond goblets; after[Pg 81] which he satisfied their curiosity in the following terms:

    "I am now one hundred and seventy-two years old, and I learnt of my late father, Master of the Horse to the King, the amazing revolutions of Peru, of which he had been an eyewitness. The kingdom we now inhabit is the ancient country of the Incas, who quitted it very imprudently to conquer another part of the world, and were at length destroyed by the Spaniards.

    "More wise by far were the princes of their family, who remained in their native country; and they ordained, with the consent of the whole nation, that none of the inhabitants should ever be permitted to quit this little kingdom; and this has preserved our innocence and happiness. The Spaniards have had a confused notion of this country, and have called it El Dorado; and an Englishman, whose name was Sir Walter Raleigh, came very near it about a hundred years ago; but being surrounded by inaccessible rocks and precipices, we have hitherto been sheltered from the rapaciousness of European nations, who have an inconceivable passion for the pebbles and dirt of our land, for the sake of which they would murder us to the last man."

    The conversation was long: it turned chiefly on their form of government, their manners,[Pg 82] their women, their public entertainments, and the arts. At length Candide, having always had a taste for metaphysics, made Cacambo ask whether there was any religion in that country.

    The old man reddened a little.

    "How then," said he, "can you doubt it? Do you take us for ungrateful wretches?"

    Cacambo humbly asked, "What was the religion in El Dorado?"

    The old man reddened again.

    "Can there be two religions?" said he. "We have, I believe, the religion of all the world: we worship God night and morning."

    "Do you worship but one God?" said Cacambo, who still acted as interpreter in representing Candide's doubts.

    "Surely," said the old man, "there are not two, nor three, nor four. I must confess the people from your side of the world ask very extraordinary questions."

    Candide was not yet tired of interrogating the good old man; he wanted to know in what manner they prayed to God in El Dorado.

    "We do not pray to Him," said the worthy sage; "we have nothing to ask of Him; He has given us all we need, and we return Him thanks without ceasing."

    Candide having a curiosity to see the priests[Pg 83] asked where they were. The good old man smiled.

    "My friend," said he, "we are all priests. The King and all the heads of families sing solemn canticles of thanksgiving every morning, accompanied by five or six thousand musicians."

    "What! have you no monks who teach, who dispute, who govern, who cabal, and who burn people that are not of their opinion?"

    "We must be mad, indeed, if that were the case," said the old man; "here we are all of one opinion, and we know not what you mean by monks."

    During this whole discourse Candide was in raptures, and he said to himself:

    "This is vastly different from Westphalia and the Baron's castle. Had our friend Pangloss seen El Dorado he would no longer have said that the castle of Thunder-ten-Tronckh was the finest upon earth. It is evident that one must travel."

    After this long conversation the old man ordered a coach and six sheep to be got ready, and twelve of his domestics to conduct the travellers to Court.

    "Excuse me," said he, "if my age deprives me of the honour of accompanying you. The King will receive you in a manner that cannot displease you; and no doubt you will make[Pg 84] an allowance for the customs of the country, if some things should not be to your liking."

    Candide and Cacambo got into the coach, the six sheep flew, and in less than four hours they reached the King's palace situated at the extremity of the capital. The portal was two hundred and twenty feet high, and one hundred wide; but words are wanting to express the materials of which it was built. It is plain such materials must have prodigious superiority over those pebbles and sand which we call gold and precious stones.

    Twenty beautiful damsels of the King's guard received Candide and Cacambo as they alighted from the coach, conducted them to the bath, and dressed them in robes woven of the down of humming-birds; after which the great crown officers, of both sexes, led them to the King's apartment, between two files of musicians, a thousand on each side. When they drew near to the audience chamber Cacambo asked one of the great officers in what way he should pay his obeisance to his Majesty; whether they should throw themselves upon their knees or on their stomachs; whether they should put their hands upon their heads or behind their backs; whether they should lick the dust off the floor; in a word, what was the ceremony?

    "The custom," said the great officer, "is to[Pg 85] embrace the King, and to kiss him on each cheek."

    Candide and Cacambo threw themselves round his Majesty's neck. He received them with all the goodness imaginable, and politely invited them to supper.

    While waiting they were shown the city, and saw the public edifices raised as high as the clouds, the market places ornamented with a thousand columns, the fountains of spring water, those of rose water, those of liqueurs drawn from sugar-cane, incessantly flowing into the great squares, which were paved with a kind of precious stone, which gave off a delicious fragrancy like that of cloves and cinnamon. Candide asked to see the court of justice, the parliament. They told him they had none, and that they were strangers to lawsuits. He asked if they had any prisons, and they answered no. But what surprised him most and gave him the greatest pleasure was the palace of sciences, where he saw a gallery two thousand feet long, and filled with instruments employed in mathematics and physics.

    After rambling about the city the whole afternoon, and seeing but a thousandth part of it, they were reconducted to the royal palace, where Candide sat down to table with his Majesty, his valet Cacambo, and several ladies. Never was[Pg 86] there a better entertainment, and never was more wit shown at a table than that which fell from his Majesty. Cacambo explained the King's bon-mots to Candide, and notwithstanding they were translated they still appeared to be bon-mots. Of all the things that surprised Candide this was not the least.

    They spent a month in this hospitable place. Candide frequently said to Cacambo:

    "I own, my friend, once more that the castle where I was born is nothing in comparison with this; but, after all, Miss Cunegonde is not here, and you have, without doubt, some mistress in Europe. If we abide here we shall only be upon a footing with the rest, whereas, if we return to our old world, only with twelve sheep laden with the pebbles of El Dorado, we shall be richer than all the kings in Europe. We shall have no more Inquisitors to fear, and we may easily recover Miss Cunegonde."

    This speech was agreeable to Cacambo; mankind are so fond of roving, of making a figure in their own country, and of boasting of what they have seen in their travels, that the two happy ones resolved to be no longer so, but to ask his Majesty's leave to quit the country.

    "You are foolish," said the King. "I am sensible that my kingdom is but a small place, but when a person is comfortably settled in any[Pg 87] part he should abide there. I have not the right to detain strangers. It is a tyranny which neither our manners nor our laws permit. All men are free. Go when you wish, but the going will be very difficult. It is impossible to ascend that rapid river on which you came as by a miracle, and which runs under vaulted rocks. The mountains which surround my kingdom are ten thousand feet high, and as steep as walls; they are each over ten leagues in breadth, and there is no other way to descend them than by precipices. However, since you absolutely wish to depart, I shall give orders to my engineers to construct a machine that will convey you very safely. When we have conducted you over the mountains no one can accompany you further, for my subjects have made a vow never to quit the kingdom, and they are too wise to break it. Ask me besides anything that you please."

    "We desire nothing of your Majesty," says Candide, "but a few sheep laden with provisions, pebbles, and the earth of this country."

    The King laughed.

    "I cannot conceive," said he, "what pleasure you Europeans find in our yellow clay, but take as much as you like, and great good may it do you."

    At once he gave directions that his engineers should construct a machine to hoist up these two[Pg 88] extraordinary men out of the kingdom. Three thousand good mathematicians went to work; it was ready in fifteen days, and did not cost more than twenty million sterling in the specie of that country. They placed Candide and Cacambo on the machine. There were two great red sheep saddled and bridled to ride upon as soon as they were beyond the mountains, twenty pack-sheep laden with provisions, thirty with presents of the curiosities of the country, and fifty with gold, diamonds, and precious stones. The King embraced the two wanderers very tenderly.

    Their departure, with the ingenious manner in which they and their sheep were hoisted over the mountains, was a splendid spectacle. The mathematicians took their leave after conveying them to a place of safety, and Candide had no other desire, no other aim, than to present his sheep to Miss Cunegonde.

    "Now," said he, "we are able to pay the Governor of Buenos Ayres if Miss Cunegonde can be ransomed. Let us journey towards Cayenne. Let us embark, and we will afterwards see what kingdom we shall be able to purchase."[Pg 89]


    XIX

    WHAT HAPPENED TO THEM AT SURINAM AND HOW CANDIDE GOT ACQUAINTED WITH MARTIN.

    Our travellers spent the first day very agreeably. They were delighted with possessing more treasure than all Asia, Europe, and Africa could scrape together. Candide, in his raptures, cut Cunegonde's name on the trees. The second day two of their sheep plunged into a morass, where they and their burdens were lost; two more died of fatigue a few days after; seven or eight perished with hunger in a desert; and others subsequently fell down precipices. At length, after travelling a hundred days, only two sheep remained. Said Candide to Cacambo:

    "My friend, you see how perishable are the riches of this world; there is nothing solid but virtue, and the happiness of seeing Cunegonde once more."

    "I grant all you say," said Cacambo, "but we have still two sheep remaining, with more treasure than the King of Spain will ever have; and I see a town which I take to be Surinam, belonging[Pg 90] to the Dutch. We are at the end of all our troubles, and at the beginning of happiness."

    As they drew near the town, they saw a negro stretched upon the ground, with only one moiety of his clothes, that is, of his blue linen drawers; the poor man had lost his left leg and his right hand.

    "Good God!" said Candide in Dutch, "what art thou doing there, friend, in that shocking condition?"

    "I am waiting for my master, Mynheer Vanderdendur, the famous merchant," answered the negro.

    "Was it Mynheer Vanderdendur," said Candide, "that treated thee thus?"

    "Yes, sir," said the negro, "it is the custom. They give us a pair of linen drawers for our whole garment twice a year. When we work at the sugar-canes, and the mill snatches hold of a finger, they cut off the hand; and when we attempt to run away, they cut off the leg; both cases have happened to me. This is the price at which you eat sugar in Europe. Yet when my mother sold me for ten patagons[20] on the coast of Guinea, she said to me: 'My dear child, bless our fetiches, adore them for ever; they will make thee live happily; thou hast the honour of being[Pg 91] the slave of our lords, the whites, which is making the fortune of thy father and mother.' Alas! I know not whether I have made their fortunes; this I know, that they have not made mine. Dogs, monkeys, and parrots are a thousand times less wretched than I. The Dutch fetiches, who have converted me, declare every Sunday that we are all of us children of Adam—blacks as well as whites. I am not a genealogist, but if these preachers tell truth, we are all second cousins. Now, you must agree, that it is impossible to treat one's relations in a more barbarous manner."

    "Oh, Pangloss!" cried Candide, "thou hadst not guessed at this abomination; it is the end. I must at last renounce thy optimism."

    "What is this optimism?" said Cacambo.

    "Alas!" said Candide, "it is the madness of maintaining that everything is right when it is wrong."

    Looking at the negro, he shed tears, and weeping, he entered Surinam.

    The first thing they inquired after was whether there was a vessel in the harbour which could be sent to Buenos Ayres. The person to whom they applied was a Spanish sea-captain, who offered to agree with them upon reasonable terms. He appointed to meet them at a public-house, whither Candide and the faithful Cacambo[Pg 92] went with their two sheep, and awaited his coming.

    Candide, who had his heart upon his lips, told the Spaniard all his adventures, and avowed that he intended to elope with Miss Cunegonde.

    "Then I will take good care not to carry you to Buenos Ayres," said the seaman. "I should be hanged, and so would you. The fair Cunegonde is my lord's favourite mistress."

    This was a thunderclap for Candide: he wept for a long while. At last he drew Cacambo aside.

    "Here, my dear friend," said he to him, "this thou must do. We have, each of us in his pocket, five or six millions in diamonds; you are more clever than I; you must go and bring Miss Cunegonde from Buenos Ayres. If the Governor makes any difficulty, give him a million; if he will not relinquish her, give him two; as you have not killed an Inquisitor, they will have no suspicion of you; I'll get another ship, and go and wait for you at Venice; that's a free country, where there is no danger either from Bulgarians, Abares, Jews, or Inquisitors."

    Cacambo applauded this wise resolution. He despaired at parting from so good a master, who had become his intimate friend; but the pleasure of serving him prevailed over the pain of leaving him. They embraced with tears;[Pg 93] Candide charged him not to forget the good old woman. Cacambo set out that very same day. This Cacambo was a very honest fellow.

    Candide stayed some time longer in Surinam, waiting for another captain to carry him and the two remaining sheep to Italy. After he had hired domestics, and purchased everything necessary for a long voyage, Mynheer Vanderdendur, captain of a large vessel, came and offered his services.

    "How much will you charge," said he to this man, "to carry me straight to Venice—me, my servants, my baggage, and these two sheep?"

    The skipper asked ten thousand piastres. Candide did not hesitate.

    "Oh! oh!" said the prudent Vanderdendur to himself, "this stranger gives ten thousand piastres unhesitatingly! He must be very rich."

    Returning a little while after, he let him know that upon second consideration, he could not undertake the voyage for less than twenty thousand piastres.

    "Well, you shall have them," said Candide.

    "Ay!" said the skipper to himself, "this man agrees to pay twenty thousand piastres with as much ease as ten."

    He went back to him again, and declared that he could not carry him to Venice for less than thirty thousand piastres.[Pg 94]

    "Then you shall have thirty thousand," replied Candide.

    "Oh! oh!" said the Dutch skipper once more to himself, "thirty thousand piastres are a trifle to this man; surely these sheep must be laden with an immense treasure; let us say no more about it. First of all, let him pay down the thirty thousand piastres; then we shall see."

    Candide sold two small diamonds, the least of which was worth more than what the skipper asked for his freight. He paid him in advance. The two sheep were put on board. Candide followed in a little boat to join the vessel in the roads. The skipper seized his opportunity, set sail, and put out to sea, the wind favouring him. Candide, dismayed and stupefied, soon lost sight of the vessel.

    "Alas!" said he, "this is a trick worthy of the old world!"

    He put back, overwhelmed with sorrow, for indeed he had lost sufficient to make the fortune of twenty monarchs. He waited upon the Dutch magistrate, and in his distress he knocked over loudly at the door. He entered and told his adventure, raising his voice with unnecessary vehemence. The magistrate began by fining him ten thousand piastres for making a noise; then he listened patiently, promised to examine into his affair at the skipper's return, and ordered[Pg 95] him to pay ten thousand piastres for the expense of the hearing.

    This drove Candide to despair; he had, indeed, endured misfortunes a thousand times worse; the coolness of the magistrate and of the skipper who had robbed him, roused his choler and flung him into a deep melancholy. The villainy of mankind presented itself before his imagination in all its deformity, and his mind was filled with gloomy ideas. At length hearing that a French vessel was ready to set sail for Bordeaux, as he had no sheep laden with diamonds to take along with him he hired a cabin at the usual price. He made it known in the town that he would pay the passage and board and give two thousand piastres to any honest man who would make the voyage with him, upon condition that this man was the most dissatisfied with his state, and the most unfortunate in the whole province.

    Such a crowd of candidates presented themselves that a fleet of ships could hardly have held them. Candide being desirous of selecting from among the best, marked out about one-twentieth of them who seemed to be sociable men, and who all pretended to merit his preference. He assembled them at his inn, and gave them a supper on condition that each took an oath to relate his history faithfully, promising to choose him who appeared to be most justly[Pg 96] discontented with his state, and to bestow some presents upon the rest.

    They sat until four o'clock in the morning. Candide, in listening to all their adventures, was reminded of what the old woman had said to him in their voyage to Buenos Ayres, and of her wager that there was not a person on board the ship but had met with very great misfortunes. He dreamed of Pangloss at every adventure told to him.

    "This Pangloss," said he, "would be puzzled to demonstrate his system. I wish that he were here. Certainly, if all things are good, it is in El Dorado and not in the rest of the world."

    At length he made choice of a poor man of letters, who had worked ten years for the booksellers of Amsterdam. He judged that there was not in the whole world a trade which could disgust one more.

    This philosopher was an honest man; but he had been robbed by his wife, beaten by his son, and abandoned by his daughter who got a Portuguese to run away with her. He had just been deprived of a small employment, on which he subsisted; and he was persecuted by the preachers of Surinam, who took him for a Socinian. We must allow that the others were at least as wretched as he; but Candide hoped that the philosopher would entertain him during[Pg 97] the voyage. All the other candidates complained that Candide had done them great injustice; but he appeased them by giving one hundred piastres to each.[Pg 98]


    XX

    WHAT HAPPENED AT SEA TO CANDIDE AND MARTIN.

    The old philosopher, whose name was Martin, embarked then with Candide for Bordeaux. They had both seen and suffered a great deal; and if the vessel had sailed from Surinam to Japan, by the Cape of Good Hope, the subject of moral and natural evil would have enabled them to entertain one another during the whole voyage.

    Candide, however, had one great advantage over Martin, in that he always hoped to see Miss Cunegonde; whereas Martin had nothing at all to hope. Besides, Candide was possessed of money and jewels, and though he had lost one hundred large red sheep, laden with the greatest treasure upon earth; though the knavery of the Dutch skipper still sat heavy upon his mind; yet when he reflected upon what he had still left, and when he mentioned the name of Cunegonde, especially towards the latter end of a repast, he inclined to Pangloss's doctrine.

    "But you, Mr. Martin," said he to the philosopher,[Pg 99] "what do you think of all this? what are your ideas on moral and natural evil?"

    "Sir," answered Martin, "our priests accused me of being a Socinian, but the real fact is I am a Manichean."[21]

    "You jest," said Candide; "there are no longer Manicheans in the world."

    "I am one," said Martin. "I cannot help it; I know not how to think otherwise."

    "Surely you must be possessed by the devil," said Candide.

    "He is so deeply concerned in the affairs of this world," answered Martin, "that he may very well be in me, as well as in everybody else; but I own to you that when I cast an eye on this globe, or rather on this little ball, I cannot help thinking that God has abandoned it to some malignant being. I except, always, El Dorado. I scarcely ever knew a city that did not desire the destruction of a neighbouring city, nor a family that did not wish to exterminate some other family. Everywhere the weak execrate the powerful, before whom they cringe; and the powerful beat them like sheep whose wool and flesh they sell. A million regimented assassins, from one extremity of Europe to the other, get their bread by disciplined depredation and murder, for want of more honest employment. Even in those cities which seem to enjoy peace, and[Pg 100] where the arts flourish, the inhabitants are devoured by more envy, care, and uneasiness than are experienced by a besieged town. Secret griefs are more cruel than public calamities. In a word I have seen so much, and experienced so much that I am a Manichean."

    "There are, however, some things good," said Candide.

    "That may be," said Martin; "but I know them not."

    In the middle of this dispute they heard the report of cannon; it redoubled every instant. Each took out his glass. They saw two ships in close fight about three miles off. The wind brought both so near to the French vessel that our travellers had the pleasure of seeing the fight at their ease. At length one let off a broadside, so low and so truly aimed, that the other sank to the bottom. Candide and Martin could plainly perceive a hundred men on the deck of the sinking vessel; they raised their hands to heaven and uttered terrible outcries, and the next moment were swallowed up by the sea.

    "Well," said Martin, "this is how men treat one another."

    "It is true," said Candide; "there is something diabolical in this affair."

    While speaking, he saw he knew not what, of a shining red, swimming close to the vessel.[Pg 101] They put out the long-boat to see what it could be: it was one of his sheep! Candide was more rejoiced at the recovery of this one sheep than he had been grieved at the loss of the hundred laden with the large diamonds of El Dorado.

    The French captain soon saw that the captain of the victorious vessel was a Spaniard, and that the other was a Dutch pirate, and the very same one who had robbed Candide. The immense plunder which this villain had amassed, was buried with him in the sea, and out of the whole only one sheep was saved.

    "You see," said Candide to Martin, "that crime is sometimes punished. This rogue of a Dutch skipper has met with the fate he deserved."

    "Yes," said Martin; "but why should the passengers be doomed also to destruction? God has punished the knave, and the devil has drowned the rest."

    The French and Spanish ships continued their course, and Candide continued his conversation with Martin. They disputed fifteen successive days, and on the last of those fifteen days, they were as far advanced as on the first. But, however, they chatted, they communicated ideas, they consoled each other. Candide caressed his sheep.

    "Since I have found thee again," said he, "I may likewise chance to find my Cunegonde."[Pg 102]


    XXI

    CANDIDE AND MARTIN, REASONING, DRAW NEAR THE COAST OF FRANCE.

    At length they descried the coast of France.

    "Were you ever in France, Mr. Martin?" said Candide.

    "Yes," said Martin, "I have been in several provinces. In some one-half of the people are fools, in others they are too cunning; in some they are weak and simple, in others they affect to be witty; in all, the principal occupation is love, the next is slander, and the third is talking nonsense."

    "But, Mr. Martin, have you seen Paris?"

    "Yes, I have. All these kinds are found there. It is a chaos—a confused multitude, where everybody seeks pleasure and scarcely any one finds it, at least as it appeared to me. I made a short stay there. On my arrival I was robbed of all I had by pickpockets at the fair of St. Germain. I myself was taken for a robber and was imprisoned for eight days, after which I served as corrector of the press to gain the money necessary for my return to Holland on foot. I[Pg 103] knew the whole scribbling rabble, the party rabble, the fanatic rabble. It is said that there are very polite people in that city, and I wish to believe it."

    "For my part, I have no curiosity to see France," said Candide. "You may easily imagine that after spending a month at El Dorado I can desire to behold nothing upon earth but Miss Cunegonde. I go to await her at Venice. We shall pass through France on our way to Italy. Will you bear me company?"

    "With all my heart," said Martin. "It is said that Venice is fit only for its own nobility, but that strangers meet with a very good reception if they have a good deal of money. I have none of it; you have, therefore I will follow you all over the world."

    "But do you believe," said Candide, "that the earth was originally a sea, as we find it asserted in that large book belonging to the captain?"

    "I do not believe a word of it," said Martin, "any more than I do of the many ravings which have been published lately."

    "But for what end, then, has this world been formed?" said Candide.

    "To plague us to death," answered Martin.

    "Are you not greatly surprised," continued Candide, "at the love which these two girls of[Pg 104] the Oreillons had for those monkeys, of which I have already told you?"

    "Not at all," said Martin. "I do not see that that passion was strange. I have seen so many extraordinary things that I have ceased to be surprised."

    "Do you believe," said Candide, "that men have always massacred each other as they do to-day, that they have always been liars, cheats, traitors, ingrates, brigands, idiots, thieves, scoundrels, gluttons, drunkards, misers, envious, ambitious, bloody-minded, calumniators, debauchees, fanatics, hypocrites, and fools?"

    "Do you believe," said Martin, "that hawks have always eaten pigeons when they have found them?"

    "Yes, without doubt," said Candide.

    "Well, then," said Martin, "if hawks have always had the same character why should you imagine that men may have changed theirs?"

    "Oh!" said Candide, "there is a vast deal of difference, for free will——"

    And reasoning thus they arrived at Bordeaux.[Pg 105]


    XXII

    WHAT HAPPENED IN FRANCE TO CANDIDE AND MARTIN.

    Candide stayed in Bordeaux no longer than was necessary for the selling of a few of the pebbles of El Dorado, and for hiring a good chaise to hold two passengers; for he could not travel without his Philosopher Martin. He was only vexed at parting with his sheep, which he left to the Bordeaux Academy of Sciences, who set as a subject for that year's prize, "to find why this sheep's wool was red;" and the prize was awarded to a learned man of the North, who demonstrated by A plus B minus C divided by Z, that the sheep must be red, and die of the rot.

    Meanwhile, all the travellers whom Candide met in the inns along his route, said to him, "We go to Paris." This general eagerness at length gave him, too, a desire to see this capital; and it was not so very great a détour from the road to Venice.

    He entered Paris by the suburb of St. Marceau,[Pg 106] and fancied that he was in the dirtiest village of Westphalia.

    Scarcely was Candide arrived at his inn, than he found himself attacked by a slight illness, caused by fatigue. As he had a very large diamond on his finger, and the people of the inn had taken notice of a prodigiously heavy box among his baggage, there were two physicians to attend him, though he had never sent for them, and two devotees who warmed his broths.

    "I remember," Martin said, "also to have been sick at Paris in my first voyage; I was very poor, thus I had neither friends, devotees, nor doctors, and I recovered."

    However, what with physic and bleeding, Candide's illness became serious. A parson of the neighborhood came with great meekness to ask for a bill for the other world payable to the bearer. Candide would do nothing for him; but the devotees assured him it was the new fashion. He answered that he was not a man of fashion. Martin wished to throw the priest out of the window. The priest swore that they would not bury Candide. Martin swore that he would bury the priest if he continued to be troublesome. The quarrel grew heated. Martin took him by the shoulders and roughly turned him out of doors; which occasioned great scandal and a law-suit.[Pg 107]

    Candide got well again, and during his convalescence he had very good company to sup with him. They played high. Candide wondered why it was that the ace never came to him; but Martin was not at all astonished.

    Among those who did him the honours of the town was a little Abbé of Perigord, one of those busybodies who are ever alert, officious, forward, fawning, and complaisant; who watch for strangers in their passage through the capital, tell them the scandalous history of the town, and offer them pleasure at all prices. He first took Candide and Martin to La Comédie, where they played a new tragedy. Candide happened to be seated near some of the fashionable wits. This did not prevent his shedding tears at the well-acted scenes. One of these critics at his side said to him between the acts:

    "Your tears are misplaced; that is a shocking actress; the actor who plays with her is yet worse; and the play is still worse than the actors. The author does not know a word of Arabic, yet the scene is in Arabia; moreover he is a man that does not believe in innate ideas; and I will bring you, to-morrow, twenty pamphlets written against him."[22]

    "How many dramas have you in France, sir?" said Candide to the Abbé.

    "Five or six thousand."[Pg 108]

    "What a number!" said Candide. "How many good?"

    "Fifteen or sixteen," replied the other.

    "What a number!" said Martin.

    Candide was very pleased with an actress who played Queen Elizabeth in a somewhat insipid tragedy[23] sometimes acted.

    "That actress," said he to Martin, "pleases me much; she has a likeness to Miss Cunegonde; I should be very glad to wait upon her."

    The Perigordian Abbé offered to introduce him. Candide, brought up in Germany, asked what was the etiquette, and how they treated queens of England in France.

    "It is necessary to make distinctions," said the Abbé. "In the provinces one takes them to the inn; in Paris, one respects them when they are beautiful, and throws them on the highway when they are dead."[24]

    "Queens on the highway!" said Candide.

    "Yes, truly," said Martin, "the Abbé is right. I was in Paris when Miss Monime passed, as the saying is, from this life to the other. She was refused what people call the honours of sepulture—that is to say, of rotting with all the beggars of the neighbourhood in an ugly cemetery; she was interred all alone by her company at the corner of the Rue de Bourgogne, which[Pg 109] ought to trouble her much, for she thought nobly."

    "That was very uncivil," said Candide.

    "What would you have?" said Martin; "these people are made thus. Imagine all contradictions, all possible incompatibilities—you will find them in the government, in the law-courts, in the churches, in the public shows of this droll nation."

    "Is it true that they always laugh in Paris?" said Candide.

    "Yes," said the Abbé, "but it means nothing, for they complain of everything with great fits of laughter; they even do the most detestable things while laughing."

    "Who," said Candide, "is that great pig who spoke so ill of the piece at which I wept, and of the actors who gave me so much pleasure?"

    "He is a bad character," answered the Abbé, "who gains his livelihood by saying evil of all plays and of all books. He hates whatever succeeds, as the eunuchs hate those who enjoy; he is one of the serpents of literature who nourish themselves on dirt and spite; he is a folliculaire."

    "What is a folliculaire?" said Candide.

    "It is," said the Abbé, "a pamphleteer—a Fréron."[25]

    Thus Candide, Martin, and the Perigordian[Pg 110] conversed on the staircase, while watching every one go out after the performance.

    "Although I am eager to see Cunegonde again," said Candide, "I should like to sup with Miss Clairon, for she appears to me admirable."

    The Abbé was not the man to approach Miss Clairon, who saw only good company.

    "She is engaged for this evening," he said, "but I shall have the honour to take you to the house of a lady of quality, and there you will know Paris as if you had lived in it for years."

    Candide, who was naturally curious, let himself be taken to this lady's house, at the end of the Faubourg St. Honoré. The company was occupied in playing faro; a dozen melancholy punters held each in his hand a little pack of cards; a bad record of his misfortunes. Profound silence reigned; pallor was on the faces of the punters, anxiety on that of the banker, and the hostess, sitting near the unpitying banker, noticed with lynx-eyes all the doubled and other increased stakes, as each player dog's-eared his cards; she made them turn down the edges again with severe, but polite attention; she showed no vexation for fear of losing her customers. The lady insisted upon being called the Marchioness of Parolignac. Her daughter, aged fifteen, was among the punters, and notified with a covert glance the[Pg 111] cheatings of the poor people who tried to repair the cruelties of fate. The Perigordian Abbé, Candide and Martin entered; no one rose, no one saluted them, no one looked at them; all were profoundly occupied with their cards.

    "The Baroness of Thunder-ten-Tronckh was more polite," said Candide.

    However, the Abbé whispered to the Marchioness, who half rose, honoured Candide with a gracious smile, and Martin with a condescending nod; she gave a seat and a pack of cards to Candide, who lost fifty thousand francs in two deals, after which they supped very gaily, and every one was astonished that Candide was not moved by his loss; the servants said among themselves, in the language of servants:—

    "Some English lord is here this evening."

    The supper passed at first like most Parisian suppers, in silence, followed by a noise of words which could not be distinguished, then with pleasantries of which most were insipid, with false news, with bad reasoning, a little politics, and much evil speaking; they also discussed new books.

    "Have you seen," said the Perigordian Abbé, "the romance of Sieur Gauchat, doctor of divinity?"[26]

    "Yes," answered one of the guests, "but I have not been able to finish it. We have a crowd[Pg 112] of silly writings, but all together do not approach the impertinence of 'Gauchat, Doctor of Divinity.' I am so satiated with the great number of detestable books with which we are inundated that I am reduced to punting at faro."

    "And the Mélanges of Archdeacon Trublet,[27] what do you say of that?" said the Abbé.

    "Ah!" said the Marchioness of Parolignac, "the wearisome mortal! How curiously he repeats to you all that the world knows! How heavily he discusses that which is not worth the trouble of lightly remarking upon! How, without wit, he appropriates the wit of others! How he spoils what he steals! How he disgusts me! But he will disgust me no longer—it is enough to have read a few of the Archdeacon's pages."

    There was at table a wise man of taste, who supported the Marchioness. They spoke afterwards of tragedies; the lady asked why there were tragedies which were sometimes played and which could not be read. The man of taste explained very well how a piece could have some interest, and have almost no merit; he proved in few words that it was not enough to introduce one or two of those situations which one finds in all romances, and which always seduce the spectator, but that it was necessary to be new without being odd, often sublime and always[Pg 113] natural, to know the human heart and to make it speak; to be a great poet without allowing any person in the piece to appear to be a poet; to know language perfectly—to speak it with purity, with continuous harmony and without rhythm ever taking anything from sense.

    "Whoever," added he, "does not observe all these rules can produce one or two tragedies, applauded at a theatre, but he will never be counted in the ranks of good writers. There are very few good tragedies; some are idylls in dialogue, well written and well rhymed, others political reasonings which lull to sleep, or amplifications which repel; others demoniac dreams in barbarous style, interrupted in sequence, with long apostrophes to the gods, because they do not know how to speak to men, with false maxims, with bombastic commonplaces!"

    Candide listened with attention to this discourse, and conceived a great idea of the speaker, and as the Marchioness had taken care to place him beside her, he leaned towards her and took the liberty of asking who was the man who had spoken so well.

    "He is a scholar," said the lady, "who does not play, whom the Abbé sometimes brings to supper; he is perfectly at home among tragedies and books, and he has written a tragedy which was hissed, and a book of which nothing has[Pg 114] ever been seen outside his bookseller's shop excepting the copy which he dedicated to me."

    "The great man!" said Candide. "He is another Pangloss!"

    Then, turning towards him, he said:

    "Sir, you think doubtless that all is for the best in the moral and physical world, and that nothing could be otherwise than it is?"

    "I, sir!" answered the scholar, "I know nothing of all that; I find that all goes awry with me; that no one knows either what is his rank, nor what is his condition, what he does nor what he ought to do; and that except supper, which is always gay, and where there appears to be enough concord, all the rest of the time is passed in impertinent quarrels; Jansenist against Molinist, Parliament against the Church, men of letters against men of letters, courtesans against courtesans, financiers against the people, wives against husbands, relatives against relatives—it is eternal war."

    "I have seen the worst," Candide replied. "But a wise man, who since has had the misfortune to be hanged, taught me that all is marvellously well; these are but the shadows on a beautiful picture."

    "Your hanged man mocked the world," said Martin. "The shadows are horrible blots."[Pg 115]

    "They are men who make the blots," said Candide, "and they cannot be dispensed with."

    "It is not their fault then," said Martin.

    Most of the punters, who understood nothing of this language, drank, and Martin reasoned with the scholar, and Candide related some of his adventures to his hostess.

    After supper the Marchioness took Candide into her boudoir, and made him sit upon a sofa.

    "Ah, well!" said she to him, "you love desperately Miss Cunegonde of Thunder-ten-Tronckh?"

    "Yes, madame," answered Candide.

    The Marchioness replied to him with a tender smile:

    "You answer me like a young man from Westphalia. A Frenchman would have said, 'It is true that I have loved Miss Cunegonde, but seeing you, madame, I think I no longer love her.'"

    "Alas! madame," said Candide, "I will answer you as you wish."

    "Your passion for her," said the Marchioness, "commenced by picking up her handkerchief. I wish that you would pick up my garter."

    "With all my heart," said Candide. And he picked it up.

    "But I wish that you would put it on," said the lady.[Pg 116]

    And Candide put it on.

    "You see," said she, "you are a foreigner. I sometimes make my Parisian lovers languish for fifteen days, but I give myself to you the first night because one must do the honours of one's country to a young man from Westphalia."

    The lady having perceived two enormous diamonds upon the hands of the young foreigner praised them with such good faith that from Candide's fingers they passed to her own.

    Candide, returning with the Perigordian Abbé, felt some remorse in having been unfaithful to Miss Cunegonde. The Abbé sympathised in his trouble; he had had but a light part of the fifty thousand francs lost at play and of the value of the two brilliants, half given, half extorted. His design was to profit as much as he could by the advantages which the acquaintance of Candide could procure for him. He spoke much of Cunegonde, and Candide told him that he should ask forgiveness of that beautiful one for his infidelity when he should see her in Venice.

    The Abbé redoubled his politeness and attentions, and took a tender interest in all that Candide said, in all that he did, in all that he wished to do.

    "And so, sir, you have a rendezvous at Venice?"

    "Yes, monsieur Abbé," answered Candide.[Pg 117] "It is absolutely necessary that I go to meet Miss Cunegonde."

    And then the pleasure of talking of that which he loved induced him to relate, according to his custom, part of his adventures with the fair Westphalian.

    "I believe," said the Abbé, "that Miss Cunegonde has a great deal of wit, and that she writes charming letters?"

    "I have never received any from her," said Candide, "for being expelled from the castle on her account I had not an opportunity for writing to her. Soon after that I heard she was dead; then I found her alive; then I lost her again; and last of all, I sent an express to her two thousand five hundred leagues from here, and I wait for an answer."

    The Abbé listened attentively, and seemed to be in a brown study. He soon took his leave of the two foreigners after a most tender embrace. The following day Candide received, on awaking, a letter couched in these terms:

    "My very dear love, for eight days I have been ill in this town. I learn that you are here. I would fly to your arms if I could but move. I was informed of your passage at Bordeaux, where I left faithful Cacambo and the old woman, who are to follow me very soon. The Governor of Buenos Ayres has taken all, but[Pg 118] there remains to me your heart. Come! your presence will either give me life or kill me with pleasure."

    This charming, this unhoped-for letter transported Candide with an inexpressible joy, and the illness of his dear Cunegonde overwhelmed him with grief. Divided between those two passions, he took his gold and his diamonds and hurried away, with Martin, to the hotel where Miss Cunegonde was lodged. He entered her room trembling, his heart palpitating, his voice sobbing; he wished to open the curtains of the bed, and asked for a light.

    "Take care what you do," said the servant-maid; "the light hurts her," and immediately she drew the curtain again.

    "My dear Cunegonde," said Candide, weeping, "how are you? If you cannot see me, at least speak to me."

    "She cannot speak," said the maid.

    The lady then put a plump hand out from the bed, and Candide bathed it with his tears and afterwards filled it with diamonds, leaving a bag of gold upon the easy chair.

    In the midst of these transports in came an officer, followed by the Abbé and a file of soldiers.

    "There," said he, "are the two suspected[Pg 119] foreigners," and at the same time he ordered them to be seized and carried to prison.

    "Travellers are not treated thus in El Dorado," said Candide.

    "I am more a Manichean now than ever," said Martin.

    "But pray, sir, where are you going to carry us?" said Candide.

    "To a dungeon," answered the officer.

    Martin, having recovered himself a little, judged that the lady who acted the part of Cunegonde was a cheat, that the Perigordian Abbé was a knave who had imposed upon the honest simplicity of Candide, and that the officer was another knave whom they might easily silence.

    Candide, advised by Martin and impatient to see the real Cunegonde, rather than expose himself before a court of justice, proposed to the officer to give him three small diamonds, each worth about three thousand pistoles.

    "Ah, sir," said the man with the ivory baton, "had you committed all the imaginable crimes you would be to me the most honest man in the world. Three diamonds! Each worth three thousand pistoles! Sir, instead of carrying you to jail I would lose my life to serve you. There are orders for arresting all foreigners, but leave it to me. I have a brother at Dieppe in Normandy! I'll conduct you thither, and if you[Pg 120] have a diamond to give him he'll take as much care of you as I would."

    "And why," said Candide, "should all foreigners be arrested?"

    "It is," the Perigordian Abbé then made answer, "because a poor beggar of the country of Atrébatie[28] heard some foolish things said. This induced him to commit a parricide, not such as that of 1610 in the month of May,[29] but such as that of 1594 in the month of December,[30] and such as others which have been committed in other years and other months by other poor devils who had heard nonsense spoken."

    The officer then explained what the Abbé meant.

    "Ah, the monsters!" cried Candide. "What horrors among a people who dance and sing! Is there no way of getting quickly out of this country where monkeys provoke tigers? I have seen no bears in my country, but men I have beheld nowhere except in El Dorado. In the name of God, sir, conduct me to Venice, where I am to await Miss Cunegonde."

    "I can conduct you no further than lower Normandy," said the officer.

    Immediately he ordered his irons to be struck off, acknowledged himself mistaken, sent away his men, set out with Candide and Martin for Dieppe, and left them in the care of his brother.[Pg 121]

    There was then a small Dutch ship in the harbour. The Norman, who by the virtue of three more diamonds had become the most subservient of men, put Candide and his attendants on board a vessel that was just ready to set sail for Portsmouth in England.

    This was not the way to Venice, but Candide thought he had made his way out of hell, and reckoned that he would soon have an opportunity for resuming his journey.[Pg 122]


    XXIII

    CANDIDE AND MARTIN TOUCHED UPON THE COAST OF ENGLAND, AND WHAT THEY SAW THERE.

    "Ah, Pangloss! Pangloss! Ah, Martin! Martin! Ah, my dear Cunegonde, what sort of a world is this?" said Candide on board the Dutch ship.

    "Something very foolish and abominable," said Martin.

    "You know England? Are they as foolish there as in France?"

    "It is another kind of folly," said Martin. "You know that these two nations are at war for a few acres of snow in Canada,[31] and that they spend over this beautiful war much more than Canada is worth. To tell you exactly, whether there are more people fit to send to a madhouse in one country than the other, is what my imperfect intelligence will not permit. I only know in general that the people we are going to see are very atrabilious."

    Talking thus they arrived at Portsmouth. The coast was lined with crowds of people, whose eyes were fixed on a fine man kneeling, with his[Pg 123] eyes bandaged, on board one of the men of war in the harbour. Four soldiers stood opposite to this man; each of them fired three balls at his head, with all the calmness in the world; and the whole assembly went away very well satisfied.

    "What is all this?" said Candide; "and what demon is it that exercises his empire in this country?"

    He then asked who was that fine man who had been killed with so much ceremony. They answered, he was an Admiral.[32]

    "And why kill this Admiral?"

    "It is because he did not kill a sufficient number of men himself. He gave battle to a French Admiral; and it has been proved that he was not near enough to him."

    "But," replied Candide, "the French Admiral was as far from the English Admiral."

    "There is no doubt of it; but in this country it is found good, from time to time, to kill one Admiral to encourage the others."

    Candide was so shocked and bewildered by what he saw and heard, that he would not set foot on shore, and he made a bargain with the Dutch skipper (were he even to rob him like the Surinam captain) to conduct him without delay to Venice.

    The skipper was ready in two days. They[Pg 124] coasted France; they passed in sight of Lisbon, and Candide trembled. They passed through the Straits, and entered the Mediterranean. At last they landed at Venice.

    "God be praised!" said Candide, embracing Martin. "It is here that I shall see again my beautiful Cunegonde. I trust Cacambo as myself. All is well, all will be well, all goes as well as possible."[Pg 125]


    XXIV

    OF PAQUETTE AND FRIAR GIROFLÉE.

    Upon their arrival at Venice, Candide went to search for Cacambo at every inn and coffee-house, and among all the ladies of pleasure, but to no purpose. He sent every day to inquire on all the ships that came in. But there was no news of Cacambo.

    "What!" said he to Martin, "I have had time to voyage from Surinam to Bordeaux, to go from Bordeaux to Paris, from Paris to Dieppe, from Dieppe to Portsmouth, to coast along Portugal and Spain, to cross the whole Mediterranean, to spend some months, and yet the beautiful Cunegonde has not arrived! Instead of her I have only met a Parisian wench and a Perigordian Abbé. Cunegonde is dead without doubt, and there is nothing for me but to die. Alas! how much better it would have been for me to have remained in the paradise of El Dorado than to come back to this cursed Europe! You are in the right, my dear Martin: all is misery and illusion."

    He fell into a deep melancholy, and neither[Pg 126] went to see the opera, nor any of the other diversions of the Carnival; nay, he was proof against the temptations of all the ladies.

    "You are in truth very simple," said Martin to him, "if you imagine that a mongrel valet, who has five or six millions in his pocket, will go to the other end of the world to seek your mistress and bring her to you to Venice. If he find her, he will keep her to himself; if he do not find her he will get another. I advise you to forget your valet Cacambo and your mistress Cunegonde."

    Martin was not consoling. Candide's melancholy increased; and Martin continued to prove to him that there was very little virtue or happiness upon earth, except perhaps in El Dorado, where nobody could gain admittance.

    While they were disputing on this important subject and waiting for Cunegonde, Candide saw a young Theatin friar in St. Mark's Piazza, holding a girl on his arm. The Theatin looked fresh coloured, plump, and vigorous; his eyes were sparkling, his air assured, his look lofty, and his step bold. The girl was very pretty, and sang; she looked amorously at her Theatin, and from time to time pinched his fat cheeks.

    "At least you will allow me," said Candide to Martin, "that these two are happy. Hitherto I have met with none but unfortunate people in[Pg 127] the whole habitable globe, except in El Dorado; but as to this pair, I would venture to lay a wager that they are very happy."

    "I lay you they are not," said Martin.

    "We need only ask them to dine with us," said Candide, "and you will see whether I am mistaken."

    Immediately he accosted them, presented his compliments, and invited them to his inn to eat some macaroni, with Lombard partridges, and caviare, and to drink some Montepulciano, Lachrymæ Christi, Cyprus and Samos wine. The girl blushed, the Theatin accepted the invitation and she followed him, casting her eyes on Candide with confusion and surprise, and dropping a few tears. No sooner had she set foot in Candide's apartment than she cried out:

    "Ah! Mr. Candide does not know Paquette again."

    Candide had not viewed her as yet with attention, his thoughts being entirely taken up with Cunegonde; but recollecting her as she spoke.

    "Alas!" said he, "my poor child, it is you who reduced Doctor Pangloss to the beautiful condition in which I saw him?"

    "Alas! it was I, sir, indeed," answered Paquette. "I see that you have heard all. I have been informed of the frightful disasters that befell the family of my lady Baroness, and[Pg 128] the fair Cunegonde. I swear to you that my fate has been scarcely less sad. I was very innocent when you knew me. A Grey Friar, who was my confessor, easily seduced me. The consequences were terrible. I was obliged to quit the castle some time after the Baron had sent you away with kicks on the backside. If a famous surgeon had not taken compassion on me, I should have died. For some time I was this surgeon's mistress, merely out of gratitude. His wife, who was mad with jealousy, beat me every day unmercifully; she was a fury. The surgeon was one of the ugliest of men, and I the most wretched of women, to be continually beaten for a man I did not love. You know, sir, what a dangerous thing it is for an ill-natured woman to be married to a doctor. Incensed at the behaviour of his wife, he one day gave her so effectual a remedy to cure her of a slight cold, that she died two hours after, in most horrid convulsions. The wife's relations prosecuted the husband; he took flight, and I was thrown into jail. My innocence would not have saved me if I had not been good-looking. The judge set me free, on condition that he succeeded the surgeon. I was soon supplanted by a rival, turned out of doors quite destitute, and obliged to continue this abominable trade, which appears so pleasant to you men, while to[Pg 129] us women it is the utmost abyss of misery. I have come to exercise the profession at Venice. Ah! sir, if you could only imagine what it is to be obliged to caress indifferently an old merchant, a lawyer, a monk, a gondolier, an abbé, to be exposed to abuse and insults; to be often reduced to borrowing a petticoat, only to go and have it raised by a disagreeable man; to be robbed by one of what one has earned from another; to be subject to the extortions of the officers of justice; and to have in prospect only a frightful old age, a hospital, and a dung-hill; you would conclude that I am one of the most unhappy creatures in the world."[33]

    Paquette thus opened her heart to honest Candide, in the presence of Martin, who said to his friend:

    "You see that already I have won half the wager."

    Friar Giroflée stayed in the dining-room, and drank a glass or two of wine while he was waiting for dinner.

    "But," said Candide to Paquette, "you looked so gay and content when I met you; you sang and you behaved so lovingly to the Theatin, that you seemed to me as happy as you pretend to be now the reverse."

    "Ah! sir," answered Paquette, "this is one of the miseries of the trade. Yesterday I was[Pg 130] robbed and beaten by an officer; yet to-day I must put on good humour to please a friar."

    Candide wanted no more convincing; he owned that Martin was in the right. They sat down to table with Paquette and the Theatin; the repast was entertaining; and towards the end they conversed with all confidence.

    "Father," said Candide to the Friar, "you appear to me to enjoy a state that all the world might envy; the flower of health shines in your face, your expression makes plain your happiness; you have a very pretty girl for your recreation, and you seem well satisfied with your state as a Theatin."

    "My faith, sir," said Friar Giroflée, "I wish that all the Theatins were at the bottom of the sea. I have been tempted a hundred times to set fire to the convent, and go and become a Turk. My parents forced me at the age of fifteen to put on this detestable habit, to increase the fortune of a cursed elder brother, whom God confound. Jealousy, discord, and fury, dwell in the convent. It is true I have preached a few bad sermons that have brought me in a little money, of which the prior stole half, while the rest serves to maintain my girls; but when I return at night to the monastery, I am ready to dash my head against the walls of the dormitory; and all my fellows are in the same case."[Pg 131]

    Martin turned towards Candide with his usual coolness.

    "Well," said he, "have I not won the whole wager?"

    Candide gave two thousand piastres to Paquette, and one thousand to Friar Giroflée.

    "I'll answer for it," said he, "that with this they will be happy."

    "I do not believe it at all," said Martin; "you will, perhaps, with these piastres only render them the more unhappy."

    "Let that be as it may," said Candide, "but one thing consoles me. I see that we often meet with those whom we expected never to see more; so that, perhaps, as I have found my red sheep and Paquette, it may well be that I shall also find Cunegonde."

    "I wish," said Martin, "she may one day make you very happy; but I doubt it very much."

    "You are very hard of belief," said Candide.

    "I have lived," said Martin.

    "You see those gondoliers," said Candide, "are they not perpetually singing?"

    "You do not see them," said Martin, "at home with their wives and brats. The Doge has his troubles, the gondoliers have theirs. It is true that, all things considered, the life of a gondolier is preferable to that of a Doge; but I believe the[Pg 132] difference to be so trifling that it is not worth the trouble of examining."

    "People talk," said Candide, "of the Senator Pococurante, who lives in that fine palace on the Brenta, where he entertains foreigners in the politest manner. They pretend that this man has never felt any uneasiness."

    "I should be glad to see such a rarity," said Martin.

    Candide immediately sent to ask the Lord Pococurante permission to wait upon him the next day.[Pg 133]


    XXV

    THE VISIT TO LORD POCOCURANTE, A NOBLE VENETIAN.

    Candide and Martin went in a gondola on the Brenta, and arrived at the palace of the noble Signor Pococurante. The gardens, laid out with taste, were adorned with fine marble statues. The palace was beautifully built. The master of the house was a man of sixty, and very rich. He received the two travellers with polite indifference, which put Candide a little out of countenance, but was not at all disagreeable to Martin.

    First, two pretty girls, very neatly dressed, served them with chocolate, which was frothed exceedingly well. Candide could not refrain from commending their beauty, grace, and address.

    "They are good enough creatures," said the Senator. "I make them lie with me sometimes, for I am very tired of the ladies of the town, of their coquetries, of their jealousies, of their quarrels, of their humours, of their pettinesses, of their prides, of their follies, and of the sonnets[Pg 134] which one must make, or have made, for them. But after all, these two girls begin to weary me."

    After breakfast, Candide walking into a long gallery was surprised by the beautiful pictures. He asked, by what master were the two first.

    "They are by Raphael," said the Senator. "I bought them at a great price, out of vanity, some years ago. They are said to be the finest things in Italy, but they do not please me at all. The colours are too dark, the figures are not sufficiently rounded, nor in good relief; the draperies in no way resemble stuffs. In a word, whatever may be said, I do not find there a true imitation of nature. I only care for a picture when I think I see nature itself; and there are none of this sort. I have a great many pictures, but I prize them very little."

    While they were waiting for dinner Pococurante ordered a concert. Candide found the music delicious.

    "This noise," said the Senator, "may amuse one for half an hour; but if it were to last longer it would grow tiresome to everybody, though they durst not own it. Music, to-day, is only the art of executing difficult things, and that which is only difficult cannot please long. Perhaps I should be fonder of the opera if they had not found the secret of making of it a monster[Pg 135] which shocks me. Let who will go to see bad tragedies set to music, where the scenes are contrived for no other end than to introduce two or three songs ridiculously out of place, to show off an actress's voice. Let who will, or who can, die away with pleasure at the sight of an eunuch quavering the rôle of Cæsar, or of Cato, and strutting awkwardly upon the stage. For my part I have long since renounced those paltry entertainments which constitute the glory of modern Italy, and are purchased so dearly by sovereigns."

    Candide disputed the point a little, but with discretion. Martin was entirely of the Senator's opinion.

    They sat down to table, and after an excellent dinner they went into the library. Candide, seeing a Homer magnificently bound, commended the virtuoso on his good taste.

    "There," said he, "is a book that was once the delight of the great Pangloss, the best philosopher in Germany."

    "It is not mine," answered Pococurante coolly. "They used at one time to make me believe that I took a pleasure in reading him. But that continual repetition of battles, so extremely like one another; those gods that are always active without doing anything decisive; that Helen who is the cause of the war, and who yet scarcely appears[Pg 136] in the piece; that Troy, so long besieged without being taken; all these together caused me great weariness. I have sometimes asked learned men whether they were not as weary as I of that work. Those who were sincere have owned to me that the poem made them fall asleep; yet it was necessary to have it in their library as a monument of antiquity, or like those rusty medals which are no longer of use in commerce."

    "But your Excellency does not think thus of Virgil?" said Candide.

    "I grant," said the Senator, "that the second, fourth, and sixth books of his Æneid are excellent, but as for his pious Æneas, his strong Cloanthus, his friend Achates, his little Ascanius, his silly King Latinus, his bourgeois Amata, his insipid Lavinia, I think there can be nothing more flat and disagreeable. I prefer Tasso a good deal, or even the soporific tales of Ariosto."

    "May I presume to ask you, sir," said Candide, "whether you do not receive a great deal of pleasure from reading Horace?"

    "There are maxims in this writer," answered Pococurante, "from which a man of the world may reap great benefit, and being written in energetic verse they are more easily impressed upon the memory. But I care little for his journey to Brundusium, and his account of a bad[Pg 137] dinner, or of his low quarrel between one Rupilius whose words he says were full of poisonous filth, and another whose language was imbued with vinegar. I have read with much distaste his indelicate verses against old women and witches; nor do I see any merit in telling his friend Mæcenas that if he will but rank him in the choir of lyric poets, his lofty head shall touch the stars. Fools admire everything in an author of reputation. For my part, I read only to please myself. I like only that which serves my purpose."

    Candide, having been educated never to judge for himself, was much surprised at what he heard. Martin found there was a good deal of reason in Pococurante's remarks.

    "Oh! here is Cicero," said Candide. "Here is the great man whom I fancy you are never tired of reading."

    "I never read him," replied the Venetian. "What is it to me whether he pleads for Rabirius or Cluentius? I try causes enough myself; his philosophical works seem to me better, but when I found that he doubted of everything, I concluded that I knew as much as he, and that I had no need of a guide to learn ignorance."

    "Ha! here are four-score volumes of the Academy of Sciences," cried Martin. "Perhaps there is something valuable in this collection."[Pg 138]

    "There might be," said Pococurante, "if only one of those rakers of rubbish had shown how to make pins; but in all these volumes there is nothing but chimerical systems, and not a single useful thing."

    "And what dramatic works I see here," said Candide, "in Italian, Spanish, and French."

    "Yes," replied the Senator, "there are three thousand, and not three dozen of them good for anything. As to those collections of sermons, which altogether are not worth a single page of Seneca, and those huge volumes of theology, you may well imagine that neither I nor any one else ever opens them."

    Martin saw some shelves filled with English books.

    "I have a notion," said he, "that a Republican must be greatly pleased with most of these books, which are written with a spirit of freedom."

    "Yes," answered Pococurante, "it is noble to write as one thinks; this is the privilege of humanity. In all our Italy we write only what we do not think; those who inhabit the country of the Cæsars and the Antoninuses dare not acquire a single idea without the permission of a Dominican friar. I should be pleased with the liberty which inspires the English genius if passion and party spirit did not corrupt all that is estimable in this precious liberty."[Pg 139]

    Candide, observing a Milton, asked whether he did not look upon this author as a great man.

    "Who?" said Pococurante, "that barbarian, who writes a long commentary in ten books of harsh verse on the first chapter of Genesis; that coarse imitator of the Greeks, who disfigures the Creation, and who, while Moses represents the Eternal producing the world by a word, makes the Messiah take a great pair of compasses from the armoury of heaven to circumscribe His work? How can I have any esteem for a writer who has spoiled Tasso's hell and the devil, who transforms Lucifer sometimes into a toad and other times into a pigmy, who makes him repeat the same things a hundred times, who makes him dispute on theology, who, by a serious imitation of Ariosto's comic invention of firearms, represents the devils cannonading in heaven? Neither I nor any man in Italy could take pleasure in those melancholy extravagances; and the marriage of Sin and Death, and the snakes brought forth by Sin, are enough to turn the stomach of any one with the least taste, [and his long description of a pest-house is good only for a grave-digger]. This obscure, whimsical, and disagreeable poem was despised upon its first publication, and I only treat it now as it was treated in its own country by contemporaries. For the matter of[Pg 140] that I say what I think, and I care very little whether others think as I do."

    Candide was grieved at this speech, for he had a respect for Homer and was fond of Milton.

    "Alas!" said he softly to Martin, "I am afraid that this man holds our German poets in very great contempt."

    "There would not be much harm in that," said Martin.

    "Oh! what a superior man," said Candide below his breath. "What a great genius is this Pococurante! Nothing can please him."

    After their survey of the library they went down into the garden, where Candide praised its several beauties.

    "I know of nothing in so bad a taste," said the master. "All you see here is merely trifling. After to-morrow I will have it planted with a nobler design."

    "Well," said Candide to Martin when they had taken their leave, "you will agree that this is the happiest of mortals, for he is above everything he possesses."

    "But do you not see," answered Martin, "that he is disgusted with all he possesses? Plato observed a long while ago that those stomachs are not the best that reject all sorts of food."

    "But is there not a pleasure," said Candide,[Pg 141] "in criticising everything, in pointing out faults where others see nothing but beauties?"

    "That is to say," replied Martin, "that there is some pleasure in having no pleasure."

    "Well, well," said Candide, "I find that I shall be the only happy man when I am blessed with the sight of my dear Cunegonde."

    "It is always well to hope," said Martin.

    However, the days and the weeks passed. Cacambo did not come, and Candide was so overwhelmed with grief that he did not even reflect that Paquette and Friar Giroflée did not return to thank him.[Pg 142]


    XXVI

    OF A SUPPER WHICH CANDIDE AND MARTIN TOOK WITH SIX STRANGERS, AND WHO THEY WERE.[34]

    One evening that Candide and Martin were going to sit down to supper with some foreigners who lodged in the same inn, a man whose complexion was as black as soot, came behind Candide, and taking him by the arm, said:

    "Get yourself ready to go along with us; do not fail."

    Upon this he turned round and saw—Cacambo! Nothing but the sight of Cunegonde could have astonished and delighted him more. He was on the point of going mad with joy. He embraced his dear friend.

    "Cunegonde is here, without doubt; where is she? Take me to her that I may die of joy in her company."

    "Cunegonde is not here," said Cacambo, "she is at Constantinople."

    "Oh, heavens! at Constantinople! But were she in China I would fly thither; let us be off."

    "We shall set out after supper," replied[Pg 143] Cacambo. "I can tell you nothing more; I am a slave, my master awaits me, I must serve him at table; speak not a word, eat, and then get ready."

    Candide, distracted between joy and grief, delighted at seeing his faithful agent again, astonished at finding him a slave, filled with the fresh hope of recovering his mistress, his heart palpitating, his understanding confused, sat down to table with Martin, who saw all these scenes quite unconcerned, and with six strangers who had come to spend the Carnival at Venice.

    Cacambo waited at table upon one of the strangers; towards the end of the entertainment he drew near his master, and whispered in his ear:

    "Sire, your Majesty may start when you please, the vessel is ready."

    On saying these words he went out. The company in great surprise looked at one another without speaking a word, when another domestic approached his master and said to him:

    "Sire, your Majesty's chaise is at Padua, and the boat is ready."

    The master gave a nod and the servant went away. The company all stared at one another again, and their surprise redoubled. A third valet came up to a third stranger, saying:

    "Sire, believe me, your Majesty ought not to[Pg 144] stay here any longer. I am going to get everything ready."

    And immediately he disappeared. Candide and Martin did not doubt that this was a masquerade of the Carnival. Then a fourth domestic said to a fourth master:

    "Your Majesty may depart when you please."

    Saying this he went away like the rest. The fifth valet said the same thing to the fifth master. But the sixth valet spoke differently to the sixth stranger, who sat near Candide. He said to him:

    "Faith, Sire, they will no longer give credit to your Majesty nor to me, and we may perhaps both of us be put in jail this very night. Therefore I will take care of myself. Adieu."

    The servants being all gone, the six strangers, with Candide and Martin, remained in a profound silence. At length Candide broke it.

    "Gentlemen," said he, "this is a very good joke indeed, but why should you all be kings? For me I own that neither Martin nor I is a king."

    Cacambo's master then gravely answered in Italian:

    "I am not at all joking. My name is Achmet III. I was Grand Sultan many years. I dethroned my brother; my nephew dethroned me, my viziers were beheaded, and I am condemned to end my days in the old Seraglio. My nephew,[Pg 145] the great Sultan Mahmoud, permits me to travel sometimes for my health, and I am come to spend the Carnival at Venice."

    A young man who sat next to Achmet, spoke then as follows:

    "My name is Ivan. I was once Emperor of all the Russias, but was dethroned in my cradle. My parents were confined in prison and I was educated there; yet I am sometimes allowed to travel in company with persons who act as guards; and I am come to spend the Carnival at Venice."

    The third said:

    "I am Charles Edward, King of England; my father has resigned all his legal rights to me. I have fought in defence of them; and above eight hundred of my adherents have been hanged, drawn, and quartered. I have been confined in prison; I am going to Rome, to pay a visit to the King, my father, who was dethroned as well as myself and my grandfather, and I am come to spend the Carnival at Venice."

    The fourth spoke thus in his turn:

    "I am the King of Poland; the fortune of war has stripped me of my hereditary dominions; my father underwent the same vicissitudes; I resign myself to Providence in the same manner as Sultan Achmet, the Emperor Ivan, and King Charles Edward, whom God long preserve;[Pg 146] and I am come to the Carnival at Venice."

    The fifth said:

    "I am King of Poland also; I have been twice dethroned; but Providence has given me another country, where I have done more good than all the Sarmatian kings were ever capable of doing on the banks of the Vistula; I resign myself likewise to Providence, and am come to pass the Carnival at Venice."

    It was now the sixth monarch's turn to speak:

    "Gentlemen," said he, "I am not so great a prince as any of you; however, I am a king. I am Theodore, elected King of Corsica; I had the title of Majesty, and now I am scarcely treated as a gentleman. I have coined money, and now am not worth a farthing; I have had two secretaries of state, and now I have scarce a valet; I have seen myself on a throne, and I have seen myself upon straw in a common jail in London. I am afraid that I shall meet with the same treatment here though, like your majesties, I am come to see the Carnival at Venice."

    The other five kings listened to this speech with generous compassion. Each of them gave twenty sequins to King Theodore to buy him clothes and linen; and Candide made him a present of a diamond worth two thousand sequins.[Pg 147]

    "Who can this private person be," said the five kings to one another, "who is able to give, and really has given, a hundred times as much as any of us?"

    Just as they rose from table, in came four Serene Highnesses, who had also been stripped of their territories by the fortune of war, and were come to spend the Carnival at Venice. But Candide paid no regard to these newcomers, his thoughts were entirely employed on his voyage to Constantinople, in search of his beloved Cunegonde.[Pg 148]


    XXVII

    CANDIDE'S VOYAGE TO CONSTANTINOPLE.

    The faithful Cacambo had already prevailed upon the Turkish skipper, who was to conduct the Sultan Achmet to Constantinople, to receive Candide and Martin on his ship. They both embarked after having made their obeisance to his miserable Highness.

    "You see," said Candide to Martin on the way, "we supped with six dethroned kings, and of those six there was one to whom I gave charity. Perhaps there are many other princes yet more unfortunate. For my part, I have only lost a hundred sheep; and now I am flying into Cunegonde's arms. My dear Martin, yet once more Pangloss was right: all is for the best."

    "I wish it," answered Martin.

    "But," said Candide, "it was a very strange adventure we met with at Venice. It has never before been seen or heard that six dethroned kings have supped together at a public inn."

    "It is not more extraordinary," said Martin, "than most of the things that have happened to us. It is a very common thing for kings to be[Pg 149] dethroned; and as for the honour we have had of supping in their company, it is a trifle not worth our attention."

    No sooner had Candide got on board the vessel than he flew to his old valet and friend Cacambo, and tenderly embraced him.

    "Well," said he, "what news of Cunegonde? Is she still a prodigy of beauty? Does she love me still? How is she? Thou hast doubtless bought her a palace at Constantinople?"

    "My dear master," answered Cacambo, "Cunegonde washes dishes on the banks of the Propontis, in the service of a prince, who has very few dishes to wash; she is a slave in the family of an ancient sovereign named Ragotsky,[35] to whom the Grand Turk allows three crowns a day in his exile. But what is worse still is, that she has lost her beauty and has become horribly ugly."

    "Well, handsome or ugly," replied Candide, "I am a man of honour, and it is my duty to love her still. But how came she to be reduced to so abject a state with the five or six millions that you took to her?"

    "Ah!" said Cacambo, "was I not to give two millions to Senor Don Fernando d'Ibaraa, y Figueora, y Mascarenes, y Lampourdos, y Souza, Governor of Buenos Ayres, for permitting Miss Cunegonde to come away? And did[Pg 150] not a corsair bravely rob us of all the rest? Did not this corsair carry us to Cape Matapan, to Milo, to Nicaria, to Samos, to Petra, to the Dardanelles, to Marmora, to Scutari? Cunegonde and the old woman serve the prince I now mentioned to you, and I am slave to the dethroned Sultan."

    "What a series of shocking calamities!" cried Candide. "But after all, I have some diamonds left; and I may easily pay Cunegonde's ransom. Yet it is a pity that she is grown so ugly."

    Then, turning towards Martin: "Who do you think," said he, "is most to be pitied—the Sultan Achmet, the Emperor Ivan, King Charles Edward, or I?"

    "How should I know!" answered Martin. "I must see into your hearts to be able to tell."

    "Ah!" said Candide, "if Pangloss were here, he could tell."

    "I know not," said Martin, "in what sort of scales your Pangloss would weigh the misfortunes of mankind and set a just estimate on their sorrows. All that I can presume to say is, that there are millions of people upon earth who have a hundred times more to complain of than King Charles Edward, the Emperor Ivan, or the Sultan Achmet."

    "That may well be," said Candide.

    In a few days they reached the Bosphorus,[Pg 151] and Candide began by paying a very high ransom for Cacambo. Then without losing time, he and his companions went on board a galley, in order to search on the banks of the Propontis for his Cunegonde, however ugly she might have become.

    Among the crew there were two slaves who rowed very badly, and to whose bare shoulders the Levantine captain would now and then apply blows from a bull's pizzle. Candide, from a natural impulse, looked at these two slaves more attentively than at the other oarsmen, and approached them with pity. Their features though greatly disfigured, had a slight resemblance to those of Pangloss and the unhappy Jesuit and Westphalian Baron, brother to Miss Cunegonde. This moved and saddened him. He looked at them still more attentively.

    "Indeed," said he to Cacambo, "if I had not seen Master Pangloss hanged, and if I had not had the misfortune to kill the Baron, I should think it was they that were rowing."

    At the names of the Baron and of Pangloss, the two galley-slaves uttered a loud cry, held fast by the seat, and let drop their oars. The captain ran up to them and redoubled his blows with the bull's pizzle.

    "Stop! stop! sir," cried Candide. "I will give you what money you please."[Pg 152]

    "What! it is Candide!" said one of the slaves.

    "What! it is Candide!" said the other.

    "Do I dream?" cried Candide; "am I awake? or am I on board a galley? Is this the Baron whom I killed? Is this Master Pangloss whom I saw hanged?"

    "It is we! it is we!" answered they.

    "Well! is this the great philosopher?" said Martin.

    "Ah! captain," said Candide, "what ransom will you take for Monsieur de Thunder-ten-Tronckh, one of the first barons of the empire, and for Monsieur Pangloss, the profoundest metaphysician in Germany?"

    "Dog of a Christian," answered the Levantine captain, "since these two dogs of Christian slaves are barons and metaphysicians, which I doubt not are high dignities in their country, you shall give me fifty thousand sequins."

    "You shall have them, sir. Carry me back at once to Constantinople, and you shall receive the money directly. But no; carry me first to Miss Cunegonde."

    Upon the first proposal made by Candide, however, the Levantine captain had already tacked about, and made the crew ply their oars quicker than a bird cleaves the air.

    Candide embraced the Baron and Pangloss a hundred times.

    "And how happened it, my dear Baron, that[Pg 153] I did not kill you? And, my dear Pangloss, how came you to life again after being hanged? And why are you both in a Turkish galley?"

    "And it is true that my dear sister is in this country?" said the Baron.

    "Yes," answered Cacambo.

    "Then I behold, once more, my dear Candide," cried Pangloss.

    Candide presented Martin and Cacambo to them; they embraced each other, and all spoke at once. The galley flew; they were already in the port. Instantly Candide sent for a Jew, to whom he sold for fifty thousand sequins a diamond worth a hundred thousand, though the fellow swore to him by Abraham that he could give him no more. He immediately paid the ransom for the Baron and Pangloss. The latter threw himself at the feet of his deliverer, and bathed them with his tears; the former thanked him with a nod, and promised to return him the money on the first opportunity.

    "But is it indeed possible that my sister can be in Turkey?" said he.

    "Nothing is more possible," said Cacambo, "since she scours the dishes in the service of a Transylvanian prince."

    Candide sent directly for two Jews and sold them some more diamonds, and then they all set out together in another galley to deliver Cunegonde from slavery.[Pg 154]


    XXVIII

    WHAT HAPPENED TO CANDIDE, CUNEGONDE, PANGLOSS, MARTIN, ETC.

    "I ask your pardon once more," said Candide to the Baron, "your pardon, reverend father, for having run you through the body."

    "Say no more about it," answered the Baron. "I was a little too hasty, I own, but since you wish to know by what fatality I came to be a galley-slave I will inform you. After I had been cured by the surgeon of the college of the wound you gave me, I was attacked and carried off by a party of Spanish troops, who confined me in prison at Buenos Ayres at the very time my sister was setting out thence. I asked leave to return to Rome to the General of my Order. I was appointed chaplain to the French Ambassador at Constantinople. I had not been eight days in this employment when one evening I met with a young Ichoglan, who was a very handsome fellow. The weather was warm. The young man wanted to bathe, and I took this opportunity of bathing also. I did not know that it was a capital crime for a Christian to[Pg 155] be found naked with a young Mussulman. A cadi ordered me a hundred blows on the soles of the feet, and condemned me to the galleys. I do not think there ever was a greater act of injustice. But I should be glad to know how my sister came to be scullion to a Transylvanian prince who has taken shelter among the Turks."

    "But you, my dear Pangloss," said Candide, "how can it be that I behold you again?"

    "It is true," said Pangloss, "that you saw me hanged. I should have been burnt, but you may remember it rained exceedingly hard when they were going to roast me; the storm was so violent that they despaired of lighting the fire, so I was hanged because they could do no better. A surgeon purchased my body, carried me home, and dissected me. He began with making a crucial incision on me from the navel to the clavicula. One could not have been worse hanged than I was. The executioner of the Holy Inquisition was a sub-deacon, and knew how to burn people marvellously well, but he was not accustomed to hanging. The cord was wet and did not slip properly, and besides it was badly tied; in short, I still drew my breath, when the crucial incision made me give such a frightful scream that my surgeon fell flat upon his back, and imagining that he had been dissecting the devil he ran away, dying with fear, and fell down the staircase[Pg 156] in his flight. His wife, hearing the noise, flew from the next room. She saw me stretched out upon the table with my crucial incision. She was seized with yet greater fear than her husband, fled, and tumbled over him. When they came to themselves a little, I heard the wife say to her husband: 'My dear, how could you take it into your head to dissect a heretic? Do you not know that these people always have the devil in their bodies? I will go and fetch a priest this minute to exorcise him.' At this proposal I shuddered, and mustering up what little courage I had still remaining I cried out aloud, 'Have mercy on me!' At length the Portuguese barber plucked up his spirits. He sewed up my wounds; his wife even nursed me. I was upon my legs at the end of fifteen days. The barber found me a place as lackey to a knight of Malta who was going to Venice, but finding that my master had no money to pay me my wages I entered the service of a Venetian merchant, and went with him to Constantinople. One day I took it into my head to step into a mosque, where I saw an old Iman and a very pretty young devotee who was saying her paternosters. Her bosom was uncovered, and between her breasts she had a beautiful bouquet of tulips, roses, anemones, ranunculus, hyacinths, and auriculas. She dropped her bouquet; I picked it up, and[Pg 157] presented it to her with a profound reverence. I was so long in delivering it that the Iman began to get angry, and seeing that I was a Christian he called out for help. They carried me before the cadi, who ordered me a hundred lashes on the soles of the feet and sent me to the galleys. I was chained to the very same galley and the same bench as the young Baron. On board this galley there were four young men from Marseilles, five Neapolitan priests, and two monks from Corfu, who told us similar adventures happened daily. The Baron maintained that he had suffered greater injustice than I, and I insisted that it was far more innocent to take up a bouquet and place it again on a woman's bosom than to be found stark naked with an Ichoglan. We were continually disputing, and received twenty lashes with a bull's pizzle when the concatenation of universal events brought you to our galley, and you were good enough to ransom us."

    "Well, my dear Pangloss," said Candide to him, "when you had been hanged, dissected, whipped, and were tugging at the oar, did you always think that everything happens for the best?"

    "I am still of my first opinion," answered Pangloss, "for I am a philosopher and I cannot[Pg 158] retract, especially as Leibnitz could never be wrong; and besides, the pre-established harmony is the finest thing in the world, and so is his plenum and materia subtilis."[Pg 159]


    XXIX

    HOW CANDIDE FOUND CUNEGONDE AND THE OLD WOMAN AGAIN.

    While Candide, the Baron, Pangloss, Martin, and Cacambo were relating their several adventures, were reasoning on the contingent or non-contingent events of the universe, disputing on effects and causes, on moral and physical evil, on liberty and necessity, and on the consolations a slave may feel even on a Turkish galley, they arrived at the house of the Transylvanian prince on the banks of the Propontis. The first objects which met their sight were Cunegonde and the old woman hanging towels out to dry.

    The Baron paled at this sight. The tender, loving Candide, seeing his beautiful Cunegonde embrowned, with blood-shot eyes, withered neck, wrinkled cheeks, and rough, red arms, recoiled three paces, seized with horror, and then advanced out of good manners. She embraced Candide and her brother; they embraced the old woman, and Candide ransomed them both.

    There was a small farm in the neighbourhood[Pg 160] which the old woman proposed to Candide to make a shift with till the company could be provided for in a better manner. Cunegonde did not know she had grown ugly, for nobody had told her of it; and she reminded Candide of his promise in so positive a tone that the good man durst not refuse her. He therefore intimated to the Baron that he intended marrying his sister.

    "I will not suffer," said the Baron, "such meanness on her part, and such insolence on yours; I will never be reproached with this scandalous thing; my sister's children would never be able to enter the church in Germany. No; my sister shall only marry a baron of the empire."

    Cunegonde flung herself at his feet, and bathed them with her tears; still he was inflexible.

    "Thou foolish fellow," said Candide; "I have delivered thee out of the galleys, I have paid thy ransom, and thy sister's also; she was a scullion, and is very ugly, yet I am so condescending as to marry her; and dost thou pretend to oppose the match? I should kill thee again, were I only to consult my anger."

    "Thou mayest kill me again," said the Baron, "but thou shalt not marry my sister, at least whilst I am living."[Pg 161]


    XXX

    THE CONCLUSION.

    At the bottom of his heart Candide had no wish to marry Cunegonde. But the extreme impertinence of the Baron determined him to conclude the match, and Cunegonde pressed him so strongly that he could not go from his word. He consulted Pangloss, Martin, and the faithful Cacambo. Pangloss drew up an excellent memorial, wherein he proved that the Baron had no right over his sister, and that according to all the laws of the empire, she might marry Candide with her left hand. Martin was for throwing the Baron into the sea; Cacambo decided that it would be better to deliver him up again to the captain of the galley, after which they thought to send him back to the General Father of the Order at Rome by the first ship. This advice was well received, the old woman approved it; they said not a word to his sister; the thing was executed for a little money, and they had the double pleasure of entrapping a Jesuit, and punishing the pride of a German baron.[Pg 162]

    It is natural to imagine that after so many disasters Candide married, and living with the philosopher Pangloss, the philosopher Martin, the prudent Cacambo, and the old woman, having besides brought so many diamonds from the country of the ancient Incas, must have led a very happy life. But he was so much imposed upon by the Jews that he had nothing left except his small farm; his wife became uglier every day, more peevish and unsupportable; the old woman was infirm and even more fretful than Cunegonde. Cacambo, who worked in the garden, and took vegetables for sale to Constantinople, was fatigued with hard work, and cursed his destiny. Pangloss was in despair at not shining in some German university. For Martin, he was firmly persuaded that he would be as badly off elsewhere, and therefore bore things patiently. Candide, Martin, and Pangloss sometimes disputed about morals and metaphysics. They often saw passing under the windows of their farm boats full of Effendis, Pashas, and Cadis, who were going into banishment to Lemnos, Mitylene, or Erzeroum. And they saw other Cadis, Pashas, and Effendis coming to supply the place of the exiles, and afterwards exiled in their turn. They saw heads decently impaled for presentation to the Sublime Porte. Such spectacles as these increased the number[Pg 163] of their dissertations; and when they did not dispute time hung so heavily upon their hands, that one day the old woman ventured to say to them:

    "I want to know which is worse, to be ravished a hundred times by negro pirates, to have a buttock cut off, to run the gauntlet among the Bulgarians, to be whipped and hanged at an auto-da-fé, to be dissected, to row in the galleys—in short, to go through all the miseries we have undergone, or to stay here and have nothing to do?"

    "It is a great question," said Candide.

    This discourse gave rise to new reflections, and Martin especially concluded that man was born to live either in a state of distracting inquietude or of lethargic disgust. Candide did not quite agree to that, but he affirmed nothing. Pangloss owned that he had always suffered horribly, but as he had once asserted that everything went wonderfully well, he asserted it still, though he no longer believed it.

    What helped to confirm Martin in his detestable principles, to stagger Candide more than ever, and to puzzle Pangloss, was that one day they saw Paquette and Friar Giroflée land at the farm in extreme misery. They had soon squandered their three thousand piastres, parted, were reconciled, quarrelled again, were thrown[Pg 164] into gaol, had escaped, and Friar Giroflée had at length become Turk. Paquette continued her trade wherever she went, but made nothing of it.

    "I foresaw," said Martin to Candide, "that your presents would soon be dissipated, and only make them the more miserable. You have rolled in millions of money, you and Cacambo; and yet you are not happier than Friar Giroflée and Paquette."

    "Ha!" said Pangloss to Paquette, "Providence has then brought you amongst us again, my poor child! Do you know that you cost me the tip of my nose, an eye, and an ear, as you may see? What a world is this!"

    And now this new adventure set them philosophising more than ever.

    In the neighbourhood there lived a very famous Dervish who was esteemed the best philosopher in all Turkey, and they went to consult him. Pangloss was the speaker.

    "Master," said he, "we come to beg you to tell why so strange an animal as man was made."

    "With what meddlest thou?" said the Dervish; "is it thy business?"

    "But, reverend father," said Candide, "there is horrible evil in this world."

    "What signifies it," said the Dervish, "whether there be evil or good? When his highness sends[Pg 165] a ship to Egypt, does he trouble his head whether the mice on board are at their ease or not?"

    "What, then, must we do?" said Pangloss.

    "Hold your tongue," answered the Dervish.

    "I was in hopes," said Pangloss, "that I should reason with you a little about causes and effects, about the best of possible worlds, the origin of evil, the nature of the soul, and the pre-established harmony."

    At these words, the Dervish shut the door in their faces.

    During this conversation, the news was spread that two Viziers and the Mufti had been strangled at Constantinople, and that several of their friends had been impaled. This catastrophe made a great noise for some hours. Pangloss, Candide, and Martin, returning to the little farm, saw a good old man taking the fresh air at his door under an orange bower. Pangloss, who was as inquisitive as he was argumentative, asked the old man what was the name of the strangled Mufti.

    "I do not know," answered the worthy man, "and I have not known the name of any Mufti, nor of any Vizier. I am entirely ignorant of the event you mention; I presume in general that they who meddle with the administration of public affairs die sometimes miserably, and that they deserve it; but I never trouble my head[Pg 166] about what is transacting at Constantinople; I content myself with sending there for sale the fruits of the garden which I cultivate."

    Having said these words, he invited the strangers into his house; his two sons and two daughters presented them with several sorts of sherbet, which they made themselves, with Kaimak enriched with the candied-peel of citrons, with oranges, lemons, pine-apples, pistachio-nuts, and Mocha coffee unadulterated with the bad coffee of Batavia or the American islands. After which the two daughters of the honest Mussulman perfumed the strangers' beards.

    "You must have a vast and magnificent estate," said Candide to the Turk.

    "I have only twenty acres," replied the old man; "I and my children cultivate them; our labour preserves us from three great evils—weariness, vice, and want."

    Candide, on his way home, made profound reflections on the old man's conversation.

    "This honest Turk," said he to Pangloss and Martin, "seems to be in a situation far preferable to that of the six kings with whom we had the honour of supping."

    "Grandeur," said Pangloss, "is extremely dangerous according to the testimony of philosophers. For, in short, Eglon, King of Moab,[Pg 167] was assassinated by Ehud; Absalom was hung by his hair, and pierced with three darts; King Nadab, the son of Jeroboam, was killed by Baasa; King Ela by Zimri; Ahaziah by Jehu; Athaliah by Jehoiada; the Kings Jehoiakim, Jeconiah, and Zedekiah, were led into captivity. You know how perished Crœsus, Astyages, Darius, Dionysius of Syracuse, Pyrrhus, Perseus, Hannibal, Jugurtha, Ariovistus, Cæsar, Pompey, Nero, Otho, Vitellius, Domitian, Richard II. of England, Edward II., Henry VI., Richard III., Mary Stuart, Charles I., the three Henrys of France, the Emperor Henry IV.! You know——"

    "I know also," said Candide, "that we must cultivate our garden."

    "You are right," said Pangloss, "for when man was first placed in the Garden of Eden, he was put there ut operaretur eum, that he might cultivate it; which shows that man was not born to be idle."

    "Let us work," said Martin, "without disputing; it is the only way to render life tolerable."

    The whole little society entered into this laudable design, according to their different abilities. Their little plot of land produced plentiful crops. Cunegonde was, indeed, very ugly, but she became an excellent pastry cook; Paquette worked at embroidery; the old woman looked after the[Pg 168] linen. They were all, not excepting Friar Giroflée, of some service or other; for he made a good joiner, and became a very honest man.

    Pangloss sometimes said to Candide:

    "There is a concatenation of events in this best of all possible worlds: for if you had not been kicked out of a magnificent castle for love of Miss Cunegonde: if you had not been put into the Inquisition: if you had not walked over America: if you had not stabbed the Baron: if you had not lost all your sheep from the fine country of El Dorado: you would not be here eating preserved citrons and pistachio-nuts."

    "All that is very well," answered Candide, "but let us cultivate our garden."[Pg 169]


    FOOTNOTES:

    [1] P. 2. The name Pangloss is derived from two Greek words signifying "all" and "language."

    [2] P. 8. The Abares were a tribe of Tartars settled on the shores of the Danube, who later dwelt in part of Circassia.

    [3] P. 15. Venereal disease was said to have been first brought from Hispaniola, in the West Indies, by some followers of Columbus who were later employed in the siege of Naples. From this latter circumstance it was at one time known as the Neapolitan disease.

    [4] P. 19. The great earthquake of Lisbon happened on the first of November, 1755.

    [5] P. 20. Such was the aversion of the Japanese to the Christian faith that they compelled Europeans trading with their islands to trample on the cross, renounce all marks of Christianity, and swear that it was not their religion. See chap. xi. of the voyage to Laputa in Swift's Gulliver's Travels.

    [6] P. 23. This auto-da-fé actually took place, some months after the earthquake, on June 20, 1756.

    [7] P. 23. The rejection of bacon convicting them, of course, of being Jews, and therefore fitting victims for an auto-da-fé.

    [8] P. 24. The San-benito was a kind of loose over-garment painted with flames, figures of devils, the victim's own portrait, etc., worn by persons condemned to death by the Inquisition when going to the stake on the occasion of an auto-da-fé. Those who expressed repentance for their errors wore a garment of the same kind covered with flames directed downwards, while[Pg 170] that worn by Jews, sorcerers, and renegades bore a St. Andrew's cross before and behind.

    [9] P. 26. "This Notre-Dame is of wood; every year she weeps on the day of her fête, and the people weep also. One day the preacher, seeing a carpenter with dry eyes, asked him how it was that he did not dissolve in tears when the Holy Virgin wept. 'Ah, my reverend father,' replied he, 'it is I who refastened her in her niche yesterday. I drove three great nails through her behind; it is then she would have wept if she had been able.'"—Voltaire, Mélanges.

    [10] P. 42. The following posthumous note of Voltaire's was first added to M. Beuchot's edition of his works issued in 1829; "See the extreme discretion of the author; there has not been up to the present any Pope named Urban X.; he feared to give a bastard to a known Pope. What circumspection! What delicacy of conscience!" The last Pope Urban was the eighth, and he died in 1644.

    [11] P. 45. Muley-Ismael was Emperor of Morocco from 1672 to 1727, and was a notoriously cruel tyrant.

    [12] P. 47. "Oh, what a misfortune to be an eunuch!"

    [13] P. 48. Carlo Broschi, called Farinelli, an Italian singer, born at Naples in 1705, without being exactly Minister, governed Spain under Ferdinand VI.; he died in 1782. He has been made one of the chief persons in one of the comic operas of MM. Auber and Scribe.

    [14] P. 53. Jean Robeck, a Swede, who was born in 1672, will be found mentioned in Rousseau's Nouvelle Héloïse. He drowned himself in the Weser at Bremen in 1729, and was the author of a Latin treatise on voluntary death, first printed in 1735.

    [15] P. 60. A spontoon was a kind of half-pike, a[Pg 171] military weapon carried by officers of infantry and used as a medium for signalling orders to the regiment.

    [16] P. 64. Later Voltaire substituted the name of the Father Croust for that of Didrie. Of Croust he said in the Dictionnaire Philosophique that he was "the most brutal of the Society."

    [17] P. 68. By the Journal of Trevoux Voltaire meant a critical periodical printed by the Jesuits at Trevoux under the title of Mémoires pour servir à l'Historie des Sciences et des Beaux-Arts. It existed from 1701 until 1767, during which period its title underwent many changes.

    [18] P. 76. It has been suggested that Voltaire, in speaking of red sheep, referred to the llama, a South American ruminant allied to the camel. These animals are sometimes of a reddish colour, and were notable as pack-carriers and for their fleetness.

    [19] P. 78. The first English translator curiously gives "a tourene of bouilli that weighed two hundred pounds," as the equivalent of "un contour bouilli qui pesait deux cent livres." The French editor of the 1869 reprint points out that the South American vulture, or condor, is meant; the name of this bird, it may be added, is taken from "cuntur," that given it by the aborigines.

    [20] P. 90. Spanish half-crowns.

    [21] P. 99. Socinians; followers of the teaching of Lalius and Faustus Socinus (16th century), which denied the doctrine of the Trinity, the deity of Christ, the personality of the devil, the native and total depravity of man, the vicarious atonement and eternal punishment. The Socinians are now represented by the Unitarians. Manicheans; followers of Manes or Manichæus (3rd century), a Persian who maintained that there are two principles, the one good and the other evil, each equally powerful in the government of the world.

    [Pg 172]

    [22] P. 107. In the 1759 editions, in place of the long passage in brackets from here to page 215, there was only the following: "'Sir,' said the Perigordian Abbé to him, 'have you noticed that young person who has so roguish a face and so fine a figure? You may have her for ten thousand francs a month, and fifty thousand crowns in diamonds.' 'I have only a day or two to give her,' answered Candide, 'because I have a rendezvous at Venice.' In the evening after supper the insinuating Perigordian redoubled his politeness and attentions."

    [23] P. 108. The play referred to is supposed to be "Le Comte d'Essex," by Thomas Corneille.

    [24] P. 108. In France actors were at one time looked upon as excommunicated persons, not worthy of burial in holy ground or with Christian rites. In 1730 the "honours of sepulture" were refused to Mademoiselle Lecouvreur (doubtless the Miss Monime of this passage). Voltaire's miscellaneous works contain a paper on the matter.

    [25] P. 109. Élie-Catherine Fréron was a French critic (1719-1776) who incurred the enmity of Voltaire. In 1752 Fréron, in Lettres sur quelques écrits du temps, wrote pointedly of Voltaire as one who chose to be all things to all men, and Voltaire retaliated by references such as these in Candide.

    [26] P. 111. Gabriel Gauchat (1709-1779), French ecclesiastical writer, was author of a number of works on religious subjects.

    [27] P. 112. Nicholas Charles Joseph Trublet (1697-1770) was a French writer whose criticism of Voltaire was revenged in passages such as this one in Candide, and one in the Pauvre Diable beginning:

    L'abbé Trublet avait alors le rage
    D'être à Paris un petit personage.

    [Pg 173]

    [28] P. 120. Damiens, who attempted the life of Louis XV. in 1757, was born at Arras, capital of Artois (Atrébatie).

    [29] P. 120. On May 14, 1610, Ravaillac assassinated Henry VI.

    [30] P. 120. On December 27, 1594, Jean Châtel attempted to assassinate Henry IV.

    [31] P. 122. This same curiously inept criticism of the war which cost France her American provinces occurs in Voltaire's Memoirs, wherein he says, "In 1756 England made a piratical war upon France for some acres of snow." See also his Précis du Siècle de Louis XV.

    [32] P. 123. Admiral Byng was shot on March 14, 1757.

    [33] P. 129. Commenting upon this passage, M. Sarcey says admirably: "All is there! In those ten lines Voltaire has gathered all the griefs and all the terrors of these creatures; the picture is admirable for its truth and power! But do you not feel the pity and sympathy of the painter? Here irony becomes sad, and in a way an avenger. Voltaire cries out with horror against the society which throws some of its members into such an abyss. He has his 'Bartholomew' fever; we tremble with him through contagion."

    [34] P. 142. The following particulars of the six monarchs may prove not uninteresting. Achmet III. (b. 1673, d. 1739) was dethroned in 1730. Ivan VI. (b. 1740, d. 1762) was dethroned in 1741. Charles Edward Stuart, the Pretender (b. 1720, d. 1788). Auguste III. (b. 1696, d. 1763). Stanislaus (b. 1682, d. 1766). Theodore (b. 1690, d. 1755). It will be observed that, although quite impossible for the six kings ever to have met, five of them might have been made to do so without any anachronism.

    [35] P. 149. François Leopold Ragotsky (1676-1735).


    Typographical errors corrected in text:

    Page xiv: Chapter XIII heading in Table of Contents amended to match chapter heading on page 54.

    Page 2: metaphysicotheo-logico-cosmolo-nigology amended to metaphysico-theologico-cosmolo-nigology.

    Page 158: Liebnitz amended to Leibnitz.

    Page 168: perserved amended to preserved.

    Page 172: rougish amended to roguish; crows amended to crowns.

    Where there is an equal number of instances of a word being hyphenated and unhyphenated, both versions of the word have been retained: dung-hill/dunghill; and new-comers/newcomers.

    A single footnote on page 90 has been moved to the endnotes, and the notes numbers re-indexed. A page reference was added to the moved footnote to match the format of other endnotes.

    Modern Library blurb: "mail complete list of titles" left as is.

    There are two instances of Massa Carara (pp. 43 and 45) and one instance of Massa-Carrara (page ix). As this latter is in the Introduction, i.e. distinct from the book proper, it has been retained.

    The different spellings of Cunégonde (which occurs only in the Introduction (page viii)) and Robeck (which occurs in the Notes [p. 170]; spelt Robek in the text [p. 53]) have been retained for the same reason.


    
    
    
    
    
    End of the Project Gutenberg EBook of Candide, by Voltaire
    
    *** END OF THIS PROJECT GUTENBERG EBOOK CANDIDE ***
    
    ***** This file should be named 19942-h.htm or 19942-h.zip *****
    This and all associated files of various formats will be found in:
            http://www.gutenberg.org/1/9/9/4/19942/
    
    Produced by Chuck Greif, Fox in the Stars and the Online
    Distributed Proofreading Team at http://www.pgdp.net
    
    
    Updated editions will replace the previous one--the old editions
    will be renamed.
    
    Creating the works from public domain print editions means that no
    one owns a United States copyright in these works, so the Foundation
    (and you!) can copy and distribute it in the United States without
    permission and without paying copyright royalties.  Special rules,
    set forth in the General Terms of Use part of this license, apply to
    copying and distributing Project Gutenberg-tm electronic works to
    protect the PROJECT GUTENBERG-tm concept and trademark.  Project
    Gutenberg is a registered trademark, and may not be used if you
    charge for the eBooks, unless you receive specific permission.  If you
    do not charge anything for copies of this eBook, complying with the
    rules is very easy.  You may use this eBook for nearly any purpose
    such as creation of derivative works, reports, performances and
    research.  They may be modified and printed and given away--you may do
    practically ANYTHING with public domain eBooks.  Redistribution is
    subject to the trademark license, especially commercial
    redistribution.
    
    
    
    *** START: FULL LICENSE ***
    
    THE FULL PROJECT GUTENBERG LICENSE
    PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK
    
    To protect the Project Gutenberg-tm mission of promoting the free
    distribution of electronic works, by using or distributing this work
    (or any other work associated in any way with the phrase "Project
    Gutenberg"), you agree to comply with all the terms of the Full Project
    Gutenberg-tm License (available with this file or online at
    http://gutenberg.org/license).
    
    
    Section 1.  General Terms of Use and Redistributing Project Gutenberg-tm
    electronic works
    
    1.A.  By reading or using any part of this Project Gutenberg-tm
    electronic work, you indicate that you have read, understand, agree to
    and accept all the terms of this license and intellectual property
    (trademark/copyright) agreement.  If you do not agree to abide by all
    the terms of this agreement, you must cease using and return or destroy
    all copies of Project Gutenberg-tm electronic works in your possession.
    If you paid a fee for obtaining a copy of or access to a Project
    Gutenberg-tm electronic work and you do not agree to be bound by the
    terms of this agreement, you may obtain a refund from the person or
    entity to whom you paid the fee as set forth in paragraph 1.E.8.
    
    1.B.  "Project Gutenberg" is a registered trademark.  It may only be
    used on or associated in any way with an electronic work by people who
    agree to be bound by the terms of this agreement.  There are a few
    things that you can do with most Project Gutenberg-tm electronic works
    even without complying with the full terms of this agreement.  See
    paragraph 1.C below.  There are a lot of things you can do with Project
    Gutenberg-tm electronic works if you follow the terms of this agreement
    and help preserve free future access to Project Gutenberg-tm electronic
    works.  See paragraph 1.E below.
    
    1.C.  The Project Gutenberg Literary Archive Foundation ("the Foundation"
    or PGLAF), owns a compilation copyright in the collection of Project
    Gutenberg-tm electronic works.  Nearly all the individual works in the
    collection are in the public domain in the United States.  If an
    individual work is in the public domain in the United States and you are
    located in the United States, we do not claim a right to prevent you from
    copying, distributing, performing, displaying or creating derivative
    works based on the work as long as all references to Project Gutenberg
    are removed.  Of course, we hope that you will support the Project
    Gutenberg-tm mission of promoting free access to electronic works by
    freely sharing Project Gutenberg-tm works in compliance with the terms of
    this agreement for keeping the Project Gutenberg-tm name associated with
    the work.  You can easily comply with the terms of this agreement by
    keeping this work in the same format with its attached full Project
    Gutenberg-tm License when you share it without charge with others.
    
    1.D.  The copyright laws of the place where you are located also govern
    what you can do with this work.  Copyright laws in most countries are in
    a constant state of change.  If you are outside the United States, check
    the laws of your country in addition to the terms of this agreement
    before downloading, copying, displaying, performing, distributing or
    creating derivative works based on this work or any other Project
    Gutenberg-tm work.  The Foundation makes no representations concerning
    the copyright status of any work in any country outside the United
    States.
    
    1.E.  Unless you have removed all references to Project Gutenberg:
    
    1.E.1.  The following sentence, with active links to, or other immediate
    access to, the full Project Gutenberg-tm License must appear prominently
    whenever any copy of a Project Gutenberg-tm work (any work on which the
    phrase "Project Gutenberg" appears, or with which the phrase "Project
    Gutenberg" is associated) is accessed, displayed, performed, viewed,
    copied or distributed:
    
    This eBook is for the use of anyone anywhere at no cost and with
    almost no restrictions whatsoever.  You may copy it, give it away or
    re-use it under the terms of the Project Gutenberg License included
    with this eBook or online at www.gutenberg.org
    
    1.E.2.  If an individual Project Gutenberg-tm electronic work is derived
    from the public domain (does not contain a notice indicating that it is
    posted with permission of the copyright holder), the work can be copied
    and distributed to anyone in the United States without paying any fees
    or charges.  If you are redistributing or providing access to a work
    with the phrase "Project Gutenberg" associated with or appearing on the
    work, you must comply either with the requirements of paragraphs 1.E.1
    through 1.E.7 or obtain permission for the use of the work and the
    Project Gutenberg-tm trademark as set forth in paragraphs 1.E.8 or
    1.E.9.
    
    1.E.3.  If an individual Project Gutenberg-tm electronic work is posted
    with the permission of the copyright holder, your use and distribution
    must comply with both paragraphs 1.E.1 through 1.E.7 and any additional
    terms imposed by the copyright holder.  Additional terms will be linked
    to the Project Gutenberg-tm License for all works posted with the
    permission of the copyright holder found at the beginning of this work.
    
    1.E.4.  Do not unlink or detach or remove the full Project Gutenberg-tm
    License terms from this work, or any files containing a part of this
    work or any other work associated with Project Gutenberg-tm.
    
    1.E.5.  Do not copy, display, perform, distribute or redistribute this
    electronic work, or any part of this electronic work, without
    prominently displaying the sentence set forth in paragraph 1.E.1 with
    active links or immediate access to the full terms of the Project
    Gutenberg-tm License.
    
    1.E.6.  You may convert to and distribute this work in any binary,
    compressed, marked up, nonproprietary or proprietary form, including any
    word processing or hypertext form.  However, if you provide access to or
    distribute copies of a Project Gutenberg-tm work in a format other than
    "Plain Vanilla ASCII" or other format used in the official version
    posted on the official Project Gutenberg-tm web site (www.gutenberg.org),
    you must, at no additional cost, fee or expense to the user, provide a
    copy, a means of exporting a copy, or a means of obtaining a copy upon
    request, of the work in its original "Plain Vanilla ASCII" or other
    form.  Any alternate format must include the full Project Gutenberg-tm
    License as specified in paragraph 1.E.1.
    
    1.E.7.  Do not charge a fee for access to, viewing, displaying,
    performing, copying or distributing any Project Gutenberg-tm works
    unless you comply with paragraph 1.E.8 or 1.E.9.
    
    1.E.8.  You may charge a reasonable fee for copies of or providing
    access to or distributing Project Gutenberg-tm electronic works provided
    that
    
    - You pay a royalty fee of 20% of the gross profits you derive from
         the use of Project Gutenberg-tm works calculated using the method
         you already use to calculate your applicable taxes.  The fee is
         owed to the owner of the Project Gutenberg-tm trademark, but he
         has agreed to donate royalties under this paragraph to the
         Project Gutenberg Literary Archive Foundation.  Royalty payments
         must be paid within 60 days following each date on which you
         prepare (or are legally required to prepare) your periodic tax
         returns.  Royalty payments should be clearly marked as such and
         sent to the Project Gutenberg Literary Archive Foundation at the
         address specified in Section 4, "Information about donations to
         the Project Gutenberg Literary Archive Foundation."
    
    - You provide a full refund of any money paid by a user who notifies
         you in writing (or by e-mail) within 30 days of receipt that s/he
         does not agree to the terms of the full Project Gutenberg-tm
         License.  You must require such a user to return or
         destroy all copies of the works possessed in a physical medium
         and discontinue all use of and all access to other copies of
         Project Gutenberg-tm works.
    
    - You provide, in accordance with paragraph 1.F.3, a full refund of any
         money paid for a work or a replacement copy, if a defect in the
         electronic work is discovered and reported to you within 90 days
         of receipt of the work.
    
    - You comply with all other terms of this agreement for free
         distribution of Project Gutenberg-tm works.
    
    1.E.9.  If you wish to charge a fee or distribute a Project Gutenberg-tm
    electronic work or group of works on different terms than are set
    forth in this agreement, you must obtain permission in writing from
    both the Project Gutenberg Literary Archive Foundation and Michael
    Hart, the owner of the Project Gutenberg-tm trademark.  Contact the
    Foundation as set forth in Section 3 below.
    
    1.F.
    
    1.F.1.  Project Gutenberg volunteers and employees expend considerable
    effort to identify, do copyright research on, transcribe and proofread
    public domain works in creating the Project Gutenberg-tm
    collection.  Despite these efforts, Project Gutenberg-tm electronic
    works, and the medium on which they may be stored, may contain
    "Defects," such as, but not limited to, incomplete, inaccurate or
    corrupt data, transcription errors, a copyright or other intellectual
    property infringement, a defective or damaged disk or other medium, a
    computer virus, or computer codes that damage or cannot be read by
    your equipment.
    
    1.F.2.  LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for the "Right
    of Replacement or Refund" described in paragraph 1.F.3, the Project
    Gutenberg Literary Archive Foundation, the owner of the Project
    Gutenberg-tm trademark, and any other party distributing a Project
    Gutenberg-tm electronic work under this agreement, disclaim all
    liability to you for damages, costs and expenses, including legal
    fees.  YOU AGREE THAT YOU HAVE NO REMEDIES FOR NEGLIGENCE, STRICT
    LIABILITY, BREACH OF WARRANTY OR BREACH OF CONTRACT EXCEPT THOSE
    PROVIDED IN PARAGRAPH F3.  YOU AGREE THAT THE FOUNDATION, THE
    TRADEMARK OWNER, AND ANY DISTRIBUTOR UNDER THIS AGREEMENT WILL NOT BE
    LIABLE TO YOU FOR ACTUAL, DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE OR
    INCIDENTAL DAMAGES EVEN IF YOU GIVE NOTICE OF THE POSSIBILITY OF SUCH
    DAMAGE.
    
    1.F.3.  LIMITED RIGHT OF REPLACEMENT OR REFUND - If you discover a
    defect in this electronic work within 90 days of receiving it, you can
    receive a refund of the money (if any) you paid for it by sending a
    written explanation to the person you received the work from.  If you
    received the work on a physical medium, you must return the medium with
    your written explanation.  The person or entity that provided you with
    the defective work may elect to provide a replacement copy in lieu of a
    refund.  If you received the work electronically, the person or entity
    providing it to you may choose to give you a second opportunity to
    receive the work electronically in lieu of a refund.  If the second copy
    is also defective, you may demand a refund in writing without further
    opportunities to fix the problem.
    
    1.F.4.  Except for the limited right of replacement or refund set forth
    in paragraph 1.F.3, this work is provided to you 'AS-IS' WITH NO OTHER
    WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
    WARRANTIES OF MERCHANTIBILITY OR FITNESS FOR ANY PURPOSE.
    
    1.F.5.  Some states do not allow disclaimers of certain implied
    warranties or the exclusion or limitation of certain types of damages.
    If any disclaimer or limitation set forth in this agreement violates the
    law of the state applicable to this agreement, the agreement shall be
    interpreted to make the maximum disclaimer or limitation permitted by
    the applicable state law.  The invalidity or unenforceability of any
    provision of this agreement shall not void the remaining provisions.
    
    1.F.6.  INDEMNITY - You agree to indemnify and hold the Foundation, the
    trademark owner, any agent or employee of the Foundation, anyone
    providing copies of Project Gutenberg-tm electronic works in accordance
    with this agreement, and any volunteers associated with the production,
    promotion and distribution of Project Gutenberg-tm electronic works,
    harmless from all liability, costs and expenses, including legal fees,
    that arise directly or indirectly from any of the following which you do
    or cause to occur: (a) distribution of this or any Project Gutenberg-tm
    work, (b) alteration, modification, or additions or deletions to any
    Project Gutenberg-tm work, and (c) any Defect you cause.
    
    
    Section  2.  Information about the Mission of Project Gutenberg-tm
    
    Project Gutenberg-tm is synonymous with the free distribution of
    electronic works in formats readable by the widest variety of computers
    including obsolete, old, middle-aged and new computers.  It exists
    because of the efforts of hundreds of volunteers and donations from
    people in all walks of life.
    
    Volunteers and financial support to provide volunteers with the
    assistance they need, is critical to reaching Project Gutenberg-tm's
    goals and ensuring that the Project Gutenberg-tm collection will
    remain freely available for generations to come.  In 2001, the Project
    Gutenberg Literary Archive Foundation was created to provide a secure
    and permanent future for Project Gutenberg-tm and future generations.
    To learn more about the Project Gutenberg Literary Archive Foundation
    and how your efforts and donations can help, see Sections 3 and 4
    and the Foundation web page at http://www.pglaf.org.
    
    
    Section 3.  Information about the Project Gutenberg Literary Archive
    Foundation
    
    The Project Gutenberg Literary Archive Foundation is a non profit
    501(c)(3) educational corporation organized under the laws of the
    state of Mississippi and granted tax exempt status by the Internal
    Revenue Service.  The Foundation's EIN or federal tax identification
    number is 64-6221541.  Its 501(c)(3) letter is posted at
    http://pglaf.org/fundraising.  Contributions to the Project Gutenberg
    Literary Archive Foundation are tax deductible to the full extent
    permitted by U.S. federal laws and your state's laws.
    
    The Foundation's principal office is located at 4557 Melan Dr. S.
    Fairbanks, AK, 99712., but its volunteers and employees are scattered
    throughout numerous locations.  Its business office is located at
    809 North 1500 West, Salt Lake City, UT 84116, (801) 596-1887, email
    business@pglaf.org.  Email contact links and up to date contact
    information can be found at the Foundation's web site and official
    page at http://pglaf.org
    
    For additional contact information:
         Dr. Gregory B. Newby
         Chief Executive and Director
         gbnewby@pglaf.org
    
    
    Section 4.  Information about Donations to the Project Gutenberg
    Literary Archive Foundation
    
    Project Gutenberg-tm depends upon and cannot survive without wide
    spread public support and donations to carry out its mission of
    increasing the number of public domain and licensed works that can be
    freely distributed in machine readable form accessible by the widest
    array of equipment including outdated equipment.  Many small donations
    ($1 to $5,000) are particularly important to maintaining tax exempt
    status with the IRS.
    
    The Foundation is committed to complying with the laws regulating
    charities and charitable donations in all 50 states of the United
    States.  Compliance requirements are not uniform and it takes a
    considerable effort, much paperwork and many fees to meet and keep up
    with these requirements.  We do not solicit donations in locations
    where we have not received written confirmation of compliance.  To
    SEND DONATIONS or determine the status of compliance for any
    particular state visit http://pglaf.org
    
    While we cannot and do not solicit contributions from states where we
    have not met the solicitation requirements, we know of no prohibition
    against accepting unsolicited donations from donors in such states who
    approach us with offers to donate.
    
    International donations are gratefully accepted, but we cannot make
    any statements concerning tax treatment of donations received from
    outside the United States.  U.S. laws alone swamp our small staff.
    
    Please check the Project Gutenberg Web pages for current donation
    methods and addresses.  Donations are accepted in a number of other
    ways including checks, online payments and credit card donations.
    To donate, please visit: http://pglaf.org/donate
    
    
    Section 5.  General Information About Project Gutenberg-tm electronic
    works.
    
    Professor Michael S. Hart is the originator of the Project Gutenberg-tm
    concept of a library of electronic works that could be freely shared
    with anyone.  For thirty years, he produced and distributed Project
    Gutenberg-tm eBooks with only a loose network of volunteer support.
    
    
    Project Gutenberg-tm eBooks are often created from several printed
    editions, all of which are confirmed as Public Domain in the U.S.
    unless a copyright notice is included.  Thus, we do not necessarily
    keep eBooks in compliance with any particular paper edition.
    
    
    Most people start at our Web site which has the main PG search facility:
    
         http://www.gutenberg.org
    
    This Web site includes information about Project Gutenberg-tm,
    including how to make donations to the Project Gutenberg Literary
    Archive Foundation, how to help produce our new eBooks, and how to
    subscribe to our email newsletter to hear about new eBooks.
    
    
    
    PK Õ:eJimages/UT ±®»X±®»Xux PK :cJņ ČĒéĒéimages/001_th.jpgUT R ¹XR ¹Xux ’Ų’ąJFIFHH’į€ExifMM*>F(‡iNHH0210 0100 ’’’įphttp://ns.adobe.com/xap/1.0/ 72 72 Inch Exif Version 2.1 FlashPix Version 1.0 Uncalibrated ’ŪC    %!'&$!$#).;2),8,#$3F48=?BCB(1HMH@M;AB?’Ā J’ĒڹńŁēžśä.uļ‚Š¬ńw» ˜0é(i œyŪ{O¾|Qņ²vĒž¶„Ö4Łp¢%| ©ĀĄÉ½fmڤ,³‡‹KĮFč¾d 8ąéĀɵꋜ¾Ō5Ķ‚N&±}¢)ĀsFĻ[Ū§=|ćÕ«U½'̌åĒ.ˉif6§ėÅÖŁ½©¬ćU†®_3‰šw2…~·=~ryéY­ifQāŹ,«X™Gė[<†mżÆ5ō5,ņY¼L{ee“œā'žWЦ} “.†dé£ŹüõeŗõT‡ž·¹i°yœ®ļOŒó—³žĆFÜéž<–¾öU “c&mēŁėŗŌeiŸ²w@<Ī&ģ”ŪVYŚV[ļpTéhH)ɦ—P©¤™J½‰»SķØĒ§š°—‘nå¼ Gr±š’z*°U,Ėģr•ķ¬RņŅ^F̟±óøF h­'¢©‘Ś‹ĮšŒmµÅ#®„n’µź–œeŅ1SŖw 9 ¤T¢-ņ±uÕź}¹ģtż¬[šMŽ&·÷…fŖ—łźģuy²šSznše±¶ūCĪ2½V›qĶ“²‘­¢µnFēÜüē•kNlįåu—V˜ŁJ¬ÖÓHzS×¶ ¾ŒeK)”ĖęvÆk­RŅąä¬õĮɧ8ņ±gĻ»=Ŗ0įwUT­vĘrŌØ–wŗĘˆe2Qs.n¹¬R]ór¹•y;JP1ļlķ`ģ“ZüÕķXØ.Tŗ¹‡²Õā¼½Ōōc+·ÅVÆv,½žnc·5ؾi6„ŅüŃoTˆDt(ŌXĪ×`’}¢s„~ƒSŃ žęö·zÆPl÷Ÿk4]YŠś€@OUŖ‹wI“ę—®šęÆP·Tęlµ}Ģ–bäś›+?5ļ™”ÅŲĻ=÷Į<ĪĶk R¢¬·Š«(TАŖhže©,ā"ÅYѤ|Ļbu~€¬{eōšĻ_]O#!”"]ź5¢“żī·”%ŗŁXi)ĵ”<ŵŖßŠS“V’GŹźwŁ” ģax—‹ÆLUålU­̚Żlć4etkoiYƒrźĪœČsQ®iŌ]V&!$ct[LKhø;-s—·¹j¼+ĘZ'™ĪÖ#D„•&ć"]XcRŠ=C:—¶ø<+õÅ|¾$įŻ]‹¦^2°(Ā÷ I•ŃüÉn6” ”+ 舮īL=źÜę™b‘=8‡€}”gšœÜ+‹ uÓķ+Ģ–ēh"3™wäŌ”ĢÅ%Åŗ:P‹`ī`N­d¦“īŠĮ§5É8ŪgœĘŹY ©’:7¹=ĀĻļ}ź­ƒ.–R ŁuF¹d¤ŗ-۬ߕѷIÓŚB¹hķ)÷ģ#m-£™M²ŌT‰–^-m¶‚QSD+µkņĪøƒēÄ*ōmr‡iū-ć$¹Y)ĖåńnQ,ń›Ey™Š½"ų–õ(yŌ«é¶ī=’ZC:„^łćīńvÜOh&Y)9-dęĢŻzęųüŽŠ³ž€Ķ„;ĘŠ:mR2Æ9pŻgQŹøi+¤]‡§KXB½HńDnÆH, V«× eÖŗĘńQ€é«•+§(ū!£™bfnŠ~Ē~-jµJ€C¢ęEŒt2ļ+¬÷Ē76ģ‘õ>¦4S*GWPńź—G IŻe@hŒˆ4£ūā1<Šq„R$ććüóÉ}Źžõfm £§S±Œ=ts#ĖH›('Fd“O]/\ß+žĄqdz·ć,ZGŲēŁĒ³TĘ­Ōēž^YN-ŲV«Øņ߄–G©vcī#RcB2ŪDÕ5ä[^R°»³eĖKCiuL»RŌå~ĻL‚ī>śéN-68z“~R™Ņ ĀĖģ é˜6/-óNMQµm¬ WˆyįĻ~É/³{õ>”ķ¹ņOE÷2±Ö¤¢¬ā ø[µŸ]zžGĘW!…Ž,¢bQ®U4qϼšMč&rŚÖ—OØ6Æ #ś})ä}õčy]®£)ķ›ŠäA҉ń룶ĶÉŻĶęmõ%”-²‘9Ļ­Õw6 ž—ŠaIøź[¶QŚ\¦rŪ¾ō6zƜ"œīˆgÖ |ūApP`T]ˉźśvÉ +Õč»EĮ…AuXeÄ_'ŽO™ŠĢźnƞĖMĶyCūj·ńa¶•[Ő¬ÅŽ}K4’nߦ}uē©'1¢™¼ēžGMYH '7śGńŽēķ VėŠ³Ś¾RÜUĪ$¹b­¢“ĻsŌ¶ŠevµU¬ss‹‹õhøīŸ‘Ök§ #]‹‡m©ŗšƒ©HBpįüōī]Ļ©ōŒÖŒf‰üžRŗ„’ ±yHRU£™Śä«¤£¢”Aė{•ˆ³nųæ¾ō¬Søpš2ŗAšŁ¬ˆĆÖ$Ÿ§YRĖ]cäµįĆx6ŽÉʶę? z6³mµz"Ę¬ÆØMhoiŸŹÆv ź?ŁxėĢ—~€Rl9·š\ õmß=2¾¼&“3k O9‘¹S£›õh³zPąŅ‘±Ś}Ļļ/ Ķ’‰KčfhIøR ä<³%ś“éVž6ēž•AƒÆm|'ē<(m|R .ŪŹikĆ’VEN–÷¶®=9į%ŗQĒņƒwœ)×½ś€²B~.· !–ˆf–[0åS«En>Ē\™“ŖIpƤ‰ųŽ.1’šN,±½'q\„¬hFkg±€KŸcV~&ÉFw%·œŹÄ–xśäØŪŽęaѾ¬BĮ]ĢŚÉe3Ō%”I™7[y 7§¶ŠiJ°vśÆdi,ŅQ§vš‡«čo=jž¤Už »Yø­®«-ołŪ~Ś[é¶čŲż¦*śŹx÷]æ•’ŅmU–‘œYā&©öJõ¾£ÖƒŸ=qī6Å «‡rѐׄéךZš~æ y˜Ym`sD›±EŌ^Üé –²C?œ¦9›«Źµ—žˆ—†ē«—5K\W3ušžŒeó^į·Ŗ.9GÄÕQ?=:÷ĽLGĻ}ōļŸRéĀ-¼k®‰ęNŠ=ėy÷ĻTM_U98C®”ģ[ŽU=ćŽzóŸķÓVö;ĮÉϾūÉÉĻ}yļ §žž€’Ä1! "#$145%02@A3BP`’ŚĶČ«Ē_žµ~Š÷!Rd”Å—!ŁĶ.o~$ƒ¦%„“E±˜¹Üfgq™Ā^½Ę^wxŪ™×Źn,łjŹ^wIšwIx–S4ī²óŗKĪė/;¤¼īs3¹Ģ×»K×¼JĪń+ÖZēt™ŅfwI˜¶31,%¢÷9™ÜfbĪ–¹ÕJΦRēU)3Ɩ˜–Ń;Œ¼Kz÷I™Ż„ė[<Ņ„p.ŖdĮ›–ÖX=©ÜI«-tÄ“ĀæbEÆĒ4nPÄiČJę‹ˆŽdIŇ5¢ Ž„†‹’'‰įRb£)ć5Qr]a‚Lyœń°PŹhé«TVjw8éÕ­Ä¶fwagtŠø;:õµźˆxĘt˜ˆŹQį'īšr±ŖR®tļLé×TŽš¶ēh"O*öٌXåē\BW—Ūa^ CƒŸī‡%Ih±ć0“ÜAś.×+!Ą—–ĪF×Pż×Ó%=gŁŹQ¼īÕīj+`ę>r}.Õ½‰ŗ—!Y” Ęv~Ķī½?äxLŃf)ŹĪ‚N%lœJ¹%<…ÉPZųŠ“œ‹0 ­Š7£….,FqĮdŽ|›^cU)ų“¤å­<”ĀsĀų«])'FčåEˆSŖxK‰ iT"TeŒĒIz±zسü¬ŒéÕtIņ4ˆ÷ š×;č’9"Ų€Ģż‹ļ“„]fš‘÷‰ü~¹ž ß·yu2®¬®ę""52dAÉa1F”ųć‡Q½œU5Ė:ž^J²[Q··¹t`Dł2l ŒuHéćNJ½LųĶK²i&cäbk£,zö5Hķ0 !lIķTs}WßmNؖ<&.éhøŸ\—×DbFW©„'„•81p—%W%¼½eOi©?bĪ/Jjų2>Ž…č’%£?*Ŗ©Ā¶»ØĘ5¬nN®†¼N ė:&圊,JPo˜Tųµ/pęÜÄGŠ’K·śÆÓåé“ī<&ųšÅbŖ#pņQā\‘ųņ ü„øoG__Ō#ėL“g,x­Ŗ‰Ļ“ÅU k˜ŪˆŹ”›ė’@É!ųõ²£YĒ2”Ę©ą°{Ēžr,ųaÕE’ĪŚöäa˜mŗŒ¤¾F™ļpŖį&T§ź.nęGr†Ŗóģ*½¶<'&Ł£ š7™Ž"»9.äE” ls¼+·ĖFdŻEF ¶‰‚›5dAdĆ×éĖzŖu¢Č±3Īœe¤LZ„„|7æqAŚ*yVÓH%ĒF› YlA†Āļ “W•Žrž;Y īßćé¾]!Öż’ / ŻDń¹ īC !GVDVŁG^Säx²ź&BšHŖ·AŠö²«S<1„1ģ„F‚ķõKŠ9cķpCh‡ÅāaĄŲ2:4ŁĶdŽ€sŽ%:5SĀZO@²6ΤdaYé¾ūZļ¾įkī²fā­Ą6ĕ© pä\7iŽNO:®žcTx؊’iŃU•rˆ°įŠ#2źZ¦VEé£~łŲV:(ć=ö5jÜaķ¹:!mä”äžÕ‹$‘_C$‡Ń}§.¹éü-;Ź“ģ0¦‘ Q8mˆ² ĢŹÉ §Ą|RDµ r4ĄIōL’Č ­ ˟ż`£=‚iĄ3²tWE‘ɏ5#Å vT¤OjĮ–č§QńæoĄ©TK©ś†ņ‘ę'0ŅąRN†ŽˆØI:­¢$ŸXÜ8–+ād»tLkM.LXģŒč蚑ļīe$ \‹|qåēWtUwņ‰1boiĀż> bž”ĀŃu±Ž^\™W¤`ši5³Š…˜cfØÖ£Ŗ}Ž7¹Ž§+Ÿa3]²„ŗTgGm$]æÓ!#Ęp–-`ˆį<&IšĒ«Šbæ_>5XÉ"¶šFĀp¾ūJÕłī_’¬Š¤«P•Āh äö£&”|¶‹Ū2P¹g@lc®‘%[IŸ"ŽzH­ij›+oUKć½5›W#lÉčŒŲ©ŠÕD”ݲczYĄ'4r=šŖ“ī<-?#FذŲia"0˜Ydkܤ|ļūR™VPz¦Eå²LŗµĘ6Įäujśsc>VK kāāi·_*år­WłL]7RY óļźwvüŗüub|÷ -; 4-”b C­õIRN|hKĖ‚ŖdĮ>ŗls2@¬ėś„¬Ÿ¢ŪEHēƒŅRt‚e XŖÄ@9Žfŗb’ņWÉ{e©7ŲV7m~]~:ÆļųYžD%xJĻ•ŠĮµ'ŸØ›?. 7E˜­ø¤lй]Ą]=Œ’×ČS׃¬:źž•§>kb3–I*Ōē”ŽqI¦DΦĄTTjÅ·[.W.Xć©µ¹všĄ®ó?…§äEǁĀDD4É3Ö¾µ±ųNV’Ę¢nܙ%¢4Ą¾©Ģ‹t˜GH¹^I'ž¤„Ž43bRÆ5\›]ƒBJ¢¦1ój¢xÄ]¤Ģ Ī?Ž®×øp³ü•£a<‘­Qi“¤¶,vī!UņŅć©ąĒłźŖGķz/mDabY¶A’§$B+É6+ŲHkAĪBŒégQ›*Cc¤­˜é±_ę)Õrzˆ™qųźļČp³ü”a–H™Iķu+‘ÖW8„<é +pē³+¬PĶ‹š­iD÷L¶Ž§Y1±BęaŽ05×1ŃAgŹ×µ’¾ņ0hWǜŠę3 ń³gš1£cd©qĄ³cE4XNŪ,|¼¢&’2įZ•Õžgš“üŲš–6–,9ˆé¦ēŠ`‡%!ū”„„‰_^c9“’\”"ģ9Z„'³(źb³WłƑ)ļk¶±YŽ»×;Ł0wx2@ø¹Q­Ÿf‚k:łŠ•“pĄ’r¹ų"ØĒ_=‘āĖBóüéDdŪ“œēĪE~ä°ŗŃgSÆĻåŚkµ?Pį9u›]!‘«;ŃH’’JZŸ•MxV1c”ĀŚK€5§”Y…k_c"ĶĮS×¹!F $IoVQ¹ĄšŖ’å‡e-ČG<™¦ Hń.»jCB4‹g³mōQœĆɒö;łBÆ,•°Š½ś„Č5(Ń5k­QÜØ(†°8 ‚:čÜ19²)īĖĒVxŸĀĮ6ϭвŪŪ¢nĖ)ĀŅ9Ī'śĘ8é$¦?]ńźČA¾©6†•ó #ca[š…³©Œ©!õ¤OZ6*ū³\®*„öĪi”š"ķq–ĀaQŃbĒŲ÷W¹¾ÜĢĒĖYo+Ē·UĻnŸE¬ ÜŖį­d“5UČ0I!ćcF<ø]+«4ėxYžFƒž3gŽ.ĀQœ±„įŹā–ŗ½ģaĒČó#$F–.ų'i‹[3„™cŒ³-XÖD­yÜXU¢ĻŅ‹&­É¶ŖBL‚čŲ ¼®ÕZ¢Š÷Ą\³/& 9 ,‚GƏe³ˆ,ļmÕ.c»'21.t I†UDҶĻ õÓ5s’MEvG±‰82ø]łVæØp³_ŌaIé+Ę :R.%tČŲBsāD„ō©¶"rååū>Ļ|Ēø2Ą/÷šSįD&÷ČvØģ¹yõbŖ"Q1w=Qf}^Xār*9.UÉ•ß=ĀOŻP»įeĄŽų5īß»j̜ö„Õ©cŃķr1†71čĒó`šT—&ŗz§JlPUdĢø^\®k93-4‰n›'Ł“¹6Õ\ŒcŹW§»Æs*ĄV˜2ŗˆéI,;ß'>øOå[`Ē‘£Ó§…ņŚztŪ¢°°eŗ3ī=ÕÕæ•ąvė"ƒNF9Ķ’A”ā;˜xó£B'„<”-fjčq÷äēYŹęB—hå6l·üUtI¶øtˆĄlpMŒ’£“VQŚ“Äår—œxĆp ‘˜©ā“m%Eqŗ)sBKB4”ĘĒHaehķ­«Ą„{ˆ©ŠTJĮ įeČ[°jÖ!¹“Õ+óü Æ>‡NO …m«cŒ€1Dō³˜˜ŁåøO‹9&CēVAH…*¬”tS¾EŸ‘¢¹fœHŌŹø!0,ōYW¤–˜sQؘ›w"nʹBénĄŽ<ŽtId”Ü4U¹āÆ a,Ž‘.{2µĘĢMŌä–ō¦< yŲ’"¤g™Ķr-F'ĢPżæ½0V;— ¤‹&nø»]•ąHÆv²lȎ±Šf=Øģ’²,O āŌļįW%dGŗŠÖ<ń“/sįč b³!\±8źē-G†Wżż‹?RtNŖ¦^ųnā昛˜šÅŪ+ښ6£ņ\$x—DŸ+ĀѵĄ4ČęĀüń¦ŠCHą£j©dW°ņÜÖ¹”²TŽX’VĄŽčąąłńY‹`§dQĻąōՕ1  “ ¢W{X6™Õētø“¹ć–TRŽQeųMȎŁ{ūN0“¦8Æę A\K4Ĉ=e偑Ņä øšŖŖ{ücbŃZ­F7nó4mDņ¬o»ŚÜbyØü šu“{\ĖĒ뉄}M6īÄ~lm6zļoņfō$²Bń²†§lK ]ź“f­|““%õ뤼ŻÅī˜ņ†G"čōaT±$¬†½ķsqv"ķĻ¢£7’ŪąAc¶ÆųÕDk“ÕŻįŁÆ,•;»— i¬į)9Īź XÕD+˜Ōcxܓl=~.ŗā"#ņĒO†ąF/cUŽ™ƒ’g„`U_Ŗ­j±!cįøPƎą ӟ,jē!Ś®EÄvˆŽEO €vŁCŻ…! °ńź7fļjŖnj.õšś{ æ|rä5QĶāS X¶q$¬«UßĶ>æUš‰ģŠhRÖRz ĶE‡%% ×$M4t|ųę’\‡ŠÜIćīTÄŃ11[®m\ŽęLƒ$%„V[=ōźŽń¼e÷³Ū›‘R”,xNūŠDI1!X6Ž*µ÷"ĒXĖ#ńHĪRcI]Š©ŗ”j†’oi×ĪyČó D² ŒėD’5LsŚÜ|ČĢĄ Üļ[ōŲYĆŚGXÆé”j¾×īĶ3j7ŗ®ŌGC’覸ŅCĢŖBÓįoUz=qv¹ĶFėPĻžį9?PŒÉ5›F8¤<ʆ)‡Ó?TTq5Į§Š¢+g\¢!뀇1vĶA"¢·vW~ņ?¤vEr µ…;£”ęr‘ČļTĖ6ŒœŌ:æüpˆ§ŽŖ5v™»Śßv&kć) éÖrē¶ Ü㳦"łs¼£tåT9zü’lIō+šŃÖLƾ<Ś`5ęšĒw2’w qßP.dٌI–ē#A˜ņƒBH‘U!Ør&HŖÜ7ITę†$5ģx•¶†Ń͐\I ŠaFL‘,1ŪÅ朦RŹ`ŽÆs^8[łErrkžÜ’V)5AĘb$„f.ÅĀ•®Gµ¼æ¢5±5U]ŲØˆŖŠÅf#WkQt]ć¦ƒ]]Z»­8ZÆźQ!–VG©ÖģČŠQ‰Xį+Õ,Rµ2O$.š QuĀÅĄ²Õ)JŖJbµ6L"E’É"ż‰õ¬:2tØČIRœ4÷iŽ‘¢CŁ.¬ORŽ4¢j®ÕČߦ;EÄTŃžQ¾1W”WżI’'|5ść«•„ :śį—b{²‚©“i"$!Eį8ģ†"Œ]«‘"\Į@ŲKv ŹXÕÖ0 HsQuOMåÅ4{pĀseŗŚ^K$ŠM‹°²¤;V­pP12™gzĪ^Aµur"*1WˆÖ¦9Ģv_«°T"')”žlxX³[jÖµ…Ɓ4™4"`EĀķŪä«{“bʔųčČr%¶"–™:4œ”×L;Ö@ꊄƒésQĶ™T3cŖ¤µvł„ŒÅn$d (]œŲŲx[ ¾RF’±Āpbn"x’źŒŌhŌŃW\ŲŅ5uLÜ䬇+§p·×ƤsÜŁ@ę4Óѱ7ՑK…£¶ øēź•učöūX„&ѕ‘¬F†ēTmV‰W—ź5¤qUŗ(“ŹGė…ĢU(k&$wp""ŒnpÉĖ|·r*LhĻ.6)LÖ" Qk•ŗųUUŚķ’?2|’ O64?ó»ę&Vl ·Æ"‘ÉŅš³„²ö8jØŻ ˜Ō¬<—Ź0ÜńØHēYwLžŗĶ¢Oź‘WĪ“*°±ÓM¹P~T®3ėœ7C±$|‰,r›,œØ¢i‘ę•uq‚ķ¼Źćøī#”#lŽē¦ÜrūZ«¦ÕÕœŗČpęutŪ5‰NT|±õÖ!‘ŅŹ„R6M¦)¤—8 ™v”ĄÆTf¹¼µÆnņ•ī#Ŗ&ŒLōŒMp4WZÉU*ü_(HäēGć.ør‘Ėǚ²«XāōŚI/|‡ŗ-g(…g0%ęĖäo÷™·\DńQł~,(žŲāCzÉ%²‰%…p“œyčė˜KjęŲ9ÄdtF“lį=›U®r3iŽ#“pąĘSŹ™Y½ć•*)v¹ŽÅ‹uįÖ²_›$†MˆŅć%¦ņ…ŚWėŠF4Œ˜‹./!I%ĮęBEŒWŸķÅ’©\Ŗ1¢"źę„>½Ē…²;øR&‘0ƒaZµ1UÓłMuTwōĻ©†FF®ƒó²¼ŽėmĆtļtĻāŽSp”B„# 0”QŌń×;+um(ѬŠ5kÄ$`„”–ę8Ö6SČAIōÜ„žćÅ«ō\Ń£Ķ"=¼M­Üš*.&Üs‘YRšĻįoęʧķųŪƼę§v±²ĮūģLžUŗdć©¢čT’`ŚĘ±æµiåŸ!UŪ}‹ķ|)-”E¢ŖWŌū¬½Fg0?ĮuĒ®3M•/ÖĒ…§ä©5Qpznd'tóŽÆ­±XaÜEŠńöo’EPµ­ŹČÄŻū¶ś²;M[ƒ±¶pęń#ƒXrÄH­+#ś¤±9ĶV½Ė³>¹VØŪĖśŒ9äŠ!ŻNö˜Ū¦åĮ É„Œē Ü 6°|eM8ɂB­Śb]yļ ÆxŲL^ņĢļ:·½»;Ń5[y wx:¢\½1×EÉ62 4Tåą Ń·"Ń÷MLuĖ‘{±]éĖč‰‰r÷gyr"Ż93½.‰sčø—'ĪšmLT+Œ¾[”1r§Ķ‡ ];„X”4§’ģJCgf&vS¢öcge";²āRųZ…\ģĪČÜZTĪĪøźe\ZWgf6®©+“³*§g÷v‘*v`ć©B¹Ł›£é—œĪrSmogv¦Ó;:j”ĢŚŹq&:„ŠŽĻ¦6•˜“ćÓ³5s²µ3²&%gevpbS *Šźv¦L­éƒS¢Xš“×øQ'Ézä[ņŽ+”9ČØ©agÓ.J˜ ƒ,Gܑ Čft—øqĒräČvY6Š­¬¬īå×¼Ų—TƖé!}ĪįŪŃuKkl·.łv ~é1Ųˇ·#I‘ϱti ¹&-Ū“K¢"„ˆ`ś­×Jź”Næ…ŗÆq¤ū]ĢMĢŽŠĪ­­™„uX¹ŅFşa)Ė2b¾$³`öĘ*L…k,O¢\ZĆ#ŽÉV¾L¢É,õē½ÖŽŽ¢æ’ö -ay‘.™¼RüB³nŹóL0ÅŌå¦vĖ F·ŗXJé^³Äøęj‰ˆ1z­µķōÜ~ȝʍ~OÖäG4N}|É(±K榣¬o*¶‹E|4lĖ·vQ»ą*mµœōīųųRx=w›\¹.²dĘzWŠ1%;ч¼ńCµ Ė>E‘].«QĢ-×¶}œs<ź[„l‰N›ėµüu+žo…ĪĀ‡ķæbšYB™åū¤jš'|hÆķņb9t¢o³wźnŪj–qÓ}Ši|¾±RĒ=²¬(ņ¤6Dø¹Ŗ€÷+ŗ •W ŗ':5t·§6)ŅD{ß-GÉķR‘`Š4ŸGÓę¹2ćńԈw TŅŹ‡ķæbx¹Š© Õźķ’ÄÖ¶ĪL&NYČ8QiٲZ޲±­yĪh2(/ēÕĄŻYāĢĻ冩²)|KŗnĆæ.W•/ŃbŲ.µ0Ɛ&ūk%t†½÷8šŪ27k;rt4‰•ĪsąZĀ€1"C‚U49źóŲ×9Cc—K¤7|÷ ėcCÆOū å Rv¶æ„\› ’ŲČ6 ĄT—œ‰¢¬üžšĶ\śÉŠ•±Ÿ<Šeq!Ö4(Š¢59š‘ É»X;<…zV9µ¢„ĖœčqŖ¤0Ó«Ł/#SŖlČg"bŅæAŅ{ŃØö4ŒģÉŌ ˆ1Ģ€9Nƒ^ȋ—ŸkM÷ü-[‰a'Å\ī11'E\ī5u“FāZÄ\K(‹‰:*·­¹Ó£7>+Ō:ŲŁÖĘĪįdeŔN¶6u±³­Œ«ÖĘĪ®>Քŗ3ƋÆ];ŒLī13ŗÄĪė;¬Lī‘1,ā.-œD^ćĪ&w(™ŻbbZDUIńWg­ļqÖńŃÆ¹L9ÓO¢Īį+såm^f×g-śh¹å8Ÿźbµtņø­rāšØKˆ"&( Škӟj8EĪ[ó–õĪA³¦Ŗ±$č‘dēE/ÅÄÆ—®fv¹z­d“ĪŁ3¼Złx•’Õ{tĢZéyŠJŇ%1e?¶Zć”Hbr‹„L#“ü4LŃ3ksksDĶ3jfÖ®lf(عɨƦh™µ¹§’•’ÄF!1A"Q23aq #BRr‘”b’±0‚ĮŃ$4@¢CįńS“šDP`c²Ņ’Ś?Y’÷'8Uß?źÆ3ž«¼ÕvüU„ź]ó—|~‹¾+¾*¼g.ü®ü®÷ģ'u×~åßeą»Ļ²ļ>˽ū.ߣwæeŪEŽ}—yö]ēŁaō^ĒŃ{EŪä»Ļ²ķż—yö]ńś!ėŹļ>˾*¼g.śOŖļdś®öOŖļœ»÷.ü®ų®ó쫈yQaxnŚŪ{ėNźpŲļˆ,<(iš*šaż ›f‹č¹¶OŁwšC€Ö·®(×4ć’i:{ü29®)^³jˆ,-~&õ\¹`į:$iińWˆŗōxĶa‡gk^s4ÉbšĒŻsbwĶ[łÆT ŒėøGˆ4œŖ«#yz„eŠŽ¦cU]Bõ›,n=Q¦ĘÕž‘Šū+śPƳ}‚īp’*ö~m]؏Érp¾ŹĮŖĶ ķ䝞NÆųc(¹æĆGŃsģ4¢’G÷U…A(uŽ|Š €{Õß]Łļåi>A^5a0~[ łeO»uFF<ĪśHŚ©!ššIöV@žŪlļ@NĮFŗÄxØdŒŠ±Ž°"× ‚°ß†OŁ2f‹:ōDGŁ#@O‰®Œƒł•_F®jē‡ó/U#Ƶ –có –F•lČ®äżWu"’¬>«·'Ń\×ĶŖģa\Šż ĀvwtĶ5ęDÉ"`mļD:Pļpw]ֈŪPĀŅmTŖ±7³ÖØv<=`]ģūŠ®š"}Öŗ„QÆp@Čņā:¬MŚ9ŗaÉXĻŠ¦¼dį_BŚ &ŹG+Äó‰Ņ5ŗ.āß䳆m;„ÆDöh[]Ńu¶Zö©żė@(”†Œ= w =[¾ÅGµlÄšŻ’€{€—QéäØZ(®Ęż+łn=¤Ļ#¾_Œ¬-yTČćó\Ų|y²/ÖæŌCś•?ėE¼@śjՆ6—Ųī®č‹µ%Ņä§šņÉGjė)šOaŪ©)2GćšÅƒ‡š›ńØž¶łH÷ŹÄĘÕŻż×`~ ½Ō³gÕc|Œ¹„īĪ_‡ĀĖ2|UMŖ:ÓZP¢kXÜ.ƒ`v& VŃʑ¢6ö •®©¶*.ĪuqV‘…ŹÅ‡ę«¶lüQ•Šg1ōÉakĪbń „Œ«kr،m<ŒRJu°_†ŁjF¤j‹# Źlé=ß$#Æ-køuAŽĆ IU(¹<(ә^RnĆz Ŗ8Oꛉį²jšcųŠß./|«m×UÓĶP=ß"©-kÓfŚ;ĖU(7@Ē£–ÖŁkoę„k=±ōBIŻ@o„,104z_ˆŁ­Ō eżćE fš'ĮaeMMŹfϳŽwņ“‰Ū³Å6YļØoš hõOÉHq ’“>ΊFĖl“ĻN‰C rŻÅ“»ŠuXZ(MİĖ×Ŗ-s Lö—Jä$Äēt\M#ŗ}2ă¦!Bƒ™½Ævw›R­ōć?™2½ł¾"½c\~Dql®'ĘD[Īș“ŗīvq@°*€5)ą„ūMŚrW į&Ī҈lšF×?ŚyXž9cν} “@»e’WĘ>J‘Ź+ŠŪqŽL—OŁŹīợŚEŽaČŌRłź¤-Ŗ.”ćwSøJG;’mΦ®CŅ`źõžaā„”"†Ž*7F»/ÖŅ€=H*Ł KNJœ*x‚›W‘ĘäęF…5Ć"7~"1ń’u@15ŽŹī¤X +Ņåq¶”‰ī¾¢čЌ0šB†ļxēé†É[eD,ļŖ `£G Ņöƒ„Ōx,2°8'»ctmĢų­œX÷ƒŻ;ƒćƒł–-¤āü”P#GÖ²c¦ģV„bĮĆĆŅćPü[äQĮ˜­‚‰ĢŠÉ»\yŽņžÉ^øąxĢ*lķ5÷Šāŗ§¦#Ŗā‹¾7_É~ęć³]Ō"”līĆłJō`ŌÕQ—v®;æ ϵż•Ē;®Ų7š­c5§m?µŹF‹‰³6£V®RčŻŖęcID1”žH1·qźŒfœ§4ZŽØ=Ÿ1Óц½JŠŽÖł}—-dž)qfŌĀ’lT'mS“šQÕs|‡DXśå²Äʘō=½c:ź½[ÆŠśīĻAÕ:Y.ĢŁE³±”ĒŃ>Ė Š-‘ Õaͦķ(pœ ›Śaɦ–®¢šfŠ0•UˆviØ=† ś;£”vß%¬ƒ±Yżf 0Ü ŁF«ą£©¦ GDČŲąČć¹AĻČę £q_Įp¶ KG“ø»­Ż]Óæ•PēN—i›N¶X6Q‰Žņ $¹ī9”#gĢõ’eZ]mģę˜.ƒŖ1ūAjĆ]Üüß4Ų°€­—(¢=3ŗÄķ{ AßÓŠwŹ™+hV˜Só¹=¬>.s— cu2£qIdqŒ‘”š[.ČŪ1¾éÜ1FÖĄ!€šų Ųß1 \fÆ!oÉW ’&‰ qŸd{!”ŚŁæģÜļk&ł§ŗ[K9„<|fާ €÷6„tEĶYŖ5Žó¢4ū«’į6xǬŽĻńF;”ž]ģųŌ#L[ę(¶XźC³OŽ!źĆ­U5;¦h÷”wķ6«cžœf©m{%±!Õ!w§£¬Ŗécł”D^±Ž,oģיÉć…ĆkžĢI(®õ:*3³š ķ`£„µ\F|ĒU‰§ŠÕsŗ6pæ³\œž«Nl‘Ź*Q짆čģA2OxnŅĪ :Ó|ŽhC–Ó =h5jąĖŽGiŚc…— Ĝ曊‰™¹±€B;;ūL5ZAŖt;c,ėsjā@āńئˆśĘ²žö«ÕFf#WY”7~L•…?ٵœL1{CŖįĀ{²žū®Ŗ¹žćó^±ų[N•E}ź±lÕ(LŹŽaB6ł«ÕIQT6½šµÖˆ—o©CŒh4.0aĄ=¤­MīPžģ’ņ‰²3"ø‘w£ī†Ķ“y4ŸŁbga÷ņMĘK ĻĶ"-¶•’iźc/{¼2_ˆŪ]Ķ£NebwiĘŽIµŌU7šŸ%…½iČ5¹ )<,¢ņ®ć}BнwĶęƒć4!,œ8æ.«šŃMJ.‹.ĖS!K£LćuÅĢĒ…‰§nūØę¾; ü«‹ 8Ÿ’IŃMŽDmUĀ„ø°}āHģR·ūLŖóNŚv·į‹Æ_‹ä卢ž@œó’…ˆd/XG%l‹˜Msš=ڦĘųpŹ,Tv‚ˆ0]Ī9 :nņpPü[ęó\h…^ ĒUĆ„@ö\2\ ?•ˆI/4æ¶éyØ+ēuųiröOōLŠhė ‚īNh£ ”P#4²ożK®/Ä’éQšzŻŁh’h&ŚåŹ«w³·SMŁöVžl5>%Ś¢ÖNŽ{¶AO$x!Ā­!4HźÓ%v:‹5­5(ńJōŽ’0”§½¾o4ņl1f½c”u:ŃU…Ÿ-Åǵģ…k¹Å4Fģ3sÕŻwÓ?$OķŒĆļ5G7K'É-ųwĀø\'4éžŅ³6­eÕ8;(ʶ\ ‡™Ī³¤Ōł!r×ĻO¢ĀŪŚ%R&üõ\G‚FV@>>¾Š—ĄīÉź©Ŗ »m±Ü’1ūØ©ļo›Ķp#k³©$Ų.y¾rL˜CĶ4Ø*“Äć“FˆI8Ē3ĶŠĘü/Uę>»÷[`iä„Jć{-ÕXƒšéęZŃĆEÔuɱJąŠ¬ļ’¦,'ó.Wåüz½Į£Å[1£nģ(³ü6'9śÉOŁ7Œ'{5TØš)ļŌĮ“œō„QŸd  Üų-¦Ā*Ā ±Ü¾JF{ĆsńkJ(|MwĶęæ›|Dē1 ā[>ŲĮPĆĢŽ‹ńŽ–°µ½æīX¢ę'ŖŚö‚ŹŗaF…ė5)Ļ‘ÜÓd²ŗ–=Ó¤v@#$ŽĀĪæŁsÕĒÄ®Ę"„Œ˜ŠhŖ÷ ĮJć#[ƒ u@Ł>9[WęvrŠ wM "i»ü·R9œßf}5ŗ: {,÷“!€9Ņ•b10ę³½ŁuԬŅPp¶ˆćcODf“•§7eŠ6óS24ĻāNņœ÷ŃOž–ģĻóŗ‹Ļ|Ćó*HļPƗŠ…B*¢„Z.„e,Ekŗ_mĀŗ«'ĻņŽ“8x aŲŁ$tŃ· ‘p)SN֟ȹŃāQoū'm»[€éU&Š«kpƒ¹īih4ö“†ø·2ŗ³čˆi—4#²Gģ°ćn.•ŻSłY`Š&ń×D][`æ×žÉęR#‚>Ļę(8gD4!`Ś7Vź¦?ģįšł¤vD£&Ōi‹&S$ŲŪģn׌Ó@ķdTŸ$>¾l»fčµ×n" ĮĶҦ…QŗXł£#‡4Ÿ²$č¤p°$ÅūD~¬å{¢īMŠĒGXž³«QćéČh:„dŁöy¶‡;Ūp D3dĆ÷\]µäxjˆįē­Uy’R øZ7PŠ…V÷O½S\‰ć ®+‹Iįܞ‰²–WĢf±l²c÷ õų[<½©EŪKĄ{®²qģĀιū£Ōn¤Mæ^ˆįĢö‰Xø‘%M™æĢäķ³jīŪ2§Ś1 "’2™„b5ÉJ‡Ć¾j{åNnX6x\ē8vŗ,[P-gMJ¢įĶ"šMšÅĪÕęūųŃvĘcŽMpöMSdn¾Øž R0UĢxÜÉ@ģf˜Ę׎uµSƒ‘„©eF€A»w˜A°DĢIÉĶ{“å©Tl|(A°6ŗ·&Õ\oJ¦±ŗg⮜žåu²5O;cź^(oöUkK£Qx# «—*ņüe䬟4Uć5V¶TaāIŠ'cun'E†8øĒW¬Ž³JzįŹµF3ø’`ę¾géÄ!bk[Ō bq>-F]„ŲXßemSš nH±½¹]ĪWł–‡É'²ø@™&¹īŹĄY5ķ4 ”ülКó9l±VÅõ>–† )óLWō'āćČ5ŗ';s”5¢ćķGÕ0éū4Xrõ€«tR‰x•±č„–”m0©ėóŖÅb”T·'ōUiØ(ÓSr©M7Ėń•#ńR|[Žó“EV:śÖŖØq!ŽO•Š ŁŚ4ŖīĄ:7uŠ{žwö¼#jĆ6•²jatj ŚźE%‹‡T!/¬»ŒQ 0“ܕFŻŚ»Æ¦W9õĶ ™A‹0™Y ¤p® 6ś!3Øę0ŠŃ9¾ųFÕ—/S/ŗŃw§h›©Č,/Īą¢Ś™Ā”Ƽž)Ś5PpčÖŁ?dŚc hSā‘…Ģ>)-­Æ{¦ŽL-1 LƎł~2Ÿńo—Eyb4RA“Ū@ž‹ Łnŗ}ēi”sžķæÕI&”¢lĪq¶aP€BŚvy3oM—’ØŁ…ž#qkĶ\]]ä…B{v6śĮļ.6ŌŹJ,(ķäu C( „<Š ŠÕ9ÕįĒ«Žź’Œ[ ±ļS`»‹šGS‹ķzU©»&ĢĖ·˜øč°„Ā0źQ7gcŖś‚ēŸdU=Ē"ā‹ėKŹ|uÉ›VĻsKÓ¢ą½ł\ˆŁöŽØφ§ŹˆO#(ŃŁ®§Ŗ1‡ŒcD"÷ŹmH!¶Góß/ĘT–ö·–œŠŽÉØ=S^ÓGf×.¬ĮObį>4ŹŽt¢2HĪ%;#J§¹Ī®,Ӆ2v÷mĄę©^ŃĪᆩ£Ć{¤qÉb kIŃ©Ō`q9“šī[ś•”oÕY¬ ¶“U9|Č]ę^ ÆŚbl†h€0Q­öźUp£caPŻSqjIOc]€»U4ŹŠėõ)Ū;göŻŃ“dĮ‰ø°ŒŠ8OU†'×.j‹ęŒ»g«czŚŖ¬Œ<·£WŖ¤Cī˜öÖŌ4&å?åąŗł(ž¶ł¾$’‹Š¦O’®Kö!e|h±LēšėŅ˼Jźz,N­Lß@µā­S’ź°>ß£¹—«Œ×Uė#k¼Ā1m+#÷† Ŗ¶(œ:“*™O…^tģŖÄž†kÖČ]åe&,oy¦y.°ŹķZ2BÖMĀ()dA{b‚œĪŌ­£š”Ž=§&ĘĒq;Ö·ū ė_ģ»H'HįˆDÜtM>Ų¬N£ŚCĘöż–J™#Oŗe)®[ęóNdq$s¬‹ßĀg¢Ć“°S«sMAĖs›Ō#„U^¶R@Ń+|Ö#N[ę½X-č¤;>Apķ} …"Ä1ÓÜpšX©FŅź¹®¦[°ČŠįā±ló:/¹v’5ÖõŃĆŗōX#ĄŹ½S0ŻßÕwx:—Y3fcüī„P"é(z7©OtŅ~)'°ÅR=š h°ŗŻVVŖ ”0Šø¶Že’ÄŻ;+0/UQqÓÅS∭|“kĻ|ß•ģē„Š~Ӌ›"SęŁå.¶D"×{.¶ü6”:7dr=w` ­j˜°»Są°E.;]'—ˆzļįx"Ņh tĮ&GŃ:YM‰åQęIŹ’Ń 6‚®źœĶœpāÕīMņ°ÕĪ­©øEk>X½Õ‹lŚx1ˆčtAæ@€„“¢½ėØOŚ2czźµŖÄźP†•ČqkšŖQ|%IķZÖŃrētĻ#¾‰Kčkz-9¢Ł1‘—‰]š6¶ńō8‚ĪbĀEņ\ĒéŖ¾M:®WRž)²:zFC3č "ļY—Šm ²lÆÆ§‡g‹ē9 łƒ|Må蚿”¦Ę“š\X˜Łˆģ‚æĶLČY¤L\8ŚY³0Õļź„¶är‡.s9ÓTZzŻ óf¼hX¦ķŒŹś…kŒ•¾™UæDÜ#›EN©ōa0J×öß/Ę«³×Ė /Ć#¦®`!&ÖćNš ÖŠčaÆl¬M7Æ-V/iWčƒE®¹d1×5ϵqe’Ż}āŠHČśB8‹Y®^øŗCēEQł¬$rōNf±ŚfČöC½³DĻ3¦—Ż ¼L1lķŹ1Ŗ?ēŪ=Έˆ„|ĻØ Īh iŖńŖĀāpōB„6¢¼ĀéŃŽŗ~Ķ%óc‚õ€įĪnIƹP€qØCOī³łŖ:ŻSo_üo›ćLŗV&ä}Xö·Ģ®öæ%‰ņˆŚ;5Ń0ŸīŖÖ Ŗåsd0Ża“QG ŖäxMllkd ²avøM– 9½Q’åUk}+ŖÆ“kmņüh¾;ĢÓv×0øR2¬j˚zQzØÜļ;-”^®®¦ōCq²“„W427į}Q~Å“q=į‘T•®Å­sN•÷lŗ{ ˆn#`7RžK՞SģhØyЧBóĆ,Z¬×3€ł®i™õ_ˆŲ]źžy˜įOŸš.Ķ.ˆŁ¶Fļ«4į§J¹ĘŗÅÅBˆ:ĀŻU©õNn mZŖ•{,Cę:ÆXX=ęø£ź\e‡f‹„Ž«“_Ŗ0ØŪ^Õ(^‚•­pŹ›ę­ł—āvodŠ€æĶģÜžóQ|qž5säro ¢Žģµŗ]pÜjźsSEĖįj"r®€*å”C ˜žZ&:ÜĶøMźė•“R×ŃTH+‡žź™¦ąÄhÓ«PÅŌhÕĖ×ĢöŸ…ˆ<žk¬,.éj8ųqėEŹké>EÄ„E†Y!Ü”¬\-ž9ās?ŁBŗ*‘ea@±lōl­Ģž”b0;č­ŗŁ©“ĄRõźønxĪ“`Ébś…UbqVöŃ6ł’mó̤™pŽĘń<[š–(2dŒŌ³2óRFMœå$] #².Eq@ä$Č}–d眚v¤āQĘmˆŠ”0R@>©˜+Ä$8ń ź:.&Å!c½ÕIcĮ'¶±BŚØųÜÓālLŸ$?¶66tQž9Š“QōżÕcx;¹ß~ƒ5Īę² •äoÕSf4Ū€ĶrĘÖŠuO-">²Ÿd#ÉRĢŽó™T½tVWTöв\R2\†Žji’WĒLĘm+–f}Vyžuč‹Ėƒ_šq:””żÖŖ=o¾o5'Ä” Ņ@ź„/Źāį­ÅPšõæuˆĀE±UųfžźĒµJ"gEĮŲŪ…€v؝µĻŹē‹ U)†>ŸŻŒō ĶDŹÖŻ‹Å×y0Ŗģņ–ųNõæTÓ$:ō£D!’bČČO 8h Ą÷¾ŚŖėՅGÕ7AŖ :Qqv©8qžd¦™€E0²¹¹WC¦ŖÜ¾As#„“ā­Z*›Ö×W(WDj0’FYˆŠõ!WTģŌ8Ŗņڈ ųLŌc=ņ§I! ęOy8E9jæ8¤l»jœųŲy“oDķ­-QŸŃR6=ēÉC>ėœ—jØŃ`k–k‡¾wFW7įŖćŗļ6`źŽŃ#€ ÷ŽŖŒ•Ž>ÓøŖę…æ+.Bö|ӝLlźÕžhŻ -Ɩ«"ŃÖN_ŻVg™<#ėęæŹDÖTÓ*•ÄŚ·Ł3ęœd­F4X51‘]Ō«Čż‘ĻĶ;”Ūģ›@€iÆJ.˾kÅXbŖ°qVuDį9ēTXJ­4@]Å x“½öŃV É+Ljļ²l7gm—W”é'k-™Õ`…“ĘyAŃ,¤ŸĖd6mŽæh:Ņ“Cę§fµTĮsZ™xĖY)×EWČĘł]V7µž¢įøŌ4бĖ>c§šqĀdūĄ{QnfÜ*ŗC„Ś¢ČW“˜DA±Óv%µĢ#¦ƒ™Ė‰®ńr&į“ģU^ŽĶtÕgģķÕ^ż|µū"Hņ5Vś*šü¬±7–‡³Šł*“Jė↠z*WhA^*Łjz&éc½žAKę71ā„ R9ݚŌx¬uĀÖżØ»Ļµ¹Ņ·ˆģ¼Sžś’sYƒTŲŚ*5ņBZ1讋¾9å@½aÄ?0¢Ć“ĒÕ«›Ł8\#_KŠŹ:‹Öz²± O5M”Ģ·×łiƒŽ¢CĖ|¹„čމ£ ×5Ż(Ō:Õ¢‰œĆk .–×ÅĒ A’³‚<ÖŃi¹ē²I°X±ā>y¦S!ŃR·@—PīšüŻ—Qm `£A‹ä4 £g†ą„l}+ŲµšŚŁ9¤„Sø4«½£¢|ō½uD»es‰Č‘’įNŠ ŃČIå9蛓įū/MśméQĀ”b†‘æģ¬ĘŸš}il“„sA½»Ö0W®©Ń8W ĆŌoź7q$o7†ØĖ`fҤ FĶpŃE-hkęŗ×$o’ćōX•q+T‘:*bŽ(ҷͦ“LēėmīåŠ)L„“dé“Q=+Fų)¤>Ķ‚sβņR·ŗÓpžq_u«F„^}4jq‡½„™!õ‘8Q>9ģ“…(Ҿ™aÄÓL“› HyµJ¹½5E¾ė·ńY›sBąČ}Y6v÷‘ Žå9X”6Ōģ1õu¾‰üĀŁŚ9œS°–Ē™&ˆŗ&“ZÅ-œÓ•®—\¹Šh‹n©¢”åAÖéB„ł¦Ÿ¾K‹QMń(©Żän¦“Śx4[L}cŖs5k·ć‹¼oÜ" \ß«ÆEĒ,Ā(sU˜ŪA EĢ“ 9Ø$„ »TÕM€ŁĻ?;§Ž·Št GŻŽ›åa­)e¼f¤i» 6}½$‹VōXOŚ ŖpŪÕČ>I8”øÕ=žš¢{hįj+ µŠŽ+Āŗ&ŠÖ¾*§/4Źē’mņŪT’‰:7däEæ’AašłōX!LJó¦ÄŹ:£čØ[ʛÅQ¤3Ą54mQ2Fx¶čÉž6ČnŌųž8{KGea#?KHłŒ‚Ž-d \éę„8ŠšŌ¹ p !kŪ&µ\-®dkTNĖ$ŒšŖ,ž7Ė\ń9½ųלR÷~wÕq'‰Ņ®]Ą§Ä"oÕÄĖxQ QĒ³åł—,-k sZ˜bv–„ģš÷3UāÉrĀOK®ą|ÜŖ#`oš“õ.h[O5hóz€_ó+ģ’ņ_é’äæÓšł¢D-§šīćó]Ó)Õē„ŹP€Ė—!UŹrÉ2“ė¾UČ“ Ņčb{)ęÆ#õń ĻaW•ŖÓ6žJœaO…PĻo…Ø¹Ļ—5ߏ¢ļĻéB“}Z¹g„ķŹ»įśU?o…w¬ Mi•€wĆōŖ™üłPÅ+Ķ<—x’²“ ¾?„rJ>b‹ģhšTgZ©Ęhņj¼ēō źC3¾‹žWžš"Ń)ų.Yž­\ӐTHÆ9ż+–w’埞*óŸŅÆ#×nOŖ•źøäśÆU)o˜Xńb½IµĻO¦ł‘=]ü0C\6¹T’2ßQpPŽ6‡U] ięøē‘£:¢Ā¹ ĒĒ¢{ćø QāD’¹˜\rOŒC\'2U¶k|Šõuŗv[oŻ5=ļn&ˆšįØźJõń€ĆØŃU4µ —W¬„`֊9ÜbL•Y ųIT–¢Ē󉌵MW4"ž ŠŌ¹”TŁ pƦ’’e*h ž[äł/ę?ĄüCĒi¢XÅ,˜’č䟓J*Ę\×Ŗ·,zŻ“g“L°éę› …K³4ŖfÕ³S soU]H£“Y#C…pŖ4PńJ.,L.0:¬T–ŁŻ5Ž8ĮķW¢tqlŃųr£ ‡•ŻDö›9äŠy§ķ·š€™<}ƒŹi¢h=¦r•…JٲJŁF€E³Å³ĶĶ~jkd&Ž-E•³ ¤ß„ČŁˆj]±6©Œ‹e2¹Ń5ƒ&Šzo#J'8X0}Ī÷ߢpčļąœŠv>ĪDu XŻÉ×¢³¦SĶM Æ>ČOt¤ŒuĆEµBr ż”Œčåoż_ź«‘k†ēü*O |÷2?e‚„lü6V‚ą“9ĢĀŹX#öœØr„Rœ¶ś• [£æ¢‚HŽe#ƒĢ»NBÖ +pŒ4 7~ZżŌSĄĢe¹…hušN†gb Ļų Ńjƒ_ī§@¤ųæƒćįM F#A} ge‚”EŒ!ŠfÓ0ÜZŪ–ƒźÓ#²į•)Ŗ «x–ś§”A¼O²–žā”žD0ŠXƒ»Ķ÷æDüu ³AEÅMZäĒd×ä˜E.ķT>G÷Q«æ¢±ö«%Ń@곦Č5QŸÉżT “=ƒ^« ›@-®wXųų ōnŖŅšÜ’0Ž“n{åR|_Į‘ŗŅ”e‰«Ąæuė@~­Mš9@«i\5CgÕ{Ķ^"ī5LĢÕõņFhœ*sk“„˜6ƒ;Żøp© šI"”Qžd÷ū­Ŗ8©fš*»Śe“dÓh”–¹ņ»ä£©«ź8~Ź+Ģļč¶Cž_²kR @Ŗ“c˜ąujĀz£¶c¾Ź²T<ŲÖłŖ7j·Ķ3ÖńsQēDņĖŖø’‰ē­šÜŌovd'2Gąkl*„Q; 5ݟ“¼[¾G4ÕIńpżcO’CW›[M×³ŪŁ+ š>;*ķ.µ©źU|°JŌ^‹tŸ­Sˆ9ŒH²GI­“EŠÉčäŁdy|:7dįEź^:ÓśPg²Ā .12”Ķ> U{|āĖęÄŪ°Ų&¼½­ĀkÕW Ę«Šą[īS ³/%Ė“]Z`OŠõ’Œ>EiĢ CżWCšk“E*įT]‹Ī»˜5.MéMņł§‰_C‰wķ]š]ūU8Ķ]¢|‚ķ‘ņGÖż–.3hš8­ęW™Ŗ‚fÕw¬żK¾gÕwĶ]šV™ŸUS3>«¾gÕwĢśŖqš»ęŖń™O5ß3źÆ3>Ŗœf®ł«¾ ¾ ¶~‹¶~‹¶~‹¼ū.óģ»Ļ²ļ‚ļ>˽ “~ŠœJ|•¦jƾA{EP~Hą„Ū©Mo 46éEwČģ&ī+#»UŁ*øO%’½} •p²TŸ¢īœ~HVž”}K’J“2~•Üæō®į’ExśQ&7×įTĄźł*67}r’ŅØŲ_ō]Ėž‹øwŃZ*šJī\»æŗīžė»Æ‘]ׯaąÜ®źŸ5‡„»“õVŹ†ż,.ł  _u;Jœ~”& wä²]² -Łpd}Ś>м6×ÉY”d²ž-’Ä+!1AQaq‘”±š ĮŃįń0@P`’Ś?!‚€āżnS©’ĶĮ=£×Ė#L‰ŹŖ~qk“½ē™»ĪĖ2¾½k)L*;)GOć'ųgń9G‰žiüOóOāq[z± €ē|NØ7¢iĖŲĢĢĆć?–…žWŪ?”nŁŪ|eX®;`Ų{kKė‡EŚ–”¹Ąq?€q}³š„Į}’ŲSĄĢUöēųgń2,xĘ%Ēī%m÷„-^T1ĢŁĶJIšĆ? «ØD~3OĆŠŽ™Č_3›ŒpĖ ±»X ā(²ßذsT”Š čAWšBÜ÷";‹ž13ų=YIŃr“µ8ĢO@Õ*ęa§ZØ„#t éh”®?Y<¬cš†Ä¼9R©g«H&9Ö;t2yŠóÄc6V«Į ś¤L : B6s;Å «”Ē£…OĒ““yUS­_“¾|š¶>……ŅžŃB…wĖ÷j)ÕĮ4#Į>§P@.r$±„Õ/  !Xó¤.Yåiģā½2~ 4(y‘›~уģKhņ-ēŸD3†:ķ—ŪŃE9 Ž2å“©Ć5. eĶś/½Ö¼ŹŲ1:ŌB«m ué¾ūKKAŌ„Åó\÷³żśT@ٟx É17n”0ŲŅhā f‡ ōĶ™Ó(ēĘ|ĆčDsŠ…a¾ē꣔;o‰dŠ‹ĻA‘(šZÆC®Pąē pĪCéź(? ž tVÕÕrჸ+ė1niD@ÅŽßÄ<£q!L³›Ą†\K2}&1’żćė {Š+5č]¢¾ä§*•Š“Ē=ZėˆŅœt.D½½„ä s z1zÜ=ǧmęćk¬( U •INct0jüPÖg6Q˜į˜«uB§Ó@ƒ$E/7sĮķ› ńJ6y’–¢Ŗ—šĄßXžO^*9!W¬ -KȒéó «§¶“›ś`#løŠ2TgYo:_˜{}ŒŖ]h”˜Wd+½Bī)°¬æĢæŻe§‰CdüäF ĆŲ8A_WŁ Æ žy†**ä^Ų}("q×~`æC,ķ¹µĀæ'õƒ§ņ–@¢·Jycq†`;ķŅ€¶qćŲś°aQ=ĀR‚.WZņ€P( °4³Ūž/šteĢķØĄ+O¼²–ZuW^ss :ū«ü…WBAĻ‹’Q‹Ū©ē“®€W”»SVFX”^8MøÕwu€Ł]Łā€sś į‰ahß׈gf8lŲżēŪŖ“:Z3‚öĻjg ņŅC“®O f1™ˆ7h*ThQ^BPÓ§ՈYŲó)œQȤ¶)x9 šĢ3¼”UŚ`€±9ż}ŸÅ”˦õā‘ŁÄžEL^`¶ōXjÆ=8‹ī.F­ź€ ¢}x«¼Ō` ‹§9P¶8KK-ƒÆx`żkK}‘‹ą{ȂĪM-ŌB0¾#ų"*×+Ūm—†Tø^#Ö„])SõĻYÖ# -Ɗ¬ÜĢ“%ņpJL`¬ā(Źj|Dø‡cĒoÖq_¤ å%ń먕c…?„*@1KūÄ*@yöŲ|M,÷ÅĶ”(½eѓn±v:¦ū–n•)Ā©ę÷99_[£ō;mZؚ!Löo1ę>¾ƒ¬‰ĆÖ^0żŒĮīDƆ\ÓNv@!°Rńøś-sźż§ØŲā[Håø†ØÖ½)düĀߟ÷†=ą'0UĘŃQņ8'™s oW‚]%±łŽ3Ō„®ŠqņÄj7»]~æČtfiĶŁ«ˆfķ\bZt_H’7ØO¬Ę·Š70ņ%Wć6‹‡O’U”ĒŁ°Æ „`z-9X;3Wēæ®CŸIÆ2¼;”GūĀ®ŃÕPx?_’ a…Š*g+ˇ÷ķŹ‰Æżē½Zh–Ģl+Ł*uQ§źZūæ˜^ܛ³⊪F>CGō2œF g5? 1wm1pą©wW°j^„åŌĮ“Ōļ“]ž«->ó‘Óõ/@>Ģu›ÕŽ-"ļ<@÷x?Sßg€£‚ź!] §ü¦ą!]„+¢¹¹ø«Ų‘ōc"œéķęõīAņ+žb<+ļ&}µ“~ī±n“_GLN|ua .;żjBZŅŌĆĮ7ĪPpŠ~††Ü¦ÓĢŁā>Äć¼0_ ¾ē§g=1–š×īĄ` ~CŹ~sqŚøsÆ+Õrźš~0Ą7“××^ω¾š…s&āŚĄ€Üń~%å ß‰xćįĮķ6ølI‰Ś—ŗ§ļGOFbB‘ę_¾˜ ŁÉ“¤heōd@‹d=mśų2rM~XX^Ń[K§)ā:8‹Æ“­źÜ’ÕѼīځHķ¾O¼jm4ŗ‡o·YÓōā•(/Ö¦“5ö–YĄ©ÓŁÉ;é—'˜?×ĒĘ”m–Z»ö0„­³Āō÷™&[¾,7K‚Z˜å„OčPÆŹŒĢ¼¼?š ˆ–1¼KP4åF-īŌ`ß'¼VtVhVń(b¾ ŲB}eĀ–œtļ(Jūä(f±?E— …_Sś—ŗUO§Øš_Ä̉mCø©ńu­Ö:²Ļ5>N‘65W”*Ą¾‰@iE/u rĒõ ŻÕ¼¾Ń&Kµ§ļ±Ņµ|ě–/ÆbfHn¬ó”Čæń.XFšƒ{~„Ō{pŗ„iŒ>̶ļ;ó6,ųµMŁeš¦č.č¬Åjj üx•\Nyų•Øv>¶¬Į ķ(Öæ[Yįāh «“—Yįž‚c ’uėWBy‹8Öų e! $Q©)Ł©w” ēų—TŻgké.ąŒ”łŠxN(²ø#«ió6/iŪäJįœć—’lĒ­‰Č£¬ˆAl‰—TKžG\ė+¼”‘>ī‘Q€*ž+÷–3ؼ/hvć°"ŒŲ#ĻÄŹfׯ­±˜ŪįˆćSÕtAō!Ś_”=å~øBüĀ"Y·UĻ S‹#ē38+‹Z+ŗ•K vO.åŲÕmJb€į M8rfˑϤM4‹éĒž=fŲD_ r|ĢÆ0Ēc˜KĆfyŗp+ņĆ]Õ,ƒKAg޲‘Œ”Ƽ!·FÄĖŪ®¦lŻŹ/˜ ‹±śĀ;…ōc¬–»~óČĻĶzżģC;“rŠ>DŅŁ+įq(߉…ŖFN*»Æ–h ŻzJRܗˆ{Ģż”c¹Ä;ī”d̲ǓĖDĮTžw”ßuA~8“,q)F2Xxōź?Ś.5©ŠĖĆą—æIķ7ōYOXź=٘łdĶ4;Ą›Ó†"ņ߁ z\xRļč0«ƒgl| ?˜BxpŽ®)ļWŅL?"ėg’! bQ}b’,?g??f` jx`X.–‚¾®ģ3Ņ#OöCo“ hč@i“ģÅ#Ļ”|4ÜuĢŚß__¤ż‰×[„øšøŁķQ° &į3Óń„lxüīPŚ| ,÷s®Ē¼k¢7qŽp ʄ£jĖĮM'˜O‰xk܂“c_łž‹{ĮÄ+č  m©ģįėGøpŒ§e[¶Rą"[ä`qH¹R—aķ ¹]™†›_X čW£Zr˜h9(śżģ@VŒč»KL;Ŗ€ŲoŸ3 ]=&BåKFSpõL1Į8`mŠAŪÜė,‘J/«P«ŖX:“ƈņeŅ3ė’’Ęāßh’Æ…½{²Ś‚ÜĻįā:Ł9,57öę¶ļ,ą¬KOė±A*sXČjłų˜†ÜĖØL~ā=Ö 4»=R!Ńö&mŽzÓKŖ‡¤4ōŹ2śa§ą™XuŽÉ­Å`¢%^LžŚżČłøl}a$QWė©¤)=śäjc;•ć˜wƾĢbž*lĒVbŁ-“]8†9†U/+Ž6µš:m÷÷#f®F鎥:HÖīżLæ3^śGŲ–œ¬ ź½øMQ\ųʼnH®#Ņ“†µ÷?¢zÖ*qJ±Æå˜q©Ü…ŪŚŗ±$"ųTlh6śy©e\Ī„ ›Ÿ@©õė_üłæK:św‹Š )—O07¶Ķj:ȆźļLVs0ļœz UöĪń@ bŒ¼œM%Ė+ö…Mj÷9ęT<¾‚»!ēpˆ[ŹĪnż~‰ö&׿ֶŖč¼=a# Y*¶„ ßKóMŹ£éEž}!ZQó¼KY³UŠńń,ąŒNŠ{’‘«^{Lī ®;@mŲ†ż”¦Kpßf'"åTŁ«¶"Lģ“Üo(6ā8ƒ}oŠ!jń li°A•”&śõĆozŪųŠy¹†ņ”šˆŒ«kĒĢ»¾ņ!s5ˬY¬źyō&y4ąĒŚ_XTäŽf}ƒĪ£NČ u–hڹĢó­ūJ³ŻŪ­.T²¶rÄD‹*šŲŹøGdźū°uZń Z™½Å ĢĪ;hEčB°€SdmDėy`\*,RėA̰r¼V‘ZÕĪ”"å`’1arś“ڳōœÓ#˜š;3¬JŚJGY5ˆ,Ōņčēē„£„•‰ ‰eī&„łu™Ī“ϹÜ܈vRó­eų"„Qțœ.Öa…®ŚĻyF Įɬ'Jøk‡o‡=#rC}¦mŌ^z¾šĒ0-.›õĪ—·Īełp¼©ˆŠˆ”M±ƒ]ސ¶Źs Ŗ”.˜nV×:Øf•LVvH|ŃLģš#e‹ø­zėöf¢Ź‹–_– ń1­ĪlĢC7×ō‰h(‡Ė.d­4M+±ķķ—YK̬Wčų+p×¢ƒ“bū‹·”.šKČøN².GYŲ–~ćpl5öŚ–“3ŒUK{\ex4Cė1ld¬ö4 ę%q¹Rk[į0' ķĆž]¢­ßåp-üÆķ+TčōŌĘџ1ńŒ[.µć×gb.\Įbŗqå—ϤĒĻĻęåqʺŤT @œT²¼ģ£Ė¶ō¬sC[°Ź„üq>¤¹:1¦VoÕÉ.Į3~›¹ń’ ĀčŸoY‡^v|&Ö:-Ē _n)Ō'ٜIšŖŸ8ƒ’rŌ+Ąźōš% ĒĒÅĖÕ\¦U5to©čŗq_xh=„Aö£ž–GK’ ‰Õ}uo*Į»(`–č=ÕĮE8Ž.Včil.ž32š‘Œµŗ¹'”kŽc%¶”6SīŒu q} ¦œ–x1ÕŪ}¶å×Ž Ł]½x ļńŠż9øĮĖÓX&'”c&¬/ŁÄÄR®Ņ ė`ײ-Ÿ iūĢ;}:x}žńŸŌŗŹŹö&‘Ę]kŅžrĪį칄¾ó00x‚ŽĖ Ōb1}¬v“ķrŻį=*†¹ŚłģŹ»qĮŽ0«“ģzs;Wf]%¹¾œJ°³Ż7^ty¦†yY]¢ĖźĀ0¢lkö€,įŸi¬ŽŖ(t¢K’ )߈÷ E{AĪĖ\… Ä.„•BĢ•ōˆŌ”w»ńōōœV•¾ŠßŌ`yČ£V$NiS;! ēĘ_ö3ßÕĆŁ;Ū(0vŠø-Äē@ĮˆĘ ĵG@“+,›¹ø%ÜBø¦ræbķ‘÷õäz‚[Z.e)IfłĢćõʾ7õšd>Ć_Ļ„źń>ÓIƒČżżlč#Ś5ĒxY?-ž”j< ж©•½ĪGµBwµŌN‰źŒ2Ų×6ē<Å[-oB1U<5sźŁčCtū‰½g€.2U½q׌gć7MÄ9S§¹ū'OĀåC˜d嚪\ŗ—ü­€JĄb®±\Ē\ƒļ  žƀŸńŪ‚Øé éR ŻžYR4®gS#§\kĮ’śŸ —ą…›]£Å–’‚CŸX-wĖė)eB}ŸxNØĖĆN3Ą„h†čO_ri¶š'„‚²\‡·źu'Š-–« ų”9'Õ#uåĄLu­‰āā—aŅ€z92lH®ŲtŃ4Ęy2Ģ Ž‹č3b†W#WŹaĮŽtüķPL Ū‡[Ä\G=‡YQwņ­™zĀ,ŗD”˜©“ėŚĀ{¢ZŻB¬_¤“Ķühœī[²|ÓOˆśĆ\'iō§Ü—Ķ«}½h*¦ĆĢ5šZ:K¶VžšAyņéé Ō ‹9Z„xgHŽh £ŅĆéü\ĄĆC“AJ9OOÓBIĀJD³õYĮW~—rř*KĮńU­„ø ĄĒz N(:Lš/ĀVÜ×#±(—„©·¼»\£Eo¬EzÖ±ļ £ ŗŗÄ “Å™kėa˜ßp˜ā§/ĪÆYcM„o£÷ŸB}ɝ·)2śņ>3<fÅ+Ļ}Ø8"ŁøƒˆóŽ4PޜÅqs Só):Āß Ižć™AP»ꍐóśkhé%q¶Ņ"ŒV/zż ÉæęUš·żK )½`~ń āÓ:zĆ”Y±źś`šĆŠ•qłNón 'IĪĄ+^%ŌŻ@·A+Yó‡xՏ’WØī÷bķ5a”^Ū2ФÕūąą”ÓłRĄ[/”*Hŗę‰F;v]x—‡tõ¢¬"īœö¬ć¬v®ģßünĆ×bōEļõńDó¶ j„ķńź *ŠLīź&#saŲ;ōŠģ60·ˆ ēdŖ^ÄmƗ&C6w7/č¼Źłķ±˜Ž-čī9€ pŌ2L9‚˜†tĀoŪÕ^æķµ`ģōĮŚUõ5:OPSW9]xˆłµ©eKŽ f"Ū~bmw€ ŁJuGŪ?n²«‚ÆŠ€YƒŻĄNkńd±Ń4m³Õė |&\¶ć(xƒTĪińp÷Aé;±Żī RŁ­¾éqAål¹$Ųņ¬Ą Hü‘uŃ2ĒKc¢' ™ŻūĆ,MŅϰ̩[īĒŽõ+άŖ¼Ł„ņĮ`„-0ś„,C ÅE-ęzÆ„lŅ8 wOOĒY|̹tķ:0„Ē£©ÜŽÜ›ĮwźÅ'pź‰ūfCŃܬ-‹É–¼æ ļŅыŖ:ÅŌG&ŪŽY} ¼oķ7ĆY”¬rŽ*É 1üńĘ«ŚU¹«łõt(ķĘæ?Ż„X>ańžÓRƬąōšA”"-Żg=¢Ø½ĢS_-ūD­:_–Ļ˜ņXį‹˜=Ɠˆ–ĀūSR“»E?øk¬@F 0;£ó˜¬ŽØv¹•ć_µĮŸa&[‰Ŗŗ5“«8Źžd™/ć;—n Ö;Nl}%f—įšęe‚/ĻøÅnžuõf®škośzģ ©“x/uĄ³µ– ó˜] ŖezļeŚo»×2Š91 ŠZ|q‚¶Y«B“ϳ.CśOWēH H[ŪßŅ¢ĻŻu•īĆ6’[:1~e®īŒ„qÖ¬õ˜u›SĢ$„ZµīöŸ=•4?¼ā.:Īo(pŌ½{LucÜÆė‡PrcīĪO)-Z³R’=2} Ź·ŚĻó˜Ž ĀŻųgs ŲµNŌ„ī‡ŌIJ±w?Ö1£Ł‡×ˆņłŒ'¦»Ń|^`8įŽ:Ł“¹pų–!Wær^JcLq·ķĢJ֝e)C9õ×ÄüĶ9ŽQ©Ł$5+_n¤ś1æ‚@“’$•z­ui ÄD¹T”% nW^å„dų¬ā(š3äˆŌ!Ų—īy™ŻąķöäŖ/ģ@Ēv¦;AV’Vr±Śµ_$¶Vƒ¦Ķw”µ)żĀ3J\36t<µ‚¹~.>¦q_$LÄUū:Kk²&‰Jc„!Ł|‘Tē7ƒš‰}į×XDXŁģÄ=S¼Ŗ€<ūN} [HNdś'X+čž#0¼Æi¢æ fĄŲ9—z÷ oŪÄe¤ŌõõĻw¼ŚŠkØøĶl'ÓŌÅÅņō™®ī 8øq5)jιØWŗ`_@˜pˆ0•īIÄ»¦4Ŗ0Ė'Ģ€žYX֝‰]QāP„Ux†ĒŁ%w&7”ćh•&Įßķ1Ģ{÷–:÷ÆØp/ŚXB9ćtėłŒéóŸįø[‰m~÷#4ó+ńĢl­¢†‡IdVE+ęĘøõX7ā#ńqś,īOćĬBjېo.že¼v8ńģ@Œ‚Ļ  W. \~ƒÄ›Œ±u£ŌŲgħ®rž^PĄe’č~Ņ›}›WŽ KŽ֐&ÉÕpūʐ»ł1®_YKž uTčB;x: ¤¤8—RJšö8؁Ž‹žĘXPŃÄU”Y¬Įf€–]¾xަ.•¼æšŒ@ĢxJAIĢerLı-r•yŖ«öŠ pī”éŪÖÉV’i0Ф0cqō”~ņŲz]ģĆ“sé+ō–śŲ÷"¶•wćŲÄWm,Õ„Ę—Śl›‹@ —ĵ,§×ŖķYÖ©¬ēÖĢj: IµA§¢4ÄźŅ”kļ,EćūX%ņ |xšgxŗPJĆyęŚĶ¼­¾± 0<¹Č¦ŽÄh0C£«o± ņŠ~ŪöŠF®¾Ń£­ż>'d.d¢åU._Ŗ\”Ź5H9‡Ž?š–®ˆų‰Åŗ"©h€YiN²Ć’¤Z&Īž__¬°_*Ü5ł˜õ„—•WY“ˆŚ³¬%Pd± Ü}ż‰ĢŽzߊS¤co³Ē}ąek0˜v˜¶Ö̽²±T¬ŹsĖQąF4äZą”~„ŻL5”ų˜l U~b”lTĀ•źL#†q>QōA‡üŅLCn—Æi²'Įł‰3ĶėŗZęń38`åT¼nh9ÕŖöˆ«"c—PŗØ54pö›D÷&KŠ~ĪŠÕ…Ņõ0k9m²-óƒS*ł§74ĀR#ˆ…!eWw­N±k`ī‚ī>"  ¦ā"Īv¼ōƒXt 1Ā'z3»#*Ļkų€BS©y¹Rótā^Ł(Ü®[iZ>{Ģ”yQ¦\~ųˆ2~¤¶ l·Ņ§wµ~Ń "žQQTVØ&]Ö.Ż#n6V»9ŲÅÆ¬Z ^?ć¼?EĮįøĄg”;«( ÓÜīÄĀ»Ÿ¤ėÕ /›u)anģ/‰‘¾ĄĻ?ūuŸóĢĖŖē9Žr„ėw`ž`Õó Fx5…ɺȤg¼tqƒ÷zį‘ŪS K …‰śæm#gAxY”µ6„M?= ųė¢ßDĢĆky§ ąōĢW|üK·We4ó+o£0­$%å~›G¼šŽŌ w’l†ŖS /Uö™¼ ‰_Y”Xļ(—Łļ7JöbX,r o‰aÓŁ¾17•ø­Ü0‡FM…ßg¾•R1­Ö`żˆ‹D"Éß 5a¤Ą“®+£øƒåt`ČŃ[ǵ:¶¾ŃAų„±C7ĀKX/ö„±–§=¦š…ÉQ›Wtŗ˜ņ*¾:n 9ŲšĢ3ccŸęš#cńRŒ(W~¢”‡8‰8µ/āPĮe»tŒš’ģe(>Ÿ¾ZU8Ų@ģn­!.–ĀļÄżų[“-T½Ā% WŅ °tš®™ƒĆ¬W‚5ƒfØ%ĆtUk#žn2{vnx®óm˃,x÷ÕqŪöFĒó%„µxĢ£²xv#u·84!G“ŽøƒpŪx4Ģa7ķėX=¼Ėö®ĀC¹ÉŌLąaęóH ÷€v*5"Ōy–b«Żtøćy^Aˆõ£Hžeō­ž,wƒ@°ŗš[‚ėX]JūĄ:ÆÆÅ5Ę9ŌKÜŹšóĮ…56­±h3VQ­jĒåÄēUæ5š:°wa–>eüq‡ö#ÄOXź6«Ōoõ\³—„–|ĢźŚ­Ī)Ä&!ܱī™)Ь[Śt±±s­ä?˜–Īē¹Ń¢įÉį:ĘÕjļR—™Ü+Ł[3‰ #¼9 1ńFÕā4‹0ō—3ō.ŅčĢKZóŸ9č8{;üė6Å+ķéžė-̹@¤č}¢Re_˜č'=E;>ó2ĄüźhečŌ¾ļC|œJ!M€GĶī„ąé,‘Sg«ĒŽ‘æ÷'ŚR‘„}ˆæęćĢ.ī`ļ•Óf?Ž„ćS/h ŌdͼŹ>˜¬Œ˜ŸP•W¤\ÅAÉŖÅœ„Cš ߈ Żp×ö‡mü~=%љB4Åw—Ćž2…ŗ'Ÿ˜{®Ł,݁ÆxWvR4 O±96Ī„č•0šķ,ŖoŹ›@CŽYJÓ5ļ #ČIu·ł$*ŃńąÄ®¢čsC·y˜OF½  »·Źā©Y"Ć·÷ėƒvV{–sü ±z@sJģŠÕŌ6ˆØ¾ca1×d§7°@Ŗa/b¼ĆĖ;`[Ao"œ(6ū°v %õŽ)Ņ8‚ƒÆ«éöœĻØŠÅdĢ#ÜšŖ(?rU‚óY½mܳ9uˆłģ‰żüF.“P0t]@ \ŒĢČÜ~Ń3Ī«‚>üĄļ䌒b}šL’±vœ‡¦*&Ę?ž²ł,°zō&Lœ;;µØėy=lų€3p±Z–bÜĪĀ^ØG‡ ćĢ@ <޵Ö*L:FųD‰aš“}“ķĄŻpć¹Œ ĀU{Ī|M¢œ¤…ćĢŅ£ õ?:Ė®qy|ÕĶZ¤:@;­ĪĄ—mN“_õµ(%ķĘ£÷ ś1>cŗ‡—V”üśŠčysXķ/äąŌ«†» :LŻEź]¢~ZÕNž#ų7Ł®°Ząɤ?¾ž¤Ę}‰Ä8¬„S¼’FF‡oŚ äøēІÓ㈽±Rä¬ [­|óčQŻ«Ż6o&ĮĀæ4žūĄF¶żaÅ<„ø–±NWĢ4„õ¹K5˜ JĻ/#-†Lęń" { ŽfĄ<©œĶ­`ŒŁVķ§Õ^F\ą‹zT”.ˆw)ŗśNÉ{ƈī½j•]ģĻļØI†³fSs'ęÓՊ{u{Ģ*ĘĻ [²Ōģ.æ˜Ųź½óf:ӆÆõŗ„ ar8iPµnÆ>¹'^/ĆżŌt‰æM‰ø1ÆmJ¹x'VT Č;²ĖŚ£6s°YXśØsŪÆķ(łz¾Ń–@°M‚k@7P°ūK7͉fČč¼T ŻćÖōh±zb%l¢7YNō-ļŚtßQŠ8÷„ź‚ų³÷™”l|ž”Ŗ ³šy˜óWžŅ³XŽąvjb_)l¦r@FüA0­všµ*Ś ŒdHŅ+Š¢/l+śó{j–ŖŹ‰O²dm1¼Ü:w}Ļ®J™rļæi³ųš„,Næ"æc™•äƒqšżå-ŁņĖh§g³3*X§™£Œ”8¢`ҩ͠mČźčæy³všŃłŽsG;½ŹH–ųü0lĒéFŹ©o‹KƒūŹŠŒQ·kb¬L·'÷2,‹“ķŗž‡ƒ°Yń…ē;Ż>02žÓH Uē>b«H:üœ{Ēi^‘­©¦tÖdśĮĪnŽ ™Ą’2WõÖ V±ķkŻKĘr†ƒŸ™¶ƒ‚˜Ŗ†A]×ÓPÅw@ ć”Ż[×"ļējĖįŅhĘ©Za8ŻpĘB­v`7 €Ē|EØC¬ĮT˳}{@×Ē[¹b1š>|VRĪÕÄ E‹7ńŌ•…®ķ ä% n7:ą<§¬+]Õ<ßŅ;šĀ¼/–2Żē^:Jõm\)å›F×t‡‡`q‚½ÉśĻ»é_ÄT5ŌÕĒ†«IhBųV~D Bģ¹z=åŗmOŅ{ƒy‹gH-vŖA?‰gTįk«Ä© 9kō'E)EhZ Ćc)ēĽ¬%·W˜Śƒ±GāŽTÅŽ`Ų³Įøūµ·ØžČįńžĘČ £éŁ– ‘·TņÉzzJ'>Qi–ī…µŻlō!¼£§”`üIĀ"å:"+„Ė‹ę]čɋl^+āR,n.‡ēŚoļĮŸbx\śQŃ܄eųŻĖļģ̼tQIFYŻs“b4£eƒģ8V 0`BUOTČĆĆś³B‰Ü£›é®ņGģ°ĮG­ē¶Z³į:Bē¼Oā^Į攌ć.J.Ī«t{ĘōbČ*m^yĒ«Ozķ bļ×-ųN²Öė/n{z5lSĖTæ³oŅWxH¬õА8üÖ?hęįģÆż€’ģīŁŚ™Š’š#˜ŗń‡·–ń1÷oQ.XVĆˆč£‘śųż-v¼_‹€¹ƒņąÆbżyż†œ•_;Lõˆ)»×õ…[ĒgNˆŸUæ“®nźę¹Æ÷×x²ń!ŗßÆ-ŠŽ½ 5±k‘ü“tҦąĆ„ž&ŅĄm«ń`qPÕ: B(uģtę)ŠŻ¾ė¢uEC±4øqÄY 9ˆƒü r®.n’£uQNĶECžfÖ;ļƬJ”‚ĻēÄ£Qe ŪćŪ™UÓ)Xę¾čļ뉣'Ł2/ģLįź)ī‡Ä³Ģ2 ¾źŖ@{ļr˜Ś=üƕ^U1äs£¾ŃŠÆ›Ŗ7ŲÄ9®žŠFąšIG%÷ž“Q©ŗŠų ęÖōśA©‘ܘ™ö‚»ĘÆw¤£/;LOĘ£IOCh$@fö|ĀŠ‡^e,[_Ņ(R8²Āŗō³]å„KŒH™Š]oėuߎ8ŠĮWPĪk¹   ņųŌ*S Śj L'æõ†B—&Š_ᨿŗ,®?R®æ¤=|Xؘł£śÅč%åG_ŽbCäq1¢3¾NóŒ׿˜X†ŖŪū}e£*ŌŹs¦uź/½ uØøb„ Ąźj4ĒńlUx{Ÿxą Ŗ„KŅŻy‡ŗ•®£zÄßļ* °õ^k}Ģšņå1ņž:Ęw6ņ}eWFŹŪ•8:ŪQ1AE?<Ė®Œ1yD–{ńśÄ¶:ü3* üT„¼ސ5ašĶs]8TĻ\µŠ|G–Ķ¢å€ßĮܾ°)”i?“« GŒ·°źa4*‘DÕ„wÖ8²p—xb—Ö’>ØVšH’’xKWMØCxóvżå]ĪߌŗÕŪ1Ö cé.‚(ż Ą‡ń\blƏ<„ŠÉZ»]zž5¼NZßü-ø%4dż  Āp'1€±muŚbڱö;÷œfi›QyOfY`A¤Xt‹THū”²7\&‡ŻeŌæŒDŌ“Wjļ8.Æ0š^'N(āQÜxŪId®r2Į ņ’°ć-H2bąP÷n¾ŒĶĮ¤ŚŒģ„Šßņ»…™ŲÅƋ§jTqTżmMŚ’!ś@õ/³ž4T£ŁÖmŠ›¬1Ģ2óØuŠw.P\†(Ź%egFć—Bģ÷Œu`tĘ *Ó,ͬ†1ŅńXćń‘Ė™™DF¹4¹°¢¬bšŁDYOZ¶+“¬3§•Ą*ģē˜–ńb•Ę&]r¼ĶĆo&¦Źp»²ƒ¤¹Ė·I—ńldz=„2”ŠdÕx•ąŁP>ƶͤ˜}ĢŹøžŗ÷©}e¢iź÷ž¦ė„üAh풁“aL/ÜŚrŚIÅä-ˆīkĆżDĮ–Ļ4Ģ5M˜=oķ3§¾ŸØ«ŁŪÜŲ„Ī$ ā0•ÉYō¾6›f:ÉY)ó1›ķ}ļu_ćļ“:å/7Q9!PĶął—¼6÷T„—āē ĖLØ«¤>PņŪ ‹."im‚r÷œgŪsé_(`¶ŽĶŸyƒVŠJłŌ†xįó’ P’WQüėŖ7š~goųø­±±Zęe­‡S5‰Pp€źĢgN¾ššL¬kģ£Z†zŸF%ÕjÜŒ•„ćEhń,ź[cZĄĆ"·«OjŖS”ŠĶĢŁ »ļé­ŃeØ'ō!FųpTK0ģFs`E7Ńæ!C†’̽ÕC~č’f›“ŗQ߃²bz¹:2ŚŃłWöŠŽ"ØZ»2ó:-ß?„@Ø–wJż!æÜšN]tkÕ,7tż"[?’žd ”D[ķ7kx" bĢ!$zą|̜¦(صj½°Ü²Ąrø‘¢Ę!XT*+2”d„ä˜AļÅ=ćQ\µš²ŚOźĖ<®%©*ܹ¤ž"Y32łā5õŠF3śZąųƒH¬!­gŽ*ŅұUüĢfC7Ž\›ü»õ•&K=¬—½g5Šb‡ŌXØŚŲ¢Ŗ»ī_Uę8ŹŠfQźć«_1"¼ĘŖįZU— ƒ'°}Ž™<]ąg»½śŠhR“Ätų0ų’ˆ“źK„+ƒĢsPŠzģ{F+wŠ}ћŧ˜ š9RŃ*ņ—›‹zÄiē70Ą4»Š>a b]e…LØpÜ"?ä­Š¶ĒS)3Jó*TŅšfŽ !ŒQA¾°b¾%5fąź—dęčŲu1Ł+?N’ńJšc`r¤2č(!-'1;æ0Ā5Q_UPö‡åbØō|]†*®Ä¾k× ¤ķ`Ø‘ūą|±•5¦Ÿ"DXWU˜¤Vļ1Vt¦}Æ·>Āä’čĻ÷ąŽž¦,¤į@æĢ’_Ó@!hu#^Du |]īŽĻ󣾆±‚?¹ˆrłNpyR¹ŸqL’²Ą^ōš¢›ĄĢŸæ€,·*„äO4ōVMi6ƔT y[ ę„>ŚõTļB»Ļń u3ŅYŃšŸäLcmÄöiHTń‹Ęz¶qµgÄ}$ń)qoz“Ā›š[/ŠEY»ĖÅ īŅģ(9FjLų‡W_tVLÖpnWEó6%ŽŠJ<@»Īg e4o” ÓQ ߞv€Éų S Ģ.¾&ytA”ɵH²ŌŁ+Žź#kkŽČwģąKEģ•]KŠbü"BPn’‰ÖŲ¹ŸfŹŽĢĮK^œś»‰Ś|L×ō%ų§iń)ЊļāŽĀöō°øVÄŚé4CŚv-“§BQÓõŌ£¤£§’‹’ŚN8[7žąĶõĮkrōšP^8„$×KD&cn†{ųI“ ĪKī€!ėźpg3›ŽŲkńF*#8/€ckp Ō&C ¤@T)¢W8Üö EBFą)œæšģńgā\ŪŲ…5Ę 0•ĮFņ0éY啇`!øšE›*Å\Œˆ&˜ŸŃ‡O{Ł?¢§ˆ›»NŁQ‡ køČ @x–öœ( Ą%+WvĀįĖ” Š7KDXź©B€u1ŗō›øyØR8 ĻŖ†HŒ[ ŗx™”ÆbęžCćŽA`MÕ0p3 dh5b˜G Ä‘øĆ.š`'PqĄ ņv/Y;„ŠāB•.rAuY*V®•jĀęZgo€~3pī˜'ӆ"’ įfłŖ SG„­ŲId/=FĘÆń‹@Q©ō;(8†Ņ€<±D€ DØj2€@1Ē*ĶĻČ aš¼Q˜ ŗ<Ń " €>·ßĄ@‚CÜØ;ķ?ĖfuāEŻb©lŠś#öQa<Ÿ’€’Ä*!1AQaq‘”±Įš Ń0įń@P’Ś?ĘP€§¬J󒩫wÆ’5ĆM&±ζõ™KĮ°AšĆ/ż`±ŹÉžWyŗ¼Ē›¼ŒäŸœE£ö™ Ą:ųĄY…č’ŒKg™h"‚õź™v’u—æ ohPe3RWU&98C#m5Ū·5xšS«Ś°2#ĒõŒ‹g/Ū©†ĘĻĘS§ś™,-C#ßöü`EVęßĘ ]ōćąfĒ“’X°•ł’¼"09\æœDöLä膺’V=w&õa!"?·움Ę0eƌJn7ūėŁę<`؁~/„ “)ØiaĪHIĖÄKȐ\˜B£RŸ”œ” ĒéÉRøCże‰äXÆl^"Ba—æ?œEŲPˆrŽõé:·#r²’ŁNPŁælvtȄó3ƒkTøžuÉmnp4ž„Ÿ:Äø*O¬Arš\ē­€ČŅtdČ0Į6uŻdÄvPņ`Öń@«\Gk£!‘dϱe¬L/ˆ1 (āÜ„NQ2»ąĆ‰Æ>Żā^&gäĆå§ä3ĢqóˆUÆAšdN俘 TĪ“°clˆ¾# ån?':éķā^0ҟ†˜O é/äR"p!ąHE:×¾(äǐtöÉ\?yā+ ꃎ|ńƒ‡‚­DļEšIŸXn\pSń†H qäóŒ…3§lŁŗ¢…A}dE&¢p¤5dŖMėėY„ZēFÕ[f8ćIØÆyÉt–ÖŠąØę™„oć kœwVOę=J0€f Į»BMSo Į c\bØ,‰(uĪ*±BoļœŪŽ GŠ'_6Žż£ņW¶)˜Ģū†[w³ń!Šaw0;e? ūÉL­7¾\ ćŠ[™PĶ8•Į2e”ŅŗĒ!Żg†œ·1®'‡Č™’ :Góüb}RJ‹äH?ó Ž‚‘0_1¬łNū~īģV8Nƒ]„ y‰Ą e/øÄ֍/$#į…ą®#ęzl@ę&㢪½°XĄ÷ŅYē WY ļÄb˜h™‘9÷°ĄdKMŗēy@<ąæPä$9ŚG|žų‚“H»ųdęĪ‚|ŽKśäĪRŠ9Ųd1šŽ"/* ė ŅõōRū~Ų“ %3lµčdްƒ,”Eć"/‰ŒmZ¬Ż§Šń‹FšŗŽe!Ą“*AW\žpˆ«+ZѦ1ŹLÅraœ^9 ļār»"“ą€yXŹT||?ßŃ$I\NÆCŠ/™,:k ģ“EȓGż9<7A“č‚*LƒZž÷Ьg)®QłÅ.©rŪC!k³=Ōa ĆDÅnųuX¢A ņΓτ "?_8&} żż#@ø"SOē%aˆŸĪ@]¬ųĘut2a7kžń=’E4kgĘ ą„Ų˜‚ßz¶#”ćē j”T“õ3WķO.¬‰žæÅ„œ’ĪŦoŻ1kA (˜d½[K¬Q7%æ×”…\V cC0_õźĶ {ß' Ķ8oĪó‰y,×å+ƕĆ!'œ¤0ģéҜó]™kEŲc_Ė""Äņ?iZ‹Ģ(Lw‚—Õ,łxĆ“ŽÜ%Š”Ā9õb®į£–,H[ō«S•MŃ»/¼rXē‚h0`a{Ʉ¹!ŖMLqxŒ¶C2ļöšā«V8W÷„`°k üāŸ4„”]¬ƒÕ+€Ä+ĪŠ >Lü&’HjŲx¬Tī„F½š*€[F0&ūŸ¦½°šHL¶p6>’稛{ąŒ° ÅOØäŚ…E6}ānÄ©°œå™rGļČNŒæœl0d‡ćyNJ¢ŹNčĮP‘q6ģ5„dG0Š?„äŒ)×öi֗”r)X!Ŗ°8éÆÖ%솖=&Lń`™U+*#5)^P}įŠßzw²š8€Ā%ߎ1]œŠ”ēčĒ» üŒŠšÉ€LO“1€%'Z.nūĀž!02!%9 -…ægQõ”Аyžī§ŖLD–Gd§Ö™µ68»^}³Œ9 /½Üż2?Ŗ`Ģ½õé& ½r N!?9_–ŹQ“ŹS'œČš0ˇmÄõ€0&-ŃÆ|U)[­ö—)MO)uMčŒZ„b°L9)2=äī’į`É;É "É)ĮĆ»õ*šØ¾CÖöī8ĒT *{p˜„ƒ¾æ4ø 𛵆€‰gE8,† ö:qBÖļæąĆaŚś= "Ņj^N##`€¢Jö_ć4”§]„įŒqó6U®Ž5ƒ·ƒ ]®ßš Hüb¼Lsb#²ö3śfŚf^ÓĪi3Åū:ØĀF œ‡ÄѶÉO÷Šģ‡h@#į—¬V탓·‘ķ1f›Ą$Ȍ³õX°‘ ®ž« LψĖY1'$ž>p°¾ķ7#+«wœŠ—ry# ’Ē.ˆ——&`L:ÅRӑ)åYśÄąDl€æ£ %‡*3«Ėäƒ™ÅĀQż‰įĮˆE¤?ē(5’LO#É ĶŸQ,’ųGń€ŅÄ Nr[.K ;÷Ąi)ąöɰ&ı]¾˜Ņ”Ņ÷bFLŒ‰t"½‚³Z»Ų1Ķe—Æœµ.\ķć¼g&‹¤¼c±ZŃŽūČ!Ē›%ü` üwƒU`*¦Zu4rY ChmšĻć‚#{ŽqtJJ¤lžńP;Õ$óx銩µwõ‚ņŒP£ĘE/¹čżą«Č„@ZY¶9x’Œ޶±™Gļ‚”‹DU~4d³–cLĮū~ ÕüZĘ ¤Ō*½Ķ;śŒ ‘©F™|™(®Ó†Ē†gļüÜłš.”k_ ŖŚuõ>£},Lłpóچ_2§ń‡¶ü 2MYmōāUHl!ī°$Lī?ba*™nk$ącœˆ@Ģi~q©²¤Ÿ‰qсPd²›•ģ6w†öH&Į„Ņ™^֐mu'Ū=CwČĄy\LÅÉöĄä8‘¤Ÿ…Ćŗ%=ˆOĒ£“–†C¢ \Åwśņ` ŲC śĘ2”R&üä;óBQŠ9b²EѹBų_Ėˆ¶3Q‘s1؝a(Y{L¼Q+†“‚šB\D³9'.Fys³8©Ę…hļćõ8ĀRȓ1ķE½’] {¾²O 냸÷Å?iFć—ĢŒi•©^j”PŅFøÉ5±ų\$’"8ˆEĒa?Ž=X6Ł(GäL,§]U&<8$P„h‰…_MbJž!ĖFßūĘßA² a8/‡R„‘'C #:/YzR.į/QśĮč`(#Œuˆe”āC—÷Œ1ēŽ~#Ō€SČ;\œ=5FĢ×4Y)ć)6J”õ_†Wü/‹ŸķåKd kA’xębDOįó‘ÄYPYšbgL’Ā»ĒU)•=”ž°M×ĮÓuÖM0l ·ū¬Kź¶'Ć6øXŗ˜śN&Ģ/Ģ’ypk$>šP4GFX„Ģ%lŸ9½-0ś–æ‡$ŹĀY¶Plöʂ@©%uą5¬½Į0÷ “0‰¢č½ÉŪ‚$ÓõŽ–ķfJ:ń@WF$ˆŻ ŗ`@Ų3õžBP‰ĻPŲr@‹Ļ®ĪśIhäo󩇡(PŽ#H%°`óÄž2…»+fŅņq‰3v ¢’YĖ"Hʹ ÖfOµųŹÉPCƒwĘņS‘=¼4•įųóƒĄ2B \±’™Ÿx?Ų!n8WĒŽIMPĆ~K|Kd^üŽŌL(K ó<Ł~&F‡ó`Ī»+朮ŗ'o›[öŒŁøōĮļž§“$!‘ų>±€v‘ö >1Ą}’ĀCDéŽ!yR^Čą{×£Śä˜XvL˜Ć±(oö>ĒŽ€ ”Ēź’U€ŖĮŠ3g$Äć ō=½`˜fl(õŠ# Čfź~~?8z"ź„Ē“X‚“;`Ž$"KĮ³V~rkk £µ}=ą0’F'÷c‡¢Pņö¬Æ˜(VZ“Ä|d›Ź ’ ­±_Ģļąxc1ćŃV9±0ä,‚™ōpłĆ‡`błAø5Ž8 =££Ē ŁKv޾E湃Yś ü’š”Ļ’Æsx0”č-¹żd…eÉ=ųxÉŻ ©Tóƒ…0³Āą’f„ø^|å¼õū ®;ÅP"”’āØó’Di;ä|ąÅX9о÷Ļųµ|4ĀŠ?Ł‚Ly’ņėčõ³rŌøc¼CpĮšŒP!µcv‘#ĄŹ‰ćq8±’Ėt'ŖŁĪ›`H –1å“7Yk.£6¬Č™”ĒÖ#+iʚ!×x€ ‰ ø¾O8³X ©ü’®DRG^9_Ł„Ć3æG>ßü#dG“0ÖA•^ńŠHjk8ŽCkccœś|šļK"J_/•`ŠÖÅqX2ƒÉH{Ąøą&=ø{?ģĶla:žKL=ĘBcĆÓćü*šą%č9’l@Ń,õ#¢»…&2ĄÓā>6ü`ąZpŸ1Ī9$H 0@L0Ķ÷š)?éX=ż˜r­÷R€ 8¶ŚŁI°©Bc"e$ T+uĪėœV ½Ÿ]ėɄė‚)!ēŠ)õĘmI”Ś®Īh„cjĶüå’Ąd-ū ×XKĢ[![_īæų«Sj$öq]É=BdD2¦šžD (acp׎L(.č†~0i[%++¼Ņź*—ö°™Ģ¢%ų¬ ń Īv÷āńĮĶÄĄAZöeѱw(ņӞp2z¢‘„aÄōųübź'ÅśĪ½p8ūĘ*šę± Į$„ƁņżaŒšÕVjDŹõįĮ† ÉÄT8„1®ŠSąÉ?©Žąšęšh¶¤f*£| Ä亁ń…š±qiø,2°…—"Ęā?óu–@+AūXp Pø"`×ƃ)Ŗ³āT8/sÜBE=«W¢šC„GŁt{=’š,"C¶uź¼¶ڈößĘWŲ BRvæ³{Hf”šˆŸæ¢¦Ģé!#‰ƒeÉR{ž"ń"!£?XoLPSWĄ9r@‚ Ā‘Ū¬B€h䦉~/qåŽUÄyCšĖę„$}‡H}śļ9DĘ«ć*H2›ļo]½.DŹØbƒæk0<8plNĪņ Ā!6óøŸ„q‰Į…‡‡IgY9¬¹v!OɐĮnߦæwß9ZĆ“BFb$oĘYs.I%¶6ŖēœšōpC5ÅFŽÖ2 źxńšŪŌÅ„ž}¢2ÄU“{øĄ$¹2Ą„ƒ½wž§2źB?Xō^ Įq+Ę;Ō¢ƒ|:ø=±'łP QjūĮē‹Ž/„1Zv Œ³g\«Æg¢įF²ł×¾ЁÉ/vżĢ=&e ’\Œ¦Äž8Ŗ?Ŗęū?)“Vä*Ÿ,Lø@­­rśØĮ’ĄšOY c2ąķvĘ0H“(4æÕÄ)ZTYųWńސ²"iŽšĮV,FĒ8ÖpY yļŒi@²”¾[~pĄ"P¬°=’§ {@‹y±Ą ØĮ»qÅ jhצ̄ŅÄōˁ¾BŸT”!GMNĀQķųpūNģEƑē Å'|a1"…oß4qS ūĪøR„e;8”ź‰Bvxx’¬š³žAÄįj4u>N2nßėųGćIhM;.r“ +åžĒŖ@j6¾oŸžKN¢ŽS¬8/• I óõ“Žōd3ģPL°iąųH~qJŠ[Ó÷Ź”D ™Ą2†a:õžņ3!½}OĢe³k(£ŹÅ?ÖCE *0) †z¹ÉšÉ ,Ē J$ńžpüd‚hžłųõ<į1UPŌ;“,|Ї˜ķēėåĒP®B$ŠVŽFX…dɘɷü§ƒ ūŽWK„6=9øLč|†;Ą²iī%ų’9FŸ0YĻN;a\†dĘ0„£‡ųd”|LHNŚß’%Ļ;ķ9]ezю•õš50Įä“{Ļxāń’ū hŲ†yž»1`Į4Ęw\]5‘„ÓɓyāHm˜„%üa"RTSVæĪł1ć īĪ pį¢"#!.Ö§ŻŹI»$Q<<™<6rź,¼“^ˆÄ¦ ”,V‹+®}żapšĒ· ‘Ļ 6z»åb³ƒŗ#m_¤§XH38³IłžĘēĢ<bgEEņå„*}…”ł'&Hߊru©(‰sćä2$Pü„z Å©Ē&RāEŠmĆÖŠĆ©;o0Ēo±‡FŗIĆ|®Nv%rvB.)-%T6Õ_hcOG—xgBŽYn¦ķĶwĒ„–TÓļ K"L‘črā…(#T† }ŽŒ|?ƒ.“Ø"8šœ©U|ć.¾®ēĻ¢ųįAhčŪ—l!0ü³…‰ ~u4›‡ō’Ž ÷étB}żl8žH5ń‚w) *WgxRŒČ˜ģ o¹üį \†ƒóĪXßĮłō43.‡aÖi½"nLć&„ȉĒµb¤ ÖwąyŠüą! =i_”b!.āC’š‹Æ»’JUk+ĖG©I9¢OpY哱żē6‹ ß×ē?&¼%×4—¢ۘbāŅR©āR0•<ÆāvŠcŸsxŚ>Ć"H$Šuē;½/VŪ]h,J(yZÅø,‚H&Ŗ7÷ŠāŌŲö (Tå„ļ3‡3Ų6§&T •8čéĒ/æć$ŽĮüøČ¤wńŠ™äK÷8ŌåÄ!‘?Įsh·r kŻńƒ9RZH+ń¤!Źxū‚-7®S’ Y&—+.±U `÷bpٌBĀæaöœƒŪ€&¤ jؘĒL»•zõv‚”ƒ”ü²8ÉG‡sZ£XČR€ädiĄ5ŒtģÓbĪ÷ŠĆįuÄ~£ I‚ŠŁó­ŹÜ dŖ¼\ulQoĪŗJÄļL„Vf˜>ZÉė v^ŲOõ‡µHzYœšÓp£ß(õĢ ¬Nß>stxF:«­a„7Vænœ)§÷Ž. nS¤ø ' ™RXėž1īO‰7^ ś2P#tbUbr‹+Ʋ(0I‚)6׌sČcAAseĒÖBé öū‚ćĮ@É¢5Ä SU87Q!Ä ńūÉMf÷i/[ÄrŒy”&ŗGČĘ[a¤:dÆø‰ĒīŻ£dm/—g%Ž‚œƒ—ļ ®}Š„ÅoĆYĪŽĀ Ļ&żRÅx'ŸHq]&šąć&V9Xļƒ÷‘GÕŅĶ ™3 žĪńÓ"ɏ‘O/t@€-ļ ¹kģ:™ƒ šTGGē"¼n{ć7dyø?Y-Š…)"+ Sx9œ$F‰%ĢGÜó†°<ÓĢIżyČ!I– æ`ÉX“'õ‚:qĢ ‚ķ·Ē–E–’Ó“ö Ÿƒ ģ_:ˤ ĄäĖĪ*’mń/+ĖČ8Ż#YĶR” Ž%(„xŒ‡-IJ5†hō’SĻ× õ!”K°O#šq½üžÖ|dē@",šn»Äm9gcPÅbŌqZ[ø.Z·#\Ļ€’HŌń’ø8ō° YY¢‰ī±¹•'{Dćńƒuhˆh»…>ł/ %AZ#ČӀŃQdŸ2#ĢcCuˆ»\±+ŗqхõG¤ü&Tä›]Ācµ©žķ ķįF泐PK¦Ņ—Ōšea‚ē÷UŽ€$@ćÜb F RX{ ē)d4’žry?ƒ?čĄēbņ æś†Ńxł’V¦€ļŪ–€P„¾Ó“vĶD„oŃc¼‰1näkažq®ķ$ęõsЁ?:Į¶GT®NJĢ`#‰ƒį‰µRŒ>žq= ņ6˜€¹É °$Œļ²u…Fb–ń피[™Gré‘0W×fL¾ZNAīP5E†‡ŒGdÓMā×/A»ß¶(JTWE”üø •HC¢ØÅ ±õ™eƒ)ŹvHxõųž`ė倁"BaʤjV‘|‘{"ä{QķŽA„["Æ7*‰o/ .e FT@?lŹ/‚¶–Ö0-Ģ­”<ƒ_X³‘ŗ•µŠ ±SćHUCW’H@†N/öĄ€!“æD˜ Ć©/ ~jO’¼}Š`²–šļćÄŚv§)HēĢ~™[ēōÜ•iÕŹO·Õڤj挒v„¤æ&Le!·—Ęn1舳cņå0ĆØ<āOČśG*„Mw3’GI”ĀDčM¹ VO5·#Š™ 6č9Œ¤˜eŹš oœ’ *u¶ƒ¾°g© üĪJC; =ą[!.w¬Œ…”‘~RIó‘‘-æ’a5®±µ±B…ˆœŗCAy@VŠ…Õī²(l»xq« æ;ų¬%š¤ 5'1ßłޱ¢œ›-•|ݵń€G05|Lwy2¢e'ƒŹ£­dj‹&YžH÷ > 6ä>5?œ’ø-5åņśƁ‘<ŽA”ĀHƒRµībƒ "‘N!ē°ā¾Ī3TFYžX" Ž4bj$-WžōāˆLN‘†K` į Pąwō|d•¤1§šA=°ÓŌh²HsŠĘfF„øUø}T ;*wø h^¾å„ÉVKĀ^tÓ& ¶kŽ«6åŌń ·ļ,gŖĶIąś0 ^%Ćæ”öĄ™œ‡šH:õƒ:0DA#å$Ō•Ī ¹)l扟OĶŗ•¤‚”ź“QjÓŅ%“4ƦQ*æŖ×Ö@ĄeĘęnČģCpœŒ€Myu:łÄ’FŒ}p~čŚhMk¬ ІŽ”@>k1҇C°ĘH !ŻšÅÖÄ ‡€8ōxcü–ąƒøĒøĀĆSäŻAļūĮ“±T €;£µøWęĮKŻ:ė `ĄšzFõŠ_³v0ĒÓQ'ėń‚‹9…—ŅÖ5Ī<ܐRJš Ōń’©D˜Ź¦ƒ 3‡ Ó‚£ „ŽÕåpŹ ‘:É»HÓM\ čIE”)Ļ3ꓦL 6—FG ­PÉ*jxœaóF”‘ ā{Ü|ć XĪS6…DĖÄżz˜L‚ułäĮ@Ä£uɃÅ:”|9D Ņ<Ī õ• p‘ē¬ÜHØąą0]DHG¶8Cā”§ÕČB…iļ÷‰ آϯųŹD½‰ ]Żcv, ‚’‡:٘?'ų\ 5&Ļ ”š+’O8”āŸn¹šŒ"D!~Ó^2pAÜl_x= R!ī oā.`\Ū;'ā±I |]³S9dXĶA×åd`2ts3ļ Ķˉä5… ĀyT ׫ 0@ É­ÄĀNģ~2¼•*GbCgĮ,A¾zĶ„jI ©Qń…Č)@…~¼å`c5.瘁”D!!ÜL|e4a%ɵŻė ĮKČ;Qģ* 'ņóˆK{WóńźĻ¤ģ÷ęł1cDˆ÷¬ŠŲ £\\©mü`H«crÉūŲ‹qk–1Õ˜ älL” j`ł*lD^˜bqŽ)c:ućŻ¼2¤ÅāśšŸ4Ł0%æÖĢ”]L}¦ńą2®W“"IhC‚Å%@už’īī£3(“™+U–d,”&Ä28ÖRĘÉõéģņįrrD‡™rOÖ 7†Ž‚x:Ž7MMRœCi É^Īü°LT¶¦£żcŽ5z#õŽ*aq™6G’š^—h؂,„½p1 Q’Ķd\%Ņ\>ŽŽ±„ȽūąŒѧ ’}Ś ƒB"6.®ż9 ž%“'[¼ÖDŒ”³Ł|žń~"WÉ ģ‹ĮČŠ£É PŽ ÆėĪ (©[DŠw©ø”½ąŪ¢&ŠmTÉY0€Ņ%‹ńˆā¤%Ŗ8äĖž=»=Ü=²¢ŪČd'åyé’Ę҈ß%M< ZF¦vo„Ż3ś0õŖWmµļ†Å’ɏæœ}Rć/cĢ> $CČ̬³V˜y”Š M•­`ˆFØl•Ž7Ȏ†Ø€:Bę~27n ʁ‰•0b€JŃČq&°XŒw?“ƒ\żÆaHųb÷$”–b„ŸĒoh÷ĄJdŒ»bĒ•cŪ¹³Pƒ–Ž8šÄż…1£I³ts‡W§t¤ÜÕI3’xŽš6’ õ9"ČX)ņĪāHečHŽCµŲwoõ¼–Ą%DTŌBK;ö‡Ę”ģŸ«©9A©=Ä$x;Į]01J•ˆ©x}6G\āDƒ_°×F@ķÆżõZÜ,dœį“‚BZ!»iÆ9Ø/Xił2Q]‰}˜ÓˆąŃ„“Oo‹Ā?E¬›f÷7ė7?N^ƒŹŃū˜–x¢ßĮĘEŸÄ=ōżē¢m{^_/ų°#Ą\N ćb¢|ؘj-4ł1†n@ķa5¾r„ÕW ‡µĄ“D ķż·’“ÖlÜ× żągMJ^WÕ|d J6Øų¼ NHåŌ r³Ķće'”7,6n™h€]±óĒÄ[—,h`³ņd=l•=•īą2¦^„hī>bĮ†”E—Oårć. ’¼æ‚USŪĆ\HIOĢeļācĪ·„Ć°“:é­E÷O£b`V€£„Ķuć E ®½_fhA¬Uˆ5,³ļ9@TIFĻ8jĀėB‰D38U]@>"‹Äd¤ŠĒä뱫RŽĆū8ҶĄRB³ĶVwßT¾ėóŒ±ęAā5ļ¬\Q¦‘4üä%Čm+ īyĄćqpzƔ}ų@@Ž\é ĀßĮćü’_V Da8¬6$_Hnī°ŲXP&’¼z1„)Ŗ_¬HB‡ ½^!…2lR%‰–aтŌHD)LÕŠą “{7„bT‰'·½ä2…….|`¢0?Ō”i1gx–J0JJcćųĶUTAļ8ĒnŲ*Ņüc[Ķ{DœZ+äĒxÉ ŻŽGgœ4~1Ńō…_$㰊źjˆĀ“ mķžY hÉä{‚¹Ęł!‡Õ6\"ē‰¤nä˜øõ$õą8„J„Ō»ņŽR]ˆrōäéœZZuŅĆ@›%nœV«4%× GŽI7;’x£`l®°oßŖĢmœßļē/jz;ÄNdFHˆÖ³ņT$ėCÜaĮbŽDæ‡$@^#Ł ™L Dó^³²•# ¬|°“E… Ę$Éō—Qõ§†j̽ĻPRj;#!ļčŸ2AŖv„1ŚXGŒ ī Ä:+V\›ĒÜ_4n×$üMŃį'xXnĻ@Feņ5‘l÷Œ^öéć#õ± Ą)ŠäØ#°a}²KŒ Źńx‚yhu,aȖ~I—Œe£ ĒҵŲųĮ-Į0M§r÷ƒ-¢ˆ"Ō.f±vĆÄė™yˇ)=²£¹ÅŸŪ£ā”ęo°Į"ĢĆjnJę7^Œą’©5'!h–CȈō$Šø¤Hr—¹ wż0.0iŲrvcÖĀÖњ oGxlI4CKęŚļ$” é]L ēÉ#„­€5ĪFP`×X5‡sżdœ[pĻ)ĪȔąSžņåQ©Ŗ”ė-pS¶2u”Ä>ĘmĮc% #Rxī0kĄ+ I7Ģs€‘ĻÄyĒ*sPßĀāŌšl)Ķ÷ˆF€+ÄyŒ#pHB\©•‹gXŁ ¾1:tĀ;™~r²AK$0¼÷>rŗ"KSł‘ĘļK„ž$Él§LAŽųĆé«ĢƄÕų~ĀnŲ& å( ņUeģø„¶ØæzŒ`„ ÓZęŒ8"ź ˆ–);į[?ń‰J“ö¦Ö+ʧY£¼Ą ß7„čfFІ¾œ½ļˆģ[[Šēņ#õ$ƒø–łg,QB`]9ˆ[×į»v $5źdr—yŅ»’„ōŸ,`‘@’ĒMń‹K‰L:4rhxNńA*cŪŽł%@ĮZwŽ@8"ŠÜ³ę9ČĢ „噞ßžį€QNGńžGzč^U38BżxT·4‰·xÜ@>WƒĀęSŁĖ ü-€Ø™żxĆ|ī%÷Āv¹F|FLYMō xÉ7ŪĒb}ćųÕ}ķ€ÕTĢ4HĮnˆļ¬)ūGlnš'ÖÉ)|īp‚*DŠ(l—e|ˆ¦Ž²NĢHʈ°£pTć0h¹V ¦µßƒXF ¢ Ü?Zp¤T e£PQĶžšœ²cL%wĘ ¬‰c•C·›Įļ/ #ŖeŸ`ś¦`č)€v…É bÖ7”fOUZAvѼƒ(/|ž-l %`ŠąXĔ–^Cuæģ‰ˆģIźP:T˜Hōd-NŗE’dKUžIżœ¢bS—h=Ÿ¼ģjƒ§Óh¬ 2Mƈ”Ja.Ōū?ę–-žręČ#GÅńžņc£ŃóOtäÜ4’¬ņ‡‰Ö•š¢DHŅ^ń$˜ 'O¬>„mŽ £$5c®0×¢åI˜¦<`ģ©6Ż›ōFJ}@[pųVņ”ւ½Og¾L„P?„ž-“#‡GŽpĢ™©MĀłÅS£Į¹@üåw³]M±āp\ ± aŃ v˜,AŠbdxĆĀ.X«jŃ 1ųaųЌ–J%Z?œrrĀ5<" Œ H€a½F·­eĀ):gI. ³²%‚ŗ×œŻÉéD°%mb®r' X„.Ł_‘p¢É›…’aYOļ8$F3Ā|@.3Éš‡)!Åk-£6 #B|֓'4` (bSÆ?ė@Ų.Ž‚'^ŗiL”¼^1CŽ )ä0Ė;‹_śd-Ą–É©_÷‡l‹œ„>'óźöąČ[ŚįŖ nM'Ė‚F(ÕV¹(ȦŒi Č B^5‰l5J\d#øƒaCŽó†ĀŒ “ĶϬAV[HśÄŠ ©B@ü’Ā’s,V9c–’2ŽüäRU7@µWyŗÖCĆļŽ2Ō(ž …… ÖÜ A~€@^ęĖŒ1ĪÕņƒ®Ī©ōō§dŪ0źŪ ėˆŠóš‚ßAņĘ3™ŖĢ>Z~±ŹŖZG";xÄā`*,Šxœ1\–]%9łd€d’\A½ćSŽZ0ĀFĢXõ’”ż^ńŖM’{qx##ŚEB;{™a΁,‡ |“Fuax†~„?$z2wń†o"ø\ wyarYA ;Ż{d!(DBmń‚UĪū6ŸÄ€{Ę÷ Gئ|8lE»G„üc(4>TMć‰Įh+®ņąB«ŹAÄĢ}cŒs2°ŠŃš’ƒ}aH.'‡¬‰x%šž’É%VÉR’¢bŚaK˜Ćų¬šŸ-ūb¬­it»Ü.§襯Į.²ŠH‘#%FÓ½ż,Ÿ.)X!ĶĄ<¦' ū¾‰uēœŪ8›VM¾0Gg•C;¹q’(­0Ķ2sä5b76ć㼊€)‡'¾,*„Őžr‘” 3~ź?)øF& Ÿü`Ā,W -æ'ĢeßŃ xž0Oƒa‹Ģīdd—Ō’¼1w)DB#Ȱ‡ŒG‚ éå8ÅLI(ä"xæĻ©K;"^²NabømĘ%b# 9|Ļ+·šü`{aŠš•Z’I\ƒ›ēa0aæi”ā_8jįu–ƽ~LøŅb‘»’Ÿ<āEpī›ŒšøÄŌ£†ė¼BϹ jokŻ…œdŲČšÄYĀÓé’$»A£P°ÜY µ÷ÉėRģé`ƒ łwšĄ©|/ĒLźĖMš'ĻĘKŹ((!ĢóŅcÅ_xŠXź1ŹĄe¶”Q“#¢{“Ł~192„ ‰G’vØ9¦dŠłn8œˆ„ZnNˆ¬p@E”•}ćĖ‚÷Ō,s£4RłÅ%ŁžˆČńS5Nī7‚čR¢©:ėĘj C Ųg=”7öb[BB4“ēœLȁ”ūC8—Ä*Ž“/ZõB _….ą(™øąh ?ą<āI}øC4’MćILe\¶Ģ&šq# jPŹ2 \ĄV\¢å š©½šĘH6ŠڜąĪCf¦?»ÅŖŹj*zøĒ–óŅŗź2Ćģž$óž#jų#0ļ óĆ@ˆk[×üč̲7>Ł,܃™zä{Ž#­B*1!ąšĆ§Q‘Hć‚"Kʁ»hUØ[?X®+˜“wØĶy"–3üxyĮš$D‘øø‹ŒŽF  5U84ūÕ°©0£ž8L‚0Ž#“B%Ü#«ŒKĖžIŽ‘ŃšrZ~HAQY“.[ „÷0;DŻ(§Nüą­™p„Śd’¾W!źČŚĒpŅ"fÉpGĢśƒŅÄÖ=, šĻ[ĒÜ •ÕÅ~«h3—܏ĪGAL‘|*挏Œ„@ŖÅ„‡8QD€-^£™ųĒ%D©‹`HPŌž2ņÖLČ)#¼LźrŲEÄńŠh/61öĮHŁ<›ļŹØr„Ćįćń†\6›]{Ž n°`Žg&ޱ ’Žš•:”„üŸ0ä°«So“&?“<74?9ö¢ĀšubP]ĖēóÆų(/c.|F$.iĀA€‰@ó®2SƒT©#{Œ4hgLI,-d”ń¢2jĒ?¬b$$‰­ŗ±Ćż¼8@?šżäŠrWxüĀPU˜“@ļ‡XȘĻĻFį5¬”įŠč—Ž&0&S˜īɇNÉš‹śk&Z M¾bM÷ķŽĻę š+Ē~qJ?T ’›TJA8H<+3%ó ĀR€ų/öĀ!c`d—r&jL%1Æ(‡Ÿģ˜@„ČN’ōĀDŠ`X$ޘś(‹Ż‰+ĄSšdˆ\"¢"ß8Bļ\CX\ÜĪńˆ¼—1”¹šū—7DÜõöā Ų$)”ܐ°»œ# ‰Šū1·*Üß4Ī[²B•„= BY?‘1JŁ•L{|bå¶p’ÓŁāššĢ\&FŹ#‘hPé~HĮ–±ZFŻ™I#āțå‚w•ē{GV żä* Ŗ%£ż`(EŠ!©“ĢĢąįSj@f›Ld.BąBM–źözœ»ß„m/“’wŽ“6VH@†”ĢĻaɏ,xĮdó~Ć]°$Ģ’ŹSO¬yāB‰&čLq‡„Ņ_E£AsxŲVĘ ÷JūĮ“ŠĖ—qŻų:Ł*€ ņ»|`JĀ*$©ź‘ƒyĢ7‘nneg rKŠ©š5ųĘV’šU@Óķž3šLˆ+m žųĢ(“ƒĄ&!Ņ1sxæ»Ł?ļŸų#[=‹|żų™ ‘(³@˜§ē•!1(˜„Ä2JĘS” .ĮÄņ ¶D³^ązŒš§ ²hå čĮz)x‡Prox“Tc–ƈĘ0h£)*N'ĪI¼IM*“¬Qjd#1Āl’'Č5 p ‹£vCĆ8Źj >ą0—ś-7ó‘š#/D©ĄEŗłÉĖČ!‚ČĮ¹‚MŽ$—IN"¼ķ‹Ž @DÕł”žŚŻt¦vDYš*bBQ4¹9jo¬Dœƒ”±tלŒ ؁BW‚Rš…EÉ$QŻ~że*²·ˆkź2KģĒśy ‰$ō&ŽuØa&ņ'ŒbéRļ9Ś{ČNΊ"Y@”ąō<Ē€#އśĘˆw” 1EėŖĮœfKϘoœ€©+JHŃ ģüäf²Š~Ūūp·?Aß[Eņž°  ąœB*m`śŸOår÷ęń{£aŎ;?É»-ÄœŅ–Ove({óxɅM$1&E0K§¼·Ę8™ˆ A­œóŒ%¶(p9„VR“"Aǜ€K5`4ķČŽš­”Ÿ` rJ¤‰JHŗ8Čh„bš “›łĀ’‡¦ØvٱE, W²“)ŁŖHxŽw­kō …U>*uƒIz€"t„ß¶]F§œ#ˆūd»#³sÖ*‚É€ŹL‰{Ątė±®ØW\ĘFą€ä@Ŗæ}ĪPķ*Śæœ&‘LV±+%…ŗ-ńUėŅ œ[ƜœŹ­-¹vĻ¢ŃS °ą9sGŽef^ txČՂ×+åõjÉÉč Ą_•B[N·?ļīu2F»™fvaņŻ” |Œį…)*øyĀ|!MÄ ¬±E¢Ź>ĖĶCŸĀ[;ÆĒ“-•š„Čģ_¬—ɤ@ÓõžE¶bXO&Q}œ80ŗ H óŻć(ŃĢ~Ž/±‰XŌŁyŅa® ‰“9rzM­ņ+¾9ŅĮįO¹ōŠH…~Ł+#ŠH›G“ĘEģDLZG#ł2TŲb/RäTq¼Å@[wćV† ¼€jŲž—gć.©4ĀgŲźuóŠb„Ą€P?1š=aD’‰†ēŖu‚nH‚•²žJÉB¬¬©eZe@ʐ·U¦µdkyÆŠ( }Õ<ą B±+ź¢5`žpZ#<°”> —3Ū[ūL@ž1kg¶ĖŒfE$ •KŪ“ÜIJD ćÕäPA°Æda! Įājc™ •YĶųŸœ‚Ć„A®ļl"’$Ż4“,>Šē#@Ăš>ń|aéęvŅˆĘC”ČX‡¼¦"§U\šWx¢ [[ĄēŠB©²9¼vB”'SĒżąä•ž€ł±õˆėʍĢrŁö\Ŗļ¹“øąvõ&dlOApB4„Gõ®‹ˆ)]÷·/ć;«)µ7Ń<āķ”c›ŌĮX¢fOJܐN9½XEKęä쌘¢š g™§Ėˆ6dˆl‡k8­#“*„įŗƒāēŗÉhd£P{Śļ !™”ēšö/bŽ2M‘ĪńC­ęļm±‡HŽW”u±Żą €Ŗ¾t{øZm†o&0/Q€~0Ÿ `~OzČ̬tÉł|8įĪHY‚I>ć՝¢ŌY0x–Ÿ(I„X»Ņ„ӕĮ›d„¾EüĶN  2†*\D`¼Ÿy†ŅF‡ĪŹĖµO䓹‰1™įåb?ė#ČD@÷[Ɓ9 _ēē»@LŻŹN6^(öZņ?QŠRŲa×1ÉŽFFpŻYܛēԁGĖY#”j7{i-p4/~Œ?ķ€{ąV<±ƒZØ•Cķ2³,†dX%ŗ¦Ķ`~‰@v/mź±uu6‹b#Ÿc!ČgÜ9E‚c¬K6bš‚q"Ģ×8ųA_ >'č␂q/°DĶnji©†l©øŁøpē%0œ*¦8McO"*(ĢwŽ—;ˆlæC¼8AžP(–mž(¾²ÜJOūõIA1ˆbĄÖēū¼wä`5ē.ó1](X“£"ątŖYņ?sŠžP8ķB»ÓĪ’!–pAŲgĪsĘwń8¤–ƒ@øŪ*’ź1&$(—śœī¦ģuAķ0Pqj PŪēG¶#ɅäćÜHųq$YŪ*dŻ ÜāAĢ2LÕ1Ģ:¬h‹D— ™CG†ÅŃ )"äŚ£_é‰S/ „ę ×÷¬äŻķ]=:Ą’'?ćæēœīI·EÜÄDŹ™čć$ ¤åU:*NŒ’$” Cų!™5¼I– ŠŌź'˜ĆI‘ļŸĻ¢¢@æĒ£ƒ9Y=ĻgKćņŁ£6(ėŽ²ŠŒD€ųškõ€"TŠJR0Œ§ø ·‚w”! Ѧ_”" €I$ą+0Rlj”^Õń°D‹-U]ų»ÅFzžp0Ä „øAlP\ä݈…‹#°qåHĀ9 Č\čLkk’<Ø%Ćń L!ŠÉ˜£ēx%(Qķø>«!l^I+Žfūõ ˆ(*y—$Y0-”«Ég²MŽĒį vF"äÕźu¼čL—"É’}dø*¼›¢ÆG#± ÅeL"n;q„A ‚™µā VF–Ds÷‰{™ØŠ*#Ž1ć)YŻ[¦÷ŒžÄ1Ģ­%^Ģ€h`°’p’9Õb¤\Į‰AaAųINŗpüXŃ''p}äņKO`r0Ą¬/U’OŒåń”ńÆU *ˆŸ»pĀ ˆ¹“ŪļæXéŪ0.wźD U_·ļ 8 D?Óéió<ƒāc$ Q7ŗ/R™Ēe_ćĘłć+ŪB™SņūÅFgq"Ļ*ĄØĖ0KwĘ4āÆųÉ@I ™zDæ‹4˜cä¹fEDFĪgā0 €§,IÜwć ¤ƒ`Nł|Y•Ģ3>;ĒE$(‰¹4ėŌ+#£ÆšžTŅdĄjˆAųĀ’]7Øē •P@>ćWē „®Ņ=2,^’=Q_g^ ­0ĢŌd„QØóź*kīHÉ­ Ó»ÅĪśĮĻ#˜“<œaŲécŅpųĘ08‚¶“?‘ē'PČ2 H*ddĒ…ĀSÜųÄ_¬ŖæÜĆŒ"a$Ł],Ń×üŖ"°®\¶°YbO1ēćнB®0;LĢtIÆyūĀ+@‘4É& ŒP±!!+o“ų “ō‘S `”ÕĮ5<ļ?ˆ©€¼§|’œę¾&#„É#8cLJ0‚CYsR.±Ü8ęH€4CIp*¾:Å&©YŲ„·ƒÖ%<ŚS.nKƒ 1‚ 4oŅ~Ų"š|cwÓWåąĘ@§"’JdAŠH‰<®²o_jˆł¼pSŃ`’ Dń¬KĄI>ā;1“'c‰¢s`xǼøl¤Ó²±Ē0Ķ”Ėߏ:B°bd¤ēßƒłĀI: Š+ģT c÷”Ĭ.{L²‡GŽ<`°ę׹ĪÉd’Bx3cäd„‡Él YDD#DA‡»ČÉYֿய#e@ņO×¶*a„p6?±ĀP¤¶„xx&O;‚_¬Gx)`'żc•0īNāöóƒ:R-œ½ĆUŌbŲ H>H~2YµN 5łŹB83AīxķC@AƒsüšŻy\IģÄ šéž3ęJ{㌢¬dw4ń1‘‘SQĶXdż²Ē€œHLĮÆ3ļ…ö61bČxżd™W\†“ÜŒr€¬‰śWć(ĶŖöó¾Ā'Œ² zūÜžq$daH„8±‰'d÷¾X‘Ś@Ā©ą~ń™2z5DłŽ uŌø <܈ÅwóƒiŖJåNŗÄADlĮē@ļo!ˆļފ{~«ÉŃ`Gć @g#3!’Ŗ žDŒbüŸ&‡W=‰‰I éŅ‚|˜RHnKO‹ļ)+ĀD3ī~°@:ꤓšÄc—éę7XӀ°ŠXxĆVĀ@%&šĄĄĮ ‚ĻÖ#š÷WćŠ#×=)Ä[ĢG¬Jo­čaˆŪb1ņ ÄWøĆbÅ%,®Æ¤–Ņ{bߦD›½HŸX ”į•#õ„' …7“ęõāéśpčØlÄ!N“Ø•Ö-\ąBpŖ»Č$•c@85`14±Tž AÄČ[eĻÓ&ŅTZæųŗŠːB9ą b6Ōr³e¦_¾øĒ("B «ķŸĪZ' ”I~2dsäŒ*ÉĶD Ūó„23°˜…ö·ÓŽmŲģŪ‹ę÷-į0œ:MLŸ.G›f:MĖļxœ"$ESńm`¬0§"šžwŒÄų *Rd FLjŅŌ2J“Äa!)"B„FnŻų†PŠ(ĄK¹ļ¼$Š—@’®r ~™É ·$į$ `~LV¶ö‰gŚOœGģc1 FaŸ«ÉAø LKøĀ‚ū†ÓåĒą«Ģ”X±Ōüé:$R°ų©÷ įVlż>RSRD‡‚¬§å_šłĢ>ņ’%aŚÖ(:ČX»åkŠe²žS®ßюkŗ“–µ‘ąƒ\*’8€2lvÜN‡„÷ĄĄ’-sś2œ1±z6EœŲIv$~8Ąh(,£4omļH©¶ Ä@¼Ä‚E8”­s&¹'/ą@ s¦=øŃ:^eĒ9(*„B<@Lö»Ā+ŅH8+ ‘3G“Y°]UL8<*É՜£Fō·erkĪ(Q4.!'óŖŒ°JDwYńy &{b‚¬‚ä|~ ˆŠa9˜–p>µWĀ—XDˆś€ąņIg¶@%<[‘˜ p)Ńåmó€Ņb%ß~‚–¦ĶÖ£ēćQõD=ųŪź) hō/‚„•"&±Ō;SųÉj"vpųŹ`łŽ)"n&>ć^ē÷ ŽŒ6€āū*ņ@ƒ1:ŽNæR@¶ń¬‚€¼ ²µ*–³ś'ó‰ØĢ`yŠó)L1(“ųə‘¹‡ļ éŚ@MÄśQU£(7”%¹Ö ēIxL!AWŪ„ ’ˆM܍}göOć'śŁsėŠp ÷Ć$“YiA1"ž’Ӕ?[Bšj7GėUA*Ÿjǁ„R—ڰEŌŻN‚§1•/±šįEü`śžæ8qfĮūp;ĘQŠ¢ ±Q¾Æ^Żbq2]÷šś, —,į¹ esWsĶņ!ŠŽ ŅÓµõ÷–<$·Ö.ƜŠc"|t£V d†ŁšĒüpu’ź’’ŁPK 0l5p—ÓTŽTŽimages/002_th.jpgUT PŖVEPŖVEux ’Ų’ąJFIF++’įExifMM*’ŪC  !"$"$’Ą "’Ä ’ÄU!1"AQ2a#BqR $3‘”b%&t‚”±³Ņ467CV’8ru¢ĮŃDSWcvƒ•£²Óń’Ś?Łz4hהXĢEmMĒi-!N-Ā0 –¢„īTI’]zčŃ£F4hŃ£F4hŃ£F4hŃ£F4hŃ£F4hŃ£FeļT§jux?eŚtŖ|ÉģEJäĶ’ā”˜īÆ°€ŲĘHOvÆėtsŸeś©Ž‰ńĻų¦T?˜Õ9°æ¹čšPĒX?ß^Ō_VūĖNS?QS„ŌŠŲĀ‘.žęu‘o‰żś#Rh¾µ· )2m»a×H_”· qčøsƒ’{ļ uŒŸ‹;Ö}’O©¼åĶF¤Öį8®A–b­ÆŁ+żš'÷ÓĆŽ·īBźĖV%%-ņ<¦8Hlœ }Åõ¹5T˜‹BÜr, €ą+qµ0§R’¬Æ*H8I šzČ–±źĆvÄź„˜Ņ,ŌE§8)ŽĆ‹nJ”£ŽK侒ƐĄĄżĘXŽõ¼N4ņż „8ąRVŠmż)ʈĮżĮ=yśG«ŻåvdbӔEpĄS §d>rOĖå˼ćāGC®ūÓķ#ÖēŹfQ}6õ5;{Mn§j2ܐīZJrš) Nūįć_)õ©x®Bć··ō§Bø©(”ź°yż‡äżČӝcÖĢųm·žĶ j‹e"ZeTOõŸlžˆ$õŸĪ›G­k­ÓĪŲ„0¤ū§„Ē öł”NĘ;ČŠÆZWš}²­¼¦¤8ź™Fd:9,qŹG^G$äā,o×ā:C›rŁ{ÉIŖœšü{YĒ.üųėĻzU@õ„>£Röœ°ą6Īā•U”•ø¬)M”8iD©\xžœ)=¤(‘ė>t=ź–Ö:ĪTe”U~ CȬ–r?RpļŁ×ˆõÉŚ$ķ«žē!„’#¼œū>|u¹üv7ė–Q÷6ÕōŒÖAļų#ļķūų×ŗ=qQĖ­…ķ乣JyØTŠJO!ČķöÉ#'®¼éę'­+B[‹D{.āqHmnسŅR’„ÕöŸōŅ9ž¶ķ†^ö‘bVł%š‡ģ†Š¤£śŽ;ł‘Ē Ģś•l‡«TŻ•ö)7•æ‰ēĒńVdŸa·”-*e*Į偎’:Õ4k“;įU™[Žŗ£=Ļq÷*ņNNPįB@ĻŲ% ķ„—¦Ņ^ŽÜ[÷Żb+MŅė‡ %*%ƲžMūƒŅ €ÉčąõÆ=°©X”źÜx[ƒmµY¢ŗśƒŅāJy©1ó€8Ø `ž8ÉÉĮūjĘŽxšßŪi3öĀ„25ÅS|"Ź2J¤4H ,ŒrĪGé#MM϶÷6Ķ@·­Ėz½qÄ,Ź«Tj%sT†Ė|q«*$+‰JR{Ϛž=ĆMßK­=A¶¢·NKä?¦X‹3Ś#>ź2¬©cõcćĘ|Üļļ®ĶŠ$‘ÓĶŗœ€³‡ŅŁmG A-gx€‘Ÿļ}śtÜm‰¢ķć”Ķ²i²ėqlK4tIr[j<‚J|Į%#8ćߝI÷æq=5Ü»OPƒlP Äø\†įÅŖ/°ģu‡øœźĪ >Nu4Ś]ßō÷2Ē„B¹įŠ"֚„2ŻH®ßų)iNKd$ž;:ræ÷gÓ{ö]r-+ü?2jéī¦:Y “üÅ!A¶°W“×cYmh½jÜø¦]—,Ź[‘”)TĘNvB$ŗŚA?$(©I.晓ŠĮ·½9īfÅҬ“kīU™H3c-e5SIL”Ī@R”žd§˜Xä@ČĘšzÕÉ6õōˆšdi2i–™H‹īGdŪŹęQ•)מ\‡Ÿ9׈¼½OŠz Ły ©+”-'?c†ŗ?Ųź/»5ļM ķEU6-µA©Õ^I Č“µ¶¶^P* /-)#ˆX哀<dJx†(ņ„Mr Ü‡ÖP—RŠq„ÖŽśY§Āq“5؊URPj’½“mÓ™PJXyoLHR¹!%J((ŒŒ'L[“›Ņlś- VŻLŠŌ6*SM2Rž ē•)\“óV3Œõiš~Œč¶äHÕ ±ksm æ%lĢ ±śā0$“ąk=zƒkoųåCl¦ÄU½%“†a“‡’øŹJĖŻ®DOß8ė0q)hfFXD¦_JQī¾×É ¢•G}gc#ĘivŹäŚr+Qn{q§B”ōf–f®’•¤%|±śP„”ä é…lDS­„‰‡‰i*qo7Ą%xł$`ؐ>Ǭž“„’,ƒz qĻßKŠŃЉlIK ĖÉ%·Ū<¹rJT‘öä;éCr>qÆ ą¤³ĶēÖ÷“Ÿp8œpĒI 99?ń޳«olvnķ»čBéjæi[ŌÉk,6ķB{mØd)Ų ”Ø ‚uÜ =ėzüfŚ•2ž[ló˜ÅM¹1ÜR† ĮĄ‚rx« öO“+Ņ›2öŅzmÕāŻĶ/ŁD棽Śjn<  ¤ˆā®ÉŹušéīĘ”\Eŗ”ˆn8Äøüż·ČöÜBJŪPl‘£’słxW>Ö”1Ŗ“¶ę£6H“„³2å[ˆq” ‚ČRBx¶„d(++į#4:žŠ5£ii”ņ¹ß/>Ņ–¤…6Ņ“…৤ąä geĢż)ڬ¶ķƒ=Ŗ<™Ö¢ŹĒ6~KAP$,„'ŗĪOZšķ¦ĢnÅĢóu rŠyL„CŪ—5 ”Œž ¤—zX8ņ‡có«EĻH[“ā‹HØŪ ӕ >!*¤÷†.,T× ’~śōØś.ÜgjÄ\öėĶŗ„-Ēuą Oc¢ƒĖ'É'÷ļMoś9ŻXōéD.ܕ%%²ČfzĒ!ß 96‘ŸŅ{ĒŽ“’„éw¢5ōĢĄ£Op(-/ĘØ%(ĮŸp%YČOŪžõ_ßŪ9¹T%Ŗą²Ŗ,“²©ńĄz?ŸŌ¤d‘ä‘×ŪĮŌōĀjšŅV©ĖYZÜKß#±ķ”‘žAD`ŒēZŅŽĪm†ęY•ŗ„ß^ØĆ©S%įÖŁ–Ū µ ø¢“$9Žp8ėė~ķĻMÖ5¼å2Ņ‘:ä¹Ōx¶¦j~ć,ōKŖHāsēŠ{8ņ‘ŽØ ƒˆØ¼ėØuöćóZŚT§9qųgŪų§µ!!]ÖBsӒÅrßuRTUVięšm^ÓL“āÓMå@HP õż^J²I§Ņć\ ¦*{tåĒ4©m<]J^CĖÖGX)O^Ł#“œœx®[BĶe„Ey/y¹!rTļBR„~’Č<²³Œuc«ó® µ® Ÿ¶fͦ“ćźCœĀ—Œgņq’`’q©žqžy›pŽŹĀŸØŌ§,¤$%>ćĪ8p>Ą„¦¤7• ņ±nkßbLW#G÷˜‡&G¼É) ­ sAäćGGSOM»pīĖ$±TU“г!ęTź{‚PŽ’xį\•Čą( w«–ćōO"kņgÄÜ& ɩՔtpĖC‘$ńJĀFOI¦=Ż* ÷Ɗ2YįÅe?b{?·xü{¹čŽåqAN_ōÅra8NĄ«ģ~“č†4‡‹®n2ĀŽ2¢! čcĀ]Iō8×4ū[Œ²ŸźåIł?›ųåžøÓ„/Ń“Ś*—Õ^J‰ų˜Ńdū…ēžš[?Ń=”ģ@ˆ·uy—ŅŃB¶™Ryd„$%$łpN<鋾ćp’ż¤?’ō’ūt¢'¢¤ĀPr&ā‚ēK“D(8ž ņįļ‰8üĘzš{Ń*”ŪŽĒå#‹žŚGO“ Ī=Ģ$wö}“€ś Ø75*cpb)”« ¹L%^2ždłuųĒļÆŚO¢j»2ŁvMż¢Ū¼ŹŁ§©GńĬ#ž§Jšō8×5ū»ŒąN~i@’?ęé,’DŅ—§ī#+hń!/S”œØgČœsÆW½×Ŗ²ŲvÆ|Ņ愦ƒGé)ėQ Ž ’<ćo=’VżĶ[m&™øœ8ÅJ¦©'ā0œā¾Ēčt$‹nš’‘øš-–ˆśW{Aqż^01ū 4ĪōYø-HSŌŪ²ŪZ›[~Ź•ļ2H ķGŠÅ@łĪIČšQ+Ń^ę”$ ķ¢#õr;’ū:r§ś/æ[&L‹ŽÓ/„•% ”<¶”®#'€ūąē¾š|Ÿ÷ ®„üū¦•” ¹¬«=żūĻćĻ킁æE7Ćj`Š-Õū‰O¼įSąĒ?ÕĮ!Ģū`’Ÿæ_I>‰o5Ȑ”zŠŻ²¶Ö¶] qφž,“ūj¶Ü_N›Ÿc[³nå*$Ś|%:üIžźø‚€® ń>:@Åu*LŗUĒ*t–gđī™QKķ…ø§3”)j_BЉ 8żˆ‘m]«O»Ŗ Søhöģ'ŹSõi!y–‘””!$!@¬|²…®\¼= _µ{R’skė*uśe]n*šē2[męŅ„©MēśHĪzĻÄżõVśÄ·›¶7īå„Ä@Üi˪żK÷ę0Oø\ņ3֟öß~"A°Ø›zžÕŪłQ^SPeT”ŚTćėq9J’N\P˜üžuQWUP­Ö—VL\&Ŗ<ķ9¦Ae†Š•)Km”ØŸŠI %'ĻC$ć^ŖÜūn°…ŅąģI©}„!aė›äX8ĮāTHė:éG¦}Š©n­ˆżn«@4yQ%}*Qmõ% *Z2*#xĘ2uičŃ£F©½īōėaī[OMCÆØšŒ&Ņ’āń×¼ß„cļ¬?»Ū9|ķMcėnZkuJb¤aŚ*\yŽ_3ŃI9=ƒŒŽĢ«ÓE”¶·ŠÕxT—ģØGįERql(q*Ē/pP~'e@b3\ŁĶĒ‹%Ź-JŌ®Šƒ+mØ­1r(৚^HöŠŽ“œœ‘Œö5±v;Óķ.…±Ņģ{ö$Z›Õy?[5-’ś:Ź”„ ņŒū“ŽŽØŻóŲē6N­s­·Ķj—Jśz„d¾ńu%üŸ’Tæ˜)…j‚æ«tKŽāØU©Öœkr-BBW¶Æj7Åā@Š’HāG3Ń荶RaŲžž,Ä<§„Sß2¢x©j)Ē.ń‚1ޱć¬jĻŃ®BŽP•@¾Ŗ±!HpU'ŃŌø=Äūo))Q)ż*ųēķö?9n,[ъ”v·}i5—PY¬)å:†„ņ^II+p<«ó®‹zMS+ōķf– §čHPŒØ8 £ßää’®­-4hŃ£F4hŃ£F4hŃ£_/6ŪĶ-§P—ZJV… …ä÷ęWØŖTš=óp[+n;tŹé ŃiĢø„¹§V‰Ā1ÉĘĖe]äńšx€×·Ÿ³ūŪeBn‹Y”9p7żĀ|gL¦RFKŒ¶F{)#®Źppu‡$DŸe_SUUwQg©Ō&8 Kn°źT¾Iķ q@§#=c:·½pŽVķspčóØ’ąTž6ŚXŠĻŗµ-!*Ą•Ÿ°#: h?J-Ō¦øĆqx)„¤„_Ė_5”dr<Š{ĻYĮż¦5ēvŸELE”Ė a礔¢W·ļOøļÉ]|’’žĮ:„BJ„½r¢ÉU= K“x„+)ėäR@$ŽDy FŲŪĶιķßTĪģÄSiGZ”DАØM”°źV@QvHĮųŠÖ¬Ń£Fń,čŽĆ›™1IK<€“,±¢5‰=Qśi~ܓ.’°õ1/%Ł4Ø ūŠĘ;uµJ’ĄN‘6ŲoS“¶éāÜÜI3äV³°ćܔČHR=öŚ*R\)#ÖO#ŪWÕõ ‡•MŪĖŖu;ˆDŠ’› !]¤‚>HĀ’¤’ŪĪ®jfŠŽ-³}pÖäŗ%f"ćČi`“ź°R¤‘å*ĮČ?Ų‚z:ęmŃE›yI“Ŗ˜Š Qh—ķ©ITĶēAJ9 NĘéG9×Kö’Øe‰’šģž57Ń®IīK3ć]µéq-Ę®Č y'ŚŌū…ž~'Ū^õŻ:õžŠÕuérė®)BdĒž K© @BR€…ō:łĒ}&ō®ū²=<ŁN<²µ jP ’*T¤¤ ¦¬Ż4hŃ£F4hŃ£F4hŃ£F¹×ėŁõ'~jLVSŹ$gCåæę({@c—łAIń÷'Qķågj(‘m»ƒg.Ŗ¢* łæ jXv€Ļ?s…g ĘOŒCź÷eĖvׄŻuʊ©HPblõ%¤…¶Y),€ƋgŽ2rRuńO”4ÅTŸ˜˜nbJW” ”‚–’JńŁQpō8zĪ‘T„VbP¢EĢF"Čć9—CIpČ_#ŚWƒÄ€¼)„?Ē!Ż—Dōć½Ó¢BגÄU“8"DÖ“¤ö ZZĘ93r]žÓ½¤„-Ā >Dƒ’Śå%$v6½1O.›reē”Ź Ž3’ jā2¤’į'±ūiF„ßū±·v#ŹtŻtųŅŽf'2ćųĘAöŠ †Aė#æ¶Ŗ‹Ö ‘ —ž¢P*õfRģ8¢–RłA@’’PVV×üµ’¾ŌźÓb%Š…Ē5_ęńāO1ü®$gĪF]ƒ«;l½Ommń5ÕO~=ÓŶj©Khp“€ą%ńŃ œõS®ö [o;ø›wK”#(S Dä’õäüŠ|’<oŲoQ” clė–=į’AÄŅUŒ7=J—Į $r=,ćā{ģw!’gC÷Õ ÉsY|Ņ–ÜP‡\åĮ.£šR„d`€Ž}§óŖŌ5Ešīų]—%/’ą¹Tr‚A,¶²Óa%%\<½µuż?‘®Šķ4')»[jSŻx<øŌh)Ąž!e,¤goķ©>rOvWųžāaQš@¹ī%М-Ą§Ō0O܃ī­%}Š… žÜÖRŠ™ę©*pņ-d4”„‚ž*ä“ßd¤ē:駦ø(§ģ‘µ8 Ŗ3eiĮˉ÷žŁQĒäcV4hŃ£F4hŃ£F4hŃ£X ż¢Ģ:½ń¢į%Ū}„!Jų¤«ź$ddõÖFÓFż^» wZmN·-Z…>ņz3\ÜˆŠ—¤­øØa*ĮJØsœTgŹ–ŒŖZ%B\t:ø±ų¬å†żµ:@ķ$ +><óģ€tĶPŽē»$G‹! 6KĖCØäć)*ĀBׁžŠ{ĄŸv³Ŗ±!3)Ŗ„©mqiŌÅKjPB‹Ø-ŗŚŠNR•¤Œ v¢ō†óķ[Ń)3ŻHSS©© ąƒJšX>Y#Į@VvC~¶į”ɳ®i¦SÅ"‘R1ø”%“¤ź$”*Ī ²T ż'ŸÕCŌFśŲF75“åA>ÉT£S¢¹HPqĀ•¶xP„,«² AĮ8םmr¤T"µ-iLwT•³!āæd‚xøāp‘†Ō“ØōœŽ8ļÜ[ź±¶õXbAre”'‘II*TE¤)Ę ‰ĮČåĄØĖķäo»æm=Ą¢&ÆjVcŌėÜBNeD~• ö“ż’Ó#P-ʬļŵq;>ß·-ĖŗŁ[ŸŒ³=”“Ė’ųÆc#É#”Ø/|w…錷QōóRZYO'Khu* åńR2ŁĘzūžF„ö=K|nŪÉŖ½Ä)¶e›ā·"ż9ś©œN8(¹’”dÆćz ‹J˼­‹Ī$Év½aФxr•÷Y ā—R)€ŃŒƒŸ:~Ń£F«ÆQÖMĆŚ*ŻęäĘc®]8£“%“• ~Ź?ū(ėlõRĖ£oÕ{ö‰}·ĢPĀO°KĶ/Ś…T‰Ēø0HOIļ{Ž»Ž¢)ŽŅ)B£ĻØC…Ų–m²0ž’Hc×Zéęę6÷<†··q䙬DŖ<ćm=.)jś‚8#—\2ƐņR£ń $»ķŁVŌ ]=śÜ8Šė”Yž©B;‹uå©@É! +Ėńȑ€¢5Ń­ž†å;ilś{Ź r5 +  K¢>ąJ“j=øtZåĮkæL·ngķŖƒ‹B›Ø2Ā]S`(8؀r:’]d­nĶć½Õµ¼7b½H~˜Ūīŗ„¤:ėĢŗ”„ §’ēõ‘­vPjU«mŗT ¢§D”• š„4¶^WŲ!i)ł}śÕ鶙¼5ūĪ£[¬n”©Öµ·&žˆīÅ@]H2J Žąž]y')?mH}CļŗģŠÜ+˦&»{Ō”†ŁŒsķĘ.tŁ_ŽJQ# Čė²@Ę}XŚČ«C3ī}®-¼R#Ce@„C €9öœqHńę/`nÕń`n¼}ØŽWāĖDæ*įKeæ©*?Ė ėxgŠŗ$łÕĻ»“zå^Ļ‘ž»jĢŲ‰\”ɈŅ.qB¾ āz=`ō;Öiō¶öģīŹęTėŪ±^§1DKˆĖ ęJV‚° ŗų‘Žˆ ƒŸĘ¶64hŃ£F4k zōi™[ŲÓRźĆi›<<Ś9ø“„„'¢„ČĪFJF«-į½Ńsī4ėŅU=Ÿ§Ŗ(3 ¾Śžn"PZāć`«ł‡€ņp“ĖāB“¦ų&ꡗZ4¹oKØÄvZŅØŲKņ‹HKjAHÉä§Ą)# Į×ķĒśe -%™œC$H~DØå)>ėAIH ¶—  1×gŹŲ±÷&¶Ķ:]æ·7)ĢIK¬ęž§™[œĀ¹Ø;ńX()Iā ‘Ÿö®Ł7žŻŌšŸ|YR 8ĖĢI• /Ē%–TC ą¢ŃB϶•ž“ž°Ai®ĶU×XTŗŻĄ%ŗćķ6Ä2RŁHqJHIWÅ(öП ¤żŠµ2ōóW”#{ē Ņٶ«0œ¦ĶŒ¼-ˆ©sŠBR”P}Š€UAY=xÕĖzz]»ķ*“šĪĢÜ ˆ—T²Yś÷£KCJā=”ø•­) Ørā~Ä«­C×½¾Ø,”¹MÆ[Ņ„–T–ĆóčŖYńÜk Q'ääų:@}Nod·3”źKžóiŖ9YXRøœ…ó'ƒ„¤Ø÷ų:QlŁ^ 7”Ęć^\-Qå¹ÅłUGU>ś~ī“FŁŚœŚ:ęõ†›§ROšSĻŹ!¦ŌڇÜó’.Ÿ¶ŖŌbĒŪŖ«…ˆ”:°ā:~N/’YjQ’]dN®›ÖŻÅWŖ” —5'P“øUÉI|²’ Ić†ÕÄŽ’“żöī²?ūH™‚Õ Š©)…š‚dHe‡RįO¶mDõäå#ÜėAŚõ)µŽ¦Uź5ńk&± ”ŗ€rœĖm>^‰"LĄ•¢RZ÷G‚I8 9 A R»)V…ōĻźvķUJ›d\4yD‰ÓƒlĶ‚d‚ė€`…|T”ņ'§°ČŪ²Óģ©—ŚC­¬aHZB’”ų ź‰Ž’LÖeńM™*Ża»nøą%QPC‰ ćī¶ź?$ą÷“ĖĆ·ą[™oVm "ķv_¶ICŹyē’’„ŽED©E@ńFÉĻO6ݚŌ}¾·£Üg5†é±Ń;óļŅžĪNs“žĪtž@=|šGł’-}h×晎ƒ$:†™m%n8µ„ $’z¾³.āo]ķ}_‡nv˜²–ʦחÅM²ž|¤ń śˆ%_Ņ<²§½Č«Ę&Ææ «1Ģ£„Ä7đ€pc=ć'?°Ōru龞ŸŪa7Ėqļ«A/„”TUõ)I Ą+ņ“Š’ˆēGķ§lŪ’‘w[pī“ʁ1›XAĮJģ(A°F±®ŚTX›Ś]BÉLŹ8ĖÆ)[„R[BŠÉĄįķ„@ŌF>ēUŽĒ\u7žŹ¦CaŹ]eÅP†—“8“¹ĆÜä²I=)9cķ®œčѬyŪvÅgv·ŗŒ‰OT[¬ČtG@`K^ą ZJ ŗ ÷rGņĪ}7}Ś-ÅZz9šu5ØōŃ< -¾ÓeĘV¦œhB{ä@!#²u½Ųi¶m–’Ūi BG€ĄūŃ£Uש ;‰“Ŗl“äō6%SŹĒé}æ’@?nC’3ųYÕ/é2ÆVŻ8¢k0VÕ/o[q¼Æ¶åLRKqšcŁ`«ÉéJIÖ­Ö&Ż*ESb=TFŻ7"®eÆZ˜·} Øż0{ y ĄĒ!Č© łøĪ¶-­pŃnŠ jķ¢Äśt”“ūJČĘ3ƒ÷}Įģ}õ’}ET_ߍī·öŽĆy3©ōdøŗ•I‚a’čHZł¤ųBzóŚĪ0q­?zĖ£Y»YRrSĶD¦Ói.4ŽE)ų”¢„ށQ“ŠÕžĪ/hmEĄ”#*ž6JČłf;?g#‰ĻxĮĻYĮÅĒæ[“OŚķŗŸqÉS+ÄµNŠį?ļ‘ńN|G’óE+¶žī_›qbŌ©7ćVµg馕X˜Ā÷…``‘”ŒüJ‰ūµē·{m¼vŻßHØV÷}W-!‡3aHФP¶ŠFÉY)XA¬e]żŪ£F4hŃ£Xż¢ĮjŽźo„¦ŪŽ„XĻū́ćļēTdYI¬UåU¦GKŽØŖdį)ÉoÜiJńIĮ*č(@iŃłOŖÜ2°ÓE:„äÄ SeD2ųmāO$įJЁČĒö”mž×^×MUŖ„6ŹØÜm‚Óؚ‰?KD27SŽ2]0rZVĄz€¶« שt$ʖĶA¹ˆv$ÖV¶–Œą„įCłŠ?‚G»‚ĆõKpPŖBŻŽ{>Ej”™6X8$$2³ņļ$©ū}õxR·bŪ™{Óķ‡\S· Ø2Ōj ŃFTOiq$ żŠ~łFų\¬Żŗ©Ž4š,Z“ŚO“łaŌd©źC„$v’V ~ŲĪ%ŁܵwZŻDś$”µQi“Ŗu5Å:2]’™9(yėĮėVüQ IRˆ ’~ŚĒ¾¦·~FįUæģŸne:č~`…%ęC“dŽD4ŚŽi*B9Æ?Ō?¤nݚ“Ś}½‘W¾k±«ŗ€ż^Ø÷!“䔓”„KWg²„Ų5ɼ;­zN™e,…H§ĘØßÅźL“ņ“śŌ‚µ¤$1‚Ė–~$`Ę®«ūyvā™6öŚŃ.Ū:¤>éōō¶ P)ā@rO3įZz¼UKæīM·T¤Ė§Ė.N‚’¹Ė’Ū!$·Ķ(õŸ÷Ó'Ɣ?/}éQVJ”‰ī“‡€÷OŌ¾8’V=Ӂœ„’rqYl_¾­ą°įIB—]ˆĖm†Š_Ź„,”d¤JŌŅ<ō:{£F¹Éx"ž¢īĖrsļŠ\«†C/ČS_SÉחšAęPrƒ•džƒś€f«ŌjŁAæzŒš„Ł®²óģÄ ų!Äö2Ų_øT‚J€ĮöH3B’“”AIPČ äÆŻ4i–ϵØ61źm½Oj W„;-Ä#śqEJ?õĄüŪOZE\„S+”™šÄóąIGć¾ŲZOąƒŖ‘^˜v2ÖōZMJkTxÕGŃg®_|~ufYv³fRIµč°éQż 7‚³łR¼Øžä“¦ŅŪ+CrāA‰wAz[P\[Œ%¹ kIĮĻ3ąyüj"ļ¦}œ!"=²ō0HP}ææĻB}5m*Ŗ‚|ŗ$ŁÜ].¶Äŗ‹Ī“‚|į%^:sœ źįH >Ś4hŃ£F4hÖ’h”7ŽŹ"½‡q"‚ĆL¹įBCü‡ŽńÉ?Ū#Yā‘Er«L¦Yy Žėm­m§’Zug¢rT}¢@…~ĆZkŃ.ÖC¾vķ¹ŪUBG[lSaŹ@ā©)HZÕć¶Ņ„œ ü‰‡ZÖŪ‰øÖNŻR“2é­Å§ £,°']ĒĒgǟĻŌ_Z4Ywę$YU/ବ­¹Œ>’ź)ęćgIč/ī”ŒžõqŪ—žŅīå*—Snk%_ĆźL„ŗ“rāHBĒ`(”ädyŌCy6*ž­˜©QlDJPQ5Ź;>ž~š>M2£Ś”Ȅē±ų×ÕBń¹/G^P_ØRī©%÷VŪ@-oF^ŹĒūkČĘ8«5ōŸzlŻ>Z*Ė„’„nz«fœóļ­H…1Iąā”ÖOŹł6®är5­’¤­!IPRHČ ä~é¶ēÆŃ­š,ŠÕ~„OŽžN¾śĀR?÷'Ą³¬s¾Ūķ_ŻI"ĄŚ”:˜$–CØp&Tó€T€€ ›F2>E9łg­\>—vŲR«WŽEFäp)`ć-@ꔅ„¬’Qā—Ń €3”Ȥ?¾›£>uqJVŪŚņŒXP9ü*³PAqēżM§ņxŽśZŗĮŹ1W.lęhw5RšbU‰Nŗ°”²J«[DŠŅ·Ÿp/£I#Š”āØpź]C†3eiu\–£ÖOäén4hŃ£F4hŃ£F4hŃ£XW×ܚ¢·¾ٵŃ! w‰ qóŽ8€£€¢–€>I`äjˆr¦Ó֚*”ČTŲŽS› Z} ‡uh|Rś€ ¶IVO<ƒ{Ę™Z©Ų['²u“ŃąGi “S}}é%µ)ĢäR2¬ŒJ8Ķ#x?_”‡f„&§NK©¤ÅCī‚ņ>)BJP¢¢†Õļ¬$š‡ŪM“mMRŻ1夤ĆRP£&rŌ i œO“¬(t;öµ^éśsm;QF¹č”uÓėōś[±I„„­Ø{juhH#“£‰Č=+ū€uŲ]šŗ, N<ėŖ¤żÉk)֛{ŻZLČ _?ŠJņą* ų“Wéƹ¾”Č»¶¶ÆŲ› f–ćQ$8’¦T‡QŽ]å*8?’ķ®m"ވ•Ė‘TˆŸfÕD~ž&¤Ķ‰ģ·Ä­@¶”ž+āG|ŠGć"Wµ›ÆXöcõ+z¾ūŃbĻK Sź’ĀŁ-qmXš\Aųć=äcÖ½Knn+A5«v2”•%tŲEŁM¼¢¤†ŌŚŌ¬PO@å*N2¢g‘¶ūѾ7.OMb=>–*įRŪicÜP.¶ßy’Rå‚Ņöeev„M·Q&%&½We &T°ā™ņĒüB R æ§ xż“«ÕVą&Ē۟¤%1źuׅ>3ŹĮLt+וžø„'öķC±¬}{ļMfLČöՔć‘ģŖčD(Ķ9Įs—SÉג•%N)Å( WYÉj%³"śø)”ėB’ėՉNūŖˆĖęć“UśœZ”ržG,”„äœź’³é—¦}ģ”ŠäU’‹Z·XśšŪE 6µØ4§?{n©õ”­ öF5ŸųÖ;‰’h „”W҉–V£Å±Ÿ Ī ‘œgkŸž¦f³_Ü[ž¬Z/5¬eŲČmImŃĮ‘ī,¾*m…üH:ŒYTųķܖJ$Øķ;±OŒė)iĄėĮćīT¢ž#ćšćŸé$duŌż5ƒ÷"łß5˜M¶õkųĆ0`•: ^/Sš¦Ļ ”¤Œvµ”‚o„fęEÉYzL©qd?īBUU„G]oФ©ēķ…0Žx„C+p'|¶¶ŠČ/j-U7rsŌHnI[Ÿ©NTOļœźS£F4hŃ£F4hŃ£F4hÖõā|㈌K’¶m˜åęXdØ-Q#’V B’“É#Æ9ĘØŹ}^Ż]«•T£¾‡TPéSc‡¹ĮeGYVSĻ9#ęĒÓe:—?x)tWµEKe̶3É„¶Į}MÆ ØJIĒF uIµY“źZ…Ą’źbĄ}Ą¢ā]h6’ŚOiåĒItżń©žÉ1t’U#o[Õ¤ÅeøÆ·JKˆ÷T¦Ė˜RC)JV¬øH8ų±«ņ×Ū/SŅ„Ö%ŽoRŻ!nȉ&¾ė…ō؃ŚCn6:%8ģ ~‘÷¤÷>߮ٷEfٹØļɬTä75ł€¶f•—‰-„eJHHąJJUœ…­čg{bĒ”¬®+éā:ė‹”<ė…JJ”¬ż2Ž0|’“×yp4ŁėjSf^27 “ ¤»r“®UdDs<¢ąW2>'õ§={€g¢ Vz]¬øéö“WM¢ü`eµ^q¹ [Į ZJŽ_ņ’yvڈųxÕ[K¼ū2›Īånٲbj”Li(O²ąR€ (H§É NF żōŖ½ź‹hé±~-^uSŽ öDh„.ž ąJzū÷÷‘mÄų{æ·“ėšõ°!Ć § Eض™-Œpy<’8ņĒC ‚5‰·śł™ŗ{ ōšÜ:…— NÓ”„(,°Ś ²µ ”’‚¹Øœ1ßüķŻ”ÜkćčŪ¶ķHJ¤°Ó‘‘YuƤnQ.8”#³ńR@ā’0”żó«FÉŁ}’Ł™oÜvÅJ…SJ"„IŒß7Ōė`8Æm(RBŽs„IP󃨮īo}cw-zU*5" 2¼Ä”Ä‘’–dŗņÓķ„”‘¤–ūåŠ?|‘­—¹7¬=µŚŁ75q^ė°¢” k–U"A)@ü’Æ'ń“öÖT„Xń©¾‘«—męµĒ“sÖį̚čgéÓ%)I yœœk“,*.ŌZ1–ų¦ØŠ]ža rļ¾üźS£F4hŃ£F4hŃ£Fæ SjJUĮDŒąžuś!1öuQ>˜¶¬Z XŠ–(½SBcLJ’Ūœ ±ŃVHĮ%@œż¬‹g¶ņÅRk;Į~Qgʌó“!Ņ×S+() ^xńBGŒ|@ĮŌ?Ō_©IWU‘¶9-ÆaÉü}§e@  @#ĄR³Ž‡™ē„ µ_²Ø·õzCõ‡$°µĆ‹!% Gd¬ž*IÜ<‚, Æ§Ė‡~ŖoŌeC„ŌlkB yNĀkµ%÷ƒ‚ćmG<@ƒ…+¼ż¼™Ż‰xŻUĶNʼa(€äŖ ļię¹w•2µ)$ėæwDHŚ:}TæCjGÓF5»‰1£«ƒŠŠ*(GȓžšŪ}’œœŽ#UķżøµżōŽ: üIM ŃŃ-nSŪ’ŪP”’Æ›žēK{‚NŽJ IŌĻŌ»7Ī×mõ¹nUė®ŪPUŁ‘ \–GŌ7삤Ēu$”:‚’q”ćā3ųÕE>”õµŗV=:_ń 'ܦ9 Łk ö|6ź£ä'‡ŗœqĘ9(汎™čŃ®|ox Čõ-øi˜ńNq=§b­ÖŻRcŻGöT[÷8ųģ (g:•z§•Żļ­A†—©ņU1.[üÕ’r+e ü”•„ū~Gk'ĄŲöcJbĻ£0¢éSpI.Ø©y ¤|‰ģŸÉ:vŃŖó~ÆZõ™jĮ6:5RåŖŌZM„śJ’ź••,’P•sÖzÓf«¾ō;fez¤Īß<Ż>ҤĒdJ QBT¬%Dąt?<|÷×`_;»ø¶Ō‹‚Õ’ĘaŖƒ‘ŌŲó2“„)W>YIä Œēķ„ūyunœmē™gīR(…2™õt‡im¬6źŠRJJĻ#€THPė¬turk9ų6–ōĆŪųō/v;3šV!Š€Ųp'¶ĒŒ$,TG‚?}hĶD·NNąÅ 4ęÜSh³ź„ńźŠŲkЉ)āA*ĻäγĪĻoĪóīeĘõ‰G²&#?S1.„ō„6Kd?>ÉĘ1€;9źóßJ–ćQģÉ5]½j‚ćšć<üĮQęWÅ {@a%_ØüŽ:犯ew/~7>‡.§LbĮ]9ńö'G’•,©“8•å >B¼uŒ’ÉĻn}AÕUŗ?ö]¹¶°”܋#0ō"\ŒņČ*äy%*xž’Wxւ}N%•©¤ %*āqŠĻŪūė7^ūķŗ–…õL“+iEDʚRøĻ5V[Œp*āT„ņ’~Dއz’ßęJŸzȳd2¤ä0Å]Šėx'#*G’8ą|sßNŪeÕļm¬›p¢ßL–•ś3Žœµ-¢ –”HrųüiƒÓĪćß7]N³mn-®Ķ ½Le©d5”…2ņ– 8#ģ(äąē^OīÅŁv]µJ6Ņ[ŚÜ:€ÅN§RšØģ8ļyež)$‘÷Qėöģé³Ūµ&ņŗėvUĆjʶīzhrdu>—™ZU’1łĒ‚;Õ§£F¹ćėE“Éõ98!–ßö£Į.—M£ŠR}Ƃ ROC>uYQ\‚żÆQ›q³* ē͊†Ŗ±ŅVź›āņ^G •q#ƒ«“egŠļ‹ī}M]eŠuVӗoA‘)ć$Ęp†ŻJJü%Ā聳ւõeŌ#zSb…×åL¶!@ujŠB}ŌEKŹĀ¾Į°āńłĻeWĚ+‚·x¢<©1āHi+\ēŚ÷ł”ń#ŽPČRI ļĮ»ņ*š•T4Ü/SYmæā [źu²źH u—x”šP#‰9 ē=`jĘŁ½÷»6ŸG~UXÖķ¹K ~“-žršJJ‚œdųBJʰ ļ€ĪWĪųFŪŻČŪH;ćCa¹ņØimĒx’,’Śt å+kŸø9INFAÖFƵ\ø.IõZSņ¦ÕD7 Ē ¬¾•²#$/Į%( •„d’d¶Ņ HZŚö[(JŠRŸ§uP¶VŁ]¤5K·čµ)ó=°äG!ĘąĀ' *p° ‘ĒƊ²#˜ø¼,kFdŪ¦K,¤*Qe8Ń }ÜØ ”ö‚‚•…ažĮ$\Ž’©× Ėŗ“/«‚­ž LjHiŗ¾.­JąÓd`q!”©'.%G$źńÜšŪ›Ž¬Uķ˜-É,Y› Óń’ʤ)?tœœ±dkŽ’ćŖ½ŻOŲW«Ę¾Å>®ä(^ėenF%ī*8Ļ#—œ%.,g$ž£źLĆõ:ØéC’AMŸNśvŌ¤²Ź\ił„ē é dąg]Ń£\śŻŗZ«{Ǻϳ\ƒøĶJ3pÖ·>™Ī· ’Ł#*PCHAģ$ņäzצį_k®Ō¦ÉŖ. å&øĖM¼y *$ęšRZs-\X\dĒōœ˜Ż–o’Jożžtė£M5{v“V­Ņ+ć„ŃÜqŲ$¬ńmkG+‚xä|džtÓ¼²˜…“—t‰+i4Y`Øż²Ņ€’©ƒzD÷S·5Vd &KéLHć0É u m+Ppö T ż¼jßv$We3-ŲĢ®CA—T€VŲV9Ÿ#8ǜ %¹kmėz£]©ø[…OŒä™ $! *VÜąk0nöŌLéœÜīĘL˽¹pMt5—–‰ >ė<” !¶Ö ģ{#ÕĖ閶Vįlͽ!YžŪfļŻę¾%_śĆŠ’õµek’³ēŚ•{Ž’OˆŹ”Åj:ŸIWøį[ī«±ąƒĄ~ćˆüj­É’źur’ų"W’Zɾˆ7JγģJņo{”ŗ|©u@¶•(8¢āĖié@ė­.¦Yõ]ļõ-u)Uʁ)‡āOt{f ØĖKj)•d©³ŒńBAĘu±5‘żWNLSŪ}&³ģ5Bj+N<ūæ ŪbB½óÄwś N| Žlū·ŌeƒŖ\{R¹·SØU#BL~.¤%/ Y<~ĆĒīFp2E·• µ 4Ų‘āJØ9ļIu €]t -_ę %#ū Eģ;ü8šŻNuaź„Ķ^)UJ¬Z ’RŽ „“Bį9?ßYėŅžķŚū]A«ķ¶ā¾õ ­L¬¼ϲ„%ąį'’ŠA å'¼`‚œõ{[Ō«>čŻ&wBŌÆÓgøĶ-źLŃ htøōēó Ī`–—\ ’T„`(y=÷~PėÓ(U–+V¼§č’ą>$ĘR¤•„ Ąć‚¬)|³ŃCtz[°•vöŻÆ„KRZZ”T£+ @y)±ö(PP#ö8Öyõ7±-Y—%7s6ŒŪŅćDŒD'PāT‡Ć_ŌߞI0‚@P=YnB–gŃ-jĶ& i·P€cUńHAR»$‚HāGÄćgRJEѳ›įp¦vZɱÆ9R Ō#>ڐūE°’ R¹¤į+IČOJļ¶}ƒrŁ{ūWŁ Č:Ž«&D*”t„ż!Zm8 NP” Ø“žY$œU”U[–­źŗWš÷ÕT·ź’9ŲeK3Ła⟧KD`(÷ Ÿn ćÉ™X[Č퇹ņ/XōZ„Š-U„°°—¹’=²āˆXÉ>āz󭏵[·enc“µ¦ÉyųHJä6ōe  (>_¤ų> Ó?ŖĖ:«{ģ•f‘C9Ø2Q5–ĄÉx“y܌ć÷ĄÖ) UuSīēX‰Ov m„³šR”)øČm¹>ŹƒÉa-«š¬däjUomÄZŻČ#OLE[iœå^„\v¤éćN­· #«ÜsVæGVõ;{ஸ›JĘa›vՆ³ähhSÕ āmĀŚJ¹«wē¢Ł±U=ĄŽ(ՋvØK®[ˆóT\Cl<œP¼$•ńų§#¼œd+S[Ōx $:5-’Ģ8l„–’TTx¤2Odąy:_¬#³q?ĹŖ ”¹ ŗĶZ|¾aĢ6RųIĮ< `’J¼ż‘z€dÕ}NMQ”Ūqaܐr:pZÖÜd…’œ>@'8<»Ź†wŽęīāJ…OõI[­AšķiÖ”æ# g SŗNrR±”ō>9LJøų­Ó–äŹ”Š«q£Ēj˜āy%”ŗ„¶‡GBŠR·NĄ«9×PčpÕO¢A€µ„k¶T”ą”¤ łif…oÄ7ź/xŒÉyēhņR„O¶$śź蚛T„mŲµ‡}éĒ%)ĒWø²ĶAy!`«–:>uyźžõ0µÜ1­­Ŗ‰%M=wŌ’ŌŅßüFą2=×Ö:8=$F;’P’”馛RIn„¹;‹- ÉŽ„9YČ ń(#`‚ŠćUƤ*ŲŪŻÓ»6f±,£Ü©ČU)•/)Ihqž’šŚ’”“’֏Üė[k zØHy^ŹrZŒĢ6"Ēu“‘ķøāœć*R”ļ2Nqœ€KīŪ¾ĘÖ]o}CQøQ„Ÿuє#ł*ģö?÷ź…ō“i[w÷¦J¹[¦% ŹØ9Z8ąćm²ź;ˤP\Gu† JČĻ·Œ÷Žu'Eˆ‹…Ė…4˜B®ć!…ĪöSļĘpŽxĪ;=kœ•¶Ŗ“īڤ–ė1ØLŌēÖ* ¼”üpā9-·m%E+ecīF9ƒĒźÕō§`n<:\[®‰2™T£ÕPiµ:\÷O‡¹’“AéN§ˆĮJœ9u­n‰?ąū*}BܵÕQv<Ų„Ó›Kjxēō¤¹>?8ÉÕu°×ń\—½ĒQ¾Øk¢Ū GTI ”·›XpŒ J9Ź•ŒüHėRKdö¾æX~³>тš“Į|åG*eeKĪWš słȌēT„õéSœmKž”3${ĪF©$ŗ‚2¼'Ü—A×<ē<»üźgCōÉj*źEĒtŹrؤ{Åŗk%mDløā–®¹+„”‘<^Tø©tčōźtVbCŒŚZa†’†Š‘€”ą„:üZø”JĮVp<sėdīźe­źb”_Ü œŪsŲ—0ÉfKku°ņ’ź}’ROp”ü،ų&)øėõBķĮJ̚l«ŠāÉs’0„Š„žRĻx®Īŗc£F¹[ź"K¬oķęć öfæ%ĘŻGKJ½ĪŽldkŽĻ—BöQ¦ÓńįIn+a»!eoĄ.i@€ć’\ +āuŌ½4jXbńL†%]w%: ˜’Nō8m„¤ē$岬pp~ĆLV¾Ņ½lT¢½DÜ+±˜ :ӏ@yÖ]iž⬷” śsäēVv© [ R›~1zĶŻ«µŚ¼b“Eu(a>ĆKSh R$t5p×”HØŃ&SāŌ¤S_Ź›ndp’ć #iäČóŲĘØI¾–”M½ʓ7.ģ~įJŅź'Čq.%8BŗF>8xĄĘ¬z­—{ĖŪŖ]»sŖ+q] •[D‹²‘•| <'„'±ßÄg9:®ģÆMs¬ŖŖv.é×iHy œ‡ā“óRR•rā¤ō<“ßąŸĪ¬MŻŪiŪ…tõ_uź-ų¦4ø0R×· rTT’®ĮĮćėØŽŠlGż™T[r‡øW”ļx="œźödŽ(šä0|ąió}¶fÕŻŹ\HÕ²ģ)±äÄųÉO¼”wɼ‘‚“ēī:Ņ]¬Ł÷öņŁ«ŠéWõÉ1©Ģh&[‰ZiŖĀšć(Ēr¼ćĒÄj \ōĶT­× Ż]Ö­L¹į=Čõ7a¶TŹY䠖Ņ ŌUŽ|=“'‹¶³jߊ«8\QŲZ€ ĻĄ’IĘp~’ŪR-‰Ū76҉W‹.į“pT*õ'*2ę¾ß-Å% õ“ßD“Ÿ¾§ņŲjTW¢¼žM<…6±œe$`ė>P¶üŪ¹2#ķęšEY÷^ƒU„‰A.ų*IĘÅ)3Ö„[E³/Ūc÷ÕétI»®÷Ųö5ęĀŒŽ)m?oøĻ]×g6öęoØńÆQ—ŃDšüäVß\wbG÷ZJĄe\RŁĻXPčņ×­+aw†ŖÜZE2ŁØˆī°$:Ŗ›2"0 ÕH·>³DØ”ŹlŠ_ŽŅ D«šÅM¬#(€r¼cõdA ‹f•?|¶ž‡TdFbSOøō‡Šł©L”Ä“H% NŸ““Ł:о¤7Īć©^Œm^Ó;%5&·MJ(JŠŽ8Ė-/Æ*%·RšŲY¤Ō¦6ܦrHHRACuįCSPB€ ‚`6Ż55Q-Š­e˜Øž”˜ķž·‹h*ąŸÜćūėW=YnŅóŃbŠéĀJŌ¾™Npx{%Å:µ,„‡€~MöŌžČõO\£U`1ŗą¹s)ZåR¢ø•@*Q÷B‰ Z¾=ądgĘÆJ~ųķeJą„Ši—|)Õ £Øj+l(,(§' Œg ”‚;QźėŸdķrć¤Ėn-F2–¶Cæ5:„QāUż¼żµVŅļł4ßRt Ņė n…zڱf}®+‹ öŌ¤;Ē”’RPBĶ“ądkāl ¤rŗėžõF±)iYgŸ¶éZĄP ©)÷Į!*ŹÕŒ€1ćl@Œk6•ĮēÜ?āsJ—œx©-!°GAÉāžŸŌ‘®§čŃ®qz“¦Ń!z€¼į5%‡™zj$āJ–™GZƒ|A‘ī(]„œ¹†]³[«V-:½B–ŗ6„P„Õ9 -,,„Į•!€īzw£F4hŃ£F4hŃ£F4hŃ®oī=ßX“=CŽśVDj„2ć|ĘBĀTǶ▗Č’zĻŽæ'ƄƟŌ'"O s«#Ö®ź3D¦ FŽKhEn3r*õē [„hd!I#‘!„“Ž)°N³^Ō[ņīŚ•ÖzDz4 õyQåKCA<86T[md¢AP 9)ņ:ŪÖ½µ³‘§½³ę%&§Uƒ/Ī>2$rJHt,€“Ҽ#¤‚āT^Æ6skķ‹,Ś *U2µ: ŌZ|HNø¶äÆ–żæ– HPIHżkČ'LŽ”¬ŹÕ×qĀø©n»nĘ¢'čŖÕc‚ę:‚ƒō©I%ŚA¼{ĮQŻū†‘R“*UR› äūń¤(©iN*ÉĘ8„9€sśĪ”ō¶¢Ē§Ō_! äÓ/#0؎åĻm\ĄŹĄHPC@)²l;Ї n7=N|¤ÅøWN|SÄÄ;1Ö>½ĘŽJO.Jp6”’ƒŽqÄ䥧%ŚÜʝƒv)÷˜i•Frs¾Łp2KmsRÖPŁJµ%$ä9r$7QŸõķPÅvQ ­ŌØHSõ ŗ¤…mD¤•”)%*ģmX¶ėWģ[Źõ2¦Ķ×]TQK~<×Tņ،•¢^W H+Č*'ČĢūŌFēP÷”m\tŚĶF&‰L’ūm€•N[Hu¤g  ü’ ¤’”«ĖŅUn=° Ņē»4Ö«ŖnH28’ĖĒÜmKĄŹųq c°•ż“«×U/«{fqģumŹ“'„ZųžÉÄ-‚||T¬žš;ĮĘ5²w~ßŪ?M6-ZņvjŻ~: °ĆiJŸq Ø£Ü $a BAļ±ŠņqØFēzĮ~]m6˜ļ0"¬  :i$qN£Ė‘š;ė,»u»:—5éq£ÅW©®\Š—²Wī%;y«ö!DyĮŃiŅ—ŠÜęīx“Éså} Žā¾>ŲB\JŸ<°–ŌOD¤ö¹:ó2=æJ Gž`¢†æ÷vd?„‚ė¼ŸG$ćęęNy(ā®ŽW™©Š{—C ¦°Ła¶gµ“©1™Łoo“¶„p©#Rŗ#’u\i¬%×_Œ—"­· Ÿp%CÜĀ‚æĖ…{’„w„ $źa° ½KŻ»5ÜiP߯Aq×Zm{O„å„ ©ßéŹy(„žĒƒŽŗƒ£F¹AøßB/KĮN¼č}÷½„6ĀN2ó¼²£ƒ‘Å8ūLj[…qß{£·3®S¹šß‹?J nØżP-ńŒ,ū‡ ĒJwßK“hŃ£F4hŃ£F4hŃ£F5Ėķ»æ*VØ‰7ƒNDŽ VC•óBŠØźx©ä6¢INBJ{=cĪ—z¦ŪʬėŃ«}Ōϳkæļ”ÉL¦G%)Jd)="?š‘ųÕsz_~2›€ōøŃŹŃōO8Khd’3‚0¤’}Ó×ß½}QÕP‡OœÓ4§Vė mÉ~čų†żÖø„h#8ę:#õiõ—(Ģ֝”Ņ›J~©§~d’¦Ė™‡€ ā¬%-äcļżō†ŗų˜Äˆ(Ŗ(S¢¼ć±d¼“–¦Š”¬'$Ļxw=ąėź¤ß½DSCn®4Ŗ¤„żaB”¹Ē¼§$¤”©µqČĻ2| RµY¢Üq}uWb-§ŠłBÜk‚€G_`¤‚GŪäjIY©ÜĻP›¦:Å:5GŽžXmL6믕—–PN ?–€Qą<4ļwŽWj*tś¤jŲ¦%‰é—ģ³TRƒ2P$€¤e)q¾ˆĪUßZÓÖ_©Ėv‘fĝ¹75>MjTf_M:M{Üa+BU‡ •Ä؅¤õÄtqAżOļō;ņŚjÅŪ* ÕNb#M–ÓJKŠĮJŪHéJ ?~æA|źŖ¹¶7tmG­U¬ÅĮƒJc‹Ņ˜•i/,©ÅG R†R””£Ī »*:‚»B¦®Tˆ“*ī˧¢,¹_ Aפ}2BT”ŁR‘ć8 $~¬źK³ū[zßŃėĖm1­ŹZØŌgŗ-‡}“ürxšNqŠĒdg„É\·-ź|črD§ēeeąĢ$—9£Ä¤”G$~_tų°eŅź/Ō)‰mÖ0źäū|”)“§ŠSŁ -ä‘ņ)ģ‚~Sķ ¾ź¶BŃjĘ~…N„V+!šŌj“v䐌JO%(§„ōAPQė:y…źõ8é‹cĘrāžŹÅ·PŚ2¤•„mŒ†Ņ’?G:'HvŽu:½¼VŻkŚ@™&õfSŅŪG¬ø±Į¤²:o°ā‰)ąć¤4k”;æVö÷Ża§ŚyŲ7‡o!d<„v“Gä:±nūę±»> ,©/Ūé|葞ōƖ©Džß3’„`üōgFyL“W%K}ØńŚISŽŗ°” $“Š”ź>„ U®×m}Ƴź·Ģę±ÉųĖ Åń“üÅ€=#¬éÖ§¼·5˜Č›ŗkP”RT°“S§KDöYäUp# O€3ƒē÷V…›tPo UĖr¢Üś{¤„.”%?!ä ?ÜiŅSģŌģ™.”¦YAqĒp”¤ ’OŲŖēi·®ŹÜė’³Dµ˜ņém”Āū¬šmōAR3Žǐ<źŹÕ1½öĪ×\AW°īITņ¶ŪjØŹP#¼µ§—{Pģc£¾¬»ė”ŽÖ¼K’Ż—õTł@šQIJ’A!IROiP ŒGw–śÆŲtču:MPŗ!1Ź“‘J ¤qłq=؜ž‡Ž'$i“bwv«ŗR$ŹMU¢Š %ČUY/%MČ!A%Ą9Ī{’:ͳ£F4hŃ£Føżõ¢ŸS˜ś&OŌ…2³Š@Kœ‰ČVR‘É$uČ}õ”ż/ŽÖŁoFŁ=Õ‚Ć“W_TŖ$§S|_*Pöł*_‘ŽRs5õ ²õ=¢—"¬ŅœŸI3’&TZZ‚ŅT•e‡’G±ē’1°zMFT—)®,®s,ŗš‹=īŖJ½šélŒ„¬BrI÷$5ń-é T9²ņ$€ōē@Kķ¤„ŃĔ„i?q898Ą:U ”ˆ° ”{0åĶą_÷ÕͧŚJy­)BÕĖĄń9Ą É$iʱSKT·Ų1ćHnOĒ}Õ:ŅŌŲdąP(Jr·FUńņŸfWOU>4zżrÕŽĖÆČˆĆQ%»<éL<÷T³œ…))<}ĄŲL›Dł¤Ž0ė•zdеµGؙ!§—Ā€G^čd„(ų’ t­jŠžĒģŽäQ¦ĖŪ3™rSä)ĮĮÕ©y.({o2¢p‚“(e#duŖv‡épe<øõfąÄK’½Æ¬3R²Ė@ä:NyOA¤ųZWÓ’§»_i¦H«µ1ś½eöĖ_RśBPĖeYĀŽ ĄŹ‰'®±“šĒÕ/Ø-ŖžÜķėķ¼ūĢõŕ8‡ŠPZ` •+ ķX=g}ꮇéŚņømšżzŸŠužź„SbT".#Óķ!N•6œ %<óćķŁŌF䯒6–”lгØÓź«“P!JŠ—WĮ%) ¬”ŅP<ĪH ĮŚ¾Å©W¤Ö\¦ĀØH.ÅZ‹”ҹœ)+B—ū¤ ż×åF-ŻZC“¦O› —£µ.U;ŪJŸqĘ_[‹m* „Š„ĒQä3kZ»Wµ×MEt‹&ł®›®:ž®z“$°jM!)Z+ČįŅdć:l°īŚĪĢK«S_Ū j§UĀ„ē%!AȉJJ™Ź‰ŹTˆėsÆŌO`ØÖŃÓ?ˆnõ±T§Ŗ2®ŲØZ™Œ”:–“Øąrā F@@ģąė§z4k“ūÉōÓ·>ńłh­JRŃ%\–A}IČP󎳜yu&§ī VģŽ;r«\”Ó"Õ›8Ń}„{AćÉEæj*—ŪC]:Ń£Y[ż¢wĊE“F² ¾[r“ņߙĮx>ĆXĀ?Ź„Ø’—«WŅŽŻ@Ū½¤„Äd6ķB¤Ź'O’”ąøć‰ Ļ’”‚?ŌżĪ­ qŲ—Ų²™möICø¤­'Č ōF”»1a7·‹Öė3ĢÖ ÷ä2¢Ž%¶–ƃ愌õćʑz‚ŖT#mśčE[¹ŸEŸ‘ž {!nųCaÅöĄÖiøhš½7zœ³åRŅć•R7Ó8ėī)G‚ŌņT¬ö²‡|uĖūmQ¾µŁ‹'iiѦ4§z怦‚|„•¬æYżõGRk×W„MߕF®7*­bÖ]KČöĄ*H{ˆĒAÄŠ“× ūƒ­isÖ©wĻÖ«tYĢΧ̢Iu‡ŚVR“–U’_Čņ£^‘’ūœ¬Ļż üUźŌŃ£F4hŃ£\y­Gy5IˆuĢ„•«¾Ō”䕞Ē$žŁĪœžL4ŹeRRÜ/;%ČņÉ)F€ŁJьeX+É Œć$“­•é{p©ŪĻ·5] ¾Ü©°iĮ¤>œ“*2H@w$tćj-œżś8čė.V-Ś}„}W(*µ=ųŃ'ŗÓ3e)Ÿ}(XNVŒ)!%i'?æ`÷ØśĶß{ļŪ1¬Ŗ"ŸžĶÉ5«Ł—0P•'䖐IėÜ=v5[zøŪ­ÖŖķŗī[žī£U#P‡¼øtźZ˜W-!KäT¢qŃ#ĒĒ?lź÷ō×zµ~lݲ—Vä†Zś)JsjuŸR€č•ćķĖQ_ZaÕme!,—ĶO „g—.jĘ1÷άßŪŹęŁRmŠņ–Ü>äy ’Ď苉žŁģx ‘¬Ićæż5U® ¾¹éīU­Ź¬g›d{ŠKKę…$<Źæ¤ž¹'öüąė_zthŠ}9ŚÅĦHIśŒD%Ļu'“ƒ†pIP#®»8Õp竪JŻNŽ^&&0Ūę:G%`ōFp;y>ć“öGtaī•]N½X£¢+‰mB{A!ÅIą”ś€Ē~<X:4hŃ£F'©ŗūŁOÅl:ūl­m ųR€$łė.1"Y}*D”'äUī,ÆĀ~ų ŸĻz_Qbc¦3SCŖ#®K‹y$ŒŸ?$\ŒØwަ·75’t9Õ®"—Į*Déé[ö#«ćŚzR¹’’|kkYŽ—6Ŗ‡Iƒ”L“Z™ō‰2J_qC Qm*ā2:Ę<’|źõµ¶å³x[Ū~™‘O“ó9#…6ß°PC…¼qļÜJOäć?½TśįtQźń'Uä»,R~“Ū>ŪHmĘŪheIRAĘI'|³ÆĖšąiua˜Ŗ ¹ åĶaĘŽJW*B‰dįEIQ…?—¾­IZV.ä}mׄ.”¤°ÜĻ„Xj”]‡ F~anüū|­'øŪg±»{3¬ķ=EJ:ŻGŠĢJ_’ŲI WҬ~XČćzÓ})[ )–a]× Xš™nÄ@gƒŹNxņ0p0AåÖTN¢§ŃĶ5Ė‹:%Ė8Z…©Ģ8ńś·œ%°¤€jĀI>F>ÄOö;Óķl76į¹āø‡į»ØōpāŹŻŽ‚‘ļ•’1Č©#}‰ńœj»õuźś%i6”7Ų-ø”Ö¦ņ„4“ƒķ²~ć‰<”0s€“¬œŌø’(Ė„ÜהėĪ“#½ī­1ÅNŸē0„†ŹOō…ē²vŗĻ¹wŪUÆC‰C‘_/Ų LU4ą<‹Īņ ĄSmįR?V¬)~”©“ Cm^»µI¢ĀT”ø¶C)@ķ' · WD¼qÖ„p=;ķõŪļÓé§kģĘséāRŅƍĒBŠy)Hę„”óāÆŌQ?œi»}=9Ō)6E­IŪ»n%V5ß©®(ئUIŠ 8<Šqī”ž½Īæ:¬6¢½E£mÅē·•cųåĖU†ÜHÆ”Hmµ‡Pm܄šįȃœ `ź%hT »hÕiU“”õŒf•Ž|¤qqJN QČ ¬„9Hę2;>Ń£\“•W£E¾*²ęQ^ØĮ/MöāÉ{Ū_79„ QHČ(ŹN?̟¶uį>„q˹iµkŠÆ>dĘä!“>ģĻvCa Jŗ$’œrČūg?ƒ®¹čŃ¦Ūž…I¹h2čUČ,ΧLl¶ūŒ…’ø ŽĮļYŽ³{±µé5£¹iõjtłJzm2°J9é9€Źy'‰=uų—NOØ{½)¦»ٱ)Ļ€™S#ĢTɈO,+Śų„…ų'ĒäHm¾Ŗm®Ņ˵¶Śkrź…õ½EmyBVāÓĶkąžųŒ1ŁÓĮŚ;Æj]7ļy6ÜųUy{³”ūīČPJB~XĆiJp޾ŲūĖ7¦›}Öķ‡(V[T&‹Pv¦µ‚ÓKO¶”‚ łßą`õFģ6ŅļĘĻOr5*]«U¢Ō%6fÅzS£ŪJU‚ė…d}žŁ M÷’o÷{pk D¬ŚŠmø2¢Ī‚Ü–Ö§œ}¾Ļ»ńP) ĻC¢1Ÿ¾¬°‹øčīÅŸE›SKŹ ¹JCˆh“BRU öīuå¼Ū{IÜŪ m­Už_»‡#HJATw“ŚV3’#ł!ōłI©[{_O“ź­>$Š”Ŗy}ĦO q°{-åE)'ČFp3`ą~Ö4hŃ£F›.ĀSkU”’A^ #ąuÉHoĢ~\ÄEŖIĖ”%«Å%š‰ «ä|xūźk(õKuś“ź«ÓāŅ”Biaē›mʂYq¬‘ÉA|r3Œē8Öōżé’ą»ž¶µ{¦mÆJ™ĮL"†ŽqJ!i8 ńlųœńńXŪu¼õ™~^Śļ+U‰2”<āé•dńu2"c)Ź” IčćÉģ$ąT¾„7‘wŻū@UBŪq‹R‰)Q LJ»5JņRq‚YH ćĪ[Žß·6‚įث֚óę “.EER.%M“\RN@T‘Š<éØ{ėe. ź“*-N„Z5؋ˆÅF9X*J•¤¤)*JsÉ(>5PŖ-֙÷.ßbi«ĪB`ŹrL””ö[lµš*ā•ŅGŁ))Y8_éę°Ķ“}5& Ś…JEųmĖ!„;cŠų<ŚĄI q¶Č>r¢25vm’©™Ō]·–ĶĶEĮrE÷œVüvc>„-|¬•'¤yN3ŒL)žŖģÖčQ^§ŌćÜ/”th±”µ„Ä-h$-|Gtc±Ŗ¢ūõvߔחJ„¢Ś“ $!Å»'*% ’¦’ę*o’RBˆPY:®‘mŌ*B“P¬0ŁvŽÜ”J`ø#ÄCnØ”@{ia°Ų Vr§Ałs Ó’§Ht[§y·ži5EMŌ²ŪlEŽ>”)-ŽH ZZm$’œłł\>Ŗ7&µJÆ'k¶ņ¢ŠĘéęt×b±üŅ%–ų äā”;ćŒx:Äõko՚n¬š“:G•õÆåA8*ł­Gā$ć?õĘ·Ÿ¦é»c·¾œ ßM˜ŅäwŒŁ« L™.!kĆG'µį Œųüź…Füī„}š™9›¦;0ä/ܓK˜Ū†,Fӟä”å*H+OY<‰ĘHżõV“w*Į¹t8ŻŗU94ŹĢ¢!ĀŚŠH朁ā“䀣ńĪī¬Ųd÷–ÅmĄ¦ä&¹²UĒō)iąBHģ‘ÉČķ=~z§£F¹S_™Ioy«qīī;DMÉ%Ś‚cqKī3„G’,÷'Qū٘īgįĮŖŹ©ĆeĀØõZū+m«Ū^ NŸß$ė¬v“‹vÕ¤:źŌ·•)J9*%$9čŃ£F4hŃ£F4hŃ£Fj¼V†ķ ĖŽ)(B`>T„jÉ:äÅ!ž—ų|ľæ«ĆĆŁŲJx犈$ =Į‚{ ūfńŁ ūyn$×néW?Ń Ķ6§dĒ÷bäƒüÓĄ•!Åū2ćņžZ•“Žu¬ķļQ[7Y˜˜Qo8‘–R ~­„ĒA'–GCĘtļ» ķÅĻ·“^¹Ž·ź4Ä2āŲzCķ”!ßmX(^zWc`šFÜ*µ±sļ–ä&D‹fxnlœT…:ÓĮµ‡†R=ĢØ3ķÆ$ÖŽŚ»÷g+Ū@¶÷*e%OŠˆa™iR”ƒÅ§š=(„M”’G؜ą6Q7Ļcķ‰IØPöڤ…SŲ1įϚŪIx†Pœ²ŅYPR 1‘ÖÜQŻUŖ žåßuŠĢŗ ÕZ«*‡ē–ŸqÕqAqA¤śˆ]%d”œra†§®ŖŽr„UCÆÕfˆN¤)m-źGhHB‚%?¢”«ĮiUfܵ©%ÓipR\Œ¦·&3žōW8ø¶ŅŅ3… 8“!IPP$: H ξ£Ś*‘tÓjT7d͆‰pUS–JÕ¤!%ø¤”Œ‚Ä`¬éĶ2©4Š}>™]1AœøĒŽ9^ėe+mM¤©C -+ŻH)RŅ¢•a(Ćy©tŗ|ĢɊóӐćNó Dæmꀕąć‰G§„¤!?«±}/Žń䶙n¾õ»‡¾‰˜cƒQ“„ qĘx­HHą)xūbś¹ŪĖĒüY>ń·i-Õ)uX(‹5M4\•ĄĖĢū€!<‹\ć?!ßZĖ“LQ"F‰]„LĪQz\Fį­¹( “śRŲs–\ŹIā|%YĘ3se7bóž —oN¤En2ūóʘi¤-Jo‘B’œØ·ŁįȐsÖp-ź=«µžœmŁ•›’t[Žōl+„FP•ė[JrR‚œåKģŒį>uHŽÕgļŹō™ń©ņź”så„’X4•’ź³…—r¤r^Y ėʓģźČt, €œŠU߂9wœuø=4ģ›QfK&Y›[«2‘SJ—īD O>)B0:ĀšIģćķćT—«=°³ģKŠŚÆ[¬GŠķ^ØKŌłˆ÷ Ø2Š(@O¶’@Oć ń„õTQk4*vķ3LŽ{ . ƒ*1qmK* \£ĮCŻZв„)uÄ –edķ/Ŗ»­R‘ĘѬBu\L•<Ó…§˜9VPC©ü$s*ĻGHwz¶–ļØU8)2”**ˆRé#¶ć¶”ŚVF QRqÅJOyVŖZ+r®ķFÜ“(é/0—S #IC«y ÷Bœ’ė}%õ# ޼éUB—wYw;t;†ŗmfŗÓA~ģ}¦Üäxø‚Ł)Pę #ˆ<22s¦JÕvƒ.ʤKD*\J„- “—āTō„4m„–Š‚[ S–¼rÄ(dØįšžüŖ½IČsX1¶ćÓć®"¦8ū‰iOv„•cšN Ž ėM²fĖ–)ņ+uŁnČ„4¶"Ćx”:Ė €ė,ąq*qx’8õäjŌ³}Xn¾ļŃ».-ĻÜG·üB7ø‚¦Č=žO#÷Ōś¬ Š„ Ē]“ؤ8ŪɊņÖć”ĒPŽIF:ĘIĮ$ÖŲźŗ^”w2æn”ˆĖB]D8QĆ ö”“…:¬{ą@ ģœV”Žw5ĄÜ[0Y”ćøä„ŗś^x£’¬©kʈĮĻA]ćJŽ“hC_Fä̦4ŠĒÓ8ŚK!Ä¾ā’( h°GåHW]ŪFdīŽ-.š{ ©El·9įĶ·Yy¦Ü |”I ĀAĻ3ßĝuFrwx`āłø*­¼Cՙˆwł^ŲK¢C¹BzĀš€Ś”Gq łŌ~UB¬żiUUŹ-TĆØHS(  œž%8±’æ]q¶v-µKŒśx:Ģ6[Zsœ( ?ē§4hŃ£F4hŃ£F4hŃ£QėZŚŁ»ŁĘÖ¤-ōõ%I8 ˆī`ƒ®}ģÕŽmtµmS%²^®V)óVų@[p K¬•)\yµŽ`õ„I:ŗ(^£7Š¢Q¤Ö­ś Nņ~š, krņo AK¤)‘Č 䤄^Ø÷§Ę)÷¶óī¬)ŌČsß¹ Kz$ęś–!ŗńSœBŌ>*žf3‘ŪxŌomw2ōŪk>£C¶Ø­µV81U—:ž§Ÿ‡Å²Ū¤¬(!(ACa WłUŸŽWfz²æ)ĪŌ¹!ŅkķEl²ÓlF[ŖAä]ä‘‚ŒŸ·éōŪźŖöŗwŸJ‡V·”F¤©÷ŠØ„ļyņ‚P’  B[^õ{ƒ·}IZV…å±öæP¢Čƒp¢‹BŹJæw€ ¼Ÿ%9^ ČPĮū må];›nŚŪsZŒŗAyø’Ś`©0Yp²č[īöœ%mš$r'Ī—”śU±cQÜj„U®Č©ŹQTÉqå{(prSIk¬“ŃžśØīkz‘“—•z6Ž^¦Ži“čī?)æmĒä%n©·āø³”—P ĀÓÅCŻłēPyōū‹q76ōśĖ^õB°5y@>øm8Ӂ“‚ń‚@Įāß`dČ//M;„mŠ”Ø …sC„R¾ž”ņRt ½ÉHö–PBŻ9ļķǼb«ŪK MżN6õ"žUsHX4Ņ愦Ūe°ꔢx«<ĻXä’R; ųŗī~ŁÕv­ōĹ&Ҍ·éāK¬“ń}Ē—T‚ 0Ki#ü„D~“§} Ų ĀžŖS«‰¶Ų…n”EŁĪ.2f'+a)Źæ¤Ē ŽY՟fv6Շ‡~npžóRŒ‡iP°ś€J€J c³=dét*ߣČoˆ’ĆŻ“ķ!qĢē›–“”­=Ā®ĮB>éĄ_"£éš‡œ™ź ŪRŌŚÓV‚¬)\–SÄō p¢|<ź õ°’mŚ{×õ±qµsŪ) •5%K“Ą©|3ī$œ|‡Œ¾«;*\wÆ:2) ŌŪuśÄ5¾ū’½Ō½Ö€ $e^č ÉV;}ukFs}āŅĶóøe3ś†.g‡6J•­Å“B€©$(`łI󤻛Gaš¼·i1”Cƒ 9fš®m­Ą#°‚źš#*Q[äóϐ¼÷®™ŪMmŹc%*An#IāÆ#”ßś 8hÓ5ßtŪ¶…-5Kž±“ n†Rü•šAY„ē󄟳j(ęųķ j Vā[ą’Ń@ōFGż-ŻŅŪ›ŠR"QojŁ,6ŪMĢG5Øć)'$ö?>ŌöƒZ¤Wé­Tؕ8•n¤)Ft8’?ø×ŃqŠmz`©ÜUxtØEÄ“”čB ՜''īpäu·¶#rÅżn{.炾½¼œ$«Ęr:_7wkē("-ūo8¢¤$®@$Øe#³÷ŌßF4hŃ£Q ī[1| &ŻØžŒę¹µ·õŚ{-*“P¤Ą}šÜČńäūiąōFįī)µrųūÉR‚üg±ö›l…zuƒøn×铸Õöć ŸJPTÄ©HAyžŌų°F; Xū^“’Tōų’Ö)›fQN˜äi±¤„2ó’ćˆZ½ 9§?~ĒdõŽ}Ż«nķ¢õ§n[ĶŅbJ–§f°ŹĢ‰}²Ś’Ž[Fµ9ŠåśˆHčäi¾ē°Ø»sŗÖĖ×ģ)ĘŁ4ų’%Ę/ŖJ„Éśe4¶Ārų© TĪ‘įI‘Ó÷ŹĢ”V]ŸgķUµŸīū¬½:JY™7+@²RB=Ī|TzOącK·CÕ;uė:u±D¶œ¤U'Į>ė“Žķ)„ø²„œž g‰c®µ'ō›wmEd.Ü~»‘p» HŖ¦ ŁŒėƒā–Źś-„ ßļ÷×Īżo”źĶJ6ßm ē%Tē-(v©æxī%*Có€TTēé9)¬ożˆæ,r\+5‡b¾Ü³KKÅ·×$9īņ©YHQū…Øw„7»@½äŁŃwSéQ鹎Aš¦YRŻi µ¶S‹Xą…Øńę8ūmw€µż8o,Ź:hÖ.āܦI†Ų‡%ĮķŗĀŌąŪ„gł‰P@ p% ž MźWm*›g¹Ģ]öY“M£Õe%QÜaD)ĻŪ™Xł4’•'Œącā—X¶ÕÆ|ݧ»®Ī—N¶ĢwB’%52C!M””(NHl4xņ+IĄOZjŻ=ŪŻ:ķv±O˜ØŌZ+1ThQŽ(kėĄ€ąąŅ³Äńł„ł:ü¦9CB›kŌbr^ŸMž(Ø.²äfTœ4“‚BÖŅGĒ9äÅŠc½ķ€ĖgH,ĘB½×V€“„žEÅŒą„ Œ2 1hķĻ•V«|ć;KˆģČāB_R#ŽSŸ¤7īŁ yĮ3ĘģķÕ³öˆŽ¬T„Ś—*b¦”’’#HPe+v1ų‚JxeC—Ū­B¶¦zčTŚZē9M‘YˆO“§™ś†ŹOÖx ?mu[FsŅézĶow*° -¶§F½RX.“‡¤ĖR””Ød‘ŅUŒØd‚pÉź}æ­õw%ēå8XœČC>ßņŌ‚†r’ē R1Čćė®ĪŗE†āÅj3 †Ś@B$Ąģł×¦#¬Riu˜‚%^”8—RYKˆ IŹU…2>ĒXĻŃ}&ƒ?|ī¶äRį8å64¶ŲBb$¶”Ŗ`ķd’XŠpė?'~ģ®ÜŻńœś»v ź!MŌ)ķ%‰ Ø(((- w”?ōÕ5éŅ÷»­MŽ©ķ%ć5é0”†āÅSė÷V‡Ā…!Gåķø•ąƒ‚±ąg__ķ·hĶ픉šÕWi§Ŗ BRńAiĢ%D ¬|G“Ö­ŸM図ÖuZŸE§ÅØK Å2%5)yŽM„G’ĄÉŹŽ{:„½nŠ­Į}ŚSe* 5ÅĔó«R„ĶZ_Œƒ×É_5(ŃĮ€IÖ§‘A”ɦ¦›"OvP¤&:ć ¶ÆŌHĄļ¬„攊§‹ö“¹›xŽPqøµŠ:V}•šĒJJ|¤ųżXÖ£ Ū÷½« Dźl:„.{-Km™Œ%Ō¤…$”Ø‘eĻK¶Å¬ļ©]Ō…ž€X„JyØ­øŅV†±5Ā8$Œ#-ņ~ś¹7*ĘŚĖĪ”+m¦Ņ!ĀÆM§jD8ImꐇJRąt'ƚˆĮ=…+ó« ǁV„YԊev{u œXm³*RRZRV}ćO4hŃ£FA½@Ō¦luķ-ņ“§ų¶’P2BœiHO’Œ”®cQfRݼéu_Ä֗]/NnÅŅįZĻ»8 ē#$÷ćRėN@§OŒšåJtškķ.$†¦p@m>ńAo)$(-ÄÆ„‚®³’™Fęī«wĻś+uŗk”/i’¢–„…B•”?8zWæ>¬‹õ7HŪė „tQŻŖ* „—ēؗ\wŻRŽ P\I 'Ÿ]c:ø7ksö粩Wj ÕĄØ2Ó&™ˆž‡“ņĄFR¤Ė–Cī²lźż±L܉U£¢–š‹o³I £µĖƒjp«—.*ąė(l«üڶi6mŁź5wåėJŸM„ʗ)øT³.?#ķ¤„EÄ|›Ća¾C*RM“¬ˆ•j“&Ū‡_ŗnˆŁjÆSQoéuXH?„<ĄS™Vė*9;7»[_¶;‰vŌ«YɖŪqąSW*J½¶ŠńP*.-I QÉĪ“żxvp­·UĶG\I‰öSq,­A]pSk#9ż²5 ŻūŪz¹6Ł ÓÄŠ>•Ų’“JKK“N” “š9öÖp3€ ļĮĒo?sŅlĆU©Óܖū®ŖŽeÉ-¹ōåI÷Ќ”’yĖ>Oß[/t·omkū'_¦¹vF“Vž ļc„eęå% [JĄOćxõ=cPæ¦·}zt®XōšŌ§w §ĢŁé‘1)vRČKIWø eQų““ąc#Mr÷½@·…"ōٚCŸįӐŖƒkCo$)(PB”‚Š„މ@=5 ­īmč J‚€·é~ü/~ö#r@|#šR²„#)Wž]ür™¬mÜzÅ*%fC-Šl_碔r©(ų‚āˆ-ž\’}Å+ä?:’żĒmB“.Øžą×XˆøPLKø 9惿C*~#Užūo-ٹŒ*ī 4K.Pc:“!h$u…©*AģXtͰ^w|¬‡™˜źŅŠÜ&·]Ć«G4„£ŽNP€0:~ŚźFę4×&z“•Fh0©®ŽĶūk䒐>­`Ž`ēŹŃŠĻŒŸÓ§oSOĢWØ;Č?"[Tēj •Ķ„8„Ž VaƏ ’q®”čŃ£Yѕ3½„`ĒEu¶BĮK¹–¢³Œ R„’tžÉÖøÖ%¹¢N­’“>Ōō8X=§ć„(aˆØSĮGlńV~C#±Ö-Ÿ^LD“³0ۜļ·5–Ż_ó ‚#Č_H8Røńy#VnÄ&2vRŹL7r8”CöŌā@QŹ|÷Ö{õāŪNnFÕ{ē–ń,°xŗā}Ö ?eœ`~äk\k5’“J|V6N] “*²Ņ™GŻA øTÓ#žz·6šfČŁf2ė2£F6é<Æl|yńöń¬Ū³6¤››Ō¦ķʉv\6ښŖIuåS†–öe89ØĒŽ1Ł#ń«J±«ö©÷¦M­ÜW56}ض™ØTHpĘZd¶K*XĄļ@?Wßźī— ¹RįISņaŗ§R†Ż)C„”HĀĄż@ū€~ŚU£F4hÕeź„koÓĶź¦Ö¤+ųj†RppTGś‚F¹“nĮTłĢ6ÓH%‚ņœ‘ķ¤ ćäO”¤`å]łź¦<÷éŅŃY„ūįōÉqh[¼^cõē!Dr”?ņż )–Ė’\}¶oŻ}-~ö\JĮ©$q%IIĻŽ@‘÷քŲÉŚ"`QwSoéMUc”¶›­» Id!)gŽN3ž<0’ĀŽ;:“®’M{wW)·6×\šhQPB'"’ču·ž%M”«łk)ä“ö8yĪCŻŚU*ßÜjåÆoÕS6‘GyÖ#æ §Uœ¹œ ņŹ925¬į]iŪB“zµøśUQ«·ķ2ąl§„™ Zā‘÷@cĄųć­J}Gµ©[U ę+%ÜUĀ_˜Ÿ©I|„²¦Śl£9HėņUޤW¦½¦ŗné7=N‰!3%<’ÜyJi—WœØ”§īƾ1œ“äė#nöŽ[’wžļ¶(®RØtø,®HShR¾•,Į÷Ō€Ž@EµäŒąØg³Mż-ģ'rģswŽZŌuƒ¬µ3Ÿt7Œ-Jģä-NŠ ƒŽ5ØŁøoaŲr­ÖäŠįŗ—Ūin¬,ŗ””‡“¢®$ŒēĒ^05®Ūڲ·źó“LĒ RćŅåŌ)±ßo“N„PTąB„{‰%A'°J0~ąĒwZś±kŌ få· z“yh‰Uś5}; TvĀs)č+! Ā:8Ą8:~ku=B[ßĀh.] UdVYLˆhrDYD6RTPį9Į ¤įD`u÷é¾ćõŗ_Č£Ņ÷HGÓū.>˜qXl¹Ģ¤”©#(OJĀŗ8 čyŌ"Æzܵy.·P­É®K‘NtH“>@p <Ś ŽT  @)Ąö¾=zŪ»S}ī=ė†Ģ¶ŒŹ{“•µRUķ/ņ!jęr{PūyÕ§^®ļ5Žj‡ø6½&ٵ¤D‘ JČģZR”ŅāāĀTė%G¼EiéķNŽ«‚$:®Ēj"B@e—\åŽņ9…gĮW} u#Fróiä’õ=D¬€†=ūµ™>ÉQ*r‚°>ĄöN?ė§R5”ėø)ļHBؑnWż“ĒF‡TP\čœóčdō ¹®™čŃØžčެ«xUāŚ•»Œs)qš[AĒIę NxäÖqœżµ”½4Żw%‡.§sW¬ėņ}*¢Ūī-–).)øN©õ­E¼ą(ršB¾Äw«néŽĖę·Ņ6ĖiīÅÕ¤’-¹Õˆ?M*Žr„r88=?æ‚ķéēf¤ŁU ×­ć5Š„éV@L§šN`uČ'Ē%/ŠJ•Œ’?ēõŸX]ėNgn(•ĒV©Ć›õ’j”łm C.°Ÿ‘R–Ź9“=:^1źöE&Ś‘C«Q«4ŠS ›U-ČĶ „„’,Øq)$tĪ1ŠÕ-æ·,K’pčri6=ė>E®· 47}2£¬£°H ŗ3øūtnI»ēI0ŗ-•}Vj ļ@b‚ņaY „jX ‘Ń?ņŌ ŪŽ[Ó¹Q/M×£µ©|\£P–č/¬d“ļŸ"T}%#9¹·Bō“dŅ£J…gÜ7;ÆøP˜ōx¾él v³ż#ńłĘ³VÄW.KGs÷ ų¹vĀų‹øć’™išKެH+ąIe)^ŠźŲŗ·¶¦»vØÅ½µ›ŠŖÉˆæ¤ŠÖ„%Å„I#=~5`lÕ&”DŚ»j™WT„Tš§“f.»ļ(rp)DœžJ:–čŃ£F5Zś¢ ’»żā¤±ļš§•–Č$(%i'8ļ?¶¹§•>4W%ˆŽmiD’”Ģ+d'ÜSe VHż$ƒŲ(Ē~1F–©Ž°ŁLiżøźR Yj:øŒ‚’¢ÆÖri >O‰TĘU›tŽ”Ē_,hŌ†Z Fdŗų%ą¢GĢūM8„(|+ iēÓót‹§}-ś bõč5Ģ© ShŠć`<–²HĪI89Ķ幛!QŚ:œŸj®ś•%ź­@AuŁ’P–b—2P\Q*h‘ƒČdōqē±.±QœūņŅģĀ]óެp€„-\•:r­_·™Vōµkn „V)-ŹTÖd ²•4ł [˜^S„:ā2rHĒŪN›v|nm.µW„ÖŖQD-¢‰!,{_ļe•Øü•Ē#䄯ŹóÖ@ŌŖĒܽõ—vVvż›±šĶFŒŪéōB$­ælŗ µq !iiģŸwRtļaz|½Żbšŗī©ĖzÆZ·§Ē‡QBŸL©!Ä©kįńAćĒō“’ŒŒjŒæ,ŻĒ³-z]q·ī;zQš#ʧ9-lø$+’ŌRŹH)HČH8É Ÿø&¤^Ž¢-»Ī„µō;‘Ū‚ÆNuL•æIK„iZÓÉ?Ė*WĢ‘ńĄūeŹ‹“wkÖmŻ»[ŅąUA»~rcƟü×ĖźiimÕc¦ĀB‚RŠ +ź¼ŪĖFĒ)qn%ÅQ„Vj“Õ9(­M„O;ŪnŗJÖNU„Œ‡¤;ÆģĶף*žéīCųģč®*“EFZbœģ…Ø“ŲHĮR’§ Š| Ž˜ī­‡¶ūid_×Kr*°\”Ė—---€—K)IŒšYÉ$«#Ę„ūjYūyźüY„Ń«ö…å=A~DdŗćHuKSięG"‚Æ=·ßZ€ī\Łžœ÷āįVŽTMeJgéér§™~3¬r*$œ‡y% žC®ČĪ[ė’÷ Ō+ūŽę©°Ģ>‚äōˆ‘³!ÆsŪČWNÆ9$Œ‡kĒŃņ¢Ļßė}i§¦4„TW%‚Ł)e¶“@u 䬒Jš v~>=$Ѥõ)mĄ§IœšQn;+ua#² 8żś×26ęӑV½lQK‹õ5¬Ń--®”7Ķō9cęÅ>śŽIIö'\ź•*`2ŅŪ Įx„pž)䢒…(䞏$ńĄé)żõģõ!ÖZe‰œG“Ƌ3bØøŅł%N4U޳šX$Ņ3Ķ’²^”·ö“ö„×3&M¬«égT&%ĀJ’]q ē€É¬Ž†ķĪåW¶»u. „TFėtśĢ—œūCƒqn©ÄøÓß/å©Å/ņ€3’:µ*żS×éMŻōj¢¢Ę’ū²Z¤”ĘX{Ų#łI øŁā0p„•_oµ?ŗ;»ø÷ƒ"Ķæé“ųUZ¤ÕFDv橵ISD „K >§+‘©<”}© %E–ų€œŲ ŒįīŻŚ+pö¢“o/TD¾é±ņ>s¢·”IAG`)9Ī~D~īdĶõ¹ģȖįŲó[…M™ÅćĄvAqM‚‚¢QÉ+„’1’œtN£»µæ;ƒ]ŚłŪsv[©[Ņ$„“U×l)öYXÉöԟÖTJ†1’04‹nZæÆŲ4¹éŚ„b߂ˆ“Y¬AöŪ‚†m²éIIQ-¤$‘×5…‘««²7އo=ōø)–ˆ_ؗ"Kk’ź‚R:# ¶‘‚Žš>ÄüŒ^śŻūnŻŪŖ¦Šm 9+ } ‰Ø×_PCӊ€KŠJJ{åŅ Ęxųā7z/„ʏźnš|‡*P‘O~B$*2›āĒyIĪRø’ šNuŃ l»[¶­Y¦„­p^JR‘’¢Pp×$ćV'ąQ%˜s)S ±mJL€„r•±ŽĮ}}šłP‹eÄS"EV¢Ü„¶“%¢%.XG'›#$€²~G¤Ÿ¾ŗµKŽ"S"Å „ Ė(l!** Ā@Ą'²<)Ń£F4hŃ£F4hŃ£F5õ.T-‡½ŸˆĒ¾é£Hl£ü‚…«ÆĀT£žšę­5uHԚĀTštWO\yJ”īX÷’įRROÉj čŽOX'O¶¬†}é ߋV–j—:bĮfG¼’ڣ߰ķź 8UŖ vO/ҶćšPląƒ‚„ ’źėD-MŽķi÷…NvRć,••”ZūHž’”å! œžś™Ļµ„øÕ•2-5٬I–¹Ž!AÅÄ šq¾NJĄ'%?„9ķ@é¦ē¬Ó§ZvÜvāŠbÅ„Åa©‘¢7ŸŖ”“©×r „e„$©h€z±=1njn›¦™Yoź­Sķ”Éq҇q%„‡>%HZ”®8Ć> ÖČŪ]×°÷ ”žÆ3"AGøb:’Óį?sĮX$ČČČ#:˾¹-Čó÷ÖӃOq˜“n8ģG–ūŒ•!<^(B•Dz>C#ŠĘŸlĶ͹=<Ōēķžź}mR˜ˆŽJ£ŌPš·HYœ(6¼ųQ%*dƒńŖ6jkūĶQ™REĄõ.žģē^ÆTąā–¢”y­I[ĆäĮWiŅ=̳mØ;¹RµhÆÅ¶©“ēVæć5 %÷¶Āź|uāß·Ė”Łö›¹ŪF¹tėŹ[.Qć6&g¾āTTįż2„%(J³Ć8ā’G“„“æR›§"{„\zŒģ$ÅK“t:ŅżĘŠŠ @ p@ *''·+ßw·ź›VM½[ÆT(u ±Ś1žĢt¾ė«hš Ņ”9’|q“„×6Ķn¬Kb”|ī-E3—dD­U=Åž,„)\Ō~$é:ŖķźõŻnÓ߬ŠĖļ%ö— ļÓ{̲ŅÖWōź*IöʈtØ2•~ēW/”6jCuč­F©„×KP“ )Ą)ęI''$«Ēām'³Ž·¾4Ž…ŃgV‹.Ż÷ų,Œń>ڰq‘’æ\‘”E2j­ĘDDŌt£‚y($I*偒1É'œƒŠĻ­!¹•Õ6œ„—eI„G-»ÅEn))>3ūō{ģ믌6–Xm””! ©EGc²{'÷:ūŃ£F4hŃ£F4hŃ£F5]zšyęv ōS~™j„øß¹œ + )?±§żu͹7tŌ&ÕcĻnž·YfR•¶ā~Ņ’ŽI¹#Ž2?5dzŖĄ”SnķŃØR$Ūt‘’ä“Ļ„§’ZŒ”äŸJśĒŖŽKĢŖD9O:}–ŠćĶ|…q Å •Š‰É$‚NsÕ§oķŚ©>§ģ«n›]‰q“üŖuIJŹVĪń*IÉIą’p~Äx.Ÿ]ń ŌoŪR›TZ×ČN©Ć²·ć1ī¶]ušµ%(QĮ)ŹrēYŽåM2ƒjZµ»VØŪ‹i&E—(Rä¶ó„Æ%Ą3żAćQ(Ōč5ūTpē Ō™)÷÷$)¶ŚIRWŵņö’9qó…tW jTŠ”Jv5ØBаYx<ŹÖ‡ ÉPå6óĒ'  Rz‚ķÕ&ķvū¦ j cĪ…-øŠ^bj_'R„,ōJ”V{Œõ޵bŻŖŻGļ’ćw2ęMÓI,6Ūl¾ZJ[R‰K”µ%@ŗ–—ŠWJPļ=æH±÷rś“÷ŗ¬ė†ą«9/ڊÕEia–#%ÄüŅBH JœŹ°‘‘ćó?ō£»v՝lŌhWć᪌š”¹NIq‚–]uu£å^źp óē9Œśøoeo6ó¶Æč-] °Æ©jsų€ā„ ž)#ćČĻķ”ž›¬NäVWF»ā&PLDŌk Œ:ü¦ŽŪ ŗ…å$”īJėä““ަ>®öZȶ6ö-ßeŅ@ŖŅę¶2éY$ł9B€P#÷|Œļæ·}FåøØpęÜu ’aS[Quēā„•$œ‚xlćģT¬yɏ\ÕėŠRŃpLøju “¢ńŖE–V„FOņŅ•q„,88ćā„–.åW­½¢ÆŁŌŠm5iŗ=Ę^–ókT©>č-œŸs ?­)ųœ¢qēSæöyBęØHšČ·Üęš č—šĄļ®š|gĒo}j¼śQ¬’č’šÕ®OYŃY™Y ĒŖŌWķL6ūĮ¾~ĀIoÜXNO:ĒŪR„M¦U7tō}tH•(±i1„—üØČ|RI(䅏źJpŸuŌķ4hŃ£_.„JmIBŹA@R=ėėF4hŃ£F4hŃŖĆÕo’s½é’ąó’ł§\įŠūu >%TĶ<ÓĪ.œōv‡ŌÉu×J’ą©Ä„ƒĆō€y`“Ń“7†–ķ·66ĪÉn52Øź\®×T·?Žę–ZŗNBžŠ‡`vk:ót·¬ŹUQČ”©P˜‰K( —Zm”ēœ(©HP HĻ›ĒŠ="egwQVx6¦hT· œ÷„ņp5“ćō-i ĪAč5åW©ĘŻY(™>”Lb€*)Ї5-“8s+J¹%j,¬…$‚ ÓŲŹIˆ]öeCl7n‹ŽŲf·DŽ“)żš±:;hĀŽG†}µ,…žü³ŁŌ¦ėõ3vŊšE†š™BŒ…³ F=Ē[BT’T¦ČŌ²1Ä~•AļMP7–üøöŚ}·s]3Ŗ“ēsß~< ä–PĒ“ėj÷0”)\‰p‚¤šėĪ5iIƒ_›O¢Ug9HØCn®ŅiĪ8•8ņV”„N{X  ā°R}“øGź -ŚŹ¬k†R֕F’ōv“(ʐ—%"<”¶źŌ””²Jø7+ž"ӂ¦U‚0”§Ė§ŌżZ2jÆJ½.Bg©Ø Fā„;…r |JŠxaYå÷§&­­Ė¹§ÅzŲ­ī$ėz<$½6LéĻÅh”­KsƒŠQ HH tTMū'¶ĻļŻU§Ćŗj0#mK›-N$¶ą™!X+tøWÉyĮ(s9å«r”č¢š—ćĮæå­ņ‘ģżM9)#$A\’œØä'ĻļQTé;“±Ū„^†Š“ mb !ŁĻśų’$$(®gš•HˆAŗ;Ė|n¤V^«Di˜ŹöŲ„EJ›B–¦ŹKÄ`ņW}¬'¼žÕmĶÆµ5…3Wæ÷4Ö`8Ū2 1 j~I±Ķ£„`-%EIĮ8W›éŪ³Ņ6:£Ć°ŃQm‚ĆjtAäT‡BŠŻX$O.ĘFpsˆĘānĘŌ6ę±:‡“ŽArLgįŅźĶDސĢŌ²„¤ž äŽ%H!DwŒŒēJ’ŁĶ ŗī™Ń#Ji–iĢ6’¼čP q|‘Ä`mjĪ?ģ Śŗ5Ż6žl®–#Źn#ĪQ„„·Üż-(²°`{×,Ø4g"ĖlµVK,<ņ⬢+ː“¶ß,t¢*ČėCģt’Vƒ6…¼«¶\ĶMŚY0’b³ģ.bXq¶‚ IŹy†<žJüœėŖZ4hŃ£F4hŃ£F4hŃ£FVž© ÓżŽe–>ˆ{ūˆĪ3Öq¬QéznĻŻĆqŖ?ųzɀķO  p4ö['”ĢåYģzļ‡]wuNó™V¹g0ÄśšØHv*n3ÆP’BPŚ\(Oå+čõ†‹¾é›S­ eø.BS>Ņ82¬ą#’‚p+V<ėWze§Æn½!Ż÷ńiK©³*K[i*e ¬ć®ajė+YVijīKŽ{”Ś Mb¦Ü¶”#”|š!!j<ӌ(į\€Ē/9é̚­Rå§Ā¦ČB$"_Ņ0ć‹ b8XN§ ƒē$tŸ¹#!ש\Oŗ‹vJŗø4ęēNa˜) Łs¼äį]xŹø’34"|xģČžōĮ*c„IKŖöĀB‚Ą$*+P § (g=;ÖŪ¬S«°Ib56 ć æ,'̉ <i¾c*ēĄ ń'#—Xé#Dl?„źåĆ1›«sZf Gc „·„”a\żąČWÖ~$t”±›OjNn}ʧ"Z—Ÿē Œ}ĄpØū€5õkøķŁ–R-Zk æWø#¾ŹėłQŁ/¬ — „ī£ūi„=¾6nŽ·U©ĮDZõq(‘-¤¶Xd 0Ē€JåŠ%EDäźąÕź{`iŪ³Jl†©·¬vYĢ’åŁéĘ3ʚļÜćń§ś™ŁäŅØˆ¤²uŸ”x:ŒØ$e%?|ä~Żėā›ź{eę3ī¹t¹Š%Ayc$e?‘F éhõ!²Åµ:/xå !*WŅæ€Np3Ć#¤}Ql¤h̼.Å?ī( ĀyJFFr”Ē 5ńÕ6Ź<ÓĪŠ]oŚlÆŠą¼ üüSńģõ’Q„cŌĪɘĮ’ń«#( öĢG¹Ž¼c‡'sÕŹ ćüX„v”ń„ńš Ÿņżó‘ū”ŸT[.äV¤ęÊ)(\‚‘‚Ėćל’m{ŸS[&8’ē£G؏u“Žžo¾æQźcdŌ¤ń«)ä Ɋ÷X `ü>ł×Ėž¦¶Q§YoüfŪžźŠy"#Ä#¬å_†½æļ'²żE’ٟ’ä׏żKlšTž7Ž®JĘDWśčœŸ‡ŽæėÆÆūÉ쟒gQög’ł5ōŸR;(P„‹īŒ‚ĆĄ÷ų;×ĻżäöO’³Øæū3’üšśkŌŽŹ8ā[M÷ S$wł%ßB}H좐„ ī2rĆĄ’ įßśkŚg؍˜Šė¹~ÓV[)“—ČĮJH?¾<zSMß͜Ø7ĶĮ¢¶2F$:Y=cģ°õ ~{ǃ©d{ÖĻ‘Fj²ĶÓE]5Õ7+ė›ö”¢9ņĪ3ŽńēP›ĒŌ6ŃŚå)›vǘ„8¦±OB¤„©?Ø ‚:ČĪ{gT~¤mĶĆ“„mõ„RcKšČz©+ “¶Š¾]'µČ äć zÖ“k÷iw §EŠäÉ×±šōv Ž)–Öµ)#ˆĪ²Ń8ń×Ü3VžŠm±C,UeUZжćĀ@Bڐ…-¶Š°FąäNżēžČX·}ļ¹6ż›:×b›pBb=!1£Ę,:Cių­ą²G œ£Ž†·©WmūŅåZŽrCQ›]54Č-„8/:@ œ)D’}dŪ}7Slģj}*‰@„3Jž—dĀ—&Üuō—‚¢āTŹT’œ‘Œj­jOÖŁ¦Qž‘XnZ™aø«År8¹É,©$ž¼ō“לiK/r·*ŹŽµŚ¾œ£Ó‚#6ėZ¦IJŌBJČ*ķJOÜN5Ü Ųz’C–½»³ōZ]óZZ¢K•°ō²1‡@O¶8ņ@’„¬÷…jüōæé¾Ż­‹ŖéJ&]<0ŪaĄć0ņ0xž#+?Ÿ·€Odč­!ø*ŠhT)ÕŖ“Į˜Pc®CīéBI?ņĘoWwļŌCrīä{”²–ā¾°ćaĮȵ%éGóÖsĖ:Ūŗ4iŠš³ķkĀaÜō }Y”gŪ˜JĖy%$ö“ūP…éÄr•P™lŌk4·ž”¤0]Cģž ž±ČR !Dć ~5Žvę%“UŽō źģ•oĎ÷½E¤}K)iā°V)‚:9qŽõo^Ń6eRć”;ź³Su˜Ē‚Š–żš„/ŪK”°[t—3śĒč XæģÖ r—zČT57üČL‡ĄqKĒŽżC–IÉČR|c½£M7™JlśŅ”@H§¾I>ņÕ®DF3[mŗ‹!ŻBC” Y*Zė²xØ÷ž‡ąkDÕģ·¬*eŲķĒ2ķ»«1ģ*1ą€dø€R§V“…’Œc²5Ų]ƕ¼kpYuŹ@¢GŪ ÄēSį“”-øy…„jąTHä>K 'Ā‘ķŒÕßi\ōĒ.Vh*§ÓÕQB„ŌĒR’¶Ģ…2¦Ž0FVœŒ i.Ōķ&į_ŃĖŌ M—c2 Sdńi V•µØ£$‚”’?^;JŹ£]µŠķQ®šµ-mĘbHЉ “,-Iujųš ޾A_·mwM U›U©[׍Zn)2šR^ 1½Å%Årm…œ8å?«=`jN­ŗ‹lUāČŻŗÉI¦:Ÿ©„E k  ųńH$¤’{>OPč6e^äÆW\±iõ –ŸLp½ļ5AJhØń*i ńČ <||Hm{¢ ›14Óźõ†e© f£%°ģe¤a%Ō‡yvJHłgķ©4jÅ­’ā ī=ŃJ+%lĘU»ÉLwŠ*Æc’/šÖm¬4śÓźcyky柔8æų‹ x%\ʉ9$Œ}““X^VŻ ¼Õ6Ū»¤Ü阅_n–a‚ś—Ű9œg£ś@!Xš2—ü5 ™5Ҕȹ_RSõQ"%D©įóS* # RA# ¬cNVŽŻV/[¾-°Ū,©ԪIo—øGl”Ē®(<Še$“’?šŽ-øŖmÕR·&®ļ£C)S¾ņ hIĮ {jI=€zĻz‰1L„‰Oµ6w²äw“ÖŌ…ŗ¤ŸŃHdōć½|F¢T%¼ėP ŖYāūˆ,ž@%”•ŗGēˆó‚ßIĖM) ”—›äĮX))_%JŪōƒäł?¶'ęSbUeȄÜ'–\Kl<ŃR4įV¦ĆXu×c7U¦("£š“ūČ÷zČČc(ąFIV“@… µ·P4•ÅSŅ9B1Ü)āė«A I䐄œ(``/¼1ÄK,¦B„FSéö0…6¾›Z€)$õė’Ķ©5‹f\w«qé6µµ"Æ1nŗņRRÉ)IO7  ¬Œćõ=kFŪ~‹jŽĄCWNįE„I|Ň¼–”¬œ©I‘ĖÓūj°³ö¶’ōköł5ŲRmŪ"Pn!› ūugXāŃP8” ‰÷AĄĪu£R7UmŻĮ²mśŒźy©”öY†\*A‹`|¼ćŠpz:ŽQ*ŽP.H”ćė ø\iöß-Č)Ģ€Gń8='ģIÖĘō/iĪø*•Ķåŗ‰•Vžź£ĆQĄ+#/9€I$'8ž•j¹õnd_{Łr?o¾Ȧ"D’®}KaN„H CM«)å ),ŸÉ«|īu: ­*}į:™K§ŹXnz^3­]ʦL¶®UPźPj•9j“I”×HR\J’’JĒÉe\Ō~\‡śŚ7_ؽŻÜ uvå½vź8Š—"'æ•%*JRO4‚RŸ=wékbéūgK]ĮUŽŅīz›i[ˆ) M9 śvŌI$ŒįKĻĖ7žfļ_—Ź(cŠgß.WŽm+Yh”Jņ„!8뢯8Ɵ6ā}d­m¶ŪNrM~āXś¦™XäÓŖO'ŸX?"”ŸˆėĀ<Ž:½tjøŽ=ē²ö·é£×ž•.§(sb› ģ…£$sĮ ō{$gĮÓ6ŁzŠŪ‹ÓڈżAVķY|GŠUpŹ”Hž…ŸŠ†r>ĒÆWŗ^ 6×oVĢz\Ō&>‚ćq©Į/+ˆ8É9 OyĘOx:Ą»œīŚV~©d;_¦JŸP÷¤ÓjM¶#ÄoЉR\I%%|F2Gy³w Ӆnףzßž7§Vé­%ŗŠÄu’09ī%JV2rŽšIžŚ¶æŁŹ¶±nµFaL3üYRł«ŠżJĄÉżĄöÕ5]z™}1ööqRŠ !äsm<‰ä8ńĒįYāOŲ(s‡9Ę\/ÄRb”HLY)Ė”üJ~ź ųČä ļérŻ¢^įlQk‹Pī:ėˆ.)>łm²“69§æŲtŚ‘J¦Qāˆ”štHĮϵ”¶Œ’d€5„=]1mŻ»¶Ķ§µVŗęUć…¦øå•qyŅąŹŚ¤«Nź ńŌzĻŻżŠ°­ēöŹC_EOe·#ńDÓ""–² KŠĀT ÕĖ”rq«}8ķõƒfķœKʉMv„SzƽU~?)RpIW¶2p•pŹBOČrs¬Ć·»__Żėop÷zź«Éˆ“Ē’üRŅžOHJÅ$y %R]ކµ£ūĶ[‡±[­{S%ÓTŖ\°ęļ%“§X>IB“œē$÷Õ¾Ģ@ōßźß»lFžšTާ'ŅÆå”ńq)ĄP §š q×ZvõļbÓiļŪŪ„F@¦Ź•-1j.2æiK%<›w#$(ØOéüw@īRĄrŲ¢Ņm»\Z¹ˆ….¦õUO{ü²2OC*ä@ē¾¼f5“~“/*m z…’Q“n„)øŌÕ{‰k§šŅ°I21Ŗ—v³ql7ÓsīEA»®µ=<Ć=×VۊBŌŚ°¬¬«c¢:ČŌźt9Y«7±ž ŻDč.6Ń”\ «ł­)HžKˆpJŅBBˆ=ō¬÷† „ŗ­­¬õ5>ŻjT:ķ»6`„7V’Ą.“pŚ’£ąńJ±Ń xčN؍ī»/Ūžņ^Ńm|ytŹ€CoUīR[j# ńmGõ(…£%9#$ņCžŪķ^Żģ·6āP ™+T«³r·ŌņYå²FOYÉÕW֕®ķš˜NŪSŲ¶IR H«“Łž•ū@~ŸČÉ?ūµ¦ķŗŻ*ć¢E­Qfµ6¤siÖĻD}Į°AčƒŲ ƒŽ²§Ŗ_NÕG­]Ūf=ØÓ“[”µ”żAB¹rkFIYo8% €HdŖ­Eę)kÕĮ\ŗ²JgEDSĪ:r\R09(+<²~6ėŠįE•P‰7ŲŖFl8Į}”‚~#ł—k9#HūœiĀ»/ųd‰Ė„Ī„Ś$Hbc-A#ŠT¤Øńć•į( ZxņĻĢgĄ)¹(€"¹¤,{Č)@*$,£*>@ČPĒ]ćöŌ×hŖm#p »i[k©×”0ä8l’.),ƚ–pT·@RņHČȾīŚ»±;g&ÆqVÜØīÅL !nSRņŠŸSI%A.(s'µtœułčÜĀŪķ‰ÜŽ’‚ćČ&,d©Ÿå$޾ĖqŌŽ>?lj‹“č-Ž’h4ūZ­SÖeÉr ‡YO²×Čń>éĮķŬö1Œi ­‹WŅĘÜ;M¢<š¾ć\ǁī4’8©ĘĄ³Å?Ō¬gā°Ü† ‹n~1ņ!_lœõć ʵoŹu”w)ńäF§ Ššn|OåŖ;ČĘ„Å$’”ÖRGG¬¬oź×⺩ہ]žJ’éKsžœcōō”’~^Ū'ķX4ż˜ßū²O®Ć¬›š(&JQž%÷O@rp®'ģrY­U{mŽ–ŒµR/“i²ƒ…A‡ŽR½Ä‚’y­ІGē³ŲÖ¦’fŪLŻšŒ¶ā\nšņ]H? ”#)ļüŖ O łÖĮŃØ®ńF36’š† ~…5° Ā<°±śCūž†¹`[,n×H£™”Ūu—Ü93qD)D8æx„JņR‚`g3«Š«é¶Ļ§ĶÅŌ „×y¬T‚µ§–ƓĆČĪ®ü鶝é×cź²SŸæd»‚¤²Üø« }ńóŌ_Ō¢ęĻ]öbģZÕmč1`}{Ž’] ’^P÷AćķAi8HģŸ ™e|=AŁ6»W%ŁM…\”ĖRDGŖ-"3ņ`æ–Ź r'ІSĒ£VŪŹW¶ż.<§­I Rčł2Żj ŌZ@ åõ©Ccī 0IÕÆé“Ō]«cmeڹØ×bøėk«¢8v758T×}$ųž¾śœn÷«+"Žæ#oꆄpĖĖQäU„1ūĀp(RF;hōfZ·¦ē×+7…M³pF©½;ü4b©¶Ō I>ČBP觟:ŗ}Woż;n(’mĖnc2o JPB„Øę,v9ćP ų8iśp„UéIUjmq56„Ł«ažko’ ތ¢æ¼P±ł!dyÆ%Ņé )ē‰HŖ».’d”¦[%mÉIä>€ž,(g!('¢pŁDb±w\4KtĶ—)Ł/³O†—.{ak JR ĄØō0;:ėU§FnŚōŗSɊtF¢”\qČ!!9ĒŪ8ĻśéĻ_.ó-Ø6¤„xŪ2¤§'õó‘˜iūN¹ż.[wżŒÓrīšg»"sIO#4%å4RN96ÜlmÅŌ„/n® ćU:U†«R=µ(“YJ¹% …ų t€ :#æ i«K֓ø[ónXŖ±i¶­`fd÷T¤“V„¾¢p:@A@9Ą!]Žń²lÉvmNŚf©.‘P£³ŠÜ7Póa®8JN ėŲéT+b܅o&Ž‹A¦³GH ALd{œžŒcĻ~<ė Ō¶v߅YŽ+2«< å>"īfHqKJ 6µ¬¶#%Hā‚$Ÿ·z[ÓNšZמÖÓ\•2E©ĀČņJV:J’GÅc~äŽń`­ĘŖŪ’öŻ[ØÓ©ŃCEyN¦+d-+ižA$’8ÆćĒc um²„©>k÷TŽņś¶ö¾’nÕ«PŖ“€†Ü©2bq>ĄZŠ@ā¬gĄļ?ŌœvėŌnŌ_…½ü2{§Š"Uö£œ`+%ŸĄV{žś©=kmŗĆ4 „§%»V«Ø»ĮAØó–”°„÷pBp>EÅg²5£6vėrųŚūzė}„°żJ}“§ Kæ„|A'ćČwć–jŗõ'n·sl×1rZ¦½":ßJO¶¶ÓĻ)Qż$„‘ž¼ž5Œöv÷ĶŪĒ-Żŗ²éµ¹&B¤É’Ō_u ²C”²2Oœ`ēQ[ĆwVēŒģ*­óQŒ•#‰fžĀc!Jė„©1ääÓ×·u}ÆŻµŪtČ渚ŻLŹSļšp¾ŲŹ’¼ń®$)'¬§¼õÆ»„VóvµZ§s&5Zžø=Š„)Æ7ōŠXZCŽPŠ\)%>ŁNSŽYĪ5!Ś;‚’ōž`]µˆµŌjÓ!Ų”§FY© ”rW ”“”aIQ8Œ\ž¬ć%š=§źmj*¤Īƒ2&²É q—Ū>Ū‹OéAČ9 Hū e:“0ĶB$×jsėµŖ¤iMCšž)uĄāP¤ø„’éż.rā1öÉkŖA~ ”ÉENžĖ­8䶒°ŪN¤ńĄł`÷Œ„ž»ü~©'ųs ŗäE%ę I-ņ÷# +‚J°²złŸ=Yž’ēŪtPv¢ŖįPė«‹ÖŅ“{2–„!•VrķĢg“ė¦:†^Ū«·vc„‹’ī„Į’ōåŽo`ų>Śr¬¦³>żś©§\¶äūOnS%‘5§ė2YöŚ)*p6Ž9炬uöĪF³~ÖŲ· ’Q„Ū“ˆł‰6ØŪRä{)•qQÉQł/ˆ’*ŗčtžĆµhöM„O¶(1żˆ ¶9,żÖ¢<؜’'TFÓŅZ¶½inE1öĖb·KMN(쇷\9?ųŌ”Ų¶²³{qq\—…ķjP"Ē~} —‹yɆŪä`“Ä‚— łļ$ØŁ=Ń~Įś»jņµ™®YOĢm5:\¶9Ŗ;É{„ƄÆ#*I8ųźWźCj­m&w‡lŖ,.Ń«:Ūr ”®F#‹QÉGłRBJ $ą 'égvę\Ōf,Ė闩W”[j[JiuĄa/$+Źŗ!@~3÷ 5z°ŲwnŽ6 a7pŌĈ®$9| Uż.§z#¬:¦żīa±/I{_s!ęVžZkÜ &Ä ųČćׅ%?’D×ić¹¶¾øī;"[T[Ž;’c°‘†Į-ż@łT©4Ÿq!Y%|^O#Ÿża’=nķˆļ_±’cwÆŌūžĒų~w¹ķć—§^qž³s mmĖŚó™2Ō²ā99ēŪäFC·É å¹,ń¾_}X±ökŌØ–%Rč÷BŲž_šź*oā£Ž-¹‘×/¶2qäéɽÄõ9·k:®«Ø°Śø-ŗÄ%<ĀĻXDg‡|Ō"Nēī=sv&ß1™ęšŪqTš\uĒoŪJO"žA?nłxó©w¦«„īÅNī¶.yõ*m^2ćMK…¾KŹZ_KX<0;9ē¼cZ ėōŸœüZ®Ó]UKRŖĖs.ŹZŚRR{VGĖ–pqž9ĻC=e‹ŚžŻ©Ŗ”«Ŗö«ø)nŖ*3Ėn”Š…wNsŲåŸČ:ӦʮķbĪŻwļiÕ6eBv=Z4ą§\q K±Õ+'ŃIų/cŃ5ŗØÓ[•yŌRµHuP‹1[āÓdĢü–F;Ā€üc$ė-nęŽ?iļ­¼¤Ōø&2ģx¬¹ģ{KuĒAJy’<ćZ«ÓūÜ,ݐ¶krhź…V†ƒ 4²8¬­“ü[uĒé,Īu©[ŸÉJŠÜŲːƒ…4—RVąŒēYs×ÜkxR`L…ĮŪø c6Ź\/S›Xqjx`””+B0r<Øv Õ?ź~åŪ ¦Ė³§ZVõ"Ė1±:“Õ-“„Q›-ä¶ā’ž%D’{HGc½zģµ6ūŻśĶ"Č©*MbĘ£²ÓOŹp¢Jµ”.8Ų>įĮ@Ąäp•‚Nž„SįR©‘i”ŲĶŅ”±†ĘŪi% ~i%Ū[mZÕK†kn¹›ŁN”¤åjJT@“`Tś“Ü īŪ^–õ^$šĀ«)S1f$!± §2—ĀQóŹT32uŪ;p¶Nl‚“ CjO„©Ńf£ŁD²Ņ– e+a 80¼`(‘’AqZõ7kŌ]’åWa­³Żpŗü‡]mŠćųĮp’$ņńžo¾’§Ōå!“<³Hj\§œ—é=ÄžÆ%ē—"SƒŁĆ5“N“¾»—\®Ķ…O¶­KF©S‹„¶Ź#¶y{\€–¼8y«Į+PĘ¢[ÉøuKž»øŌר¶å tjTt|`õńIüø¢ŽĻŸ^5C5ŠMf-B˜ŌźlōHē Z„¦–€•Œ”ŁČV>Ēń«[q7ž’Ż{f™e¼ˆu© P‘īĘ„‘1×}±É“„r#’ŅJByœątnļJ^™“M_ųĒsč­*”ĶÓin«)c¬óu®Y#9Ę;ĘæŚ øóę‡eRCõŗDŃ6B›@)Š}±Į³‘ŒØ,+8ā3ēIėõŠõ·č ŗ-ål„Ł)ƒLeåquČžź\IP#)HHPĮĮĄO€F²¬¦ˆ„.,·'Oö\aĒz+J¹s)N,¬ČˆĮÉćäE^|$!n8ģt©8SŽ€x NÉ~ÆŹÕ„Eö[«A‘ é ”ęā0ŁæłącópF¬oLĪŁ÷‚%f啕L¢Ņŗ¤U8TėŃžm6T;Ļõ`~¢1ŲՇŗ7ęėo5×:™oV£Q©Pb9-TÖźF¦’ŪŽ/©E<ßĀ9¤”ø:ͱ^$¶īščØqžĘ|ƒöČüéĮ’učTž”ZIBDd¶=ĀW¶RÉŹl(Œē ž»ČÖ_ģīµčÕÖ.ꌄI®Ó1!ĒqĄLfŌŲäąNs•r(É@=6nš%Ū4 WL+¦E*2ėpY[¦ńĆØm©9Gg£œdćÉŌ^榋z±»MĖD‰“śå-%µŖ2ĄD¶ų”„:9(ްH8ū #Ż}ŽŪŻŹ™•źkńēšTø{.øŽ\øÆ¢• ÷Ų'÷ÕcźZÓ“6ĖŅLŪ*—%ŲŠÜŁŗ—$>£)8@ų…($Ž“žŗČVåͲtǾ)Viõ\ʤæ$³=`p%ꗞ»?AĻ›óÓgŖź›3ąŚ{”č›÷RĆ„«‹Œē?ńŗłŒ”Ž];9ó„Ž­­Ŗ½źmÆØ¬²ÄZ½E…ŌGŵ-§Ś!Ņ q’…p;įžó©’2“Dõ¼«¾¦óńąŪ–“• «ą=· OŒī€3å]}õ˜·xīŲŗXrģ™"=øĢ¾lSį„?īķ“‚SœssŽ{Qóųžzšf’¢<„(Ŗ„DŪ$’ʻ릕ūēk”z5[z”š˜ŸÆWÖŪ®RÜdÖ¤\ĀŹ{Ąå’<=®lX5ŃfŽi©ŲuMŌĮ[ 8Ėjyų- AĄ?mN*ž¤wĮå>Ģ›Ņ\u«ŠV–ā2ҐROŒ žūǜ ųד{×½s"øØõĆ5M2§å%†ņhc+R‚zœąußzĆÜŪŅrEĖé©¢ŗ¾)śļ{-%*äŃ O~ 豏¾¾­Ķ;)w›÷“lČõĪ+ź–€ź¤`Ō))>p”Đ3«–ĒŽ’RRn4ȵŠ•b9v:|&Y/3Ē’^a…ÆŸ|U‘ć.Vo¦KŚś’\»—Ź%rcŽ?OR\Bƒ’‹Š[ŠSmä{düAļóŪK’~öfĀ£Hz„ŹlłSLX1źķ!ŸęøV³ƒÉ.!$ņW%|zŌņ—ėļŖLz‹ m Š¹K‰m.TT„¶“’śĄ¤§r9 žŗĪ©#mnĪÅǽ•ātµÓT™Ź©>Kjrgŗ„³œ)Ź@Ęxą ż“Ćø›„^¾L •Uö«Q”˜Rź 1ķȞŽ@„Nń*HB~C‰ļńŒ4QŖśTŖµY©óŸBM6SrĆī…(”œÄņ'ĪBFpNe4ŖŻ 5 •ÕJ„I÷(ɋRrDóžóļ”|ņ²•Ø„-QӀų(ż³ØķƒS‹D©ŅjҢǩ} I™r©ĪGł.3 KŸØŽ$,)`ƒœ„Œżµ²wCÕm•nŠZgnćG©Ō'D2Pµ6ZŽĀČ%a#*t}ÓŠčeC#PI~±ļ8”6Ū]§@‘Wx-d°ėŽÜTéq'ŸÅĀG!€ŌĪĻŪ­āŽ 뛽u*“n§„˜“Š;ČśŗĮQAR@ų…|ŠĻda98gŗ6+u6–µQøv¼ā©²žORœą·…0ą)tTżYPóēQŌzµÜKuMRwn"=!8RŅūNCqC …pXPėķ€>ßź¶W«ū)ŲĪ·’d 8V‚ž.<ÉJ²<+ł~?:­wƒŌt½Ą²¦[ģ 4 ©Š÷^.%CŠ‚RŚ@=ēķ©ż ]芮§SZj-Vöy—Ŗo„Ī/:Ź’§€čœ¤ 6‚”,#‹iä·q]%)wūė5R}n]ˆyÕTģŠ<–28ˆŅiHū“Č·Ųj¾Ż{¢źõ1»ŃcŚ4YKmˆHnŗ”ū(\Y*ćśŌG.²Ž²1«B?£hTŖķįøKb4ź‘-0!†’‚\HZÕųČéöÕ±_#uę\‘£”l*‘BrLe2¤”.J!¤9Ė=(sÉńäimÆyW7.¹µ›UdĖj‘QDOt¼C’cøūją£Ń F~ūhĻöČ¦Ū¶ n&‘U»¦4ÕBR’T·#Åi@Q?ķœ ŁņNr»ū¢§ö®=€õ—k­ˆĶ) T¾•_XŚŌē58åś@õŒ cSBĪ—½FQŌź”\L9(F (ĻĒżsŽŗ;£U¬W%µéĀķ0ŪSŠS %`pŁy°£ßąg\åŪ[Ŗe‘~Ń®ČKS%%ļm^O… ž9$ØgķkŪĖÕnĢT ©sn$Ü F\eS`FS„w’²¢ŸĮ8:7źŅĒTa ½’‚XCKl2—™ā#ęž>Ī8;05Øś˜·W¦Ÿ±/œ-ųørqń §#ūŽó¤Mś2!3æ³[}*‚āŌ•3˜¦9)=ž %@(sąWŪ:rŽ=×£ßqi3- BæjßVš ˜r#mG‚ŚV ’G‘ƒž?”ö¬ķõƒLر‹¹R 6ŠŒźu¹ š94Œ­+'ü ‚O„éÕoØ["ļ³é“k>:®ĶUcKžģØ Dp”(3—PRųż‡i ņ5OQ.'-JU‹pŲ”éw ‰I GuiKęŲZÄüyß“œ€Cžüś•ØīÅ£Ó4TP ©ä=Sq·‹źyIķ!# ĀAļ$žĘ;G·;ɶöęÜSķZÖĶS.)L)J“>Kūµ+£ķ29·¼["ŽüĻOT³#ŚG¹ģT—œį1÷>{ńŸP}÷»ģ+Ęā…'o­ē­x)¦· ŲžÓl”ĒŹW'8(‚8”vsŚF|gP”DT”R*UGxRa‡;d6PVœaJ%ÄØ$|ˆą)DŖ™Ž–©ŅƒŠ÷¼æāhCŹJ‚Å?:%GIPY¤ēHŁ}ēk.šĄT†ź\˜ŠYB\ĮĪP0ņżDy=ē82m³½÷2ÜÆĀ£ķķĖX3pĒbu{¬8ā•Œ%„å ČĮÉHĒśgZzƒź‚ż“ß4ŅŪ¹nJb*$ŗüFŠÉ\–_AЇVė-¬ µ¤ ”¬§¾†Nń©z٨ڵj„"L‰töĆr݈ś€lŗŁ ˆQOA]c° ļ“vE®åŃ{Ó-tÕ ÓWQ{Łfd¤1’N3…ėŹ†“dÆFWģ—ŌrŲd%†›÷óŹę¤€ ’c@ żĪJ/[ū}q\=ÜeʤŠä?TęŌŚÖ¦˜*Kn­dóhq(%'ˆOcĄz8Ü9›øŠ)uŗļšŪN°…&Z&Ø„–Ÿ-óiĮČo!Må_¤„c$ąct+qlE~“/kutŲėąģ¤TšSh^2TŽDxO“¬źź¦ļ>’Ē„YĘvŸ5čŃY•7’óÉINB”94ßĖNˆäA8!@ōƒ»A)M¶½'’(ŸŸßƇ~3žš[Dō©¼“‰iFøhtśš ’ƒ¬ćOv•¤¤3ń#÷ŅMŌŁ½ļµ6Ś„\»ļ”Č£EKćƊ%xżµmz³ęČŲ ĀDz„wz$t„8r:ŠŅŪĖ«ą•‚އ}ņ×¾Äm5µ°Åūėvn zļ°ā`°•¤„–‘Ķm'N:R;ą2>J޳ēŖ}݉»;L6ä·mRŠˆ’€—œJˆ.øAĪO@²Są“§Kóq6:>ŻækmöŚ9üAŅŹUTŖ­Ā„­+_Č(Æ*āSń㌜~5"’g5=R7гS°ÜZ*ŠRsœøóx#żē­÷£MwuĖkU-śƒm¹£ČĪ%iČĀŅFq׌ē¢ZåtZķJȑuŚłōj6 U[ŖŽf@eKöÜiDrIɛą… “”•+–2|›QßUōŹ?VīŠ[4Ē%.5”„ĪP¤’PŚr%żæŌ§{Ö4ēŸbCŪ_løōrK.-j*l‘‚RJr2:ėL×öūm}ócŹ¢Õ6v%.¦ļĢźs­ ²ļ ŁJ„`œūd”ŃPóŖ: ³" “d)-‰X“(„ńs®E'µp (ńĪ}Ă Jr×Ę"d»ĘCŠm-(³ŚÕörč~ł:sŸ+ųIʛІ©’œz\†–[ł( (Øż†:P*ĄļHéÕ‰ŌŁ‘gÓ]0gÄP[2ć’ŪØ `AĘ|g÷Ӆ×y\·M@O®ÕžšśZi WŒ¶×YQžź?“¤«HSU1!juŁå.-Ü#ŸøČؤ«*ČINII9Ę4Ż„K”ģvc©× ņ-“x$Ø¢p °38°ö÷z÷̳ęY“Iģ=Hš„•>÷2”ą+'#±’N2u·+5kV®Šż·4Ā™¶„­Ō6§µ'*ĀR• ć Sœg“įz¦ŽģČmø —y“R˜ä’G@` öóžŗ€³ø×3qžjµĘ\KÅź“)q*s‡ Iā0Ę×ķéW½÷K—EĮOØŌßyHi™­ÄRZm°„€ŹSĒ–F`­RŖ“G‘KÆŅfRŸG'B$D-¼®IČV NR1ųŹˆĻ$«O•T©?Qœā\“!en)-„ŸŁ)ģXÕUųJGõįĒ9©JVźRūĄ zĪįŽ· VŅhMן „EZM6Tµ.3‰+oŠŠä*' u‘‚;`‘"Br2ŖJuµp„ QJŌ¾ P9ĒyJsē“Ą:üLŁqéĪÓ[|†RXBĪ =>pGŪ¼łĶšģµ4§BŠß¶„¤aNvNT~ē¼gš½é5yTŠ“zµ,7lY ‘Šž~Ņ’r0{ĮģV„OS;ݧ’>y)A@K°ć«ŹHĪ}¼’3œēČūé Ėź w.;V]µX»ž‘fDŽ1ŚiĒF eHH<Ü}ņAčćU‚\q$”ø“’ž'ČńķÆPź× é’””4„;œaJ*āœgļŒd·ĖV„“· “čļNÜ:[u™ułlŖŁ”ė‘żĘųŌāTįma9¢rGFø£ŖDĒĖoU t *zIBRT €sŁĀyr x…qń%ÉT§#TCI甼¤‚ “”£‘ä¬xģąą¢“}¢ĖLÖØ4ėqg* >PA>RzĻüŗļW’„Ż’§ķvŁ]”’äĀLŹ#a²¤9!Hą¤, ŹP¬“ććT}ėw\·}Å"äø+ĢØK+ä²įžZU[Hž”`:ĒZ[wż™eķ F‡nQ©Ż·EÅ«TŖ-$3 •ü¦ äqß3‚Ē@ “[sż›Ö“‘ØW%ķ!*cȧÅĻ@„曇Ļy*@ń×ūć^hŃØŌŪś3ė%ŁÖūņJ‚‹®Sš*$+–IćŁä3żōķ ‰Fƒķż"om*J=˜ČG¬r x§?ž#ń„ÜSŒ`cūk÷ļńv$Gd"K±XqöФ!Å6 ’•cČ#ļųŌåŁ¬ø½£T±ØźS%Eµ°ĻÓØI=¶ROdžõ…é‹ecöå¢e¬Æš—"sėR~O>ü’Šiaōć²däŲ0ö‡’łō”O›0Ģ„ÉFßRJÖ_ø“| *)zĄėķ<9“;^ŗk“ßš ¼ˆŽ© q¶ą”E*䜔€|’łG‚uųvwjKilķÕ­Į$ØįtN3ż?°’–’ĻŲż”q^Ū«u-Æ,ĆK+čē„£ >ĒPÖ='ģĖ/”ŌŃŖ āNP¹ėRV ŲÖ:9ņ§ŅžĖ(’»~jÉ@@*©ßÕFC¼3ēĘ›Ž²lĒ›CoZT„¼p §4Bp®C»ļūėĻücż7Óƒ­ļk‡ĆYĒc§ń¦É›IµÓ%9*VŽŪ¼įŹÖŖcY'’µŌN»é›f+eŌž“[Œµ $µ ÷#³ŠĘCh! ’aē½x¹éwdÖĢv’ĀJO±’g>ę?Ģy÷Ÿ¾„ś\Ł0Y?į%Ÿia}Īē‚zWĻ±ßż¼dzUŁ7ZeæšĢ†ż¤ń䊃௼å_.μé7e Hé$y'²?üm7æč÷gÜi¤!ö”…•)hØ ¬dž'(#Šwœ’˜z5ŚqĢ&}ŠĘśĘNAė,äxóēžgQ¦żŚā \]ļWT<å­‡3Ē£Ļ8żX?§Ē_¾½ōGg›¼ėØgåš,“Uäc¼}†~ŻõćīłJōiµQ›kėg\sÜHŹ„”“¬‚ é(ČČóąœ`ą‡ Ē¤›7-f˜ą9÷cŌ¢zšCC~°zóØS¾ˆ­ÅTł7{U€@įōČSŖs'‘*ĪĘ01ē:ó¬z!”;9 ¤_UŃr9·"X,įAIåĒ_cē=87薬‚»ŗ¼¦½’’=¶‚½Ī`…gćƒxćÉ#>ōŸEV œr£rW¦2§(iæm®(<ø ąåI/¤ōĄYMōa¶1ź%łukŽdpļ4ĒT†Š8’‘JJ2øĮžŚŠ¶Ķ—mŠćQhŃSdqm’OåJ'µ(žÉ=“§-4hŃ£F4hŃ£F4hŃ£F4hŃ£F4hŃ£F4hŃ£F4k’ŁPK é€eAI’‰‰ “candide.htmlUT&֗Pux PK Õ:eJżAĻimages/UT±®»Xux PK :cJņ ČĒéĒ铁images/001_th.jpgUTR ¹Xux PK 0l5p—ÓTŽTŽ“"ģimages/002_th.jpgUTPŖVEux PKMĮŹcandide.zip000066400000000000000000006354641476025525100354460ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-originPKéøeAI’™s‰ candide.htmlUT &֗P)¬»Xux č褿{“ŪV’-Žž}”ļéÄŻ{‚*[Ė–ĖcEI–­ź¶#•[Żæ'N€ä& °ń(Š=ńūī7×ŹĢ ’åęōōhŗ«X$ģGī|¬\ė‡{?½uõ·ƳU·.³æ½üõņUv’įW_}~ņꫯ~ŗś)ū뛫·æfĪ¾Ī>uM1ė¾śźõ»ūwļdņŸū«®Ū|’ÕWŪķölūä¬n–_]}üź .õŸµ¶üąŁ¼›ß’ńī»w~ą—}Y—UūļG®ńčłóēśQ¼=Ė~X…|ž£~åėŠå>ó0ü½/nžżž«ŗźBÕ=¼ŚmĀżl¦æżūż.|é¾Ā5Īg«¼iC÷ļE[?üī»ož?|t?ūŹ/×]ģ—,»Z…ģCS’f]öK/š†f™…—u}Õ‹ģU^Ķ‹y˜dÓ]ö—ŗģņ¢ gv”ÆŅ+żŠv»2dÜ’ŻÉ¬mń0_żÆīżļW?]\]üļ,ū«Œė“¬g×uße’ė+—{ź6Ł®ófYT»zó}vöķ7a}žįJó²XVßgæ÷mW,v白oZw]½ö·žæf\hõh²z•a’ĻĆĖ»Ųš©yöŸ7”éŠY^śĄČCÄæOėłn|ĶG_’ĻŪļŒŸ-ÖĖģ?§u3 ę” Ł×›/白ŒK¦Æ'¶wččū,æ2żCüā³M¾ UæĪdždvūjVÆ×2«Y'k¼’%•E²EŻdEuS“FŸÉäC²ģ[®Č,ł\%㋲čvßg«b>ÕyvšF.ąŗ-ŗ¢–‘̧m]Ź^:?|“ęóĒ’óČß²‘¶Å?Ā÷Y»–µ)«ōšMéRęP¼ē’Åm<– 7ßßūŗĻī7’s½Œ¦ōl:µ‹’ēh~äF벘guģöŽŖßp䍯޹‹Ž¼ÆŁ{ŸŻį‘wNė/é;Ó÷Ȉ̱ŃåÉŌX؊į‹ņ ūi“mż3ĆžFD;ėˆqńĖóN³ż7铳{Śõ,ßš=œ’›¼)ņŖ³%šPžÖ¦ßšo°ÄüĶŪ C1­Ėyņ®E±nO§ÕĀń›õĻÕuWÕ]h³ńˆŸĶóv%¦ńQ2Ųžęøīķő%•.ņÆĻž'SÆwVęÓPbJ7Tf—śīé’~ļćƒW.śNvķ÷£az„‡xŽįVroäū».”%žü1ˆW$·ņSŽÉµŽÕ7g^öųŪIöų믟e’[ēįˆ‡żōń’Į'~Ķ«e/Ēć÷ŁėjYķŠß"s>ƒÉæYÖ¬ÖĆāņÓ{ó ń®’õæžWöéźāćUöžēģźĶå§ģĆĒ÷zżź*ūå·«×ļ^¾žų‹Ģūū÷Ī^]¼ūéņ§×™|B’'9ļgbGe%¼Zõ³ėģ—&‹Iö³œ[EÅĮžŌ‰ėĪ9Ęoļ9†wļüT`~§2†sLG½hŌmĶ®B¾Ę'!Åf9ߜU”¾—«õ+_®öū¼ø2o%Į¹ Wż‡Õ“ƚ¼jgņ]”yŠŹxŹØŹź‚æn~|?½)ź¾…—_/›|³‚IĶBÓŌrĻ«\Ö4„JÖZÓȂ‘{-Ŗ»wø*° Ļä9›,—?Æ7eK/ƒ/ r£Ų†ż qN’~’\½»’#@cY‰vy=ė±Ī~ų*’QžIž_$>×ā¤sŪžū}óŸ‰k£ĮŸīĶėģķūŸ^|—żzłņćÅĒæłĆ­žžČ9}}~’ńן|Ź^¾žt•a2?É{ž&_ńäGŸŻ—Ėžņž×«‹ĖÆķ:{ėŽÖżeōh'ś)–¼²m!įĒ4dĖ2—É®e—åxlø±IŚ»wly¼­e‹V²¦MŽģξń­26M)n¹W°Ēu÷޽#kLˆ~PW–¼ĘŶ7mH±ŽŌœ/ĆI.5Ųõ:Ūč=c¹u+¬µ¼Õy^ēsu§×b§²D'ķYöZģĪV%‡1‘ļ˜Źž³§]X×|¢Œ>y˜·X½yVÖŪl#,pÉ䕼ŚaCāAäÖgūssōwīļMžćoįśqiūŹ*Ö²õŪÆ¾žśŃŁļ›„Ģ Ā•¶™„łæŻŠ”QĀźöŽ×[’÷ūXOXŲUćÕ÷ȗ†,‡Gų?žńc~³ō÷ī’ųr'Œ¼ücŗ‚ŪGžžxłīźćūŸ~{uułž–ه7—æ^~E{uõś×_ć‚üaõĶ/ßæ»Ģä[åyżńņ—7W“ģņŻ«³¦ –=ŸŽ¼žų){÷śsö·÷’,’F?¾ń»²ńūń•ō\&Ł£ē¾Ć”%×Ńżsģ)źŖČž-_oĪeIŹÄė'/«Ł™=ųCSTjøę~« ü&Ęަ,’‹µ|x–æåt~”é«ņµ żyå’ŽÅż¬˜'æżųæ?,%R+žšżjY1§Ł…Ē£įŽó@“‡åœµrŠ…ģŃ·ß<ŸČé*+ß×D¶mą²Ž·3ģ>žÆ)ęŬ/ćž§V¶ģWŽé {Ūt‹# !¾®Ę£Ūŗ)ēķDßČ_†ż&óĢwr?āĶtēé6“m·wGršsرŖó|'ÄĘ_Š.șß_2Ś ^®ŁīEŻóŲ‘Ū,ŗ6+ó^fS¾m^ĖÉSdĖFv©„g>“2>Ć£ć6ń.™“łYö79FWņöy±XˆcQ8lČŲm彫į1ü¹ž¹¬Ļič¶X{Uމjgy³æ÷2G2 OVŹėĀG–Ē™·źõJ'”¬ķųB 9¦pӣƻ{ß÷÷^+­@Œ3 2E‹¼‘õÓ’å9į]‹1!OŌ„\ tf:rŁ[—b‡äQŠß–½ŖĖ+fZ`R’ł[Č)Jœ=ńw™¹­r{Ų%ö:\”Y1ĻÄ’1NVśOāNi,e«N0›¦¾Ńi _äĘl„ÜĻ<Č¢ŖÜŅõģb+ī+Ūšdū¶gą 72q\)² °²0ē<¹:›f'Į“8ał¬ ¶ūŪsĶqž”®÷V¬AgBG ›¹“ėąQs1ß:Z¾OÅ;ü{_ˆ;mśv„®†xg²CŖ`~‚¬ÄœV_®¾ˆ‰ ņm\(ö £Ė‹²ÜÖ5œ}:?r ą#鄪,{łāzÓ²œÖ»NŪõsD7~y[(w²ˆB(3ŗˆzu'÷äS$  {$żž +ŗR;#×Če‹µXnk‰Ügrēo ų*2j×2—]åø*B3ŃĻ.JY°ßh¾²‘Į³G»_%£ę÷<ƒŁļ7u%!ß$ ˜‘B^Śéƒ›ężą–°Ŗwļ”bq¬ō<5øCė’+qō;łUöÅgā¼o=Øā˜ß½3Å;{™ųĮtW‘`åÓļ䬄ͦĖ>ĖŽ)$Ęų ū&FN\£dO$‹aŌmkü“©±`š38÷łRN;›8D@²Õa¹$\‰V[*€oPVJfĖrWć²f._ØõGģœ‹wZWgwļ¼ ÉŚŻ”½]ŽÄ&ŌāVĖž”Į’!ź«E¾ó˜Ó*8Ņń“Ø2ܽsĀ·ö}¬ļƏ;Żk2Zņ—:—rgmĻsAlˆÜvřJIL†Ä½|‹©ÅUK‹äņV÷œķ-žl–›w ēw…õ÷+ެ\uøGöLNyX×rbßä¼č« ł ³e]!÷€G™ģF"‚ū,b³’•ĖŁn)ž5ņušnį™.µt­¬’ŖŪ=Dģ`[SŁ]ā?ĪõˆæČÓK@³ źõĖń{÷Ž/hœÅaYŪ\C‹9Ā¢Ö‡[‚\Ł]ŃjˆŸBnL6뢗°?‡s Ć"¾ę ²kØč(Ģ:ž ”|EÄsÉ6Eos">ӚI‚­qń%±Åņ -qńåĄ·«ąžŻÜ]'ŽÖ¦Ž„‰ķĜ~ŁJN{ž‘£’od|óŁJM#‡¦¬Z3Lš›õXy+÷˜?|%—Ć‹>će—Ć\Ąß“Ó«®$ęēc«“€™’ń“ ŸėÄÓw^óo¾`;®+1?‹‡6[ŃÄĄ'Äš† EtĖ䶙 Ęg`W'8å^®ŌÅč›k<Ą&oÄzȑ"VVVf ē®ÖnĶ7.zyņGŽ ×õZ–ļB ­;Ÿ˜k®ųz+ńf/”•?“U‹×Wp+ņkVĮru2±ĢOdžšĮOį3µŗ£eEČęźile`d-”źV|”B`[Wy3[q5Ā­Øp«ā¢† 'A²ć£Āšå0ŃŹ©Eɛµ?œNk[ĆŌĖ‚ģ4‚Ē™UĄyN’‚ļv -”§Ļ gfÉŅBWĆÜČāö ‰‚VĀT ßåNBeOQndēekY>mūFFøĘFĢ(ŗž+B\ō>‹®’£ū®7.Äq-—¬l“ŗ C³D&  ˾Ģåæ³` ¤jŽ33ŚŠ>vµ^©Ģ·ŗdśń:|.īĮń#ćb-å Ēź~(±ĻąnŠõ™×HØĮ§©QŲ1]Š÷ČĶcx±2*ī‰ÄŲ»4ź+ŦŹA#ĮłœUą•Ś¢ ‘ŃŁŪÄf¾Ån‘- Āro;ĖŹ Š¦•””ĪęYR®”4-CRš»zŻĮboY£‘•A—(Ķ7˜§\…­X2jņ\LXī½iņQ‡hāŠiĀĒÄõD2ø8”Ņš'– 9j±9‚łfŧ„««ų+·—9Ģfėłš/t‹Ōˆ™W/oÅSĘGæA×LÜrOĄÉŸÅ—”ćĮō }ƱQ«ß2NÄ%`xŸ‚.ꎆ ™ŲUq™ėa9µ!Ę 2‰|‹]F¢‘ŌÅÅ.F3ÄM)w{&öžijłTCK&cنę&Øw¹®yr[¼Q rÅČS±SŸR+{Ė]ńHkdh:s÷­ø7ø‚rö\J€ŗ šƒQē˜Ų-·7Źōhj®£|Q‹³­¦;2 žĮ9sT\¶9Šr«b”źyJFé-ąuā[µėóģOyÅļŽłĻŠ_“÷ŖŹW>üTOģ8Ķ—˜hX+5ÅĮös‰/4ĆØO€ļ­'C$³ÓēqWGn…Ɉŗœ[DÄsP#ļ* Ćį;sg„Q—"X‡²ź»o$°é81‡Ž·Xš4ūw÷Žķł ęōBÜśŗÄĶcUŅŌH9×g”›ÉšŽJ¶ ĮÜP e;Nčż£Ę1T"ÖćN²ÜcÓm÷æ\^{õžŻÕėwWŸXZ“Õzā]ģŻĘp·ßČP~ %ĶøÉ*˜ķßļ}_&“, ,ōļ÷Ÿźļr±—æ·żz7»æÅO¢ž”(kBščščÄW¤ėßpüųźĶŇ«×ųŖ›§…ß/϶÷Ŗ}ęĆÅ/ÆõO_É5o»ņåŁń‹¾©·CŌcŖ½ķp(!q!Ž÷²’-„÷µC\"Ÿ[éG$Ō t›$ž…[nsĄep.Ż’ń‘NĄ?½óŪnż3¶$b ­—łSh±nœ08ķž¾¹’ć7§ŽÓ)ćIŸ‚x&Mb19:¾1?›rKFosT›†‡’#ģ“{~’Ēē'Žū_Nøu­ć2i&–ķ­¦“‡ŹU¼iuü5 ˆщ“’Df’Éi·{ŪŻ^‰Ļ¤ū“*6[9ÉÆ'Łk W\‡ä‡Įü©žuuśV‡7’IŽ„q¤˜Ō)@²mwāć|'ó݉óG ‡ĒRŻtż²‡#Ąõ“Kܛ÷]!±JvŃÓåxøšĢ¼Õ™TgŒ“č’ĆH“ßĒżšīsžŁ3–Š ™ĀłiOśX&īń©÷‡{„Č4YZŸkq*qĘ^#ØO7ņČĪ8®@>4%Y< ~N½ļgrßĻN¾ļŪn1‘IJˆ?½ź«ĄŚČi7ńäėū?>łśÄMś×žßB²˜;MJĄ…©žŽmŃ!ä™Ā?…퉷+깉ŚĆ“ŽŚ›ŃI{ćķĶųœ=|šYcSnćɃę¶q‰»į“$q8’!АȸšP*Aćt›’8ē{ŌÕgīõzš7×t¶O41ON4½u Klt·§ŻĀÓĒ÷|śųŌ[ų£„~1æ”Óڃ[aéøØśS7ąS—§'ĖI§+¬˜ÄjĄĀ‡ĢÓUK¹2sqÖ'żDgą©xOO½ćSĪT…×ČĪÖZžįētg[³ķ-Ėāč’ļUF÷›SG÷”[½.Ü”ƒCČŒ£s䎞‹†ļ™ å³S‡ņÖņp5^mėģ ŁWō9yN/žR4„üŽßÖÕupģĮŃł k>HfĖ#¾o‚b4ż@>Ćb}*¾€W ÷4 '½e'Ž=\ÅG'ūŠpžŁĶ>ćK1ĒŲArØ¢¤Ø€›;õŽJŸģ(žÓć*=ŽC*Ą ^čf¼å^į!>:ŁE¼ż ;Ģ»üóŖ`½Sļš9īšäÓźÆgŁķ{G¦sVöķɑУgHń=;Lņ}ÅLjŅųrj2÷f”˽ńTīĶ‘Lī&“Ožŗ½ļ¾šŲ7žŅKōōėÆoķ%z|k/Ńć½^"ėõł·’ńäłł'ļüĆĘ¢’Ā#ļ?sņŠć§fSΐ7?ń+%—¤—~tlś'MP±“M6I‡Ó“ß¼’»$?_|Ź^~|’Ū/o®²ß>d—ﲋģķÅ/ļ.¾|õśŻ•¼ļÓÕÆÆ'ģrĀēŽš#wļ¼žė‡×æžśś'ōķ½{õś,6įń™.‘Ÿ1ļcv€¼ŻD“ĀŹ4«›7¬É”-—m°»P=¼’g׫‰įÉr”Ą€ī{½–‘aE(§PĶė­{¤,Õ³.£ˆļ–_±G%i¢‚CEWe˲^×ōĄ€Åś*‰¶īK{ˆ‰Ÿō4õæ÷ó%A'Š$,ˆ˜7L€Vś'vm#l€~ą$»ĢP­ «_þh0OyųäŽQ|Ģ+FµZ6lpŪ³€µu,ī±&ĶrńPĖēøŹŃŅ¢A¢QüQ.Ž|-·°BĮŠG ęѦPy›Ö͊ļāX³‚§”2ŸļŹ®ĄŠ5»Ą¦D¦ąÄN )óŻ;#3 ¤Ö’…”AT^ÖK–Ž;ŲRˆb‰ īV¬øčŲÕļ=zF“ks½Wžõ%†YŁo¾ÜČāi#.ŁDģP²VµŽŒĘ„Œ§Sp/įzĖ.źČŪĖŠÖŁ’]Ÿr‰r‚ś³Læ|ó)»üq²Ėė.<ÕÉžXzĆwŽ4>ąóe©ČēZATšĖiÖw,ŠXå?Ļ6ÄcČߣlET-€Čē:āM]Æ­•æĖ7uķ„+~”ĀåėāąŻu xœ^€˜År-#Üpļ|mc”Ž»£÷8¹?ŌT5†#ĘÉ»½¾Ÿ«dėāĆśÄē؊ ŲĘƵ ŸŠ±jÄÓŹsS’j›Dēi&ž–ģ<X·ŽCR± ėŖī›aŹčµ"t( €öײ“ęhÕ"ƒ—č䎅Mi€±4@ļą¬`]źŽĄźÖ;ą±–²øņéÕĆY]ŹM š W¹› W”_o&ū/ا†§lCX&ŹāV8„Ż€ÆM·Ś ‹ćtf¼Tˆ¤ģ—źĻļ”įć’>ņciō OŃĮ©łŁøEōŻ~ŅIˆ¬q=ĘÜbfuƒÖØŲ@­FOÓzpÜå[É8Ķ­Y§mėˆ°Ż;§pNŽēŠé™¤KĶS«<pȈŲfµk‹YżP®\Ó.Õ2'ķZ~~XK¼“Ó3ƒęNÖā|Ķ)±„œU…ą× c²o“&…Éй’OŗT‡©6óäƒčЬ”¦%¾Ēv‡ Ŗ»„m†MM0łhGŽWĄ:^$LįŖ“- ä„LČ$»ļ¶¤õ’Ć·FÕE[@·EkmR¶%wĄ-ÓČęģĒēyŲD.‘ ΁„‘Į#ŗ4op  šīŽ|@ēįū);“8älĻ@df¹€Öńžm ’ónÕ·GŪō~ K…f)sÕĪś õ.iøuxŠ’Ųų'j㟤6Žī…¦ĖoÅÆ&Į+ędÜq8Å^ؚéTĘ©égĻy|>·‚ėĻ;…ˆféBŃOœć«V @=ž”–æÄ2×ī˜^{!pq-•õœČЄޫįõmø^upK[žAÖ_s÷0LaÖĄ˜Ÿ1,ļį°ģlõ tGIÓé”Ū2Łœ(8,Ė\ž„&ڜĖrbž•ŗ1Éūōӎ/ќŻOV¾Ū’ż¦<»:E¶Ā@—A(‹pƄXUĻx£:Ž ua·ŽlŹ·jlŃō‡/Z¢JųPV­žŲ›•„čÕÜN`94I Ą‡D|­(ōŚų`l(¬C/$ŲMšAp‹±}FŃ=ļģØćMw2 DÖū'-Ήx9…ŽJ?)ƒŻŲĶĄ=Į›Ļ ˜°nDļM·2°[³rvą'hŲ}AFø—VYˆ\Õ„a¬Nż†Y²rFo4“éjŠÄäYÄ”§e-Ł9óø3Ćōģc'ÓG[ ę’ĄõjйšocO7—X¶»ÉØĆ6S4<.ŹSČX …š‚T<„Ę>hTņĒg—0aM3‹ć`•£Éīįš€¶”}uژ¹EæŁ$ć4ŁéņÕi©güˆ‹6Ū[©ģM7s€j±3„Å ÓΊ żć-Ė_€žć0čj™ēmŌď•ōε+ά™éœ/‘€Q.%ŸŠāßi „OkūT­ķÓq÷`ŠbØ/ ÅŗŸpéŠE×Jfµ łŠAaī\‰E+7ēļµЃŠÖ:WŪ‚Œupū酭ėģÜ*‹H%€“l2āN5u­£€ÕģŠÄxæ÷ŠĮX«J^IlWµvó±žÄŗyŃօAQšż”½üą8wˆXJōLĆŖ`’U+Έ„@l굢ȸČĶöU~- rU„E’ Ÿ@b €u30-ƁĶģGƒÆ™Žiü×69?²ė‚½h]ģҁÓ(ė*7*2Ų–Mmb˜nŠ›|ʦĀĖM©3uŒ%<›É±®šŒ²Ų i¼#>/„]@óˆX©2čŻČ‹×¶ˆ¾×ÓäU|q Tz¾ĆĻ#ähꆝÆrļŃdźhŚQ äÆ./ö©#¦bļæyĒbĮڐL‘#ŻŃŃ«)ŗ–Ńfc-ŖlAs£)[XĶh‡óh_¦õ“½čērŁ„øß;”›ŚÖ5”ģ“Aéź>^Cc¬…­v²ą°ŅfAu“Ų°µļ‰³mˆż&8Rā:ņšĶk;©Õć›ÄĄ}£ī›™‰gœ%üüęā*{łśÕÅŪ׹\ó„įÅŪ÷ļ~![×Ėß~żåāćåÅ»O{Łæhrę@ U6}”QŖ<œ]€É‚ćUV‘H śa«;’īaė6T…°”×äé!ˆŻi÷¬ų LµĄ›ŻBkz‡É®V|hĢśģ*֛¦CjūnÓ[f ż˜žø‘¬€ļUę;ķBA{@‰ŽśŲŃĒŹŌd 2˜Ļ៰5}Q„r>ųŪ ĆI$·½į‹Ął†„4%p‰gŁ;³{ §qŪ΁¤³s–œ—KµĄģ|NŸß2|½Łąm…¶ĻYšĆņ9/ēą \Ջ…lōfzżp^\Ļėf±ˆĶĀÉ"Õ#ęeN(?ƒlmRP:‰®XöĶ»æ*)®*žĶc;ļŸ×ck§÷ '²]d<ęօ+/'L\y¦1R½–µƒP*÷=ÜĪyV>œöEé9L ):𠯆¤eVl99üWZ¬źŽ+mÓYšȂķČhœ$dõŻä/šg•õy}e1Ų¶ÉĄƒĀ@v™37޾āĘū¾Ü6xÖ‹YFJóŽ—č Ģę&Įµ2mĢa^»ŹAŸvŠ)y–˜’gjJž3%x ÷čŗ-šdŌŻĀlé†,Ör÷Ęž!”ēh[Ė <ͽæ ²ĪĀÜy^ķ­}ϰCĄ^GRŅ…`?‰‹æ ­r˜¼Hgīžß膬ż©ėCŒ^tR¤!ŁnŁL†ŒÅšķœFƒ7­·ū‹+Ų…Ś ip3ż1 ¬m-wĶG¤Ś Ģ $lå=śpp×ų?3Ī9“!|>¶æWnŖsmōi,qn|'ācµ-ūnHOJo’lüÜr!|Ŗ±'åäŲB;GrFŠčJ]Ŗ›]Ź©(óŬ$ŽĄ·ĶśRÄś% "7„œ£žŠśgĮ2÷Ī4Š )Ÿ-:ģƒķ Ūl†`D (ż#lKŁŖ’ˆ&c*MłŠŁ³N}¤0ā3Ģķ·VŠÄ‡ƒ}aJ4ž_QŠšÅ4C]īĘėęż*“ćd¼DdÜ.ķĶ„NļFć xWŁĖøū³ū[4”]ó& ®}ēI¾AĶV«ŗ×ųšbļė:K”I8¹_L‹[]u¼FėńĶ¢ŌϘAŅ< uŠZ Š]ĖrW×Z ūŅŁŽ°ŻS‹ˆ….FĘv™˜<‹<äXŖ®Gā­sŚ­(ļäljnCī6»%¤SĢ×·‰łśVĶ×·£āIŽhŠjŹe7äx®sƒŃĀąÄNģ]M}8üg õm°ī;Y4,¹ĒVŲż²bK@I1Ō"e?©K…v”Ff“ÖÕJ[É\EĪØ‘†č\«‘6aÉ@9r–˜ėi51ž”ōŖˆ}D !5)ČWHƒĄ 4Ö\š|½ę£®ē8y՚łó‚mķ¤KmA°`DdÆĆ&_`䘖 °ƒmÖĻ—”Ü Ł¬ĀBī‹„PČ ‰ ¶ĖOó¹§žW)čˆcپĘZ®d®q“{ēģ.‹wE#Ś…*^ C'C*N‘¢ˆ„Ø#Į¶tm…ŸĖŻŁaP½-tJ‡E”5§½Bs¬n,a9­Kóˆ Ī«b-ī”õgkŗc[š“uŸC¬Ās„’bŠh~ƒÓ}N‡VžˆŽēŅ,ä¢Ę‰?-“ī86õ.”HĪy%Q˜ZSÕś`‹°ķsƳ®”G Ü^“[—;†ä n圹͚xš}ģqµå‹r;T˜=훐³Ü1\’°Ą5į[œ=²nĖ’# z1RNa§M’…É=Žč9Js­ÜLœķ÷mQńK)«w’£E÷ŽœU,“UpśōšU?ĄŸŽ ż>u9>] ō§…¹8 Zdŗ‘§ķCä½\ Ś’_źł)÷»Äą~§÷»1ŒF%­įŹbČz„–yć”#źĮŠóa¦ŹŖ‡³iKĄ«d ,ä^ƒŲp®µŁmĶÄyĖ…k/Źź{¬±]—\|#Ų®į,ZڶĤLqRXYĒŠ@œ !2=Q”=ŃŖ§•ų}šģ£Fƒ4¦żzƄjłė”WEĮ3ćĖ-cĪ% ļ1ī Kŗ•^0Äę^q‹/ņ}®ŲmĶE? <.5߇ųtUם®oUuy”.ėæøˆ¹TSłņ|i«‘f½ŪńnØu“×E¾@‘éjš|+«pܲ&x0Os^Č|“äwļ\`Ź# ;DfōŹmˆ¾ūq`š,ÜóÄĀ=W ÷ü_O®ŻŽĮ{{!’Iƒ×Ÿ^]|xżüńżŪ½ ›š˜’»ųłźõĒĻśt÷ΐž{słv/ GO‘Ó£A€ĒŌ £ó9ågPP¢V&?ʚåhÕ9k­yZļQcĆĶ Ę6—“+ä . 8²(°Ž«¼ļ¦5z‡ęņ']¤óŖjć­›ZĢ,ne‰){2UXiŃšµ,śQ° 5ȦZŗ”¦zQ"ü”Ū Ÿ!=Ū%· šėÅ5MŅVĀPŁl±żm„¶P€EVĮ#Ć˵l×mPm!“žų%E%ĻŪĮ× ÷Rß,r?§¦94DĢ+ŪśŸŌj¬ ”X` ”ųükĶĒÕ¢„րņ5)N•8Šg<ŅÄņ·gÉéA„»eńÕ ŹÓŚéŅZ1U˜[żĪ)Ą56ŃObo“܆MšZ’cįą[ °žÖ[„Ä §ĮņšŻ`6²RŸå ĮÅÓ. /,{e|køŁa“-¶8·u#š+źh†žī1(ėŠFēJ—§œ„„¼ÓĄ °=ŁX}LŸ~RcfĮŅ‘œÕsåš.ć[6o“¼(Ūó’µs®®^ÄJP”"† *"u\‹Ā•»³$鬀xL֚y-78’Pß(ÖÓVŁąšžTlIćw©õbčęFU¾±§Øy>ČōŽŃ’U£!ńe’Ķ›m:EŪ¦;»%{/‚NµÉ…yįŠR.ķֈ˜xSć|›Ÿ+ɓ® Ņ $…¼“̰źSyĄĄĪ̉qtØa_^­Ą@„$–Į`ī®ī§Ę'ö×HS+!^œĪĢzØJ³ē2ś·kū€ĻŚÜ7Ōūiœ|ī ¬„mƒe¹“¦j±Ių²‘CĮ¤0€ŅH×䛠!3Ą»­‚uōųY¢Gų!ˆčČ.ĢL¾'ōBcŠ“X;Ńi ‡w&˜”±@®aŗjˆOäL|X,ĻØ[²¬SʈØ\5ļĆčm–;ōl(cCąĢIEÓG£v ļ§8ŅPAČĢ[aĶ½0µ5č\e|d{““ZöVR`ŁĪxŽwb\4—Ćc|ÅŌ‡ķĻ^É9šŠr’¾ģµB5<šPŲ4 p¶¦¾ßĻęĘjɼ6øUx‘]Ųkīg0äņ'“Õ_4ž°ŪŖ÷­6EŌ›-/1ܽs拎Źb5 ’h›ž5lě«dŗ%y«}V±žVy½žj• Ę⚩4Āī±EIHв żT„Ś"T]Iļ]ęķrXvKT’p2ĶdżR#M„­lĄDxnqh‘ `Åkķ ;Næ…Zåzß3B>ēCm^s `Č·o-/}!7ņPMÓxF“ź æbTž C,T­ NS\ö Cm. č i•Š#p¶·|øīŚĪŹŹž§lž£‡ÓtÕż—˜ł¢¦^örSżUŽ&ČQ{īu‘¹tķŒū{…&®H8/䂛¾ėlø"Ķq£xķÓ°čfcĝėÜ%‚hȱ¹m,āHoɇy‚ƒ&ŗ“ČLŹīīĖņLž“”8Ŗp„öž&ēqä|ĮrRAŸF&rI-€°–²‰†ĘĻPcšóÄʘZ‰ŗy'É֋ćźi©ā5ĀŁj»Ā;)ŌSɽ£ć‘xZ¦ jŻ®Qߏƒ­$y/Ļ„¬öČ¢ļĮ_‰Öfp6¤ŽŌa#öHSTzź\JĄˆxµ€ųW¹3Ék‹ŸZåŚ’_ŖNx'‹½UāÅsÕÖó¦IćŲBfnĖ“rVēŻØÓą`×z)hb.ēŲ++$ęōĆsķ…,ķ,Ÿb #ńJŲ¬ę1/‹ä91笨M4«K¬Żœ„A²@ģB]½2`‚¼9żsC‘ƒĖY8hÖaąĄČÅeÆK"ēYĀŌEՊĶ™ÖƒS oķ4Ä ļNsTŅnGÖ.ščÉæœƒśĖ­)ØŸß’†ĻĖOŁū_ŹŽ^|ŗzż1ūpńī—_ßJ“Oo.>|xżmŸļ‘”ŚĻ9ÅUJٚż0+äā` ×cė BS üībMg“ä“g˃Ͽglļf±ø£KƒŃŠöFœŒnÕ“ ­MT@Sż ­Ūz ßÉ+E-Į²KÓ#h‚ąņAž÷?K²3%“—e#ĖkŁ·ŻØā}!ó}/čiē!ĻĘįĄ'Œ!`£J!ܤsö®øMxqPŠĒ¹yÉćžjÕų+$ZӚÜS聙`ņTŠģŖ÷2\ Ę­WøasR6łō y×.Įåų=:Čķš^dŸĖ™ ¶ėJØd.l©œDōĶX€ŽeSȼļ;½ƒĀ»Ų sŻźķhžCqxļ1ÜŌ…öµE›N†åŲ”>:G•·š°ˆžć¼ acæeóēæžŒęósņ "ŠóĻ‘-ŗŽ*§e«Aź†ĀcE³?+·| ĀecŻ.– Ó“_žĢ%öFNŌ…ķ3p·—˜ģD„Kz÷³zmߞ²»³’M3©ÖēČ£Ź4Ė×Āo*ĄŠŁšh3cx€ŪŸ¤õƒų¶[+&i Ė@qīį\ć—ÖŖü¦śRvDŻz˜¦Ē§%⁄;ēė”"c€cm„‚Ń6Š"X£C†ęfč(4$¹.% qø¾¶XĄfāåĆé7DĘÆ= wū(Åš?2’££(žż‡NƒKuTf„Ž]°-}fhbZ[]g‚`člŠgĮZfĶč\ÕF†KĮūuŖn˜³E+Ņ`ݽs“ūā,5–ެ²ęL¼ŗb6*ʎݳ`ɦ–*ƒ²T1é#+W†²ū2‡aęmÅ”Y·ßgÄ%»Ć3ų¢ņ.<‡%¦[6BÖǦ8†ŁŪœ`n4Fö@[`н'äœŃ„ŃäūÄ¹čą‰Ģ­|WŖ -PåC±«Ļ3YōHD^¢7”Ń8­Äšķøa@n×øź 3 C㠪޳tDͲ Z‹Ķ „­yTw ė3Õ³qU‚Č/½fv#XÓ%ĖwŹ;6‰YȁkAA¶%krO†)Āßń’Eg8žmµJµBĮ»Füŗ¢sµĆY~“—ĄŃ‹C••¾—d.śM¹į ėĒa!Qāp‰ Ižą;”t¢Ś¬ČŽ«oŠYš»f[ڼ@ŖYœÆŹšų.ƖJ5ŻÄ!Õ ¶¾ŖĖ~=ķAžx§÷č•Ū  |÷!TA#½ģg$@wģōĢ"‘Ń:N*”E’q?YŹÜĒē”]b:˜iHl‡Ņس§ ¢N¾²»—]Ŗ¬4O·ŸĀMQZz²XRōƒéŖ¦ńøäĮyŒÜ(k`mīG€¢žŒ}•ßŌÅÜ\ź4,•-ĄÓƓ #ÆMŪ¬‹EœHŌbŠö*NŒ˜Ų9 «v€"uą›å ō]R?Ĭ¾¬vJfÅk÷~b8'ł“»ā‘µWÄl9•fz7–šŠ~ZŃ)mģxd¾ūW‹NćšÓÕė·^ŗšdŸŽ\~ųüńõ«?O²×ÆŽüĒo~šdóOļ_]½OŠQ‚iŃJßż'yŪ'¢„/Ž]¼¼ųpułéjÆ*õ8æ!&¦<ą(,jr ˆÖ£o [S«@*ccĢ‚6„õä·ĮB$tŠĒRJ‚eå˜"r`ūœĢÓFņ©h \§•2\,fc̬T­v²©^ØĖM2-(„2Qk"€7%ÉŖĢ7ųčgh1ą…ł„ ” Ä#½©ņ3zXŠćŸ£«eŖĢ‰+"ź,ˆž6}GńB,Lø(`Ó"=›Œ‹(mzņ\[Œ©eSūF˧^iżXŪå"yAÆČeĻBJ½Ø1ŸGūxšåšę…ūF&֌˜¢³¬'H“Ē&m¬¦>%šė-¼{§7ŠÅøSµxĖśtī’PxÖÄM¦¹Q )ŁĖWöĖ!Ž•&,˜¢¶ü*xŚÕ =GŹĪņµ‚Õå€ź?‚© šńµŸx’ŹłŹŁn ”--'?iĆ1Ö@¹×m¬^Q>]Lұ±ŒłłŲ¹ō{æŽÄ¢›ūĪGćFėćVHiŗ—Zīī$[”¶`<²ŒGĻĒJ¶‘Œ°|Œhē_ę»Įž 8=Īž¼°éDRC=!ŁžEŸ:w•[xcˆ¼‰˜ųŠ’-'ZņGJŻHoŪf„ _čyŽ<©^8ߤĄRŁóćŅj|l“¼ŒūĢs]v[ƒæ<ÜøīgB‰ ĪźŚc:2Ē)в‰ÜfŃQKI‘hrąå°nAS„» <ć.Łik¾#5ŗ¤߯+õ£”õEyIülb`§ŅõtDĮ„`MĖIrT=Ÿz£sŻęF`߃ŠöX °ŃļDxzaU“ŃCž,ū4Ė›ĘĘXövśĻŁS:%€Ā«Īé°¼QĆrćM§>z»KsĘså¶Ó ķY³O"Ö2C/Ö¢M°ļ‹šš-ĖvI6%åŻæ)ŖŚJj‰łG1pnŠķšBä¢mJu9ąfBKVCUPĻeÉDŹ“qĀTī0Õ,Ś1®j‰{^Æ^8«£†QVc#“ĮdöąĮėtEE!gf„›ŽTŽūÕ*Ÿƒ÷½ÓM \ųāąf×)ęįy÷±éGr°O’mōŹm9X¾ū0«%r„h¾e—Ń?ą½m•®p QSLÕŻĪAšK šĒ³̆n’°XęqŽŅ Ę»®ö{Ō šĮ5ERą§|·ŸūݧZ6ƒsqP5ą’‚ ­¶öI@"+’•ągB„¬/ӒōŖĶ›¾ŗžœD¶¶<¶Ö–Ēć֍ķµfYĀtŗ›ŠÖĢ0‰=7ī0Ķf°„5ö·koĢåC īęCįgķ 3[Ģ|īĮs3įö¹m“’¼Nmōø•É×’œŸ!qMśH‰mē#£nĘkālŌŗ:£p/‰ų'…x&nŃv¾€¢ī¶Šc3&‹Ē”DČK*ĖĀ8"ūō@ÓS4D}ƒe1ƱĢJZEłŖa쉰Åŗy'“”Ÿe?ūY]üŤõ¦ ‰ģhČMĮp²=ū†b(-+ęs·ö7Ī|6zå¶­Ķwnm­±ž“Œkiuü]¢Z®ƒ7œO8™@ČØl¼89ŲB•ģ,ēƒUeēŠ€Z™ŻkĄjśéT‚[‹ŪÜSiB™Ģu’“Ų•ꙟ¢dO­Qœ¬ū ¾ą½·}¹Y!pÖ£`I¦`uÕqgC~kŸ£GóN–ا)‰õļøZņž(3Bsqź‹ŅųŠŖ½ōō`ĢżŅ/ĘiŒÄ>ĆZ¬‘{ū‘ĘģåćŃæøq†@ÉRW÷(;qJvØ6*ŗw ]ˆ'Yā“Aę±5Č<~t„Ÿ¦Q…Ö[÷ŗ%įövä½øb–ĆųYHt¢¾ľÉb0>oF«ĄÆ”ėėŠ”Ķ ³Ką±ü"Į+ņŲfhEÆņĀ\ĄĀüÓßkžÄ¼”vb 7Iͧf7žą°~2rq ŠļHz0SÉp×µGN\żK÷Mį+2ŚŽjāG4Į 7ŻŠó¢ĶqĪ rV4³~­1)vBÓ×ÉŲä@X’ž4äŒöóF‹Õx;Mµ9©ÄĘkŌ $+£šoƒģkmŚ•ą"yQ¤Q‘ŗ'Ł“«%]ž?×Ķčä€EķkXv¹¶y.¦ægØę!b1[Ń%Lņ±×—BøŽ:ņf¦·vģ3"Xŗé|’ƒOĒą…[W ŪG„„ˆ’ mč³™uÕ`kXClŅQt…ńń¦.zOēHl‡HZæ×Ķu±Łä k½œõŹXčĀ0ļ‚-ŒyĄ½¬ž]²ß #½ņˆŸ”°g£Ę4U„ę”·ŠtSūķDČÅģœĮ¬É^KųZ"}³{ą”ĒĪ‰)bĄāž§#aDeø·Ÿµ”pŽJŠ6’aČÓī1źB%ł‰ńv(;Ē,ϰēĻ D…śe:o·¢aŖtLµfWpüŠZ– ¦uŲGižŸdjG¢/®ś2ī°¹o7“éńM(dՙL>•Ū£šĻįb¼Ź%Š÷ƒ£(¶i÷䂸ĘEŻ(š]ŒeCäÅń|ĘŌo’s’ešę ĻĖAK ÓʤZ¤‰»fJžD{4·oĄģXYDe4WöśmDē@ģ½Faō= Üź“ņŚÓfŠĒÖLńų_n¦ųĖ!Ÿ’ŠŽ¼śķ—ß^2Z‹ģåė‹ß®.žķ×Lž÷żĆŸ.žüoÆ]‡žź}öįćėæ@iėāŻß²Ÿū(łx÷ΐ’tµ·RĶ®æ½üõņÕÆĖ>æ¹üšįõO{)ļ‹(¢¤½ęb CV˜‡Ź½ß92÷ƖĮEo†®čŌW÷."’ÉŠ—R·­7žQĶf=ā} ŃĶי³:ZO1Ū|!(į‹üX?œē.y‰šå0x挄£Wn ųīĆą™…¶cd„` L|ó!‹ł›ęų¾Ŗ‹õ“ɓ’õŌh‡•Ś7lÅĢŁ³AæLĖ6-2ŪJ¢—;{·i¤µ.ZåĀeˆA–6̚Ši^ÓSę²s/`jŁųœŅ ¢3R†z!Ņs-Ż^‘g/ ńiv$N‡Ÿ^ZH2_²×±>Ģܔ݌5”¶›±Ļ›a”›€ffsd4óYl¬(•q¤d I·™iĄÖøĆYžÖ‰GÆÜ6Ė|÷į,ėŽˆ(¾#w!qΚcRā¤[0Øå“& ŚNk’¦³ Šä  æpNwõ=Č=¦ĆÕCŌvĖ  ‡śp/Ą{0õ,ĶvÕÕ¼ŸYb» –Bą)Ė“ ”U³šż~yJ5¦X^”»ÖhŪŽė¹ķO+>NŪF[ŪČćQŪHöšĒ98’t«f· ™­¼z8 UŃÕķń=ż³Ź^¹m¶łīĆŁÖR„»Ä…vƒĖ¢ŹÓÖ½MNęēuŃ5ŽƟłĮŃĶ2’6Ņ-„É7sŁy »×qŽT"ĆVŸ@Łfōī~—HeKĒkĘ Œzś |Šśń¾CŸŒŸr·ß¾‹·ÓoŌ•µ|:!“:¤›ó<¢$§…wćkƒxn² hV銬O³Ę™ ±›®R6ĢVČ“)•ÓŠžOĄIA“ϵ¶ł€lY‚ˆµ@–häĻCčJØd/é~é+Ą`ŅØL¬J—óq¬»eŪŚ(¢œŽŁ4b­#*ÖkKĄĆ XXjÖµ•?禒ȚćŠé锣ģ ,Ģ+3h¾Ī’ABv@śŖ’©”9śs¹¢ dó‡˜Õ…—–Žcė=sė*b4Ź}‘5'AĮ‚ģĄV Sk›³K;į7=YϕޤS»~™fwĢ/Āö„†µĄ:AāGģ1ēbPšŻK”Dvž^Ž`«ä.†£īó¹/ Bū»%—q ’O›įłµ>`k-šēŚįeßõ %OLšÓßŖkęÕrSXFæå°iQ.µ×µxļÖo±b(²ņLzøīŌ2ņ8myl-#ok¹ā^7Ā`ŅoMPˆź3Kjw$œ6£½R)SÜN”©Ro龜–4铈 ©ŌVE–gč±üvK¬ā÷{‰mŹ”ĆērVšé!KĢśÄ–™Ē)šś±”©e«?Ķ•?īĖ£śóū·ļÄM’gqæ?¦J#M\ķŸę‡^žéõ«+yķī_ß’åĄ1|C6¦C”Uōhj¹ućŲ*×m˜b,9Ž­ˆÖ$`ŚŌfÖy§kyŔ¢ŹŪ6ŖŃ„Æ`nĀ~Ćź}˜¾Ń’ÖŽŽY ;¢vUń!ĪqµčōBHĘ.·`¤„‡^cuńå‰źexąÜj¶…%TķūF5 ŪļźŁ*Ÿ: Ļ¤qōŹmß}č0(ž€ćMŪt÷Χī |«ZQŅņyŸ§“:ķxI ęryŸõ”PiTšŻł9SĻ9¦Ś8%CöP…’Žåuż(‰‚©Į’P°|ȱ č£Š”øœ& 绺\Ļč~Ėś ¹’œ+–Ńŗų•Y=N46U.EWRnՖė$..ćƒ!w„ĻŃj£%:X-Ŗŗ.ųU6Ż@>äKˆIvדQ%CēoE¾ōz‘ćšHiZ>āQµŃf#Sr§Žšņœš7æ—Sä$£–b‘łń‹Ģö kŒU™µxۊ½ÕŲĘŚd»¬¢kŽ2ml2e×mMœę(}zė8qcžA­×høŗĒTs’3˜Į”ąÅA9E=9ä‰ •t%)•‡L^ĪW¤ČŃée,FHOL¾":y὚5óź:‡Äō wĢüćłų±ķ$GR"jsŲčAŲĒGc_żCoQs{Z!Ÿ›‰’ćĶ»KĘB/€'5޼qi ¾DČ“ā®óĢ Ÿš>Xˆū‡.[ͽœ{ö:šQ4‰Š= ZčiR)[Hp_µF›>įA_\‡L|ØŁu¼šŚ~hņ°]E»é'ŗ‘rx†yÄĪĀInf9K&<£Ś5³¹¢’^ģgH‘“$Qü“ ž­V8a`ПEŽć©O‚8r„«ÄpĮ™ŖfÄh+TóŠØ9±©`•“»Ŗʆe?»FvŁÉ¾µ½+%ž‹}“˜‹:ÅiŠšbo›Œp±}`Å0ąq=źnŖį ™ ±š  ą?ś²Ój'pC¼_½‚.‘üwōšĢPøfÆWdīÕKü¶Įi3F•ęüī›P”cØöV½0h,ž|Ō°'qļžó©“=@¤1ąCjי­£T”'™Į~üŲąĒĒĢņę™tÅ%&ņ-½_ŻÓ(€Ń꼞FB²+ ēī)³ü­ž ŗ}”Ė™jT²żŖ |«ųüŹ gvžŁ(½ÄH.ŹVQ«ąµ*Ė{ę¬ńع£ •i˜"ö+U©ƒj@ÄD`ÄĶźS…RDӵ렄iŻQ°×Ŗ‰kgŌŽĄ;%ŽĄpµ?‰EĆl5pŅOĆŅŁx , ”&—ųāß{¬µŗ2R]5Æl»ö!¢2*]ówkPĆ.‡_#”Ļ™±CNŪż†Å„˜ĮSvHŚ|JˆĻ D×¶n>šœŒ—‡>W1§ZtGN%+!AūBŽ"šŲ4 Ė"šŚĢĖś½…Z#I“ßФŁxóīŁKTGJ7°±PȮJŒ¦ķK¦L½GT¬ü’é–²åqż`AkפēžĶŲ,ŠRŗaŅWU ./Ē%²—$øh d\%tÄ՗¹¦béŁ·æµ®µ@’ ±1Ž^L’ŽbŠ9XrųŠńµßīüuķF…ŁÕ{Ųka{ģĄF$_5ĢÓZUbBšGvo"°34…ņc*ØrgÖš ół ›9Cü4[Y %©Rī~ßkŽy¶ĻEÄź ŌøŖ¬¾×Õ¢¬)Š6!:Ķé͉šQ DØŁŹ ī mć“LiŠž~lčéĒĻĒ\Ń«G5ĄĶ2š\Ē-§*›®©¢| Śj„ҰƒµS„æzʦÕŽsuk%P.Tā0†z¢˜Š„z©75[Ž@łĀŌThć”8ˆe›knÜ0qg„wōKÅ+JÓyņq4`-¼ ’&Ąµ$ŽqQ„i źž³Ö©.A[zžŃ]¢[,:¢Ż(ż³§WI'u®ŪĆ(ÅLūŚŃ„ ֘¾īˆŌĢZfcĮŁņļƒ’2%u•/§¤&Óp†'‚[«’­"Į‰'¢oĀŖtŠĢ}Šå|bXĪ'_’724ć 2-o.?]½’ų7¦d~{÷ś—÷ļ~z½—m¹éÅé©#«É"n2°Łr4˜Šį],³ŲŖršĖe©æL‰ü½D›®ņ¤;QlpR͆„WLķ끮)C`!ZZ×ĢŖśģty7 ę³ŗŃ%ļ[”ž7M>c—¢ß«Ÿ&Š0X5g„źÜ‘hY¼šUNŸ&©F¬óęšX5.ܧė=ČßÅźfd±žž…K¹o­O’ˆMŁF~$¢‡Ć“'cS±öų›UŅ”°čŁ~XĆį¶_ŪɃśæ¶ÄaéńlCņ)£hQ dPµ ćh¬š!V”OPē•“cZi‰ĆŒG®Ŗ hĪÅ=ōŹ ģ‹ %2ļN25)Xń‰Ÿ<Ś?åHT1œLp’e…ŪÅśĪ¢?n[‹Mį-Ōó¶nCä§Ń=”¢ ±IČrāD’FX-‹ĘŪ:£°Ņ›ØĢ@e '¤‘hŃį…BF®ŲN.—7S"šsEŚ[¼¶ōŒ²ŁnBāįĘųtĪÖīm‡/ŹTE€-D6&aY‹±HēD$J’œ;Ū=>cyƒŽzjEfƒXŲŁEyDė2>Pµė äĘX5l(“>²=—Łļ!j¤żķ™RlxņŚŅ#ßG•bV.čõ-23ŚPoŠ@“*V¬šn’˜Öɤ|÷ĪO2€—¶X95éģiąŒõWkęF„Ö©aŅ|a“mރ‘3É÷Xu’8]g H5Ydé K ,n=¢AÖ š¢_oVŹ7ł…Å&2Ģŗ Ų,Ÿ9ģńPŽ Μ­Ć–?ƒccŠŚMl¢!MA±ø$š„I–Ł)Pk¾ ‘™nć1ēÉĆ`’•Ö'IY&޳eø¬Ŗ­,Ņ®¶#­XC9XRĘ]“P©ü"1(ڱśvLžOėsSMVd±:kt~JŌ»×>²_Ģ Ć:kŠsük“k”z›+Ā1Ē‚¢Œ9Ž©`Ib&x"9ŸØÅō;”#ģEōntöHµfŠ*`@T\ Y^ż¹’UF”ŲcŗĘ¦ŅˆAW9šaÖÅHQs ČĘRS”J.AĆ¢³ BH·ždŒS8ćƒ3>y¼'Oć,‡Z›’mÕä Pø=Pä®Ū¼śR]ä4݁>Ž„.b!`ń/+[U`£]b6Ž“ŗ’-§Śt$*šsždcĢ®)OĮĒ+ÕÜKX„ōÜ–…¤1®–YŻ e#O!ä>ibŠŠ©, ś ڕ½ā¤¦y/lbŖ·§«ćĆų|§ŻOģōQÖ*$BÜO„8‹?–––ÖM‘Wx+‹ -Ÿršsļų„6©ųŃäÉӋuź^ Tū!\;H1,ÜW³Ö ”Ģód 5¦V1ÕgŁȉل²ŻK¶Ą”¤Ÿł8{hōF)sæ?’óĒĄŠ|źń¤ņ:̳•āÖØņ/¶g)łŚÄU•Ū,@9õ™Ą·ž+ŒŗķūKČČ-Ŗ ī€Ć§¾PŽb:—ø-ÄÕ#OlÖ†‚ŖśYXĘ*ė: <½ł²NVöÜRÜņ<æ"ŠK¦’Ḿ¶#”aŖX³?XȔ}…c²6ieJÓėwߥWˆéČq<3£nEg i”4ø*‚`@!%‡5d钵TĪ·-¬ļ°6Ɨ wgõU‡%7ąz7ĢcĀ9žB7cśģīŁ,6’NŖž{+ElŅQ„¤õWlt„ ŹóĘŐL~DæĒ“tŒō%]ė‚<‡ 4ny©Yźß¬,¹ņ$`d©S8ōƒC?Į”Ó܂D7±ā)7MEPˆŸŒ8ŌqpÉ¢»ӎ= Ŗ= ^—›Ź²u]_&-ć1ŲTĻEÆA>ĢNQ2zŅ^Ė“\+6„2fAWĮłOP³6vy’ …¦2V=ćhÖ“;~1Üó‹Z)F3VŅuˆZeQĮCLVŅ…¤®:|R£a©t#Ę:ްÉVފAS·ĄU<żŖį ^Ø"ŠQO¾r«"UȂ‰öĮtE?[Ě~™d ­I_ˆÓcd…ßÉ= ¶Ļåd¼Łö2X=‡ķeJ3 K"'^£X2>¶éå!CäwīI=µĖŠ>Ł·ģŌ¼µTõŲŚŗā„ł śIī[œ V0$s‡Ź2z!˜õŒĒ“ó¹Å]Df󢟨~=öyā mR ‘ü)ŸNss}‡€u­H‹™«~Æw*ˆNžŠč„= Šģ$Üé'ķ£ūÄp°OŽā`OŅĒłėØĘ°ĒCk “Š2Ä/½|÷æ]~ŗ¼z’Qq”ų˟^>Šd–§Œ䣨ĒDóšb–½Ē›]ųÖ'0H~q›œĢI)ź B7čN’‘|™Owå"*į÷ĘlŲĪÄgčæü’—Tµ&‘X±E¹˜AVŚģP /²·}kM“‹S\j©¶]åM„MJ¢—•a‚­fj,V¹&M6uU !Ź~X¹ŚEX*%Ÿ’Ž™™””X‡xrNņ†F]KX&Rµ[¾{ć]$ń#’č{…¬£ČŖ^žgłÆĶ*/)­š2‹+ ūŽ[ÖŹ”ph ”Éł@ù6Š’b®÷‚”Ū¤}…#А‰aEµōdĪEóį™¶ ©ƒFĈöķJŻH!”`“1AŲĒæŒ^$…Qō­F,‰ŗBOß¾ČT‡Nkš¤±üÉ1^÷¬‹("ń•påw£‹œi—¼R*Ā_¹7ęJ0Ŗīč<™Ž&Įž€ ŗGpüŲCŲ·@"ƒ<6:Év¤ņ'†!2fäė ĒX5³–Z«YūV7AJęš³xͬ\!ęJ6moLPqąqUĖß÷sēeĆ”fLÖ2IT©ŅœŗńŸĖŪ‰D3Ši‚į3ü^“×XŹXāzpƋy„!hĶ9Ņr²"<ÖD‰…(ū)K±ķY ­’X³ö$rÓŃ«5'&΄²bD®‹«lXŠ‹’`ÄDx¹"(7ŗļqÓ-µj+aO—\‹œ¬×k€0pQ t¤Dījz8Ŗ:FŹĒ†üō6„ųLĖeŽ³ĀĪZÓ!5`CJ-Ø-ÕHhš«õČ”ƒ)•Aę;]ŃaS!‡9ē¾0™g1Ż_ø–šō@Äf€o/˜’@¹ĄśehübÜ"vDvk² ŲŠ28±u£c„ųEČ•ĪYˆ„Y^É?8éē‘›Õ»{l:żŖū™G īXü`‚OĶž`n³@yÜ“» Ŝ«R5±ņ;¼_-—“ĪŽ.>Ķø:,ĮwļHuVEW†Q{²*ւÉ}kdēį 6s_3Ś“µ_Ķ3''£ūH7Ř Šī…yż&nPbm糁-X†X©²jx¶$÷/“;W‚q“Ū{šŖˆ!Sš&qH÷ Ż©S&£“˜»ž¤Šõ']2†®ß§ÅĀ”E¢’ŽźŻ;æCk¢o½¾HaųˆPĆĜ@y w=†²p°Ń*?,DaiIŗJŲ~QP¼›Wö”ł\Õ Q#¹1‡Ió2²ĶAy ³]Ė`€ 2ę/–śźZ£ļs¤ø©¬Dś–&¬+n\O O,Éuāk»%mA0ąīÄ4ŹfĘ«LJqŽe“ 63F£Wł¼ųĒÄ ­4†…IäŽBф DŻŌź×֗31½šßÕFjV×e$N«hU.åX›9ÉP|t \B°Į×oßL±ZʚųMš T&†¾Ķ\×ĢGNąŁ ĶÉæƒ>'ģ G2zE/5“±BÜYGbĶå<=÷FI“Ķ@ĄŖNEm•Gm7ży5IŪŹ 6ē²åNˣ̈́ÉP“=٦–‘w“U~“RŻHhXåG¹ėÖĘ× ó>‰mņģ­,ĘŹ tčb œ`ĖųŌF)^Äi\Šö~bhļ'’2Łō8€»|§\Ņ?]~ŗśųśÓ§!nKb9ֆf拏/’ņś§L>łźā§Ė’Gv&Ž$! ¼ļņcöśķĖ‹¾øŗ|’nnöy„XU󰇄ք¹ēĪ”ÓĆØ›žÅį‘BŽDÓvÖ9›RĢ`EŪ`evÉÄ×ę5^Į69]›h}ĒŃ*'tįźAVŸĆV4ՆÕå2`Ėšķg²ĢŒI.×Ī÷P‘Ū (<­Ź„^Œ¬5«=wģK1æ×@ˆ#åŠlø[žōæ÷s¦£$ę\!=o@C&LÆ©Įɵ•šĆfų.3Q¹Õ¶æ†Ÿ¦ÅܰÓS[u5Ӕ׋ޤ!c&b«÷k|ˆH„4žšäĶIń€-+{„TIŠŖQÓy/‚X‡F™śó®™'ąW›¹õ]vŌGØ"_Ek¹lŸŌģœLĀßdą-ŗGérä}Ż& ؍•ø(–^dÕuål³,/ŗD|-Q'݆T†¾ĻCNT-ż÷<—°øĒ“0z’'ŌmÅ.;;ö䏓Øļž¤˜é'†™~2ĘLk—9Ä»Į ¦ŁÖ»wŽ5†ĒczEp‘–ģķøĪ’ÓŚ ,ŖōRšq=®Ļö)£ĶÓEŹŁ<{‰˜Æ’JP.jnĄ©Mŗż€\āęUČ7xß,$’å’쐔g®ńRō§³_ūψW8»r;¹ ā*}ĮÉ1“­i)›) >pH‹ĄV‹a:M쇢Ļdw!{zC¦vĆ~@|3t£¹2ń7‰Ė»•å$>äM¾ģ g˜µKįĪt3¶Šō:Ø"sÜÓĮ 4~Cõ$Ė“~ŹgM®½nį¦.#@/ógļšV ŅG±8#f-ö[dį€dŻ„Ņ0Ś,¢g·īHu…/v  #µMæN½ĒvP%ŻWl¬„yŌ5?h²e¾Es ²ī­įŠ&J؁¤Ä>ćĻd÷ąŪ”ц‚ntų „¢%šµ¦źc«Ø #«- ąčū4ķ xj½OĒ<Ļ8s¬ZŠŽĢÖcakPĀOƐīS’ŗ5öó„Ż©źŲŚzØPjDöĒńŽč\-¹“”øbÓ±~Bw‚‘¤ ŻXbUş ŪēHĖ+¼» ąćõz0Ę“„›‚;IIŲ7µ8äØäēŲĶņrmõ ӜQˆ‚ &D÷š50ėāļäė>óė¢č /oLņRœÅ‡{ž\6lž.A¾ļše 3ŒF¾Š7ZÆ>YL”Z()]łhū³}‚ĘĢ—émģ9åŽF½|č9P Ö±ŽŃ”{ä¾I.RļG³įY–•T„š1¢»ßgY äxe„Eõ‹Ŗ^.ĪF¾ŗÆōFˆĀj¼¤‘kš¤¤Ö;P³Š|_¢xŌøH`!ģćŠė2Ń·Å’ž:g»Œ"ŽUµ×'‘ĻF¦m[[SLKOøä7 ļ0A2=Œg}*b`ē֎:HŠ-¢ń–h”X‹‚ĶĄ.E’ˆ[‘iĢ׌€`J? oÕN>#Įd54eʼnG27’ū҈üⱦ&¬„b4īā įsŽ ÷ żŽsIŠž^ Nł3ö<Ōj ̤'YŌ“⩵@<·@°‘9įBœļóʃ‘½&,Tļ0g„›ŻFĀß./Æ3'ŖÖŌ³é¾( į`š¶N„i²v Sp‚D*e%ü€~¦ßš© Ż_°ļ<śZžķńļčk·1šŲ'9x}=°öY÷1¬m·āŅXågŁoP'ä;ņ„zė$1 DOræZ‹A汜”į壄CėÜZ™¹{ē—Š ŻŃnķ€U¼‰U˜%ƐVU>?Qmź©éŹ ‰2ų  n߻ΗUJ©Į£†r3»ņ/‘fŻB}J~,Ö @×dö8ŠCWD½ų?cožÄLnLņyāF^¦ÖĢlҵŖĮĒ.wažĘe$lQ}ū³ģķŽ‰Ƶj4b•>ö×{АÄQčä'l*ĀuŠk;Żm¢’"›‘“š”kaʉłYņ÷āXšś›ŲbpćE™ģ­¼Ź/7Ä9̱)¬U/Ūō›Č¾Ų‘ų3ĢŹbcJ!2É@KKąŚ%Ā@šF‹ŽŚāź`l\ŪŖ†b0yĪŅ9†ƒ=y‚…j¦vXa å2!D&ņW™(°Ž¼›…µE"Ģäf ¢œÜwŁM¶š^Ōō$#—ā~Ÿī÷éī—"ČHhœóŌ\–¹ĆH-“”m³f™ŽĻ8U1Ćrš©ÅśŽŚ™ė{{½ńóä-¹ø#&½vgūŸėD1łüßYö‰ėŒtņ÷{™r=j®Pk…[µŪŗ‡*MĶ%źd- [ į©ĖXŽAž¾¹.#“K¼ĘZID¦ÆR=ˆ!ˆbß¾ø?Å:ŲbQŽÄ9T¶›ƒÅ+nĮóbdTż¦bĪ(DĮźo²HĢÆ³7^ė™L¶Č¶Öp'±®Į+ˆ'$TλЪ$† ŚJe;”„ŽŃœ Ė5Ų(‘Z,‚jưv(ėķRłŻ /-”_„Kœ=<¬‡ž| õ“ŪZ{0UDź]²qƒBÉæ`²™Ūr¹ķ×kÅČLĖBåįjA˜źx9ę^›ѹEķl[?ŗ`˜„\õķ”emmD˜»Ņiē t%JZ™ĪݼP;[jœk uåBcŻĶDքiXkh­ •Ló%Ŗ\„MwĒ‹Ź1ē¶ęüxĮ—BRoQ* 3æßs"ę ƒ0e[™ÓŽ-L"Z«å&Ņ!HV0 #'cēY\ƒJ3s[½'·ä<ĢC—S>¬§1%ė3…‘Ł+ĀĪMžs„ė«ÉŸržü(b^vŖš½x°Lüd ü"ū„ĖRˆ·;r»­kžÄ@²³Vé^ž}ߐ)vuėn€<Ęļ…ó Å sÜZw¾Ź—%šu*ßz]…&°–"0ń70Ŗ¬©©¼\&T ~æ8ē•“G‰ģ6ų Ŗu_“|„ąö<Ķ#MĀO (üōé-DŸ÷/SQī†*glœ€ķš"¤…ēė°kĻźÅ$¬%–lY%ŌNžIŚcĘ«i_ū-@Ļ)€«P*ׂÓ;ę3Ó³\,vų¼–3F“Ms² pēmóvč ¢DJé*ĄYÓü0f¤Z£”ČéK’äØŃ¹óh62EŹ£Z-ČLėJc–}SlL˜Šµa>1Ų č 0Śø½ŒI†Ó@’Y”¶ ’™Jœ”‚×…“ĶĆp+b¶ŽŻ6§āR!\ŠNlŃWßTŻ ˜­.J¦Q]…m0(®Ē\A)īŽyk0Ā`‘>!Š»Õ&UU?…m)Öky@½'Ęż;+nŠ’ó¤Ķ5­U¼Ų›–Y:«ڱbśŚŚ=8VßY€ü™åAua' (DĄ_Uv¦¶Ī…Dq‘Ųr<ŚUß\•ģöŖc`aR¾Äeš±ŻoļœĻ™ąīõ«Aæ <Ó؁ó`Q1ŠO²Ė%€`‹ż%µs  žS’³ˆŽ²¼Ŗ€›E7^ŸlœD{QXhĖÜ9¼+}[7µ8ś*’†¦mąžŒ5JgVfŹ„öuķ6wGĮŽ>ՍLŽ'Å#h'¢‘«cu>Ų‡lϵ&©ĪęYöj” >~§'+1³ Ś=ėA^Ö±„ ¶a¤×3”'*µ!‘ĀOqæøO6ŃNęVė" ł¼z®¶Ó”ėŖ¹iį7Z A‹,ź—Ø>.U˜§…9!lϚ~.Y«#&ę5 DHo{ń~^¶ė<”Gr#äß~n„ÆŻšŃOɍh&O»rµNp4ęp’+Ź+ØI …rYk¼gZfD Ž£k¼ŽŠ«Ģ_Ņ{ō§.߂ÜÕ¼żÅbö’ŗīōīź0|8¾B– ¹łĖÓ0D Z„å2.§’p­Ų“H}W³ˆ'Ɲ dFī©'£=a($jCU¢¼…"+ōL2¶cœA³źzcH¦ž*į‹ Qŗõ,{¾p1)X‡¼Tō™E]1j•„Ū+™ŗ.DõµżŲ?ز8Œ$Ó\5ó$1ÆĒ5y˜Ą–vf„÷Īu**,ģŠT~rQ­%X×÷zīhæaeO˜żSPRN·µÄīL$¶rŁn‚¤£äKśk˜ą^żž¬u‰ĮĪŗŠŌ°fŃnBį2Z‹’¬)źŅ1‡”!¶¾å¾²ŅzŻz ö—‘š[Ā /ŗ2/F:ƒz6<Ąß*ÆolĮ€Œ©ļßR„»ćiv?mxj­OĒ­ åB³ vĻID¤8Ż”p-åLčIōõ`}ėOøĄĢō[É94ŃXS³†KųBœŠw”Ź –źGŲ'ȁ¶).wČY™`ED”é×÷3©–“4•‰õgO{pqŽ#F»gYrķ”;Z·„töǼcł$Hӝj¼’üęm܍V¦ÉKOg±wŻ>š tj.½`;+Ö@>°ŠÄ‘g[ļÜŗiµż—Y؍ę1xŠĖPź  ho¹ß4øóbmĻ6ic&Ł*kTėa€¼5 Æ;³ģ47ŃČyŃnŲ„H¤ŗ"¶°Õ±› äC¶&¹ <ÉAV~h2„®ÓŪEüiœ‰V\Ģ-Æ1š $#Ž‹©*uf““Ē]&õŒä>U½˜8TBƒd؄1“nķ,hYŌrj‘ŲŹ-eį@{t"9"ń¼Ś€xZQIl(ćž6:9 e; Iv¤ĻbJŻĢõNe¼ßę+ō61{ Źp’Z™š\ŪQ5_?ß ±?e[Z݃5QŒNW›oKK»@Ą %ģ äė˜PÉčń“&q9‹ńŗ«GEŌe]š0W¶³A,Ĝ/!ō鼞)² ”G+69AP3œ¤$}Xj›zʤšį`M]]HR5šé«#Ūāup_±R2 B‰4k„ČŁȽ£Cn”˜4‰  ÕĘßO²“i#ĮSk$x:n$ %¦³eܽ#ŚłÄś Nw©Ė•Lį*sŸŗ]Z‡MźPt¦U0®3cå9YP§9‡­U“о‡Tš³ –HŸ[Zź‚$>|/aė ²žYĖp«d8©ž§e‰s©ø‡ņĮż#īäcł·ļNņµ[ŻIżÄwŅ*š§ĢG Ļ~jšģ§’:<ū‹ēÅOP?üķćėO•ŃģÕūwW—ļ~;Q¹öGMN(Y9 ü)*” ß_qŁS\E»F-Ļ:䗜e҈0+#ÉøŌ\ c¾ĀÓķ¦X@ā'š¬ˆq~ÄfV„°OkHp7•ēe” Ÿyttū;懄C5ļcS]dł„j] —ØX„ćńDsŲ%S @cĢŚāp7ČĆODÄPtq³„É  Œ_%ŁÉųŪ¹ “aŽ>“`‹ĢāėyÜÖIĻŖi Ģy_Ղā L†Įś,³v°™©šolRōF—½Ė‡ž<š 8ŠHĪž%āM;±Päh yœ‰ć%‡WeåVŹ—kĀ]‰4Ō#¢Ā—ö*)Ä“l©zČŖB鑔¼{¼Rźˆüö7ĮŃ@µ³ž¦©,šß³#6ā‰üŪ·|ķV”Ÿ8b#“ ØÉĮųhš›ˆT®TĒā×~\ZĆо„źÄJĮØÉ•ųŒ¦ńŖ<±{¬[łr<ÕTęŻ{ˊmĒaƒČ?{Ąų“l^Šjš§c8ĄÜʱć"ņ;śćMLDč÷@ äCŪ ¬ų8?$€_U·ŠOjØMv›v¼wĄe?#Ķh^NL÷āÜł|ÖŽĢz%š ĶŪ1{¼Ru^xµ,c»›>1Ž•±h‰ōńō$ÖĢŠ•‘;Żå3CäN˜ Ż„±õķYć<ؼŪĮ3/jöĀŖwļ¼Z‰)ļ°¼čų0ąr=ÕŠČ»Č”¼Ŗ ‹‘P*Ńb["}ŹąŃĪe5pŌ5Č-;‹$ÆŃz—’E;.sģ3ŚQVqB†;žv«"©ŁxI#)«¤&˜Ś¹ŲP·]Öh̦½ŠWb0Ļ31vČ·ÕVØSę‘WzŪÉčMEļc„÷ ™ė·ł¹&ˆĢRßdoīWąPLy'IeŽz9YĢpœĒ–_£ī“{ĢČA“ź¼JåNõxŗ(—ōØū¼ń³bdBOг‰©Å¹ä{’䐼āT'™Y%”䣄ōæšģ˜dm‘Ģ]³“ݙعµÄŠKKĀŌģ&5ĮĄāRœ|ŗÉL8©ŠÄTšÜS=@æÕ½ž¼ćØ“Āø$±pž­£ĄWĆ*ˆCāĘŖFT³“gy“)ZɊܧŲĖoR8÷7ēžęė=že6k&4…¼—qŠ B¹¦pĄ·yiu ™óØFØšÕ’T(ŗ~„ŻI`l°8™ĢU!;J¾#]©%™tźÉ^Ż?aÖ¾JÄŚmĄe]hĶnƒŻk= ź›Ż$Éž;•®eHŌ¦VG¦!ęUĢP$LōjiĪ B•ņ¢ms ±š-v_¤‹>]ž±·1ę–+ĖŽ YÆ4%CŪÄOĪ›lwĻ$XjčŹaøwōņp TŻi„Q(œ"R&IĘ1B28Å"3J6‰›—‡Ńžœ…ßڃֲ(ēnŠe›[ų—³_f²óFzÅ4ĶW½˜óóÄßO(Ÿ­æbų0ć:{ƒ ĆĄ`łūdė\5ÅF,ż¹fģ7»%~f,|‘»h`]ž1¼BJŅõ®ńžZå+å Tkص¦_TZ OņW5ŁöČł†¹j“ž-Ļt±Ģ}¬ž”Ėć¶yShĻKmwVa3…bfQ ¤Š£źā&^‘!$äx!€+é€4Y¾xų'łĢAŻi4mŚhķžRrM4[Še=_āaā Cå—hēÉŽ:ź»īŠ9Pb½Ęu®Įći8A.mĖCJlēéPĖØ£fģ3,¤X=ZģŻTŽż¹'VÅG|É^ ³ąEĆö³ŠŹā`xÅv¼+‰ö؏¦iī ńš'ŁŪģż½æ9ą»W~•IÄ·į Kp?¹8;‡ šy¦ˆ7<ØŻ‰}$”ĮČ–!TMd.šĄˆ¤Q>9)uDm˜“Õ§’•[ųšŻ ņä±bß(mø~ZńąEgfÖl^ššyԼĶOåLvγĢH‰A Īę_[.AįGŠsĪ]Ø2ģyU,¦NÕŅg÷D„NóN›»TW ÆčģŻ8ŚAiŻ÷ŗøŲÕ¦p¶‹U/ū!ąp«&ęž»śn•  M$"+S‰ćZ“Œ,ø"ˆY:²¼ŻČ÷˜IäÉ”š–{«©rĻVė­²īŽĀć\ĮüŲ…ptКWn½b1°Ž©÷YXóćē%ÖšäH!ĆĶ MdM2“+Å4Ŗ0Ž~:d†Ē2ĪŖe𫐉™ŪZxŃ;%$,ĘŹõÜBY«³ĻÜøõūÜQcē(-2ī1ķĖäxąA°ń›Ś]ģŽ j*+"ēźżK®$gµ!†bA˜€Õģ׳¢žńV”•†~#ŽŪœSŅÜ=ĖTU$€&mĶcµÆõč ± ė ƒ“ģ†Ķé™čyu¹”žT6š Š•p÷Žń. ķ,ßø–G¼Ę&§£į|Ą^ƒU’^Q`čręV\'ałYĘ…šZ×ZT•ōf(«A‹ÓÜÓ“©ćkźųęńϱ™ ?øøUg%}sX}k1õ äNŁw{ė@mDE‰€Ø!źĮ`ėą4Q—;a·ŌD¶å° Fą>|gÄo`FōĒ“˜ū®Ÿ†!C½ Œ~-žīŒ„eĻkŻQM ^dēx²·I:ĪĖõ{“¤G×<\ŽÜęę*ZÖjÕÓIb³ĶTkY4ņŅ÷ŃĪ ¬U_3J(H3ü²Ž)E`3 ¤Ė£Īiä¢õt¦@Źų«å#…”hg„ÜEX“ßļĘÉkä¤`Tš€łTӂ×0B˜% å˜āOg7é ¶"W>\”(‘vŖ90!Ćj½(:÷„r†<„å‡AgÓ09-ć ŪźÜ3jʗH<^ŽX”zˆr.Q“ÖĪC4mO,Z&āk[c%ń—B\*ŒX—żŠĶ?ŠåD[ņćæ‰­Ÿ”*Å·ģęLOŖĻó&g• ׳XĆż™ēk-}ļ ]» “42’@@­H`äį”lŒ…³•Q@”^ĄŌ&%ß6ųœƒ»ŠƒR¼5Ž)TC™ß™!½…ÅPxKµl8-Kq½äS±tõ†sƄ‘SpD¬LÉ$דĒ*wšŠJ£>Fd"Dł…ś#sC_ gŽ!a<†œhE^Aƒš.9m%0@³–šCé! ćĆdąL›¢Ä£ÉWŽ &ēҊ ×hśf»÷)„=.zS— h¢²Ä†ą:©j*M×]wn "ż^ ‰Ŗ„õ†¹““õ»Į"ÉdCĮI¹ć?ÖÓp}¬ĀšTžķWųŚ­żÄ‘ ƒ¢Ųå©·?uŗB·afž)r(¾ä Ēė@IįR*hc- &AkgĶć =U\ī4ŅÅ©gJ÷č|Ņžżå'ź}Ī*.M%$“Q|¬¦7T×Õ4–3B —ŅTžD“ź¦O՛…é¬T™ęA wl&Īw½†/ę*CČK3nŖ€dŠV E!'MÄSjÜæŅʑÆ7ŁgŁP²pėārQŲ×ʀč^YÉė.Q)‰%œēReŖ†;ĄueŹn€ķ¦„fDB2 āī %#K#/œ"`FżGPг ‚Ag}ćšĀčļä&¦¾‘æuѰ €ę µ0¢(å v‘Arʇ Rŗ-LJ”ZŌłå§a”×tčę“uæ&äg÷O²ÆiČ7ÖņĶŃ&‹š{Éļ?;3ZöłāSöóūÆ@öłāoŁĻßæ…ŠföóÅåǁ6ķ5ķ€čśØL±Ÿ’0ź{ jč9ŗĀķFCŠFńJ ŲfĄtĄ¼·Ź¶*£²)‹ U I•ÕٙƼų¼@“ˆH2h®ÕjĆÆ8Čæ*®æVY'5Z£’k­2¬7—J @\/x{Ф2źö•ž½QĢĶ蚤Č÷H„žĘŁ}ėX0žElXÉā5[äx"=Ł67E˹Āo³j8ž ‘‚rĖjēgŠLƒbż¼ÅĒš®#–Žāj׳IKø‰øärŲP’%µ¾²#<ż­2ķŲ¤ÅĢ[Æņ$6ƒ0ƒ S3ż=0#0&$QĪĒ=»‚` §žŌ`^Ģ]†©dx” ;ÕŻź˜ub(ź6»Ų5€œ&vņ•a‹SŚ`Ÿf㬜d†Æ0ĻTė{įū"5Õ\¬åƒĖ©8’2 »ģg€Ājōģ$H×zx^ģ²_óõFģé¼ęoŸźž¹uō$ńJ/¢Ļ–yc4 ,‡M¤$a a0’'Ł„“āk‡ųf܁·+ćydf 8Ō(¦x“2łˆęLĶ5%ph·Ę¢£rĮ!]h`–ū ŁśĀŌz䆩p ž*”‹-Ż– ż– ±šÓ\)_`’ĖŠ0µ“iŒU"w5uEv•}”׳®: ĀØzŚŅ ŹŅJø±>A0‰šƒ„5&éSrbƒGsÅ8,”ŖÅ ¬™ĆjŌy{›½Z+]Ӆ åŒXį-^JŪõ°i¶żöŚ’Gr ¶LŃäeŽŠŒōDųŚwĮ¶4ńüŪ˜Ļ—Ėõ§ ԊCHoē½\ĘUĮ‹ŠRÆAĖ&¹JåŚŚ²óŅŚĘ3—@8{‘ PAMå 兜ZķY£-G“@ŃŻcM»hŃ ü0rÄéxwŗøN¤ĒĮ‚!JÉ[ė„'CS‰u5 RgūŒ/‰­HÅ Nć¼>ŌQ[345I&ͦā↙9¢ž&ž©¬O€"œ[y8-†²iKvHR»xŠ­Éž©©A+ø©§õ›L9ÖåTAg7ŽÕ®UFŖž”ŲļŅ“®”ūŹ‘ß~8jːR€ŁĄänI70婞ü`YŻ~z{OrœŪGčā“É;ˆYǩ˜"ė>bfåļ÷#OG?ź ¢d;„ł näæ@§`‰oµQžŻļy›gĪB hz‰y8Éī¦ķßX;Ā7{ķÜι—‘µ*HÕĘĄ1`ųįėEēx™C„‚ØŅBä=2?TcļVöm³õčqE Óīūżķ0š_nįSrŌfJź gyP^ZCæz{'a‰&?äŚNY›åݲpe]\ĄKœY©r…}ĢdĆą²& Y#2ś"c± c³Œ b" ØKĪķ¢$µŪ½0!c@Ą4‘Ā‚×8øW#Zi~”Ś9aīŃ*ó&gXŚ9’e±e£gA£FĘł^Ū’Śq&ćef9w4åŹ5„T5ō¢z¤1°;¹œØĮ7›ĮyąłŸü^(š0ņ‚Ž8dŻ‘å ś“œ !Œ™£vąŠŽÉõ4Ķ;‰„azm)_÷ĘjÅGd—v±!Ī©“IQ8¦\öāӖ1nš‚[×įń¼łHZ¢Ż{–8Ɏ,‡Ø ī õ„‡×x‘kø?©TĖ>C“šwć)ŒŁÕŸ4¾l(EŗŲ–öu^¬•†į2iM¤i+ø"ō{KČJąž›f„¼¶j½}‰¼ZMæ{GæÓXŻü|Wu=c˜d(¦Ć…AŠ>³Ļ²üŠ©•rĶAMŲ<ŁĄŚ]2ę!•.żų_³§iÓĮ7ÖtšĶ·ūķ]É c. ‰ŌÖvęķ0Fićō¶Öf­īB‘ōnŪX@§ q .¶ ŠßUTqe0C®“š‡eo”U m±+)Gmé_„3Q@s`l=øń”xbJ¢ūĀéO͕ބ‹Ų$-ZœĪ¢$Ŗ.#ąĒr`č’TL~ÓW*62šDĪ“‰2ž¦TŽŚńQSL!SļƒIėļ7 ‡=̹É“cĒ.„śQQŌfį‰jC½ņ ņ‡‡Ä˜†Q ¬ēR?Ģ 4ØŪ$ ‹å×śē2}tyښ>» łÄ›šš„̾F}o ”® J žL-|¬¢ŽČŹ3ˆ>Jéu›ČSnoY³VøV”ƒūā¤M–v’|c$ßü7:Ižrk ¹©WÆ.޾|Ÿ}~żńuöńõ«×dōł7ÓeūōŪåūM>\|¼ų巋æķ„ÆZęyq[ĆɅ#ZÉL5rÆ ”€±”k­µv ä¼ķöØ mO›?RQ9¶*,f¶¦iwā>”¬šŌƞ†Zug+qqØ4tÕĻzRœ®Rü“Ŗ7>œÖ¢Y‘jDŽF8! ˆ„ē%6LTå$+Ÿ]“óĪŠˆ“`ÆņY¾žÖŪķģXӍ£·įµŒŠ]dP¢øÉHä_óhg¼¢¦˜ŸQ(ÕćAVYhą=\ „Ė Ź=ć* !é«Ül=ŻˆB%„NP“!½Ÿ÷«{‡Ō÷÷sialW:KAGņHøŃIMō(Žsʰ©ōÅiå–J”ÜTvLŹ #t1åĒšž9ņÄõŁ,¬šdäœA±6ų¢~¢¤ŃQ•†Cƚ õ Ķ©“æÅ)’ö~v­OJšÓō›»¹®gAōÄI6&ķÜųĘ:7¾Łćī!ļ”v†nT¬ƒD¹ąvŁ—;’Wż‰tƒš7H˜† i¾7dŽ»‘ČŌ~±Ķ‘Qe.¹m\¦ §Z؄½ ćyZoijpņ”›TNąņ©‚Ŗ×Į>“œ×kŠ+ĆΠҲX"Šŗ±±\I^°–ęz0b»Ī7OČ;¾[3±h€‰ČI‹Ū?ŅdCB&fĘü+kR•kom²ÖĘv`ėŁÓҦzÅŌ™z§”-žZhū•Ņ+ J8‘’h®/ä=ųĀ?N®}­fiÖü•X¢°ų .”Ü xµ|}Š ĆX5¶‚øėÅ,¢ėĄųśždE3QNnpŚhģE§ÓĘ ¬žėB3›ĆÕ5”ķkoģ7Ź&u[»6Yė$LŸ ó[|®ÉSĒĄpć£Ź© qs~ūh×csXYμÖĖ£˜ˆ‡ö¹ŁvŅC㮌†žq‘źJ*m=`#°—J°ą`Ėr#aņķč&“0N¬Xyč"rm: wļ 5Lü¬Ö¶„&b~ņ|øö5Yćż“nć‡ßęó¦0“¢GR w44ŗõ±¶Lų©!=Õ·T]Å iIžŚ Ŏ”%ĻŌŹł†‰£(Š9gr律ÕgiƒĒ3kšx6nššńõž[…øE® ,—±ŒZ’(‚g¦k=bĖ·ģFśVšŸ²l©Hݙڔ†æĖńO’Ń»w ?ø³!.†¤U¬äĒ ē•źV$ł‘ Ć2e Ė ćR¼¾MvŚ”m -U €įܙö"³žku 0|=³tÅz£G„jhĢ.ņ£ZnŌAPޢ͒^=ŽzXhŲ ‰QT(]ÓzŹØsz!opĒE…ń'‹«s-Ö䊷7®ĪŸ=ZOę`>uڜ‡3qji]gh9D¶’*Įł\SīK0*/Væaę‡ ¢Ó•¼Ž–#”$V©®ŽX¾‘ū¾v+€E?qĄ¢•.&Éx§ņŻŠĶ ³khx½©É±©j!³ö Ż6TLq«˜Ž±£<”><čSøĄ1³ Š)Ż„`?ØLRĪLn|&0‹īŗČm%Oz®›£› e4ēāt*ˆ9 ~£pG,ŁĘÖLÆNMyd(Gu;CĶłfśė›˜ēņ#d|Ē Ō)ön5īōÅŲż:ŪC‚)&P¶„lõÉ’Ź0m“'Ō.é‘OĆåḏ¹F”Aéķń4“„GtūŲ5yc XcR¶Ó<7 Vü÷eŠ­ «ŖÓ2g"Aū°N²ėi#É3k$y6n$Ń8—¼#ixąčI{x¢Ėo0>‘u>ėTnźzA½^å.mVn™t‡å4ĪʏWŠŌ•N(ž^®Ä}§lßĪDŗQĢs¶Ą™ŒÖā“i0*ćyŖt×Tjrļ«ĘśŹTKmЁ÷ńbÜM$*҉ņ £ ŗėĀŃ(Ņ "óaCĖ+A-C¤Č”yh” b)1\‚ÉūIĄ“°Ó“Aer(1U‘­ U¬©ƒĒ”ļXÜŤāšČčKং^M“’½§rŅ „ĢČō_åĪ\öāUåe9·–"ƒR§8ŲxŚh’–ø“QOĆCŗDšåŌž*ܬsæ{‘`8:Ż\śī”“ŠČqr'Ōs4ÜĪQ[iö^mŅ¢å¼õā+ĒŠc }ŪkĒ Ź[cĖ’,/é"ī[Ÿßdz=c3¦Ī4¾O…~čĢQPh‘+ ÕÜÆ½„¾ż’€NhßÄ\™3éóåż„ØĄģye¢šdøŹ Ū ^ŽĄū̦XD@īltņ¢r÷“±I,ÕĮLüź†5*ÄØ–ģ–Ń€$ {ŹšYsC¼Ā°Ę­ésmīb2MĀųµN‘w­wtŃZOU$Ȧ ¢ŹįOīØž:V“t=„½_łĄs󳓋ä™u‘<;* ’ģsõMÆB+Üԁc÷ ż`°NKč-qeœFķ|źūAmn]„)Ķ.½H¬™ißČÄCz'ĆŁøn'ū'ź8Ų=Š/Ģ—­\ÉźžéćµĮhlų7CQŗŠ„ńĖĘ&zč å’*Tį¦ÉÖ¦ĢćŗV Š]lš`Œ'īĄ?0ņ^Ŗ‘)õ³ŹŁ•żY‡ĆŚ£õĶ-£«u±4¦ėtŸsKtŪDæW”Į‡ÆVLØ<ģBõšJĘmv½ūH"¾a8ŲŽĆq#Óē7rߏi²‘ØfJą,įž¬ ÷üĒRZĻ–Y@kS‚ưÜrõĖĪ]æ§{·ēLh ę`M‡–±­‡õ”„1ū•™T£GÓÄĆAVO4±‘€ śž"eu]A{SUmöĶģwRW½ēo“ŅSK;keźš÷†ė½„ jźźŽŻ;|Łķ_š=ŗw؛§dŚyä’ÖĢ–ŗå&ŻĖž·÷«IÄhŽK~Šz]JL‘ŻA‘]LciEõ޾ļ”Y¬0ęCč±lź”Tzļ„hÉĖ‹iA±)O²iČ3ėy6ī)‹æ÷µzśKąžtŚ›zvżpÖģ€Ėcųä”"šŌ˜„G¦õr :/@ł2ēeb ½å ‰{Ū kŻBžIēCŌ‹&VP(E"{SYxKŒ¬§J•Ļ)Ć&ćĘ×'5}ą±`,n¤²Õ)†6V!“<>įŽ~ć1ØōBdp&kA"Q>ø7ŗ;*r2ɽ°u°[ķ§ŲþČó„į?F‚I<«{EęsCēŅŹ³Ł‘’W.<śž×t†©'½Ū½‘ˆ„ ¶“AQC"]åń`”3‡›øÅ5ż‘”!dw€ĄŪ/Å:¹ZS­dĻץ@¹¤j/É)7Dņ.–óõi'ń\6l'ÕJöÕuQ6śsgś¾=F™Y!É^u€¬fQIr_źæ&cö,ķxfżĻžõ~Ū+­¾üõ×׌šņć{łŸØ©¢]ą§×I»Ą”ę–^Żt¼s§³Š‰"j³ęl5%«±JņVv .ttfĪSjSšbrWEč²¢aOaóźÜ Öö±ĮńpŹś=n-ė5āN«ķ-ŗ y(Ęą”•Üš"3`Ü Óz§¼)ÉÖ7IZTo)diAšS!%ŪŲ4łĖMt±@yŸśĪd_S·~čäõj“Ž£u¾zŖßZA¹@ŒJŽzĮ…~-ø³økśÖaÜhq©A 2Äs\D]ĻVlҹćōē Tœ ;Ō._Ö֌b“lą3ŗcVłėõ-%JZ™«†ųFBmęgų¤yøČō©ā”x…<”L~ē8O0ćvy@@µd‰sqFž Sµ įŗ%Q.yƒfāļŽAR;Q=w{9t‘k€®‹F…Ż”Ģ׋ؓ|ĢbüTĢŅ;¦»÷Lžķg1łŚ­YLżÄ‘,¦āF³O=ĮņęAɼѼƒ«gš½źČс:Ć8Pź%͹yM׬j]ŊĶĆ_T©å$»—ö#<³~„g{ż!ąHAµ°ČX >”«©h{òąœķbYäĆYU#°ģ “[ Ūķ“xŻäs“Ā‚(bc9WCåŗ#ģUõž`¦SöݳĮČ ¹&Ÿ•T(Ŗ’.2…Ūź¹{g|§eĪ>ŌĢݽsµkäGėš5Óv–żfŪĖU.mǶīCģéCŁ€chr>R–ϼ3“}G–Ć „µ”¦žŒńąYĮފ%»5µi7)ÆÄŸłŠ•;qŪU,žĢPäaØfŲ]Ģxļģš‚ŁÜWÅ,ļŒT–¹Ī)»‘Ļōšž+šõ;£ķZ‡V B:wš 0bq*Ę Z5ćälIsćŌI’Æłd/Ž%ŃÓXæ ą#¹3z”„Zģ/nś0Ŗ akāōY"哐/Xķć¼%£¬ķńgņši×Č,'Ž·Ćš€…kÖK!'ó^&ķž…ÄĀÖg?ź”p„€Œś2Äćwl|‰6sEÉ0T«æ÷ąŽŒŠ—4ć‰{0ōŒ<å+§õx¾d±š°ļnAłt½*@V}§BUŠhnZ§G[ā ņģVݽ±.0ĒĻĪhGü©Xo ': 5‹Äg2lūmŲzÆÄcx#o–ŁD1ņģ…§rWöX -­W%s˜¤ °©­`yQNC“ģ Ēwg²«{ŖÕ³Ļ%ä ww»×¢%IB•žgā t¾ķČĻbĒK»Įk,°ŽeōŃGƒųG°5(ēYŅĆüQ 4<@ÕL#®¶©±Ģ‘¶5&½kŠ] ēŠ T5ŽÅm’ńąøp.}÷€€«$O[eéóV’¹„éÆć!ĢVć…/ T¶sc sAsų7Có“|ÆLޘnĢ7ĻTĮ)<r–w\ŅĒĢ–eĄUc~wäėżT«’“ ǚƒW;ÄWTŻNżé‰;tusń«Ėh'Ūļ²¢„VėŻ¹ÆšĒʇ×Ėą=Ņū¤¤ąJMŠ]ųčIF1Ük€ūoDz ˜R•N&ł#lœWJ©7CXóĄx?g®ÆF¾ńsü`€Ņ·ń7lķĖܓ3ąĀ€„ 9VM“·K\Ę ²B!©ķĀźš}ÅĪÓćčµ±“¤2ĘōW…5iA.U@[L¢p[Ń»bŪLY×( #Ÿ$ė¢" öHJDõ6 Ŗ‘&įg¦Q®%%F‚äFŠRƒxZJ«¤g7Į[2<ĄŸŲŽpök C»(ˤ2`ghżķF„=jr±\ß̓䳕³k° za¦ōj&±xc48qxb©ańŲ7Ƭńs¢‘aG¤a5xąnŠ8`‰ą˜dĖøø®&ļ“ŽčBXÕ“˜šXÜqœ „=Ś$ø<čøi›6`ˆ˜-UQ“v%jpĶīƒnåšK~·Éó¹~¼üĖÅÆ(4§Doh6—__eWŁė_³ŸŽ¼ųé½Ö–?æ‘׮޼ž[öéā3~ųxЉš7M•ģy{I#ė$źźœt2! ayNQ~R%ĮŖ‡WtįÅdlœÅ@[§HÅÜXĄ4ź“Cmm]3 I‰”¾Ą-Įp˜ š?·{¼ƒ,‰Śē^@#¹BäĆC–¢ņ“ZŃ e š&bxw1Ķ)„Ż0CKČCy@¹„č¼°LĢ„Ćy³Š%=(~7-”uŸĪ#1l4üF]"R’ŠF›‰Ų°B”gćŹ*æ—®Šˆ;ų{OWĖ›B£«ĻĢ’1m}Ēł°Ö+0ēąb%[Ņ«|Ĉ%pŠgŠgÅ©NTHŪŃ„T™9UX?p¼-õŠš3āŠĻŁ ·%ƐĖO)˜„€äėĮyz9p^ŠY ąrIł'ægū’ŗŽ ļƒį“K39–Fį5µĘĄ ¬-Ļ&gģ®§S=©ņ›œ"rõ”æx¶ĢR„õm‡ZŠé@:īeĆmĖ< ÖL !õ¾Qdא–d2õ$»”v|k]ߎ»Øó¬†SĘxn±éńʄ–¹„l£>VĶBsxą\+»¹%æfu®y®‰W‘A+] }ór³ĪfLv8‚œ‘_@ɽ.W7Īs•0w+P3²cy—ČCŽįTŖjŗŖš{<|ŪŖ\R}Ėՙmn‚ćk‡żV›¾Ÿ£š°%īŪi ž0ŒHÕwlØk@ą=ųŚtÄ<ZփÆ9£6,{ˆt”Ķy.åčć­]%C SBŽnæŖgM*¬¼2…vŲ”,^aRu«ŽF&÷Ł=Iļ,:Ģw8Ń!×AÉībøl”:ó.ŗ³ œ=SDµf¬I$[šęÕµR[0Gęnō>‚ö|7amÖr–¬;WēĆ[©Ł®kł;/`ļkśå2!{ ł:ÓśÖ7č tCY¹(Ł$ÅsŅ$®wī‚zl –n£ )$AõĶĢ ŠĻźśé†d5įqAš¶ŸĖ=—Ŗ™ĒœĪ =xQ"pŖ¦ģRṗ&CEBŠIĪ7…Ä ;ā£4žž3Y°ĻϤō>ŠŽČ)e[ż°Q&1w įh²ŃQ!Į]›„Lb"~&ŚQ×Įąx`dĜlLFļՀŗŽŖäœš\šd˚¦:‰QPśŚ°µą³Žõ׊ 2IZ U¼'īJڜ-‘÷eWÜ䧆•iĆĄ·Ö0šķ¾\³;Ś”sM_T7…¹xÆr°Y³It(Kvk2„‹ek¤Īēń,įHŠŖ±ĘŃ9hǼÓffbŚ–gKXw՞dj@hSoŒG¦ÖŒuGłQq‹`”WVnJvź¼É·äŠŗCChfŌχĘ* Ōą ”SÉMdT”U!ŃÖÜĶœdWkŗbĆŪšwšōü昄ßwņoķÅ×nE{é'Ž ½Hš %Y³•2!x-éĄVZ…ŗMį»w’}x†Ä:ŚłŽw£’^tȆlD6%•Ī]ßFö¦–ęy|¤»Üń\²•r¬.Ō>4ņü{_£«ĻŖøņåķu!&õģī÷€:f,v‚× ŻĢ|ŻÜŲķŲtɆMMĻü.#[ō;Ō>L²Nł-i~ģ|Ē“;3]9CÄe/ĻdIˆEæ§¶vøAńŚ®ććŖyŠ'€ßxn˜ģ(ćd2“Ć×h(œk7|7š~*A¤õ2/ͳtPUÄ% ė·™.‡[łų¾­åؤé5üēŚŌėFiŪg—h~cĒÄ`+ ³5ܟ+>ĒT¾ŒZä{KĖF'ģ,>ŃÜcYi™~šl†r¬P3ņģm:*šz——z:ș9ŌÆéŁZžņ¤!ī‰ «“ģtŚ‘š­u$|;īHXęŹLŖ|Kø=89«d“< “Äįp›W+ūKa±~#’µŽh®„³VCJrVFldX¶Uæę±Å“Ī„Z\Š.U9ö”źz½j^46Č ß‚µÕņ6£%䍝‚ljø„Js˜ė”, •<"thXoÕźAÉc¢ee— ©žˆŠ‡‚wcl‚ü9–Ł“¶N÷©~Üļ~ƒę°ćSL„¢#ÖuŲŁEPi%ŻÉQ"Äæ—as°Ńv`&r Œ8+Ūpq3īļø9qP[—­±˜ƒÖ3¦¹ż×åĪoŽR'¼³8 DkbL:1ĒėØ0±v”äŪį~/öü%t”y<#k€Ē IųkjFASż(Øōč,c8w†`ˆźęp;åś@_ÖŪy"¼±ƒG§²³Ŗˆ&i‚‹Ģ±WƎĶ^pj=ż­P)•cŒŖR2°ÅĢŪ^0KŪØžŽ„© X=GÅyd]ƒŸKlhšco—–§L±sg(*Ččaõ~MS@vĄyh57J–(ĆQ¤B•)'ÆL™ĮDw÷p”«ä­Y§23€/„u÷ȼ¼‡å%ö.€tA>›Z`-™^Cš ī;B:1ZįP6ĘqŖ%å¦$œ¼čČÖ]Ķ@Åä$œ6ė|kĶ:ߎšuR—eVÖ,WŲöMS€Ž²¢ I“ŅÓ)ó‘ŠØJmØøÕŁˆg.iĀ„@LÉŽK.7£…¢’“2-Ņ:ÕŲ“dx[ęM„źVĪ|āĢ  –¬;ź\)„ƒ¬—usÄ;}.’ö½S¾v«wŖŸ8ājK@tŠÅø[­ČÉĶ7°Ę€:āNfńŗšw"ƒå¢¤ģ–ėjūF<™„WÄ^Xēk[|‰ļ$šŁ@n._”P3±½ł¾å9Źæ¶QŃ«F|§£(€Šę”ß()»OD›;§Ó5¦ŌŗZ…Ń¢TøņF˰?hOų¹‚Y†(Öv°½—©}(ńėČ{[·1£j*}d­ņM …ņåҊYZė€ų„xy-¾KP®čÉÕ¹-P’Ōu(Ū„ ߝĘYш‰ ¬“źćĢ2B¾ÕĄ¦@ė5"Õ9Ų#2ōäž¼ (&ߛ”JÜJłó”7"nJŽiĒ6JøĒ‚€ĘˆųvŚG“­¬f™9pR<~0j•īń§\YˆūĶsļ7:Ÿ¾59Ęü½¾(; ±%OĪąę;ŠŃ3xNXf·ńŠß’!&5 šXiљGˆ„Č>`M@¼Ž¦bĻ鳓d`’`ŠdbxcaXOĄ…wó1“ęˆ;V@€<{s™ĆtZzg¬ü8 śŃӝļ\QAĮqJ“bĪ`¢wß’¢:lqy+Jā$+ž¶'}kķIßŽŪ“¦½Awh« “eÖīķjēJpŚŌ’Øx÷£Ģø@A`EåĀĄeœÅˆ«öRDUĶÓ“Ā3 mkżĖ/ D ²… F:øa–bÄÄ} „;Ōg`=Ōn;²µ±‰5=¼ÅiV®»x4'$L|]–&ĢŪQW.|įZ .ĪGkČōņ! µØ\L<B‹ŽÖŽ`aVšCĒ[ŁV®o6ų8aĶG˜5ŪZ H1Ÿ”åŅB9“-ĀYd#ƒŪųū`ā²yŠŹÖ«×„v\š2÷MżXVÖZyŹ[Ų4Äeß¾0“Ц©§9ˆ·’„kWĆW&#rī+„…Šz†rĆf<”bscÉŲ/#A`¢".ļŽ‰Kµ~„ä\š–WNņ$ß^ł:"ó×^²ē„Żõ]Ś‘ņu¤|÷õ§Ź<.3kʗļŲÕüźżoļ®>ž µēXb>čMŽ‹Ō\4†;}SŌH]ŗ?=˜Ļ?jŒag…ŽÓ²Ŗ2‘Oū.§-[@k#õ5)³Ģ å>v7#R!D)JCQENk•1C'‡¢ĮŪxz޽ćw¤PR§Jb"YċAEe^Ń”Fu¾²>¹¤Źī5+ŹÅžn–ŃQWŠh‰X!’ūžĄƒĆļp½pöƒ›·źR N“ĪSJ¹Ō5Ė£ž}ųx³Ey†@,ćTŚŹEeļR‡{ †­E®,¶ˆ}må½°? >rS„Į…i `4;KūA|D 0_T¼!1ŁMßĘfk Ī•Ź<&āxE‡„ōŠW¤ö®iT~ÓŗņŲ§ĆP“NČÜė <ĻnwLŚW—Ė@—(„Ō•‰b/rOI’Ō­ƒX„7sŽ|åĄ«t«č(xŁ”—q¦Ä®x!½”õVsSM“Øfµ|²ēŠ¢9ɐ¤MßYÓÅw{āCņø+ŚÅъŪ:ņ](?'“b”Y·‡»YWó9Š;Jx™”Ļ#9kŌm˜]Š×v¤.2ø»oh "4Må€]›­łįĘō𵦁x}2čį®­@åéQfR)»¶3,JE…YV‘°VØxŹŲ-]V³ÜśJ< Yøį_›<(„p.’™ĖĖCœFšĖˆ™qŗ†šČī¼Dµ„±ęzĶīŸ– ąW·®JE”`ŠuÓ «ŽtT7®ˆB¹śnOŠ-Ä+—ļMØŚ€XHD¼č؈§—k¬brY«ƒI$kmĶ-µL–T‡œ”Wį „ģÓ«‡©šś”H£oräŌKįˆI>£pt> …FČŅRŚLfTLc>:䯐”ŠåN¾#EYŪ»Z²_Ä}Ŗ™7U„§ÆĮüÕ©h‰g<(Œ•1ą(zOh“ĀRg«",ŹŻĄœĢ"'ĢÄ LģO˜<)•õ]ڽńuo|÷xŸ$Ī5Qś‹Įˆyv£öŒÆO³Ń@2¤ ŪčÖ»„āBtėĢøučņĶj׳ÖābŖ”½NiL1įW-¶ĀŽ4~ėŁ8'n"²Ņ°’0ퟲƒ9M‰rUŻ Ł?ŠźV¶!.†¾Z‚čeїp7H²OśhĢ4؀X.E.ž9 -3Ęž&nÓ՝ĆG.a¬¼ŖXE*)2‰įWn_Ä';˜č Į€„O&£ūąŹŽņ°óßSHĪ20…ķ¦­Šźt6Œ×ĒŻÖµµdč'``Så“/ö+ƒJ\F¼>=Kźp'é`ŅŖ˜§‘0W>P*‡n|¤|b;Hš±Q‹ø?OrČč Ļ§Ńœ”žˆģ)ه÷TŅ«6ĒčcϤ—’e±Ā0޽ƒ#{?‡˜óXƒĶĘðˆ°£Ė(>m8²ļeĮ*’8|œčpšōūā¢ä>¢`š·m­įDLwśä£įłÉ›¶¤ŗŅ­ ć•o¬™ßÉ śIV?ąõFįȕ%ėn L³ŪO$ ™qo;й”²9ĖŽ 6NŠx.Ą¤ķAD““!ÖÖaØRkFŠŌā;\Č?Pȉ˜aŸXJņrå½qxŹĪ`uĪ¦ÖĄĒiˆ…‚ŒŽŹM$ƒQxĀ9õˆ“’Cœ ā4rŽ›–-ŲÜ{SŠÖ&;ȚPU˜¹•ęyf\Fūśõ—2Ŗė0Ś×£@T;ērP2¼Ž‡ƒŅn+`Ķv#ė ģ‹»ŸW‹ß¹ō:įĘ=’ó£Œ!x|›ŗńUm>JĢŻ‚Øš$;˜¶…|gm!ß=ŪA¢śź-UĖcښgw CšQ,×j9E‹˜L”Į¹Ėāś6ē‰cµÓ¹ņhsč|ūl“ą1 ų–ÅĖ+-ƒ&ŲĻT’öĻ ~P€q+ MLZcņĄ-Ļ—•ź6ļÕuŸŌ*mqJyŲc%¦N@»éoŪ²ˆ gH•øŅČÕ­ébvR“{Pk€ ü (:Õ¶%¢Į7˜¦Ī”į$~„{L;ÉļÖ4ōŁn"į}š“j­µ$KøŌ! #3 ¼''N7 ólļŽ}“½Ļ?ĆžÖSTģź›ą½óZćƒ1H“^–žŅĒ׊Ö+€‰ŚĄZzž¢øß†/T±Ł»}XŁķH–hˆv›&ƞ»“T6‰h¢_P“f‚|ŃļÉū¹–,E™FMŚćėk D‚č+Byj|¢, ė(ĆU“¹²–ó…·9(—vēŠŁ ŁĒŲ(Ą0„ć© o/N_ ‡#¾«!‡:śˆĻļ!ⱩϘ^Ė|"$^VڇKĮ tMµēٱ‹I°Ŗd»óž%+kP}Ó¾n-ןŪĪҤ2H«Ż‹}r*5y©‹a,į:¬¬O2»i×ĖwÖõņŻøėÅŁ’¼”sꘘķ:®’§żH­)āœŃD)0™į(E€tōMHXbr7ŗ§š~™k)Öł²ØņØ_Ŗ°6+ČbSųč üÕö•tŅe™¢ƒm͐œ oSŽ|nžÆI" 0‹ėm63°ł v7×”óŽŒA§5Ŗ` —uŁÆMKŠÕ1āėYwŲ4š©gm#Ź„45yµ?¾:ĘiØł p`YNfŠuaYi?äœx^ižcW’ņÜä7ń®L²g“'n»Ų_ŒŸĄŹäNņ%śqw †sŌ° – Ī͊ŖBĘ>ÖzĈі$A֌U(łœuŽėp‰©Ÿtķ;ķ€7ÖźRqU¼Ć|(:ʏ• 0Iå[xyĢ’ŃÕW¤‰õ`üN»,‚KŖZ› ißD”Rd·š°SjGŌJllpK`ĄŒ–¶uŅŽ•R ęiø‹Š-‹+‰.Ą@*°PŅNśHšž™3Łį›’Yrä±×ØČĮ+åVŅ„ŲŁ‡ÜČfV’ĒOœ1Ž$cUķ‘Q’P±mXīĪ G­§I2£žs=i«Ć1ńĪĢČ,”ĆØ„fe’ŠA§¢³Šj1l“ņfļ˜Y—ń?Ɉ¦+ßYēŹwRä"µ†QźRG§ņƄ$†’‘™ ʵR8ÕxÕŖ¹ŗ!I!¦¼æĆcF”&@"z???NėźįŗīZdąĒ]Ģōā;ŒaŠnŖ•ź…enNĻĪÓeŽtאgļśgŁū!‡§ŽøEaƶpRÖSą%l¶h†¶"œ­!s» ĶWsé Fˆ»M[HKc^£½œŒ÷Hpi%qv p Du¦\)­g¢L™y :°–Ķ¢¬ų-]īQ’”u|xŖ+ÓIp&‘@Ū4ø =õĀÅŽĻ8j’önj–‹§Į)¦uŻŽŽÖÄÄö sŚnm)2 U€‹ŅÖQVÜx9q2¬ÕXH6Q؆‹ŗ[zˆż©'|gØv[‡»Æ”k—Zń犪#–ō3¬_¶5n„D©A ¢‰IcŃ N—ŗŸ&JN Ųą6)¦žZ[ļbi˜ ˆŹĄN[fÖmÉ©<"DPA\/ßR0 H2W4ģIšß„*ßY‡Źwćå( ‘GU· ­ō™“ēø jŠŲZŠ1Ęu7!rv‰=ŪÉk@¶Ņ,»N:łŠ“Ę“¾–ļ¶­lUƅx ‰¾{ē—:‹Ę-ĀÖj¼M‰c‚Y¹}–~+ÅŚyj™8ŹŪYp?‡­ŖÖ2•ghM Źt7čB;¶Œ^\ӓ|Õě\¾,̽ūōj•t€­‰źŠ'“Æ|CD’¦®É Ę#Wy„„YÖtĮ™'@ꔐfFf­‹ņA‘3Ć;듈0> A³ü†J¼ "ŖlR Ō ³ ×ĮŖQā—š{ˆ,`k<ņ™Į~G}Ÿ$L Üv§P9ł]Z¬is9Ķw†øõŚĘąŃź ƘW "œ”žÓzŖƒ¾]<”r{”õ÷0ėŚ”v;»A¦™žG²’ č®āD0ŖP †¤ĆŠĮ„xĀTé0°IĄŃ,īDӄRPīj†ņs–¹³³k×ä>Gb¾-Ú4ÄÄœžÅDš><į  Īō'aÄ{5”KKyF‘Ėq-…O2·i?Źw֏ņŻøe\ˆdŪs/Žk"&0 „ķį=!™ĢÖ"”Q{‰TĆ Š…øVhŁ••c%'b›!źrO®ņ$éDõŠ•L5½Œ8|#ÖĮņViQ_ƒJž]£¼aLnXĄ†•ļ÷>-öč“ķÜm>Ÿ—–ø6F§>®«nŚƐ¶U%*6ŃLü”6łģśį/–nŁ ²Æö–“c’ŌkšÅĄö=rZ”pרŹJpN¾®ĶĻÅK% ƒØ†Ś@gĒßóųÅłQć īŠĮ³”K†Šßdõ‰k“X<ö2ؽPŖW,r¤%l©B*Į¼Z‚`ĪEŠį44ęŽRt -гЅ2¶höØgA¾éšjå=›4T“ēĆ”„Vq2¼CÆĢ +m®5hmÉ«{Nmj¼ŽÕŪ£„_sk­åVźjÄøz*B 8 œv“fœeFzō;”d˜rńłß©x7×Ń;WĶUŒ™¾?r‘'hĀ"Ų Ė¹Ż7³•'§§“Ķā;k³ųīłæ æüė! üĶŇÆßAąü=`ąoA1ö鷏—ļ.Ž*÷X"…žĖū«ģāÕüvqłīJ>Ż«»wŽ^|¼ŗ|·‡ß# АWKœh5”,]@RÜ6q‘#ŁĘŖ…ońķŹmŌŅ Ļ«r]B.” ‰g¹Rī”C"s™ė©ž ē²ÉĪ Õ噘ö”8¾Ś:S6oƒkóIb›SÜ­YgTĘv¹m™ē˜ōŁŪąS`ݜ 4ē&‘‚±óG™ 1§*&Wß¹"l‘ŅtõQžW=kŅĢÓ³ļÄČȔ‡źÅmL/0!Ć,Tź_F(šĒž6±%ZQ|/l(¬¬ETĒĮA¦g٧„ Iæ?Ž÷ˆōžd“ęqåSP„yōŠN1 ļĖŌ£°Ī93ą$Ŗœ–Lī V¢¦2f`ģųAܜąw(Žb¾;äh`Th.°ę˜ā€  €a“Ķ :²¢=*Ķ\ģY ]\ŌdaŒ„*£žÆž—ź–iż ąŠ|ŗ"i¹ą)6ēyŚ|ņܚOžåP,”łSßĶVLm؄ĘHR>7Ė®”R3Źė{¦An§²Gąŗ#ߊ<†Q«:ŸÕҬLĖ_– …CL^l†`b&D»€›Ø‹ŠķĀĄöāąI‰B«’d({OT$PÉec¶ŚÅÉŽ/ā'ØÖäĢåeX`“(ühåōźŖ¬łGņ©‰Ž+Ó=rÄ÷„×vćPµ½axüœÖ“50Eä|}±·Zóu¬ Y å$owHų³æŠ‰ū3ļMb!ī¼’€£ ZŠI×)žĪ!CßrŠĢ½ä!Y:ó?,šzXōżįß0'ķ@łæ6vdv±”h'2©© ®xz+£łćócAjv …œI[2ƒn=DÆŌwģĪPvJ¢²5¹ā+Š.“Ę-·PYŸ„–· TŃĒ‚)Š7`ۦ7~ čxÖ›ĪŁWsJbīĖź\+åĄfµ&}« 0źnÆéā)ą©SߌC–„å0Ų€‹y¾6Ҧi™³Cbhpׁ>ˬy ™Ń—õ²h­±0ęÜBz ŸW1¢ōėĶ%Ÿ³%„¢@öN_āOÅ^¾“GŖā *xM(s— R’‘‚ÆņŌ&Öć?²™ļåf„xo°†f—ĖzŽj‡%’‘tNł“–É5õ£"aä‡H‚=‘‚6&‰ƒ˜Õ™ā¢]Ā^½m8¾e³>:BL>kŸ/*އ¬>wÖą?uźCé ŚéūéŁK»f|,M½“ūu`%JŽ‚x°>±ŗ­ųlōÕ8Ś1c~Õ~‹„F6QžnēÜė®Ć“ĶŪģH†ÄA2eTģ]©^·“ž1å5 ™K‹¤į­a铚`śEVļcFV}ż ×flC.ēŲ¦#i#vZdUÆuyĘģ̎¼U§£×ž?Ål6uQu~ųė\d„7„”ėuJ“MźcČ($«kį$»šöŪ<·~›ē5Qż!Šfp¼Ķż$GČ\3,ųåŁ!Žg>7UšĘ0¹Ś•¶™®•j"ö–ŃčFr”FwyoHyźbœ8öo©X‚Śš·ūI+c,:įĢ,ĪbFmbģ©ƐÄB=.gņżČŻ>ÅrS©¦\;˧kkWjTą]ļ ČŽĢ@į l1`uńBīaAR×_§˜g™Ž Ļbgė%z:l:S=W¶Rš4脭Į3`yÅŽų(£S\ļ7 ‰- m‰ŪćyĶŠ…åé»w“LĆóĆRń­ƒ)Śß®i[n{yA“¤k¬zȝöY{šTžrÆrNÄhkKx·ē¶ąÆh×V¬›‰»H·—BŃ~sē8²V! t`—*ö†NŲ&łŒģŽsĻŻĒsŽÄMFā§.śĘkz»ķŪ @Q•?γĖ(,….6ŗ¢k)RӞę€ßbŗ9h]ö—P‰³ŖJ†°VPH<¢ī‹cŹŽ.¦EJ9§kŸOū$ūS€Tš|QRb?ŹøS™÷óČøkѽ ¼ .@„Ē%2¹Œ§ICR\yŖ=°rŪ1;r0ž9”Q„‹3j!•&W!źkl~āk@H;ĶōŖšņ"ŹŪœĄÓFkEš“,jŚæóÜśwžūw¢xÅ ü=Š3³źĄąÕ]ėä!/w‚įŽ¹¬rkަŅ\‰Ņ‹6qŲ™ęXĶ6ˆKNGģ3¤ųR„|%ėŚ³\1鑆½¾ķģc¹Hm¦J¬)ż˜Ņӗ]Žō¤ĀĘVĮĪMyy„łĄ–ܝ§ÄļMbänź y ĀļŽGįvŸQ*SŖz Ö8¬ą‹ÅˆL€¹ŗżfLēøiY*ēīĖØ1¾ØTÅLe­`BøQ*Ż£ęEÆÕÖ:™ęĖ%ŸĒ†Ņdö8„ż—ķ5¶C%ŽŹź›"ēA2`Ÿ¼ž%פJųŁŲć½—Õ«{IŽĄŚīG;TJĒ@ж{µ}扬Æģ[eĖ%^¼‡J„zÄAY”ÄiZԚ×U5œ }Č2ئ!C3ī :‘ūCĪyģĘŗčW©f ŠĪ‚V[AJ„ͱ,˜Ō 怎‹×Ąn1{9 ’ąĮķåjĘžł.gŸĆĆ”EjŒ®d 4·Ż””p­„Ģ^œœÓŠÕ˜R×įŽUŚqH5.ü«aĄ†ŽŹ‹.āżc%ńČ<Éz¦]?Ļ­ėēłQ1˜čĘŒśčū'śĮ’d½kō쳑Ążöę%ż(ĪŪX¬Ž‹rd Ī]N÷²šB_ūCQyAŅńVķĀŽ’­Ģ½įÜ d ¼Åό’4?<ńķ ·$ož;bż¶YQNŁ”°Ö†}-;čœĆ«5Ōw»Õ@ۜPø°1wØ®›öZw`«°v0Bā¢Ą6Ņ5 ¹˜“ōBƒ}"ū?óV ='šœ½Ū́l2b;I©b17ņžÆæ×ΈcD-~€öĶŖPvƒm(ža‡A½Ł0©CŲ?Ž_Y-„į1y½ ¦ē–mĢĆ|yw+b D5öS¹tż&€!9Tõ™’nn[©]oōÖČ~ÜNHB«ŽmWˆĶ{{V÷#0”K$Ža¹ö"W[C×(XŁŁźµŽa¹ŠŹ:&žF¹4TH¬+gø†¹+n6ä^[Al™c7¤ƒYWl%“a­ņ¦ż¼ÜyŖlLŚÉ›ŲRźäÅąq’”)C'¤kŪÅgķ«čQ`]¬Ą]čknø5TX“év”ī ĶąŃcNÉ#ōIqŪhŲ-€ ͼ‘#‰EBj¤­ "_ņµRöi—Š’ Ēˆ-Ž#"¤“ŒlŚćóÜz|ž{|Œžš‡Mņˆ‰”ó~KˆćUķŠT(y|¶µĪ™¹“XiĄ¹-«”šR”Eė©ŌQ7Œ¦?Ievn¹ķŗōDV7ž2ƒŌ&ĆK¤Į5ˆęČ"čŌkØehöW¹øÕ±ę­9©3^ ’ėu¦‹Jl-āĮQTšpJ;5–e]#g ™hMlģõÜĪ3ŽņdŲ‹¢„R¦+õ%OŽ”fŁ*ĀOCnõµ”XµA …G>[Xt>-*_²}Ūē„ÖPh˜÷†ˆ&) Ķw¹óŹ;Ą*ųfŒöėÜLtś[āźÄtUhļŃø.)•gĻćó˜ØaŠ•?OŁšŽķ7ģ×ć4Š{Åʒ¶‹F,¾³Æt“‹ĖV+fD`ķé~"ų/‹Ōß3n4ķQŁ»ŗN6%?Xw_›–ų4j'40”ZŽ2*×į,2¹DŒPždÕ¾ ³‹‹éY×V%™²€MkJ’«ˆŒÆ*ŚĮ!•hŹ[±/kķŠsn³B‰Ę]UļQ‰0¤ļÖ”)“ž+/“_@— ś½Ś¦~×įé, `W„+ské˧)ʜ^“Ė0ļćeaĄÄ`ÅpԈ+-—:Ųfk„6ż^®v>ĄøÓ…󍞳ņ$`śó“Qč¹5 =7 © w—“č?¹ļ­é69z/ž²čā8l™A Dᶤ×f%D"’±RēŒP=zr9³ (d5#œ¦gÕĢĄn)Č&ś}1“Aóā•G5®~!ŪūW7ć į^:ļĄńg‰ wHŪ»KØfßI~š­ė`™l›Š¼LŽ]huZėĶG† ƈ jéj>Į^jY¦Ē?8FŚy‚xÓ’ć뜣£×+ĪėN†xM¦E™[f¢ōhFxåņÖģĒŃī¶Ęؔs=wAmŅźÜ½c¬ÖČŽ}ņŲ}qūī̼@¹q;ī]ɛ^”ŪÖ4ŽŌcĶ„³×QµĆ¼vt…†/aʇfŅĆ[O<'1VŲUĖI²%¢³÷‚ĄĖ Q¤ˆqåSņÜŌuiéŗŠZ§Ā ńļæ»ŗ,Œ^©$t¾““ĄØnµ¤9Ŗ t šG©l2ƲGh^lŌHĆUsĶé9J²e͟ƒHĶ|ˆSRƒĻA³4h¦vÖ<ܛų½Ž‰7Ļył‚S ų£ÆÓĘüF.?¤6œ|W¶F(ł¼(±&Z£“KYĘsvŻØŁ'­nvŠ1EE&§^®ƒZ$Ęō :NĶ™k[9ŗƒ#>نgŁ'Y ᄼiŃFč¬ˆ>”z£Xšå„,µŽ¬,—N•å0\:‰ ž©w“~³F¹°ūj›Y>R„Méh’µ»RŹ[°kŒ ņ¹6³\z½:ū1–†³LNŠhĻTx”ÕCuÓfh{ˆ4ÅzŸ³GÄpd÷É¹ŌŹbœējK¬!×jaÅFuÉf%–äB9•×p¢µ‘Å-L(¬ KE-Ō_ÆSNø»wĘŁhåxw“¹šw‚ąń."––<µ7ŁBždæ±ĖŠ»Ō”=zŃ-ĪŃ­ĆńÄ–@sŠ9˜'̮ʫėHÜWwl…Hq–ę*[ cDh’A ¹čjžĶ•ŁŻŁu,BŲ‰ £ ”‘+¬KčåTQčĘBžŽD†Į½Lh³ĢĄČIóD%& ŻUģĄPņŖmn…Š~ć‡tņCÜĀhy&ÅDøxŽ¢öfĻļP@±lŌۜū렔że$9/§Ē \£Ė* ›xͬ¢MœŲŠŽ~Čp'–YiIŽ2Ēķ¶ y¢/^›OÆ£žd8 ē#7œćŽn™X’])fź”—šc÷jŃł‚™†ļ½CŻHc×ī½QdEŪׄߑs‹^ĘXćüŸ…^Ä@U°iö †ōfų,³˜^¢óö½XKc±XäIéyöŁ¶™TÅŹµRįEN¤·āŲ³®nŲ™­Ó ¬†yÄśŽé×"]Ž¢‘ܦhF••ˆ{ÓčzÆØEZq³§@éÜi4u­tgnk ØOLœµI ;ėH€?ÓŃ]†ńŽ čÓ3ŽiŽ,Œ½Ā–ķ‘o+»{=lV<7½Ŗ‘č˜üĶ«\žć`^fĢtÓr2»\$m/nųŪ€iPŪU¤©%ø dxSÖܑ#ĻKXŌғѹ|]]æć!>ęįß5‰i0‡„Š}x›­6|4Āīy@”0RT}“Js=ź„'ĢŽ¤õTŚ‚0q‹“ø›ķG∶W9“Ļh;n®\Øŗc<‰®‡dĀ5”Ē“fF[JČ”eĪiķŠ 4^‚lP\¦+¼Bj`īæEå,Ä ¢'Öwx[Ķsžhė.mÅ& =jŠqYŽ% Hnc®“«®”’•X°“tqIW®7±¼hbTVšČ±³1hda,ģc·°’õ\ęXķ0i9É>¾¾ųōžŻå»_&ŁO/>gļ^_|4”¶‹OWiūłćÅ»WÆ÷Ņ›ūJĻ”ÕN :o¬ū¹É÷*¹rŗ ƒ4± śž4Kóā\ȃÉ‰ądMĢi ½¬>±†eUxøŹĖEd‹6†{§ģ¢ØÆgš»”ŃgÖ³ų\ÅÉÖĮ¼ÕķĪÆÖ\Ā—px‰ÅłR-†Źī7Æ",£Jł¤b…ņ٬ßÄź®ōG††Æ$ąt°€°ĶUAŹ$¤+ź%ķ'+ø™’<Ų Ąčą8ųŽ“ĘźČĘ¢@KcĀŽ{£ ‘ā › n Į;h!ō(»¢ėēNH™¤ä®ŪĮæå@z .œd ~kŃMčź*“N{ÓZóš¬dĘŁ$VZ" øżß³’4oń&/ŃÖ⬞–ž»T_aG‰XmĢhŻ[Xh»oöIlÓ/ķCĢ…ā#;bYˆƒČÆCeu"^ø±f¶ą‘ꊹ}J”`¶sŃ)G;ėMn*‡YnĄSTGu2ć‡ä|,I#Į<Ā~Óņ t„oź²4ė &C¹åÓLѓ‘)zā¦h ڧŪ9÷0S„;mņ)y†uēĄY&/É`ź3³×|żŒÄ ,᧊ƒd*F1›ŪՓśåšeLŘB@ £õü³¶„;9™7—H“˜9Ś3A±÷Ȳ“*QńJ.ŽAŠ>ŲGęšlUĪMłĖ ąĄ;Z*߉d½ėNļ z8“ōZćėī0“ŗ7u€~µččj h.d«zZ”œø©÷k ”Āģņ3ÖdÅ# śrėMĒœÕĄ.ĢŠ’F­+V[bB&Ūü tLŁZŻ«}Bčķõ>˜#Łä—}Lė»Ó-“+ēScXÓ@1›uŽœķq–‹5ę3˜²V;}akŌlĄ@Ŗ“FģS0˜(ÆĖ)ašž‰©’ČĪĀĻÖV&\SƋ­?žnNW¦›č½T©=Š*õÓxÖ“IņZÆT_˜’ŃIUƒ ³Ķ”qyXūc€—æé¢$qäĻ•Ļnļ0a1¼ ‰˜€µ–ؾ{½8Ķf>ŁĢ§n3ŸŪß7A–üpŽ(ŽrluøńKėRĻKĒ)jßäxöß՝•':la(%xn[ĪuōTZ”Ū½€£Œaʵ0f„³LŸ% •}Ńźś†ióį>Ŗ0öĒŪ‰ŻŲŖ=‡Ų3Ÿ5ęČ[%&r¼ĶaĪ•ĢbD#`ēB+ 6Y#›Ił;4”Gnµą ū*4'ræ˜u§Ōor› A‹ą¼aķvYö]f8ą”śź:'“0Źø\ØnĖĖŽ^OÆĆÓRģÓī”"æŠTĪś"ē÷#>œę=Ԑu×Q~ZķÄńh”™|ų„/N̽BP¾½nGĆ”(M± ņ ¦?ŒYtēÖGüĄ1«ņlZķłém¾xWč=ø'Oo²Y/*ćębœMyō°Å*Aä„‹O‹5ÖŻ¦÷«ĆN’˜|Ė©ŁĻWnB$‚żø É"ófķF€° G×5ŪǘAJrÆøqšłfd@¾qņĶ#ž;¢ČŃ,—ļ,¶; в×)g•?]R•åB”ŚØQÓDäņŅZ8éÅbv„ūŚÖ>:aõ©“}•[yū͐…QöUŚ„¹ōø‚ Djž^>µF ӊ¾ _Ę=øÄT_FB&Ü ž#ĒÅLb5ėfŸ-…˜+{¢htlņ޼@”Ūł M’ō°ŗųĶZ­ģ) t~~?‚üœćē€RŁBęzć†LÄ[ß”Ę乤%ƞ äŪģ%! ņĆ+Łć’Ÿ¤20nÕj¼³^Ї¦Įk߆¼b“ād`¹Ŗ¬vśśBšĪĀ›¢ŖZŌ3'.n-ņ PvByLuŞŻ×~_¬Bl,ėn¹g,LqƒŸ–Ų~¢”uź–Ū1‰¤˜ IˆŖ‹ŠK95įlø#0łĻ’M(¹µóNmŹ r·uĪ{5O}Ükä½9¼óXč§}3õPó-Bį¼? œņčėg#ņĢ Č³=‰04bAmzhgܪާ¦!‹„ÄN3ĮKNé e7Āå{ ŽĮ‰5”ĮüE4ŗ§ā&bƞASåh`’XˆŹō¤cĢäK1_8.{ĆR+!h”=”ońĮ(?“·vĪ;VÜ7Ö®­Ą. ×”Ėl ^l?ą*w‹šÖ_2Eü“°Ķ[»e­ €ć)²€ļŪKį^Ę#Mš3ŒN ½­YGīėÜ5Ŗš‘õke;­Ęķµ—€”ŖŻß÷6\ZĶ@'Ž{‹8™]h3!̳޽£P»si°p[©śÖ2"UdAÆ@;‰7JtŌgźSi,nE™=0ņ‡«š79jŚĮR†0gUkPŒµ•Š5ŚĄr @ b™Ū:š4Cm4+e,Y[ūЁŁCø®,qBéSMŠL5ųkŅŚ ć“M¾sāW–<‘_JņNJnĶ“GīzJ­ŗ…8²YūĘČ ŠA@Y“…xĘū0⽋Ūш¢ĢpĒ·ŪLo­ˆ@”(­™óš ‚=)ĆČRoĄG’ŚnS”Ž]”•ģPŽŁE ųMÉūWžōx§;ø¦2$•¦7"'c½¶Ŗ„’Ä—ĘÄ l‰c'~OÄY» ½ś8°>˜ŃžFŶ)Ø„Ļ‰VGjŠįL®g³¼UԔ騵Ą0®,Ū‡P,:Ń!ūvdOæu{śķ-Ķ×¾FnW¬UŅAī}ÆZoÉKī++9öXLw :£õŖÄėmÆöŽ#°\„«²RM8 ŗŌ ¦MĖ,˜įįęŠ£S׫Æ'_p rĶĮJ­•µŌįµĘ'"ŒØ&U£ŒĄ.ÖS•,”¾Ž”Į.¦S?%ICņA6ó’ŠnQūםö-ņĀ ö©3ēb“» +Ū ȚpoY&]äŪ*j®Nš]ēŚß–“ś Ō:1Ļär!ČMjē̬P‹£blŖˆ€ō&W ¶ŽåYå |ś™!§Ż¹Š° )D/,ł‘®bÜ ŁÆyöŖ^ūˆÉx$$5q ä4%ņTķĪD¾’6ŗ¼j«$˜„žhÄÄõŌØø TkT)Žn9 Ī)ŗ^X *tÄž[XXäU«O÷>*¢(&,5²ü*ŖA5ō9E­E®Ņ®ż~Æ0Üų÷5¤RNy„ńŃ(.r“ʧ‘?÷K1U²kcC >D`³¶ŹF”„z@k`fž1sŽ\HFÕ‡&,ļe6bt‚n"–†dŪE“O‹ŁD¹fB“ńčīž1?gźyʕ…¢k¬Š—il”“ˆ+d…3RņŖĄIcŅ“šc®­;=ņŪÆ7«Œ­LB#2É®‚{Ėæ}p/_»Ü«Ÿ8ī}|ī%M Y„` †TRüÅ!Ƙ‘ōó‰ģS‹­ßlūwnŪ6ŽD®A¹FŸėŽA > lų8ń³ĮõFńcĀĄŻ³śe‡Ļ£®[©Ł8Ķ”W¾+hĶhüGÆŅŅÅ?ņiPe°\·ŠĢ©Ś8fUެ“'ņošµ[׉~āČ:ŃrRč -9 ŚcŒńū1µ¤Mg@Ļž*®˜åłJ•†÷γ” NßRƒ5ÖX“bŁą'—xū{§Zd9,*ń}ęż,ģń\8PNuÖ+Ō°L½>œDæ÷h$“Īwuņv‘Ņųļ˜F•]-K£ˆ8Rq×͐qj 0I•ź ¤Čé^Ėīī2ÓZŌ‘$®KttÅJ±¬ĶCĻō† ½oČ7ęŖĶaźĆ„‰ķ²w{Ó"a7?j½žŹæżUÉ×n]•ś‰#«ņéõśģѝķŪ€ƒ“)a•GҳcgČ©DĻ,óAŌW]‰·ā­ o4Ÿørj›SA£pŌ¶ļcœöYöÉ|†Ō*Ē£AńĢó1??&N\6}‰¦^¤3,łé§.üR¤Ż±ö$0Rd~©i(yp#؞ń5ʲ~‰v‰`;ŁxēJ½¬O@gP¢K¤~ŪG)¢^±£éźj&ö{, Š6ōͲ^FuÕӎ‚磣ą¹ć¶ݹ$ŠeXƛRL5KĀ1ōMU=Ż/Ž]łŽ¦”é«YńOZCxDžLž—/ö!iźd% £\FŒ|©9s”ŽØ£…ęąĀv»ŗ£Ī ,ūCŪ,̊ēmÓõ馹¼Ž)¢%Ł"µį¶pÜ×ö!åfŪųŅl¦ŗ0¼ pu†vŪ”§eŽŌ $īeFKŒ`“IĄj„ŠPÅĶr"fhoļ™ˆB$A^E9‡‰ēv±ė•k=”ŪKņ ‹BUJko6Q6ŖeĢu*9F@Ó^®Ŗs+ÆÆ–A?XģQĖüׇe²ĀJośĶ›b©iåM}MÅBÉ©9ŌE 9ū,ŁjēĢĄž¢n­vc“Æ;Äf]Ę~ĢsW§ł|(Ö¤%ŁĆįՋCƒMmӍųµ“SйŃ~õhõÖóAہ ņÖŽ1(”’a Ä0§‚•˜}%÷ŽņI”Ź.‘sóµõ64St‡:¼^[o²J»=øčS¤®˜U€’ćĮ/)Ī“˜NĄ@– žN ŗå©f¶x’­“vyxß¾zóčꇩDÜÕĻæ„©÷ń}#’öK¾vėa©Ÿ8rX~³X^!o—¬{i%ĪÓI¶łŃØ]ē‘·ė<+…‚5DŖl“¢»ųU»¼›­t¹±%¶bŁ€¤-Ŗ6Ć4µ–aZŁŌĻ`…“ŹŻ1B-E4īģŽ0K_TŽĘŅž›ęÕuZwܱ”Óź%F¾Źē÷ĻhĘɅĖ]õåaŲ!"4ŸŅ{·rW•‚ßŅh“Ū2”_́b¤ĖŗÄņAūP¢ZÓ浫Aœb͌ņ@ ęK|éRåp+ěƩØR©„%CVl)ŖPü¢š]bš°p ź–uo:±Ō’ žM*U’Q9J4āŌ~mxåv ¢ˆ4²¹q'ŌlŒįXl"­Š<žré›N_¤ŖJęnĪŅE1t© ÄæŖ·N³Ķ£Ž GŽōhÜDč Ż_F Ź1§•)ŗN‘ć`¢Ø}G49ŗŗ"š5tĄn‰½'GÓØV^=wż×¦nM3=ByŁ;mX|±o#6­ĻÕyV^MŪ5hh±mœ peķÓég/eŖœ…ļJÉ鏏yx%/Ļ®WC[“®«?Ž$cĖ/ėzći‡½åāDåĀ]2 PLéü/ŗS5ŹuįŗĘ±Ņd+¤2‰`E™Ļ¹ō­”ž3Ål%–‘=Ź(Į–a²]Ø8ę@ ø@ÖB³ņ¬‚ę„ć¢S©JR˜y”$/J;.āynżS±t‘hjüˆ\×7%ZĄĪŻ$Ń4g įx3÷/ sŖeoEq’Ģ÷ęyP䣑˜ %vj8Gu£iÓ@?ctJ]F<±śõzcfÉY±žFVŌɲI0!TFĢPšd¶$вē€)rĖĢCyŗĘö ~˜÷Ą ayB“—[Ȕ±°ih1B.딄Æq©G.sådFąm®i]¢eŻä=‡…FIŚĘŗÉ·Ś‰ū ŹX+2z‘}*ܔ_€ÄC뤖²vS€ŻöÅ1ś™üŪw łŚ­“~āˆżģƒkŒŖ’˜TY°ĶēŠb ,ņ{ÕT¬­Ģ xMyĀÉO3ė£6¤Gކōh,‚õ_Ą‘Byę]OH„ČQżK‡žŗ+Ŗ0©b-붃fšĪĄƒ8ö?ű’ÉĘžģŗÜ-œÖ®Č»č p4kŽœ3#l]*ŗ€Y$EI§ĪĆ%v:šKżL-(ŽI#ūc6Žā.Ģ­‘ī­Æ(؃ŠóĆņĻl%ęKŒevÕĄ_é&GĻ·ņońšµ[~āČāŃJt–2Ī€»VIę÷dÉėŽžjDõ=ö6²Įٰ­³ŸŖŅsˆG™—÷  /1„zÓDĶąŚÖ‰DԃóŠ!1šé[~”(›‚Ÿ¶»e9¢0;›ÉžĶڲåßąZ!qZŠ\{Ž»wŽ ę ?łß‰q5õ¦)˜HPx}WķÖņŪA:„(5Ó@ŚUńĶÄÅ?§Ź ÷Š„EPœloŠŌŲÉ@ņAøiŁ 9äĢA!‡õó Ķ°?÷µn¢ž”Ń©TŖJ"Žļƒ8ˆy= ŗHöŹā8eÖ(‘ĘēYō)Œ]ŻSÆMX#•ikĒwĘżÕ„“1·ŒtŽGNb”łÓėŒ^°Ķ°ČīŽ±U·Õ$ b)øCåq؛õLMÉČ2 ōp$ŖęŽ&jG“ǜi_vߐģ{l,ml-滲t ŖõŻ’P@å:yA†Ģ!Ööj.ŗ,£蛄ģ•CÆ-‰¤o½)%öސņ<ŹGØ\䳌D“¼§(SØų‰UŽś5R©Ü4`œy˜cčՉmhżn=^ZÖ4bŲ·†®1·… ĶøĄtM1%W¹ŲÆś¼ėüK±Ž^o½žę ¾dwz]ÆŅŽ;’’(ļ5ĄņŒBĢ<‘ćxhŻ'3˜āj}K“Łø?O½X><=ʼėL[š3ޚ’6OIdØ¢]+JW(Ş ®ūI“O…Bü-„…’³ÕĶ®©Wę¼ā$ÄĆ^"¬“#Ōg9"Ū•$xqģXķ n$(“H‹•:3Š]Šc‡ˆ˜Ö’¬›ŠxŽ>Z "‘ptX€O1Ę”ō'N»ŹģŒć!=™„֑ļ¹vė!?£oppØ\ä4cQä22śeÄxŃ9Ūk§$éŽ^iĖ—*’śNø2uqwr*±z)ö(^^b ēŪĘh×&Cē9'śĀ™!¬·V("™‰ŲpX§/GžöIäį“]ŅÄb­z^ŸĒša{#ž5ßd™ļ"‡g”ĆKŹÓ½$˜#‚7==›rgwĘÓbY $čcĢ×9ZĄŹAVPPµV±ioåčØ(Š+‘GYä¤nņ?āŚÆXSž(™ wʵߣÆÜ,I‡Õ]Ėš&EÅVˆäZ ŖÉ尅r׀œėŪ©6 Ŗpnņ7ŹźK©ĻŸßPaQęūQIÆ„F¤¾ōóĮša²Żc n¾y÷¤)Yåōc\*ܓü6W®¹Ł1Aœ­Ćh7IĄ„öm²ĄäĒsóPp@8”½•«³V_‘ŸĪ0;ąG@­t4pMėĒĆ!°Vušõō¦^%_+  qyMĖŗkOņ=uĶ=ņ®¹GG»ęĢŗ)–kƒµ/ųµ‡%¼’iļŗÜʕl ’W„Ž”¤o¦eM@“x•ev“†’(‰n‰Ōˆ“}z&&: @‘Ø&€BWHĮo¤Ł.żČ“nŽƒOf[†1FŅk•ѝŖżjVg=‰ f–@öŹ4©*–lÉ®¢U&Õń² @Ūׂh@ća›āāÄE•3ĖKD9N·s]–uį]„¦i*æĀīöÄę¦G­©ļĶ2o¦3ō¹ŃŌ8Ęsy‘Ÿ‰žSŒ& YĪ/åj€Ėz~»šH ŒŲŠnܟ×Ȇ«*ä(@kŸ4ĀYOG8›*å”ģXC’Ió®®ŌÖ)“źŃ”¾Ć¤łŚkŖę£‹æĖ¦ÉBKS1DÕš\īY~’·lÖĄ4“é ‡¼m!ēKŗ16ė÷²æĄmļÜīJØ˜Ļ—)č 7$‘O“£Y»ŌIqŌŪt}V‰Ö ļŚ_gx³ŚNBB`Ém-b¹­:vؐ½åŹ]9…  Ā&ķčA6)C&ść¢I÷Ś{ō#ėąDŽeĻÓ®ŒØQ¢“²MĀu"ĮI€B)Xk=œėsiż“IpDizl¾R“›8ŃCĮ&Ņü98°±±£ƒ’¼iÉZŖ9ÆĻo®H€ŸØž*ב?•‚X{о:¢P=2ŅR;¾ż ¦{yāķšlo”›××ŃŽE”_Gt©!¼k«>[ČAÉ’5ŠĀį ©ōΚ›DW¤RF§Üi¹čŠ0ÄMņM°aČ\š•0Ņņ©¼JĶAd EWō'~(LŠÕz}ŠĢw¬}8]Ä\!ęP›½–°Œŗ‹ŹrˆÄˆFWĀ€Aė­q%綆`Å©ĀdZHõ¬ŪxųÉĘØ@( c—µ/ėpNNm³1·Ÿ(ļ†ķ|w­Œ*ŃÜĀKŹžØˆ¬rOüxZ*NÅZB`p•0 CµrĻ™ā‘cĘDO”•$œńoņQ>VbœƒźÜ “Ų5 ²¤TTtĄ‡!Ūt²Ķćģ"ļ©°ĢqėŪo\„Ē”į¶žÉŅkł­“ÆčĮ”eŠdKĶ+Ą‚k#¼“{Sū¼Õ³Ż™];„d‰Ē¬m+ÖłUv¢ĄfĶ1vZØl‹ž&%؞ .f¦ų™ōQńˆ}/”O }öÅt9[(Ŗ5Šp†įŅØŠySK!0"Y{6&%" L™×K°Qö^ٜ†łĻ~®ŌpɃ’ę¹ģtĆF퇐#£¼mC–Il@,Į„,-ŠŒD$WOz„iÉę²T „Ü‘īć7ė"6œ" h‚ ƒX²z?qéķķNƒŁ¶7˜mwĢāŁ7xl^ø.W’Ÿ0©ė­¢Öuz?UŁY&ĢkÓ*įl÷™"咊)µ””l/TĒt®ou„“Eąj¢’)6 Wm”»3L•Hģ¼2’ž6Ō¤±üÆ*W••'YeĖovv]P€Z¢ņ‚Ł•N±ĘB'ĒɏUĮhj"!‘}éMŻ3++Ūss »Ö1WĄsB–uWæ0? ¼Sśó€ņøTŹ®L„VT÷3Āž"–(²$ é 0vL‹f-¹Ü”u×`&źå H>Äģ”ŲöÓC ]ĶfØ ½ųŌĖqäS„ Iņü­W±Üé2xµx8¬GŖLćČ·ŗ(²µēy”±vŠŠd0©Ü9–åÅO’ ¢ęīvRżc¶ mĀ O‘O¦ąژƘ’jDś4ŚJ˜ä6Š^Ŗ:šTķ2žm ÕÉXe,ÅoĖb±`@pŹīŖńźQvņDŪR%hm½ņŪNĮ M>÷²­;±oŪé6ˆŁ]¢°tEM ܋Š·[®ˆŽƒśŚxĶo z;Y­Ē˜žÖé QLŹ¢Ēį-~ß2<­•Łœ6`˘šō°¶\b{O““چ–¤!¶ī@źņ§HåkwRõ©źÄ{Š‹4$L5-NlK‰fą,§9 ŪXl!SlÄѤWcé;ļ5Ś>Ų~óV³nŸäDŁšl/åO’ŁųŚĻ¦ßŲšlz\k„Kū/÷:·D³D¢$h[æ­Żēņ§w[śŚ]·eßXæ­]]éßł}¹ qĄ9š.)Ц¹¤«Šwߐ’O_ąņ¢4IN)^×0˜ĻZŅ ˜o¬Žˆķ ņēé Gv»fœm8!ŠŻtä mMū÷²]£»ĒŁÓŹPlp58£g&œ ß¶D"’UGhm^‘1ĪIöģ &ŗł×ņo³bN°xH °½O\'•EP€Fź‡Q½ćą Ŗļ«ń5Ózģ§rzi>4¦TÕW ćæ‘pT-ĢŽ-–‡ø”Ć9įp¤ė`¼Óćrƒ—u’ÄL‰æŹŌu]ĶIBm ¦.‘£fZŠē2G¤ģė“£Ws]˜0v3źKJt—Š%§mK8ŗōÜ1p°RµĀivv³ń_qƧÓö¶ćmo;ŪwTä.j›ĮEĖM hR.üŽ&y^RM»čhkŠĘC˜›²n½:BĮ9xR!ŗW«Q•ŗ@—ž(ņ‰^\$Źć–$Š\ޘPhB¬°æóŽ2€2ģĪD޵„˜4GZīĶLꄍŖĘI³&8Ÿv*›"ÆŪTŻ™4¬ĄdX|R_ŗE'$›ĪÉĀ<ŗ6„ᔦ¹F=ł×2·”UZΜ’ļ_xļY’Żé4ČģxƒĢΟŃé9ł=„žģāģē7Žßf?>;ķ ōŸ¾’(šÓ¤x–·’‘ż*å‡ć/}ķšÖŪKž†×u’< ’Åk³µœ†uG4&³˜[_G©L’}ư¢0ėqŻw;΃žB“Ķk`<¬fź]#ŖDU› <[yƲ#g˃ŲTpBL}*p%mpĘbģTja¹„Õ|)ü¢Gzš’#bžPę\¹’neä4W¼5ķ•a_•ېAŹĒł&a[žō}¾v§ ßŲą#l!Ü-8ģdWÉ ˜ĮPpÄ=ÓŽ2zŸ™ź8“±R Y—“+¾–§Mh‡«žŹ—„Žs#ؖ­|®  üFæēb³„vä`-MHQ%"§S9†Cņ—¹³ŌxIØDšƒkiē„‘¹» zŸ!õ€°–x4®Ä¼mߔ̳Ēźq‰ß£1t¤š˜=-(‹-y ×€7db—ļ쨹,æ*©²Us OÆēE”)VĻĀŻĻjuŚ=v¼Żc§+郟f#’8沊nݤ Ń0–X#ż“ė2ōžO“FÜLoƒ¾yǶĖSš8Ū„žÉ—„ęmpŖA7Ś)#įiŽpļXÓQ>1“žFĻ‘ĢQň¬˜ џč΃Ķ';ŠMŲ ~s©t΁5;vØP@m¶CG‰­s§ųZŌ£²Įč±Įw¶(ė"Ō…lUwŒĶ‡Āk°ŖĢG`×ļ¼ ¤§÷~­iU…šT†7ļ ·²2vXρ œF‘$9D¦[LĢŽü雾v§‰Ńol01ėœ!kå…Ć`w²Éęz<«`mĄ ˜L|’¾bcÆ'µBŌSŌĀ"Ń%Ąmµ 6w…DūÉĄćŽ¢•ŠŁhSXr­W²®“N=²eö“Ō"}cGZ¢÷›:žŖt²źÖžšĻʉe¢GŸ™„yŖŗ‹IėVD¦ö2ÅRÅŲk% hŪ"1”,)æ1Šg#§Ō·fd7r§ØDL„D«–ebkÕ­®č“2Ś:AVŽó­š”B«¶"ōZ˜jŪ0ÆóFtϘŒēw4Š“BٵĄQ ™=Pnyć4Ėł˜JŅSĶ+0“ĮƜE-“bšŗŸż"‰’¢J-(M‡²ä+S†¾ŸÕķōuģx_ĒĪ^æ('ˆŗ$Öąóˆöą ĖRųX6ĆjŽĆ±ęVŒŚ e ”ń9Uo‹„¼h‡w>I؆¶©|µo*Gē­Qlp‘6S =Óaįø5”-Ōćxģ …Ygö^+gPćņš8Ū£ Ņ?“`±ic)»1€o ĮŗÓH[$ÆhFc”ÜM`¾»'Ą|§0ßq€łĪŸ‘eł„ćķ‹’łčż||q”’»/'G_²÷'_ĪŽ}ü˱fHśNüĻV (k×4Œ3éPnC¦xZŗ”a[c“£ ‚ö˜]^Å3ē:‚ē­9;w§łŲČ ¼|n«$ĆG§%Ņ÷ŠˆĆļźÕĒŗĶŹłæ—8«yøž ÖŖ”_ĪvŽ­‡^/]žO-2I%“ęĮū^;°…]‡Ö,ģŽ0{ØRjŠŻNąŽ#‚iįJ?Ō\\YÄH6•ˆJ^“ģ‚Ł\ĖqćĆĮõØń”Z%ELšÖņŹČčϹŻÅd«l%}—Ī®X’įÜņ©š Ółqšé°kŅZżÄ9ŻÕ-}”„" ö6Bt‘!ŗ’'ŲŽŪ .œß•”ŽJ _ gˆ}“*ټøES½„™µ˜€Dž£€•S\AĒPe›`ŽyhkIĀ(ģµ…~¦IEoĪAs©¤'Q{Qc &˜į#Œ®•—LŃp¤;^ÖÕ¢x”żĆ°:ŽF »ć_]\?Z 3TŒąYL§Ė¦O`)į² :ˆɘ¢9įKĒĒ“5īg‰:XšĒ‚ļtõ]n{Õ¹ ­ÖHFEÕĖxäƒåD~†«öś›¼žĆœŹOƂ)Žā|ovb\|ÜÖBŻŠēVb-6÷Q­‘ Rˆ‘źåvĀźŲŪaV’$$  Š:Į‘|Ą0nŹųŅTČu ƕjsĒHøÜ4‡”#w­`#ä kGÅ*ßśD ’Z\‹œ'ŌĄ`ėŸ7Ņ*}&ݾcė” fXŸ±źEO”^o»qnģ½'V‰õr ĀE«·ĒQč"¼ŗ·½9åŪ}P½lŠ%ā+ ] Z;L2¬©ˆø‚­o¼3'ŲuĀLnō?žĀ¬©RP*7wŌ>x \Ö¬| I°Ōö¼¢r°bå°"ѱ„ŗFŸøńW2?¶Au\•Ģ ¢5WåöZ¾×I.Fx¹¢:™'L’^ā|ŗ.”Ž Ś8›jÓµŒįē2’ķ·| Ze¦bVÖÓĢdŠņZ5=Ā5Œ~ģR¦\S’u  cŻ]70År@ņ 1Q [澎Ą+ŠØ™śĢĄ˜®Ŗkł—F²ØAŖ ļ§ź:ź½E*łZ¬°;sĄ“šIdH›ń.Š:˜+R՞Į„Ūķ$aH&SMŲ%å™pąO ūÜ-ų8Ņ)P?ęIģÕX;ē|?łF¤„,-ąMiYŪŹOŗ™‹ĖRēĻr®-“`Œ āĀ÷3ÅXųŽĆĀw^ōAŒ~¦Oņa©”-WÓjX 6Õz4ĢĖ›(ŽĄĖĻČ_¤·Ł6!“uå@ćÖ»9y:½2¾cŻ7+}#£ś+°ÕĢ>MÉ GcdäņŽnÉ0ƒ e-%ذ!«źtn®W3ōŗ‰ä| ļlÄ”Ģ%ƒĶ *ē7%¹/üžLvŒQnnĶ03±‘u5/-iöD õ˜žŗē£m‹Q~#ūŲ‘5ņ¬5:ćx‰ObļĄŠ™/±EóѤ^Ķž’ÓR6Ē›I .51«E½4BsŁ'€ŌĻ‹d‡ ÅSp¶µ°õ呋…#‹ųDJ$©UŻv.LT Pu?ŒhŖy‹ŖŚėń &ĖjZDāģ,Ō!%M ßVvZ±bĀŽ:¬‡x&6 9FŁt¬šI­ĢŠė÷c·„ūˆŖó~g]ՔϹ ˆrSīĮ‘÷7eqk0ÓÜ\:¬jć¬hŌ(ĀtK­DĄY¤ģ“»‰¶``Ó©˜~ϼчGQ»Gœ7RDąLµŅʕ`Š| מ¤ ¬bĘjęUs=Ÿ=vōĆx9cdŖ_mhæ4Ö¢ŠA]–ņĘ’ę#Kżß üė4š5XŽ›N·ŗ@öeŽ;¼¤ū‹;”ƒ3g>³Ę¤K&žł”|$Rr+…É9ė%׌żŒi¾ćˆš5D8›Rŗ™ęÖh‚äń p?£b`S}ė’S¢łT"w'¦¢a5³Š—”°=šLGŁūZŒå;ī‘E˜…żł„\ äMŽ„³ł6±3śGNBc‡4bŗRļ•dwˆŚķŒǦk M(“889åD üŌYŻø_¢“(‘e}]Ž®o/‚œ† ‰ Ź,‘*gY+ö•QĀ€£X;q«y¦Įbāā“‡ąœ”p[öŖMŖW}Ņæü ÜyVŖ…ŅrŁ.q?8Ż–— )óĢ"Ēģ_嵗På¾$…°œĻ`—Õ8]z; "‚Ėe­ÉļštŹ_ŹĖ«iiģ„hӋ—ČåfÄŃ”oB¢L~D! 걒.zØņÉZĒ›©jŗ„©Ń ²õš—¬•“Mc*ŽU,Q¬£u*“œ#ĻHÆUXGFfŹy³ćĶ’8‘2äōČ wßP :Ŗc”Ā ©Š):Ńå(¼DÉl‰ģ„#YĆĻŲĖ8ќząƒh \={Ę„õŹN،ĖÉv>ƒ3ŹĶ’”čf9e(©ÓŪyŅ81²hhGN»ėt‡”uįrŖń¶·%5ĢbŽĪ@?| £ųÖaĒŽ¼ŠYPN~ĆØĶ4¾Ź5s€ ł3øÆ tpƒłņL­. –»¢5}š*5 wͳĖĢ71Q Ax©uęU&ä®V˜*r§cz€Ŗl—®ļ“˜«tsÅā7ļc6q^lÉ̹Z=.åVŚū¶ŗŸī Ōw”¾ÓEØ/Ż ¶Š¹¹Z®|ø²ĪU͉„ƒEį(U(i–¦®`<靄ģroA“K­)k€G÷ÓÓ·F’W:Œ(·¼Ö¢ ‹y· Oęlx‚ńg„ØäŠHS"ŗŌ–ž%Vų©[Ž@F’#ŽmLBQSˆĄč?“õ8=L€Ńąš.ǁŗ"ŸuŠĢ“ĶĖ9#™ ķOķ ¦7PóīīŹŸ~I“ÆŻYŅŌol(iīöKšĮeeŃæ¢Źb¦™4`œŪĀ!ĻKz‡fĢcWÕbp1ÄĘäu×ųB‚—Oµe[ė–łŌrWˆ;>4}–ģ}){mźĖ9UooiŲĮ*š ­[ästz_a0"õ%Nlī¾’ŗG“{I’י÷ģ“LŚŪ}y ³ DbVĪs×_ģD̉¦ŗŚ–„Œ_ņųÓ/O!Nv„ •IP5~/Ū©fNvF*.+£'AŖĆ)ąŚ4ŽKČ_ÖM,éFjƒ·ĶdBĻŽ÷A{XFqø €‚×8¤yŒÜĖJļv°ī»ŽußķbŻĶDh”–^ ,Jh:ŌŖAõL›l  Se9‘»b²œQxÓĪ•Bwyæ*V‡yčn08å|ä]}rv{‰=É9–¦«i²g¬Z6$0¾UžCW$$1¢;ljm†Äom•÷UM”|łŪjµ“Ö.P8„‡”ŠQ„B_õå›X6,b­ō3"PŽ”@Ujg‡ąMI _XLāŁqĶ1[Īüf„r©[fņiKxÜ\ó¹įXn×ūKįŖS†OŖ“7ÖsŖ‡)mB’ĪcB«(ü‚æ°¬„הK}ÖCÉč`ń|ØL[—l2ŗ;äÓJ{;­5‘19eŽ‘]µ1¦a÷v«¶•C-ˆ7åŻŲ•Ųcz»»ŅÖ0›ß¢¾sĒ507?ÓĪ`ĪęŁÅ²¾¦“¹ČkŹCÉXiX—y›•Ń’;× 6ʲ )儅œ9æV?5…® ßyŚčs[Ŗ ĀČĘt‰";'[ŁO!:"7h=¶z> yķ¶š>ōš„2D‘ ŹFKÖAĪhGs?äé 5#2›/ĒŌ„*gÖĒoŁ{łTAῨˀ>Cj+W6Ćy\ωѲĒH{øÉ«¢•~¬ÄFS0jģę†Ć¬¬@­Ė§Ķ™}X ŌKprž=£lwčūn !S"¤¬ź•5~*ĻRĘ<ēƆNKą÷Eģvą»Žß½ ī5. Ü>uņvģ9o„ŖŠżā½œģtŚiJålCś<ĮæŃ!xµÉd3(Ly"²E™3nļžŠ KęIĻb°¹Ūś$R€ĮĪ”mē†K®ųžŅ€“ŁŲ˜µ¶*YPDv‘ņnęśPM1®4šāŃ j@&Ń’žk­„­‹{óō2o³{‹Ö³^£qoC××pŁŚh)×(JjŌ¤e’ŖšsąÖĆņĄŲ8˜T¬.yIF*×}eĘp{ąfÖ«$O˜. ÅĶšhĢŽ Ī`œO½sµģĆ"ŠŅ(zZ½¼³K–zMĶTµ”4C1s±ÆX†840‚ K”ļ”ŅæĘ —V0TæŠó~łķnd%½#éĒ·āźJcøCÄ·©‚įĄqC&°e8¬¹„”WÆÖnŪ©•ÜgkĆä“ƉdQ‹²®œ·F˟½­®4’ćęPž­FKń–ƒĢZ‰¼}p ¬³Ön‡…XŽŹź<Ł0.Ә—T­µ+ˆXW²køŸ@߂ķ=õ”v;}»Ž'±Ūńh}伄 hŠĖĖ©‚«C¼OpęFˆāk>+×ätւx“ÖēŲüˆóbž3;_@ėgÖtŠ8;„sø»Čəmfö5܃ÜkŅ“"z MŚ÷éĪ®2liŪ/Éõ¬ē‘‡–š­Čn²¹åó"aä™y ōöe±vżj,CķĢźœō÷æ« Žaŗ0‰Õü²/JF(#¾^]ŠVÕ²­†ÆÅŌ æ’(ē~ż4»dś®#Óww’8Ą®‹ÆC·Ģ/'ē'ŁÅYöńģĖŪģóŁ›³7?9:½8dGŁéŁėņ‘ćÓ拓£ÓŅnCw!6tŒtåżEA?#¶č °åc¢ČV﹬’īņ³B”Xæ¬.SL›7ŗÉb4öVŒ«:ōb¼ĘEį¢/ ĖĀŚÆŽęI{LŁpYN5ų’ÆĮ»ņÓv „20uØÖ€¶¹ßOQׁv‹[R œbB‰vT1/&åF!ƒ™“”ĮҘ‹i¹R4@.Ę@†V±@”“ x€teææä@Irbģ#CŹGŻ:ų1B)ŲFśØ —£D…™åP‹œļ—ōĻĒ,ŽcM:Ś¾Ēˆ;“ZœĀlœR˜Ž½¬u6dT”½ępĖ1ļ§ĻC²²ö”jģøōK{1Ķ–±čē”Ę@FÖ>1KZ”ŠŠŽ4‡£e’…­€ˆóä¬JT>p_RwŠšśyŃ*7Żé;¾$“ 駘…]ė|W¢ŠqēŖęŗ¤Š{öM%¶“½gņ¤ƒÄŽu$ön‰%]˜Į8­t£(õ =Ū¢śŃ”‰ŪųÄn+]jhŹWHj”«>q(e*Æ/s,՘SŃĪ"ƒ :zAČZuD½˜Æ*ŹŻZ²1s«d2;K£oūü¶HˆlČĀŗyĮÉ×¾ä‹I^LļZeCć™Ē:cµĖÅ^j‚m+ßäs*°°vhķęW•÷«ŌEȁõ¶`ŹcHFFšDĪš•«äDKO12×jöcß©V©š³ ¼¾Ų•ƘCvņ›ŲY‚ˆž3† ¹“\XMļóP ųøĪšĖ+ēŽA޼īL®\¬a·6»!ǃØU yč̘'Š% Ą?\™t(ōߏ™ć>dÜ“2ŗŲŲÆ¬õG›d"kę }3Ī}ż–ųLŠ4ĢćOš”=1‰²mµ’Ć„˜üUXENį+ś›Ł“Ģ×YĶ}¬ŻzzøćBx[x®Ź&r'Q”R#FebRFhÕ()OŁ[§t jY_žg £Q“™€:¢ĆŠDˆˆ•s,v@G\0-żŖ–#{M±å„£7.Fecœ¾ņ½ÅXNß½WokWŽ©Xž ˆ5ƒyÜĻāvŚCv½=d·Ū’ ķZz㢮č éž‡XqUÄveL&Xģ0‘²sW f93—¢J(s' h»óԐ ŖĮb—‰Ž#½Ęüfę8ķu…śĢ…ēL ż+Uo“Ŗc$oŌFˆóUß/™ō¤ D] 2^4ĻØtµ)‰BlgW2 ʬ"Kŗ²gEūkķØõžšv…:ö8Ÿŗ…TWĢ= ł¶ čN—y_k8ÖŅ۱٘Ń*"iÕõS8ĀeöKY_•ÓoQ&ž ޜ·›]¦0XāT0=—ąč›X@ł• wÕµRĄöČaō—£cœ<ó¢ó4ŹĘˆĘpą€v'Æ_Pe<|'o¹ Q>ųo¦•Üœ<Ģ DdG.ģ5KÉ™—žAU"ž;}•(ś`%ø**“žĻr$fNéźģ#x Ė<  Ø£ 6$äǽ_„Ė© œ§‰‡-ŗĘȜf²3+ęƒÄƒŁœėmŹ©.Ŗ¦łH ®ź²jŚžĘš'å$§)< ¹–“šӘ­_…tČÉōyÖ£½d>Ā-ę‡ ł‡WŗŠÉŻAuĆŠy®B’wXtŠ«ćŹ¶Ę£¶k,{3`ŹvcCńÕ.ū]mŒėķÉ‚¬CģK9"oƒk3BCŻ–³…¦p¢G3ƒīÅJ ›tŃhŻ;”ūĮų¾®å7ribīŒśyrń<ļg};!»Ž²ū¢—ķ†w`Nšvį ĒÅR%ą§Š—墜–ĖĘHAT¶–UŹ•³ƒ@L—؁R ©w}Ć:‹~=(¦1.=s({ øŹė ÖŽÉ©Ķ˜ˆ§:Ænc€pR¢6š±ŠÖp ßM 'Šhz\YpŠŲ’²¼\Q n1ž%ŪéŸĢČ©0Ų*‡ė”jø>JČ3{©{R•“”ÓU-» :±n)Šķ¤µaÖø¹[ZŃZ „“wāƒ@ż`tć:CéΉ\Š ēµÅ{Xj`n8hs•¬ZēRŒˆļN?qŸ‚Q_ˆä¬ >[‹K›¦7ųøØ–  óN]P᫦C‚ß(šš“ 1GÄ_U +q’[‘"m’šī ĘKŸbT”M6ł“ĘĶ»ĮųŁäQęŌo€2Zć†l¤¾Lg8™A !—cMaŸ<õ!=+iĘŖ_łpé‡\»b"+~ā1 -d+²Ąėā<„¤ˆiy™²±žP_ņaYcĒ”M~ŗD”°$æbś8g`u†•`=8Å®?yŻ(ŠFMŪ™)ŌĮĒŽõ—Cv0!#Vį€zŠ‘t½śŒ I›$Oąg˜čĄÉœ. µD+c½}’±üŪüi’iY?ĀD6y5]Īb.ųh$ԌaÓ9ņf#f Łüć°FnOA“¾"šČķ•O—LŁG.ķ½aēō½Ģl§Wd×{Evų†ÜĪ “™ņeŁ=·ŹKŻ£!=FĻ ŠŗŠ"©—Ć!pJŚ…0Št”HČŲ†–čūŲł0DɊKˆӬļĪ,įCĻ—t•2J²ā(Ó4Y[üGˆØĪų˧ĖīÄU€6ȳY&UöÄąįƒs'ōł£Ź[Ó«ĘsnÓ•:оVŗ“ÄńŒy\żVø03i,ö>čß?N Īšø” MQI×fʧp„®1>ūp- ™%7ZŒrßdŸ^^!tī¬ęjZ]­T_(ą"ŅvsoĶ'¼†÷¬dŸiyn“°”½\Ģ6“b {™š7 śÓ›ą 9°ŒŖq<“g_ä8āžk•bhUV°@c/łT)c¾ÉĒĽ-S-l%Žf@ŪdņĘÕlӂøĆóó½•ćč(fևCē(y%żÕ@N§›rZč„QN^‚'MŸĆ©‘p‡y"@bōbÜ ·†”“rÄ‹Ӗs‚īŌ5ˆ$Čųg’$k«d¦XX”ü=ŅĢecŁQ%_! <Ź7UH“æÆŃ䮿?’VĖO\ŒŲ­|ĄP“rŒVXŠbwµėY?~l2Ā ¦«=¬QūE“⤀`®¢OĄēć5·D?¹VףńēbPZ@aved„×zųyę嬑^Vńå~¼~%Ać-Ćd·UbgG^…*D“U ÓĒ(łICźÖé&·“5=Š„Śdå1/ٹf‰#fėb·U>N«5«dļ-Ź«™źÄŪX R@„”•ÅVø’5K1Ū°Ó‚3…'j–›©S“³ žJ•39•KqķM€”õ4H¦× ŖŹÆĶ‚Ī\s°—p"^e§k‘i؉);g:MŠŖULˆ<źĢo$bƒć ŁmčG'Ł4䍷2d“(^ŌĢ9.Ž ¾äĮ+ćpNʇŗHóāÕbF[͌åŃNĻÄ’źĮš,’Ē#onĪq·h£q]Čźzf<”–ńęq «ķ ˜“gćņźŖØ’ÆrĖĆōŒHPu‹ąn–”„;Ą&U–M,jČ"”€}sĖŪ9wź ś$Ķq?•-»EŹ~E“S)õ"šżB­žŻ- ÉQFÖŖ‹Ī@«†å^öxÆÓ²ēm {Ļ{ķŅ ļĢķŌ“$—wWŽ"Ć©„ŌÜ&w¼¦Ä˜{Wwō~4Ø 'øś‹¢€>»JśŅaF»©öŒįE-thŽ€‰AåßŃćįķö†n5ČN8¾ņY–e³† «¦Pn…8˜–(41€yį#«9“éh7q0ĘĪŅ”J{ā\°¬Cž-Ś „ĀÖüŪ,@e-Ÿ÷ūH†ņ>J>Ž­ęajQųńoMÖÉ ÷(;µ@6ŲR}žŹ#ļ/!Ņ]ßĮņv¬P½ĒVcsbϬŖ«ņ.w‹uŻĄżĶ§†;)ś,é€`ØB:„©XĀĶmĒwWPR–Ē?’3ĮśOH‡Ä½n}ä•€AŸ«z6csefšÓž©÷.\uiį$Ź>ÆM¶'śœ`éטe4Prm”·¬²¶žX^Š%Yęā²Ē;ĻA34mĀĘŠĪ^T+’“Ė8–åĻz `\9kņĶĮļ’įčÕÅĪ]-›8#ĀPķśÆ²ĻSńUĢG#ƒĘW{7ņ«ŹŸgˆņ€œqŌQcŠųŗPī$ō Q‘‹¤ŁÕxż!ŹØĄŠ&5¼~°z?;ŲiæŲóö‹½ķ®4+ +éDAŽ“ I†­(“ āg9z P`†Øš¹£A_W}?iž{_rƝ×؊bR¤s\k¶O©7Éź‚U^Ė Ņė†&J0ż†§āy„żŽ”ʶ”˜N`Ė;aI@¬1¾oŖšZ!”3[_ß h—‘ŗ`źņ±€ź|Ķp’¶t+™ÅŠfVŽ”ĒH›*&F±Ä˜T³ *¶..§l~žh];é*ÜÜ'ėß¶ž$Åkęł~ ę½ų}ĻĮļ{B$ą—“>kčQvžóēĻĒ_²_?œ¼łmT 8ū{öėÉŇģüäæ²ó‹/G§ļæœ»VĄž‘żJ•€õfź½:l²÷ŚĶŌś ĶŌŽ³L”Õgs„ņ P’Xė7{q ]@ŁŲ±©5p÷ńS©²ÓŻUĪē6ßZŅ ,„_K¤ŗÆy8ĶGō|yŖr“‹I9O6/ŃQŒ\P¼žA›Ev@§‹ū½ńõQ-tÆ”óPM®RiB@š\¤ūķgŠÉ””Żc„+9Ūķ_fh…;“½żCL†}ŅƒŽ"Į‹œĄÕ\8é"+Ą™Pm#šT#źŁ+āĢ.œ˜ČąR­TT…zĒQéT+<G”ĆŖ‚ÄŃC³Ć% ™^eiMźŲX„‘¼Ŗ ¬ÕJć¦ZCÜ>2„ó‹d é$J9zÖŌDM”ģ °LØķĻŃKŅ½ŲŁd`Zóhż³XTtĀ„öżLIžź’2U  h—’H\ö­~ę<É*y£˜#]üń˜¹ŸQźtZģy§Å^WĄ™v3“B”N»čӒų”ž! ”?4[9Ą˜’C 1A©*sXMģ”Eģuh‚¦źhś‚ŗ‰v,ĢɂÉͲ¹8†ŗd­jŒ^5eŪ5zzq ’uœ·Ž“bj)h#c˜Z-a:»@Į¹¾»Ć3¦\ī„jÄɧe**JzQ3²!-ܬ/…‹Ęˆķµ¹žœņ¶±#asG|—<ā6ÖÄī(ų‘3Łr®ĄŚ¹«øŖ•,ælAR¢(ēå$-dVßĪY`7Óū!‰¶ąwČč9!??uøÖļž„ē64vIĀÆĮ\ÓUŹÖjŃI™×;{^†+ó)’—x§+föQģģ^0©#bGe³a„!…æ²\[Z€gĢ$;Ńńę44„Œ3ŖōŅ«±[°ƒ=A•ĒõÆÉQĒ‹³znļ2' `¬®Ų²­pßd“üN2ūqxBaė²q»ö9/ó˜ŻVź»®ĀEģŗņ²Ä8f…TI9jlt‡„VKĆ ųžÓ iŒŖ£&Ÿfgßģkbnź±Ń܎˜»[.”Kßń6°©Ś0 œõ—†f²XEøIŅ^§ƒdĻ;Höŗ$`X±ZŖ b¼Čā;ŠÜŲ¶$š[wŌ÷Ź.+&2WDŖ›¼ę(¹ĖŖŗ® kš[pyńzĮ>Ņgzę¤Qb†pÆøō|}@Nß҄ЧØén·q±Ų°ß:OwīūŖŒŠ č ćā]L Y˜ŲˆŽ1ė,ś9Ļ&¼žĻ×ųm0:f ;TęĄ\żT\Lj\[5CĮš”øsǽSĘ ]qmči ?ŖŽj»KW4$u‰°å­¶T;ņ°R9IõZf¦Ø+ĒOŪŁ•JM}݇,/Ņ1tFu&š īŅrm›Ūf6śLSN˜›”ģƒ»d÷ ż›0²ēdś¢£źJƔ˜(ęWÉׇ5¦„ģv!½Ē 2ėÖ?5»bœ&L’‹ßVLƒX¬¬ōfx …aj›W teÖ“ĢkŪhĪĘ8žČuæģnēŽ“`…ÕQaĻcŌŽÉb”żĒnbLü„¤‡ń_ĘE÷i„āŽ@)Ž&`<:99qz¹÷5†÷|9mQķe+šJłZO@52©)|åŒŚ@Ė3t7.&rŠ&遲vSžĘžqeVųd>v’€wŲg13ųl”| Ö-†Źė\ŒČÕ“¬pć@šą§ī™°é“„ģyKČŽžϧž¤öԟņɬZŽZt„gɝĖaOÅŌX‘Ž4€ąģ©’&»Ć½éX_#÷v &µ_¹uuŠfMZUp2zަ3ßɼžÜä0 ūch˜i„Šyo¾,Q±kB»+8}žLMT¬7P§ ;  ŁĒTö=R(>|cL=)ڙÒ`²[8Žj9§ø¶ĆŹķ6f`8ņA½WKxt‡÷ē@•ß·;v’÷ƒf^ńĶ$Æ—=ßRTčļLŌ]ŗČß”q½²”L„¤y åx”w=- ·A¦)e ‰"՗źąä,.œ`£‰Az6+šM“­j”PScłxRčšG¢ L£ÜįøĪoͱؓR;ž“Ųrä[ķO—ÅRĮ=ųR™rӂ4ß7eS6 Į€D}šČ£—K"v£6Ÿ÷ŅX’žÕ³žČįĮ¬.ļƒe\@†b}*żŽ1†Ÿ+=žŪ‘ Šr˜F9h ¾Ä†ŽøÖäģDŻbL¤EĢUœ}FQŖ|į©žd|ŅĪŹGOØų)«ĆG\7uu£Ä_‘24`šĢł–Wx†ķ\liC>U„'¦xXķ•ųš~v²Óȱē{ŻFßv(+ιÕ}&ŽžŅę ם!ŅĀv‰¶nå’q©)ī-$0Ä ½9sĶŻ:Č.N¬ÄĀģ³®¼¹myf Į^ŲĮCVėié»å‹ÜØ?“ė&ĻÆTń ¾—ÓüžPwāįcŽ’Š4].xöŅe ³aHOœœą6ń8ĮYU&OšĢóĒ ÷~ü}'x `Eä17Ŗ¤u“™€ (A³i9uĖÄØ;ĮČ[R„·¢ś(S‰,ß[bÄRńM#“Ū÷Ėæ—„ŠtsĮų:bžrÅtŲhŠ[0‰č™ĪõÄt‡ŽŌšg\øD¹(Ł”Ŗm!¤ d˜zžī=k+V‹=oµŲ{qųWķ¾uœ °²ŲĄSvŖŃɰ¢83rä>¶ö=灕sj’„Ó7Xć!Œķ Ā“ģB¢47F4e6K›Mįå3=tįĖ¬fÄ7qā Kåū „v²Žū)84Č?ßVÜ_V±čž¾–gćŚ½—OĄ8; rf d4®(ö\9#ƼøÅÕź¦§Ó &Ż{q‹ŁbZ­(8Ā™\.ÓM­s4LŃĪр¦@;Ö+﷐:`ņ=“ļm“ß·H·QÉūÉyöĖŁ?ŽŽƒ‚čĶŁéłÅŃéÅÉéŁē}a?žŠž öD+q4F’+{ź&'œ.“<“QS­ärŠrVä/łĮŽCƒ7ū#Ūbś“,róÄ“M Õ»•ĄƒŁ‰j*ŌbmĀśV¼Ū¼/Õ°(›ÜH¾,9n„c¾Œ7±µŻĻp²C+<¾-“³ÜištéøłŒ6“¾„\y/ ķįhBę,±•ŻvķŠĆ¦֓Y5IŒC0H uŗźpD¢ąŽ”¬éĮHÆļ°{ź^NW&¬kźBČ 0„šZņ6¼u[LÄøló× izŠ'£c%ec]ņ;äĪ ×L£Ŗ»i²āe¦Zt›(0%į ųė"įŁé+3`ģ„Srm;{1m½‰µ®5›’Ų"@扚=}ļģPg/!p‘P8Ÿ­Ē•¦°yФĻ>j­ÓęĮ,~/%Ÿ„9Qü0/Ćūńčķuš×{ŽæŽė௓ońk˜i’ćŲø-¢æ÷j©"@ŽÜL“ˆß•lr…]„­øLPŻéŒiW=(pŖŲÆJˆ'Ž) Ż“øu‹PQāŠ™Śœbl UY– ČŚÉ³"Ō—gß&H½ÕŸiˆś6z•˜ŹO«"ÓV—WŹS”Ģ\Ʋ·h²VŃ3ÖōÊ~5é y–K»S`Fi‘TŅ/w¶µq=代ź]Éö‹eéX½–}l\ņ?^”ļÄ?Ł,Ą~ŠzbńGĘžØv+ (r„^·²Œō¢$ök&*µĀÅĄØ_,Źž f›«ę³…ŒÉøāæĪ«%µßcĪ5µśz)o²£Uķ”wšB&ŽļS™ dŖ§4SržWč Vü~°Šż {ߣū]@¶"F²°Š…1“¢Ģ—U”¾Äų”ŽH‡4¦Kž¾Y ]·|QȈ“łĀD‚?•ÓŠ9•ų¾±†tzџ‹¶Öń3oÅ$ēsš44ó«f•½>Z" • —|i„U¬HQ­6sĮó8”ó2ÓÓA—© B‚XMˆWŻāA®nio§†:Ø'$JQĻS±>¢YóiŅeÜåä MķÜm€Ź..[Ļ[£Ōfdȶ&žzĶå{[Ł?ČĀ=‡“vĶŚ(Q$Q׌nGYUE€4Æ«WfTj ^…ę÷Ųzčs˜"ŌĻ;6œ×š'Æ5ŗnfrcV½ė'Ż]‹ÓĢ:Õ¹żhŻ÷#„¤y uHUnód`MŒ=|˜w†ą-^&>Ŗ2čÖŖ^„Ą“õ«®|M“R;[iø>ęR‘dƒ7EK‚·Hé+ņ¼l,üm”ģl~]:¦ŽzŲĮÉ“.ō•TAō¼”ś¼ē„ŏ“h»ēF9øį#kƒGõ[; ³č¦f–‚!ZśJ‡37Ī“ž4ÆÆó;«¦ßöwĀæA¹MŽCذ4Ø SĄ¼®š…Ėę~UĮżŒ{ßaÜūŪkŁīŲ;q•SÕd”8‚ÜY&˜YŻ“©Ō½įw#‹Ū±œéz³Ž#w9= ńqĒ5WśĶ])2jŹN3Żä³¢š‚÷˜oaKŪŅ^ЈhsŗåŲq„ƒ}ÉkžÄČ( ZIx'')-ŖVåj–š8Ć|ģkź5t‰EÄ.Šžž"ūXÜŠD`Aao{¹8<‰m@FF'JÅīóløœNŸ€Īē·ßą9…m­ĀSJB™£z±œkå²Į©^»w®m *x$j@e£æ2h÷E@ӗ†’]°}ųB¹b],Źų½9:ō`B™Ż(*xĒŅh<=A”9‚*1Q~ü¹ ÕO²ÓK T~ ±˜°Ü’š%^Œ×S¹£Ć­ķi3f«Ć5«ŒØĖ>tPcĢΪڤnĒ+€zƽwĮ:ZxŒ©?)x!<œÕ.5ÓÓłøUS‰k_—ęŖŲӆVgķ+M’‡†ĮTjH—ŻöńG:ɰ!pQ‘KKÖtčČ¬ĖųĢÖβe•üŃÕr,[„’õĄ×"&³$g€„.”~k ъ@ BÖtżĖJČ©«>ŹĢ²»†HÓT#7Bš•»;”?k«Å#“Ī,\2Ŗļ«F‡n±ŹĘĀ£x¢pŪ€œŗ—ķ4ģ{ĆĮžĘ†w°YØo÷äĒt įä@oŻó‹aĖv¾šü?ršå³W½A8ĢēH¹‰Ó}-Ń4Ś9g$¼ķY^Äė†f‹kÄŅu×å2¢ēś«Ū>Öä·š±Ņ_mHŻžH·EźaÆe…¶¼VI˜_ŻŻż0[k›Ų¼ņÖĻ/® ŗ†@pįł)‡b‰f6hE°āżL ³ ŒŃõdN›¶Æ1Nag³EéŅ֔¶Wģn3mQ­ ųb²jJØ^'ŒŻ!|[]iZĮT°Łī˜įśI˜}iō“~ Œ«+MÓųUüx#µ>  éMF‹ 0Ā@ %܁qy5g¬IüB1šŻ†¬åq Ī“4¾Ņŗ]£~ –„Ö?ōk®Ć1#=ĪĮš<ßŌßU:K=Pśivf āĻ{Ź¦–ū,35j§Fc6Æ-ō›łŌŚÉ’ttljńO/ą4r"3'/f1rL„}Yk³„+­®‘•]U˜0MIėXFR?ŪÆ΁źÖcŗä/īY÷ś¦ēT‰™P>8Ō"āųū¢óCĄĒeÓ"°ŹqˆA-Šr˜Ī‡źb„õR°ŖmÕZ…ÆL Ÿd{ŃÕ50fL>Ū%TPƖ¹3¤Vd%?ѝ; {FõQ”zą§āvņŽ8-Ä[4$ėõķµ*x²–‡Rd7‘²¬¹ÕųéJ6›ÉOŖŅfG™iÅš “c¤?™¢Č6Įts|”’Č–KņŖäF‹嵃>Xµ0`LÜΊ"ŻvźAŽÓq°q‚m`ĖyŃžlÖ®#µ&¶ÕPQŻūK‚Ź_T­¼šrŃ3¤.Ž šiå"ą—brĻäJĖ—͆²„ ÷“”%µ§sƀå³O&0"kfAW¹JŚ®O’¢¼”ŽOF“ šźˆ,ÖJ6Ć'­[鹤gÄm”\…®gśj WF¬|ŠŽf£q§’˜ncgŸhJSm„ī•B,s'ėƼ‹Ÿ ”q83—G‰įĆ=»ö;} ūŽ—°ßķKŗ2 ØĘ!“PjŁ4Ė)ĮGrSć2(œĢŅl®&\z”šĘ“NSšŲ„n:ķśØ:Ģß{©ŅА>t;ę&åī„ČėrqWx¦éYč;m„K&­µļnÓŖČJ“¾C`“6r /Rč+&7Ó: ˆjhשą iV8ė“"ŠĻFKpįØ9Ć­qĶ"Di”n gŠ·”ė“\0rÅÉĪ!ŹXƘ®ĻPą;$“qR^Lsæģˆf‡—r²łŅZr†ćPa(o\>– Š„Cń {ŻÖŒ¹ܛˆcĆü…a ȈŹ*“į`·…į+’$vųrØ9‘ycÖgT”°0|©Ü~P{Ū¹d…Cuł~¶ŗÓ±ļ½ūk"¤Ÿj_$™ %Ō&aCŅQń(¹€ā:EŸ—8rŽ×}«Š9ŁYsĄń€—Ic>¢żž„č%Ōy(óCH=3Ó•ĢŠPā.›!B@Ž“…AķrĘÜ3` Z$ų5˜7Óšõ%™*8'ģ„3ÜžžEI#ϰ_ś1{bČ#ĖMp†“c©ź5¦er€‚ČüPD";s;wµƒ„Ļ]•y€~Vu+;3jó-mõ…xŌlŪba\”Š£BG|ģI"Ęœ=®'³\Ó!†į4QujeåV2“īƒšg„ōmˆųĄŌZa 8­XŲLēc¶ę¤ńµč¬%”¾moŚĘ fųŻØé(ŃųŖxĪ-å0hÕØfG¶Ų\¹žrJå“U>’‡œč9_Öž|~rÖ÷­ ļ+æ•(Ć #JŒź†ŹG^’Ö)LąÓƗęI˜n30ę¼±„ĮÉ ŠXęøž•®¶ł¢œž®NN·Lag¹œ(¾ŃT¦Lėņ““RqUYŌ<Ń~Į1Óx¶$:qDź.Ņļµ÷oE©mMö#:M5Å)iZęSĖU‘≓xĆC+`$ šÄÓ¤qWŠÜ¾Ózl =o=›ę·MŲ¼ 66SĮ° ›Š-©Čŗ"Liøõ|»ĪJŠ™hŠü0ҽK¼3NĆw/RźYÉąŌń'˜ŒŠU¬•‡ž0÷`÷Ruˆģh_9%K« sg¢5{•śwZŌ¶ė±bķĒ¢žp„KPŻP'C@wؘYĢ[ēßņš~Šõ+“…įF³mę75yéāXKŽ­ó¦µB Ųpq­~™K‘‡vĀ»Ó劉źKN±ČLĪ%ŌŌžļܚ,%±X?įs&NłŲҲ&¤2TlཌM’~ąōƒ» é֖oĶ#29>ć½®”~lØĢ²&“3LŁŁcØUŒ8ż4|ļĮ“w|§r,j1ó¶×‚ŽukƒD«ō<ļbw‰njk9 õ„ž*÷NŸĢGąžc—ĻJwž€E­µ7ˆ TFL`ċ gC0X'—ęäŻÜ®°- u¢‹ŌPG–•.ēlYԚiAjÄs½A6ŽČr&蛐ֻ»ŅĶĒ(km„`“Ø)¹K9‚UÜR>–ų0ŚLÆW¤1×ߕi“Æ©ŗFŪ×UĮßÕŌO“O7Ā­5Ų¢“Ų¼=­ŃĖÕĶmiiE”Œā!Į_ėph0Ķb<Ģ}Ō‰Ö†čJƒŽÖ6ˆEēģGˆÆ)›4ŒÅ”ģ®Ķ2&oR“'ė×KĀĄ7AnņV›#mż™Ū=Ō¬4É$ņp¤“½X.Č:肧#é£é›ž[³}|}³…VjA#’H”€6›Æ+~\…ƒżWץ)ŻD‰źcqčåʤQÄÅi<"äKœźØóĄ#bH×Ģ’¶‹Ł¼B>ćS g¼^2“Ēõo ·šm)mvō֚ĘģŚéĻłM°×Ļ%– Ć­[Ųżox¦G»włņ8Ō-å XÖs+ą·'T–ćL†ek2mĄŽs-‚ØVœ7ē`(ĮāA­PV’9ö3Õ²ņŃTy£“ŒZĪQ¼o,°k;,źūįˆżĄAģ]»Ļł0²·J±Čäl(8ŽiÓĘ#Ln‚X¤©(†€6j˜!O€1fm°••ēŗĀccrvš ²€U2ÕLci8¹A~cģż½ęŁ!q%Š‹^Ö§jæ»õŁŠßŻVrü¶\*ŅŅķĶwmŠdz½œ^QV²ńßµ<¶ö‘*Z§Õ¹Ņ|ŁVĻĘł³KW–A²tąČŖ$N`Šm4tŒ›¬Ż;@BXćĀš(P4P%’K -.ĪšĀ½©äĶŹ-’’ŗÉ8VÕ&씋Fž{ ƒXõū•ŗUœ"̹Pčfm‹@ۘüV”n(ócž›iĘTźŚ±rsķ” kėčd欤 A”Z*ü÷²,Ął™)„LŸŲś«räŠX‘;ݳ &˜ˆ—ź^ €ū¢UĪ/a°‹±Wr,0w—ž±®ˆäU+M“ DkåŌėVś„sÄFóK$Õ ­tć8¬a?Wˆ;I’|G|dņ”]€€§7ŅūqVūW½×©2%).VLµĶ†f65 laJ¶\8E„¼ ÅØÄ¤mé8Ąµ‡Hfq!Y°Šn–vƒvMĄ uóŪģZLŹDjM– ōčK_K‰+}ĄB”5’^ęó±'%Ź:ėźTg‹2§6Ē€©#f`‰ŅCīTž˜ąŠ÷Ö ĦV E*„4óū™ŽÖżĄ±ī{=¬¶u^Mµ)¹h$–±² Ą›F„k-@MŒuł÷­8žVv“B āj±Ģ®–Ä¹A`*±—˜ƒĆ!³Õ%^H’¢ ¦2œsĘø āę®@bģę¾”EŪ;ź"RĆme’`Ö¤šź± k8<āa0ÖbōŌZ©źR W9>oGŪ<°ź*év“9ņG=)ß?+ϟ OōŌž§eXš,ĖŽlØócė Ōp•˜)¦9ˆ*ØšÆQÕ(\`¹ /†÷Ŗ”CˆJł($‘€ŒMĄ©6Eń*3Õ ¶¶ÕG}© żI_b­#e[SXzˆ‘Ø”×Ū÷=jˆµ$½ś¬“ąPs)£!ńøŸf€ęŖ"\ŒĮ4<+•Xūs’@÷Ö¼DĻĒ–äT¬])x{IēONø•P†–uX\y *HŌØ"¹@B¤Né³ū‘…ŻŌ«Ÿ—$÷Ą±VŒĒÓĀҐiĖÄ!™_qYÉÖlPŖķ ‚|/ė7”¬a¦[—β#ØČ"Ž0×ĆĘ0%——ģ—mė÷§ÕżVõ· 2õé…e£hšźįĀ™Ų3bG&ZšūYĢ’Ą‘ų]$>+/ģŃ?¾Z-d4Ę`jĆ©5ÓaiÅ1 žß¬Ų-Xk9 ģx „*K+=ŲƄ逹ÅęŸÕ3õ”R%ÆłÕ²čwéŲHöKcBJŖ¹ ±ÓZ=64)Lœ>AƒXN«æqkQx`Q^ŲVb ƒO~ČēórˆRłOĖ+år½ŗ”Ų¼ińž›æä…=l+®f ’§2jƒģLb2¹Ō/%B=żŁ <£p5¾”#–Œ Ģõ§Ęøˆ—å§ÅĀ‹o!}ų ~ļ|‚nŃy»$LÉÉń†–u1­ü2ļ]“š¹MՆōŚ'æl= #höÅž³‰*`šM‘!ŁŌāF§qĄėlGˆ•(Ų°%q ³@ąįÆ1M‰, Dś^v KxęA.–ĪŽł×ņoČĄĖÓętv³BQǃ`)U_¼ć’ Ń8–d+{µÓļ‚ ń–;†÷å›?Ŗä2k€}>Ń CķšŚCēÓ™Ų™rĖJ†t£ÉćÓVSĖ[õ%[ÄNƒĻŽT£²óČūŸ Q¢ k9¦=S°hбk^Q ś•āœ•SR[9ļ”żĄbZŃ3o bsr>ČM*Ś«E“āosŅ„«†b°"MÄ$TƒSLŠģ]8:Vׇ1ķh[$“o•%WÆśEagƒ¼TdĒä~Ÿ żcčŗzźŃX=ĪX}¦®-yc07ęž<÷±f4ōųdmÕī É©ī¤ü’ÓŻŲųčŲŁ9 2€dlØĄŗšØķĶ»'¶åoņnæĮŠw'ē‘ėÅō?B¹µ§£·c¢ˆkö{9\/ļųZ#™Ś©śźdGұĖcłćĘkŖ8©łdI'vśiåg»Ķ§×ŽŌj>ēŚ%‘T¦Ō&ė—Q eŻŖUE#"-.Ėynq<ƒ^ēćźGm€Q>`½y-Žļļnģ¹ʩƯc8v"`(ŽŖAB˜åę{ŹäŽ;ĘhI³¾÷Ś VŠo„8ųĆ­ļĪĪ.NĻ.ŽĻ x>yc\ŽĘ}#āü7yāHčļōüŪ’4haē•>™æSżė{Ƀ>Ļŗ˜ŹS‰h7Ÿ’-ū¼•ķ(ŹžŁƒ°‰X§Ņ֝o JŽĖ9z­Ń |U,gĀĖyĢ)”™_-eÄtöžś½<ŽßžĆēÜłēNļ9ńŹ]Ļ©ļmzĪžsž Ļyž^ćĦǐqŚ…œM Õ {ķ`…» ßęóåŠd¦l˜ĖJ¤Č%E™A®Čfū¦Ģ·žšģžs·7xå®!Š÷6 Įn¶÷·Ųż =-¾LĖ2«ēŗĖĀ.kÓŚą"ųP6$pžęAōä¼b‰ĘT\®ŌĄ«X«EÆoŖér6\6¦™Dæ•#ō؜Ŗ«4ž¢Óøjhxp+Hq$c»œ!'¢½„J\¤ņB@Jh‚ŹŅaIo„=źŸ‘½īõfÆÜ5#śŽ¦Ł[›‘—F™Ēä%YŹ’½DÉNĘįcŁ ®zWgMJĢ;p*ƒlūÅžžŗżī÷žÆÜõtśŽ¦§Ū_3-Ļ qć)ʜȭĀ’ ā E»ucū0A¼IźZ->^‚ģ#Ÿ3a6NQˆ%ˆ™V! UŽžĮ[ĄjzŌ5ś1‰d<ÆÆ»œØ”?«AfĮX9Ź68½ś35‚e ((fµŲʾ–[ž\A[-ū˜Ė”³°z~[^¶OŲõ÷ ū"ņ/(T”]~xžyŠ›A¼r× ź{›fš`mw-į~ŲbÅŚ{KN†%ēÅC¼Dē—Žµ×71?ļzē9—ļĮų’|Ń{x¼r×Ćė{›žÅę‡G+Ėæ4'¤ģYā/²BRj–[Eē ø5•g Ń>¬šŅäQųõ™ā*æfśćĆņĆ?č ^¹kXō½MĆņĆŚ°ģé°Č-ŸēógĆBöLŵ =eTy@|T‘å]–ł3q½fŌ(›RÖLALŽVų«„²d-± –ŽŠČZē`›-Ś2·>‡«Ģ…³;Ņźc0ł8T·CYDAł*Me5lX÷dßHo›éoĶ „©„Ø(¾zOC],P­”LÆuJ£ö‰^@Œmt$B*^Ģø+Ņ‘¤£Vf(°ł ɾīéż"ŗĘ¼ޘ÷¢Ū˜§ł M]±MU@6ź-rü\Ih†>K}Šó–ŠŗøE×ģŖÓ8hø6‘'ść+÷å?_öV.^¹kåź{›Vī˵•{°•i®ö“jėāŁ[“‡:§Äœ‡Ä^‘Č—žbŃd†¶$° =5bĢd]Čz€;rŲšF õZåćĮWaļ,Įe.TČŗÖ¾ ޽z”mœū±Üö§jĮą*ۈóštĀ~Ŗ©I‡”-2±ė—²¾Bψē[Ł“£ q1}|ƤZ4oŒĘMĒœØšE²QPž3G±%CóUQĖӑ9MžGµrl.Ū9sD„jzaq$ Ÿ¹uä…ƝJ$ ß;!ĆbāēÉcKĒżRMAk%·*SńÉ·ę”?g6·ŸĖŸ~¤Å×īŒµģŻŃÖóžܳxKd†ĆdO–Äėą×°Ęüńž4šąVoR4oŸ¶²×…ųUÜ č¶›Å²N©kÄoĶR]ėķv^fÅMéöuN v©čŒ‰„“Ē9“„įē|ü Ų€® •F÷³ųa™JŃż\åé’k됲ƒ² õNÆ“ūu˜ƒĖcģHløÅ—·>e~żBOŁGś"Ś‘Fłh„Gė¼AĒŚ줒ńĄ>Š_v“üœ–.ē.±Q8ŲŪūkBĀéµč›ÆŻ¹&ģŻkb-ߓøģÓ¬Æ'Ķ,/¦|OM³hRĖĮ¤żp؀ģ0_¹żbē…—»2;C{XéõFõl€+ŌŪ’Äsļȟžsóµ;ŸŪŽŻųÜk!łŽ ±Ēg¤Ü#ˆ®+ƒ2Ԍčr.+żŃO(lļŹŸžCšµ;ĀŽŻųkAõŽ&˜VŁk9G“rą¼GļX™OŸHĀ“–6ą¾āĄō¹<·Ę»\„/žļ‚’śÅל,ԟˆq@°wE>¹žł‚Š4yWP`UVĆ/'ŗ ĆŚńĆ{'UB±0ĆDĶBnŗ `–ŗRå¼óf5+GZ9ąIłI¬ĻŃrh4-ē#dPžÄŪ“?żŁįkwĪŽ½»qvÖģ}ńį’`1ūR ’.fē·ÅøˆšNMċ6±éĄ)›‹ķ•øÄRü¼|©1Üiµ„œ²įų©žR.gÓƦPńÉĄn­A–ˆ §ƒłPR$ĆėļæŲy·s4Ț>ž˜ŒC'ų$7Õt)īf½Rww“(ŌÅę%w’DZ`{_žō§†ÆŻ95öīĘ©YĖ<™oę‘*°‰zš0ɧ—Ļ%"Åü~Īn§óś…w^æčʜĶPŅÉkBžs“ó9ِŻ`åȲVåü2g^›xpīyw ś_Ī“÷PŁē¬k×*ł„‰łŗø*±nžÄČȟžČóµ;GŽŽŻ8ņkQżDp™„sGlCM[¶K‡÷¤`2ķÕ}ųą Ą­‘@)įm9–į÷2³wŌ”!«'åmÉc}Žß‘c?@’½ä> -ĄcI+¦—m@fēZŌūyåķņ§?¦|ķĪ1µw7ŽéZ²ą@ށ×+柪e=×Ūæ_»Z~壆įĆF ̇˜Ļ–”A(ÕWcż«ķąŠjŠöaf:ķZIs ĢŁT H©#<«JŌ VmPn«³æäWČ4fÓ'JŠ"—¬ƒŠ§_%~dĖæ÷õŁQŻŖ-ĒÖĆÅW%S’ćÅóm¹¶œŹ_Ä+rTKÅśīWo·zĖąŸÅ#öp5bsü śÉ×īœH{wćD®„7^ĶtE°.Æ®ŠČ}#`\€xWd (šGŽńRĀžČŲ2•x>ēŁ#ū$ Ą²z9ƙĶ1S•±öĖ#O'4…AąU„)7y*ČO@š,’A½X;mdXXź ]?S;g@ݘœøœE ōԟ˜—ņ§?|ķĪł°w7ĪĒZŠžĀ 7zŗ¢śł¼™ę-Ś;–īõ"Ś’#ū»Dւ »j‰ŽĖs >(‘č]Œ ’Į¢šh!Äæ—%tŅēše č3~øhøœ|H»˜:lŁ’,ģNĖ›ŚPSLb1Ī ³fŪ?¼$AŽģóŒņFå\½er³œ ®ś²HtbÕØ9ģŁkT¬Kؔ–Ŗ7 7#æ” ņŹ«-щ ĘcżyŒ”RĮ«õɇ Y’3[vē¹üéWõųŚu={wceo-¦~‰:ƒ SŠqPņ?qĆŪņ§Ć|ķζw7ŽšZĄ÷ņåÓ§rŖ›+ę°[7£qG²Č€ss`¦”|į]¾ڊ§ā\žūŻö,—»ŠVO]°m\̇9®F-b‘@>r!’b„ƒļ¦ ”E£m`0 %v;ćNĒB‰\v$ā ĖrĪoģӄ[7ēī”ÓKÜč™fĘØcęčėQ: ŗKÜ0aH¬Æģ–ūÄƶ&žĆ‰Ć§¶ōÜĖ™Ś<Ÿr ƒ(Ÿ2|FmziaŠņ 7ŖŒfŽ£LmƒČ0lG§ss¢Įa+ĆB]&1 g‰Yad;3ƒ7#3œK“ĀŚ;Ō[¼‹æŻĻ īp‚¼pNkœ ’ÉnŲ‘?żŻĄ×īÜ öīĘŻ°–Ų~žBŽ\ķū/=„EŠT—5ż·¤HĒ#q1Ųš®‹ÖPœ#Ņa_ŁĪöžĄ¦ ®„b•ÓĢŪŁć'ē%“Ÿ”KÖ@yPdœ‡CwØłź¦(Œ½łźP¦_Ż3ŗ~&J RWWK2y°ćĘł? É­šńАC˜j^{Bqš‰Ķ„ÄK ‚ Ŗf"““L™4ŒeėIöD‘Ś ŖŪ©&±UĻŹÓsĢ’n€Ņä„ Žē\aó®­#ÅBż„ĒĪ{¹l̹ž”‹ZĐøłXŒŖ„8lāÕ}GmÓ)–.G0ާj^&N•Y§rä$éłYٱ)gLµōä;\EJNŹw°¬¶8#ŠåOLī¾üéO._»srķŻ“»–Ł~.^É_Ž-—UĻŽ0zW»!¬C¦Ę\[ `>ųnūÅöĖgŪ/^ÉłĢĆéźĒŒż&ŠNŖ‹GŽŅk,ęl€jāɎ0’Š~rA=tĶß_‰kuiQ¬q’¶†ŌõNO” ķ‡Iv/ŹI@ŹäV“Eˆµ”zŁ*(ÓGHS:ŽŖpԊŠĖØŚ„¬ŚÕl‘[hÅw½¬_A5K~¦Fó®R[ag£4ß! –Óa©·āӎHƒGβ|Rē@閚ֶdµūĪūŁėź¶±Dā+$­aųŒ6@}h »VM@ ˜§'Æ®¦ņĶŪ'ņ|7¤æ M1 Ŗ€ŖX®č2†]e’ńtĮīžüéÆK¾vēŗ“w7®Ėõzü ]‘Š‹y_4xĻÄ'’½ŗ£•Š( ‡DŃll‰ź•ģŌŃŹčƒĶ¾34Ü¢…Ł>x±KlÜŲžżb÷åSŒ Ų< ä@:¹‘{’„w…{Ļ»W8ŲQĻ7½üŽ=‰&Üi¶~]ļÅeFM¹ąÅw®¾Ó»ś? ²>Z‚C°ŲšĀØĖ‘ł'¬ī¾üéÆn¾vēź¶w7®īõ ĀŽĖ-žœŠq9=„·ł±ØčMż’_Ums½B$õāą°)k~gč”{b=t{ū’żš {čŗ:V_¾Lvćs^œź³ÉyK«E%'šb¢š·„÷ņ9·s Ŗ Be‰¼1¾»ZYnl(äx†>÷Æ ź:b&I™iŽÄÅōa‡©ßUŲ)Z¦©g 2R¾i’éōĮ>Ur®ĢeÕ kąą†Óe=÷m&Į!ʦrōˆĒ¦żŪÄ£4• ¤[ńR‰.’Wų:Sś N#Pžņ?9=ŗ#·'néb±•ķķrą00żOˆ ŻŪĒ»O“dŽõ1śåŸÉå7^æüj3S~å%dd›“/kŅRC'ó–|JÜVn[¤ļ• ©}ŪC6jQ0› 0Ó¾Ņśś\ 'Bƒ<m°tĖł’S‚ƒļŌŻ³°Œ„¦ w“öd7eYڳįÆ|:!Ekö®k—<åŠū?kŪ x š$\ē’ņ^[^éŚæ {æöĶż]~qŸÓ÷ŸnŲzńdG,«ģ€’ŃŃÕżß_Ōu^>VĢ£zK²„Ł{‰$粄®²ćט/ ·ꆫą‘ćŪ’ćüģųōmvö.»ųprž}žröÓń›‹ģżĻĒ§Ææ¼—Kœż=čöÉēķkņE†č—ä3īĆ”#ś·_¾ÜŪy6ٚ“3aüŸæ•‹Œ_…?UĘG–°øž“søČÕžu+7Į„Rlm9’ńįƒĢžoҶ‹æ’žöövėŹ}«ŖÆ¾ßžž„üoļ{žž÷øńĻN¹!ćšf²”eņ^ĀüĖAö®śź}Īfn·QgsDm¼K\9$ČQ®R]Öv_@·(Äx‹«ńbk^“:C?/Ę|4ÆL룠e&ŽŁsƇ•ĶżģYk„žy‰\ģŁeax·pÕ7µ1"˜Łw½WćÆW!(0žņL[_'$;Ōŗė¾9a€…ƒČ ŽĪb„*5:&żŚ»։Y0‘Óļr•-}ō¬iü.GoFLåžü"žŽy©„Ļ@A\©“³{Æ UoŽ·SW+q¢É«’+AyV/§”S#.Z&ž[®s!ēšśšēÖkÆFœdėU” ©³óxamw=“Å]€ń ®õČę—X œ4ҘvmCį[` A&‹k ģĻh%–'²Ÿxų ī`²Œܘ"·ÜDÓó•uŚ(ŅXI8ä)@¬£Šv@fo9g™‘æéßPŠÜ"Yœ¹“»Ž±=Śå$˜Pj\WŖtvpį'zr®ŅĘj9ėģQ0ś ±€+łĒ-,)šåP½BĀC—ŲFÜ“ć ĮĢeƍGd™ ˜ČW§l*HqĆĮC˜) xŠå§/”š¶Y5„®:XžÅßĖ–ßę«gϜ“yĢÉĖāˆpœ£ÓˆÕ<}ÆĻŚŻy:äņk_ŠøŒ ±„”†–µÜ“ s×c¢2‹ņwQ愉&׌ņ3ĘųüāčĖÅŁ»Ÿ?~Ģ>ž¼9>=Öŗ_|}ŻŗŪ'Å0~<>’o|9>z«'Įėćwg_޳œżœ½=9æųrņZ¾”}É~–ńæž}ł;/ß:Yń›ö‰on0¾‰•Ŗ‚å3Ŗōćq„Ą¢ÓŪV<·–āå»Ū²õĘ51Dl‡^™Ļ‡×Ņ“驹²C%ŹC5h,Æo¼ĒOŗÜ„ta›üsĢĖĶ‚ėżr*ėĀÓŌi;cé!F R?@Q åACņN;Jŗ‡™­§6ėēÖV¾-Kl£”£+Tü® {ų ?Ųøśö֑\÷5P)oÖ6žÜ•© ½×Eu0Ž'Œ#ąžŒ@¾@ ‘`oųµH'ŚØkˆ’ŌZ®z4ᖁ=\AVóRŪ•¬‹°Į¾'ÉSż š¹snŪ0ēł<–²ōBr¶ūŪįśxŹŚFb«±ŃsŁ`–ūĮƒDėyæs„œÕ4…Zé‡ģ¶)ݘ#KóY įyZ0c„A5GQ™ńó;–iļG3;×׆ŅoōĀR FĒo PcCµO3ĒxB øÄ&#ŪŽRc†¤”įĮh% ¢Ń;'¼,œŁĒ[?lé²}-³łxmHß}ŽböģĢŠķ[*tiK]tšYyŖ¦T¶ōž”į]ėlłĆŠ-q*G’c#•ščę.ćm¬/ §™Vō2Yŗgmg®ķŲčϲ„i}Ófk{ÖWC'@Ų<į6Ø“M)¤†Ś½E*Ųh(Ołė¾ “!VRdŗ ¶M^y/×ĘYÜzµ¬ŗ‚ŽåF~Ž!»9˚ų¾‡ŃłŃƲm Ēģ‰!•±ś2#Ž› LaPšN©œ”o9ī<˜•Aō6īpß3ō‡Į@GFrØ:Rx‘ąUGŠŃP5æŪIąäCXĶ#ݽx$Żų-uųōw›ƒĄ–üoD}ōƒmzŹņ±Qq±5‰æŚ’$'oYÜRŚ–.żø cĪĮEĢo”MHŹ ó”«y8łęęČä©0„ ÜÓ\€ø¶ŃĢĆ64…žbF… ¶+vhwyĖĘ ¤žįGĖ6mNcŲMŽĪei €HFŗżŃ'JC×l-ėKpĒ…Ō ¹ļšŠ‰•äŗ[ńE†čų¼¶ŲxČ©‡‚²ń!Ž'ĢJr¶Ā7ń¤šŹ?ÄsVxXhü66ķś$5ŒšJ'ō[ OOlbYKlÓŠ#ԃ¤éŚāŗčYlõ!óōŹ’øÖļ²nł.Āo¬4g„¢Lń±łŌˆß|FÕsqp^,$ - Ļńš[wmø`z¶Ö¦,*Usø© ·µ;Ų8·¾-ć óč‰y4G01łŖĒr ?f\@Õ6x•M1=Ai«µLŠ3^÷Ø&Į¹&^źšp‹WF2ņÉS÷‹ōę-Ż‘1Ę)ž@ē·BųqÖc/ė·d–Ŗŗ§u't‡·ęŹSÆY‚½E§):ā(õq(ń«8ŻĒ=ŻQ—^¼“ ©gĻ?`± LM5(e~½’Į‘Ä$¶D\#³}éÅ{ѽæŻNaī]ųļöÖ¦Ié. ē03ł×Į3/9,ø2——•ʍC†­JQh†%Ź(q 612™†Č°ą'J“T±¤’"÷6ƈX‘ƒX4‹R•.ÅPčĶ5ƒ{Ö4#ŲŚų'Ój@AÓOC¤•Ǿ^¼-TŸś±ÓØėū;-gŖęZ1P2ø4žžoĖš|cu½”Ż*“™Ē‘Zpµ§b`>»lL;'H«„r€Zi*[ŪnkŲ#;-Ÿå著wƤ=ŠĄb¶Xō|SÖKĶ ‡—F yŽčuųn>7p…«Qa¢Ū€óbĮŹø/;¤7?ž|:¹8~›żzōåĖŃéÅ?N½łxtņéų ¶o>½?>ĻžeĒ”; ™ÆĒ_“—GöʗĦʻ_h‘ćčį [ h¾7‡Óߌ³wļŠ^<ރʤŅ «^DqOXIāR&† ēÖtµ™–Ŗ ·ņóą2L0ŖPNŚNÖX²IĆuŗ}b ŗĶ°½’r ŠŚŃ’łįč—ćģō,ūrüéųķ‰ĢČ»³/Łéńū'ļOß2ĄŻŽ\HŠvrōśäć ¦ņõ—ć£70>½ĄĀÅWߜ^|9zs‘’כćĻņcg„Õ}9ūåä­,Š“Óģóѹ‘£Ļ²w»ė7FŽŁĻ§o.NĪNų÷Ćrɷǟ޾ü=;ūõōųĖ ;:} Ōa„äwśV!y¼Ž§ćӋģדå/²×ĒśåwĪų£xZ¹ÓŸ>b…~9~s1ŪóæÉƒœ’Ɵå'ųĄēŸOO.N~ņļįƒ“Ó7ņ0§GĆb>žåų4;yĒ æ?įø^œ¼9V@łqöłģüüDĒ/’üęĆĆśŻ°wv“½óå俇 |ņĖńēGoōYä~ææ“Ē”­ćH-ó°­S‡c=ēÕó$‚A„źŅNHŖ*;"6O!Nŗ@ߕt‹žF`’ö×R¹Źd“s„9A«Æ,Ģin²€ę¦Ö)ߣōkžĄ īvżÕŸ29ŽĶYM ½&čhÆ6ܔ”•9ü Šc豉™ˆE°¶¼#l«żÕ°©4"”m'ćZŽĒÓāĆ3k:ŽßS6yā”fÄ”¶,ÜÅ?s[»»}Lzj&ĆPŲŲ]ØQēSjūĒž—ī×/A¤ĪŗW€]F&ł©Xß›’õą2ŽžF’8ł™@4 ęMSōDžõŖ"7;¶Š¼Q&ü@ć½qZ¤.Šöš`˜[0Hgl/SpÅ®°`ŃŚĶu–ķ<¾żG¢Fö`3{į¹t÷łÄZÖFéŒ3#Ÿ3æ¦0lÜĖʧįŠėg’{ŻbGģ2ÖE²ž£¼””ĆåÜטŻRw¹Ķł@”šäR“ķņc{ĘQŻ…¢ ʶć~Ļē4æD)“·¹wļÜŪæ’4i&Lqd’in®Tq§¹¶>Ų¾-V黯§Y!§Eź³µ,{ómź«|^ž†źU‰%ĄUŠ*v”ĘIž,„¶ĢĮ{ĀŅČæŹvż˜ƒ ƒš¢SwX{‰§žūąņI“KȌm1fo.jé83Љ‚<äĮ޳ƒķ}šÉˆ5i²ųœb†¬ŃŻjŻI‡U˜“ļį×yِ‡ŁH7‘ĶuTuæ‘­Y»“SƒĒrp٬DQ|mUÕ2q±²Ÿ·Ī·ĀsŠ _«·õ¤į«[¾:f¼ā¤ė»$ö­‰ˆā6ŪŪß‘}*$ĢŽÖ[ٹ\ä]^B YĀ£æ²—/_lļli’EŠ;³¦L;H  …VB“°®eF h¹čs;ė| Q …+±éŽ>ųįłĖģ”.ńöžó甆dēr4gᬾ”Ē!Ć{ŪŪrn’š|ūi¶’ņąŁö?¼d°‚²ŖüGžg܌&£ƒę—©B6 źŅ±–hoā‹Հ~˜Rg¼‚“ †œ@—LĒ6„[Įœ½K\Š<ŽTņ³ŽÖŽ)z_W•,®×[Łiq;ō’Ģ(nIō'6—Į8~ž-©PŖŗĪń…’Łłńh“ö6ڤ·Iåš,ų;}‘1¤MåŲVJg„ĢšV•ļ†É‹‚įZˆuY0×j¹s?»V›õņZŌŹ Ü$:!€x‚=­tÓńø¢õ޽w›z‚œöŠ%‘b;¬ē‰^D·ƒh»rĶMB×G­ŹŸ!eœųČr÷Ę ņÉ”VY3ƒßųįƒļžŪ6žśæķž?ž”0r!S1Ć0åZtvłA°ÅjøSošäĖłKB/¦š™Q Æn1š&Y@,µŖ—&-8ĮüĒ'Nš9cūĻ=67Ƈ|‡ń -'€©Š:ÅLGɔ–²$¦÷cĒŽ{ń5C uĪĮĖńöģ”łąs<Ⱈ!! żIŽ*BÆŲ«g«Ćāt„Ī›ŅÆĘĶŚ¾Ō½ÖyĪQēžY)¹ +TįžŠ|¹Ė-ā+¾Bż“‰ .}óHĢĒ«c­]”Œ…³ze7CÖ%Ŗ0TȤĄI\éOė:-!Ü}ŌŻs‰Žų aAhÄrgĻ Z@ąØ70²¼¹Ķg‹ŒNķ„üöå%ēó”ŻĒģҹĆĒüÕÜWķC Ļś<.䇨dÜ, ?įM¼ķŒˆB¢5ŌÜ-2ķŃŠń~PpÓ>ØQå °“Ąž'³«1€ĪÓ [čSq’ø¶„æ×uOøż¤+>=éŽxŅŻ³ŌN“KHĄh‰[§ Enćųt$a[}³ÖMėÄt-sÉS#Ś@u`§#’f½:ד“<į;¦)KTāVŚģņ@h»¬5›Ŗsä©°-¢:*¾>/Z-<$ѶŸĒćlG½ É.ié,bT³€lŌ©{ų źµ°qi |ŻL¤¬>ėéż¶ŪHŗ…Ģ Ši!Ł»?|²éņb²ģōĪ ŪrTM­uŠļ}CߣC«Ķ¦Ŗ8ƒŻ»Ę'tčXę’Å-u-d—žźŽ¢>ŚÄ“Āų Ÿßg†%øĢG̬±c蛼F”„(\Ų²I=Ióź6ĶŃ MÕ Bö¤šųw]Ąm>|°©¬l³žl.D>NBća9*0ŽTģzÓé­ĖĒ‹Ūx5q}šxōæ~ļ„Xż~XWdzŸ“³©üå’PK ÕreJimages/UT ±®»Xµ®»Xux ččPKrcJņ ȓčĒéimages/001_th.jpgUT R ¹X®»Xux ččlü˜$A³? ÷ģŲ¶mŪ¶mŪ6wǶķ™Ū3;¶ķŪĘĪÜ}Ļ9÷Ü’wæ[ŻżTfä/¢+3"##źÉŖļµļ?$ i @źßš½÷²¶äå4 ‚’Wł÷Įżß²ōæŹ?€pkŲ’Š’}HżOżæĻ  äæ 3SĮ’]ffb*ło)ßß’Ķö½÷ĆÉŹĶ͉‡‘ŃĮ•ĮŲĢŃĜĮŌўŃĖŲ‰‘™‰Ą'čådljkīFdbniķĄOyÓÕGIdmĘO©É.Ļ$ļ$jne-åćb®ź£ fźckŹmF)(ĆēÅćeļdoīfLäeoēąŹćÅOł_Āyž•’Cf¤ür1³ąQ“ųČæ?å’\‹§§'ƒ'+ƒ£‹%#3777# # ż?½«·ƒ›±½ƒ+é? 0D’%CĢÜÕŌÅŚÉĶŚŃįd™’Ō’ö’Ó±’“üWĻž±ńż§Ź£„bīźhēž~N>Ę’?ā’"µ’æŚ’_Č’‡¦ī`ķ& ķ`jõ?š’WĖ’rüĒ4Ģ]\’#ę?e¢’©±00’ė’ ł_> ;cW+%kÆ’»į’®’/’掞’’śæ2Dķ]T’)Ś\@ŻĮŌŲĪŚÄÅŲĶÜģŲžÖ#Īų’ņjųoŚ?UžS*ć’Ŗž_åĒÜįŸÅøüĒ4¾7¢H(h(h(h8X8DdDDB ,TrbJ 2b2Rj^j:.:R2V 6.~AQ*f)y)!y^aĮļ,ԐdĄ÷÷ŸIƒƒ€ž ņČ÷źæ@:īÖOņŽ’Ž!ŸdčÖĖųIQÅĒ®ßŪ.’+ž3ł t¾į½UKOuS?9Y@ĖmŪ¢¬š*,Iv{ļū—-Ą“Üo~EUßy"te0QYēĀęxoś*öś)ß7zŒ~µ–®°­;‘ūT" ü°ß(”k –ķ—8ķ5ƒęśs60ŽrżŽ‹½Ä;żK¢ĮæˆlĄUbVw³œĮļ`¹J½‡r*ęh4—a2ŅŚ‚£übxe½§²ś@=¬Ö52Ė“'4ąG€ ĄūL»ĘŚBy‚®J+SņB—/Ģéo*ū#;ݽv·œÆ¹ysĪ>ežę\™?¦™!Ģģ¬xāóɼó W-<Æ­ĮŗÓ;§öF1ę!½ékPbėģ‹/­÷ ^ŠlJa’»~ѹdnßčI(Ä7Cq™²©”½””{椆}f%E=^–®ō£“$S±'²KõŖb”϶čŻ*$%Zļł@æÕĀŹ7 `F#āyW2mŽåJsfŪPŽ„–׬*eÓ¶ē°ķlē‡LćŻßó¢vOjöAL½Jä9;m‚¶9p“ŖŠĢ`·ŅėŲ*÷i{3ž(ƒi‰féšBBB¶zā‘Ą%øšøu½’ó*¼Gu`gzG6ÆdŖŠˆĻź‘ Ē6¹bzÖÜjķÓ[/Ń(Žč.?ś×4i‹Ž; Š5$Ē茻Ečé?7Ī‚*gBvysāĀ L®Æ<«Ö:×64 Ź x–ĪrszĮŒĘRSĀ{X~9T©Zsa²2M“āB ­ØćiÜžɏ¼tJÉ#`hi°ÕcØÄ }>N™ŚÖ¼ŗ0—#¾āąņū?ęiƒˆįĮæ (éj“¶Š·­©ž*'7óWHü™8‡ēęåó%Ī4ŪÅs“w£¾©¶.ØČŠ­ _˜ĶŸŌ!Zu~łł+&©L“öžKĖĢŚ1·}ü+øÕŗ0škšPC“ii­ēčX’?w“Ų”6FåŌ‡śu—ĀRĻdŚÅ&}4[zv•¢pS»BŠ0žģ!~]ge V½ż*īŒ.|ƒįČė±< żĘ’ ˆüīóS„V”Še”ģ2Kü“)ŁņĮ“ ©ŚõõĖŽń8Yę ­¢3,=ŁĪÓčĶ‰5E-'ą[Ÿ'©¶ v{Gīéė2Õ+±‹R>Ŗ«­0½1ę²Ō„…“Ēu¶5* Q«ŸśĒŃ˹ī,g‘»ųL{žźj5#.Kiž#ę,Ź® Õ*ś.€To^%ę»+£ĖfĻå+­ <5”ĪŽšĘåżīž„GSڶa:ŗÜž<‡\Ó6{EÆ5GČĀē¼£Z„˜ՒÖĢŖQ’‘+8AH@°ź<\Žńs›O’ŻK¾-›¾öŽ;A¢:#ŚSŗł8„6ėøN©MķŲ®Åt*Ķäš#›Vż&3ex :Ė’ŅĻ73m ­RTŻUE„†>—“Ź3‡Ŗ¤Ū'֞/ń›5qTūš?ŽĪź+’’čŸc³4’½Fh+Ä&ļ\‡Ō²¦j)änī΁`«&4k$INœ{®§Ą\ā{„G×É©٩נNemŪ°™»Ł:Zk»œĻ䌹*×ZC-ékP“™ŗaéŹÉZµóŅ»¦·uŲtӎčPf¢Ļ¬Š…¤Rčk™ŖĢń‹ņ¤·¶óŃ>A ūõ’ķmėG—°ŌS ¼ĄJ§ĪŽ;pĀŅĀžFŌ^ĖńŸogš$"ņs…ÅĒūZf#ēlŃF#&Ą»C`/^ŃN„X‘°f¢ay.„L “wņ(E])Ԙ•5_Ļõ—³smZęŒLhT&ńpvšĢŽ`ūŸ× Ē3¤©Ą®»Kt˜•tŅoVļ¦Ī·I/nˆtX]Qæ\’¢ŲÓgŹ7.!«EB„ŠŪ·žRV£m±½Ÿi>¢Įy“wĮ·ž ? ėŠ¦ĪE›<"øsP¦»Ė÷Μė!yM{¢ņ^Ŗ:k½Fą’čˆņ„ ¼\£Žyl)ZQhS#sӛįOmūæ~ĘE5AęM‡šŽĢńŲ«°@Öq;m[*O“[Ӗ`뇗Ėj‰ōH݉9`ŌIŠhT­Ā˜ÆtŽÜ)V„Ņ–Så~gš X8DĎŠŪ“ü -:qc¹”­FyåÄāøL|(cS„‘ŌTŗƒ:OG–„‘Ž6²Š‰°ģ3óE9—Ŗ|>ŒūcMä=Yأ—'Ø6Äšŗ¹’NJeS(%Ģ’Qōõviæ~;6µŠéH®"Ÿ¬6©Ō,ähć+ŠÆż»ÄŠūݐ4ÉJÓkRTS–M±eöC]•ś®&óIYQėtwl¹.•„£Ų€Y¹_ ×ųļg ō\>É*™ p“—°gŒxōˆX ņŹ-öÕ°šŽ{³ćŒ`M¾O)Wč÷Šā/, +%EՈūDķŗ-łśx>y’#šÄ”;tE&ʵ(źlhγݷņ§.+éŠuD¤ļžŌ‡žO§ożŚbBź«ģØCį…Č»‹āÖéńm¤écū'ņBśĘDīŁųšeO˜¼ō9pcéösŻVå ½2—Ķ^¬GŸŗ’œėĖXXæa'%#5żÉČówńŚåÓ.ńžPTawL-ó!CŹ8pEä̹©s‡Į¼Iłiļ\Ń›¶;dBćVrŖīpBõšŽæ,[’Ćn™æūI%%sQf÷Iž¤¼¶ %ē»$Ź]ÜÉÕ?•_Ģ5m öŖąl©Ļu˜Ō%Ļęŗ.µF™{“ØW»ŗFG?Yµ_ē'®Ų–źG‡ŪWvŽWJ‰8ķ}>^ėĻV>ʬÄX`D~~©t–&5xK©ØgnV•„_ų¦F€59¼öõ>V«¶;e±t g­WG ®å—k«Lź›¶ģ zqģŒO“Ä ų€s4Ł·ųŒ T×UČ[A8Zē#MŌyĄ ®{]L„’ó1*vÜmYzHOö »ü`,½Ż͈¬¶čŠÜ‰ŖÅŁOVM’VX„? ‰ ž(³7Œøé¤HŁS +évčC¾&ņ÷dŒ3/Ž“¼Tį`ˆ:{?Ź>*H{?x†Ķ kŪĮo€†øBŚKk-?÷y§ņ(Ž}°gõjĻ{P£HC 1ZZ„Eš.ȑj•øƒĄØ^f2PŚi°$ņ5ށ)éV®¹‡ŅYRm%akŁ.›oŠ¢@1.įINŠ–31”ęõ~X±wl<ß[ éןŚ7 °.‘§Hgrźzp–·ĪYĖŌ{¼×™YćÓ-(—{ÜĀ«N!łm?ņJŌó »“ŪĮkj«čß66tĻZOמž(£yŸšĀ{ŌļĆNMZ€Ł«§%ęhļST>Ė<õÆēó;C\s ĆT…»Ģ'¬†œ­fédōxghŪ\Ųė ¶ĪąÓEsŹø³«&ZŅęE¤‡T„³Ėźi²ŗg}Ř?` ķµø%‡–•ły^†zä$gżoņUĪč»m!j#ęų/ā½_fÕä չѹDkS.uwŌłv|ņ‘Æ5žyūĒg{?ĘĒgż½ož“Č–ēåż‹D‚žHņ_ĄŒłžü?iĄR\P`ąd$T4tb"R2f6vr&!aV%£’I @ĄLU~µD½«˜„ §ÆO38—‘‡4‹7dtlYX:gęōŒxb{mbg®N8нŁäNxJgyJ{„©²]7>tŹĪ\0ņ–t_»²vL­vÉ®vĖĢÜŃb¬čœøeę.XxJg“²2ӑ½pgnY˜Ģ¤u,ĖĢ”©œØS³Ö„e¤”ĢóĘtĖbū¼Hgn—ž ąJ€fżŁi+Zü•[ŅUōnCͱ¹}ˆ&čā u£lJCÖc2ĒŃqfŅąĆįģED;˜!aŃI”‘{±*&ÅŌģųŹč.śĘæäŽĆÉPwõJVgUj 6ž\g¹Ė5C­žĘ–nQķ¼X”Ü}½|mC›kt,ąāϰ܃Ł™N¬‚=ā0}݃.xč%7o@=1óKÜ.G¦‡œ/t\‰Mē5*™ 'š© &г8”NʹßlĒ/ŪĄ\śµ¹ä؆/eĄuąµJŸšRāōHŠ×¬a ©Ó½ņ¾jbąė=ügi»£¤”įé…\²%W 0r6yXÖ=c3b¢0ė"Ihœųõ©±X{”=e¤ņO½ļhž Ż«qģ²xŅĢĘó”q†}gL FÆdępB­üœĮįXŅ%,ųpIÓÓŹGI±^L”Å™‡CŅÅĶp(žR`ēŚMŪ6‰*a–»-.‘‹Żś#ņ^6;¾™°ŁąźŁ¤нhl u$ǼD.V'6£Ō³ĻCxƒĘAc’PŠ|T"ZŪN9 {ą.”@3uĒ%Wś:a÷ą¬WŸxåļ7–f[쮢ąZŽXRCLc]2Ķ@ģŠ«ńœB$K Ų&<÷܈˜P„ŹĒ\Ź|Y*ń źźI6ŠŪō ŁIŌ*|xßķ7ņ Ūś“Y Č5Žœ‡]u@GQؑc¦ÄĢXū¬÷Cē¦wĻöŗŃbæę7ĒPjeFÓ”§5Rœ‚"Omž©šWET’õ¼zŖKDż^)˹N™†ųYqĄŪšÕ’3»Ķ–1"śU±ż!r!ź!ö×r4Y¢!†(Yų¼9CĪŁ'=2oįDņ%SŁĻDe.ū@#ōŌÄ8vło?±"¶ßŅrIc50“ł ŒŠqųX’fmtÓOg'†÷ĄV+Q“éO;-ĒĘQ¾ėsü]©&‹€Qłžv–x J@É“šAE!,.æBš'!”¹ˆ ”µÅ•† A»oÖå&g+Ļ §uƒxzš•xsdNV ķ‡ļLxt¢ ā¦īyÉl‚äh 9šWŽä«p`޽!Ī@/S§Ä(˚½)*4ĆŌ¢b„ čĒŁ‡\N›oĢŖßXŚ©f)iO¦ß·˜KL:ā”Fo±ĒG!} 5 ØśeŅg(Ą®5NҚ%1ąŌū!³üva˜T…TR„”:`Upų\L‘ā׽ɢԁŠe‰ dgŠ^›ˆK® &‘Oē(Uƒ=Ō”MėØŽ!{€Õƞ ©Ij7~³Vµ,VøŻhź£ż›’ Ū…’ųožŠ ’JTŌÆ!Xƒ“0eh›Łn•ųŻ|Ød¢i(ł”‰5Źu¶@p śŻm~"£¾»š hČŁīļ[·Ņ¹€×h¾ÉésŖÄjĆ<ܜ{z|v~ŗ›ų½ĄŅóĘB³Ń§˜ĄˆÖqbļ<žTR’ŒN~*¢<„—³i!Ęź†l{yŠvØ­”)Étæźj±™“£†rĒļ,`ŅQ8¾9ż˜$_fœŌC—(Ž[4†%n“}ü£rĪ ĪxŅ3ļ›H]j}RĻ{Č;Õ<»-^ņzUX=Ń/žSœ-fīFjėÉųQ Æü~ŽŁšØĘĶĶ"‡IjäīŹ÷®ų3²2Aż»ó1įŽJްTœ‡RScݟHČ·”XM•1•ÄO%؊:4Mzµ4!Ļ3օ·$WxĪiĘŹHó&£k/š½ ¹[S£“ŚŽ“£mź³łāńčÕ0[Ą½³dvõ1&iāS ¾v}Ś*¶ /ķ/‰ą/VĖ8Œåœ†Ņ½‰ż“ĪžxÜKćѱR2 “4†WJėh]֐LӘ&z­±ļ--õ¢ŁģhŠšńV ˆÜÆÓ5¢īŚe¢Ø\ˆ—ßzMŒpÜš±Xŗ_’uńxęMt7öĖ ¦]”,ĢX nŅHaźb ­H³0Oų‹ģ®ßyqɆ“H.–vż·Ÿ}NM†KĘŅg“#ŲØp<* änck"®ūbØ„č•­$.GGh³~8£ķ ,æł¬ź‘Ą3¶‹ę’Č*:‡VĆZ‘JGןK]J˜ZsZ¹É¤¬ž U†yŠMI{E§1`uÖKTź¹Ŗ¦|u–jÉōtNŗ]䔜isk›ćV`7V¬‹«Ž%‚ ѬZ1Lż$'—h§=$W¶cįŌ6]£óU¾|‘HYŽÕęŒsaK80{oLkōŹ&l‡»i³j“ųą?eŸÄš Į–ōōpÄĆę‚IüŖYIJŹ&µ’FēȃŸōƒ¬<&IpŪ}²Z•I"™LÆ"ŗV}źL.h\ņj$Ē9Ź“š‘’Óį)Wiņ‚€ś9ū‹¢L:O›f¹¶&uYbRāŖž„7‰R4ˆ{E!)!hKõŪ’ ²Zʤä4–O„hµHƒŠķ '£ĄT}Ģ[źuĘ®•V{ä‡cĖdŁŁĖØ7IŹ(”ƒ(-h®ŸÅž=YOó•‚7–4ģ7 ”Å@jŽīŸĖKĘųĶ™^üŚ/1 ūę⠈Æxģ ŻéŽ„æ6>é”Ó,Œ’ˆJĻæB“ƒ…ÄO† µē¦2Śālf:ÖßŖ^±±gļGāīĮM<1öh[-׿Q‚ń/·ØĪ3åōw~š'hEB›r‘nʎŽz:¶-j³)>–H䑱/s3LN„bēóķ|˜­“&ß摕³øó8֒s+•ĪŹā‹ćkŠ‘¾…–͹k«#VšIµ'Ēh`ś­ń‚ėy;\%zž#u—@q[©kĻü÷Ī+ūõ.N—ĶTĪsér%˜é|ģU|üæ©ĆÉ|:ś`”„–NŃéS.c§¤žÓlŖŻ@ÆÖ–›•ž€-Ņ!›r½¹ƒcY/ĘtB³¼«Ī•ę·FKglś™4 ļ.„@»ā‘®Ń( ±{± $ä~ĆĒm³Ø¾Ž¼“õšy¹/õĒI°‚7ņtŅį”}Ž ÆĮ¦x”bʾBz ›Sē—C“ķ‰c‘t«#»6Ou7éÖvd·ˆßvNņ1IÅĶŹĶCG.é9^ˆ±˜ƒN0‰•ūĶöäāĪŌ®"²"l …#£RĘęVW5HUæK}#*£Ōdś öĢĒtėڬw4/Ó>|Ā× „+(ž€µÆ2 b{lŹČXG=jG"ÄSŒĘć¦O<Ń– „©.tSķĻ’‘X„Öa‘#µ4ŃNĢD÷Ø­Y’–įŖ\‘‘ķIā0Ń!ręš;œ/ĪMŚ,e‹M5¾cæ֘..‘Į‡„odJ~é0ķ±,–ÆĄ{-‰¤Ä"sŚ…^"7”rJéo(2Z`“/V:lI46…C{—~źOŌ?Ruxvcq XQü—ItŠ(DūńK7{šäf’Q+|wX͌®{§Šą&|¢hMÄPŲz \ē'ō’aš’F Ŗø)ĖÆ ūŁYƛ“YÅ÷zd^ébł“óx-æ ŁĘ0ĄŽA>ļŹbēD„žŪTšiÖßo­tB4ŖÅi}4~Ēžłóv§mTn¦Œ>ūēq9•.¹ [ÓW‹#słÄ­=¤#į MM%ŽĻ3ѧyŒ•„Šl¶2^É-[܃l½e>%T$VŚCĶNż]Ķ«~ž-]üy oÉŠD4“†é¬0ĢĻ•Ķ”Ąė$„Ģē³bŲמr-6‚mN ½$†Ž;•wšÉ}ŁĮŒgEåĄžüźŚå‰¬…tœ »Œ{Æ\\ę Tå›·79$õQœ©&aķ-Ö„EœƒhpG-»QĀs(U˜&‡Ų8÷ź™J_ÅmīK³ żˆĒ$ę“„gB…é+Ūó7 ĘĮȳ)zcµ$ĻÓ©!źM *ķƒC45vVā@Dƒi-A†¢S„DĘķź(ŪĖ Tņ«|Ņ[œŠ9ó2ļVĘ£šK7¦½-ņˆ÷$#»ÉYDUw§-Šų™Ė8¶š“x@m7_Ōę 5Jŗāp×s_µ£ ž˜ŻĶœ'oćgāĻ„š Ń ē&®¼Āw-G“&Ń[‰¼ĶŸq§²]s¬Kƒ”·äņœAųŒZźä”(k!ÓyÓp²sēŸÄn:«Šs–2DGżeõ؜y­ż‚ŹÖØ|_»­’xu!Äiž<š R •zį! r¤bˆq.;‰°17õ(TF2Gz•’1æīū¢Ą„Š\ĘU‡{L$¬*Ė6Įo~ō3qį§= ōż45Až×©‘ątx`³»ÆvģŚŲ2ń®ųŒ‡Īroö՛½ˆ,õ—ēøŽ °³ē@õ¹q¼·x$#h¹k +·“…×?O¶ØńkN&ŗ(ķŽ¾FĖø“$9}4Vk «ė¹ruĘō ¹š-*ęLŚü#lŚZ÷ŗ,fŪ¼Œ¹½·ž/ąćķJ‡¶®Ž£ęž9‡ÓZ£ĶX2õŚJ¶ć`čÜ'! ¼ER ū#ĮˆnŖ¾“œdYj¤Žkˆ¬±i 5ŻĖmWŒūæ˜Ogs‚D¼Q+>ä'®䱎)ŗM€J UwĪiqct°axŗ}Ļõ‡īóūįrČ®<½Æ §ÕźŒLFXP…­¾;-Ч~ ve„²¢ā?-NN»J&Ļęę‡õzœ¤…µ%{p­64ό̬[kÆw,LF¢”Ėõx¾s×mžŅ„¹™ØRˆNē„š1'&ĶL¬…BĄ±CÓņB2Ŗ5IŠ}'5£b* ®?W ŃYhKr“^ń{€ū!Ös!–Ä.ēŗ±å76õzėF÷qM{pCR«ī,ŦwõzšÕ†“ ³vIR4é“ Æ}At (‚±øēØīĆļģŃ1-q”4›·Ē-Ø3ލ#ĮUĀ7F¾(ئęĢŽ_UDk©WD| gö˜&)jƒˆ÷@Ö øDĘ-ńwm å-Ę+Uó°øUŒI«ä°½ Zćķ$b'‰®3T+ā©Ä±ŁŌ.ķ–ńŠ©Ķ)÷2k¦hž•žPś±æąT„ā”ĘĆĘņ¼#ī„›ų6‚%üŖŒM¶&!#ßćŗ C'IˆŃÆĀCH$ŃėĀY“õ€™ŠZĘ'Xa‚‘rUvW”’y4Ģęė„Œ4ąjމŗa K%]ßXĀ‹©Qć¤ÄĢ˜iéƒ>ƒj ÜāīBBƬ‰±RĘ=偎nXU«FBOņeē„Õ¤k³Ņ:ˆž›-“ÄH|ąjó° Ó7Łd$åõtĢ…¼•$ 7“‡-'sUŽwEč<Ŗ4ųĢUy:SÕXŅāńV3ģ@€EfV@„•³¶ęHŠ…éU‘HjpB2q ńś žĒ,Y-Ķkź­-°»ĖmN„Ó–;µ­Ö•øn­ƒ ŽŁē8—e C‹Ń[aŚOĪSŻOŸ?“B(ęS«%ĀNŌģ5"5ÓĻŁKœQŌ;©š'$/C§Ō©l)Č<HHbœĘ'żŚ\ iä¬f8ØåVHą•QmS;_ÕÕ7®¾肱,~ßXE6Į‡®c P;˜¶:’Äń…Ū¦Fœg.›Šķ‚Œ„j¾ō ¦­» ©mtO¹¼Īé"ÅŸē‰š3É4õ ‹ņJjµ¬9œ¢ d~‘t.Łt9E։Ǹ©īĪæ®ŗ'ŚQ®I IķvNʶ\>tŖŹ–—ńr:ǜrŻqŻŠ7Ł#ŌüPžVˆ&šCT8äĖØKŅQø`s3=RP~ćשYt w·Ō9ܧ^“)bäbpåŲ4uĘÕi> ©¤O$Ś]Š'ĮG³«“öAĮ7¤ŃżĀ;é-©B-™Č”&_2ŪōÄī”ß0訾ÖöEĮń|ĘÉ#ÉCš‘r¼ĮN/2d±mŽ×ø‡ĢÜ$’ķöų³Õk]X­ćH“žŒØNdj÷¤ŅPćztģ G»ļ­4f#’…!ŹG,—݇bmh^ ĪI°Åd€G30K“÷‹ ŠcĘĘhęć_ *õ€ĢE$ēĒ„=£”¼ķ*‰LĮĘ:-Ģź‹oņījž³•øaµhĮŻq`öƒn7n³ūqŖhN…8"!¤°L…ŲŹKw«¼“īöTóÕQģ¶8CdF „)HiĒ\+ŖcĀŅ[`! yĆUČzóÅÓ$üŻņ5[Y4 [®‰Ś*Y³{ŽĒ#åWÆŲ›?FŗĖ=ū?.åņŌ;Ķ*‹NՒ°F# }-ÖXGłÄHź›žŃW~Ōō)ˆāE@Ķ„ź K&Į~÷ŃZVłTʕѩņĆJve'3J·‡ŗšd-ć-ń¹»gĒ$ń„–š‰±”ķV”÷F^yŻ`°†VH§ć;R¤`-—!©ZŅ÷’|īižÉ&ŠMŒÉ÷īĆ(āmT…ēŒĶ²£ŸżD¹ć!1'[°õ~ęøņh\ćæDj6Lō½o ė¼00Öä ī§nxŚzŗxēŁu½į=½xŠōz˜WÅĒ9XąŲŌŽžĄĶć·‘ĢæČ˹O&ś6čēžMęžFFŗ¼Xz»ls³ö0Dŗęž¶§SĪÜŚĖ©ŃĘōź2£»”O‡Ćźó†hA¤°•']ʈZZPxØ=›Zš“š6ī«¼ź„ź]ĘόméØĶĢ“Ÿ›ėéhZZpŌVŅ&7є[¾x$ŅxTŠt¬gŸ„£äĢøØŚ;ZzĖ-ņņŲ¤LmL8Sš”FķĢ–q¤f4,6±»6¶°6RćXš#x8™ØB#Ó¢Ī=ŹäjĪ‚U‹“n›WŪ•)Ē}uļćh ¹Ē**-±d2 ƒé$·a1Ę,ÜŅŪG]ĒįßyäŠg¶˜Ėń%ųę© n…`ƒ±čō|[ł—OzL]œHćx|Źa½kffJq½kdv÷f‰}!=YŖčHš¶šŲŽÅbN\ŚÜ%Hžµõ•‘™=T3óį0…V÷†¦š˜Ŗ“Zå°įt|Öŗč:}L޹kfÖĪ”™ TŽj¹ėDfŗ}ś1ƒTŒ OŖĢm1ué;MBKäšdē•»łŗ¹\īE\Å¢™=Z×#{‹UKśw«Ž#®Ąüs“·ūö—}ج Ł *Ų(PŪÅ|$p.ń݇“§ᦲ`Łi¢Ł‰8#ŲšP]zn­…G‡OYóĢ:+ X·Ī›WjҲÆŪ”Ī™÷œĢp89s‚¹ J«ĪA””‰Kt©ió'›Ü<«­«­«ŲæÜb„ÖĪ‚j­cœ b¤Ģ*³„£üś=@€€žƒłĻÓ ČÄ(ĢĀ`HØ$Ź,¬ĘĪD¤"*.? ŃL’˜~õσ“± ‰īŻ©&ߊ)™6.üĻĪĮŚß€J.|õ]Įó:ÖÆŖīĄeŲOõŅĄsż‡tæ€č^Ś^šnK†ĻŚĻŚ—ĖXJ÷Հ£]ó?]³7“= »ėž}ꛄā;žéŽĻś'ėʏ£ó¾„ā› ‡’@W’C¾{'¾˜ų‡’/IļŠĄ³÷Śē§œ®—‚_k.«"¼•½66}/rĪÖn"čųجoin’Āf[DŸv“*®{ފ­“ÕR­²|¬1y|?”Xøk© šl"čč(žō:ŒöxrŃɬ­ļ4#0:½¦Ć-m \ŁĘMnG·]M<§u‘ŽźŌžå@ķ’l9Ą*RoŸóØø2Su}‘§l:~岑åÆÄØZĢw„ŗ&’_×Nߚē{żŠųq§Ž‰~ą4Ģäaī—f,rŻ«)UGß ä¼ė%[Ń7@ņEżgh®0•ūŽß|¤ļņ®žśĶ‘µ€°!&»1S€.ћ9–b—»„ßĢ»ŌF%qÖ­ō³†PŽ¦ŻBæDēW…YĢ\ĆN=É*ĢÆśŻ0Åu‹hžG1ÉuR$!TEōČŚ˜ą·TC|‰Z›“pĢFuŅĮŲ4ÓŲ4‰T;ȱŚĆæšī$߀jŖ6Źy½Õią„±ŽÜ_˜O·iöc¢Ų8‰‘żŅ“§žJĦņĄ‚½(°³i„ƒßH’’š#Ŗ6‹Ä„³T¹ĪIhģ~Ÿ§Z~ƒ»Óxü¾Öģ\Y·Łž”Č ń$mģ”‡Č\öN†ż]”Ʀ0{ŽŅ:±g+]ży÷VēŹæHBT…xa1üžŠXüŗ½Ć’-vC·Ūߔ ß tå³Ć ŖŚ‘易€7Lž’YŅ^Ƙjzoµ±ƒ½5?ļ‚Fʕ¾%Ń÷TATČ ńn”w›å0ŽtB0‚µk>‘O†ķ¦IҰEŠ8˜æH5 ńEv&{EŁ% K{'ź¤SķZĀSE«lŁ/G}*āŁš·|c2·™æ8·Éż«(?qƒµõˆÕ·G&jO£[Č!ĖoļĒĮ%m.س7+©Y$²†QƒĆo³ļ*¾[ߤ^&†FP–·’®ōÄ/5Y.›śÅt”B\̆L"±ųåŖĖyu”Šlµ¶‚<(ą5ęG‹8ž1ąSk+[ifīΉ”ĆįĒU­vŸŹ©s–`Ģćʶ38&wŠ„1U¶.1ö|1*2īõ†aė6%6ѤDvgü»d¤uō¶ķīĀ;ƒšŅźT±|T‹™*ȃ>0@| ®\ÅóģȽFÄ[Ó×9|]Fæ*TūUõÅi%ž]’JzŪÜE‹ ^‚Iu*N$”Ńā“üu[ĒćR[ž†Gém!Ē:f&6Lƈõš%x4óæā0„Y”żĘęņņ³Mqž÷Ķ‘›|å_Å﯌ųOq”|ąĀM¬Ā”®"oÕlČ£×-ŗźl q–L›żõź›Ń……ƒĄ½+tŗ»é Œ¬ą³į»²E„ŻcĮ RUē*šÓ¬…Ėaž°”“ē<*žŻ³yO°PÕ¼xƅ ?#Š4Ģ”}Sįx mõ¤8.å ƒš”,0%7i—ŪŒ<‹«€) ļ²=œÜ5箄C)?T1¹ ¤Op…G•{N—9ĢE%:qӓ'ķōg )#AĪ Īģ©CóšĢV©y<ĢdéAxė%é1Õ @s¶«„ÓE˜ĖLī¼öĄwŖ§ Bf§žņ!æį‚Æ ^°G1³aw+±*øį©•Ēm:Óć“,Ōež €ŅIœ ŪtŽ“KW\ŸøŽė*NŲ'D3ꓹ•W$å0<źåzĶDtĒŚägö‹zņ5+DfėV‹ŪZĻOĀłYŚŽą„Eß=CčN8‘ż+S4łģ,>†ŖmŚŠŪUhµ«ŅY¼f½Ųń] ūQĻĘŤTõ€M)wŠ©a¬zxQč¬Säz…åēR’Ā»Gžuh”gŚą°‹Ł«½hDˆ@¢¦ń(v™fĖb‘oĪÉ-H““'¬¦B2˜q||nĘFĻ֝"­ĘAżor}ÄaLāČ BՊ±ŃƒŽ=’®łł‘«ßuöĄHe½«ĒXå!²›˜ĄŲ’Źųy =!åĄSµ]F’÷`?SV+ŗ`tž„8Ük¼’BGƉ,Ńň¶²Ä/…C³/« “Cćõ+M3qäš]"”}„3€„łīą.Ä̾3q]¢E„E»päÜZyŻ‹Zt:Ɣ%†ńćĘėä,l\×\ŒīgT,Y°š²äEĒRĻEŁeŠčf?…žZ“£õ¼Ķ|~K£/Ł’,T"E“\!l4-»Ō(5‰ķ\ˆ?PśŌ=TīĻØł9…5Ž„ēwŸ7nŠžĒkŠĘīŠż%jæ³¹ŒøŻĖi8€|ФæDRˆiw=ų&ņh““¬œīQĖŪ=Ūņ7u”·6pó¶Ę„=”ÜW°eB":²‰£X£Våtxl*-Ę\˜'ÅÜę|c‘SĪFH WĮŸĻ¼8Ö#µ³ņ†ŠēŸN7 Fķ i±4š °S£“WmĪ"P^võ Óz‡:jšČxäĒĄī1å9ļŃ­›{æž^ęŃfĄ \ojHLĀEŃ',O—]Q9åeoc—„ÕeYD1„ŖGx ZWš‡¼#ó§xģ’Wƒ7hcżµ€gŚ"Z—Ą«śS\Y/)6¶ögģ Cxv õ®Ųٰߩµ@V²¹½ ¬r[±/U 2žD!Ż:[”U‹C9rēž¬ćš;…Ōrźé`®£ozyœĮ džĘ“ŌßśÜe[«©I§*āgķÄŗBņ…ŽE^D‰ŹõœČ¤µŅĄĻP}čąÆ`pM‡3ug)v—6sʉI,¼ÕeŪüĮÜ{¶Å,±ņ›8(ė•hm—™HĻ¢ŽŲq\.‰"Ö9ßĢ—æpc½ļrėĘ–ā­¼SW–»”ÉĻ"§&č…#ÄM<oZČ÷PÄöQõ Ųćš­Ž›½“€äMÉÓæ|]"•Ó=& jÕ:mRŒ#>¬QGgGē-³zIń¼āØ2Ķˉ·Ą©Ä²÷E#o ^&öüY^\ <3}K3hŲĮ¦s¼\Ķ?“E@žš’¦"Ø}ā”amJø…¾2*)mѓšU,‡˜’¹ģŚÉˆźŌ‡ŲD —óU„`—8K£|Yvz)Ģ¢čå°0óč·c+š¶ĻoÅnƒōgrGŅzƒĄ44c(ē ;*2³£!H„—÷CŽ CGčĘkJwāj³/“WQń>Ҙ÷\µ,aAŖ©]Č  —*øŽ’#Ēģ+ Üų6~}Ō;ņ ^uRÅżĻķ–©ä†;vŒE9ŽŖ–„ •Õ8z²ZV"ÓQ+Ec¬Ų°˜Œó—€ęÖČ_+å\~ī#YIŚ=‹ÆĆ¦›½Łņ×M,_īåGd‰f§”Hč[S’Ej禌¾Ż,†›śÓÅ ę&žÖ#;Ņ-KźųœYłä”=ńÖcģ°Ō|tE÷µž"Q=žÓĒĮlÄt9\} UØYóņ2 Ń “ŖÄ²Årī ĆS£”‘åhǽ˜¼ŠŸUŃš\łßéył1{õöz’ūR—*„mrĄ‡… ¶½č:C@ōįQlŃØPĪĆ7 4Ā,—€QK’Ü.š0CŽ5 £läÕ q"—NĶćW“ž wĆ½Ó?ēpü gj?Ŗ>X*ō¬Ē¢G$˜!ĶČÖ×zę]A{āžjķņ¬ų(eu÷ėZĮŖø E‰7ž-°ĮńÆl-#ņŠ7ą,V9Ėj{Żź`E±8šØĀōljSM_ÖČĆ·c ĒŲ(ZQˆómV$xŌ³I/’{šD³×`²SŻÉ<ī|˜ Ė{zŁīķ˜-zL ŻyęÕCóé‡G[.Cm;†Ł$.YA\—±¶=ŃÉƆ“oŲ%9e)Ēé_=Śõ(ŁĪ¾š8jĢ—qøx©&ZõąĆ3gšJ–Žˆ!\VQgĮ‹6A6ČU(>Ÿō$Ih  öF„’¾?ÆĢĀ`uŁ7l}˜?**o³§Hm›*ÉÖ¼{ŗČ!fˆ¢N³”WŠ4$KDHs²Nć@DaŽ|2āØC t½čY–ŹųŅ/kż Ī:;֙ś•ā>ŽŪ óg®šą&©ŒŽņAōčÓ§§æxK—¹Ųį’Ŗé“ƒ’ū}\q3‚Ņ—]­ā–śf)·?9ē±T9߬€h ü•¾,~€f ŗ!v«WFĀwŠõĪV†ŹOžŸ õeūÅŠ0ģė ¬õ+ NķDßńշō$ō!]kS7žMtK„^IJSĻ&n-š5v¦ńƒ/–x‘’Å Ģō­».Վ’„ÄdĢY_|ź¹’rŃ#•®“æšÕį)dń¤§(ņ-¼{ZƒhT½{ž•ŸžĶ_f²­ öĢőGĆRż2|J)Æ×†—ąŚcūø‰óš@?²]ęN__jzŹ3veåžUGüåÓ?…»Ü” ¾rŽ4’€ryåCW¼­Į_®žåk4¹<å "«9QµÜ&8?ŻަebÅF ²ĄøfŠ}ąQMįLņ„ŁTcČŠī™„9ƒÕć?E„įäŸEž\>š†ØĒIČ(=ՕGŻD£īø ĄöĖź¹ ­ pėj£zøĢzŹ#XwÅ~¶©pēģb-üŁ;y |é^’‰ƒøRM˜™ŽŃšzÖŻ—Ŗ‡C•œZ "LÅ,’SĖ9Ķ£8TYrŁf÷īs^ęóŅ.cg;£gżh¤n”Ó£ CEų<HuɊ—ōžMŠUĻ*ÓpŠo€Ģ ¾&Šd+×CMų^™›G_„63BćŃI²ųŠfŽŠG:$š)‰½×ܳįÆfÆą‘Zi·rŪ8žI,dóĮ¼Čė5ģåÕ5’ŖXwēÓ¼•¬f˜B†Uˆ¼I x“4ćĢ0į«n÷¶JdzŽz„)cSŽ~}«œæ¾,ŃėÜa„¼+£s’9›„»¦ÜZ‹å\7LLö\ϧõ÷k^ˆSš°ČśB矫¶1do”ģ Åėd7õcšhįŌŹw°čł7ŗXkį–·cVłæ£KėD\6¹ }~&Dōį!LNś‚„Ÿ"9L9wl<źŁ×gP²ōĆ?ųŌĄv3Tx˜¦Ū¶[ĪDcqķssŃHŠžE-Š\ ¾²WõšīØqĒ5OĘC8;Žž%e5gŻš·} –ˆ”­\[\SAļ¼Ųž,9ž č©ķs‘Ö "Sģ·$ŖBV—y×¼hÕ>_Ī‹ø…;ņdjĒ•šjC(bń*%?Ź=“ż[˜§Kü¹wĪŁQ@¼—R/(@'N»,3aŹymÖo°īY hƒČķ‡Ż%įŗwˆY°GP-m8%) ęķłHÅ ³ōƉaéęC›xæq€tėž‡\³”™Ć>A^>źöäw­ŠĆüåL}°“ żTŠė…ä˳Ą¤čĮü¼“wXŲå,ŹXńžfŽ–q£*ķ7ž™8Dóbu®—Ć-Q2g³ż<ær`”‰ļÄ:#ĀfĻŚĪ‡¦;7F·z9»ž"hŃļ72ÄSL ·ÓZċšUƒżyšßꓐøüĪxĮ“·ŹU§?ż(%Iwś«ĪÖcĄØ8Ü9§ec ¹Bgń6PvVŅŲ×lu‚ǟéź^ō⃹Æz‹Ł-ų™;9%Ń=%ĪI¹jōø…ų0ūõ.xge×`ģ'W]u抏-H=qŹn»ŚœOŪ»ą–ŅŚåöģG™‰}¶V“NMZŸK³^”ųpŽŲ#Æy²>Ō#iįQēPĘQ\QDŪ©)FÄyŌ “Ūb6ŠŻ>ą®Y_WėĄŲV¦£óńX§ķ ‡Ź+§ķņĮ"ŗg³qŽ)ŖķұųƒŸŌź?“ßz¾ˆT;Š“Ŗ{Ś·zœIźVž’`Āx Ā{Ų`Ƥ™’%Ų!į­Æ23ɓšč6[£Š}b°Š”)IUõw?o… réAn½oČÄÕ陀ULŗ…Gųrc­a±›—«o^įęX]pļĮŪD?ŪāĻ0š“?ŗ±ŃN«žØĻ&ŌŪSsĒfo¾Īz~ƒA 4Ģ^ÓTq•óÕŖ\©Š`hī=“Ż”z–>®ü5·mł÷æĖ>KCÄĢŖį˜:“°kqh‘ėhø©ø7Ś*(QįhÄ3ä{…nņzļ'¶ÄQMń–Žh ŠJuJĶéÄm; Įķ:«(gļ ā0›¹¼ Œ×ÖÉÜęŪ ØUVĪĒžĢļ+#ć9~PŚw革SĢAVŁ:w\[[±='‡µ·±t6FXC¦£ÄƳ‘6J^Ö80¤n«"½iEQÜ®Šéėõ­~«ž˜=¦ā²c#6Ś€äŌ8/æŒßĖz+ń+¦X²Ž¦P%[Ū¼GuX…ŒYŗ2SĖ'ū·ÜŚuYœ¶¬:ÄĆ÷O/”…*wj½“†³å7’–8ՓåˆTł]£ęʃF‚Kjåå"7U)œaŽYń„˜­?{·†ón:ˆ±š ¾čé·zŁDģŌØ{TąbŪu8•¢B5^{ŠUō" kńh£q„÷¶ņ"Ó4‘¦,ģ±M_`žp^Ńtńųz•⛲æ}k/f:?Š—Jäū "ö¦ž#µŚÉå3ū¦ƚl®7YŹ7˜įH¾,™!&ģć2ჽ6¾G( Z^z'\tŗJō–ņ2E{ Ó$·ņń·Ć3ĖĒÆó#¦;ņNĻņŖf½±P_p*LźS^[ćB—#«;ī-ŖĮ‰„•ęAĀ]¹±žĀõbSųŅćÓX¾ĶG•jv~TĀõ?Ś(–õ°beŹ:-÷ks¾šÜ‘c1ŠŁyMĻ ØŸÕme±‹•½HaŃŖŅišļ?ͱ ŖĻŁŌŲ5ZՌ÷„ē(MŻ(ÅĆøŚG5«‘ćpć›d|Pö&Z$~°¶ŒŽłŌŠ®:ĝ—Õ)ŸBBWbv‰Ļzž.yDn‡•'ö­kY•¤nh90ŁBź©ę“ĶųåņPÖCØń„$üL½vķVvT6 öÆQėū¦-φˆMlńt—Ą`Mœč%ōKדvĶķqU³ ¤z:ōg4ßŅĀĒ)Ū@ …2):šÆ'~k³_±~bŲĶeįÄøl¬¦T—wĶ{ŧŃķż µ°o†:†D ņL³©…ī“1¾Lš×@„Č…š€ŹŗkīŗūĢU59gÆŠ”M ×-Ÿóā4į_« VŻ0vM1®¼Ū?\«<-ēµ—O‹sžs²,5šü8/S1ęśĆ׿Ż^ó7mmv‘Õ±ž$^Vwø©}öwĆ$ĀŃʞ=bD›<1ŅS¹¶Ö7Ģ~é’ . /»¤(„ö"ĶÜäQÖŖŃńpŠ7DGž’¦Éd’*všSן?(˜9c“¹VGļXž,l®W­Br•žtĶ^"E.EPG7hUšG¢õ[!UŠ=īŃ¢?-įvŗņ‡F E%b^DĘŻĀqŹŅŖ”X8ļØ-Ó­›ŪŪo°{ąatx$|ŲWžę‘t>jį“žžčQeŚŽ]öōāI×fµ0ż$ø.U"9£ņį¬Tt[  F üQ?¬ĀŸU`Uß¹­«Ģ…Iaško݁‚0OŚę„ebTWv^FUŻØńK¶Ķ…šõŪEI½D?) XŒĪ&Q=^?bh#YõehżDį(äį4sį÷4‚Ɓ°ÉØļRżS/ĪÉ«N™įs³ļE²`ēFŲO! 2Ļ£-y¤|,=ń ˜‡ęųV{ž3ć“æ|-v_æĶś[X6Ņ|«§•±qł«oZnL»DNkC»‰iłę<$”õŠ%œĮ{QMĒgöĮ¢ĮJ«ģē:rĢÄ{ØmLjo`¦zŸŲi¶øBå#1²ĢźóæéYÕ“Š4 Ć8HZVkDL±r U°rj\gW-ĻYGÆĮh­y,^ŪaƼŹ>Ūālž“ķ؟“{įŠÖĘØ5hļ=W†z«&syT°ĄiŲĄG¶{Eīi›e-K߆ī–c¶»š` žlāņĻDD”śĶbV AĻXYļ€ūN"„EŻgńóqÓ䠦枂ö f¤G:”‚œ+DÆ›Ž€<۪ކŸŽŁr‡žˆZĻmSµĻ}ä‘÷¼ģóxLł|žbÕb$ž¼Ø\Įµ•3{¬ė”†ā9<*ŻO§ŃƒN;łæ] ¬Ŗŗ<ęn¼ÖˆI‹ā8²ȃč-tBŗ‘DĮĮ \W`€G®fLŪĘÉŹ’0@ĀC/y»X»\[³@ųFcvł4LīåoĄ‘ŗ­?-°®ÕÖžžÓŖ—wjŃc•©]…„Ē}2ĖG٧b놗”Š ¶¶ģQÕ¹±¹T“…sĻ_9`øŁ™/Q-µvøĘU!õÅ.°Ó6ԈS%Ov9OõŅŖĀ›p®\äįē Nõ*kŠ[­uę“aĚžyžwʞbž-Ć4CÄz«Č RŪ^9¦LĘ"Rēš0žHĻĄ¶z哂‘½0՗Nō˜§NK‹’ø½ų\/Š<Ü":d§*ŁŹT±i°Leš+µÉi"ūøę-}ßĆŃl.ØośrėėAŁĻ9‰ŻõŠÅ¾(SßiĖęÜUU|rφĄ6ˆęØP>ćK‡‚gkŗ]žü"µYeu^MŠ6żė<³ģųĀb•ųšÕņäźŌs~(hߗm5.CĀ™ ׫ó…ų„홆ųPi¼x˜6.ńVaµ}7޾«ą:Ÿ’  ļ× Ü“’±=Ó±:Ÿŗ€H'M¢¹±PƒŻ£] ŽŌW” ļi hēzeóĻß*Oēķ^3ĶFć&ļ”ź&ĪĻóo’IY§J3vFīųt³ŅØXĢb–šXT$äsŽČōaŠI1ĝ…ćÉĘüÓĢNr²=Jö•Gģ#ęR˜T„*3h‡ Éøī`Īy(†‰M{–„Mū)[D6āQ*^·÷‘ģäbóÉ1[98Ü”æ°øēš•’.›zńvģ³Ļ7¢Ą§:.«Z°lM»Œ¬Ģ¹+Ņ“4ꛑ"Œ«LķQӒ©a҆ńJīyž× ‚Ą§Eøi“å““GN×L9£“„Ļ\6 mńž„+ɟ4氏ƒč³āYhÅ>.·hQūŃļŖ“é>©M½*®96ņ¦ÆĮŁņ…V“×¾Ä6×0‰+`Z~ė<jöžŪWŁĮb‹¦S4d£h U39CLøaƃ“eŠ“,8s2’°öĪ…b/łRŻ`gŚmŁ2÷2öjŁąÆr į‰Ō=»Ę;MÖgugZxÓÜM²ĢÅ~¼ ²¦•°ĶŗřiĻ—°ģ1'ó~iŹOHīķ¬%Æj÷•æ?*ŗf[: Ś".»UóŽ“\µƒÕÖ6hŲļE°t˜Ow¢{¹„zŒ‡™Š“G—«²×¹ōH e£&x¢W| qŁå §ŚbW߬ńƒwаD'ż°:JcOć"‹”ĮWŁ·©–x–‹"sbmaš@1ŅV‡£šĀ߀¦XÄ_|+óÖ'ŅõZ ūŽeŖÄó*mBéJ×YųŸŪéŹöšFŸчlŠÅ–ńa„BģŠ@żi×ZP³6Ö¹K@KUŪŁŖzŠ‹ü!zÜÅŗĢ]#Ē“öę ēǤAŽø O³›÷°>凳ķĻ” MĀū.«Gņ³ü­ķ’K]…{p»V˜4k+ē¹4į—Ļ9É9Ć*&!,Jˆą$¦ęÅé­šm;WÉ“†ĀµRiÕ@yhL@vØ ڦ‘ĖšåN.ģÆęØåB’ĶĪš“•łi%^©K¦¹Ī4āß«“ub.:å9ŗWI„€ų³Ł8‡÷€–¢f?%r) pC]6‡R-ōf#-Ź%gĆJy·Čtō°‹÷^“Żig»ā‹üó×ęšxM„Ž;āÖ*äXŗd~rļüXßąĪQ­‡Hͤˆč¤€lÖ& ĻYLE®M×똳ŠĘwØ,J9^9É y+Ėķ•V–æ£ŖÜ>t(KŽšbӕó7ŗ²Ū¶Dw;n‘ĄźķžØŖ„Ą”wUĻŲ.ŸJ†&ą® +…ķR[–ZŸä-ßi›sƒ‘ÄŁŽÉ>B1®”6ļ¶(±ī‚ęšļA ÌÖxŌR䭵ʸ°‡IüĀP‹ĮS‡Ņvłm ¼źz®+!@L!ųn•GH›™łJ²QyćYIŖƒęęį0iØĶ«“ؑ² ęŗY-iśõį$,­“m{V‰¶µM8›2ī ĘŁ,™ehī²ųšĶ$&ęĪę šģLļæėH߀;8EZ˜źÜŚ33㔺O¶±jć%ŗņ+ŠvSŒŠé :Ē‚(KJ¾sĶ*øsļZ%NVwjaœ|Ń­FŚĘ#-OYаĄ”ĘY½||½ÉxŖžń¶Ņß ¢^‹žł‚īņÕNęxĖČÆ6`€N›ĖcŅ\)ķhĖüy·E¾xV{6“°- Q;“Q+½4åŒl'’Ö©ūMµo@äæčõP¼ļ lœ…łöØE<žP64ĮS|Z”;’=¬\Āś›Ķ^™EĀ«õtü ŸƒpĢaé5ĖWVŅטTLVź-ęW½‘ŽŁq.ń7€t™}©ÉĮ‡”"īEAÜåÆĒŒōP½Čē(h’A»%öøVJ©žĖ`›FdhmK‡E- bl7äGƒ˜sĆß¼B£|E±†żź©:cća‚ŁFå8ŒŃƒ\5㢜¶GbÆg÷Óś‹\ btŻ…MXŗQ±m;ĻŽ^čå—6•’ÜSP@½§ž»œZyĪŗ5äyāåž(c09ļ8aćęJŹV¼®õæATį@j÷ ³é’qG5ūQ$±_T·r±įåøĪ>CžŲFSĶÜ Ņ™ÄčG>­™ń“­–t\3\ØÕ’]>K⸌34酮 «<Śtō–NGO` ķŖƒŸaā‘VŠ~™õŠ„ƒÆ¾8ī2 ([ūĒo Hjä˜Õ śÄ`„«Čn…ūąƒdų@ūŸ-†g߀þŬ·"1śņ¬ėƒżEźeĢœܐ „ ¤Étbõ —q–ę‹^õ”˜f˜…S_źć:R¤§Ų;˜YcĶTą"GžLޱbØŅ¬ch`EĒl:ūn|ŃĶģ™H²æN‡eéÕD׎»ŗ ²cØgu¼ujĀOĻĮG`ęē›Ņ0ķ4_ŗ×7 ±9¶W°ŌEFĄ$:÷ŅźV Õ2W§rÄźŽ¦ūä± é<\”µ7:O3/‹džšŹ żU£·H˜ †*UĒż—6Ķ1é(’‹ę!”ŽtÕAˆžzŽ~ų^§N혔ug‚Ž!Ż2«Xö–ČÆ’ É$ŖĒŃ”–IJ‹®ģ¤ĒŽÆ®k}Ü~’XĢS„ 5€ŠQ0śc”°Č÷ŠƼ/†˜„Ü‘”ē¢#ŖGÉ¢Žjė7÷pļō€ŅuDßfēæqĄ£ˆøŻ«8—yŗ ¬˜Wgk)HĒ׬1Z‰āĘŚ2‘KՆ‚•VK#,E~ĄGŠŒAh‘×d#Ƀ™C\ź($T[8Օ}’Ģi¬ąætßŠ‚Z#’,ҦCĖųœę7ĖŠŒč­Ūč|āĮ¶“-›åźĻ޳aCe›Ų€ĖMŖš®ŽźśRÅÉŚ¤¢”N@6„;\:9H&žjµ“õmö8®ž+Ķ"7g»łW—bčšŌm\±ēlīĆ9ļņ+Ō6ōŪ L>’ą ė"+ž2—TĀP™uÄF™u‰ @ń¦į&äiĀé\[3ŠzńŌ¦ŸŠ%»8!cė ų6čś •1ŃęČ,óģĮQ>ޤ2”\ZLž3/»EN§70r¢<fÄÜa“p·ĒW‹ŠšŹT§åįџʯJbÜÅ[D\ą’¦Äœ9ž5<ÆJ“ ;ł¤Q„ ņ{a4’Uj÷É”ńėx3÷ŌĄ„)öóp2a…KˆJNė{*¬nq_Ń/©8llsŅą©.‘ŲXZ§6ĪæKŖæ§Ģ;B­ĄÜoĀ,Mąg_Q ęm‚ ńÆĖ…J^ū‚ńöäQį$H…żQ‰,Ķ„ˆĒ GY,2”mél¦Ÿc,’6ī„RįŖ¼ŅŽĖ R„»ÓņöS¾Ä˜¢“‚»¦_śÄ>Ü”›„Åć‡åuGćĶV3Ä®Ō$_”‘«śŠ~67ž{zønęķ÷óßJ½'~n@Ąƒ·Hš®dŲ8Ē€ĪĢ’2-§ī뇓?yüyh³~¢»§fĄvRv¤ cīīu¬*("\#łd³¾Ž‘bŌSRŒH‚x<ŗõ‘č_MŃ,[Üdq š½@5żhܙ® vł3łū·ņHCŃHĻ+ż[żu®iż"æ_W‰÷’+ÓX­²øjŽ53æ,–=«’ŹöZ.{Nėßjdę««² Tż§:õtĪź:Že*²ļ²ž×± s,jßŖza{a[¢’ūŪżĮšpłŸ]łæž³/¶9 *GĘ/µĢ¦„WŲ7P\‰ @źOČf„¼#ĒY®øēŲ%Å5-i—ś:M;¾"yR?\ŖSB£r~ŃuN€”ęWŠæģ7@¦™% u«ļ±vļ īEų®LĮ¹ŗ§öūü†ƒÓÓå°P±fųØ?łŻī9ÆIs+s­×Õ×yżuŃU—Øæŗmü}«ö<Ÿ=<¤+łIćēDę_L:†·8C÷iŠ^™Ģ€Š@"|ĻĆFż„FXśup'L3ō ØnŽÕqķB³FĀ/śļ!-ąĒŠ’<īņß/z 3 +;#żL,lø%źŸß»cś^ł(Hü+m’ƃjå7`ŗŸæxu’TīGä0ĄŁ¶¹ē$³kf’„·Ē–Zކ•Z Yń€ņÕņ‡[2ņĖśSńAqßY×§.čÄO”‚³Čzrmjjš@;-ō SsS9%×a}ÓĻ\«–×hĶ× {(¶‘–ŅńŪY$ČŁæé«“ß?iķŸ“P>ł'™…Īk„|ōšÜž%¶”Ž@yj}ZFśeP·ŖB ?€RqŽ .s ې5;Ęi®”K‹yŸŖqŖ¢ŽU-eöTXóVdė…„7:‚™õ•_ū§ō¼Ks ה¢Š2ͱq¹NE)©ܙUJ­ 6v5”émŲP7·J„e•÷ Æ‹wŌƐ)‡FU?ō{‰\&“‡+ļpAU ś(BqØāhs³·ŗjasÆßm«@hčB޼HØ'Źä‹ õ2A?iæ@¹’ƒ *aCČ2# 6±ÖC ƒö¢õ%ä~KČæČ?1;`>ųRÖźžž$_Œ5Œē*}s^“›9ŽåؙxtDGĆ’Ų.'“®R¹©™†ŚŽ÷ńC’æy/}ęĖ“ī”XŖÄŗcŸ…ŒēG‰ ģ-¾ŠļŅšSŃ™łé{¤µIč†;T5ķ1bźö"bŅUM²‹Ÿłé(Ćzņ–?gtį£xēĻqģ~źA†Yf׀čhīV”}LŠ,Wy~)r5Ģ/²2•1]ė‘TKHk•“FW3čP°õBv3ŹÓšŽNY<`@¹­^Baö‚d¬ue%ß|dĘżÄØdg€,0Ÿ~gģYéžXcęY©²/p?# ģż•^"Č ~@Š{iśū®&“žļ?ĮœĖéPČ“¶`µOdó8¹Hu2ā‡4x*ę:ŠhŒÓ{r^\ČėiF=+œHu«S'Z«ōēĪiFōģœJ6ĘMcyŁe/øö‚ĮĮZLhxgwˆ±˜Ą™X®)ūw˜ž,‹?ó7ėļĮ/Į-ū©~Qļ!b9Mjjó(æĪEÄxN¼ƒXOOé!\®+œ³Ļ(?žh¹=Čńmu UzA*Ŗ“B®©“Ķ§ŅŠe,€ œ±—Qå.R¾(„ŒE&ĪČéšŪ•w'Ćįż H+¦ßžŽÕśR4 į&Ö¬†£—%K:{€­*oOĪ~7"µkbQ³Ōvä1ĢšEńź[BfhšŃöˆ\S#ÕW÷Mõm›—GŠša~B!'J ®q bkž\'Ŗƒ!ųņ£”!84Xó‡¢Ā!łé¼`Ō'JwÕŃ2ŠG‰Šš\~Ÿ&TŌ(ƒčmźfÄ{²Ōź|°ö^o¬Ģ? ņ‹ALķ>H)>ž ®ž­ió‹ńÖĶ|ꊠā7­bw#NšŽ;®¦+.„+<ĻGÕg(¦¦ˆšl4d’rōfåIs-Bfa—Ŗ†„VnŠ—|ū²'†{Šŗžś~ė;€y/ŅŲjw5ĀŅ‚Ėnķļ ŚęuG0™G‡õ×ó¬%^Įż”hs­"“sf§šr‚²ˆŅ"n9ęr„öŚuŽņXI+µw,Ü-ākw!„ś†ZP÷_šüį”ɲ'Č}LŌÄõ”/q9£ÖG-›:~®čk Țųó ä‚"Æ*Äī%#ųčrn„V4.YYśą:/£æ¶ ²ž‰Ń|Ē~ĶČÓ/‰0õ"‘¾’Š@¬Ņ6ķÓĆŌŚ 0IW Kõ1 ©UŸfµWHįéė¢PŖ ¶¦’ÉļdäŒā«÷©Š'lüÄŚĆMGWš K`ŽČńļ.*RMCKi„˜e?‡h„p½Ÿs×üäé^†§ ©z°Ķē“ŅR©Ą+!_ø¹ u‹y‘ģu*² ˆåšŸ™zƒĮ«#W ˜žĘō_‹Õ…éa-*x׫ܵæÓ»ž’-G©XŪוŹ=j«X!ģ”6ūŲĶG~ ć’CɤŽ22Æ|ĻE™éŠėØłK¼įm‡u©“vĪł>vȆ³K? oĢĶĀzz=±*ĀāJĻDĒĶPźĄY”X=Ņ6ĒÉtO®‰xĄ®˜¤^8ŗŽ\_Wb÷”ēÖāeEŌ<é«Ķ—®céę-”üł1P;æØä%b˜g:‡‰NcI;ž‚ z5Y÷óļI¢UŚ”ķ:»r9ƹŲG_†ĮVvā~PBJTņ‘%GŽ’]ŽŁŃžŁ ēO„§f½AČŃRóŅ f²~^|½ĄCā⣐Ą”{ör=É ŸŠ‹"Ŗ ź.¶ePńÆsbż‚x°ņϲ?Ä ś!“EķUk‰¦$9 gxWĒO×Ā÷“ _&X|“7ž-É× ͆I9?wc"Žæ6": Kƒżœ3JNsaa[e‹SHėū?‡ŗ™ a{OŹ-ł™!Ó²VÆFŠ¢®XĪąķ®u“Ė.čē·Læ9›WW ĶFöŽ‚†ŗBRģ#$lüŚŗ ?‚NŲō:Ųėæāh·“ŽÜˆOļD*æ‘T”0I<6Ģķ%Ģ€_o.Į“24Š6Ćā·'|ełé" „e0Æ+[N½ĻĆ]×\s¾•“<ߝ{½ńSźŖW±Ūʞ­3ܱM{ńq?5 ’ ƒq„¬™ż9Mūw%žāś8ļY:e†ąźčB”=ašN×3AHMÓĄćK&….a/§ģ/Œ£RÅS%Čŗ‰˜Ų©īnĀ\ĮŪ‚ˆ4ęnY%6ü# śė%£]Źnx7( +wąPT&½Šk"žęi9n7T2‡T ‚āép”†Ŗļ靼ŠåP·†CS‘ö¢ķ•w(ī5+<³ģx¹Č± ‰ģš)4æ±z#…¬ÅńQÜį\FŸ`¶—»{ē)d[ŹoZü†²ÓėL,¤@« Ēśī“$²‚!}J—|Į:C¬c¦Zox8č^[@å×ͳŹNN«‡ml >½Rćõ¼_S+<Z«ūaÆØVśtµ÷@÷­ ŖšÓµ÷¾~™Ā|Üš"ŽńŃ\+ÆDę˜ÄpdŹ•Ō끕žø…p'ÆéjŪ–¶g bRŽ¢¼ØŪI«¬8­7ceörŅæv£5‘cÅÕ`ĀvŲ‘éj²y’z“Ż)‰׉ŹA4y“/i¬݌Võ$1k¤?g‡&,Vėj26÷"T—Żp…‰7 łŚE>H“ŪŌg T£IOX¹h£u~Ņ¢uā¤ŹĀzä*‚Ä2­-Ū˘ķĮÉ£qŗXL&ΖȳEŸ~ń[¬‰B»ųMÕ1šfČZ@zw:ŃŽź/ÓĖ [Ę5&ʤŌu·I Mn֖ŁmO0fD7¼š†>šVē¦u<ŒĶNūüE½åMv‰[X§Żs¦Ś J($ŠtÕ„įXĮoūČšYįØ5ÆRJP)4|r~ā@Įæł,Ŗuå6‹Ü@V}‚ä7ʦ¬|ĆT¶Ņ#|§ž&˜v ń^c¤˜M5Ž6OŠõ«}y¦ģŗ crå6Ó9S£H°hy=ž n0°ĒWFMžIā|ŌĘTŌ:ē_Ļx3›f濝½F‚zæūĪGŠKåꔩ*ŲŅĪ^0CÄĖ)®6śFsANäĀņ@ n‚§ģoņ @Ā ““0‚±ń2ŅbĄMūÕ[{Éŗ@Ŗų, éŲ ou*d|9L:[čǶå>¾µkhXņ7rU·“=«}żJ¹.bcń.ÄĪėóZiĆ@D‡öāZ;Śm[Äé¼Cą;Rl3Ł/O™”ée»õ«ŻŌš ā+Ś·’ö”ØĄ¾ņ2wéB¬Ż)¦Ł\·Uå‰ī”‘3®T‡ bŗńtn‡~fn¶”Ń©f±ŽK†7Õū_ŠK!˜Ó.Y9^`К#j>+<Ø>?…Č$ø¬®ŖÓ“s?—‘żœšęÖ]¢ c•RP‹'¹2āŽ|÷ā4’»æk•TŚćŪøńkkvoŸg›Žółøõ†.įOµ¬āE®0*«ÖĻ1›·×Œ°­É ¹€}ž@ģ,¶.~āłg $ū8,ŸEY`x "ŪćĖp¶qłŸL-÷øńša#\Š"r¹¼æcoķvžĘdʚ?/*qKرłßqmLy”PR2Vć ģżÕE|ā”;1ćš7 ņ™bµo„xŚĶoŒN ‹€ØMÓ·+ū€%?]|†‚›+žåO¬£üŠ-«Ż¤>wwGņ'FaĪ÷ˆ^eą+w WĖ+ōÓ~- ķoJ™¬Ó®%ɑŚzU+‰Ü%Tó–#Ē>Wp®æćńO›;X;ėzįTŒŠwō§AGŸĶ×(oŽ°ū¬ˆ˜*PŪŃ©®Ž{bWöÉjķźsļG o¶?£†Zj‡;žĮ3Å cšīiVS52MŪ›5 j­—!1Ōhš,ĵ‰vI³ózw¬;XˆLža¢©^+ńS‘ś Ux3{1Š o#=šX:„ į©z—ndD“å™B’##>ąĄlģņž”}£é1g‘4扗€5”ZfCFR›=‚n ėńōä$¤8$5>6ŅüšæōĶ=t&¾y¶ck 'ĀC…š”Ęü•¤Ty,;‡aÅ8“vcÖ[¾¼šR¦Ż6Ü<œŌEŌæĢ~ÉĄ§7k”‰ž!ūi&½mĘüĶ©»2" *"E¾!S'Š:į LaČpŠX婀“H•Ńšņ›—»Ģ"G2nG«ń»x¶(šˆN3LƒæcFƙ±›å\}Œ“‚  Ÿd0ūQĆ&OŪp…v•®-;U­yśJė“ZÜlņŻVȐ%;Ö®ŠČ ©½–pądĪž¼‘ÖŒĄ £.ė«gīÅF(zĮl‡iVųĢ{Lī Ž”b‹”»ĒD {5ˆ“§_T³{äD’YwE«vśø42ŸĻ|£ĖŠr°j‰EhĀ©×cŅé|”>[2:;‹t|ä<Ń9\¢'”£ÖŲ}Y<‰ŃśXķ*Ŗ[?Q:ˆ×ķ,PŅĮĆ\¦įø<ĪŠĻŻq—T0pšļØnąį—K±ĀC? mˆķ@ ²D¹ž#} Ģē żøä.Ńž>Ģ"‡ž\Ö Ä/SgGws¬<ķt6ō²ā~.΃LƐĐżÅF.ū»ć9Ņś»ØŒŅ0Nł—±ūŹā4N­ķņXY²cZ:;(cSl±āLĮČ[S8TÆc܉œż Źrҽ˜—7ż­G «ń;Dėś(=^07w`s¹Ūū' “(( MŃ(Ŗׇ†ĄUj /ŒVéóį¬?¦xżqy¼üĮæīņ—:'&ž)Gōm¾\fāń÷.;J{˜01™¼~ķLĀ-™˜ż«=šĮ®\¶÷ųiĀ:@7Ž.'ŗœśw˜Ŗ’/}\y5-ōÉ;zsdź›¶A8 ܽ˼µõ‹ā'Ļ˜ ”ŠģlŸƒ0čöņ­«w€TnE’Õo$źŻˆhq_į™I=ōŠ‚!†ŅT‘©ŌĒĢÜ%>%ɨ`™;¦ .<ęMŲņyĄ¦üjÓr¤AŸ“§ųšÕ_vŁŻīumÆæüe 'eĖ)Ÿ‚FØ× ą7€\æü—Ń^և Ōå@*$čVM©„…ĒÆźlüM:R:XŁś 5˜/"jźqę}]ųŒV^Hėō:!?9|0w:O¶m°;j^(Ÿś¶ĆĄkņ”‘ķ潟„r-īŲ‘čū4zE{Ē0īÄAŠr©Mjš>™€®jņ²åī“ Ś ž­~ń€Č ŹØb)łziڊ"ؙesmŌ ½®cž6]:ģµ VÕ]Ąn•QeĢ[ØÓēŚķa…ˆļ”īŒÓ±ÆŒh }Ÿ …œ2RėŅö׌>²+˜¹håšģ™(’0MW‡>«ČEvq-Ļ0œ£HĘ@PĶß9 Š9ķ‰6Ič)žb"‡¦ęzā}ÖvŌé0\ Š³ėīń! U#£wnwÉČ{¬8Pƒ ]ĮZ•—˜čdÄš™uwypw“ŠÉ#Ŗcč„P¬?b~ØJRؙ–.»£|K¤½Ģ„Āä*ńåéÓēš®ƒ9µ“ÅŪŌĮÓD/ēS–™Ą įl鳝Ą¢tšŲßæ v§¤ģ £^Ś‚ō_)6|ŠQ­ø•©=3’-"ž-K ‘ē1„,k«'|ĆŗōŽ"HĢź`|ģ®ēė§¢n‘= –A ,ź=Ī«–œņCąÜŲŖå”ŠG¢fGY@=ÄNĢōϚ ™ß&µ z£ązĮ7? °`¾ė‚ró ī6AUœ!œ©Ąmēi«°!ÕZŖ’–ėŁöC|0Žó Š~¤'ü ĶŃ/NūüĶ×¢÷œ¼ 6ńĻ÷RØĄ˜Tˆg übvŖhˆJˆī‚hŻz Jņ«Q/“ķܝ2Š>­ ę5…›r™Ō=šč·œ;ZMäž~ŗńĀŒ n;©ZØ5·x‚yŪø7 īQ\ō)k  ^ŲĢš¤šĘż;nŸWPJrš›ˆįŗCz„’üįŚŹž÷5™>tb)•É„¾E:Ū"ø Õ†%ĶӟV9×ŗŲ~‹Šļƒz”֏å[éÓUž=V4eƒSģ·:<²­8_·ĀŲŽ÷gg@Į,v4>w®N©—„ŌŽU   xaäģSļ÷ h³° 7¤¢ā¢ˆō€Ģx±¦'m@æf@ŗ ęp&,d’: ¦“ž÷Ø ¢Üm.ć€ĘÖ*iUzxe[w—^±øcµøĻJĆ L1\gēŠXüäįLŪ \ć °]§Œ}ģņŸ˜Œ(3uڦņ„ŽÅ/ł"žć¹mŌ,ļ÷ˆ¬|±Ć“³ž\$ėķĮŲ;lJ;9ĆĪ®DŖԐ<»Ņ_™ĀJ]ųĒ± ļ¶VgäĪ­ $1Œ>”ąĒūŽŃÕ³ŚžŹ”Q÷Üģ/ņų j7œæćŻĪ„:æ)<8$ĄPJĻü¦5 _ŚĀm¦%Š~÷ZŽOŅĬø†¼˜\±§l² ƒĶ•, ’ł“²ų¦ņ[‡±FŖó8R‚×Cß+=œŠķ©Øšä:ē¹ś Ś£ör÷Óa`ÕäQüę ėN씕Ȧōźī¼€fNīśœ‚ŌÕx÷1ź’ƒ©-ļÄ ˆ‹i0d_—A!ŹįÉɈ8ķžx»ŠmČŲ”?½Fą‚sZb‘ūÉż+#Ģ ĄqsŁ ļźg‹Ńåc’†ś;¢R Ŗ&·¾WÄ[K„¹,ŸŻē1 YFeM‹(į2·?éäfė§*uÆGćžhgŖŻėP!÷ż?ŒŠJ陮KépD †Åé}źJķPrø`<Gµż¦:Ü®y@™JG‹+·vĄ·~d÷{žSžt:üĄ¶ßŖ¦Oė,ĢGy†—$)6w“ża»Æ~pbj§T£»ÄŃ`Œ0ŽTmØwT½=¹Q]żéÜ!Ō0¾ĖC\T¬žó˜%ŒŸBBæmÉ_TŃócJՐžC¬†Ē0m6ķ^k/:ƒæ.9" cąCU„¹K\°Ż¶ZH‚ˆ‰·ų!£z§Ā£#õĄ°„?ߘB7ŲÉŲ\Å5že– `D;ąMw€_įU@¶ó'·HßĖ:6’Å8Ū>ģēž‰dQ{kėųīs W™ģ•Ąčž»©%­ą*Chīƒyj¾įŲµŹÅĶ „ćē ž«5W»J¤y¶‰Aō]QóD FJwsw”hvŪ=õzć ‹ĪĆ`^{Sź¼Rż”įž­:EVŖÓrżœĻŸŹ&ؽπĪ3ćHå“ԃ‚é+ēnŗUw®äbz= ”ˆJ@ŠiRIśÉĄā_0Ѷ1ūW0°ńjé ³Ö¢°r¾4ŌŲė)øĘ\¼¾q’C‰@PÖ5ļg`ĵ·Ć³ŽÜįōšF¬‰Öēb c*ēÜv5%³’‹`N-Źż„“:ō9ͧ\¹ŽGĘNkčPņĪÜ÷K'9 ‰,Õ§ĘŻnH¬C­Ī]3Žą(ÄģµzŸź–õ0u‰x-żŚ;sūĻŅó!ńRhŌ£ŒWXć įҰŃbHÖŖ\6ķ™ŽB=Ü=Ą*“«ĒŹįĘׂ’ «#€A ĢِLnHćƒGÖ¶‘"RĘ4‚xŻ/Qķ„3ų6ŅoUKLkżrˆ*PµÄ÷”ą­‹#„`öN©E{śŠFŹŌ]g]„Ömń{;ŻōŖŻqsȼdééiÖ³qlζ¢}ŚŽrqidųž17³ö“«Ż™Śf¦£B³ÓČP(Ć ?‚)õZzØ«Œm8i‚}*(O[k%7RDy_)DŻ+ltÜ“‚³šĀ*•¢÷А0åū’Ęó‚įÄø”%Ā}ąvńsöæ×®iš‚K@ŹöB{2eWS.m¦"N{ 9Ņž¤Å‰½OzēüNw­x0T-b³™€ēˆĖgŽķĮur)„ók¶Z“”M/ x(;¦Į½x yĶrؼŻåĖ \ ō7yÄiĄB¶? [3^6o%b|Łéc"įG×s-Ą0P[6Ī=KķT×‹ŸØ$­„+]E&뙫āg\tވ–Ņüz”vuæjPš~/®W\Cjw_VŒĪ”—ĢOa é)s9Š”z—To`Õs‘Ó5z!ŽŁęŹų?[3E•0™:?‚¦ÜÆłč^ā6»ž%Š‚?¦½Æ!½“¦z¬ iž°§[.Iß°Å ĢŽ…Ij”+_^hÆTVŸ¬LŁšĄI·—±€/¤ŲŽŠ”‹| k‘ßĆųyeYzvb€(É z£oLw×ō60ńüč+‹X1‰W96@ßGl>GIŌāõĪ#Õü  4c0+:Rg0ź„L°Kqƒ†ļšé,!^ž!Ąvś|L_ĘHO­hŃ· Ā+TŠCÖt¤•®l³:4óUŒšė/ēł.ƒ¢ŽļŠn`;Z~LF“ź–ƒŚó‘Š»åŌ!įu\ZÜU‰CzÉ ”ōVˆŗÕlčŗZU ŚĢÖv…ƤŒ‡ušēO6lĢB•U5L%J@”ZÖ.åœg8XgQņN­0FÆN¹ē¾<ü”Ł,»Igh{-‡Ÿķś‘ęį:[-³p*l…PŲģ ×yČD‚YiµąÆ‘Ɲ$•„VAŚÖ ƒI¹%: 3y††Õõ† 4[ģoO„驚ŚĶMÕäJf š[ž#§pw|vē0 UKL›Fż’˜Ū2e`{d“®`Nõ46ØUOøN*’ ”`;DÖłSPśc[ƒ½š5Ć^=Ą¤ŠNm õ\Ž4ĢY@łQ8 ćyANŌ3½Īŗ‘²’-’uś"°Sēų’•ĖčH­ŪĮŠ{ųQEbŠ›®ŌYĮĪęxĪF{” ˆ‰Z]xb²å¶Go¤V„y+ēdP!%6×ō¬Qh°5ŗžu-@RPP¶A2ćŃż¬åIXĄ<@éÊŃEJ3kū$¢Z鯔ņą†·ošcj«V×ZGĄwŖŠ[¹L/ ö5‚% ¤Ö®m”ܳ%`–$OYYM«œB…a›ŌC£‹{mø®ZŚ@š [P¼’ē^ūoĖBŽ**ųŭ딁®ü’ üeXF„lwjc‡KĘČÄŽß³‚īłS“Ąīp— O£<£åX /v0@č8XēX‰e·›sš‹Ļ^ā¦*F,Qhä;hŸ=©„°—vJ G©¼ ĮėFŃ®ŲŌ ­w9ܥ攦ߧl›¦9Ū­c1S 9ÖQ@¶$a÷mܬē7 Ē. ØJÄØžœŁ]i؝ ®uE•¾~Ć)ól¢Eļäi¼øŽĖĢ™Ś^³Å.!ŗk‰ß›ŖĻ\¶bō7"ZŒd|¹Żøäws-mq{š‘›ŃŲ¼ī(A Okļ¼0įkHƒ(ē€,¤ćsHjv9YVčør¶¦[gĘ=M/$÷Śķ.«©iž1ä-©éJ •fJQ!^8W$W ć¾Ræy—[LVŅ„9•@~/–Ž:"öšŠ„C 1CŚĄĶ8Ä_DÄWŻųdzµžrxĶ˜õnYµ™ĮƒÕšæŲƒ-*ČŻŌmIó°X|Ń<¼jģ'ƒé¼^–7 ž%FŠÉ!BZ¼¦Š½b=HŻŪøĄŁ‰%›wڃš6”ā½Ų¦@Œ9Æ.“ų»'ŸkD;Ę!–äž?Hį¼yа“,y§™Tm»µxG<K}™?ÖäŃy ÕwféžŗŠŅ—ĮłųĶSW7Ģ>½$ø5qūčGeēØi°b ŌP«±=:QĒėcĻā©÷4N0’t&RŌĀ?ēĄIØB^r|ŅĆlBOIó#œ:GŽØ™”¢ ŽjøĪ¤ž«ÖŻ€pkhpżæz6ĖØØ»°Ż’†zčačnzčīī%”’īŗCé))é.iEiQŗė<ļ{Ī:ūĆżyļ{_ū^×µÖž”½ßʖĶĖ™ŽkŸ-Ūې^$s;ŅĻ„Č_įZ¶JĄcź‡ œ(S.nĀIüē¹Bē¼sū“ęgÅāūˆ Éū?€čWźßßo”x&Ū‘ū!eśTN6”yūlŅJ’2g‚½÷®oœöŗ‚‹ŌµĀiU¦žU®’ęN7py7²†–ŽsÅöC?=:$¾gwk’÷Ÿķfö¼³,4%zˀ϶ą8Õ5.C›WŹ+ÖĶN3©°¢•Ć®*ŖT(Ąż_²źõķ2īł=aØ4„e6_>]xČ?wą­`L[qX^PĆ2÷jDc€‰Ÿ¾0.T§Y\kŗŲĻę?žĖY—ź9^ˆ¤RX3SŸ9ĀaUóEū|ĆĢ9{±>ŲP¶’Rįs`žŽņ—,¬ĪĻ4曵fšĻW¢üŒƒ 9/ļačĶÆ‘/ÕgČEćkŗģ¾9V‹5!ėģųģ»&R%m-ä<įdEDģ¢wM~x,ksˆHtŒØĘwæ/‹¾ÖĢ 9N2­×±K™ģ¢æ‡H)ę{Jł%öÅ#-2źĆšĶˆä¬×=­¶„C8)ŗÅ‘½„$ĒgˆŖ–7G”Ēļ4ē?ķ+E¬*5ć†BųĘGĻ"t'˜ÆŃT=ĜÆqŽõe[„ξT7{ģõ6õ Ģ’ÄUž>ģL(²BoC„p¼ĖŽĒ~S9¹ż©ź‹ö«XYū¾ø×ådbš“ÓķŠ{"×%ö4‡…Ą€4ŒeŅś‘Õń[cńCM[Ī?ǚ;Yמƒęüėy'K½Ļ6®zZņX)šäö³„Ē|%”£lż¦·“Ļž’7>Č+I±Łi ōėy½5ŸœŚītō7Õķ”óē˜8)=ąrĻŁ^^flX·¼–×ū`oyB>~ö>~nÉ<9­żLėyÅ]In(ų”"PcŃWėŗ±¬ąVŽš="µkC_G‘Åe‡ņāĪüģ˜£„ŪDžB"0C³łŗ.¹ē’ųõDj’£į‘Wē!e±I!©{sųÉ wķEérŃēƶ·„JŚgļed}Š F‘gf_žÆ|÷æ9LxøWężØĖ’ Ż ‰kIˆš]! š~Ē@)sOÖ{“żć H¶)H’wøfæ¢ø*NÖaØģŪ–Lī¦×笚E’’ŸjžJ{\‡ y5›ēŠŲÆL÷[רÄįmM"ń¤R>-qjJ(“_+&Ų| ɔ ōå“}æ_5ĒLNą’ķÉrś›‰V[oõnŽģn>5ćłuŲÖ0(,6”Ųß“ ¶\ū¬–+ÕĄõ_`Ń ߌ%ēūõļy¬ówlqĮ™¦=…®®ƒĮiį3ÄóÅü¶įTīj\\EĒrć/ŲŽ“(«É²ŽŁHźŖæNA#ģ• Ś«•]•čsņÓh."¶e»y¶Ižw»‡’Šč9……cŅCyŌ\ÆsiL†””ü†¹ƒå¼Ü.{T^x’õ£Žż$ŁžŁCč<²[©ųż°CęoļŖ×³…ßo4¬UVT³59WŽw!+1Ńą¼8eNES!”ŽO÷ę>×Nūh½ųÄĪņwøü F”|K/ ć@Ż—kLZz;³ų2Ģ”–ū/ßöśĀ»ŲN ĶU„«2ņPsŅEm¢·L×bĖ MęėäcÉ²ŻĆ! AD}„AWFš²rœēŲvŪŽLģüVü—fżķz|t‹÷Įgūzd«ļVE=Yū(ū{„Įw½„Ź­vCR•m9ĶŚ&“Ā•ķ"yųź_łØ#˜xØb5wOą%Ax)νRµESļm‡2–)žV/Z+S[®'½6¤Źā÷§åč ¹ÕF£ jŒOż÷ę‹[6`uųõˆŖC-öƒ³ĮK¶ŻyņÅÄ _B0}ś$6ēšW|‹–…CŽž¼ļ_Īœ%ęc/:*#č”%v>iˆgŗŸ^4Ź“³Yó ?,¼JčŃJˆhh|Uo`36Ä•l™ųQ.ś² ĖĢō¶ }ł³ń/ūĶ›×Ż³9Č&­Hw¤˜nӝF*µŲT‚óč~—!Ž*ĘÖҹkók{21*3ķsž£Æ~éĶ ®¢"Æ?\ågyæ-­Ćżp˜wfņvīi2łŚ:™Ÿ›½ ‡!“Ź©|/Ē’Žóųē\”£*Ł×LŸ×ķY[N]ņ8q‚N‹ćs® ’Æō źł>ÉoŽzž}ø.R§6/xįk{ӝW٘x1U …Ą–Sū·÷Ṅ‹mcŸ<Ō…Zæ¹äžqXćT7ē°Ä\±~’ǧäī°Ą'«/=ŽĀ4¬¬Ēäi”ėt͉D«(Ü£ū¦Ly0ČbJūwī0r…å}ÖÉöN™JnķxC~öv”÷ńó|:įZķ’śAÄiZ_ŽŹB”‘ŲĪÕN•<=Ųļ LžąW0{³öREņĖøjĪõ=æĒČoeŅńZĻ$Ø»ń”ŽgwūzML²ĻlŲW‚ÜI’v<ĘE5™ÄģI®’ČDš >Ī“«āķÉŲæS•ø/ yfM‘žž¼¶źÕ’ćmßō‹”’üŽ'@Šäb ßøł/Ä}U#uŲ'6Ŗ8æ5*2/¢.VĪźŪ¼ī?/b+¢tÕā!ühä6±1ē:\kžf‡Xõ&•ļg+F>¬„YCŖPßg8ń!$‰ń kÄ¢Ż^ @†4ŲXzq¦”$v²ŃšгĶBš“X—Ŗ®ēJ¶Z”ś5'YŠßEȗ\ݳ–Pæ ~¶äŲ)Tžö*.ĪÖ;ņĖÕķ×Īß6ƒ†" tT‹#ɱļŌ\åÆCaņ‡ķÆ„w:žėĢŃE“H]Tyü€:9ŁĆ ÷wƒ„µāīēlJJ®ęų”X{ƒ_źY>›äżˆĀlV!Ł\3Z³żN’”ÆķīSźēš·£'Ć£xåæ—sš’Ó?‚NĒ^æVg“Ń{†žó:ęÓ*ƒĒ9c“¼ŗŌö^­N²#ńĪU9‘“kµ?–äa͵©Ļż‚7nļ‡ēQ_±}©å­ŽģJ“ÓõźÄŃįd×+=5e³Õ—ķÉ…Ė¢Ę0~ˆ­|2š‘Ž!Ś(åĄĄķł`„¼š7IĆ©ŹaSŸŹū½ˆV0ł‡ Zł½.*Ŗ³iŻ·Uśc‹WwśŻ« įsūäQĪēPėĄ‘w:ÆAńķ¾ņ\k·,żį{AōZÄĆ`0‡Ģ°ēƒēœI€jżEbā~IÖuwć°ń!ü 8ü·ü#?ń (`Źė ?‰ūœs"på©Ēkj<æ_ž~{żĄć×e“ŽuŗŽh’ųÄeŪHj^Äst~»ˆ±qю/6źłŲšā`·½ńźF@Ė 5cĒÆĘ0tžÄ”/%"Ķīé÷i™ÆęŖÖ*YēzŸæ;±õÖ]”Ą—g÷=|•ŗĖ1³JŻö§ĢCI”YøĶ{Ќ M<ž(źǧ7ģÅPī«§M?„¤šÖ™hIņˆ¾±^½4ņėŽ`¹žSÉĻ­ŸłFĄ<‡é.v÷žŃŸ„r¶eA¾Ć4Ķƒ0Ž©qƒ&ń»źAG>oņ~Hßd[ læ¤-ļžMl,¬ū>(Ž@Šõ8£ ¬«©°\=fźÕvĢ\'ćī.ßŹÕ¦Æäå_Fv7śW”óёHjź —«é(ø2#/ƒūgā0­ Ü6sģśˆ–žŽóV;Ń(Õü+Ļ? ß_kˆÄ>Żi÷vX žéõ§Į·M¶ž‹Xł\tÖD›šžīYR}ʆž Zéą0Ӛ¼›ņŪ”}–›5{…mo2”“nķ3 Ł·ž<ÓX캟w!NÄåœ hć/«|ų¾ųÖ“QŚWĀz܄GN<Œ‚ŠÖńź*5ęVć:²Ź_Ņü:ā, £oŗ°v™ģ/8Ż8}”ö= q2Qj’–ų©& §$+5Ł€¤PĢ” :¹l•øāÄĮ½7¬ģ KI±;žzi…0üjłi&X%gŖl'üWßJw?mGÖ3ŁļJTPŸ›Hģ°…9Ó+ż—-^¹ ö¹K25ĘŖ&Z5 g~;VÓæ~PRt,’üXĀuųĶł†ż”¤—(ībiļ1@Ÿ*U™8fŽiõś­VDŪü×=O‹°ćC V?©›@xósßÄö?Hš1/%ÉÆŠœŃžQźź8›ŁŹU˜¾J2T½+m³d£$[„‡8a.ō >šø”#xłiŽ­Ł“ Ł7õV~jŽ >‚}ų“˜§M[< UAūuݫݨ©¾ŠØĆŹÄ_$§1łi߇’ŖŻ ½ Ńžkż`Č`¼E^|©… 1Ź——žG$Ö ŠO žÕųĪųóŅéZƲ³8¹(oåŹ^”|m_ŃR ćrĪsOÕ§Ę Ģ˜n‘Ÿ`¤Oäcå+*· ·7•ÕŪ/+šéš·r}¬Ŗ²{9÷ņrN쳇Y­|ŗ¦«åžx8¾–®Ģ¢Ÿq\  Ī^_Ö„‘nŖČ ™oĆ|ģøŖ q*{vpõH_õ'ś^Īõļ‘i§É·ņĆē‡ŚŠv*Oü›īŠ}9_…&E“ņ¤1=’ UCŗ‹‰kŽ-’\łŽ]I2͌»ÉŸMA>fvŽ-Zč,1fĘq&Pų7„ś(Ā×fė+Sb‡OLOœQw*yż&·Kōʰ2—hsF4”Yó®BF÷ō'^/üŁóHŸ«"̟/éŪ°Ū¶¦LF'Ŗß,Ēlœ=„ŗD&z÷ÄźÄ B]<ÆŪŽ77›ļ:½3IŠõ ?˜tŃī>.Ьwg8,™Ē¾.V¦dYt[!FeW¾ŁR"w=į>°p0ļ€~÷FĒ­Ī 4qjr„×yōūż¬S Ū9£ņu²—”6’”ņK[%1ŖYĢ,Fņ…Ų'`ņĖ¢Bč~†s!åǽ_Q-öÆŪ%ĢŽ˜\&¦ĄkĢS;Į3 ¢_²•ČŒõʞ•m«Wī‹ÜbÆą²äOé£#N©¢Å_2R1÷8)±=å$#óėõąÉ¢*ö°šOn_šVZz}ŚŅĖ Ō̦†œ\‚YŽ•ŪyrGCŅ[z–Ÿ ZŠčD@&¤Xj9WŚ+įfB‚7›"‰ŹBą[sŹõė(ÕzBĘ÷4.kœssĶF÷“Ī“ tbk–…÷٬Ņõ¹_\DfģÉćLk~|/«ėügCi“‹Ÿ”uÖ;Ųzg#ļ®Ū07Ź-‰bk YĖ—¢µZwé ūr;㪟9ųꚒś ˆ’x MŹ5ł’Twę5ńa*}2—bČ,FįPu@Å)ןå<„Ģ%*Lz=ųlOŒæ$Ü9#cc°·rŠŃ¬ńZĖnæ§HDo1ąR?ć4œ;v^ĆgDéÉu7Łw³ˆ@iÖr!“»ūß}–¹dµ3NŌŠl}h+÷Ł©xŲ${ųūA"z #]šĖøūšó`+†XΆĮn÷oDąæ¶5äé¤wėĮ͘Ł"¤UÅpES£¼ ć#ćWU!Ÿeś·ŸŖżÆWėko«øIR+6=“O€Ķ<’Ń՗ÉZŃ7Ųź_XŹ×³åĒŲ°ęHŁöxŸmÆ@żöā’ -½ÖēĒe…½“Å=įܟ9£·u"„ωµž‰dāZģFĖüø0<’ļüzRā+4g6{\¼­‰ę@ł|š2õ™Ŗ!ÉIŅ›į׿­Ž˜Ÿ\C˜O8¼=AÆ3ū ,ų 3©J„”fCx’RēŁÅ•Ż4ÆćLl^k.y½0Q:eY›Q—¢BvRO»”8 {&—Ģėįżz›ęžfģß÷Ķ$o7+8š•\ÖŲ'Ֆše®µ&w÷µQ’Cšŗ†Ņa¶•E¢ż=\^÷EFĀŅ÷öbēńµÉ> ė¢ŪN¢„ĮšßĪYØÆ«ŸpĢ$m¦ō_ž7‘µžų-¬šĆĀCł±Z^ožb”¼¢¼ś HśŌ @“’Y †4±·ė S}ī>ēƒįčŌŗÖԈJęoЬčD/ˆc!hA×j™øX˜ÓD’±é’x¹®}OÜ1O”9™|į€ÓŻ Ą_`U€čŅq”™ €~z‰`*É+ÆGQĻ1žøl–åĻļ!2Lšg÷a(ƒNłß4f;Łq¶ŒmĒJ…œC–ØxÖ¼āŁ8B eٲźųĀNķe½8ŗ{h“IsIXĎ×ĖĀeųõoL”ų3b` 0ŗ¢éA­|rø/µ@Ēya[`>Lšµ.Ve×€_ڱ§Ś}TŲZ“³ÕZä‡x…`Ž®"€}ž Õ azŪļ±-›.1…w/Į©Ÿ™dtā¦|6ÆOŖœÆ§qC6ƒE’®¹‹gxؐä_[Ų|,<Ćł¦® Ķ€žLØ|’¬ęČ'­<Üx’„Ō«ŸK²#bAsįR“Ä͊į0tÅ7Įp$šĄēŌ×Q˜]A—‡Ū!5 ƒc€UøĢē_“½HāH“•,Éæ²ξ›JąUūZÄ[¦K=»0©ā' ü/’čiąü_x  ō_Įųæš1#š?šÄūą„¾cŲ,’Ę R÷’³Ka"ŻšźzBõ³ŒŚwžO€Č€k3ĶtėE¾F_“EĮ!śƒmóųŲ£I FG×Ha€Ś†”‘)•_ęćPõJ\÷šÅģ?( —|WxdÄńA¾_†on¾'½k„®“¾‰Q+1X”Ąō\äēg‘€c ƒw?š™F.Pź$¾ŸąŚŲįÆĆtÕ·łÜ<č Læ.ļm•Œw 3ąXo­;CF2ŸÓ¦ģ›'  Ī/nŁSD‰­x©¹½ŪńKū³2\Ų1Āe?C ĆƆł'¢a”ś b±»?$Ė»R¶ß#B1ų*ń29j€gvÓŖjƒ£i–tyņåśÅYEY°†ßcśm N ŪŌ¦Öpy»ÜŁ"„ļÄŗń>kæ%>S1ł“d,k£Sė.÷xų½>Šr7Œh{ōM{žĀKųmt±Ä Q§N½ħĄrļ}ųčę+ĒQž>@ŌwÕqŠO÷ŌvéłĪRޜ‘(ŻńksŖS½&Fj¼.ūę 4Z[O°s}+”Qfu“ŲšÕe{`“²šn[ˆ cŅū,ŽØQīŲ‘J{ū!ÆÄp:³ÉāßĶ„»ó"M– *ń;āļ¦5’̹bŚĶp\ O‡÷7ß¶>܋q]UIā[7;ÕöHŚ«Ė1KŁĄM.œŻØ”ą“ØøČ÷ŠGŲJjŦ/,½ NbUqн·ĻP1BÕĖe1r!`G%Ö2Æ  Ē:­?ŠĶ*Ķ÷”1-œ[ µ 1pģUĪżĢzĶ._é¹s/ņ7ÖŁ•SŖóæ GwĘéė”×2šÄėĆq°“ÆįN`÷ęl–gš<*ś™‚£’ČfD“×(ŹOÓLZ9ņ&ļb-ü?œ¤1Ī„ŁłÓóK:Ėā܍i¾ė¶€’­‹|jŻ)DvŸ Sé\ĒćŖKlŃg¶øŃŌü'W¬‚qvo¢Æž“­*{K‰Lē·” ØæŃ¾£ żwˆ…mŒŠŽ²Š. LčÅuāk\ĀJęc&fڈYo`Ś}źÜeŻ*«ūŅdŚKx5g¶G`b†{4hŸēšŸ&N'_5õ:jhuģ"„Ö{t·™ÅØ潎ĢTķ¼vܝŽ NŃøŻf˜ÖOūī(\°ēćÄ9M¢ÅįĪ]œė߅~ĻÄaņų“ļ˜ŅÅ ÉRŚ‚ó”' ž›×ÆV'ž$)w¤8Q3öfB9åLŽX>zÅæć2'œ­×ņ±+²§‡mśŠtĀ3×ĆMĒ© ƒ±‚eĶ2«Yj7’+‰|łÜī°ĆL„ŃL•q)19²ĢżHNĶ(róĒ«DP=Ō…œ£Aļfˆ·Öē'•”šŃżƒō‚ī€āŠ‹k_Ó29œÓéĢÆ• |ø¬ ‚5öšĄ„lƒčģAYģ’ć‹§IVõT×þÆķÄÜOČ„3”„Ż]†aėčļy‘æ^·2•nķįŗ•~¼"4ł«Ć[Ÿš¶g]ōLUy® øĖį²ē9~±ŠØ×c!&ķłVXć8(¢ü6aS8AæŲp§žÓg Üß(vø²ي*ųĻYå»+}w°™€ĆOe”ĻĢ“’'Ł5ż#s¹o>¦¬°$fõ‹_€ķ©6ŹsøU-ĪßdSjĶvņuQłŠ˜īŃFŗņŪŚ‘bE·3¦Öikz ZR/7߁D„ÉU“m“;šŌ³KĢ TŽ›Ö/gxU3x}Œ• Ģnł#ĆĢę}4Jɾżg°]Ø®ŹŃ'ØŲŗ•dćjJG“Į‚Żo W–Z…ÕG-r†rMĻąČh޳fئ¹}ا6üW©üå˜3Üā2?ėIq՗¦UĶV/Q™'`¾†®0hÕD‚?¤S³ż#FI4dóÅ`-ySŃN¾ŹéØ6Ŗ§Čƒß1n+p$± ׎ļÓM÷=‰vTįO”­ÜFq|»|¶”KRźCšŹfŹXׄųŻøDĪr›#ĶŖyb›OcÄÅÉ$ā°Ö ٘ł•öŚæåANŚĻņ+EĄŖ(£to„ø’•x<®I¦“ ga3ē}q×’–‘_1•Eœ‡8¦Ē…P ¹Čš”J |ūƚ®NS1Gűz‰2’“(‚¾Ó:äJĘ÷eåAP¶Īv2łĖÅoVÜ/>%ڌ²ā69ćz™ćlE£ĒTŌüqĻ/ĀłYyfƒč8,Ž_ęrhépųjķ£Ģ+ķ›h 5Å9„·’=¶˜ 1É1ŹųGß@ē ēqM·ŚŅå?Ĉ!gW^tT7IT‹° § šSl84ĮE Ę[r)į-¾tŌ³>`÷r+O›s³Öfb² /Sæ“ŁĪŖ¶Ŗ$Ü@yŸ‰5¤ˆD}ŽĀ³jųuŒ› V½·ļŅ|iĻŌrI%tėĢšĆŁz~ņLhčN¢¦_‹¾¤(np¶uLē*ń0ĪÉ“A”[oü7ź#č3Zś_ēĀ^ęQŌ‡ Ó¦t‚†·ļp4æĘO˜ @ؘe¼šŗ’b‰1q½ó‡%ęś2įgŒŠńĘēŅē²ŚjJ éϧsī˜Ż®+z„÷”°€ā8ABļ&"¶£ņ‡śõ(6śā•*ˆd÷ŲE24u(h˜(ĒšH§Šõø3€k•“š¹Am (ƁäUoÄ3Āõ˱&ÖĮf«ī¼¹R ¬¹+{eMTĀ+ų—Čęß"¦œˆr‹>ń¦YžŻźraM‚Vt%;4›Ļ®Żb3޲ÜŪ.Ę}š”‘-g•¹Æ°¶m‰‚ėóćÆ[H¦ ¬ļWźź'ŗ’‹Ģhg ægj?ł§^D‚O±QŗåĆJ |TķūėļF£‰ę$fta­ā˜ɤ(HJks¾ ĘQdi’"`*ģų!ĒA³ļ.殜hæbóĖ”ä- –^«œœĻŽ0;ėrtærSĄ[źnƒ«Ćųį{!SĀ­yćuö#ÖF°ś$®5 ķž &Øe†‰žü|ÓHՃ‘č_³&Ś?Y{;ĪüīĢėEńŌČÉgX”޵-Š޳ŗŽ-…ه¢ž±—Ŗ¬}•słoH­‰—Ņžū†±ż0”“‚’ho „ędģ²w‘^Q3ī`‘Ž×)'’ɉU(Ƶņæ=µ-ł®€sĖ0,XŠ®AĪzæ-y&Æ7#nߢ™m—æ¶™ Å· 鄃^ Ō¼±Kc7 Ņ$īŅ£āŠży,o©ųA<™—J™:šåDķpŒėŃÖ¢_}4Sąo¶Ņ— «’ ī"LŅ?QmWC²Ļ”·r'QĻ0Ó²k­Ż²t甁¶1‘ękK*ę'Ž@W"±“]“6]f‡ŖlkrcT[±J!˜u£]bl“ģÕß2N(ß ’’kŁ!ŽšÅAõÉ¢ÓŁ0˜Č%ųĢ^ėónšéŻöķŪ²3”|ć²6rÆPh{$k”L ᣠIK†"iåÉoĀf[¢ź„6±&÷ ¾¤āæ;ŽīrO@Ą®½¢ĪĘY:db¦k9¶wŃĢčļ$”5āȖ.}l¢ÖśÖš÷]Ņ¢Dē÷Ął|WÆqЊĘ6 ŚfŠŁ‘w«Ķ:IČ7 Źōr‡02“ŗĀ*ÉŹ¦•“,”Åā_xųoszā˜ĒūĶZu=.‡#‘µ,¾ė"õ_śųÉ®š3Sł10Źöæ@Ē~F2“Ī_¤äüuV— d*NœŲ}õõśS°p’Œģr¤f -IĘ響‹> m] ^}4©(]ĘO~é„L½ć [ވfhĘÄ+¶:ģåéB[U4‚L13wŽrLŃśŃ|¢¬‘%&®gćŒßĀ `mŻ:„ˆ¦8µ’ķ9¢AQ_ÅZÜŗ\9 Ō£"óėžÉ¬’‰Īæ$—m}’ØźęžF…XS #Ouw u /ŗ .;¢Ö€«Cmų Ł¶3hKCަ‚QcŖA½mė¬ŅmA²‡Sv“o54„‡åę·ī9 ÖYöş$<Ė}ĮTÖ“Ź*Ų;æ)#zo»nNŠń*˜gVÅįGjņO]pPÉž&4•~ČKNõy•¦ĪŹ$D€hż±¬ÖT+ļwbĘ1äņžSd ūRlõg,śO$ć#‘ƒčbś\­ōGĆ“k“šŪŌżĪŠėČs‡÷ĶTcŅ‚ŃĀę_Ļõ;7ęKo«1iyGEĮŖćGEv;Æokšhģ¼”ū±”üĻ,Xøøŗę8s/›ņÓ&ĖX®ėńO0š§ż®6O }Sƒ½rę—N³Ķžģi§óo½_—„GŪ ž_ßŪlC·Ó_¼DwƄ„œč»Ķ%}Ģэ§v؂Ec7Åń‹¾X“±ACD“@Ć Ō`}L¶–|m½`÷ŲµµĀ™³<˜`p»#ā$\ŠģżŒ®[°)&>¼){öĶARpÉaܙzįé¶QĄ!¶ß¢8ź>l2 ų^®Č+Iæ3);V &UY~$żŸ¹į ­¾]­ō?ā/ ›|/‘×÷ėł@¤źLQZ_ÜSV5łĢČNˆrÓz ?3–S˚zjź¢˜ōŠū #KhūÓŅ1Ōˇ»n’HåóŽŲII6" T(˜Ų­d‰S ¹=ĀW~·Å‰®J,Xx”źiõ…ŠWq¼&Ł>ŖĒ_ įEķ”=} ėg%9k“rČ~®EŞśĢ2#Ź,Ś=p įōš›=q åĢaÆ?¦½"€ģĄ?4¶ ō ę¶¤@—•,ō÷džDĖ«­é?źŻĮŚČÅé™8zVN|zš0‹‹nģyՌR~’ŁĄ¢OŚ"š†©gŗÅL6E³“‡å 6"eЉ£½śbāāŌ\ĢÄėŪ?F±“¾æŖČ{ü‰ƒĶ>Ź+Ū3{›½äUci­Ū+*8÷‚(ˆ a)§, œü\Ŗ| – b} jėenģEŽśā’HX-q /kzn×GäĶ5,¹P,Ń&ŻĢv£K@Æēv×7˜I—„½Ę‰0÷ĆA}p±|×čBT¶‘¦Üró­›n&kŒĻļaRšÕ —ąĶ`‰Ŗ|›Œ†Ø“­Ū½“åČ4ŽęL.ęÖlKC¾ļs[CAŁ÷Ÿ¬Ń"Ž)tĢp×’ś ó«f² ÷,r˜š‘]›œ¤¤µĄŸ„ōs+£ –¼ĢĄ%GØgȖR¬n‹PÆ^ø.PßōŸJŖÉü dR`s/.PÓ×é=„ēęś­j2znš|‚,¢[>¬Ų0‹QEK›°_öļµ×ö”Ņ@ś2D„Īl'‹ĮxćłKŲŪ–z7ݦķ$‰Č:H÷ xź# >¼•Üpö•Ń|ń üēZe SĶUK’ž×ē#Œkēq„Ŗé&ŚķYüØ”]¶fĄPąĖį«•œ]d®;B„u”šŠ¦gė×Ŗ”Žź3ó4WćYŠ8ł½‚±v¤§BŒ˜É_Bt&>ø³c”É.Q*(•pņsĄb_‡µŃŒįp”Ø3Ÿ¼ešŗwŒØ1]ߎ\_¤Jmé.H’fr'ĘåżŻūƒ¾3¢KŪ ĻL:cœB®lCä8ʐ7öł¾: v—bBØQ)**ަ¹!ŁŪņģĖõ ަ\ĢoöU[ŅĪ2֑p˜?µ²<īŚ±”2XSUūĒÆ'€å«ä_q+§×d³)Ł"¤ü}Ūƒ¾lEgßT8®TÉßcßv Ųö S ū[RY‰¤WĪenŖ>Ļ‹f¹·ƒė÷LK9čć&4|¦āA×}Ī÷±M9\“XŽ>UYĀżPü% ¾ż«“Ä-;™„°ķ;­6›0b+Čö1MlŲnŒĖe9«āŻūŻ„JsW”Š•ēøØnÕ{VdL5‹[X£UćĮĘn.(=M2tŽ)üÖąž'@Oµ@ńÄŌK£v Ž1Tš…ŲĪÕ*•o»?Ž rÕ²ül»#™¤Ś¦ņęho|”S= mŠé`“—o‚w+Mɜ©Īā¤&ÄaX„Ü]­ć«š³ø)Œ“øBģ¼ŽG>ć¦Å}Ż™¶Ų ź`Ā|nSQmŖ Š@|©QIŁ·b~>öÄŅ2FS™üéĻk”cyŖy¹L»ąąkN€ćė}ddŠF¤ēz(l%Ē„fż|ļeĶÉ`+-}Fayœö) ”ĖĪՅ|lė÷Mµs½­OaS Ø Šņķ8'Lw/…Ą $­¢ņ¬}ē#sóH=¼7)EftŗSÉSzĆĘŖś ščć›VĖN‘@Ģšr‹t[Y÷>ś5Øv„U]i곥ŅĢ@­¤'?ňgsœr‡Ś@pƒ¶‹ŸSŻČkB„VMœ¾Lģe¶óŌü°G&šūõm$ĖŚÅż&œ[ś™GgæI7§_»©ĻŸ-Õøé7ćPü2ą‡ĢœJ•yĘwOņ Ÿ1éO +Wnuö@ó”6n’HUÖ:±«ÄĶ…ļ—ųģ†;•GBqBßEi«Yi Ńń³ūæGųz¶˜SśīŪFÉ+°żOó·5® ;ƒŒ$é²}/‰]Ń>cū@šÜWO¢ÄõéĢU¹N Œić©w‘b}7Ÿ]{=2›·/¹ 0–B:šĪ|=凤2'ś°|c6'“…8<:‹ō"%®F“žCRBłRŽŖėį‘6 Z2„&ET.óśUY€ ćyŽw;~"’§ÖŖhś]¦JIYV8xߌÆŅv½Š±…ØJ5ōyū>Ÿ%”G*ru%xūŚ®ųĒ1ĄX_7åwŃNcįÆųéüŒ§_­«Jč”Ūq5¶„G+¢^1AŁi –Ę8å#`‡ šįb^6Ā®•ź•XćØL ŒįęŻõöøCĄ ¶EsĻ·śģr­ĢŲÕėēÅāHüf˜ī~}W-˜…·3÷Ļ“5V`įåH!©øx„±¦ņ38÷C‘®=žwEķūė¾!ŪYœ•bØõ+I¼SĆĘVėCĘD3äŁßŒ”Ø“é±<Æcx¬‹«'õ @Ćf-³n×"‰ār<š·ö!”µMąšØöęVó Č6Ē…•Źähv¦e澚‹ĢŠ*½oAŒ©Ä½4/3Õßv|Ö+‚zu8o?M}•8@øAŒé;ZS‹œY>ƒ¾'I]!p¬ė¢²ō…zčyNwØiV;ēɘżĮõ³ž®s|R}mVD|<ļ…Yž‹żb§^{ Xęå«e‰w÷vŃbĘ=/Ȋ8ŖÆRxa/ *ŚHaløłś¦Ž üÓI³Ę½Ōezeodļ“DĢ5LŽĀĪÆFÉ!ś õrŌANī„ÓȒ<åļ’˻ȭ>$d¬Ld‹!Äō1hKNīʰ“°œÆžńY B|PYŲ¬čŠ•Ńa…]…„cc[ĀČæÕrĒē|¹RžįlŁ»'‚ŽD#\¤Š8ėggéįØć„]Ī敎•IÓH,–3'AÅļŠÕę2åIśÆr—Ķwæ@›1`:ŃE”ȢØÜ##n%Fy˜M£­õþ²>¤ź°SØz[±¬o±‹›‚Ž¢®ŅUē¦pņ…pŽNŸĢĆĒRÓuł^A‘į< GxķīɇłQ$ų†**{&Ōõ;h‹L,Ķ1°M֌'1†.„ō'c·™5•įQ CvTÄN<pńÓ“Ś ‚Ō»Ł~ {sqÉżK°d|¶œžćuŅ摉FJLō¬ˆµ`ž‚•hš»_0ÜÖĢpį–6:,µ„zŻJ1Iņ!ÄD~ļöÄ4']šü„Škb±ŹfF9E®_ŠCŗĘB…ĮŠ E‘ÅńØ©‹Äŗ‚Įē_æ•\0fi4é0A ¼æÜæ] vÜC¹_t>wqŠM²_š6·hć5’Ģdł5aÕҾż ū»”Üó!M—D£j.wįŲÉ.rļŹ(%œ™¼µbO Œ«oD°Ēį(ü>śŹFÉī÷īŁŸāōŠŻĘĪR`ÜŠfWa†żrHĆu+»ē3ż¦±£Ć]¶*±BYĶnóE¾1iĒøŸjĄäśŃöĻNx\ŽnøĀĶ8=˜4=¾¤÷7EŽ,ŚŽ(FāLšäĆć…8(£"ÉRe= ć|‘­9Kü<“ﳤ¢lL?¤wdš!h6ŲĀR%6R0ÉPEĘjó]ö†3beö(ęįc Ōņį…ŗé=]!3¶-9iĒGŠ­Į~$„ÕÄčŖÉ{“”ł{ē+“ŁĻĒu>/ž %«pėAeųEWō`³j:Q0Ī~!°’Žįt‡ F*mSgōV”Ģ­å/””¢–ÕÆøÆÕ3†ź@D>3%‚óqD÷ÅQy˜NćĒ0Ļ¢ §okTw“ ˜øļ~ZCA_zŻ‚×ŸŽ¼SJœŖÆv–žĪӓa'ŅŠü©Yž4&žž¶ØCA. 5ž‰Yü‡ŽĀīABŚążÖ#)„ÓźŪÄ mÉ;Ķ€%Š W‘°ĒĒtÓų:V®ėŽśt—^Ē*{ģŖ“øw’§}ŸŃ<—š¤~n\įŽ ÄĖÄmŃįz't,!3“5‹Œ­ą•vtMDĮʊUę;\^M}~‘Ś•żełßs™¤|3Š9åS‹rŒ‘č4ńÖ'Žv ©ÆF§āŗ4¢¢®BŽŻŽģšĆ"ł›‹~¾Ņ÷ąūƍĆ9 _WĀńń ”k*ęŚųÓ‹äKFM3š.¾"kŖ(ļ%yŠ}}ą±Zß÷čj1…[ŃÉŖ³ÄĄB¼.Čī8ćšĢ˹É%ĶfCåėķ8žC’š‰m‘8%€ō"žb“‰õ1®Ģu=KA¾›ĄÆŒµfĢ2Œ¢Bžģˆ`ŖÕO'į*ü"ĮšŌž˜‚eNlQćåļŻ’XĶŽŖ^įĖą‹nˈČż7ąxDvNoÉ#Ņ„Rä²ŅśU£ō?ż³‚ĮÓµ3›6»§… •Ķ(ޚĀqքķŻf“ĒóMśxMķtšX7¶ųŗėžēĮŽŁÕrŅMó ®č-Ŗ$t/‡•£AmtFm!†x˜˜’œčžtm0ĄÕŗ{'zĢX£ßšüÕ<+~+™ūŚ;QŒ…“’ĻGÜ.uSjė·üøÖ,Ų=Y—½łEqŖ QüŠrL;Ģ ŁÓ8ķč= Å©:SŁ‘„™z€Ūä`¹ļXԐDV°8XgNj’"敾Wæ¢J‚Q³¾Īo„Øś†Z„„PŲĢŖ^E—yFJxt•€÷½ ėkćõ8)¦ā—°„«U?nX$CFœör„,Ū5‘%¾ėWlœŅ®'@‘µYü¢ 9FĮ1éCē­½äVˆ;šNÉ}Ūq“%^A^ AIžĖ¹ Ū"1ųżŲ†ķ·w%üHü±÷ƒ4żŚ‡PĮ®lN{…TP7±\÷ė©h725¼Z½“©ēYEŻFÖ'ÆfąĄ¦eĮÄa§¤%=’ i¤·ĮUO± Øų·SžæĒę/Ļpt˜(ńuåāDz®ķZ!9N•O1¢æĖ‰ŻōFŹn ¼’%Å%yOXaŌäėB[õ|‚‰IĆž6Sö²ÓwŽ]ŽÓ ģ_—ט½ļ*TUÓH·Z|Óö󮆣Éꊮ¬ć’™~[’å@ʄuEģŲ:ˆš¢ķyYŠŒŒ+šĮNĀvč,cŸV’ąöiŒJŅźrā°FœÅÄA&g'_+ÆvoćÆźśļų喖µ©ĻļmUß9ųŒŻŃO(¼”ī9‹y`)_^a‚¦PŪ•f::;ć„ČÅ~NĘ(ą3a&4 cĶń ”ęĪ" o0Ķ›JÅUT'ØČ]š+ѱ—wņčŠQ)¶zhļOI)÷·§^E—0Ęacæģ„0Å6ĀPgŪ#L3 ęf{ĆÉą”hgO‡ę½ĘįHųn­v„ V ”oŽC…—IųY"’{–&³Š©"H¬4CŖŠOÖL2įjÄ® ‘TC,Hß· 'ąŁ?Ŗr!öł\F9ŽÜY¬čƒ‚š%żį±‹ß‡§>>Šqł>:Kųb±k‘kDbZZōśE Ļp1)ʬѦļ›4A†­UåÉ)¤"ÆÓ˜.R8ķ¼Ał¢t*ĒÖ¹®5‘ÜŃ_¼čš’ĮzÄDSŽ–Ä,s–2`śµ”ę“JŒQš/wė(ĀŁź’' äN”<\”·Lü Ž yĖņ‘Ķ¢kIUśa9ųń$4n2†{˜Ō7:Ę(§ĆŃM!hü3Ć^k”˜č_Ū–õeżgYkāsĆ13žš9€…H:‰ß¬ e©ClO;ŠķĶŚdŠņ—Ķ$‰²|h“£R½¶æb.ͱ.ńt½źUwDuŚd;ü$k’ €rÖƒ1åj^½Œ3©~U±²Ø&ō¤'‹fą¦^ˆĆGM9NAӛą7ŖNūŖik ŸĀ°0¾“ś{^PuåōҰ(.ČkH^Ę g’æ«E—‹ ©•dģ³ā'PĻŽÆ U±ÜTŒ²iś¦Œ ’6>\˜Æp;mdFŹ›3v>kÆį3M=»Ō³Jɛ_ŸĘžˆ©ć™Ō/«T_Hä|%õBOŸ,FT{#›`c„Ćbü²3xūóGńL¬bŒiģ|Nx]źxbLƒAÜ]Ųą"Åb€,#öGLVŪ:j|6ķ./' ģWß°R1Ł ōłĆ]Łó k¾ė&&P/”%‘6ž–}Yš÷<7įŲd ä_;‘nŸhĢEĀøO½™Šä’æŸ3>.y¬|#xXwŃR·6Y v$Ą'T­¹īĀÅŅVŻY`>ЧзœŲ²°ÄøE_仆[5ŸPZär»Ś~8u”öČ–Īž·.H]e ަ¹ž“±ļ‹e)åźģųlń2øD]=‘F ŸKUr45I§£MjŅéĻŃčä˜iäMŠL‰ßļ•®tŹķmĆĖ+§|·š•p¾Ų8»ŹÕŋ€¹?‰# Քæ"Üś’Č'( ‘"Œ¬2š¤AĒŠÄ‘ķ?„ĶļŠ0õ×īs­½śņh§Œżv“ü9C5ļŹmŠÕ[źU„Ó ßo³Œ>ēĀ’GŲ»åķõŗ1+„ž‰L±ü]Ņ”ūÕ·uOɰ1.Q“CŌ‹2ŪØ¾ ś×ōŻT—˜•ž?;žZ šš„£Ī¦^U> »ć‹5cŒ ‡>KBŽŻläµŖ"‡ębā:īĒ ±h{C’¶Ļ_¶cØ 1¼Į¶eü² YĻ@.9źüźź[×SF†rGˆ‘߉9éēī,¦‚‹Ģ¹¶GĘpWI×R U\†2… Cg!ē1d6Ģ[M‰nńż™8Ļ’>šįøRmE¶ß0Ę-ŠZĀ#ö*^lē¶]0ƒ°.ˆÖŃźŃ §kP}«xŸóķß@‘¹¹ļtYČņ"¬düN˜åŹšš˜$YFC@¹­yC“ē/ŅŗÉēEæŽöłÜh‰_Kj;*«Ę/a85dž£°b×GAfæ¦Ųnj“fZN.É×ÄS<³žŠ‘Ķ„Sܔ©ƒ3Ģ<9Ļջ؎p›üņUWßM’‰‘ęhæ˜^P®ĪÆRą‡© ÷9Ī —±eįȊ €I/üāó½Ö,ż[€é‹ÆHe§S‘t+…õåļ-¦‹ffoĒĢvD Ą„ŃdŅ¢Ā? ŒL tõÅā¶ĶĮ UĖE9•ĆFę>}æīćéć×Ŗū\Eń”ÅĆx›A~ƒņ'ā8ĄŅ-d$åķC©Å?‰ŃŹ 7Kw”žM}šÉ·ź»bÖØõŒZ6£+IjŽĀhü9sb[…ŖOn;'Ķ’Ÿ—„’Łw?‡„ž„ŁtO•@\XAc÷Ē3F)Īo+M¼=JčSåūp‘iå°4]* [Č7Sņø—XŽE^`āÆÓ£Yė§h;zµŲuYx¼ Z}Ke†Ÿ÷9°ą0éüćwļÅą‚‘؉M¾ O§ ū:8ĀłR÷W’ę±ĒŌU<¹r8&×` ŠÉKU޲–2-;ÉÅt§[ Œ\āzæd~ØO‹œ3×¹ŒO\ƀä&}ųH£’ö‘yĢ£ZˆK¹ųżn²1zń:Ü’ā;+ī;Į©‘Óa[tkMĻk”mtɼ9Õ.Š?Ą‹Ļį •Ü°%;IP’xYµDĢ5^mVŽÕK‡ ü‹ŽwVīOŒķ&*śrˆfa‘ø>eŗ`Žj˹qqėÉŪZ‰Ē[|Ūčō# f9p¤ń”É $ž{Ół EžÓsGŲ¦#3F“N’°5Č4%„é}\Š“Oä8~ŅCÖnX}ęžkHöńĮØ˜źœŠ1mo#Ŗl÷9ĀßųŌįŲ/aˆe9ėP™ĖłĶv2ŅŲł‚)ßņxĄ@,¶3릃Yhi9Ö ¾=‡ ń‡jŗ©†yŖÄēŽ<ŚJŽ` £·jEeöŲ¹®ŅÅ]ŠC·Øźy×z˜ Ö@|©ŗļĀ,t—Š”ƒĘóč³;ŹDR:yZ[*Żŗ+6Lv]jS$$¹MAųæš…®µ„¦IędIŃ:ÉZąĶ„ļ¦;.H`ŁklY¶Į)ØżR0¬J+J<„ū£hdZĮ¹J¶sØn܍“į5CŪHDĪŁvǁ -1hąš-óŁ#­Ū5’ĮŁ2ŽŻāŪ=éžd‹˜Ģ2÷JTžėķ Z&Œ÷ņœŒiėÕzéŖ[‘pįˆNW£ YÓ’®¼L’š©@8iŽŠ}@`_³bz[[*EhšEŒĀw‹M”ŲaŠZ~p9Ķ[„f$ ÓGy–¦w(‰·j)ąōŁcóPU9=°Y&ošAōUæ¤ā*{µöżśū|ÆčŽŻ&Œč£?F¼ˆAŲŠ9øó˜—Źäm9õÜą’4÷ÜŗÆ#+ųŁ‹C”“ļ\…rWR§Uä4Ӄ9{P©©ØŹ4dŻPtB/B1œĒŗ<’z„E±6ÉVUwįQštIs”ƒ„©K󱍿w„Į“DW*(ŸØĄe–* hY »š}¼Ę§r`cė$ŪR“Š*h D¼h²Mqa]£Ä"Fk.ÉX;Ī–ČŠ¾/ęß5½3šĢd•Ķ”–.˰ū}ķu­&č÷ĪÆĮģ|¼ĮŹĢ¼Ļśåg ‚“čQ†µLA(aWM5€„Ē1ė¤LÜmäl½=31sĀūŽf)Ēc{F4‘ēwe݊é€č\;•+q"šÄp5G’«l[CĆäā"(ŻI"¦A»ėY„3…Š^­Aü8"ĘšhCz¬wųZŹ+šį\Z杆ł]±nyĀ…tźx<į»tм꺪5Ŗż/}5§Ńæćņ„gž ¾ķ\?-Æ5[•ÕDŸ³2CŃ7h[Ł> ÄσÓavϘ¢]­”Ž×ž¼ŪqK“ŹėPN›™Eóäģ|ń¤ņ®į¤u9°¬J޵ „ņ»K’VDŖ=ø<„aYr-ż7{ė5D.Ō>sĶDi6÷W5ćeõ¦`" ņƒBu°ż™s„f3’†"õ“UÓŃŗō‰ĄŸ€™ó“pƒēæ…¶P2ǚ“|#Ī“Ļ #ćŪīĶ}åśD"ł½MĪXö]ŗy£ĮŃa=»ķˆ&³)^ĒčQwéRƒ„*%¤HyĮ=ĄĪ S3x%ҐP©«Nó{4īn’PT¬–†§)Ćō—¶ĢN€iŅŁ[FJęųė¦4šī†DŅ`SœōՍeĆŅõF½#Ń*£ Z݆%m©Ó£[īmØX$1KßåēŒAė  Jtvt“7:¼žįĢuž5ĆŚr‰ÖrųŠ=mk Ā5Ž× т„ļ)źęØ!ōūš¼EģB4ŽÖIh½“ķčn§UTnī\&DČ6_Į¦°Ż ļÜĒ–{4‰‚ Æ•J7‡å™““SėnŅ”Į‘Ӎœßīm{]Qŗ8Šį“ŸųEž¦™HÜF“ģ²ēĮm;ēŚāB-J¬°·čH4_įåž!@ĻYˆżų‡¼=¼×HEäŅ 'ŏ”R¦±…?»ßn}śŹĘåŚ /±AńŖ’fC}€_»‰²2ŻŒzÖ~ņĶō X0uØč"͈yŽ<³¦ŪJ›yV“K³2 ś›™@Ja˜.`ōQożķD N‚ÉC>g™‰ā®ļ /R2öāē®Y#Ā!ÉxVŗzX'`ź:=™Ü&N2ūN}–‰U_/'ŁŻČ 36i›īö–ģąP2k0C^Äq ®…»~6Rљz€®)^-‹utß¶čĒ­˜G5ŚH_=4»«Ŗn\ł[ ¬iDųk“÷ŸZі'Å_öBU¹˜Ę4ČOŅtå+*™ŸéԌ½%–“+>ų¢Z4®:ĖZÜ)SÖńgW™øˆ¬™ĖäŽZŻ GĒ|Uā°GŁ«9Ņ>Ģb0/ė=ń×ōģVšĶp…öäęŸĘ`ŽJ6žüų¾Ā§#Œtć5Čsõ×ĆF«M„)[ƒŻĆßO@ 5”ÅøY¬ƒnßtūÕ Ä±±nųŽEõ=³lv/ØŹ5ŗł#g“žJgkÕxŻzø; —Ćüüš•U!Ö¤!ŽŃmņ>‹UīÕmš±ia5!+ŚĀ£ģAāŠ)hH߆žp‘ų–1N0m±,®Ėjx§u¾śh2ż*Ųž{p÷‡ÖŲT ćT÷Œ[R/l¶U€tŗ{Y6Ź’ęŽfĖG„§å榯³DÉ©ÓWTpæ&\–‰‰wŪg›oD­ęDƒ{y?Ģé¹L~3ś31{Čśh˜‡FYr’;š&’rˆĢ6ā7ÜTžą«QxįcŪC½˜²:•ī͟„z. [,™p<vøcÅ«DČŻõŃā!9²¤ˆ­½2ņ`Q<~’+™‡.’B¶ąa;m ö1 øļ×5Źūˆ<Š3ĶūśUyƒP¤>¢tcf?7…•ŸÕ ļĘv•ö5ä8‰šÖÕ'B«Ū^ėźoŹ×]œ®‘Pou¬!ĮPhØ.‡P•āb9Ćé׏øę»ģgt ¶uĢõauÓdhd+>̃"£GµŸ€ó~ ÅD[Sęµ¼[,ö¤Õ®ˆ^ƒĒxKxüB8²T0E·\™>IļŹ(m/øĖS\A‡Š]\nā}gę(]Ikź,Jf*IH¼ ż sb®ü¢ž¶h‘ĻŽ–ʁÉSšÉ¦ Ø/SgkŪļ“zeĢ/oO‚I-Y•Ē™ 鮺æCUūŠrš! såÕ|l5¦ĶŃĀH’ģ½ ć’Ō‡mNMZKłƒ-:»ę cmęä䶆ҹ¤éČ+Z—׏9ø|]Ōł«ņ9ßĒ'Ą?壨±*2,–8kņ«ŻX*w@ŸćEč€UódĘø)½N}ą¦|뾦w\圍R¹ÜĖ€ļĘĆ8Wźw}™ą™ š\ļUš”t˜ḧĮ¶źżœĢµéQ“béō/^8¹ąĆ|4k”Ē"×ĆĘFČłæBšń\ĻńčŽ^O²ŒźeeœxIŠÓ¹,{T|ĶDn‘N¢~øŽČĒKg’€Ģ«Ž#Ķf¤`Ļ«T6(Åćķ<ĄiUü`½žUPFßāJøS²ß÷š#ˆÓešń e:ä4Ęó»–spjS±MÓ«u©iqfÖė¹92 ō{d°GEp½J’Źżć`7|–YēϽåIÅ;K/`āS¬ķUźø›eŒķkŌZcĪUÓʀwżMJ!%@*.Žd½%ž±śŖŹ/MѬ€›Ó^^OŚ.īęYO¦X•ÕL÷ź[Šą{„¼I¤ž1EŒŅ³ŽjčƒgĖēx÷AC`rKˆ›Ą|ĪŗFå[cĒ œ²”ģėā?‚Fµ§įfČŅõs©‘p¦5ŠøŪįxp)ž€ŅŸŗ¾"tgÆyžEįµ\źŖ³‡÷ŪĪ-‰”?ļ¼>ĖŹż²P:}lĀ!Ć]/’ē|žĘö¶8MgĒ'ķj÷$ˆ¾œ4Õ:”B,I#;ÖÉ3X4—£ćēÄtĄ0£Å,ĄŖÄÆQŻõy–O ÷¾č ÅŅŹī%^ 6Ö’—#) ×±ž;ŗvü# ½ŲßG¬"-A]µ1źm_ūXxÓO‘—Œ^Uć·LŪ¬ÄMŠgҒɱ\§ā’ŽzŽc$Ćé„ö:yUł«ÕŠ„D¹ŗˆ)žĪ1¹“éĆĖ%ĪȱpōqĶŅ ŽWš” 5&–ĆŹėįŪH’ŗžiL°.č/ēž"V  ż¦q3K fĻ‰ŃŸ9XŌbøØhü=O»ßײY‚¦uń—*)NĪÖøÆF‡Ņ"æqķ\øķćÓ÷Ś`a¢eĖ[h–="ūņTīĢwö³;]-Ł£6b88±Ūūƒ!ZƒaõĶJeć2S Åż’#™`žģćčŃC›śÜ1² äüÅ£R«½©+™:uH‚æWv¶ŗEĮ> š %^ćkĘL–”sv ø ™aā>ÆµŽŸruӊĻõm蓟'ŖĘ€C—¹˜U U2‡•5ĶU˜n æŪóéo’z“va!-ü·(Œcq‰0ŗĀݾæĶuŁā­īwł~ą{–hŻ®++p,m—¦˜‘»WēłB52»å­ś˜|}}­“¹r<ķ³]Õ'G÷ĄĘv\̐E©u<°<ؙė€® CÄöŃ˜IŖ©T?Wč§p§‰|pwi@9+1—dküĢ\QSPÄŁZÜ֕KĆnjt“c„õmŗ9äS²IĢŠ¦®‹‹"¢åŽ»ÆŠ1ŗ[é~J &ÄrZR*ŚvaöĒĪ1(ĒMO|¢ÕŁg¶'äo$ScģŲĖža¢UW`q˜Ķ^Ų³©¹:®-jĶ~Ia~*«—Ø’Žī›ĄŲš2HŁkÕl„poA­B5aĘTŠę&FōŒĒ+B˜„/” %ū7¬ĢŲDģŠÜŪ¢U‡¤č¾rDłu½Żpéuī©“2Å€¶·VTƽ™Ķ~r:®āÆlŹM j. LJŌ»&)ę–`¦å+ØÄĶ–pĄ·”ŪüN0ąĆ‹ŽÅłvUlƒüµ’–čÅg°Énõģ…żSū¬“2Ø8žææÅ\R±c$Į©Ź`.ÅSøfĢéŌr(pŲņĄjéGÅ_ĖŹ=#åQāfŅ_]4¶°N—ĖEŁ’¤®aµĢ ĆÆ Ü/Āᆉź}?Ŗŗ ēs¤)#Žl•MŽ®ĘL³ĪEĒÆ?’Pj½xBEҤ˜ÄcduŻ9D­ü:ķыŸz°$ŗMĪC×r›t5>& BĪDŅä ŻQķÄńG-÷5ŻŻ3 R˜5, ““Mʙ1²7yå{XPv½æą6™wŒÖdj\)Īwų“ńģœd¹Ģfü<„ļĘ\Z“RF6šż”©įd ķÅß.’}Ķ\ųŲāŲĘŁUXÖØej† 9iĀ_HzGÓŹįEę}ŚÄE7VĪQ|y•”_3ĆÉ“&°Åa±jQu…z;(0łžÅz2ÜbŪ”įõˆ/’Ś£WXö%ČŁÉ]«iwxI“!źQVVÆ0±Ę˜†kŠxįaĶéŸÅ§SäĢ„‹Rįöų×Ä›†É%lG bŸŲCHפ\—ŹīŪ”ķaĪĀO¼=ųöw=`…ķjC¤ µp}„cП±ŒH$ü;^~ÅM?…¾°ņD¼Ąü“½„Ē@jĄ’Ÿ~Všö{5OŸyäŅ H$ģa8d-łG˜ų“Š$£ńu…—Ca)8^ugž×:L·‘H o-łań­ö¶©żåŽ9°¾ø”†wüļ<¹„Ž›E§~\¾¤šöĒ‚6”Ey-īß=Bbæ"ķ Pyבˆ­Š±ÖÄ mѕ+ŸųEHæź«±ŽßĖĻŁlŪv–Ś8pę!4[‚xҐåc(N›JEæ«õĀ!\‘rĮ^”žń”Ū>†ćQnWÆ51ā“$ؙ89JĻ«ŖÅl-Ä8kše“×˜ŚŁ%šł­ ²’Ó8wé[ėļŽāšžuÅF¾jóō¦K žŅHNhśö±ÓF-ĒÕQ”KYŠIÄļw'õ¼:åQė½m¶U}iZbk 9ön’żęY!.ČšĻ5|F¬-Ä c»„ļ£Öi]vĀįčAÉaV¤õ³b”t2ö@ā…ց¾į’żsBFFĀĄkšåG•4Ö7`F­Ļ-a/ł™ĒøPĘ»¼&so:ĖĘę²} Ģd [~Po=ŸŃ ƒĀŽ9É"Ÿ04•pŅÄwzõÄ·üyŌcś›ų'?Æ’"®‘Ķē#4Ž¢ģüļggR˜Q›Ģ8zb|čśł#TŲNč6[Ć7[\?åó± N]¼į_Ń8{k&ų5ü‡įĶŌĘė1¤,’µb”"I8Ļa»ŅY)M1ByŚe“'¼[mÅ Ve«Mw–l– š’‘QbfOĄhž³@ĢÅTŽxüh8ēŲėF•»ī2ŠÓ¬Äjö`$ŁŗH™-“=ühʆ9biAnkō i=ė’÷`žIāĒh2½ź³N÷Ŗcļiqę;‡¦oū¾2å}”*²ūž›ÜaĪėz˜‰ŽśQ6}MwTQå|Cä˜ģ8ƒŽo¼r=hS_׳’<€¢‡Ū1/[qĻ~»Æƒ7Q4X¶6™Łė  ģmQ'~ØåĮ ü’š“ÆŌļś¹é˜Āc¬ø(ŻfFFB.ĻLģk¼Lą<=Łf›µŲ'"u$_ŽUüķv³2E3„"4Õł#čĶ0^źó6ÆP#vUƅŌ¼8»%†Xk͠ߣ?E-±H”ż0ą}”Įˆ,öœ żN/@ ¦•Ņbę ĻHŪ`=PyńVø6ī‘÷wź˜3ü¼ēÕŠ©„ĆFz„ŪHt=*QPĒzó•.*‚B`SWœ•”m °ź·÷\ Ė®²™ Ė*傶ެ‘œuŸŠœQ)åўō£%Ī8Īw‚JX{éėŹmʼnŠ%IČ vĢ:®0Ÿģ½ö čDÕ&äT}é<‰1K‡#ŸS#Ųķ’üĶĀ7”m?KʦÅNČ`ŻĆAcĀ,PoU.¼{½ {„’ó„ż“¾+øƒ-".ŌšcIRšß —ļȚeW‹4AG#npų¼‰›/ĻPā³zóøJŻßƒÕ{»Ā¬ÆŪk“ˆ²\`øŗĀøĀīXį"„ķĢēĶb‰`4—2{Ēć¾xe®²ułˆŠ …ަL~īĢjH˜ä7½']æ;œC[¤ĻT˜ē­Ņx½ŖĪ¦ŗ„/f57yš#ē½Hę Yöᚿ‹ŽÖĻ qйmÕŒ9 ×ę篔ž‰P:}Ų€Q0“⠐]Ÿz~Ś~š+Ņņg=Q˜ćYō›ėæ=ץu„㢸ÅõJØńŽÆćGO ź¤ ²l—!–=ńDNŽå 8™ĢøļĖšmī“\ńJY'K‰“m©yą;H³¬jH!¾ÆŌLjKįåĪ#{EŅŚ3‹ °>Ÿõ~…yœķ~lļĄ>„ ĀLagxaŻĖ͊p{kzRŽų‘B×&fQ`“š6̌dN=ŃV–4y꟒ŲuQl8^ńaźIҳB†W]:gią:=÷I¼Ó,ś¬Œ…’¼ÉĪś0²šN˜”ī(7£š ÕŠāićyÓåe0k›ÆxRÆŃ«&³))š&“Ķ!”ģ„-zĄHW›mÅ|Kó’TéÄÆTB ł&{NJ½“_Q7żjXč8‰\‡†%ōWYƒõ¼Aši-q*)R¶M»ÄßÖ§ŃĘ0Ÿ€7ņōBŪŽŃqc8©fŠŠLŠrq£cTfą„žõ†F&'ä©Ī·VNØ]“—ØlsænEkDt@X„¬#iSƁpŲ²=8dó’ĆŅŽ„^žEIčó}0Z°’ŽÆš&ƒ©*höI_äf\ž!$÷!ąÆ,õņžx5ŠRķpŠ *Hūż(¶«“…*«wō>HO7ĄŠ{3eźųZFĀ‹T°&I_£ŠQĢ„Ø€żhĄƒc¾‰elę Ź'¼>!tk²Å>UwyÖŻĻ†jĮyMŒ~·ņčĶģh§ oN`s¼Bė6M’ģÆ„\=É|-¢xC“†ē»“ń1¤Vā1‡üĻ¢žÕ©ļhw Ź)zō1ģ!ˆ@žŒńGk‰A”ŲļĘf©mU¶p.LBŒOØ’­"Źž¾˜5ĪD:!A ē÷\dpž¾*šBC’tÄĮÕO¢(ō/“ )±[‘yŽgvčbKX(ę «”äUtŸĘ7IĆM'²ĒØÉÜśų±ėó›ń%Q0„śgč÷ßFiŠƒßHé Ę‚’”6©čüÖ\õžµ¢Š ¶Ÿ! [É1V`y™™gęēķy ń±āŒöU±ĄŽ±E/n.ż‘R¼s_'mŒQĮ;|ĄCĘśG8kķķhuŒ½čŲēƒSĦ»m„.ūīoń“T`8³œ”éļž.C!µ«œr‚”tĀKŌŪ3LfŖ°”Ž5ŖuSÖö›¦(Ž c‹å&žģ…:ż ,j·Y…Ó×pmé6& ¤š“AšŪ’ō|ĆRź.[K…‘{6*ÅĖŠrŠxhÜü7žV4¬c~x¼4&^Ųp9äü­&W/:Nūع‹ žBfä>‡„DQd÷§ˆ:zŽQXÕ5ł,«Ą4:hŗē£VäŠį¬‹?}—f+)č žżö…•ĀߖdĢŁp³ŌBĒ—Ūa(α)"ĪOR̳hA”¦¼˜ĖĻó)ĻɾŅżLڽāĮŽą'Ҋ$“4‹yUĄ…ĪZGEpf%ƒ“ē¶äõüÕÉphĮ[Ōąu §¾#¾²¦Ū܂ śĒA;Fø|“ņ‹UśėX]č {ÆFZūQóPb.ņ hš…ęį|f&Ū`.± Õ4n½¤Jpł”S¤‚qč €«lWünŒX® WS£­?ņ.vkgdżŻd©i3dįžō·9˜Yæéŗö Ć8ՃģA&Ŗo ÆĮ¬ÆŽ±9¾™”9Ķ b±Ćś^b—5ķÜqŸqjykŠšk6Å=µć#QΧōõ(bĖ’ü=Š„ zų­hĒE_õöf𤾼,h~-Ŗ”šZō]ĶŠčueē.Ęņ„>G?R­mÅDv F*!²ŽC^²Ņaµ³ń®#K^VI'·ĶJX;ARGÄŁ9£å„š—ż\sŖ®78éB*™fMVFšˆd)Ī1ĢÅ¢råóĻN>īÓģz¼ŒlgÉu(ā&uE3¢“@Vō ūHšśHčvp(>Y|¢x^Ž—Ģ'“ž\SE-5ž6|żTĶ„É"eM‘ē”ć{½į˜Ży~>gfł™S5µT¾·E¦wV”¾žyĄs=ēEVfĆY›Š$ ®ĒÜą~^×ć¶7)š¬2[PõŽU*ī%¾ Üqž"Ń©¢$Ö“{ˆõ‘­'õ‘į]aø-Ÿ8r>ܲ%ŌLŚ&žqh °g^å§·ĒĮ~’ Dj ŽBõŒŹŁ)Ä(³XŚI–öŌ4åLčFć>Šx­•ä—K-Ū-ż2ķĖ?3^0Ś«ˆęL³gršĒ'`>KÖBž8ĶML妑g±ŪHD“~ī¦4„…ÕTķˆČjRlJ¾fŹІҽķķcĀŪ¹äĪKr˜˜A/±Œ YÆ»ŃzÕ‚Žį-huu|Ė—Ė½ŃŽėōŅäåŌ)cāžÜü§‹«)ęĻK¼ĆE¤3šąWåTĘ%ޱRŚĀøozYњŖ¦ä¶@ĪS„’=Š÷'HĻšvnÅ}Ū`oLĘ9ßĮK]ČiĒģöøĖēEcՃšŚPé3ƙžžažēĶ*²¦żIĒš?ł”§š˜ŖšŽ~¤Ŗź‘E_x­b$¢ßo CÄ<…ŗŸx9ž¶Ūtz;ævēz̹$Ūpź$JŠōšßłuqųžo†¼ź‹³ĶąuNŗõ” ņ'  ÄBĖPÄź/_ó‚0xÄ¶ĪżžzŲŠ4‚wŲhŽL\‹’Q, =&žX$‘¼żūłæ—t;^њ™= õtŠš õ‡"T_é•m!σŅŲ>õ&"!%}š"ę×?CćņP¼0żżż*¶Mź¶~‚- ŠėŅéO½×‚‰°XĘP™5d„ģ×öušŃŪž²}ū›RY•©Ż–K–żYqhŌīŅAp[‰TöäĆąķØ a ~äPš&ś-æ(Rf™ŠįxäŽĖ÷ 8xž–’PKhl5p—ӈÜTŽimages/002_th.jpgUT PŖVE®»Xux č脽gTQ.š4éE@Ŗ$B‚ ¢Té=”‡Š«"`hŅ;R¤„@zK ōŽ‹ t”ŽC“"‚4Aąśsī9wŻū­u÷Z3ócfĶžŁ{æOygfĻĶÜĶ*€¦Uż+BDBĄĶ7«ŖćK@[€’Qne ))) ŁæŁ-ņŪä’ 55åm:FF:&VĪ;LĢ, l|l\\<<ģWU‡Ģõič²xWķry¾Éµæ(YŽ9d=/"%FČ˜–ŖžŲņć—^æ‰üŠÕ”µŃ導¼¾njlīS’HNāwÆÄ$ט« ~ų«Ī†&–Ū`QdŪóY k–ü&Æūę7įh’^ÆøÜ÷Ļfoŗ%ķ›_Õ°3ß$+S_TTĶ q†ņ\ż8›ü¼Ü“Æ“3l ÉIjš¼ĪŗŲ{ŚB'†ųš^iŃćoČŖ{Ć£bf8ŗ¼ ¢! å„żå7@”Z³óŁ»g'āĆă)ÕbIvpĀē÷.0La™ęF'ŗ ÕÕuÕg²|Ś®óōˆžŠ'¹ 7Š F]‡¢»Æŗe}9.ŌĖ–6½ķ^LbTŻŗ (‹ķäłsäu~(·$02ŽMØ/Įپ¼ÅØ'Żx€q ædGŚļ_t.ÆS²zÉ8C?ńµóoõäsféń TF©K’Ų¶ķ ³–!ī5šy0Ļ󁣅YĄÖ^ ƒVO²ĶÆ«ŽŗŲ9ÜWgķQQ‡QĒ‘䊱 st„¤ør&W×Ļ+eKsqźīeܰ$ŗ’“GūĘ’žˆVņ–ä0Ō-Ś¢l D õžzō Młoē‹ƒƞÓn]ąk\sĮ›0é>ѹׂÜgö ε7€Ļ©W/žŠ›‰r;q¾›Jypi#‰9‚ÓŽ"ā&ęÉ®xæŠæÆš©„VęGŁ»ņéŽkųcÜ϶»>?juteļrO™®U/<š„ń€sYYĪĒ‘^c#Šō2[l$Vȋϋ³ĆƟ8/ą}õsŽdĢl‘„ŽĮRå?܍zōäh°į!P~Õ’œŠ©ĀŁėģ®›w#3AȜÕ\9ŲģŹ& ­Č÷˜É·×ē“įĶEŠ“ JöŪ›žzvło ¹\1ģzlkRˆ˜zŠ5C©(Ń?śÖoCÆŽĢ,-ą‡ĶÄŲå'XķZį)ōīI3>£+Ē“:æ§GACłVƒC:i“įF™”,CÜmÆ?Ņ&'ž-žŻYØĒ?žąēō639R1•@u^˜”ūŹ«€.Ņ”J60xEō8žŪ`ŌĢčļŒyj£y`’ZćJrDq÷#ļõg«ƒ‹ŃVŪ÷ ކŸ÷3ˆMó…åé² ’ŗFnit³ šśŹīŹP$Š=ó×v!-ęt]DķsšĮ<ˆ©t‚/æ­[ƒOJ|*•Ö›šŽ‹¹”šK1;Õ¾¤WQ”W“ٶ3_Ī‘ML×_o;½·ægf`&Ö=ä¾fȉžä’dŖW8WpOŽĢ1ća/‹#ś)O’`učøūžń$ŒU™gÖV“a%wŅÕ줄ø©[©7‚×x²øĪŽ]“VĪō˜÷O„–¢²~żõ7ķł{¾;źgØp‚“+„ŸfUƊp­„bRšĖĮŚł’Ž*%>×Y,`Y,—`Ņ®œē-ŁŌé.„}¾aµņ œ9ÕCīFw0?}2H·Ü+»Žā‹ø°³ń·g]Źx%¶üõ–ŲMe×?Ÿ>ŽćdžQ<ą¢;ē?HÜ»<Ÿm•u×®ˆÜŪX‡łāc0]¾¢½SĄ 9æ@eūöw !%ó÷*ž"kīHäOHå4ī½³:Mzaōō+Šńē»1lįE³?$IżyĮ_dÕ+5(=£/]A}×C––‚ņG4ŗĖŠ-¶éź…æÖĖėi¶x—ų­·ōaõOÆ(āę;ŒYt;#”är:^O,WŽĻDūqJ-ßĘīĶdąD—4*WĪĮŽ:ĢDšv<ĄėgŅĻ&żO-=„…žŹ‹:mļI›ę%’ķåS$o¬s&ĻŚš’#_±v8-6Y¦=2OŹ#śt¼•€­ Šņ@AŅ"(ČĒōä±ī¦©ż—½åÉĪū†éOl…ķÅ  Z˜8&Ē®ųƒÉ†Ā@ą—ßō ųÉqt†£ØcjŗĘū}u;ĀŠwżn0÷lŽET®Ōlt{—n,—K޼/o‰P¾0­€¼ķ»Vł¹‡mbŚ4{Ŗ†āĀ Š%ÓVęŽ#IœaIø0%eį,žäž,6k ĻÖsŗt$#'‰Óõ`&¾®Zš>;Œˆ‹EP0.ŽN@Ė<™–4sāõ…0Ń­ÖŲ”x6Ä@[žC½•¶Hžmō$ī$Ū1ƒ$(īGć†Ę4eó6äķ ×_ØQ5ŁkĄäŠUgYæpg×ųóMå×E=† śwĻė£ŠĶC0Ę;ĆKÜĢ•*ōŗ+’»ÜĮÆ^Ŗ™ØYĆō÷;g©H RHPꁤ¶ü}܎ŽC Bś.žīÅw•0Ēä/S_’*Ń)XP@Ķ…Ž ³q{;ņµŠA.&*Ęāī*Ńņł“Į£äśĖÆo%’C¢Uh?^÷Ńąͱńؘ×PĶŪĆńƒ &‚L‹ ‘tŗńl[ą!ē^E¹Š­ūŗ5sVŸė&™åÖ„”’ā$–g;LØ+s}ķķ²×öCiŪ飣łŌ óń=%$ ŽĢ=GĪuƒæFKėE»H-»ė÷÷åBŠh§łėßzµ[/ĀßQww12†yų”‘ńžź& MdŠžNdū!§×–¾>œWł^ŲĮ“ąäB!CŸ—‡åŽ^«dņŹŲŽļĖ·PmŐ³F»Hö4’½jŹ8]T‚ō^'&‘¢ßü!aņ1–›É\šÜų½P\#9¢NtÓ<ŚĆ c€+ł4FŲ ‘~ć§{*}=Ę-v·Š‘Ė‘4’ˆ£eå”ÜD*6R|"9rµ˜”»ŗqŪÅžĖx”¼q/\¶T&l¦`Ø_Ø’T[rŲå'O’;…µ#IŚHš%tO±rʘ 6*65[Ō\!åÆŁĆ0ßIŹQT± Ū2»3‘0‚|÷Ż4„·b…’\bś63ŸJ iąĢcn.ØēJ-»IīīķjψµoŠN$Io“Lł49­?`>Ö,ÕX{³ė/y”“Œ§ Ę·ļā½N×›- Š„ÜĻēÅ Ü||–$3Jo&Ѭ½+^p„”‘ć÷ ¤Õ¤VżŻµIķMb =Ž“++X-“xbŻ‚²āļ¹ŁOū“)c ³RęœQ7ėZĶó×geeūTš+}µPõ}xĒ·…ρ:`T‚G”xdjėBć²½˜lĖ~Wfē5TRå6¾üZTæ¾£œõ)-ŽÅįČMgƒ¦u/ɉwæöĶt[fś”‹Ÿ*~€‚äÖG$ŻäŗˆqĮEX‰Ŗ£"ē•ZĘüźg¢ī«·’‚i*xß(6Ö¹ÕÕ tµŪīŗķ3k†ŒÉDcu|ß;<žäaz hŸo)«‚·ß–„®ėŽs>rčY¼{®d:ßÓmX9 xćü¤¦ Ż’„_‚PŸUŊR˜R|c鵗įĻ&ßäó7ŪæåG¦»¢Žõq/=±ĒsI@OŁOGPņwO£ŽWŗˆ~J½[ĄGłĆö“% 4ūXröé„y\mīĪ&š‡[>ó|óŗy÷pœ¬~’6m‹9’0~׎č2’eė:Ć\~\óS!ŗÉĖ7mb\‰µ1īk‡ĀAĄ?gZ€Xų’&X?‡JÉrr†Ē%|)›TĶolbŽĪöA¤1žÄ«S…'ŽŗėžZŠŅ’Š„$ĄeÆšā‰Åüמ÷ !aŲTelø_ń˜ČƒApµ8ĆJćt,!9++)īT¬ĘūŁäžHdĶÄO’S Y擯¼¹˜š ąBzˆƒ£>bŽćA]&'$ą—~Ļm‰ėTš¼©hśź”v Ę}įa×ÉxčżĶE#˜?~ !³‘F:…},óŌLXĆ–Ģd9{+)s5²V9IōrÆ)Ä¢i5ÖPźOĘŠĘ_ĄŸĻ]ē<č‘)fĘ|Ī-š)q÷‹†=NØY/wÆTZÖKQč,­įÓpc3ēšj–ķ¹tƒõĮWó­½Słx)—ęć±ļ&ā@G±4=fÓrš¦ō;īČ rČ0’Cš÷~ŚBĒ{/S9hŠhčāš’y…+7€Ź į’’5²~(Nų*\¬—v× fy;’dƒįŒć»1¾‘!ūŪĶ\Čå™ēēöķqĒ/Ķ- ÅF1DŸö Ū[nžņ !šmbÉ­»$Ų+¹¼7Ķ—r“ ¹śąĄ”UÄ WӌkTó'óW¹¹yEUrķ­ Č IŽź;”LŻ—¤Ņt©ŽaFtB÷Č(ŻŠł‰dm„›:ܖöŽøżųGÆ"rÄLPäwĘF[„ł ģD])L¹ÕülŅylÆäaĀSE͟Ż}ĄXœõ°µ#ĘĪC&ÖŌ“ūŖHlė®w6c®Ŗƒ*f˜źł#6Ÿ‘¹Ąøéą_Č Z Ń9ŻŅJ0\»GĮ ”,µ&i½N¼»W&Øųņņp«Ķ¾Ž“ģ­ F~öP8Ŗ›å«ÄŅ£šŚłØź#}.ofī󊱙ņ’ђ‡ŁŒ~$|ĪdOœ Ռ— ©ĄSC^ #«į“˜,rØfG<~šŠĻ»ė{ęÕĄC3u±ė’Äē\ ź·×”OPFu“Õėœ‹˜ øģénę'%f™Ńå'ÄOŸŠDe§h†K½hŸE«Ä¢3iųˆ,±”arŸŠĢX4a¤Ņ‰ååŲ²p] ŪĢF+čå½õG›śĘj86iŅ= ?ę'ż9Ī”šé ­/E±ˆ„Ń•¶WEō4n)¤(uˆśŪźR³š§ä7¼}Ģ ą×Ožkb1‰ńJč¾ę“[ė– lŪīĀ}•T¾Ü S—‘\×A<«;'KŅ'9±Ó^Ū»•`%»ž*ĶJ%xŠž)ņXśŠx’øņ²VVf^G¦¶ŹIņA`±Įy€ą¢ņ„’–Öl™Ż?rbŠ22:(o~ü.čÆ`›öGzx& æ·éą$˜„l w)-€PżłHćdāĶ2*’é@٧Ƽsf?ģ=‹[ņŠå,ŃŠ{ńś„l4S<a¬zļ@J“,ź÷:ŌĶŚKČżšĮå̘1’6&,M;œ×w#=–DŃś$!pF/ō TQ_Ōī ¬K„)CݬłŒĆ{BŚĮœ†ŚöõnŖģ7Ę»7Eöž C®8 Y)kZ7/ŠCöĮśš’Ļ·|7å³»ÓԃoL&Rõ¢,6»E 3ąv6! ‰¤ÅæKy¦ÄT3öĻ-Ó@Ń«-¦0ōµ“ĻA ‹P™ŽNÆ+ł¤ŹŲ½§ą6s'ƒ%™ę©Wńą®>ūX×½¹x]oNćóėµēś ,-ū ±,į®ā©Gŗ‹Äį‰ū ĄXśHŖœÅųX:ć÷ˆŪ‘°ŻSLDXd#yÅ»E"½]\Ō,Xü“+‰«A2Æō ½c÷pĢÅõ¼~’†­ėKā›P_|‘ī8,ųF "FšĮαe;@;»“µ`öIµ+«6Ź·fH&a³H¹#æ'‹Ńc‰ iäōŲ ĪfüsH7,Ļų& rJ½WjR²š”n®9/ß|wÕ ­°Ģ’“łż3Äó«^ĀVPż=øę°2~c ł¤4šėßEšĖį]÷‡ž€K#JīŽS½šNzJļńĀ­ ±:šlŠRĘżLĄĄü_¬ķ—üśy9‚ē ŅOhüRé67Ün ›ØĘ†h˜ÅpĆóÉĶĢm;L&\b#Ģ ÜVU‹tƒÄfźP))PĮ>~ {ōż§›å²½ ŽßżŽ3?YŅ00()”Y GĮ˜~™Čљņws1(y+5~Ć ÖUrd;ōŽK‚?nĪÕcŁvŲ€łŖZå•@ī“ņ”ŚÅœ“„Xż¦¢Ü ¢Š  …ACϽ'$„Ń„ń Œ¼6OʑfpgÅ;"ķ¹J£š…"ØzPéɒŠF½†šće˜]äRﱆ›g‚7ī®ž ©„_ć~”g怿Ä(½*™›“½Ü |é'š"5ƒ³J9Vr]y*VŖ¼£.’i0“–:§(%Šnćō«)PüõWJšł¤badKvŗSWÅ&’Ó¶īō/Ɠēt¤ķSéLWŽCšcyBt7Oń>%Gģņ%MC“fm…‰Ž}ń°w8ĆLÜõ §aā_…ķ•W¤Äiš{";„_Ņ0YųÕ ,=Ńk0’æŁĻo¦ęfŽG’Vģõ"•Ai½dß[0|Ž\Ą‰ ɍņģĪ8”ffˆOL”ū›EŽZIęą}æąSĖFg¦ ūY¢RD?ņ2XąøC‡Ó¹Pڧ¢#Ėó]sB`™ŌZų–:„}°ōN *²é„ĮJiR'9å6½²ćæĪ…ŲržyäŅlYUżöč +ŪÅ[)™°õĪļ¬:E-Ćāˆß$‹G6•ŠÆ9šZō¶Jš­°KyĄĢ*](x}†ŠÖ=<'ļ§4¦"¹źJŠż%ų¼f4éō ó øė¦qÉØä%öŸ Čw45į¬t—‚r­r×m&UUü悬ū㋪ņõ,Žƒķ»Ł‹w fśG«Ė!¹Ķ%@^¾z-Ę~¢čd’ZÆż1 _Ńö@2“ˆQ|ķÄå‘ń2 ……Eó "V'×ŪwŹÓ^éEa£ÉD­ęįš‰J‰m=tѬƒłĘ­ö"ÄŻŲ%Dϰgm*˃ö&Ę sŠk³[ŌąõĒ0 ø?€Ńų±Qч÷¹’ŚöēŸž–Śj B5÷Aešˆ[ž;|‡kDĻ„1yõ‹z E…× ƒ]ˆµ ™ &Åų:(§Ų-9›ōĄ"ī5;j½E¤Ōń­}“ ói^sKz7U?ĪJ<ąZ4gßa¬i<1y”čaŸ/@‘…BŖ¤XpUL÷Ąfždxoƕ«ķ#R¶«ą~•“‘ķŪ§½JPJŽiņÕ `’_OxØü ·Įż™ÜJ“špė¼y.EY,†3y}^°åäĻĒs= x¹פünfŖ+ łŹ B½yļ»åwy­†;•Õ p! –vō€ķ3É֚ī]I]”déH ¶ 1vœUė(?rŽ÷°įöŠ÷#ĄAļŽē±X†3SŖµ48˜4„eœ+.ŗŽö?a lbadž¢÷I·šYóėĆŅH‚ž8¦æł‘†.ōĄ?!»m¹œ0¦U*Å+G²ŅõÖ¦†"kå 5xlgͶæĒs|?“y×Ō侑^N¦R*³Ž”å;]„Iņ§YˆV”Žą…‡¼\Ą¶½y£)*KŁ‹Eɱ] ‹)Ću‰Ņ³÷^›%ģ ƒ|”B<ƇI!bć9ļ6Ÿ9¾¾š¢ņ£bā„§Ō¤ / ā–[å‚Õ;É6{šmv;ŌjrqŲ+ Ɣ‰żdi`#Č(‰ń¾XŚqeWø|]ļ˜ęjh—xŃ”ō°܊ĆJļ~iÅDÜ.&eFo'U„zė9–![ŌÅ*˜ތˆ§VĘ s|Žą?ÓLŪéķb—#…ęå.˜’™ަū9Ńū½ –¢0ŖĄjŽ„ÆX©Ø|Šś3vQˆqøč~›’ęŻ|ܛ½>Ļyė˜>?åĄn­B_ É×@™ņ“żĄż–ŒJįvR81æ²½N™&Dź4‹Ń„qųż”Ėō”K{ ~ŁxmXåc<䛦żĒˆü0Õ.)£Il+šĻōh[½ß¦ÕhŅ5O›ė—¹ Ģ`ō§ˆ»R'5łšŸ¬Ķń³ĒćĘӟūCß»„«āĒ*Ł\šŃĆ4ßaFaÕT­ēI Ѽį¹}ā’‡coū;¦›ĻMĀwā?;fŹČ,pJŃ6s'Gą pœt#j0µ2įoćoöŸīNŹę— >”¼Ż¹ćrOĻlmݦģOTȑ[ņššRrŃ9óżļ]ifO[\5ń=Žfų9Mī£÷šNŠƒŀ."0?U÷ģ^?Ł…=•0(=K™ØĤB‡ßĖķ*B5ŲiÓh)9©Ļ: Ķ՜Żoü*mł±‰EüŖYž=§8Ż<ėS žŁ”‰ J¾–—”ĖqZ9/‘³4•‘` ē ‘žM”|ŲJE(S­Œ+6¦ä$ēT+:V~5œ5A“.uZ×÷Ä{Dįóī0 ØqÆąéX./31ö*¶Aōų·q>æ?ķVŽÄ|cŁ£¬¢ÆqķĀŃ%ob•Bį½Ą±C”¢©¬Ļō°ŸŸeŪ¤>cäĖ"ut¢Öōā¬PS¶&‹iN!­óā=ւzŹ*”g;:ń0-ŚUęøTDźēß?JM¹I)õø66Ī„u\³ķš8ž`v4Æ;’•J™šĄ›³" †G`ńgēŅśÆē­ņ$ņūÖ­h-„õ7[z’ŖrČč€TJąŲ“; h˜{rųŗō¼?Ōf\|¦?Źi,¼ōy\Ål¶”ł~ŁIs0{čGźR-ł;ă‘.ūké„Ö-ÜE/M¬( ŻfŻĮą!‹A8įµ)ąĪµ&(›·ųz\˜]+2♻⠛ Įõįe!Md•€,ĀŲāq•}6^h±¼B~ļÓæjx¬é÷ęd®æ/¹°()Ģk“ÓŒ‘¬ų89ž=’Ė%_£XOäÕėę¢SvĮ¬G/¤öŸ"Ų•<ņ4£­łBƒū4ض‹ńfõﲕ2ŻéMačü04½(Å%—ŌńrםļY׿Č:‰wĢS¾ŗ‹'Ą­ļˌ5į×ŽĢź¹ŪrrLAūÉjó Y Ņ=é'ļ2‹į$ŗæ F‡ųЦ¢É~³ŻDrK§^ōJ¹Ź8#ƒé¢1ŅÕĮkŅA:’É'ż’ G¢NåŻĢ™„^ćŅ|ź41½śfĆAh@-:ŗžnŗ‡(|uŗ_+©‘6M5VŽĢ³Ó°‚Óm¤@Ŗœllņó,ī*.œ€āŠ wd“ <``XC•ĄĒ‘77€­iźėÆżzÆß7¼›ż*X"Z93$˜ģ) ƒuĆĒŽäõgŖžģl|śWŲqŒFg0[\f5^ʎņ4%®žĶų<’A[móa2;¶ß'„Aą5‘‚Å@76Y”u„orQļQÜG.x"Ö±ž‘šuž=œ¬Øņ6ǁLNģŠł~ ¦5Ä#k)gsO«+„nv¦N•¤”ā„U¤„·"Gw¼÷ a™vO}ļØÄL†æžŹf¶b€Ą Š<Õ„ÄŚÉŸ%i ŹåĻ5Ģ”Šłē¼;1Ė7­ūCķtČŅó6—ęUZ¾‡r Õś~ć-ņyąźYņ0Ēē&2āÕPótW#$å½=oėFØņļÖ4:‚,AU„DUįP 08Ŗ+¾”1ŲŁTøč ön»füŁļƒ[,9#:o’sF<Æd²~©’aŗ¾šķ‰JOųŒJæKG‚\$Hq”$@“€®³NdĶÕr/Š:ŹÅ›ėC-kźPŃlZÆvmN3–鐒ü"d=!ĆX\Ü1PÖæźćʲĒ_Č q==I!7[6Łułź)ÆķĪė\Ās‰a÷ƒ2Ň8 ex†Ru %Ż¢Y¶ˆŌ÷Š_ŠIoĶŻö9˜ė‡BsfšŅ+vĆB Ņ+’W«ÕŠU. L2,•µ†Hh%‡«Ąę8ø¹Rģ`×·=œĻ”šÜ–įræ…׉œ”"åēC–¬ö½“zļŅXė%ė[>/nŌBeĮRä\¶{•Y’B…Ä—ąŻėąŻÄÕ£‹0/šT§P°”Õ“b]„2#¢€QµRžy؍J.÷šł±Hex‰1ćĒ¹e(C…;'ķūŒŠ²ˆ^)ŻõgßPąć’TėÕ1ēŲȎLEÓ)•ŌC]—ć…†³%Ō ĻbźYJI^×o‹ƒ †ś·?¢ä]”ŃOĪM§n‹V-I²8?2š~čjīŽ^Õø©×t’Eg;oS6ø ƒ²ĶTĢÜ_‚ؼEØ-IÜ«“Æ2ūŠÄHƒæzäOéKÕÕĻ7PĀū‡§y¤QøĀmÜ%ö¶ÓqAĻ…'†¬ž6Š÷$üŒ4°ūgą :Pa½æßtŗüŁ÷Iɱ]sk 4Œó9ś‡†Łģ¹’ßļ…‘Gīņ~ƅ¦m¦pƒÆ*E“Ž"OTĮēłŒ ”śyņŲ4ÓõČĆWHÕ. ?äZ–=šēå3yNž˜QŸīQÓīŽžęÉŗ {­¹īƒBŁ= :±ßäč’uČŌŃĮ$æćU…Æ÷­3Ż_L•H¬58l/¤˜0|ųÄsĘic“„‰ū ‹¹¤mŲjņG¶{/­hąĪ…ł¢²Ÿ<׈ŎŃkŒUc4›(’”Ū[^Åž· &æ*čvZŽqeŠ("$ąhMF/愮l!ģL”军†Eźš ųR»oģąA×E"GĖ!“ņC@®@ę8žG·t1[“z2XUǰŃCm`Æ"zŽ\#Ö~ƒ‘džōŸb×³V³Ś†„8ń!ü"2lŸ#ÆÉ®"ŹL.a°L+Jn xDēafŌåŅXv{¶ÄŲ—śU±%Ś8cԘ·ĮņMłO,›|z[ŲēM7½R„„e9Un'fLz¼ø‰$Č"Zwt,!g» <ń7½ ¤ūOīEYÜj¢aĀ‹NQ8卫!PŗŽī@μ«Ų ?DjēLåK­%ĖO3˜Õ/čÖ’y>eW‚ŚQƽŃōFyAs#tń y®Å†·fK*@Lƒ¾c}©—Xo°“h¢å ]ŠKŠw·{÷?‰…æś”Px4ą6:h”æ³Ø)Hķ›įǟ¹.öŅ?‚l"Aß•“ķTž.$!JRUņSņXF—„ŒzŽ…ĄŽ$ćNēī²Ö++ü3_ż¦ž%ƒÓ4vØÅńĢQˆ ¶?«šÓIg²©Q܇¯ōīh‘Ö%_L…5`ÄĆX†Sƒ€6}•e—¾Žkéāܧ ć"i¬\ööńq#5„xMÓC—“ šä›Y¢I»”ęĒ}ķ&vøxXD'ģŠ2Œ&𛾒 žä&žM TaänėĮņƒÉböė£BĪt§:Q’h”‘ģdhVŚć–»ékėĪŠÕźoŠl"„4Ėčaä»Xė!ÜŒ–› 朐9–ö’§}ī1åģ{¼9ˆµ({§üpĄĄŚ`p6ķ—āw=zš»ėš‹Ž—eSNĢóŠżā2"ę+k’ģ”>ēė9³nF„ĮBŗi9O5øž(”ėÉņ”z¼ UKOSGšāńwŗN·qĻ„{ų/²ŻUaņ']ä]3U œ&9£‡ā÷*T|½sΌSw5¼4Éźƒw¼č̱™6ŒÉ™ į3­ŽērØ“ņziź_÷ĪmųQ½­Ļtu["¬ī¼½‘\?ARöXSŒy«čg®gaj”v&ƒv2>Yõżėtļ (0‹ļžlķń#ZD½@ĪG•ŐŅ°€Vąü¢„HcOėū‘ś°€o +iī7Y·w¾iP.€ÜĀ’vĶ37€W‰ģå”{Qī÷Ā>kµ|#SRž•p8(Oą7]KRõ(»„UdźK™°‹¬@£o™y9x  x"ƒ>›9‹Ģ(wrzļµ •BÕĶ_<RX+k˜MÆ7Ną²n’įŒ2›!Ä4Ļč,Į“E·+z‹ó TÓ X’ōßźwčĻ坲6{jś–ó;ŠŌšįjyyEKœz‡ ü}ŻĄżńp—sāNH»žŲßä¢g‚¤ø8ƒ¬?ļhE“Ö{¬i(õŪ2`6ģ|§”}Å!9Jō_«ĄõBõņžÉ]e’’Ó-\ ĻˆŲā¬9ŸV:lyČ£Ng„g‡ļ³–€ĪŒ Ā®jV\Cżd—Ī}’eÜbDǹ~ƗäĢ Ćø@„‹_ŁĖ¬ß‘”«k˜]Ö”?ā•älÄbhlT®ńo¬pm7nUWd<ˆĀqdė&äčt^|‚Ė“œ t‘Ō•æé$ģY/Aļu-`¤?°S•ńn÷æC!!T™j¢rŖRH*,äҼi¹ēąģeĘĖŖjn`›ua…ļ˜H\ł @8mœ—(ä f+ߙY(ēå3",řčIż…Ōé)ŗo®“‹e”ts ±}{²énŌ"łƎÖ@E=6ØI>G?X—9py’”+Q®/’ARAö© ž½QÆ 4“żq­8Ć@Čtģh<ÉU©‰ŹŠ4p'›ø³ĻŹūĶ&‰/뷈6RW”ؼ³f(«4G Ÿ)õd Sd„»Ł0&£‰¬\Ā‚I?x ­¼—¬4?±•ŚŽ£ŗ×eA²pā=^»)œ|‘DÓ‘ū=u&råjœ~3õu‹åĆÄē‚*ŻŪ:0åC ÷¢DżrG> f­ŻC¤ćE^õV žėÅ]ƝÖjL-Œ¤Ģ\…'v¢)׍óa!ŠŹ<†YĆ»1ļX*æ{bļče‘JĒ€*œŃŻŲvłÆ©YćŁÅŒ‚¦ĪlVĘ»Įó ć|”ocn»£~'H††¤†ČA¹l6œ¢=Š&g2 ˜Ä\‚Af<•Y`^×«r8ÓEM#ŌHW†‡4Ü?¾/ݬdĪ\ Ö«~|UŻ‘2Ł 3pŌž²A -£…I²³}å÷‘·ĘD±½ÄŻ/ÖŃ,Įö*ļ‡Éeƒ•`zļ¦ʁ$‰Qķz¤6<›aéń&ū®Wxßc*ļ®c^J·¾\Šóéé­«ķ‹7Čgśj-?0^“»Ēę·j ø :¼æ“×+ žä˜Y”Ė/Ī9Ė_­ØudvK±WƒĪą™L’%3­*kł1ŲŃ*„ź<u×x»¶„3 ­±±Šx.“:ūeźŗ>P]„ˆŅO°dŲ„HŹ£éö*‘÷–£S†“ѹ/y¦U‚rīcæĘülź©PhÄä­©ÄŖ3¬ß3nȬ 69µ=ņė¼1ŖyŪ`żi^ؐˆ4łe”xμ.»aĖ4Ó”éļ"¤(VęM"šŸņœS×n/Ą¾›Z˜*§×ÓUŲ„čˆ’/Ē;%˜Dtµ_ČŹe§²@¾Į ޶‹z"+ō¾ hų­[€Ķ0ĄÄ©ż{oœv“ž}Šżc{šūˆźµģō£žæJTpŖÅ¼>WõeÓF«÷ū ¹ŲDŠćÆŁH¹'CŻZžBD³)9Ķ8Ó=åšņ@’ķ—Z§Ó˜õ¤Ÿ„wØ~•ź~ƒJūĒ(萸W›„ŹŲtŽ Twļ¢ŒŁUBļNĒč\–F}_Æ7¼Č2Ćx䨓>`"6²vnuŪiĮE?óĒ6 oļ͚8L.~TiÄšO‹ņĢž.%\'˜ ŽS5±ÜsŚ™g1’°™ —o|g‚"&ÕØ°·&—r„ˆ7)ˁĖ97§čeõ¢łu¹ŁC1Örvū¹$9Ž“’€±‚Œü«A‚’Ž3Eœļ-¦fƀų½g¬5ŗq»`Ē®Żīõ}rDA’śÆõÜm £×Ō‡XųYö=Ś?+b“OœĻ??²I‘γzhš«hō63‹ŠónąäĄѻā^~W4õÓ*q·“ßW24dˆP·teƖ°oķE>ZöĮ) ¹ Dz: ³Jpz¼™Ņpšē–č°Ņ#t²v žŪ3Ģ'kÜĮėŃqščFä‡Ķļ&vxa}~“Qž:yæJŖ?hµdYʑ‚(ģŒBčmŲFµtŪ³«›ŒJńæE{‹“Ņ^:MŽģiLŅ ŖiĻō„ńÉ ®±;P»ŠE‚‡AI™ś¹™Õņ¼  ¦õ;f‘\]č]]k–ÆÄŃ ¬ŗŽä›żlPϫҜĮĒž7€xC~W6óilÆ}sUL3ś Q4üŽRĆŒŹ›5$yĪkŹŽf  &øq3 eWųR"ŸĖ@ĢżĪŻČc|ų‚²‹ø4Hņēķ ¤3ģ™ÜJå|“źĖłüĮ`9bCBģO|HćĖ”“a*¦”± ƒfŃFVüpšяÉ.ÆŚ^“Ž}Ÿ/³ ƒaŹÆD “g}yܞĪļŽq2xi%*A•L…móØÆ4“SyC,S°j,zKNą¤XÖ?Ä”ąVž‹Ÿe9Oóöi²±vĮ_ū+ ÷jónj3X‡õšÖ×{!śÜgŚ\³żR4“mdÓe¾öS¾–£ nķ*<„RPƒ¶xJGņźø“cēż«ķš»AĀV^ĖT§*Æhq"Ģ×yĢ«0æĖ³3Ž$dϹ’ǦśŻŒ“j¾ĻTØāęC¬kpølĮč l Ł”Ž^ŽēŲŖ*ń H;ó¾$i9ŻÕwŅßśČ>øgŻĀU]·¶¬ŅńĮÖī‹uӘ˜ŪÖ%é&īóÆb{Ų…?Ó=ż,ųΐ7ŅAx£„]ŽŹ7‹1+޹žDdŹģqź9Ŗ³dæ~~›×ć óļ’7š>rR8Į »UčYāVƽ.d¼ßüŪ÷†0+ꂠÓóbåK5L>/Št6v„ąˆ¢uXĀPž?ÆNTŗ/Ž-"éjĄ®Ÿ¹©Żųē]Vķģ’ąuc\×^š…ŗõg†®€·ŌÓĝ6€8šs@”SÓīd€‘’—NZ·Ó’®›R›“±pŚ„jl‘ĢN@ō`Į,µž·qNąØ=—ä%ÆeSćęį›%ZsÖ©ÖĻbF÷é?'ˆ71Ī+¼~BŠ들ŗū vI+#Oļ“³ćś¬O€¬5Š-1ŸK%AB°!8t\aƒNz¼-»ifę›9Śń™lšŃŗ2ę9ÉrŽXJ¼ÜŽ!÷gŠÅwÕu'㊻}Śå¶¦›™&)ėÕiqŪũ澔ņöōačĒ9Š®™öy:}̼џŗ¦é’“R„ĆVt•żŽLGfEńŚĻ“ #Eóh’ań‚żČ€óėƒXŖ _jó5āR>GƒH>­ĄœŒ:‰”ßćSr/}¹åf·MĘRC; ”lµ(`hB*ÆfÜH£¤uUžžÜ”ńØīü¬;Hßa(īw2ßĬĮ-!A0„§Ļ”’z\€B÷”ü”u Ō8Ō0©1QŠ6^øźłąßĄb{nf^F*zž.x]BTśŽ&¾Įŗßtā§|¬nųüžt[Ż®<%Y” K|Č«"e(Ž *u²WĘM½vVŗķ«ó‰Ń¹tʶŽT—Q„G µ_µ§/Åų,Ža’Ŗ3Ōž\0d£ōöć÷–·)¢ ` Qā.łG®·* ҌˆŹNź“j‰bm1 ĖĀccļBՒƉŠYY ü†{WĶ WĒĖŅ\Ō”ŚyććĀ.4Š ‡AWe^oiś‡é'Ą(¹”S£Sm#³Č“Ć]†J‚žį|•EŖś”ÄĻ0læ#†vǬÆ=9ŸV•Ćœ4“ÉJ[R ,IŃĢ;SŸrˆļnŠ Dµf¹÷I ®×$¤’Æ põÉ8nvüpČ¢ć/[ü¢bf ~×vIła~&yžó¶ ƒtŠ_q ĖŅA…⻓’#CĄcóæÓģ7!ūŪ™0)—AźĪä]s§¶°£… ¶ ÜŲ "ų_l@ĢĻÜAiļńŅßAUf'éNŻāńŅbšĶŅ)³Pķˆ z'%åŠM¬—Āų&tĘo’ėeYēń³—ö~Ų‘™%9’ læŒJ_ QRYõ”'— 8CĶŚX?kknœz6} é{^žÄ85÷[“6–3…’oÜ¢"ŪŚĆ]śz¹d!·Ņöį‚‘¢é'žQŽČrń18' 6Ź‚ŠŠŪ-÷ōņp–Ś*9O=žL8?~čżģIF¼Q6ßXȜ›@cš#B=L>šÕW•&Õ޼§ß ^Õķą÷ JwĘęœccĄkАQ† Ś‘ŗ‘Qבßūö}'Œ1źµL÷łå ‹ąŽ#Ĺ4ķˆ9ååū‡<“Śł½ū§0ŠYv8…ż%2»õæ÷R’ś+<Yć’&H“”ęŚæ}$!%R¬•ų¢ŪRźżT@ņ ¤^2e“ZN©Ż+ī08źØ8mŲ*jŁŅXæųÅ’čųžEÜф|ĆįōɹūĢ„ź€RJ°äœ” ȳūŲ(įrWĀźrÆ55ņD«^讣ŖŹP¼yTĢČ<Ī ²†ĄŻ:B”ƒT¢ü²owW¾ĆrżźģD±z-Ēv}ų!ź,hÉՀą7+:ūąédy¦[ĮŠÖŻTö®‹' Y Āy© RsīædŽį“#ė+–:uHįŹÆTZö%vb˜HŃ£Tz*JIžŠŸ‚ «[Vŗū½óŽ– 0ń sę…Eię^bxž§äÆ}˜t¦æ{ś“q»ŽŠp’Øu×Ūš³ÓPć¾ßŻWv^riéf†‰hÖĒČūƞMŖµ¬ļŖÖžHIņ„®œv‹¤±’hĘĀ?‡1RĀoé*ĖŃz™ź[„]Uégŗ×Aض¾Ę¾+­™0ŚÉ\;²RgĢcMqgē’„"/K¶w;xæÆmiėe4™ęŖ˜^ö¹½[‚Įž’ƒ>~„ž™ ;!±Ÿā÷3xÉ>»©Õȧąå«8„J”9ō©³»zķšÉh¼=…qO©PW“O0qLÉć5 G!‹­…³?łģ¤‡üĖzp(åŖ›¾ķ’‘BŒxŗųŠĄłqŹ|Ē«vGƒŹ+ĶóK?FŠwKÖĘ©o¾ć¬MüS®z”ÉĢ^‹&eP²šµG –ew®Ŗ¦<!"79W#, 4ž­+?o9Ā;"ū}МŠÄ ž¼›BιĶRP5ŵŖ‹f艙ĮQŃ“ŠÄķž¼ņĪ”Z~ąĆn c #ĪM+ćälūŚbo2T?»i–ŹŌ)ö0nŠź3ģLO½9 ‘VčKźP=9ŪQä™8żŻe”¾ydōĢ„‘;,¶f©.r©÷Iķ’i‹¤kā“C`;÷[ˆģ£‚•ŠIø[dķĢW9䞃ČųzÓõŲe…PyYĻ·yi7W–¹€ųDŚ\¦‹>Gм˜ē!§ÖTn÷„…šīuÉŠ¹“†C›ū…?ÕāY5‡ īm9»Ę‰< ³…SsAX,<·Ų‹|æEČÖk4š·¼ƒÓlśŃž-[½”Ī×·ś‰\€ā†BUē%õWÅÖńs|ąjną¬fG(Ņd}€…0éŪKŽS.āóņOĆĀ(HSB#Ÿēt³-–Ń%³4Ć­ÉĖĀ*®yµœ4[;)D*`«“v6ī|–v:pēp‘+ƒ¹LRnø÷Axš«i&KŽäį ` –÷ĢbČJ¬!µs¦X¾¬—v,éĪ—õuöŹUnZķŚ»ØöI ’£ĢüiY ‘ÜĄėĀ­Ļ'Ņųm倢v®Ī…÷¶vČĀ‘įOÄå6ÆŻŖƒ%łx”ÅÅR«Y™ėhE8wóWŲ·™&¹ō¢&*ō,?D:«“ %†łlŲ]{N¶×~ˆ¬OóŒ¢p|jjƒæŖ¹”p„ū©œ4‰ŁńŽ×dŁÖŅX4HåE‰Ņs;ĶCP^µ;­xķŸĻ}©T&RLC„ĶI‘ęņK²÷gрZœé‘»~…–%Ķ摺qéT$@>JˆłāŖó#—Ó)­ģķ¬Åż>­įŗ7mO±“ŌJ¹] %_㠊ņ§??Ūōšvź…Ń·×_i;ųLs/9–¾w‚¬/>ĒŽNģ9ž¹×­…’e4ƒnōP~Ɠt.Ōøł›ł~YĶjxWŠzōßl§ŠĮĄŽ—Ē ąüžń €Ģl°3Z6R÷v伟ßPā„Š˜"(Y°Ę8ģø­ĄĆF¾[!Rdzbyp"|× LoHŪ ŽZÓõō™‡ÖtRģJźāB•ū¼jĒ®Œu“č ÷ė~Š)9 éČ\~ä%¼PźųŻóö‚ŠV'ą6mĀė˦)ūpöR xĖ­&¼!æ’VDūŹT&čs’¾š›ØjkŹ-źʧsIk0¼ŌŌ‹&ÄŅ“—WŲś;/ˆ’’Fõē3ņæ’K:^Ļwp_­Ą†°r34<WO¬DśMJ~ÅtwāzoįŅR±lÆq­ó„ŖB«¼d“Zż&€ŽUäŻh· Ėā>ń7Ÿ*“ū±t’­ŅTÕ¤CóWį­qŹWž2ˆĘ¬×%PY0Šf‹O¹ļYē«YюOw®4–ß+œƒę¾9 Hnłf¼A×t֍y·*3”k6嚏·~ӌؤ¢Ņ,xé銜 ÆģYvŽī¤ aŖQ{ńōŖ°ŽMaįÄQv­‡•ƒźĘɔž~ęÕwSH¼O—XŖpšp3³|D”•‚/˜³ęTPO’TrĘ÷D¢FŲ4 $ńF|Ÿ•ß‹&L¬«Äq«č­!¢>[O­ä@¹х)$źÉšŗ(q§:Œ ;}½ĻėŲ¤bKlxØ”o†i¬©÷¬ą0ÕńŗĢonE‰Žfƒ5URpŽ)~¹ŌeØj5:oĮ~‚čĀĆ=ęż/ē©„—Ėī«@0žÄĢW|f9Ē˜Åeˆ14O­Ųi5žu6hŚA3IĶŁk>™¾–[¬©bĆ-xFėĀ»ŽL71Ų‹j9zhrl+lˆćØfØNCµ$Ždk)ֈȣMåÖü~W$6˜7Ł»Ų&³7 śžkĄ6ďķyóQrÖŲs9ŹIłŅaé2’Ÿ)/“”„š¢śb©]ƒ>õ¾Ģt‹qėg]3ą†ąž|u×CŚĖlfŃ.Å-§ )Ó6ōīķ?ūś} ©{Ā 5ÆPĢŲsœÉ’ČOķ@mߏ©ćÆĮĖI‘¢niĮšĻ+&S7†0±eī…żNÖ|A˜ÖˆĘ(Fuz„Xx³]g™Ō¬Ž·iŻŐœs<{#"ƒ½ųĒńeŸā}·^Į#“ŗĮ@ŗ‹’™’s®!*p;øī6n®eųŖčĖgS–Ź,-ē廓sņØańqEEi H[öķzjbåÆŚŖØģ쌓¤,XķŁ @æ½ ‡ŗąZž½ĪLˆ2 a>äO“ [7¬ĀBęK“mā/k.– ‚S‚”ÆˆŻ’‰ŹŒt~ņ `&qq×ܙ׏ ƑķkE6äa÷Eü^æW= iÆy-‹tĒˆźøgцhī:ūf,]•õ›õq¹^ćž?Ÿ§ņg;‘ĒɎęoϊ`Ł-ęE ŪCx)n³»’«ėČZʝg2œŹÕōp9§Ó挦iu›&ńüz’pA*źD’±ˆĄBģD$ōļÓΰCķ7€5é¹ąc!xA;į§LHć"Rj¦1Ą›Čog­_ yR×tKwšøq;Ś®Q8ØeYŃę©×ŸĖuŽń¶ü½ķ{ēõSĀ\zKzrĖFŌAvĮ„JQŪC mŽwh<:Ō‹Ņ©ƒĀA /KĢ\p_wXā/C–ĻĄd…,Žū¢¤4õ™Śx šO›;ĄOžÅļIk•Ō±qļLdÉrMżĆ"/I“OɳAO„‹KŒT“SOŽ;Ā“­ÓÄkæ#Lr8ņ鄏u¾Č‘SƒÖ>·Ÿ‘g²ĪY)„Éū ŲŌŻĒx­©­Čķv ż_·5)į&N$HUČŽv_M*¼ŸtgśøŲĘEFŚĀ¼2F4Q8­ēŲ mq¦ĖŠŠjA×£·uŠ£»aYRÜ^.1ņ«—@„ņi}o&™9Üd¦¦“ĻÖ1–(±EN^rpŚ«zöÖ”EZGæ~'޹€@„΁€ŽĪoŹ4q‹»Ķ #’J‰ū«± ×L“;ķühT'7–‘ܰ©±·×1žÅūęÓ@Üw²Mdp7 ©yĻžč?¢Vl mX$OSœ•Ł’iū»ć |<čŁQķ÷ņĄcż{[AH•×Ķk©•-,B’Éā1ĖÄ[!šéK<ļx½PŽ[0{žĶųn,)ŗJ„“žk֜ė6ŗå&“żf×nǾbēE¾õ"UįĶ\Ś£Į—šĪ^ÕGč@4\—>Ń ó7w~Ü|'žv÷DiÆö%ćuY,ĒŚąō£Ö1é53œbŌ‡¤r¤ÕöŸĆ2ß¹§Yīŗ÷}ź4ūåGPߒŗ&¬c$!ųµóņhšŅ©>wŃäį7؋Ćó6>ū[®]"Ž \!,ė$h ^”5Æ©ާN\Į&/µŽ,߂¤oøčK2ŽEā°[ĄĶŚr”›[Šg-£Ī‰Ž×ˆ‚•E”š4Ņ“‰ ¾3–Ž×kåM(fL'Ćś-#ļJsJxfŠcæÆKe ķ/źU½ŸĖ}Öd3xÅI§zйĶękąĒļ¬Ma ¬QC™.vnču*~"Ē Šßs}xhgj¾vGp_²„ČĻ o°‰Ō€»HR©UMN’˧«ÆÜÆ"Ķ˜PjŁv÷M)ƒ»%uй ėūڤ”*œ@ĶJƒ”tåĻ*ķ7å„„Ž"۳މ¾ŌYQkõæįš5ģ±LņŹjīH¹öĮ‘ÉīybķµĆ%|^ō“ł|¶‰—с@WvwÖyvńĖcÆÕÆŅęQĶĘw1>²÷²vŲNķ肿60¬:žl|9½4d”1]ū\ùŃs>ØŪŽy;Ųž–¼E¾/=aY>vz4_6¶m|2ųøõåÕ}ó3ĒŅOæÖūé=Ś×ū{œh,Žæ"*fy—X,g*“Z¾Ér œHŻ”ÆYl^/™`Ŗ(—ŗē¼ŠIżå†qWŠŁ=Hh•véhŚ+0NrŃ «ttōĀ»ņ1¬o„jÖ2Ö3ō''£d²ŒĪŹśØ– ‡_V ½šČ—§­yĄ§ČŁBŸ‡ƈ`Ė2L9eĒ/Ń:ĖŲ«yŽH¢sŻĮ33 dĮĒUÆEL³ ŗ«Č•ÓWOŽCŽźy/ģaį% CėO© °}ĻS}æzó_E%ÄF›ßC¹1K’]>õŽ4Ÿ.óĖ”«‚€šąs¦Ų©"ńÅ" 8³"™2©×7e=„Ž0:›xń%11}įŲ {Īxṥ½ė¦÷Æ «¹‹ė$—»lĘ’T7ńÄļńc۟`ŒS·:ÓuÜ|üA½Ņ Qœ€ ķSĄTĪĄ‰®E””ĶćVśÕā7`³MxAsŠDŸāL)†ŠŠĀ¬SvÕĪ”Æ t¾g[ō9¦€§© ńNBÆÉY °qåÅ9šbĀžqčļ°īęŚķ‘y¬c‡]„ÕD9R•?ŠIG čƒõ× ÆŚÆŒ&ž<]{RNģR¹Dś-Ō¼ dŖzO}:…}փʠįzJĮ_“W³ķœ×^SaC=ZwsNŌjĄŽ¦¹ĢŪf]z¼%ą3Žn>ČŠt\Čćõ× qĪā)ŻģØ-ŽEłµ7D0ś“,Ÿa¾juEŠĮµœÄÜ©¤ŹāÄļī—\4ĪēŅžM •īēd\ƒ„¦'Ŗ›…(r&ķ r[Fdѵ½³¬3/3–īPJmeĒéELKѳ?x€#źNa!#åCq…Šķū½żÆs®UŗīĖ®˜ŌĖ*/³\p©8įDל”>!ś×RÓČčŃ~£ >ć>ļL‘ ܓqyņb‹Ÿb‹ä”æVU – Jį<)½šZ÷P®. TµõŠyą¾bVHļ„M4ąKČ$õd²6³āHףö n;i;ō߃¤ü|ō󯡛 Ž nBÜfD¤·Ķ_ūˆr&äĢ‘¦Ń*bžé»Ļē÷ȉĄ³4 šÅ[ ą @ģŸcdŅ^—Óå½õ¦Œ¦rē‰JµŚ²ę+U—'Š-*sZÜ+;>(Ž)9LR­Sg5e~“æĀ=ć§ā÷”źÄWSSYQFRaŽ“C(źQJ±ƒ¹Ž¤ 3 uIÅußA÷‹ ĆŽÄ˱‰=`žB’'Śł±a€5¦x„U•ųē½÷h †¢ ŅySf:ĶU¤©WS)5ō WĪģZ˘ņ”éY÷OĶ%.m.}?J§)lþK‡…—@A2ĆļŻyźf¶§o]%hœ“=_ŚdµßMʆ™”BhÕXeÖĻČ~®ęu“) K8Æ©Č)Ā®“ÅZTp~į|EeōX?Jļģ¹Ł“{īKÄKlæ»Hķ1ĮLG ­¦ČSĆQ"Qfóókwų= æ×fö]Ę÷œWyōt$eūIó• ĆčVLø×Y¦ƒ™sĢ· īn' e–x‰T£wŖCµvIöɄ#–×3/ö™„p#–u zz»NĀ2Q’Ķ;o¾DįłWPž@Ż®…Eš…⬅›eē™ßcb’Ų—²“ćēüe³Œ.*’6zæ³ÅÕ¬g‡FŚŠ4÷o1G8kŠ–5ļīKŽĄe\÷!ūhĪö $”§Y™2TƒLÖ ącČD6ˆ¢ø„`~“­ŌŹ'ŒŠSŅuī6/õҚ`³ĒTóæ–}zü~ą&sØoü+ŠVŠā„ąŲ ŠēŲ¬ÜwīÄ éØłž(Ÿr‰2{©ägF™Ō:( Ķķ+š­HŃ#d’Ø+ģ0¹7ČÖ ŗ[$Jæ3nęä́bV™Ÿ]Ņxü×¹ -ŖĖĶ.wż].ČČØ’Å !qՃś×µM†”7€čøŠÜ–žxvĒ aĖõĮV † Ł&㾓™Ä\Œ*Å֐„¤¹Ż’[Pl÷ļÖ_ŗ|—g­‡Ā3i6.±‚%Ž:\Į>É©7#łĒżÅSÖ|T“ļš?bĘ'lŽ"‰,ŗ†ŗ4ōˆ”iéĄµÆŸÅFQ»HĖź`{›u zzž=ž‘ėč[†éŠĄÜÄ1h–še÷ž®bŠĀb_vø7ųģƒcŠšĒ›Īy7QMäųŒŽ<Œ¾Ü Hy%ōsćOöōz½õó*¦šō'·[±‘tH2lJ>ł Fš4²ī’4b9-ś:k‰Š× ’™EĶÅ„ ¬H(Œy‰5„ _.§Ō¶ōĪhó‘ž _ÕBļĒh”/‘!)¤:ę^X2*2ŽæhJR,=:ælxĀŠ…Y¶:ob«ķéLS©‹†(@=ÜæˆŌģ:wēµ­N¹J.›5|Xę’2Ńż§rØ^ĒaFz~=HŌ#LN€(Ļłõ¬»OŒµömŠ A^[\ŲģČŪi)Hš·ś³#,ם_øH |N©¤xP3väŽWŪņė"ę°ĢFŠ8xÄƜ™…÷•“#Š]‡±p8é×­g»ڼڤÓÄ¶Ż {³K*-bӈk÷AĮōĻ8}ĖNłT|»Ē'ŅøcæļūԾ٠äMXė”›S²€åŹT§NéŖ`OC[„Y~‹Ź~„å©ēŲ¼ūxęm'¶Ūž«Ī \’ž]Ē—Vp­2eœ^럦LUT=’¼Ń”¬¾äq:jޕµ¾—čVĀĻoåG{qX8–ƒ˜g­ćŅīU4ń溁”?…}ŽōGćŽFÜęī<Æ¾Ż”¹Ō&Ƹ訷R„č>k†¤õ×ÅmāhJV¶‡|#rś9ĆZĆ’I}ÅꄇšŻ:ķ?YĪ:pāŸtD·×†'õJ²_fk9™GŗÆų6=©4`hłµņžEF킿ң>Œ#{pEŁćz»¢Y’ß&ūŽkū1JÄĒH„ėØ$Š)§0’VĆļų”lˆŠBu”`ž²¶#i~E„¾ņŻq–²Ą©Ń:ē˜A-ś"uf–e¤»'’+é|ś «ŸuhfČqóųŠų±®¤ę+»Ą“0ÖGXtąälšJG ž“^”nÖäÓb£]*ä`ŠówW3ĶøWü’ß„łOOŅæĢdēOdĀ‚J‹ƒģŠEĆ騨Jöµrš†ķĮÕń»Öó=т„‚ķė5lvķõ·R™‹Ę0åD@ŚQŸ·²«»;Ų••De—ʧ„؈«ēJō˜–žöb SŅą>0Ź(H o0-XtĻō2f|!œXūGiŃ9,DŻŚ¦NHÜp‚š–,ŽźeI÷J'‹©/_› µÄw«RŅRõtØäSCś«Ģ2ÄOŽ.;Aiš)‚Ųŗ¤FüŁy˜ŠŅ_ėž7ü4_ä|øąøÆ;)Z7¦ ™C>`Oz žä_=\žÉžwU›—ū\ol(gXCōN’бC¬™’–įoPbÜ'Ōµ'²i÷Ź'²r”Ł’ŗė>ĀĢ,l‘b…¦S'EÕlżcžĒÄÕ~Śjˆ4påƒŹ7Z3Ž'Źī—Ā:~mæ&‰‹('Vņ€žQéÅ…·Y(R“µGĄć-fĶ=,n¼ƒs”ēt—”’ģ’6¤ĮDWóbüm~]µ>›žZ¼ó­+Mu1JuQūXj 4Ms×5\tYś§„'¦ęģˆWõaMj†‡G¹¤/u åžś]yL' W DÖµ±ĖlkÉpŸ!ź²XH‘`°L`ƉV¦Źģņ£Ż?»Ų†u|:_1=*ķSˆŗÕ";œą9š‚×³Ā)öŗ’ēņ†~Ń0į qŗ‡Įø»{ŗ„ĀWDŠßU“Ą-¬^ŠžŸ‹ÓĪ«Ō;j›ÜĶ^¦łäåj&ŗ£Ŗü ¼vXaCś®Ž/1‘.£")öœÜĢxņPÜfķX¤QÖšų¢ĆžtŲ~”¤7loś‰a™²k(F ²&9£ś!žAø4gqowÆżņ Å {oŠ$kT¬ž™Ķķ!ź=Y‡ÄĄŹØķ…£fdʕ_n¬kĪĪąāž’$ÓŸ3IŠx/Hę÷śŽü”ėĘZ<5’ul=~r§,Y/‘›6–FoÜMß.ĻŸŠ“aŃ īŽ_čģ-1ĘĪX}Āk°‰ōš½gÅL“°dÉ„”Ņ.±yW”³›jĀØ%3åä"ŻLš“ĀĆg„Ś¢ĻŚü=ĀKŠ‹ķēŌß`|ālÖfÜ0«­źłžžŸŹĢJéėJNæz`µ“6،DhąŪ‹'ē:›ōėźż…‘/šeÖj§bĆO[ >Ł',}(f½ū¦jŠY×&?3>)ķrRƒ(&+­œĆ›„Ēå3J§ÖćI9W=ÖņÕ~®īžēżóäĖĮćÉ&¹Ćlö?dÆ*`šqEŖb t@ļwB]–/·×żā}£ŸĖĻ<Ź,ņ'ļMseóHŽFų+®Ŗ~$s‚§•-„Ē MĶÆ ŽöÄŖ&«Õęuš{Ō­¤wūČ}6łÄ,?„ĆóÜŅŹŒ'–—X\ųžvH@Ym^”¢EcĀå§®F*(ŻēŅŲējӑ§\Påųf¶B`€÷X-æķńs‰&Ö÷3»O¾ĢÜ>Ū-H5¦V…dŽˆ;YļKņ +Eš#/~0«™·äŖ²ę&åPłó¹0œ+?ļe:ķšql~õ«CĀ/«n>±Īš—˜”ÜŻ«‡M1!ŹOék£¼†/¹Łś óļĒ‹ž³ū­‡,„D¤ Źé>š²]ØĆgqŚ+)j•Š3–šń§] €tæb]lņ,/Ńex…ć›™’·¬£3ež¦_FŠæ@½¢Œąõ©†7ė#ŚB«¤ĄeVłčMš_Ɲ©’c|+Ō}Å Ń^_p)eS˜Ņė~ąõüHVŽūÓ!{8|ńį3ŠĄŃ X1d6go"4Č·L®HŁöw+!Œ6‰Yęu¢KŖ»±rYÉQ …·@Ļu'ᬫ É»"FĀ ø@cAHƒģłø@ėäR{pn  ‰ŽQ˜ä(×ńƒ%'…Õģ,ł†LcæDSmSŠąŖX>…Ė֘!]'żQÓcŖÆAځjLزčƒĮżē½·–šź;ƒPA>w@ŹM¶"Vź)9"ģÉQ» æońGö9čKŲŹ-ÖŌaoõBˆ‘Į~YłŖćŽpõR‹_Oaæ’Š “–ę>ČųšÆ3Ņķ}Bģ€/$µ~F9 (•™fĶśŅ£ü.Jˆ¶ņ™ī£“Ē™ö/”»qĻ)@Įßn[-F„•ŁĄLĻĢė4Ź’z˜6Wā»UbmLŹr»Dq Ör;9’Ó½kjĀø“£/›Čć¼bŽŹ[47œa9u'‚5=ŖŁūkŒ*xä³~0)»Żž™Ž Ń×ÉĮ"@źHÜ§ā†ŸāJWŸźqvęJŸƒ§²YŠ~cV¹Žj¹ö™µ?ģcf朊֦DZ]{jiŻ{H±eĄYNßŖ+}WR­Ā.ļ °…"QŁKö:_œå„۟N­ą‘ Ņ˜Ž t|x Ć‹ī&­øĻ{–Ō~J„4nŽĖ»Ż\u=Ļ{®Įü#f•Gl?S8¹Ķ—ŽÖōŒpń'Säßhų;}H’IÜœM™ŌÄéķ°"|µ=O³•“ ŽÆ£ŲįFY—Īģ]¦€\">µœ¼QC­…ņVló“N¼āē‰0Ų½”uA黹-]x7/m[s“Q ÉŪS±ģ>ŠņYĮ>Ķ pŲNMźtŊiŠGi`„nĒą¾Ó¶°Ó3+‚l(6ƑŅŌöJ±!f<‡Ļ¹.ĀS.>„ÆšPš†nY>ż7ņÓcĆ“ŽŽū®õ2C_5ą#c0ųüUą¢M.É†Ø 7x*'0čoóŁņ8Ž…Ÿ1½ü¾ē­±tzC’{jpŅāņ”·‰W ;“ńż÷xėX3 ›ų•·tÓi~ói—]2}aś³žg&ņųŹėS»xģrIÆ;÷壌÷by4D"¼įsŻ\¼W'²Sƚˆ²?Ļ ØµŠdX:i 7Q‡¾ĀpšÓń†Č Č“9Ɠ]|]ń? <./æ—{}+ōė Ej>ķ½cŠĄF*Šŗ»(ė-fī×Lؘ)ŻkŻ7ĻŁ/4ä׋joöÜ1ū`L&̧¹(pēļļ—½sv<ė×ōz‰¶6Ķh杣ö†ČÉ+7ņƒ²¾7¬omö|iĻ÷€,-ž«.M„CšˆSß㳑r®Āķ÷y82öˆ5uQnƗꊓšƒü}ĢõüOޤr(ńśĒ+1ĆJšĪ–ķ}Ê”r‡L;’XMĶļ‘@™”ŲœÓæ«»Ö~žÆĘ„z{Š4”q* Q/äšwnP=žŹ6Éi·­²RbŲ’Ī²Õżūß„ÕA6ĒjnĻH}åčÖ9źOÕ=Ÿļ§0Zźpu˜Å •üłz锫ł!żA2ń&Ņ’Óé ”“^2Ļėö¾–¾|]ä=‡‡éžģ¢Dß3 $†Øä l  ÷T}":ēĶõ³Öa[ōÄ@¹7•æRó½/0.W˜HfĮH‡»\t—¤IBģą)E<]y/­¢²½2?å/[_šƒ· €@€³³éršxi4œ#_+Ł,“ń8F4fķ®L„„¬‰J÷É”vāOY7ė|ĢYAéÜIŗÉģæ„ų#ÅWŖõ”#ŪŻaŗėņ\ˆ‹ožś;‡†m\8ąAÉ9‚²šŹŹ Wģƒ pŌU g¬:²px=’€*„i”Üüś¼of QbŽ!³ū¦ Õ犤—OKģ¬H„&š‰l"g9ž llõā(ĪÄ cIÅ«ōÜåļ%ĄT!ŠLpØi õĀ]¾'{G&½¤>öfžƒRsO”‚LÖQ~“Œ`óŪąŌē–³·M(2Ņ]z‡t|Ž8¹=ŗ„ȶ9ƒŠ)(’*–=ü^4,i‰*ł"yxєEŖĘ†8}‚Ź©ŃŹõčž>›Üćy-!ž­e­9ź[žŲmmh)!,é żx „Ÿ40ę0Ė©ķÄk‡åä(Ī•/1'܌™)ŗu„{Z¾W“#ƒyō&„.¹¼²åĒx!'ŚņJō‡įĄƒ‘b­×—“q‘$7€ęDŽ„īÓåģ:’š–m1®ĀĒ'Ļ?0?¤h5L*q[Š„3dČW FÖėZ8ˆd>čßąŅ@fw–"+'†œ=v"O:8T‘¾JFk“_WsĪćPēŁ&¹»žU9YJ0ųŠ/žśŽņÆĖ'»ÜЃ)™|v„¹1%tĪ]KeĪģE ™#øYīgæ×ó.j›ŌŌålĄQžaZYµįqŠ7Ŗė!±,3,˜‰æģõ3($Ą Ćvƒ"™ķÆē¹h“Ļn®gžnĪ””*å cČfт‘°ÅŌ™ā¬ĄĪѶC=0ÕØrĮćÜĪņųź÷Ķ ?öć{sU3 4‡n·Ą”£_Õ+Ć Q¼§ä‰ū^›ķč" YaxmŻÅÆSD¼M^0śēŽų’Ę󒁖˜ū[ėÖļTČĒ0„¾=ĢEŗ·yÜ«ż…7UĮjnOBmVƒn…Īü/7™)ņÉĄŁƒV¤·āMä_õŌpżdŃ£Z Īē•õ²€H2bˆxÉŹ6|.wœ™O4½.’wŹ&³×&ņ•Ÿoe"ūĀLŻĖ“É<žÄmIĻ_m£WŪ®ü‹U°t.ŗn­{ļ–Ża|Ž’¼‡Æiϳ8ćM^ķ'\éAV B†1¢ł2kŪ)v‡^¢÷lĮC˜<čõĮŸĄÕxD'N"éķŅ„‚”Įż=<¬OÓÕ&F c“™JZoÆžš(vŸ†l!¦ŹpŽNäĆ=氍=—Yąź‚Rŗ7ČyˆŅŠy#o%éS–M©_ær«v{؞e1żõ¶•Ć Ü%„/'NĄśź<‰ćŅē”žœł”ĒŖxj}ń!Y¾ē«L®GųP8@…Ł“‚Ō¶¦“ąņ„Ē{3›Ć,ŌSłzŪ! Ūč"ōw Ä WŠÖ#2•®LBNA”’õŹĶ{S$,b`6Ķü=ŹD.ų|ĒēÕs”FŊŽPżĒ»jxšūr7å8ŠqØjOÕ˜Ųˆ^«&Č僅4(Ķ̐@4K֟?\r„÷`UĪG±¤}Ūß=g_Ōüķä„ž'†Rn¬až­ĒłH÷œÜrvĪp)’•,­~'å¤jSQņ§B}ø.Ņה[“ŻfŪŌ™•·¢ż~bćmÜ|„VŗŸógu†o¼¤$qēw"ÕžīGžJ—Ź,zöhćįb²ęĀ»j“¹̘Mˆ›®©LLŸĘÕ Qż[Hwb‹§ä­„VC©§C_ˆ īš}ZˆÕXæ]«ß)<ģ—ĻŁ‘Ÿ„ö"»Š6ī·°ŌöƒW•4~&& ģÉłżē-|ėtØ«o™ū>Ūž3ķAŠB˜­»ęž“T=NżŸ®}@t& 9’~ßį[wéPÉgūOų“;wĶX/…ˆe+*–Üąn¹wņ{ļi¬ōĪTÓ²0L "fKż·?I9µ½Ū£N *ŁČ!pœ§Aé^>śė“ó€žĪeŸ?Ļ£ę`>[±Ń@@žlw˜?õ%ēĖĆyŹK_ą¬Ė¶±ü8åWńb»ž³į'»Rųz/Eļ®]›„$/{•ļč›K˜~ų ļ*™” § ŖĄõ+² p¦«+÷y“ŃģõŽ6%[µ,7ķ<ķ]›óSŽĆš­ M­üŒƒm³m2Ō! 5oR7éćņš5 )=ŁŻõŽŽ’ż‚<Ł«2Ģ$,“9ČĻ ö Ż1ÖčēéDŽpLxoq†¬ NƒVŸĖZåחµŻ‹āõN°‘sæf >ļō²j'²MõąŒy“fČIō— Ki®7W¼Ę¾“RO›•A¢¶RsݧŻŻXėE4‘%Č“åńü]qåŻŅeœ”rÕōĖhV,)̽£žJC)Œ$OJ_€)ė8¾\l(aM:ŗ±Ą-Ų㊚ī?¹>6–lnœ˜xÉ+YĻÕÓJēiPŽt.@’<'v_ßÅø¤Ž…M³pałx@ĶXLIKM9ēöWђ§±ré·,Ó)f5÷/ÓJ±XķŚ !µ±%ŹTĀBK`ųDAŹsAŽųϾ%ž­ģ_cO¢Öu~S«|DR|IY]Qg.ĘałäĖ8j.n\¤»tž“GwrĘp}° ×O¬Čsļó©ŠŠ ]eū\†¾øh! ÷’5•;lrž{™¾Ó~j‘ĀŠ5üå2„Oę½'éŗ<ߊŁp=…–ž=µKœVöˆ¾Ÿ…Ś·ŠAšś ųÜ@ŖÅt-dŚGōäī{‰æÆ©o„¹ź`U]DQ—æ‡>8b…a®IJč,|Óü·Ō›7įٲ†ė,ä|J&ŚÓ|łųµP„š^ Å®9Œ”Ž–µ©ł3ī›œ—Ęņ“ĆĮŠq: ÅaÉŃNž›MŚ$žói z‡±.2ĶėaEaJ¹Ū—üSĘäiüLĆ€Ģ–V‰¢Įmh—²ćE”™)䈙Zīö8’>ąķd‡ŲĄÕÄŪŌ%ŚęVłųaˆš$NyÅؚÓöJŒ;ŠCešČEå¾IŅĶ,dŃ­XŌ_č’øük²Ųņæ<čŌļ˜„7JĄ ‚ŌڬϔęV;ЧĘqy$ĮßśƒÄFóėßVtX~€FJ‹Į“赯*&&^JY˜éÅŁ+v„$ų?Jn=]F”2gl®pķŚ©‰T•&6 Ń@ ŗµ Ń0Wņ‹š…ŲūåĆB¤K¼÷t}2ØÕ¬£ęĻ93¼§iÆj„@I)„Š5H)ū·gžøžD{¬ņkcŲs0ī“¶"FngĄóo*+1Öp%Lźm–W³ģӟ™wõ_j&Ž7Ķ4/M2€„ķ«P鏁•Iśż¹¾·ŽH+“­®ū©»Pe^®»g…לś}ʋTąŌmD+čr®SFœ ōŸB¼÷žh-ūóŠpP†C»#Ł4!T…ŻŹKf±µ80—WuŖ}¶ŻŽĆŅų¶ xRßx¹’½…VŠĢ$#sdń)#=å’æĄ7Qu·~”©xvCI°h> ßfäo\gŹ&kÄ,©ŃRźĆŻ{aŗ¾F„fB•{j‹õ‚,Ū„PńC•Ė|©Ļ”²Š»d ~ŚŪ¦„ömC„“·¦oŸy>{Gڊ|Ł:©ō“5°hqƧ9l¬÷’?ZF%ś¦6ķ.2„ÕTXĄpĀ4õikwĒO‘øŌŲ0sjĪŌv²A;ü·Œœæ„Ё7&Qė“ė•÷‹$/cuY¼q)̶:T ””»Śµ/‡SĮGB^ó.ø§÷>ū`¤‡iBvVŻ!ī>“äɆÓT] ‰KvēĮx›ˆš(Ó¢zÓ_%‰;Ķ”aØ¢Łk]ž³© ŗrźXeæe=ž+IŒ=šYĻļ×K€ŖI÷A»‰3ts;ä­VłoE?²±ŗ°c¢‡•,U$õ?SŸb’#„ĖżWČÉØŁfaފu-2™?2ŬÓ5oąZ/¬|˜ ьå%ĪCŃŻ£Š–ė°ådöWŹÖj,_ŠžĘöOJ.hĘóõt®”©_U«oj[¢X Ģjvū½Ā"ž”%ŖÆ›¤¾}m2õ-Z¤ę Ą@©?)Ž>YéÉöŗ£ļńÖĒfķO3¤¢Sy:=śķ«9Ķå%æOæB0ź‰ī¼¦‚ •ŹÆ ‡„Ÿń‚4ōyYÄ9$€¶ęšŃҽ‘Ķ[øA3īĀGś‹ø¹Ł›,A^bł­b®’\»f ómó}3XaÖćT’7zß&¼2šēō2ҳiŖµŖ4’6:W0w£¦Ņ,O[ųŅ7$؜D0  Ņ­‚V…ÄcśŲ™Š ŌQPĘ*gś£»®”ŠšX0-cŅĄķ ,ΊVÜ>kü½_žx³Ņ’§éüĪv‘Ź×zh„4%¹~ł$‰ą3åŠ|+zLp–+TnÄW4ÅK>6L“Ī)Īź­%`Ėł•ŸS’1Ģ]6~éWū<2ÅÕĀ7į¼§śŗvņ5™šy©ā†åqRX\nÓ6€ö˜°SzŚś–;eŌĖƆ-9‹½‹Ēų…锩ó”Ģ­ČOüĆ9š”fF‘›5<§õ ĀŻ Žs+1ĮX?¾ ¹Żž ’²¢Šcļ¾ä FnZ>ĖtY ¼ad6‹kUōmF/Ų”<2u«ża¾ŠŹ!‘=ČFŅņ/ klõp†•%CśˆA÷MA7Ø3Qyņ8éõ~ߣ/©>-ÅO|ŁŖ(Į±žĒ¾<ų#²äRŅ“Ö\‡IÓĖū4ŁK¤¼ō‡dKĻ÷ųņ½»‹ųńŰՉR5›˜Æ‚\3Rr2“>Œå6L­{m…ÅĘnąįCķg8d,OłFļĢĮĮ=ó:5NSƒõ”–¤öśŪ_”4©“ÆtÄOīå¾Ń0yśŸæžģ«Yw0>e2£&hų3ŖóÖż łiļŠćž–ūqMŪkšåõ‡żŒiˆŠ°¼G̚Žüq*AÉŁysԟ®K Źbē"]HóUēGDD_ =}Ēō³³ń&˜Nē2½ōŸŽāˆ rqĖł ‹rŌć!Ŗ¾…Ąˆ³yImėPD²vŪž•Ā×čĄē„ä=>÷/[™©õŅ NŁO•ŻJ̌rŪ]Ö÷ ·ożŠāČJgŽ”"Ą§P“(£°r°EŖAĻ1•[AJf'ļ„©\šŸ=©qoxCHS„ˆŃ‚4“»Jžģ³¢ā8;ĖžA,ŽVI‹‚i¦^=b—莩[3!“¼@{«TƒFĻHx½œÕāßÜ \›ųś»Łž ŪÅ;¶( q*„¢—„^)P“łżmĖTžŃŽäų8_9œ˜FźeF%²¢‹æ:l'ƒ¢o¾ń{Õ~V™NŠfEŁ‚ Š.üе*~ ņü• ÉW“b+ž„ĘHa1͜ĘdJ—wšæ)æMI#¶~Gäžqü~¾GķDi“f¾Šb¹Œ+«©_Ńf /M2cį÷ō]˜ēiˆ“æØ‹į׉ĄĄS§ēųxƒ7ާ)ViJ%ĖCIĒĶ{Oc HdŸeų„ gŠ…©ĖŠ·}æ‘G²B+X śõ©•9ƒ=ØT] ²äįl½č’™²qķ§¤U÷»Ä©łā*šī¢pO±`*°Ÿ½‡üģHē­k$yצõÓ)1>vEĄDr$iZZJNž]Žhź4Ü k¼]Ą§H¦°¹`Įtjž’hłęŁųq÷1¤ŸMÉ¢”'^µ§žóC‰j:K@`ß-xƋūnSć-~Ž+‘­°ĪŽö,`YŸ‡4¹5Jā­ó–ą=įKWÉ,®Rˆ·ēÆ;›ZłæńŒfŸĢüq€ņž@~÷½„”édĮ_’¬‡ķ ĢX8Üøt\=Vc’¶nš8愇żu Æ9Ķ|éēŽģ2»]ß<}ŗND•KÓCō”h(śęLџ“U«=£6¹ä²Ŗæ ŽĻŃ3ąĢ—ś:PŽ5ŲŃß”čõh³Ž<©b2ł ~;Ś²åĄ„2—½‚“bóÆ/`©Å/«‡¾Ä0Ö. —ĶÕč¤Ę6/¢5~l8vnUćŪŽ“Ī Ļž÷Ķ?=Gƒś–ĀpƒöO?yŸ—ä!#ĢIß I“gC_ņ,sö nåī_–wHĆLÓ%„ČjįJ̲#?ŻU[Ķ&åég^»Ņ^5*YXCn¹ŻäeZŠ=0®¹–>"+‡ąCf[Ł pœł©šh'²ŌʝäÖĘ«QZ”7Ǽ¾–:t!Œć%Z98›¹rÅģ|…‰Æ oo[Ā‚Ž%d}B÷Ae¶ß!ÄÖ6'¹øÜõ*śćƒģģl‹;BbQ/:ė44{›f,RūG¤%¦ś—‘ų·Łm óćoŁ ¶õ·YZ3ŠLįKŽy œļMV#ń‡ß™%/‘oC W’®†¤_͈¬-2AQļę¢@Ż{­Ÿ¦8W 8‡?1z ”nt Žė<ķąc$$Ó”å‹å©i²vį“=Hń9» x”‘nņē):…E·j»v+ͤqš£*`énq[åHšNć—·J;h-&H2ŽM)NRĢ,*ʼ—ØėĶØ‡½/½ĪŪČX5E¬ŃE~PŽūˆ‰M,~šÜ’éĆŚŪ”ēŽÜ+m˜ņ«Ÿž FN€=æ2™)¼M8ė(£RŁy-ńÖD¦Ē¦č±‘@ ž!)Ū~T³±·ü Är*ņš+ÄóÅW4O½«ū$ Œć'M< ŗh‘€ō- ä !‹&ų>Ui39©HB‘ßQQ0ųŖ§@UFt·l¤Šļ2ŖžP#œéT¬½·æU– ²g„s›Į‰Œč×u’—fTģP˜b/zķµ'|T_|ĪŁˆÖUŹrŌŠ½ÄåWŚźæ„/µo{±[÷̤Y>Ōq!ļųf6z«”Xņö?šlĪŗ«£P¬—± óĢp޾+rS@Ź*ŗ‚‚Ā=U8’°Ź:tŗŚ÷ż²·ŁŒ£B^­Ī¬˜‡Ž7€‚ŌˆČ;JŒ)łdņŒ’ō~ƌåhĖćߟHhv©hpžśK„Ūø“­Žio—ąĖŌ”zDPJ\K[éf ē7§·¶jKŒ¹œņ¦»š¢“÷ÓY‰£s¢’ŗŌąXŗÄįTråż[µÆw®j“c é R3޻ֱC© †ĆÜŹŅD «€]Į×eőó;bo7wa¹Śø¾4p3¢NDž‹S%ź Čüü¼S™%ŃN.NqŖæ{ŸeŻźM?ļTe ļŗĶęÅIl¢!ό“é2H7ģB¤xžI“™[7>‹ńž*c6L%øÆs@`cŒ‡z"a(µ>ŪąHż‰w°[E»įWu hĢ)O؁ūƒ EK7g~©«Z1Ŗ„ģK‚W‹ų|ŽdpϘ\Ź:¦¬É”¬ƒįMž%u:ćö$„ņ »ßUžĶÄėφ%“‹©—•„ öƒĀ-Ǜг±8 šŁ÷ł°œīŠłCĻ&W¤ó„€uQ‹·Z²Ń5õĮ-[œż÷M„9¬K·'ʇó$QÖV/žcQS Ÿg„ÉqĘTń[šā/óŪIĮŽšMØq3Uؽžy=sņŖ-æ¶Ēw‡BSä½ćł åÜo¬“ÜØŅpgeW XPO –ĖȌKˆQe£©ŲGrüȃ…Ň4mż}Ä|Źļ”ĄŸƍą³r,’zЦ—#Q‹~½ŠKezįŲ×Ö[ł%‚ēakŃĀ9čĄ^” ”|°4śŠµ©Ä“,‚æ^å2‰nÖÄki6³SK­‡_)Cøƒų Æ/]…ē[āX!ūTOŁ5Eōl„ėł^‘Y¼"K Š?Mø=æV3Z½ (J’°3»xŸ¹Éņs™śÓˆĀ=TČ#i® …ņć;ÉÓŁū~É)jÆ•T.½tŽ@£ä*ll¶†ĘĒFćr'‹] tæ㟠Čß3Gl9ŃšŽJłŠ“ŒH 4¢%ž9‘ķ^‰ł1^hŹ3žĀü¤ć֟‚VÕ«1[©[³%µ .ī6=<āą™38Ó<j)Š©øŌĖ1MKš$Ź¢Š×#ŸGć ŗÕy^)ó×ĢēZi©$×="d4q‰„.Y’&¦ ć°hHĀ›¹|ł\zī‹zƇ“$8=$ó•O§Öō¹‡BĻfüOÖ:.jÓž”[€ŌĆÕ>­k3”ņöY6AĪĪb’Ŗ†‰ė’[R&Cj'Ņ՗išĮ“ü×~MāĤ/ęQ/EwE9 ÕhÅ·ePUÆi|OĖ uāŲĢĢ©¢½¾o ń…ŒRØ×¦ė»ŌS{Iz)u])1]†-žO«;mæƒsvüŗS4ƒ:wzwsC Ō/ĀŌZ’]ŗ¾ˆOj€hƎ²’ö°¼ėŗ¬Ķ¦åž"™³ķ‰qSÜå·ćA÷WęķV\¶'[|*\’øēč*œ:Œ¶läp] f :µ€±t“–ŻAPčh‚BŅŁLÄ׹Ā=ż·®Ūچ¶ł™m”TP;>°Ć²Ī“ņGhŠO Ϥė+oŚžoƒĮ’W]ļΆæĒŖU£)ŠŚ’«5k±)Šj¬Śj¢­AķÄŽ»V‹ U%fP5ŖvķÖ|¾æ’’Õs]æēÕysĪ›ĻuīĻ}ßg\w«ĢŒĶŸĘFź|čßž­wņĄś˜ŹnµŌSYĪ 1ÅyS” ®ėµ/§LdRt‚¦ł{xHĖLsŚsn3ŽČ$„«~Ś"‰ źMĮĶmē¦Ę•­»Ėīe1™“V¹+)gŖō޽ÉV«aawtšqÖ¦tæ„QąÓ~»ł8h(¶”t޽XŽć¾īö”éR‰yDéĒŅĻĶĒJļx%ĮŠ\č… 2Ć<§S¶WŪ-ž“ŗ¶Ķļyŗd¼Žo¬—ūµ‰Ō蚼€w§‰ō"“T¹“š×–Ė]õÆDw(|v|—˜­žģÆ«š¹$£ņż'ˆĀvÖD HĘy^/I—ēĪ%¶E¼t˜õ©ž^’Ł‘ADzV‰t`0o˜šPE5 „”§¤kˆĄł†Ö­£¦'C<šÕ‰u¤žĒĖT¬bYKņ¬&P{¾<hu^ļF }¾ŽJœDõāé¹t˜ " ŸŻņ[˜—¦_žD¶WV>ÜĶ_IŻśG’ 1ŪŪ¦Nf–O޾šŃ“Ō”#Œ~Źõń”üŌ“÷?Ūģ^=”ģ°ĆOœŻŅՙ¼SžąmįŽž„ƒć4„õwČR’"šÕ/4‰µU×č„ųé¦*«z(Ī3,! hT!½€Óī(„`b§IŲ…Ņvܗ–„‘Ō4Žf.øéīCĄ!Æė/ OˆŃEŠTŁÓš}i–%×7m2Ģ5—h¦PƘš;÷€VpĢŪŹJ?‚d¬Ó…ŅBnī2,URFƒäYk†\łŌŖĪō6ėI‡r±.¬}ęatžüډ>Gȵū‰’fUdœŅEs¦ņ°±‰Ot½r敏Źv\š“»ŻŁ×U/Oń4æjҾAŁüĪ9śķtLÓ~§&ó÷÷ņ¼ßKĄŖŹW¦+ói ¾ļ,kµ!včÆƒWk$ÓŽ9W͘R‹ą7be¾ęUŪ‡aBEÄ=Ńtˆ¤ĶwR­ÕµĢ$HīóG½ūs`„ēęŅčÆV¦ ™Q䎥TÉ @“}ꭊ>»P’ÖGV–L „ҽ»¹ń¼dĪ”z¦zU:»i¦ś¤,Ėą¾½?^`ü0––€VŁ ;É·°Ż6pńdI2Ć}Ź>As¹bžyPkˆėņSąé(Ŗ‘9ö&%ł§ā[§ZęS4*+„āMسYLEń_ybž'»Üņ#ŸķiŃ»xżöAŹ(m+kՓҰI=&å“(®*®Ó„øŻ!™Üvįē ķ܀>béM 3s„‹ŚW}}Čį`Ƀuµ &gJł®rH į".YO¶?ԟ)Ž kʅŚ„’~X唺OžŸĢD0„łÉäŚ[ՏS&Ša±. jی>æźŽtæŠxÅšo°Ńģ³¹˜žŽļĶßö€žæļ¹ŚVљČ,½¤* ]įe(Ąņ4b|k¶£µ„“3 |ącsv|ÅšŪž†ńéš)#–JĘÆ.mļ>õ Ps¾Ó5ӁEd•5=gcīÜōń‚hęäĮäÓ’’K2i«ó"š@ēÕJIżžŸ²“tTVīėz{6Æń¼|Īż|ךó4šVµŖš’Ś(żY†„‘1‰Š‹”×x ‡Ó±÷F½X½qĪÅįÄNæ-ź(©ŠĮ++j“œ”ēö©¶¶ŽŹ4;n¾ēęIĆcIAL;ń4¤Iż£µžšŌ$F~E‡IwˆhĄ•źé!ÖlŽ®`2Ö-zĒ+b·ļ H+æLā_‹©9šV%T -|<É0 øŹ®ĻśŖ@ÜD³«ƒŖ{Ü;˜ š½ix‘H֝ü@.øß¾CpčĒÅg:öp£ĮµV­eCoŲÕóŸąx?ćÜ~Ø­§Ž\zD‡Eƒm½[÷‚s³ųĖäDŻŪ@Āh|D¢‹×•ęÉo{Š_ņt©H“s Ū|¬BŒ®5š’ÖĆ Õ‹”GRYM«Œ ™I9č½pyßč6ķ±Ųi=±lŖÖīć8˜93ŗ…DzL9–ö«GĆ£Ęy„[]ÄQķ”ūoOš€1Ö̵iJŽY°ZkØ@ōģ M˜Ę$0¼‰(‰RØŻł œ™ŗŽÜÓ ū»ó»F(UKŪźYĪNlyÓ¬n]Fz›+éĆ^uņ›– ¤“ŻŒžP f4CT”B42؁ī$ü±Uņb/"\-/‚¶.É,±ß+Oc×ɕŌĀ5:VużõLætųH£k•ZXEīŁĢ]眭ü4[B0ė;Ć\67}Ė2Ć%«|„@9Œo‚Ąœb¶˜ŲLīx]ę ˜Ó"Ó4‚ īīßźƒåĄUł)TĻęzŁ=Ź7“ŹŪ™a `ń™øŃ|–^÷lŹ—„ĶŲ„ ĪĄeWBŃDćżēD]iĮé²^śéÓ4ķä ģ HY ūŖ5'Łį‰Ü˜JbHXO€śo:ßm¹É-C˜¬˜Ę(²ģ>yt¦ł ܀^uz© yX”œ[ĆRųų뱛㯻Źē¤IP2(婀ĶVšŠ^b‚Hź{…õŗ†¬”c×ņ’A½›«“Ži+ēwŒ9:MŸŽK>+o›ų62MjücāžLŽśzhxZx§õ4õK?#ł@æŖrÓń|§DŪzólDR S’«’āP»cėę-žb“X„ö¶ßł— ֜ ×TŽžøĻm“?®ć²FJ¢å›…ī\™Ģlź/» ¢/¬J -Bfł’AéŚęV”¼°i\v/›U::ŪĪ^ó}ķŁlśkzßŖdJ[3`× 5ŃäĮźŃ*z±cŽklļDeg<\wĪŅ•¾6?ĄĒ2?1xoō€W’«…!īŹ›D£ZH†7E±OUŁĖ[łĆZé’qMŁŃĪŹĢŹelĀ·R˜p$Š˜0-X‹<żodĪŻYž„Ÿ{‹óĀÜ^§E©Ü/"4»7ė#•}£ŠZ1@Ø›‡=DŽm,\37|ĻéėIū>žēģ‘u¬~&[ÄĄjo€š·~tt‘ń°0 -ŽĪń3(īlīQxm;’č`³ža›LgīøCN--†O łÓ,NżHź½§UOķ¬TūMęyģ³Ńo›,«ŌN‰ŃqL ›Pرh (eF:önJ%}eĆcę„7/•ŽŪ éoķŹ3ųōÜŠ[Ńpy~ŗ–”hTŅåĻ— OĻ/<‰„ćtrĀa“ļŹgģŒ4&ć#õāa°õ źĮWWīę>~ˆLŽņDe…¾2J1 W IdÆ0 AĒØąmhj¶?žßéŲŻ;ļ[·T[–¢°Õ^Oašt‘‘`“j&š9–ĀüĮbB[Ÿė{‰ų¤1PŌ'õQ„…żłgōčüŁ„OˬhŪĀ‘ .‹Yčdóƒ"™˜ĀuJņ»;šõ’ųLųč°£‚ī¼BBŌżŖ½ ·s!’Ū7FĄ §BōĶĒü·CݛźīÅä—,ѱ•µżˆāė¬_ÕŅžŗ„¬~D–Ÿ9³”M ³Ēmq†ž ‡»ŅRżęN2“0l©ŗ¶Ióć½Yŗk†ü³¾ē:]čłbEõ\X4”W±­œ>é–.łŖY#!.š!±ŠXXrĢ)%X•&ˆ+/JAM`ņ42 ØA‡p*rÖÜ3‡…¹v‚…x%!ā¬żŽŁ\ÜŻ –‰’{ŒÅذĻØpŽ×QÓ±7€ś«Ź?źv·8xdM+h N“¬ž1r_~-ølmsiŠź'ķ"ĻŲb ą«"ii÷0$VLŗ×(4f—'ēś<ó[3+¶mŠ4MBTz® šŽžÄ«6šłöļn)ģsŒX+·«ŗYŗQ5Yf°°2žl;ą€K)zœ_aiĀĶų`± Ü rf¦Č`Öz%qĻDWĻģŅLĖ—[Õ&»…ĆŽo¼ĮX¦7@e°®¦F–<ź“2õ4žh;SwFWx}ÆV’OM§ķ™¾ś5ėĶsw€'-9žŻ0(ŚĄwŖģåīȈå†åŅŗ¾ÄkW«ęN³rā{$Ē­Œ;‚šµ–£˜Z6pÆä•š"¼ō‹,śš¦ö¢’G p;V„ Q.ÄęĄqÕ\óqÆ\†¦”s ōŻŠ-óP^5$ü–¾`Axmš2!gģg HĖ<n>Š|xŠ–ó>Šõ»ÅaĪN㊈')„pJßa-WÆ³|„82ż†v؈d]ęhH  Ģ½;õ`7࢔ֵĄq,V“müé3W6;n80Fä†1 įL8Ij~¶X±Ø³X ä”ų„? ĶŠČŻ»­`Öšwz…Ķ`ՎōŒqs˜Ń¾Rnż™Ļy*éYGÕvÜr„ÜĆłų)-¤C:?ųó%Ė„ŗ. ,g¤.%eõHåøø3`*םšĀ|•ūgEB¦ŻźnėOAå_¼žtĖ‹šņhCŽ=į¼ķ„óĖ;2G-µæEmo×Õā9]}’F®0ĘÜ΃šs®āæķb®³«Ų ÖĢ̵;W=Ń$ø$Č_–.”ˆ<±ė Ā=Ųö05u©T¹ęŌ ß"s*śĆyā®jÅÄÆ–ūŒØMKŠ?9õH#ž3īŠ„żžÖ0ķõ¶rÆ_ ž4hkc’ ąJL('ÅšŹ}uQ4œl3µ’īõ¤Ķ՟¦©č B+Ż «mx8‘ōޑʮ’­ŠcÓÅÖĶ«?ÕĪā=¤‘JƒOӏÜ8åߢ9ł¾Ō*Րæ9Ø"ļ “žÓ uTāÆr]Ę?ųօ_h~gdõī×ü uŹ}ĘīŚqn\uųĶpų3UchłŻ2Ó²`؂`NŚ}"sŃ׎}¹`a@o”"ĀcōKM³ł‡łé¦ Ö#űĄĖr|č-8”Bp-6y ę•OŽņ'ģž ³ĆĀ< ź#Lj$Ŗ¤š„ķķ’ ”Ÿ¦^Ž|?nŽ–n’Źl~Ę_ųÓ*ƒéT_'ĒÄrŽŽ†żgŲ`čeīsĢėOĒ‘Aö©ß›Ē„ļę¶ŹČŒ {JK”oŁŌĢ Z*KæŅļ[uؓpęÅæ±p“?ņk­15Ęā"Œ>¼Ó¤Ė°ņĄÜcŁČÄéRqó°č~ĖWāsv 46{%SśŃJ“sʄ=ō"—N]=ERŌ~3Jƛć,3• Ÿ<‹‚Äæ¹'-šŹ%ėK! k»ŠTł¢i&gG omO5Ü{2½_š}ŽŖ™Ōa¼śS/Æš¢I‡>.¬Y$öś²qŽPŗ}"0Ÿ„—Å™©žŪČr[[iȚJF”ā9 āŸĆÓHÕöõ§_¶Ī‡µśŚJV4mpśžWäYK7jŚv={ĄŲ¼óŠ.ł³=&́„¾¶Ė6,2u‘Ó-ך¬™@ŽÉ¦Éša°!t€‚•:xXS›ĪčüH•['|:M}*8‚Źó)bZ¶˜ĀXŪcįk¾ÉčRÓčG…e£eŠ+«D ×ZŲG1u\łmķ•ŽXŗPŲų+K¶õ3²²ÕÕ£ķeĮ³Õ{ ķ`EŠG™'›ß^`Ŗõ|_ĒÓčźņų!čI()õ/Z¾ķS,š–}źp}ÄĻź”—-JajYęČäµök3źō•[Æō)ü]Dł'cµÆg½ś0eēJ_ŽĀ¢W³A甯 |ŪO4Fl*¤Ö±Oćā›h<žŃņĪ}Cqž’½0ƒ@‚Œ5.Qī„uūßŖu(Œ†z–˜1?­ŌD~9ÅjĮ²ÕÓKGō>Ūš‡«ŗHņ¦<¾Ö6KĒJš÷œ‘HMŪĖ% Ä©]Ć”dõ_ÅäX{Q°“OÖ<{“Ų8‘(#_ü©ī»±Gō'W?µ5ě[źń‹ ŠPlPŪĖ÷ķąŠ'Ė AęW½ü›¦$5Ÿ'.?'¶¾j&”¾bJņhגĄŗ¼š °ĄÜ×;“{™ßłaČtä™@×o#ZļŠ”Ļö@*×1²źłéū‹2yī5éü#žücĘXlėĀ•Ø`CS„}ȌH¹Ō=Ö;|£īĶfz"Ї+UEĀ£Ø¦–"~EģBųm æ€Łk™Ų®Ź›Æśó–ŠĻwĞYx·DSCG‚nÅ)ęĮ.s¶+¬žšh–‡£%›¼Zr¦HW~ENĮtńvLrŚ»Źx38ŁóŪ"{ā'ļ •æĮƑ»†Ō^R§Ö…_Ö-wHƒY÷ŁßŲśešµ»<~>ĻŹ-× Źõ”¬e¾et­n4o#hø.üū$ī}÷f¶I5 ʹAL=×DyBV¢Š|™Ÿ›)ķ6SÜ6v.«õüČ»xv€dŠĆ5 éq3“Z#…œ ŖVk\·9…-Ķ>7īé%…`ęéné?+]hĮš†fńņŗ*N&Žłi9ōPnóKV5|½¬æÆā³›x“śžö™¬…A=Ēė _~;?/3é Īʰć}3¬£Mź×†Ć‡(`Ī·kķ§ķ«‘6“d®_č«ü5ĖqŸc TÆā“Ÿ]=ŗÄ%$lDĆSF-pQR˜&V™TÖŻ>“–)X½ŻC/"šå"Łķ(“Ń[p ĄŸa±ÉÆé®‚ŻZ’$ž]ékÅōœF‡Żń6¶[č`sµ|‹oĪ`ž‘ś%Ögŗx†±”ńYł< a½^åd‘Ņ÷NÜŚvēŅį¢Vnt=ęmüŻ#lŪ’ŒēVŻNĪø%Ū+¾@F`•ŗe<—ZMq}šV'Ž‚)¢$%-N· 1E’ĄØÖĒĮZšk[ĖSÜ[!öHb#3Ģ=×Ŗˆ —äuügX|™dļr!ÜåČ%żz/·»vöŽŲ Ō'Ö»¤źŅš/HͶiĶ€…Q‘įėŖASĶĻø”…„yķ!ŚŽ$XŸŌŖ!d²"d9Œ†aŽ87æ­±QTņj9„ć°YEüjšUžŅ†Rø—_ü s³%æ©9 š¹ÅYŽszYĖ$©lį?°Ā·²ÉĖ8™W¤$ėQ8† U½³ ‡ĮŗxŸ Ö<”!ĀŁąŁ©į6¤ goQ#‘Ę Żō‘“¤Ģ°ø¾rƘa0}µß…ÜžŽ'ęmÅńńęÆZ·£ūŲ³/Šq•«õ_GĢæ¬ĶŒ\é¹g!¢®'ÕĄ5ĶĻēäæIźŁ®­½Žło‚‹qÄ©ĖjAś8® h„}æĒu7!śSļŁ_…™oWk§†7€Ęņž ÉĄeÖ¹!iDvÅZ’ģ63#‰ (š˜•ū‡z˜īN K»Ē”šłōß(ųłćÜmŽ„<ńCüvb{ų¤™5„¼)ƒƒ…ļƒéŖt+r%›č’ųšSžųkn_Q‹„6HŽRÉq§ŽįävxČŠkœSČō·m׆ƓZ¶ŅS䏅·³O1Erä‡c’IFŁC™ļóėģ€”XŁŅzCõ’œJ93S“<~,„;ׅ^āńõSÖćĖwŌĖĀć„éšZĘ»mšIšz•Ē/¬’ßičō»š·Mhü2U‘Ś÷ĮȱFc{SU9d¼ļ„yą>BĆgo-ĆĪԐ¾Ņ]·źŠ‡oęЃ©6uަ}Gå‰RČų?»nż@‡…cš0KŒ ų6Ä ¦^$ŻŻd’ģ“f”éNp“j½Ę”<²ÕŲÉćaŗ®ĒąŌ¼š«<įŅIæĄ©¦IĒ“[;i/?'}äŠ* ÓK† WźĢØ dŃņr\ŽI'/Ÿ~—q¾_Å(l5šų`ŠŽĻeMæśƒ}HŌ+¬³öːųi÷}”@«Ÿį(qĪÄéY`–FŚĢĢQ^ ŠĘ éUȞ2)ĄFŠm›ć™wk²šE=ŸåźĘæ£I…ś“øžżCĮ“Ō­fןØOcšmгžI¤·ņ„$Jü?„’8šń Ķ!•]W©T²w5Øīxļnŗ‚_ģ †–ŹóqX-7 -õß]P :DŁŠč·ŒóÓµZs›zä mzžƏūŅ$j°åBHž<bhØ.·GH]¶øÕäÖIœ3Žöy1;ųNŻŽs‰+˜š&ˆ#¦ūĻe'åŹ5P}X”ŪSś»šv? b`¬åv¼AƒåKyŗ$Ņ'0ķiŠIŻ©Ÿ˜~Ā”įR?ĶJ?ݱšŸq|lZ*ČWĢł§éFŹŒĒsr8 .kCĶRUcišŁ[¤ŅL&äŌÅ É÷V¶+Õh kؘˆA{ū‡]āŸõDJÕ±Ś&›§beŗ³­"! ä“ķĄWœōūē6•Ž›2ĶĶ|µāž,‡÷įšaŌš15+]UĀź ·’›61ü½kRƆ¹ĮO­vhčĄÖ®tLEŹÅ˜2Ź=yįZ×xŚ‚>v;ż'= ÷ ņyņfß¾šw¹o±ņŹ ÄiŽ©õŽł‹įo™z,ö5xœ'°mį0§¤–q6Bj€ä÷ö”]«ń^Į¬ņIĘBIFbŗĄĀÕmž6äéQ&<„掗HŠY%.čōąńCäX›PŚ×õŽwify[şPƽĀüå¢"” Łė4×öO'»9•—Ż÷čń„|’QAM˜žƒV—VCæB¾N P0‰äWŽ Żó—§© ū)Ÿ©W6bį©h®—éUUE^M¶’& ƒüóV&{*Ym;Rś¤„ĘŌhĖČ5MĪ5Šį¤˜Ń…ŪĄŠhŲŠ°³ !ÜęĶłüc»ņ‹ “žėY8¶dć3ųzŅĄB0ų=””T4<ŸM)0ńž¦Ū³Ķ =Ū>Ó¤‰½ąl¤õ[¾ Ūy Jų©÷m”;łq^āó}»ŒĮūŽģć.?īŠ™3%ysX¾(„Q2aye·‹jeóeVĀī9U{“É |ōĆW,ĪK3-Ö&+ ņ-Tų0ło·ū“ä?ś¹¶-)m4œ¶nĻ䄉• ś>Ė&)Ų‰-łöń‡€\(Łś&eę‚ć‰ļ'ēß^©™ķZ†źŒ›z`tÆcóćć|”‡jŁĶ;žČ̼4ūœkCx ½źė{(üVvXŽŚ0hŠš•|ogĪŽ¼Yn8ĪIĮ®–otV2éŖßĀ’łeü;ø Ֆø„ÄÖH;ė93œųćśq™Łf5ø#žń³’ ą‘\Ōf&į“ōŹv=ßŅ37ŅĀQļŁ¬ķšDņŅ’„ žÆ’kü Ö;|ÕKvŹ>õ?¦™aā§·N½į¹ńt¼k¾ŠļÖd†~Z®Ī ęśŅæ‘“yČüž £ūÄ2Ź€aŗ„…ońÜž‹_£Žæ±é³XōōžOwc·÷FÉ{ņŪoÅ Ź’<šdØä8Ėzf9żęS`„Ę+o1Y~ŗwś¾5³aZnN‘Ņ1J¶ā‹-_˚Ķ:~™®Ę–¶­³„yM,0ĶS’–TRpońÜ= [¼Æ«Ž8ѰÓ2tnå?Šd™äćKo Ń‹ļæ…`”™åĄųxGU†Éīž¼~¾›£7ņN?k|æö£iø ī5o‘šJóQ7Ä3śųV}j퓳[Ü~éu¼U9ü¶i} Ÿø6Ō…‘ €‚čĄpJŪ;IqĶ÷Š/¾Zæ©g“®1O"*lź~ŻŪ7•EY(CÕSs6@wϦītQ=ž±Eś£Ó]ū:+‘T&0ĮX»Ž”8š†Pöń”ż)šž± 8Ł6‰Ü'±ŚŖ„#i¢ā®b=H=°bv ?H¼œ`øyØŗĒ ļõ™-ššč¼ecÕž6V¬ōÄŌ0ä²A‚ĶPChMUQw›ēźŃ{óĢ/äƒ]ŃdõVDÓ}Ÿb#'ģĘQ¼+Č ‰ą?‚°õö×W‹¶†§¶tĻ„Z&]}{œ!f~»dugB~(œÉōō{‡õĒ—k½)āø«¹Ę–Hi¾^¦•n„ėŖ{a9R?ū= bZs,ĖĶĪwµičŚjšńQ1,ä|QĪ%šĪč—:œįīyR3ēÉĒĘĘŚģ`„u©£©-a!|õķ „O—ŅuIč[2<(h°īüūĖN †ų Éqi`Jō¦ā°3ę¹€~ Q{šē‡6žNd‡į|÷ž’w;Ų4ŸYxįż1š:M0¼P’D¾|w7™Lß «‘ojOx¦ŸŹĘ=V^Ńæ“2ö)•#˜¶œ7Ģ_å }€ŚQź~ņź;{¦±'"J®$¤2@Āą‘sśČ#¼ł£”¼N#čJŹ”õn³A®¼fĆŖ»ZJŚČŪ&ž·vR‘i “É8/H˜•¼ąŻ“`œœ +FŗÖĀmīQP=ż•s2®cŠØł›°br)žé©ÕųX¢C§~›21o‹^1[Éā…Ā'Z§gī$øpĄsŠł-ÓŚ{tsHƒA{ÜP…„'Ÿ¤Ėv„f#kfŸä*z<÷žÅbŽ#/öV®x,8óī³–Č- z–:`HĖēsōŽ“ū§Ģ8¶Vėj˧ˊG¤7ń?Č}É+RǜäÉ¢iøčJ­rž#Ģ·×øå ¤ĮlįP‰§¾E­éŠ5óčx;£āŖŽ‹T0±¹#’ü˂湻/Ļęµ:,Ć  19«õ«•C/^†œ±hŅ~ßD–}ĘLÜ!µÕ¶AŒŚŖ—.»DŅ¢õ“ķĆN“µłkĀæŪ:zń럄LŲ“ø£m¬¾‹"ų­fģÄ@å–ū×C­ĮCD•6aBõßė_-ń¶ŸOLŻæ’"Ü2f+ĄņĻĆš×OįwA·żS–žĶ,ʧlINyĄ²µŚqL Q|ĢfŚ2Š©ŲH4RßļpOäD†niY»ŁāŚāŒ_}·W·ēŸuU’ «œ÷ µ4óĮ>Īa>šÖ%<Ż>žŌI(ŸŗY‰²KSÓ³ŽÅå§Ę¶F6+E§^–“yĻńwåjxZ„,>ߝ<][_ \„5U‹ ZӈTwU šrłEx/ē>½ģ,ZĢø.śµVą­FŅŅ€Vœł{¾KĶž‰ę×%M܎č>³gz’‹īµ[!HŠ^B1÷võø£ZšJ}ĆEŻrµĒČæ¦9 Z3†…Ū’.]W+SZ:;5ŖŻ1m5„†:÷†­?żņ»GŚ; Ģ±?¾u+w+Ʀ5@ó‰D…KśźŽN••à śŗ¢«tūŚ’ѕy®ń¾­Ig©¶’×¾'¾4õ8b¦5Ģ/-¤’ķ稊x>7£7>Q’\&ęøCń]k³)Õ#BքńŠ‚’śmŌD}dģiP„ĒōäĢni_ßŪi¾īµĢ—a7¦ąœ¾#Ąƒ§<ī-ė_LR£Y`±‚ėVźfśJɓw@)”°PŅA °WĒD–±7–W×@y£»ė¹tSxźC!jęąŲ€q“' i#L…¼sć.˚Øc‚PāQŽī'}÷“Ō:k8š•n)~Rš1#Ę«ę몘U•ÉŽEņxĀV¢Ÿœeåćś¼‚EĶßb2ß mnWž«†č^ė½õ"å€MØ«æU:®:‹£‹éØ®®:‘V^tEČļvŹŲc›”{Ś€^óčāeŠXżwjņWģæ Ź÷:óŸ~÷ ņ‰ŌxiŗG ·vå§xčœĘƒåųAō‡×ÄŻ§‹;‰­2+F“™ģĀɈŹFŸVBŌ”%÷:wƒ¶”åš”ł½é“šŻ? ˆ&³-P8neźÜuŚ…jx>~X墹t·cQhµH«Śųy³ y‰/rś›fXeŚļ׳<ƗŹ*ģ ¦˜tŖm‰Ļ•Ź'©Ö…Ķ˜+5õv7.mØåKY0O¤.Ą©¢ZėÄ 5Õ“éh€¹hišŒÉūppŲĄÉ1 GQ*ö70„Ėl’ŌJ3z÷x¶BŪ]¶/¬0:œŸźw†›?«īE²æóį_§w£Ų±˜yī3GQ5žxDIłĮjŚOA«W‡ß¾Pøō&CŚ#łŚKDBšU!H±²*ŽhČvõ”0ó¢āžæO'ŅŚ 7SųhMÖż@/”©ĶJGy!P­ŖšC€.žß½7ĻŁYÆąņ ÖŪl”|/q€ł Ƨ ü0>ߏ VōhöĖ!õ’÷{”Ÿøūns ½Š ā„#Ļ_1%uzȖ”UÜ]ß7ż]Bæŗ°Ŗ6ɍ˜vö)xciŲ0ƒ?PŽģŪ„Ø:JHDŅVæ7Ÿ\PŠ/RĢź^µI¼õµ'…–Å örßźoP!T¹(zIøŸķӘ¤®LĶŹ:¶lžōüm1óyPk7žöĖžĘ9!}³E«2ķŹw~™†ŸP«žŚĀ$z§‹jHĄæ„ĪłÖYŻG™§'Ā[K­{°Ū#¢ōRĆłrĶ)9ĢöWY!-ß?_M:ņ›Ō"¦¾Ä~}@Ģ·|’äE©…’7T ›ų՟žŌÓ5Õė\gæa ī,›™Œ;Żŗ-ĀÓrß°ÅųsŹyC¬ åJ1‡Żvm8½ģjpŖ ³Č˜C–źŁéÜz¹fŻJ“^§ūÄžūzbj©v7¬Ž=‘ī,¦PĆ«JŹd͆,\‹-ķüÆ“ļ>ę {ŻlōSH_üĒó'’ōļ…m|œmIŖ­*–5łGNęc=¦ūņµį”®ßąFĆdo ‰¢ÉpWš‚˱¤yu ūFµOj>Zž ۚ§­g_˜Ņ䘓«#ŚEÉ’“åšDG°œE³TCßō0~Ł•»ō¼=ŪĮ„ēūχ‰š tI²?Ń6½“ ŚŪ$BUēl;U I4@ń Ć0f%Ńź:‹:…)©8aśfŽøŸå'ßŃŖĄKRPj\Śå/Ķ­9Ÿ,¼÷ŽĪ#«VmGŠ#J”WźāiŽ{†‹ņŚ¹ēœ¬Ņ 6æń/¼9XÓ.£‰Ļņ 5\ÆPĄŽ‹‰”Q…Óp@UÕKś­™•1Źö†ŽŌó½Īq<>Ę0”ßRvs-¤®>üøhˆ2¬łT••+ųf| >ŖRųxjv|(-)«MC=–Ņšį©R‘ ÆcÕŽ,Į?~ęŠF1U“ÅĒél4ĪN—Žž¹Ÿ,žIhY±ńĢ:“ÕUį)ä‡ģ_VŠ&óücīū^^s -)ƒž‡¢•®£éW¬«?OÖøČ‹kO¶·ńüĻ,gbˆž, r’œŽšMŁžWXŲ!<šĮŽ…K²2¾r³å[Ł×–y&Øź"ŗ¹,X›ś ?AYs¹yž»9ćøÕ`BŸßĆčŌ]ҰŠVÉvpD°#$żśf{ślĒjŹć·ø}XČŻ%“-5ś©Ń™Śź.@ )«»C’Ļ“éLŖ¤6'ÓižÓµ)…kźTˆņI&Ś÷¤Šų ’āćL†Šs͈ķę-WbŠeÕŠŪšßL’$]iVŖ<ė'8 V €ć°ątŖv3•`[éčįĢ5ß^>CvēYŪ¶[e‘lĄciYĝ™0Š_@^÷yŽēY„0żR’Ė­8¬×čØ1ćš)Vü¢?×KLQgaµŹ!¢÷0č„~|„tpÕ|353eiÖżm# š 7 BĮ+^1ˆS£¢é_¶šVŪŁņž€×ÆjVcÖ%䟵­¾p˜Å!YÅ”}4ŖdļŲÖsœPžµĮĮaÅĖ·‘£B­š•œš"©ĄÉ=>2XŸ*µ1žĀšŽ w.2—½"ĢfØrōų @§Ø_$$O›ˆĆN5ŹÅIĪØÉo„õæ6ģvm ž–ft2`‰ļō…+†ÄĒA5ÆŲ6¬°Ą?§rƚų4<7ĄĶģ\X™Žßü¼¦«ŲеÄŅ?K óćmżŽwoõ‘įJ¬Ÿ„U)Ńį„ 1š¹e†³Ļwœč€ō;Śóßö67Q\āUBŹ’†šPu Šõü÷ÄfF¶ÜrŚuY½Œ%Ūō¶üĪZtlÕZhŠ­o"ŒÅė°¾Ą  ™ČÖŁŒƒ”«ÖŪjźĢĆį»&w²9"WV‚Pµļ F½ūļ8Ļ*ćėY(¢ ŽÖ­V;ExH£<ŗŒ©<ØŚN[Äņ/V‰dŁ)_ųį+Ķgl‹ūb!œ•Ź»m{‰*ŽĆą<ŠÓĶä˜QˆāŌ9’)N„ŌĢ$Ć_Ēw`®MZīkējø2 lõ+EMvIÕÆŪ7µsžiSŒ4ڬM&=æ¼?/“Ļ8ņ¼‚}Ė[¦ģdąŻoߌ„®˜:ņVįH"ćś¾æ‹iÉÓN†Ł= %‰w ¢żÕ,µśŽŅw( 2³Œ,xOŖßį,qą×ŗ3ĄŃī˜N_Séāy–ē›>żēūž¼Ųz)9؇ “ {!=c„2ŗB­ĢD×V¼8ŽznÕZŗ1#ü8VæŃK÷QįRź®…P2(ćÕsØ~—ņå;ĀĢ_^)x ¢=F=%^RSSĮŒŌcČ˹‰Č­rEšüe•Ež{aM7™”¦®ŽŅ21s•×n/Ń4K E=É]Fõ’xAdµą‰Ķېˆwŗbh§ĀRk°Ē0”bM™ž)2^DŠ…WP ČkNóY} ”žß× ČÜĆFĆø ±7jœŗP~üHA~Ū“L;ŁsžøƒÜd8ŽO»ØŠĘĻĖ+7D”żv¾łĶNģH“\¦ūJ§Ŗāžčs]č‡×ĒÉÄ‘r¢^^Sk–E:›¾:ŠbDq®±EkÖT²Špl}?ęfV#|-zĮ'›Ø[€D’{õį|ž“æ„ųĪķƒuīŚéŽføŽ§Ń ÖŪU<Ū2†£É3äj«Æ1UĒt‚†/>Ć ;D7Ø{6śrŽdæ%źų.›`žĖVĢW ? <_Ī—ß.·>« ŚWx€čJEŽó=åB†1xŲ B’ ±OQJš£-BŒU ÓĻņ t­X£Ä§nO¼0XĶĄI-W„a>ŪąŌ‚,³Ps”—‰ą{¤4fų¶¦É‡Ÿ{¢Ķä§Ćģų&·ī|…‰Ä†“W“/2l[”ag©¬%ŹD ²’2®(Ź£żä§Aū•˜uąU¤Ļ^–K'Ÿ/Ԑ_ ¼Ī,7“QōO9v%jü>Åī„]T"k:¾Œ(øŽĘŲżŪ<{‚$#Æ$ŖõĻ÷Ā¢SgÉ7Jr ŻæĻ õ~č ü‘I·.:'hķ¢Ča¬Ž¼ÉYWI}Ÿ|•9V@{(wś)–ó£²DrP›¹ē/‚·Ćbź®`@ΰ¦2j½lؚĄ*ž#p•=ݵćDĄ³Õ×=q†JœŁĒŖō#Ÿü˜aKĖä7ˆń(&%ÆėZ:įōnĄĖWāčbGĆfsūõ’a4įžA©Faƒ„!3IŽ=Ɇ±õ§ˆ@³„”ź#ć„4žwĻóśyaŪXœ"BŽw(łwx_f°øµzJ@®Ć»Ņ_°_ē±]™WO~%M¾™4ęŅT²śĘ^ ³čŗ#LHĮ”h¹Õ}MÅ&©/™Õ¤Ä-d¦j½.ßļcōN޵ōšœ0ģ9m|ecź"J„Kš3æ,_ ż“Ę[0/>ƎĮ I@—:.«nĮl ĮÓ¦§I+I1ƒÕ㨠ŸD‰~“E£ĘsØ,¾¶6y¦Õ?¬v±™č‡ßĒÅ->1Ł’ćÕ=;‚ī: «AŖŹŗNj;±fGĶVe¾¤­®Ū”ācīAj[Xi$Ż3JŽ·€•ē L’,Ǥyē¢oĒ×ö¶Ķo›©®“¼³˜2mK\Ęǜ'ÓTč5f“$pŚäU­‚³”ʶīyø •ŒE¼–xŠ0LćAT&¾ē0ÜdSĆĖŃč^Š9˧>śŖšqõŻn®(AŅėkü¹†ų÷®•“aћWb>+ā’µ)· µpź;…ĆZy£Õ²k-č:¢Ŗä€­÷ŸżY*&Ɠż2'š×—®cM ü‹*zxĘĻ#LNM «kžGɜÆd™‡Ž ś%Uü¼k“]łžyz¢)D"Ė›†Š0ó”ÜżāŅ“]*÷”XŁąˆ}ŽĆö”ĢĒėK/ķ’*ĻūTE”6*_ćŹlZÖ. =MĄ)Ņ$eŪL–§ó!/™%¹ @t•’é˜vcųōl+Ż’¼Ī 6½ż÷N¦œ_ P¤y’cd§ųö Ōń›ÓļśSó‹S}¬a‹ ųÕ[Fvŗz9‘«é"Åņt„B{rĀŖå#ŅSKütōY«ž¾ąĪĘVF9•æ„ĀäŁä–†Ęoo›ŒŲ]W#¾”š0ź ī÷¬÷‚†ćˆk ö©Ÿ£3 ØžØöAåsJßĆūĪ;]›3k, æxHĖŪ“ČU( “‡$b?ÅŌņ A\²·Ģ·4\«Y<¾qÆū^)Oōį)¬Ńęo<¬óW‡QS€–98č6]~Łž‹ŒnfąĢ1,@kWkҟŖ×į!Hx¤ƒW5\ņŒG:ønö^ ‰ē’LĆć»^„Ļok@$r€PÓ+±2i0U²|éƞCżChˆ/ļÆ;fyVn <8>ÓSŠp’ÅÆĪĂUК3ČÕö–ī¶=>Vk„u’ڱ.%®OōJU1ČŽX½ČGž(˜ąś]-łāėƒéž‚aēæb2u >^,L9iÉX`' „“f·ó3kęŖÜę‹ņ?N*ߛ×śŌ?’Źį ä¹Ėžvß®žąXKøČśŲ¾»šĮ]öŌ;Æ1їÖĆctž(S‚а"'·A®ik$¶Ó­s“‹$s°RvŪ…YԟŗĖÓĮšßgź³×v¶PB/WŠ“DŪSf¶HxÆmü|"ן–(_SY^7ß&Śń¬Ų’Ķ‚BÓ„’MhĻ`cOÉ7ąĮq®L–_YDoD–?ŁÕK"̐/OMÅóß«#\`)g%voĄ`ÆE,čDČć©ÄŖ¾^l·Ž‡•^”…bņ#9ņ.G+šķć|ҜK«šI[S=xÅh¢ÆŲˆÕ²7ÄLg4ŻĖ;O’óūłėEܝ LeÅieijBˆ]r”³p<–EČaą;»ž—'›,©Ł}6¶øœ’qVP²’Z.³ń¦Ö«ŸāąśĪ db€žĶ}čų]ŗ£|Ņ:-ˆoÖõ7z/n½2éDOņå2][”?ņŅ“-źłkI¹ĻTŻUBąj{ ±óŖŖ}'DĻč¾Œ4ˆ›­øjU9Éu± ²ˆjqóy±k÷šFŖA¶ŖŗéŅŚŸuh“S„ƒƒaĢgO1 ‹_˜E½Ž•Ź€›1,'lXśĪ,ø½‚Ū?‰ķ#¶ńÜs”±yh’mįķśŹS(¬žČG±<€zJe+|H[:ŚXfevĀĒ9*^/ß4%Ś„5Ī]kYAē5Ń!lŗ:Žƒwše.ĻæņįqBśĻ‹& G¼(Š€0`s”˜ģ¬ņĻ>ÕŽ5”Wy“Į5Öä'—‚ÄĢ~ˆ½ƒ©ēŒ‘0O8€­=¬¦ōāÜ<ŪŁ³ļĢ–¬»Ā€UīŌD{ÄyźĶńiśÉSPV%ÄDü9ˆ·žŗL"ć~æńŃā–$JŸ•ؐģÕbą~?:•F掫!÷żyńœfĆD:­³0‰ģ£.{Į“©·ÕÉc7‚-zŻÜ”š­qŃ«ćņ­Ēųźß>Æčšąś%wD7ŗŒ°ĪŪ¤x§‘E×Õ¦,'ƒ{Øō™1¼–¼‘Įgņ:*jī“tŖAjwg†MĶ×XƖjv=mœÉ{Š˜–ž– ›HŽō.Ł Ź>a#²Į"ėį6½ėNę6ĀLyĖśm*?W„_ØżÉō²­(é[~ņSi éxżē¢ź[īĒŗĢŌV1„é‘i €Ā9¼™ņŠA„µ÷ć¼ĄbČóLē®·ž8j£”½AlŠųLXżpSŒ ?z¦Dž³ģē¹{š™Ŗo÷wČ÷wµPįWśI¤g%ıźČŸ¬Ę’ŸJnPm½gž®åč×g8·ĘI‡ęwõlUH|X}_cJB¹ˆ0™ģŠätū$ž¤õ7u‡č:»;{Ģäõēuoüõ– Ԉ¢«kŌ××k©ŻPU |#&Ņ*`xjć0, k÷…0ˆT˜ń\oū†Wדž†‚x=ewüp²&I‘ØWL@ƒ[Ąa@ųŻØŚ‘)¬Ö©u„Z Ż&]į/ąŹ#–9ŹžĖŽG(/ķŖ—OĘęĻ¢ĮĻ÷qķOŠ&˜:JLeQˆķļ×2…o'öįE(ńŁ©7m攞‘Ļ|iVlŒ3z&'Š˜ŽāÖ.E“čā“ōĖ1•`¢’ŪäæÖ?½jŁžł]NĮč7śś¹Łwš’ŒČĆXAÕ5Z”ś©Ģ[ŲąĆ#wĮ„‚¼Nü“ŻĪ^óļ)Ši±­,“f’[œwČ»÷ÉsĀģŚ²ošą0'@U %ć™&JQ›?.Õ’Ųö²“¾Szš©Ü#'Ē„ćRœć“:Lxŗ:’>ø¾“ITó]Ółŗ(ø¹B¢W³å/&FžJ ˜T§+{q›1,‰ø8‚ŹLŪr;Ų ’ƒhckK²i«-J»}6+p6åøe5Ł$3:ń„(”ž_ČåžcčČ)CčeU’Ę ‚žą©×x³uÖÆ ÷ü†ŗ!‰fČ›Į’P£’½ųWF^§J“Ś·ģ£I—Š­lÉåłĢļlĪ3ų'flåū„ •ƒŽ ˜$[F¹#ģRuuóĒ-nŚņŖ†ĻVµb œ:Ķ¢eó¼ŽčXR/…ŸyG8ę€DŖęIWewéŃĮ21=5ŗr™‰I©•Ś0įī^¤äŗmŲɇֈW{œ³>;™|Jm_ŗŻM~bUövS£Mr|}“BŒž²ē“ ²žßŠc+°š("ˆĶ1ҹ]šv±ĮéV,m\˜õ+æÖ|šXC_pŗ5]‚²é' é]G+2R)Ż­q·ø'żżł7ėϦOč³¾-;JāDžWU Ö«Ø«¬āa ”WŲ·®ü%{ĀĘæ2Ž,}Eb7LąaŹ»ʹżw&5dę£/_[ł½“OŅśeėąøCÖŽĀšč`@ĪŻe’Į‰Ÿˆœ>Z£,›ø¢ŽnČł~ƒ(Xhł;­a8õļåäīīźÆ_»!Łg©÷Üń'cōĀ[é‘[%Ģö,*DŁ«šó”deśŠŅ ÷dēd—Ā7ǧ=“  }`łPrż”ŽK^K™jš²*fö²TožüĄaәĮ9öqLR1„ŪØæF揷Ž7ńX qŗT£ÜGQqõnį§Ļū‹uƒcFÜ’™<±ߌåĶ’ÕfÖųzXŒth &fl³ļW< ~OėQß®÷ĪC ˆiiŗœ÷–”>r·ó:ĘpüžĢcCÓVüš'™#8e=W—TLcdDušÕņķ«¦OmŁŲ§ŻOhŅL™N+ ?Ą·n‹ļāó’T±w„tÕĆ5Žķ$HW0#*š-qGł\źś2&>,Ÿö˜™c19QŸĘŌµ½ œ„*©„©ÓŲ¦`X虱š{øęŃõŃ~ačaCZyŒØńd$É_Į«ĘņŻ×&ļ5q®ECø0:h¦nL矘$^~yHb’:'&įŖ¹!PcŹ#ĶsÜŹÅsUGŠ”0j–±JźĒĄüB~a“ćæ5ų įõū²¢m™jŠł+Q§ŗķ„Dņ¦7„@ž@æo$ aģ±ze‰šq;ū£æPŖgẎ¦x<×yGŸ±ü?ą…Ęsr“uéö—Io6n v­ą® į9Ė­(`,ć£eˆ)āī•„Ńц1!øyAĻ_xדO‰W>qa į­Įėea“½©üc«Å¼ņ2;Özpŗ-k'¦8 kPž®"_ųšą÷±·”Ԛq‡†(UŒCŸ=%kÄGĆļĪ«*qlģārÆčīŪžŽ_*3±r5; ŹØx‰{(?‚.‹üSĀ#­č Ć/$=GōļIW –pŪŻiCv*,»Ė֎öX$qvVü€%‘ ģ »µ÷'#^“·Ŗ¤h”ć˜F8€äļŽP­ ę£ŃLU?ķ|g\ĢnźMzŌńŁČśŅŠVžŁ0 ˆP¦ä$€)£Jž¹zSÕGUĮšˆž(QPÕM;Ł@ƒŠ.Xé§]XØ;öGc¶›Ć“ĪJϊž0ÓOIó›næ‡ 7”~F“B4v"•õyļ¦z¬q>ž_'¦Ģ|ŸŃI Ģ–©j|Pææ~ždč”/¤äd’j*üč§į«xl!ųŠŃńZB Dītز>-įæ­*:ōįē‡7Æ=?ūC`ü؁Z4}‹!“ƒ“ü:Q$į3ųRLĆŪĘ”¹»›¢ĢR[AMŽŠń _ :(K 1ćlÄܳ7IaOąB<6¹›µvD”ē86p Mr8„$ā×? =awō©Øn¼æäßĀ.ø‡®Ż„¾‚Jsé4ž“)ŖK#EŠÓCēҬŒŗĮmJž@¼ņuåŒI²Ū’o[J¬ƒ*„˜{,HˆY!ϵPÆ&±”Ģ}ćņH²Œ!ōµ-Y„ł¤ĮĘ|¶wĢɶčFŁh¤upŁ†–9äŌ£™ĆW¤ÄOo°„XĪZj"Q«ĀÄ ŃvÓü}TØ«jż°nي-AÅÆ'm~¹ų7ŪŅ “eJdj[ړ탱r”’{äZ+‡·-Bx±- ó“}4…Ų‰WL—};Į‰Ōe»HÅs·Īŗv/†mˆw~wœ—²Ōóx«ėÉDс¹ܳ±Z='čˆ5 ’Ä+ÕUŠ_ Ų™*v¶é=“bŻJ}Ä‡Ž¶Ńµšś‹§äŽ<ā®æoĒļ’Ė&„øŠ](EŻē‰³DI”Œ‚·DnTIŠw˜õ` éQdžX¬½9;ĀŌiŌ5ÅXÓŠÆKķŲvįŗ\ü„Z›2p‘ųāŪi¾”ŲĀćIž Å“³TjJŽF“ņ UU÷vsn“Ķųt^•Ö(EždøUæż ¹čN³³˜'lHĖr¬Ÿ'«ž$Üv4IVĖųØmLŲĀŲ<‘ŌPSߌų6tå»Ō”PlŹ]enŽģß}D4‰7”Ū¼ę‚źŠ,»Ų¬­+œSĀæ×ą©ō’MĄą}§†±×r r—Ż\7āč”ē-Īד@£mćlbÆMeˆn(Źļ“•O~¼51„p ūˆŽ¶ŠŠs—ČČ\¹Ļ’+OyL„ĄõHš±üüC«9Gi~=ĖŻ‡L9¢ŪP>Žteü¬IG%śē‰¼’,=ÖaBŃ+„4I®„r„Œ[ŖŪōQ=b>¼Ņ Rڐ•šhüx&±PŪ_¼»;j!Éå5ōŒÉ?¤Jv%-Œ]§Į÷ ė»X掊¾jś!•8Al÷„=u\jßcV„z&<\?ƒĀB“ė§¢{Lī߇ėLNo@€?Å$FoĮ™&ĢbÉrüŠsÅ –"`P5t…Ē-“$ˆ–šL»0ˆŌ'HJ1Æó"P· LĻSō}› Bæ„ŃŁ8õΦއ\āĘˆ':¬BīĆsCźļ\X¬Óö`.³jņ¼ü ųćńN‹µG׏aKYŗ”Ų ?!¬c „Ó}ė¹Č7Hę;w9ßł«`ŅæQ’A-t¹ĢWü{$’a’1 7K‡W”¹u޶£äŅō§%Ø<6QÉłjŪXō1{éGµ1Ēe®­g÷é]:ŸīŠ ÕeLµżŻ$-8M»³@MÓęĒ€‹lń®fA™ļå“H®uŃ Nõ R‚)MX1õ‹ÓņOŪN³oB…6Œ 9>ĶMŠĮ,ė®éÕ¹?q|jJņĄ[‚ę­F~œfIOĒbūŠźMJ õ É`hĀe2£¤°u]š¹”$VvQ@bDž“'/Ją‚,éĻķĖ™4”Æ÷Ńń“†Dś¶¶;ė1żrt Å-L³b,` uåžŖ/“i4QwČj"I:ÆĶh:ĢĶt-ė=R*ž×§Ģh“n§’Ęl[“Ŗ U ĮT•uĒDą˜ƒēŹē›]cųž¼ó;żä³ųö<ҽcŽ'ł­±!—š­cõ~S€VĶś÷IQæ)žIs㐹ēNż%āhRÉXFĄöH\“S­¶łNĀgÖ —}Ęt4ņ«$’M꘬z›ćj,‚9öŠś"ĢŪęžŅ‚óHÉųš āa~ŗōƒžgµÓŃ oAXą­”coT°ģ‚\vDŪ8Äæc’Ń .öÕƒrlz¾č²Ļš’WŻ®ėZvōöv'Ń ozčęļ7»½¼S‚Č2yńTˆ`NŅ|e˜ZŹuk«t_ł0„µL ȗžżŻ2ķ1šńhj Ž‘“ś1Źj@śvMM–Wõųu§„Tæ…ģ£Ą @0?’Gķ›pÉė,kĶc\WÓ;d®vŪ æó,ōk`ÕŖ!y@Ŗ¤„Qņ€’lBŸ0÷qæYfkÓ¹Įk­pÅT¬ī½!Å PŒµńÉąWWĶĮlæš³“żšĮ1\lĮ ?¬¬üųq“’s9-śnŅ›°Ć™īĻŅĶuŪž4LĮūu+öui%ŲtTŹWyøĀ²‰2,©q£"lń]§B"Ė™µVų8ė[tdFģ­X›Ś“”*wƒÉrj™Ž‘·Œ¼ņb›Ēé¼Ü„ŚÄˆ)¢‚¼ŗ?¦ZŲ/X+“br°š.Ķwp‘V‚?Žo4”Ø[°‡ū擽āæFlTŸėś9GŻLEĻ_{“³3ćĒĄH|’„¶÷LĀFƒÕŗŸÕ. Ÿā?ĻōļŲ5W¦Ąh]‘Äż\ÕYļt©éVDˆĻQMƒ“ZŸ½Įæ,Žb$łßi$uxŁ@į‘0(\‡Ćh4³\`óEŖ•‚„fŅZĄ×FBĖ’V€› Ū{qR[\ŌźŸmqÓB’h©Øļ©Źõ qĻŽšŪŪ—üö |ÉŗĀČz.;¼»œĀć-©¶¦ą,+„Ėj鯳 -šéµ°Ą/9d·ÄģI‚­V§®„ęę Æķ²`ÅōQXī…€(D"kŗdeæ} ĆæÆA@æppW{ii& ‡ā#ÓdQØāå€G ƒ £ŠóؼB¹”p\ņZeę?dĆӃJūVķļDš¦¬/‹=7€; ꁚž7˜rö2Y,OSašp:Š^"4Ūų‡éńˆ ›ŁŽøµŌ7XLƒć0*AĶū0€ļ\õŹB¦„6ņŸiķÜŪŽ}ōÄD]…ÜS¢į0 łķ'3§aGŽ#ES2`±Ņ}ą—-ßź‚†} ķ ˆµĻ¹pB~7:ŖæĶŚČGź}g‘*ÄųÖh 4{ńŒ…}Ž.€łĢ ņ9ujÄ{‰ 6ĪO’ūü’'ļ›/ü7:’‡CēŪÄ„“Z’£,,æŠŹ õīSźnN½#Ģ„øLŚ>rłld-±Š&–óŲ3Ŗ F„ŗœMĘĪŁ“ź«ÖLåe[! ĢČ[H¢f,Æ·TRKØ*uMLÅy]żēÖÅDųóŪX˜ńå%•”BxØ*7(µˆeŠĆģ8āfČnŠ61½•ŠnyŃŌI&Ė²×žŸŃiüeŁŻQŅĶbIʦ±*ß?“`Į- š×£ $ü­ĀŅnf5ńW­Rż™L-1Õ™2`³€P?=œ)ķöjIŽ {ÓĻąŅ%Ŗ¼s]FcüĆZGÕž6ÉéŃuGdcیäż\noĪ<×ęA½­Tˆ·ļfz²tåÖ#Ą ÕĢī¦łĒ3R½ ­>ĆrĀ ]dfõgø•G6r„Ōdˆ#Ą„ `·Æ†W4é¤čÕN<‡ēė؃4E»j ¬x3jøųߑ·ßA•†iœŠqΊM*Ƴ'D ȟƒvģS¦a:$wN~ÉįP0³-8óŠKÉ Ėż¹ŌJk6ńBf‹«e•«/ƒh“|'ü28ĪŗF%$ĄćŸ­`ŸĀ§Īę#QóofšĀŅĆŻ4FrCA0ߍ&†^łĖ'sŽ›c“Ö”q\pN õ1jj%nez/b׿ÆY;ĶReź¤ć?Z°%ˆš.—?·>nJ!⛂›E³ø[R§°ē…O }1£BśvøÉĢb M9ŹnŹ\A5U½ŗÕŹݱ°.“dĪžb“nt‹6PLĮ̶٢3/åÖsĶ$ńyä£6­³®®"ĆBŲ”ŚļUÓho¦­ '@‰?HŽ­5ښ”ݼ`0RX…’T’ŠJŽĖ~‚C먖>µ•¶é÷¾Į‚¼µ’­L’īs˜ķ”«Įæ·+ąO 9i‘Žv[q…ęŠčKÓŪ~ōBĮPu8¢ Ņw®?ȇ‡ōUl„÷xų¢ŒA¢ŻĄt•DÓ¤bŠSÖŖ˜_ķ,ß]¾[ŌV4śdš£\j›ŹŪEˆ„VŁHMüķ²cßü€]¼”ķĢŁbŲŃ,kżOFųJäxu—KD’©GŒŖRWQœ«ˆ°ķ@›Ö°¾µ6a†/åzĀk ?Æ­LQÖŗ×{P~Č*×:š*Óy—Nū§1n±•Ck Q! ’¤K»sYŹH½ężC2š‰dH•&ÕŚ÷*{:5„ܼĖ+Dźˆ/ų¦ŠķÉ~ó-HHõ`ęīÅźÓßĖ DҁlÉmšÜōÅ!,ś}I–H8ŗ:·&yu¼KóNūõī3łK!˜Ņ¼c•YĮ«2•<žģ‚I‚½ć…ŪŁ~.ūAHljOÆŽĀūt¼„w@†ęˆ¢ÄS’ńļGż%p­Ļ%Vµ},FŌ—o™€µšė¾M–”J-pC§¼¶ŲĶ÷ĪŽ§ėEĪUµY|¾ŪšäpCåĖĄ8ŅįxµĮimöQÄ雥æćĀdĆģG_°ĆŚ?ą°i&*»¶¦Š(Jj!Wpļön¢¢\“ĀÓ·¦čŗŽ&įh¼[– I“„Ör0‘”’­Ö‰ö’čŖ‡tߝŖī•3üLō3¼R©»¤£æĶ^ęŽń~J¬ō­eł¤'ü{[LĆ„µģžöw’˜¢4*‘——k¼‡a˜ · $r‰"™†Q2’)ĻÕĮon±LVƒ_]õ±Ź Ęō={Æ’B­ö“™zŽĘ”.ƒa€°(žżŚĢ€RG‡v?y§J¦ßzõŒ,EP3ŖC((_iĻĖ«Ø®Źą_",Ź^wŸ9ų M¤›ņ)m.É ŽØĮģ„÷”l—Vfl—M™”ŗW7WēžÅö·K ǫǓÆ«÷ŻŽŠs²āpä.;(Ά6O‚å„Ģ–ˆō]?G¦+-’«f3Į s3ū¹0³3!ÆÉ:”¹ŌLwĘß8>Øń‚—ēą°ńńUūf Óō—€@?̰>ķ¢ĢōKåKŠY~w̹ĶÜ#K•Ÿą|¤CŲXÄFt°ł·śW·ŗœ‚Mē[9÷üłwUr°’z¹¶kŻNl¬‹yó±3.Ū&(ˆY AåŅćqĻļ3—d /ó)&6 ņ¢üv•Sž€ ?gŌ8% 0ż!XzŽū˃°qŅAŖóAƒ[jŪ"kƎ6®]ŒKÆēW ll÷ĶŠÜėTÕo$‡ŠæÉ^Yؔ ŁuĢ=ÖqaćČīŚ.wY’#ŅdŗęŲ¾x²ŗ÷vŒl6ĪvŪv±ń]ŠåĮ6UESo āń¬GĖ9öĖoh†J8s³YEŸX–;s$0’ŃˆŅąÆ >*7é~[=€ų÷8Äō~$»źĻc¼I…Æ@ŠŠ`š‘ų†üQU0o”‚m‰)Õw¹V>vN n‘ŸjPīõ!;Ē %ŁĒæÓGč£;;ŗJ?¢ŃJ-ŃĒģc]XW?”_­Sņ³*ēk™Ńs|Š}ĢK%Ź8‘=5‚Šm·—×”ÜÉKŽIz-õZÄ·Ą’üŻ’œ¼ö„†qć²7€L"¢­ļz~¼å+}†ĒųŖń‹ļ&,LNŽ“į:L Y0oX)µLō šśn7s’PKéøeAI’™s‰ “candide.htmlUT&֗Pux ččPK ÕreJżAßsimages/UT±®»Xux ččPKrcJņ ȓčĒ铁 timages/001_th.jpgUTR ¹Xux ččPKhl5p—ӈÜTŽ“ž\images/002_th.jpgUTPŖVEux ččPKMŃ9favicon.ico000066400000000000000000000025761476025525100354440ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’http2.png000066400000000000000000000037761476025525100350750ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-origin‰PNG  IHDR@@ŖiqŽsBIT|dˆ pHYs é éżuĪÓtEXtSoftwarewww.inkscape.org›ī<{IDATxœķ›mŒ\UĒ÷eęīģ“3,Ģ̲ ŻŚˆ®ÕR°²”±AHM0†`¬"“VKBĄhüŌ †„D0šhĄØM}I#FK-/n+uéö…Ņ.»ķ¶Żmw:3{_üpęĪÜ;sļ¹³Kg†öŸœĢ™óÜóœēüļsžēĢ{$˲,.`Č­6 ÕøH@« h5Ō ”eYŲ!¢“C…$IžŸąC€=qÓ41 Ć0\dt$IB–eEAQdY.“ąKĄf6³]ŁŽ%[XjgNÜƲłel;¹X,F,#¢( ’$Õ`ßłSÖ)NDN€ä„²³ Ó8xš ©TŠT*E"‘({…'†a`XDZaīā#ŸĻ³gĻ–/_Ž¢(hš†ŖŖČ²ģģu’~A>Ÿgtt”ńńq²Ł,Åb±Ļj°—€išēŻŠ÷ ŗ®311Įōō4¹\]×ĖA=0 ālęˆ°¤č–e»Ą” KMßė!^„‚ z­‰jĀŅ‚ūHNĒ žYø:+ģ©‚išär9 …‚kņPgˆ›ļƒ‘Ėį»ąń•v]†¾„QOžVž€µ÷Õ×÷·gaÓg`’eĮ×}ižŁ—=g4·ģŅsšŻ—įŪ;]Ķåøę‘Ī›Ū ę"šfFŌ×¼ė–ķK ¹-Ū}e}}²ƒ30viżkƟcŲ“WMˆĶ‹śél¹ ž¾®¦›ŸG7ēo\QqÕ5ćn™=aM‡‡ĢÜrD“M. _õ’nÆL"3»ŸŖčłś°«n;[_Ŗ“ą4üöâބCöˆ°snß(–ŪÓ«įž×šJs¼Ś'>ųą)oٵ“°¬(ææ¦rŻ]ū =ēī{½Ć›õˆĻOv·C…äU„1n: ėĮƇ`biĆSin ģī«,W¹–MĄĒ«Œvöœ®¼o_SqQÆ^bN=Õ²éR° Ņ]…ę<Ą¾o„`ż=nŁHÆ·qĪ~^2'le«öīēUŲ[ĆIņĻWĮKƒ¢~ėį`ż„'`¦«¬Ž]*ŠŖcT&ę%sĀ&źš“b™91r9Qn%¼°ž› ÷,lqg „'ąµ>°J?¾õŠD6vĄĖW‹<ż”“ī~‡{ąd·Ø×ó?wŹ@Lމk'į—æy—€m@f{Į-»÷NAĄuµ±Įµnķ„) ’ĮŪSœŽqėa±źŸ…Õ“0üNķøuž€— øĮĆø]żž2Ūš”©Ś£o„`¶”ćoōŠc’¹’ĮÖæ6fsĀgr «2īŒVŁÅ…‰Ü~×E ųŲq·,ŪU#ȋB “KąXBŌ«'ņjŸp_Ø%Ē”ÄęÉKV gŽ×t·ģµ+*cx„Ł&Žē¶¶fsRŗs©,›qĖFnķµ<¼ō„Ńō\•mĢę:Ŗ’1 ƒ\.ĒŻÖŻģHģšė×QPŖ¬Ū“Žįįa†‡‡"•JF/>æH@« h5š r¾q8Ģ©Ré^øŚp¼Ü ų¬Gū=Ą?}ś,üö3o?žģœįZVwßzģ @8ņĄ”łŸö‰€~ŠGŪ9ąAą ĄļŁ¬ü§TC’ÕŪ|Š~K Ü ¼¢Oų0 |'Üpķ@øÉ;ń=ą•p]Ś‹€YąG čo[Ćui/^D¬/(ĄząSutü%@‡Ś‹€½²"ś3°%ąŗ<šNćC¶~YDīw|_WGOˆŠ¾øYąūĄćķc öų2š÷Rł0$K× Š”ż ŽĒbšv©4 ±¹Y…ŲÜXĄ>ąŖė~ c=‚„Ń~ū'$ą#„bćWĄæś<nˆöŠõ0lß |"œŹĪ!ąp;b·ē…›'Ć«]Ü%¢ķgłčŻ lĄ?½mžx ”‹ėO§=J½“„灛šž¼<l§éŸĘķ»²Ą&ąó€×=?—bA³hæ,`?&=ä*š`5š; Ģą~VšE`ecƵŸ&ų× ü¤ŽŽ54L@ū-Ńó;\ūpžq‘€VŠj„ ‚7 ņŗā>ķŪšßU߂=ų?m~vx *ŠĪ–„ø6Ł„žą‚Y’$•‹’$¹IŌ=2#Ė2g6286ȁ8zōhł5óNz‹\’$E!a&H&“Äćqń—xŠ‘ū$ÅZc-½Ó½Œa’Ų~¦¦¦ČēóuŽ@–eTU%‘H0pÕétšxdŠéx…:\ų?–²‹\~<ŚIEND®B`‚leaf.jpg000066400000000000000000113467161476025525100347450ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-origin’Ų’į@ČExifII* Ą  ž ¦ŠŲ(1 °2¼i‡ą(SAMSUNGGT-N7100N7100ZSALK32013:01:08 08:48:43HHš‚*‚2"ˆ'ˆP0220:N‘’ b’j’ r’ z’‚’ ’ ’Š|’N¼†’’ 0100  Ą     ¤¤¤ ¤!š( 2013:01:08 08:48:432013:01:08 08:48:43Rd“ d% ASCIIų;KR“(xV4xV4xV4xV4`TE6č ’’yĪ„żżCALGKFI03Cur.GKFI03CML018001001509002801090502010D010D012408BCļė&TUNAŠR, ,™3(€”­Y’’K’Ų’’JåÜ’’, Ó\’’–FLFLSVN# ¼®ŠR" ,," r S ė’@Ą:l- 6fi’’  8JKJKĘĘvķ†Ā B…R,Ę3]€™3(€”­Y’’K’Ų’’JåÜ’’, Ó\’’–JKJK""""""""‘‘‘‘‘‘‘‘"""""""""‘‘‘‘‘‘""""""""""‘‘‘‘‘‘""""""‘‘‘‘‘‘""""‘‘€™ ™ €™ ‘‘‘‘‘""""‘™ ™ ™ ™ ™ ‘‘‘‘‘‘‘"€™ ™ ™ ™ ™ ™ ‘‘‘‘‘"‘‘‘™ ™ ™ ‚™ ™ €™ ‘‘‘‘‘‘‘‘‘€™ €™ ™ ™ ™ €™ ‘‘‘‘‘‘‘‘‘‘€™ ™ ™ ™ ™ ‘‘‘‘‘‘‘‘‘‘‘€™ ™ ™ ™ €™ ‘‘‘‘‘‘‘‘‘‘‘‘€™ ™ €™ ‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘ ‘‘‘‘‘‘‘‘‘ ‘‘‘‘‘‘‘‘‘‘‘‘‘‘JKJKą.Ü’]„¤Fū’p“4  €ą3 o€ą3 o€ą3 o€(AFAFAFAFQGKiAFAFްō€  X ¤xR¼)Ž)Žss\&ŗĘ³6nΊFߛWšŽ¼šĘŸ%4:„ @ķ½ńÖGKFI030100 @P R980100  xš¢(Ŗ-HH’Ų’Ä¢  }!1AQa"q2‘”#B±ĮRŃš$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤„¦§Ø©Ŗ²³“µ¶·ø¹ŗĀĆÄÅĘĒČÉŹŅÓŌÕÖ×ŲŁŚįāćäåęēčéźńņóōõö÷ųłśw!1AQaq"2B‘”±Į #3RšbrŃ $4į%ń&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤„¦§Ø©Ŗ²³“µ¶·ø¹ŗĀĆÄÅĘĒČÉŹŅÓŌÕÖ×ŲŁŚāćäåęēčéźņóōõö÷ųłś’Ū„’Ąx "’Ś ?ę4ĶFŪYŅ-|Sl¼¹eѾ2,nOEmuR2æŚV!%-üW6÷¬y*[£‰røbūO’6ł£t ŽÕ‹s®čZ·†ōŻgCž ēćÄ{’„š”ś1{™ŹŌ®„Œeī“}R8į•Ų„¼2Ä„VLV”GÄVņ¾Ÿā.}/Ęz|¦ÓÅZ<Ć—Õй™ĻŖz c™Ū6š±¹8E‰#>‰'ŽxÅ;qkmŪ£ĘŪasń$`däž3ͦ ån x9v•€^äO'£ž‡R¤rœ˜¢˜”¦˜’FŃü-œ9é}EšŠ¬ÖčĄ9a!Ą’Ö3ÓēŪ“‚0yŻ×ši”׏ä”%r9ł‡ØėŒćڤņć d–?.^ ’nK€§ƒŽ£Ūž:N„™æŃē“Lą*HŖq×ļö?€ćš[¹™M#ˆ±-o†\l.Ą*Øž#Ę:e~¹¦HC©ŽŠÜĒɞįŲū£¼ž]‡KĶĘĮc™®T’¬šŻNŽÜ`cp#xąžÕX†Rd,¼m^¹ōĆg©ō)„ ģßC.äM āh佑ŽÜ2_”c$ ą.zÅyī­mŖ%ĆE­ż¹®}5ćAę8Āąrx@)ķÅz†Õ$'Ł]Ņ3”˜ĘĆaĒn29ļYz”6SÄc½ĢÉ' zё ōd’ŹJœc±Ļ“m$Õģ­įCs§[Y4¤cU‰­Ō’1ž·AŒū‚89®NO:AņZ=™Œ"\ø1ķ9.Ė–;ńÉ[ LnnģäRö÷–L²ź|¹N %F={¹³Eo‘ŠĘéĄM9bŗxhŃ „TqĘåĆm’ć—éYN¶)*ɲm>b Ē%Žā mū‰‰2vNAĒrNéRécł ™-Ÿżt1¹ņŽA‚Ø@Ī §ć¦3T ÜpaŽŲ‘•H™Ū ópzīFAī¶‘ٶqoci0ĪĀPļVž/•›©\ÜqŒē’b+l}ŗłųÉåÕz72³|ŖĒg$ć„*Œ\ s6?uy"Ģ‘7]›”äHĪäÅ€ M—SIwl£tm ź ÉĘT6ī1!O;GcI6$™XćrRUš’ ƒtdœsõ÷Å9K)ŻvŽ#PE³y‡hSŌ xn{r{ՙ5ēœIr[löF܏,ņ˜Ēv#ĢĻa“Teo3÷–Nvµ¬ˆHŻ“³ ž#¾1ģ]l=vģ}p|9ØĶeŖ|+Ö.”×ųėLu‹nY”TD„“Į‚1Œ`Œć#š±˜ń²åē-œ[Lć!Oš„÷ˆĪ:ś1Ź\Hź‡>\0Ve Žv 'pü8©»4P}ˆ\(Ä„mL‹¹#pĖŠ:v¶„VŪŃ”’mŁ"Ś‹ŗ œƒŪÆĢ8«Ģ#aˆ£nFHÜŲČą;ÕyŲ(H€‰×żt†ą×$(#ߞ“'!ū:ŽWZ°[ˆÄ–QAqŖGÄ ²…óū§r£$łĮĻJó=VŹ[ˆŠd “Ū4Š|ū±Ä‰ņ@?);sČĻ5ķ2 sø£ nśĖFp{Č=NÓĮ®[Ó#Gó“ū¤K9&µR Ē/ŌåˆĒ`§ž%Ø(Éo„¾…C“7ßhŽī'āĮ€¶Żēų+Č B°ˆĻļķāXUæŠā°R0Ѧ~qŽŠ,IćƒŪźścLāņÖ9-Ń@[Ļ&ŠØ1ƒ…włp@` Ēąz×,vŠA$•Ä-¹†rxAā‰Ūœš0M-v™žń+åǦXćęv“‰•IĮ?•HĘA䍤ާЬ«}q§Ģ®ŽcŪ,G(Ą‘°2c'å<…Ø’źŲŪ4ó­ä£UÄBE†|—†|‘*ĪõÉ$‘]+k^‹UšUÅž•ūD|0“ķ¾½Ó2Ÿ łĮ®”Œ`–žĒՈČšcņF6čķ~×»Vdś&³¬ų^ ^ö{»Šž ¤übÓZܙÆ| ķ·FŌŻF¤Ó®Č°‘±ÄR؃¤žā2F$¶ž;ČęŪõM Œz : ßHӃƦqĒćqoĘG4÷å02 āŻ÷ął|ÉēwBsĄč1ŁJ,„a†Ųtq×wĖ€ zw§5ØĶvdH4™£“¹bN„y hįžź© +ɧœ§N)Ź]W.˳|Ē &Ÿ=j­(ÆÕöIjßD7ū,g÷²z}Ŗ\œõ@<ŲĪ1ƒÅQ’źß~åÓ®ļ,׋EP!Į!'só`捧8™hšKøkŽÜŗ(6°.H’mĆtRŁE($—\ē5ŪŚxv×UŃo5ūÆ/o-"3­¾™<)š8„žHœƒ"˜ņdD!ÖI…( ŽGŠ­%ūøč»Ÿ§a<;Épź 7ĢeSNZQŅ÷JŹsZ½WŲZčcińEzŅ«_&‰ ( ^O$Œź‘Fćŗą“Üc9Ķe_o N÷¶·¦71i«¢łL%eĄ?/˜Y7ӌ6OĢpĘ“õgš“ŠyV‡Oń†Öō©!¶{VÓdó0øGvr˜ĮFs…8 ēon&VÓ-mĖm¹ø†8TĮ+&ā%"@§iŪĘi*r~l„ˆÅ_Y[Šśl/ųYB _Rēµģė7&ŚŚėš1kM”UŅę­tÆ#>±{ö°õ;„ÕŹGm©.–Æ&J#Va–/ņ嶊vo­ŻéjŽ!µ³Ó`»]'M±ĆG’Vó¼®s1P Ē8ĶG©]i× Ī‘mi˜^ g[ūZ¬RDUDsŻˆ£v99ÜŹ ÓZ0ŪĘśe͜śc'śõ“äl8WŒqõ­°³FäŻķd€ćŒæ%Ė 6„i)©TŸ,TnōKįIi®Ś+»$¬—šßYź1Jń^[*Ä£lBBHŁź2yVrq»Œæµyž”ew ūbÓ·éSō&ŽŠ+FGßRŁŚHSÓøĪ9ļzå•ÅÄ 4/öųņfbō@鞃¶kĶ/ķm®aM#1ņķ晰­•— Üõē=Aķ]šŸœ¾TĻ)tRĶo ĢBU’xH¼NĀązü§NHåRL!$į"a!ĮpRfÕnć+ ’’€”»’\VmÅ-XŅoe±ķv³ŚĒl$½K½=‰cxéŖ2…Ē!ĄøbåšH`3īBėčŗĪ·įĻÅ©½µ‰tW;|Qį•Ś” Z–™# Ł$wśq¹‡åó!‹8®^ŁŲŖĒ;ŲĒb0¶Œ‘änq†~rB¹aø‚sŅ·µ¶·– ²… ū8L‹ņŻ(ĘFI¶²€ C“žėÜĶ_”ÜYčZ ¾©š«SÖe¼ų1ćt[ż‰¼u«Ģ¦8õR¬Ž—Ķč†ņÜĶ„]ńšˆ=ĀÆ…/(Ž05Xn¢A“Ykz{4„6ķ>}ʐij’®„®U霥;±uawwMłøµC£å8%[AčF1RŖ¾2“C܂Ǯz’Č#טöžŅõ%‹įżų¼ųā(—Zżœ§œ‡hōÉK ō¹_$« •ŗ“”g;ķ™Ļߦ”Å`*1$g;N2HĻœ’… ¦½ Œm-GK¢3ö Ö×Ķ²@T1äŽ`ĶŲģĪŌcсwewą«č|q"mš³[i’©s°,ŠŹĻœ%c·9y: V®“i%Ž™ „ŹŚ™`VźŅWRD¤fEb$1=1߁[Z•džõ;ø…Ņt±™š­øĢ¶ØĻäyI\m]Äš)“@”ų,QĘG?xŁĘkŃĀ'¾×±ųˆxŖ5ń”`›N4œš}9¤ōü ū‰ōø²5K»-6Ō’«šśņ4$÷_‡8`ś{לk§Ā0ĖæDń?†®ģ_ęž}Z07t äV%Žy9_lW-āYoī5i’“£¹ø³IbV/‘|BNŖtČ8Į&¹€ÖÖ䛄SåŅ"y8ūņ0#öćå5Öåe±ł›ŠOqŗō¶wA“ŌAqµ“räąą¢”ą’9ĮĘ8Å`‹mrķüÖśži)†Ż/Ń€0 <Ōōé^š¼Alu­r’Kųwš’÷āWfk;‘OĢc™” HlabČĪe,¹ėōłtؙ¬?`Ÿ‡ĆÄW“‰’l‹ZYO¶`•“‹gS—9, ! 7#/̹9T““WĻ¢jō_‹<čų;ĄŚšj_µ‡ˆäš“ŹEųa¤m:ÅŁž–į³0Ā–—ÜAU#5fEųĮā8ĖĀŚŸ³OĄnJšę–²6³©ÅŒ/šĆēbč;į~ołhz¦‰šŠ} źŽ&Ōo¾%üB†Õ¾0|W$üć’4» bŪ¶CÓ+R½ĻHšīšžtP-Ö¶’ńńā ĖÆ2į×¼ŒH\ņ0£ŽA&”:QŪŽ—~Ž…koå]ŗŸń×Ā÷źæ³ŗ“l'mFĀCįĖ~2Ém]ĮŒ=Œ ;ŽŖĀīŅśŁn,Ś7ŠPų˜)8žbI1Ē”Ķp¶„āĆŗwÅ_‡:³é?“?ƒ&·Ņ’h-CM}× qĀž'”}ćöˆZLļóŚē¤›kø¼¾šÕÅկ즕šsĒJ×Vś.Ž-Åiā-ś øÅÄ(Ų&Žī nłš”ó'~sXŁ«u_‘”<·«o'ŲĒŚÆ–6ņ­’-ŪžS•eaŽFTĒ tĶO§^ł»q¦Śh×#:E“wĄĒ/h\Iø¢7U|Ą‚s q%“c}ś„¼@e‹ŗ½CHŪŽyöėė™oq“q¦Cmiį‚R_ Oet‘"ĶǘŃF€łļRņsē$§ĶĢ©c'Ī““¢Ókk’Ć]Ć5sj՞œ›u=čǚÉI.ĻKµóv·c§ÕĄk,q ‰üGupUÆßKūńĘ9¹Āż£Éżōø zpvŽnņ Ė3$šī°öD“z†”jUˆøUqm7’ēĢt8Ųź”|æ0ą€nYčž6ŌĆ.‰„iZÄo°ŪźW—I«8Ȱ}”YYr|£ŚKg[Är\ xķóā2ćɲŗ† Ód*”vRXg`åŠa[µĆNžŒyTlå»ó?pÉrź8 <²Ä{JöN§½wµ·V[]õDś$z°Ō„š¼ś$n©skākf[sf ³yq9 †ūÄ„Č3ė^#‹ąŻåœ°ųGĆ’4Ķf5jZ÷ĀķrH IÖ-+i©/Łē]„Ęž\Hń;Č€JW–ZX^¶£ ŸˆŅo ÉpʧQ¼BŠX…pą6Ųö‰p~cŒćfm3SŅõ—OŌ÷^ßčWšiE*üģ Ŗ¦2€īBåt'moI„r_[Z_ń5ĢÖŪF²Ęŗq§g)(»;ŻŚJjīāśėm Į¦Ļv·šF˜¾±UÄ>³‘üøŻ‚‰S{±%w+2œ«&Ӝf­\"Ā„ļnRŚÜחrÜ–bĆ €½‡J³ac©qo„Xj:¦»3@ZycŻBŖ£* Ŗ¶z“]ÅφžųVŻ/’moƃVčą’ŁÓĮöi}āaۈ¢[,-ćwĀåš26±C^­ØAG©üūÄY—öžiWsRo–žHéÆt®üŁņu‡„¾6xÓYx¾ü:ń?‹./%i­nl4ā–ŠÄĢqräG @ē,Ä“ńšō[o~Ģž¹]"ėƒöūż°xoųR߇įż&u nÖu »JĒ/ŽSĄĘŁ]®}ņļLż¢¼Mf–>)Ó/?ąŸ_²µĘO†’gļ…°—ńē‰m€ ­Ŗ\ž… Æ eڶ×Wd«Ś†¼į»±ü.š%Ćæ.PšĻ„ē2jEs‹­cSPgørwecm«Œ+%hz»·ŖčæWś:÷żćĻąOųšåo’lŲü@ø³*|/ū1|*˜ŁxKBE»†öD!euŹ®Õ,ÄtiPķƒi¾¶€[Åe”Ę-×f‰¢čZbŪé–CØXm(r1æøUĶu­˜ˆFcE%”³ˆŖD§€€`’v䒵Ӛ˸G„vöč<©œg+ĒĢ@'kGįӚ–ęō‹mLw[§żååŅź#īL%OŽnēqöGÄĖsŃ–‚’[y-³hĒČr3ĘńŪįūŠ­ī,ōɃTÜīˆ7Ģ®¹ČóG˜Į±Žš¶Ą¬™Ž\Ż|<š#חFHæbϊvŅ[üQš}½¦bÓW ā 6 €Ø¹Ńµ-—0ņE°é!Οƒü!­[ź’Ā_‰æ|¢h²µO٧\ńGŠćµ¾'‰į»Ķßä–-VĪS”f9ĘZ·Ɩ÷šÖ™sąbāŹćÅLˬžĖz•Ō)p‰"Cö{EøtÕ¬#’Ō łd»“·bmÆ»­xóāæ…„ń'Šē†?Ū'įģžg‹®<;¢Ga5÷„š@m®a‚ŻP$ŗ=é6ÕRM ;™X‰il’®Ę‘i;ÆėČ«cżÆ4ė§ų»Qń&µćs#¦ÆįC$vŚbĘYeš¶Óqp$VQ0ć÷›¹Zļķģ­BĢ÷Ņķz‘ŪpU€PP³$½Ņ5å±ų™„ZŁ[·ˆŃ’i[x‚§Ų¼i+Ix#P"ÕķD7£ŒyĖv8 éc(ωžeuå Ź<sĒč}McE¦§ļ?3¾–72Ć8<<ݤ„ ©s.·ZéÓ¢čÆr 'ńn™37…5m)Ć-ö#2NH0np|­ĄÉ8kYķfžŻšåƳāU;ĮśüV“ ł›äyåa“nPĄīŲ1Ź¦¶T’Ż!į‘e!F: NSŪŅčŚ/üEp,¼į›­^ńqöęO—o>żÄĄŽ02w9±ž {ĒŻK„±ĖųėŠ0ōžŲ“ķUÆŽkg‚öŃ%Š`VXÆ{'ŲLö^2Š”œ;­Ņ9I2É Ą`ŽQĮäš|Śv·ąkßü]Ō4’|gš Ė©|¼ń¦ –ŅIh\'ˆ|/™H"aq²źW%¤ū@Ąļī?|m¬ų»L{»K懾$č¶ŠĒūG~Ó:ĶœŚ–»-Ŗ«Em{¢éø1„İGe×OóyåO;”Vrē¼½§FiY._š’#„žĮų{ yMūCx“_“Å—ø>ż›žX‹ßjĪÕØ·Pßd…°ß¼“å8ĮÅwqčŽ=ŌķŅĆćÜ׳Ą÷Mö%ż›53ÄZ¬gŚŠlĘ<Rć;ˆ%Yi<'aą«…ēĮ‹CĮÓė æZųłńS]CĘŹ‘’ļrä‹8™BŸ*,`v©É®źŽÓF“ ŗSJš„æ6­©I34ó>OĶ4ē#ē9-ÉĒ=©s|ĆŻˆ–öńZiƒIšw†¼?šOį \Łü#ų_ƲŒcv­|£Ķ½˜ PÜįŽÜEYˆ[@¢8-lģ4ńcg§S·Č3ɧ¦ąäʳŖœiŹ…ČĒ õcĘ8ć3¦2#ķāV šG tćŅ–¢ę{lC*[§0 Š€NRS³8ž<›ŸåTßę!Hƒį„šU!HžčƒĘ}¹«^gɘ6If£ēu įéłóéǵ@ĖŪŗlgČ+±Ą##€qłō£RnĪĒ>µń‰-°†×móqį-AX’'šŻpÄœįˆÆŃ5Æé—Ė«Z#Ēć ż›ā†Š{» āį6ž²FySžĪ~a_ṲH ƒ[ۜęåŽĻżbs¶5l`Ü÷ī<Ÿ>"h ¢źKāo ŲHŗ=Ł ā»Hį!CąwQŠ6BŽ0ėS%mQPičĻW}KĮ:„²]č÷zv±£O™£ŻZ€%Ą qĆoÄdž<ŻĢŅ0[]iīį‚ÜęĀxgÄdgnz7 śׄyw‚„’OžĘŌ5Ö“šž£™¾]\ÜmŽ;Œęm8ó€Ū²UGūC õ+Ÿ¶˜¾Ļ؋µ+©ØÜ@ćs©8•ˆĪW…śšvVvčc:ļ_2D0I,ļ9å{ 6x8¬ÉŃYp÷,‘Fw[ˆ"zœƒÜ3õ­‰ģ¦øktĻ™mqfXŒueĮĘßŗs×$óŒ‘6ŌPšĀ÷eĪǵ¶`̧9B˟”g<śf–‹ +æ™ńÜ^QˆCv’ &[k؏ĄŪÉ$ ÷'9&ŸµÉm¶IuwpœŪJŠÜ`fn²XcĻjG’Įō%­]?żk’×?ż™+¬ÉjS[mV` ¤pÉÅģŃŪ(PI¼löĘpzź}‹XUź—„dRńÜÉXŹr\ĘŪ²@°ĮŸilŌĻžā’!]ēü‚ķ’ė„Ÿś VgV¼weӌ$õčkųgįæÅo·Ūe²ųY”,ž;ń„, ‘żj›L‡F’’?œĘ½Ņ†? ćѧ²š’6£ńXÕķ~/k’ÆŚmڼ%H[yĖō‡“a–­ļČ”i’^ć’d®ŸM’U'żr_żVQsŃ·viåk$|„ć%ŌōķWMų©įi²ų–+„¶ųõįRŁd†ڐf{˜¶ń„ł¤ć™’čŒ|¹’āļĆ_üwm⯇örj²wą7 įŲ#$ŠnĶoEp‡oŚ,'óP*‘±ą‹8äVŽ?äžjŸö57ž‹»®WĒ?ņNü’^zž—½t$š³ŁčgŖÕn¬ĻØ|-§ؚ|DÕ`Ó4…ūWĆ­_Kµ†Xõ’ ĪQģ&H6ØU£PĄ¾Ü‚¦½e$Ś’Ž]B©…“ĢŒ '¢ĻNŁ uöä>’‘J’±^Ć’eÆW¹ūĒźµŒvK±s½ļÜŅóŒ£÷%6 ڤŁćcžHķõ¤W$Ń%ɼ TV†@Īz“Uķ~ļü üjx¾źż?ĘŖĘkT2V·D-$a­‡ yÜßģ•NxćÖ±4ūķRVhµ=m.ł ̲_-—?#F™$)š3“āµ®>ą’{śÖ-æü~·żs_ż ꢣgä&Ś/8 /eŽå—pÖä…9‘Ų)ļŪķXZžŸ§źöņXk°6„¢2JŠ–'?:Æ%SzrMĖõR}?„Vƒī7łī)0WßŖ>;ŗ±Ö4j_kś”ÓČ&šˆ%ĪVeoōIÕżI„} Ļ®é:Ī›«Ųd¦‰«Ūkń*ŽĢ¼‚ •P|öQ“²QµūäלüI’‘ęūg’£MnxWž<µĻśł‹’E%fÆ{v’€l’kSŖ ޲•šRHņł3c†Ē>§„eł…Kµ¢“¶2•0*1Ž pp äœt§’,’ąŒæńģÜž”ļó–ŻĻ’Ł’Ū„   ’Ą  Ą!’Ä¢ }!1AQa"q2‘”#B±ĮRŃš$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤„¦§Ø©Ŗ²³“µ¶·ø¹ŗĀĆÄÅĘĒČÉŹŅÓŌÕÖ×ŲŁŚįāćäåęēčéźńņóōõö÷ųłś w!1AQaq"2B‘”±Į #3RšbrŃ $4į%ń&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤„¦§Ø©Ŗ²³“µ¶·ø¹ŗĀĆÄÅĘĒČÉŹŅÓŌÕÖ×ŲŁŚāćäåęēčéźņóōõö÷ųłś’Ś ?żAż”¾!Éā?é×wrH× $Iˆ4«ŽOę+õkA‚ sƖZĢ*›%]Ɠ’@Éüsšå§Q­ŚŌ“<»ā—„“xgP°×4ųdŠõ+y4«āė‘ó +ģH?…’·Oģį}šćŒōŁtģŻ:@ŠuCå²6v‘ģr+Ó„U„cĢ$ާŐÅ%›yĮĮ\Ųrk3Ų_h°N֍mp%hŻ Ē 9>õĒ™×~Ļ}Īü¶‚Œ“ģ}{§iŚ—‘Ē170Ą'=NkÉuŸéSź7)-¼HˆJ¹Œń/ūĒ<Šłźx¶“=WU¤Ņ9ˆ…¶“©ĘրαUĻ#°Æ©|7­­ż…ŗĢļۜm5ōx:’”g‡=īĶY9Ÿ$1Ųrk¦ÓlRXæv$ŲrkŅ[™Ž’ī=9ī,¢™Vv\:ćé\ÕĶĶŌ™Wø| 0õ­ģrLڱ½­cµr'F8äÖ„¦Œ“!»ód÷§qEjYŗŁo§’Ü<ætÓ9ėF™h¶Ė5ü¬¦FÜ}źĀR¹Š„bĪ««“Čö±Fa€żÜõϽaX~ķ̊ͻv~QŒ›ĪjjĖ$ŗ\ÆsšX#•ÅĒ£\͉T|Ąn]ÜsėZÓ9źlZ]ĆAq¼`ē©­±Cö9"Ƙ? ¦½:ul6¤u9/JHļīįSŗg·8Wq%œŪ+łM²>›¹<µU*Ż œlqZ¤ĮåA 4|ąēžk¢Ńo.!Å“×O pģĒōÆ>¢»;éŹĒW ^Cky>^F^ĖÓ ×¼eØłÄiHŃ)%ē¦r+.Ce3?Ć©Ø\y÷lŹ—!€ē#JŠŌ¹¶i¤Bź½¹«ŒQœ™§hvWD½Ō‹““ŹŽkbņśŅĘᣂ‘w§k¶œ¬g)XŅš­“³KļufÜxéļ^½x–¶bNė°Ž˜ō«Gb“³¹åz¾¼·~e¬F7·ĪķŲę¼öH Bī…—''#æµsĪbUGl/ŲĒJŠø$ƒÕfī8āxćQ! śÖōŖ³¬ē'•ķīŹe·!}M[‡ÄņĒmy¦$0¤Ē^£é]QŸc•ĘęfŸ$Ģģ³nĪįĶ{ǁZ;‰-ģ ™"]ŁĆµUÜkM ?ˆ¶Ļsvc6J‘Dƒ­÷Ļ9⼯KÕāŠuHZŃČvJĮĻQ\2c ”ūÆvuHf’L’&8ā¼ŖēLm>qpó«d’Ƶiō&1³¹Ÿ¤ ī%xÜcšµo©l‘"e`y 0ė\®:›{CHx~āņŚćT‚mć;Ÿŗkx$ÕžŹ‘Ęįćx”T‘³ies`6ØCž³ŽƒÖµŠbŃ­M¼fÕßvį•åkEvsJV#’„¶ÜĄŅĒp±4œœqϽrM}=õŪ®pPå3ėķN01öŒän^{[ƟoĢI<Ž>µé¶ž7{‹4‘D¬2dĒ'Ž•Ńec'«=kĮŗn›in÷B4yd]„°ź«ś¼vŗL3øpŠr:šÕM‰Į_SĆ×ÄqŻŽÉ¬†¹Ęy¬‰õåöØOɁĘk Žū• Yčtŗ0’kæ*ą»$ć5蚽šiŚA žkI t޹„It;)Öčx•ę-ŁWkü*×ēO „lč tV¦)ŌŅĒ x‰5Š‘—÷9'ržMIis\@ez|Ü×D]“07/ķ•0nō⤁ šŒĪĒ ī=+XNČmō,Śé°I{oĒ>•ézF‰Nٔȸl‘ĀŠēŲĶĢśA¼·‹G{;‘ęNĖ«Ż½+Ću‹·¶»-Ü!G*É\sW6„ĪV9äķw’,¤„sŲކø/ėŃŚ]ÜįfFl‘Ói=ér£N{EųgT·6¦+xćŲŁbOSž’­pͦ™öŪ‹w•Ko$>é5ÓŒ›<Ÿ2jĪ"Œ„I‚qójō„¶’Q ØU#>“½­“CQ¹vĖᭊß=åō¾qbAžsVo¤šģL£K@ź6ŗ‚rÄw9õ¬%Vģģ§Qŗ¤z—†^xž äf*ØæyHļ^u¢ųKZ¢¹ ŗ.9<ėŠqÜŚU”¼3¦Dfē!]R¤uü+Š5Ż7G³ÓīEģQM Œ¶×čĆÓŻ –9%.§…ų­t½FĀŽKHQZ&ÜįTī#Ņ„š¤ö©o ¦ŽĆ.ᓁī _·2“ŠOźšWšåč~jå“Ų­Ö •ʶę;BõZ‰Tŗ3āžx™‹(ĀńĄæē§ŲŸiŲm߇.ļoł¶„ŹČHĮ„E³S qģtąZģ§;#Ž„=nŽ &xÖQ ē-°d0÷Ķ{Ə Ć¢Żż¹ ,ē•*{ŌŌ›h˜Å-O`Õ“łī䵓»tŠÖ\±vlm÷ƑŠ¼D|QØĄ<岉ĢQ¶};ę¹¹N‹Õ¤ņŚ õ«Ļ“H ŖpMĢ7ZœW¤ƒwr>¢»)FĘ3Øyš ŁĻ4‘Aņ`¶Š:ę¹8%–ĆP+$RD”·>éĶk&ĢTĻ”|ā[A¤_iC#nŽO’¬Ó“‹ĖĻķG¶dŁ‚\u>õęŌ¦uÓŖz”§ßXŗKö™”EĆ߯=’*Ł}BŽŽŚ a¹‘->é‘Ī>9‡)Ц6ńEü27•i4ŒogQĄ>•äŽbż¢YQ¾lóž+H®äŹ]…:˜¼ŗ·µ‘ŠĆŸ˜Žs[Śg‡$Ō5#pęt‰~D ŃǼ!s'#ŠõĶ6hō4ĖX?ā`q±³ĻÓłWĖ’Ē~ŗ³YŻ,*9F.2z×”NBŒeA°³¶’]FŽą˜ŌØVå}ˆ«qéw×+ ĘY­d;rŽ>ŸŹŸ%‹r44ۘtK‹‹;ș2æ¼ćš’Ö’Ā——ķ– €-+žqbuK>,±²¶Ž4ų`KW]˰śöś×˜Ūé°ŗ“–Ī4øv‚ Ą ķźzV ›ź ‘ģV’ ®¾Ģš«… W˜śsXM؛F=9ķ„iÉ-ķZʑ”ń#|W}¦éŗ-Õö‹6ś£FC>ūsŒ×ƒé‰{­N·—jaÜŪ™j©S9ż©Öé>%Ö4¹Ÿc3%¢±b2Fļzݚöā-/É+ņz×4©4ėt2.mTŚM4W ›±°Z™¤“m(2bŽŻ>µŸ-½©Źj·—÷ŒÉoTŻŲćō®‹J’ę<–9”ōÅæCZīīā=>tk|HÉ'§½UV7ö+*EQÉĻSW`l˱¶%äG“q<zé,-†™ŗĘWē;°÷ŖrŌE{ėdzø† Č-[žÖµ48 ś›¬R¢ĘķĢxQTä)#VK«å¼µω¶°Œż=kĪ®ŽkK©·åž‡UŁ”t4ōÉāY”»Üˆc5wP×5=.ghŸ÷@€+ >ĘŹZ-ž”Øß^6£Ø>$ēµ¹kyŪnHr2ā­=4%ĻSŃ|-¤hQHś‘µŅ0y MQńƈŸI³dӖ˜”]Ą`ĻJ“Ł2‘껂ā՚鼷2¶@źEkÜ$v1Éy¶P’Ŗ |Ćß2BS±s­ÅöSö4S’Td·å]mĘū;UY’)>ń÷5›z—̈́͸“yÆ· ɓƒƒĪj¾¹„%¾• Ź£ĘźpWŸóÅ"%+„ŸiÓŃ"¼#нŠī“},ZĒo ½i71ĪßJĪKØA˜K©É«ßĘ'gĢ×²Š÷ ųGJŽfó`3G0ąē–ķWmQ§=ˆ¼Cį=7ÉæOå½@D`·FōƝ!³Öåšž3o*ü„;O|WO3*5 ytD¼q=ĖŹÜųn }1Vbņæ$Ķs²łō9_­ü×·2ĢAøÜ@ŻŌżk#Lšę”qtŗŒKFwššFg xzėPžÓ™īnA‹Ļ~껯~Ķ®-P›/źT抦ĄEjg™Ćm‰¾P;šÜ»Ń­otėĖRŪ_nžĘ©”Üęü¤ßh°½ŻĮ¼—Ģb[f22zŠ“Å&u”EˆÉ ·ŌÖ|¤óōžKÄFŠv⣃Ć÷Iv`X Œd`VŠvfæB»Å*ŻŹqSC¦iv·©źQ•ŸŖg¢ŠŅS3åfœz…¤“‰ ņ¶§Ģ¹<Æø®SVÓćŌ·7–”·Ä’Øscä2ķÖ-:F–ģ…T"s‚jޤś•ćĮB8@ĄīZŽm,NĢuŻ„¶®²¤%МńT³¶crČD¤c=ńŲT"ݶ³t’,p«ķ'©\ā„Ö£Ōµ{8RŚQa·#9õ¬åĆ<ćUÓ/`¤Ćvåėō®¶ĆJHV¤ŽŹ7>é÷­nTebmNĮgYš?7ĻDēaäc½zƒtūżwĀ:użō|ŁTv\£¦GėZĘ­‰“(kśA¶žĻh'KI7Čvę/õ·†ÓS°`cUÅś0śVüŚw=—¾kĶ6ižŽŹŁŅ1"擌’C]„,6°hz7ŚE»Ū ZTO•\õéœēŠå©#cŅō µ0‚H¢tLįŽ7{׎|KÓb•mg›Ģ$?wŠĶNƞÕF}6ŻĢ”Œ©čœRGAmį{[‚÷Ė,ƒ~ÖäóŠč­4}Y„Ēl>Å:–É$ō®ˆķc–]Ēh°Įw7:Tr]XĆs"4®I Ł<ߜׅOąßéļs©\[)ÓRgx[o'?„e'ÜŚ–÷Fn­āk˜ŸN²‚Åå†6É!ś“Ōš£āߤR½Ė* }б§üĶ`ĪČ« °Ö/,tʂĪq¹ŽtõéIā,ؓn–ŻdˆFīN aŽ(Ŗ[A4»iƬ©µ® g’ć\^ÆipČļ²&PųŒžU¼_cŠ£¾§źž¾Õļ„HŽ(ÕۈöņO±Ļć°ĆŖxjžēJÕdžybŠ; ¾œzV5dmE‹ŖźZŽ ’ijéVŽ23\”śn”,S­¬ ę<3˜ė\§o5‘“s>±d$ Æ$C‚|Ä×M£éŗŒV³Ék ŪČPČźƒīޤŠe)ŸEüW¹ÓZÓūKķ×7rd+– 1€?Zénü5¤Ś^O5½…¾ąĢÄī{šŽ=ŽncČ)ńfÖҽŖ²«ØĀ³Fsśę°±¾Ū³Š¬ž io¤Ū\]C>Ÿ)™ęØāQ»”ĻÖ»}WI‹Eš½ī o#†ī(³k˜łķģ9ؔ¬CGĖqųæ_Õõ ..„ˆĪϱü„Ę=I®÷ĆÓ%Ķį²ŗ’(d7®įš‰Jä¶z4śdqĻŗŃüÅ\“š ŗŽmKKøMĶĢ’lUQŹŽr•h™*eŻĆžŠf·ÓŘŹŁ ćżYļłę»/¦›’C¤2*–Čä㚵&‹%}ϵqzĻĆż^Ž$Ē™ ”ŁĄ\ŠhĪTĻhšd:ž…įhōM]Y®VtĻG#łW.Ž#¹µÕ ¬V,źXņAĄś~Tه±čŚĢš“qmä(éõ¬YWĪÕŃāøy!c°ĒžĶHF62<_¤Nm¤‚&€ß:2żįéķ^gošÖĢŪ¼å–;ƒ(•q8Ļ_ĆŚ˜÷:(3»3Ékj0ūB䂹 OĘģó>ŸjĘ÷n—5jš@¢{_‚mßDø7ś¼ÖźĶ‘\sŽ3Ū”® Yų“¬/ˆ&¼ąāO•Xē<šj¬]jųkyŖxžšMŒŃ^wäēqļÅ{V³ā+’‡ÓĒ™ļ‘Ą‹Ź„ģžƒõü©Ųå”Nž ź“PĶiw:`qŹ?_›õÆm/ĻÖ%{%ŠHŽ~”{3“ń…mtŻ:®%‰Ū8'ßæyŚĀ“ß%ĖGt@'hŖśā‚•3QŌn¼!góŲ’iZ¬įYŹćę8ėL¾×5 yķÆ£ģ“ųÉ܉œsŪ‚ÆcƒŌ–ĒS¼ø{ –źˆŹ²Æ%†;śs]O‚ąŅSĆבŪNa¹ˆm‰y>bœƒA²•ĻńƇ 7P_ĀZ9Cø¼N@­c®‘}g“{d7”ā'üš¹. {¾‡§ŻZép™„±\ł@zU’²&hęk§óA?łUĘ69§#’ńōĶ^ {xķöpIöī+Õ͌ZŻŖIŗ=»A8<~UMŲĪž÷.j‹k”éŽń‹Y cę;ś\WĢ^,ń¤šģ“YŲŪüŖsņŒ†ćجdõ;by±^}³?•“SY‰,ŗrĆ'v©k äµ¹æeØŻŁa`i!$g*qšī|;ćWK²m7ącœśżk'IäŪ{WÖ¬.5 $ŽĮžn¬{V~³rŚ}ŖÜGq§”xj?5””øSČģ}«ŃŠC Ė œlSņŠøĻø½­“2µČ“ÖF[Y£Y¶˜č?Ļ궅„Ī•µ„¼ŠźšØ#gE“Lq–ģµ=ī”öE†Y`@lz¢Ócq$pŽ€ŖĒ’ē’ÕZF@¤žå»ėqkwię2}†qšęļ.¬.aŗ‰ļžTWĀČ'<ƒéZ£“Õ¬^;x-ķĢĒ28 €ƒµoųpj–³ĘÖāHćOCĆdtÅ žįm †±öxÆģFŲå¹łżqśV»äŲi÷2ż y«ņʍĪī ~„Ļ”›Š«}®Ž]%¦+mn÷q¦1œu«Z†ē©Ȳ mP@ė“R)os¦±ŅmVćĪ•¢’h¹ö¬ĶsJó|é”~ aGūRŹĒ—ĻsØĮušįcŪ+oó­+Zę;µ…‘āGc>”™Õ­—Śķ÷ĻūŪęVģjœižZR2#ŌfÉ–¢Ż»$2]–p½yś%­żō÷"4–^ƒ#(1äźE©ˆ·%ŖĒ\…éĪkO@šĪŸ¦ß@uću‡9 “’× $Ś>܂×ĆZm¼sB²²īvŚ8Īy¦²š5ÄóO=¤wW £ŸįĶ"µG—Ķā«='T[cFXG"ąśW±ųzüClÖšJÆ)Ą.ׄŠ\ŗ³›ńŽ–Q4ÖŃł’3„<ēn;לź&X‰Š¾yéœŚ‹TäŽWY“†(ŻÕoĖĘk‚¼,Bō¾£5ƒävzŲī–M@I圞ŗÆ«ĖöĶEŒp˜`rääõ ę=ÚsKv`aū7Ö®_Cqh.ŲFž)ÅŲĄJŚĘk¶L·Ķ!äšöļ‡ÖwZ¦—'Ū,^HĮš3»ėśÕ·ŲG°\[ŚZiękäF ˆ ˜•ćö¾%óEꋱVvXŒ§;‡<ā±p×SHĪČä|Gv†Īahé“®ĘwWŒéBsØĘŃz“Z—‡µ7JKH>ÄĪĀq"S#‚+£ń‡‡ģnō© q©*rduä~;³)®ē‰ =l-ę³£æ,Ą}į\•ŚŁ9sx£ĖO˜³cŚ‹œ“‡c*mrÖ)™mV(a×ųq[Pkz–»jb·;÷0Ć=3Eś*ʆįĖČ$S4ź%Ż—ćÆŅµå$?•<„Ę8ō&‘Ń 1š¾y©{x&ņ p½@=źĪ›Ø5“ÖŠÄHfBGLŽ’­ót6bgHVx䍳ø!ĮS]O†ü;i"L­4°BbBsę1?žŗ™lKØax–±DCqøäŒ’æZē“żBKxŒ¾qh' ßė\5Q”™żnĮ=~:Žų£Ā>•ØŽ]RŽU‰įĻFœb感„~8²Ō4Ū ]­cŗ@ČČėėQ*vŲ÷źjzLj“ż*ö4°•Ņ(¦Ū±?*æL×ćoü—öTŅž#ü¹ń?†ÄÉ®ŪD-ļīYxŹą”Ļ\1ŸjŽ8eĒN³eq¤ź·eńŠą">$H@ä^©šēÅ:ÅŖ 6ĀIbVœ9$(H=Ŗ1±S…¤o‡ŗg×¾Ö..6G5IJ®ę¤ńN¬,vA‘eø8Ā©?Ė„|ļ"R¹×Sc€Šģ.Qw¹ā>pĘGAė_A@ö6–•œKa°9Œ÷0uģŌO:Ŗ:ķ0FÉņÉ×ó5č:ˆ±¶  B0G©Ævœ®q¶r×*“]Éy$³só޵„H `>SŪ½tIźMik%ÉwÄ$ n·¢ŻŽĆrm”.sŒēØśP+.Æ}D€Ęžil“ššĄÆŁåš*GīŲrßJĶĄÓŚž«"y¢07€J›LUIc“*™vz꧕ƒ™Ż^č‘Ig w/”}#šĒ“MH÷ĒĶ;Ą#’)'c9·(-’$ åä¾¹=j•“ūiJ ’GŽ®•= ½™«ŒPź)|Œķą‘ZŚņ}–oœ£FÜgŠ|ģæf‘ĖZX’hSÉą ­{¦Ęβŗo Ą&·‹¹ƒgS”ź‘Śyh\ØŪÆ®xƒūVŚh#ڲŖįS<0Å1&y¦™op«2=øB§9öōØ/­$^æsøŖ$ÖĆ2aŗhI·±«ń“÷Ķ3ĒA-‚qō­c¹9+>x§™ĶĢ’†9łŗÆµ>āt,­LxņkŖ”‘Æ:¾‰¦Ȉ4˜]ĒŌrq]/Ā\Ļ«=ņ\³Ū£+€ óž[ń„wZŗ¬¶óˆŻĪIś×’Éį?9Č7„'„ƒ›įł¤¹’īįH‰F:Ž`±­«hś„ö™<6R²’‡y>ÕĮh×w¾ GÆł$“yĮ뻁R±ķ7)ŗÕå“{yex†Ó—=?śÕsĘ^-x“K}>ŽŁw!.X™Ö²”li³ŌāŌeÜ`“ĪĻ ćŠŅӅ¬ŗ”ßk‚)āLēęCžqYJ&џs¼ŗyŪL¹ŠĶdH…éųןZ޾‘} ^£D Ę@źi{2%3 ¹Ō-5[ˆÅČ…)ż xž„"½óSx89*¢¬¬sĶ`²‰ y į €õ÷Å\ҬB»Ż>ÕFpS{RÓ­f@ŖŠčĖ0k“ŽÄå pÕs³EŁü+­ż›Ė†öą­øpg”®·Ę³Ų¶Œ^;ÅvrG§ŖŒ»‘R,łóMšrb–?*Sž!ž¢»XtŪXUnB{­)±F67ō»k£ č0vv>#w]!>Ή#œ|øĪfRV<^ņ(‰fQžį»W14"剃“‚8ļō®/‡ShóInÓĪ҇%VÜ_'=hęFžĢėō!ż˜²$÷Üķ#°Ä]Īóź7BI@ŁÉ?z­L‡žš÷WŪ×pēW.‘s§hēXvw†3‚Ä`)=?‘§Ė}EĢr暐ź76÷IU@śŠąd gū3L¶āK’}*M#S¹ŃéZ†£ Åg'qé_LųoMŽęĶHVQ-ĻŽ>Ō­Š×›©·o>“—Ö@=Ę܀Oqė\‹ųĆYÖ m2ž;i#ą9e>€ć„;±3§šÆ…ÖķÆąxø$(Čõ®ÅV—śœ‰¦]رˆŃśę¶„®ęSģyŝ°žõĖ‚$i73•Ņɦż‚øGÜGņAŖ.—öEEŪ¹„)y隷®D·—(Ä!c„sŌw*7ü9¢_\¬‹pń¢° »‡Ś¢×t ĪI£H™œõīūÖ¶6U¼–¹Ńćņ3$ū2ėźk‹±ä2Å䢷=))0nśźėÅ#E žQ …?Ž>õŽų#Åo€·šnŹFįC‘<ŒŃń§uĖŁ-ģ­ŹŪ²c>`8 ķļ^{ ®ełS|›²ųõ­b+X±Æ[M%²Ķl‘(č;Ń„ź77ö›ZH°ĮHučęŗR±„™Šj knØc‡süF¼£Ä‘¤ū.!G'šKdvō2d¼4_ĶAu·aa“Õģ¶ŃAjķ4…€?s=ėšfŠf¦³}(Ó^ņå÷Dp„“’1ҼKXń—H–å¤ū.żĮKwõØQ5Œ»›z5•Åõˆež7Įž#Čõ[WŃ¢_Ø'å5¬iŽS9Ķ F½ū{-ńł7å[ĄÆi‹S±šĢvņK"Ȁg-ü-[Āž¦™#ųŠ R§I¹<‚C^uųH5(ī “ły_ŹŗRȵ­ŽI Vöķ# †ā&’ÖäÅ&ņŠzYI£'#oWŃ£³²³·F–į•~rĒ;›ÖøŻ;ZŗŅ¼Wel–žm°\ŒB‘×p®fĘ z¾+Žh¶¢×HK©]Õ7Ā '“ÅrśĶݾ·ömᶆO/CČõĻåWt2©q^'Ss§y+3§˜ĮU‡šśÖ[4V¾T!ąļZÜĘŻ±Łw“$?tżģri5{7‰UĀ(8žµŒ÷7¤É­­.gŁ ”ąq†÷®lbŃįŽ’Pd" L8õöØ±Š‹š…t›ķ:ēÅŗv”o+¶…AČĄéĶr„$Ų³9=«9#Xli]j¦ÖĘņ9bG’L(g5’.n#Ž0`‹ƒ…čk2Č žXÆnFØx9ÅoéRĻöĆ-ė‡L@µ /n Bp„¶r>µŃų^X`q» ö·Hų­žŚĘ ³§ĘQnŽ#„rś¾•,‹©Čœ`TÉŲV2ļ-"Ū„EóPõ«ž@×CĻłÕNĻŽīķc+WŠŽyó,”ė[ZF›Š»Ź7 ¹ąćmoNŖŹģEZZ‚ĶŒó® Ä {r<›ūr®I‡­0*iU¬VSI,é(.2>ĆŽø˜.ī®n.RLOAėIÄ ś5”ŻŖw†F}ėŃﬔģ×%ŚŹxł«>BŪŅĒq¢_ĒnšMŪN½Uńˆlo.^Ś8÷>`ƒ“Sbj]B 8š;DŻŽ²ęK‹”ŽIƒ Jćv1šV„š¾› Ņfy¶4cö¾•ėÖž(‡Ć¢ŽźŃ~Ö#u![’zÓNĄpŗæŒEĶ܀•ŻÅ)–Ł­VUĀ€H'ƒ[F60”Ģ6_<’(Ž4cĒ|ՙ/]eŽ«½Cp“ČR.Ū:Ū½äęM†D ä×5"Ķs›‚‚ņ\ŠQ”gص™Śń¦÷8׋(mX»„ø+• ņ(ęč8imƒOænüó»Ķpž"ŠMNč¢\KsĘ3ž¬ ŁZĘŚÖ  €Ü Y€Ć’Zč$¶‚e—*ūŸ½EČse ­&ĆX6Ét=ŗÆ½pš ›B¹ŸO³Y#iNՐ •÷Ķ6z~”-e°¶‚figņĄbOńUÅŅ`T‘¼dcŽ9ĄŖVĒIˆÜ^dw•<·Śī££k§½¬2D$uĘ?Ó½KH“?Åzv§ØĮDī#eēiĘ+#CšÓZÅ—"I‘K;ćŽ¢Ę±Zg¼ ”gšÓ²Ķ#ŽX•÷5į} ÓĆśUż®cwĘ!ge°śÕFVCq4l~iŚ kńgeNżĄpxŠīÓEÖÓĆŚ-“’[’ŹĆ ·<ž5.±Q§Šōæ xŽĀÓE¼±¾³šʐ2J§åŚŹŗ_ ŚAG4.—VģļŸ0䜜ćõ®iT¹Æ³āVóF¼¶‡Oŗ€ŪłD”NJƒŲŸĪ¼›Xń<7’4ńIēJ‡c®{Ō¦6“°’ćRŌo-Hā•€`:cžõGPšµö›ć2—š‡ī¢oõ)ü'®x©›č(¾‡©M|/.#{x'6źŖ>ļŽć’­\®„ā{ę[7ŌmA®ÜüĒ„fXķ`0ŻŻŚ~ś7R¤õĮÆ7Ö¼­ėWŪnõkū}82øXÓĮõōö­cg ZųÆKk“£D’¾· ž=Ī{Öī“s§ŚųĶōķC[“¶ÓīmŹČŒ™ ÜĒ8§)[cScǟ“ Śčæ4M6#§[™„…v”ä’}3Ņ£»ń=Š¼u§„Ō†ŁĘB)ū śƹå&iõ< |)SB‘ÜŽ%Įóozó_G ģį``†/“%zŸZJ]£”ū\įW{9r:b©łÆ5¾œŃŹčdp| ēŸŹ¬ŹP>€‚×Ho ]éqŻEeØł_$Łm叧jąN•{lŠÄ.fĀņ’qÖ«šĘ™ĘźzjŁÜ™Õ‡#${׉x‚å//Œ¦1Äg²ĘløDį¼K§Ek:™nÄ.ŪOĢ1»#ČéüQń/Ā6ŗÖ”u§Ķs'Ł3ģb'óéUõ›‹ĻŒÖ?ŚW~}¤Ž›WrĮGAÅW3:#zü6¶]jĪŃ4ĒH$§wĪ8ÆJ³ųI£æ‰mµķĀOµDŠ…™ųĪ:ć„&īkcŲõk^ĖĆ×:ĢÖBāk8ž]Œ2eŪĪļŸJüęų‰ń_ÄŽ=×'Õ®ķģ“Ė$…b·¶€ 1ƒøõ65EŻGņyrĻó.āx>™=«×õo ĒgØĄśBĒtŹĖ“(ąÖ³”{:}ŽĢŽéŽe±ŗž»™ĘxĮ?Zå¼YńeüšlQŁ ‰f™cP 3OSDcŌÅR9ų‡ÅZÖÆö•q ®€ĪĪyuĘ;×s£GqsmēßNĶoø Źb}h3Ī|QÆ.©]iš#Ū¤{Ÿ”ō­æ _Ė›.]Ųēvx4ļo™­»o źš–Ÿw}ok#%“FVp8P=Oց‚4ūŪ’ ˬ<1ZÜąG"ēęēŽ+•»°Õ¬µk(į>lsė@)ž"jŠ%µ¶Ń..c·Œ«Ė³ƒ# ŠöŸ‡š©ŃžŁ ŗĀĮd’)rü)=‰ņ;]vžßUK† •$ć>õ‰š’Āöŗ ā «›Ū‡É‘ä;¶“Ō ×<äJ=āOÄh<¦ZZf‘£ HSēfÉ8®[Ćõ‹{HõCb/&e+·ī‘Ē~•Ė)joWŠņx–ākmFī !ö™Iڃ '°Æ:žūQ»šƒųv)ĶH”Ÿ”ńž•Qe{}”įLš÷ĆĶ?M†Yļ‚(vžRrŅ0Īܞ»y«·_Ų0[[Ś/”×O†2zzWD&a*cnī?³tĖ›>ŅŽk†€Å1ū¹ėżkęŻNĒÅ‘i­4c Ē€NHĒZ苹—³aćojś>›8¹šč˜U~ć)ž|W™Õ'Óä6ńO挪oR>ā˜{6kxJĖ^ÖļÖ;ˆnmö©^OĖĮź>µŚx»Ą±^XH%“ˆ<Īy*h5WZžMgšėY{'½1Ä-cD†ü zž›vžŃć·xķŌB ±2ķœqAŗ(ų?Ęš³|kc¤ŽG³M“ȅŚ\+3głó]‹¼!„i7®$ŽĶ’łI*Ķģh7Q±ņ·Ä’†šŃ¼:ōW®Aņćøļ]wō|9”Y¼¬“ŻKļøÉV’"ƒ:¶źzŽ…{c{¶Į£h `ūxÉ5Ļų‹ĀŚfæāųoš¦Ó­Ž$ņ²8nĒ'ŠÅļ”Å-„©Oƒkoii®Ģ0“<}³žsZ:Š×P¶7Uw2°.>SĒć@¢™„xĢnĪņLŅń×$Šf·įqgh.n“|fNS©O”²Lš-KL·ŌęG#ī* ÷Æ2ńŸucqoaglʇ"\’ ö­©Ę]4š_˜š ŻžOz»k'˜Š4ń¦õļŽMEŲģõoĢt 4«sęe³# łŠć€;ś×™ZčO,W9Ņ/¼Ää&}IšnkøµG:|·0A‡+9LwśWŅ`Ÿ]»UŽuØĢ@ŒóI³ ›¾!ÓļĪuGdŠ”‘Įł~aķ_;ųn=Dė7·ĖĢß3|łĄō،»“cڵ‡YŠV7–5 ™%_“łVv”ŁŲZĒ9Õm¤“ĖV³•;Ī{ג鶏¤MvöbGWsŒ• 0qųf‘q‘¢Åœ7 x¢RJ“$c÷®bŪĆ÷×b}–䔩ž÷Ņ‚™.£ŽµĢ‹k5·•āĪ1zb»ė3ČÓŌŹÖ{ŠüĮ['÷¤Ģ%tliŚR^\.ŠŠBøÜČ2v÷Ą­-CF¶kI&‰hƒóvśÖRfN]ĖčŠŖ]/)SČŠōå‰ŚÉĪ<ĘĮ›ūŌ›¤Ušéŗo(„lnPN3Šā5ūYuõ–ĢÜŹd?æVbUTÓŠēX’+-OTĢįY-— ““[~'i'0ĄKŪΤ3!8b¹žU¬V†±7mÆüø­Ž!¶HŌ8ĻéP.®‘KäĖo¾i÷OŽļTK›9ó­™&vŚŲ>ÕĻĀ3eoÓłÆ Ć9+^÷5Ŗ‘²™Į^}¦ŪSd:•(ÉĆėłVö”÷īöó0) ±$vj™>ÅÜō­&{Qö‰<šži,ÜéF”¬iKåÅ97*rø_Ņ ŹR0t=ņjŠNŸYG–.Ēżgū"¶5ė˜ ŖGq,`ķÜ3–ü(2ŗOC†mM“¤øpQŚE!³ĪōŖŗEłÕ&”@ņņ00zPR:żB;Mi">mŅŽ~¦«h±ź²@ė<’0.Ģ ¹ģ(-FęV·į© Ż,ŠßQĪkJŠoaū©w ß"=ĖĆ śŠĶbmŠõ -NĪćI¶ `»r7c±¬[ĀŖŪå™B˜ĘNG5åXå/Æ!žÖk q†$œqścg|ēĶ‘ĖpI|ķ§\G_’֟%ėK<фW# qķZŠhŪbę-:5–õ@PpqÜÕs°›J½Ńg··¹øYę{pȲ«’×® SMwK{­FŹtødÄr&qō¦ŅäkĶRūQusɶRS«śf½ūĮ‹öKīäš[Tr6ÄĆØ=M#ƒU×n/KhĮņšĄ}źådø‘å+pŲ=( m£“ŌR[«…L$H€®ą9j«’µÄ“BŃ*»¹“ŒZM¹]Åē†ÓK·ŠŻš)ä(ņ6Jƒ\ćiҵāНł)źŌœL¤ŽŹŅį“Ūhmg(²oįIē55ÕōÓe½ū͐Ųč}+7Gdeiȏr^ź6XwĒqڽĆĆśšųjŃ,“ÖÄķ½—Õ󜑮©G¹­ś/_Pń¶Ó_NŒøR]¤vēTŗ†›icĪVŠ ęŖ#¹ć~ ³ņģ®FŻYƒćzW‘ÄRŅź;‹ē1FdĮ"ØMŗ¤77É`Ņ}™>l0Éa[6ѓ*yØŹ‡×µgP˜÷MĆKŅģķĶƒüĪĢ£­Kāč6P[+Eŗ»DŽķłv8ĻN*4LŽÖÓķ9¤“öDyØė[œ°%‹Z]ÜŪŽĶ"1Ųy<õ$U©ƒg‚ėZT½Ķ¢©yWꯣģ~œW€_ż£ķ×1NŽdHݾļšŸr7'“Ó“Dņż‘ū§½+A±‚ĀŁB(ŽŲ\c•£Ś(Ųµ©kIkq ²A;Üm%œżŠsÓėX÷w"ę3y" ņŪ''œż)©#DަÓÄ\iVŚY.ĄĆ1ܽż+’Ōồ)!‰ 2r¹źGØŖ.§”hšm»Įk+”EņĒs»ėWīļ'ŠT’67TŻČZ,.C]i5;–¹–įŪÓš­Oģ(oōūą·±ĘÅ>U ’ßNՄéõ5Tn~³~ĘßåųGń[@žńeŽĆP•ģÉ2nŠ>ėø÷ęæ°?^>“Ö“_]éw2HŅF’#ēžZń+š¬Yj~‰ŚEöķ&Ęāå#ĶĒbĆ÷r ~]«Ÿń–›aāķēĮŗŻ…Ž“u –—k Č.Ć äöĮĒėQ3)Džæą¢_³†§šā÷‰ķmt›}3Lžį`¶nW,IÜøģkāŸßĖ„ė6q2!8lœZ×IÓ±­=-cīŻ [2ŠMŃ<žZŪŲŽ»—ņmŅiÄKlØÉƘ•ļc¤ĘSŅ%k†UUĒįøśŠŲ‚x €ū¦ĄÅwį.š<üJoCŅōd·[bąÕ~ėĮö® ó^6ѱ™Æ¦„3ĻcļŻceW ģĆb – –ƒdLīHąu׊ŹqźliV3ڰ‘Š•”=ė°Šä‚)öżš'b7Č RG©™WPŅbūle‚np.:ĢHŅi¦A!6B‘×éWĖ„ČrÖÄ72‘#eGŽĘpk69$ŠīŽįƍ¬3“Ö„Ğvzjkx±Ŗmˆp ŸĘ·¬m";ŻejüÄõśT8š&s—–‰/œb ļõ—m§¬®-äeWĻō¦ö°\»qg4pɉh¼ē5ĶGw=Ū¼B¤Śqõ¦;›N“é9ņĖnaó`v«Ū“ē‚I‡’ąē'ēµęFׇoä·hm<Ćš Ŗ˜ĻAŚÆŽ47·ķ?ļ!n;ķ ­KMå$." ą{R=»^<^[1Ž…"™©żšmąFŒ…,¹ą`Šāu-i¬[ģSÓ*8éZS"L§i<ƒs¬ 8#‚8Į­DÖMµŠ”4Y'¹­ĢŽž3esh÷.ńFŲūøė\‰5{h 6é mā#©ü:V6e«EpHcßńÉ®ĘĪXķģDp+NĄnĄģ} tSFuM®_P½qåˆć¾µ‹©_^鶄mlBAĻAō­ĪU.ēE<ƒUŅįĖ JåĀ‘Č&“|‘yķn±,(2[±ėS6\=’ė^Ó¬ēÓģgUi¦,# ’­YZ‹Ųé–×:¤“Ŗ)`ަ²ÜÓ[ó›]Y Ö’żāAżkĀŽKłŚÖŁX %W?ʶJĘrŲµwe>‘5Ū|üķ sł×‘Eęi—/żįœJŁI/Ų~ѽ‘"WN8ļ]6,1@7ØpqŅ­Ē»½ßuB§cŸ_JĀŌe¶†v€dŹ[rūB‹øĻ6Mˆ Ŗ¾yĄėZ¶vo4–ļ"‡U%¹)¬§¹qÜµÆź^T–ķ’&^ƽr:­ä÷ŹļpY˜ÜóŸz‚”Ž9–DQ€ĄŻÓ#„¼/2 •O!‡JĶÜÖ,Ū]²H‰M§'ŽōŲµ8-ī “ķc½(•)n„ØyW—31"óČĄ<ö®÷Ā:Ō×Qˆdy7ÆDķZźŒL%3ŠÆ,WPŒoU9÷Ė/¼rqņœm\t«"55żJ=9†žŹŅlŒ ƶÖ~Š›”d‚¬±“]Ī—FÕmŽqo!@€nŻžµ—«-†°÷q^å Ā¾~šōØr.(˳ń‹¢]"ee@0Ŗiž6ńM–«iµ”ŽŻįžX1ĒVøéYJ”jŸs;Ćl—Ņū>.vīß·åÆDÓ¼m%†Æys4p]Ę«†cē„Jž£tō1“Łō‹¢/™ī-Ջ0p=«‹ńę»eyl–ØĻ*}ā£å9«F2V9½*ćģ³ČTLć'pūŲ¬N&’ńäåesϵ%vgW£ŗ|Ą ¢8®–Łl¬²)3ŽHć#G;sØ.Ÿ‰ab„ĻqėPi63źåeµp‘c;±ž(6Ī² źhĻ(ŚŪŽ7w§x’öKŁōż&U…`‹÷›‡ž:śÕ(„Ģ8ōf¾Ō vD Q’ēÓŚ½žĘĘŠh֚K¬k<„ƒ#3qZr·ö ųViī\*„'9^Ų«2ųĀÖā1B pwi{2\9ÖgKęl¹B§ ī=ė—>XVŠ7EÜzzSQ±‘ķ?¼'ö=åō—6Ė2)eV#/ō®‘ō8®!V1¦ņ:g€}j…cż_hś.¤"•ƒ£~SÅmD–ͤĆ|žRɐ@=q@×cķüųe1˰ģzT^i-å–9¦eĮ;@¬Z6]ĖRÉØ’hŪĒąĘI2=ŗŪ}J4‘—żjü«ž‡ Š›©‘hÖŃZ3ßÉ™˜zf¬kzŻżÅŃŗEˆ…UUķĄćņ¬łjHó{½Fśāynf£ä/ķśš‡J…Žźiܹ„gSZE;)-@šŁF¾‘-ćņĪŻÄ°ÆDÖ5T’„f÷CŁo$2…2nŸtÅt1–ĒŚ8Ķ$)±°§rš+|#,Q4öŹ.!É}Ż6óœS¶”Ęu”q¶®bXćAŲ:żkŌb»Ō¬Ö%…CĒ^C‰¤ec¬³Ōü›Y|čįžį°Fń? äģb‚=FK§·O3;²k&iĢwoā5ŠO³ĪńJTŒ”Į#3^)r÷Mż¢¾f%W<õ«ŒŒäŸR]'@ū.œ÷sJ“JĪ0ƒ°%¢Åw=äwąƒSœó]Iésš[™Śg†¾És{«4ķsmTÆŹqŠµ{[›Qū‡†lŽ"±“*–|+ ·ü$¶7“ŚE5“gs+”C^½Ø¤·†K(<Ų7ŖJĖ›Sh÷/Ē«>ųĖp.0—‚+ϼ[skuŖ.čćEDŠ®t•Ģø5Ø7éöš ¶a׃]½¤¶Ś^<įc{Ļ%ńä‘RēŠGšé&kH,õ ė8ī.dMĶ1°śuķWmõ_ķ{Įqlƒnš¬øåMf \źēń}µ›ińĆ7øV—OOZ菈“ķkN1N<ņ(یdw5”»›EXć`Ö­ōé.QDÅp žŻ*¶ŗæŚ B¹ķÖ Ņ.Ä3ųF;gŒnܱoJµ>•{¦hZµż•œ¦xæÕķĘO^”RčŒū‰¦¼XŽåó2Ø'½[Ń£ņ/ĪB³ēļWAŒ™Śėq—²x"0ưé\Ž“aA"iĻėZ)÷2ā E,¢h.”ŒJpc|ąŒV^Ÿ [źŚ}Åō”¤‰A|ē„.my“w‰y)†ÉäŠ$|^7`öü«¾ÓõłļĆ~Jģ )÷±VÜ£āVYa[[v—Élēęźk—µÓīä"KˆŹw=ÅĻą©<5§hņŚß\‡ÕRĢ£Œ!Ÿ…u,Ś–”魋ÜĒīŽĀ·Š3•ś”ÕĶŭ墅K•o’Eźµ±§h'QÓf„n]ĄōåHļ[@ÉÜāu› æ ¼sDeņf$¢ž«T“ūŌ§7W0żöĄ’õՄ śž›hŗ xÅ`Ŗj[%|ÖꇬŚŲļ„,Ć`ĀR(Ļ×®Ååōr¬¹…I*óÆ[ÓõM/JšM®§%ŲżŚŸ?S\±©Ż^ļHāWŒČ1·Ŗœõ Ņä±^jzuŖ®ł~vĒ­'JšßĪø»?|½é%Ō,i¾’³OPBĮāŗKHH“ėu‘Ų¼£„L¢#Ė5›©ķµ4¶Ń…×” }Öļ“õĶtöė%ÅŗĆzĖę8Éņhå[ å-ym!±…ČfŗŽUĮĆŪś×n)„h™’7lķsUaN™«Ka«ŁŠń‘‘^©‘O(2¤LGš >Ā•ū„;ÜͪdzŪŵˆl®AՍ®KuiØ cq&.sĄ¢ås5¾ŗ.ķaŠņ(žXöĄąž2¼j,mä˜[@qߞ•2ˆsœ„ķė*>Ņ褎§ŸĪŗy¼Xm^ I×tašŪFMO+g§Ś\A, 4EŽS#"±õ;y'óļ%U mõ­#±œ»šÓnuu¹XĢAē'ļcҽm-X³Ęsdņ~”ŹŒ»Ģ—ŚUŚ\Ū†[‹“ŲF?JóØõy“Ūēćx‘›%}ØfµĻ‰t»›9"™žL£>µĀÜŅņķa0A°¶āz6}©²9“±zöÕS"7cŹæŹ¶ń–¦‰I‡BWõ„ÓR3Ō“ķDA'šVVsó8ZąŪĆ w½vFsӖ5“*'ć_ Śźł ŅIz„lÉą+Ē h¬mna1ʤn\š9ķHŁ3jņž‘6L’Ā š½o᫽]įibułvƾ”ĆµĻ Ae„Hu1węĄD‘ƒŌtČõÆ?š™ØMŖ\Ģ-. 2®ā$Oõd’ēµm„zl›RÕ$øžŻgøŚ\…^µō×ĆK-¬Ōjv¾B“µ8Ųz Stž:ÕtOk©”ÜÜ@ļ,•€ˆ!GĒė^‘į½;-µ-1"•ć;™å‡Zȋ³×-¼o¢’Ā7­kw¾Ži,tł>ĻiåóŻW«ƒ×&æu__kšęµ}&–š}ĶĶÓ\¦¾šĻ†¶ŚŲ­ęÆo<ē;ņvm9÷ö¤Źē8找K›Wxo"žÕ@¦"n÷ĮöÆ0Ó|«xŗIu›čeūp~lŠśYŌķ¼šś[ŻCQss2’©ˆ}įž×挦K”“ģ|Ū„|Y™ę“K-Ab“y:“dZöy5ēÕ'†[0ZQó1Ļ^:Ö,,w~‘y©iį”·’i• Ų£'5ęž5y£µŽĘ8¦2ÄĮŪoQžqJ3"QGœĶ-Ō‘<ńnnmßĆSųÅZ[ė*³½Ó–NĒ­mķ ņ55«¶–iŗJ‰ČV#·½q·––Y'™rI9½8ȋ˜¾]>āyŠJ–¾[–~9cé]gü$Rą‘8!X(õ`*˜Ķ«ļæoi;ݰyʁé[ŽńV·k©ÜŹ'h€!pųHėüė bŽ/Ɐų·Äŗt÷Ņ,övźW'’ĖŲڽC_·é/—ö@AłuķÅbįŲéŽÅY4‰'ŁĆø§ĢYŗ]‡‡ül÷‘¼$;œą~f”Ęƚ‹õŪæO“· ¼!ņŌåY½żUKĆŚŁŌŽø»UŪ‘“œgŅŖ1›čw:Œtūy¬(²ķģĪ+Rā[Ņģ7NŖeĢīBAõÆP—AņvXn~]Ńņ C˜äĻ`ųu¦æ†4Ó}5¢ļLnzoĒ8żEt‰ŖėvśÅ½ü3$6ū(1ĻéYór«źkų“[¼Õ~Ł„iÓEg%Āł{™øŒwlŸ„|Ū x‚īÉ„†ō;„w‹{õ”€E"l{‹¬³`³l„ņžÕčV÷w7°„Ŗ˜üœd€Gւē_/u_h¶²@<¶vQ÷‰õļ^Oą?¶‰§I”;K“łjNÕśw Õ;č}K ų®ŪÄv1M4»äŒØ€p€wśq\/Š"š÷µSg§ŽĄ×©Ųl~T]™GY„OmįĖIl!Ų±ī''#ø5ņ÷Å­~é¾ ßk6:`‡QūoČŌF™x µÜxäĘrx5ėw“O¤Į r¹6G'Ž•nŒ-#Xußo.d˜q[ė~b¹7PŪ++)’AøŒŒdכ łyf’×Sy<•ta•ćj8Ģ×7ž\Ŗ¾[ā$±lōĻ„Zfš‰t<–÷ŒÅ\) 2k³¶Šģ`C©źqĖ#*3ˆĄåčqAW¤B—ŗrŻŖ²7FEr~ »ÓtčRigå1łD€ńš>cõĶ3>~ǚj–rݹ»BĪ›€ŽpµnĮ$v¶RFQŽP0”G idj0ŽEÜĶ)2¢ÖÓßHÖåLJålri$MMF}Gū.84øŚźTĄq„ʁɩņ'QĀņIü*•ŗ˜ŲĮ“š®™$śõŽ­xÖāK`bž xüMaųgFžėRM:ĘD<¢5ÉĒ|R5¦{Sč ¶Iaq+ĻtŒQ²sÓŌÖv„m%šĒSĄ$ƒŠ bģ\“ŗŅå€Erˆ£HvźŁ„×4x%±q…|²"NœējgŲӜ‹ĮŃK¢+¬EZįN@u »?Ž’Y’āŅżÆ³½śäśŌ8‘ⲑt‰k ,]Fāk+kČܰV;OAÜUFÜĻ™åµĢl±±vi0"ših¾'žĘŌ<«QŗWŹoSŠž*ˌśy2X\<·²«±=Ū?…:k‹KłE„» ·pTŸŅnyĢŖ™ķ-c‰aݽŒĆ=}ėud½Ō4äŽGĆćk <.­!ĶģmnE·žėƒž1UW̚T!ĖšOćA&„­Š/ļŁ™š bŻ ō6—}-ÕÕĢR,Rg 'ī©ļĪ“’Ų³±‚…‘‚)£ėę[>•"ŚY‹‰.”Jj…ź“É3t­5»7Ģļhł*_æ=©ŌuMRā ‚Ź>rFIÆ Ō-'ÜĪ~`x$ŅΟĮšÜÄņ=ĀęĖp;qßė^©oå[$ÓDˆwŽnvŠžsGn§3ŖÄ-”žŠš(āøpÄ ę4é®ļāwXķŚÉć ģhSÖĮĢz4M¶³µhį1DØē%sō®"{™5‹óåa¢ ˆĮĪMiXQÜōUÕ%Ó4å‹Ė #®ŽFvžēŪ„y޵«ÉtåįŁÉł»ŒUŖ…žysqöi„°¾éQ²ø5Üx_ÄØx$‘B0$’‡å©¤Ń÷Ļ…õ#g-»ŚĶ·¹Œī>¼ōÆéOž Õńäx‹Į¾Šofó5]7+1IwĆn¼~µŒé„ >MOčWįī¼¾+’Śøs ± žĪ#óÆW‡ĀóŪ]ŻŻ]£ÜY]ƒ¤l;’*ååKAŌņ?&?ąŖ’²¬ŸžŪx»CÓąŗÖō؍½õ±„Pgd”ŗēžµücxŸĆĶį_T°Š0/¬/ ŲVĻ^£“U{¦ŒāśPxűź–6²nI$(ŽŠ¼^§āļčŗŽo¤^īåŻ!'+īōƵ+I ”ĖŁŽŪµŹ4Īā…Ąč zV‘©éĀ9~ŠņFr;b®…K;3ž«=šĪq5œ„Ŗ&Ǝ_Rk~ŚņŠ™żņ÷&½ü<ī>Q-VBķ3!`r§?„G“Y.<Ütė]šzKcŗšÕå•Ü‹ö¤@ƒ(ŽOCZ÷6Ö°–6²¤c#hūĘŗQĪ~āiīnąYFłNy§įY÷Śd…ŅH]šą6x8Å\ec)¢Œé=¾B“»ƒĶM4a‘I_™½zM»ié)˜É"¢s’ź®ŻVŻ­ŹÅ!MߝMÓ1/$ūī–ųž"2K ÷üėŽŌ57’į[ĢEeī¼~‘-h[[Ć-š3Ģf`s]މ„[Įg=ģņ•ŚÆ!ł{ö1„Ė©Øjm©Z…,™ T X–Je”Fw7>h1:*Co-ĮuĆA>µGU¾Ÿę[4ĖŽN4ĢłĢWŌõĎ)›o$wbŗm#[KlO<6ž“ҹ”ŌéśĶ–³9°ā[Æą°Eyoˆ|5wg¬O+O-ĖI&ń杧Š{V‘ŒŖ\†gX|ø Y7mżį'æµ5 Ÿ‡‹2 ēžµDø÷:K.%·$‚€Ā­K¦i5²Ź7ĒødĪ(.2člÉįi.ā2YŪŹ‰$÷Ü¢²m¬ķ¬-.EĆ>ć—É<žÓ±/s–x„šH yG Ļz}®©jóĘ%¶x·‘Ū×5N”1¦™ģś_Ćß“ZÜ*BŠĘ3±{z×;gį¶Óu70&Ī× ö÷¬ŻCUM- ?Ś^5ķ›,čd‰IUĻŻ½&½ŖxkH›Éių?z2 éžj£øŽŠČ< ›i³ *+1?3Zķ—Ik;ŞÖ'»ä`}ŚŁõC—ń•̐y‘mʧ$’xī›Sl•„‘@bźœēń¦bz^v—RAk2ŗ[1Įd9#š®”Ų’g²Ģ y³µJMŠi6q]# oē8Ī3^m-”—^dŒohŪc8Å'&Tcrιbš^ ‹! œ#g®†]BŽĒL™”‹Ź(ŲO;³ėX¹³[XänĢsF&ļn£ŠĒŸMµŠ¦ 3äõéõ„ĢĢŪ]FķœRFįŠgØ­++ø„@Š7ēå#?tśSL¬u:M³Ū·™%±ņó…=Mq”Ū\ß ÷W²ƒŌӋH©K±WÄvuĶ¢ˆāH>cŽÆķ\ī‹5¶ŸØFeŗ\øĀ§s޵¼jhdįwcŁķ®~ŚQ””F{Œp+·³–Õ *óu)µnDĘ6<æR²žļVigŖX ¤dµÉŽio¤Ż wiŁ›åöĶb×Ch3ONv·¹Qµ]Ž€9ŽŗĖ ¦Ø'‚5S )2e€ õ>•ĪtĄńļiJ¾ū8™$*Bį2sō®ßĄŗz‡–ڲ# zVrŠŠśZ×Āŗ&‡ē=µÓ4ŽPŲ :d޼b¼ėU»¬²É$bŲ°Ż“ŒQՅĢjÖ1h‘GT»•JżŃĀ¼VĻM“ķ"g,ŪŽ<ąÖé>‡<äŗŹŪZ-ŗ_\A“I“{×'uf— eŲqƒČŖp3ē Dݱ™¶ØćķW“åUSk ĘV Ōž>• eŠÓæŅ–x­ćxŹķĪHźksAk{)"KhŹĒzbƒzrčz”«»ˆ*+`.åā¹S£XÜĻӗžtbFzcҵ¦‘ 鍅žœc¹ņŅ5AŅŗkϲI”é*Ŗø 9$śży­›F.G—ų¹īķ§…¤Źt –<•Æ&if7¢hĮÜOÖ³$ц»ŽM ™~éēŖvš7Łī‘&åɥ抎֌ęóH»‚ß{ĮlYGzö-":eI‹ pzVre&yæÄM7ĻĞXšź ÄcæµqŚa[$[<Ą@%éķD_A¶oŲčvä³*ī>\z×FžK;wžt@ąn^ł”-A½M)õ}}M„s<Ā2oEĮ銿„5›[§–ö ¼¼nłĻJ„LWdŽSøkpÅ;ŲćåÕoÅŃ“ø '•÷š0­#Euvz¬ŗŠnŒĄéō­Ót³¦˜"Ž(ēūŪ€ż+d­°łŁ‹k}›+b0ÓōŻŅÆE©Ē~¬ 1¶ÓŒŒę¦R±%ė»Ū«[m:DņĖēo|W£i%Ƈķ,ÉW*U¾A•ükžS4‚2,!“ŠęŽžD•21“sZ·uŅ"“L3ózQĢ‹)k7šŲÜZÄÅCJ ©==j¶«©Å„h×rBŃż©ÓhČĪ=k&ilj&½|&•į™Ļ'nēÅ\¶ńōk3:y§ĆŅ)³f-röęŽ8݌*Ų8_ZچK•ڱ»Qy=ó[£žeĮs~K ‰(Ē=kŽĪGŸģ/šžæJRŲQ7tŪ½1.Ö8žlg<õ®–ĒÄfŪ ó% ŽkDIāIØ›Č6.’kĻ Ō®µ×‹jJ.-åĒĻĄĘ{{UF7b-A]¶ŅžŽ@eÉ,«•Lzšč.¬å°IžéĖ©õĪŠj¹pz•Æö|ńĘź|²7.G¶4ĶV0Źc }ъ̸ŹĆõ.×Y¶‘#I»9nyõ«~Ņ®“¤’ŻŠö€„õ¬åcDÅ×ō7øuŗD@K8Óxjiö1+^F³`™6‚pj\Žž;ŅÓ$Ų¶ž«óųĖFÓü5Ø@ņA=ńlOQƒĒēŠ@|ė’ Dļy½ēs°cæ—PÕu+ūŲē‚ęHå\Ōžō5¼Iq=`_Mo¦[Ms>éŚ H­.›?›4w…-ĒūÓ­ĘSC\™ ø Œ+Ļē]æÄK-3ĆIįĖKeY¤R’L¼’cšØē5ög3„hŠĒ˜g¦o_­k%øų@ć#½Yœ‘ĘŻĻŖŪß[C#±|«ņć=õÆN’ŚęD‚āā"XŪŲV‘S>nˆąĒ…õD’öņyę6o!ĮĪ'§zž“pš…ŒšR\*a6¶Æ/B[īliŽįšĘ7ĄńZ6š¼ćY(BŒĒ%ŗ~®#€ų™}&Æż–¶²ÅmlŁ 9sž?„EįˆŅŽĘįī%e—"㨩u£Ų‹X6,$˼GJŠK=&„ā’iłĘ?'S{óā²l®C‘or¢58Q ļ]f“iq>–t‰1¼¤äPMŽź¶Ņl XGqÓqVZīŽß|–—@=źćŲFfŸg¦\jKusŸ(SśŌ·v–ö× $dģč­hŒå~¦MĪ›cswk<ˆ²*ąŒę±<¦Ä,ķšĘa2ļpæĄA<~•¦†LņkH®D‚_Ÿ }kŠ"”Öä”}»_µg/!—m§Š `ŠL”ū£Ž•Óė÷š-ķmSΌ ;˜s‘ŌV7ŽĘV Ļj[Ė$0äÕČjv¾]ų,¬ŒLuؔnoR·ÓgxŽb»vµiEl¶ūг6:㠬йn8Iķ™B…ž GŽÆDŽ;T‚āf) žYĄČ„¹Éi³D/|ÕH¦ą-—ƒWęšĪ„säŹÖźä¦OQMĻ”J&d~t*‚AŖ“Ó޹żsDņo!µ²błä²ńĶgĪc ²]Xf ]ŻŲm>ƒŠ„³2Irź=ė4Å'm ūxåžč&ĢØ1ō®šŚĀHɹ^øĶtFV0”nsŗ³7™q…瀢—M½ócX/ ½Tö­T®ecqōŲ®RC)Lg“śT¶śL–ńIt4\ĮŖEj‘m&².X†o%Źö"¬Yłhķ3Bdߒµ¢‰¤$÷=M›D¶Ó$æŗ[wŸx(„d}Mt¢ćJ×ķSE 'ū±€£ņØjĘÜżĘIkn§*AČ­ø-ŸUÓåŠÕWrƒóc"¤ŹLņ»m!l/u©ÄĢē…ĆmĆzćÓŚ –HÄéyl ł~£#Š ±‡«ĖÉ!‘ö\ ‚:×):ģł¶‘¶¢[ ˆļ'‚.³ĻB+Ö¬u)ķīP@²EĻC@Déu­A®¢³yäź yü Ø\ßnSc0GC@ÅøšżóO¾…x0C =Mhi:|ZZ6HkęåW4›ŌJ(ä5k›Ė‹™ŅķŁ#–QČZ—Ć‚FŠįŽB#•'æµEõŗõVø»0Bč8źj­”÷¶SĒmf¬Ź~B½ģ̤µ-Ūj±ę^[łŒŁeVŻk:ļSóīK\<~[7ą+K9jH×Ė"D<ŠĪōÆ.ńQūDĢ"'ač(g8¶įD $Œ®xŹśÕčVÅ„ffHŸ{'” ¤®z…sqqu ¢ŖT‘ĘvŠļ'“‚ņĆģR±S!ŚŲ8? Q;_izV“’H’gŒ±ÜMs:åÅÄ^#™ą»/d±ķĄĻsš£c#G[(īęg‘’WmĆ'š­ām1eÕcŗ¶· käƒ!'£qśh ž]|!¶»”m$ąĒZŚŅ¬Pŗ#Ź;‘ZĘ*ĘnG”éŚ#̳ˆabń‚r;c½yŽ|w©\cķnŃF<‘ŽŁ<ž¢«•mčq^ŅK®$diNXõÓ’mŁjZ•“OņSƒ“ĘhæBmŌ³s£½äņZŚŠŃĻ!N+¬ń‡Ä:u¼ŅL@@søJ‰Ųښ=į÷‡%ÖōŪČoćk_.?5ƒ0łqżEKāĖ(ōė ,§”A@{‘\ŅŽč>‡šų3ĀóÄd… Ol¤,dńs]œ“Ś,æeP¼čŽ\Š£;j ¹ęŗģQ鶉-)*ŁÜW:˜kä‘f>I8ĶTˆ‹ŌļķĖIh"ŗ(įp*Ž£¤čFŚ„¤3ØČcōĶC•‹<™|5{w¶ś]³yŠģ ¦=8Æ+ųŸjĻ™c;F°É1ˆ8n@Ęyö’w¹œ¢yGƒ|/mg®ź’g¹bł ēųA–»ļ,ŗ¦­¤d…mB2Œüeæ_Ī‚±I“+)$2ŽŽėI·µeČ9=ŗńZrs£jēDx”–;ų`ņYŽŅ@o×µpR]iÓõ[ė»3°e_)rŏCO–ŹČJgmšŚ{mjŽĻV¹µxU¢Ńø85Łx³ÄŠi¦ N¶ +•Ė˜Ō¹õćõ¬Yg„ėj:ßÄ #]ń ߙkl‘–‰‡ßĒBOå_üų‰ą+k«7@Ó óQõ ®rn# Ļ ĘRģZĪŻ/¼;s=Ę­½Ž©§ø˜²l9ü? üŻńĻĀ­"ė]›Q°²µŅķåy#Lķ9Č…1Ø h·Sj­%“ -ŻĄfģFyÕŽ\ė27’’3=Īī£ŌV—)"ėZøŠyßˉ3½Gzõæ [éŗzI A¶ņ)ąœa»`żi™K±‰oā;½×_‡]³’ą24 R{łW’xzęļP“ŌoĢ¦;阅.I+éĻÓ„ #ĮW–:.”=«µ—žvHW©QÓ#ņ®LŠm4˜cCvęńśÄ½8EXō hš~£eguq$‚ŗF•:8ä`Ā¾‚“Ā:Gˆīl%’Ń”hćT8'÷„w¬ĶCŻģuŅ£±µŸÉ‘ Œm Jē<×;z°źš^ƶ‚KGW°@[§\õā©JŚ{Cć;Ż:Õn“ģ—r\[#nó„ƒß5‹‡5ĻA’ EÄr\Dā@Ć'Ÿ7sĒÖ¼“ÄVš}αo”7:s¾br‰Įž”s™õŌņsᦕ”ė’i3¹gČĮĘsĒ«KĮZ«¶¢¶wŅ-ŒĄ˜²Ķ”aķYɕsźĶµŲ„Ņß}£ĶO0ƒ!y{ęõ{5hĶĀHb~KuśŌrõ3‘ó‹µKÆ ÅŖč¶ryŃŽ©ŠI±ž‡?/§Jęüe=¾­cØ*Ŗ*s¾EĻ4ĢO`†ÓUŌŁ££ŲņnĘĪv÷Ī“ZµŅīqomaöFū…·óėUȓča®ƒ¦¬ŒˆcŽåšÄ dSYsųäź‰ØŚIĶū°Ü€ßJŲpgGįļ„M¶žžWž¹-“0ŁĻZõ-JÅĘiī-aÓ¦Œyp*’ĖUŲśŠmĢ–Ē„hš”wž(m"X$“›ˆ!qõ?Jś·ĆśFš–`"p®ų°; ĪhŃJĢė-ōĻ čŗ=Ę£x±ż­ŽŠŒ0¤{÷Æ Ö<}q5¬·ś\pʰ'‚œqéÅgcU3Žˆ‹/ōČu«H¢æ˜Āʘ-Žēš¬›7P¶Õõ ż>Y-“årńÄąĄéȧb$rŗ&ŖļńÓWń ݰ$”Ü2zē=ų†kė/V·ÕōØn-J‡L§$oĪ‹xæÄ  M./#†CuÕO]‡ŲvÆšüś…¶©‰<ęRÅÕsß¹ėJą}{¢xV“’eQ»;s‚tMā„é— cl©{æ,›pAōĶ'~‚h”āżBāÅd–o7Pw‚p ®cŞ7æšĶ¦‹†#u9 ß>ÖT'æJJäņ‹üG ųMÓķę|Éksæ²YČGå\ģž±»‰VŁsó/Ż=ø«å&Ö<’U‘|7ŚZi¦āY[ČĄmųķT“nVxÖū„fŲrIĶžļi£‹½:łÄ²`ģ„Ą’×\Ļ•¤Zj¶¢ę6 ł¦(!DąēĀś§ŠtłåŻm8R6u^O?•xœ>"’+ŲŻd’”“Ēå[EÜ胊½e.ØjhF‡ŸŸĢć9ÆT°šF›āX|›hA‚6•ć>ŌĶ}”™Ŗiē@GŅćDŽ$6ć¼ĆRŗ†[”FļĀ„É}nz¶6§ĮøŸzwķYZń·ć(ŒHf5`™ę2ZNś‚LŒéšÄōÜkŁōf1ƒ^Ę'EšR]M-s¢‹Ę’4¶’ŪBDAĄøćźA®›Vń^•+Ų[Ē”æiĢ’²Ÿ•cĒŻĒAĪj9Iit<«Å^ ž×ÕnƒO\„PÄ ó”Ŗī¹MĒ÷JsĮ¢Ż ĪŅoFšrĒŸµž¤žv⽯Į0°¶“†ßQ(. (Y3Įü*¬eŹĶ/¼+µšK;“×~ö?ŁČĶyž§ąÕ[) /"ĖŽNŽiw5„OŅ5_Ł›Ķ:Ź{‹g.ńn\Ž3ļ^µą?ų‘®VŪūQžŚq ‘NāXó×”«6vGŠæšÜ›)-¤‘¦:ČƐk›Į¶ŗµŅ<¶é8Fž$Ļ=)s#/iŠą¼GšęÖ+»ŻQķĢ11T Įǵy>“ā)掶h%.į üĒ=)’ę}‹įŻ2[ļ&“’vx2£`.yĶax‹^ūE“ö:‚Jc`PF~l/§§’®Lń«ūiÆV‚HTc'ҼŖ-.ņ-FQ¼ŻŌRD†8”ŗł5iōļŠ£ˆ€Īü~”Ųąõ? ^Žj^m“2Ķ1ĮĘŅIōÅwZ/ĆżR )5Bśå.WŹ'$Tņ#^[źy~±/ü#Œ¬óy²Jß"ēŒūWyįĻ[Üiļ-ōÖÉ<¬# żG=©ø™Ū”ŚÜɧŠŗĄ¢F?ģņ S²Ń„½ŗO,‚Č ³īÖ%-BµŃ“[;yµ]^x×Ė`|µ_Ļ·Ļ_ź«y$¦'ņaa†ćJŅŁ0ÖüIkoįö“‡V°“ŌŻ®‚׎•ńĘ„­ÜŽkw—©%Ē–$ĒĪOĶŽ3ĻҬØÓ¶ĒŅžÓo®¼7 ōN“Ė(  Ž¶­ōÆģćŗ+9Īwcō MhdxŹÖĘżL6ˆ’f$ž:W-£h’i’yPØ ¶N“ņZšKŚźNāąf3ŽˆŽÕŠx—VÓt=: 2’is—'QŪ­ŁoŲ/uį$åę@Ä*¢Žø­æ iqčŅ^]–[Õ)žē4ÆŠ³Õü2Éecs%ܶŃĶ;•Éö ž«Ęfź ƘažČʆ7FÉ'S-@ņ‰“ĖĶKR†IT,bE|ż:W»ŪdzHą#–6‘É>“£c̼A­]x\†Č]3įÉČ\÷¤Ódūm„ĀīŽ¤øP9ä>¢†‡(ésćĀqX9VIQī9 Öņ œ¬$ćUĘ –Ž+\ŌeI-ģ­eņd'’GJŽŠō¹-’}m+O7›ū¦šv—‰/ƤµĀ}„ڽńÜWįŸķĖ{–YNå$—’“č=)¶lzF‘££],mmķ’1×ė]ę„”Åf l¹ģ;ŌJV™āž%“1jLth‡8ļPĮŗÖŁo%ˆ:)Ę=MbŁ]HtĻ>©?‘ “6°‚A£b»=2lJ’bƒķmņ‡^ R•“=ĻƁō6šKæ.š‚T(ĪįŲ{󁧟1źe ģ~÷MR“Ų—+čuŲĶs Ék£Eł9łqœf¼ęńÆ^FūAJœnģG„>vZó¹x^ŅEw<`®xö­OO¦O¹„‘ocŒ‰0WߣęZ&Ä—“G,„¦bŪĮ'5WńJ^ɧ¬Ó'Ī͹0­l_qšEµÖ™§G©In·,ą„ńƒÅgėS°BŃ6ٰxźN6tž—Sŗ¼‚)Św'»$ąÖLjßS’Cnńʑ™ŒżüqQŹLXxĪEÖŻ4ųÓ"«±Q÷F{žU™ćß$źś•ćĢńOŗYc€ø#Ņ“Œ{šŪBĒ„ü\Y$µ’ķ“ø ČĄ>æZĄ×/¬ļ.ķĒ*äz¾=k9FĘmµ¾·UŒ“RY³üCҹ?iź»EO² UF9>•%$Pø½²ŃUa åNYŗ}½i[x¾„üŒK .<…(3‰Öµ‹«ā¶Ņ‡ū8$('©5«¤¼vŃŪX¤*ƒią j#åŠļŔ·pxgC*Ø'ę(õÅe’f]h²„é‚Y¶W稦żßź³_ÉpmmžĢNĒ=>†ø„°v¼oĪīįAjF\ś Ķ8egąēбkŚ“V§{„ޓӱqGßÖÓ½•ŅŖ|ä·b8öƲ’d_÷?¾0x{R—S‡n¦ŠŚä0ĀHÅ»žc“ėZJG±cū&ųć m\Ś\čZ„PZŻä· ł¹•żE~…Å­KyefT¼ńʹīČ+’kP—c Äŗd:ī­čZķ‘“EŌ­šĀģÉE# ’Pkų…’‚’~ĶW_ž5xJŽĪ+[uœa3·|däKƒĪćLå¹łĆ£k—šeūÅ…!Ļ– }qšök;člü„ŗ‘å•c rǵpc!Ź®ŠRźz–ńÅå!Xs–=®ĻD½·óģdG}øēØÆ'›[ŻOjŠ|O8“ø_2G\olįOÆé]$$<²4,ņ”į6š3^Ī_Vś³Š5‘ī[ŗ(ĄaŌVķ£*Fė$EĆ}ßZ÷)³–QčhiŹ"X\„ÉłHé]%­ŌHbtø ąę·R±Œ F…ąÕ£ÉUżÓ]ÄvS41AsĢą ēŽ“‹1šŌå5»hķL’iåČįO®uīØä*÷{в’¶ķaa#o•qƒ“r :Ż6d2ɰ(QŽ=éÉc ·Öł‚”„*†>āØĖ§Ā^u‘°Ķó“ļLö©5!ÓōRīųZZFÅsŒwvÆCÖmÖ]:;+•FUA2ƒ÷q@¤“8K‹x ˆĘ"#å ž‚”·ŗū¬ŅKü i&™oss żó8 k5¢xžAn‚`ŁfĻ>Õ¬‘“FrDŃ»o/±<ōßOiŗÖd¬2¬ć–śSJÅólōä‚hõe–E“ÄxäĘŗÕįŗ“…÷ČHä:dĶ”ļ D&į`03»Ž¢Šåw,J3鮋Łæ¢ÜŲN“&IĄU#å5`ĢŠ\IjįG9ĒSéRüɹčŽæ–(Ή<)’ČNBkÄoµ“ā-GW“·„ĆäLcĘ8ēÓüöŖ2r3tė)eÕO-ēįNxąW¶hk,ŪŪN ‘( 2xQķA¬dz{źöÖ:¦@€ĒAšńń]²]æ•#ł#±±ŅŒ/\Eš5›©”Hējć=@ä~UWA×'Ō4K;Pßq,±9ćĖ'­įęeR] =~Ż<I”Gܤ`b½[ĆŗœņL!ø;Šļéœu­ĪVĪ^š µŽģ™Ć2Meź^ ½†hfµ‡l »9J&jFŠé’ŁdČŠe€\īõŖóė²źW0FHTĀśÅZ€¹‡_UÓKAe;†`押,ćŌtż&ļ^Ō->ҪʤĆ{óۊR¦kœv„¬Vs!·h-¾VĻP;Ь×Ü»ˆŪ™ku V„b¹™»żœnm!‡÷†Ŗj½³‰Rå$n^r+6…ŹrŅiJ®Ń•.Ŗs“ŽøÜßXßĢ(‘·ĢH=é+:Ū-nżeŠv½ÆŻŪÜūę½"Ö[R„”– ‡@ĢóœPiŹgŽYGp²_\9T?­r oe>¢.„)l£#ŸCZ@‰=OFŃ%±ņī-:Ž9ąŠéō£cä<ńŹŖĮ¾ļNkKGŖČ·H—MƒŒqųšēn¾Ė C:«Ģœ‚}ź% LĪŃōIoīī.Õpū†ž‹ģ+ń.„«XėŸŁÖwRĀĀ68 ĮéĶL£czs,é:}ž«1Ōu9{•@„³×ūµÖXŁŽĮq°»ÄŖūŽQXĶó;+ļÜ:¤hĶęmĆdžµĒ]ź¶mö{;© ®ģ°<ņ ĘĶ ›­XÓŅ)±Šp63ō’=ė.ÓO·`ÄŚ8Ń #Ž¢,@‘]+Z&Å Ūpk?ū(ŖIn]cRJÆĖŅ“'”¦< `€ė9lŒćÅehZņźsJUĢ(Äx5-nZ‚čz•Ż“ŅZØÓtŪ›«„vĘ„‰½yņZjš~¢Š<-“ū©õ¤©·©[ŗÅåį‚Ś;e׌ćļWA¦5µŠŻO«0¾9ĻŅ‘.g9cć‹]nö]:źņžļkm÷ z½ģø•“i~@ƀ*\ŒČõųÆu›«Y-“1EĻNsÅ-¾Œš]YI=‘xŸ”ō#Ņ—Qņ±Ś®œÖ÷ĄŪGŪ’šūVÆ2Ū©aū@'ŸīŃ~„œŪŽOpŒ²+ÉĻuÜųkQø°·S`Y‡œRj•Ž÷RŌlŚĶ.Vn„d*ń7RkŹō8®|é/f›ęɍ¹Ś¾‡$u±JÓM ņŽĀ¶õ-z1j`DU‘HäŽ~”Ó°\å|/|mµØ„˜ˆ•É HĘFkßõć¢É„Ś]-Ō>sņ9ĪźŃTV|ĖŖŻO¦ź"&UņĪYXq‘š K[‹k˜īTyņ•½hŖ «/…ą³Ó¬œ— ¾.zŽGŅ Öu(¬“ĪŚļ ) ŸŠQķ:ę$_“1m¤3 eµ×öLFß`—œ'¢r4‚:-:g’Hä…ŲNø į­ėūMBęĀęéĒ™åG“ā5‘¼bŽGF–āīGƒk@£†õ&ŗ±mwcyÄd0Ę{Ņ¢KyØŁWŗTuĒŹsÜWų‹WžÓ¹š;8ÄVłĪ(š»OåČē©ü(Ö­>ÉØ>Ī·‰Ō0‘ÓūS‘ÕųkƗĻi%īšØąØ=ŻŽZ¤7.°0‘ŗä Ż4rŅĮØ> crŖ3ø’JŲš­Ž³sÆ^^ŽiĻo¦Är?sĪN;VrL#ę¹+G¹ėĄć„sĖhóĘ®ĪōȬĒcذ]+Č0_Ģža 9ĒŻµęŠK6©jööļöųžGņÜöÓŚ¶ŠŠ–ĪÆĀѽŠk«ˆ^śżG5×Iw żŹŚ8j€ ÷j%.€™ƒć­R4·“Ó&³Ž˜‰wBĖŚ¼’Lµžäļˆ 惎¹g.…Et=oĀŽ7WPFźÅAĮ¦»i7QGg§i°Ä$yQZ\į£^äViܹ;‡Å·šĘ—/…kk½E”åVÉQŽ?xvƒi©źW–¶Ŗļ $üä7AZ¤g¶köCBšƒĻ§]Ć5ß ¦Ó•ļ_4ź——ŠŪw ‘ļĶ>D[v:_iöž Ķ©4ʃ'®ćÖ¦kĶ*=JibŽńĘÅUXäuÅRFR‘ÖYĢŚĀ(iY~E xŌÅ¢Éwk-œWŸc/Ÿ(ć;haĆą ŲóÜ ™~ćČĆżėĻõæź:eÜr$Eݐä`ķT©źz-½ō—Ö)–YO%äÖ罜Į.a=ˆėV”cžU†ŽŚÖõ’ņDaAžLUyüO=žč [¤·…Šķa€ŽćŚ›•‚ ’Łj’źa¬¤ds_­zo„¼+e§ģÕ§Tf“åėĘ*CBĒÄxc¶³ÓV “µß (TįœČ—ó®!•&µšI„MŹł&”Źś…/ÖOu 8•ŹœOÆåZ)«4Å'ĶÓ-Ś‘pF}ÄĻ<1(~[;ÕÉ`xš(¼™@'Ņ‚œ¬RŠēĖ•“ru5Łų"éµmjāȧ˜ńF$Gš’h3rāøžŠń $ŪåcĮčy’ĪҚKÉ2ĢūrXƒŠśØ u:k?i–åķvHīŚĆŽ}+īśžö5xC¹ÜWżŚØŹĀq:mŅę© )ކøˆĀŽ8£HŽH”rs†ĄükdĢYēZE`ń›߹ė[igå]"ß"šXžE&+t7~ΌIbJdޘ­Kkż1 øIgMĄ| ó“X³xC”©£k–Ś;ŗł`Äća#°¬żfĮ%s{‹,lw!©„c‘d™ęH‹1RĆ?…z>Ÿ”ēLø“ģ…ŽFH<†mYčiw&夊Tsž·AXšńž{kfŻŽ·`Y5`¹jĆF}6Į5‰„óŁFJ…$€+øÓ|q§^}‰aV‚į£ĪĘ\wć·ZŹQ:£.‡Ÿjŗń:ó@$€8ō­+µ†ż@ŠIßŌVf©œWˆšK{“XäŽhö 9 Š”¦ČŅ\ŅŖłqõŖŠ"Hé5ķ-4kČīÖf¹ÜdUĪ#ć'𬘦‘ŻŠ‘ņš§?xVŃ] ٧:Ei$–Īsü5‘5“sJ¾HŒ»œœ U®Ä_S¢K²”ŅæS#PÖef,«Œ.;U ˜·¤#mS“ī~“ 3.ßp#`ÆĪ+^óĆ?Ł™’F Ž¢N9 Ł3®Ń-#·X$I¶»Ž9Åv,Ļo³Č§@’ėŌ¶Ą·¹żm;ļA ß5Č]x•µ]A¢«!ĮėĮö©\ĄeI©¼3¬‰€į½+{MńÜĆkpŖ$*nž!r?*µę68 ŌŻw!ŗQK’3ō®·Ā·šÜŚŻÉ`ØņØ8Čė['”.§wį«©mōė»N/*g8‘“fµ/µ=&ćAhā†ŽFä?Ļ”Ør5Hłvęv¹š“·wš4Yļ]PØn0yĮõ©¶žĻŗ³¶øÉÜA=öżk±šĘ›wŖŪł7JÓĆ óÓßó Ø»Ɲ&’×;B#Œ/ ÷«Ķ|_ÆŻj÷via4Y†M³Ø}qÓė’+7”HßÓŸģš•ˆ~šÆ*?­cEąŻVņę[ø®Éf¾ę\ä€?śŌ£G¾ę‹t+»ÉŅ"čž@Īš8zćSMŸNhåFm÷(&‰!Į`Ö×2Z–`[øSĒćO:C\OØI{<3Ų®!éĻšē™©…ā½pŲhrG¦ŪAäHń‰v;žµąž)“Pmćø”8bOE¢ģ)w¤hvW×a£‹k“·Ę;ū×XŚ=Īźw¶ņ$ ā5Ü8b}*ć# 擩ŁIm4Šeö„ēłqT<'s¤ėkŅņ4L{@ŚFӃ×éV#ˆÕ4›ÆŻŪZOpt¶ ĄmåG<ēšÆc’ßFKm#KŌ‰–xŖīOą<ėNMYĻĻį?QkČ,Ō,*Ņ3³…ē„y_ˆ“xķ­ƒZ•ūI ģkHŻ"ž5ņXĻŻ<śÖTß`¶³—ÄQޢ݇&Ee!ĄóYJV*ÄqxŅydH&y.¾|ĘōōŖ÷lļ|Q¢ųv[yÕD`ļ,¹•›aĪmŁ ÆĪŅ–Žy—pA éZ:ޟ¢<:uŪŪ¤ņ«äe±×…«1õǐg nĒ ¬¢±YŅļQ‰'H˜“a‰v8'ó €mzāvłDk !#aÓ™­é7:Ÿ+¹UĆ0'ŒP c¦•ŗ²µøB°ļ%rś×Æėa³Ń·jc$`äØé€E2Yą·Z=¦›«Ū]K*ļĄ ņ߅tÓėÖVGgoz šąneoøŖēeŠę®oRńÖ)€1±ąć"¹/ˆ> šļ…4d“M,j×R€+ŽząSre&Mą/izu²ź(‘²ßs&Ššo:5!y#±¦K›=rÖĒJšā+‡Kó±ķćó®:+e¾øšę(“ķ ¤n#(Dœ6—įĖė}cVæŗ–FˆŠJą9ą’ž•čŗ&ŸŖ_]ÜKh”¢¶ˆĖµ†G“Z9c²šź×VŒš¹hdyŚHć¢ēVøė^‹a”Ī óŹÉob0É!ܹź=je+š)õ<»ĒØ»YōČ^V·RrÄć#«Ä'¶’ŲŪ½“ų±l«Ø7Ö¤ŲĻšž‰ØÜų¾ēPŽ1.— «Éøć(ĆҽėĆĖgŖ£8u“n7QT„Š%.¤šå†›5ķ•’Åm ܬ0„vVŽ’„gKaRCŸŸwĪOÆćHÉMœMä—^^4Ģ 9łp1Šóylš BkėTlFßęć'Æ­"”Ļ”¾xš GIū>«Č',v0y¶3ڵü{m¦ÅupśEČ:s’-1ČĻz ēg™čZ Ge{=Åį’o0Ėædōx4/x£XmcSŗY C~äxĒåW‹fށįY⾓žöH–"sźwtĶ{TŚ\-o`﹩Ł"œ›Ćjń&¤ś„ٰÓķ՚'=Ž9ķT¼-įȵ]j„Ū “ä*sŸsSÉŲ#Lļ>!|DŅü®Eįm$¾µµ·S.[ęžæŹ¼^ßĘ2ųćU¼Łl±30v p9„ŹkģOf“ŠSеG:„µĀ~łOŻ'ūƼj_…éwmöŲ§h† ˆ>Vś ØÉ":ī£įi#3$`*¹z½ĮڵDž•Dhbi0¬qĮ4łŃ‹45k/ķ‘s©Moä^ŹĢNNI?Ļś×“Kįi.’ödČ! Ü`E®.mJVŸmKĖxX²łOĪ:ļZšĘ…u©M=āF³Ś0)ąµ^ĢÖ2ī'öL°ĄŸ&͊0®~;©ŽžE@€r1Å.] :Ė›Ÿ6źŌAtÓüuyŖ^Ļcµ|’JDĄu^Ų«²iÓÉ;L£Ó8('fzo„t;khn5k«u˜•(„uĘ8­eįļ.,ŠŠ …¶§@3AQØZŗŃ¬ē‚k‰&Dņ”²ƒĪóéŠį?±,.ī¢ß2ÄķQANhœŚĮkŗ»×ėZKMBĮ9,3C!ĢĀ·Õmōäž4%nĆ`8üxpzēˆõ®-ķ­Ž@åfcĀŌE»“ķ#UŃīµfK˳µā$ ĪrMK¢x6ėWžÜ-ƅFÜFŽõö«a)ß§h`‘ĀÆē¬X]Ää“õ5čVV^±°¹Ō廆ŹįyLž·żŃYăˠc–ķ’ÄžéP˜}Üw«‹ń¾¹Ø¶$l"’”Ē;‰Æ%ÓļÆ@óšāV·PWŗü޵¢‡q›ZšŚūOp®ē‡^2 ĻJōi }<Ļ “±ĪÅ=ž•›G4݌Iī1 »¤ÉüH§Į¬Ūi²Ē|oŒ.᜷§Ö‘1™é5ųHõū»³xļs̘XżAś×]ćÆŪ\ÜŽŚŚĻluU ǁėÓéY;·cE©āz“Ū¹žźłāX›@aœ÷ć­qž0ų…c©CgįÄŲé‘92Ź’zWĘ84ćd\Š4øŅ(žĖ¾i9,HČ_„o‰µ?Ļŗgkt_ĒÜāw^ńĘ©ʙ“ˆ£!Ė•äŽpsé]m†Ł%ó÷\]4ĢҰcŠdōö¢Pģ'jv–:7•nKF’IĻ#Ö¼›Ę–ź{M1ģ­Ūk;€vļ8< ĪÄsžU`—0Z™%’›’G®kœ–xdŗ™ī¼ƒ8+ĮZE©mµĒ“Ū%$pĪ~ļŅ·ī5YļaA½nŹ2؋v0SéZFLNV:“O J. $ĘväńXĶ"H‘Ŗ„•Õ÷dõW2‘æ&µo¤ĄŅؙeņŪ3ž¢©čZµĢP‡.c|’äėDWqĘ'Gsćė_B¶š[ŲÜ_]BŹźĄš§Ōö=+Ąµ ‰Æ®n.T‘#œāØŁ++zy[5‰cHŲcq+ŌCW`yÆŻā{i÷› p@õĶL¢e&v‘hpǦ^y›T Ć®3ڰŽ6„!Ą;‡aéX‰nq‘xn9n'{›¦øóp ŌV’öN`”X…ŚOƒqš>„uż`[G IS!‘ˆ ˜śÕOĒ…īdµ¶¹Š{ć€a‘r=Ŗ—˜y:ėW:uĖ^Cs žM±ĢA'+žŠ:M}keö Ϭś…½Ģ—‹Ŗo8P1ÉćłQbj.ǜ˧ļYHYNK!Nõ®é%³œ²¶?põ5&IŲŠmVjc†¹o0wĻgžešŽ ^»Pt Ž-ī}± !J®ģ•bKy&ŗŪ2fH­#1I.T”š¬AśäS=x»ŸŅļükö‘¶ń/ƒ4Ÿj²7Š4é|©ćŸ)Šu>»€æ£oƒŽ4“מÄŅ2}šåv®ŃņĒ/©’=ź&k%Ōś dYYķäMŪžGÆŹų+Ļģ¤ümų ?ď iØ’“%Љˆęƒ=[»×­g,÷?†/G©iöµ§ź:|–W‹w"³ˆńŪō'ó®’ĮŽ(‹OÓÄŃĻ ŚŠ±e2ŽYē¦kM>h„ĻYŃõy`Ņļ'ø„^o$r[÷Óü5†Ņg¼ŗ¾y£™Č„ą(ĻqšłŚŃå‘×g©G*Å5ģ8Üœ€ķ]ŸĀļĻ*]iņIö»D'k4cvIģq]Ųļ;œÕ©Xõøüā³y;ypŲ=Z“a–āH„*WRØśWŅS{t÷ĢŠŗĒŒ·ož½hHžPFBzäćµtó%üi•”ƒŸāĻ5Ÿōé'ę)=(ĘG½i9FäŃKss4ĘI¼Ž”Łķ‹ĢŠ"cÉ#½mc'ü#мHå¾aéüUŹĻö·A#Mįr8õ§2$čōūFŠķZ@Į@$óĄ5±=ܲ£Ķ jä6ӓYŹÅ)2œ7—Īd ¢±žŠS§t’įĘyB2ü÷ĶHÜŁ,śqŗFg}ó($ö挱^į,¤XÜ·˜HPaT£­Œ„+ż”sK¦›x®%;¾cÅdČ·¤ųėÓ5„ŗ«G=“¹#xl=Md=esę.Ł@;wv¤¢R‹ÖWPAå! tā¶mlVŁ!3,e€ĻŠŌŽÅņ›rĀ/-¾ĻnĆ{0'ŠāzńÜpŪjį­ ¶žåPōö®NęęXmć6ųóĖ€r8<’Z$£xROu<Ÿ \³cåZfÆāHÆ•Š“{ žqŌūVR‰JV8?1ŒŒš"HątÅK.•ĢU ¹XĻZÄÖ29‰ “ķV÷…­'—S1¤‹ •.ü}ć@Ī“Ä7ifjĶ&ż™\å“%Ō |·R~^FsWe4wV:NŲÉ+ < «Vķ<č„%AĪ=kVA.³%Ó#,% ·VŚäŽ£ėM“Š’éRč^;9ŲNA€Ņčtś%ŹG3iźĖ ’6`ć&¬jZ “—ņ]ˆ£ŗŗ ‚ägTŃē÷¶×ö·6°Zį K—Āõ•éÖvčā5xŹdEg&M-o@²±ŃŽhm·ĪźFćÕM|źŗl³_ÉēmyQ¾ņŒVw ³č7rlG•8 śWgo„Ka§4·e¼Švķö­ā»õ#dqߌK¦$ņ*‡˜ØėĶt÷3¹‚ŁŠŒ2¤œ{֋G©Bī—v&cÓē#Ś„²°žĘŠe2ęyYóŒmōü:VŖV*-ŪCė?ƒ?ü¤éóéŗ’ZZkń e˜Ę¬e\żÜĒzę>9Įą]aķ5 ŻŪ’hO—™cGą;Sē%ÜłT¾KHYĀķ=9®‚Ė\P±Ž8ŃR 29jĘm’sWžÓ­õK/‹yt|¹ŚĄö Wv4« JŅ70—*’p’ø÷ØlŃE+I¢hŗ\rN°É’w8)ŠĪøÕ"ŌRŌ[[ĶŲ;™GAJć’{ˆeņ¢WƒX­Ó޸ۈb¹–ü|Łh!"¤ÖŸe”>©9õ螆Āō¤ˆEČän8ĻęŖ61¼Eb¶ÓĒ<UĄ9ē j½ąĶf;w»Q‚†HŠ0Ūó}G§jŽaIŲǾŗX.®ä±”¤[ø¹År7z¾ū”𛱁ޕƉ®uX>Ń ©UĪŠ;ŠŪ—RŌ„Ś.šO³©V{J 9ŽS]»—(Ū„zŠW<÷¦)&p0Q[£:‘¹­įūmFāömE[ä`,3øēҽ-“‹‰Ģ„eŁ‚sŪ>Õ|ŗ˜– Ó|Éei`&@»W`śÖׅƮ$ŗK¬6p§īZ›wg£č^DŅŅįZ(™ NI«WvÆ„ŲŹŗU# Ž“4SG5¤ĆR4»R"[8#­nĖyd׊¼0­Ėm*`óÓØ×bŪ\× ÕbežSäšeż¼¶Éŗ\Čv»ĻD·Pé)w,sO"÷y^¼óéS)2TQÖųcHņ­'²*³»vśÖ\Z4°ź†²Ŗ[£×ڱ”‹K°żNĘŪN”ŻŪ[Ē ž XƒĘl-–ĢÄc|räńYó3Um9Õ|MØj÷ĮgxŪ1äghēņ¦_ų’K¦TĒī”=>lUr»Ģ·+Å)9’@##ŚØ]Ż)‰LP7Š·z5(—B—ĶŌ!óŪjīŸC^å-ŒvĶļ• ź?2‚ 4y-ܶ-ØĻ ŠēSxGİxkā{6›Ģ·hT¤ƒƒŸĘ§˜žC2ļS}^wIĘy+g½ZŗÕ_K²kkRŠēļ69ĒÖ§™Ü£ O–Io£¹œ6Óü&½§Ć±ĄfHņʉ†­ rHź|Ay°SgÅ&ƇĘw~į^<Õ¢Õ¬,tY­mņ§{ČÜüō5IŲē“7|iŪ &ˆ[Ę£¶ņj“Įswyu #/…Tž;šW&å/Ķ-…­¼qŖł’£2ķ<õĒ5ęź®ĘD-:ŗ‘“žM#E#Z+éį¬W ó]݄⾒²åĮ#īj ę-4åLyP•U ¶0éō=RņybµERF ’p=ŗŌs“b¾³t²Isk9g˜6|Ö5¦•qss‹+®ŻÜ6Hę¦LØ®Ē”ź:®—¤ŲĆk*ł_»*ūFsļ\…¤ś=åōbՒ[£„W‘žÕ詨ŲŲéŽ!ŽāźYQ•ŠŹƒš’K«Kéą%¦WÜœTø•ĶcϵUšk™d ™éŒb¢ŠÕÄB\ŖÜŽęšVnęÜ7©@¶WŒĪ«ĀgØ·¦čŲ•yN¹IŖD½ĘxŗXķ–Rüą°W¤ż½µ[kˆŻWœc+‘Ó4\‰Dčõ ‰ķ/#YÖS$¹mŪxÆEŃķŁf7GžGJŃOø(Ųč[ĆPéy×–Éä|ćęĒØė^k­ų‚9„G•Ęćh KŚb”ö¬#@åOSŠžĪ‘°éĪę ŪNŽ=3MLN'”6 Ó¬-üš ˆ•uĒQéšåćµÓl›U¹•±*sN?”ł‘Œ«ińéčį[ķo!Ÿ–³ŸÅóŽCmd°ˆĄOū_Zq¦s×s±taóYø®’F’6‚;\G®B’{ž4ĢŅdŽ«ug<š|p¬8ŽłĻZé"³Ól“)Æ.gFć żJ·\b‚£¹ēśv§qs%Ü ŲD»¾šö­(Y'|yü…L‘ŗ4RāŅtxbŒ9'h5Ųč1¦Ÿ³ƒ±Ōpøō©P³†‚x†óR›FV$s÷…k-īqŸÄ³ŁŚG —mėóHe÷­sč)7ś7Ž/쮬ą·GDˆ|¦Až żjĖQžŻ ÓWżT‡ į€ĒPE³„µń·Ł”Ł€×^Sy1ÉČąƒėXŗåņÜH.¬p+¹wL-S%Ó.-YŌ­ÖįTnĪģV£Ø,ρ¢‚J Ł N®’Fæ+uć‘ō®²Ņ;­FŚEfghŌē=€ čŒze«ĪššĶs6cŠlÆ[×üa¦Mg:ĄŃ@Ī*ä’ņ3„]s|ŠD‚ćc5Oš5ŽćlHņ±Āœr“(Ų‚ųK (ü»V–’±ŻN—H˜ ¹‚‚4|AŽŪ°µ“ķĪ é¦Ęī/ü@w§qEks““UœŚLŒv"© ‘ŸŅ¼ĪŚśK .-ąŃÉcš›ō/”…y!¦uO›9 ½]ē…t­‘%̧k°$9Ē(Ųܹ·Šö& o“1ąūV¶x4ūu„ł~pł?*NCŒnT×/ É$±8IAśw® xĶŌ³®Ķ¼¶qÉ5”¦jt~iõ;“H~÷V=EzżĢ ‹XC 1Ū±ö¤¤%ØéķµgŒż„W1œąWŠjšMš“$tGZ ūÜV’—A§c>Śø!YĢm _ŗĒ§Ö½Ƌgu£Ž»LóČĢ6ÜqÖ°š7Lę|G gudČ Ģ„ķ>½øÆ˜uõy/Ņ_"“/óŸŹ±,›Ł¬µ>;s‹Ģ‹äcüjOk×XÜh2H|ō—ĶņGHĪ ¦™„9ՕēzF³}¦ŽkɖĪl76zÕ) Ežƒ‹ŠÅlaƒm×;Ÿ<²ćóŽØŪxƒS¹ÖPĢ<Äį0Ł$š“HĘÄŚ½ķöŸ86ź†).ąė\ķΦ'Ōtč¤-nJ*ūū~µ2W(ėüQŽ™ Ü_Ū[\}–(Ą| äóߚƹń­ĶŠŁĶļłĖ¼=„Ź;hyķ÷‰Æ„¾xōø"FŚæ^ėą Yų§QÓß]†BŲ”G̬?żuqˆDńüąŪŻ:ĆģņM§Ėq(Śxąžæ•pz„ˆ½±’uqįĘCEŒłŒ]>s¦ŻIjōuĒOÖ±¼W-āĄc°Xį“©/’Ö¬g„)÷ƒµ;½Ģé ĮÜ Ē\õĒ×4ß_]kS‹‹ä“[,ˆ×$śŌs>×QäX£Ä²ōRƽ="B xv3¹?¼įA•±įx‹ŁĀ‹ul²•ĻJ‹V³6q«¢•¶œŒdS%Ģē”ÖcšK½1„Ęā1Ć°=GZō«MɏOžāHdó”lƒĒ½ “¾ĒŒxŃ“XnšśņųĒ$yŽ(öć'<‘ųW„ĻāėCW’(¦‘—†ž/„TŁŅié%Ģ~d3&åa„īkć'ƒµ]O@šĶĀGō“’9y`¾ƒ§ÖƒxĒ£<¹g¶°²X„“Åu,†$\ēłV—­ź~~ž$’;hßpEn£¾(.6GŁŚ ¦šžÓtķEaY4œ†\m#3łō3P³»±–Ńā·[>õ­L®Yąo"ü6×µ’j·×מ–į|¤É-ŖųŠē4ƍ'Ş,›I³šō·zuĖ2E»;¢ūŲśąT8šr¦“=^šģč×pŚĒZ°Q.čĮ`ÜńœgÖ¼NO ßÜź0[ZG;ł+ēyq‚XxžF”I•=Åß”-ø/.šNIǦEl—cžP5o“xlŽ 2Ļ@²+²ņIQéõÆ»Ī£ćmĆÖ.±°[™ ¼Ė·”cӞ¢Åj{Ļ‹<9į B;u}Y SpŻT惎¼³įWƒ5X,uØn7^Ŗ\å_9Źć®;Pj‘Ģ|@Šu”ńńXY(Ńög,~l÷Ķyļˆķō·¶¶–7>`T'ų[8Ī}©J7ė]^žėI“·…TĪ«€TϟZń?ųÖźĻV6^R¹"æÜoL{Ō{1r£žš•āEŖqģŠ^sĆ#ńøßŻĖ¬ß4š¬–ģZC…DŚ:śU„b\RFµ¾į¼1”qĶÆ‡łĪćĄ=+æŅa¶Ņ4¤ŽÖß –y¶|ŽōɖĒ7‰VėS…ž4‘Ė…Y0Cqļ]žjöwr_­ˆ·‡>båxӚĪqź.W¹ŌŚųåšęęŽ9”y× jŁ—ÄŁbVóY4‡,¤c“Ķgb%Lć¼Gć;TÕ£†ÖyģŸ•¬ķCV³ŽŹkKy"óŻw(īnh3p54›4žĮQu1’šFTä1­gxvH%ŗ6jĪJ+’ģĄšJDŽ”.Ÿk¦=¬“Č—O‰ äloOƼå|RšD‚9YrÄØĘisSѬ °™ćQdR ŲŽ”¬;=Ž'Eń;hŃ·¶“ŽÖŅÖ“Hv¶0qĒZām§æk±¤C®Ó~Awćm\ÕUnķļ­ŹĢ®IÉĪ2}ų®U<#ż™®jI§.mę8–5 G|ŃĢ‹¹§©i—ŗUŗ^Y\6ĒŒž¼f=WQmDį"fmÅŗā²f,[BK»čm’åļÉ tµÓZ^YYźĮ©@ę7ĄFė“Hē¹ŁjńAkn.FWsč6ŽÕĘč:rĪחA•X^qÓÖ“Œ»˜;™oį «s}ꦒ3*ƒ‘\>ÆāK{=M-y‡=ėCHČӓU‡S·ō×-†2ĒØļUZ k{Rėå°dĒZIĀ] ½+E‚įģ/‚Œ0;zn>õŃxæĘZ65†—cfŅ]HĢGŻ_óŅ™²ŲųrĖĆŗµ¦”ē»Ü3Üp¾ßĪ»ŸųĄZ¼vņ˦'ö‚2Č. eäö=±šiŲkRšžœnšā8ÖÖŽ 6¢®7«Ēµ{ķ:ĘöēĶ ņ&GĖÉZ%#)JĒ¢ü5Ńu/ėvrĄš&61ꍤ\šśĘV–>ÓÖ RÕ=˜…3ęLIČÓėLĖŚ>…O|8Ņ“ęĘž'ŽĻTń<ń–²‚RĻ隳ĆöŒ}z}>/ ŁMk§ĖĀF„·Ž›WŠÕ)›EžešĒĮĪlĢŗ€kpN|™:ØĀ1_^|?Ņ4[NŚŽx  Ä‹ę¶JūŽōœūĻ„µ; hme0'ؐ7ÉO›`źyƝu½RoQ¹E·†ŚÕX¬a(8ćæJq•ŁÖÅ8<4—™Ybø@ūJr£Ōń^ńŸĮ2O©ł.óĆ¢® ų«(łßĮŅO¦ėZŤE DLī>ąż+Žltū½OQ’āą*,‡Ģrsō Ę{ ¬ś}½ņi÷D4*w`q jĖ©Z¢]7“NAĻoėK›[÷Öę|s%ͱ’tŪ“”_jμ±Ę²ĆĶĮaŽ(4r8+GĖøŽWĪĶ–z{ Ś™oŅŪĢŽ3Rō$c­ ‡CŅŚĆĪÅŚ 6¹”Œ“\ˆ%YõÄD|¶%=±ėNäB'c:l7;‚ā‘Ēłęµ4)"Šu‚'X nķYs„‘Õf;÷·ž<»ō+Ę’zä|m"]Āl£FŽējĘ:ŒzÕ©;CšCivȰĄKHÅ†įƒ“Z÷k«x^k$Ū¬„<½ŲhaƒųóV™ÕŲńĖķ ÖŚŹķŚk§į\ĪNx®tų{TŃt„Ö%xmIŖ¢·ļc†Ē„#_fzĒĆĖ-r Ų/oõĖ„` g‘“ķųWÓrŻ Ė“ėĄ"q–?xŌÉ-ŁĻV6v8f—NŠ a—Y²„­yõš{-NŚņkså(šŹē//CŖ±“2ŽGuw+5³œˆTą™k ųū‡åaėé@cūDP1ŗĻŁöćk“śU1w ńg9 ®f[Žęo.I”ó#‚yč*¦“§ź¶SÜÉŠ"·‡QZAči3ĻuƒqØĘĢLgžUéŽšĶµå¢O}ˆīäS±O<ŅØŁĆ©„®“ęA[ę#Ē5«fžuø½gŽÓ`œ śŌĖc)Dļōv‡R¶[h¢‘ŁT–`8o­sž"[k+‰,cž“€>LcŒu®yJÄĘ'œ=Ź­ĄG ¹ŽAĒ#éZo —VńŪŪIJēsrµŸ1ŖE‹›ńįk0 •y®XrHƹ¶Ō¼I»PµóšŁ>cųqZF@{Ā Į®ŽKwyo,7d–óĘ#ĄźĒ<_@ź_bž,!»²Ō.ī)łTz8­9ŗĪē6ś<÷›,ķ /"6v>nŸtšņÆieØ„»Ā<ę$m?xV2—DfsOc#Ü„GDŻĒjõO‡šU…Õä†āęØCĒ8č~¹®yO°9YÜė, šHöė³æZž– ‡wœŁõé^ƒSÓ§Tū'ö[ųĘ~|QšĘ·>„™¤ÜH ¾Žp’30T'ߜWö_ū5ųÖ×]“ŠįƒQ·‰ī@uĆń<®~µ›G\esōæGo­ŠL³²\U…TÖΟ{ ėŗf­gö‘q²æĘsšH÷kf“1Ø ßšUŁ^ėąĘæx‡K±X<-<„­y,²F~`Ž€ć½~GŚÜBŃŁœ‰Š¶ĢvĘy§9éaCĢśž×ÅvĻ”é=Ž‘k3Ü÷ēŠö®«E’+ ¦[$–Ļ?ä×Īā#fwSØ{'‡Śķ'ŗĶ»D«–Įéž9®×ĆŃŲ麊Ė*Bˆxj–dĶ]ŁžĻ%£Ś•Ģ%7ŹŽĒ‘IlĘ Xʤ¶xć­}- ŻMD=ä3Ģ¢5(ÜóėSO;·± »ŲĪæć]Ńz“Ü· “ø†į›f\wn٤k¬gņ®¤_,Ā­JĒĖū‰bC–HĖĪEhʱ¹l0 ‚~_JøĖ ­„šl[ÄXmĘ=MSÕb”̆4M€™±ŸzŠŹ{™ļ-ÉBĢ›O sų×Aį_Myo5Ä«°!É$‘Ÿ ¤Ē}ĪŻ¼$[$häņ\nÕĻKą‹č®.®,omd• ŗÄr )©ē4ö%+¦k]é,gĶ €;×5*Å-Śy„A'=:U§Ōę3¤¶ŌY0‘«*3Œ WUVŗ¬̚Ž)’6*Y€ üėE35sšM„ĶØ]Ā/”ĮꆽV;Ķ.ėĀŽ]ŹÅo~ģ~źćµ>PFBJĄ#µyŠé cŖ[4–ļŽpI­yõ²Ņē«ź!‹KŠķ“6Ņv’[ zםGØAÓĒ:BGS÷dĘ©ž‹«AsēĮnˆ#­z'† +™ļŻ"˜„?$™ĆqŪĖ)XŁSīGoćłe¼ŽÖ+y­e#ęI]oÄ/·ų“Į’[Ēl†ńG›F˜lśéX<‡œĒŖłVv—Ć‘!RØ£*}Ī?E ų“Løøŗ‡Wˆ*©Ä_7Ź®‰;h`ųµZĀG!ČśW—ėsI+ —cżÖūĀŗ©ģsĪFž'ł§sņ0ļ^Ļą Hjņ į „Ę­:ČS“žßųļė]2”»Åńū5Ä6®P 'œsŠŹ×ē…V `9XņX։vLØüO4v2Ée s1Œķ#¾{t®;Ä…õܶM±¾Ļœ0åuØę4å.Ųx;Q™SR6³=®Ņź@Č?mX[‹ĖøŻŌåäzRdŗLōŻ!4dšVk’›ēŽĒLWāĻŲéof–pĻsq+Ī Łą}=źD©œōŚ„ššĆö†Ą9ÅI.Ÿj¾]²ga’O„Čmœļ‰l”Ó …Ö1—;Kz āÖ$UĶXœll[Ä÷6.pC®@­Ć Ļ%±/yŠ7dö 9™—mµnD>e` ÷ÆY°ÕÜF,nBģl1ēœt „>ē1gįņ÷¦źDOæ»%¾÷=®«XŠÅÕŃŌ"“‚emxéA”ē¢I§ŽŪŗA óīĄū¾ę«ėš{ĢŅÉ _Ż ÄxPL„ŠÉ¶vPŽ˜cŸŹ½ ĀŚŪC1…‰7¼cڃ«}RMNF“8F€cżk’Ć:]ĖÅ©\Ÿß¢° {ū~ÉV¹NÓS6Öw6ɲ1łK˜Ŗ?ŚĀ'`A9ł±ėH|¢Ļhš©²ržC! \ާįåŠźfęcŸ”7ҁrœÆŲd  'ŒŽµÜiśeŽ§ĒLĢ’ĘD“øŒ\•ä^2’8Æo–¢Ō¶#ÜrY}Md¼Ąäˆ“ ”*OŸļķ]Īįūx-„ņ"™~\Žm 9 4½B|å1ģY#…\’…wĖį»ļ±›č ŗ€$Ź’ 29EOŸöļ¶ÜÅ Ü.\½~¾“·ß\éJÅ£)"–PĢv ‹=²jö·öńŽBöčĆ®0 zŹŪGoaĢS±@ÄśJčsh±éOq.⫼ŗ”>½…zn‡r—Vė3Ǽm ޤqA7Ōä¼A¬Ē£Ę%…üö› 5ĆϩͯÅs–k«Ÿ,•bxJ`s¾šÖ§ü73ć}®vżÆbŗń>¤Xˆ.¤"iNĢ’½ ®]-ńƒį­>Ęm_B»·²3ĀSøö$Ö›b÷¶~t¹GeÜV‚jDęļśQEęĢ=N8®’ĖN·µŒĶy,‹0ę@2 ž”¾{B;‡–uŠ„U#ę5·,6śp™¢mčy9āƒZr93£i—O ŽŻ·åš*®§įÓ#\\ŪČ%ƒh]»z})•ĪĢ“OøX¼™qŠ ×o„NL’4Gcŗć‘ށH޵K˜^kÕĻ8b½«WMøńNĒä“ ļPŁ &l> ’— Ł/š€~÷Öŗ)ü]ɬĄó; TJLµLČŌ¼Opé1ˆ&§µq}tĘCęīø+ō©+•†lõµi&ŽMŹŽ™zTsÜĆ“rF8ā«•“3jĻUˆÅ¾UļyB@é\‹,÷—رHé"Hz}jI‰±ā˜-Ņ;›;C#D”ޤćŸ×5å¾"ń–ū哊 {)ĮDü9¤Ń©Ųx~ä鑣^BńNÜ3/N{×­Ić%µiÖ£8Ų“¹G ØˆĻ0ń?Åų[ģz^™¦żŖč¾%•ä;c½[—^‚=6āYŌ›‚¹ œÕwäŗö½pö'd "¶#¹®›ąž6§“7Y­ ¬źdl䓒ēQ)t4Ųx‚ŹŅćY¾ÕīŪŹk‚œœ?ńæiń%ĘčTJ®„·ķĒ5™”ć:…ķ­¼Įc’$–6ÜŒę¹›)äÖoī„’[…ømђĆ%Č¦‘.&ǁ㰚Dø ³wńœī ŌķąūU¼1Ć¢žī5#½iŪqG†|2·,Ķp˜ śā“\Õģ¼=-¢éZL÷×/&Ę!Cķ“śŌÉ®…#/ھs5µµÓäXĄ;ÉĢļԟϵei±Å%õµÄ‘pƒ}=ź "ŗŁāX†æį&Ņ"»ŲŒ™T >ö03łšł£YųCu¦ßBŗ„«ot±ƒ2Ę0‘ŌŌ©t+—K‘ųN=>‚(|ęWßēOҽ·įÅĀŪj6LģˆŻ7•Ścy­bģ`γǗöśĆˆ.ü™->īęž!^Cā[ż=-ZJ"”)gĒõ©lĒ•žOg­ŗÜ åu ¼eQ]Š4ŪŪÅ2ībsŸjŹlV3µ}6 KӘÖ 6äpÜu®Jņī+ČŽąŠYJ‘ņPiaZ.££ÜŲÜ6•%é2nĒ(ļ_@i݌†ū‡˜[6®ź—“Ā-ņr$żŲ,{W-ā+É/¼K¤|:¼¶– o3Ģø”67!ē§  zUĘūK{N\}–LŚŪ-³I ŖÄ ’qs×¾+ē_ x_ĆŗN½}ā]yŅŃ-ęy<ą71īG¶j¢ŠēśļÆ¼Y棭<#r×:[+m“;†sÜWŚ~ mĮ’ō÷½Ō,¢Õ%Gn;šé{Tiem8֚ĻÄĶ4 ?•p#§Zņ­oୄͧŚ!¹žŁ(Į®0…D O®½G¦ųBųÆEø”M „AC"œ#ŖŽæ_–¾dńž•bæüVl¦wӞąH ŒdOaŠäv:o†’[’9=+7Qš\Wȑۙī9n"‚T{žkįM<čž šMIY-Zp²pŹ;žUõ=嗇E“K§\FöS®ąüŹ= QG=Œ#Äv2ŪéQ‹([3>xcŪč>=ńƒj1Cm¦[ZéÅP @>ū,&õ±Ķhµ°µ»ŗŌ„{mNO™ˆ9;ę¼/ǚń„‹ŻĢŅ‘¤hÉĀsč? ĶƱ6mĪ™įķcMšżŽ„¬A5Ź©…CaĄ8Ćb¢×#‹A¹“ŸS¹ņ®$ŒmŒ78$võéRća83×t}J3¢aXŻŁä{W?„Į4`Có»Štę²qģbéšZʇs«;X«\nÜ 8'šąµo >§ŖŲAā$×ĶÜIŽä{TĒrcŌ“Ż:(`EŽ8 †0Rßw׌äĒ$o†QŲmĻӚń˟ Üź7× nn"‹vü“’Ē>¦Æ™3“Ó4©"£³y1{ŒÕµ¼‚ęį­Z4ō4¹™„9Τ–pE%\žõ‚Ś x¦ņ7R$uēqē„RŸs²3=žŪG—Ć>³Š8Ģ”ÉĻĻZĆŗ§Ł.I8 ¹mĖļŸz®d ¦§āk Éļa·ÜŪ䢺pÆé_8xļĆr^Ēw}¦Åq竉SĮ=9ؔŒ%¹ßųÅęŹĖū>Ń¢•Č Ė‘”#łWŃ’ gŅüCwg·öŗ‡‰‘ät¶WĒ’®{ā³q3ėdtŽ#I¬ŽāY„xm¢Ozš {ŖQ]E„‰Öżų%dpBæSzhĮ×u Ćļölöŗ„øŹ•IķĻZÉš‰nlüM„ØfīŁ„Śˆ‡k„÷4ĪØŅ>²ŸāUœš4––öSoĖĘv0ÆÆ’^¼+A:„ć߯]-¼j²¶ēīē¹=é™Ī‰Æ=ޱ„Å&¬ÉŃŌķwŻĆøüŖŽ –ž$Ń$Ō Q%¶łOėZó#žZ>ž Ńģ’ārc•Qd ĖŲū ŽŲĮ4±Db† $ą(ū¾ÕMt3½ĪćÅ6ŚŻĢkWWEŁ›œÆÆµSń6­½ ±wVb|ŃŌ°#µ+!ƒāYä–$ŗóÄ @FĻš®ó̅µ¤ŻA<“[¤Jņ6Ülr? e{6Ļ øńŸŚ.ķīhšĘväŸzõmsĘWÓč1¼į&eQ·åŪŽ;Qb½ŸcęĶWėĘg’Ņåā—– tojõŅmK@ѵ/*ę{ł™Œˆ«Ź¦ó \ŗŲēµĻÜŁj6–hwŁ”;Š·'éOO<Ös˧[¼·ĮĒ–¤ą ŽAņž§”ÜOs„ ­^āYļ„doc‚ÆŅ«éV7O©™¦bΧ š\­lAėśMčŪ¬ŠŌ»€#?ēµkų‡Ā³&Ön”‰ķŚB¬@ä9ķŽŌ{Cjlņł#Ó,ęDø‚˜÷d’p@ōJÓĄšGŠfOµI-ŹÅ—ū>pēŒūRö†ÓHŌtŌŠm­0mķf‹åŠ,Tw¬ «·ŗž9®FÖČļśŠŽkœŅÅ·†Ņ×Ģ·°%‰wŻ»<ąU )µpĢs UČV{V2o©ƒīI¦ÜĮ¦8ŠRāe8Ǝ¾˜®Ń ²Õ  u4K#Œe‡ µi ’ūžć-ßJ»[xäyÖ6& ½%JČŠōČu{é$»2(Ź)\žÕŌbĻLÓ“w¶žŚ@‘*+‚w®s]F©®[Z‰ē‘P $•AŠ{ ĶĄŅķŽ”uk¬ł0ŪÅ*[ķŚ»ŗ×†"Ó/5;°Ņ]]LĒø}Ü }(Pčiwc¼Ńõ£Ų‡¹†Xœ¹lgėŠĄÕ~#Ėqw=”6óZŪnڧ<¾;ńųÕ„mˆĘŪ–“«ż[Y³X ŒłrČU•Ū õžuÖ®¦X8U™.¢ą³(ĪN9ėLRŲę.V{–¼’ņE@Øź{ó ]õ{Č5ŲäħļĶ*ųsĆZ¬öp_¹aŹHw śSZĪāĪi•.nüš‰£7¹µeŖGb²FĒ!†:g5nāīÖ’NžĻĪD·“åd݆'Eg`S±_Į^»W½ŗŗm¬­…W@ć?vš…le÷„ŗ ½åZŚ)#Ėo<]™J<6ł wŒ+SkiROnĶmrÆVČ>õŖ‘V4¤šīŹKi,”³*Œ`}źś{Fńݧ‡£–öxlå1mr\Žø•K}ĒÉ©ĀųŸÄVń[Åy%ädHAŒ‘\V™­é×֗SF`ŗŽJōæ^+G²³1šĪļÄŻ\¤+k7!qĘåõÆ,ÖtČōk‡[… rŒ7ó„ŹČögSį#4"šų#ÜżUé0ŲGs}m¢„¬•v•É=y¬Śd|b–·6q¬vȑ[” ģt'ŌגxkĀŚ×‰ZćW’Żģ“µį! }źT_S¢š¾§ h:ö+Oż Ķ4®ÄĒč‹ļłT>,ÄöWéדłKĀ1^>µ¢ŠŁ+GŖ±$ū#*æ1=Ķzdž.ōčÖ[„2ÄN †Ēå[EŻ)hxߍõ8äń. Č³b9pŠGŻśõŸÆ{4±Å"ČŖXrGŻ÷4I˜Jż¤¾ėšZéóĮ{,09l™9užķrž2žÓSÕļ52Ф„B)Ŗ;W<”}LŌŗ#Įµ}aēŌLvć*¤ąƒĄ®ŸH¹–JpĒ‚OjĖ•šĘW4u!āiķÖbŪŠ|ˆOŹ=Mz'…ģtkK8ķ®gˆØHQŠÓŒEvY›EŗÕQģō›‡HwBI³xōĶ?Į·ƒ@¹»µŌ.ÄS1*YŽsƒÓŠŲ[hĪņūÄšZYĢ-k½ĮÖQ‘·ŠłćRŌu 5$»ŽčÜܖ`Ęā5“ƒ÷7ZķŽ8a•ĪćóHĢ1šÜ³ń6“ Cg ‹Œ·|š•@Ī[R= Ši ,ńć=ÅSņ„.@qN~§Ņ»Īśp:½"Õī£+%ߣN@ČpĄƒĻŅæ¤ßų&§ķ/‹ōĘŅu[ų$Ö“§†ÖI<͹hW¹g3ŗœzŸÓĀÆ<śĀĢ÷6ņ馌XøĻX¤Č;½¹ü«ŁõĻģÕ“¼‰ü§„ēæcü«žQģ*‘ģ~T’ĮDfM?ćĻĄ½Gķzbßų‹Eßēk‹ „‚Ońm8O­ >3ŠęŠ|K¬hļ§\Z­…ĒŁŁ¤xÉąūYņ6až”š¢;)ļ’²oīį¶™Įņ„vł{šķ®Ö9g»‹ĪøTˆP8GĻ'½x˜­Īŗ*ē£ųRn7\ę2˜ū(•čsųŠÖĒd6ļ, ē<ē‚+ŠÖĒG)ļ¾ÕąŌtŁEóŹó)@…›œb¶Õćŗ¹)øTėÖ¾“QņźyuՆHÆvWÉ<œŽ? €&Łįp >;vÆ^<éškuµK’JŽø<²FЬŒ|Ōp zV¤"xÕEع_ŌUåĖåćiÜ:ÕEŲl°%X®cšÜƒĖ™¦»˜“B,+ņLÖ·źg%©­=¬a!Ś“oĻŽÕnŹśūN‰Ö3D0P†ī[•Ž»Dń„Ѽ:~§:Ī%P±ÄCҵļ/3—„)|mT؃ØyŽ„y#M7ŚW9ćMsīÖÓÉąmuōM^Ś;²Ę”j÷l üp¤©śV"5ģl‘JŅĻŹ§°÷„)ö.1źvZ&±”ńµźˆó/Ž?…z£ÆYź›DXŸ~X·…—BĶØ¢±ŗŽ!ŽPøgĘ½JŅ|?i‰j!’CČPqŒśÖ†|݌Ūj@m .ymŁį}«Ģ®5!ü‡eLœœŠĢ݇ʖГ ŒĢ °#Ø?Zę.tM3ME–čEåoÜÉÓé¦C’éčg"¬c#¦pG†¹¬i÷WikhL+æ;›ŲUÅō%Į™nīīeŌ.”ŠŚ~¤(éšĖ°¾KĖļ&ęt…ƒ¼šEha-PŅ#·ÓdKŚŻĪppsW'Õ®.¤µ;©óŌJŅ11r(ųÅę«>«-³+p Ē|}k+ĘŽ6ø¼Œéw c*0NÜn_ėTąŒĪcĆ”.VC 6āp3КœI{>²l0‘9bqČķTm»ź7ĒhÖ‰&.Xu’õUm?CŠõä»|4Ø0ē<Ai‰ØĘÖ6Ę@¢PI óā¬l’ åžDtfmß1äV7./Sµŗ¶ÓŚĀāXĢŽøĆF3ÅTÓH$©±˜šG@=«H—ĪeÜNņĖ'•'ļ#lmÆÖ¢·ž6»’äE¶v 9Ū‚qVf_ÖoŠiĪ 1'’1X–SłlŽ\l7 –Ī0*dĄ†.čĢKÆ_­[»‰eøŽćŹ ;Xv°*&ޟ§ŁNĢŲ(?ĆļLmA;‰ņ²OūŌrßCzÖĀP…"„HÄg8Ī+‚Õ,nąiē’7 >¼{UE؟g­Æ j·±˜cF;1Œ?jō‹­2jĘŽ×U˜Įõ`Äp9ēŪ"µ^D6Ļ*ńÓŁŻÜX$©8<ÖŃZ Ė”Ói·pé·$)i"o—ŽƒS^ń%Ķ̹‹x·³OҬē’ŌŸĆóŻÜČg#Œē°÷ÆJ°øµ°Żl²+Ć»$ÆĢ§Ž£¹‘­Ė ŽLōžäp˜ƒX…ó¶ž#†TŒóA×ehś<3ŹÆ0…W–©_ZŻ-ūŪĘæf‡#īŲŠYė i±,ą»; źī%Åā8B°KkpźFWŚNęŖĻā3sk¤Ś‡ŚŅ%ŁÉéõŖ€ęŽ~ÅāÕu„FĘ0JōÆzšæ…!Lø¹F±łX‘œœWL Ļ2æŽX껆IŻd`2{WÖwO­•Ū[É»%Ųn=yŚ1r%ÖÕōż4Hå8BŪ¹&¼ž{ĶFaŚĖ"dŒ$Ńa©łą«]b×G…u7ónž6ćzŸÄŗ2}š‰#DŪĪ;ÕĪy)”^ŽĢ-Hu/84ßųEoVź'™#hßęÜ?ƒėQ"£±×ųrŚŅĖĘNƒØˆ”·• ŒO¦@’Ł«øŌ픵i"°™d·L…ĄÅrÉsÖŃŲÄė~öąÜ–ł›×čÄŅ4CŖĆ¶Xö‘€xž””N”óÖ§ā¤Ōī纊ķd|Qģ1U4­6ó\ø0éåw،…ę®02–§¤kŗ¹‚7f12Ƈ\Õįž.Ņ.-.Œ2(fŪ‘ļšéж‡<ąjéözt^‹˜įŗG °mķŽæ„\Ńī&Ó^ŚźČˆ_;K掭=,'OLŌļTŽļĢIeoāõ§iorŽ]Órhr-#bēū7O±Ō4č¬ķ#óp‘SzכŲG Õ½Ä2€Äd?tš“d‹öŽ&ńz8ŃEEˆŗ†zĒ’p{Ö’„Æ­/“ō({ŁĘŃõ¤S©H–2Ī#¢/–;{×#ēEufVkˆŪĆ„4C°±[@¦Bį±Īќ×E§n¹xne“3[Ęw|¤ŠC–‡x†ęźūXšĪ6’HpB>餎Ö+8VK˜ĪÜķł‡ŁŌXĖ`ĻopÄg­_Ōåŗ$6Ń«3)§Ņyqc5¬ 4Ša“;°=k_Āśī'hļą€ĻQ‘@ ¶¤‘Ü‘»÷Yąć޽?L‘üģ8PXg½ę9-NņmRy¢¶‰b‹ėÖt÷µ‚/ā—8|w ™K¹“icå6ŃÉéIF+§•$Ų£‘ócš gU¢`M%ć3µĆšIĪ+Ŗ’C~#·‚2Ņø ]NCÄųŅ#[0Ģ“¶ { Īš–‰y­Ü\“)˜åø HźuXF‘j÷rÆÉĖ»ÅnŚirj>›[…Uć@1ČÉ ŃÄę“K·’tŠJ ĄōĒÖ²`Öāä‚ąüźqO„åŅęō¶ßiX.r;u«z~™:K",„ Ōs_R<Ž7\Õ„Ņõ ķ€#¾Ų˜ŽÖ¦»ynl­§+ąō?z›JځŹyņJĢ€cžŸŅ“¬X[Ź (c°äV%(ßSÕ¼9ą©uż7ÄZ¼÷¶Ö gĖR6ć$—ßšņ-NŲ ¶L„SĘę$%ĢPŲł’— ÜCZĀ=ń©ŒČ©r4ŒMXlŽĘÕfdņŽā²“kļ·ė×~\@1ügqī*“5HõCJ€lŠŹeŚ $sœW1qgqjWq’-¬>`xQWŠ .“-FÖ;ū ’ąŖ‘ųk”šĒ‡ķeŗY.­!’Ļ ”O®1[%c 3^šŅxzä$jƬ9ĘGĶŚ°­4‰tM.$lķõō§~„-É|Qę¼N¶ģcVBOą“kKØÜ“l·ē½D™G²é7)sk"#+Nƒ £œ\®©miwØÄ²G,€/L÷¬E#Ø]Ņ ńBŽCc=‰­ as*@bÄėéķZÅ'¼Ń øŃ/ ū9į¹ĮnõŖzŗjPųjĪ-27†3ū¶g9č=¾¢¬ŽsĖ‹¬^YÉuJby«zĪ“Ķ2Žöų¢@£2łœNĘrŽ£WµŅ|A¤[Él‚¶ł‘ŗō ö®J}>}.Õ™ö€Xä ż£źr7W2^_Ć økp”qž}«×¼- Õ¬%%Ūņõā‘køłōM\“/ lü‘‘œWiįŻXžŽŅZĆilČ$óNęŠ&üW6V’ż”ÕĄ@:ā¼{Äś}µž„qw"ČŠ0ePƌR4¹›¤iSHæg‡›u\rz] ¶‘4EcV?* „3”¹Ót{¦·œĆw1§—¼/Žē½y߉ō¹’Q%¬ū”¶6śZw9Ū¹¤i7–³µä…£¶N¬xŗynÖX,Ž€šF¦ībĆ2y€®ąē<Ēć]›©Åocsowf“ī±=k'3„+hcßiÉz‡b*e³Óµ9tĒŲ¤(CœSē #p¢Eb©,ž\ ~ī‹Ö±'{_3ĖE`ĄÓ­K3Œµ/[ŁŲ¼‘L°,®x$ŽV±5}Ź LŽFV”?ʤŽ*śƇ5Q>Ēū9|€= «W> ‚Ņī;Œ“®ĄēŒzb®1DŃ-a‘#XŅ0§9ļN¹ķQ—~`ąŒ+Fa"ŻĪŸmg¹¶ty6Œ€yéYžÕ­,õ·p”›q7k8G¹Óź:U‹ĘĻną‡ńŒó_.ųĻD–OµÜéļĪūµc€O¦i »;4©õ;[XęrįpćĮ„Õ|Sqkc”“ üŒy ³ĒtKŌ·Önn®­E’š ۃ(=}ŗšöoķō•ĆJČńœĻjM ‡Ä3ŪĻ=X&܁ׄpŸ`šž…¦“Īa·œā$ƒœąńų~•‹5¦gÅcIJŁĻw§°‰1r{7å^—®xŠĪŪE.H%¾ņˆzƒėQČts#įʹ׊µ?µÄ×Sn˜»æ•Ņ1ž1Ųž5ģZfŸż”Æn#p‹¹yéźkofc{—$ÕōM^h^ŪP·Ÿ+Ī”ē¾'·Ō"ńNšŚr}¶Č”/å‚H<`ėJö#•Üķ5­J]"ŅąIbøuŁ•ć½cxjü]Ü7šČĄ’ É“—cK3Å.Ņ\æœDW÷FrµĘ_kÓY[<–°™ž>€.KRRčT^§Ņ6×ÖæšŠiÓB¶ŗ¤ń2&*F+Ä> x¶’ĆÓĀ÷ZuŻćĪąĒ“dø×ÉBE ‹”óė—ź iœł*x=Ē·ē^Y­ė ĘT¶Ųs†bzf²r¹“!±¶iŠ9Rźvx…4©ReĒŚBłc+÷G°”yŽ*å­7U_x‡KMAŽ[0Ā9GŪå©a“ōĘk¼ų£įOxCāuÅæ€ļbŌ¼1åG$E[xŹ ÷ł²*¹­¢4PG­ź)w4;]~@ cč+µ7I£Xa’Y,[#T66“°ķ Vŗ¹ń-šČŒ°ŚøėĻ?Ҿ²š’‰„ŅÅĒ’#uu)‚3³4ó²Å¤ßOs¹Q›$7å^¬ųI&×no“čRŚo™c<­l¼Ésčs>!‘“ķ6ę…ęe(Ļ9Ļjä“_ŲųĆLÖūJæĘw,€&”„aūCĮž²šF #²Š4€LY7ØŹ+zżMsž!דūŻcQšŃž-OO˜C$Gä-žA÷ć„dŁ|Ļ”³¦xwL»ŅÓūH,DĄsÉ#ø®vļBµŽuņ”*¾SpÉtę‘ 2ōzÖ¢Éy¦j&8ķ ,ķvņóā¾ońˆÆ|I©Ggos$&2]Ldå=Ļj—$z?ĆłŚ ÉuøĆ“'Żcž×å[cÄZqńŖŁÜŚ[_Į ‡Ļ‹¦ķ×ō¬Ül#ßtkĶ X‰“ųn-|ŌŹ1ĮU9#š?•|›ń“K“Hń!ŗ³xu(®b  o,œõ«HĘĆLŽųwį»čc·Ö¤UˆŹæéųW½]x~Į·Ļi=̘"feöŖ/œŠĻCžŪPk©ŻgUR…ČoÄģ|/šĘÓ\»øšņKøb’"¾B eõ$zūŠ%PņxKMų}ØĢŗN¤ģ ’"=q^]ć=WO‡AÓon#¼t·”™IPŁąć҃jr:‡¾#±¹’Heū#źǵ71}ńŸ­{Ž‘”Ķ·:twkw4£Ģ  6GŻéϧįPā&sž>ńü+½7I³³‚ķ‹™Œaį•1ŒŸnµņī³nŗ–æ=ŌšJ—nfįsڬˆ³Ōü1ā ]iÖśu”u]āe+ņɁŌg½v—ŗE–„§[Zi±˜.Ż3,™ē9 Śčå5/„ÖÖśFÆso$w:‰Śź$$€ŽĆ½eiŗT‘č‘Ųj;łH q÷ˆō „c>žĘ{Ktšą¤qõō®GS–¦µ»VG\ś‚Eg) FēāŸŽ]ß>™§DĘŻÓl®ŻGūøśWYšćĀv·:Äzµ—Ūģ󵊌rśų©s6JdzųŚŅ)4ėK+ˆeI­ßllīÆ÷ ~µņ’Ä KGZŅ£“RYłŻ‘‚? QĢÉØ{®Ÿ¦ÜŁéTŁf1Xäoē­oZX}‘ ŽåU8PĢ:@}jNY£Ņ,4«[«uÜvŻ1 xē„|ĻńR’Qš6¹:ĮhŅĶo*äĘĆl¹?Ā{ŌrźJĖś§»ŠÄł2’ÉÄCšķ®5"Ēķ›dIw*„ŁėV6µ/ĻØčŅiÄĶ Ēt†čA÷®LÕ|˹lĮsø…GŁ­”°ć+Wć+^Ļ]’c-,Ŗ ųŸ_Ą×gą}Iō ——C AŸøŲ8ǵSBęŅĒ_g¬Ś\ĒywŖ]'Ū&8ßļׄ@²Z\_ŒŒčŠ`déJöŁ£§ź°ŲŻIØŽŲ„Ó +…,W$sIāO^Å+ŖŚJm}}1L™3•Ҿ2iK6Ÿ”Żi7PÜłģŠēl}‰»āŸ‰ž…m4Ū•ŽÉŽJÓ°ŒKUŃüG41¤Œv9ĮģZ.“§[Z™gR÷+÷c+‘‚:ę“ĪoY†Š]L [ޘ÷*Æ;‘Y»‹I°1ė‘Į}åĶēHK`0Ļ"³sģW3gžų§[šń*Ē “ö’[Ÿłeķ]ĂĒÄzLšllÆf±bl¶7sŸĪ¦ģµ~¦…ā_ųAģuXl죖å£h”Œ_­zƂ`Ś=+£Ń<}mi§\ū‹7€¹Ī8źMH¤1ń”šj—w7ZdŚUߟĆy µGkēxNļBŌ-/|‰‹?”n-փ„ÓįE½KżFŽ3•Ś«Ō ŸÅ1¢ł3ĘŅ2°å@ƒ'2¦™„Z\ †oēÆ>üW™ü\šMĢV:lš mrYšŹźFkHĆøć}Ļ0š_†LŌcŗŌ5™įó%Üū²OŻÆfšo…~ĻisŖĢ³IŖäōU=Ø ļs¾}No/‘·j×cįŲµ7U*ĄÄy –‡­ųmō»"ś…å²^łQ»Ŗ‘Üx’Äoų®ÖčE+IŽwdR™i8É?…dāŠHó-_\w’1ꆳŗ©ūµĒ[ų›[Ņ/nīōŪÉ<÷B‡ē$2śb§Łč)"}CĒZļ‰.lb–āk»hYC*’AéŸjõ½bęžÅnāK½€m@~B(·S)S3tź6q¹IīÉ;<џ˜ō­{Ÿ‡ķī„Ó­!ŗBTŻ(A’ā›ŠHŁžĶK™ģ%ó‘Ē ƬLŗ|O5½”³ČqµTóU‚1W1ģōóÆX“—|°æ'÷‹†Ó-ü#g¤<½Q߆Č=+C{ib­Öæ§lŠ9b¹˜d°S¼÷®kY¾³‰ć&āa¹Aٳ8õ ‡-M+IŚK‹ˆźq x2’hW#¬ų’M%õōÉ>¬ä|¹ź{ńI1ÅźfŻxŁī“³Ÿ7šœĆĢĪ#Įź­Gį]&śńŽļTņ— ”P_sLŪ]‘ŽŻ²hVļ3|÷‡R =+7Hńūź‹ß­tŗ‰­on¼×sЃŪ>µKA¦¤z¶£łRaŠŖœc޾bŅģõ†×#±ĖĶ¶ÜœœÆ¹«6Œŗ£ŻĀę+Øį;WĖĀ‘×ņ¦ų†ęńŒ‹ĢXĀ>t ̟žŖĻV®\fp’ˆ/¼EØAkż‘QB؀K/V?^µŲEį‰"Ņ’[I#{–Rv¶FßLńV•‹ęŌō‡¶—QY$šĶ“;×;Bœ¢€{ńĶyoÅ=9¼I®ÉŖivŠż«ˆ^4P£¦śS.¦’¼yhYÜŻÄ2ŹĒ+8Ąü©uŻNęŚdY#fqĘÜ~•.ŸdčÆ4F!¢ŽŻĒ<ģ˜vž ę½"ŅĘĻEФŽ9̱¢üż·P+&ŗ£mń. ž^ė2L˜čG&°­•o“÷jÉ/ŻÜ ėH$Ī ÄÖ©¦‚ūÜ)ĮÜĆļjć4Mr÷ķs›yLåT7E¢Ŗ/SdmjškŸ.ņęB÷lrXƳįūXī®fKŪhŠ•YŽ8­„Ś=ūGEÓꏟ.KH#l·JóC©Å¦YG5ĀÅ3 2ØGlŌI…•īy÷‡ķžóQhš™wļ#ƒķ^݇öéēģĢ—ķb”pP×<ßAØŲɼGÓÄ»GśBŒ`ŌŻ.ž[…2ņÄC2cš“z΃­]J³Bškp~MĖ‚Äõ9ü)ļø½#2±Įd?wėVdĪīóADµ6ö»o&`AłO~ y ŃSN¼hļ iē@v° GāIÖ™ĀȈs§¦kĻ Šy¦,Ny+ߌµ‹FŹ*ĒémŹ»UY”gµfC ·3„vDn}ĄĒz³uPÕf1¼k¼¬¤uą“ė_]~Ź?īžü\š’‰!kĖHYįµ—4 Ū¾S"ōćžiHļ£3ū>żŸ¾$éž+Š »‘[^]Ē(‰¾U—ńģs_ žū{CŽkŁYUDs02+F£Ų^C=¦„ Ļc$RZÜ#.|Č]pAį_Ć÷üļö<Ö>|iń?ˆ,Ū,B°8'šå<}&”ŁÖI¹dSĮ>˜ w<‡ģӒn䕌%¶ū ŚÓc|4dg½A*=ĶM>źK°ÄlI$7Q^Įą–¹·øšUbŪÜņk)6Q«¬jp‰ˆ„€õč+͵½hĄ“Gƒ+›ÜŌę߄, ń5ŖKrd¶€1+žGµfj¶×¶÷×:qR‘§;‡FėÅ4ŸßĮØŻ°†8ȵē8ļéM“···w;Lxµ¹E’µ¾\O ȁ¾źõĒć[ci¬ZÅ( ’7žŁ±‚ŚźŽÓ/†§ÖnoM¼‰0NG#ń„Ź\Q«©xsĖ{dzžŅĒvån§Ņø¹4żlBft’5ߌ2œē5<†—:mI™$Ę ž½t¶vPĶ“&ć6īA<RŠ)3¤¼Ō“HÓ§±3/*=kĖWÓō0\\»“ĪūUvš)¤UÕ|ZnŅ#iĄć±Æ<Óī j“©*ķž!ķACÕ-,ü7y„ĶŚ£ćęd Œ7¦kĆuA‡ˆg1;}‘¤fU^BÆ„_;1iž‡„j–-d'.ĒØ'”„Ԛī(¼č䐅#ōö©rī5 ųüDļG‘ĄdćĀŽų—Q“•2»ī°ļJęŃgA üś¬Ÿy ŽżuV3 <+äć½0Ōź¾ĖmyåŻÄŠ#p‘ŌÖv”4š”–щٻŽI µ¹GJŠtČ.žūģöęG<š+ńī”fļˆįEˆ`œRščWŠ|‰ Œ°D~»‡qT¼Rė`ź-Žł1ĘŠ`fčĮļeTŸ;ś{}k½¶ųYkā[ČL·k·–U”½éŽ6źuÖ>—B…Œ§lP„—BŽõ©Ń^Ō,Ł&·ļ/ńTI›™3²\]ł­EaÄ÷¬}nyl,ēeVéø{Ö&”Ļ)ÖīMä× ę8ÉĪGክjdhP˜ĆzŅqčh­cŠIłS÷‡{Wgg”ÅxŃį±oēhėDcй›ÖöX“²ĘN²9«¶ßžŃš’Å“’ąä©ĒCZ(³3˜Ōõ¶ži];‚§­-&•Zcšæ+9§{ȵ©éæh°’ ÖMĆ%qĘk–Ҭķ4ēI%żźÆnćžÕ\čJ-ž±¤ųĀĪāąŒ\l Ē‘ļ]_ˆōė[Ż×ÉæS{(,QFvļG2/ٟ;é¶¼ŌN­lŅY‚ĪUGĢO<ōük°Ö¼Iiī˜Ö·"y‘£6^ž•FŖ' '‰–ņųj"ŻRą&Ģ敶W”hšõ£Ū–¾ łB'ļ6:Öa(h.da™/¤‡Éf?0#*=«Ēõé..µY“ėå– 7-ņrz}kX“·2”Ķż'į¾”«»Ae×wS“œWŃß³æĀ ½>’ÅWŽ#¾ņ"øUX-Œ0+÷ŗš3·ÆŅœŖ$­l/ÅtßŅĀę \óg`ƓµŌUbJ«h†("f/‚s@ģjZC©JŒ&UxqŌõ®K_Ó5+Fš8Ł`, (x8 .Ģ7V½hDAmĒ‘]‡IŅ$ž1ĢŽß2qa@ł™mƧ¼»‘ŚL %vćµ$¶¾ó>ff‘ČÅlé“m" @ocA1n»ŽxÆD“Ć×wŗ£%šG ¢o^8b?†˜­}Ÿō&–[¹§Õl"µÕAđžGą{ö®āöŅÖīĄ£…USž'Ś‘\¬óM(Dŗ¶ę2a…Åz-ŻŻ¼ Æ(ė€8õ “žÕµHn­¾ĻlŠźø qŽkN°ū}ųyCĮ<¤PRCdym5X¬ĄÜłĖīŠōk_Ģt“ÜQĀ€[b“—BZ&ŗh…ć†ņī;\õÉŁŽYjZ\Ėy(žŃˆ€Hž?ZfRFBŚÜ3˜U[Éėœ`Ö}儳G± Ą=½é¤ ēq}o£Į!Pņp:Š­¦}ŗŚį®įgRĻ>”E;žwā3.ÆŖCtf‘ ”øaӑ]f‹ēéV’}ŠGxĆsĮ•œ“4ŒK—×ßZµœ²3ĄüŸB}ė¦ÓõG³ŅįÓć“zmĄ8Ÿ1¢‰—©ų¾ŽŪK¼Ņą‚).å1'żP5궉=įvu*Įŗć­ ”ćŠōŪ%ŗd#ŽŁ\téZw[ōūe•Ć6jø»nbćfUÖ"Óµ;f»²ƒ|`‘&9­];BŅ’²ćŗ–āŹHJecēÆÓń„)GC“ÕćŃō˜'ŗ†8‹s°uǽpK=Åä°ĻnOšH ­fŁŖ±ėz7ˆ5(­®-^ŹIöG»żóčįśÖ§‰ō7žūm^;x’“&“ œ¼#“ž{VLz1qlķåC•$£éšīōkT·U·˜Ā70ęŖ7¼A©iÖ/ma¶9bbwbkwJÓ4 gŌŁb‰r›=+A\ŻYbŌ.”64#c޲ž%46÷‘ŚiŽFö|ĮłsČ«œ„Šå4LÉvs0)  ’Ū[ZßĒä%šmł½p jAĒkž%rŅ£,“4-°ńœĢÓf“Y=ŹéŠ7j‰HeMnŽž]by1‹?³*åĻ<’*Čšż«’i\Dģ©ż d#³#ŅÆ¤E ƒÉĒrE$ņ[˼ćl™į©)tGc¤¬"ŹŚ¹zķoZŚ{dp0ŠHķV¤<ĆĞ$æK¦ŅlģŪ``®G@=k˜Õ€ƒų׏ė–{–Uc†8Ęh“6t=®4鄺˜łR`yXē>µĖxƒĀź²C4¾~€ēŠø¢OÖtŃu«]]éa.bF {ŽÕ«„ĶĢ0»‰! ¤`zӔ{ I—ōĖKė[[ć{rī›¶£cV”Ó|at²Ūo$)’<&UŲóƒõ¬ģtĮ³Ē5ėŻcCńdžK9-¦€+  <ŹŗøÆÆD»»¾D""L’ū‚„$%ärö4ļ]¦ųį—ä*YłT 1–­Ųld¹Ńļm wœÜ±*ägœńM²T8‡Ć×ŗ4šŲÄchšS|µO_ƾŪųq£h–ém5¼K<)嗗ĖRT÷5›WŌŃMń{Ązā™¬£xdk€˼sŌż3^¦^5“Šł_ RU‰ćufĶbŹ:ŚMxļ2+#1ĘOCZ~Õü?įnÓPń%ŖŽi‘‚^/ļńĒ_²k[ŹtQ|@Ši/ß¹®ūāńŒ«*0³`p=ĶMō9YtKhŌÓ{™åŻ#³äšąużÖĶęæÓķVV€@ĻųŠEŹžŅģŽ{M®Vp>Q܎•fļš„ćO>’Ø·,sęcÕņ•e±GĀŽńfŸØÜź7÷ļē)÷öī_~޵ŪkŚŽ—§čÓÜßŪ›ˆÓ—la~”œLe!t­At”³») Ū0“ž6ŸJ×»ųĮ§Aw5•ž‰kxĖÉ9V=2sō¬å~†w¾ēA ėz„š9ž`³°ivv÷Å{'†µmBy-×L¹ņUŠ‚Km#"¢,øDóO‰7ś*ŪIkq³T›ä\~o\Ō?<'į‹*Õu7Ä·ACĶk‚¦6 Ąaī9āµ:"ō3uæ…VéŖÉ®ŚĄtōK±:“+½>QķŽ+¾›ĒžšU¦£©j· oŖ“gģŃH¹3œzŸNhWGČ>=ń`ń¦§§ėQ\Ė<¬ßŗŚ1»®F>•­¤O,¬žT2‡`S%rG’ZĖ©č^šČšęio ÅĻ–ólŁÓĪO¾?ZŽųxڶ¹­źsźvKc™å[Ą2vb 'Ž„½ÅĻÜśPŠāµ†ętnCģŲzśz×ĶzŒ>½ØÅfså>ńĘ0ēłjEĘWcwl–Öš”ņ}הnŁžøÆ »ńķŻŚŻŹŸé(~LOJĪQa(ÜöżĘÆāM7OiC%äi°FųÜøõ®ŪMK­JV¶IĪšvō’3•3ŅZż#økF„ƒÆįé^ń—MŌ|Yyhmg²Šē|*e[Ž˜õęŗ¾†n-hs>ѵ+MGH½ÕeŒIją¬qĒ€ųéœ×«j°OuęKGĖƒ¦ÓTćc9ny©ām7@Õ­ōĶfąEq6dprqĻę+”–ī ėq‹dµ½šPrŹ2 Ŗ€’9{½3WŌ¼LśŪµĒ$`2ą¶ĻCV\Ėc;łÖr*īķz¬µr^0[«k:’Ț[™–59ia“n8ʧņ­d¾“NŪ< –`GĢ8?J|äJW3.u‹¹oįyn"·³¶üźžŸā­G_ń*;ĀöÖ’»T€ć¦OåUrNšóĮŗ“©Ė{iåI#yJS ·ėšč|;„ XY ¦3–ā™Gidļw;Y2B ī†–Ļæzćü\4tū=”vńĮØ#.īøĻ֏#O#—†ÖmwQ’öāA4Ø0ˆ~źŽśVķÉK’[2»ŃJ/2ń×>“šL«žÆ[Ķ{ŖO\L÷ óm#ę"»Æxjh Ąe7 e‘‡…Œå+„„š”j¶Ā'tc™åjķåŹDķ;īž3Åe&g{ž?ć]WģqcgNd!yžż+;D’J n„‚8Éź¢ō GC¼Ó¼8ķØĀńøm§'ŗM{CN„ČfČÜĆī^:Ń*Ē„ųūkK’{ėR8%óĄö®Ł®/n[Ū·–rw/ ö¢Ę×=CEÕą“¶²ÓYŠł²yGŪ5ō §Āń®iŠĄ`I#a¾`]Ėź)l.cęų^ ßO4rA“UBĮ™ˆ=ŽkÖlµ°š-­€ŽÕŽį·ČƖŲGż9¦ £Č&»·µæhŌŗM£v~oa^Ėąū«‰>Ļ–Ń"¶I“Ž=Ø l}wef4F’Śh’įāĮ“^bŗ=Ŗ½ˆXŠ: ģzĘŻE žmĒξ[ń•¬ĖØĶq’››ŒŽp{Ō¹Ž5 OžĮīž8 ŒīEwś®¤ėfgw‹ģäm*1ŲW;ŸcG3Ä'ńT7 r,É.rŸ>FŽÕĻG­źēX²Ńa„½¼¬71'=~””¹wĒZmõšCm$3Ü#–FŚ~åpVq¾˜$‹÷ŻW#šé¦ŒlĻTš·™„Å“oµƒmsü½«®Õį²H¹„ŖÅvX€qšŠ®SÓ¼I.•°üÄFÄš2F:`žUŲO¦?‹!¶»žI‘ݼĢ2õĻ­ nå>źVw“\ŚŁĢč9Ü~•ŌéZL,SĶ.ĶŖNŠŲ†x?•e8£™ń„÷w«åEq.>v%±Ś¹ f‚QrSoBŹĖ×Ų×+G »y¶“^$B(%š®wĆŽ#øZžÖÜ*X¶Ę8c×­i[žķe-ķÖ9"ˆq‡'…ÅųŽŚęāāęéŻd“'/»–’aŠókϰ_Ż› ¹’A#­S}-µ¤D]ÅW’ߍG3:"}ÄĀP‰c䓮ŖI“:„,ģA'ÜsĀAóM{“Šģ4­BKr…%h¹;†3ž)8Üõ(Hž†æą—擬^,š±š§öŲüIar-¼Ė†Į=62’yq_ÓWĀæKm‹ō&Ÿv¾EŪŽ‰(ļś ŹKS­¾§ŗŹå•8+ņ‘ź+ó·ž 9ū1i’“Gģó®h°é×SųĖDŠK›‡–žrĖāĒæAQ'c&õ?‚߉~Õ~ü@ÖōnŃ“ōˆ–»`ăŗ;’+پjZv³„ R½–+tęŚGL’sјóŠó³zwŠ‘Ń Ļ„tK¬|øīw×޽f$’ 8JńĖ…ł׏Ć5ņmėsx®‡uØ&–ĶÄņÆ8ź@ÆDѼRŗ½­Ā[ˆ ņxåō®Ü5gĢŗR…Ö§”¤ŃŻĮ¹ŁŪ7LƒQÅoē,Ÿœvę¾Ö”ÆÄ«;šĪąM..@»@éV¢†Ż~ĪĄą•9īkxŲĮ‘]4i8.®©ĖqŅ©ŪjWr R2vūŸJŌŹĘõÜ”F !'=HŖZģrŚC1gH3øœ Ø™Ķ‘é—˜Ó{“žzŌĻ5…“f“h’W“„É­bdĢ‹ŽÕ¼¹ ¹o˜’¢ØčyžŃ2ņä"±tšs:Ia{©"Ž0r€ŽĘØŻŁłAŁclŽŽ§Ž„»·D“ķ*¶ķó_ån>éÆFŌüs„ųUuKxžęš±+0XąšŅ)u1‘‡cØ4±Ēgs$Ź2Q ?ēĆkÖĢ.į2•fĪĮŖoA&Ȗęõ^„ĘČŪś`7įZ:|W:ī¬>ŃpbN>^ōÅdu)3ŃęŠ'Ņa"XĄĢ|ląņ:םiZ ī•uuŖ](’ĮJ łƒćw¼U…O ”śVŠ–ŽŻĀLįŲ|Ć=1AŒM.īÖ9ń AžÉé^įįŲ"x•įūb>;ŌJ] éÓ; 8ćń†µØÆ`y†Ė?xo†%»Šµ‹«Ü&’  Ķfn¢z<—ŚHs“FåpJ©ÉÉ®ĪėFÓÆ-ŻŪ -^As€£:Ņ1ź3Ē/¼-ZĻä0ޘä{Wmfv¶oŗO§5\Ø.u: …°e·ŗ‡s²’ŗšōø4…‚Åpń¢ē¢õō‰”ŽkS²±¶Ć\4æ1Āæ<18”< maköņł²¾ņ<¼qԚdótg!ā)!µšXĄŻ É犭”ųĀī=2K1ĄSĒOoēY̾Tsrų›X¼ŌC_jģČŖ€£žõ£&¦·1ÉžnŲVf‘·RžŸ-Õ»Ķq˜n£ščķž!MG5ŠžDPSę8ę­!ž±ŖĒ­j³]Łō•|É[G ķ+Ø ©žj‘2„ÅŌN”Õ:ą©ž•¬ŅŻ2“jņ¢€”¢ĖIĆ@ónbŲčj¶› ņĶPř™½i=†zW†īś1óĶ3cø’j׆¼ *ĒypÓ)µrĆÓń5¤%b4Ī•<Ų PQP½š}«Źuo¾—ė{Ø3Ü+ž8ŻØ­¹“±šF:ŒŠN‹ūŲÓĘsšėō¼ĖpHdhČć'•É-źŗ‹i)[”T'ź+;Rń•ö‚öĀIžą?ŻŒz։¾¦r±Ķé¶øßĮ+Ŗ“Ó]`‘ę™wķŹŌūU£&Ź Ņ²cu^?ZŽ‚wXŁU æj Œ®zO‚_Ū:ź6ßf]Ūb$ēqü+ø†ęėM–Xc6Łó‘ŁM&ģtF'…ų¦Ņį®Ę”+¢L>Ń÷5Žd`„ę ‘ƒĪjžrģR‹ģQĪn,Թߕ^3ųÕÆĮ/–±°Ėm“÷hR3öe+i%U™Õ¢“ŸZÓø¼Óģ䌁:gŽÕĢØĘÅx“Ø^dĘD’ ”Ī{WS¤hØĻq,Ó!±äž™¤K‡cŹÆµ}@_]č£uĀŹćĖd\°Éé]„nģ{¹ģŽŽP õĒ^kNkéÜŠŽī%–8&*WwNõ VЬļ.ā}9«R³i5I żå8śS!hķ’fƒw)īh̵ H[SycQ ¹äĘk”ž'NP¹`Üdvؙ¢™Ī›ū‰&†0NÕĄĄ&”yu§ä*Ę3Ļku4¾–2d‡ķźE ™W†[µŪiŗ\‘Fóɏi\ö=)ˆļty’$+Œ`cÜTŚŸŚBmbTž"™.')āˆ/-ōē6цŠ5%‰ō®sG×"ūVr΃qąŠŽd][ķu{;沁q±7§­pŗ^ ś6”3Ū, `”ĒI•ž“§xŗÖd½‚0ć=?•&›ā›kČü©äI D7CŽõ24ŒEÕ?³“łœŲŁ„üŪC€§”"ø½6ćP»šuøČumŪ»Q©ENī…®db©÷O½už•ļ4µšā5Ž#’Ģy~8žU©œŹ“x«QŅ`‘¬Y„Œ0pż*[5­nŗÕ²'SĪ3Č­ ŒŪ:<§Ū ĮĮūƽmvŚŹĘŹ0«ę¹ ’:SŲ¹ężģ6Ś€`ķ'>»ŅŖZĖ,,Ó"Ŗ«ąūŌ6 [łz„½Ü ÷ćøĒjézL“›HÓķ3¹ĒĶųԌåu ūøĄ’(^C2½?čl¢{ˆ<ē;UWsJ‡Ā,ųwWŠņį ŽFo(ćēü«rI.…Ó·ŚŽŖ: Ņ1)Hæg„[L†YßĢ•Ÿi$tÉų’įÕÖ£}g­iStŹdeĪįĒ_¦+e€ēÜī<¢iś9Vž9v©“œd×?ń#Q·ŗÕ Ō…øH–@žšhåD\ŠžXŠ]Ŗ£·RՑ­Ć5­¬†Č±b1€8•ķ”…ŗU6†Ķwư“¹ņ½yÆjÓ”ߨŌ,wz1ŗÓ5HꘆEį”ŽøķNńÆÄF»½NOŲ‹ņæwt5&щä–‘MJāh£x·‡Š’œ×g>›-Ŗ4“Ēæ~>Ż«HD†¹u+M6ĘÖŽYeo™ĒB¾Ę°¦ņµ’E +œā¬ĄäfŅ’Õ>ĻicBå‰UÉ<Õ«½6K[ ŠÆČ,1Į5”™pWÜ£«Ä#њK1„ßbÆõĒć_@xOĄ:Lž³™u+8-Œņī mŚ3õÅIÓN=O…¼Mį½KW×õźĖä\]_4pąrP?©ük§‡ĄPˢϧĒpg™‰29 śU(šiĮ§¾žźęY1įq'FĮéŠō !“ĖQ3‡o‰BĀeK­Ž&ūž%øs1ó„zƒeÕ¼'įųW\ž( ’ą²4€.ćžzć Vr¶Ä¦ĻX›L“ĘVŅMpˆ"ŽwgŖž0ć_|Oš ߅u:%yl]Ų‘€„ćƲ±QmkēHȉå†Ulō¬½sF³½²72ŻĘ“0hü¾źr? V)Ė”ĪųH·Ņµ5×­ä’NµĢH@ągŪš7u;ż'X>,ŽŅŌZ&‰œ®ąŽćš™FåhAgŖĖØŲ­Öģ;ØĪӌqYÖrĢĶ$NPĆŠqɬš&ĒAomy¦Śy€¼‘·“ž+T»i$‰¬Ģ°ÉĮ#ÆŅ‘&é҉# ī$œbŗ»4½ą Ķn£ Öč6M6ęīįn,¢‘Ż2ŪA' x®ĻĄśøMR}Ć/ˆÕ׀£œÖƒe±Łų·Nóā ņ+»e\\n‘¦ŚčŃܲĒg_•Aē9ėA6:-%īµKČ,-§†É 'N„|ÕuuØx¦ēWŻ:ä’2Ŗß#ÄgłńM÷ß x“A¶‚Įõ=B-€va“מ;Ņ]j ā?ź6zCÅsįŲ$7ćĶĻØ?…jƹœ£Ōõ=. 2[4ČŠĶęJz‘éų`׆xŽibÕo4D ¶‰dg©'#ōœ™™Ädŗ[Ķ{"LR$.ŲŻ^5>–ž"ż½™µ™Ü•łrJž›ZÜÖ=Σº~–Ėžś¤7±)™£i0̾€Rx“Ä6v€ZHW'g÷Ÿź})ĞVyž³āż9¤’R³ ūs“ėŠ®/­®“ż÷Ć WC‰”ž:v¦‡Ė&‰®Zh÷ -Ō,I  óŽ±^©ųź×FÓęŠ¾Ļ"Ū~:PMŽĮZ爼Iw©Ķr;i&Xāó»Ü’žÕæćĻZOf,®ŁŃFжćµ3)-O>ÖōŻOÄiCKžWH"Ų#<a×½e/®ōė6ń.¤.cˆ8vįĻÓ½K.0;Æ ųĘĀiΜ‘Ż£Ā”„cŃśćh®×PńUō$ŗP6Xį›ćéYģŹŲóżFåõ)ÖęgūK'F#;Mz‡ĆW±“ŗk⸘ķÜGü“ō®2ę{ÖÆ¬‹‹S ؎P Øć#½~||U½æÄėɧ?g #sņ ÉäŹØčŠ=Ć·K!©O³ łU”’"¬k:<–z¤ŗ‡œŽ¦ŠNIR Ž­¼ØōæŻkžÓµ©Ÿģęā!fŽqĘNNōĪ+_Ā7‡I·½K”ę\™\ĘĮ¾ļ9ē֔ŽyD诼I}{k Ŗłķ¼¶#ä±Ēzą§ņ¢œC,2A6vĶøä’Mb8«j¶/sām^;[x–'Š˜ūł÷„žņ -Z bŠ%ĢӐpj¹ =óĮz;”į™t;Xōł¢ ožŠ£28Ū÷wzx÷5ĮjS]^^\“Ę -=wcp’=Ŗć~…M:Ģų“_k}:x›MX\ć,R ɱš·JźxķąŽĖ»’»‡lÓqF±—C2 j1ĢW|1°;p{s_YxSÄŗUž—i~–PĻrĢ į÷/®>æZ䨬mÜõi·Ž:°µX&“Bø‘<é$@I`2pn˜®-ĻL·–MF&ŗKqƒ.6ż3łSŒŗčŸ>ųƒYń®¾§yie/‡Ł[ĖÉ ńĄ®ĘĻU’ėNšśW†'@Ę–#ŌV¼Ę¦š¼_ źž3ń6œś=¤—s ¶NĪp”s÷~½+ė+}/Ā^ÓtHüC©[ĀPū`xŠō¶}ØRbHö-OÓZK/F‚ŅńīĖn¹ĻÆ?ńoĆū Uōū–Ģ*ČKBä#ئ¦ĖR± ’†<=gØi°Ź¶×±Ś\,…HŹ0’sĮļ\lVÖWóź”īą‚ÖIžA‘€Ŗ:(¤es7$yżēˆ/4»¶]*›Éd3ó­¹&ŗń ·Ö/ckVu9Ōۊb•ŗœ…Õ嗊oåŅōŪĎXׂb:ÓĆ]iśV}jCģņ°!$<ēéłTJ}„üõņ'µćSKy€Š6<øĒ\zt®ŪSń¾•k£éņå^]¾YTNwĮ'Ö-¾‚äg;”ųŽŁn‹Ž¹{er@=3]†“ć<ó¢Ę„Ē$ē §ʌlDžÕ!µŌFSēd ćŒõÆń†õū½j3,bT„|ؒŗ +j^»ćøfQ`”ć&±uK[ē»ÓeŒ-ĀFwm'<Óv=ēᦿcćµ?ß@tū›C»Ė$±`G_ĒśRź:~Цi›ģ÷ŃFå3ŒąuȤŁ~Šń!$±j· cg%ŗK6ÕXÉ;Ļ$×øŁĮws¦"O6łÕ>l€T5}ˆ”ūž}wįkŪ›™ŚŁżŲČ\šåüUąė½2Ī5\]¬HĄĒćń£Ł™J&_…,µ¹ļ^Ч•`†łæ*śsEÓŅŹĀ8%wyS žI§Ėb=3CŃ.āyįM>G\©”}į\å}Śń f–ķvööŖecä{»-Bžł§øšvgmŪXš§Ņ°o,gµbŁćWnž¾ōž“௠CŠj7VŅ„¼d§ ā½N÷WÕ„øE“A ćøéXµaskqŗŻ•õ¬Vkv‹{4Ģ"Pģ·^}Ŗļ‹§ś~Ÿmmn–̐“ųwc­+ƒ“<£Ć“_źw÷0ŻĀąŌ/%³Z¾%uµ…ŚšF{w¤IĆ®¤÷VŮĩ`‚Ć śĮz2iš ź—Šń\rŒŲūœę)ß ŹZö¹ †ž÷,Z"ńŸį5„üK„]X^jW×Ā+@>šq‚})ó2£²[Ÿ·ŁĖżŸ8u *y"¾ų‘Š'ø¹×ÓSK$#IäI“|ŲŌāµ¹ŖgŸxŇOÕ§gŗg7$!$’WŪŚ½ļVדż:ĮŚźxÄĪ7uł«Q™žד-N95„‚ ¢uł¤õśzÖ„¾”»Ap‹Ī=2Eõ×$ŽbĮŠK÷w)č*ćCĶµŻŚ¶ŌŽmĢq’bŃ'Ķ—_Ś:¾¤ČVf|7ŻÆYÓō‹h‘ķvŚBō5&’‘Ņ\;čɉ.„uÉćj/ųHŪLøK­·[¹äqŸjŅ71ęÖĒ•x©dÖō±glƹ”I°œgJĒ‹ĀŸdŃÓP•¢į€Į<ę©>ƒHdz‚öśż<°$Śß7ū8÷®Øk?wŠü?{|ŗĶ‚V<šyéųUXŻ$yžÆąZn“Tš]`¤¤y`Ų=I÷ÆSŠ!ÕRĢŁÜ#A\uäJ¾Q£I48śŽžźĶę<Œń]f³ ŠĪś1x”ćhuĘ}jZ"Lč,u«„H F™KlbB‘Qß_Ōķ’Y/8-‘ĢĶ“į­"÷Ė Ś“¤g‘ŃæOŅŗ]ŗdV"Õ¤·“X× Ūp3žų£™FM­N+UŃbMsņ¤'8‘—ļjńgŒ‹šĒ“ĄīyėYIźRgOwm#iÉ®kʬü;­ßjZĢ’ĒmŽ02N8Ī*J”½óTžŻM-˜¬0©vfb3Œ~Ü]x¦M‘„„¤dy’ĪG¦;ńAĶ=Ķ*+v»[Łn>žaū¾µ©¬ŽŁźRĮ§*Ö7RŋeWŻh ą¬"ŗ’łŒ—2FĄ‚±ž+¦“Aø™­ē•› ŽAĘ3śÕĘ=A²ōŚ~©qiöˆPʙ*øäuÓi6š„ʍr5Kø”+ay<äqĒįÖµ4ƒŌń-fś j·mgp·WŒśB¦ ēųGŅ©|6Žm[Ęzdš†³{EĖ͹Č-ķÅŹGčͧŒ“ x'V‚ÓKŠmN{w‚9÷‚JžŲģkć{“µ’ņeóÄś‰$[,ՅŁ% sc?ö’‚rDjŸ\‘^~÷§Leµ·|¦6ć³O™éÓcŌįžēQ,IR9ž"k‰Ō“™PŁć=EZ˜›±Óéŗ5­“pn1Ļ+¬¬ƒęļv®ÄZn“uæū ĘĘe#ø ņ1Rź¹4} +7WæóaēpĻZö{=SIÓķE½½Ź,˜ ‘’=’Jē”ÉGÆ|LŗÓē‘į¶T~@<®zö ½ž‡ī§,qnŒ1Ąči)(ö<٬V×Zé¶ÜŲ£“Ž~•·Y†”2Ŗ&0Eit'œžĪę[x‹7“•9pqĒ„lYßLl¦l«¢Xēxnp©ōČl}k›’„Y5ZÄpbvß&ˆs]1v'fuš_†:Ž"ˆ¼Ź æ6џjŌÖ|?vÖ÷3B9öHĘ=sśÖĄäyŠxYV[‹†ó ØŻåuÜ}«ØÓ.ļt»›YDR¾`’øö µ®Ē§¾«åķ0 ŗĪJću½RŽ\‹&5+ĪÓŠśÖSZ…Ž~Ö}6IŌDR“÷2žÕVī4G _+Øā¹ł72u N!¶Ü™’Y2£‚k—yĶĆJ&p=\U†z_‡¼mö;0—Yn¼Į•¦ÕœŃ×sõBņ.“ųęVS"/–ü`äzÖUżĢ$Ā(Öęt]qž²3ĮšĶe.Ą_šYŲĻJųm㫿Š~Šļ§ŃoÉ»’DBźÉ’pAƒœ×įƒõ9ōŻNŅkK‰īQī¤Ų ĻåYā#ĶZr?@¼;⬤z„±Gn£å Ż\ b½:ļ^m/LieŒĻ]ŪsœąWÄU…›Gu67¼»žŌ‚+“u•Rq‘ZĖ­ŻčĻknnc†ŁŠ>Õ=[¶ZéĆob„.Ē·ųcVó-āhęYC.B÷®•®„0a¶cĄŪھà ;£ĆÄļrģ1±µ$³5Īyn™ÅM%Ü6¶Ī”bGīq÷­vÅjp6ֆ|ńyńA0|/OlRŁŪrĪ޼VÄåøFPē©õ…āÕ…Ö TiÆŽPprŌÅÓ"¶YDo3Ļzź'ČmNŅF>c֚v€įÜóO›p6|鏻ļ\·Ū™ę 6ﻸū¦µŽŗ‘b©¶Ō$‚MEįŻ_‡é“Vfµ¹xąžmń¦w”r—ōĖå°æW  AĮķ_EKā Ły’‰ķB•ņŌņ‡é@¹;d4ę[¹„Š?¼x$dY7ś|*ŅĖ,Ž\ōįEŹŽNųA9 „Ł{Į®Ć:märĆy½š‡®1ƒY¹zżī©¢Ūh,/®b]UNę†vūWź~#’ö Ż>ŹFKrĮ²łČéDWRœŗ“ČÆl.£»Ć¤®…gœÓõ5čÖ͜vOc,eeaœē ­ hē/¼§x’døe#Ź;·‘Ņŗż"ĒH²³’Āx!2•ĪŽML¦/eŌēęŃ-l.Ķʼn‡ģģw9ϱ®ĒśŸpˆ!"xČö¤¦/fo|7ŠīÆ/­ ‘+ƒ‚E}Øé°¤Š#^ €s޶§ø„1ć-0Ū]"±c|Ć/×ĀÜϬq ŒĘ2<Ą~õjsJ] ķ*ŽŁēē3wls^—„hńµ•Ų†ńŖ‚ǦŃTßc3Z¶žĶ‚¤q_hČķY’ų¶[+7ŅÓŹš7ĮbT~Yؔ¬TNau?“LŅDp޼„tז»Ņ[’ǹ©ē-@õ-m¶Cl« ŗå†:×%āĒwp“ŖČKŚMXœYSYÕ`Ótė‰ā¶a*rxśUgF›Åv÷ x–P¢ąT¢Eŗ––ėlLhk€§ˆ×TöbKkrģāLē§"‡]ʂÜ包Hϵuö6é‰vѝйlŸ½HŅ2<ćRø¶Ō%m>4O1 <™©-¬E²Ā…ZB€gåKŌ·#Ņķ­4Ė;4ø‰įó:łYäUoy:¾‡ ±‚ī‘Éó2w:œU©Üłę;›ūy#ó™×±Ś÷®ĆF–ēRBŠG(—8äpEiĢ8²õö•ØĆ9d·  38§Ś,īķ!Lt5“-Ęįt!¶B®%S“ļPźń^j]ēr ©ę.4ʶžšU·–āŻä·ßó~ķzEē…t=J 6xˆ“šŻT’‡>cžGåłRz›F66-ZźŹŅāXĆĢ«óg8'ڹ}wTŗÕōėxob- ärTzRP(ä­<<р™É'“ҤFɲ4As‚G­R2›:)t릲’ Q19ē?…pŽ“qe!•˜ČAœt4Ģ\µ±oMŌ`GžŹ÷ ’ źtÆF“ ²łĒ­.Q¦ögo hÖRė³kĶl­<Ŗ Œ;ŅŗĖc-‘†Ņ/²ČźFPōüčl£Ė|=r–ŗÅ¶‘4LĢ›¼Ę(ēĻ­z¶³¦ŁßL°Āذ¢`cų­0<{RÓ®¬įÖŪ0©Ļė™ŌŲ9|²ņ޵¬ ¦nŲųRK«‹;ŻŅyHŲŚ9>õÓźŗk}•–-¶ņ sĖSm •žKā 9 M3¼•~AÓn=j-?Hó,D2hŪ§~µ—A4vpéųjŁĄOœ Ē@­;=*ĆÄČ^MŃaåO©­9PŒ½OĀ–:CEó.s÷³ČÆ>’v¶¾02»““Ķfģ4u–YĮÆ5»K˜8æ­z†«ŁÜAgµÓ®sĘ>“‡ĢĪĘćQ’ÉC-¾lƒĄÅyˆ¬-®ēMVY$brĄŽ¹ęƒDŁgGū5ɎD!¤Fē5Ö\ÅcqDó[ ™±å“ŹūŌ¹!ø¾‡žų©ßI_³µČ/£cńęW×7D³™RNj9ȊhK8gXae|©ėÖžÓ•Wh¤Ü4g"¦Lé¦{—ž!Aeo=µÄ’ExŲĮŻÅkj–!ŅmFtŲŅ©u+üB‘£zuÉÆOÕd²] ¹/-a…>S0ÜßANQ± GĢ9S,±ßisµõƒq(QĮϧҸ¾ø’S˜1ÓØ¬Ś:=”~ .ātk¹NÓĄĻ÷«G{6 €§>ʋ“5ķåDD½ĶAO4±Ąć$žōŹę4õM"ļNµ·øh1ņŽ;śŠęmT¤Ó»»H\ē ĪßaP¢3R=Ļ4e×~$ oŻŪ½‘‰åYXPGQY“•¬wS²ŗ¢‹rsŽ»hio$y-“rŖŹÄ¹Xõ _Ā0ŽX—‘” 'R+ń²t+kKh#[X¾\m¬fĖLåßÄ×l³ŻĒfžBŗŖ,i’ŁÆsŠm¤¾šv±²d²¼`¬¤®Oäž™§1ĻŪj©„A<·w‰;„ĄČŚ Æŗkķ[U{‡Ō"ŠÜĖņ®rźMtĘ= ™ßj’^kk«IŌÜ&ŅĆśVŸ„.oµ¶sņšv‘ZØ£.Fqž šÅŲÓģ᳚ŚAę1 Ą–Ēnkˆ†ĖiŽŽx†ä 8­1r3µŠęņĶĢsņ°‚:VNÆŖÜEx‘ZcĖS†ĪFEs‹5u;Č`ŃÖōN‘± zŸ„;BŌķ’ĶŚķϜN½¾” 06“ÄW°Go ƒłX—qÉjõXćŌgŠ–éy͆žˆ}č:bs«unn ū|q¼@`…8-ļ\ę±ak8ž™¢Vå6Ö X£†¶³ņ¼ČL:Ó­C}©’\0m»B–>“f'Ū H"?9ĮĪ+“žśłī•·’€稭9U‰Rģv~ń>­¤XMēßHń“…¢’§Ó5»»Œ‹¹bĒ_LÖe VžÓ']fC(½P5^7¶{œ×[7Ä{ CNøžēNk„m˜gÜe>½OZ’źpwĻ­>~VłĄōĶ2Ņ[Ēž6*ļ“€=éĒrZ;ģʂ8ft!ß‘W"їRÜŽ`†E{Öē9ÅC”M%ĮŠūtøœŒ€x«ś¹Žhm ƒ1wüŲĒįHĪ7¹ĻCmS±ą¹Īzf­¤ßߥŽJaĒBƂk®t’½ŽÄŗ*9äé]>”xŚ\FĄ¾ünĒJ åč'﯒Įģ"x¤TłĘ~ńÉžŸŹ½Ū@µÓ“ū¦ø{‡”wä”É␊W~%Ik”:m½×īŹęRī+ę]%“QžķYbBŲECĀÖčnw^Äŗ-ī‹ągkzöążGQ†ĖūI“Ž%Éē^SøĶ ŚB9åŽ%ņÜqģ>£Š= (’kĮ­j olŹŅ ód\ą(®’;/ķ~Čd1q֎rylpڦ“}gؤ{ѬŠŸäõ‹«ßf¼k䗅ĻĢGjœ…åݰq$ ļnø¢Ų<źĻ…O;©iīēXŌ!Uģµµ¤C%č+ nE\wÜZDJŠē 1×Ö“mü3Mŗ5łą8ĪŃZ‘.Ě̈́·‡ÅeåĘOĻ’Z¹É‹šĀšx{Q×ī$†%…ņx,HāŖ%Äė`³j“±(ƒĪŃĘ+h«It<ÆPÕżŁld–ŒóÅciZµĮA žō&~i\ĘŚŲ÷=#LQ—…dQ““×ŲUMi-u‘"Ł ¹Ī}ė6ĶcN£„Ēz-Ž9– u1ÅnĒÆż–Ā>9‡Łå³ø{ԚFV35¶ŌDq4jV3•ć”§č–,®”ø ‚ óU¹Éļ”·Ńōū‡•­ŃNFÖnI>Õį^#×&d³µµtŒy›ŲķĪļlÕMĪĘj^,×t«½].2ŗYœŻ:Złūā’ÅxÓQÓ,­¬“‹ Bm{ݾ™®yG©¤es证>?Ōu@5ŻD]k^iƒj¶ÕČéųŹ»ļ‰S¤V0iWs¤×nDŽyŒc”5™gŹZ“&—Ø“‘īš5`B•Čü½+µ©|P¾9ÓęV†ćM¹o1„|×=ĒA×üńEŹQgŃ:V•mØööĶfė+x*x®—WšF•āķćE“ŌŹķŠ“³6Ü!‡šžt5Ć/ü3kįšŅóP· ĒÆĖÅ[Ó4wŗYšŹ”`ąp¤ö©r¾…8.#»²Yl.Żß{Œ&IĒ~µĘÅö»[č¼ūeū8bY‹`Žzb£”ÅÅīˆüU­µŽ©)“ģ¼+0żF™¢jŗ¢]I 2lYSĖąrsלR,kĖ ó„½Ė}® -°c-ŽGäj®•q«Ą’][ŚN÷dīeA÷Fzš„Ī“O×µ;żPĆ}$K8\“źk³†DšęŚŽć©ō§ŹĮ±`½°ÓuM^ŚR‹wLŠC‚2Ać\°¶ņL-ŗ“¬ |c<ž¦“‚h³™“*<¢QŪĘ}ĮÆ^ƒĀ_šiaҬ€ū‰āOpjĢ„#kĆŠXĮbóĶØ#^4ĢBÆ@¦¹æhVwČ|Ū£•ŌłØĄ+9¢.sŗŖŪi[[ O9·„y¾·įVø²³šŅŪ[]I»Ķķܘ< ĢŅ óM3įō:W‹ĘÆzÓBöØŠčžńĪ+ɼEoØų_Åh:ĆMqqŪĆŖ‹ƒĮ4XgŠvzō– ,°ŪĪŪ¬@ŚGz.<#ˆR8n˜|?ĖĄ?ZV1qeæh—~Šļmģ;MA#ŻGV#‚k2-Ä:§‡-"ø¹mS[ »’…6’?śōĢł «}1“Ė‹}˶H¾RsłÕßźGSŅd†śęI$+` /įYø¶5¤Xė_[6ž‡8ŽvŖū×.Æ¢hV7K¬j*Ÿ»p؇tŒŲōśŃČZ…Ļš—‰oµkō‚Ö)¬t·Ī÷”c#=}'šžSŖj6ś”qÜpq»Üš|¶ŌRm›MæÓXmdŗ °Ī{uƙ¼]ąĖńō·÷Äj–QŖ¾ĒČ÷'Ō®W“f“-ī >ˁ3bCÓæJģ,õKXa¾{ˆāóRÜį¶g'ŠÕsÉļž ŁźOo§Km%³”YFx`r1^ ėś]Ķ…ä–pOqq³‡ ē”’>“¤}™ψn“K+½BŲ\ż®$iD>`č+Ź< ńõŪżFć]¹‡`“ĢEpC®{>{ŌĒMįc^]/ĆęźėU¶x£…¤/Č®SYŌ¼>Š eŪ{ķTm“ėVKDśA]<‰¬TZĄŁ °cp#„s¾;Ó×Ä:\‘Ł™bhĪēUn zÓ#©ēz&¬žH÷\nQ¹äŽ•ö›ą7\ųy·KÕķŽā8¾Ņ`9ʱ?©TÉŲ¤|Õ}į=fŚöH®cgN<’+^Ūœx.ÕÕBI*Z&QƒĪßCÅqĢ냱ź,ż©^ęÉ4ßčvšH,T­Ü;Œń§°ś×Š^¼:ē€ģ?µlÉŗ¼·Ό.qŽ_օåIč|·ć­OƶzéŃ/o#T†c"#żÓž_T–ŹīÖÕ“{čM¶õFņłŽ}=«”A˜KP¶×ÓA6PŪ ’+†Éč3\6£woāĶf;ęyī/w²¬g'§lPćc9+šėĘ~8š÷ˆŹņӒā³€Ē.ÉŌ{p}–ż²źŽ9 lŹŅ ąąT8Ÿ.xŪÄŗŽ“qmgqšY§,Ɛøģ ėSE‡§-’÷śƒ–whŽŅORŸå^!«x+āW|Mv“ŁŪŚŪZ«ˆåip7 cß²F‘}K>ńÆöʗgq “DK@K(Ež÷½wš­ļ5†āyĢBÜØĶ·<`ēֆŠs5ąųm$Ŗ×BkXtōl/ŠÕx§MµÖ5 *r²Ķ Ę1°ōćŒŌø˜Ź¹ō ¾$ҔӀEņnYpĄ“n¹®/W¹¶»Ecl*įĮϽ35^śާŸöī֏ķ@‚¹ī1Ҽ:[Ém¦•eąoŗ¬Ē‚h: w~šķܦĚŚHńOĢŚįbWBy»Ö“XÓRų4— ®ē˜÷«4vŻ–<%šĀ[‹ē¹Vŗ œ1 õĶu—z-¾Ŗ>”}©ŲßĆŻę1ł÷ÉļŅ¢U ŻčgÅā˜oÅŻÄZœr$`änˆzŠņ½{W]zTcpn¦U1 ĖļłTó°äg%gb«koŗ5łņC äõéZǁt½BŚcO½éĻčiūCCjßJÓmōØ4č-ßķ( †-÷zsõā›gb’;$”QĀć©Jžf̤µ/Ūč·:æ‘kxœݵaųŖČj÷w–.ŽmäLVB«¼v­9P¬yŌņ1o]«c‰ 9?O†YVę ”žgĪ@ œżj¬>Sšńg½ŗA2Ķö6ėÕˆķŸŹ½«[ńF߇O†­ōÆ"ī/.%Ą¢g‘śŅ±q‰Ąų‹K][@šĆķpĀ„¬­ –#µ|Ėq§j‘éIµ¦ń¶Ü'ŽśRv5Š>Ēš© i–VF[y$‘āɁ“’wŻė^'³ŗŠfŠķ-m’RH*‚O8ō„±3ę‹O‡Z}Ę£q«iÖ²[䯕ɚćž"iŗėßMy%Ź< UM˜$ėō­bµ&ڜ¾‹asŖ$éA-āĮŚ S]ž›d4»#•³(ĪĢ÷¢JĘrģv©§“0‹ŁRł˜ē½y_޼cq.>™’8~e-`ķõ©$ćüiā]RC>g%Ņ®0Ņ‚æjś3JžżmļfA.;7¬ł&ĪGYŽāßU’Æe–śHĆ,[£ø×5–öŅźv—iķXIĪžćU{nb N{ļ2"ĒbžN}]„|ÓõOµŽ¹¬Ć¢K0ŬS&<ęĘUƒz{Ō©#¢:jxʗąĖ? 4ö­#6ß÷ĪqĮ­ū>Ś’Sµ‘@Į LŸŻĪ9•k#:’|×,K¦“‰=½„(ĪFŠēõŖ1é’\éóGq-Ņ6IžótééZ9+{F“5ÓƐIkmö„žI00ą6{W=®źvņ%¦!eE%‚žF;ÖF‘Ÿql—J·Ńmd“ø”‰rŒø8'ÆėVVÖÖ;[‹’ŻÉ: ,nGOQśVR—CXļ©OFŌī¾Šø>]¶Óęœņ¾Āŗ)"Žåڃ.ߘćw°Ø6*źPjŒ6‘ĀäFó)ōÅpw¶ŲĢ&ø…Žpz`SEŹ=‰-uķ4qNL÷$q¼‚øģ*ōw6²½Š²€ŪoP¤Ž˜ö?…j¢cŒ›Jµ·ÖĖ[¤j2‚ę—üęŗ<5żo;Ie LŁwĀZ9Q”¢fßZ}žŹ7†l$‡$Žā¹+B}RžkØę™Ż7BšśTrt9œOšę‘™jĮį7…#ƒ‚z֒5Ť„×K ,ƒb«=½ųėZ"bõ83PŌMĶå­ĶźŽHČOJó«k’jžÓR¾Ś±ŹDdvńLŽ2±‹ØHś—–ŃOŒķŃNXŸq^Ńš³ĀŠ[Ė5ö¤fŚ#fWŻ†{PĖs:tk·š}ʙheHä˜%žePzƒż=ė×ĮÖZ&s<÷o¬<»Ć|ØGAł ĖAs— 6Ļe)¼•žÓ‘°7V>™kqrČön°æóĘ¤#-OKŲčŗ:ŚE WEƅē„|›¬x«R½ńUŽŪf6(„)<Žq(uZžŃ!‚?Ā2~ŌłV pS­y Ww6’\=¼+$‹ņ‚ēįJĮÉÜŽ×nŪū Ę1„Č…=«Gŗ‰šK»„S1P„æ‹•Ÿbb‹¶Įq«E}{o-Ō(ĆäĻl×®ųƒUøń”¦Ūč Ś>‰ pƖĄļŽŁĶ†ˆčm¬ōµhd7ęFõįJMf nŽx.¶yH<øŁĻÖ“‚ŌR‰ĀĒ„Ż*ŻĘ×Ip3ÉJ‰|Ėe•L²'b ĘkUO³)ź¶ŁBŽ9ŠMÄcž¢¼×LšŒŖµåŪ,p‚Hnwg½6ŗ„Üõčģķ擎$™@ä` ó/ĶkfV Ē­Īż+žK Ž“įo‰,Oˆ¬­5ÕDqy‡åOwčkčx—Fšõ£ĻŖ¼ij²Tsƒ!éYŖm™¹=|Mćw×|Ku{¢Ś&™j>H—vą©öÆ¢tM)ķ“[KVīÖ{ˈ–MØłņ½3ZŖd¶ĪkÅŚ½¦‹·?ei~č|Ķķ^w’ ÕĶĀ-…“Ä„å„Q˜õ4ģ+u;Ļ ų„ć“h#‘„˜ƒŠ·~µ½hu½Y®Yķŵ“r„§ł¤÷ŪéUa$ÓŌ»nmģašKŌŽęwČq·šć&ŌĮæ dlü§+Zst6‹:?ķĻ’ŽDXg»‰1Č1ē“ł×ā 3Rl· äFĆs.:ē„)ŁęWßj¶ŌQVG0ąņ{jļ4«IwFHķÓ „Ę}«#;D–V"dlrlź@Č5ęž&¼„\G A¤sžƒŒRbNÅ}>ĪūĪ·”Eū’B•Ē#é_Aé:%¼v0Hź7‘œcük)6RwŠĄń £Ļ¶·vńMóę>{ ąVā MTé—Q„‘˜čŅWA“tŠż’Łš2ģ>Xäē—ü+ sę™Ö8–&':šźIˆÅkymܽʓŠŹ«üóT<Å3¢ć<ŠVƓ٫m$J-”C9s$j7s_ŠĒü·öˆóų_]׎ęi`E²†\nĪ~VSųõ©’ŠģާõšÓā"ŻYYŽOs й0_+”s÷[>łż+Ž®lDs$Ń9t 7xe#×ӚÄr‰šļķ›ū?i_ž ųēįĪ„myy7—.”„yCę”KD;ó×¹ÆąGā÷€u_…ž6暌ö³Z\Åq/”²!Ōą)#ø4ÆŠ"ģĻų3ÆĮŖxvßƗwv²ŽĄŽk‚@Ī@ć9ėĒJśZāM.āŠBŠßgņĀŗ¹Ī[¾+ä³<µŽŖföcsh©iŠą ŽU@ėż+“Ō¼=%ń„IpF‹æxc§µpÓ©mS=/Ā>DĮh׉i*§ń’+Ś4ĊdI]·8ćēzśÜ²nPŌóq.ĒØ}˜ĻmäʬÜŌ„g\$2Ē4ĪK&3^Ō7<ĘCņÜ[„ØFd(öÅműŪpę(ĘvOÆ­l‘©ż¦–©…ŚņzZćoõ[«›ä[ˆ•w““©łWŲÕZŪ•M{,‚Ļ‘Ę~ļ\Ō3Gr°<*Ov§(°3P]Ī÷M׏hęŌŪ¢\ą«‘Ōä`Œ÷®]ć“–g„ ² d°Ęi§c7n]“»·°ŠM>å!š&ć s·Ž·.ļ,īm7v`)@ō­c"[FŠÆõ ›–{I (F£ŽHükÓ “M@“°D$‘Åč,v:Eʏ,~mĢAńņ¹ĄÆń&ŗ×ŁX!ap1ŗŸ23qg gquż”nT·,܌WŖ>§%„©1" 6@ć4¹ćÉüQxŗÅąšåb™·ģ ©yG.ćøG=ō©ē6PgWˆ”i£‘ · Ļ‘]Lھ›©ź¶0F‘YŪNDg$įž³Vµ€kežq5¼‰ū1ŒĢO•oz³is:°Y%qÉϵL¢hdꚭōaV-ü0PėųTZĪ‰Øźŗ`ø¶·2F^lu_åSĖ­?Āj_ŲŲ%寙<9ÉvÜÄ€ż+ÖīüOŅ“”“ĢūÅG­éīr×NĒ’j–·l÷RŚB69ĪyÅq~+¶h Źxö2TcÓ±ēÉ3˜Š¤š[” Ķ*żß|z×wā;­"ŻTO ‰;+ =h.+ScRžOčMŃĘ¢-äžv˜ś×‰ÜŹĖ$‘o5o?ÅXĖr¹fÉ÷l° ׎µ"j·$±²•‡9%ĒmOaŠõˆćÓįŚgóĮßŃ«(ī5UT"Dķ&ćō­#£±}£Äz -©ŽŽ$øWQ¹sČ=땳‹Q·»ŠÅ­ŲX0;Łp_O­iqø <%{ Ō—Ķ—›’ĒŸ_Ź·u;É­ ¶|Ē#§ČY=3AŒ”c2{ØęV+“;ŒńŠÕĶ"öh[Ülø-„# <śPfu^ Ѭ-Ś B·•A*ƒ©Ē5ČGØZ‰‚łCęļž” •µ{·±Q"ČBéMšęÆö”"š6Wēiļ@‹—ŗ%“Ćg”7$9ō©t!Óąødd—Įü©ŒÓpŻ»%Éõ=k’Ōēū5Ģ«#ä"ŌĪGķĖy|Ģģū£B3]m²+¼ ZŚ#—ą­g(ö6ŒĻm³¹Ń5m&S£Ķi!޹/żjńņiwSB²•I8ż)ņō6ŪÄצž;)œq·,xs[ZŒ‹-©’1N£ęĒ„Y2v9ļ¦ĢkJ0>šąµVƒXYēŽ;ĄĮ±’<ö:ˆõß³¢KF~`G<Šåļu–Ōd›ē2<±õ v8K•NĮ+xw­#ūjy‘ō8,ŻsA¢Ž§Šzn·żŸ¦n·[*Ōń\Ž­s¬^½¤°C%Īé1‚pg“ō¢Āņ:©<;nŅZj²eŚ 8Į?‘­‰5 {xŲ<ĮČĮĘhH›ō9 _ZłĖ+!zg$œVt[Ķ>ójƓ‘Ś©i°¶fĢz“śuŌie"ŁFģśšć|Yāk‰<‡ņŅ8B§«R°iŌä`Ó§Ö$†i¦,GkŠō]7Č“†ŹsL‡åpøü)Åŗ:æ† ÕmĻ;Ÿn6ž„<7ᔤió¤E¢€’†‰0TŃ[T–Śā@p†^˜&øķ_D‚ģKyøD;B÷©BtģĒųZ?ŚK„]ŁŻ;(†ÜØĻÆjō릓±wŪ*DŖrąŠ4ŽKUÖ`ŗŃ ;‚>nJ„ydžtŻvāģŲ[–Ü’v•Ęzž(5‰æ»Óµ)·¬°b»IėNXūUóOW˜dc9"±“ ²kČ$Öb v¬«<諺8@uیēҤ•¹.”sœ,ˆ6ÜĒ?JĮE ŖvüĢp} R±#؈#“ę ORzóé^›į߯E£I”Ż*F€#K‚}šO5“PIœ“öwŗ½ńŠ?pĄžŻQė[š6„–sĒpā€0+”4eĢĪŖH PdŒaŲUˆµŲ¤“žĻ‰]%'Čć4ŪD–¬ÖQ!·‘–IŹĪ§ ~UcXÓSOB~Ņ—[—pść„g”,óļ ėvņųæM}Eʙf“ˆ“•nGĢ~õÕ|RŅīęń”šŖ—ŗiBwŒŖ«q·<÷„&(ĮœŚ?†,žßy³Å±īĄ3ĒĖśšłÖ+G„É÷Ąäg5“™Æ#;‚Y•–b“Į×m¬-#€?Ś7ĒŌv⣘|Œę"u ĢĻ“©f­#±™fPĖó}ćZEčŒv”āŁ­›Oó ńDÄØĒLśVM¬kæĢr~nO ¤äkŹ^-4³²vĒAZƒPb+©+.ÅłA<žµfŁ\¬ėōĶY_H{U·ī=+_ĆZ„Ք³Ū]ŖČ’0 “÷~”ˆ‘ģV¬KŖéšTpi!̲1į?­QųÕįIJŠķ.­ķgy^`Æ$hHP=©ņ“Ļ©ę~Ńõł¦ž)ȞĢĒžS^±{%֙d …dbķ“ć Ķ.B£PņÆH$¹±²ŗ ³qČõ¬½ K²ŗ¾ņœ,­ ×kShižż-÷Ł4Ćń˜œŒĒZņC[Ōō÷™]üūw®ī€Õ&öģy…ēµ+-FÕ5Õm÷›rIśń]?‡õüCws6¢‹ęc1žąēÖ“Fn¢;{mHõ åņćK&‡OóÅekžk§‘,ŒNv’K0ĄĻ‘¦CĻ{Ē»Õ&²µøB<¦giŠŲYn,öĆ#>āsŅ€LŽÓ5u©[ÄAFŁĻć_GZߌéö«oq2Ģ®Ś*[ģ\ds>(…`X糈”9č+̦ÖZ6€˜¾ą^ ūÖr¾ā•M ;»Ø’ŌŽ€«#.88 טO}ö‰÷ČąĘNvō©'šāPŚÜĒ¢G<Œēė[6śuµōw·Ā$n;Zw4§±Źż’łsŖ2ć™ā·t˜!‚Hć—vöīi×Łé?l¹¶‡Pq«0 ķŠ.jæŒ#±µ‘-ō7DĪᓸu4‡c'L“Pøš/ÕÜĖ=1^££i”ÆŁ¤ņĀ1ÜØæĀ)Ēs2’‰µøōŲv [‡©8Ś+JÕ÷ŗf‚WÅZsœģčt{»k«˜Ųˆ’Vąļ łÖµåC3©ĢRe—'łT¹Ct_ĖpZU›’2zŠßŌlM¢FŃvPnyöÆ,óĪ|¹‰#œV-żŲ·0ż¤—ŻĒ\‘@Ļ@Ń®4“‘W q]N”©Am­ĄÄŹBż*\ŗG›ė𙽺›k+±–ē nézĄżĖäTJ] ¢aųÆés$:ō“yb&Um¹*‡³¼OköżFk«p­l *=;šW溚„»ŖF |ćó¬é-'H™_4ōµU4&ģw:šĶ‹ŖØ®sžkGLšŽ§¢%½ŻŹx„v[ŌOŅ­Ä9‘ÓėŚuŒv¶ jīˆĢ™ģ+Ī5-āżäPū”€Ø•?g(Ųō;}ŪSŠ-ÖŚ0ÅB䞕ŽhZøŽī;™¶Ę vÜŁłaD_r”QrÓPŃ,ą¹±h Ī>vąńھmų†’7ŒX[żķ0©åņW§|ūU)!’X[ŚĒlDŅ+‘‚sŌWq„e¦iGø!X±Ž¬Ę[˜öwwzµ±±}ßfBYTŒ œdž‚ŖĒįgœInēd[‰VĻAéT‘*v=CƖ6)¤`£ćĶ'·¦?­j·ƒti® ¼µ·ĪAĖŗ‚sķNQ±j­ŹZÕŹé’¢ DlŽ=k&i®‹ŹĮŹ·¦ vlä¾Ųń^¶ ²—īƒč3[’xļ]Ū™ŁHĘ{b„JćŒ;›±ųŠņ{ ‹gXÕ<ĪīÄßų>i.†½o<āūšŸŗ}źŠåčeĒ :tÆ.åŗ_jŚŅüKö[ 2Ļ\œŠe%fw’źz=ę“ČÉö†$ņy®+WM½Óä„!’vązPM"“KT¼“Īr›z€jY.`¶FP¤…éŽō›°1Ü»ŻowņŠš„z·ƒć“»»‚)&hä< ¤äŖjš4Z~•y­ŹŌ—ćšė^}¢kpź³1‚ex‰ėŒmö5Bz~5°“Sš¶¾.šüŠ«œ^Ssm4Ģ$E;° ø®ęv¹ÖųBŃuOiÖ~.Õn“} ‹’0K–ĘT {ŒW¦Ė¢&•g?ŲUš<œ1xvĶU’+“CĻuu¼{Հłk÷ĘsZŗ}ŹźwĪ$HķÜNćĒ„Ca(v4ē°€<×EŪÆŹ0?*åµ µXĒĢ"”*É©‰[Lšō×öÓ]żĆ Ąń‘]Ÿ†¼16Or/š­·Ė#µ¤Ž‚ĻOņä–[ˆG<ź)u°l“é®­"óÜq@ ×µ8u ŅI”’@0-ƒĄtżkŸŅīmn/£Ó”ł× Fp2SÜŠ¼č:—eŚ–å˜ē9čqDŽÓüōiW÷^ýŃ};O»½[T†4ŲüŻźÓŪZi”bŽŚzœVœÖŲ«œ—Œ²¹H,BĪČ0ŁĘ:םx³RÕIÓģą}ʱł$g†ä’ZjF2Gš42Į$gŒ0ĻZ½„B–wķ"(p3ėėQĢIģžæūUŅK$.Ń#‚źŻ²õĒ‚÷Y>[2E•Śƒ“R'ć ßȰӯ˜łņ£ŸJęō«I’ĪY®f—hc…=ǵ4€’+ėÖøTKy8į‰ėķ].‘=üzŅ\"ĘØŹ„l¢ć{ķJ÷U™®ć‰ Żņ`ž Ä}2ĘīŚ5h#FCø<ę”ÉK¹‘©G¶Ęā9öģŒr9öĶ|ĮāhRy59![)å˜ą)'Œ×4åŠč§§ųSsu¦kö×¶÷qX¶‚¹<ēµō °^j€ŽŽN×W [ēBzW<ßC©eÆh³Åu7o2arōaķ^Øk钯‹»)RŪcŚyeük;03“Ž“Ą†¹·GżaĘßjī|-®ŽŚOu¦Įt_ĪCĢ»Õr0¹©qšė_¹¹K©$ŽK‡L³Õ ąc5µb£ĀͤĢĀ0į»V‘§ŠŽsÖōĶ#JÕl,uHRŅY‘‰ņą×ćO4—V÷Pbwł•1TʊŠóķKĀŠĮ3Ē }ź:ĶcXiVśsKuß#¾+ n‰„®Æ} ­ŗŽ īD˜T†ć[PhŚģZ½¼±Å,:{ĘZfĒŹzųŅD+£µ] K¼‰õ;HāƒŖAĪćßĢIÅ(–ݰĄp~÷Ö©IŽļ©É]i·÷šž°R1£ 8Ę:ƒųāŖ.ØŻĖl××/i Ž@x’…R˜s;Væ£_Łė6WV{¤Ż*Ÿ5[ī}>™ÆTų­ė֕¦Yé7²–HŌłj=‘õČĶY ¾ŸTµÓŚäŗfŽdħęõ?JÆń.ėV»²Óī­’Y.$TVŪøōóųž”ɱßxoXÓ5銯ˆćŌ7ķ’GčœÕĀkŽ%:7ˆ„Ö2Iq]Šz}~¼ž•؞'ń3ĘwŒśC[ZÅce5ʉ®UĪdĮÖ²5ox«O±·C±†ź_9eVc‚½9ż(5HŽšŌ7:’ MšŅīwŽåŽy'œšņ/Šŗn—māØį¹gŸTøB"łæ×*÷ ƒBŠo.tØōŲŅ[M’}õė·#ƒž{×¶é֖¶–q±%§VžĄbƒ>s•ÕęŗÕõ‡{“˜”*!ĻÕŠ$M³Klw¶Ü?  ³œ}^Ķc‘gž7tČ8<ęøļ\¬6pܬŹ7ä–œP&ŗׇ#ŪųRļJæŽĶ®&$ŗOZGŠ2|T»æŽŪSµ&976įžņÆÖüGåž”qlŸ¾fCĪZ³ŒuŠ*xfźkY%Žą¢_ ŠżkŠuĶgGšĪ—>³«ČńiäˆĖĻ9j„.„¹[DfxŠćĀ·šEž„ “wŽm§˜S\śŠń½ĘWeōĘId1Ŗ…‘q€MJmči—=[Hń]ž¤—Įy„[ŁGSĒZēõ?‡Wž(±Õn4 -­/dd‘ā(²mģŖQ6Œ+šņų”eŗšĘ ²i÷~–aftäś× ­ŽłZ¤šN¤.ģ௠g/ŗ—C¹½ÕmŚÖŚ.¼ąŸjē–ÅFĪþ(Óµ«“{+Ä^,˜ā™~ųŽõŌ hb(ĄsĘŅ„pZƍĢöQ^[ŚM=Ō½˜ć­i õ"Q±µ£]\j0¼ FōÉUčk|h𓳢Įmw#äŹĆ q’9­ %L[k;V["=ŌG¦ī„{×[7Łćū4°"+¹>æ^ŌŪ%Q±ęš­ž!¹ū83Ūęć=9®zśŁ/¬£YÕ×¶9?I×z?…õ h-m- dć ”ļė^‰§ ¹ē†žD‰­–,Ż€ō¬ÜĖ6–f`N=OĒx›Äŗ&®īt¦†h‘‚y±ēęĒSSĢĒs%ļͳīĻž@śUĖéX¹Ōn-ī¶ī Üsõ¬åTFŽ>ś Ė[Į=„ČHU‚ķ"½ ĆßÜ\…&gĀŖćo­\d'=.z垔f¶Ka<0%Ńl³Žé^=ńŅÖ[x‘ Œäp+XŹåFlņżC<0¬Ļ¾gł·cÆ=1]ióOx÷ىW…Ś6ūTIkzöג?ŁOŽŪĘ+Ķ`ŠZūXø*ŃÜX«šÄg'°4Čz«[Oį‹X“ŃŠ)f|(ńĄĻ\sPiś†—sŖŠģ”`bHŪX¹õ='T“ÓcņuŲtūm;QUŲ ©,ėŽĻjāb±øÕ#’W„ü³ĄĻųŅlˆÄĀÓoįšž«(¼ŒŪŚ”łŠŸ™‡| Ÿā_ĘķWÄ6:~§nŽĀĶŪ»JUĘ9ĒJDc”Äx+_Ō¼Qk|5]^k]OsMŚ%łAaOįRCć}lźW–ņĄŃŽDBĒļiaN 4ŻO”ŚŲ„‚Žb0ĢÜ ÷ļ]réi”éku©Ję ”Ć]½h¹Ķ(õ(ßjضImˬĄäs÷OØÆ=]®f¤ŽæĘĢ2H©ē3hä#ŌÆÄŃ鑉n4åBØå>UĮéķÖµ¼A#­šŽęßĶ$ Œ̾åk"㹆ÆīdS©!P¤]õ«%ʱø}™Њˆ\³ż°ŗžn/ćT¹9mŲŖ>•ĘkZķ®±åŚĢmÕ·;‚AķA±ēZ~ƒ“Ņ4r;ĘĔÜ2{W”[¦ĆdK(.SJל|ŚÜŠšļ„īa½“]ÕcÆ— „ī®sŠīļ#†ęÕŚo%£čA<ūPęa'©ĮėŚ=µżøYnÖŹ³°Ž€ö®3ڄvwOŲߝ„˜qõĢ·=!¼”ķ_|­é^}āGW–gC3l\d-Ä”iawpbŚąå‹/\גxŸĀ÷²\Ļ$3ę”ä€?՚ŻĘ:^š§ˆ~Óss*­ u`G;½ėźĶR“ėt·ĢNWĖfč}=i2dŽ£T+£ŚY5ĖžśDŽ€/#Æ_Źø»­EÆ”y.“dc’ ņEd÷ e›X\Hmš1œäÆćY>!¾–ĒˊÕ#R[9<ŒZ’į¹CVńŅię>[f2ųäv5ÅųĆlz¤WWr5ē?˜~lmöęƒH«©ā(mm,]dŽ6b”Óœ-|›s{uÆĖcl’¢™Ō+`ž­=žļOµ}:K¢2šNX¶:Wš%ÄLL±²œ{c½MŪc«šœByå–į ńœšŲÆ@–š(A`>S‚ģFwj‰K”7:}>ę0\M+BŹßwŠzÓ/uA5äi+ĖJI2ŗŻ±N23ŲՂćG‚ū"–^3—ĄÆ?Ō/¬f¾™Ū–źk¢,^ŌĖCo;ķÓ4s Ÿ-Gaī=iŚ–«c¦ä”-p ķāØq™™>Ŗ%]C šp¼“Åģjȏ-āć~GAģ*y“u4>ĮŖk:å¹ÓÖ@"ĞhLˆČ<ƒųWIń£[Ōµ VŹČÜĖuj‘i”“>ŸRV4TĻ9Ńt‹É§‚X¤BŁÄgpō]¶æ:iŃĘŅDõõ ĪÖŠņĖķA¼MvnĆ“Œćän¹÷ĶX¶Šµ[S y$Ć 99äõÅbÓøĪńoōæ ŁĀ|…’PūŠódZ³gń;Mócŗŗˆ¦Ņ7ĘŲPWӏēJĢĶĄµ.µÆxgµ1E®äæĘ¼÷V×#µŗyNķ‹ž}=V£JĘö”«cRYŚTŒ¦sĆŅ™­ź:ć„²”ŠČĢ\ŒUĮ‹Ÿ”›¦évŗĶż—œåTš§’ńłWUØévš{ۘf•ķĄÜT®0ŌŌ•ÖÅXaĢrµ¹2IŪž}É®.ęĀóU×-#“ƒ+¼,œć ėłŠ|ØqW=CY’ĆĀśjŻF†åā8č2ĒėŽŃž%__^’¦,BČæī€8Ų1éõ©öhŽ>¦’Š|YP,„̬+c; ņ‹/3]×ķĢ±Īžcmmæ{µeģKp²?RžŠ°Žīåž` š¼t¬é•Zu6ėŽ0Ć9Üku+˜9ö žP‘‘Ÿå\äÖrÄä“.ɞ0:Ó5¦Z“X¢rÜ/˒ׯvųńoPųGć= Å=ĢQĶožæZē”zKcƆĘÜŖMöo:[|²UĒ#ņÆäž mū"IąæŪ|lšF…{©ųc\˜“¢6Ūöy³Č?ˆż*/³1Góķą’_ųsÅbGH#¶Š?2HćåŁ‡rzvÅ}Ó„k±_ŲXź“8V¶ŅHäś×‡œSM©P‘×Å4÷’Ę‚1ĶČEé[ŗTPfćķNÜ€pŌ’žkē“Š“*ŻY†Õ`æ…V0±ą÷Ļ’®½ÆĆW sb¤³O”ńĮÆ£ÉźŚ\ÆcĻ­ŒŻitö’D›ĖŠUMūš~aéõ¬i„Ž –ŹŃDžnœzśØ3Ļ”NLšŻģv’Ś"³g’{~UĖkŅĻ}y œf€¾eŽ2xéŅ·‰„¢FŽtPYŌš5bqL@,j×c#¦TKhO’ŽssČō¬Č"–MEYLĶęavFy“‹4¹ Ö³jśHĒ;7$ŽŸS[šĒ…¤µ…®•™ųūŁū¦—(Iō9Óf»·K“}čIVRøĘ kéP r^\ü¾‹A‘ŻO)“ŽßÉ Ęģs:ŻŻżÉ–IįćåaŠö¤iĶŲĮæŌµM<i ³I"øS“BkŸŽ-`¤—’ŪÉm,œjł2z“Éa}§ŪĒyq HĒŠōśÖu޽zńMk$r2.Ņ^4œX‘‡ŗI.3³jFjä­¼*ģDk“×µEĶ“.XY޼3IoIŽb+WM°–y­ćdĖoŹy©; öKß HŚF9#óH>X'-Ÿz£‡L:wښE’AĮØ5Æ:ŒIV;f2OTa›±¬Åքvķm*ø}ēī(OP“±†Óŗ1{bš®y ×mi}VŽäģć¼jŽz’9kĮ)ŠyUĪņĄŖƒŹŃm7pI„<7Q»±÷­¢ś’g3ce ź¾Xøņ<²OĖĪ}ė*ūK&ļ.óO6HP:UŸ£Ł”Šž uK&!$€øē°ükĢ.É¢IXÜiI9vv˜żč»ĘsėZPiš@ńĪ”)8¤cŌču ø#±‚8cpwg󭱏Żqø)%Ŗ“)· K'ię•1Šž3\PńEĢņ²*[|ĻĮcŠgµCrīuģ󵏚­ærœ{ךG©\Ćqqks¼ÄyéZ™JW6mLC`õŅhYOØĘnŠyHĮ>¾¢‚»Ä±’hŪĘö³¼p”' ˜ ó ĢlåB†ŪŠŠ"ü¾nŲ'cēq€ĒµZÓ,ŅĶZéćąa_ę¦#Ŗ\FMĆo#9¬› ¹u;Ļ"åäˆg·ńUčĶgŽš—Ė“£ć ©nt;i\E1oތ®N(G™ų’Ķt[ØO˜Ł cYjwrŚ•fqłŽö Ś1±»įKmfąO=¤& >,™8$śŠŁńRŖiń\!‡ĪŻŽ¹?R;RŲŽ+¹ĶiŹ{i&˜$+÷œŒļZZÖ¢„É„ʐx3†JŗōÓŽ)GIĀŌsSé‰ Ō³ŻN$‘š@cšg4¢ĖŃō @Ky ķNŪjž“lé/ HOr:P%"Üŗ|Z{$$ŹĒ噬ūkšå#e!NG„#h>Ē¢-ŲŅ4iÜH7…įO%…CįĒ|±}Ŗ/$HG“4öMźwמ"±•¢)4QCŻW’xßU2źV-ey/’¤’‹ĄlśÖŖF3¦Óŗ64;Tįž äćo½mĶ O¦ÉˆĘsޟ1Š<†ėWŌ ¼’|ĮĻ͚MfĘā÷A²žĀf¹e ~6Ž:~­B5|3*ĆnÓ0w(6ķ<ŠõmxµĖkk‘Ģ „ņiŻlZęµŃßßY=¤7‘ Vćęé\Åģęņ±‚µ<ķQŅŁ®¢‘d1¦p1ßė[¶ö”UgVŚ98ėIGKŌ: ŪKIä $Ą†ČĶy‡Šn®”Õē‹~š[ ź3PZfœzG—n'HB«|Å{“Wķ¤†Öu$,NG¬ ³ĶõĖIuMbC™7™Ųžµ¹¢x^ŪN[‰ļŅ8¤Ą'=Z±’ŪūŲ,£8]×8ėKß=󒤯Ź=…3fĪŽ÷Ē×0Ż£kyĮĮ8*łrĻė×0ŻLm(r§Ó„!ņw8MĆ_k?ŚA·‰œ™@õ½ā˱ŗV‚kUPQ³’ōŲĆÓ&?k[˜”ņ1…®kŠć’IvLņ4eÜõ –õ6’į#-tČD¶óœ{לO„śäq³¢JģJĘźĪ Ņ¹g\Š }<³³ ŽõåRŒ™ŒĶŌb³5±%Ły# ÜŲkŅ<-ØĆ.–RC[@0“Įt:HtŲ/'‚%TÜēäĄūõfćH“]E,QWķJŪŽ6Q)(źui4«ę¶³‚[O“Å]Šy8īkŽŸL•¤Ü؞Xč ÅLu&Rčtš~ˆ¶IcWf`ō4Ė›–ÓnZŚ2RPyŻ®ˆnrĪ]Ÿ Žóķ0HHŻHÜÜģ>µBŌXĒf-ŚAö˜Ę8ž*ӔĶ3ņķ«B’0'֌SŻ_Zģ‘K2pŠ98¬œK‰µ„jŚīZĘå,Œ¤/Ó5³.ŖÓ»“ą4dŒt>µ&ǟIsok;yŁ_›æSRÉ¢ztŌ ŽGH£?(éŸ\~X;Ė›+K—vU‘Gī†9µqŗµĒˆn€ŗšāćkY€čj•!óŲm„åćŹ^mŅ[ѬR£o{»žĶD”cE#5ķ¦ŠEHŽŠĒ«OÖęŃć»· —6ķw®yĒæÖ±(āķ/ ÕōęV׀8^kbxU—åĖ…ĄĄäšŚ2;h÷Ö“H󟱾 +~ʽÄZ”éie·o’¤Ž{śÕpsGrņ³A$’ĘƒœóÅałÖīŽŒ£4€eĘ+j4ĪėRmFå!“ǟ `‚WŒŸnõn×W›JmÆć`†=°(Œ S<ĖāöÓĄ«orŽYn!ˆ'=²+Š“±™ šį–I¶¦2ĢI“Q±„Ķ Ž[ö˜4-’·ÜU‹Ūi‹Äź į@ēØĘ[mm4³m›ƒ÷~¢ŗ»M[uŖLNü±ā®2²9Św=ĮņŲźÉtšN­*üŒt?Jæ¬Muį« »×tø›a(«Üö —x^”Øźz“×77”|ęąēҹ9-M¾‚āą4ˆA)åsRāl¤vś|ö7–`Ŗ²ī#ø5$°4W"8QĀ0 t«ŒĢձҮ€MpŹ›»Œõµč©k¦Ā/cK‡]›÷½‡Ņ›„¤Ī+ÅŽo[É ± lŠāļtw‚̲F#bŻG„CcHšŚŁ^iĄŚ{Ö'Ū¤iȆg‹'Œw¬Ō„g\e§s+Œ·ļųÖ ƒ.ŃäIē'4Ņø‹¢™Õ‚ÅlhĖx·źö2KĢ[]NÓ“ŅŸ Éāj6žŌ“Y”G%ŠY@Ęō®#ĄŠĆ…ø†có?½4ˆßCvśÉēÓ$–+wIIłøŌf¹›„µ’ŹĀŚ×LŽĶįÜf“q&V'æ„Rv,“¶æj†ŽöŁOš¤Ž€Šė,®õmQ'Ó!hå»į™Tdć č¼+”¤·Ø5+c€ŁhÉĘą+€ń>^-øŽŽ!knŅ‚±ÆšŒ’ś©‘§uF\ä gœz×c¢ų~ĒL¾G mnåFXÓQEluSĮö'¹‘w«ķR}y­xš-.ĘćĆQ?Ś­'ƒŹuS÷sĻ>ł«ä¤xųÕ®4‹ma"ćłly¬/ųI&¶²¹š~bŒ‚6ņpzēõ¤āMŪŠč¤Ōōß±Ś\Yź6÷Člq“śW9¬ėók`&óĆß·<õéDcrŌN®×C‡]ƒL‰f•5%`«€ĒŠŌŚ ƒÅŖÉ ČBŃĶ·“ÓŖFgs{ šĮpöźŸjTnP 7į^9$—Zķ¹°æ‚āÜ+JRˆXžÓĄś¦šš)ø&ŁÉ8Ś>µę^"Žxµ?%.@¾9*{Vn&‰#–·ųmuā‹Įq©\5¶‹j’hŚAąŽr?Ā»xõ kŗö£åĄęŪGOiŗ­üv7 m—ĘÜcĪ:Bē14ĶjļPŌž{W† 'a9Üw3głT’ˆµżŠ?:5!Ÿi$°ō½’9Ż7āw5Ü3¬ŃŻ©UX€Į }kزń¾Ė¦šģīš,¬Æ(Ūéßõ4m,s0;ź3]¤Ä[y„ˆk‹ń¶µyi 5¼Ę[büøÉö \Ę6ŸmogcˆI>Üģ ē`ķÅzŽ—&—®Ė÷w©ö“;ˆf!œt \ę‹tƒ&±O{1°g(™xļŽ¶/ü)£ZCq~­ŗŽ4RŖßŒפå`sģSÓµ˜Æ!ŸO·T·XäÉĄŁõ¬KvŠŽ;ˆY·Źd,¬Ē’9ąV72lužÆk§™a›ĢoMŁ®·Ę±\xƒĆ{,ś{ęFEåU€źqųVČ,|Ń„x—ZÓQķ`½›É`Fķ„ŖÆ’Ŗ½FūĮś…ž“¶³Eus4k6IłX7=:f±…·=+į„VŹĪī’Qŗ·{ž© ˜©=® }!?‰õ%ščÓ¼§—ģźLhśµ#®(--xóĆ:Ę«āŻ?UÓŽŽbŻ+p\„{õ­-KFѵ™ģÕķķ’ł2\—#’ÆA|ģīü7ąwžiõ!mīmŽéŃ=æ:ÕÕüĆGŌõÄĘ%żÜ@¬céA\äśĮŸŽųvĒŚ…•¢j3Ū° ¼)V¦;šņ‰’īóEÓnŚį"¶O57 øtĒŠŠčń¹>Ļ6±¦=¼ksmĄyK±(ōõÆ¢5+%Ńl”’ÖĪ(d(5Čm¼qš ö‡šŻ¶»y„ź+,~d·ŹT}ļ”=:×MįXo4’.E·œ‚ŪĻŻ‚M˜|GØŚß_FnQ!øYEąć9#ß„`źó·³O \-f#!3“õĮ Od±Ņ#’G”2^•@Łn8ōŖž?šd©¢M5„¼6·—Qó£L4LržF‚yžĒ‘xkG½ŃR×G&÷Qß0]ÅrAcŌūW x³Āŗ}ž“>—|@UĢVźŲģ?*N)īh„cĒ4=?ĀVböņI‚-ŗ9AžŒ°ķ¾*x^ŅĘyŠ<ćqY$'łT{$ZŲŅžÓ‚óĆ?ŚzT_iŠGłœO°®oQŃ.už+Ą-b ĮŪŌ’œSP"$^ųwi«ų¾ >éÜin]22$ēzżkß'šjx&Ż­44F‘Øvņł,Ę­v,ņŻsĄkœšŽ­ęOlÄIŒrHõ5³į½;MVÖŁl $·98ą­3‘~ĆÅzl>!L±f™‚ob>]€Wt«ż±ÅÄH—‘Čēµgiš»Ä&½’ ]ĶĮ{Y>u@AM½ĮµoUeÕ„—KŁ$,ē:‘éśPQĮjšZj1U óĄ÷Oҹ;ė”»†ņ售ŲĪz5g7ŠÖ24¼'e-ĢÖŁ•ēøČ,€cwµ}I¤x»ĄörųjźęÖ-y—"ƒ…=¹9ķY+”cųĻJ‚ēĆz„ŃŒ7—³aGµq>š“'…n<åq|Ø\+žy9ć·zŚžĄyxĘž2Ōtč­ę•ƒ^ %,0¶šwązWŠö¾o Bæi¹Iā'j²Ź?Æfœäš½ŗC¶é,lÕäPƒją„[>µĒßėśg‡ ¹øŌļ–6]”xÜ98üØ+üŅĆ:]]@lä‚hˆ]č9Õ涚%ÅĪ Āęi$ڽ‚Ÿ­”u1ƒkĶoÆ|Gw¦Ć{w4Zgf9'Kƒ!Ņ-5Żz1¢ZŽja2/%¾SŌ ōÆ­ü9ysįĶ0)"ܬX›Ž?•C§ŲĀ”ŠIń{BŃ5 ŌLuK¹ĻĄŹ.*ĒņÆ/ų“ń»ÄŽ1Õ/4żÖŅĶ^HįŒÆ§OėK‘™¤zW…¼'¬éši©„æŚå· Ż}qéÓ„y½ö‘­Gw<ÖÆä&āćżg Ø †„āi嶟Jæ_“9!sz†µKeŅžŽ(R=łQŸį憺 ŠĀ=PųÄFöūŌN_#åų3_P6‡jśqĀ$wbI9į³ŲRQ+ÕģōŻļķęŒ©~l;e•†: ±į ūe»K īBÜķ,Ŗ&š] å;KMø‡ž& ®Ø’w+×é^m¬éšƒ£–b’7 [ØŲ¤®s‘č+¼¾Ņ”²“•­Š–)÷z.”įŁt4–źīŽUX°ŽÄ|”½’ZeŖfMę‘ow%ƈDgFćÆ8ÄŲųr Å-Ś\—g“~ n'Ü~TX‹ĘÖ„=ŗÜŒĻrīØ]Ż\vż+‚Ņ5MRÖé…Ņļl– «Ž;Tņ"yčW¾.ÕukhŚźį¼µUUū”F1ZŗŠīŚĀāpś\rļlŗųõśT8z> ±:¤·Q‚¹Éłŗ‘Šņ{6 ÉÖŚdņķ@8#éZE™>©įßģ›X§ÓĪC)9aČJÅšŠ¤÷÷ÓŽHĻ>pŁœz~tĶ/tz¬ŗĶ­„µXŽK¦a°†Ą_j±ØxŪS½ŗŅ¬ÆGhĖōäsż(‡5ā?ˆZŽ•ØŖÅm?Żņ‚ņžĆ޽›Ćž"“TŅZE¶›K¼žRĢ”˜ŌB*y„IRx}t¦Rn“k|Ł'²y&²o¼5oĘ”ā8DņCes‘…gYÉX\¶0<ā[-a®āŠ9 “nx8’ō{mA“›m­ ·y§ © ó Ļ$V<Ś•4)ė÷šÅ`­p7ĢŖFĆß­y$ }s*†S±‰”ūÕ¢G–Åķb³yIٲC!wzAŅ¢ŃmšĘąČŖą ņ÷ł­cątž!ńÄI¤>—¦:É#3]‡×ڼtxžżd‚ļfHcc“»%½3Uȉä(xÄśµč0Ū‡{d;ž7oZƒĆ‹ØßÅöb~民ƒĪj%ģĪĻK×udŗūÕ1‚UŽ>zé.lž× øf(ŖF橏­.V'œ×Ü! “ąœv2zŠ,€]D¬tė+øhĄŻ·®{fµ$šżÕĢv×W±?—3L ļ>Ā…¦<§Ę±Ųi—–Ö—i‘÷Ś łG?tę¶ü £ė>,štµ ¼±#ƒrēPtĀ4üR×z÷Ģå LķøŠā±ķ“ "śį7ŗŹŖ1»ń %Ė<+"„Sņmź½JVÖźā1,q†Ūµp8sJē4—RśéöĢDDS+’ĄšĘµ-b[Y–Āöō#i8܃¢Ņ#’öę8’7–lĆF©šz ׄ›Ø"æ†ŅWHä9<õ¤āf·<_ƚāKŖ\Ahß)'8éųWmhn·yo#MÓ,zS&z~Œ¶öā.žg €6ÓüŖ–½cnÓ$ÖņĢäœ>” ēG¦]ZŪ遄`“3an˜ėÅT¾Öf $ßŗ?y³×ҳµ˜X·„k0éŅXZć'*QøS]F„ŖĶ©ĆbŹkX÷d*üŪ®hē'SnĆĆŃiŅ\ÜBŠ3żÕa“·¹®—þ·ŠŁętµūb–*ŻŪŠP¤ocɼ}9°ÓŽźłŅy§ø1˜wŻŽĒęZœs\ĘĒxRĄ?†Æ™)?†…Ź[®żįĘyĄŖ“ųuō„¶¹“‘Ždnv¶Ņ1ŽŽd)Jē苯Ę-³”eĀc>µ‘4‘Ŗ3F‡vāž (ĘĒó&¶¹ŠLFαķē“Wf‹äĀ3<Ģp Ž•Fōäs—POhL’Ć9‰ø$§Ņ­hŗ¢ĘHuGB~_—‘ėM#Ѥś¼’šJæŚRK˜O€üKscńLšC¹vÉcX}+śŖų-āė‹Ūi­īß|öįRlœ™Pō#ük£¦ĒÓŃČŃąØćØćØÆ‰ælOŁÓLųżš“Ē_5}=Æ¢øˆź:NĒ*Ėtœģ_Ojē”{ā?“/ĀMkąļŽ5Ļk–±ZŽG$Œ†1ņ"u»ę»’‚?ō½gA·Š/ҵÆ/iŠSĖp6žßJó±ųg(s.†±ZžĒ~f†īё'·Ė ø'«¢Š{IœÜŻ™—QĄXŹō#=ėäŖi+¢Ż‹ŃŽ=ėÉmo—Icėļ]ĒĆżbFŌFŠŹd‘²A叮?^Ž\³V9*£Ų.¬Ś»ćóŻĘ+ʉ¤y<ƒ”#­}­9\ņ¦µŠÖŸZ¹ŠŌĀ…ˆ?¬{˜®$bč…’ZėĻ)M,-ŗÜ§9R=j-Œėµ˜FøĻ¹­ŌŒŅ:e³{Ėfܧ8Ī0+­Šä°ŒŪĆwlæ)8ģ;՚Åhhėś~g«Įcå S½pø2/lž•kVŌ’“4KČóDģ„‚’]•Œū#„ŽŹ÷A4KĀ®O§Ņø’ <O4²]n‰æ‰Ēæj™DŽSŃ"ŸK™XÅr³(įOf5ĢÜÅkj³E,„»¶G=*9¤N‡D„KJįe‰IĘF:ל[Ź·­œ1œ(ę›m ¤qäQŻ¢C ¹ÜęP{W{£\ŒkĢar|ӓŠÉ™~›?ŚŚĢ›z|Ć„t÷Ś$mnÖńĒŗeąĶõ¬¬ßŅ“Æ"ÕBŗĻ(3šƒS‰,®Uķ,¤a‰ž’fšW-KC šö¹uöiįŗ†k†Eڧ?tśÖµĖ°s2“Q3gŸZÕ@™T2¼H­6Ųmį‹nÜNI5Ģ\hR½§œŒEĀņ:ÕņŲϜƱ³»¾2[„>p'·Zė­tK†ŒØįIĘiŻČ$Ń.]‘|ż§/“Āā¹V FB+–cŌSF2¦K¦h“¤~{°Ž}tvZ}¢·pŒyæÖ¶øDó’jMįŠŽIā„ ōćŽØŪ[¤ó”sęCźCŸBγE¶Žy+ •Ī>čōŖŚĘ—Øi’¼Ta$‡5O3ęVŽŃļ” jē s³¢±­,b[ø]œ²Œ}ŃŅ®ĀjūŻdŚd– uG+†ć‘ļ^qā? c^‡ģĻ>ž@a”Į9ģh³f”„ŻĒvr‰Į :Öń’®_‘.>é8Ę( §ŖųžB‹mXš0px¬Ķ*ģŹ„œcóŒ Š6®¬­~Ńį‚#>Įóc&’ļUi¬ä\@ĶLbm5ųóbrX\v­­9bĻ ,äćÜUŃkšÕĀŚŹīql ĒłV½ÆˆaÕ,ķ—Ėas{KÜŸĖ­Įjq"źĆē†1€O§„T–M:ŌĆl#ŁÆBh±ŃcŅtÉVÖĄOnØłv׊ć5k¹Żä‘#pHҚ‰\ćü;¢µÄ2ÄIßÓµ'ƒc‚óę22£(å#˜óĶI>Ķ9…7}}*[%°ł]Œ‡±4…cŅlb76šZ:+;ė«’„wK²š;«h^l+ĪOƵ4ģ&•¬szŽ• ÕóoŚfĢ–ö™„ ‘!±ć˜į£±©hņŚÆ–˵×+·šä¢±{y [=M`ĪȽ ŪŪ»˜„y<Ķ«æZ«†īrłó‚Øł³Ąö š‡sįĶIÖX-ÉHI9ĻQVüSØĻ¬‹øēą~µ“v8Üu8†±3lžeg­Ķ9RHī! cLv¦(«#·Ót­=ō·UDiöv2}Ås¶7÷:.Ų£Yē~ӞŲ4~‡°ŲkĶØXtŪ‰=ĶfjZ݌«%ŖN‹*`qÜśS¹<÷T¹¾’7hŁYC (=*ՎŖŃİݰYöš*y„©’6®č øł‰Ś„zšāu¹…ĐÜN ¼@Ŗ08#ėėLÖ'Aįß5å͵•Ō±¤Cä.W“ÅexĘ ¼ČoVIQĀŖ±tę Ń. Ē āåWæZźbÖ“«‰L½ø‰&Č$ŽI¬žą‘•ā K6F³3ĀæsŌפéžuąXÖGU=»R\cŌéĻ„õ;Ė„d]ˆl Æ7‡īd”A²=ŁŪÅ>S[ńi×ŗuéyüÖT;Jg‚*½äéqrU“ĖP>L+CLšąĘJ=qÖŗ(“8lōłå‘(9QŽ™ŖēdJ7)B#·Ł>?LžÕčš¶®L!}¼”Ŗ•C7 Ø2;˜£>XcƒŅ·¬“Øäµx7DÓʆMĢŽƒ= “É8ļ߯ėž/]0Ū\Al®TåN?¦kčÆZk^±š£čÆe=Ė’¤W?»ž¹ śŌMląāŌ..īÜfo˜““Š¢%³Ń•#‚ō”w›Ė%v÷l÷ü3\x‚ņ9®n® 0«ž„ÕĘ}ÅģŹ  €]Wvy÷5źū-¤–—Ÿf]črs›óŖr%Ež«āÆx^óĆÖvZtsGv“‚EĪ;Ī:ׄ]ŻC“ēŻN՗™©ÄC=®”Ŗ'šĶ°· W§iŅ1± 6pėšqZˆÆ6š¦&ø˜oBŪŲ¶0+’^Ņ䵹ҭBŹFlgr‘—#14ß³ĘY]BõˆėVQĶ`¤! õ<Ār7‚+Msµ ·Ćłūš©ÆL›!ŁXa¶ŗ}ėb?O£Ū%Źź0…fB¢’8ĻćU“«öƒ\µ$'ŲņKē×·“_C)EīzēöŻŖĘé”*{w®/VžŠ–łgÉ;Ęz ™K r3§ŅDé„āńBĢäēž‚¹™õ—¾¶ƒĖł" ČĶ8K”-·įW’öńåžŻ8•źk£ń†‘b¶-x‚ ؾ£Ÿ„h„xTé÷HĖtńÄO;X~¢™wqŸj|Øįžß£ķ,*å§b¶‰t—m HÄ1«tĻ&¶u’Œ‚QF¹mģó5Ń.®µćI6Xē½{„÷ĀbßQßiu¶ ?”æĄq’sż=Ø-S8ˆģīü'¬@š_™eĢēxō>æ*—Å>'ß®į7“Š–W/C2* BĮ~•mcŅu;˜­<Ų£“=XōśÓJÄTE«] -Äk…kMŻ}=źļŚm ¾M>wh<¦÷­īrÉ]ćAm šYžŽ[ā¹EÆČƶŌļŖŅ\Ź€…Īsœœż*%.ÅĀē²é÷~v—ę÷<×=Ø\]ʲۻG ßĘ8ŪY?"Ī"źŹęöźHńµĪӞkWŠļ“É! $.į¶į};Ö] ®d9v;Ē+?ÉiGĶN2°M"сĆ!Ę0y㨮ÓD)¤±’HČõ­H±ė7:¦„¤:źŁ.¶Œ) d~žõ‰įÆČ'k±qå@å™?/Ō Ēg¬Ł[ĮadŹŁĪ{šņ½JŽŚO“Śy›‚Ēā(ų„-¢ŽN®¬w6ÓŽ—^Ń“Ż?H¹½š5‹aČ'ø3Āŗ•ü)`mŲ\}ń&HĀö½šĒ¤XŁ“n Ąs@XĄń&”s«é֖öÓ41•'œ×Ÿx[EÕ4æ¶°ŚĆKn™"_ā=Įōö mƒS²c3Ķ$EöžŽ+“ƒĖ3M)TEÉ_cWՒåŲę|IØ^Éē„žļ|WĄŸōf×īī/ķĢqL[É“)`:vꔌł™į];UŠH4’:&·Ų<’Čö5õ憒}& W¼2FČ£;Ē\Ԉغń=­ÅŌNŅīqÅsž'iÆŻ iby'ŌĖIÜ”„ŲŽN ŲõŖ–‘=½Ū›° ”źhfz‡ŖŚ§ž¬…ÜŒ/ ™¬ćø“¬Ź›s½NöŠ×śīŸm¦›AsČ­ƒĶVó­ēФ6ń¶“˜öq•’8©V£|%k™ x$Yb]ē!½•uzÕŚ%•͹+åŹ„pp3ļM+›/k:5Ś‚¶ÕīüAgo„ĻrļoķO›īŠÄÖ4„šü­“S]Ģ ĘŻ³ĻӜ֬} #ŗų~ÓC`·šįŽĪE`Gń{UmWYŃīo58{…fC¹’õR²} {%ŗžr‚AŽŻI­½RūE±Ö—A›U·KØ Iv7WČķśŌ\j›LčōūĶ:+OYbŽi ĢŲ ļ_5ų³ÄXx»U¶“y5"³£ō$wĻLtŖÅ£[Ě ŗ†¦j–J‰s'ĖÓ"ń:茒(rc.ĢÉ'§Jņ_hZ؛i}®ū‰œƒ“P&ŽKĆz¶”u{­i6ŒcH™b§9’õŠõĻx:ė˘jWŽ{/ČďŗhۘśG‚t£ā™Åø·7Ž’¼ >ó•äŸtč(Óļ’ĢĮ§]9_>6ʃ×Plµ.xOUÕ.u (ŌCrAēyž•ėž'ˆė¶‹kŖ-v&>” ¤yż·‡RŽÜ*Īdœ‚ø#čEQŌ<=.‹wwl©q·xŚr@#± Nü?ā˟ų“DšĘ¦ęīÉÓČ…Ū¢d÷#ł×³ų£FŠIÕtČķŠ%”Mø¬Ł°8ϿҦK 8£ę+9Ž ‹‰‹ÄćhSĒŗøtĶSP¶Ž]2${°2»†vśœTCrTlr~.šżÕŸŪ„»ņgW Ćų³ōÆSųcgy®ų>X/&ø³“’Mē{ƒ’ź­JVG‘k>µš’Œ5mOŽS¤)<܃ž{X»täłQÄp¢ķQŲ t ¶Ģkhų•įū¹ćx4ŌV_,ņ£N=Ę¾Ø‘Ö}6öī QqĖ-ó?ųš7Ņ™µ™äø„kŽŅ5›¹µ_5#V¶$ŁéĒņ¤åbyĻwóuÉąÓm’ż ƒ‡wFĪP’ uŗ–±`¶’ifwyøŚ3Ōb§œ«œķ½±žĻdo&bĢ‹—=EqŚ…Ž£Ŗß'3Ļ3Ž]ÉłqĄ4ć!}–=<»I4QĖÜwæJ­owo«»īŲH¤(LrG·µĘ'i£čz?ŲV6»żńłˆS…`“ZŗōZvœķkd"Q&øśāš’{s£‹8õ¹uY­”扣hc·“ī£Ćß”ü+Ņ4Ɔ×Zœ¶ź×v‚ŚYŽ0ŃÆqŸJ9‘J]ĶmRēMŠüJŗL2GåFB,Ųą}3Võ_Ķwv÷÷ŪtørŖ…F}HėEČ=7Į>𮃄ŽxÕ¬¤Õ5=øl0 ƒ„uśWĖ_õoųIõŪ§Šä6Ó1`Ń›¾i•Ģxα¢]hvE•qp’†ó‚®qß5[OšN‹Øč–ę-9#G`ē'–śŠKZÜõ+o ŲŚx}®..>ĒZ5 0O¦k˜¾ń>€bšÅķ7;€«ķJB:Ÿ†:mÉń-§ˆ£dķ„ «gĢs‘é^ŻćķTiCfZšõ—åRć9ē?żT$Z“<»Äq›kī·ģŪ+¹Cé_/jŗ–§¬ź'IŁ¬bKå¦AlwcõžTʌN«LÓᓘ]mĶÉ8bNH•ķ•Y6|‹·Ö†' Ż¶³u©Ķi>š‘i1€Žtm¹99ōā¼_QńU„šµßŁāŁn£Ć®8¬“ģJĆxłļ¼ĖQ—qcŠé^Mus+6æŹx椸ĘĒ”ųvy4ČVåš/“²a2܏~;Óm|!©`x®źł•FldƒŌāŖ1(öcć‹é¬ģ“ČćG¹ÆŚP>@SŽæLWAćkص[,mŽ>ä${CccšÅZ‰‰ź~ —J“šėD֍m|š`æüöóųWüEń՝­Öį.Ņūķ~eģ»r#9ź{b—6¤ėŌŽń/޼7.•¦čösErŃķ”¶X1·„x¶æeįļNV[‘s¼h損øõ¤§Ü|żĶrÉt=K¶ŃķšlC&ā µĢh—·śdń“‘1]ÅŹ‘ŠśUs£XT:{Ė…Ö-˜Ė‰ä¦1^yÆhŠ\[µ«.å_¹ŌÕ\·3kąĘ‘5ī»öxŲF䎤 ā½sā~ŃNŃ" HĮĒƒ #åÆģŸģ‰A–ņ!lc¶y8ÆBš^› ī£ėé“`aѤ\~"‡ŸGźZ•ī›§[£óēu ±Óīēśs\%ęÆme ŠÖķ‚Ü`ķU8ĆV2E“|ļćKŪ{Ūį%„£””ž£č?Zč¼=¢%¾›ļ‘)$WłŌŲĪQÓC×tM2+H-ī˜&éSīū£µvS^GgjÆ$ģ%ŖäńHČń_ZĖŖ*1pĶ–bĄä×są„ķĶö® ²$vįHė×īŸĪ7”Śų—ÄĘ@7+ٜ+rœō?•sĀÖK‹;—žqaq’*棦očŸįՕÅ֛ˆRŌ™VżÆ½ų§āojŗ•®£¶eqr×2Eąz!ϦkD»›BFž”„ŻjP[AnÄ[ä#ذ¬o|@}ż,nü;±E”’c)!ĒSļļLӝē†.eÖmKj3‘åćVĄ žŁ­Fu³t†TŠPK™Éė,·‘^[éĶ%¬¬ G‘ĄnÕéŽ šeÜzM•Ģ.ķ8 įĒ ĒłŠA£¦ųsUIõøÆÜ.–Ŗv^#޹+oéŅĪ’AsE›Įې}ņhÕŻéĖØĄ­²Ć¹W,8> W ŖiŃh©<¢1}ļzĻb—„R-^čMx1~é<ūćҽi<%”Ēwo,‰,źæ6_†ĆŅ„ĶŪ[BüŽŃ.®|õDi·@Ų,‚ŗ©ōK/éj.72+,pZ\åū[ģx%NJ®<]¦MŚiŃ„iJ‚²1p¢Ŗx›DŃtt·Õg¹æ•JMmÉõØqeÉ_cLJˆ­l§Xō™€€ŹŽ1é_Bų.ößR”Ię¤÷*–]܌ā³å!Üģ5’ ^kY”c"ļ`Ä ×–YŪĻm}=“°˜Ö"?Ž5EĘöŌģ4ĖŻBėX¶Ņ,ģį½iGĶ•É@{Ž=Ŗ’ŠtéÖ(ć‚X£¼``1żĢŽkh= ßOöfkY"ēnĮ×ėXš‹ßŽ=Ēś?ŚvBøČ5“Lż A¹“½ņ„Š4Wž~mŁōō«zŽ¶yn!9ŗ`pĄÕžY'ƒnnīićϧ=ė_LÓtķ>;ˆ¤¶•®?6F¦iʉ,”†k$[¼•Ź“ŒsW®­\»@`y4‰q1.4k‰bE‰w?'čk›Ō4›ė7!Ō™‡'Žg)“Æ1n‘Ł•Sū­Õ{ž©ÅŽŃµķ­_Ėv²•rŁZ0H‘¶žzō52—C3zĆRĢ[%ę@qÉź+ELh²”Ųńķō„‹ „Žžič= 29–فM¬IÉj°4Ż“P-»ŲńÓ§½e;,”„õŹ‘×q¦TLõ)£½ w‘r~OįŚ ĆU·YcĮz ©”‹LHćY—?Ž«÷ŚŽŸ~–ö‰ Dą,9­ćt3ScōÉb“øcéŸjķŒqźZd’efć8õŸsĘ[Ćģ×’^?™)|”ŪĒĻOŠ_:(^x¬d‹ę;Śń®!ZTBŁÜO½ZFžKY>UUU »éQbe#޳¼e¾/–0łŲ{zÖ~»nf‚f¶v™å@ą{Ó",įŚēUŠx|œ4`޼cµŸuxŽńĘŁzę²å:Ōō9gMó,œ»,n>ö:ž5Ė…–Čf4b˜é޾õJr: ĀךŠ\’.r½z·‰t™žĘ.’8üœ łĒұ‰å±\Ą®b•š3“Ч„ił¶óÄ$¶Õ=šØ,{„ĘtךkĄ¹`øSÓŽ³&Óą»ĢB’‡;³EÅb[kČ<÷ƒē… ڹą~„xM›X»{”ŗšf#™ ŚŲćo?ē5œ¤kČp6nš_j3O3Ļ?Ȅ«Ēó®ĘęŅ+8jH›#ŪĘ$ć½(«™³ĀÓj(¾Id_7jēśS>"č)¤=µŲ¹‡dŹB‡;0O_sZ“Ģyf‘=ÜZŒm¹Ü§9„vŠÖsóō8”Ʊ“Ø`ż—}‰óCŖć##šŸJ¹“NWfÄPqŽŌ½™Ÿ?@]3ß“R)Eνk„¾Ōu {9cÓ¤Q,ƒišG֋ŁXwąłµ-+ÅŚC•ˆŪL;ąü¤c“ķÖ½ć/Œz“ „yµ6”Ē×ĮŚŲ9Šuük3DŃēņ^ŁĒ³0øŚg&’ŅKŅc²H\EÉlu™Mę„a¤v“(ÜŚäōjņŸ[]7Š'ڲŒØéT®5+š:.‹uwa#łI Ŗ…Ė1Ęqé\-Ō·WwÕdeXĻVć4å{Ü.u:U’\A#¹&4ē­“čUŌäćÖ NG£čśTi’H”Y†f±5-5ē–*cŽj”Hr+hzWŁ IyŪųŽrkŻ<-¤heyÆÕ .YųĘī:V­’1ńƈu½?R±–ҐĄØ+ĒæÓƒ^]Øx›PŗÕ ’ķűRHź~“8ÜÖ:SźbGH\̇9ߞ•ŲékČŖ óqœzZĪQ°ŌƱŚéVö¬]•vćšåĮ45Žā# l1±’YРаŻYxü”’ŲčW5£©Én·ŃÜ@ BÆ‚}h(Ćŗø°@f†Aæ©ŪÅEż­Ģ.»’tÜa»ūUE »„寛ęKg <ˆNvö¹įŪ/;D(Ąg‘ÖµQFN¦§} ˜¤ŗ¹†5`1’×­?ių±bLr:©%@ĘkS¹ęėlģ—7zŠÖóPŪ¼‘ŗ 'ІW“VŠŚY$Ttė—Ö~Ó:G%¼ ¶ŽĆÖ¶™Õųc° kE¢,`'ØĶz%„:d–n. g¹źĘ?0±Ÿ‹äĘRčŽ3ódōÅgŪü×">M¶ķŖŲ¬d ‹š·‡ Ū嵗÷ˆ§œc"³lōń{fŠ!oµ“Œ}įX–s×Zdör²Ź˜ĮéP¼ åĖ_)<ⓃBk””"\(ƒŹs;IÆUK$†ŚŹķü¢Žø'ŌŽ“Lh[˜¼Ų&K6 /_˜dW&čś}Õ¤¬©1Č-“ĒҦ.ÄN'e?Š`]ÄV*±3 ¤ējå­õOQ·6’M4¶ńž¶rqWf^¹Ń¾Õ„XźWVom0܆O>Շ©Aq%‘ŽĀ%ēć õ­ć”šž„Öļ4žyÜąmu5ŠIH¤²¹ŒÄ¶ā>ķSŽ–@aYC½čåĪOŅ»óć-OO±ø“‚S+· žÜtĻćX›F]>]>ćU–Ig“Ģlåš9äō®§Nš%»Ę³Ä©h2ŪOJ,YjėĀpAhÆ!VÜĒcŸį•ē÷šBi,ŒŖ…Y’„sւ$‹×zæŲ…ø·cåžX7jęļõ˜žÖ“FFó’wŸJ FOsu;‰|Ę2Ćg ö¬cń](2lĮŻ×ė@4^!—Ncó ©ĒlÕĖYÖžE!ų±Š4ŪŅ×A'͌éTüBŅܤrŖ3•'{śÖrÓ@8˜•Ē˜$pA$šXbD”;Ł?•fW+6„·KĘ ĢF0E]µŅµk)Œ{”ĒE9÷«‹Ō„vŽƒW—V’’T·tČĻƒ÷‡« VķŽæ“ŲĀĶ£`mļ[#6­”«sx5X"²EÜ~ópr+‡Ō-ök¶…$A÷r{cŠńMBĪłå™#ŹLYŌĘEz\rĒŖŲŪßý÷[śPØ- —ķ« ägŸ­h.‡gux&·ŒĘŒdē¤UŽ‹ā?ö7…“"ėJøY®åsąņ{ąu­^oéVvWÕ6;ää’:Ł{Ą³i±ßÜhĪĘ=R$ēxĘGlĆźzś4–YG?*y håZŽ›ā k{Iw°¶1īlüĘ­i’Łf[jK4™›Š>KeŌ’Ó`šE·D ᱓‘ĻéTĢ’·‘n×)HŪK7E÷4 ǜx—Sk.-ā˜O2dü'Æ5ņēŠcŌ.¦»Ø=鮙œ’9JņŚ›»9ć{”øx‚`”[Ƥtłļ54Væy ēøéHJHܗKø€É$į7ķܧÅXŅc»¼¶3J7”Ä1‘A¢4ķ Š6›!ÓÆN™Æ<×īīŸStµ}Ø/Ģ8aŽ‹ōō:«0Åg(`2ÜćČuōFņD g¶zŅr±>Ģž¾eŗ–L$śWć×nm…“vńōĒjŽqņ”śō6Jš‘×ų_hīk>$[õøŠłe V=›ŅŸ:*Ē7ei5åõ“W’FĒ›×YØyńCxŗ}»ĪŃGøv­%2z™7—VsŲA2HŽa]²öŚEx ö„q=öÆmš±n¹v·qYJ] Œ{Q®jšµ¤a ½Š…ŗsŌÖķę«ŪXB’_[ĒpYdĮĮ¬7ŲźŒ¬yŸÄū‹]Ć6WŗÄ/­“‡É‡’Tc’>µįļć}fM éń̳G ¤( nzŅöf·=į§„g‚ŅŚūX»ó¾Öå6޹ė_DZxcOšīŹn#·yĻ—¹Ā⇯Goį_ū.w·IםČA ¼rü+©²Ó,uė[Kä™Y )ŚF ÕŲĘS}“ĘVŚeʗ½¤CwpTœ;Ō×›čŽ ūĄbEšįwĢŲūŌĀ2;Ó„h:d6ļ0V9 źy8µ|Ķā]6MSĘzŽŗ„–š|ʤH =Ŗc3dv–~ń/ˆL"6ŽŚ-… Ćc±ļYZWĀėØ5Ėx5‹ÉmmO4Ļ&>uwqõ¦Ų¬E·—K‹Y’d¶—LGĀEź3×5SU‹H¾ÖF›&”nYłdCĪ8’ŹC;=F±“ŠäŠ”Ž2øø8)śū×E”jš­ķ–“āĶNŽ[ł3w Ų5 |—ćˆZõļŒõ‰!՞źHī<Ø­Ńs¼q’ׯi“‚ēTŠ$7V~MĪՓ.įžsNįcę=fK۟øÖ­Æ¤Ņ"˜4lÅFONÕč^)ńͤŗ5½…¤{ĘŅ’ņĢ£ūøŖO”eaاм5ekØ@¬xV}:Rj^“MµYa Xvž øö3g³xYš®¢jvŚ•ŚÆGŁ_’!Ē_é_'|tY¼Qsēi¶†Y 2åŌ†Ž<`ķż)J&°>,mźÖźBļNj »i”Üp3^šŚĻXŠĘmWY{Y®"˜Iåć ō÷Vl'±Ń’Ā'iu6£ikoo¬Ņ-02N{TĆL¾ņīĘBN@ĄĒ½##™O ŁÆŒm84ūh]Ž@Ķ»ų6¤šv„:6§ż¼mĖ+pZźµ+(5=<Éfßmxć2>ŃĄ^ō›±”ē_tYµĖ»ķ¦i®ÅR\N3żM{’Š>ƒšŹ÷R°¼×3ä"Źv¹e=ĘMe'©q]Ļ•į¼ŅÆ”‘˜¶UńĆśšéQ¼±ŒKg#ĒŪ"Ŗ1"HäKP?kŻ0cæq=õÆ”žj6k¦Ā÷·ö±+0Ē·ž”‹¹‰ńCIŅ|W„ÜxrfŽuR'Ų:ū‚;×5uw¦ų[Kū>¦³Ms$~LI‘¾Fģhsøš‚l¦ŃąŌe¹ŗ¤ŒāVLO”8śW°hę²[Ł“™Ś6dōaQ'”79?Ķ­‡†£¶żÄBܤŃ(ÜMßxśqŠó i–Ś•›Ėh"ićl28Ęk !‹]Õ ’hnģļꕉź€õ5ÕiŚÅ« ¾S—Ų9ēi¢ƒ ģ-/Śõ£ū:ņmQYšĻŚąÕ– ‹YY\Ē#ō¦•ōGĪ>>ńÕŧ‰[Ɩöćķ‚¶A,~•½‡®E­hŗĢ­$ ÄxŹ‘×łVœ‚•3覟w:|÷¶[ʐäV-Äæčöęšł>lžZ8,Ž€TøœÓÓC‰ÖMŽ•uÉ{h²£óü• ÷Æ”“’ˆčž°†(līµ ž1³ęTčsžĘ¦ĮÜšj7÷WĘā$ 7ĢrG@Mtž+sd‘]¬ŽPĢXä7¶j”!Ųõo߯j~ŗŅ“]ŗa*‡’Ä`W šĮöš‹­ßų†ś9näxć ³6OA銨ČŃGCTń¾‹ö«›kØ)¼° äØ8÷¬ų€æūMŻŗŪG Ā…Ącģ*Ęyou ģ»¹~Šc·‰YŻwpŲķŽõóåę«kAؼīØy#¾qéųPD–§Šæ¼i©j\i–öšMk!@Œ~ü\d··„}c¢hZ ó5-\™ēUčł,Ē`*$ģ'£źK{Hpz’sƒšß×õKż^ö}FWI.ē}Ó6#„Kˆ]ākMDnhfŗiūŠåt»MFŚHD2ŗL[—Ļ*3ڲ·C+ŸOéRĆoį«g[™ŚdOÜq“+_A^„šāq-«E‡?.rqõ¢Öbz•Žæ„ÜYژb2/;»qŅ£³žĪ[…iUš =ĆpŚéw÷Wz|khfpķĪGBJ»Æk³jWÖ¹ß&Ņ”ŠąėZ©#)HšYōłdŗaxL€9Ü@ĄÜxwYƒAF–öie·‰H3’Üō•Böšž—¤x‹KÖŚY®„!Ņ&qīxśW‹ßźšˆ|_¦éYÖņ± ē.xĪ2H錦O”¬er߉ü.śkŸ²Xȶ^g–—;rŒĆŠ’žµŲxvĘ9,ÅÖ£tL;w—Ąō§¹LĒ“_7K%„3ČQ mć5Ģx»TŌ—KĆŹ ž>µ2јÉYžQį=r÷PŌwq£ķ|3śœōÆ©ō‰å³²ņā-ļł‚?ʧ±žu)jeQčyī·®ZµäŅ9\+T·Ģäõ•/ÅŻcĶ–ŃōKhØ#!Č÷'š¢‰Œ/¹‡£OāˆzĀiÉ41Z‚HĢ|Eäī?®«Wųuu”x®±cylˆ’G'E,GģeߒžkNV‹Häõx{Uy-–i ēĢž•Ó7ƒ!‡O³ŗ–åTÜEęhš ćóŃv“/ó[ż)¬KKo – Ēk÷«“šåĶĘ”öMļ/˜æņĻV5i™ ć«[æĮaįōF_&A$%…nłÅs×~ ²²–ÖŚ@W oŽ1†i•vv·ĶdšDvziŚź>bW§nõGHŅ-¦ūD—¢I% ņÅļķAœö4¼?įõ‘īēsO1Byźžł¤oŁź.&fŚpH8Į ^‡Aą’ čś}äņµČ»żį|ĘÉ_p=*ö»,JŅĘ]¢y.8ŚD„бŚd¶”‰pyŽĢEUžöK÷‚YVĪ=Ł*N{ŠČĻTtŽ M_I{›ēuˉƒü5Öų‡U¼Ö“KĖmK1éŲl»O­\b\d|Į5„Ś2Ī\¢*Ÿ½ŠŚ±"d{o2( ¹ r1W(Ü$SŌ%Ót‘kyv ŖÄģĒńœ铍{M»‡~4sÜĒ–1ŽC>CŽÓbńEÖæiq4p¤K1%\gåśś×Ń’i‘ō™£±1¬Č ŽŹ>qĒ<śRq5<?x‡T›SŅ"²’ĀŪo¼Į³Ė{W[œĖ}łŽXÕ ĆåœPćŲfn£®iėęĄG™"‘»`ēņ®3ZÖ^7ŚÖG 7Có/֑žļ@·ø„Z¼óó¶d ūĆė^y=Żō÷rŪŗK)$ģ 1隮ĀÖēU¢ź±é»m]Ö Iį@ź}+Õcń5ŌVVÓŽ‘Ŗ!g-Š ™D®^¬mÅżöéŹ0܇°®CTÖloģE•ŒŖ—*Ä<€ä‚}=+"ģ.‰ž‹äBģӞäŒćė×ō°µŠĪ‹åÜ3|Ū€¦+Nm ęaėWp}¢H ‰™°ŅĘ?ān®ķl÷=ęęU ¶@{J«™+ŪSń‹ķt½9ąÓķÅÕŌ„ gqIēõÅ­ååŌĢĀ1œćń¦hÓFę—ØĆo˜®JmĻĶźµ澫$0ۮѓ–<’(&ķ–%ŌŗlaŒ‡™?…]›B·—Oq2±ŗį“?ÅĶ`>vp§KmJ{Ėib'{æ`T¾–öŽśCq2<<АÜĪŗóÄQGjiČįē`~÷·µbŪK©_\Lfø}ŽŪ}Ŗ¹%”JēL–#/ŹKųU$·m”Fݜńš–5%crŚS ś‚ŖI%Hż)ž!ÕŁ-lĘČvņŪ‹ŸŸš¬¦LūWūB‰…Ė•ŚpGfØ­µ'b³ž2: ōe Heö¢Ī1ˆ‰~čĄĮ?JŠņF•œ¤2ć8Ą'õ¬‹Œ»­'IQ–Ū×'¹ūéĶÅĆIjąĘ0H=O®(;i#VĪāŻQŅI6©ĒQ»°Å~ķĮ.?h+}&öėįõĄٲąŒn¾C÷yéõؙčCcśĢų5ńūsI²µ˜·ö„ŗ€¼ēĢ·Ąžō5žŸ-¢É)™§Gs,{½8śVVŠ'Į?h‚>ųŃšćĘæµŪh^-j6¼cÉ» BąöĪq_ēæūRüÖ>ü^ń„µŻ"ņĀ:Y­Õg}Ū ¾2§äSŒūŲ§ąXĶ”5„°˜&˜3·,1€·čÕąÓ“»”6Ķ ēĶ,0zą_3ŒĀūķšĒČŌ‚ö’_±k« Y¢½·]ȓ n'ø#„rŚw÷:Äv7€G %†öĻN§õ¬iŅåv&„śŃšŚęžŚś{‰®D••@S€tēņƬ-œ_Z’…d~z×»„—CĖÆ¹y³€ĆØČĮ刭ō³Ż§¼įHdĆ'īÓg g+—uv²–(ŖOc5ŅZŗļ×ĶG8źjĄź’xÄQ"ʒ"¶Kcš©4IåĀJ[…ĒZ O@‚ yåT+¹€9ć•5Mlä{†ĀīP:śS( £Į%Fćøf¹ĖˆŽļTeb²īłW O|zUFB”My4NJXī6ŗ0G•{ 0É%o:y¹ėZ¢$µ-éÓA%æ™,”óø×K£Ąö”įE ø“Į뚓®IŪŚŪ\éųó†ļ~5SÄ##S“ŠŹĶø0rßJ†‚ē/ÆŪĖ}p—. ‡€ AŒżkgEŃP*܉˜FX^ō”R«Ō#“Žx‚'m¹ēźk™BŽ`†¹ŲąėBB‘Ōr[yÖŚ²©¼‰ö°#jÄX/m.Ģš¾ČØķT‘Ļ;£¤¶§ÜūrŲōėXśÆŪlįs${ŽT8ćµŗ„vXŠymŅ ÅI`^eźĄ^2G"»·Qģk—™GĶ6Ę}›ĶŪ­–ĒģŹĒ”ĮīhH‰!ÖZ·FYSl„dAéTµimµyŅŅ ?~@<Ż+»”h:}ž› ¤‘ĄX€sœ÷ę¹oų^ŹĶćŗ“™NN]j³‡I]ePŠ~µµk{ĒĖ+Ø+…ĪsšŹR2©ƃX‚ŪOø‡Ģ¶0{W.øė¹åŽ’yåŖNf¬ljŠYGåD`71$օŽ«lÖļ8™±…lō5Q•‰0®„Šk°ĪCĘ>‚ŗ›XÄĘßä·Ę=«R¢ģhżŽK»9\„é’kĻõm2yg'>hy1€3Ą Mœ×‰t‹‹9P$‘ūŽT{ŌZUŒĢ¤»y¼ąg°”¢M[ĻIh‰tķäĀĒĄäÓc½¶·R²2é–ėE‡s|2Mk»D@ Ž¢³u[H£x–)ߏ›{š§a_”ŠhĻbŖ>Ó"Å a󞘭Ń­døFt%ى?­V…#/YŅZ9Zxį>OxźkRĆĖŽĶʤ›~ļo­ßRäō8n4Ō.mŅŌą”É õ©--#³ŽęźbĆ09Īō­›ģmé’LĢeŽr2zWCm«\X+¬-·p ē҆Į3ćYH‘Ä‘˜ćęž„2Ž4‘ Ā5TaœćļVR•ĘXÕµÉōķ-Lvę ”|­Ö«i_īļ4»;ė{eŗV?2õ4’™ń5żäZŒ/fžQdŽß6I5ÓéZ”·ŗtpāO8päõj- ‰ķ¬ä¹Mאyķē©ņO&˜‚žg4Ķ¢Īyōū—Ū%ĪrIź~“߲ڈĢsķó:ńŠ•&Yźž ŃtŪ[)ÆUm¤iČ#”¢ń )$ŅĀéåćęć’+P¹óŻ“wĮ„×nVV$ś×Mmą›MGF]FÜ3ÄąĘLœśĪ€Go•ņčė ,‘D O5Ė5ιhķoÆŪ~lææżU2ģ3¤¾Ł§ZÅ=ÖĆpÉę >_ƼrĀöź÷VÄÓ¤A‹•ĒŹŁ>¾“F źXōY“Ł..¬ Å!·ÜœąW”źB‹“p!Ę0;Õņčdź šN—-¦™:ŽN—qęEM£ć#ņ¬[ rź!G…AåCW¶•¤Łé_jk‘»Ģµv¶m²Aö˜%Õ³·½L™Ŗ’H4›}^ćTƒĪ*±IēÓ<~5³sąH Żī®Ång\3œa€žx©Pņ½GVˆź®Š)C=q[ŃjŠ£Āį~pŁc޵.: Ś3ØŌ|U%Õ§Łą%^EڇүxVęK­,Z_>n¹Fņ[ź4[ŽgU¢^hŚ“ŚŹ-ŌOņ`6 śVˆ­l¼QcØŪZ«ż˜Āų Õ*īhy÷ƋY-īĪņAåĀ#Y9'9śUŻ~žÅu “Ā’«ŲTKģpIęj‰n‹2Åø—½zö˜›į’ ¾³ØĻŹ«ió $V‰ ^Dž'šD©ŚĒa7Ł­‚į‡'„l=•Ž‘¢ŻźH<ŪxĀ@ĻłéCAœŽ‹āžęU7›œóŠ ģ#ū-åĢRΊįĮ=W׌•‹1īÆ,­ļ˜Äzó–»'‹īu+Ä@¶„ €ŲśR#™=§ŠžŹĘöĘ07¾7©§Ö¹É®n%ž£ęSģ½Z‹&Ė”?бaį”u?ČņP“ƒŌ䕥é–p0–[Vßåõ$gŠŅ(†VԵԟ1ió˜Ę>b½¾•F;»«‡ gwŚHē5qˆ6śŽŌ.n ±œ§ÕėŅfÓ¼©‘C|øēŒ–€~„ö£ö†–E~p ļ\é×ļDŃŚ§˜ų!x=½sČønz%„3ÜŪÆ™Ėæ¾q\¼6Ņ›»…Ś”UŹŽœŠ˜łš\ĢÖuilķŲ,ya†ÅsĆQ’źx~Šåķ¦˜ī\F³ˆ£F„ Œ._Ā­„āÜ[¾Ę8^¾¢‹ĢŽNŗ7lŸŌU4Fߌsō§ț: 6ż•×Ė@„ü„³÷«¹ƒf7˜Žqļ[œļā;=—ļ‘”®Ü•÷śÖ’‰ōhģ­ZD|×ō5ƒÜŽ›čyÄQĒuo&$eO•[kÖ7[_uģ+Ÿ'øw,~nĆSŹ#t\‡žUŲčZ4«°P˜nsŠ}kZfR‰·ā oH‰#Ńęc¹’2«ž®+&·•¼G¶O޼edMo ȰjšGö?kwåTQ]÷‰ōص5iY!ŠlgäPöĄŖēDž] ©Žiįv(l+b©ßȶeŽŠķÉŪżģVMŒŸĀś‚Ė8YK_7 u##ßҽÖGÓb»ó.3vģ“ĢĪn]NŚüÜ$:œ{cĻōĒjå5[ū ‹ķøB8ÅļHFU×ŲīRCc zā°u]:ɜy*#ĄĒށ4ū93'–¼M`źM:Ż&V'hc²–Ići€dČ'­-j=­lŖąĀ„.ø¤öF8O‡ķ’†#Üp§™¬jm-¹kdEFūĒ'jż+ćŒŽY7ŖČĆ v­d]ÆĖēœõéA©ėž±°ūM;,ŗ€rķ»Tģz<6v3Ćq8 Åߎ0O„Rc¹ęö^/w½Õtø¬” Åqrµ¼>#Ōo®÷¹}½…üšÕ2%ŖÓu‹i® 6Sfl`ņ@®Ś+8Æē¶³£yƒ’8÷¦dŃĘų·ĆE„œvńĘ?“üĀą«dļļ\Ż’’gh÷&ą¬!ci1Ž“ŻųV-3Tµ€ī ¹Gr¤śŠÕÕÅæ‡ķP Ęģ œŠ=*¼““ńEō?hIŒ0’ėŽ¤ā©jśyŅQXDƷցž–ĆQæ’PŹ÷Ŗ7Œ+»ųm®ŽųR94{3-Ĥ²°å@G_óŽ“`‘Ći,Æõm+Y2ŚĮ±biazv­hö^čöWfK ¶HųܾŌ&9#" =bßC·ŠČįP„OÜĻSųVJ規öūLŽj‘¹Uq”ŖH“ϼWcqkuqu, l9Ż&īA÷Æ4Ō4$ŌaÕw~n†“QŠĪH£įodŻ–kuŸsgĖģ <×£i\±kS¼ń4p‡Ź©ū z —aI.‡_«Agym%ŗ7ΤŹzzTdq+y)ņäē$ōØ.µ93· „6N;מź‚Y^GRWvN:zŹJĘŌ÷9­Vņą™4łŻ¬Š“Óšę™öM;OŠI…ͤGtg3X~3ÕnWRµø‘åKk5>Oe$’Ÿ­D—A“G}§źĖ«uwę]Č4ĮœóųW«č«CŹ?ŗŪŪ±ō¬\˜M ö·ØZG%Į³³ČVõn}{ ōĖė _ čŅj·ŠĀ„KHü„.m,$yеē{µ;)BTc†Zó 뉬‹“«Ćżå;9ÆåZGcH½ÆHńğѵ°J>WĆ“Yæ¼kyāV…“ʚ֦+e·TŻ“æ¾GNō8Ž3īq6ZqѼ:5h.īēÖK6vŽæCį9,o|KcŖėw0B[÷…‰RGSųÖF±G³ų§Äzm·Ÿ%œķC )ē}ė†šTšĻāyõėõP¾CåĘ\Tø¾ō†ąuž‚÷SŌ5Ԛ5»ÜY!0ą¶:tÖx>]oUÓnī¼CdšDĪQ»åść‘Œt¬Z±›3µMO¶Ó¢Ņ$½Š{ĀÅ؁īkē;"×ƞ#Ōa½–c,ęEbū€· Ŗ%Ü÷æßXFs­TķŻŽ+°×sבłN”J6>JńŸ…`Õu ńŁįdżį (Ējņķn7Šld]?s«§ļ5Ü@ĻJ†É”»xCÅs›ķe…RĻĢŪäĮP3Ę»;m_L¶øŌtY/¬~Łx€|ĒvŽ’/§JFrO”å:Ģ© Ļ<Q°›fõõÅd‹ŌŌą·lM·’­Ś„HfĖk֚}­¾”‘[“Y²2d’{Ö¼ņxŅ[ųī˜—…wn³fš`6ęÓN–Yw6wS…Q]'ƒ¼0­ķ¢=ŹĒ/ĢA–Ļ’Ŗ”ö5‹,kɇ µŅ-£prт\öǶ+Ģ<]ćŲ^>ƒq4ō„‡å}¾µ‰¬]ˆü:.ļŻć» w4€,,Ü'üžµ·qᇾ@öE¹DU;›éZSŠĖį«-MŌ/5·˜³Ŗ€ńŲJą5 Aä“žĪ±·1£ƒČ­Ź_ųG.±įßڹ³¼Õ4q6Ł ‘° žæ1ś×»üXŅģõ‹K;»]ĀŽśŽ`©ĖĪy>¾ō Hó$ńv«§A—kx¶ŃoĮLuÆFŗńUŽ›įhỹdÕ¤;b Ą÷‡ćS(˜øjlńVƒoŠĻuyœ¹9ČķĒįV>xjęĆAÕīµ!kż óy†'ĻȀcūąVV%GKœī·qē^„¼š|ŃBøóZŽš*Zµä±‡¹ūL€,Ddē'üśŅ5‹G„čzM–™vśž£<Y[+;ą”ļųTš'ÄOx¶ņkhn-•ą%÷Čreē€éœQuGBŠą|uąm3\ń5Ɗ Ó-ą’6żŽŌŪ¹Oń›\ųo©źVö—ŃźŁķ¼D9ō­”®g*š•įÆxcĆZ’Lf¼¼óšes­ƒ…Óą?uļGg” °Žńm$•ŻāNc$qŌÕ£ Āē€ųĆŗ’ŽüQ3ŚŽÉl!˜K3ɟި9ŪĻCÅ}kk¦‹č®o/ŽĪЬRŹ\ĖÜzqQ4L ŃÄxÆĒŽ}FßIŠõtŌÆ_>t‰ŹFsŸzÕšv‰ā-GWŠ–;†“F4’¹čW>£ņ¬Xć”čųßDŅüM}¤Ū^‡\˜¦mą²§~;Vī•©é7ZuņŪ:\\HJ*ē‘ĻZ 7×ō™īZ?²äqņø\ćėZ>‚ o¤ŠųŽD!Ÿ™ ϵo”œŽwć‚ Ņ<'¬j–ó#ÅlŲW ņ0é@{×˟¼#“łtų"q< Ķ‘…ÆZc­üįżKxcѬāF‹I&ÜaךõÉēҧŽĖɾū=Čϟęzc½’gĻ^2ńևqo}„\ ē˜–B1ęö}«Ąu­ė“GåŹŚ}±l3°8ō’Nꊚ x‡N¶±Ņ¤IY'Uvžń澫ųyuįŸč1ųzŹnijĢG,ŹGŻqėžōĮ®ˆńüL×4ĶGT•mŒĀRŁc³žŲÆXš óEįmJļ\OØ“K(ÜøTU?ŠŠĢ¹Š¾šü®­wqØ,WĶ’" ņČ3€¾+Ē~!h>%ÄZT6:{]h$„”&s¼žøō¬ęśĀGWqąfŪHi죰DAąéSx+BÖīo–ĮcŽyIP¼`’2Oµ@å=ŽķķD· z°} -‹œķ’Õ_4źŚģ†±}§ŲĮåÅ*¬kh™s6ZҶ[Ź]"‰n7¾+KH±æ»¹|ąĘd=ų֘ŌÜ×ŗŅ-61bąšAČZµš4·³É3]¬0‚O§åRį©JŸs¬’„cS:wŲ§•>ĪFn:šļi6ŚĻęM ]䂀cŽ“|¶BŌfkig'*ƒ'iū¾•«§ųŗ'•XŸNaƒÅgc9&ĪŚūĒ-¤éĻØįY±ņ ņĒÓWµ Fr÷zm3Š ł”“ŌÓQ‹3pg¢x“Ɔ×Ć:ŽÆæŚBķ‚>óś^«&½>™Ō>bĒu@ č+R#OR¶©ŻAr²'óœakÖ4¹ļ¬.ķ[…ĘYĻjOC¢1Šõ«’M­ŚZ¬BNåDPŖ¹ėÅqŚĒˆtķ6Ż,ž{D™PŖĒžGŠ~5—7DS1“ ‹e±»¼’x^iņ“G­p>+¼{ƚŚ6£ØcĘhnę/¹ęŚ$ŁÜ,¤C!? ÷Ʀ“ŪD¾Šąž[‰!ø „tõTÅŹ®P“šBŻL·Ņ¢KqæōGÄŗ®š.C+(?8\n­ ’±ēžń֛ā_³YYĖL­¬r¾·“Ń­dÓ¦ÖÆ/v\¤"Č接zę“v-ŲņŪ’ųŽņ³¼yģ-C‘gå>üW•ėŽ*³ÓwYͶ;‚Ē ½I„Ή8 Ū+»ł”Ō@–dNĒ„t:–dU·… ‘ žwąąY¹\™+ž—a8Óķn.§F‘²0€šŲö®ĻGÕ­nmL°6.6ī\㯔¬ÜLš±ĢŚßk¶­x÷ZÄŃm"0Fõ®»Pљf“šGūC¢äqĶU‡s—:6©«»Łé³:eNā£%}ė€ńWĆŁ-“å %ŻõÖ›3ÉśVŠ(čŒQēŚ-Œś+2Kå)ĘqĄ×[o®Ma<~ė cE?f9DßmRŚźĀąŪ­ĖŻÉć5ćPź×6:€r$|Ęło\ŃJg©\ųšŻ“ŪņęP_$`ę¼~ŪK½ÖÆõ9ŵÕĪ×óYĀäʬŅ2Šõæ†ŗĘ“ī„g¬Ś\ZZ„ņā~+’Qž5éĮ ³¹µ’ĪŽI›k:”ūµc)5¹w±ķž·»±µIŁwĀä°22EqŚæ†RŚatmŃd‘‹±SžiE™9jl&—¤Ikb×#ÉøĮ-捾‡ņƗ?h ōA¤˜.m”Ü1>Tgq+Ž ō’ėVę©Ųń_éWŚĘ§V‘»Mę*åĒ?Zū"H Ōķ’Ęņā8nb‰P~ö1A\ŻĻ%ń‡.„šÅjnŒ9cīŸS^‰ ų^ĻH·Óį\Ü^Ė÷¾\4HīōĶū:žāź”f |ĢØŹöžµŹx§Ā­©Ē=ņ$‰oždī¤÷ %w­xut=#O'{‡2|źÜ@éł×M¦Ų­½‚ÜŹp^2ŪYNFzPg$Œų$ŸMžėķRGo'„M.ŁŹ›TØŻš‰KKŹĖB¶”¤\‰­Ķp ’nęµļīģ/.šLr«®{P:ͳKšZVœ©,ÖźS÷Żē5§s„ż‘ÜČń}‰Č*Ŗ˜bŻĪ})Fœ©h‚<”pŅkš•›i2Ū†ó&wŁĆü c½k‰ązÕ“—&B…‚}Ń·‚+Ó“ė]Ac ėĘŻą¹«-G¹ķ:—€-tß Y¼ņ„Ö¬é™S¬CńÆ3šģ¾Ō4`āMŁ'”¢ĀmXķ'×tųn¬ą³–#+¹C„'x>•ė:MͶi++[‹•;pŲ$ –ģe)v<Ī=:×Kæi.Ź-Üņ~µ§©ŽŲ²F`‘×zŽ2ß­.byµ¹Å]X«ŹfÉ%‰Ę=>•©ż“ea§ZšĀȹVŻŽF:~µõ¹¢hĶšż®xķzŠ(óT¦\ćĖØY'#ē×z ֟{46PG?Ļ‚Pżļ|ŌnŹęčwš]ZCזŽšŻūWg¦Oű(Ę&Ézō —Œä5Éo fņāó[ūŁąņk“©Ž]Ü%ŌĆbžČŚ>”ć.ƒK”Ÿ.©ŻOµćÜ‘ĻJõ=7ĄzŒė SŖÄr>ėqҵ¹§³E?|=—L“¶¼ ‚v³śW›ŚŁŁĒ«ø‘d•A^9ŻķI„©#Üü?<Ö˾5"åwäjƉµ1±–Ī,ĒPœmĻģĪśģŪi# nF@&øEŌ¦žéa€¤kĪy늸ŹÄZŚ”eŌŚŅēŹ&B[,ÅGA]ę—ÄvÆ …Ü3ĻSõ¢Rģ>m,Ž’śŅī`—{. ¼`päu¬³Ø[ZyĶ<ę•جe.ÄŲĄ»ń2Ńnmµ …b(—XČä9õ×ė…5_ķk`Ł]žly?Ćé\ӏSF΁R;¤Œ ‰ˆĪ×+łŗ’‚ė~Å/ć/铇…ķ¤Ē*ŪjÖŃGĘģą¶LćÆ`}ź"ģīd!÷-Ŗh—÷:Įl‰;F3Ÿ—±®æĆŚ­üśž˜&½Ü‚u)ąœžuŽ"ĢŽš¾‡č6‘c„“QYĒo”®9 Ū±Ē×+ā/†ŁŻøŚK†B9Č9ĻBkē§ZĻSf™™e­ [«ZéAŻ0Z(ŲcÆbq_H|?Õ’µm ¼M‘œH„ō>ÕۃÆļjp×Ā­O@¾Ņ^B—01Mƒgńæį˘ķ®]CŌj0ČO q_MJZ\ńźS±‡¬čšA|÷vcØŽ„øSģ+6ŚgY6D„öœ7=+­3…–叔+“ž?Š£Ō °d>SҁéÓż™ņļ(Kzļ °>bbI 9“ 3.B‘ ’B®Å‰Zf±kq„Y&ØŽĀ’8÷¦[™µ¦xƒūRĶ"»“|1©„śóÖ¹‹½;Ė×0  ķĮn¢·H‡ęoYhvQ¬Ŗ…?(­M2ņ8'pBØĘr8WŠüE¦GnWOøžte\ķN‡ą{ńłÆ.cs3Iµ¾ažN{PŻ…Ė­ĻUÓō³]žJ.qžAĒzš-F<«TmŒ[ž9jQ)Ųā仿¼Õd…„ ņ¾Yż)śÅ¦§`ŖŚdˆnc>aĆōĮę™<Ę.”.ÆāDŁ–[·;ä;ŽAõ>µčZ[>mkzŠoŠašÜSŲNĒ}į-9g³@›J qЊč¼kį]ēG±¾¾’(gĆ,hĒsńŌJ/ŠĻ©āĮ.#W“·1Ū£ó §«Śļ·¶šĖĶ{‘ž°Š{RĢ^\O%Ķ“LĄvœŒqėZĪ’»™Ye^€[Eź2ī( Ģo$’s0@Ą÷Ķ7EøÓņ3< ć„PCcØńˆē²ƒ0„P‹Œ\tŽ%ūd¬Žcw^2~õL¤t¢­¶ÄsÓsŒŌq-½ŌW*<£‚ÓĮ÷¬E!÷ķssjR'L‘éXqŚoFHń2F:PrŌ:;æÜéQr~č<ėU4UžD™Ļ$šė[F&#d6ņÄ™œŒęŗ›mLCm G#ęĮŖß@a—LFYXląW9{rF »NķAM§ˆ5[–Óē‘BČ>é9Īq\ļ…„æ#.¬»ˆm§µTcs³³ńĘ“’iWQ剉GŒ`¶@ąśōżkŹ4Ūyµ{„…X¤{ŗfµQ3=‡N“†ŅŠĒxå ’­[¾Ó­–Ų\%`¤ōéD¢4nXéś\¶VŪC,¬£;Ž9¬īŗE¼óKgŅ&J“œŽ+nŽßđߔ²t- ‡$śzbŖź¬–[!Ł‘ĒŗŅ<ŽļSšæz%É Ęq].›r׈²9gL`żkh³¶ō,As$WfÖ'ˆ€rG„H·· tŗuöŖ4Œl]Õ­šC*„ĻėW“YR(„råĀŽxčknPėéĘŖ a g˜tÆ,‰ÓY6‰ ø(ą õ¢;ˆōų4[yŠĶ(rä)ÅléŗMÜW "† Ēū¢µh›V²ŽÕ ™\ĘŪsøž rkc=ŹęVžĻv2"°qč\YsWŗ“²“Š0V$8\ž7zāļ4mKQÓī#8 ž=(Q)ĖC½Ń%šĒH† ›l̃+ŌüA«YŻ%šĆu5”ć́ž¹­U3;ėsPø ,`>1ģĘŗ? @š-—Ż‹9Ēš©©”GĢĶj;É Ś€Ė÷ļNŅ¢ū1š™™Ē„M…Ģy׋ŽūVŗšŚŹŲĒó*Äį‡zé¼5įH8|Ⱳ౲“Ī–žśŹŁdo,Ån‹Ę:}MPҵ}āģĀ×1“²F‘ŠĶķaņŌÆŸ>Ųī`aČÅR“öĶf.0 m& V9»ĘK=ŌlB śą{V]¶»ŗP-ęr ąŽŌ Döż=[S°°’Ź# Ņ)bĖĪ=ĶVÖīo¬“j–QƒåĮ „‹’…m0&Ø5 É+Iå•$Ä“ųd×<‹iÆa„ļé÷‡ų€źh/Ł¢_Ļ.‘5ŽŸd‘ĖpTT”c4šgˆœ–ł2Žćw\šAŹŽK\ׯ/­ć“™˜H­»9äc^™įmJęANņĖC¼Ōņ±”“č®-ļ"»•fčb®sÜÕ½cM¶½‘Ļœ7rŸ-…}NpXÉ„Iisk(mŒ ©ī= X»ń]ÕÄÓ[<1Ū.røéPą\R8[›ÉćœĻ'ĪŪæ„WOiāėˆŌ tŁ0ĮćŽ¢ZĘ b֒·:ójņ½­°9ĒlW \_éWzMói’Į3Ū®[ĻjčiČĻ=°ÓgŌ/d™˜“jŻq€ {'†ķ­-ķ.Ku‘ß §<©õQW!čQŌ<#ŖÜj¢Ī)ŒyPÄČ3åƒėYZŒqų{x2£Læ*‘ÜÖĘRf,ÕØä’E[–'äī5c®M%ón>R/šćČ=O±·¾TŖŹ¬3ó ‹ÅzE£x^īԈŽV`ˆ`ƾ}*®-G|šĻ‡­uõO-µėZįü†ū²cÓ5ÖxßÅPOa~šE„¼(ģĮvŒ„ąb³“čTocĆģ.o܀Š}ćķ^„4kk(Ÿ=ÅŪ )ŪÖ”jĒĢö9{.ŽŪ¦Rďālóõ­’ Gk`u=ÖK¦PiéĻSųf¶Œng)XÉųƒāäX`ƒG_2åQC—½q6z½üŗd_/ĪÄØ=ŁJ6Øs†Ö[{…d*„°ČOŠ×”YZ¼6®ņ ;†A=Ŗ,ĢIģ^ö9 T{ō­½ ŹŽŚÕd6ć*§' 2 ŗŒZ}œé?˜K¾? ĒŌ5’. !±A&[ƒŠƒWÕõż„Ģ``:¼~f£š»•³ŗŠdåĪ9ō«‹±2E=WD²š’Ņ)c»VĀ•<G…“ūˆo“ķQå3ÉĒj¾dQōTzm„B×QµH¾įŻ~ļįY"Ō"‚ÓNŁøżęĒO°”¬W+<śėTŚÖy sóŽÕŒ¶±ŹĢćs1ᱜV=SGŌ-#H¦HŁd ƒ“Į>Ž•HŲ[Cæ““Ķørͳ'å9ļ@ćsˆń>‹Øź6³^Ū[Ü\K¤c$ę‹=ģŚtR]¢ÄW†‚j’)ĮœÄžC\¹|„}£'„n[ŚEnģģX«™ąŃ$TS[™7±Å ŌvšĀÓ9ȓ­sŃXŸ5ŁŌć‘ŠŌ“&=a–ĘtxŻĀägŅ»Ż:Qré¹÷JÚŽ;J'”iŚRŪ½ä2ąēø#ė]‹5Ė{}&K›”!X…ČÅe%©“$Ó|ko+“To Œė4ÆŲų‡OÕ.Yā…¢Šž§éRj‘ęŽ!‹EX’ {Ֆś< ` ‚ž‡5‰mÄF¼6 ,z ’e‡G‚8p8>¬Õ‹g©C£Ś«Ż3Ė#6śP;z¹mypėoęģ ½>¦¦½Ō$€­¼ūŽIĒz`Élµœ3ć=ż*“ŗ[&„y©ł-ĢįAČ8ĻON¦›Q•ŽCÄ7Z„“āŅxā| q֙¶öŹ‘UNpUńÅe(§są‹“uÜļ'^i¶×/i±ŲÉĶO īZ…’_4Ķ!HŽ®ūDšę™¹n O?j†åUʐ®twŸcÜTĊ3Ó<× ©£4į­ä!ĮēoCQ&)Ū;¦¢«,fE#9ķ]’‹ÓB“–į^D ~lŠpĪļu®Š]Ż$rw.įĄśzVž¬Į(ŽYssŠV¤J(ģ­fā(²}ęŪԚī·ö|Ēi’b vö ČņĘŌÆ'æmė"B@Čō5¹q„Ėz‹pŖĪ«Œ{VnM2”nGØX_46óC “ycb`ćoµnĄd—DžÓTĢyły#Q•ĮĮŸ;Ü’jŪĶzQ̱naĘGā¹Č//§“ģė!VŒrj‰;Ż ļoļ`ŠHäż×#«oV³z”•`¤RƂ(ÖÖč®ZYB č=kAc² ‰QŁŽ3ךĒ9®J`ՓNhŃ¢VŚŲėœö#µw–:l2Ū†’$c0Ī(Gāż>žw@<ónˆ@AРᄒŵhČģ7EbćcH¶XÓōė“t»a•÷w^k½Óü-!…ÅÓ7œŁ(‚•H`»Ó4(.dŌ%Kye;3u#µz7†omõ >O*Våv¶UæJEņčfÜCkc«Č¶ŃC4ŁńÓē4Ķ[EÓ„77†$qå–ŚxÕst$ņū ć²¼y8^Tćmzž‡ za½lC.>PO$ҹHćõTE$—2)Ͻr×ÓI©&Ų.³Œżßzq•ŒAš¶Ÿ5¬‘4‹-ÖĄD…° }+CW¶æ¶µFŌHŅØł‡*khˆ§”Ų"H²Eœ°Z¹āŻkZ‰’Žł Ž¤ˆ261üĘ“P|ąÉ“kÉ䗬ēųsĘ:¼Ņō{Āśt5[˜Ā,Ž>]¹ļķœ~U(Üłžś=1 ‹O¼Š~Tē9śW}”źrŲɍs'–Sn}© D•¾!\u_µXŚ[JØŃƱĻ×>"-§‹õ+‘e Ųȅ æzį@ä  \ČśC‚ŅŽņņĀ~Ņ$É·mu_R+§±ŸOŠōiµØm€Ž<§,9č}sXɶ|”ńkYšėÄöš_†¶@D`± qÓ=ūõė>d’™¼’-TŁ©I> x®ĆEš^±„FńÉ­\«%øī§ßn•šž©ÆźzmÜi Ł CoFŪ¹‡«Xù¼U÷:=Ē_<{«ézWwÖšŪFŅeeĘPS_IųwÅ>% ®›s©„¾¢U3–Ī3łPŅEū%cÓü®ėVzŗĶ­Gż¬’œ“c…Čé×ėSė: óė·=.£$±UĖŲōŖL™FÅmVʇöwm£éšY¾š,JȔЖõō?į_$kśF±6Ÿā=䶊č’ū\ąŸQųS łęAouöV…ŪŽŃƒŸZś“Wų“to x;Cš‘šĘ[LĖ{u€Y›ū§ŪčqīLccēƺ†‘ā+ķJ{}R+ƙ—ębĒzWѾ µÕ•GN𿇭„Ś‚ŁÄ—]•‰ś{ęŗ£±¤V‡¾°³ŌäŌŚ1®<„Üs“^§į&ŅH§xā‰ˆłGOZ±W,k¾‚ 2iŁ”H¢`K€Ą’ś«7Ā~’„›Ģ}6ā×ģ°1nWš¬łĄõ{&ĒBšgˆo~Ļö[hJĄmgļ×§ł«ćėmPŌVóZ³ŽŚóĮ{ żÜžU¤]ĆsŸ“ø“K„FDq·„Cos¶MśćĀǤXéÖ¾ ¶1BŅQó1ooƾµšGĀ«ū-&Ś=FĢŚŻybBĻŚ3ÉģqR„ÜvŠńĻ.ƒĀļg¢Ś“חÆĖģ?"Šģ>h:GŠ<9¬j7v?oqIó;··4܅cĶüY£é:č¶bc,r*£ J„µqB²óŲąÕFW®»Ō­"ņßQ-āa1[ƹ5ęć&0YJa€’ćؖ? źsÜkš…7+ >÷'ė_JxĒRµŃ¬ąŁwcŖNš™c“&#īœwć@”O8šæŠ58µkfŽ$”m|ąü¾‚·»āøõ śd;aRvžH8¬ŻCÅ÷ś…‹iā5’{ūÓåer’YėŪQ-„Y?SĘk ĘƒŲ]@T¾00yäūÕ{0q$šżŽ½u*%“Ņ'ÉĘ=E{ާØ_[Ēng’9Õ üqNQŅĆäv9kķOū-ą|¶ģćē&ÆhݽķĢįVn§ÜVv “z‰¤ņn“، Čv®CžĘ¹kŃųe“Mš ŹI¹”c$z¾CX«²Ģž Ņ5,BńŪ¹U܄ēw½a]hŠ4“ÜŪ¤“B¼³ć„ n'WįM6Ö+«iµ‚Õ˜|݂צÜų“Dˆ^Ziöö×,YR2_O<ŸŹˆÅõ*3čĻų®_j6réŚls۲ʻgŹWøüyÆ>Ó{õhč~Ł ¬mˆ‹®ü¶:ć„s6”Zy#]d36: õ!±Äätŗ4’ż³Č`²“÷pp I«Ķö«÷™B›qZ(±s *C$.ρŽpEsW¶ķl†iÖL'žqH.WŽß6ÓFķ·pĪ{Šėõ‹µæµ6³€-”ŖCķZSŲg'”é„Ė‹YՉ'×=«„óŽŚ·„'œĒågtżkKggõœv±E, “˜ q÷Mcj:ŻŪæŲåDł‡AŌ{ŠBm³="xÅĖ\!ó×äL1!‡®+›¶Ņęß9œ¬r³īČZ‰H®SÕ|3¬Amö½ąĄ²KdbŲ;‡Ö Õl%†9ē³C5Ź®NĆÉö§9&q’Ćp‘µś°3‡<ƒ]mŽ›}5ŸŚī”Łæ““Ö™<¤WjxzęŽHdićÉĆp? ‡ū^(4čMn4ĻPе“MT¶A·–Ę0I¬ŻSP`ęK¹˜«īƒŚ³p+•ĢŃhĘAēšč¼=`u»e ¦E #ē/x‹Ć¶†"ŽXŒä@ą^[«iī±Ć±ŠÖLœ±9}+Ry®tqévW:]²ķČƒ¶ļzāŽ…ż‡#Ģ$łŒJ®8QB@­b޶ŗÅå‘ŠŽŁ&‘¤³_jäntżBkęÄČ?yH"†»›-‹‹sr ¶<½¼VåµÕ…źJ..››‡ s’묄IžÄ±Ś^\Ģ#°ŠI!Č€ąU›ķ+ģhRuxĶ%sĶq*\gwōØąMQΚŻmH~6œī_zŁ#;µø—É™Y˜“ŠU± »ļ9B݇­0±5Ó^%™f8čM`iš…Åģ·K‡9ĘqŚ€:EŅ ’Ā[uPÅĮź:{V&‰¤Ė¢“S*IłE\D*w:MCĆÖ^!€£’źä ņ“ė/Ūi\]XDZę8÷1fä挵SEŖjĒ75Ój¤[ȑį[k(éÖ½GDŠÖāĖĶ»‘āux¢R%E„Ņ.-.RYdŌ³#ż*[Ėę– ­\/’źcaŻ« ó["×EĀĄ‚Ś >Lv=Šż”Ńē\ÆæzQßQ“YÕ4Ų.¦‰Ö"‰{TtŪ8ąi”b,õķšŁ3)hiMi¦Y»ŹŃ§˜9nÄ×;fĀśķ’1ŗ" Ör‘Q•˲ČŃ·*qŠ}jķ¤²G7ĖŽ1PYĢ6ØŠĶ.’ŻsÓ=jfóõøŽÜG&>S×v)–£”»¢ė7—7óA5¬ˆˆFIŸ„{D•²Ł¤J‘Ērķ…ćœU) Ąē|Maq5ŠG#ŻĆ §nz×Aį}KJÓ4Į¦j°˜2±89ǽ+źTbbų³GÓnō’µŁĪÆ2¾ļ-GAXŚTbKXķœĪIZøČrGI-¬PĄÜ|¹•Ÿqg ÕØq gNˆ:։ŲÄǶšō•Ģ3ț䋠'€k„:x¶É ©ģJ‰JĄT7ÖńOū逌ާ±Ŗņx“M±‘äe~ Ž{Ö#±}§Šę¹E“žÖāN `p3éĶrśÆŒ¬t‹™¬°±7;†r1õ­c+ˆ±©<z$w|Čnó®{CƒM²WJČŪHˆŠŃ(±¦XÖ4«‰m”¾PfFł@÷ ĘI¦°hmē łĒجŚ4оēaioˆ›øÕāqšĮ}BŅEŻüwRæVdĮ?‘¤m‘Ēi^(ń]ō±ÅßałrāÉčGҽĄoyć+ŲšŌ“Ø…£”ąaŌS±k{åk «Mæ^@Į=+G[ųWį»éįÕą³ŁØĀ§c3œzŌÉŲµ lx<ž š÷Ä2Ž^iīÖ°ü»ŲąūłVV§į"ÜŽß:ķ—sč;P¤'±ēĖ”Åw;ķ ,{×{kØŪéz]„“\#ü¬P{„3)-.Ź÷QÅ7Ś5K…ņŃ$ žĻ>ݭ݃¼¦@ĻZ®S•¾§2÷Ó+“sE»ƒČ¬iģ纐˜ž÷Uu¤Ń­9k©«€æi¶ŽåÅæń7‘ZĒĆZV›s6§låČŚÅŗōéYN'm1—zž—ØYżŒ¢Cr ( Œ„qnnm„{H£†FÉĄźk3SÖ“[č-ģ»ĘŸ3øŽr+lx†Ņ;˜-¢’d ¾N ĻzØ»Ō‰©¦|PŅ4Ɲ2ļͼ—_™YAĘ3łW’xßT±Ō¼m®›[’l^mń!`ćé[ī6m£ŹŠ¬ÖńļPÜ÷Ķtŗ/‡Śswy$,ß)?2š)Ų‡”©e®[Ų[ŗł-ę©#®2*ęó¬iK}ÄY#tdü†B‘^5²WįoŚéł9Ė{ ĶšōßmÓÆōŁ6=ćņ˜xńlVŃj1ÜČŃŪJT²|ĄUļéŃj:bkdø·\ …' Ļj„ŲŌš¬§Šģóņ÷@­ėˆn”N‹ņē R=©ŁÓ“ųŚŃ˜F‡qļ\ÕŪ -*¤óéHĪhȹø”#J‘<½°£©ö®ÆĀwvŠŽ$SBb8ūµ“LŪ=ĪŅqi½“Œō®KĖW—Nģ-ø¦Ź†ē‘ZhSXO:Äќøv=jõĻ ]&™—M9ĆqÉĒ­dĶ2ńŏ‡ļ|e=ŽvžeÖßÜēh$rp¾Łü…mi¾Ÿtcyīc· „bŚīMāķ ,-ķīÖåXĒŃćkČĢ×Z­Ā†¶}Šł^ "g®ųoG’ŹŹ{éš2Œ¤'±Årļgt.'yŻĻ;³ź=ŖćB_ķ y#xāĢgęėZ2kR„‚Ic‘"s·īći÷­ £øŁ“¦Ö$x§}£.ŠUĪOųW}£h©©BśOŲŪlj>cÉÅšÓr=cĮd„‹ ®Ų!€ÅyŹx.ķc[¹_ĢMųeßČü*QÆ20ntŁäŗ– hIN=ė°±ÖM…ŖŪĻGAü&³hÄĻmAf¾ L¤Hq€ ­Ū_Ż™K"ƒqž+>Aؗ§Ó-ģ“ł®$vóå‰«Ī!xõKÖ˜£ę$ŽÕI‹«e6åŠß÷JÜ.3šīō ŁEw‘1™Ū÷j¬ £kMš±ūL÷ņČūœąŠ}t÷¾kkX%iĒ…vžTŌH<óSķ®mȌ•°qŅÆæŠōż Xtż^T“D`¬XšI>µ.=Į3²Ō¢‚( ø“‘%”‡ŽøŻ[^‚9ŅŁē‹ĢdĮ”¹{]©EŚęXŹ3nžÖ£Ń<>«Ŗ]LTĄ!ömĮqLÆfv+§.byK÷½sYŗĆźWy!E Ļ  ™FĘ8‰÷¶Ęgf÷«QZܰŽ$ęBz3Af£›ų>Ų¬ę(ÉĻJöŻ>8o ˆFEŗ·ØÅ;½+CŅnķę·)ÓĖn9ۊņü0–W›TŠŚ!¬įCO_žµņ0<9as„źšérB÷22²FļCW5ĖKNŌą)„°ÅGAéE…sŠ×ōGRÕģąh—ģĢD°¶AŻ×pžh$įj£˜ÜäüKg~!„¹ņœškIÓī-ĢX¦2»c go֎F“čö‘¤šEꗱc5Ńų‚»“ÅÖ5 qœ ø+g1į¹#·¶¹·žoßĘAPG,k±Fŗ¤Æū“Ķn¶1CĆž#½Ōé,ōŁķć'bł‰ó7ҹ˘fńFæ}ŠD²¦Ų77p5%_”ē¾9ųc6ƒŖYŻG{g©ČČ <`ńĻŻ©b³h -¼®UOAŠćŠ“en‡•OmŖkŗÅŻŖ[\„Š@GĪkŃl|%g”Z\ßż‘’åŠ(m¹'šĪo”i[Rž­wm:H®ÅĄČÉlń^yā6óN»A‰<‚GŻĪCéPL¢Gš„„§†ļ^śU Ņ(!œüŁĒzŪŌ šm’HšŒwm›¹L*W ’ ×øÅį[wd·³U–@2''µ\­ójsšõ參4ą·mœ°PĖyÅz€ģ¬uxÆo47QnŲɑ»”=:śŌæ3hüCc§\^ŽźwšÄˆ™ŲW‚x·Ęˆŗlk¦¶āŒQ™O%{Z.kn‡šļĒŚ—©=Ɖoē¶Ógß'Ś,śdūń^éį«-7^Ņdń“pjģź”Ķž™1rœv·5­‚L÷¶ö;USž3ųUm. TĆ Ū-/\€­č RdIXÖŅ>ųÅwŚƒurŠ\C9øvmYżÕ?ˆ®›āŒ:=üCKÓ£µ³Ų „;€ c9ŖMž®ŚE6¤†ųVĮĮązÕ)tŪ9u&“°‘ą²”sĮē&±ŸsĢ®Õ<9©I§ĪŅL„AIo„tvžŸÄ:Ü!Łā“˜åX}qYJ%§ŲõķEµĶIÓģt{č+ HöH§¾@ö­.—§x^Śņķ®īµWT|Ŗü£#§×‘PW1į~Ņ'ńG‹ģl-ž)QՎ7ą·®M{­¹²šĪžmā-Ś#€Tćo>ŌŅ!ŹĒ'oršÕŌš®]ŸåIé\¤vQ-ÕŌbrĢĄćŚ“ŁXø“x~õåø3ģp9ļSčÖ_ŁŪķ¦žk‚ˆX–o›³°Ļ0ń¶³­Ēw b=ūHļvēō©äŠu.ęīVķ‘*lĘ=r*µ3åóu-!įšŹbs³ĮōĶyV«ŅA+Āä%XĮ¬Ģ¦ŒĖt“½X`–V²~ŻŽAü1Y:Ä1G}3#ł νF8¤ö šĪ+;[{€†9ņ3ņŽGҲ人Óū>Ymī0NʦTUĪkMń„gØC$ÖNÖźĒĢv<ńķ]=·ˆĘSjŁÜcs7Br£æؤjŁ_Ėcj֒F·‘ØĘü+J“‹NK§ŠŽ-³>÷łr3@IŲōO[3j“ĖwcZy'd›wnFŽßżzńƈ¾k Ų*;Ś“ŒWĖO»ß„-’Į‡°6ƒ6µ¬Z1žXš/ߨżŲź[ŪłÕIlą·»ŗ†,UŽŅ¼äJ}lQŌüJÓ Ō¾Ź7P%iSx—w`+«Ö¾!¾Ÿw!°¹[o1Yw©Ć‚}=*#I“Ōņm'Đ­Å֟©kS_]6 +ጹ=3łÓµżJŽ[kĖX ˜Ū2›rsZ™³Ćµæ­µńøi‰šŃ„:Ōš×€Ū\’÷ŹG6”xäšł§::>‚Ҿųi¼?nņųvŻÓORĶ:šŁėĻå\>¹Æ[ėFI§–}-#Ū–ą ģ=˜{CœŅõ]Äś&«`¶Ń–ˆ-gvG0ćJńū߯Ć;ŻiĒɜäm&łŃßü/Öõķ^Š=nÖWÓü¦ĻšŒ}ā?ҽĒŗ’Ł–7Ś–—nč̤ĒĮĪ(4y µ­ß‰`¶»ÖܼH»ä†Vłr9Ē\Vνgu©čöēJņķZ P*67ZIly™į?ų£^·š¶‰5֟‡Ä÷%ŲķĻLwĻ5ö[韹€éPhśÄx9mŁlsÄ>'Zźž+³‚Ņ '‹O²w¹M˜Ä®?•|²Šß_Ėo٤±ÄłÉ;‚ÜPK…ö>Īų«x^Mō÷”is"Iw5ÜÉ·|„ąF?*ļüYroŽIa¼‹Tø ‘§5œ×R}“<TŃf‹Q‡X–ÕĢį¼×už, s[ųņŪTŅžÕn%łpĮĪўGć\ņަЦq×Ó\Ém”ĶjX®7óµ;ŠŚŌuÉt?^[Cq\ČĆē?ĀzžÕtćܧ #Žš‡oīõ×ļ®Ę£g,€†É+ĻjśQk[ż¼ŲՈł„{×IŸ_ėÖpkö1»2I*Ę Æńß”ÆiьsŖ¼{ŪĘź‰˜óźqüS§ŪxNg»‚;o0ˆ“Źc@ī¾*ģłā ¼9&øm¤»™]ĶŗL`~×2…„ätś–­y©Åå歒Bvė\>± iŽ$Šö'²Žh¦Ä~a‘ßn:W\UbĻ%ų½ą]ĆHŅ?°ć’Īdl£<‚¼7CŃnuKøķQ8$’p;Ó:"}]š›įĆ\ėt–÷3¤k eALū×uūO|\Õü!kmšžĀž{ĖØÖgšŁ‰|`Ó"£—Q$ƒģģõmy¦hZ}I¢MåärĢÜśšś+į„^(šī©ŪD~Ém49€·i'ę'õ§ČQbßM½ŗ¾ū=ĀyūŪ©9?SVõ{k]7Qū*óšͤ ‘‚Čß2ąµiČks„šž‘Øi-s}3“6`’vÆ¾kÆóädšä”ó&¹ĒŽĒ­ŸaµbφµčōJ Ö¶K„L¬»—ž9‡ńB輖Vw7ϟ¹Ę1ņś ‹'cŃu+KkW†]ņMĘŽzz“[ˆPøæ“¶ŽIL ęČ@ą ‘Įü*”t¹œž§E÷Ū#2Ē,ŖxV©“¶¼Ię*#r@ér‘Ķ­Ūō= ĄČį9ÉĶQ¾‚ė}¼‹4ŹFĆÉ1sŠ–T]XŃ™ÆąIYŅ5żā„YšŪUµ¾³•!†M1Ž]I;øō¬/ŠÜēµ/ˆ÷VzĞ{q€øƒśV¶›ń=_6ķ{¾o®~N}{ÖŠz ÄŪńø¶ÖMž^ą…= ‘’źÆ ƒR—Äŗ®”k$rx€Rģ§ūéR3Œltö05©[+evفøwÆhųy"iśŠ\_%Õ¼l$ÄØaßœŅ”»•Wų“®Cāa׳²ˆŪō¶īµĖźmmqk «æš  ¹źMbämxŸŠnādKPÉ&Ģ©ĮūŽŲ®sĆ6Fāö ­ābUŹØ#éYŹ"”ŗI1³“¶ƒ ī‚ź6“ŚøŸėÉf~`f~‹šqV0™ēßiµšv¾YWĶū¼šėü9ā(“¹!™¤˜Ļæ—źzŠåbŅŅēG­ų§ķ`„ł‘½ČąW™ī5 RIlJ%§™¹ņĄ£°?…fä õxßĆ3^]ŲŚIq*D·šy'øćƒŽ¹?¼M}=Ų”fåBä…ĻJ®Arža¬k„…”±KpŃüĒåcŒ×; ޵wri#“Ėm8Éśš]ĀRHś‡ĆŚĶö„¤×ļÅāʬb'ī‚=kÄ|KńFKļÜ xvĮżÜLKqÉ­£Läs='IŌäm-/‘)rɌX:¦¤÷(^5p¬qĶSœżÅŲžtōómČ8:°ļ]…Žøė¢Įa •W‰G¦j ägĶŚ³Ļ¦ßŽ<w’LŁ~_;rz ͱ²Ōo$…¤y_œüÄÖéZŸGč6|ö¶V³ŻĮö—łYdćaŖŚ‡‡ķ4żx©[K«@ŁV€ÜPmbō>Ó¢½µŗŪÜn]Ź%yžuKÅŽƒZņ`ĻĢqņ ^h+DO„Će„B–RYF­ņ)ūŃć?Īŗ©tÉ$š$Y`ņüÖd9ĀūśPC‘ēśäśMŠŗ‚Ž@$‰I}Ć©>†øŸ źšXj…£ÓĶŌŹÄ ąąƒx¢ĀZ•¼Cā’\ź+n¦äYĒž«nNƞ•ÄĶ&©{4·ŗ£ÜĶp ūł'+#±š…®©wvŒ¾Ī±ßĮQĘ+Ū¬ķJĮ1qę)Pæ{”śP™–”bœiÆŹ~c…ü+£d“¶†Iu0Õ±Ę‹œźZŽ^XųÆČÓ4[7UB » 6Nj1šėūQį·}Cģä0fw?*ĻZ‡5±qhóÆÅ›©O¦#$؏‚C‘ė[>ÓŻī•²J2ąļDR4ŠFī§ą½3UÄā)yNļzIžŲXé“j²¬xˆ€ÓĶS‰t9oųMģķÖ xUa•S…^7sĻ?•Q—X[†–Y®B†čÆČÜ}ė ”Č–Ö9C}ö'¹FŸĢ™˜ąö#Ś©¦¢nnٚ<¶ŽHéėYŖaĪD–*0!½ P¤k“ –”.1ƒŒƒÖ–Ś9÷kmˆyköć*–9f mŲ1œõ®ā!¹tEjÄżØ4°ōŚ2{U9#V¶TĄ$V‘© ‡.ygh]ĄžƒėQ"Ė1—Hˆ¾‡Lw v5£[“’eŲņ tÆĢžQµ’+€?x„yēŠęƒhDōĻx‡Pš^± xŠĘbŚÅ…ģwvīņbHšĄ‡ÓŽ•ż—~Ą’“†•ńĆ:/‰4«‹ƒpš‰Æ wWHŸ”?DŃŁécöKĮ:«k"DŠex¤[r};Šōų­7 „sӍsø qčĆų.ģY'Ēæ…ßück’ ~“˜µd'`żv'ē_Ćę­lö‘µ­ŪIg~IM’®Ę%N ?LÕŲ•#Ņ~x¶]ōĻńnŒ™ó+ćŒēŒf½gĄ’o”¾½kÖŁ¹Žķ¼«üŻÓćāš·m4å©ōŃןū/Hæ3ł$’†;cØ«ć[Ō[O˜YĖ*åI]Ŗ Ī;f¼uWcv ü ā½\š„†žö×QkP>÷ŽĄįHī:ē[¢¬·jĄ±×Ńą¦xøŹ=†I"]¤f[u'cīŸZÖÓl¦iŠ4&Ӄ÷Æfœ&TģĪsX[”t-ģL‘².āqĮē¦jłŌŻm!RŃyü É>õŗ‘*6ЧcØ^¾¦-UX®Ü‰3Ą>•ŌčšśŽ©^Ż·Ł€"Lާ’­T÷*;^"šßöU«yPæŁŲį\Ž άÖī¤K“ :Ņ‹eJŻ 4I”[‘€Ģr bµo~Ɏ釚¹ĄŚÜ­mb%ŒXÜ1¶„[¦Ļ™€n†µ×SŠŚ ®mć ]²xüŠsV+C¬&£Ģ‘¤IŲ‘żkń$Ó%ÓÅhčĢx9갔G~‡?§Ė|ś„„Üš’ŃgŒ„{·†š;Äŗ¹øq$%‚š9¹ŖŠ¶„M”Æ|:’ß,J“Iœ’Zlś½Õ¶Æ#øäļųÕ©5[ķ¾Ue?V"¼‰„ڬ2­ĖÅo@QП󮝬‘Õ¦±,!3ž¼>:Ws}©ZŽčÖŅŗ@Ž£—©÷5|Ģēš<…ękh̹‘V20z~UŲAāϳyB4u;†JžzšµnAŁA®&§jń“+Ķ”ē+\6«i42:ŹĘC“Št­cąŒū ĶQę&&<…Ų=+Ŗ¼xä‰#“jJyć֛ÓcXlcišĢ ;Į¶Œr2OŅ“õ[kMbTtÉP1Œ÷¬Łw<Ļ]Ņ’ĢÜCg#ęNy¬ū-_²īmå‰ŻōX™INÆ>™9‡Ė Ē­mkwj«€Kc-Ę9ö ÄćķŃŪQ·ŪI'ØÆA»ūÖĶŖ`ÆyĒŌŠŲł™ĖÉc”eGeóƒŠV:5ŭݬ“«}œdū‘@ÓčĻ|Ń,“ų,!ŗŌŒOe(gµqz–Ÿ XŽMż-¤hī@Uź¹ē&‘kR­…Į‚F†PńŸZæ«Eö€F$|Žh"Ö9»}i“ÉPF;I`z“Ņŗ}\æ»Kød†"…9$rGzœöƤ¾č›L×õ]%­d•3łoĄvīqŽ„ĖMˆ»3©Ōm.mošX’…NHĻ9«–ŗ’‘,‰~›mŲ}åķX¶W1äž3Õåµµ¾ø·gŲ„Å|ć®k:„ż°µ†ĄæļyōŅ39ķ;W—GhRb'kdz×W§Dŗü’¶ģ3|Ŗŗ”zœ³—C±ÖtBŗE¼Nį£l«ƒŽ¼āņ7ÓķY”y׀¤öõ§&Īg-ion®Żƒ:#HÕØ§øł™%;ś ž•™¬V„Ūū¶–dŌäłŌ¤sō© ń-Äą’/5łŗ٤ĪŲhs’YµG1Bė»8NMzužsØA ßgrøČćš”Æ”·0ē‚{MѼR ‘W<;įŪ=zėP73 ¼C!#Żžu¬ e)«šś·“­.ņĻXŽ7`d°<‘޼V“3ź‘ʏēä°$rEoÉ”Œ„sŲ~Śj’iĆOŌ!@SęW Ė=kÕī`³ŠtéęsēĀÜŽ³nĢĶķ”󆄯Ś\ź P„„9c‘ÉŌéŚ¢ĒnD]¤ł@=æ ĀS!Ąź:ś[ź—‘Ęz8aŅŗßźPŪŽ„Ń1“Ż0yŚMgvZFĻ‹4_U)ieęGźAaėėüź×†4K»";-AŻ0¦L`šŅ1°Jå y®tč%›OEžEø\ć”5ęšŻĪ¦ŒČ‚ū¬‹Ó=ńT`üĪ“Ćśl6š#ų¹ }kŅōŸ²C‚¬<¼åŽzPkÓu=KMŸFK$Yå˜cFG„|٬Ķ,WwŚ ĪxĘ+9-Mv8›ēŪ…žDm­Ē®k$ĄģøPDyąÕņ£žQ§£ŚąNåłĒ'ØĶv" ĀRŖGša±•ŖDm®,ä‡rųrz0ÆAÓd„ĮK‰¢|d„Qr£¹ĶėÆm Ä6ö0 ÜCX0DĶ;®ęr>čžé Ž›0B`Id*|ĘǵhXÜdˆU‹9ē¤Šs,„ņÜÜÅnģąńž*¾©o@ĢłŪ²qYJ$Ö·ņķ(_cć{VV¢ę$IYQŠ6žjM ަ/ j>%šÕ‰ –īŹĮˆ*Pć'ēVtfÕģ„:C\\Ī® ł¤|¤ʃkK*äģ*fsUlüX±k:<¶qÜIĻ™ī‡:ԹޫQŌ ³“k‹„0DpF1\ “CsšŽzõĶ4IÆ ¬ŽH–4ą ōėTtČ›Q•|·s•ĒaV„c)£Ž<1­Z¦‰wwuh’KŹ©fūæA^a«x“T7­ö°•@1ē”ĒéI²ć–oFQ“Ź“Ķ-Žŗ­R‹W²–Ņ5’цFXc‘éADž•„’åøG ŗž5Ō/‰ķlŽ=9iŒœ®[n3Ļ5C^×uy ņŒV1ĒÄO’Ŗ§µžŅ)öłq†E‰õ¦„dēö½ŻÄŚĘģŹÄ;ēŽ“äšģ—1ŪÜ»°ļ3ģj¹‘œ‹ihŖ²ĆDėŠĘŗŅī’§hW  ö¦åc4_Š@`±»U’}«„ūx³¹’DœÅ“ĻZ—PŻ"ų‚Éqw§Ig ģģ{Gr9Ŗ:²Hš“P\ØR<Ģ)ä{‹ŽĒ;o¦\yMx Å“a‡­qŚ“rK|å8})éķ„¶µµŽeĀ:'ašėü7­ŽµkHšN£§Ż.lŹLŻ{>•¬R°łYŅ]ų[J³C±&[‚3õ?JŽŠ^ 6Ķ"¼?0$ńŠ% Jå-¤„Ē:ml«isöų<“ 2t^z‹ź#Ąük’ •|¦h^H搀ź~ąõ5ĀĻ©}»Ģiŗ˜Ō6KećŻJßO¶Óg§ŠDA†v/„fźšĖė/öØ!HØ^:ōb‘ŃxOC›Qctb;wmŻŽ¤wč:§ˆ!Ņ,nm-mąó²I±óÆІģ2›Ä~Ī d(ūäU;H_,ŅōnvƒŌVjL‰-¶ÓJQ/—źøĶQŗ¹¾Š®N„o؋, .F1čj½”*Īu[Ļ]Åww“!}ŪHæ„zcXź·*[ÜNŽį±¹ ’!IĶ–’C<=­źp\¼Fęįv¹_˜šśÕī’[¶šlį½Jv¾@łIĒ4¹˜›G–j\išÄl$yD€)#ź}*AķūČü†rO Ŗęv2¤ŪĒ.§i$Š‘Å„äŒąV犵ū•¼…tøģōųx°›ŽæZoØÜß_\H%”Ķ»I=ėūĆdxn"‰Śč’N Tb ž…į[+©mKŻ8ޭ޽jjV¶ŹĘyłÄqŸēZEhgĶŲēm'k‹©¢½1µŖ°œ·s{kdń³"Ÿ…ŪŽ)‹–“’érj‚Ża`±Ø%½?ė®uX¼ŠįWÉŚC`óŠfrØxÜzߌµ涐n Ė’1ŽkŌ“-=-“ćę”=ķÓąœž?.Ā®öEz}śiéxY"H›åCžAõŖĀÕ-oĢ€> ć©śŌ¹÷5‚(’jAØ:GulUū5Č|I×ķ|9öhķLrŽŹ ˆƒß„cĪtĀ#¼7­é&ŹćQ»-% ¹‹Iō®·ÄšŸ†‡‚Vž;€ś¤­ņF0øėPõ/šČš=ņxÆfu'‚3]żÄŃŻ y!Ż:¾X‘ɬba)jy§Œ.n—T¾K[Ć.œøņ™“k9Ļ8®?O`īU#¤6Š÷śÕX’ŻĻŪ-Ą»BĻ zUæčOØj6Ö°M(ˆpUN:śšēŠSč6Ö¶‘ʧk…Ć)ē8¬dhb·wT— c± Ņ2Ōå.īn$€9ĒZ“Hņšy ¾…pčFęoŗi7cD±¦čė-±[ˆ¢%~{ źŁĶOĖܞ£ŚØŹKS"]&÷P²’cļ;†r+ȼSšśŹö “o5f1ķ,ƒõŖ™-“ą—Ņ~Ń ²É5³«Œŗ1É®vĻHš›ŻOØ„­øž!Žß»Ųąž¦†rSéOƒRx/ZŃueÓ“Ńq«Ē8Gøe6c¢śš÷ūiąkk$T »vßĻœ­ŠĢųėö‡š_‹¤ń“i§h—3i\?˜%=+Į<1āŸ|3×īeÓ­ĒŚ2K,ŊļĒ\W<ĪšiģvśŸÅŸxŠėĖøŅāÄČ^GīīļĘ+žA}soŁā’ž /š°ō¬yN”;Å? ¬ÖÉn¤6J®U@ Ąsƒķ^É źvvŗL–¶qŲXÅĘ1ø÷&©ĒBYę:čžóUKŲga¦Øā"3’;ę³dÕµ‹˜$‚;1ł˜R;óĮśP×C)v;›Eņ4é56»_„ēę5WžūĖhbŗʇļ7„Qń [Yd»Õ-!·r±/īŠõ*;~UĶh·ŗÖ¶öŅX[G Ü®ÜqŸ­;\ĆRųis=ķŽ©©¼rŽ Ż#FąÆ#œ×=¬Śė‘\iŗ^‰ipņÜ 4c%[±éD©³Jrčy«iž'šč»]N[öøó˜;K!ł[ŠzVŻ·ˆõ-rŹ=R¼¹½¶Qܜ(ö¬ÜMAšŁšösŅ–7DŒbø*ŻHżjÜ^<ÓµsT“6K&2,P¹ ē–öč?3B±†¤/įĖVM2ż4ķzõR1łN:ž"¼gCÕ#²ø7 1•–BX±ČvĻ'žÕ<Ćå:­7Ę ©_\ňŒ¬Fą\ž»­ÜYßĀ,®¢ŽPƒ(*łĒSż)sdųjÖęęńāŌa† y†El+½ūõÆ{m?Ć>,Ņ®ō¶»0ķ…Wd_}©`xĻ4å.ĄyWˆ<sj×z¬Śv•k(É Uvč=OŅø “?ZYź÷ņ_[µ°Vełf=ńŽ RGŠO«é“ŸUń5µŽ„„[5Šk„“sńیółŠbŃ^ßPcįDz²Šff?1# ōÅy¤¾Ö"Ļø°¶" `P\cŌńmBśįÆę7ZDąĀ yƒæ=Į“twÕ>Ī×Į#£`¤Kׯ­&Ķl}šwTæš•Ķ¶©k.ˉF欎œWæ|Wųµ¤xƒĆ¶š40Ē«†œ0śŸĘ²näø£óR‹Z±ūMŻę.gy‰Ą§o-Ē…ZŌ“MY,Zā‰7'##=zUø2Hµ=QU–’f_—$|ŠÕĀźz?Šnµ_“ҁ“s„÷W*6H©} źööćMžīā{ø‰wVbĢ™>õGUš¶„ 6rEłŖU¤ņŹEU‡c Ń¼5jmī.®?rŹ˃¹d@Ÿeŗæ›T¾H,#Aå!y½ĻjD§Ń×‡d¶ø²]jÖN 9Ķk~%µ¹æŻsp¦ćīrĆ#ށÜ×Óķ¼;m‘¬F~Ņ ūҳd+ėPkŸ¼=m+Ūč{õ)Č>cH˜ŲAē“śžu?‰5ßø†Ģ<Ņvį2±Æ|×ø|=ž’Nµk+ädulŖsĄļųš å±čšē‰|«;› <i XīūĒžq^GᶊēRHäh'¶PrŒæ+OēA•ŁÜ&„Ś;Cii„ø"M¢¹Ė»Q¦ÜÜHĒ|÷˜<ķ™ 6>ĻYšę™ŖŚ›č‘ŌĢŃ"«6rzRßXŽė×ņ •“NcƒŒž”HĪsG¬é°Iįż W²Óę@¼Œnć5ø.ģ¬,eĀGó ńŅ·„ŗüģĪҼ1.»w ķ­±ŗhä-°Æ9ĘAż+»…Æ4łVęš/š2Ļ|zÕ5}‘ę8šž„āT‚»1€ęWVMĮø­’ŲéžŃo«r •¬m;ķ9±ļPā‰f)ų™įMV {[Ki­®®„Ūc÷WĒjéü5ā }nÓĀ -“z‹¶ŲŠ6YĻ|U9 ōm>;;ˆ$Y&½F%8č½Įµó’!…īf‰¼·VŚ<µčŚCŗš÷ğųFI¢Yā72ptüĘMnų³LŃ|:¶ÓuµŽņs‰ls˜{׬Ļyf†ÖŽqDĻƒ)Tg”_Ż]GtM»4R’SƒŽœW}g©éčļ+Ü0•Ī É Ķg)ĶsŌü²ÜZ‹+Ėöƒ€Æ`šĪƒ ¦µnožąŲg'Č`7{sPfąUo jztŚŽ³6¢.#RĀ86aöēčp+˵˜®%ŌŅyPĘ™Żœ}ßjEĘ6Ųv£öQ¤ŽŻI ¬Ŗ0¼Zć’[Ūk#$LFčĮ?ZhØ£Īu›Ė«€ŠI#ŹŁĖ“Ō‘^‹ąOĖ} ldh\ˆ•ŹXŸOŅ·FŖ'«Eą=!/)¬Fg`ĮXąōĻsTo4cūJw–ÖQˆ!,~VĒ’XŃbÕ4ĪĘĘęŅ&Sr«, ćjøę¼æā?‰ģ-Æl4Ėyey żŚ«ģĒÖ³”L„Ķõ‰Eż“J‰³%rsOšī¾š„ā]”–\žģä †³fG-uŖ¾Æ©Ć~ˆ S8õė]ōÖĘU$}ƂĪx¤ę`[ƒHHdT{»y‚ß(ążjY¬ µµ’RŖźĶĄĘqŠw,ȹšµći_i¶“t¶-’Įx$óÖøé׊Z®óģķŚOĢ2&Ž_ĆZTq5ÅÅ» G*Q’‹ßśÖŌŅiŚó²8ó® ‘ƒ¾žÜÖö!ĘĒ_¤}šę`²4Ø½ŹŽ¦»k=&E–Ž+u͹ÉwaĶr€ėūu¶¹a!v;Hn3ļ^yā=zśd Æ*—»õ¬¤‡m >ńäš]ŪŪj1É!Lc†j÷ŻsÅ("‚ólŖ©—°”°ŸÓ?E#+&ų›T¾»ÖÆd3ī¶/”N„xē5ÅńxžĶ3+)ćiĮœRŲ脏TŅ5­FHŽåĆ»œ/'9ÆIŅ,m_N™’óc“†@N;ÕIt™bĘż,īć·² Ęķǚčģ–$ōĶvZä¦[i-ćó`•޼ē×4FGŠ 6ꌜēɎK©‹n%Žļē^Ūį«'FYŽĪ/“H<Ōfa‘@œ‘Ø_ß[@d»p²s–Œp£ÓžµĻ]jvWöŠ|žc׊bPŌ­ģāµI”VO“ić©õ®7Kšt½‚’q8rGQėIǹqz~"ÖÖ=>āŽŅÉ.J•ó"øķņQüŅ5ļŻź–Ś’Ieį»HŒ÷7 ¬„uė×­5 ”nrś—‰tė=[P“ĆL×6‘Jń£“Ķ‚}sš’Į—-šö•¬ĄÄŹēĖhRĄg­ölńĻŽ »µ›NŻmp%IY¶…Śƒ×ڰtBŗV†ÓOP\D„ŲŽŌÖē=HŲå`Ōµ=Nė2]ĢÄ1`°Ŗ=*M?GӛWWo.§ߜZÜę”m”é~ ŠāźŅ>ĀāHķŌ Ģ™]ź=MbX­Ų‘mī„Qč3ކiō:”§ŚƒnQ#óuĻ5©•¾ßµF·HĄ°ĮZē:iÓ]NE|§]]^ŻŽ»Įc{séZ‡Āšf‡oę«F.6”9ą½Z)›čŽtiļ-ĢAīŽ=æä^MV¾æ¾žöŽH̐FĒs“’]7>ÄK±ŌŪźIg§żŖīp.B±ėL¶Ö”Ō]ņ̳`=O9…Bµä³Kt°Ä„&1¾½%mƆ®%¶ø3ĢŠ˜ÕW‚‡ßڟ9‘į÷Ś4ŖĄ•„{Ÿ¼j]<»­TyĪ£ °õ£–Ʋ:Øō]/Ou‹P‰^āFłCf±ü§ivhš^™ŗūj v8aƒŽj%QšYÜĢŠ„š)Œ-l"ä‚ ®ā]B+3y2yķ÷‚” Ā„Jś=ģX»ŅF÷w3}x|cEy|`Ś•ŹŁ[å¤Ś§åSŒ9ķŚ­=, †lōઃĪūŁ ĻŅŗ -sUņ§[Łcެ[åSŠŌ–£c˼Uj¦ņmHÅŚrTa›µ—„j·ŃBūg‘rķ[EhtAu;}+ÄŁŅ›©nbŚĆęW5m\x¶{ł%ŠćH¶` ʚ±J'ƒjVVi©Ź€å\ŸR¹Ø¤¶æ›tƒzŪ«1Œ‘RĪVŠĶ7˜ī„ķuć‘Ķ=BŵĘņĆ#ÆZĄF’Ķ˜[iĀłT›¦Ģ`ą®y"„Ä»dŠs9s!`.?­CådĘc\ć5ŌTV¤žhX<–ģ[nsĀūŅlm”Īćß$6 ³1 '#ÆzT1Ź#ÄlŖH\PiLҶø.žaĻ'néZ¶Ö{eū\‹r6ӓņ(7„nΚŪMŌõģż+ĆAÆ|A{:ŪX[¬EšęRp~5żU~Ą’°ǿٷąØųćæŻ&·Ø’¦ŹĒŁ^@ž˜‰4£sӍ+Ÿ·ž#Ūźŗ“od˜ā2G# >ł”ĄžµöV›vš½¶”jźšČ»øžé\2‘ĻR&o‹“='ÅŽń…5£é­¤–WlĆ;7)‡”篽ŸGüĒöMÖfƏ>!šüŗt7šr`p‡äŪ*ĮĻNJø>‡Šüх’Öf!L+рÜéD\t•Ų“—VĆgŅ¢q¾ĒE7cė}7F»Ņ4KpĻo*ēt­’Ź{ĢW“h„_Ē*DMaŽ÷ƙ«/{C³Ś„ńiz›Ż½ŗÄ¬»L‹Ōė^›ä—n· §aū§Ö½,¶¢Łžf"Mšö¾|…æpʹĘOzķōˆ€Į•™G œuÆ ƒŠņŖZ—‡mnY&Ź@ĒoƼ×SÓ#·ŗ’ÜI$¬ŒpĒĆŌWT|ŽIJętq}’dc3£g>ųÆfŠüĮešÆļ··’µWī8¶/‹ Õµ f“ø"$} óŪØöÆ;³Ńļ].Ē„³ŌÕĮ–m“ˆ-٦ĄūGF8äVī“ FO6C¾ßv=³ļV ŌÖ|#*ŪĻ%ƒĒ0ĪTšóķ"k%īRõb•Ļ#Óa*Ąó[öŃ=˜2²ŽN8« ō/ 5ŗŪO«‹€GN˜ŖšE¶±Øk·V70ص(ĄżįZóIāfOĶV©™¼sX?Ś¢5i‰Y²0ū† \×5$³Ń£æ¾K»|ÄÅvžxQō¬§_iš„Įŗ‘^Ūq1•V€uŚ Ś~¦čn°ź*}A“6ķm.%²żóäAX\ø«ž;ę­ī”zŃQæ#=q]ÜKiņ‡`NŃÉÅ#‡u©}švˆæwqڶtŻI-ćvŚģAĪŚ kK¶¼•ŠBPÓ®Eoź–«§XHŗAĮ?įM r×2šīŚßLó »`ćZ»öė ŁČ“A 2*°Īyž5„Ձ®†Ā[N“QPĘ@ä×EāVµŅ4+‚Hę$6v‘Ōڲ‘äWژ¼–Ń­R3Ļļ Ÿ¼=«¹Ņed łIŠD‘߯ZßĒ*!‡m»'ŹW×W‰,ś¬–·N°rW sœPgŹśõ-éuK„·†HUŽYŽ6.:Ņŗ=+Q·ž&Ņā‘į_!³×éPāĶ"ƒĘ:;ŬrM,¦5‘†zŚø}#JĢ‡ĻcĶßéJ1¢hx‹WžĘŽh»ī„%~š>_½sÖÉØIp×…ŚÉ“ėšŃ+£c:H$–ģyķ„ĪsÓ§m§¶¤Æ(’§={U؁,öeśœ½j(°Š²·ī—9Ę)8ŽåŻ/R$‚b~P[ųyė]\‰Æ„1ä £?Åō„`¹éńŒvīE“PN6äØĶuW0Z\#Ź€–Ęzē4€ā.~FŻp†&óŪé^oāeÆģ]ZF ­…RyⱓŌ.t~ ³éĖØ°evänĻ?ˆ¤ūtö³4k‡čEl™Mōfł½ūMÅ«ŪĄüÅr>óąšQ’×®ÄĶP½ģ;'߂ƒ‘צj”¬dŻŽ¬ZA弯¶ yø¬?ōx”1—Ę»łrŻ­|?§Åot·’;(ݳ#Ÿs\ģŅ4ūœ–·gg =õܑE+ޤćv;:ī~čßkŌīę¹ÓåšŲ€!%šė@łz£ė[X-#HŻćO1NX‘ĄĒjņ=^ŅėJŌu £ØŪ9ŸrÄ@PōÕHÉłžUⓨŽĪM‰Ói=Mrńéo¦l¢-ź{Z£¤:Ę®č‰ ŒžK63‘Ž» łŅéįe—s’}y čŒ­”§5垟p·P>Ż€ē=ėWøKä’bĮ]¹Č¢ĘŽG ޽+#²‰į?75TŪMjŠXHŲ?7҃Éß=Äū`€ńÅiĒpÉ»<į°i7Ф÷÷o ŽBɞ€cƒ]ŽKUµ€±Č¶jSW±qC«±šĆj“:Ć(n:āŗ{Xé°5Ąš=ėĖ‚rMUõ±Ŗ‚<æYæ·»†!bÅd;Ų¹ éQ4M©NĶĢŲėLʦ…xµbu;•Óv£aČóUoŻ&i"¹³ß®*dŒ¹Ģż7EŸP$‰·Z䌏ā­9“;¦ŗPš§Ł“€1ĖVn é§+e’Š5}/Āś-¢K˜$[Ŗ—üśTś ŹK¦Cqr LĢpäf³wčl­Ō»imb²yQŪÅ#4›‹ØäčG†¬,¦žÕū¹¼iQøÕEtnĒćĮ{wŒl6ؤ²÷äÖ&•¢&²æg„dcéŒVœ„3®øšķō øFBŻŻk+PÓ.£Ó’RŖŒ„n֗!œ·7-õ(›OKXąHßqžńŖ“éóK¦]N–ė,üģŒu#ŌRQč$ŸCŹąŃ§šhåh„_,üčFH5č@–)Éū sļZؚ'Üļ­-’žĀ#;l—ØĄ¬}CĆŃĆØyÖźŖ‚Xõõ”·,Üū6›¦iwW(m¦šH·Üą’xŽ‘<ךŠž8DN z’äĻN³Óķlt·i‚Ā£žˆÕ;­lŪđ¤ĢčpF;S±“WЧmātrÜJ]AåG„fĒā¤3\Eä²[>pŽ•lp‚õ4(>ĢĘ5nžµEn®…ĀI>õUo”śÖMÜŽ1±f(Ö]IÆ]īsŅŗ˜c†ĶÜą²pŅŖ™ÉœģŚą“ķrV=ģØW/cØ D\É]DŁS‘œēŠŌĘR:(­¬®Ź<¹b>t=»»ÉķōķOĒmo•^ _SłŠRæR¦™Ø[Śė–ĀķžŹdĖ—nT{q^×­’g,ęūOvtģ[©ļAжĪKŪŻa®ļ¤’KR‹ń†¢ÄKcN(/¬ä’6i€ŽµŪÜŽßZéqłÖß3)ĄqO”‰ éŃB÷RĖjčĢ2ŽOŻ&»[ME-m¦Żīt©:"sńź³˜ćŽšŹ‰Žwz·b¾›R“XRēbī8éS$Θīi]XĻ ńvUµy/‰ō[OQūUĀy·GĪG8‘Ŗ‘ÓG£ŲŁxvļcw»3o~~]œ`~u‘ā;‹[Ųōų“ėwuU ä/­¹Ši¶>@·ŗŒš¼z×9ćKˈü_¦iś]–¦¶ļ*ł§aĄw8ĒZÖ$øō9o‰:lś&æ}„,ĘhU՘sČé^P¶ļ±‘F;sÉŖ¶6­-–鏒ŒóڽGĮkai4ŠU$rvš>ķGyā;åҭ潕-ü¼ē«ĒŽśóP¾Q%,1’Ł=h^;9crÄēuIw§½Ü%ķXyŖ7AŃŌ”į]6Kū«™¤™€Cåžr?*ś GÓ ¼ŽŻw †1Œć†5²™Ü¦©i„@Å&5R¤ōŪ[ž…µH÷—T‰›Ųü¤T"e#†ń>š·š»M ąŠ=‡ć½y'‰ī4ø0Öp'–0€g9=*ć#3‘Œć-³'e#„`ės®0Kh|éFAaœ“ĄŹŌ<7k‡īŃ£·mD[—ó2Wœr1ų×ɚoƒ.!žāo!mDīC#œ‚¹=??֝ÄŃō‡Ć;O{xPAl\Ś1Īzšū'@ń/…¢³™ÓP“Ž„® sōÅe)tD(3É>+ųĆJxˆ†HĶźFB7_”zcė_šŚÜ2j­ķŃiä”cüŠĢé„lt¾ó,t-bv*Ał}kڼ5ikk`÷šł"÷”*WpĻ=˜„‹ØĶ ­ģ ;–,§nqT¼Ajö:c5«+«ĘYŗGc@®r±Õ˜«ö:eĢW÷fīŻQU¶ĘČ"ƒ6›&ÖÆ4‹uK{É å²0Qœiw?hŠŚIv¬%Ó·˜qJāq±įwOꋯ„&÷aÓ”ҽcįōKm*ŗż¤ĒäĮ?…iXĪHōļ Nŗ…åģ:šŁ„J ~YLH„wėߝ+ČuOų‡OńĶÆ…,“¤]=̆įpAźqœęœ§ŃN ^7øŃu½.ēƗ•ŸŚ¤c!’" «öæ ń]SĮ÷žµŃn!Õ¬¦K‰ Gsķ#©ō¬Ī”ze愓Hš†£ā †ś'™#ø™$ŽØųū všÖ ?™”A#˜]ĒŽaŽŌP)=š'üSŗĶ–•§JöŗĄ$r˜9ĪOO»_FE ‚OØjвBČ Ā„ņh1<ļS¹ø»¼h“ō™¤‘Hąž}æZ¹¤h“Ły(Øé9#“I™ŻģtŅCx”{Š«„ŚŪŽiŅj1Ü"y.3‚Æ[ų_„Ž®»kā9›ck Ÿ.æ68čŽõ”ŠQ=Ö퓯YųƒWÄqŚĄZ%G9'waėŠųĖP¶‚×RŌ‘¶Ē%LßŅ Ö+C[KŻN{(-^Rsƒ×ė^é¢čÓųoOµķł1Œ‚ļAšč@ćsŽń/õؒ84hć¶ŌIÉ,2Gҽ[įÅ’ö†‡ØÜėZ‰½½wČ\ļ}*f“0–‡šZxŠīOKˆ¢“Ir€~=yÆBŗÖå×f‚Īźx-揫9ėĄ¬A2“vZ¤{i¦³„ØSūÄź=Åv¾X°X¬„Ō¤yr|Ź }+)2ļ„GÕõēŽk0–K‡łšLü”Go­y‰–XžęļPdK@HVģ~µ ‘srł,įŃ,n$š³Ī &wcڹm],ķ“6½i#‘X@„õǵZ“*śXłīŽ ūŪł.ēcƒvO Zé¼Aćéōm*=?J¹ˆ^©Ż¹8ˆ½+¢•É©KĮz¶µā½N1u«Ėö(°ūœ1īåP|FŌ5+o}’ņņ_²*#þxūĒō­MčŽĀ×ÅÉ£ųSN¹ū@ŗ¼pĮH`Y1Ą,+ʵżŖ_0—yIĘsŠŌIh>S§šœowö‰¦–I#EŽrՁ6±qź–oq¾N— °¬%±„£cWĄ Byģon$ŽŻ#gS”žŖģuGI…„0L`UNVCÄw¬łX(°Ņ5$øžßĢ s˜`=ėŚęŅģ&²Y­…L—Jø+ Čäõ/ŁŲé·°¬č°Ŗ·Čßt6:żkē9µkBćĢV„|”GCÖ¶Q4č·6o ČNėZ7>MRŅ;¦ˆ¦A †­R¶†ńŠHŲšī—eelŃOi~ęd^G½vŻųoGD’śie¶å¤ ŲŌĢ#iäĆAģ+HĒ]Hr±čš=ó-ضžŻgC­×“äÓķn]!³Œ+ó¼Šv°į3¤±šž‰„@ļ<2Ļzķµ@č€zÖˆ.ķõ/ x‡Bе§]«4jē^ąŸZNķPØ|į§xRöīłtė”qó°g=q_rĀe¦ü,šU…¤ó[µÄ~prwvńøu®·BŃ£øK}BńšIGĖ…=*]3yi©£©é+”³O5•€ćŅYéļ č©Æ_‹)nIh–&äōūŲ4•6cn§šź~'MzŅņŹHß÷ ®ŅC;}=«‹]"šCEĘC% 0HōĶE Č1 ”ō«wŠO¦Į%ōIŗDÉ Ć?˜¬īTķwcÉ5[·ŗøV¹š9n„=øō³ąŅīÕÜŽ 8 mMō%m ÷Ó'Ō®„W€ĒģtĄ5é7gL±ŠĖLŠŅ'`ętÜY}QVhhYx?M{^{˜óņ«Œ³Ą~•sśÅŒ[ĪmTy;·,}j%+ha4™ęŸgżüŽ gĪõ¢īČ„¹™¦@TĘ:sX¹$G" ±†(āJT>ż+J+fmūC1IJśŹ6?@u–Łå­Ą}ŲÉėYj吩łŪ§+¦2ø Ā1椊2u ? …d%Ó ±—ķLÜlfA-|„v9m½H««Ī$U$qœ`š `\…UŻŌ# €/ÜĄāŗAŌ¼Cyeįż3LÕubź@Z[!iå;ŗŖ÷ō)]ŸøšMļŲā&ńėĄž/ųfóĆzV©ÄzMō’"øÄ‡=:ƒųWõõ¦+ų£T½ŠvIlMŖ¢żÅ@ ēė\µēŠōl—®<3wšgāŽ„įu»·ŗŃ&c=Œ±·Ź 9x—žśĻē_r|5Ö-Eke‘¦†pd‹'ī>yι^§ ]Ī2M+lm>Ŗkń’ž =ūŁ|żžOt+µ‹Å~ŒGØīŒš šIź{}yō­į¹É#ųJÖü9Øé!Ō4{ņĀhd0Ģ„6“l;Ų#‘M¶ž]:öĪKQ ,šOcN¤¬“4‰öUœ‹|;gxóĒżŸĒ…fĮFć€ĻjöĻųq-mšé„CŁŪ_'‰•›‰ÓOS²Ō"kx¼¹6pUõgšŅųoā)uHč—ŖmeiYmŽF]GJ×WŽJZ;žło§ŻŪłJ˜}Ü dęŖOؼ8†'łĮĪģtÆØĆJčńjEÆ5½ZņśŅéēšVQµ‰9ȁüŖø†īv’hę<œq^„CŽPFEõ·śI‘÷@qßZō_ ė0¤+cę‘pŖH^§¢BµŽ¢W”2±&>w6įS­„­Ź¢OnĆq+Ń}«xĒ ¤ģrśœ†Żn$µ‚)\„õĶyī‰ćMNĆR{6*¶ŽłHĮčGRkEO¹Œ§Šō‹æ»6“c7%Ēį\­²ÜŻ%‹h “!č L£b:˜"šŻÕµŹN“o‹håFAöØt…ž6&H¶•n¹ļC·BāŽ÷JŻN" KN;WE ³ĀZW 2óš9$Œ‘u5åäŽsn#„V›P¼“Y …DŠ«‘øœjM™Ųāį{ū–‘nć ½É;Iw~Jš×™(6§­é°Ū_JdW”’GϦ·i­xhż…m¦w̜äūŌ)\ž[×Ų.䱘 Xīöü ž }kŃ<ŅĒ‹RņŽ]¹ CLmŲä¼Uukeāōū VŠ9£2;’0O ©ą¶X ŽźP6gy ‡#~Ū[°KB’Ø,”`Šęn|ežH1*QńŌzRq5ŽŚ•į7z™†ĮA§i2Ļ­r–šaŅ'xn›,²žqļÅJ€7cŖÕµyÆa¶Y”ŽBˆĮA÷»ES} žĖę<§r®į‘ŌP×Ryµ8I,^yZxdŪ—ļUDZh”ļSĘOµD­Šqey©,B"ÅØ®c’õ­mābFj9Qwč69¤[³oPį±Ö¶īu'“·2€²8a†F=h°<øk¦“-8XƒŹ1Ė Ó,TA JŪ½óŚ€ė“ ¢ņ]Ą%•ƒ]öUަāBŅ*BįHcŠ}(«iėó4™Ž9R}EwZˆ„F;½®6ķb“E)4q>»mD\!ŹV!NzśžuµtņéĄA¤²ɑŗ 9F›¹ią·Õ­ ¶¹bĢ+YšjiĘāO*ņ ŖĢS8œ¢im,Ģ‚m廘%ŗEĮĘ8«ÖšdsF±*‘ƒž'BÖŖė¦Ū_hlŽ¤W;3yj·vųOpzŌĪ+]OHÓ5_“č֮Dz¤‘Œ‘^oā&ŽM`$ ¼8 N:zęƒbEŅ,uMÆ!9&Æ’dĻfCz)ļÅO"˜¹Ņ5ŁŁ×a#J§<)§]G uĪ‹Ļ5ItČn<9Øźł¹µFyNGN«Yx#ÄpĒ kg$‘#૶ьż)’é‘wį¹g†Ų¼+ ȁX(ėŠŅ³ŅžÅ#bæ(ėĒJĀJÄJ6:A X_‹oćŽd P?Mýjjŗ›ö+‡’DłīŃ0pF:ŅH†ūž]anńNTpœŠācŌõęÖRßgäJŚ*Ś7©Ņi“]É}mŖ¼aw“}…wŚ„ƒÜ@YزޕAÜ®×Ö¬w3ŖHåO„?M×.uHŽĢ"¦Ē…6wäPZs’ń-å¶£-ģ± w5lÉå ]ŠßĀ84̹mØ„ģé½vščG„wm"źAHĮ@W?Ž÷4ŅfWˆ¤²ÓōI&–śy•”"²œō‰c­XŻĒ·øŚUŠŽC}hå7‚Š’ėGÖ5[Xą[†ŽÜIę£ļ±¦éž Ņ.Š:7Ł08Č9£•æS½»‚łlķĻ1ūXćÅų‚VÓīģ”ņ·™8’8ØheCÄLś‘Ņ/,ŚŁö(ę2ķ×׊±¢č’Aģ×lˆŽäEĒ#>•œ•†\Ō/ ÓģlōųHźŪ˜ƒ“ųžUbŪÅVwĪ‚łUīāPŖF8QÓ4¹™²<×ŗvZĪ”%Ā?3įIn¼WgœŸŚ x&‰O—Ć6{ÕĘWŠ$ģTŅ`ū|eŠbbp»[w޳{oµK2¬Ų==ėhÄēnĒassq©ĀŚyó'ƒī„# ×7 x‹JŌ΁¢Gqo1V“f7ŸL÷Å9+śŖŁ[»¤»ŁĘ:÷ö­ķ#ĀĮ“½FW–ą#/įyę³7†ĒxsIšŚņįłVŠä:¹÷ÆZÓ¶ÅĮĄnõéAFŒž¼¹Ņ®ŃĻlĢc9­ ;[ŸBµƒH†8#ÓćB2¼śYĢ I¼e¢ŁŽŖß\ĄĒ ēłŠäõK[ļ:[V·xYƒ §Ś³&M:`_0mŪ’yązW;ćBņĢöźÖźćnFkhfˆnmob¼—Ģņć-°&_Ҽ¢+Qx±›¶ŸN”IŅAoå@cBØŖŚ\½įu* ŽzœV&ń3õĖyīąp{0ĆõäŃxbx„ŗ’ż¢ūĒĖ8äzi ³&”öžI°V,Ä źįŃu}&Ī{¹cøkuČ ¤N§šxgÅzŽāk·Ū}¶'ސ³& ē“ź}ėÓļ¶”“DåĪpG©rCĢęń¼Ž æ6öęņśćrBøĪoēX>#ń†öńF$āF˜e6™ćęŖ°ŌK…æ‰^;•Ež ¹Ęģ“YS[]Gz¶‡(…v`ŽI¤ā=GÅZTZ.É]±S!UöĶ_šŽ“ĶTj®«i8ņ„¤d!?ʈ²=™ėšŻ­®¬ņÅ$;€Ü†Zņõ5ū™uKØ-¼Ļ%āRŠcµ2”l|ĒØxWUšö„srĖęŁHķ&äåSÓ?ʱüK©Å{mil&[˜™2Pž2ŌøL|#¼ų~žF”oo\^¤ücųWšwÅæxRŅ ÜxgkެL.ņēå9’õSQ±<ē™xrźĀĪÓ[“S¹l/źŽOēYVzõąöńϾpé“€Fr?„1©#[I×®oKŪĒę²>\`qW5K{{ķFŚ+‰†ŁŪ˜8Ž;wĪ £Ö“OiVz=¦Ÿ§išĄšĘŹ:·®i’ųr ed°^ädī’OZ ¹ń[ŲŪ^E=ü‘łŖ6dŸQ×ü-k©@’Ų®ėœšF¤üˉękąfŠ%0]li¤“ųGŽ=±Vūhm4ł`²žYƒJĶņ’¹éž1ҳo±FöBi3ĻP¬ńĘZ$ē;»nÖxVŃō‹)tXaŒ¬¬e!‡Ģ ō=@ę—3&R±³§LöŽŠ¤-¼ąœņø<āø›8RĒQU·>mŃ%a»”ŒÆÜch³<Œ.ĮŚG;G­N–žšÖ›ØZ4vח’˜†ˆõēó¤j×cĻõżJį-ģņ›ó?ŹÜš ž*ōČŌ¼2žŌķRźŁń&3÷X’]L¤e±Įų³į•·ˆt9­ōku“Z¶dQ°įĄĮٟÄs>ń咃|6ś6½Z}čI"ŽP‚:śTī+Üń›=FŅ}Z×R%µ“ ƒ·nOS^ńci¢„“W«YĻq,Ŗēę\Ž?ZnžĢź.ü!¢i¦ Lļ¬\¬yv_¼¤ö k€‹J¹±»žćO¶™¦”ąķ\0ņO°¬Ł\„é5‹ś=4Ł.?Ö<ŻOšžu³”ų—[¶"“—GÓŽÖe m#Åxėģi¤O³C<;¬ĖąĖmoRÕc¹Ö.Leć‹yeLtWžųoöˆń`Ō^ēNÓ¢ŗžG!mŌ Ū3ՇlVŠ=Ķ”;š:÷ĘĖØ­5-3VŠ® æøłĄxēĘ©Į¦ŪŽZÜ\Ćhד©1Ę2T)£«£|4¾Ōnlõ•ž8. ˆÆnqĀĻnõōF•įč4]XßĖų#Ė`S’Ö ĪI3„ń¦ÆkŌ2ĘźüMĪzs^#ć?YųSÄŗD (“K»ˆČā.±Ø’…L£rįHłoā'ÄYüI}mmȞ¶‘ŸĖqóēŌ·å^ŪšŪĒś­Œsź®,5H£·Xģćg`=O½sĪ ė3®ńĘkßhw^ŗŅ¬mĢÄE'Ė‚¾øoƼ»YųGŖ4z~©4–°[> ä¬OjĻį&¢°·zčö2-Äh c żUČźķż‘£t.0Oǵ_:9„±]5‡Wvbé·¹…tVv××ĘÕ”–5]įœČ26皓Ɂī2]ZAjŃۘfO,.å\tī*ī‰āX$–ÖŽå$¼„IĖø^iÓZŁjŗŒómµ,B; `žŽõćŚt‹-åĆČžz«Æ· ŃO¹“GqāŻAõŸ‡ŗĘ“įūØą¹‘b„ƒ9=ń^æ 4żHéŗLöz d¤¬=Ę1Å7$TbcųėĆV™ć/Ą¾·’āŽĶcŽēÉl‰Y¾ńo^üWÆkók6‡Hšż”6÷i"«ć#xąr=ED™v= Ńl4æAż·©Å¤˜F™ĖÓėĶ|w!Õu ۈJObw*ö÷¹X…“Ė‘źF†Ó‘’øĶzmö›o«čņK Kqj‰—Ų ü*®Ö†r—C"Ć@Ņķ’ię³Y%xYbv\‘Åp œöWĪlšF‚REĮ/éŠb†ŽĒ4µgI}j_Ś kt|n©’" Šē{éÄsÖŽžYŒpää·¾:ć„fxGötń7ڤ½ń%Ģ3Ūł˜Df†y<jČŃT±ÖÜxHš5ÅäV±°Ul ó|WĪ’ƵjÖw‹hU”ĖŽ’ŖŸ25‹ģy‘ø¾ie‡lČmėŅ­Ųiz¤ĘJ… ’ĘØÕ½bÓ“‡š×‡u)ŚIģ!]›€Äš?*ņ H/µ æœ4Ķ».@ą\ˆĘĒw6—&›jņŚ VR¤dMrVzEęØ#¹2ÜmVĪņŁĻµØi3Ó¬mäÓ¬˜$¬€ņ®V?ėzݤļö”e*«ĻŹ?:9Q^ĢĮ’ś’ąQ¤s¹²Ą÷®÷Āsi·ž]ā9ąą·µ Ų–¬zL›.ļFŒ¤*rN8Q^›„ °†Ę7ŽHĮ ¼O››&R±‘¬ŚÜGlŚ…Ŗ$¢3ūęŻ÷ļŠņĖĖ›mMˆørŽ_Ģ;dÓö…s1!Ög‚ >Č pķ*ÜņćҼŚŪķ:ʰ‘ŖČ!n8ļRäµ[Gugä"’šķ]ēœąŁ- Üew>÷įRć¾”c24iorų-@Ą?Óéļ\/<;}£]°k$hālåĄ!ĒŅ„2łlbń'Š ŽÖŽŻ”“»².Æ4$mT'Øń®#Ä7–ŃXIc£ŁŚéČūŻʟoZ|½ ÖŚœ×4[Ić‚Kµ¶b1 ””<#¦j·ęś&“{ņē'§Ņ˜-5=ĻĀqéž“y-fH$•LoĒĢÜp+‡ń?Ä %'™ZĪŲ!‘ĮūŲÅ’>eŌZ%swomö%7—ļ[ƒTń“ŲŽO(“bB6}+XÅŹ:XōĒšLś]“ĮjZāiŲū×uą[‹b.n.O÷Lj_Æ5v3qÖĘę…fŅŗi[Æīó¹ŽrĒÓ5Ūhš W|ˆäu*$ŒģZŌoĪ6”…uĘHĒCŠą£Ó#YMō)’S™pAÜŃLøy—ōŲķÅŻÜVv³Ź-“ŒAķ\ŽįWĘŗĶūk 4:JMˆc˜ķSŽćž•gG:[»{šŹckm=•Õ† čø+• 蟉ų{g£‰n/-ćxW‚2zb¦Hӕ=KVŗ•„Čm`–WØgP ŚŻž•ēš“ö–—·¶Vrł÷a¹Pł#=źmŲĪTģrśŽŸtš‰Q<Ł~ņ‚qĶ7A¾ŗiꉒTQ€[ųIō¤„„Œ×cčæėɧi·cČY)+ƒƒŅ±—āÖœlu+K[[Ö ęŗd’=åT£Ü£ē-__µ›YøM&8ŠŽ™ĪkسŠ{˜’CžćŽW/Q&ŸqsĒmD\g9ėō¬żkRbžŅFżó6Cē+­”ŻfćVMIį¶ņĮ q’zćŒÖż¤6Śl‘āŽRG°jDK±ÕišEö»ØBöÖÅmcb^g`«ŸLšķ5[‹++Y^ŃöE )Üęé€*£~†\Ē}ā‹+˜ÖŚ2“ÉĪX’į^A⤇P[› YĮ)ŽīkTßSHĶęy-ųˆ]²ĀpxUśb½BĶ,¬"g•üøUC9aŒT¹ō5O”½e©čš[ÜL’f6ę2Žc¶{ęøķVļO׬Z[-\b HUl¬ĄńņÓęę6ž¹”ŽŽĘņĖ䩑¾`3’×­{@ń,³ÄcøŻžGµL¤&ģt–:Źh0 !aIʜvÅbk:õö”䘎³‚ą¦Ü‘õ®y+ Ģā¬ājšĄŃīr|ĀŲąąŽ‡µz’ŲSȚT“µŠÜösZD£žm=²°«B­†$tĶy捵]BŹęŅR‡kydč=’Ęŗ ēč[šŁøŗ@÷.Vb¹*\Ē|U ķ\ĆrŃJĘH‰#“ŒĪds„¼¦;Ø'P›pźWīŸPkķ®§›äbńdÅr43],¢D÷Šq#挶tŪ[„¹ŁjŖŹ0z㱨r¶†sgčWÄ­[šē‹5ĶTÓ¼J+“ •b<Ž¢¼ē"$ņĪ­œć·­zŅ āL"ÖÄP\Kc)1młB gėQ¬FEbŹŃeČZ Ų"Ū@D’c;I=ŌÖ„¬w *ĄŒäpiSŽĒg¢ųÄ~'ńąļi×:§‰ļ0‘[Ē}Ģzté_ÖēüGž ©”~Ī^šßĘߋVÖ~4ųßul<:TtØĪN99ųŽ:ńÓ4U|°æV{ō)ņĀģż“Ņ| kāÆKƍ-,.%EĢiŅ1śWµhz:čwKdŠ <īŠó%Ø„Pä~8ü:³ńgƒ.5+KuOéĪ/,eDÉÜ¹ŹŸØžµäæ|\šÅ šf²gbŖ™å%S†SųƒV‘ĆRGښsĘ|™Ė-ń’;”ā-+D×-u; bĪ;Ż"öŻģoauÜ­q’=ŽēZ@䔏ąož ©ū(]žĶŸ|IŖZiGLÓ.Æ&ø‡Šõī•ōąŽ=«ņ£QqkgpņKv‹©2“ėNi=ʉö×Ƌ=FļįŌæŪ"hB'”Š  rÄ}wžń×Ū‘ō{Ų®"•ä&)a]AĒż+åq”ļ94wӍŽžē]Ž9nlo€ó€Ų¼ą©÷Ø-m%†ėI×-\H#Vįūžf°”ī“Ė”n}g§k w„Å#HāõIį}æd]ZOFņÌ{šśœ$“<:ń±»eåyQĖ'—m)z¹fŹö-A>Ļ"Ŗ±9#ųEz±•ŽN[čki¶šÜ±“•TćqcŒ×s£iVöó„Ģ”¶)ä׌“ŒŹå¾§°Źž»Ó­ygR%ó óŪJēõ WD[¦Ł²¬Čū[Ē„tĀFCǼY<¶1±’)€NAś×œYڄ֓·1YǰsĻzÖ29jhz „œóJL`²/Ķæ­v±Łéļ\ŻČ–„W#†Å£+čs2ė\YĻhaO(>D‚ŖAifhŠ:*‚ÜńYšDٲ¾0™įgW<.qW5-E^ŠŹ…„Ē–=ŅŹ]mąģ¦XńĒžOR}k6KmóždēŽ ¦=ķ`Ž[xķ·ģbn§ŽÆß@štO,Ŗßg“ŠŪÜȎś×RV]9–ā%åŪŠ×=ØjfŽO(‚äsĮč+H>†RLč4ķU-"WŒHÄćŒW'sgv5YžŚŅ`e̊ß„heĖ} ;m)¼°fC»“Ūń¬k”{m©Z„¼sĪ„€L‡Ž”“.+³é ŪÜĮcnŗČW8^9Åy÷¼2ķtś…Œ;īē8Oŗ=+šSŌė§JŚ#^…E†Ut˜xc5§mo%Ż«ÉcG6:(źkZrC”Yæ¤jśešZŽ<ŽTēčkoSŌÜ ä€¹9ڵ!»·…ļ-„]F'øģr2ٰj=WRÓ¤’ę.ōFįˆūŌģsŹGHn¢²Ń`’ĀO=„„ł”Ō>Ÿ„yżµ„²ĆrŅJ±2ŃįIÜi\DwūŚđFOA\żņ‰mUäi6ƒ»ƒ)•b[ŹŒ3 øĒ#Ø®£JÓį…®Æ Źć‚‡ŻśSŒ¬7†‰ž}Zź’ ]0¹Tä1^—į}½§œf.Ę1ō¤T]Œj y©É0#QĮĒV>¦¹†»–F C“…'­&†äYµŠäM \(^ģųć>•™sÅņ܈Ā0’fƒ1lī¤o0’HÓųk®µńÅĶ”6Øń²H÷üéÆ1įæŽeFŲb~eĀjåö°žR$lŹøÓę`ŃϾ§-Ŗ<ʊϓõGJ‹}ø¼¾ˆ£6X·ųT‹”£Æ^[ŁŻŲ[Ć$,®‚BŹĮ¶ū}y¢-^Ł”Y$R0Iõ ÕS{ņk‘Žhą„»C&įŌõĒų’Z«ƒ×R…Gąc=­8ō3$[§-ø26y8ģk MĢåļĮįjw/mm„”ŗtŠ(+Ęv0’õUęÖ§æ·[RĻęÄŪdķž)Ųcōńö<É ł‰Ī ėYZŒ‹)i(ŅnŻĒjEr÷‚o¬VĀs{ Cr¬J•\ńM›[ŅcŗūAV$tē!“6”aØĮtQ\nĪ=ż+Ļį±ŗ†āšČąÄFÕ\v¦ŒÜM7ó]YjŪIŗĒb°[€® īĻTÖ0Ķ4L¬¼©éƒ['Ųi›£²iöŠ%ĢŹņš­ĒOzķīlēŌ4skjĒjž7 Rņ6VG-=«[%ŒöńÉ0<äV5Ž›ŖŒ£0ĄzV,ÖčnhzŒvsĒy‰?,śīŠ­Ī•ŖIwå¬Ź‡Ėńŗ„¦j|±©ų³V“U»D<ņŖwœ“ōÆKšž©tMœś›“„ĮēJ¢%4:ŻCY¶žÖāąVlä?Zęü9w§\ł÷wV°Č«¹J0Ą dfŒŃÄŧŨÜÜĶgXšFXņz ÕŻ7ĮÉźŻÉ"ķÉ%1ŠÖ‘¦S™źcÓÓĪv‡Ģī:Ńa¦ĻØŪĶS`õ Nęg9§„ö™-ž›~Vį@ē_ÆB;0÷LcP‘éXIu'šēg§jZf„ń}Ŗ41ädnĘå¼]ā„ńWˆ`·Ó,ŚŚņ"«g?āi¦e(Ų®¶±B^WāDJēóāøF/.ś%@|’sLƒÆŗŅ,&³²ŗ…£E$ ʑޭŻjŗlpŪā2ɃӖükĶi#µ«YīšY‡Ļ 9ÅrąŠ÷TVņÕSŌŠGTY×hk\ā'jći¶oõ[hÖ{xī ø'“éWÜ%#7Į÷·ö·R˜§d„Źšz÷ÆnƒSŽd]ūœżźŌÉŌčj^xĪ-”Ó®Ļś2œŽ>ķp:‘ŅõKye„2Éę~ėwaė@łŒ-C˵HÅÕĢfEłž~õ‹®ŪiҤ2ŲJīƒŸ~ų §±ÄŻ™¦pUŠ(śŅhźśœ7q<²(8ŪŽ:ŠfĻ[—QŌā×tū™„‘Y²·ÉŒ)žµ«©-¶½9™!Už4?Żk9®£zņIŠ‹›|ė…-ž+Å>~— ¾ž$tWMÄ1Ą8¬ÅĶcóŗ(Č4Ņņ\E»Šóčj µ%Ģ]>Łełżį ĶXĆ—ĖmT~aøżīkbŽ›E†;}=EĖŖ2œas\޵y%ŻĀiķ$q)ڧŸĀ‰nÄ֒j-¶[łšSŒ~t‚žY"ćjõ {Ņ"/RüšR<-—kķćµĻ„ŗC;#Iąę°{›Gsŗ·ÓĖ©M“¹ĘkŻXͤΨȒ•ldµNėBžÓyÆ%€‚Š[®Å5.ęUć©®½`iŠ«+DŲ!ž z”·2Km5£H€‰lg®§1p[Ģax©¤&øĶ ‡“Jąķ8Æ-æ¹yu»vEV<1žĄ£æM/N¼‚ĪöéāŗŗīÉźæżzéõ++y,­ˆÄ ‹É=g1„Šń÷mCķR²VĜ18ܾø®?TŠźĪk‹„p»ŽÜÜTXwčp6óĖ I+fM®[§SV“«9īä–īågŽ9FQIĄĮö­a$ģgÉgy¤¼²Ä¤"ņ2zŠķ“OKpöŹ‘«D@č8>õŃŲĀRŌõ ć·T™W3gv@éé^ć-ō­Gķkˆ'‘̇oj™HŅÜšö«­ź+j4šĶ( HĪֽƒ[¹Ņ“™­£H®&š=™nŠÕ“G\v(AŅŲŪJL^qłX ļŠŅÓĶ:ņ[ŁRÖxĘq“/8ü8ę“„Lęõ/IŖź6z ÜZe“÷ņd4qĘ궞•ÅĻwćń<ö×öI–-•׌ķŪ?NßJÓŁ£.gsUščÕ.$“Qc…łTqļXśmķž8¶īcˆ“ŸLT{$ļc¤š“Żė’lן쐹;Š&ķƒ<}jž·oœóXŚĪóŁ¤øW)°H=qCŠo©ŹkC/œÖØdP½ĒZålķUŚFE žÄb°™¬ £Üķ󳀤ć5Fvū4Ž\Įb˜ńĮģk#TČäd…£V!“©Ąē‰«[A«9FT/ ¤c4höš ķ—öŒ”ÕpīŖqÅ]ų“āżv “M16Ģ6°WžĢsS&j|›ˆ„–śÕu[Õ34«øźN}+Ų-õ˜W°YĖ¢üŽä})F lųSG:žµ%åŻ¤Omļ8ķĒ$f°ž&ŪŪx‘Ķ¢Ü\}•3öqæ%Tūՙójpž Ōl|9uxķÄ×04xc±uą~tXĪLźµ±Ōģēµ¾QĮ+Ą|EąҵKh­īZėN $€ŹēšqģÉåŅēŖųsĆ5åļ‡ę†Ž_·AóīSü‡į^§ā}Kx øø¾xY`-*2pĶž‚µåDže©i Ēś œM¢Bvąō¬­+N·µ®ć‘~Qל@ä<;ź72²…¶…\¤d6wŽ½£Nš*M¬ŲźWr,²ĀūŃHū¹źA¬¬;ž÷ØA„[iŃOj”eĪ×Ćg5ēšž½”é&IZhü¦Älp\‘ƒłfŌYņ”«GZ[½-’3pVŒ£dõśœ“_Bh~¹’ŹŲ0e Ūzp¢³œŗXÕń7‡tļģč^e‰®T€…śŒzWœėśEūč7YYyórU—ålć¦k0<×HŠõ6ŹŻu‹b…äīv(®Ēkā+ė{+(ę{›k+’P9ę_§nÕóF§įo7ŒģļŒ×,×Wij˜ŲśwRsf‰i©īž7ŗŠį4­>4}F Ø÷Ÿ‘ųčpŚеėŗ„V–·ö±ŅE)ąćµ`äĒ*}NZųŃā+K›Ū«+8ō­PÜ4±²€ŹžĆ§į^g„Zkµ‰-µ}F6¾•Žé6• “śVōüČTŃč&ų8~xZ{x€ßMs8†Ń7 œŽHļ“Uhph:l:ŻõŌ÷—“DdŽƒ#pēŒc±JVŲö­ ÄŻY3 G9Qęzc­sšĪ„y,Ø4¹?|ŒŖ ē5 +ÜŠęŅć0C,ŠĒöęlÕŻ\[ mm¦ŽÖ$o(/īś1~ts U—MŃŽ;¹¬ķåœĒzīQģErų{EŠ.µˆ±ųnĀā %s,q»³ŌVkŸ&­‰#ņīdX²BÄ‚OҰn|%c«ßZj6Ńmø'÷½~aL£½ÓlÓK[MNŠF & lŸ„m½ß‰nå %›®œŽ•@ópy"‘QG­hŸMĪ•»<ę }ūp?‰±ėųWyŖk‰ąM«=" ŒĮŅk€„™ä(?JĖŠń߀ßōæųĆÄž ń±m§ŲĶ" 8²{‚{$šūRūPˆŚÜj—‹o%ĆƒoĻ\Š.[ |GÓ5yu»ö†ņ8|<ķūø€Ė)õŻ_(ųÕ®d’Ņf›ŹÜ‹¼ä…ĻJ !.‡ŸŪxnMUŽ7wŸõÄz{WŅ~‚×FŅą™QJŽøÅL–†ÜĢņOųš+¹n"“]Ę’łfy\×­xCEń7‹ü!§i—ž"–;˜C4dK†E€O_Ję” ęy’е{Ū­R śöy„XBŖvį³ĮĶB©ž ¤Ī]ĢO#.&…ĻŁÖĘfµh^e!†ć÷‡„ZŅ<@ĶnŠ !Ō|įNwéDbī`{G†4ĖżJfHŠY¢†‘‰ĘÜ×e”ŚŁŪ­ą‚ÜõŪµ¹-ō­F™óßĘok—W–’+«m/Ė;ŁX­ž:zūŌžÕķ“ķ8Gxæj»v£ŗs×u;¤lEāż7I2,ļ@|¤żļj᮵ōæ¾»Ōķą’Ę#)UˆdöŠÕ‹EļXµ†»wāˆ’AØ6ĢnyĘ1ƒķ]Źßk:­¾¹Ŗ[é·­×Ģf ĒÖŖ1¹Æ&‡ŠŻxĪź’HŌīÆķgI£ržCā«~šÖ”Øi—:źŲܤ/†!—åQ鞕©3Šķ5 ¤Ņķä(±&Ü`fŗßxźĻZhü?¦Ųż‚I‡•.ģ'=E$„©éŗfƒą½WĘ3xQ|Mc%ävāIœ”ŁØČąž+ā/„|5ą«¢"Ō!½²(?z°” Oaš !cĄücćķĢižŃōå¼.©å„ĄĆ¹÷?Ņŗ;o#éŅj0Ł)wŻČFāR=³üé4T¢¬Z²ŠĶd„‰ €øĪH®EÕö^ŁČ° -bqĆ†Æ“gń_ŗ]Vi$fŲøįTöÅ|ś×sQ'åŽß•4Nē¾i^ ³žĖ‚ųÄmć`œįĻłÅAasVw𕢇½šGó7Å°{zt­o} ‰ŁųsUŌę“k˦+Ń…S×ß5Žj^?½…«Y[[Z\ŕ÷ę×čj%š¾§–kz«Ż fhc ާśW›ß:I’Ee[•ÅBGE’<āūM·’VXÉĄę»Oxvxl5須BK~N]ø'¹ą‹iīīUž?5;ŖšŌ“+č:Ÿ¢JĘXUÜä¶GŅ·#ŠÉÆ”,ā(‹`rG¾*g±—SŠ—O°[žŽF—8Emß°cšDg†ĪO>ę1ó‘ü5ƒ‰œ¶*ų‹P¾‚Co+Ē.•z}MyäQĶ-öU¶'BjbR±ŌÜXÅösRm›oq\e®Ż%Čŗs29]£„‘w>™š–aÆčāČ_$:˜Ć¶ņaķéSŪhV7Z¢‰..·Y¾ųü£ķÓ ķĪ*Éɔt÷¶—2Å$ōœć.3Įõ®zŪV²šö«ŻŗO& €Ē ʔea·©—«jV¶+y3i0µĖ’6uĮģFkL±“¹‚ź;ūˆQ¤‰“ĒAłV¹į^&ŠŃõŃŖĶ*ą˜ń^õąæ ¾c$“Ļ<’øĀÆüóĒcš¦ŠüGŗŠ&ĶļpŁ9#Ā¼¶Ķ©M8‹t—ЦF^¤ū’?ʐå#Ėõs%•Ō6wČĢ7tą×Q”“‘‹B·ke HwæÖ„ģe*­“¦MKN3¼‘7dxqXSųzZģ-Åɳ±É .ĢązWĪsókcĢõč­t›³Ÿ#!Ū»$üޙǽrŸš–Xč@°øøžąņF@'ښ’{ŽĪö.Ēā;_Y½•³“rĮ;kBÓN:dŅFćķ•2gi>ā„» FŚ×Ė=‰P¦ČQ¹ėX7~7y“żCĆv3%­ĢŹH` ²{J±„Üą¼!ćųS_]*ŽöeÓˉeŽĒs7ņķ_nx’óM³š•ŸˆŌĖ~ŅØy]øRǜ/ø¢ĒG=$³ń~—ØAsåūsI“pq\Å徝gy%åį‚Fl¦õąøjyA¶r÷7Öś›Coa!/Čt$ §=å]օ¢„µš–‚'_¾ŹyÜj#”‹ŗfä¶éeg%ĶĀI©9fķJóĖ»ya–ī+ėwW'åRrŸZŌ¾mJ+ =nBę‘_ę|v=Č®žmnķ$²Y"xӍńŸ½JRvś›ž»Óo-Vść*»–ŹAśį|Yc Ģ’HŽyä·pcżźÕžÉWkóŽAō®nmnqU™Ņxv8.gŽŚ[u¹Žv2÷ćÖæ8¾/ųNŪągĒ ß éZµÖ“؃«ZŖæĻg1o™vĻ'’×[/#–GŲ¾ń ×,‡žv¤Ŗ1ŠH"»¹fņyd øŚć…\§å×üöO_Ś?ötÕõ} BÓuųp™D2E–ŗ“=pqœœzcŽæ‚oų}tw[šÕ݌öŗ„ņC::üČ.}ŗRql֚źw ¾+]xnbÉ*ÅūÄx’ė$`ą1Œā¾ŁšĻ…_ā—gćM.±6Œ7ģP”FŽ^å^6/ Ņr=*OC”ńw‡u˜u„–H®. ä7™ž¼õ?­vśe„åŒ JĪ~éÆ22źģw¾ Õu€ēMÕ&WQ!(Ż>NŁÆy±–Ķ=" eI#5ōų'xŻxźe¼³—) Śė9Ŗ±ĪĶ;$Ļæ/źGcé±ŃiŃ@Ÿ>ąN{×E$Æq€HŹTqZĀ=Hs×Rõ¦³=µŗC#y„O × Śn¤uKBķlģ[żĆ]0FRz™Śƒ\]#’«µN8ėPhńŚŁOöÉLļŠV‡<ć®§¢Ś^+¤—vįāĮS·ų³\¤·3\<JÅv0łsŚŒ#£5R+HÖ’ #?ķT²Ēk;żšŃCŒ0cŲŲŁ1Ų$vź²L€†Ću'ڳSģ­™„A-ūĒėHÕĄŽūķ–J’„bgn1X2ŪM4érļ‡oŗŖ‰›Ž§OŽHŹ1<ńœś×mg„Oā;ķYLŅ—Ųźhåź8ŹĢń]nĪ½Õ“PƵČ!xÉĻ9®~×uŪ•‘JŹFAķKØō¹ŁŚŪŻLÉĘ.Lu®ĆH°3ī“šŻ‘ŗǾkr¹m±Óė^“Ć‘Gm©*–u9 ZĖŃōĶ÷±2ĘY†PW§Ö°©#X­t=:[˜¬‚āµ"<ē̃[#i’h>P$ü½Pҵ[‹Ø¤²ČYTY1»éė@ĶE·u*d‘"|ņ1]ŽŸ/›hĘCi›{š y]īihŚEˆ¼7*ä¶Žö®Ęśś;é ·‘€U 6<ēQ‚qŖH]K”Į֋( ŗŌcŠb©88 œn –»ž‹žŸgø’ķĀdq^7¬4±ÜU.ŖŪXć †‰ā“’kV ø>^85^ĒBŗ•_t–bpt«ä1RfŠé’ŚĻ¼­:#6ÜžĒŽ¹ķ^;Ųu6µK„øT—”’¤ –S:#5²“i >i®1šæ¬ŻŪ6$qĒ*Č…ĄõķHw<4yć\FŹēļ ē­m;1‘y>£š ēg”[M"Ś¢‚»ńÓ5vKĀtŃfiŽ’ÆAYįøķWĶ“7†ö«zę›o«Zžī@.6•ü©ĢųM^8å“häkx[å$asč+Õ“ŻŹG Ød ’3[^čkCŠń6£g¤Ż5°}ó1Ā…=>µÅkø‘¦š7sŪҳqŠ©Hō­žkc2’]ĪG#ä·ŗ¤Æ«ĶI3¢ČĆķJQ°&އ}į›Ż/xŽāE €>cœUoRÓķēd¶tłpŁ?ÅI³{œxöłµ…DÓą‚ĢƒކN˜#Ÿ­v0^Łż–eß#Ø+žÉⶈœlYŃtÕnRI ¶GĶŅŗR]SDÖmmŁŠi”væ×±žtKa«\šF‚ńK+.óéV’įžźĢĖ,o“Œ)sX”·8 B! Ķ"HÄ1?uæĀ¹(.õBkˆ 2K»;UGQBF—!ƒĮ“OqÄ"»7Ļ»’æZļÓDžŅŁäu_&!ĖV””v²<’Uń ݽㄐ€Ū2®×ž’ŅŗO ińÜ®„’ŗÉ6>Px'Ž«”ĢŚÓ“gŃ$1ø/~Ćīż+¬—Fy-ę6ŠĻ;±ŒU#=Nb(¼“öyČv²p{×W¦jĪ®Øų\ķ œ*$Ējy‡‰’į¼UyØEÖ$+J ĆØĻéÜÕµĒMŠ…D‘O8ėŠČøœž«®Ky-¼r˜É ‚z×m ésĆ$©“2” ņÕHn98é÷jds̬®ī“ų”fd†å›-ĘFļjMZśŪSš;«×2\®WóėPąĢžĒ,ӄw·ˆģCĒHØ]®måu,ęąńųŃ©’‰Ńxz`o”FŃķ×Ö½6Žīßķ jšÆ•ŽżźŌµ±¹™«Ēe§ĘÆŹ‰;sČÆ0žŅcØ3,? l†'!ŖŒäŃŪ\ķ+‘QbšE`cšÆ¦x2źÖ7¾šo:B½§åNĘhėü=„Z]<ŠŻ&Ģ”Ų‘°ś×!āMT{<3²æßFʰśÖRSxĒCBŚÖI`0’NĄ朾BI,«¹Oę³6½Ž‡R}BŪKŲ<+øįĆq\>”—7RIvѕßņ…殀ēFTö‰l—‘7™$ŅÜūĒ僊p(±¶‰®Abcs…-Wõ2œ‹šhļĢŽgĘ “]4V3ź6ƒOŚŻ£”Ā&µ„éß,%V%8ąpʒvS)TmĮŗJ“² BœZn£cØ@Y­Łƒdt·õ(eøē恌ńšEāøh!&TĪ:b¹ŸOyā”H®žŹ•TŽĒa@Ļ5žČuHbFņąRė^Æyxķemgq ųw4šÖųØ·Š8摐œż*ˆą¾¼ń"ü_Z¤ĢZŌŸĀŽæ—ĘÆ%äĘĀŽ/ōr£,IūÄż1^ł" ĄAhžpŻH„sHĘĒ7ŖųĪk8$Ó0ž{äĒל_čK•Ęšn'=OŅ“5‰Ąß­Śkme m±ØĻ œ’…v–>&Ć׌u¦§9ņäaĶāvśµüĄĘ©2Ÿ¹‘×éF¹ØßG£ÜŚĆåBĀóAœ yg‚ü3u»%Ī«m@@‹¾óźÕÖėŚ\šl“]™į6ąŒž˜ü*ŽÄĘœ<Ī×Q™ą“ tŪüF«¾Ÿq|ĄĻŹź¹źEEŽØģssǬM,—7{”!:WIkv—°¬w ¼L>`{ŠĪqźiĢkĶcap‰)*–¤`ż(‚ź1*ŚŚE!x逵O+9ē¹ŚEįłV»“øUv\–†³ōÆߛ™/gøŽąŹ€`®+DŲ’]MķwYi%’Öéä Ŗ’A8ć­ŚMiÖҼĮنāF}7q ©i7¶ž%Ō'–å®-å}Ń c`Ą®’Ę) %Ÿ`‡½MdŃI\šĒÄwÖ÷WŪ īv0HŅ_ėŽm’dzeĒ’#[“w{w§=œ÷Į ˆŲ÷õ®oʚŪķ”ī÷BØĘ >€y“z~­rÓŹŃŹgŒįĻcī+wJh•EĮVwOV·f|ŗ“^%‡O²kˆķĶŌė (É_Ā«Žkšžæ`Ś’,’@§°“Ć ŪC Ų!fČb8ĶTYŲĢ×Օ/Œ/®a[{M‚O5~ld…Čā›3:xµ‹¦Ō좻›ć™÷®›P“’7a‘J{x¬¦ĶŃé­qdÆtˆ¬Täg!H®j=.źźXįšeµ-“ÆPÜ÷¬ÄĻNÕõ(t+8’S ”E”gŒW¢ŁĆ ѽŗh䘹(ēų=8īsKc»ŌDs“8d\—½rR_ŁXŽ\Kdˆ&©äÖę6%7Ęėk:®HłøĘ+'[×,¼>‰qŃm×?Ž>µØi÷Öļ±VCŪų«H4D·-éh¤Ācł#_›ėYŚķÜ`Gēˆ÷ēń¦ę$®y.„īÆęŪ‰å…÷.ĆĖCVõó߈濷7rZ#4¤”ĒŻÅLŸB%ŲÅo M~‚ņņv–i€l>y®•¬u/č‹„ ŗ(ŚE?‹ŽÕ“#ęĻ_xZÓŁµv6óƗ‰søĒÜ{WAį‹zęŗ–Öŗ„ :ĀŪ{@3µGOQĶcQu:c‡ØDÖ×q‹“Œć,ŒA÷®/WE²•ቕŅAŸ¦k8²š¶‡Žx§ķ:Is§HÖźŲ±÷ėŅ>ų—Ć>–ŅÉŗ›9wVp=s]P‘‹‰”ńJ·ų“⯠½¦§ž“m G9•ˆņÉ8ō­msĆ£@·—LDK»hāŚ£~OAé[s-ŒfŒMK]ŗÓ¼5=īńŪ½¹ Ä7*½9ü«Ģ¼/ńBÓKŌķ5K”P«į׌Ÿ_jĶÄ3č x«KÕ“Ūł&ӒxLŽb:šŹ9ąJm§Š“kŪ`ņ4Ó?ɇ&¦ĆöZ\ōĘö6Ńüm i·Ł_¤`ĘĖ÷UGe9ĪĀŗÆ‚^o쫽+ÅCŖA{›†Ą č õėŌVŃó)hq>Ń|Mā=BĖNŅ¢·±[†H¢ØŻžyĒÖ«ųÆĮŚ·† ƒÉitė+Yć2ށ“©_§ŹęgŸxć^ųw©éP]I{_¬¢hƒn`O\’Ÿå\:ų+JæźņźńXĄ‰¹a,Ap(%Ļ6Ԇң‹†X”ć ƒ^ińÖKŸųLŽėR–ĪŹ×lbŻ8LÆ+IFĘŖ6<ŅūįŻÖ«éw}äWVą #ņĘ ĄŒŽŻ?ZśÆĄ^>Õnēcā– x•±ĄPĪ;žA'c#Ē(њÖ䋩’tÉŪ·Ž+āOųĄ]]Ę4ŪHįˆä?',Ž“ņ‘£įiļ#{å ,¦]ÄŒƒŚ½ĖR­tūy!’d•—i]½ éŠ¤Ļ šß„µĻüD³ŠVÅÅėĢ ¾aĄ1ēļ_f§…SE¹Ō%·–;¢VŒ‘–TņrŻW¤|6—Vń©­kaģ·‡FĘ ŽŲOÅŚD:c3B„røóÖ¢VŲR]Ę4%ō†4³ę2r* _Aj©qQ^E!+ør2}>•VŌ÷]W½¹Cœp¤0 ó€'åļøžufēÄ1yĖg©‡lyČćŠS#ĆW6śļŪ­yŚM«#Œ•Pz×ń ņ×Ć×Ļa`¢ķ¦_“Ė^GNŻ«kšE_c™šwõ[uo__GnŠæ˜Pœl/µmų–ł!·Iā¶2ŹĪ\ÉŠQ3NC±ų­¾§X]GĀĮ³“eIć×¼ßjz„„šŹņźĶ•ć *+cš8©S)č|wń‹ÄUķ֕įϧūEɒāå#$øīć¶+Ņ| āĶ{MšT~TF&fy‰'pĒōėTĢeŖ9kĶÅ>*ńčŠŚÄŗCm脙_ž>œ×“ųŽöo j÷:DŅ[ÜŪ3Cq"dŲśVœ¦.‰‡įŸė>ŗ¹¾±æš{‹‚ŚG%°_­} æqćŻāÉ«\E¢`“\zƒÅEcHė|#šZ×Ćsx~ļŶVzó[KO³@ķ|ŒK†åaÓ¾[Ōõb »ĶFšx8Ŗs»ŪŅØ£~É}§(°Õdš59Žžµé~6½ƒAÓ5)¬Õg¾t{æˆóÓėÅq<;Į^%Öõ{üȦշ‚ØĆ9?žŗļ¤Žt^āßĪ žØ1Ś4S½Į…Ū  ŒdpkÅuļ kv÷m7ĢÖģĆŹE;|±õļAjēW§ÜN-’$,…pXśV꘏²æ”ŁÉ%”cqõ5”£bĻx§Ä2é¶fi?~Ŗ’"‚ 5ĶxbIu)īnƜ,Æ&åŚxU'”÷ØŃnōÉgŽÖA:¼÷‡ł5Čjŗ{ŁĢ~Ļ]ü£”õ„)X„+#½šE³éšKz²2Żcc19žŗō’ŖZ»†Ž)īä‘„f݁ėßüńX¦p><ųĶi¢x²ÓDÓ.žÓn³(šxGŹX¹ųź.#‡_žßUœ‰åE*œaIģYę~/Ōõ;½Zį PźAQ·§n>•Ģźśµō°¬q¶#z‘׊„;™ =Åž³ ʤģ;6“Ļė_]ŲϦYčé1ø”1lméėõ§ķ 8Ÿ_Łź“‹ˆā‚€ģ;WŽŽk–š~£{q“XZ„IM¬ßĀCØ@ ȵDjĒ ÅrŚ–„uįÉŽĪõ½\ę(8?Ÿ„hŒ=OcųSćmf3=¼š‡•`釸±ÆV×üY!’Ž8n?ŃԜķČ"š‰q…™āž$ÕåŽż~Ęęvvß9ŲVe¦‘c«O³ó·ĆÆŅ©C¹gŖx>ŅŅĖW{¤“@Xyhr޽F[=ą,‘„UÉhŖ¶1’Ō㯭īī/af"Œ¾×UĘ6ś×?ŖųĀ‘É6©h˜¾sœR8ŖLp<ųxZ{+ÕÕĢM Œ€8^kŪüEw6­ąÄŃ Ć¤+"@xSĪZ™Š©žEąŻ&ŪNyąæ.±„-,€üĆ–ę¹_xĀŚö9ō½:FžŚm‡hÉ?ē‡ģĪ_@žņyŅįRL£ €½=s_GųwWÓõm ’-곤ŠčU±ŪĪ±’ŌēšźvZ½®”ąŪ›…~ŠpĆqĄSłW†x‹C›Āś4gyO03”ĻŽäÕF] ŠīxĢsŻ<óĀóķ¾bTņk§“O³Ł¢³JdX󚩣d¬vZz]_¤qĒ m£$ķųV…ę—)²ø„A bøV‰¬le-ō<škmOO•ln®2‹Ę½ćĀ|PŲÜMØ+-įQ±ė޹¦kb½×Ĺ“6Ņ6GPŁÜą’ v2ŚÅć-…’n$·,­"ōoö½źąŠQ<]¼5ØčsĶ,™`”å›ÕgR—P–{xöI*/@Ż÷5 ŚW;O‡æe¶Õ.ęģŪ1Nś3Ł®ö[Ėuwkc)k槚‰“ŸLś×³hŽ$Ńň°C2€‡$ŸNiĀŹ76ę>ξ\@s\ö°Óy®°<`łēčkXĘŒlq°ŁæŚŽŽźīK…s–łF0GJ›SÓU±˜‚ķcm6Ē'”‡żžm¤F ūG×5©%üņG¾XĀįp  `P+Ģ µƒ8ž4Ü®72Žŗ‹ŒgʆA.3ČķėYø HYm&D™dŸ—9zWŠ^\yڜÉtĢ0är=(Œ;”źß?ķsš^/ü;ńu$óĄ³q˜ĄuīNIź+łińŽ€|7āwĆ2żŖ“¹xa 3GŪ#­tĮ%ŽćHö"«”<ź½QāwņÜm#Ŗ‰^e°¾\R\Å+yß(’ Ī?­~ń~Ę_²ŪųwĀ6?—L:ƍ{yD¤ Vą`:“ÓšĪQŻž®DŁżDüń7ü'>²¹øæK™,¢Ü9Ķ“Óó¾žkSä!ӁAŪÉė\S‹±Ń'”éZ²}šnNÜ1ĻZę¼wć½;ĮšmĪ«|Ń:¤lź„ą“ŠˆSlą«3ó/ā/ü3Eų5į^Ūiöŗ×Œ% šT§(üšĒŸ•~1x+öĶų‰ćߋéā/ˆ"ŗ»»Ō.˜³äy99P„ņ@įq]“é[Sśżž<µc„CéŸxŽ~ģžŸŽ}Õ }©cæ*æ½āAčĆŚ‘WfŒÖpM§ß‹4¹W…ą–6čń°#ŸŠ×š—’xż‘õŁŪć æˆ4ß ÜŚiŚĢóĶĀ)ņ®÷å¾b8ČČā„I,ülÓ^īĪpZݬŹrH9ū×ß?|uxtmJŁīPű›l@„,ź~µēf–•ņ;ØĖSÖaæ°Õ¼5&·v'k„“ljیœēņØ”Õōė½1µ{{FCåķ–ĒzłŽ¶G\£k•&¾}:ėL½†H'YAIļĻ„{oĆĶzy ½yķ‚;0ŒĘ՜¶WÆ%¼²—×#µ5ļī`W‡ ’7Ž€W\v9%-KZmڼī—+ę92N9õ®±ī-“ūg·—d(yÉēq>†¶ŠģŸs‹ŗ‘!Šq" óśš’)t뫳.žņĢī€ńĒźES”4W2[-ŚŹū‰R:­K‘F­ü׳éĀÉ>B‰B»Ž;×·ņÜŖ“n6å01š¹2‰ŃéOw²8¦iO3’M{ž›C¤FгEq°™2qĪ{U_”‰ā^)Ń'¹ŌM“PĻ#ŗoO Łä ē“.č_½”‚A4d`NźÖč6kėŗž©„źYŽ¢Ų(dćn³ė^Ÿ¦Ū–Š E]]ĘTō'ŠÕ“¹Kā/čKT¹Ņ-?³`7)”V3·v\žüŠķ4„’ęĘ‹xZ* ‘ĻēXNÜ”©^Nžj2fQՉÅx>·©¶£­„£Ī?pÄ)÷ćükŅh.” źD‹ē˜9É?ʹ >Ī—¬#ĀČĆ€yÅ\#b%.‡Mcęjµ[²ķüė¦š®™ØčZ¢}¦ŚG²+¹dć$ćŁs4ĪŚ’L¼MY585KLåĒēšŃek»ØSb€0Tž„ÕYßS˵Q佚&‡ĢEÜ£=2+Œ°žžĀźt.ą0?(ģ=hQbLÕŅ“; NK‹™J±$ē&“ģ¬mÕŹ@WzžøéD£cX>… M­ žKKØå7gŪ““XRH[ķ.ʣߜÖ2ÓcR -fćLÕ|ĆȑŠĘG×ōÆMÓµ]4Å5ĶĆƼēʧ™Fę=ʱįęŗD©#‚wŅ­j–:LImØŚĻØ\ōęŸ;3•3+SכÉŲÜę@/·§µ`FÖņ"5ÉG‘€ĪGSWÜÉ£n";S ä€zWGįW³»»[bcĪĒqZ)4abhϦßi"öägÖ¼īQ“Æ=Ō&(SęgqŠEÄÄŌęÓļ.”šĪį g ÕĖ‹°–Ė Ŗ?õ¤YēņƌäąĘ»³J[HāI†×óe „ŅÅ­»C7)‚} bÜįgIw ‡Mˆ Äq#Fēvģb½M³ŒiĀ{†(Ėó}MfNc1ڹŪ, t5»Æ‰ko=Ü”<ęņĄœż)Œņż}­ļµ¹'€ŗ”ĒŽäŠ„s‘DlČćėEśŪčk+ZH“&Ē^žHśVŚ5„zī„2ڽ7rj¤Ķé#“žęĘ+čRŲłjF”­BŃ.lÖā ‰ ČÜć’}AŅeEßé#œćšļō›Č¼” Ń łQĶ\ec–jēQąĶnęĪżī#µI#ŒūÅ[š©¼OØ\ßß 6ŒńøĪįŃ)JęiķU@ŒF2į—ķ’į3·°€[ŗ„mƒžķėR>lńµŽÆ©\µįYŻ 6N1šŚųgāKmī妉žC”ŒĒī–ć4Ѥo±é·-kln&!‹t®WTÕ굉“²ž1VŸrļŠāķµ;Én>ŁŽGQ]§Ś ¶Óā¾ÓdVa¤g9Åij¢’yå6éu‹äݜżźÖ»ń}–…įū‰¢{āĆbxĮĻ•'.†]u8_O7‰g[ėv ˜C…Ž}ćZ××8»•UcĪqųԈ©s~¦ŚxĢk"•lr÷Æ.½¹דyQy`:榑¬6#žČMAįŠD]Žll¬# •{׉®$šž‘§ĖfŠŁīŒ`§Œzõā¦R±Ńm)õķ=ā‘¢Ui1ąƒßŠē†±o5Üń1%š>sÜŌó™Ź&Śź[t牋„o˜Zäµ8ƒŗ K`|ĒØ£˜“ž6óĖ“G gR0OLWu¦Ē%ä[Bū@;@*yz;ښ›vh•™$ĻīkÆŠįy¬O™sp1œV‘]Å)}œL› @F2:fŗØn4Ż: /Ś[•<(U‰3‡·×.õ;‹Øåx¼™ķČē\Wˆ¶›«}+gĶ!õéō¤h¬q>&[ożžÜ+ĘÓ¹sÅUÓo®me`R L•ĪIčhŃŚ"ßV·Œ\AĪp QÖ¼F–:’N©Ȋ<Ä<€hi‹™\‡BńÖ³Øjö‘D‚ę"œ‡éLųóų†ĻUš@““ˆ†ćµ=€ {ģwŠxcY¼ŃRylɜ`ŖĖ}3NQē†Uó|āH„ąIÉ C¹Āų›Ć–:ó\C g”‚ė¼œ}jÅŗ“c_ŻTŹ]‡ČnčŽU¢ŪL±žXõėSĖzé<ŒŽķ+}*#¹œ•“*jW³Ī謇Ą§ŸMŅ`’Ņ>WlĀPĆīÉÜ ŲĀ[6“§L¶SO%²¤óųVļ†ueŗ»m.ń ĶžH qS°ŗ[xćo!X²“Šuä^ »yoČP£‚3ɬ¦vX-ug·Š¢_0±ä÷ZeĢ^iljAČļP)Fājśõ÷”ŚtŁG*0q‚+•¶¼»³u¦(=x­`‘ÓŚ]C{8’B’66sZ?Ų×vŅ‚ eORjĢY·£iPµŪ™&gG9ć+¶—J‘Ąčc œ6§zRŲø Ōak£›iQ ē ĮKp-\Ø]īaĘ°:ŃŲŁµō‘ĆöØųo^ŽÕŹųšęź-oM²…’=9‰3³g+č3õ  [ūY"Š2ČvīČéŒW±ź®“|ņpGZ„wbtø1#'½ihńŖ–I Ž~ķcaVKį€<¬ēv:Vž«–ŠCLd‹P;WžųOµUŒ“ŌŃŃõ›Ø¤-¢7ĮÜłź;×”h>*øX®ķå¹HćxŁKw1ŗ¼×ÄR. jĢwSLĶÅƟ¤½¼F=˵ŽGµZø±– ÓAƃŒÉ ˜ĖøŪ}9īwµŌ"ń“žjž„ £Ū§öy_7© ĢØŚ}͵²G;ŖGQÅv:Téõ„įŸXjGÉŚĆĶÉę˜ŌQźz÷ƒt».k `’$ć'=«‘“žUsnģŁ_—'½&‹'ńN”sc„XCgŻ$ø‘•łzš”£j.na³µIeR3“ɤ c9Fµ©%֛s Ä{ŁSjåyȬĻéĻ©Ł4×"Øm„ įOŌÓQ±Īät֓ČnģķH1Ŗķó²+Éģ“żFßY[8¢gV%¤™‰#>ßįLJ,õÉ“»”…nå·TfĘ⟄yw‰Ņ4vy|ą1Éęƒt¬KįĶJņŚĀ[S'–¬;xϱ«\}ĢŅĢŃ+#`ԊmŒĖ¹Ņf›QŪ# A÷ÆHš„Ŗ\E!šsÖ 3š"Q¹·©Ś˜¼ø‚Ęˆ=9a^©h2ڽىŲ$’±^s‚{PdŃĘŽi’#WewŚ„Ó[\¢"§#iz֑ÜV= ļPX¬c Ē p*­Ÿˆå‚įe¾ĢIłąāŸ(ŪjÆyØŽø 6·ŽģĄśRźZķ¬²5Ŗü‘+!©ä±¤§gaØiö°„²XŠņAöėYڱ9 DZłc.ĒE4bźwo‹9”,§ę\ŒóWaÓäL7')»$Æ)ķQČhp:ѹ(ÜŪFxźĶåż„©jķ ō,{V‰Xę¼¹Ōbƒe²õcŅ©C©ź¶,1ČeQ!!_Œ ōŃ<Øī¢ÖÄ© “TdzÄŌÆ†”µāM©žĆ„6-X_}šÕā³WóāBå½y·•ut×wĶrn ¾ā šæJRv* RKo>ĶZT7 `ō5蚊/<=§¤FŠBƒ9#öØē6±ėQųŽmn×s˜%ćnįÅkĆā{8L©˜ŽN€ƒB˜„˜ŗŽģ¬.ļ­mg·ŗŸSĄ'޹=_Y„Śė§ó*`ž49“ž#}ć+»«łŪĆ«’‹²`¬IVō®—Ąš‚Ź%ķéó|ĀĢdŠMirĪŹ_A5ņ[Ehę¤ocŒŸ„sŽ Ó×_”XD^Gl“ئć`!‹ĀŚŽ‡,wS¶Šæ*ńjäu ?Pū}ćÜ`Ź\s÷…@ “ø‰Œ›]W#5ŃéęśXį’īe9wō†[Öµ¹“HYŒNQpZØjRčž!š½åŹßEō‰„QÉ-A\Œó&ž éŚÜ$·6’g2žŖ23ļ^G©ĮäĪ<éZŚ\ cu;üĪ6mu-®īu^ųĆc9Č<€;cš­Ÿų®ĆWäµVYŠ‚»æOB(±g»Obś®”U“WĪüAś×Ģß¼1‡gŌķ® MV)¶€¬pĆŌ‘łR‡'LѼ?q¬m”¹y‰6”’rėŽkÖåŸĆöV×on56`ŒćŽ“vßü]š†oŖźRŪ‰uČ-¶‹ĖȐŽŁü+«Š|O§üDūŒ5}&ŅŪXxFõuRќcćå9ˆ^ »ŅŅ=[L“–++¤ŹĮņ¬ĄśSžz|ļćBźilōw¹}”ļ¼„ēŠ†ĮœĖIrĶ mņć^꼑ļ^ēį=)u .35²™ē{ėM[ؓ<ā—‚µmkÅZ–ްZ“†UV”£rĻŌ“cŖŻ™mądV?6:ėÅz†ü:,oÖUø”F"ŁåŸŗO\żj=˜9t$ńŸ‡“MoP³ŌMøQŠ!t?ė1ŠZ£Œto鉦jpÅöt—vą@)œf”«ĻńēŽ±¬Z˧˜I†/+h|’GOėł×9į ZĆ[ń å¾”göPBdhüķžc0>œĪQź~'³Ó5{ĖYm%ū«}öa±Ē =kŸńoĀ—ÖŅÄéF<[ĒĒ+ĻwśŌĘ#GŸj:~³i}=Ć ]„`øRI=‡zĢš ¦‡ éµ[„Gv2Œ8Øk”¢™ōŸ‡t jś5ÓLXĪēĻß`>č÷?Ö¹ų0h޾Õ-ZāāuIŌĮŒaµg(Ųµ$|ļ„KØų›NmŌÖ3]¢ļŒ ?Ļå^å žĶFŚĒIŌ|P·—2N„ŹcTėŒ/õ«I"¬QÕt?įöœżž,£yIƒ s)üśWųŸĘzę­Ø[!Óā‹Etf2ó©=ļZAje*g?}£jwśD–öÉ/ö|¤DĪ 籬øžĻŖŲ¶—ŲēóBł‹QĒjŌm¹ļ~šm߀ō tŪŲįžWŽåŌäØšW™ŻÜGāG–óHQåDLBM½é8„»įż=ü)gÆtöĪ„Nå O«\vńWăűĮiw}Ć$\ž@oėéX‚IŸh6±į½O±Õ¦¾ŠÉˆU$‘óIÜš}jˆ&Ū]š~ægīØź·VŠm›ĢßĪ:qŠū„2¬~w7Įmz×QŃõ)l¤ņ¦bY•ņUĒ_½3YŠõā±·Š RA’{óŠ~5¢wdbxOį£ć_Ol–ĘÖŌLJ–B&§Ö~Įą+¹f]B[µ·vX}ńŽ“Ȕś<1w(¼»KµX“ ĆÖ¶.5+;;ųõcd2-ß  tęƒtiŽx$±T&5²BĻ æCéXoāxµ=&ęśĪAz”xtlć­K]ˆ»0“ĻŲܼ0Ė”ĪŹ„/%N;פźgKžÖĻ͚ć˜yHNJ•.ćIĒį7Ó¬ÅæŁŸ%l‡śį'Ņu'¶»™ 3D’…,žŸČžUiÜé§±·į{ į”[ŪB<ł›œqzęüUįkŃws<šūIbv·$52Ī“Įń+µ˜ŌÕn.£q‘Ņ“fŌc»ŗ»ŽĢc!]£œPL•Ļń®‹¬^Ü4¶ś„ūCįćA÷«ēķoMæ[õ“[yŽįˆQŒsփ>F}_ąßŲĒ-”­{ŌØØH^»±’?•ėšŽÆ [ imķķUģŖä‘ųŸjSgšh^:šÕι PZy,ļ“܅*pFĻJōŸx—M-r֎g³å¾ķĒ×5Œ¤Ėåfm¦© öp…•­įs°³g¼ļ^°“Qž;1{$Ź&ģjCgvsš¬5gŌJK¬M.ŸØ©•<óõ­-WƃKHma"8U¾\.ŽkUĢåfbj~5Ō<;c©čšz[,×cɞRåśVGƒ4y w¾ūE³c ½/fG'Cčm#J¶šō‰&­tÖvGœŗ§©ĻxäxRæŗ»Ņ§c æg* ™čO¹äŌŹ6*1čŽV}oWŃtō¼¾·ŚŹŗņązzōÆ*ŌüFŽ"?ŅVĘщ؄`ō¬¦śĘ'{§k:W…ōŁXŌźÄEæĶ…fĶq—ĖØx²RņHä`„sĮ=ŌöØ‹Ō™FǦxGĄq覅”PXIrØ‡Ļ’O¼Łxēė]ÄŠŚ7‚4‹M ßY”‡•¼±/8äż+®čAé^Ō“ÆiZn„¦»ĖŽ#Ņ”ńēĀ}Ś^æw„iļ°bŪ»sē©"“ø+Ÿ xoĄž/Ō¼Cw z$Ķkgp!šU9Pƶ1_`éZv£,é˜ŠÕcĢBU }ī?M—ĢĢļxŹm3X¶‚źåÆ,ćŒĒē©į0x’ž+wĀ:Ļü'Nņ<3£%Q› 0}1X“D™å~,šē‰õ FöćM³’.C¶>ńõ>ŻkĖ.Uģc×8oCK–ĘRFf§s}}åŚZH@Člžų¤Ó4Ł£½)3—™Žļ˰¤c)3®…nšöŽ2’G6Xć ÆX¼ńÖž—LŠł’É —¶ŒćĒÆČWgŽˆ)„ßZYÜł‘9É/’z©ąŻR¦S4ČC»Ž¢ĘéŚęiq$²[“Ø3ø7jó’ķį=Ōė¤D|’Äē= #ź“ŻAqq#yhØTźkŻ|,ļilcd± š½żź ŠŒnw:®™}­y%”‹oĶ‘×Šįōo„v–zŵ¬.°ź:„Ū÷Źy'¦H­N˜Å/ö$žÖ.­5 ,Tl÷9Æ*ų‘ć?ų™½¼ ŅĒ„ø“އążZźēU¶#Ÿķr¹"œ!ÉēŠöA«iÅ.ćž6˜äćļAš‚.x]:[Ė ’Ā›ŗ®9©}yk©Ķ on§aŹ`qARV<Ņźś%Ö³tŁ!ĘbäąńĶI}$š]¤‘Ūł“\`qÖ°lÅīy¦nļ¼–¹˜HŠØqŚŗ =M“DYeć†āXōż k«8uÉ ņÜēŚ„ŽĘ{›g™ĘP0‡©’õV FåÕ’öF…$0Ū¼ņ$ćŖūž•KĀ—ŗĘ„§Įo2ˆ®eŖŹĒE\#ʼSįTе–¤¤;:ī&½ūĆ©kwį‹Y"½Ž×Q-åķžń’×­yz—ĢĶOĄķu,’ĀÓŖ«FŹćÕåņDóT`ķ?αqÖÅ{C™†ö ?c«m|kjßYŌåµ:Z[dåF+éļV Z;M+ÄO¦Žj1ZĖØ˜•³ќ`ńLWĒ~)×µK›ō‹SŽāŹe'j¼ō«TūŹĖö\³AŽa@¼õĆcÖµõO[ßč0j‘jp­Ź1$dŲz,"? -ŹŹčØžH\dw?Jźļ®dGg“|xōjq•„ZŅ'µŌ+B°FymĖ–Č­ĖG‚ Æ%W~[:Uó¢e+׹­+ėåŒĘ‚=„„lņ w®‹ÄI„Hģš_³Ä<°ĢrIõ¬Ū¹Ķ*šœČ“¹I!V€xę°Æ “ŠĖP™ćŽåp¶óÉŖƒ4„1“ń4‹ö›+ø@ģ^Ćń®ŪO qož›9‚&ł‡ś±WĢŽČĖ”ŹėśnėIÖĘōg=ż«Œšē­/ēŻ$žKŁ$xłŽ{ŠŹUFę‘īVžšß‚ķ£Ę·R™0²żē8źOłéXڜ¶Śm¤2ÄŠ$Ž PqĻqY¹³Ķ xœÜZK ŁY#S½Wh뚳ā;(5°-#żõ”"g˜ŲŽqZÅj.Tx®Æą››[ --$’bĶåŹĆŸOĀ©7‡®­mķ ՙķęą8ĶlU“¹éśśe¤Ū4œ²±œÕ½NVwKFyąĪ±Ž=Åg8™É؁V(”'ŒF c„6-Jä{{ēo“Ó>ø©åbƒyį£24²× dŒ±®ÓE1[Yˆ£fóx] `Cšø"āĶ)¬c"G!Qóg-`Ü ‰ZŲ5䤅üńVLŁĮ\Å!IKłÖŅ“Œc’­W4»ėm2)¤øŽ#`Äćęaߚ™D‚ž«6—¬Ć,š@ÆfIłXnČ®b-^ŽŹ9RŽ¢r07/§ėXš¦SŸÄ ‚©1pŪ±ĄÅ_Ōü_mÖ?ŠżĮŒkĢg”źz”²yo—n@ź+6ĒZŗ–ļ0$zŠŅ1¶¢nĒÓŌ.ÖĆķ³‹y$u(QĘ÷ŖŗĢ÷Ö¢xē ąUĪ=źĀä>Ó$ŗ¾+ ŽŒ3¾yļž‚®x­lutʞ"„Će+KwZZj˧Ė7œČŃ(ėžµµ¤Ėg©«Rėž1Ó4Œš:ČōIäxćHžaó ~~µcP±ŗÓq4r‰ēw@rœåÕŻÅø€®§=ėšŅ“ Mręk™ }ŹKģ½…5ęk¤OÅļ„$žĒĶPł•ūĖļ_ͧüąv·į ~Ūų^;ųÆ®Įø¹µAĶ©@ģ+s©ī~\Ml¶ˆˆ‰į‰ĻQč*²ésź&m`³¶}č3å{5M!ōėIP³3yduĘ·ė_¾’šNŸŪ#KOƒ:’Ā"G«iÖ"ĪÖą*‘:óŒü@ž¾ŌœNŚR²hżŸż“uĶv‚MA­ÓHå<¼«L;3vč+õ»Ć—–w–‘Enė*`c¾+šq6”ō=/Ćśs_O”KÕæx{"÷cģ~?ž×ß“×Ā}ā^¹šĻž1¶Ņ¬­ŅH¢¹Ž_‘Źē‚GCš)Įœ'®‡ņæń;ĘŚĘ»ńÄ•†°fŠ äjˆłI olśW§ųƒWŠXo¤|ߌĶēDć®AČŗ’Š!#÷÷öż£Äś6gu5ž½XīˆGϳÓ5ūūšćĘ]O1ž"lG!ˆ¤õükĒ”Ńč{dØlŹ«ČdĄŚĀæ7æą„’²ó~Ōß³7Œü?eb.|k”Ąu "P¹‘—?2žśÕĻ(Ų— OąŞŌ|#Æk~ÕVń/-.ZfF¹Åcż‚ŹŚĘŅÖĪŠ}•I;”}āÉÆ”œ¬Īßi„ ĶchV)GÜ5KĆ^1ø³Ö-4FSūĀA,pSÆć^®ƼqWwVgÕŗJ.”jŖ”ŚRp~µ…‡7!‹ļ ń“ĢQrHą×I«_ŲŽABLŗŖ¶Vš} d¬r C$ŽĢŹ2F:-v^¾†9vJ©ƒœ“Ś“nĪžśĀß\ŗ¶µKĀϑӂŗļ xjźĢGÉ$Š©fŪ"šÕ.gDiŗž“ØÅuÄQ ōĪ=Ŗ–žńZ^Ė4~R*¹īßē5E5cĻU]֞ƿøŒB_· ēō®CķvńM4ė*»ĒÉ pżŖI¹±a­¤HĄešQĀž4iś{Ės$±ZÉäØĪåŽ{øĒ©™sĖ’eŽ£ äVäŗ­õņ5½¼ū%qĄ`/ҶŒn(ŌčĪŖ'‰­­ąŌ€ū@wƒK–ś£:Ŗ£)ļĮϽ+1™…āŪuÕuIÆī LŲć"­hŗ¬rÅoj4_”rM\œŽŠĻIÓg¼žkŲ y ępA=ÅuvF”D°ˆņYģ=j¹‘Ē)3É\q+6ąįO ÆÕ·Jļ¬@*ūKǜłž[ģevlé^"kć½āEē1ڽ·×u?…­’ćo–¬>^9õ\ˆŽ/©ŹŪA:°·³Ź\Ę„˜Œ’~µ×IŖźŅŪ7™ ˆP`ą7ŠU Å—ü$śÓµ-9‰‘Ļė^“¦jOØY(•ńsĆu“–Ē,ŒWOŽ9<Åx„GäcųOųכj²M Į9I,Ēž=)FV1L½¦Ž„¬lɄcƝk]UŻVęø¹KŪy &܎k /éwļ¢Y!‰#”’„gŻjwLÉ 2¦ķ¬H fž“2]ŪŹĘ}²1#`bØĆ¦Ć4¦ŹŁåŌ$Ų ēŠ Œ¬UÓķŽŻ£iAyēić½7ā ÷ö—€ĢG#Ę^"]W-ö>ĻŅ‹{Nˆń+ØcV¾sŒņЉć/„ųdĮÉŌ¹lfęö/ėŗØ0Ƨ—xöŒ–Į«6W†óKŸy%£?6—(Ō™cĆŅZ^:iÓŹWq?7÷Ol×§ųvĪ œ]s“‘Ōöص‘zœ7‰ģ]®mŁ\Žy«ŽÕŽÖķÅŌĮ7ĘĄ}qŅŖ”‹GuvÉaf·ĀrĢŖd$Õēsų³ūKcŪI3EŸāx?ZŠ‘·§ŻŪéŪg–r š}ø¬«éģõMf Z‘% •šŸJ,l˜xź[-}ķ’öŽŹV„T°ĻÖ¶4ŁŽŲ[y&+—+øå9ō­¹BĪēM©ĘŽŃ.ķ-!€Nė‚Ģ ķJš84™u«—&2Ūßi%x„)«XøS=³Į> Ó“‹»[émąžxÓœdVŽ»'„.ļ­u)­­§––-©‡ņ˜3ü«–RģuƚGæC»“¶øA¬cĖĀFN+‰Õe¶³™®'_-TóŸā¬®ZXłƒĒž'Óõ}nķl,¼»5”ØJž5ŹŪĶnŠbfłČ\v¦dt0Ģ« (‘Ŗ¦zŌöš<Ņ\³åŁ Č#Ö­@MjREqQŠ)żč=j…ķ±Yh*Œ`V‰[C)-Mæ ¼÷²9~ź3“ƒ]TŚm…¦¹›Ān8ėJb7¤2ĪX¢;™\“ÓŠšĖ˜¦·œ%ÄĢīīvī9'“Åe%©jfķŒ(%Ó…+Ž}•„ŽźŹ8ĘxÅÜ£ÆėjBh”ŠT]»”`µrww>e»A÷r{ޓӱ.ōK—[輕’L)ܾøļ^ĶĆźöŖ#Õ@ažI÷­Ģyz‰šßĀq\nM]ÖÖXĄkpXa‡?Ī·µwŃ­dŽŹāļĖb„üøbxģ3C™Q§ŠńMYngÓol–āDVłF õŖ¶¤iģ²Nķ'•‘²VŠõ}2ęĪ]8ČX7¹ź+× Žöéš6ł$}źtśvęÄ ‘AB0µVø°Ó"‰ģ–5_,{P3ƒN2Fó€ # õŖkl÷ašp€”Pqšv'öõ½¬W9Ź!—9&‘ōŪÉĖ4jPF»ŽGZ®W±…ŒÆ¶]ZyQ²Ē†?7Ņ“ķµ·ķbX°`„IgAoØ,öūšc–8Å#,ó)„|čG=ĮöؔKŒŗ76v.«qt±É2 ŖĪ9_\ē–ĒĖ»ˆ² i8ĘiIčmčo xæMŃÆ$Ó$Q²X ˆ*ƒ°ćœ{×?ćŸ^xO·÷_źW~Ė6—RxĻązÖf¶G)ØxŚOX‰d†;I¶€BÅyަ§jĪ$_/Ē8ŖŒYŒŒ›=^8.b†&ĢeKy’>™­='Ē6V×:”k dcoŌV†v1õ+»›kvRŌŲĢś)mASlŖqĖŌśÓ2±±a?ŪĻx€”äńZZc„ŗKi²±l\Ó0jŚźĶs¤ZÉ ¹V•łį»āźł’ŅĻZ¶‚Iļg(2O֑²=¶ž4Õ hl”ŠHĘ_jŽ‚¼Ä>Y”^]ĆD%!pÉ©r6ˆt³Fއrø„B6…>[ƒ×֎`qźt‘iÖŅŲØ–ā8¤Įb3Ė{}kWĆĀ+0óy~lXÜGJ£žläšĢĘņ-Bü\ŚŪ©;a µøČēŲńCCŒŸCŽ5/Łx{AŌoµI£µ„+l\ņĒsھvҟV1ۊøĘĢŽfv> ŚųrįÄq]ŗÄĘKfnUöœ{ņĖ‹ž/¶½Ńć—ĮŃé×{ЇxŲ,‡œ˜'в£®ę’…|Q©jz„ü:ņ̌ĪĶ!篠Ķwņ.¦ésj–ö’VłcU`Č”„ŒÆė.śhˆčNs‘ķ]w†ÖēĆZVŒ’źŃźZżŅoø OīOCłśSQø)–üGć8“Ė»E•"1Ą¼w=ĻćY:÷ŒīüQe¦¾›§Łé–°F@\ĶžrA÷­b„qw¾7ÖtĖ[-ČNĢ IåńĘ9lžŌO4WrŻź’\łkīŠr {昚<ņŁćR•ZöŪ÷±Tü}b¦Ę’Ā µ•ŒpĶ!ĀļĒ@}y —Ld:=³hÖZcĒÖė ĶüĶå²d’ąu5Öźvsź+¦«Įr…vł|€‡§Jųtz6Ÿ%Śé°ZF͈”(ĻL r+ėŪérÉ–ōcžł§ Ͷ5ähĻq¢’Ś]Ä8mĻÖ±!’×Q֓[„鎯”DÜ'N¤wč+RŸB½Ž½§Ūj1Ų›)å»u/¾#ņØūÕēz§öÖ•ÆŽ›[™­cv…;Iōa@˜¶×WZ—u)’_˜ī,sžj™ÓtŻNkėß,$ĮÉLõŌw#Óo/,/­’8Ą•Ī[n=Åz”šD÷6³O|‹˜ÓĢ žX{Pčóm;Āž ńÅÄözaÓķ¹eø”aqŲ×EįßjgHŌ"{¤k„c,€œ9ž’*—‘™q©¼…¬miUküø Ā¢z„[CØ$¾ß3ŠvĶD£c)Hõ’ [_¦•ypóĶvå.œ}ė#ÅvŖtéÆ%‰Qqø±=(ƒ0¹ņUÜiØźŅ_¤ĘāÕ9ߟ»ļ^Óą6ŪwˆåķˆĀ·<ŸZŌøĖ¹īŚ¶“>±jŠŻ¹„Ēóyn㔢 ĖŲ ņHī8­c”œjÓ'Ó4k”Ÿ5»ŲƊŖÉaz~•čŚV¾mØYʑʊcįĒ.Tą‘Z©˜ßSĆ/µ±moŖ›KAi4®ĮČM»†y?×͚’ÄmUnīaÓī$“¼L|£ų‡©«±¼csˆŸÄzĪ©åŲĒl×ד8 £»3_bü$š¶£ą-Ę=IĆj’ ØLö>õ”‘RŽ«ÅrĮik<-µ„QKėiaŚŁĻR¹¦c(ō=.ēPņ™8Ü7^¼ÕOG¬éfŽ>“ĖŖćę(ĘĢņE—ÓŻŠ0ÉĆJKeæM8ź6Óle;H ĻCŠŌė„NƒF·¾×ɆvPłŲžc§Ö½KĆ’šŃ ‘eœņ3«A^ĢčuŸ ^Ś;]E{u^ÜEhxjW·PŚÉg;ÜĢųйĪ8 ‡NÆŁ|9`ĒÄĶ˜Š70”Ąś ś×Ļ~(ńEö»ć×¼h¢ĪÄdS»iüj„%+jcjZĪ­©Śź¾½q’|ķĆė\-߅ōķb4ŌVCutķzÓē&R;χž½Ńuču ģ”·‚3ņ°9foį;q]ÄķW[іĖP²³KcĖb!å“ŚŸ6¶*'˜ųa5$‚ėQ¼š72>A—¹ā½JŅĮ.4ąóÅäĘÜ«°=iŲćŗęŠ–ZŪOĆĒó‚Inō®Ā;A4+pV3 ‚–ķļ\ęR}Ļ-ńV™dÅ’k„rė·ų}’S\ä֋¤§»›ĻŽ9$Žk9^ö4Lō›éŗå±KWRŒü7B§µQ‹Q¼‚ā;x’6}¤3}ßsY…IVіhbĶpĢ—8 Ųä`ÕéŪJ¶,®#fÉ;TTsÖ“ƒmtˌ\_›k‰’ČO$õŹų’ś¾Åoūö8Ž$éZÜRއwįOjVžšO!y™y#¢Jåµ9tŪ‹‹‹ÄUšęL$œōõ¤s»ō*Cmc‰n$H‹0)V֗­„2Ķ{Å)Ęx"³Rīou?š’¤0Ēwm4RøŒ³!ąųWĪž!Š­|IŖ¬÷–ˆĢ[x'{VŖV6שå~3“½Óu ‹;a%½²œ.ŽwL֗ƿW¼ÓµŁ#Žźż„^dQ‘•^{šŅĶ”“Łčz†Æ“ż9ļ5ķķæˆAY³¢jIŗä«äwؔlfÕ“4a·K7½¤£¾Aė]O‡4k½AT†ĘV²É;äRļYJf2‹=kCž=2Śīe‘c–D "ŸLē§Ųź¶Z„ėki$s®ppŁĖTó³Å›:İi•¢’r›¶œsŒ}kĒ<{ÆyZd1Z‡;Ō–  >§ņ«Œ®ģT.šÄŠXNŅ]£˜·‡a!Īź¼EćˆuK±„ŖB¦5Sƒ÷°1ŸŅ­#©2½’Å’ĘÓyˆ’3e³·ó®;S¼f³„ß+†%%ąŽŻ(ä*ĒYm;jš†”©“Q ;w’TgŒ×ć Bk‹÷µÓn¼÷ €ųą\QŹĀĒMįū«ū$X”H·o¦F+ØŅļ®ÅĆŪłę NīnqN:2¬t²]³ÄŃČß½wxČõ“Æi°ŻŪG 2Ķ:ąōĄQėUĪeĢö'ŠfŒĮå2æš$g„^ÕÆģm­ę*]°0[ ųRē"i¶r+8ž2ˆäÄÜdė¼=įM3O–=ZėT€±r‚)Wī pĄžuP––4‹9æų¢ĘćPæŃōøĢ×·Ė1CµĒØ5‰e©Nó“2’ŠĄ9>¢¬Õ3¼¶²ŗ6Ļ‹™$BÄܜTÖwg ä|„É${$=ČV$“Į4Ę]žŸ_|(ŗ”m2ĀóS˜±ÆĢOŚcąģž<ųsā}āծ綶pbēšü ś‚EnŻä¬*)šσuł¼#z—ė0–EHī°dE =iŪŚĆd¶čP,ƶ1Ī)‹œĢ×tųļ”p‘†ldŽŁ£ą¾¼ž ų£=ĶõՖ˜Ņ“—S#DoP(5ŒśÓĀߌćKŅ<¤ŁŻaõ $"Śe`¢h‡=1Ī}köOö>ųĮcńoĆöŗ–•ŖŁ“”VUW|NĻØ?Ö³ö`źt8Ū’ž į?Ł÷A×>ü(ń’Ä;«|\݇’@x1‚:1䒞?‘æˆæuėõī„}s©ŻĖ9g–y —Ļ$€zu5µ*z;œŃ•åsÅWXA·2Ęt款ÆåŻ I‘ķńĮŪך­¬uŅŌś_öeų¶ß¾*iŗĖˇp‹op» Fr~Y  š9Æėoą£×<>fĖ Ž,rCŃĄłHśƒXUS²0ŗ¹śį=[ū{F†{ƒŪāżŌ譜Šž"·o<Õ“-lŲ‘8t#‰£?yO±Čā‰pģš\ŲĪ’į?Ē;OŒµ’uäūSĪĄłvÓ÷Lz{׹¾—u-tK‹{»I<õČ$ ž¦“JĪ,Ś0?@åńBx®[c4’Ė Œ}£<}kfKó¢ “æI’ćxTąq_ ^•›ŌףŲģtÆĮ=šŚÜ¹ĢŽ`^ wĶMyį6ßQMjŹ!<ŹB£Č0Ź ŅÆ U§taVUųjM3RŅ!½±DŠįqę.r[Ķgx yņĒ0å'vNG^:××`ė^'Yt7LĀČ$^sޣޯ]jléå0ÄŁćµz°‘É>Ä_k·š)<õG‹9Øcc o%C!gæŅŗ"ģa43G½y cޒȽ¤³}Ąt t­dō"®łZ„,³Lõē½}Im©Y-¤¬‰æoĢ3܊ŹĒTC›ÕŻ%żģ*pqŽõåŚĶÅ»£Č”P· ·„®gR]Žg\ó/ķŁą³d1’Į€Ī3^dÅŃŽ!['ŠÖ1±Ė)“E ü[˜d1@Ē?ļW¹ųZ[ęŽa^7o?{č+hDÉ»™:„Ō—ŠÅnĄ3 `ō$Q#¤H²ŃlĻOā­Qq·9vśčł°›… —>”ųu­Lķ’ķ€ƒŒņh:#ŁŌµ­FkV–ΊpA8&ÆxE.åK»‹ˆä¶m””nšĪe%­ķÖ³e:Évcdv^ø#ŅøŪ_hš”³3}¬”ÉG8Ųx¬Œå$®r:ćO,­}#¶öĄŚĒ€>•_LÓ?µCĒ/Όy ӊŚ&;?Ɩ²Į<Ŗ²],p÷×0ŻĆm4pļÉĮ(®wTÓĖG,ńBļ RAżØ"HęąŅ噼9ädōÆ@ƒL·¶Óaµ„Fąó,Ļµ£›Ö4&ӝåӜʒ|mļō­}WÄ· c¤BŠĖ0Œ+ä[ŸéŠ,_9n8Ƶ o>e·‘É9ĒO„féŚlZ}Ō Ÿh”—„d8«īt†{‹Ų§¶ © uķ\Źé†-ü+uŽŌ&W)i®`µ±šĪdKĖ€I?)®MŻžuGu?upj¢†jézeõ܂c#3;ä×uā j¶ÓH$XP®ˆwŽ·°Fń"6¹”Ü¢ŖŚ“ŸĘ©Č5—įĻ „“_æ·f#ų˜ ŸSYĢŅ •t‹ķNÖóY‚CZ²7’øäWq§éŚn£$vMåļ”O ĻV'­sJ6:£>ēŌžų‡”Yh3Ųßʏz£0¶~éłW|G×/µ›’bŽŽLI•ļŅ %cŒ‹Ćś,ś2°}ø±ÜæĀG×®kŽ»š®ß-­ŌļÉsŌUCs2½ŹĖeb”įBĖø=ė_Āž.³‚6‚ü¤ «ĘļjŚĘNgA*Ūs0ŲÅĪģžõƒ Ķ«źQ[_O(ķŽ½W×õŖQ¹Œ¤ixv"ø¼ŠŁ›ĖÜ\óŌ×g5¶ūQv¤h¾žGŻ©%O¹‘kwrūJ…RIŪĻēZŹ’aÜżæl“FķęĆ;FyĒųRhµ+ž¢Ś&±cö1™LčqŽ¢«xwįö„ż®5}Eį€1hĆ 3÷G½O³Fń)x›įüw¶©mØÄ$XĖŽæ”®7Sšžž²G*’·|޼ŃģŃF߆4ƳD·bŠ–e#§JģķmOŠ[ø‘Ķܕ'Ž•2c$ķ”ŌhZæŚ£ør!”øŒ{W;®]Fڬw‘Ø™‘<¬śņg#Sš›ķ—^l{p É+éWģ`M6ć˜ˆå†CQ6‰,<@²0±äw† W”iŽdwĶD²ärkK’Ł©6±ˆkĄķN[°"±TA{bu 1ē,¼åzŠ%!žÓ7•†į(·cęķõÆi§F‘d¶D ņņš𨲉Ól|S¤'ˆ57ŠĪÅ"ÜŪ€@NŲß­$ŠęÖčłÓ\ń†Ä©o„Ü­’’Ä™į[$b½=bąXÜÉoj³ŹcʌńTCV<ĆAń.£§kĶ«j0ŗ;nO³æĢ¤ž+„ŌŗÅ÷›ŠI”…>Ÿ…>^£R0toÅ ŠkĀ$†‡£]Ļ'ŪtŁ]Yc%”# Œuü«ĶüAöx’HC¬­ø¹AŲę±±¢•:»Õ®åhķ#ĖŻ…¹]yuM>h%i$1ĄW#s¢Ž[粓ŗ¹A:gäćßŅÆŚk²¬Oj¤½7„V‘ŲŹH̼°WŃČĶ+żāGC]6™įū‰ąū=ėF¶äŒg­kbu1é0Å$ŻFZŚr88ķ\·Ężń?…­5MK³–īŚrģ ķ śsNqźoę»]NéR܃=ŗ® ĘĖ‚=ˆÆRšø¹ŗ»“2ØHW/œsYŻēÄö‹©ÜEūÓ$øĘTHõā¹]oQ‚W‹O å*ǵ™9ŠŃj«™5µ”7x=jŒ6÷·6ćĢżćž˜ćŌ”ŅVĘŚ[ė˜Ū|`uā»+L[½9.ćÜ©'ŻČėI±ØœÆˆ|5yn†G4Lüxšļō?Ł,Ģsn* ķ`4ŹŃž0“QcwkéŸ2²œŒU=?Ęwŗ^„é0ŁbXŹŒ“Ž‚ÓAŌt»­3T½µŽiÄźēĢRsµ³Ś©é=¬ā{ĀžS¾Ę‘;A8ü:ÕHöĶb ,ü/wåLÓŪŗmfC’…xõ®§ %œpĒż©?É‘Īģt­ć±™ŁxYüIzś~›ŖÅn·Šæ”»½ĪzW¦K£Aok%åō‘y>a]¤żģu¦c-ō*ėz_ˆ4Č­a·µDŒ† ”c”õåχÆ-īōYdX¶ao¼~”GĢą®loÆu=#BŗrRy6“Æ÷V¾ˆŃ¼)’ž…kÖ–Ų¹Häo¼@ĒųŅh£¦Ó,>ÓsŸ1¼ū²Ž3‚}ń_Įā]V nćk«q,M|¤Xn7{ąTŚÄČõ]zż/o-—Oģ„ī1†ć’ÆY:Ž›%ļ†īb–)c_9XNŻ#µLmŌ|½'UšęŽśr걘ąŪˆÉwɕp=+" ZÅbÓŚ83±Ć LŒzꆑœ‘Ź_\A”żŗX§–K™H ­÷TcĖõ5ękĄ»KĖķ„“‰·²wƒĒCéPČ*x›ā,Zäi’gžĘi#ŁpCåeaÉcļĶjü6·Ņ®5ė6m© QSp|„V™q‘ßź¶z~„yGm’W‘’9é^5“ÖĆ-“ķ³9ĘDfm¤t—žŃ>$IöHįÓ4ż@ÄDŅH?֐8kĪ<šWÄQkŽuÖvµ¶˜cˆüŒ£ų«¢,Ö3G¤ųöM;Āv–ó_jQĮ»#Ż–° T~Ö,2¶­ąŸųFµ$x„½f'ę¬rŸ„\Bžrž;µÖ?³įSr—9%Ćt wÆių}ye®Ļ}§Į"ÜN‘† vÆLśv­ OT“š\W‡”ŪFŹ~Mķ€E`ųĒTŠuy,ōķ! µ·Ž#ˆ%œg9üs@Ū2|7įØbÜUH…I?©¬/>ŗÖģü “$pi–¾d“|³Ī{°ģ+ō.0»9Ļx#ڂˤśc.ģ$ĮćŠåõ7_iڶO=\ŠŻF{Ņęč‹ö…·‚5YÅõźøČ.:S|Ywe›H©öø[p1“øŸqż+#9S±ÖųJīā{[IgV„MĮ$tś×Cęéšf£u{n’k[i”ĘzĪ=Ŗć”ā’é¾ »S»¶’0Ņ ±łG`k˵?Žj—§IŠ¢ū4ŗIŪÓ­hZhé<1ż¹¤ N=a Ó¾2mĀ“—P u1h¢•Šóę.v’õčņ$Ļ…kŁ"šURI* ć„uš6ƒ¦īßŪKH€Ē6EŹŗ‡’źPöņA n¤ŒuĒׄ{Ī•g„j\—aTPįų,ŲäéœŌó£7&Eā/ŚŁŲOaemäļ*¬¹ČåZʱ%²ŚéšzļYp׫äųö„Ī5>ęt1[DŃłq}¬É(Sķīk[е:T÷~Ļ’0Ŗp:uĶL¤RW2¼­.‰š?ŚOŲrXGøĒŌäՍOÅöÕĶŜŹßŁņü¬mł¹ūŌ¢}›8_ ų?J›W¼‚āhœ…¼“+Œ{öGµŅ-ä°µÓ ·µ1¢«¼pqųV±•ŹŽš3_ÄĻsŖŲZišv ŗ}“7wš‹†c”ć8ąq^Qį­kÅöZ½õ„åĢ€’Ŗ*6īĮī?* ”‘×ų›J_Ćmq­Ü0ʇų‰®{Eš¬3jJ°"%“DI½˜Ų?Χ•#;ž¹%–›oou©x†ŅĀdŠLŲī§śq_'ų«ĆzEÖµ=Ŕk»Č]0s€}ż«6ś#E!4mĆŚ$ŸkÖr­œŖÉŹūóÅkIØĒ¦Śˆt–hŅRJq»éŠ‘J]CšģšziooN—%ymłĆēŅ’]KQŅm^9e’]Ŕ18f<ŠfmųKKÕ5Ō¼“Q†i$Ž3¹1޽Ēē^ ńĀ?šŽź7lm'e Ūø(;VŠFŌĪ+Ą§ųŖĪžKyZÖ#’ē£0Įö•޹öŲS’ģĢŲów甩gJó<—Å—WŚ½ŌŚČ3$%Ź•\ØļĶyœWŠO$Š^3@ŁÄ{Ž©2–ę>±ØGd‘C/˜Ć?(9«‘YżŒ_‹s-׎öuÅL„c .„­/PŠņc$ŠŖŠ@(k²¹ń&‡§éÓAwd‰4’ ŽƒéŒw§‹4“_|5‚FĻS±¶œ˜Į&hC?™čµęsCįŻSW½¾ŠįķķX±ˆ¶« ōĒAZ)›&ŃÕh:%’5ݬF¤ČpxÅw^°÷“ŽĆƒh#åŠN©j}ĻIŃc¶Öl€¼ø‚2ųŽŅ6)ŚUŻ•¶¹nśŃŵĄ)# ,ØÅ fS–‡‘üvńµā£¤ ޵3ČX¹cAžsÓņÆNųuįKė?iŚ-›ŲKq9s Œģ1Ą9?ZwV±Ÿ6–<ūÄŗ|¶’Śé®Š0̜ŽÄÕ_†ņY^ķ téŽĘ'Źł‹·'®©{‰ČõŪķnĆPxļķģÖĘ8—‘’;׎|G×®õ ęÕęWŠY0Ŗp)­ĒĪ7įŽ…w«Fóėo“ rqøg޽ĆW{:Ęx䊼ŃT@ąjՏœł;ĘZŽ„āOŪŪč–W?e€2»²§c=Ķ3U¼Öģą³€Œ9fF3CBŠ]ŁĖĒk?ˆ/¼ ņy«yāŖj>Ō­!ø‹}ČpUzf5<†ė‘čz^‘¢Ģ]l v’WœEixņ‰’i0[ ĘsŠĀq5Šźu6óČČŖF÷AŁ©4ėĖØ§žķŲyYō¬A®ĆoÆm¤™dI¤3®AĮć²ōøē—P’ęif qnŠ}kX>†^G„Fҵ¦ęhˆ'oŸaX–Ń[BęīYä!”ņN„Y#;x4ŪF T^K¹$ b'ż…Cćķ6ņĻģQ[‚2€²1åi8£X£ēuńeÄ/pf†=ę5Vēx®=+_J×dŌļģķąåčŠ(­`Žƒ×u‡õÅÅĀĢBöu8ėśÖī‰įĖĒ™as“іvĪISŲž•NV%ŹÅé'T§lQ©$öÄżš.E mŁ’1XŹfL»Ø^³lZv²ē(A9ĻzӗYÕ “ƒL†ņa`„‘ū™¬¤IuÉnķ ØGĻx«ķ’³uYHn^@±”XĒҳh‡©Ö“ø®—ļq,ĶĪܝ¤ŽõÄ_MµŖÜé7@$o˜¢żģų«‹³"1¹¬xM4Ōå}ŠÜņ1ļ\\¦ÖÉ„`ˆē•F#„tĮ›Ó™ĘźšåĆbŽŽ`ŠøĖüėšŽī;Æ=Ož$#Īęµ6=ylāŠ^āžń’H@ —'śU/ \[K~.Ä #/÷Ž: g#Ų%–ŚęĻ"=“ dŠĻŚ£euIxŽŁ¬dīĪvīvÕģ–ģ±Č ÕėWī¶“ńŃ9t=\Õ"5a‚ ļ“ŪĘėœmū¦¼æÄ~æÖ.Õć¹0$s“&1-–źŅāöpÉ9Žzż=kmWXŌ<•C*FrF3ÓŽµ€Žļä٘d•Ņ–• »5źéšt­m¬½r0 X܈/{VKXŃ-Į?w·ØĶr¬É Cz®ŃŪȜ~SIåŽ ń ¼·2[¦ņ€aHl‚{Öw†6OŖCqw˜”ē 2ö›Ń•č>cn±ŗĀØUyb€Ŗżs^Eć­*{©ļZ;:C•SŽ„g?­I¤&µG–izZI;n8ųĆt>õ¹=œ<žS²“™*9ŻEĀę՞§„›G“™•&8gląģ1RKwg+Mä’m6»7ųSębm£‘-Ī`EƐ~č÷­KkxŚōE+y°«d°Ļ͊ÆhK™ŲĢÉc ÜG… Ęs“{ÖUō¶—ØU÷+‚q±GJČ+h:'ŚoĢ÷w³- 8^‚½ ŽŅ ®ģĒū”G&¦*ģqE­M—Ć0®“ĆŹųYmĒŻzד7ˆoõ ł§Ō¦2¼„†UĄ5ŖŠ4tŃŲH±Ķb (ĒŻ·ćY±L“ vPr¹ķG*3”l¬Ļ4øŅ缷܌ŹĖ"§aė_Ÿt”KÉK6äĪY‡V ²ZĻ—ķĶū=^h¾"¶ńļ†=NŃ„k›÷Hö©Bäžr1_žw:/Ÿ:ĢÅ>ĘːgŸZÕO¹Ÿ³fŅbµ¾•å&śĻūŒvĆדųßDšĪGkr¶ŠIóɑ·<ūՕŲś/į'ÄkĻiz‡mīAæ²/@Ļ“$*ĪIķÖ¾ąšķŻā/ŁĒĮ—æ ¼–”{yĶx×, ˆ$’z’Õ|«bO޵|ÄņXΟRrūć=:.9>õjFārcŽ{ˆX0'ļ/\`Ō¹›Rv:ķ;^¹µ]Iŗą|ŃŲ½ėś%’‚n~Ńšx—G—Gńģ¦ī×e›l”dČøĆéÅK–‡§JJÖ?£/†z¾ž°G~ s‘Äyē€0HükŚŪ˜U£'ž:ŠāØ93ćoŪ£öq°ż¦¾ų»į€³³›Ä1Du¦Q“Ź€±=³Ļęküņ>)ųYš_‹üOįĶvŚYŠi# ó‚sč¬ć»ESģ{wĮ ŪH 7‘EŖX°A¹~i[ŪjśśÕug¹’īIMŪeņ?5|v:›„œY¼mk3Dµ±“’ŅÖōÜK$,pÄd“źkŲ­µ ;SY--%āP­8>µÅFZź)E3Ҿk‘é^#ƒNŌȲdāBæ+7<ÓóÆK¼°±Ō'uk‘%6.wś|ŗ¦–<Œ]µGšėSYĪŪCīŻ·qk'ĶYqÄĪ0}+čiČņ§*ŽÕcīqŅ’F|¼9łš÷ś×\Y‰©hŹūI³Ž‹«u³) 晹ĘOÆ=k¦&|Öf†—į”g†Wläõ>õŠ^IØĘĶM,–ż2JeÄč<1® Ūj2ķłöØcÉZŠńŸŲćѦ–$TćķĪh"R<Ź×Q”iŁór¬»Xgļ Ē;F‰ę’‘€9õōøÜŌŅć³¹“Y³D:Ė^¦Ś‰¬>R½žµJV55c;ž=>;©\@ļ2}Ę?Ā;ā°õkˆ˜mA‘œcŌU)÷4åFG–—1ē|¼/QY×1Ÿ÷Jr=øZŠf$·²„x©TbKʵō“2ĆŌc÷vjMt3sÖÅŲµ(ģŚįa!‰mŲS\ʱÜÉ7–oŗN1šĶÄĢ®.ššH.“•/÷ŖĪ7öwļa%ŽF9¤cŠĪQ:Hoń ˆ>ÕĮØ.n)¤bŒ£'=kKé`„M;¤qĘöń¹;NO©®ĖĆž7’@?oafćvsøT–©£Šń.«%ōĒdޤgÓ,§øLņä“ĢVćųiJ™RXåœDŃe×p]ÄćŠļ4m%. nJõĪzµRd(«·†“¦¾1#ŗ¦ÜČ&„‹FKXļVxĢjæw#“C‘FL1ŽY#8QÜ÷ŹĶ¶[Ó%«".īŻjIlŁæ_+KķvģīLJųS4»hlü¬²<ĻĆ@&tŠyW2łsĢŖĒ„ĻzŃ’ĀŹD"Œķ#rI÷ Ņ2±…«Ė=œOl‰@Ą‚ VŅoLŅ#’ųŖĶ“ČĮz3{SH$īkhŽ-¶¼‚Tó$¶…‚2óō®tźs„ÄĀy^Tߥ?ĆWģĢ„.ĒQukgs£Hū£ø ÷Ēs^%ŖŁÄ—ń1ē””GWr”Zl!UVPyĻjŻg-‘@M«Ó­Mś ×dšŗ$Y‚īsȬY¤xœM*>øØ»¹MW: ’DŠE<ōćµu¹ž[”»ŗĀŌֆR‘č’ŁÜXĮĪBäq“ɬ›O¼W©o śćśÕĘ7DwZ>±؟.O)_?+g>ōķ?Ćŗ•Ó¤RščAb„äjćOøt bŃNmĖī9Ą ¤½Mk%”,ņƒĒµ)A“p0M6™vń“ē$ąW]©KŅ•Qć‘0]”Ö³e¦ymī¦×6³Į  ”»łŌ66“^²ŪŁ÷1üķŽ»i®zŸƒõt›Ø”2%c½‰9µļvāMi£–ĘU cŒ=Ø+QŅŗĖ/jvVBĪĀvK‚įÉ#8J £§_£YM©ĖqŖ5ĶĶĘ ģ^x\V­ēе iBeXye{œRh»#9&O?Ɍ*Täd+̚mbņ{»mҵ¼MĀzP¢L„Õ:,6ŸśŁ:É"1±ÉśÖbßßk¶ö:k¹2|ŹŻ×<Ö±§sģuŅBń[ŲéSEåÜ( œrIõ¬?|3Ōmī!½Ž|Į.$Ļ9AųSp9$Q‹ĮW0]BĻ1•sŲĄ©52{7ĄE‘ 8ē5‘½Ń¼É žŹĒ~9$õ5ŹZė×B=Ā<ÆĖc9āšW0ctJn&{ˆDrĄē®‡G¹›[µ¼žāŌĂBw!—Ö«‘™·Ų°óé]$&ęĄĪßjՇģ7V³Č—«ü+¼jlC8łä+"YD›˜åėvV;T‚W'Ø$R›Ž}Ø _13ę»;»/\EF?ӑ}Ä`·µSk”Qņ2/#‰-– wWp3…9»t³*žzŒ`ŽNjKбŖ¶pŲž »°ĒZ”§Z]jw¶āՕ"Rݾ`I¤£a9ö9żKC–X®LNū#«Ī­üõ¾ņ%‘v‡ ó+H»} ¶£Klņ¼/3‘“Œ`W¬j×vMb±ŻIŚ”ø#“U)©ēŅk Ū=¶āÖĆ;BŸā5ēš†³™m§¤ī8ćłVm›Eؚ JęĀ2ņ\—N ئ‰ßP3ź¶ÖąÄŖ»r¼ō„chģXƒOŗ{›;Ó1`æx#pkŌotų5M&(ā1‰6橚ŹJĆ<ĮcŗŃ1os*²¦} _[Ų„ĶFSœõńJ.Ģ05+8nle;„/ü9<\¾‡ŻY;&`Ąæ„lsIž‡ā {”H-%‰FšĮ±Šā·÷p°‘…Ģ_.ģu’ÕZ¦¶1gW"’`$Ųåeb:֞‰ż±¬łĘŹ)ēļE^õ¬ģ"½õćiK³/8#sŸC^uż”%ė…»bŪGŻ<÷¤\ŁhĪ…5½‘µAløNƒÖ½WÄ^5ŠĪį„6‘ŪĮ: bPryķAŃÅõ—[×­µ Äeda$\œ©ÆJfmAmą‡8ē#æ½ČŅ–[kXmĢq¤Š6š:Õ[øęŸB’HäŠÕ¤Vżv‘IŹÄسĒü7§ė‚öēķÆ+®öŚŁĪyąž5Ų_ «vdhŻŪ®yHÕE„-“Y¶¾‘Q‰…‚ĖĮü‘Tuø®-/E¹(x\óXŽHµöh!šŽńģÖ•x,¼ā—QÖ'(žKHłåBšÜĶĒŖ"“^økÓ^=ŠĢYųź} jx/PµÓõ“× ›ŽōB8^Ų1:čµKYl–5lń“‚kĢü{⛉|›(Z2Ŗå÷twØ»6Œ;žciØÆ8ĀœÄÆŌś×E¦RĪ=“¤š”Ē$ć?JŃ"­duv7·qŻDŚX³ŒŌ×`ś›‰ŽG°  jœLO^ń »HžM“yk7®x®5K«MJdūE“؇‚£—K‚:mW]ÖuŌÕŅÓHHŹlW;n*I˜x†óģ–󬓧ĢŃ÷ķŠ††uŚ.°tm–ŹXm<€:WYy«łÖšM Ė|¤īBzV< Ļ*ŸÄ es4—C~öTuć4¾$×­ļ®ōū}-!ŽŽq‚ĶÜžy­ “×訐ĪÉš¤mwGķ"C+¹=×’jÆus3Mnė2Čzć”ü)št)§E*m pÄļ8ūŌöĻėZćiK­k,Ÿ½åź­u£]Kķ*9 Ÿ/RsO˜ ˆ/””"¹Š\äg†>“’>ĪV]„×<~gėno­’Q*0Mah’kö„Ä,ļd¤¬« äśĻZvŪ_ÄWPiŅI fb¤ž=«Č'·ŗÖ®WP»¶‘ >åņŸQ@ö‡©½ō_Ų×ŲKxć.§¶yā»ĆśdšÜż¦h­¶żÕĮ;æĻ†yž³£ż†ķRYIČĘ_=*Ī½­Ē`4ˆn'KbÜ¢Ÿ—Ó„1aįS*Ż}‘"`1¶5>õÜXųŠóĆz]ü0XC}pĒĖS!jžø÷ v[š „¾¶‡P¹‚]r6‘É#Ņ©ks_Ų“miO˜ ¬ƒ’ńļNż(Ųā¼gāI!‹ŹŅ„Ҿ0HČ….³;[%åÖŅŃć$tĒ®)z=¼Ślr›uh¤Œ­ŸŸ5āZž‰oįĶA7dÜKŖū¾Ćōā¦Lé„z“cZšž¢Ś’Üj3)h‰;¶g·ęké/Mxš&$¢iaŗ‡%~¾•‘·*<\źĶ§_G2N*µö²o.˜„&鑓ō§cšq3īu™ģŻD@#g/ZßÓļ/eŽRą“:Óēf67&øy%ŽŒ¼Ē‘‘Į­Oé %ē%¤Q¹9s·„qžÅö›Ż*Ī ß0C£'ƒ^?©L­,Ь§y89ē$ÕE…Ž^+ F'ŸP”ŖYĘĄƒÜŸj·ØA¹öx$å˜ õĻéZ×ø“ņ"(Wå(čq—0›Q"£1lä“E„݉¬ļbEGhNš Ē g­{Ü>CŪZ!ņeEQŽ½j’3”ŗ"–Y`Ž(n–8÷ŻŒžĖĢ×ÖńA‘ ݦäĶ"rĖįĶāų7Ų¢ń¼±Īćė]T^µÓŻļ"*‘.PzŠÅĢčBŻŁLbiķQįr¬{W›kZlŚ©į!K’Į‰QŒā©;“$O§xfxģnonę6”©5{EIćf†u`›ŽÓŒ€)™¾Äz¦¹4š]čé-¾ęĘ܎­Ī9ük¾š¾‡ØčZ›my"ŻĶ.d,v©=?ϵe(”¤vś›ZK6‰ Åų®[ė¶WŗŚ`7ń:4j[ż\x=Głé\7ķ! ź~½Ņē{›)!Ō•ćH˜Žväī÷Š†ē›xgāĪ·¢iO¦oW‰AXe}„˜cW;„üAń=ĶĀė:…Ä—^s¼Ń“Å#b’†¢’kזžęKēqvä䶚ś7@Ņ4ģųc%$yNü…ĪG֚Fs—CWU†Ö=ģÖ5!£e(Gė_:ÆĀ©ąø]R÷Sg¹IüųyķĻŻ­’±‹’=5“˽FēķŹa‚ć Ī0 gń<×ń&’Rŗ{o ىķ“92%”>XæR)“±­a¢Ė iv~}Ō²y±*³µGū×U§Žhē@ņnN,žõ戍D„ŲŠņ?[jr&ūDµ¶m’ƒ—ļ×õ®ŅļĒŗÄ‘XéW¤Ö0¦†Āy"’Ÿp8x§YžĻ7–·³Ų,ēxĒ,ø×‡N3’?ʧŁjD¢u>Ō4g_ׯõ©&’J ėœægŽėrj’Łņ’›˜ķ ž‚©S1”O”|‰¤ FŅīcóļÄ$sŹ–ģXōļ\ēÄļæ‹¦·m[T÷Y’8’<0|“šµŹyD_ ¤V¹ø”iń>Ģ…'ėæųuā-Āw÷¶Ļw ÓYČ 0ļ€~¢Ø¤t·Ÿmg¼µkr’gt*›yP}IõÆń%Ķ–‡u5īŸ ƒ÷;»rÄåŅ³’Ļ«4­¬žŻų–YnƳ[łiņĶĘHÆJóĘŌĀĢ8ą’*V±3‰—e*j2XŁ©–D<ūQ\¹ØjS|DÓ<į;$øŌЇø”ŒŌžµ§[؝·Žm5mFūT‡Q½•YIÉ.8ē>µóE戼j/åžĢŠ ƒö|ĮAäžōĶ”:‡Œ•…āč.|lń·jm„6Ńß$SåQćörź:„Wz†™ ÄöėÉ)Ń@źÕ§ÕęcŌļU®0BÉÓ5nr’ézJjÆ5ģŠFūs)­MØM<“‹K[w…XšTš£×ō©h–?O£iRi…ŒŒß0gÅz‡†¼A§Ėį¹"šŚįnŲü¬Ć•„–£Q:[ ®5+Scj±Ēq'8õ®Āš"in×­y4­ ©Šč1ō¤KG—x‰§o[Å9/iu(˜ä‚O|×­xƒUo‡)üŠn’=Ńƌß—Æ„k ‰ä>pÕž$_x’ī oI„u'’Nkėo…ŚVŸ­xjk•‚5¶Ž2Ac“z»XNŽ{P…-£¼ ›ŗ`םjז²]y׏‰§Ē½†yśSl‡cüI³µ2,½Ģ.Å#hš›O®=+bĖĘŗ¦»{caÖ`1÷O|Ÿ ©rk`å:=o_µšÜ+,:\W¶ż]ƁŅøŸkzV½}>)£‹`ä†ļŠ#0TŲxkĆ6­ÜZČ>Ō¬0c?S[Ėā]?“¾¢É%Öęh䯫_hl®-Õ5TŌdsęL‘gr©8ÅgAzŃ̌ŽU— .xę°žÅ©Y,äŌ¼ósęJ–¹ĒAƒ]E‹Ē2L„C㯨¬Ję3­#+Ŗ>čäH—ęVĘCWK©F‘*JŽOEc5Qvd³GyŖexZ&ąž­(4ŁŃT©mßÅßqõ­ˆ{׃£ŒŻnę04$ĀŸjæā ošé£¼3$C’QÓ4ó4œ5[kq;ī‰ä9ĒN†Ÿ ŚµŃ’ÜI÷öcUĶ„¹™ō.›{4ŗ3ŪÜ35Č #† (õŗ-O¼²Óīõ~ķo¤1Ē‚T‡Ö‘'Ÿk^4’ķ'66Ļlʆ2 `w>õ喗ŗ¦©sŻĢQn™¶®Ž«īirŽĒ§ųgĮžCßź÷·vīā1JxŚ}}é±jsA7ö-Ą‚ ?Īó7ˆ÷ĻSžæ†h”zG–xÆÅÉa¦Ē‹IQ1M¾`ķŠŁÓ¼G$M”™e˜r ¬œl+¦‰Øź÷Vņ]_” §ēŠ[M#OÓÆÆF‘®č¢K9™f,U‹tR;րymōIo?2Ęē<‘Óń«V¶‚žā5PÆ®xJŅŲ {m_ɶ“ »~\篧,F„¤\ hDņīYG­ ’Š÷-"ŹÖw‚ŹŽxÄų ęCĀ?|ūV&¤-`ń†aūD÷ä(ėŒXK½)¾×ā[eĄū¹ Ż«o,e»\ėoöɐ !˜c?ZĮŒģäŅ,­ķ ÕŻŻ­ŗFFČÜą±9é_;üBŌõa¾k;ˆ-GĀģćjēÅ\"L„c‘žÓ-mMßņŃÉūʵ-fóķ²c+Ūŗ¢ˆR=GœI¦¤‚Ł7…ućź)Äk ĄŒÜ–ķ(T–&™”ŁE}¤ßŲõĄÜx‚īŹģ¾fcÉśV°eb½Ö­sؤ’\ʲ£sČąÆ „Ą1͵rĶĒz²½”čŚW›¶4” ¹É*ļˆfx€“T·Ž’–¹ä ‰K¢gŠ’\-_I/'“»Ė·oƾFų„ąųEµģrAę8&6UÜ=kžr•ĖOÄŽÖü3*łi »=ŗ‘ž°sėĶ:^:‚ ųƒWŠĶ¼–_bø1ā@~`O{VŖ73•N‡‘k÷čŪLwĀŽąeŃHĘž+ĶõKÉnķ%“üšA䜑ō5±‹‘ä&źćDŌSRŅļ®,u‰£WŹåOPq]^+’KéodÄ’"¦÷lļĄōŖõ šqė‰!Ū½$-ČOėZ–zþäeŽ˜ŠvS•ģ#öių„ź‘éśĖźisg4h†U“p™NJ8ė_Øŗn¦/“ųnIČ 6{Æc\ņFl¦RŌīŽv†kXK›wób чu8ä‚85ü„’ĮuæcøüćŲh i’ŲųCÄ.ī ³ģGĻĒŻÉÉć¾k)Y= ;ŸĻ_|KwįĶsūOIpäJÆóØĄ#5õŌµµōÄ%įSē €¬äśzs^&iIJ\Čź§.Œ÷æ \Ū_Xæ†Żnn`S¹„’æ”xbĆOÕ5Ń<,Ąd±8F|ė§fl’,ŽjSÅ*A‘«,Š7ē$óŚ¾ŠšÖؚ–•&K˜‰ ū¹Æå^®V‘lj‹kCS{‡üÕfbNF~ķr70¼N$XŁ”2kėé[txuV;‰#U,1ŪŽÕ»„A šŪÉ>ä Kģk²;²ÜŻÓtóŚÉ #ew ģ§m"āĘźI@*@^FGÆō­yŗ#N~ĻSšXē¶µa!ŒwķV”½æ³Öļ&" '…«O¹”[AŠÉęvß,„·“Ÿŗ’Ŗ¬ųæY/6øIČŖ3”zœ'Śœ¤r'®ŽĀ«Å,ņ5Äd»yćŒPd‘«aŖYŲY4M ;± ōü+¾µńE”vöVūĪ$;Bć”F°¹ŁźZ½œ+$Ņ( «žkŠŹĘęŃ”µ]ó0#ę?tSS5åct­2o>öå<ŅvŒ7ź+˜Ō¤dŌŽ˜=®NIėœÖŠ} ’05ķ=¬­ć’'†]ÄĒpErȉFX§ĶÉīkFbćcgE‹ĻvGuLää÷«7Aę‹xc`W©ĻzÉČJĆNŗbKi;yź) ¼’¦ūÕ¤X¤Ž«JŒ[DŠŖJję§ Žæ˜ e@éLH”l,t™bŌ&gtĪ#oŗßQY¶Óż©äy7ł[ŽÕčĶŠĢiī®ī ; ŖżŅYkƱ†ŠO4–ąc„JGW„Ŗ\Į…F8ĒÖŗ Żj]:4¢K/·āƒ2=w•å¼q²C‚yėķVüI«ÉØG٤Ĕ†ķ½*e 9«ŻRģŚ" Nxļ\V˜5ŌžgHŒ#“ŽąQ\āśķZŌÉ+  ćō®#L¼¹:™”øD'ž€J ;čī,"hęyћ#iØ§Ō¤ŠyH‘Ś#ŠØ§asmž;Ū†šw’`§$w"¹ÕŽćWy”µÄ„P>xPx5¼bC‘×éžÖnmÖ!ócBN:ūW=sŤĶ£“:·Ģq֔„ćŲŅæÕŁaXm‘ŒqĻš×1›-˳<ĄäÖ±.,»?†g…å’D©Pxj«{c$a†ž“Š)½ ²_{ŗ©ĘM\“„źVŅČń±P0j,T„stK‰XȰ»Ŗ7„z÷…484•ūu»|Ä åZÕC¹&/Œ5™ķnŠ\įuČéō®*ÓSS*É8SčI«ŲqÜśB†t“’}FÖ0ä 19#ƒZ>$Ńtū™¬ēx擆ˆ(½MBØokčdÜĻmvÓJÄ4ŒO+Ę p7·ßdrįĆu„Ė”Œ•™ČŽŽż¢Iå”)aéĘ(³»f~sä°łƒzTˆõ=ģÅõæ”KēGÖ½gį'‡ķāøÓ…Ä ål“ƒ®3ڃ¢™Äß ŪŚj÷ŚŽ‹¶ÖĖ4lŻqŽœżkŸųwć˘n®a»ŌüŲ€c`>QéśRGM@Õµ+}vdˆmÜÜ õÆ,ńe¼I“…•Wå_ئ‘œ’<ÉEАģV-žs]‡mv5ÜŖŁ *‘žjćä]ģ{ˆ×YŃ|=iŪŚß“Ź²nåNż?ąt›;ė­n;ˆ”Ŗ’H=żźłlG?Cæ¹ŌąÓ‹}ü¹yc#”üū c„ɤŚK„‰®ÆŚ-JŃŅDB>ö+_귚Œ(ź$žBŖ0;Ņø‰©\-ćŪI Ē]Łļ]O?v»]O_ū hFź}k91œµÅżÅģљˆĪīz×xŚVVnņ\Yʹ v8ĪqP'±ƒŖi¶–āĶ'10BwĶr§®n²‡!›*¹ē8«Œŗ³} Ń}qsē[³7Ģ1Ēqķ[ŗ•äS‹Ķū¾˜zµ36uMV;ÄŻ$Ań×#"ŗ?VŃ-ōˆ¦·Ō×TóD~S¼1ŌéNż ”Låbw¬›Ė[™]<݁"öŅ£Ś2ÜŲčté e¶·xüɆI|v®ĒNhā²’÷aEV<·@ć5\ęrg?sx×s;”ósӎ•‘ŖŽŻŁYF$‚Yc$& ĻsY¶4IįĶJ;³qlaž!¹²yö§6§­3ŻC¾½ÅsČéŠ:Ļ Ļ¤®4ö’ˆÄŸ; ņ1Ü׈ų§PKoĆŖż²7³(±Ź7œø8üM‘æāļ]o†PÉÄœ`—ėžæį» /4ųļ[j"ø'Ÿ­mŒZ7olķŻ%y"LŒŽ5Č I„¹;ŗr*š5ü& 'OĖĘ}½k‡}*kꔖwź3ķHw&Ѽ,–óAÉł œĪ»KU:•Ö›i9‡Ź¶ˆB6÷ē9?™«Žs„±Šc’śŅTøBøfld ×3ā-n)®īg. o žŌÜÄq÷w÷ „Ęņ¼{Õiku~¦įŽ»Š\ŻĄ÷ż~ūE²šéŚU MaYU ļĪy<}+ē[»=CIæ‹Q”\?.s‚qŚ„–ž¦ÄWW’:Ž31 ~nk§Žźcku0*©gÆoņiyÄ+Øź³IpÉ,Jp¬Zźü?į]oS»šU#·Ž2Ņn8 ōŅŗ”EęuŃhm±Ø+óō~:Œ՗©ékk«†icį¶˜Ŗ’°Ōni^ź÷šö‰ˆ`@Č©eń47÷2]˹/ījJögAyįŪ­I†X ‘•V8jᬓ‹»v]*šIWćØČĶW/r,[»³1Hā¹FESŃō‰ŽFGH÷3åJQ±>§Y¦éįfžIĢNŌéśE“ŒźäyC“Ķ!•u¹Ņ+d·µe‹ĢįA=H©ķ!ņ<±$fXĄ†h*ėQŽ[™®,­b†0ūNßŗø®Œj ²h‘y¤ ęļ&»ŗŽöIR'}ĖÉŸ\ÕĖ=(dM$ˆ>™éWu°åø—Oø’Ö-’ēåČļļT.lļфŃpä?­W*{Eœééh— –ĒŅųŌĘń «`ŽRØĪÓĄĻ­dŠĻ×n&W¶Äjńo'µv~”#ZĻU€Ūžę“U»)cmoEėž˜Æ=Ōü9Œ®`Ōv%ĒŁ¤ļķŗŌ¹£ÆmKFššµ‚ėN„L@ĖÆQķRų›Åvz®––ö“¬óƒ }Įčk;÷gjw»Æ^0#‚=*i'g Š^1ĪGÆ„H…®7HĮєśt®ÓJ¼Šā hU%ó¹_˜c„nE¦št72=“Ż*»Ē££xVau#-¼ną{P'ö«ā[ÆGog`Ą[G’I=GµyΟvóŻę#•”g¶ 4W)¦Ķ>æ{ ¤R3Ä VŲŲžµzŅųrĖO¶ÓšŅA-Ė 2‘ŹŸOåZF}Éq±Ī^¼ ¹Ć7 ćųk‘ø“ŽóM峫zōĄ«F3F}“VĖ$ń°RŻ&–oß[<Ό H¹ ½ų­ śyķĻÄ[ÉnžÕ”‰z`˜­ŃćżOTµÓt¹z)vŽ'8ć?…C:`‘vK«ÄŒL’bb8ĒjŠź 闳3«Ŗ@ĮĪΈ¤niŗķĮµŃāøy o”e°I÷&ce$:Ć4×ћæŻÕpDKČģ5-.ēlo m“ūĆüX¤¶Óž āÖH†ćœūÕ=Gįöƒ=Š“¶A§+““銎tkČz/…¾č¾ŌgÖ4‹Ą—2F«)$‚ä’]cüWÓįų•kįY4Ł,ŽėOŌžG%ŠFx`¾‡­'$G++xėį‡|5ąėC§¤GT™Ė¤ķ÷Jąuƛ ±ĆŪŚO"£HŪ7ķć5Qi’{߁“m.1j/ĢXŲū@9ā½bŽÓMŃ|8Ó[[LónŪ݁ÆZ¢e±Ėk÷7×v²]Y[I8‰2U;śž5ēņk“@"PŒ„¢œ?Ā­' LÖQC„=„ŠøóqŚ8_c^=ćzMRe4ų‘,Žųe!™Īr®?­'rąµ<’IŌuķCWŽ7WLĮŅ3’¼vkÕõ]Nx£xžŹ!w!€D|óÅdÓ6EŪÉ,Œ0„°>QAœž cœWŖ¤±Äņ[įv œŒŅøŽ2nµŻ2a5»@Ė.3Xv Vž‡k¦čVWs —QĮXäA– ’=95\ŻŻ‹Ć·÷6²_Ė« Œ"ŽMs:Tzī”„\=Ą‡x;dL Ą÷¦ąDīt÷z›2:ŅŁ<–żó2ņSÓµiYčVÖź‘O h3ŒwǵKFm”#š$Śž§od*Źįząų×Įn$·ń”„Ś6£ž‹tŃ;*²²ö xꕊŒM_ č¶ŗŌ,Q!•‘wd}Óļ^Ż”ų>ŽĒȶ†X¼ā (fĮ*:œšA{hnźkkŗÆ¢ÜŁ“š¼a"’?›Ėäe«å“Šl“-RļLMCĻøV&BĶžp1œt øĖ”{UÕeŠ“įwgø”a™ėĻjķ…ˆń‡5žØØct]ū¹fϦ(5‹±ĪZiöv—vś*‡ņŠ…‹;½æ*źgѬ“»Ņ¦Ś26eAŻz r±ģ>2ŌcӖĪ[ČmQb…PßLššźz·‰õLŅļ&n}Ėņ…K·įśŅæBS»Ōõ‰ąŃnV{y ӒžH.ŃÉĘ`?ĻZóĶoąŽ™wrŪķīnēŽAp§åe•ĒÆALŠßš'Ą;»“AiÅa(y’ęSÄg#łW®ü%mZtøŠ69g#Ž~” łŻŸĆ?¶>‡ØĶpėöiÖAm·qN*ßÄĶģW¶VŗHW/>.!ņ»{~(1v<źóķöÖ:\«ĀĻø€ŽéÖøŪæ†z}Ī“k4¦­ĆQAÜ>æ\Ś†ĻO6ś7œ-”Rź““Œć&¼źóI—Äų³¹¶})Õv–S’Ą}ī3ķAQ•Ļ”ī¾(xBš×„¼#£%ÖØ‹£)åŽ0}Ęj爵ˆ¼#ržYāū\$ņŠīĄ=:}k†OćMBĆGšÉ.‘uĒŽ=«ĆµxĪ_±é܋ū7ŗÜ\®Ó~‡ŌńŠøł•ŹsŸ|oĒ…ōĻ›0°żØ\ĢĒęmƧ‡äŚoŒo,,ķ4ŪVgDsĘīOĀ­Dq¦wÖzgˆ¤Īö×tyŠøÅz’…>яsoØĒÄģÄ« ŽŌģT`y‹<'ŖbņąŽČadĀ"? øķŠO żŗ×}­Ä“½¼xņ÷Ēń4“=2×Ä3ŲG ­¢ƒ>\gš¹ØųvęT}b( <ܒ9éYŌ0“±…iHä–öyGÜĀ’AÕrńƚ{¢‰€` Ōņ—Ģ·ŌļģķÕ&ÜīčO_ʓ^ÖÆ¼C¦Į ĆlŚn óārVć©ėRn.¢Ć­Z\yŅ3Ć ø·-Ś»mL‡F³{V3ņäōŖ‹9źXī“‹m1-/åÄK2ĄB³ž²d`Ć5åæ/utė I£ūKa¤GqÅl`–§ŠiĻ‹ÅĀ­ŌŃÉlŃłdd’ćR^±ŠŚāWŠęi†v¦:ŠvB=JžŌ|I¤]Xx¢;VŠ(e|ąWŅ?õMĘš›mMŸSŌ.„sŗ5Ų$ŸåA2G¢ć@š£i’nÖō»Gœ“J©(2nĒŻ#ŽØéŗŗ1½¾ŽŚ+]E‰‰e1äó»ßśŌø™·c„ńWÄ=CóŪ0+,jųߌqź+ĪģžÉć)õ=Mf2BĪ{sNĮĢyˆ ‘n§·^˜ŌtÆ[°¹Óü?„Ą/c¶–įB-†*Ī?ZĶE‘)t9yu+jGPÄďņ*Ž;}+×t *ĆR–¹h-m²ę蓯īEµ±č7މ.įŽ+»;T`0ąåHķĶq×Ä_ųöśÖ@śŌ±8‰0Bļ>£ø§kšS…ĪQųÆ®_¾ū’ŹJ ÷Ķ|Éā-F{­Bå„R×Īå[åėχ¦1±ŽQŠÉĘeX =3^ēū7ŻŽMń@·ŠI_˜Ķlä“Ū‘Ó½e(ō3q?E>(i÷~¾o¶ĘóŒgV`y8'½~wiŽ#Óļ®īīÆęĪĒƒžę²ådoģׯl®ĢvŹB”ro|×yįæŲųĘÓW»ńŪ›-åU„A>ŸĪŗc+nkPŅō x_K:v„Zå]•C‚Øōƙõ’Żj:ĀŲlŁI'–D<Į=MSš4±ļ÷„<+£[h40Ž\y#ι',ģG+‚;ā£š„1»²…un†Ļج%1ržu}¢Änuhƒ+‰Szžģü Šå|5=ćøÓ‹2 b7³`(ĻzŹN┬z_…µ3ŗŠKs:jńøžwś}ōÜÖö>ÕucTx”9}üc§O^”F71lłJ²ń¼S¦KOē-ĘŲ£)øģ}»WŗųŸĆ—.¶ÖŚ–ž÷—Kū¬ˆ‹zHé]PH\ųk¢&•¢™tė¶ūĻg<`WŠ~Ó×ĮŸL’8$Æ g¹4¹YQV:Oč×QĄŃ¼āx•8cv+Āõ›;ėiD‘Ė*’ÜżŃRéµØĶ Ę†ū“GöwaĆęćҜņŪ;4Ū|²GS“éL¦2ņŠ}žHmĖ­Ąä’*„6WMåŹĢėž1ŽMDĀ'HŽlQŖO¢€:žµŃčr£$å3ÉĘąćҹÜYj+s«¶·“٬\n+Ó5ĶĶ‘—ģČ(ąœŸ­kōNé-¬v¼V„%ŽNģV¾•mēB‘æ– ;OLšŲŹHĖž8c–[wĮČķŠĪ»cĀ–ė˜¤É}ǟƁr‰sį©5KQ%½¹g óqĘjæ‡tĖK}WūdWŗh‹d©Ä~ł¦QŻ-Œ°!€Åx±”Æę°‰”ó>SžBRŽ_žĪņ Ė5¼o¤÷«ŒšU…ī©āŽQ²Ö%;[ ’×ā®.ĘэQš Ų®J&’( ŖŽõ«·X[F³1ó !óp9SéüŖ[‰ó—Š“‰£ÕY¢‘Ž9ŗ`tö®MWŽšy‘M€ų'½k)8žķkl'ŽÓKŽó*Å[̉ŗēž•Żėz5£i°é0y”Ą Ķ×qĻQķŅ®$7cŸ’„)5Øāµ’ˆ¤Ę„®>µĒOįŌŃloōKVS*ē| u>Ę®āSč|ߨÅ=ž”,Sņ¶ņOĪsŠWҾše¦™¢Ż›Ū%ŻŌKå31Ģē#܁śÖ‘±¤Q«ƒe§Æ˜ŅyłAĻr7—öŽeÜZ|‘Ėz ŗ¾0}j†ą[Ń­N†Ļ^›‹™@’VfÉ»’ xBĘ’V·Õn¤Ž :ČrsĻBi8™ru>•ŌüKįsįQį;G¼‘L×d€‹Ę22zו¶Ÿb×iqÜ?#÷@äsžOJĻŁ“ČxĻÄ$V© .”ĮĖ÷#ŒWĪóźÆØJßkfڹ*Xõ­#(i©Öi¢Ś[XK2 ƒŠŌqóŪyq• 8Ąō¢R±Øõ iÓ\!{°óD„@ …Ō~ŻkL‚ ¶ū‰%SĄƒ‚?f¦R9”£^\±ˆO4 !ŪĮ¬ķNĪāęœ¼ń!+“ņi93fy6½įĒÖg*ČAŲ#øÆCš¶«oįėĖ]÷ø# •‡ųÖr&Ē”ü9×-uK»‹­lÄ÷dnHŒ'N¢®kŸŁ:¦„}i ¤K™<ŸCžzÖ|¬“y£é[oŚŲ³nĮaÓÆJģ.¼9ˆ$@‡+ʁī*ØödT<“ÅzAjŠ»ģG tśV‘¼ę/1ŽdłrF7ŠČč-ćņw^^H®0pĄSé\üŅ#Ü-ŅŖ'Ō ĮūrO©†ˆ¢)#‘Ōā½ĒGšćź:mµŅFČ»“ŌžØ •|Icsi§kA2ØN¼n+7¹Žūöŗ±'­%} [ ymäLoąH#9®–šCæĖ*%Ą`@ŒU©ƒ‰tß›.r:sҶ%Š÷^“LŁ× źŽäVr‘'ūŽD—1m‘ö ć„y“8%·k–We ¬„zćŪŽˆģz ›æt]SDŌćÕģ죸0HRQėß>¼üż¹ž¬÷ß“ż>dH<Éfˆ.ųÉQļž•¤”¢~E^ßdC,šČbeČO̼gĘźSŚĪ“Gcˆēr ±č=AėS+3ˆæ±šč“véČ& Ąė×5=£eŠČŒØJ9‡½4ŹNåViÄźū‚Ē_­jZė‰s£¼¼U‡zt:“F$gFl±ļ[6׏w+1€Ič) ֚­ŗ$ÉęH ŸCóWCg¬ŻˆGŲž=įKn'īūzÓH避 Į0hصm%|ācĻŌōŲ2Ęü•#åQž„xü«śxų+ć[ßX„¬ņn’ (ł Š‘6>‡†Ńć¹ łNAžšÆl’ƒśķ šC^ų9āHüĖĖY§Ņfn WJ QžĆ9ż}kŽKP½óŖųŻšs[ųń'Sš–æö—u ÓÅ$ü ĢƃĻ|Žk’е”K‰b¹)åķORMpā)ū§L$Æ”ō7ü_¬Ė¬Yé÷3oŅX/”Ąšq_M6³z õāf`Š„š\žĆ޾f½;;™Ļi6”ó‡†Ūż`'?‡ģ_õKĖN×Lui¬eį܎‡¶jØNĢ›ŁŲö’č–Ö®ŗ„7K%¼ŖŚ~és^{s¢leóc#¹ā¾»Qø¤x„īaO"e8Ī@ĻLU› ÓoŗcgļĪkŲ†Ē7lfi§hƒ–`7~訮tMYžŃ3Ū°žÕcåcü/¦j&žet}ƒœØūßZŽÕÆŸNø ‘·•ėųÕ&öDø“PŅ"·²ŽI·`ō'8ŻY^#øĘXÅnrĘbT0žēņ¬ūoĖ$ęH›Ü®sŸqUn¢eNŹXåv"Hā^:cŸZėtDŠkXŚQ•hf«Œz˜½†kNā19>Õē:»Ln z”žd͐¬3ėU&øxvāīßNŽÖtH·į?v°¾&čpZhæŚ!`%€eĮ˜ēÆCY=Ķ#xN™r.ZK+°å,­ž˜ķV,näyö¢ČĄ0÷¤h•I[£$h—JIUĀc ś×%ā ų]QZŸ¦åN .ļWÓ‘+˜TO½mx3J;/-o ,h~O›ļg½4ćh“Ęm]‘‹g ÷X ¹”]Ü^źė§ŻC ڼČ’Õ[]l)ńCE,ā`ėČ9=kΣӣ҆‘xß¼…› £¾;*W¾ƒGŠ:^¤šµ® ö®ŪĒeV|‘ŪWwįŁ®u -N@] “!ƒO±õ•Ī–xwŻ#[°‚ŒØč¦­j¹æ²–Xø\rŲ§Źe=YįZ¬is-¹‘¼Ō?0"ÆiÆm,"=ąŹ[nj“;U·–Æ•~QĪO­H|C„‘)“ʆ!ņć®*¢#.†F³ā›æ¬v®dŠÜ™s÷‰ļXƒĄ—Z^–un”ó䓬ĒĖėŸNkNCk›övƤMiy4ūŁW Ī>£šÆC‚ŽĀX ŸWtF°~”4‘期45¼šīŹÕ.†Uūüu®>Ļ@ø³ÖBßFȑɹBŽ„K˜¹Gń…¶›u„XÉ )˜(w ƒ–”ż+Ķ-Ր“éµxÅCe¢äöV—ŽKDł¹ Ž½CĆö6śŒö‹|Ī…²›—”ĮćEĮ#;ö„kżßĀ‘i÷¶²=Ņ%Œ‹ƒĒA_:éwqH’}­˜x 6żi©ŲN=ŽÅ픜-Ōž[Ē®ūLÕ­mb*ĆĢ`ø^z}hēf6,XŁĆ-ÕÜŠ¢™G'”8ķ\戓Ė[;!rpŁ4ć+‡xQ‹K…ÄŅH=[č+ŃmµĖmBĒĢŽecx3‡•®-5 mGĆwI É ÜväyĒxĒV¼¼Õ$žH’ŻJüįF=Ī)s1Mhp2ź×ó1ĪŌčkwūNöś8"‚Gł°Kņäv5&-®™¦­Ź3ß®>ƒ‚j ›K {ÄK‘åžH9ĘE G2ļ ¦„-ÄŃī'žöŅ)Łäøź gĆwwŹĶ”Häšō>Į$Z8NĮü#­oCŌ–Ł•¢$óéYöĄŪ©Ś˜_¦s@āģbÉ©Ÿ2ąH[y_—$ŒūW¦Z]ÄŗTm+#®ŠU\üĖĒj‰³¢,ąļŒr4“DÉ“¶½cĖm¦Ć$V&EĘw¬Š“E›ō–č“Eŗāµģ„¾,nŪŌŽ†Ŗ+QØ«ž• ųƒNæŅ/”ÖeŚą,(ĄćśW›ų–ŚÖWy<…gnƒŚœ¢Ź*čŠ}’Ö{€”Aą¢õ„B¢i ¦s·9Å@ĶŻ& )ļV[åe&0qĻÖŗo³"G*@¹9=h–ĆCūdŃČäG.Üs‘é\߈Z;9®mn"ÅŻ‡J؜“‰ĆGmöĒK«v%U€GZößųfį Y&fįøžG­lLQ•ā¼0ß\[YMq"ņŖ+3Oųj×ńéŚ½ć‹i”—«nõ"™Ó2ī©įŻ@jV9æ‰-øRøĘs޶¢šµ½œŅ*ŗoŹs“YŹ=M£+#+^Ō¦·H óFŠF@Õ;kqØZÜĻ2†€ '޵“At;(&½Ž1“‹ųƒšüZü:ƒ^±··š“a Ū‘ÜŸČW1½”A$zd3ĘŅ‘Ų"c?:½ˆ‘›y|±†–•Ič;W1§ź7śŻź ymķāčI¼Ļ ©2;[yͽ…Å«Ūļy°7°åō®b1m ×"2Č9¤%ØMö±LąŪ„jč6³Ip‘Ü®żŹy4źɧ؈ĢĖ…ėĻ WžźZDŗæŸ&–#,¹-“€h4öa§x&xć–m[P¶µ'‘G$1!Aõ5Ę vM.Žŗ™œl±Ēցū3VļĘĻŖH]mžĻŒeGŻJžæµVf•J,*$Ė}h¬C­ßYĆ„‘gó”` ńŸzåm5›Š«°„Üõ ‹žŸįϱDŽZ¤Ē!lŹo§ė^"!µiaĄ@>nqLGX›Ōe¾€Ęź®SčAؼdÆ4V÷–«+¬g/ü_€ Ö˜żCOžŪŠląø“ 4hH\7Š×*ML·Ō$2HŅO±£d ¦HĒóż* ‹>ššŽmqio6 g¶]“ļ*½®x2ŪWÓ漊A±œ'«VćŠĶ³ē0×Ö3ÜA«4Q˜ę(Ÿ¾½‰’ õX“ų&‚ĪK4ī“ ī5“Ff}ä/hʳ©‰śĒC\Ž%Õ,µßŽGž‹UG ¾¦Ń,²Ūė³Z”@q u9SžÕļŖ–ļo傲µŪ­CPŌ–ŹŅäAlü+E.±æsū¤µ…ÜLč›U‰Ķdkŗ…åž’KÉ'‘,‚-˜ĪqŽ£Óš¢bjŽÕ%²³æūk‘ļ 3’Ö5?†īm¬ Ć˜ŌōÅg3HĀĒØ=„śµ“3L C*ćkž³‚ĆĆ·BŽöõ-­^M„€ąsY‘Äü@Š.ŚžB×TŠ}=Žxž!ż+3B{gG†&Ĉq!ī3Ó4ø”Ļį™.nFnXó€9­Ė_ŚéžH2bwEäDŗ¬:sF#‚3m+˜ÆqYö6LØŪ—åćµHŁ›Ė6ģČa’s”ŗV[YÜĶoLĖ˜łŃŲq+i²ÜŚŽ}Ž8„1īĮ$õĶnŻŲŁŁB’r6Jü^¦Ų¹į¹…“Īé;°qĒ5[QÖ¼@±„ø¹T‘%,6 qž”Qn®®ä™Õ¼Ī¼rkmmÄŃ…É|mŚZøng3/SŠīa·iT:J¼Ž¹)–Có”żė``t¼LSÖǬé–ĢžMŖÄeœ9«:UŠ[§i ¤– ø¶ŃŸŹ¦‡WŠÆ„ž[YÓĶĻĢU““±J&ŻÖ½oŠZ}„ī!\żńĀż+GFŌ&¼°ŠG1Ȋ0»})ó2%LĒŌl¤ŗæiE¹Š ø,Gä„2+[؁SĒ§Ö•Ģœz7zյЅA‹Ī·7/¹ė^oāŃ.Ø øWlCņØÆ4„?±7©ØG Ä g9lņ½{I‹Rµ¼rˆ×Ī1׌ƒs»ŗÕf„$w ±*ĆžµĆč:›ų¶öūJ†)$Ō“t‚5?yœÆÆ®2±2Ļ>×®bWŠŅ"ņ]š1ÉēžkŲt×¾} ZIŚ‘Ą;yĘ;Ö×2åga¢ŻŲŪZ;ZÖM»0R섆:dŠēu4Ó¬®ä“±¹Šöܹ;ćČ =pi65RK8'¹kÆłl£ ørµs^"¹VŽ˜$ė&ē_ökl‘ĒĖĀČ5/øńÅdźj·¶ĒTFyU· ÉaėH ÖS-ÕŹŚŪ¤k m¶@½…z›=œo“g%j`xΧ¬ŻjKmq „b µ&žŗ]œ8^gnjīĪh.,Żš·ˆ]q]ąT@÷× øÕčśö™kØĻm«ģ‰.™ƒäIQŲžt‹s35 gĢg‡1ķ„`s“ź)Öz­ļös-½Ü‚Yx 8Śh¹OcŖƒI¹‚RWóīA-Ÿ½\N³=Ī™sļ4\=¢ĆZGŠķĀÉ Į,;ūV'ćµ—Gu&X®œ/ŒūŠDV§ĆŗŹ_i:Ģ‚źrīœ™Ŗš•˜‹J:£’Fs+¹ž‰®§D6*ųVü߯ ø%V·hĻ͌ī5ŚZéz|Wq_Üž=ĆĢóĒCY{BœĪś†©;¼Ņ5ØR±ÅÓŌśö­ S™ ĶŃŪŪDØX™å$ ć§zęxGмq­xŠĘn-öى¶ SĀ‚q=ų¬‹K;ķžsL–v¶—¶mēFUm‘äŲ ³Ŗ|eŅõķ…„\Ųm€ĘŲźO¹&¶Š&čō ųŽѤ·– Xź5•ł—ééTõ//ˆtū»{XŃ£‘$f­E™iqŚĆ’"é±AØFmķ£-6åĮ`ɬ]_į¼Ś­Æ–Ą×,Ä#©ē>¾ŌÜ{õ3ü h¾ׯG‰µ"·‘\*Ūł$EĪćž¹ō­ĻYé7·S>”žfł—#ęaļYĖbĻ5¼¶œ[Ohbt\(5ÅėwW6Ų³y–'*HĻP;ĄbĮi 6Āu™Tœ­Y²Ōaѝ®gUøeĖmcĮ¦„vŚĈµŻ-æ“l×Oq8mœaF’ ·©i±xŖuø³ŒĖ&×ņ’ˆŌ‘T¦L‘ÄĻć-.ūʐhŻ-­ąņ¤)Ė4ĆĻæZī ž”or—RE;GĀØŚr čjž¦V3õŲüF· uaq »W IäØīr9é_8üLš³­jś5ōwń&•¦{„ņæ×œtėHŅ= ų_I:½ä‹df‰p‘“ƒŒūwņ§ĘxÄž0·½“¼ÕmtkXDQŚÉ“ɞI8äž5™¬cv})į/‹Ņų;įv“£j>™‹J¶‚åµi£ūc X7“ž¦¹?ųL,¼;%Ė^G [‡Ā’ īē™ļJķ„wįOi·> ¶/Ÿ¹™7˜ÉXÓæ#ӊī~!x§T¹Š–ņÖyu{(ˆ[_³§<ü*ģĶĻjų9{¦xH—Ä·s?ˆœ3$kŹĘKg ×ōÆ żØü}=¤ל„Œ7fł&ŠŃV(Œø?•>mle'Šō/xūCšæ„ōZi·Z–™)…ĖĘē-Ż=2*ņ’ˆZ¼7ZÓ_ŁMžt‚o+vL'Ņ£˜8³Ģf’tŽŽiŽĄ\į³ÉÕŚxĪĆN±6h.²ĄĘ:€{“Š9ĮG¹ā¾1ńĪ“—¶ś|ŃEię•@ź½…cÉć­2™dWk·^žE.fW!Öü1ų{¢|@‡RńUŚ\Z >ń#Sž±ś†JÕńmóŪŻ“ÖŠ-ɊM²<ŒP٧/S‘æńeާö[2ĒȈČ„‡ļØėŠŪÓ“-[ÄÓ\ŲiįWzƒ$*ēę"’6Q9‰>Ņu>ļQÓEä—ö“<2øLł§†3Ö¼GĀæ>"x’u“OÓ®£‰žäņ)^~˜ćVŃŲ.}ż¤hM¤xcOšÕŅż¶ö(ǟpĆę/·G ®^ēMÓō GYd‚ä&ęå˜óżi˜¹3ĢuŸ: ”*‰„Ž _—åÄō–Ś|1JˆĻłcžzö FĪ›„Ł[µĢ†0dq“žćŽ£·—T‰ī`O³†rOœ™ƒ}NÆL±ø’ŽŪQø„¢3c ½OÓņ­ R+k’¦µŒm  z}§‡"·ea¹i0æ1ĄAėEö‰s óéÖÖoxK|Š }³LŚ.Ē¢Ēįų“Ą)£Ću“­”M!Œ“ zĪšž­ų;H¶Ń¼/xnõhįe7J0ä÷+ųP_7sęxoÅHš‹é®&Õ<ę2EłÓ'…ć¦+ݼ{}‹g©n„{œ’@źhøI#Ēž%Ė}®ŽAdĄ±čŠq»ėRųOń©øÓšūźĄņĒŠŠsŹ'_ÆųjZ>©'Ś-I°ØPżĘļ^#{kā-ĘēLæ™ęŒüą”äĒ5J ¢Zš™¬^ßX¼Oök“””wx»ŒWŅ£ø·ŸĆv¾¶1Ć5±“däsøō¬Uµ:˜®o›Nµ³¹īPxłˆ’ėׇųóGūd3_©ŁūŠiĘZ”‘„¤ŁX_Ēgor‘ŚĀØš>XūŸzŠ“įʍ4©qq-øÜ”ČūgÖ”ŌHøÕču*ųsį«ßYéš\v£Xy˜Ē;G¦>µč_³OĆÆ|8ÕnMż½»›ø{€™sĒā°•~†±wEoŽ>:ž÷NÕ¬mķ ™äjœœōł«óųŲĻēMnEœaœ)%Ģˆv£uofšK<ägęćņ­SÕ. ›KŅMȝ¶ŲÉąžõ|®Ą£f};šŽŚļOš‡Wy Ńu‘Ü–ocŸóÅOž‡ „üp‰<ÖŹ_S\ķŪBć#U¹šĀFÕoJł »±Œć„’ 4Z$:¬3ŪMp Ć„ ܙ;&Ÿ§źš„÷pAo<ņHwy˜ĒµI'„u XßI’†<īw gėÖ®0¹‹f ·†®bŌvˆ]ā¼Įy#ž*ŲšŽumG_×tÆĖk.Šą“pōÜF@ēśUµe &zvÆxkƗIöq價¼³ŃG¾+Żžürš>½ā»ļN:fŽQV݉Y ®z“žĆŌ)0”ŃņĻķ7w{’ uM{ėo [d†/”4ŗ;÷Æ ĖqćżĆŚž§©-®—Q,;y~^“deĪ|ēńŽłµĻöM"="ĘÖŁ!`¼,żķ½ŗT:¦–4ۈg™>ŠÉž#?Ņ©K]KNåK="Öāx",Łł£yĒ©®·Yńõ†‹s%‚æŚķłi$cå#±5Jc5Ļ‹ō}gGé•ī£@‘a Ļ9?Jņ-bāĘēSŽā;KpŪ|­å·R“Š\Ē­ųh[Ī·ŚĶ•b¤Š4ā×į®Ź€‡+“Y3Šl®ō»ĖǶ¼hmä\»IŒöącš®nó[±ŽęćĖh[Ź'¢ąVR`ܽ=uPĶå2ī— ­ļé§É“Ō$‘Hy2ŠOQź}«;šEŪFz Ękˆ!žE_0avŽæJI|l÷†{)ięp•Ö“‹±£eĶsMžÅšÕÄö0Mqz²ÆlØC×õ‘ Ew2¼³…„Uq‚Õ­ĢeähųƒĆ’Łé ‰=Śł™i’ĻJÖšē‡ćÖę‚;8ēŌ.ĀĘz’…rv:_Ü®¦Ś“Å؄¬±€8÷ĶI‹2Č<Æ“\‚ŗzē’×LŽvIŖŪa‡$ŚMs,{Vė#©q oŖ\i„e`ˆ¹.ć9늸#jRw<_ƾÖńż„i111ŸīüXļ]OƋ¢ņŅpxܧ–z47>™>I“Ō55haš'KVRy˜ć=ń_2ɬ7ŪDšę6ŗĮ)įńÖ³c:h¼y„ņ,wJw6HĪ2x‘oį?Wø•ŲZ݌&Š0Ö”Ģ$ѱoįŻBD)cŽH8ł±’ź§ŪkŠA<é{$a]ڜes EĖcŃ“½_BžĆŌµ‹­Fc·ĄXUĄ’bs€õs_'ß|Fš†„g=•Üd>QbFz‘TTiX~›¤hśśj— ŗ5mÄuõś×Ō–v‡‡­uH$qk11§É…GsųÕFV/Dy§l`½²·²³¹š@W–óž5ęh6z Bn ›²Uds×>¾õŖw#œ«Æ%孒ÜX†øÉżę;-iųā,°źzV‡4e,$€ ÷ķCd©t=ĻSń,1I² ¢hԜ÷ݧ܈®fq 9Vūģ}@®„|Dŗu­Å¬¢cs ·ü*yu¹«ĮjśĆźhLČń žč+‹™…µĀ.Nr8Ī)Ųēp{xŽZ«7ĻŽļ\ņČņ#4“łmӑĮ ‹F$F,%?ĀGzõ'ÅfIŌČeŒØ ©ŲĪIō+ŻųŒ_\›y.U”“ƒĒO­e¼:]¬÷AńĖ”l}kUTns‰Ø«ŻI²•Eą1UõBĖ Jņ?śÕœ–§B0“ŁŪĢW23/_zōˆµė’!VŻZ)p0qYJ!Źö·“ķ‰,ÅEck–²Ś'Mń8Įć½Lec²(łā‡”·µf“Œ\ĀI"DČ*kņ×öš.“ā x“Āwv’&Ÿ"“šŗ®pÄcwąV¦rZĖ?ƟĶšūāˆ<>-5(cĀÉoē'PGQõĄā¼Īv•¤x’&SŽ9üktĪY®¦u܎”Œ[Hąõē­S»‚®«¦AČīi„cž’$bė“$g‚£½R})­€wp!cø+/UŖå+œŽ9eUpį|­Ū”Ś­A©ŹÓCå ćā§÷.,ė-utRn\¹Č»g©•› “‘ŽÕ„ŗE½¢’g’ŒZĒĮæŠ>ų…§­„֙ ¾EÜ%¹`ģqģ@Æķ“öBųń„ų˶>!Ņd‚ź –%˜Fć&3ü^ųõ®yģvEŸ«n„öŠM†Mˆž%5OÄ:|ž+Ńīm"™a½Ē™g.pbqčkŽkRåĖž ū]Zéžųėįæ Iv—”›Q{`I7įqĻ(lĘæ•˜Æ~Õ[„–³¬Œ…HĮʜZÉĀę=ēį‘Ö5{ėM6Äīƒ Š£8õ5õæˆ-”эØÖ.<’r¼«cśWĶ橌Glmk—“ŸŲų–žĪUߑ;t=+ø›Ä6޹“±æ¾ƒķ2±—œŒuĻā+Žœl¤zżį»»­O@3ƒ=²įJ‘œg½U¼G‡`e܃#łWŲ`$šŠńq0w³9‹Ć"Lv©d=zKk[…Ÿ0]†6ēõÆbš<¹™b¶ÆsupĢ“6@c޶5?\Z[Ēhˆ\’é‘ZøŽ2:{čRÅi›Ō7!BŹĶŠ·sŸJo‹,¬’²ķ/"nƚO•󝾧õż)Ę"“<ĘM?U¼·V‚@¾Ž„dfÆ_x?VŅ|:ŗ½żķ›£LÉå«|č1Hō÷­™ē"c+¬Bu11čMjÉ$vńˆĀ¶īŲōõ¦g 6ct˜,ŪĮčNs] „¼°]&ć"ćØķBEĒc¶Ó’ē֓ަ3¾Ę>­¢-Ō¾uʱ ‡GCéłÖ_†ü9ś‰’r@b= Æ2šęs~‰É/#ę#ō©”Fö¹ļZ&Š—ŗT ,f9 å·zŠÅń RąĢ€į”g SjAƒī\6)ąsœŠŗŠ„œR0PćØėV&Ģ”ÓdŌ·ĢĒ;SžMvZ”@ÜD!ø ·9ķŚ®Rč%-lXÖm[i#•Y×9 VM„ŒčŠ[ZĀ®Œß1Ż¢¤Ļ”ķ®Łķō¦ŽY6(Tõ•¢Éik`ŽK™c’v J¹Ŗźw0iŅYÄȐł€ącę#’Ök)0<Äśa™ēŗ‘Fö$±×1§ŁżŽēĢ“ˆzŒžµXi${—›._~@Ļ®Ky%Ā“l˜€t¦‹Š.Ś[\jQ,BŹFõ®śĒH¹-¢Y`¶A8ę·5=?ŁŚį£W’4cµ¹ ’ÖÆ ×VóÄi<ČĶjŠC„ ‘εL£q4z§ĆĻŻų{ĀI„ėOÅÅŗ“ę°Ė0ōÉę¹{ÅŅkW öU0H¼īSŌzVVčccNĘ ĆhJM–uĖkšxęæ·šŻķf©oSBCæCJ%’„nŽŽņęmžZł›˜rŲ­ü]²¾¹»“PŃåXeFh$ >÷8$uü)3¦&/Œuųu0æk+$ŖIB9#é^CuØœ®ąNy¬¹Ź’ŠK{¹eC‡wQņńZPė'O¬óHźē<Ÿŗk[J(ķķ|PóO īŁQ€½+‘Öµ‰ēŌ.3ægNH§ōFLčlt=JźŃ.ŁO–Fw{ ī¼9¢^_Y­¬P9\¶īþkNAÅŲv³įĖ Ś$ŗs)¹WݵOśWØŁOŖ€&"7-ó“Ī+3vyż·‡õ}JźīŽ;7–(\†* zžµė¾Š`³¬ēT k™GÆčh@éõ;g¼É'ÖøŻfĻSńW‹ōż"ÖŅŽŪKXBż¢F óŠ’<Óå3qšć]Óõ9į»[{®ńÉ̊æ\š†ÓMŃt‹Ū»kėµ{²£;Ž 4¬.C µšĄÓ”±B…÷*žėžæ”­m'[ŽĻ̊Ņ`ņ(­"ež«’õ„pČq‘Ą¬ µ/²MęVķ9čh$©®Ė6¦,mģtč!T½‘OĢä÷žU(KŲ`…¾]ø&“‰¢‘Ų%[WŻ'’ƒ– ż+s»c“,O5”£cC[J²·Y² ½{×N,f‰#ņ×ō tśÓ‹±¼Uˆ£ŅĪwt’&‘Ę[ŠĀńĆŪŪ¹pøEÜ~+Q™Śwڵ; ĘÓfUÄ{›'µT³¹`U‡š8,SXɬś~¹%å݁ŽĄW„x"9äŃöźŲ‹×łX9ū¤{TŲgu¢é×6“=Ü­¹`1Ąå.Æ”TX™ī l)äėłUr³)GS™ŃÕģ„q@ŖŖ»š¹ā’ų‚=Zµæ6öļŖE€PÆ_ĆŚ›ŗWSÕ¾kwz܁ń3 ,>š}xÆCÕ/4/JŒ[Éŗ) ·©ćSķ-¹v<’PŸNžÉu&Grq‚y‡<ū„»k§„nĄHČ?•iķ’}O iuŻSPøl—XåumąŽ7qśb»¹›OÓaoš$«‚~õC0`×ōÕÕ!ŽH”7™ōĶtņG’ (³u3ėĶf¦‘į9,nod¾x,Ü™dlڲ„žÖĒ•ŹÉĪ>SéE€źe½Š¾Ļh±źŻ×sŽ…NzrźŗöūäIn…,½G„#XÄźō»84iķę ×C†*[/iŗuūjŚlqĮutĘI@8½j¹ģ]ŽÄO )®яUź÷Æ(ń‹„ R[˜c¶I\ Å@½Ŗy€äFŸu Ļć$=‚œųÖ,āĀāHB.żŻśŠ`Ķ;mzŚWp÷ Ą$(>ø®M E%Ė™w³9'œžTģ"¬Šė1-ózģt…{}³©ÉƒéHe/x‡}Ć@²ĻČ@āŗ‡“ŪÉØĶmęļp˜uc»n}i\Łlz^§¤}²±š,ĀäüŲū¢¾zńŸ‚Æ4Icņck»‘Ō—žž“ĘCį} īęxŚŃŽbĆjö®łģ-"†xVx¢¼9VLņ@ ‰#†‡Ć7ŃH.EȞŁä9Rsé[óxf7D•˜o8' ÷iŲȗģ&Ņtū;žč zÖ…ÖÆw¤i“ltžYTØĄĒj@pzmĖéńK#B[ 8$šō-TÕ-į}ĮrŪJ“ŠŠTec¬6kayo{qx<˜£ /_¦3ōĒė\ωµķ"v±µ­ÖM’tcwÆč)§bµf®µńĒIµÓ퐰 *y]qßҽGńM†§¢G䢤ø{“WĪ.SęĻŪM©ßźq^UMČ©¹÷ÆYųoØCsimĮXIUČūĄtØlƒ„ńM‹]ŻČšlžY>i õgÓ5ąÓY“¶„ N&¹cĀ‘÷W’×H {o¬³ŁŽYÜāEł™1Ž•č:]õć_Éöß/ģĖĆóō¤Źå/jO$ŪäIhyk…Õ£ūLOl’Żŗ•ź+"ŕȶ“Ÿjēu»øoUZfaśā'cN»’ eWŠź1My$—tk> īĮ­`‹“Hm Yn÷4ŠpqWdŽŪTˆŪÜ*Ė«_C£Ö- ŌķōK]Q-dŃ2Ÿ—ÆNs\dž’ĀįęóQ”/ń{Ör—b“=+ĀŚŻ­­ŸömÜqMę8’XyčsÅx¦½Ŗ>”ŖjqÜČ&³“}‘0:ž9¬Ź:(5(µė ¤qCnF_¼äśŸŹŖ]é’š[]K¶-ĮrĮ½ŖĶÉt=an&BD%˜nŚNK}ØnAڊŹrUNjyŲŻŹžUU$wŖS@—vN°ĀK¶ķ<֑1}‹ķ¦Ķ¤Cmqz$ņ™qƒŪŽ“ŗnæcx! ØčĒ.üśUŌ–k+\ ĘlŒ`ą ću-F[«»L©]‡“Ó֐õ…ƒÉj ².s‘ެkŃ=‡“ŚŒØlœÓa%ĢsDŅÄ»vö«Zc\„iŌ°%Ė-l‘ÜŁ]\ÜŁ—˜ ĮŚw ēéXz¾œZHāŠĖ?^Ų¦B™ēž'ÓHŲa@²8æPkAß{p!ƒ‚Üä}Śe€ö’Į-Ä%¢ŚHcڹõ±ū`7–ŗĘ8u¬fm ˆō]bÓR½—MÖmīŪŹq€ÆÓŸĘ±ēXtyŪOÓQ°Ęüäę čOBÓ4—>]³ž£ę±^±ąõ‚Łą ­” Ėž)ŲĪR:m~9īcŌ#µŲ‘ŗłGjłūč„yQ¼³Ę €vń‘ė[(œ×Öäš’g>ŸeuorÆ,ہ\üĆŽ®5ŒšYFĻÉ'¶k9;™ŚZ¤·‰qbn.OĖ8Įžõjß]ė–~J-œbŁ»qÉöā„#ty–§āsT¾š_2㑳Ė+ņØķ]w‚¼=Æ}¹uÉ.–ĢBAM™ÜF;Ö±ˆŪ=7Ć>Óµ^źāź5“iߒ;ūW}­[Cŗ0ŠT޼wŖ%³Ā5›»ćØĶgr…d^Bq·$*µ¦Eq*ŖČOŲŌTOaskcŌ­ķbM=5 Fo*ŖĒģǚ:^GÆiVŗž·PĖ\1Ū»§éY ›ÄvsųmlķDpLĢ yŠį¶žĆŠäaš%Hõ;ÅŪ*1fĻzjiYŻ]»4T’N€w®āĻHšTœĖ2¤€ƒG½6‚ĒšxÆJžŚśiJĘą0’V~ż\ÓüØĖz·S#¤)V=ø;BOåHŅ1<ńu[Ķ^k›Čc u1ŽC~5[Pų«[Ķ1Ė *6†\‚G°ė@łMķ ]@öø˜†©=Mzn‘%¼R¤0–Ī)›ė3 Fy&®–±|Ÿž·ė^q«ų¦ĆRgM¢GGž!׋cLān/žńē}Ā9]É ōĢ^4ŅĖ$,\2œęœ]˜„Ōö‡š–g£­¦²&s¼ŗJ§‘ķƒųW;ćVāéå»Ws üØĄ¶DŸ;j޼Ō&ymįO2GÜå³ó~5Ž[x>öļF[IlŹM»{”§Ė„Ķ##Rų}'†“č¦TģĄäŒz×Ļ-ך$-d¤ >Įؔ ¹³ā½BŅ8–óFca§ūXīk*=SPŌtöµžÉVŻ£ÉČČvśÖV›¦ųZtćy<$ę@vłTW*Ė'ößŚ!T·Ž\BQøcÓ·zŅ=€v”pJNĻLńųÖm—†ģc¶øø[kXaƒH Y½k[˜4Ģ­NŽx-Ńę†%pĄ”#§jö/ xŽÖĪĪ;Č­ē½TR¦#•.zwÅF‘‰ÕŽxž/jve¤Z}¼ȌA?+ć×¹ļ^g©­GÖ·ZƒÜō_,‚©žŸ„O"ģõ/ xs]ń²%ēŪZ :9¤˜¹W<~£[ų]®ÉŖ]Ż6²·Z8œGe@Ļ«ޜcb£z7¬t-Mō-"ś;ŻBįĆ¢Fwof…?ҽĮ¦NAąŲd‘ę€ƒ&VqĻėL£²Ö“ŸAĢzDrMq›27_ź~Õ~%üNOń)¹—PU p‡P~öźIŹ­EµŠ¼„ésÜ#XŚ‰9*?ņėIu+†–ŲŸ"&ßóūTøIŲĶŌ-åžĢ“ ²t8@Ć#ņØģmvA%ŁkS"ĘŪĆ äć°ØŒnf¤öGĢ÷‘jWz„Ü 3JņŹJćÓÓižÕ%Šéµ iVWR°1^3õō­9¼Wsź„~Ņü'įitŁ5 ė«™®®ŽG™‚_nhŌķ“Ė–øŠHāV?6Ö$R‡Q¹v<æUÓ-Õ4½§Ė8+ÓhÆNųāż+ĀYÉŖ«]Ö@€eAuØFs™ŁiŃō½*b‘n£¹‘ī°ä3F³Ļē]Ņęžöę{øÓiĮ}ńŅ­O¹Ÿ;0¢ń.‹>£ufgtÅpŅå_×½kÉ~ K®Ķ4š§ļ1“dV5.į%œ2źz‹£ŁƘŃĘIō>•ęŚœWś‚O –+dvņöó‘źjyŃJGk>š–lŒŒÅHēpäšć5mf} T¹!8e$0ąœŌČ|§£ézšx‡LXܬĢÜ_ąsč+œ··›MŻIpdŗķmüķķłÕÅX«[CQš¼~-VŌuiď`xĆ.Bć?ćVō[mRĪŽŚmo³ÄX(]ŹĄv¦kæÅ.«ąż|ÅŗÖ,ÄY°wžõótžŌ4·Š£ŗŌv_„“LۛРäµ>‚Ó¼cwØ[&—ŖŽ,†5ČP*1ŽŸ…&²Ž¶p$q¬V쁗«ņG?­-ģRŅuȑ “œøm¹eōō§ßüFAŌÖ}>ŚŌŅ1·Ļr†ĒTÉči=+Ńž!¶ŸyāNęa=Ė“©“šĢ}¾“žųé¬ųcĘw>"¼·†ėKŽŁŃm[ųœē õ„ļ±ŖW3®µÓ‚dŚØšeKyōnō5įž*SØŻÜĐł© ¼Aö”æCŹ"ÖuŻöģ›y •>FfŒŁžļ¾+éI/.tŽņāŁīÆ~Ī»|ńÓ#­)_”Vźr×~1Öļ4„%Q€#öÉė\¤śõę–āxm“j’ć9ÜŽ¢¢W!Ó9(§æµŠmB9„P*į³Ž›§ė7ڕپ7 (U~l¾Õ”ćŠlĻ@Ó~"/S‚ģšuŚ„5ėz_Ä­r]2īņćY·¾ŌMß2 éƒłVČ“ĪĆŽÕ5ȵ­s^½‹ū%åyVI$Ć9ō“©čŽøC¤ŁŚB·,v™—’ĆÓ?oMٚFG/mū=Ļ­Ķw}yqµ„Qf%WżćN•Š KĀ_ ®Eʝcm«źL:†µöš÷†OJc؎+j÷ ąõĶyˆe¼ó’(Xī<ąž)sks¼šjG>5„ÄŪ/ʾœöĻZæ&™{§Ī“ŗ‡Żżć@‹>!»Ń>ĮmØ\—hŪc2yĒS\ĘŸį°ž¤ŒÖsLŚ ”ןæ†ŅŽźÕ§’gL…QøŸ­yąš¦”.¦–wp·”֏āż+3uJēŌ’Į£I£ŲéÖŚ\VÆ ŽP|ĄøĒ_zņčmü?$ņÄn%…›Ė‰ };Rµ=DÓt’ h©ÆkRG=¶7¢†9Ų:Œ×žŪ|ekŸķ)“-9ŃŹ(vż}1BæPå:Öńlz¬q !®vśÕxõŪK+’–ļ¾ć=±ļBó‚©xĪŻU`¼™F_yĒ,M&“ńöŽ;•Ѯ䲹œØ­ā…ģū”4 &-WX×n¤’ļĖl2Ņæ±żkWn×}­ģ¬›•Ń€#Z©­šŪDŸĘńF·Ø™ŁäĘę'ƒÓ>żkÕµķ Ą-ķ‹.žSĖc·ļ~?\dLw8AZDdQ„§ŚŹRyrGV_ʼ’M]GE²ø{XāŽéTˆĖĒĆz$oljµŪ¦0Éy4ŽoŽłPz^q”ˆ4’I-óF÷;ČÜƞNIÉ¬ģ ś2óā‡Ņ-OÓļī"(Ļ4 ƒóvĻn=+•×µ+0—vņ}ČNįŌšĖ“ ™ą‹õ6Ōæ}q=Ģ §÷ZēŠon‰;™dÉō­”ĢžĒA¢ß뚜–Z]”.ņrN0æZn³ąĶF;łš[sö€NķĆ?ˆ«qEضrzlڊNšĮoso åO$WŌ~’ėSš½ˆŗŌķb@#-…SĄÜcÖ”£9ŕ|9}e ɤ^¤SŽŪØI\ ņG Šä>"énq,)eĒQ€ļB9„{žw{u©Å£‹HC¼Ąm•ź?ĪkŸÓ“ˆę“˜1¶ž2źĪi ,ō‰ēK{O:Y™d(¤Ń5ØSÉićó p˜nõ2—BĪŁõ›y-W‰aĀ– ·'ŽŁÆ4׌ƹu­¦»z‹4¦¹`Ē?)ļŗxŃ[6h£čģł.ßÓ½ZFv.Ÿe,ąHń“˜$`ēŸJŲA„”fā6ū'Ż$ŒĶh¤–¶*źžŃüv‘Į¦ėI+ڌžąĶ‘Šõ놓šu†äaęnø= \Ø=źdū›“Ž3Ě«¬¦grˆĒp5Œšœ0Ū4Ž[QÉ©Q1q±«„xÖ;9-•'øhw €O­{M¦¾%Ke†Iüéü gŪ|¦‘ÓC}łg»–é JÄ·Ģ1üė>šZZ)PÅa™ čøéS$]I»hpzĢßi–i”¢Ÿ—äū£×5ÅV)oą#nĒN-7©Zž+©·N±øŖ1ŠÄ¾“eXuw¤4ō/ŲĄ×pąžßĆ^¢hīf@Sœąc½TebGßųm䔬Ūü§ ĶyÕÅ½Å½ĀŁ””n¾§Ž©Ļ±¬c”܍§;łƒi^ ÅD“M?w#ØĶAEż&ÄÜNQ7F¼œbŗYõ++-9ć2bķŸg½"[?ŲcgŲ®ÅŚƒå1Į«zöŽ+˜—ea‘\“åÜėNĒ’ųēĆ£T“k‹†Ʉ“Ō­| ń_Ć+>µagl²XĒūėyY~ųłsų~µ×3łģ’‚ƒ|ķ˜ń¶‘q$ 4˜ø!ÄyĻCśWįŪ'Ūg)öK†¼Lccwśę·±„£¹‡*ķ\t\• 9ÉŖ¾To9擏փ–Ł%óFInž…j µž_*ßĶiˆĀ ż*øĖ¹"\+#4/^;•Öš";!q!9ĮFV.2#‰žŁäd‘ÖFĒ˜€=@­ė’³ÜĘn#’x¹'iĮ­Q¬YŪiZŹEóBcĘŅW89Æčž ?ūKéqĻ'Ć?ŽM„olD^CŸs«ƒßæœćŌé§3ś„ų3ć-Z {}+]»Žym”äžY­Ū•$÷8aĶ}_½±·Ž]:Möģ<Äaü@×4āt%s˾<ü3šēĘ’„&ųSāCåAŖĆ"Y\€7ŁÜģ;Ysܜ~ėüå?joŚļĄ?‰>,šĪ½§IbÖŗ¬ÖģeˆÄX+£ų·x¬y{Xš}Äś§…5›}[E¹æMF1³lm“0$WŅ:õ’Én/ǜ jæ3`¶+ĒÅҾ汫ŠōiŹßI6Ėx"Fß'łƒÓėļ^¹ØhöŗŽ©ktļhÓĖTüŁĘQ^?-™ŅµÕž³ąÆÜis®†öļ2<€«÷W¾ć^ß©ŲĆ!‚ke ó‘ü5ķåõdzœN¬Įe`ŖĆkrHķUm%1ÜC)PĄÆ¢„#Į«¹æ{ĪB±½Ņ¹Ķn#+iį=žÕŁt1L›Fµø¶F¾q'öbØśäšģ^źyį[B$‡ļ"“÷}’*vG!® ¤čŖŠIR$ŌŽ)īl’h0J,YäÜÖjVĖM£[›{uóFs…éPE§¤ÅščĘ5|čÉĮµŒXN» :žqé[~ź ­ĆgųReÅ4MĖ|Ŗd; ö5ŠŁĒ Ü -e8fqT·(ĶÕ¬÷[-¶vž÷ҽĀךé¾WXqØŹK0qĄ\cõ­I’.» Ė@…T.w r¼:x–Bē®ļ’U3.Sεb{¹žĪ‚b{œžG„lh«‘\DRß;~lįk7…Øš:„•ŹDpl…SĮĒL ę¦Ņ„HfhĘӎ÷4)÷©…Œ÷Bń/p§!X÷ōĶt—V÷«kĻGqČµ2åDpźR‹q ‰Öéz°ļ\Ī«¦kQŽ^:UĆ&įÉõĒÆ…ä}e{®ųn=JĘ6RQeŻÓåĻ8Æ66Ļ1Xnæć㢖9 S'”’ćĄ>F›ż„-ŌŽŖ76၊ē“ĖXłSČóÕyW4åG¤Üų„RŅ)ņ…#ę­GKeźQĘ'lķž„RV } \[Üß[ĬQךü«PkX”DĮÄĒŽ™IjI¦[Ēo,[‚’H'Ó³,‰w­1† @…*½1@- w܋l‹1;O=k Ņ4hm£”ιv^øļCĻ.ń%åͬWsŻ*ıÉņÜlĻS\ākO·Ģ`„L¤Ńp—CƃÄ^iĘ9ŠĢøĘIćčpž#Ū,^Uŗ¤õ„fāĖ1l|Ē+·śĄvœŽė^™se8šŁub“¢Ž7b®1"Q<÷EūD÷‰ŽĻ&6Ÿs^‡k¢E¤gIŒ u­!(—acoci>Äx£Ė;qœWŒų›Z³×5`¶‘¤Bm9ĶZ\«c°m-­ÄöŹXØ'#Æz~›­i°ÉåĶVŪFŅ‹ĘEZVžÕÆa¹Ō•Q’pXąIĪųDžŠ„OhHhĮ8j×@äFÆĆ;[e²Ū:C Œ’¼Ėd©Ļ5ļ:V›lé$I˜;b„Č“Ž7Z½†+ˆ£ŠhÄ\īĒ5ēz¶æx÷"Ņ’uF'pn0kžLŃE½½Ķ«Z:‡™IbŽ¾ÕŹ\ģ’īø€“#šÜ=*IŠģģm“—‘Zx5ŁŠœsŽ+™Ō£’ d’Ę+”dUXqfĪöČķŅf÷1Ę1“^Ća«Al‘[“‹eõö„ģ¢ įPĀL0mĮ=_’„K³Ó~Ų#H7üįģЧœ ńT gęG)Én¤Y]żé9XŚ1°Ų¾O4’H.|ŲŻL\p «v«Ŗh÷°%ø’+uūų^£Ś£Ÿ±V<’ÄRyž ¾vŗ;$8Mü0sś× ü?¹ÓtÓ_^yVd1\’{’×V¤s“ŃŻŪjņŻK*ŲtfÉ÷¬N4ķZkŁ"XndL9+ĪßAłšb9©uØ4ū֙Tö0'5Z=jõŠ=øGf=Hč+9Hč:K«éH¶&dóX… ō¬gŽĪ锝’Ysėü«1X†iv“Š£l‡ęē°­Ż7ĀÓŻ[­ÉŽ2ø$iÆ29JQčuÕĄŽ%ÜøÜoZ2XʱˆŃĄź+d'a\Z“Ņ\4‘Œ·Lu’©4ļ²[x×$n““5Q,išøwW—åUĻoZŠē_K„†ŻHČ8=*Ga‘ŹĘąD”䯞‚²uĻ <)3K,S±ß…_¼3ҁõ1ķ<ū˜|ØNуīMhė׳/‘t…”ŸNæZĪP6G8³‹k…XwG‘€=+£ŠįyŽIåߐvņx5oSÓęŌ~Ļ `Ks÷~•>‘ucav°]•ąt­¢¬sĪ÷ŠōM~āÓ\Ńa[x sœś×‡Æ‡õÆ^2Ū,×-žų­\Lį¹Āj7÷ZjĢ|ȈV‘ĮڼdVd1O& vWpIą{Ō5ŠŠõ˜üSo¦iÖö³A–q“Œ~µƒā=PxŠé,ķŃ­æwÉNIĒ֋ ˜±Ųn…Õīb“X†ģČqæ…kų_RKÉ'ŅD–§ēßbéźkXĘʰx–źĶ5 >śĪ8ÕnĮ&’¾øśW +R‚Żķ!XŚ4ŚĒ9.}jĄšO‰ŅĶmyf«{)Źįa¾µ›XOµZ¬Q†łTŗ}K¤év‡‡uK™eUqŪx¶ä»žœö–„žwšėC7šÕśė–÷1Č"¹ æß’>•›©üJ’„{Ęz†ēŠ­aouök‚ćŻ0ČzžµQV*3īij>ŅÆ&ŸSŅģR×ĻĮ*[īŸJ·”éZµ”ž+ˆSģä•9?\AĢ×Óo­ō›¹!HĆæ^½+jĘīļUž{ƒkåD…Üx2NoÅsYŚĢ‘L#yČēó® m]4É"¹ĮȎ§+Dø“i^+Ö|Y¦Ļr‘ƒ«”_›9ö­V»šŻč°žŻø“ģėꅜ0$õŖ,l£rę™cg®Ė]މeÆ=ÅGć]N…Į±™YJJuĖ`gśŠ/#ĀzD÷'{žC†éÅz"I>Ÿ1y4Lr¾Œ;ŠģQ‡F²tŸQ¾>sy ¤nz£•oŽźŅΊŅc(Ćyk÷F)¦|ėŖxJXuyšū}Ŕ›˜>īI'Š§c”Ś[Īä¤A@ČČę˜9ՄFxJģ cÓéZšdc›ķ2§sĻaS-‰6Æu 7TŠe„ł<|ø9Æ»‰ÕīærEŗ¹]Ä`šĖ—[˜[^Y­ĢlØŹwjŌ»o&éVgU‘øĪ8j¾D9—­µGŠÜDńqYÄśō TŪ#!ĒŽóÖ“2rčwšōšÄśe”Š„I_©8}kß¼I hžšŠź‘˜fvøŪeĮe„c,Hü*E=ųūY±Õ4»½Ėɚּ0»ˆ€8ÉSĪ+ŹįŃtt·†Åf†Xžć¾7ĄÉ4›.)žYāyļ“Ż=ōK¶fžįdĄc“Ļ>ƒ5ŪųrM3BūD>#¾ķ­ČŒL¤lśTrõ4:^;;½?R“Nž%Ōł °Čō8ƛu廂ęɝń švž§Ž‹°4¬ōØ.öHĄĖuR{ÖĻü$Z§ģ]‡—ožP-œ†N3ļVŲ›*ZŪŲŽ[M-ÓÅö€ąŖcœ{W7ā;Į£}ž;#Ś\p„±‘ž“&=gᄬßD×u[›šä’¤NXäØĒE…y½ę«¦#_]č²=ō±e= Ę=ŗt¬ä3Øš„Ž‘Ø]ŁÜކēŁœd×¹j0XjóĮj›­ĀmdžžÕ>jńg†,¼3ØŚ]: Eį<½qĪsōĮ£ą]hj±^A-“Å$L1ĢSLŃÄé—Wšž•©5åå̶Ž,{^=㯓ö·6©mö”;€ÆŠĀ¹ė֋™ŲóūŲ›Č*<ł T ä{W³Z[ßA ¤1O J:DK±Éėŗ®­ėebcH d,y}~µēڧˆģŽĘ;ļ¦žFŻöˆHłU’Æi÷*1<0ėm+ĆåĊĒå p£Ś½ĒUšoö÷„5x-õxģīęµa ^„xąß„)1Ÿ;ĮšBų,#+XŁŁ¼ī±äī”sü’:ł’Ę>3’āā;[;•ƒl¢1ņn$”ĮĻłļR»xĆ:eܐj(As$GĶ–@ģõ'Œl®įÕMĀ­ŖiIܟ›xīHģqQ)Yćæu­3ZÓt*8OqĪõr¬[vzūV׎¾!ZiŸ¬tĖŪ™#xn2d'±=łžuc2< C Ou§,±ó2zs]Rü/²ų ß_+yZ½¹>J÷cIöéA§9ķžųƒKŃf]fąM§\DرāK€Ä~•{ğõ B «M&;” ˜.Ųģ:|ß„&ģYĪ|?ųdŚ”)¬Mw ņČe±©/ $żÜž1ŸŅ½#῀4ŲxÆÅѽž§3lŽY`Ł$Ćµ.tLŸB?ų¢ĖÅW¤¾'1é0£“JҾĒp@é^«ųĆ:µM_HCoki!Š7“Ć»}½.s&lkYk¾Õµį}kmeO0‡ĪōcüJš}[R‹O³µ:-Ļ `W’ҟ7C&Ģ»]Q5:Idóķ„c°+A®rŽĀ÷O·ņż¤Ż#Ģܕ9ćõF‰%±æ¤ųĪŚźŽe¾†č²‡.[;Iē…znžŚ%½äŃx—Wµµ°…ÄīŲžļć@I”ŗeÆŚn&“KøS+Ļ\{žĄė¾ žņ&¾ø¶–Ö\“>V>c“•č=qŸĘ—‘ē—[ßźŅź—),o…®ģśõģžŠ<=Ŗ"Į«›— }¼·Žžµ<– …„’eى­w}›Q gŠä>&k6^Óć‹Ć m&”2§ŚŽ™$ß­LV¤(ž9”xŠöŹę+ĶņŽ„#xa’kŃűź\Y 6(ī]ƒyœ…=ŖłJä15įėµ›}˃<>{›%æÖµ21y@'>•øņĒØ#\CīŲsĒÜļR¤).¢xfKkĆOŻu2]ˆĪsé[®·{¶†| ążß­i Ģd®yēŒn[ZŅg–{eŗ™ī;¼¶Øē­y¦‰¦ėv.”q¢(†ņź‡<ćÕŖŽ£Åžq¦©"¼·Œ‹“’H\Ž‚¼†ĆNŌ5;öÓ¬ŸPē §ž+^Rćŗéž"šƒ õ4–)ĀķņĢ™\z‘ėWŅ_xœÉ,+;[Ä»¤ÄGk/±«±«‰ézĆGÓōU×µÉā)+łqĘ[ē`kCLšķ¶›ÜV–öŹó‘¼ķĖŒ““Z˜Ī#ē…ģā¹·xßqä®9é\>” ¶§”ź—61ÅĢ#*d8-ŪVLē±Ąxhß-ōńŻ‘ Œ øėÖT¼Õ#/Šżš<°NōćHĮ³Ļõćö‡hbw?tå[žšV­­j‹,ńyZZČØ! &sScxBĒč&›”Ū.в<)ö‚ŽUž,ƒł×Ķėhtßjj$»U¶cpõĶe3x³ŅnbŅo4™Z½i %²Ī?—¼ļĆö®÷|¤“‹2<¤üØ£”5J'9uā;­VŅƒ=ģæ4iĮŚ~Eqš†O J’²…OāŚ2­Ž 4fkĆÆi0ź0éö‰$óy`Ȅcī(¶‚)/彐6’¹æÓ§"ŲÉĢ·uąŪ=\\ßĒ<¢żS+œ O hŽöė­E-¶b l¾Łļ[Ø Sīu0,Zµ‹¬6iuÆ“éšā.|¬/Ś$ŽĮ-¬•Õ‹č¤óUʆę{·Ć½SN±µ±Ńā{æ)¶0vńŠžµėž,ńV—¤éPĒ=ŹŽģt#×ŠĖ”Čłž?Ļā—½ŗ·ŗ†dČA*¾£ŠWAØź±-¬›>v+·.£94łŗ#xģyÄ6ŅEs4ÅY‹­sśē†īü —ęݹzTŒ‡^ŚĪG[‹‰юāNHéX¾'ń„śĢpĮ!µ$¤a~źżiX™lr1@&Ž’įsڳ.ķ­ÅŅ VrFÓüTĢāģĻ\ųu§§Ÿ-óĄ£`­Įłø®ßÄq<ŗŒŅ“’“. žæZ|ŚX鄬Ģ[kKoµ@-BnĻĢqs_Fč: Vś\z}½“S.|Ę`2@ļĻ„g)XÕµc‹Ö|&,µHÆahb·gżū÷—‚*ńæ޼ZÅƟf iŹB³pĻģk>frTEm6 y ”Kv?tö©¦ŠČ‘$ŒØłĘ:P¤rIjUÕt«kČ$“vū<„O#¦kŹu+Ķ&ź&vd\``śµqÕÜq•“4l..õ ÖĶ泑Č?Å[Ā^e£Ć䅅\g5¢W+›Q—Z7öE¢®ž’éL§h#{U’ ®¢O7r1äū“[(Ų‡ä{^‡¤2Ž#ß]Ą"!B7enä×y?‡t_é÷V±źvę-øŪæ }Hǽ;W¹«ąo†ö~“¹ 97d±É ļŽø?i¶ÉwöK‡–U/śT9#n‡Źŗ„Ź’kˆwLÓ?Ķ+ģ8_jŽųŁ00ļ2Éü$/T)[a3WBšņEšd-l‚zšöÆ OöR×+‡D8!°yĄüźœÅĢO}%ģ:Ė&Ņē Kr+Œ‡ĆRŪ=ä³j2\Ė/ ®pz ‹”’g=ŖiI¼[Ŗ¼į°"©Ė¤ŁZ"CöKhäÉĮ„.kĖŲÅ\©d 䎕Ķj«¾éĢ苀øMD§ŲR‰ÖųĆŽtM$ŠU~Ö8ÜŽ‚½CL±[{XVHci ĖŲRē2(źé+”A³©ĻJņ-Z'iŽTŒ§Ģ{š >tk Že„F’c#;qČ<óQŚM›ˆŠ•ŁŗŸ6¶(ōĖŠKP¶Ÿx’ +ƒ‘ż+ŸC’ūT’9ŁUH8!zžĀ©3 >§ū!鑦§fņT)e„£I”¶¹ 䞿MqSÜōœ ½n̲L<¼ĘĄ£dqƒ_)üHš¼qŲÜĮošT`~Øk²;cņ«öų?k­č^#ŃƜo^ģnĒ’tzg„*>jß üSŖŁ^Ł®•½’%‚L䁞WøükxH–¹Xc„‚ŪĆ|ŲĻ kžŠŹÖńēØ9ĒéTsŹ= QR" øGćv 2x”µ‘ĆČĆ÷Dŗ}č1jĘĄtÜ1‡nć¦*ø²Df*§'œ™ A%Ŗ¾e  d.ZĪ?ø•†é[$aZĘF“ĖŠHūŃb=ó†ī3^łš›āæ |yį_iv3\^[jHķ ”_ įˆöéUävŃWg÷7ū!ügŠ|}į’ x›L˜Ļ„½“m"É6^[sŒÆįČϦ ~ŖųńKj]£½ĪęXKޱįś’õ«š¢:㼽ѠŌ"0L9¬8(ĆøÆęÆž Ūū é¾+ŃtļŚOĮV°ćAi«²–̐įz žæ‡­bĢĻć¾{y-®®Ėݽ‚sÉ• ŪÆ{ųQy„x§PÓōkķJĪÖė2^N<ĶæĀ=ūW2—øŚ.1>ڶX“)b²†%ž0`Ų$ÅA”Åykp„¼Ļ˜’Ć8ƕœģĪŲDæ”ź·pėw1\yČ0$ĒäńŸóÖ¾¼šGˆ”¾Ńć³Ō „MŪqČÉėė]øJJÅT¤„˜x³@ŽGŠņŻY"ŚCsŽøk łŹ}ć_[‡©t|zm2²J'ø)nĒĖÉwūWSeÄ"9Ł™‘HW|YĻcBŠY˜.ķ Š£Ė\żóXÖ‘æŚ§H £Æ"·'TWž[ØD“©"8lēY2_¬Ź»Üæć9ĶC€F] šn„åTŖČĮŹē5‘u$…d­É9yرfU¼¬'iœ¤‡@Ę1[S-ÄŚlĀ܌yekH 5#VOŒĀH±ąńÉ÷¬]2I^äČa¹ Ž„n®˜”s“ØFö¶QJńžƒ¶)“ŽD–šm8ی)ū€Õ29Ž—HœIm*¢nfzžUēŽ1i Tœ¶mćl6:ŸĀ”Č“Šśvŗ„2&č¢só‚Ćž;Rų–94ėTbBĀFN85 V3•“¹šžhÄ-&C€k±XŁ ŠV\śę“Q±œ¦N¶qE:œ#ÉÅuRŁ—“‡b’„ķäw«0“9Ū[dŽł”r…³ÉcKā»;;õŃ¢ŽŚ ¶ĢĢ[hĖ1Ļ9üEi{#;hkčRŽ%“ÜI<ÖA6"ƒ÷}«:ā[h&hĢlėU FgOs«‰ōa`ƒĶŹķėҼ¾Ņ;ėJį$B#aņóRįŲŁO¹źŽÓtN.乍.£? aĆ~4ĶwEKĶF•‘Ė/ĢūN=*-Ü%ätšݜv¬BŒō"¼Ļ[¶ē•’Ftf'žÕ&n&tāūdBH퐃½ĆŗEĢ©#Ȭ$ņGµcmāƒ\GtŅAw­øüabčoY”•ŚG\w¦J‰Įų«TžÓ‚hn£…Žz½p±Ą·Q,PĶČ鞔ÄßšŽ‹¾Y§v•Tą.ī1ō®źļM¶ž|Ēo!ć§q©³hööB@–į„'ųGzå5ūŪ«kg…ī]P”I­"»—ĶŠóč§¹†ŌĪ”ŃųĮžńÆBš5ĶėJ.C€ŁÉ9ĶiØ\ō^žQi4L†ćxĮŚyÅqš™cż£ ˆLqć<ąöåøāĪ×RÕvA<~vŁTqė^Et6ĪnĖ»Iµ,v:­7Nøxķn]0Īžbē©Óņ®¢ŚM’ŁĖyiēēŚFXūTJ]ć@§ļƲ4ŒÆ£8Ļé—ŗšĢW˜c™~P’:÷Éqнsiį ųwB–īā6ÖļrČŖąä€SƒEŹ>…}1›KŠV†Ż`$øĪy¬OųIu‹Ė«›H^$Œ‚¹ĒĢ:ēō§pQ±·į;Iōg{Ļ*[×ydv?u6m#Zši&øM)$L„ģ­Žƒōtč|ņśZB®RO;œdw¬»o2Öä»§Ķ»åā™…CÕ&—Ģ“·TØ9Ä}ė*źĘÖķ Čē9ėõŖēfBhšuŖÜ“2”1Ž“/4Ū6æ>D{“ ŻG֤؜ī™öf„zó ’"Ÿy[”=’•uś|÷—1˜“ö@żCc”¤kѾŁu¤čš¦ ÷q”,ĖĄ8ė_8ßIuqt×WKœ®ķĄqYŹ÷/˜ģ<+6Ń5ĘĄ¬Ēæź†£s&† „Œ!OŅ¢åI_SÄķ|Q}Ø_ź×Ó²Čä!P»@#®GÖ°µ½NćTŌ™J¬Pą¤šiݲZ;_[][ųsX† ‘$_õ€ąĘŽ£ė\5”wq£ÄĪŽfāNį[$a'ŠśCįÓYé¾½ū@ķ“å¢ŚĄ•Ęs‘Ū9Æ#ń£jŅĻkˆÆøœüŠA”qenD ““ ½…kéņ­ü%„dŒžõqC:9b0isĆū%#³Ó>• W:†ļ/]~ß4ˆć óIĮ’ RæSdŒ ÜŽAwP”•—=y®>7Š}³“†ĆJ’ō4m uŗi¹T9nqøWc¢ŻxŠÅģ€_°¹ł4£ŲŽÓü5qįYģ. [TĘ$ŒW˜_XÜŁÄ‘‘6ćµ½Ø'—±”eā™ü;4)$.É)ņ›„cŸj±|“+­åŠķ¾bqĀŽm.IŃ鶒˜–k–ņĘ3æf¹zźo_¹ži$ŚĮŌść½L‘¼XYĆ":3ĢĪ›‚ćŠWtאZ¹*ʬ~éQŒŌŽęiŌäY̶r6žC‚:ÕŌo5 ė+9–C$‘Šc|šč–mž„§ŽYOrё‚‘ĻåšąWHŗ·y"# §×¢Ćrf<ڜšÜtm ąqŅŗżY ³]R0£=)ZÓõéķoēø]ÉjŲ*3śŠÕ¶ÓøŌ3Œē œĪ“ŒŗŽÅś3źšžŸ4@Ą„]6€ß>¢‹ 610RÄ|źz ¾be »v6ņ”•ŌīV-Ķbé’Ė©ź;$V!nwøī)™ņŲō+m~Šj6šĄƒqsœu5Æāļ[jXÓ­€m&C÷iJ&ØĒŃeø·a¢Ė½v“޽1µō}¢ø‚+™dVUV?w#ڱq±¢™ąqéK-ÄÅ!Ir~P0?T/ģÅҽ(­Ėϵ!9täk“@”įõĘ+æÓ¬ŅÅ@Œ"19`¦·ŽÄšzżóß[%½ćyčØQsé\¶˜ˆ±Ķ,b,¶Ž™.V: GJŠĖĖ%„‘Ē tĶqóŲ͉$bÉĮ"±åw#œŠK3%“+…'ząVFpš̲^-¤äsōؔMéČėõOˆĒSÓE­Š¬.ČĮÉcļ^qÕŻÜŕ–EųQŹYšk%µ›iZ£˜ŅOAõĻÆnõм§YÅö‹+ oŻó"uŸzŚ1FR}ZĀ ąć åI•ŌAź( §4AĆėŚlÖ7hŠKōĆ`÷Ķ;N½žćY³²¾™\½GJÄUÕ<$žD7p8ic;öެ=ėŹ¼KÆkr¾Žš\Eh»]Y>œ})—a[M®iŅ ĖN‰!ĀĄ5ŚŲŪIŖZĶ<€ÄążMD¢l{6‰mV)ö†‰ŽĪ½k2žKId–;tF'åbW ö¬@ńoiZIÕÕ$¹*ŅeTÉ8ķSŪčöĆL0ÉŸn­‚Ī3“žETLęhéRĒ`@<”źž¤³^¼ņJ÷0żkTdR³ÓŅkŌ«2“»kÕŅė-§i‹ąĒ *>ń©q5ŒŽ&{ŪŁ‘Åø Įó3ÅU¶Ś@Ż×¼d౑f¼Rr»–Duą×w¦ų¢ņÉF“„w1Ü|¾aćĖÅ1oźŚō\F„żņ*I-®[dŖUį<‚zw{ēKgh²Ä²L‡nG'Ö¢ń0O˜qn¹@™©v<5“‹ū{«;Eä†%|³ŪÜT"[xSkÉ»j‡>Ęŗ—šśāÖ%» ó'?AZ—ÅÖ­§ŲI9#,Ać­3Ÿ¼ÕRÖēĖįŸ9ĻZӋW¶ņÉø$SƒóTr—Ķdf®š· ׉0—ćičkŗŃžÉl¦+„GzV‘ š—×^LVŃĆh¾R ƒ–ÉļZO”é—0Ē{ŌÓ8ĻOcMyˆŹ{öÓm'ótxüńPč¾nøÓ‰Ž=Œ8=6JŲ,tph&—÷VöėpŅ)Ē8źMs—6‘ ³iŅEuŸ—œI“3‡ÖŽ&¼]9„B| 6ē‘ĻZķ4ģ­7JÕõŻ@¹dņUBżĪū‡äi9"Yåśł–åˆ%øˆ’8>µcšĖØŪĶ<ė –Ł·–MRf”jž¶Ō-ę·ŗC°žŖpAĮ®A•tč ,I®Ō g6\"Õ¼'æjļsĖ2œ‚Wą_ [h“_CäG.üüĪ9N„öéśŃs[A’„ńš ‹±õ&ąĶĆzE¦™d×YŻ#ĮŌä×=ć?jwZ<«gžÄ›Tņö¤Ń²g„E,V7-—kV\ļ#·= tv-m©"p· æ&±c4ćŃīō¹ÖKII¶lƒbi”q: ™T¤,N=ż) Ć/Æc¹“»‹˜›fQū¦¹ķ6žł¤iī O xśP; sš¢JČĆĶĒҹé|%}$1\,Ģ œ>ń ,tśeŽ” {õ1PĆÜV†£©é°Ł]ݲ’6Ŗ ūŌ » ”Ś^™j³Gr>lķB~ķ5ļ“»äWÜ£$«(9£ŁõP»sį«Įš|2Ąį@f'ļõ‘yįĖ› ä–y•ķʱZ«—ø¹Žr{ėsū÷,3…g5Śiri×"Hådóö|‰ÜŌ‚F}ÕĘ­,QŚi“.Ÿ4r Ɏvē+oYÖÆfӅƒÜ—Āmϵ©Xęt[Čf»„„l-·£qü«ć’‰š­ōZ“š[Ė5•ݼĮXØäŒōōŖŒJr=‹į¬Vz·‡m/n,æ“ L‰9 Ę{Wń |<&—e ¼--į–uÜI+ĘüGZ%‘ęĶyu£_ė{»™`ģŚ\•P÷j ĻX^dzUepĀv‰éPŃFŖź¶Vz[A歜EĮ 1ŪÆćUµ/#M°…āp$lž£,zőŹög-.·&]ܰŸ”’~µĆjŗÅ׈µ›( ŠYUUt}°ŌO£tn÷Įö:l·Æl–€š8)ē^gć=VՇ=i _5Ė[Ł k“²ŗłDqÜ&20įÅ|æ> t›Ėˆōł$„NJ#ĻĻīqہłR¾¶7B-Ū«H²²°*=x®fśąĖrc™šÄeF:Š`hézŽ—¢$÷Oh×·æ(GŻ€œśwÆdš7Ä ?Ęzn”i¬/h™•NöōĪwŸń‹iisłp1»`6¶GŹ=ū×Ė’Y'ŪęElJä7’_ō¦āäVÓi‰"<é;nŚüöÆųU<īŅKØŖIj’ qéRŠGÄš…޵ā„ӖĪĪĘY]d6TŒų×ć_‰µ8õ]rēYŃō›kk›—™ĒŹI?„/3鋯&mĀPj!óZŠOˆ+ĒóÆ-ҼIØßh–6·‹æRøVÜq„ģöPIēvžŸQńLhšG‚iaD޹Æ@ų›ą[HōæĖi—Vö“–»™_œmŠtüØ3rčb\ųŖ;m:Ž+[MŖ"™c8 £€qė]†{šēµm;¹ĪāD#1Ž€{Ö©ˆč|3cö$I P+‡+Ā_jó?ˆĢÅm,†Ž{V˜©Wė‘ÓŠ,fąījųćį#qn4ļķ Æ²¶Ų@ߏ¹­Xų‡ÄZM’‰u³—É4ˆ0|„Ī@Ļ~)Ų=™SOŌ¼+ā›ķ-;W²¹’I1Ŗ7 øg'ÓŪŚh‡Ų^žÉO‘¼#H8ĄĶŖmncė+ØĻ!µ·Ž8Š!Ģ”¹cš‡JšĘ³0Īq:¶ŽI<Š;ρ,|;ĒYÉnē$‡Ļ\W–]+éSÜŽ”0HTrz?stF¹ā;XGR1ČÄ)ēŲ×Oąż @]VÅŽąGŽ$a•ÜwĶL„aÅX§ń.’KšF¢÷†ļĶis"ūøöō«:%ójZpŗ¼у–Ļ­dŁe4ż=äI]O˜¤¶Tc&Ÿc}q£źŚNū?·@nT¼lŲ:Єѯńsģ~.“JœiƒOø·rьįqžœ~5ĆÜEwŖZŪéܽ¤lĮA^6ā­@žRʵį{ė;'ŚŻÉ÷Ķröz^©¤_Ć©(ŪŅ ‘÷Héżj¹z›Fnj¼y«\h-d޲Üܶ'bœ}1ҹĶ^æŗŌō뻉®sÄ ˜ąrj¬Ķ#Ų¦°}'DxZį łŠgJšĖĶgSO<‚ērąŖØīŌ›°B*ā[ų+T×.nu DĆ ³’«ĘK1ÆEšēĀż2ćS²D‚9ī÷&ræwčr[Gń^ R/ˆz‚ėĘk:Ū j=śdb½—į4|Q"]ŻŁ-¬ķĘó».·½;’å”Ó7†t-7S•Ķ•¤ņ7(1ĄśŃ©č+¦i×z—–Įŗ¢šXśV|Ödóž^ž,xexå·xälä}Óé\–¹ā=FłJG;ģŻ…AĄ8=ėB¹ˆĘ›ā/ &Õ„‚OŻcŻAķ^¹g”hŗ.“ŸeĖ',z0&pž ūĢŠ•Ūē$€×]¦Cō+ ­ĢmFd ƵMÖÆąŻFK„™_uŗ›?Jv„„A§éÉ+¾łĄ$Æ|zš™4>TfxWŌt½Wž#e©tHä##’ZĘÖ|_{Ø]Ģ¢¹v<ŽœÖLŅ)•Ī¢—Se$® ćłV–Ÿ}k%Ā[ČĶ cŒ/@)$ŗWž “•ć†Xäū4„' ŽG£i¶–6Ś}„&ćgI7d·łÅ6bĪ?\Ń-ōųżøUŗŻóm8'ėU“ŸjrD–BŽārß»ŹņG¹¬ēX3м#”Ängya•唏¼}O9Æz“š÷„æ±u+[÷¼³™Óaxˆµ’V5ŗ¶Ę$zW„<=įgZӞx›ĖŻ#éŌž xÕÅŪėq½ņ0pĘąę“ę3”ntžŃō»£yŻźG1•J«¦F;ŠōŻ{FŅ„lōoęy IåsęąrqŪéķG9Ÿ+99ōŻ8Ć›«_Įl”H•ŌeˆōŖŚ…tĖkå’;+5Ō1˜ņ>cž’N•j« »_‰4ė’›oĀ4Ūd˜|Č  8ŚJśž]ĒIŠ="Å!Ē‚ĄYO÷±Ó­j¦_7CĢüc„¤ŗ«=Ś6m’Łßaß’Æļ^G7Š.æµ$æµ1Ēs±|¤f¦R¹œž§KØė¢(&•žćP‘rĪ>č\tśÖ4 “¹óķķķŹ8p‰½~•&n9§čgæŗÕ%š&Ų±榿+}rų]€-w•ĘŽp+Dģ)®…]CQŽĪH¼Ā³4½ŽGµ}š‹]Ņ„Ńę†réwŹT(ąē®JĀS±±ōT7“Ū0uØ÷Æų½+D–łL­{4ž\RīčO^k•ŹļAœ5·Ä}:×Āh—–“Nsęžõē‡āMę·gØĖsÓ!nŽ6Ą`:tėDcŌ¾W±KĮž2Ó­|óö9Vū'ː‘ĒØÅzʑ¤ŸZ™ć’3#£²Šč„HhŠo†z~‡{Åsö¹$Ž›U9śvÆ7ÖZŽļ²Ć"m ó2÷­–‡4™Żiė•œw҆;r8$W}mąŸķ»fóK­ØUv3ÓłSę]ĪĆFš~™l¬ŅD¶:z·–9† ć>Õēž)Ö>ĢŅ[¤dkå…9ś øŹā8­1|Eż®—VöŪ 8"Oŗ°³z·0]Ü]\$×M!¦r隙¹jUÓµ=69nDš1œ>Wüę“åŌģ.ć `,Ō1'gĶ»dŌӑ›¼h|³ŒĒŽÕgU»Š.Ź$Žźr1Ų1’õ f§%Øų&ćšõµ(£—Ėi$P8AõīkĄ®]švŠČ$©’Å€ūŌ'вŅ:‚ƝųüA«éĒugxŅŚŪ׎“X•{Æ„ļæ²¬nĀĮnń\ŰyŖ CŸ¼¾†Æźså#‘\•ūĀ‘i¾§+¢é¶³]zĀMÆó<‘šś·Ć‘cg ø,å}z-g4R: S@Vµ»‰X6䳉ēJšŸų#ΰ7V–Ź MŗN~÷½O‘}‚óÉŻlPĀUČF iŻźésJbšćĘ7ØÅ³Üę|G«-ävGKX­eRP 9ų½³Yš“ ”gdöŃŻLäą–œlA©mįyōØMåьbŖēŽ§ŌHQ£Žl€21­Z˜ÉüuįūGĆŠŚxvń­ļOļK™ †’g?r> Óuß “Fņä;wļ'?RzÓēEĒc×'ńv§}1F½3“p€CČG¢śŸjń’xŹāŃo-­]īnČ;·TāŽ[ģiäy.›y.Æu#GĖr2®žZ­Ūh·Ņj¦āXʐOŹæK‰3‹7£"čĒg‰ćWū#޽ŸN“µNŽč2‰\ąĘzäwØ2-^\[żƒb’Qʌ}Óõ®-VIē{Y\“źŻ[€  ±>–·——Ó4©lِ’I製rž ÓP™-¢w÷9ĄØ›čnŽDŪO;Ü,ŠģOåSY¤ *FA%zäf²`uėw©†4„3Ėę>õė¶zn4x®D,w`’z(ļYs³;£ĖüE5Ɵ/“p%•~FŪÓøk…k²¶m»keø=+TĖG©Ųłnń eŒžõŸ§ÄwYhG„XĒ=½°žF/§-ü\„ĉ»cnäp(9å‡śģ]üQšGĄļźæ>&Ž®•”Z#41Źą5Ԙ8E^§8ƐæcŸŪ'Hż¢üWć;KŽĀßP‚gøŠ„'ż9 ÉlvP¦{Kd~_B—6L䐬2+ÅüY§As?—ūčɁ÷–µŠ±”™šʏ }–³§¹ ‹ˆ‰Č1{fæŸoŪßąLjt‹ĻhöBMK <2Fa åĮņēėWÉGįɎK‘-Մ(Ģ2ĀĆīøą†Ē½fÉmņHŹź9Ś[člDš3D2µĀŹIé»==ź³T īŅa‰$Šiģ@dÖhe2³ąR™RæZ†O0–*ƒgžÖ-®C·Īz`ŅāŽę?20΁¶’zäõčŠ /o‚į›#!ˆĮ’õUė»õŖ\dzøó u?0ĮäÕ|½NøNĒīĻüö—Ā,“ųEćVÕ4énŹŁy’e…ś€ĒŅæ³?ƒŽ9°øšœZV’ńźR4‰(ćĶ·$`§õ¬ä“;”ō>™kŸ2Ö9Ō2(aķ\/žx3ć_€|išĆÅń[]čśĶ”–Å\ $Ų;O×śā¹¤ģe6Wķūū2]~Ģ“‹üŖŪOnF“rĘU d„(;š:ŠųOtĖ«yb2%ÄD“DŽTžüzÖnća*ŒśNų®^XŲš¼ŖČƒę<„Ē^ }?šßāƈŚM6ąæŪ¾Dd|żø’=«ĮÅį”u;)U{ÆāoĶo;@Ó§SŒdÜ×GįmBkĖ:ī;æō(Ū-ā•ĆN\®ēDŖ;PßűįvņØ#yĘN?żUąv¶²h×Ma2!,z’ 'Ō×Ö`'txŗm0HGĢŠÉ»žzŌĖ FņF“²ēœūׯ Ž "֟o]„— už•čr.ĶZvHÕd ‚sŠźF28-Nxæ³o’O(øĘ@$}+Ģ!xüÕ` ¶pEfŖ^HŽĶåˆ ÕX%’d™„ØpNW<šM8’mŹ qōéś „«ŪÜŖodE ć”>ōĒ&oXiqK ÉIH-ĮöéXQC2ŹSĖ+:ņ+ Č±{ys5šĒp²£ iŽ“G›÷؞Jöė9¾…Dōūž²M5FG½x§ˆåk»™‚Fv3a·žU™¹E,ī-£Y,›c)ĪćÕOŅ®źrź:l0Ž yȐsųÖŃŲL]Ź >ī'ž}±œņ£‘ųTśäa.-Zm”²G©Ŗ0’6ty–Oć“#Æzź—7mƒ‘.r9ā™Œ£c˜×$–ĀP’ŪmdĆ+Üśēēšęä³ŪNFyÉ”˜Ks°Ņ56XÖµNĄ1Č«Œ6WR©FcĻ\t4ćøF% •lD^Q2É× WQ•[ZźW°•Į)•ąÖÉö51õ/ō·h'UfÉd„awu*€Ļ Œö¢Ć“~‹Ā‹3©}»zžüu®F(õł¦a“ķ’ĪŸģƒ×ņ¬Ü;va,WÄØńƐsļ^§ųŸLŠ  ]$»‘1åuĻŌVcP¹ę·w0É%Ģ¢LÜ3…y¬%_³ĪŅ(f$äŠ'ā5¼š¤ÓNŻņv”ä殗BŅķEĄIQ¶+Ē~(3™× ¤ź‰SŚł=š+Ó­/ķoĀ­³¤Œ±8ėÅ2TY‹ż®÷—’cHŹcänŪµgųŸĆ6šŸŁ"bc•O$Ś6-Ž[QŃ-ģÖkH%Žo,`x&©GØ]i–š„ø‘CŹ8ījīC:+­FgŅ£bpĢqņŽk6ÓT“M™„Hwįr§ž¾µ ±JūQI]ŚyŻmąt#>ÕĻ£;Bń–#©iŚĘ‘‘é>æžtŠčļ!U#Čūø©^:1åņx§W ,–ęę8² ?sž•„„Ō|§ŠVę„w”Ć…e‰T0(ōĪ3ż+ĮµmN=[Ä-0DE·Ź)RFsYskq Õµėö¶6vl†90’ysŠTÖžŌmşˆµ8š|nD’ōēŽõ±¤eŠģ›ÄŸŚÉ$InŃĮDĘ3ž5ŹéfuK†Ÿœ1Ę6Ó ėcŲ!ŽŪMÓVi&HĮłŽ9Æ*ńKŚ^8†+č&†G͜HŃ.‚龂ŪK‰'ŗY\¶NN}~•ö™”éå¼S.ŠÜs@œLĶAŸÉIU€ē ģ+>IžÅĆ9Ų~ļ֋ō!SīP³¼ž=R;įsåķąėļ[6Ś“wW>X¼ŅŪ­eĶ®…rŲčģ4?¶]ŗ/ń ąulUäW³št“B²(Ėc°ŖéWŠ£øš^„¤ßŲÅ8™G/‚Pņ?­xüZxœĪf¬qpN2=?•Cģ;tF3ßEj²rP±ĀćīŅi3¹·wµs…|Ŗ8ÅLb_.šŽ‘įD×-dŽCiŪ#`ļKŖü>ūGu|| łl9=+EŒ¤ģQŠnćŃVõfŪyæßÕ$½Ėś*Ė©čpc1"1T0Ēüā±ęÕļ4ł ƒsƒŒPUĶĖ{“ørŹ”‘‡CĶtŚœ匀!ĮŖO[åŸ.ŅÓX]ą–Ö_3åa2:š“A¢…äŲ!¹ėÅS–‚±ŪxHÓl¦»i„ł~iÉ%ŗõ>ę¢ń”vöŚdėŗV,Ä©Čß)FVŠv'±½‚Įą‘ĀČĒóQų›PŠńģa¶»{g¹Č½(”€»Ų°øUg#ČūÕĶ^irkQ)X÷żģSC·{©D²“[†Óžkȕ—+6¹­„^éŠė%Į‰Ā Ča×ėKu¢$6j3ņxڵŽĘrG7g£Ż\Ü2L»'“We²Šß̵‘Õåµ2 +KÄ·“:z.>}ż:ŌÉ%”įnNņǹĄė@ζ-\lQ*£¢‚Ÿ¢jŃ Bhäž4Œ³yĄ4£āĻéhŠéöŹg—ęó„tśķPųgQ-æ ŃÆ@«Č^§„ŻÅm.‡4÷ŽĘŲĄļcŒž5羿Óķu$Ób“i¤øGlĀ·¹üjF]×4{a؉āD½  rõŖo §?–Æ$@œŠ üw{ą’3 źF M„K<²“1£$™Ļ„i t2q;kgI‚ą¹ūDZ­% i3&ų÷uō­ =bK[];O†‚Ć<Ų“¹ņČą×׉ku=ÓkV$/=)%m f›kŗ1ӝīʘ#‚0 xf¹ye£yז,jĻøØ}M Ų³7ڌ'gŠ8 „Iƒ•Ęyę½óAѬįõŖ>>¹Ńµ‹—ū+itįq^ϦBŚ|k’mU\*šÖ2čdāq>7{›k)ļōż>]A” Ž•ńõńŸž˜µA­ō’ $‹<€śš±ņih7gYӛY†HŻr ĮĮĒJī|9āķŅC}ywepnßüäTKcTˆüAgļˆõ[5ölņ³”ĪGįķ[žšÅŻ”ņd1ĀĻ•'€ÄzTr°=¶Ė0¤QģCœ·qX·:lSOsqĄ†$F9”ÄW8kėč® _ģę_.7(ķŒī#­qW÷É5”M6[åo,ąÆųQŹĘwśm¾£ŲĀö¢(–,4Ųēææ5Öė·šx_Ā÷Z„Ētł ž5^ĢŌ<]u=ÄRłĶä®Üö®ž÷šS—ł· mĻOzV±›¾ĒŸßh:„hņ×wnp*ö‘”Éi:Ü\HDXaģ}jł‘ ,ō›OŲŲµ¼[ēn gųĒ[‚Ußm“ÄFķ€}ßj‰K”^ĢšēœĶ!b¬­ž+wGŗHīüĻ5‹Ž<ŌØĢ·?cŽ(ĪćžMdjBę'ęNƒŅ€2Īzžõp} G£xuĄž:)“ģxa€0Ė’—ó®OųQ‰æ¶¼Ks¬-­ąĪŌ•ńŗ1ĪÅæųŅ”·<āf·¤ų[TŅth-…®šŠ2nq挓éÉ5ĘjVÖ×Ń[5„q]9!’LåsėR;]n¼Už‚÷qĆd»DžkaW‘Ļį\׋¬ļ,õ·Š¬%—PŠÜmß’X:gƵK‚+ųOÄ,-ŽźŁ„ÉĻlWYįæ§…,Y¹_Yšbč™É…Gé҄ñ\„oźi}ŠĶk4—‹ĖÉŲr psĒ7‰ļ,¢hŻ®ÕĮ)Āméҳ$ś/DÓnŸO¶[ČĪĄŻüBØx?D¼»šM „öĄŒI,Ēӎ(<Ļ솿ā-.ݚŠ|­'qŠÖ“¼Oዽ`6š\\¤  hбSךv7Œü3»ń Ɵ«jé=­³ČQ”ƒ¹pq’+KāŸĆ)ü<© Kqņy€øĒŹyJ„ÜńĶCĮšŖiĀā4o>` €GŠW”|+ų{ā3JńF§v…” ½”#²©ĪHž•j&,ɖÉo,d½7¢ńeĖFqĮSÓŹÅąÓ©\}°Bw Ś6÷>”¤Š‡jŒ%½¦¢­ ?‚ŽÕģŽÕ|5¤[[h·b¶3|‹žzō¬Ę|ŃńWZ—Åś¦­įŪQŅō9.Ļ Œq2Ē5ŸšI·ó¢×%ÓīÕ`Eż„~ēé@¹kw”Īķ¢™-m­¼„EĪ8Å|™ŖĒo„ėײ²3"@ĘžģdœP#Ź|yØ$ŗ9ŠcŗÓC8iB¶N~{{WWm{ØŁhW?k»»kˆĮc!ėž ¤3Ģ­į¾·š[‹„¹p%čż8ōĒjź­“;[PTŌŚ5B<• Ź…D¢Z’G„ł°iškK„»4¤)õć’×XļŖ‹»7ŠąÄ± nvóYX~՞u§Üėzv»o¬YÜR"UŚDpģ¼×ŗŚųŽēĘŽžV¶–äH6aH=Å\WR\ŁąĪźęÖĘÓ¼)Ÿ™€Īā~“X¬Ė’šžųēĒZ<^ š¬é¢yi’E@}£©'é^™ą_Åį­hõ™›P×.$MpŅļŚGaķ@6v7:b5¬’3“ ü+‘ŠóYiz£wŖĀ/c>H [iĒÅHłņÉķ῀éšG}|ŲŚ6—īE}±ąæō?%Åõ˜ŽŚž_,§h`ŒÜŠm¶ēĶ’~\超¶„ąĖ»4²K‰%7Ā&zŽõźVŽ>—Kšö‹§B-Æ^P±Ż)pJŸ›)v1Sk¹ŽEVŻŌõé>øŌ48"¾ŠM³ć"B Ź„Ė”Ķ)2ö·ā]_ÅSoÕ&[ĆŚJ Q° ņ|÷ń_OjÆi„ź»Vo¶ 8É÷¦¤\ē1ü1žÓ¶7v‰s{qneĪxėØšÜzžœÅīD”ŽÓŪµL‹±n[Ļ ų‹ÅśO†u‹yﯗ“ėķ^ĒńMšļ‡“ų?³ē‘^\,1"݃ޔ-Hr±ęĻ%“¶„-n‘ī6}åŚŽ‡5n[$’fé÷N?µ\å>^޹­†Z¹Š&f’y%Ī6ƒŠa]v”iŚcĘŚĶ¼ęØ(TćhĻ^” ę¤×4½CĶʍ„­ŌšŪ6w2ńŽĆ>µä<ÖīōŻfĘ„C ÅžYA•®tū«&n ;¤;·ōŹūVĒĆż īµ' '½·ć‹·¶h&R>ØŅü5göKéäO:yįņäR™ņž/­xV§šę k˜$³Ä¤īqóźh± }ŽžĻN[gĢ„[i#Ž+“µńę¹£ųŽÓĆśeœŻĻ XöŒ¶Žę¢H|×ў“ći~'³-āØY@LlйĻ9¦xᯁtKÖŅt‰"½×£‰YUNXØā’—C Tčr?oo4]Z84›h§¹šåmÖ9>ną{×v#į½HYĒsż°–ųhŽ0ŃoĻ9=…Kw'sē Ķ%īīZ;’‘±ūŪ:ķ]~šāŚ’dŅÜĒm°n_1~VĒbkc¢1FD ¦”2H5IJ؏ üźW:¶§ØŻ±š'ÓÕT Uõ nŽcÄM ZĻg 7Oø2CŹŗ’†śjé5=4G#€Tgõė9E™ņõ= „ŗ¼q –ėó'§±®{ľ±O©0X-ó€¤dséłTXGĖæŚéz«BĘGV$A],zm¦§µbL;|§<Ņv+ź~¼µŒÅ|真įś×44”„ȍy÷ ƒĆqš ē=[J½ŸT·é¶²”Oj։Ƣœ,vĶ$Hv‹ĻįAIÜoÄ->=M¾ÄŃÉ1Ć£ æēŅ«|3Ņgs%÷–Ÿf ±ĘH=Å))žł xZ)ä7‚E€ŪęJvŖš®7Yń•¶¬ś]³ż©£/zż×>ŻśVj&©žwń čź±Yi…E­ &V HŽžź+Īd7:uū+“eėhÄÖ6°š‰.ķ&ÜM$ »,Ič}q]¼ž$ÖYnoōBWŚø‰‡I+GO±2k”Œ¾$ńØŚĪø% v&3åŒółń^Ļ”źmž²ŚÄ<÷ę[¹ ĻR:‘XM[C)3;Ę7³Żj¶pźo$ĄJ…wpsŪŹ½Nkčæ³ą[y$ČP°Ę„(ČČłĆādZõĢS²!ƒŒœŒ„s‘Y--oƄP3 ya²TՔ£s­šf‡/ŠmįŽO#fć½N µ{šņMš:ņ99ŚŁŹŽzf©"¹+Ä×S‹hĢ˜ČŚ§šäīl5+Ė2+vŠv$ÆĖŅ›™“av÷o£ ‘“ŠwÆtųe¦ZApWKI'˜ŹĒœ×<©ō*-ÜūOģ8”ūl’GolŖR>XæÆ#õƑ~8xĻM”éž²Iµ ŘĪĢŒf²öfŠżO—ogš{ƒi;Må'''®k„šī™„]ŪĻh—É0$ć9eōĻzÖ1]KRhģ|=šŲ+k]¬‰dƏ8œ>ę½#Mų“įŻ@¼†L¾”)SŸ” jŠėńIÕ¼<ž#×V×Xw&%8ł”ŸŗOҼ®ŅŪuĄ»²QtĖ–ÉčŁäShĀQ=óĆÖ«®čõ %·{r’2ÜA÷ēé¾ńžƒØ^Ig}pl5D GžĄn¾Õž¤•5ŸhÖ×ׂuMŽXr»½5äZō‘jwļpGŅÕE…Ž·GtM"(䍚ģ Ī@’õ«£iÖö\ŽĘ²^²ƒ²qÜS!@ń‹˜H·SŪ˜Ć“ĆƒF£ŖX,pŪŪ‡F ļć5DamĪ'Qńān°ŠßŹ™€sČ”'Śŗ½:³’Ź-FõķŸnKq#AM¤t·vŠŻĪ!•ö'Ü`œäõÅ[ųG¹ÖP¼’'Ģ *}ćž*āÅĢŽ†ÓEšī‹ØŁŽź–ń>ž“eĘFXg„X¼Ōü;­ŽŽImqŪ!ŁĘT©6ɔ»qćAØĒ>ŽšQA4kÜń‘Ū’­^É£x|Zx{K¹Ō.”Ō|ų²Į[śUEtfnēŠź¾ńŽ›r/l®ąyXģ”’{;WŃW×õ{ėRkķQ¹?&UW#©Ž<ó–y>TĪ0iʊö rłbw“Ę7k©µ²¹ŒC4…£øWū tõ¬#ŌĪQ±čŗeßŪQ¢ŗbƒĒsJó_J·µ¹’gܶ@a÷AŖ$±„[ŪO2‡¼0`°Öŗ !0½ĀÆĢF į…zތV}‰pŖ±t#Ūō«>"Ómn#“KeKUéę…?ZQv<ęžęÖčĘn%V*¤ nh¾ƒÄ—źŃŗ®ēr9p9ŪüźŌ픓fuŃųwO“1Ł[¤0—2dłśw5ČkSŚĀd±/†qó…ĮbÆZNWe£¶±¶Š¹nNzæō±F"–IødԘĖrµÉšQm»ŸJӏJKĖqvģrŽ QŒę‚I—R±ŃEĀÉ4¹*7å\¶§{ĢóĖˆĮČČؚ*ĢĪQM ód=>RzŠ©s¤±B`#ĶĪšČq¹]lÆt[»I„‘f‘@flēµ®Ź;˜-.®y\«H[•Jł¢x²ÅBƒ"÷ō­Œ¤™ŸåJĄB¾ąõA# •c]¤0~ŌņZ•6Č»øeBGµMå©Ī쁌ąs“A'>TFkøŒNĪtĄÉĒųT»b·ižY· Tcq•YY]f•¼Żć÷ ČY×¶v’ ltÓg„ų ƚĒĆļų{Ęž²š}SN¹a“œģ ēœśWöéū~Ó?¼ąi7ČoīaŽkˆöm$’ĖDe1Žžõ‹gdCöĻBń¦¬‹Œ€Ūŗ -Ųõ鏞*I4€ŅŻ€ĻĻ‚Y……rµŠrĻßų-7ģ©ańcą,ß­“yÆ|SįųŽł!‹÷ŪFvJĢ9ĒÆ×ŚæˆY-®­ ŃK Å¢|œó)ö”­,Šźlxvk§iX”bWżŠ?żu>$ŅĆP‚ŅT”<ŪW–OLöÆ0§u”Óėzŗ_iŠÉ-ä-'’Uź qĻ×Čx3^x®µ8“ŃĀŪ8lŒškēµźk'”ōƅu·øÓ£źˆł@cÉ«bŽ&žA!-"œzšś,¶·CĢÄł ø³p…{)õ¬IęhK89äóšśJ2<š‹©§ck=ƖfŚOqƒU/`Õ¬n^IŲģÄµv³ ā9µ?2’hłn}ET“‚%ńūÓĒJCŠPŻœøĻ•ĻCøż¢ffG<҃kś|Œß¹ņLį˜ėšéō”Øx{Ph®Vg…Ųy±gūS#ō‰Öā-ȘÜą铯BĘ[Ÿ.`»öąnM_9 XĮń•Ŗ]ā V •n+3Nŗu #`‰ŸN¾õ-ÜGUi¦ÉØFņ‰²£”fź}+’»Ńž+ēyv"Æ!s“š,l˜–Ö0L—!p’ÉČėXz¢½³@@犾d;˜Ķr§lä² ŒS[QW£YĽóš|čŝ‡īĆMnc”ē ­zNÉ”–+„†?+ų‡z¢¹FxV–q娉y9äYŠ-•ĖXĒ »øģr.ŸRųm”-(©ēž$I@Ų.;uޘ¬r÷š„ė|‘do,†9Ī“$ń÷Ķäo”Ŗłc8O„5+‹+#D'Éć#šµįżRxnJǰĮėĪEk\“§¶k™ndĀ”sņąćoÖ¢¼“‚ĶZš“QŹēo^H„ ³Ł=¤fxCŒü¤¦°[Ć/ŖµÅ±Ž>‚¹äāsš¦ŸØi÷čh”‘ø’JĶ’kĘi&1†E’<ӎĮQ: Ü×éq¶­ĘH­Ä±‡N±ø»3łņX/LUrœŅ‰ÄĻ _]I.cŠä‘ź*Ī‹s5¤ņĮn=źœF¼ĪŹŚīŅÖ&Ō.6¬ˆpsŃI®6ēĘ73KrĶ$gi%^¢¤e$mEäł°Fj&fEŪ2ޤ†®”.ÓÄVŹH^į‘ŲėųU[;‹¶²Żu)GjŠĖ•¾–Śņw—ģPŪ±.ŽÅiXh‘H±\Ā7”]ŁĻj ŒuŌļ<;Ÿ%Ō vĮ-Ć ¶3z›Ę:żž³ z|Öėf™ŽB>aģG„Ö(/ś|‹o*„‡ĆąeCØŁŪ[Ąš)rGŹ Je٤sŚO†Æo>Óq*/• NpO=WæÓ¾Q”Ū?ĆT…(¦•k” t½d™%;|Ąz7„aų¶Ūʈygt%łš1 ³Żg«lwgićQj’ŽŚÅöóĖI…dę¢eÓܹg⻆Ž;;Ó½!HčkŒ¾–ŌL|¼łY#Zå•Ī‹Ü֚ʭŖŚM,1Éq“}ŠųR13ˆ¦Ęz±Ęj߉“PÓY"\Ē ³ć xo„HčÖ÷LŠģ”¶Žeø?9>Õē> )}qsŸ- ?„PL^„–Öķ"q¹vŒrkcM›R1 č’«nR‡œ{ę­G”e{ĖYuŻxź·Īg»ņ„lĻŽ@éüŖ‚­Å•ó.U­6‘~ßÖ„d݃oo<‘ŗ6r+JŚK]GyIѤN cŌR'UYķŸO– ^'bö@’Ŗ«źhÖŽņÖE•Ę~RpM4€»„źZŒöafR%A„Rٵm®ī<ųĢglœdzŠ3[Äŗ|ś…¼ŃLcø†@ĮąIĒCSx{[µŠn †Ŗ“ƒ(ć~¦œe`7|Bŗ]ԁ¬b(õĪźo†ü;ʤVŹäīw` {’j¹ś £Ģ4Ū»Ż?ÅzģF·³(IYņwÅv>rjZ“…t¢ł²„zŠĢÉ£Ņ4ųeXÅUy‚žkĘ>²Ņ¼E=Ä71]•įöŽīZ•‚19]NK[;vŽĶTŹéŽ=kšö—}śŻ:ķ˱?xJ¾tkŹz|ķ°IīŁ BzšČµų†ę[(’¶ Je°ĒRhÜ6·Ņ¤š[©l£Žkø˜©Įą°©leńDĄBĄķ‚ć–ēҔŁķŗ3_[hWŗ–˜ŹŗŸ”ŃÄŗÄwÆÓ§Õ`ŌŲjŅ\IØ#$;HRO§Ø©°ÆŠśGšō‡˜Æ'ŚŃ¶W’Uv2ø¹oUõ5,Ø»§Ņ-#¹kˆ£9P¤ćØ“{bé,7bYäbQ‚Œķ‹FɘŲÜ\K"K™9ÜĒŸØN‚ ­ćE”`®„D£qœ犿°īR2ø@WĶp¤×Wā=WFÖ`ūU‹Iņķ ~zriF6+”Ļšę¦ęI®RĖ ŽĆ ®+RdÖ Ōlo 0·šU[<€ üjÉ5|=mžĮ2F>•±y©›YcĘ1žōÓ°šcāK(žāņB«s’ėž+޽øœždˆØKgކ 66tżķü‰åvNčĘ=kÓf¾‚ĆČRāg‘ކƒ6µ"»Ō¬āŻgsżź•ÉčyŹčšJG%„+䍣ē^”ļŠÓ•[ŻKg‘£HŃÆPO RÅi£’DV‘…HŹńh“XDĀŽ0WvąŠZ_=¼w3#221椌GUy®n&ŸbFģJwŲ×UįŪ­:ėI»–K‡†ś"8ö¬÷'·’^®,,™­źšĖujé$’\• )Ż÷TgōŖŗ¦½a¬Ń’ūb_”ēėZŒóė}Y®}±āÜ>ą3É«÷PßkČ!HR(Td±éI®€&‘kż›ŗŽ °ē)ĄÆeŅ|ttŪt›_{hķD ŽļŃ1Y؍F­ā ģÉ„Ä7¶ņ(łŠżß„y•’‡“ £ õā-ėHę6Š*µÜī®#M!…œ¤#ø#­yķ֗‹‹‹ÕĆy‘D¢_2.Łéī0ļ–ø8é]޹yįū-ao,w—~Zä&CdõśVV3”µŅ,YĄ&PwĖH?SL»Šti[œ68ļE™S¢ų~oµ@oÕŅ7pćśÖŻĘg¤Ž‹;ģn€œ`}(jĆK”,^>Ņ4]n;%ūcLbYs·åäć­}§ėĮŽĻūAZŠJŖĄøžŠŠ_!.±«b¹““™¦µvĮē†xˆ“OŸÄiqøTĖSĘ’ øĖ¹=?B¼OģĞŽm°‘€ `āøńLj·ŖŒąÉ“č+>ĆĮöŗ-¤P6l'©éޟ*.2,Ir‰i$HTģė÷©ŚU£Źņß¼0“ʹ'@¬¤tDīmõĖb{I£ˆ](Ź:ČÅų†ĆQŗÕV¶ÉČ>lżßZ’Ģoéo€‹ł³·ÆB+–Óu;]3VŽ;H#eŪ—ryÜ;cZēģZ_ŽmŅÉģ„X’u%£$rsŚøż:mZMWR»¹øŒ[ɂ‹Üzń@¬uśG‡mķĘ©+,ąļ–I_ōĻŅŗoüPų}¤źžšõĪĒT-4ń.żć9Ļå@ūüU·¹×.l|aęč±8Tøø^ouP:U?x³^ŌµXgń\›Öf§G@sߌĄŁ»ńFČ- µŅ—U¹y#·…dOõ*?‹Ų Wŗė"Ņļ4{ņŅÕõ²11׿zb‹ņTžøóąūŲ‚ŚŽ@‰¾½1ųW?§ųóĆžń-÷„īåG¾gßøž{… ±č7±Š5 ų_\j¬įÄ<Ę'ó’8ēĖtŪd½ŌfÕ¤b%fŲ>Q„ē°(*ż ωŚgŲõ†T>|Óđ.9qč9®.ų÷M—G¹»ŌRi£'t¹ū£0)ˆśnĘY| į»iõĖxŚŽö?.4|bFĒ}kę-KÚmĶö«#ŚÅ ×jwoŗ{zP“óWŒ4µųŸO?m˜‹UņŃņ¬;żjĘ©|u·ū ¹[KhÖ9.Ć9éH ż?P¶ŌuŃRŚoµ“fLģ_Ö¬ų”Żčš‹8!‘.d\«ćī“ģje+…«kqéšĖup³Ģ…U£-ƒß£5¼Šiö3DĢ›‚÷ėßõ¬€åüS{¬Śhɧé ®Qåb™*uĻākرų:iĖ¢i°Ćc +öŸ4ŌśVŃVw2|E„Įć+lÅ^FeLć;yė_F|>ŅÓMӂFłšŽ #fn˜¦Ż†X×cŅ Öķõ}NIcó€Y$CœsÜvęø4šo„õ­X_ź6ā{3s*¾ß3Ó&£œńĒ€µ ā%Ō~…mlfŒ(ņ‘ä€3×­tņirA«3¾£“ĘqķļNć8_üNŌļ,G““H”1c!°Ū¹ę¹’ xóTžź}KI5 ³Ķ"ī sßŽØ¶ķ”źŸ ¼5¢MÆikŚ}¬7Œ’Vppyķ¶Z¤ŗ‡n4V¶†ęŒŅCßilōĪ}Ø2•MOštĻÜÆ„Ī‘{'—ŗāiJ[%zć%šÖ”ol—öš»iҾĒ?į8Ļ4 }Ź–×~!ÓÖģ¤7 ˜#VėæÜWwįæėēķ–Ņ.谟*BćŒūÖrb”MYüR–š=ķ¾žÓ‹©Q„æŗ}+Į¼ą={ÅŽ6†8K®é'iØP{Ō­ £wi>‡Įŗu¶•.RfƒĖvn|Ģ÷÷ķX7^[ė“1An˜`ø9f«…+ZĒ;§|/“Į:޹ć&ņ.u{ cŠ`3äĘĄ«ŲUæėPĆą=VāķV]mLpƅ•0r@üŖ¹Q“GĢž—W’ć팲$ :J ś‘^Įį­oEŌ&[y¬‘.ķåęāÓõéL|§gćVÖźācc†FcņĒš€ükN×gy­“{––kÄRlrŹqĪE$“ŌϚŚ^.¾Õ|9”ŽŽéž ©É,qłˆÕö%æĻjłcÄÓė޹g=āĻu3 °|©Žō= #3čŲ"žēCÓ£Ō.CĆ{S¹sėėYŗ Ä.Æ6!qnĄ1qżģō5Š“DT‘ļŗn»|ūa‰XZČ£q¾µā/XhIsØź bG UĢgŌåt­{NŌPj‚ńĜ†< zV¶™Øųb/Śj6ö¶'W¹%b•WęGlž5£E¤īYńēŠŽŽŃ#ŃķīžŹY ™€Ź_¦@Ɯ|)ńZš_‰uż_G·hoXyBiFšĆoaķšQŽ–4…-5_›Åž=žŚćV ¬2‹ˆfD(L¤rAÆMOj:.Žŗ\v׉“d³y˜Žōģ[‚Hó½C[¼µšŅK {yH•w$‡‡¦kŚķõG¶ŠĶéxƒŗmUĻ ĒØÅ2T™ņŽumfbԤ҄øo1„cś×yąz]^ChĘ#–ĘäPW“>Åš‚ŒŗN„«ĶÕ‹†ˆ× É^üW’ųūVÓ“ö±‚Ž4Iķ;ŽŅŽąQä)HĻŃu.ķ̤4nX®=k‘ų«āmkN±Ó,m F±e>tƒ9ĪxSK”“åŻNšh K“N?„ž½ĮڜwŪ“é ņī9”ezŽ1ōØp3™ź°i‘éV–ö×5ūciÜij u&¼óXŅc·¼I-ćx­ĒĢÜÖRņ3GI£GlńĒtĢęŻH< wÆ{š£h±Eowöi̲8ņˁ·PG=Ŗ Ł“mŠÕń‡āń\ķą‚āŖ¦Ązš)’x^Ū‰ggn–…< ¾ZōAéķWĢVs>§iĆ•,  mĒ#>õęž$>ŸqeZ”s0“nū}?ʘį3ŠńKyŗ¼Ö)"Łvó‚sųW%p­$[P”#“ŌcŅ®2±¬eг„£ÖvK+<nć€@5Õ­®™§Ė-¤d4)÷00=³V¤‹9nóUŅ‘'Ć__ZēŒ/MČŚ]Įdņk)oq8ž£įŪŪŻbĘ’YŌÆ ŗ¾· ć^N2+Ń|9©’mĄ-®®#‚ćƒÓžõϱ<Øf§sm Ķ”ŪŚŁŽČp†G\ķēØĶkXųKO–×횜AŲe6čqĮż+E>ą¦]‡RO /Ś4ū)%›ī**rŁ«!.žŽ NźÜ¦X6ÖNr{V±•Ļ±Ęk3FRśźā8"‘ŹóŌW¦jv²YÜŗ[ŒæČYˆłyēŠÖNĘmšŚĘĒd×+éåbqÅz/€ml%¼‚ęvDƒi$‚Žł®i2©īw%Ó\XŻŁéšŒniTmŪrśż+āļÉy¦ė:ŸŪ§¹½øb M&9ś ĪĻcG#Žm^Ę+—žöŚG“Ó‘^ćąß馕›j:sŪĀķ’Ūŗ··Ö‹2=”Žj3±šŻļ†,ī‚Ū́+cżYõĶ|µgįMnmKQę[{8NČœbe隣#™·šķÕŽÆ&•q>õYOĪ­¼õÆ}šŅɦ"iö¬$•†Ņ\ńÅW1”Łė·gL±’ŻČ{ƒ"6gcę¾мMww%õŠŗ…Xäō!—Ø…I-[XÕ­µˆ-¢Ó$šŁo;<é‚)šĘ³6ž$)Ąī.N?3T +,~1’„{Ć­2¤3j*øMż bø¹>8Žėóé¶÷6Ier‰ `‰ųöŖöeDź5/ZC„‹ÖņøĄDlīĻØķ^muā›L?™Ūņ@ʓ…¶)Ų\}že™×sō'¹éic'ŁļŲČiæęķPbĢ]KÄ×7 ma[Uč3ž]²ŸU¹€ <;Ż1łyėō­ ĢK½&óUŚß\æP@‚Ö·t? bµā\™å@'īœś~u\čŁ.‡¤ųSĆ’ŚŻ%Ģ1Ć L­ĄQīĻZź-ōŪy’->Žä=øłT…į~•2Ÿc&·)ė:h,kµ–0FqÓÖ¼—ÄWϦYšėʱø$g8¬„~„žŻąMwCÖ|*ŗ„0Ō+ÓžjÉńf«xm'»%aŚ»2Š_ Øö`|Uā‹Łļe"eøƒ,Kgē„]šĶ€¼HüŲYås‘Žr=ź£ß^¶¦yj uPŖ1÷ž¤Ó®¾ÖYÆU‹0;H掬ĘNģŽßY‡Oŗ2C°•nFx5‹®Köøšć·,F2x"“ ętŪmBIdŗø]±ƒµ6ŒcŽ»=)­ēŗiŻī"n:ę±{”wšv°˜YD[8`Xd„sž;ÖõE¶2锝r1Ļ +T­ Xó_ “ė|o5²—@ŽZŽĒ­} ”x‡Ćŗu„“÷ȟqW«zg°¦ژśŽ·mØĻ<öڜ[Ņ2R é^CwlóĶ;½é–P äą/µL“čiśšZ,ŽcņĘdO©ĶjO ŒQ‚ƒDQ23ŒÅ"Ml®ļZ¶Ś¬ń¹šeóŃóņ©Ē5eF(ēõ‰5 ė].Õā7²øDÉēŠWrßfӌ’joĘ«ū½§2±½8¤tFš+_ZĆįū¹—ģ··.DČ;G½rž¼ŗ×u9$Õ'†ŻĖīŪ{F?ŗ1ÅO"4$zÖ”į-:}9mģćV“ ČłfS޼:ūKøŃod„JĀxŲŽŻ4ł pŒŁ#»v/4ģ—nµĢjR<ń˜RB®§%½«9FĒ4–„{ćŠįR9 GŒźjB×6ó,–ŃłØ®2ŲąŠƒ˹jIf¼¼d’Vs ޳²{UYnä䒠`ćŅ®1+ŚŁh~Ē\x®ļPšIodIdĻ2ØĘā}kØš’‰ćŽšFĮoa`8¼?ć^Åj‰ÉŪcŗ™żv’Į’jū_‰>Ö?gė6ļā=5 ֓r`€'ü+ö³[¶‰Y‘@Ū÷[Ų× G©Uć> ŅŅę5”§Ÿ4² pĆҾ ų·įØ®µ ²-ß,d‰ݟAY£šÓž šwĮóų“F‰~Ö»˜ü]g‘Ēb;ū×ó«>œ–Lš4ÓyłĮާ ūžµŗœŅ8UVrń ćŪéXŅŹ_÷ŠU½{ŠrUzčEQ˜²¶ģ‘ÅG w²H‡—Į ¼’=?Ļ­ CšHĮeŻ“žFOįM{e³†ćĪĢtźA§'- „8Gč»2wc„Co\ŹIi‰Ę}MW;6¦Ķ­6źź#!ŒIV+»Öæe’ą’Ÿ“®«š’ā4 g{KKmFG»Óeø˜ŽI=Ū'§5'£Mō?²/‚cń YépJ~Ń™į9受ŠūRŽę  ¶ćpĻNõŒ£cFŒčŽ|-Æx#ÄZuµĪ¬Ū½…čeĆ)POoā?™Æó®’‚’~Éz—ģ§ūGx×Ćvŗ-Ī•įǽ"ÕĖW…a&OAȬś™)3ąH.>Čę¶Å“œę½ĆZōVqwjGŚ–SĪ’®¹ėŅoCES©ėžųµØ‹IwŚL†_”¬ƒ-ü«Š|+ćqwØoø!h¹N›±Ī>¼W‰S ©«›hōoüY·Ö5¶³øqkv“UPqŒœgߌצž“žÜx¤¶Ešļa`sŌwõāŗp“¹^¦5é›lDÉ"̉ ˆœ“Į®Nb‘Ż ®$ŻÆ¢ xõ£bŌ·Ö”į’Ü)]¢µµ+ė[ˆ¼ Ō€9ī+¾·3ķ-m @Ąld!{`ū×'ØY„“,Ē“ČŪĪŚeA˜2?šäH<ĀyÉėTęV1øTēš±””¤kO˜T–9ĀątĒ„tŽ®—O,Bģ`œõ`{šŸhm ]‹ČŚ=ė¹F8ī+:śóģwRDķ™w`t§\‰Œ»¼–īݘH3ŽAö®cOŌäŽäĀē<ATc'cŠ4żBvGj m<ķSI @3;É!ĻĢ:ScoO¶å)•ŚHźk+Åöv±C=„¹ŠkŸ0_ᤠG£é öŽ}źČ" 8qüė*ćAtfŒ2)'§CL£¢šūŪisÉqzH€ (õ>Õėśeå¶£EȌ1j«3DŅ8æŪA”¦”mŌö÷¬Iņ‰ČŪžq^?eØ]X\«aēø`H%³Ž}ėT‰”—CŃķ¢¼¼Ģó[3†Lœō©¦h—Ó]!„¢Yą–õ'Ūõ­ ŽyXŪ¹šĢ2™#pė>É=½rw:pÓ5°øxĶĮz}é“ -Š> ŽK@!„—ŁŽąšĒŃÆ§K–`»Xqģ*#-%©ŚXėsy“ĘÖß.Ž ž*Ī»y/n%…Æ#|²v¹ą`g~Õ2w$‡u;{KVµøI$ņÉ {~5ŪiS“$RŚ2É3’¢!Ö±”žĮs™× h·VŠ]ŽŚÅ!²—$}7{ƼŅßJ[5$hŌ€$äÖ2fЉ¶…Qxxź+¤Ó“d¬ «uĒ­EģmģՍ FŃfŌ’óWo6(Cņ?ķōŃ5††mÕĪŁ‘Ļzµ&C¦‘‡ć/ čž øäĶŌm7–Ūå@O_„tZV™c%¶Ų¼‡³`OŹqõ­‹g7¤:KĢØ Ū³€[„yÕģr\_ČėmĪ9gÖ§™t–-n‰×÷½ Ējģb‚ĘYRiž)ŁqĻ\J›ź]ō5˜ˆsåŖÅnܐr·éGQ·øŗÆ-ŃĆĪ2i"“f7ˆž÷Q¹I4Ųü‹e2sµsÓņ®¶ é~$ŅŽŅüÜÅ>7†G+’+dN ; …€Ć%bŲzWžxĖF[(”–'(²²õŹ¢rčTby¼W>g– ]ŁåxéW‰Š óĄļį±Ž°“ŠŃA‡¤F¼”I±FGŠģ5˜ģļl…­½ĄTŻ’1ʚĪ.Ɗ™_x A9¼Ś%²Į‹J½m dŌ¬C«¾˜ą­n>^‡²ųcÄE¢]Ś™Ę üg ą×ˆ]k)©]]Éjƒav'qļšb궆ćųÆP¹ŃWJŠDƒŹa#q’Hōüė‹ÖŪQפk›«‡’E\|Üę™ŸbmKK°H 2ä¹…µßhśE’ω@n~ųćŠD…ut"ŅžÖ62¤œä¬#Ņ µ˜Ļm7Ū‹¤żÜsœž”’ƵK(ļō©¬1±AøžµęZn‡&©Ŗ[ĄŪcł³óœb¶¦Č™GÄq˱{h·)"Ä˵T}Śčō¤¶øŽ›ŻŌd㊳Ó,K°YRŽę(Iä€9Ļ|×Cįļh¶vRBš@īņ˜U›¹Éł¬e¹ŃLćž'Śx–ŅĘŅ(mžūO’]č!'t śĀ¼ž}/X²Óģõ Ø%··ąņAéRkŹĪćL‘n<=fŠī“!Żŗ½Y¼±×§Ņę½ŅcóŅŪē_oĒģŁĪi2j7˰‰F`ĢpE^d¹‘¦vy› –>”Éc3RŠlnuy<ćę^ĄV.ŗ‰¦µ²ŪČņ±ēӊM 3SĀWŚž¤ę^ź“čŗžä•Z;M…ŸęU\=)s"ļgūe½µ…–`÷‡t×¢5„«XFÆŪ‘ÉōFR—SĢ®¬nŸPxĆeHž!WIæk{©¾ąU'ä‘K”ĻŸ±ąI£Cp—Ļ$»ÉĒ•=Ą­={^±ŗ’ÓQ‘·ŖūՈäf‡ĶŠē®õ»ėĖYČr°ī/“¦±ģõyf·ŽŽåDsgבG‘¢5ą“’ęę·*$ČÉĻZꢹ1DöŹįeu qE]BóPµ±X­f(²›½W<%z‰u4:’Ÿ-ćm¤ß1śā‚ćXÕn vąMo²M£Œ‰µs°Ż¬ĢŖą¹ž5ĪY†××VW±]Ś[Å##‡ŚFFsVōĖŪ««Én&U‰œ“ŽŁ4=w@Ž2®nŠ;ŗģ8\’:ŠūĆZ[}®h't”|ĮqŌw f(ß ˆ•U}¹=ėŅīÖ{5¹š%–h@ĪqAg›jqOqus {<Ɣ ½{ÓmōÉę1‘ īĻZYy?t~4ėF‘usgy¤js®ŲKIČ!SŌžB¼łš K‰"W¢’ Ž†šʗŖ­¶”\ĘŽK)ŪĒšķ£“€Ne‰qž Ņ( Ø!ūK*d Ļė\÷Ä ’jéŃŻGy)ŗˆńŽ P?•>]ČŠ?“d³µH„— qҽ7WŌ-lģFžHPc š D·ƞĪęėZņ„Å’OįĻ\W£Ė Üé¶oØÄ?Ņvm'ØØ/Ł’č^5ŽĘ]B䣫r˜ź}ćUu?† ļČH,ry9©“)C¹‰ŗ“×r\tĶzÅŹ¾”M H‡Ź Œ{SO „ ć ¶”¦Lm®†ÄŒ¾Ż¹Årš^·”ŚsO¤³³łŌäõ«Xš šŻ×‡¦Ō¬§xo¦i\“‡rsĮŖ2źķåž®—ś*i±Fʐɘ½3ßėėZ—„Ń,-dŠin% ŀ'§9Ēė]]æ‡moī®&{h”e“®Gó¬„#H­lqāóžķDŁĄf\‘‘ĮÕi:£Žiä,ć·aY²łRZ›:ÕÜŅYÅ—ŻóścÖ“ü97‘ē‹ˆ”Ÿ+’v±ZčyoŒėė§^ŚÉźü:)ä}EņĒ&š³C2„qšćõ6¼–×6«±l>:ÓH‰FĒ/£\Žéś±Žļ# œ;g„v7#ķ \Ė”B2^Ä3wŅ'Ź;ŒŌ;©36ĄO=°*:›V:„÷‘Ł}„xĀ”'‰ÆS·fŠ;yn 3/ńéA¶fˆÆb %.7’ĻzēRåķą™£Ž9^^@¤k.öyD{2?B ė]W†Ł•aņFĮū¦›Ž"šŪG²šTf–fS°5å~ šRĶ6«Ø¬r,‡ĢŸ'ÉēéM2‘ÆāoA¼šk;+x§Ś‚4'ų<ćŸj©£O (ģŠ€)ßŅ›o©|Čn®öyūK$Øē'­gIsŽmīPć•ōØŌ™4^·ŃāÕŹ–UŚsõȬ»-* Y’Ńl’KWū¹$Ü“ŸŅ™ŒŒ­NūBc0BĪsøcJmތļo „X©8ĒØõ«Œģdkéš2}€RSéŅ ¾šėM,o żŅœ¶{Š%!ŲŅŽŁ BČvń­IS^+Ī"Ł.8ĻzØÄEżZ-m|$m“›xdŌR@dvąķć’ÆYŚ~—«^i)éw(ēœüÕ|ŗÕA”$zYk†C(<ēŒćbŌ!ē³OĮ8+Ī>•…Ej2Źw½ŠBƒĢ JÜGz¢ŗĻömɅw0códö£”¾Q?µ£Ō'gŒ‚6Ā}«wOŃąÕY‘åÜzŠ“YŌ?…ō‹Kq1»Žµ -ԟJɟR†ŪR±Ń£¶1¬Ń“žŲĻ󠚎ŅāO$$€šp?Jåž(hwņYhqŚÅnöÓDĶ*·LdŒų •ō8»Ÿ_XĆc'ŁāµkˆÄ‘ąć# ā¹’xs_ŠLR^[8\€$ĻŹ3Į |”¦]jšÄoØHĘ2O źåš7dXŌó€=($–īf·0¢"ž*ē§µŅļīYITģrOQYµ ķ„ŚCņĀĀX€Ū•¢ÓO[w„•&Ć$Œē š=RÖ¬ķ4Béø(AGl zå_?ų‹_¼Õ.„04qHŒGҦ]ŠE+–ŗÕ ÖP†½*"Ėzś×֚MĘƧé³’¤K Q’]ea6Z’ŚÖÖ+’¶N°Ēläüäv|Ґ]k—­ö¦Kkq+ąī#7ҵåŠĖ›SŃ'žļKŅ=:ųŻ.asü«Ē/-/®.¼ūāé!ł‚1ɬ“:ķĮ˜)p8Ēa_GųkÅPéZÖ© RĀˉž¾ųõ‹”{>­­Ą×Im¹dƒ×½s:cx’łvjæŁķ;²ķłe }އšŅ20p2¢–×ĆWöQĪęöāb@\q<žUæpא‡¶ˆ¬łąÖ“N2{ū«XD“G—Ļ#ŗÅMbĘŁ.t'^¬»tłcĒ\Ōøš6jĮć}BW»½uk–rĶ»1õüźµõć”…āŒ3»ųžw¶¦­ž“"]‹į ĪF+Ķ®ZšKo1¾Š ÆŖ ¹±„źrź×VZEąl”Ā^}ł®ā™ļQ˜Ēż–œĒęVśP–‘¶¼–Q’TcŠó{/A4‹0ó;±‘ó bHļōKG†;ˆ ˆĒ$¶2GćSjś ŃōÆ]KĒ(c l~i<ą ¾‡”ß6Æ«Gi%¤- × ’w<ńōÆZ³Ō¬tŌ·†pÆ7’3į8ļLgžĖ1QŌ§ŠīEk‚<Ó#’ vƟņž5Āx7Ä~Okž'ÖtŪīĶ™Ū#&Z&9łÅ{‹µłn|=¦j¶3 Ł%·?u}Oį\o€lō½cMŌo­õ6–čĖ»f “ŪÓ”ōšÜחvQ˰”;C0åOµz\ž¼D²µŗhn#Œ|›Žv «…Æ”ĖxēIwņō«ā·2ĘÓų±ŽF>œWĖŗŸ†üSāyõU¦“ģJ"é“€8Įœu¤ ™åžšōc^ÕąŌ¾ÓnFf;c9Ęē\-Żęƒ¦_.œś„V s+aX}ęäōüéČĪĻĀÖzTWÉqŃĪĄ"ą•#œwę°>.ė^Ń TK¦ŗŌŠ$Œ»pct©Åc+ܛ2鶍Ž£|÷W.cˆ°ĄoJļnļ-;{Q~¢f?»Py Rå&DÓŲ_*G~/-Žž YcČ$ńTmB[“VȊćęuć,{šµ+hf?kp[k7Zm­¢}…QŲĢĒ#„}'ąécĆŚžŸ¬Ėio;Ü #•2`dmś–īmÜįuxµ-JęāÕr3]¼m^ߍW>Õ4kRśšō™<‘ŸnōćøŲ½k{o6”Ś›„ĀF££$ēų×Ėž7ŸÄŗö£i=ȳ¶iüđq¼Ē“Q°ćęyõüw±lyķ¦u#å˜cįūĒÓÜĮ˜G, į>”ĀMłį6ńg°Ō.&™A\ī'‡øÆKŌo5DG’Ń­+Ź/ON’փ)[©ēŚƒįß]6Æ2^y% ¹īOå^Ż”xI×<;©ŚŚBm`bv“rgŹ> ~4\hć'ųik£Auö©ē’W”v—ē^\֗–ŅŻĆT¶‘¶Ė¹ģĘ fęoꧤčšv˜nį½·¼¹xÉtWĮˆūēńÆ Ņücā]ćQ¹Š/ÖyQ£.r§µfj {/†>&k–‘ŖųźŅīGWŚ“ø,ś`pzĻü,-;Q {„›fŹŽ»[’ÕLĘpźK„|G»ńU¾«¦ŪŲ&Ÿ"Źb78l“Į>•ēöW-qurž0dŽŖśŸzŚ$Zۜ?‰į“Óķõ©ü;q$–Ž„[ČSpbOŚøļ ųÅŚžŸm®O Ż¼3“qĒ{Sg­“ņŚŚ½ģ®wD3¹‡§§åW¼1cc$²x–y&ŗ¹»Ū31?{#ōؖˆę#ńF»NmŲSüėÄē—Nµæ.Ą+1ééōØrčTNŅ×U²ŸLŽ!"I3’9ǽkĒ&•ŖéęDdįŽéwķÖ¤n,ō?_&©my§X^Äa¤l‚zĘńv„ąż:Ņņ-YdÕnœņŪqŌÓDØ»žS7‰¼'ā¤:6{£Ē Š Ī7m=׳įkXn5« •(Šņ¹#5¤eÜŃ]n{ŚĮ4Ÿģ›+qØ_:™7*ät\גxįī©yv5-R;kWS’ĢźK}{ÓRī_“±éZ½“·ś Č,ōø lG|öĄėĶy½ž£bö3ŲȎeg28 ޟ7B]C›¹ŅķÖĶDxyKg‘Ņ™¦ßjĢmfŽD†"īfM”uĖ;;˧P«±žčėšŚųiąķ?Ćz…߉ꎎKŒģ…$ĪqÜ2*\š“;Ⱦ)jĪZĒIqelŹp0=qŠóÆ_Ų¦©g©źŗuÖ­"± ·¹ü½esTĶ xŖÓRtIōł4į!Į¹ąV·Žf“Õō;é`xīµ-äŚĀ ćØŖć.„¹4ģgų#ą­¼š¦­āØ£{©Ō:†ęP:ńłÓÆü'„ŚŻ“ŚrD-ćlFøĆzÕó"$ČīD’H³° q–ÉąOŅøżNĘfyé$wĪņĻJĔŠĻ­Ē¦YI!{sĄõ®ÆĆšž½®Kk ½Ķ¬j‡s§ŲQö)hz“š‡‰¼kq©ŲŪ’m\Ę»‚øąßšž•å:ÄÄń‰!Óu«—“™›{1'“܏­S¦icwā?ÅtæhžŃ^;ŪHv‰ī#ū¬OLŸĒō®Žm;Gšżv[ˆ.īc¶ķžSŪ'ÜŌņXJ,łŗ«+uG¼Ō§»ĖM×|ā]jź5Ń­ęŽŪy<ņ~ƒóÆ)ń…|SįŪ=£“óodxĄłĮć“é]&ŖHĻš­Ę§­ßĆm«µĢö–ń„”±ļżŃšśŹĮ &‚[*į{{V3Ž”Ģķ$LV±Čł8d ‘Ļ„|»ń9ļģž k:|šL¶6ŪA‰ä<8öėI!•<7į!¬F·WQø$y‹ĆW}mįoĆŚ|ļ¤_%Ŗ¤›‘ Ļ$äńWŹ­Ø\ó­/VńŸ}} ŻćMęHĢŹŽ±śVåŌņK’4uBvķõ©q×C]:z^›§iÖ×2ŽĄģ‹ņärI„¹×ģ!‚Ś•RTČvQŽżĶ¬‡äT¶Ö/-i$×AĪTc?€ÆS“Ęz‡“Ų@‚4»ņ•¤EłˆśT™É3Ć{üIŖM=Ā•ŒĮYĻߊÜń`śŖŚ}‰m–EĖF ų֔ūė©—āļ‡ŸŪz;é–QEk~TyOÕAĒS_-·ƒ7Y§Œ€ųź¾Ę¤«t#±Õf·Śņ”8a•ģ+Õ$ńLjmGšÅʰ€tNµŒ–¦mXoöEŲ€\ĖÕĘŠĆ«Væ‡-žĶع½–§`ī·oéJěóß:»°tVć‘ļMōIfŹÜ—'Ƶś™mā#Ӕ2®õĻŽśÖ]·Œ4­-ĒśCĮ(~‡qź*dŠŠ¾†ķę¬oā3Ų“ ¹‡zĄ} Ó\cq«¾ŪHļĒzT.åņv1,~!č:DcM±Iby_Ė×…#=W¬8³mŚ]VU¹…Ą'ÉóŽā·„Hq<¼awŖ\®ž”‰Ś›y99ĶA&…‚ϼānŲcŚ­Łåa‰„C«å™§,O\Œ3^…o)ø³·y\ll©¹śVÉÜsZzŒH—Sy“Ŗąu¬Łźh%iPļ HķZĄÄāb½¼K LŽr=”ÆAŃ„ŠRŃŽHĄŽOÉĻҜ£Ųl֒dµvŽŃ<é1œ(굆‰®’aÜ]Ģė&łJłIĮE#ŒqĻJŽVRƒ3,l/eē©WQ„sĒł°é÷Ŗ^F,‘±Ą 8©4Q±oF‹K}a¦ņ­¤Ō`ŚŪĮåÖ½·Nź÷)foD0±RóHrzśš„īˊgć_ķY5“*ŁF­&GŽ qœJĮŠāŅō«Hd…]ę ±g±«76mµxŚś6iw2ƒĪÖĶy7ˆä0] £!› æ½Uś#)K”ƒn×7p¹¹+‡¦:RŪxBēQtŒ“Ķ4§hĀąYKĢĢæŸZ“pł+!ĖnLīė]6³ą+Æ X1{Ō–ń@š@±ŠG¶EF‚qG™iZ”§XžćRšåBĒ·mzT:eÕØ2Ŗõč_ÜUĘ]jšh}ķcāĖY`ŽšdŸƒ·9ĒÖ»]/Xę11#ü>õÖzю§Śß²ĒķāOŁßćg‚>'i‹éŠŲ]Bo¤RBŻŪÄą{wÆō šÄ |]ųį_‰>–)ō}^Ķ'ł9 )©=:ēõ¬¤_+±_S‰",čøląń_3üNšŖ]Eu7”ƒ?¼GŪŌ’vˆna-ĶO‹Ž‹\±Õ4›ż2ŚöŽā7UINIŽĘæ“_Śį³šāÆo©CršmäņMÄDÄä†>ž•²F Ÿ"ĪčĄ :uÆz«"*•FBéøō5~ĢęØĒ¤"8™cĶ›¶@?żu˜Ū£0Ķ˜Wˆ=éņå伎bń‰>Rp¤AØs"†Ā·§ĢyśŠN,ڔǔJ²ąƒŚ« f2V11'‘Ś„£ZEøbkb³:Ėķüā}cĀ~%Ń|E”ÜĮig0hä˜|±(É'ō ō©HžĻąæ“&“ńGį߃üs¦ŽŁ½ģ°Ē-ĆE8ĩƦ:ņq_½žÕķ5±K»¬ī̌ō»ŠŠ‘:,u,7Ėn@ū$„«Źkńsž 5ū ÉūL| Ō¼oį}9gų—įHKp/,Ļ'~>šIü­`a#ų=ÕmSLÕ.<=vѼöģŃÉ,*Ė8Ā“ĻONŗŠÕÜĒ…fĒ=ń’ź§P˘fflÜĶvnL…f~’ø®÷AŌ­Łžha8%‡Oé^mH›Āzhuž3¦ØóYŪĶo$¬Nø;ˆÆ­¾üM¹Ń5«;Ä7׫nJ¦$  ąuļĪx¢”u.¤¤īåķWW:}ė]¤ |ģNŅ =+>ķŅ|Ī_ōҽjO”ęÖՌ„ż¦TV*”éĒ5ŠMgVģdø+*ōćŒW”Oc‚q0`–FVQ3äҰ5Ł„»2€zZ³ō£Oo,N.<ǐ·ž~•ŅMįŌ¾°7QH‰óŚĒę"†‹LäfÓžÄä‘'VēźÅ©ŸQ2Hš¶õ;AĒ\W9±ŁčöĶl@ddœōVō“³“Ø ·9Ē5Q܉#0MpŽ6Ęc‡¾}i‘OœĒ!Ł)!zzšŲŹĒ²čš]«<`M“`rā³õxRŽūʆäoRN:‚}(%ķ”0y!ū?š²|ĶĘĮŒV˜°&į䔑Ē.ܒ)¤d^³‚Āq6Ÿ232zpEr?l‚[éģä !ĀóŅ“Œl>fekZlpł^\ž|;²xĘ*{MCģh‰…s×½XłŠ÷ķ=żÄ—7ˆīģ2X¶r+-5MźŹīˆ£ •Ēk‘]ˬ“1#Cd²žNJ’lĪ–;kkū‹5&ŹGS¹Š|ƎŽōžū}”±¬3É<° fł›ĻåXIX„ęcų·SkķJk™ć_“1Ėø¬˜®Ń¬ZßtŪ†Ł3ŹŽxō5%$mh:Ųą˜\LdšOēµĖöšģ“tKČĒ ×B _Ó5k­BÖ-$[–u'iącéłV-æˆõKd-ѐDŒ©>ž•QvģŅx’zŅŚŲAĖqĶqž?±žŚ /³Ŗłnīyµ!©]ģ®–ždØÄcqī+µYäŅm̌æhČŚFÜņ;⑬&TÓ/®ī–gŽ<£Č,0Twā½CĆ3éžĘ£Øxó–ĒUŌŁĆėž5ƒ]žQs $róą÷ļV4żŽŻtėƒvÜ+c ;™øuq=Ūŗ·"?¼Ą½S)·cēĢ1ģԌŒ9u8„óAUÜ:Q¦]JÉ+ķa°Ī;šŽæń%ב͹C€ß/oOåVt•²æQpĢž¤ōü)§aÜģlNˆ¶³dŸ“ļWow9®£Jm:ļtŖŠCäÆĻČ“Zs¢”™»yØéŠŁ­“70“L gÓńÆÖ%]VõJČ (Ē#JšØŹQ3“ÉīZīaä;6ƒŒ ×yå>ČRu–Ü ßĒ!æĪiŲĘögd"ó¼Č±Ś°õˆ­įµøtž/3 *’½7ć+’ųOĀ×ŗ­”×_kX-UNŽr\Ö-–žÖ:¢H«ę“lTē½ £ ǚ~Ķa5Gŗ5Q€GҳtK»;k±Är¼²tǰ£™™ŗeķ^wŗµņģIŽq(Īr8Čļ]—ƒōKĶGG:‰[•‚_;ižēõ5›š5Š>ŽŸ_ŃÕŅ š†ŁČ Ū*=Exߋ-tĶ^9ģ-§G]‚qÓ=ņØs7ƒ¦*ż¤²KŖż“ĢÅŹ1£Īr+e~¦sfū<\\³$‘žyé^q­Ź·w‘µ©y£Ę7ŽƒV1ęŌōƅŗ|pæŚX¦i ŽX{×_ćÆ6ć°¤*ŠĘBr½1Hˆ¼5ŖÅŖ]żŠŹ7Ró2B ü½øü .Æāė›ŲųjŽ%œń3pŚÉ #Ƶ¹\źļ­’²Ź_H‚iŚ=s]–—»ÓooŪĘŃĮ#üŲĀž)‚Ļ’®u)umE,…¼FGBī FjĢV·óÜŁ¤¶ŅĆŒīaĘ)Xč.tÉŚ4†Ī58ūĞŸ.‡o,±u\“ļéA\¬ÆgØ÷ŃO§FZ5ć õ«>!¾µ·Ō£‚Ū)Œ;•änć žt «–ŅīźēLo1±^ĶvPißd–Öäy8¬å̬sž#†%ĮF]½qļ\%”vēĻ•ĘT õ¬Ķyżā ®_Ģ· $g”Ó]čPŪ¢ÜŚĮ$’nķé@Ķ“Ō`ŅģVwܬ̧­U¶Öæ“õ6±fõįÉąŠĒčg÷&-Ū—8­æjkŪøęqåɜäš08ćš¢ąz–‘£Ėiq})„*§g>ø®z[Ż.ŹģMdŪŁFĄł©s!”µa„ÜŁ,ҁo4·ćwø® SŸO°½ŠÓόøläŃĢ‚Å;*ög™ć*U~3Ī*„ƒÜ[Ck1UU'õŠhŽøŗp!(ĻaZ)vw:e“7ņƔūŠBÕŻBĻĢŽD2+U©÷ČŚčßds*’ąą ĶĒą+7^cCwq"Ć,p2qżj°¶–]ONÕtåŽ{„nq†ĮĮČ…u/ā{¤æ‡Ok$¹…˜ł›ŗ-&k'[k½j#mi ¼{@"?ŗ8¢×B’žāŠ$ź#ˌœÖ7īY&«,VĪ£Utć8ĮćŚ¹Łµ-XÜĮ«ŪLG’ĆpŪ’~Ÿ•k§iŗäļC<ĶĖņČ}GqŠóĻ$W>!ÓltūBtčĆH.1‚\vżM4ȔOQšÄŗ¢Ī$I7Bž[RĒ”ļ]Åׇō­6į ėõŖę2&M i-ĖŖÄä󞇹®ŹKōņ‚BŖv(U uÅ&4y߈,må‚źķą¦ĄsPųaŲKĒĖ`ų¬¤j͘,ļ?“bƒŚ`ĄŽ3Ūś×ć߯i×ÖZ^‡g?ŁdoßČ ä~u˜ŌN?X¹ūi¶Ž¦1·†#ÉŚźq¶Ølät2ņh5ō‰cišÜI$$„1ž~µŻ“+öø†XW ž:żh-»«×„tVw0ŲZĘ$··īmÜcøÅ ;½Åģ·y}µ[\Ł8ø„a¤#;O$Š[$źÖØ÷Č%`Aé÷H¬‹«ųlķ\ٶŌä{0§`<ŽŪĖiäø 2äŸ÷j÷öÜ2Oo ĖpČ]› ō­œz—:ƒŽZŪYĶG2’ a÷č [}3ģŠ[Į °üzu¬Ü \ÆųH-ō"HćOµG=øėXzˆ¼‰%žöHī„gfÜĆīŒš?Š€Œn]ń6”e© >+hķž\ī'ėU±²¼‹¹ć=k9K±Æ³¶äšµ ¼Ÿ½>j9ĘĀx5ŌČa>ĄN~\’iĘWŠv­Ś[Yhbź/!n˜óǽfųϹu¼M¼o‡÷ś Ž ŹHźī5-: „·¹œõ­}:ŽĖNÓ®DL¤ļ-·<ä’śź¹Šr3Ė|Gā+‹[ۈbY|“…Ęį×ČĄ¶bž ’¾ŚS±×’ÕQĪh£c¢–Ł“Ør¬æē’Ū–šˆ[„$ĒĄķķIČfņŪiÓŪéķ¤™i>iŽ>U$öü+©HNE¼Ī󢏘 C*]ÉyØė&įVH„œ±ē>µ«ā}%tŪčoą½·kä‹×Ó4&#*?Å ŅéKėuĆ3ŗEG'Œ-õ)n,®Śt;zƒųÕ)³XĒØ¦žšäy$”ĘPĒ!@ķ\櫨ɪ}Bc ߝ„°č+K’™RI!I)n«w_zM*ā{Ÿ³¾WÉĻĢHå±éY]ŽŻ»Y¶óōµ’Ä,·F@…s‚«Ē?Ļņ¬ _ Ķ ¹šk…rO8#Üҁ¹„i„Ų gƒ9ĮėWo”xbhƒąGlŠÖś­kw 6Kx\C;·:†ĘĄŌš‚²źhŅ[¢ĖĄV|b²¹¤bŽŪJš¬1ź³Ė$Œƒ;‡ššźōŲé:µĶ¤ȳ"bPĄœ}>“†ąqڿī=rźēIÓĻ›‘)Į÷ŹŪI=òƤoœ•ą{U+˜ŗkcwJ½Ž[©mQĖČ9n:ņ*γ¦[]2Ė]ź˜cŽō˜ĒhŚe€žŽ-JCMŒ‘ÕjҬŚbO5nŖ6ģ†Šęč6)”¼³k„`²ƒ“ßéShŠš\0¹`GšÜÕØ’K«ųV{Ėėm\Ü¢(ČUP23źk¤Ņü=e>˜XݧŪOŗW–õéZ‰FĘFÆį›-Č÷VмDd 5…«x+E¼Ņéę5U>w±ĻoҘ¤xžÆ ¦©j­å·qĪIõŖŗ~­|÷6¶ń ŖøŒī\ęƒ#Ū"’žX)`H®Ł»ŪĒZįSĄśœ²]ÉwqoøJHĆvŽõŒ‘¬6;MĀö6SCbĀ[ž|Ī9ÓA¦Ēu:ŪÉ9EcėŠ‚Ź^*M?Cs¢ŚĶm %dt==AÆ>-“ó!€”Įäsé@ö/³s=儺«µ¤ŚŅōŠ£šHķ|Ųå īQ؃ÜPLWs"ŚĢ„“MʬW{d}Š+Œ—ÅŚ(ŌP]L…Ÿä}h)#Īž#[ŽÉŖC{sż•:„ą|”RxśŠÓŌ¦Õļ,lĢČ%{XDQ²¦2£„h”ÜGŸxv-wķ“]Ü ×/#ž7qśb½bćH¼ø•.īn-ŽŌĒ·ÉŪ““ÜžŸ…h;1ńƒĄözf‚ś½ĘłµbŻioß7„|õ{¢j:F‹¦jq¦Vł•ś ĻõØnčŻ#·šķÉŌģ`vh|²Ćnī¼×is§E*½ŸņåøĻ­f6bx’įźx?Äv6‘jÖ×Ó½¢=÷–A)!ä.G 5‡„JgiāpBŽyżjX‹ŗĢ¶ėĂk‰‘¾Mƒšģ~>­s!›ODŠŚ €‘Ÿų׌YKp>¶±Õā¹°[yīŅ “į@Æń}Ī“}5ÜW‘ß*ĖäīŒšĄMHģ`ŪhɦohŗÉ‡bFNqR6Ÿ§^]Å6”\Ŗ»\ghõėt_ xvóUžłÖ(̌ē(1‘Ēį\ߋ4{-^÷K±µ–Źó !Ś8åŗf€<+Ē—æŪfEµ½hįf\¢Ž+ŒŅōy4čŽiTø”łe±Ī8 N²ń=ž‡£Ad,’µe{VŻ’,\„ųYuį]}GOó"·ø‘ųRŲŲŁ¾‚ŲūĆv:#Ē šž˜°c*XÕÆ^^Ūi—Ųš„ά°Ÿ&< Ē“eE÷<‹I²ÖYt†ń|MfC‰[ <×M­čz>3ŪQϽ qĒėSĢkt|·¬|<:l÷·BC<×ly<PxJų7⿃o<9ćyµ+Ūļ>̌Ɣ’w3ƒė×õ¦¤sš»VµÕ<ūū į•ķ#¶zŲ귊¾[ųŸ_¾ńV„«O6”,Ÿ(‘¾H—üµ×Qs#Ęįψ¦Ōµ),lŅūI·ŚÄ“€FkT³ui§žgˆ‘CĘI'žøéH¾w±õĆ(ŪāG‚t™õ+±é%ŽŽå…ŽGFaźkČž,źö~æƒLÓnS(…gૃЊk²0”ŗ|9Ŗ=…œ¤ńDņ‘$€õĻē]Ūj¶:“‚ŁZ4ø•v·`cšŁÉčPŸ@Sö*Īõ#ÓŅd' ‘"ē•ē¦}kŪ¼ršĻ…#°šĘ•oe†āFH÷ļLŹ÷>r_ŽĖmeø/”X±ŒcÓÖ»+ųn$ƒ@‚3-ņ.WĖĮühhj“8}fūB$v›gRL›†0*Ž› ZėS¼™lmĒŹdĒ_„.TZ‹>)šĀG¦$ZsO#e_{c#Ōb¼’FŃīģķN0xa™‹2–,©ŸÆćG*5RG„xb+/ ĮuµŪ-Ģ£ P}ütĻé^QÆų[Ş&Ö®n,g½¼‡ę’UĻ *N&—F-¬’fĪ›$€Ä§.£Œµ{÷ĆŻWG¾ø·d±o>$)"–źĆų«"%#Ū¬Ś{›į3Y,‡#Ź ~ńƟ|kćżOBń…ō°é§MŃ!łvŹNL™ēŌ%sŸuŸÅ ÆjLšÖm'^>7g¦F+„½š×ö„‘ø…’vN|ČśĘh¢KM;Ćo{A·Ķ1ʼnްÆōi¾×˜ī ąńZ»’y§Šu™ü=²śZĆhEe?9cžErzό忶:pha óri6k|7Ŗ>•"Ą4뉕›ę,ĂO½z®©kq‘-ēŗ*H~ąĒjÉ+ƒZžuŖėZ Ž{ (BÄä;’Q‘Įüiž¼ų…¦jKŖčĆķ‘$l<¹"¬=I«öeŲūJń,Ž&š%¶µvO¼ŠJ”ē8;TŽk=;˵3…“†,½óK9N+ā.ƒ9Ńī šśĖ=Ć¦ŅątlWĖz‡†<_cq O¦\Čæ>Ć“ž’Ź—³60ŠņŹŹüØ Ćļsļōƈ>)xwOŅ"Ńļ4ł!†06ģÉŚĖõ„(82ž“6NžsĘ@Üåx,n•Żų~įn$6źe\.Ē{Ō4M«ėi"Œ Xw¹ž5Tv3;”–rČ c”¬u~,ńtóxuå‹Sø’é×k *¦k–ųmŖė1^˜ķüÕWĮ•—”µ¤V‚qFµå÷ˆ”ÕĢ©ØÜ‹q_( ƒŌ×yį­~öźXć¼bŒ¹ßVg%by|q¬?ˆuKhōå]8HO%IļVÆ4’“„9ßøęD<ņ})ܓ˵x“ß Ou<°­£3}м¹®ĆAÕ ŌķÖMźIłvŒpiJ]Yp=&Õæ²# ›ČvĮW' Zą.ü/oń2óP“SŠasnūD²oĮtžµ*””ŠMš“Äz<Ó^ŹńĻ¢©g°[ā«ĻW^…ę¹€ˆ'Žh™ ļUr“fÜcš¬eøö=ÆĆś…†‹cs ń”ŠHö6ŽĒ9®3Pńnœ.žŃd‰Ģ€‚„ńXÅ;Xn] o ZĻŖEV±Ļ,”Pz{Šėõ 5k “²¶{£Łć#Śŗ!.†nF¦‚ךIØ_C6«ŒĢOŻ?Ż>żxƔ¾(ųĖQ×õ¹ ³»óōų[ŹES° Éć©„%© •įOj7zMŖŪA ųÉį%‚ÖcīY#bõ _ƒ·'Į;očÓ¾™=ÅŚĀī¢3µ·Ø8ü+XČęlžu%·ea ÖņZß Ū,nFQ‡ }+2]Ė)LøĪ}kU+ča/"›±•¤H¾iGNp(x€…Yß, äć#éGC›”mæŁį5ÆJ&ó'vpBąćŽõvī2¼“Éj£ęcøķ9Sį–YUœ’ ąē­¦ōŚ$[‘&×/ŗ#śڊd„©š čŲĒj—¶œģ~ Į7h›†?ĒĆ»ĖĖĀŚĮAbĪŪ ½Ą ģōÉĮÆķĻö{ń$÷ś ½¬įŹQsm¹łFxcÜQQ|čśęŚHµ}$\/ß ƒź¬+54½?S’[ Rk.ņ°æIP2¼.0r=ŗžŹĢä–ēšI’~żuŁGö„ń|Zo…ībų{ØÜ}§C–5żŌ‚C¹—wŖōǵ~B\¬ĖĮ¢ūųSÖ„źŒģkųbÖ÷^b…d‘.+čļ |+ŌŪLI ģvŽ\kņ3'·µyø¬Da¾ę”ā}[ą_iVZ j3"‹Üģ`FBZę>"éŠčWWķUµ€¤Ė.ĶŁGŪł×›KzÉt4tŪ=»Į¾*‡[Ņķ£ó”ED·B3ź+µ±„Ē,ĮgB_!‡A_Y 2i—q8xŹŖnīz×M%Ź\ĬÅcO»ĻńWm3‘œ£lēb„-ĘG UnädYČł€ČīÖ§<—CŽ%ŠF0³Ļē]M¦©)’E.įWī©>ŌÜĻgøø™Š’§#µ:ÖgÓŌĢ U\ę¢Q:#±ŠŲjis!}ŠÄ‚ź+ØžŹ°[E–Ł™š ŌņŽĘCŚ@Æ%¬„,™Ę ę¹ö“' Ö;bܐj•ˆ’źtÖś­Ż²²qääm cuuZmŖ\Ź·Nć_œ¾s¶ƒ.S[\Õmu)ķa‹ČEL.`š:ž”Ė×HÖ†dĮ\ćpŹżi¦_³ŠĆKŲĶ첇g¹įXÆĶźv× x·Ė÷ äśÖŃŲĘ¢±”,>}’6>h\‘žõƒ/ 4ÆĘīS0Öö7låŽKvó\(^=«ÄekHģ£y%[ÜÓV„6–73DH’%É?tóƒL3\E¾ÖādhĮćŽō'a›V“2©<%qóŅØ_Ż=“-j¬›O_z®n€r:d/ö¶‘ćI]Ž9 ķeѦp‰ĄŠ%Ž(”€›ĀzLøĄ'ų«•m>K]eģHĮž*Ī(ø²;˜.&‚!ŒI½²­VŅō-E.n“bo³ē ēō"¶4³6¢°‰K}˜ynaҟo£ŪŻĻūõĢSĶNĘRÜÕ¹Ó!²™V0ź‡ž:TW¶-©Ś,Kq/ŽÆ”õ¦¢Iæ¤h‡*dä ņ¶{ć½KrńZŽĮ C#Ÿ˜‚Ö“ä);ö}ÖøŃŪ§—nŒ‘ŽG„zn«Œ+L¦Kp¹;OSŽ•<…óž?Ł5“¼†Ö6ķœ#ŸĪ·ģ484Ė;Yo›¹Ļ$V–3¹­6«sŲŃ"ŽMœŽMeO24J„Č`z{V2ßA=ĢžLóoŒÄ }ģVޜš­äÖ1YĮµ24Ščo›ŲmTE. Čē‘Y¬R+™žčVž.ā¹Y¹ĀźóƟ:¤„ĘzOCVm/%kvˆH2SæqSŌ ™qƒ­tZ—1“7*Ģ®§īśÖ‘ÅsÆsu¬¼‹2įū×qįéīn<›wņūįx&ŖĻa”tĶ%ā¼"ä|Čvõ®‹^ŽŹ²ZĀĶEĘ3É5Ŗ&[§„ü4ö–°É-…ŁK–|Œ–cĪsV"š¢é’xĻnļ•R8Qč1[#‹ŗ­½ŌZm·īņ™É$ƒŽ rś®ŸqÉ4“a‡ ĘwRnŪ‹—R×Ćß.+¤œżœFX"`}«£Õmķ5­šÅbX¢qЉ i«Ē.©ØĒaūŃ$gŠÉ½Š§±ž­ĪZ&'pķłÖmŒžwøŁ e'G‰©ėšļ‡ļ¤··ŸČ»UĘ{ö„Č^ˆō{=sPń6i’œ¼ÆūšŁšęw÷Ż\c÷I<)ō4ÜPsv§įĶ:ĪÜ]Ģa’V9\8ÉÆ3ńE­Œš|–—č<—Sµ:nØqH£–Ó²l­ŌCh¢p zW}į›Kf½–žį-ą2W=3Z ÅézLŸ.ȝ9ĪÓÖ¼ĆPÓķl®•øDÉn˜ĄśSæC£Š#¹…'dģŽPʟļ{W5®-ļ‰/ąi ~l`‚Žø Ę~GYšźņĻE՞ņX·Ü''±ltÅVÖ"·Ō¼xŽ1»·\n"5VłTdöõę³”‡õ5®|_eo©‹{£ö€ą¤õĻC[N­5å­šY"†&FP=ˆ5*fŖ:5rćEt;až)%äRI<~$×u„Īc²µžŃBdäĒB{ÖØ ]vöŚŪOItĖĖØēós°ē'Ōö구®ÖāŚśeÜŲ5D“čj›;ÄF‡Ģ "(Ł’ŖAlš9õÆ0ńFƒus©%ͽ³²rīńžƒÓćęLŃÖx^7œĀŹĒjĆWØép%åĄŽįŠzš£Ÿ[œ7‹¼"ŃAw©Z²ī gzńŲęĮ°¤7ŽÕ”’5ncŠč0b„š8ā½vÅ¢]:+©I F4(²œŠ·Öés¦ŻA‰ rŽT­\}§‡Æbŗ†w>ą /œl53Ń/4'1Ē…Ś„-ßń®[MšµÕą»Å°BžĀ³”njKŌ•ōĶ> ¦M–ģ¹$µå«­[½Ś`(¾ĻŽ©p*2¶åļ¾!Óķl!u_"Q!*Ų+Óøę¼¶}:ę껞GPaž˜ļIAŽRģnVźŚŅāąJϽBŖ‘÷G­SŅ,nõ ¼½įUrKV£Šƒ„»ŅŽ•§.”0ŽāRݽ¾¾•…g¬¦äg`ŪOjvAcÕ#×!×“ØąUó<¼ī }Ņ;Łš3čR§·ø…]œ!¹LVrcQ9’‰š›ÜźPŲŚ$HAĻOJĶŠY‘<‰ƒO\cīŌG¢hv7:hŌ5$r‘Ióx„q𯉯 IŒ®@'Ņ“Œ„ĒXźp¤×7jv1gœ±8¬_j¶źpų26Ń:ž”ė<)}§_ŁGnQ-ąAµp0EjjZ^•ij6"Ų\•!÷’}jūB&¦—mslneP®>bąÖ†‰{gs;Ų["ļ2 rÄVf–<Ļ\Õn|Gā=M#†KX`“Źł“nģæżz‚)ć DŹģ:āŖ7f¼­½™¶žu/?6N®£EYĮéļśŃĖÜdšK¬\ßZYyū GĄO¼löÆk¾²°ø‚Å q§–ƒ%‰½źXZ½œ Ń£¤@üfµtO싽*ę µg½Ž DÜē?„#>sOLT[kŁ„Tb§w å„ūŪ­œq ^Hų½ėH Čn§į‹hōi>É—ȤycåŚ}jųc¶vš@.mć2*óøóÓ¦k[ ϱę^ Ń/eńtw?ösHNNßJŻ×¼-Ŗ^þŁü·O—v3¶Ÿ)*79Ÿx}-tH/ćŌ•ļU@‘:€±O“žD½ÓŽ•ą¢Žxo#Ė4IŽ“ŃGyäĪź@#Ę1X’éWWW««®[-ƒČÅ^Ęr:5±€Śˆ&eG…6œŒ•§¼GM–ca `6ę”sŖšī³i4­i+öÜ©­+ŻzĘѵ RŠ:H”#qÓ9ź)™‹į½ ŁÅ=ij5ĢR1dįsŲT׎mY®™ÆŽĪ8¢2žö«wµˆRG›+É6§mhĘ9įŠ\©sÓ>•éßaŽ=@YŹéd.@ėō©;]+N²šćHäŽĶ:¹Ćs÷ŗžY®?ƚ“ii§]ĄX]Č[Īöōp‰\ĢÆį-Ņx’X,įår_sė]©gŖOŚC·nÅzŸ\քŸ=X]ÜŪų²öŌC? ä| ×EŖ^\[½»¤ƒęä€zö注 ęnu›ØīT] ŚE\.A žµģ^ ŽĻÄ>±Šōč„ūI™f2«üĒćō©Q3ē9Ę]:·‘g;Nv·<օō— $ˆ„M»8ö¦ā8Ė”Æ¢O}ŖDži1Ā;æšõī‹ėŪ4ÄQŒ‚{f”oгŸ“Ę²j¶«k|!‚õT’cčŽÕLjł¶klČ»— iÜRĪfłĪ§ę[;łQŒ) u©|7į`gY”üŠŁÜē’j›1±ī ”Z\NŗÕäQŗÄ_©nĄ×+©^ZŪ ¢ˆ+™I`Ąō¬dõ.dš=Ü6]_k*żÜćq®'Äóź™lÖb ;Ō›-Ļ'›[¾ņ&ćżūä1'}k¦š„š2Ļ&³$Ŋa}  ĀüEæO³$fĆ#v ZēŽhī&˜6@#„D„bąŽ ^[_Vsę$hIĒ!@ī}«ĖMŽØĪ°›č.`„‘…9 Ļ@+#R„ʇflĖ$ęŪ„q\āŽA<Ÿfu8Gäćސ¶’÷ŗ” “®XÅšµ“ēūpčń[Ķ*ŗ™<ĢįG¶{Vrµ”xwKYS…ó ćķZś×@šĮ°›OŅ ¶Žß‡°ŚļĒ ā³9‰SxĮ^KŽMeŖŻÄ>Ą±¾©ėžÕņösč/bWī9ŻųPS™kRńÕ„ŠĘš…ģ6rĻ–™›‚¹ ÅZĶü—¦śßȏĢ+$éżī:Pfä‘Õ·ŒƒiwomtŠŅĘ|ܹėšĒŅ[żfBĒøćŸŹ¼’Ć?eń}¤×²!A ŠnßĀz⃠u0u»;Ö>Żó TvČ@}śUMKGѵ©ŠŪ'ĀL.pģOµĘåĻ ųĒFž;I¢»B²c}?:ō}oA°Óō»ŪĒž_"=Ķ–ą0žļA¢v<ĖĆ~/m~ÖŃt°Īģ%Śł z`cÖ¹ż įõżÆÄu˽6Ńtę;¦ITåÜp? ŹkQŻwÄc«é~Ō­ō %°ŌX©EUłYIēō®nļXÓōŸi–ŗŌņŽź³’+·Ö³‰vlé5ļéžšö‡¤h7¶o‘£$hd=K`Wʾ*Ņ/gšė\ń žn„<žhfóž•o (÷ 6źŅ{R²§ļW…Įįk¶šĢéu?ŸH“”(2:ūÕ5ŠöÆčSźölļ#ˆzč¼oŚ3Óš«Ž?ų—{ÆØ¤;ķģa86ü¬;H •Ÿķu¹|b/5ײŠŅUČLb=Ē ż8¬ß ŻZ§‰m4żMŚÖż’x7& \ńŠeģw_µ$šŽ£lQ³æ’õ>eŒåŌŽÆŁÅa/‡ģ°]œƒ±łć&‘ņ'ÜĮ•IG•(Ē<‘[^Ō›Ćsx–ŻZźPH`?‡üŌ1ĒŌšj MO^ÕR8ćµƒĖŠ5ī=ź\™ž¬łoHšf±Ŗx¶ūNŠuŃ„K‡‘¤nUī#šū[Ā^&t ü;;GvfE‡z© 9źśT"·¼ ÆM ŚZhWéĘYFYPä¦y>µĘ|Lųl5Ļ i:LĖöŪpvʤī-ß?żzMŲŚ0<;Mųy…ļ¼Iy+Ģ͈Bś­z…¼Ž{N›tó1\J¬ĆUpŽ6K—Ņ-ƞÖßr†ūŲõ…ąŁŽį—ĪMåcP{Zq•„}‹ąļE}„K®jvpD¤–ŒņƧ½yž­į-YÕEžŸqoq ŽfĒš|öĖ5½/ ź×zTā6Śäp8uØŖŚ<ŠNT“Ž_0ƒ“ڲ•CJēgy-µ„lSN"¹›Ŗ•ū‡=æ“ć ļSŅķ›ĆĖöŪżźBĒĄn@ėłŅŒ ;(ü m„hÖ?Ū„vP—Ļ8õ«‚ŪH2Gjé 2dtocW¶wūMNłc†ÓLv†Q€I®NóL‹į߈ BļūAŠ eˆæŻ'ųx§`:ļ ź^'‰å°†&uŻĻ•ķ[^( į­µt‘$”Ē$SUČW)ņO‹µSÅz¦ŖjE`“ŠP©‘Õ8ķ^§„„ųrĘŅD‘Zcü#Ó©pøł»§|Gµ¼ó •D³ ļį?Jét/*&_ša󣎾µĢĪQe’ų¾÷RÓä³[ūØÖT’¬ĮP2+ę‹Ļ>Įå·°I.å‘łÉć¤Õ$+Ūs6ēHšźb.TķŁŗMz…“ė}&Ż#x! żę^A¦D„Ųī5_‰:O†­Ņ¶Ks{,-&3°ž1ƒķ^ę£o•]U‹ąUŹÉIž©­ Żh6QZ2Ččæ½—®®{H¾Ō`Ō//K3[„)1µ³Ž§ČŚ7źmi–:.µ4£U¶_0‘µT}ćœę½n= <›5·… L6Ęē<ō©Œ»s+™^.Ņm!Ńļ­¤»hµšĘ5€kÅ<)¤kVšŚĢo±8##«gÆåZ)‘sčJīå`†K‘!dB¹+ŲWŸj¾!“@ą˜āRŹ­ĮēŪš¢R5GKö¹®g„"€§ųGįPŚiI 9„7šŅqž¬¹Š™bFµ†'ˆī,NĒZؑA$1ī1l?3œjiö2{—äŗM:y#O._Ż”אqŌ{ÖG†ī QÉ&„$³Ļ‡ĮĘ<㊾fs¬ŽY,Āīö' ~XĄĮ®³Ć¾"’K4‰Z“>™#ŲRŒ_ˆšĶ՞ƒ-”3M×GnQ±·Nk̼'f²ČĀ[¹™v€ŠĒqĻ֑D{†ęxnĮG‹ ¬k¶¼ø3J©+*ą‰ā®“©Žbń„šśm7M“X@¹Y¼GP ł*ĒĆWĻŖ²ź`Ålżgw9ō­ltF­hś”ZD‰gk„ r„ńšģ/¼eu ±ĒŖī.ŽžõŒ cR<×ā-ķŻÜv0]Δ̑·čq^A é|DŪ÷dŒœÖ2ކG hwF!ܤ¢4žčąÖÅ߈ŽKY"¶„:–;: YšF,č<0ļr‘Kv®īīA U_ŻŲ@óAo>č…cē‘ī}éšF™Īhž9ŸIµ6®^h„aį–Īkkž€ ˜1óx1Ś“Æ³9mGU‹PžIÕ±'¢õ­m7PŗÓ줊k)`\Œ õOc6sÅZ¤Ę˹ą\ņžį]Ž‰ā».HÆ.Œ›Ÿ;˜r£Šb˜•Ök1Ķ¤é±ŻŪŁJöåJŅĄČźe) Thå4kBč‰ÖŲĻ2Lgīšė,¼?pŗ‹^µš«œIóōĒ„Mˆ”µ+ėw ™,TĒł{Ųž}+ÄbŚ2$®ü,kԟ„0<—Ä–Ļs.čLŹĮˆv­ ¶¶·YQ2,x#>µ“"\cÜļu­j{+Y(ęóLdŽ žµóÕķ½ū¼·sFčKHå½+”FÅ„c¤Ń¤†ŅÄ“ Ō±ļN“{D$ÄælW ™œ„Ųū„­ŽņŁ·óŠuŗGę–'š˜#rŹęž Y¢˜ÄŁ †PC/|Šś’ö`ż üKš ā߄¾#h6š[› ø$wŒdEa¹}²)¦uӑžŽ’>+x{ć·Įßübšmå½ī‡¬ŲÅ,›w•6ߘ|‚> ×A¬ZŹźd –}Åc5©U­‘óĻÄßż®ŻŒ1ī’E,ž½+ņŸćgƒ^ük\Ć.Ć[ŒØ>KŸāžŸgŅ…åćöĀų-ušĒĒz°Ó­ģ-ŁŽ+§+ĄmÜtõ=ėā©Õ€|Ŗ¤ryĶtÅõ3”t2Ģr”!üß­WeT"3prp1W{lqÉjB.ćy eĒ ėR³#•XĖ+7€éUIļy¬^%ō”‘e×nrøō«*1+%ŗ"”(]IĮ­żĒ°A9"ƒ®š:m+Q“H»‹X·”Dö®·0Ė †F†Æķž ļūM^ü\ųY kÖz”’ŪšElš–Ģžj˜°ģ„WÆzĪg\šŸ½¾ń=¾§¤ŲÉcŗ{{˜n9Š`0ĆóĶuN­mw˜p­ĆOzå’ŌŻ«ŸœŸšUæŁR/ڇöLńéVj|6ÆykŸõ³[`ä/Šd{mµž{Z߆īt[ĖżęßQ’KY?ß&ŻĮN>_`F+8GŽhP§s肾³‹EMN{ ™Ļīש#¦JśGL³X§x"b<ÕņµDėI.‡ThXģllŚŻ'?liķĖ€#/Œ sĒ\UOč­Ø[1$AI8<Œ+†ŒżäßB„&y·o¦Óuė†ÜBß,‘öf•}{ąĖ“É,kPF}~µ÷ŲIóA4x˜ˆ“Ī”tõC UÉĮ8ööØ-ž%Łoy«%AõÆF óęģf^Ern–34, Ą>”—zĞTˆģ“gę”­Ó¹ĖRLʃdWS@Ń4’)ĮēM]Žn̬U; S[5ę h”Ō¹õ·¦ŁŁjóZ¼tԟcķNĒT©£x6DµYd·D§Æū^•µ=ŖZmgQŹŽõ؜&“h󉮬zēŚ¼²ūO¼]WÉ·ŽFW9»TDÆŠčĶ¢[[Ę$bą‚1Ü”³mŽŹŚåĘć÷AĘļj ·qźˆāT…†!Éąź=j¢ŽĪ$ó..ĄčŅ“TŠż§C³Ó|¶‡ķ·g\VœbŚöŹéFP’?Ś¢F5ĪUµø,ķ.ā;#R¼gćŚ¹Ė{Įt’¼b‘uUEŲē: ;{™ņ"F‘€zķmü-[¶˜"»ŗ˜ōśU=Zš»I ĀNܽj#4¬ģS³Ömķ$[¦aū¾H&ŗ[?馝¼ęź&q*Ź8zÕ#[®§'6·åĻ+ķ*„ńĒAļ[šyĀ$fÜ3Zņčc&_’ś Ł <ä.*ż„Km"䖌·Ü'„ȓk\ÕģōĶ2iaņŲŽB©9Æ"m^}MaøhŚ6īÉ"šc-éfėķæø;@’Ćŗik+{{w¶ |Š\ÜŌõ1¼Iām'Q³]-tķ²H~f'°®&źĆģėlQ|ø1ņØąA ŲŹ·šųŗŗ|Č­įŚ[wn•›•1·U°H'ҁ)d‘ŪĮe5ø&wÜ;–ĒE҆™=żÅŲeE9Q÷””™āsj—I#Ū %•~x©ą½Ō5 HĖķ{…RpĪ×CDĪjšŻmPøŻ‚@ĶZ²¹1Ø*šxči„Š%#¤•­šĘ{¢Fčš@–õ¦hrO+1‡äķŚ¶JĽQ²h£µ’w*Œą k7‹tėH-“Ōņ§ø•÷ WŠl5<³[±ŗÓļŚāīš¤25Ū“Ø>¦ÆųzŚNó}ÄjåG\óM2OS“¹ņ [ž„›oŹ:Uojö¾X-ĀÉ8šO.)6 ’ ®p1ł'Oķ §Œ(łB)Ėzį|K}éYmIUAÓ=i9‘§Ü¶gU,ē‘“[vZž³)HķCŽ (ägŅ®Y½å­ŻĀXł³#)mäc­r~7¼¼mZĘHBŪ•fÆÆĻņŖäD¹X½nÖh· ±Fu6#ĖsŠēśW¤x[Tń%Ž”qØZ“p@üĘ8'Ÿ„W)FŽ™Ø[hÉżŸnŒ9›æēSI©[j¼2ÜGS®*Ź{šĄ±s­”’$ó¢Œ)'­sĪ” b.Ƚž•‡+-²>ÖyfX*žGZģ"–āä”󏔃 øÄ˟BŸ,:ž›4*7HŹNy¹ė^‡āo ϬI„jŻv‹ĖrW8ĒŻol»¹ {5•£Ŗ÷8#”8ļ\&…”źw³5Ō¬!Frx^µMܱØĀś5Ōa|»³Óåüjäŗ­½Å©KØ 3³n%Si_aXXø1ڇ…,%H/ oelp t­=ō‹]bėSŒJ6Š e÷?­T"ks•Ņ<9„tŚ„Ć5„й‘Œœp”ę­|Dwū-“x~kyPœHä`‘Ļ#ß„h#ÉLó\Rs(;sļ]õµõݶžŽĪ苓Š R±ÖXč0ĻggpĀTø,®A<LW”\ŻżWsåĄĄź(¤`ŲźŃ[o–Żƒ« Ž0kذÖ|ԌŚķ œøļS)X›>"Ö': õ­¬¢5”rGQé^¤h÷QĖqs|«,-#ĻCėYó(nćä˜ĀŠŠ0:b»]īĪ’DK˜ī–IććÉsÜõ­®)DZŁīµ¹ŽŽŽä.ēcšĢ– @Āš±T”1Ę;Zm™*EØ]iÖč÷R7’¤/TĮĄF#O|}:SQ¹G{„Ļuqy#’ØxČõāÆ6=ō`’ø=j½™ڌ›H{+iłIPz űÕ#†pöE{qj\zZŸHńGˆtė°U, f1ÄrNć]ż—ĆŲ>Įm`šÅöÓ“łŻÉō„ch“i/†gšģŪŗ®Ér©®ZĻģš$ā„6Ÿz@Bu<ŸēXŹ%£–“’K¹o®®å‡,äĘIäŒ×[¤]CoĘw@ź:×Ī–?Ł\و żŪķ۟zņ½Jźyī®a’,Dæ.OsUÜĀJÄŚeĒŲ®ōū›ņNG«5Žj­įwO½ø’h­n#Pšēē?tVÖ¢—l`˜]Čņ‡HĮ8„m;Šn#wAYø3H²ž› „Īž-ķīÓ{±C~`~•Čj>Öü)y=ĪÉŃP9#éG³(ēF©i4_ßGåą`ƒĮ$śšąu Ė«8™D/1ozšøĘÄM ō󦦛¢$…öę½+Ā0 ­Å„„„ ‡ »oBzāØČŌÖ¼O­k( 3}’5ĄĢJ>ačkcĄśūjodŃ9$ē zŅe(ž©¬xĖJšö‡yy"«$lŒćŽõąŗ'Äčõ‹éž)aµL‹g°¬\‹Œ;v¹ń>ŹvÓ4 Œ²7Üé€;žµŁÉoa³{wgGE-‘ѱT®)E#—ńµŒś¶ ½œ–¦5•YŠ¾¹ęøK»U>É$%vš:żjŁ%” ›RŠäÕŻęĖZs PG\aMG‘¬bz>‰ é&ņ5c¶Żó¾3_4¼Qč~"ÕMšŽ).Ų‘(ĻQWŹ;—„k†ā>V5=3Ęj’Š>Ļyqm;g‰#Īs÷I¦e#„‚Ž5•Ōœņr¤Öµ“ķiG)füøķ@‘bĘś}Cķ„‘įwt“4Oéė|ßj"IWÅēkŖZiåŚĒ qĄĒR+™ń(“Ņt˜ī ¢ü®UFH÷ _“ÅkymĢē’ó®¢0šŪ+ŽIķžOҰ”×µ[øģŠ:¼qOϽs¾Õ®lnĆNßiC“Ļ=©3Š[S–ä\EŲ®2Aī9¤üÄąsŗõƒi" ÷”9!‡u?Jö惋c«čļpčŅ„Į…0z~TœŠHõ‰Rų3¾½Õõ×¶[™Ya¶‰"/ęńĪqõƟō/ZėnšĢ†Ō³īŖž†Øjėeo¼³/–§åbj]*M2 ǻå\’{Vn,{CEÕõ ®”·yōųe!X•ńĘ=ėŅ¢QŗZżć‰†rOXéé,ÆØ Ķõ®®ŪĆvs?˜Éŗ`0p8Å)$ŠŠŌęüGąM ­ē–bŽįƒ<„wzšńĶ -ōeŠŹāghņ£s•™±ŁŁ}ŸY·Y›“»?ĆRÅį‹;‹Ėy.¼Č-£`åĘyü;ŅRx­4k»kIJįNÖģćҼ>Ś6øŠK‡‘ŲäOcL Ķ3…w¼™Ē„zŽƒdš}˜iPłĢs–äÕy³¹ā„ūŻDca•<ÆŅ³W]Ödšü[AlG)÷ ž ?ēµ!®ŸŸØG¦Om'˜GĪŒqėėXŗ‡…’O2Öęf1€T©8+šX÷ ųoN_h¶65ĮM²3ž,}»×žų›Ā¾)Õ°.b{‰Š BwŅ„wI-¦’ £i}ßZŪ” :H®ąµ”„Ć&Yŗ+Y+!Ū‘ƒÜŠ>¼Ņ¼ęv`cĒqĮ«"0łŠqD­Ō E ²l]żµhÜÜŻiš\0Ü$MĖŽėśVRÜVēP{J+©#€ćüš„®ė·.Ėö‰1éHŁt*iŗõÅŌĒĻ>VĪī95Ó_͵“ē9¦L·<~žeÓ.¤øc,ŹģNÜä ÷Ļ]ųźMĪŲĘWj#gåÉėRJzmÅꗭi±›¬23ŸfĒҼŸĮ^ˆų¶K¢Ń½Ē*ŠqƒĮ>üP[aŲxŠ+(¢Õe0Śš9'ÜW™Üų‹ūSQ„ٶŹĒd™ą­4HŪX-­®o/DāyųĻšńÓō­­-®noL×J>Īß)R8ZŻÓĒ?“©®—o Ų"2 F>ßZš’_\AŖ\Ūŗ=Ä”In¼ŌŹ%ĘV>_½Ō|I©ß_ŲYjĒOpe‰N z†ĻŅŗ›j6©ž¶ņUąīļYøŲ¾dwöööźĄČK̐y¶„ilu†µai2Fzš‰"nކ„ńM ŪHTGøqĪk±š~§m¦\­ÄĻē~`ĒØī3X³C®“Ä$×±C„\ķ'„¼©»Īį]>³«kvŽ…t "}QžQŌ”¾(±J=“jśćŠU©\³Óu'·-ą±h£¹Ų€p[=°+ē]F{ķ>dŠŚ7’Wb8ē>ōĢ„"œPjšŻŸ26…W{€M{§Ć}f(5 DÕ‘Æą†^˜ōę‚|ńõÜ~/ŠÆ“4¶ °łv­Ž#õƜ¼9£ųæįó^$ę)ī™ƒ§˜8ćOj Œ{œļöwŽ|EāŌe™Š%²ß.3é^ćgdśš/eXåšBUUO*ÜPT¢‹Sx‚źk]0Ćj’hó†öfĮŒg“šg ²ń‹ ¼Ō5kŁ”½æšFųóó9ļĘĪj\¬&ÕĢÆųRėĄŚ†“”YiĻymqs™~\”A“Įż+ėŲZx»ÄsƧYĮch‹†Ż&āXuĻįYJF†Ä [m#Z“³‹D}F"ž\²•OFžUńķ§ŽŲßų.ĆL·šęŽčH_jņc׊pÜƞ Ö[už³cu÷ś¼’ vŖ?<;ć %“k½>į“•hāIć9Ų1Ą#¶kc9>†M‡ēÓķ‡ŹūĪw z^£¢i©v‰•ٰr½ 2o”ŲĻćńįŲoļ xKL#;¾Š}9ŖŚį]RŹ ruxķgĄv~ŒŻóļ@\K ŖžžÖµ³Ś‚†÷Ŗś†‘cØxŪOÕŽÖiR$XU¤_@ĄąžŹ­4QĮxĖC¶“Ō”Ōä™äĢĘ8·‚HÉcņ­»{]^Y¢²ņq bŹæ{Ūšā‡ļ-4K;źīy¦ūJ0h“¦įWį.ø‡ĆƒE™š 7‘Zq»ļœ`P4y«kB,­Ģv*äīŠóéZ½¹0ĻöˆŪ•t÷2z)t%ŽŚÖŚH$‰ī3’XW£xĒ7ŚTŚīVہea”Ļć\Ņv"˩躟Ä-[X“LŅÕa‚Å&ÉÄŖ`ć8ü+7ǚŖŪŪ[YA}4?7ļ¶žc„aŹxķ½¹Ģv,ū²zœžj¢‹ˆ^I³åĶæQļV§i¦ėsElč‘Ēø”\žĒÖø«—ń„Ņ^Ā¢å[†'€Äb„n/fzž‡«k {e śpžT!uųźkŗÖž]kgÆéŚ«iék,m-¾sē( 涌;“ģlaėž¶Ō5 ½Z2ŽsĘØų=pśę¼ÓÄ> Ž}5īdÖ@r;JŃ+#˜Ó¬¬tūxdŽĪK.T×øųe,%–Ś×Qø‚ŚŻ†ņIĄŪļéғاĪ[ľ±ńĶķ­“A#ĘŻFJŖē¤ń^³ŖŽßéļ.œń˜‚goÆzŘŹ,ęōĻŻģ–āīįd›$ēc=Ē­{…u“šę›©Ėeegs~b%^@2„1šBƒč|9«Üų‚ĻX¹šé™n%‘„”©Č%Žp¾ÕėŸ5+}GŐŚj÷R#…¹Śs×=*%>ˆŌżŅž7ēīמx«^±ń®§©č¾]¾1€ Žœę¢÷*7>$ń§Šnµå’ŅZ#”¤•ļ^K¦jZ„Į6öR^eˆŁ»śWD#ŠŲõ{”‡]q”c›Uh—8éŽõčš¶‘įėHʕjĄ–óI$ּرüw§i÷vÆt–vN„:;…,=kĪķ5ĖKĄŅųaÜ0Źń}Š¹ėš‰C°ićėŸźz¬²«\(Ę[n[n1žWĮלGˆßTœłńy^_”ĆåūÕȉDģõ»»+«[››½ŅĢŁĒ 'ƒ5“Ń4¹-wN–ń±0—lķbry<ŃĖc#ŃgŌĻŽ,LVɲ;Q¾FŒ·©?ҼOLńœś~½7ö¼k‘k‚=7v¤č}oćJm>k›ė8¬ŃXy&>yļÓŠWųå“ż6Ń5YõYo..ä!ĪX’õŗŠ>S¹ų} Ś>” Qļ¼`^GŻ‚€׊‹Ę¾9¶óŽvd”2ŖÆ·­;&rpév—ķČ_*Œ1ϵs~'Óę·e·HŹŹģPgŖńMHŲócŌ“}IüĄė‡Āsļ^įįĻĒöQ4Ó*ŹĆļšŃ>ĄĖĢ“_¤såĀTŽāŸ¢i«qņ܈Į ĪXzŠÉœēA›a{w6Š2˜Ōł™ć8ž!X:¶§„YźQX,‘K(Ąv 58«“ģībųßĮ‹‡?‰„p^ź›Uć¶w8Sž§·­rśĆ/jÖqź7+%¾•8ņщۓž?^µ­ĶŌ]š§ĀĖ’Ńļ/ĆDß»ÄGqVķ;Rjaކ-¢#3oŪ†Āƒ×?LÖa(ö14‹ķ/B–ū‹Čī„xT# }5ŲŁüQ“»°k&{ģSŒB1ŌzVĪĒįā÷[Ö5 ķRk鯋™’”3Ó•½­Ī4;ō¶"¹…“4} m~cm¼J—°ĒołØČ2:ż~•Ė_Ųł“ĮydŪ-JŗćļļS7ŠŅ2.ŲĖcZś5xśŪœā¹›ķAZf†v¦ ūµ½”ēZ©Ō%œĮSĪĪpIķ]÷‡<)s,5ė9t]ģT1«zp!›?؟lšo¶²·P ˳<ŽÕ嚾µcaā)ō‹9…Ē–įKŽēü+Ućę­éÓ£5Ąw8lҟįėw¶-3ÜK<éIĖĪsʗ÷·R¢JŅ•Fćļ­į;;›NßnÄ;¾^’Z‚ZŠöÖ»›Nŗ±…!I"f%™ W}£jM«É$ilīŖ2xžC­4ģ(ĘĒ{y«»h‹§'ŁŚ,ķO\ū׆ėÖpEˆā˜üŪ²0Nkdū} ÖÕī\[A»å?xVåĪ ™5Ü0Ü&ƒÕ€ėD‘5Uō3 Ńļ¼P²"80Ø,8Å,Ÿ?²į{‰ļ<™x\pŁō5‹HĀČlße³³US‡ęÜ8Å23 „ČĪGjĘH؝_‡.ī®mfŽfPų žiŗ’†#ky™ÕcfżįSŲć­AgŽD®&xŹØv‚9ĶOu‘Y@u|sĻJiŲ.tž¶†ķ:K{K!ŸĄ×Uā­V-@=ż”TÉłbĄĀ­>n‚<^ł„–O3z$Ģ~QźińĻvˆŖØĮ­bōh„i„VaœēėŗEüQŪŪEoĘźø-ŻŅ”›×WG˕ʆ8ŚruŚTƒWźē͉„¢¦w¤iu«\=¾ÄÜųo ¾ Ö®ÆŖčśE› Dw/“*1·ŸēZ؝ćÜłWĒŽ9·ƒlz\ sxŅNpdwüųÆ=¶Õī^xī%˜‡xēŅ”¢kȍS6BéĘGk³Óu8 dW˜‚i%c ‘±Ō]Ė£KV†X^śD$ÅŻG©¬ųY/“Č`·XVpÜ:VńFwčĪOĆÆļÆc,— i`Ē#Æ&½’Ā–L7,evą9ėŸj£h$} Ć>i“äRrĶß>µ ¬ŠäØ%ŌéAPZ’‰&ŽāC“ŻÜiחBĢ,ækFĢ•~ÕQĪŗq?¬Ÿų7»öŗŗ“½×?doj1Ūi5ö‰ö‰ŗĪN]G< üĄ}kś˜Ō,ŁgY—lØJ0ė‚+:ĖSj±źxī§$ɾÓöŗ“] «ó«ćĒĆ­.ݚ{MFUk¦g*īI‡nŻĶsØŲā©e£?’mŸƒšďkĖ©ŪC Ģɕņži¤VĪę#Ÿr}«ł½ń…Øi:γ Ż&²į ©SČĘzāŗc±‹1V̌Ź:cļAU.#yĄfCžõ¦pŌjåH"Ā[ćØ=i²• #ˆČ×t>•„3(ČcG;:ČÅ£å¼iy_}\ēŅ®[ŹA2 ć;{Ō±2gi‚Hå+Īļ⬵;!¹~ĘåĢö·?(a+ōמ ·ūJŽ|ų±§é»ßĮįżNržz?19 8#š±ÕŠžą¾ųė̲ÓQgŒčzŒ ,2:ଘČǦsś×ÖsŹn"K„ł”aŲÖ F¾‹gkst²jĖ꣌ćź6G_Āæ‡ų-‡ģRæ³ķ|SąĶ>WšOˆekĖA+ĘĒsŖ7N Ī3ЊāF¤š:(ö>ųm«i÷ž±M5PŻ[9Y~\ ę½KLžāöęDx”H£Ę× Ģ™ė_#˜’WźŁÜ¶±cYš;KėW…ˆĄłcŒÕä×äß ?9\•(ć½qSWv1œnŒ=GHX “SŠ3+]GŹ3ė^‹š«Ä[ ›[żJ;‹’H FO„}~MYņø³ŹÆsé+Bnā*½ŸāśVn©E*+†Żōé_CMō<А+Ē&ä(X>ŅsĶ\µø{«ˆü½±į!ŗWU=Ž9.£u[o6é§Ų„‰;¶€™-¢,8›lˆ»¹ķō«³=@Ķ$6ūCL\(-ÜׯčvęĀC; °P #ļj˜—õ \ŪģH$2Cø˜®aµ›_2ēĪ%ې©j‰”¼ŹŚn­ks~,”gŒGƒ Ę:×yww”>œ”m£¶ŌUˆówœ°ķ‘Ҧ7č[±ę-5Ö©+ʋˆ•±ņżk”šÖ›äÜ<ļĢ„„ó8ҵ0”ŗė·Č³ĻSö…lĒ k•†ĖĶaq:ł¤Gn}«U$a)v;=>Ł5)¼Õ?ģ’³<ķę0‹$ąv«3“8}sF–įydä柄@¹Ÿ@ŸéA'}a8ÓćÉVWĻˁV¢Õu/QUƉfs"ŪĪŪg”F@šÉ‡E¶»§†+w8 w0õ+‹kvŠ&>y¹CĪ•ęš5>IĀS@§ƒd2ŲŹŽK³V8Ę»;ø“ģó,Įb‹M± Ü_gmw˱øĪ3Y°9Š7Iw(f.z`R/—M ‰.g¼²kūpö5"!ŽĻJō˜ī4Ķ_Fµ·–R×»pr?Õµ1ŹēØxT°/ugAĄ u5ŹŪłŗ”³“čĮĄĮĮįM\`fs7¶wĮ LÅq’:W¬ų ĀZ*h××zÄaē$Ęüy~ųļ’ė­c®ģåõ ~ß?ŁŌ%¾ļ—éZö¶’e¶Aģ3މ!b‚$pBżiŠ­ÓkŁEKY”ä”ķĒē\ā)ų‹OŗŽi,ēL@S ÷cß#ņ®GMÓ.šś41ŗD¹AĘi”JżAKhģķā89;psŠē×T¼»øŽkh]p“wе1)jlėzŻē‰u)5]nOµjm“<¤_ńģ+wN“’’Lø[)@”Ž˜©”®oM_CŸŅ­^ąČ·AÕÖB§pĒ#’Õ]m¾ŖŠĘa` 'Ź=1Rkm.pž y/$ ¶Šzž÷­ -Rś(ķīŽ$ŠĘž»©¤L¤lš”‰p$·b§µlėˆģ!Š'naŹŃc œ¤­Å„«$lŪW»/&¬x;MÕu›«F ‡w‚¹śśV‘¦†„©É„Ż=¼q­Ą$£°lącµ`Z]ŻĢóĄņ’”9ĄAĘ)Ź:j?TÓmˆ{xć;TƐyŪī340\Iõ„rKs¢%ū{›«ēĆFZ%![hĒē]-¶r…TĻ#ޜ 6ķt嶂8n?3±ät­Ķj–PK ’©õ֫̉Hä5 hö…Ī0Ėž¢°ģķīƒ[;CqŪ‰'ŠLq‘ŽųŠįn“«cs!’gąņÜVo†nn``Æ!CŒzb±m›EhX²ń„ˆÆ<ė‰üµĮH‰`;Žõ×xƒVž×¶“3 żŲ$ĪÓWģdXFmķnfvóŒ=³T!²y÷Ģé"ĘĒŽ•fZĶ·ƒ­"µGŃKq*īT<ѧŻiśt"Ń$›‰b{֊FrF\¾0EÕ4ķ5!YVYv±VĮQėŽõ£ć kK¤»“—ĢŒēĖ=DZ÷ŖēFl󃬯Ķymn–Š„V'8Ć1’9ÆXšŽ¬š;<–‹(?/–ć!¾µ`sw~Ń ÖćY¹ø°‡k>ŲĘķēØP3ŠšŻNu¬—¤‰Cü¼ćŽÕDm޵t½mby䶖HTįyĮļMkxē ®YXóŸzĪÅ3¬µ³-‹Å"¶åĪlU-]:%ÅĢ—v+t³ÄFÉĀQŽōDÅĖ£2õxe2-ān^y޽ĆZī­ucoĆJUŸĖ¹öĶ[dGŒ¼'|öIżq ½x²§'hoz†’óLŅ­-õ(GŪs!Ē ŻńYDĆ֝õ $ĘŻį÷.;U{;¹¹Ky#ŽO-ō¬ć#E :½”޳g|¤ ‚ž4¾tŌ'+p|̓œŠ“Q…ćĻhń9Ó4hgk…$;:ķŽĆ·zóŻ®/£3^ĪØ¤ąFOOzeÄĖŌ¬ŚwšJ’kŃü;”kZ”-.-Ū»©ŽąP¬öĖOŅ#‡%J„°sھ~ń>§4·Ź†źiķD„U” —jGl–Æ ŹoņØäŌ[HŌu)˜š{Ÿoα“¹¤#Ōæq¬ŻÉcµŅ*·\Ÿā÷Å_·…~Čev@J’F ©4*’c¶§¦mmĖ•'x¼ĀĒLŗµÖ]­ÄŠ@ŪĪ@<÷“#c ‰ō=wƑĻqs4Ņ– &ā:ā½/S±Q„“š¢īT'?Ž>†›]Ģ£~§œx{XńŌ­ØZAä*Øp\ŒgėĶp:†‡.‡ŖČņń]Ÿ=AėX0Ųėl~Ćuop·Ml±»ŽĒõ¬Ż#ĄÖ·6§ Š–LK( ÄuŖNÅöŗu½žōXUœīÅVDw²Ķ¶UU†ķ‘оp±$Ś|šœ ¬o“Œ1Åy\ ͦ«˜Ø”ŲŌ;™Z’ċķuäōėKKxS÷{8 }ėŹÆ5‹ßZ[ßĶk«Ŗ•*§9ē®kŁ”ĶßIucoł€~Wšģ4»‰LŽIг°ŚžŌ€ŌÓķąg”Däw8Ø5Kʒ8cņFXpĒŪņ¦„ÕČōū“¹Ń®-®K©?xrøō®UŌ. šA‹lG#= m\ĶŞ¹šū~—c|g“>ńŠ …jźŽ*’ŻÖs$R©Įē#¬`J<ßĀ[’į.}^ęK¦·Vó8SźJśÄ>"Ņu}"g{˜īoī#dŚĆę\Tø™ž>–cŪ”«0ŒƒZš×†ķÆtÉćņǜ‹‘ŲńRW7s…Š£“Ōm×H¹¶R ¶N3žŲ?•zźxcH¶Ó­a†Ku r…ķči–¢¹£Óģlć·Ž‘`+Œø±¼³Ō†­i#Ąz §5"‘BÓŪYŠ5›]`¼zƒ‰_ē9 £'Œū_8µ”ńj1ŁŲÉ3 )vźFģV ŸNi¾X.må¼Fß+©ĪrHĪk·»Š+[i#P Ē&™•C/H±–ęC¹¶õĄjĻńŒg‚ŅK8AœH<×’cüęƒ3м]?R³™wY±…ŪėļķÖÆčŚXC••XćwÜG„DšÓc©»ŗ¹6“é÷ ĄŚĆ9#"¾yæó&w{‰7L„©ćź®U™Zõ;ǐ³˜Š| z×­éEßŲ¢Žą²>2Kšbåg-‰©^j—÷HcK(0Ŗ£¬„÷©ę³{hå,X7LReĘJš®¢žŅ!՘ ²IäØ'vGüEGaćh.Z(Axe'nā0sL³Ó-īąt†I'I%$w®Ä·—śĪ«pEf>n$ūb“] “±{L°*Ä•›Öŗˆ¬Õ€É=„fągĢĪ[Ä~u³[±e;‡AŌV~™ “× Ę7“ŏDI«ØBš]ÜVØc™™rÅNvūV³¦ÜŽĘ†ŚāKy Æ)Õ@#5Š;™nmŁWbl R Éé‚k€“ݦźsßL%hs€A'Ž“ Äėl¼Y„ź‘^¤‹42üŹ ¦~nÕĢxKY»“P»Ńo%haÜO˜ļņÆ=‡Ņ“ö„ū3 Ōn!ÓÆ.•fŽņ ķĒńQXĶcD÷.ˆH ÷Øęfœ¶*Xźwś–Knƒ>˜®ŸX»±“ģņČš©Q…āÕŗœ÷ü#š‰œÉu:3³ņ$Qļ]ķµŽ™ xwCšĘ˜–)-“ņĻņ(ļļž§æÓ4f~¹hž.†Ņ×T–v[y ‹‚p¹éųטZų{WÓuū˜-`WŅö€Ņ䌜cÖ·H‡ŁwśķéV$›u;°OV~™>‘”_F¬ģ­•(Żž”ÅÜõ{k–Ž ¶Vv°Å°“µGākļ^½K6DXĆįī)\¢_čä—W×S¤V΁Nw¹®åļSư½ģĐÄ'^õ”ŹŠ8ŻcÄW7ŃO²©fŻÓ¼ŅļHXąƒn|ŽK08Ük)›“«KÆ=7ķŽ1ŌĪ+oPńvu{ k4£Ė@F2@ö„õ˜ń–…}a§ŚĢĘE‰Į#ŽĻjó½9ĢöQ¢ßēÉūÚŠMŪsŌcŃ,/.,ŻR4Uq’¼n®ā=ȋnœ±āV\eÜϰ{«bŖYŽį„–Æ<Ėē±EČ Žę…¦ę—"’Ś+r¬Ļµćµ[i\Ę#@@ĒŌµkČ5āó”(GžēEq;G9ß 2s@X÷{sW—˼Ōm#²“2„FĻųvķQų—ÄVšĶµž›n¦ī(٤e1C‘ŌPZģfXxÆĆśdyuM5īŁ¶“Ył'Š“SÖašę Ņ~Tg÷śŌLS5ēO²[Aw"yÖĢ„Ž'•‹šĪīko\ų‚dšU’ŲʒH7”Œžu„™śĆĀś‡†l¾ÕÆ\k‡H^@9u“éł×†ü1Ōüii{ā{˜ę$qĒzė-„6Ö·,qÄdŒĒ»ėĮż)Ü„$sZ|śuĖŽZ‰UŽ'ķSžq’×ęž&Šī/u¹€i­tøö²ąņĪ?żT†äeĶ"ÅdmcPØüŻŲū×u4ŗYD‚drŽJõØØŠę§ŃuŠ LPą3Ģ +×uĶN·ŅtFšČkɅ²›ē¤qśVŽÅčcV½Žņūģ2¤QĘBį~ėt95GTе;æ²]Ž,²@ɼeŗÕF=ŹqßĒalb:{ĢĪė6čłź9Ø®t›Õ”āu‹v⼆yśūb¹›æŽŚ› ‹iŠ-ģsÅA&A»łÕ›(Üך¬ŸŪG©!g³™DŖ»+žy®×Y³µŌ“Ūč"6Äeł€Qņ޼w„~‚”l|Į{ØŁéžeĄ·ŽHU·ąÆŽö°Ä3ų˜\^BWJ‚@UQĘ; S’<ÆXŅ®ōY&ŗ—ĻY›åAšś#Ὲõ»:ŪG½Ó0›FĘ\ž¬k9®¦L÷x¬ZŻ6¼r1ʚŠņŅy“ŪŪkgŠŁž6iLō?•fa±ņ}ƇFų»įŪĶ_ĘZ†£éS ±Gƒ¶.y©x)¤Ń%’c 늲Ōūž»Ŗjš\ūD1H7(äsõŠąuK3n–·vvņ<“M·zÜśPK“)kšeŻ•…Ä÷ūģv€ŲaĮ_Zą-™ļlo,Ģ—`xĒØ„-Œfś߅m5K8®ÄÜÉ1 ļ]’‚<9į’ķ¾Ōm¤qó1ŻĮϦM`%&;ćgŒ“3ĀwŅćå•ć˜Ü n ?‡©ę¾Aj×nķĖ3Ī qó”{PtĀ]bÓ%’„_H†;I…›M÷ö·/Ļ9®gW»’YäøłęrJ£÷Eg6hnč>"¾¶ ×  +g•ÆJŅoģo§õ&‡ķJwGžŒ}čƒčtpÄā=Ģ„÷®*ÓKfµ8;j™2FÕ­ę¢ņYڹ j8é^££Įo ³®ZO˜·\‘ō¤bl¤Ū«-¬g{)åG$Õć¾$ųq«O©Łźļ{ Ćę‰Jēē@;qļZFV5‚;Ń©ŚčZēSŻŻŹBAóć…]²ńf½‡įK»si¦‡+õ#¶ +–ĆĄ¾ ]*óZÕ~Śßnw%nGLdzW|Qńwˆµēy¬m_+ēG÷„<攢S<ź>öūN·¹VžŪ”$‘¾»ŸÉe„ƒk$o%Ć>YĘŃߊː˜Ė”Ū_jo¤Į+Ł™ŲķŚ‡…I©źwįÓyö.X÷9>ÜP–ÄÉ܏įķŪ„ŪM«y®6īTŪŌśW²jóčmo9øņtū}žc9ž{(īzS”M"“™Ÿć6±_»CQ)XĮīy=ģw1Lė{ĘĆŽØY¼ė4‰å;Ūr t5“5Š;>v·*Ń6ĒmģEm_źž§ Ā5Ž6 æy@džyģŗh¶“tuéaŌcՍ:+k2ćP†I1Ÿ•Ś}9  ˜ELr;GŁĘ3RI̬¤ĢČ?»ė@›i"øSŌ÷Æ$ńF¢ž"Óę³G‘Q\” ąžEo[Bև–éž µ¹AØÜ\¦Žy=ė+Ä:2é6Š‹ró>p>^I튾rż”Ķ9½H“ķ "Č<Ž•cOÖgY|µffĪ6ž¢£äg&tVŚŚ‹į ‹s“$ræS^Ńį©nµ”A‘ņĪ:©­QĪŁŪ]Ü MKhZW>ö{7|{לx‚źźśa,ņ9@”y=@éAp}„'f’ŃĪVQiöæaÜø(±“ĘFŒl•b”€¹ĻĖ×ń­m6}Ģ<”]ŠHv/“ƒŲŽ©JĒU9ŪCč_€æ¼[šƒāæ‚>&x*wŅ5ķ&ž9Žą?3F¤¤’¼WśCžĪæ“oŚką_Ćļ‹Z5Ķ•ĆßXEśĄŁņ®BņuĒ<š**;£yJēcŖé+2B€Ģ§ŅīÓSµ–Ķ|Іqøć‚Jž]æm?ƒš‡„üowØĒo.›ŃhåB·Æź+X3žGēēö÷P®é q±łI«K|²I&ä”ņsVyõb@'Ęåūœ£Ś™Aå īQr>lqN>G:Ł*ØŪŠf†TdeL«c€ēõ­ĪŹ{•Y)Cē—y=i‡;ș`ZMic®:ņØŹ›xįø=Euš]ĢÖŚ†•iØÜé·¶² mž3Ā?«R; ėž }ūNßülųy ųgS××ūfĪxąa3•c"š¬ č­Ēż xnīźļN¶”’ZDÜīŹ8ēņĻć\õ£Gej×6Öę9ˆ/œ6;Šųkž ū-i_µwģĶćˤǨxŪE‚]KAr>i2§r ž§ß‘é^}uŌŗnĢž¼%iŖü5ų‹«ų'Ä6L“G7Ųe‰³Œ£’;Šśae’Ęę;eU‡u¢Ņ|S¾¶@ĀŌa†Ż÷‡Ņ¬Żź—w;ę¼’{×ÖQ‘ąÖBBūdGBBddÕ÷–S"ĪĘn;z×|>k”ŻiŅi—ö²ĮūĻ“.2} sZœEbžŠ18^kQFēŸ+jvńH7‘ųWŠśv‰q©éĪęe\y„ČéŒlcižžĶÓµŖÜĶ5ŹdÄsø“ÜלXi—×Z‹@¤±ĒJ-sCÕōļ Ū¬pHķsćęb8°õż č,Ėłł8`qš»Iō0“M2k\Ż(ČĄßĆ[š†” mūŽvœę‘ ę„»]RI._āĮČļ[šŽś™˜“‘DŖ.ąqA2…Œ›m]ģ零¹1Į—ld·Žā½:Ļƒj0G{n” Ś\ŸļÖ¶NĘ\§ ā=šŅĘKÜ Åv c{޹5ÆVŽPŽX9 Z9Ь{N¦X^Ƣ呶žć?Ņøk˜--Æ®'“™Ż[…ųqO˜žTsZŌ·7Ń‘ĻA<µOąk›˜…äwŠš*±qź=hc±‹ā+iuĄ –­^ŠōŸ“»¼Åd‹p*ōˉéZ~‹¦Ś3l‘ŁK śUč4č.ķŻe¹EUŒÆzLŠē4ß+MūLlńē ‘Į®/]–(®ęEr¶ī=x¬å!Ųe’­¼O‡Üz1]>‰„Gs8ŗ3„‰ Xē„8ĖR$ś×“śdź¦)2Œ‘œ1ł×‹xvĘÓD¼Ōģoy–P|¶pC»9ü²+hŹĘfž‘˜Ś­ĀBŠģb3•>µńPŅü;ØŪŚió« ņTG’ż+E 2ō©åæ č 0Ę3޶õ›Ÿō4Šį"ŽO\rD„ŠCü'§>«3aUI'9ÓŪĒ„5ŪĖŁ¢ŽO=|µVN¤‚?J€9Ļ EmzLM3UŗsÜ~ÅOtaū,ŃĶ·.3·ŸĀ€±­­Kq£%¤·lQg@ŹĻŹGō­=)mJG‚Ž11ä¶zžĒŹcŻŁ˜¤ ,IäzWOįin¬-.6īMĢC t ø»n6źž3uŖy’¹$ąV‹Y‹+ˆ#ŗO½‚Ąs֑\čŃÕ“Ė[›WÓĻ“ąķaž­rāF­œŸ³$.8SķNęr•γLÓl`E dhqÜr*†ŖDQGĶśRę$äõ7ņž8Ō¹Ę:Š÷ĻO¢ ¬‘JÖŅN„% £ŽGJ„&>VpķįČļµ™lmbóWwßõ5…ā_I”]-¤ńIł#Ø4å"ćŠZī·ņä;P)É=ėŹuO ”¹'K ēzŽÕ„Ī˜ĀĘ}ĖéwFŽā)s€ĘMz¬’˜ŠÅ aŒœzT(=ę«hė pÄ.3Ÿ0c#Śø¤—ĢW󐳖īrŖSī`āsņi¶»ļī˜8#©<{ Į’W¶™LED§‘žąU9„S;g‹W··o8¬ƒ€ ­Ųlį±–6šEņ󜃐ƔµsU"Ž„m`āŪQ·MÖŅ2:ćüŠĒŻ5ÄĄ€TƒĻJŅ#ęeĖ›ģųe&@Ć )ą}j•ę­ØŹöö¶NŠiķ‚č¼åńÖØĪR5>Ł:Eo óH’F„A^ Ķs–ßjZFŪøÆĶׯzfnE¶ŠÖŚ[k¼ƒvĒØĶ;Tø¹–hĀ»<*ܑȧ2LĖøežź9!CyršōŻ/VH-ZO³³J˜īÕ°x–6žŌźŃF­¹»8'Ö¼§ĀŚƈ5Ū+»Łā{!?ļ2¹ sŪéS'cXĖ”ö8ÓōʖāA5±…bPOš€<}+Ā<ąė½xZÖ4ū4Ŗdē’ėČŽ ¹„įķ2H¬bŗņVlāŖ÷6‘™>Ļ”yÅ"\-©ĆƋ›ē“¹C±{śõ_i’ĶpŽaĢą€Ķ6̬Žāf¬tˆōX4ČoēwĆČ AägÓ„.—«ŲėØÆĪŠ ©ćmD”Šm|”ėc],‰2!€®JćĀk ]Zv·{£ÉpøĒÖ°rHÖȱ­x‹CŗšÕļ‡õ 6 ‰œ³Ī*GP}AćŽ×…5é%»Ī¶å°ČlńßėVŖ-Ī“Åzv¬Ķn‘dx=r+Ļīü&öĮ5¼ØŁź2p“ż§cHÓī+hąÉi’płgڽ»AÕį¶ŽŚÓrł / 4¹˜„>?Õ_KžU¤1²īĻQƒŚ¼‚Ī÷M‘ÅąjæOļ Ņ)õ0œŗµ-;PÖÆt×Ņēx“ĶW甆ŗ?_ŲY¦“gygh—ń®ēhś±Ē~?Zį.‡O©]ßźhārc}…z¦‘eÆź $1Zl֑œŪ¬Ō÷Ÿ éæaÓŚhYÓćæzē.|ē^²¤+1åż+R%…¦Ó­4+rĮŅfŽōšÜZž³į]JOˆ`™J€ ĻØØ”–ĀTõ9Y|5«Yé¶×W6ÓŻŒ³¤uČķҼöņēūyŅFtm©å#ƒœcč+#^Bõ½œbĪõ¦e)Ė€GN“¶> °š¼Iia$Ó[ŒœHö£˜\¦Å–¼Ś«ĒqlŒ"?wŒsZ§Ä¶ŚdGķ!¼Ü‘…ꕜ‰’ œV΢ͣkœīŒĘøyµbīžQrR=ģGŹæ{=)$śšs"¬PŻ2Ž–e ʱąVe²†źå„9F¾Õ3(ķ ˆ=ķå>ĪNāJŒžu‹Ŗ[Ū[Ąę ö¼j,9-„÷q¬²(ņĮĒŅ®ŪXĪVHįž5‡ ~õŃ&—u¦[Esrā5u.n£„Gi­Aup±I ÄŲ#†uo¬ź·:l.VC țpwRqśVI[]6ŚöĀxʜŻ ūÕÓŲ϶ŌįH^(Ūk““/r+*]&éĖÉ/1bæÖŗ ĢJ-#9;XŽx®Vę}]üI:ZĆ$ÖJ”Րńžr1łU_ Ņ6õtøń©p܅#EkųGÄēPæ[;‹I<³_SļXŲח¹ŌĒ”ŲÉvŅYˆ³ķ掙āUŅg}.K‹pźpÄ£ŲŠQ—£OŖj7 ­Ų¤chē9Į­M]o`6Ė(‰"v黐śĻˆ4ĶGø–[†Žėw–ˆļdc­x]ŖĪŗŠ\@ćßęg>ł ”l¼i4¶R¼Ģ”UB…GµliZ“2M š/2'ÉlžŸZ ’]N„_Āžy>įÉ?Ż“āčć¹šŽÆqąó’čS–-ž‚³”ŗ’¹āž….õ+v™ 9\•'•5źw¶V÷ /n†Xŗēųj V<Pkķ \ÕœóM줠o”qŽŸ…:Ķmõ{äµø1Į>7a»‘[¤G9é6ŽVI"… ÄüŲ­+9P\­¬’x`zŠR‘¹se¦ų~ķõCż…—tŁĒ'ęløžąB°@]†Ņ:Ø'®QĖų¦O?@—HŽÖ$2‰QÉåqžGåXŅÖóÄ Ö­%¬h]·ŒGæįL™JĒ®ksivĶi±_“1ٱV“Ņ-į½’é5Ęö”6mÜŁāL@@8ć­OŚK\:¹Īy8Å+‚G?ā_%oüøć„ōę¹ė%øb¶”`2÷÷5”™¢¦aųję]OPqtŹĆĢ,w1ž•ŁEs7×pż<¢Ēk‚„š(ö9½vŚužĻæ°»„y’²į‘Ę ć^Ī:YŹßŹß>O#éķLњQ[½Ōi8i2¹ Xpk)śŽI…Ć„¹Įćš ŹBĆ盄ĆÄē ×i'†.o`>lŽTĖŹ/Z)[iś¢‘§ZžRųzžTĖĢW/y$L/PŲ±Ī5H—N²ĻW ęD<Æ$w—¬x•½µ“K»±)óvõ>”}…ę[ؕ˜eŽ>ļµy ®Ė™®UT;6āzäÓö%”Üi>$†@mļehbįw“Ü×~XŁi6֊¢wÜ\I÷‰§>Ō¤£.†„Ÿˆ#‚ؔߵ*18ē5ÉėšķÓb²Z3*[ ¬Ł¬w W±—Ź‚ŁYxrOSķZ:äP.›Ä1‰„ øm~µ“4궇9£ßŽĻlR[÷NŲ$!Ā Óšļ„a¶ŌÅåҬ“n$Ē=ŖįŲ£Ņ5]8k›kˆž×måł![ī öÆń]ž‰įŲćŅ“ņZņ'o1‡T98ڬbĶÆ•ķŒź\’xć>ÕčžńäQ‰īI‰ŃŠ©ĪĒpkX˜ÉjaZź±Ār×7ZœÆm) $%Ōń]$‚}C]™Uķī” 2”ć½D·$ōĻ éV«|́ nō5ÜZųcĆ:†¶.5SnņEŪŒīö•ĆGšüRń'†¼;§?GÓü›Ė–ū<{­Ÿ½_24ZŽŪĒ}8šbŽko'®zĘ“eXō /”u=r£­ų~ž)µmnÆ0Łūēō§ĢČ+ųÆVŸ@µ]fßDsĘ»H’Y¹€Ēė^…¹Åż¶žš”šE sہڜXkš ź°ķŅ[“†ē}k™ū‡m,ÖĒEuk“mÓ2ąŒƒČ¢Võ±Ęė÷×Fxį“»C1Ļ@k£²ń§o£>Ī@×2ķ<6=jn6 CĆ/-»Ļx©Ŗ†fĪ9¦Ų¦™ œ+g‹œ’½ėHȉDóżbä_j&%†H¼· ¹OLµčš¾¶°xu’ W»»Ųcå?J²cęqVW2}¢"÷,6€GJŠūO‘(Ģ čŲčņ- Ī“mH^§=ńAPBEń6ļ^žŠ1č¦ĪŻ%!$-Ė õÅZÓüR‘C"Oœ­œžų¬ęj•޳ĆŚź6—Ÿg!¾ąŹüŲÆO֓KÓŌ$¬¹l€Ģx¬Āę&‘yh·RjW÷b8ŠüˆŻ3ŲWć_ŁkóĖęµ°˜0l*ś{Uó±Ųńż#CÓµ>«$ rŃGä©VĘŽyČÆ²¼ žUŒ0;+Qqе.ā±Å|Zš®ā… å—ŗ€6ĒĘvdŠųŅŪĆ„؜Z„ÄE!¤ėG0ć3L±Õ5}}ķ>Ź/dµ‘%Hć?A_lhŠGy#ßiV¶Ś|%U~Χ;xĒåQ&>V]ńMœŹ¶óڈYā9p ćž+ē ˆz¾Æā$Ņļ­~ϧ,S}”“dƒŽx÷ĻćP>NēA„[@֗?nžćg–ä<ļķŸją5[ė­2¾Č­p1ųéīj\F‘ĪxRÖyuG\»>a—£ĒzćÖ½Ņ4;›[bx-.×+#“Éō”AØy—üC§éŗY‡(/$ˆÉ8ó8äW’é^¼ń&—&„cc<Ļ&K¢żčŌpXUļ’ Žö’GŅ­_Ä25šF ŪŽNßCĒ’:Īń„ž¶°’Ńlö#¬r'&1ՅqčwZŽ¬i6֖·/§įé/|;¦Éka9ņ$:ć§Æ­JĶlzo„dÖ¼óߛ; 5„Wšńžƒ¦Oņö®„ī GĒ’üI6®ź5ö—&’RBØųĀŹ3Ō ŚšTš_‰om-,įŁt¬G'*O­3Dzę·į«ģ[2é™'Ūŗ7R>VćšČšoĆĶÚÅõÕÓ_k²Ü°—{‚Ā";÷Ēj±2¶9xsįžŸ®ÜŽŚi±Įvį H$ ¬@ē·=źŠčŃjÉģĒnŹyČļłVr—C7+š/gš-"½Ō`KYKĆ[ó­æ Žųz-jóKūu„ņ*žé–@×ßҰ”YJęƒjń.¹ch!šxك'ÜŌžuæÆZ1ŠęūNV²   €–Ļõ¬ÄŁčōÉę²Ņķuˆ¤ū@\ÉĶ’ĆŌżkČ~&]Żh3·Ń"²Y4i!Y Ź®B9#åćė[ˆė"Óē°‚Ü[Ü­ĶŠÆšTq‘Ó&ŗO I®ų†6]:É`ŽŻŁ”VŲ3ēōü«X¶Åcē/ųE/üwya.¹g °œKqšI+/ÄRjSŖA ‚;TĄxö5b”-Ō3@™I['¦qWtŪM’WŽ}EŚ;˜AhÕ{éA.:ž³ˆ,lķ’I&{'5½¢ų²³¤Œv•Ā®Üņ•L–€©Éš–ŗœ±ŲŽŪÉ»Hr8žš+„ÖuĖ%¹ž14;ē$G¶jžr\ZŠä-%I¹šy—$®:Iķ]..5kƒg™ł5”6<ėÄSŲé„ģuKvµ™Xųå}Ķq ofė-Œr]”`äÖ³˜Ņ)jzœ‹§^Yéņ=øvCŪ# YѼEqgk X A³+H71_E'„fl£Š÷Ÿx²Öm{{m=…ŒŹCĘOÆéX#×,`ūöĀ=W\œbŖ&œŗjsvŃ“öBś+IYņ LUKu4%ü™ĢŖHg9ŖłÆ”7ŅĘ·«[hś2IŖĖuky!ĮĒ»yļҽ/Eų¤¶>ū>“ä隓Ų“WL+7ūy”C¹q‰ä’Ū:–³¬\ė^+Ö.õ Ją(}Ķņ®0ƒŅ»m#Ā>¼¶mćøĀČdrPg?×ėV×rγPń„žÓ Ńlį-ņXÓļ˜oJā.5}{TšŻ¾Ż%½™,’/÷”Ö7×C)K”gS°Ń¬,-üö@€mH$ćŚ¹ż#HƒRæµ±…ć··gÜ ˜žMTe܂_ˆZBižŌu‘fgµ‰O˜ųČLwĶvß²ēˆtß>pm–ź+Mčņci dć?EI3)O±ī>.ń]$±ŁK m»j¹~8Æ5Ōõg+tw0+Ž›²9¬\™’•ŹŽŽ N{Øē‚ʐŹwHŲ÷ׂüOųŸqāˆ‚ŅÓXŗ²šŻ”‚bsęœrAļU\ŚźlųsÄņ4%­Ü’[£ßēõÕx^‚ėBøš[³+Œ Ļ4¹Y“QįŠj©ˆLž{ē9=ėžÖ_Q¼ŌaŽVہ^*ŌlT£Ųōß E¢i$•TŒ~µļ:Mį¶³†Į»Œb™™Źźś„śµė Z,mEĘ9•Šš%“^n§4ƒb 굃č·®ŪŪ4#D…f„Č«‚sŸj÷ŸiZ¾ž÷×Y;H»±ļśU…Kń/Ć/i¾¹×õJk­VyŒ1ŚČĒŠs_ė¶vŗ-šT“khZUUE‰ćPę&{•§‡nåU†YV!&åp8ź+ĪüK«ź¶ŗßiķywFŖøäĻó¬Ū2IŸ4_YźzƒL×ŅM,ė÷Ū$ąWSąŻ._=fGHāR»T·csŅõ] «Ė”³CĢF>š=k—¹µˆ,б*üē§a\ņ•¢R ŻG»2®ß˜¦·L³Ś˜ĪŅĢzzŠ"Ź#Ōõ»ø †®[vnŒķ5¹į½wH =¶©$k ˜†0:õ5Ńg)†±q ĀÓĀøŚAĮ„š·‰!ÓlÓķSłņ†20oBsŠoČĢöXю#üóOÖ5)%Iå]‚ćabzPWµ9Ķ/PøJ÷‘IYĪ ČҽWįö©kup©ij’ønC„B–š”źž³įło®-¤ó$W/&ŽüoĮ©hicu iŒ./–=ŒŪĪAé‘[Ā] O”äžšŗ·<š²£K)2;œ“žŃ=¹®āæģmļŪK²ū,ʟt¶qøV…ßSĖ4=VžŽķX·ģĖoJö‰Æķę¶Hautźt5œČ‘VöóģpüŲŽĘ°ģoÕfš{ÉÉ.åŽ+3$“7’ö)ŒŹ‘§’qŽ:Uø5h¬ēŠh“Ķe<~TČŌ McR€Ė3n ¹B ~•ø¶6±Ā©*¼ņēi\sA¤eќN·įū;›Yīyį¼ˆŠ”źkĪōŲMŗyęaū¶ĻjRģUĪśÖńesp?w±žz֝æˆlķ‹„ŗI!åx‚kŒ–ęe哺½ŅĒ ^ ńÜg ®Ėū:2ÓČŗ…v—RTdńĒ4™“|7±ÕcŸQĀå¾nF9ė^Ń«źŪGgK.ܶĶõ¬äõ4ög–x–Īö=_s;"ØŚŁWŸ\\™®$†ęį– p23UCV ĶņÅŹń©<7 Ó¶“Į/šDrŚ9Īļz”1$rÖĪ3ėŠå®¤³&Õė•ĘqéUÅäOgw=Ä©oLæˆžŸJķŪĆ·pXH+øV$dć×ė”Fć0¦KŻRń-ŒjS 0ĮĄļ]ē…¼1­¼ā+yM²6HķŠ}*½˜Ņ;ɾŃø³{³rTœ6H }McÜNšE±øšår­éOفĀEā€×QÉohdW} 1]gˆm€ÓÅūŪC4ŹFߗ…cśzÕrįŗĶÖ£w<Ļ w8Į\t5—`ĘO7ĖŁ9ŻŽµ/Mšf†p·N]/ ĪN1_Sü<…4­ö3›DG‹¶ œņFž„y¢Ž5ÜV1–Š8+‚¾={W•źz}ģׄ"iŸqĘŻ£ś=3_ŌOüļūhAąÆų“ö[ńöø—:^µ—Ńfø~RąJĆ ‚=Ö†ĪŹjśÖmĶ“¶ņĶą<ŖÅƒōöÆ;ŌtA4×ÖŽQPŖdō®sž¢>!ųŁąw<šŌD¶ņ“mNCŽ„×āŸķÅš6óǾŌīJMØ\D¬$‘ŌcåŚŅ®S‘³ł~דKEŌo4=vŽK;ŪGŁ *98éĒJēŗ:9A—±+ÜVńÜå«.…6Éū½Ūļw¢9ß’UĢYϵlss‚āø–YB¬ø :-Ic—vf.Aµ)ltÓ}m(ļ$”¶ē#J‘£i’i)ĮŽOj‹čt§r²š,;Į†A•Æɒ#©ē>”ś4Łö×ģ=ūEß|ųƤߟSÉuįĶZāyĒ›µ­q÷\˜µżŚžĻß4ļiÕ£ÕÜŲjVÉę¾żŽ\Ų~¹ó¬§ ū¶Ń”8”m'=iń]5Ž/’Ž;©ąä?Ē0ü‰ĮZ#?Œ?ų.Wģ]uš›ć ~Š> Óų†ą_†‰6}•ˆĢ”±Ęwa½²kņ×į7Œcń‡–Ä4Wśż³fMœ°ž[Óµx8ŚQqó;a±źjg§Ģ³1ózGŪę'€iž›Åiūėź!RĄĄ«Ōē_1R6wF­Ć]™F3w;dā£Õķ!’Īܤ °¦w‚ķźOå^ŽÆ-¬eR÷1ü7¬±+ ŽG<śW·ģil-ÉżÜtÆøĀŹčłźōĖ‘ĘU#܄dō"“—O`ė1øeĄĘŽĀ½(½2]ާJ¶ū*NžhE`Čźk”»:„·ādEg¦8«ę%Hė­4ū?¶A5ŲīTķSéōÆ^³ž'Køø—CżŃÓ'AĘ_kŚn¢fŠA2ĮēŒūVF†ö¶w\”Ū€ĘšmO¶“[—åBF~•‹µÓ&rōēŅ·0ęÖē?­Ś[ća*‘†ĪyŻŌ;”r]UNr~š øĖ”…§Jž‘īFµvĶguk§\ĶŽfDägØ«‚+™6¹m¦µŚeԚ-A2R=™Ē¾kŪ~źæń)±®Rę »9'ŽōKC;üŗVœļ=Ó"4{KcéŌ׀ Ük7ŃŚ°”?:ō<ōĻ­a)j\V–gGģ¶~~ĘwvBøĻø©i:\^8›9EmĖŒÖ”äDā‰į‘ÆīćŠ;˜œō¬¦Ö.!Õ&³–-‘޺Ļ%f_ŗŽ6Ł,Ä¢Žõē?­Üł,ņD¹Œ×`žX„{‡fC–žU*#ęDž{ĖŁ ŗĀĀX®9Q]Ā\µ’l(Ys†öŖŒ™ź^Ö-žĖ[ģƒęükńä0k¶io Ńi÷PÅŠ|Ädd~‡ó«Žā8ū$ŃōĖńf·Ź×lø˜įˆōŖ&Ńoe‘nUĘ%OOjŲ¤®M„_ĻįŪTe·YŻFį¼uśÕ“ØĮÆM,ÓyQåł ķYL|§µ|9Ó,pÓ@ŅMŸ—®*·lžŃ©É+HT€›5›•…$|Ļāk¹×Qø“ >͜FGP~µ„¤C,˜† ‚8éG2v=ŽŲjöī®WĢŚ 3UįƟmä„MŠHĪ1ƒLøĖ¹BŅķ>Ń'Ś#ˆÄ[ “Ö“D“Gk9ˆ8„ē‘Č ©DÉŅ®ĶÜr8‘¤Vź#é]޳ 7āģ1nO9Å&ģgmltÖķnžŃÜ3;|”qņąÕmuōõ•mŹl[8õ„ø’¾…85Co–ī¬cŚyPIü+At[ckmsö‡Ėäć®3SČj£ÜäßƐŽė8IĖJ\Yš8ō«Š§Ó’³Ö=n6B dÆOz“‹4mnk^_=ŹåUxĄćżšć…ŚĒ9S/œƒŽµ“4Lé4JźŹk›är’”gØČØ/µéX²”I Ÿ›Ž”ćøŚ*[Į+\$ų-·#šģķµ8Ö) 8Ćv­ŒZ,ŁŚ+I}{s|‘ĀŲ1ĘƁŠWUį=9~Üu!ķ Œ°ā‚ąsž%K-W[{H-c¶Dl’ƒĮ®ŽĒDŃ4’>kwxŹ“žIć”§sB•¦ ›¼åRvvćõ©5]LŽšUŚr1Ž“vž™Ø›)&ņÕrŁéė\W‰žņó^Ó餂L“hpŒ‘Y9šĘ(½ŖZY^^Ŗó­OEnōgézv˜#·ˆG2¶'øķOŚ QC“ŪłT”ÜÄz×IoŃp£jŠŃIō8i®uūoēŠŹ@Cd¼cJö­"É䱚 ‰HdpGAžE';œÕ—„,tÉ'Ō4”$ža8Ė“ō f²ģf»7÷bS"ÓčåC¹ŃEįųn sL>lrHé^y¬ųFīĻĒ-©Cz²é芼c ĒØžT¹‘J ¾§,–všĄYˆ%Ow4hz\æiE½¼…œłč3Rę5Ŗń8ÓnģZŹīHĢ|.£b¾Ōmå‹Rž  cgŻØ,շѧhg¼wi6Ö—N¹±Šń"ŠDK–Č۟˜Ö‘‘œĪÖ=. ®Ä(…ś·r w«6WV֚ļŒn›±†=EY8ļj÷öŗ¶”46‚Kl“?$c=æųW¦č67·Öö×»“cõĒ5”ŠŠ9Ļ[%„ģ,RцĖ•ēwškȐ½“Ø9㨬äģl?±¾Ÿb×KnĢ$ø’"®Åo<¶K’įŸžGZÉŹę©YhE§ųfįŚHȉ_#5ŻĄ«mkó18<Šjädj^ ³Ó5øt‹¤?h]żśóŲ׌xžDń'‹aÕü—Ø “1 ·#ųG…jŒŁź¢M9“›[HŲøŻĘ$`Šć5)üč9!TąŒšŽęšWŠ‘4Ķįoć•I[p Ę;פéiLMpm8ē«UØŚxv+MXÄö‰<ĮwF­Ó=y…Ö„ ŗž£/•dmß.Ø+˜āµ]]v޾›+Ėj­„ pæZĄūs˜ŅYĄfb: A-Ķ•ÖDĮķcbצ8ŖšMÅÅÓEom-¾[å ‰.†Ķ߆—ū>IįˆyjT:÷oĆš¬‰¼g4>X$·†7ČfōÅ1%­Ž’V¹Ó®4 sf±¬e. Ž `‚ öā©ėzž—āj¶š{Fš¢"4-³8 tĻä -"?h:†­īµ.}j\Čå‰Ź{ĻÓĀa¹…^b¶Ø­€¬knm‹M$SÉao$C,Ą Vµ¬ļ©5܏!qÜ;G=‡LҌ¬3jÓŗŗ&«eolmŒ¬Å±'<Ššo}®÷ÄZ¾­:—’ās#c§į["%+hZ[‘%œBæpüŁ5ÆØG/Ų# Š»†ģŽĀ“Œ¬ŒŽ O³ pBQIÆ[š£Ak=¼r™ <ƒvќ –Ävš®»?‡|żBĶā­å©¹¾½*=7Åßk¹øæ¼ø¶°½1±żēR4ŗā1}Ŗė–RĖhć]ŪՆ2qڰ¼G„ł—óN‘nĻĖĒ$Š;$: =“,Øw…,ŁōŖ6š÷[×xÕp;Ÿz{…¦hš¤6_ŚEtÆ FG\«ńü«©ų•ąÆ čś¾›ā Éģb–Ż&ģ8ąćژo&³<1ÜEļö7qżkĻō&Ó<1y{sgoŹūĆīŻ»=3@Ür馕ó>åbpŻę½3E‹FF–±(db]Ąźi Šń“śŽśSI,W2ź©Ćńż+\¼ÓŁō»ˆK̊ Ē>“”±*¼ł½v3zzÖŻ³%¶ž²Ż»HYž_j‰öƒŪĖ…„ųecÕ~••=ŻŚĻö{ ī,˚„+ņ¤77hŗŠŸ'iÜ©÷kÅ>9м-5¤2Ś6”'˜<ŲŌćbö$ē=«E!Ŗg–Ū|@—Pń5̶šˆ-då3ņLÖ'‰ÖņļT„RwćŹ@U>æJ¢¬r÷wÖwi ™’,Ėž h¦¦#3ĀŪšhhNV:"’K©ČīASž™u­Ź:˜ĆĀß*:Ö2Z3}źńŚåęSœūµ%¼ŗŖJGąŒV·Ņ…n„.ē«ė:ž£įo¢.Ÿ¼ĢTĢųł”ōśk‹ƒU×uł-.$L4Dņzb‘Ŗw=RŃ®Æ,Ÿg 97Fjókm:RžMä+Ā‚Yœ{ B’ŠēēiÖįŠFé; +©Š’’xXo™ūõÅ%ł Ģńœ±O$÷„ø°†ūtė•SÜšE09oxbß[±¹ø¶…XÆ1©ĒŽ>Ÿ­|Æāķ¬%uø·I.0DŪ§Ž‚¢ģĻ"ÓonžŚmMŖAjķĀćÆ&ŗ=/AŌu?¶-¤ī`@Nęś“œzó#Ųžhņ¦£jn™‘U²Ńœ×#ó«^&e‡ĘN-§k9X¤`üŸŅ²ölw)Ė£O‹u.”5¢ĀÓŒå>lé^Cž!Ō.¾Ópßgv-ę’ųtØ.2°ĖW‹Jøøš#°Ź@-“‚{Wį_ėŚl¦)uę7tG*¾”/#ŃīüM<KwFo1pCw5©įĖ;;›yn5+XR°° ĪM2uü?i> ¶–0™B•ŒąŽēå¾,‡Vōńum3r’į@„žÆ­iždž(šfÅmźŽĒÜW›xÆķĆWÓģ£Ņ$tpH–5įG\ō'؁tĖ‹››Ė{„‚5ŠFĮqźx޵£ŚĀ\IqÜFG ĻN(1eĻ xŖĒKŸM±Õ šD”ˆœ”žŽ+Ł"šōÜhń™-m·³Źūūõ¦+œļÄč—ĘĻL]Bkņ$s&ݤ>9’õ× x+ĆZ}Ž€Œ;[•~S÷†:jFŠzŃZ_Ź·[ǵ6Ķ·f¼ļĒZdĮ'ˆ.Ģ1iŖ§fO_§å@łĪ7Ą¾*µ‡XšI,cŖ•VcĄ'”JÖÖüį]{P[Ū„‰%ĄįūC½Lb…Ķ­Ī'ÄŽš’Š-†tYlµXZI mHśžF¾KńæĄ­CĆZ”·7ŗé½šPZŻ€ …OFŖĀęgKį=SVšüK§ŲŪ=ć%‰DUėcœGS_%Z.°³ÉŖĻqäßyžr3dł-Ō®§4 ĒŠŽńŸˆ¼P·‰4źRŌ6p_šÆcŠüK§źńĒc>§möˆĮY6|“ī=éIiaņ2 éķšźX·³Č «c‚Żæ„akž)»ųp–m}ͼŽĀ(Ź|„Ļ~:˜«hĒČĻųĆ}sń£ÅŚmę˜é§i6–q[…\r9l·×½uß~ź¾ ń:¦©ž¹;€2~ōH ¾*ĖPŅĒ[ń7R^½Ż½ŁU`Di·Ū>ā¾nŃoüGÕ܋©ÜHĻ”łÜ¢€åčŽøY?µ.õ»…'Ģ!‰!~•ŲųkSÕõ—Ó£6un2 ¤Šr#ĶŠ”¶ŸÅŠi¶}#Źä»€ج\u"P;»ŸˆZV©a¤]¶3Z3ŪkŚö™ ųwNd¶ū8ūC9łCƒŒ`÷®ƒĆµ ė:“ŗDv×ńC&ɀĪŲŲ`ąö5ŗV-E#Ėm“M;Ę*Ō¼p²LšŌ¦āėk…‰Ē€Wgy-µŽūy£G~QKž½1Łaā«‘£Z=Ō1ĘģäŖøä)öż+˜šś^\“ĢŪäb[r*e+bhj¾$“Ņ]‡˜­,€®ē>õ£ųŠś[Ä3;¤[>źq¹³ŌšĶɕcÕmµ'}"īīkØįüĒ{c#Š ó››mcYŽX̓ʙ1Ø8Įö¦“ÜĘkSnmn[Xµ ˆ^ßĻŽ*d9Ą}ėĢžxļ^\·‹U×V{yä%®zt«“²3²ŲõMcS³¼Ö¼CŖėNŅłĢ²ÉÉ>ütļÅršf£įūmJ Y|ÉU܎9ŁŽ³Zī\`wŅxi|it4ķ6ŽĪĪ'l#ģłH©¬ŸųUńGŖŽĘ0Łl0Åk”µ}4éŚ\i¦Z¼ :tą ~5Ļjśžœ¼„›;œš>”Ä×Aמ5mOÚI°WŠHĻŹ"P8õ5č¾ÓÓWš|Śö«v‹q32‹dN[ NĘRV3bšÄZ„ķŠN±: wF'\#ėžyÆńŪÜ’ĀK©érZŁEo-Ąś*HåģZsØŪ[¤o+=?:ś3A†ļFµŗk…XųŪ–ž;PѲ<ÆRńXmRā)ģę®s•ąÜėm¼EįIō{é-K,¾YņјŅéÖ²ä9ŁāŽ—Rń_‰ļ-<™' Ų­œ)®¾x&Ó5‰&%×(<ßŌ §øėķ_Qoźz ާō÷NTŪ²`,}³łW©ü4šn•į[ {Ȭb‹QøB¬čp«žßZ†ŗ“K­KtšK.˜é"#6rp2+Ę®XŲ rŌ+Ł÷*i×*.˜M„@cŁŖŚ÷Ųōż8$ˆ“K.ā8Į^zW$·*Ē=£É§Ø†PŖn@ē'G„o]<¬7ĀąėÓéU­Ąą5ģ^\ˆ-I} >µ¹¦xVf)q™€ŗzŽ2±›[\¼šŅŽhr.Óé\ʖ—÷·٬„Pū‡>•²Ō‹õ x:Ö].k[ėÖ. Ž=ϵz&cg ¬v„K*ēq^Iü+Ugξ9ŠÖUmuw÷²¶b9č±$w r†+žZŽD#Štµļ@Š2šbš¬IĘł5ŠŽx* ³ĮŃ\\?-0'-õĻ„ˆ ¾šÅœO2źEV$&+֖-tW°†ōŚ\†(3ĮŸZ—ĘnķŁ$üDš¾£ ĶŗX‡š ŌňÜ;ž•ę~Ņ ‹Vøŗ× éd7mÄXgŸåG!;­:ž(5ūwŚg8‡„n\5Åõś›x Fē€O­CVŠ ‹ķ'PkE¶Ž3‘’·½géźž»GŒ¼OžĒ<×8s±ń‹ėp-“*©&Ą‡ 5}ŅĖĀ·w­Ā¶“,r ®Iµ¼]†rz—Ä-#mѶ…ž6@c`żµ|į©\č7zĄ»™6¼’|Ürr{֞Ši³éxGįżĪ†ņ+Ak~™m²ØłÜśU kEŅ“G[ßž6橿*%2ŌՅķ¼ėf#i"ܣ䚬‰bI<ʌ§pŚz~4“)³ÆŃą’GĘIŗyerO½-ę‘ØĢˆ' a÷€ŪÅŹGyéØ|¹Ņ3•sĮ5‘k®jÄnK-ÄĮņH<ā“aŹgk^!˜DYŖIŻĘßž½p7Vw—ļyČ$zŹśŠögq„Xyś`†9¤7JÅGŻkkIŅ&³Ā»4ŁA’GĢióic#§†į,ā<“cžWęüė;QÖą»¶{qåķ,väņ=Ŗ éhųuysöźs­­Ŗ‚–čŖržųÆAń?‡q¹«hgė?ęø½¹¾ŽŅrĪX O”ü«‚Õ.äÓ{XNė€<„L®cQu8›½ZFHķ¢†ę{ÜīR­ņk­Ńdæ0E%ämĘČĒ%sŲÖrFMt>›_’&ØiČĮÉéS–‚Ž u…ĘyĻ zWI1w(Ü2»IēŒš~éėVģŲKn'F] ķĘ üč:éČŪÓnāY‘Ž3꩹‘ČśWµü3ų“«ü0ń߇~%ųc[—LדĒYmÕOĪ$Vżh;©Jēś=~Å“‡ūX~͟~/č÷¶7ś“ŁĒi¬œ0K”NGnsōW¹jćl|²!$ūŠĘJĢuamńւš••×’˜Šd;€ą:ü©ųÕą¤Ō4ėČ Ė,ĀfŠāŲąt&‘ēŹ=ę[öäų«ųcÅÖś¦š4ūID’\j/šīĻ9ė_š÷vøóģX©įϵm–q3–ß|Äš t%·ŽžĘ«¤±«²īRAĘ3É­”“0pбo'ī§ł~~p¬)m·¬%ˆ Ä3œŌŹEĒp‰pR5f•@īIżi&ŽQ*˜¦qŹćŠ“¦°³Ķ+ϵ†×'(ĄŁÕ¬„D†6–F#qb¶Š7ŒĶU»m\š6¬ąe•sĪÜwÆź›ž ūUiž+ųcą][X'Ä6ˆškC1;į*ĄĒ'> sõ4¦“:#Tž„žų x‹Ć¶7r·h„ßƁ€Ä{śŪ{Ė¤žöeņŌžqĆ'’Ŗ¼źń4Œ®|ŻūažĪzgķAū;xŪįĢ­k>¹ œŗŽ€ĻoŽ…bc> žŽäöÆóć×|®| ųåwį½VMc•ā‘¶īõ˜Ę xxŠz“e”ōF§w›[[Ø6Ü,Č$ŒÆoÆā méz‘ŗŽÜ™ķ ĆÖ¾[“;.u7“ʓʱ¢®ąuśÓ^[“’ mšč0<0Ō°õjÓ*ŁŪ$R”²XŃKcެy5ļ~dŌ-≋Ļ3ü„ß„}žU‰ē‰įbĶżwJ—LqopY½×ŲÕo¶¦ČÄ Lƒ®zWŃSg“5©µ§¹øW-”#±ײŃ^õ.„”Ą<ńĻzčP"4Éō/ŻÅ¬[Ż_L¾HŖ>æ–kėmĀvwž×,MœSG=£"–ą†ĘG?QRŅ:U6“>&Ņt ÕÖn¬u7’Ę&tmŁ*Ć<`ćž+GSŌōhµ(4ØʱœƒÜŒõŖPG·­Ö™¢čö·Šū„ŠB “Ēš÷¬Ū=Mļ.®aŗ”įIē<ō«Œ¬MƓŽkīģłĒ8’>äb¾¬±æŅ5=%Ō,vݦV cjØ=Å9L֚8]r-2ņåZKKkXŸ)‘ Ē\μ‚×ĮW¶ź:¤w[”IµLq¹ąć±¬%PÓŁ»V•ćmcĀךB[Ąš“Ė'”ß/ÜČ9'õ­Ļ]^ßZ,ŃŖĆ6īqéYī)@šŻQŸķ™UšŁsų×Uiyc-šÄ‘ u,'ŚŖ˜ÉXŃ“Ōä³ĢźÆżŠ1€j5õ¹”ĘQWēéÖ¶Ū›i|’ą$[I~W­A?‰„ƒKŽĆ-.Ìą1¦Šłŗ¦©gÄe¦^I²µĶ~Žūɵ‰!óīąŌIΉsulÓØ;W†ĶtZ‹Æė2źwžMĶŻ¬C;ĮČ÷Ÿ‘¢%“ŌįŠä¦Ōääv£Cń4‘ė «lVŪ'bg©śõ­lRBųŽĒP’„CŌü>ū5Ó|ņdb6Ēņė[:‡‰-ķ tžkāqϵ&"¬g5¤W³éšŻ„Óéņ£†m¼ —ŠŠõżcÄz%׆lZ6€ź(Ķö‚_“ÓośÖi÷ón§wkqØĶ#łR8#i+³>%ŗ—FšĖMh ŗ”bƒœwÅD9”ģ¼7"źā—#MÜīĻ­?ā4 Øčŗ<60Äf³—īƒ‚ėžsZŲĶČį$ŃŁŅŻ„˵€.¬ŲǵrłXĢŅ(óQN2¼ćėA‹‰=µń½²kI"XÜeU—ø¬ÕßfŹ£;‡V#­Lö.1±×h¶2_n r7ŽqžO¶+Ž4 ķtčŅõ<˜ŗsĘļzÉ;ĘGei¦[$@ź£Ž:šó\XŻ^„…ÄkęDܜr kĢR.ˬ¦Ÿ“$”r¼`×O¦ü@›Rž×N‘G“³hÜ~é”H™$Pń‡†¢Ō=MzĘUš§lV8‚Ł,‰RK޼ō5DŹŻ /iV°jŗ†ŖÖĘVi<†¹’‰Ń@H›L{˜›™¼·ÉQĻź8”ŹyżģPĢ Q—ĄmŁż+¼ˆÉuk ±GVćMÉXé“Č·#J²+Ź9Ļ5Ļź¾'žĶü«§2.pŖ9Å9n•Ž{PÖ좟HøX§ł HTöO>·ā;Ƀ Į<…ōéŲ×fuiVYR“÷nFŃėXŹDdq-ć/']²yķŌ+V<ŽśÕŽ|EŌ­|I ŒšmĶĢ–pmÄNüėXÉXŚ1¹ę:®‰y¶+¦œXĆø¬8ōØŚā3É 0MI„ŗ©fšĄ‰¬±M“õć5>£«łP.ÅSƒŒžµjfR ·‰õ9­®-˜«Śš2G zW-®-ķ¤žš”ˆ`|܃TŖŹnCāBkŲCdˆ2½3Ž•įzĻڵŗŽŽ0į×°kUPitGµi"oÜC¢[2¢!^ĢśU^¾£äi9kqf<øĪÜ ;’Z“N^Ę“å½ŪMq@«ß9Ż^ļį6KŌsøpB•‘Ÿj ŁŽ-®4Č M)ܜ‚@÷āøķ3TÕUāQsŽĒiīec›ÖuˆŽ(ÕE¦Ŗ‘ZB?v«Żt–?*ź4æ Ā3¢O#[Āf‘’Յ §}ĆėN4śš\ņ¹īn[UžŽH¤GݹK1^•¤5¼ŠNpČĮ0j½˜Ī+Q¾3cFmł\¶y#Šćo¬n§d{ ·2€z%“ł0ŹÜœv5ŁZjPFŃŚ¼ Ļ€”ń÷j@ęü@f[Ńqd|ĄŠģü2ŖļnŖŹŅķą•Į –nlī^ł”ŸÜ†ü«FuŠ[{{"6(ĆĒ<Š!׎ZFdHā·n3ėUļaŃm x#D1°ČĄĘé@Ī.h”f9ĄžõrŠ*µ×+Ļ·jN Ž’ĪŻķę%,®[„qéÉØČš«:y„dąŽ¹¤£bœD·ÓeK^e”p׎¹M9īµ-FęŅxĢ2GƒøļłV‘‰Z`ÄŅą¼›F3ķ^‡£¦ˆņŪ…‚ći9¤ø-O6’ōÅ;I*üŻKśW¤ZYÄtQr„Ėę.HŌPjyö‹q=Œ²ErĻ4m1wU«·Ö4×!” 3S$%nŅ[\47Ź“=æ ō+GƒI’i inf!LŸŻśÖnÅs3‡ŸĆŹ×FņŽäLŖ3Ś¹~K4Q[€ņ¢ä.>÷Ö­D‰;d6ó46÷ U&` UćjņźūČ c I8lēz³sérņÜG$’œ0Č=@Æ\°S)' ^™ąŠŲ¢Ė^”oŌÖwiȧäRqǽq¾#i Õ#3BžqėYIšCrMOÄV‘iélŽnģg$×'”ß4󖻐Ćw<ā Ōģ“»ŪP—ai­+ž k7¤:喭”u*„m „9õĄƒĘv¾Lp „‚Œ3œšņ{;kƒ©ąZ;ĀNKśbeģæf³1(#pĮö¬?x~Ī-@ź×¤V*®G øŖŠŌVčkhś-ķžµØ_ŚkSĀ®¤¤bASééŌÖOˆt-R=SO pę fpß(žŗŃģ2†„ØX,wQĘļ4±0ņøł±ŪóŚųGĘSčö6ŗMĢeķ‘‹ĘG\_ČV&ŠŸs;ĘZäŗ­öčbU Žy…Ś,tyduß Aōؘ{3*/Ik½Ōf}ĄķFčµŌųjåÆÜĶ2”‡ŲżÓS7¢±Ųé÷sŖMb¶÷BĘ"7H‰·į^o'‰µ ķcW¶Æi r“p£sŒw­LŹö®®ÆgÕÕ^ķ‡ß=[üóQŪhOy8‘X'ĶĮnōÖC`²“ÖāHVhŸµBöYŅņŽ$·Y—v“÷G­1ö‘ˆ¤‰ćŪŠę¤Ņ.®£–nŠ»gcœÓę`i<~"æÖn®R)”°…@]ƞ;’1Åy’Œ®ĘhIrĄ†$t5#±—¤ėš*x&ļKµ°ūJęAę;šF:b“LоÕåÅ#ĖŲÉ,y&³r5P(xĖAo ŽA#$‘,€©ä3żiŗ5Ž©o§‹»ie޹ē”ć!8v6”ń 2F³,®ÕF+“ń q]]4Å]ŖÉäe]SÅS^ŚC„Ml‰ iåq“ø{Öæ„śÅ.n$‹t}Uv󷎘ć×~%¼–{V1µŖ«’Ŗxó{ūåŗĆAņøpØ.1;µht± ć‰.CŖ£(ēµ”ø“ÕīķEķŽŲdŽŸ)ģh4±čWśŁvµŠ ”’…@Ī+Ÿ¹šŻŻĻöZDD1.DØWśPg(ž©įĶßKÓ$¼¹h£†'1럄yÅoßźŚ¼VÖr*i1GņąsæÖ‚,y4ŚóŚ}”L‡BF+—›P¹Ó\ČģdlwčŌĻ‚YžÖ…UĀŹrLķbÖ¦Ņ-.bˆŖHĄ|Ǒց•,¼c©6·iy,®ŪX!%»zÖ§Æ-$ń ŌöˆŸd’5hˆbqČ4X·#‰k‹ĘHĢk'”­ŹīźkÓ“¤K-AøQ…ōśŅJÄ6YæÓÖ"½xъ mé\Z^ZÜĻs…ū żźb;oܦŸxśƒķB±±8$zŽā¼ÄŚVƬų«ZÖ%ŅKÉwČ3Ą²Žƒ½i£“ųOį„Õ|KöYˆHžįČĪÜsšö ½Iˆ]ƒn˜PIsÉ5 ¼M,qĪŠ‘ [ƒéĻ5Ÿ¦Įuk“»ńŠ҆ĢŽ‡J½óŁzcŒsŪZĄ#·ŚLŹß­c"bké¾!ÓmÆīōM$ąŸrc'ž?Jé#›AŌo<ū!n€}ćČĶI¬]‹ś­ģré÷:|ˆ³™1’Ć‘Š<-gāGi;gĪȳ€³@łĶŻ[Uū=¾éwŖŪe˜(ī:š+Ģn|A„ŽæŚc,ĢAĮ#͹\ä/_…UŒ"–ÉÉō®–ŹXlķD)IŹN3Ķ4“Ģ^Ż“,Oš{É×ō5bīܬ’fœ;ş”ځZĒŚ"~ŹĘŻSœØä׍x›ĮŅk6ójÆĪĒ'pąŸZeØ3ęx“;ˆüQ{i-…Ųš HŹv°źvöÆSŅn5_[Üźś5ŗ¾ŗ¹ū: ‘“ƒ‘ųӑ\‡/ąj®µŠž ˆ Vi‚ĪĄä~µróÄ6ń^Ū¤iö©³½ß²ŸCRĘ£csRŌ“ŻcƉŖŻ6i£`ńnĪ=3šó{ 7R°ņ–Qö‹ucf6ZĪQEź¶Ä@ә#€€Xū{Rųņ+½Fźāią†ĄE•~ńqõ¬ĘpÖ5½ŚĄģ`·8ÜcA€1čMrV?ō›ĶAōUµ™Ębb0™śŠm3ŸæńŁ.žI H3Œc9«š²m$Ń$Ó“ż>ŽGĶĻ ;”c ‘åVz•ö³ćż: jõķą‚T6ˆX‘&G,{q“^żāI›ģśći%īī”G[FĻR= Õr˜Ÿ9ųcĆ·ŽdŠóÄ ¶&é3p¤ņ=1ėŽ•Ų\ZiZv“«ŪŽ“¾yŒ‚ «{ÕK°ŽÚ~”«&©uh“$eņ÷’ĖōÆ¢,4«ų<1¢Œø2mE^8ėY‰“yNJāZ½ĒÉ ŽĆ°“œzdW3į’j¶śs„ŻĢ«2ĘUNÜ ßjq:5ī­x÷6W÷w·—ŅŹ%‘·nÜqŲqҽŹļĀž&Kk3Ø# äå>¤JN&ŃHāļSŅüe£\JĖä¤fß7˹G`|Ž+Äōkķī/Zöxį³wc©Ė{éIK”m©j¶–ś:Z•P ˜·øM[żų:&i„bĪ~QMHUŅōĻķ $‚[A=ħcœšé#Šģ| ØHu=@X„ø>PĮąėéOM„ŃęĆā¾”ŗĮ– ‰®4į>Ą^2 Ø<’+Ü~ ų6h–ך›yģü”4@/(¤p~¼ŃŹ€ń«»æ|<š-īgb÷šSøO>HžU$ōö¬æ M®Ė¦}b"7īĪM;ģhčZ-Ž™.±~–€jl@Ls’;’JÜŅōhmt=Nīż§·Ō®¦ł# :–õķAœö8Ż/P—J{øĢŒ‘«ą}üW5ć«›Ķf8RÄ\ZÄĄcę÷4 šÅ­š}ŪNgÉn2;g#…cŚI}e"y2 (Ē=sYĖR£#śŃę”ÜĖO~»¤©‘Wż‚ Ø^c2üOwØ^ƒd­"BGĢ ōĒ­dŚź0éÖSEo!KŠ›AĶn)#©š™µ×-.4ū‹ˆŚ÷a-åœwā³.<;ƒ§ƒR]:{¤RR/—ī“Ņ“#é5]RŹćL·ŌõځbyūĒsė\6“§ź’]O­[aʟ0īoŗ£¾ bmNŗŽµX'6¢{˜®·mFŒįB’3_[čŗn¹h‰§†ĖD.ٱ†żsNśƒ] Ö|āÕo™$ ,Ūó‚ zēaš6·ŖIkk8G°~¤©lkNtIķV_”kX-ō•Ž6T Ā·Ö½=4k-+D±Óm×ģ·hŲ“sūöŖ$ū33ƚrXŻi–ŅĪ.‚Ąȃå\óŒ÷"¼ ĶzLŅŽ9Ņāå.øĘ} ©¹‘Įß_Į£>$Ė5ćŸa/=Į®×[ŌµG±µÕ­Zę+0щ ü{óZB]ŽwÅŽ0šāé·°i‹i©źL]ņ²œc¶+LŃŲŪX¹¶1+’©Ą&¬G”j¾:4v÷z[Kę„6ąÄr{ę²ģü/­ÜĆs«˜äAR2Ųķšbp¹É3WøÖć’KI¢TqŪĆb½a“ŻZēJG’ęņ(?xģ‡nćéJÄN6ÕĶ–Æi½¢ß…˜±6qŸZņŻi„ó^h‰8*>čĶ$‚:=Lk›Č&.ČŁ^GjĄń¶ö_h„¢(nĻjfŃÜē哞Śh‡i_TµŪéŚ/Ł# x§ĪnųĘ DŹ™ŗśbŪ­³H B§ęl}śī-“Ū‹hę†4sœgv[ńö¬ˆJś՞·…§ kHƒŽ3™øŚk–ńN®šŻ„na;…ž8 A“v8-+Į"yĘÆt CcĪ7“]†4ėŖ4č..#c’¤śP6ģ{'…4Xķ^?“!µHÜē­t¾,דԼk1qc60NxļøPdęq>"Ń4­OmN+ß>śUŻ…ū{ÖOƒüSw7Ś ŗŹ,ŌķŻŽ¾µ* '©sĘ©Õž'Mš9>l(b<÷¬»?$ņ³]5¼“.n OaUĶ”^Ń"K½?EšģöPĶšÄl®ę3(śóڼćÅś“K!ŗ’B÷džłĪ{šL^ŪM }ę}źÅČĮšźõ+kčĖ5ћg ģMb×B\ĪvŪJŽŌL.ĢgSėY··p‡Ń YŪČč})œŅŃģōū9’V™¤“v½&Õ”h BČ®GAW—ĪŽÄlķt#•‹Į€®“ƶŠ[*ESĄnlL¤`Ó4ėbņJŒ{w€X jŹń©„hvsYn1\²–•šyõ­£+’»/ {™Æµ.Mņ3 $gÖ²ęÓoŁä°M$jē÷kŸ˜gÄŃīžńŌZ™qé‚X”!?ÄHĘ~µÕh·±ź 5½Ččq°µ'¦¢:K›)÷»\EhŹ„Æ™Įvģ½sÖņe¤2nÜFH”Œ”¬gkē³šŻ$‰ż@ŹcŠõä÷žÜļ*؃‘ėNR°F'+©Ém¦ŗ„…䙘 €NGµz…-£Žś4ŗ\6ŠÅņ­sČt#ńF­ż‘­%„øsk#įŒ“ž™Ėx”ļōČU”­ŌĢ˜CĀCļJ1ШùĪųWTÕ§»–XEÄ,rJ’xĒˆ?į4»ˆI*ŻM „y˜Ü3Ōs] &Š ėXļ"-ŃFŻ­ŪéZńx&F1Iq7”N_ęlŌĪ#p¶§«iŗ šŲ@Ń\L®HŚ1Ō× Ś–·eŖ]DnĶŅ‚Ũīū Īė« ­‹¦N€‘QJšEĀ}˜Ēąætp1ļA:]E‚(–ę+­‡8*{qU”2¬–ŃŖŪˆ¾UŹńČzÖ1Z ēĢ:ę…}%ŻåĆŖĶ(oŻ•9,1ßń®Y¬š å¢˜ć†®˜Åīe2ķžžÓ\ ®»ŁHŪŽ§ŚŗČķæsIĖ">Ā s“ÅjrĻrŻŻŒń@Œˆč„Ą/5%߆§¼Ó§kÉ¾ĪŽ¤.N7„4‡w9ŸųY5{=ŹGm Ų,’Ŗ¾†Ö2œĻ÷–1¼R¹ÜūČ;GµW#äŌÕucŅÜÜ ÉYœ÷ÆbmBŠŚ¼ė<@ćił›ÜŌÕŲśn{rįe¼¼GB*›ØypŒbŗĪ•‡Im£DŽf2ō„ ądŒńA¼QiK²ēm=Guš,’c&&ˆcwĖž½¹¦‘ŪN'ō‡’ ż·ōŸƒ_5?ŁÓĒ:ūŁų[Å ‹ajčÆ c1žŪz_Ųn³gäKr%aę!ūߎSČ?B?MXõ6–ŗ³Īoķ – »7!}kāĻ^†x<õ…`nb—hĮfģOéX“‰ųõūQüҾ x ÄŠÜGk6±³«;ćĶš@õ~•üÆųĖĀ·Žń&»¢źŗyµ»Šį̘?+į*=Ą5“C DäÕ£’ ‚Žƒ‚y©ĻaMĮHšs‰1Ļ5G;Zc$””pņ`ŸØ£Ķ–U+q9ó¦eä,hū£‹t‘"‘Ōņjf¹{‹“+½@@č=ź£ć~„„d¶‘–xZW鐯*µĆĶ+®dŲ™ĖG„jŽŠe»DŽ'VŒäń_TžÉŸŸą·Ę_ x¦+ǃD¹¹Œep¹cć>œsJGM8ŸŻæģÉń’ĖÄ:†µk ęMģkŃfݹø+ śēō5śs$wZZyń¤Œ¤)Ļ?)ļ\ubow!ÓVāŻ#ū<Ę)”}š?‡ŗŸnŲōÆåž ßūiډ[ć’„4ŌM _Q,¦ʘ®SļGBNr}s^>"6W:);‰ 5{ŻwĆZu†§y«ŖlPłĄ>ƒ½zm‡™£\ȑĀe•ÖAśWĢf“ŁŁ~‡w sÉ2„f)W# 8?żj¹¢Įö6ø¶)Ć2°Üč\ōÆ.›ŌĀŖ*ÅŲO4vĢ c½v¾ ń)Óuū{k© Ūļ ąc(=E}fM+ŹĢņ+DōöÕ.õ«ė™Ä0.~ųÉo|Õ`æcv/ĆņkėiK”ē8Ųģ“ł섲ø‰×ŒÖ“tKčtūÉįWM²å°Ē’}æJéO DéµIƛM7¶SÉÓVŗß„’¼XRR’+«‘·ģæ„"¹Ēxö]/ķÓ­“« łłG'ė_:jŚ{¹&P›¾9\–ĖWr]ČöŃĻqåģRŁ®Ö $† e02>ŃŚ·D“Yh“ķJ9¤O:Y} cßj¦(”·‰‘­S$©^OłÅ3œę Ö-×PEČ[* tü+§Öń¦X5ŻÄ øĄ>“`ś“ĻŪ2%ś[oø•AČļ]¦‡«Į¤<Ņ]Ś[]0R»dtcĒ­#h³Ęõ«˜eæžā)w+ɏ ®ÓĆeµÅ°øb²(;±×4!IMÅĀXC$vͶF&ќó)¤½[§ó̆BNąGėZÅŲåŖak2ˆ|³œ‚ĻOZä¤Ū…aÉ㚓īsž‡æö%¬—7 öŒ` `°õ©<; ¦y¾Ó&ō#Œ`Ó |‘Īc*€(€}MswF«ml÷Q¦Ūœ^֝†•ČtM^ņ]Fī!+«/Ģ0=3ĶG­ų~v»O”©!sĮ¤>VkŚxFłUo­…8cžG\WKgrdĢw`ł±ŸŗŠ”U“ˆ£Óķµ)/ Flä23\OЬ,ōÓ0“q2÷öą–śS7‡ełÜ1ŹĄ;ŠÕÓ“ČKSūĀ6špqgh—Žœ*ƒÅpž/Ņ®“ūI/ɒP@^¤ś -Źē¢Ė%Ž”¦˜ī%“¼ $Ž2ų$¹Øę¾œ¼ń”ØĖff’O1q»ićņ¬„3Ņ,µu‚Ņ9 tó•NŠył½Å|łāmBę)äT\^“„÷R‘QÓR½Ż¦§©¬R•-3=śV妍.v†÷kL¤7ŽČSŠŅ1īL¦mßxĀc Ahīx<ö®ZĘźöēQ‘lµČ#ÆÆvYćk™¢`·v0ÉŚzÖžŸ{{bŅ“2Āć4Ėr1“M[[Źy{9;†@Æa¼†×GŽ VrngB@Ū€@Ē5Ŗ‚9äĖŗ¬ ¦(X™’}+˜Ōü%w}}q;"y+–ŒƒŲ óS8õ9-GĀZåž—iØéę‘eżź?;S׃V/¢TŸM7ņsœ•“‰Š“.Ä|Ł£W8;†EK©Įc``g$» Ÿ@}O-€Š±ū-Ōr6Ń UÉųkšøKłäžÖ ”\ą`õ«”§xz eYīio2Ļ@EwVŗ%†¹‡PdpX§¦A¢ę‘Š=JŪOµŅ4Ča·³‚T½ ’SųW ©ÜYXߍ„SN¹;‡ńVr‘„ŽZšmŽ’5(®ŅMB<³B$ēµačkŠŚ(®b‘#,ƒY“4ģtZž©£64%äęEH’ŗ£¾}śWū"eš½Ē§$VnTū™š†”5Å՛ŗM¹[± ā»}ZUŗ{hlіEĪī»±ĻėšĢ£¢Š-!– ŪPĢƽsśĻ€^óɱ†sqõ;I9źć8–®¦© Q±īŚn½ģZ~£)Y®0X(é]¾³} iPÉ+ĘxĒ'Ó±'œ^iÖsŽ …˜ĄŒŠÅf[(¢PNÜöŖłĄåē{U„hį|‘°žM>ÖĻķčT&ąŻ3łU~ƒOßtˆˆ¬I#梱·Ļø ńÉ2v’£Ö±ÆŽĢŪ drątō®¾ĖNū Gz®L ·EW)ŻĄų«ÅߣśˆK%ŽŃ²™™s]ž™­i„01œäwœlRæS˜ńżäjz$:t’mĘRAĘĆĻŹ}k‘½»ŗkČšū±×<ę¤gI^$ÕGĪ+OšL^å9»š ^e;źśźņŽ b8ŪßėVģü†Ÿ(»yN¦÷¾ą “žśP\aÜõ;ė :/ %Œ&yÉøtÆŠ“ä·ŌīŽžv920ē„*Ę“¶iä\ÜÜIäķäԚ†ĻUŠēKŗµxžó›<€=©‰é©Źjī?„g6 ØjAīü‡mņ«Č֜w­ŚŁX·f𠒵ІKæ.ŽBAcšč%Ó4į<ˆa‚įŌ č\PžÅ;MONÓĢĶq žAĀ'J[-\^C4±Ś‹l1QódµjccÉu Kū'ÄOÄM <›°r+Õ-µ5’ŃE¤’‰N øÅDŃ)X”\ɧ3¼ź&’ˆÆ5Ėj·jÕ!š2DŒ›}1Y•©VįR'ŒÜFqֹǹxļĀ0rsŠFē©čzƒ)ŽH³³H‘SÆÄČī æ°Ó'¶ycb‡qĮB 4ĀÄV>2²ŗµ¼Óļ•؁½†p}Ŗ•Ķ•¼“eß#19nsÅb‡öuę¦īѶč'’­XZLjD{k!‘›~[Šzq śõõž·;¤m¹BNĘ8^zWZ×wS›xeß2–Æ•$ÖÖKæŻZ$ńĖ*\¶āÅæ^“ŗ‡f•ĀŹYsÉļPé—ĢĖś¦ƒ$RĮ/Ģ£89­Ėö[1§ī?9 ķY4W“98ķ£ŌLń»ˆŁ§½uI¬L£jø9'­g éŚÜ\W³ź-åE°”8ć>\/€ģģ|IāĶbŚ+˜¼”ūĶąåOćėŋž2‚Ö uķ,cE·GĪ œž¢±T/ü>ZÆLPiĖŌtz“6 #ĘŃ“’rēøśŌ2źńĒcs«„ʲ!Ęsü’*q±›¦k:Ę¢c½óUķƒįóŲ{~•ŃYÜ$ ŌG˜ņП—N”K©„ńīĆ_Ž+ÄKECę*Ē•©ž•Ķų›U‹R…'E2”RvØāØ˜ŚO†5ÜĒšÉ"ļ|Ń×÷Æi¾Ń¬ü=”$óŽŪČå7ŃŌj—D%Iķõ=FŪPŌRkø”`&üqéśWM¦j–«ewj֐˜Łńīg%`2/mw@n!…•²vœu«:U¼—pˆī!F”©Āć„lŒł­”>¬óLčҲ· Žœ×g§]é֖dÉ"„ĻšÆlP‘v’Ćö×ĻÓ¬qG³rœ}ļ§ėXœV6шŠC0CŸĘ™„Ī~ĒL‡Sŗ¢ wmĮAĒ5ÕŲĖ©xg^² måŗ”&PAŚxĄ÷Ļō¤g)tF„¾Óµ›CRµsōė¾YXü ŌžUóķ¤·7ŅŚŗd¦5e<ӚØŲÉ£Ńü9āM×si¬ÅÕ[aō5Śj7śƒ@,žĘQ#ČŻŻ³Ś•†aŁhŚüS\Ē%²©|H6–śZĻŖĻgįēŗt†ÕÕ žōd”÷ę„£hĘÅm6Ā gC†+—“sH…^¼× ė:&i¤µ»El±ØL'>n:ēŽ™FÄ^ “¼ŅŠŪĄfŗČŚAĘß¹ėßĖXg»ø¶’'ÜBģ}ØÕüa,i<;ĆķżépZŸāψ`“‚ FĆO‚vJ°'łˆó^³ćæ]H–‚é"s\ž¹Ļ§µsó^ŖkĶÓ¹O”†h °ūHšbŹĒžÕxéé}jgU]3É”+Ėr«@~iŃU oZĢ»’IQ˜cZ %Ņ4Ļ·:“ncēę|gmOā½7S[ū'fy"‰BoϽæ•VsŽLłāŗx'—H-£ąšqŽ€±Ó6Ŗ×6&ŽxRXJüŁ⹋Ķ7I}FŹ}:Ēģöų Ž[8ēœ `wĻgnm’ĘŲC#ØW%ŗžę©jšJĪXć‹q1Z§ +hN|!v5+06IgčyĪkŠž=6ża;Į,æ?=I­P!­ų É­^ Z)-ų* tǽPŌ|#mįė{iģåw’_šH‰9ÓśPL¶,č_:NY[xČöĶr)šž§„!˜Ļ†ó7ī9ļŚ—)’Ü䢺ŸS–åēc-ĆYóœž5ÜųEQīD2t_īœĪ*eXŹēi»Ć¬ŲĖ4*–#“ĀÆø¬_k7Ś'‰“ϰ¹ū L1å”9IōėQ(Ų£¤³¾}R˜€e ³gų…q7Śuü ”„“nK„=įR2Ķ£įE¼eĻ~qXó]_[q ļldzŠ#§š'ˆ5;Ÿj’Z‡VµĻ›“py~Ué·Ń*D×E@z¶8™‘¦iśÜl×ŠŪ•.Ļ!łTU=GµøžŅ’ŁōųŪ,_€üŠ ńJxb÷V¼›ĆŠŪĶ ‰ū¢ŠNÜõƲÕnģ¼@š˜R8";W#ę&€1_SšķÜž †ßP·‹Q…Įx\a›=ĒŅ©h6eüņÅtŃŖ MDÆøŚę—q&„h>É Z#|²’ WGa.£{w%„6ĢĖ>gšN§=ųؓǼU-éūe¼°¼‘«•äcur¾Õ?Ó®lŒ7 рŁ*@'Š‘õåĖŻIHŅŖćO „‰=ÅĖLŖeĮ޽>\P_9³.˜naˆƒŽĪß0ćŸzĀžĒEæFÜ#8Üżh6…ĶDmKāoté—ĖŃåŗ"ępqäØ^ ö澦¾Ņt­6śżį]•vżÖķU©™Åė—>uŒ:>o)¼³ģ_™‰õÆńŒZužnVõMō…ă9ņČ=1E˜0šžÆtדŁ]˜$YdL£3éėÅ} $ŪŚ[C%ä± !'}EI‹8Ō®Ģś“ {0žĪ„€Œī=ˆż:į|Gt“['٧Ł$XEĒ'·Öƒc©šFh¶÷÷ÖÖrArĀ!!aø€»Ö½ūÅ£ž½-µ{ŒEFµ¾R§9śdŠ>™ŖŪų­ Šźā1fulēÖ_Žtūl&ŅüŁgąŃ÷¤Ī3Ěõµ–„ßiGGŠ1G=q_*Ėaywā› ^śŽ w‘o“ø<ä^(;:ÅŃ“ßx†m[ū=«ć‹9ģž!tnŃĀą~Œ? h:„:%“źš¼ė³ēž,qÅkMąĖ+µÉpöņ¬›¼¼}ńA¬{Ż·Ći"°žo&t»U•vpsłUé—}ļŚ§ö‚™ņÓ%zĆŠ™H»›ŅX.§ymē\'–ĢxlzƒSŚĶq{qp–Ö­IūTą/Oʲ`|ūńrĪāŽŽ -)&}ŅX†ē±üó\Ćė[KXøÓn ½¹~HÕ£o˜śU¤­ØCMg„ézsŪM¤#JTóGp*­–³įy/&µŽ ½Š£8ēŒā \ÓōŻ 4ŻRļķ0XĶě¦N#`xÆĶßųÆT×õ-U§Ōæ“fe¬~p§åUØļ”_J·ŗŌ޵YƒČĮFќWŽ>ń#Ų|>Ņōæķ©źŖĘÉL,kŌ Ö¦R•“#Ō¤±XJPķ<ē½[_ź— iq+BmeœH¦hģzo„0ų÷Āvöŗeµ‹K.£t0Š +äœ×ˆŪŽĆ M#36Üwā‚}™N? Ļwrׯ-ø·n¢»B ‹› M+O·3«ŒŖ{śÖ”ĢåļSšƒÅš]Õ“ŗu’ķ’]× Ü6sœa_CųOŹm2ĘŌ1˜ĘŅy8­ ¹¬ĪˆéPjw öē“ģh?v1Ć ō5ėŽŅtō­RŚāźŃ‰Ānū§}Ķ2ć+Ÿ=ųŪUŃģ|C‡¢“ĢÕ m!ŒķēoC[6:W‰n|4š:īR…‹)„"łOœüUąųv&Öfsu¤Ė‘”Ś{ī"ØiéØhŃĒ(ŠIƒ Zįm+}&dš(Ń<ȜsąÆVš·ĆżF¹Ōµ_ B\(äĪ@š+.vKm‡§ų7Ć:ķü|-”:ŖĘfČNU@č{vÆ#ń“"mfKHtĢ$vb‡j‘ŸŌšk9T"R{?Ї—agof̌sēo_õGŌé¼sambšŠIńÖ„6ĒÜĪń̚—Ф½¼šnšRŅ6 ø8$V/†“-FĪŚHuß"ū’W'„RFŖg_& ńZI‰«e}i¶ž ½Ńītķ9¤— “·ėÉŖ°JW=fĆĘ>Ō<==õµŪŽų•“3Ʀמ¹ī{~5Äjž/J“‚ę-6ŽKŅI ć9ąbŸ+!Äņ’ųK5żz’O±½u‚ĆĢß)gŻō^³ą-#ĆH޽µLŹŽŪ±ó>“r殇éwś}Lja[&·½¾$„ldŸ§zßµÕ|Ss«ĶjĮćDS"H‰ņ‘ž‡ßŠnS:ļFæŗÕĪ­ėvä³±Y½sZŻ–éĪ[Œņ:I+Ó“”¹IEWķŪ5 ’Æć…Üģg 8ć5Ÿ-Ģ‹Z®›veK”G6€Cž•CWŃÆµ¼Ck.ŠVOācźZŁS:N?Y²}"[xAœH˜2ß{5Öhšœ3–;ˆŅą±W”¹m ™Łų“_†ęŻ[u[r£8Ą®[ŗņ,ģŽŽńįœĻ·6;R#œŠ°ńmŌ­o ŹžnŽsМō­OK}Vhļ§…ē˜€9$…Ŗ%sŗ†tČ ĪŠĘ’ŹćĶu{µč·U¬±@m¬ķ]±å#ŌśÖÅ9—ü!v¢ł®ÆeŗżŲĄĄ&µ“ķ[BŠoīŪV“–=1Fęt gzĪrč¹Čx·ZѵūĖ;Ż*Ę[kHˆĆœ—'ų‰Ē\WeØÉŪ–}Ģ3‚rVe{;lt–óĻØøŠK§ĶI«é7V*»]7py_­T|Č0|-©x]nķW[Ó&Å!Rr eX¾šBŅ5kÕl!‹ģOĀȱåž›[ź„ ŽĒ#⇑jÖ÷¶iŪć@‘ČyĮ®ų;L­Ē›$Ą9}k0·C—MÓl®õ [q £‘ćœõėž·ń8×ĶÆķZÖÕ>A9>§ń§v6ļéŗźvŚ–˜†ŚŚ8ös’[<·é[Ž z–§4„ꀮط ī467.‡¤æŲlŃ¢Žā7“‚Š:†¼_ÄņC”r·ņıŌR"ę+YZĒj÷K;42ģ„Wؒźj°H…®åõ P±ŽžĪX”M=Ģ Nx¼£Ę ØZkS§Šē¬“ =? ŖŌ>÷\ ĮŽNyæąķKPń–+iŽŃ”„łI®˜ĘčŹZ–‘šź\ZÜ^[×$#£ ŁM{³2"Hu-_*0ĖČ ¹Ģ–Ņ ŻNÜōŪŽ+œæ¶k˜d$rB¤v5“_S‰Ń&–ŅqfĒĢ|ģwnõ×K=Ć-ŁY$ą3;t¢įqž šw„unŚeā^3ÄUŁ[Lž‡Ž¼žO ė:}óCis;Ą¹ S5a-ē;m³tłŽžČ½Ė7SĖYš•ŌV؎Źķr_<šż*JŒnv¾ń7Ų’ęęńįK!€Ż2Gć[7ō:O±Æ™n3“#“éZ±¢z~ƒ©Ųźś,zŒJåĆcęōż+“ŌuK»ey-į&eɍC|ĶĻjŻ;¤‘BÓÄo}yæX¼óć\G›œ ćz_ˆÖ¶mjm0GÉ,Cän; |čM#äÉ`½µ™Õ†Ėœ’ Œ3]‰%Ō—płźńÅĪŅĖņ±÷ØzģCZč}ųƒz-“ž¼aHģžTžX’HpHź\ēĘV܎yfHå1ŗ†é÷sU w–ÕÜ ÜČfĮśUP} 2E|±ĄX,›ĻpéZ–<©łųō­`ŽŗR=wĮ¾9Õ|¬ųkÅ~ŌMÖ“‹Č/RM™fŲį°^ÕžŽ°ßķ+į’ŪöMšÅK9¢Į ŁźšŃ×å;Ąčsƒōj™źļ”ō%݌Bķ+Ēümį;P‚GŗOÜH 0īœpߝrœÓŲüČų£įh#ø¹&øKw0\+¦|ČČī>†æ˜æų)Ą½oĮž0ÕźČŽØģŻė^śŚ;Țćz£tóšūZlņj«;!öW(¶¢ŪźG$Ō’.É¢.¼«q]p9ŁÜéWR½‹ŪĢŪā`U±Ś¶|(¶Žҧ³²WŚĪÄĖÄ“†<÷ŖžŽāi§¼9Sœ‚zW/s(wV §n?b!µa%üfhßåč@ā½*ÖÓεiī§ åņ«Üе+ha*‡%w²Žćķ6ņ,jI qŌ{×}ØnšFŽfn#b“1ēfމ.œŗ¤’FY27ńƒ×žkŌ<¦>§¢[Ciåł'lœ?,¹ą1J ©šZn„£éz"}®ź!,0’KąątõÅy5¾³qŖźŖ.Ā…brĘFxż(å: ?i6Ö³ÜŁåšÅ{éśU ųŠźŻć³ćVP<¼qWÉ”,õm2+{‹•žėänĄŠć~!Łź:^”§¼QĶņeٳÉ\qŠ9t1“8©¬Ķā9-·Œ×&•}'˜–čc`Ē“Us \Ļ0±…ŁÕįćŌóž5ŚŚj"*Ī&2Į}jĮ#WNń ߯‹H Ūl˜ °ź+ҤŌ-@Dp˜~6šfź605żŹņ8o,V§ˆcäć"³tė{›”^²ļ*īŠ&hč6—öwwqÜ\;ŚHĄØcĀA]®©ą§†ĖĂęŽÓOg*TK;Ž¢‘–—2%ŠÉ ¬[Œē“^+āĖ —1Į%»: p1A'7„$(b Ä{ҽ Āŗ•Ķ–žö×D¼26桏8žtĶŠČ¼“WażŃr@Ę+NļHƒO‹ķwˆņœqBV4Rv1“ūx”ż±ss3Ē™IĮ$ē>Żéžńd——×W4mlß:»øŠÉ³HM’Žģµ›vŅ撦{;iCȊ8-õü«Ė|Qā.&»ø6ŠĮ0‘§E=ŖI”{mÓĪŁÜįsĻjøóι‘IvķéUryŚ: U3«L ĶĘ8®ļĢ•œ”P¤1ė[ŲĶÕ9mb DJ„0·Ž’f½wįŪźŚ”ŅŁŻ7›pŽ’Œxž“4 W8ļźcĆmg  \ź7ĆrNižoģ7³’[(F*€qÓ®hęŗ%åėk»d>ŅøĮRs^·®i×WóéW—’dBæ{ž£ō­#.äJ»1=Œ±…b“żÜzÖ„ę¶°é÷Bu…īUHÅ)Hͣɼ)āŻzĖ[’Žqös)ŽH‡@§µv^'š“6V–7śA”ĢŅ;\Fć!;üæ@Ō¬pš“ÉtŖčĄķät4ŻFåīAF¶Ł#½ó™Ö·s‰ĀĮ1lÕŁéjeŚŅy=A„aÜÜžŻE˜Āš,· æ!žø©mć»]FÉd&NXņļŠÅ«©X÷Ż0G%­¼Ł’S• ź+€Öķ!mn6.~“‹Œ®æ†5}0ŪjšUńq·,ØŻxžuäŚö„Ŗi.’ŽĆ12µKIÅ\W;hü;„^9Æ­„Š0ŻĘŗwŅ4eæw““KX3Źg=«NQ6;RšĘŒš“övы†E³Ī yN“,ļ;5źŗ21€`Ö24Œ»Eē‰dÓģŃā'bp9¬»/ŻYźļ~ŽdMĪüā²ē5;«^Åe†Hīį›Ķ]ĄÆ8>†²õ]^Xįž&E’VO›āŖ2ī;§ųhO½ė~īįž+Ų<#¤[i–ņV6Ą«÷qTUćBĘ? ŻŁ$1ĢīF+ó!ļŠłrWµ’ąÄŸ4¹źyÅL™<Äz®„²$RFĪUFp8É®U-ӈ%lČ8ł»š"ßQI­Išž„,‚ÉĻȃ"¶™§ÜZŗŻŽŪåĮķ@˚—“.£eµD S^ėcueˆ²}˜ĀĶĘā8ā“DĖm2ö;[é>HÕōaԚšÓOe‘lŅ@Ó§¹¬ŒīĶ;ĖÓĶY/šóŠÉŌõk[kh2HæxÜż)„bÓvŌóĶK_ūt.»$nG©­’ \ÜłM „¾<ŒS!£ZóJMjų_][™pŠĢ{OŹ»­;M²‰m¤‘BJ×īŠISÅwv~aÆUćv+Ī,n-ĶĖ4ģ{ō©’*;𤖷?fĘĻ”żį޹żJÕūO·MÖķ Ėddō5‘±ÜźZ§į3NŽY§¹ *c”ž§õÆ7Õ¼5qeŖ[ÜBč’MóĢ0AŸžµ4oMgmk33|rMTIēK„µ¶ŽI9=sO‘’zg‡m®¢µ’Ž@'čk…ń>™;HŁ·]ąœ1ļõ­R°šĶ¾×Fąœ §Šóü«Ņ4ėK{Kųd’uĻ ķLEń$šM¬zaŽę)šTóeŁĒ·ÖøbÕŚā"ŃXp»1Č9ģk71ŲŌÖµ>G@²yۈs\V±£Yf“(ć3ŲÖ`ršœ6šS“Jڃɵ‚’ śÕo 6£ØNmŃžPącښ3”ŗĮ«éÖ×ŗqŅ%K.×#®*„‰šæ¼7%Ä6Š—pdodŸ_ń§aĘG6Æe÷'-Ōit¶z­Æœ‹Š"äcqĘsY‹Oz×¶ė¶|äź yeŽ‚°ŻE±Åę)ä·šóżBŅÜĖq ,Ęßā ‡.å[™^Öžxvr©¬» ®.&24Ń“lŪ@'7vZń<3é’Ł0¬.",Kž88ž•f-&;‹5–4—ĶźÜS$ŽŃ”ŽhU#1Ė›#ÆÖ©ų£K×.-ķš,–ˆBæ<äž?@j”š:C¾^ l ғÆņQ#¬ž‹ž• jKįé4ūI”…É·ęŽq\mķž«,Ń/Łž”†wzeœ7²[Ȳ\°zŽ·Å`I­ĆD’(m¹Ž”ń«żF}D½¤Ń’Ŗc½Hō’"½ Ę-:+Ki­Æ$ž&„I'ŹA¹łyü*ā}rD—$€8Éč+šūPÕ®ÖO8aF3ž0*ā ź¢ŗ[kVó$ .w0Ä+3RS§\-%EĖvŖ1~G’Ćg5›41ĄRĒ;G÷ŪųfŽśŃēt łį½j$ģizBŽCöxĊV@2I=+žÕģąÖ!a`wzTß]J,čpŦŹcņŖĖG·I­ “‚5bX0NsųTĪė"x`Œ,¬į‚9ėY¦_³5/ujĖR°Œź– µåŽUØėҹ › 'ZŌnītĶ:ŪIBĈņ™”²yN?j¼ņZŁÜ¤`f‘±€¹ē­}ĆšlW&KŲļ^ÕśØĘåĻަż ŒtŌåuIą¼øV¶y’»Os\Ż…¾§"K-śtĪv’–kžQœUšoŁ”{IīYFŁ9ČĄėĶz§™ ³L‹‘É@ģµ³„˜#‚BŗE„•Ū<ÕR\Æ=ėœÕLń»żbM/QŌ-§VłlČŚ;טčßµūŻFóQ]?ģz’æ&<Ģ8’=h)JēÆéfžśœŽ ń-¤w:s(’|rä÷ś…gŪć×.nō»U“Ż)tŲ m°Ē„jµŠĒVÄ>½½ŃtXuMd¶Č÷¶6Žü~5ēĆ/xĘļĆPŪéWV××#ĖØ ļ<ķĒ^¦Ÿ(s#ķ=öbÓ“Ķ |QÖ¤·Ńnbheū<„Ī…Ą8Ī0HÆČOxRėįN·ÆųBóDøH-ļä·µæ‘I[˜÷˜n™Ę)„a¦AįÆM¢éw։i ]HpÆŻF{V·ü,½_OŃn4ū)a·‘Ų; æy½OįL™Fē©ų ĘWV:yøŃōČõ+Ł&@ÄØ%9ä×e%Ī”>»{Ø_ŪD°²D«¬sĪ?ųµÜgV“Iøß²Ė¹bĪ8ņGćXŽ"µæÕä·{„k»6ŃŌ7­j„qN—n–6 >ŲįEĖn| w®j÷QK_:éņЌ’qĒ4Ąē’µģo"XŹ0łqÜ׏ų³\ƒOՅ”Y¹p½µI“:Ó]{;&g³Iäf2H šé4«Ė½FT†éV8H'޹©äEF}˶ž ½ń‰-!°+ ¢%ŌŪ2T*õ;ļ K§ƒmc {_,rĆžüSQ±«ŸFr·_Ū/‘os;”ī. ö® ćJŗ“ÓļÆIW„ŗÉ7`nć|5įcY&ylĖ@dtc½t¶¾ƒKńV©ŻKEĄ˜ä’W/Ø"¦é+ 3éø4=;Y–ī÷OÓ­ćå8Ōlżk‘š„į˜5-Mo²ŗe“Ėē…\eģ3ļYĢĖÖzļŽlō­ ĆWZm‰‰–I„`ć# ~"øĶRņūI‚śņĘ%y嘾óž[ėō nLŪšĻ‰ļZŻdš\“[dńQZVڽÅŪĒÓ}ÄaĪīõi« ˜šéwž¼óÅ$×S™<  }Ī9ā Ņ4MV×Vź$9Ī3÷Oz‚łĻ@Ieóš¢0¤÷õ®ĖĆ/imqs$®žfwö„u&R¹ék%¾£hŃ$eīF‘Ü{šłóŞ7¹Ńuō««ŽXˆĄĄ$Üžu¬ 9u±īßu«xV¹ōą.0¢³cžI“Z?¾!xƒąßù“F°³¹ń-ō‚;yČϐ­Üuģ ]ś(ŲųæĄ>Ōu-nćčōØJĘy‹ä»³‘ŸAé_A SWµ– *$·l£÷d¦Z•Bš×†µŲĶ¤Æ-Ņ# åϽr¾ųg¤ė—^"ZÜ; &0XRrH9ŁŃx?Ą~¼ń ńwؗ)Ė2öŁÅz'ŠcN¼Ótż.Ž?³ŗ˜©ŪÓ­sŌ©®†3—CŠ×“Ż+Fón4­B?ķffln6_μsTńEÕ¶›†Ÿ·‘_2ĆÜÓ5‹c¾ŗžj}Jfø½·Ÿ31Āŗōśā»] GŃ­U<ųvlR<¼ą6kXlh‘C\ų×iąłÓJÓü!b²¼b#‚wżüö5J+½WĘ·¶Ė§YDz3ČQpÄõ’ʶ¦‡Źz›ąĖ=2%Öf„¼æ:Ü»׎ÕĪų·^‚Ä-Ž…,±|ŪY£É'Ó V€“Ųå&ųcā¶ŸćŒYi×±nņ³‚ŽÅk†Ōé­#ŒŃ×üØ-½¼!ꁛ£ØōķĶ`éz3[ČF’ęhßdsOŁ—ČeųƒTń}†”;’g­…‚ ‘M’Y›¹5äės=ń’)Ģ“īl¹ ŒœŅq!ĘĘĖų˜Ś[µ„°pÜ÷ÓųCĀĒY˜]ˆĖ€ėĘ6ŒóPFڟRĒąĖmHūMŌĀI™€W:ńOhjŠ]źÓ—Cb”Ą¶*œŠ¹óNØ%P‘cćŚO=‰«¶z«ĀčTņFØ¢žŚŌuK–ŌŻ£}‘…ÅTzųVģs\Ė’MÅšH”ž‚’¹ Å<ÓFYŪĶ^„j5‘·C8#“ž•Ļ'”‹9Ė©-ļ1’Χž8®ĆĆz¬JÅXåĆngĻŽŸĪšVШşHé>#Ó/ōŲ§ŠŽŽÅķĄL1ĪyĻsY÷zö—{0mī2C°5q¹Ŗ*[ßųw[ ¦ĒūūØ\0¶‘ŸQ]LrŪŚ¬–ßdf”` Ē!Os[ʿȓŠÜO>TqĮ‡Ć.>÷¦+Ę~"ėÆlńGķF}æ Ę1ėG1<·ŲĀÓułī“rķ (8;½kƚü֖6™v²ģUżóÜżjF•“1ōŪŖn$UŻÓ UiŁÆ$YžqĻ"“‚ņIÄ6ģ#¶w ģ8 żk~öĪE04rc޳ØTb3j¶ęŠLõéҲ£Ń&Ö®'–eök;£d¬7ūEä;ć‘öķAÉ•ŃYü>µ{6ßnŃŹĪTĀČĒ­kˆŃJĒŖiž}2ŽĢ8–2„EĒNkÄWö–†AåŖ4_u€źkY;™NG“ŹÓ^ŗĖŁBs·:ųfŚĀ9µ ū˜nv/AŁ~@~× ,üoį[‹‹id•!kmįrŅDsĻįŸåNē‘ü²|Išåρü[®ųRž ‘¬¤*$u ²)ū„~}kĪŽūY w_AŠčŒL&ś qz[xVfsĀŖÆz“S-Š.Ó¾NŪ²9µ2d-m²å¶p„īmÕ5ŻÄ15£#nć·“Š—.†}J’¶ÕŒĀ”£<‚h•U¢ ƝŒ³*£h²Ō3Ę«»“¶8Į©ć›jĪŲ ņōĒŽ é‹±ō/ģūń¢ūąĒÄ’ųćI¶XćūRC*ńŗŌżķŻ:uÆī»öBų«¤x‹Āžń†‘«.ƤŽAs2ŒŖ‡®O<ūūVS:āĻŌĶ+P‚Ki,˜š>?Ž_Z±q«}›÷k " wןU1š_?Ų¾×SÓ,æhæųuü›°«tÖĒg½'ę. t uīyÆęßį‰ō×ŌęŃ/µ „%crĒäFśäW‘‹wƒ¼Y蚼kg=õ“SyĻĮwséMŠÓ[šÖŽžŲ‘.D@’•ócfkwŠō-JÕ “óµ)ļ^å†X3ōśUßh°\Će{o RJyø>ä]8i$īeV:žÕF‚ 1I*@Ģ8wČü=«Ü“Ūųµ)-ä·Ż6 ‚x'½}®JQM=zvv5Æ-|˜e,Ūī¬Ųī'hŒ›”Ŗ‘€Zō`qJ6:½S¼øŌF!‰ŸZµoā9%)ŠŅ.ķ€/=ėBMFöxćqPŒsŒgÕĒ’hĢŖŽb» ć±  k˜Q¼8ĒėVõ^łté"…>u] gš 3³»¹{8ćø¤~„ōÜj•ķ“pŗJƎ¾œWA³d֖Ÿ¾K­ūłÜ>ķz ÷—v†e% … ŽŖ,Ö:Ķχnˆ’K©ž5w`ņ„U6Jn ž¾‡Ąę“V¹¾¶;‹H¾Ņ«ō{¤ŠŽ ;=YäVW·å!y½L„ŠĪDߌl—¬1åŪŽ ÷ĻҲõżB2Y¬­–p¹,*.c4gĮiń-½ņcŒ9jļ‘e8Ö":޵q‘ ''t–‰$© Ų”»ę³ÅŲEdpĢĄć„>s¢7ōū7¼T[;—‚|g~:f½ŖÓĀņßYAöÉ”KˆĘŒįqĒZ^ŠŚĘN&›÷PĻz—A×’žj'ņŚSÜf;2;Vˆę©¦†NÆØj4Mi9ŻņžzŽÆx›Ē70išL>by̤6Ɛ} Ø19ā›ėø6E„ņTdā¹Ż^{©…17]ĒŸĀ€3;YŃ·ŗī\ĻJčņāęĪ·…¶«ČØõ ¢<#¢č÷:$rź6ńyźĮĢŽiž,šž—­éo%¬ńĖm Įć9ćššpŠćü5m ųN ~Ū VĻ3€öݚ±©¼vÖ·7n¢r)ĒėSĢT¢ml >õBż5™UÜžz‘I-ÖaB!żėvėz×AŌ%Ū¾&‰;±øųŸz©udÓJå¦>õ霦ź7vFxĖzćµhIØ4ÓF$WfrqҘŪ5µ-et ŪØČH£!FzēōÆø’fEūDĪY~\·SHG¦ųFÖy<;!ŗ{X%0N(ĪaY)eĶ ˜1™ön%SSÖŚœÕŸ‡–źęį¦p‚Ąžzt®³LšzI¢^j?hIx=łķD®R8yęš ŲĪKĮĒ8¶2“¤71[±·^øźĀ±˜#Ō$“†ņŹ ķQąf@̌yĻKfŅ›ŖøtĒĶ(Ē«.öŠ«¦é&øMŸé0¤žXžšmÜś„ĆĶ|n§@ģæ„j)ž‘„Zˆäk{‚ąóŽ1隧ŖŚĮnD,Qb'=zP G=®i–m2yWK:tĀž* =1U^Ų›¹\u5•‹LŚ‚9l—ģĄ+ŗqœtĶpZLj®N¢śšr(ÉaqžOÓüö©öƒ3-®™1’HEėr6³ kÓ<9Ø\kš-ķŠļSn¬zt'?JWø ŃģäÉøįŠ€3޹ĶkT»Óµ†y®WqŸ„[ˆ’]mjöīŹ[©&&~`[„C¤iņkvø™eU-ĮĒõV4Œnuw^Ó¬“GœČ­tƒ«Ž™ ½’»ćiģqŚ‚dŗĆ]ĀĀŹÄa^®5[T¹HcW…ČVž˜ļPēŲÅĮžkw©y³ˆ.6O$×9}*EpY6…'ź\Ē‚č¬ˆ]hĻyĶ^ŠÓP×uuhİ*F6ƒķŚ®14=²ĻĆ7·)§6£4‘y œdóÅrž>ÓmāœÉ‡”ڤ ćµˆYšžÆÆčzu¶™:Å*įvļŚXgŌs]5¦ˆš{[Fźńn$œę›dJżCŃ#²ŗ—~×W­yNJµ”Ī’} Ž KŸa(¾§= é‰ˆÕ,­ƒ>ę8““šĀń?ˆÆķļķ.ļ ø•p‘…Ę0='vĶ čµ‰5;;I²ŽbŒk¢Ņ¢Kˆ;/ĢŲĪzT3H苶®‡s¦E© N©‡O-Qj÷­)“g·kmĆ$ėHƒˆÕ.ģ®m/RŽ9 É`Ēwž•cĆŹö‰ŗ%ƃ»#æ½3 3F}bī-VkĒøä|„FØ3®é-ä Ø²– ž¾ųü(YÉÉDĪfÉ墷ü-§ŪßĮt‘žīįŲŖ©o˜Ņ6/évš„rx_W‰_LY’x¹würÖl-µ[Ż?F¹–;q1Œn0õüØ5Œ®uRjv6ŠÜé·ŗlņ³&žYĄ>ĒēZƒ 3CŠē((]#JmbK¤óÄm‡Į'šõ’xF}·’ŽHšZ±*Œ«–#Oć@§š¶±\‹{Ńylœr0Ų÷®vēĆ?ŪÅsĒč^Ā]Õ¢™een½j;-!ę¾Y`‘åG0ū¾Ā¦R°„ęzõ„¬öņåĢW)ņŽā¼ĻSiŚAjä³ÆĢ ķM3­Ńü›ķ’į_!ń’£ŠV/Ł [āÆ*ļ~O4ĄõM+ĀRhKq!o—»x&¼Õ¼6ķwy vŖ–ĮaĄ wčyż?JÜ`›%ĄrzšK¹žžhŁ$@éė@Ž® u$ŠÄØĻĢO«Z½„„—Ų’Ņeø‹h. ”śUFŻNƒ¢Ņ#²•./"†Õn@Ć,ŠeéŒó{ 7PøæÓ †ŠŅ8UszÖÄJEm3Y›Ur’©f#®¶ĀŠŽC°Ūžóv}°*dŒŽŽ-V;BÖĘßl¼r ŠéV=:ēoŚķ¢»×? g½fŲ“ųŠŹ×ĻÓ"r‘ķ+ŒąX_o݁T›Œąćøõ©7ŽĒœų§PÖ4ĶJĘKW"ݾö ĻQ^ĻįYo.ķEä“18p4 äž#kvš8ŒyĢ/.#+—8ł½æ ń; rå'F’>Fzēփ)īk]Å5üxć“®­»Oė÷šE£čńnžL€r{äō昢®oIi=ÜMax»eˆ€Į†>aõ®»MÓÄ[؎6•ęļH¦•¬cϤĶyxŖD7@üĖŽ:ž•ĶŹ'ĀĆ'¬ Ī"÷Ä^3Ó-®m4k³¶ąįĀäĄ¹ÆFš·‹mµ61Xnā;qĒ»Q(č½V{›‰ķćIÄĄ³ķē5•©ŻłvžS0xnēµd˜Éā]nŽłd±dŻĘ®»JńFÆyµÓ˜&==č#¹ŽęāõfˆD$ŲŅKu}gnmāMČģ Ļa@ˆ,ßķ‘^[ˆ]®1ĘG³³&µ•XŪÉ ±įHļU‰ģSY%In"ūŪ°ø#‘[÷ŠŪ[ibåexWO¶1<ėQ¼dģ±FfÜOšzźō{Æ*)ž4gwÉ`{ÖsfD77sLLE§ߌÆXĻ<7ER€üŪŗąTņō=CƒJŌ·ŻÜ«y’p€ŖŚßö&ÄV/ i8QĪOµč.S†“a«źPĒ$‰½Ų(É®ĒM·Ń¬MŹŪ…ū[9R?Ži³~(mŪ˶‚“$īe-īMgŚčP\뉖sņ¤‡/=3A¢ó8ųŗĘĻÄ–oFöĄ+·foję£[/Żmø“8įsŌf€;ķrŽĒHše„–™a3(V!‚ćŽMx.­baó¦š<Źą0ļŽ(™Sچ§āū+«ĖÉa† ĢDgBŻZōļ[Łźo±­ÖF@Œ½9¤āuu”鎵ie’ä²l$w5åž"{S2ŁG,Ģ1`ģń¬Y²w5-.!³’Ī)Ē6ÜeGJæy®Å– q*H’*°<ŠMē|KāK ‹ˆmu[ˆ”ØFG 3Ÿjļ<9⻩UmŚ"åšFē#·ó„ŹD„г­Mjd·3<ŁŽęŗ»=8Ig)h o÷AĒėNĘLʟHžŸÉ-·®?©­kO¤`†wuņĮ;Fęķ@”NOE–ś4¼YīäøóŹīʄōJæ-•»Ż3o‰‰ŲĢ:š¾`q=Ā7?g²3ŗCz•ņóžqé]žŸÅļi4±CmqĆÉldØ=>•¢f|ŗ|Yų?Øxb (õ7·ū]Ģ"uP܅÷÷ƓuņŪSK–²•āU N·¹Q¤OAšĶ˜½ŪĀ©k²2Jōć¾+•ńv©eą««!¦éś†”Ø„³ĮjAĒŁ™€å@5›ŠHŠŃ'×ßį}M®āń#īx%‘@c×ļ^•ŃxsÅ:އįūˆ5™­'2/€7;„zu?­I|‹cĢüAā‹’αI%Ŗ7Œ…šF+¼šŲߌ\Żø™£Œe@–éšZö›öĖWĢČ$eŪÓ<{×ĢמŌt™5ž³Åęm‡ "ś’?Ź‚,p7×IāŠfŽg…—ĢÜ"%Aē‚ßҽBĀļEVhĶŚØ =sŚ“Z—RkwŚÕŽž·¶åķ¦åŽVOĒ<×Ŗų jšŻž»w“ŪHĖņŽ[?Oʱ#pČeõ« Eīgk’­ü>§£oŅ́lā'Ģż«·ųIūOųĖÅślŽ&±†ßQņ¢’³¾;Ž€1?C™—%Ļ„­5}_[ń„®ų£ÄŚ{»JT >NA du+äŸjŚwĘ=Uųgwgc¢éĶöˆo¦‡÷ĘT'7P:SS4å¶§ĒzwĄŻvÓÄÆ£}öĶqēęópzJÉų‰š›NŠnd¶Ń|Yc¬]ŗ‰Ślłyēo±ķķTirĻĮ«ūżś{„Œ:DžSFäķoq^שk××7WššY”ÜK”ц,5Å«ß+­“L8ąäÖ¶āć¤h e«éö÷721nĮ@ZQ¤Ė:gŒtćis+B„hŲ:dą ~ä>8ńu¶³d¶Z­ĶØŽ|ŁHŪ½qĘ­ƒŁBŚž©'īaAÉϳ²gŗ»‚ęy6n¾{ŠfćmTv—=¤~pł€[¶Gz”‰U"Eėņ·z yzÆį]+ÄZ-ŖĻģQ[Ü6'Ld²q׎Õč67Įäy¦0”wµ2O”vLā|Tś}Ī™ķ°‹«Ś{z×(,mļÄ- ­±yäž•fÓ¹F֚×Z|Rµ2¹(:¹]J]kSžŽĀź# ÉrČĪŽx"ŽV½|:}CL³¼‚öņkĒlłlNøõ8ė’ׯ™>&ké~,Ö Óu7’'U,ˆpƒ“Ūև1|'āIęæÓŅuˆĢ?vŒR}k®ńƹyeŖĆ¤yĮT·•ƒ×ŽjA…Œķ%¼–Ķ!·.æ3ź+¦Ńµµ±†k÷O$Œ©;˜~ŌV”āŪEŌ-Øqóó;P¾!ĤQ*\oĪüņG„Lė-ä7Vé"3ļ=ńÖµmŚtœŗ°ā„ŠæCÕ|1ŖĖ¤Ž†’»vĘŲ‰įæŁĒ½xG޼qā_x‡ÄRݬÓV܏–< ÆÆ5qDÄŽšw‹ōļ…ž°ƒQqę¼’³±ķ¶»[æŚoįWŠõOģ-kFŗūl ;ĘI,O÷±SfmWǶ)mužŅ›M°–-јņNÓÓwæ5ĖųcOń®Æ-ē­Ō%B,{9SźM4ö°ĒywuŚ­™±`„k¶?‹>õē~ŗ ų‹Uk{©$µßŗDgēq럨ÅDž‚•>‡­|.ń?‡oµķZ+Ķ5”Q‡kœ`žœsŅÆĻŖŚxŗēVøšģ}oo,ˆĢ‘‘“×éļҲ2”%½šżķ®£w.ēgo˜«Ę{}*9“H5#˜”]3»+Ą¤ %VŅ VwÓ[™ą(Ä óĢW–x£RŸL‘dČŽ#2Ķ\ecX-Ņ­Æ|Mzu į3ķ|źōÆŖ>iz•½ÅÄvj±Ł[+Œ{šŅ3‰ÜN†[ėėūµŗ¾Œn‡+€õö­{mM½±K¹āH)4¬1z¾vg'©å¾;ń‰šĘXķ=¼@¢ŲWĢÖÓÉ©^|–Ē98ļW`§Üæ¬ų6īČĮ=ŁH¦` ó“óT-ōõ¶ŽX°œE]нևeį›Ż;L{·»€™6¬‡/Óš®’Š×^·žÉŃZY”uļbH#ŠÖ AÜ"ń¾µ} ĻrŠ˜ĢGņ«w>4¾ŃŅ8Äß4„ŖČ[8”+—ģµ=OĆZķµĪ•»³ 1rķ?ńté]fć8t‹ÖšÉ¤7VSžł­9t Eć»ėķFēRšņi!`NĀzZį¼®ŲkzŒŠ[Ÿ6häŚT¼EdJ—sŌ|e¢}š&ŌO’“EꁞUOjłāMAm¦š+wo'wŠ•~„»²’ęŚqĪN9ö¬'Xø³¹ 9bĒ‘“õi×ź:n«ć[X¬c¹ņ®7cpQós޽ļįgĄ+ėoŖėš­½óĒŅ# ½x÷Ŗ”“hõķNź [ÄÓą†C¾@‘‚«ĻZŚŽóOÓa2c1=×#5åBé¾)‚ņŪQ‹Q i}!$) ķō5ą^,Šįń&§o=éŰÜ$%ö”ē®Opܳ€ńO`MēJŽx!_)t•ó“6ŗ•üžm“<»˜•SZX;ŻEŌ‰iZ픕0ĆÓ5ÜŪ]\5“,ģ\+€œĒJŹQ°…¶Šļ™£Ōö'Æē ¾“šē†ēŗÓ-õfŌ­gXš§?…H §Ūe¼ŁŻŻ[k# ä$øŠ¶’Õ¶ąµčŽń4dāĪ5U‰!p3‘Y6e(ō>73jŗ:nH `p= q7Ö*RKG†ˆ”rs÷© ”ņ _ĄŸlK»Įī·•M„yÜžsq¬«ö]¼ōäS„š¶•a§=׌ī$yŁJĘq€}iIoeVg“žžÕŒ÷k m¢`±ī2H5ˆZåōņČŚēę ą®:ÖR[˜žџWž0¬ĶüĖ…ź=ėŲ’įŽĀÖ ¤ĶĢīO-²ū$uĶ'"Ō{”“ū ‘ĶfrŒ’“v5ŅĆ£&k‡‘÷(.޾¹­iĢn=ŽN¶H ×_©č±_̟dc)Ą%‡sڬĘQeŪ]1¬ē‚Śf‰!Ē/ßņŖ ó ±“Œ”I8 5”Ė§½]ưŲŲĒē»™I\‰Qė^”ią‡[t½“UE› ›øé׊ĶÄéŗ•"š›Ć~5øz¶ŠQ²;×FtŪ[‹˜īīV)fVަ@÷”FĀ”•ŒCY·Ō$¾“ÓÖ3,?/–®p§Ó½s×¾†{xīn#jœ¶öą×DYĶRg7©éé§+M„¼€€£Šē$Õ”tŠł.‡ »Ę8Ŗ9Ū:Ūźvרž`"”°Č<ÕŒµ[+)aņmžV|™·ĒRxĶ7+œÓR; ŌMUܧ”8ĻÖ«l,‘ƒƒĒµFw~ņ‚:õāŸąŗ2g'ÜUŹ}bĆģĖ‘©*sÅZUځĄŚłĘq֒‘×Ė–R¤©$`ns§O„B’šGŚ’ēLÓ_™īz’Iµōw„µ½”r¤ß Ż’>ńƘĘSå“GdZ±CĚėYĄ^Š9c#ź+†Ņ¤¹¼Ō –īesżŽ€×)˜ŌģuZܐK|¢Ž$š zρupÉŠĒ’mąŽ3_[”W÷y^ē•]”!{˜Ż$p@ē ‚Ågzaˆū§ Æ¦„#‚”@źrŪĒuPć5„įē¼Gøx|–W¼õ­ķ„̚;]fäAh–/½`Kcę\gņ×7‰—q…ŒGSI…Œ˜ŒÖ×7'vćŚŗXÖ9’?0HUŗŠj×ōśdQÅöX)%\0|äż+*ļFœķ•~qß&­4“"Q.YŪ¢ĀCĀPI u«:Ŗ‘£ŽZĀ®ø; ąÕ&G+#’žćX†y]"CūĀsėU“dYfp=0y♯CBĪU“ĪžV;‚yÆE±Ō-eŅĢQA—2÷Å;Ijy®ø^ Łš9”œīSśTž Ó%ÖüGo ÄńZŪ©Üd=֑&ĒÄĖ{{h`6ŖĖĻž½y“zōæŲļ¹āūŪCg½9{›¹īū;ƒ&sģkgH0;\ĄÅܰ4ģi ʝÖJQUxĮ»¹uWŌģRŚ ó8ėHŌĆ°ŠŽŪ|°$…²ēwŽ÷«šÕŌvņZC>^~^ŸR“Bq15IÜi¤r37ŹJ’…rZž‡ygå\\øł†«ųU*†^ÄŹ±vó‰ŠS?>}=)ŗ„Ā]Ź©ŁœZ„$g*g1}mzĢ“,¤0ČĒZö «Į P]MēĆ’(3C’iźw–&Ńõ; 1VŽF†hūd½ŖųMš’„.¬ō–hT«ˆ;¹Į㯹¬Üޤ¬y$z½×ˆ¼»ŪČ$·hŲ²Ä[…ķŚŗéµ6Ą4ä›u]¤ŽÜt¤MM ŌX\ŻÜy1īSŠw«–-œ|»Ėu‘¶ ēćŪŅ“‹8ŽāĮØN²e_,>xē5ŻjZCėŁēŽŻ÷)`ļ ŠqĻGšī’š|)²ÄŸŗ~ńĒz©ö™/cĶ$§#57čkŲó†Ņ]5™Üy8ĘäĘ©ÉįåŗJ”– r1ƒK‘ n”cecgoW±Ķp (ūµŁx&;”œ §-[wĮ÷„ģĶc3”ńåĪ‡ØŁŁ…üĻ”°8É?żj±c„Aq$*Ņš9Ļ^MfŃ”«¬źŗ^“8°>eĒ–O—Š‘Œ+Ę/įi.QŪv9¦¢E$eįŽCjŽ`ķŠé¼9”O«j0ŪŻM­®v³7_ØżiF,R4~Ėcc­‹hs"6n掻t{”ˆwcŽ•ŃLē’Ōą¼uļ„N,ģƒJ­’ĄG”®MŃu<ĄdIœąbµFRņ=BńxP·“ŗ’H‘ņ¬Ģp} ¦x›K–Ż-^O4æŹ§śŌ“f6ń݌M$Iå™;©åMSŽŹÖßK€Hę?(9å(­ Œ­£8æi÷QĒŁ%¼W ąŸ0žŸA]-…’^„ŗ˜¢yćMQfÄQ<ŒśR«„~¤ž?ņ½sĆé”tƒČņ‡÷wC'š“mūm¬jŲ·ƒ^Ķe*éŗ|/°>Üņ܊ņļ)½[‰ą$ŲéUtßZi ÜoŒķłxéõ ”ķ¹č4iwiäs+Ę’6IķY×>0¾øŌēÓ““A%T¹ńļŠ S5D×M:I4[Ö³üoy|Ś,1i» øYcÉQĖ Üž™ ®}JŻnćó üĄÆHÓōI&ŒČÆäH¼”cƒųÕÅJW[ó‚F1ĶgŁéöc™: ĘĻJz•/>ĶcHO•0źG„X†źW±ū:ĢV)G qĻ­#”’„T™ļ7[–\†Iź1QX¼1>ĘÜpzV2-@Ń»×%JÅ˜ŪŒö­/ _Ė%ō0˜ĢŅŗäp}ØR±n$Sė -Üū¢£įŗqROū2ę;»DϐÅcė[\É£vĆV³Ōw"f)±Ā°ås¾+µ¹M:öéä1N¬8å“3%Ź„ĮC†®Ž{i™ą™_t°š0qĮ¬dTw6%Ō­˜Æ˜‹¼€3ļ\¾µio6£o~ŠŲ.ÓĒZHŌ§ˆ²#ŽČ±€ĒhÉź+¢°ZÄšĀQ¾ö$UÅŪR\zZ,h¢D,WęĪXõØ/4ū{ĶEŃĘGń‘Ó5i•m?ń-Ä:Ļ ¢'‰ŽH^2µź:=öŠÖq±ŚÄ”Œm=éŒä|K­4Q³Ģ¬‡)Œt®_J»‘Ė Jń1磮iIhIż„ę!!±*{c…wy4ƒpDyĻ'­`‰ōi„\ØIUŗóŠSā·Ņt=ä8ņ”tSźiBŚfššķX÷v 0+Æšœž^ ńW•ŽżšÕČg©ßxėGÓįO½øQؕ8å±é\MĻŽ¢ŌĮó좘FHLžź‹TūœŖ]O<ź!f†0ĆiĶkj¾ Ī”lĶjóm9qÓ½@ż™Š[xN]” ·€«œäי]ik:«ČÉŻł{3Š4Ķ>ėF¶»Inbk(˜äÆFķ‘\ŠdŃõˆ#‘BƖp²ŸzøŹÅ8ō4SE‚ßLÓe“ó%‚UĘķ¼@ż+ZݬmmU%qĮŗ•-”ŽÓµČuiZŲ'–ąpj“\°Šę%t*ŃÜūR2’±ęZuŌ÷w±pE…'9’8­]M?³tĒkE&UŒžM4Čh£$6ī—§…UKżāGSœœbŗ:ĀM>Y‘šį¹^xé@ұĖė7ŁNt÷·zĄ8tŸ¢é÷š;]Ʋ#˜ķwދƄsµåĶüģīĒkqĶļ]ƒ4 CR²æxT881ĮĻzF±=oā>•†—¢5¤Ąī),`~ń'ęéӑłņ=GFŽśĘEÅĘ„Ć摊 Į³éŅ$p¹k[€Ž[³Œo½wŚÆŒ'Š­fƒF?j±n ągwæē@ ²ÖŻ<;q=Š x䜨ćēä0ź·mؔ’wøMŪ‹cūP}”kFč7 AĮm:O±L¢Dr88¬d‰–Å+?\<΁|Ų¹'½li‘Ė®źÅid^į$ćuż*©˜µ”Ģź~'š_3B°½}>U™Kȱ€ßJ±ł÷V—>t~jH>fœV‚Œl{u÷Ä-. Å=±™v.ž3\V”«ŚÆ˜RąHĢ:(8ϱ Ó‘ž¬"kŗœĮ.Rbń®7c­txa“ŪˆÕ ‘‘Ąž¹ MXėl"•±āBĄÜԚ†ž"˜%˜uźh15Žœeɒ!:Ÿ„a\éz‹ź(ļśY#ĖŲr@Ē9­¢IJßBƒI¹’H¤Ż»Ÿ„l5ēŁģ®£YŅŽē¢±*„yō÷7WŪ“ó“匾8 ļ]ÅÆŒtė{mD—“b&"ēīŸzĘKQži >­Ømžo6yœ°PHŻéŅ¾žš§ĆmF+K;¦šŚW–7”+žP šsėŠ’ąĻ$³Ó’¶5ēÕ”_.'”*Ÿ”`ƒśWyą½OLš7°·Ų÷BŖł@iŲjö<'ÄśŠųÆÅqMžŚņā>ė)ź*“ś[G+­ŗ9x )²õ½ī±k֏ exnkÕōbėLŃijHm”Vǘ8ŪÅägEż‰£ėGØy®Óæ$ž™ėrĘÉtZÕeKk§·Pc 3‘ėž}h)ĒCÄ|—ÖÆn5I­m¬%øēŒæf¼I{Ėha’FEÜeĪwÉ­iŃĶŻėŗ4z\–ŃÉuż”+üßÜ)éõØ|3ykm:¼Ė*[¹ĮĒŖ“°$z”®iś=©žFKĒóŠįõ_E©‡·†ÅąŒŒ–'„bZ‡sŁć+‰P¦qīk¢±[j*²¾īż)(Ųģb¼‚Ņ9f*>ŠŅ8ĻzøÉ#)&y½“y·†LR; óKŖ³Ź`š1łōäPēŲjĪLšĆÉ,’^F\mČĄė]¤v»"(Df>šØ7ŠŌ›P“O¶‰¤tMƓ¹ŗgÖ¹‹%š$‰ŒüĢŲMßų¾ĘĘŅēJ[h§¾WĶ,AUōǽq×ńMØźw&Ā7•fs#I$ćż(…kĶcOÕ.š9¦†(Č ;©ļż+Ó|+©H—‚k”7 둁ހ:ė³i°„ՉŚųčOS\dŸ3lŸjV*œę€#acāč3LC;°ĮŻļ]‡ü%cgwēCv×dżĀ0WŲPķõ®ØŗŲ3—OEŚÉ×cŸē\ÆÄ9ōėŻā÷L{YßĖŁū”ü@`ž Š3ēIt»Qįh¼R'ÜµČƒdk““ĻŅ “Õtłāī ČĄVX<ļÄZoö¼ŒŽcWŽģ ē¬ü%p³,³.Ŗ‘PąR‘“}h‚R­ļU¾R{UżĆšß» Į€–v­%ä¶IwąŪ]C_›Guķ’¦’“€@'°õü+ؓĮ6śu»X³•ƒ?(Éō„ ‹ŗöö¶†ņ1lū†AŸz‡^ÕeµūE½‘ o‰ūŲī*@Ē±ÕŽęūK±ĪFĪ•ē—1j2j·|l0T8ĘįHØ¢=J{&šĀĆŹEŚŪū{ŅŖÅ♤ōÅÅĢ{ĻĢüh·Ōļ<-·E³Õõ9 C d³)ł„įź+ń MŅō5KY¢Y˜ 8ĖvąÓLĻ”į5ßkŽ;ÕōŪżNęk×H6.ćĀÆ~”é'¼k„k ‘ī\†>µ²døcl&[Ū‹„yb‘šøčҲ¼C”ź mg}=Ś[Eö„bģŽ3÷GéD¶)\éīµxļ-ķ·Mœæ.Ńģ:ŌShė«i—%Yc¹Jē?ұ±Hā,t˜,ļe²w‘ąå™ĄĻ•ķ’t6ī įҦŠÖ)‰|ģ8•½æX|ĢĮ»×ŒšŸŠ“m7N[ė»E å~U÷tķ_=xĻÅ7š¬Ø÷šzi« ĀČHfd~”¢O×2ücøńméÓ¼#Į Č"{ˆ V¹$ćē•˜ńᯠŪŪxwF¶ūDi}墺“'@®§Sx{G»’ņeŒŚ0Ń·1» :øĖ”ģx…ŸģßćoŻi—‘źšOoYfžr=«ēßų>ūEÕ/“SH¤Š;Œ)É*ōoŅÆ•¤„“ω*Ó<=mö›ū‹ éQ\±Ć1ĻÖ¼ć[ńĢŗ}äćIøóJŪŠœ·”¬ÜlQŚü&ųƒÆŽ^ŲkWog ńŖ¤l\ŸŅ¼ģüń,¾7Õ/-|CnŚl³¼‘’¹™¹ źjÕiø6z~±ą;OŗŚiĶ…@f—¦öļĒÖ¹½_\Óō›)%ŗļŠ$+c„x¢Ök–×eMŒ…-£Ī$9ÉÉ”’\Fm¢³Œ;¹'5‹] ¢ō0Öóģ–b!>aŻÓ“XzÜÖóÅiå…ŠÆ#֑—r%r—…/ µžCšŻ”d‘ĻjēD¹Õ.L1C2ŲņFG„YŒ¢zŸ†,č7ŚG‰a±†’źź?8b£¹Ēj ¢CšļL}7S†ūY·‘b’–#w%°kŁĆÖž!Ō®5ŁÜ4Ä`Źć°=*y”Š>!Ó­tÉ,cÓę .#ļ\cŽ·4 j:¤h0¹i=1Ņ£”ϐå'š^­l÷:…õ¼vźIČ9łOsé\ŒńŚ[‘3n‚<Ž„«%c±šŽØ÷­¶›-œė§“E–Tgōė^Ķyyįm*ĀĀóLÓZéˈĖD2ßV>jTŗ‡x£Å¶Z¾—b|?¤‹}i[÷¬2X÷Æ)šŪjšźókŗ£<Ņ»2,sš¤ā浌ūŽ&Š|'­xēUņ£,ūœ;Ó4p}k¶ųaū6ŻKā;=[[ŌUōhäR°4YĪ;±źh”‘¼gcŻ~ j}§Œī<7e`gE#‘UłėķÓ§½h[iZTZĀĆźŃØvüė'"½§C]tż?PžKhļ­ķœgh'ļó^Sć®c})o8yƜo÷ü«)HĪr9O‡Śåˆń¬7rƲ~ģ—\®;‘ė_Kxó_ƒAšM¼>†Ę-~xäI/æ|r3I¹xcVńn‡ŖĢ5i¤¹šnH•ĖŖŽūs^ń¤ČfµšéķŲ»ꇽiģˌ®Ļ.ńŽæ}§­“š\hҼ›„‹ęöØ®|/kā»{+ķBó˶–ÜłĀ%ĆĀē8_åĶgbŃ„Åiõˆ|™īc‚H'•Arżr8¬­KT¹¾ŅĶÕIJÂA8ö­ ŁĮŻh‚iq“¬6?Ż~ž Réšfg¤IpŠ*\!0yŻī=:Õ_KĖŠē®oäkŗPVŗœį=°­«AzRg ÅóŽzUsXqV3uM,w,ŖØĶƒĪj-7Āw>ZŪÄאHXĻ ~•#'Q—ū.Bń²¬ˆq“€F}ė§Óķ’¶ģ’YŚå!휜`SŽåūC·érŁ.”¶²Ŗ¬jĖņŽ:·½ké‚Ö³°BŅ]¹źy,>•±:žań;ĘšéZŒžŅžAo€³I wŹśŒ^Aį½_Qҵ«]COI]@ĪzwĶfįŲ^ŹĒ²ų³āUē<±=¤v¶Ä!,A9Æ-Ō'¶Œ9D•˜¬iéńŚ\Ųā)ž¢MĒ9÷„›E°·‚Ūȑå¹Ü768¤ØxRŅ;&f øŻ: ś#Eńž©mm5źFĪūX»pOlZĻVdāĻEńEž‹cc¦ŽĮ:,¼Ē½Ž|ēėśW—ߏś‹: JD1÷}hŽć‹čP½Ņ¢ž9­ŒŒ``>erkĮ>0®³me™„jSıĻy£ÓŚŗa¦©ž=i¢ßĶj…¶·,óšö_iŗVbZ÷M3Ÿq~• ¤Ł¹k„ uŗŌ®#Ūh•Ė€~˜®£Mń'‚^Nf}Goļb”'ŗŒśPb›nĒ ńßÄwVöVŽżį§¹üMqpčf±²K#szØį™ Ć ˆ'O¹Q¤b} c.­ż—y,’bįĄ,XnŻ+ŅłĢS4†(Ž3Ėā5Ā”O'ų”¬ź nf“•īnŁ7g9Ę;oģł­Ī"Ōd¾¤”šVYW0ģ§Ššø„e”«āĻźž)ńāŻ¾ĢƗ`(ćÆē\ž±ą½Fņą“,¾h>V N;Õ#U+±ąæĒg „¦„#\_c DŸ*ƦßZó_‰Ś­”}ža Æh3’ƒpĮīqI¢Ōŗomāa‹bŖĶ3pLjÓ“€C$w%6Ę_sę¹§mÓ|hgšćézRļ1»4Œ ĄŸlU_ k³“†ßYp!có1#ŸéXÜgKāXü„YŻkCP{uŲE¼fN»–+ĮtļķŽK4+ ź¹³Œ{Us³+’±„ņēDY>ՌƦk9£ŗhU/ä[wˆäŒżīÕ,’”WÉj“ĘīĄć½z_‡„‚]>āĪóO·ø3(ŲĶÉZŹM…ģvś/†#ŃŃ%ÖWnv÷G„v:UĢ–‰rˆs‚z`ūRZ²”Ļń+]Ł\]ĆomŲĮ‡µp> ŅÆ/-įŌ.<ˆ !UŻ·ҜDģwmā/čśZée¹VŪƒ÷‹č*ÆaŖ\ĖŽVŅ(w„Ÿœń[˜É\»§]%ń¹–apŪ~ńŒ§l ÷ęø6ē]ńgˆīƍŗÉo“}Ģöō©äDØŁŸD¶™§Łé‘ĶØC3üĄ¦yGQŸŹ³ćų³¦¬ńč±Z4P€qpņgī⧐³n_é/lÅŗt.eaµ}ĶC.£‘¹£ŪĘŅQķIĄŹNē›ĀCg”ko#@g†MÅß*µzäVšk^Ÿ{Ō7KɍJćÖ­G©Œ¢sŚœ m2‰ŁÓv0«œW~°Yķo,ˆ$3(¶Œ]Ģ$ŗ —Wŗ½‚8­6įäu®kÄgö­ŗ‹¹3>\Ał iǹōČ/ ĮŒ^\£Č5M§ņ¤äTh·n$öśÖŒĪ5ČDīĪUāĪģćµL<Ą¬{\‚FzR7Œ‰ /b…°ć&ƒØ%°$hWī3I “iC¾UĘB.;÷Öi7p ņE "…Œ{ Ÿz˜ŹĒķücöŗ¶ż›æi_ ų#Z¼Ōģ¾ųµÅ•å«Ėŗ(®OŻvēFq_Ż]żœ6®Iķ¤A,CĘ܃ż? ™ģ‘Äk:tK §ćņƄ~7hĘĪ(„ŠÓĢ1Éå¾ÕūŹĒ?OéX˜Čü¢ż”žiž š§‹ō¹4øu)ę‡÷Q:=ńź3_ʧŇóxĘś‡†¾Ķu«+K¾Fzž¤Æ“]Ä儏0øņÓlmP’ œÖ<„«$JO•Ęē뚣–¤ˆ£\9#s™ėšc}Ī…»ńšøĄ‘pć e°xżjÄĒ2.ł1ĄÉĪ*YŃK̃Ģeܼ6M_P@Ū1ŹķČö$uEŲu»$®Ŗ”`Œ·iūÕė’~'ųąĒÅ’üLšńśk«\©?ń÷ļ×#ŽkGu”ŃšŻßģ”ńÓĆæ|+ᒈŗ-ŗŲh¦eš8e ÕNG8ÆÕRµ¹E‚Žź)P"¼l§ļ)žµĖT|ꖧmojö“ ČŻÕ‡½:š^ŲĖžGĀ'ö‘šŽ‹sqŖXŹ!ÖÖÜ9FQ+dąEyUÓ±TßCł(ųqāˆl.ž;ÉÕuT F?2sŒŲ×Ōŗsź6°]Ǧcެ>µącé»ó3±3fKGŌabض”Æūv³§ÜÜG;ī˜ČcŒƒņ‘’źžUåSŽ Ł×Śźhh!y¾$žÖ»ß]jZ&¶Ė{wö«+±×£Šcė_G–ŹŅG5xŸečā mģŽ"a·{µx‹ē”ˆ0”śž1ōƦ§Ųógh+|ŃŹąZģōø­4iķ–H¤ņ_ •éŸZ錶3žQ¹Ņėö¶7ŃŪ^Ū•ōŚ£ŸĘ²ģę‚Ī'B98ĻLֆ'­$ . l™Ęåaź)šd²łJ“øgŪĀém^K41lą |ĻX—ˆōõŚ–„Õ±‡Ü8'ښW+hŚ ¹óŖ£øéS^ßXŪÅ$łi!<°¬L¤Ź6óD“ŽÅ $€84é“›«­=uKG‰[yB…¾aļŠŚW*ŲÅ2‡Ćæ–ĶžõŅ$“ÅhŅŪ³…Žj„aMŻÅō’%ź¬mæЊō;ū-XŠĘŽnӜµ“µ5üA{e®i,Š"óĖ¼’{WˆÜųZčø¶‰×ŹÜ ÜqϽ {3ŸŠHōkõ†å¶¾kŠ|5ķqs<‹5¬øRJäGžЧØ^!ŽźŅ2!…óŌg”¬] KÆ·D‹*4ģ`OZ‚Ļ]“M“I1µĢ†ŽįĻŽćüB–Śƒ4ńČ»‡”Å)l6›ØĶ£Ü+[²,Ų!w Ög‰5,ŖKrß}¶ž•Ęqķp0Ū#æ½dÜĢĢäT§ÖŖ2w&K¹ŠųvQr$7 Ę`“Ö»Čķ æ¹m³ UQŖx&µOā},YiV×(–óČÜķ?xŒr{óXw·PG‰›Ļé*7LśŠ]±Š±mV9Č©®^ēÄ7ŪÉ„\AZ“„””åĻæėWÜēØĪZ!=“²L O~õ™q=ååÉ ”óŲdV–0±Øšf±§Mk{uyeŻørō»™žŃl¦Ń J@ۃÓń©•Īšp4“KĖŲYģ_įæjļ¦Ž3”^jŅÆ—i ÄĪ Ēō5‘µ"–’͘“. eHēul5ÅėiņXŪ…>v7 £#ž•pfRGŸéšMĚ»­Į#ęäwÅ{¤ś=”:1™&k£MĢķZ_Kxž§7öŽ£oöģŹ”ĘĒÉČĒzķWZM"X{• ~Ž•‹e)WgQÖoüB·É;ŖĘwž ÓóØŽ8Hū™?ZFœčĶøš;-×R²¬8ĆJŲ¶¾o!Ž'd“)õ÷ ĘDŒ× s)ł›q­­{YŌt-:ŻPm‰ŽF[ļiŲ|¦&‘ćÖoķ2õLķ<`c)϶t»›{˜ę„£¬Šw|Ƶo ˜Ō‰&µįū ›;k‰ĀJīxū¼ś×@-$°Ńį¼µ“̐”{­k=Žc”»ÕXų–+[é„–GPīzķś×_k§Fub󳪐ž‚²;ĒĻå©·p_¾ē©µ§ĪUbøµœ3x=(-Č[ķFx®~г9—ī§ÓōūÕ.%8gĘ3ރH5ԃ[øŃōhō¦D¹aūĢK{žUŹÜx²śDĆ34A†y¬ł™Ńʉm~Õ}pŅ“ŲĮ®‚)•Ā恐e- ©ĮŲßÖ5]2[ –ŅHē¹d(F~ę+å]ynĢėo–Ė1Īk>tiģĻMš>Ÿö{(`øĖ"üę¾šę¹ce„Ż."Ī#  Ī=½*e.ÅØŲąüae5ŅĒtöģĘO™žöÆ&{HΉշwć½@Ū±Ķ\Köx兝£ŚŁą`š<;­Ū]ź"ŅōłcųIž“¹·hĪŽ-|[°\sÅspY˜%<†X³ŪŒŠCfwˆ- óŚx£’+4ä’ėѼ °¶{ˆ\B®›Ėz(=oWū{µ¶ē0ulō­į}"ÖiŁŲŖ2¹ä1 Ņ0ć_ iڌ·W6zćiw_gXĢJNr;ØĮƲIåŗ 2\LŹÅ`APmzÄW ¦@ŽĻ Ą#$ž+Y Mj%ą6ģ2L‘ļA±‹wᣦb0iAķśśVŸ‡ ÖÆöDo;vGSķYH¤Œ‹x#ø[=IbXݶI¼sÖ»OųßO¼ÓąŅ]é’Øß*øėŠ|å8čmµ¬šmµ¤¬ęXc6ć< ņļŽYĮzóÅ Š6Ėp9ühę1ŗFÆ·iWaē8äcß\5¬™™r ~OOJ„#-"GÕļM„Ć»$‹ƒĒcVų{„Y[COH!•Õ«{Õ¤Ž6F–x(Ł”éKc¦Mn’M!2+r¹ģh%LĻlŖŽwF9Ę+7IŽśmröņńM½ˆ CĆ’“@Xėć½63īœ~uõŖ¾!ńĮÓē-”FZŃNcßĘ~¦Ę™ĶkTńMĢŽĘb@3“+ŃÓÄLZ1µ“‰ņįDŗLP_!ĘOgt%Y M;;gi­ˆü?­G\o„aµ č“0ödŚ×Œlō :h4»Ė{ŪŽa— Ÿ(‘ƒzńĶ{™L÷+“+;/9ē½bćm t±ķZ6‡±’ćVd3)M°ķ’Yš„©Ü6ģZdG~ń‘ żYŖŒ;“'ŲńČ¢¾W˜Ž3yļ0ƒĘG„t–-r”VY §l×B‰Ė&Ļ@šÖn÷†öXĻ’˜?Ÿņ­_=žµ¤\[:ļį”ō#Ņ”¢Ī* #k„¼ˆuZŽÖķ§Ž3Ī2j\nl‹ö6²Ixb+»Œ“ļVÕ ‚e/#Ÿ»Š×S źŚuŲ¼,±²¶1Į=hę¾$žź]BęPVw.Ū®Õ=…mY^E•m¶ĶƝČūĒŚƒHĖ”ÖAäšRKøüø×ŖŻß@–É0łß©Ķ…{;mNXÖFłcßŌ÷5é6Ļg§Oqv»$ÜO|zŠdėž"KmļO•É9Ž:ę¼jśK£i’?īóón9&ˆęFę‹ā+Ūc†I™¢N@ĪqZ"īēUŽšÉ*19Ķ R:ß Ņ%–ņńmČ Ä¾~µµāj¦3m3²mśqLS/YG2hžk@õ†éHnµĶ]Ž ¢:s†9&‡ädméšmœFĮģJ.1ę–9-ž«„ŌåĻšÖÖhä•S'oUŪüō¤3Ć--õOł'†źāź?—{FvĻ=ėé3f°Ųؒ%‚R¹8ž*”InǚIšžļZŃ® ¾¾{kęø/ĘpBn$ }0+Õōm&Yi÷‘¼RĪŲFHē§%bć#›ų§ā8¢ŗŅv[“2ƒ°ēćæė^y¢źś¦”%ė_Bز)MĄpĖPlqÖŃĻgŖĢģ”bTwŽŗHLw24 «·Ž`{ŠzŸŠ kiōÉ-¢¶ŽĮń\Ü:a%圉$NsŠd9šņęĆt$ž~7.ѐEvÖ ņxz+¢&f™r6äėŠĪQŠQ—C*M:ך©“!¤ ä¶:Õ8¼Yum¢Ü^čļqmu*ä ¤/§Æ­8ÅXńuŌä±’iwbÄ·RMtZ|śĆĒZµÄŹŅ`œżŹ ±ŃŚi·3ź“} …uļā®ćEŌ£GøÓ¾Į-ה@.Ź@^:@¤ĢóuiaŖ‹¶Nü|ÜפjÓĒ.$ÖqĮ#1Ģ?yOµL[źg-Ļ6²×›Hø-"É+)aŒļ“g¹ÖęUŚ%vĒj¢ |U·Fеkü„xc-“ž ś×‹čž2æ¶Ūöō‹¬©œ śf­JĆ75)oo.m%0ÄƅükņßT¼š$V1`¬3ާ­71x°Ų[ź–ś6› 3ˆÄ{ŌäHą|ĒóĻåTl¼5xcø[ˆP„É_āśŠĢøÄō/ƒŚ—ü$V^%օ…×Ųē*¶®s½}O½/Ē$ŠõķGC°šÅĖZH¤-ź!ځŻ§J lxßˆCx²*Ā’dqԃXÖ暯ÜfĶ|ĀNGPzÕ\E»žĮemelā7.§åS§ÖøM2žĪóP¹hłĆsėŠ’dµ:t­4k0  mtWć}{Tņ×IŅo–ŽÕ%HɓڂŽŸįUē‰/Vž+‹÷},7ȎG½{ī śŽ—Øų~1,2Ķ ŒČ½‡łęšW‡õ AĪ .¶€b@õŽyšTś~Ø'³‰ŌŪ°TčļZPY_LŚ$v 1$ći¤HŪ?u]2yv*1iĀŽŽõŽŲ^h~(†K»0·6lL{±éĒzågto­;[I C…ćīŽzŌ1E>§Ŗ^[“F°Hr¼8Ą<ʙgy©\XŪ[bĘܤ{’ŻIĒ&¼Ņ;ø§¼¹U¶ §ļc¦i„.”6;@·Ś®2*{mG –P$jŹO?Ņ‚āĪa<0ė$Ē!%nAƒ\d×zĪ•Ŗßh¶0ϰ‡`å #Ū­4U›ĻĀ^#³¹iuS!iČ|?LśƒZ֑ŻX_2fĘAąPY&Ŗdx%·™²q\…ž’ÖŅ*]#I0?0#½&m­ĄÓ¤1 Ź…?t{×+.„Øé÷/8¼*Iśž+(½Fzē‡|GsØh×h–O“F73(=¬h|+-Ī,q[I”‘‡kK”ž‡CÓ$Óīe&ÄŹčÕē:–‘»Ķ HœćÖŖär³ēŪ½e×Tx¢˜¢Æ·šīluŌŅžuyHĄP܌{R“×¼Wįż/1Ž[É4źŪ0¤žÕŁųYįÕ,!»µ“Ē ČWź½Dž…EXė,īl4żQ­`ž+K§M®Č‡ß,ģ±Ėr°‘=²¾¢ćo<k5܆1zq^ ā ZN–²+ķ02MKŠŒ¬|’®kśęŖÖZM֌,¼²Ų•@;ĒūF“H“µµV¾øeūTL# ęCž™¤T™ģ~µę‹q,Öļ –Ld)5ē:ŌŖ ;5ˆ]ŖHʼ‚:H̹¦Iy·œ‘•q ÉĒ ėżkŪtlõ½H£˜ £ ¬²qœg8÷āžĄp:†‰œŒŹčŃĘ:ē$ząu­&ÓÅ7–1K<ŃEĢŖ²V>ć½kp0uĖuŃļ FK•»{WMįĖū„ÓÆ­geŲ‡*=(Š·Ć–:*ČŅ]FZDm_Jõ ģt÷’x%‚ čJ ĒŹ(k@<æÄk5Œ>"ÕlÆ,“°³“¾ąįÆ OŻx»Ć¦śå ·ø‰̬zdōüŌHg—kŽÓķtYć¹HĢÅWjäƒ^[¢ų>ÕYŸ&ÖxEQ÷A®Čö+KŻ2Źpqa¢‘É"¾y×|‹58ąšQ„Ü“¾[\2ń·?Ź‚e-O#ŗš­Ö™­ßišā$…9Y0qÖ¶¼%įŸ^±f¼ŽŅ(ÜĪ3SȅĪ{¢xƒRšē‹Zٵ(.`·\”Œnś„l’ĀQy¬E%½Ö٬głŠ7ń0Ļ_օ+÷=[ĀßcŅōĖk+kˆ¢`_œJNk䒌¾-ŽēQ±fŒĻó$Q H<ž<”J6g ^čöž4š-“šG4ŚlžRĆĪ xlśW!{įųGķ –+X5)dXĖs·§>ōćęZ8[o jÖ‹ŽĶq{e0hŃ8Ū~õķžų”›-č‚tøŗƒåĮ\œŒōķ 8Üäõ_ų·Ä:ō°6—`‡lPēשcžü£{³Åu턦•$kϘü±æŅ–«BTlqšv{įŁ¦¶“¶•ŽyŪ$““‘é]}Ļ…uȵ'[ōk{( rÄŠćrłŗ5%$ŃŻc{kTµˆ•ڹ/ķ^ o©4²*\H p1ӚŽ[1Ó_xśóC±“IVū\Ó.cUžöxā»ß Ķö XŻjŃĮ>ødf;FŠō&œec)LčoĒĶž%m#Dųqc;ߣĘĘ~HĮ=»vķ_Qx[Å>ŌŠō6“kʍ–ī3FO~Õ ½&ĆŶ‰e¢kmĶ• Ż ÄX:†Ž0 tƑo< xŗLKr—¹;JšcĒ­I\Ē«x FœŻi:]ÓX.œÄ,²4crc^‰āø|1§ĪŚ6™`–Öū³–¤œzžÜŠ5+Ÿ7xĻ^¹šćiŚ=œl.¦fĒ8æ—^×.5Ł4™ŚÉlŚ%*vb9'ß­L›čRG¬ü7Qŗe¾£m,ŗõŅZĀź0Iž•õ‰¼a£ü<»Ōü50¶¶«Ķ4Q‚ń¶;ćž9ā³mõ5ŒÖ„ŃüM«ė¾=šĀŽĆ-ą4’!1’;uÆŅ5Fšļ‹5KBśī駈ˆÕä%Sćg„[XZÅ9}BŻ!łJ§>½:Wć! ź)}g )Āz°­c±”™œ¶ķui".:{Ń’„nx”µ¾)½™!ź(·PY˜Ž+”QeL tūūÖ½ōŗFž#°¼÷Sū̐Tżj­Ō mĆšźV××¶£;0;Xņ~‚»æ.ĻMÓ„’ĻČŚ€!Rų'éW°Ņ¹†“ūķSV¶ö&āBK)Ļ ó®·Äöž³ŸX’å­ļUHA-ż1žłśØŁ!ŻŪ_kWW =ŅÉ©HęF•ĘI'¹Æ@Ó4MGH„6Ünõ㚤ŠjŻ$)4 •ŠĪ:W?q$zāĮÕn21YŹŽg+2;°Ś|(Ä®ē#å=ė­šNŸ©Č¶…$ūFß1÷‘…õ˜¹hÓō•AŽ0}±Ksą»%¾‚Jr茲lW8Č9ēčt{Ō×4dŠ[»}–ä4A›œōł ó»ĖūM÷R»yHP2I'&‹Żō1"ń ÷ö…“{ö==rĶ‘’ĒśV?Šl­µ»©5 ÆV1™¤čŲõ­ ŹMßRŒ¶0›8ÆÕQķˆŲ:‘QhwVW:“JĖöMųŽB„h]Ė!ž×ĆpŽZI“-Įˆüsś×“xOJ}CT·Ż……_qU<·įI»ÅŲū7Hš–Ķ9®o¤ū2±+i»&:Õk(m¤¼ŗ¶ŅÉó ų%ŸL¶šč²Õ †įJ³nfĘ6äžÜų‡Tš­­ōz°[n "<…Éō®ßÅŗ™‡,—JŌemKxyö€Wo 5Œ»]EҬ5;+C,+2Ūy|‘Ń«;O׹K×¶šß»pī}+Ÿ•–gxŖŽ=Nx”Žļ“*ČŻ]'‡ōi“ų’ߏ’ pÉIt"{—¤Z<÷0Gū¶u škĘ|e§Ėq©;‰8,Īā*L>%ŹÉ¼ß»SĮĻŽ®ēLŌocC œ $ع^;Š™FäK]ašŠ_ŲŪI«Ü»Ūƒ #ö»{ļ¬V+¬Ū6gńŖ±QGĶ>=]kQŌ­ļ`˜½™;|¼u'޶¾ųL6³o{Ŗ“Vvā"ėĮ%ˆ$ąžUJFš‡sÕK]>Ī(¦`J¶3·µ|«Śž”8{÷_5Ū%€Ą'ŚŖF®6Gs„i)ė‰%–v+Šž×U„ŽjöjDh ĆÆŅ¢ÄEēŽĄ·Æ1Öē[i]ŅE21ČŠ+šN…”{}Øė’¢ZŖ’Šzōč?T“ŪpžT>RnĀjŁJä9‹Ø‹{‘Į#®Fvg-Ū„tžMDÕĢ׉½ōČ@_ŲS2ęŌ÷oiįtXŻRTóbĒU*zšłOÄ>šŁ£”øc‘“qA“e”oĀ^ŌŽŅu“Yn®73łg®}ė^’UŌt].Y5mÕĀē”ō«ä3œ“<¾óĘŗš³Óƒ6ŹKI!äĻš×Ųßå‚ 8žŠD‹qŚPż;Ņ”lsJl«5ĒŲć’yPK30^z‘^}«ĒżŗK"H³ø€ō«RźK0baŠXC!2”‡ük™¼Ö٦µ=d)c÷~”Ō‹ŽēŁ:ż„ö÷·eŅ2¬ū£ĄŪ±qŠžµĖy‘O3@ΰ̨FūÕG8źXżį…c[m„r3ßń£Ģ,!VPøź1҃²,$‹ ¬Ųe?s©Ŗė:+—vīp”­ÉÜuµĪ%Xä ŽÜ©'ƒ]¤†ßiü ćƒŽ“Įæ‡|K>‘u³£Ž\ézż„æj·¼ ‘ ®1ųqŚæŠĻž uū\iæµßģÆį›»ūūgų‹į«h¬µDW$Ģ”ßĻ<ćw>‡Ö“Zī½õ+`Ń2Œ¶AÆų‰į(u½&wu 8#ÆÖ°3‘ł§ń#Į¦ĆPŌŅp$hH!TšÉģkłõ’‚‰žĶĢńdž“Ö²(¦åe— ŅD9+ņūӌŒų½fÆ{äNDf6?źČčjÕ߆>Óļ )”»œq[F]IœTĻe3Ap«øjaYÕ÷²žüńZG±„KD„Ų;„ś÷Ŗ§Ė·ß&ŠČr‡Ž“š5Œ¬,qķĘįÉķŠt—%åEF1·ų؎ęńØXŠ(#UxIWε_X¼ļ2ŚgJ–S‚+b•ĻßOų#Ÿķw¤Ė}šKVšéŲ4ö­pŁWŒ”9č3_×ļ½fÖ}ürjūd‰‡o§§½aR&ÉAČ[h˹Ęō¬żsĮš?Ä_x“į׉-–ēĆŚå«ŚĻć !R†{“Ēåé^uhhtGsüę?næŁ§Ä_²ķ#ćŸėZ+i‘ż¶k”øQ·Ļ€¹) ü¬ß‡-’÷J²¶ž÷ķ0‚»ŁN¢¼|t/KŠķ¦JÓ[»™­"q)¹“ō'­Z‹ĆŚ­“֗ÖóĪįX«īł÷zēóÆ–Œčå<ÓĆ øń=ȇWKĪ6‡=¦E{č·K[5uI#ĻÓ’Õ^ ¼¶f5)čŃļ~ńDZ’iÖBtpæ7ŖŸc^§ā«H§hu EŠ)_ŖG’éé_aE;\ńkčĢ#S(ģ’Ÿ*§Ö§“Q–]ækp¼ī{W\aÜäs+[źwŅ]łKpŃŪō 3õ­TÕc“ŗ/#gµrUŸÓŠÖÄ6WæXfh_`u_»ž¢Ŗ¶H™ÜH]Ŗ?Zj$ß”ŚĖbŅ)gß ™w ąī­mm®är¾d{¹'ųŖ¶£sAÖ×NÓāŅ8ßīąņ}ėŒī„Q1$ÄdֈɣÕaÕ4čt;Ia’ŽIöÉӟZ£¤«jŲR‘¾N@”K°X›G¹Óē2ČüÅČ!OV jö"óū)„˜Ęx~t„. ‘„i„wČ1ÉĮ 5qöĻ­ėZģ÷ۿ٢ÜĄĄčGµO5Ķ#nnųjņYg»I¶Ī†LŖōŁŪüjżŽ„w7ķ nļc²½µ,Ķgs"īSķŠV¶#™ßSÜīü9¶²ķ›ĻBc&<ēÅyՎƒ§Yk:}¶§Ų8¦HĒzĪhŅ Ūń¼7śž¤’iÆ=ęöī?Ä:é^W£[ėī’I½†H^)˜(|ņ?Ķ®… ŗSJ°­Ā hņCŽ=Ķsž-j66Ėc·‹ Wˆī}Me(Ų=ky-ć gĖī@Ŗˆó Ź?w­8.¤Mō&° óGdCžkŠ|>/mʹÀĄĆ9ŖFŠÖ׬uI`ŌÖėŹ¶…Xy#¼÷ü0:įģÖm^dŒ,›rAóZØ“:«{?ģŲ–!»Ö’d[„i׌“ŒdÕĢV’Ö Fł”„ü˜<ž6Öʛo™;68łæŠ€ę5u9S±61ĀŌpī=k'GžK[`“‘!čŲć‹N„ŻīCx!¹·X-÷šäšAļüėÖ­õ; «K½)¢xK4!ŹÉļXø›Ęz\óWG°Ó¤xlš<ēxĒaN‰“›m8ź…ōVŖ PIäžÜRNÄ“ŁÅĒ«éŗmÕäĪ—O-Հ 3ÜcšōŪiāæšąˆ\|Ҍ0'?„7&C‰Éėŗ šĆcsgzÓ\!&EQž˜5ĻźšO3ŁGpYbą:- ždlÉiy k'M…rrkĪ&Õļ㻚ŌŪŒ0_0ŃS™ÖYiŗ–”ŗ&¾Ģƒt·#°°[¢4‘ƒ™{pmļ"ø°$·'īŸAO“±›VŠĆ½Ž;[„F`ī1€5ڜöX’9JķōėRą#œ‡D¼Ō.šź%‘ā•‹±É;ćQb\iWwxń7ę0Ī1ü_Žk>C¢ēS h׌µ»]µ¼‰ięlOó«zʇv²Č¾XžŌp3Ī i=‹śu®—*Ó0,˜ČĪ6Š‹Äķiyug§Ą™@½—®}kXģB‡r7įū<’_Hą…_åć®jxōy’0’0~{ —#hĮE³Eį˜-/ĖĢ—!‹¼Āµ®5m+Z°'t–©(pvšŁäqß­e'ŠŚ*ČņK¦Šī™|Ég±Üs–$õīO5gY]/Ä7īŃĒ Jx ć„'Éā!=*8§]Ą0”ōŅ» źž'·½]Bģå¹Ć u튮Q3Óu āƒLŠs$02y5åćGsn’`aĘõäzgšĶna7ÕŻÕ“·2¦å\`ńŠ–-/O±¼†ź{dbų\Øž/zjĘĢōŸ ŁZŻ\ϦŽyP$ŠÜ‘Œ3łń^g.ŒėeÄ’F²6KžŁ$ŽĻÄ(ŃXĶ"Oēaöœƒ]Āx®ÖŚm>ī žo,*±9Z r"Ōµ×»·Ž¤ŪN•ę׌Ž•<†Öź}²óŠgu>VeĢö9čļķ•ZŻddLšµ¹esi‹‰q½zPēŲ„3PŅÄmrQŠAČ=*¶³āµ²²¶†ʜ6GŻś~T“čĶ9zœ}’Œ/f"‚¦}„I#$Jė-SG³šŗÖ ūb܂ŁNJ‘ŪčEj†yeę¹/Ÿ²Ö@‘qĘ8©ģ'Ō!¾ RŹĢ3øö R•£m.­.£ŽieAœt鎍KZņ¬ĢQZgųw/QļAēj>I/X:ŪŹŁ+źżĶwžŅt+U.-Ō©mĶ“g&ƒDz©iņ4¶‘”9+ŽÕäś®™ ¼¹¾38€¶Fęū¾ß„“*[iIy'ā„mx­üĄpŖÅpzÕ)ģļŽÉ|µ]²:óVąI$Vw+ĆėD˜—ĆńµµĆ0(ņœ:–ćėŠā'’-"žKA±:šH˶ś² ЇXŻųQÓuCy=ōņ2*Ū$ō ÕE"¬QČ×J̈‹ņ¶_zÖ¾×&²“šŠ'š¦2HČŪž@ mt h7óJ.öėó66Šīī–;9C[“r乙Ī>“ ”æØyzn‰&«qCĀĪĒ€Ö¼CRńÕöČ-gKhĖ‚W$®sśŠ4v6P]^ƈ!<ć>§ŽÆ^Ę#ø†Ņ0dŹå€äƒļS-†r·Z%ĶåŹtŠ6!÷Æc’„r+KQza’HX¾^9éXŽĒ^Įqw­y×i$vč@^¼śÖÖŖ–:L"U…&»`Y°óųP#ƾŻ=ÄļpĪc¹bx=ڵ¤žahʧ|Ü 1ė@>›§[Ü,&įBK“Œö®•t»_²G Āg_ļv‚ć¦ÅµÅ”G{8BĆå@9⼿\Ō-fwš'kp(55ōūķöšĮ卄‚qÜ×”Ŗ›øŃ$‘ŽÅĮSŠSHĻė^–śĘU²½Īõ*¬8ėĶsڟœģY\Ū²g'׊ח£08”šÜ°<ż¤øĒ Œą×i¦Ł4v‘łQƽļYµcX£Ō »ÓćŃ-,.¬”Ś…¤/݉ĒųVmÕ“W¶Ó]Ūŗ ÄćīŠE3ėÄz]¦—0ŠužV]ˆ_­sž¶ŸR¹ź7HŪī¹i83¦Ō ²Š'rī7Iõ¬ŪĒk–’hĄwłwŽ­Ž™żis ”ī,.ģōėg™TyÄäČzTåń5»O"É&õPNįż*“±ĪGRńž©.›|šE¢‰˜ģ‰ßŪŅ»’ ^<^€jW!õUaø±å²?ĻēC`‘Åx£N¾Ōn¾Ł{p‚ŻlÉ>µŃiÖzkY*[OķłvŽŌŠLäõKU¶øiCHx¢¬iZd*¦üʶŖłmåqø’Z ˆ®ü"šäW,ŠÉ<-ÕćķųŌ«ic”[$ņQFЧłS‰I'¶›r›$’FČR{VšÖęÓ¬mD²Ā¶’wnyQķI‘ĖĆ[·¼•­n“–Er ὈōŖś­¾™{ysq ¬1wDƒ3éB5V3×mm ¼ĄČxhŲņµÅė:ÅÖųäÓB'͆Ļ9&‘€[[EqyivĶøÜp šõ”¶{;bžŻe’(ÓlŽ=«.vZŽOįżžœ—ZŠŻˆg9–Ż\`9,?.¦½GZm2{#©¬~Rņ¶AZ¦3ä›’¦³©j70Y>ĆĪo%Iä.x«–;¦t‘X}ąrzP©MicŸŽķ6 ½ĒJć4+h“ū™ęHĪé$ž”›°ŗŲę Ż<­Ł|u#ڹ SF³½Õ$ŗ1ʶŹ1ĮaŽōĄÆą9$žÓ¼]ņAŖ„õµōf•46éöł"_2Lƒ“@-O招Ķv÷QÓļf’Ņi•»€‹Ół×owŖO®yVŽŅMzaĖr>c‚OįNā±ā÷÷—Irö÷cʐ¼x5ßx^K{›9Bܳ0œā«s.nĆc½UįNƒõ÷®’Ś/6Žęmč6q“õ4å„VL³‰pŅ*‚sŁj¼Z¬÷’-ŗ¹’luéō¬Ätv66ŃŹ«zpzÖõĶķ¶“¢ź×·PČ] mŠøĪļ’ViI3Ęģo¢¼¹‚i#+$ą7ĶļŲ×”Ü5ͤM“< Ąłz—téwŚ fi. mćµupĒ­FƒM“³ŠŁf?½–U„ėĮ?JdŽ—HK -V`Ī –ĮūŲōÆ?æŃ„šöĮ””HĢå‰÷6½ˆiVW× ö±ī^F~¤~5ä–zŻįYŒeåaøqڃ)2ģÖda§—Ą8É5Ķ’fź:.­uaØ!2”å·P8ČģlüĄ²¼N Ŗn98Č®s[°ŸPŒ²Z,Ŗ’!Ų1ėĒzĪQ4=3C“‚-&ŻV%ćŒ½É÷«cÄŃŚ2YŻ ¼Ą?ZĢbśī Ū‰¬o-³ ”»”ģkēŸ;[}¾8ä2¾Lgœ`v­`€ł+ZÓg·¹v‰e2ƒ»hcɬż:ūQŃ5]7ķĖ<"ā@WƒŹżŅ­ÅŲ ¼s?‰dÓ“kKMš®Ģ}ūĒŒ×Ń’|ā<+>©Ø“Vko)ŽŅ"äēÜ’bć`/ųr-Ä,a“Ō­ä1lå›5ķŚ‡Ć[K_½¼÷Ńłs[°ŽŪŌP­Ōv>3ÕtM_ĆwWV:…ķīž "Ę['ņ{×'©Å”ūmŌa0ĒŠŁ;ˆĶeԐŁė q4dæ:Iü²c¶G·w⫤Ä .TDZĻhćŽh’öğb‘”¼²Åęž ÆåŸĘ¹[«!k~鞇;O<ŠŠĘ«}M¤Œ“0ūø£Ā²ėŚF±¢Žs4@ĪĪ9c×b—(©ć ONŠõ;_Å•ŃhŚ?. …°ĮĒ=+‘³ų¦l­Ælōˆ<­Yшr2HĒžōrĆŻrĻÄuցÆĢćÄ ę0v|†œż)ŗvo«øŗžlŃJ¤Œ7 ńĒåX“W)³ā-Nŗ¶¬Wę8śĘŸ3>=įY%­’%šµ¶T9åN;ҾŌo,m/¦Õ^ „ge_dĻV„Ž¢Ó»ģ¹’6“ĪŃA%oˆęµ³Óģ®žŁ4ń™%!p#ķƒ\Œw÷>–Hv«ĒūĪrX{žTĘy^·=­Ż¹"ćt{²c\l­ <‘¹f'åķĻJE9­ŚZLDU[…õ¬½JÄź-ģ+ NGN„PAę×Z5Ģ>d`°“ž»½©ŗm µ’¼H£;ŗūŌÕK§Ū’āā!gø+¢Ńģ­ī’G@B*nś{Š]Ō÷“7įķƁy8õÆ?ų¹¤i4‹ĖSØmŁ$C8Sź ö øĖ”Ļ|>ŌüA§Į6’uKˆōÉfޱ'i­æ]x‰/Ņgt üŻüā”K£.2ÖĒrŚŻĘ”§iöšŌjöŠ+1q¼ŽzŠąt7ĀVZėÅ|"Õ.03óśZ¤Ķ9™Ń¦šÆ—h$„dØÜ:ą’ZdŻiW@ZŚ(‰ŗ³Ź¢O±œ¤Oj7mtÖht±“¤·@9¬_ēĶ—u&Ė€ @ČēÄwĘĶSļ!±ę„—įī—’ģÕÄė>§-ČxāŒp#äŸĒ„†Ī7_²Ž ūmB-=-Œ(2 Ī}kFĖW½Ōōyu¹¼‰¬ ™mp¬2½Hćš4¬‰±±­ZI}cms2y2‡`é\.•Ū_;lŽņ¾Č÷ä–”+w;/Šóų£ĆѼ:š|°Ū\Ż"\\ÅĮ^8Ųיéž×f±’ņŪN³3ˆ×ŽųėLÕ#ģæ…£ģž×!¹²¶ŽŽ U,Y€}ż>Uśšņ¶»ŗ»ŗ9ŗi¾Üā“G<Õ÷:ÖėO2ÜéŽcG8r¼g޹K›cT‚]pĪā>[pŒ}>µĀK ‹–æó AģHŽ?Ś®ĆĆēN°±žégc)u<z֑‡p3̉k$“Ä ŗ‚“Šā²<ć™|1©^Ļākė›»d1\d”čµZŠKCčOųĻān„‹üpŗ|³[G¹ę\«. z×s¤OšæGøŌšāiīTv˜½œœd@*N(9“±ČiÖ¾5ń3IØźšā!œ•Ūцs“’kŲōĶ>{›+u*’8ńQ(ŪbH.u-?Ć gē 1mģ3ƒųV÷ÄĶ?Qæ"KS* ‘Š:#JhٲŠü5ć;Ż#W‚’Oø·ToŻ ž‡=ųżkˆų‡ć_ ų[·Ń „®®ŽH’O)ųIš;Š%¢)—Ć?Šš­ \½„„¶§o •mƒäīĮÆgÕ­-µoėŚĢN&‚#ĻŒüÜäóõĒįYIhhˆ“Xķ“]R;T“ķ Aqž{žUó®·ąŲ–ęI!N¶Md‘¬ųsĘÖŚf›uį«{‰ā¶±œzWsšŪY›WÕm“­{Oø¶ŌĆą«ĖlwŖŽšŽÅļx3J‹Ä7ŻÕ‘“RoŽB9Fł×Ī:富>!x½<7i4—·¬ų “ü±ƒŒē¾8”EŹ+”Óė?u OZ‰½Ÿą łl:óŠĖŠ|š^ÜÜ_Ę%d`K9ä ōęØĶ¢]Wįf‹Ŗų°ź6蚌”.ȧża¢½ūĀ~›H°ū= ¶…²²ŗ}Ķ\dŽz’±‹ā›żAā€VUłäÖE®£ā!{˜_…,ف’Ö«r0nēS"ŲĮioĀ–±Gņ–'–9¬æ>e,žRÉ,L;ŸqüŖ%" śĶψ-üaįŻBö;lÆR^Aķļ_<Ż[Ü[źLwĘß0cĪ+žLŚĒ³ü8ńN¢ŻMqØ[Aq4±\H;zŠģ.ü{ ĆØ ę˜ Ā5ģsééDƒŁ3ń‰6µymØß± ¾ł<°"²5Ū=2ĖI[=2Ķ””“ó¹ĪOµtFVŹŁh3Ļ ęLØFAQ޲ļ©g+Z“LÖģĪÜ朤;ž×ąoĮ„Ū(ˆ}•Ņ6ł€É>‡µaxśžćÄĀŅŅŽ:RZAßń5v/œä< ąSņŻj/.L‡–0;b½ęļAµø in±—Č<§Sé[¦L¦y挓­ŠC`‹kĘMއéé^*4Ø-/cX‡ļ˜§ÖƒžR¹GÄ{D‘Źģł'·ā¬i:Ū”?æk| Ga‘¹GoŠV’ÜG¤|HŌle‚ÖŌÅ,j¾Rį@$ę½ 4÷‘I7Ģ—Ž…•³ŌTnaćĶwIŌlķ5;[lJČß3sŌWWyhŚ”’k6÷čČņ(³d…śUĢs~"Óļc½[«K§}8 ó¦psŲÅ?TėŗM½¦™pa™×.]†O­4ģ'"Ž£©Ż’g[éL6$G(GĻ_å]‹ea¦Ų5Ō L™¦>•Ŗ}E~‡®é·ž&ŗ€“·Y!ČE$.k¹š¶‘i£H“‹oµ\ Ś¤žŸēŠ™HŁlAńāŽõm!4E¶“N²,lAij 4·Y•ܽsī+ˆ·šü\„“énzHG9õõØäf.Nå’ųV7·7PŗÜ³Ęøq€Ę» ^éÓ-śIvänēx©”÷8I¦ŗ³„Źg;w•śÖkā9¦¶I揃ņ‚ 7„gģÅĶŠ˜xrŽP”Žg#V‰Šķ<'=åģSø2Ī5ķš=™“#sNĖRK±a5ŗĆql‹ø9Ė{~„.œŗ…Ō—EŻ-ĀązÖvšŌ˼[%½#tŌśÓnnRņé`³0ŚLrstĒ­9ŗgāę½łEŪ$‹ėžż±\m¹ygI_`—ŖØ ʂ½”éÖ(ĘQż³Ķvm&n%¶`ŠHé֙E½SU“’ 6ō wFø/׌¼#Q‚źKLj•ys·zŽ£•ŠųVĪłfÜI+ŝ£pćš®ŪlrΉ“,«ņœśęµ„lg7ŠźtŸĮ©:¬÷Ś€~l”ĮēµyÅk&Óµč[Io“4n$qÉEB:Ž“ń/XÓ4»#Ŗ¹ŪˆļO½ųWšŽO6©­ÜkVŅ\B¬ūR’"ß›“5ä=7Ą·Ÿ`ŗžō^g}¬ >ėʾ6_j:¬±ĮakåŪeäŸhłæJØĢēšŌóŁBŗµ¹Õ Ūb£˜ŻB+ģķ/^y,I%Ņą¶ł1ųļ }üśūÖŃ×ryz3ēOųž÷YøžĒž=ģs±„R¼śTŗVÆ3/Łćß)£=j“*QŠėMä_eLģŲ0ėX?c†YϚŃĖ&ąTĘk&Ģł¬~ ütš5ļƒ<{ā f’->Īe€ł +‰Hf=ą·vvŠĖŲ^˜Éė]r‡cEL§%ŚK”łJŒcUmąS ĘĒŹDō98śÖcP+NB¤i åČĻcPn1̬Oӊ/”q !ˆĀt>õ=£NŲ2ī^v“Å\7-3ZŚMŲ€™WĶ%*ä*㜚ż”’‚7žŲw_²wķ-mcxś‚ü8ń%ģZ~«’e"Y=²GOSBŽĒm ģĻļ»S³“ö÷Zc:ā¹¶“vw£_nGį\”ińOą„R§#5Ź×C9G”šļƼßk¹ «5ŗ• :ȧł×å’LJ&𮹣]yėvѳZH‘ļ甁©Q±ĢŃüØücšµšć⧊tKø„Zxe–+“’šÆ>“»-šÜHłÜ[,~čō­ćžtŁĘj;$ždf?ĒZĮŒ£Ź±Ÿ1ćS·¦1[FHē±i}ĢeŪ»$>”ėxŻ•į•@yĒ9Ī{ҟ`#9‰Œ,ćäWćq…9Ņ”w4‰fÅediHaفq„ä6ŠYFĻŽ­Ž˜>‡„ü6ń¦µš÷ĘZÄ}ļR³¾ÓēGøH%*dˆWóŽæøæŲ_ö—šļÄļųWĘŽŌ>Õ¦µœ3L³™ H§čsųV3:£k+³V×vś¢ZĶa2MfŹ%ą©ķųt­»øŠA`ĮćyČŲ8s\5qŠüJ’‚īžÅö_“ģš>=x[@—Rųįūf“æ6˜Y¦‹Œ1=0ĶųŸJž&¼;Æźŗf¦¶· !—$m×+€ÜZóŖAY¦uәōŸ†µ{ē™eŽTTĄ*Ėü?Zõō’KØWķ,“L{Ž8"¾n¼RŠėEÆ ųGK·ŅõK˛նÕC de\dóŸ„pųŖėGƒZµø‚Ņé¤r±¶Ņ6Š)IŻ$M^ĘWĀ_ŲŲź–öWw§¾āŹ]Ğ ƽluøo-¢O4¹#Ōq_s„•髟?‰O[‚Ī5»y%U 8ł{Ó³ sk¶1Ęē8ÅząhĘ*a½hك”%w•rēyx]ź9ėZ§ŠĮ_]]Fš“Øé‘R¬Ņ³Fč¬O̽…94\S6ŸR¼’Š,®ūBƒŠÖTś­,’¢łŃīɋw,=ؔKбčŽ!𣁣ŽĶZȘU –8õüėÄnÖņŽņx$ˆĮ 6Ą1÷ų©ä*Ž2'Ehö0§5ټ±AmöY¢čŸ(ĻėP+xzX"£xöłŻ+¤ŗ°G&£ŗ*ŖšOzøė ¹L®J0K HĒ•ėšųŌy&Y"ÄĄ2œ`ćŒūf“ŒFp:g„­cā8Äģ³.v>ķ'+ŠĘž‡-…—–ŗ“M$ņCs^cā ķ~/³“IU†ŚĘ}Ąäž*FMy­” d}Ķß=~•ŠšÉā,éöÖåÖėļO–ąe][EdĆMœ ‘²ō¬‹ "†ćĪ"XA?8ž!ķMA™Mjr÷EtøÕЉŪqÉŻXxĻKxćū%Œ©Ŗ®?ˆ9'õ­#J'¢érŪßĘ,Į@…O,qЧgį‹&żŽŅa±›p;¹JŅĘGā f%¾1D pJœ÷ÅrwŅ;OŠNq‚¾‚Ž³ĀQż²[ÆÜo;zŽ2qI476ņHgŃrN ē­>Vq5÷˜’V6č}*C7”U™Ø<’“hQī2ōŗø¾·!€£q×ÖŗĻ x~źĢ ‹·dgÉąu÷©±¬UŠĮ<ž.}6T‘¬Y2“ąąsŠū×+ć[{čćaAČÜ_Ņ—*5s9æģ‰dhšE. ‚rzŠõ=.Łe³U‰„*Ī*łLٚš%Ķ‘io.eū$’‚‡9ŽÕ›®j—+d”H‡=©XĢčlŠ’g'œ6ėÖ°.t«ęHī$QükÖŖ,iց,šŽ¬iŗ"ČØĆÉy pz?•jZx>mĮ"½¶e|bzėC™~̹„Kem؈Ä$E€ĶĻZā¾/jŸkø±¶Ó%Ódü6ļA|Ö.]ŠQ9_xV’÷š¤~pV\ģ äÖæéZŌŖŃ”$ƒ•ž }j’ī'”¢ś}¶ŖmŻ'tĘ3øū×”iŗ…Ö›0öĘł±Ą¦Leb¶«ŖŽ]yl‹/qĻJĄÓ-åøŽ¢#…ŲölŠjz4vžN“Ł.3;˜u5•”+ĻöųoTÜŪI–WQž•q•‰q¹—/†-Œ³ź77 żŠO?AVtĶĪż‘ Īwl(<“UĪ.NÅĻ_ŪhŚ}¼zrĒ čr„qŽEq°ŲŽkщ'B¬p/#?Z‰Lj6=OG±OX˜b ą “śŠÆūµ¼tfI™³Œw¤¤y‰“öŠņkˆ-Īł•N8Ļ_Ć$ÖĪ»³Śi÷VŲ»bb8Üjŗ HčōĖū½Óɝ_c)V zdVu¼Ķ-ܐ ČeśT›Ąµt’ÄĘõŒļ÷v“ڹ»©šH£‰"0Ŗēk(ä}k 3C*ņ_²Ś¼SFógĒµgĮc9Ó ź¬$ąŽÕJdJFu—•0 ē÷Į¹R+Ńü/"Xʲ¼žJ¹äv5RŪB9‹>2Ö®¢Ó –é꧛±9Ę}Jį½ą˜²Ń-ĀI+'89SЉ;1‰įw~Õ,õ›ø® tTmŃc#pķZśf™Ŗ_O4!%ŽQüDgJ’ұķśDšXYŚG©œ¾Ż€cŸ­tSŁG{rĄ”<Ÿ˜ŗž£Ž³{ى«l°M<įŁƒDGß— ö¬Ÿ).fQ@lAŽ=ZdĻcfĆUŽŃ–+×1»tāŗ;MUg+mxĢIķ¢¼¶Ü’\OJf•fŗz<ŅČęó3ŅtżVÖ[[y#hž>¤×曉£vә#† qŠBló;Ť˜Ņšˆ8±ąs^¢ķŻ«¢²˜ß ®;Óš})N„mh@ŅtcÓėVfŠX„ó©…[œ7õ ‡~†Ž«¬[,0“/Ā’Żlćė^_ā ­=5E•1"ł¶Ÿŗ}č(Ä]TIŖŲ³@>Ļ=½ėדm.-h”G)üTDž–+©-&Bćq€§źz"D ¢ G č(56ģõä³I"„]»‡ŗW;Ēö…ÓLŽC©*“īš5Ɖ¼w¢j~Tv’”ŽVźŻNµó ¾:džLMęCŪĒE?•uŚV¢ś^Uƒ“¤c„>ĒÄ0Ąé¬Ą#yNoJŹL ¾ Ö.žø‚2¾irÅGŹ3ҽĀī4k®KŖg€ ėP\ly.§i ĄvņćfƒĘsX~"Ģ¶·+ld˜Ÿ'åtŒš1ŌšŁ¼3y§ų…t¶IgI.Ją{×Cu„½“ÄĢ\Ž“ĀJĘž=“²ŚŌĘkŌ,¤±óQT¶HĘ8ō¤.cŒń–ŸsØx£Ņģ’>Qņ|ü§ē\$~ŠŽIŚęu Č'#"ƒU#SJe, śWojśq׎“Ȟåū»»Ż6ĘćY·„±„n€r{pkĒ›Äś„Ɔžč³Häŗńņ’³ZĘW3­źśsiÖ¶–±Ī𙐉6ćė[žžņK8!P’"üĄŽĆ½dŹR±Ó\źör±€ˆŻ”ōSšv·ŖŚĒ¢\o]„Šē<ŽĪ¼Db8lć;Č#ķ_Liz·: ^Į±®Q”d§ ĢćdŸOƒXe×¼ŁķÕHŻē„Z“ƒHDWƒt˜²sÓ4XC¼G„_ŪxRļY•…ēpĮĻł÷Æ“ƒPøš!\[æĢĒ'‚ŃßG§˜ ·Œ `¼tź}k7̛h¶ŃĒ4ĪŅ‘å 8Ļ4.§m©›[Ļ h‰±<éó¹‰ēõ’>•/†tK{eš»› ū÷¢ą sŽ?‰4MGDŽÅå½Iў~ī[= ü+RŌõ ąIę¼b؁"‹ųPTs–kč~#æ·ÓRU¹,qĒƒŖÉøöāīI#c x¹Ęā*Åbž­©Śh^M“’™†H_į¬V™5āFøÜŽsא(±ŽćÄw>O…š4’HgĄPSļ=+޲ÖļBGSlFūźĆ%…‹CÕžų•tĶjŅöż°°Ģ$ ž l|^ńõž”®&¤4Ó{§Ü|· ©…x†zäxŻÅš’ÖŃ¢3†ō­X­-ļ“É$œķ`:Ž“XĶČó£qö;é/īĮĒį]¾—©NÖ9+,Ypō’Esö[]vvÜe‡!#õÆIŅõ»K¦[[yT J¤Ij ĒӚš±²ĮQXŁŪ0»×ęXä€b2ģ y­[ģ–ėś 'U‡Q³r|ÖĆ ćPYVU‹zŲµBūÄ6ŗ–ūgeNH ž[ė@ŃĮÕĢj°#ˆX1ķĻ\WI„_jW‹Øy¶¬›XĆw“¤'‡Jž ĄrƒŅ»ˆuÉõKx$ $ʧĖČĘJ—Cͼeā›}>ļū3N›ż61ū’›2zJēumgZ’ÓM£ŻBÖō÷“FŹ66t™…ćFƤŽq÷MnŽh/ū›¤ŽA“Éš•&QĻX|/±Ö廓[ƒR„žžÕä¾)šÕę‹«¾•|р„¶¶wz0#ėZ…ĪĆGÕ“Ų4}FYnĪ6īq’ßS]n¦ŲJ÷[”ä|½Ø3š;-ŚŽÖń’1D™' õÆ8ńļ‰,ań½ļ‡¬ŽyŽc(ä>8Č?\ŠDV¦×‡m#™&Žā3Ó Įäšé…šY*–ETüéIhlr’š“Źŗ•ÕŠĀ‰%wzš©«iS^\­Å…Ƭ;A“Ų¬Jčf}–{–i‹ģ-Ė6pMyOŠ ŽąI{ *ķ»øąŠŽ+¹'ž/‚Ró.Ō¦žv ^H®<ÆųÆXŌa¼q„ŚZŸ.)žńŚ@1ĒłśÖ×Dņõ:htMKŗ³Ņ¢ŒÜźeB“ģ0Xƒ[šæˆõ[k¬wNšł^K8ežķe=v4K¹ąP1°ń–¦ā„]¾\d…eō zWŅzgÄēšūŚj!€FķŻ»V<ŗ\ے盿Гۑ:mó5 ¤€z0MRimÆwL»USv1€¶®tŽ‘īQyćj ēŽ6x®ø×VŚč3i—§Ķ˜[“Ļ?JėģķÓH¹XMŲ‘yY³·Ö™*].µcs©Śˆ`e‘˜n‡wLśÕ7Į—¶Éu:“9]„Š §ēSrŹgĆh4MzūÄiŖ]^3£Ę§8O ÆcŅ|!„O ­Óø’7? 7nśVRz”„c’½KO ڵ¹óģž¦¼·ÄśŠ¹ŌĶż”Ž^—å/ī¶ą‡īśÕ"lƶńT’÷{m­Ó%·uŚ=wZ–Ž·Ś6ā/4Ķ{#ˆāŒ’¢D8$ŸĪŒœ™‰¾ÆkxĆT•%vūø=iė¾»ÕōyŅĮ¶_Øß×(ēΜ‘”åv>¹½žå§Œ­¼$nĒ>ŁŖ>*Ń®ī"“]¶yg3ƒŸĘ¤it<ūÄi61¢_܋—;:ńåžćš®÷ĀrK©ųbh”‘F›9]”=Z`ßxīņčÅap>ģy9ö®ĻMų¢ł…uŪq2Eŗ7guØčxĒØõķAü?m|é,ūcŒ’zģ4ŁŻxkE h¶wFÄ$£KɃÉ÷éA„Ž2ĒOŌģZå”!bbIœy¬Ėvń*ß@nĘ6$w‘õ ,…–Ī×Cµ7ņ…(ø»]ūUŅ¢ŌŻ]elœ6ļLTŹ#<Æ\ńt÷ˆŠŪĄčą•,Cަŗß4Ÿj'XńŒwŹń\ļ¶’dĒ!5±2v>›ń^‡f/.Ņ$‚Ā!½Ćœ±éŠ×łn­uqm¦™[t_9Yp2}z“‘Ķø±ŽÅN÷XÕČN8-ķ\>§ąČ›UM@(xš2§,y=øüėX- ‹¾I’óG kw1(K‡į oöMm莻Ó-!“’ķµ­ÜżjĶüXÓ¦±šŌZ}¾ŗźāįIĄ?»L¾ßć_=XčŚü,Vu“Óä”M(#‡Ēz !±ō„§ˆōŻ#J±ņ ·øfM¤ŗ±ŲVO‡ōŲu­nĻT’ĄŪĶ…ѐpyō £Żž!x‹OÕō«&óFµņ÷ f܀åĄįķ^Øx¢mŃĀŪ·g c®N3@XåWÅś¤ś½¤6r„¶oŸ ĖÆ÷kŅeÕōyļ ·[X`smłē=’˜©–ĘS]@–? Jŗ.¦ėöśŽ”j&’ßi ~µņĘ”}¬i׌†…%µķ¦ƒmv^Üķ~0sėŅ£‘œī%›–šƒ+ČŲą…#Ļ6…i§\[ĶóF…^܍h£gÉŖĒsāŠāILĢwl#ēU÷ō¬‹ ź1ė q£\m·™æ&–?K<ợą‘mÅŌń`¦@ņĄžšó½ff¹ń,ö¦i„ZĀHū„9 ޾¹©ę"K”Ė\Éel ¶Ó­\Ž0ņż?ā~šŗ„ę‹£kŸ“›fžDŲ©ž¬ ćōE]j§Üņßj×Zę¤t–æ^C˜Õ”gw=yuå¶©eqš­4M(*Ǝ˜õŖ:c¾™ą]¶Œ¶³L¶Ń|ī±’®GēMńĀRm^-KūNŚF…–7ćhĒr ĪeXź>čvž×.5¶Æ8„$}ĄoQłž•ōdž'Ōī.” äxö7$=’Zä”Å~‡Æ\jwŗUÜ~F„¦+ÜŪTH›€#œēkĶ4+WĒzż¾§hå“Ų¤’Jœći ÆJϜ¬u><Ņ'Óµ=B d‚ÖĻl ?»/s~µsĄ~ “J–ŪÅóÜé××';egc$ggƒõō«ŒÅķā…õķżÖĖB±Ė;ī1ązā³t Ɓ­müQÆśs’LņH9bOAÖ©T*3Yń\W[BdŠ{ÉKK3`¼öϧƼ'SÕē¶×m­%c›=³øöę²ē*[W‡4ŻXų‚ĪżßĶ“ņŲ<{ņŌ}3^£©ų¢;{'ÓüČ#)΁žø'ó­»µ!};“ń5ŻÓĮu •‹mV#<× •‚ŪN+{h†ĖŸQ[§”Ļ(A­js=ā&ßī1ǦŠtčuˇžŃ’8ķ‰wžT=TKYĶŖŁ}š4żŚĒĘģw5įž Ń“•Ō/n-—÷Ūwć«b:ŽNˆ³Éõ«”mp^ņܐ ē„\š†•3j7šą’Ü2ǹ7õb 4msŗŃƵ oV¼¾¾ŗœ[Ą„ķj‘ī+ ŅuÄ3Mi3ʤ«¶ÜˆĪ{֗µ'† I.e°“E…bŹ*Ž{ÕĖķ2ŅŽÕ¢¹ŚŅ1Ą gĢłLOx:ēS¹øš8ęūdņ½RW G±ēž'žÕ¹×Žd<œ …T*Ø­ŻDŌ^GŸPš?#fЊyjחKČĶėĶN×F“kpč—(„ŒÆĢē ßš}ž›wlŅ\1#‚ž•”£cUhvŃC§_4O.uVź@Ą®ōkÓŁ C$ė³bŪĘܳćĻ×µH3ęüG®.ŽŒ…'‰Ž=®0A±žµēZˆµ_}–ź9ŚV vÉcõ«ŒS"QG¦ZxbiŹĘ'Ā…aŻN+Ÿh`Ņ$X S5ĮrIcœ“" ÖIÖ)|Ó%sĮ­M&ņ>Ņ®ZĻŗYF\t¤«Ł^E>—=õµō>|gĖļłńź+™¶Šhī¼ąčX‚I#ÆÖš•ŠŽēćĻ?YŅåŅ嶆[‚Ą#7 ‹“ڱ|!¤I§¤’K+FŹ„ü¦¶Nę«c[ĄśØoõ+›‹ŌņLĘE…Ÿļ.rHĻjõ¦³ŠńYRŲEqŸ‘ˆļžɔNö(ē‚ĆO[‡‰īÖ0_Ėū£šõāø‰W·ZW†Ptk»`J³)åWŌQb9Yó%Šßų–Ć\Ō廾‡F‡le6ą6G­wßō{E®Ķ¼Ö«’ŠĪ1¼Ž˜©q)vf?õĶjŹķ±b·•·?žż+ššm‡Š¼cā'‡Å%¾…䜬ƒ!ĻP2?*\ ć=w“Ól|-¤O„¤fNH\ä+3ó_źqæŪ[ķÜŪy楬„Jfn³g,n&Cäņ°źOł"¹­:[†¾‘c„ČPnĆ8¬TLłĢż”"v,Xå†+ČZ+«·y……»ę›‰G³xRŅå ¶%<¹u-žß5يįQ׌§Ū­K`W¾›Nfh­ŃƳÆSō¬+=dIu •ū9ó>QŸ½īi¦ÄĶMWÄÖ:$–E2Ńd®'¾kĪōÆD×jn£Ž€`œę¶3å¹ź:^ÆnąłĘ_,2§ åĒ‘x³DK¤7ž\Nń$V\†āæ7>(ų>Ģźś¾Ÿ*„§Y` ņćŪҳ1iĪæķ’š/īu?hvז·–ng¶glż¤ķ9CŽÜ×āRĶ8oćxnŪ*ŽĢ:ZĮō2ؕ¬Œ©Ö=œe愤opˆd·BltĻ’ØÕœUį&ݧøõ§Č c+—p灊dE ¹yädeŁ!ē5nl#§–Æ“Øg©õŖŠŌŃ!²6 08?Ż&¤7p£ r >õ©­4oŪź ĻeašqŠż¦’‚C~Ōšü<ń^£š3ÄwÖWZ=ÉZ\ƕņ oŽ&ļB?Z‰ģvGcū8ų)āϵŲŪis\āÕ"[­8ķ’_ c€?n }'Øl¹ˆFŒ °ž\u‘DšXų£MÖ<%Æ"ŻųXµ“O¾‰ĘT†Rżqō&æĻ‡ž }ūk_²ķEā_ŪŁŚ.•3I%„»6#ĄNäĒ_›žkΜlĶ©1|*ń^¶šOˆUćŠBI!9*8ļ_L›ūP˜h²Möd £wS_=˜a„6Žč&Öl쬈īņ¹(§×ƵyščÖśŸŠ¬”Õuh쬜ęU)“ƒéĶyŌäāŹ”K¾"š6į²ŗķ€ņķš]ᇠ(5ō?ƝZ-CN‚heY6ņƒé_g”byįfyxši«žŪhb“3eĻŹ9&«ßEīʇ§'©Æn3īy2§a‡IMB ćBbŗmlw÷©”·Ke†Ż™LĄåĪ95„Čä>œ5”Pā5VīŃģćg‘d›#€}čLMXč%Ó®uxc,‘; S²ĄćæģŽ ÓąŽ+y¦ ØĘ]rįUĢĶ#ē³ŽXčל:Cum²©1Œ–ć§„|‡ń×DŌ5ˆ,t&P16ĄaÜ~•.”|†×…¼cyfb¼tI6–`~fØuļZż— {„;Qƽ8źg+lbh:TrN#ņöķ<±ō­rŻā†H#lĀFކ¶HĢó›·k¤†ÜąŖ°+ł×µųKSU›\_ެ6›v•= |Ö‹zŸŠ“˜rŸiQæˆŽĻæõ®dxĀŚŻ‘!³ēę’ėVrØ\iž©jRŽ]Ī!w!ĪćĘvÖ£w©AÅK†#8ÅgsNS?AÓõ®Żpܓšō}:ÖKĪę :󌵊0{dŒo“™ĘēŽƒŒŠętß Ūé°ÜMönĪV2ó·×Ž“ĪF=@Įx­Ø=ø=ųGµ{ƒl-£ŗ{ķ)$h]AcķZĘ=ÄŻŠæ|įiƬõė-@É© ŪqąN3ĶyużāÅ$pFÓ”U«u9ē# U“¶š 6®?ŻŖV:5½·–Ņ1˜G–qłÕ6ŗÜīōY§ꌌŹIÓfå|õöõ«/uØŪÉqw(DpcP¼čjX>æŽŻny¤Ģ®äŸlžÕJD½3Ų §LÉ¤¢xrĀ8”įÜf?1^ćėV|qwö{{1¦łåm™_ėZĘZVŽĪYōŲLńˆ&Aü'ėY–.Ā8Ō0f=…L¤mN'W£ųyFģB„m܎õÜ·ˆ4»I-­Śā9fŁ–BÜćÖ±sģtFŸr–„s§ZȊ_ŸīūWœkEnõVÓŽŽkøqņ:•~{P¦fāoxcCÓ5 =Z®<‹ŪWP±KžGėL’Āxn°›’ćėVE–ĘWŠM¼ś3Łż¢[k,l ž@?Ņø£÷RF\y r;ęJ(ī-¤—RŠ8 Pc ŻÓōĖI§¶¢7TlnĘJśāµŒEĢ–‡­ii±Č,§Y,w @ćŌU?ź’k*#ó»ęĄœ•ƒŚSmŖ½Ī¤ÖĖ$ œ©nøÄų§I¹[Ć71\+|«“œēø¹oų­¾‡ ]ZHż¶X Xِą×Ķzµģڦ»}—’WóLj§ ćŠŅ2¼Ž×OÓRÖÜOš8ŚJŠU”ČQˆóƒĻj²#…µšX$O +åČVčF;ūWźĢ­r׍›yF>ąĻ—c¢07lõ±²'ba/ó`ćƒ]£ź¶±XĒ˜Ą`ml qJ2č68k›ūŁ$* ¶ÖĖ(ī+\jsé©mufūNī š§{sƒń>„}wØÉØ]Ndi擮ŗ ųµ4čšŅX£ŸĶ¬Œ8SžÕ‰jŻOAÕo~Łcg,ĢI ć·ėRhŪgŗ28Ś…A½5&e.Ēā{»»mbxŚ dD*÷ćµvŽÕ,õ˜ģ“Éć…61l°ä“ėZ)’‘Õx›OƒO‰Ō²r ņs^8uµ²–kskvzšżu½©Łź–ŚU¾¤³Ä_~ƱĻėQb¢ĖŗM†£ÆĆn±2É$ŒUP·9sĆZMčÖ!‚[i"Śär>VŠ–ĒÆź¶cĈQĆ(µĶĖ©ŪĘĢĘdp9­ŗņ‹č\ÕüGjšW™4jG$wÆ}Jżļ,ī!Ģč· (_ļr+ßB”gźŻž©į?ķ.$׌2ŽT1ķ€ćھrÓZoéÓŪųž8M܌C#üĄrxžUJ6:N“ĀŗE÷„ŸSyļ!šŻĄŲØ8Uģ1šÕmVŻī-/Öć-Ģ¾‚³q.2±oÅZ®“Æ^-ż¤n˜«z qķ\é֐ūD˜$)ć5Œ™|Ż _\ūj<l‹ čŲū¦½Į·Ö°ųc]†[Ėi.ē“xÕ§?*÷8÷ć NGxWāEŽ…”G£Ķe,»n6yŖrsŒök¶Öµ©®,ZhĪć·w‘[DĪĒ™éÖw²%Ō’I4åŲøf=3ŲVŁK Ģņ˃†Ļ|V±&NĘę‡77,$Ś®•$ā“uÆĻsfר«#ʤąuoaJJĄŸB»ŻÜZiŃ4Źßtm”Šłµ$’…m˜Ę8¬*FV.Ērؤ”ņ‘ø«2jVÖš,+ OÉł±Ķfks™ža3±VĘ?Zé“»Ūh“™”‘ Żēå#üż(_OūŁDīøÉŚKT֜žµ==«Ł2łŽhgXŽ+]@ŁZG† ÷Ō~µŃiŗ½¦§Ż®L²•Ėnė@ā}rėX¾ūI cjØ9ĄéšŅŠībņn"DÓģŚł­4ģD¢ŗœ¦§ŃĢe ?żU½į;PøKO%ŗÆ žGłÅm\Äģ,¦‡OܳNÉ8l*‘÷¤æ7W.%Šäˆ3ŹćƒŽŌĄ·¤yš3/˜ę3ÕOo„vĖŽ4l”ŚCnļ@Ļ5ń śĢD@Ÿ`eŚŲ^§üę““Xe¶ņķå'ģŠŻĻaA¤r/k/o«Göģå@F<ķõŽøżBw½²u’G G;Ø"Hå“ö½7†Ż¦aĄ®MwčP^ĘČĢP¼’:Ņ0$³„h-§ĄĻ*Įtņ/-·;Ā»Ļ k+az$…-šDm”Yˆ5 ŠŽmU]ī.eņ<Ԑ±U®wÄZ̃Įä[¬pŽɤ6Łå¾!Ō$Žö8’9`B¹WkįKėōū™%Œ}§`ŚXōē“@”¬z6‹āRš|čĆČ÷ČĮµĒkZŖ4‹4$L†`zŌɚ¦7K²ƒ\C4®»ĄÉ±ļōÓĻcmĻ2qĮŚI¬†'†uĶŪV³°ø™cŽrŚ­zļ‹|E”6‹v¶W~r·QŹcµ <^×ĘŠ "Ž7ہaŒ`Wq¢K„ ݀į,¤żŚÖ1¶¬—'ĶSm"Į¶ŒŸa޼×Q¹–ę!ĀU²WėNNĄ œLŠ‘Ęa”9s“œūW«ŁŁ@-å2ǽödcųMdĄĘf“Š“N2”qƒé\åēƒ5«X<‰¦—ĶČl²ņĄó@ĪwRŌ¢ŅbøÓŤ’Śq’įs]·ƒŹ\X„ŻĶĀK3ØŹm9Zåäb6ÓLLØFK•暦ĢŠ"²«d¶;Õ&# :}¶Žå¢‚Ė޽µt¹‰’+hķ‘Ę1ĮÅ 8ķ^ŚM*īÖkD’f”…b?„{Ō:ϟ-“D²I¼óŽÕ•‹Q¹æįų-ļtņ!óDB¹Ļ^¦°ml¤‡M¹±y%–J±cŌÖĶč“ėui"čJ€G„z&…g3]Ē#0Š,fOR=+Z{zĢVęīg…@`qųWÆ_Zł6–²0iöØšĮ¢ĪWS€G“i»8ž£{ā ęŃ”ŃńēD¹*„~utĄå–Ęé|¹mІ,®8®śÄļAę1÷h)6ˆ^䌹ō®Œ$ČČdåƒĘsŠ™lD ¶ńNG’K„H¢°ĶųU‹­6ŅVŠéųŠīÜ Öq• Ļ­œv‘M§+²Ŗ är[¾+#K»ZĶ <ÄĄ`©>µ±CĪ5+G²ŗ’T JŪ\ŦØŃĻŗY[÷|¦“ƒ"ĒÆŪųÖ{»[H’É£Œ.O9ē­r•ū‰„i1ĘyķTåa8™ŗ-ąŚó#w?÷Č­˜-ŒVŒ!$²ČA¼ÖL‚Ī;««I-¶ąrOJŚÓ|÷¾ZČ0éHgU«xvHį‚Ę(ĆMÆ“sŠņėÆÜiŚä7[–źŻ4JzØĒ9 ź×KU+y*RÜØ\f· [Fšłq„F/½RńM’ÜZ-åµŗ$‘E£Ęą)>Ė\\Ģb·Ė1ĻšŠiŠž:ųm£ė:žŸā85-žōbhć ļĆuo® Oā}5R§@bbˆŒŌȳššž™y°–O6P$qĶ\Õ/µŠĒRJz6OzŽ]@¹‹®“ :tūŽ'>SHS%\ē·Jęļ­¬u‡·¾h#–Uąūµœ×4K•(-“ŹøaņgŠķ¼įķfĀŅuæoµļc°*r†€7®4Ū·ūMŌQH®¹ @ä^Iu¦ŚÜj©snģ5²2ĆęēŽ€±éwĆG…üę'rķŽõBĒÅślłKöęwŪnĄšF3Ķ).€V¼‹Fµio¬ĢRÉÉ8ēęõ5 ÕŲrÖīõ+źjcl½sØŽh³éņ”vßę #īšóKķ(DŒwūKķĒ„h‘›Ÿc;Ćńj1}§PŒ#[łe?„óŸŅ·ŅīÕ4Æ:ŅĶ#žL¬«“dÕJ63åkķ?Å÷‹"7vOaOˆd‡ŻŒz÷oxFĆÖrk.–ļ5暄œ—Ø6‹ŌłēH·Ņõ‹¹Ķ¢!øGŲU—Šģõ *Ķt»ĄåіW‚žŸĪ²‘±į:.›y§ķkÉ ĆyČķšļĄPŻž„Éœƒg`³\ČMĖ(ÜĖ÷‰ķšź“]īK«§[e Œņ*£.ę'_ŖĀńXÜÆ—ęr£#ęõ®‡O°±“¼ŒĘj[9õÅXXĆń¦‡¢lę°‰ÆÆZbē#o–½Ī}qKįŻM{©!ˆ„Br†ŚGÆćZ7”);˜Ś’j:·‰,å·“²ŠĪ%ŚÅ#ŚŽŻ‡JŪÕo“ķ–Ś=Ä*· ¤rx"HÆ!chр\ ķN”ͬlėŚ…²^Įa䳉O•~’¹5Ćų†Ķ ²Å±į¹M˜{Y$ø‹d»‰ł¹Ī@õĪ*- Œz?Å-kSÓmŚņmF`²£LžW<žēÜW9ić©ü?ąØn ŌßTócŚb.KńÜöXædgYüP>3žĄMVČCqę,1‚.H<}?Z¹ń?Y½µ¼ŽH/n>Źa\G!Ā‚;łŌ8šF 3a⫉® ”Ÿ-øłņÆO,­koØČcže '$QmFō jš¶«©ĶuU'µ&›ā;ķ&īŃ#Eޟ8$dō¬å#4o,óź/Ü3P:ļųÖ½…Œ'@öńbg© ?Pl¤|ė®i ­wou*¤Źåx9Åzēƒ4Ż*ßKH¦ø7[ĄŪ·åUĒ­ïs;8ķĀ[Ž XaŠ,¬§°ĻOå\>›§Żi׳K¦©‚ŻĮfŲ¼7=ź“;ipP–ļSqk™N÷ēŅÆ\^5ĶóC}«ƒĮ“ŹS%ń?еæénž ¶Ä1ĘäŚ=Erś'ÅÆx_X³ńv»wk}'ܖ×å, ē鎩.¦ŠEm+āDńéóųwOŌ.%E†ićÜF:Ozo‹īuķ{NVC¾8Acń‘ž5¦¦¶<Ę+»øĢeą|柔üµ©½w4«h¶ŅŗØÜ8;A„+™É²]¬›Ī{®:ŠŪ[jęag¹ā||ąqĒ&³Ōę’$–ēOҦ 4Š€æ{ ‘ŸĀ² Õō»‰døŌKĻn_»>ž”[øF ėtSCń Q;̵”åDrą‘łWIwąw†Ńļ.gCĮŁüØŲĄX„ÓČQh§ha܊č4żrķ¼¤$:7˜ ĒKyqfź.ęŒ|€–ķL“WŃ­ō¹&ŽYVļUQĄükX½xä×>,՞ŅGüĢ3ÓŽ½¢ŪBøÓ4ČC„uo”ņ†#½)¾‚”„°’@G ‡92»8śW}Ŗź‹āē[ōd0\c ®võ.>f.”,—ĪC…w|ņxZĪÕ/L¾]… Ū”ć#֔gÜSC»°ń„ß`ŒŲĢ`™T£2 {Ö/ö‰¹½I®RbI==}MhsšĶu ¶ŁžGJēeŅnZ ŌOpĒ$n= c¬Š®æ³—ģ®Ā[’>eĀ~•Ō’lGmŸhłzHĘ(*+SŽńżŗåšā  篵;IštņU¼Ēf#Įü©šśĘĘ;Øvź" ÷ØīùźZ.“‰pÖņ¬®6å[§5JLr]ņĘāßQšŗ’[ub²®AQķųWAk©i—)'‡õ[;;=I™KF ōŲĒ®?ĘÆ™sœÆŠ|/į2ČÄ"²¶‚f3HÆ”ķė^6­c¦æŁc‰įE$ #åÕB»34ķ[Fžż”ŗHổŗČ¹Cļ]żŗ,]]Ķ=¶Ÿ®ŠēŚ€ŒeŌ­‹< ¶¢=KQÄ`ą2üł¬m3ÄQ^ŻÜ w±ēfÖ³”GČX¹Õ×Ä^D!Łm£$*’ä×œźšššåÅͰ‘鳏¹ļĻå\®6)SčprźRjrīÅĪ1ĻZĢÖl'ŅŠĖ$ £~Bž­"Ō;Ļ„õ[„±t!į\(m§<÷­=~óĖŁ܅”®8?0•7ÖĮc¤šœŚ|ńʒ>łŌa‡-ļĶz©Ņ-å}”ÉSÉŪĄ…Tw iāß łŪŅŅćē-Ōō#Ņø ü1n # ö°K9R@JŁ‹–ʤ·I§CP–%P\ƒŅ§Ó$ūt÷P¢œ+“±ŅŪĖww,6É4pXʄ²Ä‡·ć]F‹„h7śŒjėi-²|ł™7=©Å>ƒē=–=#įķ“ļuā/ZčŗhˆJĶ ~aŪׇņ—Šo-üAā=NćAŠūž„˜­“Ģøy£ģĘ·ŒY2‘ĄxWš+xōĖ$JI2ŒüĖŪ"„šÅōZ\Ļquo2]L@·ńUrģt IļŅMI”’Ķb8v'#ÆūÖī§ØĒqk±H“żŠEK@yĖé‘Ē<×QʁŽY‚ńDvāś)ŃĖbŠM+(Ÿéē’)żœtŠŚ‰b¼Ņ%Ō-µ UI6‚+€ŅOįÆį·ćĆ’xcÄ>%šö³…Ö›y-»D%WīŸQŠģö‚T›ć³œ8h‘Y™¶šj9c2±ʭ…žy_Z|ęj•ŒéąP¦4u±Į©-¼Ęr­Ō ޵I’×b9#v}Ķ(Ns޵uA+råC‚Ū—ҳ”…Éa‚Hsę9 Łe`?t=ĆǰĢQö7Ź{ā¤ļ§ŲżC’‚VžŲ~Ē’µÆ‚õ{ĶJņÓįžµ"Xj0n-iˆģGP+ż„¼“ÕōūMcH•.4kųVņŅXĪU‘¹Ą>ßįėQ5”¼Ž6śŁ÷џ*Aµ²+äŽ^/gw¬éŠ©Ōm “_',¹äōƒfR?/¾9|8Ó¼MĶÄ~e¬š#o/w”ä ŲųÅ%Ÿžź üwā:X<­2{é$“‘‡#<²ż+Hnd|čZfv6õ8éšYļäMĆy…Ķjs“.’-<Óø  ` kÉó3Fd*AćŅ©E“bĀ·Éų#ŒØ <·=źØžYd!H‰ąē©5¤X„ä,ę]Ŗ”L‡=‡ozsZ3äģĪGµPé·ŌµaK‰ H³Ļ+ŗš‰uO x“Eń.ƒ©ź6”§\,ž| ÷”s‚?ˆ˜©šŠķƒčr_šO’ŚE>?üšo‹ō=Y¦Ōm–;8ā”l;”~õuĪr:ż¬ŃļśŅŽ×|NģŠŹĖÓ8äW-Dks”B,ŁRF+øąūü˜’‚ĪžČöæ“ļģŚž>ŃķŃüyįCēŻO>[0CŌńś†®–J걞§šj«s”źÆc­-ʛ¬ŚĪхį„wśńŠū#į<ś]ͬóÜÜÆŚĒĢTŒī?į^ndżŪ£¶›;ķwVŃ5 ;{ >āõ=ĔP>NxĪ9­­CĀZ5ī…«uqäjqF®”S©c5óU4z›rō<{Zø‡Ä‡/#m‹„v=qĘ+Ü<%ż—”6Ÿ”å&Ž=†>p9ā½\Ŗ»O&yõé³č=ęK•"®8Įjś<ܱܜūT¹äM—ʧoe‡łYŹć#ŒV<“‚ßośė]1”»:~„k<–;F聁˚’[;™LN‘43m.N°4zŸ‚c¾ŠÜJ]<¶~Töü«GSų—įķ:ž{kDSlķ·h\²ŠęTnSŸÄÖŗ¬ķ£J-?€7ė\KiöZn¬·O6WÉb:ŠĢ³Ó#hŚŅD·Sꅮ ūדkŗ“¶2pqČ$Ÿā­é£ž£±•įżnłīl„'ĪJä•9ćłW£jp<ŃhĢqy«¦Ē?1åŚ†˜öś——®ĄCDŽԯęžĘ[P®ädƒŒóIÅ£ĻﮯmķnžBźAQ’+^Ā+«“p£`ąģ+9FƊ}ĻHÓ,ģl#s4*d.ŸŠę/¦µ¼ŌŁʰnĄbqšs;M"ĖO“ŗBŠŹ€ ō¬oM*ŽO‡šf”¦¾/Rb¬ Ņ7”ōūꃣ٫N‡ā),¤1ŻE¹ŗjė&¼“æxäÉĪW#„3 Ó±oUŌą†Īį­\6ÅŻ€¾µĘXėRoW\–C‘ŗ‘1•-cÄ®ŃGļYIŗ×%ŪHė&ĒóĀķ ü@zgņØä5ö¦“Z¦Ń“Ļå ŒäרéÓŁ »ŒĒ"m[#ęŖJĘr“;—¶ŅļtłÆ“„…5  Č8˜†ø©u$Iʉ8å½AļL›³Ėö{VR¦÷=N°˜i×71ÉHQ‡ĢqĘ+Ä.­%¹½køP²ĖÉ’™¤V‡b‚ęĘŚŽęDŽ$Ī3ӊ­©j–°Ū‰Š,ņõ(5”qEY|]©źńé‘Ā,āąīŲ QéŸĘ®[x;ͱqKīÉbN&‹©#ćCš1HC²d’;ÕŻö°…™FYZ•9mÆ¢Ī“ Y3ĘQT|I;[[#˜$(˟f©£+³‹µǗѧ q“ö®Ņ÷G³±ŠßĶF¶ž.½k ¤@51a«hÖi<7ÖR|ŅąœÄOcšō wÄöZ\ņ-ŒFrNŃÕG֐rž7‰īå–šŻ;36ŁyĮ=? ½£ėO„Ż}ŖŽp®:ś HļµŻf’S·Ó®„,¶’) ƒĆcŠóŪ™|ĖՊ9˜~č©W5ŃÆ†õ+«[©4©ĄóIEzE»Kk,q|Üü¼f­36x‡ˆu]BóXhѤ“Š6a°$÷5.Óm[B·ŽÕRÕ¤8éPTV§ąż+X¹²]rȔ·¶¬ƒŒ·§é^–‰Ø=‰ŌRIužĀƒ^Tq1ųŪRmH[=³\obŒ ’޵Ėų’īū˜,]UüĻ™ŠēhśU“(ö%ÕuH䊄ŠV‹ķ%B…?ÅX:±p†[7mŖ ū¼t®O_ÓåŠÖāTr1Ņ€<ö3ˆ`„y³č_z“I7ŗå•ŌpžéÖ£ŲÓ£rgQµ>z°}ų é¼Ļ$r+2ć0qłÖÉ5•mę£C9uKŸŗGoóéZŚ]ÄSĘØŠ€8ÉģMU…}lmŪż’+‰ü™T•R~n™ō®b]n{Ķf=*ßj“»¹ęĶļĪŚHī#ˆŹ$䌆lć¶æ²m®­£™Xå+’ć8éYŹ]#kjqśŌ£OƒeŌB@…+Ö¼ƒPÕd¼økHķ^5<p~µqdDvVzm½«”$"fݜšŹ²ńŒ³,nŁ­”.‚=7OŌāÕ ÜV€$6Ź2[Ē§æ"«Ću=«„·Œ®Q†sQ-ʝŽF{ŻE/f•,Rq·'ŸÆé^‘„i³]Ł@÷ ¼Žvö%» ā;!`·Š4Yf,Hčk‘kVŽ,Ą¤vu @ÕīuaivŖŽW‚Ą?C§Ū]˜$K˜‹Dyüi4ic±Ņµ(4p†e°©¼wĘŽ/øÕ|A&”¦;XÄ#1²ÄHžņ?!œę–Ó<‘Χs®FćŌWqÅÄČb<²ķ9č*/øÕ½źęBĶr[$ä õßjÖ‚yšÄwģ*|€ķo'ūKĒ“Ø9Ķ`kž{µj¾T‡$c4 åN“Jž@÷+•źs€kŅü#Ŗé2Ł^ ¹€—c9ąóšBhā¼C=Õ¾Æcy¤_I([͈(+!©ā=ÄZÄŗÄ"åDeS=Ū—ćŗ–æØk—÷ZC;HĢ £=żėÓ< ØYFaY$)Č%Ļ @ĶC{§=҆B«!E`xozę.4Ė£=ś¢£Yt\rO­8«ķ,Į2ŻpĂ6©ūµsF–źL¼‡1 Ś ŠÖŗ¶.FõSŅ®X[Ćv’cMćīóŅ“‰¤njG¤%„ŠĶi"-ĆI†E\qė[Z7 s*“Č<Ō(ź90Õ|1u{ ĶķŚ™÷œ’zā¼ņūA½’ųG!“h!›„hLY„ą»Ń jz“ܽ»1\ńųWŅ·šeģ*K+łh ĮĄsI«šžeā?±_;Ē¢5ćW—Ėmvö¶åeF~†±°¬-ü’Y±yĒ„{'…o˜2wwķ[%`7nuK{}L“ Ę†2@Ī:zWœųƒJ¶ń öÓÄfµ‘XŸ˜ēpēō¦V‘£ŪŪK{Üāķ8 Z–wRhŠÜ@ІMå³É ™#TžöęHŽŚBbo¼=³]Ī„ڈa7N'—hćƵqv$±Š§Ńīļ/-ĮV•ĖęO˜gĒ?J»uā4Mkł‡Ś®Ł„jd©'ÅŽhćōM#W²ŌdÕļ¦ä¾ĆÅ‹‚qĒÆ§į^„åŚKjD°/žąöō ĪR¹åZ•“_ĶsŪ„BxJĮ×o¬o4׉%e—Ģx#½œ˜]†ä~ĮzZŚ¶£¦ŻĮęYń”=Nhe‚Y–WÉēéRXEw:›Xī8Éł€8ÜEzG† ~ <ŪŲēŅ»;½&Qe,Ą³æ§z‘ĢųRūLŅõ¦—W)!]IĪō÷®ŽóRź2^Y‚ö…ˆUļŽŁ¤Ł¬Čź3\j…ĪÕū37Dīū×+¦B²BóęGAĆŠśÖ%„Gm%“ŪeĪ2sXOm4’øüĒ…\ ±¼³•Y•č}+v —täDeo—œdzV‚}k‹ ˆtÅĒ,nˌ§jƒģ5 ;˜P·›Ź qœ–SS=…nų§II{BL^MĀ™6‡óÜ ĪŠRѦ8Šv¬ŃF¦•­h0ßI¦ź±A,RG œµ¶šF=ń\fŸscs5Ź)V(J€:škT+ —K‹TæKvUŻ}ÅGć„1Ar5_!Eh—r1ŹīĒ?®jāĘy|Śv©£¼‘ŻFQĮĄ R5…ćĀ[É$żę>“ęL’!°‰į™P)[®:×£h±¤Œ`‘—žF}j NśŪĆ7PŪĆy‘¾NTƒ·ė]ƒęG=Į’5WT$gø eÖń 3Ż+«ŗ†DŪü$ńŸĀ¼wRæÖÖś[åhå“VŪĻU?Z ŠEHük9ņc{O4|‹ė]D—ö…Ō,#°ŒgpźÓó ¾DGŖė‘Nļ ¾ńŠ®kw@Ó »µ #~ķ› Ÿģš"1ejś7‡ÆV;8.®c‰€‰zēšŖ—ZĶÕżü3 x ·t9ĄčĪk7ŲŅĘ}ÅēŲ„‘\¤C¼šÕ𦄣źņY›Čr„”$Ƶh3cY“MŠÖęĄB§‘ųb¼~ł¶ŠŌyLs“ē„&Ąµ”®„q¼uŸŹ9>ēŪŚ¾„Ń® ±µu™c„.[8ŚqEĘpś×Ž¢Óą0Y*ż¦PŹN2pAä×Īšė—²ė\²oÅH#–ō4Ät¶~ :ĆĻ¦Æ—(fF>é’&±†F£ Ī]Ö Ź”[…ĶO¦ŚjzcŻ9AslģXqĪMz†äą¢/ŹL®‡Gq¦˜ŲČrŠ=;×­é·¬įŁe'hēµ8­ģmü?¦]XFq4푸}̜œ~unĪ-*++©/ąøü°ģ]ł{Ū jš=WSIõæ³ZĒ*ŗ0BśžśW5ńÅž±›gw;*[åUOł÷Øsģi©ęŽŌ?².®fū47“‡-ČķļWcń–«urö÷¶šŪŪgåU9Čü©]&ö{ūßō‹e6øązš“ĒG@µ¶ jŸlŽįćśvśÓ“č`Łę–7p4÷¼i†ĪėZ.©c›åŻZƒ}![īp*DsŚŽ­¤Å«Ś> Šķ\ģnÓģk“Ņ|QąÉf“²” .LeØį x‘éZÅ ³jĪQ”K<ĒčĒ|lŃēäöś×}jחf}œ°n9Ŗ*g‡|hń…Ö˜¶¾Š5.Äźo į’¹»®9®CĮŽ-ŃåæÓį%¼ŗ[(%;’xF;Q(ō7‹čz§„ž §Šmoō}OM…<=ęKulI2g’8Æ$×¼£h÷6×RÜ“öń¹–(äēČģ5Œ£bœ 1é3źV’4qȐœąć¶+ĆĀߣ—?ڼJĄ¼`ž5M4Z“RĆ9–Ńƒ·Ż/ÕOr>µŌxrśĶU–x^ī"¤ķĪ;P$¬yf³§źįĪ ēeƒNź›GĻLśŠ[+‡g1g zcµl\ź@B©pńó9üéŗøIm­ä¶‰…Ą]£=hēżOHŌīuGŽöŅąŚHv¬¹$ļśU_č–MŅ4 {!^a•'~}hėZ­Ž³ā’ iśl·Ģm¬Uw0VŚ:\WĻž:ųmį;mwEÖ¢ū¶²#øRpŅcüMg} ėĢŠOkØĢ%µ ū¾WڳuĻé–eDr„° 3Ęq“ķP殆±‹;]#Å=ƚ>ĻØ­­ŌYuĄå€äžRźśķæü5a©GZȧżs&@ńgéśŌ$йl|’ć}gŸeHæI$ŌL¦Ń0:ž•ĒxcĀ6rĀu8$/āɹ²Iü~µ±qGq¢x‚ /U{]Bkh%‰ĒīY¾f^™"»;)ü#cā[ßi1ŚŽĒ^PÜo^:VrZ”y’ÄŪsā©®u <‹8\cŒcv;gśS`šę±„YiÉį»#=õʌÅåķųłėW‰hźt½WÄöw>+Š­ōūų߅’W޼—VÕP^¼ńĒ ŠŸ„3žPmįdń$Ė$ åī.ó÷}Ķxö>©wÆĶįm+P¾Ż K4lF9ēžŌč}Ó§i7pXĮ j‰ØŪŚ[Fębs恞OVę¹=kÅöžŌlü;c§}³ĻåÜ &0zéA2•.ń}“÷š³ŻŽnqŸÆ«wy|ŗ}åõ’Č’hP"B8¶*9ģa'ŠÕ!ŠŹ[„]B%Śń A’9®G^K‹«™/–=åcÜĢĢ3œöŌ=O;»×eÓā˜Ļ A<ēµqöž*¹™'³óm ļŁœ­TSŲźEu&”<‰  gƒ]…¾‘.©ręĪ=·;IOzŠøŹĒSgšīśD‚Żå |Ž$Ģ|9čs^”­¦éÖŅi*µĖ(HšŲ}ų¢Å© ƈt–Óģ&[x­”ĢREūķÓā¾u¹Šo“ūx/õ9cY˜B§()>‡¤xVĆZøÓlõ(,nā·ŽPĄ¬-KFń„©„[;•fŚNH\{ŠR&g­xgĆŠé–öŚ[7ŁŲgŒ}?śĻįŽ§‰«Ūj7Šæd1łJ8ĀŻś×3™Ķ'Šś§ā嗁“߂Śē‰µ=cCžŃŽŲM Feł“ŗ¶=kš·Z{˜®no|9¦^]ZJūŃ O`jŃ(śCö^ųŸćĶ%µ?źŠx’[i£A %aŻļŲ+Ųh[hƼ!o ¹Ł®yŖT¶XˆĪ3Ēnō?#sć]kJŌakh“­4øŹ‡_Ā“m.ćŠ/­ŸR­ļŌ†UŁ‚¢³»7Ž›żā_ųÄæ'Š{±«k#ЇŽę¾_Ó/¤Ņį‘maZ”)±Ę@Å+ĢĪĻį–Ÿ6µ¬Ėkk‰V2Ź„c ķRųūJÕī.¾Ė}Ö±tpąüĀ‹9ęÖvfŚu‚·c`±^×pÜYYAö„Ų (9¼Ļµ.^¦r‘KĒŽÖ|7§Z]Z%”NN?„sŚn·é’b˜£Ü³ 1„j sĪCŪƑjĪ’*6å`ÄWo£»Ńl0NT2§O—Ö“±…Ž{QÕęF†#ĪĢrHķ]׃tHqŗ‡ee†–ĘīŹßNÓJ§y$ŒćŠó{Ė#§]ø†ÕZŻĘ9ϵ53?i®§œ]x‚wŌfH I%v‘ų]/ƒt gÅVšķƚP‹`~r ŒśgæZ±œÖ¹š«ĒK4\ųØbŹĒźk–ń.…}įxm…ņ“aČkeI>ō4_1Šų;M½ižŁ ‘‚ōś×Yuć-gMK­=oUw!Ž2vśTņ"LMÕģŃ]ĖutØ8VążEu²j3Ų6ÜćoJ9Xm¦”ØźˆÖ—pø‰–ŹN>Sļ[óYÅ3}žŲØT@„Ī1CHŽŸį…ŸPXŅ Œü  mcÉ4šīµIīžŁzÆjœFĘ>•‹#“SSńŹĻ¾ŻætÜg¹¬uŌ¦øwRē8ĘkX¦Csc1‰&[…–č>UP+ Ņ| ŖėSŪ½ĶÜN‰óH¬#ūµpA=Ä×ÖėLæµŃ­ģĢQ,…du,+Ö“_ ż£KŽžź9Dzy‡ÆēZJ6Ō4’ ”»ž;¢ā2€ć^›§iš^›§ła7““Ä”{Ó§Šā/¬ōŸķ(nī!b`¬„9 zā¼R¹x–A,ģń3¹śPh“w9ģK˹LņKröå¾čÆæ>£«ųAmäŃü©/v†ĶØēœƒųŅ7Q,ŚźOØŻĒ©NSĪ ‚Ų\WC­xŽĀ+…hĢhU@mžŽÕ‹lŹHÕšĻÄ+[F 4<(ÜÄ·Qé^•Š“›X„–I‘nK¤Ÿ½Śš™—³ģejͶÆ'—%ģp0Č Ä¢¼ķÅf‘äŽ+µÉ$<ūŠŚ5f=ń™’éZ?• ”8ŪģkØæ-įŪ)õ9"‘ZRMģ?śõ²•ĖS¹å–v—:”q[[€ŽŪ°9½Må¹K;w@Ų@ Jcr:­1†‘‚Vuł¾ö6‘^+ā虯oļ ln·dŒŸJĀH+x;Ny&k‰į,ć^™-żµĆÉąŗŖķ!†r+žPgEŹŃ^@‰raŠ » 1“Ž„W w¦jwmwtģX¶@Px j¹x3L³˜Įu;‚Ī>įÆN{¤Ōf[Yaˆ*”™WśõiŲ•kš¾Ÿö;Č$¾”»&@ž޼šēQKe{VO<ä’Oióib$y^”{©Ķ;C`ńfäć9®ņInō= ;†‰ųŒ8c€Gz’mŠõ CįéōkVyõ„;ćŒcdxõõ¬żGM±‚āā[+‰¢²`|¶'Ą?„oqźyŃÓoāóÆ.®‘\’®Üs]¼µŒžø°³ÓݵEbŒSóąöķ[ÅÜ,ro†W]j6ńµŪØ •ē‰ü3.ž–7¢DŠ)xB9 œJ <ņēQžKæ³C,1’*©Ā±ō"»«Ég·Å„æ¹ ·qLĒŠTÉ®¤ŹV2õ[›{ iĢ2Jå²»O8®Ćś­ČÕ”y¦G·-–ŒšśÖBŒöYų±ąh|ą­_EDWšH̱äćsp?ž-’ą§æ³–‡p> Xč±ZŲ#µŽ· <’JĶ„”wŸįWĪ«€šõ‡ö –ŚBš!z”\ü£ņÅ`½Ć“›  Wƽhc&Cuy€fĪÜt „?&$qĒjfJÄb«Ć*3cæjOœĘ# V{ DįXŁYDģčOŻĻJÖ·ŲU€č=ź–ĒU7©Ńi£6¬–©9¾,±ŗ¾]NAV=ÆļžmūaŻ~Ņß³$’ üe©‹ŸˆŽ ooÄĄÜKl8ŒäŒ)\śDĶś±¼i.ŲQ~r¼`tÆ ń†%Ģ ˆ|ĘBC©ž!\¦sŲų⯇_L¼žŚ8Ų Ņ %AĮ\qĶ<’·÷ģąśöā‹{dy£vŗK…LˆŽ~e<~ŸJØnd~ÜŚøøøUO!Ć<šqҲn”ņY\8eÉö­Ņ3’#k—[rØ"óGMʚ0Ķ |ĄĄ­¢ˆ°¬…g`OŹ{zÓß źC2•ä€:Ї>Įbg_<%Č;¦żiźL[Ød÷ļU\ØĒ© i$;•C/×µ,®g·™5O/ >īĆŚŖĘČżk’‚KžÓšĻĮo‹|9Ō^X“büÜŲ™fŹ¬ąŒŖŽŁ¾µż»|0ńܚ„¶śr£Ē Š­Ż›‘Ėde—>Ż? 穇O+>”ŲŚ„1ĢI*ćæšš}ž™|ŗ†“āXnō+ūy4ūŲå•£qŒ‘ÓƒĆ5Ē( E£ų’‚·~ǚ÷ģ½ūMų’×HžņļĮ÷r‹ķ9L *@äŖßŎG•š‚|J"š9EݏŗW×ė\UhsSgm#é]č-~²Įo—’õ`˜,}ėŻą]:xÄR\ava‡)ÆÄŻ3³šĖB”¾±Óa}\GćļoNIÅ|ū¬xļMŅ|S/‰o£k(±äĒ…#jż=ėLFę’8ėŸSx'ÄfūI·øßū‰tažĻéŃŻ¹€]¹1œgØÆŗ„Ģž§…V:˜·–i,Bx„m®I żÓY stæčĪģYˆč1^„ŹtVÖI.ńę q“Ī}køšĪ”k‘i÷nņF‡ų‡Ž5£ģyÆjö–zmÓZN‘ĢŃą>ķ|×£DśÖ³vĘFxÕĪHéļS(—Šö‹} X<Ų»l >ńäsVu ÄŖĘąÆŹæxsYšxYµ+ĶAāŽ`šˆņW&›ń;OŅįђ"|ŪéW.«ŲtĒÖµ¦cQ\Ćų; ƒjĮvcd]ŲW8é^æØ\ZźśĢ֐3½ŗp |µæ“3TĢ}oJ²±³[‡“Ē|ZšėjŚ;“ĘāFcیTóš8÷9ĶNź2K. €qĀŠŚ†ż“ų øļU8ūßJ{¢N€kŅźw$ŒG 9$uō®gYÓ­å‰gՋš„Ÿ Ž]K~°JģŲĘ}jųœßŁŪ¤U{bx zÕ&OįSu›y”afȌtÆ>Ōmži݉påĖ'†ē„Tw2=[Ɩąxj7W uXģ#žæČWM§j:~‰HŒQĀųłwŒļéWä!¶¦­Åʗ«ū%æŚ¦ełĪ+ε_ fėšaŽÄGm+ą|¹ qž};ŃŹŹęHźo„MoUtū”$e¤MŪ ī= y„åķō–†Śé¶FHĖłsT“źg=Im|²«nĮ£ĻŹ*[ė‹;–‚GP„²ŌS2Ń½ēl(ŲņAĒjęõ}Zx“s§Ū™Bīߌp +›Įō9]+DÖ.¢]U i-•æxÉĮ_Jõ½&źÅl¦·¹²ó&8(ē‚“&ETs÷ßežķąµ`Œ²w¬ĻģŲķ„’HȑŲtĒCLę2Æ­žkWą}”Ną+›†åÜŖ6šŁē=Ø.0.Ł}šóQhdxrHķ^łk !™#ĪW*yµŌŃ£„žŠ:Q·hfi”Ļ5ę~)ן¦HeVIQҚ•ĀÉv8»ŗP¤ĢĄćŽ»²±Tœ©'ƽRW#Ż›Ā:­žž––łfqĒūGŲUoųGN§Ź·ģ!Ōņ¦9ļ’Ö­Ņč'#r’Lµ?ŪfeIVÜČ”œ|ÜćMšŻ¶Ÿ¬ųOLŌu1mę.#|oSŽ“›H›w‡u s䈖Ąˆć ūUcLŅ”×~U„ĖÅ ! ł˜ū~U‹wJū”֖įVHģ"#* ķā¤Ķm©ŻŁY³I¹mĢ#4R:ķfŽ_²i6č\Gձ܊©©ččm”¬ pĶ“žø «¦•į K­žād‚UMäēµyž©­Å¤Ė-­›łČœ)c‘š ’3 Ö¬j猯zč4Ėą¹YTĆPg%®ƒµkŠō\W»dc"½3Įś…|]„}•nāŸYe"Ž%=N{žf»¦A ź ÓĻīŲ†p¼­s~4ńJźÖz~™@ bAŁósŪ?…däS‰ēšlö–r꬧†ojn·©ŽjWĢŅŹĪ@ĮāˆīEŠĖ.ų‘dT=…@‘IöŒ),™Ąć­7@ōm:-šFåü¼ õU“EkÕ*Š6Xž ś —]Ž‚ö×QjŅ6ö 0[°®ęź[Ł9•A‘+Ę*@ńŁ“ļ·ėaoRHv ĒZÜŗ“*ŃR/%ąņō·į;ė}Q#ø„J#rzŠ×}®…¹Óo¤ŗ¢…š©’õP4Ćį¢ÅĘīZŸfW1ĢĒ{sź¢3¬Źpb+Ó|)5²Os-ģk!— Ä·9éĒåDb.g±»¹4%Ó¬ µ3ٳīr=žµéō^ŗ‚ń?}‘.A8a×Ū°›>wńŻŽ«6£lń†r_}Ņ}kß<xH±k›ˆ®&Uł” žgŠwīv«ćv‰ĪŠCmó; Ųę¹GĆ×z„zʧh‚HąŪœ×ó­ڈó¹s§^Ÿ:åX6āøŚp)'ū0…XH»qL o“«gӁfÉeö¬$’ßL“ū4e¾TSҔñ¬nćĀWz•ŖÄI‰Ÿ §¦Eų6=&ꌟśmńm'`=OOéY“QÄjÖņ¶¢‰bĢQÜAĘŠ+Ņ<1ąŻA§«ž×ī±f9Żžµ Õxnī]öķē$…·.Ņ3ĮgŸ­y¾‘Æ\Śßk—’“«$Ī‘Gž#PHāuŚwÄf{1§O{p啇 ō«ĒĒÅ£Ŗ ”¶axätō4¢Ģ’ ǧAØG:Ćoę³céF«¦Ååܛ’ĢAN ņ&ŗO Ļ%”‘¤-±ŲVńŲē{ž—©č7w‰ķąY"uŠ:šć%Ōʏa ڌ­l¾g–ʁ³ŠÕO@åźwz$pÜĻI0F•xfž#Wešå…ŃŌŅDūJ0ŒÖ`–Ÿ>¹}eäqtpßżįÓŃZM29o=k>Fœx¦å/§Tr8cŒtęøŁ4„—|±…{VŽžßJ‰4©#ŗ“tŖ£i#ļW,ŗZ<2ŗ«ł­ĒJ`z†Ÿ¦Į„“Co°*ŒąņMgŻM‡Š(āpī=:Š3©ŁÜŖH gēē„z7…/&“¶’9Ų…UĄ u wPÓŽźö ’ķ‡%Ē÷’"¶ģōß6īŅ Źˆ9‡„07“KŅ­­_{E-ĄrX3u•Ī_OÕu;Ų,m [ķĻ 575ŹšŻ¬©Ŗ]F‚ČJØźkÉ5}>Ž}Rö[T•mĪŻĄŠ™HŠŻŃü<ÖvpłO ć$ŠÅƒP6Ś…ÄRŪ¼–ė P6Ÿ›éYšņ£·¹ÓÄÆknžČ"± ŽX®%°¤dz$ĒĮ…o9GŻĻZ³{صĖ,c— Š ¹ĒkV^zĮ/™ę7B3޲®męµ·‡cŒ‚N9 dÖI%ÕØ’I€*3דŠāu¹^śEkx$}¤‚Ś‚ŌN‹Mš§ØZ„ä1”bŹFq[šÆƒīÖĘ 5"Ęu\—N >õn6cs×LšŽ'µ’gƒŒåN ę¶tÉ®,ā;ƒ¹sņÉ#źC•œ– ļ,ÄŖ6I#üź +L՞I&Ėäķ-ŒRVkĄØ4ѕ^ø=\ymaG0øt8ļQ6h—F]ѵ“Ł5¤Ź ū²z𑿓/ Ģ–ŠŪāĆ·R¤&֏āZźiRįKO/o<ŽĘ“ćńMƈck8ōĻģ©‘<²=¦PŽük[•{ØéšEØÉ4ybó6+jMJś+HRÄł'ʈ§šs7Z„óŪL’Ē-µöčÉåOÖøŲTŻŻ¢²2²žć½töŠ“ =kƶ2i‘™•ƒĪ’{Ś»)üGka§\–%ŚJ¹j Š>sžŁ:Ī©s½#ˆ«eqՇ©ükЬļ<=`ˆźN=E&‹‰Éź~#Ōm5¾ŽTPSiŹäžßʹ›yīõ+™§‰ŁŁ°6·Żœ£a%ę˜ŃZE,³"1ćiõ®SYÓuD0D g±—åi±Ā0Ē­T=·…ą† a*¤ŽpÜÖ»]Āv²Ķ9Š!\Ŗ1źÕbå6Mms •ż±…† †ī+kÅ Ńōķ'OÓģōÖøńĶ••Ą~sYJE$y‹ōONÕķ%¾†m²Ą² ēåPp@ĮõĻéUQžE0E"õGLvØ»™WQbXn™¶Ź§ŒŠ·§Émhķ#(bÄīć½md#kOÖ4ŲļÖIšA;A½>ļVŃF‹vd¾ÅĀ”ņāĒß«^f<ĢłŚĶ®uŻIŽņ3? cҽ]Aōųģ“ÓęHÄ6ĆÓ5„{§Ü¢ÆA†laŠōį. •ćU^>¢±„°œI!^6ēič e[hźó8evōė]>‡¤g„ĀJDūŲ“ŠzP\ßŪivå"¹¶ !bK㯄dĆ®KapĄß'BIéA©æ.šš“–ÓJȰsŽ3YśÖ½¤Łß’bĘŠÉqĢūGݵšÜg›xŠökū¤6š£ŚØĮ`Nk•ҵŠ5ū;÷Żęֈķ?Ā}*NCQ=^×]ƒV6K€²g}G©¬ż~Ź[;OķQkbĀ5ugҤ¾CCńJX]¢Ģ#ū9XƒĪk{\ńLڦ±.›aÉW+&ÖߟŗG_Ɯ]‰q±¼6Ņł¢vmĄc9¬uŠ@–KĖu /#“[V³Ń,ōł¦¹Ż0•ł<ńœÖŻŌĪ‹9掓fO0"‘”NsĶ;C×VŽg2ĆA¼õō ‚mgRy-3™lTōĻ5ĖĖueä’Ü<”5Ó tB£‚$Ö ÓG—YŽ^é“^\)Ą‘|·Rx+P\ų-ŽźąÄ€`Ü3Ī‚Ū±čŅxÆģ¶#P±…¶†@½›m¬·ˆ”œĶnl®äd'8­#Ł%‰ŽI.–ŻÉ}ĆØ®’Āh[ڹpĪjŅĶxÆJ]Y”óꐑ°Œ{Šæ„xFóI:|֑üˆŁ“{‘޹ļUb%ݼ;«5ŠĢ°‡ņg# õ«—ŚšE Ōm؉· ‹ßéZ9“Üų—Åš{źŚĘ­­X /nnf%ÕĪšpqé^™įæ†śVlo%·¹wD’]¼˜‰ēéŠĪR7‰vóĀ2‹XfŠ®VŅÉ&bńذŒś ’*ēåŃ5›Øö]q)ģŒßBżK¾¶ø·†kiŅ]Ä‚øķzĪćUńÓ-ɳÓĄXŃG'ü+2‰ü9q–šƒ¢y-®G ®lńF/4©§iŁ ygå\óųŠŁV’Q¹eßń¬äžģgwgk X’bĒŖŚ;¬³¬#'‰aÓŚ¾‹O i·—Vw3¼=¦Ø070ćŒ¼’Z@y?Ę ZhV°k'XG„>éŚDĮ1ćZųėÅSék©C›r·VÅ~ņž¤óœv­!.„ŪSŃ~K)?Śv®\+s»Š Ō¶šž£kSų‚Ą¤o6D£ Ü}jĢŻĻL¾›M{6w¾tD#‘Œ9x®§ÆéŽI}ö8ī]«]T&{wć§˜ē›8={ÄZNæēYAŗń\VaĮ\ś«Ėo·$se É-ŠüĘ0~]“ĢŅŌļ’“š’L°‚be‚ܮՓ¢ćŪ󯤼-®\kž†ĘY™&$Čā²qfŠ>~øŠuČüsy{ØJŪžķ‹užµŻŚŁķ»““Õ5?õœŖ/ńg śÓŠF„Ÿü9·¹hęҜ­Ŗ°2.ܱć”āņxv9oŁC#ģl»õ­FĀīų{}Åä—wĻ(X°8_Øė^”į]v×G³f•mĢąŽć ĻJŻOTg{™­.¬ŁK6 ļdtćŽ:¾Õm|Ggc „ŻŌNK0 >@;ž“ĀŚŁLš»µŽh#e—nę^¹ö5ā ÓSæŠu;¤[X ‡ĖdģĒŽsu5¢Ō5%v°ŅĢ)„C†łzuģ*ÕiÉ ŻĻūė“»Ķž•D¶Ī‚§ép&øŅG(t+³#×ÉIńLZ5ī“Ÿ4Īė棕įqļųÖ>Äq‰ó’Ä?\x‚ŅēG¾ižÕš ~söéY’ułü7umR}ƒ¹R}):Eū=°¼ńŠĻĮ/Ø4Z=¦£=ŌN„Č1†ž÷½hė÷ڧÄMF×V×-ģ­gXD(°’Æ©ĻJ|”ģÉ„’ĒIŌ.įCłŠĆ—>ßJłS\ŽėTŌī&Ō#h®÷³=éšž±“Ń]@»*Ī*~+OQšÕ½µ“āÕm_•»ėS!łw…õY¼9¬ĶØYĪéuĘYŽć]7ÄŻ\ŁŲŽ„ĻŚ$n6Ī:˜ ’hvV:æ†uI¼ų ŌcÕ[uĮČJóŸ}¦?é§Py?³ ŗß&s†POōŖ‹0{ŸY~Ņ>:мmį-;Ošø¹°žĻ…6¢€|Ķ£¹źs_)ü1Yuę½–ł[do卣ž)™µ¹īö¦ÓJ·šęHä7L2OlSųÆÄžńb–wü^w$ jŠÕ!Ā&!šŻ¬:¢!žķĮĮ ę1õ÷Ŗ^ šī·”՝,4uÉóń»ŸNę‹anufŃüG<‘{`®vßv@=koŠĶ¤n“Ótė?5„3;'{mŻéSb% š^¼>$Ōę¼Ž©;Œk9­Æ]YčM4š@›W%y1DŽyEÜOjÖ^!³½¹™Č䌶}»w­oˆzUŽ¤“īÉžZŗ)8.¦³ēĘĒϐDÖIĶÄŹń6v’Ł9÷­ųŽ=a­|ėHRŃ|źøŻŽę’“6‚źox‚T»…­ć'ģ mW¦JłßR¶0ÜĪŽd”‚x#§ŅŸ;4 7Łå|æ¾ĪW?ʽ[D³ŸTŌmšłÕ`(R;zšŅ2øĻ[¶ƒNŅKC"–Č$Ÿ”ńü«Ķ|_©›+«ˆƒFČxłĀ™īaų7IŠśņIē‰v¹ŹœēqÆ”"ńkéėi¢č––ÖŗKØE\³×ėMĪĄ“źx¶³¬ų»FÕu»ŗó4÷>h røĪGš­ųüs”ųÉt}'Äv6WhŒ6(&ćŪ4*”vΉm¢£,(°Y:‰B!ćąWźŚ|§¶·*?‹ÆhĮ˜öPÉn £€Ē<óŠėķn,Ž8®”DN7Ć~9³”iw0E 2Ļ"V#īŸQZ¾ŠēÓl…ķĖ­Üņ’ĢĒĒnNõ ō+xŗņŅ $ŗØyq™s–aų×9āOéfź+¢d)!Ԍ.?ʱēź5#…»›Č¶–ĪŻĄ;Ć«Ė\³&¢åeœIiv©čZ°sf©ö;ÆZyViy)%zG$jé!‘ugXåŽHŲØ …ąėP™q•ģÓ„[“QČé’I¦kkHÕ®‘VĪ42Ɲčīi’儎āād‘-ģ@ä“h^N ½qž%š¬¶ŃLM›Į"œ6W>õ"LņA£Ghķ(I''šŃBHᙄŖæß9ü1Žŗ¦ue6ØšMŲķ“~°īõųtūį°µ^qĄ½8ō&]ˆõohöĀDÓoMƍ¬ÄŽ õā©ųsÅWkw25ŒQŪ3–ÜfN:Öń‰›Üõ u9.­ Ņ„eQ»8ĆcҼ£_ń'ŪÜéwÜ·]£Ņ”Äq2xj;;Ė;ŻJPŠ’!éksgtU( ē?ZČĪe VŽ;‹'Ž0Žä}«”Ņ|O ‰¤C;¾bÕ¤aÜĢ’f_ k–ŗĘƒe-¼Ė,Ź»]O\ƒé_™’·Ą x’ fBŪד٠¹ņ¢É·œŽ~Œ3ō4և„(Ųž¾?|,×~xēÄ^ÖR+©ģīe_0|„ķĮÄrsׁƒļ_6‹}ČY@XĮĪTżź³žk[™—…üöŒ&~µGq‡K©č3ŒšR)$•\(˜ŒOJ•'ĘÜüĶ‚1éļ@Ņ$™;]‡õ­kC”ó_’;v:a¹ÆÕÅ£Ć43D_,„rĀæAąœæµęæū$~Õ^ ų™ܑųBžā=7U·„žŻČ wRwgچtDZž‹n»¢ų«@мgįۈõ UµKĖYŃ·!Ü ÄÄV”§ĀöņO! øm ŠĀJ̉ǔóÄo wEÕl”NŁęŽGyG%?.:ü¤ųļą«­Āŗ¶›ll.qØĮp9óšHĄžQ?i߆R|9ų©Ogeö}P9vąĮ ĪA>żkå­BĶ• gŲķŒ•k”+XĪhŌ!UĘOoZž=°†,Hł}:JŚś]˜²-—(® Fxewą«/ŽcX±ĘV.“°ŹŽĖßh¾•CŹRžh‘ž>QŒb®‹RF’HŠ‘ )8=źXs:¼|ļä ńZEf‹ÆźžŌ“隌Ś~©¦]Ēy Ä»ŽAäc½mšN_ŚĖKųßš‹ĆŗĢ×w6Ž!µeT÷@qŪq¬¤ŽøĖ”ū³į½rŪUÓ­$¶aå¼`ƒž×qłęŗ7F<²'*Ēҹ%9\ü¹’‚°~ĘėūM~Ė·!°·KųHĖr³ żō¶”IŚSŠ³_Ąœö:Ÿ…µ‹Æź’¤ZœȬ”³ę ’ ō5Ī„fѵ3Ó¼yv³ŗ5Ū‰Ź(<Š÷‹K_ŻZĶŖ[Ż,•ĀJ3¹ztƟĒSN\Ēln{†e»½Š­ģīäø–M§–ą“^ńĆčÖ·Ń„ærłņüÅĪ pPŠŒÓ2«q~xóÄw0ųgTˆ%¢’žnŅžūwöÆ·4hšāřIdä_uFjQŗķtEÜŻ‰RP S‰žŌŽ–×RC‚cAŁ{֖ŌGS}4WŗlŅļ@Ģ6ķ=k–š½µō— cœcµ6TQōŗ4k§¬†UóJxŽÆkصä‘ī hÜ.Üü¤zšĄŌč|7}w¢ętA. d?$T—¶wZźjR]ĢM„–B9SN+ Xē¼;”<š…½¦œĮÆŲŒ‘×ׯ½¤śĖ‚ń“¬ ćøĒ­mat±å> ńT×·Oł®wqšó[²d•„Ą.¼•Ļji3K@µ·Ö.g9éǵvšž›ek§[‡už`0ˆ½¶Š±™ĮF~Ź“'—Ӂғ­µcŽ’Ī~“Ą±gumÉ× !']ö•¬Ńd…r(»"oFD»¶¾Óī3B@8ÜqŸäk&KTdJ”±Ļ>“ђ‹eŪ[›ˆ÷[ŗ”AĒ=¬fŠČŌŻą˜I„9‰­Źä=?C‘4€<”_=ČļŠō«ė»{ėX$žŽnāć­Rv%ĘĘööRŁHeEsœż+Č5뻣{Ž`€zŌs"K2éSŻĻ¤^ŁI ¶Ø N¹;€)×ÖvSŹ×n7m1ć5}„niDl’ŪĖ3@ÄgÖ¹½NĆūG%Ō±“F]§pé“ĒóØs>mFD¾ŽĀŪ`…ϱµŲcŠÉ (WX½WLäs6·0Ś]Ė,a“Ććj¶”؛K‹hR0Žs§kC4‹vŚKÜÜAøł`›pķ\¶æ§¢]0†6@¹'ę“5»6<-cq$ģ‹gåaŠ×owÅĒk×ńj2ڤQł·7 “štŽšŻŽ«ko!µ•TņĒ…-ĻC×,tO hZ%”Ź×WlģŽa\sך'ń®WÖ§»0Égf8ǵK.šŌĻÓüCx.Mµ¼x˜ęÉ_­vš=ÅŻåŻŌč» ¼uõĶ š5”ē3+ŲėZ“,p pWø÷©5Mbõķ/ģŠÉ“–˜€}Ž)‘{õĪ©!šĖHʶ·mVPsƒķ^q35ĢŅČUŽģņiµŠjEżp·©!}ŃgqzvÆgÓõ[ ķf‘Tć?vnjµYnī,E»7@XuČø§ųBśjÓYY?³’8m¹Ī?³”ŗž“­ėZ~Æqąēläćś×”ÜųsĶæ Xśb³59ļhGJˆ’ń­Ņ6ɬmLøÖon!†ŻäUMĪư¦e8‰w Żé÷Ž“!@ ##Øõ«š ¬wÓČ”„lséTŁ'³żš=7B3\Ę-"‰K®9©®h\[O*\[Č^'ĮŽ?­ u:œ¶óXŖĄģ±Œg f kģčVGŻŽŸ³'˜—D6Zž”ö«ØešŪ;XŽ>•%’‡ī­åå”wU ’€ Xw8;I’KFø‰ķą}ŠyĻ„zZ‹Ÿi¶ŗ]ūRę‘Ļ$uéHØ£OĆ^YźvĖm µŖH”Į{žę½_Ę>'ƒĆZ»}§łw3IGĪv䟈©p6>sŌµ)ōū)¤žå¤Ld)<{ o†5ø/4ŁāYĶĆ>G„ˆ4t¼–ŅHQ“·ą ÷5Õ½ĢZL’$ńČĘA”*¹ń”Äf‹oīnōx,ōłUJRŖ2Ė鞵ĄA§¢o3yö'$š”VÓ=½ŖĮĆĒÓīć÷iäµ·šĘQާ  äņoŹ·ļäēuÖ-{°}†)<|Ā€: McOŗ†ļR··Ć’6J÷M}-u/ =ÄŃŪ*Ż”†W£aƒ?žµAŲńm7MC#ÅwpˆĮyfčä Ż‹PžÉ²Ĥ“Šp+1؜­Ī³{4§ĖĮ› õĘ+Ņˆõ6ų{u¦i˽.Į4£”PyR=ėhˆóĮo-ĶŁ7gšOĪOzŲ=„ä–VkS’cĖu5B0$Ō®·\Z x•XĘĄõ VKE%üńłAÖxÉéŅ‚¢õ=£DæŗŌl¢†ę?ōˆ”F¤@kĚ­ę‰kw ?“āł–ąrƞµ”yÖ-$ә¦t’8ĄÜz×°xÅ!|+g Ɨ l"mŲffēŸn M‰•Ļ7]GP›]ŽŪ Ł|ÅņpIČ’ėÖf§cåj€A…¹}j¹J™Ķ\Ēq§Ż0±yźjĶ“)0gÉ?7ęjZ6RŠŚµ[Ė|=¼øu;†O÷®ÆWÖķŪK·“r­ĪJŗ®r}é³Ē'ŠIn¤’@fĮݜVÕ­üÉI(Ŗ¼05q—C9@ś#įƹ,Öq„ÜÖ֓)7s֓VŠ4«»čžÜ]£¶ć•łIõĮ­nR‡c3RƒĆÖKc/Śc[˜*ŖĒå8#„rś¹’ /ŠJņ¦[fb ¤`dcŸÖ€qčvž#3čq\muP·¾•Āx†ćX³Ņ­ī`BYÜoć•ĢǶØóķfˆ2ć°¬ėĶE”‡Ī!‚†(ēÆJ–ģMq©Éy¦+[†Č…ėš§c}4P·ŸžhĘčƧéSĶw ĖŗWŠõ ‹Łb½“x¢ūŖ `dūWØZ’5 6Ģ#ך‹²¬P°Ń`·ęb%W=[½iŽŲ]Ł•­HĀ‘ĄQĢĖäFcŪÉiwR•lO­fė>%Ko°C¦¬‹+)ßøēŸon”ŠF®‡is©N²Ü»n?{'Š’+‘”k‚AŁ8>¼Ņ)-NŠMgƞ#¶+nQķؐ?.xޱi%®”%Ø!7Ź;…³OC«šÕŅÅ}S˜ŁĘµQń”ö1j‘Ćml‘„Œ@ź}h&gĒā ĀmęŚIĮĻaQGi£—~õ#9A ƒJŽõ¢¾‡äg”|ƒ#žČ­Ķ^)Žéˆe^8ēč'—[œ¢4ķ; åVČ>•ŅHĆVH>ŅūćŒmļAE ē‡O+XŪd~•„,m­ī!œ/ĪĒwŅ‚“čzWü%6šu•¼vÆŸ³ ģk›Ó/5+Ē–{ÄwÜIlŒgµĄŌf¶e+*Æ Čę±5TŠÕ’ŠNœŹMž"†,£ Įó]E†¦˜6R›N8`Šę|M$V ģŸ6{Ž˜«:O„õ cĮƒĘvŅ[Éa昲­É QI ±ĢéšÜh[ĄźŅŲłGOƽÆMÓßģW‘@B‚6·rir 'Ó`M.儖Ńķ*s‘×>•Čjŗ¤_kTŠ5„) ¶1ßÖ¢Q†īÉ¢œ½¼WĖ·Õ_J³°‘Ć­Ā¾>b~LŃŠ z•¤k)02ŻüŲf„T³Óą‚ēķ>Zy:qZbóJ½øW»…Q"BO¢ŁLђźĶ6~÷µc/S·Š8rNū¦n8®z{«Čv…”ŻŠwö ™>†Ž‘¤.œuØŪ0ø+…±ƒ[ņĮ-š‚Ī"ŽĢĄzbƒ&iǢ܄ÄģėåtĻ”õ®‡Ä–£V±Z˜mm¢Ēœ@ūōÅcœ»Öl®’ŽÜ’ón$ē£{V·ąŻ.śõõĎ8'| TÜ£Æ?żt\øDŌ‹AŠįŅgŗŗµ"8 »i'Ÿjó)® ²ŗŽ÷M„4;Žü •Ōlzg†¼DŅZøŪ4*ÜźFEršÆˆmŽ–%øT‚ ĘJĒ }q5ÜR¦,~µ©„čQ\L— %EܼżćA'Øéš‹N7r2²äįGlzÖ„¦łŅYIdŅA0˜>c0Aö4ŃŪjwVnˆY3Ą9ōŖšÆ$r›~ģüž”š*,ā“Ķ*z×qŪ²±Ą$q] “ŗ¹¼–q'’‹Ÿ˜÷¢;£ÅŗrŪĆmå3<Ŗ¹™=©¾ Ōķ­ć¼²x ūK°e“?wš™ŒģŅöņ'ĢbēēŒqĒ„h]éדXĒeØ(‚>fÖ8õż+ ’źÖĢŁ–’I„8\ā·¼EØAØŽ­ļ†ģåŃģ‘B„i7’@äēŽƒHďVńŽÅ¦Ė8“ūI@Yņ8įqųW/¼ƒĘŚ(¾Š{›Į$„”›’]3MMų™ŖŚÜŪĪ÷“Å5ŠØĖ"ąĘƒōÆŃ泞9Źį.BTƒœž5¤bs™Vz£sę=ųO(HTńžÖ¬ßXĮ¢Į%ÄĢ&Dėø`֖3™å6w茐š8ÕWylc©Ķw:Uåµę¬Ž{±Śā†BEé’KŗK»[Oµaų*@8ÆI±·Ō%“‰Ö·w©\4Ļ!oŽØ„PĪēCš×†­¬’ā{xĶf}DZ9ĒC_?xƒĀö:όµfÓÖ+{XZFKq“sA\äžšDz¾µ6£m)!]Ų?\S¼}ŖI§kZ‡…ŅĪį-#‰s»ęCPāƒ™™ŗ'„īfÓ]’ —ū¾Cė]MŸ‡'Ólš)Œō1ŒŌ4 1'³ū™žvmłå^¦šÄЬŸ3ē‘Wԃśę[»Ø-øH@å”u>¦®éśfĶJŹ"Č-įŻŻę¬V8ßź¾UķՎŖ-唐Œ…ĒŽjēōĶX$č'ß?Rs@Ķłµ[Ł|ØķīŪō'[^mGJūEÄń0c‡\ņh> AįŻ,Ėn|ƒ( t#śt®"ŅüE3ŪDąĘIfQÜŠ¹ć–t>Rp~lśW’xĆŅĆzׂń0ł—²ŸZĪo”QzžY­i r”ā”)Ćdc<×'®xcST†źÖæ·@ETśńJ&®'U„Z\\i* 'å]›ūæZ܃óĢĒz\Dš€čéĘļcåZz™ŗŸ„uŹ4Ė„µ¼$6éŲ}ŁķZ:>•ƒ·L¹¹Šžę"VYTa]³ü#ҘŽ–{_ ĄSZžīH§OŻłN~LzŽkZĒW±Õü”µŽ„m%{ūÓ)ŠĮk¤“Q„ĘÓ“ö«1IaµŚ}‘Z'%‹1=‡j‰JĆHó;=+EÓ§ŌoEؼȏ‘üwļ^?«\jŃßIż™4–ÖŅ®ŁĘlv¬U·/ų.mZÖźMWQ¾ŗ{%Ģ^Y ©äįiž-ų“sį½rĻ~ ¶’ƒ‰¤Č Ć ĒzEŲg…~#źŽ#ŗŌ`ø“–Ö<•ŽIżv»[Rč›÷,"7&ƒ)FĘV·āėė[KĶrńE!>Rś‘ÜœV|öĶdˆ®Š®O_Z±ē^-Óī$‚}Og™kn7•Ļ žÕqŚV¢$Ö4»RŽöłß6ųEc³ž-B÷P¬ģ“róī<‘ŁGłķ]>­ØØ{h.SjoEQŠ{~t "ĒH“µøŠeŠźN6°č˜źĀ †ĻOŸIŒŪK$×m‘q½Š3Ž? cȾ Xér[ź–¢ ’ü„³‚T|y¬iŚ„š„žJÓŠŸ›ūžŸÖ‚Ō™ģ:°¹Š4émä¹ŽĢŖŖČŒ@'<^‹ćm2Mt±„¢†$ƒĆ9ĶLå>Ę’— i†ßR\źÓ©ņö„ōēź+‰Ó“Ų4Ė«p«÷÷ ‡hĪKc×ĒJQ½„›±Ļx÷Bń:½¼Š[ÉŗncÅu:5„ž ųi¬&½¦ÉmŖ-Į…'`v:AżpisYž£ąm ?ĆzŽÖ°!‚-”ń†aō®ĻU𷆵(e’ūJk«ńXdWåH=H"£›R]ī`kŃ M:mEīŅŒŽņR`‘ĒqҼ“Qż©¬ō˽" ?Lµń$Ń\yDܒŖQxĪ;Š>qų©ńsÅõ„6–Ćw˜–źrĆ?t²ō/^]Il6‰ddŻó6ĄĻ$ž5§!³I#Št»ł¼/¾n!ČRīē?ćŠōżCL¼Ö¬·lœĒæ§ŽŽCžhä‘4wŗ[“€žbLt·­¢±½šå`‘"@6•QČöŖå!ØčRiZSOēżŖąĖµbUĮdžUīāytˆ-nX“4ŚŠé‡ĀżRļÅm«ų›S·žĪ‚ݼ˜Y?Õ1ī½djVöŗuÄ׋l—7‚Š‚¹äw¬ģÆb”Ęü:ńOö‡‚uųĶNE¹’4E/Œžüšå Ó4{g¹×>ĢÖ-s1lJqęc¾įUf>c…ń3éŌ֑XYĀ/RB^\r~‚“ąŠņ¢&WVI–ć\¤;»jz…ā8-c„Gqå° ø}ßjō/Į§x“ĆWŗ½­µ„®±l£sØ9 N:tō¢å$Ļ-Óu »;Ņg&{#“lN)ž8’źŽÖŻ¢²ŸŹvžĪŃ×4ĶyzYįÆÉuāÉōk‰å‡0«"²į@Ļ_óé]·ˆ|?­Ž>É{”`ꯐOńPO#9{«mye†ŽäȁWd†­Cŗ%gæ%ŽæĮAQŽĘ?†³ā‹HE›JšHÕ½sČ?JōųGt?č:†– ž£v³ŽQ78oö[ėÅK—CNką?„öŗœž ŌćŠY×FÆ'ńvP¾µģ¾#½Ņ¬ķt;PŃ’±ul« ”K'f>½MDŸcK¢<æÄæ4ķ)×KY-d»•~Eq“õÆÕn’“n®U"āQŒŽų¬Ū±&Ɔl нÅĆgq'‘Ą^Ā“¼A«NÜŲŪˆ‹°…ż3Y9\ݜ†ō»ÕVĪK·Č œ•ś×Æ|Gų!Ŗ[xćĖ©ÄŠĄ%«rĒÓ¹­iŪbyŃņf…¬jjŠĆȼ†āA†‹ēØ®ć[–żŠÖK+›yer™©śž5ŗ‚3–ś‘Ż\G£Ķ4P™'uŚr:g¾+µųYŌz‰ļ ‘‚äDįvõ½¶ėžœ‘'+ųU{٦ŽāÖ(ĄŹ1ķÓ&¹ė ]E|Śŗƒ•$rW‘ėZ¹ØZĖ 3©½P¹Ć ļW|k%ŌŚrÜ۔ڮĖżTst#œ4…“ŃÉ Ņ+(RŁĪk‚Ōō:+¦žĪV—>£M#CŠžéŗ£ź ö{…ŠÅ֗@?ī¼{ąĶGRÓou UžīąœŁŚ¤Rŗ…Łåæ’„RÖöīK)ī/™„©ąoŽ{q]oŒuOkz?öī£ew< æ*{g§r ä>{[ėA$°EW)·²kŗŅõ[-6ĄŪ™ārĒ?1ūµ˜­ŠÖmbÄZ–ø¹0ĀŖĒxĻ W“µÉ•äø‘‹I\Œqš‹ŠxF›Tw“¾ye9ķ^­k¦-”ė˜§hŸŅ‘qi.õÕņŅĘŻ–k–%Bõ?ZÆmį‰+yoŻ®“ßŹ©JĀlŃ]> ŒYiģčń±\)äJŽĒĆŗå¼ņŽJ’yĪsėZFW;ģxī­cóœ<”ł†p+->i³ŻZŻā9$Ü•Xöäb“QŽx’OŌ®|5ożœ\¦"ņŃFģ×&¼>ÖßUKĖG€“·jN-ĖŌ}Īž‹h×pĶnų`Ī2 öėXńÄ&VVP\xéō¬kAŌµō&ū\mŌ vCąnēŒ ŲŃ|VŸmm<Ėŗ9"dtĪh‹±Ģ×SÕ4Ļ_[éóČ„P‚yڧœēŸ„QŅZMA{Ge) Čzsė]ć+ļŒ.-īd}&ĶŻFU¤'ępk”µ»ŃžépYĮm<÷ŽĮ‰g’X=…jŚ:"ś}ĻÅ­/U¾Ņü:|7=¬/·Ęį™ƒ×ۊī“Ė9f†[‰¦$}Ēhć¬ŗ-vw¾œ¹\Ē#Œ×Yį=jO Īw¹{2Id9¬f‚ ś~-ų™{Øj~K¬:Ÿ¬¤qó,Į#ųuī 8ZՊh÷²éŃK¼¤k2ØR7#ƒŠŚ;ņG?,@Ė–<ž™<ŌbYeV*˳;@=A¦rOK™ķg"ŻJ ąަ{Y¾QMĢp0zÕĘ:\[Im*ÄŠ3&ŅD®rON¹«†"xRĘGzoc¢/©„c7šÄ2Ø śšķ4Ū›Ā-ā²»:l¼‘0•9č=;ŃŌź¦lš@ŪŒŸ5Łsƚ“ŗ‡|0Yōłd“s4ü«“ĪFqōojżŅŌķ&d‡ĖéČčk:±.¤u<ļ_Šüė)¤¾ŅˆĆā^āæ4~/ų*{ V’åĘFYķ0?ˆg žŸ™¬ ŽWOÄ_ų(_ģéeāæx‹_Šm­ ¹›ż,˜ć!­gS€znÕüėj6ic+Ć#¼—LrBøaĮąó[Ēsģs2ʰø’R}G*77‡.™ĪŃŚ¶±É=Ęe9]Ē…Ķ$HĖęDźīĮrÜp*¶&ä7gżč €=«^)bŲŹqŽŌs£Zw!—ā9„W— \‚®G0T ¼1Ęzž5hé†Ę…œ¬ŅǜÉẚżG’‚]~ŌZ·ĮoŽŌ5›5šęµ1‹}ɵn¹_sҦGTsūųć{Ytølļš{]J1-†!dĻ(OLš1_\½É[xĪÓęµńü&¹jÅv.`šŽk{čRņĘdkkĖwY”a‚ż žąµß±<’³æĒ»xsJ•ü¬;^[5”YčO߯ӎz×GgsZlüšĀŻl鶇Śļ¢XäĪ Ą“¶HčGzūGĮŗÕåͼјĆŪänśŠłüĘJöGd%¦§L÷ŗ‹O²Ø½gųŸX}>XexŁ^„s^4fłŒźlyĘ·<µ!³ƒ^ģYåŌG8—²%ų‘X8?§µuöe%5ĄŽyäVĘeé'H xå„o9ŚE`čÓŻE©Āę5oõÕF—CŚõ ıū U=8ŸŹ±ō­NĀ[ÕµŌ&"/ónüVEó#œŌ#x®&10xw9č3L]uķāX#sĻ4ģ;ž©ążH-V’Šż„žu`:Ūõ­‹Aµ ¤IįL`©üėq\ńƈŗdƒVŚX(¢ „Špü}kĢ¢…ŽåüÅŻ&ߏ‚dՏKš]š,¬²ˆ×p –tūW{6‰„Ż\Ū'˜čü†¶‹čebŸ‰ü;§iöWf׉r.K5xv—b׏q#L’#M;/ö{DIrÄėŽÆZXyŽ$ńƒĪ7P†t6·7Öždn¶yDœÓ®¢{ø¤xdXJ€Ų#ļœō¦a&Ų_ĢN0GZ}˜²¤Š;pGJÖ$ŹV57Iy©Ęó>ȔŒ…WQć JėJ‡MµC łĄ8pßĆŪ#šŖ‘“eoų‚k™&ŽéUŗvąÖŽ®RźęŁa¶ŒDĖb=sļX}Žn=FņĪ5UeŲ~ī+©ŃgkĢ^ 12¶žĒüŠ:ūøPXCsĖ.špƒ&¹K›åÕ®¦Óī“ŁMØ ĀG ŽŌŲO‹H›RvÅēgnŅzkŖ×u]L³šŁįĪ€;ŸJw)Fē’ĻØĮmūęĖFčø¬Øī“®­dVpā@±ątꛑ¤"{éVÖ?nŗó!ß÷Ktjē-ō;½@Ė1Œ‚r:ž•p4äf—†/!P„9;³ĀóW5Ķ"h“ųŃnßy9b„ĄU˜J6<šéŅā)X<ØĶ„lkf=#ʊgŽycv@Ī(ģĻ9šĀö$w‘Ww˜G'ØÆ|ųz£RŃ †įgI|0š 45“ ŪĖö›€¬„…ē?•x>«Ū«™ę„ł[°§Öšv±šķå元mŽ)"•p ˆń§izżĀj/˜…»‚Ae<Råcku:żV×S²žĪšM4Ŗ¹‚LżĆß#éKį½-$ņ–söˆ²TqĀ³”®tr£¤:eŽ•ö™Ž›¦@GŗžÄc½Q“»–kS-šI½2UE OCÅoēø¹æš`e‡÷Œ¬qøƒŠīō›ČģlQKb>`Õg4•ŻHŸ]¹M\Ģp™8¼wXŠu"śā ’„ĄG*3A¬bki±XCc*LŖ“פֱh‰y„j1µÖņÆėßÜTÜÖ1±ŠųSOmkC…ĆyW£v n_ĒéY6ŚTq]¢\\ÄCŹ8'yźk&‡n‡u“6ŖJ“$Ø{r1Xš­č† .$lp1ŌŅŽ>Ų[źép—sČƒåķę°mdÖ|5v²@³ŪE"•ÜG-ɵzęüŪĖ,,Ņ…ņ×jö­ßAkm®XĆ!…®vĘ^[žŗw3ågŅu=/OҼ+V¶ÖV e·Ī* ™²s»ņÆš¼R]j ¦i¶5¶ ÜTš)óīnźŃ]B²ŲYÄKä‘Ås±i“ŻIR²d©ŖłĢå¦ö–-tŁ6ĶHłu<{ŸJ‰;•“;ū%ʙ9„Ŗ0[rœŒz×s.½5„•ĖŚįā)ø»ÅI¤]ˆ¼©k–Šņį&²•U óś×¢kŚ-õևج8KˆOĪFN=@ü+UTdyÆ”\Żh¦YnüµŒ)Ųąī“׊O #Mµuū3‰ GCļŠĶ–]ŗÕŒh‹AŌ×Y¦ŽC©i1Ē*lŪ‡"¦żįu“-¼mŖäķ c"²,§Ūjģ™:ޘK ‡ÉóSĖIW@;øĮĘņ Ö1±­>¢ź”§Mn§t_»—ø?ž¬×’Śč?ŲZ}ŽÄęwą«‚>µWm£;G©^ŪĶ)}›Š·Æ ¬k[›†ŪŠ_“€7qĘkd7¶Ļ}}²+·ļ[V:\‘Ź­*£GŒŒµˆ"Ņ9C®Õ^ŁéŠóū6VՌĶ(…²ž BAÜédŠa_" JØ'­k7„āŽÜylcŽ3µjLUŅē°žĪź‘`9ŗV¤Ś’Łmn&{„Wo”)źsO•"łŁäśµä×vķ'Ś&“ QIüń_H|;šĪ™i¦M«³r® 3uĮĻ„Ld)jCń~ĖX×/“GŠ e›gßpćź*šżSĽ­˜³¼…ŠØĮb~é¹ĢŻ.„X6yČń•ÉČ>µ”wjnluReČ (Ź‘IɉSīlxĀņ“wd÷Le•‹ƒ/ŻåSźśĢwÉoUH€Č¤‡Č][H’ąL#C·ÜVŽ„ā™uīō»HR[ųą.¹ŁĒņ Ö18)uthöYŽ6¹P8Rz×c.«Ø/„\Ķl<äłĘĪ­žß„!É$s yy2Å å™Ī+"ś!6£Ū"){Ó3:Ż2{ˆ 3C:c;U3É5kVÓd¼x_Ļy€Čć4‹Œ¬mųnÓƶgXŃÆÆ ‡T³mØTåd9ĮĮśVŒōĖ‹KTÕafš7ž‡éA¢]O=ÓīÆZżfĪv°8«ŗäó^IęĶī\‘Q)[@q3,¼¶ĮoŸ¢ń[’ĶhĒęŻŪ”H‡ę\ŽÉvÜ)T™XŽkfööęļdŒw\ął…†r}jŪŠI+‘YAĒi£ąŒēŒÕnͪƶźZ]ĒpǧØh:ļL½×Ł•œ‚ŪŽ6‘Uu.ݤgdČq»=j‰1¦ÓoøŲīŠv»Ą5éŽŌįŠą†åŃOČƃļ@Ó0üUÆé‡ģƧŗ¤„³J `+dš?JĖÄvwšyKŲԌäōäbƒK½;·Ō!ŠY~ĪĒf󌟻ķ[ö÷‰n‘Ļ!'wQÜŠQ™ćN„¼‹kļ9ēŚÆhZ޵/ƒ<7įĶ2Ņ+;õĄ9żé=Iķž”ŻéZDŹ£+œÖ”zĢ:EśŲ˜ā–ą1PŻ[Ÿé@”®cĶāuk¤·‡˜œzÖŒ,n­­ąŽYSt­– y_­Ī[Ļu¤Ūd"†ķ’Ā;āŗĶYõ-e²AÉS—8ąŠžDģu ^śk2˹˜2’{ÓłWeØXOatm@p݇@tVÉõ§Ų§TŠYŽ fėz|°šćĪ— 1ւ1ŗ»‘¦7l0‡SŚ“āqm j3”ąp ņh3ŗå½ü± c ē•½gy§[jP¤ƒ#9ʁo$wv0[Å ¶ŅIqŌēµy‹QŒ5”ŠŹ‘¶v1_ė@Ņ1<3oäĮ#_²½Ā>cļņ×^‘“×V·qÜĮå.NÖƵ±V3oŹj*Öņ6Ȳ@®_Ćžõ+ˆB—A'Ģ:‚((ķ%u„ÆɆ(ß÷c#@=ėŹõ--a¾–ʰ)Ģ w#9'õżi™Ķ·zr6±ĘNqY¹Ŗa¢“u3GD·'ƒż+¢Ō᳂kC›®Žō£+cĢu»Ÿ??;1#O'>µēćķ·™ ž9Ęź®d¢[x³UŽÖ;xē#bm ½‡­gÉ­_Ž—Ė6į“–8ŪōŖ²`vśE½¤7‚ńę¼P±8<Ō ā CQ‡HŅ⁠Fæ4ÜŹĆ(O©MyŖĮ`Ö¢ÖX†ŁGūC®}ėŽü#§ZĮ`nü»wšO”±°üé'bå°ĶR}ü_i×°-ŌXŚPć#5āZģ:ŪĒ Į:Ż’A…ƒé[ÄĢź|3u{äĮōjS!ŻTōjå>"_CØi·0Ų®%&@£$ü'Ź®K±œ£vx ՞§göI\yo0-ł’ėWI¢,Öw"ęVŻ‘—Ü~÷Ņ„”Ę6Üõż/\†hŌ\ځr«“]æ-MœšN™Q\f‘q§­+е!m%ōŃŽŽ;Œæ§iŗŽØt SI#8Œķ=½LU€M>÷TŌõ%’ą,–ABĒżåĮ­ĻĶe>™%œiÆĄ ŸéTg4yåÜĀŚ=7—µp9ū¢ŗÆ ŁGŽloód÷4'Ä_jw×VYAę[efĻ8Æ5Óõ]_AŌ­,-Ū–rŽHäÆ~ō3xģzĒöŽ8žc;/?1§ŲĆ§Ø‹āŒź‡ ƒÓڰnćgU6”¹’īʝ£b©ź•Ó­ż“> Ōõk»˜¦ČH‹9rÜu˜Ķ>f ž%¤ÜjšœŅ#ܘCałGҹ­VŹź OPK9eŽå¹]ŁĆqŚž u Æ5MßöšD’” ē®ÖĻjé5=[żF{ėˆ×8V?ÅRUū ¼7ZvžŹŗ3 Ŗjó¹nu+Yąk¹œM÷±“ƒH§-ņ;ėMmm¬Ń ,ØL †ē·å\/‹%ƒI¾U%w哞”īAÆį˃|žc[“łś×=ā+éķü蔯 ܎ i÷Éx7CUÖ`·‘ <˜T?^qł×ØxćĀ\Ś£Gį:[{Kx€8!ŒŽOõ`|ķöĖø.¦HĢžj9qЊõk3}µW˜IhĶ÷ĮŽŌĘzeåֈĖ:ß“B ¢¦yÅy?‡|+§kÜŻĶ ÓŪ’Ž[1åA9ÅL‘¢é–‰¤[YF,ķыƒœ}䶚ńMN™dXŅ2Ų$’GéX–ymö„”n¬eĀdq^#ŖųÖ8/®-töfE“c”žžµ5Ąė4Éö@o7ČF 0Ę}ė½šĘ”öęžŲ*‰OŹ 8ł”·8_ˆ6wZ½½Žį}ZŌŽšE2Dųr€Ž7v侕›c£jŗ3żRssr™YrT’\UDZõ=×\“† .Ģ3 9=y­‹‹ģ9ćŽ_+ĶLFÌc'@sš¶±­6»§k^żƒMŒfį}äļžÕŚŪüJ²×ę¹ŠmP¢Ęʃę¾GҲ”®; ~Ēlm¦,‘dŸrMpSŲÉs$‘@[g©Ø“:ŸhšfƬ\hšĆÉ5°ŒLaū”±œsīEWųļą]SUŃü2,l¢ß†D^”¶zŠ̳ą_ čś}…„śŹ£ž”rčj¢yæˆüu„ͬXŽ;É˜ČŹĖJó)cš’…“ł_Lx®®ŁM¼‘ø,aČźzóHv6~x[Xń…†”<Ģ–NU‹Œ,}ö“ōĶtSčÖ-y0•EÅģ` fn{R2”lf_h‚åēÓÆˆš#ņįO+ųŠč“ż"[|Hˆc#)ׄm­čšeŽ«ż©gyveā·s—ģXż+ä_łśE¬š@¢ŁFå黟(_ßßjZƒ„$ĶmRžķZ?»ČĪ~øÆ|Š“{‹{ł­oŹ™÷ĄĻLf‚ćē”|Sųqāki{į[Ēū8‡÷Š™ĄPR=’Z¼÷ąæŽÆ|/ć[ļ x¾8Rс‚ ¦å™½¹ē’ÆAq>¬Ō”K†žķŻ@ŖaĪ*zb¹ø>(i¶¶š…®Źł£mŠ©?źŪ<‘޵”×ašŗÅoM¬CeŖ °…i[q×=3^­„k~›XHaŌX7ĢŽć Ōż:×3‹|oń;ćRIć]_C¶æ±Õ¼0·o ²‡;¼±Ęqõ«— |#¬ŚéZ‡†Žą[Ēœ%vz õ®šwĒĆį›m#Tk‹/õ›J±Ą ćæÖŗ]3Móü»–I#‰ĮĆ0+ĻćZˆÕžÄ³»KøērūzW/āõńchę 2õአ0ą`śķ #Ą¾+¼Ņ<=¬'Šo§øÖnī¾Ļo ćpćvL»M~Ńīm§Ž4~6ŖōzŠg4k2ŪŤOqu’]®ķŽ„iéž±³’Śł$ŹB pŽÕ›“3*ŽŚZŹ%žŃ›ģšÄĘFwp¢»?†£K›Ć× §Żyŗ‹ČńĘŒæź²x?^i¹øv:=&YŪDŌķīµiõ9­A#œ–lō'¶*='SÓ'…N¤Z,pÅF@j‹ė”<¬­¬h-<ŚG‡Œŗ›ĘCą.Õ|×+ńįÅé±ŅüLnnēbĮ|„%ĄĪG°=}«[÷.k>ń=¾¤«e/‡Š“12J§ĢÄaQ)Ž2¹ÄĒØ=čX·.Ę#bē©§Ś]Ėsw¶ N Ɂ\ņ•͹č <=§č×·zī±ŽåŽ9q·ßņÆ®|1āQāߎ;;ĻÓ;AĒ_éSvZ¤Ü[ģx§Ā­üq«ųRĆOW ț¹õąu’ évÓoõoŻ’l^‹h!iKyQ®/ Å{īė«->F—ģå8‹9š­āƖēˆx‡įü3\Łiŗ;™õ»©›č„}ę>‡šć,ü?Ū^×RXdE%KgäČōŖµČ•2/£Ū$+ &|„„Övį/kšŽ]ŪŲĻżŸoƒ#ķź):WÜɣѼ+s ‹Ée°’U#»Š½q=÷öŒńˆ6sŒpMfč³.sĆžÖÅBź;袔0fxĘJ‚~ļ^õō]Ō:=½’ ē(c_›xĘÖ¬åM”¤pš•Ü0 =‚ĖpüłÄŒg×霵ꑆąŽĆt×F¦āW0‘‡ŻQčzVīUŸa× WÉäĢɼ¾Įé^”§ųęĄya£)±@W¾µ¬CQś—Šcŗ/&ąŠ¹!Tci÷Æ.Õµ-FžŅāßL{rĪ~bĆ#EyW„ŚŻÄ÷(ā>Ģǽ.”bŚŽ±¦›¶¶i†uyĘ3Ö¢Q¹,ćõ \E­HŚ…ä›I †®*ĖG{„¼–ńś½R¢cnˆū3Įʏā Ē6“§‡ŗeY²I(ćkÅ|s¬Zųd™ķāQu#”W—|։[B£‹Ō¬īŖ}Ŗ’„õkķ5ŚĪKk†X“\gó«k”Ó =3Uųƒ$E‰ŪfDSĖ·½xN­{6­Ø‹Ū¤ÄĶŪ5Œ£ŠŃÓ±Ł[Ķö{Tu aœ{Xr4m,sĖqå—ū›æˆć§ó¬¤Ś2k”ž«{%ś”-§CÉÅzĆj@XEŽmį ķW”<ˆ’UI-£ŪΜuć‘Č5õĆßĀS¢8“ī؈äēņž”ĻBQ?;æo?wŠ“]nź]& Ķ/X¶}>ā20¬8>Üąžuü0~Ń’üEšćā‹<ā=6ūJŗŅ%x£žP»f?)\uP+Jg,ϐµ;t%™@•TxĶTŽhVßĖŲ›÷–ęlև,—A%ŒEņē`Įäö¬É`3¢Ä,<äø8#éZ)hIr@4Œ9{Ņyæg0FŖLL9ćæ„K5ƒčiƱ|Ā©µY·`žEY·¼ņ•“pG'šqLģ§#ī?؃öŖ×?dŸŚį×Å«=[ūĆQÜE«Eā»l`H’dēšÆōwŠük¤üQ𯇼᫸/“=jŅ+»i£ «@HćėŸĘŠ‹MM§.„;ĖGˆ7˜C/ ׏’¼-ö×Ć™÷ˆĄsJå9ä~i|Nšf¬ézž™ØlÆ#uRW"9Ę@$õē5ü—žŁæßį'ÄéŅļ®4-[Ī“ĪxČT—<…nĄółVїc .‡ÉŹbi#\0rNqڳ<æ)Œ|ŁĄdĮÉ?4„±ÓMō?²ų%’ķ+ĒƒPYų‰müI§[‡¶Ś 1ÜĒŲī7Óæżü;ń½—ˆōķ#Qžošī-— ć9Ē ŸĒŸĘ¹fl¤ĪööŠŪŻ‹€TĀF×_Zų?ž ;ū.iµ—ģŪā/ Z-ÕÆtkI.l%É»ƒų¢>¼`cÆLwÆ:“t4Œõ?Ļs\Ń|CšćÅś·„¼Sk-„ķ•ĆĄ‰³E8?A_C|+ń4“B§ˆćrƒĄÆ1§x*ˆė§>‡Šk4¶rIl³gxēōÆ6ń”’Ėd—R#„r~b1ŒW‡M{ƳZvŗō>!±‹F‰VKŌ” enHéž5Ō|ń„¦Øź$1ĶøņåNC÷Éīkź2ķ6źyµ—cķ=*ü\¤8ļWŌ"ĘŠƒøsšśoCÉØš14Ū4“ŗw‘eŁøI®ÖĪīv-“2<75¼eŠÄš[‹9!a01øLv®rHē¶rĄ<`ö«֝©ŽÖ0§œÖŌ~QūB>H>”X Zg™­8µr wŗ_…’9m„¦7™ˆŠ,Æj:f©göXģ§Ų‘G‰#eė:W? ZU“š‡^t^T¼h…׮ε£Ė-«ęķć #ć±5ē:‡-°i®ĖM³²s“ŸSW’älOx±Ovø†ą6īœ6*-sVHuM7_[™ö#‚ƒ"<’ŗ8­°)ö§ćH5ĶU†žtŚēƒķ^f4ąI.<ÅßĖčOzZs’ŚqĪ‚ “óZ>‰õI8ßjyTąć5D9źtkiq=ė騛äÉä=EUø hęϱóĶē3 ę@ !lg=ėøM.I4Ó-“¤Ģ§”ąƒ[E”_¹E4…Q#Ü^y\üĒ“Y?g]YĶv&ŌķmŲ–]ų,9ąqN[r¾ńuī<ś}ö’²4³2Ē8$˜—vu±ė[ž%æŽŁbŽ@›Ąw5ŠćžG(Ģū§ó­m3Wk3"HŽe¼„>1ަRčfz<[?•†ŽEū¤d µ<0Gm}¬M*„”÷¤ ģ?äŽqÅY}§A:ŻĒ2®āJs‚iŃŽK¬<i`ŌÖ¦Ä~#ÓVh! 3ÆB§Ø®kDÓõkK‹i-£ÜŪĆ`Œšzӕ '²=›ĘŚĘ”.‰gö¤óq&ķŲ{‚¹ĶĘ÷q\A¦ŹvĀę}ī}j×c]NėRń¾˜a’Ķ!GødŪéž;V_‡ōł'°€ź(ČźY±¼ō'¾}©˜4_•¢¼ū=”Š/³ĄH] 3ÜׯģäŠĘF8Ļ-ėAˆĻ h_Śz|’jÅ]˜łGF­ß-¶mw§iĀ;= †Ś1š™ŖM4“i<ŻĒ =élt+kŅĖ~ó p !čO½V3|Y{k¢¬Ś}„ŌˆŁ~dū¹ō¬[]B ÅBSqØėš‡cVŁg¹W[xÉe£¤kßŲҬ3"oJžQó³Šķ|Ai¬’»ˆ~‰ŖŚ®ÆkoƒOXÕĪU€=ėD­”,ó«ˆöh÷:¤«œ€>÷Ö“ü?”ÅØÜN—Sˆ#_lŸ„Q)£S^³ƒO×ō³·YmŃI’RŲ(śõĻųź%Ōu›_²Č¦y2N9;Ī(6Œˆ—ńŽ4$”u9VĒҁŲēļ­§Šįm$PĪ@#Ž“³ZyVķčųnķA‰>¦źĶałqœ;Šööń=–™£™ī¤‹Č эiwb9u<’PæÓļ“é„Ė›Ģ\€Ż®J·ÅŪŚ:§0 ÉüІkŃŃEgf.”\BŪ-ŌVåŻšĮhņDŖ+ėSb&ÕdŌ„ Ś¢.ĄÄ!Bpj͜¶ģDSót攦&q:åėÜź‡ä‘Ą¤`~Æ„ŪŪ¤šĖ0ē*»ō Vg„Eqc$Jįǘœ6k”‹_†2{!vRĀłŃƒĆ9ŠQĢEØGso ۟;sņ+7Äz”—VkaædøW YFāIŖźŒ¶+ØĶœ°­)¼H¶q3m2rĪ=čæŪqD’\ØRpN+™šēRMe„$&FÅć9öü(°“·+s”ČŻWÖ¤½SmiŠōĒæ„e442=ĒU±xÆēŻøo@„#‘ŸÄVtņڼˆT2·Ź@ėPl—C½ŃdžĪu{Œ"1ž¦»KbāÖb¦w„’ŖJtš\éėéĖ:„ļ*U»zs^©$Vņ;M"å·¤Š)¬Š×»8‚`õ¬‹ ėžo“CķŃw ÖJ] ©„¶–ųCjĖęnłG­vw6“[E „a€ČŃ68»•īu(,“ē™Ś'—pP§Žøžk鏦vÆ¹v“Ņ”2š;»«v)ö§AŽFMtśN³„¼ķćȰÆŪĪ=…_9Ÿ#ŲÅÖużŃĖ14VĶĄČę¼Śõ­ļüˆfåć}ąwĻ­ Żv¬””DŒÜ²a3€3¦Mā+8®"yćo›q_į_žµ(£^s®¼ÕŽōżEīŽŁ$1=Č©¼i7‡<[gw/‡ģlŃHI1žųēš&”¢®y ÜĒåŚDøéQ4÷޼TŌŃ …Ō4[‡ŽŅ‘“}Ų©nĘ(n$pƒh8īh‡×āęĀ[;[¹¢ó±ä~5sOŅ.“ŻķmīÜjÜī*h4ƒčy&£öؐ‰Y™·g'Ö¤åøa ł§š [I-’@T£ē{RYß e†)•SŠėeŽ µŽŽHĪĄ;½]–“1ˆģĖJü¢€=%µm=¢y‹‚¤õśW«ŲŚŽOi=Ä#Έœ2œc#sv<ņöŹÖ}|ŁYØFĄ-°w霾ŌxO[„²4‰å V-üMA¤LE³Ŗ[mR¹śšÜO ż©%µ‚CG,øż*vC=Įś=·‡ÜD?zä`Čz±ÆY>ÓļēŽKę”FŹ2TE.r¹O?įÖ¢śŽ§uyØ[ŪépJ$µ!žvū¤}s^uāyw~—DiģŽ7Ü·LöŸéV™ \Č}1.-!’BĢHß°@Ÿ.žķ‘@6mĮµRZŲ¦Ś/gŗĪM’1ģyĒ­qב_[kvĘęGfOJ;Ÿ`x;X“ŲZ÷fäs¹R+?ā6”¤j“˜ķ÷P1cĻAčM.ĢńW–ÕnŅp’·(;‘ė[–ŗeŅŁÜN\¹ß»‚‚Ģ‹vĪas2;Ws hQčәŒ‹!š3ĮśŠ?ń‡J·¶¶šĀN>Ėž”di ¶;~Ÿ­Cg Ł ½AĶ¢)‘€ņĘ7}p*yŠXĒæžćL±}:(ó$}Üžq\ꑦ>£½Ģ›rNÕ#©öc>;{m:īu3¾†¶§ W‹ę`śf e{&%K6:ø''–śVžžoµ‹õÓ­ŠÉtßtćń=)‹/‡ž ©Rģ.ąÄ’;V£¦E,Ęł›?! fx¤³ŸģåĀJējē½@Ęk9c·Ģ§֐ˆ¦EäiÆxą˜˜d)ļžsXÖzĒöEŲŌ­ŽxµpŃ:Ÿŗ}Ŗ¬ų2)|Iā;«¦”K$.Z`Ł Iä“^³jp^+ڱū‚„ŚĻ֔ca—ĆžD·zŒŅŖ]Mƒ)ĻPø}ā×Ä:Ö”qLmb,¾i.ńü?„Xˆg6š‚Y˜[¶rųT·:tBu{}5åņdm ‚}ūÕs0±ē/±µ·ū†²|Y­M„źörd˽ŠņXzzļÄ5¶ŸŌW!CĘ@¹ śVŅW'­y?$ŅćՐZĆ n«ę§$¾9’>՗36Hįžöuڼ˜žœšö߇– -¤ėtč’¹ ‚j@ķµķīvZ²8+Œ”āø[˜/­d›ĢM’6Ҥtü(‰“¤Ķk¢ÜjxķĻ‚xĒ? ö]#EÓo­ęÕeµ†E1`+Ž #·½\_qœśxhBÓϧۋt9fR1ĄļY1]Ēsr“…€9ć§„^'ŗÓŪMRń‡e!UW½|÷⋉õŪĶ2ĪŅŃģaŒååSąvžU‹°Ńu­+Ɠ[iŅGö«™Sē‘ŸjŌļ¼ŽŹ%·y#ä?vŸ®ųFmI.n,-|٘å<“Hhąü žW‹K¾†[y”źGU>ÕŁk𾫢ųŽōŚ4#LE+ƒ!Éé“ųUĘAcÉ>ͤź:»\j“}š' ]ŌcęĮĘU}ƧŠuŌ³Ņ\D×a €@÷ś ŌFާkŖi÷R-ņKomę’zā» śŁį€ÄŹŠ·9ÅX»õ5ē7f‘ ¤īgˆēåīÖ\p[I}o%Ä< Ąøa÷…$Ļ±óOÄ_ ’jꚾ©d°ŪķåD‹“}+äęŠē¹Ō¾Č!Ł0•MĘ ē&·Bē=¾Ž.'6čŪdŒĘē$qÖ³l%žĮ¹ŗ½•Ų؆C©źųć?J*-že»§ėšæ‡ļō‹84ƒnŽ.YI&āBy'ž;tōÆKÓć¹½ŗiYŚāG895Œž„:e/Ś’`ĶWŽÉē8Aņœ©ō«°üŅAē[ļćžśükX™†«£Ū\i×0Ķō•ećiė\ƅ“Ķ/ĆīŸs#ģGL$;¾ņÖ¢h‰|Oć-:[»†žķ6«…oösė]]µŒzƅåÕtV‹P@c dóÓ?ZĢ„±Ä隦³į r’TŌmę‚ę/-†įó(ŒƒŪšóÆ|Jń»ā=CÄvZ„”ŚQ5²9żßū„}(5åGŖ|ń%Ÿ4ĶVPĀŚŌW*ŽŠ~M¤Ü}qś×ŅÖÖqFEøŒ P.DyoĘ4Õ¢±°ažĶ2…Jäś~8¬/Cc¤iKöÖj€Ŗ‘ĒćAIX›Ä÷öšå“Ū‘b$ctcš:×ĘwZ>§©ź÷ŗqI-ć‚`½H-ĻSųPŪ’txSĮ±éžø•c»żżŠ‘·p8'&¾wų½,·É.#ip0 į›J 3<ā??PHŽX”T}®e’ׯL]N;e’āŃ£‘wCŲž ÅØlõ¹ž4€|ĢqœW•ėž šķĶĆj?ŁŠĖrWh—ØŚ9éAJV<·QÓR;É ŪŠ¢…š®gÅ;}.ÕÆ®n.o/”tdrŽ“¦t_ µ˜µŻźźy䊯ó$ĮŪv9÷č+—>š¶­ā(o"†Õ®įŹ„°$ā€ŒŒo~2‡@µ³Št ”u©¾Ļ -ä`|ĄöżzłÆĆ—zœZ¤±‘󓽟$±=Ķ ³Ł¶l–(ŅŹ=ҹĖ6s“ėW£ńæ•ėŚģhäŒĀ®[%MB€Ä īo“-jčŃG„©n~ń„́Mŗß‡“[=ŻČ–/|ģ wa=ŲŅ¾d»Óü[§ź’©Įx9;9VO@3L9a‚ČYŧźZ’¬‘2‰9?+’²ieæ:…ÓżVŻU§EéŠM7©“ćČc-†•{wqēclłu`;kĖü1ńūĄŗ“é}öXÄųE%•Žy ėQČh­kŸfųÌ4{‹żFŽ0·p=Ć¢š_<ä)äׯųrŽžŹõ­õ(ģ¦č"īGµJDI®‡†Å?ˆ| ć;!bś¬“t ¤ŸķۚśÄ%æńƒŚjó,žU’EžƒŅµq .§ń7SŅt-WO^^½¢Ēf4Ū‚?……yŽŸs.«”Iµ“Ķ2oa“Žłö¤‘'Ÿk±iš[åüęģ;Ó~kš„ü@×zōčģ˜1*– 8ł÷’€ē°Ōtéõ©gŽöŪj˜UG=’Ļ­aüVńN™e£GØ­āŪĀ ¼üńzķČ©ėbw1¾@5ż=5™LwØ±Ķƒ!ĮrŖHSÅ|ƦźWŸüe>‘ā­R} Ń„–(āPI”œZ£U$z‡¼’ę­q,:µÅåÖ͌ī1½{dWowāM03h7—-mŖó1¬æćCEódž·Öõ¤hyÕXƒČæŅØßų yŽ‹‡žFMønH¬š&R=OĮ÷0ųvĘŻcŽh#U #ßĀö 7āq’ĪĻQiŹŽlŪ3‚Ćą+)ÄÉŁ»?üaÆx÷Å?Ś u=‹¬Aaø‹Ctū½ėšųįĻų“BŠ­¢”ŽGnžg›'ü¶`N¼×<Ѥ"Ž?_š=Ē‚“{ķūøņę6ŲXåsü'ŠŃąæķ5Ó¼ä†ĘXö±=ĻjÅģZŠś,-®ķć¶žŌ© vļ]n—ØųkAŅŽ„Ł› 4õķÉCžNćłÖq•‰ēvå<śŽMGūcTž ZiķœžåG÷GņĶz·†-ŃÆt“KČ ‘ eżćGķÜž•ßTgÜ·įkzzĆ»y¹ x9V߉oæį*Ū÷G*ōĮĮމ+œč¼'¢Ü[$Żx™‚oqŸ­Tńœ:\wSCfŻŽøėYJż īyŽ¦hVĘ<ł½} ~‘|0Ņu+‡Vö×VbŚ`ŽjĮ$k€O~œÓ4„ ń·Ān}oPŌ5[xģ‘ž0žRlC:õ«/Ä? {Ųn#ƒwÆ \N…¤ź6ļ%³HĢŪ¶ģĘwZ¾S¤uŅųRśž$ŠI~Ī U÷¬éä¼Ņt”e#EäÅ/™ę•łŪŒc>”œNg+£ĢµOPŌļ~H噘ņä{ś×°čzU½ī™eVƒĶ ¶Mų œõر/±Ō-®”g¦’eA8µÓŁ÷9‹åeĒ”×mŽ§Æ„¦°fŗ·‰ƒĘIÉ'šĶ̱éҼEb±I±W;ņTŁ®+ĘzU—‡Æ¢ÓŌ›÷9zś’õؔŗp} ’„zö™×:ˆƒĪĢ’8Q·9éĒå]7ˆ|[jóŽ[yU±ĻjĶ1‰įšĒ†­Æõ9Æ"’Dørw¹>µé:>ˆ4ż-"YƒēÆsQ÷”c“Ō4ļ1ĢĖ&Ćø‚k*Y–Ķ«•’ÜłÖ;™“k1#iBXļ•°CŹPkĶ>ŌŃĻRÜĖ5²¶±ī{Ö鉳Ū<;{ŽšZ܇Źį« ±>’;ŁĄX/Č\<5UՈ™ęZ¾„äjVķžS+ģĆį]\ś¤ƒMhć1OżåŪĻēT¢Œ¤—SĶnĢ’LRr©»…µméšmœ‰$‚@[ õŖJŪ=‡s¤Gk$Vš¬I H^„c8Ķmiś]ŗ•™!Ž9¹ÉĻ@*e.†œż Øly­&¶/ĖFē¹ö©/5¢’nMVCq<'ną6…o”ö¬šŖŠĒ±Õü;y÷2jQż®<$pmź}sS¬V—vpK=}Īk)D‡K¹•,S\Ē,«É*ņ÷«ķ%DnĘ'Ķf8ùÕč~&‡BŠ…ŠŪK5Ģóü»Ō²°ĒB{W†ųē@½»ń 7wš„”UoīdōŖHč‚+éMk¢Č‰k7ļNUŌ7ŽŠéÉq%Ō“:DńēåČŖI•ČŽÆSń–›m$€å•”QŠćҹ}ā§kzŅC •n“ī)E•#ПĘS\*+ 9e$óōŖ6æŚSkŽŪM2mQ¶4Ļ^¹Ļ­iȌg>‡4ŗ.»sāūēŌR;DBĮóXŸZö-'F»IœŽ&å\óŒUĘF½9ˆĪ–ѲF¤sž¤öü+Åoo'k  Œd Žō\ꦒHīōĶy,ķ IÕJ«d·sT5gķ×7pJ䔀u§sxŌ±ę:ŗßÅ+ŖÜ±W>µ“mĖrf,cÆzM“:†ģWķq8€0ECƒ‘É‚»čō.mą6G ø dēŒ¤bd\h~\ˆųhH<`:²w¦Īvō>Ōć.‚?ԟökų³„ütż—žüZÓn¬īo/,@DßźīAbC£œŽ}}1š“ÄćEń<6Sī÷yG“?*‘Ó#üōÆB­+l{5(žēńGĀšxæĀŚž‰4fd•IĀųįķ޿ޒų+÷ģļx5;āw†lnŚūCŒZė•ęUc‚ģsĪ8®TģyµccłĒń›,ČĖsœČz Ŗz äD“#9RĢ’ÕZŞ|åbF¹YU÷Ų½ļMŽїLģ徕Dó™ņ™ÉļRy§Ē2·%dA¤dYˆ0F]ķĖ ŻM>ÖuŹ£Ū$€6HoįŖęgD5;+IVõVaóļˆ²ä+ö<×ög’ż“ßāGĀMköeńÖ®5heō‰7óaĘvO8%śzūR·C®;Xžƒļ¼ÉK±W@Ä«ƒ^[ā½2ym|蔯snwgW<×;F3> ųŁįĶo®#ŅŠŪŚŹ¢EWķ!\°üó_…_·÷Įč¼šņ{‹kW¶ØķÖd9ćŲńśÓR±•Ļē_S²Ū1ŽHÖūfēˆć9½ė‘•dˆ;I CÓłÖĘU"¹ ēżÜ…Gå»3į›téÅ4¤V·ƒŹ…<Ö0brzŽjŌFE ುÅk@ÜJ Ź6üśSVY\ąć$ć8f°4T‰ņóߌµmgHe$3c§¶*e±ŻLż’‚t~Ów³ļķ¦Ś Qt’ j–ėčéµ —~ĒnOjžå¾x‡NŌļ4[čuJÕąŠxX $3u?@I†+žjēJö„Ϙmć,÷_Ų×?sww­Ģ±Ā%ŗˆ…Ęx’2 ūk‚Ŗ!üb’ĮoæcVųAń9>/xz _ k3ėv˜•Jü“y g§½~9ü2×VÖF™4†O–EŒē8÷ü+ŹÅ{ԜC¦œ±ü1ā=\†{ ,ī–eŪ“‘Ē#éĶlMįĖ]^ķģoķŚ]6>Fęö<×ŹŌ©Źō=Óŗ8ūæ‚ö^ŌgÕYžĖÄ^!^=3zł«UšåƄ|X—–“Ė–į¦Į<;Ķ{~2ÓHʶZēŁŸ ü^ŗĶœ*ŚUõģ†äÄ•IÉ5öT¤|åufŃ4ĢÓ*łjŖ§œc“Q¬r]ź0:üŻEvEXć,¤’JӘEūŠNMlŚ?ōŅū ”˜mQŻoĒ~¢ŗx,&ÕXĘ’¤Œ8ÅHŪ¶6Ś ō)+”ŹīĻAZ3ė/7Šlę³¹x-ĮFałŠ>^§±Gā·’F“œ,‰ dpøõ­}cL³Ōtk»Øēbņ‹ē8ŪZdµŠšŸ[Į÷Vń#M!ÜĖžEQ½ŃodIßĻ0s¹‚ńšµ#'O¶2NĶ"’ć#>‚²5+gæ¾–Ųŗ½øa€:Sē>=ķ5QŖAyrbP?tļņdz »ā]KŲŦņ‘ÕG ØZš…»8dņ˜œõļ^¤YÜYŁ‹[3Ļv ĻsžMlf⑁Ī©§j—+xĆq}¹<k^K»{mJ)n£‘ķ[ ĢŸĀ‚@ÜZ§™$oū®«Ÿė^“ą÷¶žĻ¼’BİĢdtfō4=#RVžīī;€Ė»¹Č>ՍmØĻa"Ś»1V8bFi„¢vÓŚčķ„G<)ģ_;¹9ó? ąµN[fŗAøŲt ĀI¦s¶ŃΚ’Ld)6š3ƒė]\2;Ļ‘póŌ÷¦Œłŗu+Č®mć‘d•®OŽpµŹZź)šæ’3+¦T«wc3Ь¾(jś›Į–J|¶ČżŠ¬8üqŖXų‰!˜Iqe;ņ¹ž¤ūTMP>€Š%šÖ•%Ę£©%¶Łv3>yeöĒp |Æń/ģz5BĆl¶sOµ)ł“'õ¬$ßCF{?ŚéöI £Źo¤¶WŲ«ZŅE䇿ź`H½É÷¢7źKe’^,±°ņóŸN™¬įż>īźŽÖ).$V8u`Eᯈš¶‹}ęė첬Ā]˜Üƒ«éĒV¶—ŚÅüÖRĖm!ĻuŌ€ó’ź¢ā3~ä‘æŹ¼į4ēI×ņŒƒę*yüi$L„m –Z„Ś `ržKśēK«źVLĪ‚0ė’Ģ?ЦM”™Ę[kÓÜ4fŲI“Ÿ¦Ńļ^™ ėSF›T5‡9źEøĶ?ėÆ&”’f† «±ŲpXÖ„¬Y ŒÉĘ~nW5fr‹¹ĢéŗœĘšCmpr§’zŠŽ»ši,RÉ@\枆ś‘Ö”“xŚ:“sŸ-dY#RaUÖż­‘õ)™U‡Č21֐ķÆ£™į¼Žq’8nį] ž#† 9 Ź<`w9 .M@kHė 9Ļó%½¤ŃCnĢ…Ų[PAc'™$HgŒ „h&4vʬjpsځÜұŅ"GdÄ@(Wų įq?ŸqrĶEƒūōBčx–"w@J©\ŽkÖĆ»œ³ńʚaĆÄL· Ē<ÓöyŹģcl ŠP„°"ۘå`Fļ”c­Ai„Åóęd\ī\ Ž`6,.ķąŌ,a’@ ?\}Ń^Ķ©éšlšŗĘˆ÷LÅĢ„ō\ `~u™qZœŽ’š#£ą®I£Ž¬XNmµK)ÖŅ)ą\‡ŽsJF¦ÕĘ£`·Hų›±ŒS¬5 NŅžóTi×ČĪ"TąŠR1/¼B—~É KŌ 8Ļ*HĶy¦©®ŻÉ !fq<œœŠČұŠ[»užąČ¤€Ąć…jčŗ=½ž¬–qŹĘYŹ»»ÖńZøž‰£ųWNÓ!š‰V—yf9+ųŅų¬„Œˆ%Ž["ƒę„)[©V<® iõĖ_“ZĀņŪ—1“ŒdƒŽ?*”RéÓI ŖČėĒĶŌV X†]ņ.ddēŸq]*Zķž 7C“p{{Š Ś™-ę…ā*€’YjóęµņÆDˆĄ8<Ö$ėsvŪN‘%,Ć#œŽÕŅŪ_ŁČóiĢākĶ™!;g¹żjĘax‹L×5!¬tٌkę.õwŹ ž„š/†5ŗ0M'‘nÜz(©”z”^Ō,®tėē¾KfŌ#†`²ČöŖž5¼³ńm®—<‘Oiwi”Œn^pĒlšČ<±“W3;"`JÖŠå—Lšyšc.ģØҚv%›qkmɶ$nnžÕ©-āiģäX)žuRz õƇ÷Ÿš”Ü5ƒĒ‰Sēļ u?ÄY_Į$6„ę=ÅfĢ6:µę9vF]փŖfŽ3 ÄŸį÷ O[Ō¬Śå,īŒ‹&0ɰć§5•«ĀóŁMc2ģ€šĪ:ēė@ć‡$žųk£“³XŻź2,ŽhäfŚ ĪēÖø»-KJÖü^uŻ:I-āŸy;~ćw ž?ʃt §ÖŚć»ÓČŌ `ē,;šĪ·æ“»Ó®VčN/IŹc…_\Ös@y­¢™n„G„~Tšķ¼%ą5dš[åEX×§]ʔWr‘CÅ:YŅ ¼o·l|…~ķršKMr®ī¤#6"µŲ’†© Ėz±[©?7n’Zō½:==!¶“Õ]bޘm§;I’"ƒ7-t<¢ęēR†K›+Ąéé!Ųy—•”ö§¬¶”t²¶į@<Ó$°“½SŪĒO„MŠŠÓĀis'“ŹóżźčćŌ‘¦Ķl‘*]«}ņy#ڐ4ŽĀ~#¹Ky š˜žVVoĀ¢ńĘ£Ø]-ģ”bPBŒ/Rz <žóEKĶR;¦ƒ0 ĽKū^]J“‚Ź4½”¶?Öp¼ iŻėįŪ‹Éķå†įā`c^qۊó Į&•ᄸÕOµ…ć+’Ü÷¦;ė·:Ļ–‘n[ubqƒÅG{j‹x$T”p:Ņ+—KŠ|}­ų’ßYŗ'±·MÅ#\}ŪśW§=żÄņi3Ļ\[ØQ@¬T³[+”CmcŸ˜u«VwҤƒ ÜśŠ#;m& vļZš8ŸP-¾IĪćč*åµ½RÄ%ĖŻÅēSņަž_ÆųRMVmGL·‘!`Ucėķ^£ą(čßfdŽ7LaŒb¶Šŗ"R±sć6†oĀK$Ö©™'„±üĒēś–§„iŸf‚Ä£¾>čĻ\TŹ!\ŠßÄ2ɀ@VĪĒŻz]U RQƒŹż±Ą@¢–‘yį;éõ5“24q³EęF쯻ų£Ė~ž!µ’[kŪž28t=3Zq¾*ƒN·ńMŻŽ˜®‘mS“€~£ó®rėMWßy¦-¹O,ēę­g3d¬q7~µ²—r¢DŸ{1ń·ßė^²·Z…<7eƬwww$lņUyÉčŁüJHĘøÖl¼WŒŗ •Š?,¾ę¶¬£@¬."I€ŖGjÕhŒ0õ]JÖŽwŠBv7Aķé^mØėö³jJlķL&…vS•® ¦ āĶ&s®jĘ/ō[؃¹ļ8ģēłUßźž.ÓnīĪr4øĄ21'‚Ą`qķŠÉ”¢¶Æż³«^M{®ų‚[Éä ²Ė'Ø=.+Šāųqį=[ĆwW˪ޔڌŸ.Ćž×ėŽ¤Ł4Ķ*_…ŗĶՎ™źÓDšĄāFž÷}šĖUŌu=ū{ZÕ-õ ¤+ĘV‡ Ę(Żėš†—ā;xᆠįŽ/Ōó½ŗńķ^āķ:ēÄS=µ¤7É.čĘ c’ÕśŌsmö}3G:ä¶”h|ī>ƒ+;Z×4M]XŪDD¤ƒs8?•.q8œ„ŸÄ!ī“=ĘKųįšä(0”³Ń`q]×ķ”ųwSŃ,u)-oÆomü蚣FÄćŸĀ©K[ ’ĒČ2^>xā<ōą×¦xWS˜XŪOv6ŁnŚIÉÉ’&Ø9z‘ØĒ`°Ēy§ÜOp. ķŲsŚ©ię+ė-›‘”‘I2h"Q±Įų‹Į „\_FŹFņƒŽ=«ęéŗ~­=ö“i3¼ņ©ˆ2ŒłOļA¤Qė^ų7©ŲxJ%y(ĶĢ…ĘOĽGJņ>ÓPšž­ŖésŪ—ł™–~Ķ“Ūé@r£Ļ¼]”źZv· ö—qłĻ8ē,zʹȓ]JŅ)š=Œpāž§¤ų~8“ø<Åf¹*6¼ęŖ–”\ÜY=“š2°ćaĆńÕ}h¢³‚óDß6’$…¦kńĆÕX'¹¾ŌZĪņYqlŠe&Žź×Jž+¦µgū&ӜŒŸĄōÅp”ŌHŅ'·[tŅ-™Q¶' žēėĶdårWąöÆ­¦ÆĮ¦A§<åd;‡īńŠć½}“ć)žÓĮöM9KU’į˜€6–źGćPÄŽ7»–ąIaÄA#ķ•Īs×§į\~É4ļ±E ijŹt”ԐßCšŅ2č7äu·śö”{kl’EžŽ Ŗ:޲|Öļā›Ė½KZ‹N²Ų¼āH=1N,—~‡Ų>ųį-ŹāĻIŗ·»™‘™0#§<õÆ ŌtxÄ6šö»§ŚŪ“łŃ¶0C ӏ˜FżM][Åz¦ø·0éZ“še½ŗķ†F¾‚¹Ļéž'¹ŗŸS¾ÕŅśĘы!P3'={sOcUzMƉōmE®µ3O†o4[9ęg<gßł×G+x9ŚŽŃ®"󙂲 Ż#¶=:w¦'ȟõ [ ¬pČūžEm1©.EqžÕ5¬WHƒU’Ś)IÜ÷¢äÆ3č}įĆ½:Ęą‰&ńKĖf4Ž@G#±öÆ)±ųu¢čśŒff–“ī<…Ąƒ52äśŧų„éX±“GHBn!GȀv¦ųś/ ų«Ćv‘%äwjD²&HŚ®*9ˆ:ÜxþšÖ•„Ü]$ūG˜xv=Ē>•„¦ų3AžŽ›ZÓlćžÕuĢEÉcéŠŅ2¹œe©©ńL¹ų}ąms]Cž]iœEµÓāLb¾Xš¼~"ŌlµMgP7w²€L„ć·ó¦h{bčöŗ© Öč„å #ä€k+ÅŽ(Óü$‰¬„¬H‘Fct(Ÿ9ÉĮśŌLR‹Ųµmü$ž‡Äš]±:jĘiq'”÷é^W©IÆŻż› meļū¤aųW4„ŃXśCĆ0ųq¼4ouG0Ü‹‚FxsX:^±{­]?‡…ÜÉįķž|w’» u‡~+&®h™Ģ|CœĖk$vֲߘ”ˆĮ-ŠłēC½=ķ.,ēWk”9ķYū&Мq‹Ę²ÉØ[é×SIo7”|Äp{×ukā;D·š Eš;`|øČ.ŻŖ}‘Ÿ3HדƵ\Ė4žL1ü›ˆē>•CÅҽģ鿏ÆĶgl$fUūĆÓ·§LŠį¼Yā sVŽ3 !–QL“ņŪ±ķļT.å{ķ<5ņšŹ V\v®øĆØŚ ŗZ]±‡fęR§ Õßų~ßK“µÕVe;¤ Ŗ„}ļqRĄÉžÓÖõ§¶ŅƒIeąĮ÷p0GóÆJšÆĆIüM|Ėvņy*H\–bEhš±qZæü/įXē×[}ܐ̒“ˆ€Ļ :ōÆ«“?ZßxzÄA¦}š÷Ǝi»·µ³Yį<[umā‹1.5Ż•¼²˜ddĻ9ēŒėUümńóJń•/„“ 'ķIh‘5ĖH é†^ģ*欞ēm9v=‹öiÖ|!Ə‰¾Ōü0śßˆux‚܈VQjƂ܌ÆQČöÆ0ųąŻGį'‡ōłtmBŅūQ¼c/—tIš4Ļš±W ©ļj9uhå|Qsń#ğtjž8Ōn<9ö‘©Åd˜ā”ē†ń“łū׏ĮšŪXHļ–ĻZkWa–f\Ž=«zO¢8ł¬]½šćŧˆŁœ€źk^öĘŻDŅž3ø#æ(’īK Ō3ńߌµ ķFķŹZÄß) 9sYŽ{Ń$×2^§Ź2ŪĻ/ŽĀ¦O°3Ņ“ļ\ßAsW«f+ęžB°µ_x‡_·Ł\Ms ŗžöEĮ9Iē­B“3k[’ ōŪĘ×fšŃSD„M»ŒoS^Õāłõ=3LÓę%„ŽG$’±ŒņHś µ$j6ŪŚ :"Ł\Mjډ“t{GĻ&xŪUgŠu‰–Śņ%¬ŁöøĪYsķT$ĆÅLś†#¾8¶q˜ŽBå‡į_?é> ӗS¹»I£–|ą“Ń[µN ¹{āi„¾µžĶWøVlNPü«õ5ŗŠC} ĀIhPpÄ|Łō­{s7Ž˜Z‹ø²cVČĒéTō=„厛 ³š?õ'ūžõœ™J—CŠ<=>§Ø”ŗŁ$rc ¤°_ZŌ³Št=*y/nŽ33ĒARŁJŠ8żsU‚ÖčM“GŹćŸz’JĻP xUw*»śžE9I–­«ß[_+ŪĢąlēaąÕ 4}LÜjÕäÉ*Ķ·kd’9É pŠÜ™t’'[ˆå‚7ʳ ¤„s·>#¹±+<1O<8# ¹ĮśT{2j= VēȹøæxT—żŲLƒqė\<ŗµģ·hwŪ’I­bÆ”Ē7©µimŖjpJPˆ!O½¼t¬fĢźź»Ōżģu­R±'O§źWtP»$dć góÆe𯅓Y¤7šõ³§x2ĀŅhåø€Å'¼PųŹóŲcجe%±ŹkV^l×_cg`=W^[ysqk;ŲČvŹx}‡8×b–÷?¶ų"gķK§ų;ā7ˆæeæ\¾›ążf6}&YŪ0›¢p<ōc× Wōy«ŲŻųSVho6Bń0>bžpAō#šöėžäŖ\ś{Ą>%“ÄšĢĢŅ; Ÿ„|)ūm| Š>"čŚįæÓ`–Ņž²^€¼GŽĒą p=ĮYĀ'ķ?š?]ųEń+Ęß µŃ-•ī™zĻoĄUd¶9(7‘ƒĒ5ńŻÓŸ+h1œŽę“8*SŌȉdT Č擑ėVāŠč¤ÆūŌ‰Nyž 9,Ź« §µŽīŁ8ę_/`ČÉĘpx4—DXRžkn( ŒõśUæõŖ%WÓ uśŠtSF• ŸĢ„Į$1"¶X°ė_^~ĒæµOŁ›öšĘmFŠŚŹ|_,lBČ„€ ąõ µ\7±×Mkf„G€¼]įĻ‹’<ńsĀ—pßų{\°†ķH8‘;žæ\Õ-^̶ā#ąü¬=EsĶY™MtGÉß¼ o<Åø ąI ŸŻ>•ł{ńSĄ–:¶®é„h-Æ“~3²P?3ĒćYót9fĻåƒöĶų1Øü!ųˆo䳆×O½%[ “£ēŒēŒųīą9yćq×šŚ ĘF …—Ģ”ło“Ž {ÓŅ Ź€ 'š³d\$Ō¼A%³l[’r:t3ųA ²[iŠ ¦O½ļO‘71¼„ZK©Žiq'åasŲ]ž”į«ķ>śHXL‘“’JNĒ-ÆZ]Ü"}ؐpJāÆ!HXĒžzõ¬€MÓēiVžŁY^3œc†ÆZ†Ī-i!M©¹F㻢Šޜ:±7Oņ äØĪGŅ«jWĖ%Õ±…#ĻĖ•ĻŠƒ@“A9Ž8ϑÆOzϹŌŚX­¶HąńĀä~tŁé¢€ćœdt&·'Ō¶ŲøņČQĻ=D—RŸb®‘ÆGgwl÷D¢īÉļ‘^­«-ŽÆeęF?w2õUHŖŽÄœ•ÅäzrEjdhŌ6sŅ·t‡–śņø’0;ÓÕ嵍™żčm”CŒžÕåzķÜs Ž518l>“bŵeg@ĮI<1ö¬Ū ŸŻ<čŒÄö9—/-¦–kxB!†šń®b}NY.Æ-Õ_Ź…¶oćØöę°°Ń ø¹ŽäæČś×`ž)¾™Ā30‰P0ž śP‘Æ2GEm­o‚Ž#uŚ:W]eMc%Ą qÓŅ‹ēØj:{]½Š7ĻŌą÷«ś~¹D²g `2OjC9ßę]Ny-Ų2Čųó1ŽõjßOŽ(ÓxqĖĘ*į¢nĘöā^O%µ«"2AĒq]‚>Ļ.„s7 Cäõü?*Ōh{už‘X‹˜o"Üź<ÅÉŹżkÄR%Ķ„Ņ$ŖknZfž,Ć ¤S bzqĻzóÆZÜÉqw~Ö̊ĶéŠT”rö6‚įŌ°¶īpxŗMVį“żlĄHÉ“&r8õ EHõ¹’7bcWņńzw†ģ®u)I2HHäć€hŃ4żģ÷2ZÜ6ņHÕSRÓ,“MP½Æ”ģĄĮēčMTea•-¼Ui ÓYĪ ģ=µzšā™Vhx8éļJąq¶”5ŸŚ•|ņÜÜWœŻŹ÷.Ķø‡šŽŃJÓ.Ą¹'”ķhĶž›`+ųTyѐ9ĶpŃ0Õ'Ō„y5sū²N0=Ø0hŸS¹ƒ^°™!˜œ0=µač:­½ä tĻ$Iœ’8 Bjń“ķ8‰Yåģ3Ņ©Ł.” f(A,1Ļ4ÕiwĄÜAo*6ę>1]gˆ|' jöV׍,ŖÆóDzqßłÕ8ŲÓŚOń ĆŚ¹²Ćr\”Ś7sµ…Eążr+8Æ,<šēż^sхI”éš-Ŭŗdļu4/(l+ µŃ¼ū«HĮ%¦ŚT)äó@ ų±oØéŚnŸa¤@’ܤ„gł¹Ē|~UĀųb}NĘÕ”¾3I¬ū“ ³SÅ1ĶšDŚsĀźAóųå8ž•™-Õ¾Ÿln/PM–xÅg1EÜdzź×—7zd‡ģ„C°SĄ8ę©&Ÿ ą3oĀ©äƒÉ¬Ź;‡Śę•§x³H³Õšx4™_l³F2Č3€?kź/j–¾†ź3W²»µŗ„08 ”ēŸCӊcĄķ—PŌµ k’“»Ūœ”UĘŅOzÓńƒā>īŅgGPé•mß.?+Ćy-āÉ4q‘·–Ē N‘ž“Ļ6a`NŃŚ€1åŗµkŎLy]2=*¬­„²K¬iä”ĒSéT„m[[k{‹¤ø1©ł‚×E-“±Wh•mäńŠj`yĘ©g‰<VrZ¤g1Ÿ½ZŃkėfĖՑvõµ\Č7Wŗø¾‘‚)vcųÕ?µ˜œĒ*ŹīŠąV@w1µ)ŗ+å6 mØ«ś¦§mŖĪ HŃ[ĆņŲ`P2]E†Ę9äŽG’9ĖßóėU¤°““Äb0‹œŒ fŖ.Ā9)t¦ŸTkļœ|»Hćō®ÆMŒc‘ŁXt8”Źązʑåi±ˆÄŅK÷¹AŖQO¬ČČDź>PCR“Į~šž«%µŚuTtõ7ˆ4cF±\·=zPmtq17‘[‹dg,w7¦}*"8Aęyķɦ„TL%Õåūö©<2E]ÓcšętgÖĀ9«©õ‹«˜#\*G!ąqŸ­vi©[“qݵ”Ų䁓Ę€64ĻiacŠA,ģŒNāzŸ„hižM6śvŒ¢ŹģsŚ€9ķ?UÓ"×õ³u DŹJn#ļœpGÓ5jöŹMM~ŃĀö|v  öń[i¶šŒi.ąy„ó^u5¶³Ŗ1Önm䆯NÕ?Żž”=E€-“>GĢTŽÕƒć{ū&ėO³£ū\š3neŹĒƒŽy÷æįoiĀĘ?ķ&Su“·¦}Ev†)£K›`LXéźhć1EeUSĻŅ­ßEöą˜r¤õ$šs:}Ÿ›öŲć·Ģ„„Dć“ßŠāµł[NFŠüL„Ņ€8fŪ18|±ūÕŃÅ4qD„fnK{PjP‰­Ö$y$ݜ½ūP†e¶¤6ī  Ԛ{+…. ¾*¾µ¦ÉzšMjH™~^==ė=E†+ĆQµķ·śo›ž¹G}*5Œj·Ÿs¶ŻĻ­yĒ4ėżO’ęĀH¼éIĆłf3Ԋį-¬õ“Ę[·½—z˹ [®ž”ēŃR‘ą““ŌĢ`“*^uŖj.·m§³·™ćʵÄPŽ4R'ĖŌM³Ü¬æeĪ:Š6ō±ōßĀ’x7þÕ4+»Xć¹ž HWqf#åēØē5ó­üńŽjš…ģvmkµŒQÉ»%×׎ŁĻŲŪ?żžģŪHHĄ-ާ½ŌÆ­ĢMu4E˜ĀžŌ×¶ø¶MSœĘ†2”Ģ„ąöį\v‰§k0$®~ĀĢ6•ē_Ņ€;ŪĶi$ŚÅ*Ėf„—aœ{V]öÆ‹`מ^ėu8ÜńVńF2zžyā]I|OŗA=ĒlĒŽ#Jćģt+­B ‹œG˜ŹņON)“iQ’ą[īłÆœZī¬lžÕ§ŸnvŠ:šIX£•‹M– A™ÕŗƒŲU”¦.¦ŻµĆ—¼—sd1ĀJcNĒ‹jZč¾K©!w±l™d÷Ö¶½G®1RĒcKŚųX®›4Ń]DuĮ zUƒZĶå׊,ļ-­ķtų0ae'÷Š{ń¬®7z“7ž@¹’8öĘ \É®^ļŰ[Ē<¢$±’=͓ɒį Óu}nå5 ƒÜ"ƒū“ū§ŠśW˜xßĆW’¾”®Ć'Ś¢˜Œ«LJ0=Ŗć &Ś’XΆ)‘ąu°¾»ćK”ØĪ·ŪCĀ7goŻĻóŖQŸŁ±^JńĒtc wō®ĪŽĘżą]1p%ČN>ž¦˜›.č2ŽĄķozdūÅJ±Ļāŗ kĖÓ¢’$ŗū5Ī3°‘ļA/rTµMWH†ą—ł†$ČłÆ|Om ųrIÆ"šƒN]YŽN˜ 9­”ēš/ĘĻhŗ•Ęƒ?•s£^ćάsƒVļ5Ąš3‹giÄd­6¬'3Y.5Ø-!»Ļo3¼ęøKżV 'U1_m*æ0ĻLR“=[Įž)Ń/tłē•%–XšŃ”Nō­½[_µæ[»;hTĀ»w…Éąņ ræC˼Cńe4h..-lŒ÷hO–€Ž¾¤Wm éśŸŠ”ˆwƒķ ³…æŅ²˜ÉōiZN Śv»ēRĖ÷ĒĶŽœÖę±ām.ūĆś–€ÖńŻX\.ĀB.sŸŅ Óń^·…|iŸ£^G-¼·hņń—\c§·µ}1ńĘ>3··˜ż†Ķ£m† §$c½ä<k]&öś(.$ˆ]tDĶS½šü%¦0„Ü ć'UEŲ“8Æb£Śšdcn>õp—¼S©6„y¦XŽNŒēj†ĘźkDѬmŠŚšåÅ•üVJdø…ķ¹ėčk©×¢]Uķl%¾Xģ€rx&›’hї±]éŅhśn©ēź$Īą€3ž;ń]o‚4k›Kq;]*ßpx¬œŒķCĀ:u¤Mw™óZ5RŁČ'ß5•¢jv°kÖwjö×2Å"¹LČ?żj›ō4ęŗ±Æć é_üS6­Æ¤yŗ‘šY1÷čҾAҼ;?†õXśgŠŚ,Øģoų[ĒZ–”ķ£!&t>P¾•čš7ˆōu ›kł’mє%OŻr8j%ŠK©gUšŅO›LÖ[Y‰Y_aVśW)‡ŠĮchģöģ6É;‡Ö£ŹR=ēĮ¾½ŗ}Ž­qČĖdž¦½CĀŽÖ4[›kė9'K°É"ĘŻŽx¢öŠĪ(»ā]nMkʑŁx²yožŲ§ĶŹnEĮ'gü+Ģåų[į’ ŻM=ŽŸndÉŗž6ē°ķB•"qž"I¬ļōųtŁŅāłłœēÜf§Õ|”ų“Ćھ”ć«ųō÷ŽŻ—L·SóM'«`tśÓ’4S>sŅÆµŚŪX¾}8¾’,˜õō'ö–‰¤|5ø×Ž„sāŚR£a\óžł©•"[)]|Gвō…ÕōŁ”¢żģH8‘;ńė]3xĆĮŸƒL~TŅēˆ•?(ŸJē”lI”šnĘĆÄņjgÄ·ĮęŠķcGTČć'Žę±¾óG?…× .†]ʧ µ’Ķoxšަ¹ µ+æ_ŪA§¬–HFäqœŽłŖ‹°Xō8śĒ~Ÿh-—Ė.ƒļ­SńŸ†.Æon!¶ŗdjėĢ™ōÕŖ‘-sš’GŸU¾¼ŗŗ½·µµFP²;{{Wwā­#IžĖK½A¾ŽŠÉę@‹Š°¦TžŅģüG-¼Ę9c¶ŪĢdąēšÆqŃõŻ ĄšĶµö³Ø›x|‡X¢^UÓ<z ”ŗZ­üKw«ŻiqĒy¦$9ó čēƒĒ·“qńF÷ĆZ%üSۈ ±UHń½×·>’֋™žoØ|CŠāŅ{KI”b@,­õź+‹šÄ…ļ/`¾„,LŖ!<ž7VSlč„3„ųUńOVš5ö±y”ÜjZN¼ó˜ÄŠ›£”tŚWæ5ŠžŠŗļÅßč>ń}õģz¤öĢp‘Ļ×®k•м®Ķܑåż”5ė ōK]cF·¾Ńሬ÷#Ųķ=kÜü-āĖ-vń”©o4‚­\)r½ &ŒÆźųŪkµ-Żż_Ų׎ėrj±OgŽ)"“9|ōÓ t1Z›Ć֗ŽŽ–ńI.C0Ē/ŽÕ.½¤D·POkc¬ÓPĘ0OŅ“±¤d;Ä ü”x,ųžĖJ‚XœUi;ųėXžkɕ󦯭ÜYČH²žq“t浌®g*HšvæYÜO­D …¢ļ¼ŽĒŠuÆń–«m©x˜j:m“0“‹·jō„(¤Ž«Ć,Öō++ém[ÉŌ æ»ųš”{ćxu »ķZźįę@Q—xł©{2‹ņK.°öÖ֐·“ø3ä}įZŚ“ŪŁ }2ā‚DgĒA“cæćPÕ“•¤š“y:dķ£ąĪ=«;[ŠļP"<2ŪHw”4fįoQK†‹el{œ×¦Śx–Šę=ņn ŻN-uęqZއ¤Č÷W°„¬‘‚Ń™ÜÕ拔̗H¶‘łŠ†ätšNZŲ䔕ĻS‡Ā÷SiĢĀŁćŒ!$Ž^E‚5VŌwyŪ‰('¶JÖ%XśūĮ_,.40uĖŲmKrģ‘ ¾ģtö®6ćGÖ|7¬Āšuź #*ɜć¶sTou25Ks©b‚(B•”†É/ķķÖø»½z->ī4’ČQ“É÷2‰Ŗ²;ßx“DŌ§ŌTHāģ.@Až}’ ×AyBĄŪnėź­gŹĢź$ō9æųJ‘ŅęŁm »ŗ“˜°jŒZ”ņJA^§iéU–QFõÖ¬ŅŹįŅ8OÉõö®oĆś>įżY'd–źu` gh éŠŃ2Œ«ć]"=HCsnv+Pę¹-"Į­÷Ż,‡€äŒ)Ü%#øŽžŽV[[i#y³Œ©łjœŚ}ņßG5Ā;¦@ĀćĻZ‰JĄ„Šö-.Ę{m6Ić½Ž p ŗnēŒvüküEc«kŚŹ4Žnšŗ ć‘BØZ*ieµŸŚĆJ_<‘Óņ©īåCŸ³¢#“ŽćB‡K„ŪAdnd…LEOQ޹hõĖ7ž=<N 2ūÕ żŻ4dz¶ĘŌ’vUeqÓÖ³ÖŁVV.‡žŌ7s~×\ŠŽt‡Ģ\Œć½dx‡^ÆŒābŽ>lŒŅ{ •—ōmF;”K‰š%;°•tšÜi:īŸrtūi^`Åpćwū'ø¬ Šhń­WĮĶ„üŅ,$ĀŹ `ƒĆ“Óé[zv‡,R[_*Ć;.ryö£ŚXŚ/SŅt*Ž bÖ„äL`0։ݿ×šģŁ v>“*—Šr‘RśkdŒHäKa“o$zŌė9€Ŗ<‰Ž0GįA›,Xź‰>&óŪŹGĆ®y`=A®7ŗvgUb‘¤m$‡·Ż^٬d3÷«Å÷šļĮ_ˆžńƄo¤K½6å59bO–qĒŹ>˜?•e³÷ĘM#ö¹żšü;ńNŹņĪćY[xķu¢c• §w|ä×·RW‰ėsh}šÄCĆŗšč÷^b¬¤F?(Å} ćo Aā RÓ¦Ž6Łž2Ų8ęøŁĻTžO’૟³öƄ5o‰¶©-§ō)Ś+ų¤–āߐĒ ü«łs×-Ń³x’˜ćWdĘ0NÕ¹Å9›8!¦‡ł±€zšmĆ\ņ·³tg8…;c›M‘‘J&'?/¦;VjYŹ ż”v‚Łh*$ŅĀ ¬£ó¦@ģe0īŪĮ'š āģĖö“[‘¤`„“’s].˜’šMģĒr–8 ŲąÕ¤tÓÜžČ’ąŽŸŪrūǾń'ģƒćżbŹMOG‰nō9\ƒ~hšz{Ä×ō…ØĄ7¼Ž„J²ś••H„āx’‹4™5 #dWxX¼y=E~{|uųg ¢jöE<«½ĢcĮ2õϦx®IhĪIG”ų·ūrü ¶ų«šÅõ6Š4éu h s¬ćęŽQŹ·Æ’Ø×ó9©é3é—z†ŸxIø·”Å2ˆŹ`x­£ęgģĢIa–ݐ«üøŻŅŖłÓŁ…‘Lõ5¹„ćŌk0ŒyŒÜē…„UūL‹‚Š­žµ\‘ åĆ"4m&Å?3ÆAS‰‚GS#Éü-ŒsZ•ØåTŁ$@ŗgĻj0ĖĮ g©G]6]µ”®^P¼ūף°ķØüųļ„K{wo¤ųU¼Š;Š·s6±ģI=©JLesūŁų'ńFń+iŗö‘ØÅq ź¶éĀÅ8qŪ=jūvĪO“Ł«*Ÿ8žµÅUAه‘öh ‘ŌM,E±øżō# §ź š]Ųž |N“ųūšĖĆwW^ńĻŪg0“‡—tąœćšķ^]GĖļtĻĘĻ…~2{-]4ŁŽH®O—y¼\uā¾Ų›Å^e” ĀV”fÉą×Ģ擹dŸs¬ēüA¬Ü\X“ 3E‘µ™Ļ5Ėj^ŸW±‚[hÖń† ą}ćļÅy“k8ĖAJ ‚ņ{2Õ“żZŁ#B«“³Ó"½kĄ~=Ņ×/d•‚©,ć ĒQU“ėyn/”ó%ʧjCļA)ė–ŃĪöR ®ö\` qė[ŚN˜‹¢“dHc}®ĘŅ{Ÿn“É<Ē^’āč_}ŽåB8ćw8Ą®Źk„”!ŁĻFyåŻĻٵ›µtP›Č;¹éW ŽM,>d‹žSŌN,éōŪk©­#“øiT©ćž£ß4ŗÖžī°G&ź:TøŲFu¾—$P4°I“¢Ö”‚żõ Z ĶŃĪ£…Ö¤,`źZ…½¶mį Ļ“ž3ƒRx:Į5ū·Kę>JA\géėWSއi¢č׎bČ#2Ä Ē“A§iŅ+K’'EwŽÄā¶$J×īµ ,åÆš ņø­±y±L¤mˆéYŌ.ē|C<÷ĶYF޽A¬KD’ .mEc2„;GSéYt4ü3®XŪY$a%$½ l^ÜčįĀĮ4o#ņ©Ü}iÅ+—m®4Č­œ+\©ŚU5µc¤éśŒsĖ+$JŖd»±õ«ŒQ“nē˜Ž=¼„Ķʞ£ķN<¼©ū ĒźkŖÓōżIķašō0‰!ńRµ™S¤Kk§„ć,+xLdOŻoZę$ńcYßyw†(·Nģ;Ń)t5„N»Ä2hž.“µH,Ą²e( ēię¹xtK‹pø™$HųĮx}*Ø£ė¶qI%å­¤q™[{½żėŠ|9§Ųżä™RFCóŌ uż*%.ĆćÅšyRéśp[™—ƒŅ±±āmPƒœĖ˜+žN2z~˜8\įtłćŗŌ`fB&ĪG\y­ĻųŚ}öI²+V‰6® {ŸztÉtģybxĖTŒwJ£(CoĒ^k^Ū[×üEāmž÷Ήŗ¤iƒėĪ+¦™Ź6>“Š4{%Xb½¤ø ąw®ʒÉmÆ=„ŠĘ–Ģ܎«ļD×B tžžĀŲ40¬¹ČPGcÄ:mĢ Eęwī]ŻÅc)XŃ#ĖŽ„o¢\KudŠ· &šoZŃ»ńżģ×QÉxėēöīĘ ķQĢŹŠÅ›^R2V7l`(==ė[YÜĒ+HĄŒdw¤IvŽkwņlōŲŹ.1!'ļV態Ē{p¶Ź~`ŪLR3Z–+DœmøĀÆTńŁ%ā.2xĘ~ļ½rŗĢMg›32·$+głVĒ…“Ķ8, ©0¾“i%IĘM3åd‡S’ŹŲēiĮŻ®ŽŅ qnVE;N:÷śŠ#Äz|\ZĆonĮJ…ļ^ „ķŸ…”Ó#ŒÅqlMć·½O1\­ž5Ø&­”] »čē0nĄrׯXе”žĀ0‹wĒaUpqØj]Čd‘Ö8r{× Ø[”ŗhĘ $ē4^}=.m,Ō(Š(æˆ/&¤±ž-2łįžHŻ…pūŁōØē)#¹ŗ¶Ńēµehq3œs^q7‡m­¬ī'·VG~¦’īŹ“čyģ»Ź÷Į®‹L²µ¾³¼Žb£jš3ŒŠ†AsB‚('h°0¤ó]n§ÆMīĪŲƳ1dīõķ@īy­–—$³gt²?,]ŽO5 ŗ\Ā`ĄŽiŲæhu?Ł×ډāVRėW®-.ŸNy *ʃ¦yojӛ £źgŲų"k«'Ō­ķZ ‹ūĄsõŖŽ±}'Xø½’m¹p»XąbØ|†¾»ćŪ›ø ·‚[{}ÅžA¦¹ū›Ė‘ŗnQńŃEc"ģvŚ>µ-žœ-٘/ŹŹ9üjH$ŌÆ4łŲ“w!cńŒŸ„Hn™c{m=źŽF± ēĖų—ߎ“RŽlå¾»Õ!RÜu  «­:=FÕd“•£,€€ĆœÖŸ…n‡‡œ]jJZŁF ŒŠh j^üA¶ūTņéńLŲ-Ę2@Ŗ—W‹Ū[jÓĒ:Å; ”Ī1ėA\½ ŗ:Už§ĶŚžķ_v:į…zÓjZ}²VŪĪGµrZžā ­/EŻūOōR¼W’Å=̳~éFF}zS°ƒŚisŻ]FOžkJ¾ƒČÜcX[ūÄf‹Ķ­ŠW=ü¾Xt6ē ēæį]f™į‰.ąSÉQ°Č‡ ¤R=7ĆÖŪmļ-@Bƒ‚AÆ7ńž“yv—Ę J°ĻšŠm:…ä2¤«³Äx–5Üyś¶”‘i$~V) '#ÓŚ—˜Ļ@žK-7LŠźv‰¤‘Nvš>Üא\ĘdøŽ[^Ķ'©ę—0Įqröŗ Ģ“£ š xükŹķ|A%·ĢŖčџ—œš (ß“ŗŅĢĪĢÓ9Ž[Šīž؃4ń¾¢˜Ęį½ŗ‘ŲTøķÖ¾)ŅTCŻĢ"F$ žø­ [ͼ²…m[d2‘ūg=iŲ.“>•kŚÓĪid9¼;Ęŗu֝«ĶØi0OåHŖ_sćēłu¦}*óP­ÕįqdĆšµuM§,LRīćō>õœŪ%yy-Ī›söX|¢²|Ąg8ÖĻ‘r9ÓiOć£!ņ£­Ņ<,ז3jM,NѓŌÖj¬Ņ\Xķ…ē°ŽŖkQr"=="’öMØĖ·9b?•hkk4ŗtÖŃ\™—qzbä<ŖĆOž9&·hå™A’XI5Æƒį¶ČÓv4™Hƒ'©¤VĘÆ†āµÓ'{FC$#ēÉīŁļ]Fµāt[ūIlģņ§ŻŁĄS@Ė>±Ö©t!„dmP =/sÅüK«ż›P¶·ŽĶŁ Ū7=j׉ķdæÓEhT"€0ć®k)2ć`xcDŌ—Oŗo²4vć-”9ކŖXĘšJLjeŽF~ļįPj¢jµ¤?j†źHĆEŹńĶdx¦źļűé0ČnbާˆŪłPjŃéV÷÷Z&Ÿ§ŲĒr[Ą2¬:Ž:ųTŃųņėÄ §Ś^”µHŌŖ€ł sŌŠO&…ėéģƒ ¼µy±• ēŸJ[{ n-^5c¹A'Ž“%cĪæ³.!Õ'»»–ź@ß*©8Qō.«bėjķnHĘĻ4t^ ½O#PÓn¾ŅŠ–wĄĻōÆ.ÕõķjW»ŽņkoøŖא}źŌ™ĒŪj’źV‰u$“"¶†½WO²kŅĀ0Ҳ©'„ęT’5µŃŲĒ€q‘Ņ£–ę%•ČŹNjZŠé@%’3…ĪkŠ[N±ū¬ FŪ;I`ɤI£ZBŠB$1cćēčĀøÆÉjŽź‰Īģ ”ļŠĮ²”²…sĒĢzńYچ ĘEū8ŖįN8äP8ł¶™ńóOŃćӟNKŻÓgĪo¾‹ŽzT6ŗøŌ/&–H÷† Gj 6-mü<¶ś•ń6¶ŗ†T…ĒĶ ļłWŸxƒÄVÓAp¶adTKČ4•Ųą-5“\Gū„‚!÷Ž:×E&™eö…žŅįg$}ążiÅŲ“°šŌVš.¶öņ «eAĮ=žµ$–ö¢2-Õ| x 1­h¦-ä±Yi•7nÉ#·Ö¹‡½3ßŪ-œ¤&%ŪĘ9JĄvÖśÓiņ!H$œoģk;ÄŽ(KTy×ĢóXīĄRH>Ų¢2ø#Øj’ßMwuä•ĘĢńœżkčæ X]ė~‰fŽh ,pßxužµ@qZf‹ØĒ©\ĖzeTf n8€ńÖŖųĖV»ŠÕt«8c±~ńÓ©?_Ī€7¾„¬ižęł‚”ÜQĪFGałW+ć8­¼Q­&”e”C ”ī8ÉĒą(ķį;‹kOµ$ŹŹ1•DŽ"½Ņl!“‰×ŗŃhXÆÆ¤Q*£l<žy®ŗOPHąKkau.@ ž”ÆāØ. šv£"ټzį@Ńy„nzśöƛŽLĶ$Ÿx±sϽbä†E8ą_Ņ®!IvüŹsœŃĢĄ|p„Ō#!vķć”ŅĖ{m£Üź½hR`t77‚kF–Š,Q"äd:ålõĖö–K†˜Gn¼ž¦®1A¬x—VÕ 6ó\%ŗ€HCކ¶>ÅŖkVŠ,7—VgpłĆ+ĶW*)XÖ¾Q²Łjī”ĖBx?ZāāÕn?µ$†ĶQķžQĪFsĻåYŹ6Īž¹¼x<ēŁ/Ż?v±^ŹćĻžęhÓ!¶ī Ö j]’X½Ģ…ŠÅ»…$W=«-ķ‘6å|³ĘØõ «]­}dØ]åź^¢¤“UŽ)lm fI[ić¾?śŌ“GØGmo;F¶ē;šÆĻl×öAv*sĄĪ(_S’ź] 4Ö`*““Į|śÖG‚µYtłžĆ Wm4€ö gÅ2hž½x­#½ŗšTA<§Ÿ§5ó“z–·r׈D[2F¹ĆœńŠÜŽ^Ēq§x~ęēOšķ#–ÖXß]~V¹¬–ßkµß²ldc„ж†@šŌp*]IrdßÉŪŃO½tö7ö:s—uy£īŌÉźQFīāßQ½!ƒ•ō©®f}Bå!š¬ˆ!p÷÷„6+:„–q°xlō®wÄ,¦·K«)^ŚłŌ$®­ž§ęk;›A?ü"žš—€lu‹żbŁcdQøÆ”®æÄ·Ž±±µµK“ ŒŖ¾ēīµ9±ż­ķ‹j>Mœ‘$, Ŗ™98źsXZχōļjb)›c·ŲÖcŒHtOk:6Æqe-ĆŦځØś÷é_BéöŚ$ŚCĒms3Ā]gŚCD߯ÉļÅHšū/…žÖnukĶZļO‚ņ$•žf껫8m,,õS„źöØĀ* •b=8„!XłĒĒ7(¶¢Føūdä*ŖżÓ]ĆE‚ļAæ2 —žFE»šØ?…fāmrś„sų{R¹Ötó)ø·ÜŃJ£'šü« šuē‰īÓR¾×®_<+Ę1‚¤ö" ¦O}įŻŽ’oi1Īd³żó8¦¼Ę’āŠī//%{Ky$Ī6£m$÷ČzÕXĘKSŗšĘ”}«ź6–·’K½7“½Bž85ō.”įqt+©¼3"Ē©°©t$#“ÅW³.¶<›@Ņ5ŻkVŚ÷–uøˆžL:äq\†³rŚč’ yP®cÉĒņéO“ Ül3I’ęŚIÖTvo—“œę½ūĮŗ$壺/"Ąd]Łž#ļYø‘c”ń·‹<'įėĖMR{K¶BŪŃ™8Ęz_6x¦ĒūQ²½šå½Č†Yp­’±&’‰Vg{šėŶk–śfµĻ”„<­“ą-7ĘŗV™yuq«Å ²Ņ"b^2A^ż«hčl‘ēPI¢Ļwi%„S)`‡'÷æ‡jĮŅü©jeŒšKféČ'•öż*…(Gé>Ņ~Ē%å؁’eTē,qĒZņ_xĻH𾤚¬fņX@ēfߘ’  ē”z3éχ~"½³Šn¤ŽÉ-Śž§zr«ģkŲ<āČ,u1¤kŚUÅĶ×Ų÷G1Pc éõēõ¬„¹QCĢ~)ųžĒĄVÆ­Ķh·čŅ…ņU€eÉż9Æ“ųā=kW7·LrčŅDv@­ƒķ’M «F™Šų»Ęžš—‡×WÓō™ä× „™#*>i[8*}«ē >x’ĪyuKéīžįƒĄ„6NøĶU˜8wĆŻn}n›Q—ģCåSœƒĻās_VEi·‡.“ę6Ā1jc (äēå÷ėT̤|¹gyqw¦8ūQ\ł,£_CļÅPĆ:®‰öO9Ļ’ĢZE`™ż+š¢*6>‰ų|ö𾢁# ‡HüæõĒ–Æxń„āų±ēŲk^LpcI °œq“ Į®¦‡Č·~ > צÓīnEŲ«·qßń®¢]Yb³Hī$im³»i<7jģG'cĻ®5Y¦‘©įW‚Vo†¢Õ’į-†CŁ›HĮČ;„R]2‹¹ķŗˆµŅ„Š{°öŹW~ Įaķ^yuŖæÄ­Eō Ņź}©¹ µrq‚}khĆ©6+^ųGÄž ±ŗŅļ,o†$”‘ŗ\Cų®{}<ŲkvŖØŚ¬ķÉlv§ŹĒnĒ{š·]µÕDBįĮ8Ą'é_“tž𮁢h–ņA«ė“°gh¤ĖFH zSK 4ö›Ć¾{OĒp3<Ø éžøx×[½‘åÕ..Ū ŠŹGĖZ(wSĻ5zżE‚y3dżkÜžéCFŌ5/ų‰F£¤(RĄ#$ćęé҇M ŠŃńĒ4ż7ÅKįčÄV–÷!łū­žs]n©ńĘ_<6<=«Måé–ņyјTWМgćSģIžEż”ŗ}”Į·ęVĒOj”§ėZ­¼±y(£“vĮś™A-Čéõ-CTÕÉŌ.īn$ņÉ1 bńśÕ×õI峊[K™įC÷~µ“‡c.f{…ęAo€Īxiėw–śdæa›ū=l‘?Ķó=Ļåš.ÖćSāˆM$ŽÓuhu=6! v8öƝ|uØX-Ķ­¾‹ĘžR^I"*{Ł|ŝ1ŻģŅKąc!Nö'S^„įC†ÓU¼y-# BĖ’vŌ¹1¦w5ńEžÆ§YL–ˆ$/…”( ų8Æ ¾Öd»ŗ­“šF¹]ÄõĮļXMšGbŻ„£Ģ™_Ķź¤ʍCÄ6śj/Ł•dädąXF.ś–s>"ńWŚģ&švpåx xü+Ė-ķ"Ä‹¾Ebzœõ®ŗF/sŌü=£LśUš$¢mĄæÓņ®SIš}Ō:¼·š“,@ā$nC õ®‘Ēs¦Õōż8é×*!hīˆģxZó  ÉuØXßB!ˆ]鍎ōŲł›=oO¶ŠÕƒy 8ž+ńtó<ćl-2ƜūĄzVSCŒ»'ĆŻwKŅ­n ö’\’AMÆ“ę·/ļfŌnöūqCŠ?U¹¬ģhŖŁįkk[x<ēoŸ®ąŠļĢÖVZ\š¬×¶V0)™Ż=r)[ReTń{ø¼āÖHo¤žŌ}é˜ßr9¬¹¼p¶&ßĆę8eŸ2R\g<ēėĶ5bå©é–:s[éV¶÷ó$„ńņ¦>lwüŖ;oZĒ2źŃLb“#!@ę‚nz.‹ĢńøIa$#+/ĶĮē•yƌfµ:ܖmµ“rLe›Ø­”±­3ęļx–ĒĆ·’a°O |HßĀæCPčvųĪau=“lWpĘk”E6{G€¾G§=ŚBüÄī^łõ5oāöuŠMlŖ )Wõ>¢¢[˜ĪGĶś& ’jšĢo?9<S޽6Ł K˜byi 7©®~k= §'s„»ÓŽO(ĀNŽ™*‚éŗ|²æŪ$el}åŅ23*ßźŗJN4čķ²0Ņ3}ъņoė²é÷SXŲå’@>wūÕ©±¾Ógø¾Yäļb2šøÆQÕę¹V+n»ŁO\ąļYĶō+—R=R÷PSc< ĄÉ­gxćP¼Ó--fŅć?ac™ŽēPl{ā².Ē1cq}x‚a(<ļo—wąk˜ŌQ³œne*ĒļŅ“„C•›6Zō·štöilYÓä,ŁĮ'ұ-|72Ü$ā >ķłć”)XöĶ1&œęwFÜɬ­FŚG’8ŃxpH ĻDĪrÖŅĪ;Ė‹V3=Ō¤„Q×#޹«Ż6KKČϟƒ“ńĶ'±ŖgÆx_FµŅmĀÜG”Ełžzʇo§]¤~RD°Æ¢ †¬ģŪJŅŚ)#ŠŲČĶ÷\žUæ*ł·āe…ī•ēÉ īæ$€Ąä zⓉzž;£ų—[:Œā鞃$=‡½{,ڤŗ¾› °ŃÓä;F*ćM'©ĪÉÖ ŅO½æ‡wJēå–ń·m%œįčGµ_³Źjz­Žœā2γHHéV“¹-„Ķåå̟lū„Y3‘ڲ”zs#śYŃ“‹OŒa%ü^7ŅąO²DFż§ęĖ?~7ū÷žĶūQOšWāüæ³ļŒļ—ž]~qqJü}ćģMwóō=Jq{Ņv³§ŽčŚō–ŖĻ ‚mČąg ņśŒWÖžńkś=•›35äi¶\õb+*žŁ_|#āĖ+{­GIšK›wµÕUW"dlólēšÆąÓöµų yšƒć¼weö/ō™%Óå`vÉ|Ź<żÜwķ]å’ŌųŽx~ĻåÅm xpWåģ}j¦%^P’³äÉű±h#Vʆ9)ĻÓ"FY$7å†h!JēهˆF€ŻÉäÖ$št°ŹUŃvē’“FW2}”]^M߯'ƒųVյč2#Č~V ć§5qGM9NžĢ“>±ū1|vųsńW@Ō®“{ŪMR9ēŚĒuĘųÜŽĒž¾µž”? ~,ųgćĒĆ|Xš”ńŻhŚīŠt )Qøwž ŌĶ{¦ņk–åŻVY+Üvƚ>&ųN{Ż2žÖ(÷‰1" «z ä”NišŸü6÷–ZÅ­õ°µ“ž£`b’ĮĒ×ü„žŚŸ„ųońP׬¬¦‚Āžķ–ń±Ņć°f“‡c3ā}¶åēŪ‚ūÕ9&VB…cķ[THĶ’9ē·RØÉƒÉ#§4ėˆ ę…Ž,,¤īē¾)£šĀ“čī0ź¤ć­6źEQü¦.Ą(ļŽµÆ.–œæh7 Ģ1„Ą8ąŌ°4ė#ĘĻæ±ōV:a+"ņĆ(furéĄĒ„i¢įIąˆÜ_&^•qČ zꃦŸÖ'ü ö©’…‹šāĖĮ^4Ö<]¦&vl#"?Ļ­Ož ×&¹Ó4=Gtr#§—r¹Ļ#æåÖ¹*DÜōxćiÜ;‚Oā¼/öÆżž¼7ūOžĻ~3ųE­ŁY]jf’ļFyW>\ź Ūü’}y•éŻ4tAŸęńńcį¶¹š;ā׈ü3ØZK§%®¤Ćd«ƒī+”ĻPHÆ£| ®[\đy†h²Ņį^>kGž’—c¶Æ$ÜL]cLc‘Žk¶Ńe±Ń–ÅœĀ‘Øä (Ļ„|“hI³”=Œ?hÆ_ėŽ(m'ĆV¬öļ!S4+6}1ÓŖŽńN«ąĖūµFB£ē=ÉÆ¶ČįģhØ·«9±ŅĒčƒµū+ū )ą¹’[yō®č4 :Č«‡lsė_@„sĮ®śźWÓyˆ1»hĘ:{~cEóoÄÖ·vé ?6Bć¤em>[½Ō4ß%Z(‘­féņ\YĪbŗVź@Ļqź)©•Č_±ŽŚāśģ!Fp«“‚+½²·„Ų\ †)ŁŠ¢‚zZŚ&HņY|=ØAw,³@ąäē;k ¶Óm„ŗĘ.€łI5Ф@Ķ66kĆ<łX×'ļLÕ¼C„Ģmk$QÜd0$g”¤¤iz„éēŻøåC9ńėMw«OqČC„ĮĪź@sQjpĻ}.NAJõ}@¶†/¼ČŻžphGG«“V–Åį@Ž©ŲškĖģüQØ,·(Wm¤ŠŻŲ?é@(¢„Ō—6ŅłĮ @üóĪ ©ķ[Ļ…Vb›Fyō ,QūE՝Čt‘Ā䍠Wk#}ŗĪX®üX~t&–‡,×6±źe¼ķźŸ/¦=jĶĶĢWqƒ!E;\¹¤K\Ēø ĘÆTmF8mö)@¤ cŽh±Q…Ģ fūÄvzsO ’¢6Xķ%vŽ¼öĖÅ3ÅpFVōō;¾lūUEšrō2ļ•ī/žį-Õ›$ĒҽĆQ-¤I*Ŗ)ÜŠ: ­r#sÅżŖŌDĖņ"ø+Å„Ķ ŌŹ«ßh™FĘŌV¢śXŽĄŖ1ß½z7‡ōĒ€§š0¬ŻX*kC;eķŗZ ę7ŽģEn¾—”ßß ».ź ŹĖĒ4Š<«_š×‘­Ż½’J¶Ģʼn Ī*ļ†õ+[+·Ó”¤»bc®kH;ĢÜÓ4GÓļu'y®<­Ķ)„ösūFĪźŅķR(dĄŚŪæ„ūV‰™“PÓ5 lķ]„8Ü; —[ŗL±¶Y y›?(ļ隬[š@ņś)m#’PŪ÷ńžčŚW‘{§,3äKĆ)ļPYĢx“ĮšiūA'­œW¦ÅwVęV.čxĻR=č;H­¢Yā5 Ģrk}“łÆ4ļ“Gp±CäąóLj78Ė ŚĪāęļxxŁņI?xś×yØ\„֗iiiĆGø¶Ž ¢äŗ]N&Ų賲ϙXs“wĒj†ißĒZź_[C„N£÷jø Ē„!%cŌķō›ĶJ 2‚px®fĆVølĖ}ŠąämĪF})4m t3„ŌīāŽįf õ8ĻŻÕē_Ū:ö©ä%··ĮįIśÖm2Ļhųc¢[Ł„Ā^BŒŒŁ˜r¾™Ń|!c«iڕ̗6ö« 26OŽ?!#•Ce§Šüķ±ńOŲõŪčh'†ęT`ĆĪåŠŲ·Öm5½qžīŹ;øŽpÖ®ŠÄŅųrĘYŁ#d€·(éķ]—įū˹ö¶Ķū’;zś÷;«¢2±„¢Ļlš×‹4łä[|¤² aóŒ× ńJd¾Ō¬Æ#rŅķ(Ą/Lvże:…Ę-•Ŗj>®Śe{ujōc\“Äš4v‘Få€ņČ$ķ®y>Ęяs˧š®²÷Ŗ¬ćĖO¼ ēubjńĘ©0ŪLʬ~Ģ{ФŽ“MšżĘ›4—rŖ“¬»JķéPź=‹ø*« ]Ćń ĢÉŃ]å½&0æzč­ōĶGOÕŌm·‘I,h„]"kØ]ćpœœŒb–ĆH1A,ŽŒ¤ēš4Ļ5Ž—{©C¦Ü41ĻĪ<Įœu®nėK¾µńT²Ł[JšŗŖFŹæ*NG?QAj,tŗ_ˆm5x„¼Ņ¦ q&<ćĄÆ5čEimsŠÜwĒpHä L~ĢėZĢÉm ²ZŖ:®Šņ=ėŒń7‰5M;TŽÖw™­ ]°»‹ŒtšØå)+ųžīxX>ŅęQ’_»ónśĒN”‘é·–:=³*œ‘Œ‘WŹClćou@Κd0nŖ1Ć7¹ķZ—–:…“Möå6²·Ģ ö„-„‘Ōųf$’ąw3īĒß=Mj_[iŅŻŽ?—ćų…dj—Bœ ŗ‘W8SĪNx¦krK>”÷{B²+ŪUϧēM2e½‚Asę¶%É' ō©ōɒÖć}Ądb@9銮S;t;V²»ūLm ī‡°+Ÿŗ³–Y§ –ÆČnÕ;l_&„–Ņ\Z‚±£H+¹Ó6ŽE'īö“_7ļLj¦““PÓ®— …ŪĮƒ¦ė#N˜XźHč„OĪzM²¢z§‡Æ ŒčÉ|%Ņå\²Į’<×+ā=*ÓWqZ‰ą ł §oź(lfIоĒdDĢÓ:c—źk•¼Ō1ģA‘“óR2͆æy¤#\iģ±\m*Ó"ŖxK_‘u»HµižI$Äń!Į=GėLwÕtż"Öņę¤Icˆ¬Äe†+”Óķ×VŠõ-ą[ˆ‘†óŒMDlÓ½šĶ“ÖhŁ[[ĮĪ`āø­SĆW8$ęŻĪxā“åfV±š½¼J҈QŌ¤u«^.Žqį»K{XrоżĆž8ČĒįśÖrŠS<ś Z];ŹYĘ<ōéõ®öŅéõ+d*ņG^(QøœĢøü/«Ė”+`iģƐs“ļIaim§Ā±*#Č\åæ»ZF6 ­©ĪĖm$dt=ė\׌s±Yv)` ™Ijt6V™A$KóžpOJō/]½¼Ø²Ŗœ„u©cƒ:‹kŸģŁĶŚĒ¼3od=ڼÖ]jŽ/Õ-M“KhĢϛ¦?•IÓL®¾²¹×>Ū8’8ĮĆ6ŃČĶv1½Š“ĶÖ{cŗä¶ÅAƒņńÉØ•ކ‡Ļy&¢…2DÜmö©Ęš©ČysĄn%,šŅÜéÓŁĪc ‹iēõÆąNŗi9-„ü"ńżż„Ż®…žŠiˉCŒ3gŅØŻĖ,w6ėĀE“éYŹB½‹Ś‚Ś„„ä“C#N¹Rœz{T¶Ļ?‘"†Ū>oö…AHéōÆǧinó³}€q\sjÖ÷zŻżµ“>}Ėņ(ĮlzÕĒČŠ[,ÖžeĄSźjåÄmyfX$ˆ‡©µ1ęgIįß¼ŗ¼gū<‹˜dp~ιトn †ČØTO›œ“ ņķ+©ff|—ÉČĻZHīä•ö»aśęƒ[—ą{½Zņ;äÓWż!)Ą=ż+§°—Pø–KMb)-ļQ™Xd‘Ö”¶Sžż?U’Ž9%Žü«“€O`kśēMņn4…–/¶Dųu “ł~€Čō5e·’ĶY–/› _ją'±Š®<„(|ĀÄ㩢Ƒ‘>›*_3Z’É‚}:WžźzŗiśärŁ„\?Z =rĘóNÖō‡Ęé9;U·pGz愚żģOęƌ1ŚŽŌ³”č³ÜKö‹†Ą>„VōZäśF±l†xų;@#  dŽ{ÄśšŽTˆņå®%µK‰g#Ģ•ā-„ō4vV²¦›o.¤Įć—f_zāu»}^IełBńĒqV„Š gFw·›U²“–HmńęŗŽė]G„õ«]<ŽÜjw &‚8Ŗę†ÓU®¼āW9VĻj#³ĘT‘€Pu"³{§`Æ%äpĘĶąsŚŗ=wG»œYŚ2ŹÖ“HUŁN`użēM0:łī£³¶†Ź ÅT)8ūÕęś®õæf–C–=(vč­2dX%Hc}źy8ėš”éØŖdņĢaŽ©|ĶM>ĀĪŠ\8efzs]-ö‰k£}8Å<¬ ä ē=Ø6Š]*×.ÆekĖŃŎ6Ŗą­r–;A0rYىü(~[KV‰#¶I^åø®—Ć–šLĻ'Ūo¼¹WķS’÷±Žƒ9"&nE›ŻĒ,Ģå@gŒŠč/®åҵÓēk6iČ zff‰ģõ Ķ«i€ćļžŸsQĮ¢ųrĶļu+Ö7 ĖlÖ­ #BūÄÖŗ‹[ǤZˆ¢ '©>µ±mįūė‹v»¹“•”|ŁoJ†Į¢łšĪ‹ākY-Æg¶°hćvI\ccĄś×œh>*×ō+y¼<.ŚņŁTØv%½j£!u}[æžĻ÷҃ ńOē^ƒį„Óµ}ā R5žsó#c‚=jĄĀŸF¼Š¬åhŽ¾ą«–ŪŸ­Ea>oškˆD-·°ļ@zž»œZJ·3ģSü$ÖO‡“Ū’ż’K›eŠYĖ_LöĮ —Ę~„ą=!ī.¬L—É(‰R5ß»$Óź*æ…/5Ė›§7Z\Ńķ쥥>ŲØ”»źvś¼ŗ§˜É ÖŖłVI–õ¼·ÅžµYē‚!øeĻŹ1ƒéY ó¤Š^(J†ß.vņ96§¤5”RĄ±ČĖÕ³ŠÕF7BĘŽöy(Nģō®¢ćIŸQø‚Å<Ļ–5ŪĘZŸ-€•īēŠšŻĶ§•ä1 Ū0ĻÓ9nõĶ^i1BPĀå-@ī3“T¤_įŻ6ĪM=¤kywa±óĮēč²XĒŃĄĻĮńӏOάYµŃŃ'³ó†U€å~µĘź2¶‡{%ŻŗDz IĘąhZx‰É‚ņńŸ”š=źÕ–§=ō޲»;38Ęk¬4ģmƦß*Ķrī¬lחų‚ūP¼1ģ;Cc/č)sšzåŌń@fVy?‡Œ€)ś|–¤!‘6LõĻ­m_Ēuy939—qĄ®§FŌ"³EÓeqn’0VČäā޹uēkrŁŪܤśtg“ń’ ‚HEµõ“–+¶ąI=éŲėŅ#čC1A1Ć_Zņg<—ȱŗ²ĘĮ†O½n…×oüi­>›“#Z}‰@ąD”ƒøs^c}syu"­¤aĖ6Oī MŒė žĘāĒģ—9Ü008É®Ve²G··rĢI#wjŹśkĄŚtŚÕÖµ§]M¼‘[›vŻĢĢ: ō<“·÷:m¬‹qnYՎsÉ"“’¶—/r$hyēō’^\ˆDq šéŸkxQėYŞSń05ģ:|:¼ģšdRń:·±õ®/XńMž‘eēé–÷1• GĶ»ü(äž?Ņań]ä>!†w‹Z>Z°TĘÅäūÖ¤ZĪ«¶riī-n¢Pž`$p3Ēz@t‘iwz½‘ŗ‡"źBSk]‡ ÷®VMXŠō{)gopēBż:w¦;Õ¹Ņį;pų#”õ®“˜ä¾ŸU_- Jć÷¤kį;ū5ŗ†ѱ$zėZ·†ņ;¹¦†8evFG{Ņh č,ī ö’ŻĖŪ—vqéłWąi­ļ|;©G=Ä/öEņāQœ=ø¤™GM©jš]åŅG=Å­š$-0FnŖ¼=ėĘāųÆ„ßųžŽÖÖ9%žiL*Ū0‹Ę}øėT =N¬ų:Åu{{·¾‚å¤"W1¶WŸį'Śŗ_é– ßdŃē’;>¤ī[¹^:PY³†µ”Óž÷H³:‹Ę”¶#Ēšė\7Šuķwū.Ķ­ķ¢“–?»Xś‘žx„Øv£āŻBĆL6šl7×Ģß2¾OL׋x’}G\ńākuŗ‰ŹÄńēˆŠw„c±ŁŁk×õx® ‹2F#g#2zē׏֜ÖöńŚ'•’09cėAĻĖć[įįKū{½Š>GU&Mł Ēø­„𵯉ü-§ ķeŠ;…ū—Žsōāƒ>SĻ/¼=¢x–¼¶’?0/–HV ädäuƙüOšõļ5»»ż~÷ą¶€”8Ü=hc®§œjś5’‡uSö!#Ü$aAĪÄĘx­oų£Q7³µžČPVI0AąńėCF‰Xõ‰¼m„Ļ›Ąéw†&E<7ųV®…زYj:“LJüĒ®1ŠĖT_*<;PŃ®4żWY¹ŌSU[™^ę//ļF‡ų? 螎æˆmÜY¬š\!fņHäśēłÖ‹b%¶…ųU£]CRŗ…-ģ°¶YžŌŚŚ6ĘBLŽ6‘YĻs&Ī‚MA“ū;kįYŒ’Ņ‰’ ļ-„2Én‰d¦,=9ÅaĪīĢå،iœ/lóLøõ ¼š§ˆ›€UQ•ŁļRųWĀ÷×^‹HÕć–{é0²;œœūŃcSēmWĄ%š×‹Ų’d;hÓ9EO•>£ė^Ķ£8šé¶{¹#{s÷”?YIš«3ššĪ§Æk¾"ŌįÓ|©-ć?>Õ;—øÅ3QšdŚÕõÅö«ŗßS‹t€æĢ&#$}źn)A įŸŚĚ‰«ųsQŃ,'GVŠwĻ’Tüø>õī’|eyāßj^&¼Akwm0ƒĖ';”’>œPgk¾<žĻńʛw%֤Ȋ0Ųżę ‚æĪøÆé“i–—i‘›q/°?…0ę±Åų¶_ųH傾#kķ޵b¶:Ÿis§“r’ÆM Pßb%3Ņ< 0×^āźÓN*š™ ÉūßNkOÄŗ^«åZ]Mn"ĖĻZ®mLŽ7MŠ>Ćyqså™åqŌ y~ā[D¾šę8d¶šwoŸĢĘ ‰A°6“ 9“ ÉoJ}žR€{OÖ®ų÷ćŌž¶°µšÖķra-s(üĄšGēš•Eõ4ī|ƒŖųö÷Äz½Ī„­jóÉ{<Žlœą”= ŃŅõ{«™ •É™mś‚łĻćC¤hu*÷zŠXgź3ęāöÆwŠōż?I²MNKø…|¤ą“Žõ¬D¤xļˆ|k„ėŽ,·±æ³–ņ8˜°XįuķÖ·ü;¬i¾Õī®l”žÉ·™ĒŹ‹ļ[E˜Nēøź>"ÓuX$³Ō/Q·D>[ÆŽļ^iuyąMĀŚī£āƲŽ’ ¶¶Ę<“čŁķŽ l˜£įmBĖĆw6Ńéļ'VŪŒ•Sޟm”źZ’‹÷Wø2ł„ĒƒŠ)ķLŁ]3čĻ ü:µÓtłtĖ8ķķåY6²ły'9čMq’žiz>©ąż21kkŖÉcö‡„pķŌdÖ‚n|ƒ¬XI¦Ż "ę$ūcæĖ…?8'µ{oĆ]R}ņÖT˜BŅą«`Øõ ”ĻE—į΃ū›én7/4dü€v5Ņ薮’Āc‡U%pŸÄ;Ör“4ŒneŪ]ųnŹ`śā[Mgmū9ž!Ū>•ēß,“MCV·ŸĮŚdBĪV "ƒęĒ“ųŌ69EųOF½æ¹øšü²_ŻØ…eźćŠō=RćĆ6¶¶F5#É·=;ēņ¤dĪXæÕ¼!yeŖ%Œ°[Č7 :|¹ą×¤Kā=.äµõĶ£ĖbĄ}ā‚%.§GpŽKĖČcW¹,Ģ›łłsVü-kö«{»żA›ķ,w!ż+)FÄ6v1ŲZČČ·Ś‘ Ę=* ODpĘO³Bšp†ć Ø•/ 5Éķ¬¦š8ž&$~óŒ`Ö׍ō[(Z8ŽźÓ…ibī“Ų÷¬šŌÖ2)[h·Pé­)‹xĘāAĪß­x~²ś”ś”Š(ćK]ä>FKj”йNņŻÉXŌ1Ąģ;@>T’gĪFžĖ÷}ÅoŠGŃz–Ó¼6€2»įF?¶üfšnÜ2cķq[+¤{Įfol*ŅŅĻŅ.ī5ū©…1"…\`œzē½uś¾”ekm;Üżž)•AD €qéśV‹Ģ.exJ+ßÉs$-¬p(’Waµ}O…Arš4ŗ“–śŽ`¬72ąć>ÕÅEt:›ß XŁŲ…X-%eƇN9<כx—SŗÓĻ‘b1š9=*¹£źžń—„LJź@6¤Ėµb'n89śę™uįĒńm “Šāhŗ‘ļ”ż}qZG¹>Ģņėo…7žÖģR Jb«1fŚ2X«ōÆN—_·ŠŅa5ÄpŁ/q±č*›ÖĀägC«cs¦5Ųgū›ŌfŖųkƚmÕĆé· ŃČŁ*qĆڱhÉÅÜōe—NÓ䒶[ˆŽŽ%Üĝ»—>•ćß<]„Ēį¶“Ć̲jÓĒåØ øĒĻßĻlVŲ#~§ĘVV·ZŃYKIs“ø·RČÆšoˆ4Æé…^Ķnu6#;€Ś£ø#½n“±²NÖeńR“Wm7M¶ģĘLĻ(ą@(ń_е-~H¬ŃŹZ€dīśÖn"”7ē¶C O-ÉäĪ}*%žŠ¶aw?ŽĖæ•gģї!čxŹņļL0#³¢Xߎ¹yu£ŗviÜI€ĪW*E$Šö÷Āi€xĒž~µ‘4IÜÓÜ@ņ3>a÷1éQ6Ė“] zV§qi˜ŁK“»øŚ>£ęŪ¼XF°:“ļY— w*Łčz®¦Ām2Īe¶S†||¤½ś×­i> ³66­ŖŽ[^4„§'ÖŖ.Ēd)u<Ÿā6›Œ<»+¹$…%*Lnü+‹Āš§ˆ“øµM2ŚźKPHbļŌŚ·Q&TXü5qcoQĘ``rr*厧­½¬3ĀŃ4yŒæ÷É5^͜U)µ±jĒYūYKhŒk©ćU½^ķmlYŽI¶Ž‡ŸĀ¦Ż9;Z.‡ż”0žāw·m\īüMz•ą5½š„G) Ąnp® ®].(ĢŹ¾µŗÓ„†$Wxw͜Öʛāōo±Iž‘/] e{f±qFœĘ„ĒŒÆ¢“Hį¹A3ư$·æ„qz½ģÓŚ¦\#²żį"š2j. ō<ŗīĪČźbd€[\7īųą|Ww¦ÄmmcŠ)w”ėź­#.‚lŸQ“k«1if’»äī=:Ö.‹įł¬ŻŚņ`Hrs•śÕ_čP]$…Q¤F{Ÿją®tK™Æd’ “õÅKŠGōš#āWü"~5Ń-„(-ÆĀĒøg,@9 Ū5Ó|oš–½š“ādž¼sąV .hg‹V‚y3µÉpJžŻ‘Ø…[³ßTžŒžĢ’fWķ#šĮ“żBĪļ^ŽĪ;m^(Xź>żsųWæ|<×ßDń\2J϶@ce>µ±ĶZ6gŅ^-Šl3ųĒą+YlO‰`X’Ācå\[ó”—ǟņ+šÆöģżōßü=Ō/ÖĢ\ź–Ņ8–=‡ä²ėŚŖ Ģžcµ›+ĶėQŠļ,šŹ[YYōŚe{ēi €Ź7cŃ;Ģ[Ÿ3;‡=Ҽڐ拋:!3ė»]zx4³pĪæ$~k¶z/łÅx7ž1ŽÜŹŗ^€ė$lā)œ“•śZņa‡ÖĘ®e ųRŠåÓµŪĖ·Ō/„_9üÖ$½AĮćšōCĆŚ'‹āøŗĀ=N%$s€Ē>µŁJ«ON‡=Ws·ų'®b6Ÿį]fņŲJ¹UrIŚ™ćņ⾬—Q?eŁø™Ą;8Éķ^ęÆ2¹äצÓŌv™=Ö„)k€±L1šŚ–k½2ō*ܕG µw«C£¼¼u…f|;v÷®÷RšęéP¬“ĻŠćŠ Ø”ÉšŁź–vo•ŠA€ŁN„ōĶK¢jלƒĻfŽH²vƒÉĒSŠčŠŌŹĢß“ń HŅEt‘°ĪŠOń}jIoĶg‰0€óĒJÖ(E{­U½¶¼¼±pFŽ8\ś×7oąŪµø…ÆŠO9ē€ 1Ųō ōF³šżÜ‘ĀņH’vǧ•|ó×Q9“½‰c—$|£€hb°[Z‚ej¶9ē’Õ^½£M ęc ž†°¦·©Ģ~SnÜ@9¹č¶_Nʈ~Ć~€č®m%‹LŪpcY2:Ž•ŹyżBkœœžæJŽ Čį2¤ė<ćÆPOZźbńE“÷~Eŗ UOp8ėT‘‹¦Ęɤ.”=Äśr}åļŽ ¶šö±l KY„“.kO#?fÖ¦fžĀA’PČĒ+ŸīšŪ¹ŗs A¼…NY³Ņ¢[šFV;ū/-ļ†fŃõ4‚ā8Ԍ„€ēæSÖ¼wC²³²ŗ¹s}¤,¾Ō‘§::‹­OF(‰n"…‰Įv=Mu%­ŚÜĆŗöwO¼Ē€=kEó5ø®s²ą¼=BƒĮ®"ģ$26ĖsšØ«)t6ō‡Žk‹Ip8ņO<µz“Wk%°|åqü©™—aÖō™¬$k‹ˆÖuūØĄäŠćī5qpdHKŗ7Ź»OJĪR/ŚŃ“’µDŃ Ųē'±”Ū>›5ÜBnNwr*”Œę“ØlŽ+»”†Yö)8EĪß|WĶ^Õōė?A:IöWøŽwżćžqTccŽ|S«Yźž!dŅ _a` 1Ūø®&īÖ+xo„•„!׌w9ŖHrģghZ¶™uȗфWŚUų<Waā=?MŌRĶ­'†1rT7Ż"- å³€ˆ 1ÉĻc]z„ņX˜lŲĒ9_•‡8?JGL,ĢY/¼C2˜uq"†Āäq[ŗ6’·v>v¹ū«ŲūŠjuzœ&ŹpÖš²ōž3Sx5­Å¢2Įną+Øz“v3ē1"–Ņdd·*Ń!Ē-†­yöét gXWę\ōĻֈ•©Į·ƒļ­uƵ(Ūd¬@ x®ēO“NÓ刢ķ^Ÿ(ęÉögS.±¬ė—°½¦œŅŲ!ņå|aTĒŌńZ1Xڽä+yÆ6ÖßRŠķõ'#” īŪæ•a$UĻŌ·ŗ¤3¼ńZ~Ö_bŪ.ŪsœäƒķYM'©é0%쁙ŲĶWü\lt ė;nLĪŲsĮ:óųTŁŲש“¬Nözz^ˆŲ$„€År+ m5ÕÆWi`$v­"“&K©—­&ƒ§Ļcw„·Ā ÷żń­z-šł¶‘Ķ:`‡ŹØĶ—›ģVn«ęl‰śīõ£PŌōūbHę†yXš„yēó3ĄüQ{v<@—$m;8 }Šzp+ß|;owœ×֑«æĻņ2{ž”FLō/]é1xVĪ×b5Ģ[öw“ßōÆ›Õ źź;«{*[4Mž’ž,ё”3L°tLžCJĆńF‹gŖ^IÆĮ3¤;]HGæėSp›ĮÓO±Cp%±—‘Œ1«z¦§öŲąŠ+K“Z¦BfDGDŽ{66h·*Nņē—9ķé]·4ß Łč ⨮ŅÜł[ŚI0ć“ōČōؙ¤Yåo«höv¹²šuŌ& n"-•‹ć€«Ö×-tĻŽp§½fQ“‘“·ž”N0I®[ÅR.Ÿq¦éÖw0Ī.”±~éžļÖ©-lz/‘yj³¶ÕnyW„ÜųK×bŽIP[ü€nĶėZ„m݉gŅ®­UY¾ś £pĘTq\żŹé–ŠIu5ŗ¬Ž@,OqS1œæŚmÆ/E¼o’xÉÅvV–Éeoā³]‚¼A©hP_iŒqŅ«I‘€Hļśš«”ÉēˆįgiPŸ,’Ā`ńÜv$óA@®zvˆĶs ʐļ.‡'ĄźŻ•‹éMń,čXØśž” Hč®l®šf£ou:‘4Xᇿé]$†YDÅŁ£Ū€=ź'rŽšŅv‚Ł¢,Ę>»IąW)Øų»AŅnŃoƒ=ĖˆĪO_jČ8æˆz„ >™{ G»!#kgw^µåóėRMpåo–ƒ'hé¶÷:ōa±ƒ‚O ż+Ō“‹1,Ÿg@²Ćqš Šw!Ō“iā–’Š2Bč†7ćüšāt‹?±j †Ż‘·w<~pÜ©-,zŌQZ¼QĆ6Ō,ćTµ ąŠå[fed “ö­LŌź¾ń~—'‡Ģ [¤„£1÷}’śÕņ³ćmGSŌnķ,Ū|-#¬h3 Šh£c«šŽŒn4/u '‚édĘÉ8lóōā¹ķI`MGģ–ūØĆ`äŠ3„Ņõ«ĻŪ“ŚuȎąŒg©ük¾šŠŽxgŸ]1,ņó#ȼ“ž¢³œŗ‰ü]=›\ŻųzLÅŻŗ?šM/Sŗ}mõKŁ?×8GńœÖcågŅśdš5Ɯ]¤kiUr ¼sŠó^wāč­īnͶb |¼ƒĒZåt7QńN³±{×:¾Ō5{½uŽŲD7LrüŸėĢģō8–ĪÖĘŲ[Éf±ŒF~ē„z–K»eHćŽ{azPƒm}`ž žšžā8ŚeÜxéŒõÅx¶©©j:…ó^Ę ©'jŽśŠ £Ļ)C1a7SžĘµ?²„ ēyŒ#=HķWÜĄčü‹CJ’Ž%yāĒŽ^ŲµĀGgsfģnd»¶ā›]Ó. м#©Y^Ł4÷@m|š9Ļ"¼|žżŁ#„•$‘Åf/$±CdĄE“Ē8"ŗ-+³+¼¬dL§Ø g_dŽ 0S«IkÖå‘ÓŒNė: ,0yĪ( c.£ö™ŠÜĒäŗ1Ė5e“ųÆ#yŒ‘¬«‚€÷Ķ5mš;H’óėZžUÅę›5‘·»‹+ć@éšē“.ßżåå{qŒń]¶«£Ż,–ę&*Å{ž‚ƒHK”ę¾ “š8.ć“UóˆÉ.2 sZ}¬ČS÷ (ąžĘƒAŅÄ#™¢`īŽ•Æįż#ÚL·z눿µ‘?;’‡Zi žyqŖE­ÜŻ+H·Ė.Æ~šĻŒ/µ»8’¶`·•įŒF8Įcėīk^R¶P–kČŽķ$c௾kŒ—CŅõkk&W™­€ņ÷‚wźOZr•‚=‘gHŠ“ż/V»Ó¬®N”1łŠĢ~fqųW0ž4×®µ™-^yŃw. 9^zV-—c~Me®-‚Ze˜6ÖśūÕ1į·Gid,óŸJDJ$dH3¹Y©•sNøeœ:œ <Õs26ī5?YCć9ö5hźVAŒƒŠ9™~ĢęZī8Ęõćzøøņ$xĮLœyē֚v3šįŪ“,ėźÆšėķ"žÖy&–BPĖĒJ§32;ĶZ ®ZFY˜óž3P‰­o„{e(!B2cP4‰õ½jĘÕ Óō²gŗ ;aTśWcį¹5ü)=ūC.¤ŖL²•EiÜ,y-ÅĆ[j.Īė5Ųćp^‚©jČņĆiöēS¼–aßÖ“ļģĖIb?Ł…ćƒh$œ}ć]G‡į‡M¹“’P.T ælŸJŹ{ÕÜ^b “Ź2„‡8ĮöÆ'»/'˜ņ.Y[½@leGEŽ=ŖKĚ ½0Gån ĆEXŸ1“r"ņŠüź?ŗ*„”­%š™Dr2óµØfĒI†Fyf‰W$;Õż3Č»ˆ¾ASŠ+’jž}ꇫ[ErÉ^j7÷@ė^3¢Ouń.F|`)Ļ|ŚY:æµµÄϼ¶ŠŻ;Šæ,ØLgQŚłŃ)EivCĆĶĪ85Éj¶÷ŽKd:c°Ŗ†TŅ5Ė­S¶æˆĘņ£C*õŏ[@ó§”ņvĻå+”E„Ķ uŽøą¢]žģVS’oƲf±SńģcZÓ ÓÜ~ķ>å\Üsś ńoXčś& ·[°ä’õé;LšŌ÷‘ß+Cø°łö¬[¶Ś,WywqovŅģEĘ@'Ҙš;? ,Ž‘§hW·iꡎŹøw8ļŽżuŽĆąŪŅ`¶Wži—%‹åæ:i‘ÖĢā¼k”„Ī—żŸoaŗx|­ģøŪϼrO ÉkŲ®7ŗBԚ'†µ=&ūP»žŻķĮżŚnä2v?­wV׋o A, ,g—÷ zŪVy%¹·Š&@U‚’:Wš–·įbåķH¬fA‹€w¶i%`ā=NŹę¶j!¹X(ä-†R}?*ņ-䊶SsÄ,Œ§ī§?J`}ĒążŽėJ¶µdžŽēo˜»‡ŽĻ_ėQßééĪD³™U$,W9ĘhÖž-o Z^ė2Ēs=Ü*ZŽ8›®=GzņĖß§ˆü˹DG# Ćīę€ ŗ±°dŒĒwČ[fĘ>µŃi—ģņ ·ŽTLŗyi’3źh“¬čv_f_¶,Bå×>X8÷¬‹²ŽeóŠW·÷iŠē¦źVń6‘V}žœÖā=Ą§7 ŌšŻ—Sµ¼Ńģtć¦Ū+[Ɩ›}I÷ ždqz÷†4+ė(^ņŚŚ{¾„x ō<{WĖ’>ڶ›{ØO«›$Ųfƒg%qœ=ĒzEEŸĶ©g}rśÜĻvć ¤’OÖ©1O-ŻYį^˜Qš TkI¾–ęõ-U^y–'”W[y©Ž-ÜvHńŹceł,ÜzQc2_ ųgS× ƒūLķ ÷óÖ^;ē„v>²ŅWžv(R“ķ}ŪH’Er—CcYŃ_Åwįs#³lY#ö9ąÅkĻ/<žÖĀė͚īQ˔ܫėŪ­D¢ˆčC»ŗ†V/0‰Ės׏äkÓ¬57Ń”¼ž5‰˜Ū˜d(#Øō5Ļ(vąś©Ō5$²ŽīŽåaķYvžµCędŽyŻŽžÕb:mSŌ“¤[…Żō,ZōčüI¬ų†ŽŁ.töŅÆ^}„ø2{ ­# v·Ķ—„Ń“ķJo¤^B+€y£šāøā+yŚį]Õ.XnHO ģ*Ұš ŠĶśĖÜł‹‘Ÿ›‘œšēõ=^='ģI ģ¹ŻŗQ·?.{S'˜–[(µ=F=Rͧ¹•WåĖ`.x<Óžė—Ԛ×?m]åēwĻ­}[gįĶ+į§…—L½{‹-[ĖĀOŹG¹¤%vxgˆ„ÅėcƒŌ5)¦h®oÖ8BĒ™ ālņŪųŖXnį‚ęŠ81+Œ‚;‚*Ķn6o&Æ«Ļ8²‰„i<ä óŅ­x“Ćŗå·‰ķ,—Mµµ‡ÉRYAaŌėM‰³zĢŧ1-µ„Ļfŗ+?N¶’'“ś?ÕIŠżkšQčJó<ėUŃl“©c¼‡cŻĪLŽŠs°“Ņ“NÓµõke‘“É$+©õŖŠ)3/ĘŚ÷†ēÕōčc[ż\RćŒõĖü>Mā–ŌuōmfĪ(Ā,w?pśńų ¹K±·2>–ŌIÕfF“Ņ“ū&³¦ćµc7‡Ä³[<0Mpˆź|øĘKœÖN©—céqģ>xsMńWtém4ÉT“IžGZšHķlž2źĖń,[ݤ~PŽÜĪpŃÄNqųPŖ˜É2}@š£8¶Ō“›Ō!ĮIŲ«Ų;ūšÄÓ|Ec5‹ &x£µfŚUF7•jlČ­«iSjV“,s»Nī{WŽh>(¼š~±6•5£ÜĄĶņĶŽH ŒŌłĶa6p~4ŌÆŁ™Æ${tš\īa“•ĻJś7ą‡ōėµ{qż#RµÓ.D°Ąė½äqžēåõ9-F’P·6‚\dŒnZ¹d¢ey­bh!#ō2%sVÕóu2M»ę €ÜŠŃńÅō0LĶ;@Įō¬d†ŸC#ĀZzŪų›MæÕ.Ķžžųlå”÷ü+Ž/µ]:qsNd³™ ߁Ēœ£sh#Ćo¼g>ž9]-RO“kzføė‰“R•§…wI;{ŃŲŁDu¤ Zx‰l¦u.›mlģŠŽĢ76HÉcŽoŌ—”•Æų£_Ņ!µN“øšV%w.C(Ē­y‚|aiā2ó^]J}>āFJļ¼*ē8ĒlWW-NĖįø¤“Yt‹ė!3fEu9$vÜ ńōŖ³éšj֗²ƒØ(ł˜¦Aē fҾ¤Å”ž&kz¦ƒį}/Ćz]¼Ė#2̐’¬0=+Ė|ą'Ó'TŌZC+ džqĻēPĶ }¦źæk³iš•ņšWӁż+Ļļ“©õDĀŻŹwŗU…£Ciz™38Hv –nøż f’aKöõ‹w#vsÅdi –;½?Ęŗ§„”›NÓ »Ų‡3»?ZĀæń'sfŃČ øyaxļČü©EXŻU±ޓѮEiq2ĢvćČRF7:ķt}nĆĆŚ%¾‹ y<nƒ{{ Žč«rķž£kmg¦Éf;·UĻē^I©‹}^ęk„·>^p6’k”Ió—B垃¢iV*\“ŅąČQ“Šó›BŽmQ–AåÆl¶GåS)#–q¹ėvWŠiśzO;G! ļc°Ø“ˆ>"ŗUҌ‹nhČĮ=æ„Ń jt²A)’C$2ĒŻü+ĶõĮu{†DPsŽ6ŌŹ6.+¹Ķé—r곫;ˆ6ä)?ÄkÓm<5~š=üɱX<ĒČuõQYŹ+r„½4ń-„Ł»FØĄēq‡„UƒÄŁ,vļpļŒäu51ܞS­°ń”Ū*ąc8ēi­Æ@C]Ąå±Ö“&Ē3uā›o-ćĀłØpqŅ»Ķ3O:µ­ŻėZ¼ŠŃä`ZІń]Ō‹]įļ­/v֓ p>źõö±ŸHųķš"āPšj®Žm ’–É*OēśW‹ÄŹo^‡Ń)&®ŖąŒß“ģŸž2Ż~Īž8½ü ā ±b’¾ZŽēщč½RZ¦€ŚN·y4eŚ$bbń½{ʽēܼōĆ ūoEužlĶ ķŽ£ŸšņÆķeš‹Jń‡u;ĖĖA>•zi&L±·^?ĻJØ;UHjæ·ģą’¾5x»ĮPŖĮ¢ŚŻżŗĒs&ÖPvżį_^ZO”%Tvē­jrŹ=JvŅ xV-˜rÄć<-]YćźÜ3ē®zPf_‚µOo*ǹ³’x&¦ŠįKOĀĪ3@¼ąyH¹Ćm<Ö>Sƒd2ś÷«“66-Zź§* Øę½’ą7ĘMözųµšŪćƒīīōÆišœr“°±ēē‰×” 2)Ż\줕ģĻōŸų ńƒ@ż¦~ xāē‡īmn-µ>!z"`M½Š_™_Qų{Šģõ{)R%ERŪN õĶ5©‰į_t'ŸFÕ4˜ćŠhīcÜū¬9ćłWåÆÅ I¬Ųjuõœ’¤°µ½ŹÆŗß˜šĘŽk3łcż»¾ßü7ų‰e­M‘cy¬¤łąž9Ɓ®ģŅ)AVč8ĶuGbd“3Æķƒ;،d:ÕK-?䛬 ®ā_JŚ2Šäšč[ū$Ø£#©8ėÅE"Eo ʅ"ÉŻ÷y&“Øs•Ģ»‚ˆ²ĆZ·u”ó˜,ź@ dSö†°džSDQƒ6@éėļV–ā6dR7g*®wÓf¬\¼Oä–dĘæ_jž”?ą’“õ—‹¼'mą{\’ŠƒE·h$1Ws䓞§8¢Hė‰żW|*ńƒx›ĆśmÅŌĶż³+ī’āģ¬;ōĄÆZ•^~÷õĆR cĢ>;|#Ń?hƃ~4ų=ā KižŻe+érČ2mīĀ’„N9ēš#½›ķQš{ųoĒoų#V“Ō{{³¦Ü,$9߃ÓÆć\Ŗ–„ž9¬xźöM>ęŅ+łā™•T…ļ_ĄQšßHžŃÕMŻÄeó”s’­ģ*«ö7ˆ Õ/ü1vš~¢`Ō$Ž6 eT_=iž$Ō|āó-”½V#dĪ'Jā…й3#UńåóėkF(50ß.ŠWx%!_¢’|aŒ¼5c©i‘’¢Ā9É8p9üs^Ö—,lqWÕÜö S ŠĻ¶9 ü§#Œ{×a}."A$p`™bĆ7µu¤ś2Cw{Ū'HĶĪÕī*ļ„ü+ØÅØ[ź÷¶Ņ%¾AGĮĮĒ\¤¬ģ=[[×ō;GŌm µ „taĻQ_;§Ś]īµ(€]ĢxQŒŠŅ-‘(–ģ¤I0˜· żć]χl'øø…ÆmŻ!#Õ¬eddŃŪj ŸåøV†Ž˜¬{ZĶģRxYē;HĒAG8XÄ»¾»¹¶`¦_³ ĒĖÓšäµ Ö;æĮi™ŽąNp*ĖFQƒ.ŠxØdŗ»[ÅA˜u¤4Ž­uM:ŁŽćgļH]Å~éĒéZ:U¶Ÿõ„ņ±p­¹”¼(+‘—|K=¤šģŠ,‰fäМķö©!µ·»Š5ņ9 AéZAćcYŃćø\D”vżßž½aéZĶ+Z”YŃų8-h#øA‡V;9Ō¢'ˁüŖi|O§‹ĖhcŽāHĘEĮĻ„±ĻK§Ćöq3džż+ķĘ)„DFXŒśŠdįŲæ§ŚĶ<Ņ™eæUēļVńŅ XѶÆĖß½\(»”ų{B‚õ®.Ģ_gåcҽ\»ž9ÓDŽq„Ü'o±­Mlxż½ćłŹ—«ƒ›µ\Ō4n-SQ7 ģ䄹ĒŅ‚fŽ='¹Ņn#Ž@Ŗ»ˆ®źĻTšęŃĢ ŪH*īh1HÉ[ ć¾ģ”E?($ōŖj7š{¦8ēM’9n1Yū1©v:…ńw٧‚XC!fw®×O×&ø•Ā?|śŠV¶Å\ļōŪ lÆõ.ÕŹi\šĄTé_*k«¢kŗÉŌō«qoh¬vqŠŽ§ž}kH°±Ņčń!ĶʚƠ5„ØYÅhń+1c@ķZFV܇ɵ/K§H¬š¹ŚŽĆŽ»æ Ś|…n$Äc•ĮéMĢž@Ō`ņīš9xĪÖļWō©ķŅU·l)f=8¬Ī˜ģz'•ioø‚+ŲõĶayo$­$9‰”’qYɲ‹z¤³M£IļŻJ“޼õęx>Ļov*E$zW‡ü; Gä²ņŁ^›m‡ƒ“;ßÅ=›ä;˜Ž„UEtõ­oÄw–'[†Ä¦–Ņ4džLgÆAķX‘jIrpÄpz$;@ü9ńÜ6^Õ<)ØĆkĶr·ČWę^ÄŸJķµ >×Fµ³ÕÜŚNޤås˜¾¹©ē^§œė>5Ņõ{H.į•~é;W›Ć>„nÓHį9GQŚ—“'‘ėŽ&Õ.4»mżÖKc卣vIłŗ×‘-9TWTÜ@Ē~h»ŽčŠM§ ’ čżšÖāā-QļnŽG€3Ē„i+–tyWŚ‚ŗ¬ØźT~čŖ×šFæXé!×¹”«`\šĀė6KÆ[EuhŁ@mĆó®ßŐXŪXǤé!;Uˆū°lŽ6±įW“µp·qØäøąW3’ä°ßĆ}bĢ–ń‚x’œŌn;"żĒе[6{k8āV‘gƒķTÆ'ÕoZ-CW¤›nĄrrŖHfͧŒÆ®tčü;©“RŪ üČ]FYxĒ&®ŻßŲÅk}h¶·I坒/O©ŖhĪRčyÜSŪÅ-¤Ļy”å ­};aā 7^šķ«Hķd†¬Č0Žēޤ”5Õfæ¹Õ-”ŠFU9ېJÕ§°}Rž7¤Ę66CB‡KyįĶ|;;1ßŖ+ŒcėłV‹“Kž-1d‘dT88ČĻÖ¢R5äFkųŠéÖå&¹.¬NÜӚe¼²vß±•N0;Öm•cĖ.›PņÜDƒ€A˵č:\ŚŽ„į­CKžo*)T»1'<ņĪµ‰?ƒģõ|= ¶„$.ˆOĢxŚ=?*ž‰ā[ äŌ-2Å$dØŽ:HČö8¦ĢŌ{˜W׋%ĢMĪČŁśž5·āķjśš”Ļt£ Čėߊō„ĖÜŁ#Ļ¢šFrŗ#ÕlĖ]»A(óT€sČĘy®ÄjæŁv0Ćo«”Ā[™>"ń$_`’XäY% ““׍_ų™ļ”…6—„6BśzŅ”KKRö™öt½V<°v•<×¢ŚŁ½ż“źQĢ<į@ļN+7œĒ‰’µ!Ņ.¬¦…§.įāpŚčk‹Ņn&Ó-ÄŹņŪJ¤įT௽j¼ų W½Š&½Õī¼ļ7īy žzÅŻÓĒŁDn² dņ4į>:Ń>Ų‹oqrĪ’c;W<ŌÓtß YŲļAb6Ž1ŌŌņ«Źo1ØA“śSīōD¼Ņ¦šiöž@÷¬ŻŗE™–ö6‹§-–ÕŒŒØĮÅ&±”„Ɔ//’h!+"ØÉłÜš“CŹmėĪżé'žrz ģü<®Ś¬ZJŒīP=Ø3ęŌķæį+Ń“ÉVŚš«†#p\}³\Tž§®ÜĶmdŻ’¼ķĻ­im rģzŒńéÅ#ø˜‡‡nя\W#{gwycr±;y Ö„.„ž]·v×^dnóGŠ®s]šĻh–°¶ņ$¼„t¦œkt¶7ŅLēl2Ɂַ¼/>ƒ ݬŚöž÷¶Qƒ¾%“in9śā‰ 9ki|ėĖäTgI$"0¼yk^“¤Å-µ›uEĘÜā¤AóHūČG$V틤ųŽ'p}¾“€Ģ×ÕģȲÉ1Aō¬“Ži"dŚŽpG=ĮF¦Ś‰ ˜ŽqŽOzܟEµž.fŚ= ‡ŖŪjHÆ[Mä£c8ė\ޟkh³Ė-Ü,ŹĒ-øcš LļtłE¢ ķąxķ˜•S·ƒķšģ“LšśÖ/³˜ŻCu*3A*&ÜŚ`‚Ńf‘YAčs\–„ÆŪŁ@`Žv󷌊PŃŲŠ‹Z±A(˜”ŽÄלų‚x`˜…‘n„ČRW¹=k9E#CŌ4Ķ}mMĶåµÉŅZB‘JßtœgĪ²ģ¢XPDfņ¬Ąģ48Æ·,£uĄĪkŌķ]ü+¤¾±:«H[‘·”ķš¢y¾æńOVŌµ+Rų}¢f>UĮĄąp? ļF–K÷tI“éT˜¬ej[¬e7+ĘĒ€Ä­cźž$±¾vŽɕxÜ{VČBŽf¶™ci_9#ę9Ą«p]jrŁ+H°ŚDĮ»®8ĒéXšĮu75u·6iŚ{¢F„+mčErÖz*įeP\Æ8ĒśŅ.ē^ĘßUÓ×Ė”Ć®HÜ ē^Ś÷ūx 4ń6ž~j o©ėš+¤QƝfTtŖÓߌŲī‰AWo¼õāKĒ»ŸOk ˜V ß¼\ē€zWCw®lŒ}”¤s‚Ę”8 v{~óI2ŽN°O" Źź…Ÿ…žĻžg;.ą6żŚv%Č„§h%ļRkµQn}ėkP›Kµ“¼³“d“±\?µZ##OĮ7^mµĶ”Š*Ćø(ŚzńZŚ·† Žėū]ķL–įG©”‡Yš{ BÖ=8@Œ¬IN9CŽæ„s—Ž]2Ō'{W@ųĄ8?•fly׉#kš5“·0™ÅnxH$–Æepź²ņŹŁéŽŌŠĻcq:­½“©n~nõŌčÖqŁ$V·ŅyhĒ—<ŒŠgknAŖųfō»×x]ķ³”æņÆ-“Ō!B+{©eaĮ<œP)KKÓjLó­ķō*šws]^ā{hcū=Įˆ£ õz…„ŲÉ{=­”Š^Jń”ƒĄĪ2{õØ#¾Ó®uįšdó£Ąaž¦3‘ń…žŸø`QaaU³Įķ\MĢvpŲ¬°•†ĻńR+™˜ićN½g}÷ē ¤œmĖCuk$Ø÷3m\ ¼óėUĒ#æ_Xų†ŪK¹^ŽįH‘°Ųó<ƒ]±ą<’fõ‘m©ŗŪź$*sŒē•§!q<­ I ²†źOZµcĻ€ęī;ŗ;UŃ„Ō"6ęäBądgų½…KįļŽßj֋©Mök(ŸpĀg‘Šę˜£é&› “@«wēÄN<Ā1ŠŹŌ5-'_)–č#ćrž)̽Rxu8L^^Å dē&øMq”[I7lܧӭ ™ž¶°k„¹»”¢øģ+¤ńNÆdˆF‰ÕTĘC’ŌŽŚÖęö¼” „²BžE_ø²{;C5³3†#xĒ&ƒHœ„ǜm„“ž†½CŌ'’É¢Iāp2}j¢ŒŁ^ėH„[ØÓ~ćÅE:Ax‘Ć4›'r—D"Hb[XjõŪŠŹŽīF$"ĒoJĢ ę·wАĮ(8kÉ5Ø¢ye$ėHv;4³Kd·ĖsśT:Ü«ŗÜv·'ūʁäŗćöģÅFqT4­R$ÕD€6Ģķ,GŽ4ģ:)7–ž`q6ƒT<§Ż_=øÓPĆ,,7eĢ½(ĪõkĖ­3L×JT°ŚĪ3ŠŅxJ [«¹cŻrl+ŠźM_’„rģ„Ō.Ö xŸ8#9lT Å#ʱ³”čqL cӑܳ);ˆćŠÕME ŒĶhŒœ)ČäP‘]ÄŚv„ “/pŲ#Æ=kŃ¢Õäø’)­L±„\`óŪ„ +ŻźJŅ$³"®[h÷­«XŅā!)ŚtśPm”Š&“oe§Ļ{,v÷2±ÉĄl^+ą/ˆśg›«Ģ—Ķps łw«ĻÅžĒšīīl­-/äRŹv§9f÷5ÜüFšģ>'°²ŸLµKhā ’ą’­p>÷±éłP+4x—YÕ¾źšZŁ9ŠšĘŅ8#ĖčAś×„|.ńĪæ©Å>„ŖBl­ŽFDŻü@’Z ä;m^žćRœ*‘ó“Tt/ Ŗźj7i$ģŹbėŽ” +üz˧Ļ­ø/•ćµŌļ,ķŚł\Hxl®2hŪGįȗpH‡$œ óßiö–W1%„äW±}āŪH*OlPOhÖśŸ‰¬#Ō­!ŗÓ×.w’ v?‡ZŸāG„4i/ą]Pˆź*CH¬”°ć  <#㋽ķv~!œ Š_3īŲ‚?Īk¦ńG,m4ż*žĀŹžöŽī?0ŗ¦BņFī;q@„®¦ŗŗÉ±Ć£ óĀ©fĢö·8LbŸzćmeŗ¶ÖllŽĘKūY&ÜĢ޹5Žx—Ä:Ŝ „i‹é²¹Ž2tĻłļ@ģM©^HĻ%ā^$J7HO'ėÅqž#Öõ¹$>‰§¤—E–A$ ģUļ’9ķ@X÷QLJlcž`Ō fR¤ā·mõ‹]:žH¹Ü¤œcރ+qsā x‰oU”¬f-¹Č<śt¬½nŌaž;ŁÖ8åKp{A¬Qš>£ąZ’\ń)¹1 ß5…‚2ß š8éXŗ6q”^=†±£››ÖŒ–Œ '?wéM#”#O ¾‡xś%¹nķZ°jÖÖV’n@$ø mćéHŹK©ƒŒµŸń‚ęhōū ¬‰²˜Ÿšbą’3ĪEKZ™IzŽŹŽīó·¦d}ÓZ)ÖęĘ?“jķҲ°Ž7RŠļm­żžiŪ;WhūÕ©©±Ń-ÅŻø/»d`u$ćÕ(±ņ³Šōæ éO¤>« ¬71©*$ū̽ńśW7„ųž?źPé¾Ó|»e#Nķ… ÓjŌø®ē™ų×MÕGÄėļYĻ ÕĢ#lóÄÅ£-Ų[ŅŁæ‡/ōųÆln/u‡W qėAœ¢uZ}Ģ·6×+,FĘlŖæFÓĆz¦”q-Õܒ%°į„ĘU(2öf¾‡ŗgmu.§4ŒB¼‡‚}G ÆOÓ-Æ¢ø·’PßjīJ–‘_Å^&Ó“ĻiŽŌgKkĖ”®2§\tė^c“6“-ާ¬H¤d0ʧaČ`p ¢1ŠøČņ?Ś›ąO‹5_č~+šÅĢW7֖ŠÉ&KHĮ'޲|-ą­"ÖŅmU·¹’?(‰ ¦VFōśUĻsŻ<5įųwC·Št‹;x4įūֈØcךęØų·RŠķ–h"øŠ×pT¶?j™ģ -Ÿ!ŲxŗxĀūQ³®˜HYA<)Ę8¬ßxĒ_ńN“÷ŗÅĢ_el• Žõ¬M”Mœ¤—m<ö®NŽÄTś]·öŤāęe·ćåcךk̇­éž†-2ĒŁä¶@Čōæaąd¼²7¶w»­×…PÖéXĪR8©å’ŹųŚĢʌŒTŌ~Š‹ ٤7€»InƒŚƒļ¢=#į¾¶¾ Dø¹?jņƒ÷d>µĒYųŪÄ~,ń^”Ø_Ļ¼›ĀĄ"0=Eg'©Q‡SU³™õeÖ¶mć8]ƅś ĀŅ./.•į,ų”¤ųwR—1ܝI£$6 Ų §Øš~„cŖŻ¤śmĄ&\aŗ”®šxnņÖ\Ʋ¶灟„G#/C[Gš—ņ\\Ķ4w­Ģ|»F+6_ŚčŚŃKĀVévĢ»īƒŪŠŅ1°¹NwĒŗÄ^#’īŒåBš>•äś'Ū>ß,®«H9 Ų沩”C±Ļn%‡Ló#˜ ĪžćÕkč?…w“Ųhé&®„xĢ$%6‘ŽŲW)qæS¼ų«ć„ń·sį©žÄšK‚ Ė&ŃŪ=? ó*šé¶ŗV‡ ¼Ū2¤f y‘‡@1ō­#ć9ßZMsŖĻēšŹ[óükĘu›)āƒL•`¶$€t=ė@hīü+ā?Kū :Ū»³øS½r”{׎ų»Yø>/uŅ’tøīŻ¢—• TmŌ#LŁŗšTŸtB¾r¦”Ø0'+’I’>µī×6Sx_ĆpipO${”EĪBŒvühę[ RŅNJŁų?Ä^(ŌN›imrŸ½½Ä¼ ½ŲÖ¾ —į-ž‚ŗLö֓łqcĢS»ĶoST¬/dO£ü!¼šÖ— ÜŃiŅ̤HŽāŒ‚}8¬OéZųŸbˆóV`ƒ4I-ÉtĻ+Ōō.-I0øw¹~\öéŠćõMQtK‡Ņ!IšPLn1Ļ”5„ßC)G”×Xč?bKNöhbi—ĶʾJśƒ].Ƭiŗ†‰­ŗÅ<Š»eŌ`ž˜ĶBÉüWŖĮāH%øŒ}ž9Ē÷‘¹ 9L–óōłßÄZ³[ß]39·ŒüĢ?Åé’Ö©µÆˆśt:̳ŲŪłé—NŒ}Õ<—(ńŻ#ćž±cm{f…§Ó&bĖ VŒŌZ'Å][MRĪ¢ēĪfo¼FĮŪńÅW%Šęfŗx²-nå.–8’iĢ3š÷oų«GÓ-­ģŚm„ą¶ÓĮ’hÖS}źōÖö7jghཌ‘[9 œs\Ä·šl³4rIų Ÿŗk2[-ÜE¤M“ž[¦Cµw}ęĒ­y·Ćo_šļļN«ioqaęGxšŗsüčcsڵųZęßQ»žņķ< qĪäƦ+Ē4ˆś®æ«¶‡Ŗi°ĆcĖ•XnP¹ćZ}Ė3Óļ¾Émfę$`Żxā¼žĀīhīn%K†m„Ą óG;4±ŅkÖ"ĻKÓ"ł ”³Åbų~śĖ\"Pƒģɂūv)8ĶO1œ¢¬tŗŸ†mĀ-֛q9¶É`Ī |¾•ä:Ü×M|¶¶önaIžõq‘™Ļ/U}BķåU“ĮŽ”yϹ®«OŃī䕢2Ę!vW“ļC™Q•“;+M““˲É*6Ō.8"± ńÖ°š†Æ žØ…Žo<īF8 ½jšp1P¹ō\–GuńsHæų/ń?Gųµą;ŁMK“¹†P2  qӏå_Ł?ģĖūDų{öžż˜< ńJŌ£øÖ­ ŽĻS€øgĄĮ އ8üėŻ§+Å# ›h{ĒĆĶnćDń.³¹µ˜š/įRsĻןҾŖ×<=¤ųHŸOŌ—Ķ“š6ł‡%NüqTyõ|å›ž Ėū*ų‹Ēz5÷Š|?”GŖk^³’Y“™f“ROÕ¶äqé_ÉæŠm ā–æĶĪŚ3ņž„sӐEkŠāš8É#Ś Jļ'ļ«ō§G䥮W2~šĮoz³¶·ˆådv:qŅ“#Ԉi8A»óŻŪR®„«„¬Œ ³€c95Ļ­Źłķ·*łČŖŠ5§=†§ņÄ[ĘÜg-Ž kYO āŖe&`ÅyToļR¹Ż ŸŌ’ü»ūoßčŽ6ńĻģ‰ń Stķe[PŠe•6G dPO|+ t×õ±ŖŲÉĶ ŠXŲ¤€ž5•NåĶŻŻžCā+ķKLH2R¾#ų”įĖ{9Žé`Š®A‚~9ßŪśW5ģĪi.‡ć_ķÕš^ÓāoĆżBŽīŅS«ŚBa†XŠˆ9SÓ®kłUÕōżOI×u½#STi,ī^ß ķ“õe=+¢“ŅĀņ0ݶŒą™9'æ•ZŚ}±¹3́łŚŗ‰ÉP-vąJäš#“ß8w‘rĒvōö”Eœ­ ‘<“ ‘g€ĆµB‡ĖNęe†ćŸ­ ,pC!Žy_Ī38HĒF<ÕČ'ŹČ!-×ĶikōhäVņ;ö"¾’ż’¾7ßžĻ’ü7ć>{EŃī®ŅĒWŽēs£ĀĒ®;c={U4vĮŸß_ģéń 5+-XūD.ķ`IvĢ$2:÷Ę1ųŠżÓnÅ͹·øy°äö‡µrU4RčIbĶ č(NQÖHÉģAĶ6ßšpOģ;'ˆ¼ßµĆ[,„ū+Å«Ā(ӒöqžF~•É)kq#ųŠś}ĮŁuŖJAłwc>•ķæ ļ,“øžĪ„™ņArwk ņvŠÕ^hv¶ŚŽŸqöXāįA叟å_x©'® Ó«@Ė!Œļ\0Įżk’”½ā„.‡šź±c˚"ß.IĒļß³‡ÄŪĶ#W¹ŅoīŃÜłqŪž¼1ļ^ķ7„ŽI¤z-åĄŪ(d’Łˆ9Ēé]MĘ¦ŅĄ"ŚŁP?kX晙a©Ü n *5`U€ēé^•£k—wVļn_lkņ©ō¢ś™¦6ā[ ™ī!ԂϽHĻ©*­–Ÿiדrą<ü§œŃ2ķ”Ž— Zź2Oä¼×č¹=ŖĘ½ŖÜ]]ŚĶd†ŃK+žŸžŗ¢HŪ½ĶŻ­ sūϻךÉÕ浊“čeDiĖH§sC2fw…uoķ}FāÖęĶ>ĘÄ,{O$÷ȬĻhśŽ”·wPø“Lß·åÉ‚lpqĶp†õ®ęĆDū]•üŠ@Vč1APÜ£¬xjÕį2y§+‚PŽāŖŚ¼hŪ_ŌŅ5rF՝„ĀŪŪ-ä.),ŒßĘ?Īk»Ó-’Ö&‚VÜ?xzā¶Hűš¦Ž†ąEhūć* ćՈ4iōČJĖ{˜ƒ¹G$S#w–Æā JÖŹ ŽÅöaČÆ>ńWŲ|9āiōˆ$˜±ŗU_•²q‘łP4īz5¤2ZŪĢ„¤· $rkÖ4ėµ7{F–•³“õ¦ŚŒŠŃ„W7ĖjźægĪŅzWY«iŽŚ|°ĄC)ī8 SŒ€ę#±ó6Zg/čMztiō›ÓoīŽ÷%ž2ć:Š»Ęų«Ć—‰%Åé­ååGOjó„Ō.mģ›Ł”qĄ²ÅycŽĮ² ®ÆĆńż‚i# %Ś `ō9ö­Ln •„\G,Ž\,»k‚:¤wŠÜZ<[?ČÜtĶ'"/­‚8ągHݲĄ†ŲÆPŃod—̀¬Y@SŽ”®™G hntĖ4ūē„Hہf{ óĶCĮĮ~Š-¤P„’Š£U„Фūœ„„Ģŗ-¬†ī1±˜p¹ķ'SÕo®īŽČ ķ·2īm>„S°—™Ō5¦”q FE«ūĄG­eXĶ47S[((LŠ nƼ—v÷¢y ĢłėšŁšŻœ÷÷‡"I[†ŪŁE!sßm¦Iö•Ł5ąŽøÉļöŹ 1ZLøĖ±—yuz•tXsČaŌzUIōÜė$~ŖsĄ¬¹FäM«so`śl·2̲–Ī6ż+µÕõW“ųNšq‚āw’L/ļ.ćõ÷¤lĪĮ^)ŸO±Õ4¹-¢ŗŠ^©'88#?Qš‹PÕ<‹O±[|ŒÄŗ§ĢG\Aqv9¹uŃopeŒś~¹©üGÖuøŅīńU‰x8Ī„ĘęŽG7§éś­ōņ5„9^IĒ&ŗ=6āžĻRX5:#0P®:ż(P2“=g_Ót›:  ³Ż>ŃĘ9Ę+ÅLŽ+÷øuh¢ČP t9¦G”ŁŽé“µ‹}Žā9.¹ ‘Į®tĮt» ÜE9 xā®.ĘN,§5½Œ:¤(ó.…ä×^¶0č–> (™[oXń­$ō.į¬õżBԃm{"[ī'h8½×ÄRźcynäP˜Ą-Ą¬:£±ƒā­Bę[Ų9³ޟmŚjØ4WEQ:ē"³‡a”“ųōū›»IīŠ*#fŗ?Įk{ao5ŗ*$}qĄ9­¢D„Ѥi1Mxdü§>  ź®dKxībBŸ0Ćdsj©Eʞ'ømcwó^—ą» ‹7øŅär‹0k ćœÖe&vxjé/ī P.#GłYz`WKe„ZŲN.%EcŸ§4”t°ÜĢAnÖSæ˜-āQ–ĒFÆ’ Ķa˜änź=ź\KēE »‰b,k;ī)éļ]%ž„oœĘā-å£ćU©G±FV«É©\MŪ’ØĶĆ wÆV±²ŠóE•­įŪČ$`äœb“‘ńM¤śFœ­łŖŲS· Ļzņ[6ŗ³‘¶Ć7'44LKĖåŪ…Ź„žéĮ5ėŽ¾µńŸmjÉŗFŲw‘üč)5dŃnŒ³w9Ćc­u^ šm$[(ųłNܕ4 ż ֟­eoĘ师ļ`7VDO— v°©huķS)XŹ[œ¦±ØGі1DqŌŌR^>£ˆĖ•ĘļN.ä”īt‹‰ZuVŹŪ–9ź?ƹ¦Ņ('ŒĀĄēäĻj”ݘQ]ŻéēcŻ†Įz懼I6.²Å'–‘Ž„cŸ­D„m a±źśRé:¼fęü4ö›KmQČć„x®§4ź^]éėioę˜Ń`0ćé9”v0ŁZ­­«­Ō.såē+©ÓüN—>d‘× ¬ Z\ąnk‘iŅI$¦0ŖŲĘO+ķ\~„©@-|øT„^ģisĀ}­Ų¼ŽŪ²x t«zf½yš[„ó¬åwsPT]Š2Ō.-WN½Ņ§p²ó# ÷H÷ü+š‹XŌ5[·øfh|ĄĶĒR(-ϱ~ÄŠ³wRCž¬^¶ž+y¼Ėe1MĪNzӊ29ĶKOŸRÕź)ˆ‰G)ZŚMœöIr”² “Ž3[Ų —śżÓX[Į$%‹?ąęŗ]æ–Ų[4~TMņć~µ›ŃźTWC_þ²¾¹žęņb™$.O¦Ōü+§Z°ł‹l«‘ĒćJźÖ4“NjśŅ+ųdµ™VC»†ĻŻśWžźžŌ­ž6“‘n[x €ćåĻ'?JQ·R%n‡Q…¬{nEÉ$gšĀ×u+ė—³žū «øŁ€Ą fž‰™Kc¢ÓŹĀ:Č c­[—QŽŽyĖwäc­KģVµšßˆ¼A<·p~žwæ×­j®…ŖiņʓZLŠŹ@8ČŌKEŪxgӘ%Īy­2ļĻ,Ī†#Æ,zVfsšxŖÖóSæÓīh&Œ•ń†÷'ˆ“S§čķw}ŪļQ4/Ą¾ŌķŌ|ŏ|Axō GĆ7š=ż³±–ŽF\4gĪļéShšõÕ­śFĄF®:R±jG»Éu§jZmŗŹßaŻŽ•ę:§‡4‰7É<ńZʤx¤;«œÅƇāK««ĖW7 ·r:ʉqom<Ķe6p[jŒ“RāQėZ7€»šå,ou‹˜'{g™]ÉÄOƒÓПZłĆJÓĢNÖ2IēÜ+÷ē%ˆ8Ķb3Śü?±…cŲžf1Źō5æām6ūľ¹Ņ•žĻ6å‘J(LØčχĮšž’PbżĘźÓłTm­jķ<®××-.Ż”0҆.U}Fy]¢˜2·N}jÄZE­­Ė\\‰ ‘ĪqN;‘$ŽŸL׬l ·Šf\n8öĶu:‡4Ū}\jPŽA-ÄįfpŸ/ż’;ŲĢÖń>”ĀM °Å“€@ƞ¼A+Ųj!-¤| Ə¼(h ā9.Ķz<Åpun¢²«“Ē  ø¬ćņ/Ėc¢Ķ:øÜĆ,ėY:%ŻĶģóŁŪ”TĮē·Ņ£„iV±[°ŚĶ8ąØķļMÕ4„ŠÜ]T Œ“Ž€vyĀŅĢH„?&ø’ź6šŽµäé¬Ń«&•ŗ›)–§įf±·¶©ņ3J£ßæŌšč¼9¤GgøŗgyW,7’h±2ŸcJćWV½[o)†Oz»zß"¢t\sīkH£3Ÿó·b"Æ$Ž•Į¾— Ö¢Ķę3Ć›¹=żč“Õ|2–†vŠżāØ$tÆBæŽ{‹E·Ųģ¬8ĒjČÖ>d:G†­lŚŽņį¦Ż…Ļ„sž-šĒ‰nüOste¶>•Cn‹ĢOžēø ³ŠŌ4ŶÓī“©8å”ŽŸJó cżØ•øŸk 稠^±·–©wŒfŪ€=s]$<ŸŲö²jNĢßx©ēZ ęĆfč²]¶ŽHŚ3Ķx‡a¶žŠyÄA¦ēq<3A¬Ž\čńé¤ÜæŻ(}ģpķ’MKkXNƳ9sA¤`nX6±rB‹›ŲQF‡+Ē ®‚ļQ“L1O%ŁpŁ$–Ē­r—®µ›-SEø†ģłRŒ*ŒąŸq\W³Iū‰ I·”ķ@4Aöõ5’EUs‘Ā¤Ņl“Fcq{+ŚĀœw!ģz„u›†Õ!q‚B’ ē’×Z6æ u-}õ[yo®JČd’O6O‘Wž8ķŲVå¤x–µš’Yš®æoi:Jܲ®0x•z$Ÿ µĶZŹ;ķ?Uˆ[DĮåPA.;÷Ķ gCm¦ĶšÅ}m„ēœWweod’%‰Bģå›%~µƒ]€ē’I—td<½\ņÜĶŖDŖLvŽ`,@ėģ)čZ;*LbDh׃ČĘkÅ1Ī—+u${ÕO ķ@­Ü±cuĶ³D2›pŹF0høÓ )*ĀĘHõ4 #м“x„(Ų‘zü½ė¤ŠtŌ¹ŽiÕ+«żģŠeg”¼hņK<±7Fz×Jž":}“Ły $™Īó÷‡Ņ€‡ž{Ya[Wv2ēęź r‘Ąŗ]ņęq½ĆļĖ7 ʐ™ŽÜ6›§XM;܇ty0jšżSYžŌÕß0ŪŁ±pzPDc©³’éhžeĀL§Y[#[ŖÜIó“–Ę@=h4-Į,6owfÕr 1č+BK§6É”]ēpER¹ü#RĪĀń£2Ū·9ō®›MšōöÖs\/—8ŚØĆZdĻ%µü67I~zõö«M t‚õäW`ŁĮ?„ 4 ū“YžA=Ü»¶Ž0ƒ·ćÖ¹Xō»[v»–źIČąGņõoz«}¦A=Äv’ĘóīSŽ0=ė^M2ĀĶ-£epœ Rģ;ō>‘*ĘmäŽdLĀ¹MN6øt³@7>0źhjČGjšĻm+@ćrsļW“ Hb&„qūŠß(µHµ£_ĮfČÄAČ$ójŅ“Äöŗ…ĶĢ4‹ū¬zäzŠ3Īõ{›{Ó0.¤©#꾕™£Į,Q³•łI4—© 'Ōo1i#ÉÉŪøäėZöŹ-ŻC°`?‹śŠ>Ną÷ÖšŻø8źĒ¦E> 外{HŲ3oõņö<·ĒZ4Ė«Bśl/4Nxē;VÆč­¢zLs³+ŽqAJ(½®hĀXć˜#Aa‚¶tKO¶f$+€ž@ŌlS×ÓVŗv±‘™”ˆķ[Óµy¦„ąń0Ģń"Ø'9ūĊ3Ąõ˜!š6¶u-Iõ •CˆÉŌgšėŽńV”©iRŚÜŪł [ĢäØÅ¤yg|;iāR é/™Õ{q“źµtÖ֟cšŌ}«2—ˆ‡N€nĶćcbĢŻE`»å@Øpwv÷¬¾/„–“«éöP‹łacBņē ›Ÿā­oSóbńĀć/sƒé]Ž•Ø}™äG¹†Uŗ@:§Œ¤»YÕaŽ5.NG„r2ŌÜO‚ŹKķĘq@šˆn­õė˜[D¹šØm„J‘×ń­«½ę8¦Ō “cr±īĮ7ćT¢ĶZ–ŖźŚ¬ćS™C–ŚIöµīžj²Ń"…cŠŚ#K!Ī'ÆÓ©ĒAkrū"Āņč-̹ͫbūǧōÆH²¹Ņ›Cŗ»ÖÆ ³˜Ž„}}ė0’čyÆÄMA¹½»·Ó¬õipDQæ[³jó-ūcS¾Ō/µ[Åk›‰FHųŽ,ōUØŽEcugd‘ŪČ"G2@ø;ńĒ5Ŗ€G>ĆĖ.Īnōäeė×:ŗxvāĖM™Ņą‚©(­Ca©_jF™k4’ Ȁ7ÉĶę9Ķ{QøÓ_Ī‚Ėķr·;±ŠŠŃnuŁĖu-œÖŃ*§Ų’­£+PŃ ¶ŗ·½ˆīÓīæ^~•ć_ü?ØŻ[ŚŽi’Źš€pĄŒ`óČ>Ų w0uK©,%æļ6įĖ®qė\iööķ£f0ϘųĖv D^ÕfM3Q’ī¼ę¼øGņ2kWÓgŽńu¢¶)G(›NŅ{‘Ö€+č·“Iqq GD‰€2uŻžÕnM6ėÄŹu‹§šÉth€ƒC@Xķüaw¤ßŪ«Äf²ÉČcĘßC]”ś5œZœš…¬#lƒ,Ą_ „mL¹­±5Ń·³¶ŽY 䓹ąZāeŌō›½J;pŃĖ ulĄ4Ä„cŠ­cŅ„W)nom4m| zē<1‚µļ“ŻJšÉ TF§/+œŠ>r‡ˆü ŗµž·¤3éW źnPrf#¹­ĶF4žÕZaž”OŹŻóA2—CĢ59.le23“““ĻR+”šĻü;ØJt[Ūׁ|£ę:~łfŹeöš·:‡•p³G"-­÷O®+¼“ńCYiūĒ$É 1§«Š~µc7cĒ|?ć k^+OųžĖc ™qŠzWŃžńŸ…üe{…”ņĮætd!nO@*9» TĻHŌźÖ“ŲrؐÉ-“Ū«{˜Žˆģ+ƒ¦}ėÄn Ō4ūŲžĢā%įå”gō4F]ĪiŹēÓ֗ŸlŠtż=¼µ8UR ÉĒ_ʽ«įφ¬ä·{}IŒ„!#-“qŌēé[)6|ƒćÆģżcć šŠPm6cłrcbOzōŸģ«·¶ŒŖl•OF["£u–ž½ńU·öœāHģ¬Ą–EŻ·üöÆ$ńĪæ„Ļ$Ŗ2Į,{t«GŻų7[mSŌķ,Æaˆ#l37Nvž¹ń4Śe•ō¤]œ.÷8'ÜÓ±£‘čŚ#ėqßIęj2żŸwšÆa×5Üė~‹T×öq–Ām•Į˰ä FNWgĻZ«.§Ŗ^G¦-ĢVńHcˤuęø=}nģ‰p-ĻŹĢxÉéQ4e3¼ūtVi%›˜įÜ»œŒ…Ærš·ˆüR¾“ŽÜH‘CŹ;€’?­`Յ}.c]YŽŽ»\˩̒«psĖŪé]gƒR’KÕāæ]T0…ƒĘ’.B‘ÜT)s„ńF©©j:°æŽĘ3hČCI>¤{תþÜĢџ3AŻió–§Üāµ RņŁ—#\"’23^eaytĶ$·ˆŲņž5.LŚNšŽō­'Äŗuœ³Ke§Ķ˜ßqc’]}-©æ‡u 2ĪKͬ‰™×ęfōć5œ›čj„s7Ÿ“­ßSӍæŚā’6‰ŃcĖ$żåĻ ×{¢x“ūcHÖӟģÆ1£wĻŻ#®jį&·éZ?Ž““ƒĆö1ŻKs夺g%e$ńś Āń#čÓukB[»‹łbxŅŻS![6ģÖŃbåGēV”ć}KGµ”ß¼·]Ā9ł²Xš>•ÅƌēÕn~×+Éö•Ą—ž)Ź=Éj'£ųkVŌ5§žÖāfo|Ģp1W.µ/ģ Ńo$шߒAż)%cfk:½Œ± āx©õ®Z+՗2$„ Ļpi‚e¬ƒ««ÜFļnøõÆ_†x¼Igrö_h‘m“ƒŽ³‘|¬ĒŃÅō·FĪHåŸfO™Ž?÷m.Ļģ:U“ó½ŗ¼ƒīÆlzŠtĒ(Ł5ū üMq ­ģe*RP Œpx®z/†ŗčķ£kŗ…Ö§HĮܶČ"ŗcK’<–_[ųbāH­ä–KBÜdć?į^µ„Śhš<Ų9LāA׏J‰¢ŗ"-OGIu®fø‘!˜vå@Ļa_9xÖBŗ•Åœn%……ēļT§b1ø“–7.į‚x®‡Ā:Tśķō°ŹBFė×ń¢ģ,{m‡‡ō?ŽCf Mع 0<ķłW¢iö61-䓿śV1W?…Šz1r\āu;Cv“馝å¼jXāū¬=ėĪ5}CŚ}üwzøY¾G ŒŸR)Ź’5TĻÓļZ‡@Õq:\ĀĆ$p[ ŒĪŗ?_ŖŪ®Ėu“b€1ņÓß5„£Ųø«;źŗ“ö™buóŸ,ć÷¬koĮe©&¤īMĀ]NI°¢05ŒŗečšÄ^(Ņćd€ĒŁ×wœ>f8žµ]<¦^Ėöœ×pYFŪČ·į›ŲūR’³$_ų·w=·€¬ōĻ éPĢ1c‡.Ń‚K~uóÆ†…Ę*ˆ…ĮŠg cs…śzŌ¤sŹWG“Ćā(¤Ņ$†Dó ī €¾Õå6Ž*ŃuQ,^xRbO@N쵫kŠ#„„’;·Bc٨Χ»dvwFÅ@|`g֓¦ C·ŠÆ, iDŽÄą7Pk®k‹ X¤šīHŲ‘ĘyĒ"¦1¶Ćr"Ō,’å"’Ņhī$Į-Ͷ21ĘNkĘüJ/$fƒJÖU)ö­ć±Ļ-Ļ1¾šÅŻįQ¹Y(ņ÷ÓŪō®ÓBŠįO łŠ.7rŲķļŠcO”é~ŽžŅådf–MƟŽ7oj÷ŸP…„˜NŪF8\ō Ś2¶ĒšėśGp÷e–fĖ#ŽŒ¹ĒōÅyņė6ÖĻ$7Œžr’3ÉęƒXŹāßxŹV[+q±ÉŚČQė^isåj!…J– ńŽ€nŋk­;HÄL¬œlÜ暎žĆQŚ&v’åĮįõ ČܳÕļ4čÖÖ6’荩ÅysY¶śü—Ž×°†¶åĻsš‰#>SƱ’ā+˜G'•œ‚y ³{āćc¶O,“øä灊#ćPG'w®AÆĻøG ‘Ė.yśW—x›Āū¼D³éMUŚéŽž¼}khÓ*1čjź2ŽĒkh—ŃEĢüĆŽ²”Մ±ˆ¢Cę«})FĄuvrE›Ķ:H&#”ļ]„¼D.¦m.źŁ|„$ šæćSp?~¾!xgDÓ¼«.˜¶śuäńoƒ ¹W<ätƒo¬lm¼=kw§j){vŅ‚én™s“ć'Ó5įE;ŸI÷>ÜšMŽ‹ńĒąŌ72_[ų³Jg·–Žaņp2 ūā¾°’‚C~Ņ׿æikσ~2sĆļķ¶\¶Ō†u)ąrxĶzøkģc*{£ś£×4KÆ ßN¦V’‰ ‘z:C ś7įŒ—ÄšcŚLŲ»‡åĮźĆÖŗlyõ"xĒķ3ą u­:ęžĀ8Ż&²{;“(ōpTä}0kų2ż¾’f kö`ųŁØü>Õ“‹„Ó.š[ż>łā;ŻŲœöcŒvÅiÅžwŚwŲŁį2yģ Ć0äūšē”Čņ,qFęQœ2jĪiG©žņ}œH‘‚²ēœŌŅǾA¶EŚ0~Q׊ '±ZSēø¤$ŖńėTÕA<ž¾”ÉŠ6AIUBĖŪµÆbŽ.#Šd؁łN7}iŌ`ų]ń+Äæž*|1ųŸį Aģ5ŻR‚āG øVf}ēÖæŅĖö`ų’„~Óß³ļĆļzDŸŚ1¦£pĶmp£iŽł~Ö¦{R’gw~'w2”a“ćšÆ ųį85;{’!$¹+\²Üęžēę÷Äß ŲĖfņź±QüéIŲv ,p8p­9MAp»C·½*:i—>ŻsIbv /ū5pؚĘāÜ( żŌą©õÖŖK±ŁŠž æą’¶¶›ć/čŸ |kpś‰¼9éč÷ L·ö¤įā(OQŲ×õ_ą­~ļQŠlļ¼Ć-Ɵˆ®HčŃ7Żcł’*Ā¢5‹±źw2M K43VŌŽćҳ¼aąß|kųić?…ž.….<=­ŲKoó eŪĆCĘ~ WŠ3üę’oŲėÅæ²ßĘ/GŖŽxļ剮"É Į$ūā¾TšTw­t'¶³&ĘšĒ•…fćĢc±ė·ŗ×ˆ¼3wśzŹš¾|ČÖO¼ńŽõÅųŸPQ±¶Ō#-öÉ[÷±Č0Ńž=ė(Ó%k©ĀÉl$ŠH÷0ƒœU_ßA,€E)Ž­ŽÕčӑĻ(Ÿ§µ‡hķ Ž[uėDģ#Ś4kKŗŃĶž«%·™n»-Į°'‘ŸÄŌŠ2}Ŗ6Ut¶QŒƒ÷…hŒēsNWKm÷,@Pxē„W¼ÕfŌmP[Ź6Ō 9ó4ŗV­gp¬^!Į]O®:Ģų‡ą8īm[ÄVwöØda¶’7>“Ķ#ĆIŖéša†āöK”FĪšƒŚ· ¶KõøĒ²včÄuŖqģ7$\Ó­”³… Ļ÷€=}k±Yæq4qō5 ŗ‚ųv“™ä—U†²+¹œą×/ØxöŚĘ6×?Ž^Pg#4ÄĒÕ-mfšŁŁŁIä_#&ńČ’ź|=c<–šż¾ąÉ(8%ĻS]1‰š—C™ńEØUkyWżI%XdŌ:SiZUƒyqĒmÜ ĒéS3H“mé׌mĶÄ³#Oƒ„'k.+ĢÆg+ؖQ·ž3ǹ¬e!µq·V~«hķ$’¦¦’>ī9ĪJѲY4ŲcęlcƒÉ©ēbŒ 9üIz!K&¢x‚z×q«ļ»VF Į†yėSsGmŽäÉgu§5»47ąŁä{R›_2¶ó°øĒ&“‚ŠĘ”V/ Lķ3‹ˆ·`Æ`+ žÅ»¼’Ž4žŚ.pO®ÅĀE]GĀŠč3,¦ŪČ3žõ0īGėN’ŹÖ÷MIvØ+‘“üė9-N„yĢŚw—ĀܱHŸå;G5Üų7įä3ź 4‘#ģ|.ńžŻØŗ@}7„4{W†(£¹N$#>Õć^?“DžŻöʐFul•5ž”cH×$‰ćK¹–uCµ3żŚŻŌ“=*āõHÖ0›¾~ć5š–¶.—Šž" Cö¬ĶvKxdū$”DdĖĮŖ‰'—ė·^F£e–Ę[„ĮłzƒIÆA­Ž[ĆmŖM G#€O½QQ‰.‰į„ø‘V?g'hÜ)ŗ­Æö%äÖĀ=ų|) Ņ4JČĪŗŸĶ—Ģ!Š‘€=éŸkø·‹ģįØäątü(°„>Ē@#x-ŅpY”ūt­i'#NņęfśšŚ1īdŹÖ7i„ļHćßæŽy­ˆg²œ–5Žł=MbźMc”,¢qe>āLņ v¾Ņ/­zk…_½ÓœV#4ōŸßi÷éZtLĢĻ;G#4šīøāłWiū9±Žōƒ­ź°Kj#V+}…y¦¶ŽU™–H^0_”dT=Ąä?“@ŃF„Ų‘óā­Ųź ÜE ⇇8Ąā”Eģlž†Ūi.·°\é3DŠČ71\‚¤ö5ŚĒ}5µ±±œ|Š0@뺚L9‘‰ØŽ}²ÖāÖéŸ`‡®k‹“·kęKh–ČõŖQīĖc±įį¼²’Y'1L£ī0ĪMtŗƒ‘ q²2ąīfĻ,jģQµā8§æ“€ĮäBˆFģņY{÷ėX3ėŠiLÉcš0pyÜq@XĻšĪ³­j_jš­«YŲ¶wž¾+n=nĖQ'ODX_Վ8õ¬¤ŗ‹•o¬»„żż“Kˆ²~ķ±Ś²ģīē‰ö³rō„c7£Yvę!¼“šÆ&«Üꑨ!޶µ‹«£Ś< Ė#r°ö®‡CšĆ†Ą;Šąō2EF]QšĆZéĖ&ž-cqżžÄŅėŽžÓI+tKh‡™ĒjŹę‡ź–ėm#ZE!v| ē”Õæ¢Iq„N/ ‘@‰Aē©  ÷śźĻswrL1+ēhźö©54åÓ ‚ĪGŗČ XŒ`Š"–ŁPŹ äŒb˜ÖlfšMČĆ!}!•ž).3ńŽŻ@ŖņĮ@@Qqœ ĻøyA‚'/ UڜŸ”g§ėP\K“±¶ČźÄy5¤1>ŃęHåPņąu½p¦ÖÕWclcĒūU Ó,lõ+@×Qī‘eįHūøØo¤ž7?b“›Ź *¼S$K¢ÉwdcœīZŽń/ōæ,Lm„Ł“0Żī+8]>(4ę‚Ķę±äąēŽ“ć„NÓIę":ńƒĶ0gā{Øl,„q6W$‡•ę¹ĶSTŌ­,té¤2Ån Ä»@#<œŠĀĒ]”ŁĪlķ¼ó–Ąė[2ŚŪMu” Ąqž¤Š'½šÖ„u¦Ė “ņz²žā»ėŸčĶ&m} ļ;Š˜W¹Ķųū2k$ø„PŲĮėŠć,n¬TL&E jYˆ­RŁĻź¶Ś~Ƨ_ź6ŅĘĖ[ÖEžzƒųÖnƒ©ė'Ņ!“Õ¤ūJ[ĒåF3œ&xćńؾ–„ķ'HŽŚł„e¶cąūWCmm \(p‘äōØg¤XA-²"ĀŹčFõ5ęŗž‘Øk+’F‘_K‰pńĘß)'¶?*/ŠŅ ©Śiöɦ[ŹŖDxچ®L7Å•Y!'wzMš„k:réR™šŽ (×Ė™w€v‘Œžkē}_Įh>*Ž6CŸęµŠŠ|ˆÄ°ń=ōJ³nĆ ˜ņj֒dšé/.§/ ä'½9F汣Ūų¦J{“(€Įéś¾—o·Ō,nm®U€8…³³ŲūÖN&r‰ŹŚ8]¼’<_l1ę£Öµ1,[~2H¤‰jĒ=¦Ž‡jB‘ƒŌu"ÆŪZĆx’c ŽŁ BĖ„”Kz³@Vå1Кķō\źZ~ī$ +7*i£ŗmBŻšHüµĄĪ@ŖVzü·öŅ“E–!žŒ˜ŗ•¾›{4 $q„ŹåT“×=s^ć+Kvń ģŹ“BŽ#R£®?ʁśf”u„X-»4Giʶ:{VśųåÆ%‚;õ,q±łĪļzĖŠŸÅ.Ą ō4eWC·¹±·T+ Ą|ķžµ¢éĻ,Ņ|2#mwÖŃĻŪµ(µ2[>0Ą>F_Üʳ5+ŪY,d}Ą®xĪ)‰Äė<Ø[[ŲŚN,ˆrŪ·:ņŅŗ’ųź÷@šĪ¦|9oējˆ ó¶Üƒ»ß„;÷.1>h×~ xŖėMÓ“‹ĶQ.#‰634`<žšē­ix+Äž'ŃRöźwg“š3Ņü⯔·m·ŽļēY,IFC܎EcéöŃĮ=õóÜH^S’¹ąVfdRł—Ń)*[nG­Č“.øxbu@°zSåbņ&ŠĪŸzš•ÕŁ{wæv1÷Ąļ\gˆµĖMM&K“Ė¶8Ķ>F#.ĒL×åūķØhSp,6ä0ļō®øéz£j‘‡qäžĶM†CÆx~źÓĢ’Ńē@Ģ:ā§Ń,n4ˆ„·JĮš>éĪM =Ü\ıB€ŗ€3Ó‹u§”†Y\;Joå@¼zP·™eydi3æžÕwS·1[ż„“ģū€ÅgźWĻeޟa*Ü@[j¹G­yųŃ.ī6²KøēpüiŲi¶“ĢU’t ¼mĻ,k~&µ°{bŪÕŪžGCž„ij¶R[¤¶‘¤†ę9č=E>×e͜pDv1łsœ~tÉ2¤,µŃīžĪņY‚FvmPNOµzÅåü3Yۘdu Łōc”–Ę7ø{żŠ³D2<Ÿ„p~"»’Kgū+Ƙ†­9TŌ-õ½:Yǟ§“Š’/O(wožµ}+ńƖ~^‘7†[ūDy¾VRzą{PTw9„Ņ.b+å.įεeźv©,f(ä_µr¼ÓĢš?­X›\ŗ‰#‰@IŚ«>Óõk½R)÷2 §åoā÷ v:MCD†Īxä™Ė)?2ēŒÕhÆ”¶‘‹Ēū‘ŠP5Ųī¢ŃĢÖÉ©,{m˜įO§µyŸ/īō»“g§:2ģĪāzt¦kc“Õ§eeĢ¹b}}kŁt½:GH1;½¾  ¶üįH§×ŠAc”[ æ“C·Čų‡5›¬i[nį1īł\ėšiź–“›.ęFąž“Ė8ļ-Ō‘łq¦ļŽŌóŠŻ»Ž $Y`ž33ø½bÅ ßJŚ…¬7QO}o!@pré@%Šł:‡÷+ż§u|ļö©g’S½·cę< ڳ‡ū& ’,.T+>;Pn£m;Öģõ5ž >ÜA'ö«6ž,Ņ-ąŠ+ĖęKÆ0ĘPŽł ™#¾±k]Y.-ŚébEŒ¶ģœm÷Ƽ¶šž}ö{`³$“ķ?y»‘śŅFg]§G„. š–,w¹Ž8>µS]ń'‡|#{ooo$~#Ė–ž4$\9ļŪ’ÆL,yZĻyā Ė˘,~Ļmē‘x_Zé­tŻ`Mn H!'ļ‰3ŹÓ°4{/‡4¹-!Üc™žķk~źÉīķy#ŒzP™ŽxT__ŻßI· +¢³¤»Ńō-7Sūq† B‡%x Ÿ’]8E±šœ_eÕ¬] Ź£³’kā,·/£ŲŪŲĮ6”q4Ž[Ɗp£š@qv~Ō#¶rŚ‘Łp„ˆŻƒ]/ŲmōĶY-I™0ŠNG»ćń M›ÓK„ꑬw(ö!76ä’XO§¦+’Õüy}„ŚYCaec0™öüģ(2å:Hµk[‡6ĀåĻœgŽ»ęŅlVŚŻō{‘&čń6xŚŲägŅ€ågŸjvQJÅ&™cuoĪ’×Äŗ–‡e%œ­=¾ ˜÷į[4›”ĖŻźMs™$b9›8M٬mÄśv™ éö·±Ū%ćČXF[ęŪŽp}:Š\Ož|WńMgՎ‰įUAĢÜüł(ēZƒE–×S²Ō^ż–±ȤnļÅMāoE§½ŒŚ,iäŗI8ĄõŅŗŸ ėrxēĆś¾‹-³Śj*<Ć6NB€~U=čµĶ†§5®•”éŗTĶrĻŗā`$É8éĘkŌ“įµ,ĢĖ '“ļŽ“&z5²Ų°RFéŪ5Æ{ue£Ś¼šÄÉgj#2&S%Ēū#½dļsĖ>%kŚ,šo¦j ›‚9 øaӂ=ėęöń-ÄŚžŸ¦XYĖ~Ō±G×׊Ńy“ĖÜś/_ń„čŠK§ZHn0Æ·Ģ[Ńkžƒ\ƒHŪØ;­„Ł!Hž%ĻNcåč[ÓüEŖµü·HLQ’Ä|ĀŗŸK¶Žś[|Ą6œTM…%Õõ»[»(ć·ß-ĖŠą<1įŁgÖ ŽfY9ä’yŹLöūZĆcq5“} &łJŸ¼s{¢× NÉm“īŪødv"‘jekOƒvźĆQ“æø¼ÓŠ;üĮĻ 'šō’ė1ųoÄ:EŖ§™s,øĄ8Ę„}„“ų ĄMāų²ŅĪėW¼Q°‡+ļŒęæ>ž#|\ńOÄ_źZž‹ś5›ŹĖJņ ągŪF=JB}^č¬WŗāŪĆ“ü­ĆžłÆbŠ.t»}>ßKÓĄŌ®fg$čs÷ZF§%ćæÜiZ}å­¤’Y\2Ūx+Ž˜Æœm$RO"K)rĶžĒ=<šö]{\Ņ“o_Ļt¶é?”6\0™źMo\»wą‹1ų‡LŌ“«™ŅQŠ[¹ąMĻ_Ēž¾•Ąü@𧇭bƒÄ¶÷i«ėaÖ3o»ŗ źjĄģōŸƧ i¤··ŽW$Ę=FyüėµūCZaԜ ķAƒgćĖŲe±†āmEęæ‘ųˆ ’ļłU‚šéo‹c’öŹŠ[Ż%Ü£†é»Ś'ŲėüCą ×ߣ—— l×FY ¶CEōW®ī·šĒŁ-”T61øŽ¹¦ĆāŌµ_²Ä ’Ģ”C 'uzž›öŪ:ŪĶ-ä.¹ć‰Œu>nńĒtŻ xģ¼/_ź/¾K— *FsŠ{×IąOk~?𓺦Øl ÓcŻ#€UĄļß҃Od7ž«&µšĀāź-ß,ĆĘp*¦©®ųkĆÖŚ‡ƒ„«„/µ_Ó§jŹHR¤rc^·»Ļo!¶Ēœ ŁŅ5hn¼»deŠį›¹å…sŹ63ä;ł$ø·²%܍¹ĒEŗł!Ļ@Ia«‚¼½Öo!Yģ¾Š±¦ž#ļZņšÅ“ZēŒīf†ŅšiB³9;—žkÓĻĆ(īV?³=ķ܄7˜§q,})ņ¢„dyŒt9<9¬¾•w°*¶Ķ²Aė±iś>į i,¬ć“^šDPŻ>\u’>•‰ʝ†n·–÷w#˜&ķĒ§RÖüFš$¦Ö7ßęŒČY3Ęzڳ.2č͟ ėŚsÄ걏cĘ@*Ųā¼ēā-Ģ7óŪĒkSFƒę|ņM2łĻųbµ6ó¶ē¤õǵz¶Ŗ`¹Ń®®īÓ %Ā’p"\Ļ“u‰ŃćuŒ‰UŽćŅ®xCĮėā;ų¢šT“„:™XņYs’Ö 9Ńö&‹ewm‹fÄ*6p8`*ŻÖ±o„ĘÆØČØĶŹ[8ÅD¢D„©ÄŽxÆÆ ¶ó¬±µT»ėQĮi ÷Bö/pmū1æ…D^¤Ü³ā똢Ņg“KxZńcfņĀćnOzųŽrQāµ;³ūܜFƒh_¶ˆł\ҵ_ķ»¢ĖČߍ„OCō®’ć@¼“’+–ƒĖŒÆŽ?Ä=©j=FŚq:0–¹Ī~e5-ÅõᲘ³n\»=*l fƒxn-®#EšfYŽs·øx®ŪM·³ˆZČ×É““É”+ģūœ•†µw¬™<ó¼ ÜXż+×ōeŅWM†e ׌Nö®:qŪ½UŒ3jÓÅZ.›unŽš^M!+“ōĻ”­Ėæ‰ö¶0ŗÄ$Śė„)ē©«Œ;ŽŁĄŪų»ÄŗÄŸiHÓOUÄ$·$dšā5•d¾ž-$3:šr‰ŗ,BöóoŚcņā møłioāÓĮ“žĪ¹¶uÜcm¤ī'ŌÖC”J—ś}³ļyøo”ćõ®¶ŻnfҐHĀW$|µŸ“09Yõ+ėŲµ‘’¼|Ø9ü:VœZ½“ŅDŅ8˜‚yę„ČV-ź×²é1Óż![äĀž§5™k£]ź×2ż¶Ża¶D»$ķ­k†Ģ«­kÓm¦ĘJ³`6:Œõ­šóé×-q4ÅŲ6ĀCdķ[Åč+ŽÕ,lå†į¦¹¶ņöƒó}ī+…’;]óZ:3˜«&2k)Čh‚šįšK»°bwĀ©ągŠ ō[mYĮmŖ0ū4¼°3†cJĖFļ×Äķ}CĆw1ŲĻ$7iÆ$qé_ ŁEy„kšé÷ĀX,DW*0Y™ńĒę+–i]ŸFŖ$ÆüØŻ~Īt­+]Ó’¶|«˜äxŒŸ0,8sś~U”ńūĮŗÆ‡¼NŸ¼p°jsŻCØčŹ ‘¶ņ¹1Šß 4¬ŃZ–gö;ū žŠšķqūxāC‹{i¶Ég«ŪɊUXzć8#Ł{ßÜųg^I€‰¢fPyĄ®©«3ަ¬śļRŽÓÅ=ĆA ŗ·tĮ8ūµųÓ’‹żŒSö‚ż‘ĻÄh±_|Mš8ye!{=ŽõćØēūRÆŠį©ųVńŽŽl.žŃM"æ–r6•8Ī?•ę×Vļ•PYe\“Öē$÷*żŽyU˜$jĄz’*¬.™]‰lńĪ1AĶ)wņŅĖ>¢œŃüÅ€Ų¤t@”!ĀE¶dd ʤ}k]/Žį.݇øØ;)³V&µ¾Ż ń@ä)WÜWōć’ņžŚń|=ų£āŁ'Åŗ®³ą=|‰ōiÆ÷v·~hÕ‰ļu5Šź‹gö+¬h‰o$ÖęDvN2¼†å^;®iĶ́eŽÜ”®yG”‰ńOƟ‡¬4ė½XB%‡p†e\`Ēłó_ŸµgĮk/‰ß 5ķM>ŚīīgņŲrPr'Š’ž(Ž„ŹĒ‰“MWĆ^(ń/‡µ;i£¾µ¹e‡X»`÷f¹xr»ć±+Ŗ2±”Ń+I»ÓŗšØG˜ģMƤYåF9­ŒKD3R‘ “œš‹ĶB<³óćŠu‰šĮ.˜=©°”Q,‰÷sϽB‰ŃM–ZH„möͽqŒµ$ ·9T^ū»VĒL]lųńƒQų#ńSĀ>1ÓŚįą{Ÿ³Ż*µb8ē=ϵ Wģyń:xš„ÕĶĀCsižķ d¼¶uO|c€¬ź#¢'čĢ2ˆiĮRVOšVČtõÓ“kęĖe;”·”ž^tÖ¦®7?’ࢱfńŪąēō'Oø·Ó+XĖ”,…c[‹°ØŹmÉēŽjÖ«ZOo¼ˆIŅ¬Ļ—S°’(®¶äŽqČ'šō? 4PjeīŌ8čžļցĮō:]XŽ[[G·ūD@äšńćlbßpŒ]•·œSh“:UKØĖyÉ÷śVMÄMąøĖ»“ķHĢåµV‰®ŚU̇9­-2 kĄyĪy  Ö~Y­Æ„-;Ćæ{Ÿ”“ėۚźäń*%µ¬Ēņ)Jä’}M_7@ž#Ūk=“ėŠü}jčw¶Ń ˆ’ČķZŅ.ęsS_U×¼?‚5’‘×<äŠĀ½¾k˜c“ŠKčQ[ؐŃĶI=Ā) æ+¾=°+SĆŗÜćSŽ&“P°ź ķUc'±Ū^^Euu-Ź@ MßwTUńµ‘ŚąG,Ž½ė8ù_g„?‰4ėŪ†;š©ÜŸjņū†~JK!Žą2É»¦\Õr#¦!}ågŽ9­ħ–õ®ŸHÕ%³žÓģąšģ1P ē*FÖ²q±æ1Ą’aź‡ÅĻ X‚UĒ”äņoÜKėMe<†Y£ ŗqBDJG™ŽJÖķ-žš@sł×Mc`éh’oŻ1Jq‰Ļ)3NŠ×!¹tó 6}kÕōūKX51<Š£Ż4cfOŻ„l‘ Œń­-µŠæˆ‡tl7}ßZćdńō÷K4„ŃwnR¤€? ¾a\ÜŌo$Õģ%ĢūŌ9¬øQ®BĆp j§ƒėRŁ“v'±³ ß91ī=OAS_hļsnf³Q$Ŗ6žp+īo”ĪG„j0Ź›ćmį¾īzŠķu+7ŃtŸķ+ˆ%yOÜP3ÅAF°Kā=)nć¶.b`‹‚ĆŌבܣÉńŽ•ęf<1ąJŅ1ībÓ=kĆŽ¹ŠŚ®›Čqņø<ń]•ÄšF“%½Ö’“Č„‘…5dJ čné³ŚŻ(€}ž Ēä;Bū“XžńV ŅxƒGŗŽŚöT“ū1„ĪG>½hæB¢ŽÓÅqGŖiĢwĘš&Õ xĮĪkÄ-&Ō£µ›PkgOšŠī‚A’ėS4S-[²OÄ-ø±ŹóҽEø‚ĪĘvfXn£]ä÷ˆō¬ä…ĪsŽ#ųœĀÓżµŌøFx)ß½yV¼°jŒzä3I=Ū@Ō śŒtėXŹ75Lęa¼¹·,ņLä>p{J÷“ŻGWšIĆ÷*—²ņ¼ddvØPfWC¶ń ­ÜkSKo†o ŽõsĚŪ®-'±žFÜĆĶR:óŠŅ1°„¹.ƒąÉ­ļõȆå·v<ā·üen„¼…d*w ŽGE(ŲņWQ{;TšĪģă#ĄÕKKū]&R›Ł°U”÷„rŒtāĆ<s]ŒžzĮ˜Ē›Ÿóš „cŅ`°ól£Y”łIÜ+Y6$µ“D„1†ę­HƒŸxŠ@J+_āō¬;‹č׿=‘ŚźżŚćļdb‡Ø„„jŚv›£ÜźL%k†Į`£!|ū×QąĒÆ%Ł‚Ó(Ī"Ż‚@<ąŌ”¢rŚˆLzŪĻ ‰}Ļ­s·^#ŸX“@QpŁČ‘õ¤§Eo¦ŪI¤Dd“÷ž™ļSyö/£Ķ¦Žłm¹vÆćA¤ccƒ}"ĘĪÅc²·M±ńóŸĘøĖūyc‘ F@fć” «Æ™§YG»ę—Ž€«e®“mx×øuĆ#0 żiŲĮ£ž+ˆī.dK4¼t(æŅ½;K²³“ŪŖ»ŹßŅ­S&żDŅ|F’»Å&š±[•ĘęéĶkź §¬V’GäīuķŌŌ4R9’Koc„‰ē9^|vƞ.µ)Žōß0‚sž¦„³XÅą£i¬[+„Į¦«źž ŗŠ®&”9ó00>źž‚³r(ąotŪ‰¤ø’ģā@~N1€*žn„ݧ+“p3Ž„(š×²XĮ”…U¾O›ļW-hŪncš5)xŻŚ·1=ŚEcū·C0ł³œā¶ģõ+Ø”b•Īxą t:L·ōo¶Ü¶ÓĻR:ā»kWZv™ŚäĖū²Mdąi<ßjf+¹e ęĖŽ„Ó„ń„­¼ńµ¾VŻØ,MÖb•Æbž&vuĀ88ļ’ė®’ŪW·µÓå–RĀ9=(YŻŚĆ{hRD`N@Čł¬Ī«~LĻ†ĻŻķNĄeĶgy”Ūŗß9Ć(''€ō ø«wcii§}ŖųJ'X‹^˜Æ5“ńMŠE5½č– ±øĶ9[Ån÷QŲžSµŹ%ŚKvwF¾sņI±%ŒÆ¢†ryĘ;W=&…vøšČ Wō&€f®sŖx^Ęy5$I啈UNž•ÕAś¤1ÜČ<¶ūĄŠŽšg %«ŁÉ„Ļė?JšüśyiŹņ“ķļAgUęÜÅbU_އYseq¼N;b€0o5·»°Ėæ$`Šķüq„[i³Ū޹I—.{œwüqA+rCY7—Į!YŽIÆ4Ņ“‹?^£Ću'”ŒC*ž3čh-3ÕmµųSH½•Ų½Õ‘|Ø,ŌČĒ£±‡„x’Šoļoīą>kZŹĮ¶ƒéAM™¤Y\Å4’Ų«¶Ü«į5æc§Ē6›"JĀNĒåŠŅĪSīq·Ö6Š_I§!-(Q Ļq’ė«ėqʃvģŽyļI[©Š×šŻØŽ{©ć’&R»p‡ūĀÆYĖ ś‹éJL»øaŠsUĶfEĶÖŃašńićeLĮĘF+ǼC*@ė5½šņJ®>ōłŃ¢Ÿs²šżćÉcl÷GŽ85ŠĻ2<āMŒŖĆŒ’JČ„"½„ō0N±Ź<×Ī@ėšŪŌµø5++H„¾`VP0tż) é/43Jš¶£2\…ælHH$LĆņÆ>æÖ”e™`%”cn9r=Øž#Óü›Ÿ vń`vŒy¤zŲ{P Ģæŗ½_2ņI£ĻńuĒC$7Ó_[„~™ GāImīn%/‹€Ū·zö­Ÿˆµ =@…Tū0rybN?ʀ%Öu+M: ÄŌai×8lŽõĆh-÷Æ“y‘‚wäõö øĘēYmąųu–ø‚üĒęé[«za’7/Źpy4r£Snēß,Œ…G˚ąu ·{±§ÄK¹p88Ųō¹u+ķ;FtŒ; PJ“ŅøV{/ĄĘd“ąēŠ ¾†Ž“į[ˆfŽįķK(9SŲW¢ĒsĻ!‘]¤wņ°<8ŗ×‰lā¹ķå‰ZM»ryn)¤;Xģ&Š ōW:rFŃ]£m.Ć+S\¼ž{ Ł–śKgˆ »ŠpET s=Āŗ „“r$kŹĖ†8tW]qį[¹®¬ÖŌ,Q¬É¼ŽNÜņ)6MĪ»Rš­ā½ĖXø1Ū1ó2GŹZå”·‹P™­ā¹Š6Č%Ž@Ē\ŸlT…Ī2ĒĒžÖucDŽīyÆ —ɍ•0’ć‚r~•ĻxßĀ6ŗ¼–ѐ¬¤6t>ō?³šµ½¾Ž#՚9mĆżŪchČķ[Ń>™oo$#nį¢,÷ż(%”÷w—[½¬±(ł®6Øė\eĀĒ«L²—…š<®įŪüóAŸ++k:UĻöh»eøb!>U,qß®j/[]Nƒa(OĻĒ Pkc?UšŠ®”%īœļµ[˜‘•śtÆHš¼Zž—gsīŽS!‘wŽhsŚö£Ä"Ä[Å%É`ĮńĻҹŶ”ه-Ōg8¦ŒeŲWšō֖OÆA{FŠKÅ!ł²1ÓŚ¼\Šo¼]§V%’IcmČ2;@5Æ2Ž{Ą¾ø·øŸ[½±•ąiKać択UÓų² *$¹K8L6’ 1Ė'ēŠÉš»ō<ÅŚhדĶ#LŃķYž›ĮāL±ž†®ų3U’„NėJ¶K{y<ŽMÕ¹Œ«$= gÓü)ŪgŗÆ‰ģō=Bź=2ź(%• š@eBzdó\Āź±¾¤mĮŽ‡Ø –™Łx3ģļ­jŃ^\²„·Y BFY·ž‚¹ž%Ń#_ ŗ\±¹cT1Ŗ€ō9'5.:ÜÖĒ `½ˆĪ`Ŗƒ™=k¬š6‹eØj0AŁmŪ﷚i ć­éš!žĘF³³µ[t #“‘3düĒ?Zånü;£Ļ©ęXmŽģ9 “ŒõĒs'HÕü!”x–öė;Ė¶Ē“åŲē’…XńDś^µe0µiķÓhņAēŽ“‰Vźyķ–‹¦ŲŲܵ³ÄĀ2 ofĘϽńĆńÉ”ā;›'Š/3k:c–9┣ ¤ģx]¤ś­­ÜqZ¤‹lĆvā½BÓÅsŁ [»¹"P®}ļƲ3ēgRŗÜŚŻÕ±ņ#·“Ż”(Ē9>µŃųĀmCQŠdŅ ·Šv*£i\ł‡Ņ® PR{憾ė–Ÿ2Ą#°–/"§;ź?Zåo¼ØčåŒŅ¬ĮČ-–cyö­BRč{w…›^ՃK©Y¬ABÄŹyr+Õæį°]Y\M©ķ-ŠlUÆ®hfN]œ¤Ōt­OYmźe•ŅP²8ŚsڽšĖĀG‡“Ö–Śż.䯕””ē¶O=č+WĒZ:‹:Yp›GĖøC޼ėÄ÷Š^ŚŻŸęłU'Ś‚‰<7į8„6“!kx”¾ß*ąw§üAų™©č~šu”3,Ršgq깠ڜO”ąæŸVŗó]„žkøxž•ļ’ ¼1ā[­WķSŻ[X˜ 1ä…ś~T3£‘zUÕÖÆ­É¢ItˆĶę”8Qœšā|Kį:ēY¾×*Ļ÷#;qéųÖr¶ĘrZœ¶ŗóéę 8”[ČT ͜Vē‚®­luÕ5d•&5Lą =Įõ¬¤®a%©ŃźŸSY¼³Š¬,­į±ļ6ēź{Ö¤VqL—),‰Ŗ9 qšĖ—””ćsžŗŗ²ŒžāB‡8fŌž!Ö~ÉᲐ7rÜm#†„Õr³gįŻgT“R“²#I'<®0ńƱž|ń.¹§ĻŖĶd’ •¼ė€@Ž5ź>nų„F6<ÄѼ>0Ō4Ķ=R[H_Ėū@#l˜ō­]S½ŗŽ)ć‚{N^ķRmĻÜīõų†āЦŸe)ˆ!Œ\gŠłĘw§öšÓ&ŽoÜąƃõ5~Ģ®tgÜi——Ļ“·>tl;¾œ×Ó>Ōķt/ :f“žŃb˜˜ŒvüE.V†™våßR‰žīuŚrķ€Tv®BöėB]Qµ(­#:r0VłĄĒ&Ŗ3(ąuų~[ę—C’)ą,pvć?žŖ³blęø†å “¹ńŽj„1£¤iö·ŚŽ™;Ė:K”Č/ĆöĮ}©ųIT|AØY±+I »øźG@)*ĻSÉõ›m'OŽ;HDÅI+?‘Ķ|ń«ĖŖźSĆM&ĶĶAķ[)‘ķčŸą·“ƒZ½¾¾{ićE1&2ÓqjīōˈoāāWx¶»ƒŲēČ©–ęz§‹t;{ĀnŁ‹;6B“޲ō£“żÉ„lG ĒzjlžgŠ_ŲKjmfØ­óp¼ŠŃųćkķ9¦™„ņA¹?y·Œž8­"ī;\ąüWš÷Ä3ŗø×5­FŚ ß=RŪĒlzWŖiw‡t’%¼ś­µę“%É‘võ#µ2¹HµŻ"Š Į†I Ęs^­ł©k‡_(7ßķŸzŹQģG3¹¦»Ü]+4‹Ęć­u÷WMtב•bĒqqJʉža$Z”wń‹Gh~ÕnßZśvÜŪßx"ś;Ė‘5ĢQ…o›™sč=©_ Ļ–>ĢZéįGżŅ±ÕźŽÓ^Ęwži®ߔc’sėųŅōn›ā[xķE»Ÿ/?¼mƒ&¹Bń.ØmgŅ®å“SømQ†ā™œ Ļ+ńæ'…‘¬,“ąŪ JżĪ}kŽ-Ōļ‰Ž)9<óž*£H•Ö·:äóĖīép2ĖŖ—ßme‘eūYŠsó`ŽI=…?fk_[yü(‘ÉĶ$čŽAÆGšē‹­|HnmÆŠ­Ä0/•°`n'ųæ Öeu½jĘÖ°ŚBžc 4¬Ąąū q^myguyjĀ!3BHV#ÄTņėr”¹ŅųOūQ/ŅWš†lōĒ9ĘZ;ŽH°Ī™ y‹…āØŻvgœEgœHwøÉ ńr=‚­Ģ’$7hå2qĪHõęæŖYtŸģ­Fąe\ŒW£©VüvϹ5"}{ū>x¦ßQŃ5O½˜–é¤W<īR;ż?Ę“øÆŹ’‰>“ҵŻJŃģeŗ“ŽcorØyxČ䌟CYs-Œ,4æšPoŁéü)ćČųSįwu¹ÓĘ~œXIęŗ³vą÷{ēXNWLčQ?©…ŗÄš§‡nb³¹ŽīļG`ŹDĢö®FÖ d~~Õé­p²$Ƴ¾`ĒoZąŖŁ¼|σæoO >|ŌõżsU½ÓTü§×5»O©ŗA=¤:\WVĀ9®^"$( }n;×-›Ļ ø²„?÷€ķYĘveĘ71µŸjŗ}·ˆ BRe#'`f8Ļzżų)ćØ|WįäT2<ÖŲŽPNŽŻ³õ®ŹuŠĪQč{֍䭡$‚åøō­k©bó[xRłėžµ±Ė8ŒŠįcó Ø“Ø-Ó5‡ØĪ‘B“C0‘²ACœŠŅ*ęm šģĪ×lóFł9ė]¾«©ĄšĆˆĄ”•ž5„Œ§¹ēƬīŲ)n£­t–w§äHż:ō­cѝŹZŌWÉs ĄVHАI8Åbi÷„%ķ¢įńĻZRZŒŻšģ0ʗ“Né •ßŌÕ _PdŚAŹcƒ½ĶGRe°¦Ž ‚ˆ pFsŽ•bĢ›GŲ:c޵ihgĢĶų%E2NG!Oū×)$ir"ˆĢKBˆłŁ…ws*JšÜ³ ó•2jWQ!ņÜČæ\qW”£g;,·mt„Ęń19S‚N}+Ų|&÷wv«”FäNp3Ō×I„ŸSo\“““±{ˆē‚ć»AäW-įIīõK…†&ņv‚Ē3žķqg¦[hŃōšķ‡PxB=Gå^7Ø_=–²`ŗ[ķ _§åY©G¹|5ń›ØizÕµÄ‹©[Ć)…aߓ]!Ō#‡G–kćߟ•öżŅ}½)ūCodö8‹ę{›MÄ(yćҹ]?Fūšø¹¾Ä c§J[čTž×Ó®µŅ7ł•ŹĒŽ­Öšģ^|R(‚VĆoXŅäcē‰ę:Ē" ˜L…ņÆ=x­Č§‹KŅ.nK+ĘØ[%sĘ(åh‡$ō<ÓMŌ¼ĖĻ2r© Æ 4øcŌŃeŒBņģ½±MHČŹ¼ŠZ.ķågIó“øš qóŲ$6„w™.UĪOEÅh,fSt±øą=jmGĻ“¹t(ū¾ö;J^Fčœį¬LĪÅØPÜꙤjÓÄ|Œ‚ĢyĶeČĶ¢ō=ĖMŽy–žHņBį€=Miźzµ½½—‘}ų•HU#9£”³—šv«i&”yg øņZ2 `ćrõśö®ÄŽ’ŪQ–ę&–ß¼ŻzUr±¶7“Żmµy”ĒĶž§ćXĪ„Œa%vV\21RéĶR‰4’[…Ó-įøŽHH]Ž§Ü՟ė–:,ā9‘ål‘¼Ÿ½Z:‰A›¾*ńŒZ“ZŲĢ¦łK»£÷Ķ]Óõ++ŻćC`Ų˼(Q׌©±ņœÕŽ˜4ͮѕŚÅ†ī9­Ō2.µČ$ūńX\qSĒŅ;Ū‹ėˆ¦PŃēwŹzs]ꇦ¤ó Y70łpy‘iŸ~ńź*šČĢ \}ā($¼EóäSņ <šLqŗzŒ25¶ˆu‰#Ć éŽœwÆ ń7‰ęÕļ&øˆœ0ĄŸ…G+=ĒĄ>YŠõ[WO6C!>^›ē^9~°[]46.؅š€‚*Ņ3”»•¤¹žČŃżŽ¼fµ“t® ,«ą[µ1_”ōTSéŃZĆ$ĢŃT/?Ö¼GĘZ­®ŸŖākvRÄŅ‚¬kh7¶š¦Œņ\LKŒˆńŌśV%åˆLŪ?wśŠ8Ęꖑ *Mi5Ā[$Ć X’bŁźZ—ƒīf»Ņ Ü]Få—o½Ø6JĒ¢x‚äj~“~āŚFź/2tPܞžĘ¼žX›OxF<¾ź}k9KP--ĶŌ7¶źI7°łA'Łj7SĪҳ¤01U>µ*L%®Yu;Č9{»œńÅz6¶§ŻµŖK Ÿ)Ļ8ć­i\lĶÖ ‚įe}¢(Ԍœc«ŻhiįÖ2I¾šäF‹üĻųUĖVyžpš&„”mį¹=@<Šō»­zMb{4Ņ‘"”"ÆīĒCŽx=kE>„X÷‹­`+I~ ŻųoK’ 8!ø—ŖFx.~µ›€ŌµŲ¼_įŪ‹ŪŪF±ńŗĻó`ē'ņÆ+Ō䖦xŻ÷š§8xTÖŸ.’N“ŽŠ,Ÿ/ Œv,ś§mt¬bĘ}³H ś¾»zŗÜņ¬‘Hä°,I‹Ś¬Ū½Ö„2C&zōÅ ®‚˜Vhą~H'µfŪĄQź’Ļ„,s…\åWåsActÆͦ^źY²ČŖ|Ę-ĘƒņŖ:–§G*ź$BįÜ#”¢Ąsž#²øI#VįÉ?0‡­fj¶©c‘¹I”åšxµč~Ō5KµÄ©Ā–^XS°łYéZę£m&™us5ä0ĢØ?vz°<`WĢŗš$óČa#ļd{P ³¶Ÿd³šĢ gŸå[z —Ś]ē9ćw֐c²[ŠōH±@Z2€Qڰ4æ /’°‹‰ērŪ±øżhŽń¦™™„’B‘1Ažķmų3R]_GžćŻDÅyP}h3’$Ō§‹L¾·…ķŁžHŁ–Oįcõēō5=¦­$štÓŹČY~RóųPhŽ)oln&Y¤›ģ— ĢO9<jµų#!n—ĢRvŸz “5T«£„ŖuŽžÕ$Iķ&¬3¾°6³G"[Ο.xĻ5€|Dčó[4(؍ņyb(¹ŒŃ«¶ŪTø·½··x'1*JIČ'ŌzUKĖm÷£°·śūPACQŌ?įÓ'˜Ć=Ó#R[Æ„t>Ķđ걀å8Ę !›ž>Ö&¶Ń¬¤×Ķyq0#ų8’ėכXµŽÆ¤źVó4ńIó”įŲvżOåUm. '*/äTx‘äŽ59Č⻫Mb[‹(c•ņUvīn£#āYĢ&(d‘I÷­%»‡Ld¹‹³>ęõ4‹:J[[ū9dūn& z×0ö6·ž Ń5 ‰˵`WoøĒ4ŲųŽg X £åĻj󣮹³µœMni¦*zqõĶoč3ķO>įLh ‘Ķz,×:5õŸ›Ą3¦.ß½ėNĄrWvš^¢ŪZÉ"™ G;ž•—ÆkRi¢ÖÖÕV%ģ} cÅ æB-.Ź&ÜŖ‘Ää$°‘ākū >ѧŒLĢHTŠDzœfØ\\ĪĄ«tČćµnjrŲé–FK‹™8LPYĮCāø'”"f,2i³ėSĻ"ÉPT`ć½J&®™­Ė,kky i†X/'źkŪ4E"¾Ķ鳥^“ąp®·{5ō–2DĖb &³Vs19łP…_z 3õÅŅ“å”`’:Ö›®Ļį˙̈́qČĪ„X8Čü4ŠŠ]Hęml]®¢^IZØČ?žŗŠŠt[ąßg·ĀĶ+wéM R±čŗRjz,/¬‘¬„Źå8ķśU»{ķ:ņų5!€õ„aūCSøŠ}nꊮ‚“”ᇭfźzn”ÓiņĘėĄlĖ‚2pz*{š·€Ü #c‹vzŌV‡¦ŁĮ!‚Ū}Ó>ģ’żzŹŃÖŪĮ<‰CŌpGOj½sb­29@†2{ŸjFeK5#yørN3^7ā+ūč§xQBēwÆ4ŸaāŁm·G2,ŽøźOÖ¦ŸZ:„&›wnx'ځjs-œr*ĶžsÜż+ŸƒFžE2ÜĘf$īn¦“‚Öš½³JĮTČåqœō5ę~/šģš*Į<Ō•s·5M#H”’\iC ūÖÆ„p·ńx³\Õͦ£q$–ĢFŠ_ī8\#0G³xĆ–Æ”[C~ńĻ%¦Z6hĄŻ“Ļ?Z½<°L58”8_™€åź%!Źż-Ōž+é–ZĶ®‘e§æļ÷­ÄģzxĄĒcÅzö“sa$Zs}Ŗź#¹šF ĒOåPeŹĢχ¾9cż µņ®×k1 {~•źŚg[NŗšāDIŁ£b”Ī@lqĒ׳gĪ$ųĖā››­:ÕžĮq%Ė4ņī$<`œļž5ĀXų«Xū#Z®­|¶Ļ!Źg;˜“É µē}ą}*ŚŚaØĒÉ£ÉĻĶž5ģ~ Õō»¼ń_E6·2įc+ƒŌšV<{ĮsźŚˆõ o˜&(ƒL•#<œĆō­[™,¤¼fņäktbެ(&^G”źž5Õf{ķ";Ya¶Yb‘ŌŽõ[Ćęépf‘÷äcŃa3Ū|=xN–Š£­Ņ;“|ó³üžU“Øx~K[Ē0ķY$ĮÓ?JQŅ®c—X“AWķ‹Œī>æ•w2Ņ5(4ė9ēp“,>Z„@ Ō]ĻŌķ V¾xEI6’Īy9Ŗ>³¼‚łčĻjT–=?J ä;GĆɮ۾‹ ŽLWŗ2?!sÅX×| ¢|9šž¢«=ÕōŅł„šUSœōõ £ńeī‘„xvņ+ŅŅY# Fw19'5ó÷ö¤–ś”p4r^O$[ar:õč–šž‡©hÉöčž3÷ŸjœdŸS[5 ĀzV§£Z"ų‹[Érɓ°żŠ¶håķYÕć–ā}YVźčd«yōę½+Ć0ūØu=)ę/åĻŻĒJĒ«ųM&½»:ŒŠ#C!PT’xĶi|Jš5·ˆ4ĒKÕE‰ĖĘąu# üh3”zžCį źRi:ĢVz‘žFBŹ$+z ō x2āÖßNŗŌ"”ź*ŪžL€:łŠfvWŽ ŗų„k'†cÕÓM™@›{1‚•ēśW€üEƒÅxŽ;‰!¾øµøĮV‰•sėŽ*”KŒŗ_†“]M%Ó/Ķ ÜGĶ99Æh¶’źö&‘«Ny|ŽXūԚ'ŲņxćVXfšµ½ø‚)]|ÉTŒ;ōZhKk[ļDa‹«ćo ·ÓI/ō¹PIöŒaAĒB§ń¹ÉlĢoŲÉ 3Y~ęEĄ“ĄĻcXzē‡4kHᓸR0×’jDyʑ«ź–ž ‡ģPĶšĪˆĖTu85ļėćm ėzMž‡c2Ü34²€BĪ=:ӎć=JÖņÉSͼ“Č’y<éŚ5#éłž•ĘŽx#HŌõ«o¬÷±Į o( €÷Ēį[ šÖIo”\ł[üČC»‡Pi÷ž5ū-»Įoc Éa$Š’y(1Š»<äiŽÉāR¶ė«M P»šŪq×msšĻˆµI.[LÓŁĶ¼Ŗ6`}Ćܟ҃k1xv+ėYåŌē†-@d¤ƒØś{×_„i±ÅemnYg˜®K“’{s@›:†›L[8tČ]ąŌ–`Žø¬ü'i­ “ÕÄM·ēõ5ƒf‘ƒ¤ü Ń“żzJ(^āŽŁĢŖ”ņ‘öątÆpŌ4Éģ“‚Ā6‚yȌHO2)1ųŠ.ŁÓĪy~­ąI4½6KŪDš€\ü²ą·õÆ/Ó|ā ?kŗļ‰ ČęE‹1Ÿżj®S7"†™į_xĒS³µÓ­ ņ$ óēś W ć[KŻQmŃH’˜d t#Æ>”„ā®déū¢ŌmąR7ōČģk¶ÖģµIŅkŁæu™<øÉ©^Ē=„éZóé×÷׈éomƒóœ<™ć!*¹qyy>—5»ŚĶr8?J å¾ŗ‹HÖģźJØ8Ü:ƒõưćʱcšóVšæ‡5x"ŗ5A“źKc#ŠĄØ#ē’éwCS’E–fv;›s—.śĢOį³ń.»h±čŃĢ̼+āŖ ygŒ’iKĶcÄ ŗ: /ʄĢnųÅx=÷‰į×uŪ½^D€£8gŪŃEt(29rš¬š5ž”-m He“+%Į9ł}…sŗļ‡ŸEŠ=aÕ卉HŁŗąwØk”P(®„öĖ£–åO 9ĶdÜ}¢+k¦Œ¬ź8#śÖ.&·čy-Öū7[“ H‹žƒōüė­šž·moøĢĄe@Oz’$zƅõwøS,Q§™$Ø9®{Åz¦£ćSOp×¶‰nĒk©`ģGJØ”rŸGčŽK*;„ŗK #]ńŒä wā³ī|;”é0F¶éig)bæ1įsź+tģ š<~śé4ūė»wev8>ąŅxZīņĻP½’Īģgš†ēŹØ»&r¾!ŗńūǤŪ=Ō°Ŗ±Ś«ÜęØėz]üPŚÅä4Đ'“@8'š 2'»°œzTŸš’”“‹ÅĮ=ż«nO³:oé±ųŽX’}ūäĢ€3Š÷+æ[éV‚ Ņ ’ ĢĻŠ‚;Τ„ŗĄÆys;é³—ĄŻĘ9ė]”ŚśČÆ&‰˜`·–Ł_”J)‡į4Ó.4äŌmįaģ»7B}ėÆū|V—Q W‚&čYzE4̤ųŽšn”iؕO>UmÉ26Šź?:łŽĒQ:Vł•ćާęÉĪ=y­T„{懞ĻWÆļęŠ×…a*Æc°­`ĶuēėĄ–g·Eʹž#žŌ„ ±©|æŪ{m ·XQ˜!fǾkCĆZ^•į¶Jź$•” 9ÜūūV•;•5=2"ø¼†LōķœļXšˆ.“ŸµZ4Χ)óó·=Ē”¬Ü‹±Õéź'};Ėū°[å8,}*Ķvę7–źx<čü±å+žS›%ŹĒŸE{ØŹ·ŅÜ ˆŹKķ=³V“{‰; ŠJ‡ć+¹.Š]FŻÆnv†Qę³v÷#ަÖui,Æf—Mcse˜/ ĻÉŚ¶EAż§‰“ĶgAŠÖ#=’Iø±vĻn¤ѵ[ĶśŪÉ»A§€wÄペM.ÅÓāØ,ī­ąEKµ’^Kd®:ŸĀ°¼cskØBĶdH8é€MJŽ„sicÄęT„¼2n™Īcäø­Ō%øŽŻ쨻ŚSŪŌcüõØę |¶pi󻙣cĮ.Qé]¶‘¦Śź0Cu‘]L £ ÷¢/Q§c»Šņ]8Ć’“Vē@>ń®Ēž4] A+;nœ˜ųącÓó­yŃę«ā-6źxŠ^ĒįČo”Õ=CRŚ6ÖśĘm®7 ä0ō€Ü¹Øx7P½H5CcHļūĒXzWk‡āM- R!`~PWÆJĘr5T{œįšņYĻŅ\Üł€ē‚@'é]­“*É4ąµ¹?w¦ļƹå#9PW? ; `i„ŠeņĘŅ:W7㯧‹4ėČ„’E—kI—!wÅwĪWÜØÕ?:um%¼=­źVsĢÅ%ŸÉæņɰsżkė’„æ¦ųu©xi!Kcy"C"ØŻåŲ…J·C¶v=ö‹šÜ>ńv™ń#Į–†#2Ž[ʱķŪ äŗ“ī?•ZŸ°OķķEū)x[ĘÓź:m÷ŒōØŅĒWX˜3ƒh-ß<ƒĻæ„lµF’Ł\ū·įŸŠęš–½o Ċ’$›‡E?ž³_ox“OƒÄz-¾«j”ĆG»Ö¦Q±ĖR'āÆüö3’†¤ż“Ƽ]į*Ņóā—‚•īc2.āČ ¼yģÆéļ_ĮŒ"—Oe“ūéöčå|ė€ć ~¼UDZĪ×CĪ –1mǃLuXrW™IĻ=Ŗ8ē›)Žd\8Ļ>ō†łš&z󦃞Pģg4‘#ł «±$8ćßń«Ć K‰6±9#=G­TUĒ›RłEŽ)#ŌUŪ5u¢aĶĪƎTśŠŅ[Šgōk’÷žŚĒąĻĘiægˆ:™ÓüāéŒŻČXŠ81öŗsßż§ėš{}ŖDYeCŒÆF^ĒņÅsÕ6¹ęš¶ē‰ģ§#•%Fkįæ>ŠŚxuHbOœyw Ž[Ø?ˆ®9nD¢~QžÕ_ōƉ ń%…å»>¬mZ4Ż÷Šń·aõÆå3Ē> Ō|ākļ ź0, i¾9Tœ–łX¦kX7¹Œ£sƒ’ĮcŽk€Ź¤`O-\½ÜedŁ9RŁēŽŗNJ‘°Ö·tŸ`ßę0GJ–=Ø”e G8# 5„3£(H³5Ź4N‘ącocWn¶”EU%Ē·z³hKR§ęUFR’äŒw_j±ż—#,ģN8éD–‡Ld_ˆŹB+>ƒµz—Ā/Šß~#xkā—osęĆ*Ez į^ Ų9÷Įć>•“޶;)3ūXżœ’i]gDųb>2ų›ÄśtZrŽGiæqø€Œ:q÷¶ņ+ļ‚?µå‡ÅƄZ–½„ųvUpŅL—[HņXš6'°Į®,D\bŪ:”Ÿˆ“§Ę ļŪsö‚Šķu Ž]xSóˆn’4a *¶2OB\ה’ĮQ’b7ĮŸ|QųIem¤ŪŲ¶Ė»h—s0+‘źē>¢¹Ü¹b†éXžg °3Éax¬/£:šNq’;t©ō† u,r6ų÷`ūÖÓzœó‰ź ©KlN“¾p”Ę>ZŪš—ˆ¦Ž-rŹāhgY °9 +•īfjų‡]¹“óų~īX¬‘³ä#¦½m|ų„Öl 튱„¶(h÷ĖØGot¬A$²ƒÉ_jŁ“LóÆʇŹä ŠŅ0”¬K˜l·ł ääcJuęÄHŚ1¼œuļZ˜¶WŌ ˆŲ&Ó¶ąƒłz×g½°u’Ž`»H÷5Ńa'Š$Õōß³ŽFŒųኔ iīš4«HF7q·ß4œ@æāM6=*6o2\s“qjóč,ou¼‹f2ĬZ5īMDc©2;]_N—F°“‘Ģ‚čĘā#MqŠźK"o‘ćĮĪ­¹LNźŹpŠ–‰¼Ę#ꥮŹ)“ų4ؾŁ_h#Ū†¤Ņ:³ĶµĖ[‚²D$ó‹uėõ¬kkHcø‚&ŽiķŲą‘ü?ZhŠīõaek’Łł‘³ķr#Ó5Ńk+„[A¶ø*æ)<ņ5§:3¶‡žj°ĪeXŠŗŗ”Ę»ÜĶmpB#&åĮ¢o”Œ£ŌčuWŌ!q"4‘Ę}«’×5!xŖ²*† ÷š2k!Ę6ÜŃšŽ©a„ŪNÉpŠĢĄĒ”„Ō¼au~ö‚ŃŽRD™?,žžŻØ:.mŚk3ǙвƒņśS‡ˆlĆ·ŚĶ †™…CĖ…ÉmGRŲŅŖ#īVŪ€3é]~…m6°—M2(‘>ęīõ¹ĪOsįĖ‹č$w·d@Ü?†µJ‚}&{-ŒÅ†7{ż*¹k©x6ūģĖmj Ü+g.qł× xKÖ4łę[§YmŌ‚ņGćIĘŤtšœó^jŽP±e?0#ļJęüC½–Ÿ™.>Ļ3’6c­$óÉnD0 „-¹7Xjéo5Ö”ŽēvĘ Ųę‹ I”¶–žxx’fm¼ł®—MšÅĖÆŚUPFXńÅ#¦ėźo”Ħ@%]įTc9śŠāü]Æßjr“F1oēä\u„cQß<=,÷²kN•@»s’ׯNńM’K§ł›RfLJzdMžAm'•8VżÓōÅw‘ŪZĪ% ģąqA™Ķj͜:ölź²1'ž~µ­Ų”…eµU†Wåčhsš-‹½ÄńĪ€D:±=kŌ¼-eŸ¬h±`ą7÷E) 5¢©bńGŽcÕięVM<÷ė$AžŻ˜’Žę½†ÓS{[wÓgµWF‡)ō­`“2“Ōą[˜wü«kU–źĆRµ×,äŁ£!ņē€°ĖƒüC=Ę v¾>šž—yc¦jŚn.įžĢrH±ź§Üb¼ ĮśUī—«½š‰¢˜ļł[š‘ßx¦įZ{xā…| ™ŻŗÜqüėɵøÆ‡É(‡ž 1™–š•ģ°5­Ėy>Ašf”.¹ ąR²œ¦ļļ{Qp±ŅxŗMG@ŌŅ3e!µv z}}+kH‚y.tõSĪ=koQøMI$½ĢĖ“6r“¹˜āŗW‰u _µkK ķaŌ6»nI÷'Šń«ŽÜŻÜ4R§É•Ü:ģic¤±šĀxȑī#‘œnąē= gjqŲ[Ź[Ź #?4$e>Ā[źibąL,ĄSukĮ*—ņĢØ¤0ļB; —Ś]ō‰i*Iģ‰čMz~§čW–Ʀ¤ęģedۃŸ„;šrž ā-Nb÷zsĆ*F'8ó,@5”e, bQÆ#¶qJżeC¤|Čß7#GZŲ¹Óg0•@séH vr’c!ŗ–(»1÷¬CY[“b• ~ī>ķM„‰īNÅl:fŗ› GóaI$sŅ€6ÆŚk‚‹!8Qڱ5 Æ.īnį–]€Ē9ĒæĘ`kw—–ž-/IČ9aķ\ē„5ŌŌÖŌĶ-Ź:žōjwŪ¤µŽĪ×ķ×V+»ĖźMy›½Žµs4ĘÜÅlæ2’0Gµ!+sdĮŖ“2\°ÜxONēµyī·7nØķådžNsHV:? Įiaum5ź‹iŽu“ć³’ŲĆ£īEĒ`OOր2¬|+uw° ?ß`1łÖu®™i¦]Ič,y$ąēšz·‡4RŽgŗ•aUMŃ÷,Ż…u“Ēö8-±E—·bq@›8ėĶ.vR ~I8ėĶq³Im“],`ņńփĶĶ$ŪźöĻh—¼C¼ķ<…ś~‰ąkė‹‹‹ˆ„hcU8Mœ1÷5pÜq‰e¦Ė¦HႾ~l īn®t“µF“¹o0ÆĢ6ą«R“øŽrŽö{ˆ'øyŁXąĪ*¢ŹÖq;`É9£˜¹“ ’[ƒ2±ĆØōÆIšĒ„-nōS]¼•^XÜE-É'Ūš4‹ŒHuØ “‰e3,jƒ/“Ę+OE’ÖŚ/äx牓ĶSžķŠF½ń”V÷7?d–EUÜBŒńWoYČ`yĮ?ŅŗX“ėk[»²ŠćĢaøē®AV; 7IŅ4ĖuæµxU„ęeėXZÅęDÓŁźŠßS@ ØÅ3ŅG†gąb¶¼1gö‰1«–IŲõX]Œ"@ÓqĘoNJå(Õ¼ū¹®|³åó$dmē\eļÅŻBņe¼Ņ¶—8ć·Ķ/hO³'šž³āˆ³Æ97ˆr|øųŲ¹®µ®fŠåuX&-;Č G'åĮķB•ōŠæką=Å·×ާb²ŹŹq†Į^ł«Ś“¦ųz;Ż#M»ó¬VFuY-{ ¤ś ē8ÆŪź:ŵä:\žQŠ_žIqķßµC£M9“h5y¢—d` >“ĢŪ:ŪK4ŠŚŽ“Ń( I<·Ō×E¦é+ćmyt]*Ś‘Pg{rüŗU9„#óĄÓXź7³¼r„ŹIåĀ žy¬» ]±Óõ -FĖŁ·Fp~ļj“h&y’|@4wÄo}jÓĄĮ‘%b|Ł=j׆4[™lV’ÄŅ 6ģ[²*"ī`č3JƬúšåÄ׽Ưmp°+HK|¬£Ü~8¬ +Xœ°™ GƒĄĻZĪFR—C·Ó&gŠś8™ŲHĻzõ; h~(’ĪūÄ q Š‚ńJ¤üŪō©Š‚Ö”öv××ö¶Ö»n=ža\nėĄ?ē­r>#Õæ³åFÕ"šKm2ćvĮō¢Ć±¶ßl“D}:)>Õć9æ•k’m^A¤“Ę³ß(!Iź 3R®¬jZ…Š>„Ų™\Æ$œ×¾x^Å>ĒopC¬Ž›ŽįĪ}(lĘNā’f¬RĻövīAldŸ©ķWVķūš¬/،ę³ä.‡Šeń&•¢ŽXh7Ūź ż«? ģµIļ­®ük«Üź±BŹcTęŒ*qކ×īvŽ"žĀ·jp(Ÿå1)? ¤×ų§Ę–qiiŗ^ž.„•Hī#?ķzō¤Ģ¤pž ńc²y‘ ģy£ł7銱¼zEŖ@ņ$Ļq1ą7V9攲c&Kąļ éwڌ3jż–0 ņµī¶^%Ó“-6ūN¶6ŃČĖ“ü€’¹õü(±¬dģ|æć_Vé-ÉņįG.ĻŚĢOcŽŌ¶ZĆjš}¦•¶F1‚©ø˜ŸZŹW½Ąµs¤Y. %Sr €chśÖׇ|=ĶÄāŒ”;÷Ōc§Ö¦żKŒŽÓF˜č—šE§£5Āɓå 9ÆgŌü¬x×Ć·cP¹›ģ17ŁĮ#w|ć„kĪ‹ęG†ŲųĀk+%皩±*汞į]ōmq^=/H·‡?{Źżiū[‘)tæZhšCig·Em„˜š£ÖøŸˆEodŠ=÷±¾@¬H<Ņęø)Xš{;‡KŲyŃ‘šŌŌ¼H’Ģöń¢ÅęĘj9u-3 >}Rå!’ćʳĪFvžõ×[x Īo-I¼Ś¤yäćøŖQAcÖ¼3 Śi°Cu‚ĮpėūāG̣ބń©¦éRÄėK€(½O©Ŗ&Ģõæ‡śłŌtų®aø²¶72‡'ßÖ¹x/ƾ9ń6’4‰ģāŠŃüū¶±Ųē =(6šœ×Ž~4š¤©mØ%„“ 1™¹i1Č÷Æ—ū[O¹–(ciŹ)GĄ>ōŽĒgh·ŚÅ¬ ė$W ‚G\b¶Æ¬eš Dž1wŻŽ¤P:ż:śėA²†(So|'i#ŌęÖµF†Qu€ nÉĄüjć+äO“Nqe vņū¦¼7ĒÖZ”/ęķ–{§c± ?9Į­JŒŗ¢…“żm`Æćx”n'Œ÷®ęßJѧ̗Ŗ^1•pXQYĶō:>|ńē‡$]Zy”Ō0„æ āeU#·–2f-µG|’œÖ-Œõ†ś¹¦Ę+GDlˆä·ØÆań–Ÿ­iž¼×¦¹2Ź„łpŹy u 5B×a»)6›rŅņøŪĄZõ†^Öµ/ˆ~šž“§K­Ż\.-Č8Śx'šØ{Ó¦}āļƒž"šļŠõß jWvsEiž d®?żUįm/ŅIŅH­ŃˆåpJƒļō®9īoĖb—Šuhõ)į–Ę(Ćl!•W®kĶP¹†g•R)?7’^³±ĻR”ż鄤[’dēw­}>o“ŻyDļ°†ŻŚ½ ‘8)Ļ”ņÆĒ?†Æc¬ź#ѼƒÅŽłƒ©;~SóČWƒ]żŗŹkX.ĆbF8ǹķYóµh~‰|×,ž9žĻś·„ļ.ķ¦ńŽ’’,HĒ;!ĻŹē<ž’„{‡ü»öÆ»ż˜’iĆšĻÄĆšēÄ'ģ3ČFĻ/#§S×­tÓWŠčēč[ĖbK"gҦQ%»ē;Šō"¾ćų'ćTÕ4Čü;y2É"'īłķéU%”„µ=WšÕ‹E©ŁŻĄ·5üiw -† ǵž·üĆö&ŸöGż uo 蚎Gį VćūS@iAeø‰gˆ9ą$ń銘³™ŹĒć–³öŪVXŅ vŹ;W,cČ2¾ķ ķĶhrŹ]r6DEč;ÕO4ä±%qA‘éåg(ä1Ū…ĘŃž5)hąqelŒŸZ„+,ƒ3£­Šµ_‚Yb™ęI¤\ćåžķl™ÓÜōxĒ[š7ˆ¼#ć j'IńV‹|—š\“óøćņÆō•ż‚’jßžŲ’³7ĆļŠz#Ēs«%ŖŁk~źtG^攌£ttØč})®Ł–”ƎGҼ7Ēž7ńMnm-f·ž3<ƒ>[dr+•ĉh~l|Pš»XA5¶¦v¶'¢ó"fæ›/ų(oĄķ/CńLŽ=ŠģŚĪ'™ ķ\™¢?Ž÷ž•P1gå-ōæ"&/ł¹č°ļ#ÄÆ1G%F:bŗ0’1¦šIwoVF“ŒƒõاRč¶É½d5{hsŹ(dŠéq2ŹŲcÓńŖŒfY›Ó”ęÆČ’F‘¢Į\†)ü2ŸćēĄ²Ēw’3Jmļf‰žDÉ*ŽąW"’œ’莇3ł?ż½e~Ču_ ėŗd—:=ĆK õ„Ÿ:ٹ\··CōƉZ)”ņOäļćøśÖK«9*3ŃōKOķG Ī"—nT·ńŚŗM;LŗµI„¤IĢ3޳±ĢSÕ5¶K»£3Üc5Ę\é·Öśż›Ż–t‘'¶ĒŽzū×e ¦rjēźĮOĒÆi6śYt}I#ćߟ/ܟνrńn ņDĄ”ŽEvĶ†,c!^VŠ[ŒAŠō£“Xfˆ8ūBņ£ZAō9&õ9kꑌ›xĻlSō›Æ IRU\…2kTfكāx/9Ż„cęķ^x‘=īĀČÉĻ ö÷­ČŒµ6m ó® 1f$Ąõ­²—v®A‘ŲĘh4'¼vŗ€orρ÷a]6‹ŠŁ¬–Ķ›Äå•īZ.ց¦Cā[¦[üŪ`”Üźzöė^{ć- |?qweĆu2>7GČĒØ"Ÿ1< ½k«9˜ÜĘD*¹ŠŠń.« ÜQ“2HD¹2‘·č{ŅVz™’n29 ½0kFőf†ŠĒęć!G© |ākS«Ķ ¹hdm8Į®ĻĀŠ Em^3Ė`CrEk…ģŽ[[ym|_vš˜ŸMe]æ/~¦+Ѽ¬®1 ljDÄėüW Ė©Ų¹Ņ—³9 ÉŚZłÉōė£qyoęyU‹ü+6†‘—¦ÜĖ!å”¶JƒW_²M”ä9Čć4$T»χ®ķõ'Žź—jŲĮė.H Rˆ ŗī$p+UsJEŪ«;h£Ž*[änÜz× h‘éövpĶn<Ę#'ŽØ‡ävØE—t‘AĒ8²>ī9ČÆ3Óu¦[É#Łū•ldŠøŹĀ‰­«ėŚT.‘InÓÜH§§}ė‘Ņ|[>“®}šFa G½6Œō=ūzR¾ŗ–‘•©xŗīß^W1¹‰²ū±Ōę¤ńSCā‹[MN2ĖØ¤„ł*NÜc®:w5i_q“Wšö€²!KņÜ®zżÓ]ij‚ąXÄѳł~lłŃ̃—”ÉĒ~4ĖĖ“ņÕm•ˆĪ{żkŲōČ]Īę;ˆäYb‹É_­båcr¶Ÿ¤’iĻ'™lŅłoŸ›µXńχ%–Én­-”’ä Ü c€1ż*T‹“¶_';”°ōī)¢]JøŠĘć[—t1рˆ8«š-ķ¹ŽxÖD²™ *¾£æćLČįtA׳YsĆ ō4ČgO ™†?³ąž3U.õ#Eæ94ÄįŲäļ4Otgkpx­i-‡œ1=é®6mBtƒm™0ĪHöB}:mIÄ·$–\õ4 ŅŅąµÓ#.Ä1č=I®ÓPńæ‡f²Ę–DØdĄĖžzžf€8č.ā Ģ„¹£„:ĢŠĪgHāø#ó4 ‘^˜–öQŪ4¶±yČøO½tpxÕn “Ó^Ā.Q›F ÷ \Œåµ‹]÷WwĘ0 zW {āĖ•½ŅᓱóąIBŹÄą…õ„ög«ż½fQX“ņ®sÄZQ[ °†C»•=żė9K°ćē—Ķ£]4ė3£ˆńßµTæ†üµ·„ sĘj¢ŸRģvśŚŁŲĆēϲrsČż+Ŗ:ŅŪĘ $H Dö]SÅߣŚ4’Ē SpC‚2@õõį÷ś‚ŻÉģR†ļqƽb=§Ć—:{hé܁īäRĮ}x㟭r:>–š^߯j£ģńäģŸĒ>üPÜfVŌœ|øź+æŅõ«‘o5»•,T«åAPj·Öžqk,m<ē±j[yl¦uh$I]ĒĢėČ5\£,’dˆ‰C·ę9UŲéöÖl‹";ŗÉ?w؊Ņ1°Ž4čƒ1W¹ÕźZ—l¶žIa2ŽĒ@7ūn+K£ Ā9BdõŖ—׳·bŽÄ®OÖ°4ƒ4¬,ōūČ#y iÆt źkŖ[A¤ŲĒ_1·Ė÷ˆ¤hq ³žžT•ē™»ĮÅi‹+E±·WLän9šókb=cÄ&ź1&Jƒč+N÷[’ŁZ،EĘüŠeį‡ŽA§«²xĘ2{ŸJń­n RŪXŌL-$¶ė&beūr’U³ŽŪbÄ©ņ¶ ł¾µƒ„›.ęā;«H·ČFŅOÜē­‘ė7ы«KE¼š5Ā€ƒØĒł5Ēźŗ „¶ĆHoj MŚŲĉoŖDŹļ’XrAĒ„:śĪĘ ŹŚĪV Fh.™FĆRŽID”Ā0\{W®éĘb&ĆīŠhC/©yÖŪű\†Ēé>ņī¹d”śŒŠ=AÓ“Ėé.&¼1š„(⮃Q‚ŚßNš]6Ż¼j€2 g‘Żj6O ć[tčp1łŠĀ²Õü»²4™-äCØ'ęę˜ö:|×–³sڹ[]Aeę4Ž6Œ}ź Œś߇4ĖVIhJm8ݚģ¢ŅŅÅW©8ėĶ!Ź]oRŅLĖ3@ėĒZå¬ģ¾Ó8¶vteļA‘ŪčńjšmŅÅcp)Ėļ ?„ZÖRćWu‰ŅiPšÄ}Ń@e$ö~±µžFū /–„±Ą5“ FŚxŠČŹĄē9ā€9’jog{%°łłŹń¤ŸĆ—z֐³ZȰɓśSJągŪųBq(ŽåÖČÉ5¹ošæI:Ėź²k—ņÅ[¢(Ć0ź ō­c B=MŸ¤7ŖŹåóäd‘[ž‚ĀK9d$yĒĖ=2ˆä‘kD³Ņl¼N҆‡ķ,‘P€Ģ¹ļX:ęæ”k¾<ńw†ęŅ%Œ,[_?)õ¬Éއ‹x³@“Ć/‹v?a’ P£r¾½;×Iįķz]NÓ¢’\Ś>$mü’Ņ-lhcŻų‘nõķBHīĖX–Ąq·š§½Ż¬ÉæĪÉäąõĶKÜĘQŌĒžt›ĖYTSOØ­Ū j;÷\B‘l\ƒ5"±Ź^É3Ž3Ę”° sǽz—‡>H'›LšxŲ 3)Įé×ēzL3ź—bIgß¹Žy&ŗKua±”N0hÄ׬Ńö”ī'±®%·{p„1{=(˜×­/LĄDŖpE7Ķé°“¬­sVžéćó _Ńō+(āµ–%ņĮĄā¬KØCc5Ćķó!RWvĀhÕę€ÅŽ ¶H¬tŲ£fd^[Ŗ—…lmō™×_–ksĈrA#Ōćń­b“5ŠŠv£­_I­7•qęEŒ/<]¶›vĢŪJ±‰É#2+6Có9Kæµ’hāPå>čć€q^#2%ź•vĀįž“‰;=žĘļNŽ…G“īĒļ ėd²²’×+ 24Kņœg4ćŚ¾«t5 ˆ"“j”h?w=±YŽŠ;ĶM­.Ö²Ų³»2ø#”QgŠń2|ĆÓéRkʉķ^=슈YJŽ¢ŗČ¼]e§Z®’-Ń'ūå†yĻoJiF79ĻųŖÓģ’B¬ŅÉĘÓŪŽøŻū_ZžŚĘČĻē€|ø"GlU81ø$W—uهPV §ī°ąŌŽ.¾’źE·|Y1ę1Šj’čFuV¼œ! 0ą é|1¦¼w²O#“°^8Ķ JĒmq©łņ$aøz÷Ø­µ)c¹tˆ¦ €{PĀ',Θ‹9k.ĒĆś:żµŚ¦9}Ģv   -+ĄQ™å-ŚŚŃIåF+6M,ŚĖs±·F{ädž)Æ2£n§“x«ÄVŚ>¦t˜^ōÄX•9=+ē_é²]$“ %ŗu4ֆ±·C@ū)†XKĘńæŹĄ@¬={Į iwÅ¢ˆ¢–“ęÜ\cēWĶŠdz-Œ×\Ćm ß»‹2¼g„-އ}¬^ŻŽĆ Ķ`¦@ dž*9H•ö+ݱ“–W““ ĖĄ#­iųr 4{F"“OšķŽ”«ā;'QēŖ¶^2:ŒW±ųB³×“ē¼Ń£–į/6cŒłb‚Ļ7Ō›EѼK<÷QĻ‘ĄAŸĖ䯧ę+ƒ›ĒWĶÜŁ[Čŗd,q6p]³é@õ=BīęK) ¶Iī7bBXäƒßš®ž9ē‹E€™a‘ŽJ‘@QŖOyØŪ÷“ōbG“Ÿ_Jś{Ą~8šĘ¤ĆįŪ—“ŽżŪ|NŒ½ĒŻ>“”ć)쁖Ł/m§¹#iČę¼FīG[+µYD“('p_¼E2ó<Śīī}FÕ%»ŠKy—€¬1­yž½jČ$”1ł½;ŠIāŚ–²ÖĄ‹ŠįŽk×5ƒo4pĄ˜ß’§?wÜŠkOc/LƒĻ™¦aÉ>¾õ×NŃā„eˆ…źh,ܶ˜Ēk–܃¼mc’S5撾ߨx{C±Ņ&n–|Ļ™HōՍ˜Ńęŗ¾©āSįm3ĆzÆŚnl¢ęą śžUĶų}.$ÕķČČTmē§ćH½,}=įČv®ē•v£ļ©ķ^™«ųėQ°ŠęÓß|’īc’ś4»™Iw*k3ź>æ·Ó *‰åņ'gó®>+‹=ċČf¾øO1‘#Żæ:"blßźLm®• ‡d€†%rMy~›ŖC4÷kt˼m±TŠÖ,GØųjīON¹šÉZāŽ <˜Ę hŚ\Żé2É?‡#Q‘‚“«Ęßri—”gT×¢¶Ö4ōÕu 'æ<Ų“žēõ®ƒÅĶ”śšō.·Jņ]«D?ŽļŚ‚ćöīMBkh ¼†8äœ~īFĄ<ąązÕæˆ‡Ćö03\%äR.W… XÉX|‡ƒ_Y[j\ZGŽWśWžčš;M©Ķø b ƒœ~…If›F¾ƒLkR’Ū™ ˜äĘ0’ė×£Śj’@––ö©m° Y ēéļRŽŗ]æ½±¶‹ķ˜­.WKt$šŹÕ#ѵK»+}r{G3ęc@fQĻ“ŽåEŲń{KÖåń”m¢éO!"Ż”d©÷®f_Ūj &0ʹ,Cß”­b}¤[¾»§XÉwy$p 1Ø=NqųÖ_ŠŁ¢“FŽa3ÜBŗ¾“˜„±ēö:BZŻ[·čĄÆĒÖ¾‰“ń;[Bw7†Įč;ՉĶ4qvž"š+‹‡fXö¹=æÆāi÷qŅ’8'ó\4»Š>ć^Ć­Tbf‘ę—ŗž«Mk Vó!ū[Œ×`Ž ¶¶±IŠO2nŒ ÜćŸJŌ|ŻƒĆæL¶°5źłv.Ų•Ō{ā¶t«‹$枎ßPK˜-ŸŹeæ½Dˆę=3L¶Ń† ©Ŗ°k`yU?|‘Ēō¬ł-ļ4ˆõK”±…ōēłć$s‘CÅEˌ¬`YŻßx‘#Ōu :m:Ż[ŹEäØīq]V‘q繓±fڧqšøÉ\„ćÆ<śMõÕĆGtčB§ęlóŌtƏµ=Gū “?)ą=‰“üźe+šĀāü|@Ń­µi¢“I•ɘ²±(µõ§Äé÷k–Ē5†O—p1–’v’–·>ŸĄ>,ŠłÖx^ŅB^%C†?ļW+®ÉŖxv+tÖeŽ;é²”Uŗ€{֊WE؞}­2ŠmžSƒ‘ҦŃc‘ŠłlŖ@Éē„sĶh7 ׆{Iy_ĶGL›„"üDזŃt[Y–=9dŻ€2wtūŻk‘·ą½OR‡ÅÖzŒ³MujßŗdˆĮźÕön«ńFĆĀ-.k©@męˆĮ¾3•™Hī֝‰9{?®­5½Åœ0˜ß• g“޽CDš’Ł„€«£óc”¤¢Ąāüaj<=rńÉ,&9ŗœēŃ’JÅš'ˆQ/b’Y£ Ī7ää.}E;u£tOJ‡mJŲJrUy;±W.m“Ķz+«Ū«@–Ń`nČIéüŖœĪˆ®‡˜_YŁŪE"$؃qۃĖŅøÉt½BÓuڬ‘ļžŻzR•ĶĪGZԌHeRīƒhs×>µēžÓ`¾Ön$ŗq<ˆä€‘ǰžą{œÆöwŁŅ Äæxu'=kwM×,5ū„Óo/b’ć$,.x“•Ąē¼_šł&Ō“ ØćŒŚ\įĮĀŗĀzF”į锵·KUē`PLÆÜę·B8 očŚ~‰%¼Ö %ōņĢOÜć¦+œ¼Ń#ø³MĒŁā?)éłR”Ģˆ¤ƒObŖƒxQ¼¼³‘Ć\0ݐ8õĶbägPeę§2Ķ‚Ž\/"NĢ=+Ø“¼ŪlUeQ¹f¤ę“č3ž½2óU·°ŠEVgś¬_Z›SÓ­¾Ń+­ĄĄČź~˜§Ź(³„ŗÕ”±uęY¢C÷ņĒŚŸ4éq'ڤ!€!OojFĒU£Ōåž ō Į£ĻƦsxöš«y њņÖāÆ"Ó”€q÷WéLŚ4Ļ*ų§į9t»øZŹQulA +šē©č /ō}2Ü%õܷ͛3ciĒ’Ŗ‹vzī½ń Ā^ҚėGš=[[h—c$cZłĒJųĆā{ŸYĖyuw=øF†KuįJēųsŅ©E•”ÜŽkÖŗ…Ō7ŅhöV®¬Ņ3æŻ³Ž½7įŽ®4[ė?ų~Qmāh·yrĒß‘ŽPk7±ŁLӇUhn/ÆÆ^īśYšw˜—oRMx׌üc£ź·÷0ŪGoŠJį ~•Ė(Ü©žv·bhÕĄ<ćץkž%’ÉĢvÉęĢw)č+ZtŽG¹ż|<ńt.𶙬iN×B[Młsž„·µæ*õxąuŽžxśś×”Z+T`£bļÄÆ '‰¼¬C #l‹c.ēĮPTvZüÜ»k™fś„‘¼Œq(Ę60ćżjóZčuRg±|ń:|'ń曪ۯ—kس¼T ©V?)aéɈÆaż¦<‹āĖhĶż—£Ow lŲĮŻł®ŖRjĒIżK’Į1i;?ŚoöLŠć¼Ō÷Ē>#O揎˜‡ øžæ(š5śAįOįŻJŅīVe$VĢOCōYõÆ YźP²æš€±«ņCž ßū)éßµ쯭ų‚ÓKø¾ųąE“TӅŗ%ÄA>d÷ʃĒ\Øõ¬oc’H’>/i•¶§x/’6Œ§+“ÄĄżĘ^ÄW•ź^*įX&8o›ˆ­Žj”ŁJeŲ¢ Ė)Ą#ž•š^h™dYƃ†ąbƒšNʔчV”B ˆćń8äÕY#Žę4i ¦ŠżćļNĮїa’L)ŃŹõ#žjż¼Š³·Ÿ(‚ĆÓ5PÜģ¦Ķå-mw[£I"”ųĄ=ėś’ƒ’m4ųūDÉū?x»VTšŠ­£Š(ß劎ó›Ićę\Sņ:ŌŗŪ^³j!™Š1”‚Ž:H‡Ćź0k‰Ōģ|ŲnaxĮ,¤®GCŠäkR$ūŸ |`šÕÅöŻV8If•ćŌą‘ųÖæ*’hļ…šo¾ų—A“E±»¾¶ŠIVB?xŹ{\z{ūP™ü¢x’Āśēƒ<]ājjL–ņ³o+…pN@AģÆ(ŗæ%\ō=ńé]Ī¢3vgƒsoćåSĪGµI$؝†-ž?†“R¹Ē!~ŽŪŃ! #`‚N8¬¶‰vI ē¦3“VJeõXdŚņŽ/Ż$t5L[ ž1ĒQA“ 6’¹yźÆō­5Ÿ˜Ų:öćŠø³§šgŒu懾0Ńxs=Õ L©čŸCų’Ÿž­įżSĆŗę±į}ZŅ}*ņĘ_(G!Ėm€pyčruf2‘„įLé×Öń]ÜÉ 'Ģ)ƒéķ_Cų*ōź±TKŁB;l)øø’GÓ­dAĆxŽĘķ5ŸJŪ$[F[¦ÖĒ#pW6ņK:Ž •wū›Ŗcø­©T’> żõ;}k­GPŌ#{÷q×oL6~µ÷|W2Ļ 80¼NĮŠć'Ę»”#’gK{HEÄytZŪŅēŗøg”’‚6ÖØęū˜.ļķŸ*æuH‘U"ŠźÖhķć‘£Tਭ̒4ļ/ž—vÆydÜGéžÕ…į­ ŪYē@cw$N6‘’ź­c"mf> =;TŠŻŹ¬dģĄōŽ_iŚ[YłˆŖbLž[*ĖLņ}rh§»ŽŽĮ˜ĢJ€©Ō.y$W„ų{D°ŠŚżā„EWœ®3łóQ&h¢Gwā«a|dÓÕJ+pøėģqY¶PiźRÜŽ‘*ĢĄĒŻ©‹°Ül=[BH¦a‡r($ęø½]tŃABėÉ'ŽkS&Ž'[[qĒĻüĆė{HŗkĖŪkXÕ¤¹rŠ ćē{ÆxfnŚ@Ń`(!ŽH8łæ\×EįõMN¹¬xu#s’ 4ģiŠóöM÷3›– %…kh‚ÅtÖ¶ė¾ øw9õ¦ä̬u×_ٳ^Ķxķ ŖWó·×Šó“»ĶFśRĶē4lc$ć<HŽwN½žßZ3#ż˜ 9ņ [ń.›>”!›O]ĢO#ĶiĶ7‡4ư$0Éå¤Ćļ ēŽ®x†hMŌK"P0½Ļ­[9š8ūŁ”ŠÕšrw“Ą'­n茤±i‘Ś™‘ĮbźN7o„.t+.õūˆāXY_ śąV“Õ¶ņ.g™„8dŖ@rww¢]jhK”d ĻŻÕG¦i÷L.Ģkŗ4!N9 ¤WŌ“m:Ki绉g©Ž@¤ŠŪNÓÖB=ŅgqĄę®=„Ķ(#~ęB¤Œ7µE©Ž\\j ~`‰&n~A…Ą•,qv9+Čća;IbK)ē»Ļė‹8t˜īއB9Ē­a%©¼O`Ņķ¼s#4‡#rØf®Yj ,”œ  #dg”3W#Ķļ“[/ ź³Ž›‰§†WicR¾§ ­KŻnĪm4<Ķ giąšŅ23o±ē:ŌÖóF.­\.ÕätŻV<9­ź–öo*¼!`sĶQœdTŽhu?馅ä«zŠŹĪs…ōżz—Å[-B :łbŠ7™WĖm”G d £.Œó_Ż5—ˆN0‘nŚ2Ą’³Ļzö{›™m-ĢJY¶g=j$Ķń—Œ5ļŲÉg½tKpÜ6w>ģć@3]w5-°/ģn$ME¬Ńį#ŒØę³Ź|KŌ'ńOƒ­ā[¶Žī7Jē ń®oĀjś†”¢‘ĪĢŁć+ƒŠżqS(ÜØŹĒ·xŠCsblå öå÷EßiÆ,“Å-£ź?fžŽ)ÕpæŅ…óž³i¦ėŚ@0B4ō` ‡oõÆ%ń&›öp둸!²¼n¦C8ż>õ}J“Ąę$l•žšō4𿆔µŌT(œ£“Į½؂Ę5…9dW]”éśuķ“?Ł×픃†ĻaķN;[^Ó"{4ņÆ \ūƒłĀžūMÓŻLŃ"©Ęā +q—‘ŪŲź­č\ąŽŌž ¹¾†ŅŃåOU=ELöŠĶšĪ§*Č^ęL(n½Ę+³ń/Š#¼_³Y[Ē,mRć½a-Wsͬā¶ÓŚąĖb I÷Ł×׃Wõ»haŠī(UݜŖąō«5Ó>ܚœn­±7Ać5ķ¾D:ÕÕŗČņBQ’0sÅ9Ł3Z¦ž|Å?*žŒ`Ö ]BäŠ9b †SģE+™ŁītšŻż®§¦½Œ(#³$«ĒÖøwŅvŚ»©b«ŌŸJŅ2čGż ¶Ę[mĄ&N}­ż6Ö(tæ"Ą4‘_i9Ą=²iĶŽ‘jµķ¶’ ¶af 0<ńY:T3ŚĻ2LoįAźkTZÖō‰£ÓRöā0CŖsī+M%IÉõ —BÕ^Ī}ź„.b9\Š{jr>¬]žIÆgrą¹''½\[ ›­PKruSBųQHھõVyÖÖ q¹–I$ 01Œ÷„ ‰Öǧź-a»eĒŁĄ<ąUŻ;XŠĘöŅÖt+&į·#©©źSi0Kfn÷E+:– žsōÆÕüKhŚ¾w§ÜÅŗ_.9|²T·§ē@‘uc”¦™ “\|N< ½Ws^sqˆIq‚ŠÜsց“č¾v£v"u £“ƒ^•«YĆd‰;Ŗ)UėŽ9Ēń-‰„¢<”·õĮjŗ‘¼šPˆ©ą}hDlI=ĄF!¹Č\Ö½õĻ”nP1÷E8‰.§’ģaĖéN³Óõ kXM:(®BüŁ#4 +“XI5µÜš}ģ9䢱㔮Ī;9šTŲ8•yō&‚¹N īį»ɏߑ] ²ŚźŒ±»Ff#ęÅ;-#MŅ“łĻ"’–›q“ėŠÅŌõ›I/‘ęlG~;ā†j™n8ĖN’…„8>µ~ę8āœ(a"‚3ō¬¹ŲĖ“›&Uņ7øčzVčoؗW ČĆęøŹą7\ŗ¼ŽęŹŚŚ5šÖ@ĀLžPö®GÄéš[DmćT¹C—ĻÕŻ3Pž8Ģ„³ą|øģkŃÜIu„Xź¬/+&6«gõ„% f¹y­œM³ä2ŹżkĢ.åµøøC#+’Ńя­(­c¶īaot鼂OÆź¼3Ä!pūNŻŁČ©’`TÕōmZž8ZĄĖrĮōSĒōü+‹³Žk9XK1‘‚cPek«l*°U £?€®š}gķ° vTH£œŅ•ÜVwIõfnéZ·:…ķ¦© ĄćģÄ|ćūŽŌm¬³½3l󜒭t>Ón­`iāaäģµ4AŪGs;,"S‚ĄšOzōgŌb tcĄlŒŠÕČ u(“o ŲĆuؔ’!·[8®ĆO“†;HJ©‰Ī}Ŗ9ʕö8ųbk×ÓµøSmœ-·§Ž>¦«éšTš£=dC#cŒņséP5žĒoąŪ½Ų‰Ö „E€~ļµy_мk§_ßŪG„“Ž‘®ÉUqĮƒHĘÄŗG‰mī5[{·Ž0ŲP[Õ×ü^†ÅOöN•{JŒ³Āw%FF~½Ø(ń/ټśóŚßˆÖŅ5%¶āōžUéŗŽguŖĖzu˜ÓĀ©NIoLž“åmFCc¤Ķ€{ńĒ„y•¾³uw唲+ī#hĒÜ’<Š#{CŃ,'¼¶MFAonĪ eėœ÷£ĘUœzżŌö&/ģõrwń@š9ėĖ뉀1ŗŖ…ŚŸ/ Z>†6]Nńn›q·?…|šŲėīōŻ?dDęGeą÷}k‡ńŸŲŅÜ[H|ŁsæåĘ(*š2­mMTøbsqėšō{f YįžŹ@Ž„0 ĪÓAfV­ā¤‚fx3ē»r® µ›«u/„fkR3·Zö ȼĖ{øF dVņx„iÖR%ČY„ÉPxa@e¬]Xß,ī°¼(ĪvęØx?F¼[Ū‰aS$(¹Œ@~!½“O‘įLŚß"ć'±÷¬ėVßÄ֐i÷FÜCri¤RW:=6=6ĻGZ² …nAźjHćY¢/#ógžōŠ³ĘĢš?Ż‘ņńÖøĶwMMÜŁķóXn8=ż)ix~Oķ[½:9nŸåeo—ó5é÷šCé‘Ék3ŌPvŃż›>”Ņ%ĢmŹy+ō=«3JµŸJÓßķ3's’é@w«Ou>¹$Ó¼¹c¹É×¢čšń“¤Mp¶ŅŽĒߔӰ fśĶŻłˆˆRb ć%‡lW}­ŪŸčÖ×*ŠŹ’ Įū­čEl™QæCˬu‡ÕRźymeó‘ŒlHĀõķZŗV·%­Üv¬›b'œt_sQ7Šw±zźŻ.“ŒNĀóLŠźŻģėk"€8ļUÆ<'-Ž%ŲĒĻņ‚:­02tH ¹Šā9ċp‡hŹ‘“ų×į[—ÓVD˜Į1}ÉĄĒŠB04­*fńåĢĄ5³Č6"žx®«YÓRßĢ6øLŲ&€8ßģĊ)ē¹c!I 8É®j×\˜Ī¶n²N#’hŠuq{c§[|ļö’ŌĻnõĪ\Ļž§fš\RˆX!$p1ցŲö›]fÅt˜4ų,ŹĖŹĢO=k]ŗqg$z|b_ā*äŠ>Fyl¤²ø†HÜus[–ŚI¤³uĆcr€:šmĪĖ_šE¶«§é÷ķ _m T\¾§k—ĆR •³d’/,ķśVœŚ'”’ŗ,TÓ]K#æl÷~”Ū]hĻ4eŠ"īć×rgM-ś o/ż?˜äõ…ā]"Ś|jvń†ó>bœJDœMђŅ8ć@U ćozī¼3©ŻOŲŁ·q×¹  «įHīļ&¹‘;”Äcq®ƒĀ~²šõ®­ē隯Ėr0’±9€ä}ß® 0Øh–¶Ė ˆ‘ķӟƲķ¼7mÄ÷ːĮs·±śR§·ÕāŅm’åÄvĆ!sĄĮśÖf½£E¬_YŽZ]ÄŽX7ĪĀ“ŠēŸÅI⑤OlŅķć;Į>½EZÖ¬Žqoo€ī˜ ząUXŃĄĆÖ$}"Īx#‡Ķ~„õÅ&£x³•½Ž"“3”u-ßŪĻwnźž5Ü8Ķbų~Ą¼¦ŹÕēä·|z@ljö7ŗŁä–Ą/_’]`É„j:iü±å)ē­DŅ1hŁ·šķ†„c3O$°Ż*€ņsV¼%¢.“ŖGvÓy8ĘķU)t*Rčmų‚Åo.O™Œ2üøķ\-߇åŠAœEŠ=k##£Ņ|«’hŲÜØO%A,®p2k×t?@žOŪä0Ää†däÆį@%s̼bĆĆ:ķĶ’ČŅ„c³=Hģk•’„²Ua…_$ŽĒŽ‚½™ß7,ļ4qöi¶¾P±šx gęüx¤ŅüM§Z¬†ą¦Š„ŲÅqg©CāøÓ­¬ĢšĮląÉĖp3ėłWˆėś€+q28h8ŪŽ‚O$“Ńīuię»—cŒÆ8Ļzķ“įż«XĻyućŠc­v(xGÅzm£FśŒgßnʼ߅{Ͷ•£Ķi-óDβ!Ąē„fåŲ9O,ńtvštVĄĀÅ÷•t5Īéqź6ŗŠ¼ĶĀ&čḞ9čZ¤ŻŠŒNRÓõ»%®ā˜ÄŁ!³…õ«įÆxßA–Æx‹P±“4ćeŅ’tŃĖ©Æ)¹«ųŽļÄž1¹ŌuG6Zt¶ėGčą}źl „ŁZ ­ÕI;[’~”ұ”•“7<=}m~— ),c}k”¶š;I¤ŠHK–;z3¹¦G6¶8ßčwś“°j¬÷ e#łœzż+7CŠīļNŽkvūĻĪ1ļ@ĪĖXµ¹]^öHn休ČH¶ņTc•Sß'ÉAā¹ÖŚā"ā!Ž`Ąl84% >³ crVĘ>n ŖzćĒui8·…vn¦‚9 ń…bŹóL°ÉnŁgƽr_šŒi夿`“eÜGä >VļPj•“(ÅąķWK2G}i<22|Č@aķŽ¹øäæ–[B–7mo) K吪źsĻ4,ŚųŠźĘw“ÕĀ*—ß#”õ•ćy`Սµå“é*†!O­JĒ·Š, '„o?(/ü5µ¤ü>ÕÄŗ$ÖóŲ]2I#ĒɄc”ĒįY«lĘ}£xNéµ8bŔnWqūÄēŽ+ߖóBŃoōń«Äŗm¤<ļ8įIīMS9³ę_Šž-“†}OYŃn“ķFē"8RAó.‡š®JćĘEī›eÆA¦Ķos4K–ņ¦œcbGš}·o§w]Hī“tb·X9…Ļzš)5 ÄgU¾šµ”šhÖ÷2%BøļŚœU†¢k5åĪ™£}ŽI’±lärw‘·fzŸ­{?‚ŪOk8&y›QƒÉbŽŽ7;…;r~øŖ5¾‡„ßų3ā‰üf5ķF[y¬|Ó1ņēš7׊ž¾AdŃź}½Ė*`s•śsֆ;™?ŲŚFÆā-6IōéQ ’5PvĘs^åā}Ā~=ŃåŠõ+ßģėˆ~[sŲ}ŻÄt²čžÖģgöĖJŪ–Ž"±Ó@ŅķāŠiX– ŁŻž˜ŅļR™cŽč©v ždō,ÄŌ­…ݲjzMż›ˆVBß0ćž=+”¶ÕõĶ6īėNcrīїGĘŽć4£āåF Ž·>±gØé³½¬¤®Ÿ+1ś×qįŸ,°3És#’ įÉb}óVC¦¬C®ų,mMķ“Éov®2Fw|Vē…&Ō‰µ6q;Gąqփ?grÕ×ķ¢ésj^Ņć»0+y.U>Vlc;±ĒZę,µ¹Ą’ńlÖ•·“>¦¢P3t“Ć~>¾:¬qD‘ŽŖ°7Ģ fŗĻ|@}NY“Ū‰c‚ÕŪ%PķŲ}«6ŠTś3ā/.tŸ„®Øpņć;8U=K}+ęė [Ō±tŽ%Ō¢ŗ‰†L3SQŽ“:įHī4oŠŽ-Õn¦ÓmĢśƒ£g<NI¦ų¶Žõü©.ĀÉwčpMa)2½Š34KßģIX^£FŹ7±#µzŻŠµMIm­RŚęK'mČAåGŅ¢2w1jĒAÆ^^éz[Ī,åšGSåöü«åY¤ŸÅ^"·‡P·¹°²ŽCI)ę<÷śWD]ĢīKØŁAms5µŚM d€ßßĒz†ŚD ū’›€ĮŪNJśŽĘ§w<‹ņpEjIŅ./ēK{X›ĶlZf#ڣєРµxg3]•žS”oJ·i”·ˆīäQ Llmū’CZX±<† éŗ\jmŚÖ=žaf?ķ„ZÕ5[/¦“¶¼I¶óĮĮ>ōXų—>±Æ[ŻĒ£ŚÉ3¬g«ŁōƾšŽl<>·w¦ÄČSŹ‘²ŲõćśVŠ=Ģł_R dxwĀw7Œ‘ BPL‘…%ŽG’®¼ūRŗƒPD‚tŸwĢ\>ę¦WźT[źlXčs›a$LĖĮäšģ<ąłŽźŲ››Ū‹’Aq>•6S>ĖšW€ćŃõd3±šĀļh!|̬ €Fą:ž•Ģüxšž‹ćmO†]#OŽ{u”¤ŃÄ?gśõqÜNlü¾øŒ[Kqk(1É… xī1^½š‹S‹Hń®›uuw6©å drMjā.V}®-žp–ép¹fŽ>”’±aØ_ĪbKčåYb݆Ē9Õ­„ź&ćcó"D,W?ēÖ³sģLd.»}e¼rˆ“#…U‚{šåZśĻP·†ŅłŅČüĮŸÄyĄćלŌnm3Źuķ.ī+äķĆ<‡ī§;W'­aßxv+Kˆ^G%+w÷ŖŒ;„‘ŲĖż’bŽÖ9‘›gć·JŁŃ“m2H&y¦1üæt.I=h¢Œ&×¼=ØÆŠģ*‰hND½0~•Żéś5ä  īŌ»ż*ģ(­kZ²eK{HRĢ6>ą®¶Óį­Ņhw%¾¾…¹ņ¢·W!ÉĒR=+9Es"i,äĶ‡t˜ü*xµ““o gØč L¬Kй“„cRFøš6,ć`aĘ3Ō×uāĶ+ģ>KŚ=•Ä’|ĒÉłUGҦ[čkw<Ęö ;ŪČķī„hƒ¶0½?^µo£ėVIf–ÓNś~Ü˜ĒŻÖ³•ĶŌ{¼µŗį’I¹„ĘĒåķ~=*[y.b1Å#¹…\3ln،Č‘ķV‰kĪ€ēž“j¶”®–hÜyxłĪ+¶+CĻ©#öKö\ų5¦±yšžļSÓa“ŗ"HćĮĄÉŪžĒ?žkīKgU– ²0$ƒŽEk5©›V:ķ7P›ķ>D³=¢IņŁšķį_ųD5˜eÓtŁģ-ļe3³©āBČ 'õ®9+;#j'Ķsyuo,ŅŪŹŁÓr‘ÓłWčĆĶr_Œ_$š}ōOām.&x£<’ ņ ź ėłUu’‚[žŅ÷ß³ķ;¤xwÄ7²i_ |C!¶ŌķfĘČ%9T,;åå_ŲWŠ#K {MŸŁóā{fCĆF܌Vī7ŌR}O ž|BžėO:,ŽĀ,üØOBzååÄv¶zĢ7 ¶ø±dI€„ķüĄ¬§ž[Ÿē½’żŸ/¾üeÕ~×o,^³<ś…+åDČ$%‘qĮ`M~EßīČ@#Ŗ×ƒéZ£³-£hDlN÷ĄÜGcL fd231#ޚv9%øŁ¢,)—ń„¶.ĢU@T†©«u!“w}žŁŽß'ļc8««Ģ‚6 Ķž§Öžš#t¬iZę-ņ>ÜchÉĪ+ ÓuŻOĮš¶‹ć/ Ī.|E„ŻĮg ‹ö©WhFbŪ{ÕĆs¢2±b ”ČyH IP»ŸJż£’‚AžŌš«¼{?Į_ųŗm>ĆPŸķzȇɎ@>hĮžĆ9ōŖ@鄺Ś×ģ’āXÆé‡R]CE¼ }„ĢŻlaćüĒēķ_^}žO2EXqžĘøj#xČt6Ś]Ā^錬1]i7pµ„ä(d’79üõÆą£ž Gūė’³?ĒmcÅŗ-¤ įKéZ{)†I[WbpŻūµĆ%©'ā„ öČx%ŽH*ź>÷5×ųgU¾µŗ„‹± `€={ŹJ̉Hö{Ė!,Ū«§½Ķ-Ū8ŻŽ’μśļCI<łćSzT)„uC­.†²eÆ•óķŒćœńōÆŠ-›Åžµ¹š<^"’ėÜßō®źoCG”ōQĄ 9Åi„¤lŚxqM•ÅųŌaKųł11ĘG·ÆZćåTF’K€Ņ•o˜śjµ3‘åŽ »‘ļH‰8rJŖå‰•‘×Q]ĘљR^‘·š«±;lzP·¹žŽŌŽfYJē5ŅX궦[-5ȵ‘žPOCŠŒcNK«ēø·*%#Ö·tˆnl“łŽżäÜTłAGėEĶ£Lį^ņ=QŽK ń„$GģĄć§ē]>™¦[Oj÷“‘ņØ?ĪŖ.ÄJ=Qƒ,Oa}‘Alć=Ev0\ĒqĻ"ł¤asÉ”²[S;dmŒ »ėZž’äźīŖ"ÜÄV5 ©®‡ŗk×Z½®&”£X‹˜¢8s“Óæ5ćQx‡RÕu(O¼{(цō^­Pn¢uŗµĢ³ZeŲGĪwgqĶs^)ŒbāņG°ÅTS”Ų£gįķ_P¦Hqi īOAō®“[Ö¼'ęŪxi—3ĮĄį²=żkRU0šƒć›QŽH[?ŹŁ~õt>>Ón 3XŚMö¤ŠEł½@<ŠRēZ®Ø–Ć,¶÷¹łĄņ>“jڟ‹:oöˆŌ'³*L3*.O^ėCsŪ> Ūź2ŁOy«$3|ęTB0Jpsް~)x^kæ3ÄÖvę(bŒ)ćzԚrž]ą>}NéĶōėöUĮŚĆļsڽiŽGˆCŚ[„½L`pGłžuDØw=×DūKϦHĪŽf6?s޲ī¾[éWšĘ”{{$—1[,č„· :`Ž}’J|Čjń”­Ż›ÉōՁķšūóŒż+±Öģc¾Ņ­EĮÜØĆ¶īMZ'–Åm3Ā¶ÖŚ<š¢\"ø„üĒß•Vöķ%ņVHć8żhhW1ncšéįKRZ$bHé]~‘e=½¢\BUN×ēži L…?öŖ³L."•x\}Ӛē,üHžÖµĶ$sb_ębsž:AßńŖęd˜—“Ćs8šē9Zė÷xjo 0»¼ü0)°ņ:äŅøV•„¶ óŚDT+19ĻŽzĒJ›Ć×d¼‰ærŪ0ć…”¬;³Ń5Ķ" ^هph”GǧCśW•Üč7j‹Ey ·Œ©=y„bŌū“ėZ#h:½É…›€Ą;øµjĖŽ4»¶ŒĒ3.æŅ±h»ö/iØ_ÅqmtŒĪ0ĖĻį[ŗ>‘*ÅpóĀŠØbaŌ D,:]…ŻŖL޶ģ>]Ś¼ĪēSŌ`¾½Ó!•&³ÜvŒ`ćÜēž”-Łē² —Švø³Č\ķĮžSN}ręĀßģŠH‰38ģ*īĮE-<żkż„.Ä`’1]V‘£Ļ¦3Įē?…7ČuX/¦Šk™ ‚Cü5‡c„\Ū£ŹÓ4…ņĄžĀ³>Õkq$’’±éé^‡”ŁŁn‹T»ž41Œå¹ēéUqr…õż½õČq$fķÉćń­(­-e‰D{.ŹqĄ„qŪ”Ōh7¦bmA]¤mŚyĶpŸūAŌōūµ’Łm¦Œ(9V’ ŅoĆ~:’XmTφPv2ŖŗßŒmćlz|Ī$Ž ©’)5=B]Nd¹U!ˆķ\«[Eq§źāpŒ±īN>ńĻOĖ5žÅEt9źo„\ßO,/qø~ģ³`/µz%¾·u®h‚]RŅ i0Whlīō­¹z\¾ŗ7¬¶7—»”bU}…CqįżoL7“Ģń½°$Ććցū3¢Ó4uū,žIBr*Dx忌οŗ †ūĀ‚,ckv®÷“ ¢|Ł\Æ8­«˜ŪĀ–ÖZ£GÜĻŲCd«ž 2ō="óVµ“W¾]ń©Ė6Ķ”sė]d×±¤imGĄćę‚ŌŽ_P»…ąu·dÉ=ž•GĀ×7ö·_hEBŽæ'Ķ3·Õu[­1Wūb4µ‘±·ļʹĻ.ĆXy!·‘¦µ³c”>”4»©\ė~„h¬otš«ćµųU™ļ5+ ”šóξ<«mś~¹Q² š¦”*x“DµŗŠźžYęģ8 3ßŅŗ _^Õ-üC«é·®šĮsäA&Üosłę˜Ī„iW¦1y!9cš”wįk}^āX›%ĘĆüGŅ“vå>#Ōnt[ļģ›XLrĀJ¼gŽ} w^¹“„øŹDFpOśVr„¦]\Ės92`±#ŒŠĆŠĶ¬«·®OjJā6m –įƒ¢ØQĪ}kNB°F»›÷¤Õõ°IØĖij‰rAoN+Ļo®/%pc$.ģŽ:óYø¹¤FJ“…•e^yļō­Ō¶”ęyW(NE 25 Š^Ć<(Ķ1čƵtÜ]Y[Ī Ćo+ņžs@ģgI¦_ź“Ę”?|½7ŽÕŌ ?XÓ4Õ¶½ˆĮ²Nƒæ½Ŗ:jgµńrØn!Hō­Ż>īéćŅ;•ēšÅżę‡„ų“Ćvzv¹o ÄjŽr²šs’ÖÅt×:u”:EŖ‘ą|ŁĮ4Éž&/¦ééÓ~É.$ ¤78éҾoń—vüæ‡nŻ/m› 0²FŅ2ę¶ĒÓžń¦­āļ­ēˆ-į³ÕW;Õ@!¹öė\Lj“M$ĀÜłb@ŚŁ””óžP4K+ėėw’\K›“ĀGzķõÕ]?F¹»å{ØĀ˜°¹ßļHŌä~K£ÜjwWÖ-ķdžMŝpŠ÷ķVüoāż7EÖ-AØZ`†rø‡ō­#åĘ=Ļ3×<]©źī¦B‘ʆ1Åtŗ.“ ŅSR‘Öł‹‘ĻؔM5ķÆ dJ2©ČĻc\޹~n%a,cčŁÅfe$_K;y,āUeg=*¢n¦št“¹*€ōžF‚NśŽ[+RRź@„ą(n9ŖšĶ¼‘PŖł@e[„6ŚÓKÓ4‹Ū‹°d9ÉĻłÅŪY¾±ØÜO¦ŽĆ ;ŒlqČéŠc^Döö—šÄņɓ€}=+“Ót+O“xsA Ć­!dÅ 8ĪsšĪo ģz§Ć­?ūRMKWŗ–ÖŽ[NdCÜ®+Ų5=.h.5!n”Ō8‚Äų¬ŹP<'ÅļÓŻ„š× ː­yF« Ésk§k6·0Ė ĮbcVĖEŽ0ƵödŗžSņ%ɳę=Åz=®‰§ŚY™Jł³³dćėU7r­Õ¬÷£lqŒ‚¹Ē u·Öš”V6z‹éBęŅ,0\ed wē­iȉqGįĶ2ėÅ×Wŗ‚Ų®•hƒü„yēåö®ÅQŽéZŌšŲĻŁ!$\‚ǾGåRąD¢užŠyN.W\Ēl՛ė¹ķgv¹†I!ÜEfA_[ÓažĪ]Oäū+“» Ÿ^+€ÓfFæÓÆ,­ć+ ČÜ>éõ§aŲ×ńžs£Ī ³?µQŃģnlę2–ssŒr)A~¤._L½—Mb¾hĻ– Ęźo„īµFX…ī.Q~žįƒNż /ŠÖ×ō«{»†k8=Ąē Vf‡įŪĖ=]dĮxC9¤+»k¬iq,C\'ŚņYry#ŅŖÉimö™^p\IļA6²ŌņļhÉ!鳨ŒÄ?½ŗ×–]ŚÜ騪š;ČŁ  $=ūPfūFqö&eø¶•Śr+ŗŃ4H®4‰ įl.į“‚ vpZĪ‹„ČϱÖONŌļ ^XéWįURč±$oč3@‘–£©¼nCŪÆ?/LśW?~o¬Rk“K6Hē%H Lę—Ä.åæ§8Ą,zSnüy –-Ķ“’C Xņ<śŠcEōšÖęLĪJ7*÷ōzāW6¦XĒømĶ!£Īu *}:āŹu/†$m$dŸZܲ}bł‡”]Ųš?Ś5¤ Īźm)#²†mB5ó˜K ywŠä±‚īŚĀĪx/-Ł²Ģ„)#)# Ńātł-dC+‘ņ’²}鎚üZ4·ś± ½ĘG#‚yAKŖŽ,ö3O·ģū3‡č[ŠģōDzĢBī\· UÅōĢ[?ßuķXOęHĶ`óŒt¼śęMCK¼¶E_.mćz· Ž˜ä źu Ģ֊ɹ g8‡öœŗČ’mĒÆ­f#Ņ<+~'¶wÕU`cļ{óWuļŪi"Iķ‘'¹ĮŲ¤|™Ēz ‚ŌłÓUŗŗÕo®u Nc=܎Y Ļ°vŗ£¬€ÜęƒRürŹ‘†!•IĘ1Ö“#™āŽFĀ3ķ8 Ó47”Šx?S“Qš];T4É !Ōp}…i_hóĒ€›~ļ„,©§C±ūPČÕėOÖõ&½µ[L…‹cµxæ‰ō;Åæ†Ņ6YDŠłŠī ģŽüž•įw>ÖmŅį5.śéŒC LśU(õ6‚_‰š’‚t_ųG”±¼Š/®Ęū¹eq»ø’&¼ÖOT¼Ķ½ŻĢ÷Ŗ£ĢYX}ģ“×”5cm-cźņ8gs€eĒn¬jĪ•Ø^ÜY<7s²1ŚŻ½« nfŃ m©f¬§Ļlʬ?žŖō=RĀYt‹w†īŻĻš×9e_§”ž•HŹ[Oxråģī® Y.PŽ@ž»2WEµÜNfķĒ`*ĒĶ”ćśžŖ// ģ…‰O$ŸÆ½^Šį™<ɒEd·8śP'¢±Ó›[ČŻ.£$±•S»ī޼žMŪĆögOSęrĄć泊MĪN’NÉ•[ČvĄGR*½Ę‘HqĀĘ[ Å¢dōŠō­sX»Ņucmf&IHqœśV_Ž<7?Ž|(÷7ŗŸŁ›ĪݱĖ8pG§µ]4b|æÆéś'‡n­cYÖĘT  H"ŗß&‹¢ų~°ĆūĀ% r‡æąEYqÜ'Ņīüm§iZfž²ŲŲ5Ź›§…ĪNŽßʽņXčŚn™i [Z˜²¦l1ČäŸ|ŅęF¾C¼Wį}#XšŽ¢K]]Ē+¾YxÜG^q¾ š£ąXX\Mpl¤rbB~QĻ8üéÜLöĶ5žŪLk˜a‰T³ Är åŃŪyŌģļ)&VąœR¹“hģ’d[Ē©Żé‘6cóL»Üž•cŠ>SƒĒ:Nńj¶Ś#N…ÄYq¹U€Į>øĶ{åßÅ«Oī°Ņ/¢»¹›'l‘ä‚;¶8¤“7„UĻ/¼ÓõM3SŽėQŌ®YŲ4Ń<‡†ųs[:F§³{$w.!ŗĪUóĆ/sX4S²šŽ™=¬3ģµyы†±ķŠQŠcæŃ&¹Ć>šqļM6Wš€ģll#“»»‘•fĖĖOS[~"ųs{}9†ĘóI,®«œ 抣Yhe)ž­ųkūoµ8Žd_šMˆw'89ÆmšĘ›nš„Ś“r™@tŚrJśšf\ÄZ®šÓ,Ķ~ʶąå8Ąō5ĮźWRE§Ż ²K GņBž±÷‡åA“ž¼…t’Ļ7‰-ņ]wpz× ]ėvšƒÜEiīwŸ-ÉžÜ}(,££nŽčGn±`TcŸzźWĆńß¼×WLŽM¹#pśŌ=L¾ŠßiSźŗ¦›¤@gŌĄ>OŸJä‡ĀéZ\ś®•aż¦±ó8Cƒ“Ū.&ń•¢|š«ū;ĀŚV³4Æ{p˜ ęŲē£{õ®ƒĘž‚ßOģāÉ!VTu`ū %€mĀ©ü>µĶų³\ŌĀņĀĒE“Švm¢r¹pGæaH Ž ƒK>ŌtżSP²UŻŗŻq‚ē«:Č×f,/RWfH w ž3ō­єϐåŌ·4ŃŚ³D¹!ąŽkæšē†#‘D;»( ÄuĶL·1ÓIįė«FžŠĘ-šĆ朏zė|/§Oo/ŚD¾@B1Ēc\īLØĖ”ź¶ž5Ō »7¬—rm*Zo˜7ē4Č5ˆnŽY®Ų`>6ŠŅ Ņ2>|ńρt=Bį/—OĪy‰.£§”5\ü5ūUŗŲmc2‘<„d·ZčęF‘ØQ°»Ōaŗ“ĆZhūMśå^@#ŒnµĄxŅßSŅäO·'śJžó§ėOBīt‘|CfŠō˜t­:ÕWdģÄ#gØ8ćµv–¢.žŚ{uµmØ 0ĪӁ’æ5‹ņ&QEmn Ėø%Œøv®-4Éb…Ä(sҚ•ŒĶ­Epč÷ńłØ$)éŒ÷®šćMÓŅģÉco rŚøĢV9]lZą«Ā®«÷r;ś×›ŲčDųŽ9ē(m·”Ē'Ū>•`}§éEÕ¹–Ō-«äā,Ž9Æ9ńF˜³žy ņ˜2)ēNsśV2zķ~Õ-õŸ Y]“É'’éŽ}JņŸŠŗōśI³M˜;ŗõc…Ų¬äČäCtĻKqį›K!¤Q‚]ˆv÷¬m/Ä·Š4°HžT2¹T(1Ē”¬įlx‹Ä7QX@-ÖŻęĒ’ÖøķV]jh-µk‹wž8°Ä*żŅ:bŖ,Ł¢[ļܕµø[y \ @õ4ß6MU[BÆo‚Ū‰łˆśV¦SgM£ųV;Č$¹–ty•7{{V]ÖŖÖ 6Ÿ, Œ yĒņĢ»‚O¶Xxc/æˆä~5™r×ÜĮ½ĆĄ į²8>“‰ęģiiŗ=¶„sö{»–LŒ©VŚr;ׯė¶ž€iÉ<÷JŗõަJå\łĘuÖm!›ķ°Øe]‚cņ«>ŅRöńī“€r¬:šĶĘÅÆ#“øÓ!²Ō#Fe?(£ųjå֑%ݼ’*³¢·łÅI¼dAį½Į51}t#žłš,pŲÆ^Õ5Ķ KĄF»°ńŽ<µ¢Ęū£‚×¼K “JśmÄr.wm Ź}MsZÜz•ͼinw|ʇLĶĀĒØŲĮp-Zźkˆ­­ņy'‡ sÆ%¤Ā9/£¹†F"<‘ǵRæB,u>Ņģ5Øn$”“`2p:՗šå¬ņL>Ī‘æD8Ą4łŲœŽ7ĘzFÆ¢čŻ\ĒvĀFŪČŚ?­|Ķ­j3kWĶ,’gYDa–øjF,¹šā9muéF›tƒf͹ {j÷MröāŅČŪĖ#,©žńōDIŲź~JŚ’¬YeÜŁ3v–ĻņĻ×ßZÅlEģ°4„[pžUŗ›Q©Ė#žń§Äyµ}#ū&h4½7jĪ" Ņ€8ÉõƎ¼Yo„Üāķ!… uĒó«„m¢;%]3˜Ņ¦¶¶|Āįcn§2šžæce ÅģpÉ,q?0Ē*?<žü¬üeš«ąų—EŌ“Ū}>¹&Ų…Ęōcœ(­©™ÜńK˜.P„–8ĄĒQ\üИ„,'½tCs'» ä sĪØŁœ(Ž<ķĻ#Öµ"ć„a"¢`Sɧ\”Diö9T­a¶ó”Ę0Ɍę„V‡Ģp’4Dž¦Zrė:@Ńˆ,;„słWU”x‚óĆŚŽ‰ā­i"Õ“©ÅݹEĻ+Ļņ¤¶¹¼V§÷7’źż«4ļ_ü©iVŃiśüiŚ"8ތ  PŒägü ~āųÄqx†ĘŹźĻoRŻjœŻNŠ5Ŗ;wÉčI÷ؒgD]ŽŸĆŗ¦÷7I{Ū…a·īŽŗQ„Žńuņ§ūØøļž¦³±¤„c»ÕgńNŁ(6ōįŖ¦—ż—>#½·yCŒ†éЉHIž‡ą;Ć©Ø­Ģcļ†Ügo=iŽ:—BńQuhĻŁ £¹8ö¢2/—CÉ-"³²·$em× ź+:ɬƒČĮci6…#¶Œµ2š±gT{X®U`2¼rzš–ĖY“ŠāåRŹß/"µ9jš·ZŒ6Ä“8Śē#ƒ\5å½Ō—&ī Č­"sž§į½2ņ}9/%hƁ^›-ä‘ųvDˆĮę#p>lš°Jēt­V;I5k‰7Āņ”ć9P=:»©xjžēĀ)ØŲ³²©-/Čr«Ē>¼ÖNF±ƒ¹ćš\µŽ±bdˆdś¦JŸ|ō®\·ŠŪT‡SÓ£–G`¦VpcßšėMϰå{XģndÓ/L2Ɗx郎j³Į¦\«,{Ńr­ėG“Ē©‘§<‹|ŹĢŒ€nėÓė]f•ØA$Ģ“ķ1(8Ļ­ Z3ɕÉų‹ĒZf †Ņ-ŅG×'©©åbg„|2ń–—āXšpWķā!„'•oqé\Ļ~!kĖāż6ž)mšTŽ@Ų˜Ę1ķŠXŽLi]åŒ:ķŲ ģX” >šĒQųÓn.L–r¹ŪéUt‰‡^}I&‰¤#gŻÕÖCįk‰­Ä’€Pä`šEhG³0µĆgą‹TQłó\s üĢyéłVE猠– ?G±Hē7 »ĻjģĪĪ=nĘŚÕ„h¤yBģńÖ¼©„³ø¾™¤E,ł‘“@{2 kG·7#+ĘĒåö¬MsO¼[…e„Gi·q;ø%ccĄ·pZkÅ,α2’9źEnų£[øÕõ‹»•I¼}[„O‡&øæ†n$›Ėł0A[7ŚE•¾ u‰<ęłAnĄzP™ųæPҵY,nQ¤’žŚBć'Œ:×šĢy4m©1š“Õi43¼Ó&ÓŅņ1mŪ¹­_ėŹŲ¹'®j<˜#Ź“Ūį{}%˜–exܲØ'¾ÄÖ[hڤך–”›uĒ›'ńœö’<ҵö6E;¹~Ńo²ŻHx;…r7ˆYŪwšyf4ć LÓŅwé퐬ųéZ?Ū7°µŻŪ QćpßJsZ’44mN]jŁįB6¶rž¢‘ÆZ8Œ¢ģC·8ē"²(äµ5½Ž³M“.ŻqŚ“,ćŪis2@ ÷ įŖ\M±—s-ŌØŖ‰–īĘ+ ²ń?Ų,Μ’ĆæŒ:„ęC:µ%‚.ģT¬į2yė[?ŚpjÅ#Õć†āŪ Ć•­a¢6ŸĆzdö&•l–¶źĆoū5Ē]ųā[Ųn!}Ų;œČ"›ˆĪ¢TŒiŅ+EN«µ~\dŠČŃtk½@HņÜC Cļž‹@¹“©éÖL­k ’¾^øz«iӲͫ«ż™07c”¢Å&Ļ]ŠÖŹ ĻŽYCpy#éPŚKm«C=”°ģ@ēé@9k‘ǦCœ¤rŞ8 ōž•ē«h\“™÷äŠHū]3½Ś;n«š¶†÷ŗeæŪ˜ķYw”(Fm[P[<7e![Y1ę 7¹¬ģĖŲÓqw~\šĢŽĻdiw®¶ĀĢhāŚV—ødd ­ćk»ĻI«rČQWh €}p*—ƒåŸN·š Ø#"RĄ0³Ē_ž±„čöXW2ļÉ$œ‘^Yā8n4ķqÖVh2UłĮ Ł3:;mzkõŌ,&t‘ °Ś;ęŗ››b’l—Ė;J²nÉźĒÜŠQŃźš†µŖGm<›UŻO$ńÅQšnÆ?ö¼Ķ«źāŻe™U ņĀåĘĒ ā¦msĘzŻį‘åŻpT0\zä~u·«Åq¦é¶6K3BŠ»ŽćŒę¤ĘX]Ėö#‘™O¾k—øŁqu}o¹ü”Ā’;Ó ŸM3DžR¶óÓµG-œņ\ł“>§8'§6ąn½“)#œŽwVx°ūl€™ėŚ”ČvÖR[ŖL±JGū*N>µŽéŗx›Nię #6Ol{T‡+9Ic—Ī1Ž­‘Åič—PÜ µ,»ƒdsŌŠHRhķ^TrW t¦\ßMwmžģ6nž¹śŠl‰“E¶‰VVŒ+/_„g^EÕ­ĄÓ™› ÆīĻ)Ū4Eæx–üO„g“¾»ŠŅ?ŻÉ"N7w=+æmfyu!§j:i²“$mžyõģC‘ĖüZÕü5¤ŲJÕSń EšhcRUbž½ĻzłāŃnnīķ¢xä8 Ę }sWČExšv«.Ÿ/*ŪźxŖž<Ō –—†ńmb`@Uꦔ•œß€4«ĶE~ÖÓ“‹œ&zšz×½§† ¼ bĀ%Éu4#dxĻÅ Ūéל„ƒD@CF‹­ÓśgńƖw•Ļ›‚™ąf·7²¦Į“éė]†ŸØ½āC¦Ėq-µŗäžp*g°u†8Õté§÷ɬXpȳ¹2ąēŌÖ$I[Ž„¶”k0‘c$lĻ ŸZė¦)yŖZj™Ę=1A‘ŅČńļ‚i`.ąrzŠ[ńEœHŃ,%PBóŠf‘‰äŚĪ³u|˜Dh # ƒĆUĻ É5­Ģ7P¤s 9e'Ø”„¢zM“i·ŗŒ.äG2¶ōōÆZ½Ń®„[k”³X]ąćßń¤fs¾3Ņ“ū»·øŽŗ¦CĎGó®ČZéŗ]½•²'ī” Ž”ægE¢źr]ˆ–āEŻQ‚œŽæ†k[L¹ŗ]ńtł…UóŒxźxļ@ķŌig0»%Æ ŻĮö®> )|Æ0°Į$ż…wž¶eCtаČ=_„cxĶÆ•-īc!!O™—o8  žŌ.®12G&Ā>m¶üE4SŲ“RÄYIŒq@höqĶ’‘„QÓ·<7”Ɔ– XĮ—rYń{~µQ·ShłUę—i¬ŚÜ>VęŹSūŌ?0…s~#ńÓE.—ą?ŁBék²yŁ€ĮÓ½Sbš;[iō>ĪkS$ś©ŒĢŹć–ś~b¼ö9īõYĢ’±¶ĆĖžö¬ÅŹb mJ „nEó FĻŽZܾœ[KĖņÆC޵Hf}õä÷ń,Sn »*=k:ĻDeŻoö¦wĮ=I’õÕE#hµ;yōü ¾ž'Ėb3隟N×µk«×šKė«™J¬h¬’*…ōō6…JÄ³Ēaz÷śpž0…ńĘ@õŖ6'ƶz ‘āg¼3™Xqƒ’Gęk!Ź&PÕģfq<āe.9Sé[ė<2ĮZJYĄ%ĮĢYJłÆ„šj4ƒrą¼Læ+zÖŽ‘ćÉŽęāŻ¬f‹'ļäcÜ(=kx™µ»Ū |9¬[†žĻŗ’?ݼckśžuņÜśŪĆÅĆ 7żļz ={Ą÷©£Ž`.#Īõ=+¶ńL?kŽF€GnžVšX`p½j¹Qó¤³Oqµ—PšVRw|ŽõæįHb¹ž .ćÜ6ŒŌówčŗžŒ.¦ŽåZ/²ķvŽV4-<X[NVSå–Ś==éKp4ü[m„·ˆt 7G¶h.ä€}¤vŸ›ŲÖ“’į‘„2EpÉ`eN3I±¶.©§ė1iā’G³†ś8„ >ņ@Ų3’1ߊ„ ^‹ŲEā+ÄĻ‘°šV9ōhb¼[ĘXL„˜uõ©nwøw…¾@ #=č0¾–<[Å÷÷1<'c™™½Oŗļ ]Og&™w¦FŃó<ֈ|¾ø=h‘«&‹l‰äĘāėĄ¤-4ˆ »tĻō G ā«Č¾Ā‘ŪÉóŗē§Nk–šÜIē<Øl“œs@$z“ÓŽŁiÅ“°$S‚WŸÜĻØ Ē’ģ°*I< øĘ꜆Uʁ4ŠIŖÅ$sDNpHü+œ±[[B/d‹ źxŽ„ tĻU“Ņą»”*Ė ,0sX:īÆraŽÓFéųŅgbdø·Ōnē¹źƒŽ¶4VĪ8Ż!Co.zęš-!śī¾SK–ŻĻq&Tē¼ĒHš¶”w3^F¢y8ļAW$臭–§¦Y‡¶µ'³(OŽČł”ÖĮ’ uŽŚB6ČB䎙Ø33u ļīl~ĻxŸgFŻ*÷†+±“ҬFžVćós“.z@V:Ō:=µõˆœG©łEaö'æóÆø]UR¼.ī€Ÿę€-Gu)…•‰28*Ģ6±™ÓĶ–$sĻ|v  «ŻFŅŅȈ$wø ÷¤Ö4š½—ĢŽ’ßµ2ŪF¶ņ@2$ž#ۊˆż’)ć‚;}ó2ķ(Ē­©hU1#o܌8¬}B;«xüųĆ:Ž:~”ŻŹ¾–K{‹‰e%egĄķ^Éc*Ž”Œ:™»äżŚ 9½rm:Ūķ īķq  óK»‹† +»Įģ{P/5#¬–k²ĒņXū×yØŻ_¬ nd•LsA¤ĆįK/ˆŚ,0x…ŅŽōL"2įcČ{W€źž¾_ÜųwCøiķ¢™mѕv‡¾O@r(4+źŌ4-n{=]-Y"»-õééśÕ?ģˆ#»@ČŪ3ŲõĶ'dģTÕōØ +*Å$Ū9ĶhŪZßÅygi.. ?ÅŪ' „ ŒZ¶Ń.ģ'{ J8dĒÜ ŒżEyĻÄ+˜”æžĀ±½Žńö†Ÿh8@{gÖØFw…ō±y:C%“nAĀ,ƒƒQk²Ūh×SŚJĻ ń¹—8PŽ” ·¦Ü£[ŽuiŹŽÕJüŚ_kw.éG īhŽƒ­Õµ¬’  Ć ~fLńNæšĘ­gā«ßMmĮ…¬ŠŁ2ӏ„r†ĖÅŚv®­yµ­†ģ ä±®Ę? $¤·vŲ7'© ™Fć4x£Kń:…•µ£hÅG˜Ņ®āŁĪqéŽ+GZ»ūOŠmµŻ2X¤“R<Äu;]1ž>†€qŠŁÖ¼H÷:A°[m=į–@ÅŚ0@”ǽxĻŠäŗH˜hļqŠĆĶhś•<wįO…ąÖ5ÓytФ1dy‘±Ż 9äūś×wńzę)4ö²ŠZ¼ ƒs”Ś\»?­¹ó\zEåģķĪæ2øž&«:¦‹Ŗjvz†¦V9‚–;ś1ö pÜłćNÖu k]&kY¤ v/@ äūW«kzę¬H58-–Ż ķ#ń ŲĄŃćŗóon5 ‹k„yq0ʘļ]–¤RŅ–%™ˆéÅ|’s5߁ÆwE3ؗ>x+»r{÷‚4- PžĻń>™ KłX„4mėXÜ÷W±²‡Q·øÕ`–[›‡¹iO®qĒ~k•ńŻęҰĆfÖVŪ²•S–,3É«ƒčgä|÷¦x&ĆÅžÖ¼aŖė‹§čŠIæ#ļ)¾Üu¬GŚ-’ü#ÖÆ§Å>…eÅŚŪ·óŁėĶX¤×CŻ`rC\äÜģī“KÓ¬-/®eI.ćbūC|©Ž>ozņß_kÉūł2Īp äLĖGÖt)Õc¾¹‚ŚĀŽsŒgøłd¶ó'¹ŠuxĆ ųPe2=cÄv¶–:fœ·u;nc…¦{gšżk—°–=Mīł»“÷l§±ėżj”¢ŽĒOÆŁxÄZv§éw±Z$/’5NfQڼē[Öµ‡÷V–ś˜µ“ĢHU¾ņƒÜö­"¬j}7ąhž.ŠęĪŽ×Pµ±7Eäȹč=śžUäZ׋<_ā«KKŌķ¦‡Ćš“C棦ļ§z`|„wšĒZÓÆ'…®ą¾F*²ŽIėłW»|=ųQcị›ūF&šq“†Źœō¢ĘŖ”ŠųóįÖ§d5Ū Ā–6 Fcbłŗ‘ś×€ė ž“:>Ÿzl|ųłĒ­f锼Ē¼i‰”ŠQł9ūƽ}bī÷Uņ[˜ģŹ©NIjƒ73¹¼ŠŠYŪ“˜°P\śš©­xĆ[³ćĆ·Ū‚›Ünlc”Ķž_=ŻåėN·i'吶˜}@ō®»LÖ4‹ {x‚}”F6€øō«Čо‡ń/]Ō?įøhÓn4 ;Č8鞽 ƞ|ā½Żķ½¹A• |Ū#“:i‰¢eŗeGyä' ē«ØšüW?d‰DPv>¾õv5=³ĀöV‘†B”ļ+øžƒŚŗŁķRÅķ%žŽi·H‘E$‚N9öę³'C[LÓRŪ[Ō!—÷^s°u\W³xkAÓ_÷3Čū²0J™W/jokį›·ƒ9*ælū׏¾.»¼×um#ŗ¼³“¹*{p3YI™·"ČšŻ¶—kĻqõPNNw{zƶf“æ{“‰ nąĄöØQdņ³Ó5O‹Æ„x2óķšuĶćÅŹy*’£9üųÆ šÄķ[T×.÷Iv‘Jr‰·w’;dö­’±J½µĪ©„$w†tHwäĶZ[[MQāļäA•rq“רŖZ ĘĘwˆ4-¤k[y†£m×%qƒXw–v6®Ń*…!—±¦ås ‡¶–ó0˜F"ŪĻN3õ«O¬\ʐAŁ“@YÕsĘyŒ¤W>½Ō¾".ÆąŪ-@[M2Ž8Ńdr Ė#É=żk•»žŁō¹cŽī «‰"rźÉƒćę?҈˔§)ņW†wŅ­5Œ”,zŒ×“ßjD ²¹Eˆ…Rńņ1ķXĶō+•ZiŚ“w1j7wS¢oÜąŽjŒškŪš `(ćų×G§éÜMo-ŌĖkµpNÜķ÷÷­T»ĶŠī# §łJŗHėųWā½NŽņõ!Š(÷Æ-ĘŲ D¹ö5tMBQjŗLM0…Ś£…Ķ[?ańuŲRžŽ!KķśZęhīĀ^š¦žö«–ŁS’‰ĻŽżń^yākŻkXą±·0Ÿ‘£]„˜ńƒS+ō5…G{öʧ$r$ [ø v·O§½iųŽa„XĮh'‘7.ÖGä¬M½”ĀÉu¾m¬ŲYb*{@›š–E…:0ö¦„c6ūžŃį/±E§+*£IĪāC T” u2G¼[™łŚ: Ö23r 6vŖ¦Qę!%¾^µĖų—]Ń­¬`“’Ī$»Iefä©ģēTJe’ [5åŻ»ŁXż„·X^+Śu_Kch"HAö ø>‡5„č–ŗķ„—3AĖ«0Ŗ]Ā6K+"~éy!O8ō„&mЧ} Ū­ŌsFžkʬD}¹ī*ĆŌtŻRĻE¼½ƒ1ą‚Ń“–n½~Ÿ­`T^¤Ź;M}Y̱6ĶķĘśžuó`/ŒZ^46›2ńg%ČļõėZAFF ¤÷.°$rI²Nē9ÕīžŅ]aŠW+m‚¹b2XJŠ©Hö mü,Öj/5µ¶uS¶3–Žq_;üMÓŅĀxn-oćH›”#øõęƒ6k|ń³Ō®“K«‚Rā!öry+ 9 žĄŠ÷ļxžx,å:}ŒF÷wV“ōœLOų‡­kzܶ÷W†8AĖA€p+Ļ4 "dyŸwÆU§b“VŌ÷hÖYml•%'ˆĒ5é įŌ½Tūu¤ó&‘—ī0ī)6fĪkľ•9–3i2@ĒZņ ĻÜ“d“ˆF[Žŗc"ŽŽĀź;™ XĖrį~µ­eu§¬QȬ¦Eܙč‰2Yśm-ō”hEH%įv/9u&¾Žżš<{fŗÆ…x„r¶ę@S<…Zź“['Ś–’6Z9JI;[Žõ«ܶĢ°Ė$!ņ·<ƒŚ¹ę®¬(³į_Ž¼Ń|köŪā·°½)\mG#?>{’j–æąoxbÖĪ sn›ws<.pAg+ś×¢•®vQ×Sī_„Ri_~źžńį]wL·+īij2’wQÖ½Ož £ūHė²ķO¤h>#ö^ ńUņ際I!ŁĻŹ°ēćó®Ź-6Ó5䶇õży®—Ø«b$µœ ķe&éĻéųWŌX$ ē“XķFŅČ\ąg·JŽ(䞅y$,T—{śŅ“±Å"ČÆ„$ŸZÖĶOøK(;L;Ėódw¦[ȾnŁŞōÜN˜ČøŒØ£%܃Ēø­(@9C޵V6ŒķĚ߆µŻÅ:ėo{§Ģ.UˆÜŹźA_č×’¬ż¬ķmoŁ3Ąž7ŸX·½ńŽ‹öf³ s"`Śy>¦¦q÷lk\ūĆXŒ‰ž »WųN+ČƳ4­oģ—Ó[ŽFÓŁ€`ž8–20ϵpĶh9£ų’‚š~ĮÖ’>1Mń[Į^Kź.mī!]±Ź²|ŅĖĄĮõēŽæ-®#𸀬ŖۃŌzÖIénÄo„.­õ0Šß•į€}9Æw»m/MŠŽęĀą ¢0żęā°hG”ė¾ ½Ō-“åFAČÆ2·)Ź2āi”ĪĄē…>āŗč¤)JĒé/ģõńĖÄ.“e†ēQ·ˆŪ\ć_־ijŌ7¬,Ćq}+°åØŁŗĖ%Ė L¹ĄĪ°ö®v{ n—.6/=+H3˜^#Óå Ļm4“¶ī;AśWџG‡u ųsI»Ó"µŌŅ9ŌČs½CƒŲVń•DÅ×¾é2ĘžLåev@wć^mØéivW`n1g#1Oœvźs¢MŪ=+§ŅģāŠžĘGuˆ+‚ÅŗSö„žŃ{¬éÖÓ²š”ʌn5åZ¦”z×ŅJFÕsņœõśÖcg1©ZyĪĖ>čϵ^š¤±+ł7ZĻŽ+YøŽ,æāėŪ{dÄpŸ%ˆĒĶqZ•Żļ—¦,fH¼Ö*¬£88=}:UF64ę/2īÅILvž*äõ'UøYæ>U@čkhĉ;–Łb¹š“ę'ž{ÕŻCHŠĶ™•ry¬åØĪ‚ĻO“ž&ø(ń×?xÕhm…żĆ[Ą (ē=…3+]čYҦÕō­bŅ9#§īƦx#Ž»ūAęėwŅE96oŒGœ…ĘzQ~†°‡C~óXŽ×M¹¶!YG,¤~_Ö¹;Šž“§ÜŪ‹KvÓęO%”Ā‚“ŌR7„58ĶhĒ}"5½ŗłåw X Ų¤O?Ķ»ØžķpvŻ<)l@Į$ßDņ÷¶5›ūf“µ’=»Yrr3Œžu‰ńŠ;™üSwq$H-ŁČ¶`°äžB¢[gcĻķä1h’dyX¤g#ŠPi×Ū–8eƀyēÆÖ²‹³4=¶) ÓŻ”܁ĮĄ«r×ʖ·Ś†­i»@JļRś[ĀüSš×Äz4–6‘½üœĢü>˜üMyŽƒ§^Ūė–RÜG(,§£®;ŠŃZ¾‡§ŻĆ0·1Fģ@®1ĶyÆƒuŃ®ßé7Vö‚(Ģ¢āIF×׏å@Įb'IāDb­éžŅöŹx¦E!—c­;}ŹŚ&ˆ-µ„6ł…pŻ?JŪų‰cig%¶Æ”Ą-”ž<ÉlŅn AēéėųŠ~76Ö)5”‘ļ“’3Ņ»żOGŌ5=2 .Ī6žē½2ćžO’^£ox먀„÷F?:Ѷ¶ūŻÅ“7‰2| ¼¢R±^Ģģ|a³Č.gW‘IĪóŅŗ;Č-üćå"K»œ‘Ęj. f7„¼öļµ{÷µfIvīå€ńŸa\®«ńKOŌģnt;[-–Žc)r6ŹH’<‹±ÅZ^C<‚T ŃdŒś{Õ]GXŻ"ÄaWķøtÅ; ®āi—1;K mv#…'īšź›ģŗ˜·°ŠŠ[ĘŖ=w7süč“R:=ĀńŲ˨̱FšE6W‚0:⹓K BŚKČ%Šxč§9÷Ø(Ņ–}6’O“·m±¼Chē"ø=bxōĒŲ‰#©'iŠC2ߐ„‘ž@Gū¹®m4›‘u ŠžlŽÄ +”sµ¬Iƅ8>¢“ἃĪUL(ä „+ČĻDÓ¢æ6ģĮ˜Ł(Ėҵ/–V6:öŸÄ»E%Øa’8ēõ5\业GOµÕ“ę¹·&3åī`ē&øwJÖašķ˜Óoį·‘'-3lūéŽf›[ Sķ«¾@’6Ö>ŽµŌŻż«OX⌠–N~ļ_Æå@ł‹:Gˆßķ—6”²čqŒjkZGŁ/`CĶĄw÷¢ąŽn}{RÕf7ŅÜŹņg'Ó5­—ˆµ=NŚtsø}ĢO\P Üō+٬“ ¦źö4Ś»ˆīäv­mU³ńƆ’īŃekU$(Ę>lć§įśP#Šk+ÆėsÉŖZ±&ѓÉ\śź„Ę“÷;£…ĄŁž o”…mYd#$ąŅk]Ƅc¶‡4Ķye’Õc Ģ™ąUėķ5»MÄI…Ę1šļģgŸOµ’‘Y‹sŪ=…y­śŽ\jSO;»[©Ź“Ó y• Y¬–?lFÖĄ£ŌV÷ˆ­&²šĘ„ŖˆsK¶>éĒüØ7<‹Į­­jŗiøŌĖĒ&xV98®kÄ*WPDY5ŠPσ×C:Ė&·ø– `døaŒąōjŁń†µ-vŚ'”§ńn<ķB§Üj=éZ(ŃtÉķäró.71õ®CS„)äĻ>õ2„7G‚i˜H½›“Ų×q'‡f¹EŪ <£¤u÷Ø.·‡ōĖ8ÉŅ:(n@Åzž›įmNĪŚ1e’£üĶž£Ó·,ų‹HŃōŒėC²‡sÆ1JA:tÆń[ŻéÖZ}«F-..±6ū©œC@ŽWRŠļ­¬’ådIŃ×x rH÷«‘šķź}µļ™Fbb6ǧųŠbĻPš|ŸŚW÷ĖØÜ•Ó˜o\ ķĒ„,ŗ|Ļ©K29ū"?īųäŠ ‘Ųż”ę²KY ‰R6ūŲł›>§š«öT–šĖ{#Ėu+‘Ž@ tżZßDŌ-µ}<\LA÷5×ė c®Ķ§^}šŽÜ¦>d<ēŌÕĮō2r×C›×¼g}ip~k ÜÄ •Ļ­qś÷‡t‹Kétų9nœóļZ‡9RÕÉć²ŲŃ¼ŌZĖÖį‚īQвC‘Ćv5”Ųāīõ7“»{­!ō¦†ė$ƒåSĄ_SŠ÷ ]Bó 1¬n †Ē8ā Šņo蚎¤×Vņ䁲rzŠł“Ä;im öÆFŪĮ­`t#µš…ģÆōķÉļ-ž/0FPœzż)ß¼%'†oō«+ĖK­2öܲyyܲŽŖ#U'ܽ,r¾KēæcņŽžUź×>“ćŌ•ƒĶŽ­ŪéY5b%ŸÕ|-e ÖײĀČpĢwī*üóińĄ±0HĖެiȄ¹ūKY‰ƒ'®zW>uI•. –N˜Å"’čŠrZĄ“-¼‡rō ž‡Ž½ Ćś^—lm^ę{hQĘ0_•üj”ܾFMy§č±źž{…UˆŸ-”~µÜŲų¶xb†9oŚ*ĘęķK“±Ÿ*8’k”–āę&2­†ĪkŽŅ'k­E'ErŽß4lx<¬Éŝ&½-ĖYĻ f6•ļ\gƒVźĻQššĢļ )aĮĒ·J‘jvŚ–„å2Ė2ČA;EiéņżšÉµ B†ŁylŽŌĀĒŗxFĖJÖąQÅŗ…Õ[k·Żžļ= v Ŗiš¬m§YĄČĮüÅ_˜œcÆįMHĄęu»_:9LŒž^ż«·ų‡Ņ¼ś_ XŽ_>ݱBņz“ЉH m. Ki8dAĮĒR*ž½ØOs„Om#P'–¾ {Tˆń 3Kī†4•œīæj.•ymkw} ‚1¹Ą8õ¦£q¤z~{%ʗM M(rJ‘łę““fyõ[µ“¶‚&#!›Ÿ—?: H Ęm>Žų[X}¶Xid« ši<5 Łł3fD}@ŏ*3ņgń¤8£›ńߏ“]JƒĀіßU]Ės _•”öōõÆšüڌ:¾®ĪŒÖf$©Ū'8ż( FƜ>.Ó-µ m5Wr«Ą)Ųć½bj.‚I,ČK}ēvˆRjū˜Ź=LkČÖõdø'räcŌV†‘Æ]éņÉo“É ¦ÓĻji&›¬;;Dcģ‹ŅŖė+Ü®c>PPĮƒ§ĄųŠČ•Y!u(F@ĪJ×+ó‚‚9 :°ļĪj€ģģõd±{o§/+7 ­;Įa«ÜŻŪʬ©Œ.F šŠøŹĘ¦ Ć£Ä–hŽe”>x÷l,¬5i­,ŅA+'˜x$šnE¹X]MZ++‰ķīS”Ŗ½æžŚH•ƒūR*ēWn†éįNBęøĖ«›*I`G’I“åėĪG­TbōĶåĢEØ"‰z‚:6kŠü'­M£j0¹EuóeyT³nt×׈`/4ˆņŹääõŖŪFä¼³ģō4 •˜Z%ŽÆ.µqŚ•·Ųy;œTŸZÆ©¾ÆmÆmݼ…ē+я­"Ō;—5‹µ{kc-ż£Č‘ūc·õ¬Ūķv‚ĘUø†W—€?wėļA™$ŽkRš3aĮĘļzcx[ķ7v—!Ć2’øc޼Pn½”O„Ż\GˆŲ«cålųŌ–q²øb&>Ō¹‘pE¬Äq»I6bɵ…Éjd·“_5ːK@&„īkbÅÕ“†ödbFpk2ņę8 ’%aå~a×Ģdr+<·7P,%U7öļ^£sĄ“S |vVŌ4ū}JY.ī7©ŹgŒšƒū+G»²{;Ä(ģ .½ØĪé°‡Q%¹ o!ŲåĪBŒš@ükg^ųO—mw«Z\I{o*•SłwļZ(›„Ųł)|Cā+9$ßå«[Ü4R æxy÷ķRkŽ)ÓltæµĮ>£1#''°ōJ†y>©źR^ŻO©És5¼„NĒ?sqT.õķF-^K‡¶…4älD²_߯JĢĶ«»—‡Æn51'ŪlÖŚ!6v‘G±­?Ė %õ½Å 6³G™~1Ēoƒ#¶ÄŚD°iÓŚH$“ĖQ4xłĒ&ø-RÖÖźźīņĢ’x÷ö ŽS•±×ÆtMJ9¬¬’“/ƒäķT/„_Ž\ZźÖóG¬»‰Ł éĻSųŠR$¼Yō%†Ņ+Cö†9ē·MpWC^‚f„ 6IP@ō fß\ė¶:ž²6\6#FĪÕ'qÓµ{݌"Ėā&’95’ AˆłŠcր8sP“R ’>OČGõĶcŚÉg®Z\Eö7L¶ĄOĮäŅø“e¢YŲųkX¾y u‚ ±Å¼fB݆}+ƟQ{UX®ŪBś `g_K~ÉĒ•ĻS\L·zĢśŠF.€“ĄW€/śĆž2}Ø2š=“±\ŲFQ‹Däąu©üQ¤>ŚöŅõÖ8ņe‰Ó>q#¦}ÆGż§ŗņ+H-¤Lņ—h$õć–„5܏NäS’pM±‰ÄŻųkQŌ]V+3³”ē„]¾°Xķg™>ŲņØ>`‹Ē-’…nt­V JI&ːĢʇŠvÆC–m1tµ–Źd»›hg ß=Ŗ'Ųv<šßįNæć’jzƒ]µ·†­Ā±,0gū߅{L6ŃųRKtSā@Ąv¬‚H³{ń6ÓÅv‘ßXi3i7°’‘[N”€Ēr~µ¤ŽŗńW‡-ZśśŚĆX¼f7®’ Ņ1źe+t<ęßĮŗ?ƒ¼7ā ĒjétļF@;¹8ÆѼ”hVó@Öၓt@’Ė3žŸJ¶ŃiuéŪXÓlīĞ»Ż ģ=ækØš’Чš]óhĆöUŽŅO3œ’~š>‚±°YZž«ŖImvÖ”ī‰Šö5Ķ|<†ē^šī«¾å­Æ¢œ„R„äåWéO—K™ČÕÕtkŪY™ū1ɬmę÷YŗGŗŁnŅåēĘÕ|¦34µ½ģ·+ N³É Œ}zuļ[zÅͽØYcUc£šqfcēŌüQż§oœ;4÷}ŽŃ9Ž£•rćį׊g¼Öu™įĘ ĀŅd—ćīŸĒśUĪx’…|p|;āÄ“…<Rh&;~XĒ ĻPyÆhæń=¦¢ņG½…Ė€ŪˆąŒcśPSzœ„q-„ŠH'„õ ō¦Éā3 ¬Ø¬čÉ#śPEÅÖ¾0\YxvM&Ń­LW1yn„_ä÷«Ē,ukŸ½³ŹÉ F¦'HÉĮēÓ֋ž‘…”²‰.Œ–6©Ņ”‰nłÓiž(ū5̐D>ó.sļŽ•€u/‰ŚQø[x/Zņķ’ē¢{ž5«xšI§Y]£”c–|»ŠFr‰ä÷~!žŅæš 5£!c;ˆå”ąŪ{ϳ1łŲHcČ^w \eaĘ6)xēᒌuĖøt£},z1€Č*•s·ž D’Dgd$“Ü}źł‘¢v<÷Ķ"īņ;ø^YvØSžÜU;mAķ-LQ)½qßZĪNås³ÆŠµ÷mE—qŪ8nąp;×ҾÖģµ,µRbŌm£©ŲćļóśTŠśžo«‹#ńµ›}NīXńøZ‰Ś{÷é^‘”xĒ^Óµ£#Łŗ «Ė8ÅŠCšÕ`Õõ{«ˆīÆ%ņąIµœńĻjÆć_ĮśDŽ"±¶žÓžÜ«Ļ$ŽüzQbģ–ē͚—Ä]gWŸ}ĖClņK‘·' ®ĒH“ń£*Eļ†ł‚‘“šØÄ–ĻTŸĀŚŲҤŅVX—R’!¾ NŅWč~+ŠŅü3iį'øŗPS+Ļ„ÉŻéVұĒāųŽ]^sņ›B Ŗ2tÅtö9Ö­ÅĄO%G¬†āz6•ŖŽjŃIwgČU-#—o8čk^ń<¬©¦Å .€Ī ?փĒ”—g©–ŽKČÖ.ŻąĖÕµt™į¶ˆy× "“·ƒŽ²š")t=ƒįÅķœcā4YŸ,źxŽ0zqÅsµ+Ø­U“gšh|ŽcŠM„×ÜŅIī‹<N³Õ.bžå-?*1$€œg’Æ\÷‰u!šL§©­ģ) ü’])ß¶<ž½‹Cæ·¹äģŒĮźk)”‹¦IØĢD·ńŚY†!L„(Ē_jō]&[Ä{HĮ \c qXrźuKŪ]Ž-J·q5徕6”ŁóTddäšÖ;—®§s¤^ŪX, är6A’ÕSĆ: ZĻ$²[±˜æ2}ßAšÜ“źo Ž]jUµ®«:Dń¦ÕP:ž=jÕ·a4v‘­ĀHĶ>įĖÆ'"„ģD™į¹ŸTæe’Y„9)·®+Ę5Żå»\ōõėMČŅ.ÅĖ-"įÜÜgŸ•T –?J÷/Į” ÅÕ­Y.ćOݳq“ž?Ī*%±¢‘Ģx÷F:•ŒfŒµ/] Jāj¾.Ņ“«©],døæŲ0Ŗ,z ūg5WĄĖÆkzÅԺͲ-“¶Ųшł*…kF.žŃöi§ųVōķćVŠ3"DqøƒŹŸŹ¾>µš“j2[NfĢxP¢EžēcšīĀ+KGž [’Źs‚E6±¢ų{Ķ·–dóFonBōéšŃ@wKoJ-Ģ.YT³`ņTv DøŸBh—:%–˜a·»ŒĖ»;Y¹±WŪS–5s-ĄŚF ĘįPŁ”Ļ#ń åĶ½ĖŽ_Ļ[Æ+øōöŖZG‰-õ¶š(Y­J(?+d8ź ‚x©žM%-ƒŻ[Ģ[<Jē4­:;Ÿ&+·XŠ™±ĖVńz–n’Ā)¦ >АŖ®yĀąšā¢-lä1Ģ0FŁÜ„qÜWJ]MēS±ż9’Į-hėŚoöU·Ńu-rwā7ƒŹXŽ3ŸŽ¼@|„³ĻOżæD¼'©Ė x‹NŌcŗ6Ž‹žEu3–£Ōū§‡ÅJ\B«$RÆ\q_‘æšR?ŁĪŚ+ą¾jŠÉć_YŠ. ‘¶Z$=yzJiDž¼Y¤Ė§Ŗ²éóŪM­m/šĒ%АAōē5ę·R?›"łhøćƒ[˜T¦PņćbųŚŌÕPÉ<Įj¢Ž½³[EmXUŠVœHøņ1ŒzŸZŽiWÉ=ؐŌ˰.Q_ćŌŠG1ūŒ@jż)ŝ4ę_“3GµĆ}žėpłśķæqæą‡Ÿ¶×ü2—ķp<āJCšæĘ0%½Ė+ķ†Öóp ģ¹Ē9##ūŌ¤ŽˆŽNØ‘Ģ‚īk9–SŃ‘sō5Ćź¶ŠÜĀöī +Ž=qUC“č|ńžĘ×RšĶ·§lŌté÷Č>ia ä7®9Å~K|sų_¦xļĀzļ„ęk¹ēž’ĀT› Ć >¬"fĻåā~xĻVšäÖŪCM+F|Ę2Ē޼RāŁ‘Č “cŗąa$d\ ż=ꑉOļdśwÕŒ£\JrļÓqōŖŁĆĘī zÓ.Ś”Ė;$£b÷źjX·³ēŠb§˜Ņ/RįbłėÓæj|m1Uœ"œńĮcéTtCs¦ŅÆeеM7^±¹ŗ]NŌ‰ąņĒĶ ŠŪƒ)ģxÆīKž «ū[’Āėų'ą}UÜ\ųŽŃR ŒÉkr£īæqør3ŌŌKcŖŗŽńų£G±Ō-a¶DéåČ:Š©}ńݱ nFÄžāøŖ!Éh|ÉūržĢz7ķoū1ųĻįę£ ņų—Jµ—QŃŽ#óJBœĘF9ćń•žoŽ7šQųgćŸx.Y®’źŽźX¼‰PRFŃųƒÅsu±•ŽSLŌ?±u®T‹~ZS‚¹č3_Dųvi¼C„‹YI#»aBæÓ„fāƔÅŌü/t÷Z¤péא4üqńPkĢSJIʲGę‚Aå¹é]åŠn™ėdń'…õū-~vžĢ–ėŹŗR1•+güškõ'CÖąŌ­¢øµUHH®øÉµ#dtĻØJńøD~\+Ÿ–ä½įAīóœŽÕkĢäŸsø“X$„Ē0@ŲćīšŠŠļ.¬&“ģżĮĆ­Šs”ņxč›¶“e]§#ÉĪkigµ½±u½>B:ŁPŪ ęy6”ö¶ZİŪj§ĶüFŗ^śŃ‘%„HČēŻļW˜JV#‚ŅK²yŒ…Ž~SŒŌ·6>QC3;ß.M&¬8Źę“šx¼†=@l·$O ĪŅ"šßS½*am=³³åÉėÖ¤³ØÕlmÆlŌŽ[Ē$q©˜qŠņ›]unkU·EŽ9H;Ē­\\čnå–š[ ‚H”.vÆ­d6œp“Ę~ny+Re+-m-"¼“Ī_—ų8éZ‡L“R“ÉpD{€Qž1AŒĶ;æ&Ÿ„¹.ʱÄÖ šēŁ£š;†UČ;°Fö5N"¹bvµ¶yęše›ĢbŲ”™į«łļīuŠŅG’†3‚ƒÕŖ-©¤B LŻBK‡(Źw’:nŸö²æœLŁéĒZÉßc¢™Ščś4z…ō"=Ū@õéYž1šŽ£¢H¾t‘Ik4~dc0äQĢĶ9SÜók ŌÓēC;›‚äśWa-å ŗu†Fø·ŸÄ)J68żK >čƅÉĘNH®ŸJŗ:TQßfW”sĶk6ŽŽūN“ńI©”T¹uĪ ĘćžMxżž•qm~,„Œ+ƒ’ä”(›pXĖlUž6Œ““Ś”A¾å#F!xÉ4‘£mvöķ%¹bU žÕZīņXĆŹ R9õć=3Ć’īȁ®¦XīD cč0*„zµÅī½Ōņ2Wøj–ŁÆ.‡«iŚĪ«u"$Χ ē•®ā•¬¾CbŃ›ŠŽ`ĮķžW‡ėW”Ÿ.¶m§^m"Ź_øĖŃøėšŃT‰Ōh\ŁŪ@ŃÅ#¶NEhkZ4v*є1÷Ę9jnB3äŃ­ķ“IÆķĢV·›7Ø?ĘsŚ ų;Ŗk>'»Ņu ‡ŸĢÆ!ĄaŒńōĮ®y±§ŠÖųįć{-3D1”YA<|:0ĻēŠł’Į¾*Õ“hn Ó§ž f*Ķ#7ĢŲķš„ĶZ3|Tmõ GĮž”āŹ9jėžxŖ]2Ńtļ³Éž_.½mŒō>”Ņ*“Ō'‹QwšoæÕsĀūWSc1[µbCĄ¤žzӌū˜Éjw¶ŗõƒ»®ķ›c–IsitB\G!ą€x©r±HĶԚŅŪO¾­ß–$ƒ„y‡ü5ØųĀi-ŽÄ,Łg•—ī’:®ZVz.›ąešŅÄÆp×8ÉĻ#é^‘csom„Ģ5Ā” O@{U/#Åå³×µ(žśīķ-ßĢ!ÖX,P7÷¤4ŽĻDLBs–hĪ>•‡ā_kAŽM"ē•\3ĘNŻĖÜfƒH-NŖ q5Ų”»X–ČŗįŠdķ=ėŹüe¦i“ZMŖĮ꫇~Ķ“÷Ļįüé£xĘęZxJėO“ÓģŠ.ž’«KŒ†AŌ~•Żųòų²_ E¤!°±“”ŗ+|ĆaČ#?m±§"/ųĻOš—…<-ow žŚ…±<ˆKGc¶¼Ś=IÆģ&½÷’w<“ō¬äīg'ؖžmŌJ ńĒ5OUŅ’rK%Ųc$ąf Ļ›Ql“;Č­.![¶šVÉ »8ćµsvн”Ā+¢UłēŌŠ5.ĘŁ³µ£šw‰7ŻzÕ=2ĘŽļX‘&o>Ł‹¾lU©”ŁŲjŚ™,HY1‚sĪ¹ĶrĶm #bėŒž5\ā99“ `;m'•ģ+Ō<%ag=²\6ĆĪ?wéKœ ½UŪOiā‚ÜNަ2]Č=ł® ĒM·¶/«AÜýjŻÓfw¢Ō,ÕŁx^sŸz]Bīźī1§Ķ ­ˆS”ĒZF2z7‡V’I¶ŅŹNŃ L²÷öŗ]fł53nŁ?hœœ“Š *\ųŽX”·Ó¤såē§aQ&£(ŌIĻčČ'ņ1† 2~µƒ¦ŪÜŲ]ĀGj¤–Żśb®šÓGµŻĖg§ų#X×§“SZ 1Ä łņųWĪ-ĒŽ<9mØB§Ha)icVɐs€ŽÕ©Ös0xµœŠ¤“.ų»U·Ó4Yc0“m ąūW3šęųrŽY nˆä9$×?AŒ£ZŪé6öĆģ+Ņź3¼×—ĀE=½½Ę‡ÄāŚ)łLOP;ū’i†RkÉ5y_I’GEq‚¹Ą>ÕÜxLXeˆ™głŃ-¬RŸsnū@²2‹½‚Y·nfĒZŒˆŁš=£…Č9ćéQ#Ndr—2†¼MÅx< w§Ė«}“s3l‡8ėRD„б¦5¾¢cøbņ{×§éh–ö’ņŒƒīäć§„2TN\ÖŽ fi$e' =sQėĮŅźBõćœÕ8šroy*"™mo˜ćØ5oD¼“¾[É*¬x''š›(X±„’gŹT8Č®»L{KkG“tD«Čśܕs§€·ö]Ż¼Åp¾Y” Čx5ę_Ł—¾×¢²¾¾µøS•6¼qßó4iĖÜö? x¾ü  j†į qĘ+Ł“H¼%wvśŻéš'в“åqžćńśŌņ"ұņ×Ä CM¼ń«ØiVģmŚbUƒg”Årŗf¢—7ĄAÓęõ„Ź'ęq>$Óŵō¬2Nõ9ݚÉ[O6o8žķfуGq¦iJĒę¼C–ĻjØÓ¦‚Fœ0²M#FÅÕ%8Œ¢Ź¬WŽõKRŌ'““irZv /=*y‘ÉĻĀyčKQĮØd»k›•ø0[–Ś8©"Ō{—äŻ$K.vŽ:W¾[ŪivZuµŠx®VX7gn 7”üØŃǶ³v‘«“2DŒxcĶź jŅČŪĻNh"NåOé:ʛ”ż“2A!® ü£Šę¬-ī& mŪ’Š "¬h[hó¼ną7˜¹häWØčipĘbņJĒqĶkŽ›ĆšcjzŧšE½’ ¬F>æēÖ»Ķ^Ž="Āk¦·±Å)D²ŗŸRžģżŗGˆĖę ߐ ƒŪŠ»‹ž;”¶ž9³mčr*ķu›É‘tėŲķ¬3.Ŗ³¤_IŽÜY­ąƒēęÅ!$rŗ†Ÿ¬]ź«|ŃOehźBA³å<žsĻóŖRhśģ±^c’C¹@~vކ{&X[ø± LŪ@ĖNj՞«|[ø”¢l`ų†×WžśQv$‰Š°TÖ»i­g£4EĪšQ»$śÖ2Vw2 ¶bQw˜qҹ¹g‚M~P”˜dśā‘ŖcoīüŪĘpOµg]“RŪ“nøz·F%[k!ņŖ©· t-)¶%žMĻ…éŒŠvzl:|°Mi³sØÜĮ;ŁG"<¤Ė1NWž½3CsÅVźś‹Éؤ…”¼+ĪåŽ{›—‘­¤ˆēžō±¤‹=§Ś-̊HŪ§Ö½;D¼·_.Öēi‰Žø4žĄyÄ;*ĘšĮ¼0;žč°ēqX¾·ÕDĘųL¢ÉÓ ¤IĶef;„®­ø–Į6Ķ–aķ\,¶7ŻD¾xCļ #ҵŠ%»~›;kpÉc ¼ßi·møqĻ?˚Ķń=æ†|-®iÖÜĒ&¦ńenü ‘Lˆ¾…½CÅ'BD¶ö+v¬`€ ¹÷śdz¼šµćjņ+,R6|~Uēµr£›ń-ī©ż°aHÖĘQ“\qųb¹ķG@±—k$(š²‚čĖŹ° «i:„O©ŁĮm§ĖņžhņÓŽ¹_,S[Ē ›Wꐭšņ’]k~!šóč6“K)`ÆŃóÕxēšėžI§iZ^‘įėõ‚ F@!ɶąrżuœßB%.ĒŠ6zEŌŸJ[iįŃ„Ü   Hqżźšf×Xšõ„äQ‡»½Š2#1c"vÉ=šk2yŁåkš¤‘YjodŚPé*19 N+ŗŌ4Ż{V}&mśkG‰ÄŽK`Æ8 øŪ”jņ=cOŽ&{‰ļ[płÜŒØļҹĻÜ^_Č2“¾r}ś{P]Ķż[MµŌ4Ė;·ƒb±lķē>õē¾2“Ńōż>×ķ<åpCö_zŅ2KC9K±æąe'±–ķŽęcGS•)ėĻ|b½kĆ:>ˆnc3jpŚÄľqō¦ßDsŹūß4‹ŲÉowi=¼ī08ĻB x‡m%ՌғsÅ4l0џ˜Ž„“±‹×ŚŗtīóÜKwly‹zżÓųV曪­õŒŽŅĆkt„yØO${RWBg­xX“žÕ·ži|ČWå8l}Elų·ö™ųoįųŸĀZŒri÷ŃZJØcRė$„éĶir”n|*uX/YųJ;}ĆJÕ#mBÖs7–7 SÓ¼×”Ųܙlu;“U²Gø“‰Œ© |¹¬ÜtS—FÓ­õ+MM'{”';?)÷®‡Åž]¼Źŗß|C²°•õĶŹĪé@żŌdüøĘ:ŌI3dŹ_ |kŽ5ė]yü›ˆ“÷(ŽxņÆ_Ölmd’䣳eŲVA€Ā£™–äx÷ˆ>xjāöVfįwņŌaHéĶq:Żķ÷†,oÆt¦F¼‡”ć8ō5©6#šēŒm|NāņęśöėIJ¾N09É®‡SŅn ³a}ȳ““ŌūS°ŽMü<²Onʇ<ēšE°HœÄĮ–ډ”¬z¹¢j^š¼z½¤+v„4Q¾J«c“ųW?»Ež+Y‹O¤|Ł# ē›,5žˆņ+‹ōx‹€īDkė\GŠ“)noį›KœIl™qØķÅg$Ł1Nś”īÆęµžŽ +Ū‰.vuŒ”ū×”Ż\ZźśTŻC,h|×ī8źj¢šŃ›Ę'¦™<.RŚĒI¶•-Ś%ó%`–ž{×͟-­®µo°[®ĶÄ|£ļł­ąśéžk—,Če[Č®GØķ]ƆXAqŖC),ŲIØåŠÉÄōOkz¾ƒ¦GmŸ+Ģ[vv Ē­y}·ŠµK›čo'šTU8IžĢG·[Ķs}„Äwˆē œ «źÄŅŪ §!ˆĻC]ŌŗeŠŚ…ŠŽf @ä։Œäē†÷Dø‹ĶŽä,ķ€ź™XæśŽõŽép^ėz‡öfךŽŸy耳:ŚėėśÄ·„qZ“!bä±Ļµ^¹µšm]Xł'ĄéÓ“©ē¶k‹›K 1łßøMbk×ņĶØ2ESY7  sō¬å.…)=µÕƟpoa—ažžµ•}įö‰w3¢ŹN6Ŗņ=ė2[ -¦‘4óźA\ō^: č_Äŗf±m%œLĀŽ2ёžEoŲWƒœWaā[ZÉ!‹QøņŲ†hŲrœgŗ¹ Ō¤žÉ¼”ŗK&į± {bŗ_ko{w%µų¶²¶`>7=i‡ ķ{T‚ÖötÓ÷ÜĒadĘ7Ö߂õ‘”+±ņę9ūŲķĘ²”»Ųõ!Ū/VėȆG|»Œ}*üĻ}bHžŃ~RPk7.ęńVC.ü9ż„lu gHÆ8É„&|ślq¹fRwłäi–|ĻńCĒ:Lj5WÓśźM>"•8\x×Ešõdµ÷QH¢·@"äĆæŗõ åīuą×“ADø½9˟ø8Ü×Ī)Ń廳‚ņž8¢ŸīeG_Qźiŗ„Ź/”ć×~ŌmŸķWvAdĒ÷R°łe ×“ü9ƒKÓ“ą±[Köā\LN¶ēXŹ”­­ŗló\"¦~ņ⹈5 óĶ)D![9+ŌūÖ*cŽö0ļc[Ļ5KźO™„AØŲ¼­c!µ•ĒŹĀ¬Šé—ķzU“~uŪÜLytÉ'”ė>Ö/lm Õ Ždl² …DZ¤›Š8?ˆ^1šö£mØY„¾R^\—wµy֍ØŪŪÜ+Ł#Ęē®QéTˆ’čzܑ›Č`»šFcüG ՘ךu­ų‚ÜI"Ģ@«e.†g 43Ļ °…c‚2—-»óŖÖHm+‰Y‰ ķ^śU©XĪgIyawev^ehŌ‘×¹śV¦š®ŸĢĄ\ü»N3Ēzī5r¹õĻģįć[ƒÆOįNHArM·˜x‘qŒqļ_m[J°•fŸŗiKbŌźl/#[Ø%øP؁æ…|›ńćĆvś‰µ/ŁŁĢ-Æ\ȅ#Ą †#ōü+ĶÆŁ­9YŸ.Ēā}Tż®Ų¬W6S?;ŸŌgóÆŅoŁ÷ʶ> x›į_Ьķ໓Q%ĪęU*ĄžG¦}źa ČźO’‚gžŃw?±Ēķ£$^#ø_Ćżu£Ńµe*33ķIX28÷ĘEf>%¶±Óõ(ļ4§3iW³Ūøl†VĘ}ŽEnö¢{ŸĀ¤±K¢]Źa•~hŸ¼=Ŗ§ĘÆ 6££¶»§B£W“Üż?ÖĘĢź3IÉj’šVOŁbĖąæĘKĻųY’/†ž1ūFĀ ?čןņŁ72O8ź3ŽÕųy¬ŁEm=ĒŁĘ÷Ś9ϽnrŌg=åH»Ō”ŠRAō"”ł[„Ÿ-|3Ō4 ėø‚Āź"ó`Ų0Æ@?CX¦¶9å‡óÉ’żŸī-£O‰:&Ķ ‰ŹMģW£.ļPs_ˆsŹ÷)0U1¶ćĖVš}y^ڤš][Œ3«ńŪµ-³“»Ęœ~SĒå]*ZĘV&Š7„Ž ćµHņķĘŪWŒć­g)\®k²¼S~WœāžĄ¬˜| t©.ż՝“ŒTįėųÕŲ¤óNQæv§zÖ ¹Ń 3V ˜I ¬˜@wuÆÓßų%ķowū=~ŠxŚ‹ų²f]åŲm/f68ĘxüiµŲé§3ūŃżŸ¼_=Ž§3ÉlŗeüK*€Ąģ”™ķ×ņ5ōķģ0\2˰.į‡÷®ZˆÓšę]×öEņÜ2 –<åHįŠŒłWń›’šż‰—įēÄI¾:|;Ó,ķü9­ŌK$s3øąc<ō÷®7+1Åt?œ«lÆ“čbxķĆ)ĒŻą0ķł×ҟ ä¾¶Ōō›øŅHg·`Čįr?/ĄV2c’>³—Äž “XÓ%ÖÆō×žt6¶įŲŽłā¾iń_€¬b×5 [JH”ņ£Œv'@aĢ÷z3Š’„¶ļĆĮtĘ]ńy¤…«žößģóćX|[įiō¹üˆļķ„3ģwŹ€~ā»)TvŌU(+j{ķҼэH{f.=ͼQz³żk¾ ó*Óč^·ŠKK™‘īķĖqĒ W]el‹orėt¾k© ĻCō­ć.‡<£cŒžČšī K{¼†dyėQ\ß].»²ćōā“Hƒ“i’{„u“ßµmÜŚN°‰aǵiĖ„Œe¹ÕčRN¾H“lØ>žzOńśKĄaŽ"'äŠĶ«Mō2'øGD;ŌcšÕšĮ½æ»ki B±ĀœåG4‹-ų¾ņ]>Į¢€IĻČH=«Ģ“ūšź Ģİlą.+H0gК>‡gu” ¹X­×löÅy¾¬DWmŠŅƒÓ¹­”Œ%.ęž§G-¼Š°1?.:jßšõõų““Ę,9=#9Hźo®āĶ|Ę>[8ķ\ģó[«æ–Œˆ½óh¹™‹,)y!x³†sž1U“ķśEŌ‰§É±Ü“ļJEĮŽ¦ŽjČYø%Hõ­ĖķĀĘ ž[•RŖ x2Z‘—R‡‡^Iƒ[ø1ŒæÖ›āĶNóÄ2ŚĮh¦{ž\j8ü++ūCĆ/ā»"gh[rœcӚm„ÕĢL›X+mĘ1Ҝ¦m“\Ü`ĪøÖö­Ć†É£óXøŚ=}«bdģzĶĆŁé60žä#9݌r=«Ģµ­GNŌ/c淄Fąm§ƒļW“w74½-r&Q9‰öēę=ŗę¹&xīWUb”‡|®Aó#RĒL…åŪ+2<óüėFėĆr¬Ws3ł‘Ŗī8?tzžµ‡ĢŒ¼>ŅAę—KŽĢvš„uł³³²°“ŖēŽ•ŠLķ<|—P“pĻę•ä©ėŠå|U%śjĶnįs˜s’>”œz"ć{ÜĆńEœvŗ•¤Ž®ĻūÄ<žq^Øź>6Öü5„Ÿ„ąKT1D@*9 Ė][YѬm®œģ)†–/ˆÓxƒZ„LF®LŠ?ŪłŃČÅd/Œ‚˜FEßjbo Y%¼„ćBĪÆ+ĄÆŅZĪćQ±øĪüŗ’ĄsųŌĖbŃō¾‹+z×ęeBW XņĀ®źwQĮö˜X,žb ŸZÄó|~Õ'“Q¹‘3”” rI’õńZ–£§ÅnÉl÷Ÿ•¶€ żsU}qeĖ "{ĖšHŻ%cĄ€+Æš†‡ŖD—rL|ų”P£ėM®ˆ¤»–ą‚k9£žKm­øīē·5³oŖ[yŪÕŸĶŻ‚1÷jv7>%]cO“MšhĀ¢€@ć8åqßÜ]_<Wł \øĄāŖ1øČõ?·†Ö;hļ"¹ø¶°ĻÜ“iayyzšµĆĀŠ4”ń×p«XĘĀ4üāV6¦Ź8’žƒóūuŚĆ°Ž2sßéRŻ€÷]%PĮĪnp§8¬ķKPDœĀDdÉÉėT™9-cU„;E»n’Aā jdictjæ1Įłi™’ęm~W†Õ¹ł½ķ\ķäWz%ՔӀØ[k&2[5Œ·7ŠŠģF‰īØkĀf†ŚT#§\ōü%µ·ö®”‡N–IUOl‚pjF`ź6.ī#{gūZŒ`›ßxĀÖw’„Ō²Y­Ź+²œ0EŁž›?ƒōėČ7‚éy ėŠ†žŅĖO{Ó“ŗXšĻżüµ<Ż 8}[ÄI-ķŹĖ:3?Żbk³ŗµŅ“Ræi|÷f!éłU)\«Ø]hž"¶¶ø”yWŖē ƒŒb“§ū1HwŽĘpMŲÖ¼Š(ōÆŽ;-ź€@ö®FČŻĻv#`Ź„³øš Œ;‘ų¬Ūé3Ē*ĪÓ\Ī1ĄŖž‚OĖ%åü ‘Ś 7QA©Ō„µŃęø@øQī+ØŠ'ŪCtI‡‘€p?:ŹRWćĢÖ> ŃÆįÕķ`ÕdCi ‚%²~™Æ›üQ®hŅÜh×6Höŗ’Ӕ9żĻ„M€ģæ­kėDģšZŹCƒĘGj© )=ŠĮ½nˆxūQY—ŠŚÄ–ńŪW©nµ t:\śSA4Ū*\*ƒøóøūWā½"÷Pkkˆ.Z#r½˜VĆ14§ŗ‘q01²’¹ļ ōė;‰–5{…  ŒÓŠĮo ņÜÄrķĪ1ҼĒ\›eŌRn9g¬¦”‚öęyLS¼‘8ĮÅwž žēFk˜§ž8āvŠ‘éZ„aÜō BŹg[ŌäØćž r÷~ µHe±h’ó9ĻSRÆqZéÖ䬹‡‰ŽYJ}ŪIw©Yi¶fÕ¾ó™0OZM÷„ŗųu<ńÜkæŅ·’SkCūę8 •‰‹ČĘ9ō¬ĖQ=Ē\šż­ŒK5ģ "q"1ēw„rŽ·„é÷é}¢¬ow(ĶĄcŽzzŅ4å3eÖ§×ͽ„˜¶ŽM»jóŻRÖ{BęŽõƒŗ¹R{„ ŽšĀY}¤\żŖTŠ02¦~•Žßj6w?gInB[ē–<Yū0<ŸÄÖrj‚}4™br rMv1隿‡ķ-®”²•Vo”0 īiXĻes,bo;d‰ÉäŌ­J,RÕöŖgļ`eß,Ī÷’mŪņć„eMøŽń×wĢ“ŸZģō_iQ>Ÿ§ŻĘŠŹĪ# £;³Ó5ļ‘źśŻŒńŪēģL‡rćųČ«ę%Üņ »¦¾½¾n<Œ|˜8Æ>šõ“žŗŌµ /˜éĒ?ŗnJņI>½źŸFzŽ›wcg¦Ķ,(±<§Ģē¾{Ö @ś…Öü«”å³Eś©č§MŃ4جdy„ŠŲ܍„ö¬éʁø<ėŪG•ĪŠAm½ėAÕ t1µ 4šńŲJŽJœ(ģk«š…ōzµµėGsgµą#¾Īq…č K±ĒkZ¦ƒ­ė3x`M’U]ī„t޹9<™#ÜE9{yF<¾‹ćAŒ„ŠÄŗ’-³Æš7TWWsźr e²Z BMA4Ųdk‡A0㮯;ŌÆb»ŗ7@d˜ćځ§b­Ī”ēµŗD¦5TŚr{ūSķog¶Ł:–° Ž ę‚õg©^ųĘ+Ż9-–Łęæl}ćŒÕV+H“cwpūV ņr;S.Ē;™ksH?xx>µ·¦ŪK§ĶŁY~ĢNJ€ŅŃ\ź÷Rø…‘TuŪÜ× ©Ś\¬„ŪĶä6ąKvÅM§ź°Yj1ŚŻĢrŖ½{<:=…ß—" sŒž3š dµ}§šŲĪŽEŗ‚8Ķyę”<†ś#nŲU',x ‘—BKÉ£vHšQŠ·µfŠp2Æ(ązP„÷2¼pĘNÅƒŚ˜™VŽ@Åßø«†ęŠZėž'¾“Ó§Ó¢D3ØRøėŠół,į¶Ņ®fGkv?;8ēéZ›F]MÕ®by-•¤a×s–©¬õ]GKÕ¢˜±!Ū•õXŠļüYt—Śu…½ÖŸ+E3+å›ƒĻ’Z“µ/Kšö“¢źPm)Lä·ūXØä#½m6.Ÿu­ėkic.ē²ńÆ ž=7QÖuŻ>,Ķ)~{Ÿ’V(I¢y$zlÖwPŽÉ ó7¶kÕt‹I®ćS³`_NõO©.,ŻÕō}J*īīP#‚k„°ÓgŠÅ{‡•ńĆ1느±BņŪ°qXr[Ēsu²?•ø}Žhß[iö1Ü *>]Ē'>µ·gj.–&i\ §¹ę¾&’Ć\œĒb„<§1Źp@b:Õ]*źŅ+–°¾ł1Ā:Ó5:FĪĄÅl±“j€ä±n€śÖLāÓLøu·šƒĖ į½é…Šwž!“·†9U·DNÜc‰õw¼Ŗ~é ńZÄĶAž·¢jPÉ„łܘŠ•?7zĢńi÷æaŌ`hŅhɉ› –ēō?*«””Ōo­%Hm¦Ż|ŗõ Šõ+ L-…ĘIUo™¹ą}ió­vŚŚŚŌˆNį»z€zgŸė\<2[“¬Œ|§#üę¢o ¤ŒRŅ6t–ŚR?6Oņ­­e·‚Žg…Ā?Żbæz²0:褆+/µ}§ēĪ cØ“ĖۈVĢ]B®GŻåh kå2Ü<¦EEݜc­&„,+a™XpcAJ7%Š“ū}VĪc$QyčŲćœVÜ~ņāżŻøņ·dįp1y4ķ2Ń%e_'pž•Łź“ipĮ½„Ń]BœBqōēŒ¦ŽWPgŒ(QŽ•oI·“ŠE–į6=94Źt·Ź5l4ņ$‰@óAę°5KŪ]"Vö§Źś £.¹Ū·]“m'žę¼óS’ā)„}ņJü‚zSéŽŅŚDkŸ³dF7°õÆBÖu«­÷J’ŅŻ#’6< ;HŸóĶ*'Ķö~Š]GO–Ė̊ą„8>¢ŗ_xWAšŅiWRJņŻ\.0Ćw\ʐån…ØīśĀĒĪY(¾ģdä “×ĄČŹØzœņ*ŗŽęļĘ×wšŠhcæŽŁHF nǦzטj+KŪIEœC1 ®TŽOlō«LŁ= ›†Š8dFŚņŗ|£Ņ³“%k»–ęFóYƒF¹ąq҃oòw]NA•†ÕÉėOŠe–T’ō„Pzv„(ÜĖŁœ®¹¬E¦źṘķ*ņm1…aÖøK»›»Ū©n–E‹*į•>Ģ»VŹŅ@Ķ'ŽéļUęei£D8;‚ŒŽõf-Ž›l–±G$<²6yĒŻ¦ŻĒotÅK+Hģh·e¤­ßŁÓH9'„{f§ŪŁÜ6—®Ķu,YXŠ}ęĒ ƒõQv6C„ńŽ…į},[}„;»©'q'Óó~«„I}6×YsĘTā“U U[£€ńʗq¤X,Vó?Ųs½€9®CĀŽķęD 3ƒøœsŠNf©čz®ÆX­ŌPŻYĮ<_wi ł×ā߆zfÆ«[Žé“] –rŃY©Źrzža9#œ[O:G²»pŪƒ^į¹[J¹Š;PÆ `õ ĀR.ųÆÄk}#5ӑ4‹åFÄą)Mx¾„ā)ZŻlÆ$óŽ% ¼ ļAƒ<³U‚óRŌaUPśYĒĖøē#ŌtÅw¶×7–æfDŒ[ŗŒ€Ķ-ŚßŁĶoØZĀĢĆfHčO9Ė^éó$öā?1“„Ī:ŠFś„`ÓĄ“¬gt¤Ž§ßŚŗ Æ Ē®Ē Öœ&œdł-µ¢ę€'ŸEŅÖ+”ŌÖÖąA+!Ėö{ח§‰,u[›ķD±ø·ø¶;~xČó2?‡Śž_3j&žQ<“¼īĮąZPKxŠŻ!G7 j濇i#ÉaÉ>µņßÅ oé"·{™}Š7œ@A1ĀŖ%ū$v~³‡ā-Ķī›ńĒĖ£›H÷Ŗ)'rŽĶƒõ®ĻĆVz%£ÜŪhŗˆŌ,÷±Y™ó¹EQ›¦uWvš>„§.•1Żj.ŪĢŹOŹ; V6™švśÕ$Ō5)Åā³LŒtöüh#‘#„Ņ“C”YM{§éĀŲå±ĶĢ?żUņϊ4mž,»ø½¶’ŹžFĶŹ‰ ƒ×éE…ds>-Ń-¼aæ£$ļ²pŖÆŃ±Žé^·ąæ‹ ¬č’Iā}>ŽĘ‰‘š?ā__ņ+HžVĻqŠų!|nÄž/æ–ź’,BŽē=y­#eSCŃ%š—†<5¾ö=Ś+ąIIć\p}Gzć¼nņ [ļ±Ėz‰µc @1’ybj£isĆ4IdięūMć2üĢN9Qķ\Ę·ˆę¶–YKģĀ©ąÖ‰<1£Ķ»Mjį‘Ė’:~“Ó±ŖžŗœĢ -b“HHµÜYFÜrzÓĮói®šÖŠ)€ø,ÄäOšÄ\õĶ^ŚĒU“‘Ž5W‹Ėpõ?Jņyž wX¶ŌEĒöe”cnÖßĒ·z›“ȏJŃž\ųFŽēSÕnnÆŅDŁI@÷qךå/Ūģ3Ø”³žJ‰FäÉXó­wāåŞ¬,cŅŅ;eŚ'•›ć®;×CÅ==ōȕéļ‹HĆäQŪėIDZm„üPÓõ-:ōjĖö‹āqavąś\Oˆ¼]ØŪi—6wwzt2gĢ16Ó"śj“ŠP9}*I‚›¢›NÜc9#Öµ­õĖxāø2Ą®@ĘsózdœÜēP¼™¤¶¼k[D`ĶōĻJč gņÖX¶ĪŻTgļĪhG¶ŁK„iśtkØÜĒڤ"0$“ĶqŚ÷‹ü4ā; ^ź6ēąghķ€?JÅ(Üń­_^Եˉķ!Cl qĮ®HšĢŗ\ĻĢé™0ģc;‡#­h™<†f· ÜßĶO¢4—'nFįŪ5›©ų3lk½¼±ØĮ݌õ¦h‘”geg¢["4Kö„q'˜ĢxéŠĒ滉$%+3nź&h¦i[x‰ŚŹH%%ć–ÅMmØŽ\Ä^ŃŁS)ėžQźC“9 _R¾›–[†`²7jŪÓŃÉØĄv2ņ£ŽßćN+BL™ī'Ó. XF†ą${VµŻÓ’b^›‹9D2!®G­ir£˜~ÕRÖŚx¬‘`œ”Æ5»qÆLvĶ©ČŅJGÆZظǹĄjśĆkSłWD‘/ qŠV4w/ŹGjŽ`ݳ+@hwwŪˤŒKĪKäp=+CĆQMQÜĘ#–TļéX5ŠžcÖ|={5ō¾UŌ©ń­zLPZAńŻĶ©Ć+ƒŒšĀKRāĢ»;Ū]"ł~Ļp#F“å|œ}*ī«”YkZĆŻż˜9Ėįö–&®:@ņ(ü1¢č7W³¶¹Y›k™ŹLóŅ­üFšĖŸ ŪĮį¹w@ģ…Ņ4äpkhĖ”„‹ß³ē‡|Ga©x£MŌĆcˆ¢ķ‘ƒ÷¶üUē¾9ųuń?jŚ­ä'E`DrW<æW.®āh­ŖĻ}ØŚéś.«4“Į £ŠWQįK8,mnŁńøą–Żģ+žQ²1k”ŌÜĖ¢Ck$0»LTķ*Ų9’ ņ;°¬Ó$.IćŒńY ĘzĀbL„,I9bzÕ(ļŚ į…šøļŽ+XČBÓķšĆ8{yāĪxē‘]L³YApĶr‘ē'i ÷«óŸˆ›=üņĄØčĢŁ«WGįm3L6ń“— kvģ< zb™ŒĻqŅtu4± UŸ*9$šņŸxf j©ÅŁ»u0Ø|ą_š«†āQ¹­/Ä«ŲžĶimck„ĮQóŒuśÕŪAŖbi¤w‹Ž‡ÆćZRæųŅŅ8/ūMä!Jņ2{Źø·™Óc9mŹI®Č&J™×xwÅ3čW¶ŹŁ¬·1Ÿ•ŗ2ÆzżNšˆāńއeāxå†ź6A:ø ø^?•jg9]Ž™$ҧ› łzd’J©ćO Ūx§C¼±ø‘„ĮÖAÕv‚@S\•ŠO©š[ųN×Pšķ‚D݈ĻL0bņÆEųo}¬ü/ń†™ÆiŚ”éWwĒ{8VL>āøÕe{3×§”’i߆_ŪxĒzI²ŗ‚įRāX£_•$CłēńÆéóž EūNé?µģ« ųCVŗųZ^/c}ķ™'Š>©źTæŠŸZ苺hÖ[„ś,ēEÕ-53ĖxŪ ’JśŚW]Š–ī2’[ÜFQ²2Fó©lāŖ~ĮN~üń‚Nšnīķ._WŃ.ĆBĄ1d°<š=ėų—ńī„t]BźōūĖ`\£#Œ²8$0?\fqT‘ä7{ŅuY²Q‡ž­+*/.sӃõ­N'»BInlŅ£¬Ÿģō§¤QĘßuXc$7j†u(ģ»T£Ž–kˆ„Æ 0ĢNÜōĒņ­`D–‡Zŗö¦ŠŚZE$ŠńŖ9>õ”©é·w`Ž•w•#yąV§4Ļ:ņ_PԚ]ų#?Zź¢[­"8„UO/$:õĻįHŹĘ¬­ž§†6wœćŚj;½2ę+H™„œpAČü()Eu%Ņōł’åTUˆąƒėLÖōoŽ ,LI"°-ī(4QGMįfæ– ‡‚ ʃfCWO5“ŗUüšĒ$ņ.ŒH1Ÿ_éKĢ花ÅišRh–&X.£ŗ~U›®x¬o¾Ēr„NfĪåČĪ LJ0“‹hõbk+Ā˜]ʁŽzu÷®£Õ²yŸzŅÆąÖ"T¹a7eŪYÖ:ŗ±¼¾E¹¹ ęg+NAI_CÕ.µ+MsD·Ō¦†s¹Wn1é\PÓtÉ#d·QŲåN)ü(Jź4ˆŽÉY­•¤et š=kšÕ!—kÜ­¹II,qš™2%­¾”;;<ŒU‰ēڶRēTšXR'g“#ę$õöÅ@“5.oÓJµ±¼²ʁڔ¹–-F}ˆ›€^œŅ4ŒŽ§Ć6« Ż ń"Ė’?Jź59æ“.žäGgłŗp”Ńgyž‘¤xAļn-¦¾ŗT“ŹŒ«æ•y nõķ7N°¼ÓMŽĘ$r÷Åj– PńF¹uhÖp[pøt5ę:oŚ »Ž#“ĢĻnꛈÆfzżī”Ś×‡>ŹĢš\,ŖćkcĢüžµ™gįŪ.xäV²üĄßZŹTŹęfß‹µ«}oJÕ#•JĮņÉ \¬ĆŽæ•bkwŚ:Œ·ŒŖ„‰lc…ĻaY{1¹³:?82*1ِ@ĘqĶ{®‰ö)ąŽ Āßhų“ZÅŪcHŻńiśe‰†)äH£μ\Ö-/Ś5ŠY'ĆI=Ør Ś}Œ€#@ĆnzcŠnµ¬Ühŗl® ¬³6ÖśTXÕHó©#Ö5fVxķ –Č8ÆešG‰eŌ<-q¢Å¶˜g.G8ČāØ|ÄWWZtŗ]õ«4’hU"2½ ćÆė\•¦a™Ź¶ī£¶ KEś‘꺇ڒ<Ŗv€Zķķ&IXĖ9ß&Ž7V|Œg?ż­m«I<ˆ»²Gö»klZ„€9ĪŽsķDP Ńõ‰Æµ{ *ĀŚK„Ā€?{šüėź/ģ ]2Ī{thِćå±Rih“ė öy&»™–8P浥”:„śŗ1‰÷ü˜|ĒzĘR±qÉ¢Į$ęŚNC޵-¬šĒq ŚŲš“¹Ń<:PROs[šžŸ-ä‹0 x­ĒO“»ƒNE4±‚§·½iĪĪV¬E}¦É«‘°ā d.3ŠƒLšÕʝ©E}sšŽ5 Æ÷æĀ„±Ų¹y©ÜŪ¬.Æ"Ś«p=+œžöKł¤•HīÅ#9+ŒÓ4=Rų=Į>^å-‚r6Šō?č‡MŃuØ%H„k‰w‡Q‚OØü«DÉTĪ“IÓķ“čdĖPŒŁéӚmՎ®Hč‹ ²Āx­'ŲÕhGā+k»M>ĖDŠÄ,2”0>§Ö±¬5|5j‘Gl°…qP\c՘:§ˆŅ’XmJŚ%µd]Œ‹Šš9«:gŠ Šä¼Vą\ķūĒ”¤>CŻt-jŪUӚXī"šķ^%ź­yˆõĖ‹ĶtYŦŅĆēūø4X‰_c™¾ÓEÓ¤±žń”ńšĢ’'^X«ē4É2ą•ČR ©ĮÅu¶Ś[j"‚PUNU½ė$ģmk—#žŠ‚ąĮ<‚éxćīŠėķ­¬³Ų#|ņkDŹ9i–‘M¤=œńŻ“Š|õĪD|Ÿžµ]šƒ‹+«*"¶‚£śÓK\°¦ŌīļcŻC!Š|£Ü× ¦ųóHhāÓ×zl£9œb²ä`küCk{Ķ>Ę%ŌbøāT ł ÄtÆ’„wR¾ß-•³Ī±ņåFvŠ|Œ×įó>ƒĻŚ#īY9!rqŠļu dĻp`‰‹Ŗćw±«åčdŪ¹‘©\^ʰ,£ }+ÆŅ|-a©hrŽŽ_ RŠX³p8ģ=źyQ¢æSGmüč!œ\\£įˆģµgT°^+yģög€qŒŠwC8=dE§źqXŚyn$ü^ā½F’ ˜”ˆŽ«Ü÷¢/@:=N':ą„łЇkÆ-mā{{"4Ļ»÷»ŗā‰æöd°^5Ų~MUšIdŁ&ŠČ8éšJc=?LŌ­³Õ.Gīߍ»»{Wœų‚ X/į‘ y„‰#ŠSęź#“ÓSuŽņŃ© `g­&™töz«Ü:‘ˆĢxģĄÖM•srė^³‡N–ÕŪØj²Ē&2 (8,zzō”“©[Ėa‰0*Bb¬-É?‘ü«Ńt-fāēLKKĒłU‹)&Ū$’¢¬‰gøµqž"šŽV[D’,łø  ń¢}˜G¼(Ēv„»[„°TŽ e‰ĻßŪÅ±É k«}V7’0؉ę#œöÅzN“āķgÄĶcsu$jøĮĒZ”YŌJk{RLė6Fõ9Ś­s×zźŪ­½¼vrīćęģ£ŽXčVk«Ö{t9Š4 Ē8“]χt‹¹b2£ ø-ך˜÷*–®ŸQn­$˜FLy‘Jł®Ńå—VÓļoīŻĄ<§åopGo„Q±ōV…yoØ$qłr¤[°I{ž¢Ŗźz}§†µKĶVŅy¼‰P|›øéė@ŗWö6³zž%°Œ=Ņ–¤=x8 ŸĄ×U«jŚ”+*+*šF&½ EÓ“ė[#~Ė4N†NG óĮüŖ¢Ķ…|—‰ØĄ<“šéT|KŖāßū&0ĢüŽōJŻōoųvąiQ,Χ|{ČSŅÆŪi®©$PBņ<}qĪHÖs.”&›j—kÉQŌ –oŻÜĪšŽŽ•Wl¤j>諌.h©÷9Éü!„Ä®÷Šv Ųs[>ńō–W:e،[š±Hjł2¦ŽęļXMNŒrŠįHéõ®ņIimžĶ#B€9WŠĶÄēq9·\›ĘO4Ø'ÆŅ“`¾ŗŠ\#nFÅ%¹q‡q¾#ń;iČ–Ņ4"ØlW>•„u©įWJÖīųŽy­—‘”×k—kp-1½ńƒź+ `˜£ © «v=©•õ1ŽĪÖĘq8U ĘI*¬Ö3Ķ}ؐĆ4o&#Čł[@üé\ŌōĄėaįū»Ż>(ćb­ˆ€2GįśÖO ‡U]k7ņķį‹{ę ī) 0Æ“VøŠe…ŒĶƒÉą×#£iɧHļq÷wtnŌč[‹ū6IhĮ<µ4Ž#·š²F—@Hģ§ä;N848ßr”GųkÅW>/“Ö,dXÕąĒ 1ņž™üÅlI”Įu½“°sŽN3PąKÉų«Ćŗ–§Ų’fOoŖŪ“›%ł¾h’ų¬m>ĻQ“¶¾ŗ6ė6ÕÜ č×ėY“fąKįūł5I~ĖyfV µzc>µō?†4vŠŚėS†(j„tĻ$Ȥ8ĘĒ—Üx d×·Ž{ ’būėŠņ_ŲĆa­ˆķŁ$‹`ĖŖ}(7P¹f%ūu»A+(ć«*–—˘ndmÅF:ž(£b]KC2F‘ Xōžļ½[}iŹd*v±ĶmA¬$"Żc b˜õ9®9­®¢ŗ Ž ›€©õ«ŁéugpL‰$Ł ąŽŚ»™õ‰mą‘aQs(VLqI°9 JīVŁœ*ąœz¼¶ūQ“–‰ĖpFkv!,õ&Ōo “Fb”³ŸA^­>¬., Óą¶•ž1÷ŗā¤‰C±†ŗœPį'$ŹÄ€=ją¼ßfąI»•'ŒPO#8ØēSö»‰¶ä㜁\ÕÖ¤£ĪX›vzq Ńhv¾Žę9Ų2ßķĶ{ģ]ŖA/Ÿ&ŒńŚ£œÅ³Ī|C„:Uİ$­y+mąą(’ąōŲ䶉 ¶Œy±<T¤#WMšmĶö¹ öŪé[Ö^I‘„¤#š`tÖŚŻ•ŒF"© ČßÅ\Ÿˆīōvå„a$M›[Ó"‚Ō0ÖõǶŁ+±SƒŸJĪÓŚėT–-ƵsžFh+õæ·jŃŽńYƤ—ŃēīóĶp±kw/ēMy.āIeĻéTĀ-ēƒõ7@Ȉ! <³ß>õź^:–Į“KY®-”žxų†ŃO§ėYĶDxÕ¾¢·’ ر’³żŚē|Ei¬,Žl¤µlŖšÉ Šéō;=NŚŃ`ó“"ģ9?{ŚµÆµKų¼:ž Ōķ,²¬n¾ÓĘõoB}¤™ÅŻĖcx’Éoˆ„GCXķu$p”ŗdfĪ0­X‰4ł°ņ,Ø +Ÿį5­gÅؐÜI¦2÷öÅbź–vė[+ ņŽAö¬«xŠÄŹT|£ÅWūGŁć „wĻn+JŅĀŽK…Nõį°ŻSÜ쌲H»V@QUāÓml-nnęó>Ń·ä»{ŠAĒA­ėśœW6V°:d'÷ˆŁ'žÕō¶•­Y_Śh ©jČo„"9ŽQ÷1ĄĒąrŚįÓ^yÉeŌ”>ŸJņ»ß·jI6ėj§ŽzŠ\71|O¤ZÉb¶ÓĪÜm‚§ų½«ĪDŽ΂²ź¬„Ņā,c ŽæÖ™ŃXóū×Õ,5(ē†Ļķ0DŪ™”nżjĘÖÆ¼KŖkX°œé±Ä›Š£ĆńŒ ž” Ķc[ähn5#Ķ/Ģ\©Ė·­u/o éšĖB5&)Śćłō Ę[ė~4×õME®n’é,ƒ ßē’­]š¹žŃ† eķdp£§ó”“4hĒŁŻ ŲҦ~šė]%īė¶h¢ß(Ćmćę¤fS¶µMVw›p“v<Œci÷®wÄŠ4Ńör3Ŗ2— rž ØK¤‡ŹxŽås܏Ą×„hž&Ó“k&H>ŚLlił³ō¤Ź±“āZ-jcz ĆD«æ³7«uÆ?ņ’³īÕ¾”÷=wǟš¢įc&ö‰…ÓƒÉĻœUYt'ń™&§k#G$ˆœfśSxgLŗµB±˜õ¦Ó÷[ėG‰Æ5ø”’ÖśéV×IŸā‡Ö€9]L†!<–pI#v¤Xśńł×²A¦ih„—ŸbøP1 ™4 ņOģ9ÆõÖŗ±¹7ēĒīģ=kŲ­|ĶĪ Ūń$VE„{˜qŸzĖŚyĘ77Ÿe‘%PĮŹåǵyOÄχŅYĪm`» XŖõ” 1±äž š†™5­ø’t™eą õ÷Ƌ¶Ń“ė«÷™`pĘCÄ‚1ŽżŖDp>ė–ZŽ”qŖėr^ł²™vŗ' ķéYæ< ☵ĶƖq½–v›žg9Iõ«H»°hĪŃ~Zx}–ŹĪq?˜ƒ2äÓ+łW¼‹Ļ|:šN§7‰m”xv’¬\eŲńž~¦”šDł£Lż¤uõĖ]/ū ŽėĀ1;Åjl‘yZš_ßųÅž=Ž;”I(#ģķžxaZF&ˆś7Įæ³V±5ļŒļu”¤1•BķbHž#ÜW)„é>Ó/ī,“]TĄˆž[däĪ YœåŠ÷ hshŚ\™āž,ļ,S;—Śŗ­Å0j>1»•„Ŧm:ī¤ PņMĶ’‹3š÷ömŒZU•½¬O/īœWчOzłĆ^ƒJŽ+Y浞Õdņćr#æ§JŽSĖ!±ŌįĘ éV£š¾™¢ŚżœĀĘJc‚¾•.(ÕHč®ļtO蚇&Ó>R®BšŃēŽ?:ģ>ü.{źC%Ķ֔¹™h°1מ;ŅöeJ]Īīž;=žF“’køå@ĢdŒaN9`3éA±Ė|Wų§h ńȳɨ2’1ĄEĄÖ¾mŠü[{ā[Ø×ŹDIī‘“€;ʁrÜŠ<ż·e]˜y˜_~†°"š„Vzh“g3\®į»ćµ¼ˆ¾ĒZh6v³ÜĻc›i$.Ļ(½sž$±Ü„ óŽŠ{V‚”¬yČO0­¾ĘFĪ3]v“e§i¬Ņ“+0ÜŖ~l{Ņ9äģHś…Šīs'ĢĒxŲč2“)#B§kšü}źĘ[¦śĪˆ"øšHd“d*A<=mų©Æo¬E­­ÄpEøołˆ„T›FV8DøŌō˜ą‚K‰.3øy¼‘ZSėz†«lŠ™¦IŪjŒö Ś2źˆ4Jk›„·½·fvyĘ;Ö¾œšķ¾‚Ė_£Ån±ćagiš{C(ź6ŗmš—N ³n,qĪcXZļˆķ.f{kėčḐ|”æå”&óœ|žµ¹”Ż˜ó€ųČØ ŅŻʈ`Ū’¹^ D»¶P_ Owt<·’GįWØÉļ\>½į-KIŌge/,Kņ°Ī0<ÖqˆŽNūl“wē„AžŠŗĢ‘«Ź8$t"Ž].ŖĮ§ZZŪ”…Q~r cžõĒų²E¹‚ę->X껈)ē”õpdōg€O ķµŠø)(ĖČ$ õŸ ˆ!ū<ś‡ø_˜VˆĻ•ž§‹.iā(n(zŒwĆų€’oźJ÷™šē9,zž5¬UTlhŪxßV„F łĆw&A­]WĮéįėeŽmˆĢž÷^=«¢;‘ū/ūBžĻŸ 4’?ˆ|1|tŻR,Ė-»/Ź_ŌÕłu-”–ÓH·¤äeō®ł$¤ŃćĀw!–'*¶²!xŲ’;WÖ’²ÆŽ4O ųŸKš§ˆVźēK˜•·ƒĢ;$—¬®vFŽŃ¼s¼B±ĆÕTAęŗm?ķ6÷‘įČq†\®GŠ×-MV¦ŠŠ>Wų©ą[ĆĪæØčŚTך]ōfY¶ąą•JłŽćSÕ§Ń.ķŅĀJø‰˜ĘĆ×ÓłW¢Æs¾œ¶’gOéßžźß5«™fń6žI%įÉĒ ’“Ö½ƒž Ūńė]ż’’lļĆ©H¶^Õ¦:~¬”ˆÜĄW*x#$WM(®k>¦éßCū?ńtQĮsåƒDŚ}Ņż¦Ų©ČŲÜćC‘^ĖšłļK%ŽPFÄF§åAĻR’¾ZųĆĮw×In­ŖY)ø·l œuS_ĀWüoös“įÅkŸXÄ-<1Æ<—®N!œ½Oa’*bÖČóźS?!õKO.i®I—ē`ƶ*„±o#Ėu tAčrJ• +Ņ īI 9£—åu(Gńy#ŪōŖ]„häŽ&^˜eéž’Ź£• ŲGŁĖ_ŸóšØī8čN·ŽdPįŖĢ«&õ·Ü7° •<ŠÕ.‡T$u ņ„¼¶·×öŗµ“ŃĻń¾$„©ĪS¶xÆō’‚-~×¶?µĒģ”į­:’V—Sų•įT:n¤“°óä‰sµ›ŌķńÖ°’¾‡R?Wµ!÷”ī܊ó?X‰,äœÄw`ĘäÄcłf¹f“óoā†¢ŅõŻOL³ŹĻ›«yĒńn$ą}?­?šPƀVž Ń5_ų{JGšÜna8Č üx>‡” ’?®m¼†Tx„+Žpr=1šēo>[„(ĢSckŖ;“‹E ĒN;ÓcIE&WH–ŪŽõКŲĪäń°q·rī9ŖĒÉiXv€G“ƙl$R,;:)\ģtb>Bp@4ĘBŪīnBZČŃ $ķģGÖ¶ “d9žIY±…9ā®×V6§#ļ’ų&ļķ'ģÓńś5 GS“š7Š;=NE˜į$_õrmŌ<ÄŌg†Ń@%»7=*[MFėČxrĪ"ƟBn+½“¬į9&ŗI5T‡~^GSź*[5+bāźhęĖž<æZׇĆóźq¤’+­²ž„W ’éóˆ#•-Õv€qT“½õsÄ$nW<Ļš5æZŪųlŪ5Ōk ކEn…—=Ŗ½Ž®÷ś÷– Š»<·$ņĪ+De*g›xv įæYī™V#Éõ»żnŃ^6ĄÉN1šdrō8č¬ķŅź?6įm©†©ėgø¼"x!xĪr¤p3éZBĄOm”6Én–šx’?JAĖŌōmƗJsm9Ż‚xę¹­^‡Qš(Üc÷G4—[—ōļ ]NŚA†6#œņ=k¤×<›=M'v‰ĮP„ć'š‹įŲJ‘Ki4ƒvqŪŽ»żnŚÖĒGg y1徕xÄp½ÜÆ,ŖŠÄ  f¬čŚ©ÓuČÖłY¢WĆ'LŠ€=STńü 4ō•ŽĢ)ĪŃT"Óå…”8W Ͼ“*fN”u3,lP½8¹Łī’’)ŪipJóŅ‘”†ęi pc•Ļ—ĒŽĶuś„×–ˆö“M„US·åJ2’·„؅-Ż 0iĒć^]£_®Ÿsw2Dcg8Ē=č&R¹{Wg˜Ęå ”c=+>oµ\¬e Ø ņŽō§…–KČĘE1Ģ ofćpöÆX±Õ¬“->x‚¬ņ„ćæ4Ņ4‚9;Čɤ?u—$rÄ×¶všŌĻ;Y*©l§z,jv0‰ķ]Ōł0pµdų‚9µČ¦· CØū§Ö3A‰|= ÜhqL’J]›pą–$ēłÖd»œ=ĮFäüü~4Ó±×čzBZŚĶē\y³oĀ)ķT|O®\Ziséū¼ˆ¤Ą“jżįšW ³É,dÅŪKå…Į÷«w")vń׀) ²¬zwŪXB$0;t&¬éšµ,·ķ4Į#_–Ż÷±ßńŖŠ)EžæąæŽ&‰ßG—Ģä@\š:T#Āw:–«uy§Će /¶<|Ą1Ļó§ČĶÓź&śĀÉ^ŠÄy|¬koĒ¢4kØĀų‘H“aĘź”ŗÜ<;qmqö­bĪ‚&l18ĪkhŻOhĖ«1WBJ®ć‘ĒoÖ¶Š58=CWkĶFiīŅ<±ēgö®bćL†KŌæĖ*ß²™e[Uøæ½Ól-„’ÖŚę>Ģ3Ųž„wvśƒ[i²G…eeŚN3š Ļ.¹»‚+ęķŗŽÕnßUYo ²·1HŒz÷‹ņčĒĮv‹ĖrU·ķ ŹOņ¬ Ż:ĻĀŠ“q1·įŗę‹«uc˜¹Öę)%»Ŗ8#µ[7×s1ŸŹŲćjāĶc±™}qž«»sÓ=+GĀŗn§ŖėŚMŗł£Oe`zoėųRqŌøĘēŃ·R]jVv7ķŚ3*œ=+ēÆy‘kzžŽ’‰. a•¹ŪķI; ƌśŗZ,pĘ[ČQ‚[½Q¾¼µøˆŖ¢äx5¤]ÄUÓ_X™’ŃćŻ ž=«ŚŽ’ļm.”ŖĶ”"ą27l޵C š ·öeŌņLąy¤½+Ōü]¤ŲjÖØ–z©‚DŪ"Ģ¬N:śR5<ŖĀśIõXō÷½ĢbO.@ąŸĘ»ŸiR4Aaw”>Q$cļ~”®gfyŸ„ķµj“źW±¢2¼EögvF?@k×¢ńŹxfÕ.<ȧŠa…FĻįRćfZ¦q«ćČuw•7¼X•«ĪÆÆ.ī¦Dyw¹>µŗšrŪBÅ»:ØD;rpw čģģ–leŗzÕŌ:{-ÖėŹøŗ»0ŖH– `ōśWQ­hv÷lóYˆįŽā‹UĘG˜6—-ÕŌbP>!ŪŌ~“.—žy¦J­ņŒżŚ©IģŽ‹ŗžŖĻ%Īȁūøį«¬×4Ķ4YÆśS[‚ `Š‹åZµõĪųģ†äU$ē9Æ*ŸIŗŗœ¬hęRpł<‚+X£Hù„i§j:[G}onĘTupź ż9ÆZ½“koŽźVķäI!ņŅLtb9­;³<ĒĆö>%½ø³‰™ä·lJ俎3żkŅõĻźÖÉ4xŅIFląuØåīĢĻ_-…³Be‹¤‘÷¾•‹¢ųK­Y¤2Ӏ, ¦I4{0öd7:Žƒā¶tŠŚąy„śž•ļ«ĒoįŪ«é¬e»øŁ˜Ź6V.™ƒ¦xU戏ˆ"“676Ģ®AVCĒ<֒Åyl‰#Y·ŁŻ‘ŌŠ—{2+¼ūė½Š {b7«cæ§ņ­&K„Šyö‡‘A)Ē_j~šÕ>ćnu *K%5&]>Yx™O<õĒæʲm¤Óå¹¹N5ŗdĮjI2Ī7ĶÖŪ’GM¬ĢpAļYŚ…ņ5²Ż¦v¶„zÖ© K”éŗ®¦OXē@‘/ŽÉé\¼ZÅģęāѶĀ܅ĻŸ+#Łe†Ÿ.Ÿb$šHćTbXƒµé֚tµ”Iq3m Ļ;«ī>C–Õō{ 0M"ˆ!v>ž•kŖŁ­¬Ēž1”ĒJĢR‰VēÄ7 ŪÄ»#S”ć>µj=.}]^źź]·w9$įėZfg8Öv7Ó[ÉpŠ ä/”©õM&ÖkTøS±Ć€«ėV}Žœęfi3ĮU[UM>eoó ūĢ9ČßNd¶[…™|šĄmõؤ‘ÄjɒķéŚ”Č Ä¶–V‡$ŽOJæ§źĒMó”»HĄĪžMO3%ÄŚƒÄŪĀnžEXńøÓ¦ńL:œ- ¢³ČütĻåV“Ż‘ČRŅģę r¶Ųk®¤±Ē5ÓėvséÖz]Ć93¹™„śUb߆õ»yåu¼11:Õ×/, œÉ¦Ā »FsĻå@'½‚{ĖÓs#9Ėg‘ĀÓāˆŻÄöW‘¹'kvj ęf5‡Ł“V¹Ž[u—r•ł‡Q\äW…|øÜr8ž/­ēe›]<Ō{‰YžQ“0ČS¼N–m‰tm>Xįϑӄsäišn¢dœŻµ¬É(ņĀ/śĆŸ»Zw“_G££ÅrÜŖ€Žp1_¹G@ÕigKØÉŸ¢įŗšõ‹M nāŽāIäfĘG?v‘!saä4’»HĄä~ŸuĢe”–Ū‚7r:PšxÓOńˆ5MCWq ¬ø@0w™Qڳ¼9įMoCK™õāˆ›ƒŖ«¶FyĪ ńŲŲń® ŗ¾—³*E`G*ØǶMqsšwN°Ŗ~sƒĻOĻ4=‡^kš“±G2:Å·ĒuÉÆTŃī£Ö4½9m-’+d\±™ īOåAŒ‘bm5,3pFĘĪ=«Ļüf‘Kb0Ļ™8ęągśŠD_C/AItdimņŸ)±Ó#³-µ9µ¦¼·žĪāŚŁĘ ć÷Ų_įėQhęa½$;×{Æx¦ŅßGgÕ¢ŽxeuF;2rOoCšóųÅō=I꓈2;6Ģ.01Ž}jŽæ®ĻŖŚ»ÜŚ:ĢI=ż y¼{fi™¼ß»Ā¼BēĆ··ŠoĢk %pĪ(2“ķ;I°Ōnō‹HWO‡h Ŗą9’"¶ĘWvł™Ųwœ€=«)Ęč:öæ{w6­c²·™Z܉>šśzשI j¬¶ŸŁ×ÕQՙĄ•Ļ TõėC °ŪGˆćhÓ+‚ĒŌ×ć="\M§źZ¼śmĻ”R9ć;Gµ4ģ›écHšĶ‘Ń.5v»Ö˜¼ęĢ“ąöÆ ų½ć8/­—OšŅ9bR®z?Šū֐6‚ŠłņĒRh.4’:ŹFVQ‚ ŪA5ōg›ąß K'oķķLń)Š5‘³>Ņ:Š²Ś=wĆÆ/¾ė:<q4ŅÉä<ÆĖĘɀŲķė_7hžÕō{٤ ś—˜¾iHxX›=³Ļz,s³ė?čjz=Ž”©kBČŲØĢ-Éøā±<]ā«sce¢ŪĆqhÜ9aµ¶Fʂos_]ńW†|g”XxrßEŽ9mĪóęXcų³õį>;šž§­Ķ µ…ȶ‰†1I²9{•¼5¢.$?u˜œ–ÅvŅiZ}ėĀ·xŒ’ałt¦AĖjś ZEęo-Äśr:üČXnķßōƄ5‹]Ńc¶µIÄønFK'÷h%ŹĒ‰x·Ä‹©ų×QµKO#F |­®2ÆčG§Jņ oĀĘā{é.o]āūČ cŌĶ©sšTęÖh–x™HE'×§éžµ»ø“°Ó‰“ŗp#a»6OLÖR!#Śmķ/m¼6¾xÕēi Kq· ˌžuć~.ų]ÆŲi7ŗĻ‡õWįC!”€2qųVv:ą|į„|P’žÓ\XoWqH\cŌ*×TūµĀ<1Ę@ł³“vŹ’Š÷’ŁŖīĻQŠėJŽ;4½2—“›<ųĄüū öżGY³mPŚ\FšeØĄi<:.rŹ:˜WqxĒ^Ų>©`š|Cļ]8\{Zł·āÖµÆišõ—„¼āTŗš‰·&v€†Gb~éśUE‚sžŅ­"¹¹…į‘ŃAątjŲŌü¦ß_F¶·"mA>Gƒųö­‰’<ņ/I{ØŻ®³}åJ€ĘÉ*>Ż* ~B”-šņ;ØQø(pҁ&z„ü'=±[m-<¦.UčX÷Æ@×<==Åø·†gY¼²Ž@čÕŠüy„ōčmēHn®”…żšĻé\æŽä_,׍#¤¬j’»EĄqY¢ly®‡r·×vņŻ -†s÷½«Ī§ŅØųŠ ˆ&xÆłŠåS1ļQ6 †gq-«<§Ķ…zŽ»żßr ƒ1;gҰrEDųbĻK“I»ŽR?“r ³7%}ś×ĻæüX|7¬C¤O䄼d±b2ģON•®Z•ėkÖqŻ„iā# éļ^ūm.‘k`fµ¶ŪĖŪ*Hrr;­H¹™įŚ–§®£wz‚¾~_AĶv¾Ō Õ`øH­$I•€Ē€ž,zS˜Śß…®µ¹/¢’īKÕ Ņ^œ óŻ)-įŗ!c†Ū`ą b¦S5ŲõźZÖØÖ–W2Ļ“)<Ž~“¾,m_HÖōǰšńÖ.%›dĪĒnÄē’zā®Œx2M\¼w°Å°†¶ätżkĒl¼¢h÷‚ݛ˸LćĖ8ĄĻ\Vœčq‘Ó8›Ė&܈•H Iå…Ceįų,ąœŽĪŅ\ĪÅĆ»| vTJW(āß„y~ƒ”Ogs“»¼ĖŒóļŌŌĻx“µŽ’N±*ŽŪY€Ī=ń^=w§½ėˆÜĶrNӎ)™(Ü„ØxvŪY–{›sp°Żå“ÓŸēµfh2^iWFŽÕeņ |Üõ­#>ćTĻ]°óļ4›Ęœ¹ ĮvĶsŗæ‡#Ō4›ƒn¾dŒJŒžAźĶ#Io„^Ł”ū[~żF Ę w>óõņ¦@'\œŽF;TŹ7śž­ƒd¹„Ū¹Ļ;Ā1ģ nI¢Cih$’@Š06·zŸfc)F É%Ģ1Ū+8ö&¹/]^ŁŚŪ¼'ß?'aŠ~u.Xµńv‹a§ZC-ĄžÓŸ*Ū×!qŠ~*•Ɖ¦¹™¤Ž8ĀDŲGźkf9FĆę’ēSž=ˆpP+qōż– ĢĮŪŅ®*ŚŹsg–ĶžįłŸ <×aga$šĒu2žč°ūÜóZĀVŠ»is«¾Ó"†Ź žHöŒ ó}bĘĘHæ{/’:V— õꓧY‘q6:ƒ€Ēé\5ģa/„FˆŪŪw“÷عŒÆr "Š\ÜNŖĘr}½zŌ–³C§A%„Ń#—9¬ęEHš”é1®„s܁ź0­ėÅŻŹ¬ęeEŽÉy$µ Ž+”ęŗž¼šµŚĒ`„“}śę°ć¹Ō øø[˜Ģ<īVõØ:#†Ž™ŖÅ£Ég5äŹļ,…“.?•zƋo!'Jü Ēå4€õ; MRāŚ{[É ŅFŚužµÉxdzż•.ģćk«ÕÜ6ÆŽaŪžœŠN§[¢Ų¤6œ“Ć4r˜Õ„Y%[ėYʦ†I ,‘–Ļʽ†k7O31ćń¢,7s\›y• Įć…sSų«HÕ՘¤³Y†$ī;wŸĘ§—KäĻń^„b5) AäŁ×5'„n’ ć$ŖŽIĒ#¶)Éh>f{\W±I “Dń¢²•%—\œ7:<ó¬m"ofĮ$ńĒ­8#TŹž%Ņmn`’kt·xˆŽŠ‡…rVĮāCĻŗ0»Z ;›–Mœ[E#*ŁäŸĘ»§š²-¼£ku¬Ź†CŒy@ō‹ŲīČ^é:r;¬jŪpU›‘ōÆų©ā{Éa·¶œŸ=˜yAFć8ķZ*ŒRZ·“‰Ö×Į7°óŻåI"¦H\`Ģ×哚]Åu$層@ä`qķ^“÷¹äщŪM²ŽØ•C¦jŗ‡/-5ū9ÉŌlÜNÆ×”ēt8ĶMŽōÖļ…ž%ƒÄž±Õc“¬(ūOv gõÆiÓõ%†VJŹĢāWī×5EdŃq] ßY'Šü}ah‚ĻPyn9č:ąžk䏈Ųz74ÆŪx~8u«v’i.ˆ¦ ėų׋^vŠė¤·<ą¾µØ|:ńʑÆrÖĶtŽ`ä2–ūĮzqšū?öØųé„|HŃÆ6C© ņŻbĄ·+‚#”&»)ÖZ3©#śL’‚F~Õß“ļģŻ7r?—ė_•’žŁėuĶø‚+č%BĮ cHõ¬c>„IŸŹgķ?ššóįGÄKŲ6Ća”]K$Š„#`8åyéĻa_-Ļ0$4LJzćļWTesš¤‡FŠŹ>`ŽH ¦X•‘˜rOU£‘¾‚“īąDຜqYū ¾ESĪ č R•‰eĘōr@Ė(ąšŒ®(¤ˆH9ł‰Ē^õØc¶Aµ‘Ū=*ģQ8ø¶¬c”=s[D苹„s™­n,¢,¬<ČŻ”r1éČÆėóž ūJ韓ĄČ|ā½F ˜ņ®E½Ś©*GŽpė_ęĖūQüńgģŻńæÄ’|M”ŽéÉöÉa‰|£ĢˆÄ1'¦;ż+‰ī>dpžńuƇ¼Kmy+ʱ±Ś ÉõōƱ~)üG·Õ|¤ųcO,5ÄģX™ČĄĒæĘ±œw>xÓm®4Æ Z]ŗ±ļåAĄĮēĘ¼ęłmf·’Vv™“Įģj©«37©{Įž(‹ĀśęŸ} 2«īö–Qżćé_©ŸŻß(źk%“9Xō‡ŗŌo//­ä°vøĖcµr‰¶ŌHvĶ"Ęē;ĮsėZ(™¹>¦Ė_Dāgn{ £’kسńęžģņA”ŚAŽQ•n1Ȧirm;QµIæŒŗ›©ķĮę±ĪÆ)6ŅƒwL}ź$”i³ÉmÜ”ĒŽĶU‚āYÜźō«ō29²Õm|ß2Ų›[ĶL“čkeŚų÷Y˜I§źBöĶ‰Šž>µÉy"K–:gµ$ŸRŹwŗn£Øź1ŁCŲ@Ü\zśV£ ßiŗ“V·i$32«ņqĮč*°=&;D³d·øuņŁG= ¬‰ē³±’F÷D[”ļ@÷×ūsoBė×5› ęRŖväqAļžž=Kø½ø)ņ.V=¼æÓŽ¢’„Ö=bCk%¬°€„Ę żhhÅx‹JI.„‘NKēQWcæŅ“k—X`ĢĢžI_°·CtS¹Ō-ÓM †[č§ ÕŠ£æ™^Åc.ē!Pō«¦ŗŪMąõƒD7„…dW(G5£įżŅõŅŁ­ĆņķĒ'޶‹°­c/≦Łč—¶$o€O#óäžÕ ”7VČnø¼qźh‘H÷Ļ|1Š|T¶Mr‘ø1…# a±ž5Ńų“Ć^Ó “Ó¬1†`[®1ÜT•Īq÷ŻŌVĘßĻ1Äqž9®ž9ž× Ć8cvsւOAÓõ¹“·L0`0zU?YĻt–×06ׇqn>šĒLŠ#ŒŅµĖŁäk(ņćŹ#­[»×/ugH/eŗüæQė@ę­7Ų$Że(x°vē­r–“\Ļuž$÷ ē?5L¶č/xcL‹N[™_6yYŗš§æóØē¹ źŗµö« ŻƒČ ,Äc3éX›E›Ž)µ¶±šu¦§–·ķ9o$'Y x—ˆ­uK”¦Ģč‘:Œ±sVŚ\¶×K%ĆC‡äž•č:—Ų. )ę²ī*¹ł=Ø&H©oo¹žHĻā«YŁĻ¢Ó4Ä(T⁄cN’ĀŚ“ åņäČÉŽ·ü-įˆt)ę¹¶e€;vvŖčkŽĖPńoöcŪÜG2Ź$Pc'g’>ƒ5wĘŗ¾u¦F³\£MTĪ8śVŒ²Ch`/2¼§”4‰–Ē%«ŁÅ:6x-o%`\÷ņ®Ę’Žk›crqłĘ[Š Œū–…vKöõ5ē,°¾¹xī”q$8ĀžV€±Åˆü“ 8ŻŪbĖMyÆą‡lĻōp23eµŸF›M‰abČqøŠ±cw™öJ”XG„1jų¢ŽÖņb$)zģžī×S±™cw‚lpĄõ«ŒŗĒyŖ\éöfĘŻć»1¹#Ö¼o[Ō&Öu+·š?-¶…^j"kań_\éVinļ*?;yĶlŚjS¼p,®į;‚r >cSŖÓōkk­ÓĪūłŠwo„qk«›ĶBk{H­SćaÓo©ŒŃ»{£Ēfß‰#’>m§š‰u’Ü-“€©2ɾĘGŗ~”©\Ü"#+ä‘éŠķ|£ ™nf²Žīą ”˜}Š{ŠCH÷ĶŻķķžźVYilJł‡Ęz½ĪÆŖKsę5Bb ž?„åfFŸ"yā9ģƒŪ©­›ė«ø„·O—ģĄcV±VњÅ[C¼±ŃģM­­ĆH&ŗaø ĄēļĀ»M2h“ēYaQēœ“tÅ?"®^ńˆ­Ńu‹–0˜ĪģZ¾j¾½v¹ø½Yˆß!bO=ė+v¤n”IƒƒÉ&“¬4‹›„šX™ xÜ3Ī3Ž•¬Uß Üé:>”c’(S*2[ļW¬ż†źI#")ć'rō85W.7<ĒUŌͽų³€2@ }»_ }®éž9&O²"Ż“śŅ4ŌŃæ»³·¼µ&ŹÖ #V`9“ß=ė¤K°–m-Žį‰Å #±Ėi:ü×wSEW°u$£½ļŠ«ć-n­mŽć˜}ŻĶĄ5ƒ4‚Ōę"šå”K¬REÜøļžqW °ū'™#©Ü@Os.źō“f[ »ŽMw¶Zl!FŁÉĶ>Sœ¦§ŖŻMā(Nš² Œmٟ•ŗsĀ½ŸL°Õ.mm®®=ņ!b«Ūæ¦Ū™ß”Ēź¶ŅM}$¢FTvūĘŖ ÜÅ1r°€ŒÅϰ¬˜7“øæ‚ö8EĻ—eԐZ½:īįīaFŠE™Ń0qß #–Šu+ōŌŹĀä܍Ž”O§ē[š%Ó§Ź K³Ą“Ę}xéļO›¢7±vēQµŌ#KcŽ,ōąg.£=¬6ÖįUć#vą{Ņš…Ž™¤‰ā·‰Qę;ٳ÷½ÉÆb¶¶ˆŁĘ®XqėJżšOĒqā/Ī6“|hīćĢ9=yē”ā½;Ɩ—6šB²«)Ą1ZĘ}ȜŗÅ[{„¶µÓcƒķķ"É.īvąõż*ę‰6”q¢ŪYĻu 1÷r=ŖĢīX°¼Óō«‰Œ©FĪą9®Ø_iz®œ÷zjĆyøč§Óš¬äé>µ©‹v*k“^Ęņ\ŁØU ō„r0_ĶåĖtŒĢĆ ŠD…ū$ «’ Ļ#¾jėŠŪÉ)`°ņśdŌÉŚ|ĖnZ$Č'Ü~ƒ‘qØHϵćې|Å#$zRŒ,ĄŲĀPßiļ“?žæ6}ćX±ZMįū…Žt'śZŠv¶āķšŁÜ0aŹ“Ķ{Z·ö§…™nŚ^8·6šĒ×ń¤e(Ÿ7\Ėsņy7o øl†C÷Å{F‰w„^Į ³q(Qæ×4>{X¢Š}ź7dŒcŒV¼é»ģę‘އʁ^%¶°½³Y-­¦E;É…pšöq†[˜'ø?)@rV™pÜ“ö)lé y¼µ6N=ĶxƋ “ūN}&2n£i:ņĮOµщ7„4ųtå"dŽņd=½æę Ńn4Ū‡K»×ø–Rvņ6ŖśO•™”§šģĖ·VÓ&·””!āœõé>¾Õd†fæÓšHŽB4¼lōÅHjZn±©\\|«?>Ō^ƒ5ę¾(¼Ō|-{ie|’Įć1’‡ęühWMŌ$šŁdf1ːHojv§ā3<‰ö³,¤øVn¤ž•“Ų_]e¹·0Å.pēŸŹ¼ĒW‰Žą[]’%WRCrGņć+ŽżŸm„jZŒ‚¢Õ ēr÷ż+Ā>+…,/ ’ ŪÅ PĶ€¤vÅPE¾»žX-Eņy”—xČĄ9ī+™µŠļµQcÓŅjŁ8 öÅrźt¾#Š?²ģ­ķ&·iA#y}žµē¶ÖÄŅĪž\hNąŠY[PÕKņē†ę)wœÉźGję|Yā4ÕīlōėxŚŅ,†Ś§pvėŌż(‰ŻųNŅĮ`¶–ņŪĶpAxÉŪģi|AØXµŌ¶P¢"`”S‚ĖõÅź,»±»’¹‹Ć>ÓĄņ¬+mĪņöŽ]F2m‘ƒ·•śP]Ļ/ųƒc¦ÜIuah. „d\nĶst7rZĄš­ļ—uĖĖĀē·+9ŠųĘī;Eõ jżŠ‚¤tuÆ£t­sEŃ씜츸 !†į!ķō®y7p8Ä÷Wž-ŌµĶBB–2Eµ-Ō€°õē8Ȭ[ļ ų³Å>6³ńV…|C‚I2ŁGaŪ©éłUFWSÅ_|_wįˆ|y-‚.±æŁ" “'ƠƓ<įūmo]‘¾)iw𔕼›6FĎ:ŻÅo„į#ĒŚƅõĮØų}$žĶiƒ%»Œ•_A^”Ÿ xŗ=?]Ō …5;PŪć³×ŪµSzHé/­ļī.’/ صR@Žü˜üėÓōÆ Ū½Ž„wsØ,/i3•ł²Ē¦}(Ė”Ė=Ef×6pއtS÷©®§Įž¼ńŽØCc-Œ),ŖänŻÜēŅØ—$š¼_៊Ś?Œ]O‘’7Å4r«»=3šė|Oń'^šę”„7Œō¬e\*ü§§,)8Üw4GÄ? ]½Éе›ļ\“•øģ tĻ Ī—:—‰µVXįy»7Įäc·ZžVŒÜ;ńÆÄUÖ'·šųY­ĖćŒÖjųĘēĆȳÜ9ÉN żßšŖ!Ó*>”§ŽyZŠ<[ēuĆGŌžł¬ļˆZ•å¾›§A„i·7·SÜy4`mEŚ™K¢3tõ:_xhĻ5œ“ϲl īåA÷®‡Å𧇼#ożµ©·ĪXwóżk1Ā,_ ~ҟ.,.lõS.ŸØÄc’ÜܶeĪ?ē5õ,v–ŗ÷„_·H͵Փ“ŪˆÜ:`})1VZŸ”ŗ÷†%Ņ|K©ŚČ±Ål÷.šķ2sƒVõźrZ>§ł [‰ĻŹEŹżNąžŸ}¢ų”kŽO) C6&xÆ ¾&źŗ®¹,—–a¹Ž"cžPI’'ó Gɚī—āæ-.Ætł¤¼˜l`Œvżjφ|+y`Ź’Å+Ücp NõJ#Vźjj’jŗ<77©µuSøśW3įķv{›‹«›«ŁĖ€·Ÿ•qĻM4ˆŽ‡ūoKŗÄ ØDff鞤z֔ś„qX™b`Ģ«Ī;Ō¶ĢłŌü.ų„ZėV°_ŽĒjēūć<ś×£xŸĒ>ŃuĻ*ćVµæœÖ­‘ČĪ9ļJĀågńO⮓ke¶Y®åSó¹Į9qŠb¼³Āšö©©³OyxāaY'ęõŖQ“.>§a¦Ly„ č7WAmww{ŹZ#æĖ†8ćŠŅH–‹ŗ‰WĮ_h›W ö’ØP\Ż7ƹw­éś²­Ūydī= bČk©Bݦ¬°“€q޽Q-mmä€fvŲqް’Ō…'±FĒāuꗭ 1h»DX3žU[°ĒÆzņŠZÅ”ÕćæŗÆ.焸'*€öž\VŠ'DaÜŃšÅķ’‡­×VäŽĶ‡¢°ö®‡YųŁ£ŪŁŗŁĒvĄĒµ°rK÷ŪłSTĶOÖž*k7¶³iH‘Ścuֻ߇ŗĻÄ÷ńM•Żšł6 óĶ;giŒżą=ź]1ž×⯈pZLtĖņīŻŽérI éŠÉҐ‹ˆå•|üŪXšąÖr¤D¤w:5M*{3m¢Śé²#·Ī?z¢ßoōŸŪizč·æ·ŗ" ¾XżČ=÷{ūTØŲ\½ēÅŗż‘Ó‘mbžāįåŲ ½x=•޳qØŽ^ŻĄńŪtqžzŠTccBk»Eøz]Fׯ€Ø{Õ=KNø–6Ė¾˜šŸóš:”Ģč`Ņō+yõ M£H¤ĖĘKz‘FŸe¦jģ5k@‰„Ø!¤'’{ńųdI2Ī„i ŠŚŲ¤‹6üłƒīķĒ瓉$`±É»;ņ9 Ø¢ķ„0E+[\H#€ĢTä€kœ›R‹O¹v‰\ǵ*@ū7†¼jum*x<‘+Eć#¹®śęūNŅ&{)Ź”ę8nⶌžĘ}ńv„«Æø³žŹxī5Łx2ĀJÅ*ŹHĮ'“Mɕ¶‡ŅŚn‰uzR5#Ī ½Ū޵%ļ…īŪ͆ź=ˆ>łķT»cƼW„9×NūJRp‚3“õÆ9Ōķc»‚?¶@7!”Ó/ĮmĒP”ˆT#¢šIéW¬|;4*€7ź€kN»KKØ%amm.åĄĒҠԯ͵«K2?ŌÆCHKMÓn5;yf–<Ī2zZéü?½ŌsŸ(1āNŸēšØs4ŗ: «X/-Zəē^ ĮZņĶR‚y"v"Ųcó^ŠÉ³›—T„’…J*žµtm.biBO#ūÕ”6Öåm:ę}>IŒ BєsŽHōż*ÕŖ_½Š¹óū?‰6źE2¬z~‰Æķó"HU"|¤ŽYōŗ]\®Æ¦Co`%QūĒ~»»ēڐևˆNO‡5R²:Ķ*I’c<0­ļx³NæŅ++fÄ|ĢHėMŖw<›Fе_T³{Į/ß"&9ü«Ōõū=WE[OµB$“d ][Y÷­c šs Ѿ)^ųod:TŽļsÉǧZśkĮ¾=h°ėŚ‘œü„q‚=½(pD¹ž#ń†™—ŪšĪÖi˜l.ĮCv é^OŖŽGöÕŗ,^0Ųlt#ڰžšĪq¤ڲAt’:ĝU”Œ×=­^XŲ K٤Tå}Mb•ȽĻŗ7w÷fźwv|ŒšģģVķŃ'W)tc„ob¬wjīökG¢GŽ÷¬ kyVźVŸŒ†‚“;$Y,tŲ^ąĒ YĻó®kUÖlT†£GĪA ÖŠ×[“½u‰Ś1»±®ŪIńL øÕāÓ×P¹XČPėž€ā­S43ō’ˆŚ¦§*’n@I3!1FWhĻMæ•Pń.«mv²Dˆ&•vyŠ7gėTé“)½;Šćń‡š ƒQI6“8ūŲõƇž(i–ŽdÓ. ŽŪSxĆÆīÉą÷=±]ń–ŗœ‘‰óĪ”i.Ą‘†pŁ8Ī=*•³,Ņ«Ŗ¦ńÓ>µ”„ϰæe’ŸÜ_x2ę®m-ü×9SŻĮö=«ī½6±ļ¹yć$ÆœTTŹŽēy£ź°§˜HląōÅy/ķįé®ō½'ĶVéi 6Ł&ąs»Ä~Uįć)v= LųnÓÄV6óHŠńœ3m\ņ9ķōĶ}õšWĒ6æ>j? u‰”—Y·‰¦‰ålLtü³Č÷¬čaŻ™Šå”æū |xŌæbOŚŪĆ!Ōn`Ó¼!Ŗ] ?SĪ*’Bļ±^E=pNą{Wö·® MV[/čĻk6ØĀ—v²@Į‘Õ€<ĒŌWÆ(ū©£)žėšOÄsÜŪMįżEāV€f"O.’Ŗ²æh‡ēÅ> Õ^Ź2ś•ŖłŠžųxÓņ¬\u¹ĶSsų‚’‚žĶŚOĆψ ā]&9“Ćŗīū„‘׋;‘ń“Ū‘Ē­~,ź’ŲŻ\FBķ;½«HhqÕ}ŽTF·o‡pcĄ50ÄDŪ¹ł@®˜³Ž{’[ʍ'™9!;ÜÓÖŁD"R źĒ8«rAØ-±GĻĢ;Õ„6¾[C³÷­ŌŅR:į±fŻĀ¾d9"“ ¤ŗ„$W·Śuō‰’ęłā#œØüTŽ˜³ūŪ’‚~ŚņžŌ_²Āü0ńĘ Ó|Mšoś ’ęOŽŽZŽCž¹UĮō*=kö/[·šO5Pšßwė\Õ£f3ȵ}p[Pņ7Ź «‚3•<łfæ>~.|2¾fhbŽ!²=Å®ÓČÉ9ß ×VdÉ‚šPļ€6¾5šv§¬Ų[Įæj‰<šē§cł×ó ©½„`K„‘¢'6ӌž•µ)w9ŖÄˆ”gd æš;T>@ €ēåéšģĒ-ȝ>Ī *•rr@ļļH’«E™Ÿbg“J C*©9Sš•B°<‰;v5qFœƒaŻæoĢŖ§Ę“į‘Ō¾J°Č<śV‘—CJpč9ŽŅ¬ŒeŚ¾Åżƒæi[’Ł_ö•šęöĻĄZ½ĢzˆćQ½E°²ąw G=©T;iŸßOĮoŠš³ØĮću{Ó5Q ®¢a?yp¦)€’h6sõƼlõ%ž6;ćĒü qĮēÕFńH’ At›ø ‘擾<÷#­6ßš]ŸŲęÓĒ“ǃ¼?pĘE1Ż,L³¾p:+׿ć5Å'Õ•Čć·O¹³ŽI-%Y$˜)·†³‚3]Ēü$_fŃYårÉģŚ½qķō­,g(ō5|-”ų‹Äś&”Ÿuqqoo™7›i*Ēw«Ÿ‚õ-×~§m5„±ā2ą€Me=5"1čĪQ"³ŸNÕōÉķęi¼‚¢Em'”'šÆÓŸ‚W:ŽÓtūYOj71ł› Ļ× «K2„OKžīŅ“ŹÉ‘Ę„M„¹¾‚ÓPŽxm:™TųWu'Šóź«Rz°śU+]9ōĶ"ŅYäY®Łw7 >•Ųyõea]Éx‚9ĮVėÓØ %2Ķ*1“œAŠ|¶2ŒĪ_U¹k;„ņäŚĶĒÖŗßZĖx@a·øcÓ¬MR4u6āщŹ3 nZČŃ$žHēžäIŁÓļ)š­JŠī­SĻ‚źd¹ O8÷„žŅmR`Įdkeåqя½kwj’j‘$wļ<(ąs[š-ŖióĆ}0ß7>”«©YjŚöÉLš¹ßvŒö«Śó[Ėź$ūD ™Ü0hŗÕą·FG$Āsó÷kčo i‘ßųCū>ĮŅÖöH•ß’ĒIŹĄxŽÆż­”_'Ūm–4\(@…±ųUØGŃ3ü-ᮓw©Ü:÷÷wƒ"÷”®ēĆQÅ<Č®€ą#Õdņ"׉fŸĀzV—¬^Ś?Ųf˜E wĒāE?\ŃWőĆr—…”Xņ"„SŒąŽõ‹4™ē—ZWŠ.žĻKņļ/“žYbŲĮĪ*\Ż“‰g-›[\ äńɍt:ų†ŽÓR1_©UĮA¶y«Ś’‡d–›†fW-ŗ&#Ž{R08e²¹ˆ»¤kŠ©ūÕĒ_ź+÷0\+˜’å›AŗÜn™:[3’c<‘ķ^šč³Ō‘ެi°L ³€—žx­ N‚ ZėkBdo/qąūVEĶģ‘^,Ž{*ó‘Ž“¤ŹŠīz†Ę—ØŪOu5˄Ґc Šē<[¢Ė}homI4NĘdžy?•bٱĻ_F¶¶©|īĒŻķķZžŌīt­BŚy6 ćµk …)XöÖdÖ µfŻŽFz 䔳Ī}k׹‚Ę"$F‰—ĒAI³Bž…®Yh÷Mkfb‹$/Öf·ā™.u8mg/µĪÕR;ūÖ\Ģ ×>žk›Ć4 ø/ó0ł@®ÕaŌek+;ˆīŁķŖrjąĄ½å=‡ßb¤ž•«·ŲēŽUóK|½jĄį%±1yĀÜy>aÉĄØOŚ-ՋaÉR0³”»ĀŽI9œŒ·—žr;WK„GöØ”Š%Hää)j‚£ÖücŖč—w×zķäwZC"łą|`óļÅ;Ä^±ń\é2]ŽX3|¬"o¼9śŠiz¬¾·ŠtM+K–Hę±µZ-Ēīš:ūׇź²Ēy<‚ŁTaˆü3H£™×“h¬Ń$–s»«(č*- ß`”oZ “ģvå"€Ę¶Īyµyģž*³³Ō%µ»WŒ§&‚bŁ×Śų†)7BP²<³č+„øÖOˆÅY$ćœęƒC•Õ Óu$³»»—mČc“AZŲѵĶ.SyØ ;ėhX^…'h>¦£Č“ _S±'Ł\¶ŠHķœW²A®&‘Ŗh¶—ÜźŻcyŒń =eüBšķķ®·5»Ģd±c¾& +é\«ĄęŌ¤³ŒžM2ĘŃ4°“ČŚ\ŁōäÕėpźZmš[łrÅ»{g;ŽzūP#›ŠÆ%³ŗO 8°Hķ^ 6Ų{§dž [½tzŒŹ=‹0h÷éĮŲßk6ŽšÄšÅŪĆöw˜DyĄĪ=9Ø#ēOˆ·6ļ‰ō›­7L’–å%m䉏˜|tö®ŖĪāŚOĒ£MmL¹,ź0X‘ŠŠU†č:f2^„ŌĘāˆ•Ąå›°Ŗ$ { –Lõ'š·bdÖÄZī‰6Ÿę]iköÉ„’rqŪŅ·.µXēµ·KÕMÅ3OŠ“rĻØÅ.¢ŖŖ|µĄCéŠč Ō->ŌŠ#Ē#c‚zÖ`u–—1£#ȈҨł\ŽV»Ļ P:¼Ž ø D& üÜużhĶīō}ūwQmĆ„³ĻęnŽ’„eųĆÖśž„cyÓĄŠ©Ue|ĒĀň!ŗ³‚+mBmģ¬J±ī;U{ļ?{&šń0ÉĮĪ~“€séŗ Ż‰x®K\šÆß»ų×Y£h–°XÄö–å±sü«XŲŅ-!?dŃ'½¹zØŪŒ×9»øæ{«a¾.2 sųÕŲŅʍ¦Ÿy,É4±ķ@xÉķ^“e%“ $®öxŌž;TµŲ\§–_źŅ³Ģź2YŽ=Ås·2Ū2*žyȬ‡bŅ“·&fu+“‚>•ŅiŗSÉ*O”lI•Lu§p7tķhŽkZ²XĆf°ķu!²=€ö«æšZż®÷P‚#žē&E>øéZIhŸź)u6a2ŹÄ`qœUM"ŅEž`ĢD„ŽĘ³åŅä{3ÓōoĘoK¢®@bÜb¢P6ZÕ½„ÄKm»cmž!R5äל;Ćm#lĒ@ŻkÄļ ūEŻÄŒZCϾh(“Ł­ī`@ęd„u)¤ß^A4†xGqڵŒ‡b;IļtÖUµdˆČcŚ»ųµxķl„— mį‰ķVR‰[^µŌ|O&‰eeo֎y ¼zƒļ’ÖŖ Ó“Ļ0½¾Ūb Ū!ĪŚMŲӕŻö­į±d,thŒ×LŲóą@+„šuÜSąe¾P„uõ.er›t˽)4ĮäN›˜)ū§ÓōÆ5°Yąu.?xGCĶ b9‹ūÉõF0L¹=:×”Ų}¢Ī(ą_¹€2;Õ\L×¾Ņ_SŽŻ8yՃG„vŠ«m§G ŌhņŖćėY9iba.†]Ž‹d¼Ļ“¼|Ąv®[ÄņiŠ¢Cp±O™Õūā”»'cDŌķõkD6O…F0:„]OAv†\4KĖqśÕE\Ā ž(¾7ÖɘķĪęgpŖ¾„ēŽÕŃ[ųvQķEŁv"ŸÖ¶å%ĘēŸOšöž×œ\ €ŚrØŪ“Ųd“ł ³¬ųūG±m­ļ.Œ¦qī×#Ęj\:“ČYƒPŽūOc>t©ó.~ńŖ³ß£X$²¤Ū°qĮ5S9»ŸĶ"¼ß$|änļWü8D6ó³F'e܇9Ē„"ģQ³Ó%]^;ˆ×÷Čó^–’+[Ię8äŚF榀>bŌdŗ‡R»1±•ƒœ8ś×A§Å{©¼r\(Ę02z榀;1ešé3¶HŲqŲ×±¶ ś~š×SŅ":°qE€ųĖWńøŚżŽ«ŗÜ»ł„±ąóŠžµō¾ā¶ų6ŪU’–ķĮŚĄ|„ā“‚BqŚK<¤noZļü7®źZd-mö†Ž"Aē‚(°5Üõ;ÆM¤čšˆQį³¶aŲĒ#Ņø}ā-Õ“·3J^vŸā5\¤r"+ķ_ZŌ晤t‰Nv‘qé\R­äX•™[’}>“rér’±ŌXx–ČAµźœ6­O{y}r'[4ż×#½O(ģs¶ZuķĪnäµ0\Œ‚ ĻNõčß |gue­ÜxgVÓ„ø²ŗ`LČsļG³#ŁŲōMKDK¼Ņr«ķ^GāĶZĆKŗxm”É(±Ž3éG)Œ£Ń‘·‹ō3“HóŅ$ƒÅ1µ}&Ū)ym<¤BÄą’źÆ)Ō4£×pHó³¶ŠĢ8F’ ŻVī9,$ÓsĒŽqŌsF‡«ŚÅ§V(Ž"DˆUä}śŌ Ē©ųwĶ:Ø+%¬īRL üQŚŗyüa„é°;#Ej$}«“ņ=³@”NwPŌõ( ŠŹ×;—r“ēƒĶqWš~±wfšåƒw%“Ž3ŲŠQ‘/‡ol”€Kt'¼Ąs“ōŖ·REFePf\‘‘Ai#üQ¬µ­µ½ø[Y‰ÉĒ$ü×K“Ż<÷K2Ģ£ 7×ւM“ŒJŒØ mėĒZbŁĒl[ĢR‡OjŽOÄŚmŽ”‚ŦœĘ’½UĘv5ņæÅ¦ŗ¶²Ž=?P{Y×1Š:†±“*+Q¾—RÕ|1¤A%곏ČH\HÄu'ė^5Åõ½½Å“fWe%Tē¾;Ön7*Q0“mZŌ,uŗ›Įpœīh³·œ`tĶ}mš§Pŗ‡ĆV^Ó4äøÄĶ+Ģ£ #ĻéœÓH‹·Ž¼cŖhŗ šv—fŅ]Č<™Œ‡żIż½+ĖōūØnt)»ż·Q"m€erpNqœS.+MŽük„Zßė-2yöŹX†o­qŖ¶ƒŻi›$ŗP£nq‘ž­R„mVš’Ś®¾ÉxÓĶ ®§V׈õ_,źwVqVć$Ä£ŠÖĘ>t“XžĻŽVø·–āIfä–ū Ÿ~ÕōĆi£šĒ‡n"¶’ŪmŌ¦M­'̃½¹¦`Óč\“ńõ•–®ĢęŽ{waŒŒ²ļŪė^[ūAųÓN½Ótļ Ecö”>]ī]³å <~<Ši³Ąü'įgQÖ-/4ėI.£ˆ€Oš®zēšÆ°4©-tXSGÕ rŃ4a”įKcØ¢ęɝ‡‚“čķ¦{TYäFvŒČÉé^Mń ŹIģįӒŽx& LެO=….ml6ŒæŻ[éSAi«Es5ØS¹‡D>Õ×M-ć1ŗÓ/&žĻ.Į·Pi™N=OIšEÖ“tł¤¹·‚Ž8¦ę#yėƒėŠĶų©į˜¼_£[[£ż‘ā˜Ė§%Kć¦;ŠhųėÅžŸE·‰fžŚå`ć®kµųSń—Ę>µ:7öœ·ž$*ą–z€}+9ÄčŒŃŁxĘIüP­­Ųˆķƒ8“ņJćį$՞ÖćE‡sįBIƒĆZĖ”R‘ź?äÖV=J-c…26ŗōĄź=kbox“P֮ܔhyq†Pß0=śŌĢ›±ÕIāÆķ-:ŽĆW¶·˜Ćó+*;ūąžēŚ/Ä}^ćIø¶ņDR“ Æ”5I˜ŹEdi:„óX£¬Ļ6J`ä°x­]3į.ƒ.rŒ$äo•Võ9­‘—CžŌ> ŻŲź0źš]¬–k‚ū„ł”Ž­gkžŗµÓ5)ŠM ¢©·'44tÅÜłćEҼQ«Ļ’«īīÖnID¾¤ū ö8> ė%5 GZŽīloXU~ė{ŅåE·`ū-¹ŗ’k©bo-É9ütś_‡­ķī£ŽŃUćœŠ.YŽ€,5æÓķ„|ļ„Š#ŗ²Óķ!K[Hą8'å“)wg™x‚ś]FÖm&pū&$žčHöŪhŠXoyJ䌷±¬„+œ²:Ļ Śä«āHbį‰Į>Õč¶Zå•ÜóŁÜ¬‡å8ąVRZ„61|_¤i›VīÕ¢ƒĢ9`ƒ’}OÖø fĀO°1šÓķ°‚§å]Ł"“^e—ut¼æŃ!Sn%ŒG…\möÆÕm­tŲ. kņq°ÆšLU¹idW;8Ė46zʘ³Į!W™w‚3…=’•}—}Æ^éśµ†‡åģQČ#—ņØlØČņŲmõķ[ķwP–9łÉča^å”i©-¹ŗøø¶ŠUF…¾ž; —#7äuķm=å²#ŪØ“ÕG­y®„ą!×-uĶn7·ŗBbqŽÕĻ)2±Ž^jŚmšÜ4-nŹī€;IļXķ}Ŗi7rų|Oā2 ‘Č”y•ķ™$‹Å:>« 'ŽU2 {š÷mØ_ŚAwr³å”9Į 1­$¬åģ{~¢ü™mĖĶz&…„év2C{2YY(/€™É©+‡‰īlb‚KK¶ģŪÄ céÖ¼eµi-u`‰w£gŅ“(Åń&«skq–īģĢ<§īZétM2ĻPU¶žä<² łŲ}ÜžēŚ„A)'¹«k¤čŽøžhfy/ĘWnģ€=Eyī¦ś–§ØM$—L€üøgĄė]DŁ\Ō·ščƒĖLė2ÅJäc×5³źVŚ”SéĖ$’–Śr ųv¦ÉqG×ńx¶†Žęę`»‰gy÷Ķs>1ųŁŖb=*kK+m?iĮČV‘śēæįX‘ėfs6:ŗx®9@‹$Æ Š×)āÅŃōSū%/£žg@Å1ŠśʃKVšdMę,mÉĮ šEz.…l¶÷/"²ø*U€ŹŒv¬Ü¬DŃiV(Š}•¶nbē'½eŻÉeM5ė/ŸŸ• }óč5#"x‚„œŠ‡bžv\Uåē‘8ó;ppAõ„(õ—‡P֎£4"兲u*yśV>­gŖźŒ7Ķw‹e; ’SYŲ MZėO²ŸÉŽå'Q€ĒéMˆCؔ‚Ō•Č 럄i6g±‚ćŽR$aĒŹpI÷Ø“ų¤’h¬•IŲSŁjĄō]'Ā×V±¤0³NI/Į=ĻJē5›ĶSK†īÖi%Xß sŒb“PźLŸCĖnõ[»ł%Xs€7éRÅnXVyćå'ÆŅ„­lQļž»Ņģģtųf²ómĮ³Čj„ń^ƒP‘tōÓŪhĪX>¦®™¤aÜņx4‹yŅäŚP¶ēQĄaéšōÆx»V.jŃCj®$!—åE >ø­,)FĒ{ć=ÓÄÖÖ"ķ^X×%B’ozɽ±Ai,źcƒ>¹¬Ŗ.¦-Ī·©MgbcˆfV#nG9Æ+»Ņ§>dŪēi[ļŌVdZĘ÷‡t˜„VhÖNH'Ł\ŁĆ/”·U ĄĘģŸj»ōKB³žęéķåI ąa¶pO„zBųr8H AČ$ąph—‘pEĖĖ->źĀxo ‹iĪ3ƒŽ˜Æ Ōō€—Mn±ÄTœ.ŃĮü(‰Ŗ§xrźK ÆWĒvÆqŠ4ķ*7¶ŗ{(n%Œfdcņ°8­##sY³µ[¦šŽŁS'³ķ^e®-”WX˜ydšŖpŌł®L‘ść®|@ń—Ļ«Éq5’‹ŒŹŁaĶv_üa¢xæĆā ]Nś+5Q$0³yO©ė]¾ĢÄų7ÄśjÉ{o4 šĀNāŽ k›¹.į„|¬ŒńČÅRVŠ +V¼Ņõ8u+ n ;÷Œ;Æć_Ŗß|O¤x‹Ćŗn”§Ń“`2«d)y¢Wč4z„ó*Ō> бā'{ß ^i®¤h`óFv1ļŸĀø+Ņŗ5[•:„šéš„ݲyb@Ķ×ĪÖĻ#ōÆTųkāš6µ§xĄ³Ģ¢DŠąoĮņIĮOo­L‘Ņ„sģOŚGĮZ?ōāO†'…"0ü̃vӌņ= ūž‘ąŒßµż¤?fKo…ŚżńŸĒ^į;ß/<#;?AĄVėX-Ō’źSéŽ&³»ˆģŚū['WŁ*jŗxdćxłģFĶfaQŲü'’‚‘žŹæ¼ ā/ Ćgifkż>āDɊd*>øĘ+ų˜ų‘įWҵ}B;”:^[ŻIm11l@źqĄ«ƒčqN]øvµsgĪq÷¹ęœæčĶ,„V\ōSź+[Ņ‘“Š]Ż›;CŲՙ5-¹Ä@śÕr•U˜Ī2Ų3'S":‡y€ ŠQ} ­¦V” Wv0j[]M ŅF0‡’HĮQZ›@ż’‚nžŲWæ±WķUąĶØkp|>»saÆĀ±—WG`LĖœ×ś8ézµ‡¼; ųŪA0ĻįżVŅ;ė)bl¤ˆźGēŸĘ±Ŗ“53ÆćD aƬ |±ń ĮgV·’»Įslļq7Œr?*įšźDŁł„ūCü3Ń5½&k[khćšęÖHŁIźüŽOl’ZžB?jo‚ßšŖž%\„’“Eć1‚Żcڱ2ēwÖµ¦‘“GŹ÷°ģełķÅR+åå[-Ēē]$×R6¶žrdgb “(ūÕZKdlh=+bTIā1ÉĻ\⤒Hć,§šŻHćĶFE ŲAM¬óRČK•Ū×ėŒŠi‘fO˜óÆ!½ZQéń]ĘŃoxn0ąG?ZŠgõa’kż®ģ|sšĀo„>3×cÕ±ü?®J‘4=SR±’m%Æ-ā!¾’+†ńĆŸ |tųGćO…>/‚3£ėv­׹ĆpGŹG¾B÷ķŽõĒ(ō-ɟēūxžĪ:‡ģĮńėÅśģ2é°6¢ÖėfÖžR”Žrć± 0As_2iMøXnGś9l1$„*”©§%fAé~Õ`šö·uq§ '€ķĪńņ±85ŪÜėśæŽfXķä2æ굹“ŠC9ó?Ākŗ/CϜIuK²[؍ć2÷µr2Ē7ĢŹdĪy#Ā­ØXęŽw;,ĄSœ5zF†²4pŖmH{õ­`kŹlkz¦šÖ6ö¦2· ąæb3éė\”³Ä·°£MŖ1yĻ®*…-²(lõ!ä0ŹWÆ­všE‘¤³,ɂ äŅ“esĖķeµø¹–BVLČOOS[w‚Ękfµ1ĀŖ ƒŸzϘ³Ī^ŅHµ2ˆP¢/Ž#œśRŽjĘT’ŃŲü§ƒŽµ|ąPµ·ūH~U¶óӁõÆpš½š‡Jūh¼l©~sģ=8¬äõE‹˜„ń:ĻgyooshČ ńė^>•a(µ²ČUUŽrsŲŌŽż2īł"ŗŽd÷«×Z»Ś[Ć&ņ%'iĘqųÖ±‡rNÕuo]hÅiqpmĖ.9‘}3T|uu®Ż>•qdJn%‹œō„†} įßG¤=ĆĻi(dĻ¼1ŽøŸŒźóģM£ĻnŠ#“ ŖŽ8Ēz†’эŸ:'ŚōżM§co™Jī%p;ę¾ Šēšę®ŠXĶwdY‘ZB§…8£AXæńDŅōMNŌĢOĮņŖR+@]:ŽŻ®žę'Ō,@=łŖ%£•Öm„6× nU™Ļ×cʋ >eL±fēųŖłĢ¹NkSæøŌ/%?/<zа’÷ĻhćŸĖ\ó†ķPŹQ-Żļ.#rB–ēŽ» l"µ“÷… ~µ*644ō…ŅŪO$‘39ć=A®Ķc:M¹¹·³óaLPq‘Ręi³±š‹ōQąµhÓQyƒø‚2IōėśW–üIń~ ńf§¬Z•2¶Nx8ĻOĢŌ·rŌL›^źūNL ¹ėƒ\ī½u.ŽČ÷QĢU˜ "–ĄõĄ§™Ė±ķšüW:$°¢#]Žüö¬5š™·ž`ÖūbPāµ±)ę” …ģ’i¼‹āĻ-yÕč Q§āY"žą©°ö„ĢģyˆtŪqf2»FįŒóŚ­éė$Ö³ČNÅĒü ·ņŖ‹F2‰åv’Ū^„ĆF¾k9$ÖÜVö·ŅC)„ÄĮvē¹­“2QŌō M"²a;,‘`‚½śV`Ó|=aįm–8!¼GVäłŠóŸéIĶSŅŚĖĮw7kmh÷låI_¼¾•‡įķa¼ćĄĶ)Į Š €õ}>ł¦xZP惏Zģ%tƒŹņ§ž‘ėYĖq\Ļ—AŅ5ŽäF¢ó»ĻZę•ÕYé¶W-s#FČĄÉĶ\U„ćqu]gNšx°øŌC¬o2ĀøżćßҰ|y¤źŗąøž+ČåŃŁGīą}}x¢āŒleü=šeÅÕū]Ż·²²ŒH„Gzm#ńķ2ŁĶ5«“JcĪqŠ‰²>ŸE’Öłg¶EK÷ĘXŸ¼jĆZ]yę[ąĘé[?_­BWЧU²—SŃ. ³ø1É,%3ņ’1\¦‰š’ļÚ ¶§axŅÜš³gļJŅ0*kV—Ņ" įSųøäÖ,qĪr¹…z“ėJhGO§Śi׌…ō÷ÄQ|“9Ī Ļo¼õ–wf‰ä°Ļ#Œūćµf?r±£K ńȲ²c$VžjÉ4L°įA¤#ŌöIµ+O°ĘžP;TpO9¬ æ­µŗ_[™—aäc­‡¢ĖćM3PųwŖk²kv‹uåˆßļJćŪóĪ™­įŻäspz ŒhŃ]ŚO®÷ĄŒ2•ĪEö‹9dµX’sœä cėA6/¶”*‡Ž#äõK!'™<±³6AŻ@šU«­š0gĄčOQV"–ļ|‹rB/%[wQ@ĪÆĆZ2ėW‹e5°’ ¾arFÆ@ń†‰e§h¤#,&Š€Ļ ¢J€ĻnÕÖx~ņ(āžiV)&Qµwqź(ŻĢŽņ„ķȖX€Ę ĪQ-ƕ¶dń@eŠŚåDr4~j&9=k•m žÕ"Īvyė@±ŅŅŅé2k”ŌāK‹Iu2F@#=ErZ}ݽ®¢‘HY0ķҽÄ”>K ø‰Nüc‚?Č ŚCĻmnķ¦]B€ĀpW"¬É Y ‘³'§jŁb`÷02Ś!IYqĮ䚻o„]i‚éX'nFH¦bM­k†‰[ŽČčj½ŅŲŽ mĮ²6Œ pFv™į›¦”\2¦ÅsŸē]­·…ŅŅņ¤Īh5+EerŅ\³1†čݽ…nxbĪ=BĆR³Óå`§ĢRŲ衜ĢR¬yĶ…ĆÅ­Ķg4†-öģQ÷?ŽÆG济HŠO³;p~ķ1æŠlļŅ7iCĻõV‘91ˆīC“˜Ļ^‚cŌ“{¤H–4w|±©÷ÆQŅõļµZĮ——ڵ2”I§žgµ½Šā8š&yźkN±±‰'ˆĘØKxķTäĶ…×…“P$6ghQЦø+]Wģ©qmuęo#g©÷¹žĄsė(Ō'’%£e9ō؞]ķŲA֕Ę>/öŻ-ßå'oŃr°L„s ŽO5ōę‹„iQY-ĀB^p@{VRˆÓ8’‹š~lōŪö˜ÄŹĖµ?¼3ŠńėĖp–ŠÜC Y9ŻP#‘k™ä¹Q#oNĒø®ŸJÕma¾¶·»˜§˜v)n™ķM+ŠJē ßIØčĶcy6·Q±Éŗ/ÆCÆiz¶¢–/ymĊv ÷Ü ł~&¾šņN×L·jä… æt{Wā}=5-I-€†BIū ŌšœÆƒ5X“{{ż:)w1Īā8ė]Œ¾"øŽ¶ żˆ§ˌz³P¾×.¤²µ°¾{;błøŚNX{VÕωoō«ŪX ‘dĮ¹<ķ[’zn£t·ŗAxg’LxńŸZš{ !½»[‚Ć½ŸƒļĶg)č„ö¶bE·•8÷Ŗ–“IĢ)‚ČŁb;€:Yµ !±ø³šDVqĆ摊åƽ5”iń4~KÄądŸ­O¢ų‰²Āai[ųNzWG©:jņM sŪ`™Ļ_óĶ <īę k»éīF-ŁÉ ƒęÆÉØĮŚéŠY\L²Hz.Lyī}©6o§h“X˜Ģe‚Äē5ė—ÖV—^†FL¹Ć±<Óņ’ü)ä_éņi؆ŚE!öķ>’•uŚE¶§—o¦»+ŪF>TĒŹ? ®n¢3“ĶQ—Äb$¶G·pwKœśŠÓ›L ź—ž^ū”ę2§ØĒj@`ė×wڼqÉt‹“ŽzTpIöTY¹Eی3H ZDQµżŪØ=GZ×Ņ–MMͬD4„Š d¬oi:SŚNRó*’x^CŖŪi·rMo}øSøgŒUFV.šÜGk“ĒlējńҹkĶ>u’Y$u9±e’śKC » ‘»µKibŃOėõö”£KSŗ¾…mŚH…É\Ÿnß­UóšK ·FČŻ·ż+n‚2#‰Õ¶|’N•Ųé°EuN¼XUFåŃ5Īm‘^[¹v9‚øõĶ`J¶–ƒź°^$®ė•aČSZ\R:ķ_]Öµ : „Åa‚õ*ų š-SS‡WœŖ¦fŻ‚G±ÅO1,¬ŚT¶“ %ŽEb8ćµ>ŹŪU¹ó¤¶‰žŻ+°?w=8ü+93Ņn-ÆąŃBĢbYsóqė^{r“JˆŠ<¹·`ŸZŹhFʙn±0Äc äńŌ×FēOµŁ{|Ė ß„TF, Hļ¼×e*Ż[5Ćų–ÓT½\­¹Hł‰SójŽĆ±Ė˜ī£Œ0“˜KœmĒė^©šĪͤń5œÄEnčU” š9Xr²§Ę ‹0ŖZŖ\gĖł*yw‡ńÖ§¤[¾«yqk ņNšŃ† Įģk#'˜7÷Å”Ōį‚xģer7”*3ž•ķæ|+ Jść\¾‘įh2ķæJ€yżĻJD8µ±¤ZŪk—ņŁŽyś~O”ĒŽ<Ö.Ŗ-n!E$gåłŽG&‚Yāž,½›ĆZ=Ä°ŪŚ4rȱ†wĮlņ{P¼»µk8ć‘b`*Nw‡4DÖõé4čģ¼ŃņĒón^sėVm„’+# \Jńś3ZĶžXÆ"‘¼±»īœ.8V×Ā÷śōāŚÕ%XbŚŁCŒóӊæyq‡?““ĖĘ?mXńŒ’G_Ö¹»(õ؁-#£¶į»¦ˆ¹Õ-ŚĻĢ•eŚq n {Wq”2ų|¹²’x_’ącn(Ļ\_ŚÅb—Ņ †„<ĘøDÕōĻy‘é¶ī· Ūä*IQƒÓō tŁ“¦ŌÖ+›„Sv8ŻžEz®¶Ž†=ŚĖSIedĀØbæ7¦;õ  sĄĢR(@Gū§'÷¬¹QÖB³¶UxĪh"3ī_ÓWD²ūbu2ęR?‹ńõā¼Ē°Õ䝢‚O–Bč;ā±z3XŹĒŒŽG‡®-씐Į?!Q9®›E¼šéd“‹N„“ógµH܎—ν”Ü>•wo2łxŽ{f½›FńŅxKĆŗd6.m¼F#>l‘Œ śSH›œ‹~1“ś(Óu%ņ5;Ą_y˜œ~5ęVŚŽ½sd¶‘Ģ–÷*[÷Č\ćņ§ŹZ‘ĢYXÉuę@¼2G°ļ^R-īµ›“–(ĆŪ3qø`ćéZ-Ó>ŃmžĀŅA«D—ńGƒƒ }’"¹ܲÉq{qIÜØøŽ”]Ł7>QÕ¼ZžåÖA,.OCĒå^Éą}V}nīš`¹Ł—ķłU‘#Š4-ĆHÕP»Óį™ ;×Åx’“¤Ö|AmtČ"…˜€#_ŗ™éśPW6§“ųOĚ7…ōKŸhŚBĻ'ö„o™Ļ£’žõRéf×n”žź%·ņ˜°`8<õč°Ó4ōõ²²…ķķ‘D›Ė–'ļgÖ¼ÓĒZ„‹”gc¤w²0Ė0ł@­23üįóÆŪ™n­¬ašUQŒØ8ČĻn•ŲŽiv‚±C°E7Ā“ėK›”•ĢŻoÄW†­¦É-ŌˆIb'a–kĖĘ×#[k&ŪķVŅ–v’WźqŠaÜįž*ųsdø‚ŚGlķž3ėYŠō”“XÆ ‰%(r¼~”¤tÆ§ģ¶ŠŽ1Ą£oŠåZī ol–žYVp¹ć9ėųVSÜÅČķ|1āl’;fņŌ¹<“ŒWK¦$Öėqwk€X±FČ'<žµœf£ysc”’ ³ÄuÆ(ź-؉<ü ¾ą2Xfƒ=Oi𦳄Ūj1\¼O"Ęb,@, śf½¦ĖVF¹…"N¬@'ŪQ•…bOkBźĘćEšö„¦Eć(å̐Ģų ēóÆ8šö£}q{<:ŠCw6ą’Nžr~•J}ĶąŚ;ĶKÄvķ`öV:|t l&% 8źxõ®zĘž9“ŪÓęC˜Ō‚AĆ1#Rēeó3Ķ­ķå“·–ļšįŽBģ„ē’õŌÖvs];¤͵zø ›²¹™­[^čöĀ ŁžĶ½w4uā¼śj7WPéöķū£ DĘśR&Hō­+ĆvśĒˆā[«ČT$ ļėŅø/}Ž>ĘŚo?xVČĄB)™³Šō[čŗGŲgh$żįp[ƒŒzK»+Åkčī¶«0÷=zÖsZĶmū›Õ§K±w2AFxcī+VmVŪ˲ŪZ0'ĢĻ$ēŽ1P¤ŃiÜźō­dZhGI¼Ņ÷¼²†.:cüõÆ/ńF™§Ė,Š Ša’§©5¤dhįŲź|+šæĆ—vöśüņ4ŗĀĒŅD (6Zģuˆ­Łc’ĆŖģ@ńėUrldIj‚Ż®Mø…`žW©G«źš³ŁźOo Ąčc„`AÉĮ¬%!BhŽ/“óbKbV ¢5ŽA9õ?•EńŹćİŁ"Ir‡|jQF28ż9Ķs¶O1HxV=KOó䑀9 ĜśTŚ£c„‰šžSŗ)wć%±Ų ŻĪxV„ć]/ڽĄUXtųå%PŽųk°Ö¾#Łjaehčb€Ŗ=}źłq¹ž¾3ŽfŻd‚8ģˆŪœ“ŽóÆK°KKę‚{ó$śsĪķܦhöl»āļé–śķŽ§\½Ō<:q¹TŁJä<»‰å&–éÅ'‹ŒZe«/Ź·­5Ł’@Hb~•ŪčŠZ[oH‹BĢ˜Y21žŌB’M»Ó’“õ)īüåÜH;q…ģ+ɖž}[Z³…gE—p8;O¾kp>‡šŅ(tønŒČgŁ–ó‘Åahž “³»’ćx‰Ńö³Øī@’Ź}ˆ”OqŅ4ųµ«Hļ N°!ĖHzįõߣųƒ\ÓĻŪē…R]īTĒJPÜĪżN®Oé”iś;O-ŖĮ¤ūϟ_Ö¼×[š,ÆŖ}¶ĶŸķn āpNŠ}=«k.¦±•ĪÆFŃ'ܖnÄĻ“nŹõؼIc­Ķ¶•=äösJ¬Ü&2=c*b’Šćµxu84Ā–w i°™ĘY”zV¤w¾ Ō,ē»Ōž#ŠI'ļ/Lb„+ßcčé¬l- ŽŚÖ8ät^d'ża=’•|×ńnmuHĢ ‘ƒdķŠm ĒM Æ Ūė·į ˆLŹ»™‡8śÕŸÜ_éČÖaŽ^C·–>ƳpŌM4y?ŁŽ”9y2g}«”Óm„¶–1 rīŽ9^1Pˆ;æ³ ‹åB“g#'!>ŚŅźÓU[»YŒ[>š*ć.‚R:ė?Éo<és$؏÷O÷`ėŗ^›«j^­äØÉ(f%[=ĄģkX» ÉŗšMŗAęDYčWłšį…ćŪ]żŠ(Wå˜}ÜqNR*(ģ¬..$²ĀE"Kžž•fīH­|?sw|č5“ĖH›—aź+H>¦˜Ś|÷ĀŲk‹WŒļ'Øö®E“U¼×’ĖI_%’PÆøc ö­y“Ųś‹Jדų-……łó."o™•†Ņ;Ī؝SEÕÆ.c“u‰Ó&9QXĻc.SWÓmv<³rƒ(=kƒŗ‘\¾Ōi#rŽÕœUȱ=“éoB"µB9$ņsź*µ“:ĖŸ)ÓnI Až¦¶å/S×4Ńtō7īļyV4ī1÷‰ŖŚžµæzF<“få=MLąĄ­do5(ŽÄC™…¦øŪ,[]ĢŅ«łŠ–Npk4ŗX4ė·@бh˜ä1#zŌųŽ(µtčä€qęć«HÄ®sVŪ\yQQ‹:Œæ„rŽœŚµŃŽ‘cszī>Ō¤¬kN-Ÿ³‹§ų[Uų]©ė]ĀŚÄCĪ6Ņ€dńŽēśT’¼'¤ėšœóxĖK{9ÓɊо2OFćłW½*g•ķ;ż¬ü3ąŻQ‚ ˬ±cķ̇ĢL”ƊZ4y ø'8ė\ŅGE96Tß-¤ĻRčX†¾«ųńl¼K…ŽYķb»8•Ą)ĻQÅŠż“WˆØ¤›s‚¼ī÷“å1Ė XŒŁ汜n>"ų’šźk«Ł'›¢ź|RĀ6“N…¹ź1^!i…šĘg2E€¬¤äsXņ#¢ Ÿ”ß²÷‰ßĘŽÖ~jw0°Hq ĄVś:ź?aƏś’ģ[ūhųcÄeÆlü{pŚ^¹jՖ7l$‡·ŹNļĀ©ochļcūr½¹Óu°ń.€šĻįķB»“š#¹0ōėŸĆķ_ |Yē—Ņī$fœ•`÷2šīMń·Ą©ć^F>×l¦H°ćėĻŠWšł’\żšōOüWĘ~ ŗžĖšÖ®‹ö»Y X”¼ēxŌć½8½N:ˆüN×lĶęFˆFĖÓ!…aĒ!—o˜]Hģ{Vń8ēHdŚX| •9ČļR¬-!Œ:U9É+W$‡©}Ų› FyÅQefv-Ā»ƒY·©ÕLi`øŚ7žU¤²Fī’īłĄījć#¢É$]N%Q5Ķ“®TÉUČü…w?šAOŪ’ėöż™ģ’ć=^ĆSų›ąų’+\IŗK«8°{…/Z$“±²Ųż·æ‚1–bĖøgžĘ¼·ÅšXæµ[ØĮY”Īp9aé\‰œ‘łŁńĀfßTŌ!I„š\5ŗ°Ę֥ܵų…’ żœ×ā7„īõŻNŽ=biŌÄ@1øÉeØÆćJ™‹Gói:½Õ¢™fƒČĄbd9VSƒÉėYłnUŠ8Ē×Z1’ū¬iļŽ¦«N­»oR:ӉŒ£Õ4jå&Ż D䅾*a.ݚ!Ź+pH­T‘7{ķ`¶Ą‚G+ čIėķL’#óķ‡LõÅQ“A‘‚2Ha ü*ürøUŠ!Ē'#·­3”CžĖŸµļŁė揀ž)Y\A‘ȃU„FvMjÄæŻėųWś žĪæ ńׄ<ćŪ}YošīĮóFūį–)d :8ö+XU:ø“M^ņņÅ,’LMnSœ‰ڦM&ąOz'øscpĖ$J8ŲĆÆ>•Ć4āücö+Ѿ7ü"øųįįū(SÄ6Ö¦×Qa&dŽN2Wž3čEŚRϧź3iŅ5®„*LÆĮ-Ó#ėŠŹč³ivP\8†2RR„³Ś½LŅ`µÓŽś.5ȔłR7qŌżk*» ÷’ƒeügį}kÄ3ą]Ś#Ÿ.IX)Įćš5į’|o}¦ŗYĒhlRR^äve÷Ņø*S“¬9G æI•öl?»f8>õś-¢ĶŹŚDūCš:żć^åx£’“MķoL¹“E™#]3ŸŗkĖ]Fŗ6ӖūL`g­u'c’P-O(¹sEä|÷„]–²Db©øŒ²·jÜĪÅH“Cq1ŗ[t;»Ø«ŚÅÅ†šLpø`?‡ŒŠŻĮéė%Ó¹–7*c’ uš%‘[‹i|Ł[@H¦ \Ļš‰tĮԐB°õ­ęń=üžPʈŹģĘOļĒv2²LĖųykg«–C$wød“€¹õŖŗ½„ޛ⠸žV’/ŗy A<­G/A¹‘ŪX\Ļ3ŽFŖį>r}½ė—Ö­äžīKØąÄ}ŖQ°FLŌ·‚žŅŹßŹ“7 3f„6\¬l¬Q—‚ƒŠ–ŠŒ™»eØjPG%“s2n8ķķ]N™ydśdŗ=ō†{„‘<Ÿ_ʤ³Ģ5ķ-ćHĶóJŠŠmdGTž:—r+h²£Ü÷ ZŪŚšŻ!eŒ**Œ Ęš¾Ÿė_ŪVļ,.é“nj.s×µE9žö³G²=ÕĪĄp0OŽÆ/ń£éÖ”^Ż•|Ü÷ėŠĘDź|ūÆ[ BåJ`“Ē5Ÿ™Ŗi‘“łĢ79p2?#øå&zõŸöŽ­kg«#_¦8éYzā6“|ZŲĢŠČŹŖ€g`Ļ­mc)H½ēĻaå5äØL§åČż>µĪϤ^3ŽLÓ¤’3d m\š1T£s.c˜Ō4ō %¾ć1ŗ}ō1µŅ[Ė–\ V5‹¹µ¢xzo‚-Akر»ž¾õ©Zźz%Õ핼±†į€ā‘¤baµåÅŻĶ˜ūLšy*8ō5ōŽ‘©ŪėV#Lµ½O!įŲū‡*Ų’ŽCKžimo«ü9ónžušńüČŅ\'jņ[jś÷Q›É»¾JēojµL‡>ǰ|;šżÉÕ¬ ā:Jąž2kčĶoD“ó-¬ļ4ėxēŒl$–>õn63U55tiīč>#`+…ÕĘxĒ]M+Høņą3O ĀēųEa)t5sēχZ“7ڶøš¢¼w¢_2sĆ.”ÆJÓ¼qż™­, Ė—!=ņ+2ɾ4ė°ėšµž£Z˜ŃPŖć vąā¼{N–dE$lß0cų֐3“/ųŹÓK…ģ”aŗnv<žµ ”ęģ<BŖüŽ™­oІųµ ķ>ūģWÖ2Ū®,ąŒävJģ,tÆx›IÕVŹā9ļX×cżÖA’ EEžO“©čŃĶoØ5ĀŁ3mŽ8«öī²ŽŁäŚ ›ośŠŁN7ŲõMHƟnÓ”G'z°ēu%ę„kg}=³Ÿ™8<ņ*Čqh‡A¼øŠįϟ$ۘ‘»{Vö®—L±¼Č3ŌejøāŽ ÄƒÄšrHf×1|«"ć¦zW=cį”ꯌ$_»¼Ÿ—ėRj{ƒ.ü8¶ė—+3C˜Ü”1Ķx×Ufŗ†Ńµ‹|¼õaQ'ce¶Š-µ6Ó$¾·Gū9śõrśŽī­'ŗ[–’83f(ėųÕ&>Ty §…dµŌ!½—͹³’f‘Iķ“œ~µéĒY{ &Š…µ18#‘Ō¦’’}Ó¹yē ­=ź·PĻēL_īŠ ®tņY“8’ŁXÄNp9üŖ…ÅÜóH"¼G rƒpūŽŌģ+žWŖxpiW³Cko"Ā\°PzĻ*éóÜĻl”Hį~cŽŌ†LŃŻčŗ„)ud$¶-÷€ĻßkRhš­¬zm•µÄq“Ÿ0 §§CŠ ŽzM;VdŠÕ®ev®óž;V^§ąłćKLNČ>~ŌAįČmõ6Ł®ˆ–0rUÖ½ę]J×¼(ŗu²YĒ6ąė+.Jąc€ Ė Ś>•c©)Ōš¢~y Łļō«Vŗę›­iŃĖ żždf“‰I Ļ&›§ ÓbiKŽv>õč6‘ÜC¢YCzaP{ss4hŁņHŸŹ³šŌÖ1±ā¶śćkŚŒŪ”Ck•ŽCĮfƒĒįV.„Ō$Ōķ Ž?22Ų‘Łń“zԘÅŌé§Ł[¬Čr ōō®£M¹»æ“Ež#Ę@ūĀŖ %ń­ėiśÜq‰l’6V|ĢŁ?΢ҵ FÜÄȁ9-ĮŖęϵĖs„ŚN-e.V8ł³Žø{[Bżī ŒH²Žæ|Tɶ4Š iqgw. Ģ£x^›sėś×ŖčŚĪŸ²$–6Iˆźj ¢­”Ś6£§ĻD³'ŚŌ| æZćų­Ķ"FÕ°eeOįĪzH‡õĪ’ĢŽæiŲŁĀqĘ«I£I¤éļs{#'pų…¤bųn5F9obū$fbŠIĪįė]gŠÕl`:DR:Äüķ'”Ē„ÉXäģį±·ŃL!c)๫C-Ŗo!.U»Ž gG”ZMmu ō°¤¶ÅHe#œśŠź5{k{Ø ˆ“,zėA<§-ĢSݤĀ ŚßŽ«ÖcģÆR2ōļŪŽ“[Y—c»³ń—iĻ:"ė’VŽ›ā}åŅ6¹ģŻ»Ņöeņ3²¶°±½YdVY”ŒnQŠ×AąĶ2ĘĮu;xÄO>>Eąī'Æ©·BlĻ Ōō„·ń%¼6°Ė"™"Q˜ž?/ŹŗæG§iś{ė"ī4·ÉżŃ9*zB9ū{ż?V°/rĄĀĆ`ēWÆAqkmq%„r˜ĮŲ ńNÅØ=”ÉŅĻ0 ĘÜ­{–™¼µ„Ų°2¹T“±ŠĒjšf›&„āJ;uFĖ*ó“č3żkŹķujZ­ü‘yOg,Ł”Ė1×­W.„¤zsEØ’Nž8˜($·jłśžņVÕīnĮޛʯ )‘’ÅzŅNƒz 'ŌĒt×";yK 98ž*EĘ&™•ōóęå_įÖ­OŖ\\ŪŹó_ VQĀ®~cż)•­Æäŗ•äłøēÖ¶ŗPĶvé2“óåBc±ėZ‰®u]2ŚŅąģUź½Ŗ®§¤ŁZ”{XWymąėUђćŲó‹ĻŠŗģ3XŪxsP†ŽŹY.©żė Œc„p÷š¾§ā;É$kp£q-…ŚiŹ…Č@md ŃŒēkeļŁE°C'….D5¤³¹…‘^]GOSQĖ©ŪÄĶ ¬ĶĮ Ž ,бbŪS8>b,‘;Õ‚9ŅćQŽÜ$‹’¹Į©z *Åk—ž"‚9„ž{‡ ¦$$®3^ē,og%õą0ȊY©£™Œó;Ó/尿³¾±•ö02 ŁÅzSß[xNF{°ŽF}OjV{ČĻńW‹5/jOä²<6’»#†x®1.÷Ü=¬Ä”<Ų}i\æfŒ½[jŗÅj3·–"¹Ė=N¾Œ1l©ć=EU4D¢zī“©\HnI{vū¹«&ßKŅ­5AØCmw+!żįnOÆćDßAr³ŃÆ.ÅŌo0ˆ4XG;O­pĶ„ßCi"yĶsQźk JÅū3 ž’ž ĒM®ą×O‘ Ś£M…ɧŲ«-Āź  ¬×æSY2Ėa,ļ!uŠńϵµįóµÓéOĢqÉ Å=}ī®<Ō±-»±Ęs\ĻöUͧ•}v²JėĪĮüGŅ€±æa4hVŁć®ļ»Ą®ŠźčĻ·åĘĆĒJ`ÅfsO"ĒĖdśV–ž–ķ¼‹r¦gk>õ›– z.£w4³C²Eūܵøāčm§¢ož½uśoˆ"E³–ÖĪ#ŗpĆŽ3 ‹QMföčź1XE€Øc޵Õis»e2°F>]œīśŠfŪG=ā­-ļ,$ŽĀ$·ÉŹ».F}µrÖ¾J-ķ-ȹŸŚ4?3š #±Ī€ęSو™rx^CZ©›Ū¼:…·•4gŒćé@ͽ7Y·»ŗ¼Ģ‘"0<õÅnZÅØģŽ²øĻō8œÆŒü)ātxåÓ¤—̆@ņØ8Č烊ó½*]hF&š9,ī䍣x›’j%XG”ęæ4+oģCWŗ1’iĀČÖ””åŗēšńĘ:•żņéŚ^ž—Wh¬ÜŒäō(w5ög¬ųóÅÉcØź:·†ķ(Ł™€“ēŽėļZß¼K¢ųŗ o†ęļI†8×ĪyKKŌƒķŚ©FÄJ68Ų|!żÆ§ė:äńĢÖɄF';³ŌWKØ,×Ņ¢Ē O)LhæŻ_Jdž'}¦x¦]Uą¹ŗ „,ƒhH÷Æ@}.ņŁm³ä)|•ę³Ÿb$ś āØ4ŁbæÕfH[]@ Ś“īü]£x«Iņ4µŠé•¶%½(Ē©Óu .­qc{£Įjė8 “Ļ„} ”j—še¢Fšq“ ą‡ėZ†§©ų®Sq<1Ę÷6š؏žŻ5ē~×SÅ÷Śż“Ö×PFĄfLN1ļŽ‚£»»ŅŲK¦h6óĆ{7Ģ÷,Ł ćŽæō¬_ų‚ Śéš^ÉŚŹ`üŲŽGSA§)ŃYOõŖŻĀąHP2µYhšĶĶÅÅī£gmI å¤2ś’õØ1,Žkš hEple-ćøē—?ģoü_$· o>ŽPF±±ōdćš©q)@ōūoųgÅŗ3ėÖ³›ĖH_ĖˆYKpGįQh>“ŃŠ h ŗs·‘ķš«„cā ž©ycŸe§Ė,‡˜§ §¹&øO…žÕ¼E­É„j6RZĖnå]åūƎ˜>ō3ŃµĻ ^®§Øip@~Ā«ó¼o™’=kĆ|Eį‹ßÜ`{"7 Y²S(ÜČäm.öųZÉ(ūĄēuzę›ā[]2Ö=>X¼ĀĄ*•ĪW›ˆr3u ÆņŚ@ł—ر5ˆĘųžĖBB,Č„a§/Ś|ǐ a†ÆVŃÆEµå“[ÜK ‰Žs÷MdęĶ¢aųĆG{Zx§O½…nv,S—ĻĢ™ēŸ^µė~³ŠĶč–2óæ>x!±Ś¦2ģl„dPÖ“]M§3Z)Hɔ0ūĖé\cHĻŽIm­•O˜¦<“[¢m©ÉŸiQ_1„äńœŖ·šģ¼ā/ųI~Ó€µ°Ō ¦8ķ܁½½»b“TĶ#cÅ>ńn·¬I-ī„- Ė? c zWA¦ü/·ū@yš< ōÜ=EK„¤žĒ”iš:}ĀÉc™(摖>ÕćŸ¼=|ŚĘ²°¬+Œäüøz“)!}<2ؒyŚŌ»¶kwįž§ūł`» Ҭ==)- åč{֋¦ąĻgØF0G¹5jŹ5Ō/<¹ćŽ^NÕcĄ÷¬JŠ; 3G¹}>īßQŠŽāģ䘁ŚƾxƒĮšä…­#¾šXć\Fˆf=ÉõØtÅģĻvš'‡nl-Ņ;–žźå0K7%kÜ4‰f„K,Š v‚Ų~p¢°œ ÜN.óÄśoˆ.n$±»…š ĀHĮū¤W ­™/“ĶQ”ĘFÓŚšVŠJ™ąšG†ī ¹ZXĪČķŒć§×5Uš­ż£<Įįµ\nfĪsŽÕ×3hǹƒ'‰žęŚ 6+xęŌbnx,;]·‰%ń-žo ¾–$–ÜaąF+^dU¤µQ¾9̌x|u&½Įķä ¹Ōf·Ž äƒ ćµa6 Ļć źZ†ųf¶A-cDćv*ŹY}¦V‘#l“Ąƒ+Ÿ’·Ė-ņÜE(ŚŸ”\v—¢Ūéo4¦Ź©*§tv«S¶†±Š:†²Ķ¾Ør£€+”Ч§ĆӘīL˜bF[oÆ?>[ œō|*š¦—rņB$‚ė9wĪŌe¦Žę¼ƒćׇlo$ŗÕ,¦ŽŃau Ąć޳š"R¹óo‡ †Kä’ųbß8$Tz×Ix"K†No1As\³Z˜Ļ±oIŽHž_·ē`c³ É>õÓ*łą¤@īĒŽĒ =* å5$šĶĢöJī„s»>•Čźö×VˆE(Œ “Šč„[4åf·%·…lęFĮĮ,;}*M&Ž=jż"X”²‰Ļ;¹ĘOZףöbījżŖ įā“2m”ć­yƌ¼Lś¶¦²E ʈF6 `ż+ENĘ©i©»įż^śDkO,Ė$€"žµzU„……½¤š‚ƒ ČÜ>öģzP;½Œ3Ķ=Äk#rI;³Ÿzō;Kė2ĘP¶Qµä˜Ä„ą‚+-HžĒ#­x‚źķM¢…ŗ ŽÕŸĀ©ęM¹ĄéźkHĘĘņ3äҧ½’k«l“€‚ \Õéu ŻÅćtfØhć„tGaœ¦™}{Øjr]µĢ°ĀČal`}+ѵ=WNŃtČ/ŒęEå,½«9¾‚rÖĒia©As§ŪŽŁ2ķ.ąŒ޹]W^ŗ’†ŽÜ,§ģĒÖ¹„¹<ē)ā nhl–Ž$‹gĶ™s’=kšū]\Ή4ŃɑĄĒ$ŃXسŃŃZ(Ś9mćx•wnsYæi˜K¾, § –Īź2Šż6šŌčš{«„˜óóļ ń‰šåƜŃ<žtĢD“õ>•ōŸs‚TI¼cšöćāmŽÆ®­ģĻ©ŁÄ'D'-p3†Éöń.©¾ŸŖ_i®ā9c—OQžy¬B1±…ukówÆ“ aéõśŌ°jé·¶½ŹYĻ ŹĘLņ«žGæŅ‚ÖO‡^2ÓÅē|ŒÖ˜łśń~¢æ[<%Ŗł:„¾„c7iƒĶe=?Ī*j+1N²“ū˜5­*Ņ<Ūgś×įæüwöSāGĆ’i÷6Śk„Ų’ļKŒÅ—ŽåĄŻŌ=š*ĀĒń!ń'ĀWž½MĶ¼v„­/QNL3!鎯?Zšńęҳ Hوb95Ń–¤HŚ7;¢…‘_vwńTÖķ"„‡8ąõÅ_!Ī‹·9VB S’½QóQA×ŌŌņ³hŌ±UnäIŃ£PQOĢz¾²Cp¬Ń­œ`ō"®ŅKījA;Å‘C1 xäW۟šOOŚ“Uż‹æiļ|aÓVāßĀ¶·oōˆ]‚å¾™Ü=1F·;i³ż"tčž?šĪ…āŸ]%ö‰ŖYĒØŚĢ‡*Źą6·?‘’YmG÷NTń\•™§*±óĻ㉯iś•¤ ż „¶s×pÅ~düUš~‘©Ųj6…¾ŁÕ¢ÜŁĢr( ņ=OĢ„cl&Ÿ¶ŸĮGį§ÅŽ&ęŹĪśg,<¼,}ó“Ē5ń Ģ/4AK°'szWE)h®sTĢćˆetČ2ąsķQ“¬äü¤¶*ÜŊ²¾<øb$Kb™ ˆLrD»eG9,9ü*ćyoؒJ^fV;ÜMDn'‰ęŒ©@§ļ{ŠÖʑ] Q:OœČ ƒ±źE]‡b²ćq8<Šn‹2Jģ$¶Ž6—ĢFV…ükś~’‚%~Łų§CŌžxÖx,õ RŽŁmļ=£p”õŲpÜt¬åtĻźŸĮŚäÖ6znuy Ę©§Hbi².`'*Ą÷ėŸĘ½¦ģĖQšÉ‚²Dź}q\U 3ŸÕ<7£xļMńƒ|@<Ļė¶i×!€") ®g'ŁÆóµ’‚žĢ^(ż•’iŸˆ×ōé.tųgS£åģIāfĢnŌ‚3ļšēQŌŒ­5W‘ć‹Īž&-“Į?}ą«¹Æ¬…ØŒLĢS.hk@eoųŸVŅ5żWB¶Y!²gĖ8ū­Ļ#×­hüG½’„ŗéšśŽ :[XĀś3 ągüö®v•ĄóĻ ų§Kš^§ Ɯ$øgt[€jŽĒ~+ōĄŽ,µ½žČæf3]$daņķķ]tdsT>ƒ»Ö­5[_)R8É9Ęs^{{b‹;Ik"”a½ż«².ē$˚A2\4*>ī•k[ž ›™¬Äū;sšč†Ęw$š~§ØŲjööwr,öl6|Ƒļ^ūāĪ’KF‰‚K±pTpŽõ¬e`<>óCm2P vmĶĒJ©©Ø³1Ī07ŒpzZ©Hiā;½LAgl²§y»‰#ęÜHéł õ›U—Ąp3$MhT°TAÉi§q8\£šÓĆ÷֗×!”ņ¶®żJŁń-ƒYėrŻŽķēõ©˜B™Åj72Ū£ĻoA p rńźW :¬‘‰!Ī8SĮ¬ŹågµhxzęÕc–įmīvä+śJć|Uekkr³Ū±iœœž8ō«RB¶.J<Š&ĒŒ×ee”Į2\Ź&]ßx}1Ņ øĆ¹ĢĒs„Üß=„ģaAłCø zŸŹ²ī¢m:õ>Ļ"Élƅtū¦Ŗ,r=fĖP·ÖRßĶŽd€qY—™ÓƔE!ē =)ŹB>§«­ŚCÜģ"Qņå°Aö®W]½†āÖŅ6;CœäćėPYĻŁģœˆÉ9ĻSS_]5„M`ÅŌ{šØ¢&ix__¼¹‚Y&ˆZ,YĀ–0Ļ_åVn¦:œ ™„-æ+Žõ±„¢u֖3hÖĘįUzČON1ÓóŖq^A±¼äóSnÖ®Ę8ˆWūCS’Ń”tŲąąkŪīthuÉb“,7Ɛ ą~tœŗ@ņI4=OĆ7ĀżoščėŸČJŽßIJźwĶŹŒœŠjhźŽMNŽkŪpm„ć%Gečö3ųFźHķ/]üߘœš3č+hÅ ŹŪėÉü+g{¶fĪļ›œūÕgš¶“ik£Ŗłäó6i³>mNE×-›QIŹDP0äWYØų”j:„ ½ŻųQéėYŌ)+ž‹&«åŗ<¦4] č8kÄüW~šĀOxDBĖņ×3ÜÕ'Šń;Ć·©Ŗ46Ķ#¹n čõ ņĪm*ų³=ʹyž"J•ÜŻDɼ7$פsĆmn* œ!÷õ®S]Ó5/QĘ^{.ŠĄpßJ¾k(ō6t;{{ąRg0H#"­kÖ‹)kle,ąIž>_Zø¾¦RŒˆ5}SÄĻg${Ńø\sÓŃč©oął ?g’ÕŽFr cę÷¦+šĻ‰dŌnRD\ć' ]χlģÆ4é“i®…ŠL§7LóĮüéIt ö5t;˜“§6Ż Ö6 9 ‚)¾)µƒ_–mCIU¶¹`|q߃]r¾4īg€xŖž>ŗÖäÓ øK‡‚߈Ćõ žsHŅ' c{¬[^ZXĀ¢ę ¤U;›§©ÆeńĆżCWšń¼Ńu {[Ȕyƒ92óü4ģmÜņ½?Ą¾&š¼ŗš¤öQ5ĮkČXHŽģ{×”\ĒmŖ¬@Ŗ€0$ō©å4¹éž»–Źģ<Å}8§*yÉéżk3WšÅŒĘęČ­²Ć&Y•±‚=źˆsģb[čȖ³D¦1p3Ļå\†“£L»X$T*cĒ=ięCƒ%ͬŒ­•*–čµå2隿†¤¹˜ß}¢9$ŻJdžĒįßi×6Ėu#Ćv±’UFw7„fų«]sš@‰ĖĆ'“TŚZ ±¹į; Æ\¤·QĒ$‹Ćnć8źē‡UƦ0˜Ć+ć {T—m愠ŌōūXg”åTēQu¤Zi‰š“hŹ>ž}©mγöI” ©,e¶± ҵ.õŌ–ÄŪKQøeĒŽ€#Ćö’`I`µ’ŽÜŒ£ļ~Ué “µ"¢Är,q·ßš  ?Œzuφ-ōĖ8öjWXhü– 䩞&ōÆÓŻœĶ¹·]«…1ć•ā‚Y·ÕŖ7–ŲÜ)޳§µšžį¢ū>!ź;“ųP4—CUļ­­£·ÓQ~}¼|Õ=^9ČBØCddēųhĖŽZo²–Ńؘ°!łČ«ž¹ø1Ā1SĢ€čćŠ –ÄTe›ŪµCgā`šĪšźŠ9į$^Aö4ł”l.½”ŻßĖöĒ!Ć*Œ“ŲV“f²Kh#_“ ō—25¦TÖüQyn‹o`­“'ĢėėX§Æ]ŽH!¼»•Ų±ŪF‡„[ųrq” ”>ņAĘOZķtoÜ_$Č#Vœäzž;T™LąēƒÄZkŻ6”hÆä¹»óōśWÆAć»kŲĒt±#Bø$ †zÕĘ×&ĒĻŽ:דĻ^C%«ˆł;•OzƳYåaöpU€Ē^æZRÓ@±ćŻ]"»Œˆ‘Œu„įՎŚēĶ’ĻtKžŻEMś:/Ļ„Üx|_XiŅ6³§2Æ”÷ę)&Ūd’HZ†­#d?JŌndž%H„±8ĄäsZ:ę«}uzmuhŽ !"4 >čķō gP"MGHӑ,”]¦Qåüć=OæZĢžĪ’Āé›a=ÅGydĶ9œŗš0iŃ,PZĖ+1ēåŅ€%Ósy’EdLžŖž”āé4­m:Ņdfć”õžt ĖÓ/nuѤ HĄl Ų“YµŒMlĮ¼ŲǧA@ģ[³×/Æą[+±dc~2WšÆMń,^"š[é6šŒW0•œ¹Ęę®’<Šh¢|é©x~eYšęQ“ʓ׵léī,žÅbXFöóŌū ~…Åt=ļJHtŲ ™œ Ą8Ļ5Ē|Lńžµ|Æ>čåveR`" =«HÄÖ1±å6tž*ūXšäŲ,kŽą¹ō,3Ē¢§ötJĮ[$ąüÄŅp&P=7Ā:¦ā¶±6ŃYÉīĪ[MnųJ†’ĢK‡i-ł`uMCFvG#q¢iz=ŗŁĘ걁“c„sRÜG{Ŗ=ĘØ¦VE 9Ē€Æ2Ś“/”¼zw¬Ųne&U,½†:PµčKöõ¶”(w-gx¢źŁRęZ=ńœŽ(ĶÖķībŒadU%²=ėŸÕīü©“ĖˆŽŪ³Ņ˜Ń‹$Ķ4”V= `ēMmEŗ K3ÅmsŪžx›M°Ń®¼;shļ$ŹvJ­Œę5[ūæ 5åüw!ˇŻŌSxv_µE=ÅõĮ»¼™ĖoįŌߌĻp·2ŪL—É]½—Ž—2 Mixl,ļLĀN ŲøĻćŠč4=WS¾·:{»BĒp šĪ6÷ƒć¼•„ŠV€«ä uÆqųq£ĮjÓĆr§a·eWĒGĒ|Ø«v2NŸ}ā½[PšŽÆ§tµĖs&:cņ®ēM“šg†¦ŽJHlŽĢq̧ÓķŲø«Eāł›Äš¬÷pEel*ŠĒśW s§»¤–€ƒƒ‘Ö³“čG5u„KmČ[jƒĒūF›”™]ł#'Š‚ĶķJāŁ„hŖL¹ŻĄ¬¹å(Įźh)Fä]h ÷śŅ¬Įe{m²K…Vö“NÅJ'°x^HKo9"Ś8ėµń„„[ié! öƒŹ¢Oւœ4Ķ5āÕ§3Cqł²I°·$ŸĪµõ½{MWøM¶ū+²}Üä)śÓ»Ļé—K#“ČĆ#ø®‚X¢0+ŖQļJąUUyQrƒŒÓÖŚOķ`ø@±’ĮėH‡[Ņ'³¾ˆŚ’–ų®=k[ģ÷réÆVé½°ĄåžµqÜi\óæx†ūĀ~&—U“šį2¦3ŃN?śęÆGć’]ų¦ßVšü—å–™ ÉéZ›Ó¦ˆ|E±ńÖ·§Z}–udR9æÓ4Ķ_ÄzĪ»sŗ”#*ØĒ҃u^Ņ^B%@įG^„šĢÕŲ5ųA‰†7 ć5ƒņ&qź[¾Ÿ|qżŽ;Va±_9Ķfh^ó®ÄŅʏĢŻéĘV9¤žēg*ŚA«& øgdĆ ‚§»X®.&šDłP ? MÜØ£4\ÜŹ Ė“jß!Ķiź¹Ó-c ń·iÉĒœ£qŹV-čwp_ł€©}ŖX f»¬TiĆQŽ(įz8ĮޤSб“•Ģ]2k›Ø5„Ä©/zä’į ‰5E»µy¾É’Å1’MktIčśfĮlÖ%d…;īéYś¦ż±k%³ĻH€”ÜĄGj‚ąyĢz;C ŠūÕ$}+5`ž72£¾å8 Ń¢å×Łf/9‘Ōó†ļ]=żĀ^%ØKmń±+ĘÜzŠccUEŒ)„_5ƒ‘üėŌõ*źKu¶Ą~C@Œ‘ē2£}ŠI$ōEš;¹–IY¾ī@⁄}Všō¶‰qe5ÅŹ$‘ēÓµlx‡ÄŃMÜrI¬Ē» qŠ }Ī|Ų ¶¼‘;y—z0ŸŖx—TkT±±­ā–>“mŌLŌ..“ģś›’ž¤[ėŠ˵^ÉzóĪh–—(IŖi͆²…ż9ÅsŽ£}-ō1Ąģ–g!õ Ģī“;å“·ŽxĢX'yėšŹŗ–ŅĘx¼ć–;O Ö°CQ<æU·š;§ŽÓK(%ˆ,Iė[ŗq¼uZdz–ļGŗ,›Ź+zńšƒʵ©¦µrę)&fl·v±¼Ga Qۢɓå†Ć šž`<„ģŚ5•ܹ=—’;"llzT)29FšuōVwĻ"ø2ŠFÖA&›®j–Ś=ģÖŪCa™Ū„śÖ‘‘\ر«ų[ĆŹ/O»%p©Ęā?ÉÆ8“ƒWÓ55ø²:8Ʊ<жĒcéķÅŽ&Ō4[m.ēVø¹…#ڦAŸ,cīA_=ųę;_ķ–A©-ÄĄFxϵ+‡)7‡|5iŖ\%•¶.ÆvŒķćšķc“Ó¬,]>ĶdmŽHäcµO2&QŠĘ[ŪI‘‘ĮČ&ŗŪMJ)4MB};ÉūrÜšXš.a'cŹ|C4ņ¶“įX·˜yļY:lńŁÜA5ŁŁ[,=E0ŒĢO^K©\»DØ-ł+ņä Æń—ŠÆt=*ūHÓm–śęģšŖ‡-Žp=*’gL&TŠžMāI“v¼²‰ŁCFļķŠėüUū4hžK-~āś*hüÕņ¦“ĖÉĒi”ĘʞŠóęĒP²Ōt»dKŁ×䎽P×#ćAō½/Nšķ­‰ÓmbB·ąļ˜zēņ©±Ļ)ÜȰ»–ĘŪČR%^ :pjݶ”ė¶šöƒā©%›i÷ Q# "R}ˆĶ2łĶ9|Kw×3Ć 6`“2DŠv•aČü/ĆČ<¬Ķ©ŲGy-’,’y~bm ÜšŁéüØ3“źQÕleµµ W¹Ėmg{Õm#NhīķćÕ”»nöeĆHŹĢę>5ė67v:O„lŁ<“f’ä|ĆŲ+Ė4Æx–-{Żz%²XȈ9.;ֆiœ&·£«¼ŗĪ§7ŚmŠb A ķXśLš†˜Æy§ŽKö‰$UXcœńļYė²6ä= tKŁ&1kmĶ­Ć|®³.'Ö“¬ōżcL’ĻDŅķÆ¶»BœØäēŚšo©.'[­čŚĪ”ņi·L–ŚČ$ƒiēÖ»ļųV xjöņE²•f+ēŗ•-!ėüĄŖę ė,„E ę›f.mļŗŲąŗ źB×Ɵ“6”sāŸčĻį>ųx} ņQåˆĘKē’’•0g«x^Óį±Ó|=}e0æK}Āē9Ćų•nkšķģ‰{§Ś,qLSäłxŻŲšPī|“ćgńķåüqk/ö¬üČč¤*氁įdC®ŚbŽU !݁Ÿ“½Ÿ{čƒm¼tš^¦–«™^¦1Ó¼UūYZęĀĪKyÄ »²9Č=’Jv:H/ Ö¶śkŖI1 ‘ór+­šż¦—gļsmcil„Ė=ĪÜ0w5.G,ź3Ķ>!üNš÷Ų…†˜–jr&TęTöēšņ™µūoYM£-GĢeTŌc§éTŲ+œœŃģoLģcøĆ85~ūĆöĶM¤Ų±ˆgkŸĒ5”¤]ŽW[Ž]#O’īŗ80ĄSļX‹ŖÅ9ŽU{·ŪßėXĻc-t4ēŅÆmc[µŒä#1“{UhRźŌ­åĖŹ±F’/$gėYCcčoéV—‰zŌ£²y‘¶Ģ†ōÉÆXŌ4m@Ҭę±xĘ«0,J’¾ō¢h™Ģ}–[€\ŗ¶O98ĪkˆńŒǧަeö«īŠTco+¢,Ö/CēĻ |.ń-ĶóĶ­[%³6L„6ā™<WQ”xB O«_ Ću§Ŗx³Åó¦©%ÄL øÉ³Ÿ<}zW¶ĖaÆŖYēPšÉ-Ūk°Ź†P:0ļĘ*%G±Ćų›ć'Ćoė1č°źOŖkɵŅ%* vģkę’x·Åšę§y;=Ͷ,žbĒ"“DcbTĮj’éIh….wcŽćé^­šÆį‡ˆu»©ÆĄ…aLyNs¹›Š ĪĀIu;ßx»H1Śż“}„ü“±',GA[_u[A`³0ywjyä“é“\ņ’4qŠõ›;É÷“PŹ·Nµč¤}»Ev¶Œ5ł;‰lżÜt©SH‰DįƟu§&Ė„d‘xbę¼»ā.™ØeK`³ŻL“ ńveéśuü+¢3ŗ5Ščq §k«ŖŁ[µ„ŹZ$™“Ģ ¤Ÿ{<:V IĀ EĄC…Ī=I¦6qZv·k?‹ļ“]‹Č Ģ–pŲP;q^ågp÷Ē“G–O-€{5Œ·0q9[­DŃķui„Ai<ļ¹ŲX÷Æ)°·ÖỼ[» WLĖys;ŸŸŗ>žõ!v]†śĖEŽąG*0ōćė^%ćŸ4Ķ,Q¹Ž9['ŪéWŹ»F7…thŒņź#0ćļWWŖźŒ¶āŲD+Źģaɵ‘ČĖŖZÜ“qĀŠ¾Ņ0øĘ=źŽ„erʲ$ß.>āńš r9ķ'Døææp !ŒœŒWŃ>³y^ŚŽYŲ®B{c»V2Z—”Šk–°Assce:Må”ōŻ\ ²_Cpɪڼń6NłTćŌT68­NŠŪ¼²œ¼Eŗ÷jŝ©‘ą“qXĄŻZdø\ķm|[i§ZŻŪD¹}ƒ'u’ėWŸkž%kß+ģÓ¼2«øHėėWģĮE‡üEq p¬·+tżpNü«Õt?iļ=ĮŌīÖÕe¹ōœ2K ·ŸüὑGåżÜųUw,|żģŠā¼Ać 3ÄŚ–«5œSÜyjķ =qųUE4(Äļ5‹ż'ÄGG¶ņ#’t!@ėĄć­léz•ŒöwS[E#®Ń®×#VŖXAą› ;Į:ŖH¢ ­e}…$ ˆĻ®+°Ö<_OsqCoK1'č(ē¹'s/VńeüÕµoŪ¶”ŖFąˆrG=HōƄ|GćėŗĄ—]šyåó[q”/± &ŗ Ąé4ö†U¬*’‚Iź}k¤²²KHē•äSp½Pœ“ō®v†©6‘į»høłH9$¶Óa]9³Ņt=“Ń{"ݦJīę_ZP…Ķ•$‹ś&³|¶°X K«uƒ9ē=æ­tž=Ņ`Õ4Ū=BŠ$—.Ø%…o@GųWDUŒ§u±óÕʁצ8£w'ßüõ®£ĆzEĪ’÷7qĄ¢xP»?w8ļõ­ąśĪĪ7Ä}żęėĄ®FņvÖ¹Ū_}¦u’dŚŖwĆfœČ£«‹«I¢’ÅL. Œ„t~ŌÆnbcŖ >8lńėYJŻ~‡U”dó“PJF@8äżjHš1*oY'?0ĪąkšOS)Hć.5Fø½•b€4aÄmœåpz×OPŖ—Śd^(R±.uč“ųZŚŁ$@³²ūvÅs³źwZ¦¢¶é ą)łzūž•Ŗ’WLšuŅIuó8LwāÆéĖl¢MźÄz޾ŌĶéEßRŹĢ𠌷īĖw­_+ūKOøÓä3•żOŹ'@}GJ箵¹·.§™x†6Ś&AūŲŽxī+ą/ž Ó¬59¦³‘ŪO¼ćø 62T~µĄć©”Åų(ĮkO‰uCb·> ±¶1“L„a×;[>ųüÄßi·š5ÅŻ® ’}½XłĮ‡ś³č+jK”ŒĪsE1wa)žšØ·DĪĄŗØĻNł®“®s±Ņ@ģŹ‡f08Ŗ#ŪN"*ĢLÜ D›‹f2ߝ5Šsö€3ŸQ@ŹšFė;« 7lČ!xėÜž5r6}įe\IŠYó3XŹåĖYn>e” |œc8ÆeżŸ>,ė?ž1ų āօuocqe|©|^ĄĢ!Ē^3Š\Ś1Ų’@ŸŁß⯅|į_|Fšķā_ĆåFf łó­$FAŚß)>ĀæFāžŁ kKüäŚ$·$CĻĶ1–dµx rĤĀć'ŗÕųŁ’¼żŽ­?iŁāĻć>“¦E’ o‡• Ö^ijZuVō;[iĘ?ˆ×$€žf’Dŗŗµ’ŠźŁŠJŒpü2Glā½?Ć^'•lmO·W°HĒĢĪZOJfr—@Ń5{Ż7Zši‚“Ļ—ĘsŚ®ėŚ„—×v”¾ŠČø÷’ėÖ2ˆLóø®cŗŽfc·+č/ƒŽ?Ö4żvŚŅņņ[‹yŒ|üDN+®”I“č}÷i¬Ļ"Ę#» /š£„zN™gå@÷#ĪĒ›Ż]‘]i- Ė™e†S,*WÆ~•ĪÉ|Yžg³“”dżMncc©Ņ5&ŽÕf˜Ÿ;¢+.3õ®ŽO_Ć­™bmBģĮ=¾µ§!QvÜSŽ«msu ˆX¬~ķpöÖŚī§[d%¶¦}*±¤Yī7޳]?OC³§ĪĒé\śų¦ęŚöćEŗŒ[Ū” @¦„bÉ“Ūėx/„¶ńėėĄaPx¦śm_R7×0[¬Eƒķ=2(nä¶Ržļm]•cuĻ)Žҳ­4­>Qp³:@ʹxśT§ŠÄ°°Ļ|öä\…Ž0G8Ȭc¾ŗÕ$Ižqåą{t?­ē;ż/Ć÷(±’‡ĮĒjé[N}.5šBB¾~RzfƒH½KS°KœIon³\6āŖWžÕ.l’č#C.3³}h¾Ö7ZNœ' ‰ÕA*k™Š+ū¹ é•Āg“Į É«ŻŻ OߣO"š?ŁØ“»A©op~Ķóg$ćm4MÉoĒFyā…šwĻcØ®~źōjec„Ÿ(ć¾s[%m€ŁĀŪéžDLŽzē9=jMWycūD{Šž)˜¹‡ā O“h‹-¼ŹŽ| öśW5dĖ$°[Ė:&öŲ3ėķLƒŁĮ6 ¶¦iĖj,”cŌuÖÆÜ}•nR0D.ÜŖf‘ŗg™ųīŚO*å„$«d.ŽÜW’x|­“ņ°K»æńPV=šĪöŚÜ@dbĢŲńķYo­5(,ņ¬7>2÷®ƒ)Jē]„óŲ\iÓHX¦YHĄŗ=WPŌlōŁmļłDmé׎ŖśėsÓ5˜,''ļ+0_›Ž§źŚt7¢XĻŁ™äį‡<`óXĢŚ™ŪųšßP¹ŃY!-k•Ąe8 ćµx=ĘøśeŒ‚āIüšIĮźäW,·:”±»į©īu=NŹņ‰āA’¤rsļ^£ŖŪĶØ¬)mm”\ƒ“r=źM/ŲńmoBøŃu«›XŠÉpeĒAŸZ—ÄśėXčš{ ”G¤€ņhīvچ“ųķķē¹1ł¬Œ÷®ų§OŠt«ķBŽ cŒNӑÓó­#.„Iõ9;kM:}RŠéVńĄįłN0kĒ:­Åö·qix±č‡ļY@ÉķŸŅµ¹‹9 >ĘÖā9f‘ćŻdg©5=Ī„Āéī-åÜ%G9ĘćÅ}-ą­:ÖŁ#ŠuŽ]ėƒžƒ<ZĮ³E†ļĆŽš•½ä±Ū ę}Ƒ“ߌø-Ytė‹[‹XJKo’BŽ”‹Ló £Zj\\[E,iø Ž•é·ŚĆéśs^,é‘Ć9zńśSĻńĘ~āÉ4 i#}0J†\–śf¢Ó/īļ,<ūtsį) źķ ‚ĘÓÄĻws3AnąĘBœzW”É©[žÖįŽĪpBõ¤#ˆóšīāāK# £žÕĻŽčWŚdŽZxXī^y"™\¦k$jó}śŠ’=0³0ł‡Lō¤>Fv¶Ś­žŸ£<Ņ+Kå®a"¼Īė[Ō5›«äŲ-ā$õ`E2l*\M£i×Iw ć5ĢĆ©*Īķvw‚{ōN‡ŹĶk葭ZęܾŠ3ņŽ M£iśŽ·Ed­-Ņ!lzUĘ6ŠÖ+”Ųév­”››AźĆŒ×¶ų{O𿈿“lüKj–ģ„W9 GĒņ§+¢Ó±óv™zŗN„«hVńKmäĢɾs°>•±­ż®ĆG—Q—c°_ZŹ@ĪGLŌ­Æm¦ŠU]ĮšĒ=뤵¹³±ŒĒh”mņX¾0[ėDUĀ+SµŠ„å£“\€Kƽå“<5?˜. ŗ|Œ”5µ¬x‡¼M„jo4$mŪæ 9JņöŽ_ėÖŚ¶§pųˆb2Ė“Ԓ*µµyå‰ü’)¶3€Õ‹"Ć#æ–Y[wz{Ö2Œ¤µ1uK)%ł’CHčk™–‹ApÄÅXcphqčkŠŅÓ¬„*āź#ęōŒq[°xzäFn‚<iXŽ BžŸVŃ\)Œ;ČĄœ‘ŠĖÕ­ÜM3™ppАͫ'6¾[¶vŒf²ļõyīf™f±ņ`犨¾ę2Zœ}ģźŃ;ncėYSiwˌ±†ķÄw¢L“wJŅŽU0“lIĄč¶žXw({š~µ rwqÉȎ¢6S·#¾)°–HįfŲ,æćLl³šż®µ¢ĒrŹū£`…·rGoå\ž£ ўEF‘åA#Ø«‚F”Ī;OŃlµ½¹6a÷°ÄTśOƈeÕh.ģń!W=ż‰śÖ†š‘Æā]V:Śk)tČī•Ų#.Ldgæ½xóß[,ĮR6ó qƒĄ¬ēŲŌļō6µ™ 0r:Ö7Žc²µÕ,­,giõUb1ŌV`Ńź/ƒtkĄ]{P{ ^÷Ētd=pG~f鎐é—ĆMó%[t,H9;3׳S2’<ŽX%‹RiŻdÉ9ļ]¼0“vÅ̌ģzūŅ Ļ‚źyomą†øR̤zķ.4“v^—ΉA€ćź(±2ÄŠōØt Ÿé,ē~]ˆŪ]õĶīxóA¦ˆ/ōøóĀ™Ÿ+<¢_ģ}'Vy ęP»c„z儎œ 2UQ—ä÷ćք5ĻüK¬O£ÄÓGš ó…Éćze¼ž+Ö¤‚+›Ė4™t¬£#œ{t«rFщé–~Õā`¼™»r=kęūIÓüDt›¤ž[%<‘°Ø)Ʊ…Ø4WöšX4žP|Gl÷®Ā öŽńŠgŒķNCcŅ‘ t9½Eu9Ėøāłøćұ!{½Jī8„'–y?Ž \ØŌŗ…ŚÖhB•ŪŌē¬dÆX-°nOzkĻŖĮzŠ$…QÕ¾R55µŽŲ$»ļVlẚ „rѼ¹»µŽŅźl[EŸ(į_ēXBåŚö8-£.Żü_J ±ß2yö¤ dŽé’õ«ˆ×Õ¼R*s 5¶†•žtaä ‡¦{×U©Xʶ†DtYBīķP>CŽ’IFʑ˜+0 vZ‘mqo=ŌnWĄ,9ę©JʉX·'‡­ƒĶ:/Ÿ0L9;€®kÓ§Ż£ Š ėŚ©;²fS»§ Ä29, h]Ļ5Ī“‘ŚB@_¢Õr™,m¦Ș+B0:šŻ–öM‹»jŖŠ@Į4łƒ4“İøš4ø¹A"‚ä0ļč+'Už/Hų'4%aÅjEw©11ģÜXŌńUŚW—f(y¦lXÓ®-é%,’Ā„§¾ ]ŠnµKæˆķžĻk–2¹R§Ę[ƒG¬·…’Īię²1Ŗ.Ä÷5ČjĄ,‹ŗt\·ĖĻF Āŗ}ć~ÆØźš~Øź ¬ėw2öx›"’ž{u®zŻ™īq_‡ø Y|ŖŃ‡, Æ{½mŽēŅ©üŗ|÷ó# Œd§uŖÕ„¾d$ĻŽēŅ½x½ęÉjmų‚(‘¾Ń3ķ•€ :ń\Ę„©cipa’(ŁNr§ę÷®”DccŅiož > žtŒ}Z½Lųeg 盩¾dDīRsWXŃ;žŠäšŽ¹­i*Ķ2ĢÆ‘€„Ņæ<æjßų×Å_5Ė?C{„éö“‰-!‚Ģvą0­ Noį„}”„ń-ĆHcY¶¼'øÉ##š®’āGŽ ų­®hŚž“>›}lk(p6ĶĪ €=…e(‘(³ŒŗŅQŠ 8ī:¶JójōmĀR x”‰w);v÷ZV9ÜlEā½!ü;[]¤JĢyĻQ^<śÄÓ·ŁY҇éNĄ¢d§Œ®.µ§ų^!2ł%ffE‰×;ˆéŸÖ¼¦ĆijI«¬ööžB ø9źh(ō««›‹eK£|dŽ!ĄüøśWk¤xźĒVŅ®onįū^¢łŠŅFQĮ”éJž3£iæoŌ.Äz¤7R<„m8ŒҽĒ:'†_įn§g Öš²ČX*Œ»|æ{ŌXgϟ ģģ¼]io¢ßĒ&„hŠÅG™±Žx gÜW]ā_č¾ ŗ°µŠ#æ†X„ŽBļ+ 9Ą?‡Z›”ÖźŗĪ£­ßM{¬Ŗ½Ómł¶€OMuž½“ŽX/(²DćĘ;ŌĖDL™Å-n Q‹U»6ńĢ©†xŠąt&¼ņMWUæŠŪI±¼tˆ¶šŪrŌžTć°E÷*hŸŪ:'ˆm5hĪž±åLÆŸn•Š]i·ž(.¬PéŃ9hTž“ĘŁ©…t»(aøT14k†ć?•x·‹•Žłž[6š”).Ѿ…vŸA×4†¢x猭¬o„{{Wd üätō¬}#ĄÖ¶­£%±…× ę>aéEˆdš×Šō»;ä·y ŽIsXk6ŗÕųCZMĄ)ƒœā”©’“=’/iž‹I¹³Ø³¤fÉX&q’zŠģ5?xkĚķ½”ā'L3@żĪ„TŖfŠ&³iŻī—e©ii.ęęA¹Ž: æ>•b·ŗ•Œ’`n•nßģ*Ҷ†Ź'™k—¶Z†£6ƦC%…»ˆņFx÷®,Ł%åÓŹäV?0n•Q•†ĻEŃ-%ŠĮķtÄŅ6ĀW2ƒÉęŗ­nĀi¦{ūP‰lyP Ļæb>{ƒįÆĆŸųŖęžSq>­ Iż¤‚žµzω¼ _£[½ę ŌQn6ń•VE?Žõ”Ō%Ÿ3üDųqż›<ž!ŃvĪ‘~lnSß„ž,ė~²“ӆі]łAĪ~µ„„ŠžC“֘¬ł†ĢŻkR°{ću%ĆīD„ Ē'®=kƒń_‰“L“QfRvf ÷yäÖ±‰”ŽCķVŗŌK‰U Žł p¾$šäŗ„Äk£ ļ@ł~Eāµ2:-B¾³Ņķķ䐻Gœ`Ł÷Øõ_źŚŖŌ½Ö>šé@¹ŗ,|7“smg5ÄģT°b¹P=Ķ_ƒAŗŗÕÄb -w`©^Aö¤Ż†T³š…±Ž…$sžµÓjzM†įS„BLåUŻ›Kw¬Ó u<ÖFy&žéÕ·“Ļ «”¬RĢÉ)ŒĖÉl?QXės^c̵}oM‚)™Ÿr@®}x™—yy8Ē­ˆ”Œß"k§wģģŻOØ­«O ]^Ēū˜„¹ł‡L Ś23“°¶:%Żäó\@jĘÖŚāI$†Ia<›’*ōČ“Ū3 B#·yŸOJõÆü=Ō59'Ō”¶›į ;WéPämĻ]š÷/"øøĘVM¹Ć7ļŠ~„”Żi°Mu$ņīS”$p¼ō¬®[GĻ^0ńķŖ©åXM ī’`¶x&ųX"Õp$’Ś}ī”÷ ¹ēō«TĪvuž5ńU֏£ŪŪi2ƳI,UĘdĻcƒ\}£ź¶H×ööčŽ^ēdA’qėÖŖK©œ„ŲŊŁ×ĻH²¼š¼ā²Ķķמš‚CŒozČøĢõŸkļorF¤RLŁfąūQć]2ßÄ‚ˤźÓŁ+ķR¹Įø’øG©Ŗ™Ņ¤š7‚’Ī×QŌÖęąFæOzÜmz Ż9ęūB¬[HBN+~].cQž8½Š5łē[“ŚĖ( „“‚{Šī®.äū6ķېp1Ś ÄĄ³ÖMåܚx;ČĄĄž] •„…ōęibeSø1'=čöžeØ3”Õ4K—óEœESß ­ ĀO=“÷!ķ€|¶ķRähqz¾ŻS’)?w$mėŌ»eā• ‘"EÜr æ…bG)éšo„`¼²ū–Ė©,įp„ż+?S’ĖM··“”ķø-宆&€PŠ’8ÖęźĻĪÜ3’ĖYöi¦Į|×‘Ø 8'Æ  ©RŠ·&«qwz·VĖ+)ą{b±nlcŌcT–VVÉ$©Į ęœM5ŅŽ™ by €Ęē śÖgö„Šøpķ1d‘Š{Pd:ēHŸPŚšŻ³Ņ³ī|!™u’ ŁĪŠI,*“5ƒčgXiö‚į^än„TškŌ4”eIh€I‚ Ü2qߌ¤³ģk8’Y,Ö=æiy(ĪNIōƵ¾iž·{Ķ.žā$»XÖfŒ\“ŒÖ½‰Č¹/"OšÖ‘v~Ę-ŲŃĄ#Ģ~uńwÅ_Ü|Oń”ēĖl53dT’1NõĪg$ÆcóĒā_5ų‚MW·ĶĀ«He#huŒʼĘd‚hBćiĘ1čkH¶R‚'šķÅ߇µŪMM”%åØ.²#·Ó’­_¬ß üaoć-M¹K”K±‹€N lrŌåtÓäŠŅ/Ü2ļ<ęøæųY|[„O*'æ€4‘ Ž~•ĆR:Üpž‡ē&£­]i—ś„3Jū –÷;rsŠJüc7ƒųƲ4­B&Ņ ƒli+Īŗ”¹”¶9;é'Šy §ųjƂ69ĆųVéņ•Ž€[»FU™äb“ŽX.”€ q ėļ[%¦Ķ­ØI¦ÄĘ"ŽQĄ>Uō NÕ”’T2Éę  v¬„¹GŅWŚäWŗ$Ę)bYPķ#w$ā¾~ŌlÆ…ą¼”¹Ÿ”ĻJ›—© ŽŽ[o}æ2󚳈¾Żlö²ķ$Ē#‘Š.OؒźXywÖ±³ƒ­Ńæ v›Ø%ōÅļ6.ę*Œcš™JÌN“Sž¢–8Õa‰æˆ÷®Ć¦©­%›ŗī JŸQM14{ŠźÉ$xB‡q,x5ēšž½ØbŚįŽKĶ1©Xn‘āim/”‰ćFd®—ľ.}?W·‚Ą[]rxéœP>vt’ÜzÉ„[¼®æ2(z óģ&Ųq殂HSK‘õ“c\[…Ž@GUX"W–ĢIP @Ž~[čÆ`Œ,8ېxėõ¬†KgI°]ćtõ¬ ęś×RÜC•Ń‹7Ķž»«KĀ—WW®Ńł*fÉ;Tvfh±;jĶ 4Ŗ£T+?\»0ł1Ǿ;…;¾_¼¦’f±q±ų§[—[“ŌÆ/nēcņ’xäåx’^ē¦j×qI~ó3Ü*än<ż)“)t/’hh—ö7 Ŗ©ó6£?y»WĶ>,¹Y5­į@–±įƒÉ9’õVŹ$W‡o±óƒqĘŅx5Ņ[ki&™}ky¦Į,’6ŽŖ=j„khOĮ„Āå C{Ō>+¼‚EHĄć<ƒ××5•“G—µŠ»£Dą¶ąA=9Ƥ¼5ŖCyM"DTÜ~łV2fŠ% ’Zj—M„īŠ(ćl‡Æ0ńģćRū)³ņö ĮUąńÜÖ|ŒŅö&š5ĢQ¼vĪŽD”ń»?tV‹cĖ·?/µuz¾ŗ‡‚`“ķr“ŽVq•ģOēRhy KFŚŹXöMŖ¤ā½zmóO‰,mķ#‚ƒĢĮöź)§`9Łą—N µķóĻ"£š W¹ŽIćßFsԊ®dęiĆĻ-µxķ^‰i¦éŅiš”&Q ORjXĪYäƒChķŚä¹b@V$‘õ®Uū;ģ™n<µ‘NG”č÷O¦ŖDģŹ©Ą­y&»„Ky:N’9˜±Ž¤cD±įķ9ćY­^B‘ÉĖ{Ö”ÖŗóG2}øĒ9Ķ=>M;ĶrŪ}¢ŁÖŅ\2»7}+ƽ[ikSĒ!TvޤöÅfą#’ eŽ·ö8¤m’ÉĖ,ƒę_cSė*F”#Ņ ŠKÜćwLÕ(Ų >ŅźÕĢZ„$däĶCā= u‰“˜å»ŁR‰TwČķTd¶ŗ_‡­m…ķ”’”Ūæ©8ź+ -^ē äŖ!A=Ŗō°[¤žp¤Ę°“ČšéMŹG½¢ĀžI=vółŌɛDŗÕ!„X”Ęiŗ–o~čT_Ę»įšŲķYIāp]]j¤×öĖm†µvŃŚĄļžŠĮ J‘4t:]¤÷?»+.1ķšĻŌü"×N÷ŒŸjV$™¦­Ōv#š†‘¦§$öŠæ˜Ł|õ8ćśV25Ÿ†oµFx­&É+ĖcO„IVv=SĮŚżØ‚5šįLŒ¤ģ}kŠų³£,wz3A{ęÜĪ “ųz’LʘŽ‘a.ƒ40߫ʠnD#ÆKӊÅj·fFš6r į Fœš¬ Šßż@ –÷Æ!·ŃµUÕ.VöqqnĢĢ­Ży8‘Æ)ÜŲčÓ!³žG²›O5ZM“ļ*6idUS’ŻMČpśž›w;Čöļ/•œ‘Œī®’Į–·ŽDóIŁP±‘Įb;Š/fv7w“iŽkO),“»ÜWj¾ Ö|CŲÅhÜÉ»3»É “ŗŗ.x¶Æ;[““»ŠĻ¼¾ ŅZ¬dIß#µ±‰ię[ Ž[‘ÖÆj¶ķy§˜É.0UE9}:É"øY%7c§C^osŪ¬”fcŹāƒUē+«F¶wR36š8%yŖW7’±·1‘F:PSŠ"µ‚K›“!’I%PN 抣·ZĢp¼A:zw fmkz—ü#Śt°¤o=ŲB£Ó>Õwį}ÕÄĻŖĖz²mČhŽyǿ㚠Jھ6ńtŚ\ś}ŗK"-ĮŲŚĒ’ŖøébÜšB©€’7=óLŚ2ŠéCggr× ~Eą_JŸĀk·>d¶é3n rŌSVźhŻń6•„\J­ŚĻŠ•8 kĢÆ$iä1«±­ŽĘ›µŒ‹vjÓćĖp„yĶo=Ś (%ŪĻz€+“ĻÉ$HŪŽ„t:ī±lŗtLrķŽIśP3Ė"og]Uānƒb­<—ҹdܹä{UDŅ2ītv×6ė„›yf360r*–„Y5é™BÉżŌĪ0hę¶…›#±•bhUX'štükÉÆ“³®Ų”©m§ ­bĄģm,¶Ų5¹;AŒ×_ąˆąÓļŚUņÖV™4ˌnz¼šBŻyn"_5H9=ėŸž ‹M`ÉŸdĆfAւ„¢±ˆōėæ.HÖ!åœ',}ėȼKo©kVrhp+„šŒƒ{ęŖ1øF=Ī“EųS{qįÖ[M¶śŹ%„¹ūŸ jŗvŽšj°AŠł$d~½³ō„d¶*Å[?‡’Éf’YĒĢüžÕŽkŸ5‹‹4č’&² Ļš‡43Ģõ¹®Æī¾Ót§Ģ  pYMCģzbĀ!RŲūÅjĘѐŗ•ä13Ćō'$zš×²¼bYnĀĒ#óĒ7ÕjzŸ¬i“s„ć ’ŌV}³Ć<0:$Ń Ęp2­>foµĖ-_P›NTH®mĀǼ. qÓ½ky©g§É-éņc^‡ūŌ`ĪmI¤Õķ¼r&ūĎG„uZ„„…ķ›=£F"L4Š2OŌR,̊Ö`½šĶ¤Å®VRA\mś×6¶ŠÜ•a#?͆ķŠfs:[i÷w ͱ[ŻĶkÜŤé"EŌ ˆDsĆō¤JG=Æe$|½×Œ]\~%žŌŽA¬jį0Bń»čŽRź7»quÉ>•™«ęŠ„øB™čM£skšæŒå×m­Žś;O€<ÕŲNü½Ē„kėž5ŃļīŽ›{ŁŃXŸ5W™1ųÖŖHč2¾›ā:+k×± 5³›ˆĘ?Ī§ųˆ€ØĖä¾pHĒEāčģ®ž¼)$֚ŠHw„ž8±’Ö?f|>¾l’Ż$ŻA'ļz ̟h1ǬZ\A$VĮ¹cĒŌśŅĮ-”öŠy1ˆJ®I>“ÄhĆ<$01FĮxŠÓ’ś[k$}’•qÜP]/LifÆēmŻHĄnEuštŒi øäĄČ¤TUĻ›¼Sw]ŻÜ*ŽlĒĪxĒ’®­Łx’Xøŗ†ŚÖĶžŻ¦#„ŽØ“iš(³įµžÕK¹äxnU[ ¬Ś}kĻüUį9tżU/ōi?1AĄSķN,j&Ž•āøā…,5‡“ĻHŪt‹Ī[~µå×¾ŗ–ą¼±`}Ŗ‡c²šdŚtĶ;_†ūFĢFĪ{ž­ŁRžņcȗ…8ąūŠO),ö³^ZO}y/ĀŠįEāi¬nBob1Š ä{MBŚöX ǵT¹±·•÷*€wõ ’¬öŃG“:Ž1ŚŖ¶³¶Ü"†óŽzPMĪ®|č”ćęė¶ŖŁjWjp:ƒ.A?Žō U}z9-VhŌ³ōsŻWŗ½°¾ÓZ;…ŠŚcĮć%Ø ŠD<Åņ2ĖŠf·į…®÷Ā«æhĪk WQÜōp8)ÖØ©RWlā¼Eń«Ćķ=Ż†t‰ķ°²[) ÷)š}/‹<y”\GtVŽy7 ’8=Exó»géŲlĀIYœń¦£ń'[Xdy4Ż1£‘同 õÉēŽõ­ū-h©­üZÖ|E;Mo¢iĮtųäŲŲv$Ćt8Åuai7-ó(G)®åÖ-|Ž‹ńgźž”%“°ÜXéŅ#Ūš…Ō}ģ ó+Ūe³fƒwž 'ž3_UM-?¬nųe!ŌµHµ t'$’t{WYć««mBźÓL³¶†ĪŻSɄ÷ˆž½ėqŲó}?ĄŒZ¶›}5Ė¢Å'˜vĻÖ½ĻY×4M3SM>óU³ƒSš’dŻūĀ1÷æy¾½ØjÖ(×z{Ų!M+¹±É®OŅĖo“OČłˆHČł—š§žĘ¦…ln–öyžĻQˆ—‡®:Wŗ|¦Ś=üq~ī'7ČśŻź£ŲNW>mŌõI47D¼–k•\üņ{ŌŽń.—zĢ$1L’|ĄdćD6™qmk#Ėm1ČR:ā“n„ŗ†k+‹4E]ąJIĘį@¹Læ‰:õ€±Óg“ŽyīS¤iøĘäG·½g|8“ÄzvØŲź··ņłņīď’«Ų •µÖ¾¼µm1'¹å™ *‹C³Ó“üOrĖ’“¶ÜłP 7‹uŻ=B;<7œøi°Ÿ/^€ž]Ō“+}NŽ&HŻ‚gż®āŲņæxvMjÕ“{=|ˆ›ķnϘƧĆ/…ōĶ: Éf—vä`…z!ŪĘxõ Ņ2Hó’h¾ Ö¼;«Mukuq„Ł3‰fĻśÄSÉüŖ+æx]XXųjāI-#łwžøķŒńA-š60Üėskp IFD?#c¾=kÕtÆ[kīßU’kd{W1 \™[NüŠIņ—Ć’Zų?Ē)£Čį-„ķm1ł“ŸNõõ6¶ŃźZŒŽ³¬īʐGĶ@­Ōāµ+ķ95eŅLš›÷¤l~f®+ĪüUć×ŃoN…˜˜.wĮüj$3”Ņuk7O-Ö¦f±Į]»:ƒļķ^Ć źZvŸż™„Mdņå„[×ųF:·µEŲĻOńĒ…cžŹŅ-4żA"šT†ŒąĒ“÷[ņżk’]bóFt Łr±1ŖāȔntQūLcHć _śWŹü#ŖYė«tš¹Ž]Ā0ĒoZ±ØŲĶҼ'«KkŅĀU łI1éF«įoä’8ü°Ķó–ėj™»ū9|?Ó¼Iā6³fb]6# .~ŅqĄöę»GL–'¹HāČ®UļĻščg)†—wamÕėy T Ąqšó {V–ņęHžc4ˆÅU†y^ÕĶ-‰9xµ$Ó.`šUQńœŽ?÷-Äčl¢¼¶h¢f;yĒ5‘Q—pÕuX„…šįį½8&¼ĆM mw}öĖ·6ņĖø’sågŅŖ —‰õŲZ^¶™¦H×ģ 4Ģ0O¶*–”©_}‘ZiŚī!p~ļŃ“$·<¶ęūN¼»EŒfņ3ó`’:Ų…|Ė–)ĒPGÉļĶjBó=ĀÖvŚĀjBhŬє–\xć5›ą_ O%i乖)Ł‰ćŽ½ G1¤eŠūĻƞz;^^éóhzB±†É£} ŸSėßüń]’ˆ4=hZl»īf0ļ‘äpĮX{ŠĶ+šó2ė~Ņ5€æ½žĪhåFŹNÖē”Åy–”ā ųJėT·¼æ“ŗeŹĻ#øļZ8čW-jŽ£'‡£¼Šćūj*łŃ”8ć­q·?“v¤š-ޘ-¬#&Ń”h2Q}Żr+9Si#ē ųūQѼE½# ©Į)±Ī8'¾=+č’ iwÄKilń.›ā›GMŌa»[[&ĢU]Į¹é“XŚę™u#Ū¹¹ó ĒŻĒ śÖ°—FgĢĻ2ׯ„·øm3M½I.ˬe”š„śžuė>ūv…am,²4÷-ņ#8äֆrv:+MAē{„`·|g'<ā¶m„rBŹ£‰v'kfLdŽāÓ巈\yI($€rǰ"µōM.É$:Ę«oouÉ·%Ā…=Aā“†ĘŠ9æųēJ]\i¶šmKsøģ€ <zW5®xŽÖśĻbµ½“qēŹ$räö&“Ņ -3Ż\(—ķ¶ģ•SĒҲµB-ńHI`q“ńŠĶĘĮ#Š–V’FVŪ–ČĒZ³ż•ÄM»Ū=1ɤdätQxvīę 0‘1€H<ƒō®ĒMōk·yQ6ēs :Ö§=ģöŅi° į'k½T5&+ēVtlr8R)Ż›Cbž“£6‚K†¬qŸ§„} ąŻYō›Kō‚f[]Koo—8ż*$ŸC„l$ńžį›k™n§†yD[ĀĆ -Žü ď]ŗń?†¤Õ!ŽtÓ£gļ8 }*” oCāæŻĀśåćA*³dķ^ ļ]׃|9=ޚړŃļĄ!ĮÕcŽRA :¢]j©@>X›§×õīžŅō{¹¾Ļu{g§#Ädg=2@zM™¹Xā|U¢Ē¢ĪęŚsqĀQń÷ĒҼ ź‘CxŲGÜ[OJŽ]nQÕÅs‘ ŽĀWĮP5§§Is>„gŸr°Ó¬Љ„ćßź7š„$Ė"Ÿ/ļ’ōõƦųZöļKk «‡€ą²”b§ŠÕIč"ōzj¼{ķīvåޱµ „®"F!ķüUĻ)v"öÜēķvn1m6rO÷€õ«śn¹hu/Ķņ6œ°`NńŽĘ±~FŖlōż;WÓom¤óšŹ ü |Ēß5Õxu­a²†{ŹŹ\Ø8ō©¼ƒŸ=üi°µČµXV{Ź؊–Fy"ø7@ń·tøš\aä=ėXĘćō›Ä:~ƒiį½Vh„D' ŸRi’Łś}Ę —z–'܊yõIXчмY”.”öšjFŃŗ¢čѰėł×ŒAiĖö•‰ŁÉČÉĻ5&“2﵉ EM‹‡ĀżźåEĢŅIęDīœ‘ƒŽƒš{š–’J™®g~0©œŠŃ²ūeĢÓK"oUł²AéAŒ¢tŚn§ Oē źz.€o4ŻCĮśUž”q*Ln„sF€‘Œū׊Ńų.āćT¼ÕtėI-m&ÜžZ.6§'‚9ćśW²āAėR%ķ×Ćk›.vŌb² Ģ›÷:ć‚OҾ<µų•} ć¼šŻ,É>į1`ŽżzqYø…ż”4=__¹³ńÜ׳ĻgsköDV9ANµņD¶l©nŸłV«‚@‘“%µĢ7±²^:ĮŃ£ĘG^õõæģÕć”Óųłį4_[źČ³Ę×e¼É|™ąĄ&¼Fā–9¢IÜBưéō…ŽŚRŗ?@ædĻCćox—ąĻ‹™Śč+Agtnõ ?AZ’³WĘ=Cö)ż¬<ń M7ŗ~Ÿ é§jJH‰ķšXPZÕoźu+ŸŻ?ö¾‡ć-Ć^?š¼Š^čZÅ¢^A4\”b8?ˆ8÷ÆjųAā8ckĶ#P’BB†LōĪz:ĪH¦jücš“ų‡Ć7w:PėÖæ¼³” ”nkų¾’‚ŖžĻ³ißī~,Yé?g‡[u·æ1GņĒtƒę$vŻ×>ō£#žLüń„–·²FĮ.Ä0\m±µƒµ`\9ąžÕ¼YĆPĻ"?-¤uYvä-Ś•÷7“€0Ü iĪFC4/ ™”wźßZ‰n^ŁŌö)öĶjiOrÜsŚŖ¬īNsč=jć<„_Źp²0Ąlgƒ® Ż“‘YdŽįٶįŃCmÉż™’Į¼_¶ż‡ÄƄ~!ż‘¼Q®Ķqāß Źn4TŗŽ=»v{…,WčG„féŽčė[Ń­źµĶ“rD¹Fķž†¼ćÄZ^, ŽgˆīädšąØ€ųć?…’Yµ ½2ČXX_ęLćˆå+ń'ö꿟—āĆūė˜ŅāėQŽ9Ä. J0śņ:˜³9£ł…Ö,’³§k)Ā[w6ŅžN ż+˜`$wY#.½CĘ»i¾§-M9 ą Ā™¬‹¹˜#g>•Šs=ĄÄ•sĮ9śS!ŽŽYŒ~_+ŻŗAQ•‘‘Č|Յ]#SĆSÖI0J7Üš–®\f-‚ĢŪŅS»¾sÖµ|·HĘĀ|ąŲäō”Ąč„ū“šŪāˆžüQšĘ/ ßKeØč·±Ép m²OnXoB{‚¹āæ¾oŁć΃ńWĄ> ń’Ūķ¬#V²ˆšāŲÆļ£oRŒ Ęz}+ ĒCx³õVĆĘ^ækoacr‰qyšČI镸Ķ>K8ģĖܐVYHīŻ3\“‰gęoüĆö.“ż±f{ĻhŗLæ¼#“Ęų -Ż©rnļĄČõSė_ēÓ{£]ųXńƒu[{˜/l„x÷0ōlTūK|1æNÖ§»‚Yb.ŹUšČÆŗ|-ā;+ų,nļ§S4QŖįøĄ*ŚsVŠĪP=[Å·Z$Ž{ĂŚÖ Šff†ŃŌ†śƒ^&—§*=ė<)ež­MsF¦äū3Ļ<#ćaįE\\-Ń1Čv«‚6Ÿjż;Ńõ6z|€[ĖRFk¶1«ÅŹł…ēgĖõ+×5§į}ŪPKĻ–U™2ćw^µÓs‰sNAmtš•†7^rIõØõ&,«¢Å“ć#ų«xȎR”r››Y•A=*¤Ēb|Å*Ó'OznRv$³Öo.ļc‰]†ēĖ„'ė^ė ž»WxīļYøw5U;œ,Ś~d»2P)#ęéÅsöz,7;åY»’éŚ¦Żˆ“"Õõh'Ņ µ‹>j9ݑԑ\”S\ĮaÓŌvÆŌd¶žĄ˜IĻJM”ąsś&•uØIqk½;²c°ś×Q/…nā¶…R?øé­!¹Ļ(ßĀ—÷V)_2éc,01œ ńłWą»»]aŚż¾Ļœ‚yĀśÖ¤r2—ˆāFÖ¤{Ysl$żŁ^ «@ģ¦īdł†sAq‹źhhQZŻę¬(ą÷=+cXžg‚~CžJž)¢m­Œ) ĆÜŚĄ“ ź7;pk°ńæ†bƒL…bµÓ.:Ē$ˆÄR~µ¹V¶ĘE¦mkavŹĮŌg„g]ź j±łŠüßwh £SĆņ]\NB”Ō8ōµÓǦézÅŌKØJš†wØĻ5”äiN™Ķ7€īWW“M³šź;`ć÷†{güó^‰{ Żxm› ’Ų2ųō"±sģkģŃę0x~; ©#··¹xW$3sß9ÆBŅ4ę¹Ón¤1 ‰dl?:žvĢóū’ źž±‡U+4qN\”s÷[=? ×#k×·ƒķ<Ű÷¾•–:ĶKLŌ,QtÅV‰&‹s±9Ą8"§Ó<"—:l“9¢0\’9>ā˜ŽėĮpXÅynę4ž$`vĮ#±®āeͼ¾'·Ób –īFņ‘qĻ²Ų ōŅdŃd"Un0yĪ)g¾[‹3RJœ}Śg9”˧Į5݌PŹ<Ę8ē'5Óčž$¶nRH6GڤŒ:S&GCXVĪ: ō« fĪO„¤vꓯ&CÜ⟐#+K‚y %Įs‚+¦·¶¶Šéc¹FAē'­#sZŽ[WK•DJĄz­w·‘i7;“d3ķ÷h5‹G›ŽI Ł,ĖēŚ Ż·$ūÖ¶†±DL —ÜG߀™ē>&Öī®n„“ģēŹfŲ8«š Zčp"o;›ž£w^ ζ=FÕUQ%Źn “÷«×žŅīķ¤ŽŽ e+€ƒW,r*} ¦QĒŻē„Z¶¶ŗ¼½l晭Q‚‚h2·CJMģĮ†UQ¹²¾Õ‚-”„å†|ć'° Ś;n”m Śčé,–±M mģį~öx®/^šœ±Ą.4Ä ąœmK] ÖØä|‹_*Gœuę·ōł®m%-œ“Œä;Ė—š¦£eaäe¾@ė] Œ” Ł ČåvcøÅ2L›}#TńKÉy$”o’4Ś>¦“µ}!®NžžtĖą€~æ7UĻ?¾“T†īhew2oĪÖęŗ­;VkP6Žr¼ū Īālč¾Ü·q,Ž „G_īÖhńĒ1V~ ri‰“« žķR00wqR%ƒZßŲ¶]ˆvņ³^īņÖÖŁlÜĒżß3ųM-žs ŻŪŻ<&ÉAļŽš+ó Cģš;Ā–¬ĪŠęµ,š…‰P]ŗŸZwEؤUŗ`d ķĄŚ@īj{XÆ4ķ²æÉĖź=ŖFh]ų‚ę ®‘‰ŌŽ­čEd[¼ NĢÆ“äūP„Z½®ā·,`(«+¬[Ē–ŅeWƒŽ•ZīR¾ēÆx[Äļyn"šå'~n»xØoī žy¤‚xēU8|7 Ó»z”īŃĪŽ8G}ņłlpǯҬhK§z–0ŗyģ 9ć sż)©t&'§[żšŽÕ.K•īż+ƼGūKŅ`“Xc3£DĆnF=ūq\ķ’‚<-zŃė·7Ÿm 刑ˆ@£æ^¼śPtEÖt\“ưIjķ VmfY”x$ §P6^hüūh­–^0½qW šĢV¶ļ ·Ųd`v ĀꅞŸ„źÖB~~oNLW émŖĄ!Šxé@ÓeYŪF[†²ž`ć”RzV pŲEsåX†~(eė×ŃK)ß6ņ+ K‰—sŖā3=é1rō05}Sģ·’GlG–1žõ±į_¾§>­¦]Ą¬°Aę”cÜēü*krŌ;šŗ •õĀĻ4³ ƙ°W¢ŽøüCwv>öß,ØqŒõöŖr[%cĒõéÖ÷RāFTĪīOCZ:dsE ­¢Ā’Ė;ŗ+9;ō7‡—NÓģ£ĄŽßĪ@ņæ÷ÆéX¾8Õm`“·Ke[’ÄƘ£·­TcĆda<¬£<ž¾“·qĖhˆ›ܞ¾‚“ķ*ī[mJ)”h£9łEwM,’”D$©ē¦“•€e„–°³ČØdK)Īź=źž«„ZŪ£4¶ĮÉļEĢdr‘41KfX¤Ļ“ėƜF‘Šüz„ĆķNЈ¤Uņó×½gIg'dq0µ0§TYaxļē#ŠŠ%™$. õü袵Õä”Gk$ ĖœÜKø±-2’#½X³ƒĪGb›!ė^ŪRƒNŽź;n&ęG4å÷Vך}мÜ~uł½ł©­Mē³Źp›{PݬŽ„ĀēĶ^TŽĘ„}JU¶ņ÷l™† =j£™J6+xzß$døN~ń$šģ£ÓĪ™ Om1‘$äƒŪžkb,UmRÖiŻ$d)ŻĮ5^źģŲ<82˜ü­»€(–Öu7¼hķ́ISŠżjšŽ© M»¹' P}«/Ų.xÅ\1æ–Τ8<żßĀ¢c$‚ŃĖwMć>>•£y¦[«Ŗ[É+ĆźÜY)\Ā»Ód‰ÕÉo'5«m=õ¤q °K'¶mŗ\uĻćW4]B+łXĻ Śäö©o©+;}GWšö™,j—znœźUšeżćĘ@'ž•ē$Ó|AāūĖ{_ƒ{r«‡ŽĶ§æ× |BGÓd\'‹ĒK÷qÓæCCMŠuļé7M©kW[u•÷ēęxvŅśļSŌ-īļ5'ŗ1UŸxSŽ6ŽÕąbq‰ŸŅ|!ĮŌ2źwŠę›Ż’—‘ó_ÅNC¬xkĀ^`ŗ„Ū°Ō¶/śĄ„9ś-pž’OxŅĒÅ×qEk>›xd.N: *įö·=¬Ę‚”Ś>Ž“ń¦­mo­iR,öwcĢWFĪŅOO¾zżØbµ¾šf¤jÖ×+©Ļ¬DŃ9bĢx÷ÖŖJǃ>éņGŽļ“ *M Āįõ»¤Ŗc•cĒ ~uöĆĶ ‡ß<5į+mĻ©)7—’‚™3ż:cšō²x7&ä~qā†b”„Žo'}ŗ/ų6>šŖI4R0ĆŹž2Ų¬ĖėI øh„±c‘šśĘĢü Q±f+I­öIåŗ#¼AZ·­õ툷ƒ{BĘEf<ē« ķ“Į=ū™Ņ,w3}ėÅ|ox¦mNSö»½ĮD£’@ō žmlmųŸÄ ©hšUŒlŖč įĢēŽ¾wŌōō³æø“æ»7@«‘(ää֊eÜõŻ/Ā0[x~ęī ‹{õ— „[xÉČÆŌü5`ķģ‹Å,L~\`OŚ“<Į4ū‹™¦Ię{h³ĪIż+Rę=nÉŅo ݶy’Ÿ¾¬1Š~u݉Nē£ź:߈µ*ŽēRøø¾š$U$ņMyÅŻÅŌ×ÖĘņŅy-‹÷\śŠLfō°Ć\-ŗ˜v7$Šån¬£øŌmĪgB1v4‰‘Ķj$Ō5„øŠrĆ µ¶·+UōŸŁi ¦„»µ¾¹‚Ē0ć»qzkč}¦[_jp SÉI$R«Ē5£įżZ4øÕ’e[‰"Øł ņÆ5…ŒĢ?ķXao§}¦ęBFWīMhxɵ};Mmnśu·Ó Mó¦0Ø=Oŗņ'Œ¾ Å«k+k§ižn“{|ÖÜO9÷®wF†łuK7²ˆÜŪ¶(č¹ u“qI¼µŽ[ę€>•ĘųĆ]צŌm“ķ&ń, bYG—æ'Ó4ßč2ź±ZŁK«i©/)8RC7ć^žŅiƧ6„ę0»pC^8ī(ĖwLŗ§™æÉ÷ƒ0NzW'ń'Įz÷ŒµgÖō(Ńļb‹>Bƒū¢:ŻŗPW µŃ§.¹y  “($e9 ļUtżāĀŅßOĢmŅF‘·ōbs’Ö g āūĆÜĻ22Ś” `׏kWŚ”vV«åĖ¾=AÅ8MWÅ’šŁ¾c%ĀZŻ —NgØ#ó¬ļ if¢EŽ—§Ū%‚ ²ć㯅t2ų_P’Ö÷Y±¾K[s¹ć$eśGŠgœśW½M£Ś>‰exė ¹^Q‡ĢŸZ ĪKĮsæƒ5?ź”Ö{[ØöłlȦGłā®IāM#\šä7±Ęt½d3<‘ČąćŲPTby‰üms$éfkg`Ņ{OĪØÅ£NöM“³¬œew¦k{1,¼—Ŗ’mwXŸ•ńģ1é^„xgK·³··ŗ‡bFUcŻžµØ\ˆóÆč7ßŪ#M¹‘-eTIŃ?ń„ҵfŠł$ŌQļ„¤ØĻn•V*ÄŚ&­™Ė_˜Ā(ĪXr쯔Ōolöij¾©Ękrg±Ęiž•µV‘Ź$‡ļŒ}ļz÷M7Ānmmēt)p\Œģje+’nē)«k馉†ŻŪ+`„^Hī Yīnd½ŠÕ”vł2H0KēҲ6}!§E$šP³½×ćøO4‘nä)Op;ÖV¶!ڶŗ\’ŪŪŖ„Āt>㊺gDY—&™„ĆŌ./,'Uƒ#’H$2=5ńžš–±ā«Ż1¦œĢ×-!•”ķgÉĪ3Z¤}-¦čŁŚEŅ„ŹŪ“13œ*1œWĪvG‰Vśęļ\[ E\øŽ…›¦}č)h?“O Üź·śŽ¤Ś¤ĮI‚= Čģ}kkAńœžŗŗÓm“Ńe¤H®ĪFś†²“…ĢßxƒÅ>(Ń5{ź]>Į “n)ž€õÆŅÓVš…ĢfŲÜGČ%›æūUū3Ūüā˜PsÉ2•“%ĘĒ£kš?€®obćK†Ņ8ĖŖ—PŪ‡nyĶrŠźž³saöŲ#v$ķQ’­c*†±Ocń6¾Ę×Læv»£ ÷ŽA[? ķõż3ūMõ2M"i fFÉŹ’³ō„rģѝć]sKŌ®•±€,-»`]ø÷Ēį^#āŻVŚŽAq¦LšĀ«ó®Ž­ÓĢ&w^k‹T’łŲ;0•<ž+¾±Õ^ā)Ģń˱?ˆśPO+ÜĢ‹ā“Źśtvź æ`el2śTŚõ•õ¬Ė" ‡BŽvŸēA,ņ/Ā2C­?Ūd„Hņyˆ¬æ19’õWԚN‰k«ikk%¤²]£ąa{ūzÕó³v?†Ž×r[Ą±SŃy_­ajÖm¢čņj—A4h»ÜäŽœŃŹŽ£Œ[<¢ļā­ÆŁZĒOŅÕü¹v"R8?§ėXžń°’iĆ­jĘó‘“;Iv'Žż+EĀ55+&¾ŗŒŁÜĀa=p[ڹmRĪX![GW9oŗŻēŅ™µģlYŹŃŌ2/W'ö˹̯!m£žÕ—A9-!ˆČĪņéĒÖŗ=>éRźÄGi$żŚČĄōM:īŽćQ™§˜@XīÜFiś„­Ķ«Ėyf$bwŸėQĪ]1tŁ­dū‰ņæĶ‘ČWCg£Å2‰§³™ ēęĒ՚Ā]?ń\Æ ėkŽø÷åx­’ »ĒµŃĶ#OŒ&’½ījÖŗĘZXß°ųUc}ā“¼æ»¹tŒ8x”o Ųąjź5ßźK¤^éÖ;ą¶(cu\ÉŽ˜­R!łŸ$\čóéŗĀĮ%„ŌöźV=ĮKž,kź2ĆOm UhąHą ž†¢WLĮÜą Óķn5†?gTł°Krį[7Özl1„ۘšį ÉśQßCˆāõvÖęՕvy±«uūÄÕć:vƒsāb²±X-!Ē «.1;?°t<™ĶÄ÷ŲĄ|«Imā(žń „0E l³g$M 6:ØõĖĖĖå²DņĄĪć]dZģ‘Ģ ö7gīē“ķY¹t1håõ N%¾›ŹbŃ0Ź”ža\^§qŖ5ĀHvy ß0čqЁXŃYÖź3²=«°ĒZȲšĮŻé@¶3ć[„½q ļåd r9ļ^ß§k—Śf‚öv¼ĶŽPūVź(hń¹5/fö}R¦’Aņ£DpŌõÆMх“BšOˆ¼!¬JņÜGjb0Ā1ÉĪ =ŗŅæ7¼{᫿jņiņ$ŠŪĆ1UgĪ9ĄēøÅiŲJ·C–IĖsšs×ė]/‡õŅ.­5y.'ķßpØś}kD…ĢŁś£š÷Ä/®xODÕīd•®ē]Ų`8QĒ_νy$©@ķžsņŌTFkCŠų£į¼cąė«,µķø2'”0A=Éź{Węī¹mu¦Ž^XĻ[Χ ŒóĻSłW?)ÕFzhw ĶšÄšėž²¼Šo3|xcŽõłūw~ĢŚoÄ_i”$KmBŽI,[€#»Q•äńÉYrœU" _¾ź¾ńGˆ“mbŽXõH.eYĮ“vÖĻéҼF!FųĻĶėéWqŌD ²U:uéU ;@M²…'†’ Üå±£ļw@łć’*²[$謄gÆ÷Ŗć{šB=DlĄŪ£CĮ>“«>ę`ŖŗZ0Ų³‘ŃØbĒ·Uś×Óß²æķāŁö…ųgńć²\­¼µž«1U’Ō·ļ7c¶ÜŠ-Šč§vģōĀų]ńĆ?¾ųWāoƒu+mKĆå¤W–ņÄĄ€ģ€°ćדŽÜŽÕ±«Ūa …;ķozį©…³ē’ˆ ÓµŪ+ż&YŽ7–'’Ų)ĘŁČüN1łWęğE{¢^˵ƒČÖ÷Vį¹ 3‚}«™#3łhż¼ž·„> ^ųæIŃ#µ¶¹‹˜aČĒ_œ•łŚöžZ”Ž9vōäżß­vS0š*OnŃÅd3ÉésT'+ć€Qø>Hź@Ąj–(¤Sµ¹Q׎‚ÉB°ev^ i<ŅK"ĘxĒ(:©JŚŚÉk,‰ÉßjĒd•öÆŻĻų"wķ•©xĒŚŸģż®›ū².—Rš£ĢŪ”‰3‰ķ’m9Ūź+9D턺ŲIÓnõ›%°šN±m§ė‰äk¾¾.ąe‡‚Ią²žŽE}u%Ģ:­„ź‘ęĖ™cä”›õĶqTF¦zŲžś?;I‘Öś2%‰†G·Õü"’Įjc æŁwö‘×ü[į«8„ųg¬ØÕ“³dG?XCāŻÄzeī¾–—ÖČgeė~ī{u¬4%-³6ś'ŠģÆ®„¼½[ydI@[œŽųÆÕƄ¾.Š2Ń­t_†Rx“Jhõ-Zq:"šLWĪśēˆ®õ{['iR=FP›•ŽJCYó¶«kogŒ“}”Ģf8ĘÖ#‘ųt¦ų[Hŗ·ž{ų¦·ĻŽ֘¹É¼I¢iž3ÓBŌn^–a$j€9ēł m÷Į“˜š¦…'Ū#¶Į‘K|ĖŽąuÅ"Ó<Ó̬‚ÖHDŠ÷œFuSü—Ņ–ˆ®ųŲŁ«‹B”Od½Ńlt6[»VŒÜ4`ŗ(ļŠņ=® ,ī^Ņ$¼·`VUQød’‘Zs å9[UĢqØFvĻ.ED¼˜ēŒ,Œć•ĒJ•2%ر¶H|9=ÓÅWLĢ( #ėÖ¹½7MS½P±ēļVf[ė <ÓÅŗ6Åē·½tńx•-"ņ§,ĆØ9ąP0“Õ±“[[٤2.÷Ī>•īš²mō³.š$ŽŪĆŅDžnöf’g)t.0īuÅ0ŚX“¹€¶› B€7c’×^SŖx’ūUÕ5(–Ķķ"VX¶Cé\ŅgTčpxjŪQššŲ́w ķČė×óÆ*ń-Վ…įū”“]ŽGź1ÓłT“%ŲłāŁ~Ń©Ti7¶ćžü×¼h°K§Ś¤D2Dć![Œ{VŃŲę’Ō³4ŃYĢĢS;—īםźz»Ļwå1Ha-€=i’miĶbįĆŚsŻĻÖ½ŪJ:uŗÉ)Ł£r–=~•ŗŲÖĀĘ29¤iĮ'µejzUž‘¢ŅÜw©”»Ąą-ŹĻ=„Å“āf­Sńͦ§a0‘ŃąßóŪ€WÖ³4±?õ+¹RI-ˆ‡ir0OŅ»9÷O:Č gZ@Ń·„j_`øŽIHgŠģµ±ŌĖpˆĶĖćŒeė>&ū²k”ŁĆ…p£–ć^oćh²E ÓlÓķ#œ³dóÓ„;˜ļ ŽAyoö«ÉcĀ†?„`ͬĆu•Gx²ŹAR:R5,Agm!GTn ė¼+įĶ <ĢĮåVmĶĪpĀ€¹««ŲAk4Ā8cŚĖĮ«Ģ/tē¼w•*­œQa’N“Xij+Ļ ØtŪ»{›ČcžM°ž2ėX4Ń~Õķ“HŸE±¤Ś<Žø{W™ųźmbį#:·Śē^\Æü±śŽżØh®VqvzV¢¦›ÅóoHĆ0Lü*ōö7Cs/ƒHŃDĢÖ žžĀ; •d@įĮœ’U^ŠōūU¼²•„nŠ@!‡$br÷:æ’Ā1<±“Ū‚6ķŻĢ­ė^)kuu„]ÜC,…!2rI¦ŁVīiĀWuŗ &2¤ąćĶoÉw.«c ¼V•±ó`‘‘é‘Hg[į_ŚŁėBł$k]…H<ćŠWIŖėŠE5ó)kŒĒŒŠ5ęxĢ©«ŻŽO4é%©—ĶŚŻ`ʽ?K]J<̶ä…<}h7DŗÖĶ:Xå{޼ūÄRŪŌŅ$xźr { •ߝaøX· sH«œŠb±·¼wEg±ČŠąŽõÓčŽŅ„6—RĖ0y~hyF8ō•8±Å˜r%«jWSŚ©ŗ¶ķ GO„nźÖ–Ƨ3‹rYPœŽĒ\ŚX|¬óÆ ź7VĶœŠńDé“!Z̽’ōėó ÆwŪ005å.¾”²©‘>{œäūŠĮŌ-䈬!O˜ŁéĶA‰Šh/;i÷6äBņ tźß…iX\…YSÉżą‘éźh&&uŽ”43Ļ$RøVb:t©aø’ęėķ Żž„~“Ä·«Åm{3ŪØHĆc­C} ŗ,žlŒīü(é@Ļ5¹%1‚p>•z%”ØH!‡¹ Lét[eøī£-'¦xč·š’Ā9­Ē ƒRUF“`ÜŸ˜ō?„4Qå-’ƒV–į¬ėKt‰d‰t9ŠÖ‘±pKcćL’äĻ 2)/N•œ-/-^(ǜū²8Z«t.Ē©xröźĘŌZO-˜ļ,WØō¬ų­ ·Ōo/-¢IęJŽŅŽøĪ)rö5Õä÷ 1’@ÅGņ q?ŚZ•µĢ’Ć3BżSҚVFųmā]M|Cq-īŖoį(­ī^½;’ś©ž9Óīµ;¤¹µ,Ö''åźĆšFRŅüE1-Į…ŻŽжn#[ø•–)ŁŽJœā±k ·6NVsŽw“YgMµ‚ź6ņĀ źGSI+hM¬Ži6Ȗkö•P„Ļ;±^Y}uoęˆįłģ?:³olÄ®t#Ԛ±{k+:‚ŒóMšADék ¶ąØ¼€kCSÖąø¶6Ūxv3ŠśŅ48 ,ē9L_+sź+Šü-¤ĻˆīqĄa÷Øżö‘m5ÄOrČsRėZ’ty®š<Ä#f;ÓNĮc*Ķ£³TtUÉ•¬źzt³@“•2d.ęķžŌ_ X™|;v'ۘžŹW~G~õMõŽa% Č~`{Š;–¶žŲŠ‘g?½Ž2įą s\v$W7°EجV. P±ŅŅ=&-6ŅE‡+‚3ŚŖ;YŪJ,QćœpĆo@iIŲÜåõ­B(/!‚ŽÆÉ#¢żje“vŌUQĶ39H»öIöC5£®šŁÉ³^•¢+‚“Ż/ŚPPzPŃĻjŽ%š×‡%„ [¦i'*Ė.{ŸĘ¤—Ęśu§—#\yK/ §ŽŌҹŖ‰Ä]ėRŻ=ĆZ[>ār޾ł®yo5K}ęPŠå²jłr—ōóqxń^.aóDmqžµėßšŠÅo0™vć ČĶf w<ę?Ai¬Mwu}4°¼›Ā±ĪŽy­ļϤYŹöś-¼(žHVĀüĒI4$4‡VšŃ"•ćĮÜW8wL׬§wŠąģø~ī€ŅhÉ­L)t¦K›ÉäVus”*8ĶIi‹rŗ“x<*R]B15d×īd²M6Wh@?x7Qž”«u=ĀϦ[ šą.ļ›ÓMŲה³įĶ ‹ƒuØĄ§iį1޵üaäF‰$ĮU!P.F?Č©s‘ēŚmŒsݵ'”©÷Ś5čV/2*D%z“éY¶b]Ō5›[¶—'īäškĻoõ;›«Iɟö¹ü)¦D£sšĪÆ;4-=ĶtmuCLFžF[½kĢ>^ęUÄ3б8ēv=EY‚=¶³ˆ6Fäe½i™øœÄQ:܏5I^k¢ŠŻXČŪüØ$Ü“ÓcķOįšém,ģŽ×ē*Ī;ßZ‘j+4”„u rĢžHźļWaؚž šŒˆöĶb’ĪŚWŠĮ“BžŃŒW1¼D ąö¤ü‹ä%°Œ[ĶŠŲ"ŗÖÓDV¢ä©ŽŅvągҰ’Ō‡f:²mE%sŌb“!¶¼›fųeUćn8õ5#Š} +ķ{Njżõ¬¶Čv¾X Œx®SÄ<šĘ‹sƒo¬AØj^JŹÖń°°“õ¬*׌UŁģåłE|L”i«œhųƒ|²½¦į;«ė³ŹI!(æC^“ąoüLńé[Ų]mŸ"ęā3”“ĄēŸlW…‰Ķz#ö~š¹Eū\f¾GĖréW7æG‚üAqvڜ7M7’Čå8ĒÆ­z²üXųšĖWÖ<9„\Kms#%¼W ×\ņ}qĮƛÄ椎‡ķ<¶ā”¤¹­¾6x9¼¤ÅāKQæŲĖ"ĘHiÆńWƞ ų…oįżB]SĆÓ‘™ń~Æjä4™źEF*ĒŽü8ń>“”Ėāļˆž$³mZčE3Ą©Ņ@lŸOč+å’x®÷dž5ūLĶ–m‡8īk®)ÄókałĻ©?eßųHt}bMśņ;Æ -»É¾åæÕ8m’?Ö­|dų±„j7÷_ŚŽ^¦šœFČ2 {ÕÓr<ļØ{Ķģ¹šs@¹¾ń‡ÄˆV1Éy2Æö24™[u#ļżźśßĆ6q\ĖqG‰ąēŽŲưĖ}Śi=Ļå=Ģ£‰ĢŖ8;Ę>źłoųßśŌīō©āŅŠI.ÖF:b¶å[ vÕļ° šåz<ĢųY˜Z}åÕó][Ėlń"?–3ŌćøĒjŃŌmEµ„’iĶ›¬ ńϽ$ŚÜ̳£XŽźÖĶgks^̌I,„y5ށÆjp_É,lCdrÄdVÉģ›Ųé~ióßźŽ]ZŖX@„¤’Q¤C\޼>ž.Ö5{°»ó7ŽŖ ōj ÕS3ü;ā;}Mø·Ōnc“k™ް|WāķöĶcŅ~ĢĶ’Y“’ĀŽAŗgœÄ©xg#lĘ0)²^ZčÓÉbŒ|År9ÅfgĖcµŃž[ĢE싆޶æ²--ī[“£8éŅ€<]Õķ£½x­§ł9PG_„aH¦é jūŲńŸZ œO-×õ ü<·QYyPjR6×.9ٜ\Wį—ŗŗńo†tčģeŌŽņł"‘pē$ŠRŃ\żzU†į•³F·‚4%™ …ō&¼”ōĖ»–9ĆŪ;oŒ…ĪķQLĖų,|)k żį¶–ā“˜5¼‹–Ąē®[Éhy”£Ćg" 'Ł#9sĒCėZšf—Ŗ-ō7rĻ)‹ŽœŌ˜žĒgmlwyńƒ*€įŪ¹®ŠÓÅ3ŚŪµ­™eČ9TśŅJśœŒ¼aØĖ{o£i·³ź-‰%›8TNēō5ę³O%ŹjN±Ŗ^]ZÜ7ĶūØ=k t:!QƒH²Ņn§²ÓĻ ®Šū3•öĶr=“Æo|³,D².ÄÉĪ8Ļ„iv ×±»Ō|;¦ÉRŻĢ¹hĮöč+§·ž×QµƒU¾·u¾q»–čOZĪlēdPDžp¶ņ|·Ÿå ”Ä cÓ„d#*ęćjÉäG¹ƒ~f¢·7ȱżœ»r;P”i©qŗ|,‡ŽÕŠėw‰k§›G–"Ž@lŽsXš/Ųć†,ovį‰õ^ё=–¼Kr!ŗø‘`ē~xĒ>Õ_Oń ×ĘÖŅŲ:žĄ9Æ”ĢĪVÕŁu#%¼‹ €8S’ÄwŖēW¹Õ®#gxPbFųż*¢¬G)Ōé Ƶi’õ”t¦Ą–M¹äõ5ē~.Ņ5 j×¶öJėjĢȠ"ö5¼ližGxu+ˆy„ß/õ®³ĄŚΧtJnhPŒØĶE‹×f{Œš$šlrŽD…nGŹ0:W1qu-‰/‘el‚:µg(õ"HČŌhEŲóSĻLĀ³¬¼CouØAkw’9屌ņJȓŠķ-ģŪN¹ńŖÆMĖ×Ųåu Gm#&`A›™—c­“ĘxåC3['ŽŲÆZš O­> ×FŅ$„‚¹ūĶō§r\ŽŪ]Ņ%ŌUf……ÕŅƒ ƒŽÕ䚦˜°ŗĮ{o(–,šĆ”§ĢƙœŌsŁZ<޶kęļČĻ9Ådk>.ŽśG¶Į[ū«Ę)3¦™ŠxfÅÖ“\bĄĄėĮõ®Žņ$ŠÜ!>T'©b¹äuĒc•Õg{x”.#ū¼Ž®RāēäRń2Mœ©č?*qZ˜KbŚäÜ©#¹9ą{T׌œ0 Ŗ¹^­ĻzŚĘŗ6 ±¬‰(bŪøēƒZ Ž]Į‡‡ļt .jiP›+”Õ"cv‹œ+’W»]?ÅӉ§2’ĩ؀p“ćM3HNĒčÅ߈õkļї14€6ÖĄSž„×č·Ć™.<3§hwŅMęM,,®”Ļš•{‰v^-{kd{MB ģ÷ʃęņ±ŲśńƊüšŚūĘ֗š®‰2YÜÄːb”ŽIŅŗ£EXóŖKtĻešOĮķgHń­®j’j°1/“G‚Ķß?ÓńÆ-ż¤>h­įėĶhĢØž[fܧńFĒŠŅ•4…LüńŌ"Ž$ Ųd ōā¹ŲļLÖ°§–āU‹¢²”;'Śæ²ļ§mCQšv”40Ä64\qœ'æƹ øYŁK ÷éÅL£`±xEņœ>Öl©ćīŠųgö‘šÕʍ­iŚ­¬ŗlČĢғįÜ8ļ\¶6¦¬x`ŠvH$ ‹“ƒĻ5śIūųĖKńƒ5o…¾-¾’åbb֛ŽZ#¢śŽŸ•D»‘c~ |Yńwģ7ūeųoǶ—² !oć‚ö(›dObļ†Ž;°­r-ā=#āG…ü7ń#Ā76—ŽÖmRęąmŹXØ'§Lē?Ÿ„L¶Lérź{§ĆO¦[Ć„ĪvDHŲV×ĘÅńĮś–—ę¬W‰\Zį9g8Ļø³0šGńI’FųŽ ńī„ćx<8¶VŚÜoį€dGv ĶŸŗ[züÖ“ģų­Ņcqē*…ŚŁŸö…krNž‡,Åą2Ųź*E¹I8²vJŃ#ŽTĮgf“tlĮ€ļVšPq€ī}+{R•w“ą)§«2…ēę^h*/RälŸ31!Ū&¶m®b—O‘'ˆĄ$d/¹¤tӕ™ży’Į»?µĢž-š_Œ?d/ų¹¢2j:–mĀhÉ%ć\ž$ ›Éķ_ŌUŻ”ŗŒHI]q÷[øüėž¼{§šųƒĆcS·’ ļÜmŗ6^øÆ‰>8xLŃ,,®ā™¦:„®²€æźdQĘ器¤µ2”Qų­ūc|ƒāG€ĘÉ5/ˆ~µø¼ŠŻ£ŽZ&\“lŸÅøĀćߊCq±žw>$šFµįOjŽ æ¶Hå·f…ūÜA ąƒ^Ö!Šę2Nō“o©Æ ńš²—V[›UX"™É½#ö§s–DŚg Fkő†øĻŅ»;ėK™4{ŪØ#’ąĄ†@‹Ėß“EĀ]Yą××`‘ĀŖ?ØäV®Œ¶³ $ˆNFWłŠÅ£¤«}£yRFĮš{õė©šż‰l#H¬p>cҶŁ­4m2ĻE¼žõ]® ~ģ'@Žłķ^!­}šż-o¢xÕ]ĢAsÉaķJC,Ą·ĖqĀ®1]­µģ’@Žå܌– Öiė> 6‘ýŪ6w+ĶtŪĖ›XJå¤‡Óµ1“ØĪ% ±d >•ä~%¾¹[oåģ·fåŌóZĮ™Ķō)-ŻĀ˜Āƒ#t<ā½;GœĖlƒ•PN†¬Ģ§ā]*żķ£æµ…n1üėĻžt­Āķ•GĶĒJ¾[‘+[Ē p]N•Ń@·VŃCŚĮ€rxÅ.a¤kųvę;=zõu µū#Ŗ˜0˜ŚŽę»OŚ”“”£y˜J“e7§čÓ6 ‘3—˜–?ōoģĖs •R ÖrW(śŚīAą;MW 8³ņG¦ģƒŌż+å›? x©µøe»™VÖ)É#»Ž.AžÆ«ź–śŌö2lū4h­Į篒Zŗ;O‰vś\KfÖpķ~|Ę9g'#ÖØųGU†ÉnDAv2…$އŽE;ėōC¼ūŠØäœžĆųšk åY4ņŅ:Ø,=\zPk702™`Ļø®·Ā:•”Ū •²ąŒóA3Ųėµ—ū,¶¼½8Æ:žŌ•„atŚĒŌVŃ1,’l_<[<Ķå78÷õ®nIœ ŽĪÅPĢÕ»¾¶øŚO0l ė|-¶£®‹Mu&¹FąvŪśVrHŅ,ōż>R ›č¤1yQ¹ņU#oæ½v ęYsB ēvqÉ5Ķ=Έ@Śųb?xCS/”© ÓĖzb¾E“ųu«XĘ4}SU”f;f+€zu5Ųēīüy¤ŪŽßQOŸBĪ+J×Å\ūLaLjŪ c5“V†5)£SÖn“|Ŗīģ+—²®C1FtßæOZ£/fzf°K ó!‡ĢŒ|€u©|U¬ė6zzʞt€‘ŖŠćźzÓøłbĘ{««gB!¹^jčžĢ²ųzśYęc*£ĒsŪłŅ5ŒĀZݾˆš•óˆbÜcH'äVuÕŌ¾&ńŁeø" _¼?(ĄõüØ4Qčliļż• å“¶[!_» Õ9µ«hbŠ[k„™ŁŠ²’tQqI"¾š[WvA‚p ŚxféõŪ+)ŅN1ŠPf£sāŸĆ»Ū‹ ŠŽ7"UĻßnxśŽ•ņn”e}„L ä+ĮœNåņ‘ų†ÕŠGkk&öĄ?69Æ\š>‹m{5ń»hB4@D² mcךJ$^&ŠÆ“łå@¾\Qcęw‡õOģÄø–UGCŸ»He/ųLķ5†Õc–v˜°/Dv5—{;Ś‰ÄŠĮIČlõ g¼{ż9-Āå>ļžkĖ‘ž×P¹µBžRÉ“zŌ(÷.:±®\Y„[g‘7|§žĆµwžń›ŚjßdšFyd#Š{Ōß”©ėÕŁž -ćłÜ…lt5VžĪ9Y8”ō9Ø ž}«Ÿ.ęHåhĆīąJ—Kµ¦ ]æ7ׄ} sMŅå¶“¼”Fó±!IĘSü+ĪuŪ 4µ‚E’]ū™‰äŠQÄßłX,~XsÅzg‚|¹tķE$!¤‘BŖøĪÜr?/ր5įŗÓ¢ÕŹėmŖŽ|éåśTzö»}GD³h/#‘@ó‚=Uæ Æ¤źYĆ6Ÿn©"ȁe'®Ļó» 8gp­›!I+Š ƒčjÉa¬K„[ßOnS{ci^yāĻŻcr©¹»/cģiš˜²k+KK ¬j#Ž ąsŽØKoŽń³®HļH™2“·‘ł0Ū4+øócšõO j:v™įi4ǁg¼3yÉ!8Ą äPgĢĪ śęhīn¤ŠYvK÷¹8’ėTz/…oukMbXõ ł…$ēēmW0ł®Īv&Hį“N°ŗ’[ŲB“Œ§%FOėŠõ=RŪbņŽHc™ĀŌTšEޱ£Žiz…ė$ū‡Ź r:×ö‹·“šÄĶŌ Öo!·¼™abHóć#Ö“.¢¾{é”ū,gĒńP; *ŹėP³E·uPć„;ķW–WgLI÷ĢRTō Ę:-šx§ $s×'„`éńż»UÓtėÖ @óįSžēńŖ†ę“ö=’ļū+IH­įšŽé£v·-4ÆkŚuÅ­śĆµČ>y$€ė޵nÅ3Ķa›O¶¼ø“Óćymā—±ÜW«\ų¢ĘD¶…dhÜĘŸ/Ż5‹bqŌāļµ ī-.n ób7ā÷ĄÜĪņ[‰\ȓą÷5-„cc7OŠo.c[«©k’§µR_ ź“_•“aµv’ösQ-ģUŽźG‚Ņ[xœł‰“gŸāōŖZ…¬·7(±ķEčG„@iž’ę䳫IčqÓŽŗ­įö½sØ<ŗ]¤—Ā ČĖŁ&³¾Ū%õ»Ŗ©PTwÆ?÷ßnž}Bņ[¤Žvļč(°y&Ó¢Ļ十ņĒÖ°gńŸģŅÄ9ĘĄQO”Ėٳ7ÄRµķ¤3FĖĻŻśW§Å"N†g‘bCÓ=iXN67ŅmFåV2†!Č'ØØ/Ü[H€Ī‡4ŌI!¶¾Ü¢JŌ¶1Võ“åJ«cŠ3ŒŸ\õ­€fŸ„ŻLīH/ĘF; ҶŅ.nī™"V~Äzbƒ'GUŠņŽm7N‘$rW’ µƒJ­føó%RC‚{śP%Uŗ×šĀr–i½äöŖĘīchח¬QXü€÷śTņ£[_rݾ{Ŗ„m:#:H ßĢjZ¾™:Ć{$Q>v˜÷©e#Ōg"ؗʦ“o Rv+äē±ū§’ŅÉnƒ )Ļ'”©rH#BmŁ#Q¼Yį{%VÕtķ:;L’7Ź£ßå^'ųÉšćD–ī^k‡-¶ŠG +9=}){T¶=ÅĀøūsJŒ’µž·sĻ<'ńGń§;kŗÕĪ„«źŽ1žÄ}=¦Ņó/3Š(ĒųVncY-“f×ĀŠ?¾3hž+ń©h^Š-ī~Ļmr¶ųiöõŚOo„sŽ-¹ż¢ō nĪĖQų„%径’ŲCTr OZå©TķĮe}¢„·>y½ńw‹ō·Õmo5—›R’OŽyŒ@Ž;Ū„}!š+K×c½?µ½{½dĄUc™D‰·±ē­x˜ÉŻXżÆņpŖ§z6³ńBßOŌ"±Ņ¤¶’ööe“ŚČ¬ĢŲŪĄČļšż<ż—µ;’x_ė÷p­ņŽ“óJ‡ ĮĪHnż8Ɵ­Łū :Z½ž’i-/įŽāĶdé—ŗ}®°ĄĶo.iķļė_š~7ńߊ5æŲ®¦ õµŠŽą„ĻQßžuékvgV6=[Ć>-TѵwoärŪ”Œ±!¢sц+Ėē]Jł3?›§ŻÜŻ[ŽŗćM5gŲóŪÆŲŁŚxĀ¶—k[ˆ¼‰‰_ŗrG”ÆjżŸægų‰§^j‘]}ŸH‚5Y'f*3č¬*1ĆT;ā'€­¾ė—v)’].8†dČ÷Ėu=«šų[šŚkńų£ÄŠæü"vņł°DĶµžĒԌ×v_EĪ¢ŠGĢqĘu æ,«Y;M«GÕķ÷oņ>¼y6K*ŚC­©8ņŠa@ģ­EÕ泄¤q£Ė×2kė©PåÜž.—™ŠjšĖKciå"y›9#µtŽÓ\ŁĒ/˜‘3ņw6?C[(Ųä™zīś āVr“¬Šs“żÖ¦éšÜ–śV”©Ž-“:¾Ųć$’ėėĀ®Ęg™jĶg¬E«Ąļo:IømsŒ{Šöo=Ģ2Ė­<Ŗ|ĀTϵ—V2ŽłšŚāŻ™#Ž„c™į=m®õåš;ŲeĖ‚üm™­Ō‹<‡āσ,nļ.ķlÆąņxćÉŠf¾Y±Ń|M-ÅĖŚYM1F1®åm§¦3·‘ŽŅõŻņ“= ÅY¦Ōõ9 †+4ćs·ŽśV Ā[ž© \½˜’“`1䏘{ŌŚžŗr%dpW¤s¹\ņ›Ķ+ˆē½ E9©&ø gĆ…—L†ęyDØPÄ»™Nzā‚ć•×<5«źW’ź—ó‡Ō.Jģėž¼żŠk­š·‡ģtfĖUy€š!€Ż6Ō¹rßD}š>&Yź:½œ‘ĄEµČ’–ƒŌš«®|bšÆü!VZn‘`öŅĪ"Y›…ečp8?žŖĪ=ŒŻ3ĘÆüW.¶¢j 7Œ•`ܰÆ-’„?OŅ/®uĢ—2Jćåģ=«b% }įŁę”II°/ņ’¶+SO·O¶(ÅŚR§¾:Šż Ž ŅķSūBYā“ĖčĢŻ3]­ŻŻ½®‹ØŁŹ±¼SÄQQ£V,sźyź]ī Üņhm^åaG„@ćfyÅiĻabȱÜ$ˆ’¹A‚±Ŗ3”Ģoų„ų[Iš²÷ŽGž9=?ƒį¦‘āE=ķģ‚8ćĆI[–ĻQĒփ73Óīcæ€eG7ś,Ī®+­Ó¼;§X:’hĮ‘ąĪį@s9ė¶÷ž/ń в:v˜ĪŻSŃžßžkĻJń‡b±iÆ-m„wnĀ1Ū<ŌžŅu-ö;·2Į°‡'$ö Ņ2±õ†‹ÆĖ¤@uQøĒ–ŲėČ?Zń/ˆž,ūV©§Ąmī®ģܔ%S"3ŽõœbSŸcŠ~ųoš¾ƒs§£­Ż‹œŸ-ŹĒūßį_:ųÖWXÕ¬4ŻīŃģÉHKFTJ½ˆö§Č'6w^“K—KÓµėFž×Uå„<£w u®Ņ&’ņY ±žŚźh£L”†cSÜŌ8²;ŲÜG<;•†Ÿį¢ø«’²&ŖŽŅK4*ŻĻl÷©1ågāuuÖ[ ;R’]>Ś^?)zét{Y¹µ:a±šęŽĘé‘‘’ė µM•ī¼c{m±‚ĘK Ć +Ą=Ó½Uš>”®\ŁjVrŽ›˜ba’F 7æēZĮō©ŲnØe[™.¦‘ß'¦céŽ)Óo-&³`$»ÜUCp3DĢ^‡E¦Iko,śd»žP®:g½XŌ•“ioiö\øč¢²³ĻŽīģnD­ž„ćšØ|G”ßÅ„ŚjŅI· RAAž¾ŌXėŒ.bx‡Ēz÷‰4m?LÕÓm¾cI|åzrkҾ xĘóĆ6Å/m7Ž—d#= 1ŗfæÄ Sľ ·‚3ö›}1K1›ŒJUžUä0]]%Ų $ŃÄ &7uŗ]ŒĻR]怜Kg²PrŽZ°ē¹umƚ0UOD4›±ŒßS…²øŅõFkv-£N[#ļjÜūtp–!cƒ÷ńŽ+&Ģ\ŒjńŽčööŃ)hN1՜§ņ©tK)M·ĄŹĢIē€=ŖB2²;m9,Y$•ŽFwU{m6!4«kę9ź«Be†ÓķcĆ)Ō` ēWĖig-ć2äõ5œ¢uF}ĻH“Ó¬ µ–+ĖUó(W×ߌ³"š„¦‘„źÅ£[ǹٙcsśž“Ew)Ƀą‚yļµu(>Åę’£ŌUõæŲxĶžĘ·¶±nU{ķ'š³¤:“<®IßߎI?Jź“ j}Eį†ę¾p].ņZ7 r…RFėœ÷¦®[ŸsčmõDVv ,;ńĖ1ĒĶīk÷Hžē^MBƒūle1×&­Fę™ć^3ÕōŪŁįøtyA ² Ķy©±Ö®dūVķ9 ēė[(R¼ƒR†īnĻ#®+Št9.§Łd‰Q9žŸ‰¢Ą}šFÆ ¼ŃŁ^Ģžß,„±ĒųÆų‡Ø%ī£sĘŚÕƒŒ}GJ āĻ+ŗ‚īį^u:p§ ŠŲ𔁪ł·- ¦ÖŒ’(čÓx¢ŽāÖåōņ.„Č#޼ÖęK·żåāwdć¦("Q"m"kŲöDĪÉÉĻ5ĘźVÓXŗ ułƒ|­ż)5s#¦ŃÆoāƒ7!ŸžTē“„fŠA:QŹqŅ“”‘ŹI§“³‹ƒ!XF~QŌ×¢h:ōŗ¬÷ $QBŻźj}™6;/Ē6:‚2y“ł„NéX­©ŁĶs0漉‰fĻ,1ķG'b”Ēź¶÷rfÅŁćŻ‚H®Z÷Ć^Fn^eiwW<YIPF–āÉmĻŲJŽ_…zŽ—«č¾!Ńļt­BīŽ7fUćē¾pEbmŠēuÆJ–ÓE¦NĶe„V+É_ZćµeXa3#K“ü»M\CQĪ<µ*½99¦\铎\‡Ź<ēV†F–‘£:"MrńˆTē=Ūé]%ɵ¼½f…Y­¶Ž¼ęrźGqvšZłq“‘GŠ85ap%¹Ų³le žzÕFV4ägķ6‘ąĖ9®ļl­ Ås%Ą¹ó$®+ķOYŚhß m5umŸe·)+ćüǯҽjRŠĪ¾‡Ā_š™KØĖŖÅØźz”ÖFZW)“œ…?§_jŹšī§wį»ūŻWLžī8ŽÓ±d;cµw)h‘Ć-ϰ<+ćē׬4ėØņČåCī9ؾ7|»ų‰įw„ų–ßG¶“‘føŽ‚3Ę1ÉĻJʬµUµ?(üeąŪļź—¶7­Ź’°Ž£ļ/j󉣆«  ōĘ+PčQ:Ÿk®™{cØÅr,]%RYTźŹŸØÆÕų’ĻÅzŸ¬Ś›{dhŃ ~ćž=kK]åŠķf’XĀŚ6õĮČ®3ā„-ükį GMø²µ–p†{i\€Š:ó•÷=1\Õ!aĘ®¶?:¦’+kél.ŚÜĐH6äōĻҶ|'ā[ ųĒCÖ,..ģĢ+Čń†PG‘Ūt}įūNč–æemĒ9÷Ŗ«å+_)żkc–LjÄžaģ™éV¼½Ųe$OZŲϜŽEū;…Ęå<})ŖwLбąz穦8Źå£ "³`##œÕ›Såeęå;:ÕF7ŠčŒużŸ¾>x»ö^ųēšĖć߃nļēGŌ¢’śŽ"Unķ²ć$z©5ž™ß¾1xsćĻĆ|`š„ü¾ńŸ ڲL3•‘±œ6AĻ¾įŚ¢µ?wŠŁMģwŗ•²1{”$:œ}kē’x`kßh­gn’iģņŹŲņäĪrjó&‰“?2>$ųZź ]OMŌŠD¬Śģ(Ąb ĆcėĶ.ßšPļŁ÷[šwÄmOÅś6/^˜@Y‰=ö RŒ¬fÓ?4愼Jņ]Aätć½cÉkˆ:EØĒį]q•ĢmÜϵ‘% Āļ“uÜøžuvęHņ¾Z¾1Ī ZFEfU`$(Äž;U˜ŁęW(0Š9 UČ)(Ł$RŻųķBH$|±&ņ3ČéC‹j0ŹTg×jxK«4±O÷†0 żiėc¾‘ū ’tż¬u恇ĮMWW¶ŽĒÄ%Ž…1]¢Öé[ęP绌Žx5żĄxWQ—Åŗ&§.”ŃĄ’Ū.”£¬§;„ĘųÓž;€=k £®Ē©é’K­’ex“[ {{؍¾­hēę†ućpķ×w×'ҽ'I¾“DiT[«m¦3ė#=EpT‹øå.ĒńA’ßż‡›ą‡Ę(~+ų6Ų<ƙ5K…6¬S¹Ż49dsøĄūWó’°Õm–’BfädsČ#®k—tœGųtü,g97©oW¹Ōõ{ę•<ĖŪØ"D‘gå?‚š“Fŗ·šHļ­cœ½9=ć]·9Łķj3[ŪYÜj0:ĀąWłD€vӊāā>“Ęš½Õœ±Ę¹Ū9żŁ=ĘsĶmtg(³ķ/„æ-.üæ OØC5ģCĢß1\ńŸŅ¾ž“f7ļścœVń31–·×öwŠŻĘģ…9ĘMvÉćY.,¦Ó„FeĪ@蜁ZؙņœĶżŚ#Atå›§aUļ5$Õ>Ķ`#+n€¶ļzŌĢė|?„NNŖ±¤“’Mq7Ö/¦j—‘\LŅ“lqž½zV±VѬmPÓa9 Įžµ ,¦™£Ŗé_ᣜƒPÖeŠto&į¤ė–EĻēŠńŻnņ]ķīao.. {Цdémƍ¤¢9ca#ŽĢ{W±xsĘW}Ł…ģ’[)¢x_#8ČĮ­7!F•;ńV—¦E<Ķ »%¹mĖžĪkŠķķfP˜tĒµdٲGS3ė6vņ‚ŲĪzģj{ģhf+XŻÓchæżU„Ż€ļōĶa­“µ“Vŗķ'ļ ójÆÆ,mĢv@,©“ĘO_Ź©®€uzS5ķš:ØŲœnšė4ęæ–¤A¾FY³ÓėY4+ć”jé8ŠTv=ÅiXų~ŚÖ=¬hī‹“ßš©.69?éõ®–ž Kćmlg“ŪžžµēĀå5 SŒqž¹ęŖ;ŠQD¶Š w3>÷Uk„Óõéā¹tLˆ¬éČ5ŗv0pŌļæµo¬’ā-N5ņ@X‚1Ö¼ŠęāŽū[øóIå³q‘Ę>”ł˜r‘$d 9®ŽŅĪ+Ļ#tK“œŽ>“ŠŒ{“¾“hń 2ž˜®ÄZ† ×Ҿ .N@¤ht:tIGż3Ī9¬ĖK„ƒQ•žVˆ·õ„́+š:’‰õ¹lE…¬ź«Ė*䑜HćŌ U›Æ½Ž»¦±[[™ŁQāŠ3ŽƵO>”bēÅŻ-äÓb¼Ņ§k[·Ś8cķ^Ks¤źcDs݈¬’c”>摩rčVĒUą=Ķ¬(£fńøÕō¤Ž5M6Āu¶HäA8䟄C6G–ŻŻæ‰VwžFK†Iīż*ŒšF›„A§ŲŁÜł³Ūū§ŠŌ)t.Čó­KÅ;ī¾ĄØ©m³pīkµšÅ¦ž-ŽYĢ{$9Ę*Č(ųŸDҵ-ŠŚ“,ŪIǧ½p:7…®4ŻBG7¼²1Ś­GøžĘ•Ū_jÓ}–(føp Ϲ2F;X’Eł°źČyśÖʧ£Æ‡Öčт]ŗ95…®5]N; źē<(źzŹS4§Ż<#š²Ļū"M3T†6ÖŽć>qą*óņćņÆ$ŸĀ7^ńEÜ’Ģ· #&ÅŽzūÖ\꼙©s¬ŽZj³Eac,”&cÜöcM×.mī­¤LR’¼u¬™G¦Åā}\NŽģǦĻī„{’*”/ÄMBK;©”†łĢʌ˜Ī lQbŽĆSŌt-[H»Ō#ŽŽx¶nxŽAéÓé_*ųVŹ=kT»Ōć¶–-<³?Ģ0¬Ņ“‰œŁŅx–×Køņķ,·,ʼąp+ŸÓ“gÓ­LĘcå€w¶;ӓV¦—‡mof™īɌĀHU#Ö½v M·–;«Æš”I.Øö¼Ö|ĢŃDņKŁ÷Iu«:E½Š°885±}āSGµŅķĶŻ±Č36ģ‡a߄ŨšV3]j61Ś,Ēģ|į ć>µŹā×TƒT`ĄƒÖŸ88Ųėõ=JĻFҚ øaøi@É#%>•ēvvŚNo„lÖ­óaN2OzŃ2č6÷Å6‘8µFŪl½Qł×_įŻ~ĪyRī6QŽ¢™Œķ¤ń]ī¦RÓĻ}ˆNߛŠē5*Śę9'¼Ž9·gŽqA”āóXZZ]E, ·ĪxōÆ@šżķį`©6ŲŲĒŅ€/ųĄŻ\éBÜ\Ģļ)Ųv9 £×5‘”ųjņ(b+s#ÆŻŲ䜏RMvן u{'UæŃZ?1ÕG c®k“VPW²—‘» ŒŠ ^bųvĀŽąH·nm­L<§Ž3Œ×ā-?GŅZYż¢ök‚Óą*#± aMʶ2õ? Ci-¼°ā!ßgšõGr–™C§#ūĀ‚¬z+źĀ֒ĄŃäŚ6Ÿ§Ét—Gģ³!a“żk¬“šüŲȉ‡bÜ9b°2”lŒmv䙭öJń!MŒ qŸZ±``·…‹ĢŖ¾™ķAm°1AEĶHeŌ”YH/=8ŗ-~M8ų’ĒSœ2Xʁv'œ ŸŠžtŠ©Æxzśx,\;gO~µĘėŽ źŪ>Gį0sZš(|;ęi†;‰HĄä©ī+CZńóéžGŲ Œ(ēFy4(d/ˆ|B5†I.„Ó`0ĄėÅyŗ;‹Én<¦gŻ»Žę“‚Üg©ų^īY¤–+¹V8ewŽ•«©éŃŪG-Žž›.Ą}ģV@g¬v‰ ‚ņxēšĪ{–i•X¤c½;cAšė3M-Üx@¤O;ŖµäVŗ&«Ü  ¬Ag‰Wœ’Jr+”å.u­VīČéz}Š„ģ’!߯FkŅ-“]cC“jS,øĘ8ļQ+ō‰Šƒi¾_$ģŻĖ óšē5ų瓃ķ1Ā“ć•Ÿj㕏SūB3]Žæ6:žsIŌćiäßū:ž7śUArŽ"Ņ Ķ{qjÅw6B·Eö®BÖ)ķ$ˆĶ#¤ ąØ=kSS°)åHŠäJ§¹¦_Ś;łėh^4q·m±‰KKšÖ§5Įy‘^ĆĒ&»W±ūg—ßŗDūøļ@r5”fČ9¬4ūÆ-–&g’ w 9u6ü)wµĆiś¼FxŁŗ³~žÕ±ā]'N°‰ŚĘ)"½‹y}œzP^‡™cMŸSšā;¦»ķW9_̚؊K3+ālÄŲ=ĶåFŠ–0•…Š:PÆƧŽ_Em,¹ńóēų©6 6ŲČHO8J°9ėX·Æ$Ęg•äüqLŁS/iGKӁ¹ŗ6 ŒzŌš•O5ܰĆ՜ ƒó5ä=£J»M.ŹI'…”b¹ˆ®&i2"Æ%ƒgµņ3Ÿ×µė™ęü4€`ÕY­žÖŽŚkƒĪø<ÕEŲŅ CVŽķ”pĻ ›ĢP@ōŖņköÓŽ:ČE³(5ģyĶT§ŲµĻS¾žŠ¶[kyÖ&?6S·½zāĮfšC%ĮĒå$žk2œlsRI®éĖs§-Ļe$žbø}*ž«¦$ZbLä$l r ¤IĻÅę[D‘#8¼õ¬hu]GNŌY‘ˆM…y< Ņ”n-Į¹óÅĀNź 'ž’JŌ³Õg‚x&ži$f`€⬬Ó—L·kk›»fš²ĮoQPüB×īuWA2i6Qe¦ŽŪ‡•čOzB<ŪAEŗŠąœC4s7ĪLæ{n;ZēõŪ«xc;īį\ši Qw9(.žÕ)Ž9–P:{ÕK&13^NJ¢äńÓń­»µįØ ¹Üū Ü r ²ļ,<ĖŁäS°†?"Ž(sˆLĘķ,Lct’ėŌ֗>éJ¬Ē¹j\ŒœYq“ŇH®ļŲØŖśŸļ£Ž-”d^¾õq•Ć•›ž»–ѦÉWīļ\‚+µŃ/4ė=Mä+¶LŒƒŒŽØVÆH$–ęž;uŽŚŻCX`'Ԛł?]ų§šĻūfćNŸĒŚ]޶d ‰,”UŪ<®sI»Ó£)lz$Ņ=ĢŸbø†įOWC•o”ÆOÓŅ--õ[‹ghc;FxĻZ‰THīĆeõ&ŌcŪ8OŚćǟž ü ńOuW“ńsÜ%ÜV+‹0.0ĢKō š0~µóę·š'į׈­4NMWǐx^9®ēMA‘g`A ®ϵsTĤ~ūĀ^fŁ(VqäMż«­;üśļ«ź:eŽŖńx6;«Mʊ8¢Ÿęu` 1'=Īkœ¹7–iŽVV<€ŲēÖĘ]Ÿ×\/ąfM•Zp§ĶSłžÆåŲäµ½«;•Ė$£ęĮé^­Y‹ÉmK¢~āMųĒQéSNµĪ_²ŠprØ×K#É>"[Yų«ā%Ķž“¦›_µéØņG»”9Žyę¹ųJĖOÓm緃cI»{·ß'=é]ŌźÉuņųF±Æ«Į,6r}•‹LˆĶ–žX: ŸY†8®.DHyw…iķ†QG-­źæ¶Š“Ųä±ø¹øKh%ułK}zףŸšĆŚš®›wćļ\Żx·QåķlvĘŖzr3YʱóŲÉ(Ź1¶²g?ā_Öæ mt„š%ʕcc"Ć.ų¶,Đ<ĀHźy9ÆsųšXń½·ƒ®m|c®[[-ŌĘ»¼³ ݰńŽž½ė†¾.ĒŚšK‰‡6œ×gĢW³¹­ųš{[ÓmŁUįƒ3ƒĖg é_„_ ōiük”’iŲi³h{¬Ŗ–^¬OÆ~~•āׯ}č—„ž§t‹-¼%”7ķ«¤k’œŌ:„ųXāqĪN ~‡iž"Ń-ü{{į»=V#m#£Jpļesłuö®k\éÆK‘²ĘƂ:Œt먭õū8 ™i”džqŚæ'u­&ÖĒāWŒ4{Ł’ÓLÓŲ6d<‘‚qīkztśŸ=ˆŖy|Ÿ“ķ Å×7³i²jކ6 nÆå»7<Ÿn}SÆéGˆ?gū’¦„i§Ļl$Қ92šÉŸøĀ·å¶ē×sćÆ|+ń׊gŲi1HŁĖŹķņÉ'¹÷ē­}UšĻÄ~2ų|ž%šW‰ī®“= bA5¼$2Až‡¦8®*š›S•ŽCģüV«ci<> °l\Ü»Ÿō—ģ™ļļ_LĒig`¶Ńi։ccˆ¢‰8 śŒš—->g¹üŻāē,N1a żŚ{śæņC&ŗ:ȬW$VΟuÜØ²®qÓ§½{'ću#cÆ[88e¢S»8­õ˜ŃŻ"ĪÅ8S0u»Āū·›ļ›<`S®õK;«u“¶o%6ƒ“ަƒ3k8įø q×Ē'=+Ču;½BĻQT#x…ĪzÖ ĘV;ķķ38r»HϤøšŌ³M j -£q"gųœWpr+錻xŠk«{››łölXĻHżĘ>•™ā Nå5ClHuöéČļ[Ź] Ė;ō¶Hļ%@ÜrČ5ŹŽ\Évķ»üłOlō ĢٱԟM‹Ģ™łFzŌ——VÓZ½ī„r‹a£$ą(–‡1¢ÓÜł±ŗ¼\ąē­^øńŅÜJ!0¢ü§r3żY&³ākŪ(tń-Ҥ”ŪŪŽ?*ė<#wā-å„–ę&ˆĒ³Źü§ŽržŪ”jb꯵Ō‰|œļ8Åu-ām'^G’[»xn0 €ĖĄćō –,ų„ś}¦ŸģwWH“t„d°>žÕÄi1Z9/c…ŅÕ āQ‚އA‰iu§ėSŽéöh©{l»&!6®­|½ć5›@ń¶±§\]§ŲcThN:“ך N£ĮRŚźž!³†ź_"ĮJ–ǧ®kčxwE¶·¶Õō‹‰¼­ųo—¹÷¬¤µ<ā'ˆ’±uk -;ķ·Mµ§u0Ž6­z悮ģ#·[ńg—ˆF'%±Ōē®}=ź tŠłū[Õ/aÖu«[’Gē]܃ ±£Čū wü«›šÕöÆ_®¹o{vķœĢ¤Ø”ƒĄ=½*”¬fŃ×ų“Ēś—‚å>"³Ólõ [I÷T{j§ąļˆśĒÄ(µ]gXšĻKˆ³ˆ€]Ŗ@ģę? Ń= q74żJFžW‚@įF µnMs‰t+!­X¤>"‰Č-8p8z’Q“Œąk6DOs2ßŪ6éŽ:ŸZ·oį]>(RĪņt}ĒŹŹÉģõ „1`ŅįŌīļ$µ+Œįv}MVµMKĆ>0G–ßķ–W» yČ9śŠŠÕĻ„õø`Óthnķ¶Č„ ®į‘œt>ü×ĶWŚ›ŲźĶŖ,0ø$k r½Æ‡aÕDsŪ E”—včūœ÷Æ[“Ž“–ßM»Id•vĢøĮŽ‘¢™Įź`ŗiā0Ė%ėįUÅgx I¤ß\é÷2cOy ÆøįƒgNMTeaJ}Bń¦„Ķl«c#,„wĪ=+Ź4;84Ǽŗ“J‰Ü¦B£ę÷«rV37tŻgK‚Ėu µN§+æ…r·wój„ė-ĆŻĮ»åüøö¬†£ŌĶy$“ą ²’9Čk,Ōžém`øSj~Y‰äPvAō"ÓōŪķfi”¶‚iŲ!‘¶ŽG9>•č:;iöš:XYÄņß.d`Ÿ3Ūē­3CÓ5]Q“­=OT‹e—” VN‘Zn†|'ā«Hīt­$IĘŻŠ‚¾=«X³šI£ŖI ’!gŽałpæĀ}+Åž*I}e§Isa§I5ŪH ²ŽƒéTsŹčšÅ¶Õ"Ō¬[?éLClbØźr}j/čwQźwķŪĖÉBøŁėƒJĀ՞c”Ck}÷§nž¼ŗ“ĄuäūW3£¾§w⛋» HąŅ#;ƑĻ^4$JG ų½u sKš(n^9Y¾|.p=j—Ć=Į:&›qąŲę¹¹Ō̌ņHą’ '#õ«ŒGŹĪ®ž 6Š‘c•$j·D gq]ÖCŲóež wHż9§iz…óMPbA¾k!t;H5éģ'VHĢĘå=Ö¼«ÅĖßų†öåå3¹|(Ļ}„5„ŗg‡ŚK”ķ¹WČƵl7‚¬WQK‰H$Ī9ķųR¹Ŗ™ŚŻh°h6Ŗöčv“ø n>õĄ^Č×[Icw¬„.Ćr$g?̐mą±÷®SP’Ųŗ †ŚŪĒ½I™«p' ¼¦r=«:IsHåčG’ZŸ31oSŖ±ŃXżŒ33§8ĮöŖ~)šŽ‘faŌD–ń€ž’o x“÷WšjH°Lė ‚8?z»Hü;¬^[M¼ĖR‘ļ}ķÕOOē[8š”ŗjŹéœķVNJe3F­&,}äS’k’h„3ˆµŽh%IT1ģzā½'ĮśdZµżĢ›%Ēķ£ø³hÖ2Šõųuh¬ k;Ūcsg!\ć$g?y׈Ā;;é°F~j˜« łxš^‘HŠįžpGojė4ż:šmBĘYe\l!EQ„–„›»t¶QämS“sœj­gpö G-ŁéšM‘£xĀś ˰‚NT ~U•¦Äš…ŗŠ€ŽŅH3œ~µŸ36„ŗŸŃ׃¼‹ub²ˆ¢ip0žÕļ:­†Žtć¦ėvńjš9C…É žēŠõižuyŸ—~;š¬ŽÕ/£ŅķeĖpņŚN6vŲ;Åei:t:ŗ9‚źdø•6õoOå]ń–‡,OMšeä^‚ŪMšåm­D™UfĄžŸ­}/¦§«‹ ›łmą½c;_…Ē󲜻JĒēOĒ/_xWŌ4;ėĖ›ūõÜė3ŒRx÷5ņ£dg1ķp8Ż‘Ø¬ 6WŽiÄlĢå%_N†¾Įż™¼w哾ÕZ2ŽVh GėźqéÖŗ ō1pw>ń·•7’5D`1ƒ÷kR,*2a^7ČĮQĮ;Ÿ~о Ҽ?¬]kó·Ń6ķĪĀ{õÅ|óŅ2É£€+ĒĪĪŖw>åż•|Dž,Ņ5„Ž)yȒ dµóqČä݉|ų„ćŲ×ö—š§Å_ Oż•ų‡R³”’nķ a#ž™¤ž§\"ܬxzVæ¤|JšÆƒž$ų^k{ŻZ²Šš1šåĶ£ õQ„¶*qµĄĻ^ŁÅŸšVŁ‡Äši_“ļ ›.žśH5I­Ū-ĄąąJö0’?=jŅ;Kė»6€¤ĪHĪ:޾õƒžäxgŹDŸ1mÄ[ĒcšQčQeHŅ`0{H®UB•Ž+h Š®!g™óūąB’,Td£2³ ōEXF$¶²#¢ŹĢ ‘q÷«A]eF‰!'$aœāƒ¦čiŲ343Ć0Ä-ŒnMU?šnķ~×ć?ŲæĒ:ÅŌ+,’j>7RˆW—^æ6@Öµ§Ž/·åÆü¦0?®K›aå<3.ɔ”qżÖó_铮iÓĄ«‹ˆÉxˆÆ" ¹Qš÷ǟ [ [/Ż[ÅW?č—\pd)?\Ä×ćļķaš†ÓĒ ń.=›i­›Fe ø2c üŌf¹|‘2IŹoŒü5qįoPš¾³¶ŗµ¤®»ø‘3•aķŒW*,@Ķ€[Wu#ž„Œ©|²«^sĮäÓü„xC±Įõö®ŗg;cņū{”Ēj‰·Ē”P żjȐĖXՒføiš`ŁQ·‚ NŸhw‘™UT DJ×BČpsŪ½K›CœqüØ:éĖ”½„xSšĘ§”ų—F½“MŌō¹ć¹µxĒĪeF}ńÓ½v?šNOŚ”’hρŚ/‰ģµX§ÕnG“Y>m7P‰Fõ‘s•2cŽüTN6:āĻŁx’ŹóKŃõ(į1隙ĖøعPōēł]Čo:{‹y#’9`}¼’õ® ‘-#åĻŪkökŃæj’هāĀ+»[|[oi6”įŪ‹ˆ÷y7 ¤ķēžAöcé_ēKā/ź? ž%źž Öō¦“Q4Õ9Żņ昅`_x{Só­įBUüĄŪ€ÉÅkMm隬ŽÕ”Ō­dlF¬Y 8,éĻoŅæS<©Zj–p_Ć:ŻZ˜£.Ącē*2?šé†ÄøÜė•mĶāDU”0<ŽŌŪ=a½øLK±ĮĮė[Ę] eói±_Į42¢Ą…{+6ÓHKyVŻ[xØkDe(Ųė4¹į·¶ŌŽd¶TC&w.Ć·5Ä馄ę¦ķ©%ļ®ī\ ԃJćTŗ“ŗt³- qĘF=+«šÆˆåˆ\}”cv »·=k!£;ĒzŪjQ‹kPYv“ųśW! Ų搆b÷Hū¦DøŃ“ŻZūNøĘŁbpøĒJź¦Vvs˜ KtaJõ’ICœūUĖnv½†VCm+”a·īć’ÕO”BxŽęé“—Ó]BĒ»$OzńŻLI/™¤$óŒ#s#Ū„„¬¶'lŒóĻ¢§>°»’Śś«(ĖezńļWb®cųćS4ØķšŪd«ņ³ž ė^K£Ų­ž£ÖņK 'qޘ™ŽMįŪ’ŃÜž^A'k¹Ņ¤‚%Hö3óPMĪ­5‹("xÕՓ£'r+ĖnĶ“÷O~蓌ö©‘GA£mŗFŠ^T ¼d֖•ąŸ:ņ>Ž8»œ1lķbxšÄŚĻń'…o4»Ę³›lw0œIĪA®Rʞʏž9ēE’D$/=čGlž0‡X·øÓ/ķŚM¬3“sĒ@kČēžņ-Rõs)“gįżßaRī'³š>£$ZŌ‘,™}»zžÖxĀ+ė Ū†’VbDyĘī*]ރHĘÓ54ū ČėäÜFČļ\unj_Uķ¢G·‘NŃĪ3J RŽy4yÖń™wĻ'5čƒNŗø±*2²ņ­ā®#˜’tĖ6ąĻ •v <<Ч}«›h’+lJDZ=+`.hž'M"xnĊ·jxČĪ tFąė“Å?—mnĪå@¹?…Ź#|G5LJ4Ų6× Öł$oņ?*óO ėŚņų»L¼Ónn’E—tĢ”*{JĀeĮXżŅ4ū뫽žK€QžŻkęoˆž3:n¹VÖšĻwę’CŪĻ\ę79ojļ~ś’źh°<¬J ĮWAœ_gނǂwhĶĘģć|EØj2fĖN¹>TØPČ®?v}Å>ßD˜ZB^ąLÅFįß4+¹čŗ“yD¹¹XžB]ŗūWUć;=+Aš4–ŗDjš›·—gėœ~b­\®SÅōĆ<žcÜ 2œf ×“łfӚXo& “?z”ÆŌNsLצҠ0Ė”e8\žžµźš~«6§gpӷʐ’ūĒ<ūL¼{‰īąG‰ ”'d’….„Ø[¼Ņ¤s/EDė4-Fhģqc¦AĒ V=ÕŻéIC‚²düŁĘź Ž*Cā+Ėy§»¾Ī PCdzė<;¦Å}`«wp¶–¤1RrqŠSK±”Ļ!Õ¬ēƒS–Øe‡BgćŌW]cq&“ \˜ĄĮÅnAŽé—o1ŽX…=}EWÕüEuż®›L»¼¹H`6ūā€"¾³†ć- ¼tėU­!¹ƒęW‘6Üt  ł/|ėhļ$Ły㔯Dš}ęŸ«éŠŻŚL’@IÜb8’RvÓ%ń%œV “¦Ō$œŒWŒGy¦j·w `©)Ü~dčj9Ēc+Ē6³ižžhÕ_yŃ!Ćm'“łf¼ÓSšģ_ٶ3µÄł;£Ē øłš„ ;ŸĮwwi1Ō F›N:äzVĶŌęŅä+ī?Äœ„iO¢²iŪik råPŠ’¦j‹xVźŅ䄟²±ĘÓŌ̵ušxy ¹Ų‹“Žœ×#āż-…Ķ•Õš6åMš õ¤h•бiéޟf%1†\‘ĄöĶwzgŁtyjeó­Ü‡ł»oĢŠ2ōZŽŸwĀćd}+ŠÓü8ŗ¬Ļqēf$žI§chÄģ4źžŌ`Õ4Ė»yRkž צi×z–±&œ'Žr›†C dzSq/—Ŗ1|A%¹·qöˆRe8ŚXŸ„pŗ_‰ęФ29 }ÖļC‹ŽwVń­ž”u˜P@įš7q“g®kÕuMBāM }6ō=ė*Ż=óH Zf‰ā;}<5ĢÉyócØŅ›¦ųŠ[ķu†Ż”0Uė‘§€8Ļķk/ż®ņåł_#ĒĪI˜Ó,®®¤š cmĶ_čÄ”’"йŗœÖī”§X„ÄwjæépÄuo­! ŗ²ŒFŽu·ē qŸjń{ųmFwHÄA¤8 ÜPiw6mōŁcEu9ĻÖ«ėšźWQYŪo,| sšøČŃ#OKš|šAŻŅą“·g„ekšĻˆ4i&°“ø6ŗc…É–Įéō­Ź‘ų•%WYć‘ę8ĆvϽ:ž¤·EnĻänÉĻ<†3G[āP–wöČnw€Ņ¢ŽPšę/,¼ƒ"ȋüC5Œ#=ąµi $‘*·'=½ z³xŽŅĻĆļaä9–UĢ=éEt<īŽBѬrwÜrGńf±Œ«q#yL® ź)Q±Ō\éPéVŚ£źß(U·ä>µŻųį­Ž” iŗĪ­«ĆkÜ„L&X”ĀŖ+¹&…ü?kouq„”k°’œJNI®ćÄŃu X£™NŲņŁ'Æ**ó›M>Äj²ZFYaL(|dW±ŪčV÷ŗZedˆ.ģ“€wĶ=’ģqvöŚ=¹¼‰›Ģ!HS»Œ×›Ļf Ō×Z c`v…Øęw™-ā]Ü#Cjš¢|Ŗ˜Ļ#׎ŗßŚ-äŻKhć.ToĘ8Č.NĆågRŗzC˜ß S÷½+Vń5œ–įä—Ū Ø'„“#³k@!˜¹ĄTWTĘ#—ļ})¤M6ŗi­ )×nµĮų³O’Xm&’VČN3Õ©ķ”P}ĆęgŌÖśņrŸuĻØÆG¹ń¬³²Ćtä“÷‹sRmÜóø5]au뉖ÖJX䞞ƒmGy¦^«Fļv •qųŅqA*g=ą[ ]BžįµŃ{=¼#s”ćæåR¬ˬj±Xż„¬RLÅæū“ÉQ±×Ūé2jHmĄmÉÉō®CTšØY&ŗó™ŒÆJ 3BŠFį!<×5³nZh×É_™x9āƒE-‚“P¶žÖ–ų6ä(Ī}ėœ“_€ļŽCåžrqŅ‚y†¾§$:Ū•‘JćÆJ4’4ėSØĻp3÷öžqAQīCęAؙ"8#ē|ńϵfKć$Ö ,„¹…N Ļ\śØ6Œna]XOā-f[ū[YlķŽBn<µĶt³ųOQD‘lę†v_™9Īh-QdzRß[N£S lznžõŁźÉ<¶¢`čbTĪGJŹE{;}róJģŒ}kCKŅį»B·°dv§Øoˆ"ŗ³Ō&°ÄÖź1Ł$פü;š6y źŚØ_1tRą śœÖ…ĘĒ”xŚÓUŌt½śĀ{>ŻHńØ3€qߑ^XšķµĖ‰!/üø'5œ„Ų|¤:€Ņ5 g¼„ķu=ĮĶp3M=ĢĶ嶜(ĶBcTĶxb’Łc[‡ŽķĻĆW<©føc1[”»ŪC“[Ø4»D€ŁČu6*Gm­»³•Ņ.ø$į&ƒ&ĶŪĖwšÖĶbXfF!rN¦kŚi“Óc†Y••*Ļ5åZ– ŠøV vž=jõ¦Ÿ”n·nä9.:Õ&TQ·§ų~Īī'ŠįĀ•ŒņµĀ>Óµ‹Łį*Ā+f,$qĄ#ŠÓ±ŖŠ4Æe›Kŗ™&ŗ!ŚzV†}Ć,— 7˵œ”Ų—lĪ–Id)+”8JšoxrńH–8åŗV|O*=i4‡9”ZOü±IDW©{mžIā_Śgį‡77ŁüC­°łem.É„Ž;–Šō/ x’Įž>ŠōŸč2JleC·ĪR®¬AéÜ~u…LZGŠdü1ŒĒUTp“Üäś%ņüĻ:ų×qāļé:/„5yķōŁ›ųĮ8•o§‘āÆ|ń?‚ōĶUų'įwÕ¢‰c7Ģpą æ98õļ^]LĶ'”ż‰Ā’Eųż^LuG›É-W„Ķo ŁZéŗl1ŲY@‚8cCĀØŃĮ¦2G!¹½»Ž»‰øŽ=½ĻéšĖ)ŹģštTdŗīž÷©^ßJ‚4ˆ}ž Ŗå“ |¹źEZ÷nĄ•~k9W?Fö &wˆc}Õ.U£·UÜHŚ3ķY:ÅŗYĆtÓ©ß÷Śō¬}±óG5©ų¢ęĪ6‘ \: ƒ×Ļ߉ģßU’Ę“ló$1]t%Ōü/Ē BŽ_Ū^oўK£jĻÄėMNh|» ’+É!ą)Ēó­ļķE³–[+ ›VĖ|Ć=ó‘ś×§”ü“U¹-J÷J/,5 ÕÕY#Ļ_¼sXŽSØjö:E݌›¦™i€<žG›‰£tzļ‡| §ń³OŅ.Kźšv•|ŅÜø_’5_½_ö€ńÕׁ~*| ›JÖö³¹Šś([!£‘öŽ’v²Ŗō>yRŒńōØõI抇ö¹°µ“ĒžōÕ{A¤™'šD ĪC‚§>ø"¾”ųc„_ƃĄųyćū fĀ'Õµ[k ZÖ0’ĄĶóL*Jūó_‹’“Ž”ŽųŸā«I5ˆµµŌ χ—RI=Ѳ>2µ-l|ż£ųVńā)°Ah É9˜`;{×¶KąĶFÓĆŗ‡<'yyq¤Ć*ÜĖo½Š‡źUGNµÅ^±œhw>ŒżļµŲ©¦ßź0xjĶ£/'Ś" $n¼‚>ø®'āvƒāŸų‚ūOÓuUŗ:ŒąI;¦ įˆĒØķļ\ōUź$β”Fx‰ķŪōJēŅ^šī‰įÆ éžŅf““ČH±¦>oVć’sZŅi‘d‘‚NOjż %¤ā\v.uėN¼ž)6ßĶÜē[JŽW$“Ć­Z·“[9ßęnąq‚+SĪŖĻG°“x¢Śr°äU+č,`IˆkĮ>“SÜć®ä1#–BČ}GZ«))0 ŽĒµ·:‹ĶtŅĻ”8ąw®ÓĆW×V÷É/ņüĶ“é@XÖ¼¾šįÜ"˜ĮlՋUIm䉿zŠ&Š7Z“;l#€ śŠä<[ Å՗ŹKø 4 —SĮ56ēP"Š)ė–8ūøŖYG¤‰ÄAМP'LŚŃõ—“†ęŻnZ%`ƀĖčE`k:e¬³Łėš|HˆČūLƒßō©¶¤InuØæp¾a±ēoæ½hxfŅņęāńnd…-Źe›<ä/ÖØG=⟠ß__ZÜGu/“ģŪć"OCųW›j -³Éż”m½ŗ6Õ|äžŗ,^M±Va×ŃĒqķ^Zoo9-“Ķ&9Ü Ą׌’* Ņīg[I6г\4’hvĆńƍGāƞ'ŅBź6PŁŻ&]$XĒĢż‹øāƒSÅ“­6;k»‹Xå…'c³ĪUĒ–3Į®ć׍üiįŸ·‡źõ¬šź8D°Å‚ù$’įS&¶7Q±å? oåŌ/-¬nc›P¹•$™9u'ė_XŽ^jŗ®Žŗ~‘§Ū[“.$“°U§üõ¬F|’Ŗxlj>&Ÿ\Õ¦µ“PϘ˜mˆōłqÅY—X•£šI̧'’Ž“OsžÕ—QkY&Õ¼£ ł³÷®Ž;} 4{Įo*y_4 ܹUóĖBæĮŻWNƒĪ³æ¶ø†9Ɇ^Ŗ¹ćJöu}:?ŚBc,¬ÅøļK™˜ė.ŖŚ”’ķ†Hw“ņ ī\÷ÆNš…“‰“ķJńī ]@L·Cd³ēŒ¦kqž=ń’ćl šÅžƒØß_źP³ł±”ŪœŽŻ?|‹kyuŗeī§`ćkF°JČŹ}p?­3HĒ©ėš|Gńāiś^™y+ŹČLÓÜ·Ü8ē'¹8õ¬ĻųŸĘZ¦‚Ś„ėy[·’¼Ō}ąķWSš“·7'‚f1p¶pŁĄ$b½™&Ņī ‡RšgW)aĀ‘Ü{Š&Š^(ń<·Kmě$>aĒAõÆ5ÖmōżOOū Ūæ›!ĪšGŹ+™»ø³Št»ßųĀŚ%ŖE©Ž9%¤ówdö5ēö„ś…żäū!†b H`ī}ŖyÄs—:sŽ@.t{Ųćø’vÜqļMŌÆģ“-ņ^Ų}®ģ É©Ļj°6›Äśn£¦-ŲÉö’|µŒŒŽäšēwh$Y!mŻxŅĶõü«Ķ®uDžYŸĖŠēOÉĄ#poJ®vsTGŠėQ„Ö©%ż¬[0į@?vØĒ©jrĢŅŽ Z =O&<½Ķoų‚[Kųē‡wš»qžķÖš\O =Ó89ōĶcŹīU‰ĪŠlōūeÜmó ²ē‘ųS,üo¤XĖ sŖ©#ļóf“„Xķō=kMæœÉe8š"HR§=Åwś¦””E„ lČo·żā2¬}½+NV€ņ½mõ)×T±‰t*±ąŒćŲ~ĘĖ„¶³c{w<Ģ÷ ä2gsޤƞ·ƒV6³]ݲĢ8%øVÜz×·ižžĘź1d‘Īø!É<’])=/ĒŚÆŖÉ¤6Ÿw4B)¦†2@aóÅtžÓõ°ū5ä2Y.GĢGŌ‘łŃŹD‹šjvr@ņŚ0L;ĘXŽXA8ŖQÅįCaykCZó<’Ź>§u!Ę]-×£Ō–ń.Vvū2Č$ OB:×£ioi3Ģ.ČXŲĘxČ4+Xój°Āómuw,Fģņj’ƒ—OՓːÖņż­\ˆĮ^Ųüi7b'¹ŚŹšéVÉŒO’I'ŒoμƒTÕ/ŸY’ Y¼Ų·üÜäc“œū;=nó[¶ŽōCåļUl€~•ŌŪźVĀh‰äu=fŻČäbG1¹Ä2¹1žµ×Ų7Ų¢S÷~ā²—`p±™ØO5ž&·(Ņ1݌ńŠģ<+āY/TCĖmŚNG­Lcqʕ÷:}KÅ÷Oh4ä‘D€įÕ?‡ę”Än/b¹HeĻĖ“‚­h£cŗRŪÄwčćR/ä$īƒõص™&±±šõ§i%*GĢđųU«qG‚ÜźÄf;™Ģ͹tWéōéž»½“¶y%žĪA#wQžµ±É$zŒŁy1^Éöi² T‘Xšķõ‰”‹öēÉJ ¹4Ō,绹9$£ø>æZ¬“&œ‡ĖĻž2Ļ"ƒN^†¾›r5(Y³å.ąO'žÕ·„ų#Oøž‰!UG|Čääć׌‹i§čz,ŹŃD’ÅČPÄo>õĶŖjś¦„s5Ā)¶Üžƒō©’Šiv;蚌^ :“ øŸå?»ķ^c'—{2L²g¬¬>‡gxŠŃȱ¼Œ P1Üb¼ņāå•”‘B üČGݤg7ŠĪ‚å,„PĶĄČĪjcpĻ#6Ėźp(2=Ūįżõ«ŲB©o¬ŲĆ3`³sŌzWoāŪ{g@ŗµæķą#9łҶ†Ę°SēķGį֟Õ¼–KˆņĻ>aśÖ„ńj±O5¤–Éolˆ2;cŠ»›8éq‹¦Ē'ļ<ņ5?„s~!²Ź*ŲŗŹĪ¼k9sxnņŚ8oeøo“ƒø==ėg@ÖĖQ€mtgłw/oƵfŠĻ”õ-3ĶŃ,ļćXb“hfÉ ÷"øCS·],Ćö(#¹‰IoÆj–‹ē<åo$ŒrFrO@}kN=FŅ4c–Q“t<±ō¦Cg/yØAr÷_ey-ŲĮžZÖk!¶@Æø0Ķ-ŚÜOhĢ”7ĒČĖ/ݬ«ķzõŒvńF‹“pą`õļK‘©ż8xJśēM–…–ķ£Ē'¦°˜žUšÕž«Øč—š]Ł­ĢRķfģ9ü³[­43±}uÉ5{‰?µeĻ$‹"9*ßē?­~ˆ|?Ō<3y‹©ŁH×+å(5‚yŒŖ7ĻJĘOCt›1>$Ž|/ń®®xÄŚMŗė–č÷6׸̐§hĻqņ‘_~0ŃVÖée”¹².~mĆ'Šńō¬Ō¬oŠņ¹ÖS3I)Ī6ŸLõ­­\ŗšĪ­mā+IvJ£©_¼¹ģzÖɚ8ö?Xü­ĀC išĖ3ń6±šóÅś?Š4ŪEēiŃ×*#īIģ1_lüqїā.gć2ŚŲŲ][yrœp¤),;ńRõ:Ó±ūĆ’ż§ķ> |(ńOģ½āBŁąŅõ«/éV·vį7y@:ļc¾ųóū„b½7įÅÆüųÆš·ćw€ļµ-?Ä>Ö¢ø+mĖMąXw ¹ ŠtBGśl~Īü5ūIüųwń›Ć·š]išęŸ“ į­ī€Čžł ŗšö}Z–1“bPJā« l3ē_‰^Ó¼MŚ¢":eź|ĀB#öb{s_š¾8štZxÕtżFO6īĪCgs RL‘„žü`×7)ƒ?™Æų(ēģż}ąĻ[ų¾ĆL­˜ø”÷X~Ÿ~Nj,·%Z`Øæ.ŃÕO½tĄĘqe]ŠQČ}j³CåEˆPyD“’z}+¢29ķfSt“a\…nę’EΐōĄ9ļZX°³+Ęv0`;ÓžŚńķ.“z~“Ä¢Sš]Ųo@xĶHł‘ĘļåM;Au/ZŵT»×Äd~5üxĮ~?b=cĮm’jOĒbž ×ćY&Q߲ݨłÕ¶÷lõŻ\-ėphžq[Q”W‚C ÌU’ľ½mB6ŽYšIU€l˜­9Œf‹vvrAäøŽ‡{aż+Ѽ3®Au{n/ƕ‰†õ' õiŲ„ŗ#¬ń»h>$½±žĆ±:\0gs«ååė×óż+ݾ xŠŲ!š„ÖŖL;„ؤć'üń]äÖć”l}{$¶ņ[ŁČ-€Å®¢ÖčEff†E8Ę;ž5“]Ģ&Ċi"¤Łø‚x#ō¤‡{Ģ®ØP°ČĒa[S9ęĪ{ÄV"\[ŪóÖ.‘¤OmqŪ"(än­”™6;«ķ:FÓ Øć;²H®-u'· ‰÷y'Ž”„k›9&Ō.$ Ž8Zd(Č"ŒĆø=EI¢‰v-j]"īŽh3Fr ó¬™õĖ‹›Ł.Gun ž)'­Šå4.ēÓŅ-ĮIŁ6Čž,ö¬ˆ(bv»ōĶ\Lš4“mFQ盀Īøóąq^ƒ£Į£ėā[·‚ĪŽLą¬c±[ƒykoc{<Öę8åĻ$½Ž•q}=ōŹ˜ącfsŠUqŖZŁQkžW< †Ó\Õ“éŚH/¦sǦh)I±MNžd¹·†ĪXL÷Æ[ÓĒ•ÓÄ®bPć°'ց3UԵ˫ˆ®Ż$‰”džÕ Z6ĖŲ³$ĮČ̃A<§9ŖųŠōłe8di601šö_č7Vž·Ön5dū톐±ļA6Ųņ?x‚ÓU†sn‚U$§‚+'Į~¦¾t‘Ø»ūž¢šC³>ƒŽīŹĖLŠ Äf2|„Ī=ėŸk,]¦·;”bHĻj¾‡yl`ŗ{Øf¢ąœ`×;n n’¼s ?w=+9²Ķ?RH®fugx”aŌļ<+Æ¢K};†Ąycžźk!›ŗÆˆōłįk† a#ēŹ|Ēé^©D%y%²&ār}Ķ)2ü7q"DAte9lWS­„ķ»Ü"žųŁ#­‘w5ü'¢Lś„Ž ēlqɹHć5ź>,¹·ÖnJŻ4^dj"BŖĒn” łóÄžÖ“ŪBŗZÉ|Ū™Ųģ=śW1į»5ÜKł`:ꁓ^ŻĻż³r–‹ę`ń‘jõ*īī-69ŁPČ#;K.GåWZ#ÖÖ'Č±LXpNIÉō¬éōūm8onl|÷³ė@ĪöĻP±µ…į¶XŚV€zŒÖMõͶōV ±63žĘƒY;Ō!³š¼ŗ|bÜĮ$¢FIńśÖ -īt-Ō=²†VR¼`Žj¢ģdyŽŖÓźG3[¼›@Įx"“:|0`Õ³[ksOI½Šf‰bÄ«’§= įļu .n§ŗø€[J Ėc” ÕŸįŲRśÖ²ÉĖį4ē–+6žŁeź¹ō¬å&š4Yt”rŅBā#‡‡8$W®xŖĘĘįlō5ū5·(ź0M.FRv _¹m:KYŪĶrĒę<å}*ļ‡u_ģ»é£ŠĶ«ėצÅ)›ŗ½Źė³ā)@§1Į?…UTŚu“{. ķæh¾h'v{7…t;H“Öóm”]9=01ĶgÜx<^kōŁy@Ūå(ĪOŅ‘¢…ŒØģÆ,5± ä‚d %V«ńėśVĶåõ¼ŃŖ¤‰"ÆēAG5«^LŚ>¤‰<–· ›’UŪQ^M£x‚]v‘žć€č>÷8ĶuWvŒ×ŗlöÖå# óóÉ8ėŅ©kA„R¶źĢA wzŠŠ\čŠ ū›Œ«/MŲéķ^æą;DÕt弌¤q¾0Ķ4ģkLļćÓ^ČĖū–”ƒ•ā¢ń†Æmü3Øk6®4»µCåHĆœōĒ­h§ÜŚ2±ņ¤ꚦ”fڌ×sj*HC‘–NīšV„\ZĶy©ČĮ„dlĒŽlp |č–īxŻķ²­äŠŠŅ*±#ł®ā×WŠĒČß!YŖŽµhGU¦jz“NÄ\³±ĻO»\Åē‡Ī­6”%ŻÄ­ )·ÉõĒ­ b…Ÿ‚ol ĄŅ–bÉwŚO>õŌé¾ó‚M~ŽJAć¾(qH,ŒĶ>ń4}F[9įan!­ŸŚ}–ŅŪT€4–M(Üš#5‹Ōān$†įęU.6n=q\ޟ§Ģ\¬Ē.2}(5:)ĻŁ­ÄŽIEEŻ“‰`3„aƒ‘ĒO­&‚4Ļ1·š¶©s{eQ‚ĄōµŻĻą‹…“Di šżŃĮĆT{3HĀĒ+ö/±\­¤ł嫲X]6µ§HLg^\ĖRåe8ž{ÓōųvĒ•ū Zēu‹½J[XŽ;ˆ`W;6ņO„TR" šÖ„&Ÿ:ź’Ć’Œ¶Ģ|§ėPŽxĘ}RI¢‰Ō²ü²Øž{SęFŠ1-/-må‘\[œbÆĻ«\Og%•¼Ó˜`m=ØęÖĘÉXĀšApg’ņįķž'ņĘóĆßüū× ÜÜi6v.fŽ=›v)+‚ĒŲÕĮŪŁi:|’“вHĢłėÉļZ6’,jUī'8Ķ&ĶČUš;Ā’ĀĒ”ƒżhL‘W- V 'ŚöC¶ÕzÆ~ęØésŻ>”Ü1ŲG$iXļõodd2&ø<ōÆńÕõž¬“ŚĪŃY T÷õ§$§}į¹ģL§Œ8īźj·ˆ®|.šĮ0I[€];žOéYņ³hD“ĆŃé>%…”RŪ\9枕ĢOl4ėūĖ$LĆ#,»yĻō©EI\Ö±–U·ø·³/ L6ī^3ģkKĆK½ŅüƲ‚ŹW?x āƒä—Ö{Ń)ĻĪĻj­Ø\?ńĶ!o\w ,y½Ō°ApÉ;;ØĒ×u¢‹e¶/(>k ŪXPi÷s„ĄHŗO-77?ķ ’’ĀZT––3Å$’üŲ¹^qĻåA¤ ®3Lš$YŗŽ;©O™ŲńÉCVīü0šJ}ŠIŚęE §xčqĶR‰·*9Ė»&³ĖG‰z‚?Š«ųgNK}CķS[Å,„ōq‘łPՋ‹³=.uÓģŽį¾Éä6.O„s6—_Łś‰]¤Ż0ą0č I±«āhÄńŚOymmįĄ7pZ®°‘@¶āqåČq°JÅ¢\ŽLŹņ;bqŪŅŗĶņįtė»(ŻZ~’Č3ĮģzŅF' ā ½6į&heņ„•ŲÕwMńüČŗt ą2HČĘkrŅhöŲu];Ćzu”Āxe@JgÄsĒl^U£čVėā‹»Kåš'ČŅ8Rk)FÅĘ6: CįłÓć½ŗ°¼–źŃ‰Śųk€‡G’9K+Ą÷©,‘m;¦IfČÅu¶¶ÆfQ#ēå$v­bśŠõ5ėł&W…2&3¼~5éZ®”įŠ7ƒIķ6—-)?+.:U/C‚Ō5 æ1ŚR" Ā++[Ög8BĪĖ€zõ44g(v9uŒÜ˜ŚAæ,:Ž•»Ø^®ž!XÄSŠŠą¬]Ņ„’öw½C!@ø t&½Āž"f–m.-6aåŒÅ0 wŌŠhdxĀd¼»`°}˜(†>ńõÅÉ'¶)¦¢0ć  G]įūØT·žVņ³Œ“ŪҶuˆŽŻx£/k»nHā”ĖAŲån$·KuóOŽ vØ#×Ió>Äę&a€½fS‹2ļõ[ų¬äŌ®[ĪŹœ°8Ś+…·×ē. ‘ĢĢć\šå¹ėٵĬvہ›|µē«9nĪcÜzŌJV²e·0FI’h‚õäכ|\Ņgń§„/¼9¤ė2i/2a„‰s?‡ńĘ¼ÜN%Dż»ĀqœA‹S©2ŽVŃł+ļ®’šĒ-ąļ ·‡<>ŗƒĮ™„G(Ł“'®r=Fkø¶ÓtĻi–śeŒAl¹p€O\ļ^#äĻō/ü6Ądtœ0Š÷žļÆŽWd-2›ĖŻĮĻ„TŌt»ų|;ā/G§KØXiŲūBB»™TōlW3?A‚š'Šæ¶“Äńs-†ņ­¹q°G>+Ö/ēkˆ#ū+²Īą3MJĘѤօ1 ėKC„Ąžµē^;&мMąū‹Iå·ÓŽé>ŌOÜ ø}ļĆ4„&iRč}āĻĮšžėQš÷Äχ±ßh ²ß jkƒoq¹3°žĢ3ŸZłGĮwzwˆ'ŌtłķLA#Ē 8?…8ĖS:”;œ—‹5„L].K;X¦YXyŁłŠg„|å©Ū,ŗ˜IfEŒą4Ē«üė×Ć-åÆsėŅĀ.Š’~Ÿ”ÉŲŔŮŁ&£sqØhĪī Øø,LV·ƒ“ĻųM5ĶOEѬžö(‡«“ĮÅzp}ēéaļ±Ä m|7xrėM—M2DBĖŽŽ8?zoƏŅ|'ØxsRš%•ē‰į“c§jQ ĖmœuÉ­.qbš2älõƂ:ž‡į³«ėĶā=S7WS9ē ü>Ątü+Č?ioA{ā= ‡õZÉąeūṺvĪ²Ŗō±šł 9WĻ”WM>ćčߌy-µ½sįv›ż-ļŠĘn!FąåG?#_BŲųsÄž±Ņ,ŻĆÓ>ę¾ĖųŪšŗĖĮ?nVĮś’:Ź‘õX„›~#‹AmĻÄś¤öZŸŪa“d\ÉnĄ|¬Go¼>øÆ š’ÅYü/éZ†”.§¦Fę[{tO•qϵtØ(£ó<ĪMĶŲņüQńU—‰įńE¦”{g«9²HB8ĪG*ćųĖRńćj¾#Ņtłõ™{ÜcqŠw¬*ĖK²¹×YéŗŽ¼DĻžĒåUč®+é/ƒ’ÓF°Ōt[ټ¹ē›Ļ{ŁĻś¬H§å^=y6ō””Śü@øųoc}}¤J`M2Ēl²¢÷ó“ĘyÉ#ņ¬…š ŪxaoüSh]ŗ;įmkxÉąØÅz™5 JŗrŁ—x·ŽXl¦T¾ÕF¢æ7ų+|ĻCƒĀvŚBÜjŃ:ĘīzćaްwĖrnåÕĪćĪ>õ}Éü—8"¢ŻY£˜˜å•cLhō&T…¹Ļ„;3CÓ'›Gµ˜<·+bĢ0$q\ÅĶΟ}ĖŠÅX÷č(TģrʟS‚¼‘eIXVĄĒZ½”ŲĒ{Ńł‚^IāĒjD{2ķ¶ Ŗ^ »3Wķą[rąØP;A6# ¬ä†3Ó=+R;a³‰#īęĪÆyi‘®ÕI”ē9ėųVa½žŠx£Pæ)?I'„aŠWŌŸr’T ļ_9ų²9ķļ®$tŁeĻči°(iMާjš„P2ŪģĪ ·g­„¶„”>œ$šRž]ĮčzĒśR!ĆRʒ³Ü_Ē ”Ę£Ż›Ś»Gw‡nQ¬¤MBį“zŖńĻ”ĶäītšfÆ©_^%賊Āć`ĢJ2ćź SĮšIksz±Ćf‹+Ž]½Ø4GĻ_ŚÖ:dņiw[“3u ž3ÄW—n”÷ˆn¾ź(9” œµØŪßčš]ŻÓ=žø F9ń5ŽŸ¬xŠŽh4Ų¾Łs{ĪN6.qŗƒŽĆIšÅż§ŁÕ‰ÄŸ-­ķ] Ū[Kēi÷jūT‘ņrk) 3ÖŁlī`#_”Vōn¦ '(ņBH‘Āš”ģ+|-᛼Fš¬QÅöŅ»^LöōÆJÖu?“bŅåaoløß1ĒłęÆŚŹ’iZ\].š„o$ģl}źę|Y¦ėŚݧ|?sökų’vČ~ćmõł¦§ŠÖē..µżfźć_kŪynĄ3y@…Ōcė\ꌮ<ńO‰…å֖t½Łó9ņ¾śōż}jÄākń…Ļƒ“]6h센ø»•FĢõmļŽ½ |«māMKž-I<Ł`±  `7’h2q/ČŚµÄÉy'ī·Æl ÕųNM>+ĖyŲUn=z’:ä÷~7Ń|+}˜ŃeæŌnĮN·b@ś×aā}*žóBÓlµY¤ņ§" üĖ#’>ՓŃ¢>~æš6©ąMoJÕō»ØĘy\|©ĪzžµŚ¾¹ā ĖimtŪ™ÖāeŲYFI’›8£”Ą^(Ńć]WWø¹ū$ƱYĻŽnµ±į­Ošęņķ-”»¼ˆ†pĒŠöŒ$oų†K-eR ķ­ŃS¢*įIśWui,čŗmÅ¾Ÿs+lWu,ØOµ ‘ƗŃt8Æ­u+QŌÄ@ķŽ>:ž;Sl-'•ķĖŠ÷…9Į¢äJ+sŃ,“ØlckÉē•ŸsgåÕROé¾’ŚćĶŗŻ6cvŽĮWÜž?­4ģgb+ÆŻ|@¼¶}vŅ ģm1©–5ܦxķXŽ,ųGį=^ĖU׹±·Óo„!Lˆ~WĒlǹ¬S>všļ‚%–īāH$g…[+†Čõæ«éĢ7 4RnŹgPŸK‹T‰ä uŻ±Żłfī*mNh’K5–"Ź€«€õ’ŹO œ¬q7w6fy-%É,§OJįå°Õ'–X"VŽ—®*®tבźŲŚŪ]Čņ#Ž3ųS“ß¶‡ew„Ž“u4jG’ąü‡žÕ›€½™¹ąBĄģ’åł3"ʧćüŠģo“K+õ¼ŌHšä)fčœtžuj62–‡5q§Ų›g[x9Õ0 žOøpĀ;įß \K­ß,ZĘŗŗüĢ}A錩.†žS¢ÜMØ×pHX’vœ}ß„ugĀŗ†Æę¹G`źß7§Ö«„…æ|>ŌtFŪP×o‘l\HÉDüņrJś5­“Ƥ>ó6õQņiIĘV&²“…µĢ.cAņąpA­?2-ĢZö§n©+"f~ ņ#=*²g_ŖųÆCÖ“ėEŽā•m„¹°ĖÜóžz×Ē^ńķĶßÄ=_LŌ.6Cķé‰Ų_JĖ]‡c[āljtKū+M EŌ–ėQ–¹T'j€z~UꖑÉmj¬īŖj)< øče3ĪīOŲgy÷Ż&X'½X¶ŌfŪp§bģFßJ³3kNƒN{W „ ]½I®ÓĮCaŗyÉHü²Š}=æ`uśüme”Ŗ„ؑI$šy¾kÖe»ÕŖE 'åĄ·^@t~ ¹ŗ±ŌV%I>a’@ąZõūOŁ”ž6$Ģ89Į¤ö+‘øńTBö i 1S“•ö©|°tŁä·ˆ$¹Ī½XĀÅ_ éęKÉ®õrIįHōÆlÓŽUŲ¬ųóĮŒäģu^"Ō¼ •„ŧhékØFŖ³NҬnü}My—ÄOKe iŚ~Ÿkg%¬ “®¤o\õ9źxķALńŃ«Z5‹<6öMÄé\tž3ŅR),tčn[Ss¾fqķƒŽ€Qg_”Ć&æj°ŽL§Œü½ž•Ńźzs —Ś (›PgīŠ ™ēŽ(ŠLaIšķ\6sŠU źmÕwŹWwlVsDJ] ]WP76±Ü;I°œ††®*ļSŽ8JŚeõĒOƳ38“¶Fœ¼ņļbųŽ•ŚŲAŁ,]ēÜPm{ ūtv®ęt“oLzķ“ĶFāžÖ¬©ŚT‚²’Ōww¤³ģ±»9éģ+#O›ģ“Éó˜†:c§½:cFŒS=½é¾bę'^@<ŠžW¾”G Ć6FzV‡B“7¼šT¹ńž ÷Ė™ę–pĄą8Ēė^—āYĮž© .]ˆ1¼oź) gĢ,šä:=Ž› ³=Ć“…|œŻ×U¦o³Įc$‚—å]Ē­c.‡;Cļn&ŅŻąu\/ŹNF=«—msĢžK{v>ÜdPŲ”KŸŁwrŁ<‰4†b3ķķ\…Ę‘«Ųʗ7±Ęł';N@FŠ›5tm:īī1-¹ņ?§=«Ó4›ĶFĒOu»³—ķ<įX`@{6[µæ¶¹™<ÕrŒ§”ļ[‘Żźš\2=•“R1ū†_ŗO҃hS¶ē¦Žx‰#ų{qm¬­­¬“Į¾4ĻͼńÓӃ_4Ū^Létө脿ÜzRq””­¢źÉ|‰* zU ~ņ8$ž(Ć#ē=k9BĒŃĮāęgf <”Ą÷®ĖK…ŚŲE#0\sß5g_¦źŠZff\žz¾ā'6i”lĢXœr UĘV:#ę]:͜3 ”Xåd®7Z×¾ße}+B"v9ŁÅ_1¤ŽCGūF”fĪŃy* R3Ó³¦i{§tņņˆČ} ĒxŠ[uHķY—œ8ļķ^ss`ęxČcnC; €Hė“+mDÜI#ߏ–XŁÉ*G Ējž+€5͊ĘĻ—#qȫ帒óķց";ü­ČļQlr~ĪmĪ<ĻėRŠ4\ƒKŠŲ4>t7yū̇!mŪK2Ŗƒ@žŸJDŽģ.óYšU䐌.Ž~¹¬ĶOĮ‡EÕg³¾–8īA,#Īr8Ļ#Žō~Śųgā…Ü0Mm£]ÄnęLØĄ3Ēœ÷«šGĄW·ń'ˆÆõ‹¾iKW—icאNz×±Ī.ŒÓ‰4o Ƅu„ŽÉ„Ļ#,9Ųåx'¶xäZ4zÖ¢Ól¶Ÿ”óŌŠn ’Ōõ kį žąé|AooøfRŹ7`mČ<{ĶųMvśUö“¦k·:Œ–*¾PŚÕgŲü-5Šõkæź߉ģī“ķŌ£,‹ž$ńŸÖ¼·ö‚żœō ŚĻā{)ĶfŁ‹glmłs€>½ėł.ĒēōSZÉyŠ”e$ ĪsĻZȂib(ĶēaŹ@­bt#ķļŁƒÅw’¾±į«„™w|Š™[#`ƒ·JūvĢļHü·rǃĒAź)J!sb+‡óHļäŽ:s_0|oŅlu R’YŌ”Ģ[6Ū’¹rG'šĆZQQßSåęšĀ]4ķ»œÜhĢeJ°^œĪ¾Ģż›5|YšļÅ~Ō¦¹·‚É3ݹZ1ÓpõķS½QÕ£ ąŸÅ~É’“Ÿ„>'h·2éö֗ط?v·–£Ąö&æ»oųĒAųµą_|\š­ķ½Ö…­ŚGp”6Ē( äqĻ?Žk¦Žźf‡µ|(ńCŪj‡A‘·vŚ®ĒīצųÖ Æc2]ĮqØĆœćü+9-L¤Ļēž ż‘,^ĖĀ_µ?48SMÕŠéśł0Ģłr9ōą©ś ž?µ½k .mBĒęFCnS‘ĻLžōé++²¦r@|‚ć2‘Ę*(” ˆ@EīHĻē]QŲätō"yJĶļĆĘĮĄ½P¹ €Ø” XEčH⬤‹n`3޽h6Œ¬^F\3g “Éf9ͽń†AČU™ {{Šm Ņēü‘ūe?‚~ x‹ö6ń…ž«uį­IūBžõņ–³ –DÉąŸ½é_ŁĆ,7ØÆ€Ó”)*’u…cZ=Æsń&”n-§„Ēę0£õņ'Ę_ C}¦Ūų®->åH…–£ ¦ v¹üēė\2z˜³ņö–ų;§|Hšf»£ßč¦÷P·ŽO,¶#ž;ķ?Īæ‘߉^“Į¼Qį{꓎x. XęlņN?.*įSS9½:–Öb\°UłŽ:TÅĮ ʹ*ŗ¢®rŹD2ł˜!Ģ{Tb4R©>R/|ÖåĘCa‹ÉxX3y*ĄČ£«/µE5į’vG‹Ė ILtÅZ!XķöåA_½·±„¶”Ė1BDcłPmt4d2[›ƒÆéš·ÜHśe͘ņõ;kso.ģå^AüĄ©’: śŪ?üĆöƟö–ų£i:®±ŌGkp$”iyO`ąc¾+÷·ĮZŌž)ŃōżMo øx‰²ÕązŅä0ƶ@Ļæ5ÉV&ń=Ym“N²Ž}ĘGNŽ¢¼ö’ųį/ڳąOŽ> x’ŅÅõ³ÜiRŗäŪŻ Ü„OnFxķ»Ö¼éGS[ŸęēūF|&ńĄ;ųs«ŲĶaiiØĖl‰†Ž@Ų#éĘkÅmą_nœ)‹Äӌt¹…Evwka`° ›v–XmeQĀ®éB`/#hį”JQ£eł‚ö9÷5«ft÷;]GŠą„ķÕĀ@™ēqĘEq:æ‰āšē‹ä¹Ó$q§Äū‰”ńŸ 5¤gØęō?B¼⨕ND؜”’Ž$„&ę1ėE,røYÕ¶ķĒՓaŹĢ«!4Sä.™ĆĀ»­T“4A¼Ķæx1H9G^Ž%ÄŽOXAśQ„ŁiņŻIm±‹m¤N;PW#8=su”­_/QÅnxw[¹ä;ÕGĢ(Ē¦éž Š8#µTĖć!½3Śŗ‹lKo! ¼‘œ‘ŠūPh¤PžīxamTÜbFr:µāWś¬:Mō„!}¬žXŪ܏ė@ł–ĒF–ŗM¤¶W…–C62¹ļ]Ģ÷os„ø“±Ć `Č£€oē@\ä-m¤’åg·ˆÄ½ t«šäpæ“"!fE*K o\Ī^Õ,%76“/–Ų8Āõ5ɽš[ܘ˜|¤š=hk”<åõŽ5fUw_bsłSVņEd·geˆt9®y-ˆH‹Sž]CĖ“Ī6õaŌżkkHŠ&Ó`“Z–7!—@; Q…R]PÓ¬öĀū»så…ČĮ5Ņiś5Ŗé“Cä²I’ĄģHŖ9{©ī ŲhĢM ®žY,<Öź·j¶9Įć=+9>†ōŁ“!Q<³ČÉ8Å^Ņ ß°}¬uŠ“ī[“ZŠ“zĒż÷?>zÖõåųŚi× iF7J$8ÉĪ©ŃoFž_,ļĒZvƒŖGpŃŪŻ¬‘Cœ9ČłG­bŃQw<»ĘVwWŗÄĶ„ŖL­'īŲ6H÷®ĒCGæ‚?Y€ł’–SÓÆ§ŹŹ:ūūM¦]F;Xį„BJ½Ē\žå××%¤ÜP˜ę¤m•ķo…ōÉ Ėå ōjé'š·ņdt‘‰ĄPh1“¶‹÷,‰\ÅV’#å¤ŪvÆJŽ(†µ¹Fm ņ+nFėĄļX·¶‘ŻO;“qȦYÓiņŲiāŌ–0œ"±uK¬Ć'–]› “SĀĢ%h®A”JBģÅXńŸ…4ų/ē½·H“żź»-ńĢ-śT¹›„@ņŪǵB)8'ęAŚĪuKvó]OĢGjͲ¹ÕčŠĒ)·óóIĮ5ÓŽ%¶—,äÜIąŠŅ.1±³eć{ŪMZŹ9ķ Śc&ז02¦“lµKĶ\»×“k©[x Š;yĒ®éAdÆ=׈ šžųˆõ X³‚~ń&ø»»v³U`iAäČ  ķ.kK˜Yu(„±œ‡\ćpōĶy®Šŗ…­ŻY[Į1K!_eĻ„zČū Žš‘D—Œ¤ČŁļŸŗ+˜ńséÖ¶·jĖ›§&€÷<ŒUó¼“0ÄĆ=cLDw·z†Ø‹)TŪČŹ Ž=Q]m„č¹{H…®ÕĒĢżõ Ž_6œd6®|Š=xj¹uy؝W·³šy>NsĒJi #ĪoÆ.tk{-gZ²™ĘĪrwҧ™øźnŪĮeog;›‚ĪX¶Ku9®gX{„‰!Ūö©ē)#Oƞ–ūĪ•”7¢īP¼ŌśĀ,›G…”ø˜`jŃ00×PĆĻ‘‘ Ļŗķ6;=FāRĄ`+)ć4ŃpZ›_o[9>ÅiśH!‹ŠU)å•ēIļ0#ĻV뚷sSϼUāxVf‚ŚĶ”ĘüšĀ¬ųBłµ9ö"88SĒØ`zV³įė„ŻEqä&ą€*ē5³Žt‘U^ķx¦‘\ÅŁō=cőCW+Ķp«ś×ˆÜųĖZ“’j"}ø1\!,¬Ł„!ؑ­Ė\ū£ęõ&ŗæ ŪŻ[kŪ•ŅŲ’¬R>šõ¬¬\cckā׌tKĘ_ é<‰\4Šˆ^}3^ū8Ü®G9ÉķZĒbŚ;½(EØ=¤Æ7™“ƒ÷±“^Š×ĢņĒŠ ݰ9Ą¦Äfx“\Ԛm;M·?ė?ڵ –š|VWüäMƎ­ķX08éRޒʚŌ0nłk°·—}ŗBÉ…¼Ņ4ŠŌŹ™„缨"<.O_„A#Ć*ĀŅŹŸ+¹<15jlr‰ŸyylŽönoPä®yqXŅGµMŻÓ*”l>•jFm.. †D–1…ö=ėšÕ5Iī¦ŹØbH&Ø,z·‚†«¦i×"źŽņ€bć ÷®óķ­*¤ńC ”~fA‚O­O6¶×%d‰K$›$皔$\ŚĆcgeN÷Ž ,hę[ČĢęŪa~¶@ģøŪø äzéoÆõ[Ķl<ÅxUÄ ŒńŠÉ³OeÜ”„ZOØG,1Ÿ.ē\ō&¼ė]Ņ5;+Ę7WŠ”ž2:ÖRØuŅĆ9h{®¦i‡Ćż+Ä s¦^i—ļ%©Ęų8Ć)é_6ü@š4’u_kšž§gąH,ć¹K­1†ė‰'ĖŻü$|£Zꩉ±śŸxU™ęµ]*4ŸŗÆv¬½/ݘ¾ŅÓĄ—Ž.mQń£§ź1¬qÅrÓr9RORÆG>„5Ņ Ō«žyÆ:¶;±ż‰ĀßF¬Ÿ u1ÉԚZ«ū·ūÆéÆBõʛ4Ł;#ŽMX}*Kk_1BłIŌwÆ&µv÷?¤²¼¶–”hQŠŒc¢HǟSµ‰DQ«‡'„$½ć=†Ę#®9K©źF‘ÕC¦[Ŗå“Ģv5”ū,üBŠ“’Ś6ćį_gƒž_ŁIlÉrŸŗŽPķžG4ĒZ\ģæhO‚ײƈõ»_MušėÄöÓ¤6”CG‡•’č:ćéė_;ü=Õ`×,ąy·Įm”\Œ’GŅ«‘ģĶ ć$§NžHaóƒBÄ=Oz¹ØiVzķ‡Ł/āć$QJ®AŹ-3Ó>+|ųAćļŲēąĻĄ?ü?ńŅ~ŠמA«Ėo‹;›t‘žuŸ<£Féņą@ ųōŻéŚ$Ķ%™…„įCŒfµTÓz=‡jj¢­+ūĶÆ$ö_#›»Ńm¼Mpmõ µ³;K Ž[יų·į­ķżĪ˜ö‚ßFóW4ŠzćõÆ[NŃ?|Pر9¼ē‰/øæńĮŗn‹ØEį½1!B[dXfņĘ\½ŸSÉę»’ i^»½†‡š%—†Ö(滞;ęp9f>üńļ]r‘óÜ1‘żs2źz³š×Āž(„ŚkśU¦Ŗź %Č'|yźV°.fHü¦čœ1‰ō{‚~Ļ#rqžAkh~ƒā arģ«ė)YĘĖŌźu›įm*kįo$։łIČöÆ$𭵯~:|:‡^°”črĪn¤óQ!•S׌ćņ¬äś3łG€p“Ž'ė’ó’3Ņ|1„k>1ųłØė>2–ēū:Ņāiā `MĪÅŲ⾉Õåu×4©ī&›ģņ‡eBü“žøŖocū†dž MZ[ūIx^[’xSǚ-¶5­Q[Ä•.™Ļ­X’†¦ŸZżŸ>!ųOXKéÆõDöžxŹ&s½²}x檘³,Gŗ|kįżUńĘ£…“TXŃ"1Évąķq޾¼gš¬Œ_įŽ”źZ*jś‹=ף®ÆälĆÓµYšŹ—vGĻZށā+¹!½·ŗŽņę5ņćFlæĻµu:m‡Œ“M)ßHø›ĻS’ˆNģzWYŠ„ĢĻjų¬O¤iņĖØAwYS‡ŠgšōųH¼gØĮq£Y_}†Źqå»óOcŚøłµ=Šx5ŌÆįż2[ķq,§˜M”ŁŖ¬ŁbD²‚1ĻCŒgńƦ!ŌŅŚkd[y&G†^v8ü8ƬÉiµ/3ł;ǜŻTĢჃ÷iG_)KW’’ņ›z»›ĖQJńwÕĘŹ’,IyLå€ė^Ś?žÅyōĆ ŒZ°–Ż’I F ß:ą’=zӌ.‘…7ĢFT[S9fdŁéŗÖ©rDLŃ.wz-]浓K¶rŖĖŪ"­œó}N A–RXńĻzī4ŪåKQ”™ĪN?•c-̜¬vZVۘg1 ū¹ :޲åš¼Ć1;ŗćÖ¤ĶČęo§›Źv“+øäcRĒ{4PBÓ)fć8ēl_iś…”wG”÷‘X#Ɨp”{i¢„dd·ēėŽÓ4„ŲšČ“KåĖ·t‡ęn} 6o.tæ]¼Ė ¾¶C€’…tž„ų³T…ę1AnƒwLCłS Eč:V —mŒ2K·ƒžGEp^/šņ (^ęÉ ·šŃ’³õ?†)óW<#¦]Ś&³m%¤Ó+ŻóDsé^w'‰-lõ+h/ŒŻX.Ā>÷µ9+øü=Æų¢åoŻ›J”‚Ń£ą Éč?ĻJģ4ÄŃ4=rčh7ž~Uc-»$/”üĶJ=Ažm8ab¹TøĘą}ļ„q°I¾źg$¢–'45ŠĢÉÕnMŌ‘Įšiä֎œ·)0²/(¶` ō’õÖ ķ:DdV*ÖŃüČ»‹zšęµXķn‰»BČßĘIūŌ$ˆ-u)īäǐmś3o?ģžĪŖź‹©Į„jQ^jS]ÄKIn$ Šcō­;óģö×Öw—śÄ¶”@>TR’‘_KhŚŌ³éż8ŪŪ±#¶÷«°W‹4ķE“ūŪ©-¤ŽWꯏA\¶¹¦žžóPÓ-Qcv.võœPDÆrĒ„VMB’¶¦·ÉSĮ]ÄŁ®⇀üS„kq„`ŗYX|°²zh)#‹šFŒšž¦u„‹QHdÉ ėéķ^ØŻjŚĶÕܚŜ–ŽSFŪ€Ź:cņ„-#+nU×ü?ż·ąŁÖvY¢œyEFYOps^ A¤Śéž%Ónaw·ø1l` ^¹°™ź.’/ék­źW6‘ž‹n§Ų{žõņm­Ż“zćXTŽR͵šśRr éŻ­ļ³ŖŪØ²p›¦ŽGģ==뜽šxå¶Ōąeū#6åf†śSĶĻāėØŪ $wg8“wA]Ÿ€ā ‹~dČą©8{t®§R×&Ó,īl ¦a‚ #ÖŖ)’ÜäōGÄZ‚ŁZF%ŌĆŖPv’{Sž xkÄ:ŒĀöękiSM‹Ėū<¤ĒMæJÕDŽTUštNlākŪ4†]ł uŻ^ÕrĘŪ†hŻćĶłāP7GĒž“ģ8ĘēːxÓľń|»¾Ły “tPćr0Ļzb¾†ĘŻöŸoE21P¼Ļ4š]My«įŻbµ‰…ö”"€øXƒe Ķ`üxѵæXh—{soŸ“,lCGž›‰śÖMjn¢o…¾°š¾”ŗ ŌÆ«L~Šģ·Q’ÓśW›žŃZjx6}Ä*Ņbo->ńn›Ī88Å+5įw¼ńÄŚ…ŠÜÜŪFā9ęEČ čMzÅģVĀĪ<(.½xē„#žr8køćWiŒ~nåĘ=+ ō‰”{yž7, 3š MKķ5b½i“\\FČ vL`÷”k©\iĘ]·&FįŪ”Ģi›ć[3įØĆ:4®pĄą½«Ļ,Mŗy’ÖŻ&i Ėį>•¢“4Œ,v:Eˆ[ؤaÓf0Gł5&‰ąg“]øŌ$I"¶Ü^8ÉŹ±÷5±g„·ĆTń"0`tĖ)Uōµäz¤ZŒRŁn’Ż€1ü§=ńš—lā/WÄK-„½”÷6ö©ƒ$Œ8jķŽ·­+ŲĒŽbČc€ED•Œ%®āk—xńŪ‹·Ūø1ĻcWī4Ō»„Įu"Č‹ŌƒĆ*Dxˆn~Ė$Ö±OäBjmī=*_[X†žvEČēq“'ø Ū•t=sFŌ,4{”‘®-–Ü1\öÆN¶°ÄęźʱĢQņØ ĪQ±ĻxĪŅĒH Ž_DUŠØp PÄp xF«*$ŹD!³·aąŒÓ±Œ¢īgÜŁųž['ž8ĆčŠx'84Ūe–āĀkxķān„¾ŽqģhtŹäŠ© hęžśā;†xœ)(6õÅv1Ēż›Žk`īĢ8éXĪ$É;™_a–śåŻćżĻzéō]2]-Ūģńŗ[Ä’z“ڹ„¹JŒ¦ŻŻ"–G’SÕsĪE2žŽ X>ÖźdķÓ§¹¢‹9÷ÕKĒ%’MÖĖódcżkžŃõ«xµ„{ć,QE(^Əjߕƒ>»š÷Ęß®—§i7 :īžōSFż¾pь#n=±Ņµ4ū[ø•“hIF@ō4¹P£ uĻJ¾¼¾3LŚpp0Ö»;Żjk;‹{ U€ ÜĄ’(QF„ »åņ$kiŽę%z`^m%ö£hŚK‹„ œ֘.•⛫kkxÅ»E±ĮčIéČ5č·ŗƒ†øŠ8Ņ,…fŽ•œŃƒlęuc-ܒ n¤`ćń¦Ųióß"W)Œc95Œ„cX.‡Ŗ7…DžNÓ®Ņõć!™ĪBæc¦+Ėõ’„zʅl·W–†õ,큓śc֔gÜߑ-®=¬Œ‘²žģG„&ēwxŽ$śU™Ź6=ĀŽŪK*$vy…›Žø÷®kP¶’-Cd2cęĪć^ĢōĻ _ŻXŪīŽbņņ£8ü«¾Õu-"ĻF»øÖ9Æ~Ļę@ØėŻŗńķE®fęĻŅ/ƒŠč«ā;hļn`“‰äóR2xĒķ_õNŪXŠī ĒiČE;ŽēŲ’ §ŃÆńw{µĶxļĮ–ž+Ņž§X^(ˆR2 ’>MsĻRÕśŸ|NųQ„,“-sĆŗŒŚ¤Wņ2=±#6[z±=NMy„üa¬ü/ń ń-ž”wnŒW±!ĀMī¬;ćśVQ±ŻN]®~7XYx—LŃ<}¦ŲĮ?‡īāP@Øč{żī’‚ žŠIć…>,ż—õe,šKąńČ ōƧ¼'©Śų¢ [iŁĒŽÉɬŪ&q޼'ūAüų‡šŶq\iś„”¢Ń6óģ8uō ąžÖæĶĻö¦ų/āO‚¼mšĖĘ+§iŽ$Ńļdˆ*C°I’ØĶźHĶ(i;w0“č|wqnĻ™ŠO8ė%ŠąĒ,o ©Č 9pkŖ”Ė2'g±ĒėJoUąõ&“»3 ¼fDŲ>Lņ1Ž©Ēl²[Ż”u\l`p3źišF74ąä†@Ž£wLw©Š­ø]“/'°Ķ2懂ž x£į'ÄüZš}ķöŸā-ś;›yķåhŚ0¬–Ū÷>µž—ß±?ķ+ąßŚæö|ų{ńĒĮŗ­½ü„”pji[[ÄPXu‚9ōų«:ŽźĘšGÓŚœ l]y•rW•ó׈ Õķoõųļ­-®|;ØZłJ dÅ'?7Ō§š5ęŌCqč~nų·OÕ4k»Ū­^Ė“gŽta…¹ƒ<ūÆäkłĪ’‚—~Ķ–śMÕ§Äļ5ŖY“†y @7Ŗ1}½æĘ¦59u0”{Ÿ‹—–ÓˆĆĪÆ–8ūĆ<ʊ ¤pÅĖw5ß u9g×(|Ó.TĪ8݌Öc,­øa—9'5ŠdHγ ]ä:ć$Ž)LHL‘Ø•N ūPRˆ³Ē2ģ ¤!ąj( ’7,AŲWžh5Q5d‘ę†=jš(Įp Č ¦h:bŗ’ąœ’“D³_ķ-¢O®ėwŗG€|BN˜$øÓē÷rć¹ Ey|Uo­¢ųĻN¼Ž]#Äö‚ŪZT'j^Ę—>Ż0}ųÅsŌZ1>ޱ¾žŠEŒXŽŁ»Š–=6ėMbö "•XKū,k‚¢-­,/’špWģNuM'ö›šG†Ž=RHć×>Åc ņžĄ ĄŻź£=yžK`iå¶U“O’ĘPJģs’0qż+8uDøčI„xžęĻP‡MŗÄ»ß •įGłźÖö[NŠĢģŒÄü¤pŌJ=ŒłGkz½ÜRX鰗X†å üGøåÖpź2Κ‚•łA`ž•„(˜øŸ]~Źž6:lz‡…5˜Ī>Ēuęq°ēŒ~YÆŗB§˜cIEcĘ?Ę»bfé›P;GHI‘ū’zŠÉ6‘„ŌŅķĖŹFģ’z £6µ:ż&ī-Æ*°‰}:Ō~'ń%©Xā·¹ówØŻµzUØŽYĖē«6āÉž•1i-»±«ŒlgPė¼3©K¦Ż™· ©*>\óźk¤ÕeFŅļdPå×÷lzfØČóģ.å`ŪžRÜ÷WQ¤é"ī˜.-‹Ź§ä~Ų  SčsٳĆ;²S]=£<¶IŁ/#=ˆ«§øœz¦­o%“Fžk†9'žÕŽųcÅŹšI³ Ū»695²dņŪcŃÕ¢ŌģŠŹŪ%9ÅxĪ©{=¦«wåQ~AŽ 0Ź6Ś‘³g0ž÷jé4ō”ø•„“Ģ2Ņ„¢ĪÄd–Ž$š`ņ¹;UG¬= HņJŲzėC@u2j÷M¢¦$0ƈͱ‚ü͟_ʼś(¤K–Ž”]8Mg¦¬„“³·µ•B€ÉĶ6}2D˜ĘļJ|†¤ļ©RŚż4‰ĖŸńNŌŹĮ›ŪŚ*å õ®‚_ģ’Tż™ˆ–üŖœLÜu0/“;wŌ'šÖŁ£·—$n<×w£]i’7“½XŸ›Ą¬ÜMbŽ"[;{[¹-¤r†eĻ õZå’Śä}’y ōČł‡½.[Ķ}ĻRš¾ĖĶ6Y F­·pąóŠą|q§Ķswiw ^YC€ąsC‹Üq—CJÓVøūk]ńٽ¹ćŽ»Ųt»mGK¾™-œÅņ`żžqļN+øī›9Ÿ xjK,G¶ąĒhrIĻŌ×^Ņ;K#]…óŗ7©ÅŲ³[¼iģR×"RHĒø >${“™ņvÜŠÄiüC¤ĻcÕćŻŗp§ĶJłćK‰Fc2qĮ¦‡ŹĪŗĖVŗÖ’+^"•zsŌT‰9_2Żäė‘ÉčkkčCEk[aŃ%×ĻĶÖ“%dwµ@éYI‚B§–ŃĢŖå¦MdĮms)ŒČ¶vē’*J±Ń+]éWv:•™G–ØĒµ”ćéõ½”ÖQź*`[å'ŽG„1ņŲān5Ń„ZĮ…’Yā3ž®± »Õ5RķķZD•šģN03Ś‹Ī{RŲ¶5¼r‚qžkCÅV–wv/N[ŪüĖĒØ¤Tes=µ +-O†8 I ķrĒļóÖŗj0_1Ž=ø_¼ū rJ :]ėGńźiw͵r6œ€ĒŽæ5ĮĮ¤x‹WńF±¦Ūi·­öÉó© ź{ƒß„ ń·¾Ś’NžŚBĆnTóšęWĮśĶĢöš¤“,ėæĢ+³¶x „ē«Ć„\bŚņÅĻżņ}+Õ|:noeMD؈˜ĻSA^Ģęž$x Sš„Ž‡ākā“LÄa¹ŗzēė?4Ż&ĒBŌ/Zł"˜L]搒I''}ŽóāÄ}7LšĪ„… Ļ«“XŽ@Ć(ĆŠc½|©įżSPŌ/īoµ©ę{©pY²æg(šr3·žÜKh–r¬~QźkRŅŻ.!iŻ@n”»Wdfs÷¼²¼QŸ5„?I³šXgÓÅ09½VŚöūQmFź52Ljѳ’ś…tŗ³³…b0ZÜń‰:“z…†ł łcøÆCø×­“ ^]4>RĒbø¤>˜ü*⺛Ƅė>0¶ńĪ€#Ōį{+«PL1°äŠ›įGˆü= é^!µ–ę M@ŗ<[”ī“Aüæ*ŌӐŪÕ/S¾7aŃ·¶\ƒƒ^‡įk='WS§IµÉi¶ó‹§;–ĻĢ:acÓ. ū=œ#H“( ļéRIr58 *ĢŅ2ņĄē4 Å“M-ģd²Ū'€OOZć5} ōūÖø@)Č’dŠREKWQŌ"Ė#•v€Ga\ŖŁŻ]Lš@£ĶsĄō¦l£cŚōō½ ģw^ōĒ<ēŠćļ.’;¦ņćčsĒ­Lˆ”K7›Ė(;8Įżźō}#RŃ-’³.Ž"ķž/īø5 Tŗä6÷M„ÜĄQĖn\Æo­mj–—Z·‡®SLš(nćiB{{Šh”ÜŅššß薖žmĆĖ.ö_¼HļWüK$¼Ęņä?VcŌńŽ®.ÅņŲóKƱĖ,QBĄīgĆjŗ$÷\Ü,4˜Ū•\•²}€õ«K(5%]NŅ8攏ߔŚ++R„ėKm—Q¢[¶āåž§ń¦åq3—Õ4+a³-ŗ•'‘ŌÕm)®4Ėė«Hȉ¹GMÜö©īN¾õĪ\ėl5ƒ •6źŁR%z™_”¤csÕōæiĆN3 ¢¶xĘŅŽŲ-ōÆ.ń—ˆÖśł Ü0e’×^SżƒqqØ-ŗÅ&ŠsĒ\ĻaٱóŚ\č÷‡am£œW}¢ų›O¼“\Šum„œŒā“w#:»ė+[ę“Ōd \z‘Dš!VIEéŸZAģŁŹH¦ŻPFēÆ@E\µš9…ÉŽĀ„ĶØJO–*ģāü_«i–b-^ś;+qĘģ×ė\vń;Ā:}ķŗLņj6Ė(b9/ōĘk7^'ėY‚™ę9)8*q}dķų$åų~‡”k8šÖ»k'Ų4W]]°#»‘žāŽŠGzĀÖuŲotčt䓆„<ŠN\ż(x³·<š;ĮSu¹UD•ß#mżĶ&žH«`"/S'šŲć#ŠęµY|«ā°Ęžb0ćÕh֖[9lŽ’VŌ“½6Å.µÆ/{|£©#ü+ŠųĒ”xÆĆß“‰¾ ø·ÕaŌµ„Ė ”/qn„7ļ6öū½ū{×<ń>Æ!ąœv>Ŗ„†¦å'Ūõ<#Xųc™Øčž4š¼smāŲ<©.į½¹2Z܎<Ä+Ų‚¾Ÿā-ŚF²i66±\°żā²eGŽA÷®J˜ÄŻšŸF<ޤiŗ’Œ[~ņÕŁw]ōé”’Ž)ÕÖ,IäČܶĮĒįUĶʧ¬ØÜG†ė»µpUĒ>‡ō‡x‘e–Z~Ś¢ė=æšæźgéŗw‘4öž|ŽP”ȹĄnä ՛>öŚś2ZYb+»/×õ® ā[?vĆį#ĖdL¬§y…pxėMøžŌ\¾Ęœö®wPėöv+Żź½Ä>\ˆWæ=+C[ń†ŸyŌ-„»øŒ²ĀŽ Ś;œ~›fŌāŁĶhškĪ×rB­ )Ļ9®¹“ų ¬kŪr„¶Iį©Ā,e…įš&ßuķ\’Œ4#cØjڼV¾)ŠÜż’tP® Œ7b­k·aŖŗ>Žż³’kƂßg_Ł3Ā^ŅĒŪ.쐣ŒšķĘTŒäœ{/Į$|÷ åųŒ. ŠÄ»ÉN£_įu$ć·÷Zżu=>Ī(¢Ņhþq»*Ä6ūQČ<‘Åp7®‡ŃÉé©ćŸüIgäx;K·„Łė6ŠĪדT,J}~a^5£ÜĮ©Mo$źw\÷®Ŗ ģüūŒ³‡„Ć6›¹ōö³Æ|š/€j7iŖxāāā?³Å6aˆŽsŪ×?…xOеū/Mcż• P£°TŒ=²Mzōևņ>c':ŽrÜńˆZ‰”Ń|?ā=nC\ÜĒū«h‚ '°Æ"µSÜĄaƒā'ýóT°šżī™žØ£z²¬Œ¼„y·ĘļĀ>:Ÿ…Æ ›T ±·“<;nõ©„{žÄ)hz?€~źžų{įR’SgQGžEgżź°o› ņG?­vMm§ŻĆis”G¤³¶ÅAźIśWŻåĻ–š‰žyńŽ;ėy¶#{©MŁ÷IŁ~ V­ń“į®Ÿs5œž9ŅDØ™ēf?ŹųńšvÖĪ<`—R“øxŅ/›Ėžšäפ™ńr…Ļ)ńķ?šø¬ĆH$¾påcķŹ+× ^7®ž×ž1“–|į;M9P’ŅܝģWŠ)$~4sX=…ō;~Õ?uølµįšę—qWŹh·,Ä÷|qųW”x“ö¢¼±““¹ń’ƒ¬ī,<°%m!¼¶YńČäsœVŠ„ō0«‡ŠčüńĮ_ā‚ļĀśœ7nó"”…š";2×Ŗ¢˜eX£`7t÷©qčyµ)4Y™u8•¢ČR:«b²æŅ„™O!~„ž‚‘‘"ż§Ļ1ī2 ē5ӈķŌ v!÷ “HGA„ź5•£C1"PpŠ{Ö~§ØI}“k²$/Ź("Ql·§ßGeC2–}¹óō¬±­il[”˜K„9cœdŠ8ĘÄ:妟ē„F¶v’®Ł%c€Ē¶kĮīŸ•Wš­ģO—<ė,V¼–LąōéHGc§üBūeėYé7^AŲCćļŖē½tiŽ·g/Ų.Śi‘ZiRG*Éę6ų²öm2gdR³‘ņÆC^-ŖD——²E 88Ąē4ē¼+bŸš]yöÓģ7Hzsü«²’Ś -Ev³‡NÖ¾(Oovśvń,Ēo v"¼ŸL×|@o>ŻņŚŚ³–0 5”£ctrÓ¼s¦x­-4©`– ćŒĆēØĀ³vėļ\²ųv{øL#į‹åW¹ėõ©0’čy–æØj°]Ok*„¶!·c>Ų£Į·qxŒņwø[fŹ)nš’=(ļ:gĀæĆaw{yؔ) › nDZē\»üD-ģü“±å€WĒ­ •Źzj|LµšĢ†ĪīźŽ(¤>If ķnœ¹g«éŚÆˆ“­6[¹®“›ƒūł|ˆ3É9śŠh§ūLxRÕģtūÆY›čmćQĄxßūŁÆ”|?į-~ĖTŅu–é#؝vž¼{VŠŲ†}‰Ŗč:fįYīķ¬ĶÅūØŲē—į~¹µäĀD6šÆócpnĖėIĖC'&i|K›KŌģÓtūi$Še• øG|_Jņ#>Æ42Ć„ä£üŽQ8GcJ1ŗ*2čĻb³ųUż’‡ EÄźÆŗ@Äqón'°®?āŽ<)¤ųÄųWBŗ›^¾°‰Vk’˜ŠCŻSŌ”ģt)Ÿ8|CŸĘ¾/Ō—ūIŗŅ-­#µ¶cI ī}y¬Ų>\čÖŗwˆ•Ü\jŽŅ$‘ļ–ŅźänIC•SėÅaRäøŲĘŅ5æ ź©$ö‡z v ‰?NkҧšļŸa4±“H 8Įü«ŠIˆł«Ä7‰”x”¦™äKÉŽ5cņńŌØķ’Ö¬ł¬üWćųÖ×GtžĻĒ’ y­©ÄŚ25ÓĮpčŚr[³Īś£dI–ł3ģ?:ĢÓü©Ķ%IJG …T9s[šsšķįu.ļnc‰:Ņ»_…Z4ÓĻØė‘\K:ņdÉ ŽÅR‘ī^ 𒆮ōčå¹H_T#¼ĒžƒõäŚw…¬-g&K‰7.2:äōżh.1č\»šŃæ¾2 ĄIłTg„CØx:ŽźÉ‘’éĪqšW:#c‡Ó<„E{;\I%Ā`¬ŽzW¼ųsMš­ü×Q»“әrŪä'ę\qŠ|äJhy‰O{Q/‡Ś!±äĄ’óéY_”Ōn®58ļµ&“ä$©ć<ōžU.f\§½“0ŹFUn‘Ņ¼ēÄ vŅ5ÅĢi(?īŸZŽfj“G)ā=N’[7‰Ø8I'Ŗćø5ą—ßl±–D¹‘<£Ā…ĻcŽis39 ä\]GFźźy9?„zO…tX-mN–óO *FÜģ śÖ‘™Ē7cŅ£Ńl­Q„%b,øŪĻēŚ•ˆ‚ī'Y»w'ö«ę¾¤Ŗ‡in¶ŗ\*÷0ŪŻJńä ŽėŽÖnŠŁ¼Å —Q€Ÿ­dęj¤cé¹»ˆ5Ō+n”z¬}8ŖWZéóĒŖŪmņŃ÷Ųä~"§™ˆ–ÖśÓÄW÷PXćS-ķ9ö®‰¤‚iķ ƒÜRøXŹmgJ¦†ź1¼Ļ5wGŗ‹ķ $N±®0Tų‡ā=oÄšŻŽ“ƵÓ]ZĶ+Ä•cļŪŚ¼6žĆĖ•ˆ;[wAŽ„+c>=ŪĆ|¬ŹŪ€aЊū“önųØ]Ų§†Æ§†mB<ŃŒņ®üŖā®;kYމ˜ØN ŠŅhŅHŲĖ8*2x®z‘Q£ęļų6{OĶ%Ö®é×*#·†Aņł˜$ćė_#ųČŲIØ\XßGoƍųā•ń?‚õŸ…׏Č“ŒĶ§łĶŹp=OQųTß~7xÓöTż <)ńwĮļ²ŚÜ”Ō-œ2łńž6œvĘktµ:éčrß>.iæ~|:ųÕ§Ł‹ µČZi¢C•GśąžUō_ƍr];Äp ˜ĖŽ„Vs,š} –ĒŽóŪÅØĮoŖéäGrø`ĆŚæ•ų8Oö:¶žOžÖšō71_2hŽ" E¼œłsĒ({p*y­c–§cųõńœö÷ś“-@`”ǰ{wÕČ=ČgV” r{WBg%YXĻøø Ņ&U##åć„C+Opæ=qÅk.q·ĀV\ŚA"tž§¹_˜ÕYžyéTkö4eHYcŽ9éQ[–I*ŽO#śÓ.2čt–ß¼Gd \=ńšž‡’ąßŸŪ`|ųĒāŁKā.¹ŸąO0›Diß š(†ąļ(ؒ:`ĻķÕŪŃH„0:żąz7ā0kĪ|S¦ł¶—6›Ī2¹ŚkĻŖŗ|5ńĒƒ®o©ŻŪĒäÅž‹s‘ÉCПĻņłńēį—ń?įē‹|s§Y]Ż%»}‘ä\;«už9üė–ś Q?’/Œ~Ō>ųßYšf±kżžÖ¤Goó3”’3“ōéŚ¼pDŹBłryÅz%īœõ)ė »7cĮN w5A¢™›Ķ‘¶)Č ;}k£™œmYŒņŠĘ»ĒŽć§ŽŲ”6å|”ąē'ŠSR‘$¤“”aLzÓā-1ŚĒpµ6ŽįęO’§j†ē;yŹé¶O2-Äš:Pn‡](¼ū:˜Uę…ÖD|ąĘĄä0>¼WõÕ’ƒż““’Ńžx‹Q¾‡ÄĖ…ūݾęˆÅ ūą”¬„tĻéÓĮž/žŃ·[‹‹t·ŌmYŽĘ `1ąœ×¦Iu-Ąc³”]čTõĆV%Å÷<ÓĒ’<=ń÷į§¾x¢4¾š¾»g$ęĮ¶¹ķe9ąäÄz’8OŪ'ąv»ū/ü{ń€¼M娷Ōd“ŽVÜXįńŻX`‚;厌4Ųł_³¹Žę;Ėx„Ь>`1Šō_ź³j°Bc4Ʉäņ=«S);Ż„Õƒ ‰(Iž. jĄ×ōŪCz¤ ˆĆū֔Ĥsŗ«©hŗ®›`‘ÜŻŚĖęGp$ķĶ~­xGÅÖ~)Šō½fŚŪČ»uD¹‰ˆ$#²ŽÕÓe&wŠˆß¬ŹŖ)u!e,øąć”­cœŅ™hŽJšłx${õĢÜGęNf; ÜĖ™ļ„4KMrՙA*ōĶ&§į…¶µøšŅp×HßtŒō W9{+kµ2‚NŲ<ÕÉnn]#:¦1ėHFö• 1ʆm¹=ƽ§Ā§Ā©¦ßż¶"Ņ"nŒÆ’J*/SČ|G®yŚ™ÖÄZĀØ5-œ€@ŅY9ī:QŸbęPÕtļXļNAŚWø¦ŲŚÅ °’,韽ŲVń•Ģ@šķÕףnēRó,—aŠķ^[s©Eā‰åæÓRIv7–ųsŽØ ›åF†K9Ė#1ŪĒ»Ķ “{=*(Ņg,q‚xė@X’ćEŽõŲ½ŠfھՃ­)ŠHiŠ”?*zēéYKr”nUÓ/-ļlžŌҬ‡8*ÜZo£Įs"Ķ•8®qRlAŖi:†ySŪ•Yzr:z՛¶“ū.EHOŚŹæeć’Õ[Eha&sZn•uŖøk•Kz[Ń%Ķ²É ”–8Ź][Ćך~Ÿ7ŁnHłd<ąöćņ®üā;m¦ķbWF>`Éłæ:,R7¬lY­Ģ;Šæ/j}åŖŁX>čü¹›8ČÉ„`¹ĻĮŖAašn…«Æ¶ń„ȃOBW€ūßZĶG[óYŽéMšŌ*¾2Ć pĮ®4Y<Ń$ŖīCOه1™‘ī —“1v9-ŽqV§RIHūՆ2OJ—s”ń ¾‘£hRĒs÷“"š#žņżk–ŠĶęrZ\!Č!»ÕS} ¤aźMƛ +ł¾qڽ F³ÄĢč«¶8$V„ :…ę™s3#H!i6ĒŽßZō-&ŻdµšņnMg2ć•ļüWØi¶eŲ]>ēv3ĻZĄ]AļžI¤)Y{zÖf¶(čš¶z'¼iZŽCµŌ?ö÷¬mV$ūtŅÄŪāķnä{Š8…Ōž[©#`cĆ5ŪčŁÜÜ£zė@X§®1ŠāhŹJ»płŲpAō®ĆA{%ŅīŅšŅ!ņ@O½R•“"QŌĮÓģBłĖpŽƒŅ»#PŠ;Č­dCrMĒīŅl¤¬uŽ(Õ¤ŽŹ€`A ½@5ĻiZĖJ躊Ć5’¶_w­"Žʐ趏£]9avƒ„!†zgæµkĻ ų“Ä–Š ¶Órų<œśPąKŲ’ŌXłŖĪ~fĄĶIā½JßĻ‚Ōm'ƒüT ĄSEó#Uh[’[µ_šMÅŌ6SCp¹·ŽB‘’s•ö’=©9"”§ C}³“ńłr0a×µqśĪ°š_\‡¶;_‘(éō¬å#S™:‡˜Ld“£·«gCÓmoÆ8XnŻž:“éPiŽōŚžÅ“é-cøF]¾[3^ń ĘŅɝŗ…l6ŽŖrŠę|2 «OnŖ'U ntÕŲ|7|¶óź32¹$¾ =;™ć\ä;;Ląg©­Ż6;‹ø#,cHńĒҐĶž‡eż—<čŅKØAõĀI#[Ž¢"“&ļš ¢ÖYV"¬0¬3ųWÜió®¢RL„›!‡JQ¹Ų?‡tč^?· |Ü Ē8ķMÓm Žįs« ۚw!·«G¬I!Ž,HqėéFwŖĒgØŚ\G=“.v1yl£Ś¹ZŲԃI7vÓn—8õ=+Ÿk[>Öķmge<±aßµŲėü «”i’H·³Nų8?6IÉ'ė^åÆüDµšĆĶ_\ƒM“QÖaZÜ¢Nzīć8„Å\ó/ųŗĻā߇toM ńD#ŸœfO›··OĀ­č“ß^hź‘Ū““$`s€()D§¤xžŁµdÓļžKYĮ8c‘čk3ÅWĶØ_éŗvŸ#@ßjW–@Ł,€‚GéĘƒDZÕ|5„ų®- \\ÜZZČ&‚%…fĘ3Ž•ę¾+™|*5 NŲŽĻóq‚ iV xoÄĖ7”ėꄯ°q†ļųu£™Œä†œ­‘žiā“ €»»×£L—šĮ Z!ÕA`3ųŅvčR]Ī6ßūNćS2^[pSĮ9ÆTÓ¼8÷0Ą7n ųõ©(ĘŗŠōė±%š ŒĮwz ć<”xsĆĀ њWd£ļĄuĄ=½Ķؚ^ń=ާež°ķ–ܐł~·|Av“'•f<•$tķQ9Yʎ¤š¬ž#ŌcŠk”†Ė#¶p@ÆZŪ¾ƒA±Ō!mÄéĶ8ŽBŸĀ7cś×›Z­ė’¼3…,Ė ŌvqņVū®ļņ;Oüų{®k¶š‚ŁĖ{¦Ŗ)g9WHõ¬Ļü5šW„ü•‡Ā:{éā<ÅB®¤ŽĒ ü«ĢfTą°‰žwšćĮž¼ń…Ę•®˜l“·„½ŗ“ƒęrA?„'‹¾źö„ģ°5Ģśc‘Łļ]QĒXüKüĆ渵Т¹fž.—’‚|V"²ń%֓«ėP‹­NŽGę#,?»Ÿē^ŸįĶ#GŅäó“ķ>ĀŹīą>Xc Ļžö:÷®zøé=Øį2¬ ½¤é)K»WémTPņ4+u/Ÿd+0ÉśSo.„¶šŁ«>ț!š?Zćx–Ż™śŽOĆxL"k MA=_*K_‘„¢6“–¤5$}ęŻÄ{OGķŸnµĻŚ”™—h ćYJ©ōQ ®Ó$øe‰žTs“޳ķµ{?6kx%2™G8¬‚PHé|:m®%¹’A‚}kSĘ‚iÖv7Ó®bgņS‚wb¤ŽtyĢW²\Ü4jæ+|Ż: ö’†Ÿu’‹IØĆ„iéŁ!{‰$ø}ŠōĒæj›.-=O>ńĮļųi..ļm¤øÓ9’h¹mĘsĻNG5óÓC ¾±oz× 4%<˜Ż¹$zÖrƒ7)ļž‚x,”išæøVõõæŁāF³—é·µDU™¼QÉXŹÖŚÅ¼ˆ?8ēœ×Qī°?.+K”ćÜņļ‰6{ešķģżć8 žšéłSü4óAvżévSī3ĒéEĀĒÆ@‹l…™÷nµNļPŠ)y‹ŽqŠØ-L*;3Ąž+^nÜH±ŲÜ@KXČG\½Æ=š—üKwqi=„Å–™,g/*ŁŽē=+ÖĆR{ŸĶ3ń )øŃ¾«SĻ>".ƒŖĻe6®6©«Z“ÉBp¤»\½Õõµ»›…ž UŹĻ€‡ėڽαĶTž¬śoKŠ×ā·Ćķ'ƞ Ń.ü5…ŚÜÅzrj}`@ĻałVƆÖÓÄmbe_*9•ž0?żUÉVZŸŠ^eJuŠ{Ļņ=⯁¼#ńŸĘž¼Ō4›Ķ/į/†ćŻmjļ’!»ŽīɜmźzŅÜŁX٤ŁdZŚd ·A„‰{\’ģŠ2Œ “•i-_čO§†.#¹ĶxļĘ} ų—Cń#Ģ‘Ś<(čsĢrdgóę‘ėc©EA¹t=§į垵ńĪĆ[Ņķš·Ś'‰Æ v‹ų•NZc‡ńG…µ K¶šŻdšŲ9 ­néš|†Å„ńbćˆž”Äcų‚xm¬QՈ˜gå#šĪŠlŪQ“ĖøfåJcŠ ł™¹ńēM‡H±¶“Š[K…>CÕņž§}¢ĆŖ…–ŹK«•‘_s/Šw4:i&ńN”©jÖ‰gÄłe˜šY}>“ūŲmķ-GĖ!Ļ;ETeŠ*¼Õ¤‡XHVņI捆T š3ķZ·W^_$©+$ ć”ģkAZŚ59mŌĒeå£Ī>pŲĒŹ}køŃ|3į}^Ś9og1ߨÉS¬;`ē­4ģ2ĶĻI½*ņŚ¢Hß(ŒŽ•GQ–5óķķHE ÷»?×ņ A!ŽęąO$īp¬ĶjQ‹3)„.wśR1“Ōį/µĖų&ŗµ“ø0ÄīƒÖ”ø7zōyļę\ģ_¼øĒō ØĖ”ąž8š$VV§Q`†"JFążņ?š’±]Gp‰,‘„¹ČćæŅ„ÄÖēe”Įmg4Kö>%;³÷rEnų³Å×3ék%¤'NBåNOÖB<{S†”hXČ%˜)Čć>µsĮ:mĪ•;ÜŚŖ5Ūćp#‚iķZ¾§­ßé7-wŖŚZUV…צļ^3ci,·(–r$šn‡įĶJ}VīŹMq¢ÜcĻ)ķŠĄMjĆP iŗ$1…U~V4¤•®fĻOÓ/¬.ōė=V¶¶XŲĮ?_ZčL±‰ ¬SĒp…²o_ĻšĢŹrčsš–ˆgÕŚżeŒD±¬;07¦ØéŃļÖ#‰”fā<¼sŠ‹Ōō!‚ ›FTüĖŽkĖüuńCÄžÕmWĀPGfā2¬Ģ2Ą×?\csn„æėžńĒ„4ūķZka®D†IŸfžŸ|Ė}§Ŗi³]Ā%ū& &ģĢR”ližĒū=jśøÖRŽ÷TfŃ "`J+ĮÅtæ4‹5Ö4?Gff¹g`ģŲĮ'9ĒéR7_„üCŽ“ &ÜDń¦2篒[šó‰ž,Šx-ōh NĪ[!z£zÓHĪŻ.šµę”ż¤WĶ=’ŹAVÉ-ų×w®ė3Å“Ü+dü¼ż*łĒ4ž5ū(ŽÜGēLŹØ9vś×ā?ÜĪ·†`g/÷sÜŠįŲ®C“Ń­µH“Hōłm“ķ#ądūֈ×DH\½TĄĄŚ3“Ō¹<½ZŃ®lÆ4Øu}ńĖlĢH<‚iڟˆ.®ķ&Ó¬ĄŽ<²BķlV‘] „%6Ž%šÄ“ź±Eå\®čÕĮåS4ļ ¹¹žwk–ĪżĶœ52¹‘ź2čjö&GL9l/'„yĮšūŁĶs8Aå–į}=ė=Hēg®Z%ÕĈmZ58`8cžćń«zx(²`„ņĢpI©&Rv5¤ÕŸO¶u/ę—Āŗ™æ{N9.2ŪBHō Įɞ©y¦Īś[\ڲ"ƒ€¹Į•›ŹffĄ8’J8źahž"ń`ń,ÖŗŒ·EĘÉ6ˆxĻzō‘l^źd,ūƒF0ŌŹŪ2īĶø,žŅ#1«žäօ…ō֗;-I\`Žæē„dĶ™ę:‹Ćx÷Y#‰¾šĒJÅŌSΚ+7ŌV iRäćhśö¤jČąń‡|2J•’kyĮCq"cfxėļZž Óü/§j·ŗ®²–źW`äķ“ŸīŌóQ’ę-ā;yćŗ¶+“$dš}9¬+›5!Ė„“–;i¦dßC̵]gO†v·uUˆ°Enæ­yļ‹ü>š•Čø²qę`nĄĒ·½Q•ŠŗFšŃ£Å2ɼ‚£ō®²ÖäY"¬!™³‚™ē4āµ8¤ĶhīŽņī9š=‡¾kwVšęŖŁŁLĄ»¢–f'!½h¬“$æac¦]ŁF¢s“nVÜ1“Ž?„q³ųxIsw"ka÷It{VFšŠęüUrŗ,$ CmĒN”Ķ$O«ŲJ.X6įGCP˜Ģ™“v“lZ4Ä;’Zk\ÜÄņ ‚„ĄŽõ@sŗ¢«L%łƒõöÅkܙķć·™”)żč­¾“ŗ m2£É(FܖRqÓÖ²ęf,G§Ü4  ć%øĄ©"Ņ^)ŠJ)ĆF*£!ņ3÷sĒv:.»ØŪ\ kt½,±Ē#Y{c?C^“ąm ßšĻ„hę–{v…¶ąŁ ’żzõyžĘǚxąÓ„Ö«mö{‡š6imä«rqŚ¼’ĄV~(žßŅu-föÖßL³œī1ēr$aŽq×5¼̧$y_ÅOjśæˆ‡¼x›Å kšŪRŌüCh‰©“y“Ļ_NxĒē_7ųkWx¢Ī[³!µenAŹ×éQ4iNūFųćįfāŪ(üI„"-źŁ‰%‚’`tļ_™ž?ÓßEÖ\"Į˲3%yõō®ng{P—C™„DNåqŽ˜¶ü-®’dėZmķ­Ä–³5ÄJÅ7(ląūu­cŽGė/‡5»MwF±×mįūõōĻÄĻŁŽCˆ­.VźĘś"«2. Lsłš£Šūū’ ż¦ķ|Cįļ~Č8¼¼}WKŻwįó1ū±rv†õÉ'čM@_>u »9ÕöŽsšU©µgÜŽĒß ¼Fš¾’¶²Y©ā¹Ÿ<-ń—įߎ~ųĀ+kķ\³xąYFL®£¦sƒ’ƒG5Hę•ūbüńOĮ/Šž6ųWÆŚ+ÅZōŠ“G“]@\ķ•[ø+‚½|Gshb¬ÉŌ’õ«JnéK¹ÅR{ŪDĖ1tf8ĘįIyHysŒg¼ecŸ—[8Ų”B39ēéQ¬žt[^’ŒŒē†ŖSīiŲ©åI—ræ„kŁĶj‘ęx~uéÜļUs¢ Ɩ\Č$]Ø ĻĖŅŗM ^Ö|=āxæAԟHńN›{ ķ„ńŽTDĮĪsėŒQ#zgśQĮ=j­öĀż™ž|lÓµ2mIģc°×--äßö[¤łNGQĻcŲÆ^µöˆ?~Œķlq\•c©”ć¾$Ń4«É•µ»!}”Ģ WIÓj‘ß†sųWåÄ=ļCÕ5·ż‚ń–<6į5¾~Sžøķųā¾¶?’ਿĘćæ č¶jEĆOs<\¬ŁĻæÜśWį̰Ŗ¬ āh˜RG#šż+¢“čaRE”;9'¹¦4‚IX>±ÅtœrEYUŽßßUéĶ2pꈾfąĒ Å4gbŌ %ŠżōƒŽ«¬l¤ÉÉ9é[F66бcb2©bzäŌFF’äłdłqŽ™¦\d[ŠX·”PH䚶«ö!ż”öYż¢ü'ć]CPž‡Ś™žĢ×Ė®Ē #yc©RAµLŽˆH’@/€ß޳¤[ėÓŻEŖŚK ½żŅ¾õ™]‚eļŹķüG^kģĻź«+źžw“]ÓÜnR¤"nU‡Øķł×Hō6Eõµ›ĆŚ„ģP\ˆ!øa-ø'dœ:ü’‚÷~Ęö’¾韵W‚|>Ś`ū&æäĒ»j ;%k–ČĪö9É"Ŗßز>ó“µøČėW©™{kkiw «&ōfŚ‚ Æyų_ń,ųsPŃō"ÓÜ%Ƅ,‘»±'ó®ˆ>‚’č~”xVkq{ ŻÉž^A8é]7ˆģt÷œÉi›“ķ[Eõ9„;՟ːīaµ”Ž‚¹ūŪgœ—(śpkhŹę&ׇ5kż&ņ @jģĻė]½åņ^å[sgęļLJy>Ń4ŅFI –$•>”o3Į|3w?ČŠķCķE ²>„V”żŚéégoA†ĒqS(ŒĮ¹ŸĖ&āąŖC žÕézŻfĘr EE8<øžµˆ6ZG™o6Ł6¦ŻŁ'½VŃō‰fµø‰d•”ÆN­ćøŠĻ±į›¤óJF٠޾æ…\ųZ֑M}äkø“Ž€ą±?ć[Źs¾3·±¹Ōõk:øŌbpSjž¾Żė/I³{}B.ŃćdRÄå@u=$µ“·7“²nć ܊Īމ®ŽC-ä{u”Fą•ļŠĪHŽ%/ˆŗV“eØé×~ņÓNużäYÉOĒšżjdž¦”tł‚’Iäg¢‘2ŲS#źWS=ģAxŪŽ€[°XD–Ž .J»»bµ9§±åw^(žĒYž#hc‰HŠį>˜®ŹŠ¦¦‚PWŹ ōĶHķ £M²…­S'ķōŸqā ©|„‘FŅ6·sAŗ:’ iöIt¦uūŲcļRė:>©øžŌˆS#>•‹‘q‰óēˆü-}„ŖÜ[܃?tšfir³Æš&]ƒ;ˆā…-niĖŠõ]*StcX\Č3·õŠźv¶0Į¶āŅ6”/\w­Œ¶>|æŗŗåĶ£F!׷ҽLŅF”„Ūjp³[Źæ3 RŲG®ź–žtÖęmņĘĄp3“Pé·Ī|·Ÿ!NELb#~? 3A½eiŅBO^W5Łi¶`[Ʀ„gqŒēėV~"µøŅLBkx×ę-“§éY—7·WsZF$ž£•Q€Ćޱ’7ŽĒcci¦I§O.©$Ńā6h€\—nĀøŪ+Ū_–Pd©W=śŌ’sS»µß p“R£(ÉA®FāAk4Šņ ČööŖäfrŸcĻõ*ÖT’'ڬwuéZ:EŁ’ü^¼Óš”;抛3īz„ókĻi<ĻęģŒF8ĄĄØµi µš—÷hy r)r¶šóŽÆŁĆ²/PW9>õvĘöž+ē’ņĶŽüĒé@ģv7“Oy$€¹Rn¬5ĮóbĻŠA”›%ā]Mo©i ßÄ6ŻJŽ›Ę~"ŸGń‚ÖŃŁZj œŖ£`ēNI ø³Č§¶Ōōē"9ł•XŻÜKu ·Ģ&ĒĖĶŃG²iö¢’B›NXxtżß8Į¬M®t[i,®”ß)ÉĘI±Ś°e•lŅźŅīęi§“ģē,³Ö­=įŌ#Hå'§z@I¦XCŚZ³+HäįIé]u¶›™÷¶ī!øQœŠ\7:ųĆM¹IYšźŚpē•īPON{’Zńæ߽Mh¬¶¾aIÉeõ ÖĒ6š÷ö]¼>dŽ„ń]^‘©6”o¼6U ž”Ź69æĮ–\”³‚;ā¤Ņ®%dX’:uėA'©I§aįł/“čŚiŒdĻsÅy¶‹¤egŌB³+üē¹ Ö ķ5;ūU²ŚŪ4Ģ;ä*ĢZ>•m„Ē⋹å‚ʆ 0 Ł ³—øńx–śö HÄÄq×$ԟa“O–ŁL±;P¾ųģwv—6š²JÆ÷<¦ƒń"ŪģéĀ #ŲO—ĘOZį-ī'„Ÿ,6ĆĮ÷¬Ėł‚ą!_™¾a@šųÄQ<”AśWcu¬]k¾¼ŃX£Ć,~Rœ`Øö Øœ>†‰mö]¼®L-²@§}GąJĻĆvš*Ōćš]ŒÉ<‰–čz“޾s¼Ōʵ{y{tćĶ|žzš™;©ī-ma¹n|ņxĮĘ3\$ŸlLb'ūŻ –¤ĶÕ²¼–/,¬å€ćŽÆųjķÜ9cÉ,A©‘ō}cq²G"¤Ģvįø®ĀķāŅ[–ž0 ?6[ޓDžkŽ"¹æ×­-ą†k…vņÉ]„·Ūt{)õn XĪøŽ„ &ńC‡Ó~&OsrĄų\ä9Ē?ŻĒ¶+»‡Äqjmo}Ÿ’„NTāǽoŹtXł“YMKVÖ/oÆ­š3²79Ź‚pŪX6Łæ’åzńŽ(“°¤ģt½em¶øj©ćļ1Vlz’ŪkhAqĪ~µ<āR=/Ć÷6Öz|÷wšÅØJc`Šć!N85å:…&·­źgH^×3o”²ē·ėłVm™6zއ$ņ !Qņ«ČĒ"©ŻųÓDš­į“^hī­‰*ėø¹śRi•īWńo„ßÄ2č7 ¤źLŖļÉĪ@Ēé^k¢Åq§Ż^F¬™‰ü£Ž¼w Ł„joģ³ĪŲŪ•±©|Oć ­ K¶–ŻEķÕÄā=„ć9÷¢ĘŗŪCBļU×tųb·„@ngEf8ČU gש^^%„ŒšßĀ»åy»}(§œY­«Oöe&KW$kZ-& kˆć“WN #šnē¬i×¶Ö†a+yʹ÷8Æ>šv½®j^#¾µÕd±‰$fģmńœ÷é@r¢×Œ5ˆģŌ¤u½ĶpK$”.™¾fä`r(hj6+Üź7 Ę;†Š~R?•KyŖČ-¢Hˆ-\Yū3h!žWŌµŚwmŸ6[å{.¢=½Å›Ā±—.Y»õ=j:£±‰w¢]g¼bē2åÆšW$Öן’i÷1ŗB2ČG ׏óėHÖ źv67CO²†Ż#™X¬’ćļdńÅ{v‡„i¾“:yxf(żš9É#5¬ ± Ł}BåÄ$ļ|ŃŽĒęF‡†Åu×_j\ŽŠ?ō{”‘)ŚG’ĒåA¤cs,xc\Kg–KɚŅŽ,a¹õ®ÖĻPµQ ‰mp¬ŖgœšfźŸ`×vcŃG㊧¦xłüA Ūj¢ŚćNŠ|”I†$=H®:Õ,~±įgG8Ē„SJp“ž›ź½ß+«żĒŅ?³ø¹ń7†¼_u)kk†¼[(Kóŗ<Oę+Žš÷€üH—Z֛j/f‰8ł }9Æ"¬īĻļģ&1÷Qō·Ę‹;߇~ų{āo ZŽŻZFŠŚ€s” ‚qŪņ®ŃdҼwął.ķR ˆ®`<b~ų×;ŁōŲ8FČł‡Pš\önf¹²xœ1U= ‘Üļü āéōųdšēˆīM4ĘDRČrUŽxcéҦTūMB„d%ń_Ž?įÕo“ļ Mś¹Ül;‚s÷³ŲZņkCoÄbÕ'øó&'ĻxĪ '­rŹ-‡ŌVö;söpų)ā†óŽx;Xń‘ń~ÕwډÉxµņȨϦ{õņ$wמń\ńNŸ} ųŗ }>ī&ITc†•>¢”Ęē?+M¦{]FcD…·LT½ÅnhŚJŪ°–ėę“©u¬š;)KBkż:+•xāaxćŠó×暯ōv:–s;2[ä}ņ:Ņ;£O¹gQ×_PµŽ-–‡Y$·„z§Ćļ†Sjóx+Nńuūé/vĆĪ–ÉxؐŪüūUĘ0©M#čŸžĢh¶śåĆ%¼@Æ*Ēy!u½ŪÓiķ‘Ķ|#sā}GÄwšhW»ģ®ģī‹bAņę^}3[Ŗ:œU$z%“Z_†£¼øŌä+uŹ ¹ ;ę¾ėż˜ō­oP±µń™HŗO0E*%„ś×L"Ž9U±Ś|cšå©–ĪĶZźŹå’"p$d~•ł»ūY|6š×l<1/Ķ®‘},ę[q˜Ą_¼ śgüŠs¦™ÕJ””šŸWŅõÆŲ] K; Ėƒxä~y­«÷U2DøŲ¤šą;hZ™ęzŁ”ßéŅZī.×)FNÖ;sųf½ÅZ ÷…µYtsuņGYbä0*õØä÷\»N7<ā ¶„ŖéŚž­¦ĖmfśW–³@īw\)#%y?ćX~ŌäŽįeø2=°ķźMcj'#ŲeÖn*D¹^ąśWā=]Ö5‹ķˆķćš®Ź»<ÜK²lņķcĒŸš‡ż\ø“kė{yDÓFøłŠu=kßōÆi>9Šģ|M \Ķ6w¹Jƒ 9 „‡Æ”” #üčń;6–'1«;ķ+}ĒĀϦŽ|ų—®Eq Gā?Ży·pµĀēb·?)źNk_ą½Ž©ńÄ”YxvKOĒ#\_Ov‡”\sĻõ¬ź(£ć²|±xŚ8kŪžQū]¤~‚ŻŚŁ}š×Oµ‚Ž="Å6EhUė~+å=^śĘ?Ż?“%… Cē'xĮ¼Ķxõj.‡÷ž*TéŖPVKD}cx—–É›ķ…Až)5 rÖ¬‘6Ģ߅róŸI†ĆFœ-bž—Š#;^cńāźÓÄz6“¤D\4’cę89Ēō„ Yž×öxI3Ēt^ćĆS>œ÷Ń++ņ2™A‚®}+Ѽį›’Cöķ^ČŲéD G(ł˜z0ķō­ł™üē‹Ä9M¶Kńūʼnįļ…š’Ć6V±Ūź‹ä]?ĖŽ¾?šĖjś•ļą#{œų£–"ÅVŠÕĒ—’“SĻ’ooŲÓKŠ4ł’hŸj× clŪU± ł ܊ü£“EŗŗĄ±N_Œ1ƒčké#Øžž*čdz»Ō­§“O¾¶Üg 8üėa­šŻ>Ń1Ų{š“¬qTw2.uō³gfq>cĶvŗ}֓-“7’‹o73ФŽY³«šæ‚µ”¢ĪW+D·ū@Ō +Ü ;ńŒ×e§ė–ńĘöŒÉ) >o„I3Nض©{qqj“DAQ°sžõÉ®£/ŚŽĖSc<ć‚ KM77QČÄ9ćšķt‰m,­µœ(¬†-Ī óź=)óts„iś€avRCŸ•±Ņ¼Ē Ó-µµGmuwwłś ē RĪś}‰±yVćŸ}[QØHų„™ĶI¬Cš¶×.­.š%yÄOĀćŒWI¢ 3}<ڜ™G_ŻcŖŸs@J] ]ŚK o-×5ēļ«Įc…¹FĮ=Pf‘Ķ&hŁŽM(2³2DÜ Œ W?ā[0ö"[U…īŚeqū¾õ<©2 ģ-5¢Ž;•OtāŗūOiÖvWw”²jł=W”ĶEĪ?SµÓu1?Ÿo Īü£†śŠ“J“ū+OMMŅģĢ®ąłŁ!£°•",kņµŖÉ»\JÄ“e‡=k“›³…”°SĒĢĶu>Ótéu9/o,ķ„eĘccx³Ö»-CBŠRĪļX{6Įcöpų*}ķ[GĢō‹–u•c–FĪĘČĪźvķi¦ÜcĖ<…~? cE=CÕ/b]WYø’ā}ÅćC€°ŽŲõ>õÆ$OŽŹ!srēbń’€e]‹ˆ–]氕W|d.=«6inRyā-ń.[p}h9Łć^ ø2Ü·}Œ¬ 9 UXu­RŁJĀņIpćdH£4©ŲEįŪ»*Xµki.Æd”•Ū³šÆń7‚ŠÜĢѧ“Ł‚óšRŲŻ#Åo5‹]/R·µpZP„įøˆ¬OjWW–ķ%Ō‚1ŒAµO`I—ow¦é(ĻēV\Ē”®Į)ÓsiØ«@Ű$SÓŅ€=+Ķv’Łk}m{o$ĢŪ0ą¶1œ×œč~wŪVCm7ŽĘšxZvŠ& ]7æ#¦¶R唎ŪÉ9sœīŅn-wR*š~ "kO¾‘2`œŒg=qM±ƒBŅ4kĶG4SŹ]dWĘĀO?ΰ¹”÷:Iā…Ö{‹™õՂ4øÆ4Õt„Ÿķ—ZDĘ9eRrFpŲ­#>ęm_€n&’;U¼žŲŽZ°ÜžóßżjŠń7…“-CV‹ÄœbżŗJ=;š°R.čzgŚFK]ļž~\ńėQėš‚K āF=yźje7č""†%ņ˜ēČŖv·ččoamä3$}ßzŅ1ŠW>PńχüC}¬æŠš}oU[»]ygjē8LUßé×6X»/š92ē­7¶Ļ«“ż+Ā·ķŗMŸŁįF±Ē'?Z”x~AŖi÷7ön ŗõĻøō¬ßfc/2ž” ›/³]łŃĻYåqė\Ö„åC,šµœŃ7˜7e—¾=i$Üćl5¶:½ŻĘ°Ėö%"Iõ?„dx»RŠÆ­a“ģŽ[żŌlu­ģtÓGźm"™"€3ĀIéSųzĮm6tæjWrUdŪō¢Ę‡¾ų;ĀŚoƒ“›ŻkzAu0ù°ō=kÄ·Šk2%£N·)ĪēœVN ]šŽÆ¦^"iVĘ-䏫’ŽŽüÖø/xZ¼×¬n“‹-9Ö±ĪēJQv!G¹źZ'¢-Ģā12 v8įk“ńV‘„I,A{°ĢŪD™iļłb“ę)£Īī¼®]źsOį+[MPB?¼ČļŠé4ĻüCÖ4ÉßY¶ŽŽūÜFr’UUÅn§Cįģx~ݤ_NģDLNĒn×ĻÆēYVæm|G{uisz±.ę,ŻJżhbęźcč~»Ńb8Ķp׎ X6Ūü±ÆV|óō©sEó3Æįń›HYY&Ą# ņ+—½ųWżŽ—ż”-ļg ­ø{qŪéQ*”ō'Ā/Q·ÓāŃŽIõU €. ķüAi©ŁN Ņ"ĄēccśŠĶ;ˆŠ9 ö¶Č‡uĀ®Ö8ūę²/'¾‚Yį,z„#ņŖB9ŻRžW“ax ł²zćŠÖTzøNŗ‘®-į·Aæ§/ŽĀ·¹J'Ÿ?ˆķ5ēŒĄ0ēżÖŽ»m¢}꧜œńYĶ•Čś6³®iŗ~ˆŽdh.ķHTįœóógņ¬Ķ;RøxWPņŚxīe:…f©½¤ųŠŪPW·ŚėŒ¬Ae¬ż_ĘWžšKMŅ„uϦå>“Ę=Ō|]-ĶÓ±œ…ĒÆē^S¬źåšwžQģ€22i„s]‘FļZi×ģ÷”ÜÆÜ8éUĶżŅĢ,„²As"’Ŗ “łĘ-ŸWų)āA²·’śG¼`K³Ļć [PÓKĆöĄmĄž!ófŸ#1ęg—°]Ūy³ę‚ €>õhé·Oĝ’ķ!w ąTJ] ŗT†)P¼‹9œō&µ.ģĢīŠ¬/r Ÿ½ī)™%Šk£ÖČčŹÜ¼óė]„×kc¹>Żŗį»ż(-YLJD—®A§xŸV‰­Q‚‡ī+Ó­|1¦éžqžē«„zž=([XÕ«#„]k‰Ŗr `Øb²k2īŲoVp«&pøģ)X\ØģōXʬbH՜)ōĻČų·Q³¶eY„hžA‚žć°ü(ū¦é·¾+ńo†ķfb¶KrPœq’zcž•õ¢čzn•¬YŽź¦FŠŽß2ē©Ļ½zٜgÜķģē±Ō%6ćQk'GÜ·I)‘Ö¾_ų›ąæģ=ZøŅīž[y3ūŲĪ2ÄõĒjź§”•Iėŗv”-ĀĒiάäČŁäW+ źóxX†Kż9.ąŽaøKĄgØāµ”Ž7}ćψZO‹|!i Ā³[ČŅ— ņƒŁOZņĻk6Ś_‰£Ņ.lå¹F‰˜Ų tžµ”¤](I¤ µõĒĀķQ¼Kį9¼ xc¼ÖĘ^ÕĒRxĒøżk3¾+B’ĄļŒž+ż•?h‡æ4y®§Óµ„jg1‰­Ļ ļĘxÆļ›Ań–ƒń[ĄŽų³įŁmn4=vĘ+Äh\:‰ ‚Ą‘ĘyüóéTö7ó=“į’ŠÆt[Ūp& É*¦3Éō׊l¼@d¶ŌwČUdFS÷yČ<~„‰š?šĻų8söKoų3ĮŸµ?ü”3H¾ßšo’ķ©§|ż¤µŁßĒś•“_üxĖ%¶÷ņāӯׄ‰OL¾zz…ÆīŠ[O6)b‘ƒŹ˜ätu#!‡ŌVx„¬š:9O8Õla•¤±”~ęP@8é_üxš.£oż¹g¦Ēv4õ1ź¤fhIĄ?Ēł5ęIjCCóCć·Ćx;]š¾£ ńܼfM8 ]Hłž˜śžG¾5|;Õ¾üBÕ¼!¹{dg’Ł6å2IQšÖŠŌå”zGņŖ“l=¦³t=TqÖŗĪ{w,MnķN‘ą£rŽæJØŽeWwJÖv&–E…‰¶ŚĢ@ÜHéY›Ž)ÄüĒV&ģKl 7W Ķ#»Ä”‚³dąķ ˆÉÜ·e ü={Š·sn/ģå¢xšX•»Ž„RZpŲž§?ą‹?¶jx«ĀZŸĮæx’yüG ÅßžwIwk"”āŲv^µżJųkÅ֍‡|UņŪų“BČփnlŪż[ąuĄĒ<š8ė\µS©.‡²xÆģ¾(³‚ęÄ LL·6²)ĘXo©r!šöƒńį’‹>ų²šˆōé4ĖÅ`ī„CsĄĘćĻćŚøäŗr£üķæą ß²¾±ū%~Ѿ1šķŠ[i±]¼Źæ)¼…‡ī˜ƒźēšų7]‚ĻPÓ­“f9•³¼¾Ä~Ŗ*čĪ“,‹>Ōę“»T™§ ?ʽžśŚĀ)ćhSĶ@Ģ \z޵§*9³*Ķ ßŻŁ‹Ļ²™!įĻj,ZŒšH÷–ņy± sà ♢‹>įų9ńOŚĆop­ouuc–R=E}S„Å-ćAq,‡Ė;Ž[®¶‹0©PˆµÓ;®Å*8™üՏ,œ}=źāģr±·«»Ė³¶;)ĒŹ?•:+ųŽmŁ÷­/ŠEx"I]Ž6Ś×ęā°äŅnńę3*°`@ē­UŹhōł-Vk7eĄėÉĪ“ lĢlA×鈟ģ0ĶhĮÓrŌz~”Ÿö‚ĮĆpž“yńžĪśŲ³&ö9<ư’=«°šµĖyaž7‡£`÷¦YØźtVM<öŃź §•Ī3^]p[k—ZÄ·‚\~é[å@ éłÕD®fokÖę(µ-ßļZñе›K±w9”“ęĒR£+Q×1¬[ىź°®GPk+g“{YeIČĆ©=ōż+9DŅ2čĖq_É~É qĢŻóŒŠźcŅ5+k ›ĖpvÉō„„ö8+wQŽī5†fņ†rć5č:.²óY8Ēė…­2c/<;¦ńȶĖ$9'Æ|S.“ųō­>ŚŌ7Łe.4ļL\¦ÉŌå¶ÓĖ^Ÿ.1ĻCQ鮗»d<$ēŌ›°ĻP±”[iw¤-<©ŌŽ*£[Üź6Āü[hŸŠÖ/q®ē7«YM-¬ŠĒĶ“gŽĘ¼ēLńō6²[ßŪ[AvĮ£ČĄ=æJFć4mVk=JfƒĢXO!s»Öŗā;É'Hī&FÜóׯJŅ2č+ŌÓF¾½Žī‚;˜‚”F[5±®ź«¦éų²¶&5ķ±­2<&ét7“}VŪķn•ĤCgæ=;V­ AåÄŪś±4m¶„6Ÿn’yĒ8ķķ]÷†5ķ6į­akw7'$·© Cź‰}vc¼F(\(Ļ>ÜV’‰¼-ökxģVÄjÜ&޼ž“²5Œ®pśŚĶ¤[¢Ć,s§Ė•ėĻ’®ø-VĢCd’2•$cėL‰6T¶³hü™W,æŻ>žµ—kq5ÉEˆ˜ˆ'vzPA–…üs[Üä#$9JŚ“Š[N²hŅ?5Ć $zVSÜø’ß]^XÄBĀv—¦ī!19ź* ‘„£;išŠ‹Xöᙆrčzäzn™¤Ė¬jEbb@RĢ-éž}h.śhPÓ~ĆØŚķ0ŸŸ­^Öü'§źA²‚I’ä8u“?ųī(!ČųĮŚź—¼s©UÉ\ńĒ|Vž”§ÅöiŒQ‰#¹³× Dįõ[C¬ZĒøć`f¹Ļ j1,wQ@² ` ±ĒćI¢Ņ±Ś@ŚŠŚ·’EĒ<’*ŚX kIÆf-£€#­bŠĢ ‹˜Ģ >äpzŅŁé"y^ā)RĶ“ĄĄ¤C£Cdņ¬ŃŗJåzĖŠä¼O.Æ w‘—ņwXõÅō<Ź+ū؈Ī“ržĘ»ķ®µK{5·‘RWĘXóžy i³½“#6—W«­q*ĒNżļO’]s:>¬éž)ń?…n’Õ^Ęq1ō*{ēš4 ³ń=Ż‹ģĶuķeĒ&µ<)hѱ/Ł€GĖĄõĖ ”>Ķ0Źėg€Ms—–QŁźÓĘY‘s±€äÆ­Ą[ÅŅlÆ­”·sufŲ;ĄįOpkŃē³Ņ|YįĒšÓYB,°Xc»zž”žyoįk]įm”Œd6Ӂé[ךxˆ0oĄĻ@Z5嶟Ļ%ŹE&B…õĶgxĪ85[mņIGžŒrž§×õ  éļ4ėKšōµ“ŖŪÜńżkÖt¶*ŅŲ‰Ÿ-»'µa%³\²‹Ę:š§=«Š|=l„ŅŻSŒXą/č4„LÆ xvé|Dńć[c#°żüž3ōÆtŌ4Ū-0؟1žŌŹ\.xU ŠåŚčjŚ“4qžķxü=«#Y²øšxļ4©>Āń8ftĄļšä5VćZ¹6ņ\Iu“ä’s»’śFŌ"_˜õō©”nZ—sīĄŹåČ+ŽõŸ ­ĘżˆŠēÆ^µŸ+čK;¹ļ`ŅōČÄšE!#oBNćĒj³įū RŅ×QæP]Ų‘ڹć5¬vŃęį®CĀ|ž@ćµi^ųŠ]&Ök&S.󃓞išF%Ė]-Ģń¦Č²w¼nx£ÄM)>ŹŹbŽ ÓFšZž&±AĄV3ę»ī=q’k°ŸÅM6zr[ˆfŚX>ö1Ö“U;ššŚ~œšÖö”AŒ Ēŗ×5ājž±Ó/o€k;ķė £€Ä`žU•Å-Ž$Ųy\9\‡ö®Āxķ G-»‘Œpx Ō™.ĒA§o,Q mŹ3ŸZ©¤ź6öŗĮ mūŁz•³Ņ®;• ĪĒÅ×ßa² –+÷@ Пją¬üŗŹKy—”įŪpĻ4›ŌŌöŃZ%°„£łr?„W­ųRßE½’8^sę öĻz–kčy5ž”u¦jļkpŖ®§\Œ{é?“ī/†aŸŃYŃ·£<œž(,ö«=:ßS¼;F× [p0+ĪOžÕĀ“šéŠ34²²™KP¹ćsĶļõYÆ"YŽ#ån*¤ŒŠĶŽq<ɞ1śÕĘżG(Üķ£Ōį’ŲYŹ*ÆĖõ¬®ćšxž6N6w"™>Ģ•ZēQ»2–żŅqOÕd:to%½¹Ęvžā·Š³0“æŻY_4ŠŠń°#oLW³čW?n³ó cŒ{TŹ%(ŲÕ·“NŅ…ÅÅŹ,Ņķ#ęńé\µę”o©Ę#“EÜzŲ~‹čr&Ōʑ ½„ “ĶaūÜōŪō§ųW\gµ·yŽrsšCP6µĻ}ŖÜ¢ė1iŠ£1†rzĆw%utX|æ¼ō¢ę¾Å˜;äMˆÄ’x<ÖüVĮvJŁ :ōØu¬h³Ģ~$üIҼ »Ė¦kz“²8‰VŹåXōÉĘ5_Ą“oI5‰ƒQѵAó5½źģ\zt®jµŅÜśĢŸ…1øÄÖ›“[Ł_wSKāV§£E”$K!žéÉ*ltĄÆ:šģók¦9žāX#„.Ų³ĮĻjó+×OCūĮī«—åѝeĖR¦­5ŖW²üžgėģMš¶-GÖ®óķ|WŖn#'7$ąÖŗ.u½&ÖŁÖ(¦l÷HōĻÆ5É{ģ~ÅN„Ŗ8žÕā’Oć?‡xrßhn2Bp¾ų5łŻšļÅ:§Ā]PŅõˆšūĆ#”9¶Ęy~­![ ?zCžÕGŽeÉø‹šįäŗļ‡ndń ‰uk‰ĢvI;IĪč8…jj^ŸDæ¹°šŻm £ļ škÄöܕŚ7tYļ4{«ĖŌ^C*Ź2¹ąōõÆŅOų('ģżšļö¦ż”¾üZšõ–¢~Õ:m³Ķ§‹8ŸXDF2[:Æ%[iażŅN1øÕBŽéŸ‘ųƒ*ŠÄąqT%nJ¶~q’ižóćšĆ_MmīÆ/#’ĻS†ckyo(ŚöŅ”ĆFĄņ9ą×Ń>Yž@b;Uŗf¹źR±śU 5u±ØĆ8W •ćœW‹jŚ}ķåźGtŽ|Q9hwTžøō®cŌQŠō/ųiīž 8ąiēa•@2IÅ]ųć)­ž>éžń5ÕĖé7±%Õ¼e ÜiPÜiŸiŅ­ä„Å#ČŁüźāś•kū­ž™ćĻÜ’kź t$ņŌķ=Ō³æĀĻ…Ž3ż¢<į߉ µń¦¹Æ,ŗFŸöˆÄŃ)1³1e~UēėSŹĪsÓĄV«gIßµ“w?)Æ>\ü ųõūI|ū3iś_‡|cØŁéöėĀĆhef‰@=±ÓŪĶCQŗ¹•ķm¶¶x'žuĮZ÷ŠśŽĢžæ—PĘ?łyĖ’ŠdšZ]’Č”ŸÉ­e2œ³»æÜsŠäžĒ×ĘāoģķJ{8Wķ®»ĪīƒßōÆ8šuāIöpŠ"3pŹOCYR6GµĖ‹N¹•l”sĄÆń葦$©PxĶwį[¹ńüG™C ‡i»$ńō²j:E핸ßr!%?xśWgū"Żėń>”t[ŌuDq“‡iÜ>¦½ČÉ£üßĪS­Zrovw?“V·£ėPųbĪŻ`Y­2¤$ƒtŽF3Ņ»/Ło^Ō“żĖOö+Xš_.D0ƒ#ĘFG8éĶsV‘ėš.U3l4b®łÓū’ ćŖÅ$ö‰jB’¤‚{×Ģ?“m#\ŸG¹“™ćŸŹņgņßdłwÆ)Ģ’@©ŅŁ”į(žĻ„Ų•lĘ# G|×nÖrźŃ\ĆnĀ)„LS#øž”FWŠŚq±?†Zć[Ӯ쓨åͲøņĘLmœdś טü`ų]ńįꩦč>+·±¹ŗÕ¬“,$¶rÉ“‘ņ¹ģFEvŃ¢÷?$ćŒā6śŗzœ’…4t‡Ņcń£ŚG.Lqžė9ĪŠ3^ćļˆś?ĆÆ¦©ØZ-Ģg1ĮlŸ~cŠ`Ł­&¬Ēk4åd|-āk#¾ø×üE|–źß$6*r§n{ž+Wį”:ö«ytņDŗu¼l)~_5ˆćēҼŹģõrĢ/4–‡Õ~±†ėĆŚ„ŖC§Įml¦GŽ’Ŗ±4] xŖź;AŌģ-¦–c<’|›čOé^\™śŽ/³²Z ńg…|Yą+ōO%Õƒ?–—6Æ˜Ļ¹äā¼›ÅҰęķČ\$k“ޘĒ_jś ¶?ńĘJ<7^?Ģāæņd’CčŸų)ßķšīĻĄŠžĶ_ õū]GQ½ŗ[ŻvńHhįMĮ„{Dz«Ēl}kņĮ—Ŗņ‹˜¢PX±äĘkčiŌ?•¢u7ig$„ˆ£ §–Ē5ē0ńDsĻŸŠ, RPc8ī}ėTīĢä¬y¶—§Åq;-ķÜJY°Nq»'_U|ų«ų£[Tń*^Śx£Q ŠVKŒvg·½tÓG=F~ hڇįėm3ĀZDZ˜‰°"™½r„vŠ[żžätC·ØĻŽ®š{mf2iᜦĮ—č?Ł®÷BŽŅÖŲ4–āIpIjŠó¤ō Ć·’"T9^ė—±)5ķÕŪ°|®Š¬{ƒŌTI˜–ś„ŠĪÖńØUļÅ6āŅīk“s"4ćsZŰ&½Ģ>LjY³Č#­$"Öt»‘cg 9céSĶŠÉÄęoµ{6X­ß{)…TÓ/­&¹™.ože;ŽśTM_1­‚²‚!^ŻĶyĒ‹›Ķ”](l9ǰ ‰Hņ}WĆćPF›Ŗ8ņ’ˆūÖ—eØÜŚź–r˜bp€²õ8pö¦%>ę,¶6Iķo¤0L#- r=}æśÕĶč×Ó^\jåĀ,™ūą€xüé ˱ŚĒwfšT֗6NÓ»ó÷9ō¬É|«Ü%µ…“’n\ «šbP1>!ľ Ņō­ÉĪ©÷ī~Šwć§½exW“ńU«Az’iש!Cš~œŌµr½™|x‡Ć¢śēAµÕŽćUµr²©O”Ÿ÷æćō{É,üC¬‰““Ō­§·h—œ³zŹQ±&ՍŒĖ2\JF5Æ$wö÷ī gŪ‘·=}©k4O6Ų.¬å†ä7?Jó_Ī‚Ō"5Ć€‚ł4֌ Æ]M6ŗ†ų1NŒ;gÖŗŸˆ~҉{«I ““__½.TZ‘Ń_|8ųiŸØéŚ”š];ŖDņĻ„ēØĻO„yŚü=šķ«“–%ÕŅļA#7QŪ”FĶsMįĶ]]4öæBw ē§Zō}#Ćŗ„–ö±½\ó}ģż)ObdģzM—„®5„ŽHl’~±ä ®zņÉ5¹,5‰ćŗ„G\ƒÓ‰››9Ū½Zi5Q Ä÷6ŁPy_jė&ūmé†émä0£ ķšžDMKĻĻ‹sc$īš ;BŻöÅyę‰ārūRHtż6V„a˜Ī;ńUģü‹ö}ĻYŅ’“.&ŽHō’ܾCaq‚;×E©j~"]m&-/J[”! #|ģÜ’JcöhŅš/ˆuØ,ę‹SK{+•]³Ļ;}9é\Ļ|Kö‹Ū ˜R #°ļ“@œ ŗV”ŹĶĢŹźųłĒéV5 Ķ M/Z›UpĖ 'äĄĖöü«H7c.Ws…¼ųµįivÖ÷Ń&£gtŖ`RJ…qķŽN+OCÓtŸY\kvVŹ–ņ’_ Œćm•ŹĪęĒKÓt.ŻmäŒÄrk֙¬Ś.1}LÅu¢ė­å݀ЂøėNūO¹Iv‡‘!‡ 3H|Øõhtž‡łÖƒGé$Ńü`ę=9āDĪU[‚Ć5ēßģ&Š“ū›ėøxGīŻē›zc½\nZm#ēM=Æå¾ŽęYŠÄHŚ “é_dč×Z]†›cØĀ`ŗ”ØŚ@x u?SWt53ĘuŪ—#q)uRĒ ē’×]7‡Vkۘ,¤š[h•qóƒY\ī-µ#Ć÷*Ā{ŁłM p:ššk^ ÕüD×m;v_, ćĖøöéHÕ6ˆōĶ:kƒ0Ź7Ž=ÅurųNX¦@D’oŹÄŹ]ĢÆ xbѵˆķõ½Ænņī!” (ģ+Ų®Ÿ…eĪ‘tõi±vš¶Ķ2  šÅużŪFyōükkĀZ÷‹5X%—ÄŁŌ‘dņ—x£QŲå^•$r6{ž|c#³ČY~ą ÷¾¼×1ńFkkæ…>)4Iy^t]|ÉZm’Z9éYŲŁ+>‰$Ś‹č¾9šÅŻÕ„•›¶«ŒÄąœLś3ćׇõ=Oį,š±µŌ„Ģe'Lec#ęR?Ƴq±|ĒåéŽM>󬆯ZŌ©U“œę¹»Ł"wxÄ,1Įćƒ[GqĶ£æųcāY¼-ā;U$ž/8o*ĮLYć5ś—įūĖ+ė8. ‘g·p •>ŻėncMŽfŁ00<{×ńWĄĖćŸ°i¤7°āETČbO^•ĒQźtŅ•Ī]oK]7Q’ŪpFF)€rWjĒ…¼GqįæéZÕ©æūB”bņ[µfułT|LÓćń­ŸŠt»{_&ķKĮ‚ •~ńśšž…ą…_µĻ>k±÷Ä9 >.ŠRKķčɵ'œ‰“ÕKĘµ w{¾Ÿh¶Õ!KĶšM  :ž kīoxŲjśZŁ_˜ē™.[øĒƒ39/ˆ’ ü%ń»Ą>:ų1ćk?¶ų[^³’Ł”ŸiĆ)ģx>ĀæĶ÷öÅżļfƍ¾?ų«Įv³hחŪoF­ŁĻ–ĮŗTēZQ·5»™ÉŸźc@ÖŹ|„Č-ž§8Ås‘Īfd-ØOqĶt“} 3‚°¬q®­=ai20™ūS2ę˜pT±V‘Ūޚ`dRĶ+ÉߚŚ*Å&DŠš€oÜąriŃĻ5›Ø’;`c³7ō¦m š†­©čzž‘āĻ\>•ā­*ź;ūIŠ|Ė"„£üöƳż³dχ_å–8¼iié> “ó43GņļaŌd€Üöq隊‰ņŁQ–‡ßŗ…™øI#!ŅĒÄÆi·:ÄaAu˜õ‘Ÿ^Aż*c"\OĮc‚ī¦ˆ…VÉ?.0{‚=k#Č[vŒ'Sļ]Øę©­"ģŅ‹÷F~÷µDÄģó]ņ9„!Zv0ąŽā«:©±o˜pi™\³Ö驇{‘“ŒT^lšĘAJć© #!-ēI\,`€GĶZŃKR(%™ēšŚl÷æŁ×ćFæšā߇~*hSʶ«u„õ³GÅÅ«6:śęæŠ#ö^ųŻiń/ῇüRm­ÆļVŅmFd`ÉwląÉ#©\ķöćұœVĒlt>õšœémåh®BžPšŲ4X 5&¢d:¤v±ÅŗDąī~é éż*įØlŃųĖ’ĶżŽÓöƒżœ-¾µ^%ø„ĘŠ# ‚=©™EµæŚŲ¬¹‰HČĶušU”V÷ZtЇu ó@£ęuz…Ōq_½ŠU…Kn  ķ]’‰5]GL/ ņ]²į~vĘL}+9DŚ ęäŌÖH[MxQļ[ ÕZa§c ¼¶ńb'9*2I÷üØLrEģՒŽuģ¼. r–×b‡ŽPhČŻZAØĮØĻØŪ<«nĒAķ]­†¬·–”®$*Ą`äd“Q4"†«yš\’@A85Ąč—…ļƒ4[įVČw¬ģTecŪ”ŽŅ[U•āDd ćõĶc|BÖāÕ“Xķ&²ƒx—@8ü)&r5IWU·†į'ģ%x$Ž=«×õ Aķ¬nę1¶QIÉ OČkĢš«jÆ©Ķ$7…‘Nsķ],^%»ŗ½‘`ø,Ū>p£ļ}k9—2»2’ē`/ł×ih†Ō<‘”+Ćg½Jv4¹“ØĻ Ŗ  ‘¾ÕZŹ_µāŚē;Y{R'™µ] ę7Ū9'ęĄ^ÕÉė7זZ]żŒķ5ĖüØ7cn}: Gc=ż„­ŠŁŪ„¶Ų•\ē?69>ßJǹūFŅ„¹ÜŒHąõĶÅįm­qu>ʉ‰éÕF*ö›±¶‚·ČcCõ$PTQčöVS¼QŽN˽~d.pA”Øjś]¶¢ž Y#}]•>Ф|²N? ög†ėÖ©«j—:¦Ń É!}‹Š{W¬ųoM€iŗ`ķ!I'“ųPKŽĮ¬…¶eDʐ tÆ<ńåŌSŚXG«, ^£ń Ŗh©§¦` bfn+Š4 Ū#•G?Z \ææ[čm$“Ž™«×Ņ_D†³dˆÆśŠ2>”ĄŪ¬ {woØŹLCęB1ĮķÅZÖu»"Żłó(ŹČ9ڵ°xMµ]kJ’ÖļJVŽO B6x8­ŁLšh—Rˆ8 l,@ć 4‘å:Ušßź76¢R§p9ĻŻĻ„w×)o¤XˆPĻ=ė°A“ry é„zn®-ō[»Oµ0µ•”?ĻŪ"³bńz…ģ÷ņĻ,°Ū›ęćnh*Q±CFŌ¦Õ5[™mn”žQü#ŚŁŚźeŻĆ½£'·½fƃ”“¼y mŽcp7ēo>«Ø‹ĆVQ–k†)—ļu4®§ā/&žÄn ƒp*sÅsńY$Z$d}sL§äČx,Ąäd×F˜­kk14,Ļę)ėģE#.VE‹tSltśQfÆĆ4-¶D ēü(¹P;2ś ęō?žÕś5jŻjńĄįā’4!Ŷ9Ļkz®}ŖI%ēŪ£i™ĒÉÄ`’ õ®®oŲxŽõ£¹ņüūp•O4ΈǔÅOįȵä›qTŽHŹäĘ»U²²Ņ4ؾŹÉ=ĀgœsA“ccsĄśĢĻp.,» «s€i5ĖŪM:9UvĶ+¹.Iä @ćsĶķ¼Uey|ÖP‡B§'ršyģkŅä¹óbņóG€QQ2=™åÓĮØ\j7v·x7-ÜżåĒ\v¬ Ē[kybžd`z½éS…™6™åŪ ‚XŒSÜłŅ$¬Š©JwϽTž†‰\Śšœ-źÜj Ćk µŚė3ŪL—±@Uķ6€Ł8¬MuGĒgĶģPĘŃż•[ Ŗ3Ÿ”Æ]ŅąŗŅ’.9]c }Ś !×ÖyŅK§9Ś„‘Šń¬fi—P‰ŸŹß¹Yʂć–Æęžöģ<”UpNI÷©"Ņe#qĄē ÖʊZ¢Ä®²|½»OŅ굎A01yŃ ŽqZrŻh;‰šėÄqųŽźēOÕnl“õEyƒ7Ė€=~‚Æ?¼6x#‘®™å¦89ÅfZ¦q~%ÓįÓŁļŠ4’ić­`^xŃbŅžĻk•¼,9Ļ w¬ÜUõ-SźyõåÕÄæ¾.ļøī,MDž"»-ŁÜÆD'šŃ*=fŅßķ–±ł€— ēÖ¼ĻĘšŽ„‘q$ĀÖDįKt&‚ćO±ó–©ń÷Å÷³[xnņk˜ōל‹seIĻæśōß|GšĀÓ®Æ/"Տ>_LØėō ėŽ›Įå½±›BšīéķU¤X‰Ć <óų ōųŗß^²[²ZŻē˜_ļ%–īVśFV1ĘŽq8ö5=„Ź¾ė¢»ŽƒžTģtW¶ėg¤‹ĘœAl+—Ÿ¦jŝ宧¤^B®³°åNrjŌĮR{œ¢éī& ²Ž„ÕĖé~…ķōv±Ź ˜ÜüĻŽ~Q×°­9‘ŃOŽēßžŌ_5łtķ*öĻ]šīĘ*÷rĘĀ9yźGõģ6ZzĄ·z=ķ¾”g,"H¦Į‘Šš}Ŗ%c©5±Ź\}¦öW{ēiOlжwGNŌ£Ņ'KK±o,ŖĪÜ)U'śt¬y»S”gc•½ųQšĒ5oEńśóā iĪe“7 — °?„}CńĻÅ’³&£šwö.?4Ķ2ĖǶžū'ŽÕÓl«l‹ŗV 5d‰$䜐A®iWŠNģż{„üγI®Z.œ/g)+[~ŽĶķm:ī|κߟ3©8=jüŽ&ŸŹkxcc=kĢ«Ž[#÷¬ƒčdž§YTĘÖsŠč—-ż]ŁČŻź$bą¤pI( z¢±ļ4Ż7H‰¼Azb·żÓq/Ė…ėŒõķ^e\L™ż ‚į,><”`’ģ‘óūxõ!ų»Å’>-x+\ŅŽ$ŸCKf‚=䣂ŖōebŌÖĪV<|ETiM_ņ>’‚‡i~ųeūd[ų£ĀÖɤųWā‰m®•ŽßʇūD²ž8ÜŹĻrX“×5Ļxz÷ķvɉ•݆PÖ¹źŌDšģe §-ā­÷h7Äw·ZvŸ5Āŗ^ u#5Ći±ĻŖĢŅČ  Ēøī}„ctwŚģś£myĶ4.®­žøÆ¤žk¹²ÓŽ"ެN9źkĪÆkÜž‚įl¶8/†œcé’ü‹īī®"?ČU˜‚$ł® Ÿc ˆ§ó.’x¢G–6Œ”g¾zӖ-|ŚF D’“xéŠĘ S*ļCÕuĶyt½ā,øŗrb+ƒ‘ھR×õ–K-AÄcä<6psĪxÆK ŗŸĪ:ēŽŽJoY]æE·ćł?ė~-’;[Ėäq¾lsķ_Pü(Ņž%|?żž$“ĆzJź"æõyüH"nøĻ¶kŌGńä§£“ī|ÓäMń/T³²³†śOLźĒĖf ĆFv޵ś;ąOŁxKĆ2C$÷ꊲÜL˜Ų‚sĻ9ę¹kģ@ųĆqƊža%„5ež)o÷-×÷‘Ż5ÅŹ¢2 U< Šš?‹?†ŸāoųŠĆQ¾±µø·Mn?ÕŹü‚@śƒ^d£©żV©¤v>ßOv \ ßZéļ58ZÄ­Œ‰%Ų#īśw­iĘǟ‹Æ-YŠ~Č’|šĆā’Ž->&[ĢöZ•žĖBŃnŽf;æP+æų—®]|JÖ³x×&(KǧC É“·ČÄkķÅztä’?˜ų–'ŒYlxŸˆ5/čŚW®Ém-Ż»ī‚Ü`É#ŽÕņ·Œµ)5gmbś0×NH† ‹t=@?™É3ĀĀį„9¤śž¦|=_&ŗ†å%”į³^”Įų¢xg±ŌõY‘~tßņœ{wÆ2±ś¾I’ņĮ;Əō-KFŠ Ō. ˆŒLńŹT…ļŗ¾ż~h’¾ėžš’‰ķmüu9Ņą¤“©ĻF¦Ÿć^t©³ļšųU\óĻ|ųÓšŗ ›OčŚ£éŠs-ĒœŅŌ†Éśę¾j!¢“WI£f7 §ŌpśbŠtŻĶqŲhŁrõ:Œ’ jŅ7ö…ÅÄ xä“$9Q“žAė_Eƒź&ż#ó)R£C/V“›“曆å«ū#Ōæ³ óIf· ,Ža•†ćæŌ“]žoh’ÄDb_›#øéž5īSGńõv’7Y¢–(鰌zטų“ĀWŅ ŗ‚=ұ_}ÜūWE=Ļ"¤±’fĻŁ*’FžĻų•ńmõ4¬ÖZ{ĀqÉĪé3Óq_£Miö‚-ēHÖŅ!ˆQ(Œ{`}+®1±ēUŖP)äøH²Ŗ§Ö¬½ņ>ꑊAō5gŸR}JöŚ…¬r–·^c]2k±>Ÿsm5³Œ Õ;£’HēTEt°Å#°ĻŪ»ģĄ|’ī€š{šČēfæ‡${ö7²HĀ^µép\Ŗ[ČÓ²Įwr:šĪQ2ēgj~!….¬ncYUĪįžµ›qyż©*ŹŃ“2š0N ¦”ÜÖå!„ĻĢžhņ3“uŠ[iCM…[‘éŲՑ)t5®ģ]-ĢŽø Bóޱ5‹+;ŪO.4†'U±ŠŸZG4ž§‚ė’jM㽩G‰9äYŃų–;™ÉĀŒķ{š ƒĒZnƒÆ_éöV"źŹ`J«³rIĆÓłU•šN™į­8ĆoØG<±…Vv92zœŠ5Ųå^ö‘KŖÉkŃ4K¦Ś]ŻŁ0‚w„ +Ęß„¹YŸ-ų–ÓWÕõĖÆ·\Ép7īf1õSŪ9ķ^…įķ?MŅ>Ė­“ŹČ˜%†I>¹ |čä.<-åj·z•æ™,¬dØÉ¬M/Y{­JhąƒČž966G_’]KW"Nē„ŚčēQš1‚[õojģćģéie`ŠĪÉ óF3ĒÆÖšŠ’’ŠR[UxQ.6£‚qœĒ?B+Ź5»!eXļ š )&Ģ…„æ„Gt†¼Ž=ļŅŚł!²”Ė3Œü«Ņ“ vóI0jZ}ĖŁČē*Ć;†N ϱ¢)š¹XōżsMÓ¼/ąD»JŽŹV˜C ńŒ>£Ś¼Ż¼}aj²\iö:ާä‘ó“·cZXžs‚āŠt­SM›Äo§,®ŪĄ†0T!ézWUsw ŪkĀśŹOµIp¢L†ģG|qžh±N§ā(o/„“·µ’9¢ĪAŚ~‡½xN½«Üßų•-..…Ŗ6FŃĘćŪ>Żh2jĒ”éšV¢čćLYį¹o3Ģ-zäć>œž•³­2ÜAöhlU9lĆæó©r |¼®«0oŻžxė[‘xūĆ:|ͦßF)(Æ#õ`OšZ\ęG‘ü@ńÓŻ\_Xéŗ4·‘pA,8>ƾŃ£ń¦—®ßjP<Ļr·¤ųaōĘ*“-FĒe¦h:ļµ”×¼^vń;{2>VßozčeŅQµ 4ėE{EŪ“ķ<©”±ņžƒ¤x^Ī ā[¦{­M1å¹ąĘ­xv# _ź-u|o­ē č¹žu“%¢ßŒµ õ CI²760¤C÷čø-œńšń ėՆč,ņ¹\°ŽGó©2’±Łų#ĀŠźOyyuwm§Ē&U9•ū(®’md[[µ“Ć` gŚ©įn“]GW½[ۘān²īČĒ\c±®öĒĆßš¤/*ż˜ 1>޵N}‡ĢĻgšżÅœV—1“aå‘~B?‡¾kWŌģ W“’lĆ $zb³)O¹.”åXŽBD?vF[ƒĶxŒ7–ŗUÄi«ŽG¹Ūa?SŪ4ŹęģhźÓ’g[›˜GŒŁ-Įy޵ķzźĪŚÓI“-+¾Z~ŹcĻJi½ƒ›[üAį[Ļéŗ<V–ö7Qu ż÷Ę2sėZŽš½ī“=Ķ®«©Ž[²īʉ0ƒ˜ŖŠøŌ‘Čkö„>£y¦čśę Ó4€gŹśW«hwš¾•mluˆęžA-# ØŖpŃˆ¼A5ūi’d€ -‡^½ŖŹĮ4qĒxÆå0®?ZÉ«hbĆC±žŁ¹7WšGpģYYŪ 1ķY#ҵldŽŠ}”<Ą¤…éō¢ā°A‰4Øbū9K”åä=~•nŚņKm)& ķœöüió3HĖøŪ­QͳD…˜”#éōÆiu™oćYķ VpĆę ąøõ«‰\ČśOMkŻWL™%_ø™Ėn÷ÆÖ|!Ö余Ś4l,3“z±7sµšo‹ōßj6zL³[ZC$ź%˜6ž+č+ˆ.õ On©ŻŠ…ĢĻāŪé® Ć°yg'æµwŗ=ę‡Ķķ¦™n–±‹!Ü}EKK©G+ńĀvڬ6:­ˆH?ŻĢÄä°ēÓņÆ“ĀĆTp7ĶĒņäpk9[”gG«iÖV—¶ ŠÅžPCu擶Wuąū iƒNŪ¤”œ*揭IŸ9zņ·ń$ 9G2Ć{ƒų×1|føķį„[nr6ĘqéS)ō3¹.§ŻiÓĀĄł Ü4 r¦½rÓYÓ£·xęX]2+e±×ž•Œ›6ŒYāž(mP¶¾µŽeūS~ģģžź+€so¤ŚĒiŻ•@sRÆŌ×’Ū›6z­Ä9mĘŅýjĻ­ź— u’K"›wē£{Õ*%šōų£Ä¦ĒPø—ĢH×å…źkѾ!|'ŃŢͤ@÷¶"%,Ī0Y»‘ųÖю…(čx£«ź:LŠZ[’”F‘ņńķ]Ƅüa~ ø§”bøÅ Ö!Į³©HńZĶܤQ†!²yōõƟ¼MŖźī'XGŚ­¢$ĘĮ”SDghµĖ9į“ŽÖ4Š!†-Ī? Åń/‰µ’ßϧźYK"ŗæ2śóҶ5±nķ|%¤iŚōZˆ…¤!ldŠą|wńGSÕ5;Ķ6õ#{eBą)>µR…‰k¹gĮ÷z]ÉWT‚yd9_zėõ-BćķVŃŁGå®ķ®3ӊŹKBcøŃõ ®žG†]›2¬G>õ7Ÿ}bæ½}·qÉķõ¬n} ­oķ"Ģ??;܏ęjÅփÜīC“œ2Ž RęF†TÖO¤fx›|m€S<ēŚ¬½é1<›mćóųÓ¹Z[)»x'ž'“kep3ƒ]^§Ŗź#{…(蔞…{RLÉ£"š<mvĢ}”µR==›C5ƞOLŽE6ÄlXhmlü¶RĖČ#„vv’Ņ沆š/Ż :Ņęē Ė«›]]^’ČĢĮ!'Ew«āHšĀ8ŃZTƒ»=)…-&ūķŃČgøĻ=Hż+Ä~2Öt›JŃncO“(Üø UF7'·”ź>1½µŽ ĶnšY;nĘĮĄōō®įaŅŚŃ­f¼ß3%Éź=1[Ę\ƒ¼KįĶ"óD „Ÿ²jœķ\exĘHėŽ¼n’SŌ¼?Ó¬$&š~rOįRŠć¼Gā;CĆ¶ė…Žķ†Įå†=kį½ÓRążž4d@ʲæSÜrqX“mčzƈ~ Y¶5µ½·Ś§BŽ1“.?»„y¾™}$NŽŹŖøłöŅf…½SL{č|Č2gęRz ā/<)pÆ/–­+jiĻsCž=ZŚĖūQ–0¾aŒØnWޤUZ^[j“ł®l īź~•¹ÆZjGķ)WƒĖŚwGұ4ū=Sŗv™nlŪwXĪ0*”éüGsŗLw³\¬i„ÜNTzs^o}Ŗ¹Ē0oœ`aŗŠĮÄģĆÅ#īėÆųĘų^i÷wpérŖƒ$DWčkéæŁĆJŌtė J]wUkė¹Ż‰åł vĻ?…}i¤xķč}q²Ö’Ǭh˜ķ8śóOų•fn|'Ŗ¾‰-¼.°‰J?Ž£'ÆZmhf~fÅs}g®> Ęg,J¼ 2 ń]Ķ÷‹ek!²3pŠūÖR‘¼cŲ儼ԵĺkV˜įCüæ(ćµaC=Żö³Ģ.Ėb3(<×oēI+šhK‚śśĒK{+(+lr½0ć5éš6»ćoų3[šŻ¼ęćO‚2c3¹˜uĒnćj^ĢĀRč|wāŻ'RŅd’ÖśŅćOxĒ™åJ„>ŽüWČ·13±˜±Ēz„+ÜĄ’F‚kž`‰±ó£cī+ōgö|ńDŗī‰ ‹I¢¤%›%Ąś}+bœØķš5*ŹĻ^{V²N‘ĮēM¶h•1©å—ø5ĖV6f‘©ŠüśųėįĖmÅwwqE6WL;IŚX“}ś¼]ŚąBˆ¤÷Ļ@+®¹õ7Ā=N/ų{ļ’ 5"k‹)#/nv˵Xų/ńKş³§Ē†’¼1yō«…šł…Uāę A錩tDžś~üCšĒƟ†ž/ųJsu¤köݳ«nÉ“eIł#ź {oƒ¼O.›Ø"Hį@>õŒ·f}8ņL~Ēwd›åpŹ>éėšžx’ąąOŲōxĆĮ>ż®üŁźzr­‡‰"[}āxyŲļŽ€A'±<ÖŌŹQ?ŠwH·²–r&ūDŸ:2Ź'…üs\UĀ8+*ī~ī5ŠsT‰ÄYZ@ŃėOMŖƒ:ąŒŠrÉv~č2Y³Ž)ŠĒ#L±ČA_„R•…ĒĻ8‰Ż2£f£ˆĘ."‘£Yā%IėZE4Ķ}5¢ū^I(Ŗū†jż—’‚~ŲvŸ³Gķq'Ć/j×? ¼{;÷ӈā†čDųé–,Ėž£5T£Ķ.W×óčvCEcūīÓŽ#;ż”ćĘÉ1ı‘•oÄ\^æ§!ū\aCC:ä}ŚóŖ"ŌnŒ¾+ü5±ŸĄž!ń·dxŸFĖÉl «fćå^äĘæ3¼yą« sĄ¾'š–© ×°2µĪ”Äy‹¹¾ņī:vā°•ä«ö‘ųI?ĀoŠ•šõ­µ+‰§X„P©nG8OšÆž%xX<`nlņ{ ķ„®ŽZ¦v8AŽ˜ĒėOŪęĒ–ÓŽWƒ¢\G @6/ß³ä9 )SėTcbxćXē-¹¤ ē >Õj_³4 Ņ—É Ę‚TJqŖĀū£M¹<‘ޤVFņŲī;PuSLՍbøŒŪM#¼,yćčkśE’‚žŁW‹š'āf« Åʖƽ¼lK\ŲŹp ƒŻx90*dŽŲ>‡õq¦ź:‡Ėjf׎oµE$qŗµqžŻF8õśWŠŗDvŗœjŗT‚ļD¼nm˜ą‘’3\5"oÖ ÄÖZ߇°ŃōĖ}F[”3Źæ"  ļ\Õed3É|ux-5:9žÓ ķĪ+Ł?gļˆ h×>¹V‰üļ2Ė"“ż3Z`Õ㔜”sīˆļškM°ķI6ńžę² :ĒīąB’1s¼rĻ„wĒcΜNßĆrŗxÆ! ŖJē»{ŠźõMF°·’XćgtSø7F¦‰ÅŻŻĻ5Ŗ]Ūۘ¢|ąŽĘ²4ė©Č1ąüĒ” ŠßŌu[A§Ė4br@9?J½¢ųvÖhÖīY±äƒV¢EÖ募é‚yf0+ĪļzēÆ,|…)ɓÓ¢DJĘ–—d‹ö„lH öü+#O»{;©ę·øgcĘÜō¦EŽąė¹“‰ūaµĀ&µökƒ)[€ū¹ĄĪ9 ØŸD蚕Ģ6©äIęoPNį׎•Åų—[‘äkwŚó#g r3Ś„TšŁśCę¬l]p͐ņ}«[¶ó_Ź‚J£9Ępkh=+išõŬ3ŚÉ(+±š¶«’ŚF¦Ėd>:œV±°XŅ‹B‡Qœ±ÉŻXv©|Eą9ģc²ŗP ‘ŗ0<Ō±¤Ž^;»Ÿ ė6Ӌ¹„‰pÅXd1’ ÷ķõ‹DŸ–NXŽp+9¾…8”¼OckvÖņ4:‹6ŗ®=kʖėVÓķ¦·óXłƒ®~õfJF¦‹w-ĶįMBLøŒg'čϊ4č0C„N—×RĘ|ȘqÉļłRf±§©•į[Ų/ķ Š<6±`–?Ćšāµ›½2óT{kvßņՇBjyƒŁµś„“øAdēž*ž™0C4ĘϜä÷dŹ&ļ‰5k9‹COŒ€8ÅxtęiŻä™@4ÓCbÖI¢ĖfR£Ņŗ}6ķ&]wŒąö"“ę&ĘõŽ„öh­ģ^]²üė²š•Ὁā7:33ōŖ“ā}BĪ)’$žA>āYp=*–Ÿć(ĘŪH 0“Ś“v=GH‚Ć[–»Xö\‘å•’čS@]ÜĄÆötŲŅ}'łT;t.:žCyw©mĶr¤ö\īéĶwĒĆZ<ŚmŻį„¬åSŠ’œŌó2łQČ4PiņoT—åełĘz×"¶ņžhČDĻ PäbՋöńĪ֏hńĀ°Ź ‚Ƨ½s¶¶±iבBĘ2›½zż)õ7ĖžEB6ÅĒć\~¹%ʱāұ»ģ„F6ōtē’ÆUŒķ4K+kfą“Ū½ėRų§Qw¶}*їtńķnyŃ$i t<>;_ųG®¤“»Ve #Ī:œ×ŖųsĆz\vZŠ3-ģ¤dĆqXČ聗«Ćqbmƅ;ŪƒĻłāŖG¬j!{H§ĶYŃBMcĶaŁźzét»Čm•]°Œ¼ä“ Ąģ“ŻrŪZk©^f© ć;½r{Wā}4ÉØĶ5œ Óó"ŠUŒ­rŹ8tėHąŗYgŪ™W!³÷k&ŅV“Œ*ÆļĪÖé@½ž”Ös¬"³ńŒšæJęe•ķe“¢vƒH2žµā;ū†ŽŚŽY–%@ō"²“Ū‰õ ŽŅPL®>bŻ…‡|žŠā¢Y9y;”t«ņĻ.“QĆ/ŹĮ[;¾¢€±ßĮ®[Ż}ŠY- ˆäy”xŁ\ߋ‰„Ē•ęYxĪ’õšé“^ė:ZĒzŹ jńÅ9 RŃ%¾WŽ`¤‘’;Õ« _\čóŽĮ¶]™łOVĄ 3¶ńę«"ÖŽqøF‹Ž£žŸĪ›¦Ė®OmzŅMqul oœš?J )¾†Ę‡f¶¶Ė«Ė1IšM„óĒLžuģ.„iq{ ÓŁĘLlÖ0 Ł;ŽōūķCWŗæA›amŒŗ{s\„,ķu8dÓēI™®¤‹ČzŪhŪŅä_ėcŽŻcŠ<|ŻķŠö»?éÉkq¼Į–Į_„; •œ<‘]%ŚŽĮtāŻIn¼ŠYoŚāŚä›—yNs@=Kķzīž+pöŖĒ,;W>µŚŹ‘Ū2ŗ21†ėOŌŅ3īrWWLćņOŻĮčiWĀņŲÜ[ßM:Ė łˆ֐±JH«ŖĖqØÜF"{uĶtÖpEm„Ļw:z‘į;Õ„ō.68"y.u˜ēwKi•æ‹ų½…{gĖg³ūV·“|`Œdv5”ѱ·ąk -CQ1?˜Ļ#SéĒ„[ńž‘u„ƲD©Čč rĆÖ³°ś¾¹®5µ™§R6»g ōĶSAÓµ ^ZźĶ³PMÆ”õŖ°Ļ;šūiįē³P&HĪÜ/B}ė{W¾ŅķÕ!ŃŗtśT…ŽvŚį/'4*Ń悚©|ČāŽPµc$ī"Å­Ä·Bt ;sYśÄW+ ołÜr5p} ‚ŌŚŌ Očŗ…–łnŽÓå å†9&øĻźV÷-w=äŃZČ䄜£¢žŃ£<Šˆķ‚°×ļW=āy§Ó-ĀE#.IBęƒS'ĆzāE§Éq#± ŻĮ¬ K_›Qv]®Ÿ1^OQYŹ]Eef°øø‰Xø‘]Ū-Į‘ćć<ÖbWŗ¾Õ&‰ķLqE¤žøśÖ'‰“4Ó<8ŗ±O¶Éē¬XA–÷Å1ŲĖÓ!šåLÆū±īöĄ¬?ųHk銔vÉÜOV4”lté­Ęė”»Y@z×LÓ„Ż“¶ |΁_” ŸĮ¾“³øņČ"lóŲW”k:µ½Œ‹ ]ÄķQé@ģsŃj {dĘ[øš_(£/sGJó«’M{«[qæKbž“‘śŠm ŪŻ"w¹“bcšĶcj—Óčń¤&GułN8aÓśC¤Ś•‘hˆJ÷¦iś%¹—”ļl«€ø<‘T„cHG©™if²_\-›K$, )XS"šž­§Ü$F­ģQÜG&”É#¦źz¬ĻskŚI”ØRHķ^oć3O»·M6O;|A›)‚­ÜV-–rūāhŚ<€zj!†ŽŹźŽIĢ9ąsZF] äGs{ÆE%‰[wņp9Å|‹ń_Äšk·£X_Ć,–ωUNNOØ¢R¶‡]*WŸ…R™R }³ ųŸKÕōx5į=šFÄĖė]ō!®l.⣅’XĪš«øxö&«˜ć–Üīž,ü&ųhßµ ³Ļ¼IØé:bh—Š4³āŗ–@Łäżßé^³šūöÕ>źßZx|ŻióÜH¤6 žķ •ĄĒń޲uŽŠXUŲš½NI“R±·³·y…Į_$c—'¶+Ź,üŖŪüI¹×|s¦Ū^Kk1Kki¾hÄg¹õ³Üõ°ł|„²7ü{šūĆöw0Oå視—v›ž4ł@Œķ#«€±Ń.¼-©[Śx§J’ŚG$ĀżöF3ž+˜¤Łø+Į,Ē6å©8ŗtŸWóŁn’-N¹µė»k—³Ō#•'Aƒ½pAōŖ×—7WyyL8=+‚¾7¢?§8#ĄLÆ(Æõ©Ž­Eµö^‹æ›/ų;į–—ØZj ½Š‹uó r(;—¾=ė¤ÕÆ“Ł®“>+8,­--Ä3Gޟ›Oå^UZ͟¶Gō[ʛ¢ŽźnŌ4ūfšÅ2ŪĄłqõ®P’ź×̚Xf3€9®W&vF’ަvšĖØNĪ£÷kƒƒYt BO„śn¢ŠŪ%õg#Hųݼ.żjįŲŹ³V0žč:&›żŸk¦i–žTHĆØ}眷"æO< šļĀ~;š<ĆÄ>ŠõI-åĢ24AZ49ą×ńõ5¬)\š±5t±é~ų)įŪhī4Æhšu€`XCŚ œ{Öf”šĖū2醞.ō·G.ė»*ķÜ×Lh¤xŖ·Šé|=ā[Ļ˜,/c™' ņLŹÕõ„õż;ǚdśĆÄ·,›$Ļ;Åt4yÜŚ]nĶŪ;Ļ„×7> Ņ<Ū†Õ_Ė‚&8QŸ_Ēł×Ē:V/†ntū RŠŁ³ØŹ²‘ž+šlż{$Å/Ŗ©=ä~üńœŚ8šÜA×2ĘŹ'øžU½ć}.Ā VŹžā‹"ģ-ļš“JŪÜņŻbH“SĶŖ[ļŹļ ģå†ĆĢ×”īŌ+ cŌŽƒ?€©ØŁęĖ{ž‹’$ż•‡ÄzifŌd²Qy$ŒK™Ž HķŻ‰Ż“[ŗĶ« G‚0T3:ٽ8žžŖQ“æHŚÉ/’¹ŁųjņžÉq>™g~ØAh§MŹēŠŠŪšŽ‰į=#\Öõ[åƒLµž9^5Ł”µ}¼mĻ fŗ)ZŚųŒ.šŸÕģ§’"ż,ž|(š×‹¾.xOĮ>.Ót[{Ķ:H„š$ ĶŌ † ·ü æą³’“oĆ/ڊŪĆ)šŗ)5m'H²šŻu{‹s™äpIŒ0 TļŽ¦»ŻEŹx{ąĘw>­™ć)øįiT©5&×¾›—"]÷MöI­ō?ž<)¤ŪY\M¼pÉxÆwžŅ€(‘±ĒŽĪ6וV]Ļō/‘—wØĀ˜œ4½:V=¾æę¹…–E9Ē̤VWG¦“FģƒCĆ&Rm„ģ+äiм?«ź¾·ūK|é;=ŽŽ•µ6®sT“>Qż«5Ėk x_ĮDó.®ĶüŖ–T žYükį–Y᱊UŪ÷Æ Į­GšÆŅ70\ö4āīįN)ł6å/É£n;D¼”Yj“(¬f~•¹,7–—ii’é!>Vq’µz”Ńüۈc$Žk|łŸ»īē¹ōōߥ†Zæ‰5H¼IāųŽĻJ“ öKI‰›?xŽŻė²œ"±ś‡¦$ó[Ē ł £U±V ‚‰ä„®§ĻZéŒzžeVgŽhwpńŁĶ“›³‡ =½gźŽ–ÄFe™K2“ż+[’<śīŻįøP§īŸĢV“W£jĄŃķ9ėš[lŁČ£É(ä/„dŻĖ5ӄPø Į¬Yƒ:/ ­ŹĶ-•µ¶ec»ŽyśWGŖ­ÜVß`½ßżĘ) ǟ’bøy"@®HĖzÕč‘…¼{ч%€ļL ČĆL<Łß_ļVõŒAnDŪC "‘”·,x—\Ž}°€7ĒŽ8Æ0‚MBŚÖį'ķ½ˆ`{v ē’1$±Kķ2¬Š~ņž†¹+m .5I¢“U÷|ŖAėA&Žą¹%Ön-µ°^ił €”ć^}ā­ŹóiĢŶ6>SÄ{Škx®«{r“:Y[Ė=Ā’ą?Ÿ“ŽxƒVĘāHbVĖ #‘@ģvl–·’[@°Ān€v-Œ ėļeūcmF…#ž4åŃ>ĒŌ ³‰2 “<ćҾti%“Äś¤gMøµšIƒ°dõ_jž‘f÷–`$“n:õ«Ö–VęÅ®­å6×[Ē™ógw½e&#SY·ūEŒw7w-s)ĖĆt ó¹4Y5ČS€Ŗ­ˆĢ xqĘCR½‚i,"pL!ˆ2} WÕZ—Žę’I?²lm,!uŖ:£¶ö­Ir<’[æÕµ8&°yŲD܍§€}@é^;}įŻFÉäóMѐYś“õ ćśĘw}«¼1ŪÜŻ:®rI*1Ų{×s ŲŽčšz¾£ėØ:‚Šć¢öž” ļt˜ĢŚ Hģ0KtĮīkÅüe”ŚĶŖ­źHp’ø* ęśōh.±i Jłź½©~Ļ;\É Ŗ›AĄē#֋–™äÓĢžB •XeMr>(޶mŖŽGoĒ…\c>˜Øä6„Źŗ‘qŖ8yČ[U\žšćr:¾‡ż—qvńA£¶ņćŲ¢ÖŲל„ՙ³Y£”ČĆgŚøŪWVÕn&Œ²©ŹäŒ¦Żµ!³nņ]BŠ£»ŻKyCųųć5ŁH–qévŽņĄŽl[š 6O±2”Žęfā_’#’+Ę^ā­$&Ęģć}ćFbNh õ}:×P–eŗŠÜEdWīØ<Ē¼Ń ·7óÉ#‰F Hzõ  Ķ­ÜĮįĖ éÖq.Øīd[É&0xÅbi)ā Ś[MOR»ŗ·™ĢŒ’¾åĻØöö¦±ųkÅVcOæ Ér›c 0ž¦ø]RuŌ5ķņŹÖ¼øvqśVŠÜŅ0*x›\»Ņļąm.ĒūNČØ9sƒÓøüé.>_ü@Ņćæŗ“§e;e ĄĻU«4±—®Ewįķ=|;%¼—Vvń…³oߎ+Ķ4ūĖH>Oą#š\ØĪhźmµ%O’E Ž…%ķœŅŪB<ēGöī(б™Ä[xOE°Ōż¹•īšMĪĜ^Æm­éré³Ć=µ±xøŽļŒ }Ö«gk¦ińß„ĆĪĢL”#Ćį>£ń®^/Į8+%Ū)fĄ1“{Ö,fn™„Žźśõø…„f[…Ųc$|¾¦¾ØŃ40O¶’\(#$ƒ€ŻŖ–Ć3×CŃ4­IgÕ-¬rZUŒķ'ń?…`ŻŁéWéØ,rĀč®r>µŖņ1įŚ¤—š> ¶²$Ī’I·¦p=«Y“ˆēG»BšN‹ø`}ź,IÖų[Wŗœ½„¹žCƒĻ„v„žŸy§Em%„K&āZAŌJRv&R±ńē‹ü1Śéšnn„Ä1R h¾n9Æŗ [_ ųsE†Ņęś;ķ¢)&±Ę?ŌŌ)]™óė©7Š|gމ•> “O“ł ±Č†¾H¾šÄńĶ{ØoQŽŠ£%TōÉ­  ŃO@ŠĶ&Õæ²•I¶9R=+¾j,Ø·²NŃ" ?tz =ĪU’Ö‚HtĒG@H®HģbųfK‹×óÆÖ[gŽKī9aĻJķo×ķ“šīkä"ųPcsÅy½—ˆōĶ*é^PE«nć֚‘}O@—\øÕ"K™`h!`@< Ēŗ¹“”.ŌĆŸāŖS5Z¬Ņļt%øŅ-ķē¾vŚČėŹÜ7ē\Ž­ą˜DQĒ}nšLŻr=«H˱\Ē'Æx‚/ ß[iv„nŲ(Üć•ZąüA”`I©XY‰PέɐAąĖ·Į’9<ÓĪĪųÆK –ć(x śÖ%c;_CfŅš¬øC+“Ę*ž©¤%Ä &ŁÜdŠó*WŌō)`ß-Ś04ųv·pīŗ¶"稬ļķ FOō{RŪU¹9ēéÖOr=“ZŅ鶛$%YŸ ±RzÖ\¶rEę„ÓÉ ädÖ·§Q: +šzvÆ ¦a,|р¢»>ņÖöME‚ØÉSž‚“WčyÓL}£ŲŻLŽ\‰$* z]4é××Vo2HŲf„¦su˜’² ŽU–<7Ģ…\7ē—Ž3Š(ēyn£VĘ·4(›GĢņæ_YŽŻÅsn¤6#©9©4¦–YÖ!2@{śVÉ”ė1ivpYČ֌‘¹<óœW•ÜŲŽKtåćóA<8ķ[EXLōßĶzš^i·Åⵌ‚¬Ē;’Æ­tzÅ  ĻŖ/\ńųÓø‹:k$‘¤ix&\d–<}*†»į KAy+’¤ē«Œ{T{ChĘNJkšd°A4pLe;†Āøķ1nZņ8‘É|ćӚ†Ź±ŃĶk4sÅ%ŠpĶŪ=k¤°““ŗ•$µR%^\TJżßūėŗ 0é’;ŠŌÓ4Ä»¹DµŸĪ;€# æS¹¹yhlęBķö†b+ŪkÉõO³ŲJ³Fā@īŽÕ“eю©vžzĘž»±’śŌĻ õ½±’Č2K·hldzŠčŒS*>§ŖÜŪŪ“²ģņņ®F¬™mõ\C0iD>QŽEc&uS‰ūŖ|5Õ|%«ųfĘü@wn.Td1n‹Ÿ^µō—ĀļXź÷R^j³Žé3YTER<óĒz{ūWŃŹ“>iJśž£.𔄻ĘW€}9­żbŻ!šž®·vŃŻ3[1MłėXO`¹ł„Æ;Yø¼Õ|žZš Žõn^hd2°³n#?xŠČŽ2=?įķ¶›§\›©ÄOi*–#©üU’µ„śź¶Q5ĘI¤UĒ—ųʶH™6vśn.µą-Zó˚ŅH×0łĆź8śõü+½żž&ƒĆš,§P½¶ūcĢc‰Ū Ńäž¹ä~5R± ū#³ż¤|#¤Ką‹-Uģ¬bÕ]ŻŽčŒ“±_Öæ*|AįĖķ[¤”Ęafʐ~š¬ofk;ø’G•#Lį½ {GĄ’ÜųwÄŽSĶ v&w@UĄqõ¦¦S‰ś‹įķCķŚtY„‹ņzŠŲ(^8܃yö¬ź6O)ę’¼#oāO ¼imŌ°æŚ#ĀĢG=•łŻ}iöi¦–XŚŚä¹WV\0<ō®s¦Š:/jWŽń>ÆŲÜ4{$у*“Ķ}ń/@ҼK ę³”"iśv …D'c3žĒš‡3ŗ1?~ąƒæµ-Ę»¤xĆöFńę²–·vR}«Ćjćnä䲅ōĻ8ō&æ”9]¬5“vO˜Ū؃ŠSņ-Ÿq|×mõ żŽvGŌ`;dÉĪåģĻ­3ā‡ƒ|3ń+ƞ-ųEć > ’ ų‚Ę[£:Ļä®+9FźĢŹgł³žÜ?³ž±ū1|pų™šÆÄa[ō„——k6bc‘AģPƒÅ|}c3;¶äXšHĻPjé;¤ŁĻQˉc“|s9ōŖ¦Ó|ŒÓĖ=ż+S’qčF‘̲åÕ~é1I‰LŽ`‘”÷éZBÄŲ«$Įœ\Ź¢Eäp;žō’9ĘXnś ŠÖ ½ ŲT䱚æv÷)og}§·‘¬ZOöŅØłŃՁHä€i5Ōéƒč¢Gü3öŠÓ’lÆŁ Į>#æŌ„ß|2«”ų’mŅHń€¾iÉÜw|­“żēōÆÓķNŌĖ¢ ƒŹŸZä­3TģxƋ<7 yu ¼*6\F8.•ł·ńOGÓ¼7®xŪĀv„÷6P:]é,Ųo(ī%F>¾œW „a3š³ž [ū?[xĖĄś‡‹ō =D’J³›ĖÜŠĪ/Ē'æąE:¦KD’#ĖŪ>эÆéŽ¢ŗhIŽĘUé"ņ‘N?®”˜`€Zė‹9$ˆ%‹*üŽO÷Ŗ c3#$ŠH ֜Ś嘔3‡uķÜTņdmEA’xcҧ˜ŅźGi 3+I“łŌ_9‹*…掭˜ĘÄī¬UQƒĒ9ōÆOų?ńgÄæ¾*xā‡U$¼ƒR·[ŽĢö„Ąu?†OįC7¦ōż‹?h? üGš%‡‹ō+«m^ĀŽ{vø’[e0Śźq÷¶ŒŽĒŲWÜŽæź×¬d‰|;pÆ©č’‘€čĒ.€ćØ=¾ƒµrU‰Ó¬zAµŠ”…D‚ĖĒVĘ3_˜ßšWOŲņÓö½ż–|I.›£\j<Ū, °kėB~xĮŸ•Oā«źkФ:­±žo¦źµ®ųOSF¶Ōģ§höæŽdÉĘ}ĒC\»k>›y3€|ķĄł~§Ņ¶Ing%©×hҽŁIŹ42.>EźµõOĆ=ōP]āibcåˆŪ'ŸJåŖ#ćdp鯆m)ǘ‘ÆŻļõÆšŸŠ%ŠnSV>|_gs(pÄīÉR+l‘õ{į“ƈ=ž®Ņ­¼2"ę5©‘Ū½zV©ugm¬/öl“I@KĮ'éł×qĻR‹}VŽ)VéœF~õb\ź–w’Hc•e\‘€~ķ?-‰?“÷ż’Ń»Cv>µql.7¼”Ö5żi«u!§c£Ņ¼?§ö !Sŗ\5ŪG§ ˜ąRa‡w×·¹•‰õ Ų­® hzœgĘÜMĢŅJT¤cęōČ FÆ«G«E ¾1@…ųyäÕ+Į­,bžŃāĖ!(ĘXuĶØ u£_}¤¬,#ŪƆ?Ź«j&ėc5¢·Ś×¦N4 ŝv‘«]iŚlKpõPŖŽĄ×ŗœ÷4ÆūĖ—søśšd“IeuR™$b‡pU'Ź­\Iq «H¤ĮČŖŒ­ ķģaša M¬Ē÷®Ś %m-ŻZ0’•ćŠÖ¼ÖŌ mā ņ(·Ī­M[ÅPź*#Œ¼Š¼©ģC™J78›ūdŌŁ%bøPH=čÖ“ŪUšĘźv‚ą3 ÆfŁ|ŗX”w¬Ūė7^zŖ•$&ĖĒJå8ngĢ“yQØ<“Å ŒLkŁā·Y6(IŸ€ĒĆڳ¬¬ī呤“n;ō ku¤i÷:]Øóäe»Æ5³§xbŹd2yq]>I cŽ€8CH”ŻL…šSœŪ•Śč> „I{4ŠłäķEĻ8¦‰hȟNŠėķ 3¤XSĖSō?Ū^Xßš z2ŸZcŒR(ÜųU`ó£TPTc9ąūW%ye>šādV@xéŠȧcŃü/ci­µ£^Ć$‘ć##ÆÓĮiu§I,b’Üœ£šÕIGŠ^Źå#cWŗ Ä·µq:~ٜD y8źj$Ɛöoź­¢ŹD°™!éŒWEāĻk:ā­&ŃŚåĒ#“0=ĻœT Dą¼;§ÜéÓĻ=ŚĖ$®ŲT'!GłĶwĒUxƒBą"·$iyēˆą\Čіš,gŽÕĒ]_On‚Ś3¶SóxćÖ¢RFŒZ„Ģ–Ń\dŪÆ÷ œ_ †Ś"S…ĻqVfāz?‡oC_@¤öĻCWõ;T°×$øsœĒwŹA§9*'J·iiĄ4y£Ų­żĢś{׌_=×ö© !%Ļ,=je+šĘ6:ė}>ĻPŒ)A<Ž6ć8­øŠ hUJ"uŖ$“7€°Įa{›‹čĘÅkŹ×-āH4kĖŪ9¢F¶Žyż bYēö°]\ZKp:ŽOJélĢņڬ»W8ĮRc¶“Ū_H#›r¼›†ī‹ķ^ƒā/ųˆY3ųz8fÕ¤p9ōļӞFiŲūmķ¾Ø£QGIŠŗz÷­ķAŸķv×RĀѬ뽨Ī?” ņŚÖŃ4uÖ8¤ĪsĖUkķ: żߏCö‘)fbpHō¤4ŚK¦FO$'wM+MŁt“8>s6F8 Ņ”ķ¶Öß`f•w’›…s> “¹ZMå·ļŪ±Āńš //¢Š,a¾¾*–ęAūĐ?­yoˆ5oųJµ¢m¬ž]§•ušņih,å ä®å²k²“[»‘"ŗ|£pŻė@š,ų•į‹NĢ1§”G$öÆ,Ó/%’S“ˆ¼žšÅ7`›}Ō`ß•zƆ/. ×"†Xdž›×#(}ųP†ųļĄæańf£4ģ®$2GY>•kū*ńtńan»„)œ'Z¾ChÄĖÓ“ŻOLµ—ķöŅĘš¬s]}„ņčślڽÕŲX«ņ݆ćŌäTµcNS¢°Ōˆm ––’¼|°ŻüBØÉØčś0—ķa’<©£9÷¤‘­Ļ=ŌõĖMMLŽYŽējńRŁŁ_o $mŒ8ēșŻCnšiģ‚A'Ė·®OÖ¹ö‡ģŹ%rĮoCHĢčt}^&Ńo!±³ūVŖÅ”¦?:āķīnwØ,‘±Čß>ōĒb߆UĶY]ä“vyķōÆX] .m!(ńI+®@•Ē­ 0Iže 3>±yXĻFĄnņČV÷sÄ©n–Eö•†F uŠŽ˜£ĒŒwbEx–G!¾FĒė[ŚŻ’‰ v²]ÜÉøŖ…wä*ŽŲ¢Ęē¬x;[b%ĘX1Q—k¦ńgŒ­ļ-¶/&ø¼bƒŽ@)ŒŻ/PÓ/<›Œ Pg£ “WÖ4…³»q4{ĄņXŠRƒ<ÆKNūd÷zf裎ē nõÅbkÉuöł.•$*TÄšMe%Ø’Ō§£j¦ Š— ±Xć'„uZ†ßšHG›GCÖ°”µF¶œ’[Fd]d`ńŚ·`ū(ķ«øē„O36Q:hęŅ$‚ņŻž)ÓfŅ£·Ņ¼o\š¬ŗ\é4Q’”9ŻĶøØž•±“‰ō\ųif¹±?æ Jīn­ Ä×0Õd]jÕlN2`«õ’?+dź’¼wéÖ±§”¬sŹÕm3OŽMÉ)Ą;Ŗ=˜›4"Öķ,<ČC±+õ­½"āŽāGYĀżæK‚.ä:毣ŚYŁģÆĖޔֵ gY٬vį§R\QnęZ’tk a)©#N쬆,ć9s\6­ą,'¼m9VŻ-³<aF‡bŠ8ū R'Q¼‚X)ąļtk„2LvܟZĪhR‰Ų鶀’ϳŖ[°‹wń ” öŗŒķ5Äń”‘Õy*EP£3“¹ŽV[ø„°Źć”${ŠīģoZH<~čžOu ²†±p–ģ£ĘĄĶĻJį5ūOķ9m-ķ/£šMƒ?ōĻ'  Ø£VĘŁōK„“šę2šHą’œÖ‚iźķ¶hĢKžŗÖ.Fń]‡ĢÓ¼u9‚ÖŚņU1‚€öź­Vk÷¾ĶĢČī+éķRt$aų‹ĘÖVŠĆ „¼h»J<Žõąś†»q{4²Ģ>~@’dU8ƒFZ‹B’A88õ®ēLU¹p…ßųXõQEAjmé:+¶„ WŲ1oRĮNr>•šŽµšYš/ÄOj® Ó ɚhįc÷UŽTžF¦lōščȻьļ!‘™āe*錃^+©xrūEŌį“Ń­äx§‘Ė99Ąā¹ē#ŻĀae-‘ģæ< „xįÆÅx­oōĶCEæ··¶@0d‰š…źz“Ē„zö§ū#ü0Ō~xkā7†>*7‡ü_%õ¤ėq x’ .7i#ūŪU¾G¦(œŌRw>ó-š’1ÄÅJ4ݶ{žž¤ŗ÷Ə ųā׉~kz†„ń#įÜ1D"Ō,œF“Œ3.FW*Ē…{ĻĆX>ųĮ¾=š×…|;ØéĖŖŚĪI¦25³“Ó vļ\µń‘‹jēķ#ō}­^jy‡¹–ŸkÓĖōg#ńæRŌ¾3xĆBń‡ŒīšćÄ~‘‘Ģ$²ĀŒYYŲr[,Ē>ęŗoųXæļžŁüŌ|s­jŸįøK„²—÷)ČS/Ž+žq^lńļ”ūĘĮ †UA4īļæv¼¶3-仼ŗ³h®$«€…›īšéüGcā _Łi^7»øåļp§v"8ļžN­gõ¹4}v€2ģ3R£BqŁØ«żę7Œ4(4Ÿ^hŚ%åʵ¦(ą˜Č%Žgņ:UĻ.“ŗĆß\/mį nœs!aĮü 5œŖ¶}},Šž/¶“ŸUKė{”tņÄÆ)ĒŻ“½T³šhYY0ģ03ޱ”ŗ³®4lµ4ģ%žļm!‹pŚyķT¾ xæĆŗoÅ+‡ųƒeĶ”/ EŁøL„¹SĮĮÅ.d[„©«.”tŚ×‰aŅYąšķÖ”$ö¶ÅÉFz-cź6RžėÉs‚ dßc9Sgc{į«ų/ā“_°J…dĒEĒē^1ńk\—]ń®™į”©ÜK ŚĆĢ6žoī–g¾£Ŗ‚ghŁ\žĢ¾Š_i3iėshT“Žbå9Ķ}…šīĒ\Ń5›¹#‘ŸA»£dNöõĻŁHł¼r²=+ᒊ$š÷ÄGĆœŒC?Ś­\Ÿæ=?üėģ«żDÖ”K³¢¬‘żńŌ×lQņŲÉøžEā%‘@ÖŽ|<ķlZó{1®|:Õbń†PM »ļšŚrY[œ’J%,=K»;ńŠąüf×gń–„ik)³),8?TüsšŚ/|?Ó|Ey£«ź{D³©¤ųHöąf±qGŻeų– ¢¶Gųrõü1¬éŚ-¾Å†įEsĘĄyž•õƊ|Uįˆz^‘§č£j1Ne°øPqņ z`Ōņ#ßuļcŠųƒį‹sį¦1CÜŪį”÷śÖĆÉōõū>›«[2G nēÆœQē׫dĻ»ļ?jüż¾7x†CĒzuÄSßZFpŠ$.PJ1’Ŗp£ŽæœļųÄæ¾&h²kz ę…įæi1ųæĆģvłE:‰$†2¼e }ŽøĮī a_UnĒęœĆńŹó¬^:SVÅÉYyFļēdߎwŚT’Žź6ÅZŒ¾}=«±¹‰)?v„Xćšó\OčŒ-K¤Ģ2š@źÓHȬB`I>€I®†ėD¾‚Į®µ‰’[!o  QČιI-Ļ>•“N¼‹ķbKuĪC2£źzVWˆ#šļP±¼"Ä Ćų²G',Śg”črGŗÄFŸ½[²_ŚĀķ¤Č˜Į dWU4qÕ¢¤s–7ŹuˆžĮml Į0U½«£ń©ĘZŚNØ^XŲpÄm9ėÅo*‡°KC叮Ÿ”j–—ē•1ĪĮry`žµė6*ś„*įŪhąõ®Z³¶’4c·km°łLčĒ–ėŠ¶-į·•ˆ ÉŌf®œnu9icšń–¹Ÿ¤¤m;Z¼»„løÉ#?ąkąļŒw°é^+šż«JVöŁŚv~ō©#ν|=-.)ųķžMfšp—»]Æ6ßč‘ķß³7‰ō»’ź^»··y®ķ<ūg‘AņŁzĒ§’^¾÷’„JńœŚv£vT·yī’TVE@2H޵ŁČĘņ| ńx…F³Ė(«3ŠŌ¼Kcįķ2u’H…És¶3ĄśśWxŠņ÷T·»Öļću²w I³ä·>µŒiœC™ŖqåLóß ųKÄ> Õ-“»{{·Šy žt‹ņʙé_RXŻųOį>–š†»½†H>S›‰=Ņ«#óŒUw)Y7ń?ć>¹ć“¶šÆ†n“ĀŚ\’¼ø[q±ˆķŹ²t­.Õ4'Ó÷Ž^ź}>ÖīK/’^¼ź³3”…m‹§ų+XµV½›PøŌ×<łĪNŽ?„v®Ę8•ōsfńüŒĮ› H÷ź+ŠR>Ó.ĄņźS†Ķ&ę@Öģ¼{Vœö°ß˜ę¼ß+”ʜći©¹õ”)ō2Æ ņ|·Šy'PI)Hnį˜™|£Ųw§ĢĪÕNć5;¤šķ¶©"£Ć%Ȏ-¤Ü;`{Śń/Š­uPÕ-XDė’Ū÷XŸtŠ’¾¦ĆßSĀækĻ€æ°żæģsąŚĄ¶1Ō’lē±:æ‚ÆÆ£ß2Źč³[%Ÿ&Ļ1ˆq‘ņēvGåm¬_cŌVķŌ¼ž^õöJiA[©žeųƙTÅq2„D“IGNŠ÷}ZŠoĪūlzĖĆ6²€0Ł+(]ĖĮĶEwāYō]:ŪIqq{|²,‚2ĢÄćļ^8Ÿ”bOqųy“įļ‹Š>2ųbūOŅ5c’ÖY„#å Ż¹"æD'³M;U’ĒO‡Ź“ŠB1ĪÕķĻ~ÕŁō†µģõ ä ——“JŠOŽŸĀr£Ó4?‰V6ö"Łmā’DŻ Ī;n5v!myt&ŒŪ8* ֛AŹaź–—u9™s!BŠētĻŪźŽTģ‘Ėóm“š Āę$“žŚr¬¦5Źķ䌵rēĀÖÖ²jZM'Ķ€„zž4&ńO‰t;ūĪhķ%1ļ#h,{ļ\ŽŸ„ÜMaØj_Ś&īĻļdcŠS6JĘփÖl.MÜB[tŽćw9ĻŽüÖ[iˆæb÷"&vsEĘhk~-µš„ž4šIÖnb} góüŗ~uŁč5Ļ}qad4}ąC™÷8Ę>•J]ĄĘ¾ÖR™lē·)µŽńĘH¬ ü+¤Z];Ų¬ŽC1p\Œœö­Lœ†Ā?§µ×˜źÓć'npqž Ōī,Lf^7\…QŲPA.ƒ¢ź76°_j@ŁdUŒ“ckIm³OełŃĮł„ ĖŌåt-~ĀŪSÓ,žĪūžQl`z ©­hv·z¬¤[µ“|³~sģkØ3«šwˆ?įYx·O×/Öm”<° ūW²ß~ŠŚrź kžÉey"¬ž\`yg±5&žĢÕÖuMVŲ[‰axå\ņGź .›aØŪʰ銳ŃN¾Nąŗö†“ƒ3pģx’Œõ]Ežę+ł¤]N v0eėĒė^{7ÄhcµšŪ2z+ŪŽ“+ü@Ō-šż-®VPØųŻĘ+±ŠÆüAx­}s$å–FłłYsĘJ™lg8u1ę¶¾’„æNÖf{Q0lĖ•ŒōÆlÕüUuu`γ[ģNÅk%äbx/ˆnnU/¦ĖI)S–Åaé6>"ū“|˜”E' ėŪ5“oŌø¦{ę„„źš‚^×F¶Ś‹AēaWųĻnGҰ®|*—Śe“·v³Y\m *9Ļ8ę™\ŗhś<—Ż@%‰AŁĒ9ģMp^#·y*XąØ£œęƒ7֛s¬[Dm,IŽč®Hlņ+VĆCÖõ­RŅk‹£@ĄĖĪżje+ؤ}¢i–ˆ.mŃÆ7+÷U= Ccu©Å<…«Ķ ć ×<¦Kģ‹ČiäŲģws\®¼ójKcćDŅ©P¹ā„OQĘD^šL¾¾‘ī'•d‘Įh‰~¢½åE …2£p;ę“,ńiŗ=ü7ķr"‰¾_(Æ*ł=+’ÓaŅnµÖśVkupß(ł¶Ö2Ü »m5RfG³±OAÖu-S\¾Ś9­Nö I#¶q\cK=¬īĖ“ĖžĀµc9ž»¦ĖØ\閏“ä·'Əj…-µ ŻFX–åęfČŲ*c½ŒœĻ`Ńõ]cĆpGgżœdŽ@iL²‘č{U’ėw²ŲFo#ŻÅ“ƒ×±ö­s x‚öźćW{£å¤C*޵Óh~"¼–?±L"†„w/«G- ę¹é:>‰±ćšŚDŽR y€ö®gW’ £qöæ5W,@=½qV™ŃFšö×m~m®cbŁøēé]č‚ļPŽĮ±W1Ļį_5‰Äņ½OÆĮaœ–»ųZźĀś3!¶uÉ真jбšŒzq’ķČVnÄv®xćöZRmŠnā±”Ļ(O-qÖø‹ŻFŪ]½¹+ˆy¼vÆc Q·sĪĘҌ`āM JØuć§JÉ{mbE¬lČIQ¶½Ŗ}™Ŗŗ"…Ž”Ŗiļ"Ēf±·“ŪڽWOՒd¶YŲCņcœ[Ŗg”Ųēu’i³ŻE”YϳIŪĖ.8ėŚøöŃļļ§xć·}ŒA>’…7L®VŽRīŚėI£tIJ’y®Ć¬·käĒĮ$;c“Pća³Ü-– ]9?{ĀČ7nƒ^wy:5ÉhXģVÉ2=©Å»N–~Óo#ŚާN kIsö)¢»†4—.yȤoÜóŪĖ­q%snz `~&¶!ŽtŅ'–MĄp $}(69]JB„Œ‹!@3Œg5ēóŪ\Ēv’@ m‹Žč6k~K^£N`9ł®ÓMŽĖL•šŻe I$d™l#KR×4č-cq¤Å±ņōlūVWŪ¾Ę Ę”ūœ€Ł=ĒóŖ2’ŌÄŌõ-VéšūP™~źēڹYä{Éßܒ: «¶³ŽęÉ Œ(ūŲŸ­lł°ÅQKmžŒ£­Ńv9Q,ÕćC°ņ@¾”ŗbĖęŚŪX£<²JØNĒō9šGĆŗgм¦ų[kr[\¼ŹģgO°ļ^ó'‡,S|¶+4ƒ/~µō3ŖĻŁ$c mT–WAĄĮä~ę_µÉ|=į(`ŸT²xn™ [rŲ}€Œż?śÕ„„r}™ńÕρuItĶKQŠ-”¦£.ŌO˜Ā¤t-ß”®u¼©Łé¬÷hŹņ0[ėR\cc¦šjBŅś EKš‹*€; qšŹ±óÓ]šŌŲĖ%¢ņdu±=žõq—AČūOƐi–’u ­<ĶØÜH$ß“~ģvR>+åĶOæ†īśŅ;{d_<ŗm'œółU>¦<ĒÖu&ń·Į+oXŽųäŽxć å„2śó×5łMż­&£q©GvŖ—VģČé8ĆFGŽ«6]3̵{Ÿs… ēŽŸ…gBņŲ³"cōćšŅö¹śū>ųšx“H}*{•–äŽp[Ąüėź(¶LĮX±ćƒœVö]NiÉģoʑ¬]7H5š?ÅÆK¦x—U¾{oÜĻ “€¾ÕĆV6ŗ7£RĒ3ą]WBŃ®Ö_iŠ\Ec°Ż¼cŒśW§ųİųĒNń'ƒ"%;¼ūcč\~搮Sҧ;—~ųēÄæ³·ĘÆ|}šģ† SEæeRäƒv~:äq_Ž€ž#ų[ć§Ćühšmäz†“­Y¤³˜ĪDS…ō=GŌ·±¬Ļsųmćį­{Mž(g•c™ąߊ~5öŒ¬R÷N·æ“Üņ‚®²'uĘA„'s)ŸĶĻüßöQOˆ_ ¼'ūXh¶,5Ķ ā†™­É;]ŠŽlžĪŚŻ¬Jļ%¼r[Äč8\śzŃKŖg<Ļ kjž%»š& MĀŚŪ¶³įk¶łŻ³’¬XväōéœzÖ5boGjRŲ>Iņe; Ęv·½\±0ŚČ/ī͌)‚ź/łė 9ż įšźmsųH’‚ą~ÄW’³OķC7ÄĻi ~ų•žŌą„Žķ¾UWi`py…~xž¼HoCē.;ˆ÷©‹÷lD×R߄u7®mȌ>q“ų~UōŸ‚üHÖŗéÖKY-„Ÿ•½’JĘ¢ź(Äōķ[JÓ|K¢źvzɏūp[oVfČf$~_ʾS¾šćCoz7"B¹\tÜNjhUÖƜŗXś#ö`ń#xyõ]Wø‰ģ%bmB\„ē¦M}ķc8½TS·Ō׬qT.°Œ!Bīäž5“ˆ.ė±P$œwõ¦ĪfĶ›(!¶fY —ĪS]„µŖ‹T3‡V'7„Ńč0g$į3ŸJŅkŲõ)”L†ĄĒ­ÆéŃĻæeŗq&N~JƳŽkÓC21ĒZ@ø4łāŌ„óŹ“c€ ō5ź~)¶Ńķmę yĆ+‚2sAQÜäµ9×UÕßYžGži±»wšWIe:|r]KōQųź)Üč‰ŅĆc„kŠ=ÕķÄvŚp\;’懭|Õ­i·ĻqĢ×ZzHJ6 ;(*Ē[£x²ŪLŃćžŌÆŚ‘EŪĆÄW?ā/ j÷ŗ†ÆvņG§\ĘŅ9Ė6qŒ~„ŸMū-ŗ!Œqœ×]„kV6ŖöóČȀ'iزł[:õ TĪētĻ÷õŖ>.šī·u§ińčŅ*$’£:ŗšĄFER¦mf„ż¢x"ÓKøˆD÷2’¬ŲrcķČ®GÅ:ŚkSBĖJqÕT('č)ū0ä$ŃōĶFA [rX}ćŒsĶ}į]+cūG›*e›œ‚M5 ¬\×”°¶y‰hAåTs_>ųķø3E’I =Ŗ‘¤‘myf±Ł[H»UOÆłÅušž™k©YCˆDŠ#„&ģmOs—–Žqk$Ņy)õȤo2ę(me`°®sŽę”esSŖŃü-:,Ķ> ńŹŪČvéĄ'ČW–Łh7ņXMqē3ŖĢźws»ę5@2Ņęź īb‚6/Ć`v5bŅņóWŁi$>Bœƒ!čj&ś„Õü&ö²…“ŗūQ 8Ļ|V®‚“ĶG$xpy÷®InØģ¬9C…2=Ķdż‡QÕ§†ŚĶd’V$|ƒ“R\`ŁKĆś&±§ß]Įz^S,ē;ŗØč?•v:ž³„i3ωļQõuäĒC]BÄ7‡?µŻšŁŁbn›GJܳŃbŅń;]W±Š„a8²ž§åiŃÉvTł².Šq÷«‘Óu/&wGłäg®iŃ4śLŚ…ū˜v¢ø/„iŁÜGhĘŁ÷qėYϰX„ØĘ·pĢw*ƒž+µÓn-ī6łLĄØŪ“Ģ֙ź~²6Ģ·OOž9ķŠ~µ%‰šU…–SŽHģi3¦ ńĮįčešõåo)y+“rNjX“łUĀČG<żįXójYæ<ŠŚc5¼‡Ķǧڼ¶ĻÄ÷¾ÖöŻ˜Ą¬Šć"AŒtśVÅØw= Ņhµ{xu6†7|ŗ’t÷­Ė™&·Ńo^Ņ-ņ¢ēŽ Jv+‘Wüśƒ“:ʬz\ģjÆö֛„ł“ys=Ź·E@ Ņ1¹č¾Öģ|U,Ö!¾Ér”BłƒļgҬ ķGĀh,üJЉ<Öņöœe2p*ŽChR8kvWŗĢ—ö72Ȅü‹œ…•EüY©ˆ&…] l|»j¬mQy§RY™åݜ“œż)ŃŁ™fH˜ąšNV4P¹ęž2ń~įģ[Ū,÷·ūˆhā\”¹®‡Ć>ŽŅ‚ŅŽ;PrŠŖ0§ŲW±2}OŅ©å±] Rßz¬Å2¹ĘqKābmĆz…ā"üØvgŒĒ5Ÿ3{³¦8T¶>)|5št_ žj*ék¤"{ūūd¤YT īAl~ńn§¤]ü9ųā?†ś…ōšœöL$†į€żķ¼ƒrgż 85Ŗ7ŒU¶4āž(¤NB’r;Uß_Ž­½ÅäóŽ"'–„Ū;TtAM$”’gĻ…ŚwÄk$O,É|¶ĀX›vÓĻvč+Ī?i憾ų?g£x—ĆśāŻ_½ŅRŲĻ–E'åēŌqVōAÅčy•¬Ūj(³<žTG©n*§ö­¼š°fG‡!TƒQ&ktwņ\Ūé֍<ˆīĄųqqXŪj:Œ÷öń„˜ sÕE œ\švjś¦š·ö¦źŪĢQ S‚GÖ½«ā惼)įxģÆ4Y%ø]ßg”üÉĒÆzø£Ž¤ś&¶ŃjŅ[É2Č6į†qī+į?‹~‹GųϦéą”ڤ 8Ē’^“Hó±=Q÷_Ąļźśvqg¢Ū»ĻöO2A“°(3žĒҾ«ųeć hõ””O?ŚĻ˜œp­ž½vSZŲłœ\^ØŻų›¦EÄ߆ņŚÜ›M]#“"ŽLg8Ļį¶¾¹ųā-ć±Ōę‹8F' ®čDł|Ā›äG±j–pŽéÓDW)“} |ÓāųR Z™Üżž5äö?ZrVb“œĖ}@ēč3^ĮįCØéŚf»”ėMoy “Eź”9ĄćłÖ2Sė²śżńg‡%šöæÅ„ŗ=¤ĪdE!@ėŸŹ°ü}aaw§ü@šnžtՈFš„1r²·÷†>Ÿē>¦…[žÓ¢xŽĆĒžøŗˆĪ/|©ŅDĆ$ž†ø5YWÄZM…ĀĒŁcÆpēśSK]EV)·sōŸć‡Š~xÓEš÷†g…¬¼;’ēŁ/Qcd©:ēpēė_ĮFžŚ^’Į-’bŽƂĖÅŽÖāŃ㸜mht¹ Р̆[{rn;f•DĄx§0Äą+åüĻāĄꤪ+}ĢüŠš€k–†ź6IPaŽÓÖ½*E‘" ‘±¹Æ5E×t┉ŽųS·š_ˆōKįū]P¶˜I “Ø3téų×Õæļ,~#čś~æ©^ŪųjeŠ=¶0Œ9Ē$d ķ‚#ƒG1Tꋉäß³‡üsńĆā>­š«įæĀ»Šę×MkN9dŽ#i6·¹œ3]÷ķgūxCą§ĆOxƒžĖßüL±·Kóį{“ŲÜrXČ`qҳöŻ’ēŽ"C.Ī©å“šr’O—­›µĻ<7Ÿ«é÷p4; ?޵³ocŽh„¶N cłW2V?eбŽ4Ų!Õ&{Hö« ėšßš¾›.»āIt}>͵ m–;‹”ü±’yż)Ųę­¦§ˆžŲ>š¬ Š’AŃ’²5 /.į&¶b‚Hš7+ēƒIšžņCN“”®a0Œy?ZĶĒRa-:Ft¶øŚ˜¶ē¬ gTM+GÕuŃÉkk™"¹äŒō­čĄŅ„u¹Ėdx‰õĒ×5EÅV­¤č‹[iܹaœ`sÕ±ųׁ|I±¹ŗųq”kÉfŪMŌ䓎`3•<&½ŠQ²±üŹļöžcW%ng¢ņI%ó²Wó;O‚? uķ^Öµ¦5Ö衍°Š”#?ÆŅ +Ęŗ·†f#DŌ¼–ū;Z4›A/\ż}zŠŠ•­±ś×ƒœ7N­9ć*-oeé×ó9Åø’wUoŗ$޵­Ŗé7z·†µ½2É¢Kʁž ż€x®IT¹ū½LŖ6²Gƒx3UŌmlÓL¹FÅJīĻ–A#½^Śh0'ŪÆĪØ…FO?žŗĢćÄQT åŲš’‰ŗY‡Å8³ÖbÖ¬5–żYa’æ8üėŠ<7Æj3ü›ąī†·7×:œw‘ź*ū¼øĆ)*A FsŽŗc+f•=“Ū}éėoᯄž ¹ń/ˆĀ ³ˆ2,æ+M‘ŠWäĻÄļŒ^(ńē‹ćÖO äk;Rå>Ī ĘJ÷ļXUzXņ!IŽģķžjV­©‹V(5 Åb@“ųAč:×Ö|ö¢Ł~ȶįĄĖķ ćüę¼Ŗ±>‡.Ć_”oūn(U¢˜¦Üö4‚śŚ&Ģš:W‰öŲ\5‘-ÄqŽŁøóå~µ„źJZžŅķīfŸģŠĄ‘—’iI!UTrIĒŌ.z‘…ޓžń…u¢ų‹AÖ<7ÆlIEż»A)G<­ŽµŠųKą6£ćūķĀļĘžøøœ«\ÜĄ$H“ÉŸØ­7YEhq?ųń‹ą?Š®µ6ń;Į²]Įy¤Æš1žŌk’:r9Æ,×õWY·ųú׈5ĶE¤ŽĻKÓ­^āāV{ŖÄƒwŹ'Ó×K īr¼dlŁņķ ąĶ;lj’ „†ƒįė{`Ń.,.mD7ÉqŚźčą:°aČ<ē5ņž»®¤y\,JŲN~õ}vŚ*'ł=˜U•J²œŻäŪm÷līSÄö:4J.¦aާĢw}+ŠfĻń·ćµ¢ ›‹­/IQØLŠ¹Ż 譒ׯFĪāl~žÕ> »ńO½CĆś.“c‰“Ļ3T³æŁūŲmØ ĪżœµķkāoĮĻųŚł Õō.å(C4ØpÄžUÕxµĻ£ōŻ#N[h¾Ņļ £–r:śĆp”¶ ¦^ĀšŻŲč2E[•2q<ÅĶsā Nśy%“k8hö7@;Ö¬ZéßaĄī]¶ƒŁā³rg<£ŲMöėę*‘łÕG²h·ĪģĢOŻ_j“ Fę=®¤ŠÜOī!G+§“O›TX Ēj|Ż…MX¤ö—–2Ge$rȲqĄąU9téŲ<ćp(?„:ķ­“Ķšę%|¼cūŽÕ“ØG„¼ņHˆģŒĘzÓ@rrxPGcxŃæ•É č’Ŗ½ĖĆĶ*ŖØĻW08iģõKmb8į…Čąļ^1Zŗę¹¬é7¶‹•-ͱūā1’× øŲķ¬t¦Ö£Ó@©2®#īžU‰ā]Ēū:|É7)ózŅ2åHłĆ]Ņę”Ķ*Ŗ}° x†« ÄzŠ¢C"ԁAHõŸź6 £^Ų\µŗ4j$ S%¦{wÆ$ńW†-4ŻV;ė{™$ŠåŒŽŽréłT«Ü¢•ę•§Žh“ĖC€ZćõXć3\YŚ„ÄŅ&7lSƒŸBj€ķ4OßE¤½ÅöšÖ‘8Ż'—Ļ’®¶<7į›ż&F„>ū}ĦzóĪ? å.…ļčšDZ\7÷ŃwĮ8ĮĶ`čš¼ZõŃŗÅĆbD@æ|“ƒAśi·i¦ųnėOÓ„”D ČrpńÆ·ńńūXŽå>ŠĪJă’[§¢ÅE.§{}¢x—Äśx›M—JŅ́ćĻŽG@N:tļ]Ÿ…ōė!ŅŁ–ĀĮPģ!xBL Óc*ćĘZ}åó[Łź&źT“ §§­jj–·śī—y“47ĶUŲ0bƒ&xļ4ūæ čz™-ŅŪÜŹ6Ģ<͇аü.”­ÜgĮ›ģå„łIĖąu?ZxF„©^FŠŚ›†ŗG˜€99$ōÆ@Ótł-ģÆRŹ(gŌ$· !b» õ sĆŚ&„m¹µ%ŠŽõåĖØ$€+Õ>ɝŖÜy‰ćy?J ¤µ.YźöŠ ł!ĪycėU%ž[;ö7k™IĄVlńīMˆµm¬É>š‘=ŖÅvłĻĶžŖ{ļ5 ΈQ“zģ/#ńÅ>tń惇„­u5°{›™˜¬c.I?Ć^CØx_·³·ģšHS‰C/QŻH |·<ņūĘŗ­Ö„o&”"4ČJ ąCŠÖńó^[ŲÜ"!œ9,äüÄc½e$'="ęxĖł·“Į\ė^…įķSK³1«B·žsa'­(”Xõ-WĘzMš˜tųaKxʲ²usų×ÄŗGÄßŪk’ݵ΄s§ĻrėäJå•WwgŠVŠ#5~!JQK½‹ų€ Ą‚Žø®WE»Õ$d··–éģˆŪåäœ{śŃČ„Ż«>ųNHōkų­¬.$¾–o5ßmƒ?żjõÉü9§ź_Łš][Į$š Ęū@dlõĶdO>§–xßįĆk×.ę{­6Ž';q³qŠõ5ę–~×¼'©]YźvóŚ#oˆĮєŒ€}éĘŻJRFʛö›ūÓØKD˜Ęöą ³sq{n—wR(q ŪÉĄÅj݌„¹”įÆiwV×L'³¹ }ęąöŖņxJÓ_žł§•–&Bœ2殗:&ēg¦i’ŲŚTI+NŖw ć$ņ+ ĚöŽŃ Scq˜^DAĘÖ>ŸC˜ī|ē©h²C|ŗ¢ ĶŽ{×] –øøA:JI䒽³ėSĪZ™oÄZ5•ĖŻL·aaö“ƒäöØ<-c„Īn.,ę[ņŽƒrTŅ-Lķī›IÓ!FŌ.P–ŽU›ļ^éąßD,ƒčöāņžd8ÜŽ“Ę|żr¾ų‹ć]kGŌ-ģn¶Źm?uśžu©¦xĄŚoˆ4/WŅ“"…ˆ “óœ·>•¤eЇ;hv9ųs¢5š]xsOƒĆ–Žo,>fœß?…qØ'±XmvÅ,…Td f„źŒ%2ž³ą[«ŲmµH.#óÉĻ”I…y£qØ[]ĻhĻ, dŚAR{š“?3Üü/ą8&šŽū[Xī­Õ¤l2²’8ĶzW‰m"²·°q¢éńĄĖ¹€!zbš“-_ ķ/RŠi-,Ž/&E‡ć×=+—ŌÕ-å¹7ovūN]˜asŽ®2“>_oiwZ­ dšhĖ *= pV:›źšņ’”=1ÅY^ĪŹĒ¾é66v’h”{Ł#Ą.*>§é^”¤ų6źźÕ%Ó­i·n}£ÆćXJć9YÜMęŚ ī ¼€`ćųqŠT~—S–mg-4€6†ڹÉåEvĪymŚbræ/Ø®cF²’āUó×tčqČź}©„Ž¢ń…±ū"/9ŽN>•¹ż·©Ē¤ÉkĄ±hԜŽū±šŚ/CH­ńģšŽ„wg%ūCuøƒņ¹Ē©m|-k¤ińź××ń¼q‘÷æŁõ2Z–y½’ˆ&Ō­š+g¶»Ūę3éÓµhé²^,0 ›–ūJ®ŻŁļPāT]Ššn³©éŻżŽ„yw¹l(ßņķĒ_Ļ5ŪĖ{§kv„ÜĪģ­ŹœągŌŌM{C‘Ć¬5Kk•fpAā¦ń€l„@ř„Ż’éĘ=«$ģg)ŽŅŅ=&'‰ä]€r‡ž*厭żŸØŪŻĀ±©qšI29ŗÖu+ŸA^r™iQS%×5ņī¹ń:īś}NŹ 1žĖ/īćw_˜’“=+Ŗœ4Ō„ęy-ϟ XęF|œōĶkA£ĖqsFÓ Ę~^1W(čkzg…õ“·–ĪāFRŗš‘ōkW”Ķ9r ē§ė\5böG])[SØŅ£³‰Ń­PĪ2§œć­v–·Qļͼq$Ŗs_™ĮĘMu”I8Ł}£ZIå½ģˆē>•‹Æx—K…^PE1ÉÆ.‚“•N»²¹į÷:­Ę½©]¬É˜ū„ßś ĖÕt­OI¼"S?ȬJć#§įšūŒ+$™šŁ^fĪžĮī'(Ņ,žXĆ»]bĶi&mķŽ.Š~]ĒŽ½xčxdM­č-in&[14 Ź«’ pÉox°Ēq3Ū挕Ü4“K&yp:sƒU5-×MˆÜI<v|˜ł˜żj¬s œŒę,˜»µˆ—·V’Ŗ*įKc'*śŌL‰•ļKµŽbpx@SU"āYķ|c=Ø»"2±×irŚ[Œ“č́„ĪÖÕ]Ū‰aTM£éN-š¦yĻŲī"žK‰d‘¢Ī9č+bĘėKµ`baēĄō>Õ©jM³?±ßŒµKĶ'Ä^’īf‚Öxå±ī€N ńųž•śEaV–z‰ˆ_Œ1Ē5ķKs”ĮŌm„ūCĖ Źˆ§nē5ó7Ē’¼ŽŅ5 cƒĖ¶øg–RFUĻóØ9j>Ē?ū8jšdw:§„-¦ŠęĪXÉß&v9 ÷ksćU¶—o=Ü6hc–$U8M”ˆŲÓ1rgƒā)VX6˜rĖ·œżkØÓ4µ™kĄņø =VĘ~ŠģgńN­¦iGKiŹYHC©+“OMr୑±BQī÷÷«µĒj{/ƒüAį–‚'QŖÆĘü߆kęό ­£ńÄZ}œöB\ĖęyėØÜ@ōØq±×M¤|Ŗč/dóG&2‚:+Ī/ģ<¹åÄäąåyā”Z5oCŃ>ųš_ ų£K¹TˆĀł…Ÿ‚=’*żFš¶ÆkŖiźEę#–# ĻNknnĘ2W:’:yųp@<’:ĄńßĆkŸxk\Ōģį’ękXDœa·Ał~•ÅVZ„#f~mx– Ķ'U‚ĀęŹ[iŲģņŲ€W9ģ>•±įxxKÄzüņÜY.“"ü¾l}Oā rž… 4>ń÷‡-uĶĻĚ-¤w^ŌäH̘1žńč+ö“žgūY£ŚųÆö>ń›ÜiGGĆóJćŹbˌwłšøö:Ҿ‡ōh k;ćm8 ń¹ƒĘGq_{|.ń”>%šāZŽl±,l `8’ ‚'žšļ4/|3ńe½’„5ėIlgŠ` åŌ€pAś~#ŅæĪ7öóż™#ųZāéu­ ż/”E1C,`éĒ\€kūÜżŽ’hćßĮļ†ž<š¦§f5m1QŅ66%`Ą ›Wō*I?AšŹkC®1?[t]Aų^^]“§kG=„F!—:ÆsŒ0DZ­]KRžŹ™/īJ’g®"øSŲ®ˆŌų‹ž 'ū.Eū]žĖ¾6ųg§½ŗų’EC¬xvwMŽp“ć8 ‘€‰»_ē_­čWŽ ń&¹ąĶj/mÆ'€V!†ČĮ²‚÷šaĖŠó]FŽ]7Qg‡z®„`^¹įAÆ Ģ%x©CB^‡¾YļøŃęŗ2†hš§iäfø/éęėE»Ią¹ĪAaĪy’‡5KRId½ #iĪ6¶y9ÆÕ‡ŠŗŅtłJÉ“Ą2Ää7½zpzÕ%Üōh<Ć*¬r&:EŹmdd]«×Ž•G)-˜ó®9jć½jėws¶&ļŹU_™qZAō“yāÉå†ŚŹbgąJć®+ÆšL%džāB5RB޹­c»ū|šŒŠ’co—$ō¤¾ŃåŅ®na…”˜‘ÕH Š2­•»ĮŒė†<ūW;Ø5ę Ńm‘õė@6gk+laŒĢ¬Ŗ1xĻ„WŅ£§YmŁBõ>“­Ŗæ“y wBųōś×7wŻ“ TśPO"½ĘšĀOøĄąWG#KonĄįŁyRzŠUŠ–wY]3þ/ņSPŁ_ź0½āG:“ܱŻÜPg2õœ—Z…¤¦HŅ9ŌaŸėN‚ę°hJ«HĒļwŌĢŹś}ų‚č€H##‘]†–`»‘U¤-–ĒJ‰„c©Ōt›+HÄ®źĮŹā¼ćÄ——čoKt' ÷ZÉy”ępÅ1ŗ;µv+yķ4õ6ĪČēŚ·'sWƋ©Ę¢Åf–ęGnß`+³“ūu™žŽņ®§9aŚ“ŒµŽ^Ł%ōYdF9©¤’]6Ö&“Bł8z“§„]%Ӝ4Øćż“ŒÖ厕o{§Ü䔺žģ(Üņc¦K.©ĒŠčˑǭ}=”ß "ڃŖ£AŠb_ųŖŚā’ÖRb$c\ޟ«9øž²ņÖ2•Į£Ÿ×/ œŹ’3Gøņ\Vę‘ic!‡ķNŒY‚;Tˆ¹6;Iqp›EśW3 Ż­¬³ĖrŽZĘz°ĄČ4åcµMdjonß PæZŒ-j1j0ŲŜyiŲžvWń燭lļķ_ĆŚŒ:¦œmÖD+ŒäŽAō9ķU4O½Ż„¦§yhń_)łAžE;’źv*5’X;xš­84T”Å%«Ēų} ŹuVžšŚō]\°’&īŽsWÆ% p$feŪŌJō+kSŲ[Ū £É'EĒ+^Yj/\Fæ{ĒŒę§˜ÕE£Ō|żBÓ·ķ~Ōč6ąr>•åž&ŌĘ„2`HS”+üFŃjżNvʳ¬*[ žõ¹#Km*Į)_˜ŽōJVŠhš|HŪÕNA''½;\Ņķm”J\uč+x~K[ų.ą`ĀŁ”ņW#ėō­ļhѼah¾T2)ŗ)ŠĖš®—yšćVÕ[Rd1ݱUlrä’‘]F„Ŗ[Bžu¬ŽAPĢĄr=h*MŲąµ=V]MŲoiżŅzā ŽOc©#(A,ūĘA ĢöKmzĀśźŽS{arøż)|xŗ|¶:h²·hµ² ļFr3Aq‹8‹k»«»cŖCuŒ6p+#T–ßM2ڼ¾|쁁VįO„‡™Ē}}sØIg1(6†Ąé×ֻ͠¹¶»·Šć{ū¹+Jc7ē“ŽāZ8|„ łq^qm¢ŪßO4“b[t}„ƒÖ‹Ōͦ^A¢Mm¤d¦Cn‡üä×8–Yž&—)(?6;Ņ²Ń­Ś īš™¾lüÚ[ų­ļ.ßaQĪ@höCĆjnmŪŽ6w/‹ēŃģu;/°Ūj+4õmżįčEB<¬x—RU—A³™ ŗœyk³ųIļJś#DšåŽ—¤ mS7,möK#ąå±Ū޵“R±NLįtųm5g‘NŲÉĒUąV­õōZģZY»4i‘oŌ ō§d#ʵ ^{[ł-ˆØp@ą Æ>ŅēgȍĒN”-²E­;H»ø‘ʰNŽ 'øÆ¦ü?ÆA—cgzÖķøä67}I¦tŽŌ“’N“ZkŲļZG!bŻóGĒjš_„¶±ökHäÜŹdƲs¹oā =.8mäø†;·žĘ½CĮŗŠ·±bfK«“ūĻŲ“ķSr%±Īź××Ļ«“Ŷ[;ÄV^¦me‚ą€XPQKþVÕ“¶¾•"Óěeć9÷®·ÄzgŲ~Ó•wm<±¹Œ* ēƒhÄņĖ+kė95 īŃą9,CSOŗw[¶8ķH%~‡Ŗ]ųC_ø†Åc»XtĒp'©ć¾p+–ŅüSjW:“msc x³Īģ}ī R“Eü-o§[ź/فyIĢ£#ńž“żrĻI“Ōī ÓR8­Ė›NBäśŌŹe.ŵÓmn-das xR»‰ļŠät†0Ż,P+1GĘOń{ÖĘ'£½œsŁI,"JÜ:ZÆį“iw7’érķģF8üéd^jÆi®ŲFK”rĪI_½ŽŁõēō­?ų;Gńnœ¾&·¼’z?ݰŌö'𪌬kUš‹Ć…Õ“„æ·<*s¼VĀŪźFķA+x#šŖö‚¾ŗyń6įģ$Š,aFxˆ# pÄēüžĒAį]@ćQB[™Üu'üš®T£sÕt»;­bs v‘“QŤŪĢÓHē’N3Ē­fO³8mdy(Ķ2¢īČ ‘ŠńK„\ŻI:›aćqZ Œl{,±]ŁéŠ“³D\€@ Ī+Œń>§6b“ĀY„‘wm$Pѵ3›šēˆnux&Kø^œķž!ėU5WšIšDdqÖ³pŌ銼nųnęņįd‚PŸc Ÿ»œXڧ‡ Õ/滲]Ģ:ŒńĒ_ėW~Œ£æŠßN0XĆ Ąčø>ę„æÓžĆågläö¦©źśN›§Żł°G%ÖHM£ē÷ä$āRĢČI''&ƒzqfĻŲ.­ļķ¦hŻ?ˆVē‰uqāÄ×LĻr ģŻÉ‘ÄiūĢL=ElZéń˾{¾ćœڳ•D£O±ƒRYÜ7›.ütāØųœMŖčŅXŚ^Żis¹ÉŌwĘ{×|O)ū/‡ęYÖ".TŻ:76­użŽļš]z_‰Ń<„é›nd}CP¹gŻ+]I»~=yžX®ƒP‡lq­¬"©łc€=«Äƍ“Ųžłį_ ²Ü®š†šæv®žó«·šlŃų3HńĪ„,_Ł“]ż–X°CĄüsõėX²Gceā3uįó<öØįā.Ÿ0ö8ā¼ź•[?I”†QVE‹ė»écøæ¹Ņī"UrĪĖÉõĄķW­¢[ĖDžŒ†ģ+Ži³¾ķ±‘ ŽEāsā›;÷7k*Ī€ząqėÉĒēPjńžäɬų~öŪAĄ“¹*płēÓõśTE>†Ń§sSOddņĮü*޽įų@pUš¤ćč ņŻ}µ®Æˆī¦Õ6*<™É`jłŁN™¦tÕŌ!·O$4ČĮƒt5nX£Õmīķ#P'øŚ6:ŸŹµG=Hgģ{ćųcYńĆ āÖ×DÕÉ,Īųxå^鞜_H~Ń žhæ jš»xƒĘ‹¬`łāBGRN:`֊: +jƒķ4°-š *6€[µPæš„÷6‹.›0³–&óSŒóҰ›čtĀ•W^¹·Óōųd“G÷²3šŌš„©4¾YY߂i)÷&„3菇­¤Ųź Øjó$vŃ+‡?½|p+?āˆ/|W©ŚĆt‰0cÉu<…ĒJŅę…õ8K=I­nŒevžżėē’ŽöƒRń§‡|`”-¦ņĶ£ąć<Š~uqg›‰¢}!ū1xŸMŃüc [ė’[¾…yo%­ĪHŻĘüOå_`jžÓüÆµŻˆ†{ 9<Ųd,Pœćņ"»iK”įbpē’čž,ŗńOÅęńmܒ‰Yž㛢 #öΐņFˆÄ§0=ėҧ=œĢpś#čĻx»K–ĢYk›ć; «ƒ×Œs_2|[ń“QėÓĒ™…OrqżjåÜłŠqgˆC”ŻĀ¶šŠÄĻł²9ĄÆQÓĘ©§Ū=œńĒ6FģŽœÖG«‚ŖÓŌŅń.‚®‹e{Y §£9厾~)ĄzõرѵIŅĪY¤PU2٠Ϧ(±ōųJ÷ŲÅÖō/žĻ?“#üńšOąļ(¾ŅõĘ&ö'±9ŠxėL“Jń5‹Œ:Ø*WœzÖu#gc­U½¤zĪ©Xė7¶šf«7ŸØs‚H#ō®æž ńI¼A’©ųc„j1Yh–śæŠķ-4kDĘćmƆ>¼#¶Gb+–]OĀ|T”:™¦Sšūx;y¦æ%łŸ†_ mŪG•b –æ'8ööÆ{šõŒļ®ī® †;[g¹żąįŹ»ų× ^¶?­)b-I#ξ|Stų«”\ų˜ŲA£Ü]m6d$Ļ­~Ąų«öq±ų“į½SŅuų­/-QīJ ~ö qõąž•ŻM\ęÄfq…¤yŸģońÄ_±‡ķ…c♬ķu?ų–+ ꄁL`|ą{2’'Œg5żžŪ’³wĮOüC«üLšķ•ę­„i—ŁŚ¢’“[‡\l.>ōd°8l€NF2s×zX’>>—4„‡ā<æ8 ģē_œ%{üŌ’ų~ųbļ§i3éaDÖ7W6G'Ɨ+(?čRk¶öXŽŃobv®y5ĮR'ś7N\šS]Q•} ÄóK+lf9ŪŽ@­Oų¦…ž8›ā}ŹO}co‚KhĘ<ŲIĮ Ļ_˜ż3X3›Jńgø’ĮKægOü*š‡ģżń-tūdšļō§0–%d¶øh–UWøćņ>Äž}|7Ńõ B†Ńäy䏍ŁūÄÖµi8JĻś¾§ÉpWŅĶrčbé;ūŅ‹õ„œ_āŽ·W:‚ŪĶw!UdĄ`ŻGҾyń÷Ž$¹Óļ<5jńÜ=ĄŲź_§ó®Ģ-$y~(ē”š5g?ŠiĀ+»’·ą®žGžx“ĘwšĻ‡|;įÉģ‘5kr~Ńp¤ŹĘÆjė¼#>•'a)•Ź>^‡ń5œQńŁĘ-F&­Ÿ„ ×­ā·NX²$ œ Æ”"¶Ņ<¤Į¬źrDšTI•š¤€śÖœöŲüĆ„hõ?:ž.xĒş|B#¼ś/„Ó+o͆•|»‡§Öø[?†¶Ś†­oar4)÷¦Ż€¤c‚:¤ÉĆaœ™é3ü)“ÓeC”ź­Ū ČHłIĒn³ōMĒÕäóŻ„å–Ž#É'ėÉ®)Ģśü Ē\·z„̼ńģP2ŁB¹©/|K~D–š#©Ē$cė\®nö>‚åFž“āŁķ “3ĘŪ™ϱ¶>|HŗŅ¾0x _l-5 ?Y‹S·&b‘ć9ŚTcƒšŽœŽ:õģ~ēźvņž×Æcń ĒPxwL½†¦,Ö¶ųHöå€ó×ß½|Óā?ŚŚĶqįūøŒ3Ćņ£2q"Ž:ōōÆJ™Żž*=#¦§Yšƒ^“Ą4š®«qb—zWBų¶äKlTåqƒķōĄ®ož Cū)ü@ż~&ųö鿊µß k·ńéž2øš¾ ŖaXÖ$b%‚æ"½L5Żö?/ń+‹qMzU)«Āqؚµõ²q~žW?“’‹?„k2Ē•Ī6Ÿz d¬WE¶‘g¼XöF£xl÷©ōķEÕ.Ś@Ņ·o÷‡­sŲ®śÕųņSp-øÄdجk—i.ƒŹāYóԌPbI ĪņˆóĪp=+³š’…īµ½FßO„I4Ņ8ƒ‚Ęƒ>sŃ!Ҭ-­īMŻÄB[|(Vē$EsĻ­Z-ĆC Rž„p)ÜNlÓ¶Ó’“ÜČŹÄ.āµ[ÄlvébiłyžtG„kphŠJ·w}°dTäæ¶+†×/ģupѹ$ē‚y"‘œ¢y© 2ŖŚ«šTy‰Gµ|ńćĖm[EŽ[Ł &;°f€Šv*ųöže½¶– „łĻ y®Ć[šŌ7é+6č‰+Ÿ„\ó{›=JÜÉfcO#ē8'ڬé>»²ŽŅ}ńŽCJĶĮĒ~(čÓź7wńÜ]msiYŹ/L p?*łūXń_‰dń–„ ņ„„*[Å<ŃÓ-ļAĢīµo_\XŁŚ5“N®’>W%x=k’±¹”]‹7 cū“ŪÓłPdu¾"³{O _;"•.Øź8b§©ÕOĆŽš‹k ļötRČĄ·‚{tõ D[źvVÖW‚&,,cåQŠW9ć=?KŗÓa½“½Ł3dłJĖŽę„ȳŠt«a5+«‡ūTäF¤‚Żøéھ“šlWZS¬š–Ė ­»jń•ōŖ]ń²ų[ÅMfŗ†‘k6”2Č7¦zW“ųßLšķŽ–-ģÄO9aóc tx¦‹įŻ!õµź-4)-…9ķ^»”ʑ+ŻÅe”½YĢ_b?ĻŅ€hņU:„–Ŗ„¼lĶÓ ē„wś…½¾©šéˆ°~ēk«r7¤PŲXóĖų?³®Ķ¬§uĀżįžkVŚõ䳔Aļ”g-ŲzPfzņy§PD²uc÷›Œ{Ww¦²JRkW¾2¬(bkŹ÷Ę3w¾8Ī0M|Įń#Hµ³ŌZ_łl£÷dņIō jV×XTžŃ/l¢möšČƒæ«{VŠF†§ĘƧğ i:w…tMFÖtēi mŚ&^ź¾vš×ƏA©%Š£Fcŗ¾Aϧꉔnwžų‡gąļM£ ‹›]J%h¦@:z©ėŗ| ®Ž“[ė-Y𪬇kzŒžk)DÅĮī{/¼)įh¼¤“sĖ©s";’2{c¦ Åx‡Ž¼+”ųGĄ–šž”©$Ž#½½u¶Fł³ńӚ‚¶<óÄis£Ćg§[LdG%Ū<1ö…yēˆdÖ®l/M꣐¦Üō­,„y§‡ÓPŠ-m<Ų:ē*A#<Šõ›/ŠĀV_&wˆ”$ZĪÅ*}ĻR¶·6ŸØX\ŪŚŲF£å‰yaŽsš£Ŗų]|G¬Ųxķ"×L0|°ģł˜ń“Ÿ|V-²łŻGĆövÓ ¢•¦“(0¬øŚ}ė a¤Ż,j–2 ŲBóoʈ”:gĪŽ#澗]ŗ0Ć>É2CmćƒŅ¶¼ ÆE ¦ŖŅ,’Śo÷°3čGŅ·ŒHåeOź~#ń¹ŗž?²ī•"½Sį^ÆāÆh“]M©[\ŲÉnŃł8ū„‚7/āk^U±ŖVŠņ­+XŸĆŗ­ö¹1’śżę26ÅĆ0' Å}æįMvÓR±±»‡M zĄI¶O˜·1ķͤN')㯈H··jÆFŒ?AÅyƒxŚÉŅKæ&gd#bF»ŒžĀ¢Q±Ė(Ųś3Į÷Ś?ˆķm/£ŠēHœ"fł;±ÉĮé\‡ÅźA ŌōČķąę]ĘUɑs×?AJIįłä¶‚ĖMŗø¶ycŒź@µ[ƾ,ŅtM.KĖĖĆ%° ÆÓŌU(³xDł^÷Ę:·ˆßPÓōėK˜l%|#£}¾Äs]ę•wØŲZZŻj7Ö³ģ ~r:ŃFʧ•Žü8¼Ń弖٤˜0.•…yį<]­Ķź"uq‘ŠŽ,¾b OCš¤šŁ <Ėöģ1˜ŗ‚¬}«h`ŠD¶†?Ż284JE©tÖ¶¢ö#Č#wÖ»ŗµ¾`XBKĆŸ˜W%IŪTuQ×C29%µWņ”‘$śfµtwN•Ł$œCvīć<śłÜ·7¼®ŹźrĘĻ”ŽŽźVöŪ…Īģ§Eė^YwlŽ)Žn]c¼+d3ڼZTesŲÆVšhēėūh ’%[±óydóŒ×Wgoq­Mг §WÖį>Łń8ŗnīēLŗöm¤¦{æ>V‚Œ0WŽÄv®5™cŗWĀe_p&½8³Č™ō5²éæh0Ö(FÖćÓØĖ26PĒQ]l–0ĒoäCŲōģ€åomļ“‹¢·Œ) W=”‹›ģóCøpŲ;ˆÉP)ÄŽ*Ē#uā'YßĪ*QŽ6Y©sēŻ#Z#B Ž1ZO’³?Ćįż¶”ć›;Hb’a)=+Šž3ųĆK×uM;X—Q¶³øSˆ|µŲsۧҽ”y’›½Ō~-źžŌµ]7mž ­l•$,ž ž³ķ>&Åā’ ?ƒ¾ ŽźBąaG—ākEe{Ÿ źw÷žÕgŽĆUžŽŚ)‘ķČ'fzwé_@ü#Õn~1źŃéČMōD€Ó¼”š™FĄ} ćoŪxcM’ŚÜ:źČč„PĘ£šW…l¼Cį–żāŃuxŃå;Ü`ØģæķuØę%Ē©åž2»Ńtø-„““žQ{“ĻZ‡I“K¹@֍ CÉŽ;UĘD8Ų][SÓ­<›Ę[\ƒ¦>¦½w᦭kń}ŅäŸMĘÖį¤+ęLĄqžę¦A–?:ž>ŚjńN­¢=ŒŠŹći$®1_;OøÜ įÕr3ѽŖ#F£h§ł, Ē<õĶ}ßū7xļQ“J>Ōīᵕ.ĖA÷N? éQč;³ģ;ŗ'Wó08õ÷­h.nć‚h"šH·› Gē\uā\|ϊ>:xWPŃ|Tž%–Ų]é’0x„ bNr9ķĶxÖ„w‰"iµ/.¾b ?Ęø&¬vŅ‘ļ?¼Oqā-Vųkvį‘Õ¬%ŚKóü ųžB“Ań÷ŠægߋšÅĻĘÖ~%šķüD$ÆåyŠ ;ŒgŠøŹŅ;¢Ļļ'ą×Ę žŠ_>|lš“±Ķ§k:trÜłcˆ§Ś2ć‘ų_K|(ń:/‰¬ĢģĘĪbR^x>‡š«”lģ9;Ÿeų“D·ŌģVhTPJ’Æē³ž Ķū'Ęo‚?ķ=ąü{į3äė« ’ņĆ”Ü{ķ$0ō }+ ĶØŻtkĒQƗ‹4{ĖMFękˆ ½“·‚=½ó^ex¢ßybĢąā»£¹ÅU¼«æõŠK©ē‘[*Ģń(v'o_A[œü„wŽū‹1uĘŽ‚©˜JģĻvģ}+k”bXrčģƒoQšrœ:™1‘ųӊ7ƒčlŁŹ‘Hw3zōÆŠĻų%ēķ‹wū~Ųžń¶¤ģ~x””ŠõÕTQd‘óżÓĆ#½kNšęI½Ó\’G{­#VѬot©}:āŻ.ģŻphŲd}¹Ļź6iunKHŲm~+†ŖŻsć‹ß Ķō-#[łŗ„’{YqĖGƒ”Ϧ?ĻJüŚų‰į-;̵”Kh·PߥZŲgi†ć‘ƒģFAø®bdĻå;öĖų#{š‹ā<÷%®Ÿ„ßĢģŪHeqĒś×ĒwŪ ®»ĪHC··½vSŲäØŁUM¶É„¢WrøyĮØÖ'‚C±všHź+®;l„„Ä‚)CJ9Į*]ŅłHQ¶sĄä `(ĪŒ:³6ӞG&„ņŃcIsœńA“{’ˆä v. ķWm­’x»Ÿäõ čŠŠ“r+˜ä“ä݆9ėžĀæ`æą_µå×ĮŸ‹gą~©©ŲOįūūōŌ4(grZ ×dj{ŗqI£²™żÅų[Å:OąŠt=>iJ’¬č—üė Į’ B„qßńÆl¶¹µŌl–éŌ\Ē)0Ī 08 žUĆQlļ,bÖ-ÖśŽž>uĒśŲ\W‘Ž@a’źÆćž ×ū ß|ųŻķą;;SąL÷‘$k“­Ó Ėć$ļł#µy˜™rŹģõłéłŲ‰JĒóÕtŸh·KĀ…ƒ.vśOØ¬Æ jmatĢ<Č·667jīÜĪR=’FÖęłć‚«.]3ÖØßj³źsĻj‚X”Ī āÅDUō2s<ŸR:óɑ B¹öÆ·?gOˆ·wtŽÖ/&0X [6#>`'N;s]”Ö†Mké뱬ČåøŚ·É ]7ńŽGJ³–“,–³I!ĢĻéVµś¢Ē".ł—ŒĘµŒlO6—E-CĆŲŁŁß“%„uŹ9'·Jī¼)}«›øēūC©äœv«%KSDk:}‰Ė K†?)=+Ņ>Ū fY%Õ¤7v„šL# «Ū®h¹„Š?쮼3-„­2ŪĶ˜¬§8_jćō]'ķ–&źąI·ÆŽéQĪn”£iņŹŲa&9Čõ©­,m”ƒ÷EDŖpyėRä|¾ī噄2«cpž™¢ūJ‚ŅѝNÕ^1ZG`0Ö{1•˜p*{›ÜZ¢ĘK3sź£Ö™a.”źB„vbqҹÓn§×ē¶vAĻ<*«ŻĶļŪÜčpŚEę’(œÖŻM LŖ„ę#¦)X#ęh[[O“ČčŲ#<Ÿ¹U“ūŻAn±b[rœ’¼ā•,ŽīĻQ›Z²øG,ŖJČXcšļ„äÖ|*!ŽGµ‡!|Õ??NĒš„Ź„ąyφ½äÖ2\ „V „® ÕØ4MNg v6@™ǵ1%c„Š4Ė›}QCŠeF:×_¬hsĻ(v`…ŌļĒjÕ@Ģņųv- LƒRŽõ¤øņŹcīŒŽsųž”Ķ!’čƒ"Ež÷šÕ±²Ö/¶=³ĘQNræĘsYƬ*(dœō͉Iš¶_N»w9ļŠ’ėÅ/ā F #OQ³¶ļĒOēS%”¹«©XŦ[Į‘¶żĮėT4ĶJ?P„ĘĆĻ$Ķe`9Ÿ.©wÆźMsX؃ /Cž¢»o‡mÅėĶ”,1ȹ gœŠØ=ż‘OģĖŠˆːJņ½wIµŌg—H(e·.69ž/󊄣ćvv'‡Ķ¦›»Ū€čć$ī"¼‹ĘžŌō­Jāā13ŪHDŠē¹ķJEĘ=‹~†īņęV/"¤D.pŽĀ½pĶ-¦b’6EóŽHłNKRxęÄØūĒ99©<9o¦Ž’h]hW ŹN~ZKĢOČõĒ×4›€÷Ļ·Ż Ɓ\vÆšŽāźÖUlńzŠöw<„j:ĶŌ–ŅĘRŪrsĪ mŪéZ3ÜJŪŌ’p+lOs¶M’JƽF>ŸJĪIQn£]Øųˆ'Ž)„gF™@äć“Č«QĪ ¬¤)ĄĶk05žQ§Ķmp7\†eõ­mLæ‰Ū|ĒżķŖøjlf„Įö‹S÷”ē5ßhņA¦«ß<ɦ0„fTw2üGv|@ŃHÓ.Șŗšįļ„“éפ‚9`ZFĶZ}„ĢQF Œ§ ō§ÆŸ6¢°Ś'īw•rOAķA‡”éŠZhWWc‰ć½z·ŽH> ³æÓcyõ0ėŗnB€G#xrŽ6ü8ŽQŽ’-{‹‰īļ%G »Ļ„hiZ­ĆÉuz¦Ó§ZÜņ-¾Ōl“ėwiĀ‚xź>恠i戵›Č®—CŠÜZ¤ˆw:©'8ļč+IŠõ/Køó^VŽāĒ©ģ_³=#ĀŠ„ęžØ’eīĢxÅ3PŅaŽYŖü§ qHNiį!.aŹåIŪÓ9®'Ä÷¬O¢Ś\gRFÜć’ėƒLQ]jćPŌch`ņL‘3„ł:Œ÷¦x‡ĆÖp[jvš<Ö²0FČ9V’&‘²F姃ā±ŃtßKyöŹccŽCyü’JÕ×4KżOmō—0[œ…ŚæZwÄė36}³Gå+(łææLµŌ ±Ži‚ė–P#Ę®ļ~ßuwpĢXńŒņ*+Y%L:Ć9~ŠŽ.ēµč{ąµ¶’HY0Ą‘ŪüęŗĖŻ/®` ¾ńU9 bŖ&Ņń-]fN»Kdäś ói.nnu`V¹IwzĶjĘrZ»ßźZÜÖ°F„ŪlŽ cŌW±ųwJŗŠ£‘^o5\üĢsŽōrŠJęÕŻā\ĀŃ©a#„P·ÓF Xn-Žō©ŪčZ3A(fD_›ŌÖ :]õŻŁ“¤rĪŅįĻØü…ńŲóæ^kzn·6›©Gq²dY"Źä0=æQ\Ż®™­Ś¬7Ń[LŸ¼)ć4ģU^“Å÷§J¹“ĖlHšGmŲė^oįĀś\­ŖIn±\8,ł'>¾½hŃYłW—vśŽé#‡–Ę0 gŽŻż®ą¢*³ēéXIÜ wņĆiim”gøn\g€jŠĪŽŅ̌śc¤Ņ2g ZŽ“vjč’;±śbµRE†ŲČņGęŽ:š –Ńddˆ2FzכKswotnc»•aę@ß)ڦR±¤S.Ē®>öNĘÕ®IBRkWHŌß^·KØŁ! ąœ#·ÖˆČIwˆģ§:„ou/Ū3ū¼så×[e{k.—]ņj‹jäZĢv6Æ4 ) @隿 Ė-ģ,¶Ņ}qACuM";ØŽČ&s’2:_ ik§™"U„–Č<‚*cJę¶«yö-B;Kõn]ŹżåõśWā—W¾…-P} €KPt(ö8MB-CCžI­Õ­£ˆeŁųWs V:ž‰†ņµł‹īᇰ¤nkč–ߣVĶģ6³r}Efė$ŃōYćXcHŽBw>r ©q*1¹‹qā;kY-|—ŠV“Ÿō5„āŻBē̵|0ĄĮčEQ¼iœEģjwnš]čyŚĒõõ«vś«Ÿ4‡·#ļ ĪUŠtś#m<ŪŽšūąŻŸ›°Ŗä·{fŅ&¶ˆ`u$ß½rÕ®‘ūē†Ž ć3Ø,]{Ó£Ó¼½<¼žāg¼ W÷7:TĖwrš°]Ŗ=pUĘtGō’}2lÕ|Ju¦¬żļ…5äæ[•ŽŁęE’pp}jT7K2}ėĢ­^ēōf ¤¢¬‘¬śADg*äż8‘§éļ.Ŗ±Ķó…Ęzbø^¬õcJĒ ZźVzƈl|5:BŠ£y‚Ü·ŷ𯨼[šMŅ|+įmL·–Srßéż_<Ö°„qJŖŽ‡;a§čš~”§ŻxE,m0Ę Ą>® ®{öÅż“Łā§…tÆ ė–µšÆĘŚI×<;$’0·`ĖÉük†WĄ`z‘ŠŃžaŸ:ŗ9nŖ¹+öj<ĖļIž)š^ūLšŸ‹õ dx*ļ]Ó.×mśĀœ9ź3čsĪkŌ|sńĒā%ꑬxgGÕ“_é„Ū=­Į¢QŌ0ĘÓŚ¹åÅ:īö<·ÅZ|3·‰t+1Ŗ·vт|ÆWQéžßżj­¦ÜZ߅ŗµpšž„VnÖ;éM²Żī›§¶d »7LūזéHśœŚ}ĮXäņšx ŒtüÅAŚ‘ķ ¬“msĒŗ?†µkßģūkاmł d÷'¼KYžŽˆxæÄŽŅī'Ń,®^+É÷`D»ā©H~Źż ü=Ū MNŽC Ņ//”`>£šģ”Šś="ö n.o0žb“Ó4ĻlšŃUčiF,IęĀįŽ_„kAł6ē±Iš:JĘG‰¼m©Ł#¬Ÿgø‹. ÷Ą®CĆS%Š˜ZMēqļŽ³RŌÅÓģ{źlŃ@~@pzŸZŅ.÷;9É涊¹¶wof!Ź 2{יk^°ń~•āI.ī"žŅ‡kŚBGŁķī+t;Lą¾Į©]ĖØZ}ŗ†“8/ ‡Ø#ęÆå_hxĆćn§K¦iS_[O,¶ØnpŲ17BkŖ™į×§} Ś\śd²¦«§\Bųʆśz×Ō^ńžŸ®„²Nb»B21Ą|p®ųŹĒƒ‹Ć¹#č­#Ć·šÄ$0Nč‘4ŽČ ņŠY°ņæķ=ā |;‡ąg‰ōKiÆō?ŲÜ ›€~a$,}§œ’•l|n-%V4ŗ·oĀē?š×ƚ?Šēŗ‡GÕmļmā‘RTŽ7!'”\׌$ųqgmeo¬ųbkū„kˆĖnóŽŃ–O23‚å‘ņ5·ÄYüKć7Ńü©lķmY ”Źyg^8öąÖ'Å--"³Ö‘ö0~ųōVƒIĢśŒ5ęXż«<}kń?ĄŸ|C§„¤ž"šŻĢBKŻæ;D@P›¾¾õŁxķd¹Ó¼1¬Ł‘”‡ĢoBS·ćS9¶īĻJ.SŠæeß Łx÷ć4—Zļ‡īüAį N7WV±9S,’©Óœˆ®;ž ¹ąė_x7ö ųMį›Yō ==¦-°¬p°,O$‚ķÉõ5É=®<ńneõŽ?Ė2ŪŽ4×5»JÓ’‹?%¼=¦ź:-¼V¬č_`iāŗ¦›S½Ņ5ø¼č­Ņ;i™ŪtõĄ™żhéµ #å?j—śe“’\Ļ{ØŁ’[¦{l~•ż=žĻ,Ń›WšA%¶¤V-gVź$`¹ ’9®Žkn=ųįĮŅĻ2ü4©ütŖĮłø·i+ōč’ķÓłų¦Śé±ė7O:\Źa“9ó“;Ōd×­E¦ŚFHP’y$W›9-ģ ÆI52'd“…#¾Q„*q»ė\ī”įŻSÄ:>£¤źL¶PĻMČrþ1Y6mR,öŚ÷öµųõūEüų%šwā:x xoĀPÉõ”r-ÕšŽo ¤©°pHč+åNmU¶yx^Nī˜|בń\/Āøl—,&üŽsž½ääŅņMčpŸ>#„ŒŲŪͬŒ¶°ź{óÓāųM}ńQ¶Ō5)īķ“|€&ÜT·?{#šõ°“Ļę?¤B®:–žŹ-æY[O¹/¼µńĮzw†éœ×T•‘ł_į„ÅBŠ[ŸUųu¬-­tō²øµŸt¹1ž *3Ÿ„v%KEą¹=Ey5Łž€šÕCNņ¤¾äX·Q °@3ļėV­gņ%ŽFWeW …ś×,Ļb­µ>aų“£[7Š5MuVEšļż`fć#Švļ\÷…üuā}B ŌRÉŏśÅĒAŸZØG©ł6yĶ)“§āš„£ŸV±EDqB™’ćʾHųƒńNļĘx»[h1,ōĀIŪžÓóÉĻłō©#åeM·©Ėč¶:–±7Ś„q@Œ>ė½wĆŗµ²M䂳³n<}ć\5O{.Ću:5¶D•„źśŌsZĒ0+$’—>¼×Cė°ō‘ØšuÆŁ–ÕsÕk•ŸĆš{^Aœń‘ұ±Ó:JÅ­Ą:}Ž©›H¢W}™÷'®kĀ5ČōØ>/ßxf+©ģ®ōūØćvHaśWE4xźvWGļ·ģUńH½šī„š¦öłfń2·ö…˜ć7+Č8Ź+Ś>1é\Ž]ƟeŗčƉ‡GMzt£”óó„¹Õ–āÕχž Ė•Ž x<ŽFvÖ?‚~$ŽüAų©ćųš]CĮsųz÷Hņqūˆ!8<©łB’‡zōØL¬ć†aĆT„=å$ū]XžA-ü9ż‘{­é=“ivŚ„Üv†ņłVŚ?,WY¦ź ę±Éó•A õ Ļó'4Ū.éW²®³=—–ļxąl\}üöõė0ė>ź:V³įMÅöśŌS«$0Ś»Åp3ʶ8äfŗTY󘨟”žÄ_Œ:α”>›¢KĖ<3.$īéÖ¾„šõōKCci"Fü>ŸJÕ+ xō7.¼]wb—¶6w¼Ŗƒƒ“uŹ©[kšŪ³ ™2>e†ŃŽˆ’Fŗœ:¦ĒßócÆ^µźZg†M½ˆŗrŅČŲĖĄö4ĢåcV³ŠĪė÷‡©Śx¦čśzźnénŃ$ź„›'°ō ęžēea¤Y_č-"j6ņE3Dń:`0ĮśåU-mm“ŲüØR6‚3ŽyļA›dŃi‘A¤č¬Ä“ĄĮę¹9ōņ· .ŅČN9?v†ģ`uznnˆĪ¤<Äēō©mo/,55³ĖDĄåN>ʃŻķĀ\ŚIrn¶DĖÉļXאĻ>ČfG€ĄŠ=RÓU6v_j>f.åLsļ\/Žu?ķÖ Dˆ0ą§Ö˜łO4{Ė»hDņ3ŗƒ Õķ`½—Ķø%Å"MilcĆŖ!ˆqŅøų5u]4J¤F€mŲ£ÆŅ€gĢķąŪ\[\4ĀŚ(„Žõ‹žÆT†ę µ¬›J‡”Ŷ–‡#muoyÖóBę]ēk稧XXĻwØŚY •mö;(č=h3lõYtvš¾›ŖY yn”« »@f_NkäJŹŹ-RäŚÄ-NķŽV9FĻ„ęg§xWA¹×'K‹Ę)µw¾}+C]š¬öho¬ģć[c{PJGŒx«ĘĻö¦ŠnRW™—ØŒįŽ:f™is,öV÷qŪa*3ęø?CL|Œ»¦·?k–Ķ•T2“·¾}qšŃÖb–ĘT¶)·1… ž’­+_š†tK6īŽ{¶o9Uœeyčz,ž# ö[[hĘq6Ą{uIō2ZŽÖT2ķón7Ż® Å>Mgˆ5š5Ž>qĪĀ „ŠóQi£é’Ķk}v³J ·!yėśō½VŅīĘ;E‹ĄėŌŠjPńր²©}6kIdWĘĢżćź„bxwF¼kÖż'Šä1Ä%€ėĻįPāėśp“KŻRŅ}÷]6?A֛į?é6p<!Iœīśj“Kˆx·L°Ō§TÓM£!S`„eĄēėļOšFæ‡Æm£’Ų“1ä @µŁžøŗ=®²c»ƒŹge-°¬ŻSąüzĄ†śc¹•2ŹGŠ8®‡Ām~Ė­Žč{cK„Y7…ĒŹAĒųךĆĆ:W‰c¼·¼7ˆš³ģøMƞOłėK••Gˆ|#£E„ŻÉ{,¶(ł ĆŽ¼źÓƶ­,bźāćPE äĖ8bOQnƱķ'‡d‘\]Ėŗ,ņE}!ą]gK‚ŪR²¼·{ØįȀlł£‘®Ł!x”Ž=±ĖŽIĻzóß_O­č¶ókvÖDx®d\S0äsō©ø(x»į‹ź¾:Ÿ\‚āĘĘ[©yAŹg8ŻĒn•ē?ž$č>=Ѷj֍£,žo1Ž z¾sNUcģ™m.<[%²ßĆ-®•l©$W¦bKN¹ćołėUüL¶:ķœ:µc%Õ“C+!č ī KhĘNLJŻxCO²Õd²Ņ."žÄ((6w¢±Æ“Óg*ÅrHĪbĆ85\Ė©•̧šRźf{°Ė`v¼¢óĮööśˆgÜīœ€œVlŚ,‡Dšįõ…‚xmŠä é_Ri³ÅŖé6öž_¶č?{Žg¦+­KčZ±³µtO.ā"6©ėųוųÓQžūZVč¶VŠłcpĮf'$žŌ§b[Ā ‚ņŅćPŗ¶†ņÅXķē\GҼŪā7…­ŅqØč¶W`ķ•sĢžõŃ Īq­į¶°¶ÓŁdó‚å˜7>ÕĒé·ZģW‹RŻÜX³ *œ[–™éųib浒k‡IX dČćļžŌnmb‚HdEhŌ${ˆĻ46DßCĘ~&J¬Ls^+^–' x5‘šņ8šöŌ\$Q6å~ šŹR¹ĻĢwŗ‰®ī~#‹=ź2ĢŽTźAŪ“’F@yƧ¼}mxŚv•M-ĢŠH?tžx-éßō­F‘gξ>Ō5o ¦Ÿ4öĘM·p¹éż+ɼe>»«xQˆ†(ōļ8āR}=zS7±«šŃćÄ¶ņå“ Ē9 ⾇‡Ā_ŚŚuÖµÄRՕ%}üäōü(ĢKŪh–9#Ź+m>łÆ,Ō— ¾äšŽ‹šõµµķ“)kfXl^„‡Ž±k””’čy ü÷“jW‡-! n<œzVNµ«Nö±­Ū²ņ’JĀŚ„7<šĆwRO#°3łWOą’Og{%‡ŁžHš’(’UBFŽ'µéš²_Ŗo‘ŽÜżó[Zµ€Żž;v W8ū޹5¬V‡4ćŲąŸUŅīŅKøŲB$ą„Īā:©c•,’ElFąH$޾ÕV2µˆļå}<ÜI q¤qŪ5Ģ^kf[)ÕóKm/Ī>”Ó8¶÷+’åwvīk¢[ŖaźŲ¬¤€ĶštÓ²%RꠐTSlļÆ5Iˆ€ "Ū€;ę Ļ•†±e”Š{3źoü<¾ÕZ6¼’ÜĘ–=8“śWĘõ};UńĶž‰qu 11µČr#ܧ“r+XŪ”|ØŻ¶Ólļ=s޹MFK½:SˆEē-żŹ‰ ŌŠu( Ā[ØÄŁĘrÕčÖ1ZO(ž5Š$gŲW,£Šč ĶK.^īŽ#‘‚Bŗó»ńÆŌ|3u Ō %y9łš~µĒR•ō=œ5k—‡mšYVÉ]·I=+²ŗŅŽ•ngV[#`c!Õõ MkL¶{ĵŹ­#ĖB0I©ŒŗGSŗXÕoš'“ó/$“ĖEō¦¾łż“¼ t-_P‰d¹Õ.$fw‘TõÜ>˜„)Źŗ‡ÅѬ\«j0%ĶŌ.Į€X©õĶxŽ›ābén4’µČ©4mór‡ó¬ ŁĮėv×1Z„…¤77ˆÄ!“9e÷bj}6ī÷Oŗ“žź mtōBŒs…•øž_Ö¶„Œ×_ķÖ,]!ŠXĄf`9üJO†2Śi#OØ=µŌĻ—%ń±zd[¹#Ó}ö„ż#:ēÄĖIn®!ŠÜNdó‰ósź?ĻZü¶q¹ä”Sœę³Lč§KB¶ †$…€ūœ½XzWCįnxJńs›S L‚D‰ŸŗEk\ߔżhš§ˆ,5­&Ęö+˜ŽGŒ 8\Ž‚»»YcņĖd:‚s‘Ö±«.8Ē[’<¾.ų{s“ÄŽÄŽg–œķ^0Gć_™~Ö­.õ++5%iü²’)zgėÜכQŪs¶ŒžĖOńĄßųgÄ÷‹x‘Ēq p&Æ9Ƥ~9Śhž6µÓ<[§Ēm®”n^xŹļżį\žĒ56ĶžĪĒģüƒöÆµŃµĶö?ų‰Ŗ¼:]Źyš-$Ęv#Į8Č_cė_Ńżõ“ś&ŖÖ-…š ¶œ®k¾»»RZĄ2’Ōūį‡d×tƒ§Ž ÓBQ‰å—ėńŽ“¤ųƒEń'ń¤ŗ]ś:”dB»¹č>b±5Ķ8)EĘ[3’GłŻžß²ž”ū0üyų©š¢ėNXtķ>sw„Ģ/ڬŲežppqĄ ×ę]źFų]Œs†9Ö¶„{jsMŽĒ Š2)ŖĢžYLnŗóZXz¬‹ Sä޽*'¹ ˜v(ē°ļõŖŒnQVįˆˆyFH œsSÄŪ”G”}­‚޵ŖVģZBĀrHĮķÜUżBĶ5}.ęnVį@’‡ާr‘ļ‘Dé³ūĄ’‚žÜ–’µGģĮ'ĀkI7Å’)›ż"īČ( !ž÷ŒŽč3÷«÷*ü…>S/t®\D¢ĒŒų³MŗšĢO¹·'r‘ĖŠ×ęÄ_ 6…ā NĀ8ä63±øµ”€»YGóüO„pŪQ5sņgž Aū;ŲüRųz¾&ÓQnµy +:Ęø{;˜¾ėē°lł×ó©XĻgu}¢ßJØŁČaøP¤ma]T_CS9É`ņ±øažµeÖPcßµvĆcޤJkĪĒ,Äņ; ’•ī¹ädŽjŒżņ1D8#®iš|Ĥ²g"ƒhlt4D¢ZLŒ õ«wvjŠ+©°?ń—CŸ*ļß0ž™+cAÖ5Ÿ ė:W‹t+čģ¤ŪĢ ‚¶×†_oóܚäŖovʖ÷„™…å–¾nż®?göŗżž¼{š]“²’žāŲßųzīh·}–ķ`Uŗƒ×‘Ī ué^uj|Ńq"k©žm’¾xƒąēÄo|7ń^›Øčš®ŖMfö·#-ŠĢv8ČÆ¾ÉŸĪåI88ķ[)hgcÆš÷ˆ’H·[p<’*źõ‹Ń©Ī³X:Ų;8y6ŒńżŃJÖ9ĢmNĆĖxę†EsĮéŽŗæ x¾ ėÖWŃHé˜YS8 GńWU9h3õįWˆ-0Ģ:5j¢G1ŹÅ„J·M,{¶Zī,ōū§Hī$†UĄØÄLÜū",-s$g+÷}ĶsŽ‚×Ę:£›uŽāv1ž ½•_Kß6½¬ZDŒĮ"b€ūĆźmgĀz&œ³Ė‘ē #o„ČTec–Óµ.¼-­Ģm–6XĀåęätz\ĆmBüG»óD‡ģ<}EfѵĻKŗ’+ApšF©nI,éT`ńEÕü¶śv•,ń,dn 8`sHoÅŚĀh·ŅCµīo£a” ~?{ŖųFĆV¼¶ sq““ąķćAœŒūū&ÓSk'‰&^ĄņWÕ/„p±S†ŪĪMmĶb9YÅ\Ū]ėZ i“ä9’£n:žB¼RµÖōØä†ņŻķO½'4Rƒf^“«8žhŽ6’-§zbIr÷‚HY¤³³nis—Ųś‡Ćž³ńoƒmį¾³AvČć§9ā¼™|;¢xTøĶ^¬„üĶ÷O§éK˜¢”Ś’öÄ·°“H v¬›[WžģĖ)(ˆA\jē]<h·.Ѱ•cŻŽ“l584ėI§l ‚6Ø<÷ ”ŁĮA&£Øk un&3—%Ž~•ÓÜj–ŗEž›op¦Y„"ągÆ4{n£"FHd…@I]Ć<Šåµ~ßl-ÖO>ßvボ„6Tec*=;ģqJöŠ$n>cĒZ­5ł›O™®¢e˜œ(ÆÖÜ®ps™`I•"vEē[µ†õ„MGŚmėéAGˆ<6iņD/Ż-!J±‡§­WŅo™>=ŗ`3Ņŗ‡Ō7ś.“"¬`‰8Čō8ü(—ń6®ś¾¤-­,’sądnæ…T±Qű?NOZ‘NMŚk™­bEi$郎«YxgģR•š00ŲŚEŌö:ŁīgÓ¤·°K7ø‡,8ŠŌńޱŖčŽ Ń„i¬³”’PĆsōłėUtF]"ƒ^¾5ßw^y5čŗ·—§Żźóۻޕ+ex^Ķõ­"»š'‡µ kķI¤’ŠČĖ'ĢŹž’•{’Ūt«÷›HŅB‹ĢÄw=ŗ’‘YČGž6›}oŖ5ŠL­n³p9Żų×Wo«éžæ³ÓšgiŸØĪIīj@ö[;8ŽBq•Éųj-żĪ™,N|¾Ō©\ņŪh®µø¼ż]Ć\E„ĒŽĪ8ąÖāÅ ÉÉ'ȬäśqZ{Błŗε¦Ā‚å”TD''޽p‹z‹"«č§Ÿ„g'ŌØ®„ėŸŲ\ķ³··ŽĄSĪ=ėN4›1$kŹH~œ‘\ęŽ'?&…ŖÜ_\M ƒÕ铜Õųµ1*į„’Žøü bՊTū –š¤«o*š稯DŃ495 *öś{ˆq·³|Ķžą{R¹J™Q¬¼ČeYD=9ķ\ę‰ibŅźöĢ‹vŠvy¤q’;R4/čŚl4³ æ.ź#£„qŗõģņj+c¤@šFī 8łUy«€ģnXǧŪĖwe©_Į:Ę$ī¹­ YķµˆĘŠŒąŽ¢µVX±°žŅvŌ¬\ŽGZÆysk”ģ[h¶’¬ÉūŽā‚”IüLšŒ}£”ĄĘ}žµÉĆŖµ­ŹÜn ļ I8Ē4ŸcwVšĶž³Õ­5¹*„Ģ…UÕĘGgŖhÉē¼Ļ䏻ƒĄ5.HŽ1čvpßéśĘŸyc©Ū%ēŚ ņČn6ó×üśÖ ^}2XŽ ¹M‚(UBzb—“6P: />Ól#Žŗ½yljü>mg„“‚l®qĻŹj\ĶclgXĮä*ż¤#ķl©„hĪāņę‰00HļYJ­·=<_WQR£)=’Wo䈼Ū+IŖńųÖ”āÉUŚÖÕ !ļžµēWÅŪD_x?ō|«ķ”™gqJ UMīŽ¶ēč—[nśŪTņ”k»¼¼’öõŖ« Y™dÜŖx5äÕ®ŁżÆG®X«$kŁ”?+2±%Šl~8|mŠ|#–~^\Ś=“[(ņÄāóYć—§æ­pM+g uu§»g÷Ż[õ¼…BdŸÄó[±J…UĄŲqƒ“Ž”£Š9t¹±grfÜ:ŒäW‡kŚĻ…|IØK„ū¹e*’r•8ĄÉĄōĶśÖ[Hc™ ‚I®ęށ˜…IĻŅŗ±6<ßƚ“s_-„eÄ|nĻÆ­t‚[x”ø’4ø CŒƒ]G-h+kś}φ¦²ńŸ…“ō“SŠ_ōŲcχŒźqü½ėčļüųń_B>/Š;¤žŠ·)y”yśeĻ@JuĘ}:×L"|Ö2\’¹ą~ųļąvƦAØĖ7ˆ<Ä }NÖ6ÄkŽ_Ćֆƒń_NÓ"·•¦’Ę`ć˟~įŌc8,Õ“Oj:͆„s ¦ķŅm‡‰cŒjż²ų#ūDų‚ż'šŽ¼–·V¢ ŠĶ);ŽF óéÖ¢5ŗ¹TlŚ8/iZ^…ÆMÆŻ[ góŒŃ0ą9=yéÓ5ķhžńĒĀŪ~[qgIe#·§?„mG³qHłgÄ~²ń—†õoč·iš“žś)ŚMŠ cp_ČWU?4Ķwį֏§\Ftū… ÓJįDrG”ĀŸsż).·.²?Oa?x:MĒ\ų}ń F²ųµ­$V·vČd…¢I8ē‘éĻę§üļā'ˆ¼eū`ü3ųuāk9'šw‡d¼{Ø1Ķ-Ę(½W1ƒĻZrKŁ·éśŸĒ|˜Ė7ńEc_ĆTKµ”NQ‹ł­}OĶ ń.”Vr|įĮ÷®Ŗ8-dß ä}¤ŠRDÆ-Ó?ŠßŖ¦|Ė/½G@ÖoG‡ć‹ū2c€¬ä”<¾µūiū ėÓė÷šoĆӳ뒫%…“GsI“g =‡jōh+h|ēeŹZ•¶åMżŚŸŠ/ĆßŲæĀ^=ųQsiń€ėkyŖ[I°Ū¹µ’Ą@*ܐćÆŹæ˜ĻŪ?ᇇ>ų·Ęæ>ų³Wńƃ-nT5ē)K£ƒø_•™OMtTVGņƅ"ā8‰±YliÆŖŠMĘK]T­¾ŽöėÉu>:ņåŠ.¬aš7µKˆĮƒxĄepkÕ4’5ķ”(§ sϼ¹EŸŁxjNå/īŻ:+.”ā­\/”»ˆ·Ö—+:jč'ų‡¤„ʁ&¦Öó8¶™[ šroĄ×Ķ:&ŠÖāŅĀ·¾`Uœm‡žõÕBžŗŸÅŻ<uēŃ=¢jŚ>§āøĘ¾’[¤’‰KʆłN°Æ³5Ÿ‰~šo‡f›FÓ{9­Å²:Ņ€°Ę޽øFŹĒłŪœŹ¦+:՝å6ŪõnēĪg„5ėPFņāÖa;MĶ!<ŻėčæxSĆéį)bt·€F¹k°9䟬¹qm”żEąg S†Y…HūÓm/šÆówß±ĄųQ­ā¹€Z©eTņ¶†Ą\tā½¢Źi%E-ĮtÆ.„Cś3†QZvŠČ+)$‚EW’ūū=žPUåN€ōĶs¶V"\©£ČąŃõæjš‹^Z¢ŪF’Č˜ …‡½q“_&‡‰{-™Ņõ Wt.Ķ÷ż=ŗJµ;žf8{Éłžń]ųć/Žźzv¹q>–ź« #h=’„qvŽńßöŒ†«6ŪöķAœļgń؝cŎZäī{M„Śi©-ĄØõ8Æ@š’ŠtˆŻÉØ(WØĮ½ qN”īa02] Ż3Ä~Ö5”ŠcŌQ/J‰˜·cĪ3ZZ¬hŽ “GŠęŹłw.h\:Č#w®yJē¹N‹D·w]TƵQ¼…"X®ŖüŲÉØ4œ4Šź­¬ŽŽåŠį•š2’ Ɖ~?ųwQŠ>-é¾#°.­ux®–ć'sMÉVśó[Ņg‰‰§t}mšÓā4ž.ńŸ…„’žõņßķńŁĆötń®“3źŗn·«ŲĖc¤qøČŁVO#Ø?vŃ×CŌĢ1ō0˜•ź»(FR~‰]ŸĻ6“ouo§ŁŲ4†wT>d„ņĪy'ó5ŅéPI—5ŹĘ¬æyńĀ½Ź’#k͟GžĶ^°ńļĘ= EŒW–zI7÷ ƒ~æ~¹¾»y9’;KP ä‰@‹żŽ8®ė&«¹·•pѤ,‘9,O÷~µŃhz"nÓ̶IģY‚–ī3W{hxõfzÅĶĀq]ZĆį­4" y‘ˆĒ$’…qöśm³iĶ óŸŗAĒjØŹēfwŁm쭚) —œ¼RĮ¬ß_ķ±“fUb5FRÜČń&­X\˜'_-‡'9«^±ū-ĆI;2©Īpy ē™ßł¶’c`G¹±“ńŸzēne†Śq=ĆH±S(œŅÜŖŽ(µšé"@ūƒŸā«3ėśr6ĘQ$EHär§<·2™Ÿc&©oļ+ņY¤óÕIą~X­½UŽöv±˜“Č;~ńō­ ŒÆ\ComØZØecŃ»-yö™©¾™4 •l0ĪG®1¹qG„j^=·ŗX,vI ŗēŽj;+›I£a#q‚A<šÆfj][ķY®ķ¾Ą /‚‡')ģ)Ö4+(p4ĪqY¾ĘRģvi60iÓ̬WÖ¹ °ĶD·[“$ų¤c4y—Šl+s,L 3m’J⢳“浜a¤ĄĆm4V†“Io#¹[½ĄB=Ū‰<īļX·fµ‚mNŹO,#ƒ°ŽqAJū#OTńī–žŸ^3Iy:”żŲL“ĒąfŽ({%©Óę¹ĮhŁ6ķČ{–†‹¤XŁ“”(1‘ā¬ė—¶žJ#IPKwø: ³G-įļ h7Śķ½Ó[Ÿ/ēUe õÆSń‡ō?ŚMiŲ—PSĖą p>”Ó5GĘ>8±ńo†®ģtx§Ō„“ŽQµHȕźOAÉÆ=ń<ŗÄÓCw¬ŖFć>@#ƒž>ŌåÜN!”i÷6z“’NŠÜ0,Ē$vJ÷D]v;©.“ųüŁ|,ČzzԜµsĀw3Ż[ÜA,g`yaÓé^yā+;­;[›ż>ā8[•]ųR}1A8ėŻ ķ9„‘_Ž`:UėÜŚł ¢–C #,œŚ“g”ŁŻĄ^źčĮœō™=ė6ņķ4‰L ©G"씓xśP(ŹēĻw’źś†£{&¤-¼™$>RFsŽ’‡ŗõīŸyw¦@Ébæ»%:¦h,öæü6K,u9ef„*—p=æ ±®ų J²¼óbŗ’;@r””dŠD¤rĖā8“‰.N–ńŽąŠYĄ|PÖōū(4mī]wQt?jÄ œcuw^·ŅōM'F²’Ī%œ¢¹÷„ušÕĻŁ5"Śm‘™!$͟•Īj xöóLŌo/“ķø]øU÷¬lоų’¢xĶ—L—N¼µ‚ĻlrBšŒć”ļŅø_Œŗókśʗmll­CZƁĄWśWāzŽ×Xž‚ąŽc'ƒŠŹQ±ZžĆąĶgU¶šĪŸŌqˆ‹#`lś×—ųākŪHÜ=²`„©^9žŖŚ+”œesę–}oÄ×Ó-•³©Ø^ƒ ōż+Ó<'„˧Ū$š¤ .S“ļ[ĒcX½ÅWmscuaq¹Ī<„sz`Öö›ā |“{nÖ±"üčŽō¬›¬hĖįū_Ę.“+“Į­æųC[OÓm4Ū[m;ĖmœśjLœLĶį׉<=ā„Öõ˜Åŗ€%¶ “£±cÜWƾ³®O­ĒŖEwäŚF–"€†>Ēņ«‹CFÓ6®éڇŪ%<®’Wļü’:ąųcyą-"āņŽīŪ֐‰K‰ē8­M#Ęj ×vr M’–˜=qRŪ¹GG“2HG‰yfĒOƼ»Äokr·VŪey94ܙŒ•Ž ĄŚ¾¶¦O9-‰9^ھ®³±ismjĖk tg}ع5Å4Q-ķļ™ 3²¾`éjó’é,–Ņ[†'÷jV*œƒh I4nO'­kų[OŽŚYīU{gq õ¢Ę§A¬yĪb[+…†Ópcµ°H˜®CÄ:'Œ®e†óK»żĖCŸŗ§ŗńWK‰Żų{FŌSEד ļAĪücwÖ¤æ±ĻshIē#޵rµŒe‡ā-bśņT½k½éĀķ# éE¾¤E£Ś™ƒ¶ņ˜‘ßõ5‘1g]¢i‰±Ļ{˜$L"Ž™=žµµ§ź³ƒgBŪYc±™G3¬Åkeip¬’i—ƒ)Č'ü+„š¶©«l8‘mc,6¶3œõöØŌõ渚×d‘³2ŒżĪ½ŗWešæI»·K«ĶņĀ«ó*H9`G@ ;ķmā­3M6ÓĶ%¬o–_›õäśļ†tŁ6źö\ÉuūŅJŽzÆåMJÄ92“~²¾Ä,ZĮ“hzšå^Ž7š„äIyv³¶å#’ÕÆ6›=¾R ŁĘ\ØĀ8¾ö@ĮĘ=*!;Īk‚ęݚ٘.ŽÉ DÓ£EŽ5ó‡Ģ͟¼µtF„†IĆ‹]OĮ«į7¶zX‰TćĖ8ĒҾ ń¼)šēİųz5’t„ŹŽ oŒžÓ&¾‚¬®ĪęrW±ĆŖßŻź×bw‰›”¤;ųÖ)ń+i—¾UkXl!ŽųO­r©XC4ŻV)nīͼ,÷”ŌE°`‚qź}ėōį–¹€/®Ś6Tµ„ČÓ²‘–`ó«oBd»~ń?‹Ž+Ļų†kmQ¼ŠwÄŖNGķҼWā“vš/ŽÆ,¬­#Ą“J©ü Ąä~•g$ŗŌ}Œ½U[h.a;'ŽuŪĒ8ÆēYŚÖŸ©›{u»X×Jv/†ĻĢķų ›™F÷(.ŗ4Ł#ŒGbr1œ>=k•ń·3źÖ†‡k$a†I?*óódõǵh¤īvRŠ>įųk«MńÖćĀŚÄOŖé÷‘¬[&s±@ÆĪļ_ķ<3ćmJż˜Ɯ‰µA¢œo{>eŌķn#•“l€`cp¬$2DTĶø)*ˆŽ”œŃ÷'ģĮćŻI/|7ØŚY$°BM¹2üĪ£ŒØĻn:×ŪvVΊŠŅ2ŽłŖ“D(»Üō‹;™#M¬žDĆp88õƊ>5ųb_ė†ęŚŅiå¹&wq’ |Wˆ„w”×AXšoų–óÄ« ŚŁ‘Æ A¼‡;q“ztÆYųaā›-vʇZ½Ä„J†[& Ÿ-Õz@sŅ¢;üēįļų‡ąWÄæ|OŠneŅõmWŽłå]ĮŹ#ī#P1_čš{ć‚’hƂžųėąŻFūMb¹PŌ˰ 0ģx*GØ÷®‡±2×sčφ¾ ¹ŠµHŽIĀ[;p{澕ń=”Ī0Có”%Xż±PsIĻēüĻöQ¼ż fKŽž°Óæįkxü­]Ū!īōüüŁ#%»0ŻßćüIkŚ\†āš“öÆ“«,qtU#×ó­)œķhyõäoÖé 3aĮģ0­F„Ē „mb:õ­ $¬$Ó¾y%OcPÄ©&꯵@ąbŖ.ÄI“Gņ°m¤œr*ŹÄ» ±ØŚ8$õ± ź=$mŹ•#z¹ŗO2a"ŻņćŒóšOc®™÷oüŸöĄ»ż‰æl…ŸaŌ/ķ<Ø^C£x’Į%¤§i‘‡”Ś’…„n•«hž ŠtŻĆwvz‡‡õ;T¾±š…g G ńŽŲ¬+·(«ōŠģ}ĪZņŌ„ūK€s•uģ{WĘ?“/ĆgŌ4‹étøūZ ^Yxڹ,æˆćóÆ6¦š~xŸ@µń~Ÿw¢H¶šŚźvę Ņü«øć>‡<~&æ•?ŪÆą^©šŸāV„=®›ŽœÓ0ŗB„“'-»§„§i$ N›Ń@ÉB»³šĖŽF#Žė?6z‘•ŽJ±.¬JGīĻäzÕ9ē`pqüėc”«ūŠ]J©P9 ±žƒóįę±uąßlū%÷™å› õäĒ¬FÓõÆī·į·¢xĆ’iÜYXj±,ÖdŸõ7É·~„äś|¹jGC¦2>˜š„ö§®č–ŅėV‰g«F 7”ʱ^7cŒÖŸŚo¬C-¤Ń‹ŲĢ·ćwŅøę¬Ē)h%ßšp÷ģC©Łų—Ƶ’ĀßŁĆ¢k[m5óm6÷€1^ĢRGuē­,ŪĒy§Č]v\FJ°n2Ć®+*j×W¹“98˜® –Ś ö5ģŽÓĪ”4p.w.N3Z7՘3_WŅ'‡Ģ\+HzóK»¹æŲ”øBBäp;UĀ]}½ū0x–o[\xVS č't’Vœœcė_xčwÓjNTæó×5Õs7>…MN'¶”4ET–ÉÉ­-&ų±cp‰øćŸJ“c)hm˜]ż¦7V‹nqŽēZˆZįF€2œp+s4Ž;TšeÕÕō×ĻNĘܐ}kŌtO„…ƒźѣ˷0ąŒ ™lo3–µÕ“ķ_UŽŽćK‚öēČćęFSŒןjæń[!{iż™“é’Xõ¬ž~÷’ˆ^@Ņ9łXžžÕ”aņDpŸ®­iĘS-…+µäP ś’*Ų·‘$)±Ę28­£.†gQ+Ū­œq$BICņW‚kxźk„i¶Ņß(E$ķ­W0ģ`Ūx¦Ęō>÷ņsj 28¬5·Ų2ĒēzØĘO½4ŠłÓŲų±ōĻŪ±Z“±"?ń ķõ}OĀ©›»¼• ;N£ •žO­£ĖtšĆ:%“ŠĖœtąb¹ę¶¶²ŗ[Ų Åp®TqƒK™=åˆŲ]ŪÜĒęB‡$ó“ŠĢš~—¬·>TĄNXUcŲQģˌś2’ˆü ŚÅµżåÓyR ó28ć=3^¢—–ŗFƒ®whŖķŲ½)#N[žkibØĶƽéwįIč2zVƌd‚'˜)'ƒō ,XžÜÓ>ŹdŗFY!kĪ'Ö_Q½’(ĪS#ž3ō h——Ś]ÜŠłFē ō­»†}V?·§ČĶņ’z³ā}SĶՒ;i% €~sŽ=«Šü ā-8ųwĖW6ŃĖ}2¢Ć#b ä‘õ ƒĆņ‡Ł Ƥ²ć Äp՛ā›ŽO5¹Üē0¢ksLŽĘX.Ņ8ŲšN:ŠąVž#yX«œuļHŽFtŚ¬ź·_nŅm„#»Æü³÷«,×_Śp‹—'ē ĞŸZv4Š±×ź0[Esq4ćŪņķÆ#×µ¹¼Iim”É dø Ēńd€­!¦ŠEé< ØÅuQF¢Päó“דAgq­¼h‹µBšČ«4)ŚxcĆ×Bö;Xm¬Ō‚Óc$÷ś×oą_ xL²æÓĮšv*J9mÄgŌÖ2c+CšśŚ=EÜź¶żÆž5Uü¤¦³.¬ĪĀ1-ø=@©ψSK–õb“ēuŚ=+‘Ö¼aØ[ŪxˆŒøåØK±q‰ęöŽ2m7ŽoŽpz¶Mu2ųĻNŗDµ²F78Üł„kČmō6ō›ƒā+i"<0RåPĮ¦£›«i3ĮĻjÉ£hĘĒ“_[M„5֟ #“¹$g”żkfóÅĻn-ķī£ņī!‹ęĄĘžOėXF's„m6…o|€¬’.J÷Åxļ›$7·r,’żņyģ*eܳZŹkĖł™„%ŹįU€ĘkŪ¼5ö…‰ s—)“Ķb3jīĻ0M4R'˜œžÕ‡ą}2ćZc„’fĒipģĢū|Ē®iŹńM¼Š^5”Ś™‡c\3ZH«¶įŹČ?Š®°]J6ŗ\ńīy§3 cÉ=+§Ó4v¤żśä¾•©„ÅŌŽĘåtėhW ó1¼VNØaŠ"nœ;3Ļj‰š(w9½6ŅÖxćP«ø±ÜÖNÆ¢5ĶŹĖĮŽŲ/Τu9¬īZFŽ“Ńčz}†äÉ,„#maŪµrš“„ŊZÜ6:g'Ž‘¤"X‡XĘŠ6Žź:×AżR•ŠtĻ5”¦tʓlšņh4ˆ!@Ė$«ĪīÕŹj^!Šģ“ ņÕErÕĤ~Ļįǃ˜üöj¤—³”üĶož××eųģŚÄhķµsŽĘŖ‰®'&DwN1^UlS–‡÷Gxc•ä“ć%4ę–²zÉ÷×ϲ²ņaŌī–Ņ1$÷'ī"Œ–>•Čų‡ūcI¼.¼3ÆĆYf™­ĪĄ|×Ŗ7©śµ;.xSÄŗ^½k °ž)™ŅAäqZwvÉöØįs‡=©Ø“ŌōhÄӞř’ÖfY°:Ž*•żŪٟ*ų¤O‘µCRzTՖ‡w”ŻŚŻ[”‡E_Īŗ_üCš‚$ńܚ®™nś¼ŗpmeˆ:yČĮĻ=9¬„-Mā™ó^-Ōļ$÷ 䛇2Č«Ń]ŽHÜ×p–÷PŁ>KÉ„ÓÉóo;séŠp—p«Nśŗæ…lüBš{ Ö…³ļ‚ā3†Sü’żUļųŁā-NÓü-āssrš\&ī(Ī^ ‹­wR«cĆÄįŌ惞ƒöœÓµĆĪ‹ äk\LÓ1żŅōēo95ł—ūzüYŒ?“­„Zmķ½’ƒ¼”Cį½5•pÆ(Ļ"ž#oŃkŖiŖ|ļfķ÷[üĻ‘„U|Ö8v悜¾r÷WąßōŅ]&“) F„Œ0aĮ­o7dP'’¹»šwü 懄|¦x+įgĮƄ~ ¶KiwØN^Y؁ńˆÕyČ óĻ\×ēŏx³Ēž/Ö<}ć­wSńWŒ.Š,×W3±AŃI;Ga\u'„‘ņ~xMƒÉ1ĻM¹TwZō¾’ä7ĮvזšĖPv’§”ÆL‰¾Ļ#¼Æø‘€=+Ė”ż†›kR&żņ·’Nš3ÅEąŠŸž |Oš?ŏ…Śö™¦ų»Aŗ’āoį2Ū\ŒĘÉ"©XŽ#Ø®ŲU±žeƒ†'<5EīĶ8æF¬ĻÆ|E’6ż²~0jó[|LųĮ§čZŌOlt/Äö–҆ź³½øć’kÅY—yQАxćńƎ¾#Ļ¢ŽxóB‡OødŗŌ­GŚcĻś¹Ęą=OłčaŃüéć>&NP£Mōw_‘•ńsį—‰>ĶjuM8L³Ą³[¼G>n}ćҽ3ĀŚ~æ©ų;GšĶŻ„œŗœ1`v« ķYŹ©óUió3Æšw…£Óc ;y— žžøÆJŠ4 j[h?tōĶ:¦”pØŁ›NŅ£‹ĖH$Lg-\ž‰¦±¹ŚEoµP`W;›=:t3gš¤ž³\¬F9źpE=tW»ŽxXŻWpŅ’»5TŅ6[Dń`žƒX¬só&ܓųę“®m-ƒÄ:O§źŠ6į-ŗnŽ~z‘ė_­’t|B“IųńW¼Öļ/$cga·n?‡¦sŸŹŗ©IģyU#mQś†ŗ…|%£iWŽ(ÖōM>Ź8Œ†5‘LŽTtŚ+łØ’‚©ütųińS^š¦įŻ#Đź]ī‰L °2󗯩žļį#{\ü«ÅœŹ®‡ń3Žķrü¤Ō_ąŁłgm{‘fEuhÜÜłö, 1“†ōīRGłĻ‰…®~ƒ~ĘöVžų]7æ³RßTŌu³–hĘķšæČžuś cHb`Čśsɮȟ1ˆnģ5ūėhQcÓ¼¹¤čįFq]·Ćķ×0„ʈ.Ā–%ųÅhyu;å—ŪEx›ˆ9Ī8" æŃȎźŠE|®7sŸ„ XÅ»Ėi[ł“^¤¬W“ō¬%Ó{Ųn4k³ ¤¢Fd`uS2“6ü_­6±u /‡™+`q»×ńėYdPYZł×Ņn•›)“Œ f?P•X4ŃüŠÆCļX3É{”@ŹxĄ=h1’Ōå!‚āŽüż”$F ‚zŲŗ±šg‰Q¹Ī8ƒ)Dķ“ż>S²O2„ IĮü*H£·‹Sņįw]÷ˆĘh1-]hŠkm%Œä“2|®WҬė?“ GFŠ"”1ÉŻļĶoxģq0iQŗ Y¢ćõ«×V‹mo0Ē eć;'ČBp ć³ēj©ŗTY!PFXą1õ©“aŽ#ń<šųQRŽkl\’²de¢#ßńÆ6š­­ÕķŹŁż­Ā¹$³™4YlL£ŲŹńƒ\ÜėŅxZ D(›?¼$ž@ō÷®kLšv½įkķJņęśGÓīv‘ ō9ö62”In®.K6ŁU9Ź^Ż_@²"n1H@”„T“؃ĆW^~朊ŪĻąŖ1ĄĪzW?ńļÅzƆõ»? č°éöŠŠļ—f3ąpqÓ½ъ8†Ž!ń6”­Am¬ėķwhØ‘Ÿ,õĘ=9­?Œ:6­4¶÷dw:rĘϘä9éÜ ._*=Ćöw:@š}Œ7ŠGq©[žf쐧œ*śš,"Ü^”ž!¼°Ü²ē„.db|ėń¢śĘŹ{™e0ŁX !E’3ČėžkĒ|ą’‡~2K-b;S,čķÓŹąķ9꣨¦Kv”ķ3Įz”+ ņAū £*’ŅŖ0¹¼ī¶^ K=Böö&^‚~•{O½ŃķÆ“L[ŲŽl /v>ß­W!\½Ģ?ßXŪja-Ēś\J#éĶyµæŽ×Txļ/#6~^Ń>ē=©8v1hŻŌ§—]ø¶kDžź7ūńW5Ÿh0Ko„ßésĶpńŖGå” c‚Ę”Į™r³Õ®Ō1··LiĢør矦+oü>Ų,¬”Ž?āŹ‚Å¾µ.åĘężµņ“QŁÄcņ‹ļįpU©5ū©%…lšīį#o•ć«b¹¤Žŗmœ”¦a‚Ū@舔˜…żkc°ŁK36¤U!Ӛ|®ĒMŁŌ[xļE°½6Ņ\µŖ±°—<ջƈV֗4Ln, ń“ņ+xÓhŹG¢ųoānŽ4k‹×ŽŹDu*Öóœ;ćé^+'ÄvÖ/g…`šĪ×$`侕G<Š’†eŌÕīķ®­ēÄaóžWüę°tIģtˆ¦·¼\“·ļ}ļOēNż ŒMKC†āņKČeo/ļa®ĒĮŚEח+G9¹OųHÆ'mEor’Ą>\ęŗiö0r='ĀW×:†ŒČᢌgfļįĒ„f]Ēsö©‰aåļŌéZ29˜¶·>\*ŲaŻŽµ¬Śź&yVue<•Ē8®q91·Ś„‘1iƒLҵƒ©ŁĮŖxKR“żVŃ£’ĀźFYHĮĘOŌdwÆóćż¹¾Ł| ų÷ćiļequ%ޕ䑭X–EĻØō„ŌĮG”łĖØŁŹŽa“HŹĘH|ąƒYROå«0Œ1Ī8ćšč‹¹ŒŃÓ šN”F„ć*} wõµ4bE’œunÕ4Lco*]ßÉėVcØų„ YT#’tõQW§ˆ¤• ķ†…ė‹k}OJŸL1,ŪŌķ 0ķō5ż°Į½_¶ī„ńÓą]÷ģĖć­FÓž5ҁøŻ=öžx”õŪ€™ģ~8øčŃŌč¦āÖ mČC¹_Ÿ„y4É/lZGyą(’§ØżMpŌ…õ*1?9>%|9±ŅuŲōłŠé¾Õ|Émgf'ģ÷+’U€GóÆÉŸŪ—ö“ų±šļSŗ¹ø–÷XBa™0F(٤ ƗK”ĢžV5ĖōMWPšÖ­µŌ¬ęx$‰€»[ēß‘<ć6Ė‘H/ŸNõéGcŽŖ#ņ䈹ÜĒ==Ŗ»Åž4«’ąƒĄė]8Ÿē%°qžO««Óļm9äš` Į6† ėéšG•‹ƒ²–ćoaA¬$@ķq éĆĒ3Rk@.Ēā@¦ DerŌösH‹wa"Ē«[©’Ńß8W#§øżø’Į*l OŚą÷†|'wq‘⓱‚ĪķU’ukØBøWROŹ$Qƒžäu¬ē ,u.ēļ/‚ü_k5¶™z†ģĮzóƒŒćߏֽV¶óįÖlä'rsĆ©ķ\5"mm.ųĶš?Ā?“‡ĮÆüń¤ŗV·g#Y»ÆĶgxģ‘PĄ€ wÆóLż„¾x—ömųįń į/lļt»ė Mķ¤K„ĘāI"EõF ō ×=½ć?#ē­FĢYČÅ1–ć޽7Āҳż’źF?»8ćŒŌĶō2”Ol¶[kˆ%…ą‰’@6Hz”õ«‡ń÷…§Š͊,ńϐ0(#ŒŅƒčG+9’‡ž3ŗš.»6Ŗˆn­Ģb9#TÜŹ2rߑÆÓŸ…Ž9Ó5ėH/le‘a‘W©čÄW£LĀp=/PIļnŃ“ 2=h¤RŪŒlwĪ ö­Nw ķ…¬r@‚lyeOAY–÷_fkج‘ōČ?vƒH­ pjmj_äēųŽs]LJõėė½?W²’+`äŽJ€µ<KÕ/ō‰ŒaDņ$…wcØÉä×W>®oŅYŻāóŸ ‚:PYtEa<‚nA{>“r ÄčŻpEk™OrÅŻšŗŒÅ²IŖ®›t–Ó w)=MQ{&ĚŻÖuu‘C®½hx‡ū6]6Ž5øWc%×sń Ņ”Gf#•lŹ™8Įé^É„é!tk{Į:I!įÓø"ƒB¦§įĖ­R{‹5t„·(ūÄšóü\>Ļu„8’)×(Æ ƒŪ?JƒLŌŅK1 ›žåOcŖs«ĪĢÖ®ĪÅ~lfsFü‘džå¾3łwg†@zWį=J};T†é¦}»†[Ū5§9³ų[“Xū2ź3³m\|øĘ¹ė ĻZ³“Ō¬¦ø‚er­œ€Ź=æ?Ņ”ČŚ'>måŅ•Ą,ˆĒש®fų]<āYŁž;TŒī`Éö„Ź;‘&—¬ĢYLN§ęĒ­iGiŽ9TUłxéHEhOk§^WŻ8ļ\Ƈ§žH§–ßtoĶ‘‚(µµēˆäŌc›O2ĖhX+~_¼9ü³_@_^[}’5el`¼Ųäžt›4hóļ1÷3ŗŗ& ŹŽ•.ŗŚ'ö5½ī«²¾[¾ćŸSļI»’Ż%ķ¬qAnĆ æ¦qŠÕqm-ĢŅĊ3€is£HǹČų—ÄĘ;fKao y€ļ+“·Ś¼ŗó]¼–é®^G\®ŠAēėM;–hŪjŗŽ” ŪĻ3ʘļŪŽŖA¦½ŒÓ4, 9ÜŲz˜[›Éc7Ż=+Ń<>¶š|†„Œ\mć½c-űč ›(¤˜†ī¾õāß®®ä¹[xģKÄ 6ņxĶ+Š.ē£I}س­ĶüK» ŒzJķ„’ęŃ£Ž/.P _ļR-nw^ń$āŲŪĖ U?/±®›G– Ēž'V2>;ŠĶĪĪć^“·ˆFķæ œöÆń‡‰Ė\=•ŒŲ‹,ƒ;©!œxÕōų&·óą.”æxsÉ­’ķ:śĪ.ĄI?­J€„o&&"åŸzUåQw•Ą#‚IéNLŚÄ/‹Ī%Ißhš$Zz-™wž;Ž×É9¬ŠŒnyƋ?“ō’„†ŚytÅ †ČŹsßšÆuŠux/¬c·™€+µQNęéŲęu“? 5äI£¾Fq6ć±ņH8ƙ#±ŌdŌu[ŪmžRČcjś~uµĖęgCi§J‰H²H¤gé[SF‰–LĖĒ>”ˆe ;0“5ĘžsŠś×G5ƒ˜–āBR.„±Ą F?‡ē°Ō®.ÖŽé$pr¹7ŠÖŌWHńH˜M3E>ē>śÆp’\Ł¢0B>cõŖW֓Äń¶²żąj[±W=_ĀŖ%œiåąiŠ“ŽŒ1ßā·—śšų‚{+¦ø·ŗŽ\#ƒĻZeCé¶_Ł!ŗh^€6 Įā°äš—„c½³H|Ԑ:"7…k”“65/oŅ)ąšŁ‚Ęę$wØÅķ©³˜b3DårĆļńڟ!“;UÓõ‹xŽm2ć,Ͻ‰śēmvZWŠgŃēÓ­$³øŽāxŽsü@w6)Ä뢿Ōõ'•š?&ņ£nÉcī+œ}sSŅõ;¹īm£M1T”lēy9äŌX\ˆņĶWÄ]jĪmŁēŒōltśÕŪNš]“‹rÆ#e¾SĪ=č,ó8ŪĶ ·Žwc­z…“É"ŗī¹+‘śÖŠ]ĶŃčzF§ˆ·vöč’Lų‘÷y®ŗ}~āžÉ¢™y Ö08”ū3ź6ŠĀ9 —ć×9ńJĒI³ń ’Z 6B…ƒ˜~uŒ÷4:- ėM¾Ńlā·¶ņ£†0‡?Ŋåu¹l£”Ć)µ˜‚éõ¬&śA|9yŸ&5ņr¤guwÖŚŻ»]ž]ØnĄš3ڳfnÉ{A`ćvN qš•ö©eyę‰|tõåŹ™—ŠsÅ=ŠPH­ö»¹<ɤd±Č-޹ĶnūĖIä9#kH»šF7;i÷,Ń%d¶t‰łŽ£ Š×/s¢k~¾”]źŸnŪr†LœU#XĘÅżCYŠÖÅ®“wŸ·÷ÅyLšö©Ø!Y«g=2)ŲŚ1V/hš­åŹÄ‹±I•p’Ćī+ ¼¾ŗFž]ˆ!N[½įėšß*Ļ„$r}˜Æ3!<}øŖŒnSŽšœ•q%Ś$Ź”2Ō ź¢BŁŌ ŁhrŹ’f‡ƒ~&üLųK¬x§SųcāÉü)w«Z}†ł£MÅ£ē•ĻŻnO"¼ZÖ?6öt¼ŁwäČNI,}rI¢„yrņ7¢3”—SYVŠ÷¤’oŗW·ęĪĀ%Hb(§Ėw ĄŠŪƮnj\n£=Ź4ĖZ\‘¤kv*œcŅŗ%Š9£,„Ī9ļRäĪčÓ9ŻwDžņŻdÓŃe»V€ĆŅøM_RŌ|;$śdör„¼6x‘^ĢÆ”Éc®J²[®ÉS!ŁFp}ė¶·ó­g6²ŗ2ƒG…8ŹĀtΊB›ÉÉö¬oģ¶Åo<Įƒ³æ…uB] *4·=oĮž·ńU¶Ÿ®„h×vFl0#¶;šī.> kMø|=ņĮƒ’8#„y£o.¬ŪJÖwösef“«Fźy #š‰RŅē”ójYxE/Ž(ó[ŹöæŽæ«†—¶ØU¼£cōćö\ż³’fÆŚ›į·Žž|@ń‡ü3/Ę«dY­†Æ4io¬¦x—!_= `ƒĪA88ž~~>i–Žų¹ńN¶¾Ó5E[ŁÄRŪŹ$ŠhĪ@taŌMsb%īó›šęgŒ‡brźōڧ©BVviŚö~MōōčxĆż[VŅÆg“ŗ@$uå0'¦_XųbņĮ'¶¹»¾¶²F‘ŻųSß?•qĘ„Óį_Ż>āųcoąŸ|$ńަ>)ųF×Ğŗ]Y¬d¾Vµ+¹²3ŠąØķ‘ƒŠą|wńƟµ ­[Ę÷Éu{#†Łcą#ŠĆŅ­ †B« Q‚00ø®iÖlķ†S¾—U¾Ń“Ęø“†9cBÆ(#Ŗø?L×{ń[CÓ­—ĀŽ!ьo¦kZr]Fˆ~į# 恞uƒ‘ėį({×<‹ĄŚ~„£ŚOn°¾×žGėž 2~•ߓکVgć±'„w>— 6¾"Ōa׌3ī;9öō®“ū-o^k»‚”œ–>€ūU4uø>— “™ ’A›‡Ś«jŗv­­[­Ö‡Ø?Ä6 ŻZŹĶƒę ,£>ä ŽVrū=Ļ×_Ś“ömƒY’‚q~ĪæµŽ—ā3PńL¶ö3ų’7UÅĀ](Œ„`r7ez×å?ĆżćĆö3ŁAreYŲÉ#'š®×E¤†š÷ŠēšŅÅŖ‘³”^­/U£ūš;’ųGķī­ĢO5ĄaČ!Ī:­wįÖ²²½Ōa½1y1s4‡8ē²>×;+ž=šė\ā?ĝ'I½¶øæ‡rev•Pm­Čś~µŹ~Ńšo€~ Kuo¢]éņĮtńŪČą†1“•oq^…7d-q&'ė™­NnĶ/‘—?‰u’¶“¦xŽńu[ eQk挘G厽®Ce…Ӑ„Š¢ŖēĄńß­Ey£ģ|(ɽ”źW’µō_©.›?˜Ģ‡sp=k¶²·Üé–z+ĢØĻŪQäü;sm«Łk¦xēk•u—iå@'üsł×5įßC¤Ļsó“¹1zŸP+’HŠõŌQīdöÆ{a„ŹŽXŒ”ŃrA=4š’ųcĄwRjzž“§s}®;{Ž@Ēeść§½DϜÅāõ>ų‡ń6ēāWŠo§·XćҼā«ó}ī{NœŌŚ5”VŃćQ»q9ė’¤ŽŌ»;Ū Yė[ŠĘVŪ½Ms3Ó¢‡Ķ Õ-žŅRŃDT†ĒZŠÓN’Ź(cĖLēæÖ‘Ś”ÜŌĢŪŽ“YškĖ,“ø3n “v!®‡SĆkŽ¼S­µd–9ķ#`I$0=ńTrŌ‰•w§Ųj±Oc}m+ŒrµÖxwÅ:‡ƒ4kO¹cwįSmūĖ|ģŲńd~Īy-Ö“ükƒGÖ>x,j~Q$r² }›wŸ~jxĻĘvś<µń­„żžS±$Ÿ*ŗšŲ>kJuęU£u©ÓZŻkĶ{v—Zī§«yĖ!’IøfUłN¾&ųįāų|Wū5xĆŗ¦–.*“ńī6vĀ{u&O›€ƒ¹č})ČRÓeÕć··Uƒ>Ń÷‡½q0üIńWÄ=hŁčš^h\:L’®×±SҳCQlĖń{_ßė·Ś‹ē¼k„EŪp!˜Ž¤tōüÅyŻĻī~Y› ĘRUbŽtƵdóėłV©X™.‡·Yė‘ųßĆŚV„:¬ŽŹ$Xöš™ W“jŚ…½Ī£sfmķŽ“”ćĢoYń>ŽėtÉˆČ1¬c•ÓŽµž¶k¦\I¤ZM§ż¬n*ĒJyWŽīnąń±·…žŃ.z:dō޵<'„ų£L†ģłŸfÕ$o%ć–0ŽdmœńŲćĪš;;m.k­:žHć—:0°÷¬-:-/UšęŹĢ*$0%Ļ”ż(3i%¾•jÖßgKxĶŠn%^žŲ­ßģ÷ÓU.P‡m„c=( ĖѤ»ń%­Ą¶¶fŽ6xß# qgøšĶŽŸ=¼ņŻĄ«åÉnƒżW¹’>“ hŹ^iõK›0Ļę8ļ–:œ²A® įĢxPĪ£>˜Ļ„”µ(ź‚Ģß0V€Ą3‚HJń/‹Ž~™įŲlō{ku½i˜`…'·Æ-‚—såÆé2>—sŖļH§‰6Ŗž²éX>»™ c0Uø‰\¬YŖ:bī]BŚšĪ„åaĘ}żkSƖv:†mĶ北ŗ„ģ‘˜Ā3č;…cĢĶłzuƅfÖā·³‰ŹrÜÜz§cšŽkA­ģŁõ+ŪRģģŽaź=«tc#Š4Ż3Oxa·Ō§’Öķ2Œ@ĪŃķšóĖØ[ĖĖw³Ā3 õqųÖ±ŲŹł£Wųs­Ķ®Ī—ś©Ō­ŅO46ĄĻoJģfÓīDŁ£3Ā«ŒžqN愺_VõĀĻ?—ļĒśWāūkĻ Įs,æeHTf'·j—0¹ĀXŹÓŲÅypG& ŒŸjć¼A„[ŪAqØY\C“0†+ė錔=n\eb¾•­ÜߢŁßJ¦Ń0ņŽ}+ŁŚę(t› >dU.?ČN#sčršĘæ5óąŗ˜U{q€1Y–—QŅ)‘Hä®>õAĻ7Šč4ŪŪ魝AN2Ē¢¼Óļī-›Čf#–`8‹˜W–2˜`ŠVx<e89÷­†Ń LJīum¾'¼'æ¦)øcąę«®ź~!Ō•īöÖљV ŪŽēŠ÷Ū)%—XžžKŸ±DĄÆ–£y9¤£qšŗĒ†Ū[²¹’ŁÖybRåˆćn:׃Žxie’HVą’‡.ƒĻµ.2īf]ćĀwQϧy3ŻŖÅ‰å}+Ž<¬jźVÆ-ݵø‘€ÉĘÕ?ұ”lSž‡[©é7¾)ńļ퓃ū8<›3‘9é€ĆSŠī,|:÷¶éŪ­¬#l,²–Ūģ;ÕĄē’<æćĘ‘ąĻ ¬Z~µ#źRĢc Ę8Ęų°ų’T“PšI=ūŖZCót®ˆĒK2”‡{į Üjŗ}–³qs·“˜U'ŹcŸ½ė^›ā kuŃ-$²T[ø@1‡$žED£b­aŗmÜWšp¶ŗHcm»Ią‚=ė›’…{§®³ õ„¼bā9D¤«d3zŒQ[pę=a®#··[k‡’ ĒóÅx Ī£iś“ŁĘ¤«!H?ĘŖK© ŲēĮV—ˆ×—«ķo•ŽM_YŸL€[ŲCŽxćõ“ŹåėpĄayc?ifĘ00+©¹Ömdgœ‘\lŽIćņ¬wD¹ŽhIŽy~ƒqźiu8„’Łä»ø “0¶i'”ó¦„s,·/l‰-ŒvϱÆSš×‚­nģg½[Ą6 yˆź}3ōŖ™‘£įżÖ;–—zķÜyq»ņ®ĒN]RĪöK»9ö~Ż»}[žŽ•QHØnü1q4ĖŖŽŪ •žm¹É`z\lj> ’Ā1§-«Ł4Ø_Ėcäcø=»ÖØé„ŗ2މāė[Mo$B†?»žT‘޲#šœVśŲ׎[‡lĻDē­!ŹEOG&­y ķĄ†ęGP†E ¶=ė’> ·’rwvXóĻ„&Ģ@šÖ˜tó72'ŻŻ'o­nź^Ņõf·ŗ“j\F ›‘€Üj.›xÜB _²*¤ˆ¼Ŗ gė^] éwM<Ź”ŽL™[«9[ ģvšO čљīÉą×_%šH¢ą±uå†9¬gxĖŖ8«Ė‹÷óV)ę7–} ƒŽ«Ż,Zm’Årė>rŹy&©#e3Rš—NmJ˜ęņq %ņFkĻ wń#[łŒŃ>Vč+”;“9 –I4÷¶ LĶÕvƒéŽ» 6łäFA— ЦqźsM›¶Åݤ„„ey{äUGMŠņG¹hƒ»¹rHĘÓķY]Ó­æ“Šé‚ øƒ'÷Aćšét}-7H"äĆ>7 r„·Ä[mRm2Öīų;—rć=3Yüž»»"k{µRńĒ~zS°›; F·—L/¶$ܜeˆŁ\µĢVśuōČgI[hž‚‘1•Ėk¢Zßżšįd,ģO˜¹ĒЊ–óC±ÓJ4s6'„ŠsKM¶c&'Sœ75`ŁZj²ĒhÅ‘ĀžŲ?ZĶƱ²ƒ:]kÄoƝ*ū•J)ģö­+M{{T¶j®ģ §> Ģ Ė®Kp“_Ašß$7L’!™w|Żæ*҉·oa7•ŸSYX,djŗ€¶ FĪː:VƅāŪ÷ņ†13øĒ5—-‘QÜöųļn [ł—fą„yĪĮéųT³xjĒÄPO$’ĖĀ‚žc.~ZĪŗ0¾ēō ¢¶”’Ī›ć ŪėYb7?— &6Ī>`°uķB×Ę~×|9’ö×»–ćÜŠwÆqFǟ8#ójóD]?ćIÕ NŠĶ—Fv8•]¼»Ń“ĶB]2īŽ‹’Ŗ#%—ŌUÅXrŽKqq3JFŽO5õoĆØuÆ ė©k©[Gg¤KtaĄąÖÅŹ'Ł>%‚MCĄĻf(¼goSĪGÓ„~~Ųźxr÷]’ĘÄ­ķŲi *Ģs‚O厚G;ÓCoį°“ŗ½‡ūbK‚Ę`ÄØū«žAķ^”ćhmdÕ®›OqX“eN^ĄśqKŠ|ŚŲš-?HŸW×nadŠU<Ź[õ5ō7|9g§É=ŝņŽĒ!Ū½~č#҃W3Ö`Ņ‘„Ei8ž?:å|u­é>Ū„źā“\> ®;~œ‘Ÿ7có«āwĆĶBŪs¦ņdfĘėó<ę¾IÕķ5.惏L•`{ŠQÜØĢĄū0EY>v¤r1_”³ß[RščŃn “ÜFį€+ƒ‚žUŃ Ÿ\„ȇݠĆ`ē?i[Ž;Ć3FŽ[żÜēœĀ­2£{Ÿ~Š^½ÓļŽļOfū Ź©“.RÕóŒŠģ³Hī%@ĪGØ®?gdvӑļ³Ēˆ-ī­5߆څÉ³ĖŽ^S×ܑM‹ÅŽ%ųUń?Ć<)vŚwŒt;Č®m¤a‡R’Ę=@<Ńos~n‡÷éū/|~ŠkoŁĖĄ_taö”ö©oŖĘ§&PäF#čE}1ąkč“ E'J@Xš}ź$¬ģg=Ϥ5{M?ÄśL–“¬sé÷1˜¤ČŚG_Øė_Źwü»ö?Ō5 ėŽ$Ń,¬`ńg†‹MTżę”j͜)ļŒēčEdēbOå^Ņ“–ט‘RpĮЌpyżAę÷Ä·/ˆd ¤ī$õ5½7Šēœz$‘:°Xöó‚qÉŖ›z˜Ż—µtĄål|ˆųe\qīi–ļä~ī@ŽŁķŠU“A'‰²čÉø63ܚO5¤,Blćžōqfµ¬®žZ‚ØÄĒQ_QžĘ“īæū~ӟž?x|§ö=µŹŁėV‚B¦īŅW ķŸöA,=ÅNĢź†§ś_ų;Ē~ńׅ¼5ć_ _[j~Ö“ųu įpѾå…nćęčE.ŖVį Į#ĶSµ†;WHīj•™ž ü2‡ĒvŗŸ…ŒĀŚyĮžĀć8ņ&<7lć•~hų£Ā_e:†‘ā”E?™erW¬gÆ®ē\Į%”ü¼’ĮB~MšĖÅö~6Nh4ł¦1^ĖpOŹļėŌsōÆĪ[µxO%™HģQ]t^šœ“E#8‘†żėŒ7­$jWti”µoXį’HØńķÄk•9Ąā¦eQ± •ķĮėZ©\ĶFćL@»b<ąqQ.Ļ0 ”åxČļLÖ1°éö)2¼½@=…Mł ±\c®„°E«E˜J²Ś­}ū’ėż„&żž?h’kQMšGˆ§w· ZN?ÕI·§†vSģxüGi­Ż[x¶ņöÓū/Ä6ėgآɘm®@%Qü;ĘÖ÷ēŽ¾³Šu¹&ŗ}ģomwc!‰ÕŽ|ÅģĄ÷®*ˆŽĘ­”–Ęźv¶ø‘£”‰­ņÕ°ģ+ł¢’ƒˆ?bń—…<;ūkųm.­Ö=3ĘÅõŲ#±’øl.OPV¼śŃŁö’†#DĻćņī¹YDS„ȏ Ģ|UĻ jpŲ_[Ų\L°ĘĶ…¹„%© śrĆģ·P[G Ū§ĄĒgÄś–«čÓ d 5¹*wqIn#ēólŚ^¦&FČl™b¾©ųā=DŌo!ŗ»š;ÉåĖĢX898õ>ÕßNFnŽŗmȼEš-Ųąō®Ŗ-ž,¹'ŽõŠŽyÄŪ’ćdEĄzÕmŗ™Ņdl1;¶óA–Śž$¶K5qj”[±cŒ×˜$81;”<ŽßJ -:ŽŚGīēn?pU9ļ¾ĪŽ%fŽĆ%4Ū‹…+Ŗķ_Q^Eqö†ĀKĶ)~£©¦QÓiś,šīŽŹØ¤j§vŠutķdĘ1Ž W#1“čt6µć5œƒąüާéZRųvĪÓO@ŒóĘr@ļG.‚¹~ .óZ°ŽHŅBŽŸ+÷Gć]Ķå’čZœ÷>cmłzpr}ŖlocŸoģ}^Ķ¢(—.’Čū¤sZŠiZN°šĀ¶©Ąģn0½"ąµ9ķkĮöŗUÜr,ņŪGęīĢcåocM¾ńSé’I”ŻĘ.“I!n°7‘€qłƒNTK¤ČSG…·ČŃ1‘\Ī”å[Ż ”G'v 9MßXÉØ½Ä<ØF1ķ\wŠl ŃoMžŠ_q AœŒ]jćO•fŠF‡§Qō®§Ć:Üļ¬Ć-”ŪøčyšvĻj»Ōō½KQ‚ĻXŃcŗŌ—$Ź•c|QšåŸˆ|7mošX_[”tČĘįžƒó4īö1įś'†õ]/R°œHbәNI?xūW°<‘éö‘•ŃÜn·l÷ÖŠĮ+“9Ī1Åa[ió¶"a½F=¾µq•‡(›3ZÜéö†HPĢßĀ õ­m*3y $©$S¦© jfļŠ³-cvÆn˜Ķ7Z{ėKė[ėPwȔξ+n=ĮZ„ĶåĶÄW²Go(ČQŌ0ķ[~0šüŚ ‹öǶ¼, n©œ{TŒóm/į«+.”q|%įćČ ŻI¬ķmo,ÆU.ŸrÆÉÓ½±Š6ōd•ŚgŸd|qé]<ŗõ…¤ńŲ…(O;ńĮ Ń#[„OĄBĮc€Ć½qZ…å­½„Ģ@“/†€hą&¹i¶¬‡,x÷5Óh6sĒLŪW?=Ö)Lʻ泰{V#É{ØHb0ŹUÉĻ”¬ę4oĒrŗ%ŗ¬ ”=:×A ų…>Óo3\<É\ō¬ĶבŌxžXīm\ĶŌ`Ö¼÷Oń Į‹Øxu¬'²d» “¾x`„+‡³9³²µdū$K ‚£Óõ-bµ xRŪnöÖ§Qņƒn"“±·ŠŒū°Å€ź1\ˆZ{TZEbŠ’»¹S†ZQrćÄ:-ÖÆnņłI40 '9ćÆįD÷ŚF”cwØŚ„€7/'®I®ØØŲęlµĶrŚŅ}6ĘņtY_;ĻĶŽøü³]Ž›öš šę„p“Ž«yAžZuł‡éłÕ Ō¶Õlu'Ģ•š€^6āÆųsO³»¶}V<×I|½łąĄŠ\ÄxĆÄwéy>Ÿa4płxł€ž*öė:‹ĘßW’Ö;ūXĀs€qĪ?™JĘ„ŻGV‚*ٲ©ŽvĮP¬(ø©4›±j6ŲĘ[5[–ucłWi6‘ŚøøŚ‘ŗüū»Šē«TģĀį§R¢§M7&ģ’Ż¾Éw<¢śėK·w‡JDdV#+ұ~Ń$ŅĪwJń±8އśeą—…ŃČrÕSõŖšĖū«¤>]m»ļdi:Ņ揭sŸi:…ŽŠņ."?:‘‚9é^UJ‡īQ¤kź62D¶ś’ £1SƒÉ«öͤ,Ä:`¶:v®IČź§LŠŠ¼¢ųÆĄ:׎ōZŅÖk<3BķūÉģm ł×©I?†õ?±ā¼01Œ¾x;O‹‘5£Ł=š#āž·š×ĘŌõ­6ļZšÜ†k JĮ’ IĻ’ZæH<'ńŗ×į—Ž­µ½ īßźxc‡gcßæ<ż3]TŖžUJ/˜żYš‰ąڳą’Å’ź.£į‹½įoš)ū.WĻ@ß1 ŸJžZ~Žjn•mis;ŗY\Mm÷¶$Œ«ŸųčŹI¤Ģ°UoVTzÅ'÷ßü±õ§Drä¹;½ĶlŚ\¹Føœń^}hŲśü*Šć<üŽ`‰+¤Ū™[ŗžøü«ÅtĖ) •w°WÜw6q\SgÆž­mum,AcĢry­¦’$Hļ&¶Id‘£ąH=ńŖœŗ•ģČ,’;xDĄķZ–×eŁÓw§8¶3“Ļ\ÖGm(f€¬¦h~ęīAō­A}Q@ŸzŅ1źt„Šf„Ŗ&™oewóūT …äķŽ»æLÖ§Ē{M/Pńi-ltŁą”ŪĄeņĒóžu6±­µ>yšEīƒ­ŽFLcOšF`¹$óĻóĻé^Ū=—ö‚£Ę”%UūĄT˜ŲƛV“I ”½UT•lpǰžUā²k:‰|@°5Ü„'QQW…’‘®ˆ\󱔟 g[ ;ĘRėŚĖĘĒ}¼LwĮÓÖŗ=GÅZ扨\ŪA'›¶FP’/®ŚtĻ„>gd^Ó~!xŠ [É®,įŹ+0ü«/UńE׈P5öŸhXr/Ļųœd×TcŠÅa]īz?ģ»ą‹śļķ/š›[ų&Özg“˶½ķ3˜cæ·ėmœ÷GL‚éM’‚čžĻæš§?j…擇t O xkā5ˆ‡Y¶A·ČÕą»8`,ÆąüĢū”=Óš.7āœ>_ĘłV¶§V3Œ¼Ō¾ņšoę|+įK„:k<±‡•ˆ;aŠƒ_ņ2I¼2“ŒcæŅ°’Šž‡§MKR-Ä^:‹ĀśŸgńµīī ĢŚWˆ$|ē•ōČ¢ŖjĖlš1ܐćsņƒķSĪt,$I ]ÖųŚOZĪū:±uuĆv”Õ±Ė_ qŽ!Š“ķAQµ'NԊ}Ć4*åp{8ƟėŚŸĀoųcāG‡-ųE Cö)W1ŗ·9$ōļ^ĒūX|ZoŚ4[˜<+e¢ß[[„ŠĄ³ Ž€ē]¾ŃĪ?ź­Yāį‹Óōļsš}¦>™¤%Ķ”Iz°ģ˜(’–ƒ9 ׄ[h°¶čɖ(vžµĻRgķ™5Ó¦”Nrį?³nÕ Ś² 5čŗuŌor‡ŻOZąœ£m؜nQ{Hāņ¦T<śĘø hŽ*×Å֟¤Mnté£i.Ņ;ķ'±0Ä[sčk’h6W^%ĀÖöŗ®£kóIi“»ŚøõƛüUū)žŽ|:’įN‡įæ…óeōł5MMmäHG™åŽBą3ŒŽ{ƒQ*O”š¹Ž}‡”%ķgk»/Vqz7ģ+ūFioe#j’ ”Ģq ĶØßĒHūÄ×Gā/ŁĒöŸųonnõļƒ×Ž$±@I›BnųƔ’ҹå†lš\O…Œłe3Źā™¤_.™ād»šŽ­ŠŁźÖļk"ž®ćĆŽ!°ń “ćOžŹ—g[Ż=ėA£ķ0XČM)EŻš5ĆĖ)µ‘ĀČĒnOzź`M¬`e ‚=M%ڌ®s>%Ńo­V^  ŠŽ\–ūšNyĪ>€Öžš‰,Č\T`fØm\(³s#DS'ž:ŌrYC3 ‹2Žr‚\Jz+­Ķ¹Ž]BąĮ’w( xö®Wľ)²ÖōĶ)VźŅUņ›-‚TśŠ„†¤OLųWńĒæ“ł¼į›=-"vgŸĢž2ĆŖ'žę¼›\šØÓ®SÄŚYHnZY$øCŅRĒ$ž“ć¹É:EŻA›Nø¼“Bΐ³Ŗgļ½3\ÄŁ;į×ĆæŁćEż¬“öÄšgōĶJÜI}ąR‹Ķ:źLJ9s";…*Ź\‘ҽܽ]¶:}%©ņäTæėģō‰Ÿ•~'ń'ü%ŗ}ķ¾…c¢ŲyAL1ēq`z¶{Ö’†¼GįĶg@ŌŅį–ÖŚņf ÕcŽ3Ī¾¦ƒŠžĘ3öĆRÖ-ļ®ķåŠ)R@:£(#ł×WeØŚ³B’°ĆŽk¹l|Ž!ŲŲ»B12Żzt®ŖßP°Ó4ˆī/ļT»78Ļkr«nēnÜõśŠ)JŚA¬ĆscĶlJpy|’ā»×Ž&’53޹ėšęfp³BÆĪ~jŅŅŽā4˜"Ék);U±Ū×ń Ņ';—ŖNIÆÆ“ģ$)^I÷ÆOѧómXŲĆF|0Aöö¢Å|@Šo|Iįį§[^=“Ž6;ƒœ~ę¾šÕĒ€a’+ūÉ®®xpö©Q±IŲē&“WŌ5y'—P*\Ÿœ`éļ[÷š™ØZ$ń-Óš~aŸŹØ‰3­¶imķ-“½* „#ŲEqĒĮŪ#ŌÆv²Ž^N¹8ļUs+ž©i·WW7‘4ķ,Ģ̹WœwÆHšßŒBÓ Ņ$ŅĢҐ«ē+ąĘ|R°äz¤¶šL6öw÷ņŚO,€J0Ć;Oo­yŽÆā{;¼–Ļ}˰+ž£éަ‘Ž×,ļ-µ}Xܙ'O>”üŪO§ė]O„cµ;¤ˆf›—o—Š™ģ·čcvcTIŠąÆ;‡µv3x*ŚŹĘD—ĶūB‚ĒqūŻé) žuazślŚŗFˆĢ»SZ¼sāNöŅKĖ3± 'ː£<Ջ—±«šĻMMBŪĖÓīc{Ū:m=9Æn‡ĮóĮ§_ϬŽYXÜŚĄdŚļƒ#’t/^h&Q>z¹Óm|Y«Y^&””­¶¦cø’3µ_¾éųb“D؟;üQŠī†Œzd%„I„ŽsÉg•xļ…ę›ē‘ķ®!Ūņń=:‘Yr3dJ¶¾ŠĒo!K†ČČž•é>ž+Æõ/,¾Ÿl„„Ę •Ē`j\MRgˆk_“n­ā{S±šē„ģ,­ŃŁī¤'*G+Z’õ?Xłś¦³y\Nŏ” ķū¹ī("Q±ė²ź6×7Ń/™œóżŚłó_‹Q·ń'›u}r–Ŗƒ„…lśūÓNĚ“¬²S¾gą8®sSÖŹģFČV؟™—¦Gj‘Ć^üj“LÖŃtIaÓŚO%gG9}⹯CŽĻFń†Ÿ6Ÿ«\ŋ‘ūµ˜cyė€Ņ‘‰Ėx‹Ą:v™kŚØ{‘<\vÆ-¾Š­.ģļ!½$.3Ļ9­`Ń<Ģän¼<--£«cīlnJģ|0×M§“ZœėoJpqŽ‚”™iÜ-tˆÆī$•Å#hUėZ6Ž2Ż‹k—Ųņ| ¢coįYĀēF¶Ś‡…7ĘlbÕćT"'q…ü}’ ģü#5ƈ­nm죄4_<¬Aš÷¦d鳉ų‰į©Æoō­6Ök½Ø,¤QU¼MįvĻN°Ó,RQ,ąt8_®+^Pägišėį‹žézž©ā(ķn5%.\•ŒóėV­ā¹“¼’śmE§“݃^TŽł”FÄņž¤|wįū_ \Ū§ŁßS‘|żŲś’O­x;O Z”ģ³<‹+pĪz{TIX9^Ģć5ŲžÜĶäĶ”ƒź)| y‡õ›ub÷®|ä‘Ųš{}k³EŚķ|qxuF·Ņa[X2s¼ŻkŅWø6Ņ0Ÿ•Č#·įD_D>TxʛŪßxvĖK6Āå­e󒉹ż+ę턳…5+čŽÅ›g·“šŚ2¶…Xū;Ąė„Xų>ĪKU¶.ą<؃ĪĆõŖwŚ4~ //n„ćšGŠT±X“PšÅ®—jŗtŠŃ‚HĻ#«śn¤šcA$ ¼±€#,”†Gµ _BecxŸĘb–ń¶Ķ#ČŖX&ļ˜ž¤zW—ė73źwÆt®Q7evńZ%dec©Ń¬µIģ¤IĮH9`\`ģkž¾t[Ս‘Ćs÷«&LQbźd‡É‘įVģ¼p+“Ōõ[yAY‚œtéX2Æź×W™K‡KI2B+œz×_«kVK§ŻŚŻ"N䍄†psHŹo”åRĄ—1Eł[pĄĘ>”&¹yŌz|r<¹åzūPJ=?HRŽŌ.,ēŠÓīķeĘOÖ½Ɨ6W÷lšµ©L‘ ä°ĻQUŹĶ#bń†&ŖśT×bÖeU²OLT~0Ń4ŻBĪž8§”±-¼g5²+S—ѬlķJC²ŠWŽ­éšĻ×µ;éķnķķ-ļ-åä`Ėßīž”oŌĄŃ¬Ų€ŗ­½ģŽČJ…m¤’8皱™}£”ŗŌd’Ž%‡ ’ćėėX3H«³2ēÄgPŪ" uaŠ“W­õ•ŠQ¹ĢźS5čU¹0©pŔd; 1XČ#‘üŌĘćŽi”ćc5īkÄQ¹”fĮč=«×4=“ųdžŻÄe·£7ń{ –‹Zźv’ŻčPĮ ŽŃĮr''.+¬¶Ž¶}·; ņŹą®OLÖ‹Gu Xū;ĄŸ!cØčÓß^}’4 Jvćg={×Ńń”¾ÖķŚV²ņć*Ø!w`ą^½}ėéģxR«¦‡Ē/„ ń5¦§—3)™¼ó#Å >¾ąUŲiŗ_‰äæÓgk†p9œ×ō ĻŚxgPÕ®|Uiuū©&•†ŅOLēæN•ö•ēļląŽźtI# n9Q×4ģh¤}%£|[šŽ“k¢i6Ņźq,J  ,¬IēĻšĒŽ"š2iāÖŅŅįļtŁP†¶Ņ1p<änÅ~w^[M³WGĪvž¢ŗ(;«™MŒ1ŪŽž¬¬|ąšH®ŗg$—qc¶ø"@ā&Lü¤qļUł‰ĄąsČ­ ”Z-±”Š»³×„[‘cŲTØ÷÷5fōĒļ¼"8Ų’zö£u Z…•õĀ³Å*yxGŅ”Čī¦ģ/ž Üż“ßā/ß~Ču[OųJü,¦ ģymGXšĒ'±Ēojž—œ%ŌP³C(ēŽ†£M«7ŌÜą¼C¢]\é×pŚØŽģr†æ=ž3ü‡>֔¾dF_õMÜń…'ƽGšė–ś}½ž±<%Ņ*Ź÷$ž1ü9'źkš¢źl„Ńä"f вĄ’ŽR2?CY0šŸ…¾,x#Äß ū>›<‰,²;³JĻ3uś…LV¤A>/ēž8·?0+6ŵKk«;„œ%Ģ2‡&ķÄt5čR@~©|ń<š·…-'•fŽå~IKś~ķVĮ_XG’q¾ī~˜­Žy›W+«4$°ģAėW“ @Ū\ĪŻüp:}M+ó$ń"#š.§ž•ĀKx-¤Rā¼éT¢(ŹĀ’ęxśėŁ«JŅĒķ—«§ķo1žē|šŁ„Ųč—KÕt"'š0±ņ‘ĪkŽÕõ9¦¾–āv.Ļ÷²0>”?"y‡Ć'ĢŁ+…6ķŸ”uĶv×ߣ–Ѭˆwü™Įõ¬œŁj+Z^Et–l wĀźŚk=ŁĀ|¤“Œš—Aø¢ī6š–×!<›fÉä}ļ„G Ż­øŽP噎x­D“:K]U.LVtcóĄWo¦ųoJ¼’ątWVĪą:Vź$¹ė:|0Üŗ+…|ćŸZĒĀ:Ī£hÖó"ŹӑĖSdĘ7:›ßjŚ Ū\#™ *vœģ>õĢ>«ömnēO¼B˜PĮHź„e)Ŗg²xr{y4Č”ŒĘ#$¶8ćSÄzŻ½ˆ¶”+#œGj’łYć>%Ņ“ū—khŪh;ŠØūŌČük·Q·šÕDV„pŹß{w·ėE™qÓCÖ¬oÓ_ÓŃ$”OoąŠ×+ńįäwqé:­­Ä¢Ś\|ŠFF?ē½"Ķo²Em¦CnĮ Ȁ8Æ?ilo›äg  NFļˆõ? x–ŽļG•ÅN׍€9÷Ķbßµž»}sØ8’\ąē¦{PC™"’=I%·^™]”GONŌ„tŽæŅķ¤Ė2ä0ÜEz\ś®=¼Ž“£Ä™?J QexĻNń›w É=¬öņm+ÄĄp}+—ń……¼ęŽś0<ß»’~ń Ņ1±„Ļn hä2FÄsĒz½•m©ļžk‘°®T÷©$YŹų“U¼¶+„¼Ėä ĄÉū Ö4ŗdsŚĀŃN²Æ\/9¦ö’¬f3ēœv®M¾›Bµ[„÷™OZ ätz‡ˆIg|­Pć§ō®ĻFg›uņŗ­¶ŠĒCS5”Qf~¹k4„_iuĮĘk›=ƒ#²ƒ“ō5‘“ņi(m>ŚX͚Gˆ„wc‚yčxÆ2¹½³°×n­mrź$afĖ0õ­’±”Żé·W lēQ5‘ĄNÜJ­«Ģ%¹²6÷9€®øÉjeĘ]™Ø$EŒ@ ē¶ErēS¼¹ø[s²;xĪ 'ļPD—kę:Ēƒn:ZX$:t–ĻØĒSAQ//®%‰¾CŃqšŠ2;β\„*FOŠQļžźŅD¤ø…ÄgLWYā+!6ÄčČļA¢™ÄCmj<ōU 6 }Mxg‹“ķ:ģGŸ<3«1åē8?ŹŖ/±”‰­ż™m7‹)å˜ b·µėČ4+°V[grŖIąōĻō­9»cN·MOOY »…]‰Aä½c.«”éÓX3Ė™ AŻpZŽcJg«ŁŻĶ)ŸĢc¹·{ŃįŪY“ūÖŗ…Ł›sćæj“®;¦óĶrŠOŠ2łž¼ļÄ·Ķ9Į”‘Į؞ĆĆRĆmŲ®źŪğ٠Š1øŒ€zcJQ¹“U‘Ķy·÷÷ROe!w8ĘqZ·v¦Ż#ó‚¾Fī¼TrXŃDĒ—HVœ]ŪŹ£rēb÷«vŸ•#,€æ4łūšF6&–;K”¹ŗóŅ79 “÷½«KŌļtō0!iö±%ߜƒOĮjtž*2¬)4…Ū¦ sŽÆ{ØKiz|^XłIzŌŗ‡L H—wV!¢bȇ «¢°¼‚Ś3$Ó'ĢŽõ®jµģ}.EĀøģĘŖ£ƒ¦ē'ŁV2µŪ+(,Ų•‘kćXķ®%}^ŌŽéĶ!ElH8?ÅxųŒgDyxIąE ’K÷ń=;CÓ»īßĖ­ė|4š³xÓT_éņyw2łŅ+0?(°ĻåŠćm×QÓ5W“ÕSj4¬-ÜTćóÆ2U.IR„ecnł®–åŲ¬O½ņOŁ›Åž(Ņm|q¦ų‹F˜ÜĀ%‘€杭’0y¬ł;ž…8G©ó׌_\š„iįŸŲ.āē-m6ģĒ(Ŗš©ks=īDn²Fކ²œŖt–Ę嵗öe”©f‚+wĖä×ŗeÄ!n‘^0sÓ½xī”w•©„œ0ʰ™¶Éƒ¢¹ŚčZV;{1Fd;æ„iDŪT3/ØöfŠZŃŲ`ķĶC{lR?2ÕvÆsN[G<ŃĶ(*ūĪ9ĮõÆ9Ó¼SŖjśŪé:†•l‹;D²6J”^ŸzĶk”M¤{¦ąk­v—Ņį…īm“Ķ*£ę`aެi70KÅ gœ1Œ®`ĄąŒzƒž*ż™ĖVŖGˆ|Sń/٧øµVŠ;xd+—8ž?\W%ądM%ģ5 Jęv×q–ŚŻqĄĻÖ·¦žĘā¬~÷|“RŅoģēS5“Eļ#;IĮ’ńŒ.|;āk™‚ÆŁ\’¤5éюšŸ%†Ķ?ŚåM½,ŠŽš”zæ†e¢-Ź““Žā±ąšlöš‰|°™}ønsō®ųÓ=ˆć“mÅšĻŗŸ ¾%|-ńŽ—9²»ŅµĖ)e~ŠÖķ Iē„XžUö7ü•m ’ģwšWĦ ˆ62G>?ķå<>øN*ĶČ~=įoÅü;‹]kr攠×ęĻę»ĮšµÄ–I²`w<œW¦ÅK4­½ų'"¼Ś®ČžĪĆ=~&Œŗ²ØŲ„`ųŖģ·Ųą“%ŪĢ Ą«ÜW+Øz±Z„¼¹†#…„CSh·V:¼„—Ū”²Ö㣆”øĘrµ„ärցÉ[jö×׆ōVā-4ŻŽ W’CN sŪÖ²~$čAÆkŗcˆ×œÖī•-ǃ¾$ų?Mš¼é?‰bŌ#WüˆĆćƒłW£N*ʱ*ö>÷ųšź}ÄĻā y™Åډ®8"R3Ćšų‹ö±šeÄ/…š·‹µųŠėń.T2hzŲõ55Ø„yōq©¬O’’føt’ŒŸ~#ų'Q†ām:ČźŚ^¢ūĀ dÄù­æ‡ś‡n’N‘€ŹypxśŠņ§4Ŗ§'ŗ~æäz¤WmVa¼ŸNµŅĮŖŪ=¬ŠŹØš°ņŻ$PUæ ֔‡V—2±ŹkžƒUX`³Övį0©ųkįN“4šź—×n…Ź;ćå“Ē8®¾sÄ©–Į»³Ė-§:±<x„hĢ~‡?į^Žśģ.WĖŹp3“޲•C³ …Q8½nĪ’Qž‚O“xw9ĮzWA—QŚćg‘€é\Üśµ!e©kNю®ģu+ø“Ū s,ÆŃW׊ņxÖI5;_‡æ u½³óY^ā/”Ÿwļ׳V‘ī|6wˆŠOČśSąĒƒ$š¼7ā ­u²ónżįyˆźIąņkĒ?~6|@“Ą¾"ų‘āė/ŁÜ˜N‹k0† cSņ¬yaŠąšÖR¶‡įŸWxŗ²­5éä+Ėa~,öźżĢ$O=†Ā:t9Ķt°x£Åś4÷×~ń׈t-A-¼ÉVk¶hXِĒŲsķQķ;œÓŹęõÜöß ~Ų÷ŗ=·‡>?üų]ń÷CTĖö½:4¹”uŽÆ¶Ö¾mųÅūx+[ų±”ź_²gÄ ;Ą>ńF“6±¤hž óM¤)÷ą„ƒz¹8ć"—*›QźĶrŒN/,Ä{U'*Oģöz»Æ]Īż3Ę>/Ń5 cĆ^.M>׌F”>ØĆnŪŅ+ˆ¤(Ū_ų”•Č>õŲIń;]øy#ŠŚÉ÷ŪÉŚÄž¼śš¼ełšØ“]K÷¾4ńŠu-°G§i—ŅFOš>`ävbp3ļRiž'Ō¬ąŚ $š,†Xóó`ö¬yĻ~k­Mōų‡wØ[D'Å²®T¹ ō<× xHńēŽ|?Æų£ĮžÕu]MŪßµøĆƒŒüŠ~’QĄ«Z™ŌÅE-O0_ x«ZŗÖā“¶ń$:•³y“Z^Ś…š6¤¾'³·gV‹PĮGpČa]”’Å"MŠ1óPž¦rĄ]Ł,:>¢ńÄ"ņ¢i@ĪģrGä ~OxÓBšŻĒŽuÆéŽÓ Šå…ŌS`­½‰ÜG¾F÷p/Słæé9+dTWż=_śDĪ(Kö™˜¢Ó½t—~ÕfŃno¬ć“nU2%²ĆöÆ« ŸųĒ}ĻŁūo³°•o6=2Ö'»Ē8üknŅ(—Ź’7?/''„zŲłņ;Ķż¦`&u!øėÉŸā->UøUŠį^$`UĒ4Ļ2Lģ`Ö®.m-į–0ØØLVEž· ”Ž9'‚½±LĘo”F’T·€ĄįĀpē=jܶ0ąšŁĖDqĒOĢQs3KUŅAš{°šĶ4™27¼­#2®Éf™å0®·j½„č&ļ|‹7•(}Ē gSā2·óiń¬ė$Ė £(tą!\ݽ²ZĖ#^•I8Čö ÅČītÉķīB=£²ą č©kv’ib9Ö`7ĮĮ>Õ§978_^ŚčsY5åǟ$Ć÷pŽvć?į[ś/Šć–$˜Ym‹s€¦ ždr¾*ón5øn ¦É¾|ČҰõ%ŠķDP ER2e hz…ŻŁ‚՝¤FµYōū“¾ź"0č§„rėc®$‡"ń„hOńq‘^ā«}!^UŽź5q‰ ó p9‘®£ XoR›}¾ZłóÅ^m:Iī gdl“»æ½\cpä8M3Oŗ•FÕó|¾>¦ŖĻur÷L–vØÓƒ Ļ””ĀÅ„bÕäŽö­=Ģ o"Ø €š+Ó]Ž) ¤7Mįµ vz€4¼'ŖkÉ.§„7ŚU¤0œcük±ńŖAį«tµ@u$Żó挞ƒÖ˜›čxiŚ…‹«]I “ØŪ]›k6ŗt% rĆk° zā‘“Üō ū*5[ˉ#H³ó1ꢰu½~Āāåķ4iŽPČ2rĒ<Š#ÉWA±·¾¹`Ó@ķņø ą{ζ,ü'e«Ģˆl”‘%y"J]L=wNŽÉVÉċ@ ڹČä(ķ³>Jćd˜ėķAȒīāćQž15ūMå©EI ō¬»-6ņ×PgŒī>lb¼ŪĒŗ7‡“KS§éÖ* )ūJŖ7gųxā‚£#ó āl—św‰žöĘų”I¹ŽŲÆ[š×nõ 9?4«'“4§ī¹#‘IÄÓŚm¬­§‡5į‹l„nŌÉ3õĆq’ׯSŅųūQŽń„¶–;xcģĆŪŽ½'JųMājzlŚ2OgåŁŹ•*ƒŸnµ5ęG/ūFŻEšß_šļ†fÓēin­Õ¼äĘƑ׊·š£SŠLŻcbņNāČx>Äw­ īŽÆÄś’j|6Śn˜–ŅھVLŒĢ~½k”Ōc½ŗŌm?“nš;¦Ś‘–<ävż+h2JńŸ‡|W¬xQŌ¬µQęŪÄv|ą’@éĻJųž-KY:eõåķŚK'ŹĖœ3qėUpK”/‚lg¼ŌÓLó “J„¦ö-»Ś½7ÄŗEµŒņÅ,op$Ę}+9óö«®‹K—…®P¶[&œŗ‹Å’Źęó1’ߍrĖs&vŗn¹¶(žBŃĪ1ŠcóÆC³ń:%±•\%Ś#2©n[ō¤_1ę°xńo ½»æ‘"ø‘ĖFŹØōŖŻ[źH±ØSpĖž3ō­Ääwž’ęĶŊʫlŲۚöß 5­½ģ-pc•·mėžzP'6w~2š½“ͦÉѯɵr÷Ē×Qi«ĀÄdƒ.ylvż+7PŃÅüā éöŽq»9ea’1ķ^§wsi}eŗ¤[If$c#ÆåK™œÓÅŪėŚf•©‚PĻ)%6‘µ5ń$^$“†÷TøC)åD£hŲ¦@śŅ¦|ųu/ü«VYbŪÓµčߣŒ–ńĖ2©“žŌŽ„ĪgT†ąŽÅpŲŲ@į}ĶmĮ©¾™kåŹ†faĘzŠ3͵Øīaœ”æ¹łœ8U8+ķō®‡Ażüė>ķÓ§ryuś¤ū ŗłČ$Q.‰oŖ¼cȏĶÜ=~•1b:GA‚ÖĮķä…ĄĀŽĘ¼ƒU¹žŽąAn¦6Vź}k¢žäŹG±é±Ėy£¤2O @r«Ė7„xē‹l!h%UœĄŹÄ0IĻ5©ƒgé“ÜYŹČ­ū½Üdēń®Ź-Fvhc…Yٶ“4L–§«xf;Ķ-#]FŻŁĆ32üĮ}«Ō®uX÷Į#Ś@cģ¶“zŸzĆ©¬bĢł¼y¤ĮĪ–tŃ=ó&į'lVų£w¦X­•†ŠŃŻ9ŲņČą _UļšEņ^«ć]jł”ÄŃ¢¤Ÿpp'½YÕ5›}GĆŗ–žŅ+»ØOPG”ķS(ÜĢłŠ-R]AįÓKrä©9ܽėŲ øæ±°KY.Ł$Īļö‰¢]‡ĢĢēŠź7Žč\¾ŒŅÅāĖ‹V’Ö(­äuĒĻžMP®Ī©-!Öa7ĮwÜ ę„ŃķõEŌ_LžĶ%¶pJ0 m8ļō bńŅźśĪhŪ‡Ąuo”œõ¬ŚuĢbų’(Ȥ،=?ĆŗŽ„rnšāāē“ņ®zڽZÓĀĪыxn#@Ø[sĒjNVŠ£Q€Ūģi@r£fģtÆ/Õ,ęæ–c”‹wĖĻ5Ÿ6· 6b\Ćqi%Ŗ!łƒƒÜW”é:ÄQGÜ:‘’š‘Ę膹=Ķģm+ɈŪ;Iž•źšMŌŅŪ©øGh#ĖļœŁÓŠūV‡ž$ń÷‰®4 lķZФū•w6Ģ€Nßƾ‡ųoo<žń5Š_Łj—&×ĶyBł;ząJśCĒövGé·v«ŻÄ\ Ųņ9ėō®uü)ā%ŌžīYģntpĆ1‡Cōē„”R6u ēH¼†ž4x ¶ćéz£­kzUÜ7a„Ļ•AŸ˜ÆlūŠŃ«|šę”ā-VćY§[1ģõć©q^ßń–Ń,ü%§„Ćł—R‚|“ü8lóķD‡}lyO‡ĒöVŸg«źB;}(å2ĒåČĘ,Š„¬É„‰ćÖl#‚FMʼnQަMlk7©Ćü8ńm÷ƒ<]%Ī”RčW›£ø1­µČד^I¤EØŻŁč÷ĘīȾärܐyž“)#„Ąķōkö†XŠŖģPŁäšõ(ģķõ}.ęՉ.Fā¬8§CŽo[uń5µ-įÅ¬vÓŻZĮ!NyķŚæ)u»XõŪ¦ŗµh®7|ŖS¢·„a'©–§‡ųžŽēHyĢdĆz9\ņ=kŠ‹REš?Ž]@ą£f6ĮR\֔΄ō?L>xėū{ĀvfmV9ļlĀÄY3#˜Ē|WіӉ@|ķԚŚR4ä…å·hØSĻ<ƒ_žŠ¾›Ā÷ØEŒW2ł¾bō$ćŒ{Jć: xšĮ%æ›xVhd\FĄožµ}š{Ę6:…¦±š×U¹ø†ÖXCŁ“ņA6G<öĒR68}JóÄ’<čæµæģ±šūā֕©Å}«-„pźØo‚``ąt!»zJJčŚēŃ^ń š÷Š-­ęr"™ü²ĒæłÅ}y©Ųéŗ¾›qg{ŻY\ĀŠ°>Œ1ŸĻš®YÄşŹēü[ö8¾ńā½{M²µµń§„ ¼¶eŒ³_Ł;|éĒ]¼_É_Œ“öÓõāė/–J‘¹0=…]$DŃå·LØY6:3IjV›%W“Č5Õ Īi Ū,:–xåRpsOAęI¤T|rOńVĘDbD‰šĀō+  bF!½ŗTLØ»2łŗA‹süŒēŸ­;ĻŗMˆēך˜Äė„ģ}ū=žŠŽ ż•~:|,ż ü2Žu POµGę?µZHBŹ’ü;IÆōÖųEń#Āžx⧁õk]c¾!Óć¾·’' Ŗģ °Č8ž.ž¹©Ö—4‘ҦއQįF”!󗚳āρ,|]¦_i3 Cx¤Ū¶ķ¦9‡ ÄW“V%Ųi¶ŚMö„7ˆķ}:XŸHÕķ䏦s†ź3žāæ•’ų(Æģń/Ć߈zæŒōĶ>8m#•ÖvE’Y?+ēæQJš\ɘÉ•÷r“Ąy¶LqļTaĄ}§,WƒÅzqv8åIJ#m ™¾•[Ē‚}OZŁHÄ«, XŌWGo­F–ž[«Čņv Œtī2Ė[ˆ#sŻ–ĻNµk2Eóņū1ŖcÄH$~XšqŽ­Ę7ŠG ņMŃ}O«cŚ>ļöYż”¼/晵‹ĖOk.“ā+x£&9”cņČW¦õ<ƒÖ抏ąßÅķĘžšī­§:ź6WV°ŚjD†R£É˜wäŸpk«C¦'ÖZ4±ZC&ƒs?Śo-£±Éxū÷ā™=‚ÉĶ¢Ķ%²Ī7ĀėÖ9=Vøf? ą¼±bžŠŸ³ž—ūJxVĮaųį"-5Ļ-6µõž~ómä…$6?ŚoJž!īįŌZÖęĻQk_:9Z=ђCcæ5Ī„«ˆžØ­įN]V±‚H\Ū3ˆäŲ2@õƲ®5HõŻO³µhžÉ ˜Õ¶ą°$ž:ĘR¶¢ögkš¾öŽ=OSRu•†åFåGÓŅ¹Ė…śäęK½×6VĆ£Ŗåw}k¢–)ūč?…~,OėO†uĻ.ĄcŠzdףvä}©ą‘ĘĄŲēZīTĪZ“ģtöQŖ,‘å]z“‘ˆˆŚ4U­:§aa½·ŗŗ6ÓH‘ąg“÷„cźG™ęÜĘŖ°z Ž>FF–™§„ä+y±bU%ƒĖT,g°Õm¤(<Ő½©šĄķ|WāŌ›I’Ś„DēzaySŠńˆäkˆŻ…INO\ā³”»Ųé4f™Umbķ$;WpŚz^¬V’É“1ŚN~ļ½f"Ņ×Gv0¼»81'8ļĶZH£»·3£ļé@7oµ+x`Ó¦I#Ø~kˆ;„XT‚$œꊹ„ž§{¤i³¼pI‘¤ŁƒŒŒzW©ŁŪ¢I²™ķn8ó o”Ÿš­‰+#Sæ×nbŌo"¼ˆaŠÄs“õĶG/ˆ£Ņ'x!FIŌmRSXĪGE(’ųsÅž {ÉRķ¤ŗ¶‘±'uē8ؼ|š}ĶĶ”–Į’ļ$œwėX91G–Ɖ5½’š%¤Ū½ÄĒbÜŁģq^‹c}įßÄl'ÖmōĻ)N$ø¬¤¬4x‡ˆRcüā«Ūéwī®śrń‚Õ2)×hŅ_M¢Ü_^Ūł&Dœä-s6ßnü;=Ķ…†‰m©E237XĻØżjM9Jś_Ŷ¼xģuH"†łr_a8JMSÄ0+Ė$HĘ" eFr}źd‡ŹŽZŪÄāęI„„?Ź9’f¬j~,‹VŅ“Ķ:(łS3ĢĢr[ÓŪ²±qĀŽė÷jņFd‹ t­ūmR5¬FF`@֐ÜO:Ōž“š#ÅҶš;{i¦•¤Ä„såūā¼}­$‚ż­åVRpŹOĪŚĪŲ¤%¤9O_JɾĶŅʒ "ö4/AumjŚuÅĖ&}Į@Mdż–ÖŽöH­$’HŪęS@‹±E “Oo½}I§hWŗ”×’iv’IĪĄSž¹ō Ś2čt¤Ļįk;±nŹ • Ł=맆;«ż>Ż®ŲrĮ†OŻÅž"µM<ŁO y¬ą† 8R+&fT–ā4q(Ą :ńL—?j[‰Üm'= mxV«›«X#w!Ų*ńĄēÆų»ĀŚQŁ]_BKģ{qś×—E¢\x†ņļN޶e]ˁ€iƒe=I¹±hģE»K,xRĄ÷®Ś9nl“{x¶¢…!™³Éć„g6)Įā_“[:4~Rä® ć½Q‚K[Ķė)ŽD/€3ĶBÜé„ĒJŃ“ż6čŽAo(o_sRŚhś:jŃj+§Ē<Ģł8s[&t*dn4iuM2ĆCŲ:"¬ń¹ÉsŸĀ¹Ém%°Ž(\yø o=je!8ŪrYÕe\ÆRMpś•°Œ“ųIbrH5ģžTRÓžŅŖD„·ēœŽÕøö>tię«Å>q—męƒKČė(‡īqX5ŻõĒČqrxī*¢Ę‘éńŗm¤Ö¶īŃĢWhlņu¾Õćµ„ÄÆup˜f,rĆ>¢­w ńʧ'‡tčnģlēŗŌ.[lQ¢½ļłT¶—Ś›ék£ožį8užÖÖF‡#āO„וqä“ ƒēĪį\½ģQ¦† aql$A·p8ż*$ūĘW†lÆ-5_²LZgÜ2F1]ž„ØcU·“]>ćģÅ yȬͣ­ģ±Ć+Įå„Įs…ćīÖt—pé®ń“f9zs҆R}Ž×ĀśV§āhn¤Ņ¢ó!‰s$‡€=³\…÷‡5 '¼“ēެT£2=*%Ķ•Īu¢žŪ* ¤µš-%fi%l(=ĻSYŲ7-“å‹ĖøuŹõóŠ.~Ļ0Pß»Ī0})‰™ “ ČžuÖXOmŸ–C#Øć&pS£ÜO#fGLžZ“mmÖh J»Ų{r(e!š–•öXmäµ 4Ģ@Ąźåż“˜!kČĀŹ«Ē<Čé†ę†›­¼Z4zLVń,~vög ceÜ ŖFöŠÅIeO49µš¢h6ģ#ŌäæČ ółyžä.t˹/‰ŠE(~ö1Y6W-ö*ŻĄÖ‘A ^5'#8ę“e¹¶ŅōoõņĖ ØŖ2Äż:ÖR¶=  uŖF•%yIŁ%»odŽ*ß[†ńLßg’ ¼üĆÆ’ĀYcj‡l9$ś×ŸW–Ēõ÷}jO’¶q>U»‚ßŃæĪßy‹©ų‚[§1ņ£`Tr\ŻĶdÅ\;/#>•äÕÅ7¹ż…Ćü'‚Ėé*8:j]—õØŪy–Ta·g¹õ§[Gā¼-`MrJW>¹aŗ7†üAŖ|5ńV—āŗ·Č`ŗY*†~­M{Ø[xÆĆÖzeæ˜ÓŁßĖr³©ä9)ōĪ:tÉ©yēÄėūŸč61Z5©»øbLJ€@$}xÆŅ’Ł‹Å>ń·ĮķRÓęķT†ų+qm/M¤zqZÜćöĻ”ņ·ķ’cmā ŻAšŃŽö]Ń] 4‡%°~‡õó‚/ĄÓ`I–X®£SއéXT–§æ†„¬¤śž­Ūīb ;Ջ( Ēļ“)ļ\w»²=špīD–‰6ęfm šG„r®e{†A2o2ŹåISŲć·µoN7T–ēÕ_³_Ā’ xylõö“Ok›˜*N€Ū¢żß\’*ō|$ŽīöļÄDŅīĶ-$"”ōQ]£Ųńńˆ©6—šĄŚŸ…5»ģū{MFɄ°GĖΤüĆź=«Źž5~ξ>ų+į=+āŻ¶…}sšō¦.fŒ{5-Ćæ¢ŸzR¤ŃęK2„'Ė7k»#ęĖßZx‚[9-[żUNsøć­z&…HŖK ą z×4Ńōx:·:ߙŽ"L°ü«y.nķē±y­Mę<šw§õ=ŗq9½M5 }&źÅMĪēt«Ō&?ž+¢ƒZ}cU4M]² U‰Ic¼z}j¤ģiŹkAØīŽ·ĖŠv•ī x猓Ł$½øYY³‘ޱ"hx[Y’BkY <Źzž¤Wm̲ ‡kp}Ŗ9Ķ’č:+€|ąĆŠŽµ¼EM†0č{õW7°Łc ē¶Š +œ²± ؂ØW“ŸZhĀ„ļ”ķæ ¼Y’ ėĒž'kvŌl@*öĢ@ą€Tž?„yÅŅĶmāw_¶_2Śāś]@BżX$±\†yX–Ó¹ńV«{Øų’Ē6ŽŅŅǽŌ@Ž%3Ų9ōĮŻ_xpi>6Ō¼ØÉZ•Œ±ćs‚„ŗ©­;Ÿ˜āyec÷ĆöUԚėĆpGSęʂLy+ھ7xF×^šš3Gw1ŒA†>õźPZĻˈs[Ÿi÷×ŗ ½’C‘“ė]÷†=j[«m²ĀųĆÜW£Ļ „SÆsœų‰g-¦«?—Uä\ź7ŌWčÆü§Ā¶ß“/üśĻā>“p’hŠōĶÅ㨔¢¬2ś ]¾«Y˱üõćõXўO–œ˜ŗjžMJ’‘ü”ųžw“·•ĆFTŖŒWŃ\āUXŻžn Ķy®[åśÅ6t"5Ua·“Xs";³cœõĒf} čl@°µ²Ś:Ęė÷ŽG5wOÓģžšNöPI"żÖeēéJP*t‘āχŽńj[Ļr§j6r}¢ !^Yūķžóļˆõ­µ›Ė ō–K˜Ó!ĻĻ‘×=śW<£Šó1—C”ŃmŅ7vDĪIćøĻzīįɈ+ •ąĒ•ŽĒ-вŒ#A½ż:WÓßfĻ|nšŽ“o¼I”ų6ŹŽ/–Y_Ģ|ó†Ž+¦4ū™ŹŖG iū4|^š·ķ4żróHń'Ʊ$‹>³§œ¤h«’νVŗķć„Ļ~ ųOį¾›5¶ąż<4“g vŹpIĒ_„tĘ ņėbUģ~šĖšKĆ/cqįՁKŗ…eIü°YI\åqīHÆĢ_ųVĆį/ĘŻįæÅ­CZ /ļa3ŽĒ½ZVb†?ŗq’3Ē­_³dąq÷±ēŸ“Āß | ż§5|4ń3x£įĘ„¤Į¬éģóy¦Ų³1ļĘįģĆÆZź“}SX¹“†;;vy6šHź*jY6“ŠļĄÕ«*•UiŪUēŌļōYŪĀ’~%ųėW¼j¶WG¦Č`YųOæ½|Ūš›ÄŚ—‡~*x3ÅWrCw2ŽĒqrerw!#v¶*Ž•VyÕŖæi$ĻéO ZüBšéšÖٜÜ[‹˜2z]ßҿ6~2ųvīĒĄ“9m£7ĒJ‘­ćcå]{WMI3ĮįüsR)½›<#ö2żüoŖx’ʞ-Š Šō ū%·Ybnnž209Ś9Ƙ~£ĶsāŻ:ü[[ßŲź÷vģ‘œ…e‚ćšį­.zY.kųŹŠƒųTöćŻltˆ–&‘ŽęģMZ–ÖŚhžŽ[xŽ>ł„ecģ,:(/ōó#ŁÄ—V¬< ­ĶŹęyį/"[Ię ¬N6ūÖŅ›9%ēļŽzü"Ž6mbÉ¢½Ė_ŗÅs’?*ä“MU51ČŃ#c?/ZÅČŽœNę(™Ę ÆÅtžŠ®Æ®Xł{-£RĪĢ~P)ųŹŹ0g‡üvų™c§J4/ /Ł­–!Ć`É"ŽXóÜęø/ŁBŃu‰÷³jŗx?kҤņdž8Üsƒßk¦(üc‹³ ó*4÷{ś}錎›{)žm‹ ²Č?LW3ńĮörż—]±i,¤v?ha÷IģM)\š2ųZj)_cąÆ4±Ü٘µ$głvMóß5•āK]M[ģŅ<šĢ§ AÕĪ}„<Ŗ2W°Ū+ąØ%F•6ć¦7 õļx¶y|'€5øÄ>ŽQ-‚Nrś\ƒ©…śÆ~(¹rŲšŸ‰Ÿ±Žįżsǟuū«ß„Ā\ÜxzęŅ_`DłĖ9'?|飳i×Z'‰“;^“ĒucyÉ Bó¬ē°”åf¶=;HŅt/ĘD&ŚÖå[1J ž›N+‚Ņ4ń©<9p’”ēüõ¬TO¤§7Źz1šö•»Mä(·CęK‘äšō/€“WŒü!ć•»šåŜ’ §¹I/,B®É—….˜äõ…vŅ‚ŲóńZ½OŁ‹’ §Ō“-/ā…ķÄŗV©k:q½Óü޽æ!_&kæ²ĀŒ_ĘėN{y­OŚ ?ō­T–å¦|«ėśv³s”Åo$N£,ź8ĢƦkѝetÉģvLć=ĻZ§°k¬ė:“™O˜ĄœØźĆ5ź 4ū «DŌ.ōČēt‘œG*“Ž+ģ3©ū ՕÕÅÕĢ1DĖ!!W£ ńÅeÅ}srņGyĮ–%T•<čŹR8Ļټ%ÄJŲR8^õ”§ZZ‹q%Ä`øł²GéTC9a®¤Gk$v…Ÿk…'…®ÆFV‘og<°‹‰På²‘šĮńf£ Õó\,A“‘ŗYšÆ‰ĆQ0&W`'ԌsA2G+ā-vh/õ}&ģ.'Œąä)ĪIäÊāuķF;U”8ŽÄd:ĶŽŌr²o鶚‹Gw*œ.O̘#ó®³[涉`·±‰ ĢŽTzŠŃ­Ž“įÖµ§3Åæ ČČöćłÕæųī;;+ķ6;–{†q ¹ĖśV|ƒ9Ķ7Kŗ1‰d ˆÄ·ŅøŸˆwb]ćJ»Rń,Ė"HˆK.;žŸ•€c|%ūv£=äVr,‘`ó½±ė^ūØk–Z~˜±Ü?ŁÆƒŪ”ēZ4ré}osz’FpĒ ķĄ#ŌŌ—zœmngŠM”ē;±łPdhų_ā6„«^Ū馍³C„‘ˆ'P~æēµy’ŒüK§Iq:¦”ÄŹĒ>[rč=h4Š?=¾(ų.ö’^:«<Š[•ŽčAūÖŸ©Ķ£Ś¦™fé˜!Œ`pO­†¦ŸŖSTO“G Įć‘[𦧢h³Z5ŅÜ=ĘsĀŸ^Ō Q¹Ąųƒć‹ķµ5ƒĆŸŁśr…°ĀO÷«Ž¾xęćŚ^±iāy£ŸVL ņ—īw/½D¢¬'/éV:x¹»ŗE‹!Šą“šąd‘õo-¼“Ęå‚åozĢžft„ʝ§<·ÖŐ`‰ĄzW©JŒįšØ„dnź)¤sƒŚÜ@šĢ†"{žÕgQ…õKAó¦Hå(¼žtc°°šQ¼±‚hī'µMĄ@ąVĪ«¢ŚK ¾ž$ž-§HĒ,sō¬e¹2•¦|aG“¶Óaū“0,r3¹Ż)*ö ųŽĖLxoNÕ|›†Ć” Łć­ ō‘ņWķāŪÆk–:h¶³j6ČŃ[Ż #§šÉšĢCJŠ`[„·IÄcy”•¤d>k- W>5 $QĒ:#«żÕĮßģkUńFš÷6l^īóT2P•SŽyõ«L¢mCTÕ.­”æ7÷°Cʵ¾ü+c¹ZóJč5ŅÜ<*žż¾“Ąé¼;cę˜oķœ˜ēhĒ5ŠėRMqu›(óH i3)¾‡x‹ĄZŗjķy{¦°vŪÆš:Z6f/.ÕāĄqŠÖSD5ĖP_0Ēåąą€pz×£|ų•¬ü ń¬~-Ó<9įŸÉö9¬ŚÓT…„F?‡xQr  ̵-,ń»]Ž^jr[éśiø™äū=²mŽĢNÕƒ5Ē„ķʝrĖ+:Ą ޵qÜr‘ķšˆ­žĢ‘łkø§\sš»sā]cĻ·“ÓķēšvĪ҃Ē\ÖńŠ ō;_ėMŽÖīįc™[{°ØōĶqھ„„O4„"ly.杯ĶiqņĆc/ ”DĻ•ėŌū~U›ć)ō+:€nøtRy#׌™Éjo|.ń—¬6nšD*AŲĆ銶źņ×ĮćƎ·«NSlKA#‚ÜŃ(•ŲłŸÄ~'‚X.#(ĆćpÆ3³Ž nh4Ō%„‡8Čz–žļk"É + łrqß½xf»Ś_LŒÆ6īB©ąRJڧ‰­[[‰-Ś$ņüĮß ō«Z&µ¬ŁG=„ÅŪ­“ŖWfN{ŠmŲōŁŁ[A<’BĒlŽcÄźž„x·Z„ÓB‚8”łi“põ„as[c\]FKe{e/ č¤õ÷Æ7Ó§Ō&’ā-BWŒ,±·šÖ¹³Ō<o ˆ»œ;~ż†;WQÆųž+kāIßķw2“ł <•õĶJāök‡,‘&1“–¹{õÖ5kāńÜÜK¼ķŁ“[Ę6ó=KĮ¾]F{D½¼†Ö]Ą6ī+Õõ{H“xc“ņ£å.1S(”·ŲóNõžH-Ö”0߻ҮéÖź[ŒŒ±¦HśVCēff½„[E•#įpXóŸ­swīēön‚fēź*&MŻ²Ü¼ę+›Æ1”t€}«{FDÓõī5ŠĒ$’ś« sg£xŃ4½_O¶ŽĀꦎ<±Žlnā¾s¾Ņš[ꉡ8pCĪk¢$ÜõÆ)Š„‰“€~µę9ÓŽ]^5TÓą„ć!$Č÷9ę·LEH|i5²J$Wl“ŒqXߣ—zڟ$¼C,>ƒŪsLZÓüE”¦A 0²Ügēv“ķķZz5ÅÕÅĢ–wń•U”ØśW9¼vŖčÖps$sõ ž1ļ^Q©źJńH”~żŖädMwn±¹@Z`p>µA–Ņ옯–HåĪXø);6š-ޤßb –łˆĒ|×­[Īój Ÿ™»V\ŚŻƒE“æöcĀčÆ09ąV•¦jjÉfķŽw>õŖ=aCh0=­³C;+»<ß½ĆÖöZę•q1‚4»s»ĢĘŃėļM’®y.³§ż¦ņąĄĶ4;‚åFCbŗm3Mŗš“­#ó*cµg4UŽāŚĪ+ C<š"I÷‰'µW:‹['œ¬™ĪĒ­fTV§!Øj6·ŗ‹YĪØ°±øŪ“[:7‡42H§ [£ śØELJ­’Tø‚ĪI¢i nŪž•Ę]čWš›ØĻīżZ…äS-Äćmu+»kØn/ēžfČd ^„a¬>»m$NęŁy$ā„ł‰FĒģ炼A¢xcĘZ¶°Z;8Æaū<ŃF «ÉNJŃų‹©x_RÓ ń…ķ"Ó%ß'ŪD7ō„},¬|źØŁņ~¬­guq}klvŗ€Īƒ—ō©¢KŖł¢źāŚxČŁøżįN՗24»źuŗĘ§<­§Et AžXrGŅ·`Õē±Ń…Õ‰™ÜFŪB™‡=)sXųuńÄ>ńV•Ŗiڼ¶©,†;ˆ’<łŠGBO¦}ā sQń 7Ž"ø™n0l‘Œņp*\!ŠÅń„v¾Ó5ĖĖ»i4ŁÜł1łI8å~µāž צŌ_S‚ux­­°UVéÓóØgM6t¾/‡LŸA'sBŲĘPą­s>ń&®Öshņ»Es·¹Ū’éč}HÅź‹W»>—šĒ‰ąŌ•ˆwB’Ł#Š÷}SŗĀ­Ŗ+¾Nź}«uäqāam Ÿ¶·u«Į¦jĻ#hŅ.ąś zWĢæ’gMK6ų|"ŅpMĶ‘‹$1üźdŽ-Ķé=ŪÜA8¹]‡xWČŻŸ’]ygön7ŹØĢŲŽųΧ v4cŌ~xęėĮ¾"“½K;{ĖwU£'‡Ļ#ŚæT<9©Å«ŚĒqjĄ¦ĄĒžŸJÕ­ °\ŚpBŽ0+²š‡„¼'ć}rx®ßKŗ“¹†H“ķIø)#Øō5ÉQ3hČüÄų±ą¤šG¼[į›ŠēJ“»0ŪL±…FŃ~˜Æ'³Ō¦Ńoķ5[Ėøµo0…źŹ#ō®ZSm&ĪŚzŸXųņń?‡ō閑ĻoKŸy TöWėwücöœ±ųGńĖÅ?²ö»5ÅÆ…|KžĪK©0¦ą)łS·<ž WU)4„מŻ@žµćŃ`µžī ¤V»°~„Č×¼ü?דTµ:LĪ Ķø sՁ®VĢēēĻŚćįd"šeļˆ¬ģ–źśŃ.wņ&…c択 ænߣćžÆÅ­vŹk]VóCÖGö¾3/īĀrY|§4Sž¦7?85=•3)Œ£§µ`(Ž ‘ĒZģƒ9ęŃ<²Ē#¶ĢķĪ9M­ĆJŁ}G@kS™’²žķA¼œ:®’Æš¤%p£ØśÖn:’“½É„°.rÉĄėŽjķ° ”ˆf-ƒĻAUŖ&“*.’öŹxc6ŅÅå3c–Ī{Wõ’Ų~Ł÷’ų[ŰßÄ=^FŌ¬.%¾š„Ó˹ īhFNARIĄć ߌ5ŗ:Oė Ūyš40åYOc\&¹ Glś{Y/cÕēÕZv~x||šÆö7‰£ń5”ż©¤vڜ,8ŽįIQžń#?Qé_˜¶Įåń§†¾Ēyih÷vł2>7™ā`J:`}Åsʼn³ł)ų…į]KĄž=ń/‚uøežśĪi<( éøą/Šbø‹ČĬ1“ģ}+Ó§±ŒŹ°Ģ$Œ„8 ūұø2+¾PČĘ*ьš ’]“ŽIĒćPĶ.Āų"Ŗ1fec,Š”¤a³9ĪzUųŠ ·+uĻaZ€łz˜•”÷«P,ŒƒĢ œöķA¤X·ÖÆ©XͦĄŽTĒ•v?q»ōÆźĆž‰ūf]ų«ĀwĀoj6‡‰<0‹¤źˆĪVk«)īgĮį¶sS=¬mś›šn½e«^źÖśš}“ÄŚ Kizķ¹·l‘x}«Ö¤{Y­ćØu ¹Æ:¢69Ÿģ­Åśv©”ėÖŠŽųGX·—LÕm'L«R¹`xĒ8ś_ēo’3żŽuŲæö©ńׁ…¤ēĮ—7sj:]Ā‚ŃżŠS˜ƒŠÆ*}ÖøgR1’O®ŸÆł‚?9/ XnÄĒŹą«F~呈ė–2X‹oķ¼Ą<·{®Ołõ©­uŲŚ>‘“!џR‹ٰQłą‘T5ŸˆfĆĆCE}5%U,ńĖ½Ÿņ+ɍļfuŸ1I}.¹©Ētd1N“ezø5÷ļĮ槈“]BŅy&mNĖĖē;‡ā+ŻĆI£ĪÆŖ>‚³āFe={VŒ¾R`Hõē­z}.¢%¶Ņ-µI•˜bBĄŒw®µ“ų浑„uĘŽ•¼ec#›hžČ#˜Č|“ĘJ“\³–ĻO·Ō”“ €[½9K±¬†4«ēӅĮ†FćvL{W!vŅÅ!yātģp3j™t‘™aP ©<C^×’šÓŽŽśč ¤1†žĻj’\¬qŚä—[ę»”“eū½Jā¹›rv·Ə ņ’*ā‰sģI­·ö³Ū½ņ‰ŒK…ČåĪj•„¼ĻęGڹė]4ĢȬ5’sör IŪž½a®Ņ;%’h•%*6ćÖ“œŽžšŻ©µ‘•żd[hSA|׌˜i­žB’3„s=ŽˆO„ītM?Pš ÉayĶ»„Mć(ķu ūI4å24HA+ž}ė$ģm"ųe¬ŻŪx/TŽŲŪŪJ+‰[£œ}?„S~ ųcQšn“©[Cäœ\DźAŽOpzž¬d9XņEĶ`Ū•=…f[iGQŲš8óPø“[ĘW0=Āž#‡M·Ōt}Eü˰€„AÉļśÖüZg‡t) o¹ Ėy… a·Ć5g›źz Ms$öp„Ģ,ÜsĻzåÆbs<~YŲ3ó1žÕRčuś%“7“D³«3†.1‘]’‰|użŪiņGm,$1B2Ģ3ĪT{ĶdxLś÷†õ°Lβ2ᕁ…{„õX…Ä³‚¬WhŖ¦„¼‹Ö^2mµ­ā6÷JĄ×7u ŚĒ„Üj¦˜(Ŗæ~ ¤­¹ą0iZž­ØŻŻ[ŪLó0'!#šÆIÓį֣ѭmnģĄ½|ÆŹO­ś¾Šō›=ES^ŒFӓ ńĮĻ##=®sS𔺭1CéNٵēqżŖ‰Få'c»»¶±]'‰“ķƂ˜ĒjålXĶ5ÉņYA8Į¬‡Ģq:ņź% xó‘ßÖ½—Ć:4Zk,ø2łdü¢Ŗ+©%‹Ū;Pna Ył•»Šöµž¢[%Ż–čcä|Ų ;f”†‘Åė:ž‘&Æ=¼MŻŹ „S’Gł"øķĮ‘j6ز<Ā‘Ҥµē;g­Ąŗ\žd,Əā\%žØŅĪ||ņÜŠPft–¶wSŚ5ģŠ#Į~÷¬‰`˜Hn- =½ i“w‰ld·ķdąš³į˜ŸJŗ{ĖÕbė’”é:Uķ½õ­ĆŽž>o›½gŻkvažkˆö©Śpph5ƒīP‘nfp$Ė·„_¶¼Óķę{;‚…œpV‚ŹšŸ†-ļnEƅdĄ`‡§Öŗ Å£ĄŠ„šFÓÄI9­uŗ¦šóŻZK—÷žŽÕŹŁßéz6·;Apu&zÓ4„±j³}„صŌhräīĄć5Ļjlī…<Ņ#Ā{ÖŒZg#$É“aHĮÅu^šķÓ_CŖM {„cł‹æóJ7:éÄö›ķ-šŅ¶U“ޣڰt«+› ĒófĄcņd}ŚLé1Æ4ų.õk›ūń»,Nš9<ÕMF2…\Ÿ524„ŃCVāÕƒĒ‘ŒÆ„s„'Pąn~„ŌŲ„©ÄÖš«„;Éž±åb&@x†qM+čWŠ£xźńUœ:µ|ĮtØļf…åĘEl•’°Ū1+^d/c$śWÆx¢µæYE$®øĖulSé×óż¦ÕZīŻcŲų@ĄZĘŽŅ ó Źęüzi"›‹Č$ŠŃŖØ\“ŌÕć«¢Ļk©­āFĄŽ[pā³s6ŠŠ‹ÄזŃjzsˆÖSµXÆCĒ_ƽ68¬ŸEiŃć¼»d*Š:zQŸqžK”ĖŌ7/(ITnŪ\W‰¤+°ŗ |õ=kAÆ#Ų¾ ų¦Õ @ķþņ:=æzīÆg wOl‹t'+ƒĶ)_”¹ó׉āµK»g!Gš× <^tÓ!d‡<éX;0ŽŻf“(yėSŻéwpĻ ĢĮąaž:ē4€œĒøboĻåS\[]ĒUp$MŠŲɞīKyE± ³–Ƕt»ŪŖGf“(/qć­g&k‡Ųe¹ŗFÓŹ#×5mcØjw o4DĢ„†Õē<ńšĢź„téó\^“včå£?1Ī6ć®}«Ļż ōkkisč°_¹ !ę8˜u#ü«¼’„ŸLšńŅŹķ.”Øu ī+ •l}VOĮxģuEK MÉł/Ļ·Ģ©ā[EGŸAĄ5ŹėZ“÷P“0Ł ŒŖ×•ˆÅōGö׃~Sʜs,É)b:Gu;ģåų/Ä­į­péZŒ7Riöś©VWŽQ•`F:zóXŠ2H\!g%@ķ^<źÜž¤§AlŽ‹I³‡R¶/"ēoҶžŹö*!™k#‡9éR„Š©¦ŚDh‘ŒŹ·<ąŌū9~Ė;DEbpzUœ©n{÷Āx[āŻ‡‰U×$Š|ØŁ,åę›8 ē°’ł§P‡Tų%ćŻOĄ>#ŌcÕ,„›6÷*˜Gq“ßšhį«ŹŻ‘ŌxŸKŃ> ųZūFf@ĒŚŹT `õōü«öRÖõæ‚>9×<9ÆMq£ų[Y‰ –I²aI†@¹ć5r‘,%ÕĻHńõæˆ|AŖź×ÖŗŽCJqڼžūHŽĻQžM>Żb‰Ÿsķćžęøē+IBźO”ŁiļAF9=źäSm  ¤dÖPv= D³hŽfäĪڼ«āw‹n4‹Ø|7c q^¾ Œr)ģOÆ»(3ÉĒ×å‹hż'ż…ĀŚēĀmF÷t‘ėöś‘µū4¼¹?2ŸĪ¾Ā¼Š#]A’ā!“ą×©Lų V.N£G‰x§ĆGKŗ½Ń-ŖrCGĘ+éĻŁCĘ·^8×5ož4Ņ­|_mā{ŅąY‚“q¢Ę’+£dciaއō§4xWMÖ˧Q;8«ßÓSł‰ń灵OŁóö‘ųŁū;ųŽį.%šĪ½$6L€€m__fW°xY* ¬‘Ī=kĶ«;¤pī>8Œ=:ńŚQOļW=:=JŪŹWFĄgõ5JŌ¬ˆŅX¾•Š–§ŪįŽƒÆ0-&@T«}ą}+7Ck«źČ˜¦V܍œj„&Ći„šk„&G$–=É­O ižńæĆ/iĪ‹oćĶT2(č÷VŠ*÷Ę3łŅå¶ |ēŖošļˆŅ ģ©.”äg5ė:eĢmÄ±5„‘¼Q§,;£O'¦)-'ū;āefŽ+!›jĶ&ÖSŌg­O£[ ó¼Ŗ9|Ö°ŲŹ{›“Ėj¬ŠĒ½Ka4‹zĻgn·r¼3F#+Ł…h÷<¼\n~bx7\ŗš—ŒõYÉä]Zjw ŒĒ^%&½Æ\‹QŌ|}Žļ sźq žE(8ąūw…oĒēŁ¬’šī~æ~ĄæžÉ}ØxKYI Õ°ø’–Rž’OÖæQ¼M¢C­ió[ń!#ƒ^­ ’Ę®J·>;Ō|+cisu`ŖLńLA/œż*¼Œš^Š‘°\€Y+¬Ś–-ÜĶų‰„źążbžĀŠj-¤¬#vHŪp'Ԛś£ö†ųćmāų æ‹utš°šEźi¶žm>F;e™/cŚ-ß1Ü»œŽĶ¼r5œž§į>>B8Ŗ9f½^*“·–©æ•׎/ޱ}Ž›k6TE GN•ķŚb ņĪ=NkŹŖībe’÷5= ZA&Øß «8f¶)ū©.N>QßČ( Ģą/#€+ź(­'HåÉ*+ØÓļ£,ŒEéŠ7”;év¬0ŖÅøҼ#āuƟpfFX„æ$É#(5…UcĻÆĒčĘ(ĘĢÄz×g±¬NB™ć=«”ńė«GŠ|@ŚŸf{‡`ΉøʽHÆŌÆŁ‡H‚ßĀvŽ%µ{¦µ»¶A'˜äØ.ēŽ»iģxuźŪCÜ~æ©0c ”Éy8&'fČŽæCŸĀ“’Šó°¼hĶĘOÆź~qx®įuļXj’isw+nĀ>>\{b½æDøL·XrB€2ZįŖ~… ]&‡üj¹ƒVż•Ži÷:&,—mÕ¬!1²nǘĒæłõ­)V26•ĻčēöEų­kā?ųcNŌ^h&ŠŻ!óŽäÕ¾™Æžą„öĶšóāõŽ‘”\>‘ x£Įsɦݐ|¦½š ć;p߈®ū.SóŠÓ• [·ŚLļf¾Q“IüÕŸĢś‚Ņļż1#ŹĘqžE2ŚT“Ī>`#>µĄŻyNŽŹBØ ‘»¦*ėHF.žÕn•#c/Ē^µń‡„RĒQe½“™®-œœ~aś~§Ö¾.‘·ŖĘń؆ܾӻŒv¬{JvZžóąM"ēÅRNm^$ɃЁœW=ńėĒĶšūĆ6ś„iiqsoęĖ26]¹ o„Iółž/ģŸžöz¾£Øj··rÜĒ.36vć=lē5ļž¾½š§öe֐Ę{ČŁYKœäd{f·R[•āhŗ•åUģ~“|0Ōü1ćM"=bx"X¤$·F”|s‘õĶuš×ōū½>īÖĪŌ\Yygr0Ļō­¹Q¦ gt|Yām#[𶨰Ćiäi¤ę9Ź}1ڽkᯀ4ˆžń׈u¶µń$,ĘÜīcœīz ÖR¤}Ž WĻ¶¾ń†5ŠüRŠ]ŽBĒÉ`Ÿ»–0x#·įļ^Ł„ųĀŪN– #Q—ä™~@’Ž<QDzę74üCųat5Õ ¾ø„©< »iźƒ_(~Ņ?•d·¾2· ×1B‹—Š äĘH”””“ĮEź|ŁšėÄŗt¾zŪ)‚e%^9F}ó]V£g ¦¬u8-öŪČąpŲÅqKMĢźa¬“=J»µŽĀdµ’ŠUĆ)Ö¾Xš,—žńmļ‡ä³K]7‘āc&K!9ßąk¢„ś^"‹ÜżūżŒ’i}WĘoƒ>5ø±»¶ŠĢÜh×r¶ å™'Ų~¢¾„æųTuūøfšŹ+\ŹĮ „¼āO@;ēҽ(ė”ĒN<²¹ų“ū{h:ĆÆŚ—Nšž ßųcQžĀOķXBāŻ§-ø4|Ÿ›~•ĢxNžÓ 7WXćAīkĮs­č‘Īx×ķ·ŗ&«e”h·ZÖ„w¶ k;x÷Éu;©/rĢĄcŽæ3iāķ_āZ^xļįF±š“Ę>—o§j–:ŽöInT Ē2öp@?0$W£ƒ…ļn‡ņēŅ–pX\”žėF’”󝯦Ü5“7^h“–DFaÕW#§æś)”ųŖĒ]ƒI³šnŸ©ÜŗAĢ€Ŗ®åŗb¾Š„zŸĀł„yæü—‡l,•dKČ£bz3{VżŻ“2:3 ߞ ®č#å«DˆŪłqŲē„cßi’y»v“h¬įœzšÖ>‚ęŅQ銄©,DbŚ7…Ōl|¼}j’2gAįX–öfIfvn6}«Š¤ńՍ“„[Ļq…`2޽’•>U±×i_ańNø%UӎœMČį¦ÓŅŗ]gO‚Ņ9 /µQs…ēwµh»Ź60į$ m >Zžs“žõ‹©IŖ}©ĆYK/ĶŌsiq&¬ó4¢E˜“ć„½Ņ•f”³t|pO½y…ē„5mR[}VÖ¦óĄ?ė„uZN™}eŸp~#š“ŚmģBŹeøA¶ģq°Ž8>’ćSm ‹±oĘ~ š¶£-¼:M½‰‹ 9Ż“źkÓü1šÓI𧂦mLi»§ I^h¹^Ч¤źZމ}{Dt•F>£šżkĻ®5Zźvń^ė}«É»²īĖҦTŪ&ķ–Æ§ Yvn Ļsłń^Ļ>—¢Żišv³§YnØ3å{Ö.Å)]āķnRKu²wu3žŒ=«ŠŃ3©ZAńŹ—mœy±• ī3֛ŸBĻ^š–‹ö}>öź{ėHš0 FĶ·ū¢¶Y“Ė™įćiøöśTÉś­­ŻŒ‰pß»*JŗŒ|Žõó¶¬ķc©É/˜RZĪfq2Ɲn!tQ"ÉŌV6™¦÷o$r8(Ł8Ę* Q:£b.#IgTrIČnߍqž%Чū+]FŒaQžiŲlrž–śįäf£U8ĮéÖ¾¹ųq”Ū,÷P”Ü*“’x#•ā¬Gć »­;Yæ{+‡KC.bMæu:`ś×%gay{<÷fī&…’‡Š`X™%Ó/-–)!‰K}ÖxŸJŸ}mŠw;8n=ł«°Vš†®źö×~|±[£XÕˆŻZź>,Ž]D¶óĄ”wƒŒõüźX5W3ʱ€øl¦»2[Øvļ2>yśVnźN×62@š›ŒŒlīsÖ¶tO Ū³ŚķP “ņ¼Ņf±Š%Õ4-ü‰Ä×2¾FĪõ›®jö6vlIiF>lž(”ønāxõ.Kg”ÉåĖņĖŽ0kØÖnmtøņö9Vč(ņ§-ųV±‰•ŗvś’Ś i䘦ƌ¶{žå~!æ‡Vŗ€Į=ÖĄć$t5„„{^„Ö·6vīDGv=Ś5·®éö3ZĒi„øŗ—8yųć5)“Ć‚ęC$Œ7²#äÆćT“Īś¤ gSŪJŒĢūČqĘ*Q¬†®£Ŗ_Ļo!e”®z€xĒŚ\„Ä ’²¢7Ģ„zÖ2v)FÄ”ŽgµˆmĻ8Ŗ–sM{q ½øHxł‹Vrds[cRÖĢYŻ‹‰L™ž Ž?JÓ)nĖ3Čę$Į#ŒŌ£9HåÜ4“īƒ ćŽ Y“²¹Žõ.cm‡'wOÖ¶VŲ.t:Żö„0(œÜd‘ŪŚøM3QדۄÓ\\såąxõ4Ķc±Ühļ=”ᮂGnó.{W¤É}k4„›)‰ŠtķYJ] utŸ=«HĶĄSž‚«jo4ģaTöm`FxõcĶģ§[›ÉVEduļé]…¦“l‘¤šŗ(nüŖ\¬5”&ƒŖĻ®łŅ<-j‰ó[ėCR‡vVO0ēŠwčl™ę^#±µ“iBDž ņ)śBB‰é6:ēh\śR–Ś“č~„ĒØk¶0JŚ’!†Ė«Rźēҵ^ö0!Ž8]8äēßō éŒ‹°Ļt\,[bĪŠŽ¦½wąÅļžĶ¾|ųu{eāMRK™ŁāK|bHŹŽĢ¹ėBµÓfš}ōŻż~7xKö”ų%šļ旂µuųŠĀ‚TÜÜmĆ#{ä0>źÕźŗÅ‹˜‰a‰SŸØ® D,Ś,łßā?„t}oFŌ4żV×ϱ¹C†Ē1H9R?ü¾ń†›²źz½¤å g²» ÷:ĒÓ +…hÄö?œ?ų(ĻģżsįĖ‹æhś{_M€‰ OšHżą:š;}kńīh#”™äĮän­wP•ō0‘U"ņö0ĆóƒÅEēyS© ͓Ȯøv0a+¤“tŚĒ°ķU| ~ lą“Ž“B"šPŹcP£ƒÅON0ķ³ŠD„’7G ĶZVU†,®0ǚ ¦ŲŪbķr÷īќäb½÷ökųįā_٣㿂ž/č×°G¤›Č¬µČ„„ŗĶdß)Ī?»œę¢ge3ż¾üjŃ~ ų[ĀŽ5‡R³Ōgµ‚žxH+«i²€b7rŸtž£ŠūĻOæ·]FēEMŲX¾Ói!ą\EŒå ~bøźG”Ó¢Ó£³‘g™T}ž~tŚāæൟ±MÆķKū8ÜüWšÖžāŸ‚-åšcfKė„™žÕÜņņĀ}M}yū?źēC»¶²×.ķć†å£‚åĄ’ē?…zTō²0Øļ”÷ ż‚é7ŅZ“āįŽŽ‘YpČļrmć'­uĒs͚7mļM“„T8r0*õˆPšÜ€T’¼žµ±Ī6śł<ˆŃaŠ})¶Aā²śtń»F }Ö8ĪxLÖgÆiZ•žœ–·•ņģĆ•䌄¤–Ö±ļ!ęf ƒÓėZØŲ›·”…cŖ®›!™‘fł¾é5ō6›ńFŌ,t=4Ō†]漙\’O¾jT öeßE¦^i¶o§(ˆ"\0ēŽ¼Ę;&!$0+‘‘ĄļN1°8–Ki¾ŲžY9Į½)ŗm­ĻaJn##©­ Œ‡Ā3ż¶ź)>QólĘ9Ķn^j’fę;šć4å.ƒ·c[ĆʋioØi÷ÖŃ=ģøxd#GZč’²WTÓ.Į‘!E]Ą“×ŲW<ßC¦+C–Ó|3e9hnBĢŹą°Ē„v†]+H–In å@Œķ)ž5ÜŁčW~žÉ‚’KŒ«Ū¾åpO#§ė^gć’_x¾MP»žTX¢ŚŹĆ ń€Ņ“¦‰nǜj’„°F»†1Ļ­lųCĆó_Ź“,ŽRgsżŽk¦ĶČõ=+ƖķŖjwēĖ@ŠŲĮb=}¹¬żfŚ FY‹¶čŌ/Ž„¢”ŃPflf&›ģQ³<¤|ĄƒŽøßXµ‹5ͲåÓ©šĢ²o źSBĀé£.ń°m¤zvÆDøń%Ģ·Ó]¢ŖŁ(ÓNĄyƍüI©x£Ä–W Čm¢~ķ0sŒśā°nµ}JŚ3 åÄĒ qŅ®čŁDŚšå“ęhļ$vø9ēŪč+×īõĖ)¬ę³†ŃĢaO­L¼‡nē?ajlŅ?$‰Y‡ĪŻ uחэ"9$·Iī#G#ń©)⮄=åū\2˜¶ó‘‚¦ŗ¤Õæ“mb†Q—Œw((ē“R&ü&Ōø·WØé^Ńs„Ųė6K5žš–CŹšs–õ¬ą'+}¾wlóO–Ģ#“]X¶3i‡TKyDŹū2ļc®[°)\ĆńzŸhŚņĄnŚĻ“d®OLVˆ¼Sw'‚tŲōĶ–S0Ū?ĖóJÉÄø»wĀĶ=µķė¼&DbB8ŪĘM{ö³įė=2S’\ž5ߝĆŌR4R¹ēv¾Óī“›½"āŽHa23,˜ƒsŌõ®×įå¤Z¬pO{)ecĘ?ZC±GYŅÆt«›«xÕžÄFąćī¶*އ-¶°ŠĆ9[Uł”ø†8 ĪK±hŪŽŪBÅŌšHv¬µŌńf²ÉĘ'•:¦”q„ķ P"Ūµp~ķsQZMŖ8C,¢Fa÷IÓ.-ž·§Ė=£‹ ęWdł{WāK*;ä}äĻ"Ź üøĒ·ZF§yį•»ńµ2ŲŠóŻ9„p<Ģ.K öš™”ÄŅD9§_zÄ ­K“R»h‚4§’½{÷ƒ÷éA¦\x'§F5„3¢2źwŗŻ“ŗ}œ×[„qDpG ńm_ĘÖw&=.Ł?y.eØ=³ųUJ'A‚×d¢Vs‚1Ö¶-¦‰`ŸpiĮ琵•„ö)A޳"ZŪF÷¾Ā1ŪŚ™ā=¼"­5ų#Jóī*” ł:{Ū{äCŒ®8—%Ÿ>eŗą/A޵¢±,oKĻzöxN{ĖFÖ'>L v)5¤`1Ÿ³£ä¬{‡Ēƅ_t’†ž3šn­>”įæ!˜Å!ŽcłžŻqZńżF&“N2łć>•Ć93īpŌ‘¤¶R ;cłVµĶ„“énø\1ĻS\׳Ōö)Ņ3Öi4ŗ»ˆČö‹†lõžµõ–µš¦Ę÷Į āxu6āßū=oQĆņIt{ēŠ“Ń§M#ākĶbėĀÆo.±o>œŗ” «°;eŚOCŒv­k‹«‘¦]µ“nŒ®FwJØŹÅŹž¶=7ö>ųłšÓ‰­hß,uhb‚CqHĖa’‰łÆVńŽ­ą/Žæ >;jqŁX/Šm®Åž‚ļ„Ÿj“/ņĄžõjš8ŽŻ³ē‡ółMŚķÄ3˜”øé“ćšõ’޾Ó?įšf·¢ŗ6µ,”ī¾ąŃ®9éMt(µ£#Ń­›NŽį­Ż'AœcÆV’Šü’UóÜł×Äś[j6óépBœõƗ< ¬ėŽż©¼ćÆĶwŚ£ÜĢŖēl€6•xŻEIY“©F„)RžĶ[ļ?(æmŻFóĘ_µĒž0Lķ&”Æ8¹¹ŚøUąŒÕ ßy¶°6HTs^ey]ÜśŒ“ =(P§šÅ$½²= Ō—#q`TäZ1ė[’Cõ#ŒW'6¶>Ū - Ėz“BHrĄg'=Ŗ 3SE8Ź}ī2jĻEHŽø×­Rę+9]RVåWŌ}ß±hģ':Μ±Ūź ø.€n#ПJī3Ė|ckĆż¦B­6āå˜s»Ūó¤šķʰH÷nĄõļYJ] ƒŌī‘|؃łAč Kå‚H0£Ö³6±R}Qō™ĢvņČ$N:©ī+ °Kn`Åų,C§Ņµ„ŗ Pīe_IجŠ|¤YUĻZé|7¬ ]FŹYb™Z)¾Žćøü³VqUsį_‹>¶šŸ¼_¤«‰“}RGŌ,01“?ŽL÷99Åń½äZE§€µÖŠāāŌ—†ćg1§eĻćÓŚ»pń?ĪÜ£Šqč}£šsÄWż¼¶s=¬ĖµŒ‡åńÆßž."šMŽ„ŗ×Wq å[sFć×C^„”āęó‚£—×[–<š®}2AāÆ!ģō›©0“ͳńĘzzV_‡žüJń³²xCĮ—^$…”61ˆ±œ}ćÅurā¬6Œ±Ŗ(Ā;¶ō_×ęj~؟±Ē? žĪŚM§‡­-uOSÕmģµ§#»é1ÉĄwaü9 t—œ‘_9ĮoMŸĄŁ?ö.ż‰“}U5+ńuž§*æj‘…ys²I<ĢĻAĻ8Ī6Üž|—ąx·Š2¼ ™ŖU%&ŚZņ®m5½Ÿ/TĮ{ o*C¹•Gqķ]­Ļ‘i5Äī±ĒÉbpxÕCżĮK–)¾ ń>”c©éPIkvn/HŽĶv· Šų÷Æ¢ļ¾xūšv‘ØxÆC:¾ˆ4K$€¶q’0:c=+%~§ŌŠŖ“G©ų{Y“Cr¶o:d“œ{×-’ S¢_Čme=@F> Õė¹ŻĢŽ’ŪđMÓŁ¤šFTńœW™ż’ÓÄ“ZY’mZ ··ŗEn#S÷‘ż+ž¬ŗUø‚žĆlī;¹C^±`!¹‚!*žė"¹’<|LO6ńǃ$Ō5Øü1Ņž?}įn®¢O ėŚEÄZ„‰‘Ugņl‘Ęæ›OŚ×öMńOģƒūAüFżž’·ķ¼c”ZĻęŸwėi:īE‘…€ąż+Š&£sóJœUMńö+ēt½­śYO–ÖļŌż„’‚I'‹¹ś’:ā­&Տ×ųc‡#ƒ«:ö÷¤’ÆŠī —ķ1¬H¬NbÆĖo&ž„•¼Ē‘żźĀ õ?DަžøBY“ø®¶wFhĀr¼dzW]ŽzŃ,Čéōr)ūĆ8ā¾tŌ”Šļ¼I.Ŗé­‹>ŅXõLV3G™ˆ¹”ą-BĖįü$°åoōƜȒ? GƒÜdf¾ ų“ākoė÷–µ{y{`³¹ƒ OW+>K3OVių~ćį~µkm„Ć%õ”ĻŸõ˵[·½Tų[PšŚYß«Ay„ä’>@Ŗ(ųŠ•õåg¶|.ųø¾»k·‡ķZlĒlńž†ī½‡?…~šų_TÓ¼Kai{„_ZŻ[O‘Z'ȎŸZ퇙­*§+āOizˆŗÓīĻf$)—®t«ļėlÆ,9'iéøfŖo±ōŁEuĻČś˜Ÿc·µšĆ jkŌ’w¼šÜ•;JuĄ8ėĖ~µŸąvęŚÖŽHÆs!Ü=G½g \śØĒ±÷oƍqüI„z!øæwIžw/®;Ö’Š~Y떐]čÖPŚėqčW!ō5¤©¦“9ŖTqgćķšvėį}Ź|lš•‚é$·kˆtø”ŖĮ.x`Üę³>kzGˆģ„sIŃOhÜ7Ÿé^ujF‘©wbʐŅi÷ĘĢ;$… s‘ŸzŌń_„4Żj_ķ·Š L ĶT*=ė:Z2'BźĒ”ü)ń‰ąWŽāņį­^Ō‰Ąūž£čkõ£Į_šRÆŽ ųu§ĮąļÅæ–ø·+¼‡ÄžĄć§5čBŗGl¹ÉY’’µļ|~ń»ćߎé—~9Ÿ|±Ź‘ķŽ0«…^€s_:x@Ž^ KŃ5­Ź>×ü¤ŽįÅsTÆwsjxND’;-^ßĘo0ü=Ō®ōßĒ,ré0•Ż ā°1Ÿ›ƒóĮą×ęWķ3ńĆö”ų¹ńRłiż~=gĘ4 ¤łq鱌£ęŽY*äƒĮéƒÅ{łEi%(tvü?įĻäß„…ö|EŃĶ}źäq“M/Zń§‚ōżZņĻMÓ%Ōb/4äOvöÆŚ94ļĮ¦øŅ4Ż6cˆŖ›Güzž5ōTŸcų?0©5- š<’Łķ1–¦zļ£.ķŚį™b`>¢ŗć+žęŽęe½Ģ>-øŒŒśV°sxź<(Ŗ±Ė&uv¾ń$ŗtš¤6 Ų!+++dƒ×§Ņ¹i4ė}v;—†ņ3å 2g“ƒ‚Z =­¤ŒÄHeć„?Pš•Ī©ŖB x c¦ģžHö§Ė©Ÿ!­,KįŻE»ŗˆ^7Ź„śžÄĆ`Óµ²Z+9g裒I’†dѬu{»‹#a|‹ ¤Œ‰'RGNk–m{yŚ1øņ®9•ŒœOEžĘ“ģŻĄ”ēźĖžõ&Ö{LĪžT˜ź{Qc)£¶æe¹ķŠqÅuJ÷ėo x_«ރ"½śĘ,¬pĄÖ-Ū@‹ vO(Ž éHĪQźVMvgQgh$…ˆ Įõč:: bŻå‘će…‚°Ļ̓A™«„hÖ–³<±$ŽP[„uW÷–’g³³@\¬Ż’?żTģCLņŪ«‹«kéü ž~ļµfĖsmq<‘Ėš„uŠD¾ĢéīõF‹KŁ@…ĮĄ${W–jZķÖLĮśzŠ\bš%Ó”•ˆóXōĶGt²Ā‹p +G8P6ģfĒē_Åq“‚B qچ™…¤Šß7vT9É gŽj˜®Õ•ĮŠ5Ź€3ŠĻÖb»ÕąŽŚYJĀH*?fŪiė¢ÜAw’$£å89ō®[āζś­–•mcv<վܹ/ĻŻėÅqžńm߃^ęgµŽ w%GØÆ„ü?|śī…żĶ³ÖBųš;Qb&tž—ĆZ•µŻ¾ßķ}`Hź¾\ƒdL¼Ź;ŽEA­›Xe.dŽLŠfyµŽ”Inć~wdqŠóĻėÓiŪ„’,ׯœ,‡ łŠKFm·ŒŃ­ DÅµĖ 15ė>jvóNó%žäĪ9S@Œ«łQÆfµkwFĘį¹1X÷§Ć_iÓĶķ¼ŪLJDųÉ zTɖIµŗÓt»\Ē ™vŒc¼ĒWŌīu=Z8ķ'x7˦Šw泿p:mVŚtFVńK!B:ƒ\Äŗ”'ök"y|¹'8ē¬Dq8¹Õ4Ų ø‘™ķ„L™²³é^obŚģ73kšuķ÷Ū”•%!8¦Óxęöd„ÜH·W›æ|ĘŻņ wśEö¬ˆĶ¼rZĶā@ßoQž{Pe&iź^*Ó“ !ūDOÕĻ$ńž5†’hö÷WŠÅ˜ ™š8}~Ś Nį\O¹ĒĢ2qŸjóėŻ)b%e»›żź ×™ŹźvW0αFVźÅæĻåXZ¶ø²Ąm“LC3ąvż(ÕųWĶŚÖ”s§ZĆv÷ńaJ”<Ū5ÖźŚĶ÷ˆmī4i Ą‘YÜ@ćšÉžĄšž™ąūŃ©iÖvwėr)!Ā—SŲÆ|qĻ©®5¼ ¶};ĚdéĶ«‰hdī é’ź©R2r=kÄ~xO:ÄŃÉ ėŒ»nÜG§øÆž¼Kū>®œ4ĶSJ×/ā†ųX ®AOĖ­U‰ņ7­“żm¤š£zbP“”?ēŲZų–īŹŽx]ęH”l Lƒ„Ź…cĻ®ü=$ŗÕŻż™ÅŒį$q¼‚’@+Ģ~#ŪOgqa;حҬXć€=zS5‹čaMaq«XĆŖ›yķ baV~aĘ ō?‡Ž±Ó5k{NGS·9Ļ9ō ŗńā)5ėĖkEѓ¶$mi1“éėŅŗ/ųwYŠ®uKrĢŽW—öi>ē ó·ń¬Üz™Ū©Įx›O“R‚äj"ŚŽ!(łsó§åXšt¦Ź8ၶگšƒĮ”¢ąŽgYš).ŻøC(|•#u`ų‡ā‹udŽĖT“OemŅ+uŒÄ? F£¼?>¹csbn.<Ģl'o9õ©|O« éŚdQĪV’'søąéļÖ®1¹†¦{üCń†»¤=ŽŸ Ė=ØAž‘åķŁī½gxDŌüS؋=FŽtøWŚD§֛ŠŅ=Īo…S•ćÓR41€ŒŅ°\ŸAČꛧü?KK»haU¹qlŒ–õ ŌĘ †®mķlŽĀxąBģČÆ\÷=+ŽŃõHš–j’#l†_z ēkmį;¬ŸgŌb¹w”€€ųWÆxbś÷E³–Ę"X€F܆õ ĀGœxŹĒSŸR{×G{žOlzVN$Ģ6­»–9iزCVѵMK7Fm­ŒÆ$z õ?…¢ö)ēMRŽÖ[rĄD&p Œr½l=ŽāgĆyõĖ˵øū$ŋ(‰vÆ<Ž€Wį՗@­u‘öė¬:#ÓŅ‚ć&`ė:%ÕŻÄ—V {üÅ_іžŪżīŻ\ī‚yéŠĪq*OBÜŽc\ƒ Ž&č¾ę”ŌlüA›‹]:KµUó72 ‹ž» Ćo©é6s]Z`ŽjĢUˆķżkwÅÖ·ž(EŽ –)£@œpæ_QÖµHēĮwPX*Ky1•†_ =ĒzÆmąż6)#»ŸRxbŻFć7©Ļj Ż‘aÆ%Gh­™”€?Ģgr’vÖō°.!ŗivķ%rz¾8 ‹'Š#†ņH%ŽAĀx®k/@[kkĘbƒŌ¶:ŌŹåsv=āĮ£ø¶bµC ƒéXö’„ņīī­ŽBł'&{µb?™Ēź¾h®™<Ć8éņަ¹ŌŽ[+‡Xcc*ŽÕbÖ„qq+ÉpFEÆZŻłÖ®ŠĄ!\m«;(Ü[x$&Ą]“ļÕ±ŸeSq#&ćĘ盽ƣc©Ņ/ ·xgQ¾j”Ļ ¶×õ:ģ3ÜaĘĢ{5ģ^ńņhy¼ø¶¹»GuVmĄ*®@Ī é\rGj—CīSÄžń—…“;;CƒtV›ed205|ē©|BŃõ GÓįu13FŠæøõ”G(³Ó?eŸ®ŸŠ]¦»†’Tef$4¹Óį_Gų®üźž’Ō3dV-—ąqĘ+K\ē–Œü…ń.•$^ Ō—.Ēe“ ą¾sŗ»Ļ ŗ5ƒłw±$ąa‚ ÕMv(XŲŻĮÆ\_+I·&BĘ_rJŃńŽuķ6e…tčnlT‘œ•Iź8Åg4tBEÆi÷<ń]ž‰bÓC<ŠļAņ±QÓ5ō÷Ć-h­Ö£ L×"śĮÄDČæ<’Ÿ„(¾ŒŻ“āŃōœ–±yį½I°±{ĖĘ·-oßk/9ĒŠń’ų¦Žūþ ՞ŚßēqĒjF@ū„G^GZŪM.„6žüwš³ÅöcRŌ,m#m.ĢLq”sŽsŠųŸÅÖwŅ„¾„r­˜Īäaó+TņėrcÅīįĆĢ–UžGOjōxžoėZ„“öyf r›¾PøūēÓ“†žĢżgš‰-u›;+č$‘`– NG‡å]b¬ņŹ¢-Ź„ēpØŖ•‰ŒuŌ{ü8Ó¾-}«Į:œ–šG23Dņ`ĮN>nµłoāMžjŚm¤čöÓ<±FŒ¼Wõ±ŃI[B–‘©Ļ£ėzV¹ję;›I¼Ķū°@ĒoҾ©ńdšŒ<+§|@³g»š|Ūź,Wœ?QĻįAŪ~˜’Įj‹’€“Ž»šcĘZœ)šæĘ%"¶y¤ °^cj€OMĄ‘\Wö©iųkX¶hnEÜJUɇF\ƒśŠ*EŁ3nd{ׂõįql¶%”1Ų„yoķ%šöĖÅ>_­Šź6nöŪfMŻ«d0?@Hü«­L›?ƒ/ų)ģÕmū>žŠž$š÷†­ęµųy®Äŗ¶…¾2¹tVź0sÅ~ZOnŠĻy”†ņ,+ēŲVō¤eQōģĶĪą9öŖšĘå¬_ė\ąī8 ] Ųä’ŌlʐL)Įćƒō¢HČŖ…»s[su%FĆn­•eyģq‘·µA .ŠÅ·9äśQĢ µ//Śą™—Ó ~Ųi—†ĀbóāpVMŻĮ?֔„c¦™ż?Į»¶–Ÿįx“öńēˆoSHÕg{ļ½Ė†KiUKÉ ž«Čܳ¦æ°]Z壶„mĢnbzGĶV'O.§™xJpKjĮ‘$;“ھ.ż¢|-`š_‡ü]¦éÄŠÉö`d ź~ä§üöjó¦ˆjĒåOķ#šµ~!x'SҖζéńK'™škvé×®Óüż«ł#ų”ą%ųećMwĮ—-{-ĢLn–y(f<„oJZœõ"y$Æ,ˆ5u%ø Ōy’'*Sr:“]ńZœÖ$!å ĄVēJźū2 nÕ°Šb&D˜~“‘ø),…°łTĶ&ózØw_J<䥐ŁõėŠšł*Ŗ¹ĪėV6Ü]ŚĖ`Ó5ؔóŒńJHŽ'ō_’Hż“ęšÄö?³÷^]V dé ß%圧”<łgętÆėćįÖ”£•o6©ēźš97ŚDÄüז2s·ż ”Ēn{Šå؍ĻtūL“Ä-įB°Ļó+/š°«ö2o“¹m~Ī+:xŚĪž–HˆĒ õ®9”ÓGš’£żˆåż‘æhWQšõµäß uėŸķܒ±Fä³ÄŒ;!$`ó·łuh.ķ”røŚ6śV6ÓŠz'|Ms£@š{Os$jHŹrZ½ĪöĒMń'†Ž„œjįIWžĆڱ—rųćÄ^k€śTsŁ]E¶bć+žļø®;W¾ÕßÄSĒķ¢Ų²nˆD¼ 7d'øĒJp©i łcü ųÆų–Äéz¹:”– ķ9åĒéżkéżīJĖ HĪzÖ»©ĢćØC®H–¦Ak¶WqĮė¶³“Qó(3ß”®“īr›Sź(Īb…Iąń€kw@h,fW“‰|ŅįŸoh–—)>‡¤ź÷‰yjŅ€Z|į@č­|’®M5Ķń‚E(ŖÄqҵ$»iįż[Åq4Ņ<ŲQ—åĒē]$ś'‡¼=ā->ĆK¹šźĪź5u!6ˆŲŒ‘ųPj¤t~#µ’ŽŌ&o-X%E ŚLˆdvV]Ų#½r(x±į-QŪČĄ0ÜTŽsėK”ÉsĄÄ ‹Ī(24üU©Y}¦6Ė ućžõēw,’vFĪG4Ķ(ģ.ćkid@-Ž~|ņ+ŠĪ³g’Ń!0ķ1Sž•”¢t.ĒWšöÖ få60'ēĒzä|S«évŽ,1G2¢ĘRHĖnäŌŲ®SW¶i#s„s޹kŠÜŻE Ś‰ĘŻ@WĘ×p"Qčq—ŗ|‚0ųßpOZōŸ‡ÖJ¬÷,Šp’ZŚ2±„£cŲ5K7ū óļ• T/#½y€ó,Šy®ņDÄēžE&Ź‚.ißg³œ^JńmvüqļW¼uż—©źŗ:iķ¶Kl̓ĖJ}½Å#C–fFČvFåNŚ£¦Œdū7ļŪ;Zh §Łm#4ŠFĮĒ”Ŗ+mmx¦6>sŒv¤nĪ†)bÓ-$EEÜFGO„eÅ©fčf9ļ@ĪŹŚQņŹåŗąu®ĪÖĶ)£¶ ĶD„måO@)ĘV&Q¹§eqcpciŒ~[Āŗ Jōū4KsپRå!F&<Pźv³Å0ČPI.8⼋W…õ(ī, ²±b § 4łŗ\²±’„jE†įŒ³¢įĻCšĄÖ|mæQ“+uz³ĄĒaÉĮć„ßx_ƚ¤¶w6ś}Å“ģJΤtĮ®wā“®čś÷‡¼Oh·ióĘ?v­ĆvŻłēō¬Ķ#.†¦·9øŠžK¶1§Ė\üĪMqZ^›“cī„”9ĻSžł¤5©čŃiŖŚ“[Āė•b~õq÷¾K$cµĶŲ‰ Ž(Cŧ¹ŗŗŗgƒfÖ s uŽŠ3{9rĢØ”mĻ4£Ų~®5ŻkT/¦D$·Żµ‚)Īģćük»Óu!«Üi·ÉäL7)ćóżjŌ¬bśžķą­1“›ī^Źčŀč0:גĶā/jZ¤É¦JYü’)RBB2īĒ5\¶(śŚ +RÓt :MI!RŹ$Źž÷Æń/ˆF¹w „…½»»Fp8?ZĀh®^†]؆x‹DNŽüzV6« é8&20šÄ“Š|¤O£Ę×,ļ$©a’ķ^‰ˆ`ß7ČĻćZA›CcĖ|A®ėwOķyÄßźW7w8GœŹCĖҜec;q¦+Mµ.?tŻ®āÉ ‰‘¤`ąŽµFŃqy§Ž]ŃR5V“Į5īŽ¹ §iś“ -Ęd(0Ȭ%Š£Īž$xŠļIÕ/”µ†K­#V5;²{žUåŗOŠÆ5‡¼†=>{8āłdRs‚G’\UIhTasKO±ø¶Y.Ć0Bß3 æZō½*1Ŗéfā)÷CŸ/x9Ük–{‘]+XŚ13Hع s\„ęęĢ—©:͐1“äę²$2Ž-ęftłē‚V(ņvź+Š4_i¾Õeńœ15ŻÄEz.sĪ:f­+EjrŗĶ‹MØÜl’0ļüYļ\„į›»&’;łŃß`Ē÷{b“ŲŠ½į"ŹęŻÆŒbI³µsĪ=ė°š’ĆmeüI=ü"ĻĻ)ä)+Ū#Æj\čŁ^4ŗ‚ķml­l–ŃaP_‰­tßµ]JÓīõ;»{w1‘zŸaPęÉ“ŽsQŌt»‰/o¬&UvmÄ0s^=¬ŽÉ,Ņ(•¤$ņsŅ„–—r}#\‡H@/h[{WM.¹„­øIĢ[²Bžk7kŪ^h/¢„Ģ·®³3’@,ø’ņ/kßōū!$śĶ°ŌX±ŠŁpŌšÅŹĒ”F›čy+žŃ·ŗ~ż£<×:å į˜RyĒąŚĻ†.¾%ßhŻŲÉ®ō•ä™G*x5ē×®‘śpÅ|Ļ 7”¾äŗ·äæ­OYšĻ…t Ó”Eąüä}ćō®ŅŽÖIŒ¤ļ\ā¼jµī„<#Ā8|« 6K~ķ½Ūó䖇”ų3\>Öt•f— pƒ¦ņqš©ńWÄŗÄ/ˆŽ!ų™bĻkowäĀ-ƒƒķ'§Ö¹ŻEk{…Į-Žę$~ ½Öķ“ż.ęśķ“Ūßg·y Ž õŲ;fµnŃdÓY× !v&±›ocŲ§C¹©„x#ĒZ֙5ē…<%ØųŽŲ$­n‘ßņ5ĄŁų‚Öµj &Ÿ­YøŽāĪąl–&> ’:Ė•½NųĀĒCā2Ϥ^ŪŪŪ‰™£9dŚńĘ5σ ü§źKń~Ÿyö[øć“oŪ /ż3ÓŚ’]ĪŲ- ’h‡v§šoį­å„½¶” iķ[ŗ|£s=KWĪZv‡¢Åą›™„¼¹>*‚ą.Ā0’ÅŽ£ßÖ©(õ;iÓOSœÓ<%¤„õę«ki¼Ņ°31ęVõ„ŠišŽ%Ŗ}–$ķžöim±Æ°FŸ«ŪGzln`,F}k”Öo¤¶„Ų3 ­V©“‘>Ÿ…'& •Œ­6ŁaUĄķƒ]jŚWj‰ŠÉĖ”“Œkėū]&t’éWÉŽŖå‡ŻÉĒó"½ŠÓį'„¼{s čz–»©iz•Ģ˜G3°‘ĮėĻ4ćcž½D£dq_?f‰Ÿķ§ń>›ØÆŽüżūŚĒ‰­ćÄĖßńÄ©-ou ĒTrMdžZĢąš©ēčMuAXųģĪÆ2h÷Ƅõ/‡Ž%¶ń‡u!‘#¬ņ ?qŗ“Ē^•ż| ż¢< ń·Ć2K©ėZu‰£²ŚŠ3 ·¬)N+Ń¢ś ‰Ž—.d«¹-šßĖ,Ū@Ēo„yĻÁ𓿓ķ-ʋsu„čž’žĒ$žó ņ8ĮźĆź+”ҹēfŌ0xyUØģ’?ļ‰īŽ(Ōmn šž½iqö› čāŻ*·B¹ōö¤ųŸą’Ų«Į’ōæźž$ń׍‘ā—Åö‰*»Ęę`J…[ Čż ōčRVŌüWĬ2hŌĮC™7iy+h}’š’Jż‡lü_£ėš?†|ećÜZŖč‚)iīz U‰äķĮ5÷ēĮ{ĻŁēįgÄÆųēą’Œo-žßkIkā ė–NŸ æhVpNŌldšzœW¬©Ć™ņģ~ÅÕsČŅ•7 '/GŃéæ”ś›ń+ā÷샫j¶>ń¶» ßZi­ģIl»ģ÷7#-A=2+¢Ń’jļƒ‹=ĄšOˆum!X¢¾™„°…@•ąg„odµ?‰*šGāšńĆb/ģõ•„.ƾīļēæMO’l_ų(¾‰ą½ ćĄæ “™u-WR³šĶF숒³Q”‚R>w8Ļ~‡óÆäCö’ų”ćļŽæn>'|Kń.¹ā­ZŹĢi–ņBŽEøcĀŽƒ'$żkĪÅÖV?¬~Œ¾ Ė.Pϱė÷ƙE.ń6Æłwæ§Č<°ē–=”§x?\±žŃ×¼)ā„šéī#3Ūm”!øŪW‹RWgöż5dz~½āi5ĖļŲ„•ø·ööŠØ3æxĒ>§śƒćķWńg…4}_QŽYnm­UIV ÖŖ’=¬ØŚēĶ0é·,°‘ģ•ģM{ēģæū|?żŗ~ąóLć ›āŪo Ū„z]ŪWčŅkĶ:ųšóž?iŚ:ˆ¾ÕpLqø?;°½M{„–į/†šģ:ʗŖ°Ł2āaóy‡Ćß½sJ¢gčҬāŅīĻ‹<1āSe®¶œģ MūÄFl”¶kŪÅŹÜlߐŲéėQt>†’.X•ŽåC° N+NņY­#i".ź+u"k# Ğ*‚=/GÓķ˜.§qx-ÉcٱäkĖ|qµąķSRҵ) - ˜Œg Öu*¬z .æ©x³u…©a¦¬œ°øō¬=CąœZÜ„“;łō»‡nY†č‡æ^õŹ|ö6ƒi”× ī¾Yė:ž±¢’mmpžŪ2¬xīŠ äąńT¼ūCü7ø-„ųŠņģ)‘&ō+ä>pśbŖ2±łö7,šŸ2'ńŸ‰4O ėMo§ŗK¶ėIǚ§‘_F~Ī?µo„|ā8<ā å›F¹`‘W䉶cwož½jŖXåXI„ŖŲūŽēā…ĶļŚ¢ic‡ļ#õ$V'Œµ­ÅZtĶq#ĻØ`2IߎĒōŖuOKĶ ŠlųKā÷Ę?ÜÅįļŽ_^Łźv7mrĖ<$!9ngŁxĒLX£[]nĪ4e|ų<ÖŻt?YĆŠēŠ• |#ńvŪJUŗÓ|KckØ@«Ļż+쯆ߓŸƒu›_ėŚFqßø2äH}źć‰#•ó+£SĒž3ż›¼uįæčž0ńg‡ļlļķ¤‰Œ­·Ļ ¤`ĘA9üüų.ųA¼_Øx.-TßYY]I¬¹Ą’Ä”śb¦„dĻ)į'ϬN§§}Ŗ(ķŚśŻ|Ä`Ų'Ԛ śjYß)ąķ9õō®7$tĘ-nZŌ“”#ĢP§'ž{Vv•¤\]k:^¤jzÖæt pYéö=Äąrv¢HĶ–ēćĻĀ1aÆYź+©hZՙe–ŽņŻā’HȬ_ėvś†•eØ-ͽܒŸ1ŸZ#rԚčw> Õ`ŃōµÖ”–{7‚āÜÆ“Ēó}ąŻ±Öæ(>K›XĢ›|É··śWąĶnŅīĀM>²{76Ī ’ ā1_QN'š†7fĻ@T„r)ezÕĻķkŲ£{tvT~ÕŲłŗ±źii֓4k!.9ü+³Ój‚ŖY3Ē©­iœĶśW‹5±>”¤éļ,0Č<·M¹:Zām隵ͬ±¼ ēŒn$÷­ ¤v0²“ė/’Ą9Ż]•ž§*q%’›hśŒc"ƒžR<ŪĒR­Ś[Ü[ FIį®CLŌäÓĀɵ‘çҲ’3s:­.Ś;˜L’ĶÖrÄ0ē5Łų~Ź9§Tr«99aŌb É»–®V=Iā±f’ŁŽFF)×V;üš]°ąž‚˜¬fĒį-:AMŅ6āAąŠÓŸK‰ei!hŃxqĘi¶JHó}võ­õ‘U¤‘»½P•ćžÖ1? »?0éRD­ŠĻԔ¬:aP[lw­}3W¾Ńt¹ķåŠ+}FUĮ`sČéõ¦ŽyZēpŗ¾¤ēyļYNķÄc ==9­{x†Ł#ŽF ˆäV—īI ŗŽŲŹŗšOQžO„hZ X I}'ŁįrGÖl‰- }cR† HŪ÷%@#ڳuX,nB.üŁ<FjDš}©ÄCa`½˜ē5R·2ĀXČclüŖGJä'ƒõ;ī®įլ̃P‘ÓŽ Gć-.K­?ϳ†ģ~ń¦x“Y]YA~tå²¶žā#łØ#ž{ń\Ć[K¹$r¶.Žų1§•d‘ī µó6żÜ†õük7\Ņ­Ļl»•]ϟOĄ’:wõ¹čŽš–‹oįėh4{F›ąÜZœ€SØ$~‘®Z_ O„Ļ}¬ŁĘ-6ŔąŒPR‘cĄśäZŽ«:Ķ~—Whyƒ'3z U‰ZŌ¾iµ9“Łķ¬Q’2ū¹ÜxēüśŅmuėmc\+Ø.ÉlW.¬“\߆/ ψ”³ø’`Ń&ĢįOl53}ĒÅ ¾Xę×t¹ą²Xžv@į·ē¦­cü6ųƒÆĮØÆ‡uÓoqf¬J7“óc¹ ĘS:_ü\Ńīo·&‘1€#kØFHĒū9ė^1/Ž.t{ē—N(ń)Āī^£ÖžÄ)³¼šgÄ«‰5ŗ­’M„m2)UŚ|Īx$Ž+Ņü?«>§q+Eq¬„‹*“ŒóTź ¾Ēk>Ÿ>µh÷W·6óÜ(Į^rŲōÆÖ¼=+ß³I" ņü¼ÆÖŽv]ģZ¶‹Kµ–;9acpp|Į÷HōéM¾šźKē]1ŚŹŻĮ¦żÅĪ>ÓĀöė4F;ŁČ#Mz™ÖÆc"[!™B– ó(ōĶ#yō½*xX‰…dånÄŌzkĄŅG’‡#Æ‘¤ŹųļÄsiPƒg—2H|¶“=É®kCŅ픊×V–ßf @’G^‡”·ŠŅ0¶ĒmØ\ZkVĶoržnJœæ ļ^Tla–Ymn]#mÄOėPL¢_Ń ²2įįS :Wd¶ÖµKSß½;™XĢÖ|/ p Čь}®TŃ?³–SOJŒG<֑•ĄÄoų—E#Ö¬ŅśÕ™¶d…ķzÄŌoG‰aŽM*5I”“‘¹ä zՅˆ“mfžŁ$†pa$ķ!O½w~Ѭ“ż^;ł'‘ą”v%qéYÉōK¼¾²ūd—ʐĀ[œ|µæoÆŚG <@ķ*FsĮ³6в<ÆÄRŁjŻ X¬˜īOēÅxfµęk³§S™·“ŠU)1ŸDųĖĀŽŠdÕęøv·±e9źEwņ]é7DÜie¼–ĄA(ĆQĢÅĢŽs̀Š(ģå·Rņ03¶¼źāŅD‘_a݌j°hd[€÷/č鷎G_zŪ›Ćzs5µÖš× č˜Xp[¾=«^c>ņÖŚ8§Kµv| }HŖÖ66ÖRG;Ŗ“DćséQ)tīžøŅāµqęÅ$"Eł;ÖļˆÄw1]=¬‚(‰ÜcFĄśb³Āu9õ(.c¼_6 Wƒ€ĄÖeʗ}|ļya*"F”ęĆęž¼P3“ŗŸę”Üł1ŹÄž8…WƒĪ*͐„ō+V—3Ć3)sžKæ…n[:J%,W°#­%ŲÓÓŁ²Ę BŗóŠ¢ŽzLŃUR)K`±Y iē!ä;‚­wś&”kon$³}Ü0Ī;f±!«jcÜŪĶ:MŽ'ņĶ`A§„±c€“Ę)ié$Ä“?j\c§-RĀÖš%ŹFŽŒ¾‡ō©šŠ®FDuX™wąŠćµ=Nś(äÜ ‘±Ī1Sr6œxcœ2 īćŽ3Ś»b–`yó[˜ĒēZŚĻ|ńĪ«āĘŌü§ŻŻi„l‘䐪D°ć< łćĒ>ńo€¼EŖé5k”å~Ē3`¬¤ƒ•ŪzŠŠłŗq}"Ilē’C¬’‘ó t®„Ž¢ŪŪŁĒ*ƒ` æxõ꩞5”śū,Łų6ĖĄ9Ō.’ā|—Ÿźg°° Ќęøoš?Ƌ_‰Öŗž“c§Ļ{œÓ§ĪHČĒ^ōÓ÷¬jā{oƒ>é¾³ƒM°ņ$wŒŠŁ »œ×m­é²čŚ©ØŽĖŁ-¢}»ųó²ēZ­ŁĖ[ČüŸńf¹ż­>£=¬ŠZłĢĪ‹(čA#ÆįU|mus«EnaøøWČ30§ŠS1³>ž“Ą·vZ8ÖfÓ&ŠŲ¹Źž= >õēž)¼ŗ“Ć7¶śNŸŪ©™āĻ–=sS8›BG!šš}kI’Ć_µ‚Iļbø`˜!|¢į_YjÖZŠtoł‹ŗ„c%*eĘ~o|ƒłÖj×= 49¤¢}AąWh¦„LĄ¾7žz~Uē·‚ībų±m{¤ŻĻdnIĪ̘šv‘ż}\eŠä© [=ÅŚŅģõ}ś7¼ūL>[(8Éźüś×å_ķšĆTšņ[Ž4cOÓęr# Ų/ĻaK]ĪH®‡ÅڦœŠ’CŽ'.UsøÖ=’Ēn£0ĮļķZ§ce±öæģńń&äY§…µFg,Mŗ ÉŒƒĄÜōÆ·ģŽGƒ*ĶĪ:ńšrNĄ^±šā+Ó9žX6‚”“‚ |ūKų'K·¾»ńNhl,ļaBȇīȟy‰õ'ŸŹøē£LłOKŠÆu`±Bv~TdšśąĪŗa¾Õžx„Ü&›«Bc„8Rhžé Ū'}hęW±ŪŠĒ×ī ż®>|6ųļį-F×QŅu«£Ō"i|‹µŃŌņTųyČ5S•įĖŪśż ]ģ} ®[;Ū°Tłć;—ŽÕį5šŽā[Iģ/4Ó/£0\ļØĻr?Zóź$‰–ēēÄĻ Ią?Żų:į-5GLĀ̹Ü.­œp}ĮęæOų)wģ’jś:ų’A…”ūÓĶ#$g˜ĻD u’ėTĘvw2‘ų‰%„–īˆŁCƒœgéY’Ją¶Ō-ަ½ĖŖ9f-œž{ŲG=ūU½ę=Ņ$ņ­}”‹‘R\²Œ…‡5Ę|ĄŠ#!ő˜¼ķÅ žļ5TŚ-¼ŠK»'@žŸZ²{t]į÷}#;Bģ7—‰ščuAźwß ~)ėŸ~)x+ā¶‚Öń^éŠ]:Œƒ4<F#®FN+ūvżž?nų–/Łök徟Q>—s.­[ ,žį-łt®yÅŲźūݦ\éó¼XĻΟu \ŁČ9 3Ø9ÜUĖč«˜“–Ņ.Uąōó®:ˆŠüŁ’‚›~ʑž×ß²o‹|"4Ļķ‰~GÕ4 :½Ü`bõ9\Æģ~?ē©éWž×õæ ^C$SZNń0cŹ•8Ś^0k’/^Pņ8Ķb+Ū‹K«2’mq¼稯 ü āø[J{K¢~ŠH č**S¾†rG ßx²ā×N›M“ÜįĆ1įMfjZ­—‰4ķĘĪŚÜźģļ7fBr3Ӟ+ĀĘgŖü7ž¾›O’X#³¹bĻ»åĆg<šūK¾K«_1J²ē ©é]ŌnrՅ‹!÷ rĹ$Uø"ŽT*€ßµz4ö8ä¬Omm°4xČ%jß²žŽĒt›UÉÉ5Ń $z†ÖŪQŠnn/g[+€Tė×9Æ5ń— Żø·bń«}š9aNś”¢tń@Ó&ĻL÷®²āX-SOšõpČ2‡Ŗ\•ĒŹĢˆ“ūYAµŅG&Ęk"NÆRń¾›”ļŽyŽ>TēØōOMxŖĪ„W!‡Z a°jvĖs’Gµ\ōĶr"Äw‘³‚*%.‡D6,ŹĻ ¼O@`uĻQUtćwØ©Ą ŃsĘćP¤Ź&ÕoµėK§ūäŠc‰#SĮ“Éõ(õ 5ŽīŠ oĻ&“Œ®8»ūw7 Ā„(TVÄv·RZ–2ć÷5¤[œ6Ķl«pTü]+Ņü;āäiŃ[b¾Ńī€šŚö4„zÆ=½Ģ/Ś#å ēė\•¾ƒ'—y%¢(œ¶8éėłR”Ķ.k™­„š}ÄŒÆ 9\ń]‚#IÓdµ#Ǽ²)o»ž¼~5“•ĄŁŌµøµ¹;D>÷*¶‹¦‹g†Iˆū?Uē‚j@õ3>› ­„Ē‘kĮ¹ĒVśÕ?ė+wR,q˜Ś6ūqšm²ć¹ä—i;Mq'˜Ņ»†`+”“S–FRĻ– ¤Ž1éA©ŲhW°@—Ē H¬09ĶvšV³1·6”ˆĖ¹4aÕöŒš„Bk›$‘·¦k˜³Ke3ióKbp»ĪĻ­±W<—ÄwĻ ]MnŒ€aµyø“æęY$ Čy ŃAÖˆŚ¦ˆ%’ #·sƞų®OS½yXŽ8™­8žWć‰6ž»“Šd[™1†|"'Ŗž¹ė_"Ī“j’Ļq4’›¶Ī_;˜ų=«†³±ģį)ō= Į~ߝõźIoe Ȓ8ŠąČsųd×¼ŻFĀŠ‹XB&IŽ<ą.kęńuzßæGŽś–ūJ²żådšÓht’Ą¾-ģ×/Tjh։*Cø/˜ø jģ/47O{˜åy<`W˜ęOį(õ9ł|Xu=ĻAm>ŚÖkRŹŅlĆæ=Iī*ĒĆ©ü#«5‡4ūŪķĢ. /µ•Ųž¾Ā“Ÿcß”A%r‡ˆ“½2=sW_ yßŲÆ10ļ8`½³^+ńū\Ómlōy®ܾõ`äd/'š!-uyøź~˜~ĻOĆWG“–{[mYÓRU¹wŹ­ĪߗZ€ä*4o“:ČvØnĄW2™ļQ‰¢gĖ#õÆ”“ĒŹĄv®ŽVv{3ŽŌü7œ’ŚŚKr±¶÷\ņW½Vń>©„ź³^®›hmmŚ%]ŒŻūćæ­=L%L×šĒ,­ćŲ…óŒg;Et¹u˜¬l›”’x’yÓ|sšćǾŗ‘ļl¢$ĘH ÉĘaßõÆ®ü ėö µąūŁt°˜’hįlžį]4՝ æ.ģż¢’‚yxŸž’Å;‡¾&Ōą{‹{?·4 Ż"'TU'%ø…~¼~Ūž<ųsū8üńŽīōŪ ö’KøšÜĮ¤²³Ē˜Õ›‚ĄĻ'‘šķŒ¬®ĻäosœUN&Ėr,,­¶oĶŹN:ś$ 'ĀÆ‰¾1šõę·į/ź-Ьā/{zæ-½°Ė6ß0ŒP:WCšĒĄ¾šö·¦ė¬SVŃŸ2ĘŻžęsÉ=šqé^Uu­ĻīŒ3Ѥö*ųŚĘĆĄŽ$Ōh„QwŠ_Ģ?Q“ڽAŽ})3¾^ ÆNņõĀ?ł2“ūŌmó>+]sĮ?/¾0jtĶ&ņĖĘZŒÖöĻ:$ŅdiŒQ€Ķ’d6 ÆĪŪöųƒū2ų3Ē:Ž»āmÅ^Ó"”nYĢž .N6žZįÄRęMŸ–ų ĒŅČźSŹ+«Ń«Ė’–[_µżī»k„Ÿå7„ęŽMM≒XŠ :0#Š÷{8-DJ.£óbŚIÆĘĒ÷¤]÷9;čƒłjBäćŚø»Øī0ƒoR}+HĖBćI3bŅļČd2©¤÷«§¶²Ż8ņŪj’;UūCxįŽ¬xwķ Ūnˆź~§oįeµI3JŹT–śzVsŖĪ…‡Žxƒ “`ć˜c%ĖN3ŠoüMGó{ģŗč~-Ļ-Ō~"[ū„6;įc†…æˆpF1ķ_Oi÷hŗu…ĻŚEĪ厫õ¤~­Ńæē*ʗ ūP ėOŸV{‹Swp fĆFG½kō81R±•ń»AM?ĄžŌ“kcżµo}ŅHO)ĒO Ķ|§ā_kž!½»Ń® ¹‚÷pūDŅ9c2v}ؕN‡‹:¤¾±›Lœ.аcŒ•ķśEöd%ĻĖÅD¤c8ŻXī“Ł®-®hĀJzl` øō öƆ¾:|!š’€ü[Œķ,šė·Śb‚‰rzŒvżj„īIJüŃž|Lšf«į­{ĆśdŚŻŠł¶HóŌF=†#]N™šÓį‘YirųOūśżóė·ŠÖ±§sē±qµģ~Ž|!šwĆ=kįī„rņ¬śŽ™„Ū#Ž €'©¤Ą~¾ó ū6ęĪ@zńW*V<µ6ģ|-ńćöqÓ­¼nļ%¾Ÿ­Y°ZÜ+ķ`§±äw³f‘qŪ„Ń^ĆaXןR™ś^O›ZšW9 æ€ś…·Ūß[Ēæ“żßʬŁēAcĒ©ź°Åø8`ĆĀ±PhśOķ(Ųõß~É’ 5»É’į%ųŸ«ZYF…”ŁX>8ķĘ |µūJüæų'’ŸlµŪ_i÷ڑӋ…ĆlĘQ³żļQZrw<ŚŲµ-Œ’ üC“Ne‚āĘK×0ĮłOnOÆ5©aā»K[‰<ŲŽ'Üjœē52GšÜß>5CØéö—QĶm Ó¤±ĄÜzŸjśAń7ÅæŁ;öšOş‚°h^=Ń„°–վݒKdŗĄ  ƒėžø­iĖ[ž~e„z3”7¤ÓNŽjĒ×Z/Åtż µĻźæ<ą O_; öŲ†\…ĄäōW“xūö3Š|O„j7Ž…<㨣2٤rl¶½`3å•ķšō)RęwgŸ…ĀF…P‡Ć’ōZ#ą›OAń&‡āMāU®””[is5§ˆc…ĀĻl‘°4gאką?śģēańŸŁ×ā–±ń#ĀwVIs,—īņMe8;L~cŖ’øĮĮļåōõ?—¾”ÕjG…Š·'4ÆŽé+[ŹÜ׳GĆ;āpń¶ć‡~“Vŗ°”E/šŠe'ęRE~°x[Hø·nõKH-5Y›ĪøŽ!ņ«žĆÖ½źkCų+Q%cŃ.-šh@ .Fą8Ø­ķü§(cĒjė<››“¢&åŹvČ抓OŌ&·„"å‡bi£ė|1{-é¼6ńÉ(ĪŠFrjMjIõ›¦¾{Hą¹=BŽžµ§1„™·”[łfŁ'1;ĖgøśWM¬µµ³&F qœŌ¹³’g->™”iö/-bŻČ$r+Ō¼2še¢O0’ėĢŚ[§Ņ¤Ä“ˆ–6Š ¦“żŸZī4©n$ÓE…QĪA␗Jæŗ¶4ĀŠ¶UŒ> »wlÖzyŠGiČo'ėNĘRoc›ŠÆŽ[ŌµÜC;mĖ7 3Ž›āe†ŪW›H’īy•ōtĪ×ĒN}:R$Ą²“I¤–WD*O͓ȭ7“œäž8 GŚ|Śm³yf}Äüçҳy®Ų4±—#'­9ģŽŅćŌa¼·¶ū<—>^B>2ž»sßČםx»J‚Ņy–ŽåQƝўʟNq: Xn•FWqÆPÓtÅh#Q,ÆĘS­#9£•ń_†Z[™õ xVÖ5aōҰįŅ’ēoœŹē6~ī(35&³ūöš$¢F*PU;‚²ŗĘä„Ļ~Ō»g”ZÜŗ¼P“›†2¾µ„«č×bŹ8–Łö•Āń@%ā4›O:ęcrt˜e 4±Į ģŽ•ē{#šõ¼śÓApńÄĆ#8 >“× Ö Ųd·G.ceQ}ėjĀķ4ŻnĪQ8¤“Źf†hŁ®um3Dµæ—PöŠ£I#Œqč{žóóųśĒÄ21“±dŚä+t,µ°lņ,‰ØÉz$ŽŅ>XŠčtß½µ“I%ĆĆn¾‡Æīuŗmå½äO,!ŸIõ^+Ž9摕&{¦2»ŲTókc•£iHļjLŲad92÷«¦ń׍“ķ{GÕķtÓģćtŒ“duUėŽOÖ“2hš-'Ć’h}Ždī¾­Īk¶’=Z+S’  €ä€}č%®åinüYåGmhÉē»,aŲ|«ß$~•ėPXÜźzA’öKyÆVŗ_ʆ)B[Gs›RZ&a•Rqyü«Ī¼SįYŚå/-ć†$śÖQīBå׿ ®µ_·M+ŚO3.čĘ>ų÷ÆJ’„/Vµš}±ŌĪÕ ‡bČIå€č;Õ¹F™ćvŚö£¦8Ņ–ę[¶%Ÿ·½CćmRūWÓ-%ÜeXšøAŠõÜ$­ ¾ó®lć–5.ŠĘ@V­qŗæŠõKBi` –ą•»Ÿ—•$—[[Åf×H$®p…K/ØČēė^§¤čp_¢ˆēµ\r~“·žAxfB¹N±Ŗj)n.ōÉģžŃlšF‘N~ļ4‰»¶‡°¾£l”ci꟝HÆJšßÄKŁ“‹ļĆ5” "m_;‰ķŽ‹‘)—į»K[ūVšhģåEķ_Ļ>½kȾ1xsÄŗö‡ŖZų^ęŚŪP)„%p:ž;ā‹ōhxļĮ’ƒž.šÖ©sØź:„ŽŲąŽÄē!$ž¹®āęŸŠ48ü;įKŅŪä`CČĒĖų.?hröž“Kšü6ķ@ØŻĮŸkyvņA ŪHvHäe”ŪéJįuŌį$šV±cāė©m|Awu£Ė)"92B)ģjõkE„@ŗŠÅ¼¹U|qōĻ­Rd3Ķž ųI’m6ļMø{;ģ>69õÆ=Ņ<5Ķõߌa !ō¢R`wz~›§iå!»†-™+IÆBҼ?„ŻMvś|ŅYĮ9ĒFk3UM&ł|+jbštL‚\d±=fÅā#QYÅøydW£Õ@^ĒC“×ī>Ćju {i&’3ó`p£üę©xÄ÷ņ ˆ`ó±\0ėVg*I"f×cµÖŽ‘4†”·˜ĄĒjét=NŽņY¦–pŹIź=Ø3åģt·ŗ)¼g»‰Õ“\޾ų«–^¹µŃ仺»“UóB,`üŲź*\Ķ”+ŲčÖÓĪ×:˜ŽKd9ŁŽZ½Įž“Ō ké4ւŚ59·˜ ²ē?ZÉĻS£Ś„š‡twec ļ–éˆY8€žKz šxTŃnīo®l„{± ƒĆ¹5]'pÓl]6‹;q,LAfǚč®<>į7O$!ē#§Ņ„LŹQ65{h²ękyŌB«÷¤ ĄwÆ ń.”4vQŪC*]m‚æÅõ÷«ML¶:o…>³ń¤®Ž$5·p69źæģŽżkGĘ’ ģō›ČõŸŻę×sFb1ķ~µŖØTgќ?Ć=å¼C©7ˆtXīŲ©Ė‚’0=N:Šč¼C¦-µč©DvūŠ1¶„ĪåĄßŠģmĶ£¬‘łŅä©ČŚ­ÜG#:§ś8ł•1€“—bљØhƒT‚åfŠAņ ĘCW“kžÖ4…–kxcdoOR>¢µP@ā¬X“»æy,¬ ·JēqʽkI½ŠįcKˆĻoÜ\ē JP] §¾·ūlė%ÓaPī^zā¹ß[Dę+_ßM€xśVD„÷PY³\²D䁜ņ}«ÓŌc”ÕtMAškÉ­—jn”ōĶs.ŅŹ0@Ž=E“X²’ꗽʺģžń÷éžÕ®£žąźˆ·šs”%_‚Øż)7aļŽNƒJšņ[ŹBXƒĄZņm#Rš/“‘ŚFŽNqLo“R1t“ QÉž,)4øę·ŽYXąä£ōÓA£‹Ł×bŖ±98ÅtV6Č b8ä‘Y¹ö7‚*k $3Ck»1FxØ#šxŃ£¹Œ† ×j[¹|¤–× ’KŲcęķZŠ;²£#ޤ“E^?%ś·õė“\żŌ†YÅ&óՆju*;Œ’ę{E·ć‚pk.YŚķå[bæ0 z›[sb3¦Ķ¹DєŪӞh¾‰ÜÅ#.;üØē3q9Ų“‹eøk‚0ć#„oÄĖ*IÆ Ū"ü»‡ ķVĶ©®‡ōßąŠv:åŖųnŹ®¢ueVQó?N¦¾~ż©<7§ųĆŗD×ÜJŽą‘pĢd·ć&½›XņU8­Ļ«m&K=Fį£fŸē 0: t5„%¦ ’¤ŃŚĪĪ'jš£Ö‹Eö; jzöŸ}nŠjŚ„\†h•š1Ž»ĶVźųæEŸTøwŗ€µi[Œ~ÕQܾn§ŪšŽ«įķ>ŪRæ–I!…UŁ\6㌟Jå•%‹ŻźŃ,‹„rbķŒg<֏±ēlĻŹųbßJ»’+FŽ#%ˆė^AwbVMÅIēæjŅźZ‘­įŻ^ėšn©ÜöžS|Ū\Šż^šˆÄžŅoįš6FŒ}Ł7s×Ńc6ĻEŽÜ®ōģÄśó\ŸÄ Cāß jWl²ĖFXƒ?ćŖ¬8=n|c Ū Kšõ%ŚŅLĮWų—“Ÿlt®\j®nąœ\}žé$&7Ą}ė‹™\ō)JkšDæ<įψÖi<Ņi|Ø x€޼×ė_’Įæk Łö?|D©aą‘k)–]¢ ŽB'Žw#ߌ·”(óZ[kłqż“ė:,šMā@]Bč²Ęūx‘dóé^ńš÷ÄOØi¢ĘVżģc5Ė4¶!å’“'ĆČüEį)ˆŖ Q('zŠAⳆ’$ü±½·¹Äwł7 H+ŸNā¹é¢u‘B9ĮÉǽz ČēØ:4“ęmåHœÓāżźŚ¶†Ē)b$pĢžAc¾Ē·µT€Ū†*HFŻéM”©X“ųĪŌÜ~µ:Ė!ķēéYÉjtӑÆm,b ē'Žæ…DŸšn'ķ¢ß ~0x‡ö7ų”Ŗ%§€Ŗč>bųŁą›KŻ!>"Zé–ŅkŚ:}›PÜæ5Ķ£oļ鏧©ÆĖĻ‹ß 4ˆ>ńæ„'±Š{¹`k› ø"lÆ)ļĒ8ö5Ź–¶1hž=¾7|5Ō>üM×¼ =¤‹iłö¬Ē’…ˆ żkÅē/’AĄķ^…us’¢*ķņ'āpSž=éŅŹQx!˜ö®ˆ£ ėb“’Ęؙbö5;/Ž>aĪ;V¼„“,ī®Ä/^ا˲H“ŗSŲ”Ą«l“¹Ū"”eĪ¢)ž¾fō øČŪ·ŠŚYcó¶–ąšżø’‚5~ӐxOāN™škĘpO«\iW­Ŗųa&ĆFÜMg•ĄĖ wķS$o‡ö„šĻ]kµézUÖż%į:·‡åLŃœ'øĆŖćÖ¾ŒŠ¼Ai«é–šš-½Źķ`ƘäGØ5ēŌF±©©½f³ÄÆ}*h󱞒Āx#ņžB憏ų.ģ/'ģõūBŻüWš•ü --¬[˜£ĮŽąs½ėzrčg(·”ķvF)$“”$WH±Ag"l!Ōžż«¾›8„J;häÜ>T\nĪzūW؛‹mI”gżÖŒZčŠŌ‚kæ_Ųłij³$8ł†xcė]φ%_,…ę4,W gkbdRÖÄå ~^×SĒĢjjsŲ³Ėē:Ę»T÷GµK‰G%o%ŅÜ@b\°`}+Ų,ü]aµœ„Фģnއ ongÜõō­-oAŸ_šö›iś(ŸęS‚pIüė3E3˜š–³’}GHÕ/—OÖbf ¤œ2óśœ äāXŅWšå¢,¤±$ä5&z/‡µĖ+”KAF –Wœā²ŽśķŲ’R6š"xzĒKѬ¦²Ė¹öJKē#éUsNTsšWˆd‚Ēū9Ģ“)Īܞ3_1üjųŸ&‹Ŗ?ƒģŠŻjŹŖņķb$o^¼TJV;°ō•ĻšŌp]_IØßOsui“ |ǦEwš6ˆ·Z¤2”H¢$R1šņqUlŅ8 …åšęt°PŃIźū%«ü?Ųą¶G„@YC&qŽĀŗ›+q,*¬‚TéœtƙÄĢ’R²Lŗ(B…5hÅ$—d“F®žöW%­ÄޮÀ:S5’’dż³D’/*å0õĘO#®.t}f ­™Ķh©Ł7[ČÜz՘āh®eBČ žx§&z“éht¶Ńʈ›†ńüėŽųįÖń&§Kfš¦³e+=·˜p®„Źß™üė(»3:Ų^cĢtßk–Ÿį߉cĖ «-¼īIxNx ŗ?*żVżš’hcā_ĮĻ|'æŌÖ 4&ā[‰÷ćķ©‚”yķß5ßNWj=Ī?ØŲųKŠąšģÖöéq&žŅ3¢ŹI ū¹ŖÆ²ūVšD ŗ*ōÖ3•ĻKG—C©µ³HUÄ”ƒ•æĢąŖÄ}k•ķ›Ö“,’ĘBÆæ­v²:CräøĄķŅŗ¢ur‰ ֌ęœ«`ž¢¼§Ä¾øµ¼y š94öĮŅ”¤sŌ+ųnń#•­‰e˜Ę{W¦G,R2Ą,ÄŁéšÉOSĢÄČų×_¼¼šĒ‰µŻīę;}gOŌ~Żn3ó(.Xp~¤~5śyšWć†üs¢xnóPY¬¼ak:‰Rc“Č1ćŌõśę»č½,|ž=Źēé’‡,Ę¢Ėmd>Ōņ–¼œ“ŒWåÆü›ąŖ|0żŖ~ źvĻ&§'„1Ø@Œ_É"L.}9-łW[»v|ģńöŖ‹ųßŻkžhņ’ üńOŒü7Ä“ƶhP3G,±¾dRĻĖ×õ­…ž%Š4¹×ķĀņėJWłÖ?æ“pF++“ŹÄą•H8ĒsėOŁā×ģĆšKöµ±ų¹ńųæIšēöUŹĆ ,‰ ÖFĘaŻŹ—Ę3Œś×č_ķūOüżø“O‡7‰-5/‡æ|7{6¹y{­Ģ±M®ˆÓdig‘KäóŠŅ5t±üĆƾć§Å\ł»ĘŠI+^ķ95×Ķ?‘ł«ńKö¦²ų™¦ź_ žųrŪį§Įk@ÖØb¶XęՆpHī”Ē^§<×Ęzʐ4·°’2Ū œ‘×½rU•ō?§øK:[×w©7Ķ/W’Čõƅ’ ō/ż»Fńm„źh÷ #W ņ”Ō>üOń€„øóģ-ćIōéó•žśJŹ0>¾UŅŠöæ‚Zū[^覝¤ń„ĻŚÓrž+ļév·ŽÖ"™"Wr1ż«¢1±¤j^ĢųŚ9æ³u/5± :ŠźĢ-ļˆ‘°Ā”vÉS’0sĮ®ÅAl”_HŒŚ½+©^”µO§NWoŠžoŲ‹ĒæšO/zsAŖk?³ž·vŅxgXdŹBĶ“öiX}×9ėŒo-Óo¢»ŃķÆƒĘČt5āć)r»釂¼|ø‹‡°ł„šu-Ė;#Ž’FÕ.tżfĪ[EDšÉŒ¬ĖĻ+ļķļZŹ-žEiÜķ“ķ1µ&)”‡ é•$b¹»æŽÉ”»x#Ī?bāŃČč_S‘’„sū2įäµņ1łĄ@æŹ» YęņĢCĶh€ū¹Č®Ķ~¬’:ĶW@?Jó’]Į žJ€nvł…²?/Ö¹ŖL¤l¬r^»óŃåīŻź+Ź~+LÅœ³Hģ±"©EĄ\÷žX§©įć>nš”Š¢xKĞYžĻŌ7ÉūÅź3éž5żžĻ<>>šo‡Æ.ĄƒU6ŖĻóä1®}kÖĆK”šyóµ~ĒńćĮ›¼cįhR÷ė6ūä ’Ÿ„z‡Į_€µ«|=Ó“æ j~>µųwu®<ß­į‰Ų—˜GĮrēž:×{O”ųwˆüE‡­•ŖƆéėå’zĘÆ‡æ žjŗwbæøń?ˆģ”Iµ\ć“9#¾p΁~Õæ|_ńKölųÆšāĒBŃļm[A“ĪžL“ŽJ(sĮćō®J’±ł^G“ūwJŗŃ]?4ž§óšĘ9ķå°ß3yĻ ‘øņ'Œ}1_XĀćŒ™C‘×ėÅr?њꍬŅY¦öf?!ąńŅøĶFRéÖ" ޵'„N&R‘&0¹ę½MrT.@9Ļ҃Ŗ1±ŻŲ(Bd³]L :¼k{Š6Ļ ńׇ5 ßŪŻźeÕ½¬¬JĢGÉłŌz$ņ])‘7:3ļUkgI,SĆ2+ĀĖøsTåĄwąd zÕ2ķŌ„öDŌ-®"›Ų¤Œa«Ļtų'Šf‡P‡É¼GŲyČ8ī)s#”īzE‚”@ŲVeé‘_@üż±i_ŁSĄ_¾|ń.…gąĻ^Ė«Mo{§}¢k;©,­d`8UČ`G§SN¹]Ńń\iĮ,ū/žY˜&éIÅ»;;Å©-}WÜ~zųČÜ^j÷śū\›Ū»é åӔŚ|ę9n;sž+Øšī½|ŗ]„ŗ[Oyv’$q§V=©ó;Um[¼šöæ£ÅÖ`šŽY"YUY愎+ȼa„\Kkr«wqJø9 ē±ķS- ńÓŌšŸüZųƒįŸ [hWwśµüFo&‰—tp šXöąŌžÕ'ÕļŪWæ¹k»×4‡’{V3©©āÕ”f{V67•Ē\ÖĀŠlFY‡Px£šęQ¦v¶¼ńłÅdśÖ7ÄM6ćĒ>Ō<-pŹöīxńüØ8#߁WyųŗÉ|y ųŠKˆ>Ēwe7Łęßüg£Ē÷ÅČkײ×ōōģeǚ3ĢyĪÖ·ŒžÄį›=B_ŠSų;ĄZ•ž…§-ŽÆē%Ą‘‰ŽR>‡­})šŪĘś¼/c­i3³Īź ØŻbnźG­oĢy~ĀŚ™ß¼ŖxĮģum*é#ø³…üȏü¶N¼{׃ų†MSM𹼆{Š`¤KĄć­c*g} œ‘å+|×/ļµSAÕķ4«&XI‚K÷<žצ³“PµĮ³ rŹæ–k£Jņ±ĻV®‡;ā_ _|ųÕcŅĻl³ŗG5¾Ļ’Qž¦? ż‡ĮQėš-½Ī3Ė|Ŗ²ĀČßx}M{˜jg•[k‰“æ‚| „žÜŚßĀßėrü=šß‰“ČnõYPcęņŪzīl„Žp7~)|Nš×ĀÆ üQń¶‘šcÄ·ž*šM„Ē‘mqr¼– `nänĒ=kŲ” ȟIüÕUxlµŠr殖üµ’e~];ą…ī§ņ’h®·78VQž?–+ķ++»;ū[ŪGCˆ²d{ŽÕéÓ?ˆ±‘Õ¶tŗi‚ītƒyˆ¶BäU›Ė³ŸkŒuEÜńę`Å4“ŗ¬ĻR8®’H>͹š‘1łIg<¶:+_1DSŪ01Å[Ōu9¶+±_“…±ø vo?Sgŗ¹Pu.0”¦kŚ“zذ;ʼķ õ Å£3ūzY'¶³± m”ńóļW/e½Õ5QaØĶÕ¼,l€mp=”³9DŽ›MXt˶ŠŽ9°$t®?AÖum>ĀFŌs‚ĖxRh3=J Z]WG·ū\6o.ŻėµpWńü+Qß{–A…qĻ>”ĢåĶäxm®D‘‡8>õ«©[K*„ł “nY¹ü©ķ¬†éäóŽõß^ «kdŹYq‡8ȁIŲä&·žV+'ś±ŠŽµĢźZcX£ŻĄX‚B‘œóō Ä‹Gŗ¾¶¼i~ŠšG“Č5oVŠnõ·…ģd/|Ē$9į©¢­Ņē¢č—M†;k«ˆ®®żWų[Ņ©E­gx†ćM½“™¤W)•hć®ī”āÆcGÄ·÷ViŠ@‚Ź}­&H%±œsųšē4 _1ó^XV?ŻūĆŅ‘<Øč5Kˆ“ēĒoZóėŪi1)ę^¼ŠD¢hxSħO½VHÅČ“ä ‚ Æo»¼{ĖKiī#mŰĮGŻÉžT˜ž,Ō/tĶ*]K¹ß¦Ża§Ąb~5ń÷Œü:nI·œ#[Ju±  šĆŪx“ēž2Öģm4›cĻy8hÉ~P3Ō׋éŚuļ†ī­ßP²I4é>xŲ1—8"‚ć+^ xļī¤6;ā¶ •äÖ~Ÿcs+ķhŃ#ĪOZL·-»I‚K %eĢJćsü8­Ķ&’OYī#²*ü‘—lķ5›F&’ˆąpE üsĢŖ¬ĮOŲ×O®|Z¶Ń¼9#][ŲŻßl‘rĄö9łcĖ­<]ń7āƦh×Ö?g…Ž7‡<ž«øŌü!Ø'‚ķ¦ń­µī¼čCOäuČ­ zhxō7/„ijeŽKK¾Cr½fxcJšžčģšŠāć ŪīE¶zݟ…n“ķIÄę¶LćŒnśV½Ž™O‰<]:uŪA rAgml'kˆZ~Xü_JåN±: ć- ° ķī=(¹›‹0šēD±q,“:]±Ė‚21Zā+PŠKk ‡ŗŽ$V— ­éA ƈ&³»yķ']æw#Óø­}oÄmØŚł².ŁtÓĒ‘µ ™¦’6x¹-ČļōÆMÓ5)–}2ī YYłmµĻūŻ(6"Õ“Ūy3, "™~šž÷=EA’ķęµbŠCm-¶r gļSpLųßć'„~&xRņßV±:”šd¤Ę°Ę…² ®Ļįv»ć=Z;;MgMHm™”˜Śį†rS¹GØėsĶe¦ÜĒĘ3ŃĢ2vČć Ż>¾ÕÉ|WŒj÷cƖž*“¶¶†E™‚,¼ræē҃h˱ó–»zµ‘^-űIŹąķÉä}j冊× I"A¹éÅ7؛:[=*OŁ„˜ģ|näu5ĆǧZKŲŚ%¹Ś]K&F}qéUõŠė¼bŗßÄ+Z·‡¬“K&ŲZ^^Z¦įsč?:źÆ<3 hs!¤k& ķ,0?^jÜ{•Ķ”ēp\Ü;ķ\ŻĀ²¦w#6~°¬u9uˆ^rgv°N3ƒõ¬„&OŖkŚ…µ²-“²»Œ*Ž£ńÆHšWŒģü;y§^ź‘Ä.Kģ]ü‚O­ceŌŹoSč‰õķGū1 ÓÆ-¬ŻŽD»2@5³£^»ÄÖrjy±‚ßóҦ^FfŗŃ,!¼°½Õķģ®]€U`s ōü+Ā~%ėžš¦“yŖ}Ž++¼Ÿ"\|²¶;ś’õčź‹9Kšµ£h¾müšš®I śTšXe‘.męķŸ%ʊ®ToČĪzņóQG‘tė1q“ēs)nµ]`%¢]ź›ĢXGXŠØp~2ńüLģoÅēE]¹$šģ|¬éÖŃBļNkø ٶąśShø#‹Öõn5«BHMøĪ07l‚±dų޾s†åąŁ½eĒ󔤞¦¦¶Ÿā=OÄ«"Ék2ĀNCŒž½ ŲĮ`é I,³³ēk¶N}Ŗ£ä4ģvŽ0¹“Ҽ){¢ˆ—#‘° ĒūÄzWŹRųĆRŠį °żÄ=€=śS`[xµ;øĀI'øe擜ūW¶|1šŽ„q vK]åvFFqY4ś™Ķh}csį‹?GrÓ·öB^20ČĒį^2ŗ•Ä—Ofó“ߐøäT™D¢+TµŪ·ä6ž¾ēҧ¼ńmö›ud¶«ÄĻū̟•G„G+øÓ=x® KN†·÷ƒ"@½×+e?ˆ4Ėū[éÄ6į_ĖEfĄõķQ(›žE£;雓į Ćn„1˜q\Ē!ŲėzDś@ŠF•Ķ8Ę29ņŻ=40qgšXüI¾šž©ršĆqęI@@ĪўHü8ŖW^+ÖuŪšĒū¦l±rA?žŗ=·»­¢ŲŻÉkowęKf£-ž«/·Jß}Jeżę^YzüP£bć.äė tåīķMØ ŒŖķé܊.ģ¾Õ±üƒ22œ{ū×Dv6ęģyVæØOįŁģöŪĆö‚Ų\/SčMzF‘¤Xźv±Ż\@é,‹ę`÷»f”„ؚžń“ā+ūĀöv€ŪŗįrĘø/é±i:+\łÓ¶±Ųx[ӚϧXŻ›ĖŲd»āƒ2“ĘkŲ4’,·QLJīÕB‡Xļ5KŚ-ĀÄŖo;±’}«Ļ4«#t—ˆŅ(Įm½ŪŲPK­iu¤Éfd·‘ ʶ ÷oµ “ŗrXRyćŠĶÅ܎F`kśmĘ”k%«¾»}Eq~ŚĶo-Ą2«ģ hr³R-/É“i›Ž7„gŁ3½Ł‰#Pr>•”ßAņ3ø†ĖĖ#k8É*zUøćž)–XŃŽ6;XōėYs-‡Ss–m£˜ ßīĘ{’®¼’Ę—1ŗ¼€ŪÜ2 ¤Ø‡­iĶŠ®c…‚K‹­™D ąē£Vå›}›*ģŹ n$¶sģ(–ęNLؚV–ŻŒRX`sʚČŃch§Jå·u<`žÕ —”ævæi†hŽ­īyciŸtI”ćŒēÖ,č‰Ó^O…ŚrŖ@;X޵Ę\Ģ.$Ē–ghėR4X“¶ÜÆ‚ź§q8č)·Mg,ĘØ©Č9EGČżsų?ć[ųu[›ųn-lŻ'R$VŚ6ąsĻÖµ¾#|HOL֖×S;Āķ8v$ōé_E$xĖ]Ģo‡^ qāUŗń łśMĆ£|ńąBēėҵ¾ ż†ĻÅWzg‡į#OhՋ Ā‘ĒņéPUķ±ĀŻŁ]YĄ—ńŪ}ŲĄć<šŻšĄ¶¾{}g½ÄL|—ė“ō4k†Æń/Ēŗ†•Ŗé÷“Ż[3Ž,ü¬ |£'ĀRĖGŌ_Ä[›Ēså*FZE UXŹQ:“M^Eyć>ŸBźl÷dø=O^•õ—‹”š&æšvåt„ƒMÖĄ1ˆ\ōn½Å[zöd>ń]…¶ƒg}-¹žÓģ”gˆŽ•³¢AįėĶė§yö¶’6ņšž沑¬SĒ–›ɨŪ}©ø‡,7±ōĒzłĆĘæ/nnļufĻ‚&ódIW ÆŅ³Ž‹S¦’g¦ų.ŁÆc·H o-pŖ8Æc“Mŗ³ÓnQ$ŒČFā>ēø­"]}ģxåļŒ4æ éh֎u6‘Ģ²ī ¬1żß^µįž ń¶²ž7‚,ly7Ÿ³ķŹŗ2:ŲćqŌłsā.“{§ųŠžŽī5Y$g•”® zs_nā¾ęż–¼Y¬%šˆ}. $RĒøą‡ĪHR}Fktōf}£ov‘åQ· rHż+gOF¬Ģ#`‡pź+–ŖčT"|¹ūE|/Āš^‡ć›käū©pńżžŁ?ŌJ xō9×ĒW­sÓĆ"…ē8ĮÆ6{ž$}qū.kš%ljo|Æ\Ķi ŻŚļYTš’īōü?ZĄųÆįūŸųŚøšāŅūIŌ¢Ōģna—ĢÆøīā§©čuÅÜ?üÆöµOŪ7ömšĻ‰/-ą_i(4ŻR4ŠŹ$Ēļ~&¾ÜŠu+ūt;“ēŻZč­OŽd4}9¦Ķ§„Ē$ńĒs ”!  ƒų_Īwü÷öT‹Å użI²—e‘“Ä–·Ī$ˇńēńϵrŹ\ŗœēń—ć½­Æ­&kKØ/¦]2 LæyXv#šóK˜ŽD9ڹłŽ:×u6rM”UdøyKlēēÅ@œmU\2øżkŖ;Ņ‘0LQ·:ńƒ»ŠCoŽ*Ż2ަA4j‘mĒ#9źi±³DÅŻ¼ĶĒ…Ē+I£¢›4WĻe`q»''µtzWˆ¼Aįx/Ǿ ¼—Oń憵5]>hŸfفäśqČØ»Œ¹‘Ū_Cż-?ąžæµ­—ķ‰ū*|-ųŃXGÆÜZ ~Ž wżšź?‘²9 eN3Īz×Öz­‡™ …cżģgrŸZå­6cȼ[io%«¼šŹś}Ā[Ķ£?+’ˆź+ó+ƾ’„KS¹Ńįz<āāŹą”żż»€OpĘ=½ė‡©rŽš‚?šSļŁ~Öķō’‰žÓ%bQļ§‚Tē|YpxÅ~H‘6e·rŠä«‚9VĻ*k®†ŠĒ%daÜJb”„(õ?z­ˆ {lė9=1Ę>µŁŠó¤õ#Ū.ÄlšvīaÖ¢–Ł\ŗē⓹¤%Šlk,ySŪ8Ķ?w“…s·1Š.ąmb½‚Ł\-Äs>Ń‘öē,1ļ_¦’oō½B/ķ] AšĪŖ>× gž=ę?}}Žzūœ÷®±ŌéŒOMŌõÖŃ­ņhd{t!eU;IĘ~ƒ©Æ?nĻŁ_Ć’¶OģĖń į଎)ŠŚMOĆWR .Tgb·P*}˜śW–¦ģ’8ƊžÖ~|HÖüā8āƒT³”Ū‘³iŠķu?ˆÆ2×į]šÉ °Śsϧ.ęr: kJÖū&Ÿż!I 3śW¾|.’īūTB‹›2āB>`?ZĀhˆ¾‡iā9olīõ#k«w˜‡%@ōŖŽńŻŽ®ŲM;^Z”}ó&ӀæķUŅEó3ķ_ė1km ‘ϲÉGa^‹öo•¦2!±Šōi•±ff10b0£Ž„šĪ)}4{Ųøķ]p1±ĮcØŚČ¦bƶÓWōxō! Em*äą–­D‘œśĻŪŽhć"eŻō«‰¦K3¬e†Ö^F2c„ń6“qO8rQ°qüŖ¤ yu«“*ōĒz ^gmįym¦Sp@łĘܞÕ{ĒZ—ˆo&ø²³°¾»v¬eĘ õö “DÕō]F5ÕmˆuĆa†1ߚõiu_µŪYĖ&6ƒÓŠse¾=Fs4%“Šp}+X3Ļcmq+3¤ ½pH §ćXٽIr±ßhڇŸ „ū#—H„›Y~b lų{ÅfŅ5­°sø?/”D£ĘüWiömj{>D™„|½éüėOEšÅĶõ­µ½ćOŒsĮĪÜśūUņĘ'¤x_Ā‘é÷WkĮ ˆ\gšīµęšäŗƒhp»Ūi—źóHUøż{Vl«#Ä<;g ėwŚ}Ļ11Ęɍ«Śŗ]z+8Ą{ˆ­.Ą$‚~ń¤'sĀ1$ŚZI34E.%vĄ8Æ$ńF¤–ś„ȱ¹I†v—ČŖ†ä8œóÜ=üźÓĖŗn¹Åo·‡/n!ŠUٜd ó[KgbÉt»cåäžk¼m> i…\O*«Éžq’ź„'aĘ&Ö÷ qę$[ĘwzՑys"5¤‰ņōć½g3^TCÖ_[é6ӈo¤ø’=EZÓu;­&čZĻp„Ē!±Ć Õsj3_Äśģ—–óI1PŪ@Āc§®x©·w1ÜÅ$Ńņēƒõ¬Žć5ā. åīœg5vĒH²®&·E7SŽ“‡Ģʼn\Hm“Ņ6ćõ®ƒUšå»iva£YCČ"µ‚&dZŚ@¼Ć&Ä?0®’’HŅuĶ2ŚH ĄJ«t-б\ć’Ā_ȇœ€GQ[PŲj7ĀʰEøHķC¬¼ŽŚkI,%PŃmÉõÅs±Ēes,J«±A*^ŗŠńōń5Žž‹x®©;O;s^ ~Żć’gg…ŽTJÉ®ƒGØxyŻaŽXó·dWmØĒ§]ŲG7Ś!k…oøs¹N)œ¤Óź2˜<Ƚ±ÓŽŗģ««@Ó2)H%“G“ŽdŠ&o˜g­gjR¦—qڹņ°JxühŽ›­¾§:Ēkp¢-æ2ū×_dhѕ‘T³Œ“ҁŲwŒāF!ą¹·–hĘß1A5Ä&„"„·Uóˆ#$v5<¦éµTóį ”ćėW4(“bśœvp¼˜łä(8©”»ČuĶ>g¹øÖnQwĪ£$ńž½ć^Osn²]±ŒŖH"¦NęĒKc ‘`·Éē5Ŗ»%›®–!.†ƒYBŹU‹p=q]‡ķ’` ‘Is‘׌”ccBµĻ†M†RY ¤¬J†ēß…=–—³ˆŒTōėš`G¤hÆ©Ū—ʧyUå€ļXo§ĖmØłqD撐jąµŗŅü7·bfoPÖ“u é=ċ7cĘkcX³˜{Ųe&(6K·ŒÕæ¤ĆĒ Õäö6z„­Š·¹Uŗf||1žµŲv:’j‰į 2ĖūB%V» ‘~æŌä,ä‹U€ļ=FH'­fiw-Ij°cģ‘„UĮ޵NM^}>HZ`…=¹‘¼7#“–yoŸP·ņś˜ ·ā-J%‚ŽÖŚ{‡’XČ“3cƒ½·ŗ“ŗ“fYa“¤W é€źf\¼£ļ)ć&“EĮō:-B+­?Nøkg"mæ&;ó}_QšāHā( ć±Ö™©VÅīÖt'tĮĪ=kFīÜźŽ–s=ä!0zh7‰ńĻĘOŠšĆŻq¼#§[[VŠäGp pEŗō9ƕ!ÖµÓķZótpÄĒ?33Ž8Å}ūF~Ź’fżJ|BŃ“½t¦š5_;Gw•D¶ä†šĻJŸdŁń9÷`°šX\D­*··ov׿Ž|eØiĆ[KØä¬TŁzdkÕžŠ`–'XĄR2„`āŃéJ¢šŗ›¤Į„4pA vŃ&U\W7ńļą‡>;|+¾¾Ó5[='āχ„—¶­9oķBäĀŻĻB=øü:#LęXé6š?9>ČfÖA¾gŅZ;€—Čp-Ź}źżÓ|smń*ėWŅ“ēeXĘĒą¼psOśĢ4ļ©ą¾)š–£įĶDŪČīł9{Šīü+u{£č—śŗł­”lŒlN*ć”ŃSXŸ”ß >4x±¼ 7Äæ [ŁZjŚ”„öžŠb  •Hßӎē8ÆŌæ|Rų×㿃Ž×ōo A4z¤Ņ› [˜„«#DĒę®ÜŽ?µÖ§”žnż!x& ULW7¼ŖrŪÉ®d’;Ÿ9žŠ6Ž1’‚‡~Ē_“÷Ąoų+Bšļʏ"źš”1¼r\‰d’$r[$£G½~_Ž ĄĻ?É/|W>”į”ŃuxßXÓœŲŽĀWiYSƒ}qšąÅ®esö”vkģéćr—-œj/šå—åÜt© –ŽŽG… mĒ^ O5“jKDQØ•ä5gsūWIä@ęQē2‚FŽų¦|'–ßUų§Yk ė «I±0#Šź§#‰åGéꄚęKÖ]ģŽvų•įĄĪr¹Ƅ?k7ž ‡ś&© ­¦¹Ō  *œ~vĒ]Ćcż¢<įO‹e³Õ®t+čātP7żą§=æ^”Æ[C/šč„ 'ŠR‰ģÓw<’WŅ-`ÓÖõ.cóY¶“Xå}ė›Óī#‚Q8®yÄŽ[E¾Ydū3.ńĘsҼĻÄPZÜĒęHŚó/˟»é\5ÉWc‰šä‘[NQß6õĻ|SŃ®ÆµĖ{Ū{˜cŠņ×hB¼¦OnYž&;£”ųcāoį+x ®£lĻ”č~Pćiéųõėö{ö¼æ}.'’KŪyq®āCéķČÆWef|~oM}^|ŻĻŚO ?įš_‡|Kā “»KP·’@P‡}¤‚=Ż’ŁnŽõä~$żØ~.j 4Y,>Ō4ŲćX5k)Ȓd “e8Ē’=}EW–öźāźŅĶšĪ¤›åŒŚ’Ądāžżl|Ŗ]j÷—w7—·š–³;™.'‰yÜ÷bkĪP䩨K ū½B$Šüī;Wu?Ś.ŚįćhøØ{KIķ¶¤Ø¼I±°ŲĻ­z›trÜcŠĶKSs±Ńn|Ė„ˆ¾G_„{ĆH’į(»¹E1“OŗĢ€«ŽæNkS—+&Åż§uē‹ĆZOƒē™R9ƒ]Ū°ūŹGWÉ’ ®ē¼f·ŚhĄ` ?x©ĘJw# +Å3Ūdó2Ī 5sҦdĪXzŠŅ¤V…+&xī¦MŪ£, ā²¼ShĀöĘś4%˜”“Ö²Š4“¢‚<#Ä÷®¦Ņ7i’T+¼w#5qĢ'Ķ~!ų5lfKųĄT’=ŲĄĆÖĻĀ+ ]Å>Õu;yfóFĮ'Żū~Ók#Ź©RĪĒÖ?ü9*ųqŪ5°’ŪxĻļæ‡ÓŠšß]ĶcöAvJ®Įø€ć§ē\Rš¹ÅŒŽ©ŸCéšō%"·ē,1“śWmŠY£Fn€f¶„“8£¹ÓPB«S&3Į5H»T•ž,£‚Cē]ÅV)£åOŚDų©§xēD·Ž×ĆzīŽƒ ź0ĆŠgģ¾ńʦU¬„€ŚN«Ōä7Ņ©EZHś+ĆĶžY•Dѱ ©=±ŽµķõĻ|ÖtO¤I/ĆķJRņŒMi Uj Ģżš/ˆ4æé6šö5¬śuĄĪa}Įģ}+Šń¬ ńmī­šĪõ¤øŠā"źč¼Bć”ļß挏'ŁÉI£åŃ.<©.ķdˆ¬žT22‘ęÜ÷5ōĒ€õ B]"ūL¼YŽXĀĒ“œœÖčķŽĒEį‡ŸĀ¾!k[Ņ«§]°©ņÜœ}G?xŸüĻWšČż’ģ“KŁķWXŌµøRś$ÆŅ¢r±-ٟžˆAjį¶0ü«½Ņēž+ēő?‹Ž¼ŹSŠ„-,tŗŽ‡ˆ“MOGh{q 'u8?ēņ©æfƈŽ)ųC¬¼fåmn7y[g÷уóķŽ†µ£;3ISŗ?G~=xŽ9.~ųĆÄśtvš=Ę-VčM¼ķqņO”ĄÆ®ü⛿ iš;Jžu¼IĀIj“|0;Å{øiėcŹÆ„ocšūž ń»ĀÆķ·į’ŒqĆe¤ųhé‘éó½įM’²1Ļ$ķļĄüeńʄšg¼k¬iIiżØ_IuhÖŅŽHŲīqĒzöØHž(śG'Ž9Ļ“’ņi‘īæ²¶„ā˘¼aį_ģ­A|=w"]Gvą„8*æ­~žiZ\ÖZv›c {#TŠō!ł32ZņeŽ™4N­ƒ½NEmŽIss¶ GZY£ēŖ2懣 ™¤Xāw÷5«©,gmø $@€=ls‘ĶrŚ}Ŗ„ŸqąĄśÕiƊ¶±ąg·įAĪĻDš·ƒeH.u‹bā9rĻ·įPjŠ$·k4‘G¼|¬ųäūP`Īc[ŽĪÉļnW6ā°ōĶJąź0Ėm\ŒŽF)r‰.”ā-RK“ma子L389sUoÆmŸKøó7»S±”Ģ=Ä÷1…³Œ·Pz×ay¬ČŠG’#|ĢަŃŠNu 6dį±ÅjjqGmföńN'łF1Ī„#+33I&(&¹1—sņĻį[±x¦ßū-·Ķöwoõ“×µ®ęSG;g­ŪŽHĖ•[žzS¦ŗ·™¤·uWrŲ^ĄÕ™Ņišģ,n=:WQįƒd/£7JģSŸĀ£wWķ>ŁwfĻä°Ļ%qYZ3Yx’ŗhßķväŒ@5©ĖUk LŖŹ\`é]޽g ½ŗ¼o‘žJĪRūZšĻTó,qėXšŻ£jņmdväīś{PbćaGƒōm9-µ5¼ū\Į„Ą‘ŽׄuoÅw4+«i’µ—ÉgXĀēļ žō_ń“Ėp‹dŲŲå¹ČÆńJŪÄįg*ģp0½hsöVV÷éć,ą‚yĘG„Pń¦·p\.ŽŠnZ"cRwm8čM\Ļ”ćmēČö×Å“ !g€M`x«J]~ŃKO,imøöāƒRdžžųÓWš.¹ćkD°}>ÕÉņw–‘” –AĶy§…`Ōļ$k‹Ū1¾öć<ąOĀ‹ ÖńTZŒP¤–ѼÖNvĄ^:WŪI-¾ō…69$œ dŠ"œ² {[™$F¶ø,IĮēµĶ[­ŻŻŁ‘×ķ/Ę3ÜzP;ŸIxĮßckgMøāŚ­2Fēäsž?Jõė«ä»Š >śćĖlŒ‘ņ ÷ MŸ4üNŠE®Ū‹+årYŽĢ`fØü;h,ÜĢ–fg'$9õ fŗŗ ²{’ŃÄAźk“¹{‰ƒG‹*6yĻJ™_d šõ¤×2ŻĶq,9%Y˜£ŅØĖ§Ķ%А¦``yfśRå¹2f|žžÖ¾ŽHšOµćo†ā¤Ņ<5żux÷#|Ņ0ƒj¤­”‰¾š5–KDņķŌć§éś%źZHnƒ“{³Čõ¦4ģ]ŽŚćģokiRO» 8ĻėŒ×¢ÜųŒi>‡G~Ÿy"Fc‰Xc$ē#ÓėA\ŻĪRÓJ¾Ōķ–C 4» 2©Č<ŌVŗ®»mÖzl’YHŽĪī:õ¬ 0ÆuŻFXćR’­­¹LØVõÆń”ŚÅ¾“³.-”µo™¶Tž„{P™q]Ź×ŚŖ>S-ėm&Nüs\·§‹[VƒŸ’^iä°I¦Ū¤ņƒ”¹>i\Ø®Īś×Ä]b¢󱉯xąõ_LŠL¢zˆÖĘ).,īAņŖ ÜsķU5_ˆŗ¾‘ĶŖX[™"$©pĀ=A„}l%HņTųķā{ż/Y³žĪhī^B¹‰@ }½+ŹõXµV}1Æ.ßķd×Ć®{qLŅ4ģm’eEös Ģ­=Ņą‡Ļ?zSūŚi®Q™˜;—ļ\Še4kŽėGUZŒ«±p:z“KŃ,-£ø¾øw°TŌ !.ĘMŲč“’1ģ¤-·ĢAķź*ž¢„tö\»Ģ>÷Ņ·ę@™ņīf[»ˆ,PīäŌ{Ö§‚+›eŲ·2īrpp=+9•ĢĻPƒĆ‘­’ĻęEsóą¶>ļ¦jĶ­žŗm “"HJćbõa\Ļqę5M¬®®›å_™v°MZŠu-µLlģźFÄĪÖqżŃļK”ˆĮ³Ā¾3|B¾š§ŽģL“„Ł„Y$iNā»±ņŸ¦kÄõæke@Ō$ŽłZRš)\Ÿņ(±ÓŲōżąUŻĪ•öÕżK• *=Č:õćą7šöc§@byaw”Īõri„Šóm_\·Šõmo I<˜U†NzdS5ę– —$nS9¬ĢŠą½ū8ž{yBŹ\×_„ZĒg$vŪą³z©M›ÓC¼cį½>[i.ķć]8}ģ³|½+Ć×G“¹¹&I£ø@p$QZÜŻGCÓü9ycjb“ ၜrĆ5}į=F’WŗŌlƦ‚0L±*ēvGjŚ:p𕆹Ŗ_ܶ©5õ܋„mĒ’=Åf_x&ųMm-„染Ŗ9³]ÕĻBŠō9ķ`77(£gh½lč^3‡OŌG’_µÖ–ć[øšī߂ ž¹5„¢>D}”¤kVšģV¦Ā4KD#!—Ó®}kŠų”„ŁjjoŻŻéāRŹ˜›Ūž•˜(x&ŚžĻNµÓąžīūUPĘIdł²=uŗŽ©µ‹bā(E!_wqAG‚[=ī’·j·tA mē'aŌśq^/ćĶ"÷\ńÕ­ėé®ĆĢH÷kīs@Ō õč“$Łśkéې#ģ;¾§žōż?įķ­‚ˆ¬‰P¼ļl±jŽ; G[3z?@<ԚIž3ŒńMŅžŪ„ćGe#Ć ·=śŅqFо2ųuqąŁŅh&µ»·e Ļå õ÷®NĪé‹“m3du$õ¬dŅ&Q/‚L#uW‰Ę2j„µšż¦gdŹ`{ō>õœ„ŲəګAmßi!pƒ©÷¬{(ÕLĮįF”Ę ‚‘¢×Ėm“f@·<šjŽÜ\A °0żć“uļXÉYŽāi·“]ę‘0HSžN}EMØéŃŻÜ„ÄŃ”`øLŽ•¢}Ē#É-o<1Ż’oJ†+T¹EĻ );‰.lę…T[Č£gēüę›emy,’ČIĖ1ąw¬īe³Š¬$¹[„÷Ā2z±«Ņ=¼Žb@ ƒœ‘ĶI“YSSC=½“vģū‰Ć‚G"”“ÓÅŗJģŁ”w'īŠ “9éÆE›I)ø`‡*qŸzåµ W͈¬r¶ĶŁāšFŠGė߇|4Ifm ‘Ü<›Ž7ńŠūsX7ž Mű¾÷7`yj ó2HćńÆØ©ē)³ŽćÕ5ķWLŃāšŽ…yŖJIuŸvłł³éŠž]:ūTÖåV_cmĮ¤ł~Vė÷Ms“mGÄK=/B¶±W²¹fµ+ū¬e Ļś×ĻžŌ$ŅR;‹i¢G$+9ļŸ~)ĘZ—§Ų_Ėā6#be‚S¹‚|ʼŠśnŽņ?ėśf„u¢?ŲŌ\ćēo~0s𤉓¹ź’~2hšgĆÖmY†Ų•UpÆęŸ”āąq_žŚUĒŽ¼s©ųKZøŗž2§lņ1g¦= 7Ų!Lś_įŽ¹m&‹„i¾#Œ$į<¹Nrf$žq^żöżš8¼·KtEł•‚@¶ÖrFŠ(łgÅZnj¾(x_ā6—«ĢƒO˜L–.ø‰›<äué_BxŸS}JćU7ńZé—sF\G•O»œļżk »-NŗI& ų+ā_'\Öü;©Üo¼Y$xģˆćÜqž}ėģY<ĖmZā Ā7pĒŽ€œgš­!.„béZGēwÄ]m_PG™dDWaå–sĻŗÆƒv:uÕō:šŗ.؅ŌäżŌ'§= ow8<ĪwāĒĆw^ÖüC¬XCl,S–GÉ 3ĻP;×Į(šÅō2Fm®@ u¦®,Ö6<¾īŚk[×)›Õ~bÜ„v?|e’Ÿ‰ģµŁ$*ń®+ć#Œ~k°¤~²čݧ‰4˜5+uD%T:¢ą+bŗ{YŸqFó@'Š Šˆ˜²_čāO _é+±™ÜF“:/לWꊛX¾ūEæŁęI6ĖS~µĮUTŖ„”{G×/ōKĖI“r Ē—øńßۚūŸĘ°iß¾ųāŽe=ÕžŸ iڰtĖ+ĒN¾ÕĶĶŌźö¦’ą’µ\’³ķ‰įĻj35Ć©Óõ9§“j[]7ś—9 a› OlūWöĆ®Z&Ÿrf·’;ŪgQ4(įѹĪŗ\“Lg£ü:ń buŅĖļ’A¤ō®wö‘ųkÄ?‡šŽ-|ķsLĶŻ‰ę?ŽQųs\ņަ2Gš_’ ų©|2ųĒ®j«¢ßé¾ńņ]ZČĆĮ:‚$PqĘHWåF£göyZ٘»‚x"ŗØ½,qŌ9{›iƒ·”!ø¶ŖšI,²Ž£<1®Ų=7ŲµaPHd,9SžŌ’\$.-ć Ļ~ĘØØ$V“æVĶXXİ4žbł”€Ų:ž¼ŃcxīhAs!DŒ–`æ„]‰S#s/Ķļ֔‘Ń©ū‹’ ż“­?eoŚ6ļöyń† ü$ńówy°éŚ€ĪŅ™łv¹;q×;Olļj)Q­–$dž–LäKä0śŠĀŗ½™ŗgjö•½³‘A²¹R§Ó=«ćoŚ Ć—cĀg‰­-Lڦ‡>ĖõQ’6mĘOū¹'šZójhĶ9ĻĪߌ¾ƒĘžÖ|5ŗ'Óo 3鄚Ų|r™÷ēŸP+łż¦¾?Ā_‰óéKiö]>žWxų*Ŗė÷½²r8Tj{Éw0š>g¾·6ÅßÉ…SŠ'ß’gD…ÆÖ½(nyµc©«%”Ģ 2«(ō5V[fhX³Įąõ«N„Fę}ăzE0Mæ;ę•XJÜGB{U†ā ²•9«³ą¼ŽZäBŪż^nĘĪ3Öŗ[9Ōyˆģ‘ŽqšR]˜3õÆž ūZźß¾8’Ā©Ōõ Mjcu¦ÜÉ!EŠķ>P=>ułpz濹υ~&ŅüHšI Ŗi6š„īĪŠ"¹ć͌ōx7ę+ ±: {“×sÜĮg5¦јīS®=ėgOo³BŸb”%Ü|YčėÜ~"ø'Ml"_šp/ģ+…ü_ķ_šēD·‡Āž!źFĒŁ5%RK:ōĄ9Ēń)Ļ©ž[e‰ēµ…¤!™śńĶE-oÄÉõ’ł‚‡`6xõÆxšÅōŗLšŽé—rA1Į‡@:ēDщõg„5ĶS³·[Ū\Ż®1¼sé^+ń ?Ćz”·r¬…&b c§SÅqĘNö)õĄ}bĻ\°··7±DžXkv‘š3޾›£/,%^«ķ^„9•bÓ&†ńÄmv÷ÅzŠÖW)“qa»ŠźFE¢†Ķ®!UB¹'ŌW%ŖŁJ–ƒQŠŻ•7m5“d¢5µ§˜%E28ć#łWY§jĒN»Šā_-ÕOŻa~µBāŻf b8ŅāI„| tę¹}&K[=Æ4jӑŒö?…oŁ_išĢĻ$t…ōÆnѵo§‡µ‹{˜ ·ŌńK!ĮB9Ēā8©r+”ńĖ›ųo­eøi<Ū¦“oĢ3øzŠÕ}*#„¤±Ŗ%Ņ&ä ö>µ.W8 ;{Å»¾ŸRžé”óŽūæׯųRćH¹ÓŽ ˜`Żæƒ÷Ž*Ұ¹Nšś};F‚a䔋f:Åx7ˆµ8ī®žhvĄć8ĻĶcē xĄ¶Ž"¶ŽÆt\Āuä1é]†«׆õM»O.ĪįˆI˜įH_OŹ¢R¶…VÆö8“mhéŅcS¹‡l,«ø)ėœWĪzæ•iˆ£K­7΁\õÆ&øIœEå~č÷śS’Ü< ÄńZé÷B2ˆPMZ×ģÓK·¹¾“Īt/µ6/SYXŅ”?5DŽ ˆåLŒFÖĻ9Ļzō]>Ł„25¼…3˃ŒF‡}ÆŲKe°@ēŅø«ižÓõ­üNäFV,w4cĮśÄ6­v„¼Ī…Kr+SPÖīmgŠĪbŃ9ž¤ö Ø½Lk­fāķ™™Ē8õØtūõ“žów°QøšI ŲõµšżĶä6·6ØÆæ‡„v6޵ŽÕlē’%2ø5”–„Øw‹ŸN¶ø·Ņfžv`µÅ[ų>æ’Q9DbÖä w„nę§1«jŸ`»ø²P³l;NĆÓ=ėGBHē†{£ęyż@cĘ=Ŗ[6Š·×+;"–8'Ś»’ÜC«qqp"8ĶL[¹GYāXéśrįmīäĮĄ^£ŽµćZ|s©[ī ŃNyć8­ś·ˆ5 Ļ]h˧żį†ģēĖ!O?„?J‚žóFµÖęŽ)‘å*ųäŸóšÖ1°Ė2EuśKn‹6ē•ؒĘ<…a…ēn:×W`Ś=åéŠį’ [åQ»”«ŽĘ°…ξO i·¶ūe€5Ś E+•ĪŪ-&y’y-”NÕÉäœōŖHŁA‘kš“4.^=±Œ/$šņk»‹©&čå!Vī9?Z k4ŁŚ¾¤ģ¤(äćōÆńgĘķ3Į-„ jåŚa·2ŽFvŠ™;#ŗŸ›^8—P½æ×55g»¾’VœĻœ³Ī >œVßĮ’Üų»W“ń½Śōh˜¢Dó`™G~œŠņ±ul®~›įǼć9Ćåļįœ—7Ouk+yņ§o3ķĖhn.JŠƒ€:-^Ń,̳PoPÜb¾SīĻõƒƒ8*tÕ¢“ItKe÷™h»B™|¼WJņA=«)Ž5egkŽQ>Š…eć)>ϧ’£Ē* ²„¢29ēÓ„yO‡Ä’Ś-o(f†HŪĘj=:p;尉ŲĮO>⦟Oa:4»o9õ،uŌźŃĖs`ŗ5§œƼ‚¹įĒl~F®[hóć žµgu8€r $õ¬čŠjś$ÖŹ\]šTņ·×ō¤ŲÜ;o}ā­KQŅtķUE݆cŽ@~f9 O ēZź5mnoG£OجrOil¶±€0Eąj=”.¦Ī–«l‰Ųōŗ{k€Łž:qĶi jtGa—£¾0MėOŒEjL²oĪę<‘šē’ńR՟dü°ÓgŅåŌ/”ßz²lL©#©ę¾Ųš½äŠ"kFœv5„3Ä«‰»>Öt6„kÖį^<8r yŸˆ<+¦ź6/¬\\‹KŪt*8)9öŻõ7Įcõ>żØ¾ų—öZų©įæķÖėĆ>+Ó…Ż­õø?gił%zsī5wąv³-‰“ł”s¾äˆLyūŻ{~uN™÷F:5©sCUžNߙõ—Äķ5­‹QJŻÉ+Ž«_6­ÅĢPĖlčį†x$R3Ł‚¼lĻÖoŲ%4æx3ā'Ā?°E{āmwI“ĖAĄóćVŁ“žz żÅż”⓱ų5ąæÜ[}Ä¾·žĖæµaóZMĪAśƒ]“éhœK,MZJ;)8MzrøæÄču‡^*¾ż ü#ńOO»Ņģ¼;e”Üh÷±ął÷Ė#ßģ«…aī¾ü_šWŸš?Ąų('Œ$š†‡‹įčŽ#Kkt Üļ1ĢįG³¬Œ}ϽsāhŁl|§Ń‰eG(į“Ņ“'ņ:üb|mį¹ęO·¶‘†šNpk­7¢+Ź¾~½õģ«u&Čńlž„ńOŽkÖ“_Ų™ēN˜ŹčDī?*TäxŁ•6Ś?u¾ėwĒ‚žńWĆļĀŽ$0 Y!r–’ ä?<ƾż¢¼;ā_ƒ¼!ćо·Ö¬nä ņN VQœ$äkŗ2>; W’RƒŻ3ä­WZÓUŪmi}‡5Äxæö|ų™į½k7‡5|͹ŽåYT{ķ$ƒYN&ŅĘ#Éā·ńV“0]CDøŲNŪīėĄ¬oFÓõiÖźĪD“b‡ĶN źĆÆjā3žX…±ēŗm³Ć©Č€Ø]Ųę½*M"Ć]²m3Sڰ6š&?ZĪ1×Sެnp:ǁ¼IįåÓ//ŅćNø¹ņķ/£a‡`GŹĖŌżUū”’tŃ×Äæµ >ÖąŠūJ·šōŚ›E'*^6 §žg_ʽ\45?<ń·Õr n#ł)T—ŻĻ܏‹WvŸj[_‚¶‹%ō•Ę Ń|˧łü–aŠ6Ģc=ˆłĒūIų Ę ž>ų³Ā8I<ö×Z<ģÅ|ŲĪwąr=wŹó›ƒóՇĮįrźŸH¹’ä×_6Ÿą|Ć­ųŪĆśOĆæųóW×4+]WK¼0Ʀ¤ŗQĪH89ōģkóāwÅ+/7ZœńŪŲxz ³ZE‘61L’Zņ1R¶‡÷7„9 y)cq)Ę;E>»;ėÓk5¾§Čo”A£j–śtqŗ,JB‘÷@WŖXŁĢŠFĆ%@Æ<ž‰ĆRźm[[Z!•äƒĶXrqƒŠÄ‘V\Fńƒs¶„«žÕ:g-Ŗčv¶·rź¶±­†wIƒ÷OÖ¬iŚ‚¬”RFx³œśÖ|†Īw¦ßCiu’:'ŸZķ4Ļė §5Ń^,¬~sį/įóü©āh’Ėŗ“§/X?Ö-?ŸĢś.P@<ĄL˜Ę{W'ŖßG ™™¶œ` VGė1‰›e;ü“*œvu­«»_ķ< J¹^~é¤_)Ąé—ÆöūĖ ”%µŌMĘ7Æ÷‡µvŃ]Hˆ™šGzڵbe|H×Y|.ÓNĮŲŽĶy“~*ŠēA†[kč Õ!“ 3ó(~µ£––ߚ׍,§°#1„ą|ł<Šūó¾;Ņü{šŽÓ᷊t ;P°*b·¹ē…˜õüĶmō8%K™ŲłcįæÄ ąOŽVąü¹¤sZE³Ė©£ź+’éŽ-mś¤D=¹ –Ļ·½~4’ĮH~)®»ćO…ßb‚1’ģO}Ŗnķ×~£“ųŅØĢyĻŽLÖ5§‰ćŌ.÷@ū¤š=ź”LZ8’ės\Z?$6S4sż3Ū…NŅą}ÓļłSp%–īuøÓž=ŌŁÖܼ #H2[>ōł]¬`×rƇŌ6¤So,Ū€÷ÆQ–ĘeaŽž“¤ŸQn|<ŠŪi·^*ż” įpA#„6óC}:Óķ¹0ŪX“ÜŌP!¶–āŅIc+¹W$Ž3^_ęB|-Ć>HČź}Ø9ę_šę‰41»É “±ź}ėŃ,“+xģf½!|ŲÜW<Ÿ„Ec¤”D[×ųGCQi˜ifX™I\Ž(b;Š!’ŽéŚ9CЊ”-Ż®‰eēŹ7ŒzŠ%Ŗjā;‹{—’G•~Søņ1X²ė:~—tbY— yõ4ĄšŃīµĖ”eš5ŗ±Ę+HĶ{hf²–ę=‡ °Ē€ĖŠõ­·-Ć“±SÅ,šå¬ÄŪŗ¬qē*GCA‰Ši“źwJZņ(ĄU9Åxö³s}5ŻÄŅf&Voöęƒ&^YīßLūB”t+Ų{Wø•ž5čpw .s¾(Ņīuƒo4“OåĀp”N6ŸOē\ÅŪ½Æ’Ćlyœu ŁJē_”|gńv‹į_ĮVÖzHšōü,¤:äa¹Ē ā¼Qń®…ø¶Œ˜nU‚62HéM"Ōnr¾#ūd+k ²łYݰœīEdÉ:Sż3@Ü,KŁocdø*_”5V/±é’­ŗBČī~š^ćHƒŅ¼!¬Ćį¹.5 ce3\”ŽH[‚[ūēҽĪńõ¤{lKŽxÅ/sʇM?dŌŚ:‡89 iä§PŌ$žm.ģŗrą@Sļ]•įŻGÄé·Ŗj-Š [ĘwĒéģ(4·s~Ć\M*[›Wœ¼Ŗ»·µÉŻj¢^™l™Õ rTņE)- ŽĐ_Igq5™ 0Įē3_3x³WÖ4ÉähŻĢĮ¶9##iö¬ā‹Œ¬nųN85‰­£Ō­Ģ¶ī1!čø÷ÆAŸCÓōķiR žÕe£īj–W8šŒÖWķ¦›¶ki>B¬qŽk“Õ¼,ś\ig*ŠDFs‘"ž„j%)\įąūw‡å¼±F–8Ėłˆ¹9ĶUŸN×5 CA4ńJÅw.N=sI«FV8½NÓPѢР=#W^Uį¹üėŅōMZł¶µÉ8PĖÕć·ēRĮĶ™2iŠjś„żä+Ż‚įō÷<Õ}?ÅZŌE¾ŌLH°’p:QČĢe+»:>§{”jSj+3ĪęF)æ {b¹;?Šž"±ńÕ¶Æoēi±¶’(¦>^Üō9ęŖ1±“GŌ°k‰©č6Z燢³ū38vłwżTÖuī­ö‹y‚ČŸhpCįx\ÕÉf|—­é÷rÜ\M¾K˜•Ų# ĶlųVK6ø6yH6.Yū‘AG£Y“1,–ńLάr7>µź¾Ō4ŸKfnllg‰äY'fPŇ =ذ^<Ō4™/.nōčŅrYÓ8äąf¾RŌ|Mr·7sżæRµ½FżŌ…°±č ;Į-‡x‹GńG‹t»=w{_dfnpł½ź‡‚š×OŌxć‚ó]¶ˆ“ĘHü? —ÜzŸ{ų8k޳ŌuóFŒå±"§ż¬ŌĻć- “OŠHnļ~häܹTpG½fąĢd˜õņM‡‰.4Ė¢¶“Ü'ļ}E¼ēŅś4ϦiśÄVI .<²ŃŽ µŁŲ鶜‡Ī‹)ךøĖ”Œ¤=lE¼­)†/:@C±j¤-Š“žZ(8aŪŚ·RhĶČæ§-ŚŚj[YGņIę¼¹š}»|²p zzĖ‘Œó½āƹ£ėS_¼—‹i(Ā…rFzēé^žß¼+ØXÜķ›Qy¢Ž2÷⤿fyÕĒŽ“^Ļq¦Į%“yŚԌ‘ßš…¼ū©Uš$EĻŽĻZ å”Ń"h4?·ĖŖ[9w#ģūŽc_SõÅx¦Ÿe}uŖÜÅ,Ńä8eaī¬ oĒžšŅ¼sĮ,÷‡$"¶wń­#+ī ]OŌōåk;m®pIa÷F;³„j’Ł÷Lķ3‚ åQ) 3 Ēß~Ója–E’v£ę'§5å\s‰dvYpß0Č®y”3f]nŚŚ7ŽMŒÄćiź>”Č~Ā#_֠ţ*čĖhE܊³(ĒSĮ®wūd“¬Ž°Ä›ølńZņŻIXŽ+ū\ÜG4Ŗ‘…;N3“č+žÄ `³™ćS‘ĮėķRé’\°Õe¶šņØ·fĢ„Ž īµ]MÖ3g*2mūŁę„ĘÅ©÷8kmRķß÷’ł©“÷V»6Hā–ŁC`äē½g4\]Īä±®VŪĖ9f;?ˆžę²¼ØÄBpŅc×±Gūb¤(äg= sŚÆˆf2±²‘\—sš#\ec…Ōī..ęē‘ÕA¾ü×č4wŅ_hnP)-8?t⦃ęŠgniC’I¾§Ģ^-Ó-ģ’ŅįaĪ6œŒóė“U¼3ā xnöŻÆą’5Ÿ0–‹ųX÷5ÓŹĻēgćųĻPW³Š[Żö4Ų9G=ņpy¾dń§ĆųIdm{M[cūˆ?tōź)[”>Tń}…”†i¢¶DŻņŒp+Ě9l®Ņ=±™Ę‡A]TÉrŠż ż™|r—–7 żÜpcóB3Ž€š}ųĶ}£i\Śbš0Tn\Ó©‡Eē; Č` įM|aūAx.×J½‡ÄÖvRĮ¦OGpÅw4²xēōÆ>¬G ź|¹as Č­ ½TwöÆģÅńēDÓļü $w–ś ĻnūĄ"w9äļŽøłONƒ¹Ā|@ŃuķÄ[ćkø/moUŁÕpUnc®0+ūŽ’‚a~Ó_ķ[ū"ųRę]Yõxa?³uE‘ƒI!\ Üs‚‘ŸC]Q…įnĒ”«rčrÉ„x^«hČ+ކ¾ Óļ—Y“‚ü!t'·FĒQXŹ:Ō‰üüĮ^cēų‡ąmn×ĆŠĻ#īm[A2<įĢ‘}1ų{×ń]āż2öŅņāItß/Ė•­ēUC¾)Tķ9 ĪiŅg%Jgsj"E‘£f'­s·;ä-åFcvĀGX؅IJ'”»@>µFŠ"–"GĪ5± k“8ÉŲOJšę»2¬8äŠij\v,T`)ŒõnÓsV8 ÷ķAŃhjŻÜŚĆ.™0ƒX²•nķ& ŠĮøaČĪ+ż’ą”Ÿ¶ž‰ū]~É>ńC3Ać=Ćž µ’Pﱨ]ēų°ß+ ’{³YN7LėŽĒ跈‡™jŖŲ2·­ygŠtĖ;›{ŪAufąĮ{ó"<?ĻJó+!Ÿ›æ¼!†uOųDŁ^&™nés Ż±?¼·9łG©ü+šļž Qū=ÉńĀŅų‡Ā#½ķ¤fūżWά§ēĖ~|Ö1v×±œ„Šžsī Äk˜eŽełdGž~5Œ6Īņ.ĶØ­Åz“ŁÅQšŒ6ņÅ{zf²džC’Ģ~c]&1 ę-įČŚz±ķCUvUŽć ^ōó"6ć`ĢcĆŚ­ĒxQ r ŚNwzP8–bšćŸjÖ+ęCę’»”ēšM›ÓdöšÖµįŻODń†ī^ĒY±ŗKĖy Ęčw żqĘæ»?ų%’ķg¤~Ó ¼1uöž6š&6ŗ”*<Õ H¼ŒńšĘZ£­“Öō½wKūbĢß¼>MĀ“Ģr×[~ŃéÖ+qdŅ\Ü[.J/,ėķ\sFŲó/æ<%ūNüų‡šOĘq,ŗ6æe/Ųeeģ.J²!<†ÆcźküÓhƁž$ż¾3ųćą’‹-5 }{H»›OxŽ<)ŲOĪ;Ćiu¹#hÖæó/ĖžZģ|č ą-dF|Œą‚ z†õgŠŹŽßT™ÄQć g5µN¤ØžĮįmbźG‘`‘!Œ o_zõ/Zéž(š“m|U5KB$Ād8õļ^|÷7>džEÆ]iQi±éWW6bŅmč‘>1Ļń…~œx7űė^Š5Tx„i!Ų9ÜAź{śW”‡ŲĘ“4:!!YCn`ŁĖ8a]ž”4D&]šƒŅ»ć±Į8õ:Ću @…ó±\F­«¼nńļV„żåōśS3-A-­å•µŌtĪī0M@o#šI u 0ć5ЀߵŽ-Iq\ĶĶ»-Ņ"’Š­Šw Ž ķõ®EO=+×-lü;®és[j—½ĘŌ!±†Ēõ+'Jå<ŽŚÓRÓõ‰mn§[«u•¶2¹8–+ØiµüցŲE·žzŠ\ “+C©Ł›ø.!ófcµ[~ŽłŖ¾ŗæµŌēI"AbßźˆĪGµk¦ ßc©ń=Ž„ØHȲ‡+’ž4µ“TIĢ –r~ķ2¹ĪėĮ×:Ō6—¶‡ī yč0CJÖų›y¬ųžėĮņŲEw4Vs>ōŒpxn£ńš)JåŸ ų‚ī÷WF“æŻql 4@µ»dQ­ųl뺌PÜiņ£q2ü„dƒžÕGžxöóūBÄpJŅZķŽG5ĻhåÖ ×6mÕ¶8Š;×öe¼Ø'óĒŚxŅKų¤˜FĶię`—ræćUÜ,z&»yĖšCfĄXĄ§O{«{»{y-,§X‹fC·q§Ö«Ÿ¹›ąsÜj7šÓfe'Ź]†{õ’iQé²JŖ×}²84„ ŒOF’Źõ¼?āė™bņÄbFW‡Ć ł¶Śå/fĀ…]Ė•R1ŸĀ ²}6?ģ”@ŖöÓJY×¾O½tĶ•xs<ėdاØÉcŽq±Fŗœ™…p€ąž£Øi–ze¬¬O#60ri„ŠoLÓō}B N:ā čۈ¶œ{ē=)— “•m-ÉE ĆxÖŖ6Œ±É{ĢBL—\žzŌöZi³µĮłŲ.O*€Ä¹Ō®šź-eyP0ČėÕü?©G„ūj©-†ĆÅsž5]'RÕR‚D1:01šÜ‹[·›H‚ŚŲĆ5¤HG­+%Øiš„”¢I&xxU'ÆŅ¹ÉY5MFęŽ%»jõÅe&6„cv—.ę6ą)ļ[ś‘„;S¼ÕBDWŹ;w>sŪ‘G3v1tķz [†HŒ»QĪŅƓĶ{"č‰<śÅŒ~l1Č[ĖcŹš2qłRæBć+Ņ#±Ņo&{‚ö· Nž×­hŽ;¶½Ņ§Ńf€3/ĄąązŠkŹĪKYŽ «XąŚŃ·™ņҼņ;Ų[|žbÄx"Xō]=ÖĖA—Q²·”āLž2zW,š†Øķqwf#Nœ€=؈µ-*{V=Ź-ך­­#O³¼Ņ¤†xVyN?xA ‡=±A¹ź^ø—CÓ`°¹ŗ{ĖēĘ2JĆńÖÆ­h«o} Īā#ߜž£ņ ŁM&…©ßj:‹\jŠe•óóc”®æW3Ū²ģ“ĪFPF8Å'ŲįNŸż£Ø1TXõ÷­3ZE'–@Ų>a‘Ķa%ÜÖ3īd[]¤“ƒvOJ߈½É1Ø9č)a—³I†ui[ öŖŚ}m¬ZĖņ}a 2ō稪Žę]OPń“·šYŚ„°•‚y`‘ŒWoąķ>ŅŪB]<GŽ?ŗqZ£TdźVöVz‰fąųÆ(ńŠ¤ÕXé°‚Ü6K)å±LڜO)Ōt¹w4Š3²õ?J±”HŃ]Bāļ0(:–‡ ^ų”é×)³¤Ī”×2 8ļÅrŚDPGwlæfˆ’ĘNüœā™£ŸcÜFÆo=œ‘Į3«ƒŸā¬—ÖÓL’8ąó.;·Ø¬$µ \įmÕZļĆńZŻ‹åy#™2{»­@Ócˆ«FŽ„oåMżČłŸž ć?Ē·÷ķ}į˜ķ×ĆZ֞…¢Ą_2ń(>¬$.=±_;YݼwČP9ģøėÅUX®f~'ĆX‰Ė'ĆN«nNnū¶ŅÜżšg†læį šņĒnžXĖ>9=F>•ÜčŚf„„»§–įīäńNŗ»Ÿ\ü-Ö`×tSCŌÖ5 hĻŻõÅ|÷ńõ"T[;Œé«‚Ld1]‹bš *ÖgÓ_į³ż¬c ųGPÓmµĻXÅåX]Ŗā[ ˜WåķJ¼uĮė_Ž^Õ_Į·zEŽ£ M©Ś\˜¦‰øt–2UŌ^ \„ŌśŸ²©ˆĮˤļņ–§čŒPxŪIMcB‘­ćøV%óü¦¾lÕt=KAŌZĻRēg!tašpµĻŃaŲś§ö=ų‹©üż¤~k–ļ3i7ŠŚjĒĻīH<}3łWīˆž*æĄŚ“ųŸO{Æ|#ńōQ5ŪĄŪ’³Æ×XĄŌW} ā椒¼vcBŗūt§Gtßž§”ś‰‰41ĶŻØećØ#"æ“ßų8bČCū@~͚‚$‹$ž¾·fQ÷€øĪ?Ļ­F){§ņ7ђ·³ćܾ’Ķ%’’MŠ:ÅͤA †ž=v×¢$žĖ“.xƓÄÅ&Ļööœ®‡jŸ±Ÿ“Ļi ž<ÓtĢųUø ·~øĮSœyŹņģį©Ž7gń/Ņ‹³,»ˆrÜÆ,m:ó‹“Z¾U+IZĻFŪč‘üÅ|#ų©éǩæŪkš“g7lČ Ó=øé_^ų?ąÕõōŗ…޹§µ­²!•w.Õ§±?¢qÜ ¬ž¦ƒü/¼×“ŃØųIZ÷O-³©ŪĮĮĮü hé?u 6Öm;R‰R6Góœg·4{Ķ­Ä‘QµĻ1»šŖųFöw‰”˜ˆ÷Ĭ1é‚+ķ߅’±_Ā’ŪŪöqų‡c C§ųć‡o 6×ö1šYŒE¢39G!¦8÷ĖŲkcć¼G㊹VM,ړғ‹~iÉEžgóoįųKĒ^,šÄOģļųP“KŌķŠį–hŲ©9Ī9ĘkŌ,tĖ©„0ZĒ»hÉ'¦+Š­6™śīMކ7 OEŽŠ’}ÓWFģ֟č¢Ū;Ų8pwoĮ^?ų‹š§ā“ńCį‡µ’xćOC7–N>d'%t=Ō‚ iF­‡›dōń”'†¬ÆNiĘKŗz4{÷ĮŸŪ—ö–ų[ūBźtĻéŽ&ń~“¾Oˆ"Õc&ŪUP .ä ą`ÆLz+Ū?ißŪ·ć‡ķC©xv_Zų/ĀöŚt/čI02– ¶÷“ŽZļUī¬~OKĄ<Ž9¦4Œ•ØĘ7÷l“M®­zė×Ļć»[i.$¹–é|Ū©X™²wg×5…ŖčZ†ģu-Qķ`‹ä31Q޵ĒZ)ź~ēGmŸųs‡įœ5|.nP«VuuéĻowĪÖßCӋ˓Œåxā¹›9ć›7±œ“…÷®7¹śµ7”Æ[@bą1ÅhZN>éx¤h`köĄ\A+ŽĆ®=)Śd²M®ä)ģyųŠ–=;Lšfƒāļ‡>3ѼI1Óīn­ŒpĪŲŁœŒ×ę.²ž"šv­w¢Ü\Yźš7—ńĖP;š>~½wv‹>Õb_Xk7¶¬.aĪ1Č+õ#ą’ʆz®noļWEÖ­ŪtHĮ¼Ė¦ōōŵõ<T%5”ńāćųśźKŠŽ]“"1Ó„x„‘Z“ąż+NDU*a¢Ų2īß·ÆNõ_P²“’+{q, ÷NMc(#¾4Ī[Ä<=āX­¾Õ§ÅoynŁY¢bŒĆѱֹķcƖÖq,“³3“1ϵbՍH,“ iąfdV`Õēž<ųKcqoˆt‹ÄP‰Ē›nT€@ĒĢÆJV<ź°8o ų×OÓ'Żź°[¢äe›9#µ}ąoŚ2ÓĮÓZ_Į¬}¦(eĆ·pn{֞ÖĮJž¦‡ÄƍžńŠ”ńTvSX¼®$F…·69ąs]‡?hŸ ĒrĖåĢnGc)N8”z°Āst>ˆš·ķ„4ėk-<_\G0—ä;—š¬cöŒµŌ{ó–=}Ķrhö…ű E*X6ÖQޠЧ¢i’Ųö‘Åw|×·q¹ Ä`…ķŸ~•/‰eŗÕķKiĄi nŖ3Ī* /Kc{²ÅŖØ[Ķ `sŽ8©ü)µō÷‰ŖÉ$VQ«*¢¬Ģ3œóŅ€8jbÉnt­,¬čč±\°Ē§ņ»}]I—÷ę;†?.ó““õ ”¼ą»])4ŪL5åہēĆ»nH®śļK²¶34 “–ł¢Q·žtšē“ųßĮ’ŚmÓ•Ø>v¶=F*&š“śfoo4=ą@²9Ī()$cĮbžD(‘™PĒxēPkƾ&x_D{XQl&œ±eRC`zŃcK#žŃ?³,lŁ'ņ@ĄĘr /śbĻę·•95<½Č“ā7MÕÄm`“¤ 9_p:ó\^Øś§†tķ: $VQä|ĒuØR#ČÅÖu¦–+ˆģ ÅĆøET*¾¦°¼Kā ‹Ó¢¶K˜%•öĖ‘އ3Xß©Ģiž%°šÕÓMÆ)Ō¢fČG$°>Õģ‰ć /ĘZ]»ųjё#Œo2¾a’ ‘øœMŌŅĶ4dČ9`£µy±„\ U.ģąXŁx8{­#.]lz…“ c_ŽīŽ{ek”MčG9ō⹿x+X·±mHŚ\ją„xąL±T£} yz ü3ńHÓµ;ū­;SŃ4‹Ņ؂ąÆīł×«Ć \YČČ]$cĆ0ä1Ŗöfr‰ČųĻDŸM…÷ĮÅ.ˆąĀ¼‹G·ŽĪā}Š?•ž7p~•™Sn&ø¹ó‹Č–ĆåĀŽEeė7Ś”Ąé¶o<Œ+ēŠ‰JÅ-5=ĮŒŠ,ÕĄŗHŁÖt?ZŹń…¼9«Ow‚Śż¦)X»'Ģ·5I–¦`ź 4V°i±^Ć%ŗ —®Gó®ĒįW‡#Õµ‹}GƒPט“Ā‚\ØÉs#KŸTź0Ōāšī„ąķEdµø –IŽ ńĄ·zų£WI|3vѬźĶ.Y±Õ½ź\Éh«£5ž¢ŠÉo!ŽÜåŠpÄ×u…Ģw6ŃŽŪ4(;ž0=i9_C›ńl"wŸHŅęJ£3m\«{zWošū\ÓōÅŌ5iēr—• qʗó·‡#·!†.qäńü«Ę4/ źž$ˆÉdŖTī(ų±ŚŸ³4W=«Ą#Tšę‘—ØOpšĘķ'”[>Y>•ģĖć¹4Ū;[ż:Ģ3”Į`3æ·"³°¹ ŽŗŌ|YØ^}®#gC ŪógÆ’Zŗ‹84ŲZViJ&Yņ2MŸar#ńGŽÆmtß²čš¼6̟3ʇ/ž¹ėÅ.“’ė÷$6·Ņy§h/ <“ÜVÉܤ¬vw’ ­ģģŅāāh༌ søW)?Š Ó/ŽžÖžj¬kózbµQDŪ["ńŁē7Vv÷ųČb=k#PŌõ^_ōö䑞9oĘ¢~EsXō xF™me•|ēĪą„dØÆMŗųFšž«›u‹U‹$(›|ιü«–Læjxƅ<-©ĒytŗāG`ŠB@[½wR\Į§ęŅāĘK¤‘Ā,±Œģ¾Õ“z™JeĘ·°ęĪŹŸ³cēó‰bŽü’*-tķ-Żeas»8 U÷0ęčh]ß[\Ś­­½²4&į/wč+šˆĢ÷CuĘS€@Ē­ĖL×A¶uĆļŒ ø#9Ŗš¼žPO³²qŒt¤#+ģ‘M°_Įęmaøł«’ašį·ž+u®•+Ügր'¶×¬¼-k<°ŁŪy§‹Dō®KŵƈwĻvˆłĮ?JĖŃ™2©`ÕÕ\IrģŁåė×÷¬eø.žt‹Œ»){ž-ž>•‰ā‹żRŁÖĘŁVÕvdq‚Ē×4–ę±e_ ųŸQÓ¬o#ÕPŽō Ū¹'ߊóké¦Õu™žānŒē` ž=s[š${•—ˆt½/DŠĻģé5ČP7…ĮłW:Ž ŠäH8ĻSރE ⓼Ei-üÅR6ŸėVßÄŪ@¶kf% ÉüiKbdŒ->ćW{5Œp1Ļ˜ńŲÖžŸ¤Ī]¢XŹD©»qć'ұ „­ŚĒ²ÄäČv’Ćéß5ꂦĘH¤Žū¢rś Ö RČo£µ:z¬,¬īŲOšā±ķģ”.6‹É(ø99ēŌÕ8Ų†"^s,Šē#Šķ$"¶¢Üѐ܌⢠¬7Iļ] Ŗ*Ū@Ę}«¬[iPye3ĄĖćƒ\Ó6б}åK@" $`ē°ÅRžŅµŠ/$/žsŁ}«•ī3œ¼ŗČ nų=«ŸææH`ģ ^sU÷žöYĄŒ3*ź:֍½Ŗ$rH„™3žkP"žĢy^N<zيŽiƖĘß|z ¾d“GM$~žŁėŗw‡5Ww…įY¤ ūµf,s…Mz_ˆ—B“L’ Nxō©ęß2Ķņš»kݱó“Ē€ų_UńLśŽ§Z&©=„ŒČf)„`ī: ö]z “‹6‚”™ćÄŅ`mÜ?\süźµG£cÖy̌Ņ3°a¹¤nƒŲV“Øźz™ ˧ēČ!½G­ǐ„¹­ÆGŖųP蚆ž‘ÜE vŖ»ƒg8Ī}+½šĒÅI|Qe…5”VÖVņ—UC»’/„?ibnmj>>Ńķ™JÓešęŪ+łŠ0=óŅŗmwÅŽ'ŃY$æOķ2¬c¾£4•N†R§Õ|ššėž!†-DŗX4¦0čŸpēž5õŸ…¾ŻhWזž-+9&żŅōeˆō'#æZ©j]5cāߋšTŗwŽuai˜į(ÜÉéś~•‘¤jz–…nśĘ•,Ļń>“~’Ɲ» Ęć—ŠŸJżjšŠģ|M”Śźś|‘<&p‘ųWKfR¦wŌ8ĻšÖW‹|>¾*šĘ„¢Ü̆6MŹ~pŻ>CŲó^~%[cJtŗŸšŗŸ‚uÅ÷Ś3ŪÉmåN#ņŻ6²©čIļŽ½é!š¦©g:‰mķa‘\ēĖŽß„q9$zŌ©Ų÷›’Ł|Lš®ā{V/퉳¹*ĆqĒBGįŌ×Ū’šIoŚĮ’dÆŚ”t~ś;/…Ž'†;[łķŽ÷mBGrIĮśÖŌ§©Ö––?³WĶ‚éu7Ž}6éEų”Čx›‘åųW“ü/×”“‰¦łs½§µg/3—ĒϧŒ|y0¬Ś…Žo-ĮƒüAOn žæąŖ?²ŗ| ųµÄ’D’š®1xcž’ Ļf"wń‡¦ūUˆ qåÓ#ØĮ=}O„~yüNšŻŽ­g«YéÆž…©Yŗ*ŗ†Œ¾ŽPū‘łW*ģa3ųõż«žß|ų›Ø^ōѵ)äXįÜŃ$É'ށkåqoöydrܓ߄zTž‡HIß¼ó•<¢ē­Set€I"—ö„v's$ˆA"²˜Ė/§­°H'AL øfPˆĻēN–݉ŸAA¬€"²“›cR{š «lóĄ’T°ŪŽōš:)ö.ŲŻ²m,6>}8ÆŅĻų%ķ=ØžĪæ“­·„µ-V Ā$š4·¼8m/Y¾B{`ž{V-juÄžī¾krė:¶…®Ś_X’Ā;āXžÓQd?&ØFG͌įCuśÓ©śkĮöś‚il¾!¶«n^¤CņŹ ą0²qڹ&Ž…ŲģtĘH•RTĘø’9ĪkłŠ’ƒŠ?cH¼Yį? ž×žŅnžK7[ hņSoĢär¹ū…­pā[I4ÆŖü]Ÿą’C7=Oć†?*š›ā<—FÅĻCļN“‘`¹e*J|äó]2A÷=CL¼–Ū iä» Kué[Qj7޲KrīĒ…śW4£ŃŌ¤¶9©āI.Į·%ęrXįxüM}sšfšķ…ŠĪ&žŅUehŽBBūJč¢ÉÄ-­ķ7H‘a³ÓŌWIs-²4EĆ£Æ?€®čly54*.Ŗ‚å –w(pW­Ū_6” Ü·łłG8­cn§:Fž—ąė“ēŚDS(\°qśŽ—}įżUąŌ­¾ĻŻžō«sCPeųīœG“°'ėŠRĄč5\€Č-‘Ö„õ%£/DZD·³ź¶¶RElÄaW< Οģözmµå½óĻ$óE“˜žµE)XÆeØJgŽGS'Ģ8Ī+£×5ĮkCn§k”Ļū?ćI®‚O[œ<“;B$°Ļ"½Ā¦WXfŽ4(Vž÷5*KbOFÖ­ģ`ˆy²Ä’¶Ńüė‡Ō4Ū;Fŗžę#¹¾`9ھō½”¢6‹«®›%½•¤hm§`„€ĘŽ:×yg}żr÷s\\E¹J§•ŌĻ҇0µ>Ņ!æŠ|Z5 hŻ"øaēH_L×Ņ-ćķģ¾Ōm­ēŗS±0O­AQg„źš£ØŻM=˜€obÜņO5×®ƒ§O Ą‘®Ō“/ŹĆž“ģZv<ŹĒEÓmļQ¶?’_<’Ķzäž#Ņ“-.śH—csGCŚ©@%]‚źUV—x$)ā»ųJ–ąäO,¶Ö©ĮĄń„ŗn…ocØĖ!{‰ 1ß·ņ®·ĀRė~!·±¾ĄŽĶd īGsŸŹ²hIWÄ­aģ4“Y›Ģ# źqĮķ_4Ć,š\„§+¤”†O%ō*;ĢĄƒž½~“Ė»¶ŗh£y_ {3@u•Ę‘h“[3Fd=Ē“ķõ9ćhd•VWF§֐`zŽ—į½:]:k©ć‰ne†A^Yā߇ö¶ͬi³Ķ=ŖÅūĻ0`)ZŠ.yrģIĖoš¶Ļ– ,_n8ļ@Ņ|7=¤P\^¹, jÖÆ¶wL³ĘŲ#‘II Ļ–Ē˵&XÉB8Znön•v6ņŗŠ™K ŠQ™•C(ŁéVķ­.-ƒšMå2Ī²£Ōµ(äÓZķÄ#Źūųæø­?kš&©¤jPj02!WÄą©ĮĒ¢yž%Ķōöļ$‹øųĒZśKÚ²Łč6ŚdN±<)‡ÜxcA¤v<_Š¢½ÖĪ©3pH*§åĘ{ 4kK»}TÉ F–„Ÿ•¹4¤ĪūU±ŗ†Ę;‹{y%óxĀĢšó)ō=¤<č`ł³Šßs^5{}« ĒVllż‚I^1µcäd0é]¦”į[æģ»jŽ@¶H72ó‘Ī R·'”ŅÓuõ’1%XžxÉbHńÆ3¾ŗńO‡å×āÄöęQ%¾Å9UĒŻoĘ“5‚Ō䵿\ź¬Ó<Ænū@*ĢA3‡-0½ īh:ąŠwņ¼nqÄdqYzl÷0_C$ƃ‚:PYģ'#W²ŅÖuY6ØĒ—ÕI<ż++ū"ÖÓ÷J[Ź\aÉėÅo^$Siˆtä?iHĪą§–ĘM]Ņ,.oģD«芐ܿŅzĮ³Jg—xƒJóRo²&ŅŽYˆ8ĶdŪųy®,®&Y‚²ß_aHŽ«ü-±·h.X›ķA° <ōü««ń–•omū³(t–<œŗqČ”šžQ“ö1Ÿ)ĄN§=Mkųi„³]™īŒŒ>eR>謜˜ŅčlźŚœ0,n×SĮ³ š~¼ źöqMi$ø ī9éķRäuÓÜü½ń夞7ń¶Ŗ4»ÉfšŒX–\Źß{Üv­]|ī°ŸĆ––žvŗŠ~_-žzūdu®J³=¼4od·;ĶH¼Km9u‚;āŖ$Xś!c„zGö|ĖåDŲPFsŌ×Ļc*ŸėW„Ü'<›!Ćąk+Ėm%&äÕÓiņߖéėk&{s¤¶ŖėwQ]Z½«©£Žø+h…³ŁBƒcC…ć©Ö¼‡=OŌéĘŚž½¢=“óB'slĄdŒ…ē½m|-ųwińfļMŠn-c†%Ė4a·°ĒŻĻ±­ć:¼§éOŒģōū߂/ń„ęae„ŠŻŪ„•˜ķߏ^õüņXŲj_>%źś ięҦ =¹$¾Õ įXöĘéED:ł•Ļ£lo¼ūf‘A.õ5ŃiĢ1ę`HyĶr5©ķR–—6>ϧ©[xjC÷7Qļąå™@ėĘ»?|Õ'š‡Œ>]Ėā)m”’jiĮy:ķīśÕ¼ŁJ²<«Ćõ¶«Ćl Ę6V*Ąą‚;×n’­«@,*šV4SDŗœ°jE؄$Ă­ž˜Ļłü+ēél†›ØĶ)sæ~[ŒW4·2¬ÉļµāUÄ)½ Žx85ķŒ-|ešś’þ-²™õ”»I-ö°ņ–1žGæ³ęÖĒŠ“>tų“óéŽ*š\e#™³½¼„ņ«»3łT^ų“Øü ųĖąļZݵ½”Ó %Ųw#ĘŲĪGįł×„†™ņ„ÜfÓ?Ŗ½ o |vųi”k¶ŪĶeØŲż¤¼n×U<ćÜץž1ųyw¤jל³§Éki,O(goˆƒózōĒē^¬%”įą³ ŗlūĖž )ūij#½ųļš'ćˆn&šę‡kų~yŌ²Ēit–~’)€ėĆWó_āļ†šxGÅ?ō;+ˆ®t×oŽĮ€ =±™¶žäb°ÄŌ¼l~+ąöIS/ć<āPØÖäšģŪmĖīmżę§…n·iéo&ų¤÷xoāĒq]¢G)‡ œ}kÉ©+½Oģ U R„¶†y¤bĘ…‰=ø®ŸąD‰7‰“ĻDā‚čù×å·p}vÖ“ pęX’g Ÿ¤ž%ż›<#ń›ąGŋå:~›ń‚Ü›’ źKåyĮP1±Į«ƒžšōÆż†<)’®įĻŚGÅIĆįK=VęłÕ÷ i¼–īH,ļ^„:1ęMģ~ ŜSZXLU)ķšĒŅQ·ēsń£Uń׍|Qń āEՂXßx£Ä7ž ž%$łm<„¶óč1WtŁvjZ%¼° <ĖØ¢ S\ņv' % „¢’ū•Ó­ę+kTX†%M€õ vÆBšõł¹€‰ćĘÖĪČS‘j–=›ĀzMŻõµķʖ¤l!\/”ńĮĘ’Įé4°ŸķP“œ×TQ„1V©ŸSö ń‡~5Śü,ń{Ēkį?Éöh/$›`ÓÆrJ8'ŽOŗÖæü£ö.’…ń{Jńf™~ųš'š+Č­|ø¬õe8h܎Ģž§"·Œt9ó^!ŽUÅŲZ54§‹ƒI’}j—ä¾gĀß|}©xC]²šÖ“żŁ|¹”ąį€ōą×Ņ’<.š®›.­l±ĶsoŹ{ŸjØĘĒļOFyW†oõ jŚˆaŠd½²˜OķĪÉóõÆzųsń‡Ä²x¶ņ}oÅSÅ$÷ÜDn›|PHŗOœqÅtӕžā ƒ ¦Õx©4¼ÆŪī?«æƒž0ŸĒ ¼+āk»Ū żFāÕMĢ–Ćelšqļ_ΧüK£ÜE«žĒ~)Eöhīõ‹%čw“p•SķĆĪ“«?uŸå7ƒYŌ9üPń&Æ1ńW޼{ć½Sg—öµŖĖtażÄ p?^¦«µĶøÆ"Ć×­ UH'R „++¤÷Iłõ?C’eØļ5gŌ kt7 æ>fsž&æDŅ$ōHm ū6ĆͼčkÓ§©łwIŹĢņ}Jū\ųu¦I§Gi ]JĶ Ŗņ~SłōŖś-×ˆō-JHį’źu_29ČojŁ@ł_¬­Ū>~ń†™ ͤ_Į$1Ē/ļJŽUsĶ}»’“ń֙ąļŚāĆ>ĶęÓ¼S§FŽåß²ZĮõWvŒ.ŠŅ›hü×¹/ø“^A„Ėvkå³'ĶĒ ×&*ģż{Į óp¦]’^i’é£0hĖrr ļYs'˜Ū1ł×›d×cKC ;f‚_6=ŹąŒb½+ĀŚ„Öw÷“ĆčVł’N„UÅźO±;.g–HŃ"RIvö¬’Įm«iwšc•„Œ CƒD¦5(x“Tæ'LւR¼”÷”ó}?żU€ī­Zīm“xǜb¹e#¦šŲ÷xåņ |ĢöØdŲŖ®ŹA53]N†pæõėĶ3Ā‘E Ü/Ūn ¦Tš¼“ł×išOX³š†ü?āŪ[)ķeamø ÆA½—æQł˜Ē¹ółž!ĘÉhŻü ‡ā‹čZ‡ƒ`“µ×õ’) Ēt8” Z_‰4Ż~ÕW™ #žąƒé]>«ĆØÄ³9PĪ7.8ⵌƒŁŲÜm‘Dø|ńšÉŌ$æŠā÷F"CŸZ¦É7-˜Ü"Ź[†k+ÄvBóD¼ ”®bżäyć8®ynŸč·Žu¼lˆŲׄvP,3Ŗ¤«Ø9!†CVz‘*iž=ćoƒš‰/®u=“MłH‘vī}Exu„u;®4żQ"ß›r²”™­*(õ]'CšõÄQ’héóŹėó ­€ß„vvžšŌ×płbļM°ćxŒå—éұēw=¼6…ū éK,˦j¤įd˜ķǹę¹+==Ī”qnóĆt‘9S mŪ±ļ]äoYĘŚr3ŪZÉenƒl„3Č挠»¾ŌE»G "IźkŖ3>?N:–ü ŖėĮuq؈āuf ē†_„7F‘[¹ŽÖ_3#ŠÖš3ĀåGBŚlS`Éķ\Ɗ”„Ķqeā(†m>ļøaų « .‡SįwūGH³‘afQßł«7:Ŗļhą™zfµ¤õ4qŌņü(ųĄ¾ųķńĀžųoć‡×6GNÖ,ļ%’‰€ g–4+· 8,ĄéŸĻ/ŁŪąžńSāFŸ”j²=¶‹kcē°¶] €:WŁ`”%I>Œ’6~±KбM’s’MÄżdšŸĀ_|8±¶°š‚[CƒŗB2Kž§ž•ķz† ņF‘wē'=«ŲŽĒó¦"W»ye5¼s“l¬ż3ĶWÓģon#9mćĶ\V§—6YK=ĶåK'>*üövńÄ"'Ķ‚1[ŅgG¦źöń"#)a·Ö©5ģq]!€’O#ņŲŌÕMi ±H<ŃŌwśW0¬_-ё†±Ķ4ģb\žŚ²ŸmŹ[Č£x«{ ĪŅgæ•·ŻMƒFV®×Ń\ˆZƒ°å±ÓėXk—;”i·æ•V‘‹‹%[:± Ąõāŗæ Ē»H&aœ×­>nä³Ŗ¶Šķ5=^E»;~N0=ė^ēƗ"ķM¼³Żó³„Kw1”®nĆįō¹ŠHšAŽWŌÓäš’Łccy:łXž&ēņ¢Ä5Šį/üiØ\LÖSÅjČr¼rKØx/VÓ-­ݾ¢¾X`aū£=5rtšEš‘%ž5€*üŪkedÓĀ‘Ėp~é¤įb\;&³w;J«ū;†Œu 6Ó^ĢŽĄ“ ÷õ©!”ŗõœ i‡}ė™7JØbŒ~šq… –ģW·’a)@Ģū›ą×Aucp±ÄIł½č2rdŻ-Õ$„±žU]n/C#GĪAéX’;X.ŅK“"ē'Śŗ+E°*I9#½0:+yUādA¦9Ŗʗcs§HdR ĄśūPĻ·r\„Ōök l'c­pzÄwš}ģ so?•y›ˆłO·ė@Ņ4u}¼go·o P ƒj„ŪŲpį^{.}a•”.7+ۊŹs¾#š„²±‘åxƒt ČĻ„sžšńÓFrd™˜ŲĒąPIÖOąÉõ2ī Ķ»*œŁķSŪxR{ˆv‰¤øŠ!½žžōĖs’ÖaIīę²ŁbUž˜®ŸĮ±xąvHFāÉźŌ•“=–ĀY4ˆĆn|ć+ ūĘś,':­ķ¾Ÿ¶įę6­q¹6”ā_źa"Óī”Ųæ0č}+†ÕeŸLg$łqÆ%MrŒ«›ČuŠį抯ø$Eœq[÷VqAĪÄprXõ ’õ¼SźS!Q•lrj{­u†āhdD•Üź~”ĻųsĄŃ޶§{ؤ—3ŗ±RŸtpyÆ>·ŃZ×Ä*1d~ć„4ŃjZ汨%µ*Š''<=¾•RĖZÖ7ÜŻj“½ģҶ’œœ/²žT2’/[Ķ į/Ē„h]x’%Żu_Ÿ8 lUÓī­®'3€Ē®;×9ć_ Xź°‰Z6›Tdr(Šųļ\·Ō“+éģģ"o“+‚<ܐF{VÕ½ÅÖ ©nʱJųŽ3Œ})5qņ³ŃžÅk¦iPĒŽl¼/Ė’GNµę>0³'ū®“ó]GnTF”±Ą9€¬Y’ŌŽ5µ…mJŖN VÕ“«›D†üŖ!L… ęƒHŽĒκ׆õMSZ’iDRŪ³³>įŽ=±^ŃąŻ?NŅ-­tÅaoo€Yœž=³AH_ŌŵÅČ“’K„)»ā”ųc—‰µĖ›mbŠĒÉ%%bwsČĻįL‡-OcÓ­“Į­]]^G,Ē Øąmö'øäÕYüO„›+kĶ:O:ü1}Ą‚1Zņõ9—§ųśėÄ%4ūŪčoa‚Fˆ yYē» )Rę öź²²‘ŽEŲĶÜóķ{ƞ%×õI%óķ Ó"O5ѐī`=q^AŖ/ŁõXR=:õ¬ŚLnTČCļķYŪ±1‰4ŗƒŚ)ˆĀńĀX‚qÖ²ež;½jÓģ/¾£zŽrՄ—RĻnš}Œ×S\[¤sJ¬q.wqŒ~ĪĻwkį7_Öuż&šBīėmU=3ÓŠ =›*'‹iZē‡X$ŅōĮ%øåķäē?Zģžx§SšĒŠ_Ä]‰ˆ3™O–ēOĒ„?fnGŌuŻGZ»½Õ/Fŗ$üŹaŸóÅxˆ5 ĶIēū[”u;cČĮĒ”¬Śŗ&”s AnNõd•ß’iŻ\Ļke!ūŪAAŽ‚ŪĮŗsĢśååŁŽqĄ‡œt­Ł­d°KYå’D € įkXXÕE#ĪuæŪų¹^;ųTBᘠ•wØķƒÖ¶tŻ:Ū@D²°“·‘Ld(Ī~”J]ĢÆ²ķŌ7<^]¶Ż¬Ųõ«öāŁb‰%O²PgśW4„Ń6›ØG L.EŪA B­µ±šō½WĻ*ŪĘ言sDÉńö& 2"\g'#Ø­ļNŽĀŪQ·ŗHœē ēé]4ÄŁēWŽ"µń åõµ€(rƒŽæJóy¼j—„«²(ŃÉü>õ„śI˜Ķe ×K©Ėc+ž+¬Ó“˜ģr·VЌ°;sķYĶtöB}FÕČ!\•Ś9ǵz-§Ä-mõŒ×‹4A† Ęsź+ĄÓāV95'k€¼³Óļf¶ šå±Ły;F²G÷Tē Y„ S¾HV#„»®LzW Ø_Įl¦2¬päŽ\¦Ö‡5ؒŹAn„”Œc”­ WCÕV»·Hå‘Ļ™ Ē±5øŅ9+čnāĆH ĖÜW;lŗĘŖ¢Y#]9G ŽI ī{9g± 88ėŒŠó«%ņõ ą›KĒ õ<ÕĘ7{U¶†XQŃäyTąś\µöžĘŽXķcbW•÷MŹV2t{ ģ¤ĪÉ{ žø®ź;xäS2Ėž§ėXM™«įŪ–“ŌŌÅW„xĶr¾2Õ®¤’?ś1łU9ĻaJžę°‘{Mt(œ6Üėõ¬ÉŁdšX¢Ų!sü5²:`µ3™®XĘT…H#’ÆķWlÜN'(Źy\ŽŌ3Sj[ō(Ņ#¤l~P£ŌSģ×ķL]üĄž Źo””–§¢i°AmyĪøt¦ßkŗI‰m R×`˜ `ī }%ܶ1 d|©AĪEp‘x~yŲG ł1nĮ\töŖRkryXŪķŚIHÕTøĻCX;¦KĘMˆw’‡Ž•\×E„Ņnķ&IoRE¶ź7.ŠŽ7Ś­c†É"IrnM”Ų“I²¹Ó¦øR¬~ī+ni-®ĮŹ‚:­e4Ėägy©yī7Ģē­sėKµCƖ§œńš‹2ēXžB*c#¹éY2EwzŹwFm¼ōŌłYQƒ{ꇱ›Ēū:½¹ó\÷鏭uR|1Öį0Š4ę8V\ēqČØ”’:į„osU>Ž7™ D?v…²ēž?ÉŖzoƒē¼ŌmģĖĆR7—¹³ņÖN²čuG }Ļ¢xwÄö’“Ķ)ō›ŁnlķH;sžŲ>•ß|]Yu½in„ -ą”ČŲź¹mĒłé_Zš>N•;C§Ś%Õ­²KfB`;{ŒŌŚĶ„ö­<0[Fó:ģ«ĪGóķQ3µé“Z\ŻYųgX“²XĻĶŒ€e½ ėZ‹Ÿg­M§ZĶŗą2’”¹Ų~”ķQxkO¶{&ŌäŽå'=õSMƒCšżž«um„ŪZYHøÜ±¦÷&Ÿ(®nxƒįæ‚ąšģš¶½³Ķ;yR"®Š1ćžMx·ĆżKÕük&›g:ˆüĘ ' Čü?Z؉3ķÆ‡·‡<qxšÖ›ī“~įć×,xõÆ}ńOĝÅPĮ«›xāŇ0JžfgĻĻ’Ž:|RųŠöėMæ²ŗ.¢OŻ}Ō$tĒōÆŠ¼Ū;V[©äY”mɳŽņ?Qs¶Œ¬}ńĻĀpMšļĄ^/“iīœDŻoéžT?³ÅĶäM¤j~Uœ++äÉ;“97ń¢—>—³>¤ńŚ"ņ …A•€ÜIņÅ֕Owu4¬ö[¾pƞżUŃĮ©®§·|(šē†/“k˜ †#Ģ#TČ’sÅy·ķ]š÷į׆<Š%fOZ^ˆåd:ž€¼TUmlgĢ|Į¦čмq«Ł¶tńGŽA÷Ę|™ā-6Ķõ™£Ēøńč=hNŪó FÕVwv•ŪĮūĀ¾Ężœ¾$ZéwV潆ŹŅIó…•Õh&Š)f3|‘NŒ”ļŠŠN±Ÿ5a§±®zŃŗ°éłŸ5|nš•īŸÆ[x»J®®†ėĢĖ:d~uåŽ&ńŪÜ8²¾_+j nĒŌW—Z—CÓ£SC3ą‰“ĶĒ0čZŹC‡õGxf?tDHįż885ģ<9>-ʝ„]Ę÷6² ć–˜IŽFĆėÓń­UÓMj¢R?±/ų%ķj?jŁŽ?ėó½×Äo E •ß›‚ņ NÉłG>āæGt+铝ZŚęĆ p'Sص±Ļ'­‘õż›ZkšxœÅęĄČėź+ń[ö’żŒt?ŒŽųš\ x“ĶvĘ]CòNżRŒÜ®¼ÆCœsĮśVVW±‘ü/ųėĀʍ ¶ń¼6~-ŅÆn4ĶR`ĄI÷ג¹Ļ½yČ ĢÅĖxąWDeŲēŖ»ēÓbø¼¬4ž«Žŗ³’ĻĢł8>«”’ĢŠū;G”ŖšĖ'˜7·^0åM+‚‹»‘C&īG_zµjŁd‰ bNµTem  ś–]ŒŹNęĪ8õ«ŗŒ×‰”ÜĻc9µŌį)5¤Ŗ~d#9-p?ŠÆžóūsi¶/ģ‡ążSSŌžćāׄa‹Eń,.ūär !n§płóź_=+õ]n­ĘĒ”ū×=X—Źx޳kmlŠźįŗƒ) =$ŒšAü2+ó·āG€“Ćŗ¦¹¢ļ’}2īVŌ4‰ņ”IÜŃpwqžȖ¦r‰ų·’ż›“’ˆ õ?Ł[Å£(‘dhš|›•’dt݌ž&æ˜ym/mÅ柪DšźVҘf‰Ē*EtŅ9¦Š;üĪNG=ie–ŃY—žøā»)³’KR»B’•¬y9łzŅĆl YźkRJē{ņgoN:‰głœ`üøĄÄh6†Å«yJ…šFµ\‚UxßpŽW#”3H½I5hŪy?įVü“ydÖā[}NŽUŗ“‘fC•ēź+)6vSgöÆ’ˆż“t_Œßō’ėóǼŖļsž~‹ˆ¦SŌ :Ęæ oų‚;ż*ŁÆÕą»ˆ›Køł0ć?ēҰŖŽ”Ķė+KČhbc$9ŹqY¾6š?…>5ü;ńÆĀļŪ ŸųšĀ[ —ź¤eĄažg”ä óŖŅē‹ƒė”œ¢›?ķæū1ųŪöLų’ńį׉“ūǶ°ŗx¢øņ|“»‡9Že÷.+ćIe –qŒņ;S£Sš _քŲßšö¬ńJČˆ©ĄĻń÷ &ļIŠy©Y­Öō*T>ŅxõśÓšźmM²œV›”Ź»!S’„Jū'ƶz‡¼!š’Z]BĀįÆā+øŽÜ•É£ć‚>‡µ‰ésē Ļ Ig4¦"Ū8ćéX0ŪH“¬ÆómbÕE4ģe»7µ[RūN¹‚8ćh cc‘÷}ń\kųJöņĀFĒÉó{V±eølt©™£ŁÕNX÷®“PŃ¢¹µS$ŽŽ£sTA‡ü&ŗÅż¦• Ų½…PĒļs]?‰|?¬ųKÄŗ~…”W‘¼G¹¾AŒp=łØtĮy–mōyµ©<¹Ģy$’xŖóh6öÖwq]Ž+šNĒyč+;s ¤éV2ŪĶ7œ‘ŹŒ¾PĻ-Ķkkļp Ó-ģ#Y®%”BG÷sü_֑ĢõįšōÜXéŃ\ŽÆŚ‚ ėļ\uݜ¾¼dŌ¢2éąĢ§=ź¹JŠHåō’ZEw6!š;q‘óÕ.£āōŗ ‘·—GĖ×ń¤QĪŲ¢ČdbŎB×dŚBjŖŌōĖŻZK¤x0LC€ ¬ųµ`@²Ē#¾p6Œ@ų·čŗ ŗ·+˜!\8éł×†ų·Ē7Ž Ó.l#t¶± ”žųzœw¦˜ʑįĖ© ŽG’h¤Ī@+Õź¼1¦˜|Ez’~ćß)éėEĶ#Ö> hö–ÖV1‰ćū'“˜01ødׁßZÅ('U|ÉąŅ„©±.#ū<®¦BĶžÕ›v±$«e#ł,­Œö"‚ gV±µy¢UÜNc†՛lZūĪĆ®ģ÷ fÓ§¹įfvSčjĶę‡qį2ŅMŃłsœ(œ“A¼Mß •ŽIRčµ»( ’н Śkˆd`¢K|~ AFF®Ö,RŁŅØ!ŠŽ+•µ¾ņ®£ŗø ī`±Œøåw½W)“v>ЇsBҾ’)Ō®}rÆ³Šµ_ j­ęMöˆF‘ ^' žR¬aE”iŠÜß^] ÷RÜ üŻōčö2\i–’źZHaņü=+E{T^"Ö/īR¶ö¬Ī2[°Ļ5»}ā«Ū@4ėy|Ų[‡łųĪ;S”PXÆ£k:•„Ȕ˜¢· ī8Į8©¼EāÉ58&ŒBfŚ„öć V2ŲŚ1±ęF÷³Fuź ,ńKk”“ ; …>ęša¢čz‡‰'ńāˆrOéM›Ćŗæ‡Æ¤Öū#Ž8ǽhmŹzn‚¶R@gšH·}ՌžsUõ¤–12*Lw©’Š–¬F·p\Ų­¼,`½ C8#č+CĆw—6öO£DŅĶpŁĢ¬Ÿ{ń‰„4uśV—§Ä—<J]6ėœלx¦}>qiiČeé“PoŠ»įi[N]öģŽ»»ÖÕķ÷ž’édfĪÜö„&hpW6z„Ó²$rL¼€U/2]™Ē>vņy²hÖÕ½XuKF…˜.ŃĆƒ\޵ć|1į cKĆu}wB£ųÕ@<ę³šŠź„ ŸŸšˆ,t=*f1Åj‘Ā}«¾š «éמ3–ĖĻŗæDKIŲpbĒ,=śõåāŖXżēĄYŸŠ…HsS§yĖžŻųņw»Ó­£@eV.ŹŁäVåŅÜ^!R?­|ķyÜ’Upōyb‘ß[[Cä±1¦ą{kĪ„Šõ)µ‹ƒ§ĄoįĘņ#²z渜u±č*z:ˆmŗ4i-Æ¢aęE:•)Ļp{WkšĪ«š×āzž–ƒ8}’%ä.æ6ÓÓ< ŽĪE6ō?^>|Tš‡ÄŁOā>± Ż‰ļRĢĒ5¢°i-АHuĮęæ*<{į—æK=~­RöXW;|Üt¢cĖ©ŁI2–Ō„øAčy®–Ņ9±³ifńé\§·ŌlŽK˺߇|Uįˆ¶Ķs=‰(@I##ƒŠū'ąWÄķKĮ~0²ń>£§LžŌīŠ\¼+Ÿ²>Ī…}?śōłšI0xÉtż+ā—Ä;ŻBųfóU’īÉBć`f$ńŪ'šŻ‚üK÷?żznge*m ©kßؚdšŒB)„$"#`īcĘ1ų׍x—U½Ńõ«×lĢV÷%uĻŻŒ‘ĻäEHėIlĪļćGĀĶOįĆčž'ŅEĘ©ą­J$š+€™ū>åĒÖ±ü+«Į,qåĆeqŸ_zŽMOī“4¼oįćāM&6Ó¾Ģu›pL /#ŖƒļĶ|?©]ÜźWWzv®ĘŅśŻĢn &lö5×CCę3l4¦ł¢Üų'ÅŻvé4_…לR:²GbĶ&Ń*68Źætæ„ŗwķńkQųińĮz…¦™eįfÓaÖl§Ą†^§v; č>¾½£? ń'<žUR?MÆ; žŃ’~~Ę?¢ųkš“^2|UŌ&s-č4±d¶żÄr yéĻjü2Õ-u{±q&³q%ę¢̲’|’NZęÄşoįxœĢźĘĪ£ÓŃĮŗłdR\ĄRKulFłp{^­m«żš8å– ŠŹvƒžÅyŅÜż¢ Ųź4‰4 Ė]Z=Y]–KiR%žZ;IöĪ+ēß ü@×¾]Ļoyg$Ś)“mÜtŹA!Y?]tµ<|Ņ„§Żu–óĘ’šO‡ż”““o„hŗ-ÓÉ";‘,ц Č=‰éӃ^iį‰_žĮ&¢eĖcļ‘É(É·qö®śĪYtõĆ:ylGjŠtśųššh}š³Ä–ŗTŚ…“ŞŽńT|§ī0Ē?„{}öŸ©gqk!żŌˆF ļ„8ŽźHüūń灵{mN³ `¹'É_)•²§pčr~öx/ć/ĮŪæök“öSų•ā[=3āž©¢ ?÷Ѳ_B Åso!įœ2#OĢ;ÖŃŠł/rģN?)ĆfńšsU/ÖŃŽŽ–Rk²~Gį_ĒŁā§ģń®xgBųŃiie⠁*é:Ż™2ZßŖ <˜Ą‚ӃĻA^‚ŗÖ„iŚ&«]ŚÅ4ˆŖĄ¶w·=Hżß„xלą)fFłgŃīšvił¦šóŻhlj=®”„ȖPĄĖĮƟ¼[įŠ“ĶžŽ!.„HĒOÖ® śˆVw?{æ`OŚnĻ⯌<šūO“> »Ņ¼2ÖŚ†—•1ßÉ?~„c'ƾµ|—’Z’œżš5%a Ä^3–%|r7B¼ć“Tk‘Ÿē¾{ĆK,ńk—ü¾ØŖ_üRŸł[ä3öŽ× „w…żkÕm&·pŚĄb¾kĻõG nTĶO1 _ŽG©ØhŽbvłŒ8ć½pž»Ž…ƒ·Hą>žõåž2µx‹ĄžƒP]B÷Tu%Œå“ 2cƵwaŃšœMV~»žĶ:Śéę‰ypŅ_%ś6HĘŠČżE~»ü.š—‰¼9Øėī†F^ 8łY»’#^½)h;x‹–Õu4ž+|>šļćz%‡‰ōńe6œÅ’wĘ’Ä~"¼ž„>xhčš]––Ö¶Ą¤²–ŁŒsĻaZó3ņ<3ˆŸ²‡s¾&éZa†ęļHŌ,µM>źŲODrpÉÜsR’Į>­/n’m…o„HUmtķfk¾øņM¾Ü«qS+¶~›šb$øOŖ«IQ©”$|5’Óš,żæ|+ā6hŃüCį…øP`™"|޹’"¾ šżĢ¾Råp=+»>ßčՋ•~ĄĪ[Øøü£)E~GO>Ö@ÅĻ„aÜ2*” ŽkĪÖēō=(čUx˱ īā·,ŸģŃŖŖ1'ŠŃ2ÜŠŅāģ)Z—›Ó­|³“&[²a`ĆåĶcRF|Œšļˆ­g{ƧŁåX#ž<ĮŒnžUęŗ$sųvęe½š£yAO,tĻA×­sb{}¶©-ĆĀd å°ć#„tˆŹė‚G„5v\¶8?Š:§­xģh±łŚŻ•ĢwÄ£™T˜~J?:Ńš}†£­xV ¶ņė7ŗ˜½œióG!ģ}'łWM:lł\ńʔJŽČżĖ’‚I|?OZüCń—ķ9āo Cą i}Ō‚7™|ēĻŽU ޤūsłńC[žŌß>(ŚDßŲzž«uØZ+  °TV»TW\éŚ »?,į æŃ¬ŹåuĆĄĄōĆ=«~ĖQŠž8ĢL²ĄćæqYU…ŠL嵟 /‡ķ/µ0™¢’bļo»%N:®{V~•«‰“;‚Ć<Ʊ®IĒ©HčĢčŹ6=ż+ϼW„E©ö…g²™wOĢ­Žõ“Fń9ö‰×!†SÅEöėē”ĘŽēŸjÅ£Ŗ ^lūŠ™„}Ük3FŅeŠoÜZ»=Ä„Īęū®}M]4Ej§ØĻÓ®…’H^žķłø,£oŅŗiž*ģ³öWū,ņ…0§wŅøß ÆŁķŒ3;1óXīöÜp?,V‡”éŖ:ĢčgŽ<¢ÆŹ³¹Ė®b}h¹¬iž[ā(ļ4Æi3é÷- ¼ ¤±·×®GÓś×¢iĆl¶į|zu­ØĖRœz žŚ7WÖ¾3ŃōūkžŅÆķOŪģloe† ņŚ&N×8ĒQZ汜wÉā/ÜiĘŽ“ŅQbæÖH€å˜~µõŁl›ŠGł«ō•øŖæ¤?ō„~‹čŽ “悎įķßaĆō"»ˆüKfņ%¼p›pAū¤ół×ŠÓCł²¾åYõˆ2RI ĘxśÖꆮe“’ڶõäkn[jy³:8慕V]ØÄž5Äk“w²DN0pøčj”ĢeÓļ\“KˆĪ9ō?JÜI·#łk“ŸĻHēh½„Dš‰e–}’/$ōėĶE;Ģ“<ŹyśP`dźÉÖg HģkSĆ7‘Ų¼ļ±$8 3ƒ[”ÜŪÖõ'ÕKź÷0ŚĒpTDBFĄ3ÅyUõó›ć$6M<”¹*>čõ¦C} ļc}-£_ø0ĄŁĒ=HķV4=*÷Ph€‘q’}ĶL£s¢ŗ]{¾v«§“ķ;6Ż„ąčkŅ,|KŚLß:Ås"ŻśšžCžIģsŚĘ¢Ļ2Zߤź8¦é:”¾‚hµ$K¤ß€ĒūøļP`ļŌģ °³–ĪcĀBIlzvLź0C§ÉnŻ'­W6–”×ßg„õ ™éČ|Č#?ć^cōÖ÷— ÄQ8v\>“IÜӜԶnŅ9„rņœdõÅH­ œ„]‚·_„A›w+ß\Gt ܧjēb³SraR”›œž(2›č\‘E*•%pKzߙ¾Óc÷€ćރ3 XG*¼ŅI€8Į©ō¤“ˆB€¹3šĢī!™‚‰“QZvNÄ*±é@,71#¢2å‡,GJČÖ.–I,¾ĢzšhĢ—A‚ėXP[›Ź0cķłWAy Śk>U…äŠ[C’wøĘß©ü(v)hÖæl²°Ō­µ‹A+,L€|¤q·ó”Öa¶·†š\µ¬*±Čąsō÷ nGĶŚä°Ī¾\QŖņJ“ŠV|BĶmžŚÉę2ƒœ˜ŠIŻY’ÕbNĒȬ«ż& Ēē[ĪOšx¬s°¢‚tNĒ^Z#ÜÜL„»øÉĄ&“ōk™ō…i'“vš“=ķ¤É€²˜ø}GĆ)ÆFĀh!’%ł’x8čhĖ#Š¾ŖÖ5ŽX™[qĻŹ÷}+ŠļļŲĄó^Hņ61–9Ī;ŠL™—aꯔr­c•\rV›Æ_ZxuVYÕyÉ-A‰ÕxSÄ'PŃć¾EÆ*GFõé.˜^µŲŗr…Hņs€OÆÖ€:Ķ#ÄwVÖ{!Cv£źEs7^d·o/‘·y' t4'ń&£ØYų†6ŗ‘…“DŠ1Č÷śV¤å…Õ“{ĆSsČ4Y#—¼O.ķ.c.źz ®×Ś„SŸ³B ŸŽdąķ@¤Æ”µö›]„ģÅŅ\ŒnĮą×B¾+¶h慭ä…Ó÷nžō I¾ š¶‘ā˜ą¾VŠŽź!Ä»yĘ;ā¾vÕō‰tHĒg—™a‰p¼ūŠ ga³¦œ^HĘćßęø]bÜYŚM¬ŪÉ4ׁ¾xąmĮ¬d†µ9? ųŚkTŸOø¶WłżŅ+Œ>1]Ö³ž£šŖÆ‡Ž¤¤­±’Ć$¼Ÿ½ø*7`p¦¹mb¬¢>PrŒĄ:­<„ÜŠš//$mOWKé!ˆ”’Y!;Ąģ=Īk£—E°³ »š+5J® ŽĆw±Ÿ>§7Æ\Ža“oYŻk^]ŗ»*Ē’8ä~×/£ųsÄ·Žń&µw§Ķ ź˶ŽĘéē ­.kO5ųs«Ūk¼Ķv°¹ >Gʬ:öė^ł/Šo4«¢šŅO3. › QDŽخ]KWįXĻ_Ö­ÉRģą挵­īt»k1s˜5v#do¼ON+ä<š’þ&ńÄļKV±·Y ‘e!vØźy«ž𵭌ž|‘“p0 Į>“ŃźÖzģz%¼Š`ń·=ėXK/é×Weg“•°ÉķLW<¢óĄśfƒO!mŲš¤’Wؚ—E“m“Ń­ĆyŹ¶~ļ=)ĪΧNDt•d»O0’Ozņ’E{5Ä¢Ń#ņ£ē;I,Mg%©%/ Į|doķ †źÆOŗŌ/ō{+·Ó,!½—rįŹņ|Ur!£[E×dÖŹE}‚V rp5Äméōł¬,®ąĀ±ł—ćŌłQ¹ą>ÖLJ®ęÓ.gžKŻŽfX–ڵļl··6V÷¶,«+UŗsPį©’“ø6²ŲŽĻÜ©Én™=냵“ŗæŗ¹HÆMĢ Y‡8ĄōĶgcSŃō/i~*ŃļcĖq–Cd*cÓÖŖiśF“b–z‡‡uk¤ņĖG<*8äõpH5vž×x§Č•rQO^QZŚP„@-ˆįd#÷x­lC‘Ģ[i3X«I•%™‡˜7WØNRźā9Łˆ9š:1)ómķäŲ¼»qŠ‚oĮ{¬8FūC;&ĮéA=l{Nµ¢ šōosuVņÄÆēǘ¬9Ås:„ģŅq4Kµ°_īąšMsĶŲčŃHaÓ§t‘į•#m»£9QųÖ~©Æ" hH—+еĪU8ŸĘbÄNÓŪ‡žīćŅø”­„ūĻē!™Tć…;J6:ķ>KŲmV[tR£±ÉÆeš¶§+ĘT·–Ō ˜$šŃL“/_ÓķoČ6j#UĪ]ŗæ>•ē+6–׋3J„yƒ9+Š®dDŗ¤‘ĄöčŠl'-‘’·„yŌ³Ū®£<ÅC°'ئ„Ō,e’m)ć’% OļOŌµ˜ģš ­­¤cŌasĀ†Å(܂[č„āUXœüŪ@ĄĻŅ„“»I—+·®sҳ›3äfµœR4›!c0럻Vnt“‚ņFGN:ūŌ'cjqčŚ¢Ū¼Œa¶ą÷śSSHæzŠŅ÷éŅ“ŒūŠZż†Ņ(|ļ>7›v ŠzÓ'Š6L[¬Hę=jĘqš­¤ńįų]§8^Ę““i74~ihŹtu?xšq·P±nńµY^įåŚ2?½\õ­ó^1U‘‘[³tĶ&4ĻNŅgidXnD *Ž@EiɦOĀŖĮģžsų×,ö&KC‚Õāˆ~č1Ż»‘žõĶ›?)Ć*‚ąēń©‹¶†65„¾žńķwą!``{SŚ$€"€œžB­³X"ĀŻ9ņā÷1ƒŽ°f.‡M§Z•- g;©O ³Ņą°Ī+!£7[–Ū ƒŸJjHēkc½ÄR°HÉž.€×½|9šĶ½ōNšŽ›(xä8.>ņö"¹k×åZ–•ō>Š`÷žBi6ŃÄ +Ę zf½­< iuamŖM©Y݉˜Č¶čø1¶qÓēü+Ŗ!½ģF•ń‡ˆtĶęćHÓō˜&ŌAh„W÷ĶyŽ…{b·+"}¶2^ń“ßłÕE»\%“>%ˆĒēģģ`¹’xi¦1ńŽAƐÅ:^æqysäÙڛyĻ”õ÷qæSįĶ;xõY­]tŪye2ķD=Fy<÷Ęiš­Śi3Ķ-ĆEtŠw)į…3X3šO‰®u[Ųµt†ø÷+ģŹõéó¼Q«K¬k÷ gmsa©Ķ ):§Ž ’/jØīick^ÕŠ’‚p~Ņŗ—ģ¹ūIh^"µžī?_²Į®Cü“+¶Ü•é•8?@kū[¾¹ŅµK w@»KūŪhļ-Ü8qœqZŹ:]•(ź{GĀ’J®—w e •ō5™ńߥ×^0š‹ŽhhÄŚTæŚVn>ń)÷—ß##čMsĪ:ÜÉ£ų°’‚Ā~Ļz&ń;Āæ“OĆķĖFš—‹D–zż¼(|Ū}N<’īƒŽq‚q“‚OZü*dū<Ó ™˜3±ÉM£ģ* ­”(wC±ŠóĒ5vSµŗ½ČœœuÓŽInr·–Ū7¾Ńø6~‚²š3!i?‹9śUÅŲĶ»ÄXH ‹µ Ę}kJܬ»„H"`HÜ{š¹¢£ø[H‹3Ē!ÜćŒę·līe‚Uhʐ˜nFjyt¹×Šż!’‚NžŪ·Ÿ±ķkįM_Q¾ø²ųćßģßF~dŽg;"•£ģ”$s‚G|Wś1M=–„¢ŁŻčӭŜŠ%՛«d<,29ļÜ~ŖŅ“üģlŁĄjß0Ž„¤œ0ĒJš‹:æ‡/4Čģ>Ń©ŚKöŪē…;—>„_Zņźhō$üéń_‡l5+ WC»ŽĀėJÖĒŁÜNś,Ć8 ōRõÆä³öęųsš›ā6”ā -*k]īy!ŗ Km—qł„]9˜J=„ZŻĒ—ķR>ńģ)²Eåį£`źS^6qN=DgŒ9u=xĘ*„Īūyv9P§ 0z[’@ŹČź T9¦“·,JV,äg©4Cbkx£“Ä£žųļL“’G™ŒäĢ›ŗŌ™cåwWpDgÓµ>Ņ@’ČŻG.77„·?a?ŚB÷ö_ż¢¼=ÆŽźWVŸ üA$z~¼Ø,/¼ysc§ž‚_~(i~9Ń“ĻŚź67šu󄾦ń}ŲdŚ rćØ0~ Ö3Īƒź[KļµC$$“ڶĻ÷Ö©YŚ]Ēā)tĀłŅ/ ó!’¦RÆQųä~µĒ4hž‡āü›ö1‡ćÆĄ?ć׆“}=Ž:ŸÖ—UŠ;™'‡LŽÖėž¬ćØŖc9Hę4é5?XÓ/ģ&H%ŠQø°9<ćņÆjń&„e©ĖiØ[Éę\:ęE#ī·|:£bƟh‘Z}”YÜćbõ5ćž2¶‘ī$ŠY?vć1IĘę‰Ü©įł o3pRnŸ{։į­3Vµ]RIķ‹Ūøt\a‡§ęjyR*ĒI>³-Ą‚ŚČ4³nŁ€NOҼ?Äzö£«Ey§jIČŪT  ’ Ž`<į ×G»ÕŸČęćaććūU?U†m!ēŠއ'qśJĘŖGØhŚ–v·ė$€‘ø®"»[‹Ė(,÷Į"*pĢ£;Ļ©¤UČ.®4­f{{›R ˆWkĪ枦øßŠö·ŗžˆ‡NyįšŻ<É I˜8i <—hšÜNŽFåÜe?z¾Ż[RÓĖŻ\3H«Žæ{ĆJ^,nm3ž*¬·%'Œ³(␬ ½Ó±• J§Šźģō±½."œgÆQ@ģ+y2—ĖS”ōÆFÓcŠ£Ó„ó!åf ¼žTw Ū^“dš>Æ>i<ĆģŪŌF2ĶŪļ_4č:ŗÉ-µ¼ö®„) _NŌģ¼ßź°źBŃA2¤aK"ćp½sŚ©e©ź’i‘;½’QĒQHÕO¹‹ć­[U³K(ŹOq Éåzģ½y|ņIq*FīīŁÉy Ķ³Ų¦š“Icm©ZŹłĀ‚¬y< ×!ā;K–ńČ[„8?1śP9sŖŽjI¤i¾\0ŁAŅW;™‰ļłšŲÖ4KŸißkw*² Ź@õ Ń@‡ĆŠÜĻko"<²ē‚}šndŃź²FńĀ”Ōc<Š <÷ʍ‘X¶žRšP@ćLšŠźó)·Ÿ>Aį[± ĻSŅÅŹ»E)#’§8Æ<Öō»tD‘`gPpæ­ŠŲ’ -šÄŽ\[’Ąp3ŒVeŽˆ¾s·–ʧęaņuŸkZ_†å]ó]\y× 2Dp©ÉÉü†}ėļ!¢Ķ¦iz-ŗ¬6öņ£‰ĮTĒNŁĘq_;ŸCūÓč™ĆńŽš5¬¤©®ė•sKäł£÷‡§ż²_-ĄXŗõ­Y|+|n‘ōūYÕLŠØ¹Ü'¦kʓw?“©j¬mi:õž‡wƒ4pȬ§³—P•pŽńF½įļ ė¾)šõ­¦§ā+Wv¹·Ž <[‰dvČ©ŠW;c±ź’“‰¾üLų]įŠŽTŠž+i²[GwĖk”l Ąį€9Ć{{ŠóGƒAń÷„mōmv9VõŖN‡˜¾œgƒ]^č„GSß’bi±Æž$jŗ‡ēųąųnm2[FŲ<«ŁWe|§Œ~‡ēĖŁįĮ`ź‘€£9ŪÉćšąTŌ”\m³”ćą²Z”±õ±Nw…HĮ%ŁĒžīŽiÆ»Š TļĒ&¶UV2“Ø»šįgŌŅŽ–d²bé J÷ąÓ¾…RŹŅi¢“2 †ĄĻŅ„‘—®iüΑ̐ĪGF@4šwu“µn®Šüž_ž‚²~c’²9Ł]i[ŪŽA§óöƖ¼;«ųĻĮڟ‡µķś} ÄŚEŅŻŁČ¤ƒŠsż(ēgčy6_F¦Ę[³śŒż™¾<|#’‚Ž| ÕžübšĪ—?ެķ={J“#jŽŚ>2‡8är­Įąāæ)æjų'×ÅŁÄkōS^üOų2›}^&óCBp©wēo #Öµµõ?ü:ā?õ/‹qcš„®é—v‡Øłŗ®›1" ØĘT8 }kÖ&¼’ā=5JI4±ĘUddÉ '§µrÕ­dρā~ĄęÖ_MZ¶z5Ö:»>öz®×}ĻĶ]ź&»ŠRĪžĄ×³é²4Ø1 ąóÖ¾z¼é¶­ćcpŲĪČå”t9ļéZVö6šØ‘Neź}"~鱦i÷ś½ŌvP¬÷³7•ę<æZłĻāµĪÆē‚u94æųGµĶF³øln%„»‹±÷•zxŸĘrŒy-ßōgźŸĀ=DŚK£k—“Ū]XźPGxp79ūŁüs_²ŚOķ įėĆ„žĀ >KhÅÄd Ė>0Łü«Ō£łļrÉf œ"ō[OÅOˆZÓ¬ķļ­®//™60:üƘ:ėi§{ŲŽi 2sø<ĪŗŌQóœÓöœ»^e–ŅÅRt«+řžń’еū½^’Ē>"æń> ųęIXˆ@ćµgŌ턾ŽD*ģ8Ś{ J»źa…Ė(įā©Ņ’;?†§‰tŠ’  ŃīaKsÄ6:-Ä2«a<Ŗ››éǵ}Ć’Lż„õæŁĘZgŝ#Ä6šļĆ’”°xŒ"9“ūōŒ’¼pČą’QČ5ŗ‹qr]Ļų“ÄY?eŁTāß×=¤oŁÅEƾöņ?¾ß\i:ÜśMŚų‡PžīMrÉģą’ée“•N#ž5ŖG“ŠÅ(žYūBÅį¦qŖKeā»M±M$MˆęEõé_+iVsźI,ņļMŁR£°5„„cāgŠvwŪ`…÷6ϰ«ĒUĪŲ€ł{“ҳS&¦Øœj.7'½rŃXčÖŚĄŌtŲLw Ūš¤®Ö·UZGR…Ļ£[ö“ų”dšxŚvqŠc Č9ÉĻZłĘh7²™·Ģąä3ņIõ§*÷f~ĀÅmBŁMøy-įt ‡p+Ó¾é ń'Įŗß‹“›…Oh‰w ¼q€×1”ÜP‘ŒćZØźK•“?^|©xöŸżŸįī‘¢xš Ū ,nmš$žUs܏Ąż+łūšTWš=÷ˆ|3q!ݦźW6JÕBߦ)Uhz­ōvļ¦Ż™ "¦į\YŽ@³Ąń±cŠ¢ø*G[pzo£F¹3DŲčOZāżøaŌ-üoįvhc–+‹%øŻ‘÷(,戮7önšÅĶoÅV¾=ųm{an ¦£#¶|Ūvį€^‡©Æ³Źßŗ®›_IØ„ÄõxCņ?Vōżl4ĖalņÉ>ĢŹHą7µDg™\ü›˜zkčbģ2TGY§é&ūOyŲĪ%”^‚¶ōxå±'{a8Ę;PåsŽPč^»æ[LJģw;¦ÜATē©˜/n 7­*ŗœć¦ź“ FĀ\h²Ē<†bž™č+VŹČGņį‰ą®~ķkOcš¦‡@š°Ķķ“ģ™ć=é„.ĀF pr†¬ę25m"h€Uå<ąqŸj~Ÿ§ ŒjGZ¤ģ:œ¾Lm 8=»U=śÉEĘamģ9oQļV¦L„cž—Rm>āńVīwĻE>Õé~hnIKݵGÕ\ÄŅÕ5[GŽ.Q]ŠeQ‡ \¶§:Åŵ҃j!äF€Mg'ŲŹ{ŒšŚĪTe2”Œw5BŌĶnöĖd¦ēēE Ń}MAŒ¢ljś»x}•&%¼Ŗޤj̽ŗ‹ Ż”’Ē#<ši£r±¼–ŽÜ>~“ś‚Gi$ Ūv”=MhĀÓŌ,yĀ«ū¾•¬i³Źļsę/Łś0īiĶō0PX" ¬äšģ*ģP ĢC.9Ęh24’y†1ĀūO·Z–ŪĶnõ,µMv‘łl 8¬gŌą°Aø„bsøŠb[käiPØŚrsާ¶³kĻ1m.ģēśP‹v17ŁęĪģuīkBīŹ4DgČa÷ó@ķŻ¬T«}%É\O?v©kYk¶Ņ6Ÿ4#güØĘm„Ҽ.ģm 6Ļ#=Ēļu$WØxÆQÕīä2°“Ķ8 $P uwØĆ«Łŗ {«<‘*¾GÓ{Sæ“ū2É}› Ū@éJ#­ųā?XŌ[KŻ5“}Pŗą)Ē'Šī|D4{2īĀę@ׂ’G ŹćÜPgŹīxļ‘ˆ”īąžÕ“ŖÅ8ŪoŻ”g± »÷ +;­*%y¦y”ŒŒ÷õŽhž#ӒŚH$··{¦Ź3īGQĻZ 8›‘Śęt@ĪĒ:VģzÅ¦u+u—=~ļ¶( 4¶ŠĀdŖĪGŹč+“Ō¼c«Į;k­=²8!zĄŠdާ1mf-„–°ƒoąs×ҹ«­3V·—ķP_–MĒz2ē>˜ō W;k}JėH³ūuŻ ’Ė`!ĄźGQY­ńSKŌŁ”²ŃŽĻŲs¹ų ŒLŻbŁüC§łĖCnBå~é>õåé¤\hįc6ņLźB±Aœ’zŠ6“; «Oōą@Pœ…ē>Õ$lHć(²p*9 Ä½ ³=ŗm‹<ƒÉ®[Äh¦x­!Ša3–`P3½šüÖś~›4—€Č?¹Ž_ŪŚ¼Ł¬ĪÆ{s4֟dˆ¾čńÜŲķ@Œßé—vvsI¾  ‚}ėÄļ.µ ­(ĒØŪ {ÖĪåVą Ę[šÓsAz%*‡8!jś.8&“œ­ĶĀĖ„€= Eõ°å.ÄńŽĻ”xŲÄĄ®Hį³] ńM½ĢRܬ[~`CŒ7ÅQÉ%©£„xv=+G™cøÕŅ™Į8öÆ ń÷ÉshŃ[¶S'#¢ūšØĘįÜņØõæčś¢jŗn£,²“r…8Ü w–ßō›½*$Ōc?ŚĀP²:¾U— ŹśÕņ£¦0ŠŌæÓ4OMcce0ĆB¹ąõĻĢų°Ļąż'ŅŹ#ķ{œgžµ‘ŖG‚Ļ©IŖŻyņÉ#LģKg½{§ˆ“7Ā}¬–r½ś0Ōgåģ1Pń¤–öSZŪĆ G;+2·>ŸTREu˜„įĒ"ø6ūMTżū±—‚2FTs±?#µ“J·¾“f‚V“|‚­žkUÕ œiĘ4•$!]ögåž•#:HüDYŻępŚ}k!MŤSŚ<Ģ&Ż· č)¹Å#2 o$ҹQŪŪŁźŗUå«GtFļg'œĄUĘE6q©a§ėņ^Kk¦Ū[Ü;_ą+”Ó/LÓ®Öįn/.S!#茮ę71oķgŌĶ bvN‡·µYšg„ąšyāžč[…Ō¹Ęćč+7r”»‘k±Żų*śīM āā[‹˜ĀK±š;j֟«ÉŖhĄź6IĘĀ&–<Œśdt¦’-Éń¹ŠĪĆżĖq`”Pą&­hw7N¦IK¬ą †č=©sjsŹf½“®nKß©.p€šŽõćž2ŌŚ[ÉeŠH­]NÕP8ć֚–¦|ĢæąĻÜ3Ķa޲K{`Ņ\ųNśm]'²‘ƒ“ø¹ē5”QŽēG­xOĒ·ö‘|¾j©HcŸ¢cŅÆčŗwŠģ¢kE$*хČr ‡G ¬f•¬vS‹;Ø"Cj¶“źzc©®{]Ó¦Ņ-c7I±dČ\œĮĄÖKCÉõ“Z¼q€ĢF7䭙m`Ń&ŸOƵW.–1’Šė4ƽ„‹3³%Ŗdßü5ģv&ƒPŽ4±ĻĢ ązĪKSHÆļZKōi ‰GŹĒ?ZįŹŗøŗR\’ücq©›%ŌqŠ«–cŒ€W3< ńO*ļI2N ĪE`[G} ¦Wå·HÆF¶³·šßFĮ$z ¦ĄČŌ4Ł„vŁ­»Ā @[hT‡’$9Į<äŠŲž·†+„yg=Ԝqō®¶ņ{',š¹m¼G©4¦bŽi±ŽBóC#$ø$)Yks{fßĘÓ×ėA¼ec)œO#-~cƒĒZÖ²’8’c3‘%uķ[EŚ¾³,R³—El2@ŖŠA+!€Č9ĒoZ”s³NīÖś †)ÖéYreŒ}ÓżÓ]U–‡v¶3źŽuĮbz“ŲÖsģ lŹy’gR£Źo»»½^Q¦Ļ1ŲŒ“XLÕūßCŹĖ.Jg'#īŠĪžžöxćecżĶ%ā’¾ę\“ŗlŹyĖ}+LGŹĖŌŅŗÆųZzDŚ­¾–ö+¤X’1"åöžē?Ҽä›gL„cŹž"ųƒĄŚŒ·PéčśĪ”yĶ2”`õćłWwšöZń^ÓĘz毄ųOĀN„.&ē»ˆ ķE=O'šģ„Ōåœõ=~ēÄž0Ń<3u ZßĻ,¾@Œ;ŹWæõĢ]xR[›X¦Ó€²¹|3•\gé_ Ųł.TzN‡©’`[Ūż¶ę…šK ĢÕü3ØųÓ_“Ä+m4ØĆcĒĖ=Y‡LŃĖŌJ6=«Ą|1²;Kė(öGėϦjż÷Ć;M'U‡RÓ `ł>BåŲR*ę&„”Ļ¢HņßiĀ3»~Xd°ėÅ7Ē9Ó5>‘a²+³•0ń5!9#ĪōXõßŚŪź—“Hßc¶/?˜pÓ`=«–šeĢśoˆŸYŌv${,s¦ćžpłō«ęčDµz@x#ćóéž$‹O:eƒéÓe”®6ŪęŸž'^ų—_½N¶h%*Rū³éß4_cORļĮƃšēğĮ¦M®[[CK‹ńšŹć×Ū'ņÆFń‡ĮyžųĻÄVzUÜŗ—†„Ex\ɒ’`äf“‰q• š]†££|F›Hø»xō½]Ä.Ļ“åž Šģüeš³Ä~ńŸāmę9nle/ āfśöȬ۳G«—b-+-nxńOÅ}FųC¬Ko§Ŗ\\[ øó$ݱ‡?/æZų“įŻŽ±¬j×ļˆ}§I!x—fÉ#_OJ֜µg5z|²qg޵+6µŌ“}V|ųjéÖH‘ŽÓnåś}k£ŗń/‚4Š3č¶&KM·nYNF;zlŁĘĻ8ń·Ć=Ē:©ń%Ž£!‰ pĖ–#Wʟ|,ž˜ŚĀ؃h,Žvž•ĻrOŒ|O¢-µĢӁ!ÜäÄõöö®-§’V4#å䓦ŗi±ŸK~Ķ“CÕī<9*q#“ؾgĖ <żZż;²¼ÄP£,{Šƒ€r0GėZIha'¦† Ł10ØgėÄž3|;ƒWŠßÄö‚%æEņī8 ”QĘq×·ė^e] )_Cäm{Ā×6v ,ņ&ĄIŚFC Ö’ĮÅą’_ĮŖ‚ŗ5Ļī!` ü»±õ5*V=jh÷»+Æ ųŻķ-uŽ\.Ą °Ūž˜ąęæ°ų$Æķ¦~Š?³lž½Ö›Zų™į[²]‰ļ&„“Ø<•Ēźµ„īŅ‹k”¢Ż-깅Ѳxķ_Yi 5=ĻPID“2nė×=sĻbOĘ/ų(OģĒ„ų³BńĻ€,¬ģģ-üM —šĉøYź ńŲŚG¹Å _<#¬ųo\×4]cMæÓ5>źk;øfM»^6+‘ģqšq"Qčy¼3ŖÅ]H= _7>d$oŪ»ŒzÖšģpŌF ³H9Es²ģd/üĮ°Ąw«9å£!˜Ē2(;ԃ‘IĶˆ”“Éō­c©I—E¼Ė”˜avŸz±OčćuŠqų՛FEɬn5(3m?Łī"ĖFūr7•ż@ęæ½ßų!GķøæµOģ±Ćųjæ~"i×ęPK«Ræ»ö¾UĘzå9ūŁ$ŸøįóüĶąś³—‘&ņ”C£Œc\~½b÷6ćŒ4Ńōå—øÆ"¤ Ļ ąš“ņ_i±įmmŚęퟳŻ/ßAÜyż{×äŸķĻš#JųÆš—P½·°HõØąxļ}@Ł śćó¦(ŹHžPµ ’BÕ/<=Ŗ[KeØŚ€’Fć“ļXrn.c CŒ×”µ÷cRzƒU§ŲŲw]īŠz](ę Ž2čJ°SłR€žG(*,ag…8=ŖĢC£ŗĄōģŌ\ÕHlw0ełyčzUčąo,æJ\Ż ©­yĄņǵ÷®:ƒƒī\’šF/ŪvŪā?Ƨųeń"ö'ńNƒDńõ³Zœ k £ƒ“€3×µe%¹Õé§į޳g$Z‡‡ļ‹.»¤†ć~ss ²Qž ēÆzōę÷« gĶ c„rTFń ’Ē:>±įßZ[jÕ­„Óµ+IŠ2:0+†Œsߌ_ēq’FżüEū!~Ӟ'š€·øo ]^}«O¹H“%“dŃŌĆī½ė“U(²dś˜Ś¢G+›i£G'†=išékxĘąķS'”®ĖséįoHŗmę›$‹u­Ā@_FśóŠō&ÖĪ&µ»kHČ+µ„ ó0=k 4o«ė#Ä0YųqŚIįcåĀp3ϵ}Iš«IæÓü!mk­Ü:źvÆä¬rg{§8lżüéĀkbjģzTwjŖŃ2 ćīš’&‰8Ūšź„“<ł“ɲ؉Ćbż *iŃźwQHĪĖm‘’§”Oģžžćū4 į)€ēĪj›j—Šļ“÷”õ¢č4hšfÆ£C§B³ˆŻšU£ĻZ[˜ģ·oK£ø«l|Œń½Z—TÖīōꄤÖņ… ōtėkٵ˜,āÓ¢¾¶c”`EĒ5’!žQöų¾ÓróÆ•ĻŽ#F‡y5żĢņ‚“b‘ܵ±Ųxé/“mþ"Óoö­3A*+ciĒĢWž3ÉāKæ0Č;}}č7±ÉŻĆ<3MdøWSü5”a¬ßŁhóhĖwrĖ#źOpjZ6I3Ń“M[PÓd°ŗµ½‘ޤå‰õ&„Öō{­Jī}bY6ł¼¶OzČ o ŚéŚ}ĢqŽĄ/­Ÿ"TcĆ(ń› ŁŚźŗ³D²ōbå>¼P =[xŪū3Hk9¬Ņźį0±°ąü»Õķ?W}sIvdHνóō¦Ę‘CĆ÷–vח1cfāOļ}kŃt飑ę?gŁ…#{ÆŹAüj“°ĻŸõŸÜŲė’=µŃ™Aó ³Ī? ×)}wŖ[;Ū“!Œä!ĻJ™[  ±øHS€E]c#ĄŃ­Ā0 „{}*A˜^O‡åPCd(źG½vcW’āĀA –5ĮaA—1ĄŪÜķ½heVf-†jōx§’(ćĆ‹ŽĘ“ŒS5Lź|3āķj=N8ļ~Ļmømx՝m¬æ“o/a{—rp€[¾9D ‹Ėؤr[bž1×"¶ōk‹(õ(gµdG ¹z†¬‹r5Čģµ(ÖGCæŸ^Ō–ŗnorÆm“ƒē tĶGÆNś¶ŽöŅ˜nٳ8Ęx智;_‡¾ Ńō 'kØĆ_0ĢMœķĻjļ4ļ =ķūu’ĖŹ;CäšĘ—zśö„k1YĒ [b­÷ųē?j ©lįŽ(Ü”B õ¤C ÷ŪĢm•+Õ²zÖ·x‚w€C¶0›”žŸēŠŒéā¹ÕtBś|ĘFB…?tg“Y×:¼66Ė ‘>SĻ&‚¹YkDń]ܤkndŽ@ŗŽõ藚EŻåķŻ¦£YC–h›ųĻ’Z‚Ō,u·>CZBÓ¢6aڵŹŲ\é0źBÖUssɋ`Ęł4Y¾Š­o¤Id]Ę6ßŌd{⹯ųF“PŌ.”æņ.t¦A²3× žæ„4h¢u—~–ŗ\v[„¬qd–[ėU¬u<9_”$ŒżįZ4ĶMkĻé÷ö·iNĘąm/’2¹‹c!ŌYYœą›Žõ2=™ÖIŸco"*”v —Ļ \¹<šYµÅ¼Ķ6[wØ+ČēnuاŠīlõ=:)¦V Źć½7ó+i÷’0x‰;“ż”@ĘÅv°$‘Ķž‘/ ź*µ­Ü–Ā@Ģ7·NknkOc*ygVrÆĘćōĶsZ&qØų–9n¢$pĆ= ö©:bĻ„U–+Wi£mĆīŽø{’*ążJĀĢÜć­¦iǤ‹HI1ŖøĻ×9­ß\Ė[Å“Ž‡ŚƒUfli^ŽKk{–MŃ’™Ī dx†]>™ō鯞Čb²Œąż(cQ±ē1M4Wp,’„Œ§q®ņßYRe~Õ)ļ}+2—cŸ—SøYc“¾²M¬sĄ­km?N‘Óʉb~O'LK2é3,;ąn’+:6٦™¤°»ŠĪˆīyō×LRā[øĶ¤QČĮ™Īė_ųöćNæń·ˆ/hŽŅęEŁ!ž!“€3õżk–“•ĻR‚÷“7¼ą-;KŗøÖķõ9ﵬ £Ąµ@0TšÆ\†ŻäŪ8v*0+ē±nģ’[<įģžĆaf½ö¹„ė'Ķų&—ČŪŃ[ū;ÄZ%žß“ ™„~X8'śWŠž5ŒŁėŗ6‡į”ƒEÖ¢žį å¶Žż85ę5©śż }>'hš’ĄŸhŗ„ØÅ­xkÄ5ķœ‘ƒ˜œ’Z6=$‘]oĆŲ¬ōfó^²¶F·ŗ‹lиʹ Œćךæfz”ét=[Äś‡€¼[¤Y龃Gԣܷ…m³©é׃ßóÆ ¾ŃÆōu+£Ūłź€‘Ī3ĆŠUXӗ”ėž Š—āWĮ=kÄīÕuŲ.d‚hc˜ " pļĻ?•|­yØ]Ųų©¬®ŒķQ$}źęœ‡fzb].£ =*ō3”° ŸJÄŽœY}. ŒlLļ‘åZJ1šø.„”K#ļ9"µķ£k2&ŽB“U”ą­D×SYSŠēüoį­[ƚŁZ^/ö”/ēŪyÕų8üq_0Ūė~$Ņ Ō¼=©ŪIa±[˜>\„t<ć=ĶLQēVĆsżū*üCŌ<'Ä kė;qmu[ łXšX~Ök7ė4ī„IY sĒ|ŠģgC£'.ęU¤O²ÄƒŽFzTÆm*Ļ„Ö4ßĶicŲ§OC ó`Q9Lusi“¢‚W?„uR–…Nž‡¢^%¼agÜ$ Ž•‹o¦žÄŌLP,²ydm=ÅvӚźq5cÕ?d3Bń§ÄæŌÖ6ŗ¶§öž†å€fe2žō&¼gUš·~xŗ[mjĮģ5k ³å68`­Į­$“9ćW÷Ž›ßsƼ}=ÕĻuĘńŪŪźngˆR9óż+¾šĪ¬"{iŻRtFV+¼3ҳåŌęÄĘZ¤}­š;EšĒĘOŪĻąf£ą?͆|9h|C¬Å°¶‘x Ž˜ĪÕś×Ą·t/ˆ·/ķ+ńĮĘŚēĀW·ŗu¤‘|ē¶µHTŽ6īVśā·D©8Ū[žGóĘ{)ˊaŚeYMņ'ˆčŽ%dŅ_P{yŒp¾Łŗ}ėķŁĪ Xń^öØ-dk…pÅŠ¤©żk3·Q;Äū ž 2žź?±\˜$ʓ&·m¼¬Yŗˆf‹Ģqjč¦|¶*’NčēõI%Óå]ČČŪö±„nxvī#učhęXä Éī ng…•”|}e?‹ō7Äą‹Ō(ĒA_2ŽxvĖÅźiŪg«DJƒ¼Ć֚G×åx—uПą~»ć¼āļxž? x‚ņIä?čóĄŁŽ“'FR5żeüųĖ žŠ ŸÄE¤ÜJ—3iz„¬n%ˆLœ:ąēå`A»õ×N=叄ļƾ†}E{ōß$ß÷[¼~é]/ńzžŅßšN=#TŌ¼OńgąVø¾ń F¾“Ćr@›{*®[Ė˜™±Š döÆČł>'źś$³é~>Šļ|®‡hb¶¾ˆĘ³2ńņ±Å*“¬}€ž,,ó²ü\æŚh$›oY­¹·»kNo6õÓĆüA£x§āW‹mü;żk¤k:Ų6¶D G– ĒŌłóž Owey£|ųu/Ā=/įߊü/ŲµMNŠ*Ē«)€ ŹTUŽęčOSÉ>MXŚēōM|$±œ+Sqösę·ó{²Ÿž‘ń†ōø`  ޽NkŚ“Č` Į_A^%HŸøå–åŠčŃ]£o˜ž"‘K)u+Ī*©Ē©ōń^é{JŌ.4ūų.­œĒ,r+«”ā±>%Śé:·ˆßēŽæM£żœļ¼7Ÿ«Ać;©ī[ %ø*7~qżk®‹‚cóz’Šf?Ä»’hŠ‹‹UMVŹ8€xC~ńHJāüćMWÓZ=BŽļNŌclMēFWéÖŗ©ān%Ęń-ź÷vž½øhÆąŠŹņ!JE<`žuöĆ’Ś£ąģš'ÄˤéßŪ>)×-ć¼°°ˆ†7×{H!śķ äśScćüJįÜvi—Ćƒūs\ݬµ×Źö#ł½ż£ü]­ünųĖćŽZÕŗéś¦Æt„­ÉŽ-­•@Xóß„]Š£+¦ŚIøl+ėŚ¼źÕ®Ļé.Ź”—åŌp1wTā£~öV6|ÄRșĘ3šĖ{†˜lgĘ sŖ‡čø}Ś6U‘WŸ­iĀ›ł$ Ņ2:Kźdū§īēæzŠ{[{ؤŠD.‡†µ[—A(žYÆ[K£ƒgLl]‹ʼ·SÕą°µ›(œU{MČł—]ų…āźbmJīŚElo”nĒ^µŪ蚼,°8Ŗmō®YH憏Sד+QŚ‹*ķŚXś• ĀŚ) )[Ö‘Õ \¼&ä1 éWbӎ§t‰1¤Ųź8ķŽ¶-ĈVBŠJźņ®A§.uA‰ēŽ„GS G£/Gmhb»†ķL‘KFT÷ČÅræ¤ńĀæÅi§Nķ¤Ė$‰r<¶žÆŃLć&Ł÷§ģÓń³Iųā‰ž—M¶–Āļż?MxČ*f`C©Ē{z×Ēž.šĒYń§‰ÉöżFMŁlī@N8ķĘ+ėrĹ?ĶO¤ÕOųÉė%Ņ0’ŅQöŌÖį¬ņ¾a8¢K+;i–BŒĻĘF1Ķ{kcłĀ}{š#hś×„õK6²Œ^*$#@ĪGé\^Æ”›4`&Š>\wؙ•ūĆļ x2śßP“RÖ Ņ5•HÄO›Įć~žõĖŽX]h™cq$e¶qü8©ƒw±”ā¬uڰ±Ž9Ф„dœ`šęī,&“ŒµQßRroųf ņīŅą$̤©`sČØ¼3wq¦Å>”8٧§$žõq·BMRśŅiP³Q2ćpwjĮME.ņŃF`’ėS$e$X2łĶ6F}G&«h6s¶ ¢ 6£±%OlŌu_ō„:vŸ{€÷Ęc<Ē^+ĶtZµtMŗŒ»8 ƒM¶ĒP×ŗ5ō1Z+2\°Ą`:Š·Ŗi:u¦ŸG#ŗFDūŽrrzzqŠ8/2)Y¼”“ž*W…nQ£ó ĻqHĘQ9;½7ģӟݿ˜=EhĀ6Eŗ@~€āƒ#R F ŃՊŒ“Ō ¤r±,ɟP ˜³o•Nõb™ĘGZŚÓōŪ[͆XrĢ ęU×-”Óm&UEX€å€č+Fc åö¦Fh3ęfšĮ%Üė";2Æ­iÜŽO °…€ņ³Ę{Š#‹ÖnŅźÕbhŲĖø—ŒŌ–AfÓF)b¾¦ƒ^cĀ|Sc-ö£ö˶Ā28Æ…u[RņiY”ˆ7e}ūŠ;‘Ķ%ɚŚWb–§-‚9ė’Ö­id…­€eóŃžč9Ķ-X±†AjÓA)ē÷ˆWlÕM>ž o“[;ģIĆ9bŽüеKč4Ų–gĆHGŹ õ=…lXŻŁjzac§K$£ yäŸa@®l龓XŠG½¼{v–EuĒį^OÆZŽZjķ G«`óõ hė<.’Ęņ]Ż•ŹœīnxōÅzVŒŚv£‡+ųČĘį@ƒ¤i®Ī!Č?)#łVN«į?GŖ^é·Vf;O,4n£”=éA“‰ē!šV­„ŗœ,0‚°#9¬‰tŪIōq“Ņ<²&wń’}h'©“šįā†y[ģ`üå†p>•āß x~ŻīgŅ¦čŽ£Ī×ģfčW·:}Ģk|D(•,;ʧ‚)n²f†1sĄ;9JåMEŃM Ką\võ«š”nķ„×W(gŗŸwZ ¬\¶Ņ§W1.psšŲ»šī‰¬Ūٳ ³Ō '÷¹ÉaéŒq@īqö—‘ CO¼ņ÷™ŽĶ¼īNğZڵŠĀ 袂NGY³køŠ{А’\£Ņ¾lń†Æį*I“łµ[[Vę2 ‰9‘×Ū+Ļšēƒu9nūÄ ˆĮ˦ÕĘģņ®Ž’Ę6śz\iP—ūNzæaķš—¬¦Œ+/j ¹d•gNģ/'>•ė–Ÿ­Ž+{[9Ž6ćpeĘ9ę‚Öē`ž!“‹Hø»ó"¹“"†ļźq_>x·ĒŚMÄņ[ŖĻ Ź®d8łOŅŖ>C„ztZ„7ņ˜Hł¾•$:NŸØG%‚\yQÜ!XåAÉ>Ō3tEšß†eš~’k‹¾ ‚Gøö7ˆ­„ń&‘{†e?»eĮüŖGcĆF™%Ž”u§Ļ ń9A ®ē { ķ¼'£.æ\Ā-[HüąS56wŒM}Ž ZŅÖóSļ8č+Žtū”ŌÜK7O0³æ–iF&R}ūsÄK4ė¦AåĄéŹĘÄ’ėW; 6»$jz¤3ż‹Ģ+ę"±óŒg׊·c3—Ō5}F9īDSK5›±,ō÷·£h±_hÉwk¬ŁÅv$O\ćéŪ­bāÄŻ£“«<éÖāGµšR›žSÓŚ™¦4P_ź&łÄŖ 2€Ų?Č5#=Ā÷F×t»‰tų–āå!nįƒŌ׆żšy„Ļ<ŅMt®Ē•ĒsĒįUŹĶbŒEšę±®1ƒLPŗ“6#ŽVڧźkR]oĀ’µž³ }”d(žQÜ£ńōā®4ū•n‡M¦üA³±Ń ½ŽšŠÉ“!æĖšß‹Æµ‹»Ļ¶Z›x‹ČžTܹč.l$€(™„¬pb¹æĶ{„ŚīŽy2‹ņ9E¬š±.69ojZ–Æc"1šå÷œ“€naėšé×Iŗ‚ŅUI°øÉRÜUČg©jPé ©*ļĮē^¢kzuŽb4l_QėOŹQźwZ/‡ģ5Xn%æŸģšąķ%€Įǽ|»ń#ĆPéZü‘GrdMł;zg½+K¢?ĀŚF”}«įW8&½ßBÖtĻģH$™.¢¬T«0cŅ”¼ch¼F—× $v,§hÉéTĘ©sØß$R¤1JIXž~£<k©;/äæ±x®„’%„pI=źmpŁjšEµĢwO;cyīž†åsĒ5™- ņćŒyŠŽœóXĀi]TŠzžō&¤±YN,ąš;”|2’“=Åv^’H^6žDDĘxīk'BĘåēÄ·²g…-c»‘&=¹Ŗ6š¢ė°Ļr”ad9*OJ›ā¶1ÆĀāU]럺zCÉš >ĻP§Ži‘[\[¤N»¶¹ćv­}9%ņ„–såĒæhŲrH¦!ö·WFF…ł¹ŖŅy±Ėŗ¬HĒqUd– Ooh³Śe…Uņąt5čZV™dŗlŅķCœ¶ ĶA¬Ģ\ė:RøRMÓ”#ƒ·Ę]\Ķs!"}°Ælu4XŁÓtķ1eŌdMŸ|в|O©Ł[jVĒO™&T.Ņ9'½4>SēXŠģZc¾Tt4šVŖ’Ė„sROśÓRh“¬6±š ō#½h&¾Écq¦‰ˆFQœō?J–Ąā'¹x$X7e:‚;Š{ĻžŽńĘrägqžS'Ų“ū óŽĶĻsŠŃh“ČĄ ’95C‹gAohŖœcHū–ļ\¶„4 ;CnęGŻ“m5”–£öm™rųS’å"øg$ņ»A<Zģto _4 u”Ī  ØčaPė§EŽŸÆkƒN6‚ŲĻlH̱=>µ«w©Žkń[iW÷Aƒ€ŚTýqŌĻJ•;—yk¦}’Zg}Ą}cšėnu[‰n¦øūNĶĮ›®{g5ēŗ}͌8uėŅH¹»’Ö§ļĒҵ|ą?üFÕÆ,ü#¢Ėwg†šźW+ KžNī•ÓJ…ĢjU¶ĒŻ_ ægŸ‡?įҚś[ļx±›BknXäÆū]zšśŽoé>T¼ń Ī’¦ŅĮdżŌjrI 8õÆF4ē›V¼‘ü5ØĻxOŪL2»©q^æ=+»°Š5¶¤CńÓé_S³<8Ģę~-x»G±Šōļ²h7Z¶­€HU~Uˆu÷5«ū>|NÓüPœšŸf—Z¼~10hvĢ„A+H§ óķŚ²ÓÅŗ>Æ%õ®“/Ś , ōØ{É7‹o5GxcŌ&>H@ØÆŌõ«ēOŠŗ ŗ5õŒöŚ£][ȀH°µIå…1mš?³Ę½’ —Å-#Ą”ąĖ½9ÄāÖIĪEįXu#ß5ņž‘į 4=.;YžÕ*’ˆŅņpOz(Ō2šę¹Õhž%±Ń5;GŌn#¶¼¹"%cž“ŸA^ŸńEš—ĆŲDŚk•Ō-ŌĶ#Œ¼,Nr?śŻw[‰éæ¬ü …ńMī£q©Äą"±Č™1ԟ­p^5żšgųĒ®źš×Ć[™~Ņ‚(~Ļ$»·ØÉČ^ƒ½e=ĒŸ›æ¼­xcQÖ¼=ā=:8u‹IŒL§Ÿó¶±kö%Ra‰””ģårs‘ÓҊUI®¢’E]*ōZßŪ°e†ę& €9PpzvÆÕļ„>5ƒĘž±¾Khཁ7’nĆ­w#G”ˆ3„rG­l­“:…ÖŸ:£ĀąēŒęø+Ē”ŃM|i»š:蚟…dŠęzܖI\ō+õéŚ¾[³G•#I%x1†fčIŸ•pFēu9ugŪ¾ Ōī>$ų/Ć×÷n5łre“É#“ŒąsłŠūgö2ż£.ædŚOĄßlÆį³š^£"iŽ"Š6c磰ŹōŹē5ŗZŲč§©ż©ė3h"µÓ|C Oö.žŃ/!a÷Hqœ/µz—ĀÆ§”4‰\‡Īqėō¤ćф£bĻLJxóĀ3YO¾£l Ķ›÷FP[õęæ‹ßų,‡ģĮ'…5OžÖŽŃäµę]+ÅŠ ;QFdtø=ņ9ū±””W3ļłčsĖsš'RŽ8§tfņįÜqņąćčk–k™]ģɒ9ķō®Ŗg NŘõ_±Ł\Śy`Å ėŸ×Ėį¶ČÄeIÉ­ &Š‚į$€Ÿ(«J 0 ®4Ó±žØšc9Š8Ä8ĘFEOfDQ2š¬N3ZĘFŌäl[łÖīX1\ć§­}Ó’Üż°üCū~Ųų„w®Ü[ü/՝4Ym9!w ęķ’„†ś w4Ņ÷’nČī§Ų’Ioź:/Š4½3ZŠ.­/“MFÖ;ķ>xœ:I€p¬8Ļ僎—S‡ģ”d1)*A«‚¬n/rόž0x6ėÅŗWˆ¼,#x&CöŻ.l’ ƒœ®:{Züōń™©c{iØ[,īćk+Ät#Élć'ŽÄgÜW2DOcłq’‚~Ļ‘|2ų›'Ä3N¾²±ęĻS…s±œE‡ĢWęõĖ$lWĖł˜ƒŌWU'„Žj†Tń ®g$Õ*#²G?Ļž€pkŖ2±Ė(ŲO*6c‡ņ‘Ө÷¦Ēņł€źNwµ\䐼›~čbƧ4{d µœ·§­×a„ŲYn)XĢezē½Mm|[*yVÕ<¬ź¦ś’UĮäv85ōæģ“ū@j³Ē|F‡PŠßĆ’}‹ÄVņ&RźŌą żų8?…>S®,žž>üX³ń7‡¼#ń¦ŅößZK{{koˆŽäŸO˜f ŠŽ»API9×č&šé}“­‰ •z:A…sN%—“ŻŽßWšō<† … *ņ†ĄÆÉ_ų-ēģY’ 7ū0\x’šKjæüō%°żżż†™±ēōlu®FķØ3üüu2}3RŌ4[Ū7“¹·~_½³·¾x®Jēj'Ī@Bv•t8źw>øW i¼ģ°<šś Į>*+bžŌķŽóMw”‘ūXĻa\uC¢œKė«ŪhzŶ±$~{ڱp™ķļųWŌæi‡¶­¦ ~éDÅ6ŹŹ®z·”nŹ’>žÕ­4Ųn!ø²‘f‚U@Ē‚ŹFEOvÆ ?VĻ͚ķ§{jyõ"śDŚžwg§‡‚åp豌ąW?§My„Ęm&v/å|ś×b2%—\Ū24ˆł ŒvØō¶Šydß)cøzV‘]JOCŖŅcµŽ5I.cĄ}؀ćo©Åzš[>©jĀ+ 0>\½ÅT––ŸsĶ<5„ˤx‚ök¹ ŌžadłpzW§k+ Ś•lńœøĄ™ŌņūĂžįģ­¤¬:õ·į=3ū.żŽ¤VÕpFXü­ųQĢd©“x’mKNøÓ~×pīg »€}½ė‡Ņ5'Ó4ė69į؁ž)Ę}Ķl.˜źęd™UĖpŒ’jĢž ø‡P„q ܍Ÿ¼)_¹Ŗ·C³]XDgu’Tۜ\ܚ¶£q}§iq[\˜fc–;qŲśT”vwśUę•7Eę²OATµ-”žCu|č@ ÷ ūZ³øŌE¹·Ųˆ@Īx5¹£ŽE ņF !Įļ@¢éŪ'ƒ6„™ø8ķ]ĘæØZŪx^=68¼«ęmĮ‡ŽĒ„y–Ø×Qifņ\yA¶–ĪÆ2|äuVł‡sځKČ̱²¼ŽIĢ„ķž¦ŗ =6{¤f’ Į}OJ å{ŅiļĄ„ øąŸA[‘K †,QZ¬¬ü}ܐ}h)ē³Y¬wM;¹Į9łS ™łTVžw­Œó±gøC‚§“õ„ur¬†G®^ČMkµ@Ü1ŒgŅø»ķZVH␟,¹Õ6l3ēÓUŻJĒ Šī¼5w Ӛk‰‘fĻŹ«üF“’Ų nåy"•VFēߌWvŅŲĮ4ŅHę2ÆJ˜ŪØž—­böīƒlH»cłqĶwאŲiv·2Č©ņr£­WŠę¾×lŅ)TŽ„ńėõ¦ėša² ܬ³0Įū¹ķ\ÓÜŁ+õ¤rO–ŚĆ½z”Qmf¹”YmɃPt+߆µ¦ÕlQ-"½·R§oņzžµGT°µ{„ŗ¶04jrHėšc8ķ[ÅńŪ_¾š©9 ”ĻČqƒļÓµs7—NļtIH™³Ēoj6Œlv~ń­ŻµÖ™ø¶·s‘\/‹­.®g½ø‰œŪŽ„ ĪRĪÖ`ˆĮ#–l×uį€eĖIó'ˌu®v‹¦‡xķä†K&Œ8UŒÆ+Ӛå|/|Ķ{*“™`rr{R7†ē®Ęķ,Dīó0>•Ėźė=„Ś(W8äēŅ¢{t£­Ļ—~4ųĻV¶»Ó@jāÖÅū‹r‘Éu‚ ćÖ¬iśŒ“XI†P2yī(r7ƒčPÓ®Ų”`ē$‚+­5‰Jä?½K‘Ó „V'ŹĒü+€ų‰¤ŚÜéi5żNٻи„ŠŹQŌą<#ö[iĖŚ€‚8ÆYóüŠ‹ ;€źjdŒŌu4"ņUB«e’Љb’åV8г•ųN§}1°“ś{„­Ä/Ÿļö”<ˆŃ—~oZŚ2h·Ŗ(ĮØ^+£¹A‚k¦:›ŻÄŠłbBA˜Åo jrŌ¤p~š’ˆü%ńCńļ‡o5V[vóhŽyśsŅæi¼UšSż«’dĶOö€·ŸB¶ń'†Äžt±šB?yŠ>ƒ×ō®źI·cįųĆ5§–ūmGh©(æIzz‡ž?‰ßQ³¼‚Ņd‰£Udģ£qėŅ™£IåA#cƒ×„Vižõz–‘śoū¬³ĻģcūfĮAüSo=•ÜöįÆ łÉøH£Ø<2=đ‚{ym_‘ō;Y¾ėZLjģćøÕQRi$RI3ŹÅ‰>½H®Š²’„zææOŠžh£ˆ–+?Ē×ūp¦½TyŸÜä`YÉ éօ„¶½]Æźøī?:ś/öh–O|FšTdĆ-¢+«n¾\:åS;«½YśK”_[K¬4’„ŚAŚčkß<_“Į!<2ēœ×e&xXŖ‡5ā’__^‹4¶C4®JØ^žÕóŹiš§…uVĪņŚX$ŽfŻņžtt§©õĆYk^¼Šīœ%Ā6šŒžŠšÆi3h~-Õ5+S)±ņC2ŒĆ94ā}F[RĶ£ĻdÕ“ŸŲĮ&“mpš¢’|¢>f#ū£­~Ą’Į5¾0ü5żœž jų‰©kZÄOxĄ­Ž‘yjń¼ˆū"ŠD  lźKgŅ»čŸćĘQ_ĀXœÕeÉd·v©;|“gīšNķ$¶s#yŖ –Ūņ¶}+ĖüOšSįĒŽä…~ x/¾5¶ƒ?g[ūä0ŸPqžę»-ņ§,Ķń*ʾn[4ģ×Ķ4|d’‚z| ų„¦”įŲõo…ž+“Œ-…ö&#$…ø=qĮ_„’šWæŲļć?ĆOŁ›Kų“āKß |@Ѽ7©BŚžµdō°;yj×Ü3(Č'­yxœ6ö?«¼ś@ā„ŽĆeŁÄœÆ8Ę3ė«JŅļ~ū÷źĻĮżäņķČȬŠGå^­¤Ü̉.ƒĮéÅ|µXŁŲ’Z0t¹b’:Ųo€gN}}jO¶P ;g =Ŗ`Ļ~ݱ§g™*3!XÉĪk³Ž×KÖ¬µT/żŸs BŅ®7ApÌõ=+xĀē‘™KšfyG‡~1|sųā oÅs i0k”’ö3÷HķœvƾōŪ;ĒŚ·ƒaÓ|O:M*Iēe# äzgé]Q§”ųž3ƒ(¦ÜOH¶ų‡k«é6:óM%Մ®±ČŁĪÖ=z-·…$Õ¢ŠžŽČEdų-#€Ø»+xĮŌr>CĻž.k? ģ|'6”šÓjž3_» »{ŸĆµ~oųęźóT¼MCQšāīeQ!؟-}ķҰ®}vW“»9K”>“į‹wį’‰õ~~Ńe“°=TGzĮŠģ m>3o"²*€z óŖ3ź°4ł[VŲŌū,0n*>nœš‰ £etŖQ¹ō“4(®•s$žE³Ä’ž¹Āƒļķ^ēń ąoš’Žõķ*ĒPš]ē”P²›ĢKbųŪęį3ӞµŻN†„ć3:wZVē|«Ķ½‘ēl<½ĀF]øö¬Ū»k¼EH Xę¦pģv*Šö2āч¾x×ĚeŚ%ʍ*+G×vO#ł~u䟓+]ń׃4oĆŠu+ųķf¶6’&¹%O©”ź#Øż„žź’²’Å=2ĻĢ–÷Ą¾ S>‘pėÄR/߀ž™äģkƞ †ż³“¹éĻ_ēOŁjsŖé­ö8ĖmĖ{t­ä]–ą#°qéQ$tÓwe?ēæ­?C–m:(`'ĢLs»œšÄ¹@ōM*õwŖæ>•±ā*}k@†ćLŗßŪæ™‚2%ū¦—)„ćcęOH½Õn”³ŽÄ½š|ķ–lōÆIH®|1c7F$•ŗ©ģq’×ŖQg™Š®¢u/„Yić½&XüØÖ}ū˜Ķʃ^MXr¾V~ÕĄ|KC<ĖięxGxM|×tĶķ3ÄöŅfOµFéżÜā½'MńV›q{j’r6oĮßī„ŠŠFHąąßŹ¾ż†|a»į^µį°m°ŌwĮ('xF?q…}nZ½Ėę§ŅF›\Sˆ}Ō?ōˆŸj%äóÜÉpēķļZrŽI&ę˜6üdŒtÆn;Ļ5ž—=7įGˆ#Iu+ DŒ$Ć~Ÿ‘ÆIÕ [Ÿ1• ÷PÕĪfģqš’Š“]2 >Žg©Į€āSžµ…£x‰õ-`…grw*üŖ~©ņ™Iž¬ŚKyx,ŠČŖ3Žõ šŚŚ-²³\mėŽ­FĒŁš¢Ęd,§=0sUć(ŹDĮCv8ÅjqĖs3S~Y”pG_ŗjŽ—Øyö†•pé%±8ÜÄzŌŁĻŪišNĖ>Ö<9Ą®ėM¶{'ŠEFuSž=č1,jŗhń "‘<āß?<ėŠß²³Ńltē±ø·[ؙ r=i¢[±åśĢŚ>“Z[«C p”„v®BĪžŽ č„3®ĶĄ€GAļNLĪR=S¾Ń×MĢG|üŲū§µ`躚ڌ–G'Ųę¤ĒœōfÓWÓ|­Bķ’4 ļā"ŽĮķē³ņmå…Ļqšd¶ģs·+o£_[¼˜UĻŹĆ„wŚe“>"IŹd^Æ“óŽę‚L=WĮŗf›%ĄŅõ)„E@ĄJ¼ŸQßłöÆ3g¼·#dūŌsk`~G\fÄ©)Pņõ­MO@X¬ćÜøŽ»ŗcØŹqźr†ē‚:4ßÉäžÕ£p×RÜ-“&ŌŒ3õ É®„pY¾’)ĀąšTŸt¶ÖlƒĒ“ć½&„Ö³YHŽ»² n¼^h¤…Ž)#ƒķ@m6ūȞ@J“ƒĘk½ƒHµ½tYŽtFęP2(5Pīr׌œ²$’3¾r„ø¦\F‘Z}œŪżźȏ7Õ“H.•Š*7<q^āĻMn'Sj š:PLcfx“p­ĆÅē4ŖŒuĒØÆIK­½Å¬/+Ŗļ¼PW+!ńŒēńŖč\iPč×66ā ±ą6ń–Ē^ `iŚŪÆ-ī#˜)RU†Ü–5Ųīõ/iŚ…›¬3:Ic‚½ė_ĆŗVÖń‹™ć9$œnŒÕf¹·Öķa±ŗKķ!ćÜğøŽ•Ė\č6-ŖMvZO:\nĮąb‚•ĢūĖ{[¼‚ą<r»•°G½2 V‰"°˜+®2ŲĪ ™hkcÓ¼9āå™cK«„Žę Ü+»Õ~ ŻN^[Ę!°¬:‚Jŗā3ń–·%ŪŪ£øš.7`śT:’o–Ņ`Ū»*ūÕņ³£ŗŅōė+ybš86Čł½kĮo|1k×PŁ •^C#fRSš§į@ԚÜùÓÖmģ4ēHÕsŸ,cwćZž‹Qiīķ?ōxŌ2Fq=…Kc+Ä–rėĖu8Žń0‰Ļ;}å[Šéé}yc1>WaĘh3:“¤MröJ.žĖyŒ‚¾żė;Siō½PŚĀ`’l31#+ź8 ‡#¤“‡Hŗ¶ø²yŅ.Šsž­³×ōżkŃ'¾šę„q »{„óŒˆ$ •Ōdy·Å‰.u8ŅņŅåćvbĪ€tö5š×Œ<Æ5Åõēö|—˜ E哽ķžÜŠmϤ|&ƒwą;-?P §k¶ķå2ĻĖ0=ó׌WĻ’tI-5T{O·¤k·Ķˆ|¬O|ŌŹū Iœ%Œ+*•G ĮjļķtMF!öęņ„ŹŽxļYcZ5¼‚ŽKQ+²/§JńŸhײjlbšBŽ›Å>aď@»ŽĀHl®ƒJģĀ48ėšśrĻL“’„pźśgŁ%ŽP2|„@䩤]Ż®yÕĒŽ|E=喓§ihĢcgŸ-O~œW”xg\KWšįW½N?|˜\‘HjA«Ž$’I¬ĶkiolŸ,°-ߊā¼Eā]:}FĄiGk @„•ŗēŅ‚¹®\æÓķā‚I¶¬®T`©=;ŠŠŚĪ ū)ķ§µ‰ā"…Śi!¶qü\ÕßiöÅĮž.Xą¶wūżkdś¢Tūž%¢kzNā)ģu8lT;Œ ōāŗo“ZGØÅ"; )Ȓ“?Dz ŽŌ–ÓķĶ$Ö³cuō8®rīīmNųiS÷ WNģ+9G©f†>›ąIµ$Ō”4Ä 1²Īk Pųƒe:N±¬Hļž¼vō¤£„ȔO6Žh5›§Y™åÜv„#Ķzļ‡<1§-ä3Ļt±²ĘF Āöć… fF‡ŠÆ¶ėUI69dcŅ¼¢ļF¹Õ‘-t䚼bC['>ä֑•ŹŠ>ńų_šæĮŚoĆ©‡‡Ųµä¶Dw“¤ćė_2x² Ī9G’¬ĻŸŗÜÓ5Za¤Gt.·¬“É#±ĄÜO4ŗŻĶÕ³yęfˆ§g2=V“]Ž-T²Ū©˜62Æ`‡ģā8ķ!…'¶l$dœzÖnB0|]ąūKmĻnˆTńæż+É5 "[Xě˜.īq“N÷!ܧ§Ų“×ĀuY$”|½3šķŅĘāH„p(ßėŠ-Kv!\ӋĆ6VÖź·P(¹o›®}« ĒD›O»ø ›‚@Y67#JśĘkō#mQ…t®Xż²žŠ+•CŒöj’FE„Oq.ö w£Ž‚­],ķ‹«9T;[„m‰r+izÓņ9źr=q[m}a2»0ĪĄ¼äVOqŔŪY·†)%y™#€>õ;Nų…qo+Ś5¢Éa!ŚÅ‡ĢØŖŒ{Q·S[S>”nל\Ž[9*U‡Īļ\’ŻŪCr‘ ČŹpFzŌ“j£bÖØež %ƒøō®N ‰/“xyč =)Å ø$·ŠÕāŒ,ŒĒ;ūj­ī%†H‘ˆ' Ć ¤D£Ō钱¢G ‘¦EéŸJžøŹąĘĮ銬ORT §™…¤r:4ƒ½©ö°Ąfņ šXŌ•m¼¶‹wNr5—u©Y[!R쁒)ó #’’{»łā· H?5vš€ļe‚-C|BŻ›€ė\õk[c®•3Üōlh[ašŽŹäø1žņ0Äzź4«m2ŽŅKy$®w£¦¼jų—{#Ó„c„ŗšM–o§ų†Źę9Śt"Kr8EĻŽēæZŸā'…¼)/†-õķ>hģõDŲ¢?,8ćęۊēX–Ī‡†ųVŌ®õ NXšB7ŹSóļZFĆĦ׉—CÓc›Z¾“oīāåĀśę»(ĘģŹOSģžČ÷v†ÓÅÆ'Ńm™ Ņó%›ūŁą/õÆŗ<=į+#ģVvöv¾šlVŠZ0ŒŃēsß>õėR¤pŌ’7­¦Ņ4ū½ĄZ^©»`“’7Ķ'Ø<ŅØ'‚l¤u¼ń^„ØN’Ö5rmŁ@ōuF<ź••®t­tż$ŻĄ&Ż!.76ā§Ņ“ō=?ÄZž Ń[ܙZ\2Ø,AĻOƽ³ĘE? ų‹Ć āż_EŌµVæ}žKyĻ·sŒg¦zW¶ü+Ņm<5>·ØŁhśN—jĢČe•A‰ĒPŁĒó[F%ßCĒ|]§|Fż£>!¦‹¢3„…¼F0!%pz’ Ļ5õwĄļŁŖ xdĮk¬Ė©kjņHšŹß>G\ēO„'"žÖ>fų÷āķ~ęuø°ÓcHģę³$Ÿ+²)ĮŪŽųÉęøoźš‰×LÓü1 ō×&0JĶј{ŠĪ0v1h“öqÓtė3XųŠĪM#Qš5x®YĀ‘}2= }ńńOI›ÄߣÓMyov©!BG%F89éUĖmĒŌł»ĒnųjštŅĆĘńDŹćyHļœ+”𦷦[5Ģķ§„ż¤Čw0P‘Į ŪŖ;‰ŌeAóI L3bD¢^é¤ü>±Õ>ź įH Ō-Agó$$8ää÷Ŗ–Ä*š£ćŻ}TH”O&ķ ³Äd±õ—ĀOųĘ_jZ·‡ĶÅķĢG ÄEžR ĄĻŌśWkŲõ°’÷Տ©,ē}WĀ—·vńż²EćsąFŲļ_ZE­§‰uŪKõ‰¬¢øŁ”'h=éł×-‰Ųئ¼ĻBš÷l5Ÿi×·H·)”£.>éõī~3Ń4Dóži xa_.4‰#ük¾/CŹ©;a¬Łų~Ū}AĢčRM‡8 óĖ"¾ˆżž!i>šĒˆµK«9¬uµŗaó2nPžšR•ĢŌl†’i½&ļNų‘ć=C]ŗ“ķ×ņ%˜ …qœśž5ł’ÆŁł7RG21Só!'bkåŠK”ŒīyżŻØiRiyŠŁĪy5ōĻģēńēĀŚūiZ…ĶĀŪŽuTĮX#ņ=+сĶ©św¦ŽAuM¦Hߕ݀ߕuś³Ķ3ĮpįX† ƒŒ×=ttSLłŪö‹ųY«_éæš•CcūėŠZ8†ęSžøżkį-SOkIĀ7c<ēŒ×‡]4z?Ą’MąY„ģŪō;پÉzŅ€Ē•ō/ÄĻk«^ų~Öś;ż:XÅ“‡ąTƒłUł‘?Ŗ’ų#'ķX’’g«æƒž-›ķ<«If-4¶§; Ļ\Ą~?­śN”>›ØŪ^Į¹#E)­FĻ®WWµń•op |Ńņ?ŗkóŸćæģįąÆŗĘŁ§ĘŠMwąļiRŽéHŹBŲ_D71»6BIīPśœįRš’³0‘žzß~ų‡įϊücšŪÄŚU֓ćo kiz„r‚Ēj³*0=ĮP9čzׂj(š¾yŻ§½k‡©Ķ%Ō¦„9TľÄcŒÕ<9ĄLć„nr“WKuŽĒiæ;‚‹Rą }(‡JĪȀ3ÆæzXķöķpĒ?™4ŃÜӂYw!“ ņīV–§k„§=œ‘1œćĖeĘčŪÕI­&wS?¶æų /ķĒ?ǁ×_³_µ3āĆåŠ=>Y„>v§bG®Šń蟏ō7ØL—)Źį ”zÖX‹¹sĖvoĖŠó-sLób¼†1’y öł÷ūBé¶šx/-ma°Óõ‹`¦4,w+Ųō-‚*ąk[×CņÓöŅųkń·į>Ætö:•Ö£k·ŌĀ"ƒåø=sņć>Õükś=߆¼C­ų_U·šÓP±»–Ü AŻ*Ć õ­Ø½la(t1ē~R£ęFzŅ3*… 0Ż„t˜5b?#nī Pzš‚L&P‚õÅe,üŪ‰Čż)#“Ėtl€{f®.Āŗ,\“3•v8ć­*Ėķ(6`Ķ>mJ‹ź^¾DŲĮĖ9jK·‚śĘāŠ¦ļ1Lg#$oŹ“:"Ļéūž•ūiA«ųFŁūā5Ļ‘„F-ĢRøwÕ4—RW»D{Žƒ5żY|ׯtMYšoˆÆ"Ōµms=„ąå®ōéc9Ē8#\µ Ļi¤—ė%֙:Éi0Ż?„ÕŪ'ŌžßQŌUäO%ķ/­³”š69ńÖøäŗ4ą‹ž Oū?ģ·ūNėśÆ‡ōżA¼ ƇՓ‰™–±;š’¦lOøÆÄŪż5e&;|Ļ•IčßJΌ\`¢Żķ”Ÿ-ˆ4;¹,n@S/˜˜Œξ“ųaįķNŅļķ6qµčččßtōɬź1GEc¼Ö<¤ÜĮ©jp]nVˆ ^Ąó\‡~é “¶XęmžÕ{ĘV·WŪyPB¢ž“ņ9čtYī,Z(n3|_ńg޹; ųžēU“Oū ŌÓn!|µČl})Ų®Vz†‘ µ…ŖėgŠķ ¼`­;[‘%ÖńN7©Ü1Õhhƒd\\\iÉG‚¼=+Še×£Ö.īģ“ļ6 F’0įŽyć±Ņė>7MQī,ī,Ņ–9HŃp=ĄįŚæ‰¾Ńyqh¤£BŪō=h-Äē#š[‰$•žó1ŸĘ½ćįŸ†ćø…|LĻm,Œ R–Ź®=F9 “ŁoīōĖmTĒŽŽĆĻ–ATž/Ö|'&žŗ”²I5(Ē cׁ@}q&±¦¬…įBrŹ: ŃŃtKXXĘŹ³”Fī”>š‘Kpё±IćŖ˜¼ ņu鮀1/dvĘŅOęµt­.®“÷ń¬ÉÉØ‘xžæØĆ$Ēh²ą>8a€~_ĪÆ-ŖY¹XCķžµqvzżŒ[-ģÆ^ J Rx‚ź ^xīŽ-äŲķL×ėÅ_:…æh­&¶HUåG'vÕūŸZµc 2ŹńČQ€óŚ¢RģX¢[‹ķ±+0L“…ōėSĒā-ź‘ WhÉ9ī8<}j Õčw—ŚÕšY#ZN$Fõ¬ėŪ\ŚĆ( Ć2}Ø+,¼pK,޹t$qČ®&ļFø†ž6Œf<ƒœš P#kR•暯 qóœńVbŗŁåą‚ĖŪ҃X2Ģ“]{„Ņ ½¾ ą‘ŁY±Š×ĶņŻjš~±v/-ę‚ö9)K »Č=G·4v1ė¦ź! Ü.ÓČ®žÓƓ“jQЉWw'8 ¤‹ś—„c¤ŸéĆų t–ņ}¦ [{‚O–›#®(4*Ķ <·PĶj„Īīķā»-SI–59žŹĢ1÷¾šļAG“=¤v“ü’™O&½ ĮńĻ«y¶š‚+C»÷c9Čō§rŌ™ÖŁé–²MoŖDČĻC\ņ<+ØdHÄmjyµ58żZ[M>Y¢Ņfo(“€GJób=RåKŪĘņ[tcŽõi6krĀĻRÕķ ¹HCŅŗĀڽŗ[Åy)$q‘ßéCEž‰Ø[i6¶· čåæ^KØŻL× jPŗ2{ŌŽĆķ“”±š;ˆ5Ė †?zÆjŹc€£Å·§< ŽKūA¤VĒą+fĒO»æ”^<…£<*śÖ-šØ¶j6‘z² 0²ŲĄ„æ·Õ4ŲćÕIōūŌ¬ol‡@Ö<ū†@ę)[˜āŗ˜µµø‘.$OlęŖ7E(2Ž§¤_N``<ĀAlõ"›¬é6–uĶŠ¼… hćŽ 9Ŗ”MO2š“_eŌf–2‘$Č3ŌzÖ注]Å4ŠÅ9–Ūø¬ģ4Œ›ópc·#5é:µ¼b9Aę?_­KŠ6„^ĒgØi:uŚ&—:.”$e  ĄnüėϦšTŚؑJ¹¹™W;{ņjyVĒD`iėzµŸ…Zu;˜"øp0›ł>ŲÆ3ńWÄ/čśmŽÆ5õ»m "Bü³ćĶsŌGu zč~zų3Wń§Å=cā«ā+ļōOķ!ia¾hWoü+é’i_eĢQ"41DGĶŲcÆÖ¼ dō/č£Ā —ŌĶŖ/z«“Ćg÷ĖņF•¼&’tp+?\ńČ«±é7V›f„‚ėŪ=«ĀŖŁż‘J7Ōµ®Xčž$šåö—āKXÜšKbNd6ž½ė“˻ŻĢųfĘS œR¬é’r9ę°ęg”Nš>ŽÓ|q­x†ÅW_»k¹£ G²Ø ”sl#c €zśÖ‘™čRHšŽĮ2OQéY:ܲiŚ^”z~ę6pHą3ż+¢4ī®trX|šÄŸxvļE²k;ŪĶ&+›{æ3 Ķ‚ r=kį{å„iZ–›«”—Yµž[)B7£N=ĘćYÕ¤–¦Øx½®Ķźh搄¼ĪYW= ėŠōK§˜DčY×§µqOAAõ:xšžL„:ŽÕĄ[ ‹vį0qėĶfĪøngé^]²¾Š¼ Öõ•łŒS>T}ÓHė†ĘńŸŹŽnœWń G›Cóœ0ņÓjć $žµq•‰šźy7„ÄvĪI#nāŻzšõĖkŲ$Čm©éD¤dŻ‹vW–kq*É*Œ šÓųmā‹;æ‹V:Xµią·įbĒĮ^ŖqW”.«[L|C±ų7ńsĆ~&Õ“ÆųŅŹ)&ŽÜ)Œ“ˆ2PƒŒäŒWČ~ń ZŽ1ŗĶ³ēĻb:’*“)Õos“Š8H ·mjXĮ˜ŽÕ“U™Łk£rbV߅Ü;bŗ}Äž+м=­xSEńƌ4_źS4ל]„óGkvO]ńŽ9Ą®ŲHņ±Ųu£ģźÅJ:;=uNėīhć¶’‚üp‡Mż›bOŲ·Į‰ąūm*ų™cEu* Ś ņ¼ģTńœ¾’é?įRkš…­ČŠę[äbžų¹Åk‰œ“‚²²üµūާóI–K,K—ÅVµIżņÓ’%Hņ ½Ebé#FŻ Ķ{OĀsĪÕtKƒ>Ćڦw`œäW-“g]Z‡éĶćZźRÅ|«)PsŪ5ō—Ćmy4ėūwŗEhŲaČ=vŅsĮÄĪģõ ½fksA¦»Ēqnž`ĻśĄ×} ßxÆ[*±¼ŚĶˈĒ2Ÿzéŗ˜PwgœMoØ|:ńKiŚ“2Eqy623T$ń‡ü$s^ŚĶ„ϘȫœåIķN*ĢśŒ»;®čšē‚õ{ wJ¶ŚŽÅx¦1ó.× Wó‚?żŚ’‚‰|9¶ųėū4|żŖ~\}‹ūŹ Bd 0³cĖ*ŃHę}+®‚čĢü]ĒĻ ™d¹Š~äkū9.žÖ _öźæŽ}æū|ińĘļŁóBÖ”āż:gÓon%Œ«Ż*cĖ•‰į‹/VH$ó×ķLnß óÆÅŒ†gć0T•”·ŗF^ņ_$Ņåāæ?ąØžMwž õūVi·q¦¢æšĖsøū…$Įü6ēš¬«­šįj¼™žk„H?ü™Ÿō½F÷CŠ\ķšąŪFχå’*ö{ al‹;¢É‘ødäWČā•īśĀ_•\źWHµ[U‘™ść梒ĀĆ-»؃óœę„R-Ų÷ĻąH¾ ü0—KžŃüuuÕZ0T¶N~ŻĒå^Wa1Wc!8# ®—ty˜…&Ģ?iŽÆdś”V7±Zņa"3Ļ~ŻėĘ[ÅŚ§ŚÄMpr‡k!=1Ś“©cÅ«Bē¢xćgÄMNÖt(`Ńn“{;_˜=»ŽŽ?Ļz[ļ5›Šuˆŗ»é T}žŲ”NnsšØÖ.Ž]¹Óč׍3½Ąi^i.ģŁf>äóV¼E2Ė 1ł2$‹ŌžüŌT•ŃėG ±„įŅ5X¬&’!, Ņ lĄĻOĀøļ k¦Hī-ü’’) Ąž„W$™*­ŲÜ»ŌA»†"rķĘ“v KgŚ®œŗ1ŪBK ĆÆ[¬—©ƒyĘY¼¾å}xēšÆ¹žkpųŸödńČmJöćĮ×:D¶š¤ĮˆŠPr‹†ī"ŗįQ£ēø‹«SƒėEÆ[ŸxBć ÓÉ…āZ°WGQŹūƒ^{āYoĪ“|–ė(o-”…Ēj—&Ļ^5ß5Vż‡5o 7Ä’|4ńl±¶āM36źąóŌcÆ®:{׀üSšļĆˆś®˜n~ŅśNŗ—PmČ LąLf§”ęö“öĪ/k¢·ę”¤xÓöSų®\É ^3¬s[©}\7įŹŹæ-¼%jöWV×WSB]ā1˳³}?M™`!$š}ßę{–Ÿ,m;˜óČ­.ŖĶ‘ł×4śžżĢ~$—¹Ōü'~!n·ć™3’įH’¢F„T7¬¹FĒG¦Ėå¢łW5ŪŪj>@B‰2pеŒNJģóJc£kÉ©_[g¢üĮ¶ąóé^!ÆkzŸŠüK¦i:vgŒ]D. b6©qĻė]4éŸ-˜ÕŒa)·±ū1šzĒĮ .4;ÆŪjŗ”bh…ÜŖXˆv‚@Ē'>ߟzńæŚ£Pš‡Šž&Žk? <ØxgĆf±æŸßµL %ödķąćšĶw{;-ęģ66®'å/‡SĆl/µ=B5·Ō¦šīÓo”ŃŹÅ†`×ßæ°Ÿš•ž*[iü{¦hž²»TŃŪP°’Ÿz5ĻĖĄźU4䔝‘sĆ3­–Wž<ÕT$ā­»KEē䏒‚ą~Ś_ž;žŠ¾ųSįļYź÷Žiń 2,‘ßŪĻmˆć²·¹ėńŗßMšž”+ HDvnĆ9 ķ#é^~d£*­Įh}7Ńė$ƑšĶ3I»É§£\ŚŁökcKKųcsāx@“P’„oĀŚ®Ŗŗ{k€¤%Ąē““uī+éß’Į?~6x7Ä"×Ć×ń†€čŅC|ŅW<Lõǧē¬,šr]ŪeÄ£8Ó¾®’óWŽ’dļŚsĮśV£ÆéZ^ƒÆi–€ÜH¶wŖÓÉe ßń^ąßėõŗGu=żź²Fx<sIÅ­ĶŽ.SŌ“xõMK]Ņ4‹n[K{Ė•‡ķ¾ŌŒ·+е.£F²«lv0|X›OŠ“FóF0ržĖO/ēmBŚ=6ü¶ēFĄ>٬„.Ä%wVž3Ņf"–䬠uėSŁüQŠt‹‰ā™…ģJ„a8#5-²Õ4ĻÖ¼A¦^jļ¬I2[»åFdź3õ®’ŪW m ńnņŲ|Łæ‘:iĒWµÕmćŪwćØŻ’ʶ!šl夌$|M"9­¢·–6w6ķ&ę<`Vbė6ZkȲĪŃ77ū#ßҵ涇=I–-µoķ=·w(ŠFėPȐ^K<ŅMŗbŲ'¾j¢ūžN"}ŽJmoVÓ5“Ņ›Oqlż.īć½ż«Óō½*ÓR¶Žk‰݉Ąō"ŗ©­¤ĻFBŠk%žŃ"źŻ¾B ņ1\Õ¾ˆš YF^Ē$¶z ō®Ś;˜¹ź~|žŻ6V÷:§€nōų—ĢL«!ūŪ=¾ WŃ4Ą_|-ywz„å²\\yxÜ’{޾Æ-•‘ž|ż%°ßń‘¹5ńB×uś[äz]ĒÄmCHŗ•ōż6ÖF^N¹ Zå/~2x®āźIo”Ó v?,P s^ģ^‡óel5•‘ōĀŁ ŪK»½«s*ĘҾŠń‹"¶Ņ&½·Łņ®Hł«XĘē›Rš/õ9µKĻ>źEŲ[Œč“oK¤ķDBÆ»$r+XÅ\咱ėń2jÓĶĄgŗÜpūp1LńM„ä—‰Pł\4`r¾)æ#–k¢"Ńåū'hMø!Ćó“ķšHÄW|\¬ō»ˆ“Č#i\ķäš½ML·Z‹Ī,äŽ/;k\ī>µģž×4ĖF‰õ%øHGŹū[øĶ¾¶!k™.ģęóWœ1VtNĶRą©‰ÉąƒÉ J%ßķkču. ŌŹ²cp-N}+zāćPÕäEĆG rp>ż±ÖŚhż‘/¼·{Rvn€Ž•‡|mģäĆ1ßü©s <³ÄŚĢ2 |ł<ā5ě·‚HXĖ$ ŒTżįļBŅj:ņ¬ŽŲJҰkÄ–•å>-ń/ڦó-n“€<õ)6Œč¼!tגĆ$ŗŻσ‚ĆŚ“ü{ē;”v5Ščš&ŒŚĘŸ&¤¢ćLā †oʛv6Œls?žųMń%Ęæį‹[·’x€ŚÄįĄÆžÆ,Æõ;(ćW0Z†S×>õō/Knō­G3#;v@«ņd3c¹5ĢM©E`ÉżØNўŌåęI„-Üöī®źŅĻŹz×sž˜Ņ‡n>_Qō¬Éå9"ŚļM¼:Å֐ڭ“ _Ė óLWŠPüLšķżæŲt]R|¤W×d{æ‹nEņ³ˆÖ¾![i}£FŅ-¬Æ¤”łĻßCü>‚¬é~+Ņ`-qŖA«”q‡ź}…ū6lé¦ŚŻžŽkĖfŗńųWsįhõbÓiRŪŗ¬œa†ƒžE&ģ>Fz懾Éh°Üǯ֟¤ųrx5«ĄŖv(9½é9Ķ{˽&®“¹į×DC÷HĪk‡Ōt=BóL¾¹¹³†R€Ķœ…*?­O“YāštÆØĪ–įH‚LśWaŖCc„µ½‹^A+²…<#„)Jć0ökį>`P lĄčilō­cÅŗ±KɹÜJŒśScXĖ”›®č^$ųwāk;iāŽ•C3Āį‚÷;±ųWÆųrŽāīŽé–āo8o\ēo5¢‰lŽóJ–;–Żla+óGZX4ūŪ[ˆZI jÄČ8Åk-ĪsÅ,uhīȒ;[¦Å"€U‰ķšņų“ «3mbgVņåī߂¼ņsCgDl}‹§Ķg5¤~}Å„ŅĄŠ0% dŚ:zöÆńf«.™ā ĶB×Jū|łnĢģx©±Ŗ‚<‡VÕu}kR vŅĢ…ÜG~ ÅyK:ļdĆ(#æÖ“A(—ćŃī<;n·b9Ą>µoM×&Riö»·OjÄ嚱ź–ÖQK`—wÄI8$kkĆ–mBāėGŽYŠ©sÜ(“†Ä§a>!ųƒ[Ń“)!Ą…s·ĢbN޾b±½æŌķßż&KœIō5Rv3ŲŪњīŚHB «eNpEoßŲG}ūÉŻ‚r9Éō®yČøÜo†ōɛqXJGčF źŚ~‘Ŗ2Ć%”UĪÜĮ³¢0īz śd’éš}»l²²ćžŲÆ5×<*/%F…žUą®3ƒIH~ͦyk}$[T7 b»87ŚÉ @>¦®ęN%ŻRŻÅeµ†Cœu,”®Qõ_“JŃ]<‰)9ūÕ&n–t±y`4 Ä«Źo\ÄU ļßLĻ„óIÜĮGOƒ;ķeµ[y §œWśę¼ć]iķghģ y¢nYĖJhĖŁ˜[ِ!gB8Č$Ö¾“XłŽą 9Ķ\;SDņx~9ycFi,98ś×*4»ė–h£ŽLēSü«C¢”ÕŲi3E2@Ź>^{Ö;ŚŻA~ņH¬diČ ‰#Nk.. üŻĪ:VŚ8™ę™ę•“9bj°½”’l¶Ęb€É Īń5vĪF„3Ɩ ćšnZjĘ’kgUĘrz UHāŠY<†8īē=+šK \øm U‰ŚyČėJ×HØĢw6H¬'#¢*ę\Ku|Lq7Ī~]Łā½Hųg¬OrŻCģÄ©ėģ5Ļ:öV;)Qźhjž±³ņ$Œ•øĪ@Ą9õ¹g¦ź:dpl –ĖŌmĪr;WJ×;”NĆuˆŸOĶ1ūĶģj±kŅ-µ]҆V “>?1\u!sdķ±Ü/ŒµæĮ›(·¶O”»ļ(~µvļ^HlSHԚIŁ\€üŖ©ŠW"s±éžų›āT¢ż™|1¢˜É7RŸ,:žœc9ćµ}Ńš³įžƒ Į—įŸÉØjūDSß\Dw‚ #z{שF•:µYt=Ž÷@𧃭®5/^Żxƒ_—j¤F]遏žµRkž6H-e½IÓeł¤ł¶±ˆuöčĆC–Ros«³»Š|=}eįD·}ZįŅßķ 7—  Łé]·Œ¼„ų/R€Įā/ųH/ ×"1˜U½?żjŲē©LüįŅī†dŽTsčæ…z%—ˆõO [A„JRåæx[ ĮäZö›£<6ėĄŚU—õ‹Oµ_Jž~üüĄ3ōÆFńļĹ“æ…×:eŽ˜å܃#±łG¦Gn§5i=c==3öŌēÕ| āūƳĄuI.ݚį$̈@!H=‡N+Öü £|pš†§ājśœ²^I+}ŠEĪֈ‚{s‘Ÿ„_R„5³<[ćƒÆõ½*ķ®”>­8iX+c$õ'½|µ§č>'šgм•ä0½ĶÉWPĀ^0p§Šš¤ˆ¹ömœžÓķ­5ßčÖw^'ó1op#Ę3ƒŅŗ9|u`¬öņ‰eI\–$$ާҔ¢(³”ųŗšWü±B‰֋•YäÉĮuā¾~šDhÉŒW{Ø9Ļ'äÖ{0½ÕŽŗĖĆMc}ŖÜA=ļ“!0wŹżņÆcżŸ~*ųKĖń†Zt²ŌÖFĆĘERĖ߁œÓWŲ\ŗŸ5ütŠltæj:¤P[Įn®eĢ-…äžHé]—ĄOZif«§ió$67ΦE`;Æ’^¹ę“g^„Ļ£üā’¶ź—Z]Ōl¤©`AŹ’;}x­ SECŖĖżbZŽåĘę}žµĒŽÅĒ’ĢõÆ|4ŗŠŲź}¢ƛɔ䷵|oń¦ĻÅsxĘĢhV:”ÖłføXee GķõŻ ¤īĶ/|)ńlædńå›D²Į"E$S†]ŹzµwŸ¼?ÆiŚuµ’ˆ£ŠKh.@Gˆø'#?†jŒ¹ŽēöčšĆ6‹ńOÖ­ZKšh#—…ņń“ų<ü£ų… ޶ĆTµ¶†#\ųQižŖŲÅ Lgy;HõŖz5Äŗn©o~$Žˆ˜lū機Jģ§.†|¶gé÷ĮOˆRųæI²k›H­.Õn»³¼gņõļ‚Z“—¼ ĢmÖ²Ŗ“5ķzĢ2M§ÜAĮu °˜‚Žp%¢ĪŒ}?ZŻJś#¦;žĖūžŃó~ȟµĆ_‰§Z¼Ó¼'©]ǧkÉnI­Ų€KÆū<6}«ū«‘ģ5};Lń–Šö—¾Õa[Ū9amČŹą6_Ȋә8¦]E©č_ uhmļ$“Ō¾Ķ!Ā’~é­oо{Ķ)5] ‚kŽ'µ‘O*ƞlōüj9głM’‚’~Ē:g‡o¼ūpx'CÕķü9®Ū’fųÕl£.‘\*Ī£‘Čd-Óå^ēŸå‡S°ņ.™įi7€qĻ<’ZĻ ĶĘNśæĒ_Ćcžhä.ˆWˌöüj“Lņ¹Dkž2{{×iĶ-Ēž`\qRyŠ”Ć!Wąƒė@‰gh޵Y% ŲV|r¾ń’O Ž1Šh”ve–X°dP§• j ˜øņŁuEi$ĪČK©õģMūQėæ±OķmšĆć~Ščś ^„޼’3mžŅRĒBæxÄsš’KļkŚ<įÆųVź ļ kqjE&ō`ź…#· b)T§ū¾nĻžõž·čęź[¾±e]lżź‡#ØÆšž1ü-/Ņn,-–Ž;©_ϱ’Ns/!’ėÆ:{ˆüŚŌķē¼µŌaŲŠFūģ5[uą:±#ŪØü+ł„’‚›~ĪW^ńČų”i°Üi0Jc½d8eG†øššs³%£ņ‚_!˜Ķ…~\ VĶpžZÄŖøüEvŜuK'”Ź\¦8ÉķU7ȹmÅĪsō®ˆÄå#ił1%ŪØĒZUı 8=éņ¢%+¤ĖœĘ J’łƒ»oøć„¦Šf»;(*Ć#¢»+嶐91Ū "øjnn|'’.ż‘ō_Ūöbń~‚tä“ā‡ķ¦Ōü?*ǽ¤Ā|šķźŪŌĒc“׳æxĆĆ÷>ń” µ¼Öļ®å`6‚W„xö¬”)søµ¦šż÷ż>š8«fxox›w¹’€×·xɎčĶŗ=‡iĘz’gYu"Hö'¹‚--t_µy>dŽd*NvŸ’Y®×Ć–Ze”š]É,]øÉZółˆlōßüI Ւīī’ε‰¾a)Ą€žuōVŸ¬[ė‹oÆEėKŒH§oŸ’]wQØrTGcijm£E…=@ļ\ÅҲm@…bS€=½kŌ§#ĒŲÅm; Ź<`š½&”°³B«¹ŗē5ÕŠzśĀh”“q‘Ūpõ©bŚŲ†G#Ō÷䊏bž™}okĶØ 02YG,+Šģķ­odF±·eG9@NI¬¬7*ļAÖ¤oŽŻįt&3·=M^LÕī.ņ‰·Q’wŠ,\`Éõ ;Ż>ŻÆaä‘@©®ÓĆ:ēŚ“X5{˜ķuLmhņC:šE8•dń6™ØŚŽ.²óBĮˆ,K{ןZCm}x×¶—Ęę×pņČ?yh2p=j– m‰"·aKørGJĀš×Ä]BŅīoźšT±­ÄŖX€ ¦x'æįAq¹ēś‡ŠtĶnī”’ ŲNwŸŗ äb¼fžŁ¤½¹ˆó]‰gQŌPYÆ£AēÜĮ€#¾Mz=ä!®a·pĘį0W»ŪŠqÜE˜ķ.<6c¾»šW¹—*„Ū—?˚ͼÕg¹¼·ŪķP±Żøq“śVŽÖø±&‹c“nd€m‘2ø9&¹Śź)ŽŽa.Ģą: ĪĄnź^žŚ"a ¹¹ĪīyÆ%Ō ¹°ŗxęFI°Įø#éH‰HŅK«;Ėe‰“ĢP6õcļXVS[Gq$P”ƒä?Ļz ‹¹­EøUłvē±Ķ-ń“Šc&šŹ¼īéŒōOkŚ0Ćię+¬cśUŸMm%¹K(R7@"FśØ”ÉJVįxĄ©“Öø‰&k§ŽHĀøė@§šņĘ-W7Ęd·HĖ$™Ęp~S×ė^cāŸ…—¾½Õ.,5/ķ-1§3¬~čnv’: ŒL„‚ņ]5Œ^f7 1žÕKHÕī­/gŠżC®AŠØ«čR]ĪŹOHT¼jѲąt⣃]Ōn g'ĖČĮšÓ•–Č»ix÷Yó“Ā<ńŽ“ķæŃNė…Ż wÖr·B’±é k y&pčЁ“Œ |żć·¶æÖg”ĒūšH$’=jFUšÕˆ¹t>HVVĘjö&M<¤r’c£…C¤¶0ܗŗó&‰Ęį“ö¦¤©s4PÅås€½qA½=#Z—OŌmH‘ø 85”­j_ŪóA$į!X@±ØPøļA¢Åźšeœ åeŁŲ‚Ojf•Ŗ®ŸD²lpxn”Ų«&¹,z“Ž‹™NC*ō'×üśÖN±­¤ū.mdt‘AÉĒŽ £&ŚõƜČAż?*ō¼Įg,·÷%Jm'±µóXŖ—¹žÄpgQʲŚX *Ѧ­óŻæ›méVļ`āķ¢YČLjŲć󮮎(™,NkŹ©}Å#™ńÅÄš4WObe &ŠĄr‡×õƽŒ¤ķxvˆX[¦+šĒtdox\Š Ø”–t€rz{×”~ŚwXD‚@ƒŒsĶ8§Šģ„#JŽfesšÉÖ¬W[Ńõ &Ic™ 1SĻJé§6•Ž™FēÖ°wĘ]įWˆ4Æ|zŌ~ŪšöŻ™ģ®ä„xlmŒœgtÆųĮkął¾2|Zń_ĆōŽėĀZ–®÷q0Āģ*2Tvꊒ¼O.T±YoOgĖóęæł4ųĆļ4&é#²C÷I­ j9F³ČtL“ĻJąØvF-nzKn̲ĄŁa×5Ęėš†ėé!†E~8+3ŖœŗŽ°Ä¹‚\0ÅmEbaŚČ;b¦Q;iģoǽ yå%Ü{nÆ?ńVÆuu¤Ū\\EZtłŲ¤`Kķõ¦‡RÅßü×ü'ą |GŠ%]G@½™c½Ž1’„ē’ Ōųkc¢x«Äš^‡©_‹+YeUž@74(N ķļŠŻEeLDS=×ć§ģĒā‚šU’Ä-#Voųę•#h±–8ź£=}+ęČ®µ˜%IńKŃ­~$Onßg³Š²$†>2?Ś<ż;×ęļ‡ü?żoh'É擲V5Ź©b=­Okš]rśY_ńæŸŹĒwc(lĘĖóÕčāhÉb¤Ó±ōq§”2ĘČŪÖL’y„ģĆj³ v­Ó2«L͹“ŌN§eŖi× ou‚2@ńśUł4’ķ½fkķFŽŅ•‡™µ«Ēėšnū.6»ģ%ż¤¾|NšWÄmFųµ„]jŚÕ“QhæZ˜ ā“ųYs÷~‡½nüEżŸn<=šgI‡Ćś¶›>¢nŅq€€n½’śōrµ¹ų~1Ѭ”é;ź’=OŒµ_kÖ³n ĻĪõlćw·ĀWW:”h’©•¢‘dd[%½æš§Šõ(ÄĻøĖhłĄeČ?ó­9O¤É+©MÅtv>£Ņ'ƒĘ~ÓÆc“‰īgˆ‡ ‚CŽæN¢æNæf’ĀÄ’‚w|ų-ā=V;_ųwOÕm"µ»“k5£!’<•ݹ8ąz×E­‚ń×'ž'!nŒ\ŖŃ©NqKŗšON¾ėgĻæ±ķ§wš;XŅ“æ‰É'ü+ķBĘŚÉ¾Ģ¼ŲL1‰\wźGКž4ŻJĆWÓģum.īķ6ꞎhĪVhŲ¬ø"»©¾‡ņŅ«ƒå…Ķ©ęŠų+«?ńGæ¬moF>īžŚĘ3-Ō«ę¾Wżµ#µń_ģkūOYYŗ]«x#Xެ¶²0żV•Sł{.Zšš|­5ÆmwłĮGƛĆoį½)™-ŅAé“cņÆoÓ—Ļ€JĮsüĶ|–&;³ž‹p©FK©u’B„Tnē§„E,{U6᛽sCc܇ĀhZĄZ4ÕJu Ņk70hŚ]ķ’Ł$šh—r…éųևŸ‰g՟ n’³>ų§P:|wŚuåøc¹xmŹGŪ9ÆŹ/ˆp’Ā;ā}>kX|­.ņI†é ēük >ēϹ^ꦛØEuW‘†:qVŻnco6 Ģ õÅB™č`ևØx_Rņ˜$Č;|Ēø­ŻB’ķ3ƒ·8öŖr¹č(ŗN” æhv…6•fĪÆ&°u‡_»–įg<ćÖ³š2”C‰C:JQI8­„‹)ƒŒµLÖ0ŠÓ“Żk™%ć# q]§ÅÆŲčsx5 =< ÄČm£€g÷OžµvSК“Zœm¦„e£Ś½ū¬«7HĒ<Ÿž½}µą‚~ų‘ą+Ż6ŽŅ]?ÅI·¢ė?$Ė·![Ó§ZéŒ:»Q՟™ŗfžžńM·4[»ˆ×MŌ;ع)!WĘ=0M{ĻķefŗŻ¶½k©Ūk:nÆnš…½ĘC9裔•‘TŚ”‘ć¾:ų‰Æų·Āŗ†u­Mõ[‚ZĘqˆG·æņåā7ˆ¬°ŻærŹg§JŠ=OF¹™c+"ģ5ÖŪĮ# ';sžk³¦1±ĶųŽÉnt«idq‚pćo^Ÿžŗćü;m>­zŗ|ēJÄ*Øź){6UZ©™āĻ kæ¬ļ_Ó.­āU  ©Ėéė]GĮ›’ų¢śķ\ƒyo*ˆA㟄oėcę3L-7(³ēŸŽž/¼øńõĪ‘UM=Ϭ>ųĀ/x+NyīāŸV²" Ü0$ōĆc®?śÕė¼³GŅomõ Ib-½‚6ć³ŠśWO6–>;ƒŒjčŗž)7†måeū=Պ¢[f©\h‹op±y1ŻŪ7?:‚3ō5•HŻh~—–į”–§Ļ¶æĀ]Ä_āž‹c ‡Œ<5qܼ`n¹“$¤{gō5š„õœm ³LÓńĪįÜō«į¹V‡Šæ“_ŠŽŪöpų„ųRö(®ŒŅ›Č €Ķpœ‚Är9ż1_UžĪ_“\üįńy}m·¦¢ZÜŪ“„ć¾jŃF'ĖՔ£wę}%āuKŪ[étk[‰²‘6ՐŖ}«ā?ڃą>Ÿąļ|ų…£ZGįżS]Šā+ė2˜RÉĪqėYŌ¦šmt;©cŪQ‰óo‰oa’„*= [y:Š^E:]F¹xŠć¦yÆ©>üxŌųÖŌŚ|ZšŽ‹iÆX[÷r)÷g3É VQйėʬ­sĀüq¦ųJļŚÕׇōõÓ4ł§fHć諞+Ē>'x\x'NŅ5ķ%ķµ käwhäddĪGzWT)\ĘXł@ū’į·ĮŁ×ćOĮx½tłtļÉ—<ђVˆH¹ėō­ķgö@šó2ßZ¼»¹šå³ĪPVQŲšr8§,9<ÖīŅ>5ż¦žč?ücąkßź÷Mį­^ •-$;žc<±>‡ßŠ×ŸÅ Åõ‹¢Nbw§­sĪŽųÖę:ō=: eļaÖVMŅÉæäuĄą/ēZŚN„mµ»mfh!Ō-Bę¶—īĢ3ßõüėTMBģ:zx’ž-3OƒE³|0·FįséłW”iV$.Ų×*rĄŽ¦ŗ! œSÕßčš>„fmg³¶‘œc,œ©öÆÖķõ2Ļw7:S0c]Ž_séÅuS‰ĮRź>ń†ŸāĖF6€Hńü²«Ē^ vś„兵£D >s|”r2s]4­s’tĻ‚ælÆI’ ÓD×c·¶·»‡RŽ4æē›7?Ģוų{āŽįM.Żu-Ea(ƒhūĒ®+č02{#ų;éCE¬ö‹’§Q’ŅźqńĆĄśõ–t½^KĖ͜£ÅåøæZåō’Ś_yęGŁ‚1»ń5īÓ›Ųž`«‡²iśōńép\h¢}9ąĮćŸž½u׎<ÕõĶ.ÓQŃZS}D‘Jēl¬2Ējź„.½3×<”ā­=.$Óå²¹PŒēÜWys᫘•Ua–Vć ļ[ĘG—V™Üų*ÕŌ\ķŽkkøšpŹFļ”®ėĆŚv³ÆM|é¬C<{™UY~ę8+»ó”ÉRƒŁœ^«¤_x~ń¢µéÉn˜ 3Ұ/¦¦ bµČ"“RęsµcŌ4¢4]¦[­· Ę0›¾|×é^?ØĻå]\NėµKd:Ÿzq9å†e…åÅÕé2«¬XČć½l¢Ä.¶K˜¬rĄö÷ŖHĶÅ$z On,ĢVŃ­·Ė¹\ óėS²»ŒĻ*Ł­}4I ”ZEÜ13ÄÄoŚ71śŃ`±®¾ÓÆ[;õĶ$ÖvÖ1؈·–ĢTēō1eńRč¶©lšŠµ»0(žŽų’=kĢ|Q¬Ļr€ĮKbå‹cž{ Å«n3Éną•īT€åY½2EV»³.Cg^ēėHŹā¤Y%¾ ÷„ī\ŲzWaØGoa$ŗf›ö¹‘s…8ŻõķThW×WØn¦ lĄ’«#‘^™o=ĪÆf,·”C„ ƅ©qͼKąķz‹„"1%[/Œžj¶‘ÅŖdEĘĶ+X ÷6ą3ʀ܀pŠ[įD1Ż!ó9ž”œĢe¹ZļY²±ŲØ’Č¬Ų,‹œ~UčpK¶Č£ć,G4£.ŒQ‘Ćė:lIĄšYŽNSŽæJņūļ jń@^4Ž\žFyÖ£r¹é‡õ --$ŽĪķÖlź2£üāŗ_hōiķõC±gM»Xc?ć@ŽHµmd³SūŌQ¼ćŲžŅč6¢³“ķF\Ÿ¼~”ščj„ÜĖńµĮYf¹P¤š#Ē>äWĻž2Ō¬ķōķ–ķeI—Ųywž÷’Z³·B”¼Ić ‹ļ%aŠa†;šCÉ÷®Vāś}Qą‰œ¼«€¹<)õ„&C¦ė‚)Žęvg?+nÅzL6k%¢^Ū°deÖnꊯNßĮ‘ĄÖóC|U”bCķąµs>-¹µÓ¬®­,-£šõA!›€x*©x¼Žńv­ÜŻiS G9R ļšåŪD¼³Ōm!¼‘ädr‘‚ß1ć’¬k[hK•·=ūĄzT¶_M5ŪA)`§æÅox^ŅŚēŽ)ć*’6åē8żEg=…ĪŽĀāv‰’O8Āēƒ]¦±¬ā–뫼‚ĶĄ&¢1¹Ÿ+gŽüHń÷ƒķo-dӌZޤæ,¦>XŒćĀx³ā–©.ö%ŚóĄ u)•1Ž{UØ"•#‡Ó¼Gm¤éĢŅYīŸžĘ¶<5g?‹'{ց­Ął‡˜@ŁYÉX^Ķńw‡5ØķķäӟķDĒ5é^šŻŻ—ö}Ž£wnŽddmÉõqZ Ķ£ćč¾ š{™Q~V Ąæ,~¹­-0iŚ~–Öģ#Xö ^€Ž•brgžKØĻØßÜ[\F"XŽåsǘķU¼A¤jš¾=½»,JTˆ˜6 °÷ŠfN„Œ?ų{Ä턾©jevlåć±<Õ/|&Öōm6Mqu(ž y¢Sʃżj¹Q¤*ٜ7‡“@ėkwiwń[Ū]Ē©½øŸhĮČ'ÓŸ3•¾ÉĖ‡Ź‰³Ś¹»‘³¼ąķĒŌUB] ±Œ“ż¦y!„/§¶{WY'‡…ĢHÅ2ł†ydņ#“¾ŃW~Ūx~ļ¶k m9Y$£¦)Ü9Õé [)vŻ–;²;UĄ¶ÜaQŒņZ|ģt+Ż“P«*Œā¹sf¦J–Ī3œ}(r¹“$Ś?3k1ŒŒb«,ČV]ģ±ś{ŌŽ+Rm¶ęM¤>sJŽ{kK˜.^i„2g%U ŽÅt°{hČÜNœżźc˜ķ]ŽqĶc'؎fmQāŪ¢“’Š:Õ­7HŌµé­Ž8®öä±.JŒ÷®jŚ+“#sķæ…ß ¼ ö[³®éęīWXZLxĒ^+_SŠf7źŗ‹’’1q"Źƒū§ņƽmOZœNsSš¤œŠ³]ĻŒ‡z6CķÅ^Ömb}­o°p.Ą+ž5MY‘m¤™]Ū t®CÅ"ĒEĆß½½³¾G–\GµtEŻ™ĪvŲƒį’‡|mćFĖMš×†ßQµ˜łŃ±5Ų抿ųCū/hšeüŚÆŒfƒÅš»  §Ąēm¹Ļ³ļžŸ„wсÅRÆD}­‡l4Ż-5ŻgRÓmņ’‘lEˆ—uķMÓ5ĶwVŌe_ čo„hÅYd”6 Æ=2AõÆF9­7Āöī­Ø¬„ھaV\Õé>±’+ʇÅ6ŅiŗwĢ€!łˆĮŪŌ}+b9Ö[xŸāw}B-:źÄĘńć*ēŠž?ξ$ų—š?ÄŽ[ć*K6ÜU‡śz(RčisćŻV/²]H²mĶ“`OZēä‰Ry¢1—`0p tĀDčÖ§²üńUĒ…üGdf™#“, eĻŽĻLWźĒ…5ØÆ$‚ā22ō„Pø®‡Ó~ÕŅ[ˆÅŽĒČ#qē…|ŸūVüŗń]½Ÿ4]=Žm=].<•,nä徜“^=EiPÜųĄ¾æÕµōČ“ļ"9cei‚±ąöīŌ|6ńGü ~+»’óPóōIA·žŽc•-½{VŌälwŸ`}#V“H¾‰nt‹ČĢöWrpØ ä'Žæ¬?ų!’ķ[}ń汚~Ļ’|Kß<+•¤‰¤ĆßZ€yūĮp#ŚŗiÅ4ÓĻŁŸ>[ĆR$ˆ#޽óĀ:œ:ī•öY‡™"© 5“ŲŹgŒü[ų=ąŸ? ž ~Ģ,~ŻįOZM«1Ȝ‚Ė“ö`ĮJūĮÉÆórż¢žx›övųÆńą·­o-uļ źņYG$ØSķ‘>\ØUdĮß5œeļśÆĖžęq>i¾·|d›±X±yę3߁žõŚa5Ԝģ‘c)éōØÖ,ĪĒrŠ@ߖL¶ķ¬;f˜pØxĒ5“vb—†ėļŠŃ·˜æ7J£X>…ŶIašŅYbpF0:žŹ’ąŻ’ŪrēāWĀ}cöAųƒ®Csćļs 38\ŁžÆoRWvÜśōØęŃÄźŠ?¦§ho †ī,łrpĄŽTןx¦ĒĪ“–ĪEj’ńWŸR:~s|`ŃcŠü}c©eY¦‰«Fö÷aNß.ą)ŚēÜąž8ÆĶ’Ś?ą”ü)ā źŽŽ-Bę2ż”r&\ŸnŸdˆ‘ü…üCųs¬ü.ńĪæą ~ `–ĪīClģGļc$‘ŒzW*܀89'ŪŅ»)÷0«اvŃ4nĮTČĆhĒjÉņ%tŽįxö®Ølp°# »°#éW§Ś-Eš;ÕņĢÉN œņM=—;Y[*;AIX±ēķ‹ę…ʼEYµ” cųPuŅ‘ęhĀypJ़«}GzžŠą†_µ³ųoRŌ~ė†āėUŅžKŻŽiĉyi'ĖqSČĄTIŌĻėįGˆ?į½Ö~[Ż]jX?ŪžžO™n-eł¤‰”Ųďl_Piŗ¬$ÓtķwGYĘé|ŒÜpAĮQI6:„·‚0%ūU‹"²įgŒŽFO ‘_ŗüö%o‚?įųŃąķ6ųwāՒśŽ<ļpL°Œ ä8śšĀŽņb?œ‰Õ¤³Œ\ C.[åžjī||‘:Ēę€ŪB€xčjj-,g7ŠõK˜äócŗ¶`Ż7œ`kמźvZĶµ•üHAg]ܓé^lćfbĻLÕ¼9„ČåšŚT¶ēV’"½³Ą>#±ŸD¼šĒ–Ö²Ł2ÉlqņȤ`Ø÷ą~U„ ģa-OKk酚, 3€*Ś½ŌJ‘`?NzW³E²Z°%Å“‹ ɐ_Jź’xŠĀwē¦{×dš$¹†bh+“œć<֞•ce|<‹qäą ŽjŪ5‹4µ=ĘH&“X¤AÕˆÕMy“Įh·;UՎĆķšŹLŽ2=E5+ÅIdP›q»vA«Ś½ccāŠ«„$Źn<*M#+ž#m.ä…Ó­’(%øūÜ’ś«Ļ,ü"±OS–TŠŁrį‡Ė“q•÷ ®q·:u–µ‘iķŗEbpOQYVZ„§ lį†8ŒDlx “ŗÕtŪsĀöVś†čfóÖd Ü£®sų óżNĖVmR[«…ó.¶ó:īśš Œ;œķ®öŪ‰$Ō!1JŽé“]¤ģr· ³Ź-ƒŸ˜śS±§³ź^ųuįM&ÓTIõ¦tV”)nį}æZöx/FƒQ3é7+,J£c‘Ł§e(ŲņYßÜˢà ‰ŅÜ0<‚sž&¹Čå°Ó^óĖ_+ę$ŠŁ¢K:O/õYA†m-_ęSĄ{ ś“ĒÓī !|°Tœj ­ōk¤˜ 2ƒ§”śÖœś’Ęҽó~ķŲŽݦ;LVQÜė.—ņ’ē?Ź»Ż68Ķ¢I‰pē>†āģf鍞 ±! ¹eĻ +¢ŸĘ«{jŚQ¶ +ó±ō Ö,éį ×&ŠF¤–‘6 ŗąš{ל]éś4ś“Š$7ØüŒįśō ·}§Į$å”…¶’_Z”em*M,.Ū3NįcM”ÄaS?θ׿¾MJņĘļä…[÷Y±ž9¤”hBiāŒ#:)lč¬Ļųj{{ĀÓbG^IBūŠ ådz#>•q —6rµ«ŗ®BżÓ^āM’\ӖūJx£Õ“ęNA±ü3@Ōƒa©_6Ÿ"ėp[Į2a”ūż½Oį«k;-Xj,YTü¬1ÕÉ4FØ,mgˆ6D’tŸį®&óPlļåI}„®;µŠG)&“æŁH%sq*ń¹ŗÖÜł–²)aę7ŻĮäP^ęM½®®±J×A¶)Ē=ėBÖŻ¤„ ńĶW/A„c”³Ód‰K}Œd{T:“݇HQŒ,OŖF°;Ÿ é‘jE욓šĒ,-7rźzq]TÆ}mįżNźĪ½·“.T}ĢōÉ„(š«™žÖōĮi<śœńŪMå ÷²Ž•ĢxɤŌlćkŒ6®Į‰ØĻCYJ=ĖPīMįéf eIck¤RFŻ­Iži•ĢڃÜȗlĄaøSŹ’¶ę»éŗl6§NøÄx8Ęq^kq¢Ék}?š¾|[÷ĘaéYIjj™ź>—ö˧¶²)(rGZźm­šÖ-|Š”šµ&—Fc.…§^k¶G_“[Ķ:<‚Hźą¼­xkÄ7-gn.|=+‡µ™só'Óq•–ŗ> ÖRZ¼+ūĀ 1\=?YÓ>Ģ­åBXšri9r˜–Čeņē)\v5nź¹ˆ%ø`På±ßŲÖR—AØŲ›Hm.oµA~eQ…ŲqƒPϤٳ–ŠuiGŽ^øØęfŌö9Ū‹ ø/"ŲwĀķŌv®¾ŚłtŪķ.Īžę;{9pZVčƒ8Ļó¬å+”©6|Ķńć¼ŗ§Œ_ĀvBkŸ ؁s(;’xź+MÓ¾Éx/Ž{‡i2sõ漬U]ź_£}o8–:¬o 1ŗ’k–ß$γJt»ŗ”PƧ„o_Ł\Ļ’±#ĀExU%v£Ō½ZŌ湏‰¾kšlŻč¾?Žę'†Šä¤›,¤tĻ<ēҼcF¼øÓ­ŹßGåŗ±łIĻ؜ocԊfžµÆx~ŪDŸPń5ĀiŚ +38˜¾ÓµTw$ąWœü/ųšĻÄŅÆ…üą]Bɤv’Ī÷Ķǘ‡…O~ō½†·1©Q|½O£|wūĆu„Ūų³įŠ.¢ŌnÖ×Oø$Ēó ćҾXÖ|'ćoῌ“‹ŻŶ/óĆ( L™Ęō'Ŗš™Q¶ĒVw”īš5Ć“ )Ē5©nÆę;gåf¬­m£”;›0Ų£²|ōČČõy­±°åĮµ“Léq¾†bé—ŗĶÅŽ“ch—N"3'’#^Æh‡…Ę§ÆŚŁ1Dł®?—įG²fR¦t~ńßhpjI#kc³÷»Ł¤e™³•¬j@Ī*ĘՌOÅ\¾µŪ[FBG f‘wg§JÄ鋩OżŖŪAŌ§ƒxDåFxę²|C.•ā‚Ą’ĀA£^4rÄ[ę‘£~„~5QF5äĻ„>\Śź³OŒ,5»a<Ÿ³GĪS{?ė_æŠm¾xóIÖīōÉg±|[¾:É9üAĮüė¦ĻWRsg퇄ļ¬üyš'Åv“Ū?†ęšÕĢ‘¼Œ LH8\ž29ÆĒ_ŲŻh¶¶ŗMź”XĮO÷†ćƒłb®R;pi¦īz~ŊQ€<¼œśšŖķoĪ É8¦÷gÕPZQE{›-»"“ķ ³†ō«]ŽŽEŌKdņŁŽ@KjĢ[w²äļ=ėHŹĘF„$Ū Ź“Œ×Yk£\Ł/–³+Oõp3ś×\5Vg‘‰§xµÜõ?ų)uķēĆæŁąL¶×i؛’ÅoØI92}‘Dr˜ćB~ą!Tćߎ¾lń‰īõ?‡śtę’† ųw®™ÅĒÜ3‹œbć'ößćcƵ½rĪžĆmß3 ĀeG{õ®CL·Ńļš4š 9qĆ:W=¬}ĶU 4™÷wĀ ]š jA–ƲēvJÆ`#^æ†õ&āĻS³Xg±x€r vS}‡Ģ0žó±źVŚ­Ä┓,j3Ū¾…ųxÓjö—P›“"tž™× 0“¢>]Y_ųāoģėāė‹h<=®–Ō,$s“Gv7vÉD?Źæ-~(|.›VŗŠę8n›R²žkvKg¶Iü«=¬©ĶŹ=użŸö}Ōķ|iq£xŖ2Ēt܆=’>ķ_”Ž7ńōŽ7𒆾x ąµ?‹N>ß}i ³In£—|Ē=všŖf™Ķg„IĖ–1Õś#É“oŁFóā'Å|4šWŒtßµźqÉ=ė“{—J®ēVN¹\cūæö†ż~xĄ¾Õž|I°°Œ[Eu|³[ÜĻ’DE#b¹ĮĄ`{sļ× äŸ¤§RĒa°Ł|UŻłļåg÷ŻżĒšüNż¹>3ü Ö4 āģ馒hźG5‚Łź7œ‚öŒćōėž+īψVĖ«|ų€š•µ”½š½ó\Ā‹ņ”{WŹóé’? $ūŸČøœ«ŁF2R»głė|?ÓhG[U.nūĄJĄČW¶iö“Ɲ¬ŖNĶ|õw{Ÿō‘Oż’•æ–?’:ķ¬ šoķhdxJ·+Ō~ø¬sbS"Œ®MsĮ+I”z4łŃ€;słUO7›¦^A[©ŒlŽ8čj¤“<śż”a+’‰_tĶ[özšē‚'ńWˆąŽęöß|Ā%†%H•› ” ųćGƝĄ>/ń/>"xzē@ń~‹«IĶ…ÉÖĪĒp*Ć ©W#Ø®:ŌŻ®|u,ūóIå*ķ §.æło}·é¾«”Ėé6F<•!¹t®Ķą[`-Į…Ń€!”~•Č}~ž–"¶ —c*€8„å³ø‘XśÕ&ś„aܽ{m%Ž…xŃ>Y«Ėd»J¼“Ÿa0ČźģkbeLök ˆī­įxĀķ*8­hŅ6t@Ł|€zUĮõf®®Ś†šat‚vƕaƒœpZć †”.Ü×D7*qŠæØiM©iw–0Ȱ“‘•BŻÖækæą™¾2żžü/ū?üTÓæh/ˆ¶ųƒje³¶Šśį#šK1PÄŲ±#Œžzé‚Ōü£ÅǘÓČ«ŌŹ"åˆ\¼©+·yÅKM~Ķļä~4iڽ‹ų¶ÖĀe›N»Ōgø ·€ŒäĶy‡ÄŸ j#HVā±[€ŖŠŖÆ§¦+ž£>ņ‚²Iī|ųŗ¬¶WGvų‹8ÆKŅn`y"(»²GNÕēJWŠõiLōū¶i¼­Ė‘Œ×u 2`žT᦮eMsKIō;¾Clˆ?Å\oĄõ²ćW€ģŅå»]ßtŒŽ u(hy˜™»3ź_Ś"ś’Ę!½‚ōDšm¹1A(PkćĖMUžk7ŚŒ al;OŽĘĘ­;3ćėQ—Õłēį]üQć/x’źĖūCVøó.-­ö QIų'ņW?i_ü_ŗ—HńģZ&—+ŚYĮČ6ؤ¤ Ŗč~yaåķR}VųGńWYš…ķ¦«£j-ö˜ˆY” @øŠ\Wź¶ń£Fń·ĀĶoZŃ­Ž÷QHšöd·#“ŸOOóšØÕ' ‡÷“>{Šé:Sčö¶v›ÉhcTüq\uŖµ5Šß×­_ÄśŽ-ĆZÜŪĻöˆpŪ» ƒė\ƇōŸxÄ ­ųfĪćIÖ÷ÄŒGqޛǾ:ׯ©įbš.OD~ÄxW殍§xĆ^&Ö–ž2{uk»%åĖ×#ߊłēöƒųūć?ʇw®YéšF‡„£%…“d*9>€ VÆŌ\VĢēĀdķOš]–Æu—ķ¼mĘ6÷‡Ņµü91Ń5?[҇ö~£k?Ÿ ±ŒPó§VūAO–ē[āŸų—Å—÷®µŖßź×nAĢĻø/ҹœF6µ˜“ :śÖR•÷:iįćē–fmÄŚdÓn•|lšœćłōL²/–O#®qI3G aŠŁĮĒZåŲ®—&x"Ó¹łū’‡ĀĶńkĆ>…,3[ŁXÉ#¢"v<ųœ×Éž¶ˆŖ*–sŽy¬ź¾o©ÖķS2‚”[=qŅŗKyv ˆŚGjęä=“˜ńn–gŽ^ŲEÄ _šTĻO­t~øūTLQ~aŒŒóZ%ŠĘQ=Š"£łĮ÷ą•Ē­ajr ĖW²ŗEū3żąEl»8#Ć/4Łü)|ڦ“w,0n"įü¬= ļü7³^‘/%‘¤N~mŻkJr³2œRe‰W’o­t@ńk³ėżĒŗ§„Ģ¹„FĀ(åłCgŌöƧ¾ŽXxĖƶž%·ž;]Hö‹GąĀsŲž¢“K±ęT‘³ÆJöQ+€»å ˜ä{Ö§ļō½+M’ÖÖŃme.YlžIś’h8ŖLĻńÆ`ó‡˜+MӐ0k…Ņō)žņkć Mn¹9čzR9$īdź‚ī[©J}xÅcLŠŻ+DІōļZF]Ļ&Gg`öļ$»CD~ļ+Øšžc©ļŗūDb`v”=G½ja'©£yi6‹3ŪÜh،}+“Ōģ­%-$a›Š.Č*ŁŻČŒ"!š>˜=½«®µŗ·Š-Zźia';Iū¢KcĖļüU5ÕĢŽj"C“³×½į9,ēø”:—vūPĢOO7öq 2mć8ĻAMžŌ“܄Ź,‚Äž”ŽIJĒaµö+S5œūļ.Öüy>Æć-{ĘŚøMBļ.v@72^94 3:óC½BØb–Ē"ø«»V¶y ƒ“ž£½1š:>¦°©ŠS¾!ÓŌźģ斶ؤōö¤&Śk‹™į…]Ūw\w­ßģ;ų!ī×r>vū~ [^‹¦Z¼ń/ŁŹH@Pžžõ/޾ˢŚ*`ŻņPdP`Ļ ‚{…ÖbC?Ī %ŹæZīę[<&x$UnCc#4Y…ŽM¶H՝«ém¾‘I)·å£P7y 4V÷!˜ī^y=½+‚ĆeeĖąę€;+Ka «,¤†? ©ā¾@Ž2±ČĖļA²<ĒŠÅp×w[4Ós×±Æ)ŠĪĘ]=kLN¤ēŅ‚±¬ŗ¤Qī[tl“Ąük’¼Ōlą»’F¹AŸ˜¦€2 ń½ö”V óĢ\ąBr=ĻJķVņĪÖ ›K,żœ‚dąśūŠ#ƒ’ÖŲŽ†‘üü—#!>•£wf f ÄńŅ¦Hv}.ŠøJĖŪ5ĶϦ_Cr]đ<Ÿ8@Ū°)GĢ :}¼ĄG“«īēŲVī›¤›ąŻē ĒŽõwčg&Gj„åb\ŒŒń]“·vļo#"vō žfOqµv4ŒOUšž£w„Ųķ 0Ml’2rC/Q‘ķ^o«üCŅüa¬Żč7„YAi.ČĮŚW®sõ¦%Š|? x~+4ŗ[h²ĪK2Ÿ¼}kƐéŃm•-ćņŃCr84¤É_uõ1˜łlĻNŌ4ŻöŪȑGī  }kĻēšZG —d3 ]ģČż³ŠžUc<ćÄ6Ķ%턆Ÿi6_w̼„#Öø½OĀ–Ÿ<†āń-»0¹!½sU`·sŸ]2öĪv·u“Čgƒƒ[r]Įo ±ł®ģ>•œ–†~ĢыĆö7,.$uÜ0ĆĪkæ‚KHć•ļ%m¾Y°ģݳX¶R>ń·Ģó«ÉŸ¼"©ŁėqŪŁ¬Ėó»‡~µĪkt.Ųų“OÕ4ŻR7†—a]²t$śW) ²I"Åø8éĮąRgD[¹ŅÅl—0„ø• S’śQ«ų»Am,é7@¼‚Āv|ČÄõŖ-«črv×6’ „f™°§Ź»;IĄŚČ]3ŠgµL‘ƒŽÅ ^…–5.pÄÆzĘ:ÄĖ"6Չy¬E`c&gŁźŹ"™bhÕcær¬‘˜Ē gæ„\¤JV2ģ žŹqu¶A)łK.p+°Mn`̓̿t`¦µ1ęčUM@6£%†ķÄ|æCUōXØ=NZāk‰^1h&bųEtV‹tX²•Čh5)]<ņݰŠQČ'•4gui3+«#œą÷©r±‡a°Āņ±Š9śÕ;­&x™J2,–Éģ*‰‚§b«18Ē#NtŠį™6ļėI›.ŝJx¾Ė >e]¹”õ®KŠõ’Ž„–bó˜ocµWźkžR²»:!FēAyšćVŃļdŠņ$Ür„2žb¾±ų/“įĶs{¤ŪO|K ćłé^63Šō©R±č:6«kupėmG²B„xĪzWG©ŪŲµ«'•2ĪĒ?)ąLWĪÕ­©Łdqvš ȊIēg!p~č¬ J5“Y–ä‹ūĒø­h¦ÉęŠņ}sʑ[ź–š”7zž³;,I–bÄ}Ž3Ķ}Gšēö&ńŠē±ń/Ę­z?[ŹX4ļ$ż¢Uė°¹Ē9Æv• +³–¤­”÷_„<'§iߌ^š_‡‡‚tę+³…ęąŒ—#óģO¤xoĆšŁĮįŪH.ü@‹¶[ĄÄ37łÅwÅ%”Ä¢ķfP“š?‰nµ µnśĘKM»„%u'æ=kNĮn–ņīĀÖņ•F÷Ęį]døn> Ż[Yųgž'śÓ§ŸöuŻ_¾F}k.5Öī“łõ?˜tkÄ»Ū"\4œäqüė¦!Äē¼qā/“ß[ŲxkCCLϹŽJ;‚łõąqZ’ųĀĻĆ’ ßLx-µo2•{¹>éäm*pzęŗ£HŅ4Ķ««]RŚÖ±FŠź’xœćėYZślž"+ŖŪYŻĪŖeöĪ? ō|K=Š`»ŃmŅŁ„}‰ˆņ»GmµŲų‡@ńwŒüFEwŃ¢eĄņĪIéŽ“ĶbūœeĆT“F•4‹K(3ŖGŒ dćÖ¹?ƒž<ń߄üHŽŽk›- §i^ aG$£5«‘QŌź¼cšļŲj÷ •%·óüɁmĢp8Qč5»7b!:¬&>łū§Ņ³ęc”{6¾ŗ2 ®&F¶8<ä~Õ¶…|#†Ńd†ĶFÕPsøš’mc³Š¾jš#Åu\\.ŠŅ19śWO}”-¼Śt7ó§šFõĻQéňł×Åśm’…īeŌtŌøä“’1Ī?½·¾1Ņŗ†5č5x,µip’~ł™6eļŒżGziQV>×%ŌüC,Ó$Éw<¬AaĪs޼ĒBió”¼’GxĢQr[4‚0čC”é³Ėf×V®²a‚ŒĒÜ×ŃŚŠ Ó“Įfó$‡jĘK[ž§·§k~ :+˜e·¹nP9tĮüMtžšÖذż²Ķä–Ö6Xłé·óŖR¶†SAń§Äėįæ 5œp¬Ž@U·.6ǁÓė×5łßš³ĀZŻĻŽ,ļ4[K™µ#…rĀR{gŚ“9Ž›„Ÿ~)ŲŲi’x;ʦœÄ“Jļ&&ć{W›|YAńØiZKż«Sd’0Ļ‚Œø?69Ø·S6ģ~2x‚ŠG}ØiūÖi`”tf’ėWœ]CäϾcšxĮėZÅŲҟaė{!Ņu+fŗūL PH*sÖ¼|^šTŃł)ā=oxė_ŠlāŅŽ;<øsóĮO§Zń/i¶ÖZÜ¢&Żržnb`ū×=:˜źŠ>•š~æ§|QųY}¢Mm{}ā Ĭ‘ˆó`b9ŻķśWoūžŠŚĻģ“ūM|7ųƤ^Ƀ`»ū©jI $¤#;uϱ驔“¹ZŸßĪ—ÆųwĘZO†ü}į‹˜5ė–«{ ±¶U‹('ß0?væ õø4-vžŚłGŁēĘĘ?Āx’I®†R‰čæt;_Ćrj: ļk¬ĄVźŅtᣑįƒõĪæ—Oų/wģé£ų’ĮŽżŗ|”źßY*č^5²¶ˆn·`v‰$^ŖQŲ®āz2W<©ź¼ŸüČ÷‰4ų­ļ¦²µa°>ÕĖżßrk„ņ&>n>^1žµŻ Žy®…•03Øł‹g8Ę*d¹(9qЊŅ1¹ĪŠŁöŸ1‚mĮģ9ÅU‘Ž_¦G$VˆĪīäŃĢ‘J#'ēa‘ž¤VŒr”R£&ØŽ–’B”d,88Ævżš~=xÆöPż¢¾~Ņ>±ŻhŚ„qj‘“¦?¶Ł¹ "Óī–ėėQk3Ŗ”ž›ž,ųgć‚|#ń3Āw±jń&£i,lVF@Xd3Ī~¤śWe«é­4Fą¹Ü™üEsW„Ė'œ¬|ńńĀvÆĀßZG:ÜĘßgn†)‡Ż?˜żkņūÅq Ķķ¾±dmo­${=NN%‹ ?B0}æ ä·C6Ļēož Yū3¾‹ŖÜxĖD“KūūSöØę·ūTg‘žuųÅ “ķĘĖ Ć®?„uR’µŒ¦QƖ‘Jd8„¶BŖŹTÖŗ ō9J±Ę‡>µž½¹2“ĢźŁ8ĻŻ«*11bųĮć”§ó *@¤IŹZ'iö„HÖ¶§?^ŌÓ/I #*¦V'Ķwæ ž%ė_¾!ųKā÷ąńN‹x·d@™4żd|va‘Ž•RŽśLžų’e?ŚLųóšCįļÄ?ŪĻ<öi®hūĄóŽ<’„YøīTēčkõkĀ2šī„§é·ŗT–öŗF«Ķ Ā9§Ōń\Ubu&wńÜł ;FŹŪ\Õ}kåĻŪgöjŃ’kŁĆāĮ›‹[ųH ©xjęår°^ %yź3’§8cé\]ęĒńį†©šŸā^·ą]fÉl®!–Hvīf1ΌC©ĻkĶ-ćšŃ×És ld‚)JIźe%©ī~ø—S¶„,Ź-\œ±<q_Bų'ƞÓ®õåź-ŗ(łćūąŸOĘøk"9M?x·D°¶†}.ś{ŌAó¢§Ī=1ĶxUŸĒ VĆĘÖrĀčŹūęB~bqŌzžšŃ÷Ń>śš—ōÆhÉ­iÖóY3mUĻĻ§µz—vĻˆĶĪ8ķ^Ż4śœ“6” G8Yó ł±éŠŽ8&S‰I‰q€kSjr­Ę‚å†ģ*}ķÄļ ¼ńŽø¦Ų%cŪ-Æ“˜|5©]]€×‰īWÜOųq^ c-ĶÕĢŅŻŹz–äš=…#h#«¶ÖķįFQ!YW+žŲÅuži0BŖŅÜO\śPYīKį+Įb°Y„[c}ķæy‡Äķ>m>×EÓ4ū‰M¾I»@NÆOüwõ¤Ę'‚¤š×†RĖR”ŪŻJϓە ©¼cżwR‡P՚ķE,ŽX”ļŸJ`aėSŻłŚ‚6Ųė_ŚB¶ęī5>Q’~ńͱ6õæģ{Ė?RÓ wAę&>éĒ5FūS¾H#°¶E»gēĻ&‚›Š¹«é—–:vys¾Õ&?+÷ń×­£xžź;+»KÄJ?Õ7p1Wc)\ó»äÕµ<¬åefł2ƏĻs¦µÅą˜„## { ŌÉČåį>Öģu [Ū™”u`Ė"ciĻjģm„›R»_0†Oīā¤Ż‡rž¼· ›TWTLW;©č[ģa˜æĪœV-”SÓ&ŠÕŻdeģ 8ĒŅ‹2=^swq «Źõ¤v¦ )Rƒ|§=ÆC“žĮ­w„^ŽNh*.ÅmJöÖĪÕnå>d„üƒĶyŒ ?‰5ˆžę;!“³Ģl 4Ņøå+”-§ń?†|•¼†Ž+‘—”:ēƒ^ƦŽæö¬ØSƒ ;›½kȈ45]6ɗķ!8š>ՙżhÖĻpc ę²hҘķ\ń]¶—>›ewoc’5sµ×닼ž;›¤Œ‡Žul䦑”éZ%ģ6ö²‹čćs"ł{ŠäÆŅ°®#³–āf·½ |‘ć’hį®c‘bxŁøé[7~†ī>ņK’÷(7«‡·“q+[¤…¢fĒĶŠS°¬Iwąļ:Š‘saóÓ5ÉjšyҚßÉ"šwŠ~“2¹Ž³JÕģ®­›K¼…ZI¶ā==ėWŒ®Å°UŲüM\76F–™Ø=¬@ÜÆļqĘzĮŌŌA³š³·ŅYŁķ%IQ¹ĘÜĻj·>pЉ! ю~nh5Œ™ęŸŪ׺ܶ1'i ŲĄ ;U Ļ5Ž·%³[»Ä¤ļōėXÉ5ļ„<™īµT)ßsg¢œWØĻy§ß$q[ī…”e³ƒšGTw7cū2Ų¬ĪéēƒžÕšēķ=ń¦óĆŗ­—ƒt»Čīõ=„ā\­¼#¹>µĻVVŌõpŚ“Žį^›sāKyuūčķī4Ń,_g,ļ¬9$Ŗ×Ó¶*×7wQŽxĒÜśWĪāŖ]Ÿé·Ńć…_C(Śuż÷éŖįÆĢf—h¶×:+N{ęŗ×Ų¤Sńžu5Įsś+OKšöWF\\}Č­;>Ęž ­ ‡'%»ķUĻBQ<[Ž=cPń-…ÉIō}>t H8ĄĮž5”ā/¦£įfŅĶJA“6ŠGāuC©ńŽ-ÓÅҊŚW_†‡é§ĮŻręŚßMÓnuĆ«,qŗHŲŲ{cōÆ"’‚„|ҼCšƒĮ_“†l­ķüWį½bŽĒPø‡å3Ł9 wב†}MCg·ƒ—½có×ĆÜ«ml†W’L›³Z÷-!¼ČCļǽpĻsģ0Rčt 0G š{ϼ0P؂=‹u3ōĻæĆļXxŗ+o“˜¤DĘCĘx*:õŸŠŽŠõ½ž€ Žާśl ó9HåXvē„\»Ōŗ•ĻŠŠŚčövšB v1€’O>kjŃcŒķZāØĢQ­‹‡iwq“Śŗėe˜E ®įA>æ„s4ÕĪ”[SN»ÓLˆ‘]Fa;ŗsÓõ¾;†OxoY¾šÅŲ&kyŒ{ƒd\ čߑ•km*:Ex'_Õģ|3{ Åu*iņ܇€¶FóžSYŗ­ńX5 hn“ļbE ³‘į•Ī·@ńOˆ“}¼'i«Žæ‡÷—Kb’$@õŚU*^åę}™ķS)ō:iaŅ7¬”7 ”V/'ڳµ{3ÄW(ŌšzJ1²±ŅŲØŗ€>T98*ŪąīPx«¹ŅÅóY€H5$kp„2.sļZ©I—”ź”…͹ŚŻ Ī…€;GRlhR ›«%t0‘"b?Ņ·§#ĪØ?ų(eŻ÷‰’ąś?‰/„{‘uń:ŅĀĄČA12?—•ī8’3_ ü Ō5ķĮž.šö ņ<ńéŽe»1Éf‰¹ ųk©ßsųēO‘“÷Ląn5™%2 ’€UĮ9ĆtžuWJÕYlŹŹį»Ė™žükč}3šĒwšWŠu_ 0iך‰ÓoC2öśōżkō—ĮĖŻA ™ß·°öÅuŅ–‡Œ««=#Ćŗ >$Ōµ […ÆĀ—į°Ī£9 W±ųGF J×sNb‰”+†k¾…)«Ÿ@ų?SšzxK×5čMՍ¦f•UrX8ćėŠųūÅ>*’„6 5ŪY¢ņõ-bf))ĮXŽC³Ż+ǵYé`bå+uńoĆouåx—M•!”łsH±œ$g<{ר~Č?“wŒ~üsų]6³«»xćVOÕRAę2Å0Ų śYOįW ϬĢņ:8ü¦®ZJQ’OÕ[š?£ąw‡wŽ#ųÉį_…qÜxę+ię•“ŅĖ5Šn_ »ŸaŸå]æĀß|4ų£įM7Zšsi·ÖŹø’ŻŌyör¼’'U`kŠ„zä;8Ębaūé9{=5čŗ/Kę«įWž+»»+wæqLцh€9dqĻ5ä_ü+ćMOGų‹”ŲųŽYFÆįėŪ[pŃ|NŃ2ƒĒN§łTUęŅĒj”ŗēõą„Ō4Yµ "ž)-u -JźÖę뤬>łļśD‹tėøƟÄÓ³gżpÕUSF¤vp‹ūŅfķķõ‚ŁĒh‘˜ī’Ņöeģ?smt<²!UÉĘŽs\“ĻŖ§±b)ļĀT",‚A5µ¦āufņ3]Ų¬O{żŸ~6xėökųĮ¤üeųoaį½CWŽŚk+Ū+ōd†öŽ@2”£åX0pkęOŚß⯉ž<|sų‰ń{Åz~—¤źŗÜ–ĢÖveš8(„`a’p95j—)łõ>ĆLjßĘMTt}‹F¹Ō¹½t±āś&Ńo±ėĻjč„r³žäĶ”PŸ—,ņ°u.1k§µłQCTcń©;įOS”ŃüGa¤>«§ŻŁC5µå³ĘĮ’…±ņ°÷Ö¼3Äė é×lŠņ\#†SŲĻJw¦u¾ ½øŃż T3޻ˉpĆĖc·9ÜJčƒ^ēUŸQńüåŒ Ē$ŒtŖVŽBæ#+œt®‹ŠQŠŪY#ތ‡OOZŠņ짚+¹,ķåHĆ“jX~5Ŗ‘ĮV&ż¼Į¦ *.ęąńU¼as¦ŪųCÄ­ØŖĶm¹“aėžy5S•Óģ~ųŸK¹’ęHŽŅ9ŌI_īŸJ¹į]BX.!±wbąc$ņ yŅfōĻ„ōHüČār¼Ÿ|ó]żžåį×^õ¬Bäģ_ßqjŹ /ņ6}¾g·æøš/ÄŪ’k+Ģ&āĮ¶ćä<ńėĪk¾Żžuy-™õV³ńÓÅ6šźŗ±µŠ4—) õ98ÉĮƀ~#ųŲųƒ_½“°2 5&eVC@ķE^[hy5lō"š®§}£_ZjRÉkwŽAÕMxoÅļ‡śE—‰µˆ°G1žÕc%į‰~H¦Ļ?/lćõ® JĒŹęų5=‘ŹhZ…œ2Į+HŖ¹ūŁĘGµ}į=JēJ™§šŽ¹5›HĆĶ &ĄöqéSķ …k[DiŚę­©4P]i6©rü)ˆcxõ WÖž)źśZ\xWÄŚg—§) Ȑl ӞėüŖsź0t%cÄ’mƊVŽ?ŸĀŽš{G†šMĶÜė‡Y$ćå$pAž•łŻŖ>ÆÉ[«8QżTöõé\Õ*6{PĆI£¶šÆĀüA““›LѵO*b^'ˆćp}i·×Ž"šF„©ųOÄĶosylŽ›ˆrĻ|}k–ģčŽ u2“Ž ē·œˆWw­zeµģwH„Npj%3«%±ĖųŸOµ{ˆXķēWüąUµxÄD“·Ÿjǚį*v&Šč&S+»Ņ„µ…„Ļ"åTö¤gČĢ{Ć«s}æī·pƖń…’XŸżcV4żD!n ąUĘDJĶčK6ēl‰y$zTrHHßnĪžµ¼79*й‹%»[ÆŚ×HŗæŒŸŽy1īąõ&¾­šoķ=āßü7Oų/GŃō{YI&÷”éžEtFV8„–§«>[ńpŌu™§ÖoMĘ£« ,×wēØöC@Ō‘į‹É¶pģؕCHa9NĪ ļ óזī+rŲ# ƒųOz•>ēG³!¾¹ge¶UżÖ2r?Z†+iō–ŠīŻG•Īüp3VL uÖŗ³ÉɐĢ}:ĆŌµ †u “üō§s’¢±™Żyö3†™]OŻäƒY^¶œEsk ŹžC“møu殚ŌäØģlüBŠ¾ŻšŪārˆžTÓduŽ3ČŠü"±µ¹)ķi²Œx+ėüėéņŲūÖ?~–1½, —zŸ”B·¾µ“‚WĶ ©®ĀÓʍ¶Ÿ8TžwŲ€WŃS?‰+ĄźüāųÆ%¶Óõ‰ Õü€®p­čkŻ­„¾Óµ >K%‚ø8|ŒÖōĻLöļ„Ņ⁇ĪēĒ!} š‡ĒšŖA¦µÄ1ÜKs×릚QœąätÆgŅķ“K+hįAČPĒ&™bķ­¤n78<6{VxŅPµšHNCqœŅ9ĪŪFŠŹĖģP]D­i…ŚÜäÕĶXicFń,śÖpé 3„…€HōŻKÄV §ŪÜj,ˆ§,¦>~™ė^#āitżjęy4Ūtµ¶g%„ö g1¬Ŗ¬ø|ō隼ü7·ž@ņ˜Č mõ ‰JĒW}~īK{hŃĄ;›=j¬“ĘŃ¢Čēpē É²Œwņ¼Ž–SfÆ Ť—ϾćtŖz†čŌd|VŪ¢[y·oJؚX.ģĶ @[vrzjnäÖzlšrĄī”žH«Ó=čU`#ƒŽŌ(•51…§ŁŽŠ‡“#‘ŌW˜ßč±Y…eR»8=(2)ā’&V|°ūÜw®"żdšpŃI&ä<qA“ZŲÉÄfb/aWćGė^S®ĆpŅŻŚé– ĻĶĀ}ß„%«ßź +[Ü<”#Ź¢ĒŚ³“ŲnuMŃmwBvŒu¾hÖj~>Š­uŻ’]E#›zdĘ=sųž•ĪYų–=vŽE¶a)Į^āŪ‰ į°G\ńšģ ±C®ÖQœē­&„åc9ĻŚy@ŗņFF)n•/-aٟ=FėXŲ”õ<śźż“y\yØ.ņUŽ‚“tżEõ;fY‘¼ŃT“"$“š[f(†0só `ÖŚ õ]ā!ūÜgĒå[’WXͽבpčp}s‘U5;Ō³*źGm«Žhy5X×NqnĮœŒüĖĘk6Žź…Ywq‚+)0&°ÓģÖėģóCp¦NŒƒæ½lßxi,±p–ē{(äõ4ć>ć5ōČē](ģIŽåcc¾”}—ŪF¬Gń »šĮ•ž'j:¶»u¢x/Ā\Y–‰7ܱbœГڳµ˜ßü1=åµģĻu"žńHņŽŲ3ż)%c3Ƽo$:lń„ŽŽd‹ar!+ļ_9j~ ¾—Qš{;x¦}ĀšUzŸ’U1ڇWNŌžņxY.ܐ=²+čO źŠā,²!‰A?7O„D®D£szO‰š]²]Ś=ģwńEŸ2"Ēäb:ć?Jó?ųKtĶjźīYķMŹ©%d cÜRQ¶¢öe=>źęyd€2µ œ?JĶÕBYŹé“ĶpŲ.åRŪ!£Åµ É­\µ”ĪŻ›,¹9$×ym²H㲕^C“(¢¤Ž+”cZ°¾ŠĮī`O>D|°Įzב_Z\Y]Kqw$¶ļĆņq҃”+Åį»­KE6ęµ _gø<ä+¼WѾ±·Ö§ūdt3‡;’23¶™œū-æĀŲ®u[«õµ’2ˆ=6żk/_¶°Ó^YĘčrrp2øüh0”ū®‰ Ś¼ŻéqĀ–ļ“"…Į`ŻIļĶyŽ»ą ė}Vīā óXɀ>Q„¦äZe;Æ M¦y .|͹Ą^+&öžčZĪ&f!ē'­I§9GƱ[N..-ČŁŽź_‘Ļjܽ\»K:"J@!HĮ#ց©œöŶt²OiÄY †8ü꧇WOŗń=­ä3¤hļĪĮ’=żė&čśO¶•o‘m`g|ߊg°ükŪ--§Ž+2Ö’g“»üÕ7čf͈ą0øĻŁT`“Īk›ń:u¬ēt±ī\oVą~¤A3„/ŪoĮ$d™X¶>@z×?ńÅZf‰1Ó”»µŗŌK‚mĆo¾+PæAž·Äš[Ź÷ÖŠ‘œ o˜}r:”Zv—sOu'š‰-ŹĖQމÕ^Ż÷Ę}N3UīuYĢ­*9Īk– 4dĪ-®¢`VW• ō‘6ĒC/é“‚²r°E؁ķ.G#jōć°®£IÓćąŗķcŌ♲—SŲ~iµoÜh’µ»ķĆ2[Č#žŌaÖLp3éœWĶ3šž•oŖj6¾Ö¦Ö“x%e·øq†ŌÕ+uŖj[šävBŲŁxĄg<^…§Ā$ ³åQޤŸhE©Ł»Ę»+÷…yĶōWvN‰å±%š0~﹬yLĶĶ3E”Zµāœ]̹<ō¶-­®.Č«!`8É­"ɔn2ēJ¼DW!•™r ńŗøA$Óo[„‘Ü0]«ÉĶQ“‹/-ÕŃ*„mēų‡A]­ÄrŪ<„l!°qł ‚Ōåķć“bv’Tn„ņ}ė”·‘å Ŗ®cĪå½v5›ƒ2Ū„ŽTŖČ?_JįŒnĶ”46¼A­i:f„ŗ„÷ֈĢī7 ģ{+Ėü-šūāoĒ­N?éÆkįø„’H¹ ƒÆ=½Ü¬ē©¦ēčwģżš?Ąæ 5ŒčśM¶­ātl RńFČdžņ®1Ÿz÷ķB<)ŖĆŖųŽś=kU2™-üÉ•Ųäķń%Õ§·1ĶnĪŖ­u¤|Å4ö2µ źQjVwžeس†S¹Xdćcšź-܀0śóHƼ#ć«O„µ–ægd.QvUŪ½Aļjå|mįiķ)ŲjšŖAØŁ¦”‹ņŒe\gļuėYøÜŁT>¢ų=Æų^ŅĪö^śQå-¢ “ ī„} š+Äך֟ā¹%˜Ļe=ىTœłHĒø­G!œęĻ9ż¢¤MN (t÷y灌nĘN;ņōÆųž0Š|_v7Cµ¢”ļ܃Œ{ŽŖ™†ē±x€ŲYĻe{< sxwŖeI!Žy“Ć_|_ācMÕ ó„…ŃrQ› ŒvśÓùłĆūMx3Bų{ńTÓ“Ęk{KƚŽ.pĢ3»>ę¾kŌg·¾HŠHšFš‰‹y–B4rCŒƒ’0k鏣·Å ¤x”hš•Ō‹ ³)ˆoķśg5«4Gźo„õ.‚*¤•Tls]mlj/?$\Ģ«œžyü놵;—cÄ>)čZfØ-üOåøø†"·r¬¹8Éü«óūĒs OTqd šBćcw‚ØćēņŁ›FcžxŹūĀ>.¶Ö­ÄŅéҳĻmć'¶ząsŠ÷ˆ¾ ·ŅoćŽĶī"šżü¢āŻäĪö9?„z)č™Gõ'’/ż«®~%|;ń'ģ”ńGW“>4š¶%šü‡å’źÉ²Ts÷¶ä)Ēb=+ö×S˜é·Æ.ęFW ō9ŖšŌrZŸR|=Õ£ń'‡ü§U‘b}ó_~Õ tM_Ā>>šŽµ¤ ‡~3·“OÖ#²JQ•fPx‘ϰ88¬'ŲĘH’=?ŚGąĘ±š—ć/Ä/„^%Ņä²Ōō+—Ž+‚›ęŁĪb“ß+·Ÿ„|­{cŗU8Ć&HÜ0GjŽ”®µ1œJ)ēUŻÓ537—“–ŃĒ$¢>B0&rNj)$Weć#ŽœV¶"Ä;ȘB™ģŲ© t ¶dʤ™QEč„TtKƒĒN†µ£FŌ`šĘöžŁŌ£«(*®=jfŽˆīZ_šm’ķ˜5ųĒö&ń¾“ZēK'Qš„óĪ<ł¢Lœ¬sž½+śĒ½å˜Ž\e$Ps†ĻQOā!\µ•ĄŻÉ1°žųCćĒ…4ė-zÓÄRŁ·Łī”ÕÉēkžæ­rIźb~nžŅl|yą­sGŽĪźėT“¶/o“’ĒĶ»õõ]Łśé_ȇů‡÷æ ¼¬x"žķQ&"Ķ]pZ>I>ų̲Ø;™ø<~•LÆĢ6sŠWb9åćgŒ˜¤-µŪ9+7ŹeĪĪüõ«‹hĪäŃĒ Ź—žG©Ŗ³ ŽcåHZ>ŻĘ+R °OīŽaĪ20:S£Ą7'4S} |¬ą¹Ąź1Ś®Ē+1„»ƒŪš4å-źlż¹’‚)žŁ§Į_ˆ÷æ¼Sā_J»ŗKļ Gp’»¶ø'÷#õ×<3_ŚOƦšĢbūB““žojlŗ¦‡4ŒAµøĪé"?ŽŻłW-^ēdCé†kū6ÓWš5ƒĖ£#ļ`c56«½Ģń¤q¼@ū¢-чqō=+ĪØµ)³ł>’ƒ‚æa«M#˵wĆĶ&k]\ŒĆ«}–?ŻŪź*8yFĢPFGńžµü¦É棬Ūć•Jžk1jńn’×če©ŲxgÄ2iį-åźŽŪSžŸżzöĖyg–Õ³•$™ĘWœ}ź*««ĒĢö<1„[xIż—µļ³źš†—yyo­ĀķH%pĻ,§ßߎæAōȖĘImŽ$ē;‡ń{×±pTŽęĶõ•Ģ’BJįg#Ņ£ŠŚXå0Ģ“ަ™ĢćŲÓkUl@qÜv¤ŽŽęŻDŲŽ„öķ@£]īļ®l&‚Ī2Ŗņ rk&ŪĆäY™ˆd›‚čyĮ=Ø5JĘę“įĶźĖW“šy¬˜‹iĮSžćÓŒéĢt©|ŲfL¼AQėA¬bzdžµĻEöDŅõtžĪs²e$’}³œV—ˆōĶBżä !2«|Ğ8 ŠómFŪiŽqŻcõ«Ö·VŽė$§dĄq“üØ2r×Bž³¬YéśsČȾsco”Æ+˜YėZŒ6÷i”ˆ;XeM$ƒžŒ³¢ū™ŲȍšŅŗč4†Šfžęš@žVWc ĮZ™-œ'Š•‘“^‡;a– ~ē<·­{Nā 3aöyäˆĀ§s` Ż:f‘¤b|õŖivqų›Q»ÓDĄīXƒĒZÕ“hōąÓŚ ŽN\ę°lŁ#“ø¾šēI ¦e݆ąڼ„ļ®–ēÉŌ2Ų*[9ö¤uB=9ųć$š6‹&“. tbŃčю?śõł¤žÖž!xĢß\B^ŹņP.¤w’S÷Aķ‘\UŚHū>Č*ęxś8I(Æ+»]ł-ߑöއ”čz;iśg‡“ļģŻ6HĀ–,X÷‰õ5×_¬ugŽMčĄ:WĶÖzŸģ^W‚£…” 5ņĀ F+²Š²Zė²źz‡ģĶyįß|`Ō4]O†ėCūˆw“ņ˃“ÄāÆ|oų5āo ė.?²ÆMœĒ|2Ę ¢ńœq\ö=¼%tŪ‹>jš‹.­õmKĆ:čŽŪU‚RŠ™<§cqŠ÷Xļw"’Uxģ:R¹éZźĒĻž&¶‹Gń/‹¬ng[?U…Ll0åǹ¦ü!ų¹įŪ››Æ†ß5$Ņ5»ŻŲĻ!ĀĢ{dšč”.‡Įńm !8ļ&}ušĒIJhśˆT6brŁ€—9Æ»æh›:ēösń‚µ4†tŌ.a£uĪčĄĪįųŖóWc×ĆT÷¢~’eMįM~óB’H¤µµ;wrTž1ōĮļŗ¶“NŠXn›8ē¶+’kCģšJĘŌó4€šØŽÕ”hcdNYœńšTŃļÓWFµµ½§ŸŚķ`¹·Č,ŃĒ”§Ļw5†„„i5¦‘rŪ¦¶Œ‘ł^ų©ØEX>x«JY’kU·’v;“±Ü~5‡¦źio·¹";€p«ź3ÖøjnqJ6gGē,É óŻ«Æ¶¼%¼AĪ;ÖGM3­³ŚČŠID•y÷Ž!“}^[HRo, į~÷½i ót)YČ`Fx˜ pjw›Ļž7hÉlm4ļ}Œ9µ72ŖQP `b­[ØyŠH“œÕMž‰|ŚTļ £¼ß¹Ūåī8=Ē}i„VXfFbƒŽ:ØĀĒZ34ėĻ"GUmżTą÷«¢=Žd„īZF}øvHäQóŲ«p; \Ž{ŠŪ•Qź]‰ēB^*qƒĪ2=źž›+Guī Ū‡ć]Ļ>¤Ž~ߞŸD’‚p~Ī’æµ øń®«ń x’Ku|²ĄĘęLžŹŃgŻ«ó—ą>„ā/ųēB“ń=ŗŲĮ:Éī<žńH {cšģkCłM¬E[4æ3Ėü]tŚ'|Oį«·OÜŻ;@ÄķŽ„ē8śęŗ;{5¼±–öŅxV5ˆæĪŲŻŠW-ŌŠŹšĒ‰5µ=3YŠEÓ5)D±1l~±šżrųać4×|5§x’ŅHīcøRKÆBxĻÓ­uRŚĒ‰‹©sŪ|«=Ž«o}“y…āryĮ<ŒśWŻž–?ųf ī­­Ņr H’Ž»ć®Ē:–‘õģūšĻĆśĻģńūJų£Äv™­ŚKk;²¹h’÷6ĆŪ'Īæ?jDŻ&’Ś|…ü=†vc÷¶•có«‘<ÄSÅē8¼ £īŠtŅ}łą„Æ£ž“»ōgR]š~-ŒH-‚(sęAjąõ)ķnt-2Łlm“ǁT-Źē{H­¹\óŌ?*ŗsŌż«JŚ3śżkoüw°Ō|ćæģĘń^‘§Ć,wq­ØÄĀģ¤ņ̑õÆų½ą’‹Ÿ³GķmaćĻ„¶:Ž·šóĘ3½FĪżŽŸ8’Z€§ļ®+Š„ŗŸēwĆ8<—ń9]hžā¼d×e̹—Üӊ?J~ üVÓž.ųb÷[µ³¼Ónķ/d±ŗ· “r'|p{W±ķ©ĶŸĶyŽaqu0ńwQmēēńæĀ'Ć?µGķO”évs-µ·Ä=Z8”ōHÄķ€?Ļz~›„Ż(ŠBG<ōóµļĢĻ÷§Āźņ©Ćx “wn&’š\M…Ó"\µĮiņzT‚ÖŽ>!P{q\ō抿"œ“,Ä e,@Ü8¢Š&é·±‹o<÷­łlŒŖ°"”Aćx$Jóˆz=»A槙0ä·„qŌ1<ėC°¶d`ņ€0vƒZkl؄0v÷® īvQ"KhbŽg‚ݜēėNĻę…ˆž•”M›HXV·,±HŹQNpr}ėĘī|?«YÜ>Ÿu9•ć}£=é•)t;½*Āīr*óŲs]ż­•§Łb–@Īć%8꓃čd=m h„ˆ±]Ż sŃķµ¶'rA'­n¦#~Śy•ŽĄ Պe.ŠŹĒ>•©É=šw˜E€źx§źŗ ų‹HŌt›Ė¶‚y­Ž4 |„±Ą?^•5S¶§3ņ£6©kmaįŚ-ž­`­ |˜óP7=śżkĶ.¾Ń¤xĘīŹįķŹ¬Š”õ’Õ^mH»ÜØĘĒÖ~¾…­£‡y|Ąśq^‰öØcHяĪz{Ó¤sā*Xļ|'”›—]FśŽW…ĖžüO䟵ų‹^¶Ō¼E @·6g Ö“’ÖÓM{ Äīė“<_z=Ŗ=*kµĢ!Bžnį—vźOrk…½±‡P¾e‰m{Rö§w³;…¾,ńWĆ+“]3Z»ū U¹"0ž™ōžƒŅøoŽjž&ń^§¬źņÉw4² <ē9f>õ“ØW'rŽ”jšŒń9U‚PŁ% V”ŃÆ4øć„ÜSešģw&{V3f¼ŗ\̚ī(C$ßiūPl2•ą­lXÅA!•’JĘ.Ęr‰“lsūࣧaVāTB ®Æ22åeČŅ7” ŒŠāü]„6™q§Üé׆‘’x¬§Ļ#ėNįŹĒĒ=ĆŒ!øā¦¹“¹ūŹG”}§§­uÓzXpGڟ fšś^‡q•–˜žO“«}”÷$Ŗ>ń\ōČķ_'6—ų£Ä¶š4śWöŒßcĒüņĪGó5ŅģT£”ŚxC²ńGŒĒ‚u ų¬„{9.•ąĢŖ/ū_ćXŸ~Ś|"ųƒ'‡ōYī.<=wi£fó6ęMÜ2”"±’9抶P–b鰐ģ|…ڧ҄ĄĒ•µQ,LØĒ±Ē„oŲKŌ?f•¦ ķ=³Z8“Ł>wFłÓˆĀ }Ņ;f·cŅćŌ!/n>Ć­Jg!ā šķ­ÄÓN¶’ō›Ó?JĖšš¼µ}FŽEU˜ä‚A?ēŠč‚8ŖS;æŁ Ÿ x­®$ŻÓflĘ[nźkš…ēkĹŅY–&·•” šZ÷š2÷¬,}*01yN÷N_ü -’턽Ź@]&&B¤pzšö­JÖ­=Ś-Į°=2G¾Ž3?‚+Čź|5ąXa»:å…ķ™ŸĶö9īē‚Tā½ßW†Ņ{nŽŚS} Ź\µ¼eÕMg© 4÷ŗŃ-oåĶ“č$^xaŸžµuś&¶Ž¼Ón“ŪH㸌ŖĄ«Ę•tBG•V'Ó֚ƒjˆ—H6³a¾QĘq] ”ŽFT"_n¹5¹ēÖGm¢L³N`™YdĄ#wzģb¶…ęPnūŽĄŅ’Šą’ŌÅń–+†˜"ÆĖĄұæµb6FĄŽp7 PG<·/ųg[“’Ž}2ī!#æŹ€õśŠ»yą;9‘¦g0#dž9frKv3ū& >Õ"·HW€qŚ«DöĶ0pŖ=±Ö‘‘×YźĄń…†AĻē^+ć‹y—Tšį­7śwϵ\{ ¢‡‡4ū׿A1«ćĘÕ÷®»ž‹©fk‰fM¹č-O٘øśu“C¶ņ.õ-Į'µV·}Rųృ »kzP+3ĘĒS$ę <÷ļśÕømŸTw“Óķwk“å=€ÉžGņ “RļLæŗŃž““nÜr:ó;Įŗ¬W³‡ø…a`6¦1¶™|½ĪÄRßiz¢Ć9pŹr›øČwL×āo³Ģńn”8Tóõ¢Ęm“qŖY“4³żŸ+”ĄĪO”ō®'Ly_Q™näßķÉéŠFRŽę7Ņķ4Ā.·=ė–Ōü_m`óŚA Ķ4Gž„7¦īƒā‹oŁŪŚßA¹V$ 0śœU;›»h\¤YÕ¹ō4„hYėĶuW,ęgśW£„µŖ)»10łq“ҁµāMӔ.žTš=*āČ<7ĘńÜDŅ„ guĒ ĻõƚüVŗŽ–“K %į ™ rWÜśv¦LccĖā֞ė1åŗ”ćrTzšō Ē$—$eŒev°SACæyF—£1Ō'ø‰@Uł7gœ{Ń`:!āDÓfņ$I]ų‡@kcA¼‡Ä½­ķźéØIÄī7ŽzTJ=H”N‚÷F“id0¼2m9˜ ?y®„ŖĆcv°G4ŖpMc-"vV’æˆtö6į!dL¶A<ÆoƳ¾ü=ÖüYā[ėķcL’-ÖE{C6sÓ·AQĪĶϳu­×ėZV™5ĀCo•‰X€/ałŅ™įĶ*×Į×r-©il]ˆŽķ—A~_N”{CšMŲ—R½{8.u_j6–K¹¤…£}ęUģz¼ŹóÄśĀĘrV.Xn8ݟQųRrf6)éó_iv÷J°½æažÕĶŪx’MÕžß§¼ŽEÜsģÄ~|Q« vŃÜ]£Å$ßkPIRFvjšˆzEüz£I•S¦Åą0÷qO©NLęō]N=*DŠęŽfYX'ʧ9ō®Šžāyn!–“asŌ ”Ę}Ī.a©j³™m&XĒĢ0ö®×Āž±°Ū­<7 8ł##¦}?•`Ń”õæĀĶ ü\”šŽīŹel昻Tc¹>+Ōµ™Ņc„Iqž[lłń¬¦ŗŒŁŗķ$Fć̇rĘN}>¾Õćŗ„„ōŚ]Üū’ĮŗµQĻŪÅś—„¼JlīŁļ4Ęr›ŸŒ’xŠŻÖü„xŃ£Ö#Ö÷ŻøŒJčS@ҽŃoĆž›ĆņMwŖÜ(ĪąŻqķŽ°5-ū_¾ŽėϜ3>G9-"ś4zLŚEøY-Ó{ÖL EŗMŅ ĻNµĖ2œnfÉ!ŗBSīśƒ\ō‘Ż[\Ÿ2mė€2+E„i÷2Ū›¦Œy ÷H5jMGȕm¢‰YŁNģv؋ŌeKŁēŅ•óuē©ßdjiP ½FkxÖ2>qėķüėRņ;M#øŠhd&0¹kĪfźF„mqs:]^Böé™U$;U×®GåÅy&”Ŗ_x‡R?…¬'×5Wu[nxćŽŗšŌ.ģĢ„S”õÆĆOŁ;KŃ5?Äæfę¬Ģ©‰ķ^yĪr:ōė_~ųoĮ¶:O†ļ,å[? h‘°6¶VĆT퓁“õĶ} GV„ō)}®qm5…“<Æ(ón%\mQżÓ޵kĆŽ °æ¼KĶPŻėZ¬LfżéŹĆō„zQ‰Å#ŃcµOķŻYlķ—CŠOōøG›÷G„uŗ®¦=ż§„“ģ+)$m±łXx"µP'”äæ·4 U ƒRæÕe—m°‰CGƒœ‡ō9ö®Ž]cÅ 2‹½[Āŗd7#µ õö vķ[B™KC™ńW‹„{TѼ;į›y¼HØ¤Ļ¦AӁźk"¼1eey’ ÜMÆy%Šó=[Ēp֚ܵ¶rłģŠÉ į<­rŗtL·«öä-f·ō¬ÆŠvG!®Y”½-*4±²€tŌS“ö¶·Ō­Ķ½°¹Ś2Cu dI_üų—>“uāæ ß,ļ-ĢAŌM  ml{óšõ±£AŖŪ\ÜA4Aą}Ūł›'µßcϼQks¦i¶”¦Ē×Ŗ›R6čś×‘¶™’ 2Śź"Śź@xóĄ Oq@”ģzgĆĶ3Ś5Õę”­YłZNB[ĪŌ~•÷įѵ}圓×.…8R½Åkõ"uņ'4=KBńī”c$pZŁŪ2ÉŹß9ÉäNŸ­y£ŲOćOŠs$±›pŸ½ĪįĮ䞦؞kŸIx{H·š>Æ{„jį,øO-› @ž"=Åy—‰># NėPŃtP/e’ąC&Ēį¹ēŪśRæB£³‚Ō’g–Õ<-­k÷™“Ū"“v©ĪäĻĶō9Įƙ|Aį VĻÄzU¤6±Å9ĻŠÆN•ZÜŚ6č}żšį“^$ŃdžtŽKŪsóģ ž£5ō½ßō’„žø°Ń“-=6f%äxŌ¾ģs“ż*Xr\ų«Ę^2ŗÖµua *å¦Ė}Ģō⼯Ć_õ½+ćƒjŗ:ü<ųµėOŗŽ£D8ŗ…œŽFćnģ{לiŽ(š’Ä x?ā_‡&Kķ\°Šõ$B oeņ8ē żI­›÷@ō†^"}Xkr¶SōĮļ^æńĀšxÆĆ÷–2¬rĒ:aA=±’>µĶ)u??ų-‡ģŁż©įż'ćĪ›au’ —‡®’³5ųÖ>nģŽvHÄz2}ėł‚ń•“[LM«ź¹õŖ”#šoCʄ0U9Ü3Ī˟”Ž“¢­”ņŪØÜs·łš…T$c,GAš¢ą¬\Iw Tł„Ę>µ©—š4s§–˜Ž : 7FÕ5o ųƒEń·‡n>ÉāM.é/­¤ÉłYqŒW÷Ó’Ųż©ü5ūVžĪ–¾'šž§ciāö†+«[Bä]F’HŒ!”IŒŽ°Øō±Ņ™ūEš’āƒńĄśg‰mJŻ3ŪŽBWÖåv9 – GJ–ćĢ%6’uÅR&čóߋ’¼-ūHüųš_ÅaeŃ5ŪBör€ “ŗQ•u÷Tõč­›WķYšgXżŸž.x÷į’‹t«­SÓuiģ&R˜Eucóśma‚ąƒXF6`|ķ§ĢY xJʼ2`u÷ÆWšĒŒžŚx ø·h¶9U9ėļJT¬CŸcŚQļµŻk7Ÿ6ƒ[Æį^OÆhéj²Z¢nŚŲR:„D¶esĪ4‰õ]"śźęݚ)£’TAŚAņ}:WźĮˆOāß é «3Ć{ }Ē;‡Ø?…zdTGŅ?n€@6€dĻČĶŠÕʎ;¬o īąā·9$‹śÅŖi:bĪ ĘΟ ';Ē·å\¦”©ÜY,K ܒÄįzŠ#Ś|;d–š\2Ļo<(Ė–ČĘk©š·‚„ńˆ sO ¾2,y`ėÅ#SW¾šŸĀ?­¬~ŗŌõ’IcHyĪ:žuóŠõmgÅ"æńķ‰Ńme”ˆ¢ Źö½ ¼Ż? źWz~©I,®Ŗwǃ^’y®iæŁÅ®ę³dg¦ƒ9_©äśB[ŽÉqoĆ]ķ‘ŽāsĮ9ž“šŅŚÅr`mĄéĻįA% ķ:fŽe›Ł ØĻą÷µ–+ń#łČ7,ö÷ W%×$q§Y\~łÆ–@>ļĢb?Zź4żNćU±×JÄšŁė@ĪK^µ‡KŌ¼‰]Reą©=8®/R¹²„…ZPr¼ńT¤Ąé<<ś»‹üæ;pžs^‘«hZ†“¦]¼²OöŲ” gi­S3¶·8_ ė:׈lŒ—m”Øč…NÜt ÷­öŪn0sŚ”ŽētR‰”:mČõœ¶…§Ś[Ļv­4†PyĒ­wn±°‚ H-Ō¬RoVĘ Ö°5LŚ„Ź\NėŸj½i{nŖ}œŪ2ŒĶ‡›ųžūĶJń­ÅśY³«7–üc<]–ƒ­“vq­Ū¬²mĮÜ8aŽÕ“[źnu:dśu­¼‚(ŠnmŪ”)$ŌćŠfŹ3YĖp9»¦¾/rņöēz©t÷Z¤¶kēIoDżĆ€ĄśĘ¤čHŻń›s6‹g1Õƒ>įø?Øö®f}dxģ걙LTtü*ĪRčoŪA>Õo؃:8A××Õ•-ĘŪxˆY ėėY›B=Me³t!iŠ60pzå5Ė[xĀ4²2*ēęĒÅ)JĒeŸ|ZæŸQ×ōŻQ &ŸW“R„ YŸƒķ‘łÖ§†ügį{éepóÜ\Øib?r>Ü`ś`׏ž–Gõ·ŃK…/9že/‡<å4ā¾\¼Žw±č²Ą–‰"ČR¹ÕgO“}BįĆ!rŃøPF2vœcńÆ[ŸčLÓWG—ü,ų“mšæāU–£­Cö$ym.ħ Ž}¹žUūżš£YšļÄøōŪ]`ŁųƒA½¶fQW,„Hćø9ļ]cÉUå \ü§żŗæežĻtŸhWkš³d×RŪʀKi‚6‚3’9ėģkČžx‡D›VŽßĘŻéś`BÓōćƒéŽ¦„ ;ę0ē‚’ź^ųįŪ_ÓįÓ5MnÜŖ]ŁĶ*AĮĆ"+Ź?k‚ŗwÄųGā—ĆGšöž’ińŚźŗ™ä½µŅ‘ūÅ^ąŒ=+(hyyå*•y9;źSŃgŌ>[é?š‘ųŖ=NāR·0²u„8'Ųś×Ū^<ż¤u_ˆZ6m{=’[[ŚGXF¤ noz%RĒn[BNĪ]ųićæĆā½r÷ā7‡­µ­ē62£Fħ¤€śąūc&øæXųcĮ9Ō4’ßOŖx2å„öƒ|ŻPē“ƒYJzXūL"±×]—ŠĮٶ† g½.•«A9PGlćšĶJdzF”ŌŪß[Nč|Å šFz²% Ģ-ļŠ$īm'sŽń%…¹ū4Ÿ9‘¤ņÕLšņ?xGR˜y–rCoynūäW.ƒųG½aR0•-NVlĘWN`ķo¹Æ]šä†[up `\Ķ1=;OÓfÕj(ęeēüGåBv*OC–“»•Ņ3“©8Č=먁rįČ'^•¢ŸswOQ4ĖdNŁc€*Ģīmnš4hŪcm%O O™t™Ņh:ōšF±iØ@#w†E•TŒ‚AĪ .»ća­>»>žVČĪf’FB©=ō¤Z6S{÷ń‡övń6•ū<|?ż“¼%Ū|)Ö5HtĘµó ”łŽbmĘŽä÷āšJ·V»éśÖ“ädœE‡ĒūeA’nœæÅ7ł¢HAū‡µYGør ōõØęhś.„Ņ,±)•łLN0iÖn»Ń³ÓžÕ“gŲāÆ;AūOųĆVmįtzāK{c£E§Ķ$„„røč1Ļå_9ŁĶ>”āTææyķ`™T«ŗ:ć]Øģ~Ź=:u[‚³zŸK|PšßĆÄ0|F¾š'ü&V_d6ÓÄĪAPėįææZł»EÓ“©­otė_“Åg4„ą·£$™öĶksņ¬TO_ųSū1Ż|EńvZµnŃ£ ī¢r7¤$ķ8Ē ōƅ–ž ų=ć?ü$ÕVit4¹’}6ļ?»tĻ*¼šsŚŗaLłģEV“>Ņš­Ųó,di‚85÷§ĮūØÅĶŖĪZY]$ QŒJģ§b©ļj~„ü3µ‚Ćö+ųõ‘ˆ!hµyX‘÷²§ŸŅæ <}£[ė0O„Ķ'Ś•¬”Ęz`©Ņ®Q>{Ć–āLŻ’z‡ž›.ü=Ó汚Mž—7ŸöhŚqŠZę|Oah°ÜÅšÆÓŚ¢ŸÓŌŖ{×>§’‚uj>%Ś×įl~ŅÆ¦F³¾£Ę0ŁydeÉ8Ęģq×8ÆŌoŒ“ż·†?o‚Ÿ 앤ŸCųZ¦ĪµZ“ģ’ Å’ķ’Śu§ķĮūYYZ¢Ŗ/ŠZćq™#ROć‚kĀćøE ё߹ƻ՟īǃQk„²Å/ś£’¦āEs8dĄQĒ|ÕhZp„±”ņ×xpIUĘ1Ś”¦ŽøS9öŅ’wB€ÉȵŅhöĶe?™•Œg'œf¤čŒŅYČŲØdcžqP 5‰:.ļQڃE’c€®œg½s÷QDn²£j8õ j"O§€R\'\v5£m T *€ųĄÉ””‘iģl/÷Ēyn¹qœ`×=w£\čā’9^ľ7Œ>µ€r›0_‘L óš“Ŗ.e.1H‡LŠ‚5œśūSLŠ5N ?Å×Z^šń“Ņ)ÄrŽWv;d ضfćcÓbŠ9¤Arn$*­Œnšk؊<ŗ„ Ł<ęŗ”.Œ”¬hM§Ü}žH¢’H"n”\®*­kŗtń=»yl0knfm”± ¾£so®[Ļ%¦·n|Ų."8xˆōüŗU)|W¬xākk­jņāūP‹0”ņ’?.(ędJš:cdDQ¹ź_i@äÕJLå”UŒ!y@ ¶1ļPYĀÖw1¤ƒi‘V̦uŅ ģ¼¹†ņĒņÆ;Ō<†[ * ›Ķ@HyMĢŽO>ōŃÅVĀGį+żvT¼×¼­NĪi‰õŒąuę»k/†Z¾uįėM>ŠøT©8Ī+ŖŒ5±ÅRH§Ø°ńs­½“ÖRŹ×#%+šCK±ŗ¶Ō/$¼| »›’øÜ‘Ē·ī`£©üµō؍ņ:’ņõi’nO_—źui›kƒ,r¬B†õ”é”¶’ĶŁÓĪÜw(ź“}¬ńŲęyœ“Żyéé]³|EY“q¦¬PÄäa“Ņ€<ĪśĪī’RY”Ÿ"BX€:šėl¬cH9Ÿf0¾¼P4iņŽMjщ1ŠŽ+»‚ęKt‚Hj>dūĀ€<ÆÅ­ķū\"ƲØĘsœ×8·­øK®6ćŌP˜x»ĆÖ7Öw2¢•Ž:ׁɔŪŪ_Gö‰ZŽ!"«8Ǿ(Šlō[>Śęī]DŻc”Ąojå&ŌģåidŽćiĆ o»ģh0*Ēā‹õ—I±–Ņßh;·H'5ŁųoÄZ}ÅÓdł‡×ņ Øßwć/xgGž{ęH\©„@Aśōś×ƒ]üWŃß]³ŃÆd-mvJ©C‘­.SS°Õžų{ĒŚ|vIŪʃĢ.‡Ų9äżcź®ō;VM>RmāFŖ¹ČÅ1Üń}c]Öēš=.¹ŅŽŁˆŗüĪsЃڶ“Ł>٧^[RK[†…¶>óvņ V<ˆx_]]U^i>ŁŃžēńā·%Ń<ūŌ„»¢ ł‘¹$Žā‚%#Ńā’d)¹±{Ū7šc˜…Ż»zŖŲX]Ūęū4ˆŠqĒlŠÉę{]ģī–DG†q†ĮĻ&¹ ¬#šu‘—÷¤å‡zꓩŅ3ģoéĀęĀu°·™£W;ŗćŸz÷ ź:®…§I5“[ÜZŹy‡­`ŁÆ9æŖś¦£iysn‘\ĄO”ˆqĮżi5ϵŖ‰6±T99ēó¦e3€ńˆ­õ-$YEæqu?(öÆæń. ¶ž”ź PG޵ŒHŠWŠķ¼%āoėÖ3Xj–Ö1@ųD)÷ĒŅøĶsĄ·^Õ³fMŅĢžd±FŁņ›?y’N*īoÜś;Į:Åęöč¾Ż»ćVÉ ÷Åsž;šm’“š±ŌŹ;>ĮnŲłī8Øs+Ł£ÉļR…`Ž} åŠ=óT¬lE“ŻĢ<čŲćūT)™ņŲė®>Ā©¦X²FąĮÓ·SH“ńoż–Ļ™7s’|ZW%_©ßųßÄZƇ4ńźWšcHĘŠ ģ*ä<#ńzõ£ø_ݐė‘Ģ1¼‡Z–+„§ü][ė{k{1RĮ‚7Ż ¬ļjóų“˲Xń¦Ć傧ńÅ\i”y½÷‚m”ø·‚{Į€ŹøÉŻŪ­K«_ éĻp,…ˆņÖ2~ńō§"›“Õą×K¹†k%•`FӚé¬ēŁh dŒ`{VrZ‚]Ž;Z½Õä‘QÉĪr9ü++G»¹)8æĪāp£ź+žL±$VČglŠ0Iīj ½5„GšLG9qXĢÖ2¹Ńų~ŚyōŁ"IŸhéƒŌśā±Ž,³G $Ėņņæ{>•™GQc¤!²YÆ Źų|?¼ßĘ^€Noģ#"܁øƒ‚}«XK””¤pŠė3é2CS Īqš t‰'*‚ń/-ĻJ%-ŗTΟ¾½Ö5 Hc¶–u2«.ĮžzWÖ¶Ž{;HL#k°)Ī+ĀĘÕčz“)•ģ"ŗyf…å™d—·®+Ńķ$Hć„dÄ»”üÚš*Jģė„üł×6£ū&Ń®®ŃKa8-õ5&­č¾Óīī/UļuPĘcn 6@ä€Z˜Āģ¶‹Ś?Ā?|Z0ųƒR¼Õ¼ąÉāe»M›”žQ«gé_Zü8ųmąĻL¶? 4ū±ā µ“iˆ9,µėP„cެ‘ōž§{š÷C¶¶£¤Ūų«Å0čģłŲż9=ņk™ŸJ×|k=¦µŖ\ŚčZ\Oö…¶S“äg ōēҽš1<ʵbšn‘ż”}i¢ĖÖZ{y/łIĘOÓ­_½ŗšĻĀĖ/X[ź:}ߌ.0.¶–i99 }WdcÜäu žörź^"×ķ“ I"YbĪ{ž€c„yf¹ā»ßh’xg@¹M;’Ā-ģsčOlzVр{B+FĒĆŚ|šy¹—ZŌN!;—ĢfõnzzŁ»Ņ峃L¾Ö|ż?N˜ļ„oĄ`:œSI¢Ģ}sTOj’f™Ee”÷;B4Ŗ¼ō<×Īž?ų­š’įpžßń~¬·Śä Ū`Œ¬Ē;[žü~UpObŌģ~müsż¶¼YćątĻG’¶‚s)…,§ļ Ōżkį½kŚÜÆ$ә[o–Œ>ó/«ZŽ1·±ūS„ų‘Æ­“ł†-ŲB¼żž§ü+¾ų‡o šŸö]3ķžY£Ļ|~'č×ÜłčTåV<4½VźŻģÖ` m^'š5KÄz¦©¤¬ö1ZŸ»¹\ńœöĶ`kķo”䦕ö„¬ 3ŻĖnр”Užī wžÓ/ZźŁn[pU˜ē'?ĢPi³ė?V²²Šõ _"pU3* ŹAås×Ö”šW‹®®µ©4+-F»bƒž™éŸ­Š'!ń#Sń^—ā}2÷Ne²`žlé.BžŻ:’õź÷€%“?x‚ž\*?ŒI×wU_ēU+#čŸüsųwćÆŁŚŚ¬śmŚJQÕ×;˜ąž+Ü>źŗ ¶ŗ“²ė–VE ļ€ąöwé]ÉSs…ųĒąųƒƒ#ńUÓk:v§agr!höHw ŌŽ€y’ü×ųÆįłt½z{8āŻ$e„æ.9ćōĶb£`‹gĻŚĶāŹ©mn­ 1ĪŖ ›LF ¤½żė¢ Cx3ķ?ŁoĒ‘Ęš„µ;“¶Ū0µÄ™Ī^Üf¾č²¼–EMł‘:DćŌiāŁO¼3o —ćsé~=š–‘%ܮ𕠐»0eŪĮ'Æ­yøČéuŠŚ2č~cjŽkKS2ȗ6‹¹ĆŖ“øsÓ‘šÓāV©ąæiśy/4°ģ²ŪÉŠŃ·ēŠf•=NžecŻ>0ų^ŸLŌtė·Mž%¼³hŪ&7=G”Ļż,Į?k]gĒ~ ń·ģ‡ń7W#VŃć[Ÿ“ņßŜ°Lö WŁt(čŃ<ś½š…Åö“3Ē";˜²6‘ė_axOZ³ń„tŪȝ|šž[€Łł€ėų×=JzhK‘š—ķyš—Dń^œį"±ŠćĀŗÄ„ėQ˜Ć!V+ø>‡iϵŸĻķYū:ė_ž.üN𢐄Ņļä’Öä)_“Ų1-(?ģąTSŅG4’ŠŒč{…‘7b5Ćzõč#»™ī[Yвf6ĻQ÷iĘC#‡-•nųéZĘ$¼Łk;AŽrŲąŸojd‘å d†$ƒG ą‘6åŠø«)$ąœeš:c„UŽĢŚ2¹„gwVÓŪÜ1džéžßŅæ¦’ų7öŪ‡Ąž:ń_ģIćĶzd¶×Uµ ż”ĖC軞4oįĪcż“ėĪw:#¶‡ö3gš”aŠ…øŒ”Gš°ė\V攄ĆĻg r§ū¦ø¦Š>ųķąŪ°°kö±'‘d­¢1Ÿ23œ7Ōqśś×ēēÄ’‡ś_ˆ¼#ā]śĀYn…“c.ĶįŠ«AüėŲRZǧķš²ēįOōsĆĻg{e¤N^{%äĘ~b\{`öÆ egvP»UxĘ+¾CšpÖå9²œø ć•TK±pFW ūWJ1"—b”e›ļ2攩P°&eĘęķŽ”Ąd$ī02ĖĪ}é%@ĶR>ö;P$O aĒ?7ó§ÜO)Ā·Ż&†ĪŠlÕ¶e0œeA,:®kōūž 7ūW]žĻæ“1šf”«Åkį“Q[^\J"M½\yx'›īŸ\Ö/s²1¹żåü&ńæ†.ćÓµ­tķÅDI­qqg{%Į`¹ēxéÄÖFƒą­WÄj‘YF]· –8ā‚”nvŚw†'Ņ|Q‡“ąĻ¬Śā[”E'+ĻĆōÆBŌį¾Ō"ß4*~tĻŽö5¤DŃn8"²R%½¼£(Ē ?Ɵāķ;Oø¾ŠīĪź‘‡ļc#Ž}*æCĻ'Õ Óę{x.7(l½QŽņęk¹įh„Ł“2¶F֑—++]Ł,æ¼ułsÜU›d¶·Ż&VćŽŌF6/ŚŪ§ö•3Źó¶r@+GKū›dšĪĆz'īĒ\ŸzV[gY’*'Ü|¬¢¬ŁM-¼āķÄoģFq@ŚzĶ{+KdD É szƒuI®.ݘ…,04Üē<;mŖ,ś‚½ŒęŁ0¬]{JŸ\µX|›«Uu›#Š P±™„³¬Ąģ>YäńŽ­„EՒi.[ŹĮŪ4t¾S_³ŗ:SœÕßxréą{;k„ØĪć9 &ńŸśõœ‘ż•eˆL¼šć×5a– ]_Čė*„&.h.,ä<5ć«m1ÄӔ—ną2~l×7Øx£ūGRk¦I&sÉėA©ÖO}éÉö9’7+– Żń^zŚ£ÜZÜi7EV f ĄŽ¤gĢŠ7¬­>Ź[ŗø\b¬ė–ė¬-³¤$Œ1§L R•ŠŒ¬sV²ŻX\yrŖ$B„ž¢ŗÆ ŁIu,!Ż>ΌK« 戳TĪī?YŚ›¹¬cFĒ-Į>õĮźŠImp·AŒd±$t­cfS8jņKėØŽ#$i‘œ?īō“°µNį&bCtj½ cn†ĖZ‡fA^}‰¬­[ÄKzVŻ\mQ“ŠŹORŽ=£Žk“ž?ŗœŸZč X® ¹Nń¶08ļYIĪŚéš‰2Ķn“³©Ū‘’ tv÷Ół!.ÉiŚr:VFš¦Ķ(u qlńĻ7’ƒžNz•mg«č’*ŪG<#†p?­D`в’fK‹)­įœyEįŠö5ć÷RÉlę# Ų§ iŲ·Oaس”WąvĻJė“;V¼óÕUĒĻQA¤bn]ŁĖ³ (Ąœ2ē­rśŻö—§6”hb’\nHÉĘćéJÅéŻķż²G˜Æ [[꿁 “ „ Æļ%ė%¢ļ¤muŽżÅÖ'”ź<49}¤œåē'd޾ˆ§¦ŽGs:·ĢÜā“[c•ך‰#،ŗn‹bE;¢Ļ O³¶ó]‘WtĻJŠāÅJژ|!kń+įµĒ†„ńŪkÖļ“ɘ}×Q’™ņÆĻ»t–[e·ø&ėnĘĆr®8?ŽA®š{•qu'ĶĶc믅ž&·ńĻ‚›Ą q©jŠDš9uĘõå9ļÓ銳ī-ūĄž ŗ²Ōὂ(„;‹zēŽ¾‚ŗéĒSņ\eZ4ōxŸĆŽ.YŃu ķ.w8„¶m’.sÜv9ÆM]g_ń®Æż™ØźwŃjĻ(Ū;H|ÄmŻI>ż턺3ŒĀ&®¾ō=#\ŅtP/ģMbÉkvčxóČ?ˆ¾±ų/āūx5M0ȫ庘NOMĆĪŗ”±ņ±^ńū#Œ<;¤žĘ_4yu(Tm"čư )‘}y<śWāeŌw ścĖ[C1<† 8ĒēTĪ^É*į³\ĆWH֕>_5i_ļm|†iWBŚö}6i8&żāē֟ām Q½šĘ¢šD-urˆĪˆƒ%ˆ++ė”ū­ źĒéĀ‡ž%żƒfOžŅŗ¦¹o®üYÖį†ÜčŅF©l°]ńĀæĘĪ€#“Ē9_̽;Zń?~7xCÄ…Śų‡Ē·WĆĀÜ<Ū€ÓåÅuĀZXüƃ] Ó5Ģ3É/zxhö䦳›ó擿’VļėĻDń.…āh/¢²¼µ½– žŹöšĢ¼4næÓŠ×ē¾µūüiо4iž2ųIńkKšŸĆ鵨®ļ¬Y_ķP[n é?2€võ֕.ö?ĢL.*TUxæóŠžloݼ’ż§4E»{°÷mł‘†2ŅŚ«‘ųf¾qš" Wfcč+ÅÆ™žåx3]VįL¶¢VżĶ?Ā ~ƒe¾cīӟ~3RC{v|½°ƒŲū×4$~«”ŠĖ­XĒmn¾]ĀŻd«’2©`æˆ2µ¼ČĢŻrzWJf5#m–ói2³ŽõōßĀŁĖOųŃį/j7^(MśŽ1ä£Eņæ’Żŗß­D©\óq8ŲRƒœ¶Gß“7ģ÷ńKö|Ņķ¾ jÖiā‡łO©éąæö{nĄįצkĻt}R+ėXä‚@APĆż”ė\5Øv;°ųČÉčkI+‚ø°=Et€Ė˜NĒ#©®)FŚ“e¦†õ˜0:­Į,˜äƒ\Œµ+[Ūé"²ŽŠB,źA-ŽqRg3#Āz¬·w6žn%QõÆG‚pr甕pÜP%$Oņ†Ę8Ē­_ŽŠ_ĀÖģJqƒŽkTjCŪiņ,Šq“IļZ•–CūĀĖŚ™”×RĀÜ4DDóÅtVwM“gžœń[t9&¬l“zeʗ«iŚ¤7vó@˵śĮŚ?ē_kžøe›FweŽ$Æ'5ĻRŽ*³²7ō ’Ā/¢ŲŲ]]›ėݹ8ĒĶõ÷Ŗ4‹­#Į—ž#ŗQæĢHŅĖ|Żžœ×ąśm\dc¹Ē|.ż|mń‚źŽmŧ°Ü"ø[ nOBķŠwė^©ā?ŁĻyįļÜĶqnŠYc;×'Ē­e(Ė©äUĶ!ĶŹ†|Yš¾÷įįÖl¤·ˆÆŚ4ėÅ$Ēs9gœŒŠč¤e†ŹŻĆ)'WØĒ­dāÖįK§¢6ōÉŽ6Kr+×t}XĻi{fjʁvpǶh=z(į¬e‚-BöŹiQ®c|żŚźÄ04D±V$qÅ)lwXŠ 5%”"ŖäóbØė¶–ś}”Œł‘œ†ÉÅ`k ‹ślĶR¹;p·™Ń£Hāa·<óĶ‘ĶåĘķäuÅR{(dU;0Ŗå`$¶ždL£—-f5„Ń€²©ŽœT2ąĖ–‘Ī½ĪåVŪČ׉öU [‘ó:Öj­œ=”fŹź{ ”į ŚuĶuš[’ZÆf`ŁfkYbr§]ĄńUuŲoµ ź:t¬ŠÆļČŚ ] ņZ|¦U2Šo…ģ 2d/øę»č2G““³3£ł”+.Ś”)c:FI¬v7ŠŠŚ“RåG%=zó’*é+icX,ōū<ØĒg䑳cņŖ&oC”ÓŽ]BtÓģŅÆīĒĖ ėTĢģn7q ØŪYIĮŠÕÅj¤^“¹0O†—$žOj±ā=zĪĖA½Ō² °ćīņ~µnĒ%J§%§ųĆPµ¼·ŠīŚķ¶īYc9SÓūŌžlž§%ģ¶‘ĘīĄd.3ļWM£†­Cټ<Ńķzš3Žŗ™õ}GL·žŽŹł ”IBŸ¾¾†»iīpT‘ę>+¼–ĻC֛IV3?8ą”#ü+ń t§¼¶]BrĶ  “÷ÉĪ+ÜĮÉ#ł+éS‹’bĀQļ)?¹%’·µšēĄé&œn.¦y­ī·GŹÆ^;śUŠ6öz̝ŗ\C²ōcžšÆ”¤ĻįŹš0¼#¬ųę};S‚Ö¾VXuęEZś?Ć>9³šTž'žÓ±¼Õ#‘GöyMŪPvõ×EzGq«uāßi÷Z¶›ödG2ŗ1łOįé]ƇąMCNš÷J1Ź*ĄéC¶Ē‘Z6>ūšF<Óļ•ĢŃƒÜcø–r. hŅ>ī3Tyu™čŚÆ>“i§oc«›$ó¾Čūō•ŠŻo0;R7ōüh4‚g–ŅŁj>g˜ŽK†ĪzŠģ“­¬„YīēŽhņ×<j 8łõ ]w\»±6bŃ6†Œ§Ż9ķśU-WA6±bÜ)'4š¾»ŗ·eL ƒķĊsõĄxćįõŅĶź–ѾŅC¦ćļŠx|6zÅ“’Łsn66AĻ[ڧĆųµ«1itD°ąĘHb}2(%ĆSŒÕü5¦xRŅjFó|ÄÖ}•“øūĪ»vGŠ„n¢å×B/\j ½®­#Ż«ädīÉ=*|;µvVžÕ|äÉČCģ;T”åcе?źžÓÆž;›;Kų²#cœJ¹é^™§ųŖāėO‚{Ÿ*9<¤v÷Ļz ē}.ńŸ•q~#žŠ¬ŗłŸŗxüØWC”ŒŁjo·~H‡pløČ­¶ØÖŅĖ’"oĪv€…”zܶܖqOņ ‡$°ĪÕÆ”蚒Šģne°Óļī"Ž3$žP'Ė_\Š ,&—”ßM¬„ęØīčˆ0żF+½Ō#‰­ †ŻŚ)RMŁĪńŽ•2ÅĢ.¼ń ]Üā')ɏ#ƒō®§Lų›u§ŲC=Ō8EĮhŲtö¢1°ĪUų»¬kŗ„Ų°šžm„b|Ē|gҹé¼[­źŗ|ŗ6ėejē̚EūĮ±Œgń5@{†¼¦ !½Ōāģ[‡UAœ3ół÷Xš%†­u­Ķż”DŃČŃąŒoaĪ}óšš]g\Ņ4­>źÖžćū=cČdźW óƶZŻ(’ŃžŃnÜļœP)- ¬ī Ņ[ČäöÉ«zĀ^jöšN„b¦)Xķp2ŌJVHĄģüQ«Ļ£¦œŗ6œŠ0IÖ@9ē†+q$“ÕttŌ,­£Žß¦?ˆ9zę¬”ŌŽ)ĄXĮć'K©ĮqzšÅ–ųĘvõ®yös„Mm472LšŹ0vžŒ:ŅÜkŗ¤{c³˜®O<Öf‘•Ķ7Ś«^/Ū ¤Ź6õėŽõķŗEĢz¼Ķ\“‹ĒŖŸóšžd9#Å>!iWz{>™cq «ø—ĖQŸü:Ō:.{owNZ1ø’½G½˜Ņ9‹ŸßYź 5³Z[–ŹpsžŻŖi<_<šÜ‘Ų9ų?ζŠ¾ēE4C¦j>3š¶¢Śž‡¬4(Ÿ,–²Ģvŗžæ)ÆFĒV¾/Ņ]gXŅż2]ĪÖŖpFĶ"÷„ōķ7Z‚śŅžöH.–2am™ō?†jĶ8w­½Ē=²8JÅĘŚT0/ōūų!Rķ.[89ÓÖŗ­5RŅŽ xSž2k%”‰gÄĖ&§`ŠJęåXn!¹ĮÅxľŃ/-ĢRźėgpŽD£īćæ’Z©Lø#ÖSĮ6™Ÿ+ß6®T#C \ü{wĆ’čZŸ‹ü>š¾¼š.‘#mšIˆECŲ“éV«Hņ’‰¾Ńēų±5¾āGÖ“KV/±ŻŹŁĘ3ß—‰e««hgY®">f vķĻįZ{C3ϵ› ”iHm$RNqŽ•ČE{qö†„¾9ĄÅc*‡M6“¹rYüÖO0ŖćŒśÖ”z-\Ē$Œz•‰”’. ‰Šžģnćõa›Č/÷‡fĪx ;ÜÆq=Ä1“«m,j„ …-œż*k7˜f9Ä͜qڦ”ŁIŲś3ąÕݵ–£§ŚßmhĘģ…ūĶĒzWѰ‚öH–ŅŻm¢ •Ėn ÷ę¾wäŚ=:SZŪĒ6ū¼l7Mü śSuĻhÖ‰qsjn:  ½yŌšķ³„ÕIjTųysćj7š…“=Oģē!Æü¼Ć»ŠWŪ^żüą“i©__üHŸ!wf¶·'ÆQßņ®śXk•q+”õž ‚«-Oāę¾Ś}¢ lģ!ڰF `˜Å[Ó¤ŌY‰<ēŲc„_9Ō©#u+ItŲßÅOr«›‰ŹČqŹžĄUjēNŸK°ńoŠ‹¬č“lĘy8—œīoqŒS¹¬ec×|S xŽĆD1ź7ī%Sp”=é^=ūBxJóą?¼=ā ęöj‘Ā·)2”RUŽqWX†ĻPÖüAąmWĀwˆü!äXLÅ#xQFŖäœēŚ»O…>&š‡‰ōķCTøžņ  gM”ß5r2GN Wd'dyõ|Ī›įo‹¼Im{ā½Å š’ÜżuŒ×pąūŒcń¬ŒŃkjIixĶlį÷а`ĄśELŲS>wšĘ³c¦¶Ś‘—PAQ—Ć1÷8®šĒŚ'ƒ|Y=•ü"øa"ČP2Øō-Ś”³„.‡ÓśGˆ“Łüs¤iK©é³hĢbySeFǵeüWńĶ’|Occį;{aqØJésG¹•9ĘļӚ‰FģØīv >16™āKEńÅ„‡®-ķ<Ó=ל²Äuxƞ~.üQ¶ń޾¦-5k’“†s6ōČ?CISŌŌźä¼’ĒĮŗ³[[É-ŪĢHŠIĪg#§$Wŗ|[¹Óķļ5k€—–ń‘wœžMoŌĮž•āWKń,š.āµ¹’)wĘ_Æ=A«Ž9šļöž‘¦YOo ŁYdE”ē’h”t2ēģ|Åᯉś‡­ėš%Ս¬¦8?.šq’p+‹ż¤ü9§x§QѼEįćmslÖ»nfˆõޤ`zW4£`ē?:|AŪÜßĀēyLcĄ\`÷®kWF ĪĢIźOJŅ“.ųY½Šµx&“m²|¼’GÆå_¬æüNšī‰c|.Rą¬@HŒ£ō?…k(čē§Å$…”ķI掷ķōń½Ī‹#E\Ęa.ܕϧłļ^f'cXČł'I¶Óü'āųW[›K Ā—.d^¼ÆųĆ®ųwXÖn@Ńć±µTڬ»q!ĒŽĄé\Tł¹“[g«|"Õķ~ ü1o_صń‹“C-ĻēÓµ[ų%ń_Äß³WĘ߇Ÿt;»Ė)“ĶR9.PĢŹÆcųYr+ŌV¹„ō/š·¼7ń£į—ž1ųJī OIÖōųgi#pĮ$(8ČļŒēÜō†ŚšŃ5[}-Š­³“ßyō¬$ŗķ<1a⯠jZ-ōhmnć1³÷}į_ÉüĆö7ńˆ“K6ŗ†±ą«v“Õą0įļ4āIVą|Ū@?€®WīūĻ”“‰üÆź¶h­å»o³*LaN‡ ś`ŠęaČJ±\唍wAō3”zr4w/ó“Įź)"ƒ<#Psń­c¹ĢÉK3+`ƒŒķRŻ$o–ś ·§µlG.„xĒBĽrzż+f9BōF1Ņ“FŃv,Įr‘ĪW·‚N1ƒ]Ÿ†#é·Ž;šž—W >ÕfcLp2ń·¹ż 7^lrņF‹só#GŽC‚1Ś·”>ŒĪh‘RŽ]²I…įWų½Sg+ä²D0}k²2±Ė$'—ŻP;ä …ć1³Ä7\Ҷ$Œ2ķ či±$\889ć¹÷  }æ/§9ĒJ\®Ü³zŽµ¦“Ł-žĘGŒīĖ(ļījÓGjK-¤Nš‚IŃ2}åu`A:ŠćmNøHž×?ą‘_µ}Æķ š2ÓĀZ•ł]YŲXH®ß6™©Ą£Ź•[°“h+÷ļĀ_§ŗŃō­cSD·»µtÓõØz&.ģyĄ<ūšĀŖ:ŪP[NīF‘±<'Ģ·`xu#?ʰõ߇žųæą|8ńU“wžńŸ6y÷lTØeĪpĆ'ąW–¶üå’ooŁkŲÆĒo|?׎Ē˵ŌŌ412–ˆüŠĪŁžM§=3_j 2&–2yŠSn)Ėq=Uųy©<2ĻlSÜd€=ė¦Ö§²ø“·xdŸń+®9#幕ŽWR¶›S ,Ģßi8ˆÉaé_@| ÕŪEŗŽ‘ŅįIūŲŹ€xü 8ŹĆœŠMKā^+]6įo-Q·…mš8’Łõ÷¦ŪŹ`ŗŒ¢«nmĶīkTīrT§©{V1LČØåœNO©”Z ½©µ÷±Į­ć±ŒVŗž’įūxmģ„ŠČ£8ČÆFųy<F“#¼Źż£1Ŗ±łA♼Ws[Q>³–źy­ā¹Ž\¢žzõÆń׌“Hҵ-BmAš»<óŸē޳äŌÜš½#W³ń„ßdŌć "©’=Ć#”żĘ»+KĖQ‚ŪĄäb“3“V4äńtVÓ„­ŲĀ*į[=+ŪUMkūNI-ĢˆŲóP?: ģiĒo ¤a|ōv\rHÉāÆ\½ÜĻnį%OįĘ7zŠ%ZW‰·@ŃLHdbƒ••ā \Gi40ÜļÜĆrē((ń?Ķc&¢‚Ż„Nč õ8äד|!Öt;fƒNÖµ³PŒāWēq qA“v=æĆOįmSÄæŚśa·ŗŌ w. °ĮüĻē\Ž„&Ÿ«ųŚī-57L„˜Wø\ōżi‘$yƉuV“KŃ":\b Œs^‹u=JcĻÜó9ę›3. ˜ųf÷…²žę¶ü+}kż· ėŹŃI•łzž:~µ h\]ųĮń.ĖUÕĆz|{ķ-€2»üĆw\“ÓµPųcą“kėāß‹Y^ŽO3O,®ž!ÓÖ¼ÜL¬~÷ąkń*U#zTżłśGeēyr«væcé]VņWӔGmW‡UĮüj߇R+‹Ż"łÄ’s_=ˆw?Ռ4,’-jÖV­Ø‹ve܈˜æÅō®†ĒåAå5Ķ©īPhɘ‚bIē&“YšÕ¦©§4ńY–¹R r ĻON>•Ó[C®ényd¾3ŗÓ,īm5w„“Sżģ,ŖyÄcUż3ÄšM&w£Žwu¢«œĘ½Um£WÕcƒE¾Õ”Pė {ĒĪ'ž?Jē<šóDų‡įojš»[6·‰"H$łŒDƒ“ēßĪ²lł|Ś·,»-|1šĻü?ā6Ę“é·d– ž² pU†{ž½~“ėWö¢šķƈü=§Ųi¾&0¼Ń°P„œ.pĢ+ t<9Õ²ęGå-ēöLJ&Ö|?¬FöšĘu5ŅŸą•©õ—ģ7āäŅ|sā)/ŅŪQ äFńIĄaź~¹ÖŌi‘õ˱ž,Óķ–żļ“µ"ŹUI␨8ü9ü«‰Õ|?g¬[Mjā+äī’+Њ X­nŒiZÄĻ€?¾ų¶8nƒčww:C8Ė[_ʅ‘ѱĮČš÷ēņ{önńOĆ߈ߘźŚõõ‡Å ÆjNc“iŲ[8ėĆu=«:±×SÕÉJUę—Āģׯ_Šõ˜ō8ķn)īY£SÉšÕKøōū{‹+(¦oŽ€ÜIZĆŁ®§ŽÓ©}ŽgÄ k6/l€;uƒo4]CįīÆ$:RÜÜ[Ü\—0IÜO"¹å ĘV=ĀMWT]ŽÓSŠkh[3 eŚ7cøä¼?m1—q+‚¤l\gܹlQ„|}ć錄w#.I +2īSk€püī÷¬JIbwpĖ“ž˜¬¦mNGS„]»ŁĆ c{ūI­ė>;§‚ņ¬ī‚RE*p{ąÕŅ‘æ::(ę”ȉĄęæS`ļŁ§Ć·?‡ž7ųoÄ1ÜhVްßiI0ZīT&6N:¤ŸĀ½\$c)Ę2Ń3óx¦EĆųœŽ’¼Ø¤Ņīܒ·ā~Qx>ĆWŠōÓ”xŠŚKM~ĀęāĀįXņͬ›æ¢ŗ†ŸŹuYĒ'5]а„Z”+%e$ŸŽ®lÉr²p 6NÕWūAįrźN?LM±¹r=TŁywń¶e ž@?„|«ćÆ%ž»{¬é0@t©É•¶”/Ääš:kX>‡Įń> Ī]‘Či:¦”į½gIÖ,¦Įž]ÜĢ„uõćŠöˆvž5š—öī‚ån¢“ę¾y®įÅt)Ųü;×9ó&”{5ÜPŪ¦&Q•,~éµé^ÕīšļūFWD½ŚX¾ļ¼khÕ<·K›CÜ>~ÓŽ,š“Ańē_š†¢Ø—°Ģ2ʽĮöõķ_« <5 x¢ÓĆ·ŚF®Čļ øŲį†ÜĆō®˜U<*łtT›GŽŽ%ņ‡Āˆāöśi­t‚ŃFķž¼ä ōƒ¼.“āMCOŅ5Yį¶½øP#2 (8ćZ©\xdąŁ±ń;įŗ‡ool š\Ä Gp‰ņ©ö5Č~Ķ’ąš?ˆō}Ē~Ö¼Y£é“ś„šBZ‘øF—¶ŠH<ńǽTQīPÄ7MžūG|y×¾=ųĀŁĶ®©{¤Ł[–Ņtū\µ½”@¬|¹Ąėķ_9ü0×¼u”üAšÅ÷‚<Ŗų×ĘjQ^XZ[Z™™g,+Ęy®˜HāĮŠĆeYLØ'ĖE¶żnäßͶK>ųŽß>Ēń_āõŽ›įÕõHnž÷š™F0ć»ńӞzOĮ?jž<Õ>&\ŻĮzŚ®§zEŌ¶ķ»¶1½sŌnĻ5¼›?ĖvU%FX–½ŪŚžjŚ}ĢžU?ą©~[ų(§Ę멈dæŃō;„ķōUCś”üėāØ`²Š0<µłxkĖÄ/x’k>õ•N ĖZéJ+īVż ūƒ9HĒJ™gŲžX@pŲżŖ+BÜ& =9|ŪZš^ŁNĶŽEiŠåÄŹĒüAńųFk {į*Ūϵä(…ŠÄHēۃ_¬æ³µ›Ūh[4ó$63ĄŒšł­ąś œ×Ż=‹ŸµÆˆu üƒį½Ō6”įÆ$ėp’&ē_”ōퟐWą‚ćHžļó$Ęk9Ķ×hc“žX¬ė4vd2\®qź’ąÓh¶ē÷”³’{U˜.„‹`-œ+Ę«¹÷T>¬²“ķ%p\sĻJó’\Eesu„ß[ÉĖšHq¶QßJÄŁ£žšµĶ­¶”*Éüų;b+Õm  ZTę®\ŠIX+uėĶj+’VF’s[ŗ‹ķ°˜Äd·o­r6zœšŻ4SĄÖ­†ž ;ŠqDŹ=Š}¬¹g%K•±ļ“mPOjŲå­!.5ė; ­:ÓU¼%Ģž\yž&ĒOŠŌčŃ4‹ Ķ~ūNP†X㨢ĒĶęUyb|É”ųĒū_ā†ta —Böćbl9({|µśq­žĢšĪ§šžśėÅśkXi2Ā%Q0Ū$‹ź€óĒ\ŅöW??Īó%NQķsĖ“ n?čĄæ­åŠōI I3`–¹aܱäō’õ×qw«Ks“<e3»Īj'GBa‡m©3åŪ‰-õÆü2ń„ķ„O{e4šuÅĀØ]°Ā“ō$~µņĀß§ˆtŻĀ—‹§l\JgÓ.˜ćęģŒO9śt®°=ģ;M.īŽe ‚Gł²Ū?JŅ(·V1Zž“ą_‡ž%ńEīŸoĮ£YOŹŽße ÷Żé^ÉØ|ż˜lⵓāēÅ-OÅZÄ2ᬓ@Cžö2GNõŁO՟q$ ż–<Ņü©‹ōĻŁļĆ~H>|2ń ō3ƒX¹wūN3’Jžqōķ\Wl¼m}©_xĖĄvŽ'²ø_ž7+g™H#œ źöłģaŒpj³N^ŸōŒæą›ß ~3x_EńßģėńĀćį¾®bjѵDČŒ„!ˆeĒNłöÆÉߋßž8|ńŻ÷ߌŽ“¶±5®­hŚj“Ąž‡Ųō„*ŲćĀq §UŠŖ­%ų®åﵬ6ŠĄŒ$“`2@Æ\Ó4ū=BˆˆöšŪ‡é\’”„[›rŽÆ§Żč— &y*)ewŽK wž*K=VžéŁåŸ-ĄÅiM›IńĶ”­š·āŌW6ēVžŹ‘įĖ|Ł•ųą½bńć¶·»›Ķd7yōÆ{½Ļćļ„}'ģ°2['Sņ‡łFiž:Ó4[» ˜cąeAĘO„p¾;ÕtÕń<:™ƒĢ“› C62¾€ž&¾Ž–‡ń]cļXIbsfĻg 01öśzõφŽ=M"7²ńn’,£Ÿ'ŒŒw®øīyUYöĢ–ŗ މ¦A„IŲh¼ÉRyÅių~ŪNšŽ—"=²ŪīpįÜą*Ö¶G‹ˆÜśŪFŌ¦>ŒŒČ#1”ŗI’ėה闚[˜•!ŠYs’HĪ)žUX–õHR)#gd’)FģƒŚØĻwedŠd–ŻaĒń†Ŗ2±Źąyõ‡‹>ĆŖĻ>ł‹ Ż&Žҽ†ÓŠآ<ŅÉ,¤ą‚jłĢfŠZ½øŌn‘#.‰Œ ŃŅ4Ł4Ė{–y ¦yąb«ta&ck:ķĀŚ;éķć!”÷Æ=š×M“—všśA<ĪHÜ Ÿ\‘ŅŖ4̼Ž»Fµ«©ŅČÖŃrG jĶÖ|2t»éī„ҐFvµ[ŒōA;Ēžå|ʵ.<ˆ-Ąci8Āē9Ør3”ŗ%Żč{ÅXÕb| Ź CÆ$×6ĘaBT@>U*bīa9t14©Ś(ɀB†u­ CU¾”3HŠŃ©łGµyŽ«ÕĖ“ņTžŖ„¾šÖp½äHO°4ÖhÓµöčī­¼’¤āJ›Å:ŲÓ£[|ß9—œōåv7w3Ü ļ,ī[hĮ5éļ£?ىø…8$7šūІ‘*źFõęX”‘źEnų›Ę°Y„Ž™ Ū g9 [‘éŸEÄAu+€ ĄÉĒRqō®ÄŪĶæcłŠA ( ?żšėLń ŗĒ›u –6? śZ²kw-;K²Œō?Ć@Ł…«Jš…Ģ·14ó–įėŽā¹Ż3OŽ;wt“xŪ9-ź= ˆö5'Қę%’h£{eo<Š×ÓüQ¦h¶7Kss"©T@ŲÉ nų’Z»ń£_(z ±¢œ`“Ü ”­½ÅƇtįk®]C;ø FŽxļš£b’Ć­CÄSųØ%Åõę³k2„ŗŒD@ėŸN+ߒw—T“O¹¶eŠ<'XūP1„,~^äSĪ}ÅiXųŽYlnaŅVąŪr”Øä&ĒmįżoRŗ›P†6F#$Éõ³£^Eöݳˆ”*ŁķļXĪc¹Ö¾Ķ4Ź—āõP(G9qéķŅøs’œ]_~NG®+žK”pGceŻ#É(Łq‚»‡Ž#Ś»ļ j-į”¶›l³•8Q!Éo­bŃ”ƒ¬ė ā-dīÓīšfrŹĄdGŽēŚ»2ģYéžUäˆFEČįéĒre+—–ڽ£½¦©§GŖŽ`z‚XW–źŚڬ[NÓ#XQpFß¼q]TŃQ›ŲņHų“K»†ßT³æ·~ó”ŚćŌśįŸ¦K jGR²Š{ę“1H­ĪĀz5l£Ų®fsæ.u}ķ®te–ĘYŗ{{V^‘ń/PW³³¾µŠķŪåyšūš‡g[¶××q«Z¤ī;˜§Ś»Qs„éž]ÄäF'ļt®ySW…‹V·{iTēo^+ĆõÄŅõtq “ū8,GæłéIĄ=ęĒľšō q+KseØT'.F:Õ?|NšO‹ōŌ·‚ĶŃeįNül#Žƒš‡ *79-%bÓķ8ł<žµŁ7ˆ4ūH„ŠĆ#NÄe³ĻҤ–ŽS^ńWqyq¤P†;²~ó{WtŌg[°ē9ć"‘‹ŃŌš(įhöėü@sŸZåā°-“ÜHģKn^;v “_Ļ|, xĪ8ę®ĶjĻl&bĮ³‡«c½c(Ų -ŒĶµC!R ^ćė–Z›€Ķ @Ķņž;zÖM«uϰźP@³•’(X² ø9÷5ērźöVWžX·(m«Üµ\@eŅ­üS üŪ3Åbéńņ‰4-žœāŗ&ŻĶ=U-,­VxöĖ3mīżk—^å#X (O,@ q‡cB$Š8ŹĢ¾h8Ś;ŌŚJgčeqƒ‚k;6ˆ³[³\øŽč°Ś¹Ē™©Gj-‘ŠõeījIåÖē8°Km½äxÖԐĻ%½1PŽ8 Jw(ēé]f,²Dą2c$×3$Ņłę,6üœŅ€$1ü…sņÖ®™g(…Q›ƒ‘ĘhlŽ ~ü5ųYšļƾv a×>ĢVīÜ.āÆŠėŸJł§āēĮŁ~ &i¼Am-Ģņ&Ędˆ/÷‡½rŗŚŲėŽē7į ‰ģu­"ś&¶E Ņ“!ė_mųŖņŁ“ėmJ8ōĖ(¼…_ÜJrKWRŌŻ;3‹æų£Ä±čž’ņö嘪AŻ'¶ńŒõļ_}|*żˆaŽ+_üsŌ]o–4¹Fµ<Ėčät­©ÓKR*Nś”>šƒg »hl_ <)ä…{hˆ/8Ū<±ę“¤ń-æ†ĘƒįÓ^¾K²ßm0#Œ|WB¦ŽI&ŁŌ[ųD}MkĘŠO{~ɗ·ŸęXЌČģ;s^³«ų^ūLŃ“E²†Ņ-{`öĻQŽÅXLVš‰C“šž‡ż…|lģ£kŪūł¶³LŒné׏JņĻiS§ŠodׯLöAž¹ÜTŽŸZčŠ0(x¹>!ų„xM‘u-'Ā‚‰p‡` 3…>õ»įß§€t«˜|2bŗÕdS½®Ņr Aėš|½ ©ŹĒ•I|÷–I{āWņÆRo1aI ]Ūøc#ښŚtž æŌu›¤“šī–Źv2BVĘz)ėO“S~t|ÓńOö ųwš·NŗŃü8`ń^æČžŽIʈÆF$rķ_”??i‰ūU:…’Š-%;xõé]ąD„sęē“h¼ę“ ¤šøŖRøl¾wv®ÄŒ&ś;YѶ9GqŲćnx؞Ē<ŁūƦųŖĖOšu¾“¬hVz­ĆʉmĆn ’ūFšäś7‡luÅ·[hM§Ścą|ŸQųWmy+6pØč|/ā›Ū[gWø€2I,ę]‡BG·‹¦Ž®¢« Ł 3÷Iõ®maŪ”Ņ^éšē…ÄwCL˜īehćE$ø=ÉōÅ} į5“S† J{7H‚|ĄĖx9ż*,iĶ”åZöŪmmm®-%vrdē¶ĮžUµ©—DÉ›•%•AĪßš¤üŠSīyīāk­/UYžÉ$ņ³ˆ˜g‚3Į?L×gń³Fń·‰|5cˆ$‚÷AxÖźŚ3.ę=ŗą qZF,™#å¼)®x~Š&4Œ· ZHP߯¦kÓžŻėŽMJŅ[É ‚įƒKL°ė‘õ®˜>†3ōö™Æfé‘Ļ?ʧ¼Ę7WUe¦źŸōėŒÜĖ>™NZrr8ģ 7#$¬|5š·KŌmž.ÜéÖ}vĀÖźā„·ĘsóŅ·ZDń޳u”ź°E§Ļö§·ĖŒ|Šq»})Å]Ü茎: ųßĆŽ%ƒRŅÆg’Ž B†E$“aø…}ć-.ūĒWń[jSǬŲó,rõƒŁ@nŖÜą¾2ĮāMA_¾Ōc’éd„MĄ%š¼)Ų šß ^źž'ńæ†|µĶÅö”t"£łJ…äž›F±–—?]4ƇŚ~ØčšŖcß!Hs€xĻ„p’bŌ¾ų“Jšfq7‘ł’I Ž \n½Č§ t2›-čU‡ŠäŃ^iä–h%VŻ»qŌóŚ½»Åš…‡,•/ļm^e[Ģn<[ņō8jHł‹Å_¼.öž!×Uv…„Āń8>ƒ­nü>šõ€ųkaįēHõ[7fq.rįĒ|õĒ=+«hDd|5ń³į*h/½6z•£XKŸĖĄÜ õ÷é_!ėv3Y=Ų:;ēåīe›ĒĢ„”éV×ÓĮnJEtĻņ|e½«źßŁÓÄĻįżz_ ^ŽZŚŚ\’%ÜÄķmĆō5·6–73ļŪy [–B•ˆ#°®†Źž[yXYŃĮČõJę©—ĖcęÆŚ'H“K[oF÷D ŻØ^AcŒŸ__ξÕ®üÉå·a÷IžMrÓ¦k†—€Kiqqies-ž‘(-͌ĢdŒuiśųRę-ń,ļ#A)Į G8«ĀŌN)/O»C9&ałh¬{7qSFĘ/ŗ·×ė¶;œĶm}ØČ«ŽwzŅę#ŗ«£·‘[’ō(M°1ęu©`ŗ/°1*ąńĒoZ2čiłŃ®L 2ž0N3[Ö/WI@{gįź*f“:`ō?}?ąßOŪe>~Ń>%ż”|yØŲX|7ń ó4y%F,ļ”sņ’ü`u,«ōÆīSOo“Y:N7ŽĮū·Ē;Ēf Žk ±Ń3¤åõK\Äéņȧš5šoķ į­CO‹Gń¶kējZt†+¤nDÖĶĮ>ųėƒé^uHźľ=šĘ‘āĶ?SŃXu^i±° Ę d>Ä {ń_Č'ķ‘šDü#ų«&± Ķ†«Ļ0…¤BPL[%G”ć5„'©‹gȲyń:«©Wžw«‰:łr4ģĢ€Ļ$īG+efW™OäqU.Ū|ą»ļ—Æ·Šī »©Ź©Ē”éQ-£Ž8F9Ķ0%R_6 ¦m’ā6MŖ’…Į ŅčCjŽ $øūĚŲT*»7x÷¤×CxK”öüßö”Õ’eƏV× w.›į ]ŅŚõćiłfÄtČn3ļ_ŽßĮ挎 ńO‚ōŸŠļöWҵō‡Jń0R6ZO"œ‚xŽv’SXŌŽ‡Ld~‚Xi%„²yˆņE“«ƒń‘Ē׌UkāŚN ‰dŒ‘Kó¹ĄnæĪøj-MŸų.?ģy§ülų%wūHčz,w*šķ‹Xų†Ty³Ygä˜z”'<’ >•ü.ė:=ę•«Ė£]"[<+óną•ž1ŌŠŹ;“K‘ĢXź³é—”£FTß·…Īīzפ.„qxŽk9‘ńĘOD&w^Ö`¹‰!ŌI“ ĮgÆdš6ƒ6‘}7Š/žĻ5ŠĀŪ!#½k J×gDcsNń’öwÄ+ūgKa,ģ³B¤įš;ŽœWčw‡um?Y³³æµž+ˆ¤yŚ8R{WNį1ÄĘÖ±±wd†S łŌńŒ×E¤ģŪiŁÜģįzķŽĒžćŌķō/Ūg,ł”.~Sļ]­Ę¹§\E§ŻČŅĒw— OąŽ?i–sŗĘ˜ŗĘ„»m<æiAŠ>7ūZäõ+Ó4wzuÕ¤MĮVŽsź(㑵ΛŖ7’YdÆ 5ī ģķu ŲĶéŠEW`nōļ|YšŲjZ­Ōśs¤6Īū•Bš«ķ^[⟠ŻxCR¶ŅīÕ”ó£ó‘óWÓėLWģihžÕuĖ&kIĢ2CŒśuļķ\µõžÆ£_Icte“–cm!r—4mRÖĀhīŗƒw( Vlś®Æ©“j"łņĄńøv £ŠńmæŲīķņO™“£5ܑ]@¬[ĢķŸį­#;žļ†•¤hļ«iw·–ś¬öćĶ‘'ł×+įOͧų•µY{¹%ŒFYŲü€g‘ŒQ(é «.«”j·ÉŻÄr£Œ²±Į„Õ|?į¼Ś¾›§ŁOpėņ8Į ėÅf„\Ś—i$Ed‹zsŅ«éŠÄÖ9²Į£9ĻJz‰¤µÕOÕ­-’+”ŽV“)ĻēM“Ó¾Éw ü‚C(\“ųP8®‡_s­ŲjPŪYj4œ>°åk#ÅŽ‚8—ū6ńnć'*Ųęƒ^CĻn4f†(ŁKÉ.0Ź=}k^;¶±RźĆrīZ ”lq7×E³dŠdˆōÆcųāŪ=Fł“ŲB]y^do·ŒŒę€‹¶‡ ź÷gĀ‚3‡`>ę¼ŗļĆöĆP¹»’Żc—¹n¤ŠS‘£o„G#¤Ģš0ĄĒ…e’ĀofĢEÄ^Füķ+÷ERˆ)\­}«iš-ņĘ·°Ko½P08žŲ¬M °‹Ø‹3Jž˜ÜYF’†µ{+»hā–ęd*I2w#¶k«–ūKKFŅaLlP/;ˆč*l\nxŽ”}ÕĖ»"[¶v®„TMBśÜmd;°O‘\ś×W{Č4ęlõ®“J¹“Äk,GĶĪŅq‘ŠæS¹ŅtŻ2;ń,fNr„u:Ō2yv(Į@w#փX»™©vń4Źźn•±¦źV‘!o9WŒĆ½5ĒE8½ŽĘŗ“vK5Ņ­Ė¾ĘP:Z­įoŪM§[ź×w« Ąr\‚ƒ·ćZ{>ęŠČõ‚儎2Z“¾=}k„O’b谅ß:®/\ŒSäEØIw5„B4sN¤‘ųcśšņVĄK¾XŲy ćŽ©™E[ īįåf…’0”< ŗ<7u½e•—ĄL}ļzĶ®ƒH¹żš`·iC4HŒę²ŹFWk™dsŖAū¢±i£¢:ōż+}ɂ ēžµ¹.‰ J…Ųo'w©:"ģC.’]Tłį€å4@³,QŪ +`āƒdČõ;x"”Ą²‰lvĶ?G·[ĘhI’,zu Ś”µqo$·‚HՙqĘ;W]›;X"łRńÓµD΄Չu Ū 2ĘIƒęM8éœW_]Ē$Ė,X¼{zČŠuxķ"c8Y21’ׯų„ńSJ‹Āš­†—4’]’Ė2dĢ:YUv;pŌ®|Ÿš’įüŽ0ÕīuŸ[Żi0ǵŽ%ä^7ČöōÆ«­“Ø£ŠŚ$Tµ…@]Ŗ=+ē±uģ¦F~ŽY’’hW«büŌ‘_=eęœ{i°xÕc*$ˆńĒoz«¤io§ŻO9kvrČIädōÆ"RŌž£ ŗ•¼HŸdŌcøŲ–P>˜®«C¾ŽāĪT@ v¬ŌJ3±ĢųƒÄŠĒØĻk‰åFØ[‰8ńÆØ“Łõ ü?“—U±‚9¹RcäŒp3é]4õ9+āģ}7į’ ųāÆĀŻ/x?GŌ¢¾¶Ł;¤AeRA Ž£#ņÆŹļŚóözńģ©©é>Š5Kæ|ÕīVß{!i4iŪ¢JŗyžŠéhyÓÅœĘ‰"x·D6VŃż¢9ćP»OŽĻLV…µŁü®jߣŗ+&ī6łH ÜūÖ2§©ćęSö”„ īŽsZńšh^9ī‚ēTšŻķ¹c;Š·B8?ē­~¼~Ć:ģž•¢jV0Om,ŅÜĘēÉ>é{?xłZ§õt„ŗżÉĻŪ!t}/Vų‘ć}2ĪŻ Ōµņ¦Æ>¾"“K%“ÉnUfĪēÉśuüėŽ¢&)õ5¢.øŲÓÆ.a‰÷Ÿ1äśW$Š3¤¼ˆ«ŖņĪ’F­*ØUĒZĒvh¤ö.iš›ŁÜC{k6É#‘X HÆmų™ćū?‰~1‡Åv:kiNl!¶ ;§ńp?„j•ćs™]ZkhćŲū¹lõéŸ ~)ųūįŒž$›įĒÄ/|>øÖ#Hõģ«ĆŽŖĢź##šč…MnŽLĻ*ĆćpóĀāą§NjĪ-]4TT’„‡R²“yŒR“ƒ;Y‰å˜ś’rk›ńŽā ź‹cā_°Hä›w$‘2õČ8ėW½ĻBŸ,ŠŃ »’D·‘%Ž}ĆųOC]¶įKĶdióÜ©Óō©¦5̃ ¹=sķ֔K©YXÉŃōķ=kÄ~’ā{K–'ˆåd™}¹¬æiŚĻĀ/é:/‰“Ų›xļ­f—kÅs=õ­éźxx¹Āw„/“?ŚĮŽ.Óķž(ų/ĮśeƆJ%•Š€¬{&ĄēhķĻ_q_ÅŖĶšÖćL²{éotė–&usŸ²Éž˜=»×w-õ?–³ŹiŠ–ńm}ÄŽ šÄ:„—zž–‰; ˆSģ»crķ?šÖæM’aļ‹ĒKńG…¼9āFO²ļņ­s!ڤ 'ד]Ń­JW¹ūͬų_Lń/ĮĻ‹×Wv‘µÄZ1–×qā6 8üzWęŠõt]{Ą—a­¾Ńjņ¶Ó÷Xzzt®ŗqčyŽĻV}łšóÄÖ^?š4ś­?öw™äįN„p_±ĻÅ;Ÿƒæµ—Əč"š‹ä>øY^8̌|§t`CJ‘ŽCéŒNĻW‚Ɔ„.YJIömhžGŃß¾ų?įGķEyš«į׍-¾KāČ¢:5¦§oęŚ[‰WH®Żį”.xČ×¼žĖ²ē‹’coˆ’¼kć}ćā}īŲõ½ 2XT1i#ū+0e9Ē+ž|Ö¼¶?šøŸÄ™UįŹ4«¶Ŗb©µĶ„Æ)}ļČüĄų„ńCāoĒĻx÷TZńN™įV¹šĖGŗŻ¶Ēę'{D~ćZżw’‚ržÓ_æhOŽé¾&šgö†<9g…¾«,l²jņ ØŪŃ0”9+ķžµ«½‘š~&QĮÓČ0Ų sÓ“›][Zæžēą?ü÷ÄćTż¾><Žż²Ś’O²²Ņ4ųš' °„Ŗ—CŽį‹f¾‹QŽåX‹yDgb¼źó÷µ?Óļ£ĪÓą¼¶-[÷QżK1yM‚OĶüŖĢXb˚㌮~įīšv±ØĮŪ’Mm4{ī>Õ¬7<ÜQóGĒ9Éń…½äĻoms¤y0JxŌ(ėź1śWźŸü‡ā<~2ųKwįÆ\/ö攢;izµĪ9?Cł×U3óŽ!ĆÉĀrCķŪ£ąŽ›yūŻüuž8­õÆ ėŠN’neg¶’Xāu8ą‚fč}+ł‰Ōī.-ž!kWÆ$æé†Į8S‘Ūņ¬1вŠņ<#ā(ftq1ü¹ŖįóQŒæöė¹e3=¼xP§8«e™™ `dńŠ×…7ļXż²š±»jŸežBäē¦+Åŗ%®»įŃöØÕ®-Īų„#˜GµѳĄļąžĪ—O–Ū2ؓcķsĘkÓģÆ7Ä­‚:“њ–¶.4ŪT½žµŃŚ* Ϭ]ĖNĘüQ£é^mćkić{mf!#l>\ŪGēJµ'°94ūó:¬,F@õ5ŁY»DŖ²Ż½Ķ>vpbźŁ£ą‡Ö%Öķæį*ŅŁlbSq²/Ż*¤äztė_1ų¦ö’ćæÄ’xĆWÖZ^¦4“„Aõć#'ēųm¶~o›ę/Ū”ŁĶ«ü ż™uøš'>-ų›C-”Œ©†ć$žzó_«~ ųĄŸ<9¤ź:Õ復a{oå© æģąŒ`ŠŽµŁ }Ļń4–"j¬õ¶ĒĢ>2š¦„įbįL‚XarŠĖŻŗŸ„fģūR«Ž=Ć8QҊ”;yƒiĀ'‚ž×ZE½ßģć¬fŅ6½MVÕRų#-“Å|Mį¶ih–ņ1hĄU|ó\iŪsŌ¦µŠśfĒÅ:ę±eg­©\Ž„ŗķ€Čä˜Ē ®ā†“iZ­öŸ]Īó”a²;ŸZó'3¾Œģp%“Āš_…|GŖ·Ł¬Ė›k–S˜³čqŠœÖMĻƁ|†ĀŹvŗ“pTełCõĻš×õĪT{WģQ©žĢ‹_iæĆØ’nĪ?³%Ö|®NRžŅīKig "©łXŁ×o{o{¢Mc6›¬C«YĖ~xœu~¦°å¶†Ī¢d6^%æ°ŗ!Sw9ä+lųćUŠH|«D‘wœōśŌ9teDĆŃīõ’jälP[ĖhbŠ’}\gæµ]¶¼Ōį†Yį!ī¢ 'fŲŁ³}ć-w_[k;ČU`v£ pF¾%[„Y-&‘ŌgļV‘Ģ'UGsŠ>ü/ų­ūAė2hŸ ōļ ®ŗ!ó…¶„{䙓 |„Ļ?…{‰?ąž_µ·„¬†»ńĆV>šŹÜļ.¬5¹{x Į‘Tc5×O ڹįb8§J²ĆŌ¦öó=^/Ųö[M LÕōoŪÅZ¦µü~éļdŒ\ž€€®>¦¾jÕfĻ_k¾%Óü tŽ$Ó”żŠāD<‹Ų‘ÓšŚx;[—S yRÆ?µ‡%›K[Żt~Wģ|Ÿ§x›Äś^©®ųgĘh ±øk[‹i†ē±ėšū öjŌ¾ź:ķ߇ž'µīÆ©ĪøÓ¢&"Ē?+‘ߊ˜Ó³³91xÉÉYó⟌ž=š×ˆ‡ƒ’=’Į¶Ŗbµ·–ŃYćļ{V7‚āÓ5­m Z~Ÿ<Ļ(yQe9ÉÅuӑāʂ[æń×RŗŅu_Ėomac ² !D>Ńč;ąų ģt^±”čz­Į]Ķü!ąóŒ‘]p‰K•+µ x‡Įņ®© ÜŻÅmǘń0G@G~õÄ|PÖo>0G§X|G½mVĘŒ ļcĒ īz{ńMÓŠoNMI­O‡Æg­ŻXų ŹĆÅz$1“mäI‰˜yJåō­R÷JŌ.4mJŅėIÕmęņnmēd†AŁ…rU„Ųč§M#Õ-R¤‘.~lÆ_šŖŽ}= ķ™Y źĄu¬éĆ[3²'=ćGašēĒWJŖŅ &`¹ź¼uµųƒį„‘2ܙ·»”~x5ķąō?‘~–4ķ‡ĄĖΧåņ:Łōū‹“›“iՈŚO_ξ„š„ō›Ė[]GYkiUÓ Ä¾ė^ż9ŸÄuٳ/…¼ācRxķį±XSĢTQ•8īļŽ§“Ć–zņé±ZøŚŒFaœ€żUÓsŹŖĻØb𦧧i >ÖŅE Ŗģ1ē¦j֙NJŪE‘¾ĻpŅ©O5Ą CۊŚ1źxÕŃśįŚÅį©5-Bss½±@‘8 ™®ZĀõݦŽw+qŽp*Ļ.²GQÅÅ̵҂€uĒ5Ćų«D¹æ‚o±\„‘”ąc%O­3’R±ŅxB“} Ķ{n.¤ŽFŅ[éõŚZčö¶ø»µŒ<ÜTœō­"“9¤ś#žÄGSצ·µ·[Ć÷šOźjųŗ(Vm6Īź?*AņČæ{õ«ŠģG!ĮųgN՞"a%­w‚sœē&‹½éf»h-Ök‚sČé[FżAŝg‚,õæ&žžā`"!ēļZŽ“›X¹Ö#½µÖ“ū¶Ÿlę”ßCžKSn &ĪŻ™¤;bfĖēųAÆŌķµH5ė»>īK1d!`'ó¬ŒäLŅ“}Śt·—iē•ČÜ9嗭x5UŽńJ[giĒLRJĒ<ā=mō˜uw²±¹ią-Ćg­w¶v‰ 菮PqLĵ©YJö·Ŗ%›ļŠęķ˜*PCT`_^¶ł!eŲŁēÜVO•,xt—®}( ēµyfŗQG9øĪ+ź†? ōŻ3ĆöZ·Ū¢{›’ŅI“‚T›æ_ĄS £'ĘśÅīØCo§µŃNE]^:·šTŗ<–zę­n—r£-ŗżę$zW–ų+]Š4tŽŠ!Ž-˜Ść FqšéL¤Ž»āŅ5Ķ)ŽöÄØ€6#?\aˆīx&…įŸĖ©;ŚŻŸ“‡Ėī•+šņéb_TµŅn…»Č„÷^ÕŅų'TÕ.õ»q‹iūwĄĶÜäš)3Ōl®ü)„ŻIkÖßi="—ē©?­q߆¬®ī–]&X­1&d\n.'œŌJČHf³¤XĖ6*3ģƂ0TśW‘-'QaScü=« ½ #.ē¤éóÉ C"Ū·Łöģ'±«ļh7DĄ/]¾†±sœ»ƒūFe–NnåHą {U§‚įጻØEž 0)¢NkwŲI>zę¢Ž<8WVXńõ”ī#J;ø j°B›”ņĆśŌ]±ĖHŽqÜtœŃJ&ž‡qHÓ8 †ĻJźµ/YJl­”‰7ņZFėJåkR£JĻ7ŚT¼r*ɂFNW%°½"I”ĒryĮšp‘¬žJ0U3ō«0A 2|ųā|ēŖfFNÆ<2\“6é$  ÄćX‘I1pÕåFx-ō£›”“V…öŠļą‰dˆˆĮ³IĖø¾Ł”‡'Ŗʱ%ō·mŚSÉOo™‰Ŗ°Ē§“Žo‹'ū=Ņš%ŁĻ]}–%•ä#h$óĒć\¦«rģ‡ģųd>½ėxłģĢ(£e9ppzQ$QļŒ;ya˜.OLš«‹Łµ„¦»JĀ[§8āŗ¼Į ¹²ļ<Č)ļY¹\č2 +[ń/ƒ/®Ī—­Om0;XIC"öČØī[SńDĻ6³Ø^ßĢĒĢv‘Ėē¶jetF=Ź §ÜŪŻI ¬‚ułh ä;ā¾ģųū$ücų±m¦_käų3Į Øķuy Dš>ū ź}«MHż.š_Į_ |)µx>ų!5}R6XåńÄaq՗<é]ż¦™’½Åõę³}?‹ui¢bŠƒ ·`¶—5'<Æs*|gā D]k%tQV8€Į)čßLvÆ{še·… •ģō-6éāS‹‹œ½Ž¾Õ¢“Ų»š~!“KÓ \^·Ū-‰("ĪKĆ錯ÕÜ „Au‹6HƒeAܹčżk¦&S<ƒĘ_õ› SOšæ‡4{ŪĖķ˜3*sē‚OćVdƒGŠą·¼øŌ×RŌn³#[Äæ<2cųŽ+]ŒłQ„įkŁ|Ueāßų÷ÄsŚińfŪO°Ž1I >ÜvÆ ÕĒ•,2iČóĄ³ķ‘÷`Fy’ėUĒqXÆ®ų’į§Ā=&÷Ä&Ō£»Ū"‡VˆsŪcŠü’ų’ūjx—ā—ŗ†ēEšœSH‘"1S '’ķé[Ó§q)u??ÆuS+Č×O3æŹKÅ¾§­bĻ/– Ä™võé]Qˆsd Ēk 7öĮ§Hā)„eC'ņ¢NĘR˜Éäک‘Å$p£ģG?)<Ö-œógōį+7^žÖ9b1Oo&ųc| /9 ž?­{ÅCąļŪZi‹ĶvķŌ,”Dǧ\ŸŹ»*ja~|Ł[kwzÄ&ķ„•Ģ„‰•ć=ūWÓ_ >^Kājā ĖP’ÄŽ7ž%UēŽĄž5*7 JĒYńCĘz‡üA„éQĖqp¾V%“¼–Q‚¾ŸJņ›_‰WÖ÷SɧN¢ŁāhÖ`žēō£Ł)2×o/Æ5{ˆ¦»n2p?óéo5øµ‹‹Čnļ®ķ\!łWéPįcŖ™°ÖŗĶĆBŠA^B#~üĆ®=«éoų"ūRÓ|=ēźWV¶†،eӎŸLę§c¢ŻOžEŗæ¾Ō“‹U’Yķub§ O§”āŗ{‡e®ÜĆ38høóĒ=1ź84ķ/I½ń”7ˆµ= “­mœÉ$F=­ lä}:ÕĘV-Ó=Īo}Š}:kæ#Xަ5r9ė]ŒÖÆ‡.uū 7½Ž2«üF©Õ'ŁŲłw[šGÅ{½B’ÅZübĖĆ7n^4ŻøD£§ŠšóQŌ>ųæGń֝t“j:s™ r’ēØ"³ēGB’ZiAūXj>(Ņō/XZŧkép^õ¤åPŹ;cĘĖńņ÷ĘFÆā‰S°¾Xķ~6Ū°įH#ņüŖāģe-O ō=[Nš¾³aį­ę}Sķņ¼īä`A'Rēr?:ō›«ų‰”ßiwl ø«>×f ü«u3†p¾ĒŽüHń½æ…ŸCšÖ¹c,vÓ7Łdš4,¤“»ń8¬ĶOß~‹k‹H§Ō¼+,ĀM²ē1‡łOL`ōėYĶu.œlŽ#ö…še굹Ōų˜—ÓÅ „Š[[a‚£ūŲü+óĖU¶I^gĮcu?_zäHÖē-$pĀö„‰šįz1”õ­­;ÄWŚf·§jńĢčš¾łŸ  +h›F]OÕ߇ž-xjĖS[ȧ¹(‚FTĒĶļų õf••£\ƃŠ™¤C•„Õō;_i—EōŠĮc:•såī#Ž?S_–¾>š‰šēˆõ I›Ķ–]wlĮPNG_lV)Xq—CŽŗ•¦Óž4Š ČC Æ澲ųM¬[|Bųw©ü;½ūzĄ3ŁŹ$9d#$/½3®›ÓPųńoÄæ³Ē‡?¼1ks&·¢jp‹“Y6,ŠnċīdWś!xCāē†hoƒŸ~8ų:e}VÓā’`Ż„z>;õÜš›:u:Ļų”“k»I™öEęa³üB½ūÄ?bńŒ°å.me\ēĶrŌ@Ņ?ž’ų-wģYuńsąHż žčÜ|Lš$½tCę_i\ļS½µAlī±ļĻń=®ŚB“Ļ<3 t÷bŃd“‚=³Ā±”4¤ą½~’é˜Ļchw¦jbČŹ@±ŌW¤rɕR]¹ƒ(Ļ„HĄ2“Č^¹ėE>ęNC#0I’.b¢–6g/sĄ­FÅ«3 ó  CĻzŚ?tm’ƒh>…†Ōõ­Qš÷Š<19°×tŪū{ø®P~ņŽ žĪæŅWž ‰ū^é¶oģ›šŪć=„Å©ń$Vė„ųŠŻ>UĢ!b:Œ=}3JWpåķś’Hč‹>ģÕ§ŻMo“*õR;טxēDµŌ“ād“Šź=†)ć#;”‚:~5ęTF‡åwŒ¼+gį-c[š¢BÉ2:]¤|ŒÄ•B•~A’ĮC¾Ų|Uš£{o„my¦3Y•=„źØÉSŽd{Ō'c9®§óym=•厓ØŪĻk¬Y1†xęĘK2>æÖ²DƱƒŖ¬ ć»¢rŌ“)@×2"—‚HĻQŠzFˆH-¹‡'­t£.„ʽY01ŲvØßœsA ĘM¢VŽ>^G½>S‘.UĘ#” d¶é¶pĆ(Sž•ad“»$įNµŃó,ˆEŌ1y™ ~0ĖČ9ŽkśČ’‚%žÖZ'ÄÆß.$Ō'H[AÖMŚlóFsĆ8A8Üy¬ēŲ鉿Oü/ń½åׇ®¼?©ČÄz [ ĄO/ā9>„cžœŠō^ņźņk%§·dómå=3ÜWDnž†~Æ„ézõ–”įļŲŪj>ÕķŸMÕm'Œ4nŽ„~`xĒ'9횒=ų*‡ģa«žŹß“'Œü,,n4ķEö“sßž—+±ē)Ź7”^ćÉ{4J?(®āh”Č€:“Õ{Zµk$QF–ģŖŁägŒóZ–§i§_”¹šwpAÆØ¼ āa¬éSč÷[<؟”,øŻYŹ&ź]‹:±%¾„ ¬śĪv(ū¹ōÆDų晦ūw†.ck³„aó(éĻå[R} Ŗź}ж²4Vr_%’ˆ÷Õ³­/‘„Ūł,§yŚ@ļ]p}&`XģćnÓ ‰œµts^É:¦ŅZ?/oά,XųōŻÆ#‡Ub>a‘Xŗž°ŚŽ©°TVĮŽ;ÓHĶĢmꐦÓJwF1‚;ń^×įŹ5±øDņ"b ķ<žzŠŠ¹™ļÖ÷śwh—‚3Ö¼?ć~œž"³³Õmć–ÖöɑPEÖXóČ>¼JFV×穯kšä^—q¹M—L¹Uļ_\Pfuŗ†§„ÜZ\Xjßč±(/éÕXGėŠóŻn×Ět „Ķ=µō2™óøI†ō÷˜Ž×Ć <ČÅԊ‡nļUüq®iŚ<)l›©§`„Õ°"ąV¼ÖF“ĻøÓ|ÉQ¾ŹŽŠį÷ž}k©AåŖŁ)"Œ”¹©®ęųé÷ /ņ±Żō=éIhoRĘū̹·™YŃ÷rsŠ÷TƒBV­-Ü7Ņ®’pÖ&Öw¢ŚŁų~[ŪĄ`•›äŁŽ¼NńV𤖸g…_’Ė÷‡±¤mVŌ/`—Py! Ž0{WA¦ŻĘK)M…FI6¹šŽ‚¦ÖF†YO–X.HÆ!š…ęń\i¬ųŽĪŪū-fó ^`tGž£^~&½ŲüąYgłŻ,_ŗ^õGŚ ×ł·h®ĶßkŸFXé:Ÿ‡›ģkkkt³Ŗˆ9dĮē>Ü~u.imsuµÖp# Ķ|ķyÜ’Z0øhS„iĮZ)Y%²Hõ/‰^µų¬hś|¬¾›}d/m§Œt\ć č¼~ėZ·¶ŗ €Hąō«ŽHõ!IJ±Ö">|h%PJu®6 5żģI 8;·a“#ŠˆÄU‘ć>.ńbĆ{iāŁJƒX€Ż.ŽĀ\ć·5ūCūTAh>ü:Ō<=²]NęŅ+ŖŸ3FUIćčk²‘ąckŁÆR—ģĮā—Ō|%¤é×3Å9Mȧ¦Žzų ś£ćĀķāļģ’ń‹į–µ ɧ_hW1de”*ėīC’× Ž(ÕÖĒókš^śņ-N°šōˆG–\±ĻŹJ’J÷¤š~«ć_‰Ņę¼ģõYŚyę~ćæ¹•g(ō&JéŸ*ų§ą÷Åo„'ńµĀAuįŪMbH šŒŠcc•ąņ8==«ōöVųŻ«|8Šž xm]/?µ­)lžąķ ćė’qō¬„+FķceŌņ’ˆŚ<~2еo ß:»]ł“G‘ŹHI |ąWē—‰fÕ?³cšŽµ Ń^é²1ːTƒŌ{~¦Šuu6Ͱ.®‡ėWü“ö”מj‰ą-Zżµß k™¾[Fīƒ××ķŠ ŗ°Ó“ÆE®—}–œšąq]ŌźÜņ£¤mV°Šü%ā?ĀL|-Øé–²ObźŹ<ŁĀüØsŌ˜Ē9ÆēkĘÖŗŽ­ćļxļY·¶m{V¼–śžhĄI²Ič*jŌŠūL‡ Üå6»#µŅ'•,£_9€äž‚·Rw†%†+Ī©.Ēé4ičMŪ.ąA õŖš®œž+Ó'Ó„9Ÿ-Ć`©ģAõ¬Üō*p±ÉEiā'E[Mbo¶…ćĢÜK0µą:õÜĒ·–É*—Xb™‚ō³ĒįŠå©.§Ž¹/ßb¹;WŠ ”{o=Ųi V‘ń„ą\s}NꝞ‘ØMĒĄ?ZоšF©«Ł ±½‹O|ä™paŽ•*&©=ŠZx#[‰a‰f“šP’NŠĒ׌Æ/‡źU-£; ŸŁĒ[š†Ÿ©ųŪEÖīŒp\a­Üī 6H'Žŗę¼ĆāäŽ#ų”]\kŅżÆZÓģV;v j©żkXS± p›R]+ĄÕWBФń_Š4Ż;B½ŽŹmJ衊ŻfŠ™>ēētšR8³æšöµÆų{WŽXõ:śKkˆ@e õ8õ澋ųU®Aa©hBck2_ĀPē§Ģ3ĄšqŠöšpēv?§†^,_~Ļ?a3Ķw%¦Ž— (ź"S—-ģ5łūń*ēK據>„§*H™·/ ©ŻĒü»)˱ΰ×rG„ü4ńóiZl²0ņÖXü¶ē‡ć©5;kßųóD˜Cā=*žBŹLdoF 3ķÅvS‘¾ cō/öīń>ūC~̟³§ķWį䰏ÄZvؚ~®lg.śkJ0ĄŹģ™€< ėÖ¾ńż’jėŸ^ ¼šg.ų™ GwH’¼Õ-ś ńŻø|ƒźOb·SųēŽx+ƒkф_>_^j7ÖNI®Ś8Ī2nÖ“o±ŲžŅß²t“Ļųƒį”Św„~"jvoi~žXHµ„#LGG’oóé_‘šTŚRż–~~Ģ?g’Š’~-é²Ć§ėŗ&‘>Ė•€Ū.ł'QÉĆ0ŻĆy™ćŽz±QÕŠxeJyŽq‚Źj®e)Å?š­žä~ųƒXžŁ¹¼Ö5Iī5zöFžžīw/5ÜģrĻ#I$šē Üäl;WĻÖzŲ’n8s &žš“`”Rģ’²6!f‹Ķi@„å] •=j)ŸUŽ’ŚćåTŒs[öžTūł˜Ē±ĮˆG%ć čž.ŃLJõ«x§ h܏ž,’tö§|ń·ģćā ō_ŻMįvŌ­Ę¢ļ“äŪ4Ŗœ š¤žUn­ĘįŌį(>§ōA’3ųēš7āģiyš/ąo<#āaā&“2&•r“-•”N³”©$3ŠsÉē5ü™ė:D‹ØĶŲßqÅC°ĮČć5†6®¶OCłėč©Ć™¦U’bs Õ±&ÓѦю¾®/åc¬ŠēĖ‚20$w®‹G½i=kĖoSś¾MīŃāhϘƒĶĪU½+”YŹéZ„3•ÓūP÷:œ§ŗ¶Óī®ÖFóąó7€OŻÕč:q²ø“óa”ą Ņ1JĢčm¬ ŪĮnū ž3]\Z4ŚF©™Ŗlā@’»WŌUB,ә/Šll4ĶNę×JŌV°B<©”mÜī=k¹’)-gŪĖ…×k‚3šķÆJ1©(ĮŻ&ģūł™ŹzCu¶:ŽÕ#ĖĪZśŪį€ķµ[×īŃÆ<¬aAéÖ¢1ī|ĘyŒp§hīu^7ńķŽ‘ŻŗNm`Kiar˜„`~uųØju?ł×o¦Ė5ä 㔤’)cŽ˜Ķo‡ęˆJĪżNcĘZœ÷wžŌķcÅüE;1ÜӀ$šū×öIż gų~Ė”źÖ—ø!LQŸžŻ³’Ć=³Ķo ē*-h~ŗųĒŚGžēG»† fŚT’Fi(>¾ƒ„t÷æ “µ°:¦™ ’x‰g…Fv§­v©#é0RqI žÕz¶ŸØųR?Ach‰u}ĶŹķ ÄS8ŪõÆĻŪX­¬o~ʁc9Ś<Žk‹cč);«Ķ¢FŠ›Ił»{ÖŪ,K–$näOsŗ9Ÿ<2čÓUŒ HążkCĄÖ1Ż=„³#“rļ'|§¹ś‘V=‘> ²OćÆi‹•Õ”8žl€ēż~ɟō]_Į?š„xš“#Ę"v\0CŒd]Ō‘ó”\ ā·Vqę’µ7Ā}GCšV«āæ i©5¼7]—‚«OL׎ü×$‚Ż4ŁŹģY²\’n£ņ§V‘ė`ń.T®Ž§å’ķO¤EįŚWĘVA8®”Žxö}Ę£ßšĒŃ<=i: ™OžµęŌV=śu ūm2Ģī-mRvżŚÓO YJSkƒųW9č@ćaųgq„j·:փ<¶”Ų—[“Ōž5OL·Yąø„E/˜U·wØöe³JMĄįaƒ1g'½Jš‡õ +Ū]JĆuݰ†`Ncm§wēµŁž&:żœ~jž"Óµ˜ąŅ…„9óÉ]®¤i¾²¼›ĆŚ®“Īę‹{ōÅzŸĆ=`]šŌŽtä4oč;W„*Q±ÕN»ZÜüG’‚šųsNšæĒ­PŃŁj¦˜—eAłYxł±Ó‚+”ų¶šEäņ%Ę ó©Įį“’ą«HīUćŌśĄh’ė¾!“’bĻ,ŒTąē}±šæįž—¤ŪY¦™¦Ś’jHw4‡—‘½+:TŽõćŲóļŚcJŌ”ɝpś…•ŽeUN±{~&½kįž½¢ų³Āś]īœ±Æ¢Œ®0ėĮ®ŚtŻ*X›ģzüQ\ĘŃC£ 0õņ7‰4ūYÆuk}6ÜĶ*–ŪpOŅ™ŪJ¤¬ŽOĀŚ÷…n“Q“¶¹‚ę3øĘ F#ŗē޹’ŪąļĆļč^ ųךs[»_Gū½{FœęY®K9e9õČ>¢¹å°ńU*ÅĘTÕÕõō×Sęźv÷v19»V;qĻvō>ŸJķ`qqnŹŅcžµĶmObƒŅē'¬Z&Æa¬é)?Ł#šŅh™Źn »8ü+ń k+½[ÕtŁÖ'\“ "Že$vćéįe«Gó'ŅĆ/¾Q†Å'šŌq·ų¢ßžŪųžūį4ėŲ^˜į„zƒŲ~*¾Ÿ¤]ė·7Ö¶wRéŠĀū >å/ōōś×»DžŖ›6„k]'OM)I‘¶»–Éa]Ć_Ų]kVš|n³$­”g85ŪLóŖÅŸd§ˆ/ ‰ bWäH£…w5 {F»Ü°¼GqRƒ zZŽ2<ŠģūRŹél +³Å żāćŒW}¦Zioqs§°F›,@čŅ«›SĖŖC&¹öC!ŠFŪ˃ŽjŽƒ®E}½dGū@ūTqKs¶ÓoŒ-q ³chĆ%³Œ5s—$µ[&ĪŒąŖ±[ÅhIĒé³Ü[¼ŽCÅ3 ®AėžæĪ›'…’“„-Ė4å~U=3ž5¼a`4ü!yŖéĶqere“FcŸ”ÆxÓ?įÓōߒ gŌ¦f‘Ī@ōĄķTc-Å·¶²k+čb”Fz×3a`“3̇fOĪqŠĄęl½ō‰fHQXķ-ž>µĶŁŚY>£sexäŪņö>’DŒ®w×6Ėkd vP6óŽā¼×YŠlīŃ÷[Ķ UÜ ŠØ²9ŗg‡.–ź;«X&NGH#žõŪż®śŽŌC >rœ`ŽA÷¦Dē(g $ÅqśõŚŁ#Žē=ūR0›čyüwĻ=̲L]ƒ6'­w6^CBŠōŚŁ(2(ĶoµÄgĖ_+?6G5čv>,žÄµČf…Ūޜ]™¤;[ńjj·&Œņ1X±Įó‰ƒßc—VhxĒCŒŌrč4“'Ņ"y/c»tt屎¾«šGÅ#Jšūčļį’¶Ü–,ew sĒOZJˆłĆėŽ,¾šrń6#•ĘsŠāõ«żAl`”\,±Xꕙ“cbæ‹tū«RÖ×BW8ĄZęļ58ŅS/½vž3Ą>Õj(.¼ó:ʎ6 ć½QĻ©¤hĢéŪ >µmŲø#gĆ©ā©<Ūwžq’1ŌW°’Ć>ß_hcTņ&¶…9xŁG̹ķõ®Yb¬ō:éŠGć/†¶ž¶€é¶7é¼|ܱĪ:jįō _]ź6ʚsϹĄ*GŻ>“£‹¾§BĀžō|+w„éĶrĘ4č `œJĀŽ ewˆF=NrkXÖ”c™ÕķEĀŻ\KøUĖoTūæ•t? ~xßāƳm ü;š¤ž"» ,“/É\õlśrMlĢeō÷ąĻģQ¢x/TKß›ųśfXÓN‡ m wxēҾā“Į^,µŽ-ā.„iįķ"Ź6’ĘŽ?ŻĘ‘įĀõ”£MīC!ń‡‚ä»Ó®ZļQ:M²½Ń²éš·į;XÓty4Ņõ“™U%ó™0·žCu=ėhұ›€—śå—‡omavŚ®§"7“ ‹¹ĄäŠTšę­Ē}§jŽ<øŌ,¬d.”HJŗHøéŪŽzvō­£Ž‡ āŸæ‹5D“Ćŗ$P%¬- ¹†=ŽqųėĒzóXoō;+£5Š[x0hT‘†>ź+NRā¾,ń$śōŗ·ˆķ4­äó&Œæ–Ŗ3ĪÓ_'ü]żµ¬< ·†<¦[jڶÖ[«į ņ°CZ˜­Üü±ńēÅOüDÖnõko4nūÄ3ČŒŽē„yĶŽ§ö’NĀøü±ķ]q‰–ĘCąīupJŸŗG"£—dčw8^ŻjŽy;!¾Ż¾[UļėK*3¶į"…aŸ§µL£s=JĮå³+('©§]Ž€‘_ždŃČž‹>hÖ3Og~!›PŃąŲ.&É@}Oį^[ńU4ż_ā,“ų~šŻčń‡D NS'ņõŻ$īrÓg/­\Ā »Ł½Łp©€T·|ž‚µ|1ć{ŹŌ$ŠYģķc?ß’×P¤oɦ¦ü?µųVń^Ÿq-ž«qĒņA+’ĢHōWξŅ5KķjēHk'–īÕ6Ļ S÷Ę3ų»ō3”S—Ćzą˜Bm$† »‹:Ÿ„^Šōė[BÜjW lą}Oµg$RmŽ§CŖx‚Y ä`UĮžzšūFĖžļ hpkŽ'hnbČR Š»Så$žÄö¬*"œ™ņĒĮ+KüQń§5-Æ<'4Č!·FŚ3ĻŻóü+¬ų’sįŻ*ėOm%$Óå¼ æg crē8ü؄,e;Ÿ/iZ­ÕµŅ‰_äÉ_ŗ}ķš£Ā¾#lŚ•Ė\Ć„\&¼7cņ5­™Qw>¬š©įŻLk9|?§ŽßŹ‘Ü哷>ŽÕµšWĮzoĮw W¬ ģ„ņŪwÆz–ķ©©ł}ńį”ŠüUsk$E“‰ÉāSœäcÓ}룻—QøšÕ¦›¢ßYÄ£ĢåYxžŽq?3²Ń5q §…õĮ%Ģļūœ° r;~uįž:żŸ4Cui ¤¶FrC$ŔsŪµh§›/ĀÅšs½æöæŪģ„W’"‘ćkqŗw®n}-Ś!Xłq烊h‹M|<ńƒ¦ųj=WPԚX`ĘŹJ3×Ū§zć[Ä^3_ cĮör]›Ūµy»yq€y`øé[Œ¢}ā ­Cėń„õ„_#C*ĘéµW?*ė?hļˆzßü"šœ5oąDdŽ5 (éŸ\NR³]N;įūč|;'†u]¬Q†Ł£QźšūŽkóĻāŸ„<-į½zīĆÚŠÕaŠY‚Üž{ŽÄV2ÜŃG”į÷‘.AeVŒs»*ćFė(ß”ųŖ§&‡Ų²÷²Śß†ī$)p ˆ˜(<;÷ƽķžm‡”óNl‰@߆<Éņ±F1žE|ŻūLü!Õµm&é/ ˆ-Ū˜\ éĘzā°”’ÕŽ0“µ>š mßģ÷1ĖŻ‘Œ źüāŻCĀ,Š5‹+8ļ­UI“~Ņ‘’1ō¦mn}5ń[G“m[Nń.• źŖ³FŪ†`“”МWļ‡üwö“6׎+ż‘j7 ¬ųnžŻšE{9ebØsŻNWšĶs{$Ŗ)|æUśżę‰łĻhU‹ÆŻgҲm¼Ų–e;[qÉĄēčGc‘ĘĆH¹ ĮLT±īŖæ*Øōā©.‡<†;C g>“Ó&ā±Ę1)ēņ­UʦI†gd+…$ę› øŽr¢wēīv5F©õF¼m4 ›”³qÜļ_¶’šAĻŪRŁOö”øų'ć[ģ_~ ”²V“÷ki©ņØTž0ۈśąö£Éu:韮ČÓü˜ÄRN.„Ełķ †¬]NŪŹ"淐>ÕēŌ5>-ųłš¦-OEÕüAc;®æ„„ŚŁć'§š#õōÆĪļų"ßĒZLś½³}3QbŠ—?,S*ńĻb~ļćķ\ϱ3ŲžR’n/Sü7ų£q­Zi·vZeŌķēp“€Iō8Å|),ad`Aۜt®ŗ¼u9§¶ĘÉ ŸĪƒU%Ō}5ÓĪnK2lɑ““Ž{Ty ø>08^sZš z8Y×Ē„I,xTl:Š4ʼns\±LąóRĄ(ņ‘ˆaėC6Lµm3E(ĄR¹ļڽūö[ųįØžĪ?<ćĖ-bX|=qt¶ŚĶ½Į/”ģü»ZĪ[ó?ŠągĘ;ųoEų̚żŒśe„éž ’¹oģ$QäÜ܍ŲÉäc§§é·„Ž<;ö}Ājģžu¤ĄäKr>•ĖQjĪ”g_\ŚE!¼Õ-ę"9‘”züµ’‚øžĒößµ_ģĮ®ųĆĆś<§ÅŸŪĶ-¹EĢ·ö$fHN9c€GŖœuÆ:¼­ŅÕ »ē™sm >Žļ’ g’)ćU ĄC‘µ³Üc„sĀö+3n'ŽzÖŃw2‘ÖéIåĮ3ēUÆ[šgŒ”Ņī-”Ų©"–ÜĄņĆ҆IŸMųŅox²;(-ļ-ķD~s\*ę4Qž y·†µ«’|Dń]åŚ}¬o*LIŹwųŃ4śųo]²Ö4½>[Y%eŖŸjī|Č®’¦?*žęŗ"Ģe 3ŲZKNŹŁŁĻłā–ęå!‚[;aę;/ ½®”AŸm¦OsYš°œäõꮯxn(Ö·¹/pqMņj\ø’D¶šy“(7 Ōöž)ŸLŽ;=Æ·ļ}T‹Hķ|;āKénž8³Č:īéZ>)ƒĒvVqŽĒlśc”e|’ÅOOjž=}wyĖÉ Hdžīj1įöTøæ²%īŠ¾Zķ4©ēEA÷ĻAMńvÄZŁēc—phƒ“ŽFšEI$£Ę­($œÅp.”€ÆņqŌPwd.‘q+€Iē5Äx¢Ūģ6ĀrȎ¼Ę®ƒe+«I-ą“—ĻIQĄ?{õj9`c‘×h?jbŻÉķ^É~ß (§iĻ^s^”ŪŁ\ŁĒ( ³H»H?ĆS(Ž2čmé6°ų+NÖ£·…Æ/.Ų6ęĄW!¦XŚév¢5{“”Ü«}< ę—dS÷{sT5= QøŃ’·ķ&‰&Tecó ņӊe¤_²ŌBiņĮ=¼RH@ @Ē>µŸ £²ķĆ1źOOj|ʑ•ŠŌ_jÖlå“ŲØįäž_­{\śv‹yįū)¦šaŖd!L|”@ėŸéH§#‚æŠ`iĢ2“`óĒZܜźļģ³Ücp «‘ڱ7Hčü­É’’Ų-9GĖćøĒoÖ¼7ĆŅų‚éäµC”<ćśŖ$ģnt¦‰u¦Nv&CĘÓZŚd‘¤Žäm˜Æęk&tÅt.­ėؘŽŻ"Ūd`~ķI{ š$†—.d|qÉėš™3tŗy²e‰—Ė'Øļ\ūx‡IÓļNŸ=äBķĒŹ€äšēœķ«= .s’§M]½‘¹¢čZī™"jvŃÜ+d!Ą;N1š×ŸĄŚO‡ōO:xä¶ū:ĘsŒīś~B¼|LŗéæŃĒÊŁW*ųčŚ½mZ¶±HæĻēäg¶—p% …§Č-; ‚y™ą™¢PÓ/N1ŠņdMRCÄVϦ]h7W·oŽbābŪ’6ć±ā¹Ē°Š+ƒpŖFö'µa+õ=(DėģeHŚ7a÷x®†K˜¾É81 .KGn€sڲnĢν=•¼SąōµńŹźW\蚚ļĄ†@G^ ü+ź_~Ņ:»ŚųzĒ^·[ß ŲŲEbžDD“* Ÿń®š2¶ēĒf‘²wčm|ų„¤xgX‚õļƒxnåüåo¹årk÷ZÓO›Kżž|qńæYÓµ?’bɍӠ xef~šÉ>¦½Jś9‰ĶiPå•Gk“—›z$2§į®§cć;M"ĪŃ|?s,ŖŪ.82D䐯kÖ¾)Xé>Ö¼1į »Ł«©Ūy–× J«H:Ŗ7éXT}OR8Č9Ø_sä}O_¹ė>Ō®ī&ø·`’G3’Ģ}ry ż“> ė‰ć›Ēš[Ēoy£<»e3†zŽ@ē”ō®øVÜšŖä³NŖö’æ¦§ĖŗĻĘŻ{ĒŗSGqöm¤Š’®HS銹,·I €·Ś3ÉQÓŽ¢Uō>ļ/ĄØFČÆį’ķ>õÖt¶Ę_Šž½nŚźO.ĢØ ŠĀUz1²±Ńéž^„pm>Ńo ģfŪh8ÅWMFŚÕŚ$““C–†™•®_ˆķŻ&øČp1Ļó^±įÖ>4¾ÖīÕbņ‘|µ9ÜA<ä{\ó<Ŗ’īv:uŗL›ć©¦EökÕeW'ž‚°”nLjŲļt‹č.ÆžĶ:Ūł„_EÜü+Y4hu"ā+ˆDAšŸJpChā—CŒ].AbÅ ŒŖ}óŽE[‚Ż!ÓnŽŻJ0ņcœz}+®š[*ŗg¤~Ļ6?ž*|$š,+ŸĄšvæā[+Q¾¶P$Xe|1ąĄŸZśóž %’ĖńģG¬č¾&ųcć KāĀŻNÜęĻQe†›,`o!”"äq‘Ó¶OTh^-®‡äÜuā½,=˲Ŗń÷1nk›ł\yyz„fåÆŹĒęO‡üOg©)ū5⼫÷6”éZˆæ“PŹbl ŻAĻjĒ›©śÓŃé7ŠO­éWÖP‚XŠ®õ®?Ü|4ńg†ü@KµŠÉęNG?†+¢”ŃćfŁ#õóįĶŽ‘ń{OŠtļjvŗ¦›āe[ # ˜®O õ ƒļšüžųŸį{įÄOü/ńu³ŚxK‘ķ§ŠTŪ¾7MŃČ”R¤ģåәĆæ.6y}Wļ-W„õüŃóO‡t9,ˆV²1@§ ÉĒéŠīu]"RĘėP²·°’„Ī÷Ś\Īæģcł~U<½O“Ķš+‡•¬Ņżc‰ælĻ„?“š2o†’ü5Wz‡š¢ó°æś²3±ŁL{”ü¤ēž‡óĀŽü!ń­‡ƒ~!čš×€~&éWQ»ÅyDZ^ŖÉž õ÷®ŗ˜V¢„џŹsH¼}\Õ§ |×[z=ŪĘzÓų·ÅšĻŠõSlšµņĒē“I“1EŚ×®ėįö¦ŹÖ±Ü!$Vó3‚=ó\ī'ßäŌ­V(ž­æą.‘®xwž /öļ‡nmw%žCėķŗæāńĘ«ą jzOŠZK™4ZļI¼Ł0§dČõBÖŃŁ3› K4ÄPoE5óuü‘ōw€üYa®évWz”mŖés*·Ź~eČčE}_įxt_hk~ædŗ÷nŽ~÷½oŚ”åÜõ_ųÆįš#Äæ³6²u;/jZ¬ŚŒw6Ŗ7.Ķ”ŁĒ{µĆ~̾/Ōž~Ö[]†ēH¹øÖSAŌüąUšŚåv+‘ŻrTę»#WCąų—)•|·…_ņž2üaĖśÕå妝iwØ_ÜEiem4ŅČŲX‘A,ĢO@'>Õü„|nż¤¼ń{ö¼ų‰ń^?‡śo‹4{ɲ“żBt±[Ū)YAČ ĮČėĒą«T]O⯢ĪIV¶u[†”-~Ņ”•æČüÜų› ֋āŻ|KdšŚĻrÓŚøLFc=—ééō®_Ć·šMs•įW’¹žĄpÕwS ĖW’ģ"&[¹”ŻCk+łšG:²ķ³Įõا#źāżÓvāE`X(Ē| ͆é¬T3Ÿa[ÕK0­ŻÓ%ÅŽŃ»ū£­Ü-’«G5“rÄFpjĘqgé&W¶æN‹;x¬”eł„(p÷Åx?Š`iuK™Œ,±KóÄŽ£½rTB$™ęŗåŻī„õͼŸŁ²Ģ Y€łńœ^…”Mģ 4fÕś×3zŲōh£Ó,ŌćsĮčE]Ō-/5 *ś×KpuB"\õnŌŪ:£#Į|C‰p#¾ÓåÓo”ysBć”aÖ­ų*t‚ģšFĄ$€OŻ4‘­Z•c`ÅXF;k«»¾»ŌēK›¹<ÉŌɐ銦˜fžHaiäpP~•‹į=^ų§ā[G‘“ĖhĢ–\nY;śėTīrÖŖ’:{æ‡i_iMF0v’”»żkēŲµßųĒ1jVī«˜„ÄÖĻ)ņÜ{Ż*&¬|ī.ÓÜó’üJÕ¼guö {Ł­ķŚ\¾Ó÷ĒqšĒ‹Ąz_ˆōɬ®,må(0ŹN֍ó÷’=k–uu<ų ź|×ćĻx×įÖØēˉ{¢†MŌ³nCјŽ½ZƒÄ7še¤7ŗ,épĮ>XÜG#"®MN)eŗh¾>|XÕ4[½'T°–iŁf@ąI‹Ę~øēŠżšŸÅ’ é-§‹õ VĘīŃ¢,Ö"`efĘ6•ĻLׄNŖµ™ÕC~d|Yń@ń’uym£²¶wo*1ŃWkų›¤j >1Éń;ĆQB4mVU–3¶;6# ¬¾äWŁ_~,jŚCŪjś¢‰p]&Ų[å•r čQ©Ššń_5Ļܟ|DšÆĘ‡厶!K»Ū1¶Ķó"J‡÷łĒ£h°ü:ń/‹ü#āū”¦=¦nģ. āźÜž1ī:~^ÕŃ9u9p”å(Ÿ|m³ÓüāC®®oÆ żŚŹĒĄéĻą+Ķ“‹Yc!a¶e#5å×Üś|:{Q£3"*ą}k|>SķāøŚ=HHÓ“ž&Pާiē‘^kāM+ģZߌ-QŚ Ō2€3µ‡ZE¹³SL¼†ąŹņ:S]ʞéo4(dea»§µÓJ'™‹>~ųĮ£?ĆÆxā’-Æ4k£-µåø ”•ąžCŸÖ¾Čż›~(ÜųWP†’HøĘJ‰!‚ž„tļ^Ž+”ńųŗnŻOŅmWÄ:/Åøu[ [{[#Ŗ( 9'kŲžč—[é;šK”Ė#¶ÅĻ9=†+ŃåV‰ī`»¾¹}9C„»”²¼.ģż+ ±G•ŚK*OįQ‹ł·$’$}«š§Äštŗö… ·`҃2G=+õSOš¤hćZ²¹ø·½O6Œ¦²„ͱųŪY®§7-¢ųŠY“ń{wœ“'9°-|+„éWhöŃXÉ#oqĄfõÅtņčy“ń ŹČf³āVšÜ_mŌ-ĢöÉ÷ŠŽ•óW€õ‹üeÖ.ģĢ–Å –”mĘ 0~‚±”zŸAƒØŁķ¾7šMżœŚ…“>EŲģ\ćž ø·ŃüM„Ż_ŲŪj֐\¤ƒätS’×°œzžÅ Ž-3Ī’noŁėÅąš÷ķ[ą/‡6p~Ļ~"’(õ25t›ĀÅVI#V#ļppHå8‹²š($Kk°Ė oĒJåücØXŪ+Śi÷1Ü\·B§īФŸCŹŖq6bµ6—1)Ų–üjż«[ŲH^Ģ»m1[“Üļ<9®mE>Ÿ·dyŚÜr T“Ć Äų2ƒ•Čē¼v3nĘEĢVŠI ¹„š8Ąéõ§XŽA †k@¦ܓ[s™ŹG}hš^¼ŖAX¦Pwc׍=ŻÕŸ`T /ĶfŁ1m5‹ķŽrČźGcŠÖö—wż³|–ÓĘ<²»d^ÜŅ3”t=÷ĀŚ&b¢Ń0˃»< óŠā‚F.XHIĢƁŗ¦]Ģ'¦ŗÉu}jn"Y øį±]E†©§^[›cŚŻŖ Ē½ŽµHČēu{ˆā¶»¹ÓåTį’ׯ ƒX½¹Ō¾†F¹|¼™?u©‘3aukÉ'6ĀŻ•:åלÕĶa¬µ 0A‡®+ǼiØŪ®¼šŚ\ “ó€‡nĒ­sÖōĶ`&•c›ęÜ g8ÆÖl|«‹‰St„±9īˆŸC»¹ø3Fƞ}Mh "Ō¼Ja‹rŒr ī>ōŪčt­įģ}šX≠';GjšźĪīÅąŽŽ,Ļ“ŗóźj\†¼ĻKŃķģ 8b}=ŖŸ‰īrŁ,—P •ć#Ó=©ŲĀlźü?ā[[ 2Å*Cēzģ5(“’y/<› ѰnŸ•\a܋bÓAe³‘ŹĒÜēųjžµo Ē¤Žhń;$,¤yŠ~aō­‘ĄiV‰t%Vqqü¤÷ŖÕ֎49aexeŽA»‚ßcļ@XäµŪ[w–ŲocœÆjåćÓ”½Eˆ3q•Š ¶·;-:ĮģaY/RTƒ‚ŽMAyiĢ×Īܰö>µ3Z 3Ÿ¼HžŃ™dhłz{ó^Ać­äX!ŽOÜNv)’Ob”4kXį|9ą„²ß›å¹fœž¢½"ś} ƶ ¬9ˆˆŒČG€ū§ėI³S‡Ņ¾ M©Į–]X[šdČn{B+¦Ö|[d4õζņ’ę?^¾µ&nž' ė×sĖ0K‹Wd©æ„v:Y²µ…m&“š)6q(ūø„ÆB,YŠźy"ūL)g5ĄĶ¬ŪÜ\5„Ā!ŚJØćõ¦‹Ž…‹6t\-·ÕQµ›]ĶĢ»’nĶžւ¹‘=É¾‚[‹R²»óšČXēæ¹‘Æ'ŻpuśŅ“±E[ˆŸ*ŽI¹ĪqŽ+Š“ß&žÖŻa‹ĖpЦ¹„3H"…Ž›µÓF±ĒNÖĄÖ?‰4nģ\ŚÄöē=TäńéJ2»49­2ņ-V8``ń’»˜`œzÖž‡®źŃjĻ|·×FŁqū‚’/¾;֖Œż~ūQ}Au%œ¤lł~:äÖč×m żĻ˜£«ąŠdßbÕóĒ“pą>׎øĒÓåÓę™Ö!*’$üĒŽ‘%XćøM²2u8 Ū[ø^Öhž `“ ĻļI[”õ9MFöUB <ÅOõŹŲi·śŠļ…£B~fōʌJ¶³žÄ€ł‘¤ČĄ„Č®cuÄ×Ņ$Š ōt¬ęŠ:Ż._³ƒŚćĘ;Ö¤ŃMØę [³6>fĄ™5“C»8«™ŚīHdvڇiœWU£Ķy2«)dR€oƒŽg£ÜÖ2¹šz^Žęs½Nqļ]a*Ćm †9ŗe½½+ ¾…X¹%»$³ y@9ĮĪMsšd‘%×Ųį`'Éõ%åüöNŅ+%Š*°Ēć\ī³ŖźW$“Ķ'$“Åma”„¶rḖY²Ū»OuU…~RAÉü«G©³^ŪG}OPKm:9 ņó¼Ž2;q޽Mų[ā)RŹę$ź—ŒÅV5O˜óŠf¼üMKhĪŖXv}1ą]ōW‹NŌ¼6ŃB1¼0Ć#c”#šõo-ŻŻ ¬ÖūvØfč=+Ć©[[:m#āų źP ¹‰;UŽĢĶ«7‡ģ//4©¬¢» Ī€ŃJNęņ•‘ēSųĪāūĪūmĆüłbOµq–ŗī£­źšV‰k%ī”<†4Eū¤OZō©Äć•Sō_ą_ģ=ā{MƒāĒ/Gį •óbÓ!?éHB½FqŌ×čn‰įEÓōĖ-#ᦑ¤ų/Į°ngu„$÷ż©8<óǽvĀ]ĪYU¹jZxVāM3JŅ ¾ÖåeE•”¹‰½r:W¢ü0ńgŽ/ßÄ^4ń h’#,vł`­įĒsŸZģ…™›–‡kįżéµEŅ£K+1–sĆ`v€®”µ­:ĘĪ[-Ż$¾†C¶ą6 7”­Œ¤ĪoUÓMމ}?Ä0nüųšXŹC’Iģ}źH5_k Ó,¼9q$ŗPm€ÜĒ'žŲĶ;JG3õ–Œ–ń ą¼Õä¶ćp<žj•ÖµW“ź~0½œé‹nc†<ń õ‡Š~y¾­®_éņBtėItĶō×.zf¾;ųŁń’Ąžy“} Śū_ńl1p±ĘŁć'5¼#sE~WüHų½āO=÷Ūo¾ĪŅJå„N@Ś}}kęMWRūCŒ”Ą0R­vSP”UŽzbK”Ų@õؤ™Ü6Ó»8#ø«9&@ĻóĘÜ+7łÓe€ļApO>Ō³GŠ 'bó¶„XL†7Ė(·z—.†F;“×oū&£† 7/ļ 9'¢Vr•É?T¾ųćZ¾“ńG…t½eōū¹ā ŪX‚Ē-exr×Ē^ ¹×,5©VõŠoiBģsŌō+ŗįȑŻųC^Ö¾#ŪM­¦µÜep!ńÓ€ØõĶZ{ˆuEX•łū8¼żö} GsX÷|Ņuł±éYÉō5„ ÆxĒĘžųnmtK›ōĻ•öPwļćx•öÄ’k_~¦Ŗ$ŗ&»4æ»Į!böĄĒÆJĢŻŅ:ļ† .¾ųkJ]¼W““÷©pFŻž¹Ł"ŗOŒŸōxVĖSÓÆ§ŸY¶żō ɐ½ņ¤{ńMŌ¦Æsą÷F×-漘Ą© &Üē±Ś¾Øń'ķ5ā_ ų#L—ĆĀĆ̈Ēo,€nB@8ćÜÖĶ\…N‹į’Ä»é.5}ZžE¹ŗ– ĮÜ Ž•÷v‹s5ßĆūnl‚[ŻBX¶2²>yŪķXĪĻ”šÅżWD·Öļķfx ŗXņCqė^5¤É ‡¼:œ6ńʛņē ßżzŹ0Ī«H]+ĒŗN¬Ö:ü)}42aä`z.>•莚bkŚ…‘ŌÆn-ģc-ęæ”­”AÉ£āēĆK=7BŌüM¦3Į¦Y;Hązõńöæö‘{hĮū>ķćgņ8éG(ł¶:&ÖĪźÖśĖT†o-Ę—æŌWŃ’ī­ü=O‚ŚĢŖÄģŹ1žćŠńB•Š{čhjß“[ ZĪ’QøK—PN7OĒĀüV½#Ņķõ+3‚9™Õ±H ֋¶K<ļįt·:F³nX\[č „˜Ępł'žµĖ~Ńæ ¼/į“·ń§ƒµ ›ĖMR2źÕ±¾ Iœśw„byģģ|y”åW1‚zŽ+=e(”UēéU©“Ņų_^»Ńu6’MI#ž)„Ęv’)ö<×ėæ…µĖiZµ¤ķ42Øs‘ŅL|Ć=ėGę*ˆīU”āDrfa÷qŅ·¬õśKŌ|=xöāŅī‰ä‘7ģąØõ®Jū™łļń3Ąś4:ōƒk-œyēhIąÜūWĢ‘†Žłķ h‘‰Źšp+žģvşT|Õ"ńg‚¼IšėUd¹»ŠA6œģŸ4xäüÕcĄæ<_šgĒžń’‚ēņ|G Ż™ćøPC 2å}2@#؊HžüžüZš×ķ-šįēķį)ŚęßS±Ž;ØŁv½½Ź¬¬½ˆ*Ćš÷Ærųsć+æ ź/}¢$åc¹F<8Ī3^•Œ–„Åō>ˆÕēŃõĖĖū iūž-÷tĖŌ}2+š3ž ™ūx‡ö–ż”]©ćž*ÓSŅī^%Y¦„”t?ʧƒųWęw~æƒu^ ėISFæv›KhņRņY:c±8śśW ŗŽĒäĒķēšÓāÆĀżCÄŠŗŲ_6÷ņė2䬄{ńõ ×ņĖŖésiŗžÆ”ŻGŁų?āżGĆŚĘ£ŞtĒU Ū.øäWŸxŽ{k^&Ō,­„šŽż™Õgå£$ēå>¼:ØĒ]K;Ļ€?Æ5Ķ[J¾bѬ»ąbFW»Ē§õÆ“tūĘ}²,{āąśóķ[„ŠŹ{Mݤ]fŻÉć„r²]Ķā¤cŹ„c†ĻZŽÄ§éųrĪDžå5½ü®1_Æ­I”[jqq'’Æ0„Œšs>{7½žę5YwcµŸā½0Ét%H|‹5‚5.2ĮFPhGAń~p1éTį¶“Tužk™–`0€¹}ÅKMŽ«O°$²w¤Ö“bßģ71ˆĶ©9Ü•#µ;iZŚu{„’i ­Õ™ż«®æ–ŚŽĢQC.@ź)™Ā¼Šj7KfEr¹é^’śD‘č1ŪŖ!‰¾fÉźzr‹§X.’=„I8ĄƒT„Óķń,¤+ÅiXų~I­ ōRDģ 3 óŒśWIt‚=9ŅXÄ»°Qø zŠ3›°Ž[•å#ĶĮ¬Æķ ¢ŅŪŹŹAĻ4GcžÖ'µ5A&īGWa µšÄ‰Œńˆžį8 }©”‰–).šBŠĄ©Ą9ūµéŚTӍ>;s‡Ś:÷ „3zĮ­L+$!ʐzńķXß¼tŽ‹ĮVzJžŌ|É §Ė Ē®+h®ĘńĢ'ųĒc­›±«Y½•ą+‚m“Ž¢øæų®ÓRÓ¬ōkd>sŽrõėÓéUcxDZÉŲhŠŚ˜Ńł¬ dć­u7Ž‚ė l²)ūĪąVܱĪĖį± ĢŪˤb³ol|øL«*šö©*-"Mx.‘–āź„gŽ»ķBŚŪ÷i§Ģ:ŽÜPh™Ā_XźqNŠA¶nsžāŗĪ9£[™#†ē#„e9t4‚ŌĆÖü-&½t§.$*Ų'ŲUų®/ō˜­ņ õØ;)Óź7F’ūW†ų^˜„FbŖ `ķ§ųB±“ŠŪA·]"ö73!Įädzśč:įp_ۚŠĖhnÖāķ$aēīżkŖE±%ĘŅ:ūQck^'ńG‡¼/£\Žźz­Œ Ds銱4_ézō{cwŹķŚBø}®jŠŚĘ T–[£8G#ÓŚ¼ÖĒĀ6ŗŽ”ØźWņ\Ė<¤D6š`>•ębŖXžŖś0p+ĢsG™V_»”kyÉŽÖ鄵^kČō5²ŗ€}†RW 5pCp|”ē3 ć9é^%ZŗŸéMI+#®²7“ŖĖoļ Ō/Jņßź‰į˜nRįÖ*d`N½r9”ŚGšų~ś=ClĶ4×YČĪ@ē³¾Óµ{ļÜ$Ö×6Ņ„™ckß„|łā F=YŠŽk2)G˜Äżåč?*ĪQw>oŒKSß¾i āY”Š1…ˆłü³Ękß|WšJš×„ļuį¬;ŻÄFP§÷4”{ž{ǧ¢<#C†Ž-BAx¢h‰Ēzūįf¢ė§j}ąŻdbYy÷UĘ66§ˆekĀ֍¢ėÆżžWC$xč}«ĄzTWśeͤėšcĄR3[F'GÖ99-uMW·M;m®¹¦ŽCØZ—ĪRHä­ėÕM^^¶šOķ›š»ąķ5–‘®XĄņ\ٳBŅ“f+‹w Ü6]r7—ńõš”Ö±?Žž™ø9<³œSoš…G:)Ę÷ņ³‚KĶŸĖ‡ü’öhš·‚iķožß[üńę–u-ķŁZĆZ‡yĈWžŌfæ3Ļp§·ē\tāÓ±ś}XŻ]ŸsĮ¾É/ķ—ā†ž0¾s¦ųwD>$²ÓĖe āĢ‹Ęz…ó3jś?ž kū:Żx/ć/‚?iŻ6é.t_ˆ|1ØŚ¤aZÖź™£”œüĮ•Oa‚µz”ÓägńqT°/ą°ĻZui8śs©k÷Ā7?ōż.éŽE|͹lś փDöŤ ¶8éN–Ēö’–¤Z~µÆiž'Ѽ_į[«]Åze¼‘A(M«xø$G.:‚{öÆÓļŚ§Rżš?nOŲgDńĘ‚¾üYšÕ½¼—~0Ó4o0Y\/Ź\ʹc“œ0g®pO£J„揎‡ņŽœ=‰Įćpł†^­ļ¦üīõ_ŠÓ±üāk¾ƒGÓu÷Ń|iić .ŽąGcĮ»ˆŒ†ćčs^Łš±­µ-¶wB8%hƒp:W%k%”÷93šĶ«ŅģOćč<«|ńIhŽŅźęG*łņÖBcbć°Ć޾µłµū@ü,{ߌ³ö³šœ6ѝ"ēÄWZ„Qćå u ĢcųrćłV}K „¶jń]éø¾ŚI5ł³óūி®ü;Öµ/^Č5m:äÅ,r’„ĄnAģF?:żšŒ,¾"h²_BæŁś¬h>ӏ½Ūp÷õ­n}²R…ŃŠü5vŚ-ō¶·s}©yŠ>uaČ śäWŽŗļĮ ~Ó ~Xčž*1žŅ:P·Hu¹ &UmĶēŗ į6ī‚3ĪźŽ7?(ńW_§ˆĀ«µ5K;’’ĮF’ą”ZʁaāoŲ÷BšĘˆ'Ʊ·ˆõ»kc‘ŻāAó s’AēÆą×ĮĶnĀM*óĀ7—vpė–R}¢<ü¦XĪI źsŠĒ)'f|O€~¬«&•hė:ļŸmyvŠł+æūyŸAücšŽŸģǬ|FÕm¤kØuH-,e+Ąvą®}9š~†‰éi¢yÜöÆ*¶ēö'‡Ļ R2é/Ńć]` {ÕČnœ² SŠP?Gå±ŃG<ņ؉YR1Ōę%¬ŠFq”7;³]g-X—,õxE»*9ė“Ož]Ŗ ]ąž“ģpĻC³ńʝ Ż|ŠüwįĄ"ń ßYćc÷sŹöś×įé?gĶoTÓm.$ń߄žg·qĄ¼géƒYĪ™µkS—Ó/|9sšāw€5«H¢¼»ˆ^i— sė×Į8žuįæ' cmmxėö€r;‘^|黝ŌļsŁķå“+Ąsļ[śg %O–PxĮ¬YŃs‡ųÅ`Ķ-¾°É·2,²ČĪ¼;O»—HńæŚP}†ę!°ē€ą’\ž”&a*‡Ņv:}彝µåżŠĆ*oˆ²ąH=G­ky'a zwµ-ɕSœńÕ嶓v雍Äēļ³ˆ¾4F1¦A Ś%Ģ„‡ØPNŽFŸWŠ4“½KĒž Ņ54žž\(W\“ƒŪ+ź…Ÿ >~Ņ> ×~x•Ē„>9hRJRP¦+‚:«~śū})ūVÉtś1ij~ŌußųŽh›Ä:Mä–7 œЊֺ»Õ5 ˆ'ņķW£S¹*:-„Æ h¦Hއ#Ø®7Z‚ēĆé“Oy'Ņē”tņŪŠ”īiģ»döډtÕ²×-£æµ~ö20GŠ‘\® Śųbō5äN_–8ĻUPzWM)XĀ®3鏇æßįåäwv«}%ŗÓC’£ŠWcāŸŚ@ųĒÆé³ųÆĀfKq4*N -Žy?JÖU©ŁŸ0üEÓ¬<ćżkĆZģš–†‰ś»oĀ8ĪĶŻń‘ĶsÖČ$x"<œ‘šä©#Ŗ;= ²OŗpĄć§Z›Īū+~š6āG^˜®SØ·5ō+·`»š‡R²Ō5 KkĶ>X”¾·>bv= y~‘® ½bę+ČRŹń$"XŌżÓķģkÖm%ŽhWnI=óÖ·„ŽZŌļ¹»įĶ Åśž×ģÖx·‰a˜1 Ž„W-įK+o†ŗ™k©Õ¼ØKIĖ`~5ßB½#„ęGÖ>ųõ£xiķ纚Ž”L2Fz_Kų»ö¦Óuļ\i’Ö{D’?.āRłg>›æ„vżjŪž'+¾‡ĮŽ2ųļ/ĮŻ+ĘZŖĮ=Żßˆ“©“veĻłĮ$w’_œß¼;ż¬ö:~— Ņj;=°~X’JÉāOžÅå\³r]¢¾üP¶š¾£c}­ŃImDB+¤0Ćg‘^'ā/ évóŻ\XĖī[Ž? ĪGµFOuŌī>|`ÓtŁ×öżš~'³k_üM£ÜŽi1Iöѵ„’ÉT,ĘxV^Ū~(|2‹ČŠō©5(žI¼ §'ļ`ć?Ķ^³”cÓO×ófy,&;‹§š×ämv’M?½Ył»Ÿ‹54Æ xĖVā·Ņnd ¾Žvś×įÆö¤×?fŌīāH&&Mü¶O=śÕa7?ž>–xéGƒĀ­„)K’I/ż)Ÿ_ų/⦅”x.āĖĻ–MRhŚ<`Ī =}k”šu–ń|——‰oylP£FŹp_±\żkčpČž ­”ė ¦ų_RóŸTÓZŽęI6Ć#ræśõŠxwĄ–ÖīĖhmķ¼ŅX9 }8®Č»3ČÆ#Ū|į7‚śq™¢•€=ĄõÆŃĻ #x_Ākįļ Cc<(y&Š ź3ƒŠčŠQ޲ōŁl5ßyʼnł‡ ~4ŒĖķi…̒ǹ˜š:­bIy-äŠŅ©ēŽ‚$®:i¢UV— É©mo®ķ|×[ųHģ(2/Ķ-¶£"Ipy-Ö«„õØcøCŽ‘@ģsśĻی ¶óŖBOŻīiśd+žZå÷¾ī1ځP\E1ėĒ5^āé5‹+“É#&8+@ŽŸ©jépöŒ$ŽŲ^ąŠæ.Æ-“Ņiŗ”ˆĢvszf\ę>Õ摣u^A=Gҵ-ua%»+DBōä#@ĘŚa™Š’ź5­ę(-*(SŠ`PK—C™æ»¹k°Q\žĄwÅ_KiµŌ³:ȀœtĶJF¶‘/–exe—'§„y§‰ō«95VK99 ēnsZ LÉøšĒöŖĒę‘A+ź8Æ)Ō|=yg½®“%‰Ś3œA¬dp³^uQä·*0:U'¶]é#LÜdÉ÷©“źQv÷ÅPŚ[!*÷j3°(<{WMąHu=fuKH¢b­—I[ õĮ¬GcŠu»MfŅŲ]G4o*·*ĶŠW9¦jQIiymØ2}­Žäp~čćõ•4ģ#Ģ|E¬ObdKkv™·l×ę}µKNīŽ2N?„śr•Ąē'•m.ŠĖĢ„qž?Ģu½Õ§“‚žcH*ø^żĶW 9ō;K=:šM%Ÿ|õ%Y{ŒUin.,Ü"ŪK÷±84’źG7CÓĻ‹d—ĆÖDŚtrMY³‚T’ Æ1ńMŁEĢ*”å~3·éRŃFY›ØB].õ 3ŠW­hz{Ȑ$×fÖŹ Č_jŁVń»Ā1ŁŅo[Qˆ®årłĄ÷’ ńI|IxņĀ—ł¢P0O®i›Cc·Óą¼D„Zŗ[o9ēłāŗ Ķ:H&!® źW$vŻ@IœīŖ'ņ ,&Fb©xNļK]PŁ^¢N<Ō³Ņ.ā·t‘€AWž]kz •āĄ…~ÖéŹ9ą{{R”neĪkVŌÓQž_&ŁmUŽŠŖ0¹ö®?T³ŗ¶šļ…AĘĀ2sY8“jjŚĒ¤XļžķĀp®ķb¼ƒā>±„ėö§AŽÕāŪ&V_īćœT›ĘG oö -:ŽĪĀŌŪĶ`Ä6wŽĘ°5Ł/õ1m•øuˆgw|ŌIŽēYeeoi¦E-Ą‘/ˆqń®KSæŌlwF&™ķ˜üƒÓ51•ˆS9/¶ßCēŹŒžI8ĄēÆ­dŁĆ6”ršāHf łĘ+TDĪ®ĘīžI €‰$Tn§·j›ÅZw£Hžk|ŲĘH?Jc iZ¦™am‚ādĪķøČö®CŚŚls" ČūeĻ ‡¶j'ŲŚ1±>¶×³Oe[‡‰nļZé|;n芌V$ėĻ®I=M##”ÕtŻ>ylŚEG‘H=’ӏOa`WćøĶ8njr"šÖū9'²HĀd©ćœ×”i u “Ēr®²G!)éė]P} „#²šÖK‹FXįŽ«†É\fŸk¦Įqjbŗ†N6žsQ-Č6™RV4ŒGьV.·¶+x<™IHéżŃļXNęRNē'K>ō`»•¹ŪZ”8łOµ܃’»G‚ąƒ“ÅĘ lió@gĮgŪČ< ŌØĘꊟŚ<š¤h„€'Ū5ĪĮ1NĻ;»ÅæµDßCd­”æ¦Ķy„–P‚ĆķA„¹|@X£u`+3"['G]é¼ńZÕ“ˆÄ’Hdź: ĮšA¬/œO# 31lņ;V„ŅÜ|ŅF0Wļpk'K*ĖāyH6…uˆž*ēg»‰oQāBŒ 1ĒZ„d‘OöɝewwĻßcŅ®łö±l*«ēŒzՎ;™·śĶ‡”ę?%qņ’KŸS^§šėįŽć="óRŌu8l,dsbpźćūµj¼±¹čQ·S×<%šėĀŗF¤ś5æŌ5häT›÷oķšūDš~›¦éWƒź0Yjńy‚Ę #²śŸjłü^!¶īzt’<ŖkĒ•‹Āެē,[Ž>•”.£„ŚhÖŃ`¶¤ĪC¹oŗ=1^l5fŅ·C築:½œ‚v7–“]#e*=kēhƒgńgDZCsź·H„,åĘ Dõė^œiYÜś=ō ]!_Rńž Ž!ՙlb< ģ½ńōžU›cˆž!ˆü4Éįļ[”3Ęė†;x?)ļļZF&)†žto=¶—”xB_]¹qÜģn;œšæ^µõŲÕ~h –-FÅfńŒøßqæ mĻŻŒń]0Z‘)Xło_y5[ż14½N 6ŦżōŖ¹mƒ®:՝7]šž½y.ą{Hµ •cÅĄ²ćłśVÖ9\ŹZö†t čou=pK4™Ś1»Ėnį—æÓšĮ·ÕüYćb¶0_G„ųQ Ėäʁņ2wŒp8ŖŒGw8McĒ^š•ĀhšuškZŌŃą—Ė>]æ=Kb¼Ūā'ˆ,t.5߈3ŅleņĂ eĖ•öA[FLGęĒoŪ{Qń™§x[ŒŃč6óŗ“ŃɆ(3Ū­~uėu I„&āi÷1c$®Y˜“ė]P€IŲók›ėéägšY„]ćėYļ÷C6ņWŽkSšuK¹@F {śŠŃćž~‚ƒžrwÜźŲńÅEĪÓŖ±Ūą’)“i,\TsėÅ(ˆÜqü«µ3QčX’0ŖX{×I¦hń\«øź;TJVś?ĀėļėĻ­Śė‘Ė™µ|¼¹ĮõõĄ_xÆĘ֖ž3žÖćI™ Ķ=Ź,>é>¹®čÉ7”ēże³Ņ¾"ŻųĄWŚ½Ļ‡ķ ¶Š‚ģ¢t鏩žuńž«ć”pśŻ¾‘sfČK ö#÷=ėh«•ķyų?ń—ZæŗŃü#ā;?GUŪew"ƒ'ųN:­}Õąļˆ?|ā¶°ń…Æ†ķĄ$·ø‘xv8ąĒ”­¹,TfĻ­µÆxbćįĘ·|ķö}ŹfŁ£ģžĆ·Źæ:.¼%į¹üD™eor¦0‘įˆĮō?ć\zóŲļŒ± ×õ/ü=š¶™®jźö Hü”rpH?•zæ„üuįß³hŗDÓ {»U>bī0…žŸmn†U#sįoˆvOāx‚hÄQB%2A PyµĮ_ZiŚŗéš>”5ÄP@ĮāēlóZB] ]3”ų±©Ķį½7Āzē…o”¹xŁÖšŒ±c S_yü'ų£­§Ā­/S×ō˜l/-ŲŹ‘o$¼}pĖŪ Ŗh͟xĆĒæš±¾ ųŸY¹²µ±-1+ƒĪιśtÆ=ń>¦–6éå±»²²eŹ8ļž{Ņä#cą ^ ń‰Æmü% HŠÄ 7!N3Ō‚¼fæQü?§ŻĶ¤=Żå“ "<©Ą[Ģā®Āf/ÅļųŠļąoˆ'šÖ“®ŪK˜×—‘AōźkóOĀŚFŽ–¬VŃcœŒ`ƒžF}œ–ć:?Āļ©źpAnd·@ėī}k¤ń€õ[+[šśźOx_.„ą•€?•f¼ŹSHłž +ūżĪe']·˜•g'i#>½«Šķµ-n÷J]&m¦"ÜŻ>µøIžĖ¢iZgĆČõY!·¼½ø‘ sčĖĪJśó/ˆ&µį%µ†ÅZąē‚Ä„#¦;öż+)³¹ńŽ©kåĪšHr9ć¹kĘŠŁ„®1’ÜŅŠŌŽœµ2¤‘-XÉö‰˜¼ćh?Jūēöoų§wy¢Yx:õķ×PI[ÉUä*óü«”EŽR>ŌŅ.¼å"RīžõnU(Ģ£ż®z“Ģ÷>~ż <"šŒ>7Ó¬Ń5>5ŠéCO dn¦įŠų+R•ZęMØc!ŹõĶr*}Q¼†—†¼Oyį {Ćśģ,žD7I梜nRĄs_^|_ŠtÉ'‡ĘZ4Wz6­n²1¤øēčzWMŽ˜Ÿ¶æšAoŪžŸx›ö>ńõżēü#šš}«@{‡(ī@Ė"ž«»€õSėĻōµi%•Éic’W*ńśQQl\w>žųKā=#ĘŚ#ųo^“·:­£Œ8ł„’~ŸēŠōKOÓ¼=é°m&xĢwp…ūń‘ƒłdÖ- Głę’ĮVdkoŁSö£ńwƒ¼9„ÜKšļ_yµŻģ•ņŃemŅ@¬:ķbqß=ėńļS“ø·ŗš'‹ĖUé‘S„,WM>ć’”Ž2WĮµ7ģŠådŽW‘łWl79&µ%ž8ÅL¶7Gźæüćöνż‹æm ŁėZ…ʝšwĘb=3]€6čVB6Å+©éµ›’9ŚOŅæŃ";»f²i!dø·’5øµ‘O߅¹Sżø5i]-678ĶKOŽ jPݹÌpkå Ö|_ၔčQ}£R“œźVC`$¹eõĮ Óė^|抵+œz–™¢ų»ķÖzęœÖŚ5ś+±÷M¤źpŽ™ }³_Ėwü#öwæųGń?ZńB°h.&0Ž#ÆĖÜķt t S‚³FS‘łÆ¼É¶@wÄNCŒ*6Ą|l%zą×|NK©$ t|3“÷5BE ’y€ēŌÖ÷…0X1Ī*O™]R5øę‹Ž;ŽYެ0ĆÆ±¦†r[wνøÅ.tl¤J’˜ž=åĒlTŠæ3•lŌsÓģzĮƊZץ‹ž ųŠޤk¦Ķ²śÜČP]Ąxd$uõǵß³/Ęķ#ā§Ā‚’4=OūO\Ń­#žuPIÕ“©p¬§ŸŸĖ=¹<{ŌÕŲģ‹?^“{ķ2M"ę;«[ø…Õ£ 2įÓš®6)5+›Č$™ctf1_FOŻćØük†¦ć“>9’‚…žČÖ_µ×ģŸńąµÅ“W¾$°‹ūsĆs÷ž#»ĖņĄ²’ĄĻ¦+üē¾#|=Õ>ųæYš•īi JĀ&”sƒzA¬!£õ3jē›(KyeFcœg’­^ą‹}. Ż;Tžmɹx8ĆVÜŻ eēŁz¹k«Ļ#éöŠC ņ  ¢¹ŠŚmĶ0_Awt^3,n#<7CĻćSĻa÷ĄķŅk󢵓 "v?+¤Ÿ^¤WßZ ‰o-­žęV\žķ޶Œ®D“č{l]ći²Ÿ-š ¼bø jĒķg[…¼N?Å])ÜĪĘ܋hcø“8ĪÓü5īž±ņtŲ!‰ĢO¾ŻŲÓē>"Ńײַ΁7ŠĪń&ż“£CunVd™Ź…åqÜžuÅY_\Yņ“ÉĪ; Œŗ­įMY/D’‘½cėƒŅ®x—ū*}Xū]¤³ Ų Ź}AŖŒ¬Yó,–é7—å‚U=łÅYk R!åÓņ­T6hųzÜGu=¾FFr8ÆbŃ5HōżSgķŲ`½3Q)tC'ń»½ģöw6Aø ‡÷½«ž²Õ®,mœÜLˆē5™¤e܃UÕg¹ŅåĻĪGBz×¢Zż²Õc¹Vˆņ Œ‘Afv½m5‰ecFW#«2ÖK¦‰d‚©qҁ4uŗ^æwi4 ÅöøĻ»^‡i³­›eu‘%¶‘€*’D{28 6k…Ɂųu¬-_V{¼F„ķĪ ’z¤"ŠšE-īÄÉĮé]µŸ‰ķåCoq"Õ ÉnƵ3DŒ/ųƒFY4ł4©[,Ÿ¾špŽÄv§éWpź* ²®ļČPŃ~Ķ–†ö‘^Io:M,J§qŒŒŪõ®WÄŗÄF,ą`— &]3ĪßZ P$Šõ@Œ4~hąšĄxŻļīßs4  †‚ģrŗĘŸsøŒ7ŹNå½C”C0¾7>d›šĪśt”>ƒ±Õk>.“Óļ§ÓmC4¤øĘ·¼5āł6F…öČÜŻėEęŠKōróĘX»pFrśRO.£ā'M6ł#¹·ˆįČēœæ#¦™Ėų·ĮK-Œ’X(¶¾_”nn ō®fĒĀĪÉ®¦•%L\ägėAŌ™é‰įy„»…­eHU”†ķšė?²²“›É.ŹÆ”¹,ēö¬ęŗ‘4x½’‰b»‘<«Ż<·½V‹$eCårfdsö&[+ČķĆ"+ćrś×Øy/jbŃ”mńƒJ[S7—C·h~Ś‹#6>öj†—5āŁG“ČN9=M`tS:¤‹O·3D3€@čÕå7zĶĮ–x$U'ƒŌšŗlŌŅŁN֌ zÕżNŽāxC¹.¦ƒ¦/©N-ÜX$^B<·ß5óWĒ?ˆWŸmäŠķbŪā €¢=ēˆć?ĒjRŲģ§³å WÄ‰Æł7Ó5ķāØģN7ątź_ķ¤Ō?·õhŚŚ,‹lł +°ÉÜ>æŅøŖĢūŽįVqŒ†j’½¾Jķæ’>‚ņ1ˆį;Aī:Ō÷ęh­Š—>KnNzńq¹žŖxmĮr,²–_Mߕjū·«ybŅĀ’R¾H!‚Y§*X\’\ ę5oŲxMŅ]HLėęl$/JņŚ×SōY­²¼)yį: %..ōÖ½½·Yü† :©ö5—ūcüšо Y^i–^ų4Ja¹·üų”ēcØ=OÆ­g$*5g&’?)¾]ßé1 Wwūu±Ū(aæÓōµ„ߌa(•ĻQt=¼"}G̲Äé6Õ*zēµź~iXćۜć9¬ąj“Š×ŽåÕqė]•ž®Æ§„«*Č$Č?ZÕ¤.Šó¬AĆŽ°éžÕĶ|PźæµĖKX%¹æŽ24Qœ’xõéUk©óy†é£ē_†’ō’ x¦ŚśåäMQŪou°|ČŻ2Ć·oŹæE¼ į³ā_ų†öÖD求s$3/VB éķÅuFzXüė2ŹŖĀ“jA^ßęxˆc··²æ“œ;G(hø8óͶ˜«mf·S…$ō¬j±U«ĶŹtŃKöxÕ=qšæ’"°įk€Ī[šq²2'Q•(r9ĪE&ŽŖh·„ ŗ€>h“QŽRB·8Å.^§|d‘Ńx{įēÓµ ’x³JkІÖÓ“÷RA?5LĀ®5-7Ō“²·Ł"snõÆ]ų/©Ųų[ĘŚˆu;æ6SłńĘNŻĪüėXÓųšżō’jóXÜÉ¬Ū —N[)3g#łō®„G©ł3>j Õhzļ‚ģōķ6ĪĪŽŹĘÖÜ!Č*ƒqśšŁų§‹æų©¤ŚšÅ•”’ c:Vdą3w9$χ씔ŻE;”‰Į“ǵ} }ćßéŽ µ±‚KČ”a?6}{܁ż×PA¾=+Ö„¦ØüƒĒ,šf*}šršõ§ļÆ½ĘŽŒģæąŗŗ?‚õÆ žĻw—ZLö_āńĢ}ŠLnÓB9YåIņŲÜ·Æ?Ļ’ÄĻŁ{A—ą¶§ńĮæ!½ų—‚Wšņķßq° ؟x¶ß˜=Ŗ1©\ųaZ—Ṣ佤Ņņ‹›»ōM¶|ĖšĻÅĶs É=ĖČیlm(Ƃ¤v"¾¬ÓÆ3@쁆^9Æ.2÷źśnčķ|ćßü'ų‰į’Š^ń÷ƒ¼}¦±ßÄ”™Ń†9øt ņ§Šōƍ_µGÅæŚ:ĖLOŒ^4øń½Å”ķqf‚Ś8 “b„r‘ Ļ^k²]>+7š×*ĒfŲ|óJųš ØĖÉė󵯻]÷>d[‰-n£1 ß.z×¼1ŹēśÕFZh}§²ks”•².ĀFŽ85ś/ūž×^ų-揈¾ż”Ö}oą×м*Ś?ļķžŃk ŹXš,†GuĪ`xäoNvjūšų±Ā2βJųNÕ$Ÿ+ķ+i±łćŸŲė]ųM­Ūź:HŌ'ų›]ń Ė>­«·ņK1vøU\IÉkO(¼ŗšæ·/ģßćo‚Ž ųūNĻįū›»i:̊į¢Gu/nŁŁU‰>ÜÖ?Įź–&Ņ}6āąLW „šĄŠŽRHńø_KB§+Ö”¬_ł[ļ>”ā}ėĀÉpćČu*ć`;Gµ|åń ö±¼ųbövß|cā=7ĘOµęIIŠ ›+’V¬„^Ēpļ× °­^-ėé¹ņ6™’ G‰uż⯉„×¼Qā;ėĄŚ¶±;³ļ•‡ ĢOtŌjž¾ŗI5oj?ŁśšĘdŒō;½3é\kßV}–S”Ó£J4”F)$¼‘õ_Ä/^%ń×ģĻį߀²h¾[x¤¶»ŗŗĖy¦XÜ;`c$c9Æ Ń4Č„Œ‰Óc#aN9¬eQ6„ጔ`£5~y9z^ŹßÓĒ„A ļ+īzÓf‰V_‘µ“V§Ś©h:$e,°¦½Æą/‡"Õ|[z<ķZņM÷/že~ģG½t6…6(ČśQs7LÆ©jæŁh½]œąڤ[‰õĖ6±™U†W=AōĶ Ų˜Ć¹k®ÜiwR鶍·“)b"%¾śŒr?:ź¬īcæž8·|ĢqÅZØW"'æµ4ylõõ¬y4ø/ī+˜ßČ*A\ć&‰Tl9DzĻŪZ]=ÓÉUG•÷^Ā»+ˆ5½īŹ×]šę³£Eq™o-Ä%Rqź­Ņ²“dŗeéę¶Ų 6_©# ØęœOēp8”b¬R;mFR‡&‚kC“ńÆō’xļĀz÷‚ī.§¶»aż¤e„Ŗ ä(ĻJżż“h·‹ĮwõßŻĻ¬XFŹŚę3žFyø®Ś,Ļ‘ĢņĖÅÉ]išæščLĆvr9ÆQ¼ńvœśjbX×j… z(ś×©Nz*šČåõ9,“F»Õšh¤ $bXr¹ķ_ųG]ÖÅ}CÄU”ø³½ŗ:ƒņ¬Xėü’:Ō÷pp}O¶¾ĶĪhē”ń^C⿆+ö­WI½»r^œz*$ØĀUŒZ¹óę©sŖXč¾+ūĢE—NøYS÷Ó`3ßü+óēĀWr>“bø “…č¼šóė/xś˜øécĪjĮ üÕ,Ģš-ޤÜ.ż®W”æ."Š8mķį ±ÄØŲq]85Üž,śYāŌ±8:Ėæü Åķ§§xkĀė©ZC“ˆ>š8®āMʌꯓ‰ī>Q‰Ił½«čpŪÅx…”ļÖōm_HŃō‹Ųb“¾IZ9 ¼4Äw¼ ÷;[¤cb…ģ±ņg®}k¤š±}ą[mEüKmjĘŲNįĒZū3N»ŗŃīDvP¬ö¼Ķ×­tGCÅŖbųÜj š8”R|°Ü® OŅÖMą‡psŽĀŗ2”×}„Y!—`Čć§ZšMIĘŁ#MФqž“Ī:…ÕŗYR¼uõ«pÜĀ‘L÷§©›$¼ŌŃ®ķŻė[¹xītń Ē ™C–^p}ėcnvvSZĆn’ÜbgŻ×ŽØėó"™NI_CŠp^GŠ„œ·µkZ)]’…#ēҁīu뛦öąĖco=«ŸH’źyī”]Įzķ={Šc&nX­Ä^i¶-"`ž•æ K"ŗß#&ģ(2”­”Ķźz ¢Ü&¦–—-“jė#Ī™Ļ#„Le¼,chuU8ĒsL{k¼ÜEb®eĒ884£§O.ž±Ćw"¾ļ7Xօʏ§ź×"ś5ņ]˜e—Šv \¦…÷„RX£ŗµˆ”Ż·xĶsZä:<©e“²FW,įxĘ ź’@‘B"D”N¢“ķ%øøGąķķ‘Žh"NĘdĮ­÷—$ĻļV4ĶIķ÷ ‰*Ny Č­©kRĖsšl~V0ܜ‘\½ķķåÖ ${uV8 ‚(§±µyvɱ¼²:ś×;āč;:[+JŖp |ʂ¢®|ł«ił—Ķv3œšk”ŸOx܂Ԝ;Vr—Cd‹&‹¦Ė=ĶÅż¹üÄf½OH¾Š“]J?³Ē*Fų ÷5™Ŗ’±»āļh"ĪāQx¶Ņ łFÅ|¹§ė7ź¾gŪ–[Héo-ž|»©g>•‹ŅI2ĀPæSč)Æ3ž[œ¦³į5K©Ė­Äkµ ¶å\ŹŲ6›‰$żą9É= nI×čz…ŌWP³0rW;‰ęŗė«{i'·š=ć~<ܞē­&€}õ…½•ä‘Ap—°ƒ€Čxo„qZ¶™}6ۈĻȹ žƒš¬šŌŅ!SsiŠB†ąxŻō®ÆĘŚV½ę[ż…Å„¾Į…#kT×AœÜ¶ZV’²jI=ź9,A%ˆśśWšjoØÉjšŁ­Ø$ćw=)›E¶™°ø’[™vą¬8_„vKŖŚĒļ·I09Ļō Š‡=Ø5õĪ£n˰Óå8ĀæĶśS-üŅų‚Öā…Hó÷]yńœŌF]ĢdvśĪödŗŅ. ŸŻ’Æø=kĮ5ķęŽózwSĻéķWrcݜ&¹®^Ųłp©É,Ā‘śÖ$~(’å‘ī –Tn sŠ–Ń¢(ź÷×ׄŹå’02sü«ŒŌ™!Žk‡DyXīf=sžEdkĒż­öĆŁĆŪJIœrĆéžz×Yq¤ź:^}Ŗ¤Ń,VĮ^U'ž}Ŗ%“=Ī-|wØjšš ˆH]ĄW ?€®ĻQ²K›UtœoŻŲRä ąŚT¶•ķAWR2qÜÕ«I!Šī3“eųąd 6c6.o-¬Q^5;†yĘ3OÓZ;Öó–]ļÄŠŅs4PGQāØ[ū"ŅyAHU@Żöö®;įüŖźZ•®œį¢¶Cƒ’_„fĖJĒØź¾²°† dŌąžó8Ų€‚ć\Ö”/öb@Z7³ķ ÓļX7öµ¬i w^õ³¼%-”D ĮSքģUĖFī;˜&€;”ąēī× {nkdY\ø©śÖń—bIc»’6?·ĢŠ£ ”zāøųµO6ł ˆJ!RxĖĮÅtzŅ O1X=ė„×5#grGœ$PqE‰“4,¦ܱO¹ćø©MĄPGp _­j7,É£Esoq9@¾XŻĻzā–A-š‰…ā Ņ'b¶J±E)L Ö³ä°.YĆäē•Œ·254ūŹćdČŒŅ­^Kö4_—oīÅe1™1_Ūɇ°F\Õ“tŸ÷Avn?6k&ŗĘFt~U¾ąŖ`©$tÅDoÄ`å¤mĆzPS•Œ ”µÄމķZ–1 Ø6>\ƒÅ!-½­ŗ³(Ƒ‚AėYq»jĆ`a‚īõ„ĢéŲ䎾’q°ā\–PŸÄ­ubźŗ|pŁ,ÓY[īĖmlW"ŖµR„-¹õĮ‹ÄÓu< 5IēĮO7Õ±Œ©ķ^­­kV÷;ćyŚK…l'kƜž‡|%ŠņŻwĒZ6‡ńßź1Ū_ņ¹'޹ÆńÄŻkQŠź-=Œ1” ¤żå^ł®¬. %3…šĒ„õ¤·z~Ÿåč_ |;”m#,—łź}łö’ėõ«±Å&Ģ’ų`ŚjƒW’KķyĖČAbūW=‹]ʏ„źPCØ^]C ½š¶äUįŲ{ūēµRƒ2“{|6·¬u{Y-…ż¬„3Ż oĮäØć?żjč|OćÆxCC¶›ÄSÄė"“I““oœ ėė[Et0|Ēįj7¾.ҼA­xJŅĻĮÉ.锐œČ¾€g™«Ž'ń?„4}fęēįw†O‡lēBÄĀr»’}Oō«åģ¤Ļń‰mm’żKUõIŪo“æ2Č~ž•Ćjž#Ö®lÜĻ4šŽ‘“’O·j…ķ¹±ß4F=Ķ£ēĒ?m x ĘĻĆ^ÓtÆkx;ļPš’z1ōćņÆÉ_‹~ üJ×.µ-kÄmb #䟛?)ģ+®œ Œzž5s#3Ė!Rē¾1Ÿ­aY3’qü«¤ŹrŅeL±ÜTw ¤ėżh9Ūī Ŗ6…P?K±Ż ²ĄōĒj d9av@ĖĪAN+:œēŠŹRģC‘§o`rKøć©RÅüŁ\3˜”g;r*‚ ŗ®‰ Žź¢9 Š4µ X“‡k=«ė?„_³Ž·āK˜īoÄz~œbi N… Ɖéõ¬Ŗ3ŗ”#Ōś‡Ē^Öm¦ÓÆ^;‰,¤ølm€Äqƒķ’+čūżGÓ>A®éå4ó j®vµń–f=Ęq]éisę>‡ĪZēŽōūŪlHš^7*ćpzƋ½ī’]Ņģt«y.ę„ic; <ķśńZĘF—¶…’xĒAŃ|E©xoUŅ!Ņ5…ø l¾fǧc]Å«» ‹] Qń2\&™4¢ß̌õ\œ’OQ\õevv҉ļ¼w'‰¼w¢čÉp©D¾|±H3‘€{W]ūZüŠüMk§|Wšv—·Šģ®–]FĘ5ķH9}:V2vgltFO€īoešÅ›ŽŪ›w#vĆ÷”c”śW|Sń6•į? ­Qŗ³ø–B#w>ŁČ§Ķ©2™½į_\x³Į÷$×ÓłoddĪMŁļ^]®ėv³³Y˜Żu @޾õikcŌKsSĀvöÓĘždāęh‡˜D®H澨šÆÅSšö”„DŃÅØ-”–ށģ,1’?­h––f.}“5Ļ ĖimyWĘ+’›DĢ9‘æĒšä“Ÿ _鶗V‹PÕmĀ ŒŖ”VB~Ÿ^+F$Ū>¾ų!ć[Ÿč×i6VŻĶ!&čF×#r{W¦'ŽüOuį=_Ćńkß圈ćłFóŲóĘ8”²ģw_ |K®ŲxzźWæŚŗ„ÖoŹlN>½łöÆĪ’jZ®‰®źVĪŹ='mpXšF1Ž„ :]7ÄāŠŚjH<ÕĄUń’ź­ĻųYč÷S¼¼Ń䂮0NxĄnżj\Q ™ŹxÖŅĻPOˆtŪe¶8xŠoĪ[ ’JäåŌī“ųmļć[xŒCtŖFwqėL®S¬šž“ž9Ó­®ģõ±iŠ£ĪяćpĒēIš{Į^(×į5æń,m'wfRrøĻ<š8©tū’Ńņ‡ÄļĒ xÜéóŹ’hXĻGł'Ž;ž+Ļ5h>ρ"£œ‘Ę)ʝµ!JĒ œŠš“‡Įķ]g‚}O4Ȓŗņ©=‡^¦ŗQJGėē…cZO”ä±5½ĀĶmy¼ÄH#hĆpkģĻėš'<9{šźõgŗ¼xÄÖKøŒ8 ŻW3;#'AńN½šŸāƄž"|>ŌÆ“_x{S†G1žSaĪ{Œd_čū7üsšēķKū9|6ųŻ ]ŁŽM{jźIAŠåFÖČ<ŽTŽ{mõŖzÄŽ1=‹Āz”šoŠtÉ搌O˜,¼n_B*ūY·]OKŽā'IŌ§8<85Ļ=ŒœOēž ū1Ēńsąö»q‡Ø^xóĀ"m[B6£|—p¹Ģ±9!r߇µ_“yģ.`æ‘n&·ŗ|*2įąc =ˆ54孌åcÉ^ŲC+L‡xBFėõØ>U“ĢBŲ>µŚŽ±!‘f.Å•O §ČJ Ü9śāŗ PŖŖńœŒ·Æ”§,h›—qŌŠn‹V¬ˆ„Žsõ­8Y±,{c4·6†Ę„ݤ7Śo™"Éssnėsc+'#kAąW÷Ł’Lżø[ö¼ż”“Æx®öėž#M7V‚é³5Ͱ_’`‹* äó•lõęéǚ”×UgųŪõü•±ū=w¤—°SļŠQ‘Žpk˵›ŽT–x/­ždp1^EV[‰łĒńĀ1xoÅśœŗ“Ńõ÷7vŪSĒp¹Ü ĒĒčkņ·öĻų9Å’†ž ŸV±·‹T²¶6—XĮf„”:ōż+(ĻS ˆžK5ķ/P𿈵Æjkķ>Sdņ%ų[ńF2ä(uÕŻMœ•:‘”ó·yy¦?ĘØH[xRsŪ„uÄŹ2¶„,QŽÄpĻ?ҧ•00;~3F£–(¾ųÜÜēqž*¾vr &: Čø=D·_“»ˆ9źĆlE 9ėķNĘń•‡ˆė#+Bćņ ~õ’ĮlKļ‡Ś“~ĪŗćźVśLænŠZI7Åui!{b ČäKČź„ģ»ąOÄĶ"ūÅŚ·ĀI‹ĘĶlšß†oI%/ķX ń+cšGƧ—ū:Ęžāķć’¢OBĄc5ÉQGrU”^XCęj6G&#ÖTīį_ʧüēö* ž Ś~Õ^Ņ ü3ńLĖ5š… ?P?}XGļ[ź¹mfGóQ~ŠÉ,ėn|ĒC“ü½ kxL¼Ž!vdÜx÷­%± K|=‹T°øšņģH–aˆ?łh=ėŠõ_čz­ö›§jĶ§Ūłe„IQßłž•É'ØF6<’ūħƒ5[łt£ Ģ.ŠOᓯ#üęŗļ‚>5ń|~'2ų–ģ@—„ e•šžŸé]4d' Õ ųŽ{­'ż0"\m€s‘ŠČŌob¹Ōm÷0Œoū×tec–héķeđ¼_¼Ęį^µø[i–÷:[y·Ģ„“r6ETdAęŚĒ‹#¼¼Ó¼ūAkp€ł£9“,5‹mVSkl~e*ÄX¾Šmnņą@'S»‘Žø[żŹŽźņMAŚå–'ūĒ ČÓ4ķ.ņ{aWćåäā¶[ĆPMxŠF„f{ŠžÆįbŚTmĒō`b0 Ozć5 ^ņx  ;\ʁ¤õĆEn×ņ„p@ōŖĶØi·öó²Ę±FŁUņ=č‹^DŃ„›|›ć—ƒēSų‹Q3”qH²Wž†€ČŃ|=ĒŽÄCŲŖī;z-M ]:Jæ)<š+U;+ĘÖŌøPŁué\{k}„ ;Q•°?z¢[öøš$1ÉbH„rĻ}sū‚¬{T³ėvėą jź%¹µ„C °[ĒCiuž#źM9ķjŅoźvv–ģ쑉€ć8>zšµ§ųGQ†Ń-uX s}Š£{ÓJę±6…›O®&Q h7süUÓxcÅ%åŅX »[IW÷a :šj%ž!³š+Ł‘YYOŻd †üEqęĒŹ•IF$œōļJĄz&ą›M~Ö`×ŃXmŒœ¹źŲéŠń+ļkļK¾¹v¼Å¤“ŹŖ(Ø¢—Ų"‘ ³Ļī—iēø®GIķ-Żäb©ŪŅ“‰²Fę‘ā­§–3>Ä~7fØė-ģ­nīłĒ_jVŽz2śuÓ¬ĢÉ)ņ{Öµ¼?%Äļ<ģĻĖĻņō§ŹŹå:IČ^Üßļn@ĢLՋ p}ŖIv†=Ŗ ‹QŠÅŸK†ėXctßø?(õŗ“«m>pÖRÉ,<}įČ5”Gq¦JŃ)fQózšģķ/lćņ^Uׂ} •XŹń#}¾[¹]¹91“^y„jI.Ÿrn•÷”Nrā¢R:#¹Üiś’Ł­ķČły GóŖ ń²ėRY0¶®pĄ½Y›4y]ę‡ka$’Y£ż™I( éŽŗOI$šĒę[„AÜ:ńPåmŹ‰4›[¹<É"HŻNT‘VnÆą†É\(‘Ōć²l¤ŗ–ž!”鬱§˜Ę1^_©jבß$ČFsH觬ø×µi¬a€Ü‡ 3“\ÅÄsÜ])[vcĘN8ĪČÅ$Łgh6K‘»5wO³¾‚ęģĻw,ń“…±…śR4GZ--¬ģg澚;Xb„"C‚Ź:ķ÷ÆČό^!üAÖ5K٧tŒ}šŻ‰ĪbėĻŠńųVu]‘ŻCs„šÄMŖ]G„é¶’l»‘‚"+rĖ‘øž×ŲZO†‚¬m,aŽh-˜,­¹·nb2yļĪkÄÅÕ¶‡÷/Ń…Ōē‰Ī'†Ōāü޳ł„Ė’3­ŚE>›ł„²ČćoÆå^¹…ØˆĪ‡ĶR:Jņ%RģžäŒu:ŻÉ£ŽŪjŗs$WQ’cČĻQ‚ |ŪńŹĪ]CT±·t‹ui,±²Ē…2+/ų7ėRхIØÜśĻį©ąßŽ>šĶµŻž³¤B–÷3gĖvąm=óX?|qįI§Ś^ߎčĒoēČX§Ž}+*;r|T]NGџ!xūĆ‘uK€jå“#Ŗē­YšÜįm£‹–u8<÷®:ŒśJi-Ž®ö}±4R²ˆ—®xė\Ō·QYĘņagq8²Œ¬iN„“!±ń:_ī0ɐ”źŽwå]Ī“¬ŲįD²fįG­mt)¦tńÜĘĢT°žTŪ–š)ÓĖc€*§O¹()nx—Šž$šĘ”ā’ Gm‰0.-$$m$’YpķžzÖĒ€|Uć’‡—ShÖŚóhÓ#o@HTÉč1ŌU7m…, whÓńĶĪ­e1“¾žāEŚ:żkĻüÉmÓeĄi3Čl걕MItTIm„Ā%k@\4yŒŪ½s¹[CnhAzH(Š«t}ŹT‡ķŽ­ŗr÷„:Z€DŒpź~•½£i’f½†V·/ `ūY ]…V„¶>ĄŅćAøŗµ–Ho•žź’­év4«$fčŽ,ŗ¶³øŅn$œ<‡lˆÄüĀ¾Óżˆąŗš/ķEš+Ēzµ…ŪhkØĻ¦’Øp‚īŻ£G8ģ­“×”J£Ųų>=Ć:ł&7ēJ¤W«„’üĖšQ/Šś·Ēߌ3Ę.£}o†üs&“”ŪĄß,ĢUZI_ż£ÓšÆĪhÆ.ģ5;+Ķ.Ż Ōķ&ą:ƒü«,MFŪ<ļøv9O `°JśAIßł§ļæ¹É„ä|MāĻüH×|OńwǾš¤zf•z—ŗ„½«mŁę—Tó†Ī= zŸĆ?§ˆ“ KėIĢ ~éī> ×gsöÜ3[v=/VŌ.µ— twŹVcÕ°1]‡†¼}ż‰&¬m‹Bņԃœ·„tS6©UE]ž]ćļ<9¬5Ž©é·B@ rsģ ŌūrI J¤•Ę>µŗvŲĶÕNĘć–rb ņGjÄææ7бĪäØ+پ“åSATĆ©-Mķā/ˆü-¢juµżÅփ%“–ŅZĪL‘łL>e sōƜÖÓL:Ę£§Ū‹O?oČ£ 遌°•S‚®_Ż#هōż 6§¾hŚŌö>Ō¼9d±Ū闆6ø`ł™:ö„°³Ü m;sŠb”Jś³ŚĆau7¬tŪ{o“I(UK žµœŗ¤1”’Ō«ÄęĮéWŻ”JĒ_ö՛Ėۜć9=…Wžwg8AĮ5Õt;턊Wh[YŽ»ˆ=k²ż–>'čpź>+š­ÓYN)ݬŠÜ®Iń?Źŗį-ŸĪ!/bŚčI^1ż—­/’`’Ś XńšYź·ž »¾²ó1˜ÄvĻ"–Ļ@Ä/įĻ„6 æžÓš/ƒŲÜ4”4ųō`€Ōė”lĻKū'œVī1$D}Gø®w]H­£?2y,ūsc’k’©żFMhjiōm_Ā>9Õ„»°µY"—*KĒē_#ėz5žŸc.½£Į4–Öńn"ÜIDĄēœāø*¦ĻF”o kŠ_Eiq‰*²īēÆć^Ė§Üžė€wz×3:eµĖw¶kZ}֟pŅ£J„S‚­x‰|?Ø“ói×¶ń¦Ó“0čąwśŌĄók;æ  ß§Ķ§%·øµ›ÉĆŽǃ_KŚhZTwöS_«Éz™*=śƒ[AuŻ)(ܾtynŻL0bR@!{Öm֏ØA"ˆ[lŖ{šiÄûijGmsy£œćƒ[:kBŒ–A§c JdzxsöSųĻūH%ę£šcÚ§s” mFKėļ!X:’89lcŲqė_5źžk7–^?šV«į›Ė) sü†Xā ć&AĘ*ż”­sĪĆęųzµźaa+Ō§ne®œŚÆ-mŃśF›ć=7Y·UŠā ‡b`EkÅvņ§Ėä68ØjǤ™Ļ/‡l|MńĮzˆ/Æ4]łŽ/bm¢ĒČIķĻņÆXńæ‹üyąß ųƒą7ÄMŪĒZžĮń °Żö|åO=N?Påaž;¦ø·o5Nüœ‚{V¼/ŹøŁ„ĪDc©fé¢(|źzTźļs!öžõ<冐į.ä‰stq$srŒöā±õ/^Ķ®C|°Ū@%P. ąN=ł&“LÅĘǦ[]Ē-¼fGŪĄ=zÖ„œÖūü™aK‹fįļ[)÷2tĪ ēMžÄń$–qF#ŅåC, ¼ĻB?/ÖŗŪ ³0łæ’„Ū[Ęx¢Ń#y¦u/"ć©ć8<_eų_Ā^ ųžöž/æŅ¬“Ļ[‘ĶmC( ņvō®ŚTĻ”Ēb4l÷ Oąw‹"ŠĘ½įKļµŚl,‰‘‘Õs×?y_Š4oĻ¢\čWś-ż­ĶÄEDńŹ¼k¶ŅGĶĘ­7-w>Fų‡ūGĒoį”ų3§½ę®CqåßOt…ZU^>\ćµu’|A ZÖF|•" Kķ=3Šøž½*VZu>ö¶[I6­¤ė4_ĀĄufSä«4„…ēߊŻĮ“\bō>-ųéį‹dųwń[W³˜[D–,±O”Oóé_šŽ‰GÓLL™ņ§‚p2kФuŌś =wt™ą_µ}ʐßtū{L3‡šCe4k–Vļü~pż™µ;„“ŽCår}=+ÆŖ?†ž•›Ļ(Æśuż.gŅ>±6ĀÕd{‡D ąVŌw w*ÉĮž3Õ¾µīŃZŹ5ē”éz/„­õ‹«MAdS=“—Ų:’U{vŸ­ĆmåZ&EĘW<×\įād}%šĶgŽģźWūātĀq÷OÆņÆ{[ƒĘŠ ÆLVхĻ«3/µéä—Ė1£Æ¬6”¬­å”Ö§‘Bęļɒ޹ä[¶‘¤ū>f$x=h9‹ØQ2p§ŒY‹$°oT&Fķ“LĮ¢ōó\\ŪݰŪ{vØl“÷¹‘Ū·ĒÜō5“Y”ŃænīÖŚ[˜­¢ē–εk¤–R#Ūż÷š‘Ņ™™ŚE—›ēȹĀŗ« ā,ī`|`.8
    ...
    Click Here to have the test server send a big picture by http.
    Websocket connection not initialized dumb increment-protocol
    The incrementing number is coming from the server at 20Hz and is individual for each connection to the server... try opening a second browser window.

    The button sends a message over the websocket link to ask the server to zero just this connection's number.
    Websocket connection not initialized lws-mirror-protocol
    Use the mouse to draw on the canvas below -- all other browser windows open on this page see your drawing in realtime and you can see any of theirs as well.

    The lws-mirror protocol doesn't interpret what is being sent to it, it just re-sends it to every other websocket it has a connection with using that protocol, including the guy who sent the packet.

    libwebsockets-test-client joins in by spamming circles on to this shared canvas when run.
    Drawing color:
    Websocket connection not initialized Open and close testing
    To help with open and close testing, you can open and close a connection by hand using the buttons.
    "Close" closes the connection from the browser with code 3000 and reason 'Bye!".
    "Request Server Close" sends a message asking the server to initiate the close, which it does with code 1001 and reason "Seeya".
    Websocket connection not initialized
    Server Info
    This information is sent by the server over a ws[s] link and updated live whenever the information changes server-side.
    POST Form testing
    This tests POST handling in lws.
    FORM 1: send with urlencoded POST body args
    Some text:
    FORM 2: send with multipart/form-data
    (can handle file upload, test limited to 100KB)
    Some text:
     
    Looking for support?
    https://libwebsockets.org, https://github.com/warmcat/libwebsockets
    Join the mailing list: https://libwebsockets.org/mailman/listinfo/libwebsockets
    test.js000066400000000000000000001576531476025525100346470ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-origin(function () { function check_file() { var f = document.getElementById("file").files[0]; var max_len = 100000; var dis = 0; if (f) { if (f.size >= max_len) { dis = 1; document.getElementById("file_info").innerHTML = "File larger than " + max_len+""; } else document.getElementById("file_info").innerHTML = "File length "+f.size; } else dis = 1; document.getElementById("upload").disabled = dis; } /* * We display untrusted stuff in html context... reject anything * that has HTML stuff in it */ function san(s) { if (s.search("<") !== -1) return "invalid string"; return s; } /* BrowserDetect came from http://www.quirksmode.org/js/detect.html */ var BrowserDetect = { init: function () { this.browser = this.searchString(this.dataBrowser) || "An unknown browser"; this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) || "an unknown version"; this.OS = this.searchString(this.dataOS) || "an unknown OS"; }, searchString: function (data) { for (var i=0;iError" + exception); } } var socket_status, jso, s; function ws_open_status() { socket_status = new_ws(get_appropriate_ws_url(""), "lws-status"); try { socket_status.onopen = function() { document.getElementById("s_statustd").style.backgroundColor = "#40ff40"; document.getElementById("s_status").innerHTML = " websocket connection opened
    " + san(socket_status.extensions); }; socket_status.onmessage =function got_packet(msg) { var s; console.log(msg.data); jso = JSON.parse(msg.data); if (jso.wss_over_h2 === "1") document.getElementById("wstransport").innerHTML = ""; document.getElementById("servinfo").innerHTML = "" + "" + "
    Build info"+ san(jso.version) + "
    Server info" + san(jso.hostname) + "
    "; s=""; var n; for (n = 0; n < jso.conns.length; n++) { var d = new Date(parseInt(jso.conns[n].time, 10) * 1000); s = s + ""; } s = s + "
    client " + (n + 1) + "" + san(jso.conns[n].peer) + "
    " + san(d.toString()) + "
    " + san(jso.conns[n].ua) + "
    "; document.getElementById("conninfo").innerHTML = s; }; socket_status.onclose = function(){ document.getElementById("s_statustd").style.backgroundColor = "#ff4040"; document.getElementById("s_status").textContent = " websocket connection CLOSED "; }; } catch(exception) { alert("

    Error" + exception); } } function reset() { socket_di.send("reset\n"); } function junk() { for(var word = ""; word.length < 9000; word += "a"){} socket_di.send(word); } function on_pmd() { socket_status.send("{ \"RequestType\":\"DDoS\", \"blob\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAJbElEQVR4Xu2af4xUVxXHv+e9O0OhIEibgrRlF8rOG6CWKiumrUlTo6byj6mmNFta2DdQsRJJrP5j+0cnjSVp1BoSU1yzO28LEeL6h7GJNhpJNa2CBQ1gd9k3QPlRBU2LLV0W2p173zFvZvbtzOybmbd7J9DEd/+befece97nfe+95/4gxEWLAGlZx8aIAWqKIAYYA9QkoGkeKzAGqElA0zxWYAxQk4CmeazAGKAmAU3zWIExQE0CmuaxAmOAmgQ0zWMFxgA1CWiaxwqMAWoS0DRvrQJ3ujeb17Hrx6SuzLwV32x7VzO+1pj3HJprJue8BcBQCSONRzr+2RrHaO2OtHDc1wDcUwqOj0s7nWpVoDp+hOMeA5Au+zggbesuHX+Vti1VoOh3j4BxRxEf8xmVSbe3KlAdP2bOPUmEpaXviiGZsVbq+IsBxgCnpp9YgVPjNan2RwagmXMfUpnUAEAc9k6Rx8AHB0zzy3euU5nUXk02RXMzl+9Ssw8PYN06FeYvOkAmM5dfpzLWL6LGFXkSMR13jIAEmKXMpBM6AIXjeih+BVLqTEcSWfJ/T71ks4bZ9vAYgU1/epC2ZegAFLnhAogEM0tV5x1r/UcGKBw3UJ1sTyVwH8laZ5EU2DO4WCTFmXFbOTbnemxZdHnq9AAMvDVTjF4ObKVS7di8IvA97jOSArNsiLZ8oGBpW5HYRKrkB1IFcGwkiS2dhWkB7B1qE6Z5uiUAew7NEsk5o4EveEtgLw98TwngwIApRlcFoogBVnzdSArUAWg6+T4QS3U69Xi98eiqK7A4vnX1+YsldWbPJmSzk8fJa6FAP67FXTv9sVLZqU1k9rvHibGsmKQzBlTGeih0gqgcA69CFxaO+zKA+4uxEF6W3dbaSXFdA4Bmzt1DhK5SLHycTMd9n4A5pT9oSNqp0GXO1VagcFx/cphZhnZF2tasjwJAkRs+CqJPFvEBIzHA8a8ScQyMAdbbTGgJwAY7FS3LA3edXCyUbJoHitzwKIhK3Zb5ssykr5/Uha9BHigc9whQ3nHyu7DIDe8A0TY/OI/xtJexngnP5ocLRCRAkLLbas1KhOGps6lE2MxvOO6TBvBsMS7Pe8rbtHz7pLhavRLpdwtgCDCkzIS/o9Gff8pg/n55EtlRSqT7h+8B0xhs62AYvHJlf524QZ3duzs0pfCT7aj7gQNsmqPHH1V2qr9+ewBePHYXIICNHfsb1TNzw7Y6e343svdNWh35dpHyQL9iKUV5VGVSu+qt94tx7DrZCa8wA93pP0deiTR80fLDyACjOGthncgAp9FmqwG+CsbnynHkpW1Z04ip5Sai3x0CY3kpU+P9sjt9d6saaSlA9JybJWaMXARDyRFjLrZ1fNiqQLX8DAwmxai4CCAhzblzsWFhsH7W8lvM8eOiRSAGqIUvVqAmvhhgDFCbgKaDqY+B2ayBBV2fQJJnwzQlSL6HjcsvhMaRHUwG/2dXjjWMtXdwPjBjPryCARKXIcQ7sJd8EOn9fFuTbkCBCDOMUZw69596SXWVv4HB2bicXAClBARdwqm95+stEurFER1gz6GESM45DGBFmLNJW+C5E7cKUmfH68pkoh3rl046r8CL7s3CQ+hdFQY2KNvaXS94o8/\" }"); socket_status.send("{ \"RequestType\":\"SendImage\", \"RequestID\":\"283463389\", \"toType\":\"toUser\", \"toID\":\"1036\", \"fileType\":\"image/jpeg\", \"blob\":\"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAGqAoADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9U6KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArlviX43Pw78H3fipdHl1RreSGJLSKQRtK0kqxgBiDjlvSuprhvjNpmoav4INnpljPdznU9Ok8qCMu2xbuJmbA5wFBJPYA0AL4r+K2j+G/hxH8Rra0k1G3ureOezto3CPOXXcFBwcHbk9O1bmg+L9H12wW7juEimSygvrmAtlreOVCy7jjngN+VeOal4L8Vz3Wv8Ag99DvG0Hw5b317pEixMUupLpS0UUf94w5ZMD1FWdLfW/CFxqcF34S126l1vwxpttZfZdPllU3EUMitFIyqREcuOXIHXninYD0y8+KPgCwNkt34ntU/tCGO4tyA7BopPuOSBhQc8bsVYXxtpEc+tHULm2tbPRVheW5afIKyAkEjHy9OOTnNeEHQNX0bw/pTQaH4l0/W38NabbNCNFkvbS/kjgUeTMqrmF1bKncVx1rZ1Lwz4tuV1bVL3wpdSJDf8Ah+/urCGBmFzFAxaeOIf8tNv90ZzgDvRYD2fw34w8NeLoppvDurRXqwNslChlZD1GVYAj8q0rq9tLIRtd3CRCVxGhc4BY9Bn3rlfBl/Z61reqazp/g660q3kjhiW8u7SS0muyoOR5UiqwVc4DEc89q2fFQSTRprVtFk1VrjESWyjhmPQs38AHXdkYx60gNivPb74uwWXhPW/EX/CPzyXmjal/ZQ05Zh5k85ZFjCtjjcZFxxXXeGdO1LSdDtNP1bUPtt1CmJJvXngZ74HGcDOM4FeYXfhPXm+Nq28elXDeG7yaHXbi68s+SLmGORRGW6bi7RNjr8hoA6XU/i3p1pYeHr+w043a+INPk1NMziMQwIiNuY7T/fA/OtS8+J3gnSntLbWtftbO6u4IpxESzhA4BG5gMKPc4ryPSvBHipIvGdheaDei20HT7jRtB/ct/pMLzSSK0Yx8w8t4k47oaj8XaLqVglzJpmjeIbfV7rRLSAWw0WS/sdUdIiBFJsX9yQSVJZhgHPanYD1B/jD4PsfEWseHNdvo9Nm0q7itUeRiwn8yGOQN8q/IP3m3k9R1ra8ceLoPBfgzVfGTWpvYdMs3vPKSQL5qqucBsHGfXFebDwpq15YfE681LwvIuoaotuLdRbl/NK2EAKxHHzgSBxx3Bre+IukavqHwA1TRbPTbq41GXw75C2scTNM0vkAbAgGS2eMYzmgDt9c1xNF0CfXXiRlhjWQo8mwckDlsHHX0rMf4leCYNUg0O78QW0OoT+WogO4gO+Nql8bQTkYBIrjfFvjJfFvgjUfDeleE/Fq3s1qgQXHh68gQlXTI3PGBnr3rjdc0rWtM1K8Ph3QdeXVbq6tJW0250iS50/UGUIPN89V2wEYOSzfKVziiwHsPhL4k+GfGer6zoujXLvcaLcfZ5gyMA3yg7gSOmTj8K6qvPfh9aT6V418b2d3ot5bG81NL22uDZusE0Jt4l+WXGwkMrZUHI9K9CpAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUVma34m8OeGvsf/CQ67YaZ/aNyllafa7hIvtFw/3Yk3EbnPZRyaANOiisbQfGfhHxTc39l4a8T6XqtxpUohvorO7jme1kOcLIFJKHg8HHQ0AbNFZ2u+ItA8MWa6j4j1qx0u1eVIFmvLhYUMjnCoGYgbieg6mi08R+H7/VrnQbLW7G41KzjSa4s47hWmhjb7rOgOVB7EjmgDRoorO1/wAQ6D4V0uXXPE2tWOladAVEt3ezrDChZgq5diAMkgDnqRQBo0UgORkUtABRVbUtT07RrCfVNWvreys7VDJPcTyCOONB1ZmPAHuaNO1LT9XsYNT0q9gvLO5QSQzwSB45EPRlYcEe4oAs0VT1fWNJ8P6Zcazrup2un2FonmT3V1KsUUS+rMxAA9zU9tc297bRXlnPHPBOiyxSxsGV0YZDAjggggg0AS0UUmRnGeaAFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooqrqGpWumQ+dcsQCcKBySaaTk7ITairstUVz3/AAmdh/z63H/jv+NH/CZ2H/Prcf8Ajv8AjW31ar/KZfWKfc6Giue/4TOw/wCfW4/8d/xo/wCEzsP+fW4/8d/xo+rVf5Q+sU+50NFc9/wmdh/z63H/AI7/AI0f8JnYf8+tx/47/jR9Wq/yh9Yp9zoaK57/AITOw/59bj/x3/GtDTNcstVLJBuWRRkow5xUyoVIK8kVGtCTsmaNFFFZGgUUUUAFFFFABXin7YfhS78TfAbxBeaUCup+HVj16ykUZaOS1cSkr7lVYfjXtdVtRsLXVLC50y+hWW3u4nhljboyMMEH8DQBxNz8UNOb4IH4tQyrHaz6AurREH7peEMg/wC+mAr52/Zu8OXnwh+KfhZtT3xn4seHLi9u1JO3+0Y5DcA/UxMwA9qxNG1PUX+COl/s0vcNJrFt46m8ITg9Xs7aYzE/TyvK9sGvaf2ptPTwl4J8LfEvS4WB+HGuWGolYx8xsg4imT6eU7E/SgBn7Qif8Jp8Ufhb8KU/eQTanJ4h1KP0gtgBG3/fbH8q6zw7rXw8j+M/jO3stIltPENlpdrNq2oSSnypbfLbAATgbcEk4rmPh40fj39pfx146jdZ7DwtYWnhrT5lOV8woJ7gA/70gH4Vm6DDpFx+0b8XLfX7mO30yXwzZpeTSSCNY4T5gdix4UAZ57UAbEH7S2r67YyeJfAvwY8TeIfDCFzHq0UkcX2iNTgyRRN8zrwcHIzXK/tQ+P8Aw78Sf2QNf8X+Grh3sriWzVllXZJDIt5EHjcdmB6irvg3wv8AtE/BnwxZ6B4BPhj4ieEbGEDSkkujZXv2Xqi7yDG+FxghuRiuE+Mvivwf4x/Y78djw34Tl8MXVtq8EOs6TKuJLe+a7hMhPJB3cEEcGgD2LU/2htUjt5tY8J/CHxL4j8O2u7fq9u0cccqL96SFG+aROCQeMjpXo/gHx34f+JPhSx8Y+GLhpbC/Qsu9drowOGRh2YHgitXTNNsdM0q10mxtkitLaBIIoVGFWNVwFA9McV4l+xt8vw28QQrwkPjDV0Reyr5q8D86AO2/aF/5Ij40/wCwRN/KpPgF/wAkX8G/9giD/wBBqP8AaF/5Ij40/wCwRN/KpPgF/wAkX8G/9giD/wBBoAn+Nt74T074UeJb7xzpcupaDDZFr+0ico8se5flBBBHOO9Y3iH4w+Gfh/4c8Jabo3h/UtV1HxDZxLoWh2QDTyRLCG5ZjhVVcZY1D+1X/wAm8eOv+wWf/Q1rktd+Hep+Lrb4aeLPh5440vRvHnhbQIns7W+Hmw3NrNbxrKskaneFPHzAH9aAOn8P/H+ZvF2neC/iJ8OtY8GX2tFk0uW6lSe3unUZKCRcbWx2IryTxZ8WPF1p+1VodxD8JvFM/wBj0TULaOxjeLddruT9+g3Y2jHfnmuq174jeNPDus+HbL9o/wCEumHSm1SKHT/EWk3v2m3t71uI2eMhZI89Bwa1vEP/ACeL4Q/7FbUv/Qo6APcrOeS6tIbmW3e3eWNXaKT70ZIztOO46VNRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXKeNSfNtRnjax/UV1dcp41/wBda/7rfzFdOD/jI58V/CZzVeear8Q9V0r4tWHg6e3g/sa8tlDT4PmR3D58vJ6YYgL9WFeh15/4t+HOo+IdY1fVrW/t4JLnTYobB23boLuKQSRyHA+6GVTxzxX0eF9lzNVdrf0/keFiPacqdPe5Qb4sXMPxG1fRbiGIeH9Js2Zp1UmWSdCBJjnGFZtv1U11Ws/ELw1oKeZqc8sajS5NX3bMj7OhQHv97Mi8Vx8fwf1MWcEMmq2rTto89reTYbMt7LIZXlAx90uSfXmn/wDCAePdSujfaxceHo3h8PzaNDAvmTxu7PEdz7lX5SI8EDkZ4zXVKGFk009Fo/Pz+ZzxniIp3Wr/AK/A2n+JNneQwG3t77S5jfQWzx39n8zrIpK7drYwcdcnGOlWrP4m+H77V49LtrXUmimuTaRX/wBm/wBFeYdUD5znIxnGM965DTvhN4lW4M00+n6fafbbW5XT4Lya4iTyg+91aRQQW3gbeny1veGPCXjXw+bTQFvdK/sKyvJLlZlLm6ljZy4jKFdo+ZuWDHipqU8Mk+V/j/V/QcJ4htcyO/rV8LkjWoAD1D5/75NZVavhf/kNwfR//QTXk1v4cvRnp0f4kfU7uiiivBPZCiiigAooooAKKKKAPEbP9mu3tf2kLv47HX1ayngLx6P5JxFetFHG9wGzjJEYzxnnrXqHjzwlZePfBWueC9RIW31uwnsJGIztEiFdw9xnNb1FAHl/7O/wZl+B/wAPh4Tv9eGt6ncXk99f6j5Rj+0SyOSCQSTwu1eT2p0HwVtp/iH428Wa3qEV7pfjPSItIn0/yirLGoYPl88hgxHAFenUUAeC+G/hh+0R8OdFh8D+CPiV4fvvD9kgttNm1nS3lvLK3UYSPcjqsm0YA3L0Apus/suyan8E/EXw0HjBpNc8VX8Wp6prdzb7vNuFmRziNSMLhNoGeM175RQAijaoX0GK8/8Agp8L7j4TeG9T0G51iPUm1DW73VhIkJjCLOwITBJyRjr3r0GigDm/iP4Tl8d+BNc8HQ3q2b6vZvarOybxGW7lQRn868h8L/CT9qDwj4e0/wAM6R8dPC62WmQLbwB/C+5gijjJMnNfQVFAHhmsfCL46eNfBviXwX8QPi1oWo2euaebSE2ugfZzBIWB3kh8sMDGOK0PGHwM128bwh4o8B+MF0Pxh4Q09NNivHtvNtr238tUkimiJ5VtoI5yp6GvY6KAPDL/AOEXxa+Juo6Snxj8ZaIdB0i9i1AaVolg8Qu54jmNpZJHZtoPO1cVr/FL4ReMvEPxB8PfFD4c+MLLRNa0O1uLGSO+sftMFzBNjIIDKQRtGCDXrlFAENmt0lpCl9KklwsaiV0XarPjkgdhntU1FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFZ+r6RDq0IR2KOnKOO1aFFVGTg+aO4pRUlZnKf8IVN/wBBBP8Av2f8aP8AhCpv+ggn/fs/411dFb/XK3cw+q0uxyn/AAhU3/QQT/v2f8aP+EKm/wCggn/fs/411dFH1yt3D6rS7HKf8IVN/wBBBP8Av2f8aP8AhCpv+ggn/fs/411dFH1yt3D6rS7HKf8ACFTf9BBP+/Z/xrT0bw7FpUhuHl82XGAcYArYoqZ4mrNcrZUcPTg7pBRRRWBsFFFFABRRRQAVFcPcRqDbwLK2eQX24H5GpaKAKX2jVP8AoGx/+BH/ANjR9o1T/oGx/wDgR/8AY1dooApfaNU/6Bsf/gR/9jR9o1T/AKBsf/gR/wDY1dooApfaNU/6Bsf/AIEf/Y0faNU/6Bsf/gR/9jV2igCl9o1T/oGx/wDgR/8AY0faNU/6Bsf/AIEf/Y1dooApfaNU/wCgbH/4Ef8A2NH2jVP+gbH/AOBH/wBjV2igCl9o1T/oGx/+BH/2NH2jVP8AoGx/+BH/ANjV2igCl9o1T/oGx/8AgR/9jR9o1T/oGx/+BH/2NXaKAKX2jVP+gbH/AOBH/wBjR9o1T/oGx/8AgR/9jV2igCl9o1T/AKBsf/gR/wDY0faNU/6Bsf8A4Ef/AGNXaKAKX2jVP+gbH/4Ef/Y0faNU/wCgbH/4Ef8A2NXaKAKX2jVP+gbH/wCBH/2NH2jVP+gbH/4Ef/Y1dooApfaNU/6Bsf8A4Ef/AGNH2jVP+gbH/wCBH/2NXaKAKX2jVP8AoGx/+BH/ANjR9o1T/oGx/wDgR/8AY1dooApfaNU/6Bsf/gR/9jR9o1T/AKBsf/gR/wDY1dooApfaNU/6Bsf/AIEf/Y0faNU/6Bsf/gR/9jV2igCl9o1T/oGx/wDgR/8AY0faNU/6Bsf/AIEf/Y1dooApfaNU/wCgbH/4Ef8A2NH2jVP+gbH/AOBH/wBjV2igCl9o1T/oGx/+BH/2NH2jVP8AoGx/+BH/ANjV2igCl9o1T/oGx/8AgR/9jR9o1T/oGx/+BH/2NXaKAKX2jVP+gbH/AOBH/wBjR9o1T/oGx/8AgR/9jV2igCl9o1T/AKBsf/gR/wDY0faNU/6Bsf8A4Ef/AGNXaKAKX2jVP+gbH/4Ef/Y0faNU/wCgbH/4Ef8A2NXaKAKX2jVP+gbH/wCBH/2NH2jVP+gbH/4Ef/Y1dooApfaNU/6Bsf8A4Ef/AGNH2jVP+gbH/wCBH/2NXaKAKX2jVP8AoGx/+BH/ANjR9o1T/oGx/wDgR/8AY1dooApfaNU/6Bsf/gR/9jR9o1T/AKBsf/gR/wDY1dooApfaNU/6Bsf/AIEf/Y0faNU/6Bsf/gR/9jV2igCl9o1T/oGx/wDgR/8AY0faNU/6Bsf/AIEf/Y1dooApfaNU/wCgbH/4Ef8A2NH2jVP+gbH/AOBH/wBjV2igCl9o1T/oGx/+BH/2NH2jVP8AoGx/+BH/ANjV2igCl9o1T/oGx/8AgR/9jR9o1T/oGx/+BH/2NXaKAKX2jVP+gbH/AOBH/wBjR9o1T/oGx/8AgR/9jV2igCl9o1T/AKBsf/gR/wDY0faNU/6Bsf8A4Ef/AGNXaKAKX2jVP+gbH/4Ef/Y0faNU/wCgbH/4Ef8A2NXaKAKX2jVP+gbH/wCBH/2NH2jVP+gbH/4Ef/Y1dooApfaNU/6Bsf8A4Ef/AGNOSfUWdRJp8aqSMsJ84HrjFW6KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACioZry0t/8AX3Mcf+8wFUZvEekxcfaN5/2VJosBqUVz03jC3GRBau3+8QKozeLb9/8AVRRxj86fKwOvorg5tc1Sb7124HoOKjtdUvba4WcXDtgjILZBFPlA9AoooqQCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACori5gtYzLcSqijualrkPFsztfpAWO1EBA9zTSuBqzeK9NjyIxJIfYYFUpvGMh/497NR/vtn+Vc3RV8qA1pvE+rS/dlWMf7Kj+tUZtRv7j/XXcrD0LnFV6KdkAUUUUAFFFFABQOtFA60AelDpS0g6UtZAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFcb4r/5Cv/bJf612Vcb4r/5Cv/bJf61UdwMaiiirAKKKVVZztVSSewFACUVch0fU5/8AV2UuD3K4H61eh8KanJ/rDFF/vNn+VF0Bi0V08Pg5BzPeE+yrV2HwxpUX3o3kP+01LmQHF0DrXb3ui6b9ilCWqIVQkEdQRXEDrQncD0odKWkHSlrMAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArjfFf8AyFf+2S/1rsq43xX/AMhX/tkv9aqO4FfSNGl1UuVkEaJwWIzzW7D4RsU5lmlkPpnApvg//jzn/wCuv9BW/Q27gZ8Og6TD92zRv9/5v51djhihG2KJUHooxT6KkAooooAKKKKAIbz/AI9Jv+ubfyrzoda9FvP+PSb/AK5t/KvOh1q4gelDpS0g6UtQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVxviv8A5Cv/AGyX+tdlXG+K/wDkK/8AbJf61UdwNPwf/wAec3/XX+grfrA8H/8AHnN/11/oK36T3AKKKKQBRRRQAUUUUAQ3n/HpN/1zb+VedDrXot5/x6Tf9c2/lXnQ61cQPSh0paQdKWoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK43xX/yFf+2S/wBa7KuN8V/8hX/tkv8AWqjuBp+D/wDjzm/66/0Fb9YHg/8A485v+uv9BW/Se4BRRRSAKKKKACiiigCG8/49Jv8Arm38q86HWvRbz/j0m/65t/KvOh1q4gelDpS0g6UtQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVxviv/AJCv/bJf612Vcb4r/wCQr/2yX+tVHcDT8H/8ec3/AF1/oK36wPB//HnN/wBdf6Ct+k9wCiiikAUUVDc3dtZp5lzMsY7ZPX6UATUViy+K9MQ4QSye4XH86j/4S+w/59p/yH+NOzA2Lw4tJs/882/lXnQ610GqeKBdW7W9pCyBxhmbGce1c+OtXFWA9KHSlpB0pazAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiioLy9t7GEz3MgVR09SfQUAT0Vy9z4vkJItLYAdi55/Kqh8Vaqe8Q+iVXKwOzri/FDq+qttOdqKp+vNNfxNqrqV81Fz3C81mO7yOXdizMcknvTirAdV4P/AOPOb/rr/QVv1geD/wDjzm/66/0Fb9S9wCiiikBXv7tLG1kuX/gHA9TXBXd3PeztPO5Zj09h6Cuq8WFhpqgdDIM/rXH1cUAUUUVQBQOtFS2sTT3MUKjJdwv5mgD0UdKWkpayAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACuH8QX73l+67j5cR2qP5mu4rzzUI2ivZ43HIc/zqo7gV6KKKsAooooA6zweP8AQpj/ANNf6Ct+snwzbNb6WjMMGUl/w7fpWtWb3AKKKKQFXU7IX9lJbHgsMqfQ1wU8EttK0MyFWU4INej1UvtLstQXFzECezDgiqTsB5/RXUyeDoScxXjKPQrmmr4OT+K+P4J/9eq5kBzFdH4Y0h/MGo3CFQv+rB7n1rSs/DWnWrB2VpWHQv0/KtUAAYAwBUuXYBaKKKkAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK5/xFocl03220XMgHzr/e966CimnYDzZ0eNtsiFSOxGKbXok9laXP8Ar7dH9yOar/2FpH/PjH+tVzAcGAScAZNbOjeH57yRZrpCkAOcHgt7V1EOm2Fucw2kan6Zq1ScgEVQoCqAABgAUtFFSAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUV4145vPGfw28Sv8A8InG2oW3jeZbK0jnmythqTD5ZOTnyioJIHdR60Aey0V4pot5490ix1zSvB+pWctl4LPk3UupK8s+qXIjE07bs/uwS5A68+grpPCfxLv/ABPLr08dvFFb2Oj2WoWyEfMJJUlLqx7gGMYp2A9HorzjVPEWp678BR4qlYR3+oaBDev5JKASvGrHb3AyaxtB8X/ELw7NpFh4ludIvYNT0CW9tgmYPIlhiVgskrHDKRnLHGDSA9gorwvw/wDFbxvqGrSaLDrOj61PdaLcajbS2dlIkEU0WCYlkJ2zAhsblP4Vrat8a7qy0hPENnZxT2lj4dl1fUI8c/aMhI4Qf4cvv59ENOwHr1FeA/8AC8fFNlb38S3mn6zP/Z5u4JYbCa3jt5lkRTE+8fMCH4bg8Hiuz8P+IfHL+K7fwp4tu9Omi1zRZdRtZLOFo2tmVo1ZGyfm4k4PHTpRYD0uivJNOtPG2hfFTw/4WTxTHcaRZ+H4xLHLAS8/l/Izls/fLDOfTitz4oeLdY8OzaXZaVruk6QL1pDJcXiGeVto4SKBSGkJ7kdAKQHf0V4x4c+KXjbxtpnhvStE+wWWs6oL57u7uLd/KjjtZjESsJw25yM7SRt71l6B4v8AH2malq3h1prKTxFrPij+zop3LNbQItuZXkCHnGxGwvHJ/GnYD3uivAL3x54w+HviHxjdeKLy0vbyKPTbW0liV1t2MgbEhi5K4AOQM5IqxafG7xKTceH7aSy1fU7uezttNv1s5bW3Ek8yxESK4z8m4NwTkA9KLAe70V5R4afxxa/GWXTPF2qWl6q6BHJDJaI0UbgzSZLRkkBgQRnJyAPpTvin4+8SeHNXaw0bX9H08Q2LXSwy27Xl1dOOiiGM7lX/AG8HrSA9Vorxaw+I/wAR/GCyT+Gm0nToYfDljrjG5haUl5oi5iGCOOOvb0Naum/Fy9tlj1TxNBBBpt14ck1iFkHPmwf69M98g7gPRTTsB6pRXC6v4n8W6D8JD4q1C2tR4gisIZ5odpESzuVDJjrgFiPwrmbfxD8Y7vxPH4STVPD8ct5pX9rrdm1ci3UMqmLZn5yTIvzZHAPFKwHsFFeY/Dn4ma14vv8AQre/treFdR8PR6lOsYJxP5jo20/3fl4FcrffGDxsdO0y/mu7HQ7C5F75uqz6dLcWwlimKRxPs4iBUElmOOKdgPeKK8XvPibfaZfT+IpYbG6n/wCER0+8X7LcmSCS4muJUARgdpTcQQwGSK7fwkfiZDqYj8Xy6Ve2Fxa+cs9mhia3myP3RUklxgn5h6dOaQHY0V5D4m8S+L/DfxV1e9l1iCXQ9P8ADceoiwEJ3N+9lUDdn7xZfvemB2q5pPjD4gaXqXhe68XSaXcab4skEEcVpEySWUjxNJGCxP7wELtJ4wTTsB6lRXI+J/Fl74Z8WaNb3nlDRNThuI5JSvzx3KAMoz6Mu7j/AGTXIaV48+IXi2+0/QdFfTdNury1uNVkubmAyLFarKI4kCAjczbgxORgUgPXaK8s8JfE7xBrHiPRvDWqWtrFdedq1lqZiyVaa0dEDxk9FbcTg+uO1ZsnxM+IGq67beHPD0GmLcXusahp6zXCNshighVw5xyTyeO5wOOtFgPZaK5Pxz4i1jwnpWl6rH5EsS39vBqRKHHkvlSy+nzlfzrhrD4weJNTn1TToLS1S6m1mytNGJUkSWssxjkkbnkoEkY49BRYD2WivBrn4i+KtFspTYPDpmnyeINcgutVlspryK3MV46xq6qcoGAPzEhRjirEGv8AjrxV408MTeHNf0dLi98OXslxcxMbmzIW4hAkRAQGJ4HJGNx9KdgPcaK4zwL4n1TxX8Pm1jV44Y9Qj+2WlwYMhDLBI8TMueQCUJH1rzPRfFvibS9J0a40XTpNX1NPCmrXkELO7PNLHdIFXGfm6+hPGBRYD3+ivALz4i+Mte8F+JU0zxto095YW8E4kjs3trq3LPh45LdzvXthz15GK9p8J/2ofDOmNrV3Hc3rWsbTTRpsV2IzkDtxilYDWooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACsPxJ4TsvE11ot3eXM8TaJqCajCI8Yd1UgK2QePm7YNblFAHCa58K4tU1PVb7TPFWraNBrwX+1bWz8ry7ohAhbLoWRigCkoVJAqG/+D2nyXckuieI9U0W1u9Oi0u9tbPy9lxbxghRllLI2GYblIPJ5r0Gii4HNxeBtOh8AwfD1bu5Nlb6dFpqzEr5pjRAoY8Y3YX0xWf4l+FeheKrS1sdSu7wQ2ulXGkBY2Ub4povLYk4zux0x3rtKKAOD0b4XXGneItL8T3/AI21fUrvSraSzjWaOBI2gfb8hVI1GcqDuHzH1xTtK+D3hTTNL8R6M/2i6tPE25blJnH7uMhv3cZABVQXcjuCa7qigDgH+FDahY3Nl4h8ba5qwmtltImnMKmGMOGyAiAMx2jLMCfeuh/4RCxHiTTPE32mf7Rpeny6dHHxsZHZCWbjOf3Y6HHJreooA57UvB0V94v07xjDq13aXNhA1q8MQjMdzESTtfcpI5OcqQfeqninwE+v6/YeJtN8SX+jajYW8toJbaOGTfDIVLKVlRgOVUggZ4rrKKAPNrD4KWekWNlDo/i3WLS90y7u7iyvx5TzRpcPvlibehEiljn5wT70sHwT0u3spwPE2sNqkuqLrMeqM0Znhugu3co27SCuQVIIwSMYr0iincDzmP4L6dM2s3eteJtX1PUNb+zvLeSmNHhkh/1bxBFCoR0wBj25NWbj4Tw6rp93B4h8Waxqd7cNBJBfu0cUlo8L743iWNVRWDAEnbzjnIrvaKVwOM8OfDh9G8UzeMtU8WaprWqT2a2LPdLEiCNWLAKkaKq8seg569aj174YprHiG+16z8U6ppn9rWkdlqEFsIitxEm7ADMheM4ZhlCp5rt6KAOH8IfCrTfCNlNaRazf3hm0mDRy84jBEMKFEI2qBu2nGfauf8UfDf8AtF/Bvgmz028l07RLtbq41GRlCmBQ2+FsY3eYG2kYxgk9q9YoouBleJ/D1r4q0G78P3k0sMF2qqzxY3ABg3GQR2qtb+D7G28SxeJ0uZzcQ6YdKEZxsMZdG3dM7sxjvjk1vUUAedW/wZtNLg0ZNA8Wavpk+kWTad9oiELNcW5YttcMhAOScMoBGetGn/B86BYWdn4Y8c65pr2scsLyfuZ/PSR953pKjLuB6MAD716LRQB55ZfBDwjZae2lJLePato0OjGNnH3I5XlWXIGQ+9yfTgcVr+GPAb6DqY1jU/E+p65dxWpsrd7wRqIISQSFWNVBJ2rljknHWusooA5TXvh7p+v+JD4huNRuoxNpp0q7tFCGK5t9zsA25SwIMjcqQaz9D+FUWl6npV7qXirVtYt9B3f2VaXfleXakqUDZRAzkKxUFyxANd3RQBwHxh0C/wDF+jWXhWw0q4ma8u45GvEYKlmqn5mY5zkqWUAepq/rXw5t7y70zVNA12+0HUdKtDYRXNmsbl7chcxukisjDKqRkZBHFdhRQB55/wAKc0+0tNK/sTxJqunanpc9zc/2mhjknuJLhg07SiRWVtzDPTjtirHhj4R6P4Y1Cy1ODWNSu57K7u70NcOrGSS4jCPuwo44yMfy4ru6KLgZfifw/Z+KtAvvD2oPIlvfRGJ2jIDLzkMM9wQCPpXM6V8IfDuk614c1uC7vGm8N2ktrAjsu2YuCDJIMcuNzYIx9413VFAHBn4VfY2a48PeMNY0m6a+vr1pYhFIr/apmldGjkRkIDMdpIyB3qfwl8K9E8IajZ6rY3t3LPa2dzaMZSuJTPKkjyMABhtyDgYGCeK7WigDC8N+EbHwzoM3h+0uZ5YZp7qcvJjcDPK8jDgAYBcgewFc6vwc0NbW1tU1fVI/sel3WlRSRSiOQJPKspkDKAQ6soxjj1Brv6KAPPf+FQwX76jdeJvFWp6xe39gNNW5ljgiaGAMWG0RIqk7jnLA10Wg+F73RZ7SWfxVqmoJa2IsvJn8tY5CGBEpVFA3gDbxgYzxmugooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Z\"}"); socket_status.send("{ \"RequestType\":\"SendImage\", \"RequestID\":\"788346414\", \"toType\":\"toUser\", \"toID\":\"1036\", \"fileType\":\"image/jpeg\", \"blob\":\"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAHgAoADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9U6KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAopNy/wB4fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/AHh+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv8AeH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/wB4fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/AHh+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv8AeH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/wB4fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/AHh+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv8AeH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv94fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/wB4fnRuX+8PzoAWik3L/eH50bl/vD86AFopNy/3h+dG5f7w/OgBaKTcv94fnRuX+8PzoAxst6mky3940UmRQA7J9TRk+ppKKAAFh/EaCWP8RoooAXJ9TRk+ppKKADL/AN40Zf8AvGkwKMCgA3N/eNG5v7xoI70Ad6AF3Mf4iPxpMsP4j+dHSlxmgBCWH8R/OlBb+8fzpCM96OgoAVWb+8fzoLN6n86OBTSc0AOy3940Zb+8aTg0YFACkv8A3jRlv7xpNvvSYx3oAXLn+I0Ev/eNAwOc0YBNABubHU/nSbm/vH86VaMc5oATc394/nTt3+0aTb70baAAl8/eP50uW/vGk20baADc3940B27k0babQA/Lf3jRlv7xpMAdTRgHpQA4lj/EaTLf3jTSMUvFAC5b+8aMt/eNJjHNGAelAC5b+8aMt/eNJxQSD3oAXLf3jRlv7xpNvvRjHegBSW/vGgFv7xpuB60YHrQA7Lf3jRlv7xpAQO9IMDvQA7Lf3jRlv7xpuM96XbQAuW/vGjLf3jSfLR8tAC5b+8aAW/vGkAFJgetADst/eNGW/vGk2+9IAPWgB5LH+I0mW/vGmkYpeKAFy3940Zb+8aTGOaMA9KAFy3940Zb+8aTigkHvQAuW/vGjLf3jSbfejGO9ACkt/eNALf3jTcD1owPWgB2Wz940mWzjcaP4aMDFAC5b+8aPm/vGmjA70pGaAF+b+8aPm/vGm4HrRgetADst/eNALf3jTcD1pQPegBQX/vGjLf3jSAClOO9AAS2fvGgFs/eNJgYzRgYzQApLf3jQS3940hA9aQjHegB2W/vGjLf3jTcD1owPWgB1FFFABRRRQAUUUUAGc0UnzUtACZFGRRk+lGT6UALSZx2paMigApMr1paTJ9KAA57UDPelpPmoAMCjAoyKMigA+Wj5aMn0oyfSgBcYowKKKAEwKCAO1Lz6UhJoAMg0ZApfwo/CgBMCjApAT0FOoATAowKWigBMCjgUZPpRk+lAAeDmlpDycUtACfNSgGkzntRz9KADn1oOR3oyBQSD3oAXoKRTnqaXp1ozmgAooooAKKT5qPmoAXPGaQEmlBzScCgAwfWjB9aMijIoADntQM96BnvQc9qAFpP4qXPOKOM0AITilHNHtRQAnzUoBpM57Uc/SgA59aDkd6MgUEg96AF6CkU56ml6daM5oAKKKKACik+aj5qADqOKFpQc0ZFACEZpQMUgPrS0AIc9qBnvQc9qBnvQAtJto3UtACE54FKOKAc0ZxQAUUm72o3e1AAc9qTBFKCaDntQAtFITigHNACg5oJxQBigjNAATQPeikyKAFoozijOaACg57UUUAJgUv4Ugz3paAEwKMCl59KOfSgAooooATgUGl59KKADgUmRS0mT6UALRwKKTJ9KADg0vAoOR2pMn0oACfalyKTJ9KUnFABRjFFGRQAcdBzQeODwPSuN+IXxa8EfDLTW1DxZq8NrGASFJyx/Ac189aj/AMFFvhRaXTQ2K/aVU4D/ADCgD635AyRj3oPTI596+evh3+218HvHl8mlx6wlrdyHARwcZ+pr362vrW8tFvbW4SSJ13KynIIoAm45/hPal6ngY968W179q34XeHfGjeBtQ1YDUldY/L2Hqa9lgnS6hSdPuSorg+xGRQA89KWkPSloAQDFLRRQAc+lI1LnFITxQANSjgUUUAIc8sB16ilHp+leZ/Fz4++Bfgy1jH4xvxbPqG7yvlJzt+ldN8PfH+hfErw1beKfDtx59ldZ8t8Yzg4oA6XHt06UuOpHJpMkHPf0rB8ceM9H8A+HLnxNrkvlWVqAZG69aAN4nC5xk96Mc4HXtXlvwq/aJ8AfF2+ubHwjqQmltSBINpHX616iB6jPvQA7A60UUhGaAA57UtIc9qWgABzSYpQMUZoAQ9KWkPSloAQDFLRRQAc+lI1LnFITxQANSjiiigAooooAMYoPNIc9qWgAHSiijPOKACiiigBPmo+ag57Upz2oATrQDmjpQBigBaKKKAEBz2paQYzSk4oAQnFKeKQjNKeaAEY0ueM0YzQelAAcnvR+NJxnOaOtAC4zRSEZpaACiiigAooooAKKBzRQAUUUUAH40UHHeigAopMCjAoAX8aPxpDjvScetADufWjn1pDjvQMdqADB9aMH1oyKMigA59aXn1pDjvSkjvQAgyc4rmfiR40sfh94O1LxPqMgWO0iJBJ744/Wum6jBr5Z/wCChOuXen/Bi6s7aRkW5xvIPo1AHxBdah8R/wBrj4vnTo7u4aGe4ZQoY7Y0B/LpX2j4Q/4J4/CnTdESDX4ft96yAyS5K849K8x/4Ji+FbSX/hIvEVzErzr5XkuRyvXNfoGAoHAz70Afl5+1T+x3cfBy2HjPwJPM2nodzxxAgxc8c9TXuP7Anxn1/wAV+Hb3wT4j8+STTY8RSSggnIPrX2B4h8N6N4p02TStbtEubab78bDg1z/hv4V+BfBBnu/DWix2csincy9+KAPzF+M8m39rm4ZjhRdxdT06V+j+rfHf4X+BrCytPEfii3t5fs8YKr838I9K/MH9qI6j/wANIawulyFblp40jYDueK+h/CP7Auv+OvDCeJfG3jO4i1O6hDrEyltvHHf0oA+1vBnxW8B+P4xJ4X1+C6B7AgH8utdaCBkk5B6e1fjday+NP2avjpHoEGq3BksrqOMqWO11cgdM46Gv0i/aI+Nn/Cqvg5/wk0L41G6tIzAueSWUZP60Ad74w+MHw+8CKW8SeIbe229VDBiPwFZ3hX4+/CzxpdCz8PeKLeeU8YY7f51+dfwU+A/j39qnVr3xb4p8Tz2tk8m4SsxIcEnjGe1bHx6/ZA8SfAnSR448G+LJruCyIeXYSu054780Afp7G6yrvQh1PRgeKz9a8RaN4dtGvdX1CG0iQZLO4Gfzr5i/Yq/aIu/iN4GvNK8S3e/UdDiy0jHlxg/0FfLPx9+LPjv9oP4vt4A8MXs6WInMMMUTEdPvHIoA+/JP2pfgjHfGwk8YwifO3btOM/WvQ/D/AIr0DxVbC70LU4LqMjIKOCfyr4bsv+CbUkvhcXdx41mGpvF5m3YchsZxnNeS/BzWfiz+zv8AGhPC98uoXGmpOIrhSrMrg8Kc84oA9N/4KiFheeEDuwczYHr0r6E/YZOf2fNAYntJwe3zV86f8FN5zcDwRc7cNMkjn2yAa2vhh+0h4f8Agn+y3owa5SbWJ45RBbhuc7utAH2jrXxE8HeHbr7Hq+u20Ew6ozjNeTftU69pev8A7P2v32lXAmhZF+ZenWvjP4OfCf4lftUeO38ceKdQu4tIabe77yFK54AANfX/AO0f4N0rwN+zTq+g6OhjhtokVcsWJOeetAHy/wD8E6NWsNI8R+Ib7VLyO2hjZSWdgB39a+1Zf2nfgvFqR0mTxhCtyG2425GfrX5UfAnwN45+JnimTwV4TvJrW3vpMXUkf8IBr6s8Xf8ABOO7sfC8moaL4xmn1OCIyFdpBY4yec0Afd+i6/pHiG0F9o2oRXMDAEFGBq+8ixxtJKQEHcnFflj+yj8a/GPwg+K8fw78V3s7afLMYZklYnZjgdfU19O/tw/tEX/w08I2eieGLny9Q1qM7ZF6oMD+hoA9y8VfHn4XeDJWt9f8UW8MgOMKd38qd4T+Ovwy8bTeToHii3mc8BWIX+dfnz8AP2Q/F3x7sH8b+L/EN1Z2t0S0buWbfzzxnioPj/8AsneMv2ereLxr4T8Q3V5ZW7b5HQlAnPHGeaAP1Gmu7eC3N08gMaruLA8Yrmbb4p+BLu8TT4fEVs1ySVEe8A5/Ovn/APYt+Ok/xm8DXXhjxROZb+yjEUjE8sDx/KvmD9rj4NeKfgj8QI/G/hm5vP7Knm85cSMRHg5PfuaAP1Ha4hihNzJIqx7dxYngCuWh+KngWe7+wQ+ILd7gttCKwJJ/CvhLxj+3edT+BltoemztH4luofJlYdUxx+oq5+wr+z7rXiPUh8VfGU939n3mSzSSRsSEk7uM0AfoYjh1DL0IBFOPtTY0WNAi9FAApSaAFOT3opOBRkGgBaKKKAAmijIoJxQAmD60YPrRkUZFAC/jQOKQAUvAoATPGaM8ZoPSg9KAFooooAAc0E4oooAKKM5ooATgUvBpODS8CgAopMijIoAWiiigBM84paT+KjHOaAAUZ5xS0e9ABRRRQAUUUUAJ81HzUmB60YHrQAvzUfNSYHrRgetAClvSgZ70tJkUALRSA5oJxQAtI1GRQT2oAGoPShqD0oAAcmj+KgHn60fxUAB7YoPSgnmgnigAB4znrXzR+3v4TvPEHwS1C7so2lktApCqOeWr6XyNpBXkdKy/Evh+x8T6Jd6HqcKvFdxlCp5HSgD8+f8Agml4/sNH1vXPB+ozrHPfmNbdWOOVzmv0ZJ6gYr8mPjT8BviX+zf8Qz4u8JJcPYrMZra5hUngnJGB+VereEv+Ckuv6XoyWPiXwXNdXUKBfOZypcgemKAPsT9oX4sR/B/4dX3ilNjXUQHkxFgCxzivF/2Vf2pfFvx31nVLLUtNMNvZr97dkcg18ffFn41fFX9qjxFbaLY6Rdw2Uj7YrRVJVQfVsV94/slfs/j4LeAWfU4h/a9/FuuOORxxQB8MfGlFk/a4uFcAj7ZD1/Cv1f0dVTRbJEGB9mj/APQBX5UfGWyvH/a2uHWznK/a4fmEZI7d6/VjSfl0ezXv9mj/APQRQB+U/wC2QAP2oJ8Lg/bLbt7ivb/+Ch73q/DXwWsDN5JtB5uOn3VxXi/7Y1jezftNzSRWk7j7ZbfMsZI6r3r7e/aK+DUvxf8AgfDpmnW+7Uraxia3Hf7oJ/lQB8Ufs/eG/wBrDUvBFvP8JrnGjHOxVKZHPfPNdx4q+FX7c3ifRbjR/EtwJrCcASI7RqPzrhPgN+0J45/Zf1a78I+JvDt1PYb9vlEECPB7HHeu5+Nf7dPib4laGfCXgHw7dWcl5hWmj3E5zx2oA2P2afgB8T/hND4l1XxBbRwQ3FuxPlzq+fkPYGvKP2NTbP8AtMRPqpUuLqfbv79fWvrb9jb4Z+OrHwXfav8AEW5nkl1iLEcMpJ2jBH9a+Tfjp8LfHv7OvxjPjnw7p85sTOZraWJSQRnLdKAP1aBVUBBBGPyFeb618Qvg1ZeJX0jVbywGrKyqytEpbcenNfJw/wCCj8p8IG1bwfMdX8nys7jndjGeleU/s7/Df4h/H74zr478QxXkVgJ/NuJX3KMdVGKAPRf+CoLo7eDnh6MsxXHcYGK+VdI+C/xL8TfD6bx3a2E8mjaeAyHdkcnnAr6u/wCCmunXIbwXb20EswgWRPkQnoAO1e7/ALHPh201j9mrS9I1awGy5ilR1dMHknrQB5F/wT7+PdlNp/8Awq7W3igurc7bbIAL85NfQX7YRB+A2vt1BROfxr8+/jp8MvFP7N/xmXXvDkVwtq9x5ttJEhIIzlhxX1r45+KsPxf/AGTdR1eCGUXawRrPEUO4EHFAHj//AATVOlDxTr3nbBdl18vPXvnFfovPsMTBz8m07s9xivxa+Cni/wCIPwo8Uv448PaReTW9lJm4QIwyCcelfVnij/go7cXPhOW10nwjPDqs8Xl5ycqcYJxigDwj9oQRp+1tfroG3aLy32lOnUZrr/29/tv/AAmvhtrzd5XlQ7M9Purmsz9lb4Q+MfjV8YY/Hviayn/s+GYzXM0qkbs8r1r6l/bh/Z51H4leDrPXPDFoZNQ0OM7Y1HMg4/kBQB67+zCbD/hTegiwKeWYjkrjk1T/AGsf7OPwR13+0dhTyxgN65r4c/Z7/a68W/AnTj4H8WeHrq7sbViibwy+Wc89uai/aF/ay8X/AB/ij8FeEvD11a2M7BHCBm83J47cUAdD/wAE2zc/8J9riwqRbiQbj2xzivq79sXxF4E0j4TalB4yjhla4TFvG33ic9u9cN+x78G5PgT8Or3xj4xgMF5eRCaRCMlcAkfnXyf8cPHnjX9qD4vw+G9Ftbs6atx5dvFsYKFzhjQB876W9tZ67bajfWbyaeLoOFIIBTf6/Sv2n+Avinwh4q+G+kah4N8lbIQhfKTqpAAOfxr5/wDHv7E3h6b4EW+haPZr/bunW5lS4A+ZifmIr54/ZA+NXiT4JfECTwL4qhu00u4n8ly0bERkHA7dzQB+poPpSDOeaitLqG+tormE/LKgcfQjNS8YwaADvR3o70d6AAnFHQUEZpaAAc80HnikJxS4xQAU3JpQc0EZoAU8UgNKeaQCgA3UZFHy0fLQAZFGRR8tHy0AGQaMgUny0fLQAuRRn3pDtxSjaaADvR3o70d6ADn1oOR3oIHrRgHpQAEkDrQARzRjPNAAoACcUtITiloAQDvS0UUAJ3o70d6O9AC0UUGgBAeaCOc0mBig4xQDVg5zkUvPrQMdKBjPFJK/UNWHA4ozQwxQRTt5hdCE0ueKRqXHFHzC6BaAecYoFIetO6DQUkjvQcgdaQ896OtK6DQXIHSjIoA4pB1o1DUM0ZoHWlajUNRaMUh6YoWlqBS1PRdM1u2az1OyhuYmGCsiA/zrzLUv2V/gjrF013f+DIWlY5JDkD9K9ZODgmg4DYLZFPUZyHhL4SfD7wOAPDvh62tj2YoGI/E115A/1eARjFKeRjHSj5cZzk+lOzE7HJXnwr8DX+sHXbzQoJL1iG84gZyK6tFVVWNQAEGAPQU8YIwBSdyCdxPalqLc5TWvhd4I17UjrOraFBPeFg3mMBnI6V1EUccUaQxgeWi7QuO1PHXnj0o3EfL2FFhnGeLPg98PPG0vmeI/DltPJ/eChT+grO8O/AL4U+FrsX2jeFreKVTkFhu/nXooOBn0oJzyOlFgGRxRQxpHDGqIvACjAFZ+u+GtE8SWr2OuWEN1E4xh0BxWkOufXtRz0zg0rtB7zPK3/Zf+Cz3f2tvBkPmk7t27jP0r0LQvDei+GrNNP0TT4bWKMYARAP1rSIz06+tKD2LZI600nILM57xR4C8LeMjC3iPS4rtrfOwuM4zWlouh6X4c0+PStHtVt7SP7iKOBV7nlg2c0vG0ZGCKAOf8TeBPCvjARf8ACQaPDeeVnbvUZGarWXw08GaZpU+i2mjRR2VxjzIh0P4V1HGN4GCetB9hgetAHJad8KvAWmW1xaWfh21SO5H71SgOf0rmpv2Zvgxc3IvJfCEAk3bg2e/0r1IEgbs5IoXptxwaAMzQfDWheGLJdP0OwhtYIhgBEAzWk6LIrCVAynjBGQaXg8E5pM8H+8egoA4PxN8C/hj4vuTda74Xt5ZW5LKoX+VL4X+B/wAMfB9yLnQfC9vFKvIZlDY/MV3mcDBPTtS8AdeT2p2sw0XQpalpOn6rZNpl9CJLZxhkAwMVzuifCjwJ4d1AappPh+3guUJKOFBPPWuu7YB4WjqcjqaSTb0YIR1V1MTKCMYxXGXvwe+Heo6k2qXXh23a5dg28KAcjvXaZ6ZOcUDjhjgetF0O5Fb20NpAlvAMKgCgegFSnOQc0ZA+ajjv3ouguLRSAYpScUm3HYQhOKWjIFFHqAhGaWk3Uuad0AUUgOaDzTugFHFNPWnZpo60XQCnpQOlLRRdAIM96Dk0ZFGRS0QW1uGD60YPrRkUZFK6YO973A9KAMUtJupgAOaCcUZA4oPSgBc0mD60ZAoyKADJ9KMn0oyKMigANABpcZpuB60ALg+tGD60ZFGRQAvPrRRkUUAJg+tGD60YFGBQAHPagjNGBQCACc9KG1b3gbSXvBjvnHvRjuR+NeX/ABB/aE8BfD+8bTr7UUe7X70YycfiK4cftneAedqcDqea46mMoU92cVTMMNSdnI+iM/7X6UZ/2v0r54/4bO8Bdk/nR/w2d4B/ufzqf7QofzELNMK/tH0OcHvQMDvXzv8A8NneAv7n86P+GzvAX9z+dH9oYf8AmD+1ML/MfRHPrRz6187/APDZ3gP+5/Oj/hs7wH/c/nR/aFD+YP7Uwv8AMfRB3HvSYP8AEa+eD+2d4C7J/Omy/tpeAIo8uvT61rTxtGbsmH9qYX+Y+icn1oHHevmj/huj4c/3P50f8Nz/AA6/ufzr2FleKkrqI/7Uw38x9L4PpQQT2r5nP7c/w4/55/zo/wCG6Phx3jP60/7KxX8of2phv5j6ZNA4/wD118zf8N0fDf8A55n9aP8Ahuj4b/8APM/rR/ZWK/lF/aWH/mPpgcUdTXzP/wAN0fDf/nmf1o/4bn+HHaM/rT/srFfyh/aeG/mPpnnOB0pAMn6V8zn9uf4c8/uzx9asWf7bnw6vrlLaKP5n+tH9lYr+Ul5thIK8pH0jn/apPoa8NH7WHgkgEJ/Oj/hq/wAFdk/nT/snFP7Bxf6yZbF2lUPc8H1owfWvDP8Ahq/wX/d/nR/w1f4L/u/zo/sjF/yh/rLlv/Pw9zz/ALX6UZ9/0rwz/hrDwV/c/nR/w1f4K/ufzpf2Ti/5Q/1ly3/n4e5k+9A69a8M/wCGsPBX9z+dH/DV/gofwfzprKMU/sjXEuXJfGe5kkKTnk0AgMQK8MP7V/gv72z+dXNL/ae8Iatex2FvH+8f61FTLMVBX5S6Gf4CtKymez5HrRn/AGv0rhB8VtNIBFu2D9aX/haunf8APu361wNW0Z7SaaujusH1owfWuE/4Wrp3/Pu360f8LV07/n3b9aBnd5/2v0oz/tfpXCf8LV07/n3b9aP+Fq6d/wA+7frQB3fXvSH1zXC/8LV07/n3b9aP+Fq6d/z7t+tAHdHjk85pQDjrxXC/8LV0wHi3bH41R1T41aJpVv8AabqEhR9axxFanhoe2qOyNKVGVeXLBHpBDY4NAz3NePf8NI+Ev7v86P8AhpHwlj7v868KXFWWN6VLHpvIsdNXjA9hyfSjn0rx7/hpHwn/AHf50n/DSXhP+7/Oj/WrK/8An4P+wcd/IexfhRz6V49/w0n4U/u/zo/4aT8J+n86P9asr/5+B/YWO/kPYefSgZHavHv+GkvCfp/Oj/hpLwp6fzprivLLXdQP7Ax/8h7CB37mgnHJPSvHz+0l4U/u9PrWN4j/AGtvBHhu3FxdD5W+taUeJMtxMuWNQqPD+Pe0D3nPtRn2/WvmA/t2/Dj+7/Ok/wCG7fhx/cP616Sx9D+Y2/1WzP8A59M+oM+360Z9v1r5f/4bu+HH9w/rR/w3d8OP7h/Wj6/Q/mD/AFWzT/n0z6gz7frRn2/Wvl//AIbu+HB/gP60f8N3fDj+4f1p/XqH8wf6rZp/z6Z9QZpMj0r5g/4bt+HH9w/rSj9u34b/ANw/rS+v0P5h/wCq2af8+mfTxzwc8GlIGeelfMcP7dfw2aRUYbVY8nnivZfhx8X/AAZ8TrP7V4Z1RLgoBuToR+dXTxdGo7JnLisix+DhzVoWR3GBRnFIDmlxmult9DyNluIRmgDFAIoJxQAfNR81Hy0fLQApz2oGe9J8tHy0AAOe1BOO1G6jdQAZ5xR/FS55xSfxUALRz6UnzUc+tAC0UUUAFFFFACcHLetY3i6+k07w7f3kJ+ZIWI/I1skk4OOBXPeP9p8I6mB3gb+RqKvwMyry9x+h+ZHiPUr7Xtcu9Sv5WkkkmcfMc9CapfZMZIA5q3sBvLknn9/Jj/vo1YWMAZ71+e1qj52flderLnkjM+yn+7R9kI6CtTyh6UeUPSsXOSdkY+0ktDK+yn+7S/ZT6VqeUPSjyhjOKfPJD9pK9rmX9k9qPsp9K1PKHpR5Q9KFO60H7WWzMo2xGeKo6pBttJDjtXRGNcEkVl62irYyYHQV6GVyviYJ9wjVu7HExQbh071L9m5HFS2Y+Q8d6thAa/pXDQjKlGy6IcqjUtWUPsgoFoK0PKo8ut/ZQWpPtJt6Gf8AZBR9kHpWh5dHl0eyXQftGt2Z5tKPsnPStDy6PLpuiJVuhnG268Ve0CDbq0P1pzR8ZqxoqY1WH60vZR7GGJqP2TPSoLYsi8dqn+xHd0q1Yx5iX6VdEIHOKtU0fn9WvJS3Mj7H7Uv2L2rW8kelHkj0o9mk0kiPrGm5k/YvQUfYj6VriIelHlewodKKshfWJRd4syPsXtR9i9q1vJHpR5I9KPZK6G8RJK9zHNlz0rc8CwbPFFnx/FUTQgdK0vByAeKLPA/jrz8ypWw0rHs5BXlLHU031Pqe00xXhjIQcqO3tVj+x1I/1Y/KtbS4Fa2iyP4F/lWkLZcdK/LJ/Ez+jKXwL0OY/sdP+eQ/Kj+x0/55D8q6j7MPQUfZl9BUlnL/ANjp/wA8h+VH9jp/zyH5V1H2ZfQUfZh6CgDl/wCx0/55D8qP7HT/AJ5D8q6j7MPQUfZh6CgDljpA/wCeYx9K4H4tWSw+HnOwD8PevZZLdQM4ry741RKvhtyPUfzr5/idtZbUPWyTXGwR4BHaZHAqUWRx0rQtIlKjirawJ6V/M9SvKMnqftlOlHkWhifYj6UGxz2rb8lPSgQIe1R9Zk1uV7GOljE+xcfdo+w/7Nbfkp6UeSnpU/Wp7Jh7GLaujE+xe1H2I+lbnkL6UeQvpVfWJ8urGqMXJJGEbJvSvNfjNBs0mH8a9kkhXB4ryj42pjSocep/nXs5DXlLGQVzowlH98rnhywbuop32fBq1EgqXy81+tqbaPs44eLitCh9nGelH2cDtWh5Q9KPL9qfPbqX9VjfYz/s6+lH2celaHlD+7R5Y9KTqX0QfVoJNWM/7MB2pfs6+lX/ACx/dpPLX0oc7ISw0exnmADOT16V7T+yX4n1TQ/i3pem21w/kXjMJV3ccDjivJWjHOF6da9F/ZsG340+Hzjje+fyrrwVR+1jqeDxHhYf2fUuuh+qcZLRo3qoNPOccVFBnyY/9wfyqT5q+6Xwn8vTilKXqLQBimg4pQc1RAfxUNRjnNH8VABkUuRRz6Uc+lACZFGRRk+lHPpQAHpQOlLRQAUUUUAFFFFABRRRQAh6Vzvj/wD5FLUv+uDfyNdEOc1zvxA/5FLUv+uDfyNZVvgZlX/hy9D8yf8Al5uP+u8n/oRqyOlVx/x9XH/XeT/0I1aAr86qfGz8nr/HL1A9RluvQ0AHgbcepz1o7EYz6V6P8Lvgn4i+JQlns42htYlyZcZyadKlOtLlp7ioYedafLT1Z5zgnIxmun+H/wAP9b+IGsw6VpVs5RmHmNjhRW7pfwR8YXvjM+E202RXjkAd8cBfX8q+0/AHw/8ACvwd8K+dKYklSPdNO3UnFelg8ulXqc1TRI9fL8oliJ81TRLc+Zvi5+zTN4H8PRa3pdyJljXNxkYwa8AKkEgr0OGr3r9oH493XjO7m0DRJCumxkqWH8deDHnG7qefrXPmHsvaWo7HLmaoKrbDidjWRrufsMn0rXI4NZGu/wDHjJ9KrKrPFwXmcCepylkBtH1NXF6VTs/uD8auL0r+n8M7YeK8kKau7sXoQSeOwpOnbHtS4J4ByB0969Z+Fn7PHiz4oabcarZwNDbwrujcj79KtXpYWHNVZpRoVMTK1M8mABbIruvhP8J/EHxR12HTdMt38ncPOl28KK2vB37PvjXxH43bwpNp0sIgkAmkI4Uf/qr738G+DPBfwI8Fb5DDB5EW6aZgMsa8TM86jh48lDWTPZy7KJV3zV9Io+Pfj/8Asv3Pwy0iLxDpFwJrJFHng8bD/XmvnVjghvzFe9ftG/tD6h8TtSl0XSnMejwsVAB4krwckkliceld+VLEOhzYndnDmUqCq8uH2Qh6VNo//ITi+tQnpU+jf8hOH616LR5GJ/gs9Z08fukq+DVHT/8AUp9KvDvVxR+d1viF6YK9uvtR1BP3g3X2o5+WvRPBnwW8ReMdGn1eCMxxqu6IY+/61jiMRTw0eao7GuDwNbHVHToRuzzvAHAGAK7T4cfDXVfH2pi3ghZLYEeZLjgCr3gr4P8AiDxJ4jOk3No8Mdu+JnI7V9X6bp/hn4VeGOTFBHAmST1Jrw81zqNL93h9ZM+u4f4XliZe3xq5acT5l+LnwYn8CRrqFk4ltSBu7bT/AFrycAZGOlel/F74sX3j3UmtYnKWEbEKg715qMngngdK9PK/b/V08R8R4GffVPrklgvgQ1hxitHweP8Aip7PP9+s9q0fB/Piiz/36WaL/ZpJmnDzisfTXW59jaT/AMe0X+4v8q1FrL0n/j2i/wBxf5VqDpX5RP4mf0lS+Begc8DGcdqD97nr29qGIXndhQCSfSvCfH37W3gHwJ42tPB9xcpIXcpPID/qj2qSz3bv0+prxn9oL9ozw58F9Ckle4S41KUfuIA3JP8ASs745ftQ+Efh14OXUtNv4ry+vYibaNG7kf8A16/O1U+IX7SHxCABnu7i8l99qLn8hxQB+hP7MX7TVl8arB7G/iaDU7cncuCQwJ45+lfQGSTnHTrXjf7O37PehfBfw6kcSh9WuEU3E2OSa9lOeMNn8KAGS/dryz43f8i5J+H869Tl+7Xlnxt/5FyT6j+dfP8AE7Tyyoevkf8AvsDxW05UfSrvQVStBhV+lXB0r+X63xP1P3Ck7U0GB/hS8HqKFUllK9+MV3WmfCTxBqXh+TWkjYEDdHFjlh3roweW4jMZNYdXsYYnG0MIlKu7XOF2jcAOQf1rufh18M7/AMY3PmyQtHZp1cjrVj4d/C3VPE2pbr+FobWFvm3DrX0BqGpeH/h1oG3EcSxJgKOpNfa8OcJqSeLzBWprv1Pl864hcGsNgdZv8D5x+I3w9n8GXow++3f7prjM/wAIHPb2rqPHnji/8Y6m9zKSLdSfLT0Fct83ds4r5LOvqzxklgvgPosqWIeGj9Z+LqNkHymvJfjeP+JVDj3/AJ1605yDXk3xw50mH6n+dbcO6Y6ET2cIl7eJ4zF0qeoYugqev2B7H29NqMUg4+8TgUnQYIx71JDDLcTLDCpZ2IUL6k17Rbfss+ObnwL/AMJgsDl9m8W+3kitaeHlVWhw47M8Nl0l9Zmo32PFApY/J1PQV7v+z9+zVrHxRn/tPVIXt9LQH5mX73HH61e/Z5/Zm1jx7rSal4jspLfTLaTL7xjfg/8A1q+zvHPjnwT8B/BXlRiCHyItsUS4yxxXr4HLo8nta2x8FxPxhUVRYDKveqy6rofn18dPgxqHwi8QiwkkElpOT5MnHzAdeO1eY46DORXc/Fn4qa38U/EUmrapKRAHPkx/3BXC8keory8T7P2j9nsfdZOsX9Sh9dd6ltRH6V6H+zf/AMlq0D/ff+VeeP0r0P8AZv8A+S16B/vP/KrwS/fROTiPXL6nofqfbHMMf+4KkJxUdt/qI/8AdH8qlr71fCfyrW+J+oUgHNLRVGYhGe9KRmiigApPmpaT5qAFPtSDPelPtSDPegBaMiijAoATrR0paKACiiigAooooAMVzvxAA/4RLUuf+WDfyNdDj3rnviAMeEtSP/TBv5Gsq2kGY19KTPzJH/H1cf8AXeT/ANCNWR1FV1/4+rn/AK7yf+hGrA7V+d1fjZ+UV9arFP6Gvoz9mr462/hMxeEteVFs3O2ObAG3/GvnPHG3OPUUqM8Tb0Yqy8hga0wteeHmpwNcJip4OoqkT9RZ9S8M2FhJ4ldrdUZN5m4yRj1r4z+Pvx+v/Gd5LoegzNHpsRKsVb79eb3XxX8Y3vhmPwrPqsn2KIYxnkj61xuSSWLEnv716eLzV4iHJT0PYx+ePE0/Z0lbuKxLEsxJJ9aKQUA5rxNz53fcQ96ydd/48ZPpWse9ZOu/8eMn0r0Mq/3uHqVHc5Sz+4KuLVSy+4PqatrX9PYbWhG/ZClJ82gobDAgYAORX1v+yl+0ZZ6EsPgfxN5cUBIWGUgDFfJBA4+bOf0p0c8tvIkkLFGQ5BBwc1jj8DTzCl7OR04HFTwVX2iP1y1bW/CfhnTJvFVw9rFGyeY0wAy3HFfAn7Rf7ReqfEnVZdH0e4eLSIWKqqnHmV57rfxi8ca94atvCmoavLJZW4KhemR9a4jcxADHNeNluQrCy9rX1fQ9bMM6liV7Ojog5PJPWgZ70c0gz3r6bW10fP2V7MG61Po//ITh+tQN1qfR/wDkJw/WkzDE/wAFnrdgcxJ9BV/PSqFgMRJ9BV/0qon53W+MVSVYSDqpyPevpH4BfGWyihh8K63sjI+WKQ8Bq+bQOPX29KfBPJbyLNBKUKHII4INcOY4Cnj6bpz3PTyXN6mT4lVobdT9BNa1vw74Z06bW53hhTbuLgD5vSvkL4s/FvUfHWoyW9vM0dhGxEag9a5zXPiJ4m1/TLfS9Qv3eCEFQOma5gf7TV5eVZEsHP2lfWXQ+gz/AIulmUVRw/ux6hnNFFFfSHw71dxDWh4OP/FT2n+/Wea0PB3/ACM9p/v15uaf7tI93h7/AJGEPU+x9J/49ov9xf5VqLWXpP8Ax7Rf7i/yrUWvyifxM/pKl8C9Bs8azRPC4yJFKt9CK/PX9sD9ljV9H1G5+IPhKOW4tpG8yaMEkx/jX6Gjhsk9aq6lplpq1nLY6hAs8MylWVhkEVJZ+MngnwV43+KviK28MWSXVy6vsO8kiMd+tfp9+z1+zz4d+Dfh6FRbRy6pMgM9wV5zXVeBfgt4E+Ht/d6j4d0aK3mum3O/U59s13g65z06UAAAPNAwe1LSAY70ANk/1Zryv42f8i3J+H869Uk/1Zryv42f8i3J+H86+f4n/wCRZUPXyP8A32B4ta/dH0q6eoqla/dH0q6eor+Xq/xM/caX8NDomMUqP3Qgivo74RfFCx1i0j0PVCkdyg2qT0YV83H72c/Sp7O9ubC4jubSUxOhySK9zh7PquR1lUirxe6PJznKaebUeSWjWzPsbxJ4k0Pwfpcl6/lJxkBcDJr5b8deOdQ8X6k8s07CIE+XGOgFUfEPi7WfEpRdSu2kSMYVegFYoO3kHr39K9niXi6ebr2ND3YHnZJw5HLf3tb3ph0FA5FIOuKOp4r4Y+pW42Toa8m+N/8AyCYfqa9ak6V5L8cP+QVF9TXucPf79A6MJ/GR41D92phyKhh+7Uw4r9etdWZ9vT1SZa02/m028hv7fG+FwwyM5wa/Q39mv9obQfH+jw+GtcaGHUIkCbWxh/6V+dJycnOCa0dB1/VPDmpRappFy8E8JyCprvwWM+pvyPm+JuHKfENDlbtNbM/Ur4n/ABP8H/CDw3Les0ETlSYokABY/hX5vfFf4seIfijr8+p6lcP5Ic+VDu4UVn+OviX4q+IN0s/iHUZJ/KUCNScDp6VynGPQ1vjsyeI92HwnmcK8H08kXtsR71TuLRRRXk+h92rX0GSdK9D/AGbv+S16B/vP/KvPJfu16H+zd/yWrQP99/5V2YP+NE8LiPTL6iXY/VG34gj/ANwfyqSo4P8AUx/7g/lUlfexfuo/lOprNt92FAGKCcUVRmJjnNB6UtFACHpS0h6UtABRRRQAUUUUAFFFFABRRRQAUUUUAGMsR61zvxAwPCGp5/54N/I10OTuA9Ky/E2ntquh3lggy0sLAfXBqKq5oMyrq9Nn5eJzdXBzx50n/oRqyvI54Bq/4q8N6l4U8RXuk6payRPHMxUlTggknrWasqbfvZPpX53WpyjN6H5Xiaco1XoS0UzzV9aTzU9RWXJNdDD2c+iJKTB9ab5qetIZU7mhwl0QOnN7okoqMyoO4pfNX1/Wjkl2Dkl2HHpWVrv/AB5S/StEypjiszXHU2UmPSvRyqLWLhddSowl2OUs87B9aueuTVKzYBOfWrXmJzzX9M4acPZRbfRBKEnokSYPrRg+tM80daXzV9a256b1TJ5Ki0aHUUzzEHejzEPWhVV3B02ug/B9aMH1pvmrSeatNVIN2uHsprWw5j2qxo3Opw896qmRc1Y0ZgdVi+tJzj3McTCXsXoeuaef3S89hV8YwOazrB1ES5PYVd81OOaqM49z88rUanN8LJKKZ5y+opfMT+8Kp1ILVsyWHqb8rHUUzzk9R+dHmp6inzR6MPYztqmPopnnJ6j86POT1H50c8e4OjU/lY5ulaPg8Z8T2f8Av1lGZDxkVp+D2U+J7PB/jrzcznF4eVme5w/TmsfBtM+yNJ/49ov9xf5VqD2NYulX1oLeMGZPuD+IelaI1Cz7zx/99CvyqfxM/o+l8CLLUo+tVf7Qs/8AnvH/AN9Cg6hZ9p4/++hUllnB9aMH1qr/AGhZ/wDPeP8A76o/tCz/AOe8f/fVAFoYoOKrf2hZf890/wC+hR/aFl/z3T/voUATy/dxmvK/jdn/AIRyTnuP516W+oWewkTx/wDfQrzD403EEvh6QJIrHjgHPevA4mTeW1Ej1skaWNg2eN2h4H0q4elUbWRNo57Va82PH3hX8w1qNTmfus/b6dSHs1qSUH61H5sfrR5sfZh+dZOjWbvys09pB63Hk89aUnio/MT+8KPNTGMj86FRqr7LEqkU7XHnpQtM8yP1A/GgSx+o/On7Gp/KxKpC+4rk7SDXk3xw/wCQVF9T/OvV3ljKk5FeTfG8g6XDj1P869zh6lNY6LaZ0YWpD2y1PHIcham5x1qCJuKl3DGK/XeSUldI+2hXpctnJfePopu8elIXHalyN6NF+2pS2kvvHUtM3il3ijkklZIft6ezkvvHUU3eKTeKfI3okL29GWikr+oPggdh6V6J+zfx8a9Ay3LO/wCHFedFwScjPpXt/wCyR4B1rX/ihY67HZyCz09iZJGXA5HFdmChL2sdD5zijF06WXT95bH6S25P2eL/AHR/KpabEu2NU/ugCnGvu0vdR/LtWXNNpAelIBigHNLTICiiigAooooAKRaWigAopcH0NGD6GgBo6UtAVsdDS4PoaAEowKXB9DRg+hoASilwfQ0bT6GgBoPFID+tP2N/dP5Umw56Gl7z0YWvuch4u+Ffgfxud3iLRI7lu7A7T+YrlG/Zb+C+Qf8AhFj/AN/mr1raR2NG3sQR+FYywtOW6OWeEoTeqPJf+GW/gvjJ8Lf+R2o/4Zb+C2M/8It/5HavWtr47/lRtOO/5VH1Sl/KT9Rw/Y8lH7LnwWH/ADK//kZqP+GW/gt/0K//AJGavW9rf3T+VG1v7p/Kj6pS/lD6jh/5TyQ/sufBU/8AMrn/AL/NR/wy78F/+hW/8jtXrWxvQ/lRhvf8qHhKP8ofUcP/ACnkv/DLnwXzz4WP/f8Aakk/ZX+Ckow3hXI/67NXrZR+pB/KlKsRwD+VXDD0ou6QfUcP/KeM/wDDI3wJ/wChR/8AI7Uf8Mi/Ar/oUv8AyO1eyhWx0P5UYbP3TXorG10rKTH9Rw/8p4z/AMMi/Av/AKFL/wAjtS/8Mi/Ar/oUv/I7V7LsPoaNh9DT+u4j+Zh9Rw/8p41/wyL8Cv8AoUv/ACO1H/DI3wK/6FL/AMjtXsuG9D+VGG9DR9exH8zD6jh/5Txr/hkb4Ff9Cj/5Hag/si/Ar/oUf/I7V7LsPoaNh9DR9dxH8zD6jh/5Txo/sjfAwAf8UlwP+m7VLbfsn/A+1mE9t4Sww/6btXsAQg5IODQVPoQPpR9er/zMmWX0JKzieZ/8M6fCYdPD2P8Atq1H/DO3wn/6F8/9/Wr0zBHY0YJ7H8qP7Qr/AMzOZ5LgnvBHmZ/Z1+FA/wCZfP8A39agfs6/Cg/8y+f+/rV6YVbPQ/lQA3ofyp/X6/8AMw/sTBfyI8z/AOGdvhP/ANC8f+/rUf8ADO3wn/6F4/8Af1q9M5/umjn+6aX16v8AzMP7EwX/AD7R5of2dPhT/wBC8f8Av81N/wCGdPhV/wBC8f8Av61emkE/wGk2n+4aax9f+Zg8jwT+wjzT/hnP4UFiP+EePP8A01arFj8Avhhp1yt3Z6BslTofNNeiEEjaSQfpS7Tx8pI7molja8tHJmlPKMHSd1BXOVHwz8I9rBx/21NH/CtPCX/PjJ/39aup2n+6aNp/umuZu56KVlY5b/hWnhH/AJ8ZP+/rUf8ACtPCP/PjJ/39aup2n+6aNh7KaBnLf8K08Jf8+En/AH9aj/hWnhL/AJ8JP+/rV1JDd0NADdkNAHLH4a+Ev+fCQ/8AbVqT/hWnhP8A58JP+/zV1O0/3DRtP9w0Acv/AMK08In5Rp8mP+uzVXvfhP4Hvo/Ju9LZl95WNdkEI4OfypMMOCpIrKrRjiI8s1oVCq6UrxPPj8Cvhz/DouP+2ho/4UV8Of8AoDH/AL+GvQQpH8JoCE/wGvLWQZfJ3nTR3vM8Sl7s39558fgV8Ou2jH/v6aT/AIUV8O/+gN/5FNehFTn7po2kdFNP+wMv/wCfaJ/tTF/zv7zz7/hRfw7/AOgMf+/rUn/Civh3/wBAb/yK1eh4/wBk0Y/2TR/YGX/8+0P+1MX/ADv7zz0/Ar4ddtGP/f00n/Ci/h0P+YL/AORGr0LaT2NJtP8AdNC4fwFv4aB5pi/53955/wD8KL+HWMHRj/38NZ2sfs2/CfXIfJ1PQPNT08xq9SKnGMGja4GApAqqWTYKjK6poazXFr7b+88U/wCGP/gX28J/+Rmo/wCGP/gZ/wBCn/5Hava9r/5FG1/Su76rSX2TX+2sb/z8f3s8UP7IHwK7+Ff/ACM1A/ZA+BX/AEKn/kZq9rCnupoKHspo+q0v5Q/trHf8/X97PFP+GPvgX/0Kf/kZqP8Ahj/4Gf8AQp/+R2r2sq3YGja/p+lH1Wl/KH9tY7/n6/vZ4mf2QPgX28K/+RmpR+x/8CyP+RU/8jNXtW1v7hpdpHRTR9Vpdg/trHf8/H97PF4v2QvgdG4b/hE+VOR++avSvCvgnw54LshYeH9MjtYlGPlHP51vBTkkgk+lCq3J2EVUcPGHQwrZlisQuWrNteoCil2n+6fyo2n0NbX6HBs7oTpRS7T6GjafQ0AJSYFO2n0NGD6GgBM4oo2k9jS7T6GgBKM5pdp9DSbSOxoA2tq/3R+VG1f7o/KlooATav8AdH5UbV/uj8qWigBNq/3R+VG1f7o/KlooATav90flRtX+6PypaKAGlR2UflSbB6CnfjSHPehXFZMNqjsPypML/dFKtLkdKA2EwvoKMJ6D8qNvvRt96Bi/L6CjC+gpNvvRt96A0FwPQUbV/uj8qTHvRt96QC4X0FJhfQUbfejb70wDC/3R+VGF/uj8qXHSjHSgBML/AHR+VGF/uj8qXHSjHSkGgmF/uj8qML/dH5UuOlGOlAaCYX+6Pyowv90flS46UY96YaBtX+6PypNo/uj8qdSZFAtRNq/3RRgDHyilyKTbS1GLtX+6Pyo2r/dH5UYo20C0Dav90flRtX+6Pyo20baA0Dav90flRtX+6PypNvvS7aY9g2r/AHR+VN2+wp9FK7Fa4m1f7o/Kjav90flS0UxibV/uj8qNq/3R+VLRQAm1f7o/Kjav90flS0UAJtX+6Pyo2r/dH5UtFACbV7gflSYT0H5U6kyKV2hbjSF7AUYHoKfRRa4xuxfQUbF9BTqKYDdi+go2L6D8qdRQAzavt+VKFX0FKDmlpagN2p3Ao2r/AHRTqTFMWobV/uj8qNq/3R+VGKNtINA2r/dH5UbV/uj8qNtG2gNA2r/dH5UbV/uj8qNtG2gNA2r/AHR+VG1f7o/KjbRtoDQQKOuBS7V9BR+NLRqwGkKP4RS7V/uj8qWm7fejYYu1f7o/Kjav90flS0UwE2r/AHR+VG1f7o/KlooATav90flRtX+6PypaKAE2r/dH5UbV/uj8qWigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/9k=\"}"); } var socket_ot; function ot_open() { socket_ot = new_ws(get_appropriate_ws_url(""), "dumb-increment-protocol"); console.log("ot_open"); try { socket_ot.onopen = function() { document.getElementById("ot_statustd").style.backgroundColor = "#40ff40"; document.getElementById("ot_status").innerHTML = " websocket connection opened
    " + san(socket_di.extensions); document.getElementById("ot_open_btn").disabled = true; document.getElementById("ot_close_btn").disabled = false; document.getElementById("ot_req_close_btn").disabled = false; console.log("ot_open.onopen"); }; socket_ot.onclose = function(e){ document.getElementById("ot_statustd").style.backgroundColor = "#ff4040"; document.getElementById("ot_status").textContent = " websocket connection CLOSED, code: " + e.code + ", reason: " + e.reason; document.getElementById("ot_open_btn").disabled = false; document.getElementById("ot_close_btn").disabled = true; document.getElementById("ot_req_close_btn").disabled = true; }; } catch(exception) { alert("

    Error" + exception); } } /* browser will close the ws in a controlled way */ function ot_close() { socket_ot.close(3000, "Bye!"); } /* we ask the server to close the ws in a controlled way */ function ot_req_close() { socket_ot.send("closeme\n"); } var socket_lm; var pending = ""; function lm_timer_handler(ev) { socket_lm.send(pending); pending=""; } /* lws-mirror protocol */ var down = 0; var no_last = 1; var last_x = 0, last_y = 0; var ctx; var color = "#000000"; var lm_timer; function ev_mousemove (ev) { var x, y; if (ev.offsetX) { x = ev.offsetX; y = ev.offsetY; } else { x = ev.layerX - offsetX; y = ev.layerY - offsetY; } if (!down) return; if (no_last) { no_last = 0; last_x = x; last_y = y; return; } pending = pending + "d " + color + " " + last_x + " " + last_y + " " + x + " " + y + ";"; if (pending.length > 400) { socket_lm.send(pending); clearTimeout(lm_timer); pending = ""; } else lm_timer = setTimeout(lm_timer_handler, 1); last_x = x; last_y = y; } function ev_mousedown (ev) { down = 1; } function ev_mouseup(ev) { down = 0; no_last = 1; } function ws_open_mirror() { socket_lm = new_ws(get_appropriate_ws_url("?mirror=" + mirror_name), "lws-mirror-protocol"); try { socket_lm.onopen = function() { document.getElementById("wslm_statustd").style.backgroundColor = "#40ff40"; document.getElementById("wslm_status").innerHTML = " websocket connection opened
    " + san(socket_lm.extensions); lws_gray_out(false); }; socket_lm.onmessage =function got_packet(msg) { j = msg.data.split(";"); var f = 0; while (f < j.length - 1) { i = j[f].split(" "); if (i[0] === "d") { ctx.strokeStyle = i[1]; ctx.beginPath(); ctx.moveTo(+(i[2]), +(i[3])); ctx.lineTo(+(i[4]), +(i[5])); ctx.stroke(); } if (i[0] === "c") { ctx.strokeStyle = i[1]; ctx.beginPath(); ctx.arc(+(i[2]), +(i[3]), +(i[4]), 0, Math.PI*2, true); ctx.stroke(); } f++; } }; socket_lm.onclose = function(){ document.getElementById("wslm_statustd").style.backgroundColor = "#ff4040"; document.getElementById("wslm_status").textContent = " websocket connection CLOSED "; lws_gray_out(true,{"zindex":"499"}); }; } catch(exception) { alert("

    Error" + exception); } var canvas = document.createElement("canvas"); canvas.height = 300; canvas.width = 480; ctx = canvas.getContext("2d"); document.getElementById("wslm_drawing").appendChild(canvas); canvas.addEventListener("mousemove", ev_mousemove, false); canvas.addEventListener("mousedown", ev_mousedown, false); canvas.addEventListener("mouseup", ev_mouseup, false); offsetX = offsetY = 0; element = canvas; if (element.offsetParent) { do { offsetX += element.offsetLeft; offsetY += element.offsetTop; element = element.offsetParent; } while (element); } } function update_color() { color = document.getElementById("color").value; } /* stuff that has to be delayed until all the page assets are loaded */ window.addEventListener("load", function() { lws_gray_out(true,{"zindex":"499"}); document.getElementById("file").onchange = check_file; document.getElementById("offset").onclick = reset; document.getElementById("junk").onclick = junk; document.getElementById("color").onclick = update_color; document.getElementById("ot_open_btn").onclick = ot_open; document.getElementById("ot_close_btn").onclick = ot_close; document.getElementById("ot_req_close_btn").onclick = ot_req_close; document.getElementById("pmd").onclick = on_pmd; var transport_protocol = ""; if ( performance && performance.timing.nextHopProtocol ) { transport_protocol = performance.timing.nextHopProtocol; } else if ( window.chrome && window.chrome.loadTimes ) { transport_protocol = window.chrome.loadTimes().connectionInfo; } else { var p = performance.getEntriesByType("resource"); for (var i=0; i < p.length; i++) { var value = "nextHopProtocol" in p[i]; if (value) transport_protocol = p[i].nextHopProtocol; } } console.log("transport protocol " + transport_protocol); if (transport_protocol === "h2") document.getElementById("transport").innerHTML = ""; BrowserDetect.init(); document.getElementById("brow").textContent = " " + BrowserDetect.browser + " " + BrowserDetect.version + " " + BrowserDetect.OS +" "; document.getElementById("number").textContent = get_appropriate_ws_url(mirror_name); /* create the ws connections back to the server */ ws_open_dumb_increment(); ws_open_status(); ws_open_mirror(); }, false); }()); wss-over-h2.png000066400000000000000000000052471476025525100361230ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-origin‰PNG  IHDR@@ŖiqŽsBIT|dˆ pHYs é éżuĪÓtEXtSoftwarewww.inkscape.org›ī< $IDATxœķ›}P”ÕĒ?ū<ūĀī" µ.I€@L%Zh‚÷vÉkŽ/YRęZčÕJŅjz›^ߝl*uųĆqF%j茤\›ĘŗN*p4mŗd"… ¦Bńź²,ūr’xڇ}Ų]ąQ'ąźwꌞs~ēå÷=ē÷ūó,Gćõz½\Ć{ƒė öھ*½^/>1œ]…F£ ś/„ Ą§øĒćĮķvćv»d 7h4A@EDQD„2‚EĒ<ƒF³X+īCwwŸb41čõzDQD£Ńīߏ{½Mčtæį·[†-:; TWWcµZ±Z­DDDČ»"(Ņ–w£Ó ĘtÆ>'Ož$)) Q1 hµZA|v’’‡ĆAEE.\ µµ§Ó)›u&ą ččŲ±X>ų`‚œĻÉ)%=ż‚B¦Øč>ł$€yóŹ™6ķgEżwßŰk×D9æfM qq­&³cGĒĒŅŠ`ĀhtaµŚIM­'3³’E‹~@Ɨ„»[äŻw'²gĻ8ŹĖm““„é 6¶ōō dg—1}zĻø.—‹ŗŗ:āćć±Ūķø\.Ł·õz£©ÉÄĪ=“Ÿ8ń¢‚—Kąłē ŖźF¢¢:Ų°a Ÿ~ii‰‹kåõ×g’›ū7…\G‡žŽ=55‘:”Č‚e€›öv÷Ż·o¾‰SČ·“„ŃŅĘ©S6M <v»®®.…ņ ņ Ż0Ø?ņóĒĖŹŌÖF*ź++o䥁[åüŗuÅ&(ßsēž„ŃŲżG›©Ź÷Fvv™"ļókĮĀyŸ”ްŁ.)ņžtuiyóĶæ+źkj”lŁņW<)¬ÜuW™™§ÉĪ~T!³råa.< Ąłó<˜ČƒVž”äē§Ź²įįNvīüœ““‹tt詮ޢØčzčtĄÜC…rUDG+ hmķ!`×®»V¼¶Ö"’æ©ÉD~žx9ævm1RF=lŲp­Vņ?)) ̜Y-×·µ…ŃÜl”óēxüńžÕž0”ŽGżQJźLĄ`péó¾`·ėxūķÉ$&6c6;ØÆ§«Kā8// »]Š«ćĒ×3gN $Õķä~‚aĈ.¹o€’’Ń'ØQ!Ŗ/Cž~ĄGĄ¶m“Ø«H‘Įē­½^ ēĪYp:E¶mK—ŪłVß'ļõė§2~MM¦ĄÉ ^ž|ņ„œļģŌ1sę?Ų“éÜī˻שnåļZZĀhk3°ysf³“œœRL¦nY¦¶ÖĀĒß!tĒæ2wīOrżģŁ•¼ōŅ1ÅcIOšņr[Ąų7~Åĉå¼Ó)²bÅtęĢyŒövƒZu.g(żĄīŻwŅŲ(­ÖĖ/Ćf»D||«\ßŌd"//MĪÆ][p¼Ž²å?äåż[AÜŁ³QĢž­š3 ‘|ųš<õŌ÷ŠņneéŅÕŖse&ÕɇJ^ł†:yķµ£ŒŻC@MM$Ēß ĄŲ±æńČ#ĮŌ²eßQZś.IIĶrYmm$›6eČŻ¼÷Ž~ žEX˜K.ß³g%%£UésE;@R.€åĖČ2!”E–ٽūN¼^iÉ׬)ABß,o»­‘ĀĀ*ŹŽ‰)Ÿ•UNnn‘¢ģčѾϽqE>Ąg£11ķ¼šĀq¹|ōčN’dƌi`޼ņ~ū5ŖQ <†‡BLL»"ļ#{ Pu€ĄÓ ĄźÕ% ūõ7‚­ž“i‹3¦É“Ļ×Jw·ČÖ­Qxō1cØ«ĮŌ©‹Y° ŒŌŌzFźąāŬZ5MŃgJJƒ*}.ƒ„LJję駕”Ģ€“µēĻW®ž‰7qš`"&²mŪ¤ c ‚—%K$g—ŸŸŹéÓVÖ­›rnńń­ŠƒÓ@pENą7”Ó)ÆĪ½wĄźÕ‡¶õūļO /čtn¶nżB¾lõ'o³]bß¾łĪ0PØŽ7ŻŌAV–“š‘‘Ž€‹H”jńāŲķ:ĀƝŠćŖk֔”ŌLqqVš›ĆE/11ķLž\ĖŅ„’åöŪeł}ū Ų»wß~{3gĻFŅÜl$<ÜIrņļ̚u†œœR¢¢:ÕŖųMŠķvc·Ūńzēń…ź‡"Ŗ«µ,[6…ŒŒ 222HIIĮjµ¢×믒.pĶ Ś ŚŪį×_”­ ¬V)™ļKŖ”Š€ŅRČŹ ]Ÿ› sē–/ZGŽo“_¼®¼vī„ĀBج”>ˆų Ń@j*<š¼ų"DGX TąpĄĻ?‡®oo^^Wŗ(–uvĀņå°};xB ½^8qBJ[¶Hä?ūlßó†!g<ü0õ/ėƒŻĻ=ĶͰj•ŗń†œÜøQņžX»Žė_ĪCŠ€¶6Ų¼łņŪ{<šÖ[źŚ )ŠŠ$ūQ„3`śō¾ūųź«Š}Ɛ" ,šÄ,cÓ&‰ /æ„W^ -ēpĄ¹ssH*Šhµ°dIO~Ź”¾ūŃŖpķW5 ¬_[·–WU ¬}n.,^ ÅÅR:|ĄbHæŸΟ݇Į±±ŸóU% ¦FJ— A7©©ŅįĘė…„ļ•ß?łč£Š}̘!‘0P ¹s€?4;VJ>ĄŃ£”Ū¼śŖŗ1†”čUUšĢ3”ėŸxī½W]ŸĆ†€ŚZø’~é“ ÷Ü;vØļ÷Ŗš€Ł z}`yGt«ūR„@Ydf†o™™°w/„…Æļ Wulßæ’˜ś [}aļ^øūīąŹ šĪ;°’å_‡¬ “¶Ā²ešŲcpéR`}f¦t]^±BŠ—‹!¤?‚€•+”¾>°^«…œ˜0>ū œNhiQ~+XøʍŲxCŽ€Y³ś¾ ŗ\—×wéé'`ș@Eş;ސ#ąĻĘu{ƒ UNpŅ$)®‡‚ټüÓOC„z‡°“'C(BĶ#T ÕBT”Śé@xųĄe-–že®&®Šh4rņĒ5A€F£Q<’č÷Ɍ ““, Ŗ*‘3gĪšĖ/æČfī¹Rż”ŃhE'‹Å‚Łl–~ö{2@€ļ%…Ū=™ęęhΟ’ŖŖJp8Ćź hµZ"""ˆcäȑ˜Ķft:¼‚ Š"&“ ›ĶFrr2&“‰¶¶6ÅCƒįŸ.F£«ÕJ\\QQQņ.€&ąk4räHDQÄf³Ék?Ü :³ŁŒÅbĮb±`0d‚¾óz½ø\.ŗ»»éźźĀétāv»‡•żū ?ŽŅj1 čõzt:ģ‚=Og|i8mż`ANž‘ $ |d0Ü öjś!ąZĄ’6ƒėŗM<µIEND®B`‚libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-foreign/000077500000000000000000000000001476025525100312635ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-foreign/CMakeLists.txt000066400000000000000000000174401476025525100340310ustar00rootroot00000000000000project(lws-minimal-http-server-eventlib-foreign C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckIncludeFile) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-server-eventlib-foreign) set(SRCS minimal-http-server-eventlib-foreign.c) set(requirements 1) require_pthreads(requirements) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) require_lws_config(LWS_WITH_TLS 1 requirements) CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(LWS_WITH_LIBUV)\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" LWS_WITH_LIBUV) CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(LWS_WITH_LIBEVENT)\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" LWS_WITH_LIBEVENT) CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(LWS_WITH_LIBEV)\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" LWS_WITH_LIBEV) CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(LWS_WITH_GLIB)\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" LWS_WITH_GLIB) CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(LWS_WITH_SDEVENT)\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" LWS_WITH_SDEVENT) CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(LWS_WITH_ULOOP)\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" LWS_WITH_ULOOP) if (LWS_WITH_LIBUV) find_path(LIBUV_INCLUDE_DIRS NAMES uv.h) find_library(LIBUV_LIBRARIES NAMES uv) message("libuv include dir: ${LIBUV_INCLUDE_DIRS}") message("libuv libraries: ${LIBUV_LIBRARIES}") include_directories("${LIBUV_INCLUDE_DIRS}") set(extralibs ${extralibs} ${LIBUV_LIBRARIES}) list(APPEND SRCS libuv.c) endif() if (LWS_WITH_LIBEVENT) find_path(LIBEVENT_INCLUDE_DIRS NAMES event2/event.h) find_library(LIBEVENT_LIBRARIES NAMES event) message("libevent include dir: ${LIBEVENT_INCLUDE_DIRS}") message("libevent libraries: ${LIBEVENT_LIBRARIES}") include_directories("${LIBEVENT_INCLUDE_DIRS}") set(extralibs ${extralibs} ${LIBEVENT_LIBRARIES}) list(APPEND SRCS libevent.c) endif() if (LWS_WITH_LIBEV) find_path(LIBEV_INCLUDE_DIRS NAMES ev.h) find_library(LIBEV_LIBRARIES NAMES ev) message("libev include dir: ${LIBEV_INCLUDE_DIRS}") message("libev libraries: ${LIBEV_LIBRARIES}") include_directories("${LIBEV_INCLUDE_DIRS}") set(extralibs ${extralibs} ${LIBEV_LIBRARIES}) list(APPEND SRCS libev.c) endif() if (LWS_WITH_GLIB) set(LWS_GLIB_INCLUDE_DIRS CACHE PATH "Path to the glib include directory") set(LWS_GLIB_LIBRARIES CACHE PATH "Path to the glib library") include (FindPkgConfig) if (NOT GLIB_FOUND) find_path(GLIB_INCLUDE_DIRS NAMES glib-2.0/glib.h) find_library(GLIB_LIBRARIES NAMES glib-2.0) if(GLIB_INCLUDE_DIRS AND GLIB_LIBRARIES) set(GLIB_FOUND 1) endif() if (GLIB_INCLUDE_DIRS) set(GLIB_INCLUDE_DIRS "${GLIB_INCLUDE_DIRS}/glib-2.0") endif() endif() PKG_SEARCH_MODULE(LWS_GLIB2 glib-2.0) if (LWS_GLIB2_FOUND) list(APPEND GLIB_INCLUDE_DIRS "${LWS_GLIB2_INCLUDE_DIRS}") endif() message("glib include dir: ${GLIB_INCLUDE_DIRS}") message("glib libraries: ${GLIB_LIBRARIES}") include_directories("${GLIB_INCLUDE_DIRS}") set(extralibs ${extralibs} ${GLIB_LIBRARIES}) list(APPEND SRCS glib.c) endif() if (LWS_WITH_SDEVENT) find_path(LIBSYSTEMD_INCLUDE_DIRS NAMES systemd/sd-event.h) find_library(LIBSYSTEMD_LIBRARIES NAMES systemd) message("libsystemd include dir: ${LIBSYSTEMD_INCLUDE_DIRS}") message("libsystemd libraries: ${LIBSYSTEMD_LIBRARIES}") include_directories("${LIBSYSTEMD_INCLUDE_DIRS}") set(extralibs ${extralibs} ${LIBSYSTEMD_LIBRARIES}) list(APPEND SRCS libsdevent.c) endif() if (LWS_WITH_ULOOP) find_path(LIBUBOX_INCLUDE_DIRS NAMES libubox/uloop.h) find_library(LIBUBOX_LIBRARIES NAMES ubox) message("libubox include dir: ${LIBUBOX_INCLUDE_DIRS}") message("libubox libraries: ${LIBUBOX_LIBRARIES}") include_directories("${LIBUBOX_INCLUDE_DIRS}") set(extralibs ${extralibs} ${LIBUBOX_LIBRARIES}) list(APPEND SRCS uloop.c) endif() message("Extra libs: ${extralibs}") if (NOT LWS_WITH_LIBUV AND NOT LWS_WITH_LIBEVENT AND NOT LWS_WITH_LIBEV AND NOT LWS_WITH_GLIB AND NOT LWS_WITH_ULOOP) set(requirements 0) endif() if (requirements) add_executable(${SAMP} ${SRCS}) # # tests are running in the same machine context in parallel so they # compete for the same ports. Select a base port from which sai # instance we are running in, add another digit at the actual test # according to which subtest it is. Then there can be no clashes # regardless of how many build and tests in parallel. # set(PORT_HSEF_SRV "961") if ("$ENV{SAI_INSTANCE_IDX}" STREQUAL "0") set(PORT_HSEF_SRV 962) endif() if ("$ENV{SAI_INSTANCE_IDX}" STREQUAL "1") set(PORT_HSEF_SRV 963) endif() if ("$ENV{SAI_INSTANCE_IDX}" STREQUAL "2") set(PORT_HSEF_SRV 964) endif() if ("$ENV{SAI_INSTANCE_IDX}" STREQUAL "3") set(PORT_HSEF_SRV 965) endif() if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${extralibs} ${PTHREAD_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${extralibs} ${PTHREAD_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) endif() # notice we override the evlib plugin source via LD_LIBRARY_PATH so # we are using the evlibs we just built, if any if (LWS_WITH_LIBUV) add_test(NAME hs_evlib_foreign_uv COMMAND lws-minimal-http-server-eventlib-foreign --uv -p ${PORT_HSEF_SRV}1) set_tests_properties(hs_evlib_foreign_uv PROPERTIES ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/http-server/minimal-http-server-eventlib-foreign TIMEOUT 50) endif() if (LWS_WITH_LIBEVENT) add_test(NAME hs_evlib_foreign_event COMMAND lws-minimal-http-server-eventlib-foreign --event -p ${PORT_HSEF_SRV}2) set_tests_properties(hs_evlib_foreign_event PROPERTIES ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/http-server/minimal-http-server-eventlib-foreign TIMEOUT 50) endif() if (LWS_WITH_LIBEV) add_test(NAME hs_evlib_foreign_ev COMMAND lws-minimal-http-server-eventlib-foreign --ev -p ${PORT_HSEF_SRV}3) set_tests_properties(hs_evlib_foreign_ev PROPERTIES ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/http-server/minimal-http-server-eventlib-foreign TIMEOUT 50) endif() if (LWS_WITH_GLIB) add_test(NAME hs_evlib_foreign_glib COMMAND lws-minimal-http-server-eventlib-foreign --glib -p ${PORT_HSEF_SRV}4) set_tests_properties(hs_evlib_foreign_glib PROPERTIES ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/http-server/minimal-http-server-eventlib-foreign TIMEOUT 50) endif() if (LWS_WITH_SDEVENT) add_test(NAME hs_evlib_foreign_sd COMMAND lws-minimal-http-server-eventlib-foreign --sd -p ${PORT_HSEF_SRV}5) set_tests_properties(hs_evlib_foreign_sd PROPERTIES ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/http-server/minimal-http-server-eventlib-foreign TIMEOUT 50) endif() if (LWS_WITH_SDEVENT) add_test(NAME hs_evlib_foreign_uloop COMMAND lws-minimal-http-server-eventlib-foreign --uloop -p ${PORT_HSEF_SRV}5) set_tests_properties(hs_evlib_foreign_uloop PROPERTIES ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/http-server/minimal-http-server-eventlib-foreign TIMEOUT 50) endif() endif() libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-foreign/README.md000066400000000000000000000043001476025525100325370ustar00rootroot00000000000000# lws minimal http server eventlib foreign Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 --uv|Use the libuv event library (lws must have been configured with `-DLWS_WITH_LIBUV=1`) --event|Use the libevent library (lws must have been configured with `-DLWS_WITH_LIBEVENT=1`) --ev|Use the libev event library (lws must have been configured with `-DLWS_WITH_LIBEV=1`) --sd|Use the systemd event library (lws must have been configured with `-DLWS_WITH_SDEVENT=1`) Notice libevent and libev cannot coexist in the one library. But all the other combinations are OK. x|libuv|libevent|libev ---|---|---|--- libuv|-|OK|OK libevent|OK|-|no libev|OK|no|- This demonstrates having lws take part in a libuv loop owned by something else, with its own objects running in the loop. Lws can join the loop, and clean up perfectly after itself without leaving anything behind or making trouble in the larger loop, which does not need to stop during lws creation or destruction. First the foreign loop is created with a 1s timer, and runs alone for 5s. Then the lws context is created inside the timer callback and runs for 10s... during this period you can visit http://localhost:7681 for normal lws service using the foreign loop. After the 10s are up, the lws context is destroyed inside the foreign loop timer. The foreign loop runs alone again for a further 5s and then exits itself. ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server-eventlib-foreign [2018/03/29 12:19:31:3480] USER: LWS minimal http server eventlib + foreign loop | visit http://localhost:7681 [2018/03/29 12:19:31:3724] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off [2018/03/29 12:19:31:3804] NOTICE: Using foreign event loop... [2018/03/29 12:19:31:3938] USER: Foreign 1Hz timer [2018/03/29 12:19:32:4011] USER: Foreign 1Hz timer [2018/03/29 12:19:33:4024] USER: Foreign 1Hz timer ^C[2018/03/29 12:19:33:8868] NOTICE: Signal 2 caught, exiting... [2018/03/29 12:19:33:8963] USER: main: starting exit cleanup... [2018/03/29 12:19:33:9064] USER: main: lws context destroyed: cleaning the foreign loop [2018/03/29 12:19:33:9108] USER: main: exiting... ``` Visit http://localhost:7681 libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-foreign/glib.c000066400000000000000000000040351476025525100323460ustar00rootroot00000000000000/* * lws-minimal-http-server-eventlib-foreign * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The glib specific code */ #include #include #include #include #include #include "private.h" #if !defined(G_SOURCE_FUNC) #define G_SOURCE_FUNC(f) ((GSourceFunc) (void (*)(void)) (f)) #endif typedef struct lws_glib_tag { GSource *gs; guint tag; } lws_glib_tag_t; #define lws_gs_valid(t) (t.gs) #define lws_gs_destroy(t) if (lws_gs_valid(t)) { \ g_source_remove(t.tag); \ g_source_unref(t.gs); \ t.gs = NULL; t.tag = 0; } static GMainLoop *loop_glib; static lws_glib_tag_t timer_outer_glib, sighandler_glib; static int timer_cb_glib(void *p) { foreign_timer_service(loop_glib); return 1; } static void signal_cb_glib(void *p) { signal_cb(SIGINT); } static void foreign_event_loop_init_and_run_glib(void) { /* we create and start our "foreign loop" */ loop_glib = g_main_loop_new(NULL, 0); sighandler_glib.gs = g_unix_signal_source_new(SIGINT); g_source_set_callback(sighandler_glib.gs, G_SOURCE_FUNC(signal_cb_glib), NULL, NULL); sighandler_glib.tag = g_source_attach(sighandler_glib.gs, g_main_loop_get_context(loop_glib)); timer_outer_glib.gs = g_timeout_source_new(1000); g_source_set_callback(timer_outer_glib.gs, timer_cb_glib, NULL, NULL); timer_outer_glib.tag = g_source_attach(timer_outer_glib.gs, g_main_loop_get_context(loop_glib)); g_main_loop_run(loop_glib); } static void foreign_event_loop_stop_glib(void) { g_main_loop_quit(loop_glib); } static void foreign_event_loop_cleanup_glib(void) { /* cleanup the foreign loop assets */ lws_gs_destroy(sighandler_glib); lws_gs_destroy(timer_outer_glib); g_main_loop_unref(loop_glib); loop_glib = NULL; } const struct ops ops_glib = { foreign_event_loop_init_and_run_glib, foreign_event_loop_stop_glib, foreign_event_loop_cleanup_glib }; libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-foreign/libev.c000066400000000000000000000027611476025525100325360ustar00rootroot00000000000000/* * lws-minimal-http-server-eventlib-foreign * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The libev specific code */ #include #include #include #include #include "private.h" static struct ev_loop *loop_ev; static struct ev_timer timer_outer_ev; static struct ev_signal sighandler_ev; static void timer_cb_ev(struct ev_loop *loop, struct ev_timer *watcher, int revents) { foreign_timer_service(loop_ev); } static void signal_cb_ev(struct ev_loop *loop, struct ev_signal *watcher, int revents) { signal_cb(watcher->signum); } static void foreign_event_loop_init_and_run_libev(void) { /* we create and start our "foreign loop" */ loop_ev = ev_loop_new(0); ev_signal_init(&sighandler_ev, signal_cb_ev, SIGINT); ev_signal_start(loop_ev, &sighandler_ev); ev_timer_init(&timer_outer_ev, timer_cb_ev, 0, 1); ev_timer_start(loop_ev, &timer_outer_ev); ev_run(loop_ev, 0); } static void foreign_event_loop_stop_libev(void) { ev_break(loop_ev, EVBREAK_ALL); } static void foreign_event_loop_cleanup_libev(void) { /* cleanup the foreign loop assets */ ev_timer_stop(loop_ev, &timer_outer_ev); ev_signal_stop(loop_ev, &sighandler_ev); ev_run(loop_ev, 0); ev_loop_destroy(loop_ev); } const struct ops ops_libev = { foreign_event_loop_init_and_run_libev, foreign_event_loop_stop_libev, foreign_event_loop_cleanup_libev }; libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-foreign/libevent.c000066400000000000000000000035411476025525100332420ustar00rootroot00000000000000/* * lws-minimal-http-server-eventlib-foreign * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The libevent specific code */ #include #include #include #include #include "private.h" static struct event_base *loop_event; static struct event *timer_outer_event; static struct event *sighandler_event; static void timer_cb_event(evutil_socket_t fd, short event, void *arg) { foreign_timer_service(loop_event); } static void signal_cb_event(evutil_socket_t fd, short event, void *arg) { signal_cb((int)(lws_intptr_t)arg); } static void foreign_event_loop_init_and_run_libevent(void) { struct timeval tv; /* we create and start our "foreign loop" */ tv.tv_sec = 1; tv.tv_usec = 0; event_enable_debug_mode(); loop_event = event_base_new(); sighandler_event = evsignal_new((struct event_base *)loop_event, SIGINT, signal_cb_event, (void*)SIGINT); timer_outer_event = event_new((struct event_base *)loop_event, -1, EV_PERSIST, timer_cb_event, NULL); //evtimer_new(loop_event, timer_cb_event, NULL); evtimer_add(timer_outer_event, &tv); event_base_loop(loop_event, 0); } static void foreign_event_loop_stop_libevent(void) { event_base_loopexit(loop_event, NULL); } static void foreign_event_loop_cleanup_libevent(void) { /* cleanup the foreign loop assets */ evtimer_del(timer_outer_event); event_free(timer_outer_event); evsignal_del(sighandler_event); event_free(sighandler_event); event_base_loop(loop_event, 0); event_base_free(loop_event); } const struct ops ops_libevent = { foreign_event_loop_init_and_run_libevent, foreign_event_loop_stop_libevent, foreign_event_loop_cleanup_libevent }; libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-foreign/libsdevent.c000066400000000000000000000034621476025525100335730ustar00rootroot00000000000000/* * lws-minimal-http-server-eventlib-foreign * * Written in 2020 by Christian Fuchs * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The sdevent specific code */ #include #include #include #include #include "private.h" static struct sd_event *sd_loop; static sd_event_source *sd_timer; static sd_event_source *sd_signal; static int timer_cb_sd(sd_event_source *source, uint64_t now, void *user) { foreign_timer_service(sd_loop); if (sd_timer) { sd_event_source_set_time(sd_timer, now + 1000000); sd_event_source_set_enabled(sd_timer, SD_EVENT_ON); } return 0; } static int signal_cb_sd(sd_event_source *source, const struct signalfd_siginfo *si, void *user) { signal_cb((int)si->ssi_signo); return 0; } static void foreign_event_loop_init_and_run_libsdevent(void) { uint64_t now; /* we create and start our "foreign loop" */ sd_event_default(&sd_loop); sd_event_add_signal(sd_loop, &sd_signal, SIGINT, signal_cb_sd, NULL); sd_event_now(sd_loop, CLOCK_MONOTONIC, &now); sd_event_add_time(sd_loop, &sd_timer, CLOCK_MONOTONIC, now, (uint64_t) 1000, timer_cb_sd, NULL); sd_event_loop(sd_loop); } static void foreign_event_loop_stop_libsdevent(void) { sd_event_exit(sd_loop, 0); } static void foreign_event_loop_cleanup_libsdevent(void) { sd_event_source_set_enabled(sd_timer, SD_EVENT_OFF); sd_timer = sd_event_source_unref(sd_timer); sd_event_source_set_enabled(sd_signal, SD_EVENT_OFF); sd_signal = sd_event_source_unref(sd_signal); sd_loop = sd_event_unref(sd_loop); } const struct ops ops_sdevent = { foreign_event_loop_init_and_run_libsdevent, foreign_event_loop_stop_libsdevent, foreign_event_loop_cleanup_libsdevent }; libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-foreign/libuv.c000066400000000000000000000034201476025525100325470ustar00rootroot00000000000000/* * lws-minimal-http-server-eventlib-foreign * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The libuv specific code */ #include #include #include #include #ifdef LWS_HAVE_UV_VERSION_H #include #endif #ifdef LWS_HAVE_NEW_UV_VERSION_H #include #endif #include "private.h" static uv_loop_t loop_uv; static uv_timer_t timer_outer_uv; static uv_signal_t sighandler_uv; static void timer_cb_uv(uv_timer_t *t) { foreign_timer_service(&loop_uv); } static void signal_cb_uv(uv_signal_t *watcher, int signum) { signal_cb(signum); } static void foreign_event_loop_init_and_run_libuv(void) { /* we create and start our "foreign loop" */ #if (UV_VERSION_MAJOR > 0) // Travis... uv_loop_init(&loop_uv); #endif uv_signal_init(&loop_uv, &sighandler_uv); uv_signal_start(&sighandler_uv, signal_cb_uv, SIGINT); uv_timer_init(&loop_uv, &timer_outer_uv); #if (UV_VERSION_MAJOR > 0) // Travis... uv_timer_start(&timer_outer_uv, timer_cb_uv, 0, 1000); #else (void)timer_cb_uv; #endif uv_run(&loop_uv, UV_RUN_DEFAULT); } static void foreign_event_loop_stop_libuv(void) { uv_stop(&loop_uv); } static void foreign_event_loop_cleanup_libuv(void) { /* cleanup the foreign loop assets */ uv_timer_stop(&timer_outer_uv); uv_close((uv_handle_t*)&timer_outer_uv, NULL); uv_signal_stop(&sighandler_uv); uv_close((uv_handle_t *)&sighandler_uv, NULL); uv_run(&loop_uv, UV_RUN_DEFAULT); #if (UV_VERSION_MAJOR > 0) // Travis... uv_loop_close(&loop_uv); #endif } const struct ops ops_libuv = { foreign_event_loop_init_and_run_libuv, foreign_event_loop_stop_libuv, foreign_event_loop_cleanup_libuv }; localhost-100y.cert000066400000000000000000000040721476025525100345450ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-foreign-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- localhost-100y.key000066400000000000000000000063101476025525100343750ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-foreign-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- minimal-http-server-eventlib-foreign.c000066400000000000000000000216121476025525100405160ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-foreign/* * lws-minimal-http-server-eventlib-foreign * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws that * uses a libuv event loop created outside lws. It shows how lws can * participate in someone else's event loop and clean up after itself. * * You choose the event loop to work with at runtime, by giving the * --uv, --event or --ev switch. Lws has to have been configured to build the * selected event lib support. * * To keep it simple, it serves stuff from the subdirectory * "./mount-origin" of the directory it was started in. * You can change that by changing mount.origin below. */ #include #include #include #include "private.h" static struct lws_context_creation_info info; static const struct ops *ops = NULL; struct lws_context *context; int lifetime = 5, reported; enum { TEST_STATE_CREATE_LWS_CONTEXT, TEST_STATE_DESTROY_LWS_CONTEXT, TEST_STATE_EXIT }; static int sequence = TEST_STATE_CREATE_LWS_CONTEXT; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void signal_cb(int signum) { lwsl_notice("Signal %d caught, exiting...\n", signum); switch (signum) { case SIGTERM: case SIGINT: break; default: break; } lws_context_destroy(context); } static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { switch (reason) { case LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: lwsl_user("LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: resp %u\n", lws_http_client_http_response(wsi)); break; /* because we are protocols[0] ... */ case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); break; /* chunks of chunked content, with header removed */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ: lwsl_user("RECEIVE_CLIENT_HTTP_READ: read %d\n", (int)len); lwsl_hexdump_info(in, len); return 0; /* don't passthru */ /* uninterpreted http content */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP: { char buffer[1024 + LWS_PRE]; char *px = buffer + LWS_PRE; int lenx = sizeof(buffer) - LWS_PRE; if (lws_http_client_read(wsi, &px, &lenx) < 0) return -1; } return 0; /* don't passthru */ case LWS_CALLBACK_COMPLETED_CLIENT_HTTP: lwsl_user("LWS_CALLBACK_COMPLETED_CLIENT_HTTP %s\n", lws_wsi_tag(wsi)); break; case LWS_CALLBACK_CLOSED_CLIENT_HTTP: lwsl_info("%s: closed: %s\n", __func__, lws_wsi_tag(wsi)); break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static const struct lws_protocols protocols[] = { { "httptest", callback_http, 0, 0, 0, NULL, 0}, LWS_PROTOCOL_LIST_TERM }; static int do_client_conn(void) { struct lws_client_connect_info i; memset(&i, 0, sizeof i); /* otherwise uninitialized garbage */ i.context = context; i.ssl_connection = LCCSCF_USE_SSL; i.port = 443; i.address = "warmcat.com"; i.ssl_connection |= LCCSCF_H2_QUIRK_OVERFLOWS_TXCR | LCCSCF_H2_QUIRK_NGHTTP2_END_STREAM; i.path = "/"; i.host = i.address; i.origin = i.address; i.method = "GET"; i.local_protocol_name = protocols[0].name; #if defined(LWS_WITH_SYS_FAULT_INJECTION) i.fi_wsi_name = "user"; #endif if (!lws_client_connect_via_info(&i)) { lwsl_err("Client creation failed\n"); return 1; } return 0; } /* this is called at 1Hz using a foreign loop timer */ void foreign_timer_service(void *foreign_loop) { void *foreign_loops[1]; lwsl_user("Foreign 1Hz timer\n"); if (sequence == TEST_STATE_EXIT && !context && !reported) { /* * at this point the lws_context_destroy() we did earlier * has completed and the entire context is wholly destroyed */ lwsl_user("lws_destroy_context() done, continuing for 5s\n"); reported = 1; } if (--lifetime) return; switch (sequence++) { case TEST_STATE_CREATE_LWS_CONTEXT: /* this only has to exist for the duration of create context */ foreign_loops[0] = foreign_loop; info.foreign_loops = foreign_loops; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return; } lwsl_user("LWS Context created and will be active for 10s\n"); do_client_conn(); lifetime = 11; break; case TEST_STATE_DESTROY_LWS_CONTEXT: /* cleanup the lws part */ lwsl_user("Destroying lws context and continuing loop for 5s\n"); lws_context_destroy(context); lifetime = 6; break; case TEST_STATE_EXIT: lwsl_user("Deciding to exit foreign loop too\n"); ops->stop(); break; default: break; } } int main(int argc, const char **argv) { const char *p; int logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server eventlib + foreign loop |" " visit http://localhost:7681\n"); /* * We prepare the info here, but don't use it until later in the * timer callback, to demonstrate the independence of the foreign loop * and lws. */ memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; if ((p = lws_cmdline_option(argc, argv, "-p"))) info.port = atoi(p); info.mounts = &mount; info.error_document_404 = "/404.html"; info.pcontext = &context; info.protocols = protocols; info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; if (lws_cmdline_option(argc, argv, "-s")) { info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; } /* * We configure lws to use the chosen event loop, and select the * matching event-lib specific code for our demo operations */ #if defined(LWS_WITH_LIBUV) if (lws_cmdline_option(argc, argv, "--uv")) { info.options |= LWS_SERVER_OPTION_LIBUV; ops = &ops_libuv; lwsl_notice("%s: using libuv event loop\n", __func__); } else #endif #if defined(LWS_WITH_LIBEVENT) if (lws_cmdline_option(argc, argv, "--event")) { info.options |= LWS_SERVER_OPTION_LIBEVENT; ops = &ops_libevent; lwsl_notice("%s: using libevent loop\n", __func__); } else #endif #if defined(LWS_WITH_LIBEV) if (lws_cmdline_option(argc, argv, "--ev")) { info.options |= LWS_SERVER_OPTION_LIBEV; ops = &ops_libev; lwsl_notice("%s: using libev loop\n", __func__); } else #endif #if defined(LWS_WITH_GLIB) if (lws_cmdline_option(argc, argv, "--glib")) { info.options |= LWS_SERVER_OPTION_GLIB; ops = &ops_glib; lwsl_notice("%s: using glib loop\n", __func__); } else #endif #if defined(LWS_WITH_SDEVENT) if (lws_cmdline_option(argc, argv, "--sd")) { info.options |= LWS_SERVER_OPTION_SDEVENT; ops = &ops_sdevent; lwsl_notice("%s: using sd-event loop\n", __func__); } else #endif #if defined(LWS_WITH_ULOOP) if (lws_cmdline_option(argc, argv, "--uloop")) { info.options |= LWS_SERVER_OPTION_ULOOP; ops = &ops_uloop; lwsl_notice("%s: using uloop loop\n", __func__); } else #endif { lwsl_err("This app only makes sense when used\n"); lwsl_err(" with a foreign loop, --uv, --event, --glib, --ev or --sd\n"); return 1; } lwsl_user(" This app creates a foreign event loop with a timer +\n"); lwsl_user(" signalhandler, and performs a test in three phases:\n"); lwsl_user("\n"); lwsl_user(" 1) 5s: Runs the loop with just the timer\n"); lwsl_user(" 2) 10s: create an lws context serving on localhost:7681\n"); lwsl_user(" using the same foreign loop. Destroy it after 10s.\n"); lwsl_user(" 3) 5s: Run the loop again with just the timer\n"); lwsl_user("\n"); lwsl_user(" Finally close only the timer and signalhandler and\n"); lwsl_user(" exit the loop cleanly\n"); lwsl_user("\n"); /* foreign loop specific startup and run */ ops->init_and_run(); lws_context_destroy(context); /* foreign loop specific cleanup and exit */ ops->cleanup(); lwsl_user("%s: exiting...\n", __func__); return 0; } libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-foreign/mount-origin/000077500000000000000000000000001476025525100337125ustar00rootroot00000000000000404.html000066400000000000000000000002271476025525100350310ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-foreign/mount-origin

    404

    Sorry, that file doesn't exist. favicon.ico000066400000000000000000000025761476025525100357660ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-foreign/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’index.html000066400000000000000000000006501476025525100356310ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-foreign/mount-origin
    Hello from the minimal http server eventlib foreign loop example.
    The timer messages in the console are coming from
    a timer on the event library lib loop set up before the lws context
    started using it. libwebsockets.org-logo.svg000066400000000000000000000226061476025525100407460ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-foreign/mount-origin image/svg+xml strict-csp.svg000066400000000000000000000302361476025525100364530ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-foreign/mount-origin libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-foreign/private.h000066400000000000000000000005141476025525100331060ustar00rootroot00000000000000 struct ops { void (*init_and_run)(void); void (*stop)(void); void (*cleanup)(void); }; extern struct lws_context *context; extern int lifetime, reported; void foreign_timer_service(void *foreign_loop); void signal_cb(int signum); extern const struct ops ops_libuv, ops_libevent, ops_glib, ops_libev, ops_sdevent, ops_uloop; libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-foreign/uloop.c000066400000000000000000000020641476025525100325670ustar00rootroot00000000000000/* * lws-minimal-http-server-eventlib-foreign * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The uloop specific code */ #include #include #include #include #include "private.h" static struct uloop_timeout timer_outer_uloop; static void timer_cb_uloop(struct uloop_timeout *ti) { foreign_timer_service(NULL); uloop_timeout_set(&timer_outer_uloop, 1090); } static void foreign_event_loop_init_and_run_uloop(void) { uloop_init(); timer_outer_uloop.cb = timer_cb_uloop; uloop_timeout_add(&timer_outer_uloop); uloop_timeout_set(&timer_outer_uloop, 1090); uloop_run(); } static void foreign_event_loop_stop_uloop(void) { uloop_end(); } static void foreign_event_loop_cleanup_uloop(void) { uloop_timeout_cancel(&timer_outer_uloop); } const struct ops ops_uloop = { foreign_event_loop_init_and_run_uloop, foreign_event_loop_stop_uloop, foreign_event_loop_cleanup_uloop }; libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-smp/000077500000000000000000000000001476025525100304315ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-smp/CMakeLists.txt000066400000000000000000000015201476025525100331670ustar00rootroot00000000000000project(lws-minimal-http-server-eventlib-smp C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckIncludeFile) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-server-eventlib-smp) set(SRCS minimal-http-server-eventlib-smp.c) set(requirements 1) require_pthreads(requirements) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${PTHREAD_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared ${PTHREAD_LIB}) else() target_link_libraries(${SAMP} websockets ${PTHREAD_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-smp/README.md000066400000000000000000000017311476025525100317120ustar00rootroot00000000000000# lws minimal http server eventlib WARNING: this is under development, it's not stable. This demonstrates a minimal http server that can use any of the event libraries Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -t |Number of threads to use. --uv|Use the libuv event library (lws must have been configured with `-DLWS_WITH_LIBUV=1`) --event|Use the libevent library (lws must have been configured with `-DLWS_WITH_LIBEVENT=1`) --ev|Use the libev event library (lws must have been configured with `-DLWS_WITH_LIBEV=1`) ## build lilbwebsockets must have been built with `LWS_MAX_SMP` greater than 1 to use multiple threads. ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server-eventlib-smp [2018/03/04 09:30:02:7986] USER: LWS minimal http server-eventlib | visit http://localhost:7681 [2018/03/04 09:30:02:7986] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 on ``` Visit http://localhost:7681 localhost-100y.cert000066400000000000000000000040721476025525100337130ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-smp-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-smp/localhost-100y.key000066400000000000000000000063101476025525100336220ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- minimal-http-server-eventlib-smp.c000066400000000000000000000110161476025525100370270ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-smp/* * lws-minimal-http-server-eventlib-smp * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal http[s] server that can work with any of the * supported event loop backends, or the default poll() one. * * To keep it simple, it serves stuff from the subdirectory * "./mount-origin" of the directory it was started in. * You can change that by changing mount.origin below. */ #include #include #include #if defined(WIN32) #define HAVE_STRUCT_TIMESPEC #if defined(pid_t) #undef pid_t #endif #endif #include #define COUNT_THREADS 8 static struct lws_context *context; static volatile int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void *thread_service(void *threadid) { while (lws_service_tsi(context, 10000, (int)(lws_intptr_t)threadid) >= 0 && !interrupted) ; pthread_exit(NULL); return NULL; } void signal_cb(void *handle, int signum) { interrupted = 1; switch (signum) { case SIGTERM: case SIGINT: break; default: lwsl_err("%s: signal %d\n", __func__, signum); break; } lws_context_destroy(context); } void sigint_handler(int sig) { signal_cb(NULL, sig); } int main(int argc, const char **argv) { pthread_t pthread_service[COUNT_THREADS]; struct lws_context_creation_info info; const char *p; void *retval; int n, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server eventlib SMP | visit http://localhost:7681\n"); lwsl_user(" [-s (ssl)] [--uv (libuv)] [--ev (libev)] [--event (libevent)]\n"); lwsl_user("WARNING: Not stable, under development!\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.error_document_404 = "/404.html"; info.pcontext = &context; info.signal_cb = signal_cb; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; if ((p = lws_cmdline_option(argc, argv, "-t"))) { info.count_threads = (unsigned int)atoi(p); if (info.count_threads < 1 || info.count_threads > LWS_MAX_SMP) return 1; } else info.count_threads = COUNT_THREADS; #if defined(LWS_WITH_TLS) if (lws_cmdline_option(argc, argv, "-s")) { info.options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; } #endif if (lws_cmdline_option(argc, argv, "--uv")) info.options |= LWS_SERVER_OPTION_LIBUV; else if (lws_cmdline_option(argc, argv, "--event")) info.options |= LWS_SERVER_OPTION_LIBEVENT; else if (lws_cmdline_option(argc, argv, "--ev")) info.options |= LWS_SERVER_OPTION_LIBEV; else if (lws_cmdline_option(argc, argv, "--glib")) info.options |= LWS_SERVER_OPTION_GLIB; else signal(SIGINT, sigint_handler); context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } lwsl_notice(" Service threads: %d\n", lws_get_count_threads(context)); /* start all the service threads */ for (n = 0; n < lws_get_count_threads(context); n++) if (pthread_create(&pthread_service[n], NULL, thread_service, (void *)(lws_intptr_t)n)) lwsl_err("Failed to start service thread\n"); /* wait for all the service threads to exit */ while ((--n) >= 0) pthread_join(pthread_service[n], &retval); lwsl_notice("%s: calling external context destroy\n", __func__); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-smp/mount-origin/000077500000000000000000000000001476025525100330605ustar00rootroot00000000000000404.html000066400000000000000000000002271476025525100341770ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-smp/mount-origin

    404

    Sorry, that file doesn't exist. favicon.ico000066400000000000000000000025761476025525100351340ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-smp/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’index.html000066400000000000000000000005601476025525100347770ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-smp/mount-origin
    Hello from the minimal http server event loop example.
    You can confirm the 404 page handler by going to this nonexistant page. libwebsockets.org-logo.svg000066400000000000000000000226061476025525100401140ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-smp/mount-origin image/svg+xml strict-csp.svg000066400000000000000000000302361476025525100356210ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-smp/mount-origin libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib/000077500000000000000000000000001476025525100276345ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib/CMakeLists.txt000066400000000000000000000013361476025525100323770ustar00rootroot00000000000000project(lws-minimal-http-server-eventlib C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-server-eventlib) set(SRCS minimal-http-server-eventlib.c) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib/README.md000066400000000000000000000014301476025525100311110ustar00rootroot00000000000000# lws minimal http server eventlib This demonstrates a minimal http server that can use any of the event libraries Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 --uv|Use the libuv event library (lws must have been configured with `-DLWS_WITH_LIBUV=1`) --event|Use the libevent library (lws must have been configured with `-DLWS_WITH_LIBEVENT=1`) --ev|Use the libev event library (lws must have been configured with `-DLWS_WITH_LIBEV=1`) ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server-eventlib [2018/03/04 09:30:02:7986] USER: LWS minimal http server-eventlib | visit http://localhost:7681 [2018/03/04 09:30:02:7986] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 on ``` Visit http://localhost:7681 libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib/localhost-100y.cert000066400000000000000000000040721476025525100331750ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib/localhost-100y.key000066400000000000000000000063101476025525100330250ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- minimal-http-server-eventlib.c000066400000000000000000000066321476025525100354450ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib/* * lws-minimal-http-server-eventlib * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal http[s] server that can work with any of the * supported event loop backends, or the default poll() one. * * To keep it simple, it serves stuff from the subdirectory * "./mount-origin" of the directory it was started in. * You can change that by changing mount.origin below. */ #include #include #include static struct lws_context *context; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void signal_cb(void *handle, int signum) { switch (signum) { case SIGTERM: case SIGINT: break; default: lwsl_err("%s: signal %d\n", __func__, signum); break; } lws_context_destroy(context); } void sigint_handler(int sig) { signal_cb(NULL, sig); } int main(int argc, const char **argv) { struct lws_context_creation_info info; const char *p; int logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server eventlib | visit http://localhost:7681\n"); lwsl_user(" [-s (ssl)] [--uv (libuv)] [--ev (libev)] [--event (libevent)]\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.error_document_404 = "/404.html"; info.pcontext = &context; info.signal_cb = signal_cb; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; #if defined(LWS_WITH_TLS) if (lws_cmdline_option(argc, argv, "-s")) { info.options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; } #endif if (lws_cmdline_option(argc, argv, "--uv")) info.options |= LWS_SERVER_OPTION_LIBUV; else if (lws_cmdline_option(argc, argv, "--event")) info.options |= LWS_SERVER_OPTION_LIBEVENT; else if (lws_cmdline_option(argc, argv, "--ev")) info.options |= LWS_SERVER_OPTION_LIBEV; else if (lws_cmdline_option(argc, argv, "--glib")) info.options |= LWS_SERVER_OPTION_GLIB; else signal(SIGINT, sigint_handler); context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (!lws_service(context, 0)) ; lwsl_info("calling external context destroy\n"); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib/mount-origin/000077500000000000000000000000001476025525100322635ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib/mount-origin/404.html000066400000000000000000000002271476025525100334610ustar00rootroot00000000000000

    404

    Sorry, that file doesn't exist. favicon.ico000066400000000000000000000025761476025525100343370ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’index.html000066400000000000000000000005601476025525100342020ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib/mount-origin
    Hello from the minimal http server event loop example.
    You can confirm the 404 page handler by going to this nonexistant page. libwebsockets.org-logo.svg000066400000000000000000000226061476025525100373170ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib/mount-origin image/svg+xml strict-csp.svg000066400000000000000000000302361476025525100350240ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib/mount-origin libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-get/000077500000000000000000000000001476025525100275445ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-get/CMakeLists.txt000066400000000000000000000013361476025525100323070ustar00rootroot00000000000000project(lws-minimal-http-server-form-get C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-server-form-get) set(SRCS minimal-http-server-form-get.c) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-get/README.md000066400000000000000000000010641476025525100310240ustar00rootroot00000000000000# lws minimal http server form GET ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server-form-get [2018/03/29 08:29:41:7044] USER: LWS minimal http server form GET | visit http://localhost:7681 [2018/03/29 08:29:41:7044] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off [2018/03/29 08:29:49:8601] USER: text1: (len 4) 'xxxx' [2018/03/29 08:29:49:8601] USER: send: (len 6) 'Submit' ``` Visit http://localhost:7681, submit the form. The form parameters are dumped to the log and you are redirected to a different page. minimal-http-server-form-get.c000066400000000000000000000073621476025525100352660ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-get/* * lws-minimal-http-server-form-get * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal http server that performs a form GET with a couple * of parameters. It dumps the parameters to the console log and redirects * to another page. */ #include #include #include static int interrupted; static const char * param_names[] = { "text1", "send" }; static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { uint8_t buf[LWS_PRE + LWS_RECOMMENDED_MIN_HEADER_SPACE], *start = &buf[LWS_PRE], *p = start, *end = &buf[sizeof(buf) - 1]; int n; switch (reason) { case LWS_CALLBACK_HTTP: if (!lws_hdr_total_length(wsi, WSI_TOKEN_GET_URI)) /* not a GET */ break; lwsl_err("%s: %s\n", __func__, (const char *)in); if (strcmp((const char *)in, "/form1")) /* not our form URL */ break; /* we just dump the decoded things to the log */ for (n = 0; n < (int)LWS_ARRAY_SIZE(param_names); n++) { int rv = lws_get_urlarg_by_name_safe(wsi, param_names[n], (char *)buf, sizeof(buf)); if (rv < 0) lwsl_user("%s: undefined\n", param_names[n]); else lwsl_user("%s: (len %d) '%s'\n", param_names[n], (int)rv, buf); } /* * Our response is to redirect to a static page. We could * have generated a dynamic html page here instead. */ if (lws_http_redirect(wsi, HTTP_STATUS_MOVED_PERMANENTLY, (unsigned char *)"after-form1.html", 16, &p, end) < 0) return -1; break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static struct lws_protocols protocols[] = { { "http", callback_http, 0, 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; /* default mount serves the URL space from ./mount-origin */ static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server GET | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.protocols = protocols; info.mounts = &mount; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-get/mount-origin/000077500000000000000000000000001476025525100321735ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-get/mount-origin/404.html000066400000000000000000000002261476025525100333700ustar00rootroot00000000000000

    404

    Sorry, that file doesn't exist. after-form1.html000066400000000000000000000003371476025525100351300ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-get/mount-origin
    Thanks for posting the form. favicon.ico000066400000000000000000000025761476025525100342470ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-get/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’index.html000066400000000000000000000011371476025525100341130ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-get/mount-origin
    Hello from the minimal http form GET example.

    This is a static page served from ./mount-origin/index.html.

    When you submit the form below, you will see the values of the
    form parameters reported on the console log.

    Type some text:

    libwebsockets.org-logo.svg000066400000000000000000000226061476025525100372270ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-get/mount-origin image/svg+xml strict-csp.svg000066400000000000000000000302361476025525100347340ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-get/mount-origin libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-post-file/000077500000000000000000000000001476025525100306675ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-post-file/CMakeLists.txt000066400000000000000000000013601476025525100334270ustar00rootroot00000000000000project(lws-minimal-http-server-form-post-file C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-server-form-post-file) set(SRCS minimal-http-server-form-post-file.c) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-post-file/README.md000066400000000000000000000013451476025525100321510ustar00rootroot00000000000000# lws minimal http server form POST file ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server-form-post-file [2018/03/29 09:58:30:8800] USER: LWS minimal http server POST file | visit http://localhost:7681 [2018/03/29 09:58:30:8800] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off [2018/03/29 09:58:45:3284] USER: file_upload_cb: upload done, written 2729 to wss-over-h2.png [2018/03/29 09:58:45:3284] USER: text1: (len 3) 'xxx' [2018/03/29 09:58:45:3284] USER: send: (len 6) 'Submit' ``` Visit http://localhost:7681, select a file to upload and submit the form. The file is uploaded and saved in the cwd, the form parameters are dumped to the log and you are redirected to a different page. minimal-http-server-form-post-file.c000066400000000000000000000151431476025525100375300ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-post-file/* * lws-minimal-http-server-form-post-file * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal http server that performs POST with a couple * of parameters and a file upload, all in multipart (mime) form mode. * It saves the uploaded file in the current directory, dumps the parameters to * the console log and redirects to another page. */ #include #include #include #if !defined(WIN32) #include #endif #include #include #include /* * Unlike ws, http is a stateless protocol. This pss only exists for the * duration of a single http transaction. With http/1.1 keep-alive and http/2, * that is unrelated to (shorter than) the lifetime of the network connection. */ struct pss { struct lws_spa *spa; /* lws helper decodes multipart form */ char filename[128]; /* the filename of the uploaded file */ unsigned long long file_length; /* the amount of bytes uploaded */ int fd; /* fd on file being saved */ }; static int interrupted; static const char * const param_names[] = { "text1", "send", }; enum enum_param_names { EPN_TEXT1, EPN_SEND, }; static int file_upload_cb(void *data, const char *name, const char *filename, char *buf, int len, enum lws_spa_fileupload_states state) { struct pss *pss = (struct pss *)data; switch (state) { case LWS_UFS_OPEN: /* take a copy of the provided filename */ lws_strncpy(pss->filename, filename, sizeof(pss->filename) - 1); /* remove any scary things like .. */ lws_filename_purify_inplace(pss->filename); /* open a file of that name for write in the cwd */ pss->fd = lws_open(pss->filename, O_CREAT | O_TRUNC | O_RDWR, 0600); if (pss->fd == -1) { lwsl_notice("Failed to open output file %s\n", pss->filename); return 1; } break; case LWS_UFS_FINAL_CONTENT: case LWS_UFS_CONTENT: if (len) { int n; pss->file_length += (unsigned int)len; n = (int)write(pss->fd, buf, (unsigned int)len); if (n < len) { lwsl_notice("Problem writing file %d\n", errno); } } if (state == LWS_UFS_CONTENT) /* wasn't the last part of the file */ break; /* the file upload is completed */ lwsl_user("%s: upload done, written %lld to %s\n", __func__, pss->file_length, pss->filename); close(pss->fd); pss->fd = -1; break; case LWS_UFS_CLOSE: break; } return 0; } static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { uint8_t buf[LWS_PRE + LWS_RECOMMENDED_MIN_HEADER_SPACE], *start = &buf[LWS_PRE], *p = start, *end = &buf[sizeof(buf) - 1]; struct pss *pss = (struct pss *)user; int n; switch (reason) { case LWS_CALLBACK_HTTP: /* * Manually report that our form target URL exists * * you can also do this by adding a mount for the form URL * to the protocol with type LWSMPRO_CALLBACK, then no need * to trap LWS_CALLBACK_HTTP. */ if (!strcmp((const char *)in, "/form1")) /* assertively allow it to exist in the URL space */ return 0; /* default to 404-ing the URL if not mounted */ break; case LWS_CALLBACK_HTTP_BODY: /* create the POST argument parser if not already existing */ if (!pss->spa) { pss->spa = lws_spa_create(wsi, param_names, LWS_ARRAY_SIZE(param_names), 1024, file_upload_cb, pss); if (!pss->spa) return -1; } /* let it parse the POST data */ if (lws_spa_process(pss->spa, in, (int)len)) return -1; break; case LWS_CALLBACK_HTTP_BODY_COMPLETION: /* inform the spa no more payload data coming */ lws_spa_finalize(pss->spa); /* we just dump the decoded things to the log */ for (n = 0; n < (int)LWS_ARRAY_SIZE(param_names); n++) { if (!lws_spa_get_string(pss->spa, n)) lwsl_user("%s: undefined\n", param_names[n]); else lwsl_user("%s: (len %d) '%s'\n", param_names[n], lws_spa_get_length(pss->spa, n), lws_spa_get_string(pss->spa, n)); } /* * Our response is to redirect to a static page. We could * have generated a dynamic html page here instead. */ if (lws_http_redirect(wsi, HTTP_STATUS_MOVED_PERMANENTLY, (unsigned char *)"after-form1.html", 16, &p, end) < 0) return -1; break; case LWS_CALLBACK_HTTP_DROP_PROTOCOL: /* called when our wsi user_space is going to be destroyed */ if (pss->spa) { lws_spa_destroy(pss->spa); pss->spa = NULL; } break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static struct lws_protocols protocols[] = { { "http", callback_http, sizeof(struct pss), 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; /* default mount serves the URL space from ./mount-origin */ static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server POST file | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.protocols = protocols; info.mounts = &mount; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-post-file/mount-origin/000077500000000000000000000000001476025525100333165ustar00rootroot00000000000000404.html000066400000000000000000000002261476025525100344340ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-post-file/mount-origin

    404

    Sorry, that file doesn't exist. after-form1.html000066400000000000000000000004631476025525100362530ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-post-file/mount-origin
    Thanks for posting the form.

    The file you uploaded should have been saved in the current directory. favicon.ico000066400000000000000000000025761476025525100353720ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-post-file/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’index.html000066400000000000000000000016021476025525100352330ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-post-file/mount-origin
    Hello from the minimal http form POST file example.

    This is a static page served from ./mount-origin/index.html.

    When you POST the form below, you will see the values of the
    form parameters reported on the console log, and the file will be uploaded and saved in the current working directory.

    Type some text:


    Select a file to upload:  

    libwebsockets.org-logo.svg000066400000000000000000000226061476025525100403520ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-post-file/mount-origin image/svg+xml strict-csp.svg000066400000000000000000000302361476025525100360570ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-post-file/mount-origin libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-post-lwsac/000077500000000000000000000000001476025525100310615ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-post-lwsac/CMakeLists.txt000066400000000000000000000013551476025525100336250ustar00rootroot00000000000000project(lws-minimal-http-server-form-post-lwsac C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-server-form-post-lwsac) set(SRCS minimal-http-server-form-post.c) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-post-lwsac/README.md000066400000000000000000000012051476025525100323360ustar00rootroot00000000000000# lws minimal http server form POST lwsac Shows how to parse the form using an lwsac to hold the form data ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server-form-post-lwsac [2018/03/29 08:29:41:7044] USER: LWS minimal http server form POST | visit http://localhost:7681 [2018/03/29 08:29:41:7044] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off [2018/03/29 08:29:49:8601] USER: text1: (len 4) 'xxxx' [2018/03/29 08:29:49:8601] USER: send: (len 6) 'Submit' ``` Visit http://localhost:7681, submit the form. The form parameters are dumped to the log and you are redirected to a different page. localhost-100y.cert000066400000000000000000000040721476025525100343430ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-post-lwsac-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- localhost-100y.key000066400000000000000000000063101476025525100341730ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-post-lwsac-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- minimal-http-server-form-post.c000066400000000000000000000127331476025525100370070ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-post-lwsac/* * lws-minimal-http-server-form-post-lwsac * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal http server that performs POST with a couple * of parameters. It dumps the parameters to the console log and redirects * to another page. */ #include #include #include /* * Unlike ws, http is a stateless protocol. This pss only exists for the * duration of a single http transaction. With http/1.1 keep-alive and http/2, * that is unrelated to (shorter than) the lifetime of the network connection. */ struct pss { struct lws_spa *spa; struct lwsac *ac; }; static int interrupted; static const char * const param_names[] = { "text1", "send", }; enum enum_param_names { EPN_TEXT1, EPN_SEND, }; static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct pss *pss = (struct pss *)user; uint8_t buf[LWS_PRE + LWS_RECOMMENDED_MIN_HEADER_SPACE], *start = &buf[LWS_PRE], *p = start, *end = &buf[sizeof(buf) - 1]; int n; switch (reason) { case LWS_CALLBACK_HTTP: /* * Manually report that our form target URL exists * * you can also do this by adding a mount for the form URL * to the protocol with type LWSMPRO_CALLBACK, then no need * to trap LWS_CALLBACK_HTTP. */ if (!strcmp((const char *)in, "/form1")) /* assertively allow it to exist in the URL space */ return 0; /* default to 404-ing the URL if not mounted */ break; case LWS_CALLBACK_HTTP_BODY: /* create the POST argument parser if not already existing */ if (!pss->spa) { lws_spa_create_info_t i; memset(&i, 0, sizeof(i)); i.param_names = param_names; i.count_params = LWS_ARRAY_SIZE(param_names); i.ac = &pss->ac; i.ac_chunk_size = 512; pss->spa = lws_spa_create_via_info(wsi, &i); /* no file upload */ if (!pss->spa) return -1; } /* let it parse the POST data */ if (lws_spa_process(pss->spa, in, (int)len)) return -1; break; case LWS_CALLBACK_HTTP_BODY_COMPLETION: /* inform the spa no more payload data coming */ lwsl_user("LWS_CALLBACK_HTTP_BODY_COMPLETION\n"); lws_spa_finalize(pss->spa); /* we just dump the decoded things to the log */ for (n = 0; n < (int)LWS_ARRAY_SIZE(param_names); n++) { if (!lws_spa_get_string(pss->spa, n)) lwsl_user("%s: undefined\n", param_names[n]); else lwsl_user("%s: (len %d) '%s'\n", param_names[n], lws_spa_get_length(pss->spa, n), lws_spa_get_string(pss->spa, n)); } lwsac_free(&pss->ac); /* * Our response is to redirect to a static page. We could * have generated a dynamic html page here instead. */ if (lws_http_redirect(wsi, HTTP_STATUS_MOVED_PERMANENTLY, (unsigned char *)"after-form1.html", 16, &p, end) < 0) return -1; break; case LWS_CALLBACK_HTTP_DROP_PROTOCOL: /* called when our wsi user_space is going to be destroyed */ if (pss->spa) { lws_spa_destroy(pss->spa); pss->spa = NULL; } lwsac_free(&pss->ac); break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static struct lws_protocols protocols[] = { { "http", callback_http, sizeof(struct pss), 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; /* default mount serves the URL space from ./mount-origin */ static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server POST | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.protocols = protocols; info.mounts = &mount; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; if (lws_cmdline_option(argc, argv, "-s")) { info.options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; #if defined(LWS_WITH_TLS) info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; #endif } context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-post/000077500000000000000000000000001476025525100277525ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-post/CMakeLists.txt000066400000000000000000000013411476025525100325110ustar00rootroot00000000000000project(lws-minimal-http-server-form-post C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-server-form-post) set(SRCS minimal-http-server-form-post.c) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-post/README.md000066400000000000000000000010671476025525100312350ustar00rootroot00000000000000# lws minimal http server form POST ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server-form-post [2018/03/29 08:29:41:7044] USER: LWS minimal http server form POST | visit http://localhost:7681 [2018/03/29 08:29:41:7044] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off [2018/03/29 08:29:49:8601] USER: text1: (len 4) 'xxxx' [2018/03/29 08:29:49:8601] USER: send: (len 6) 'Submit' ``` Visit http://localhost:7681, submit the form. The form parameters are dumped to the log and you are redirected to a different page. libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-post/localhost-100y.cert000066400000000000000000000040721476025525100333130ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-post/localhost-100y.key000066400000000000000000000063101476025525100331430ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- minimal-http-server-form-post.c000066400000000000000000000132071476025525100356750ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-post/* * lws-minimal-http-server-form-post * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal http server that performs POST with a couple * of parameters. It dumps the parameters to the console log and redirects * to another page. */ #include #include #include /* * Unlike ws, http is a stateless protocol. This pss only exists for the * duration of a single http transaction. With http/1.1 keep-alive and http/2, * that is unrelated to (shorter than) the lifetime of the network connection. */ struct pss { struct lws_spa *spa; }; static int interrupted, use303; static const char * const param_names[] = { "text1", "send", }; enum enum_param_names { EPN_TEXT1, EPN_SEND, }; static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct pss *pss = (struct pss *)user; uint8_t buf[LWS_PRE + LWS_RECOMMENDED_MIN_HEADER_SPACE], *start = &buf[LWS_PRE], *p = start, *end = &buf[sizeof(buf) - 1]; int n; switch (reason) { case LWS_CALLBACK_HTTP: /* * Manually report that our form target URL exists * * you can also do this by adding a mount for the form URL * to the protocol with type LWSMPRO_CALLBACK, then no need * to trap LWS_CALLBACK_HTTP. */ if (!strcmp((const char *)in, "/form1")) /* assertively allow it to exist in the URL space */ return 0; /* default to 404-ing the URL if not mounted */ break; case LWS_CALLBACK_HTTP_BODY: /* create the POST argument parser if not already existing */ if (!pss->spa) { pss->spa = lws_spa_create(wsi, param_names, LWS_ARRAY_SIZE(param_names), 1024, NULL, NULL); /* no file upload */ if (!pss->spa) return -1; } /* let it parse the POST data */ if (lws_spa_process(pss->spa, in, (int)len)) return -1; break; case LWS_CALLBACK_CLOSED_CLIENT_HTTP: if (pss->spa && lws_spa_destroy(pss->spa)) return -1; break; case LWS_CALLBACK_HTTP_BODY_COMPLETION: /* inform the spa no more payload data coming */ lwsl_user("LWS_CALLBACK_HTTP_BODY_COMPLETION\n"); lws_spa_finalize(pss->spa); /* we just dump the decoded things to the log */ if (pss->spa) for (n = 0; n < (int)LWS_ARRAY_SIZE(param_names); n++) { if (!lws_spa_get_string(pss->spa, n)) lwsl_user("%s: undefined\n", param_names[n]); else lwsl_user("%s: (len %d) '%s'\n", param_names[n], lws_spa_get_length(pss->spa, n), lws_spa_get_string(pss->spa, n)); } /* * Our response is to redirect to a static page. We could * have generated a dynamic html page here instead. */ if (lws_http_redirect(wsi, use303 ? HTTP_STATUS_SEE_OTHER : HTTP_STATUS_MOVED_PERMANENTLY, (unsigned char *)"after-form1.html", 16, &p, end) < 0) return -1; break; case LWS_CALLBACK_HTTP_DROP_PROTOCOL: /* called when our wsi user_space is going to be destroyed */ if (pss->spa) { lws_spa_destroy(pss->spa); pss->spa = NULL; } break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static struct lws_protocols protocols[] = { { "http", callback_http, sizeof(struct pss), 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; /* default mount serves the URL space from ./mount-origin */ static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server POST | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.protocols = protocols; info.mounts = &mount; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; #if defined(LWS_WITH_TLS) if (lws_cmdline_option(argc, argv, "-s")) { info.options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; } #endif if ((p = lws_cmdline_option(argc, argv, "--port"))) info.port = atoi(p); if (lws_cmdline_option(argc, argv, "--303")) { lwsl_user("%s: using 303 redirect\n", __func__); use303 = 1; } context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-post/mount-origin/000077500000000000000000000000001476025525100324015ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-post/mount-origin/404.html000066400000000000000000000002261476025525100335760ustar00rootroot00000000000000

    404

    Sorry, that file doesn't exist. after-form1.html000066400000000000000000000003371476025525100353360ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-post/mount-origin
    Thanks for posting the form. favicon.ico000066400000000000000000000025761476025525100344550ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-post/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’index.html000066400000000000000000000011341476025525100343160ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-post/mount-origin
    Hello from the minimal http POST example.

    This is a static page served from ./mount-origin/index.html.

    When you POST the form below, you will see the values of the
    form parameters reported on the console log.

    Type some text:

    libwebsockets.org-logo.svg000066400000000000000000000226061476025525100374350ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-post/mount-origin image/svg+xml strict-csp.svg000066400000000000000000000302361476025525100351420ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-form-post/mount-origin libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-fulltext-search/000077500000000000000000000000001476025525100311365ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-fulltext-search/CMakeLists.txt000066400000000000000000000014721476025525100337020ustar00rootroot00000000000000project(lws-minimal-http-server-fulltext-search C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-server-fulltext-search) set(SRCS minimal-http-server.c) include_directories(../../../plugins) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_FTS 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-fulltext-search/README.md000066400000000000000000000005011476025525100324110ustar00rootroot00000000000000# lws minimal http server ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server [2018/03/04 09:30:02:7986] USER: LWS minimal http server | visit http://localhost:7681 [2018/03/04 09:30:02:7986] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 on ``` Visit http://localhost:7681 libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-fulltext-search/lws-fts.index000066400000000000000000012115411476025525100335730ustar00rootroot00000000000000Źz_uaāŠČ#±NBFE0#)*+J6  CFC IF#?C$G*IFGGHD=IAIFBDHFDIHG:*) HHB&EGIHFBHHGBH@CG/CGGDFAFFFFHEGHHIID*IGFFFGIID7H.<>EHBHHFIHIHIGFEFIEGI7IGDAIHFHECEIEEH >’Š;IDDEIGEBEIHGIIHFF/FDCCG"HEEFCI@3II@B*HHIIFH4HJICIIFH:BIIEG D:CHGFGFFDIIGIEF> |IHIIDHIFI A FG!G@CEIHEE?FCGG?HH=G/G>?I:(IHGIHIFHŠČ*‹@D-FHICHGE>GHHEAH.HF GEHEFHGIBGHHGACFIHG>HHHIHFIFGIGH+:IIFHFI!>GGIGDDHJAIGHE(HGG>GFFEHGIBIGCAC@CAIIFEGEGII'FH GFDFIIDID;EGHEDHHIAHI*6FHHAFAGG%!"G :HF!GF@FDHCHI/91ę IDG/8GCGI=FHHEC#HFFI8IFI:I HEHCF6DŸ— \FFECB0G II.I@HD2G8HBIG2EBH"CIH2)IIHCBJAGE G9HIEFHHFEHIHGGFICFEHFGGBHDEHI?IHGAIFHGFD?EI>IDEGFIEFCAFIEF.GFD E>HIHHFHI9G;GFEFš’ØHFH7IHC,GFIF3EEHDIGCIFECHE?IFDEEHHEFDECIGGBF$1I"FEIDFDHAFDIAHBFDGFIHFHGGBHIGGGFEHGGHIHEHGHHHIDFIFFGEIEGIF BD F!IH$G9IG>6 īBIHECIHGBH;HFGE?D:HC 2HC'DFEHEIGEAHIAIGGAŠČ!ÄGFE!EDH3D1GH+!.FIIFIHG DA8EI4IIGFFEIFIFI0IFCFGICF9G ,<8GEI7EIFGGE7HFFFG I HIDDIFGIIHGHGE DFB1EDFGG3GIG@I*H2EE0BFGBF2G6H* E(HIHAG=vnRE()I*"GCI$GGC>E. EGHHEFIDDIEAEGFGDHDFIGHFCF6IJCFDFFHIIIAF6HIGHHJEFFEDIbZ+F@GECIFGIEHGGEFIIH1FIEIIIEFIEI)CGHIFHHEE6GG#$3=G GII%@A GF7DGHF."HŠČ) FFEH?!AF;FAGBDIFIGEFFHHIEHHGGFGDIGHHEAHCHGAGECHH@IGHCHFE@IHIIBGIDIGCICEGGGIFIIDCHIIHFD.BB GA<F6HDIBHGG CABCC0H@I ,BIFJE9GEC=F7HG%A9FICEIIFGF6BGFCFFH!F0DD,$×IBIIFD 'DG3HEE(;II FI $E1¬¤ĻGGIABIEEIHCGIIIHDIEHBFHI1GEEIGFDHFI0GIGI5<HIHFDGDE1JGIFGCDG0EI6ECH&DFIIG HH?IHIGEIEEGHIDFFFCH HH(GGCFFH@</DIEC?³«! HIAGFIIHFI@HIHHDIH>HHGDIBICBFH=EI $"H4EH=0C /AH@FIGGEIADIJDFBH&2&EDGGGIIIIEHIDFIEHHGB@DHGHBIIEIGEFIF*A$GHDGEFEGEIIGE=I/DEG$%‡GIIFHHHFI@HFGBBHGCIIIDEIHEHŠČ%mGGHIIDIFGGFHCEGEHIFGFG21<I-3G&IG8EGF)G!FDDIB2FIFGE@@GECBFD HGDHHCEFGCII*EDGI&HEHIHBCHFGBGF@CF HIIGI EG GE$HIH5A& EFFIEIHGD HGHH(;F@GGGHI*FG7!CC\TID GIIECIHFI I?HDGEGFHH??ECEEEEEGDFI@@DIEDIHGHHGHHIHCG9HEGHEDCIGBGI0HED|t?FIGF&DFFGGCIHGHIFIEII@HGG$IHEHDGICBIIHFADDGDEIG'IEF GGIHBHD9H*FIEEADGFGHDHIIEH!@IFIHC$IAGIÉĮ'¢GHIGIGEGFEGEIIHCI)B!FHFIFCHC?IAECHGGG25>CEGFAI#HHGEEHFEIIIIICIDDHB) IEGAIE.CHIHC ‡ĶGE&IGIEI.BGCGDGHCGFBFHEE& BI'IDGFGH $4H CHIIIF/HI&F? GEG@HEE8FH DGF@IIHEIDFHEGHFDA?GB9IDDHHIHGFGG@IIAÜICIIG@GHDHK*EIIFIIGGEGGFI@@BFIIIDDFIIIHIIGDC@/D*CG;IEEŠČ(l,DG:HF-IG:DHG IHDIGEIHGHIH"GH6GIDI-;EI9HAC?EIGFEE6HBG+D GHCIGEHDIHI"/0I'GHB%BEGIAHGE(GGIIFH@HHIIFEHCEEEBHD IGHHGDHGCHFHGIFBC<DBEIGIIFGAIGHFGFFAGEIFEHIE1)ŃGHDIDGFDIGHIIGH;E940:2CII;GEFHHGF§Ÿ ļFI308GG=!.04926GHDGGBHFA?CB,A-HDB GGFHHE?@IGCEFIHI;F3HH>GIF GGFG GBFIHHI!'EHDF%EBHEIHHIDIDFFHGHHIDFGEIHFGEF5HHICEGHHHDGGIFGICކ&FIFE+A GGIFFFIFIEGHHIEGBBIDGH!GFFFGICGEC=IFEHEHCHGGGGDFHIGH:EDIGGJEDHHICHIHGHHCGG?D;EIIGFG6GEIDCGBCIFGFGCGCGF IHFICJBFEEDCGFGIG0FBID@GIGGFGHHIHIC@FHHDGHHHHGE?A IEFHAH;;%ŠČ(AFHGGHDFFAFEIF$ABCFI<GHI?G HF7DGIIHIIDHEHHHIIEAGGHCHHIHFGE HHFCFII@F+HIEIFIGDHHCFGDHIGGHGI,DF2EHIDHD-0HDF 8IEDG BEEGA I*I2DGG/I1HF)EEH EF?FHIDIHHF2EBG7H/' ØBIGGEFH?0IKIF@DIEIIHAFEEDGHEFEHGHHH©”$¢FFCIFHFCGGCGHIBFGEIIEHFGGFE'HHHEHHGH$@EGGGGGACFGEHFGHECIIHEGA3DGHIAFDGEHGGIIGFIIEIFGEGEBFCEFIFH1HIFFFF&2EEAHIIHHHH5HGHHHCHIDHAIGGB&CE‡GHFG1FEG>H*+EGAH7HFC:IFIGH@ŃEFDHIHJGHGFIFFDGHHGIJC'FIDGBDIFG7CHDIFHIDIFFHBG;EAECFGHIHDEEHFEEFDDIIAFEBEEAGGIIGIHDGIGEFHICHGBH8IGF@0ADA9EIEGIIGAIHFIIEGICHIEIFIEHHHHHIFHDFIGDIIHGGI>FGHFCGHIFHEI—$2IDEEHFF@CEFGFHEFE?FHA?EFKGDEDGCIHEFGHHGGB:GCFGIHGA?HHHGC7FIHFEFHBIFGE@DIGIAHGF.IBGHGFGGD)EIIB?IIDHKHGDHIID=IDEDBGIGCGDFIEGHGIDHEDIGIDyqĶFHEF@GFIFBIFEGHIGFDDCGDDCEFFFHGECIEIF?BFHFFHKFDGEGF<IBFEBHFBHFEEIGFGEGIGIGDFIIGFIIDDDICG0FHCIIG0 C.FGHH_Wé?G@DDG IEGFGEEGH;ICIHHB IEHEII IFF<FBCIBIHCEBHHHBGDGHEFEDH9I=BHFAIIŠČ,ˆHHHHGHHCAFFFIIDEFGGGIIII?GHCGIIHFIIFDDAIHGFIFIDCHDHGFIGHFFIFIIFHI-&FIEGFGHDGHDFIHIFFBGFHIIGFIGEG!E7IEFEHG@FFDIFD%HE#FH $E=1HFEGII!BFEHIGGIG&IHGG @IG.DG+BDEEHI0HHBHEFD ¤<H'D/H6Ž'GIFHE@HH?IAEHH-FHFEII6FEIFIJH!IEBHGG@FIEG%&%9GFE EIIGHGAIDFGH#HHHEFFH7E.HI6'F9DFFBIGEFIGIHGBFFDFI0IHHGGHHIDHIDHIHIGHEHIIGHIIFFHCGH7FCF!EFBI>GCHII‹ƒÆEHHG&GFCEFGF I6I F%"H@GF 4GDHI> DICJGGIEI?HC@FIEGEF=HHFHEIHHGHHGFFHDEFGGH#HEFIII6H?GHECHIC>!&/MEē&*('$%%GIHGHIHH''GHIDGH/HJFEEFHHFDJJHBDD=FI=DHEIIFFDIEE?GŠČ'ūFFFGGHFEHDCCHEHIGECFG IGIIIEHGDBIGF I $HE0HI$8IDDGG)EEH,EGHIHF2HBE.HHHEFFGBIHI!1IGEF F*HHFIIIHEGGFIHGF ICFACGGCIFIBGIC!?AHGDGFI8HDIE H:HECBEEEHI@BFHEHH=5 EFJFH1CFIIGI.(F 0A+DCFHIE4FIHEGIG75›“ÕEEIGDFCII:EGAFGI33II4H DEH 3IGHGEGDDI@FBFICEH=CGIC DDDHB0F@GGHFI GH HAAEGIHGCHGDHFEDIEI,IHFGEIB>DDCEHFHIIHDGŠČ#EDIHHDI?FHEAHF=HFG>IF#GB-GFIHGGJD CHGII"FICIGBHIF%EJ!@BHG8-IH$E?GD B?HGFCH$EIIA2GIGIFEGI5))GEG@GE$GCC3IG-CIHCFH<H9II E)EG HI)EBGFII<@GIŠČ'¤I!E H6H1.!GECEFH0IF,F8HICHGFB.GGFHGCF:EFFEIHHDHHGG3FCEIIEI,EFFFIFFIDEDIHGGI IGBH'HFIE?IIG HIEC!IIHIBICHHCIHI(FGFIHICIA(GEGGE,IDHBII2@GDIDHD0FFIFGHDGIކ6DFDHF5GFHEDCIEFIIIIFGECDHFIFGBHBFGEBGFH!CFAEF;&H#GFI'IFIDIHGEF?<GCF D 2EGGEEI8GGFGED/F G(HGJB GG 1C*FIEHFHIDGHH>HIIDGFGED9GIGFHC DIH: :*GGEIIE!I$GGŠČRIE?IIGE GGF>IIHHIG)IAHC E=GF IGHEG GHGIHHHF I GIH1IE HF CIIGGHF>GHGHH*FHJEHDIGCFDJCGEI33,6H3C*#2I-BJFIIF1GG-1'D=(JI;%0!&:.“¬–  *1<3F 3AEF GI:HI:HHH%FIGIGCHFGHGHD H DHBA1"+EF6G)C?->6!'* &2/IFI7,ID8((+:IH$IHGDHEDGG&D*DGEH" ŠČ(°IAICIICHIHAGIGEHAACIGH(IBGIGHGFFFIEEFFGCGEEHEHDD1GFEE@FFD 0EE FDHIEGICFG>IGFIH7;GFF HIEHHHDDEII7G5#EFDEFGFHIFGADGKIGIEC?I.EIHHG>GIFH9IID9CHEGJFFFC HCB„|±HDHFHBE*FHGGI IIEIB?DG#F7DIFE@>BI8F$G33*$)!GC(/DIDFFH5IIEHHIFGIFC&A/&ETL LIHDF>FH F%EGIG FGGG HCGIIIG1HGGFEGICH HFGFD G=ŠČ*d HE@HEDFCGHHIHFCHFD?FICGED&CAFGIGFDHCIHHD(@HCEGG<G6BIIGEIIEGFC9HEHGGHHGDGBHF1IEHGIGHFGEBEFEADFGEGIH+IHAE(GFDF GDGGEHIFIHHGFFFF-EF: HIGCIGGFGBIEG&IDIIEHHFIFCHBHFEG'GG„|dDACIGBIEDFFIFH*HEIHEHHFHHFIHDECIFIGF/IFGGCIBGICIIDHIHDEGDIDFHIDAGIEIHEBGEF8GEFHEEGFCHHFGFEG?EGIFGIII3F$EG8FDTL ūGD=IEDGG"GH:D+6BDFDDFCBAHEDAHD9$9CFCI= JAHDGIIBFEŠČ,šBFHDHDIII"KFHBJKFHDFKJFEDIJJEFCHD DJJIGFBFE0JIIHFIHDDIHIICIIF>H?GCDJJIDKHHEH*AD2DJEHFFAGCEFGF:FHC:EC"IFG>2JCEDE-HH:E@CGGDIEADACCB?GHG DHEGIHIHDJG#IHJ;AHJGGFFIBIIFHJIF:( @DBIDEAFBHGGGC6F CCDF:GC7PH CGCFAD%#BCAGFHECCAGDD>)GGH$EDDCEB>GIFEEDCE>J@CD=ÅHÅHÅGÅEÅAÅ8Å6Å5Å.Å.Å-Å*Å*Å)Å)Å(Å-Å(Å(Å&Å%Å%Å$Å$Å#ÅÅÅÅÅÅÅÅAÅÅÅÅÅÅÅ Å Å Å ÅÅÅHÅÅÅÅÅÅÅÅÅÅÅÅÅÅÄÅ*Å<Ä~Ä}Å#Ä}Ä|Ä|Ä{Ä{ÄÄ{Ä{ÄzÄzÅÄzÄ{Ä~ÅÅ)ÄzÄzÄyÄyÄyÄ|ÅÄxÄqÄmÄmÄoÄlÄlÄkÄjÄhÄfÄfÄeÄfÄeÄeÅÄeÅÄdÄ^Ä^Ä^Ä^Ä\Ä\Ä[Ä[ÄZÄYÄWÄVÄVÄTÄSÄSÄRÄÄRÄRÄPÄOÄOÄPÄRÄOÄNÄLÄLÄKÄNÄKÄLÄOÄGÄGÄCÄEÄBÄEÄ>Ä=Ä:Ä9Ä9Ä8Ä8Ä8Ä8Ä7Ä6Ä5Ä5Ä4Ä4Ä4Ä3Ä[Ä3Ä5Ä[Ä.Ä3Ä9ÄOÄ.Ä2ÄPÄRÄ.Ä5Ä,ÅÅÄ+Ä+Ä+Ä+Ä*Ä+Ä*ÄBÄFÄ*Ä)Ä)Ä(Ä&ÄgÄqÄ&Ä$Ä$Ä$Ä#ÄWÅÄ#ÄYÄgÄjÄjÅÅ8ÄÅ5ÄÅ5ÄÄ=ÄÄ=Ä_ÄÄ/Ä<ÄBÄI ÄÄ!Ä#Ä.Ä/Ä<ÄIÄJÄNÄVÄÄ ÄÄ Ä ÄÄgÄqÅÅÅÅÅÅ Å%Å(Å)Å,Å-Å/ÅFÄÄÄÄÄ3ÄÄÄÅ.ÄÅ&Å/Å/ÄÄÄÄ0Ä7ÄWÄĆÄĆÄQÄSĆ~ĆĆ}Ć}ÄÄĆuĆsÄĆqĆpĆoÄ ÄÄBÄjÄnĆoÄ Ä ĆnÅÅAÅEĆnÄrÅÅ,ÅAÅEĆmĆnÅĆmĆqĆmĆqĆkĆkĆjĆjĆjĆiĆiĆfĆcĆcĆ`Ć_Ć_Ć[Ć[ĆZĆ[ĆoÅ ĆSĆUĆZĆSÅÅÅ$ĆRĆQĆyÄDÄXĆPÄ4Ä[ÅĆOĆYĆ[Ć]ĆOĆXĆ\ĆnÄ|ĆNĆJĆFĆPÅÅ7ĆEĆEĆDĆBĆeĆAĆfÅĆ<ÄzÅÅ Ć;Å)Ć9Ć8Ć7Å,Ć7Ć6Ć3Ć2Ć2ĆlĆmĆrĆ1ĆSĆZĆwÄĆ/ÅÅÅ Å>Ć-ÄjÅÅ8Ć-Ć?Ć_Ć,Ć?Ć,Ć:Ć+Ć9ĆeĆuĆ+Ć9ĆvĆ*Ć*Ć5ÅÅĆ& Ć&ÄrÄ}ÅÅÅ Å!Å/ÅA Ć%ÄÄÄÄÄ0ÄnÄpÄuÄxÄ~ÅÅGĆ"Ć Ć%Ä_ÄyÄ|ĆÄ^Å ĆĆ#Ć?ĆAĆMĆSĆTĆUĆVĆXĆZĆZĆ_ĆcĆeĆiĆsĆuĆwĆwĆyÄ ÄĆÄAÄC ĆÄ ÄÄ/Ä<Ä>ÄCÄEÄFÄIĆĆTÄĆĆpĆĆĆoĆuĆyĆ}ĆÄĆĆĆĆĆĆĆ!Ć0Ć1Ć8ÄÄÄ2Ä7ÄPÄQÄQÄTÄYĆĆ ĆQĆ ÄÄÄbÄuÅÅ2Ć ÄmĆĆYÄÄZÄ]ÄdĆĆ.ĆĆ.ÄbÅĀ{ĀzĀ|ĀzĀyÅ;ĀyĀyÄ$ĀxĀxĀxĆ+Ć:ĀvĆĆÅĀuĀuĀzÅ8Å;Å>ÅGÅHĀuĀvĆ3ĆuĆyÄĀtĆ ĀsĀtĀ{ĆĆĆUÄÄÄ1Ä7ÄWĀsĆĀrĆĆĆĆĆĆĆĆ!Ć"Ć'Ć.ĆMĆXĆdĆdĆzÄÄÄ&Ä2Ä=ÄXÄZÄeÅ2Å69ĀrĀsĆĆ Ć ĆĆĆĆĆ!Ć"Ć'Ć.Ć/Ć0Ć3Ć;ĆBĆCĆMĆUĆXĆ\Ć_ĆaĆgĆlĆnĆrĆvĆzĆ~ÄÄ ÄÄÄÄÄ%Ä&Ä1Ä2ÄXÄZÄ]Ä_ÄbÄdÄkÄlÄoÅÅ2Å5Å8Å;ÅEĀrĆĆ+Ć9ĆvĆzÄ1ĀrĆ+Ć9ĆvĀqĀqĆ Å2ĀpĀuĆOĆTĆYĆ]ÄĀoĆĆcĆiĆlÄĀnĆ%Ć%Ć;ÄÄÄÄÄÄ0Ä6ÄVÄWÄnÄpÄrÄvÄxÄ{Ä~ÅÅÅÅÅGĀnĀpĆĆ&Ć5Ć6Ć<ĆOĆYĆ[Ć]Ä$Ä)Å=ĀnĀoĆ(Ć)Ć*Ć7Ć=ĆPÄNÅÅÅ#Å%Å* ĀnĀoĆ(Ć)Ć*Ć7Ć<ĆPÅÅ*ĀnĆ&ĀmĀmĀzĆ(Ć)ĆNÄ%ÅÅ< ĀmĀnĀrĀxĆĆĆĆĆ!Ć#Ć'Ć'Ć,Ć.Ć/Ć:Ć\ĆvĆzĆ~ÄÄÄÄÄ%Ä'ÄXÄZÄeÅÅ3Å6ĀmĆ+Ć:Ä%ĀkĀjĀhĀfÄrÄ}ÅÅÅ Å!Å/ĀfĆ ÄrÄ}ÅÅ!Å/ÅCĀeÄeĀeĆ`ĀeĆĆĆ0ĆEĆRĆaÄYĀdĀdĀUĀOĀNĀMĀLĀKĀIĀHĀGĀGĀ@Ā=Ā7Ā4Ā0ĀĀĀĀĀĀĀ Ā ĀĮ|ĮvĀĮsĮlĮgĮcĮcĮ_Į^ĮYĮWĮWĮUĮPĮLĮKĮIĮGĮ[ĮEĮDĮCĮBĮ7Į)Ć}Į!ĮĮĮĮĮĮĮĮ ĄyĄxĄxĄwĄwĄwĄsĄaĄaĄ_Ą_ĄXĄXĄWĄUĄMĄLĄHĄGĄFĄEĄDĄDĄBĄBĄ?Ą=Ą=ĄAĄ8Ą2ĄrĄ1Ą'Ą"Ą!Ą ĄĄĄĄĄĄĄĄĄÄxĄ Ą Ą Ąæ|æ|æ{æ{ĄWæ{æwæsæmælælælælækækæjæjædæcæaæaæUæWæSæSæSæOæHæ?æ=æ<æ8æ7æ,æ%æ#æææææææææææĮ1æææææ¾}¾|¾x¾v¾v¾u¾q¾p¾j¾fĮ1¾e¾tææĮv¾d¾_¾_¾_¾_¾^¾^¾U¾S¾R¾D¾/¾.¾-¾-¾,¾$¾$¾$¾#¾"¾ ¾¾¾¾¾¾¾¾¾"¾2¾8æ¾¾ ¾½x½t½r½p¾½p½l½j½g½b½]½\½\½[½Z½Y½V½SĀL½O½B½:½4½+½%½$½½ ½ ½½½¼~¼~¼~¼m¼m¼i¼f¼[Å&¼U¼R¼O¼I¼H¼H¼=¼;¼6¼6¼?¼H¼4¾¼.ĆAĆe¼%¼$¼"¼!¼!¼ ¼¼¼¼¼¼¼¼ ¼¼½¼¼¼¼ ¼½[¾9¼¼¼¼ ½¼¼¼¼»~»|¼¼:»|»|¼ ¼;»z»t»r»r»q¾»p»p¼»o»o»lÅ»l»l»k»kĄEÅ»f»f»e»d»b»b»`»`»_»^»XĀH»W»U»S»Q»O»H»G»E»C»B»B»>»=ĮK»5»4»0»)»(»%»"»»»»»»»»»» » »»ŗxŗzŗwŗwŗtŗpŗjŗjŗhŗbŗbŗ^ŗZŗVŗTŗSŗSŗFŗGŗ1ŗ0ŗ.ŗ.ŗ.ŗ+æDŗ æ<ŗ ŗŗŗŗĮ7ŗŗŗŗŗŗ ŗ ŗ ŗŗæ¹|¹|¹xĄ/¹x¹v¹t¹p»LĄ.¹d¹`¹XĀĀ!¹X¹W¹S¹K¹K¹>¹>¹;¹;¹.¹.¹*¹&¹$¹"¹¹¹¹¹»F¹¹:¹=¹>¹¹ ¹ ¹¹.¹=¹\ŗŗ-»½0Į¹ ¹ ¹¹¹¹¹ø}ø}ø|øzøxŗQ»»+½$øqømøløføfĄ'øRøRøPøEøCø?»<ø>ø>ø:ø6ø5Į?ø2ø0ø%ø#ø#ø"øøĀø¹~øø ¼Vø ø ø ø øøøø¼{··}·}·|·~·z·y»~·y·w·t¼H·t·qÄ)·n·k·i·dŗ·`·Z·N·M·M·M·K·G·EøZĀD·D·D·A·@·?·.·*·"·!· ······2··¼\··· ···¼·Ā ··½U····D·¶¶¶~¶}¶}¶|¶{¶{¶y¶w¶w¶v¶u¶r¶r¶p· ·k¾%¶nĄ¶m¶m¶m¶m¶l¶k¶j·k¶i¶i¶f¶e¶b¶b¶b¶a¶`¶]¶\¶[¶[¶[¶ZøC¶Z¶Wŗ.¶T¶S¶Q¶Q¶Q¶N¶c¼¼5¾"¶L·e¶J¶I¶I¶H¶Eŗ`¶E¾¶E¶D¶C¶C¶B¶A¶A¶?¶>¶>¶:¶N¶:¶N¶i¶7¶6¶6¶4¶/¶)¶)¶(¶(¶l¶(¶'¶&¶%¶ ¶ æy¶¶¶¶ ¶¶µyµyµyµyĀGµwµwµwµt½mµtµqµoµmµmµlµrµµj¶8µhµgµgµgµgµeµeµdµdµdµ]µ\µSµOµLµ:µ:µ6µ3µ3»o µ2»n»t¼¼¼ ¼¼¼;¼<½ ½µ2µ2µ.µ*µ)µ(µ'µ(¶Gµ'µ&µ%µ%ætµ!µ/øyŗ ½Dµµµµµµµµµµµµ µ µ µ¾b“~“}“v“t“p“p“o“m“f“f“e“a“`“`“_“P“R“P“R“N“J“L“L“C“IæJÄ(“C“>“>¾“<“=“#“ ““““““““““““ “““““““³~“»³}³|³w“ “ “8³w“8³pµ³n³n³l³l³l³l³k³i³i³h³h³e³d³a³a³^·³^³Z³Z¶.³Z³Vµ µ µO³V³U³U“m¹d³U³S¶s³S³R³Q“n“w“}µ³Q³Pŗ$³O³O³O¹³K³H³F³C³;³9»M³6³8æ³5¶:ø ¾³0³/³@³.³-³'³%¾³ ¾RĀw³ ³V“ “7“Pµ2³ ³³³*³:³]³h³r³v³}“““&“;“@“E“U“\“c“zµµU¹ŗt³³³æ0³³Ä³³²z²v¹½c¾-²s²r³ ²r¶nĄ²g³ ²c²b¶ ¼a²O²M²N²I²K²K²F²F²K²N²F²A²A²@²@²;²7²4²-²,²+²*µ}²$½g²$²$²!² ²²Įh²²¾u²²Ą²²A² ² ² »²²±|±u±t¶»T±p±p²%“`±p±d±c±`±_Äk±V±W±T»!±N¼FĀuĆ?ĆwÅ=±HűH±G±D±D±D±C±C±A±@Ćc±;±:±6±0±-±,±,±,±+±±±±±±±±Kµ*Ā'Ā-Ćı°w°v°u°t°m°a·L°_°]°]°[°Z·?°Y¶|°X°X°W»V°W°V°T°T¾°T°S°R°R°O°OøL°N°J±°I°H°G°C³*³N“t¹ŗ»jÄ1°A°;°:°8µ&°6°5°4°1°4±°0°/°1±C²Įd°.°-°'°=°#±(±*±c±f±¹"°"°°°°°°°°Ąg°»A°¶°¶'°°°°°°°»°°°°°°°°°°°°°°°°°°°°°°°°°ÆæædÆ|° Æ|° Æ{° Æ{° Æ{° ÆzÆzÆzÆyÆyÆyÆwÆwÆwÆ|° ÆwÆwÆvÆvÆvÆvÆuÆuÆuÆzÆuÆtÆtÆtÆtÆrÆrÆqÆqÆrÆtÆyÆqÆpÆpÆpÆpÆ|° ÆoÆoÆoÆtÆ|° Æm° °ÆmÆkÆkÆkÆkÆjÆjÆjÆjÆjÆjÆiĄ]ÆgÆgæ,ÆgÆgÆfÆfÆfÆeÆeÆeÆrÆyÆeÆ`Æ]Æ\ÆW³n¼]ÆUÆUÆNÆMÆLÆKÆKĮ,ÆEÆCÆAÆ8Æ7Æ3Æ2Æ1Æ/½,Æ/Æ(Æ(Æ'Æ'Æ2Æ$Æ ÆYÆÆY³ÆÆY°!°)°=°B°d°l°|±s²² ²$²)²/²=²C²S²W²c²j³³ ³ ³æĮcĮm!ư!°(°l°p°y±± ±±±±$±4±@±S±Y±^±_±`±j±{²²² ²4²;²S²a²h³æĮcĮmÆÆÆ®·g®}»|®z®t®t®s®qÆN³»D¾2Ā8ĀG®i®g®hµb®b®b®\®Z®Z®Zµl®Z®Y®P² ®O®O·L®N®K®K®J®Jør®I»C®H®H®H®M®yĀ:ĀB®Gæj®A®@®@°T¶a®?®>®;Ā®:®9·»b®9·o®7®7®3®2Ā/Ā5®2®1®1±^®0®.®,®,®&²@²a³¼1®&»{®#»4® ®²møh®®®ĮS®®ĮL®® ® Ą0®· ®®®®®·#®®®ø­|­z°w¼A­w±!·_øf­e­g®uµ^¶!ø8»dĀ­_­_­V­U®-­P¹­I­I­I°U­H­HĮ­H°f·[­E»l­C­C­C­C°Z­A±­?®¾.­>­9­6·­4­+­L³<Į­)­^­)­^­(­(­(­&·¼s­%ĆNÄ'­­ ­ŗd­®a±¶¶v¬¬{¬{¬z¬y¼0ĆQ¬t¬s¬s¬r¬q¬n®y¹¬j¬c¬_Ąt¬\Ā%¬T¬T¬P ¬O­­­­ ®Y¶s·ø-ø{Į|¬O¬D¬B¬B¬@¬7¬6¬6¬5¬5¬0¶ ¶ ¬/¬/¬/¬Ā¬¬¬¬¬¬<“¬¬¬¬¬8¬¬9¬¬¬¬¬¬¬Æh·%·>·B·P·l¬¬ĀE¬±$æĮn¬«|«|«{«z«x«{«wĀ9Ā@«v¬ ¬=°r«r«qÆ.«i«f¬Ą_«c«_¾n«H«I«H«I«H·@«F«C«B«B«>«=¼ «=ĆjÄ3ÄKÄ[ÄfÅÅ.Å.ÅF«:«9·@«9«H«9«8«7µc«2«-«-²«*¾,«)«2®F¶A«'®|ƵK¾&«­>¹¹S«®w«Å«³*¼«« « «.«2«L®fµc« «2·?æ««««¶ ««+®pƵ>Ą|ĮĮĮ#«««Æ2æ«æ«Ŗ{Ą'Į ĮŖ{°ŖzŖz³?“&ŖzŖzŖy­?ŖyŖyŖyŖuŖuŖtŖs¬A»3ŖsŖrŖrŖrŖqŖqŖqŖoŖoŖnŖmŖmŖlŖkŖkŖkÆwÆ|° “Ć5ŖkŖjŖjŗ ŖiŖiŖiŖhŖhŖh¼Y½fŖhŖhŖhŖgŖfŖfŖfŖeŖeŖe»FÄŖeŖcŖcŖbŖbŖbŖaŖaŖ`Ŗ`Ŗ`Ŗ`¬Ŗ_æŖ_Ŗ_Ŗ_Ŗ^Ŗ^Ŗ^Ŗ^Ŗ]Ŗ]Ŗ\Ŗ\Ŗ[Ŗ[ŖZŖZŖYŖYŖXŖWŖWŖ^ŖWŖUŖrŖUŖUŖTŖSŖSŖRŖOŖNŖNŖMŖMŖLŖKŖKŖJŖJŖIŖHŖHŖHŖFŖEŖEŖEŖDŖD¾¾ŖDŖDŖCŖCŖCŖBŖBŖBŖAŖAŖ@ÆEĀ*Ŗ?Ŗ7Ŗ6¬¬8Ŗ2Ŗ0Ŗ.Ŗ.¶.·¾]ĀŖ-Ŗ*Ŗ*Ŗ*Ŗ'Ŗ'Ŗ&Ŗ&Ŗ&­C²2²2Ŗ%¬YŖ$Ŗ$Ŗ#Ŗ#Ŗ"Ŗ"Ŗ!Ŗ Ŗ Ŗ ŖŖŖŖŖŖŖŖŖ¾jŖŖ« ŖŖŖŖ¹¾IŖŖŖ%ŖŖŖŖµdŖŖŖŖŖŖŖ ŖŖ³IŖŖŖ ŖÆÆÆY°i²E²N²[ĀIŖŖ ŖŖŖŖŖŖŖ¼ ŖŖŖÄoŖŖ©}©|©{©w©x©v©u©uŖ^©t©pŖy©p­µu©o©n©l«]«^©i©i©h©hŖm®&³·g©g©e©eµ©e©d¬=©b©a©a©a©\©\©[©Z©Z©Y©Y©X­ĄAÅ,©V©S©R©Næw©M©L²p©KĮI©J©J©I½f©I©D©B®©B©;©;©:©:¬BĄE©3ÆD°W©3Æa©0©0»]©-³_¹©,©'©#ŖO©#©#©"©"¼w©!© © © ŖB©©Ć;©©©©®G©©©©µx©©½mÅ©©¶©©©©©©©©»\»n©ŖLÆh©©©"Ŗa®I¾^©©©°-Ä©©©©©"© Ŗr© © © © © ©æi©ĄE©©¬K©©·M©©©©©©#©ŖpÆ.©©"©©"©©©©©©µv©æi©©©©©©¹©ØØØØ~Ø}Ø{Ø{Øz“ØzØzØy©ØyŖØyØxØx¾6ØxØw®[Øw°ØwØvØvØuØuØtØsØrØrØr©©©!ŖØqØqØpØpØoØoØmØmØmØlØlØkØkÄØjØiØiØhØhØhØhØh¶]ØhØx°ØfØfØeØeØeØe© ØeØr©©©©ØeØdØcØcØu©ØcØbŖb“»QØbØbØbĆEØaŖjØ`µnØ`Ø`ŗ`Ø`Ø_ĄHØ_Ø^ŖiØ^Ø]Ø\ŖZØ\ŗZØ[ØZø4ØXØXØUØT¹ØSØS¹GØRÅØRØRĆEØQØNØJØJØIØIÆ1ØHØH¶$ØGØGØL®[ØF»æPØFØFØFØFØDØDØCØCµØBĀjØBØAØAØA»EØ@ØFØHØ@Ø@ØCØ?Ø?Ø?ØJØgŖlØ>ØAØJØ>³(Ø=Ø=Ø<Ø<Ø<ŖmØ<Ø9Ø8Ø7Ø7Ø7Ø6Ø5Į3Ø5Ø4Ø4Ø2ĀdØ1Ø1Ø1Ø1Ø1ØLØ1Ø0Ø0Ø/«}Ø/Ø.Ø.Ø-Ø-Ø,©Ø+Ø+Ø*Ø*Ø)Ø)ØkØ)©2Ø)ØB©Ø)©yØ(°¶æÅØ(Ø%Ø%Ø%Ø$Ø$Ø#Ø#Ø$Ø#Ø"Ø"Ø"ĀØ!Ø!Ø Ø ©[Ø ØØØ®_ØØØØØØØØØØØØØØØ4ØØ3ØØØØØGØØØØØ<ØØØØØØØØØÆqÆu°ØØØØEŖJØØØØØ5ØØ Ø Ø(Ø Ø ĆrØ Ø Ø ­¶BØ Ø Ø,Ø-Ø1Ø Ø Ø Ø Ø Ø «)Ø ØØØØ2Ø9ØHØLØkØs©ØØnøz ØØ7Ø9Ø?ØcØmØnŖY¶MØØ=ØØØØØØ© Ø©UØØØ§§~§z§z§y§y§y§xاx§x§x§wĄM§w§v§v§vاv§v§u§u§u§u¬¶C§t§t§r§r§r§q§q§p§y§p§p§o¶G§o§o§o§n§n§n§m§m§m§m§m·§l»{¼ §l§k§k§k« §k§i§i§h¾R§h§gÄÅÅÅ §g§g§r§gØS§f§e©Z§eØ©'§e§d§d§d§cæ/æ0ĄD§c§c§b§b§b¶1§bØ*§aØØ*§a»l§`°§`§`§iا`°·?§`§_·§_§_§_²-¶N§_§i§^§^§^§]®J§]§]§[©*¶}§[§XĮx§W§W§W§V§V§V§V§V»z§U§U§U­P³§T§S§Rµh§R§RÆ+Ā8§Q©§P§O§M§v§M§M§M§M§L§T§I§H±A±W²S§H§G§E§E§E§D»^§D§CŖ}Ās§C§B¶U¶U·x§BاB§AŖ §A§@§@§?§?§=§<§;“_“f§;¾M§;§:§:§9§7§6«t§5§2ŖC§2§2Ŗ'§1§1©#§1© ©­v§0§0§0§0§0§/§/§.§.§-§,§,§,©®2§,«®y¶møI§+®§+§*§lÆ^±H§(§(§'ŖS® ÆQ§'§'°8§&§&§&§%§&§%©Y¬q§"§!»]§!§§©yæ4§§æ§§§§æ,ŧ§§§§§ § § § Æl§ §§§æT§§ÆÆ³D»Q §§§nĀqĆĆUĆeÄÄÄIÄP§»»6§ĆB¦}¦}¦}¦}¦|¦|¦y¦zØX¦y¦u¦t¦t¦s¦s¦p¦p§:¦n¦n¦l¦j©J¦j¦j¦i»¦i¦i¦i¦hØ_¦h®P¦gĄ<¦e§)¦d½ĀwÄL¦d¦`¦_¦^§g¦\Ć/¦Z¦Y²¦W¦V²L¦V¦U¦T¦TÆJ¦T¦TŖE¦S½f¦S¦S¦R¦R­r¦QØ^¦Q¦L¦K¦Kŗ2¦JĄwĆFĆO¦J¦J§ ¦I¦H¦G¦F¦F¦E“9¦D¦?¦?¦>¦=¦<©z¦;¦W¦9³g³g¾^¦9§§(¦9©¦8¦8¦8¦6«w¦6¦6¦6ĮR¦5¦5¦3¦2¦.¦.¶8¦-¦)¦(¦'¦'ø¦&Ø/· ¦&§M§Uµh»\¦&¦%¦#¦"¦¦ø"ø#¦¦¦¦¦:§§g©ŖNø~¦©>©\¦¦¦¦ Ŗ­:¦Įs¦¦ ¦ ³P¦ ¬·A¦ «e¦Ø@ŖY¦¦„®„„¹h„„}„}„|Ŗ Ä]Ä_„w„w„t©,ÆKĀ(„rĀvĆĆlĆyÄÄÄX„qØ„p„m„[„r«ÆÆÆ&ŗ„Y„W„U§„T§_µg¼!¾D„TŖ'®n·~„T„Tµg„T„Q¦·"¹l„Q¦„O„O„N¶>„N»„NĄ]„M„M„L„K„K„K„I§Q„H„G„G«D³0³0³1“æ„F„F„F„E„E„E„E„C·|„B„B¾ĄT„B„?æz„?§©(„=„u„~„<„7§l„6© „5§fĄb„3„)¦I©C©WĆjÄ„(„'©B³,¶X¶Y¹:¹=„"„"„"ÅÅ „!§)®o±LµLĀ&Ā'„!¦IØ „!°2„ „"„„¹G„„®q°>øy½b„„„„„„¦' „ĆĆ Ć#ĆeĆsĆwÄÄÄ/Ä6ÄJ„©X„„)„„„„ÆZ±}¶Ä„„„„ „ „„„„©¬„Øs„²m„Æl“eæ„„„Æ6„„„„„„ØIÄk¤}ÆV¼`æp¤|®døL¤z¦m¤x¤u¤t«,³JµUĄ|¤r¤mŖ¤j¤bŖ¬n°Y·¤b¤aØ3·¤`¬Ć}¤`¤_Ŗ¤^¦¦©1¤^¤^¤^±v¤\¤]¤X¤WŖ;¤W«z¤V¤U¹0ĮT¤U¤P¤O­:·K¤O§}¤MÄn¤H¤H¦¤G¤F¤F¤EØ(­2¾<æ¤E¤E ¤DØ(Ø4Ø5Ø8ØcØnØvŖ ¤D­#»5¤D­#¤D··?¤D¤s±`²|ĀĀQ¤C¤C¤A«j¤A¦¬Į@¤A©¤A¤@­$¤?¦-¦R¤>¤<ŖlĄX¤<¤3¤3­®8²f¤2ø¤2Ť2¤.¤.¤.¤-¤-¤,­¤)²y¤(­· ¤#¤#Ŗ{¤#§a¤"¤"¤¤¤­¼L ¤¤(¤3­®&±²fµ ¶`¶s¼Ā<¤¤¤¤¤„Xµl¤¤¤¤¤¤³Y¤¤"¤x²%¤«¤«¤¦3¤¤¤¤&¤.¤f¤q¤x¤¹£„Øv«+£~·}£}£}Ä ÄÄF£|£|£u¤O¦J©.£t£r£q£q©h¹E£m£lŖ.æ!£k£i£g©(¶/¶^£f£e²4³»J£e£d£d£c£b¤£]£[¼£ZŖAŖl¬}­q£X®Ær¾£X£W £V£V¤Q¦¬U²7²7¾WĮA£Uµøø2£S£S¦'§n©2£S£R£Q£N£M£M£L£LĮ~£J°p²_µOøW£J£H£F£F£F£G£E£A§Ą\£A¶XĄ£?£?øg£>£:° ¹£6£8£5£<£JĀH£5£/¤¤!¤i£/¤¤¤¤!¤,¤i­>£.¬¼¼½h£,£(£'®:»9£&¬_£$ £ ©>±ĆĆ"Ć.ĆBĆQĆfĆkĆuĆzÄ£Ä3Ä[£££«mĄm£££¦`££ £ ¤I¬®V²o“}ŗw½+ĮR¢¢~¢}¢}¢t¢r¢n®s°r±6¢GÅ¢E¢C¢?¢9¢9¢6»l¢5¢5Ø\Øo©¢4¢4Ä\¢4Å=¢2«“c“e¢-®@¢-° ¢,¬¬Æh··%·>·B·P·l¢,°¢,°¢+Ŗ@½8¢+¹0¢+¢+¢*ØFŖ¢)„5ØT­M°F¢'¢¢¢¾5¢ ¢ ¢¤-©>Æl¢£”xµ ĄA”v”sø=¾(”s”r°”m”m”l§mØØØ<Øp©©"ÆkÆpÆqÆr°³w““““8“N”l”y¢GØ«z”k”k”b° ”a¦:¦~³3ŗ8Ā{”X¶~”W”U”R¢F”A”A”=”7¬HŗP”,ŖlĄ”#”"«z°I”§N°j¶S¹.½]”§ »””¦[” ” ” ” ©” ” ””””ÆtÆv””¦@Æe°””Å<”¼D””ÄQÄS”   „„>©+©<ÆK°/»2»o ~ } |””  { u u s n S T¢h S¾ M M H F E²jÄ  D > <£W±B ;®9ø 0 0 : .¬+ ,£SØ9ŖW³V , ' %„ŖR­øQĆAÄÄ\ " !¤„© !“P“R !„„rÆfÅ>     ¢N¤}»»I¼~½¾=ĄZĮg              Ø Ÿ~Ÿ}Ÿ|Ÿ|Ÿ{ŸyŸx„uŸwŸwŸwŸv» ŸtŸx Ŗ­[®®®ĮMŸsĆŸoĀŸn« ­°2²)ĀŸm²r¶ZĀĀĀUŸmĀOŸk¦¦yØ3ŸjŸi§aŸhŖf¬NĮ]Ÿh¤H©c¬Y¾zŸh¦Ø0©¬8ŸgŸb§*ĮIŸaŸ]Ÿ\Ÿ\ŸZŸV©uŸVŸTŖu·bŸRŸNŸPŸMŸLÆTĄLŸJŸJ¢HŸH yŸH±ÄFŸC«8®O¶¶&Ÿ7Ÿ7Ÿ5Ä|ÅÅ-Ÿ/Ÿ.Ÿ.Ÿ*ŖG·øPŸ¤f·>æ)ŸŸŸŸŖj®mÆEµ\Ÿ½SŸŸŸŸ¶=ŸŸŸŸ¤G©*°¶Aæ1ŸŸæŸŸØ_Ÿ£6£<£C£E£F£P¤N¤}¦«'­®;®SƲf³ µKŸž}ž|ž{ž{§)žzžt¼@¼J½žqžpžk”"”,Øžjžjžg³9žgžežeže m““#ždždžp”©s³cžb³_ž^„{³7æž]ž\ž\žZžWžUžUØpØv«®q³GĄ}Į;žTžTžRžQµ.µ/žQžPŸW¦p§'¼uæ žOžNŸØpžM§Q³žIžLÆEžIžFžEÅžE h k®·x»MžDžCž@¤i¬\ĄSž=ž;ž9ž8ž9¦`§*ž7ž6ž6æ-æPž5ž4¶Zž4”&¶Zž4¼æQž4ž3æ:Ä]ž+ž6±Bž&§XŖc°DĀ+Åž$æž"ž)žžĮžž¦f¬[ž¦Fžž»7žž5”U¦G§Džž©T©hž žbž ž ž ¤&žžž| t”1w %²$t”W¢1³Apo®L mnŖ[®Tø;æ:æ=æEæLĀiŸ@ / :h³½ĄXĮe`¼1_`³_`^]ž¢Bæ]]Vø'¾TøS»NN¬+³Hµ¼o¼p¼ræbLd± KU”"”&„„JæGF EŸ”IŖL®b¼ ¼ ¾8ĀĀ7Ā7A:¼u:„&Ø83¬6»Y.+-(#¢«~¬ ­W¹M¼¹!Ą  ¤5®gµsŸ]ÆI¶i _ m¢¬¬7®°S²³E¦^œ~58Buv„§ ¬A±|¼]¼`ĮUÄ|œ}œ}§,Ø*Øaœ{œ|æSœzŸc œz ' F¦¬¬K­NĄĄ œzœz„ŖrÆdÄrÅœyœyœ~¶/¼Eœyœv /œu§©³œuœt²/œoœnœnœmœlœkœiœeŖoœd¢£]­²h¾1œ`Ÿ~² œ`œ`Ÿ~ œWŸn¤|¦©+­®a±µaĮwœQœQœL¤d¤t«gœKœK¤œJ©œIø œIœIœA¼rœ>œ:œ:£TŖbœ3œ2œ,¾Dœ+œ*Į+œ) ÆL»iœ& r©zœ#œ#¢.„~©«9°¾Eæœ#œ#œ#œ"œ" œ"£R¦8ØCØhØuØwØ~©© ŖŖzœ"“½ œœ©aĆNÄ9Å=œ„@±H½vœœœœœœœœœœœ¬·œœ§\œœœœ„Ŗoœ”l¹Ć&Ć(Ä&Äl œœNœX§-¶E¶z·^ø¼œœ œ œœ2£xœ œ œ” £Q©!œœœ­œœœEŸC£*„„)œ¤V§±:œœœœĆĆUĆwĆy›~›~©²rĀ›wœ/œIœIœXŸG ”;”<”J”S”p£'£1£l¤„ ›s¢>¦G§4©6ŖwÆ@·|›p›l›lŸu£nØY›k›k›j›f„T®J²r¶k›b›aŸ¦{»M ›`œJ„3ØaØiØ©©ŖSµv»a›]”¦u¬¾} ›[A¤+„­@­®zµnĀ›U¤„s ›S›eŸŸŸKØYĄOĮjĀ,›S¦e›R›R›R›R¦2°=›O›M›Kœb„8„9¦<Æ-›F›A›@¬X ›=Ø>®5Ƶpŗ=¾¾#Į+Į;›;›7›4œ?›4¬"›3³µ@›3›/Ä›.›.¶~›-¢°v›,›xŸOÆl°U›,§©]»P›+§¶ø ¾Ąs›+›*°[¶I ›(›/›H›Jœ?žzžzŸJ£p¦›$œœwT”«ĀM› œ/£Q„0§9§dŖ®®'Æi° ±t·h··ø%¹$æ` › œ/£Q¤r¤~„„0®'®zÆi› ” ›››© Ä'›ØQŖSĮ›Ŗx›Øl©!›„1› ¶››Ø ¬t­›¢,››§.®H¶k›„››²*¶a›Ā1›¶aĄ ›Ø°››&ŸC›››©½U›”››› › › ®B³I»Q› ¶› ¶7› §v› ØØ Ø!ØDØH¾ › › »p› Ŗt› œW®Iµ¶› › › ›› › ›  SØaŖOÆ2›Ā=››› ››£Z›››§2››4Ø ¼Ą\››«®r¶æ›Ÿ4£Y³g›¦N¦pĆ›¢H«n›››¾|›››››šš~š~„1Ø3ŖŖK°š}§®:Æ=¶Dš|šzšzšzšyšx¼Fšxšxø:šx¶švœ8£i¦ ¦ŖŖ:Ŗ|¬;­q®·øĮBĮyĮyšvøšvŖ¶ršr”_øFĮZšqšpsšm®D²T³³&»`škšhŖšg›Tž.©ŗ5ŗ8 šf›]­®®4²m¶~»ĮYĀSšf§šfšf›N® š`”|šY¶ šX›,œdŖŖs®·»:»Q»kĄšXšTšM”WšIž~£RĀQšHšBøRš@š@œb”µaš9»*š8š1š1š0š/š/§ š-š+ššššš³#ĄBĮ3šŸ®(šššž}¢¢Q²c¶U»~ššš -„\ÆO³e½uæsšši“8š”M”a¬Pššš›Q›r v z¬qÆ9™š q ™~›M›gŸbŸc¢O©c¬ °}™v®0™u™t™s™sŸE¶=™ržU°]¶zø0Ā™p™p™cŸvÄT™b b­7²6· ¼ ¼R™^™^™Z™T™Sø™M™G™G™Dø™D› œJ¬X¶0™C™B™B™AÆo™?·™>™=™;™:™:™9 '™9™8™8Ŗ@™7™5™3™k¢-±¾y™2™2Å5™2™1™1™1™1™/™.™.«B™-™-™/™+ƶu™+¦™*šj¼X™)™)™(š"™%™$™3®EĀO™"™!¤sŖ²™®™™*ž]™™™·p™™™™™©™£™™™¶™™™™ž;™™™ ™ ©?¶™ ™ ™™ ™ ™ ŖI®L¶h™™°N™™›0¦ĮOĮYĀĀ™™™˜z¢S½]˜wĄUÄ(˜r˜r˜i˜i˜h¤VŖ˜f¢B©pĄ.˜e˜o˜e˜d˜dŖt¾x˜dšp˜cø ˜ažBžtŸ{£GŖ[°Y²·rĮi˜^˜\˜\˜\˜[šw§~¼!˜Y©:¬ZÅ6˜X››œ ¤l§wØ?ØKØt©+Ŗ'“µw¶$¶x˜X˜W§j˜W˜S˜Ræ˜Q˜P›]®$®%µoĮX˜O˜O” ˜N˜N˜M˜M™C˜L˜O¤˜JĀfĆTĆZĆu˜E²!˜E¶˜E˜L™› ˜DŸ· ˜B¦cØ5æ3˜A®H˜A£9˜=˜<˜X˜9˜A½`˜/°\˜*˜&˜&“N˜&˜&˜<› œAÆTæ/æ8˜!›¤$¤F²@˜ ˜œ)«>«?˜˜˜”.˜™Oŗ¾o˜ÄF˜˜˜µ<˜¦r˜˜˜ž@©hŖm“>˜¾Q˜˜³0˜„K˜œp¦f¦g©-˜œn»?—}—Ÿ\°½0¾SÅ.—x—u—r—q—rÅ%—p©5—o±± —nže—n—n—n—k—g› —g§w—a¶T—a™œp« Įy—_Ć*—_—_®x°\°t³d—Y—W—[—[—[—\›n—W›n£`„LŖ —S¹tĄ2—Q—R—Q—R—P—Oŗ/ŗh»c»d¼l—N—N—K“5—EµT—Dž²'²M¶0ŗ3æ@Ā —A—k˜oŸK¦a©¬¬¹—@®V—<—7—6—6˜²—3šD 2”&£A«j—2—2œ—0š"¾i—(¦ ®®&¼R—%—#„«A—#œ„—¶&————¢+—¤F§a©—ØI———§`—ØgŖ·—Ø —Ŗq¶`—ØqØu©©"——žMØEØHØgŗæ<ĄB—— — ™œ(®~ÆI³¶ŗ»(¾-—©r–y—© ŖF–y›–yœ!«L¼–t–s¶–rž–q›%±;–q–p¬ ¬°t»g–o£P°v–nŸ1”n²–n–nže¼e–mž£s¦« –m–m–l©rĆ–kž7–j–p–g¬ŗ–f–b–^–^¦\Äy–]—l£±Įe–]–\ž1–\–[„v»a–[–Z–Z–Y–Y–X–X–W–W˜a–V–V–R–Q–O–N˜¢`©wæX–M–N–Q–J "–F–C¦©$ÆBµo¶W–A–A–A˜< +“$–<–:–2§@–1§–(––˜&˜/–³–ĆiÄVÅ– „ – – ––ž` }–» ¾TÄD––––£5––¶–––¢l–Ć/ÄmÅÅ6••µ}••~šj•~•}– •}•{øjøl•zøC•z•w—E£~½f•w•s¤3ÆT•r•nøp•l•p© •l•p–^–^¦\•jÄT•g•g•g•e§)•c•b„9¦Æ6•bÄ8•a•a–”³T“S•`•_œ?•^Ÿ °f¼[•^²y· ¼[æh•W²1•W G•W—›S <•U–„§3Ŗø{•T–¶x•T²•T½O¾ækĀN•S  ±D¼R •QšV³ µc¶7·@ø¹\»B¾)•N•N•N•M•M•M•L•K•H˜@¤x®a³ •F•F•D®!•D•D•A“=•>Gø^½!•<æa•<›¶•<§+ŖF°³.Ą•9•,Į •*•)•'•'•¤••••™u•ŖG•œeS c¦zØX©N©j­4­8®°^±-¶ øI»»9»V¼ĮAĮR•Ÿ­y·ø`Ā•„ • œs¤9Ø Ø9Ø?Øj“• ©V«v¬ • • ­?®*øø0Ā5• »p••••””·”””~ø ½Ä$Å”}”}”zµu”z”z”y”y”y”y¶%”x˜W”w»E”w”w•™Ą”w— ”ukž ¬“”s«N”q ”p—u›Eœ9n e”*”E¢b©N¬%ĮrĮw”h”d”b”`”^”]”\”\•L”[”[”Z”Y”X”X”W”W”V”V”9”6µk”6”5”5”5¾”5”4”3««%«*­®sÆæ”3Ŗ,ŗ`Å8”2­S¶,ŗ%¼½D”2•¤3„[Ŗ ­®S®f²f¶q½#¾"Į$Į:”2$©^”1Æ?”-#)”+”*¦b°.æB”'”&ž”tØ&”&”%”%šz¶&”"”® ® “}¾E ”œœ$œo ;§ØØ½a”Ÿt”Ä ”Ø”µS¶U”” ”Ø=ŖEŖ\¶¶ ¶(¶:¶D¾””–¤ŖK¹^»”Ŗ]”¾”””X˜\··>øN”” ©2»P¼L¼NæHĄc””ŗ\””””””””” ”žR”m¤[¤[«y³wøx¾i””©2” ” ” ” ”qšQšYšeše”¦§ ©L©d¬Æ±{² ²C²[³»2¾l” ›” ” ¶b” F„%” ¶b” ” ¶~” šw®L·`øl»{” ” ””  4··g»8½~¾¾¾¾ ”›@œCž|Ÿt¢y£Äm”””ŖD”•"“'“-“W»AĮ4Į5”¦m±¾Ā”””Ø^”” »H””“®T“µH“}¼V¼[“|”V¤E¦?Ŗ “{še“z“z”x•= &„¶G“z•= &“z“y®F¶|ø2»6“y› S­O“w“vŸD“t“q»k“q“q„Ŗ/»qĀT“m§“k“k 8§^± “i›XœP£¤¤¤t„M²QøF½“i“i“a“a“^–S“^¦³,“^•>¤“[“g“[™6Ä5“Z“T“\“R£*“P­“N“M” “K“I“H±I“H±L“H“?Įn“>“>©#“<“;Ą;“;“;Å“9“9Ø3¶D»HĄD“9“8“7“8“7ø¹&“7«E“6¢>²“5•S„,©P“4¤c¬`°m²³¶k“3³!“-¼"“-“-[¤„ ¦­­±±]²³µµU½XĮ|ĀL“)“)“&“&•=³?¶r·?Ą“"“"“!“• šn³B“¦F““““”'–5¦N©T«c«d±S“•b®Uµ ““¦,©l“Ä““ “•^•^œEŸ §°f²;“R·¼6¼[æh“ ™m“ “““)“””8”C”H”T”n••••)•>““”1““æ“›.£n°m““ ’“ •zjŸ5 .¬&øø'ø6’’§A¼’’~ø ’|Ŗ’|ŖC’{•}˜c™*¶K’z““’u’t“”Q•&’s’q„R ’k“•F•v—— —)š]š]Ÿi’k•FØD®@¾ ’k’|•E—(¢ØnØo®1®?±^·ø%¾ ’j™xŸG”I®,·iøQøp»’j•C’j’j”6•U­G¶9’i ’i“b“{˜b¦"®[¶Z¾-¾.’e’d—8—8˜s˜t’a’a“i¹SĄUÄk’_¤¦b§-°Zø}¼S’_’^¹WĀ’^’\£¾)’\’Y•—)š›(›/›HŸK¤Y¤`¦ «i­:­G·[ølĀ’Y“p™š]Ÿi°’X’Vš ’V”f•i„o„q¶^Į\Ā3ĆĆ"Ć.ÄÄd’Ušy’U’U’TĀ ’T’\’T—gŖ(’Q£U£^¤7©²oæ%’P™{’P’Oæj’O°O’L ’L—˜O„D§.ØIØyŖŖqŖz’L·D’L˜OŸo®2’H’G’G—™™jšMĀ’Fšv’F˜f˜h Ø ŖŖ(ŖTŖ]ŖdŖg¬­E®1Æ7±D²s¶.øX½cĀĀĀ’E¬n®x¾(’EĀpĀw’B’A’i h¼DĄĀ@’<’<’;’s“ “2“9“B“G“V„„ØEŖ ¬øø/øBøIø^»,¾:Įb’;’:’:’<’:’;ØJ¼5’:œ’7’5’:’<”W’4“J•*•>—˜7™)™\™_ššOšQg­Mæ’2’2’2›2£AÆ8µ_·’/•›|„OØX¶Ą ĮW’/™?œ„x’.’-’*ĆcÄNÅÅÅ2’%–––0–2–3„ ’$™ ›¤+„ØA®x²)¶x·h’#’„}µx»l’˜V’•Q’ ’›œ „U¦J­µk¶H¶sĀ<ĀO’’’„Q’’’–:’ž’’øBĄV’—U›&›c›kœ7Ÿs J””u¤@§ §Ŗ­E°Cµ øgĄ8ĮĮUĮw’’§O’µ*’’ŸM’’ ’ ’\¢3©}æUæWĆ~’ ’£n©4­6Æ9’Ø’ĆAĆf’ ’™›.žX©,¬@°^²v½U’˜9 ¤&Ŗ0¬=°Ć!’’¤,„<§{©zæO’’’’’¦*’‘~§TŖ±/‘{µ‘z‘z‘z‘y‘x„@„sØŖÆLĀe‘x‘x²‘w§"·v‘w‘w‘v ‘v˜™8šjžB³e¼æqærĄ^‘v˜f‘u–=‘u‘t¦a‘t‘q‘p’¢0‘oš‘oŖ9‘k  ‘j‘jœt“q‘g˜ ‘gœ!¤,„F¦U§T©©?¹‘f¦'ŖX‘d¦OŖRĆA‘d¤ ¶R‘d¹‘c¢5§§§-‘bžg§J©[ ‘a”3™%[ŸD£(¤ ®4®c®z‘_Ä~ ‘_”j—P˜¢p¢x¦@¦YŖl“8Ąd‘^Ŗ‘]Ø‘Y—l‘XŸ}‘W‘V‘UŸHŖ`Ä?Ä@ÄCÅÅ)‘U‘RÆ?‘R‘Q¦#¦z©6²v¶%¶w»@‘Q„t‘Q¢-‘P‘PØ‘Pœ, ‘O™-œX  £*»J½QĮ]Ā!‘O© ‘N‘M—9£q§G‘M‘K‘n‘K‘L‘K„,»5Įr‘K‘I’ ŗzÅ-‘I—Ø‘G– šcĮ/‘F˜t˜tæA‘D•s¤`µp‘D’Z§«iµp‘@¶B·@¾/‘@˜O‘@•U–·[»+¾.¾2æo‘;‘;Ąi‘:‘9‘8‘8‘7‘7˜U‘7‘6‘5²L‘/‘,‘,Ŗ/‘)¾p‘(‘&˜˜už*²¹6‘%¤<³i‘ ‘‘ Ÿ7Ø5²Z³ ³R¶q¹¹:¹=¹>‘ ‘”•U–b x©«»X¾ 摞sŗX‘˜|‘–‘œN¤®3·z·z»N‘©}‘’”)¦Z¦a¦|·x‘‘ – —L›F›p ”6”h¢$£¤[¬?­^­`­b±¶/‘ ³.‘ © ©SÅ‘ ‘¹8‘ž¦f±7±~‘‘Gæ%špœŸŸg ¦ Ŗ ®aÆ6¶¶U»RĮ|Ā Ā8ĀL™k”=~šJ©*²Įl~”}™Ÿ\¤yĄ8zØd³y’YŖi­&¶8y®Iyw””Z•šBœnžžØ9Ŗj¬L¬a¬|­+­|® ®±9³%·Gøø:ø:øWø`øcĮMwŸ¬s±wv‘pš=š>œt±±0ø v’F’Z™:›z¢M¤j¬+®z²yµo· ø=u›VŖrĆ'Ć)ĆMĆXqŸ pd \œœ„V§T®cÆOĀ;Å;[qO”,”¦fJ”xØEŖ ÆK·ĀUIIF£TF“,œ"]Ÿ¦H²[EE™ E’ ’-Ÿ¤D­#C’?’E’W’W’g””N”Z”b• š&š&”.Ŗ"·dø[¹ŗ=”-šy¬-<;™y;§_­5®#¾|8’K’K’q“s“s•y– ›O›rf ( 3¤:Ŗ_ŗh.-µz,šA›Ø³6µ0)A™O„ «%½@(”P¤Ŗk¬!(‘<‘<‘h—&°-(Ŗ ±_ĮZ''£Q§M'#=Ÿ~£t#•?˜SžBžS¢#" ²  žV”x’ ’#搱 ˜(˜A›»{˜a©ŖZĄ&rž:Ą”“'—2³l ›„  —0 ”oÄg) u—"CFF\wxžŸ| 9¢2£U¤J§R§gØ3ØOŖŖŖW®^Æ;°]±±±A±V±[±]²{³ø»6¼¾,¾<æ&Ā3ĀS 9—“#|›9Ÿ D»=Ä8{{¾Sz¢l¢n³Myyr££_¼9kmg”-„Aežpø7d§cĮbž ³8b F”n«.®iĀOĆ1aa  `•Wŗw_‘I‘a‘wž` _™šNn¤a­<¶¶8øĮ,^Ÿ^°UĄMĮY^‘G•C£]žX¦7؏]]™L¦r¬N®NøZ]]”l[—Ø>ØHŖq«K[œsŖ[—[¦([—/Zšuœw§¶DZ”ZŖŖVŖiYŸLØ"Ø+ŖVŖk­_YŖVY “!Y— ¤@©­$Y˜=Xh‘BŸX+— —(šRQ“-›}Ÿ@ :Į6QQš|›+œ>¦x§¬/¾kPšPOœŸ§r­RONNNÆ2ø{K¢TŗwJ™DJ§*¼yI’G˜Wš›HH›Ø G²@GµxEE—š"Dšy„}®2°Y²v·D˜V˜[™AØ6DCC— ­WCB™ Bø A—yœ%žž!ž-ž-ž8ž\Ÿ  p§*س#³$ĄJAA@‘cš¢*Ø`ŖK ?•–˜@›Ø±&µ[¶ »j?>>>˜{=Tb‘‘’4™%™G™I™]™q™tš ššZžZ lŖ6ĮĮnĀ <ž «h¬­_¼O¾~;!—&—'ŸŸ£e :F i‘”S”T–W—)™$™]Ÿ r:@u‘™ ™š!¦Q88777464^Ŗg«q¶-Įr4„7§øe4..³Wµ ææ|.™,,+B¹>++–A˜Z+™D¶P)™ušš­$±v¾))’/—)Ø>Øt)(“t˜X˜i™A© Ŗ(( (+™qšJ„²T““ ¶{»[('›3ĮP''“˜ZŸ' '‘˜|™p™užY©.­,­2²n¶y·^&›· &@P•A–™ ™$ŸŸT±c»U" œ|¢P¢n¢r£¬C±–[ž5žW³Zš ¼—H¬“#i’m•i—7š>œyy ;§+§hØ ŖŖ\“Bŗ/¾g¾g¾}Ą\ĮT  •'“w£*¤sØN©©K % —˜N™jjŸ5 /§µvµæ,¾-„ØžW¶}–=©E«b› -:L‘˜M™C³^›¶|®O²¶&¶|˜E¶| ‘‘‘— £„³¶qŗ½aŽ˜Ešv¬¶&¶=¶HŽŽœvŗŽ¢(ŽŽ~•Z£1ŖFŽ~Y¹Ž}’X“t§½LÅAŽ}Ž{‘'‘Y”U¦§|Žz-¦:¦g«oŽzŽyžiŽy˜r 9¦¦&¶ŽyŖ®GŽx››i« ¶)ææi Žw=.¢¢1¢G©_Æa²z¶0½a¾lÅ Žu–c„_„e¦§{©R·»} Žt’’—Fš>Ÿb¢¦+§ ±IæIĀĀ!Žs Žsc“$“'•¬-»jĄĮ ŽrŽrŖŖg¬ŽoŽgŽc¬,¾ Žc;Ž`³1Ž_Ž_Ž_Ž^Ž_¬½Ž]y˜,æQŽ]Ž\©qŽZ™`ŽZ\žNŽYŽYŽXŽT™y­Oø,ŽSŽS˜+˜1ŽQ»ŽQ:ŽKSp|)kt’’&’2’D’z““ ““V“s•—M—O—V˜v™™™O™ešj›Y›pœh+-Bmž_žrŸŸŸI 9 `£r„„-øøøø/øBøIø^»,»G¾:¾cĮcUŽKSp|)7>ARakt’’%’3’;’D““ “““?“B“J“V“Y“]“c“v””'”,”,”8”A”l”••>•o•s–— ——M—O—V˜0˜v™™™ešj›Y›p›|œh+-2BFUmxž_žrŸŸŸIŸR 9 _ o”/£r„„-øø»G¾c¾dŽENؽ6ŽD”™T mŽB ŽBffg–&™UšJ„„Ž=Ž<”@–l¼FŽ:“™"šn›LŽ5Ž7žaŽ1 Ž-™zšvœH£(«8«WÆ\µfµpø|Ž-Ž,”#œ?Y„ ²_µZŽ,¶·kŽ*®|µ·hŽ(Ž%›{Ÿ1¬,¶ ¶'¶7Ž%¼;Ž$™iš|§1Ž!•>›Q§<±²W¼%Ž!·_Ž!Ž!Øw©ŽŽ“)ĄŽŽŽĆoŽ„H²G²L¹ŗPŽŽŽŽ©YŽŽ Ž Q Ž &„„„%„rÆ]Æf±o±sÅ>ŽŽ®x°D½FĮ0޵ ŽŽ}}• «.æ0||Ž‘:{›`{„„®;z«R«j¾bzŗzy‘%­>³.w²)µk¶9 w\˜jiqŸ4   - 7 8§°<rtŽwFeqh±0¶7øeœ&¦1®3Æ+°I±p²L e;“m—?—Cšk¢:„'ŗŗeœKeœœKØ<Øud² ²,d—7§:©d؍cccc;„OµvaØ4¶[aaĄ@]]’»7ĄE]»7\­'­K³_\¶}\”w›©![§k[©[Z’iØqŖZZYYX•X–y¤BXXØsµqWWWWØC©±ø`V“s›§[VV›%V›V­)®hU›T¦JÆ SžSQĆ_ÄÄIÄqōH’>H’Į ĮD<<”t<<³RøW8Ø]7#®VĮI7” 64T›œ(£5„««7®fƳ µbĮ;Å64„b§1ŗŗ 0ØKØlæ"/.--,ž3+—q%"‘dŖ2¹Į  %Ć%ÄÄÄÄÄ0ÄnÄpÄuÄxÄ~ÅÅF™š#œj§ W­(®7²v “N™™^o©'Æm²N¹æĄCĮ Į+‘„<„{Ŗ>“‘„JŖAƍ’H•›+®N°Sµ7“k“]  •ešw¦m§b§r²  ³6  —$ } Ž”ØRĀ8 ½¦­z••š@§}Øj«n£NÆ/°u“"·Œ“]Œ`‘Q’š=œ8§S©%Ŗ7Ŗx°X»?»?»@»fŒ~Œ~£^°9½hŒ}w˜»4Œ|Œ{µwŒ{Œ{®7¶øKĄ Œ{ŒzŒz•L¦ §°\Œz ,Œz’^” µwŒy§vŒyŒy®:ŒyŒxŒwŒwŒw¦#ŖCŒw§ŒvŖ-ŒvØØ\Œu¦TØB³ŒtŒt0„J¦VŗDŒtŒs•}›cŒs–mŒsŒr©ŒrŒr’œk Œo“ “-“cš:› i­(µ=¶M·»*æ0ŒmŽ^’¹,Œl˜»8æ3æ3Œl§O©_Ä< Œg+Ž{’¢R©mµ^¼d¼hŒeŽ=ŒeŒg—F—^—_¦p§FµŒc°Œc zŒ`$‘•Sœn„.¦f©)« ¬I³s“vø»Œ]Œb›j¬½æXÅŒY ŒS’”9žT£g¤S°]“s“{ĮbĆ"ÄoÄoŒSL’–™Bœœ^OžžZ¤q„«^«a± ± ± ŒR\ŒQŒQŒN§ŒIŒH»[ŒH ŒHŒK ;§2§]«T®°^Ą0ĮcŒF‘V–ŒE¼i ŒDŒE‘I‘J‘°.°0°FŗzŒCææ`ŒCÄ#ŒB'˜UŒBŒAŒA Œ@Žq‘’˜ œBŸ|±P¶V¼{ĮĀ Œ=6§G³'Œ=Œ;ž|Œ;Œ;Œ:Œ8ĄVŒ8Œ7Œ:ÄGŒ7—mQžlæ\ÅŒ5Œ2“YŒ1Œ0˜›C”©· Œ.Œ(Œ'æ Œ&Œ#Œ"Œ"Œ"ŒgŒ!—a™$ŒŒ–/™Rž(žK¹ ¼0ŒŒ! Œ‘W‘e‘u–>š?¦oÆBŒ•JĀĀ9Ć Ć#ÄŒŒ™)°R¶>ĮlŒž7„ ²8¶WĀNŒ¢`„2¦§ °ZŒŒœĆyŒ—;—<¹U¹WŒÆŒ–Œ Œ Œ µ7ŗ|Œ Œ 3Å!Å/Œ Œ Å Œ Œ«2ŒMŒŒ ¹Gŗ;½MŒØ­ŒŒ‹•&‹|xĮ7‹{wøĀĀĀĀĀ%‹{x•[‹zØ2‹zØ~© ¹‹x‹uŒ‹s¬!³&Ā!‹s"‹s3—z‹r›s°9‹r‹r“V“W‹q§‹p‹p‹wŒ–/Ø. ‹m’,“)”2•—'šZ©l­ ®"³Bøŗt‹k™ ›"­"‹i‹i—Y‹i‹g‹g‹f§.‹b‹a‹a7–D°5³,“*‹_–Tž‹Y‹Yš~“n‹TŒ7ŒV™Z©f©vÆ^°A‹TŒ\§9ø3¹4‹S‹S–µ 5‹ST'‘y”––˜L™™ › £.¤¤(¤M„ „¦3§§;© ©(©1©;©HŖŖ&ŖL« ««3«w¬2¬=®8®p°r±±² µ µ[¶¶r¹»2»D¼bæ1Ā:Ā<Ā@ĀG‹R‹R‹R‹Rŗ!‹R³PĄ?Ą?Äf‹R—H—H n¬³PÄf‹R‹Q‹Q0‹P‹Pž ³V‹O„K‹O‹NŒH ‹NŒH’2’z“““s£5Ŗ#³UĀH‹N–l ‹NžbŸ@Ø@«³“½aÅ7‹M|Ÿ£­X³?ŗ~‹L§®sæ3‹L›bžY³5ø3‹L—r¦=¾W‹K„ Ä#Å‹KŒ/3®x ‹K‹xŒ ŒŒŒŒ ŒMŒh$:‹K³8‹JŒy–*Ÿ0„C¼I‹JÄÄX‹I ‹I”šZ¤gÆÆM²9¹ĮĀ‹I‹H%–œ©t‹HŒE‹H‹HV•› ¤xØW«6¶q¶y·>»»}¼‹G°4‹G‹p“T©T‹G‹b ‹G‹b‹dŒŒŒŒŒ7Œg‹F@‹F‹F‹F„IØAŖøÄ/‹E‹E‹E•<‹D‹C0”E±E“o‹C,‹C‹X‹\‹f‹k‹r‹{ŒŒQŒVŒ],Ž&µµXøyø}¹ ¹¹:ŗ ŗŗŗ#ŗ*ŗ5ŗ:ŗ>ŗBŗMŗP»»i»o¼i¼l½ ½ ½½½%Į‹B“q™.Æ)µq‹B‹B‹A7‹@‹@ ‹>•s–z˜S› !Ÿ?“.ŗ#‹>œÆIµ3‹<‹IŽ'„i«²\‹;¶:ŗ¼‹;ĀL‹;'[»wĮĮ‹4‹d›hŸa ¤U„„ ©O±|²ŗĄwĮĮgĮrĮzĀĆ‹3œO­‹1‹1‹1” ĄgĮO‹0‹0‹/ ‹.‘y™£i§5©7²v¶xøJ‹,‹,‹,“|‹,ŒV‘lØT‹+‹-œK‹+§§¶]»=‹*‹*¦x‹)‹)Œt“4–— ™EšXžž> ` b f³.³0³Sø‹(·‹(¦j‹(¢‹'‹$  ‹#‹#Ø^‹!‹1 ‹ —™Ÿ]£Y¦=§c©cŖ °¼¼^¼`‹ ‹3œ£4‹‹‹¦ ‹`“{Ä(Ä.Ä<ÄIÄK‹‹‹‹DŒ~”£`§!ŖŖ3 ‹–\­“w·øh¹»V¼A‹Ž ŽŽg—oœ‹‹‹‹˜7»)¾n ‹Œ)+— ž1¤E­/·ĄCĄq‹‹‹­&‹‹C’›°|‹™¢¾‹’“h–—— œžRžW„Y©t«x¬³J³g“Eµ»#¼Gæ^‹§q‹‹§=‹§‹‹ ‹ ‹ ‹ ‹6žtŸŸIŸSŸS t£V„„.¦zŖVŖcŖp°s°y±v¶-ø¼P¼Q½Z½\½bæ'æ-ĮhĮiĀĀĀI‹ ‹ .Ž—›£c‹ ² ¼ Ā8‹ ‹ v±<²7ø>»@»OæPæPæRæTæX‹ £|‹ –³;³~“øø » ‹ •–:n§ Øt«9®(ø¹‹ ”,•,šŗFŗF»~‹ Žk‘#•_¢(¢)©.æ‹ ŽqR•WœBœzŸc¢£¦i§§]¬o­z°¶Vø&»(»3»7»T¼<½[¾æAĮ>ĮS‹ £‹•c‹‹›Øj««®N°>Ā9‹‹£1« ¶j¼4¼U¼b‹‹‹‹ø!‹Œ‹ŒM‘L˜‹Š}Š}ž+Š|‹ ŒXxŽ0ŽQŽ`E’-’B’i•r—Qžž ž žEžažbžhžq ' 3Ŗ(«}¬,®JÆQ³+³D³R³y“<“jµ&¶L·K·_øZøqŗZ¼eĮŠ|ŒDž:Š|œŠ{” ŠyŠxĄ?ŠvŠr{˜y¤m«KŠq™ Šp»_ŠpZ«ŠnŽ+Šj Šh‹|[šK”/„²Nµ(øføy¹$Į6ŠeŠe‹dŠd©h«Z³6·G¼uĀ!ŠbŠbŠe‹dŠ`’?›Ÿ-„b­Š_”-Š^Š_ Š^Ž¢S°+³+µ&µ&æ=ĮŠ\“•JŠYŠYŠX‹qŠTŠRŠR¶ŠQŠ£>£F²b¾ŠOŠT‹ŒŒŒ ŠOe–uœL©I«1«C¹tŠMŠ^‹t˜Z› Ø]ŠM޶e·eøeŠMŠ^ŠeŠjŠm‹a‹f‹iŠL/ŠK“iŠJŠJ/««!“@½|ŠI— šTø!$ŠG‹ ŒuŽt\‘ ‘F’”l•~šB›@›c¢'£¦.¦d§W§\ŖŖU­.­Y®#Æ@°±±±±µo·.øøĮUĀŠFŠIŠFŠE”yŠE1®o¼¼JĄtĀŠD‘8™ŠDI™½ŠAŒ‘A’:“””–y˜@˜X£G§««L³/µ=·!·M¼P¾5æaæfæpŠ>Š>ž ²Š<¶ Š<Š<Š;˜o”£b­; Š;[¤DØ/ØlØoØtŖ³I Š9“v”(”(¤>©<Ŗt«oµ_¶KŠ9Š9£A£S¤c Š8ŠA›®qÆN°>²Gµøx½bæwĮcŠ7Š6’;”µ Š6‹UN”•!³I³y¶»Š4Š0Š0`ŸŸŸŸUŸU r s”£?¤|ØX±±“ø'¼1¼PŠ/—6±:æ&ÅÅŠ.Ža’3Ÿ³VŠ-Š-žWŠ-Š:ŠHŠ-®æaŠ,Š,Š*³i·nŠ*ŒŒ ž7Š*Š*ŽxŠ*Š(Š(Š(š5š=ž>žO ` b f„.Ø"±4·{øøR»TĀ1Š(Š2 Š(— Ÿ B _ v¬¹¾I¾K¾iĄAŠ&Š&¬Y®µ ·GøJ»EŠ&Š&¬R±±±;³UŠ%Š%©¼Š%Š$–~rŠ$Š#©gŠ"‹ŒK’3’P—f¾WŠŠLŠO‹ZŽ0Ž9Ž9Ž<–6–8–W›q2“8“;ŠŠ$ŠDZŠŠŠ%ŠDŖŠŠ"Š"Š>¤=ŠŠ"Š"Š*Š-Š7Š9¤=Š”.©CÄpŠŠ”5ŠŠL Š”››už«p«|³FĮxŠŠ„"Š™5 Š Š Š ŠsÄÄbÄuÅÅ ÅÅ2ÅEŠ Š{²OŠ Š ŠLŠYŠd‹XŠ ŽRž]ĄvŠ1Š<›#³¹Š›#³¹½OЦ5ØŠF”@±Ą`ŠŠŠŠŠ7Š8’5’7’8’8“”—}›œœ·H·_øRøVøn½v¾ Ä ÄÄ> ‰ŠŠŠŠOŠdŠqŠŖ· ‰Œ ŒŒ(=žž^ŗŗ$æR‰•G“‰ŠG“‰| ‰{Œ]›f„~°B³4³F³Gµ=Ą;Ą}‰z‰ze !„„“f‰z‰z‰zø»j¼¼¼(‰vØe‰vŠmŒE“<Ŗ¬¬2³F¹A¾M¾P¾TĆ8Ć<‰s‰t®z‰s’œœ2œ? „VØ®q®~ÆLÆW²&½h‰s„u„{Ŗ>‰s‹G‰s½`‰r‰r‰ræz ‰rŽ Ž ›Qœž$„!¦1©=¾gæe‰r‘f“;ØRÅʼnr‹I‰q¹>‰q«8‰q„§u«7»n»{¼‰p‰p‹}Ž—y‰p‰oŒDŒEމo‰n‰n‰n‰n‰n’A ‰mŠ+Š+··rĆĆÄÄ ÄÄ>‰m•L‰l›¦{‰l¹,‰k ‰j‘H–c¤;„=§LØÆ)°1‰i‰i”‰h©JæJÅ ‰hØs·køK»z¼ĮK‰h‰h‰gŠ Š+Š0‹6““““4“Y“k•k–– 3Ø<Ŗd¬¬ÆrÆzĄw‰g³Z‰f‰f‰f–5©S‰ež%©T­‰e‹J„"¾¾6‰e‹}‹M”b¢*¢F„q«« «B®r®rÆ±æææH‰d‰d‘G”%ÆP°3‰d‰c¤¦o© ø|Ä{‰cЉcœF°l‰c‰c‰b‰bŠ:‰b ‰b‰hŠL‹a’f’l•\•g•k•wŖe¬µ:‰a¦.‰a–k‰`–m‰`ĆMĆ}‰`›rœjž¦*‰_*’W”N•bšwœC „B­o°F³h¶7·e¹»<¼¾2æ|Į@ĀĀM‰_‰_ ‰_‰y’}“4˜b› ¤¤y¶H»r¾ ¾| ‰_‰h‹:’~›"¤¤;„|¦­µ6‰^¤!Æ3‰^ŠŠŠQ ‰^‰y‰ŠŠŠŠOŠVŠdŠqŠ‹dĀE‰^‰]Žs“y®M»zæhĮ,‰]’#ZØJ«+µ¹ ‰[ĆXÄÄÄ/Ä<ÄJÄqÄuÄyÄ| ‰WŽ.š4«Q¬HÆdµr½XĮ;$‰V‹Ž*& .“D—™x›aœCœQŸB ”p£'£l¤C¬$­­­)®*®-®Q®a®}±y³³?“2ø¼S½$Ā ‰V’PŸB£P°²zµu·t»8½$Ą ‰T‹‹%Œ‘H“–X–sž0ž2·2½‰S&@¤ ‰S‰_h§®yĄhĆ7Ć<Å* ‰S˜:›®I¶¶¶(¶6¶M ‰@i‘‘‘B­ÆÆµTµW¹*Į‰=œŖ.ŖkÆ&ÆT¹»k‰9‰aŒhŽ˜U ‰8–˜U›e ­K±»,¼S‰6±S±j‰2‰1‰$‰#‰# ‰!‹r˜žI££M„«W°·PŗM½6Į%‰ŒN’Ćq‰• \¢{½ ‰“V–N«{¬ ƲWµF·o½i‰Š-‹*‘(“3”%™h™yš.œ@œW¢<„\§¬AÆ\»&Å*‰ŠŠHĆ ‰æ‰§©m‰0‰‹:›{‰‰_¢2؉ˆ}Œ“{—µdˆ}‰>‹|+’’H“™ ™DŸ1¢2£4„YØŖ-ŗNĮ-ĀT ˆ}Ž=‘?—œ2 ^±y“UøP¹½gˆ}£a©Ŗ²ˆzŠX——"ˆzˆy˜!ž ˆy“3“{™O™Rššš¦'ø½½bˆx²A¼}ˆwq &«®®g¶eĄ`ˆv‰ ‰(‘ “D”2”S— ˜0˜F˜YššsPZŸY„ˆtˆs„ˆrÆLˆr[œø| ˆrŽœ`§.ØL©²A³$¶B¶Q¾_ˆqˆq©ˆqOˆqˆq‰ø~ˆq­ˆp\G’— ˜œœ)œ\°³*µv¶qÅÅ*ˆp‰>œ„Æ'ˆoœ+§Uˆo’£u¤²?¶s½gˆm‘/£?¤:««m³H³wø'ø[øgøgæuæzĮ! ˆm•j˜pš›R›UŸ o„yŖ6­#·qˆkˆm‰Lc›zœ œœ6JŸjŸj „„\§Æ&Æ4³`“f·~»\½½p¾kæĄ[ˆk ˆi‹{Œ Œ+“mœž2¢@¤-°+³4“'ˆi‹P’•c„V«~°ˆf‹“Ÿs¦Aˆc&˜(¢9ÄNˆ^µˆ\ˆ\‘`‘j» ˆ\¦^®#¼½[ˆ\ˆ]ˆ[ ˆZ ’|“”3˜0˜c™š.ŸSŸZ 4Ŗ:ˆYˆYŽ–b˜ ˆWˆY‹Ÿc³0ˆUˆpˆs‰‰9d‘œœ£ „„„ „µWøz¹ˆU®®@ĮSˆU‹œs²&¶,½_Ā;ˆT‘$’X–R6ŸZ„„(„0„_«-±³`æwĮ:ĈS‘%›2ˆS”cˆMˆ{›!±sĄˆMˆM”_²j¼a ˆJ®n±4±9½æQæXæ]ĮmĀ$ˆH™jˆHœIœd£kˆH~™š<E·g¾#ˆH§ˆHT®0»ˆFˆE®[²AˆE¼ˆEˆEˆDšq§SˆDˆS‹b‹f‹f’jˆDˆCŖJˆCˆB­$ˆBU‘Z§sØv·~»ĄB;ˆBˆpˆt‰9ŠR‹B‹YŒ,Œ^ŒoX‘A’$•L— —C—h˜/››2œ*œ3œHœx£}„„X¦7ØaŖ«:¬P­ ­&®®$®-®5®>®A®]ÆÆV°|±±D±^±q²u³µ ·ø|¹»)¼Xæ6ĮPĮ|ˆ@„ˆ@š}¤s§Ā ˆ<Ž 5£R«®(Æ]±L±o²*Ą] ˆ;•+•,”°@¹¹ˆ9ƈ7ˆ}ŠV““aš5žŸ  i¬H­/²2³¶·øB½i ˆ0ŽD”@˜š«AµN·1Āˆ,Ÿrˆ,ˆ,žU h® ²³-·ˆ+¤r«PĮYˆ+ˆI§]­1ÆPˆ*ˆ*ˆ*—Q—Rŗ+»Pæˆ'ŒM¬Åˆ'Ąa ˆ••{ž¦`Æ:øø4øP»GĀ2Ā2Ā3 ˆ’—'—T™2š›\ U­V® ±/±0ˆˆžžqˆˆˆ‰q~›§M¬s°VµdˆŠ(Žp’— ˜?t}ž+ž>Ÿ#   1”«yÆaµP»æ!ĄAˆ””9°^ĄĮ/ˆ¶ˆˆk’ˆˆVˆi–_”k§ŗ0 ˆ ‘V”r”r™Kša¬v°s¾ˆ ˆ‰`—3 w¦HĄ[Å!Å> ˆŠ””-˜F¤;ø6ø6Ą40ˆŒ2”4•›a›xœQGŸXŸr J”!”s£p¤I¤_¤~„¦!§bŖw¬¬d¬y®0Æ<°° °\± ±K±u²s²t³³#µe¶¶4·"ø ¼@¼D½¾sĮwĀĀ7 ˆˆŠv”-›A¤O¤S©iÆ@0ˆŒ7<“0”&–[˜6›œiŸ$ ”¢"¢-¢£Z£_¤j„C„}©B©MŖ/­9­D®4®>®^®cÆ;°1±(²w“µ^µq¶0¶U¹Z½QææĄOĮwĀĀM ˆˆv’m” ²1·o¹Ą{ˆ«‡w –o¦C¬@‡v9”~²O‡tø/‡s¶1 ‡q‰=‘#–—?šFœ)·møL»¼%‡pˆ*ˆAKL•G˜s™išktŸŸ[ x°²0¾= ‡pL’Q¢4« ­c¶¶)¶>¶b»9½,‡p؇p‡o‡o¶W·w½Y ‡oˆEˆIŽn®(®,®5³%ĀĀ/ĀT‡n‰W‹ Œ3w‘O’j“”6šT››Rœ{EŸg 8£t¦`§©¬n®bÆ.°Y·]¼ ¼%¼B‡n‘G‡n»|‡lĄ‡kˆ>–q£Y»`¾)‡j‡j‘S””©]æ_Įf‡i ‡iˆA’~“0ŸZŸ[¶w½\‡i–Z‡h‡g›>·Kø&‡g§{¹¹S‡e‡e’ø?¹$ŗĮ‡d‡c¢gŖ>‡`”Y”~‡_™=ž5‡_Œu¹.æd‡^“G 7£.«Z¼5‡]« «Ā"ĀV‡\ˆ~”C–}š} R‡WŽ •o &®“5½æ‡UzŸ;¤u‡TŽy‡Mˆ< p„G‡L’Z‡Lo–x(‡J¤=©CÆ_ ‡G=œœœxØ­AÆOÆV‡G§[­A‡Fœx5JÆV±o½e‡F•v²{ ‡F‡R‡T›?œ}¢<« ­X“w»æv‡E–N¬ ƇC‹8”z®L®b°[²g²¶s¼)¼+¾æ9ĄqĀ9‡C8‘™œœs ”}£¤[¤[„W«U«WÆÆHµe¶ »T»i¾ĀK‡C™œ w”|ƾĀK‡@Œv“,”^”z™°Z‡@w”y£9­(°µv‡@;‡@]‡?‡?‡>‡WŽ’^•n—šXE{”I¬N­4°f² “;¶E·^øp½¾9¾pĀ ‡=˜\¤|„7§§z®0®dµ¶·h»ĄO‡=‡=¦{¾‡< T’.’T“0—f™H›=›w ¢„4„c­%®®+®>Æ:°|±u²*³ “5“m¹¹!¾yĄ ‡<¹‡:§‡9‡9‡4‡4‡4‡8‡3”w‡2ĆĆĆĆ~‡1”fš: i¬1²²p‡*Į6‡)ØL‡)¾‡)”{Øn‡(ˆs‡%Š7‘B•J› œD «¬v°L°T±¼S¼VĄsĮ:Įq‡"ŒY›8¦!¦!Įy‡"އ!‘Lšq›&ŸCŸK¤?¦]Ø©gŖ5®~°D°H‡®}‡™¶y‡‡‡‡ˆAŒvV•M§SØZŖ]­cÆ7°°·ø»9‡Œk”f„ „R¬.®KøJ‡œ+¾ ‡‡Y‡˜z¼Qæ'‡‡ˆDX›b‡ˆr‡‡›2Ŗ‡‡•Lœ+²,¼ ‡‡œ+‡‡æĄE ‡•eœLŸk¦ §P³&³jæ"‡‡bŒh”"®5‡¾P‡¦c‡š(°Z‡‡‡Œz¦#·¼‡­E‡ ‡‡\‹‹Œ4’ ’O•—™™5™6™~šššœ9Ÿ¦¦¦z§¬Z­NÆCÆC·!»¾8ĮCĮ}Ā,‡ ø:ÄVc‡ ˆv‰(‹vŽ+WW+FTUfhi‘‘“D””3”S”X•_–E—˜L™-™/™6™9™P™S™š ššš š)š`›aipz{ŸŸX  p q„ ¦%§ §<§<Ø-©1Ŗw««R¬O¬i­­Æ.Æ6°;²n³"³o“`µµ=µQ·E·X·Zøøø"ø[ønŗd»=»O¼X½`½bĄ7ĄGĄ|ĄĮ#Į+ĮRĮdĀ) ‡ ‡ Š0”—%Ø}©X«k®l°0Į!‡ ‡ ‡ Œz—g£Q£k¤O§Ø_© ©.Ŗ-ŖK²|Ā ‡ Š>S‘&”n”t¦1®lĄb‡ ˜W›œ, ,” ¤^„„0§]Ø ØW©©ŖŖsÆj³ ¶$·Ą5‡ ›i‡ ‡ ‹Œk‘4’V“|–S˜b™Aš§>¬³Pµ»A‡ –™L u»7 ‡3ŽŽ¤ §a«%¼‡‹'9”ž1¢/„Q‡œžM¦2§@§@©)‡Š—`±æR‡¦l‡Žv¦[§ŖæUæW‡Žw©^°uŗMĄe‡‡’L’z™š"‡‹‡øhĄĮ^††~‡™?ž»BĮI†~†~ša†~”8§ĄĄH0†}‡j‘@’””””—P˜›ižŸo ,£R£k£n¦9§[Ø Ø-Ø8Ø=ØCØEØFØGØiØpØrØuØwØ©©©©©©.ŖŖL«=­9²|“µ'µvĮV†}†|‡†|³X†{†{‡kŒ"ŒZސ'’{–^–b—T˜cžCŸm”¢&¤^¦P©T«?¬<°H»S¼¼|½<½Yæt†{š~æ†{†zšpŖ3†z‰{¾Ą\†y†y†xŠ:O“”(”C–e–o—d—h˜mš_›5>U Y n”:¬d­F­R®“ µF½{¾c†xŒA¢ ¾z†w†xŽSÆA†tm’F« ®D²z¶j†s؆r†rŒ#”-¬ ¶3†qžt¦4†p†p†n?†m¶ †mT˜a†m†l›§=ØØŖN¶$Ąr†lŽ’^¾_†l™æc †lŽH—„§V°n¶H¶`·Ā=†lš%£)ØUŖG†k‘k‘”] µt†jž(ž2”R“ Ä?ÄA†j‘+§†j—pš$œj†i«N†gŖ0°<¼†fš}†f†e›C¦ †d‡hˆŸ*£5¤aĄ5ĀĀT†V™d³8†V†T¶l†T‡&)†PŠ$Š0ŠJFL5‘_’,’7’?’O“p“|–8–<–W–a˜7˜m˜n˜p˜|™E™yššM›JœxwžŸŸL $ ;«|³W³|¾f¾zĮ2†P”†O†rc‘{‘|”g¢¤W†O‘a †N’\™S›:›hœZ”£p­F¾Z†L”•D»C†IG“pØZ¾l†H†H‹CMšX©Z­¶¶$¶a¶z·B¼ Ą3ĀH†G’T§ §6©Ą5Į_Ā!†GVœ§\Ø“ †FŠGŽ“S l„vØ©{°“ » æ`ĄF†E †EŒ“–ž(„%Æ_²Wµ@½i†B‘`¢B§Āx †@Œjt‘b§§L± »æ\†>””X¢¶WøI¼U7†>†L†w‡G‰Š0‹ ‹‹JJ‘3‘D••<•O— —/šr›aŸŸG  ¢=££1£N¤ ¦§ §§zØŖ«­@®®p°G±²d²w³³wµ=µJ¶G¶p··L½uæĄFĀ&Ā0†>§Cµ]µ^¶W†=‡· †=­<· æ+†=šh­<†=‡P†;œuµxŗ†;ŖaŖz°†;†;Ŗ$Ŗq†;†;Œq’D—K§3·L†:› †:‡[˜Eš9›*›w›zœœXŸCŸG ¢M„®|Æ^²pµ~¶`·]ø=½†7†8†A†A‡‘u›`£c£c„I¦W¦Y¦]¦s§)§IÆD¶¶¶+¶+¶-Ą`†7†7†AØ$¶¶+¶-†6— _Æ+±y²¼¼% †5Œv ,Ø Ø©tŖ*Ŗd“$æ†4øM†4²†4†I™œ#µh†3’,Ÿ †1†1†1¤Yæy†/ˆ&‘P“›DžŸ/  ”o¤6¤?«U­± ø» ¼¼FĮHÅÅ>†/‰jSR øx†/Ÿ4§%»j†.‹°° †-ˆU‹œŸB£„®}²&½_Ā;†+Ž0¾^†+™e·7†*‡q†*ˆ*™i°µ~†)†)¶]†"Žog¢w¾s†"†%‡aސA†"†%ĀpĆP†ŠsLš$¢!£/Øb««!«=Æ µ]·%·&æyĮq† †‡t‹LŽ%’a“6”1Ÿ±±x³j††‹ (=‘;˜6™2šJ›n”¦0§ØW©²¶{»HĮs††²1††-‹—U™šV›(›Hœ> 8” ”S§h¬lÆ+ø,Į††„†“&¼ †¾ †’_”¬n­®1¼1¼<½[¾9Įd†’’–_–a™`ž?Ÿ#¦q¦q¦rŗ1ŗ2ŗn† †A„7®*·Z¼Aæ+æ6Ā9†‘•$††ĄK ††G‡Š <‘E¦«a°Hæ@†‹$’„=½† † ‡‡<wZ|‘N•T˜A™ ››Oµmµq¶¶J·N¼æMĀ>† ”x˜/˜W™zš0›”XØ&«7¬r­E²²µ)µ*µc¶Cŗh† ’ Ø †† ’“JšŸ<¢$¢%£¦^Ą$†††­<† †ša›J›e›sœhžx¤X¦­.¼,¼I†•~œ=„D¦|§z¶\†’ •šmŖI¬v»\†Ŗ7ÄnÅ;†»>†­H…‡M\’ “/”œŸl„J„V„t§/§cØX©)©5Ŗ5®1®cÆP°D¾iĀ0Ā; …‰l’a“4›`¢¦~§RŖx²g·%Įi…}‡…}Žr”x¬t³…}§t…|…|…|A“p•vŸŸBŸSŸo£¬+µqµs¼\æk…{Œ Œs¹…{ŠZ‹‹t”1œQŸvŸw  £³`øøB½]ĄZ…y£`§§U…x‡^šu„8 …x† Œ,›+›fœ>«7«q­AÆ3µjĀ1…w†‹’F•C™{ø7…w‡^™»…u‡‹2‹qŒ'Œ;Ž^Ž_—š[š[ša›q”3”P”§h¬®“>µ<µZ¶æ B…u…u†*†S‡‡8ˆ>ˆ_ˆbˆvŠ‹ŒrBHp‘‘’n’x“#“$“@”t•o———˜0˜8™I™[™mœNg”;”@”F¢¢¢¢#¢`£««"¬;®®³µKµOø?ømŗŗP»¼¼2ææ.æ7æ^Ąt …t‡Zˆ9’K”"•/•K•[•b—4š7špSŸtŸt¢¤©d¬E¬y­® ²=¶;ø¼¼^¼w½(ĄĀ<…sŗ…s®…q—OšœXŸe¤T¤~ØY©E©iŖ¬¬=¬\±+¶ĮĮEĀ…q›j¦Į\Ā Ā0…q†x‡’XžD”0¢¦§R¬]Æ8Æ@ÆQ¶!·"»UĄĮWĀ,…q††Š&‹+Ž{K‘:—U›:ž<¢3£b„A„N¦¦S©0©N°»TĀ,…p8Æ' …o†‹!’›E  ¤c©+®ø4Į?Į? …n…o‡(‹Œy?mI’ ’F“}——™™pšTœH£oØ Ø2ÆrÆ{° °¶'¶a·>»W¾Eæ6ĄkĮ?…lŸJÆ6…k…k…kŽx‘Q”z˜Wšy›FŸm„H¦¦e§^ŖŖU­?®F°S±“1¶J¼QĮGĀĀ4…j…i§Į> …iŠ|”"š'ŖH­Gµf¶-·1ø»3…i…i›m£_…i‡‡œj…h›mŸ®…h—T›M£g§­Z…h›œ{” ØO©K…g–2œ=…gˆ³,…gĮK…f§H¾\æ Į…f‰ŒN‘y’›j›kœp¤]„C¦!©6ŖŖ:ŖZ«f®³%·v·wø»@»W¼Eæ ĮJĀĀ…eŽv‘R…e‡A…eÆF…e…d…d W®®»A…dšG…c—z£g¦eĀ"…c¹d…c…bˆC‹OŒ}–D§øz…b…a‹Ÿ…aˆ#™¤SĀ …a…a˜1¢¢0£­k­m­r¾Yæq…a…a­y …`“›t©3²&øĆÄ Ä@…`˜…`‘SŖ…_…d‘v‘v …^‡gŒ"ššžuŸZ 2 r¦{¶ZĄ&…]6ž J¢E­<…]†v‰e©T…\¦<…[‹Œ¦b³WA…[†5‡‡7‡G‡qˆ ˆ+ˆI‰ŒX’ • •9–z——?—V˜R˜S˜y™šUœŸ? ^”r¤/Ø(Ŗ« «­@­H­V®Æ(ÆHÆiÆj° ±o±y²²³ øøLø`¹2¹7»:¼¼%¼A¼U¾¾%¾1ĄkĀĀ…[¹2…[†F‡i“|¦¦L³ ³M…Z‘]‘^Øi³d)…X‹zŽIY_F••+————-™šyœ>ž~”V¢%¢.¢@¢X¤zØ!Ø2©Y©i«««l¬.®p°<³N³X»+»DæææuĀR …WN•^›z«T¬K²y· ¼y …V‰t–z„4ƱF²²Ąo…SĆ5…Sžf¹r…RŽT™\©q…R–j(¼o¼r…Q”)ØKŖ2±Hµ¹b…P‡˜,œ²Uŗn…P…P¦_…Pœq…P…P•M…Ob”yø…OÅ…N’5…NŽ ›qžĀ…N …N‡c‰NŠ1œ$[”x®)Ʋo¼zĄ\…L‡¢*§:¹f …J……†††J‹ŒuŽŽ Ž Ž ŽŽ™ šŸ„N§Z§]§c°°7°8°<°Eæ/ĄĄGĄOĄ]Ąi…J•›|øl…J…I…J…f…mŽy—z˜+›BžfŸd£X¤U¤V„7§2®®Æ@¶!¶!·}·~¹¹:ĮĮLĀ…H®i…H…p”4”§B°\Į^ …C’ œ^žŸz„v°I±±A±Vŗ …>¦…=ˆ…=Š@ŒsŒu0” ”T–_—x˜›:_ž2ž¢D£2¦~Ŗ?¬a­~±&»<»F½æTæ]æbĄYĮA…=‹@˜X›#œ%œ^ŸS¢£{Ø!Øz­O°/°@·_·{…<…<…< t…;…;‡9‡>™™›z®E¾8…9¤ …7‰m“I˜l„ØQÆJ …7ŠŠA‘‘Z’:—}˜lž·r·sĆ},…6…h‡‰Šq‹|Œbސb‘‘’;” ”5dh E ”4”}£9¤§ ©/«.«3¬9ÆZ²³1³F³S“ZµBøEŗŗP»w¼¼:¼YĄ:Ą;G…6†U‡ Š/ŒZŒb’O’Y“ ˜Cš šCš]šn›8›^›q›}2\žTžUŸ Ÿ#Ÿ]Ÿ s”!”4”6”Q¢ ££ ££Ø7©]ŖQ¬g­r­|­®.®.®p°°j°r³“9“;“<“=“E“o¶¶G·I·s»8»U½½UæXĄ]ĄbĄrĮs…5‘x¤!…1“J½½o …0’Vš›nx§6¬*¬*±?±@¹Ą=…0°/….….…,=­…,….…1†T‰Šm™[œN©2²[³@³Cµ·$Ą…+‡xŠ;&Ž”0•Z˜J”R”¢_¢w£/¤«Y¬ ¬­°i±,±@±d““EµLø)¼¼WĄĄ@…+…6‡9‡R…+††F•˜<™C™y- ­'®°3ĮP …+†|—®Z³W¶K· ·L»½Fæ?æ@æc…&ŠŠ}‘ ‘'‘<‘<””Ʋ ·SŗdĄD…&eŽw‘’#“h•=•U— œœs„„[««ÆÆ&°M² ²,³^µ~»X½_…&Žw‘’#“h•=— œœs„„[««Æ&»X½_…&‰}Žb"“h•=˜|žb w£?„ØØ7Øn®~°&²W½_…&ˆT’#”””#•=›œE¦««<²²\µ>µBµKµUµUøE»q¼2¾¾¾"¾=Į,Į:…&…wŠ?£?¦©S²+µBøV¼4½\¾Ą|ĀwĆ'…&‰^‹Ž!’•N— šœ¤ŖL«¬Æ ÆY¶¶¶zøGøpĄ…%‰]…%‰TSd“$”#µ{…%…X…z†N‡"‡%‡M‡dˆ>‰ ‰‰‰?‰@‰RŠ/BGGL`ŽŽmE\w_‘‘“ ““@“v””” ”Q”R•••E•`—˜8˜D˜Q™P™d\hjŸ Ÿ Ÿ8Ÿ` . K N _ v |”4££ ¤ ¤T«"«2«s«y¬P¬T¬­­®®n®p°"°#°'°i±±1±2±9±W±_²²²³@³C³]“nµµµ9µ<µTµ\·7ŗ»"»%»&»G¼1¼Y¼}½ ½o¾3æ_Ą]ĄtĮĮĮÄm…%‰?‰?‰TŠq 7Ž&Ž&‘B“!“h“k” •xŸ?¢f£«?³…%…3Øg…#Œy˜y®4…#ØIØI“U …#‹;–›ØJ®wƶ¼\ …!…kŠ+žĆ5Ć6Ć8ÄyÄÄÅÅ*…!… —n … ‰‘.“V”6}²WµF·n½iæ Ā&……1…‹D–˜R„e«Eæ ……s…s‰(Šr”H >¬ ±ø&¼ĄG…Š ’q“M–_—o™\›TžhŸx”¤R¦­%±:³D·2ŗ/»C»e¼:¼JæĄVĮĀ… …ŸlŸ}”v”w„@„s¾zĮ^…b”p…‘”3¤fĆÅ,Å/……¬l¼.¾o …‰8“+›#œ®\²µ|ø/ŗ=Į$…‹8Œ,m’z“z™›3›x£)¤y­"® ®%Ækµµ@µ~¼\½L…… …“0“2˜5¤r¤w¦N©n¹7¼~… ‡=‡EˆD… Ø~ÆMÆ`… … … h8’$’Q’|“c›yœ£?¤6„„«&­®8®E®SÆ'Æ,°a±t²l²y³dµbµx¶v¹K… ‡<ˆI‰VŽ-’K’k•E— š4šXœH£t„&„3Ø6­2®²|Ą!… … …ސxšI¢ ¢KØ:­v®®Ąd…¦ …‹!{¤R¤g¦ Ø%Ŗ ­:®h°°°L°u³h¾jĄ3Ā'Ā)…‹!¤H¦¬!²1ø5Į?…•}šfœxuv¦q©0%………n†_†_†v†}‡ ‡‡‡‡‡dˆ‹Œc‘k“{Ÿb¤R©cŖ!«q­XÆ/ø5»JĄ4Ą:Ą;Ą<ĮIĮ[Į]Į]Į_ĀS…ˆ{…»j…©b:…… …*…w††>†f‡j‹ŒgŽHZ’G’_’j“p”•••T•n——'™™j™{š9šh›4œ?EŸi”I¢N£oŖŖ*ŖV¬N¬­4®#Æ,ÆT°f² ³%µ¶Q·^ø~¹$¾9Ą!ĮVĮ~…†>‡i’›bœu¤X§3§`Ø ØŖV­:®»W½UĀ…µµwĀ…†=’س$»a…–~Ŗ Ŗ$…†hI—;ž{¾c „ˆzŒ'“ ”“Yŗ„}„}ŠŠM1K67:¤R„*¬¬¬U®®W²Z“ “C“~“~æ>„|“T””b¢±G„|Œ}“™A™sĄ„{Œ ±³A„z§Z«G°1³0µ„zøø"ŗMĀ5„x†Q‹Œx}”VBĀ8„w„wˆ>Žk‘“/”–››Qœ œs¤§tØØ9ØcŖh®1ÆO±xµBµe¶^· ¹¾iæ„w„|‡W„wŒqBE™tš {Ÿ ŸT q¢N°6°;æ0Ą„v——4„_„v‘„uŒ.©Z„u‰mŠ-‹™dŸ2 !„„[¦J©S«,«vƵDµGæ ĄuĄ| „u…$ˆw‰/DŽ%³`µ¶j„u„u“"„r»e„q¤ ØE³3„p„p‡RÆ„o ·l „m„o†U–f–p–pšFžV­8¼Į_„lŠ ŠX„im„h…1‰2m±XC„h…†‡‡‡\ˆ'‰d‹Œ\’Q’|“+• •^•_•r––K—›TœœœEžPŸŸLŸr % w¢£G£]¤G¦E¦vØT«"¬5¬o­­E­Y®4®]Æ9°#±±±?²²a²t³'µ]·Kø ø/¹ŗ=¼\¾(æĮ$ĮGĮmĮ~ „h…q‡[ˆ~y’F’j™¢M¤]°g„hŒTŒV™™. „gŽ,•™š}›|§/Æ,µf½„g1°V»n „g†ˆ Œ,1’P“•—„§»n„g«P„g…{Œqy¦d„f„f› ¼„eØ„e†/Ž9E’-˜4Ÿ4««QÆ)µ½:æĄ{ĮĮĮ0„`Œ˜s¤Į „`ˆZ  •A™xš›W©„`ŒxZ——/½c„_„_„3Æ`°„_ˆrb„MÆiÅ, „_›  Y””_¤f¬IøFæo„^%‘yžR®$®>°±„^‡7ˆo‰y‹:’“:•K™ ™~› £&£v¤9¤N¦©j«6°a²@¶z· ½l¾*ĀQ„X‡8‡<<AT’.”n• •9—?šU„4«¶%øLĄ Į+„W“˜.›2žžpŸO„3«K­­²|³;“½pæo„W‹9Œ+K”>—™{œ " ©6¬$­³%³vø~»¼V¾OĮ „WŠŒ“)˜.”9“i¼½„U „U…z…{†††††‡_‘]‘^’M”~••T•~™™=š#š#œzœz”1¢pØi®²¶¶,¶R¹ĮU„UŒw”~—+š 7£.§,®®®)®A®KÆT²µtøFĄX „T…‰P‰R““[”j—Sža”!"„T……e‹\‹mŽSŽTŽi”0•&—L˜'š_›> ”u¢;¢]„P§N«3«dÆE“zµµµS·<ø¾ĮĮAĮh„T„cÅ„S1ž8„Sˆ'‘(œ} 2ŗ ŗb„S…G‹Z*C”P–™D }¢g¤°4°z±²TĆÄ?ÄAÄC„Q8Å$„Q…8…?…@ŠŠ/‹LŒŒY)+Ž B‘5”••c™?™\š š ©t«D¬¬|““~øSøS¼6¼6¼?½ ¾æ2æ{„P‡2›£ĄT„OˆWˆY’—F LŖ²„L‡(“ “ „L‹‹A‘_œF®?°l±^„K†-†S?„K=¢¤ÆU±?±?¼^„JÆ„J‹”=”@£&£v„««<«E®\Æ&ÆU°a²!²?µK½_¾8Į:„Eˆo‹:³k8„EŠŠ&Š+‹G‹b‹d‹ŒŒŒŒ7Œg£:£>£E£H¤¤¤!¤2¤j¤o¤xŖ¬ÆÆ ÆÆÆ°d²C²I²Q²_“o¶ ¶eøB»n¼¼ ¼¼¼½r½x½~½~¾¾ ¾ ¾ĀBĀE„;‡,‡/‡/ˆLˆ]Ž”p•ž)žt ¤i±&³4Ąf„8† ††LŠŠ‹JŒNŽdŽi‘/‘5—U˜2˜4š\ž_ŸI q£d§©Ŗ8Ŗ?ŖW¾Wæ „8Œxm~S’?’~“-•™šX›NEŸ >¤^ØvŖÆ7°Sµ'µ(µ(µ)·gŗQ»%»?¼ ¾Ā„8™s„8¤„7„7ž=„6‹T„5–C°,B„4„5‡2ŠGŠHŠQŠ_ŠjŠmŠn‹E‹OŽ9ŽQŽRŽXŽZŽ[Ž]Žb+`“7–s—;—G—G˜˜˜˜Zšw›T›XkžYž_ž`žkžsžz :§6§i©gŖN“#“>“C“H“s¶··1·2·A·E·yøM¹ŗ#ŗ#ŗ$ŗn»¼d „4œUžV (Øv¼$Ć7ÄQÄSÄzÄÅ! „3‹PY‘žV„„r©¶mĆĆ„3†Y‡EˆIŠ‹BŒ(Œ7ŒS‘ ‘n’!žj F©SŖG¬¬{°'µf¶x· ·z»½0æ`æbĄuĀ`Āb„3Œ(Œ7ŒS§N©„2†w‹p‹t‹w‘/”˜T›„hرM±NÄ„1„t„|ŠxŠ{‹M‹^‹mŒŒ%Œ.ŒKŒg „1ˆ—Lž~¢I„/ÆP%„-…hŽMM”2–™/š,šz   _„¦ §m§sŖL««l«m¬0³³ ³d¶uø øøøC¼ ¼½ ĄĮĮ.Ā7„)„+‹/Ž|”4– šu›?›Oœ\Ÿ\”{¤G¤b«®Y° ²n³X»*Į/„(¢Ŗ@øe„'¦ØW„&„&“©y„&Ø„&„%„%…dˆ>Š ŽtD‘;—m—u˜˜qž9 m„§7ŖŖ;¬·{·|ŗ.Ą_ĮC„$‹ŸzŸ{°9Ą;„#”X¬4„#“;—H n°0³Y¾f „#„X‰l‹8’šw›¬/®I±A¶¶a¾„#– 9øn„#„$žK§„"…O„"Ž Žb„«y„!„ „'„1„O„p„z„|ŠxŠ{‹9‹>‹OŒR7„ … ¾M„Šr„„‹'•˜=›w¢.¦ §®IÆ6²u¶;»P„„7ŖS„…H…o‡‘e’ ’›B›{Ÿ~”£h„?¦Z§B§QŖ%Ŗ8®#ÆB¶T»bĀ+„ŽŽ”³[„ŒD˜ši›U›Vž G„…+ŽŽ£ „°„”œØy„Œv„” §\µv„‡ ‡(ˆ—› S” ¢-„T§\§mØ©©ŖŖDÆg°°µy¶xæcĮ]„„„ „’K”1– ”ÆuĄ!ĆĆDĆDĆR„„Žb¢ §¹ ¹ „…L…O…c(‘l”W—j—u—z˜f˜h™?œ{¦e¦e©æ Ā"„… Ž-˜(˜)œHž£(«WÆ\“xµp¼sĮ-„†lˆ˜/™›œŸ¢.„3¦9Ø Ø0ØrØuØx©ŖŖK«8®Z°ø|ĮY„[’H—¢*Ø „‡n•U™ œs®wÆH²/¶9Ą Ą„Pž3 l愉&¾x „‹Q˜Y©ŖÆ(·ø%ŗZ»z¼4¼4„‡‘Jŗ„‰%—S m„ˆ)Œ=Œ@˜›8œRœ^ŸHŸO±»_¼L¼N¾EĄcĮĮ>ĮRĀĆ7„‹4 H»5„„ øeæ3 „ ‰ ›iœ9Ÿl  ²“K¹ŗ0¾YĮa„ ‹#(•›gŸpŸp O¢O¦)«¬o°}±n²<·r»gæx„ ™Sœ2œ5¤b§+©N©^©uŖ«­­.­cÆ;Æj°P°s¶„ ‡“f·wĮ„ ŠE„ …ŒN”|«M„ œ{„ †yˆ.šR­k¼+„ˆ=‰Œ4Œ™œažF¢6¢D¢D¢M„I§ØØŖ0°°f»ĄZ„“m™ĄZ„”/Æ]°³µO»„…c…f…j†e†f†m‡‡ ‡ ‡eˆE‹‹‹ŒUUVWŽyŽyŽy‘N‘a‘g‘g‘t’\“q–y˜››››4›e›e›f›f›i›i›kœsžGžgŸŸkŸoŸz    r u¢¢>£ £V£Y£Y£p¤@¤A¤N¤_„M„U¦¦¦8¦F¦V¦V¦W¦n¦o¦q¦}§§§(§*§=§OØ Ø5ØNØcØqØxØ{©©C©q©z­2­6®Æ/ÆkÆk°°X°]°^· ·|·|» »:»@»`¼Q¼wĄ"ĄYĮĮJĮSĮ_Ā,Ā4Ā7Ć2ĆqÄ|ÅÅÅ„„§}„¤ ¹K„„„„½h#„…l…m‰S<‘f—P˜^œ^ŸO ”#”E¢£C¤9¤M¦¦"§Ø2¬r­'°°°@²O·(·.ø»#½bĆ5„†k‹qŒwæ-„„„a¦~„©9„” –_¦\©0³Eƒƒ’l’mƒ”)·tƒ~†T‡5Šr5™[ž;Įƒ~‡5˜{ ƒ~†i†jŽOŽQŽds‘”W˜Tš?æ> ƒ~…{’“L›9œUXŸK b„ ¬?ƒ}‰G•?£ƒ}„£dƒ|ƒyµƒy”+žŖXæRĀ ĀĀ ƒy„S†I†gŠk‹Lnt–tžžXžg¢R¤W¦4¦K§aØ#©m«_³dµ&·}ĄsĮ1ƒy¦7ØO ƒx‡‹~™;šY„§ Ŗ­P­U»Eƒv¹ƒuŽ{Ø@ŖY“v*ƒu„„W……/ˆ!-HŽŽ Ž_’l“B“E””n”}˜.™B™WŸ# 0 0 9 O¢x«"«3«b«g­~°“iµ ·G·Hŗææ^ĄĄ<ƒt‹J’ l¤ ŗ# ƒs…0‹P _ž  -³:µ%½ƒqƒr‡v”R¼lƒq„K…?R‘t™pšr›S S£4£L¦%¦*¦uŖ|«®|°l“0µ|·v·y¼¼$½jĄaĀ,*ƒq„K…>…z†uŠ(‹ Ž1‘E‘b”˜?™™ ™™pšr›SŸC R”1¢=££4£L„5¦x§<§g©9©R«®9®|°l²$²M·o¼¼$Ćƒq‰a‰e ƒo‡2‘+•*˜+žc”¢S¼d¼hæ1æDƒnƒmƒnŒ%ƒi¢Cƒiƒn†n‡–™A„u¦Æ-±M²a¶'¹¼zæqæqĮ8ƒh‡t'š+¢:«ø/Ā2ƒf˜˜q”ƒdcĀjĀjĀmÅ< ƒd‡i #”1ج¶¾tĄ ƒd…MŠŠ‹uŒkŽ"—x«4“1“Kæ-ƒdƒcƒc‘8š@ƒ`ƒ_¤M¬pƒ_†r‘w“4šA›M} E£q£rŖ»c»cĮ^ƒ^Œzƒ^ƒ]…uˆ)’a•k—'™™/š#” ”Q”\¢«M¬*±[··ƒ]µNƒ\¢7¢Uƒ\(ž8žM”” «|ƒ[ƒW… žaŸ„s§§ŖNƒW‘‘]’”–[ž ~„=§§"§DØ"Ø8©m«°I±;±@Ą/ÄNÄOƒVƒV‡f›D  ­;ƒV™™­;³^ĮVƒU‹Ą" ƒT›C›h  £X®"®_µ'»WƒT„tŠ ŽX ‘“K•@–Kœpž=¢"¤„°C±¼hæĄTƒQˆAˆT‰‹(“/›y@”F£(¬r­Æ°l²zµG¶j·]»i¼4½½bĀ:ĀD ƒM„…' „ ­®[±±ƒL‹(¢.ƒLŽZŽ[­³SĆmĆqƒK†† ‹|‘R›nœ_Ÿc„H„N¦8¦P§§4§>¶R»aĄ\ ƒKY”[˜Zž „¦"§ Ŗ'Ŗ]¾/ƒK††X‡T‹‹F>’•K—˜Z™œœ(Ÿj¢,¢<¦,Ŗ@®lÆ:ÆV°|µ ¹»)»Qæ7ĄƒJ…*†}<‘j’™› 8¤E„ ¦2¦N§^©RŖB°SøJÅ#ƒHŽ"‘Z—vŖZ«n·rƒH‰d ›¦OØ7«mƒHƒH½(ƒGÄTƒF„ƒF‹@³iƒE‘W§H©<² ær ƒEœyŖp¬"¬X®n¶!»TĮmƒE…e‡k c‘s‘s‘t‘z™  <¤b„¦#§C©Ŗ Ŗ Ŗ[±K·x¼½Y¾¾%¾,¾<ƒD¢%»` ƒDƒD‹'‹5‘{‘{¤V„A§D«8·~-ƒCƒc†f‡4‰g‹ ‹zŽv HR!v‘V‘k’’G’W™š/›oœkœvžvŸc¢B§1© ©ŖŖ,ŖdŖl­NÆ;°.¶P·vŗ0¼zĄYĮGĮyĀ ƒCƒC„GƒB…_…x‹%›z§³DƒBƒV†eˆ ™3›/›CŸK¦«i°°° ²$ĄƒBƒB†ƒB†A†A‹m”Fžc©(¶¶¶+¶+¾RĀmĆpĆp ƒA…L†}‘=œ¢:„>ŖŖ}®U#ƒA„†n†|ˆmŒYKŽ Žg’n’x“• —R—d™iŸ-¢h„h­b±²;“U“mµ<¶.ŗŗ*»½ Ą.ĄKĮGƒA‡’nŸ7 Ø@Øm©X«.®j²+µ~ø5¼&ƒ@ˆ,ˆ^ŠG‹‹-!‘%’Q’e“P”&”q–™=šX¤¦L§Ø7©^«m¬S®®!Æ,°+°V²²s“qµmµnµ}¶/øhĀ4ƒ?ƒ@„f…X††:‡P‡tˆH‰ ‰8‹‹‹3a‘F‘`‘j’’}“““P“a”"”K”`•C•g•v–y—˜˜.™K™hEbžž(ž1žnŸ  R ^””V¢¢}„Pø5 ƒ?ƒA‹&\bŸ¢?¦²T·% ƒ?ƒA†s‡‰|‹&›lœo¢„ ¦A°,»Nƒ>…8…@†#‹nŽU‘(•p–A 2”“'“)“-“Vŗ%Įƒ=ƒ|…\†~Œ]Žq.G2¢=¢~¤J¦<ØjŖ#ŖH®(°"±[¶^·pæ ĄiĮHÄÄ ÄÄ= ƒ=†>cŸn¢ £¤B¤J®gµsĄNĮcĮƒ<¦mƒ<ƒ<ƒ:‹&‹d—v®"(ƒ9ƒAƒL…†q‡/‡^ˆ[‹‹gŽt08]‘?‘m‘~“5“zš7œ\wž<Ÿ$Ÿo¢3¤y§5©¬E­X­Y³Ą?ĄDĄSĮvĀRƒ6ƒ5„#ƒ4ƒ3ž­+“` ƒ3ƒw†Uˆ)Ž^ \¢1¢Aæ?ƒ2‘h ƒ2ƒD…;‹!Gž-¢.ŗXŗXƒ2‰>Šr‹>Œl `hŽ _”—œœœižŸ2   _£R£f®®Æ³`Ā)ƒ2ƒ1›ƒ1ƒJ…*††0‡CˆB‘h–›9 5Ŗ.æ?æfæpæ{ĄĄ ƒ1ƒ1ƒ0„r…n‘‘|””+š›Q¤>Ø© ©©=Ŗ)®ÆLør½\Ć5ÄFƒ/ƒ0‰ “M“\–DĄ9ƒ.ƒ-‡Œb˜I ¬K°ƒ*ˆ MR“Z•n—$žBžC”p¦¬(ÆJ±+··PŗTæƒ'’,’/’0’3’3’n’n’x” –{——a—b›tœ-"”¢!“<“g“i“j·QŗDĄKƒ' š^šeMƒ'ƒ'ƒ3ƒiƒz„„c……p†0†d‡U‡hˆˆ*‰].K^ŽO  [‘’n”P”o•_– —-›?œ*œ:ŸŸN K K W””!”c”c¢0¢0¢b¤¤X„R¦4¦Q¦n§sØØ-©2©2Ŗx­­­WÆ=°2°G±U²NµT¶¹¹,»2»O»[¼¼)¾{Ą7'ƒ%„„p…‘’’{“<–B—<œ\ž3ŸRŸo¢E£U¤B¦¦;¦Y§ §§"§SØ««F°9±J¶·søŗ2ŗKŗKæ[Į1Į2Å;ƒ#ƒ$‰v`‘‘4¦Vŗ ƒ#ƒ#£xƒ"ƒ"ƒ"‰qŠf7–µƒ"æ#Įƒ"‹\Œ=‘—G—Gž[ƒ!‰w‘4–S¬ ƒ „… ‡8žžž=¤B«8­%Æ`æĮƒ‰$‰’¦*±Uŗ ƒ©z³eƒƒƒƒ8ĄK ƒ„„%‹,Ž"‘N’–`©r¹4½ƒŠtƒƒƒ.„$‡Ÿ§F©q°$ƒ5ƒ„P…V†6†mˆŠ7Š‹G$O‘“?“E”L•R•\—%—+˜˜ušc›wœ|Pžž¢¢=¢I¢f¤'Ŗ«Z«o«¬¬pÆ Æ(²|³6³sµW¶ ¶2æĆ*Ä.Ä<ÄI ƒƒ†‘~“K¢3„J¬>­Z°@±“ƒƒ…p…q‘Qš@£iŖĄYƒ™7ØKƒƒƒƒƒ „'Œq;šš% y”­?°4µ_¹ æ%Āƒ„p²p“5¼¾¾8ƒ‘2ƒ“6 ƒƒ0‘;’{™%™2™GŖ"ŖX°Lø ÄDÄEƒ¦Uƒµlƒ°µxƒƒœJÆgµeƒƒƒƒƒ—kŖækĮ/ƒš8æiƒ…9‡*b––e¬,·s ƒŗ>ĆĆĆĆĆÄ Ä4Ä6ÄVƒƒƒYƒHƒ…T…Z…y††OŠA‹` ‘F‘T‘k‘x’’d“S”%•E•`–|˜>™™$šd›9›G›M›eœœ=œ_8ož*Ÿu¢O£+£W£Z£n„,¦0¦R¦o§§E§~©H©lŖ2«r¬#­8­;­?®®oÆ-µaµn·$·oø2»»3»L¾\æ?Į ĮlĀƒšIƒØdĀƒŠ=Ŗ ƒæƒƒƒƒ¼ƒ„‡z‡|Š8 ĆÄ*ƒ“Y”l© Āpƒ—sƒ µ¹Xƒ #ƒ ƒƒw„„„†b†d†f†gˆQŒ G6’e’e’f“n”Y—!—Mš/œ|wxž!žWŸ4Ÿ:£«±G³e¼?Ą*ƒ ƒ ’ƒ «g¬ƒ „ „x†lˆc‰^&?‘,“x B„C§¬­[­mÆ Æ±·bø¹¹ƒ ƒ Œ0Œ1Œ3ƒ $ƒ ƒt„ †`ˆ‰p‹@‹M'‘‘:‘g——^›œœ%£„„(¦?¦n§§®S®a±q²)³-µfµs¶i»p¾h¾|æƒ ‹U•t–X¬%“·ŗN ƒ ††-“D”˜0£§ŖH±+øeƒ ‰t|¦0§Pƒ ƒ„/‡E“&­/惉#‹^‹tŒeŽ$”H• •n˜h Y”6”N”e£8­}³_³y“i¹¼ ¾ƒƒ$…J†‘F‘M–c™.œ|žpž{¢t¢u¢w¤N¤g«R¬Z±/µ0·ŗŗ(¾b ƒŠ Ža‘&f¬Næ)æMĄ>ƒˆ%‹ŒŒkY›jžNžO£W°øø »cƒƒƒ ƒƒ“v”}š_Ŗm·»G»oƒ†Cˆ‰lŒ4Y–X—$oŸ”¢¢(„q¦\§I©r±K¼l¾ƒ‚}‚}§"ØØ%Ø=µ.‚zˆLˆPžz‚zŠ ‘6³I‚z:’ ¢§>6‚yƒƒQ†.‰|Š*Š\r’”•V˜<™B™H›wœ!œW!j D” ¢>¢F¢{£z¤„W©WŖ+Ŗ+«^¬­^®*ÆI°N±±q²)³*µ µr¶ ¶i·øX¼0¼~æææwæxĀKĀN‚x“:Ÿ`ŸaÆJ²·z»‚xƒ¦6#‚xƒ7ƒ7…t†m‡‰&Œ1u‘<’e—N—_š/ž!Ÿ1 z¢5¢A¢I©u«g®²³³z¾~æ.æ^ĮÄ+ÅÅ#Å(‚x“D‚w‚x³Pæ>‚w±.‚w‚~‚vŖt¬QÄD‚u‡4–1”w„fŗ0 ‚u’š}›„TØ_®FÆ3¶$»kĄ[‚tØØH°‚t†|š}‚t‚t‚s‚s‚s„‚r¹2‚r‚uœh {”Ā‚r‚uƒv„7…+†*†|ˆ*˜[™"šš›;ž„&®^ưM;‚p‚pƒ'ƒ'…^…^…^…d†y‡2ˆ'‹‹‹DŽs__TT[“D”•A–_›jœž[ž\Ÿl¢ ¢5¤G„?¦¦¦1Ø9«a¬¬4¬<¬X®l®lÆ^°°#°G°L³C·w·xŗ¼r½YææĮy‚o‚l‚lž,ž\ĮU ‚k‚n†M‡8‡bŸ>¢ £¬ ‚kŠ“Ÿ>¤"Øh¬z¹x¾q¾Į Ć]‚kv”•šw¢}¶ ‚hƒ „2†EŒhu+a•%•x—!še¢A¢O¤0¤d®^±±±0±N±P±}±}±³&»½½ Ć"ÄqÅG‚g†‹˜e°6‚g„^„}?°6æ7Ą Ąk‚g‘—'™]Ÿ©{ ‚fˆ_Ž•%–E 0«*«D± ··æP‚f¬¬%°',‚eŠŠŠ#Š1Š8ŠB‹ D’,’,’7’>’E’b’b’f’l’x’x““0“@“R“V“h“p“v”+”0•$•*•@•J•S•Z•t—#Z $¤>„ Ŗ)°3‚b— ‚b\‚a|”£‚a‚a{¦K©D°±¶Ā" ‚_‡Zb›œžnŸ:·½{‚[ƒ!‡”dŗF¼WĄvĮ‚[ŠLŽØ6Ŗ?µµ.‚[ƒ;ƒ;„c…x‡W"T™Sž5žZ„^„u§Z«Y­8°-± “2‚Z‚Z‹b‹f‹f‚Z› ‚Z„ K””yµJ‚Y‚Zƒhƒx˜Ą ‚XŒw‚X–žGžG£L©‚X©J ‚X…!Š“^”Rj¤ «“-»‚W‚W©]¬»PĮ. ‚W…c‡‹™bdž\ŸYŸ[£¦ ‚WO’^—(˜M˜M§eØE®#®-·h»P‚Vˆqš,‚Vžc‚Vƒ Œ œD£(²&½_æS ‚Vœz”£>£l§xØØAŖ[­'°¶ø{‚V‰p‰{ŠŠŠ"Š\‹‹K6A7‘’>“D“L“Z”(”`•k•o¤/©W«a¬)‚U…n‹ŒŒzy‘q”—š››4›i£o¤„„)Ø Ø Ø ØF©ŖŖJŖdŖd®@®nÆk°±D²r³V³X¶l··Kø~»{¾DĀ ‚U‚U³‚UƒG‰LŠ'Œ\“:8žžGŸ@””R¬4­]­]®±L““ŗ»¾dævæy‚U‚Y¦4©L³>øz»q½f‚T‚T ‚Tƒw†Šr‘+–„!¦iÆJ°E¹‚T…)†v“D·_¼w:‚S„2†!†B‡‡J‡J‰ŠH‹*‹+‹4‹5Ž|c‘$‘U””P”Z–c—˜7™3™Xš*tž,ž,ŸŸYŸ[ K¢&¢'¢1„u¦¦hØØOØV©0©cŖ/Ŗ>¬:° °?“¹ ½,¾hæ>ætĄ Ą6Į‚S—˜n³+»‚Q‹$‘n ‚PŠ.™™pœ\iq«¬Q®iµ>Į‚OU‚O‚Qƒ „‡"ˆˆ(‹‹-‹QvŽŽ]5<P“6””~•i–&–D–]–s——@—}˜?˜L˜R˜Y™ ™Pšš]œQœcž Ÿ :¤>¤M¦D§ØC© ©4©]Ŗd«]¬¬%¬.ÆW°²b³³³·(¹7¼f½ ¾TĮ.Ā*ĀDĀHĆĆ:ĆAĆaĆlĆmĆqÄÄÄ)Ä*Ä1ÄJÅ-‚O„%„q…{™¶2æM‚N£h‚M„Hq Ąx‚M‚N¦0‚L—jµ_‚L†5T“••<š|››7œ*¢­®nøKøQĄ ‚K…x‹&“B”„v®D°Dµjµ|·l¼Į}1‚J‚a†3ˆF‰y‹8dŽ%’$”t˜`š*š|œ]\ž ž0žR  x£S„„„[¦O§A§f§nØØ#Ø7±±C¶¶RŗI»»E»X¾¾X¾lĄfĮ:ĀQĀeĆ]Å‚J‚Jƒ —q—rØz‚I –‚I‚I…d¬U· ‚HƒH„kŠ —Qšž¢¬­,½æ&‚G"‚G…#‰m‘f”n”w— ™›VAž-£kØØU©aŖg«®;®]ÆÆ`°°O°|±o±s²%²fµe½xĮQĮ|‚Fƒ„„9„N„k…zˆ!ˆx&’ ”EŸ<”¢R£¦,©UŖ!«x«~¬¬¬j­W®U±.»TĄ‚F„N‚F„T†JŠ/wy’T’\”~–——™=¢ ­.°A°t²+²=²b·g‚F‚F\’Kæi‚EŖY‚E‚E•Ø/“a‚Eƒ@³/‚E‚D›¹$ĀpÄ‚D†SˆrŠ.‘\’Yš$œœBœqŸ. y„¦)Ø4ØV©UŖN®(ÆC°7³Aæ8ĮDĮJĀ+Ā;‚D…h E¢>£z¬9‚Bސ:™>° ¼X‚BƒyÆ]‚B‚A®F/‚?…>…Z†HkAMMSSS’O•N—_˜P™™L™nššNšmT 8«T¬ ¬L¬v­­.­R®M°°s²T³³dµ ¶·B·`ø-¼¼zæEĄ3 ‚>k’.˜[§b§l­S¶{Ą! ‚>™œKŖ°P²Aµµy¶J¾yĮOƒ6‚>‚D‚F‚G‚G‚T‚U‚Y‚^‚b„3„q„r„v„ŠŠ#Š9Š9Š9ŠEŠGŠIŠ\ŠxŠ|Š}Š‹*‹>‹A‹D‹F‹G‹J‹\‹a‹g‹sŒTŒ]ŒhŒuŒxŒxŒz[wz{|ŽŽŽ%Ž*ŽGŽKŽMŽaŽeŽiŽmMVVWYZZ^_  ,/8899:CDLSSTbssx‘‘‘‘ ‘‘‘_’,’2’2’?’D’F’F’G’H’H’O’O’T’V’W’W’X’Y’Y’^’_’a’i’j’k’k’k’k’z’|’|““““,“-“2“2“4“6“@“@“E“K“R“W“m“n“p“v””””””"”'”(”0”}••• ••••••9•@•E•F•G•T•U•V•Z•a•c•i•p•r•s•v•w•–––– – –E–W–b————————— —#—-—/—0—7—7—9—M—P—S—S—T—a˜`˜d˜v™™™™™™™™™ ™&™)™*™=™z™z™{™{™ššššš8š9šMšNšNšTšTšUšVšXšfšhškšp›K›K›L›N›O›T›p›q›q›s›t›|›~œy3QZ[\]knny}žž ž ž žLžOžVžbžsžxŸ ŸŸ7ŸSŸSŸWŸYŸ\ ( / o q t t”/”0£/£4£5£6£F£M„!„.¦h§§}ØØpŖŖŖŖŖŖŖŖŖ(Ŗ*Ŗ*Ŗ+Ŗ+Ŗ,Ŗ-ŖOŖVŖV«B¬+¬,¬-¬-¬B®M°3³-³/³3³>³?³@³A³A³B³T³U³X“““““ “““““&“.“=“U“k“mµ%µ(··.·L·M·N·d·t·tøøøø8ø`øløpøyø}ø~ø¹ ¹.¹bŗŗŗŗ#ŗ;»¼^¼`¼j½U¾¾ ¾d¾g¾g¾h¾j¾l¾l¾p¾p¾u¾u¾{¾}¾}æææ1æ1Ą?ĄsĮĮ4Į7Į7Ā ĀI‚>¶¶DW‚>‚c‚gƒ%„E„K„o… ………%…B…n†[†h†s‡,‡M‡Wˆh‰‰RŠŠŠ Šx‹K‹wŒ ŒŒŒŒ Œ'ŒMŒh$:kŽŽ ŽŽŽ&’4’:’<”W£8¤¤¤¤¤¤¤$¤&¤.¤f¤i¤q¤w¤x„ÆÆY°d“““Zµ µ µO¹ ŗŗŗŗ*ŗ;ŗI»½ ½½ĀB‚=ƒd…m£¾hĄĄ,‚=‚Lƒ „U†{ŠQŒ’^”H•k–`™k›ž7Ÿ¤m¦ Ø"Ø\«[«r¬¬y­K­c­~®o±M³T“2¶Iø¹2»*»6»_æ"ĄEĄMĄcĮĀ&Å%‚=®N¶D‚<„›%«)ø ‚<’f’f˜T™rŖ$·E‚;"©5¬X®ÆAĮG‚;ƒS’æB‚;ƒ!ƒv‹LŽOŽ^Žd’u”˜5œgž8žNŸv©f«!°5³:“Jææ]Ą#Ćk‚8‚8©[ ‚5†‹VŒr”¤\¦h©)·&¹"¼| ‚5„P…+†~‡2” œt „ „>³8³SĀM‚5Š –kÅ.-‚4ƒvƒ„R…l…m†tŠYŒRŽ\ .‘ “–R–S—&—Sš-š-ŸDŸM”"”<««H¬(®)ÆY²!²S²W²b·pø?¹GŗT»#»p¾1¾5Ą:Į‚4‚7’U°j ‚4‚7‚8’›lœm"ži·{»MĀ-Ā-‚3Œq’i™ ™)šM¢ ¢)¢6¤;¦¦.Æ;° µj¶&·oø»R ‚3‘p˜sš›U§d»c»dĄI‚2…_‘oŸc‚2‚3‡‹‹Žv8—˜)™™zš,šhœ*ž1” ¢„6¦7ØNØ}ÆĄLĄlĀS ‚2‹bŽz”Ÿ$Ÿ'Ÿh <¢U¤K¤]‚2œP‚1(‚1†‡e,•^—v›QœOœcb~žž, £h¦¦g¦{§©,©|Ŗ9ŖHŖZ¬B¬ZÆ8±x² ³'¶V·zø ø>»L»V¾¾XĄ&ĮB‚1 ‚/ˆ‰|‰|Œy‘aK¢„U§jŖ « «+ÆÆm³]µBµp¶R»[ĀĀ0Ā:ĀU‚/œ F¼]ĀR‚.‚-ƒK„Q„Q…8…?…B…B…G‹vœjŸzŸ{ P¢£_„o¦IŖ4¬;ĮĮB‚-Ÿ}‚,‚.„6„O…L‡c‡o‹C~‘T’’{“4”+–=–q—A—`—`¤S„t¦]¦h§§}Øf·w»_$‚,‚,ƒx„!ˆŠ'Ž‘&‘U’s•'—8™t›9œ=žž:žPžS # N„xØØoØ}Ŗ5­'®%®T° ±Q³w¼,¼0Ą‚,žF ‚+†Vžž[££{§j«}¬-»‚+„††H‹6‹Z‘9—V™ažf©p°?µŗT‚+‚Kƒ0ƒ:„‡‘‘f–U–U”¢¢4¢Q¼{æ4‚*…Q…R…p‰tŽu•`–kžQ”I”f¢¦Z°!°Y±T±Tµ µ[·ø%»*»3»R»f¼P½XĮĀ*‚)‘ZĀ ‚)ˆ ’i——k™ ™qž ,”J°m±t³»RĀI‚)ˆŒ¤\ØĀ()‚)‚/‚G‚Lƒ8„!‡‡,Š ‹ŽpŽr}‘W“5•W˜M˜Q›g .¢„«,«x¬¬*­V°(°:°B°}³³4¶· øg¾i¾}Į!Ā:Å$0‚(ƒ/ƒL„‡]ˆ‹0Ž}=N)F‘–˜˜ušš ›oœ=œ]uv   .”m¢¤:„r¦+¦C«¬0Æ]°7²o“=“>¶ø#¾dæ æ Ą7ĮR,‚(ƒL„^‡‡‡[ŠDvŽG’#’_”,”O•WšœQœY q¢Z£q¦ ¦:¦:§N§yŖw­'­4®G®f°U±²0²lø »8»U¼[½~æĄ7Ā/$‚(†‰]‹5‘‘’#™sœsZm  w”{”|¦L§ ©5©u«U«W­&®~ÆH°²Z²l²zµJ¶'·?ŗĄĮ0ĀG6‚(‚3„(„J†E‡"‡[ˆˆ ‹‹9b‘^’-“/“b••Vš4šr››*œœBØQ« ¬5¬x­­F­|®®+®S®]Æ1Æi°a°u±x²/²<²f³³ “µ¶ ¶L·Aŗ:¼¼a½%‚'„…W…x‡^‘\‘l’”+–š!›EœhŸJŸ|¦\§§G©AŖ4°:³µ[‚'‚h† ŒtO‘U“6••˜E™*š Ÿ*”¢„5„w¦ ¦ ©X©\®OÆb°M°R±t¶>¶YĮx‚' ‚&„……0†~.žC n³-³>³N‚&‚&³Rµ6‚&ŠK‹‹XŒ&Žc• ˜O”¬ ÆLøy¹¼=¼oæĀH‚&…w•N˜?˜|œ!ŸC¤„5«/®j®~ÆÆ°M±x²+²?µ¶qŗ¾<‚&ƒ…wŽaœ!ÆÆ±²?µ/µ/ŗæfĄ4‚%Œ ˜©n‚$‚$¹`‚$ŠFŽ³9¼f¼u¾O‚$‚#ƒy‰zŠ“)–™H›#”bØ@Øg««L­P®f®wưvµc·Į+‚#ŽwŽ|XX”––y— ™M™TŸ £„¦2©Æ ²\³³>ŗ ŗNĄuĮ-ĀT‚#…c‚#—= ~ŗĄĄ7‚"…R‰aŽd“““žq¦1©]©n©n©x¬¬°(µ ‚"ƒ „Žx’’’–jœ{ž<Ÿ}Ā ‚"ƒjŠ=• ŸZ¤¤&¤Y„8¬`­ø2Į‚"‘4‘5‘6¢¤ „G‚!‚^‚eƒ„"Š(ŠH‹X”W”[”[—y›rŸR '£©s©t°±6³i½ ½tæææææ0æ_Į3‚!‚=‚M‚S‚Y‚^E‚!‚=‚M‚S‚Y‚^„1„tŠ‹C‹M‹^‹mŒŒ%Œ.ŒKŒgtŽ Ž$Ž'E•žRžS .£E„ŖŖ*«A¬+°:³³*³Q³V³]³h³r³v³y³}“““&“-“;“@“B“E“U“\“c“m“n“w“z“}µµµT¹ŗŗtĮ‚!²¶1¶1‚!†M†y‰iŠ)‹ ‘“3”1•_––b«®t®t°=±æ ‚ Š)Š=‹#›\ ~„x§7Ø6ØY¾aĀ‚„E…'ˆyž ¢¤¤¤u¦O§Ŗn¬_°pµ0µX¼Q¼a½y ‚†’!›œŸN¢P£&„„1¦·l‚±v¼!¾‚ƒ_ƒd„ ‡q”"•D—N™i{ # O¦RØ#©©/°3±v¶L»:»X¾¾p¾tĄĄ ĄĀT‚‡1Š‹Ž Tv“,“D”E•N >¢«C«t¬1® ®7¹!½ÅHL‚‚)‚P……}††K‡‡`‡pŒRŒ|WŽx<’a“““3”••R•`–– —˜B˜P™$œ-œBœdœgœ~Ÿ!Ÿ`””>”s¢7¢<¢l££z¤r¤}„'§G§|Ŗ8¬Y­?­D®D®TÆ?°i±v²²c³³'µf¶?·$øøL¼%¾¾1Į>ĀĀĀ)‚–yØn©ŗj¼Q‚§Ŗ‚ƒH‘]’}—Ø]»z%‚†y‡)‰]Š_‘‘’’#“3•˜DšvœZžTžXžX @ @ B w£f§ÆÆ²Z“sµJŗ¾¾æĮaĀ%Ā3‚‚°²,¶|‚˜/œ,Ø‚£4ØjØ©©© ‚™k¤C¤m„ ­øøKĀQ‚,‚„‡‡*‹pŽ0@‘D‘v‘~“7•™™ ™B››=¤,„4„Y¬5­®3®L®l®}ÆÆ1Æ\°°N³µ ¶¶8··A»¾HæhælĮ<Įv‚"‚„…;††ŒqŽv"”y•–Rš››{œ*§3§q©¬­®2®nÆ3±³D¶»S»\»z¼R¾Ą!Ąs‚‡®P‚…7†J—™}”§?®)µt¶J·løK‚‚E‡ ‡ §=Ø ‚¶‚›D‚‚n†>‰4Š^ŒhŽ h’F••i——/œ5”%¢_«6®®O¶¶l¶y¹b»6¼?½+¾GĄ ‚œ_¢~‚Œ ĆkĆzÄ6ÄAÄJ‚‚Ä*‚— ‚…‡@ˆ@•ØØ,Øc©®G‚…/æM ‚…/‡f™šœ]œe¢¢,³ ½( ‚‡Iˆt›$›7œ@œT­ĀU‚‚B‚l‚©‚›§^ ‚—f ­K­cÆ1°“5¾‚…‡#)Ž ‘+’_šš,Ÿj£Ŗ«1¬ÆO°(½(‚‚Nƒ}…Q†%‹‹wŒ ŽŽ'‘'—4Ÿt w”~¢'¢f¢o£T¤'¤W„ „,„p¦©OŖ3­O­Z®[°"³!·V»<¼Aæ3ĮĮxĮyĀ ‚ °M¶p‚ ‚TžKŖ"·M¼¾] ‚ …Z†@ˆŠ6Œ.Œj–ž[¬_æo‚ Š‚ D‚‚,ƒEƒ_ƒx„…G…i†7†8†A†B‡kˆ‹‹)c‘^‘m‘s‘s‘t‘y‘z’X˜pšš+›P›]œaœb%ŸN ¢£s¤7¤R¦¦)§I§XØŖf¬F¬H¬L¬`­+­t¶¶¶+¶,¶,¶R·#øĄĄ#Ą&Ą(Ą2ĮiĀĀ4)‚…S…|ŠkŽ}’Q“4—"—(™c™{›[œLŸcŸ~ ”g”¢¢6££¤7¤t©6©O©_Ŗ#«g¬Z®T®gµb¶·!ŗ2»PĄ4Ą9Įe ‚’u–šd ”g¢C¢I¦7Ø8µ‚žF¢F‚‡=‡Gˆ=ˆF›Bœ9œaŸh  £Y£m£s¤O¤\¦Ŗ­5­^­®"²o²s/‚‚{…=…u†ˆ ˆz‰>ŠŠOŒŒRbŽD;:‘#’˜RœœKž<Ÿ2””-”_”`”w¤¤5«®Y°m²A³*³/³>³]µŗ »&¼:æ1æ@ĄĄ7Ąy ‚†‹+‘c‘“S ¢„:­YĄ>Įd‚X e¼8½½o‚‚ƒ5„l ‚†ˆ&Ž_kmšš!›!›C›hœ9œlŸi£X¤A¤O¦§o©/©EŖMŖVŖp¬[®&®U··^ĄgĮiĀ ‚ŒDž¢£9£<°µ>ø ¼=F‚‚'‚s„4…†(‡,Š2Š4‹&‹bŒ]bŽŽ+<’-“s“|• –|—fšv››"›/-žž| - c”J¢¢¢@¢]£s¤„\¦Ø0ŖF¬_¬s­7®~ưO°m²/²=³"³]·$ø>øUøz¹¹ ¼f½ ½L½u¾¾ ¾<æ9ĄĮ}~‹ (}ƒJƒ[…G†_‰/‰`‹)Ž5Ž9Ž:i’c’m–kš>š?š?ša›KŸŸ q¦*¦_¬ ¬ ³F³G³|““<“=¶Xŗæ+ĄĮĮVÄgc}‚-‚S‚bˆ)ŠŠ0Š7Š>ŠEŒ Žm v)L’V’f”—3—4—6—6˜S˜u›5œœtœwPSTUU\žNžWž`ŸM    $ (”*”:”B”h¢¢¢:¢;¢X¢t¢u£u¤P„-¦K¬¬R­F®*®3®<®SÆ ÆÆ°)²l“Hµ>µ>µBµDµG¶·oø ø%»2»5»I¼9½(¾¾\ææ9æuæ|æĄDĄoĮ,ĀĀ r‰o›¤sØs¬Y­2·H»xrˆŒ|‘“²r„‰1“2¢(¤rĆ0Ć2'r‚‚‚‚ ƒ-ƒq„J… …5…W‡!‡T‡~ˆˆ.ˆL‰‰V‹3–M—v˜=˜l””9”J¢¢¢P¢{£Øf«1«K¬n­4Ā1Ā2p‰$“L•a—D—Fž0ž2žS¢¬­ĄĄXpŒ,Ko‚Gƒ=…X…|†‡`ˆe‰‰‰ ‹‹NŒxQ‘‘‘_‘c’u”””r•>•S—š›Gœ,œL$ŸŸ?ŸIŸOŸk :”V”c£9£m„8„[„y¦x§FØz««l«¬E®(®t®uÆ+°"°&±J±S²n³³Oµ=øø`øc»»=»N½m½~ĮĀĆĆ9*o‚oƒ|†6‡8‡RˆŠŒŒBiI“••t–@—;˜šO›xœ5Ÿ  +£¤5„h«W­b® ±{²;²h³M³v“Nµ·:ŗ(¼^½Ąl=n‚‚‚3‚f„r…$…M…b…o†K†K†P‡‡‡‹)ŒkŽ ŽŽ$!“ “n”U–j—_˜5œAœd9~žzŸ!  &”¢6££+¤'¤5§ ©=©H­?²E²³s“Eµn¶?øm¹S¼0½Ą#Ąfn‘l“?“@“B“V“V”˜dž<¤Q§§,«*®jæ=Ā(n”;®j¶½lnƒrŽ@·(·Tŗ6Ągn‚ ‚%‚NƒQƒr…>‡ ‡‡Cˆ]Š)ŠGŠJŠe‹wŽŽ Ž0Ž@ŽpŽrW •• •%•=•Q•y– — —˜?šbšw››"›0œ!œ#œNœzžBžŸŸj K””!¢=£4¤S„„4„V¦y§§~©2©9©X©g©r«¬>¬o®|ÆT°°;±±x²?³ ³C³J³g“E¶ ¶G¶M¶u·(·T·e·oøJŗ5»»i»w¼¼$½iæ8æMæ^ĄĀ=ĀKĀMlZ:l‚‚$‚t…o†I‡(ˆwŠ‹!Œx‘_”x— ™šM›››i_w <¦"¦§-§CØ!Ø`©©!©;ŖŖ\Ŗ`¬I®®^Æl°²M²N³Yµ)¶b·ø}»+½U¾¾D¾_ææ7ækĄ ĄvĮ?ĮPlš›4¢+„}¦ø ĮSk› ®| k„J†k“y˜V›.›fŸnÆ<²m¼½ckkŖ@k†Fœ °k†SjƒQ†Y‹@™qµ jæjj„…M‹-‘,“7šxœ`ž`¦@¦[©d¬Æ7³»c¾j?i‚!„L†3ˆs‰=ŠIŒsŽ Ž~+“y”•G•V•v— —™*™q™s™uš<šu›"›$œ(œx 7 8¢)„%„1§y©WŖ0« «G­®8®K®P®wÆÆ`°M±q²*³³gµ µs¶¶C¶vø»(¼¼aĮ%ĀĀ=@i‚ ƒ.ƒF„}…S‡(ˆ;ˆrˆs‰k‰|ŽŽZŽc)T‘“/”t•˜9™`™n2¢££0¤„%§tØ,Ø,ØJŖRŖY®jÆÆÆV° °}±x²A³NµJµk¶M¶r··@·Kø¹»o¼ ¾"¾S¾iæ-Į-Į[Ā9Ā@i‚h„H…†Xˆ ‰R   “•˜[™t”N®N“7“v¾k¾xæ\_i‚rƒf„H„`…)††X‡%‡F‡sˆ ˆ ˆJˆc‰‰F‹>‹XŒŒ+Œ`?a’7’b““V“e“s”8”b••1•g– — —d˜ ˜˜.™h™šš<šV-bž  > b”9”u¢¢}£J„^«P¬¬O¬c¬x­R­y³%³r“ “-“5“@“U“mµ·Gø'ø:ø^øa¹.¹:¹bŗŗ-ŗP¼¼y½¾¾C¾tæ[Ąchfhh‡:Ŗ%¬)fh‚ ‚N‚XƒRŽ>‘6’I• — —™?™R™Zš>œ8žž+ž:Ÿ 1”=¢k£B£o„„=Ŗ|­N®B±E±P³³|¾fæUĮmfeƒƒm•–B—M—V™™¬­g±1±GøCŗ@ŗBd„$…I–l©u¹=¹?d†KŠ;d„„–9™¬D³Qcprž ž³.³;³A³X““ “=øy¾}1c‚‚‚:‚:‚H„w…\…_†"†&†(ˆŠ#‹\5u“•y–(˜˜mžQžuŸ7 3¤¦ ©F©o««A«e«e«r¬R¬R¬{­i±F³T³r“µ.¹4¹bŗ æ_Ā b„XŽu•bŖ Ŗ&¬#¬#¬2½#b‰¹ a‚rƒfˆ<’>““>“>š.·2¹æ'_(_‚‚+‚~ƒ3ƒ?ƒA†‡a‹&‹xŒcŽ\C‘’•:–r—u™T›V›`ŸŸM”£2¦_©}ŖŖ6®c±Jŗ0»!»F»L»^æ2Ā +_„8ˆ^‰R‹s‹}ŒYp”R•••!•%—O™RšFšm›@›Ež? ”K¢¢ «]­­Z²;“R“XµJ¹&¼+¼W¼y½)½J¾5æ_æyĄ9Ąbā^ƒ-†oŽn‘c“g”.ž8”B¢0¦¦ ¦x©4©HŖ «g±]³D“XĄKĀ ^])]k‚ ‚*‚Vƒ@ƒ„&„_…8‡‡A‡I‡MˆAˆHˆ^ˆs‰‰8‰=‰^‰zŒ ŒCŒMŒbŒvŒz0bŽSŽTŽ`>v (‘O’’?’H“?“@“B“V“W””•L•r———g˜=˜B˜U˜Y™3™G™x™{™š› ›$›M›h›s›}›}œœxsž žSžZžbŸŸEŸg  N ^”%”S”X”_”f”r¢¢¢-¢N£)£E£L£u„4„t§Ø+Ø5©ŖŖQŖQ« «C¬¬ ¬o¬r­b®!®9®>®E®MÆÆLÆPÆUÆ`Æi°°°°°°!±p±q±u² ²*²|³ ³6µµ7µoµs¶¶3¶G¶`···s·s¹¼A¾.¾xæ9ædælĄbĄrĮ+Į<ĮXĮXĮf]]‚DĮƒ/]^^__‚>‚A‚D‚F‚G‚T‚Z‚a‚c„1„2„4„5„P„x„z„}ŠŠŠ$Š/Š0Š0ŠEŠFŠFŠGŠIŠ\ŠhŠjŠj‹P‹Q‹S‹\‹tŒXŒ`Œewwxz{{}Ž,ŽIŽOŽaIVXX\]+,-79>CDDFRSUhikqrr‘‘ ‘ ‘‘‘‘‘’/’3’7’E’I’V’V’W’X’_’a’b““““ ““)“,“-“2“3“3“5“7“9“[“e“k“m”””””””””=”C”C”H”b”n”}”•••••• ••••••%•1•9•9•?•@•J•[•^•_•`•e•i•s•t••––––––– – – – –@–@–A———————— —"—4—7—8˜1˜`˜a˜c˜d˜e˜e˜q˜r˜s™™™™™™™™!™%™(™(™*™*™+™2™=™>™?™H™I™R™R™S™S™T™]™^™^™_™_™e™~™ššššš7š7š8šMšOšTšUšXšYšfšp›L›L›S›Y›q›sœi3YZZ[]`effjxy{|žžž ž žSžUžVžXŸŸŸŸ Ÿ Ÿ ŸŸŸŸŸŸŸRŸTŸTŸUŸUŸVŸWŸX ( ( / 2 f o p p q q r r s”*”,”-”.£8£L£M£N©©Ŗ,Ŗ.¬A®K®L®L®M³,³.³/³1³3³4³4³5³>³B³h³|³}“““““““““““ “<“v“v“wµµµµµµ%µ&µ*µ,µ.·E·L·_·d·e·gøøøPøZø`øaøhøm¹¹,¹?¹A¹b¹b¹jŗŗŗŗŗ;ŗMŗ^ŗt»»¼I¼l½ ½(½)½6½M½Q½U¾¾c¾f¾i¾j¾t¾u¾{¾}ĄsĄtĮĮĮĮĮ3Į4Į6Į6Į7Į8\ƒ ƒ+‘:—\˜œ_ y”oØf«+°7²M³>³w»A¾||\c‚‚,‚<‚{ƒn„ „6„;„T„„…#…8…?ˆˆˆk‰=ŠŠ4ŠBŒŒ7ŒQŒVŒY)+UŽ[Ž]0M‘+’’’5’<“#“+“;“B“Y”””^•i—˜˜™^œ(dž žAŸLŸO 7””J¢R¢Z¢r£.¤W„\¦¦:©S©n©sŖ« «C«F«r®}®~°V°^°m±²N³+³?“““#“-“Wµ%µ(µ7µ=¶Y¶[·EŗT»v¼6¼=¼i¼l½½ ½&ææ1æ<æDæfĄĄ!Ą8Į#Į5Į5ĀĀw \km˜U˜b­LÆ^³W¼ Ą \ƒ ‰j“K“e“g•)–H–J–KšN”M”Q¦L«3«4“0æĄ0[Ø©WŖ¬.¬.[†Qˆ[ –6–Q—œ:ž5”`£«F¬CĄ<M[\h‚X†!†_‡Lˆ\‰T‰m‰tŠeŠj‹‹Q‹u‹{ŒkŽC &‘$‘,‘8’’<’s“H“M“]”9”Pœžfžk  M m”x¢¤¦¦ ¦3Ø}©b©f«>«[«{¬B®p°6³-³6³B“ “¶H¶Vŗ»2»v¼e¾yææ4æ\ĮDĮMĮhĆĆ6ÅA)[‚O‚Q„#…L‡"‡oU<‘”””~•N•i–z—˜Yš]¢¦1Øj©]­y°±² ³³¶6¶W·qŗ/»@»UĄ(ĮJĀDĀHÄ [• Ø<ØK©VŖU«u¬¹Zj„w‡(Ž`Ž}[”5—™nšM›t” ”¦,§e®°8°<²d¶9¾Y¾kĮ Zˆw‰)Wf“<hpŸ8“nZ‚µ6ZZ„?„A…$‘”P˜T™;žD£­r“q¾ÅYˆ.ˆC‰k—v˜pž¢¢~¤/„ ÆA±<±F²8µIµI¼d Yƒ]ŠŠabAD˜ ™^¬ “VYY\p–a—&—8™]œi35„Ŗ(ŖUŖm¬¬A³-“>“Yµ2æ0XŽdXˆ<ˆ[ŽŽ:D:<“e”r–x™M™ZœWAž<©o®°6“g¹¾¾XĄdĆZāXƒ(Æb½vXX^ƒ„}†n‡1ŽŽ‘;“"•!–Z–\—S—S—V˜e›cžiži§W­¶P¼<½,½SĀ Ć;WŠ)’]“]–-–Y–Y–\–`–r—3—=—Q˜>˜u1Ŗ#ŖOWaŠF’%”•\–––0–0–1ž«A³/³?“J“K“L“Zµ,ŗ ½t¾{æ2#W‚fƒ>…`‰D)xŽT‘B’;”=”@”A”O•x–E—<—V˜ažOžx””©/¬Æ°±P³µGµI¶0¼|æ Wƒ„‘o•~¦[¬ ¼Q¼zæGĄ> T‚y’K’K••–*šdž$¢?¢x¤` S…‡U‰™LžDŸ: {±#Sƒƒ ƒ†"ˆŠŠbŽ'*W“ “g•/•p–—+™\šOqžŸ*”k«¼8¼W½½o¾{ææsæS„ „ „ ‡2‹  XšFžNžUžvŸŸR£§Ø.°°ŗ-Ą0 SˆA‰wŠ “H T©w«mÆJ°/“zKR‚H‚u„ …l…m†4†@†k‰jŒŒ\Œ`Œj3Ž&q‘7‘7‘T“H•&––0™Tš@››K›Lž-žd S l”£k„f§&§3§a§xØØØ6Ø>ØDØJØ[©*©H©m« ¬­M®,°&°/³T³^“S“zµ5¶¹Z¹\ŗ1»d¼!½#¾ærærĄrĀ:RsŸ!`Re‚c‚p„x…t††oˆˆx‰‰&‹N‹x‹Ž*Ž>ŽGŽRŽR‘A‘v’t““!“?“\“b””9”;”H•–/–T–`—#—4—=™!™+™9š$šG›[011GTž (” ”:¢„„e„p«#«U«u¬;¬d¬l¬x® ®®³5“ µWø!øf¹6¹Iŗ-ŗ;»w½½¾¾¾\¾s¾~ææEæLæOæ`ĄmĮ%Ā RˆŠ=Ž*‘=G±,µW»w½æ`R¦(æ2æ2æt Qˆ'‰?‹”¤_¬!µ]·yŗ½.ĄWQo‚=„2†0ˆF‰v ?e}Ž$,,a’!’?’s“ “!”” ”S”q”s•&•+˜}™Kš*šmœd)02PžSža R ^ y”_”a”f”k£E¤„W„`§««¬|­b®+®HÆNÆU°<°~± ±²8³ “{µ¶6··(øøø øF¼@½½e¾C¾H¾Yæ æ ĄĄlĮĮĮ P‰k”o©LÆZ³w¼Y½`½f¾Qæ PĄYO†yO‚hƒ ƒ…M…S…b…e††*†S‡‡‡‡ˆv‰Šn‹‹"ŒDŒE'<7:<‘‘’’’’5’:’E“$”=”r”t•j–m———=—G˜˜˜˜˜ ˜!˜0˜8˜:™I™[™mœnœ|œ}$žž4ž6ž6ž6ž=žj”S¢¢¢¢¢D¦x¦y§ §§>§zØ©|­y®®®®®³³}“C“DµO·v·}¹I¹\ŗŗnŗwŗ|»»¼2¼:¼@¼Iææ.æTæ^Ą(ĄFĄ`ĄcĄtĮLĮLĀ Å&O„R††_‹‹ U˜nš?Ÿ#Ÿ%¢.¤z§>Ŗ:«q­9¹O„‡M‡w‰‹ Œ3—I—pžk„L§"µ7ŗ NpN„„ˆP‰$‹6Œ)zŽŽ<Ž@VVsst’’8’H’b’c’c’c’f’f’q”””'”I”R”T”V”\”o•!•!•-•/•1•o–V——&—O—[˜˜7˜m™:™W™Wšš&š&š&š-š2š5š=šBšGš\š^šašj›K›\›q›|œjuvž>ž@ž@žvž}ŸUŸUŸ[Ÿ~ r” £`£a£d¤TŖp«]° ³5³r³w³y“C“H“j·1¹nŗ%ŗ%ŗ&ŗ*¼j¼y½&Į3N„&˜Fš'Ŗo»lĮKM‚Z‚[ƒ<ƒfƒg„_„a…|††† †>†M‡"‡)‡b‡c‡c‡pˆˆ#ˆ>ˆ~‰8‰V‰rŠŠXŠ|‹V‹{ŒŒ#Œb%rŽŽŽŽŽ\Žu"UUabcin‘S‘T‘a’R““_””.”.”V•<•E––t—o˜˜˜!˜D˜M˜N˜X˜Z˜d˜e˜e˜r˜s™"šš,š9›››››GœœuAžžBžDž`ž|ŸŸ] H H H”.¢(¢(£¤+¤0¤W¤_„ „r¦¦¦.¦>¦_¦`¦`¦t§§ § § §6§h§~©A©F©eŖ3Ŗ9ŖwŖw«L«]«f¬!¬#¬#¬1¬1¬{¬{­­_®®i®iÆAÆDÆOư@²$³C³E³J““Cµ_¶J¶K¶L¶N¶S¶}¶~··!·A·B·L·{¹¹>ŗl»M»N¼¼¼¼(¼G¼e½@½u½v¾#¾_æ3æIæSæTĄ?Ą@Ą`Į.ĮXĀEMM¹¹\LP[x‚ ‚‚1‚bƒ$ƒ5ƒn……†.‡ŠŠŠŠ{ŠŒYŽdŽoKfs{5Lrt’%’e•[–8–u—— —!œ:œCBV~ " 4 ?”}¢¢¢5¢D¢i£.©A¬3¬Q¬T¬z¬|­_°±²L³s““V“pµP·vø'ŗ¼(¼G¼`½½½ ¾¾¾$¾a¾aæ æYĄ3Ą9Ą^L” zĄvLx‚0£ µæ.2L‚‚e‚gƒ„e„z…ˆ(Š/‹zŒ&k7‘.“” ”=”N”T•)•+–@—[˜˜hšš0šEš^š`še8Uyžp¢}¤l­]Æ“ µ#µ2ŗ»»S¼8æGæ[ævH«Fb‡[•v–R—›”F”`„1®)°Sµu¶¶p»q¼ E† x“}–M›*ž«« ®DŗQ>E‚‚M‚SƒY„/„K………ˆ7ˆ9‰LŠŠx‹fŒ Œ Œ>Œ]Ž@“0”C–M—-—D—Yš œœ2œR2£6«~­®\²C³““)“cµµ,µ3¶e¹¹¹A¹jŗ5»»t¼8½½&½u¾]æ!ĄĀ@C†g‹Œ2ŒKy’f”r˜V|žxµ}»>½ĮTCƒwˆ\]˜˜}›K›P¤©tŖO­Æh¶i»B¾nĄ1ĮAĮOĀ(ĀyC…R†t†t˜˜v  Ø\CC†| #±5¼FB\c‚v‚w‚wƒ8„4„5„5…%…B…V†tˆ‰?‰?‰T‰f‰wŠ2Š4ŠMŠqŠ|‹C‹D‹U‹ ,7Ž ŽŽ&Ž&67:{‘(‘5‘B’5““!“^“h“k” ”””(”=”F•!•x–<–@–n—S—a—b—d—h—j˜~™™9™\™b%žžždžqŸ(Ÿ/Ÿ? b m”¢@¢f¢h£©r©w©w«b«m¬;¬j­7­W® ÆJ°0°<±9±c²6³“X“Y“~¶·X·Z¹7¹8¹=ŗŗ»B»t»v¼ ¼R¾C¾H¾O¾\¾pæ æeæ{Ą"ĮĮ#ĮtĮ~Ā B†`ˆŽcg‘M–—^˜o›SB‚;„SˆŠ6” –U–`˜žbŸL¢gØU­8°,± ±/±5A¬A–5©m«c«d¹XA©I¾{5A„p†IŠ6‹g^‘’2’~•R•s—!˜O™™™™kš9šMšqAFžLŸ  h”W¢£5£F£l¤¤b¦"¦"§-©,Ŗ«j® ®2®_°P°U°u²²sµg¶9ø@øXø}ĀIA§@“H“IĀuÄ>ÄE@‘PØ6­N³%»AĮg@[Žu"‘<‘L’’–E–i—l› œœmžd”v¢7¦¦Ŗ,°>³O¶¶3ĮBĆ3@ –=œp¦(ØV³·m@R‡&‘ ”—@˜&›¤fØ+ÆC±²!²'²b»]¾@‚h™!«w­M²+@ ?‚p„ ™rž ŸM¬:±Q²T»4?®??ƒƒh„…]†u‡‡‰l5”œŸ/”Q£[§;¬-“K¶K¶V¹C»c¼½¾Q¾uĄb>>š,±H½+>޾bĮrĀ >]=ƒƒ7ƒSƒ]ƒg…g††7†7‡‡‡‡ˆ‰$‰kŠtŠ}‹"Ž"D‘3‘M““g– –—9—y˜™&™bšš+šCšH›Y<žž žž)žMžhŸ' k””””@”x¢u¢w£+£a„.¦t§ ©AŖI«4«4«E¬ ­q­q®®7±±*±0±<±Q²j“eøŗŗ¼:½æ6Ą;ĄCĄIĄMĮ7ĮaĮoĀĀĀ (=Œ+Ž12:@WDa‘o”S”T”T”U™B™K™rš(š2›Rž,ž<žZžu¤:©{­MÆ)°E³"æ/ĄĄ2Ą2Ą3Ą^Ąt=•”g¤`=ƒu„c…6††SŠ”t—˜d L”4”6¢¢££ §5§s§~©3«}°°z³J³J<–9šB„(±<<ˆ[Š‘.˜&¼F;ŒOŽUf|”s—T˜c›'žr o””>„sØZÄ6;\ƒ#ƒ$††0ˆˆ_‰1‰?ŠŠ>Œ5ސG‘'•7––@–g˜˜>šb›TœTŸ1””¤'«>¬S¬S°6“oµ·!·3·7øøE¹6¹8¹EŗT»"»w¼(¼Pæ æ ĮJĮa;\;‹šz«&¶u· ·Z½#; :ƒ/‹/ŒOLžc¦cØŖ5ĮW:Š:•{¤C¶C»?Ā$:NRƒ@ƒv‘.–|™RY`tyž+”`¢E¢o§ §?«C¬?³!·xŗ(½½~¾X¾eĄG:‚4ƒŠ1ŒkŽt5=E—˜N¢¬¬Ær»N¾¾ ¾æ æI:$&&–1¦=¬9£b§D»^ÄÄ@9:ž¢0Ą/9Œ!•[ø`¹¼O8H„lŠnru–›~“\ø`¼O½e¾CævĄ" 8ˆ0Œ1ŽD”@˜š«A¬:µN·1·q8¬97ƒt…'†Ž •w˜8™LšZ Ÿ8££¤¤g„^««GÆÆ±±,±{³]½ææQĄt7?‚}ƒƒfƒg……'†[ˆˆ&ˆ7ˆk‰ ‰Š7‹^Œ3ŒC- 014V’]’c’u““[”O”p•?•R–J–J–^——!—x˜˜™Ošš\šc›XœNœRœ^MN_evž+žFžG -”0”n¢/¢W¢p¤Q¤T©7©N©x©y©z«4«R«Z«}«}¬%¬>¬EÆb°!±&±+±-³5³s³t“Z·øR¹ ¹¹ŗ½½u¾X¾nææ=æTæ]æ]æbæ}Į ĮHĮLĀ+ĀdÄ%7ƒ†j‹5+‘f•`•l—E™>š[žkŸx£:¤9„=„x„|¦%¦9¦O¦q§"§/Ø© °'°0°9°U±±K¶2·sø6»2Įgh68QWY]n‚‚ ‚‚‚.‚Oƒ ƒ5„3„;„e„q„t„x……$…&…0††††0‡%‡/‡Uˆˆˆˆ%ˆ%ˆ)ˆLˆPˆ]ˆyˆy‰ŠŠVŠdŠ|‹aŒŒ%Œ&ŒA  07?kŽ ŽŽŽŽ Ž$Ž'Ž<Ž<Ž=ŽX  zd‘%‘&‘A’,’/’3’d’m“ “&”8”9”@”S”U”Z•$•$•*•w–2–K–Y—T—U—_˜5˜5˜8˜}™K™LšZšmœ5œE "2pžž"ž)ž)ž)ž*žVž^žtžtžzž}Ÿ8Ÿ:  # W””””””””,”Q”a¢ ¢ ££¤¤¤'¤5¤g¤u„^««««Q«Z«s¬¬?¬v¬|­®ÆÆ±±± ±&±M±P±S±_±{²8²9²E²\“&“E“\“zµµµS·(·1·QøøUø\ø`øm¹ ¹ ¹8ŗMŗZŗj»¼0¼O¼P¼`¼{½½½:¾H¾Y¾gææ æQĄĄ#Ą4Ą5ĄHĄJĄQĄfĄlĄ{ĮĮĮ26Aav‚‚‚.‚:‚^‚o‚}ƒƒƒ.ƒGƒRƒaƒw„„+„;„T…….…6† †-‡zˆˆ.ˆ;ˆV‰‰?‰H‰{ŠŠEŠKŠQŠvŠ{‹>Œ&ikŽ ŽŽŽŽŽ&Ž3Ž<ŽGŽVŽgŽo 2:FLVfu3C[x‘‘/‘?––-–<–M–e–x—— —6—?—L—\—h—u˜˜#˜.˜z™M™h$08TUbbsyžž ž(žnŸŸ Ÿ*Ÿ4 . 1 O T x ~”””y¢;¢J¢{¢}¢}£„^„e¬$¬4±6³c“ µµ#µ9µBµHµSµZ¹ ¹¹0¹4¹Mŗ5ŗ>ŗB»¼+¼6¼?¼N¼h¼o¼u½½½½ ¾G¾M¾Y¾a¾sææ9æLĄĄ&ĄQĄmĄ|Į ĮĮ$6‚‚‚nƒ:ŠFŒwC‘T“G•%—N˜m˜zšš š%š)š0žh£±`³z¾bƁ4>‚/‚I„5†p‰ !Ž  -‘˜RœW$Ÿ©n«4«e3ƒr3L3‚)‚LƒE„„…Q…d…d‡‡‡‡‡‡8ˆ>‰%‰b‹‹1‹tŒ',ŽŽ^46vv’’’’:’l”\–S–k–m–o—"˜œž9ž:Ÿ>Ÿ}¦n§§©}®®³$³-³7“C“Dµ2¹?¹Sŗŗ ŗ%¾eæ.Ą1Ą2Ą_Ą`ĮĮLĮLÅ*ÅAÅGÅH3ØR2‡ ,“N››~”A¦8§3§UÆ]¹»¼W123?BZZZ[‚!‚#‚L‚O‚P‚hƒEƒgƒiƒuƒ„„„v…Q…_…d…e†l‡ ‡‡‡‡‡‡‰L‹XŒ ŒŒ"Œ#Œ;ŒCŒH,8<ŽŽŽ|!!:<[‘‘‘‘~’’’’’’’’’5’A’D“$“H•,•i–E–R–i–j–k–k–k–m–m———<—<—G—a—a—b—b—x™;™P™dš.š]œœ{œ{ixž7ž;ž;ž<ž<žuž{Ÿ"Ÿ/Ÿ0Ÿ2Ÿ> /” ”¢¢C¢y¤$¤(¤j§§ § § § § §§§©}«"¬®®±X“C“H“_µ·E¹¹¹Z¹^ŗ$ŗ$ŗ(ŗ1»w¼E¼Y½ ½x¾ ¾h¾kæĄ1ĄuĮĮĮĮĮĀ Ć*Ć-ÅÅÅ#Å#Å$Å(Å= 2”] „¦1ØY©<»H»\422]…M†ŽŽ”t–u—˜`˜{™[œoœpMu ! x |£E£F£H£x¤¤I¤lŖŖŖ««"­Æ±±|²C¶ ¶A¶e¶j¶··H·Qøe»¼¼}½ ĮĮ#1„7–=™ MŖ«>³Y1!0‚‚Oƒ„!ˆvŒ%  ““ ”••@–9—$œSž}”,”o„ ««I±Mµ·.ø¹ ¾gĄ*Ą,ĮJ0Š|Ÿ0·ŗ 0Œ~–U¹h0/0LPYY]eeƒƒƒ*ƒTƒ\ƒ]ƒ_ƒk„4…*…/…0…Q…X…|††/†M†U‡‡`ˆˆ!ˆ"ˆMˆb‰ ‰|ŠŠ Š/ŠE‹m‹s‹wŒ%Œl{Ž ŽŽ0Ž9ŽMŽRŽiŽpMT`Wm‘Z””O•,–3–Q–S–T–z———@—C˜,˜2˜C™cš šCšCšDšFš\š_MžGžYžaž~Ÿ Ÿ ŸŸŸ 1”,”6”P”V”t¢ ¢#¢9¢H¢d¢p£ £W¤ ¤z„9„p„|„|¦¦¦^¦o§9Ø©d©n«E«l«l«s­­C­r®°)°E°r³³!³$³9³<³N³X“;“D“z·<·tøø¹¹2¹S¹xŗ(ŗ*ŗBŗF¼o½H½~¾ææ^æsæxæĄ/Ą6ĄfĄgĄĮ ĮĮ>ĮsĀ%0/EH‚8„-„3‡F|ŽK’’U’r“P“S”K”NššDšJ›}Ož%Ÿ8”"”'”,”.¦'Ŗg«b«j«y¬¬¬&¬8¬B­@°H²Fø¹ ¹¹¾ ¾ Į0Ć0/O‘s¦§iŖ;æ.Pƒw„„…>Œe ‘5‘l””9–V–{—W™_ž”§©{Æ-°³U“q¹ ŗ»}æĄyĮ(.X‚eƒ(†H‡‰kŒŒS‘9‘~–V—™™"™>™a™bž žž~Ÿ”ØT©yŖ4¬z®8Æb±*±c²2³“2µ7¾QĄ.Ą8ĄCn.12]‚.‚/ƒƒMƒM…&…[†h‡‡/‡1ˆˆˆˆ)‰1‰uŠ Š<ŠnŠsŒQ`yŽ bO_‘H’“M“Y–:——=—F—a—b˜˜ ˜%˜+˜5š š šiœ\ž žžBžGžKžPžYž`žcžqŸŸVŸv p””p¢ ¢C¢y£[£f¤ ¤>¤i„2„X¦ ¦5§&§?ØS«H¬5¬j°;°=°B³3³R“\µ7µHµIŗ>»»aæ<æ]æ{Ą?ĄdĄdĮĮ5Ā$.ˆy‘3 .h…H…H‘I M„C¦Z°0-v°=ø)ø,ø-ø[øg$-‚e…Wˆ_ˆcŠ1Š@‹ ŽQ4[{}‘ ‘2”=”O••:–E—™b K”9¤BŖa¬­UÆ)øWøZ¾OæĮ M-/{‚$‚P„ „2„4…†&Š.ŠAŠIŠVŠd‹‹:‹ap !8‘”E•R—"—7›W›\#žhži  ~””-”.”t”y”~¢¢7¢J¢i¢k£.£M£]Ø©F©sŖ«««¬?¬C­e± ±W³3“¹¹»»p¼^½¾\æææAæLĮ2Į4Āƒ-CYrx‚‚‚[‚b‚f‚n‚oƒ ƒƒ1ƒ6ƒ>ƒGƒj„ „„+„P„W„l„w…3…7…L…j…t†† †.†O†X†t‡‡‡‡tˆˆ&ˆ)ˆ5ˆ=ˆBˆTˆZˆt‰#‰L‰{Š ŠŠŠŠ1ŠEŠK‹#‹3‹fŒ&Œ=)ŽŽŽŽtŽ|Ž~*11{9RY‘‘‘‘+‘,‘6‘7‘T‘X‘X‘Y‘Y’’’’7’c’d’r“E“e”;”C”[”b”p•• •!•$––S–T—— ——#—%—2—3—Q—U—d—h—˜ ˜ ˜*˜.˜^˜m™]™fššš šš$š%š(š+š-š0šBšDšJ›4›>›O›X›[œœœNœPœRœbœbœmœwœw"#0>U^~žžž=žEžEžOžWž_žnŸŸ#Ÿ*Ÿ5ŸMŸRŸXŸw     # ' ( 5 ? ? D N Y Z Z n y””””9”:”^”h¢¢¢/¢J¢h¢k¢t¢~¢~££X£q£r¤¤P„ „-„-„0¦¦E¦Q§P© ©C©E©MŖŖŖ!Ŗ%Ŗ+««1«?«P«o«u«¬¬¬¬¬¬¬¬¬1¬3¬]¬i¬l¬o¬q¬x¬|­F­R­b­v­}® ® ® ®'®m®oÆÆ?Æa°°!°#°T°~±±±±!±!±+±4±9±J±J±K±`±~²²!²6²8²8²F²Q²r³³³+³E³h³o“ “)“f“i“m“o“pµ*µ<µ>µGµHµIµP¶.¶2¶]· · ·H·Q·d·o·wøøø!ø&ø)ø/ø\¹¹¹¹;¹?¹I¹j¹zŗŗ;ŗf»»N»S¼¼ ¼8¼J¼W½½½½½½2½L½\½x½{¾\¾bææ æ!æLæTærætæxĄĄĄ0ĄFĄLĄSĄeĄeĮĮĮ5ĮGĮ]ĮqĮqĀĆ6--ƒh‡ŠA‹‹F_‘—$—q—r˜o›TœOžbŸ/ l¤]¦¦!¦O¬S³$½FĄ1ĄJĄe,-ƒs† ”8ž u¢~¬4¬6°“1“E¶v¼hæR,‹a,Ød~,36‚0‚:‚:‚nƒƒƒƒƒ!„„1„?„A„P„P„R„e„w„{…………5…7…s…t† †&†/†b†d†i†}‡sˆ!ˆJˆJˆZˆcˆi‰(ŠŠ@ŠVŠY‹mŒ Œ@ ŽŽ ŽŽŽŽ<Ž~"Umy1C‘'‘B’A’D’e’m’r““ “ “““+“@“G“P”K”N”p••)•j•n•o•x––<–e–e———#—$—?—L—R˜#˜'˜l™W™\™bšš=šDšVšYš^š^šašešešm$11BOP^žž"ž(ž)ŸŸ: 0 G N Y Z e”””'”:”@”K”Q”\”^”k¢¢]¢h££<£G¤¤¤l««3«N«]«^«b«e«u¬3¬3¬9¬:¬>¬d¬l¬|­­Z­i®®Æ±±±± ±+±1±4±B±U±V±W±[±_±`±}±}²²²M²h²j³E“ ““!“U“Y“}µµ5µ9µFµS··:·G·H·P·bøl¹ ¹AŗŗŗN¼¼¼N¼R¼j½½x½{¾¾E¾eæææ æ&æEæSæYæeæuĄ&Ą0ĄGĄTĄUĄVĄnĄoĮ +,}© Ŗl+‚[…!‡>ˆZ‰qŒ0ŒA “i–/—G {„?Æŗlæ-Ą:Ā<Ä.Ä5ÄI +†f‡‡l‹ “"•rš!&¤Q¦§}©/«t¬]­5Æ=°]±B¶8¶Q·?·^ø3»=»U¼,½½ZĮĀ4+7‚W„ „a…L††uˆŽa‘6–"—›?œ-œY" /£*“0ŗtĮg+‚.‚0‚S‚b‚rƒƒ%ƒ*ƒEƒc„„„c†††‡ˆˆˆ‰‹‹%‹.‹^ŒŒ%ŒOŒZhŽVŽdŽiSfAqtx|‘U‘n‘s‘w‘x’!’A““e”T••%–——N™š)šBšG›xœœ=œhœh)GqyžržŸ"ŸT " + h o }””££££q£r¤F¤J„&„&„_¦§GØNØNØZ©EŖŖ$Ŗ)Ŗ?¬¬¬>¬q­]®D®^®^ÆÆ<Ʊ±,²S²a²s³_³y““ µ,µG¶,ø'¹6ŗŗ-»»L»T¼X¼d¼h½½½¾eææ"ĄĄĄ0Ą3ĄCĄKĮ/Į6ÄqÅFÅGÅG*Še*„a*‚H[*28„„1„u…+…W† †<‡?‡M‡\‰WŒT,LL{ŽŽŽ Ž^ŽaŽs ?I‘:’m“n”p•%•y– —˜4˜Q™™b™y›]œ8œ9œRiŸ\ K”%”;”K”M”M”P”^¢ ¢ ££t¤¤X¤o¤y¤~¦ §4§j©^ŖŖ«,¬P¬UÆP°t±±E±U±n²g²{“X“_·]ø-¼)ĄrĄ{ĮzĀĀ+*„ˆ~ %k q‘$“ ” ” 0³_ŗ ½~)3‚0‚e„„……a†*†+†H†z‡ˆ'ˆ(ˆDˆw‰!ŠŠ'‹‹‹/‹6ŒŒ2ŽŽrŽzU7O‘‘a’’“a“b“n”0”0”9•Z˜˜1˜o™š$š$ši09[]}žsžŸ  4 J n t”&”0”3”h¢¢¢Z¢Z¢o£ ££U£W£|£~¤ ¤2¤g„,¦¦<¦S©$Ŗ«#«b«n­6­:®&®3®M±<±?±I±o²0µPµnµu¶L·7·8·Bø~¹»>»\»g¼¼@½½L¾$¾Wæ æqĄ2Ą@ĮĮ%Ā )†e”r¤3¦­I­cÆH²³µh¶)³R)…J†V‡ž ¦E¹;æ[e)[‚ƒQ„|… …6†X‡(‡F‡Rˆp‰=‰VŠŒ,/Ž-Ž\Žsmx“/“z” ””t•>•K•v•{––N—— ˜0™uš4š9šgšœ(œH6@J\žž Ÿ1ŸC $ L |” ¢¢£}§§+©1©H«Q«s¬"­®®-®4®:®G®lÆÆÆÆV°°N°z²K²{³Eµø!øF¹ŗQ»"»%»&»5¼}½!¾¾h¾jæ7æwĮ;ĀN)„|Œy(ƒD“@—j—l(ˆ=(‡b'‚‚-…jŒM’š~¢£W¦C¦r¦v¦|§GŖ«f«iÆF±v¶w»4æjĄYĀ&'» 9'QY„-„/ŠvŒ ŽmR‘‘W‘W‘v“$”–š.šu›,œ8ž    $”:£{¤#¤D¤j„[§ §Ø[Ø[Ø]©+©;«°°±V“I¶ ¶ ··%ø¼¼¾¾KĮ1Ć5ÅÅ#&)&y{ƒv…I†ˆ0‰‰‰‹‹.Ž}‘g“S•G–Y—y˜7˜Tšž3ž9Ÿ £i„&„9¦=§§!§TØØ©-­N­N°+¶X½¾o&'‚ ƒ[…^†!†G‡“R–U™~šT›'›,›9 1 c£p­"­6­L¶S·ŗ:»Į&''9‚zƒ ‹žE£b§ §9§H°.±I¶TĆÄ)4%+6‚<ƒ4ƒ\ƒr… …O‡v‡~ˆV‰FŠ Š#‘ “B“Z”–r–{——"—H˜Kdž žžL  f””^¢#¦G©a«c±*³B“H“e¼;¾f¾tæ2æ>Ą9Ć-%— Ÿi$Pl„„†:‡ ”—˜*„4§Ø=©Ŗ-«v¬ ­Æ»6½: $ˆc™›2ŖEµlæ8ĮVn$‚4‚Hƒ……<…=…k…o†!‡!‡=‡Z‡oˆ<Š%Š=‹‹#‹.‹\Œr‘ ‘H‘`’ ““6“n”"”%”]”}•K•[•j•~˜v™™™Lš%š2š7šHšp›Pœœ8œcœg~žž?ŸWŸXŸa¢K¢P¢o¤ ¤,„"„'„9„Q§PØØ*ØmØpØw©NŖ Ŗ:ŖT« «<¬&¬y­­Z®ZÆ:ÆM°4°X°^±±4²=“Xµ]µl¶3¶J¶Xø[¹?ŗŗ»@»q½ ½Ą'ĮVĀ $.B‚v„5ˆF“^Ÿ(Ÿ/­W“¾$¢+#„7…‡jŽ0Hkm’}••F—š8›fŸo£n¤_ŖŖ-­9°n±F³V“·¾jædĄk#„tŒ{Ž^” ”šv£4§§5ØqØtŖŖ(®:®@®PÆT°°T°nµv¶=¶aøJ»V¼æ8æl#‰p°n#”&  ”B”E»B»bĄZ#"‚v†M‡4ˆ;‘ ‘x“• •E–s˜Dœ`Ÿs”I”S°@³}µµk¶r""‚{‚{ži U­V¾b!HQƒ'„;„iŠ=f–/šZš_5¢t„e«Æ““wµGøP½!ƒ†#‡1‡3 A”8–e—33 ”&”P¬&¬6¬X±““µ µ ¶wøCĆk%!4~‚.…n†V†x‡‡NˆTˆe“”o–gšdž% 5”4¤«T¬O®± ±T²²\µQ»"æ ĄUĄWĄZĄZĄhĄh‚7ƒ „‹}ŽŽz’–˜f˜hž} K”z¤D§©x«~Æ9±7±n·5¼½0æXĄOĄQĄSĄmĆ20‚*ƒG† Š#‹D”•i˜yšššu›Xœ@Ÿu  r”¢%£„)„J„|¦-§§I©[ŖŖ*Ŗx¬C­D®'°A°T°}±.²u·øøøQ½)¾=ĄBĮ2Į7Į@UH‚A‚g‚u…††@†s‡/‡gˆˆˆD‰‰‰JŠŠ/‹ ‹2ŒŒjGŽku‘‘j”—+—f—x˜*˜`™š<›?›q08džjŸa”k”~£T£e„b¦l¬#¬K¬_­­=®rÆ °[°y±h²²²E²K³Mµ#µF¶·,¹(»F¼V½½r¾æbæoĄĄSĄlĮ~Ā-)‚…5‡b‰4ŠIŒ@?w’D’O”n•9–i—Kš7¢;¦Ŗ,¬1¬g“ µ ¶:¶;·ø,¹!ŗŗ>ŗt¼¼D¼d½Q½UĄ Į4ĮQ$Z^in‚>‚Y„„U…Q…]††)†3†TˆIˆs‰‰v‰{ŠŠqŒ&AŽ'Ž+Ž,ŽwŽ~ &E‘‘ ‘@’“ “,“y• ••z–—&˜˜!™(™n™sšqšr››#›zœ)ž ž žUŸŸŸn R”o¢¢o£s£v¤+„ „¦h§ §4ØØ0Ø>©©1©9©W«««)«¬/­­­P®®8®;®E®V®b®j®x®|Æ)ÆDÆZÆ`°°°!±D±o² ²=²[²f³³%³o“_“`µµµSµlµt¶¶1¶i·L·iøKøPøQŗŗ»<»V»[»o»|¼¼½½l½m¾¾2¾QææoĄĄcĮ%Į/Ā8ĀMÅ/‚5‚J‚Yƒ`ƒa„7„f…9ˆˆP‰RŠx‹xŒX$q%“I•n™dšdžRŸ Ÿ"”B¢!¢%¢8¤« «!«I«Q«R«^­1±±±-“{¼@¼{¾¾MĄ>\!\}ƒƒƒ4ƒEƒ`ƒa„…7†‡‡ˆˆ_ŠŠ‹DŽ<z‘E’’b’e’m’t“Y””Q•j–6–g— —;˜#˜7™ ž!Ÿ0Ÿ0” ””””p¢8¢8¢l£¤¤u„C„\¦6¦Y¦c§(©+©r«>«N«Y¬q®®±/±X³!³G“K“o“zµ%·2·5øg¹4¼i¼l¼{½&¾ ¾æeæfĄ=ĮÅ*pƒ[ƒ_ƒgƒx†5‡7ŒDŒey’2•9•Q˜ ˜<™HšUœXŸ¢8¢p£9£<£P¤/¤j¤}©$®®i®wÆVµøE¼¼`¾%Į,Ā y‚ƒY”a”e”e”t”}¢‚“>—j˜%¤„b„ /06S^_x‚$‚(‚*‚1‚2‚4‚D‚F‚G‚L‚M‚M‚P‚U‚b‚z‚{ƒ$ƒ(ƒ-ƒ3ƒ5ƒ:ƒ:ƒ=ƒ?ƒ@ƒBƒGƒHƒKƒKƒRƒnƒqƒrƒuƒw„ „„2„4„A„H„R„`„q„x„……………%…&….…s…u…u†%†&†q‡‡,‡1‡Wˆˆˆ&ˆ'ˆ*ˆ*ˆ9ˆ<ˆ_ˆbˆc‰)‰@ŠŠ ŠŠ;ŠAŠIŠLŠrŠ{Œ%Œ+ŒZ&/BHHMpxŽŽŽdŽgŽqŽtŽuŽuŽzŽ{Ž|&?JMWfrsvw{{  !-.=?CILMRWfstt‘‘ ‘‘‘$‘$‘(‘(‘.‘B’>’b’d’k’n’x““ ““ “#“M“Y“p”;”@”E”X”Y”^”q• •[•y––U–V–x–|—— ———(—9—C—S—S—T—U—V—`˜˜%˜+˜6˜7˜8˜z˜z˜~™/™Ršššš$š%š'š*š,š-š.š0š1š2šCšEšVšYš\š]š]š^š_š`šašdšešešn#%22Vhtyz|~žžž+ž+ž?žAžCžPžVž_žhžsŸŸŸŸŸ"Ÿ$Ÿ;Ÿ<    5 9 ? U x y | } ~ ~”””””””””-”/”4”;”A”A”F”_”t”x”~”~¢¢¢¢¢ ¢¢¢¢¢"¢4¢6¢:¢;¢?¢E¢H¢I¢W¢Z¢_¢i¢k¢l¢o£££C¤¤¤&„_„_„e««««"«.«<«<«G«N«^«k««¬ ¬¬¬1¬@¬R¬l¬y¬z¬|­­­­V­V­V­W­X­X­Y­e­g­q®ÆÆÆy±± ± ± ±±±!±(±-±0±2±5±@±M±N±Q±`±`±d±{±}±~±²²²²²8²<²j³³³³D³J³K³a³s“““E“V“n“p“pµµµ%µ.µKµPµS¶···G·I·S·bø'ø)ø-øBøCø[øeømøm¹¹&¹.¹4¹G¹h¹~ŗŗŗ ŗŗŗ(ŗPŗw¼Q¼R¼S¼S¼^¼|¼}½½½½½ ½!¾¾C¾X¾\¾d¾iææ æ æ'æ/æ@æAæGæYæpævĄĄĄĄĄĄ$Ą2Ą2Ą3Ą7Ą9Ą>ĄGĄaĄnĄnĄoĄqĄxĄyĮĮ Į Px‚‚ ‚‚ƒ ƒ ƒ2ƒ:ƒ^ƒdƒjƒ}ƒ}„„„„ „ „ „ „„U„x„z…5†)†-†/†T†U†f†g†h†v†w†y†{†|‡ ‡ ‡ ‡ ‡wˆˆˆˆˆ*ˆ=ˆ=ˆUˆV‰‰‰ ‰%Š6Š@‹Y&6HŽOŽos5i‘ ‘‘‘““ “8“h”=”P”Q”W”Y”o”o”s•y•z–a–t–u———#—M˜%˜%˜+˜0˜1˜8˜a˜|™P™]™_™dšCšCšDš[š[š`KijŸ Ÿ Ÿ"Ÿ(Ÿ7”3”P”k”m”m¢b££ £ £J¤!¤&¤&¤(¤l««2«w¬7¬T­ ­,®®Æ± ± ±±±±*±0±<±]±_±`±~±~²²!²S²W²Z“;“D“Dµ9µZ¶ ¶h··S·z»#»%»X»w¼e½!½B½v¾¾z¾{¾}¾~ĄSĄWĄ`ĄdĄtĮĮ Į ĮĮĮĀeĀjĀkĆ-Ć[Ä7Äl1!7=Yht‚!‚-‚0‚>‚Q‚T‚\ƒ8ƒ]ƒcƒrƒt„„„i„w……s† †(†B†C†C†CˆˆeˆhŠŠŠ@ŠAŠsqŽŽŽ"ŽYŽqŽ~SU/5Is‘R’A’b’l’r’r““J“P”K”L”j”p••$•,•R•\–Y–e———#˜ ˜#™a™aš-šDšGœw"0<O^gxžž*žYŸ" # + N Y Z n”””'”h¢¢¢#¢5¢7¢h£{„|¦-¦t©O«D«Z«]«k«o«u«}¬ ¬ ¬¬¬$¬3¬>¬>¬D¬E¬S¬i¬j­­Z±±±4±T±~²³4³E“!“-µ9µHµJ·&øø ø%»I»I½½½½x½{æææHædĄ(ĄIĄVĄnĄvĮeÅ$‡˜5™c E z¾nt$=PQ‚‚+ƒƒƒ'ƒGƒhƒx„…… …)…I…\†5†T‡‡P‡]‡qˆˆˆ(ˆ(ˆ5ˆb‰_ŠŠŠ'Š,Š1Š7ŠjŠrŒN &&+MyŽ ŽGŽ[Žp  !EvFa‘A‘T’]’u“5“Z”4”O”n••'•S•j•w•z–8–E–J–T–X–f–q—n—u˜P˜p˜q˜r™%™]™^š1šGš\š]›!›/›TœœLœOœOœPœRPnržž9ž[žfŸŸŸ$Ÿz  0 O v””3”P”S”^”o”|¢¢¢ ¢Q££&£>¤&¤s„¦©F©M©j«h¬¬¬%¬Q¬R¬p¬z­­­#­E­|®®+®bÆÆ?ÆY°!±B±M±_±v±}±}²²²Z³³“7“B“C“Hµµ)µ9µJµKµN¶ ¶p¶{·S·i·m·{øø6øeŗ%ŗMŗV»5»L»O¼¼?½½L½u¾¾æ%æ&æLæQæ[æsĄ ĄĄ@ĄnĄsĮ$ĮvĮxĀĀĀĀĀtĀuĆĆĆ!Ć(Ć7ĆMĆQĆXĆkÄÄÄ9Ä<Ä>Ä?ÄCÄEÄP †zˆ"ˆ%ˆ%u‘%• ¢ ³s½H?‚Uƒ„k†dˆˆˆˆx‰%‰_‰{Š"Š6Š\Št‹‹ ‹!‹KŒX6Ž! -:“ ”nš!›AœœœJOŸ*”” £4£8£E¤¤\¤a­$³C³y“-“@“m¶!·¼½FĄJĄJĮ5ĮQĀ(ĀHĀOĀjÄf‰uŒ@ ŽØ?©9«¬¬¬®m°"·¹?¹KJ*i‚yƒhˆs‰%‰&Š%ŠHŒŒ%Ž9ŽS’”–s—@˜™n››U›cœœpž£0¤¤¤7¤a„„„B„C¦ ¦:¦Z§§6§B§W©I©]ŖLŖ[Ŗd¬­®l°}±-²+³/³y“>“K“L“sµ ¶¶M·y¹ŗ%ŗnŗ|¼½|¾"Į-„’‚k„x…  ’q–(–*™>t¢E¬(±K“<¶¶C¹4¹`»½¾, ˆBˆp‰j’~”3œ„ §OØEØGØy©©i­°3“Jµ3ø ø-øC»=»?ĄhĀqĆĆUĆeÄÄÄIÄP‚4Q_‚,‚Oƒ*ƒI„!„"„#„%„Q………_…`†V‡‡g‡h‡j‡k‡kˆˆˆˆ ˆ ˆˆJˆNˆ^ˆzˆ{‰‹2‹4‹5‹xŒ(Œ(ŒCŒOŒY 3GŽGŽp!vw=‘ ‘’’ ““““]””””” ”O•!•'•,•-•?•@•j–– – ––5–X–c–f–r—@—N˜C˜v˜z™.š1šHšIšJ›'›]›]›i›i›j›j›k›l›l›m›m›p›t›t›tœ:œ;œ@œSœTœWœjœjœlœlsžžž ž žžžžž?žNžQž\ž\ž_Ÿ.ŸNŸUŸWŸYŸuŸ                x””3”t”y”¢¢#¢$¢7¢H¢Q¢T¢T¢£££T£W£W£X£Y£Z£Z£[£_£h£i¤¤¤Q¤X¤]¤^¤_¤`¤`¤a¤q¤}¤~„ „„b„p¦¦¦!¦(¦2¦U¦p§§§§§/§L§~Ø©.©/©1©3©A©D©F©K©O©]«H¬¬,¬R¬R­[®A®\®s®tÆÆ?Æa°"°E°V±±E±F±F±G²{³T“B“I“I“J“K“p“t¶¶1¶T¶^·&øø;¹¹GŗŗV» »%»D»F»N¼)¼K¼N¼u½½½+½@¾¾)æLæOæeĄ$Ą9Ą:ĄoĮĮfĮsĮsĮxĮzĮ~ĮĀĀĀĀĀ'Ā-Ā1Ā2Ā3Ā3Ā4aK˜Y¢;¦ Į0{]ƒƒƒ#ƒ$ƒ5ƒ@ƒTƒ}ƒ~„…a†0†B†C†j†yˆˆˆˆˆ#Š>ŽŽar‘&’8””@”q–@–K–]–f–g–u—$—<˜˜8˜?˜P™Xšš'šb›U›rœQœTfž^ž{Ÿ T””0¢¢ ¢(¢@¢C¢E£V£m¤9„*„q„{¦S¦[¦g¦{§'§I©<©q©r«>¬S­­~®%ÆAÆBÆCÆIÆK°6°y±6±K²t“o“~¶\·!ø5ø6øWøZ¹7¹8¹8¹Wŗ^¼P¾¾]æĄ4Ą6Ą>ĄNĮĀĀ Ā ĀĆlāR„ˆ_ˆcˆhŠKŠ}Ž%”N•*–O–r«C¬¼}!¦2i3xy‚-„„?„A„`„e……†.†Cˆ`‰%‰&‰ŠŠŠ ŠŒ+LŽ["5uuv‘‘(’D“ “ “”;”\”b”h–8–<–q—O—R˜˜*™]™f™h%ž!ž5žY G G Z Z \””_”e”|£<£<£B¤¤¤l«M«b¬¬3¬6¬7¬8¬8­±±J²!²M²]“f“g“qµHµIµK··:·H·SøøUøVøV¹ ¼K¼|½væ æ&ĄGĄ}‚>ˆS‰@Ž™xœ(ž žZŸG¢>«®*Æ\²'³“n½lĮ Įf‚%Ž\¢ ±!‚$…_Ž\©>Ą]<ƒ$ƒ/ƒ^ƒjƒj„„Q……_…l…m††g†k†s‡‡ˆ‰_ŠQŒŒN!qu‘ ‘U”P”t–R—9—P˜t™ššIšbžPŸZ N”f”x¢ ¢&¤Y„7„A¦¦ ¦3¦>¦A¦_§§§§§(§eØ0©O©OŖ%Ŗ:¬7¬Q­±-±I“'“)“*“*·w¹ŗ$»A¼D¼K¼f¼wæĄĄ:ĄcĮĮĮUˆ^·y{‚ƒj†&‰fŠpŒW’“Z”*–i—D—E˜LœcŸzŸ¢££^¤S¬¬%Æ/¶Y¹¾P"(*M‚-‚Oƒƒƒ.„ „i…5…7††Tˆ#ˆbŠ\ŠrŠ{Š‹ Œ\Ž=c‘M‘Z’ ’D““@••,–S—7—A—E—N—q˜6˜l˜m˜n™$™W™[››8›m›nœœE$JPžžWŸW ”””-”R”R”y¢ £ ¤¤t¤z„|¦0¦p¦p§§:§FØ%ØV©D©«-®tÆ ÆÆ.Æ/ÆC°B± ²²M³#““jµK»C»E»H¼o½t½v¾ ¾H¾R¾a¾{æĄ=Į ĮĮsĀwĆĆĆĆĆ:Ć<Ć<ĆCĆCĆPĆZĆ`ĆaĆdĆiĆjĆrĆvÄ ÄÄ1Ä7Ä>ÄKÄLÄPÄSÄWÄYÄ\Ä]Ä^Ä_Å Å)Å>\$JxƒJƒY„„=……E† †K†]ˆ&ˆ)‰#‰-ŠmŠpŠ|Œ'Ž3 Vf3’b’b’d““Z”E”K–W—8˜#š š š šE››O›P›XœNœPž!  ;”;”M”c”u”}”~¢t¢w£8£>£^¤Q««u«v¬¬ ¬¬-¬P­F­~±±_ø)øPø[ŗ»I¼¼9½¾Pæ)æ=ĄĄĄqĮ^Ā Ā'e‚aƒ „(†‡‡LˆŠ&Š,˜ 3”E«M¬µµN¼9¼X½tæOĄI%V‚a‚e‚gƒƒ „„(†‡L‹mŒ%ŒR %ŽŽ*ŽQŽX &3[‘ ‘#‘2”n–*–x–x—6˜™O™b.žŸ- + e”””9”E¢k««M¬³5³B³v“ “B“U“wµµN¶Y¹ŗ-»!¼8¼X½0¾O¾yææOĄĮ ‚/!%ABPQVYY\‚‚,‚,‚,‚-‚.‚1‚;‚V‚a‚v‚v‚wƒƒƒƒ ƒ ƒ-ƒ9ƒLƒTƒ_ƒ_ƒkƒx„„(„1„N„S„S„o„p„z…1…3††0†1‡L‡zˆˆˆ;ˆL‰SŠ=ŠsŠt‹d‹m%prŽŽŽ*ŽQŽXŽrŽ  JT&.3=AT[w‘ ‘$‘2’f’q“““0“?“Y“Y“h“i“k“s“s”Z”Z•'•\•g•k•w•z–*–x–x–|————!—#—&—&—(—6—8—_—`˜˜}™-™.™O™b™išššššššš#š&š&š+š5š=š=š>šBšGšJš\š^š_%.3356Bjpuv{žžžžžžž@žIžUŸ-Ÿ; + G L e””””'”,”.”9”=”@”A”A”E”M”P”a”l¢¢"¢&¢6¢7¢=¢G¢]¢g¢g¢k£«««!«+«-«M¬¬@¬H¬`¬|­­­­­V­i­m­t­|®Æ±!±5±:±:±_²²!²4²[³4³6³B“““ “B“U“wµµJµKµNµT·øø#ø-ø:ø:ø>øXøn¹ ¹ ¹¹¹¹&ŗŗ-ŗdŗj»»!¼¼8¼X¼Y¼{½½0½6¾¾H¾H¾O¾yæææ0æOĄĄ:ĄIĄKĄbĮ ‰oŖ¶ ¶8· ŸŸ\šh›«{„˜(™d›°“zŒvØr¶b‚„…ŠŠ[]”^››fœ œ,”X£o¤b©©©"©2­;®Oưµl»»l¾-‚ˆEŽ’2’T’_—k››§Ŗ(·»lˆ š.”VŠŽA°n“)Ą“  yƒƒ5ƒYƒm„†o‰‰1‰DŠ•,Ÿ8 >” ”"”^”}£«%«K«j¬3­1·.·S¹!ŗ½!ĄtĮ „k¦<¬@°… 478‚‚ ‚Mƒ%ƒ'ƒ3ƒ4ƒ4ƒ6ƒKƒSƒTƒTƒVƒ]ƒrƒs„ „„(„?„A„P„P„Q„T„U„X„l………………,…?…G…I…K…\…y…y…{……† † † ††(†.†5†F†G†K†L†N†O‡-‡<‡_‡`‡a‡e‡g‡nˆˆAˆx‰‰/‰`‰a‰t‰uŠŠ Š+Š+Š.Š/Š7Š8Š9Š;ŠJŠKŠM‹‹‹‹‹‹"‹4‹:‹>‹A‹Q‹Y‹\‹mŒ+Œ=Œ| ADevwŽ]  #|‘‘‘!‘#‘'‘(‘2‘E‘G‘H‘J‘L‘`‘k‘l’ ’’%’5’A’D’I’X’X’Y’c’c’d’e’m““ “T“[”””””””%”(”)”*”>”F”H”I”O”P”Q”Q”R”R”U”[”h”j”j”j”j”l• • • •••••+•+•/•1•9•E•J•O•S•T•X•k•z•{––6–6–8–8–C˜=˜>˜B˜B˜C˜F˜P˜R˜S˜S˜l™!™~šš7š8š:šUšjškšqšx›››››!›&›.›3›G›L›N›P›S›X›Y›\›]›e›h›l›o›s›|œ#œ%œ)œ-œ8œ;œCœCœCœDœ_œaœgœgœlœlœm-žž Ÿ?ŸBŸDŸTŸUŸUŸVŸXŸbŸgŸjŸlŸs     ^ c i”””””9”A”V”f”{”¢¢¢F¢P¢T££££&£.£/£0£B£_£a£e£h£m£s£t£t£|£~£~£~¤¤ ¤ ¤ ¤6¤H¤I¤K¤U¤U¤c¤r¤s„ „„„(„(„0„2„6„8„9„Q„V„w„x¦¦¦ ¦ ¦¦¦¦+¦5¦C¦H¦J¦L¦O§%§'§(§4§?§E§F§c§|ØØØ©(©)©,©D©E©N©R©T©X©^©^©d©f©g©g©hŖŖ Ŗ ŖŖŖŖ&Ŗ'Ŗ)Ŗ,Ŗ0Ŗ7Ŗ;Ŗ@ŖBŖ\Ŗ]ŖfŖnŖnŖtŖuŖu« « « «««««1«>«E«k«l«l«n«p«x«~«¬¬¬A¬C¬_¬o¬q­"­5­6­K­y®®!®"®$®'®)®*®,®2®Q®a®o®p®w®}ÆÆ+Æ:Æ:Æ;ÆOÆh°°° °°!°7°>°R°U°[°^°_°b°i°|±±±±±&±4±E±s±u±y²² ²²²'²1²L²U²c²t²v³³³3³4³`³h³j“!“&“B“W“\“_µµ5µ6µ<µ@µLµ\µ]µeµo¶¶2¶3¶6¶8¶X¶Y¶j¶y·· ···$·%·e·l·n·pøø ø0ø2ø>øKøPøQøRøgømøm¹ ¹ŗSŗu»»»»*»,»5»7»=»G»H»J»O»P»Q»S»V»X»]»}»}¼¼¼$½½&½Z½[½_½e½f½h½i½i½m½t½~¾¾¾¾¾$¾3æ'æMæbædĄĄxĮ-Į3Į3Į4Į:Į;Į<ĮEĮJĮOĮTĮTĮZĮ\Į_ĮiĮjĮlĮoĀĀĀĀĀ ĀĀĀĀĀĀ$Ā&Ā(Ā)Ā-Ā;ĀR ŒOŒoŽŽ%r– ˜d¢©D¬N·^øZ¼OĄoĄoĮ6Ā  /‚h‚v„…8ˆˆ;Št‹OŽ“!–z™ ™!š¢x£ ¦¬ ¬@°&±1±X³Q“··ærĮ( ‚;Š;$Ž`Žs5“5“I”•*š= K \”” ”¤:¦¦§4§\©\©ŖQŖZ«?«x­_°2°;³+³5ø¾hĄĮ/ĀtĆĆm æd ‚rƒR„_†:‡‡>‡[Š.ŠQ‹‹9Œb’-’Y“” ”Q•V—f˜˜™™C™j™qšV›!›$›p›|œœDœdŸG ”7¢M¤¤G¤y„ ¦¦b§ §©/©L«¬c­,®?®L®P®]®|Æ;°°°"°W°f±u²"²Q²Z²p³ ³ “2“mµ[µ\µ¶¶'¶p·B·Pøø:øqøŗ=»G»V»]»f¼¼Y½ ¾yæcæxĄĄ:ĄqĮWĀ;5 ‚G‚n…V†Eˆ@‰4Š^‹>Œ8ŒhŽ GSh’3’D••Q•i•s—/—Kœ5!Ÿ”%¢_©«!«6®-®4®?±^²z“.¶··Lø øI¹bŗ#ŗ=¼¼?½+½h¾GæiĄ ĄV W 6V‚ƒq„f„t„‡~‰‰;Š@‹‹i‹zŒ:ŒAŒX$6Ekh’A“&“2“R“g“k”=”K• •$•e–—D—^˜˜`˜y™KšššQžž%Ÿ>”(¢Z£B¤i«*«T¬K­®®Æ²X““P“sµF¶ ¶h··Z·bøU¹,ŗ ŗ*ŗ8ŗ^»»!¼¼+½½ ½O½rĄ ĮĮ5ĀBQ C‚ƒ]ƒ_ƒjƒt„K………)‡/ˆˆˆ"ˆSˆb‰‰ŠrŒS,3Ž'T‘‘ ‘‘ ‘ “ “$”T••1——$—0š š žŸ4Ÿ? W”b¢¤¤$¤j«%«U¬*¬O¬U¬`¬`¬{­­­­r±9²²C²Q²\³J“8“_µSµUµW¶ ŗNŗd¼}æĮĮ#ÄQÄTƒ"  !",36HLy‚0‚:‚:‚f‚nƒƒƒ ƒƒƒƒ!ƒ'ƒ'ƒ5ƒYƒm„„„„1„;„?„A„P„P„R„e„i„w„{……………5…7…s…t†† †"†&†/†b†d†i†o†}‡W‡s‡vˆ!ˆ;ˆJˆJˆZˆ_ˆcˆi‰‰‰(‰+‰1‰DŠŠ=Š@ŠJŠJŠMŠVŠYŠmŠ‹mŒ Œ@  ŽŽ Ž ŽŽŽŽŽŽŽ<ŽcŽoŽ~   "Ufmy/1Caf‘'‘B’A’D’e’m’r““ “ “““+“@“G“P”K”N”p••%•'•)•,•j•n•o•o•x––(–/–<–E–N–e–e————!—#—$—%—?—L—R˜#˜'˜(˜l™I™W™\™b™iššš=šDšEšVšYšZš^š^š^š_š`šašešešešmšn$%1159BOPU^g~žž"ž(ž)ŸŸ8Ÿ: " & 0 0 > G N Y Z e””” ”"”'”4”:”@”K”M”Q”\”^”^”a”k”p”w”}”~¢¢]¢h¢t¢w££ £££<£?£G¤¤¤l¤t„e«««««!«%«*«,«3«D«K«N«]«^«b«e«e«j«q«u¬3¬3¬3¬9¬:¬>¬P¬d¬l¬{¬|­­1­Z­i­k®®®ÆÆ±±±± ± ±±+±/±1±4±B±U±V±W±[±_±`±}±}²²²M²O²h²j³E³J“ “““!“5“@“U“Y“w“w“}µµ5µ9µFµGµSµU¶e····.·:·G·H·P·S·b·eøPøeøgøl¹ ¹!¹Aŗŗŗŗŗ$ŗN¼¼¼9¼N¼R¼j½½ ½½½½!½x½{½|¾¾E¾e¾sæææææ æ&æEæPæSæYæ`æeæuĄ&Ą0ĄGĄTĄUĄVĄnĄoĄtĄ|ĮĮ ‘9™*£V¬$­~³Aŗ^¼ +„†z‡1‡lˆ‹^Œ>“ “” ”W—˜#˜{š›0œT0^zžPŸT £T©2«[«p¬¬/¬9®_°~³¶4¹¼ ½Z¾G¾sæH”l}"ƒ%ƒ'ƒ;ƒOƒSƒSƒk……%‰?‹AŒ ŒŒ"ŒRDŽ' LWTa‘‘‘‘ ‘(’4’d“ ””j”u• •+–<–E——M—P˜|™K™\™iš2šCšn›mœœ8JPeŸŸ7Ÿ?ŸO $ P””F”a”c¢¢H¢X¢t¢u¢w£)£/£:£B¤ ¤P¤Q¤~§jØ`©L««,«<«f«r¬F¬H¬L¬O¬`¬a¬{­­,­k®Æ±,±|²K³“wµTµW¶B¶p·#¼R¼V¼Y½ ½h¾¾5¾hæbĀĆĆ#ÄqhLQ‚E‚Y‚vƒ „„R„}…M†<†o†rˆc‰#‰aŠŠŠ\‹‹U‹qŒŒŒk!ŽŽ"Ž7ŽOŽyky'P‘+‘E‘a“&”u••!–D–S–T–Z˜b˜q™`™a™aššiœMxž ž@ E l”g”u¤ ©b«^«b«g«t¬¬¬¬9°A±.³N“1“i“pµ5µ<µ<ø¹¼<¼f½t¾Q¾TææEĄĄ=Ą=ĄBĮĮ5ĆÄhÅA‚:‚Zƒƒ!…0‰ [_ž ¢¦x§f§©°=³J··{¹»b»b¾)¾UĆSl‚%‚.‚/‚;‚I‚Wƒ?„!„"„l… …K…k…|†† † †"†%†/†5†L†t‡qˆh‰T‰b‰gŠ,‹‹‹*‹s‹w‹xŒOyŽŽŽ+.\] +\‘H’’5’<””4”r”r•'•R•b–––z–|——%˜@˜C˜Q˜r˜w™1šB›››/›?›E›J›L›P›P›rœœ)œ7œ9œBœhœ~vžžžž.žAžAžrŸ#ŸRŸaŸx”¢$¢/¢?¢f£££?£r¤<¤c„„„ „ „ „¦¦R¦Y¦^¦c¦d¦~§ § §§E§jØ3ØNØ\Øz©7©M©Y©fŖŖ Ŗ8Ŗ<ŖKŖ{««¬¬.¬j­#®®"®?®D®V®mÆ)Æ-Æ.Æh°°&°w±³³³H³v“B“Xµ)µ,µ/µHµIµr¶.¶X¶{ø6ø=øJøM¹\ŗ5ŗ8»<»C»D»E»F»L»e½H½J½c¾¾.¾9¾hæ ææææ8æ=ĄNĄNĄhĄlĄuĮ!Į1Į7ĮBĮDĮIĮ\Į\ĮeĮmĮnĮxĀĀ Ā ĀĀĀĀĀ Ā*Ā*Ā,Ā-„ …Qˆ7‹;ŒB•˜Tš)œ$ ¢o¬"®V®q®rÆ?°²6³»v¾kæIæfæpĮz   !"06778HLLLMPPQQQRSWXY]]^abhnnoopvxxy{‚‚‚‚ ‚ ‚‚‚‚‚!‚%‚'‚(‚)‚)‚*‚*‚+‚-‚.‚.‚/‚0‚1‚1‚3‚4‚:‚:‚;‚<‚=‚D‚F‚G‚J‚M‚O‚T‚U‚X‚X‚b‚e‚u‚v‚y‚{‚}‚}ƒƒƒ ƒ ƒ ƒ ƒƒƒƒ!ƒ"ƒ#ƒ'ƒ'ƒ*ƒ-ƒ3ƒ4ƒ5ƒ5ƒ6ƒ8ƒ8ƒ8ƒ9ƒ;ƒ<ƒ<ƒ>ƒAƒIƒIƒJƒLƒLƒOƒSƒUƒUƒ[ƒ\ƒ^ƒfƒiƒmƒmƒrƒrƒsƒsƒtƒwƒw„„„„„)„-„3„6„8„8„;„?„K„T„`„e„e„h„i„k„q„t„u„v„w„w„x„z„{……………………………$…$…$…&…'…)…,…/…/…1…5…\…^…s…t†††††††† †"†&†)†-†.†.†/†0†b‡‡‡‡‡‡%‡/‡/‡/‡1‡L‡U‡w‡xˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ!ˆ!ˆ%ˆ%ˆ&ˆ)ˆ)ˆ5ˆ7ˆ9ˆ;ˆ<ˆ=ˆ=ˆLˆMˆPˆPˆYˆZˆ[ˆ]ˆ^ˆ`ˆbˆcˆeˆkˆwˆxˆxˆyˆz‰ ‰‰‰‰‰‰‰‰+‰/‰2‰6‰;‰L‰N‰P‰R‰R‰S‰{‰‰ŠŠŠŠ Š ŠŠŠŠŠŠŠŠ Š#Š#Š#Š'Š.Š0Š6Š:Š;Š=Š>Š@Š@ŠAŠDŠEŠQŠVŠYŠbŠdŠdŠrŠrŠsŠsŠxŠ|Š}Š‹\‹a‹s‹x‹z‹{‹}‹}ŒŒŒ Œ ŒŒŒŒŒŒ Œ%Œ%Œ&Œ(Œ+Œ0Œ1Œ@ŒAŒCŒQŒRŒRŒSŒYŒ`Œe     $$%&))+-.0377?DGGGKLkmmqqvŽŽ Ž Ž Ž ŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽ Ž Ž$Ž$Ž%Ž'Ž'Ž'Ž*Ž7Ž<Ž<Ž<Ž=Ž=ŽXŽYŽYŽZŽoŽpŽrŽrŽsŽvŽwŽxŽzŽ{Ž~Ž~Ž~        "%&*00114556:;<=IKLMTTTUVVWXZ_ippuuvvz   +,-.15589:=>?ILRTWWY[abbcorsstuvx‘‘‘‘ ‘‘ ‘#‘%‘&‘&‘'‘'‘,‘/‘/‘4‘?‘A’,’/’3’3’>’A’H’b’c’c’d’d’e’e’e’f’l’m’t’t’u““ “ “ “ “ ““““““““ “&“8“>“>“?“?“B“D“I“J“S“[“\“g“h”8”8”@”E”H”K”R”R”S”T”U”U”Y”Z”^”f”h”q”t• ••••• •$•$•$•%•&•&•'•*•+•,•-•/•1•Z•[•i•n•p•t•w•w•x•x•z•{–––(–/–0–1–1–2–2–<–<–J–J–J–K–Q–S–T–Y–^–a–o–o–o–t–u–z–|———— — —————————!—!—!—#—$—$—%—%—%—&—(—+—/—/—6—6—7—7—D—F—L—N—O—O—R—S—T—T—U—_—_—q—x˜˜ ˜˜#˜#˜'˜'˜+˜4˜5˜5˜7˜8˜`˜h˜l˜m˜u˜u˜y˜}˜}™5™6™K™L™L™M™O™R™\™h™šš š š ššššššššššš š š#š$š'š(š(š)š*š*š*š*š,š,š.š.š/š/š1š>šBšBšCšCšDšEšEšFšHšQšZšZšZš[š[š\š\š^š`šašcšcšdšmšmšnœ3œ5œE !""%%(02258889JKOUX^_eemnpqrssuwy|}~~žžžžžžžžž!ž!ž!ž"ž(ž)ž)ž)ž*ž*ž*ž-ž.ž2ž>ž?žBžCžIžLžOžOžRžTžVžVžWž^ž^ž_žhžkžtžtžxžzž}ž~ž~ŸŸ Ÿ!Ÿ!Ÿ$Ÿ*Ÿ4Ÿ4Ÿ4Ÿ7Ÿ8Ÿ:Ÿ:Ÿ?Ÿ@          ! ! " # # % & ' + - . 2 3 > G G N P S T W Y Y \ \ _ n u v y y z”””” ”””””””””””” ”!”,”.”0”3”4”6”:”<”=”>”@”B”K”M”P”Q”Q”Q”^”`”a”b”c”k”n¢¢¢¢ ¢ ¢ ¢ ¢¢¢¢¢¢¢¢ ¢ ¢!¢!¢#¢$¢%¢%¢)¢*¢0¢0¢5¢5¢5¢6¢7¢7¢8¢9¢;¢;¢<¢<¢=¢>¢?¢?¢A¢A¢F¢F¢H¢J¢J¢Z¢_¢g¢h¢i¢n¢x¢¢££££ £ £ ££££9£<£<£B£F¤¤¤¤¤¤¤¤¤¤¤¤¤¤&¤'¤5¤g¤g¤g¤l¤t¤u„^„_„b„e„e„eØE©|«««««««««««««««« «!«!«"«%«*«+«,«,«-«-«.«=«>«A«C«E«E«H«K«M«Q«Q«R«U«U«Z«Z«]«]«e«e«f«j«k«m«n«o«o«o«o«q«r«s«s«t«x«~«~¬¬ ¬ ¬¬¬¬¬¬$¬*¬0¬1¬1¬3¬3¬4¬6¬7¬8¬8¬>¬>¬?¬C¬C¬C¬E¬E¬E¬E¬S¬T¬`¬i¬i¬i¬j¬v¬x¬{¬|­­­­­­­­­­1­U­Z­Z­Z­]­]­_­_­g­i­r­v®®®ÆÆÆÆÆ°p°r±± ±±±±±±±±±± ±&±&±*±*±*±+±-±4±9±<±@±J±M±P±P±S±S±T±W±X±_±`±c±j±{±|±}±~±²²²²8²9²;²<²C²E²E²L²M²O²Q²\²\²b²h²h²j³³³4³5³9³A³B³C³D³`³r³s³s³v³z“““““!“&“*“-“7“8“E“R“W“X“Y“\“_“f“g“q“s“v“w“z“zµµµ.µ3µ5µ5µ9µBµFµFµGµGµGµIµIµIµJµNµSµSµUµUµUµWµWµZ······(·1·7·7·:·P·Qøøøøøøøøøøøøø!ø"ø#ø;øBøCøQøUøUøVøVøWø\ø`øgøhøløm¹¹ ¹ ¹ ¹¹¹¹¹¹¹¹!¹"¹*¹,¹2¹6¹6¹8¹C¹O¹Q¹bŗ ŗŗŗŗŗŗŗ$ŗ>ŗFŗFŗMŗMŗNŗZŗdŗj»» »»»»#»%»%»&»v»w¼ ¼(¼+¼0¼8¼?¼G¼N¼O¼P¼P¼V¼W¼`¼e¼i¼i¼y¼y¼z¼{¼|¼}¼}½½½½½ ½ ½ ½½½½½½½½ ½!½)½)½:½B½J½Q½o½u½x¾¾¾5¾G¾H¾H¾M¾W¾Y¾Y¾Y¾Z¾a¾a¾b¾b¾c¾f¾g¾g¾h¾l¾l¾n¾o¾{¾~¾~ææææææææææ æ æ æ æ æææ%æ&æ'æ1æDæHæLæLæOæQæQæRæSæTæ]æ_æ_æ`æ`æbæbædæsæuæuævæyæyæyæyææææĄĄĄĄĄĄĄĄĄ"Ą#Ą(Ą1Ą4Ą5Ą7Ą9Ą:Ą=Ą?Ą@ĄCĄGĄHĄIĄJĄQĄSĄ^ĄaĄbĄbĄfĄlĄnĄ{Ą{Ą|Ą|ĮĮĮĮĮ ĮĮĮĮĮĮ Į!Į#–9°9ĆCƒF†‹&•a–š"žG e”'¦s¹æPĄ‡<‰k‹gŒ[‘@‘_’<’~”››w£Q¤;„rØ(ØDŖ«7«9²@³µkæiĮ7j!}‚P‚xƒ`ƒa„„x… … …*…7†/‡‡3‰Š0Š8Š:‹‹|Œ1Œ2Œ2ŒMŒl ŽŽ<'‘Z’0’q“&“,”•5•p–(–*—A™™7™7™7™8œ2œi tžž$Ÿ0Ÿ0Ÿ4  ( _””B”E”¢&¢8¢8¢S¢S¢l£f¦N§ ©*¬(®®®®®nÆ<°C±X² “<“zµµ!µ&¶··p¹4¹QŗK¼I¼I¼{½½Y¾Gæ[Į=««°>„ ‡ ‰]‹@‹FX™;žS „W«IÆ&³J“*µT¹»2ææ6  ˆxœ”y£0£~±}±~²L¼I¼}½i½vÅ %‚<ƒV……†!†%†-‡I‰BŠ'‘E’ –`–t˜™›(žŸ;¢¤„(¦¦C¦o§&Ŗ3°G³"³N³t“¶,¶PĮ $n‚W‚}ƒO„H„`… …$…0††U‡‡xˆ&‰‰;Š2‹{Œ Œ"Œe 7GpŽŽŽ$Žz .;?Xs‘‘‘‘‘&‘A’0’4’;’t““9“@“\“g”””H• •x–x˜˜(˜9˜n˜n™[™h›r KXdhž*žIžrŸŸ/ # ( ? v”””/”4”K”c¢¢I¢_¢y£ ££9£z£z§© «U«a¬*¬*¬d¬q¬x­1­v­~®gƱ±±?±K±}²²² ²K³D“Y“_“e“n“pµµ/µU·7ø#øV¹>ŗŗ »» »"»&»b¼1¼G¼Y½ ½!¾¾nææ/Ą.Ą4ĄmĄuĮĆĆBĆSĆZĆoĆrÄÄ ÄÄ@‚ˆsŠ–/„«&‚ar}‚‚ ‚ ‚A‚^‚lƒƒ-ƒRƒUƒt„(„5„E„O„P„W„o…….…?…W…k…z†(†S‡,‡L‡T‡vˆˆ.ˆLˆYˆv‰ ‰‰(‰=‰R‰u‰w‰{ŠŠŠ*ŠQŠ_Šq‹M‹b‹p‹wŒŒŒ%Œ0Œ4Œb')KŽŽ*Ž0ŽBŽ|Jn>L\‘‘?‘^’?’I’u“““+“9“P“p“v”`•••!•?•Z•x– –––0–o–x——+—8˜˜˜4˜^˜l™I™mšm›'›>œ œE !BIZmžž0žnžŸŸ!Ÿ-Ÿ:Ÿ;  7 T \ ^ k”” ”J”_”{¢¢¢J¢W¢k¢{£E¤¤¤!¤f¤q„e§E§W§sØØ©U©w«%«K«[«{¬ ¬3¬?¬i¬i¬v­­1­U­k®A®MÆÆR°d°r±²²4²E²T²_²j³³³n³}“““$“1“7“R“\“v“}µ5µBµZ¶ ¶¶3¶P·(·B·S·nøø)ø>øF¹¹¹2ŗ#ŗMŗS»»%¼(¼6¼V¼a¼r½ ½)½@½]½p½{¾¾5¾O¾xæææ)æ+æ6æ9æDæMæĄĄĄ{ĮĮ#Į<Įk3 ƒ4ƒ6ƒ8ƒJ…fˆ=‹5<’›0œgžž$ž_ ? ?”<”h¢ ¢h«k¬]¬p­=­D­}®®D®m±J±a±q² ³“eµa¶2ø¹Z½¾8¾G¾]æ æeĄfĮQĮk„6%/2<CM‚‚"‚.‚;‚O‚W‚yƒƒƒ4ƒ6ƒ8ƒCƒEƒFƒIƒUƒ[ƒ\ƒiƒw„„ „!„!„"„#„%„'„)„4„5„l„m„o„w……………$…?…N…k…o…o…p…y†††!†*†.†/†<†J†O†_†h†i†n†n†t†u†x†}‡,‡T‡xˆˆ!ˆ"ˆ&ˆ5ˆ7ˆ<ˆ<ˆUˆ_ˆbˆhˆkˆmˆwˆ{‰‰/‰>‰N‰uŠŠŠŠ Š7ŠFŠxŠ}Š‹t‹zŒŒHŒOŒQ !$KŽŽŽŽŽŽ%ŽRŽ\ŽdŽiŽpŽz .XZ^_dirv(XX[‘‘‘‘#‘/‘/‘5’t’u““““#“:“?“h”E”E”L”U”q”t•&•+•R•Z•\•j•w•y––––1–1–]–o–o–q–t–z–|———%—'—(—-—?—F—T—U˜˜˜%˜'˜(˜,˜1˜2˜4˜?˜p˜q˜v˜}™™6™L™cšššš'š(š2š4š<šAšBšFšHšIšJš\šcšdšn›'›W›W›rœ$œ@œ^!8KX`emsuvžžž ž žžžžžž$ž.ž?ž@žAžAžAžCž\ž]ž_ž_žcžgžkžrž{ž|ž~ŸŸ!Ÿ.Ÿ;Ÿ<Ÿd   - _ s v x””””#”0”;”<”b”u”v”v”w”|¢¢ ¢ ¢¢¢¢!¢#¢$¢J¢X¢f¢h¢i¢k¢o¢o¢{£ ££G£_£e¤¤¤?¤X¤i¤l„„(„)„B„h„t¦¦3¦U¦o¦x¦~§§§§§I§g§j§lØØ©7©yŖd««« «!«"«*«-«-«.«?«G«K«^«c«k«m«z«{¬¬¬!¬"¬&¬.¬8¬:¬F¬T¬j¬l¬q¬x­­ ­­v­}®®AÆÆÆ_°V°v±± ± ± ±±±±±*±.±/±1±6±9±<±?±J±P±W±a±|²²²4²6²7²<²E²M²\³³³#³$³%³5³D³F³G³P³v“8“B“C“V“s“sµ)µ/µ3µ9µI¶ ¶2¶U··.·7·7øøøø;ø=øRøWøhøm¹¹?¹G¹Z¹\¹^ŗ1ŗFŗFŗNŗpŗzŗ|»»"»D»F»S»t»v¼ ¼¼1¼J¼P¼W¼z¼~½½ ½ ½O½Q½`½o¾¾G¾T¾W¾Y¾Z¾\¾h¾k¾n¾yæ æ æ ææææææ%æ.æ=æ>æIæeæpætæuĄ$Ą0Ą1Ą3Ą4Ą6Ą8ĄIĄLĄLĄMĄbĄfĄhĄmĄqĄĮĮ Į\Ā ĆĆ?Ä4ÅÅ$<‚lƒ9ƒIˆ;‹I‘.“<—DŸ<”<”l¢ £+£N«=ŗ ŗ1æzĮ]X##/8Aadfo‚}ƒ+„„ „9„O„Q„h„z„{……*…V…i…n…n…q†e†f†v†v†y†{†{†}†}†‡‡ ‡&ˆ ˆˆˆˆˆˆ.‰1‰SŠŠLŠ{ŒŒRŒ]/7mqŽ=ŽdŽg#KSr|’4“““!“#“9“:”9•k–B———V—[—[—[—\˜6˜t™™]šDšGšH58:OhžŸŸŸ(Ÿ.Ÿ/Ÿ5””!”=”u”w”}¢¢¢ ¢ ¢¢/¢2¢2¢4¢G¤¤u„^««««"«%«<«=«Y«c«c«p«q«w«y¬¬2¬9¬B¬F¬L¬P¬i­k­}®®®®°r± ± ±.±1²6²8²S³6³~“I“wµøøøø!ø"ø'ø?¹0¹0¹4¹;¹Aŗŗ%»»#¼½O½S½|¾C¾\¾p¾q¾æRævĄ4Ą9ĄMĄSĄVĄhĄiĄiĄxĮĮVĆĆ8ĆYĆÄÄ,ÄAÄqāĀ)=ƒSƒ^„ …q‡‡Š‹Œu"’]““:“\”–=˜?š/›@›A›C›D9ŸsŸtŸwŸwŸyŸ{Ÿ}   s¢¤R¤T¤Y¤\¤o„ „„)„s¦P¦r¦~§Ø+Ø-©>Ŗ@ŖVŖb«{®[ÆE°#ĄĮĮ\†<§ ƒ=…^‡P’R™œ&Ÿ¢Æ-0‚)ƒ9ƒ\…}†I‹xŽ:v.X‘N‘V”)›Ÿy”-¢¢[£¤6¤V„D¦n§ §A§\§|Øa©WŖ)Ŗ?ŖR­S®Y®h®sÆ9°°Jŗ:½½æiæzĄĄ…l…m…m‡‘P›b¢„M¦{§C§SØØ!Ŗ8ŖnÆ7°V°X¶U·xø&»RĄ …yŠ0”*›oœaŸNØ+ŖŖ)®®$ÄÄ ÄÄ=‹)‘T„q¦?¦U¦_¦h§+Ø}ŖXøø4»`°VælV!@…,†6‡‡‡7‡qˆˆpŠ ‹NA’Y—?—@˜RšFšUšy› ›› ›R›bœXœqŸ{Ÿ{  '¤\¤r¤~„~¦)¦b¦u§§_§`ØrØu©©*©?ŖŖ&Ŗ'¬YÆÆ1Æ\Æm°F°b±±:±E±y²²²{“µ|¶øX»»:»C»k¾&¾_¾uæjĮĮhĀĀ+Ā0ĀQĆpÅ‚BˆCbŽ’L“b•F•U—kš8¦«nÆl³$“µt·M·dø »Q¾Dæ7ækĀ  ˜/œ/„„W©?«L­ ®¾.mr‚)‚Lƒ_……x† †)†<‡\‡h‡oˆˆ+ˆA‹Œ|xHKT~8]‘#‘]’P““2“5••G•W•Z•s—˜5˜D˜E™™™j™zšFšVšg›7›fœQŸOŸ[  ”X”{¢¢&£1£o£|¤7¤M¤_Ø©^©lŖŖ/ŖG¬`­:­G­O­v®®GÆ,°°°a°}±n²0²h²z²µj¶··#·K·o¹ ŗ%ŗ;»»8¼A½&½S¾¾=ælĄĄ{ĮSĀĀ*œC®P¶~‚D‚U‚sƒQƒQ„„L„h…#…6…;†.‡(‡9ˆF‰|Š-‹‹8‹\Œ Œ'%"@x’’7““/“s” • •'•V•c–M˜<˜F™ ™H™k™pš<››*›2›wœœ!œWœt-LežžTžTŸŸ: ! R c”£G£k¤¤(¤l„„„3„@„WØØU©:©W« « «&«y¬H¬r­­­®(®1ÆÆÆIÆPÆ`°°2°4°N°N± ±"±-±q±s²%²)²|³*³@³E³F“vµ µ µOµrµ~¶(¶7¶:¶`· ··>·A·Zø`ø|¹ ¹W»¼½½e½pæ!æaĄ2Ą;ĄXĄkĮ:ĮQĀĀĀ:ĆjÅÅ~„h†:‡P•–›!œ0¤q¬c²)µj¶h»¼¼%¾Ą/~‚'‚J† ††=†N†w‡!‹(‹8’a•–b—š+š[›=›bœ/}ž:žd”z¢„8©1©KŖ ® Æ^°'°A°[³@µj¶`øø&»S¼¼½Y¾¾lĄa~ƒ|›-žL±]<}ƒK‡Z‹‹9‹<Žt’R”~•˜@™n››aœ"ŸŸN   s z”%”r¢£l£v¤+¤X„A„P„h§4Ø[©XŖ9ŖM« ««&­­­<­HÆÆ,ÆHÆm° °j²³#µt¶A¶x·ŗnĄĄkĮ--}Qƒs„o…g‡\‰g‹‹BŒu0|‘O‘\–}—\—^—`˜˜ ˜ ˜)ž1  G¤ ¦¦¦P§§§AØØ]©6¬"Æ.³'³;· ŗG¾oæ[Ā(Ā)}† †n†o‰9ŒŽ e“•˜N›fœ;ž&” ¢N¦#©c¬#Æ,µµ|·DĮ}}}†A|‚%‚*‚/‚1‚2‚F‚H‚I‚KƒM„„„ „2„6„8„i…… …=…>…Q…X…X…\…o…z…|…|……††† † ††††††††5†:†I†K†L†M†N‡‡]‡`‡a‡b‡c‡c‡e‡qˆˆ!ˆEˆMˆ_‰>‰b‰c‰g‰h‰j‰kŠ,Š0Š8‹‹‹‹‹‹‹*‹0‹0‹3‹4‹8‹;‹L‹N‹Q‹s‹xŒŒND[`cy{}ŽŽ!Ž+ŽpŽvŽ|CEIPRp !+,,-=F}~~‘‘'‘E‘H‘J‘K‘K‘R‘S‘^‘`‘t’’’’’’’’R’W’X’Y““3“b“m“n”””&”0”1”2”2”3”4••••••7•>•E•R•_•`•b•j•t––– – ––D— ——————(˜˜,˜/˜@˜C˜D˜F˜Q˜Q˜T˜X™™ ™™+š š#š$š%š)š?šFš]š]šwšxšy››››››!›#›-›/›0›:›>›?›@›E›J›J›K›L›L›L›O›P›P›Q›R›R›S›T›W›\›a›a›b›c›h›o›r›r›sœœœœœœ$œ)œ/œ7œ7œ8œ9œ>œBœLœSœYœgœgœhœlœxœ}œ~Z]_nržžž?ž?žBžTžVŸ1ŸGŸHŸIŸKŸLŸRŸRŸSŸTŸTŸUŸVŸWŸXŸ`Ÿ`ŸaŸiŸjŸoŸsŸxŸy    O ` q v y”””V”h”{”¢¢¢¢%¢&¢*¢,¢-¢/¢7¢8¢>¢?¢@¢P¢R¢U£££ £'£A£S£T£V£]£^£a£d£p£r£|¤'¤,¤.¤9¤:¤<¤>¤B¤J¤N¤c¤d¤z¤|„„„„„„ „ „ „ „ „„„„"„,„,„-„.„0„2„5„8„9„A„V„r„y„|„¦¦¦¦¦ ¦ ¦¦¦)¦+¦.¦;¦G¦I¦R¦]¦^¦_¦c¦d¦h¦l§ § § § § §§§§&§3§N§h§oØØØ!Ø2Ø3Ø4Ø8Ø>Ø?Ø@ØIØNØSØWØ[Ø\Ø^ØpØuØzØ{© © © ©©+©+©-©7©:©;©?©D©L©X©Y©f©g©hŖ Ŗ Ŗ ŖŖŖŖŖŖ Ŗ%Ŗ%Ŗ&Ŗ+Ŗ+Ŗ/Ŗ2Ŗ6Ŗ7Ŗ8Ŗ8Ŗ9Ŗ;Ŗ>Ŗ>Ŗ@ŖCŖEŖIŖMŖTŖ\ŖcŖeŖmŖmŖnŖtŖuŖ{«« ««E«L«k«l¬¬+¬A¬[¬]¬p¬p­­#­8­:­;­=­C­E­F­O­_­e®®®!®%®(®)®?®D®F®U®V®V®m®m®n®p®p®q®r®sÆÆÆ)Æ+Æ-Æ-Æ.Æ8Æ:Æ?ÆQÆTÆaÆdÆh° ° °°°°&°'°+°-°.°/°1°3°4°7°:°@°C°F°X°j°r°w±±4±5±6²²;²n²s²w²w³³³³³³³#³,³.³4³9³@³A³N³]““““B“Xµ*µJµKµ\µ\µ]µ^µaµaµbµr¶ ¶¶¶¶'¶.¶1¶2¶2¶3¶3¶R¶X¶i¶y¶{···_·l·n·r·søøøøø3ø4ø4ø6ø7ø8øEøJøMøqøqø¹ŗT»»"»+»5»<»<»C»E»F»G»G»J»L»T»^»_»`»e»e»t¼(½½½#½J½Y½[½\½]½c½t¾¾¾.¾8¾9¾]¾læææ8æ>æAæIæLæMæ_æfæpæqævæwæyĄ#Ą#ĄLĄ[Ą]Ą^ĮĮĮ%Į1Į2Į2Į3Į3Į4Į6Į6Į8Į8Į<Į@Į@ĮBĮBĮCĮCĮDĮGĮIĮJĮOĮQĮRĮTĮTĮZĮ[Į\Į^Į_ĮbĮdĮdĮeĮiĮjĮkĮkĮlĮmĮnĮnĮrĮrĮwĮxĮzĮĀĀĀ Ā Ā ĀĀĀĀĀĀĀĀĀ Ā Ā!Ā"Ā'Ā(Ā)Ā)Ā*Ā*Ā+Ā,Ā,Ā-Ā/Ā0Ā1ĀRĀU|‚*|‹‘o¶\^|ƒM„N……‡CˆˆA‰8‹A‹kŒ+Œ=ŒMy&E,’’7“ ••V––}—C™(™q™~š7šVšg›'›8œDœXfžŸŸ] R”>”U£&£P¤H„„2¦b©FŖŖ&Ŗ|«)«1­"­G®®G®_Æ)Æd°±s²S³M³j“0µ¶¶m¶{····gøLøqŗ:»»»f¼&¼5¼U½½%ĄĄ6ĮSĀ/Ā9ĀDz¦.z‚2ƒs‡‡d‹ ‹‹.‹2‘S“8˜B™m›(›,œ%vŸŸ~”f”|¢P¢T££¤=„2¦ ¦§>Ø.©©mŖŖ ŖŖ9ŖoŖy« ­L®ÆA¶B· +yƒd„R…ˆ]Œ`!i’ “I”1–––]˜?›3ž$žA”v¦¦9ØX© ©©#©R©lŖ3«w°>²L³Yµ5·ø7¾GĮOĀ,Ā0ÅÅy¦®,yˆe‹;%Ž{’’L“"š@ %¦ØF©:Ŗk«<ÆB²&¶¶søZ½_¾py–}Įey‚#Š+‹HY¶½>æĀĀĀmĀzĆ(Ć)ĆNÄ%ÅÅÅ<nyp‚ ‚"‚"‚(‚HƒƒLƒR„ †k†z‡ ‡ ‡‡D‡D‡]‡e‰?‰iŠŠ.ŠJHaŽŽŽ5‘’“I““”]••Q–šš š[[ŸŸŸEŸ` / D”o¢3¢O„`¦ ¦ ¦H¦I§Z§~ØV©g«*«mÆÆK°° °/°F°R°[°\² ²Q²Z²o³7³I³k³kµµµ0µJµW¶$¶$¶G¶u·#·#øøzŗ/ŗ/»»3»V»|»|¼½ ½(¾æĮ^Į^Ā=y‘F’©?»_xp‚!%’n2yžR”t­U“ø'ø7ŗ¾eæAævĮP)x†uŽaF ‘‘’n”˜Fy E £?¤9„oØ©9­#­U°&“µ/µ/øø)ø)ø,ø-ø7ø[øgŗæ æAæfævĄ4ĮPÅ7xææĮf x†‡Ž%’“8–{™7„®w°\xFb‚‚ ‚‚>‚^‚nƒƒQƒf„ „(„/„W…… ….††M‡>‡C‡^‡a‡sˆˆ ˆIˆ}‰!‰(‰=‹:D}––——+—?—d˜˜U™™P›!›>›oœRœl  7 c”F”N”U¢¢W£¤Y¦¦Ŗ« ««)«6«T¬¬K¬c­­"­/­R­|®!®*®+®oÆÆ:Æ_³µc·$·nĮfĮhĀĀ/x!%4FVao‚‚ ‚‚7ƒƒƒOƒmƒ|„„ „1„`„i…………#…)…=…@…z††*†M†U‡aˆ ˆˆJˆPˆ_ˆb‰‰‰+‰;‰J‰T‹‹$D}‘‘‘ ‘#‘.‘2––+–8–J–x——%—d—˜'˜9˜y™™d™h™m›!›>›nœ:œRœSœk  + > T Y ^ e {”””0”6”@”J”P”}”¢¢¢¢¢_¢k¢x££ ££]£^£e£q¤Y¦¦Ŗ« «¬ ¬(¬v­­­­+­y®®!®o®rÆ:Æ_°°³µc¶2·$·nææææ!æ%æ:æ<æ@æDæHæLæ_æzĮfĮhĮiĮkĀĀ/w„e‰y’.’/”U—@ž  £}„\Æ<±^³øxw‡?‹9¤?§tWw‚‚‚sƒ@„…<…V‡ ‡ ‡5‡sˆhT%GOSSc‘%‘’““-–––&— —˜A™^š8šGšp››&›Ngn <”¢:££r¤¤2¤=¤@¤J„„'„1„X¦&¦4¦d§§]©;Ŗ«:°°,²y³G³|µ¶u·· ø5øJøWøZ»g½¾M¾^¾iæ ĄĮĮĮ1awx1p‚‚ ‚'‚*‚H‚yƒ3ƒ9ƒKƒRƒ[ƒiƒx„……%…J…t…|†=†N†d‡‡‡Pˆ*‰i‰mŠ*Š*Š-‹‹-‹9‹^‹i‹q .0[ŽOŽuŽx ,5X‘‘?‘F’G“““!“3””)”P”o••Q•`– –&–=–O–c— —Y˜ ˜˜˜%˜'˜'˜L˜Z™2™P™u™{›› ››››0›Wœœ%œ:œPœ_œcœjœkœm[^kž žž>žAž`žgžpŸŸŸNŸy + 9 W ””1”c¢.¢T¢b£L¤T¤W„ „„„2„G„K¦U§§B§C§~©1©>©fŖ Ŗ ŖŖ;ŖR«9«I¬=¬Z¬y­­9­:­C­C­M­_®®(®0®nÆÆ-ÆMÆN°I°T°Z±1±B±T±v²³/³c³d“0µµfµsµ|¶¶=¶D¶G¶I¶k··!øm¹ŗŗ$ŗP»H¼¼@½½½½ ½(½j¾ ¾<¾{æææGĄĄ ĄĄ4ĄvĮĮ<ĮTÄNv–Cvdƒ*ƒOŒ{m!™Ÿ(¢¢WØØT©\«²U“æUĄ8Hv#/i‚K‚S‚l„2…;†Fˆˆˆi‰%‰bŠŠ&‹ZŒ:ŒXŒZŒt&Ž^>’ ’]’q’r’}“L”'™c™n›@œœŸv”” ¤„„=„u„~¦¦:¦I©IŖ Ŗ^¬¬¬¬v­1­K­b® °+“a· ·:·Z·m¹ĄHĄJĄwĮ-Į}4v‚‚ƒYƒk„e‡Mˆˆ&‰‹4‘$–C› ›-›A›xœ0œ7œAœYœ]œkŸdŸk ”C”m¢1¢G¢X£ £¤I¦©,©BŖ(«k¬[­X­|®V²mæuĮHĮjĮkĮvĀĀQv” v‡f)Ÿ£8¤T„E„O©EŖ:“µ ¶Sø~¾=ĮDĆĆĆĆĆ2ĆBĆ_ĆfĆrÄ Ä ÄÄ~"uk„J…w‡]‡fX:<‘A—gœ,œDœI„XØtØ{Ŗ«9¬s®9±y²=“vµk¶s·øIø{»½(¾<ĄĀ=u=uufu‚%‚3‚XˆU‰y‹<UŽ,x‘D’/’}“ “/•C•[––N˜9šUšr›"›+œœ@@Q]žŸŸŸn ”>”A”G££ £1£N£Q¤6¤:¤<„„%„W„\„i¦¦¦&§§[ØkØt©+©>©V©j«I«v«~¬ ­­­"­^®;ÆÆ2°°N±±±C²²,²U²_²d³³³MµµOµZµ}¶z· »»(»3½Xæ/æ7æhĄ[Įwu—hssP©Z s‘V6£}„„§nØj¬ ²%¼y½eæDsUs478LM‚‚Y‚e‚o‚sƒ#ƒ#„„„„…V…†J†k‡`‡n‡s‡v‡xˆˆˆˆˆ!ˆTˆZ‰‰ ‰‰‰‰ ‰1ŠŠ1ŠpŠs‹‹‹/‹qŒŒXŒvŒx-ŽŽŽ+Ž7(.05BIOy{<?~‘‘n‘q’’’c“““|”5”N”Q”x”z••)•{–i——— —%—@—z˜#˜%˜W™™™8™W™^š0šYšfšy››4›N›Pœ9Lž(ž,Ÿ   }””””0”:”=”V”X¢¢¢£*„2„b¦@§3§w§x§|«>«H«N«R«u¬:¬R¬d®F®_Æ)Æ4°°°O°Z±²²-³D³Y“““!“K“L“p“sµ)µ/µ5¶$¶=¶J¶K¶b¶m·"·7·D·d¹Aŗ»+»7»k¼$¼O¼i½ ½½U½[½u½~¾ ¾¾ ¾c¾uæææ?ĄĄĄ Ą<Ą_ĮĮ6ĀĀ Ā,rŠJ/^ŽbŽx“ “”—M¦ ¦Q«[«w¬,¬0³PĄr r‡h‹(›%œ%œ>§5Ŗ ­5°¶øø2r˜Vr†‡>?r N‚u„z†y‡‡3‡k‰#‹5Œ&Ž su‘ ‘6‘~““]•@–8–a—7š›pœ;œiLNžu¢G£Z£i¤_¦?¦y©{«N¬1¬7®±³@“tµ'µ<µTµnøø"¹WŗD»N¾)ĄUĀÄRÅ(ÅFqqqqZ›œJ¤A§3Ø`ØxØ{©ŖÆg³^æ+q„;Pq‚(„f‡‹AŒoŒym ,’k“b•••E•L— ——› ››*›/œ)œ+œ?Q Y£0£P£~¤¤¤H¤^¤f¤u„§§ŖBŖF¬x­"®+Æ1ÆY°±x²²/²³M³`³oµµTµx¶¶ ¶¶h¶}··høøM»»D¼&¼a¾ææoĄDĮĮ,ĮQĀ/qopdppl‚„›z»k¼½cp0p a‚(ƒ9ƒ=…hˆˆ(ŠKŒŒ!Œ!UŽŽ=‘‘g’>›œvYžž[¤&¦FØBŖ;«,«1«P°“1“8µ=¶'¶=ŗ»q½.ætæxĄĄ"ĆĆo1o„3Ødoo“{••/ooĮK"nƒi‡_‹Œk!Ž{|‘4‘p’’V”&•r˜B˜q›gœ%œož:ž]”f¦§Ŗ « ¬!ÆB°,±uµµ[¶R»}n‹n‹4nµ|nÅ=mm|m‚U®'¶}m› mˆ@ ”W£U§.©©iŖ(l ),S‚{‚}ƒ.ƒ<ƒmƒ}„„ „{……5…H…u…u††CˆzŠY‹YŒŒ qŽŽ ŽŽŽ<24 #1:b‘E’4’q’t““S””O”^”q–2–5–i–k˜u™OšDšEš\›=›G›cœw sž"ž)žOŸŸ4ŸW  e v”n¢¢0¢B££G¦(§/©|«Z¬g­­+®lÆa± ±S±U²h³A³H“Y“t¶P·¹6»L»v¼<¼}½!½v¾ ¾Z¾d¾n¾z¾æ!æ&æWæeæuĄĄZĄnĮ Į<ĮaĮb l†Š‘c”–D˜nš>ž:¬ ±ŗ lˆp©Æfl(l„ Š'‹,>“•A–B—<1ž ž* o”'„w«d¬=¬D°p±±I²+¹½¾¾ ĄÄKl”žkˆB]’?“a”\–›*›yœ*œ3 R”`­c® ®E®Q®z±q»+æk‚&ƒH„8‡EŒx˜Vš~››¤@§wØ]µc¶%¶kø{kw‡Z˜B››wœ œ/ ”;¢`¤'¤(¦©-©3°]²m·@¼¼¼:Ą>kšqØ^Æd±n²u¶%{k"l‚L‚P‚tƒhƒx„„„l„v…]…]…y††‡‡ ‡ˆˆˆ(ˆCˆr‰L‰r‰v‰|ŠŠHŠHŠH‹‹‹,‹-Œ|\!()DHHR":O‘R‘S‘X‘X‘b‘k‘s‘w’’’’’Z’n’~“!””””]”o•E•G•\–f——+˜[˜[™™™"™R™z™{ššššš#š#š#š?šE› ››8›F›T›X›}œœœnž žž[žfž}  $ / L M” ”-”W”X”g”r¢"¢"¢9¢@¢H££h£o£¤E„„7„8„9„@„H„v¦¦¦!¦%¦*¦5¦9§§pØ*Ø,Ø,ØaØeØhØoØqØx©©©©©$©(©J©R©_©d©e©iŖŖŖŖ Ŗ-Ŗ/Ŗ5ŖSŖ|«8«|¬¬¬D­q®®m®qÆ=Æ@ưP±F±G±X²²0³7³8³8³>³|“<“Rµµ^µm¶¶¶¶!¶)¶3¶H¶I¶S¶[¶]¶}·· · ·!·pøøQø}ø~¹¹ŗVŗ\»6»A»O¼ ¼$¼+¼@¾"¾=¾K¾kæBæOĄ7Į5ĮlĀ9ĀHĀOkœ §Øq°k‚tW›%œ"£4©©©©©©!Ŗa¹Į,k=j}E‚t„†N‡g‡pˆ>ˆU‰‹YŒ]ŽmM’R“ ””5”x—C˜Yš8šUš\›>›y@¢-£££t¤T„%Ø^Ŗ9«f¬¬n­I®NÆ,ÆH±±p²u³j¶%··Dø&»j¾¾æ7æhĄ]ĄaĮ}Ā+jŽ,ŸĮ}jŗl½# jŽ+›}o¤F§§lØ$©©°»vj„‡fšš'šA›+Ÿ„R§§ ­¶I¶]»O¾jŒ›+Ÿv„{¦E§§{ØdŖŖQ­®?Æ_¶I·i,‚0ƒYƒvƒw„N……g†v‡‡‡9‡>‡D‡cˆTˆm‰‰‹ Œ>ŒbvŽ-O‘‘ ‘e’E’P’\“/”o•9•V•g––*–-–9–b—— —%—H˜˜|š<›"›E›Lœœ>œHœX<pzžžLŸ+Ÿ-Ÿ-ŸS M z¢)¢8¢:£/¤-¤:„V§ØQ©1©OŖJ«¬-¬6¬r­­1®®4®;®J®L®Y®]®j®u®}ÆÆÆIÆPÆ^°#°'°[±n±s²%²Z²g²{³C³j“µFµpµ}¶¶A¶E¶H¶p·K·Xø0øg¹¹&¹:¹Aŗ*ŗ=ŗX»)»j¼5¼]½e¾)ææ2æWæzĄ.ĄuĮ%ĮXiP~ƒƒ-ƒ<ƒu„H„l……6…}† †d†g‡ ‡/‡>‡fˆˆ)ŠŠO%7LŽ`p{5W}‘A‘e’E”]”s•%•x•y– –*–-–Q˜všš0š=šCšJ››Y"syžžLŸŸ Ÿ1ŸVŸjŸl 4 N”¢A¢H¢]¢f¢n£££U£f¤#¤-¤t¤}¦¦¦§L«C«M«o«s¬¬$¬,¬1¬U­Z®®KÆ<°(±±W±²²7²a³³³0³jµ¶¶¶H¶Y¶p··/øW»)»f½¾X¾zæææbæyĄ=ĄUĮĮ Į0ĮPĀ"i«x“>i i›BŸe©7·p¹^¼|½ZĮHi…“ ˜>šEš^›B›U%VŸd”¢©7ŗ$»@½ZæĮH h†ŒSŸ( §X°9±µ9ĄĮxh‚‚‚^ˆ ˆ*FL“––-šu¢$„Jø6»xhr~‚0„„(„U…y†† †J†O‡‡A‡aˆŒ~ŽrN#.9‘J’ ’”y•D——˜>˜F™™™!™ršššNšj›››#›-›F›{›~œ$œ+gŸŸDŸl¢6¢?¢Z££0£m¤I¤U„6„M„t„x¦¦¦,¦>¦D§§F©)©dŖŖŖ)Ŗ0Ŗ;«G¬­%­=­H®®bÆ_ư8°B°H°R°v² ²²1²U²t³lµ¶6¶=·#ø3ø5»7»9»S»]¼¼½[¾¾$æpĀĀ Āh®P¼hlP”y˜NŸ]Ø Ø{.hx/0‚+‚K„$…q‡|ˆ%‹.Œ}x‘o‘p‘q’’’U”–q˜q¢¤¤V¦e¦f¦~§zØn©,ŖŖŖYŖ[Ŗ_ŖbŖgŖiŖsÆ@²vøV»XĄ=Ā@h‡ h‚†4‡ ‡~”^¢,©©¾jg‚ƒ „h† †G‹1V]Ž0Ž[‘V’ ”z——››%  £„1Ø Ø2Ø[©©©¶¹Ąrg†“#™9ž&¦r§UggšĄrg‘\”z°ø gšNÆ,g‚"„)„l…V†-†7†C‰Š ŠOŽS.0Q‘.‘h“7“b˜š|››Eož6”v¢¢P¢£ ¤¤¤m„«+±S²[³¶ŗ%¼PæPĮ6ĮM g‚‚D‚b‚h††E‡ˆ)ˆ)‰R‰uŠEŠF‹‹"‹"‹}ŒhKLr+‘O‘Z‘u‘u‘u‘~’ ’A“,”'”)”R”••N•x—M˜>™(š)š+š-š1›Wœ9œaœiœoŸ"Ÿz '”” ””n¢¢A¢O¢_££)£e£f£g¤N¤O¤P„U„o¦ ¦§fØØ Ø$Ø/ØbØ~©)©9©CŖcŖoŖtŖ}« ¬¬E­® ®7®]®i®uÆC°"°#²³"³$³&³1³gµm¶ ¶!¶-¶.¶B·$ø¹¹Qŗ »»I»M¼.¼J¼y¾¾1¾aæ"æXæ_ĄbĮ>ĮaĮjĀĀĀÅ6 g„k…)‡dˆ‰/‰]±/³_lfEVin‚‚‚‚A‚rƒƒYƒ|„„H„N„W„g„k„p…… …………#…)…7…<…@…Z† †(†3†@†S†b‡,‡7‡<‡I‡W‡d‡vˆ ˆˆ0ˆ9ˆYˆkˆv‰‰ ‰#‰/‰8‰R‰]‰yŠŠŠ4Š@Š^Šq‹‹X‹iŒŒŒŒ+Œ0Œ@ŒMŒVŒY )?EKT`tŽ ŽŽ$Ž*Ž@ŽDnI|‘‘+‘D’–––/–@–i——-—2—;—C—Y—g˜˜˜4˜R˜^˜i™™ ™H™Z™m›3›W›X›mœ -@FIžž%ž0Ÿ-Ÿ? ”{¢R£_£}„„„'„0„\„h¦+¦5¦l§ØAØH©:©v«¬¬ÆQ±/³+³_³j³n³}““ “$“&“)“0“;“H“N“W“Y“\“j“}µµ µµ5µNµ\¶ø¹¹!ŗŗ-ŗ8ŗS»»!»W¼(¼0¼5¼8¼U¼\¼d¼r½½%½@½]½e¾D¾O¾o¾xæ+æ9æ<æ\æhĄ ĄĮĮ<Į@ĮOĀ ĀExfEVin‚‚‚‚A‚l‚rƒƒYƒ|„„!„H„N„W„g„k„o…… …………#…)…7…<…?…Z† †(†3†@†S†b‡,‡7‡<‡I‡W‡d‡vˆ ˆˆ0ˆ9ˆYˆkˆv‰‰ ‰#‰/‰8‰R‰]‰^‰yŠŠŠŠŠŠ4Š@ŠQŠ^Šq‹‹Q‹X‹iŒŒŒŒ+Œ0Œ:Œ@ŒMŒVŒY )?EKT`ŽŽ*Ž@ŽDn=I|‘‘+‘D’–––/–@–i——#—-—2—;—C—Y—f˜˜˜4˜Q˜^˜i™™ ™G™Z™m›3›W›X›mœ -@FIžž%ž0Ÿ-Ÿ> ”{¢R£_£}¤<„„„'„0„\„h¦+¦5¦l§©:©vŖ!Ŗ"Ŗi««x¬¬@ÆQ±.³+³j³n³}““ “$“&“)“0“;“H“N“W“Y“\“i“}µµ µµ2µ3µ5µNµ\¶ø¹¹!ŗŗ-ŗ8ŗS»»!»W¼(¼0¼5¼8¼U¼\¼d¼r½½%½@½\½e¾D¾O¾o¾xæ+æ9æ<æ[æhĄ ĄĄwĮĮ<Į@ĮOĀ f˜'˜'™eœA«=ffĀf‰z“#©V¹Į-f ’$› ›N\ 9„¦%Æ(±C²nµs¶ø»½X¾,æbĀS~e‚I‚WƒHƒIƒ\…R…R††u‡‡‰‰e‰r‹*‹T‹UŒy.U‘d’ ”””)”*• •<™™/™8š š%œvžžž-ž.ŸŸm”m£ ¤¤#¤<¤A„9„A„D„t„~¦ ¦'¦+¦5¦;¦E¦F¦a¦g§§§;§<§\§p§qØ,ØAØ\Ø_ØaØg©©©©$©(©S©}Ŗ Ŗ4ŖRŖ|« ¬ ­®V®h°°2°C°G°X°w±±W² ²³.µbµr¶y¶{ø3ø}¼ ¼ ¼E¼U¼]¾S¾dĄXĮĆCĆDÄÄ'Ä\Å<ÅAeeƒ}¾#eXe… ˆ,¹e‡)‡G”F««M­@®J®f¶L·øp»n¾,cc c‚›žcØ ©!Ŗ°æjc†5‹‘@›Ą[ b‡o—›D ,„7Ŗ¶9ø| brƒƒƒƒƒ$ƒ5ƒ@ƒT„…V†B†yˆŠ{‹‹-6?Ur‘9‘H’’8’D’u”””*”@”b•~•–K–\–]–^–s–u——;˜*˜7˜P™W™fš'šd›.›i›m›rœc$ž^žzŸŸW T””””0¢)¢)¢@¢C¢E£`¤9¤t„*„V„p„{¦¦¦¦¦!¦)¦-¦-¦.¦S¦f¦{§'©;©pŖ4«K«N­®%®3Æ@ÆBÆIÆK°H°\°y± ±.±5²t“~¶&¶[·2ø"ø5øWøZ¹¹7¹W¹h»9¾H¾]æ ææeĄ6ĄNĮĮ%ĀĀĀĀĀ Äpb‚†4‡b‡Ab‚‡A‘D“{—g™sš› œ¢,¤¤5„L¦ Ŗ««-®x²a³µy· »¼6æcCbb‚<‡!ˆo‰VAhŽ*’’|“,“c”3”\•V˜Mš<šz›› œC Ÿ8ŸB£P£v¤+¤6¤|„ ¦©?©L«"«&­­®8®S®a®}°a²)²?²l²y³cµµb¶M¶v·]·h·mø½$½a½h¾%¾*¾6Į$Į}ĀĀNb…*‡‡@‹(•œ*”m¤+¦¦2§«7«8¶M»w¾*æ,Vamp:†‡@‡nŠ9ŒC\Zr'‘S‘]”)”\••F•M˜i™ ™ ™Kšš:šu››››%œ$œlœvœv!žMŸŸŸX i y„„@„U¦ ¦b¦z¦§6§`§qØ(Ø0ŖŖFŖIŖKŖ|«)¬|®Æ?ÆN°°Z±E²³#“`µ)¶e·k»»*»9»R»q¼!¾^ĄĄkĀ ĆTĆZca‚ ‚*ƒR†5‡‡I‡\‡`‡pˆo‰WŠ8Š:ŒRŒgŽL R’’}• •r———˜B˜\™™(™3™G™i™šš(š7šUš[›$›7›M›h›|œœ%œRKzŸŸ[  !”>”z¢)¢M£`£t£u¤¤¤G„~« «k¬o®!Æ&Æ2Æ:Æm°!°f±T±n±u±y²?²g³ µ µIµo¶¶løKøl»»»U»X¼¼!½8½gĮWabjƒQ„„F††)†3†Y‡*‰LPš|›o›~pžIŸ S¤E¦,ŖA²=ŗ»i¾va‚‡)§s®O¼S¾a”w™a‚L…‡‡e‹S’H›o¦+§(§Q§cŖ)®$®+° ²w a‚’G“y” §­®E³9¶yø2»6 a3‚uƒzƒ|^”]™: ØWØW³C`„‡%]’.˜.›%œ)”B”z„UØ>©/­­5­¶l¶~ø2øKø{¾$æ"Ā< `$†{‡A‘q››jœ,oØGŖŖ\`Ž,„L­)µy· Ąa`„%’’]’v“N” —{£u„ØD©o³/Ą`„…pŽqŽudš~œ,¤C§o©4Ŗa¬!­6²0³k»}¾DĮAĀ*ˆ<`efsw$--}}‚‚'‚)‚+‚1‚3‚4‚;‚M‚N‚N‚}ƒƒ1ƒ2ƒ=ƒJ„„„$„&„/„1„2„3„4„6„8„O„^„|……………=…[…x…}††††††††††:†<†F†G†H†O†P†P‡‡@‡I‡^‡kˆˆˆˆˆ,ˆ9ˆBˆCˆDˆFˆ[ˆ\ˆpˆt‰8‰`‰b‰e‰i‰l‰p‰q‰s‰v‰wŠŠŠŠ#Š$Š(Š)Š,Š.Š/Š:Š:Š;Š<ŠBŠDŠFŠGŠj‹‹ ‹‹‹‹‹‹‹ ‹"‹#‹#‹%‹'‹.‹/‹0‹2‹3‹6‹A‹C‹J‹N‹N‹S‹pŒ Œ!Œ{Œ}Œ)..ASU`apxz{|ŽŽŽYŽv'*,26::;>@@BBCIM      &-.7>xy}‘G‘M‘N‘Y‘Y‘\‘]‘`‘`‘c‘c‘f‘j‘j‘j‘k‘l‘m‘n‘n‘n‘s‘y‘y‘{‘|’’’’’’’ ’ ’ ’’’’’’’’’!’$’%’%’.’K’O’V’W’}’““ “3“4“J“J“m“n“{“|””””””””” ” ” ””””””””””"”%”&”'”(”*”*•••"•&•/•:•=•@•C•J•O•S•^•a•c•g•i•k•l•v•––––– ––0–0–3–}— — ——————8˜=˜=˜L˜M˜T˜V˜`˜i™™™ ™ ™™™™™ ™%™)™1™=™>™?™?™C™D™G™O™S™t™t™x™y™zššš šššššššš!š"š"š)š*š,šBšZš`šdšrš|š››› ›'›(›9›:›:›G›J›S›V›Y›[›`›c›e›qœœœœœœ&œ(œ*œ7œ:œ=œ@œAœCœJœOœOœOœPœYœ^œ_œ_œaœcœhœoœpœtœv#9BSXY^`efzz||~~žžžžOžxŸŸŸŸŸŸŸŸ!ŸHŸIŸLŸMŸdŸdŸeŸhŸlŸmŸxŸ            " & - 2 9 e o p u x y”””””””””&”.”.”/”B”U”V”X”f”h”s”~¢¢¢¢!¢!¢3¢8¢<¢=¢N¢N¢S¢S¢U¢n¢n¢r¢u¢w££'£*£+£1£L£U£X£a£a£b£d£f£g£m£n£n£o£p£s£{£{¤¤¤¤ ¤ ¤#¤6¤:¤;¤@¤C¤I¤J¤K¤M¤R¤S¤[¤\¤]¤d¤g¤j„„„„„ „„„„„ „!„&„(„.„0„5„<„D„D„I„J„L„O„[„`„{„~¦¦¦¦¦(¦)¦*¦0¦<¦@¦C¦N¦N¦a¦c¦f¦f¦l¦m¦n¦o¦q¦t¦t§§%§%§N§PØØØØØ"Ø#Ø#Ø$Ø.Ø6Ø=ØAØKØOØUØYØZØ[Ø_ØkØlØw©©©©©©$©3©=©=©A©A©E©H©H©M©S©T©U©Y©f©m©ŖŖŖŖ Ŗ Ŗ ŖŖŖ$Ŗ.Ŗ4Ŗ6ŖGŖYŖ[Ŗ_ŖeŖhŖiŖnŖsŖw««««« «««+«7«D«F«n«o«~¬¬¬¬@¬A¬B¬C¬X¬Z¬[¬\¬q¬­%­&­&­'­(­)­.­5­7­7­8­9­=­>­?­@­C­D­I­K­M­N­P­U­g­q®®®® ® ®$®'®'®+®0®8®9®>®@®A®F®K®U®W®Y®^®_®c®c®h®j®o®rÆ Æ'Æ3Æ3Æ3Æ;Æ<Æ@ÆDÆDÆMÆ\ÆaÆeÆf° °°°#°(°+°.°0°4°5°7°<°=°?°C°C°E°F°G°L°L°S°T°W°i°s°s°t°}°~°~±±$±4±7±v² ²²²²*²,²0²n²p²r²t²u²w³ ³ ³ ³³³³³³ ³*³+³3³4³7³:³:³>³N³R³S³Y³]³c³c³n““Bµµ[µcµeµuµyµ}µ~¶¶¶,¶-¶/¶/¶0¶0¶;¶A¶K¶Y¶m¶q¶r¶~·· ··"·"·"·&·m·r·øøøøø ø/ø2ø7ø7øBøIøMøxøzøzø}ø¹¹¹¹ŗŗb»»»!»(»>»>»?»@»B»C»I»I»J»L»[»[»^»k»~¼¼¼¼ ¼9¼V¼w¼}½½ ½6½S½X½a½b½e½g½t¾¾ ¾¾$¾%¾(¾,¾9¾=¾M¾\¾c¾d¾e¾f¾j¾qæææ"æ1æ:æ<æ=æ@æAæDæEæHæIæTæbæjæræxæzĄĄĄ!ĄĮĮ+Į/Į0Į1Į2Į3Į4Į>ĮEĮEĮKĮPĮZĮ]ĮaĮbĮcĮfĮfĮgĮgĮhĮkĮnĮqĮqĮqĮwĀĀĀĀ ĀĀĀĀĀĀĀĀĀĀĀ$Ā$Ā%Ā%Ā'Ā0Ā1Ā3Ā7Ā7Ā;Ā<ĀEĀHĀIĀLĀMĀSĀTĀUĀVÄn`Fƒu„E†*‡!‡7ˆJ‹~—›> L”¢=Ŗ« «s0^¾AĀfĆ ĆĆĆĆ Ć#Ć%Ć5Ć?ĆAĆAĆMĆSĆSĆTĆUĆVĆXĆZĆZĆZĆ_ĆcĆeĆeĆiĆsĆsĆuĆwĆwĆyÄÄÄ!Ä#Ä#Ä.Ä/Ä<ÄIÄJÄNÄVÅ^„\‰[Q’*–˜Jœ £$„P„P„mŖ?ŖQ«­ Æ$³¶øv»0¾AĮ)lW0t‚‚‚3‚L‚fƒ ƒ ƒ„ „O„z„}…/†6†U‡‡%‡E‡TˆŠŠ=‹VŒŒ&Œ(Œ:ŒA )KqŽŽŽŽŽX)e9>OY‘;“2“>“S“^”” –J——K˜˜˜c˜u˜{™Hš.šcIžhžs  ”,”Q¢££'©A««<«F«G«o¬<®Æ'²³@³o³s““Fµµ·QøP¹ ¼i¾E¾c¾gæpĄ"Ą*Ą,ĄUĄxĮ U†‹S¶\Uƒ6U();MNPSW‚'‚+‚[‚[‚l‚p‚p‚yƒƒƒƒIƒx„ „„„„R„i„q„r………………G…J…L…N…O…\††@†N†_‡E‡wˆˆˆˆbˆ}ˆ~‰‰‰&‰oŠ ŠD‹‹‹‹‹"‹'‹;‹D‹O‹P‹T‹^Œ3ŒXŒbŒcŒcŒjŒlŒmŒuŒ}HSdŽŽŽ Ž Ž ŽŽ=ŽOŽ]ŽsŽwNQSW`abb(r‘F‘L‘N‘O‘O‘R‘S‘T‘U‘U‘Z‘o‘p‘p’ ’.’z’“,“I“[“g””3”W”t•)•-•y– –-–Z–]–`–c–f–q–|——A—E—O—j—l—m—n—n—o—o—q—u—u—u—}˜˜˜˜ ˜*˜*˜^˜f˜f˜h˜m˜o˜q™™™9™W™\ššš/ši›'›3›WœœœEœJœgœ|JMNNOPž ž ž>žFžFžMžQžXž_žfžižižlžpžpžqžsžuŸŸ<      0 k {”” ” ””-¢¢ ¢0¢B¢C¢T¢U¢g¢o¢p£¤N¤P¤o¤z¤}„„<„J„J„T„{¦¦ ¦¦¦@¦y¦z¦}§/§6§P§Q§yØØ/Ø9Ø@ØmØn©>©D©U©tŖŖ Ŗ#Ŗ2Ŗ2Ŗ4Ŗe«E¬¬¬<¬@¬Z­­L­W® ®®0®9®A®Y®pÆ ÆÆ(Æ/ÆDÆFÆOÆVÆÆ°°°@°y± ±²/²s³!³!³!³"³-³3³?³O³T³W³}““2“2“I“VµH¶ ¶1¶1¶P¶V¶Y¶r······&·1·2·D·p·q·r·sø"ø#øMøWøe¹¹¹¹7¹:¹=ŗŗŗ ŗ ŗ ŗ%ŗ/ŗ/ŗ1ŗ5ŗ8»»N»X¼<¼E¼K¼N¼e¼~½½,½.½.½|¾¾#¾2¾S¾]¾a¾e¾{æææ,æ.æ2æ3æ3æ4æ[æ\æ]æ^Ą(Ą.ĄFĄJĄJĄvĮ ĮĮ.Į2Į>ĮTĮdĮrĀ Ā&Ā<ĀDĀKĀjĀnUWŠ ž°W±lTˆz‹@°E½!T‚b¼e#T^‚f…Gˆ%Š’7’b’d”[•–9™]™_ž+£B§q­R““jµ*·Qŗŗŗ0ŗD¼;¼IæGæ[ĄĄĮ ĆNÄ JTjpj‚‚B„„ †/‡D‡D‡GˆˆEŠX%XŽŽ`ŽdŽi“,” •/š›œœ#žB”Q¢M¤#¤g§5§Z§`§p§s© ©©9Ŗ ­ ­A®?®H®_®uÆK°°2°O²@²S³ ““jµµ,µq¶%¶z··ø'ø=»¼¼f¾¾eædĀ'Ć,wTUNOeeƒƒƒ`ƒ}„…B†_ˆŠ'Š,Š7‹IgR‘L‘m’s•'–-–9–|—O—^—m˜6™X™tšg›0›:œ:œ=œOœSœg$^hžž*ž:žEžTŸm # 1 o”!”<”z¢=¢G¢]££T£Z¤[¤~„©/©|ŖŖW«d«f¬`­]­`­v®®®>®U®^ÆDÆQ°O°Y°\±±Q²² ²u²u³“~µm¶0¹¹¼,¼D¼G¼H½¾¾¾5¾Rææ'ĄĄCĮĮsĮĀĀĀ5TƒcŠ Ž[¤/ SUlА;‘P”'”9Ÿ`¦`§>±5¶~3Sv‚K‚S‚xƒƒ„„„2„L…$…3…\…b†Fˆ[ˆ]ŠŠ,Š6‹ ‘;’]’r“L•z–9–_——M—q˜˜˜TœBœDœFœL6LžŸD < E h”” ”££'£0£z¤¤2¤r„)¦b¦uØØ+©sŖŖŖŖŖj« «f«h«u«|¬¬ ¬4¬N¬[¬v­­1­G­K­b® ®$®-®3®A®TÆÆÆ Æ+Æ;°°+°L°d°l±±±±1±C±]²²²F²_²{³“=“V“j¶¶ ¶'¶7¶;¶W¶`··· ·:·Z·q·tø øø!ø)ø4ø8ø>øUøUøVøVø[øz¹»I»b¼ ¼¼¼¼,¼9¼D¼K¼R¼\¼a½½l¾¾ ¾,¾9¾Sææ)æ/æ?æIæMæWæ{Ą ĄĄĄĄ#ĮMĀĀ;ĀS Sˆb’k”.——š`®“DøBĮ ĮLĮjkSlx‚ƒ„…… …!…b…z†L‡<‡]ˆ+‰V‰j‰nŠI‹9‹U‹iŽ-‘%‘K’’c“a”}–u—Y˜@˜Uš4š|››=›@›g›h›yœHœYœ]œymŸIŸS F¢¢Q££e¤¤B¤P„„4„@„o„q„w¦¦ ¦¦u§§O§Z§d©4©CŖ?«Q¬5¬r­=®®;ÆIÆdÆl°°2°E°i³&µ~¶·&øøøf»»e½½\ææ%Į;Į@ĮXĮbĮdĀĀS¼wRR[R`-23LPZZ^‚)ƒƒTƒh„g„|………&…/††††-†<†d†e†n†v‡‡‡‡1‡>‡[‡hˆˆˆ7ˆ9ˆMˆ~‰L‰b‰q‰yŠŠŠ:‹:‹p‹ŒŒ"ŒRŒXŒXŒl.8Ž|1QRT(8bk‘ ’’#’3’Q’s““3“4“J“c“”Q”[• ••@•E•U——L—S—a—b˜0˜E˜a˜c™™2™;™G™~šš(›8›V›yœœœ@œAœWœ{œ}{ž žCžYžpžtŸY     _ r” ”¢!¢"¢<¢F£&£c¤2¤:¤;¤|¦ ¦ ¦%¦z§H§c§o§yØ5Ø<©H©U©\Ŗ5ŖeŖnŖ|«,«G«f«s«v¬ ¬*¬0¬A­­M­U®fÆHÆd°(°A°E±²f²p³ ³!³1³c³|“““<“=“Vµa· ·v·~ø7øQøq¹Wŗŗ5ŗ8ŗ@»*»8»W»w¼Y¾8æAæqĄBĄaĮ/Į:ĮRĀ*Ā3ĀQĆ3R°$RˆZ‘e’–\„OŖR™«h[QRƒ8ƒ9ƒ9ƒT…W…y†.‡?‡Jˆ ˆ<ˆL‰‘3‘g“2ša” ”=”M”a¢ ¢C£S¤¤o„2„F§ØØ~©©©ÆÆg±!±L²³æeæzĀ2ĆĆĆĆĆĆĆ)Ć,Ć1Ć2Ć6Ć:Ć;Ć<ĆCĆCĆMĆOĆQĆSĆTĆXĆ]Ć`ĆaĆaĆdĆdĆiĆlĆqÄÄÄÄÄ2Ä=Ä?Ä@ÄBÄCÄEÄJÄ^Ä_gQ~9Ta‚&‚I‚[‚cƒ$ƒ]ƒ^„"„8„q„v„{……3…5…7‡‡CˆC‰#ŠŠŠ)Š;Š<ŠKŠLŠsŠt‹XŒŒŒŒ&Œ4-ŽŽŽdŽkŽoŽqŽwŽ}+p58<OR‘B’’#’l““E“G””””F”l• •$•[•w––B——4—=—[—[—\—^—o˜|™W™_™_™{ši››Y›~œ!œ&œP 1Zgž ž žžžsŸbŸu # ( 0 0 5 ? b k t w ~””!”'”p¢#¢;¢N¢x£ ££r£|¤ „M¦ ¦+¦Z§%ØØD©X©eŖ««««!«-«3«E«P«Q«T«]«]«^«l«p«t¬¬¬¬ ¬ ¬¬¬¬2¬3¬Q¬T¬U¬q­®9®~ÆMÆaÆi±±.±/±[²,²?²O²W²p³H“1“iµ µG¶M¶e¶q¹¹¹;ŗ¼=¼G½ ½½L½o½yææ æææ&æ^Ą/Ą_ĄnĮĮĮ0Į~ĀKÄÄbÄpÄuÅÅ2ÅEÅHQ©b©q©Ą@QØ4Q „}§ ŖF¶|gQ "0c‚‚7ƒ@„v„{……?…Q…z†U†u‡‡‡Rˆ_ˆ`ˆi‰‰‰‹U‹Z‹^‹tŒŒ ŒQ'‘7‘?‘z’’’s“ “B“J“^––{— —p™`šš&œ7zž>žjžrž~ŸŸŸ`Ÿx ””`¢B¢S¢X¢g£a„^¦¦0¦E¦P§§'© «F³,³D³z““7“o·mŗ*¼¾g¾zæ ææ@æ`æxæĄ!Ą5Į ĮĮ>Ā%P”­OIPZ]ev‚,‚4‚:‚fƒƒƒƒ%…†6†r‡‡%ˆ5ˆTˆVˆ`‰‰%Š+ŠjŠ}‹"‹Y‹}ŒŒŒŒ'Œ=GIŽ=12Vs‘‘’ ’’r“J”9”;”C”b•?–*–-–9–M–T—%—d—h˜˜ ˜e™™™[š(š+š/š1šQ›qœRœSœw>žž"žaŸ( + D Z””/”3”:”<”@¢¢w£J£g¤¤¤l¤w„-«D¬¬6¬E¬L¬S­­­1­PÆÆÆb°#°~±±±± ± ±(±(±*±5±<±?±B±J±Q±X±c²² ²²8²8³³G“tµµ>¶h··Høø!ø#ø&ø)ø)¹Iŗŗ(ŗ;»¼;½{¾H¾zææ!æGæWæXæ^ædĄĄĄĄ*Ą1Ą6Ą:Ą@ĄĮĮnĀ Ā ĀĀvĀyĆĆĆĆ Ć*Ć6Ć_ĆcĆuÄ$ÄNÄ\ÅÅ#Å=!O†Œ8r  £~„„)„,„6„U„U¦§ § ØOØkŖQ¬C­­ ÆOư°±p±t²%ĆĆÄ+OP”,¢'¢'¢(¢N±!OPo=L‚‚v‚w‚wƒƒƒƒ_ƒ`„„%…P††4†;†JŠŠ<Š_Š_ŠkŠm‹‹|ŒŒ`abdeww‘9‘R‘T’’.’Q“5”-”w•=•@•W–\— —'˜˜<˜<˜N˜X˜Z˜[˜b˜r˜s™A™|›››› ›U›Vœ œqžžž4ž4ž5ž5ž[žežež|£h£i¤F¤W¤W¤|„„A„N¦,¦4¦G¦I¦g§§ §§§§2§3§7§I§L§OØØ ØØY©©©©[Ŗ/Ŗ;ŖD¬¬¬¬s¬t­;®O°°°=°W³Q““>“c“e¶¶B¶\··y·z¹W¹^»a»d¾Ą@ĀĀ8ĀOĀRyOPiy|"‚+‚,‚/‚4‚=‚K‚N‚PƒJƒc„„„ „1……=…[†††.†h†p†p‡‡2ˆˆVˆxˆ~‰‰‰{ŠŠ0ŠAŠIŠdŠp‹‹‹‹&‹5‹OŒ Œ.Œ:&IaŽŽŽ ŽŽŽŽ Ž'Ž5ŽGŽXŽY i.177=‘?‘E‘K‘R‘S‘~’,’/’]’b’e’m’m’t’{’““i””Q”p•)•*•?–6–i–z—v˜#˜7˜8˜u˜z™>™]™bš šQšZš[ša›c›qœ MZgm{žžWžiŸŸŸjŸo   ”””&”c¢F¢Q¢y££H£u¤¤¤0¤B¤M¤T¤c¤g¤z„N„^„_„s„v„~¦¦¦¦¦c§§L§zØ+Ø,Ø}©+©eŖ ŖŖ Ŗ:Ŗ:Ŗ>Ŗm«N«v¬¬:¬>¬T¬g¬i­+­P®®*®<Æb°F±±{²\²l³³!³8³8³G³G³P³S³Y³`““7“9“Y“\“v¶·r·wø7øe»a¼0¼l½u¾8¾Q¾Uæ#æRæsĄ0ĄfĄĮ+Į1ĮCĮOĮwĀĀ'Ā1Ā7Ān OˆB’e’i–6¤N„Ø{æ+ĮZsOZo„u… …………$…)††)†S†g†vˆv‰‰(‰/‰2‰;Š`‹ŒŒ DŽ`Žw"WT‘“$“$“&”””u•x˜0˜8™I™[™h™i™mš^š^›pœBpžDŸ-ŸDŸX $”u£££/£9£>¤¤'¤(©.©1««*«w¬(­°B±1±A±]²²K²h³B³G“1“_µ9µ>µDµGµOµUµUµU·Pø"øEŗN»»[¼)¼2¼|½!¾¾¾ĄqĄtĄ|Ą}ĮĮzNP‡œoNO®PN‚$‚G‚i„6……fˆ;Š:‹M‹TeŽzJ"’”˜šEšEšbœ%œTVyžžDžLžhŸh !”-”i”{¢J££0£z„E„¦¦1¦R§§%ØNØg©<©v¬4®LÆKÆQ°&°H°i±X²²K²{³W¶&¶X¶{»»9¼¾¾¾æ@æXĄ[Į Į4Į@ĮTĀ'N’_N…KM0‚‚2…^–››Mœ]Ÿg¢¢A¢O¦Z¦c¬o®!Æ9²½ ¾(M„f°5L¦D¦D°, LN‹‹ ˜)„w¦;¦<Ŗ3°?µ7ĄTĄe LM…C‹$™”©w±V¾~LM…C‹$‘X‘X• ——3™Q””„{©±V½0¾~‚ LMe;A‚‚‚"ƒ ƒ3ƒ3ƒ4ƒ=ƒKƒQ„R……C…z††‡‡?‡P‡R‡j‡jˆ'ˆ@ˆHˆMˆy‰9‰]‰`‰cŠ‹$‹A‹UŒgŽŽ&Y SS}‘‘P‘p‘{’’$’T’U““””Q•9•T•n––:—U˜!˜.˜M˜\™™™™>™Hšš*šTšXš^š_šz››››2›wœœœHEFžžrŸŸŸŸn  ,”” ”I¢ ¢¢"¢F££`£k£s¤¤"¤7¤M¤U¤X„„„P„b„o„q„q¦ ¦ ¦¦¦H¦g¦m§§§H§N§X§]§e§vØØ!Ø%ØfØxØz©©©©©)©<©DŖ ŖŖ+Ŗ+Ŗ.ŖOŖW««s¬¬H¬I¬N¬O¬z­­2­4­<­<­E®®®]ÆÆ°° °-°B°]°f±U±W² ²²*²6³³C³k“µµ µµr¶¶$¶'¶L¶U¶l¶z·#·&·^·{·øø0øIøQøløp¹!¹$ŗn»»H»O»P»p»|¼¼F½½#½O¾¾ ¾#¾9¾~æ6æ_ĄNĄ\Ą]ĄkĄoĮĮ\ĮyĮ|ĀĀĀĀmĆĆ*ĆNĆ`Ć}ÄÄ?Ä[Ä\ÄgÅ#Å%Å)Å;KK n„BKŖT«h¹XK§f§{UJƒ*ƒ>„'„|…^†e†q‡‡‡nˆM‰i‰|Š9‹0Œ\DenpŽY9X‘\‘z’’ ’]”f–J™ššš*›D›L›N›V›{œbf}žŸYŸgŸrŸzŸ{Ÿ| %£'£+£M¤¤¤J„?„b¦¦P§§|©NŖ«¬Z®w±.³³7µµ\¶V··"»RæĄĄ"ĄYĮĮvĀFJ‚‚A‚[ƒS„„m†[‡Aˆˆˆ%ŠŠs‹ ‹MŒ0Ž"Ž>ŽqWs‘2“h–o—x˜4˜b˜}™+™ašš)VzŸŸ'ŸEŸV  ”'”S¦K© ©'«=«d¬ ­®c®t°°°?±“Dµf¹ ¹ŗl¼Kææ,ĄBĄMĄnĮ8ĮkĀĀMJƒ7ƒ7Ÿ"½`ÄKIŒ3„K§ENI@ƒJƒn‡3ˆ<ˆ\ŠD‹VIav‘5‘E‘~’o“ ””r••1•5–K—˜˜˜˜P™š'›]œLœp1užž?Ÿ<    ”<¢ ¢B¢F¢Q¢T¤w¤}¤~„6„AØ6«¬+¬C®%ÆC°A±;²³³!³T“I·Hŗ&ŗ/¼+¾X¾zæ æ'æ9æuĮIƒ;ž6„D„DII‹THŒ3ŒCŸr„ HHH’’+Gƒƒ:ƒ?„ „O„R„p…8…K…Q…c…f…j…k† †!†"†%†&†S†e†mˆˆ~‰$‰TŠAŠYŠ\‹\‹d‹wŒŒBŒc4rŽŽO\\]s‘ ‘‘‘$‘3‘h’5’:’<“M“S“\”X”r•s–C–D—"—p—}˜˜n™1™Sšiœ œ|jsžžž*ž,ž>ž>žKžYŸ ŸŸ#Ÿ#Ÿ$Ÿ'Ÿ< 1 ; D J N t””@¢g£ ¦¦Y§E§t§z§}©s«?«B«h¬¬¬¬ ­^­g­v­y®±±±0±6±Q²² ³!³H“Wµµ*µ,µHµP·øRøf¹¹K¹fŗ/ŗ5ŗ8ŗn»¼P¼{½½½D½Hææ!æXætĄ>ĄNĄNĄOĄYĄcĄdĄfĄhĄlĄuĄwĄxĮÄÅAG³,ƒXG17;BNn‚<‚x‚~ƒƒ ƒ ƒ'ƒ3ƒ_ƒhƒt„„ „ „K„Q…'…0…5…b††0†P†Q†T†V†h†m†p‡‡‡‡‡‡‡ ‡ ‡/‡8‡a‡g‡hˆˆˆ ˆˆ)ˆJˆSˆwˆz‰%‰&‰wŠ2Š@Šr‹‹‹"‹2Œ Œ(ŒS  33Ž$ŽcŽoi‘ ‘‘‘‘.‘A‘p‘’’’%’0’]’]’c’n’x“ “+“8“\“g” ”””””=”S”T”V”W”o”p”s•)•*•@–– ––––0–5–J–K–X–^–c–f–g–l–r–|——$—$—8—L—N—U—j—j—l—l—n˜+˜>˜C˜n˜o™™"™)™8™R™_™hš šš(š*š.š1šašjšnšq› ›&›-›A›C›l›t›u›~œSœTœTœWœaœiœkœlœm%39BKLVXjž žž$ž+žbŸŸ(Ÿ0Ÿ0ŸVŸYŸnŸnŸwŸwŸy          ( G U W” ””””"”f”h”n”o¢ ¢/¢9¢I¢I¢K¢Q¢S¢T£ ££££+£+£>£X£[£f£z£z¤¤!¤J¤T¤U¤`¤a¤d„ „„p¦>¦D¦R¦S¦a¦l¦q¦s§§§§§§F§X§f§sØØØ Øb©(©*©*©9©<©?©N©s©w©xŖŖcŖo«««%«4«I«R«g«x«}¬¬¬0¬:¬;¬\­­V­~­®®®®[®\®g®t®t®uÆDÆEÆEư°!°9°;°R± ±±±±±,±;±K±M±~² ² ² ²Q²Z²a³_³c³s“*“9“I“I“J“X“e“f“g“j“qµµ!µ9µZµ^µa¶ ¶!¶4¶^··%·.·d·m·xø?øV¹ ¹ ¹¹6¹7¹8¹8¹Sŗŗ ŗ ŗV» »&»O»w¼9¼G¼L½½+½u¾1¾C¾O¾X¾z¾{¾~æ æ ææææ?æGæqæræ|ĄĄ&Ą'Ą.Ą0Ą;ĄSĮĮĮ ĮĮĮĮĮ#Į/ĮLĮsĮxĮ~ĮĀĀ$Ā3Ā4ĀdĀeĀkĀtĀyĆĆĆĆOĆ[ÄÄÄ'Ä+Ä7ÄQÅÅÅ61Gƒ…/††rŽXu‘N–"˜˜™$šœ7œOœPœYœcGIž2Ÿ££^¤.¦;¦]§§§7§P©A¬0¬0­}°°G± ± ““3“F“H¶-¹QæRĄ/Į>3G‚$…\†I‰$ސa’r”K—"™Aš1š=›.›F ; x¢A¢l£¤ ¦§§jØO©F©u««j¬-­Y­~®TÆI²{³9“Dµ_ŗ5ŗ@ŗj¾æ3ĄIĄoĮ,ĀĀĆÄ9FG‚‚gƒƒ$ƒ*ƒ^†††&‡wŠ‹nŒ@ ,ŽR>’4““5”H–Q—=™!šbœTž{Ÿ$Ÿ5Ÿu¢#¢@¢t¤/¤w¦ ©o«3«K«]«l«r¬¬D¬e­®%±±G±d³<³T³g“ ··:·Sŗ(¾¾æ[æ^Ą:ĄfĄgĀvĀzF™;Fƒ!…jFmƒ/ÄÄ'Ä*Ä@Ä@FF†‡%‹‹-‹O44}“L•,—˜)˜)š~¦>¦@“@¹¾EĄ'ĄTE—pE—pƒE~&+/JR^_c‚ ‚0‚A‚G‚M‚Y‚b‚}ƒ ƒ*ƒ4ƒ9ƒ>ƒIƒ^ƒgƒmƒ~„i……$…3…P…b…g…t…}††††!†7†8†K†M†p†t‡ ‡ ‡‡Z‡_ˆˆ;ˆ=ˆZˆ]ˆbˆw‰ ‰`‰c‰l‰vŠŠŠ-ŠHŠXŠ}Š‹1‹O‹zŒ ŒŒ.ŒBŒHŒh%-D|ŽŽŽŽŽŽ7ŽRŽoŽ~ ")4?EJez(LXr‘‘.‘3‘8‘I‘b‘e‘k‘p’’’4’d’l“““+“>“K””””Z”s• •K•o•x––/–1–5–M–p–s–u———!—H—L—_—a—d—o—u—y—}˜˜˜˜5˜9˜u˜z˜{™™)™I™R™Zššš%š/š[š`šcšnšp›,›Q›[›g›kœ&œPœoœt ).MV[_d|~ž žžž)ž-ž;žAžFžMžWžYž]žqž|ž~ŸŸ ŸŸ!Ÿ"Ÿ*Ÿ8Ÿ:Ÿ  $ & 3 L u” ”””””*”3”R”^”`¢¢2¢5¢:¢;¢R¢w¢£ ££G£f£g¤ ¤¤?¤M¤]¤~„^¦*¦D¦N¦]¦t¦v§9§;§qØY©4©CŖ/Ŗ7Ŗt«««««%«D«E«^«d«j«p«|¬>¬L­­=® ®3®7ÆÆ/ÆD°°°A°r±±±±&±<±X±{±~²w³³³³C³Q³S³g““ “)“7“F“X“eµ(µ/µ5µq¶/¶H·|øøøløq¹ ¹¹7ŗŗ1ŗ~»»)»5»<»>»]¼¼=¼E¼i¼l¼z½ ½½(¾ ¾b¾f¾o¾tææ2æ6æ?æEæHæRæ^æ`æĄ#Ą9ĄJĄZĄ`ĄdĄlĄ{ĮĮ7ĮEĮLĮ[Į\Į]ĮdĀĀ$Ā;ĀLÄÄ(ÄKÅÅ(!E‚o†X†[ŽS‘J‘Y‘n‘{‘{’8“e”[™]  ”^£B¤P„-­°s°y±± ±;±U±d³o·Q·pø*¼=æ#E…‹rŽY‘J’ ¤ØS©v±EµL¼G½½Ā{DMƒI…KˆP•?œ%ž-Ÿ ¦©=­/°²<³"½Bæ4Ā ĀGĀqĆĆ`ĆdD™Z¦\¦e§ŖThDPOSXa‚-‚1ƒ9ƒ=ƒLƒg„„S„e…K…]† †A†N†O†‡‡k‰‹&‹H‹HŒ4Œ4ŒjŒw-LŽqŽ~ JWry(DTt‘3‘L‘N‘V‘a‘b‘g‘’ ’E“9“?””””r•e•~– –R–]–f–p–p–}——H—[—m˜1˜8˜D˜}™™_ššš&šG›S›\›tœLœlœu:rvžž3ž@žFžKžVžkŸŸ Ÿ ŸŸ$Ÿ'ŸJŸWŸaŸbŸbŸu   ” ””””g¢U¢g¢££ ¤7¤I¤T¤t„>„I„y„~¦ ¦+¦C¦U¦m¦u¦|§ §§§F§G§OØN©©-©=©K©uŖ ŖŖŖ6Ŗ>ŖI«p¬¬ ¬2¬7¬\¬p­­­}®®®%®W°@°s°y± ±5²4²6²6²9²o³(³4³F“R“V“W¶[·m·qø øø8øVøVŗ1ŗ2ŗb»4»>»N»]½6½Y¾)¾Hæ2æ\Ą Ą>ĄLĄSĄWĄWĄbĄhĄlĄmĮJĮ\ĮjĮqĮxĀ$Ā4ÄhƒoDPT47;JVVv}‚‚‚‚#‚-‚4‚=‚D‚N‚k‚yƒ ƒ ƒ3ƒIƒ^ƒc„5„o„{„………H…I…K…u††††† ††%†E†P†V†p†r†s‡‡‡_‡c‡t‡zˆˆ"ˆ%ˆ3ˆ5ˆ>ˆ]ˆ]ˆ^‰‰‰%‰2‰F‰d‰|Š ŠŠŠAŠ{‹"‹)‹/‹0‹EŒŒŒ ŒFŒh`ktxŽŽGŽYŽp  !7Vpr+/>LY‘‘‘‘‘#‘=‘G‘O’’4’;’>’V’d’“““J“K“S“[“i”””””%”)”8”=”E”H”•&•*•/•@•b•i•x–*–B–R–W–Y—— —!—"—6—7—8—8—@—G—H—`—b—o˜>˜h˜s˜u™(™>™[™[šš#š#š)š/šNš]š]šc›:›E›J›c›g›k›m›mœœœ5œ9œEœNœPœhœtœwœ} #$28GJLSX\do|žžž*ž+ž.žAžNžWž^žkŸ"Ÿ"Ÿ(ŸWŸyŸ{Ÿ}     " ' 2 4 ? v v”””””””E”K”M”M”R”c”h¢¢¢$¢2¢:¢;¢I¢O¢_¢_¢l¢n££:£:£?£B£]£b£b£z¤9¤9¤Q¤R¤q¤w¤w„ „.„o¦ ¦0¦r¦x§!§N§i§j§q©.©9©E©L©R©|Ŗ ŖŖ6Ŗt« ««D«Q«Y«^«d¬ ¬¬¬&¬+¬-¬;¬>¬d­­ ­#­8­;­Z®®®3®?®S®U®]ÆÆ-Æ=ÆDÆa°@°v±± ±±±+±6±9±:±F±F±]² ²8²\²\²a²w²{³&³4³7³H³a³g³v³w““&“B“H“I“J“jµ(µ*µBµQ¶4··$·}ø ø%ø/ø8ø?øUøW¹¹$¹0¹>¹Q¹Sŗ#ŗ0ŗVŗjŗ~»»»»"»&»2»A»G»I»I»[»^»g»v¼)¼.¼;¼<¼F¼I¼L¼N½½½(½B½a½u¾ ¾1¾H¾R¾\¾a¾e¾tæ ææ%æ=æGæHæQĄ#Ą$Ą9ĄGĄJĄOĄQĄVĄWĄlĄmĄ{Į Į,ĮLĮaĮdĮjĮwĀĀUĀtĀvĆĆĆ*ĆNĆ_ĆcĆuÄ Ä(Ä7ÄKÄNÄTÅÅÅÅ#Å$Å=CƒCAD‘O–A—k˜j›2 ,£)¦«9­c³k»9½$kAD~#(‚‚ ‚*‚*‚K‚Kƒ1ƒ2……X†4†G†h‡hˆˆ,ˆA‰WŠŠ=‹ŒT&G‘O‘m’,“ “R”5—™-™k™zš4šKšU›&›-›B›eœYœYžfŸ Ÿh  h”%¢¢%¢&¢/£*£m¤O¤z¦¦¦ØY©CŖ ŖŖ*ŖM«g«q¬U¬V¬n­5­7­r­t® ÆQÆ^±±t²² ²1²l³ µ}·D·]ø-ø3øPøf»»,»8¾.¾5æĄĄ ĮyĮ}ADd‚‚/ƒƒg„ „„%…G…P††K‡9‡_‡fˆ‰%‰2‰S‰qŠm‹‹‹1‹5‹NŽaC‘`“:“?•C—#—`—l˜s™|›"›:›A›\›]›gœ8œS6Až[žqŸb  ””M”a¢/¢2¢2¢4£ ££2£V£`£s„!„@„x¦¦¦%¦F¦Q¦nØ©,©7©IŖ ŖŖ2Ŗ6Ŗ<Ŗf«« «Y¬P­7­>­>­@­D­F­R®d®hÆk°2°Xµ[·q·rø?¹ »3»7»_»d¼9¼w¼{½X¾f¾{æĄĄIĄKĄ`ĮĮ0ĮCĮXĮbĮiĮnĀ@D;¤/Ø®^®y@C˜Q@Cƒ y™D”W¶K@ƒF¢3¹@C”¤.°D@C‚J‡‰‹2ŒBa—žt£R„>„?©Ŗ!æ. @C‚J‰ŒB—Ÿ@„>æ.‚8>LNW&))9?CQVV^‚ ‚8‚N‚T‚V‚k‚y‚zƒ-ƒ4ƒAƒCƒDƒWƒ\ƒ„„„'„v………8…B…N…`†(†;‡ˆ1ˆ^ˆ{‰&ŠŠ%Š8ŠGŠ‹‹‹'‹.‹U‹q‹t‹w‹|Œ ŒŒS!'),:HL{ŽŽ+Ž9Ž`Žp'Przqt‘ ‘‘8‘n’’’!“?“\”””*”Y•••&– –2–e–i–j–{–|—————!—4—T—V—\˜+˜@˜C˜a˜t˜}™šš%š'š+šAš[šb›D›{œ$œ7œNœn !IPor|žžž,žMžgžjžržuž}žŸŸ!Ÿ$Ÿ;ŸRŸdŸeŸz  ) O o t u” ” ””-”B”X”l¢!¢/¢:¢D¢S¢i£££C£o¤¤¤G¤K¤S¤w¤w„„&„>¦)¦=¦D¦|§'§G§e§sØØ/ØbØf©B©h©sŖ)Ŗ9Ŗw««-«D«P«c«e«t¬¬!¬Q¬S¬\¬o­­%®D®VÆ Æ-Æ8°2±+±-±@²² ³:³I“““&“7“I“K“L“`µµW¶ ¶V¶\·o·|·}ø#ø4ø4ø6ŗŗŗ&ŗz»"»C»U¼}½ ½½½0¾g¾tæææGæPæPĄĄNĮĮĮEĮIĀ Ā$Ā2Ā=ĀRĀeĆĆĆĆĆ'Ć,Ć?Ć\ÄÄÄÄÄ2Ä[ÄhÅÅ<Š`>GQRUkn  &17:EHNWWbccjr~‚‚‚‚‚‚#‚'‚)‚*‚+‚1‚2‚4‚8‚:‚P‚P‚o‚p‚s‚zƒ ƒ ƒƒƒƒƒƒƒ ƒ.ƒ3ƒ4ƒ5ƒ6ƒ7ƒ7ƒ8ƒ=ƒ>ƒBƒBƒCƒDƒEƒFƒFƒHƒWƒjƒsƒwƒ~ƒ~ƒ„„„ „„„„„'„3„4„6„c„………………………6…K…L…N…S…W…X…[…[…\…\…_…_…d…e…k…m…o…p…x…z…|…}…†††† †††††††#†%†&†6†@†H†b†l†o†p†w†x‡‡‡‡‡‡ ‡‡‡‡‡‡1‡4‡8‡=‡?‡W‡^‡e‡kˆˆˆˆ ˆˆˆˆˆ!ˆ'ˆ0ˆBˆQˆhˆiˆxˆyˆz‰‰‰‰‰!‰&‰e‰o‰p‰uŠŠŠŠŠ'Š+Š1Š@ŠGŠdŠnŠpŠ}‹‹‹‹‹"‹#‹'‹*‹/‹5‹8‹:‹E‹M‹P‹S‹U‹a‹n‹x‹{‹ŒŒŒ ŒŒ Œ1ŒCŒEŒEŒ\ŒjŒlŒ|Œ}'[acŽŽŽ ŽŽŽ+Ž=Ž>ŽDŽZŽ`ŽiŽxŽ|!!56;?EHHJJLNQTgu   "->IWWcc‘ ‘ ‘‘‘'‘(‘0‘2‘3‘<‘<‘?‘@‘J‘L‘N‘R‘S‘Y‘]‘^‘`‘’’’’’ ’’’’’’%’.’;’U’i’t’{““““““ “"“:“E“E“I“L“n””””%”(”*”,”0”1”2”=”[”q•• •••&•?•?•N•R•_•y•z•}––– – ––-–2–8–B–D–E–U–Z–[–a–e–j–k–l–m–n–o–r— ————————!—'—7—<—A—E—F—M—R—R—T—g—m—q—x—y˜˜˜˜˜˜˜˜/˜1˜6˜?˜B˜C˜F˜L˜S˜f˜o˜s˜y˜~™™™™$™%™(™+™/™L™W™c™iššš!š!š"š#š)š*š*š/š/š2šQšb››››%›'›,›4›9›@›A›B›D›P›Q›X›[›a›b›b›j›n›s›}œ œœœœœ$œ)œ,œ/œ8œ@œIœSœ^œ`œaœbœbœbœgœiœkœnœ|œ}œ~!19BLNQUYYefosvz}žžž ž ž žžžžžžžžž!ž%ž(ž*ž*ž2ž3ž4ž7ž8ž;ž=ž?žDžNžPžVžVžXž^žcžižkžnžqžxžzŸŸŸŸŸŸŸŸŸ!Ÿ$Ÿ'Ÿ/Ÿ0Ÿ;ŸKŸLŸNŸTŸXŸ`ŸaŸeŸgŸjŸnŸrŸrŸuŸvŸy      ! ' 2 2 < P W _ b o |””” ” ””””””,”-”.”=”B”`”c”h”k”o”s”t”w”x”x”{¢¢¢¢%¢&¢5¢7¢7¢8¢8¢:¢<¢=¢?¢?¢@¢A¢A¢B¢D¢E¢H¢H¢R¢U¢U¢W¢Z¢_¢`¢h¢i¢k¢l¢l¢n£ ££££.£0£2£B£C£J£S£T£U£W£]£`£a£a£b£c£c£g£h£i£k£m£p£p£z£~£¤ ¤6¤6¤I¤K¤R¤S¤U¤[¤b¤s„„„„„„„!„*„0„2„3„5„6„8„?„B„C„D„F„Q„X„_„_„h„p„s„|„¦¦¦¦¦¦¦¦¦¦¦¦)¦+¦.¦:¦<¦H¦K¦N¦P¦U¦[¦[¦]¦^¦g¦m¦m¦n¦p¦s¦t¦u¦y¦|¦|¦}§ § § § §§§§§§§§§ § §!§%§*§.§/§2§;§?§I§N§N§P§Q§R§R§S§V§W§W§f§g§i§j§l§n§o§r§t§u§w§y§|ØØØØØ Ø"Ø#Ø$Ø%Ø+Ø,Ø.Ø3Ø:Ø>ØQØVØWØ\Ø^Ø^ØbØdØfØgØkØ~©© ©©©©$©'©)©5©5©7©7©:©=©=©?©A©B©D©L©M©U©Y©Z©c©d©e©f©p©s©{ŖŖ Ŗ Ŗ ŖŖŖŖŖ5Ŗ8Ŗ9Ŗ;Ŗ>ŖGŖHŖHŖHŖVŖbŖmŖnŖs«F«L«N«Z«Z«Z«d«f«o«o«t«u«v«{«|«~¬¬¬¬¬¬¬%¬.¬2¬3¬4¬6¬:¬;¬<¬?¬A¬C¬C¬D¬E¬L¬Z¬[¬[¬a¬d¬y¬z¬|­­­%­%­&­'­(­+­+­.­6­7­8­D­L­L­Y­Y®®® ®®®®'®(®,®@®A®T®W®g®rÆÆÆ Æ8Æ:Æ<Æ?ÆAÆMÆQÆ^Æ^ÆaÆb°°° ° °°°°°°°4°7°8°8°;°;°?°A°B°F°F°[°i°u°~±±±±±±±±±&±9±B±F±G±I±P±U²²0²1²1²6²9²<²E²n²r²r²u²v²z³³³ ³³³³"³#³3³7³9³:³S³W³Z³^³c³r³y““'“'“)“2“K“K“V“V“W“X“Z“tµµµ'µFµ[µ^µaµmµn¶¶¶!¶-¶.¶.¶1¶3¶P¶R¶T¶X¶Y¶m¶r¶w¶y¶|···.·b·m·w·~·~·øø#ø7øCøEøJøeø{ø~¹¹¹¹4¹6¹6¹6¹8¹E¹K¹Mŗŗ ŗŗŗŗ ŗ(ŗ-ŗ/ŗ2ŗ;ŗh» »»!»*»6»<»?»@»C»M»[»\»\»^»`»d»e»{»}¼¼¼$¼(¼<¼E¼G¼I¼K¼O¼Q¼`¼e½½½½#½,½2½e½h½x¾¾¾¾%¾(¾)¾1¾5¾C¾P¾X¾d¾e¾g¾h¾q¾t¾~ææ æææææ"æ'æ-æ.æ:æAæAæBæEæLæOæOæTæWæYæ\æ]æ^æ_æaæbæjætævæwæzæ{ĄĄĄĄĄĄ#Ą#Ą*Ą/Ą@ĄCĄFĄFĄHĄHĄIĄJĄJĄ[Ą\Ą]Ą^Ą^Ą_Ą_ĄfĄnĄrĄrĮĮ Į Į ĮĮĮĮĮĮ+Į.Į2Į3Į4Į5Į8Į<Į>Į@ĮAĮCĮCĮDĮGĮJĮJĮOĮQĮZĮ[ĮaĮbĮeĮhĮiĮjĮjĮkĮlĮlĮqĮqĮĀĀĀ Ā Ā ĀĀĀĀĀĀĀĀ"Ā&Ā/Ā2Ā2Ā3Ā8Ā@ĀVĀmĆĆĆ-ĆNĆ{Ä Ä+Ä4Ä6ÄAÄ\ÄlÅÅ6>‚k„ ‹P™{ q >>…Ku„D„y¬A­±|ĮTÄ?ÄAÅD=S%7tx‚%„„…‡JˆS‰‰=‰zŠŠŠA‹J‹|ŒŒ!qvŽw%a‘“+–i—˜š šQšZ›Sœ žQŸ" W”” ¢=¢]¢f£>¤<¤F©;©zŖ2­]®:°5“““_µŗŗ¼)¾e¾|ĄĮĮ#Ā =„tŠ©ŖAĮĮ=††Š‹Pd‘:’Ur”¤B„„„0„5„L„X„_„p„x¦§ Ŗ{­%ÆÆ`Æe° Į Į Į=…C…C¼rĮi=FHHHKLnu%'d‚ ‚#‚Z‚~ƒƒƒƒƒ:ƒ;ƒFƒfƒhƒy„'„S„k…J…J†‡Cˆ ˆx‰9ŠŠ$Š)ŠL‹ ‹ ‹‹‹‹K‹aŒ ŒŒŒCŒXŒ{<cŽŽ$ŽBŽvYefgm!"(r‘‘’““[“t”••<•n–Q–`—0—Q—R˜N™™™L™c™z™~ššd››2›T›`œœ!œ*œ2œJœpKNQTXžž0ž0ž1ž4ž7ž?žEžWŸ/ŸDŸ{  E c z”E”}¢££¤¤ „„„„4¦¦¦'¦F§;§uØTŖŖŖ4ŖEŖzŖ{««2«8«B«U«W«m¬5­$­$­4­r® ® ư'°+°5±E²²$²c³,³C³E³Q³Z³h“““oµµµ.µe¶¶ ¶M¶l··øp¹¹pŗ ŗ.ŗ.» »L»i»k¼ ¼H¼^¼r¼u½½½b¾¾¾ ¾Ræææ,æ4æaæqĄ ĄĄĄ.ĄLĮBĮ]ĀĀ=ĀKĆĆ(ĆMĆX =De–S—oœo¬¬¾~S=yAƒ6ƒHƒ…>…B…I…_†<‡ ‡ ˆ ˆ!ˆ"ˆVˆ}‹!‹#Œ ŒHŽŽ<M““|•˜˜6™ š-›F›Pœ^fž3ž?žtžv¢'££d¦¦*¦d§§mØ©$©=©a©{©|©Ŗs«h¬¬7­qÆ=°¶T··n·y»M¼Hæ4æ_ĮĮ!ĮeĀ)ĀxÄÄ Ä(Ä9Å%7;iv&&‚Aƒ6ƒiƒ~†i†o†q†v‡`ˆ%‹!‹#Œ4"Ž}KK‘p˜q™e››A›]ž-ž9ž9Ÿk u£Y£c¤¦¦¦@¦G¦a©{Ŗ+Ŗ,Ŗ_­9­Y°-¹2¹4ĮXĮZĮZĮ\ĀSq;T P‚F‚aƒƒ.ƒGƒm„…W…h…m††o†q†u‡3‡=ˆˆˆ(ˆx‰‰uŠŠ ŒXŒlp|ŽŽZŽbgRb‘4’ ’3’l“&””O”Z•y– —E—^˜˜9˜{™D™`ššb›V›{œ{žŸ> ( 3 D U”!”,”n”v¢!¢%£<¤„<¦LØ ©lŖ_ŖcŖo«+«U¬¬L¬a­+°(±@±L“*·r¹¹`ŗ/»<¼D½½>¾Sææ'æ-æ@Ą4Ą<Ā&ĆÅ8:…<‰_‰tŠ‹‹S–$˜}˜}ši›Wž ¢ ¢;¤=„v¦?¦A©ŖIŖT«|«}¬<¼Næ0Į2Ć:‘bÄB‚A:+,==>>@A‚y‚zƒ ƒc„^„^„a…=…M…O…O…y†††<†I†t‡ ‡"‡(‡2‡7‡cˆˆYˆ~ŠŠŠ ŠŠ)Š<ŠVŠXŠYŠbŠmŠp‹-‹.‹:‹|‹|‹‹ŒŒŒŒ(Œ.ŒEyŽŽŽŽŽŽ5Ž9Ž:ŽQŽRŽ]Ž^Žt*D`cde‘+‘6‘7‘:‘<‘W‘W‘X‘X‘s’G’Q“8“]“y”””-”-”.”]”w”~•••<•C– ––[–\–]–]–t— —=—o—y˜˜˜˜˜˜˜<˜@˜Y˜c˜d˜f™"™$™%™=™B™Zš-›››,›U›U›V›W›tœœbœbOP[\^wžžžžž4ž6ž6žCžCžDžYž[ž[ž]ž]žcžežuž{ž|ž}ŸŸ.ŸJ  % m””#”'”-£Y£Y£o£¤+¤2„„ „h„s¦ ¦¦¦¦,¦:¦;¦[¦^¦h¦r§§j§pØ[©;©C©F©_©eŖ0Ŗx«^«a¬¬¬¬"¬0¬0¬1¬;¬R¬R¬d¬d¬z­­®gÆCư&°(°:°A°B± ± ±[±_±`²²c²f³³E³F³F³G³I“Dµ(µ)¶¶A¶C¶G¶J¶L¶]·· ·!·.·zø7øf¹¹I¹U¹W¹W¹XŗZŗ\»»b¼¼¼4½½#½<¾¾U¾Xææææææ4ĄĄ>ĄAĀĀ:Ā:ĀDĀDĀLĀMĀNĀQĀQĀRĀUĀVĀyÄ'Äk:„Š6Š>Šd“8––<–a–n—˜hŸ@«Q“7ø&¹ŗ½ ¾Ą{ĮEĆ-‚S:=a~9}‚‚<ƒ.ƒ7ƒUƒ`ƒ~„„!„$„{………5…B…I…X…t…w††††<†G†N†P†w‡‡‡ ‡ ‡‡]‡gˆˆCˆoˆpˆv‰wŠ)Š:ŠJ‹‹‹‹‹"‹*‹6‹AŒŒŒ2Œ}8ŽZŽbŽu *+>Qbm7O‘‘M‘Q‘S‘Y‘s’’’““K“Z“n””S”U••••C•G–––0–[–s— ——˜6˜9˜=™™%™%™G™`™y™zšYšh›'›-›8›9›=›G›bœœœ&œ9œNœ_œcœdœnœ{9KjžžžAžAžKžjžsŸŸ'ŸHŸy  % . 3 < b k s” ”””&”r”s¢'¢T¢u¢w£ ££+£+£H£h£o£{¤¤ ¤!¤@¤B¤M¤S¤a¤d„.„H„e¦¦%¦9¦d¦l¦x§§§§=§N§PØ©$©.©2©M©R©vŖŖ-Ŗ4ŖwŖ{«7«C«I«h«n¬¬¬#¬#¬$¬+¬.¬2¬X¬s¬­)­5­9­M­N­q®® ®®0®m®o®xÆ3Æ7Æ<Æ@° °°°;°U°t°}±±B±c²²²0²a²w²³³;³E³H³cµ!µZ¶ ¶¶.¶k¶· ·.·_·vø ¹¹"ŗVŗ^»(»>»[¼¼ ¼¼ ¼=¼E¼H¼K¼N¼S¼o½b¾¾ ¾¾%¾(¾<¾C¾P¾P¾R¾uæHĄĄ'Ą;ĄFĄ`ĄvĄĮĮ ĮEĮKĮgĀĀĀĀĀĀĀ Ā%Ā0Ā7Ā;ĀLĆĆ :„`…S‡ŠmŽc’˜bž9Ÿd” ¦*§§{©'©lŖ«e«t¬¬y¼F¾sĄ_ĄmĮUĀ ĀnÄ&Å:7›Jž„_³:·s¼9,7W‚eƒt„'„a… … ‡b‹UŽ]?‘2’E’W’g“]””N”Z• –T˜™ ™ ™(š&( / 3 : |”/¦©cµµ6·dø[ŗĄ6ĄuĮ?7h‚%„{†Kˆi‰d‰sŒhŒw,a|Ž}‘&““M”” ””f–1–2–t—˜˜™>š2%žiž} :”v¢R£{„<¦}ØiŖ«[¬°:°S°\°m²³ ³nµ6µ7¶q¶u»4¾S¾T¾TĄĮĮC%6?‚Oƒ[‹3ŒTŽ’A—N˜p˜všHŸ|”4¢4„<Ŗ Æ/°:±:±<¶T¶v»¼5æ1ĄĄ Ā4ĀoĀpĆĆ3ĆPĆdÄFÅ6¬<¬}¾TÄ)ƒ69:=GJK+4>Bccd‚#‚7‚=‚^‚p‚yƒƒƒƒ.ƒcƒcƒmƒ|„„a„q… …!…#…'…*…I…I…J…M…O…P…S…d†6†<†B†d†w‡‡‡‡,‡2ˆ"ˆ#ˆ#ˆSˆYˆ[ˆiˆ~‰‰ ‰%ŠŠXŠ\Š^Š_ŠbŠmŠpŠv‹*‹E‹E‹X‹f‹{Œ ŒŒŒŒ&Œ.ŒQŒl $/<iŽŽŽŽŽ&Ž5Ž9Ž:Ž:Ž@ŽQŽZŽ[Ž]Žb !QT`e{q‘‘+‘5‘5‘6‘7‘8‘9‘q’q“““0“;“>“G“H“N“^“e”8”@”l”q”s”t•• • •)–E–H–R–Z–[–]–g–j–k–l–s–{—;—<—H—K—Y—a—a—b—b—o—x—z˜˜˜˜#˜f˜s™Z™`™`šššš'šAšCšHšJšNšOšcœœ)0Možžžž9ž;ž<žGž]ž^ŸŸ.Ÿ2Ÿ;Ÿ> 5 < m { }””””””M”R”o”w¢1¢J¢f¢x£x¤a¦[¦x§§=§W§i§n§u§w©©o©p©x««"«F«[«d«h«t¬ ¬¬¬$¬%¬-¬.¬0¬d¬y¬z¬|­­.­L®°±±±±±±"±;±K±[±~²²2²Z³Q³X³o“'“*“-“2“X“m“oµµµ(µ(µ<µHµP·2·E·v·}øøøø ¹¹¹¹U¹W¹v¹zŗŗSŗ^ŗjŗx»»d»d¼F¼X¼d¼f¼h¼i¼m¼o½½½&½L¾C¾E¾P¾Q¾R¾sæææ-æ4æHĄ/Ą0Ą5Ą5Ą=ĄCĄHĄKĄOĄSĄTĄUĄVĄ`ĄeĄiĮ ĮĮĮĮĮĮVĀ ĆĆ Ć(Ć)Ć-Ć5Ć6Ć7ĆQÄÄÄ~ÅÅÅÅ(Å-Å;Å<‰r69ADFHSjkuw} !'*+,224<\kl~‚‚‚‚"‚%‚-‚1‚2‚A‚I‚T‚W‚X‚a‚xƒ ƒ$ƒ.ƒ9ƒ;ƒ=ƒ=ƒCƒEƒLƒLƒSƒSƒSƒTƒVƒVƒ`ƒhƒsƒuƒwƒyƒ|„„„ „„„„„%„3„E„J„K„K„P„R„f„o„t„u…… ………%…W…Z…\…c…e…l…l…{†††† ††† †*†+†0†4†4†<†H†S†T†l†u‡‡‡ ‡‡‡‡"‡%‡)‡8‡?‡F‡W‡Z‡^‡wˆˆˆ,ˆPˆrˆy‰‰‰‰ ‰$‰L‰c‰l‰n‰q‰r‰t‰yŠŠŠŠŠŠ Š&Š(Š+Š+ŠJŠeŠm‹‹ ‹‹‹‹‹‹‹‹‹%‹'‹(‹)‹/‹0‹1‹1‹6‹;‹E‹H‹H‹I‹S‹S‹g‹|Œ Œ Œ ŒŒ.Œ3Œ@ŒSŒTŒ]ŒzŒz  !+<STTU^`dyyz|Ž ŽŽŽŽ!Ž+Ž<Ž@Ž^Ž_ŽbŽrŽsŽvŽwŽzŽ %&*77<<JPWY[__cccdn  '8DE]cq}‘‘‘$‘'‘2‘6‘7‘N‘X‘Y‘_‘g‘k‘o‘t‘y‘z’’’’-’.’F’K’O’P’V’d’q’|’““““0“;“G“L“R“c“n“s“z“{“{”””” ” ””””””””,”P”T”V”[”\”]”^”o”y•• ••••!•*•=•C•C•G•Q•U•W•`•o––––/–V–n–n–z—— ————————$—&—(—/—0—0—2—4—<—H—\—_—f—g—j—l—p—}˜˜˜˜˜˜˜˜˜˜4˜9˜:˜A˜C˜V˜X˜[˜^˜m˜q˜~™™™™ ™™™™™&™(™5™B™K™k™m™sššššššš"š2š7šNšTš`šbšhšmšr›› ››››!›$›(›-›2›>›H›f›n›w›}œœ œœ%œ+œ/œ=œ>œeœ{$.9AILLMTY_eipružžžž-ž1ž3ž=ž?žDžIžLžSžUž\žaždžežkžqžtžuŸ ŸŸŸŸ$Ÿ'Ÿ/ŸBŸHŸhŸhŸnŸsŸtŸ}Ÿ~     % & ( / 8 9 ; < N O h v x y ”””””"”;”>”U”a”b”l”m”o”u”x”|¢¢¢¢"¢'¢)¢*¢.¢2¢2¢2¢?¢@¢B¢C¢G¢U¢X¢Z¢`¢g¢t¢~¢~££££ £1£4£G£N£P£S£T£a£h£l£p£q¤¤¤¤ ¤¤¤¤'¤-¤A¤E¤J¤K¤M¤V¤V¤]¤b¤c¤f¤u¤y¤}„„„„„%„3„6„7„>„@„D„H„H„I„P„\„r„v„{„~¦¦¦¦¦¦¦%¦&¦'¦+¦,¦0¦5¦7¦;¦<¦F¦J¦P¦R¦V¦g¦h¦n¦|§§§§§§§§§,§0§2§5§;§<§=§A§A§B§C§C§O§P§Q§Q§R§S§Z§\§f§m§s§w§|§~§ØØØØØØØØ#Ø$Ø(Ø,Ø-Ø.Ø2Ø?ØEØNØRØUØfØiØjØmØpØtØtØvØw©©©© ©©©©©©#©'©-©0©3©;©>©H©W©Y©Z©]©]©b©d©l©q©t©vŖŖŖŖŖŖŖŖŖ!Ŗ"Ŗ(Ŗ,Ŗ-Ŗ/Ŗ2Ŗ2Ŗ3Ŗ6Ŗ8Ŗ8Ŗ;Ŗ?ŖAŖDŖDŖJŖOŖRŖRŖXŖ`ŖfŖkŖkŖpŖsŖwŖx«« « « «««« «!«"«+«.«.«2«7«B«I«L«P«T«[«a«i«n«o«w«y«y«}¬¬¬ ¬¬¬¬¬¬¬,¬,¬/¬0¬A¬B¬K¬X¬Y¬v¬­­­­­­­#­(­4­6­9­@­A­E­M­N­O­S­U­Y­_­k­q­y®® ® ®®%®+®2®;®>®@®J®L®b®f®h®h®m®n®p®z®}ÆÆÆ&Æ-Æ3Æ4Æ:Æ<Æ@ÆAÆPÆVÆl°° °°°°°°(°/°0°2°6°>°?°F°G°H°I°I°]°i°l°l°t°u°}±± ±±±-±-±;±B±D±H±S±c±d±s±u±v²²²0²7²7²M²T²T²c²g²h²m²m²o²z³³ ³³*³.³4³5³8³;³;³H³P³^³r³v³w³y“““5“8“9“;“fµ µ µ0µIµKµgµuµxµy¶¶¶ ¶ ¶¶¶¶¶$¶,¶;¶C¶D¶K¶P¶R¶\¶^¶j¶l¶q¶r¶r¶u¶v¶y¶z¶|·······"·.·?·@·B·K·]·`·i·tø øø,øCøIøløxø¹¹¹¹¹C¹bŗŗŗ1ŗ;ŗd»»»»»»)»3»6»>»A»H»H»P»S»W»X»\»i»{¼¼¼ ¼ ¼¼¼¼¼$¼1¼4¼:¼D¼K¼R¼U¼U¼\¼a¼a¼e¼f¼h¼y½½ ½½&½6½>½L½U½X½Y½[½]½c½f½i½v¾¾¾¾¾¾"¾#¾,¾-¾.¾9¾H¾M¾O¾f¾i¾u¾yæææ æææææ-æ/æ8æDæHæQæSædĄĄĄĄĄ"Ą(Ą2Ą3Ą9Ą:Ą>ĄAĄBĄXĄ[ĄsĄ{ĮĮĮ-Į7Į;ĮCĮGĮKĮRĮcĮcĮdĮvĀĀĀĀĀĀ Ā7Ā9Ā<Ā=ĀGĀHĀRĀSĀTĀeĀnĀoĀqĆĆĆĆĆ&Ć'Ć(Ć(Ć)Ć)Ć*Ć/Ć2Ć6Ć6Ć8Ć<ĆPĆUĆeĆiĆlĆmĆqĆsÄÄ ÄÄÄÄÄÄÄ%Ä/Ä6Ä=ÄBÄEÄFÄJÄPÄXÄeÄhÄmÅÅÅÅ%Å-Å<Å>69; 6<†eŠ)Œ2˜r„&¹8Į5!69^‚YƒUƒs…t‡ˆŽZb”•z–n—&—0˜^œuž;ždžk |¢£h„ ¦VØ~Æ“Yµ5ŗ »B69OOm„„„$†n†xŠ‹DŽ‘o’’z•)–l—Y˜p™3›nwžŸi¢¤J¤U¤V„B„C¦¦¦¦6¦?¦y¦z¦~Øj©f©oŖŖŖ9ŖIŖTŖt­L­~®®#Æm°° °±[³$³%³O³W¶RæcĄĮ[Ä55ƒi 5'ƒ;…f‹%’’{–U¦ ¦H¦q©KŖ|55L|ƒ=ƒh…]††0†i‹‹.—rœ`žM¢D¢D„Q§©xø »NĆjĆkĆrÅ5…Z„G5=TTfi|$.?A‚‚‚$‚F‚Zƒ ƒ ƒUƒcƒhƒtƒx„„„„'„S„^………@…@…B…I††††1†5†7†<†C†J†X†j†p†y‡ ‡ ‡7‡J‡P‡]‡f‡n‡qˆˆ!ˆ,ˆAˆSˆSˆ\‰>‰V‰a‰i‰lŠ'Š,ŠEŠ^Š_Šj‹‹‹‹‹‹!‹,‹-‹>‹F‹M‹R‹R‹TŒBŒs,AIbwyzŽ+Ž=ŽSŽYŽ`Ž`ŽbŽrŽz7BDDE[ab#CFx‘ ‘ ‘$‘D‘E‘K‘N‘h‘z‘’’’’’’’Q’f’m’n’u’“-“7“J””-”3”4”X”Y”n”~••••/•/•D•G•K•S––––p–r—— ———6—`—m˜˜˜@˜P˜d˜e˜e˜f˜h™™™ ™™ ™(™*™=™^™_™x™xšš-š|››!›/›/›K›N›xœ(œ(œ:œCœ\ Y`nnož!ž!ž+ž6žMžZžZžfžižvŸŸŸŸŸ$Ÿ.Ÿ2Ÿ<ŸBŸGŸGŸJŸOŸUŸYŸ[ŸgŸk    1 F F O l r u””>”Q”Q”a”v”v¢*¢*¢1¢5¢>¢>¢J¢n££ ££0£M£P£U£d£u£v¤ ¤¤(¤0¤5¤:¤;¤B¤H¤M¤a„„@„C„C„H„H„H„O„P¦¦¦*¦+¦.¦6¦7¦?¦b¦j¦l¦r¦s§§§§(§)§4§E§mØØØ)ØBØS©© ©.©:©;©^©u©x©z©zŖŖ Ŗ&Ŗ2Ŗ2Ŗ6Ŗ7Ŗ7Ŗ@ŖCŖEŖMŖMŖRŖWŖbŖdŖeŖjŖsŖ|««««««&«-«6«B«b¬¬¬#¬7¬i­­ ­#­&­4­D­m­o­r®®®®®!®*®*®*®+®<®K®b®sÆ+Æ,Æ:ÆQÆ\Æ\Æhư°5°>°E°M°V°Y±E±X±t±v²²²²²&²'²)²/²<²L²L²M²M²l²s²w³ ³³³ ³ ³ ³!³#³#³+³7³>³n“9“j“j“v“~“~“~“~µµµ%µ%µNµZµmµnµ¶¶(¶1¶2¶>¶C¶L¶S¶x¶{··· ···@·]·g·i·m·x·z·}·øøøøøø2ø3øSøS¹¹¹$¹=¹`¹`ŗ ŗ$ŗ%ŗ2ŗ2»»)»Q»Q»R»X¼¼¼?¼H¼H¼[¼f¼f½$½L½g½l½l¾¾¾¾¾<¾]¾l¾l¾x¾æææ?æ?æPæ`ækĄĄĄ3Ą?ĄĮĮĮ$Į$Į,Į?ĮQĮQĮeĮmĮvĮwĮ|ĀĀĀ ĀĀĀĀ1ĀDĀIĀIĀRĀxĆĆ,Ć,ĆUĆsÄÄÄ(ÄJÅ<5…N¦W©q2†ž7³Z¶\‡d2ADf}}  EHnr‚ ‚ ‚B‚S‚Z‚n‚r‚xƒƒƒ!ƒ!ƒ!ƒ6ƒ:ƒAƒYƒgƒyƒy„„ „'„3„J„U„_„h„p…………… … … …… …#…/…8…H…H…H…I…W…Z…\…]†† †††(†3†5†6†;†<†=†>†E†F†H†I†N‡‡7‡9‡:‡?‡E‡F‡Z‡[‡\‡_‡_‡c‡d‡d‡f‡h‡h‡i‡j‡j‡k‡k‡o‡o‡qˆˆˆˆˆ ˆ+ˆ+ˆ,ˆ0ˆ@ˆCˆIˆM‰‰2‰4‰=‰W‰^‰b‰f‰f‰f‰g‰g‰h‰m‰m‰n‰q‰s‰t‰v‰w‰yŠŠŠŠŠŠ#Š+Š,Š-Š.Š1Š8Š>ŠBŠIŠRŠVŠ^‹‹‹‹ ‹)‹5‹9‹;‹>‹B‹H‹N‹O‹rŒŒŒ)Œ1Œ}Œ~Œ`mpŽ ŽŽŽDC~ "J\hy~‘2‘3‘4‘4‘@‘\‘]‘`‘j‘l‘m’ ’’’ ’Y’Z’r’~’“ “)“P“R“S“V“^“b“n“v””””+”0”0”2”5”5”6”@”K”U”X”Y”Y”n”}”}••9•E•F•G•J•J•K•Q•Q•Q•S•g•n––=–=–C–E–N–a–y–z——/—2—?—?—A—K—_—f—k—k—r˜˜4˜D˜E˜O˜P˜i˜y™™ ™ ™ ™!™H™H™j™j™k™k™m™qššš4š8š9šUšVšXšgšhšmšr››››› ›"›#›4›7›:›>›A›B›B›E›E›J›K›N›S›\›\›\›]›b›g›q›t›w›{›|œœœœœœ#œ/œ2œ5œ8œ=œ?œDœQœSœXœiœjœu!AAEFžž&žKŸ Ÿ ŸOŸ[Ÿ`ŸaŸbŸeŸx           8 > L ^ ^ h h ”””””%”%”W”X”_”g”g”r”r”{”¢¢¢M¢N¢_¢~¢~££££££ £&£(£,£0£1£2£?£A£P£Q£S£X£`£l£n£s£v¤ ¤¤"¤/¤3¤7¤7¤=¤>¤C¤G¤H¤Q¤R¤S¤T¤c¤r¤t¤y¤}¤~¤~„„„0„>„?„V„X„b„b„s„x„~¦ ¦ ¦¦¦¦¦¦¦"¦%¦(¦)¦0¦3¦4¦4¦H¦L¦O¦Q¦R¦j§§§§,§1§2§9§e§~ØØ(Ø(Ø)Ø=Ø>ØBØBØDØKØQØYØZØv© ©$©'©+©,©-©/©0©0©3©7©=©=©H©I©J©K©L©O©S©X©[©_©b©b©h©l©m©t©wŖŖŖŖ Ŗ ŖŖŖŖŖŖ!Ŗ"Ŗ$Ŗ'Ŗ(Ŗ)Ŗ+Ŗ+Ŗ6Ŗ7Ŗ8Ŗ8Ŗ<Ŗ>ŖGŖMŖUŖXŖ\Ŗ]Ŗ_ŖeŖfŖmŖnŖpŖrŖrŖxŖ}«« « « «««&«)«6«A«K«P«T«a«i«i«j«j«k«n«p«{¬¬¬¬¬ ¬ ¬ ¬¬¬¬¬¬¬¬ ¬&¬6¬A¬K¬Y¬Y¬Z¬\¬\¬`¬­>­>­@­D­E­E­G­H­H­I­O­P­R­S­V­c®®® ® ®"®%®'®+®H®H®V®V®\®d®h®j®q®s®w®z®~ÆÆÆÆÆ&Æ(Æ(Æ,Æ,Æ.Æ1Æ1Æ7ÆHÆHÆIÆJÆKÆLÆNÆPÆTÆTÆUÆVÆZÆiÆk° °-°/°0°1°3°3°E°H°P°V°a°f°g°j°m°m°s°u°v±o±t±u±v±y±y²²²²²%²&²0²W²g²l²o²³³³³ ³&³V³Y³d³j³k³l““$“)“5“7“>“Pµ µ µµ2µ:µFµNµ[µ]µ^µbµgµjµkµoµpµqµtµ|¶¶¶¶¶ ¶ ¶¶¶'¶,¶,¶8¶9¶:¶K¶N¶S¶U¶U···· ·#·1·A·G·[·]·_·g·h·k·m·n·o·q·røøø ø%ø&ø,ø6ø:øFøLøQøXøz¹¹¹ ¹¹2ŗ=ŗDŗPŗS»»»%»(»)»3»7»8»:»<»H»O»O»P»R»T»W»]»]»_»f»p»q»q»z¼¼¼¼¼¼$¼%¼1¼?¼A¼A¼\¼]¼`¼z½%½+½S½X½Y½_½_½`½f½f½g½h½i½l¾¾¾¾¾¾%¾)¾1¾9¾=¾D¾G¾]¾]¾yæ!æ+æ7æBæDæIæbæcædæfækæoæpæpæzĄ Ą Ą ĄĄĄĄĄkĄkĄ{Į+Į+Į,Į,Į-Į0Į:Į?Į?ĮAĮAĮCĮHĮIĮJĮWĮXĮZĮZĮZĮ[Į\Į]ĮbĮdĮhĮiĮjĮnĮnĮxĮ}Į~ĀĀ Ā ĀĀĀĀĀĀĀĀ$Ā%Ā+ĀRĀT2ˆ"ØZ(2Rƒ/ƒ0ƒ;ƒ;ƒU†‡‡‡Št‹%’”E”s—˜1˜5›”””¢*¦U¦a¦l§ÆM¶"·!ŗn»w¾YĮqĀ ÄfÅGÅHB257=ADQSTUhilsv}%',-.9MRRXceefhjknp‚‚‚‚‚‚!‚#‚$‚%‚)‚1‚2‚4‚A‚H‚T‚U‚W‚a‚b‚k‚k‚u‚x‚yƒƒƒƒƒƒƒ/ƒ0ƒ5ƒ5ƒ=ƒ=ƒ@ƒBƒCƒFƒHƒSƒUƒUƒdƒhƒqƒrƒsƒtƒuƒvƒxƒyƒyƒ}„„„„„ „ „ „ „„„„„„„/„2„6„7„K„O„O„_„e„f„g„h„l„t„u„w„|………$…+…8…;…<…=…=…>…>…?…B…G…K…V…V…W…_…f…g…h…h††††††††"†<†B†I†J†L†P†P†h†i†u‡‡‡ ‡ ‡ ‡‡‡‡‡*‡1‡3‡4‡4‡5‡8‡<‡?‡C‡D‡D‡I‡J‡\‡\‡`‡g‡n‡n‡p‡q‡sˆˆˆ!ˆHˆ\ˆcˆhˆoˆoˆpˆpˆqˆrˆxˆyˆzˆ}‰‰#‰$‰T‰V‰W‰^‰c‰e‰p‰q‰s‰s‰t‰w‰y‰zŠŠ ŠŠŠŠŠŠ%Š&Š&Š&Š(Š(Š,Š/Š0Š0Š2Š7Š:Š=Š=ŠHŠJŠXŠXŠY‹‹ ‹ ‹ ‹ ‹ ‹‹‹‹‹‹‹‹ ‹#‹#‹#‹$‹,‹1‹@‹B‹C‹G‹J‹O‹P‹Q‹R‹qŒŒŒ Œ,Œ7Œ8ŒTŒVŒYŒ\Œ`ŒeŒgŒkŒoŒtŒv  33446SSUXXY]hkxyy}ŽŽŽŽŽŽŽ Ž+Ž,Ž-Ž0Ž0Ž@ŽDŽOŽQŽQŽ\Ž`ŽqŽtŽvŽ{Ž{Ž%%'(*,<<=>>?@AABEFFGIMOOOS[\vv{   $&&7?CDDEbv|~‘ ‘‘#‘%‘&‘.‘/‘7‘7‘:‘;‘@‘H‘O‘T‘Y‘Z‘\‘_‘e‘g‘m‘o‘o‘y‘{‘|‘~’’’’ ’’’’’’#’;’<’>’E’O’P’R’j’{’{’}“““ “““““ “+“:“;“D“H“L“R“T“]“]“k“|“|“}””” ” ” ” ”””””””””&”(”1”2”3”4”5”6”8”=”E”L”X”Y”^”`”b”o”s”w”x”•••••••&•:•>•@•D•R•T•W•\•^•^•a•b•c•g•k•o•r•r•s•{––––––-–0–1–9–9–A–T–W–Y–c–e–l–p–q—————————— —"—$—2—6—F—N—N—N—P—^—n—n—r—u˜˜ ˜˜˜(˜(˜)˜.˜.˜1˜4˜5˜:˜=˜?˜B˜N˜T˜T˜U˜W˜^˜e˜p™™™™™™™ ™™™™™™.™1™;™?™G™K™S™T™W™^™_™m™p™t™u™y™zš%š(š/š9šBšJšKšTšXšYšešfšrš~››› › ››››››››&›'›0›:›=›@›K›M›N›P›S›g›j›w›z›|œœœœœœœœœ$œ&œ(œ)œ+œ8œ9œ9œ:œBœEœEœHœIœJœLœ]œ^œ_œlœoœuœxœ{œ|(EGLNSTfinrw}žžžžž žžžž,ž,ž-ž-ž-ž8žEžMžNžPžRžUžWžYž\ž]žažbžcždžgžgžižqžtŸŸŸŸŸŸŸ Ÿ#ŸCŸRŸVŸYŸ[ŸgŸmŸnŸrŸtŸtŸ{Ÿ      $ ' ' , 1 3 3 4 7 ; E F F R S e i l p w w } ~ ~””””””” ”%”/”1”I”e”l”n”p”s”t”z”|”~¢¢¢)¢0¢1¢9¢=¢A¢M¢N¢Q¢T¢l¢n¢n¢r¢}£ £ ££££ £(£*£4£G£L£Q£R£S£U£V£]£t£u£}¤¤¤ ¤ ¤¤¤¤¤¤¤/¤2¤:¤:¤;¤;¤?¤B¤D¤E¤E¤i¤y„„„„„„„ „„„„„„„„„„„„„'„4„<„<„=„=„L„L„Q„Q„T„e„t„w„¦¦¦)¦;¦<¦>¦D¦E¦O¦S¦T¦T¦T¦Z¦`¦a¦c¦f¦l¦u¦v§§§§§§!§"§&§;§<§<§<§?§@§A§T§Z§[§n§s§w§z§|ØØØØØØØØØØØ!Ø!Ø"Ø#Ø(Ø.Ø3Ø8Ø9Ø>Ø@ØBØDØFØGØHØIØ_ØbØfØhØpØrØtØ}© ©©©©©)©.©9©=©R©S©T©U©W©Y©^©d©g©m©r©s©t©v©w©y©{©|©}ŖŖŖŖŖŖŖ Ŗ(ŖAŖEŖFŖIŖJŖLŖVŖZŖ\Ŗ`ŖaŖcŖhŖjŖkŖkŖlŖmŖwŖyŖyŖzŖzŖ{Ŗ|« « « «« « «"«1«1«2«7«:«>«D«W«f«f«h«h«m«u«v«x«|«~¬¬ ¬ ¬¬¬¬ ¬"¬&¬+¬,¬7¬8¬8¬:¬=¬A¬N¬O¬Y¬j¬n¬o¬o¬p¬v¬­­­­­­­­"­#­#­%­&­&­(­)­/­E­G­M­O­U­W­X­Y­Z­[­r­v­v­y®®® ®®®#®'®(®0®4®9®F®I®J®J®L®N®Y®\®_®g®h®m®w®|ÆÆ&Æ'Æ)Æ,Æ3Æ4Æ9ÆBÆDÆJÆKÆPÆQÆUÆ\Æ\Æ_Æ`Æg°° °°°°° °/°0°1°4°4°4°@°O°Y°Z°]°f°l°s°t°y°|±±±±±±±±±0±;±?±@±C±F±K±o±u±|²² ²²²²² ²!²$²*²+²-²6²;²;²?²@²@²N²N²T²T²a²g²p²y²y³³ ³³³"³#³%³'³'³*³*³+³.³9³;³?³H³M³N³R³U³U³V³X³w³|“““ ““<“=“J“R“R“V“Y“\“_“`“f“f“j“m“q“s“s“t“v“z“}“~“~µµ µµ&µ5µ7µ<µcµgµhµkµmµoµpµtµuµyµ|¶¶¶¶¶ ¶¶$¶$¶%¶'¶'¶)¶3¶C¶D¶E¶K¶L¶L¶M¶P¶`¶`¶k¶l¶n¶q¶s¶s¶u¶v¶x¶z¶{···· · · · ·····"·(·>·?·?·?·@·B·D·D·K·T·[·]·^·`·o·s·w·øøøø ø ø ø ø ø ø&ø,ø/ø5ø=ø>ø?øBøJøJøLøMøVøWøZøZøføhøxøzø¹¹ ¹¹¹¹¹¹¹¹!¹"¹$¹2¹=¹K¹S¹l¹v¹~ŗŗ ŗ!ŗ6ŗ:ŗ=ŗZŗ`ŗhŗnŗp»» »»»»»»»(»)»+»3»S»e»g»l»}¼¼¼¼ ¼ ¼ ¼¼¼¼¼!¼$¼%¼6¼6¼6¼<¼?¼A¼K¼R¼[¼\¼\¼]¼e¼s¼y¼|¼}¼~½½½ ½½½,½B½U½X½Z½[½]½e½g½l½p½~¾¾¾¾ ¾ ¾ ¾¾¾¾¾$¾(¾(¾,¾,¾-¾-¾-¾.¾/¾8¾D¾M¾Y¾^¾^¾a¾f¾f¾i¾i¾n¾x¾|¾|¾~¾ææ æææ2æ2æ<æ>æ?æAæDæOæQæUæWæWæXæ[æ]æ`æhæiæiæjæræsæxæxæ{æ|ĄĄĄĄ Ą Ą Ą ĄĄĄĄĄĄĄ Ą Ą"Ą#Ą&Ą(Ą2Ą3ĄFĄTĄWĄZĄ[Ą[Ą[Ą\Ą\Ą]Ą]ĄgĄgĄuĄ{ĮĮ ĮĮĮ$Į+Į5Į6Į>ĮBĮGĮMĮTĮ\Į]Į]Į^ĮcĮmĮqĮ}Į~ĮĀĀĀ Ā Ā ĀĀ7Ā7Ā:Ā<Ā=ĀKĀQĀSĀTĀnĀtĆĆĆĆĆĆĆĆ Ć&Ć*Ć7ĆCĆNĆQĆ`ĆlĆlĆoĆpĆpĆpĆpĆuĆyĆ}Ä Ä Ä ÄÄÄÄÄÄÄÄ)Ä*Ä*Ä1Ä<Ä>Ä>Ä@ÄBÄBÄDÄEÄFÄ]ÄnÄxÅÅ-Å6Å8Å=2Dƒ;ƒU„g‹%‹Te—2™ž4¦>©W©b¬Y²c³ ³k·»»)¼]2‚l†ˆ"‹ ”b¤§Z©©V«G²Eµd¶ ·q½a2Sbi‚G‚Vƒƒ[ƒg„E„X…X†‡‡‡<‡\‡pˆ+‰WŠ6‹‹‹‹ ‹<‹B‹L‹UŒeŒqŒt.Ž=Žc\ww‘2‘\’’’’}“ “y” ”5––R—™xšVš~›››"›+›0›4›8›=›iœœ"œ(œ`œkœu      s”z¢8¢p£)£5£9£>¤+¤6„4„W„i¦_§§1§3§9§p§yØØ5©©UŖg«3«6¬"¬/¬5¬_¬p­^®®®"®,®:®i®xÆÆ2Æ7°W±±±±n²² ²g³ ³ ³ ³µb¶¶E¶W¶w¶øø3ø?øEøK¹!ŗŗ.»¼ ¼¼¼`½g¾D¾]æ6æaĄ Ą!ĮSĮY11GJS"=LN‚‚$ƒ ƒ ƒ<ƒA„„…††7†7†X‡&ˆ;ˆTˆx‰‰&‰+‰SŠŠŠmŒŒ#Œ%Œ0Œ\ŽŽŽVŽaŽc Sbaff•–(–-–N–v——!—%—O—n—y˜˜˜(˜*˜p˜q˜r™9™I™f™iš'š.šEšGš`šn%Ujwx~žž žžhž~ " 9 F F {” ”4”6”p”w£ £¤¤§sØf©}««.«e«q¬#¬0¬L¬Q¬a¬{­­k±±/²[²h³Z³y“ “*“jµL¹6ŗ$ŗ-ŗ1¼9¼K½½ ¾O¾S¾a¾o¾uææ,æ?æ`Ą&Ą'ĀoĆĆ Ć1Ć6ĆOÄ=ÄqÅŁd169OOm$1‚‚‚yƒƒ>ƒ>ƒnƒx„„„2„J„S†F†N†n†r‡vˆˆ#ˆ[‰‰8‰`‰a‰g‰sŠŠŠŠŠ<ŠJŠ\‹'‹)‹0‹0‹3‹A‹D‹E‹G‹L‹qŒŒ Ž@ŽIŽt>CEs‘5‘u’-“!“"“{”'”E”K••D•o•z–=–W—G—G—M—Q˜M˜T˜Z˜i˜n˜p™1™C™`™a™ašœž0ž@žažbŸu E E K l x x ~”” ”.”u¢P¢T¢g¤ ¤.¤c¤i¤y„„„„ „"„=¦¦¦ ¦ ¦¦:¦J¦x§r© ©D©J©R©f©g©o©sŖŖ ŖUŖXŖZŖ\Ŗ`ŖcŖeŖfŖjŖmŖnŖrŖtŖu¬¬¬¬,¬4¬[­­+­=­L­W­~®$®UÆ)°(°3°4±±±&²F³*³;³P³R³Y³i“s“sµ0¶2···&·1·2·_øø8øMøy¹ŗFŗrŗx»I»I¼K¼O½½x½{¾9¾QæææWĄvĮ2ĮTĀĀĀĀ9ĀVĆÄ Å%Œ1Te|~ $%--.1o‚‚‚‚‚P‚f‚f‚oƒƒƒƒ'ƒ-ƒ4ƒ?ƒ@ƒBƒRƒRƒTƒUƒ]ƒ]ƒqƒqƒrƒtƒvƒ}„„ „ „„„„ „ „'„(„4„6„N„N„O„T„X„^„`„g„h……………………8…<…=…>…?…G…J…X…\…w…x…}†† † † † †††††††††!†"†#†%†&†5†6†:†E†J†K†L†P†X‡‡‡%‡8‡F‡F‡L‡R‡[‡[‡]‡]‡`‡b‡f‡k‡n‡p‡vˆˆˆˆ ˆ+ˆ,ˆ,ˆ7ˆAˆCˆEˆFˆJˆMˆTˆ]ˆ]‰‰1‰1‰;‰=‰a‰e‰e‰k‰m‰q‰r‰s‰t‰u‰yŠŠŠŠŠŠŠ,Š.Š1Š1Š1Š4Š6Š6Š:Š>Š>ŠAŠAŠAŠ_Šx‹‹‹‹‹‹"‹%‹.‹2‹4‹5‹8‹8‹8‹:‹;‹@‹M‹M‹N‹T‹Y‹m‹n‹p‹rŒŒ(Œ+Œ>ŒAŒ\Œ]ŒbŒjŒqŒsŒ|Œ~Œ  ?AB`bcehimŽŽ-Ž0B  !!##-=ahhxxy}}‘$‘(‘(‘.‘3‘;‘<‘D‘D‘G‘H‘K‘K‘\‘`‘j‘k‘m‘n‘~’’ ’#’#’$’%’>’>’b’c’d’u’}’““&“+“+“/“/“0“5“6“>“L“M“N“R“T“V“[“\“b“g“m“v“|“””””” ” ””””””””””” ”"”&”&”(”(”)”*”0”1”1”3”4”6”@”E”F”K”N”S”X”X”`”d”}•• • • •••••••$•3•7•9•?•?•A•F•G•K•K•N•Q•R•R•S•V•V•W•Z•i•j•j•k•l•n•p•v•v•w•z––––0–0–8–B–X–X–c–n–u–}——@—@—D—O—^—j˜˜˜%˜=˜@˜B˜C˜F˜N˜P˜Q˜R˜R˜S˜z™™ ™ ™I™R™j™q™~šš šš4š5š7š9š<š<šQšVšVš_š_šmšqšršušušušyš|›››››››› ›!›"›"›#›$›*›,›/›0›2›7›8›=›>›?›@›@›D›J›J›K›N›O›O›P›Q›R›T›X›[›]›a›j›k›l›m›p›r›r›w›x›x›y›y›z›{›|œœœ œœœœœ!œ$œ$œ(œ(œ-œ/œ0œ5œ>œ?œ@œ@œ@œAœBœCœEœHœKœNœRœWœWœWœXœ\œ\œcœgœhœtœvœwœwœxœyœ~œ~ AESTžž(Ÿ ŸBŸDŸGŸGŸIŸNŸNŸOŸWŸYŸ[Ÿ]Ÿ`ŸdŸgŸiŸjŸmŸrŸ              4 4 F T Y h””””” ”'”6”9”A”I”J”U”V”X”_”h”s”s”t”z”{”}”}”~”¢¢¢N¢O¢Q¢S¢Z££££££££&£'£)£+£.£.£5£A£A£B£J£M£]£]£]£^£a£k£q£t£u£v£z£z£|£}¤¤ ¤ ¤ ¤¤+¤3¤5¤9¤:¤:¤;¤>¤B¤F¤H¤H¤J¤N¤P¤Q¤R¤Y¤b¤f¤q¤r¤s¤z¤}„„„„ „ „ „„„„„„%„'„,„1„1„5„5„8„9„P„U„U„W„[„[„^„p„q„t„y„{„{¦¦¦ ¦¦¦¦¦!¦#¦(¦(¦-¦-¦-¦.¦0¦2¦>¦@¦I¦K¦N¦P¦R¦U¦b¦c§§§%§+§4§4§9§@§G§I§L§N§Z§\§e§h§o§q§y§z§|§~ØØØØ ØØØ6Ø:ØQØSØSØUØUØVØYØ`ØkØ}Ø~© © © ©©©'©(©+©+©.©1©3©3©9©:©<©?©A©D©D©F©H©H©K©R©S©U©X©Y©Z©\©a©ŖŖ ŖŖŖŖ Ŗ$Ŗ%Ŗ&Ŗ*Ŗ+Ŗ+Ŗ0Ŗ6Ŗ8Ŗ8Ŗ?Ŗ@ŖMŖWŖbŖsŖwŖ|Ŗ|«««« « « ««&«*«6«<«=«A«D«F«G«L«W«m«««¬¬¬¬ ¬¬ ¬@¬O¬X¬X¬Y¬]¬_¬c¬g¬n¬p¬p¬q¬r¬x¬x­­­­­­­­­ ­'­1­4­7­=­?­?­C­D­D­F­H­O­}­®®®® ® ®®$®%®%®'®(®)®*®*®*®+®,®2®4®5®7®7®9®;®<®D®G®P®S®S®T®Y®\®]®]®a®b®f®f®g®h®i®j®l®m®s®w®x®z®|®}ÆÆÆÆÆÆÆÆÆ Æ)Æ+Æ,Æ,Æ-Æ1Æ8Æ8Æ:Æ;Æ?Æ?Æ?Æ?ÆHÆKÆMÆOÆOÆTÆTÆVÆWÆ\Æ\Æ^Æ^Æ_ÆaÆaÆbÆdÆdÆhÆkÆm°° ° °°°°° °"°"°#°+°+°-°-°.°0°2°5°9°C°E°F°F°G°L°M°N°O°S°T°V°^°a°i°i°s°u°u°w°}°~±±±±±±±±±0±4±5±6±]±n±o±q±t±t±u±{² ²²²²²&²*²2²<²<²C²T²W²b²g²h²h²l²l²n²n²p²u²w²y²{²|²³³³³³³ ³ ³ ³³³³ ³#³&³:³N³]³]³`³d³e³g³l³r³r³s“““1“5“=“B“j“sµ µµµµµ%µ%µ6µ7µ9µ9µBµFµFµZµZµ[µ\µ\µ]µ^µ_µaµaµbµbµcµfµgµjµjµmµnµpµqµrµrµxµ|µ~µ¶¶¶¶¶ ¶¶¶0¶2¶3¶7¶9¶:¶?¶B¶I¶K¶R¶]¶^¶e¶h¶i¶j¶p¶p¶q¶s¶u¶v¶x¶z··· · ····!·"·#·$·$·%·&·&·(·@·]·b·h·l·n·øøøøøøø ø øøø%ø&ø0ø3ø4ø5ø:ø:ø>øIøLøRøSøUøUøeøføgøpøq¹¹¹¹.¹2¹Gŗŗ ŗ ŗŗ=ŗ@ŗTŗVŗtŗt»»»»»»»%»(»)»*»+»2»6»8»8»D»G»H»I»I»Q»Q»R»T»U»X»[»e»e»i»n»p»t»~¼¼ ¼¼¼¼¼¼¼%¼%¼+¼.¼0¼1¼9¼<¼A¼V¼W¼[¼]¼^¼a½½½½½&½+½H½J½L½O½\½_½a½e½e½g½i½i½p½t½x½{½|¾¾¾¾¾¾¾¾¾"¾#¾%¾(¾(¾)¾1¾5¾8¾<¾<¾=¾=¾]¾xææ"æ&æ8æ=æ=æ>æ@æAæAæEæIæMæMæ_æ`æeæoæqæræsæsæuæuĄ Ą ĄĄĄ#ĄlĄwĄxĮĮ$Į$Į$Į%Į+Į,Į-Į.Į/Į/Į0Į1Į2Į2Į2Į3Į3Į4Į8Į:Į:Į:Į>Į@Į@ĮAĮDĮGĮHĮQĮQĮRĮWĮXĮ[Į^ĮbĮeĮgĮjĮlĮnĮqĮqĮrĮrĮsĮsĮvĮvĮxĮzĮ|Į|Į~ĮĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀ Ā!Ā!Ā"Ā$Ā%Ā'Ā'Ā)Ā*Ā*Ā-Ā/Ā/Ā3Ā4Ā5Ā=ĀKĀTÄÄ Å711…K—p¦q‚1N;BS[y‚‚!ƒ/ƒz„„„„„ „1„_„t………!…G…J…L…O…X…z†O‡7‡a‡t‡~ˆˆ9ˆwˆ}‰hŠ ŠŠ"Š"ŠdŠx‹‹‹‹‹‹9‹OŒŒ4ŒNŒbŒcŒgŒmŒ{ TŽŽŽ Ž ŽŽŽ(NZ`(P}‘‘D‘F‘O‘^‘p’ ’3“ “;“v” ”'”+”,”W• •C•C–5–_–f————&—V—`—j—l—m—o—o—q—u˜^˜f˜h˜o™ ™ ™:™\››3›>›J›oœœLEFNOjž ž1žRžfžpžqŸŸŸ5ŸIŸZ $ . 3 O””I¢¢+¢,¢.¢p££*£_£q¤.¤Y¤^„„„„„-„{§Q§c§cØØØ-ØnØt©©Ŗ ŖŖŖ2Ŗm««A«f¬¬¬¬¬&¬n­4­7®®-®F®zÆQÆeÆeÆv°:°}°}±!±.±n² ³³ ³!³:³V“2µµ<µ\µc¶W··G·K·P·_·p·q·qø#ø%øRøSøUøVø[øføn¹ŗ»8»G»o¼¼9½.¾¾tæææ3æ4æsæzĄ<ĄvĄwĮĮfĀ!Ā2ĀBĀEĀ`Ä ÄkÄ{ÄÄÅÅÅÅ*Å5Å<L1EKLMNQQWn}B‚,ƒ+ƒ-ƒ/ƒ0ƒ7ƒ7ƒ;ƒSƒh„ „S†‡J‡wˆ‰k‹%Ž7 ‘‘‘d‘d‘f‘g˜™?™Xš%š'šAšGšHž^ s”¢"¢/¢C¢E¢g¤¤¤¤o¦4¦}¦}¦~§|Ø©x¶]¹jŗ.» æBæTĄ#ĄFĄhĮ10†L ”¢6£§J‘0:FJKhnruy~ )-238:;HHMNNORW[pxx‚‚‚‚!‚"‚"‚"‚&‚*‚+‚0‚0‚0‚3‚5‚5‚<‚<‚=‚B‚D‚G‚K‚M‚M‚O‚Q‚U‚W‚Y‚\‚a‚p‚p‚}ƒƒƒƒƒ"ƒ(ƒ-ƒ1ƒ2ƒ3ƒ5ƒ:ƒ?ƒ@ƒCƒGƒKƒRƒ]ƒ]ƒ_ƒdƒhƒsƒtƒvƒxƒxƒyƒ|ƒ}ƒ„„„„ „„„„ „!„'„(„(„2„3„7„?„A„J„K„P„S„_„a„c„q„u„u„v„x„x„z„|„„… ……………………………!…$…&…'…+…,….….…1…7…<…<…?…G…G…I…L…N…V…]…]…]…^…^…`…a…e…h…i…i…j…t…t…u…y…y…{…}††††† † ††† †)†*†.†0†0†3†5†6†A†C†J†L†L†O†O†P†Q†V†[†q†t†u†x†z†~†~†‡‡‡‡‡‡‡‡‡‡"‡"‡*‡2‡?‡A‡U‡U‡W‡^‡a‡a‡b‡k‡xˆˆˆˆˆˆ(ˆ5ˆAˆFˆHˆIˆVˆcˆeˆiˆsˆvˆvˆwˆwˆx‰ ‰ ‰‰‰‰$‰%‰&‰(‰(‰/‰2‰>‰@‰^‰^‰e‰j‰j‰l‰m‰p‰s‰t‰v‰w‰ŠŠŠŠŠ*Š+Š/Š8Š:Š;ŠEŠIŠLŠOŠ`ŠqŠsŠ{Š}Š}‹‹ ‹‹‹‹‹‹‹‹‹‹‹$‹*‹2‹2‹3‹4‹9‹;‹@‹A‹A‹F‹M‹N‹Y‹\‹\‹i‹p‹q‹s‹}‹ŒŒŒŒ Œ Œ ŒŒŒ!Œ'Œ'Œ+Œ+Œ;Œ@ŒDŒDŒOŒRŒSŒZŒbŒcŒ~Œ~ŒŒ   $&',--//137?DHHKLMm{}ŽŽ ŽŽŽŽŽŽ Ž!Ž%Ž<ŽRŽYŽ[Ž\Ž]Ž^Ž_Ž`ŽcŽqŽrŽsŽwŽ| "05=JNUWW]]``w~   ##()./5=>ALRST\afhittuuvw‘‘‘‘‘‘‘‘‘‘ ‘'‘(‘.‘.‘B‘E‘J‘L‘M‘R‘R‘S‘T‘U‘U‘W‘_‘_‘a‘b‘b‘l‘m‘n‘p‘x‘~‘’’’’ ’ ’ ’’’’’’!’%’%’%’-’5’:’:’>’?’?’L’Q’X’X’a’k’l’n’q’t’t’{““ “ “““““!“!“!“#“$“&“/“5“6“7“@“D“D“E“H“I“M“a“b“s“””””” ” ” ” ”””””””””””””"”'”0”8”;”@”A”L”R”S”S”S”T”U”U”V”V”X”X”d”h”j”j”j”j”p”s”~•• •••%•%•&•&•*•+•+•<•>•@•E•K•O•R•S•V•Z•\•\•a•c•y•––– ––––$–&–*–0–2–6–8–9–<–<–E–E–R–R–V–W–Y–\–]–^–g–i–l–m–q–r–|–|— — — ———————$—&—&—'—-—8—9—<—G—G—L—O—P—P—R—U—Y—`—`—j—j—l—l—n—r—}˜˜ ˜˜˜˜˜ ˜(˜+˜,˜0˜1˜>˜>˜C˜E˜F˜M˜N˜Q˜T˜Y˜^˜d˜l˜o˜p˜}˜}˜}™™™™™™™™™™!™!™!™"™+™/™2™3™6™8™=™B™C™K™M™R™R™\™]™c™d™e™h™j™j™q™u™šš šššššš š#š$š'š(š)š*š,š1š8š9š<š=š@šBšCšEšEšNšQšUš`šašašjšjšjšnšqšušxš|›››› ›#›$›&›&›*›-›-›3›7›=›F›K›P›U›W›Y›[›\›]›c›l›n›p›q›q›s›y›y›z›{›|›~œœœœœœ$œ%œ(œ*œ:œ@œBœBœCœEœRœSœSœYœ_œdœhœiœjœlœmœmœmœnœoœtœuœuœwœwœxœxœ|"%)0122335:BEJJJKNOQY`gjmppqtwyz|žžž ž žžž!ž$ž%ž+ž+ž,ž:žBžCžOžVž[žjžsžxžŸŸŸŸŸŸŸ Ÿ ŸŸŸ"Ÿ(Ÿ-Ÿ.Ÿ.Ÿ0Ÿ0Ÿ1Ÿ4Ÿ:Ÿ;Ÿ;ŸDŸDŸGŸMŸVŸZŸZŸ[ŸdŸdŸiŸlŸlŸlŸmŸmŸnŸoŸtŸtŸ}Ÿ~          2 7 8 9 ; > D E G G H H K L L R T T U \ ^ w | ”””””” ” ”””””””” ”!”"”-”-”0”4”6”:”@”K”P”Q”R”_”a”b”c”e”e”f”g”h”k”l”o”y”y”{”|”}”~¢¢ ¢ ¢ ¢ ¢¢¢¢¢¢ ¢!¢!¢%¢&¢1¢4¢6¢6¢9¢9¢:¢;¢?¢B¢E¢G¢H¢J¢K¢M¢P¢S¢W¢Z¢h¢i¢o¢u¢w¢££££ £ ££££££££ £)£+£+£.£/£/£/£/£0£:£B£M£T£U£X£X£^£_£m£q£t£u£{£{£}£~£~£¤¤ ¤ ¤ ¤¤¤¤¤¤¤"¤$¤/¤0¤2¤6¤>¤?¤?¤?¤G¤I¤J¤U¤Y¤c¤d¤i¤l¤r¤s¤s¤w„ „ „„„„(„,„-„.„2„4„6„6„9„>„?„@„M„M„P„Y„p„q„t„w„x„x„|¦¦¦ ¦ ¦¦¦¦¦¦(¦,¦-¦0¦2¦4¦<¦>¦>¦?¦C¦D¦F¦H¦K¦L¦N¦O¦P¦Q¦R¦S¦U¦]¦_¦`¦a¦d¦h¦i¦i¦l¦m¦m¦o¦o¦q¦t¦t¦u¦}§§§§§ § §§§§§§§§"§%§+§+§4§5§6§;§>§?§@§B§F§F§J§O§T§T§W§X§Z§\§a§h§j§kØØØØØØ%Ø4Ø8Ø=ØBØBØFØIØOØQØQØ[Ø`Ø}©#©(©(©)©*©*©1©7©9©<©>©?©C©D©E©L©L©T©\©]©_©d©e©g©i©n©o©s©w©y©|©ŖŖŖ ŖŖŖŖŖ0Ŗ5Ŗ;ŖGŖIŖLŖOŖQŖXŖ[Ŗk«««««««!«#«#«,«,«.«2«?«E«G«I«M«M«R«R«U«Y«]«b«k«k«s«u«w«w«x«y«z«}¬¬¬¬¬¬¬¬¬ ¬-¬4¬4¬6¬6¬7¬7¬8¬8¬=¬=¬?¬A¬F¬H¬L¬O¬U¬Z¬\¬_¬i¬i¬j¬l¬p¬r¬x¬y¬z­­­­­­­­ ­­­%­=­@­E­H­P­V­W­X­Y­b­q­|­­®® ®®"®(®)®,®3®;®E®L®M®P®U®V®b®j®l®n®q®rÆÆÆÆÆÆÆÆÆÆ+Æ1Æ;ÆBÆCÆDÆEÆEÆJÆLÆUÆUÆUÆWÆYÆ_Æ_Æ`ÆhÆmư°°° °°°°°°°°#°'°1°2°2°8°9°;°>°>°B°D°G°H°N°R°R°^°g°i°r°v°y°|°~±±±± ± ± ± ±±±±±±±±±±±± ± ±!±"±&±(±*±,±-±0±0±1±1±2±5±9±;±<±?±?±@±A±D±J±K±L±M±P±Q±Q±X±_±c±d±q±v±±±²²²²² ² ² ² ²²²"²%²&²&²'²*²1²7²8²8²?²K²L²M²U²\²a²j²o²p²t²³³³!³+³-³/³0³5³8³?³@³@³G³G³G³S³S³_³`³a³c³d³e³i³k³l³o³s“ “#“8“9“E“X“`“f“g“n“q“q“{µµµ µ µ µµµµµµ!µ.µ9µ9µ9µDµGµHµIµJµKµOµPµQµTµTµWµZµ[µ\µ^µaµeµsµ¶¶¶¶¶$¶'¶+¶-¶0¶0¶1¶2¶2¶4¶6¶7¶7¶8¶U¶V¶X¶Y¶b¶p¶w·· ····#·#·%·&·(·.·7·>·A·B·E·G·I·P·S·]·d·g·m·n·p·p·r·s·x·z·|øøøøøøøø ø!ø"ø"ø%ø&ø2ø4ø?ø?øJøKøQø`øfømøpøyø¹¹¹¹¹¹¹ ¹¹¹&¹*¹,¹6¹7¹8¹8¹8¹K¹O¹|¹|ŗŗŗ ŗ(ŗ2ŗ;ŗPŗSŗdŗnŗwŗw»»»»»#»%»(»4»5»7»9»?»B»G»H»L»O»P»P»Q»S»S»V»[»]»`»j»p»v»w»|¼¼¼¼¼¼$¼)¼)¼:¼;¼@¼@¼@¼F¼G¼J¼L¼Q¼W¼W¼X¼Y¼]¼^¼w¼z¼|¼|¼|¼|¼}¼~¼~½½½½½$½8½Z½[½[½_½`½`½a½e½e½f½f½g½h½u½y¾¾¾¾¾¾¾#¾$¾%¾1¾2¾2¾3¾5¾C¾H¾R¾R¾X¾Y¾a¾d¾h¾k¾l¾|¾}ææ æ æ æ æææ!æ%æ&æ/æ7æ:æ>æGæGæIæIæQæSæTæTæ_æiælæpæpæqæræwæyæzæ|ĄĄĄĄĄĄ1Ą7Ą:Ą<Ą=Ą>ĄFĄGĄGĄHĄNĄ^ĄbĄhĄlĄnĄsĄtĄtĄvĄxĄxĄ|Ą|Ą}Ą}ĄĮĮĮ Į ĮĮĮĮĮĮĮ%Į.Į/Į3Į;Į<Į<ĮAĮBĮDĮIĮMĮOĮTĮWĮXĮ\ĮaĮbĮeĮkĮnĮoĮvĮxĀĀ Ā ĀĀĀĀĀĀĀĀĀĀĀĀ$Ā$Ā%Ā(Ā-ĀHĀNĀNĀqĀrĀ{ĆĆĆĆĆĆĆĆĆ"Ć*Ć,Ć.Ć8Ć?ĆAĆBĆPĆQĆ\ĆfĆiĆkĆoĆuĆzĆÄÄÄÄÄÄÄ Ä ÄÄÄÄ$Ä(Ä3Ä8Ä?ÄBÄDÄDÄDÄGÄJÄKÄQÄRÄVÄ]Ä^ÄjÄkÄmÄnÄpÄ}Ä~ÅÅÅÅÅÅÅÅÅ&Å/ÅFÅFÅGÅGÅHÅH0369;=G‚‚7ƒ<ƒIƒgƒsƒu„…I…S…j††‡‡‡wˆ"ˆ]‰ŠŠY‹+‹+ŒŒlŒxŽ{!Tu‘(’““0“G”•–*–B–{—z˜˜˜?˜a›F›pœ1Lž$žLžuŸŸdŸ|Ÿ} 2 ?” ¢¢U££M„ „'„8„9¦ §§§>§}ØVØ[©$«-«F«[«h«t¬ ¬?¬dÆ=±±V²²²"²'²C²[²b³“2µ^¶3¶K¶X·¹¹Z¹\ŗŗ^¼d¼h½½,½`¾H¾sĄ.Ą^ĄnĮ<Į[ĮkĀ ĆĆ ,02699;1ƒg„6„O…>†hŠ$ŠBŠj‹ ‘m‘m”–@–B–W—z—z™+™I™eššg›e›užsŸ0” ¦3§dØV© ŖTŖ}°O“#¹7¾c0001EFGHIIJKSw6‚ƒf„T‹/–—™Tšd›K \¢E£­Mææræ|.ĀhĀhĆmĀhĀhĀh †‰uš>Ÿy„P¼]ĄgĀhÅ7øMĆÅAƒ ƒ‰fŠŠ;ŠMŠQŠ_!<‘„*«B¬µJ†J”‚re,jor‚‚‚1‚^ƒ„„%„8„T„c„f… …+…6…;†/†X‡ ‡‡9‡=‡G‡`‡dˆ ˆ+ˆZˆwˆ}ˆ~‰=‰V‰^‰d‰i‰o‰qŠEŠIŠT‹F‹J‹Q‹aŒŒ"ŒtŒ|,AX\`yŽ-Ž|",1CR#=FXy‘‘#‘@‘A’’’’$’2’W““2“a”””””0”1••9–——— —)—P˜/˜0˜<˜S˜c™™™*™-™H™q™r™u™zš(š+š4šfšr› ›››"›B›U›`›zœœœœœ!œ)œ/œ2œHœa)\hqžž1žBžBžSŸŸ7Ÿ8ŸSŸXŸZŸh    . 4 S ^””4”C”P”_”s¢)¢,£,£5£Q£Y£[£m¤C¤F¤O¤r„„„„ „„„„0„U„X¦¦¦1¦I¦O¦S§+§D§eØØØBØVØ\Ø_ØaØg©©3©U©vŖŖŖIŖLŖ\ŖnŖ|«« ««««+«-«9«L«Q¬¬U­­­­ ­'­2­5­:­L®®®"®&®'®-®3®5®7®8®A®E®H®w®yÆ'Æ(Æ+Æ?ÆdÆiÆm°3°<°X°Z°]°u±+±C±G±V±o² ² ²m²r²v³³%³^³`“*“UµµµLµdµrµu¶¶6¶6¶p···(·*·B·G·h·qøøø!ø"ø=øCøFøIøLø[øgø{¹¹¹7¹G¹\ŗ ŗZ»»E»c»f¼¼%¼)¼J¼W¼f¼{¼~½½$½X½t¾¾¾(¾,¾jæ ææcæwĄ Ą@Ą@Ą^ĮĮ;ĮPĮQĮYĀĀĀ:ĀNĀNĀSĆĆ,Ć:ĆCĆRĆnÄÄÄ$Ä'Ä@„\ĆMÄ.ÄbĀj2„v…‡ ‡3‡F‡sˆFˆLˆYŠŠVh?‘“#“+•`™S™tšm{ž$Ÿ ŸT  T p¤<ØK«k«y­R°N°a³n“1µµ=µBµr·¹½)¾"æeĄĀRĀdĆ  øvĀdĀdĀf  ‡ ˆ ‰v˜ÄÅ  ’U¦Q ‰jŖXÆd¹"Ć ĆKĆnÅCĀfĆKĆnÄrÅCĆ ĆKÅ.ĆJĆrÅ=ĀqĀ{ĆĆĆ Ć ĆĆ3ĆBĆJĆ\Ć`ĆgĆsÄ D„I¬²²“+ĀqĆĆ ĆĆĆĆĆĆ!Ć/Ć1Ć8ĆJĆ[Ć[Ć`ĆfÄ Äă`ˆt “Y›Ÿx¦'©B³Yø-æcĄ ĆJÄÄ2Ä7Äy‚*2=>bp))OZ‚[‚g‚oƒƒ!ƒ"ƒ5ƒ6„„…7…H…h…u††P†k†k†w†‡‡ˆˆVˆy‰ŠŠ&‹‹‹#ŒzeŽs4O[‘‘ ‘G‘h‘h‘n‘o‘v‘y“"“/“K”””””V•p–&–Q—n˜L›kœ&œ7œPœcœwZ_xxž ž<žCžbŸŸŸLŸ`ŸiŸwŸ|Ÿ~ 4 W m n w”””¢ ¢3¢4£1£g£q¤¤'¤^¤`¤`„„„„„K„p¦¦ ¦!¦&¦1¦:¦<¦T¦T¦_¦p¦r¦z§§§ § § §§§§§§§-§0§:§:§<§C§E§E§]§a§a§g§ØZ©©]©^©i©t©xŖSŖUŖb««2«H«w¬>­.­P­ZÆ)Æ.Æ@ÆC°°°>°@°I± ±5±C±H±I±I±x²[“tµT¶q·v·{ø!øE¹»D»b»c¼I¾)¾\¾i¾|æwĄ'Ą1Ą;ĄWĄ[ĄgĄgĮĮ/Į0Ā Ā Ā ĀdĆĆĆĆ ĆĆĆĆĆĆ&Ć+Ć9Ć:ĆAĆDĆFĆIĆKĆQĆQĆRĆTĆUĆ_Ć_Ć`ĆaĆcĆdĆfĆjĆkĆkĆmĆoĆpĆqĆvĆwĆyĆzÄÄ Ä ÄÄÄÄ(Ä)Ä*Ä*Ä+Ä+Ä/Ä5Ä8Ä<ÄAÄCÄIÄKÄLÄOÄOÄPÄRÄSÄWÄ\Ä]Ä]Ä^Ä^Ä{Å fw‚=‚[ƒw„R……††E†u†‡‡jˆ+ˆ7Š%‹ f!?c‘+‘c’s”q•••Q–—™™hš-š.š4š9šAš^š_›{FŸŸ]Ÿn z””<”n¢¢"££Y£^¤J¤X¤|„&ØØ6© ©3««G«s­<®®®)®F®N®gưB°j±]²<³gµp¶C·#ø øEøm»G¼¼|¾2¾kæ.æ0Ą'ĮfĮzĮĀ*Ā=ĀDĀyĆI+…G…]††t‡wˆˆˆ‹qŒ'Œ~”˜˜p˜}Nžž%ž6”b£C§\§nŖ¬y­²U·|ø!øl¹*¹O¹~ŗ»MĄĄAĄqĀĆIÄ9ÄDŠNPTUw  !;<@BHMNPQRTX\x}~‚‚‚‚‚‚‚‚‚+‚,‚0‚3‚4‚;‚G‚M‚N‚N‚g‚k‚{‚}ƒ ƒƒƒ ƒ3ƒ7ƒ>ƒ>ƒCƒIƒJƒJƒ[ƒ[ƒ]ƒ^ƒ^ƒfƒhƒjƒmƒxƒxƒ}„„ „ „ „„„„„„&„/„1„8„R„S„v„{„|………… …*…,…/…0…Q…a…i…i…j…k…l…t††† † ††(†)†+†1†1†5†L†P†V†X†[†d†f†g†h†j†j†l†m†m†n†o†p†q†v†y†}‡‡ ‡‡‡‡‡1‡1‡2‡3‡3‡E‡I‡L‡R‡W‡[‡[‡`‡n‡s‡t‡v‡v‡v‡x‡x‡z‡|ˆˆˆˆˆˆ ˆˆ&ˆ(ˆ(ˆ*ˆ*ˆ0ˆ3ˆ5ˆ5ˆ=ˆ=ˆ>ˆDˆFˆIˆJˆPˆPˆPˆ[ˆ\ˆ_ˆ`ˆbˆeˆeˆpˆxˆzˆ}‰‰‰ ‰ ‰$‰$‰>‰N‰T‰`‰l‰pŠŠŠŠ Š(Š)Š+Š/Š=ŠOŠjŠnŠpŠqŠ‹‹‹‹ ‹‹‹‹‹‹#‹'‹,‹.‹/‹/‹0‹0‹1‹2‹3‹s‹u‹xŒ Œ Œ ŒŒ!Œ"Œ1Œ:Œ;ŒEŒNŒYŒeŒlŒqŒrŒrŒrŒrŒsŒ{  )468LTYkppŽŽŽ Ž Ž ŽŽŽŽŽŽŽŽŽŽŽ!Ž=ŽRŽXŽYŽoŽpŽz   '.:EMOPRw$&./ILRXa‘‘‘‘‘#‘'‘,‘A‘A‘H‘H‘M‘N‘]‘j‘l‘n‘n‘’’’’’’’ ’’’’’’’!’$’$’%’P’X’l’l“““““#“#“:“S“\“\””%”4”4”O”T”Y”Y”]”p”s”y••=•D•R•S•W•^•a•c•c•o•o•x•{•~–– – – ––"–(–5–9–9–D–M–N–O–Q–Z–\–`–r–{–|———"—4—6—F—L—R—R—`˜ ˜˜˜ ˜)˜*˜7˜>˜F˜`˜u˜{˜{™ ™™™™™7™9™=™?™[™]™xšššššš)š+š+š0š1š1šAšEšGšQš[š\š^š_šbšdše›››$›(›5›7›:›?›F›J›V›[›\›]›^›`›a›c›e›h›q›x›yœœœœœ&œ*œ7œ7œ:œ;œKœLœNœNœOœOœPœYœ_œaœbœgœgœhœ|  ###$)189GGGIILPVXXY^___bdeisstyz||~~žžžžž!ž+ž+ž,ž0ž3ž=ž?žEžFžNžOžOžQžRžUžXž[žažcžfžhŸŸŸŸ!Ÿ"Ÿ#Ÿ.Ÿ2Ÿ7Ÿ:ŸGŸHŸIŸIŸLŸMŸMŸPŸRŸYŸkŸlŸlŸmŸpŸpŸsŸtŸwŸxŸxŸz             & ) 1 1 > D D O e k k z””””"”/”3”6”:”;”;”;”=”@”B”E”F”F”K”N”P”^”`”a”b”c”e”e”n”p”p”t”y”~¢#¢$¢%¢/¢3¢5¢8¢8¢:¢;¢<¢?¢@¢A¢D¢F¢H¢W¢X¢Z¢h¢n¢n¢o¢r¢x£ £ ££££)£*£+£0£8£9£9£:£:£<£>£>£G£T£U£Z£Z£[£a£a£b£d£f£l£l£m£m£n£o£q¤¤ ¤¤¤¤¤¤#¤$¤'¤(¤/¤5¤:¤;¤?¤C¤G¤I¤I¤N¤P¤P¤Q¤\¤]¤d¤f¤j¤l¤m¤q„„„„ „„„„„&„(„)„)„,„-„1„5„6„<„@„D„H„L„O„[„^„b„e„e„p„q„y¦¦(¦*¦D¦]¦m¦n¦o¦t¦t§§§§§§#§%§*§?§sØ.Ø6Ø6Ø8ØZØsØy©-©4©A©E©E©E©F©M©P©T©X©f©p©s©y©y©|Ŗ Ŗ Ŗ Ŗ)Ŗ5Ŗ6Ŗ7Ŗ7Ŗ;«« «««!«+«C«D«N«P«Q«T«U«Y«Y«Z«g«h«u«v«v¬¬ ¬ ¬¬;¬<¬>¬?¬?¬C¬O¬P¬Q¬Q¬S¬T¬U¬i­­­­­­­#­%­+­1­2­7­8­=­=­@­C­D­D­F­F­I­N­P­[­]­]­e­g­i­k­m­o­q­t­v­|­|­®®®®® ®®®®!®'®'®'®)®+®?®D®E®S®Y®[®]®^®_®c®i®j®r®sÆÆ/Æ3ÆDÆEÆbÆeÆh°(°7°:°U°W°X°^°^°r°y±±± ±!±$±&±*±+±4±6±7±:±=±?±D±L±M±M±Q±X±d±l±o±p±p±p±t±t±|±}±~±²²²² ² ²²²²%²&²8²N²O²W²Z²b²g²j²m²t²t²w²w²|³ ³*³1³6³7³A³E³N³c³z³|“ “““*“0“<“=“F“H“R“f“q“tµµµ'µ*µ.µPµaµdµeµmµmµnµpµsµsµuµuµxµ~¶¶¶¶¶%¶(¶-¶-¶1¶6¶P¶S¶X¶e¶z¶{·7·H·P·Q·e·p·r·{·øøø'ø2ø3ø7øMø[øeøføløz¹ ¹¹¹¹¹¹!¹6¹8¹C¹E¹G¹O¹Q¹Q¹d¹f¹lŗŗŗ(ŗ0ŗ1ŗ5ŗ8ŗIŗdŗn»<»?»@»F»F»L»L»U»[»^»a»w¼¼¼¼¼¼)¼+¼6¼9¼9¼:¼:¼;¼;¼?¼F¼P¼e¼|½½½ ½ ½ ½½½½½½½½½½ ½+½6½8½O½S½b½g½m¾¾¾¾¾/¾5¾S¾X¾a¾b¾d¾æææææ"æ%æ'æ9æGæIæQæRæ[ækækæpæqæræsæuævæwæwæxæxæyæyæ}ĄĄĄĄĄĄĄĄ!Ą&Ą'Ą(Ą.Ą<Ą<Ą@ĄDĄEĄFĄGĄNĄOĄTĄ\Ą^ĄdĄdĄeĄfĄuĄuĄ|ĮĮĮĮ ĮĮĮĮ+Į>Į@ĮCĮEĮKĮQĮQĮYĮZĮaĮaĮeĮfĮgĮhĮjĮnĮnĮrĮwĮwĀĀ Ā ĀĀĀĀ$Ā'Ā'Ā(Ā(Ā)Ā+Ā+Ā,Ā-Ā-Ā0Ā0Ā0Ā1Ā1Ā2Ā3Ā5ĀUĀVĀoĆĆ3ĆIĆIĆJĆNÄ=Ä>ÄDÄfōY„ØfĀoĆĆCĆIĆcĆpĆpĆpÄÄBÄE/B‚;…b†pˆ&L”U–`–m–n˜7™;žb 2§§jØ©Æ4±±6±Tµ9øE¹$¹E½½.½v¾hĄYĀtĀwĀyĀyĆĆĆIĆiĆyÄ'Ä'ÄBÄDÄF‹k!"%%/4688HSVaccdeeptxxx{}}‚ ‚‚‚!‚$‚-‚0‚:‚=‚>‚^‚n‚o‚p‚r‚uƒƒƒƒƒƒ"ƒ%ƒ*ƒ5ƒ:ƒAƒGƒGƒSƒYƒcƒmƒmƒoƒ}„„„„„ „ „ „ „ „„„;„?„A„H„T„W„`„c„i„i„l„l„o„o„q„q„z… ………………………… …#…'…'…*…*…1…?…n…n…o…o…p…s…t†††!†!†"†"†(†(†)†.†/†6†B†B†B†C†C†C†T†T†U†U†[†_†d†d†f†f†g†g†h†i†n†n†o†t†u†w†w†z†z†{†|†}‡‡‡‡‡‡‡‡‡‡‡‡ ‡&‡,‡,‡L‡T‡U‡s‡w‡xˆ ˆˆˆˆˆˆˆ!ˆ"ˆ#ˆ#ˆ&ˆ)ˆ7ˆ7ˆ9ˆ<ˆ<ˆLˆMˆSˆSˆTˆTˆUˆVˆVˆ[ˆ[ˆ^ˆ^ˆbˆbˆeˆeˆhˆhˆhˆiˆm‰‰ ‰‰‰‰‰‰ ‰1‰2‰6‰>‰>‰D‰L‰P‰S‰{‰|‰ŠŠŠŠŠŠŠv‹YŒ ŒŒŒ%Œ&Œ'Œ'Œ(Œ=ŒQŒYŒ\Œ\ $&&&'+,-.6:BDGGHILMhppqvŽŽŽŽŽŽŽŽ&Ž'Ž>Ž@ŽGŽGŽVŽ[Ž\ŽdŽiŽmŽoŽoŽpŽpŽrŽzŽ|    "2JJKRfprssuvwwy)5??COWXX\_ffoqrrs‘‘‘‘‘‘ ‘'‘/‘A’/’4’4’;’f’l’m’m’n’q’r’r’t““““ ““““““““ “"“"“#“8“9“:“>“@“B“G“G“P“Y“e“i”8”;”=”@”A”C”E”E”F”H”K”N”N”O”O”O”P”Q”Q”R”b”d”h”l”n”n”n”o”o”p”q”q”s•••••• • •!•!•%•%•)•+•,•-•/•Z•\•w•y––8–H–M–N–X–e–e–e–g–g–q–q–u–x—————— — —————!—+—-—3—4—?—K—L—M—M—Q—T—U—V—d—h˜˜#˜#˜%˜%˜&˜(˜(˜+˜+˜+˜.˜0˜1˜1˜8˜9˜a˜m˜m˜n˜v˜v˜z˜|™™L™M™W™[™\™f™h™iššššššššššššššš$š%š'š.š0š2š4š<š=š=š>š>š?š?š?šAšAšBšCšCšDšDšDšFšFšGšGšHšHšIšIšJšNšOšQšQšZš\š]š`š`šbšcšcšnšn #()0559<>BGJJKPTUdghjp~žžžž ž žž"ž$ž)ž>žQž^ž^ž`žxž}ž~žžŸŸŸŸŸŸŸ!Ÿ"Ÿ'Ÿ(Ÿ-Ÿ/Ÿ/Ÿ1Ÿ1Ÿ4Ÿ7Ÿ8Ÿ;Ÿ;Ÿ;Ÿ<Ÿ?        " " # $ $ % - 5 7 8 9 ; ? B J J L M N N O O T T Y Z Z _ e n q v v x { | | | } }”””””””””””””!”#”/”3”3”4”6”:”:”:”;”@”J”K”M”P”Q”R”S”^”e”k”n”o”o”p”t”t”u”u”w”x”y”y”|”}¢¢¢¢¢¢¢ ¢ ¢¢¢¢¢¢¢¢¢¢ ¢ ¢!¢"¢"¢"¢#¢$¢)¢*¢,¢-¢1¢1¢9¢:¢@¢H¢H¢I¢J¢J¢W¢X¢]¢_¢`¢b¢f¢f¢h¢h¢i¢i¢k¢k¢l¢t¢t¢u¢w¢w¢x¢{££££ £ £ ££££9£:£>£>£G£H£J¤¤¤¤¤¤&¤&¤'¤g¤q¤t¤w„_„b„h«««««««««#«%«,«,«,«3«<«?«D«H«M«N«U«U«Y«Z«[«a«b«b«c«e«f«k«p«r«r«r«s«t«v«w«x«z«{«|¬¬¬ ¬ ¬ ¬¬¬¬¬!¬"¬#¬#¬$¬$¬%¬(¬*¬*¬*¬.¬2¬3¬3¬4¬7¬7¬8¬8¬8¬9¬:¬;¬<¬=¬?¬C¬D¬E¬E¬N¬P¬Q¬Q¬R¬R¬S¬S¬T¬T¬U¬`¬`¬a¬c¬g¬i¬j¬j¬l¬x¬z¬z¬{¬{¬|­­­­­­­­­­­­+­,­.­1­V­W­X­Z­_­e­e­k­m­o­q­}­~­~­~®®®®ÆÆÆÆ°p°p°r±±±± ±±±±±±±±±±±±±±±± ±!±!±&±(±+±+±,±,±.±/±0±0±1±4±9±:±;±?±@±A±B±B±C±E±E±F±F±G±G±J±J±K±N±P±P±S±S±T±V±W±W±X±_±`±d±f±j±{±{±|±}±}±~±~±²²²²²²²²² ²!²"²2²4²6²7²8²;²<²F²K²O²Z²[²]²_²b²b²j³³³5³7³E³J³J³i³o³o³y³|³|“ “ “'“-“7“;“<“B“D“H“I“I“J“K“V“X“X“Y“Y“g“m“n“o“p“p“t“wµµµµµµµµ)µ=µ=µ>µ>µDµHµHµJµKµLµOµPµPµTµW¶ ¶ ¶ ¶ ···H·S·S·S·b·døøøøøøøøøøøøøøøø!ø)ø;ø=ø?øEøEøPøQøQøRøRø^øj¹¹¹¹&¹.¹4¹6¹=¹A¹E¹G¹O¹S¹v¹zŗŗŗŗŗŗŗŗŗŗŗ$ŗ%ŗ&ŗ*ŗ-ŗ;ŗDŗPŗSŗTŗ`ŗlŗpŗwŗzŗ~»»!»"»"»t¼¼J¼J¼L¼O¼R¼W¼W¼W¼X¼X¼h¼i¼l¼l¼l¼o¼u½½½½½ ½½½½ ½!½!½&½8½<½@½L½O½o½v½y½{¾¾C¾E¾K¾\¾\¾]¾a¾b¾d¾e¾n¾p¾p¾s¾s¾y¾z¾}¾}æææææ!æ/æ:æBæBæLæLæOæPæQæRæWæ`ædæqæsæsæsæuævæxæ|æ}ĄĄĄĄĄ*Ą0Ą1Ą3Ą3Ą4Ą5Ą5Ą6Ą6Ą7Ą7Ą7Ą8Ą9Ą@ĄAĄCĄHĄHĄIĄKĄLĄLĄMĄNĄNĄOĄOĄSĄTĄUĄUĄVĄVĄYĄ[Ą]Ą^Ą^ĄcĄdĄdĄeĄfĄhĄmĄnĄnĄoĄoĄqĄsĄtĄtĄwĄxĄyĄĮĮĮ Į Į Į ĮĮĮĮĮĮĮĮĮĮ!ĮVĀoĀtĀuĀuĀwĀyĆĆĆĆĆĆĆĆĆĆĆĆ Ć!Ć)Ć*Ć-Ć1Ć3Ć5Ć6Ć7Ć?ĆIĆQĆSĆiĆkĆoĆwĆyĆ}Ć}ĆÄÄ Ä Ä ÄÄÄÄÄÄ3Ä4Ä4Ä6Ä8Ä9Ä<Ä=Ä>Ä?Ä?Ä@ÄAÄCÄDÄDÄFÄJÄVÄ\Ä_ƒĆIĆI$‚L„U„X‹ B™uœ?œ]f{Ÿk”£„[„u¦¦N¦yØU©*Ŗ ¬I­$®lÆ4°°&°D±Tµ%µoµq¼1ĆI…CS`p"[‚‚‚#‚*‚B‚E‚E‚K‚Vƒ ƒƒƒƒ"ƒ#ƒ6ƒIƒm„„„„„ „/„7„^„i„t„v„z……8…;…H…Z…f…i…j…n…p…q…w…{† ††(†)†+†e†f†v†x‡‡‡\‡dˆˆ5ˆ;ˆ@ˆEˆHˆPˆTˆoˆx‰ ‰‰%‰)‰/‰9‰hŠ Š%Š.Š<ŠRŠ{‹‹‹"‹I‹I‹J‹SŒŒ&Œ0Œ1Œ3Œ3Œ8ŒAŒqŒsŒsŒ~6BGGLUWZbvwzŽŽŽ%Ž&Ž0Ž@ŽBŽqŽtŽuŽy#%+ADFGKNk|~ "DW\df|‘‘Q‘^‘e‘l‘{’’ ’’-’W’Z’j’z’}““ “ ““ “3“9“<“R“[“b“k“m“}” ””””6”~••+•?•G•S•p•s•–––T–V–l–y–}—————9—C—L—T—j—k—l˜˜ ˜4˜8˜M˜N˜U˜W˜Z˜b™ ™™1™D™d™m™y™zšššš(š.š8šJšTšgšwš}š~š›››››C›G›O›W›e›tœœ œ+œ,œEœJœ\œ]œz#:NSZhknpžž%ž@žQžuŸŸ Ÿ(ŸCŸTŸlŸwŸ}   7 D c”” ”"”@”W¢¢¢!¢+¢+¢<¢I¢T¢}£ £4£>£F£R¤¤ ¤"¤@¤C¤y„„„'„)„-„<¦¦¦¦¦¦¦)¦-¦4¦7¦=¦Y¦\¦i¦|¦§ §!§-§.§4§=§G§[§h§o§u§u§x§y§}§ØØ Ø Ø ØØØØ(Ø*Ø=Ø?ØAØCØGØGØHØIØKØLØZØcØeØjØlØmØoØqØrØsØtØwØyØ©©©©© ©©©©©© ©!©+©5©6©:©M©N©Y©Z©^©^©g©i©{ŖŖŖŖŖŖ Ŗ#Ŗ$Ŗ*Ŗ4Ŗ@ŖDŖEŖFŖGŖHŖMŖVŖ[Ŗ]Ŗ]ŖaŖfŖjŖpŖrŖr« «&«.«9«p«z«~¬¬¬¬ ¬¬¬"¬,¬-¬9¬<¬K¬\¬s­­­­"­(­6­G­I­K­O­y­}®®)®1®>®G®Z®[®sÆ&Æ(Æ)Æ6Æ8Æ;ÆEÆIÆPÆUÆfÆgÆj°°°°°°°I°R°U°t°w± ±*±5±=±?±D±Q±T±^²²²&²'²*²0²;²@²G²p²y³³+³5³9³@³A³C³R³U³W³l³o³y“&“R“\“c“e“j“nµ/µ0µ:µhµlµwµwµ|¶¶¶¶¶)¶:¶B¶N¶P¶R¶`¶····· · ··M·[·]·l·n·t·xøøøøø%ø,øLøMøhøpøy¹ ¹ ¹ ¹¹¹2ŗŗŗ#ŗ%ŗ%ŗ*ŗ:ŗ>ŗSŗ`ŗw» »»»3»Q»R»V»a»f»i»}¼¼¼¼6¼A¼L¼N¼f¼y½½%½&½B½X½c¾¾¾E¾{ææ0æDæcæjĄĄ1Ą=ĄDĄ\ĄcĄ{Į ĮĮĮAĮKĮSĮUĮlĀ Ā*Ā5ĀTĀvĀzĆĆĆ ĆĆĆĆ Ć/Ć0Ć1Ć2Ć3Ć6ĆAĆDĆHĆKĆOĆRĆRĆSĆYĆZĆ\ĆaĆeĆwÄÄÄ@ÄAÄJÄYÄYÄdÄjÅÅÅÅ&Å7Å8Å>‘g0JKNPR`giilowy|~"##$%&(.29<=?AWY]ehijo‚‚‚‚‚‚‚‚‚‚#‚&‚(‚2‚3‚7‚:‚;‚D‚E‚E‚F‚S‚U‚V‚V‚a‚e‚h‚k‚s‚w‚zƒƒƒ ƒƒƒƒƒ#ƒ0ƒ2ƒ8ƒEƒFƒJƒKƒMƒQƒQƒVƒ^ƒjƒuƒuƒuƒv„„„„„„ „ „ „„„„„„„!„"„&„(„3„6„7„8„L„O„Q„U„W„e„h„l„p„q„v„{„… … … ……………#…%…*…+….…0…0…6…7…<…>…O…P…S…W…Z…Z…\…]…`…e…f…i…k…m…n…p…w…{…}††††††††††-†3†5†:†:†;†=†>†A†E†G†J†K†O†S†T†U†_†d†e†e†i†v†v†z†{†{†|†‡ ‡‡‡‡‡‡‡!‡"‡&‡(‡(‡)‡4‡9‡<‡=‡>‡@‡D‡E‡F‡I‡J‡M‡T‡[‡[‡^‡e‡h‡h‡i‡j‡l‡o‡pˆˆˆˆˆˆ ˆ!ˆ'ˆ)ˆ+ˆ=ˆ=ˆ>ˆ@ˆAˆDˆHˆIˆSˆSˆTˆUˆVˆ`ˆcˆhˆhˆoˆpˆqˆqˆsˆtˆ~‰‰‰‰%‰&‰(‰4‰8‰=‰=‰>‰?‰H‰S‰W‰c‰g‰i‰l‰t‰u‰z‰|ŠŠŠŠ Š ŠŠ%Š+Š/ŠBŠJŠKŠtŠx‹‹‹ ‹ ‹ ‹‹‹‹‹‹‹‹ ‹!‹$‹(‹)‹+‹,‹-‹6‹8‹9‹;‹;‹@‹C‹D‹H‹I‹J‹L‹U‹g‹p‹r‹|ŒŒ+Œ,Œ;ŒEŒkŒqŒqŒrŒsŒtŒtŒvŒwŒ}Œ~   %+/47?DHLVWYZ[\hmvwyz}ŽŽ ŽŽŽŽ!Ž"Ž-Ž[Ž^Ž_Ž_ŽcŽmŽtŽyŽ~Ž ''()++0:@ACEMOSUX[[\\]^_cekmwz~    ,79FST[bhsvx‘‘‘‘‘ ‘‘‘ ‘%‘4‘6‘A‘D‘F‘J‘K‘O‘P‘Q‘T‘V‘W‘X‘\‘_‘d‘e‘e‘f‘k‘m‘q‘s‘s‘t‘u‘x‘{’’’’’ ’ ’ ’’’’’’’ ’$’/’2’5’7’:’>’?’D’F’H’P’X’\’\’_’d’j’k’s’t’z’}’~’~’~““ “ ““““/“8“;“>“D“N“a“c“m“q“y””” ” ””””””””””””””””” ”"”%”(”*”+”,”,”6”8”=”R”S”T”Y”]”n”r”t”t”z”~••• • • •!•$•+•3•9•=•A•D•F•F•L•M•Q•V•V•_•_•`•k•v•y•{–––– –––*–-–5–5–=–A–B–M–N–T–W–Z–\–^–`–b–n–s–s–y–{–}–}————— —————— —%—&—(—3—6—7—=—G—K—P—U—V—Y—f˜˜˜ ˜&˜&˜*˜<˜=˜>˜A˜D˜L˜O˜Q˜S˜S˜T˜V˜X˜X˜Y˜[˜`˜b˜d˜d˜f˜f˜h˜m˜n˜o˜r˜r˜|™™™™™ ™ ™ ™™ ™)™3™A™B™B™D™G™H™S™^™a™d™e™j™n™p™r™r™r™t™u™~ššššš!š!š"š,š4š7š8š9š9š<š?š@š@šAšIšMšNšTšUšXšXšašdšgšhškšpšqšršvšwšxšzšzš}››››››› › ››››››››$›*›+›2›7›7›9›=›@›A›B›C›D›D›G›M›M›X›\›e›h›i›k›s›u›w›y›y›}œœœœœœœœœœœœœ!œ(œ+œ0œ=œ>œAœBœFœHœJœQœRœTœWœXœ\œ_œaœaœdœdœjœkœmœmœsœsœuœxœyœz !-6@AEKfhhippqt{žžž žžžž ž*ž7ž<žCžCžEžLžSžTžTžUžZž\žhžvž~žŸŸŸŸŸŸŸŸŸ!Ÿ*Ÿ*Ÿ0Ÿ1Ÿ1Ÿ8ŸBŸCŸGŸNŸSŸUŸ\Ÿ\Ÿ]ŸbŸcŸcŸmŸsŸuŸ|Ÿ~          " $ ( - / 4 5 7 : H M R ^ i o { }””””” ””””%”&”,”.”1”3”4”F”I”J”R”W”_”c”o”z”|”~”¢¢¢¢¢¢¢¢&¢(¢)¢)¢*¢+¢.¢/¢0¢2¢6¢<¢>¢A¢D¢D¢F¢N¢P¢S¢f¢x¢x¢~£ £££££&£(£(£)£/£/£9£E£H£L£M£P£W£Y£Z£Z£]£_£b£c£d£d£e£k£l£n£o£r£s£t£|£~¤¤¤¤¤#¤+¤+¤-¤-¤3¤7¤:¤>¤>¤A¤D¤I¤N¤P¤R¤T¤U¤V¤W¤Y¤[¤_¤r¤x¤}„„„„ „ „ „„„„„!„%„%„&„(„,„,„3„4„6„<„?„@„E„E„F„H„M„O„R„T„W„Y„h„r„s„v„w„}„}„~¦¦¦¦¦ ¦ ¦¦¦¦¦¦¦¦¦¦¦#¦#¦'¦1¦3¦6¦8¦9¦9¦=¦=¦C¦D¦F¦H¦J¦K¦O¦V¦V¦Y¦Z¦[¦^¦^¦d¦e¦f¦i¦m¦r¦z¦|¦}§§§§§§§§§ §§§§§§§§§§!§&§*§,§-§1§3§5§6§6§=§>§@§A§B§H§L§L§M§O§Q§Q§R§S§S§T§U§V§V§W§Z§[§[§_§a§a§b§c§d§h§h§j§k§k§l§m§n§s§u§w§z§|§}§~ØØØØØØ Ø Ø Ø ØØØØØØØØØØØØØØØ-Ø1Ø4Ø4Ø9Ø>Ø?ØCØDØHØIØJØLØNØQØSØVØWØXØXØ_ØbØeØfØjØlØmØmØnØnØqØrØrØsØsØyØyØzØ}Ø~Ø©©©©©©©© © © ©©©©©©©©©©©©©© © ©!©!©"©"©"©#©'©-©.©/©2©4©6©9©=©B©E©J©K©L©M©T©T©V©W©Z©[©[©\©a©b©c©h©h©m©o©q©r©v©z©{ŖŖŖŖŖŖŖ ŖŖŖŖŖŖŖŖŖŖŖŖŖ!Ŗ#Ŗ$Ŗ%Ŗ)Ŗ*Ŗ+Ŗ/Ŗ3Ŗ3Ŗ7Ŗ8Ŗ:Ŗ:ŖBŖBŖCŖDŖEŖHŖIŖJŖKŖLŖMŖNŖNŖOŖQŖQŖSŖTŖTŖUŖYŖ[Ŗ]Ŗ_Ŗ`ŖaŖaŖaŖcŖeŖgŖiŖjŖjŖkŖnŖoŖpŖpŖpŖqŖqŖrŖsŖuŖxŖyŖzŖ{«««« « «««« «&«)«+«.«1«2«3«6«8«9«B«G«H«H«I«L«L«M«T«W«Y«b«c«c«d«l«q«r«r«s«s«{«}«~¬¬¬¬¬ ¬¬¬¬¬¬¬¬¬#¬$¬$¬*¬/¬1¬2¬6¬8¬<¬D¬H¬K¬[¬_¬d¬o¬r¬r¬s¬|¬}­­­­­­­­$­%­(­,­.­1­2­6­9­<­>­@­D­F­H­P­S­V­X­c­y­|­}­®®®®®® ®®® ®$®)®+®,®-®.®0®5®8®:®;®?®?®@®D®E®F®G®H®J®K®L®M®O®O®P®P®S®[®\®]®b®c®f®i®l®o®r®w®w®y®z®|®~ÆÆÆÆÆÆÆÆ'Æ+Æ1Æ3Æ7Æ9Æ;Æ<ÆBÆHÆIÆJÆKÆNÆPÆUÆVÆYÆ\Æ]Æ]Æ_Æ`ÆgÆkÆl°°°°° °°°°°°°°°°°° °,°/°1°4°5°6°7°8°9°;°<°?°B°E°G°H°N°N°U°W°X°Y°Z°\°]°^°a°f°l°m°n°s°s°v°y°y°|±±±±±A±A±L±M±^±o±p±q±s±s±t±x±y²² ² ²²!²!²$²%²&²'²)²,²/²1²7²=²?²A²A²E²L²M²N²W²c²f²g²p²r²y²z²{²|²³³³³³³ ³³³³ ³&³'³-³/³1³3³6³8³;³@³B³D³G³I³K³M³O³U³X³`³c³d³i³j³k³l³r³}“““““ “*“2“L“W“`“g“n“n“sµµµ µ µ µ µµµ*µ2µ<µ@µKµSµTµ]µaµcµdµfµfµgµjµlµlµnµnµpµsµuµvµwµxµyµ~¶¶¶¶ ¶ ¶¶¶¶¶¶¶¶¶%¶&¶&¶'¶+¶0¶6¶7¶9¶:¶;¶=¶>¶A¶C¶E¶G¶H¶J¶M¶Q¶R¶S¶V¶W¶[¶a¶h¶h¶i¶j¶l¶p¶s¶u¶v¶y¶z¶|¶····· ··· ·7·>·?·@·A·B·L·L·L·Z·g·l·o·q·s·y·{·|øøø ø ø øø#ø-ø0ø2ø:ø:øEøFøKøLøSøUøpø{ø|ø~¹¹¹ ¹>¹K¹Xŗŗŗ#ŗ.ŗ2ŗ:ŗ=ŗDŗIŗMŗNŗQ»»»»»(»)»2»3»7»9»=»L»M»N»O»R»W»]»`»a»c»d»f»g»j»p»r»{»|»}¼¼¼¼¼ ¼&¼,¼5¼<¼Y¼]¼a¼l¼o¼z½½½½!½%½_½`½f½h½i½m½v¾¾¾¾ ¾¾¾¾#¾%¾%¾*¾-¾2¾W¾^¾c¾h¾j¾p¾t¾v¾x¾}¾}ææ ææææææ"æ-æ6æ7æ8æ9æ<æ?æAæBæaædæhæhæjælæmæoæqæwæ{Ą ĄĄĄĄĄĄ Ą&Ą'Ą/Ą3Ą5Ą5Ą5Ą8ĄBĄEĄHĄNĄXĄXĄYĄZĄ\ĄaĄeĄkĄmĄqĄsĄuĄxĄyĄ|ĮĮĮĮĮĮĮ%Į+Į3Į4Į4Į5Į6Į7Į;Į;ĮAĮBĮCĮDĮGĮHĮPĮSĮVĮWĮXĮXĮ[Į^ĮbĮlĮzĮ|Į~Į~ĀĀĀĀĀĀ ĀĀĀ(Ā/Ā1Ā2Ā3Ā4Ā5Ā7Ā8Ā9Ā:Ā=Ā>ĀDĀIĀKĀLĀNĀSĀUĀeĀoĀoĀpĀrĀsĀtĀxĀyĀyĆ ĆĆĆĆĆ"Ć)ĆHĆPĆTĆYĆZĆiÄÄÄÄÄÄ#Ä$Ä'Ä1Ä3Ä7ÄVÄYÄZÄ[Ä_ÄfÄgÄjÄlÄoÄoÄqÄqÄqÄrÄzÄÅÅÅÅ ÅÅÅÅÅÅÅÅ#Å-Å.Å7ÅG‘Y¢hĆHĆod=FGI 2^}‚5ƒ#ƒTƒ~„$„4„C……B…{†d†j†w‡Zˆ‰?‰F‰`‹‹tŒŒR HŽŽŽOŽQac1‘‘J‘n’’’’““6“K“R“Z” ””"”(”F•$•K•[•`•e––2–f–p—˜˜˜'˜6™™6™=ššš7š>š_šp›4›8›9›`œSœ\œ|Xžžž;žKž]žjŸ Ÿ/Ÿ<ŸGŸHŸKŸUŸ O O b k y {”B¢¢(¢w££J£J¤¤!¤M¤N¤P¤S¤[¤d¤}¤~„ „U„q§§§=§F§I§NØ+ØY©a« ««h«|«}­­]® ®9®c®pÆÆ°+°@°F°\±±±P±U±c±{²²²² ²=²Q³"³;³P³TµBµFµO¶/·%·Pøøø"øU¹"¹7ŗV»%¼=¼E¼H¼K¼N¼P½½~¾ ¾¾C¾G¾P¾T¾uæ&æIĄ1ĄNĮĮĮĮ2ĮEĮĀĀĀĀ)Ā0Ā<ĀLĀmĆ;ĆHĆIĆoÄ4ÄJÅ$„ANOPy|  *,2==>VV\^_‚ ‚‚!‚'‚/‚H‚H‚h‚k‚s„„1„5„6„N„^„t……………$…&…&…/…3…y†††(†Y†p‡‡!‡)‡,‡9‡?‡D‡D‡F‡M‡c‡e‡f‡sˆˆ;ˆAˆFˆLˆoˆw‰ ‰8‰S‰]‰b‰d‰i‰mŠ Š#Š(Š-Š=ŠJŠJŠXŠ^Š_Šx‹‹‹ ‹&‹8‹>‹tŒ=ŒMŒSŒ]Œy '7LLhvŽŽ ŽŽŽ'Ž9ŽXŽs  ;=??Nd,-;<‘‘‘‘X‘X‘X‘m’ ’T’T’z’|“+“3“I“J“h“m“z”” ”””#”2”3”>”X”\”f”• ••••&•<•J•V•`•e– ––2–K— — — ——2—Q—f˜6˜F˜M˜O˜R˜u™™™™C™~šš2š7šXšgšm››››N›^›m›xœœœDœEœRœTœWœ]œ]œe$$-OV^ižDžRžRŸŸŸ4Ÿ>ŸKŸXŸ]ŸjŸkŸl    ! ! " - G T c w” ””” ”%”9”;”K”M”N”P”U”^”g”i¢¢ ¢ ¢¢¢5¢;¢]£££&£0£A£s£z£}£¤¤¤¤¤'¤?¤o¤w¤w¤y„„„„„E„J„X„t¦¦¦¦¦%¦0¦`§ §§§/§5§Z§^§c§j§s§ØØ@ØVØ^ØkØk©)©4©6©:©;©D©H©S©^©i©n©©ŖŖŖŖ#Ŗ&Ŗ,ŖAŖJŖYŖZŖbŖeŖiŖw«««"«)«1«4«<«D«e«e«l«x«z¬.¬@¬B¬P¬Z¬s­­5­7­G­R­|® ®®® ®$®,®J®T®p®qÆÆÆÆÆ&Æ-Æ8ÆNÆNÆ`ÆdÆk°°.°:°<°=°C°D°M°N°^°a°i±±±±±L±U±^±s²²²/²=²F²K²Q²S²Z²\³³³!³"³&³7³]³g³j³j³n“““““&“1µµ µµµ@µBµIµKµWµfµkµrµ~¶6¶8¶9¶L¶N¶`¶k¶x·· ····$·m·y·{ø øø-ø6ø>øMøxø|ø~¹¹ ŗŗŗ&ŗ1ŗ:»»»)»H»O»Q»X»n¼¼¼¼5¼G¼\¼}½½%½(½)½0½\½_½a½b¾¾¾¾¾¾"¾6¾<¾M¾kææææææ9æGĄĄĄDĄKĄTĄrĄvĮĮĮ#Į0Į4Į]ĮsĀĀĀ)Ā4Ā:ĀDĆ ĆHĆKĆ]ĆoÄÄrÄ|ÅÅÅÅÅA  ¤lĀĆHĆHĆPÄWÅ7 FCŒ˜˜˜œO^ H¤=Øl·P¹¹Qŗl¼=¾CĮĀqĀwĆĆ ĆHĆJĆTĆYĆ~ĆÄ„e:KSTCX‚‚%‚(‚2‚5‚;‚T‚Y‚k‚l‚o‚v‚w‚wƒƒ*ƒ/ƒ0ƒ?ƒBƒHƒLƒMƒdƒfƒjƒqƒtƒyƒ„„ „#„$„h„}… ………1…K…M…d…f…i…j…w†0†L†M†w‡‡‡ ‡‡‡"‡3‡C‡D‡\‡]‡xˆˆˆ ˆ ˆDˆDˆU‰‰$‰1‰g‰o‰s‰wŠŠ-Š7Š=ŠMŠdŠnŠrŠrŠ}‹‹ ‹‹!‹)‹QŒRŒSŒ\Œw <KY[}ŽŽ!Ž!Ž\ŽbŽqŽvŽzŽ} 67:=Lz !bb‘‘‘#‘&‘3‘B‘Z’’’’’’;’E’P’X’n““ “ “"“+“2“6“J“]””””(”)”*”,”1”9”U”^”r••1•5•>•J•W•_•b•j•n•r––––––6–b–j–p–p–r–|—————A—D—D—E—R—m—q—u—v—x˜˜˜5˜6˜9˜L˜Q˜s˜v˜{™™%™/™\šš š1š\š`šq››› ››››S›T›g›g›j›oœœœœ)œ2œDœDœgœiœn (S[otžžžžž>ž@žBžCžDžNžPž_ž`žaž|ŸŸŸ$Ÿ'Ÿ.Ÿ;ŸDŸUŸVŸ`ŸaŸhŸrŸz    $ . < L R W” ”A”A”E”R”l”n”u¢¢'¢J¢O¢O£££(£6£:£?£L£U£]£a¤¤¤ ¤¤¤¤¤+¤6¤9¤=¤=¤>¤K¤]¤d¤j¤u¤w„ „'„*„A„Y„o¦¦6¦7¦A¦D¦E¦G¦N¦a§§§§'§2§4§;§<§<§?§@ØØ5Ø8Ø9ØTØ]ØaØbØlØpØ}© © ©©'©)©.©R©e©h©u©w©wŖ Ŗ,Ŗ7ŖGŖdŖdŖfŖl« ««««"«,«1«N«Y¬¬¬"¬%¬%¬5¬;¬;¬=¬=¬S¬\¬i¬i¬n­­#®®!®4®9®@®\®mÆÆ9Æ9Æ=Æ=ÆM°°°.°3°<°L°U°[°p±±±±±!±(±D±`±{±²²+²<²<²F²[²b²o²t³³%³'³6³Z³h³i³s³w““ “0“C“H“_“_“p“{µµ&µ6µ]µnµ|¶¶ ¶.¶.¶8¶M¶Y¶^·G·K·o·r·s·v·w·}øø øøøø"ø/ø3øUøføn¹ ¹¹¹¹tŗŗŗ=ŗFŗGŗMŗZŗlŗn» »]»i¼¼¼)¼+¼4¼;¼E¼H¼I¼S¼V¼\¼^¼o¼u½(½M½Z½\½_½`¾(¾6¾<¾=¾Y¾pæ æ æææ>æBæOæ|ĄĄ?Ą`ĄeĄsĮĮ$Į:Į?ĮEĮJĮLĮ[Į[ĮmĮrĮ~Ā ĀĀ!Ā<ĀuĀvĀwĆĆ0ĆHĆTĆ\ĆuĆyÄÄÄ.Ä3Ä4Ä8Ä>ÄIÄLÄmÄoÅ Å Å,Å7‡&01157:=>@CHILNNPRSUWn %'19;EHMORWY\fhrx~‚‚‚‚‚‚‚‚‚‚‚ ‚8‚8‚A‚I‚g‚k‚k‚n‚o‚p‚y‚z‚{ƒƒƒƒƒƒƒ'ƒ-ƒ/ƒ0ƒ3ƒ4ƒ6ƒ7ƒ8ƒ9ƒ>ƒ>ƒ@ƒCƒDƒEƒFƒFƒGƒIƒJƒOƒRƒTƒTƒUƒWƒ`ƒdƒjƒmƒnƒtƒvƒ}ƒ~„„„„ „„„„E„N„Q„k„z„………*…/…B…C…G…K…L…M…R…R…b…f…h…l…t††%†)†0†1†@†_†i†i†j†o†p†q†q†q†s†z‡‡‡‡ ‡ ‡‡%‡1‡3‡4‡E‡L‡R‡W‡w‡z‡|ˆˆˆˆˆˆˆ.ˆ0ˆ1ˆ3ˆ5ˆ=ˆPˆ]ˆ]ˆ]ˆeˆvˆxˆ}‰‰‰‰‰‰!‰$‰&‰>‰SŠŠŠ Š ŠŠŠŠŠŠŠŠŠ1Š1Š4ŠAŠKŠOŠTŠeŠhŠjŠnŠpŠpŠx‹‹T‹uŒŒ ŒŒŒŒŒŒ!Œ1Œ2Œ7Œ:ŒDŒEŒEŒNŒVŒXŒYŒjŒl   8LakpŽŽŽ Ž ŽŽŽŽŽŽ=ŽDŽIŽKŽOŽQŽXŽYŽ`Ža  6VXXbfgmu(7ORRSUWYachkqr‘‘ ‘‘‘#‘,‘.‘2‘3‘7‘?‘B’8’<’>’c’s’s’v““#“:“?“E“K“K“L“L“S“T“Y“Z“Z“[“e“h”E”K”N”S”V”Y”]”`”j”j”p•• ••••$•+•o•o•p•z––––"–(–*–-–0–8–:–<–@–@–A–B–O–Q–V–Y–^–_–`–j–j–p–q–u–{—— ——"—$—9—@—A—C—F—L—Q—Q—R—^—`—j—l—m—r—y˜˜ ˜ ˜ ˜˜˜˜˜˜˜)˜)˜6˜7˜9˜`˜c˜o˜s˜u˜z˜{˜{˜~™™$™-™7™H™T™W™[™^™c™c™e™išš%š&šbšhœœmœ{œ|"##3CGGIIPQbdiružžžžžžžž!ž0ž2ž=žEžKžPžXžXžZžcžižjžnžsŸ$Ÿ'Ÿ.Ÿ2Ÿ5Ÿ7Ÿ@ / 1 3 4 4 ? ? ? @ D F J O b k k s |” ”””””"”6”:”<”=”B”E”S”^”k”w¢ ¢'¢A¢B¢C¢D¢W¢h¢l¢x¢~¢~£ £8£:£:£C£E£F£c¤¤¤¤'¤(¤5„^„e¦E¦F¦n¦u§§§§!§"§/§;§=§H§r§s§u© ©©5©n©r©s©t©v©x©|©|««+«.«4«=«C«I«P«Q«T«Y«Y«a«f«p«u«v¬¬ ¬¬¬¬¬¬¬$¬+¬2¬3¬<¬>¬?¬P¬c¬x­­­­+­M­]­^­`­b­i­r­t­}­}® ®®®-ÆÆ/ÆZ°?°p°y±±±± ±±±±±± ±!±5±9±:±@±J±L±M±M±X±]±c±d±l±|±²²²²²²6²8²F²N²N²a²a²j³6³;³B³E³o³r³r³s³|³}“““““ “ ““““ “ “0“<“=“F“H“R“W“}“~“~µµµµ!µ%µ'µ.µ0µ7µPµX¶¶ ¶P··.·2·H·d·z·{øø'øUøWøe¹ ¹¹¹¹¹¹¹"¹4¹6¹7¹8¹:¹=¹?¹M¹Q¹l¹x¹|ŗŗ ŗŗŗ/ŗ2ŗ@ŗBŗTŗnŗw»»a¼ ¼ ¼¼¼(¼,¼,¼6¼8¼:¼:¼<¼<¼=¼?¼D¼E¼E¼G¼H¼I¼K¼N¼P¼Q¼e¼o¼r¼~½½½ ½ ½ ½½½½½½½+½2½F½x½x½{¾¾¾C¾P¾R¾S¾a¾t¾u¾æ æ æææ&æ&æ'æ1æ2æPæPæQæRæTæ\æ]ĄĄĄ ĄĄĄ&Ą(Ą/Ą;ĄCĄEĄFĄFĄGĄJĄJĄJĄWĄWĄ^ĄeĄeĄsĄvĄxĄ|ĮĮĮĮĮĮĮĮ Į.ĮUĀ@ĀtĀwĀzĆĆ)ĆEĆEĆHĆMĆNĆXĆÄÄFÄJÄJÄdÄkÄxÄ|Ä|ÅÅÅÅ5Å=E7#<‚‚ ‚Sƒ?ƒOƒ\„k…†.†0†Tˆˆˆ.ˆ_ˆkˆm‰L‰oŠL‹‹6‹Z Žx:L‘ ‘_‘c’\’r’|“ “3“Z”%”'•z–8–a— —!˜˜>˜m˜p˜t™™6™:™Tœ œT5gržžž!ž*ž3  J””!”#”S”V¢#¢F¢P¢X¤¤N¤l„„p¦}Ø©©AŖŖ?ŖQ««.¬¬c¬x­R­r­}Æ ÆDÆY°G°L°p±±± ±±± ±(±-±C±X±c±q²²a³>³`“*“8“E¶h··.ø7ø?øWøjŗ ŗN¼8¼G½½½o¾g¾k¾zæææĀĀ$Ā3ĀbĀdĀeĀqĀvĀwĆĆĆĆ ĆĆĆĆĆĆĆ!Ć0Ć1Ć2Ć6Ć8Ć:ĆHĆKĆ]Ć`Ć`ĆcĆdĆiÄÄÄÄ2Ä7Ä=ÄJÄPÄQÄTÄYÄ]ÅE )Y„Ā` )YĀ`r'‚‚‚.ƒ!„ „X…{†A†A†F†r‡‡‡2‡sˆr‰a‰eŠŠ%Š8ŠK‹‹ ‹ ‹‹&‹D‹F‹KŒ Œ;YZq>B‘%‘G‘I‘K‘K’ ’’_“7“8””””-”u• •w––c–z—d—h˜@˜Q˜S™2™:šxœœP+6@U]ežž.ž4žaŸ?ŸVŸ   ¢¢Q£££¤¤#¤(¤<¤E¤[¤[¤x„„„„T„U„¦@¦E¦`¦c§§(§)§:§rØ ØØ Ø&Ø-Ø-ØUØ]Ø`©©©(©J©U©}ŖŖ ŖŖKŖMŖ\Ŗ_ŖcŖhŖoŖyŖzŖzŖ{Ŗ{««?¬ ¬&¬5®®"®#®K®\®rÆ.Æh°°M°S°Y°Y°m°|²c³³*³J³Qµ µ6µ<¶¶¶!¶+¶+¶A¶C¶S···ø ø¹X¹Xŗŗ.ŗ5ŗ8»»D»d»z»~»~¼4½a¾M¾R¾S¾S¾TæææRætĄĄĄĄ!ĄTĄWĮĀ%Ā`ĀhĀhĆĆĆĆĆĆĆ.Ć1Ć[Ä Ä Ä+Ä>ÄRÄeÄzÄŁM %BEy‚(‚/‚c‚hƒ%ƒ2ƒ8ƒ?ƒGƒKƒOƒRƒkƒn„„-„3„E„K„N„^„o… …………%…)…;…B…n…s†††3†E†X†[†i†s‡‡,‡7‡D‡M‡Xˆˆˆ0ˆ@ˆcˆhˆr‰‰4‰SŠŠŠ Šx‹‹2Œ'Œ|ASkŽŽ ŽŽŽ&ŽB~‘?‘F‘^’ ’%•––V–a–f—/—K˜ ˜C˜P˜`˜y™™ ™q™xšgœœt@mž ŸŸB + \ k”I”U”e”r¢¢M£¤ ¤¤¤¤$¤i¤w„-„.„o¦¦;¦]§©j©Ŗ5Ŗ{«%¬ ¬H¬p¬­&­7­G­U®® ư(°7°?°C°L°r±±n²0³³"“““Zµ ¶¶¶Q·køøø,ø0ø=øqøx¹ ŗŗŗŗŗ*ŗ:ŗ;ŗI»»¼¼y½ ½½½X¾¾¾1¾GĄ ĄĮ.ĀBĀ`Ābƒ% %OBEy‚(‚/‚P‚cƒ%ƒ2ƒ8ƒ>ƒGƒJƒOƒRƒkƒn„„-„3„E„N„^„c„k„t„…… …!…)….…6…;…V…s†††/†3†E†X‡‡7‡D‡Z‡~ˆˆˆˆ ˆ ˆ0ˆ@ˆLˆVˆcˆeˆr‰‰‰‰‰(‰4‰?‰FŠŠ‹‹2‹AŒ'Œ|ASŽ Ž Ž0Ž9ŽBŽX 5irz~&A\f‘?‘F‘^’ ’$•–––(–*–5–<–A–V–a–f–u—— —+—/—3—@—C—K—f˜ ˜˜˜%˜*˜8˜C˜P˜`˜l˜y™™ ™I™O™W™[™q™x™ššššš-š0š0šOšYšYšcšgœœ5œDœtœ} !(.5@AISXgmžž ž%žIž^žrŸŸ'Ÿ-Ÿ:Ÿ>ŸB  + > J W \ k” ”%”3”<”I”U”Z”e”r¢¢¢¢¢7¢J¢M¢W¢_¢f¢k¢t£££(£8£P¤ ¤ ¤¤/¤5¤?¤q¤y¤|„-„.„o¦¦;¦]§©j©Ŗ5ŖQŖ{« «««%«1«6«<«A«P«W«Y«a«p«u¬ ¬¬2¬H¬c¬p¬{¬­­­&­.­7­=­G­U­k­y® ® ®®® ÆÆ'°(°-°7°8°>°C°L°u°|°}±±±9±[±n±x²%²/²4²;²E²S²f²l³³³"³3³?³M³n³v“ “““5“R“cµ µµ,µ=µ@µPµW¶¶ ¶¶Q¶h·· ···1·>·A·G·S·]·køøø ø%ø,ø0ø=øFøqøxø¹¹ŗŗŗ(ŗ:ŗ=ŗP»»!»v»z¼¼¼¼(¼5¼?¼E¼J¼[¼`¼y½½½%½X½l½u½{¾¾¾¾¾1¾G¾W¾o¾yææ!æ/æ6æDæQæhæĄ ĄĄĄ*Ą3Ą6ĄIĄKĄVĄ^ĄcĄkĄqĄ{ĮĮ#Į.ĀBĀ`ĀbK %0y‚‚H……/‡D‡I‡Zˆˆˆˆ(ˆ^ˆe‰‰‘&›$›7›?›G›[›c›kœSœeŸHŸ^Ÿs   L”}¢¢ ¢¢9¢<¢I¢`¢u££^£u£{¤¤"¤-¤c„ ¦"©4©<©MŖ«!­$­@­D­F­i® ²}ĄgĮSĀ&Ā5Ā`Ābže %.0011559:@@CCDEEEFIJKLLLMMMMNOPPRST```aabbbbceeggijjkmnoopqqrrsuuuwy|| ((**+,,468::<<<=>CENOW[[[abbhiikkllrry{‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ ‚ ‚#‚%‚(‚1‚3‚7‚8‚8‚<‚B‚H‚I‚I‚K‚X‚X‚g‚g‚l‚l‚s‚t‚t‚xƒ ƒ ƒ ƒ ƒ ƒ ƒ ƒƒƒƒƒƒƒƒƒƒƒƒƒƒ ƒ$ƒ-ƒ.ƒ/ƒ/ƒ0ƒ0ƒ1ƒ1ƒ1ƒ2ƒ8ƒ9ƒ?ƒBƒCƒCƒDƒDƒDƒEƒIƒLƒLƒLƒQƒQƒVƒVƒ^ƒ`ƒiƒjƒjƒnƒqƒuƒ„„„„„„„„ „ „„„„„„„„„„„„„!„"„"„"„#„%„%„&„&„-„3„E„E„F„J„J„K„L„Q„R„U„X„X„^„_„f„f„{„}……… … …$…3…5…6…8…;…;…C…K…N…N…O…P…Q…R…R…S…S…V…W…X…[…_…`…`…a…b…b…c…c…e…e…g…h…h…j…l…l…l…l…m…m…m…z† †††††††††††† †!†%†)†*†-†3†4†7†7†7†8†:†:†>†@†A†A†A†B†F†M†S†T†Y†Y†Y†_†_†g†j†k†k†l†q†r†s†s†s†s†t†x†}†~†~†††‡‡‡‡‡‡ ‡ ‡ ‡ ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡!‡!‡!‡%‡(‡)‡)‡*‡3‡4‡7‡9‡=‡=‡=‡=‡>‡?‡@‡@‡@‡A‡D‡E‡G‡G‡I‡L‡P‡R‡T‡]‡_‡_‡a‡e‡f‡f‡g‡i‡i‡j‡j‡s‡w‡~ˆˆˆˆˆˆ&ˆ(ˆ(ˆ*ˆ+ˆ,ˆ.ˆ0ˆ<ˆ@ˆAˆBˆCˆEˆFˆHˆHˆIˆIˆJˆLˆUˆUˆYˆZˆZˆ\ˆ^ˆeˆoˆoˆqˆsˆsˆtˆtˆvˆ{‰‰‰‰‰‰‰ ‰ ‰‰‰‰‰‰‰(‰1‰8‰9‰>‰L‰V‰V‰^‰_‰a‰c‰d‰f‰g‰i‰j‰j‰j‰m‰n‰o‰o‰p‰r‰u‰v‰y‰{Š ŠŠŠ"Š%Š'Š(Š)Š,Š,Š-Š/Š6Š7Š8Š;Š;Š<Š>Š@ŠDŠGŠHŠHŠJŠKŠQŠRŠTŠTŠ\ŠeŠkŠnŠpŠsŠ|‹‹‹‹‹‹ ‹ ‹ ‹‹‹‹‹‹‹‹‹‹‹ ‹%‹%‹&‹'‹+‹1‹3‹3‹4‹8‹:‹:‹;‹<‹@‹B‹B‹C‹H‹I‹I‹J‹Q‹S‹T‹X‹Y‹f‹g‹k‹p‹r‹z‹z‹}ŒŒ Œ ŒŒŒŒŒŒ!Œ!Œ"Œ"Œ(Œ,Œ3Œ4Œ4Œ4Œ4Œ5Œ7Œ8Œ:Œ:Œ;Œ=ŒAŒBŒDŒDŒEŒNŒNŒQŒSŒSŒTŒ^ŒjŒlŒoŒqŒqŒsŒuŒvŒwŒxŒyŒ{Œ|Œ} !!!!.688?AAHTZ\\]]aabdddhvvŽŽŽŽŽ"Ž"Ž&Ž*Ž+Ž,Ž-ŽSŽSŽYŽZŽ[Ž[Ž]ŽsŽvŽ{Ž}Ž}   &&'()*..12456;=?@BDDIILPPRSXYYZ\^ccdgyzz{    #'+-5:;;>FLRW\cqqtuux}‘‘‘‘‘‘ ‘‘‘‘‘$‘&‘,‘.‘3‘4‘8‘9‘9‘:‘;‘<‘<‘A‘D‘F‘G‘I‘I‘L‘P‘P‘P‘U‘V‘V‘W‘Y‘\‘`‘b‘b‘b‘c‘c‘d‘e‘e‘f‘f‘j‘k‘t‘t‘u‘u‘v‘v‘w‘x‘x‘y‘y‘y‘z‘z‘{’’’’’ ’ ’ ’’’’’’’’’’’’’’’$’,’-’-’.’.’7’>’?’?’A’G’H’K’L’L’O’O’P’Q’T’U’^’^’^’_’a’a’i’i’r’|’}“““““ “““““““$“&“)“,“/“0“0“5“<“<“D“G“L“M“N“P“T“[“\“a“a“c“e“m“p“p“s“y“z“z“z“{“”””””””” ” ” ” ” ”””””””"”&”*”+”2”3”4”9”K”N”P”P”R”V”X”\”\”`”f”u”w”x”y”z•• • • ••••••••'•)•/•<•=•C•D•L•L•L•M•M•N•U•V•[•[•^•_•a•a•b•e•g•r•v•}•}•}•~•–––––––––– – –––––––:–<–C–K–M–N–R–X–Y–_–i–j–l–m–n–n–o–t–x–z–|——— — ———————(—)—/—3—8—C—D—D—E—F—G—H—M—O—P—P—U—^—g—g—h—k—m—m—p—q—r—r—v—y—y—z—{˜˜˜˜˜˜˜ ˜'˜)˜+˜,˜.˜/˜/˜0˜0˜9˜<˜A˜A˜C˜D˜E˜F˜L˜L˜M˜O˜R˜S˜U˜V˜V˜V˜W˜X˜Y˜Y˜Z˜[˜\˜\˜\˜c˜f˜h˜i˜i˜l˜n˜q˜t˜t˜v˜{˜|˜|™™™™™™ ™ ™ ™ ™™™™™™™™™™™™$™$™%™(™)™+™-™1™3™8™=™A™A™B™C™C™C™D™E™G™K™K™c™d™e™h™i™j™j™k™n™p™p™q™r™s™t™t™u™x™x™yššššššššššššššš š!š!š"š"š#š(š,š.š4š<š@š@šFšIšMšUš[šbšfšišršsš|š}š}šš››››››››› › › › › › › ››››››››››››››› › › ›#›$›%›%›&›&›(›*›*›*›+›+›,›-›-›.›.›/›2›7›8›9›:›>›?›@›A›B›B›C›C›D›G›G›H›J›Q›Q›[›[›`›`›c›f›g›k›l›o›s›w›y›z›z›}›}›~œœœ œœœœœœœ"œ#œ&œ(œ*œ*œ+œ/œ/œ2œ3œ7œ:œ=œ>œ>œ>œ?œ?œ@œAœBœCœDœFœHœIœIœLœOœOœQœSœXœXœYœ]œ`œaœaœdœeœkœmœoœpœpœsœtœvœxœxœ|œ}œ} #%6@EJOYY\biooquxžžžžžžžž$ž(ž)ž,ž1ž2ž3ž9ž;ž;ž;ž<ž=ž=ž@ž@žFžPžQžSžSžTžTžXžXžXžYžZžZž_ždžfžgžjžkžnžpžržužuž}ŸŸŸŸŸŸ ŸŸŸŸŸŸŸŸŸŸ1Ÿ4Ÿ5Ÿ7Ÿ8Ÿ>Ÿ?ŸBŸBŸCŸCŸDŸGŸHŸHŸJŸJŸKŸKŸKŸLŸLŸNŸOŸSŸVŸXŸZŸZŸ]Ÿ`ŸdŸdŸgŸhŸhŸkŸnŸoŸpŸpŸrŸsŸvŸyŸ                    ! # $ % % & - . 2 4 7 8 ; ; B D G K M N R R S \ \ ^ h l l m p q r s t t y” ” ” ”””””””"”&”&”'”0”9”;”<”<”>”B”C”F”F”J”J”V”W”^”`”b”f”g”l”m”m”s”v”x”z¢¢¢ ¢ ¢¢¢¢¢¢¢¢&¢'¢(¢,¢-¢-¢.¢.¢2¢3¢3¢3¢9¢<¢=¢>¢B¢C¢E¢G¢I¢M¢N¢O¢O¢Q¢R¢U¢X¢]¢g¢t¢{¢}¢££££££££'£'£)£)£.£/£0£1£1£1£5£6£6£8£<£A£C£C£E£E£E£F£G£M£N£P£P£Q£T£U£V£X£X£X£Y£Z£^£^£_£`£c£c£f£g£i£k£k£l£m£m£o£s£u£u£u£x£z£{£}¤¤¤¤¤¤¤¤¤¤¤¤!¤"¤"¤#¤&¤'¤(¤(¤+¤+¤,¤,¤,¤,¤-¤.¤2¤3¤5¤6¤6¤7¤9¤<¤=¤=¤@¤B¤C¤D¤H¤I¤M¤N¤O¤O¤Q¤S¤X¤X¤Y¤[¤\¤\¤]¤]¤^¤_¤`¤a¤a¤a¤b¤b¤c¤i¤m¤o¤r¤s¤s¤t¤x¤|¤|¤}¤~„„„„„„„„„„ „ „ „ „ „ „ „„„„„„„„„ „ „!„"„"„%„%„&„(„)„0„1„2„3„4„5„6„7„7„>„>„@„A„C„F„G„G„I„I„I„J„K„L„M„M„N„N„P„P„R„U„V„W„W„X„X„[„\„_„i„o„r„s„u„u„v„v„x„x„{„~„¦¦¦¦¦¦ ¦ ¦ ¦ ¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦!¦!¦!¦"¦"¦#¦#¦&¦&¦'¦(¦)¦,¦-¦-¦1¦2¦2¦3¦3¦4¦5¦6¦7¦7¦7¦:¦;¦=¦=¦=¦>¦?¦@¦A¦C¦C¦C¦D¦G¦H¦I¦J¦K¦N¦P¦P¦Q¦Q¦S¦T¦T¦V¦W¦Y¦Y¦\¦]¦]¦_¦a¦i¦i¦i¦j¦j¦j¦o¦p¦r¦s¦s¦s¦u¦{¦{¦~¦¦§§§§§§§§§§§§§§§ § § § § § § §§§§§§§§§§§§%§&§'§(§(§)§)§)§*§*§+§,§-§-§.§/§0§0§0§1§1§2§2§3§5§5§6§7§9§<§=§>§@§A§B§B§C§C§D§D§I§I§L§N§N§O§R§R§S§T§X§^§b§d§e§f§f§g§i§i§k§k§l§m§p§p§p§q§q§r§r§t§v§v§w§x§x§y§{§|§ØØØØØØ Ø Ø Ø ØØØØØØØØØØØØØØØØØØØØØØØØØØ Ø!Ø"Ø#Ø#Ø$Ø$Ø$Ø%Ø(Ø)Ø)Ø)Ø)Ø*Ø*Ø+Ø,Ø-Ø.Ø/Ø/Ø/Ø2Ø2Ø3Ø3Ø4Ø4Ø5Ø5Ø5Ø6Ø7Ø8Ø<ØBØCØEØIØJØKØKØOØOØQØRØRØRØSØTØUØUØWØXØ[Ø\Ø\Ø]Ø]Ø^Ø_Ø`ØaØaØbØcØdØdØdØgØgØhØiØiØkØkØlØmØoØoØoØsØtØvØxØzØzØ{Ø}Ø©©© © © © © © ©©©©©©©©©©©©©©©#©)©*©*©,©-©-©/©1©3©5©6©7©:©;©<©<©>©>©?©B©B©C©I©J©J©L©M©N©O©O©U©V©V©Z©[©b©c©e©j©l©o©q©r©s©u©v©w©x©x©y©z©{©ŖŖŖŖŖŖŖ ŖŖŖŖŖŖŖŖŖŖ Ŗ!Ŗ!Ŗ"Ŗ"Ŗ#Ŗ#Ŗ%Ŗ&Ŗ'Ŗ'Ŗ'Ŗ,Ŗ-Ŗ.Ŗ.Ŗ.Ŗ/Ŗ5Ŗ6Ŗ9Ŗ:Ŗ>Ŗ>Ŗ?ŖAŖBŖCŖCŖDŖGŖGŖJŖJŖKŖNŖNŖNŖOŖQŖSŖWŖWŖXŖXŖZŖ\Ŗ]Ŗ^ŖbŖcŖdŖdŖgŖgŖhŖiŖjŖnŖpŖsŖxŖxŖ}««««« « « «««&«&«)«)«*«,«2«3«6«7«8«>«?«?«D«I«K«L«L«Q«[«_«i«i«i«l«n«s«u«v«z«z«z«{«}¬¬¬¬¬¬¬¬¬¬¬¬¬ ¬"¬,¬/¬2¬5¬7¬9¬B¬D¬H¬N¬N¬O¬Q¬S¬S¬X¬Y¬Z¬[¬[¬[¬\¬\¬`¬n¬p¬r¬s¬v­­­­­­­­­­­­­­­­­­ ­ ­"­'­'­(­)­+­.­1­2­2­4­4­5­5­8­9­:­:­;­;­>­>­?­@­@­G­K­K­L­N­N­P­U­X­Y­]­^­^­^­_­b­b­c­r­t­v­|­­­®®®®®®®®® ® ®®® ®"®"®#®$®$®&®&®,®,®-®-®-®0®1®2®3®4®4®5®5®7®7®8®8®8®9®:®;®;®>®>®>®@®@®@®A®A®E®E®E®F®F®G®H®I®I®I®J®K®M®N®N®O®P®S®S®T®T®T®U®U®U®Y®]®^®^®a®a®d®f®f®f®h®n®n®p®q®r®x®x®y®y®y®y®z®|®}®}ÆÆÆÆÆÆÆÆÆÆÆÆ Æ&Æ'Æ+Æ+Æ2Æ2Æ2Æ3Æ6Æ6Æ8Æ9Æ:Æ;Æ<Æ=Æ=Æ@ÆAÆAÆBÆBÆCÆEÆHÆJÆLÆMÆOÆUÆVÆWÆ`ÆdÆdÆeÆfÆfÆiÆiÆiÆj°°°°°°°°°° ° °°°°°°°°°°°°°°°° °'°,°,°/°0°1°2°6°6°:°<°?°I°L°M°M°N°R°S°V°W°W°X°a°d°f°l°t°v°v°|°}±±±±±±±±±±±-±1±5±6±7±7±;±A±D±G±H±H±H±L±Q±S±U±U±V±]±]±^±d±n±p±q±s±}±~²²² ² ² ² ²²²²² ²!²%²&²'²)²*²*²+²,²,²,²-²/²1²<²=²?²?²C²F²F²T²U²\²_²_²b²d²f²f²g²l²l²m²m²m²n²o²o²s²s²t²t²u²u²v²y²{²|²|³³³³³³³ ³ ³ ³ ³³³³&³'³+³0³6³7³8³9³>³H³I³M³N³O³Y³]³^³c³i³k³n³o³y³}“ “ “#“#“'“*“-“1“9“@“B“K“L“`“m“{µµµ µ µ µ µ µ µ µ µµµµµµµµ&µ'µ'µ'µ)µ.µ2µ3µ=µDµGµJµLµOµXµZµ[µ]µ_µaµbµdµdµfµkµqµrµrµwµwµyµ}µ}µ~µµ¶¶¶¶ ¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶ ¶!¶$¶$¶%¶&¶&¶(¶(¶(¶(¶+¶+¶+¶,¶,¶-¶0¶1¶6¶7¶7¶8¶9¶:¶;¶=¶=¶=¶>¶>¶A¶B¶D¶D¶G¶H¶M¶N¶Q¶S¶V¶V¶Y¶Z¶Z¶Z¶[¶\¶]¶`¶`¶a¶a¶a¶b¶e¶i¶i¶j¶j¶k¶k¶l¶m¶p¶s¶u¶u¶v¶w¶w¶x¶x¶y¶z¶|¶}¶~···· · · ········!·#·$·(·*·2·5·:·>·A·D·E·H·K·M·M·Z·Z·]·^·^·^·_·g·h·h·h·k·k·m·p·r·v·w·x·x·yøøø ø ø ø øøøøøø!ø)ø-ø0ø2ø3ø3ø4ø4ø4ø8ø=øCøFøIøKøKøMøNøUøVøZø`øeøføpøpøqøxøyø{ø{ø{ø|ø|ø}ø~¹¹¹¹¹¹¹ ¹¹¹¹¹¹¹¹¹"¹*¹,¹.¹7¹:¹:¹;¹=¹>¹>¹E¹G¹`¹b¹d¹d¹t¹xŗŗ ŗ ŗŗŗ#ŗ$ŗ*ŗ/ŗ2ŗ5ŗ:ŗMŗQŗZŗZŗbŗhŗwŗz»»»»»»»»»»»»»*»+»+»2»2»2»4»5»6»6»7»8»9»=»=»>»?»?»@»A»A»B»B»C»D»D»D»E»E»I»J»Q»R»S»T»U»V»W»[»\»^»_»_»`»b»c»e»i»i»j»j»j»k»k»l»n»n»o»p»p»q»q»v»v»z»z»{»{»{»|»|»~»~¼¼¼ ¼ ¼ ¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼ ¼ ¼!¼(¼+¼,¼.¼0¼4¼4¼9¼:¼=¼D¼D¼D¼E¼G¼K¼O¼O¼Q¼R¼S¼U¼U¼V¼X¼[¼[¼`¼a¼b¼b¼e¼f¼h¼i¼l¼r¼u¼w¼w¼w¼z¼z¼~½½ ½½½½½½#½#½$½$½%½(½+½0½O½Q½Z½Z½[½`½`½a½c½c½c½g½h½h½l½o½r½t½x¾¾¾¾¾¾¾¾¾¾¾¾¾¾ ¾"¾"¾#¾#¾#¾%¾%¾&¾(¾)¾,¾,¾.¾1¾2¾2¾5¾6¾8¾9¾9¾<¾M¾O¾P¾S¾j¾n¾n¾q¾y¾|æææææ æ æ ææææææææææææ"æ#æ%æ'æ)æ+æ-æ.æ/æ/æ1æ3æ4æ6æ6æ7æ7æ8æ8æBæGæIæMæSæSæXæ\æaæaæaæcæeæhæiækætæwĄĄĄĄ Ą ĄĄĄĄĄĄĄĄĄ!Ą"Ą&Ą.Ą/Ą/Ą1Ą2Ą7Ą:Ą<Ą<Ą?Ą?ĄAĄDĄDĄEĄEĄHĄIĄMĄNĄOĄQĄSĄSĄaĄbĄcĄeĄeĄkĄmĄqĄsĄtĄuĄ|ĮĮĮĮĮĮĮĮ Į!Į$Į.Į1Į1Į2Į;Į;Į<Į?ĮCĮDĮDĮHĮHĮHĮMĮOĮPĮPĮRĮRĮUĮVĮWĮYĮYĮ[ĮaĮdĮeĮgĮhĮiĮkĮlĮmĮvĮwĮyĮyĮ|Į|Į|ĮĀĀĀĀĀĀĀĀĀĀĀĀ Ā ĀĀĀĀĀĀĀĀĀĀ!Ā"Ā&Ā/Ā1Ā2Ā2Ā5Ā5Ā7Ā8Ā9Ā:Ā;Ā;Ā<Ā<Ā@Ā@ĀBĀGĀGĀGĀKĀKĀNĀNĀNĀOĀQĀRĀSĀUĀ`ĀbĀjĀjĀmĀnĀoĀqĀsĀuĀvĀ{ĆĆĆĆĆĆĆĆĆĆĆĆĆĆ!Ć%Ć%Ć&Ć'Ć'Ć(Ć(Ć)Ć)Ć*Ć,Ć-Ć/Ć0Ć1Ć1Ć2Ć5Ć5Ć7Ć8Ć8Ć;Ć<Ć<ĆAĆBĆCĆDĆHĆJĆJĆNĆOĆOĆPĆRĆRĆSĆTĆTĆTĆYĆYĆ[Ć\Ć\Ć]Ć]Ć_ĆeĆfĆfĆmĆnĆoĆqĆrĆ}Ć~Ć~ĆÄÄÄÄÄÄÄ Ä ÄÄÄÄÄÄÄÄ%Ä'Ä.Ä/Ä0Ä0Ä6Ä6Ä9Ä>Ä?Ä?Ä@Ä@ÄAÄBÄCÄCÄEÄEÄGÄIÄOÄPÄQÄQÄRÄSÄSÄTÄVÄVÄWÄYÄ\ÄbÄdÄeÄgÄjÄlÄmÄpÄrÄuÄxÄyÄyÄzÄ{Ä}Ä~ÅÅÅÅÅÅÅÅÅÅ Å$Å*Å,Å5Å5Å<ÅAÅF‘z %0255@@CCDEEEFIKLLLMMMQQ`abceeghijkllmmnoqrsuvvw}!$%((*+--06:;<>>MSWXdk}‚‚‚‚ ‚*‚1‚4‚8‚<‚D‚F‚H‚J‚M‚P‚T‚h‚r‚s‚t‚u‚x‚y‚{ƒƒ ƒ ƒ ƒƒƒƒƒƒƒƒƒ.ƒ/ƒ0ƒ1ƒ1ƒ2ƒ4ƒ6ƒ9ƒ;ƒ<ƒ=ƒ>ƒ?ƒBƒCƒDƒDƒHƒIƒTƒUƒVƒVƒ[ƒ\ƒ\ƒ`ƒaƒgƒhƒiƒkƒoƒrƒuƒyƒ~„„„„„ „ „ „„„„„„"„$„%„&„'„-„5„P„U„_„_„e„e„g„k„q„r„u………… …9…;…<…C…J…K…K…M…M…N…O…Q…R…R…R…S…[…[…_…`…b…c…f…g…h…h…l…m††††††††<†>†@†@†A†B†J†K†K†P†Y†i†j†k†l†m†n†q†r†x†z†}‡‡‡‡‡ ‡‡‡‡‡‡‡‡!‡)‡2‡=‡A‡C‡E‡E‡G‡J‡M‡Z‡\‡_‡_‡b‡e‡f‡g‡i‡n‡n‡o‡p‡q‡v‡w‡~ˆˆ"ˆ#ˆ%ˆ%ˆ&ˆ<ˆDˆEˆIˆIˆPˆUˆZˆ[ˆqˆqˆyˆ{‰‰‰‰F‰W‰c‰d‰f‰f‰j‰k‰m‰n‰o‰o‰p‰s‰t‰vŠŠ Š ŠŠ#Š'Š1Š7Š;Š=ŠAŠDŠGŠkŠqŠ|‹‹‹‹‹ ‹ ‹ ‹‹‹‹‹!‹$‹%‹'‹'‹+‹,‹-‹1‹6‹;‹B‹B‹C‹C‹D‹G‹K‹K‹L‹O‹P‹S‹U‹s‹z‹{ŒŒŒ!Œ!Œ4Œ8Œ:ŒCŒDŒEŒjŒjŒkŒkŒsŒuŒvŒwŒzŒ|!!"/0:<=ATVWYZ]]accdderŽ ŽŽŽŽŽ Ž"Ž"Ž+Ž,Ž,Ž=ŽMŽSŽTŽZŽcŽtŽuŽxŽxŽyŽ{Ž~Ž  ),.15;<=CEFGHILRSUYZ\]^ciy   "(79:;>DETcqtuvy|~‘‘‘‘$‘&‘+‘,‘.‘/‘8‘:‘:‘@‘F‘G‘I‘J‘J‘M‘N‘O‘S‘V‘W‘\‘]‘b‘d‘d‘d‘f‘g‘k‘o‘p‘t‘w‘x‘y‘z‘{‘’’’’’ ’’’’’’’’ ’-’4’G’G’H’L’O’Q’U’V’V’\’]’^’^’_’d’j’q’r’t’z’{’~“““““““!“"“#“)“,“4“B“H“M“S“T“Z“[“\“k“t“|“”””””””””&”'”+”+”0”1”3”4”6”Z”^”f”h”w”x”y”}•• ••)•)•*•>•A•D•M•M•^•a•c•e•r•}–– –––1–2–5–A–B–C–C–D–M–N–Q–S–U–Y–_–_–e–i–j–l–r–t–z–{—————"—$—&—(—/—<—H—P—U—a—g—h—k—m—q—q—r—r—y—{—˜˜˜˜˜)˜+˜1˜A˜B˜B˜N˜P˜W˜\˜\˜f˜i˜q˜r˜s˜t˜t™™™™™™™ ™ ™™™™™™™™!™$™$™)™-™1™2™6™:™A™C™G™Z™`™c™e™j™s™y™{™~ššššššš%š&š'š(š-š@šAšDšEšFšGšTšZšdšdšešišr›››››››› › › › ›››››››› ›!›#›(›-›/›3›8›:›B›C›E›G›H›K›M›N›R›R›V›[›[›g›h›l›w›{›|œœœœ œœœœœœ"œ%œ&œ/œ8œ9œ=œ>œAœJœLœOœUœXœ]œlœnœoœpœpœuœvœyœzœz%1EK]džž žžž)ž-ž3ž5ž6ž7ž8ž9ž:ž;ž=ž>ž@žDžFžLžMžQžUžXžXžZž]ž_ž`žcžežfžgžjžuŸŸŸŸŸŸ Ÿ Ÿ!Ÿ#Ÿ5Ÿ>ŸIŸIŸJŸJŸKŸMŸUŸWŸWŸYŸZŸeŸgŸgŸiŸkŸoŸpŸpŸrŸvŸ                   ! % & , 8 : : ; < D E F G c e l l o r s t u | ~ ”””” ”””””””%”&”'”/”/”0”0”:”;”=”F”I”P”W”X”^”b”f”g”o”r”s”z”|¢¢¢¢¢¢¢ ¢#¢(¢(¢,¢-¢.¢1¢2¢3¢3¢6¢7¢8¢>¢>¢D¢Q¢R¢S¢U¢`¢o¢}¢£ ££££££ £'£)£*£+£0£1£6£8£A£B£F£G£L£R£V£V£c£c£i£n£q£r£t£z¤¤¤¤ ¤¤¤¤¤¤¤¤"¤(¤,¤-¤.¤/¤2¤7¤7¤=¤E¤G¤H¤K¤Q¤T¤\¤]¤a¤g¤o¤t¤y¤|„„„„ „ „„„„„ „!„!„"„(„2„7„7„8„9„=„?„E„E„E„F„G„G„G„G„I„I„K„L„L„N„N„O„P„Q„Q„Q„V„W„o„r„t„w„w„x„}„¦¦¦¦ ¦ ¦ ¦¦¦¦¦¦¦¦¦¦¦!¦!¦"¦&¦(¦,¦3¦4¦5¦6¦7¦8¦9¦;¦;¦<¦=¦>¦>¦>¦?¦@¦C¦G¦G¦H¦I¦K¦O¦Q¦Q¦T¦T¦T¦U¦W¦Y¦Z¦\¦\¦]¦`¦`¦a¦c¦e¦i¦j¦o¦p¦q¦r¦s¦s¦u¦x¦y¦y¦z¦z¦{¦~¦§§§§§§§ § §§§§§§§§§§§!§#§%§(§)§)§*§*§-§0§0§1§5§6§7§9§:§:§<§<§>§@§B§C§D§E§F§F§G§L§N§R§T§U§V§V§V§W§W§[§^§`§b§d§e§f§i§k§l§l§n§p§r§t§u§v§v§x§z§{§}§~ØØØØØØ Ø Ø Ø ØØØØØØØØØØØØØØØ Ø!Ø#Ø$Ø(Ø)Ø)Ø)Ø*Ø*Ø.Ø/Ø/Ø0Ø0Ø2Ø3Ø3Ø8Ø8Ø9Ø<Ø<Ø>Ø?ØCØDØEØEØFØGØJØKØKØOØOØRØRØSØTØUØXØYØ]Ø_ØaØcØdØdØgØgØhØiØjØkØlØlØoØpØqØsØtØuØvØvØwØxØzØ{Ø~©© © © © © ©©©©©©©©©©©©©©© ©"©(©*©+©-©-©1©3©5©6©9©=©>©C©E©I©K©K©S©V©V©Z©[©a©a©b©c©f©l©m©o©p©r©r©w©x©y©zŖŖŖŖŖŖŖŖ ŖŖŖŖŖŖŖ Ŗ!Ŗ!Ŗ"Ŗ#Ŗ'Ŗ(Ŗ,Ŗ.Ŗ0Ŗ3Ŗ4Ŗ5Ŗ6Ŗ:Ŗ:Ŗ>ŖAŖCŖGŖJŖJŖLŖLŖTŖUŖXŖZŖ^Ŗ^Ŗ_Ŗ`Ŗ`ŖcŖdŖgŖgŖiŖiŖjŖkŖkŖnŖpŖtŖxŖyŖ}«««« « « « «««*«9«?«D«R«Y«_«b«c«d«g«i«i«j«n«u«v«x«~¬¬¬ ¬ ¬¬¬¬ ¬!¬!¬!¬+¬/¬9¬=¬?¬@¬D¬D¬N¬N¬X¬[¬\¬]¬n¬o¬p¬q¬t¬­­­­­­)­4­;­;­A­G­L­N­O­P­V­W­X­X­Y­r­t­v­y­z®®®®®®!®#®&®(®0®:®G®H®I®I®T®V®Y®Z®Z®d®n®q®x®yÆÆÆ&Æ.Æ.Æ/Æ6Æ8Æ9ÆAÆBÆDÆEÆJÆJÆMÆNÆOÆPÆTÆZÆ]Æ]ÆeÆgÆgÆiÆl°°°°°° °°°°°°°°!°!°#°,°,°-°/°0°1°1°3°:°?°I°S°T°T°V°f°j°p°s°t°v°y±±±±±±±±±&±*±-±1±6±@±H±I±L±S±U±V±X±d±n±o±u±x² ² ² ²² ²+²+²,²-²1²8²<²@²A²F²T²l²m²s³³³³³$³&³'³,³-³0³3³7³?³B³B³I³J³N³O³O³R³W³Y³Z³_³o““““““#“C“H“I“J“`“eµµ µ µ µµµµµ&µ'µ'µ(µSµ[µ_µbµdµeµkµlµvµ}¶¶¶¶¶¶¶ ¶!¶!¶(¶+¶+¶=¶C¶H¶Q¶S¶U¶V¶Z¶[¶\¶]¶]¶`¶a¶b¶b¶j¶k¶r¶x¶}¶~····· · ··!·#·%·1·@·@·D·D·]·^·h·h·m·n·p·w·x·y·}·~·~ø ø ø øøøø,ø4ø4ø5ø5ø=øMøRømøpøyøzø{ø|¹¹¹¹¹¹¹¹¹!¹*¹,¹.¹0¹0¹2¹:¹;¹=¹G¹I¹d¹j¹xŗŗŗ ŗŗŗŗŗ0ŗ0ŗ2ŗZŗz»»»»»(»)»+»,»2»3»4»<»=»@»A»J»N»O»T»U»V»V»W»\»^»_»`»e»g»g»k»l»n»n»o»v»{»|»}»~»¼¼¼¼¼ ¼ ¼¼¼¼ ¼ ¼%¼0¼4¼:¼;¼@¼A¼P¼Q¼[¼b¼d¼e¼h¼r¼u¼w¼y¼}½½½½½½#½:½F½L½Y½Z½]½c½l½o½v½x½|¾¾¾ ¾ ¾¾¾¾#¾(¾,¾,¾-¾2¾8¾=¾Q¾T¾W¾^¾e¾f¾n¾o¾q¾t¾v¾{¾|¾~¾ææ æ ææææææ&æ,æ1æ1æ3æ4æ8æ>æBæDæDæGæIæUæWæ\æ\æiælæoætæuæ{ĄĄĄĄĄ ĄĄĄĄ Ą"Ą(Ą*Ą/Ą0Ą1Ą7Ą8Ą<Ą<Ą>ĄIĄIĄJĄLĄOĄSĄXĄZĄ]ĄaĄbĄeĄhĄyĮĮĮĮ.Į0Į1Į<Į?ĮCĮDĮGĮHĮIĮJĮMĮQĮRĮVĮVĮ^ĮaĮbĮbĮhĮiĮmĮvĮyĮyĮ}ĀĀĀĀĀĀĀĀ!Ā"Ā&Ā(Ā,Ā8Ā<Ā@ĀDĀGĀKĀKĀRĀRĀUĀ`Ā`ĀbĀbĀeĀqĀqĀvĀxĆĆĆĆ ĆĆĆĆĆĆĆĆĆ Ć!Ć&Ć-Ć.Ć/Ć1Ć5Ć7Ć8Ć8Ć<ĆCĆHĆJĆOĆSĆTĆYĆ]Ć]Ć`ĆdĆfĆlĆpĆpĆqĆyĆ}Ć}Ć~ÄÄ Ä Ä ÄÄÄÄÄÄÄÄÄÄÄ.Ä/Ä0Ä5Ä5Ä9Ä9Ä<Ä=Ä>ÄBÄEÄIÄKÄLÄNÄOÄOÄQÄSÄTÄWÄXÄZÄ\Ä]ÄbÄdÄeÄgÄgÄgÄhÄyÄzÅÅÅÅÅÅ Å$Å)Å-Å5Å6Å6Å8Å<  ĀbĀvĀwĆHĆK]Ā`ĀbĀfĀrĀsĀtĆĆĆĆ Ć Ć ĆĆĆĆĆĆ!Ć"Ć%Ć'Ć,Ć.Ć/Ć0Ć3Ć;Ć?ĆBĆCĆDĆEĆJĆKĆMĆRĆUĆXĆ\Ć_ĆaĆgĆlĆnĆnĆrĆvĆzĆ~ÄÄÄÄÄ ÄÄÄÄÄÄ#Ä%Ä&Ä0Ä1Ä2ÄXÄZÄ]Ä_ÄbÄdÄkÄlÄnÄoÄpÄuÄxÄ}ÅÅÅ,Å2Å5Å8Å;ÅCÅEÅFX‹Ā`ĀbĀrĀsĀsĆĆĆĆĆ ĆĆĆĆĆĆ Ć"Ć%Ć&Ć,Ć-Ć/Ć0Ć2Ć:Ć?ĆBĆCĆDĆDĆJĆMĆRĆUĆXĆ\Ć_ĆaĆfĆlĆnĆrĆvĆzĆ~ÄÄÄÄÄ ÄÄÄÄÄÄ#Ä%Ä&Ä/Ä0Ä1ÄXÄZÄ]Ä_ÄbÄdÄkÄlÄmÄoÄpÄuÄxÄ}ÅÅÅ,Å2Å5Å7Å;ÅEÅFÅHthe-picture-of-dorian-gray.txtĄĖKŃ>Œƒf00ŠtĀ_˜’2‹b́‹nŒ„2Œ„00÷UŠ‚eŒ„<4āĢė|Œ„N20Œ„S87‡Ń1 0BŒ„B7Œ„"5Œ„X8Œƒy0Œƒ1Œ„2Œ„ 3Œ„4Œ„76ĶCŠ‚qŒ…=1Œ…B8Ё[‰ūmŒ…\1Œ…b4ąkŒ…H0Œ…h1‰ūqЁ_ Œ…|0Œ†3Ń~‚ž Œ†-0ĢD‚Ķ Œ†@557Ķ0Œ†U1‚¢) Œ†Z0ŅAĢcĢh‚‡PŒ†t0Œ†y221541Œ†~4Ģ5żiŒ‡&12Ģ ĢŒ‡:1́ź3Œ‡?0Œ‡L4116¾DÄ9Œ‡jbiterŒ‡pgot_ƒšw‡ŹcŒˆssone_Œˆfe_üs‚„,ŒˆCef_Œˆ>aud³PŒˆ#aŒˆIhŒˆalarin_øE‚Ęü;Œ‰but_Œ‰ colletee_śB‰jŒ‰8 ctrinaire_Œ‰=igtsŠ  Œ‰eŒ‰CoŒ‰ arwinismus_Œ‰cuü6Ö7 gŒŠnui_ŒŠ"trees_‚ĆŒŠ(nŒŠDsprit_ŒŠditionö|žWū*ŒŠveŒŠ|nŒŠpasco_¦ „SŒ‹ iŒ‹!leursŒ‹' oukousas_‚¾,“C„nÖŒ‹acis_‚»$įGŒ‹gaŒ‹xesŒ‹~ilasØXż†ƒĀ;ŒŒ.nstreŒŒ4ue_ŒŒ:oŒŒ#adameŒŒ)enu_ąj¹`«ŒŒ}nisŒrseme_„ .‚ė'Œ$ecis_Œ*otege_Œ aŒ0rķļ2‚Ć Œf binsoniana_Œkuge_ŒqoŒaiposte_„›iÄ ŒŽ,alon_ŒŽ2 ymbolistes_‚›œ>ŒŽZbleau_ŒŽ`edium³&‚öyūv³: Œ heŒŽfaŒropŒ eponaztli_Œure_²sCŒ tŒ‰i dŒ‹-fŒˆgcŒŠJeŒŒlŒŒTmŒMpŒŽrŒ‡varŒŽ8sŒˆbricŒ‹UgrandeŒ‹[ juruparis_ŒŒwnil_ŒUyotl_»ļŲ.į‡£w ˆ&‡é%gg…š kŒ‘ggutŒ‘"veŒ‘rdeĮ%ē$Œ‘Ks…Æ((į-Œ‘^((lyät.Œ‘d-eŒ‘sionÓ6„¹NŒ’ed£Œ’bŒ’$ption6Œ‘y.lutŒ’*rż ƒöZŒ’Xed‚ĆJŒ’]actŒ’luseł7„ō Œ“ lyPŒ’B6oŒ“urdŒ‘QenceŒ’rtr‚ų ‚MŒ‘(koŒ“PsŒ‘ leŒxandonŒ~dicateŒ‘ideŒ‘jectŒ“Iused„æc†ĘXŒ”-yŒ”'icians™¤&Œ”LlikeŒ”3demŒ”Rnthus‚ŪM¹Źw‚€,ņ Œ•ingŒ• edŒ•anceÕ,ĖZŠy Œ•8edŒ•=ibleŒ•B ssŒ• ptŒ”}ntuating¾f„Ņ Œ–al‚ˆ]Ø?Œ–edŒ–mentøTŒ–"iŒ–:y‚ß>„”E‡ä Œ–ZingŒ–Tanceƒņ‚… Œ–{sŒ–` rdŒ—untŒ–@mpan¦kĀZcŒ—7ateŒ—=sedå:‚—oŒ—atomedŒ—[ingŒ—gsŒ—CrŒ—1mulate=Œ•\eŒ— oŒ–identŒ˜u‚Œ<ā.‚¬m„–f„”;Œ˜\s‚×U‡==>Œ˜v==ssŒ˜pbatsöR‚”GŸ ƒ¹CŒ™ s‚¤R‚ęŒ™4eŒ™:ityŒ™ngŒ™&onŒ™@vśT‡ü7Œ™ts‚Ę: ‚†8õGį\‚“  ŒšlyŒšity‚ŗMŒ™ViŒš ualŒš ressŒ™zorŒ™edŒšsVŒš8MtŒ˜|>roŒ˜"=cŒ”caŒ˜PidŒ˜b quaintanceŒ˜V knowledgeŒ˜Jhilles‚åW µ<Œ›Xs Œ›R dŒ›^rŌ@ĪÕ]Œ›~alŒœsįSŹ^ŒœdŒœ$sĘm Œœ)eŒ›j eŒœ= ressŒœitionß3‚įĢ-ŒœseŒœyy±{Ī0 ŒœblŒtionŒl‚ˆ1ŻN‡Ō)‡Ū5Œ?dŒErŒKsŒ aŒQe‚Ā{‚«ŒžtedŒo rŒž tż…Īz‚–KŒž8ed‚©y’Nģgƒ‡0 ŒžQdŒžWsŒž\ eŒžKationŒžrrŒž2nisŒž>ptŒž-lpheŅn ‰ ŒŸ4 nŒŸ:tique‚”0ŒŸXd‚łŒŸjtageŒŸ^ce‚ņŒ rśGćŒ sariesŒ tiseŒ ntureŒ $r‚«  ŒŸpanŒ @eŒ Xice^ŒœK dŒž miŒŸ  oŒ ^ vŒŸ@ riaŒœnjoiningģ+‚¼‚–!Å`×,‚öDŒ”Rateß~ą8 Œ”XionŒ”LedŒ”FationsŒ”hsę4錢nityŒ¢"rmative‚™}‚ųpŒ”n ectŒ¢JordŒ¢'iŒ”@airŒ¢Dluence„ŁO==ƒÉ#„”m „ŪgzŒ£ wardsŒ£ noonLŒ£gzterŒ£==raidŒ¢P f„²#,,ƒĆoGsŒ£X,,st‚؃äUŒ£shaŒ£meŒ£^GsinŒ£yt‚Ż:ĪCŅU…¹s(Œ¤$dŒ¤/sŒ¤*ntĮ„pŒ¤TngŒ¤Ztatedƒü\‚č†ūWŒ¤nyŅZŲ3„k Œ„mentŒ„ddŒ¤aŒ¤5(eŒ„ reeŒ„oŒ¤`iŒ¤ynewŒ„7ueƒ’^##Ės½fƒ N‰ŠŒ¦sŒ¦ ing‚ķM„Ź3""/Œ¦6""rŒ¦mŒ¦0nŒ¦dĢ:Œ2!!‚żhÆ<éRŒ¦wsÆt“ųW¢fŒ§erianŒ§iersża…‘VĪ<Œ§?enŒ§EveŒ§:ce‚—(ś3Œ§janceŒ§pterative„¹U ƒ†QŒØ edˆ«Z‚8‚JŒØowŒ§uiйK$$¶S¹oƒ5‚śŒØSeŒØYgŒØ_nŒØGesŒØMft° ‚āj„…b£CĪ ƒ¦g °j}Œ©4eŒ©:iveƒģb Œ©. edŒ©@natŒ©)ation‚ō[Œ©V erŒ©#arŒ©{hough…ÆTnnŽ&„oŒØ(‚8‚JlŒŖ#nnwaysŒØA$$mostŒ¦e!!anŒŖtŒØsoŒ©soŒ©readyŒ§KiŒ¦|derŒ§exanderŒ§gŒ¦kbanyŒ¦qchemistŒ§fonsoŒ©phonsoˆ…4“vŒ«]sƒÆ`†ˆŒ«wmentŒ«qd‚æj³5 Œ«}eŒ¬ingŒ¬on Œ¬ zŒ«cteurŒ«Wrrežy‚ū}Œ¬`s·/˜ Œ¬sgris‚ĪOŒ¬yerŒ¬eassadorŒ­ itionsė ‚ķ‚ķZŒ­>s‚ŪŒ­Dn°qƒ‘]Œ­`sŒ­RricaŒ­fthystŒ­8nds‡¾ƒŗYĮŒ®stˆ0Œ®%ngŒ®4ur‚ၰ>ƒ€!ƒčž4Œ®\dŒ®bment‚Öl Œ®heŒÆing…$h‚0Œ­teŒ®:oŒ¬? aŒÆ usŒ­bŒ®idstŒ®PpleŒ®Vsterdam‚½X‚ĆT‚¤#ŒÆvngŒÆ|sŒ°iŒÆpe‚ć6Œ°sŒ°+zed¬SŒ°1lyŒ°Gstasius8½5Œ°hestorsŒ°nhoriteśqŠÅ‘g‘hŒ±rew»3¹QÆŒ±/lsŒ±5r–‚¾ƒävŒ±\yŒ±Vilyė Œ±brŒ±;eŒ±PlomaniaŒ±xuish‚¦H½+ƒ†uŒ²*ismŒ²0s²Ī į Œ²TdŒ²Zs‚N‚ū6‚ŹF ‚ŠA‚«Œ² edŒ²yanceŒ³ingŒ³ yŒ²sunceŒ³/oŒ²_ihilateŒ²Neņ;‰Æ"Œ³ntherŒ³hdyne†—-WW„×Xƒµ6 yŒ“WWedŒ“ingŸ:®CøY„…%Œ“?mianismŒ“Eusæ[ģ]Œ“feŒ“lityŒ“qquŒ“KnoŒ“9doteó^ ŒµiŒ“3honyŒµ(sŽA‚ėEŒµRousŒµLety„ĮŠõ:ˆ’FFŠõ*…üItŒµ|FFthingŒµpbodyŒ¶whereŒµvoneˆČ i—Œ±‘g‘hdŒ¶tyŒ“ yswerŒ³F nŒ³toŒ±} gŒµ- tŒ²6imalŒ°MaŒµXxiŒ°tcŒ±)ew§G‚žc‚ĘO©t÷]ż%Œ·IizeŒ·OyŒ·CloŒ·TogĮ~ķŒøly‚낵(Œøsƒ£Z„† Œø)sƒ™CŌ_Õ1¼,Œø=edŒø/ anceŒøCingŒøHsÆ#"ŒøMrŒølŒøysedõgŒ¹s$Œø" aŒ¹"titeūū;Œ¹EdŒ¹Kse­IžhŒ¹fsŅxŪw Œ¹leŒ¹zicableŒ¹QauŒ¹y‚†u„”Tƒā$Œŗ4eŒŗ:ionģbŒŗ@ciatŒŗVhensionč6Œŗxing‚€n‚†e‚źŒ»eŒ» alŒ»inglyŒ»vŒŗ}achŒŗ[eŒ»>oBŒ¹.$ eŒ»T rŒŗ lŒøarentŒŗ.ointment‚Ė=ƒņ~LŒ»hB%pŒ·jolŒ·7esŒ·1artmentŒ·=horismsŒ¼ricotŒ¼%t[®7Œ¼ianŒ¼yesquesšZŒ½bŒ½ gon‚¦ ‡%‚źŒ½BsÄ4›‚ąyŠ`Œ½balŒ½he× Œ¾ veŒ½ntecturó<ń Œ¾"sāaŒ¾iŒ¾(wayŒ½VaismsŒ½\bishopŒ¾5 hŒ½Hadeķ.‚¶CŒ¾{tŗuŒæenŒæourˆŽƒƒƒöQĪ*‚—=‚ł]Œæ?cyŒæEticŒæKtocraŒæ:eÓ-‚œK ƒŚW#ŒĄ sŒæzour¶v‚‚gŒĄ$undŒĄmaticž*æpƒŽ8ŒĄJsÕŒĄDdŒĄPmentĖUŒĄ^ngeŒĄwy‚„c¹ŒĮedŒĮing‚²(ļtŒĮ5d‚eƒ®yŒĮHsŒĄ|aŒĮ;iveŒĮestŒĮNowč‚Œ+ƒ±kŒĀulateŒĀ lesÄXłxŒĀ0ityćƒųlŒĀFally„ƉśL-ŒĀKicŒĀ\s4ŒĀb-stŒĀ6ficialŒĀcÖ ‡üqŒĆ_‰ŌILŒĀy4 iŒĆ!sŒĀemis „sŒæ,ƒƒeŒĆ/L tŒĄ#mŒ¾e cŒĮ\ rŒĄ*oŒædŒ½&aŒæbisŒæ4gueŒ½<bitrary:ĖD¼sŒÄ@ntŒÄFticismÓgŒÄLeŒÄfii„ä‚®8”z ŒÅesŒÅamedŒÅ toné8 …Œ>>‚‰ƒÅgaŒÅ:>>edŒÅ@ingš/ŽF®#ŒÅehodelŒÅkilates‚šv‚™lŒĘrtŒĘnted‚2Ģ`ŒĘ8tŒĘ2ceĄŒĘ>anŒĘSedŽ_”M ŒĘod‚§ŒĒd‚²ü‚ö- ŒĒdŒĒsżŒĒ eŒĒ5ingŒĒ;rŒĒme„\(ŒĒQuŒĘt ociateŒĘYistŒĘe˜t„.ŒČundingŒČrreƒl‚ÕvŒČ@yŒČ:khanŒČoŒČFraˆś> „G…uŒÅFakŒĒf(sŒÅ hŒÅ4 ideŒČ]tŒÄkcŒÅ_leepŒÅqpŒÄ:bestos˜W‚ńG‚ĶXŒÉXeum‚ˆJę&ŁŒÉrsŚy÷łżJŒŹdŒŹ mentŒŹs ŒŹneŒÉxmÕx‚—^ŒŹKedŒŹPment‚˜B‚’uŒŹningŒŹtkŒŹVhåŒĖcŒĖin”^ąxŒĖ8sŒĖ2edƒĀf ŒĖSntionŒĖ>mptīe‚†IŒĖscŒĖytudeåRä@ŗJŒĢsŒĢ ionŒĢedŒĖY eŒĖaŒĢ.ractŒĖiŠģ+„A„iŒĢEtŒŹ6 oŒÉReŒÉ^henaŒÉlmosphereŒÉLalanta„œsŒĶ3eerūlūgŒĶGe_ŒĶLious„LƒÓmŒĶoenceŒĶibleĢk ŒĶuiŒĶQacŒĪleyƒēa‚œ€0‚Ū^ŒĪ?ativeŒĪEyŠƒ ŒĪKitˆł`ņŒĪr biographyŒĪxmatonsŌb ŒĪchorŒĪ}oŒĻumnˆk+ŒĪ3ntŒĪ dŒĻ$ tŒĪ9straliaŒĶ9ctionŲwčp€ŒŠnueŒŠrted‚¤[ŒŠ eŒĻ}ailableŒŠ&oidƒ©g†Ü4ŒŠPnedЉ#ffjŒŠfffyŒŠVke‚Æ„ū ŗ: ŒŃ ly‚ĒWź){ŒŠljaŒŃ  fulŒŃkwardŒŃeŒŃ"oke²nˆ|ŒŃ\tecsŒŃbur‰“}BĘ@Œ¶=i—?nŒČr„G…u,sŒĆQ„s@rŒŖ)„o(lŒĢl„A„i!tŒ“O‚MbŒÆh‚0#mŒ„=dgŒšuV=cŒ£6LfŒŃ({ wŒ }^4dŒ¼+L0pŒ¦</iŒĻD+uŒ¦##hŒŠ,vŒ”:eonŒŃhzŒ¦`k‚Ņ\ū6‚üyŒÓ>s‚”!ƒ¬EÆYć<†”pdlŒÓWgroundŒÓQedŒÓ]sŒÓcwardsrŒÓhdlkŒÓChelorŒÓ8chanteˆĘƒŽ $+ŒŌ=ly˜y‡µL—4ŒŌRlioniŒŌXsī[ćZŒŌxeŒŌ}ing«7«^ŒÕsesŒÕncŒÕsłV‚Ż.æ² ŒÕOs¶qŽhŒÕ.aŒÕCconyŒÕUlŒÕIdŒÕcmsŒÕiustrade„ŽBśs‚…2‚² ‚Ö"ŒÖ?ciesą^ŒÖEruptŒÖ9erŒÖVkŒÖ3dµ-›LŒ×aricŒ× i‚²ƒŖ&ƒų'Œ×-headed‚ˆ‚ĒzŒ×Fingćiļ3Œ×\sŒ×LainŒ×aeöG‚×t‚¹·wŒŲlŒŲnśjā>‚’B Œ×ogŒ×3eŒŲreŒŲ0sŒ×bŒ×'dŒŲkedŒŲ onetŒŲ6teredÖ=†ž-ƒ¾j#ŒŁlŒŁ s%ŒŁ&#iŒŁedųHēnŒŁTedŒŁYroom„)ķŒŁwenedŒŁ}leŒŁ_hŒŚt«< ƒŒŁ=%sŒŌrcŒŌC$+dŒŲ;rŒÕo lŒŌ^gŒÖpnŒŚtŒÖ-mbooŒŚ.uderikeŲŌŒŪsŒŪedżTƒ–qŽ&ŒŪ4ingŒŪ:s„=Ø|‡£MŒŪXdŒŪ^s½‚gŒŪzs³źē=ŒÜsŒÜrŒÜn„ʁõpƒ›z¶ŒÜ&eŒÜ:ingŒÜ@riceŒÜFsų'§‰łs,-ŒÜ}lyˆĶ"77ĀfŒŻ77yŒŻ,-ifulŒÜweousfŒŻftŒŻ<fuŒŪdrŒÜLtŒŪdŒŪ@mŒÜst„æ$„Ō((FŒŽ((useŒŻ~mež'…Ę[ƒ¢ #ŒŽ's‚ćf'ŒŽ-#eŒŽ;ingnŒŽ FaŒŽA'omŒŽ!kenhamļĀu‚ŽAŒŽideŽKŒŽyroomŒßs†„Kll‚»r‡“5µ¦KŒßHsŒßNleŒßBhovenƒ› xŒß.llnŒß6rŒß<sŒßZt„×_KK„ÉS,,ƒæ*į$Œą(arŒą.ed„™/ …É‚yŒąI ningŒąOs‚©JƒÖ[JŒą",,anŒąUinŒąnunŒą3gƒķ^‚ėcŒįdŒį#s‚æ`‚ž=$$­0)ŒįC$$indŒį)aveŒį=eldŒįIoldˆÜ@??‚ņ‚<õ\„ŠY„äJ16Œā dŒās„Ģ7Œā16eŒā/ing:Œā57vŒāfšHƒ¬P Œā_sÄ]ß[ƒ ‚“ Œā~sŒāsedŒāying‚Ų&Œć ngŒć%wYŒāK:ieŒć+oŒāe lŒāgianöwŽmŒćning‡ł ‚]‚ü-Œäing Œä athŒäfit’"Œä eŒćtdŒćhchesŒä6tłŸ‚éh…(ŒäneleyŒätshire²L‚*†IŒåwickŒäzkŒånalŒå!ylƒĶƒū7 %ŒåQsÉ>†ŲQŒåeial=ŒåW %ideŒåkt”7…—67Œęs‚ģz8Œę67erŒę%ing…ŠMŒę+8tŒęBween‚ƒµyŒęeilderŒę_are‚²Q®>ˆ‰ƒX‹cŒßsxeŒŻHaŒŽWncŒć@YlŒęHMtŒąKKforeŒątJgŒį{??ingŒå{=sŒįO)hŒä;nŒßdŒå'rŒękwŒēyondŒähqueathedŒäbpaintŒē zoarīt‚Ķj‚õ#čzŒčLsԁŠ4Œč`aryŒčeding…‡ž ‚Ÿ(Œé sÅA—v‚śiŒé$dayŒédŒé*thŒérell…ŗ\‚”mŒéZhopŒé`muthƒ•S„Ø@õ}ƒķy» ‚‡ ‚¶ŒźlyŒźnessŒźsŒź"rŒź nƒĢ7 "ŒźDteŒéingŒźsDŒźX "tŒé:rŒčRllŒéfsŒčFdŒčknŒčAbleŒéology¢Ę…Ļ> ŒėDballedŒėJmailedƒ‰:åįB‰ Œė|_‚³ŒģkŒģc“ŽŒģ)phemyŒģ/t‚æ/–QØŒģSingŒģMedŒģYoned/ŒėP ckŒģnŒģ_zŒėvmeŒģ5sŒėpdeńĀ0˜Rį~ŒķDedŒķJingµaŒķOssŒķ8achedŒķ>ndedŒķfwóWļxķoŒīsŒīlyƒß2 Œī$dŒī;kingĄr‚ Ŗ+„Ė8Ŗ$ŒījsŒīdedŒī^dŒīpm‡§$ Ųx Œļ s&‚”‚– ÷i‚ē Œļ;nŒļ5ingŒļAs3ŒļoŒļ! ssomŒļF wŒīXatedŒļ/tted†‡-ż}‚Ōb‚Ę5ƒŲ Œš'esŒš-ing%ŒšeŒš3shŒš!rredŒļf3 oŒķ/aŒšL%uŒīA inŒķleńÓ#Œńdƒż#ƒ˜$ƒ®dŒń3nessĻéfߌńPedŒńUsŒń9dŒńZtŒńJogna‚„UŒņs“Œņ sÆ2‚µ‚ŠŒņ8s Œņ>netŒņdŒņ&eŒņ2ifaceˆĒ; ˆĒO(Œņv s‚øT÷„Œó hŒós+Œņ|(kŒótźcöłuƒ‚kŒóEdŒóKs›į;‚­8‚ēx ŒóreƒĄWŒóPeŒóx nŒó@deredŒófgiaŒólingŒōrowed‰ū’6‚ō}ŒōRing„ų%ŒōXer‚Ŗ"ŒōhhŒōwtleé ‚²dŒõtŒõséFƒćO Œõ2ed‚—c‡‹Lį3ŒõLdonŒõRnemouthŒõ7 ndŒõghŒõWrŒõFquetsƒß‚‡Iē/‚ĻpŒöedŒö#ingŒö)l‚惷 Ś8ńQ…±d$7ŒöV hoodŒö\ishŒöbs ‚Œöh$7yŒó,+oŒō}"tŒō  rŒń-dyŒõs uŒö/wŒöPxŒņL nŒńolŒńarŒōLssÜƒšrź5Œ÷y_Œ÷ken…Ŗ…J†Ž;Œų sŒųless‡¦'ƒ„2„ĆX•v ŒųKonŒųQyŒųEedၬ$ŒųW dŒų?chesŒųuksomeŒųztomeĖg”%ƒŗjŒł4dŒł:st÷P¢õbŒłUedŒłZingųMšŒłxerŒł}lian5Œų&inŒłnŒł`wlŒųcŒł.ssŒł@veŒśziŒ÷sbantioĻx¹VēB‚Ē^ƒ€NćT ŒśsfastŒśyingŒśs遹)Œū(ed‚ˆEžF‚®[ ŒūBingŒū<ed"ŒūH thŒū kŒū-stŒśhchŒśmd‚›MĪ`ƒ“G%Œūa" aŒüdŒüedŒüvity‚ĢFö[ŒüJdustŒüPfields„ś Łj‚ށČ[ƒ³C Œü}erŒżlyŒż ness=‚Ć‚ŃŒż8lyŒż>tŒż2cy„Ÿaƒ¢Z…’IŒżhsŒżbingŌŒżngŒžk‚«|‚»T;Œž nŒż ghtŒž&tishŒżMllianŒüUckŒüqdeŒüwefŒž stolÕr‚ČŒžs§[ØŒ’iesŒ’yƒ÷3 „Į ƒ–{ Œ’5 nŒ’;rÕmƒŽŒ’Ws‚rƒŗ†/Œ’kedŒ’qs„“r„“{ €sž=„§i€(t€"amįL„Č- €Cing‚ €H n€XsdŒ’A ke€.ugh€ ther€^ wŒ’wodŒ’cadeŒ’]nzeŒ’iderė‚„SŚeƒĪeVsPdóc‘]\epinguworkü ‚ńs ‚"e‚al‚( t{shEiseJno‚ €rdoŒž,;iŒś5aŒü"%e‚= u‚Ņƒsų1ŹxĖ?‚÷Kƒ6iedśƒ<lƒ0kyƒJwarkĻ`‚ć1“‡£9 ƒ{ed‚ą3 „ en„on‚Ī"ƒŒ‚é~‚­bƒ1V „Dng„Jshedõ0ģ{ƒĮ„P i„>ed„hs„ntƒ«e/„sn„ d„2ied„,gundy…ying„8lington‚”m‚ō'„Ž…crangers…iy‚ń&‚ˆƒĻ † iness…oh†tled†yƒßfƒ˜vī†Nies†Ty‚õ9 †oon†Yerflˆ“rƒƒ†u t†Hlerąw÷I‡'ingƒš‡;ed ƒp‡ ƒƒt… /r† sƒOl‡Azzƒ*ilt‡,yƒbbleƒonchƒ$dƒuonarottiƒĖ-‹‘%r‚ˆ<e×1šGŒēƒX‹cte‡Nƒp-uŒŚ4ƒBa‚e‚ brˆBr‚yŒ÷ ‚;oŒšl1lŒźyDių3‚ˆ ‚ļf‰&an‰,en‚‹żv‰!inet‰2m‰HsĆY¹[œ‰ulestis_‰{sar‚Ÿ/ĒFļy‚¼PŠ)sӍŠ<dˆŖ{œtŠMbanŠSgula‚üJ‚±jģ@÷VŠ~nessƒķO„v>Šred‹sŠxing‹ousä;óc‹Fly”HL‹>l‹KmŠYiŠAculate‹Zumnies…^ŠH‡»~cdŒes®T‡4‹w§Œ=bellŒ7anileŒ"cdeŒCpŒbridgeŒ1illus‚ę8‘TshadesƒŃ0le'our„„–## [¦pPnsVpy„Š^‰² cJ##notrvas-d\oDe…éDü'Ž,bleŽ2city‚„>ƒÖKƒ˜3‚ūCŽ\eŽbiousŽhc‚“=ķ  ainure‚Æ{‚¶riŽVitalŽ7aŽPet0ulet±  léŹTsyinalƒų\”[‚„•{)lyź ŸSį/Csed„†:/fuldIs#er>lessness‚ībłr‘ington‘o‘ton‚偝B‘El‘Ktionsœo‚Ļ‚ŠQ‚’  ‘{ed‘uagežqĖ’ing’ i’y‚Ł<ņ œźMņEše’Her’Nhage’Tridges’Ys‚ć&§L RYe’.r’_td‘opetsbuncles‘"l“ved‘Qna‘ioused’Bs“yatides‚Ė„‰o ”sčó‚Ła”-eųz” e”2t”'hmere”@ualƒ“{‡Ø”oing„”@Øŗ[• erine•olicó  ”uch•h•egoryƒŲ; †ūKĀ  •Zd•T ght•` se‚Õ:„3–man„exc nŒ`m“R#r‹`Ll6 p”Es•nu•2 t‰Nb– ve‰odenceŠeŠgedŠ.keŠ#iro‚¦ Łc —% d„*®‚Ģ]—Eing—?anĢyįVø'—hs—ml—bebrated¹˜sĶ`˜'ure˜eršK‡‹ģ2ˆ«&˜Vy˜Pies„Ž˜\ur˜Jre˜Daurs˜rt˜-s®†Ē>%%ē ƒł=™/%%ly™5ty?™;=tain™)emonyt™S?r™ n—+ ase—{l—Kil—9darĖ`ōOš's‚ĶFƒ—U!š:s$š@!rš-n¹5Ų}ģQšbicešhkšnlenge‚łMĄM›sžR‚³ ›)_·›/gne›=k‚†$›Ca›Yion ›ber›_pƒ³ Öœ eœing‚£Pƒģ+œ-dĀ5/œ3+eœAing?œG/gœcƒ±dżV…ü›}‡Ņs‚ņ>"terœwmanœ|sƒ¼Ä 8stic>zes„–_‚„ Di]sō’^Łw ~s©oƒæAĖ5‚ėžablež"yžiesž(tžot¬ †ƒŸQ ‚õˆŪf,0žply‹@ƒóUžv,0ingžj edŸsždant_ŠCxŸ Umcacterž gežIiž^lesycoalŸ7pentierƒé"›)  d‚Šq­)£l  e #te ing )ubles„„>ņĮ[  Zed `ing‚Č"  f ter ‚#Ÿ=xrœ]?nšN$i"p›u m  t / sšslœqosšŹYÕb”csƒ”~ƒ×q ā-‚įr”{ s”ued¢y€pę/¢%s…C¢9ry¢?st¢+calē‚ź0¢hs¢cbook‚÷ ņ£oot£ riesÉyž„%:£0nut£6s£<t£*s*¢ek£Ts¢Lmi”hck¢nque£r”]ated‚Ł ‹G‚§7‚ś¤8ly¤2estÉX„ԁŚo‚°?‚°c¤iren¤]ish¤Whood¤clike“…„i©&¤od„%l„e„+pericåfļV„_ney„Yeƒ„¦'„{a¦eseƒéw„ÉN¦ingƒ©^4„1l¤>ef¦n„em¦3selled¦#rrup¤,cago‹[„•hō-&§ ed§ingä6„–m§0sµ‚ńB§Cinā~ƒ²[§Xs‚—{‚īi§kn§ice§5ose§Ip§qse§colate§k§]rdī‚ó&ØFedØKingÕ(¹< ØhianØQen‰B±9­© beryl©lites Øn ist©yso©omatique‚Łt©\led¢ą…¾c©pill©vyard ©{rch©bckƒ1”‚#Aa¦94i£h*e§ o©5 rŖ uš ‡²xƒźYŖis‚²?ŖoetteŖ}s‚ƒV‚¼ ‡’3« e«&ing”<*œ*«Blated«Hmstance«Ns«,l«Tuæ8Š/®¬y¬izen¬ron“H¬As„Į¬Sed¬Gation¬Yiz/«gar«zrc¬ t¬rvil«nnamonŖcboß)‚„&‚„s‚­Ced­Is‘‡‰J€f­led­rs­xp­fmy‚›g‚¾ƒē ®(es ®. s®"ped‚‹†Słb®= s­Oim® m®_y­>d®Stter®YwsßBßL”FÆ%edÆ*seķ'ƒ±H ÆGly ÆM rÆ/n„Iƒž-ōl‚‰JÆ|ed°ing°‚˜°icalis°%ks‚ģK Æ\ a°E ver°nchÆpft°+rÆvmatisńFģGĆ`±ck± max±ng‚ƒ!ƒĒ‚Ģ÷‚’ Ł“„£u±O d±[r±Uly†ć#±ae²ingƒ‚ƒæ/²sæd©+ ²"e²0sŽI ²6 h²LtedĆ*„—H‚Ž3²ns²hlessł"²td³ ston‚ĢT²#s±>ck²R t³u±8ak±Ddion±Jgged³)visĮTƒÕ=³}sń.é2‚›[“p“syõ.‚ƒ„Ė1‚€g“Aing“Gs“;ed’ÓR“led“qing$“b“Mster“wtch“e“!m“6ng3³/Toµ$u°Ke®da±ißōu…Ļ}µzing‚ ‚“ž6„Į1¶s&¶!t¶ rseµlµuchman¶stŠ ŠDž^Ū‚øF¶ys”r„X·s· ers·n¶lė9ƒˆNńeƒķ&·Fly·Aer·LnessÆ^žt·usµé' øionø ed‚łø ect·{arø,ieries‚™xŖ‡§<īƒ“%ƒłƒī>øbedøssømlessøhing@øy>urøVniesø\sseumh¹%@o·Rdø2læB‚¹Ž7¹kian¹qy˜j†õ{ŗyŗ iness„’" ƒÉ4{ ŗ1 sŗl¹wdĻQ‚Õ5ŗVableŗ\ing„ÅCفˆW»rcialƒ ‚ŌQšn»ed»$ing‚Ć# »)t»s…!÷d‚Ę*‚Ü.ƒŸ#»aplace»gs»Vest»\ly‚ačW¼e¼ ionsŗV¼&cat¼=on+»mon»@ it¼Cuni»e½„Ī$ ½s‚•S½ ion½y‚©,†#½2d½8s½n½>reļ&Öh‚˜Rƒ»tų½wly‡ēV½}te¾ xÖƒ­(‚“; ¾,s¾2 ment¾'anceŁVÖ ¾Zing(¾e¾@i¾_ y½qainŌ žæessedæomisedĶrŠNæ;sC¾n( l½Raæ@uterær½gelled½lilation‚ŗ7{ eæMCp¼Z+mŗ{ing¹ebineŗbfortę\‚ģDŅ‰ÕYĄLedĄRingĄXs Gńd¼_ĮdøŹJĮionÕQ‚€<Į-ingéĮ2nĮBtsĄ^alĮHrĮptĮ ntrateĄive‡Į] eĀordeø ŗpĀ/sćn¾ ĀCorĀ5itionĀHuct¹Ćo‚½] ĀqalsĀws‚ŚĀ} ion‚²}Ė&Ö0Ć0edĆ+ationĆ6rmĆ%ded„ź,ĆessĆOiĆfusedƒ”j†÷IÄsŻyÄectureÄ%ugal‚‰(Õ6ÄGedÄMion°ÄSectÄjoisseursÆo„µ) ‚ŃS„¾sÅness'ÅousÅ ence‚±Ł=…±3ÅOsĻ_„”_ÅhlyÅcial ÅntÅUceš!Ę quenĘrvatoryÅInted‚ŽsĢTĘGeĘMy‚ ]‚œ ĘgeĘmionĘSblĘstƒö&„‹~„Šq‚ĪHĒ aĒedĒ$ingĒ*sž-‚½pÓ~Ē^cyĒdtĒYdĒjnˆ“fĒeČsĒ0 derČstŻ^ŽČDs‚‡qŻoÖuČXdČ^s ČdeČJation”wČz lÉrted‚²mß.ÕiÉ5bleÉ:nt¾8ą|ÉVedų\‚¬,‚»mÉjeÉomateÉuptionÉ\ltÉ{maÅ0'ciČ-iĘeÉoŹuÉ?taÉ/piracy“T‚¢Ō'’$Ź|edĖing ĖinŹvct‚Ö+‚ą[‚„qĖBtĖ6lationĖ<orary‚˜8Ļgƒ£,ĖmedĖss ĖHmpĖynt»B„Ī5  Ģ, d Ģ2 eĢ&anceˆa‚—/⁆‚bƒĮFĢ[ctĢrstĢadictĢfltoĢlryĢWŁ1 ĢxaĶ,ibutionsĶ1ol4Ė aĢ eĢ> inuĶ7 rĢUour” ĻĪ ionƒēO‚Ü)Ī!ationĪ'ingįķ9ŌĪGedĪLs Ī-sĪQtų"‡”Ī{edĪg rĻyĪntėƒ™rĻ eĻ-incedĻ2olvulusĻ8ulsively iŹ3a3sĶ[4tĀcĆl fĻ>vÄpnĀWdÄ  gratulateÄ+jÅ queroržh‚ßcŠUeryŠZsƒ«X‚”7ŠvlŠ`kŠ|ped¤s¾rĀ@ Ń,sŃ&dĆŪlÜZŠ a!ŃQrightŃLing4ŃV!yŃ2 ieŃFperŃ eõgųŅeliaŅs’g‚¹PüGŅAedŅGsÆ(ķP‡µlŅhsŅnrŅblian‚¼qŅ|eÓucopias­wĘÓ3ationÓ9er£9Ķ&ÓXlsÓ^tionĪPÓ{eŌsÓcora„ށŠ}Ō#ctlyŌ) spondenceœHł Īe ˆŽ ŌY ionŌ_uptŌ/eŌNidorŌT oborative²B8ÓnŌorŌ pŅ$dÓ?onŅMkŅ;esÕ tes‚Č=Ńƒ‚ ŠčY ÕzumeÕtsÖ tÕn mopolitanąf†ƒˆwÖ9es„‡‡©  ÖNn·;‚kņTÖjsÖdpart‚ł‡×es×ngÕnīe‚÷(×/men×4y×*ies¢D×DrÖper×i×Zy‚—ƒæ…ĖH44ča‚ĶqŲlyņk„=ŲeousŲ,s@Ų44seŲ ageŲ2tķoÖT  ldŲK@r×` ntÖ?chŲpleŲjsinņf„ž5 Ė}ĻƒƒsĒAŁ3 edŁ9ingŁ?letŁEsŁKrŁ-nt„µˆĄ‚;mŲoouĻsi n¹IhlÕ&8rŃr4p¶/&aŁvveÖs¶mffeeŃo·-iŚ wardice¶bbwebs¶hdes¶sgnizanceÖ4tton‚¹{‡ü1ß8ńLų$‚ҁ„Z†DŪXedŪ^ing ŪdwlŪBftŪ<ckedŪHshŪMtesŪSvingG‚Ģmņvƒ±YŅƒ÷ ÜMdÜSsŽƒØ ÜtonÜong‰śH‚ļ…©u ŻsŻ ureÜY eÜz iŻor"Ż* tÜBmÜ<kedÜHse„“6ø}ƒš"‚?Čg ŽingŽ sŽ pŻ~d‚­ §|‚ȍŽBsć_ŽHcentŽVtHŻQ" aŽ<ptŽ(eŻxditŽ[s„į(__“bß!__dß's‚“F‚č ßAsūb¤fßG eßZsonßUinalćK„¶hƒŃ7ą pąisĶYˆś‡ä‰Šą2są'alą,ism~ß-beß`mą8ticąsąnkled†NŖį odilesįus‚ŸR‚ ą\ßiį=dįBs‚ƒ?įHeō&µ}įjedįpingž‚ŽMā edÓČr ādā"nedā( wįvuchį\ssįcį1okedį7p‚©'£`āzblećfixion‚éIąć!lyŚ!ķx ƒ± ć< tyć6lyĘc‚µ\|„Ät ć`edćfing)ćB elćl shć'dećcićZmpledė(¤ć& ä9ingä>stals‚$ąY~iŽrHeä) uā@oäD yŪ} a€Ž2ådˆŪPåz‚Žhå/då4ureå)ivatedåBtåminate›x‚jåvly‚¼vƒ„Bƒ€ę idsęs“qš7ƒ«ę5d‚Ā! „©M †ŻX0;ęO lyHęU0;usęI sity†‡ƒŖ ä’M ę|edēsēy¢ Ūē3dóē9eēEingƒ‰m‡œX‚½ ēgsēaedƒŅcƒłV č sčd‚\ č eč$ingƒÉ ędHioēm tainč* vē lę;eē-rentēKsč@zonę/ateēƒŒ éedé$s‡³ é?tomé*hion‚čL ³u-čFrępé^ tå]léEså|nningédzco²b±(ūE„ćRś{ź:alź@ismÜ3źFnicź. lindricalź4mophaneź^ril×$ –iŚˆ‚Eo–„evaŖ-ƒ1hä`‚$UrµH3Kléj--u™nte¬/iźdy¦F‚ŒMżŗE©Iš ģesģlyƒė-ģ)yģi„Ü`„ĢuƒĀGģIyģCiesģ/ntģOsģly£O¹yķsšNķ maticķyŠUŠĻKķ;sķ6d§j ķ@geķUskš]’ķ[ aķvpķqnedĘ$ƒ–Aśeī dō6 ī&eī4ing‚öVæ‚‘īUismī[yīOies‚Óu ‚‘ ļ ous‘æ3ļ gerī9 cīkdļkībyļtełfķp„’ ļ[dļanž‚Šlļ|edšingņYƒ¤? šnessšenó>ńU‚õ šImooršDed+š% kļf ešOtš?lingtonYāƒ—GńedńingŠo„ēQŠ‚}ń:sń@eń5a‚žm‚ń5ńhsńmghterńbbedõC‚·J ņed„‚[„‡%Miņ*sācsņ0Miyšg+ rļ# nģg iķ|mņ wnń{uńNtķlńshėvggerņ>zedėpccaė|hlia¼nęWļ>óQyóKier‚³-)/óVlóEensņ‚§.„ü ō tōingsÓ^„¦oō.stō(rĮt†€mIMō4eōIlyģ‚ē0 !ōflike,ōOIMról)/dōk !thō lšd”Tū‚”õ"aucheryõ(onairõ.rettõ3tsĀ Åp‚£Gõwd‚“ õ}eö ing‚ųk‚Ārö+tö%cy„ųi öivö1nõqasedöFptionŚ`‚„xöxdłż#÷d÷re÷ imed‚²3÷<d÷$a÷Bineļ ƒóR‚Ćv÷jon÷pve÷vi÷ded½~öL eų orat÷Nlö~ideõkayų!riedĢRßjƒ‘dįoƒ¾# ųnenedųtly®2ųy pųidłr‚’nƒ¢j…“[ł5edł;sŠ\ū?ŃE ł]słXive‚˜Iłb ctłAatłynd”ń@ś$dƒ‡ ƒ’ī$ś6dś<s‚¦ƒ†eśWsśBeś]itionśknś*leśanceƒ“ łeū iū#ormedƒ›\’t•\‚¦5ūUdūOationū[e»qüs ūiadüee ü rūIenerate–b΁¦aƒvƒ®1Ąc‡¶4 ü`ly üf teüZcyĢ…®Bø"‚Į(żfulż edżing4ż(ghtüu caüTberation8ż@4 iüCayüIetionsüNhi’*ž~„‘/®žacyž"itus‚¤KžAtrated‚Šž(cržGnsžXralizingž^ožandžeanourƒŗ@łEœ4’,d’2s”|’&al’8e“{’Rõ[’Li’cs’iyøēŽ€ ceŽ€tƒŻ6įQŽ€,sŽ€enˆ!‚ÆYƒwŽ€TingŽ€NesÆŽ€ZessŽ€qivedķ‚«ށsŽ€2endŽ€wrށthŽ€HoseŁM‚ü4ށRdށMativeށXe‚ą`æ.„”W ށ|dŽ‚sƒ“<Ž‚ beŽ‚ptionÜkŚR½$ƒ1Ž‚ItŽ‚OveŽ‚UrŽ‚Ccration‚ÉcŠ*ŽƒedŹjˆ“‚Ö: ŽƒdŽƒsŽƒ% reŽƒ gn‚‡l‚ŠHåŃŽƒ]seŽƒbteŽƒWairŽƒgi„”dņŽ„edŽ„yZ…ČQƒOŽ„3edŽ„9sŽ„?royŽ„inÖLŽƒ;iŽ„VtŽ‚$criŽƒ}pŽ‚jeŽ‚=demonaŽƒQolateŌ,„ė4Ž…;sŽ…AilŽ…6ch‚Ś2‚Įo  Ž…j dƒ‚‚‹_„’HކedŽ…|ableކingŽ…p rmineކstŽ…dcted”ކ0eŽ…NaކTrimentˆ ‚­Eƒæ|އmentއed‚óo އ lopއ%reux§V‚ĖxއDsOއXlއJceƒŌś-އsedއyion‚‹ އtŽˆuringއ+ eŽˆ oއ^iކ{antźEŌ"„ō|,aŽ„mLsżf8 lų'cŽˆ4vކZ tū)f’onށ$ płeü) g’ mށdrivõ9bŽˆZwųdductibleś«x‚æ4މws¤’7²G މ}mondŽŠryމqlogueŽŠ perŽŠzšvŽŠYtateŽŠSe…Ša„ŌhcxŽŠvn‚š{Ī+„“S#Ž‹ dŽ‹s„–x„ƒ:…–kŽ‹2lyŽ‹8tŽ‹,ceƒÅ‚ŽlŽ‹\yŽ‹GerenŽ‹bicultŽcƒęŽŒnityŽŒ gingƒ³8m‡) ŽŒ1lyŽŒ7med‚Į‚«0„öh ŽŒVdŽŒ\s‚¼(‚ā:Ą‚ęWŽs+Ž nerŽŒb eŽŒ~ingŽŒxgy‚ūW‚ŽęŽGedŽMingŽRpŽAlomatic‚émŅG‚‰r‚Ł5ŽŽs‚‰kŽŽionŽŽ lyŽŽorŽŽness‡ä†üQš.äJŽŽZanceŽŽ`edŽŽes‚Ę_Ń{‚‰wż/ Ž edŽmentŽing‚†NŽ ointŽŽjearŽ?roveļ ŽE ppŽŽTgreeŽirm°Ļ Š)ސsސerƒ¦`ސ'aimސ4osedƒĀ6ŃrސSentސYinueüQµ2‚Øސwantސ}sƒä6Ž ®j‚x‚ÓjŽ‘edŽ‘-yŽ‘!ingŽ‘'sŽ‘3verŽ‘rdސ^ntä{ bŽ‘|ngŽ’on„‰HŽ’i*Ž‘\ oސ:lŽ’ussސiplinaów·|Ž’\d‚Ļ}Ž’baseŽ’nngagedƒ*ķÕŽ“lyKŽ“dŽ“ful‚¶<9” Ž“AdŽ“Gs‘gŽ“MiseŽ“cst Ž“)raceŽ“iuƒƒĮOŽ”esŽ”onourēgŌx„ĢŽ”Asžˆ«Ž”UdńzõVŽ”hbedienceŽ”mrdered‚ś_©NÖDŌ"Ž•ingŽ•edŽ•#layŽ•atches…’}„„!‚{Ž•\atisfiedŽ•bectingœ‡‡‹(Ž–ceŽ–t Ž–nŽ–ff·Q…™.‹'Ž–JionŽ–Pness‚ź Ž–VctŽ–oguishing Ž–u nŽ–Dlling„"‚×$Ž—/ingÕÜ Ž—CdŪ[Ų~ Ž—UngŽ—ZonĻnŽ—_ iŽ—H eŽ—uorĘŽ—zbutŽ˜ct¢ Ž˜iŽ—5essŽ˜4usted2Ž˜: rŽ— iŽ–/ aŽ—)ortedīj Ž˜\2tŽ’+*cŽn aŽ” gŽ•;pŽ”ZlikeŽ”GkŽ’teŽ”#hŽ”roŽ’VdainŽ•hsŽ”<illusionŽ•VquietŽ™used‡µ`‡ķŽš!sity¤CeŽš6edŽš<ing×ećnƒ¤ ŽšYlyŽš_stüBŽšeeŽš}ity Ž›nŽšBd„FŽ› iŽšanŽš'erŽ›-orce ƒLŽ™  csŽŠ|cxdŽ+nŽ‹#eŽ‹pffŽŒ= mŽ›3 vŽŽ'rectŽŠ aŽipŽŒgŽŠ_cĄA™nøJŽœLorŽœRrinesŽœXtŽœFks„šO ‡Ū=#/Ž nļ:‚ŒA‚S‚÷!…˜5 Ž,sŽeŽ gedlyŽ&ma„÷+²8÷B£JŽcefulŽilŽophinsŻ;ß$‰Žžtics‚‘õzņƒģI Žž9dŽž?sŽžD teŽž3ntœMŽžZnaŽžptianŽžviŽžainŽž"esŅOŅŽŸ2sŽŸ7ionŽŸ-e†Īx33Ė …ŗc~‚FŽŸY33eŽŸCatŽŸ_orsššsŽ tepƒ–c‡¹$CKŽ  sŽ way‹˜#ƒ%ƒ%ųBŠŽ ChŽ Ited‚¶,¬Ž etƒņO Ž y tŽ kle„Ą‚ŻnÕXŻ9‚‹7ģ)‰t…ĘnenŽ”+stairsŽ” loadingŽ”%rightŽ”1wardsŽ”6yrŽ”ly¼Z„Œƒ­†ŻA Ž„fsŽ„8edŽ„JiŽ„lyŽ„`less‚–WŽ„8dŽ„r mަ$ryź@‚„ ‚Ł{ ަM dަSs‚Æe–ƒ‚+'ަY eަmingަsmakerƒŖ-ަ*W aަy'ssާwަGnched„—4ƒ«Jƒ„jƒ¬rާSingާYsß`‚Ńoާ|ingާwedŽØp¢~š:övŽØ-s‚ĒFŽØ3rŽØ'n½:ŽØ@eŽØVingņ/!ŽØ\vާ_nkŽØpާMftingŽØrzzling‚‹‚Ŗ•NŽ©3ed‚Š`‚’< Ž©Hped‚¹d ‚ČRéMŽ©pyŽ©jilyŽ©vsŽ©dnŽ©^ veŽ©N pŽ©9opŽŖ wŽ©-ning‚ˆ‹årŽŖWgedŽŖ]s‚— ¶²]ŽŖymedŽŖsó„ŪŽ«ardsŽ«#enness Ž«)nkŽ«mŽŖcgŽŖQdge‚䃉MŽ«nadlikeÅF‚ާ#eޤT*aŽØw!iŽŖ  oŽ«G uŽ«tyŖj‚ąo‚į,-ެEes.ެK,-hessެ?al•‚ņƒŌ6ƒŌtެ~s‚Ķ_ Ž­tެxl5„ö ō,¼dƒĘR Ž­4edŽ­9s‚»?‚ų ķ[‡}ƒ–R Ž­hyŽ­n tŽ­bky–Lƒæ\ƒæOŽ®yŽ®chŽ®iesū# yެZ.cŽ­|sŽ­? llŽ­\ ringŽ­ eŽ­. keŽ®#tŽ­VmbެrdleyŽ­(g‚äPŽÆ arfsŽÆ&elt‚“[˜aŽÆKingŽÆEed™5–OŽ¢I‰s8oŽˆ`„DeŽ›\ƒL!iެ‚QrņDsDaŽ®ByuŽÆQyŽÆ,w„õK))żŹ@‚ö[ ƒā‚;“(‚īuްZen„w (ްH lyް`thްTsްNnestްBed‡‰@‚˜~ޱ#l‚µ ‚Ąqƒä'ޱ=ward’ ޱ7ilyޱCtޱ)eޱTy)ńwޱing‰nް7))chްo (rޱYs޲tް=gerly޲u„ŁfŒ€A ޲Zs޲_ ok޲Tny„4‚ó2ƒĄL ޳ edĆt‚·]޳$y޳ies޳ ho޳*stas޳ clesiasticalŸIĒ(„P޳qs޳kdū ƒ÷$Ų6 Ž“s Ž“ ionŽ“ ed‚ŁƒņŽ“=dĶ+‚Ł0Ž“QalŽ“CeŽ“Vion«-Ž“& itŽ“eucat޳wgeŽ“{wardļIāR‡–b ޵-ive޵2s‚„!™U޵Ocacy޵UgyŠy‚|޵ss޵7 ect޵xort޵[i‚ńN‚…y‚…~Żc޶2m޶8ts B޶>tis޶,sÅ ޶So޶&ad޶kyptianž1…±Q Ž·th—{…¹n‚Ą( Ž· eenŽ·(hŽ·.yĢy†„1Ž·YtherŽ·4 ghtŽ·Tn‚Ė‚§ Žølyœ†³ Žø borateŽøgabalusŽøpseŽø!sticŖy„§L‚ N Žøalyį. Žøg rŽøvstĻ3Ś-޹allyˆŠ/ ޹ronic¾?ßnƒn޹=s †ˆ'‚Č޹]ing޹Wed—a ޹z en޹cat7޹% ctŽŗv޹Cment޹7 gantiarum_޹QphantisūŸXŽŗZzabethŽŗUgibleųeƒę&Ž»quentŽŗ}cution„“ sŽŗ7 eŽ»&seŽø'aŽø{ deŽŗ`iŽ» oŽø[bowĖ}Ż(ÆjŠVŽ»lilŽ»qncipatedŽ»wthiaŽ»}uxü‚ū1޼3lmed޼8ssy£Tė޼Wsč Ŗ` ޼k ed޼qies޼w roider޼>a޼]lem°3™+޽1s­ ޽7ld޽Eultsé-޽Ka޽cgedīj‚Õkƒč{…é3޾ s޾al¬XŃ޾,s‚¼ ޾=ty޾1loyee޾&eror=޾otion޽b޾C p޽her޼a޽~igrated‚ų{§›sŽæ,ledŽæ2sŚŽæNouredŽæ8elŽæTmŽæ&bledŠ‚„PŽĄreŽĄ urage‚ĪaŽĄoŽĄ) yclopaedias‚©<„™é…Ź÷ƒńkŽĄisŽĄdd¼8ŽĄoeŽĮingƒćh+ŽĄSingŽĮ urŽĄMedŽĄ^sŽĄYless„–T™NŽĮTiesŽĮZy»=ŽĮ`mŽĮvrgyˆ\‚¢8ƒ‚x ŽĀdŽĀment…īO„Œ‰ūBŽĀAman!ŽĀGishŽĀ;and,ŽĀW!lŽĀ$ age×1„™œC‚æ;ƒÓ1ŽĆughŽĆrmous‚Š(ŽĆ=d„Žp‚ĶOŽĆOconcedŽĆUlaveŽĆ[uringƒŚ¢IŽÄing•7!ŽÄedŽÄtain‚©e‚ęß_‚gŽÄ<edŽÄBingŽÄHsū ŽÄNrallŽÄousiastic„œ:żEŽÅly‚śrćŽÅ'dŽÅ-s×kŽÅ2leŽÅFyŽÅreŽÅKt‚æYƒ€EŽÅ{eatŽÅuanceIŽÄ"!erŽÅ`iŽÄuhŽĘrņJė#ŽĘEouslyŽĘJronment°ŽĘ?elopeŽĘOiŽĘmyWŽĘItŽĀo,gŽĮ+ dŽĆ#oŽæmaŽĮ|eŽĘsvŽĄ/cŽĆ`sŽĆCrageŽĀflentŽĆjoyŽĆ mityŽĆnuićDŽČsškŽČ(ledŠ;ŽČ<ipmentŽČ.al„†"é{ų=ŽČactżtž(€aņ#‚ÜŽÉsŽÉ orŽČand‚ß ŽÉ/ skineŽÉrŽČfeŽČ[asŽČulynneŽČznest‡oƒę„“ ŽÉ{dŽŹ peŽÉulierżJŽŹaŽŹ'ortedŌiŽŹEly‚žŽŹKecialŽŹXialˆ+ 1»ŽĖtialŽŹ~ce– ™0·ŽĖ"ablishedŽĖ(eŽĖ.imate ŽŹ-cŽŹ^pŽĖ senŽĖ4tŽŹxquifŠ9ŚWŽmŽĢalŽĢityˆ† ćiŽĢ5alŽĢ;sƒ¼ŠMŽĢernŽĢAhicŽĢVonŽĢ chingŖF‚•{ŽĶstonŽĶ ropeŃg„Į^ŽĶ1sƒ·~ˆ‘3QŽĶ7ingŽĶEts„5 ˆƒ6FF„˜ ; ŽĶjFFthingŽĶd bodyˆ„\NYŽĶp; y‚ėS‚-ŽĪNYrŽĶK3QnÅOĒŽĪ6ceŽĪ<tóŽĪWlŽĪBden‚EŽĪ‚-eŽĪ]i„œzŽĻ ly‚ˆi…ČXŽĻ"ionŽĻed‚ōO‚ōTŽĻ?s„Ģ` Į ŽĻS d‚ÆTŽĻY eŽĻEationŽĻgingŽĻmminŽĻctŽĻ(ggeratÖ>č'‚ŪcŽŠ9lyƒĀ_…¾pŽŠMion‚ėLŽŠcively"ŽŠSptŽŠ>llentŽŠissŽŠ3edīM‚­Y†ł;ŽŃ)dŽŃ/ment„’\‘nŽŃLimedŽŃRmationĻä ŽŃtonŽŃyvelyŽŃXaŽŃ~usi‚u‡Ū)ŽŅ,s‚łŽŅ2eŽŅ@ingJŽŠy"eŽŅlŽŅFusŽŃ5iteŽŃ$hangeĖnĶ‚Ś[ƒęl ŽÓd ŽÓ rciseŽÓmptŽÓcutive‚Śk‚ģsŽÓTedŽÓZsŅ!ŌK…Śg ŽÓ{ionŽÓuedŽŌ ibitŽÓ`aust†nƒ†Dƒńr‚Ŗo ŽŌ@nceŽŌ:dĶh ŽŌF eŽŌ^sŽŌc stŽŌ4leæk„ĪP‚ĮŃvŽÕedŽÕation¶L‚ÖŽÕ@itureŠ‚Č'ŽÕVs‚²ZŽÕ[eŽÕiiveŽÕosŽÕFdąa‚¤ ƒÆŽÖsŽÖd‚¤9‚£-„u·g ŽÖ@ingŽÖFsŽÖ:alŽÖ$enceŽÖL ment)ŽÖmriŽÖnŽÕctŽÕ:l‚Ž?„œc…ŠJŽ×-edŽ×3sƒ¤tŽ×9inŽ×Pnationś8Ž×VaŽ×posionsÓ'‚Ī-ŽŲrtingŽŲund‚‡[„Š+ŽŲ3dŽŲ9sÄ*…ŹlŽŲSsˆ„D$ŽŲYionŽŲ?efŽ×)eŽŲg$ressŽ×ulŽŲo’eæ „¶ŽŁ&lyŽŁ+sƒÖ‚§mŽŁNtŽŁHding„ø=ŽŁTnŽŁkrnal‚󇆎ŚyŽŚilyŃ)õŽŚordinarŽŚ*vagantƒ† 'ŽŚ0aŽŚP emely,ŽŚV'rŽŁqe ‚@ŽŲf$pŽŅ\JcŽŚn, tŽŁ1quisiteŽŠ aŽŌhŽŌwiŽÓ- eŽÕ otic„:†ˆŽŪ^rowsŽŪXallsƒ”w‚Ŗ†į9mmīG ŽÜ mmsŽŪdbŽÜlidsŽŪ~dš<×:‹zŽĪs‚EvŽŪ‚@mxŽĒWLnŽÜ yeŽ»,sl޲na޾g=mŽ·_1iŽĖ[ sŽÉ5 r޶ff޵ d޲mboŽĢ\t޳@c޶q gŽČAquŽĶuŽČpigramŽÜ:zzelinĻs‡}‡”>„ó> ˆ§kyŽŽ sŽŽd‚āŹ@ŽŽ%eŽŽ+ityęzŽŽ0lŽŽFngōTƒńN„ńŽŽfsŽŽaoriesŖ:ŽŽkyeŽŽltŽŽLiŽŻ}adeŽßulty‚°‚äUŽß>dČ`‚ź+ ŽßDeŽßRingŽßXsłQĄmƒ e ŽąureŽß|edŽąing‚@ƒŲ Žą/ed Žą5 tĢ?ąW‚¼:ėŚE ŽąPbanksŽąUestŽąZlyŽą`nessż4‚½uƒģŽįnessŽįlyƒėbī) Žį!fulŽį;less*ŽąD nŽįA thŽą lŽąf r‚Ž[‚œ ‚†?‚ša ŽāenŽāingŽā sƒ Aƒ¶…˜Žā9edŽā?ingŽā lŽā3seŽāEterĄFÓYŽā{d‚ˆQ‚˜ŽćarŽćes‚öMŽć1yŽćiō~ Žć7ilŽćeŽćKous‚Į-‚ØjŽćpdŽćvs††} Žć|eŽäfulƒĮT'Žä,yŽä iöLŹ^‡žQŽäKally˜,<Žä2'cŽäQtasticŽäFlikeŽ-‚ļ_õŽås‚˜&‚’6ęcŽå'erę,…š"Žå-mŽåeŽåceŽå!ingŽå;thest‚Ā …Ŗ_ų)Žåu dŽå{s„¹lźwŽęngŽęon$Žę"iŽęe‚ķ) ‚偿"ŽęL ableŽęRedö“2÷_ŽęwingŽęrer7Žę8$cinatŽęXhionŽę}t…™NŃM Žē8ityŁB„¶aŽēNful‚»)‚ü Žēdsż`#Žēj herŽē> alŽēTe‚Ż]„‘?ˆŪT Žčs‰eƒ'Žč3e_ Žč% ltŽč9nŽčdelƒÖŽčgitesū6 ƒ9Žß  cŽäb< nŽē7 sŽį[*iŽēx#tŽå@"rŽā\lŽčH uŽß^ dŽćQ mŽčmvourŽč|wn†Ż8ß;źv‚Ō2ŽérfulŽéledŽéxs©9„Ģ Žź$ed£#Žź*herŽź7uresŽé}rŽźstŽź=tĢr‚üŽźseralƒēH½0Žė ing‡ü=ūt„#<ŽėingŽė%sŌoƒįBŲjŽė+#<lŽėHtŽėCsŽėdŚ&Żt…–\†€<Žėsī /Žģow„ĘzLL|Žģ"LLtŽģ/lŽėyicity‚ż@ž,üUŽģTolŽģNars ŽģYrŽģHmor‚vƒ«QŽķ ishly÷:ƒõO*+Žķ"er ‚BŽģ(|lŽėNjeŽķ'*+wŽźV aŽģp rŽźxdŽėsignedŽķverŽķtidį[ƒ‘nŽī s’dƒ€]‚“4‚äBŽī*sš-‚‹Zƒ°dŽīJyŽīDce Žī0ldŽīPrŽī>nd¤2ĶŽļthĘP‚”% Žļ eenŽļyŽļhŪp© ‚¦bƒ“ ŽļHdŽļNs‚ƒŽļT eŽļjineŽļpurŽļBhtŽXŠ‚\Žšs«2›iŽš/graneŽš5ppo‡æjŽv‚øŽšUedŽš[sŅ+"ŽšalŽš!eŽš;iŽšxmīĶ^Žń"llyŽń(ncialŲį*ˆų!#ŽńGingŽńMsƒŅnƒŗxƒ”X‚‚ ŽńklyŽńqrŽńwst†ąkƒ6Žņ#sŽņedƒ•: ƒĶuŽņ@ edmŽńS!#dŽņ)gerŽń} eŽņFishŽń-aéAƒ„+ƒ°;Žó sŽódé7„³t„»{00HŽó100stŽóeŽó&ingŽó+m‚‰E‚ģŽó^sρŃ2‚•`žŠŽó}tingŽórnessŽówsŽōzherbertƒĒj„ÖFĻ)ŽōBed ‚,ŽņUmnŽó7HrŽš~" lŽšgŽō<veŽļ$ ftŽīe eŽō tŽōHxŽībreŽīctionŽī$delityŽódstČwŅ2‚Ž:»b‡£3ŽõiikeŽõcessļ( ŽõolŽõ]d÷ģ3÷‚ĄŽö-ingŽö'edƒ“1‡MŽöJdŽöPsž#“ ŽöVeŽöjingō@w…¤BŽ÷ edš8Ž÷rŽ÷nedź^Ž÷"te‚€Eįe $Žöp shŽö meŽ÷9tŽö3rŽ÷GuntŽõQccidŽõWkeŽönnelŽö"ppingŽ÷Mwlessė)„ŲiŹ‚¦.ūkŽųQlyƒš5ŽųWshŽųfwŽų?dŽųKmishŽų9ckŽųEet}‚–Žł,ingŽł&ed‚8‡ž ƒŒ ęJŽłUingŻhķ#č1ŽłjationŽłping‡žŽł2ckerŽł[ngŽłurtŽśttedŽłOghtŽłIes„É ‡fŽś[ingŽśUedķjō  Žś~ rŽśxded›Ģ7Žū tineŽūceęl›=åŽū>dŽūDnsŽūJzelŽū&enŽūOi ¹~‡¶ƒ§ …„pƒó[ !ŽüsŽülikeŽü edŽüing‚g#Žü! !rŽüd#ŽüM#e;Žüc#wŽū oŽūnrŽśaat‚å?ƒĻBƒ”"ƒ˜)‚ā Žż edŽż&ingƒ„6Ä{œ~ŽżEdŽżKsƒ˜oŽ‡>ŽżgedŽżming ŽżQeŽżster'ŽżngŽż, shŽž tŽżid‚ģi„ÉŽžIing1Žüo;oŽž"' uŽ÷R$aŽś iŽųleŽžOy‚ҁ—N–pŽ’gyēX‚‚ŸdŽ’4edŽ’:sęp‚Ō$‚ß|Ų ś‚¤u"Ž’`edŽ’fingŽ’ls‚Ó 'Ž’r"ow€yŽ’Zies*€'lŽ’@dŽ’Uk›Xƒö/ €TledĢ2€Z d€jthill„.‚ł|„śe lyõ ishš ÷#‚āTĒ‚ņeEsteps?men3ed9lights#lKtd¾aƒøA‚…l‚ŲI ‚%dÜ8…Ę9 ‚ČB‚EersØwƒŁH‚Ys‚? head‚_st‚Kignć2Ī„ś#'ƒfulnesså?ƒ.ess‡ā ƒ4nƒæa ƒÕƒP tenIƒ#'etƒB iveƒVotƒave‚Ź|‚„ŽQÕ}„s„ion „!t„lØ:ŲH„Ld„Rrƒ± ›Bˆ›,ˆś.„8 a„xs„Xe„lless„rosus¼ ąP‚ŻbŽ"…>ly‚™s…Date…Se‚ĶM…2 h…Yun…oy…8nightć7„ŒK†sŠö„e† ƒfIg„~. m…ut‚me‚+ ce†#ward‚bidden‚9dŖ”¢Z‘F‡ness‡estÜ%ėH„¤71K‡/ation‡4erü‚ ‡Tth[‡91Knd‡Y r‡l‡ght ‡\†1„e† )r‡h[ u€8* l} o€pnŽ’ gŽ’amŽ’/il‚pperies‚ЁÜI¶lˆfileˆlmentˆrrantƒˆ,Š: ‰d±täOŸp ‰6co ‰; is‰0e‚ǁ·6ƒŃ>‰eincense‚ó‰J c‰kk‰_gipanni‰tic›Ł8"Šn‰" meˆxgŠ1tricideŠ7ughtƒā ņõRŠyom‚ˆ8‚žF ‹ lyŠ~d’Ä ‹*manĄ<ŖTƒžf‹Lh‹Fcoes+‹ e‹0 nch‹RsŠsckled‹@quent‚¹„™ †“U'Œ% hip„¦2EŒ+'sŒly‚ĢhFŒ;EndŒRzeƒŌ#‚l Œned‚Ģ8RŒXFeŒt ghtenngedüBģL,sün‡żR‚ ‚ £>œR‡˜KalsQleted’l‚–2slikeƒØ „’Mƒ„Ž edŽing„Źz‚CC‚ ‚ mWntŽwn1ckyst>id_‚¤’BēLŽtsŽnfulƒfŽ/‚C o R i‹i+ eŠ="aŽzuitģYƒ¼‡ˆ>!Gy"M!lAfilled‚Ø}¹$teszingĢ^ƒÖnydraising‚Š$‚}ƒ›DowJy—UŪ;— >iousktherPresƒ€d‚Ōg B["l‘# tureq rm"n‘ssŃ[ •gˆ‡\Soƒf8rŽéƒ9haŽķ6‚B%eŽōV‚,BiŽž_1Sl‘)BuŽŻx3­P‚¹ģ…c‚ćZ…ś5’>ed’Ding ’Jn’9ety‚¼?ęYö/’ing ’yery“opšē ‚r“0keeper‰G“5e“*bling“HmešF…– ó(“ue“{ingļ7‚•J”s‡½F ”er§`¹GÆĻ3‚ƒ:„§Wm”Ped”Vs'”) den”\ter”8lands”>ments”Dnet”JrulousĖČ2•:ed•@ing‚Ą•Fp­pę@•ks‚¦u•~ing•qe–her‚ĄÉbóC–.letedÖ ¦A„Č$–Ls–4nt–Ftier–Rze–(dy«#†ł — stonAĒ‚я—!d—'tte_„ĢG —F ing—-e ”s' r—ve—Lz–`u“ ll’c i•]s–t”p“Nm’-ble’3gs“onymedeĖiÆTŪ|ĶH‚Ī2˜is˜dl˜ntion‚«‚ü&™us™sity ˜|a™o‚ż7‚•7ƒņ4 ™Qes™W us™Kal„žR•.™|anšenšmƒ™bšeš*y7š0tl™fi™7 erł) Ō]‚ö šgsƒ„/ šm eš{ian› rgšb ffreyø>›0any‚›uF›Ds„ź1ƒĪpƒĆ,3›^ting›XsšD7n›d,3t›o›Jsture›6rm˜^m‚õ)œ7astlyœ=ostlyšŖœdtsœjnœ^ mbattista„§:ƒ©y‡_tded™D‚»{;evraAger‚„XŸ$`rdanofvanna¶9ū}‚ķ>ƒ„q)/žs0ž)/lždle…)ƒŻHŠŠp+Gž=nžCs„ 8 RžI+Gež_ ingžeRvž'0r%lœwaGnloganticžpsies–XļS ƒądŸO ysŸIstone‚µ!ƒĪ‚•<Ÿud„ĪŸ{e  ingƒ„cūćFˆ¦q +es 1like„LŸTd nc 6ssŸomour %re Pzedė.‡Ø ”edGę"”'ed”-ing‚R”2mer”Ipseļ_€”ged”mingh ”Om”ssten¢ tteredŲ-ƒše¢4_‚‘,‚·¢Hy„—9“]č=ƒĖl˜5¢ms¢hd‚¢~¢sve¢:be¢Nom¢\ssy¢bucester£ weds VL a£ o” eam¢ ių<£vedĶTõW…V‚­}%¤s¤ like„ Q„’PWW„Ģ' „Gƒ”0;¤> en¤Ds‡a†©'¤ge¤adolaƒē\‚Ś>„œh…z„ ness„s„body‚¾uˆR„<ous„Bs¼=„”y67„^hic³fį`ƒ¾O„zedč"‡ł s„„od¤8WWing¤J0;ld„d67t¤%d¤mn¤2es„Hrge„vern¦wn¤als„turdsƒ½.‚I‚äq § ful§s†ö§ e§1ious‚‰`‚š)‚Ć‚»‚ó|ŪV §Tfather§fson§Zmothers§`peres†xĶ§l dØ#iteØ)ted²g‚Ņ,ØNsć!„Ź.‚ĄF‡’7 ØhhopperØnless Øt sØbpŹ~Ą2‹"©+cation©1ed‚—h©7i©Qying¹ ©Wf©nng©ti©&efully„†'‚× Ŗ"y‚ÕR Ŗ( l‹• MM‚"ŖDMMy§7cŖ6 veØ.n© sŖ t§NduallyØTpe‚æG‹ƒ^«&st« rÅi„ü*KT«,e«AlyV«GKTt«syņOŲn„„Y «xs­‚°Oƒé?¬room¬ eƒgó¬1ed¬7ing(¬n«~ k¬<t«sdyĖx„µD‚Į^«^Va¬S( e¬}w­y¬xgoryü"ÖQ­9f­>vance˜~‚Ą\„‚°V­ning­hed ­tnn­De­\fonetto­bmyöpo®7sę^źA®Ks‚€'‚åČR®cly®]est†Ę_ ®isÆvenor‚Ÿ6¼G‚øb Æ nessÆ&sł Æ, esqueÆErian„Ö1 ¤+‚š.Æks Æe ndÆqp„»‚ź ……Kƒøh‚„lƒH °ing° n°led°&s°,thE°2 wÆ uÆ sÆJ t®=an®Pom‚ģ`±d‚÷±!e±-ing„ŖL‚""a­ e°eEo® i±3umbl‚“‚ƒ²s•ŠZ²ian±{ed²s‚›1ƒų.²:ed„ ²Os ²Ut²@sśLę‚Õ)‚¾i³lty²zde³neaöB·@³2sźźF³Dsō;Œ€S]]‚q^³[]]enberg³aters |³g^t²a es²ard³In³ i³8m²uffawed³-ll³Vsty×l Y¦s„o±I„^rž{i›}!e—b6a“|u£Ps%lœBh£{naw“Zwendolen˜Ybnewby‚ŽP„’( µPs‡‚¾^†čv†A†FµjnµdjisŪu‚‹x‰ū‰o…Ļ¶s#¶"r¶led¶nes„½9$$†üs\\‚¢I f¶V\\ward ¶\ fl¶P$$fcć š · edŽh·mer·ilton·let·!pshireŠjƒ@Ķ“+·dng·jwork‚Ŗ.ī^ƒŅ}…i59øomeƒ¼"A ø59søkerchief·Xed·piøle·^ful¦"Ź,ølsį=‚- øring¹s‚’^ ø*A d¹ g¹ somƒD‚ĪAŻ>¹Ced¹Is‚Žsįg‚če ¹rness¹fer¹lly„†c>¹Oenŗy¹x iłS€Jŗ<s‡¤‚™\ƒŽ# ŗOlyŗAenŗUyék‚ၛ$»ey»otĪ4µ…ČD»-y»'ies‚Œ »3on»"lessž#… x223»h22y»cowden‚—K‚Š ¼ lyŃ0‚¦pč¼%st¼+yn»p3rŗ[ d»I m¼ shŗ{e» l¼ t¼0veŠńZä"ł ½ily½enedˆ†)+3½t½ n‚š Ļu„åO ½Q d½Wful‚‹NķbƒĖy (½] e½{s½uredƒ›LÓH¾ ed¾&s‚·d¾,nt¾Atboy‚‚t†Ļa„6„7¾_n„‘D$$„[¾e„6„7e¾u$$ingÉt‚ƒ3æersŠ[’ µp†A†Fd¾{„[v¼Enr½9+3s¹#n¶m lŗ>pp¾ (t¶0#iµV bit·'m¶ ggard¾Guæwkæ*zard†–;55ø–iĄLsƒå %%‚Č|‚ČW‚ųSąWü„Ę"ĄphĄvlessĄ|s„ĘMcĄ^%%dĮ"tĄdingĄjs‚¢pĮJed‚Ё÷1‚ ĮcsĮi nĮ]d‚±\‡øl0ĀyĮweĀ ilyMĮ"crĄ@55dĀ0vĄRpĮPtĄFlthy‚ŗ‚­xƒ óL‚•ėq ƒ»óĆenicĆs˜F‚“P‚Ū:„™] &Ć9edĆ?ing4ĆE &pĆ dĆlĆ3met‡«*llčL ‚µ}ÄertÄs…© 44ƒ,½Ä9esÄ?it‚Œ!‚ƏÄas‚÷sÄgineÄ[es‚䂊6Å elf‹g„©fƒ6„Ä344eÅsÄsoÄbÄEmÅ"tfordÄ aldsƒĪ  Åo dóCēĘngĘonÅu eĘ iåC‰ø Œ”!Å(ƒ6„rÄllnryĀ5MaĆ^4lĘ!sitatĘ5ttyĀelĀydonismĆiressĀmbrewĀscticņ@„ƒ É…æ "ĒBness…‚Ÿ +ĒH "ousĒYs‚­/÷?<Ē_+eĒ< denĒwingƒ„‰ƒHƒšU ČrČ$st‚‰1‚…ƒ‰tČ* eČAlyČGwayman‚ŅUƒŸČqsķ]ČwlÉstone‡ā2kk†ˆ~……É"kkselfév‚žtÉ@tedÉ;deršS÷bÉ^dÉcs„žÉ}ingÉie‚ąV…˜  Ź yŹians‰ƒ`‡d‡tŹ% torŹs‚Ų7ƒ®pŹVtingŽRŹ<‡d‡tsÉ(……mĒ}<dČMghÉ lŹ\tÉFnĒ7ccoughed‚”(•oś$ĘŌzĶnŻƒœB ĖUerĖZingĖ`s’‚õ,Ģså|„—+õMČ|Ģ!edĢ'nessśĖf dĢ eĢ-lowĖObornĢinessĢGyžCƒČĶeĶ burg‡9‡Ø Ķ,combed‚±0 Ķ2eyĶEour‚ƒ(ŸĶbedę;žĶhdĶwfsĶ|kedŪƒ v‚ŽˆÕ<Ī dĪ&lessĪ,sµC‡[­ZĪSedĪYsƒŽe00„—eBĪv00eĪ|y…ÄRĻBblĻd×N‚ŒTĻ1sjĻRiĻ7orš`‚’ ĻZsyĻEjrĻ` seĪ_n‚¶5–ƒŠbleŠls’‚Ī Š4essŠ9 tŠ eŠpitaƒ­›.‚Ēiƒ•ŠtsĻ.ƒē ‚Ü75CŃ sŃholdaŃ5CseŠzrŠnnds¶X„³A…Ą1ŃReverĘ)„ ŃX1wĻny rŃ-auĶmĪ2peĢM lŠIsĶK nĪoĖ>arseŠhtĖDckĖJistedŃLveniaŃkxton‰ūŽ> ÓtpÓmlĶņz‡—z‚šcÓ-eÓ3ged‚ꁺ%ÓOity‚0‚ō3ÓkugÓele‚‰ż>ŌationŌ ty‚ŁjŽW‚ė Ō8hŌ2edÓUanÓqbŌ>pŌiliŌ,our‚³$±_ Õs„iĄ+Õsƒæ6ülÕ0ryÕ$erÕary¬iNØmÕ^dÕdrs‚Ó(ÕjeÕingÖsman(Õ6gÕ dredÖ tÕXsķō^ÖSly—!ūÖging ÖYiedÖmyą!Ö| r×tŻ~„ä)×,s‚ńW×@edõ$‚¹K×Uily×Zy×2band×Fh×`k{Ö,(n×vsÓ9gŌS m×rÓ!bbardÓ'ddledÆÆ šA‚ŻiÓuīR”ŲvsyŲ{teŁocriŲqertextāH ŁpŲYacinthŲ_dropicusŲelasŲkmnŁ3stericalŗĘ:Œ”!<eæ0’ ]aŹmŽR"iŃq„ AoŲ{0uŁ8 yÓ t†]ƒ¬{‘0ŚJdė>ŚPeŚ^yƒüoƒ <ƒ» ŚwityŚ}sƒčn„Œ$%Ū lŪsĢmяŪ7icationŪ<y'Ū!%aŪAntif‚»Jƒę-ą2ƒųcÜyŪ~ouså2/Ū['eÜ olatrŪxleŪriotÜyll…éItt‘<½Hƒ `ÜgceÜmtÜsranÜable«j‚É:ī?Ż&s‚ĖŻ,ionŻ9tratedƒƒ Ż?us„zƒłn Żis‚–-‚Ń ŽtionŻ}ry•}‚õOŽ!sŅŽ aŽ'eŽ5ing$Ž;inŻo e÷LįyŽnonŽtve‚§#Ōßly…Š?‚‘zß#ly ßdiateß)nse‡”'„ˆČßXity„„ß^alßntality ßtrßRbileß8 eą o‚·Š_‚–&ąEtientlyą?ssiveĢJˆ“4¾\ąofectąuialą{rąi cuniosity“SĻį6edį0catedåJį;iįToring„Š^‚׏įrceįxt‚©Uį~anŌ;‚¬1ā'sibleā"ed!ā-sārt‰ƒR†ßŃbƒ {‚Ń^āmeāsisationāyvāgbable ā[essionćoāaisonņ ƒ»LćOs;āF!oć+ rćTulseįZląKaįeyćb;pŽY$ agą% mą9ogenŽyitatiŠtą*äMccurateäRrtistic“NÓMäxpableä~rnationĆe­$ĻU‚‡(ŠƒFŹ;å9då?s– åX ingåDeå^udå3inedą ŗ|łaūNęleteęatibleęetent‚œ‚n ę$mpęRrrigibleę herenceęLnvenient‚š%üxēd‚Vēeē$ing„Ėz ē*asē@dibleĒ\ ēF eē_usted)åtlēe ręX oåaå"enseå(hasedå.idental…œW%%…-ĪHĪMčRfyčWty„ø*čF%%edčLfinableč\mničrpendentµfńé+nsŲZՏé?eéDingÕN…“  ée té_ce„4Ī%Ļdźly‚€5‚†źsmźty‚Əź%i ék fferenź;vidualé1aźgnationéIcatź rect‚śd‚īnƒėd‚ł ėceė,stryOčx*eźI iė2uėolence„£K‚‘"ėsvitableėy xperienced|ņ*ģ"ousģ(y‚†Sģ-mģCtuation‚ŖW‚Æ8ö[ ģily„ƒ“`ƒ³-„ø ķ sķdķuenceģ~icted‚ōb ƒš|ƒķB ationķHedŠe™|Eķ&lķNormģo initeģIaģceriorķi ringementķnused‚Ś ³?īEbitantsīKlesŸśīmanceīsedīQaīxerity`¾I5ĮC‚»0ļEtļ?ce‡³øq ļKocenļ9erļ`umerable‚śXŁ"šdinatešganicć ‚ŁT‚9š>d‚•C šDrešRsitivešX iš8est‚#™ńeńity„šj÷}„Ё Qń5eń;ity‚±u‡’'ńWdń]nceä`ƒÅ= ńceńysń~ stńAncerń0de”cžņ;tņ5cesž~č,ā'ņb taneouslyņ]ceŃ< Ż-‚¬ ó ivelyósˆ‚ó inctņhanó1rumentsóead‚ńj2ó7tņ iń*eparableņAolenógultńanņWpire„–MƒöL…Ė#ō?ly‚Ų ōEualō9s…¤I‚ŻXōlceōrtōT ectōxigenŅƒų}…‹Bõ&edõ,ing‡ŌõKly‚›!ķ/õ^dõds õiifieõQeć!ös„Ģ>ö%lyöionõ} sõ2dö+tƒÆg ‚’! ‚Õ'öd ingö^ ed‚Ūr÷ĶĖ÷l÷tionalĪm’‚ŚI÷7ed÷=ionµ77öj'est÷Crupt÷fere÷ minable÷na÷2preted÷Zvalsk÷`7 rõ llöB n…h‚ó+”.ųVlyų\teųPcy‚˜Y‚’Q‰ÆF#łlerablełxicated’}‚¹ „£Tł6d„¢ ł<ełJtionŲ‚¢łgdingłmsive łP oducłsuł1icacies‚!ł #oų3k$eś rųkimaĪ\ĒRś[ity‚×Dś`idśpuable’śvlūriablyƒüv„…]ķk×6ū.edū4ionū:sźh‚±eŖA‚©7ūkedūqingūwigatūeedĢO ū?ntüstū`rtedü&terateƒ£Séæzüfdüleü`ationsüxtüZsible¼xü, eūażiż)olve­Uˆä%‰rŽGś2‚!5tėJOdķtEfóm2sē})cż/všrquļf nļhėešoräXaļ'iquitiesļ-laidļ3mostżVwrought‚Ó ‚€`‡H’es’sžzdescent’x½A^’4y’/s s‚ŖA‚я’Vistible’\ponsibleąR‚L’bs€vocable’P proachable€ trievableų„āi€Ible€Nting€e€TitaĖ?€m r’i’:ons‚”<‚ūq-acs3bellaƒ”3™_Š’O‡&‡4Sn9aYotta‚·ö…Č_ƒīQ‚ elfŠ‹HŠN‹o‚s‚alian‚erationÕh…Ģi  ‚W y‚Qiesƒé-šr ‚] or‚sy†©^ ²cż\‰rŽG[n‚%ŠN‹ot_‡&‡4sÜYttfäy:mÜ$/drŻZ ll‚y vŚccŻgnoŻ iŚDbises« Æ{„s«F„$etÜDŠ>„inth„*k„7obean„=quemartš‡”H„tdŽN‚ g‡–|ām‚Ėq‚ļQ…s…red…$vies偳z…Kmine…Ppers¦.-… mes„Cc…panese…*r„yde…gged…Vs…pva‚µg…ķ5 †FyźR‚ƒ]†Zg†_inčR†mk†zmynē.ō;‡ingˆ‚Ą ‡1s‡+ant‚Ÿ; ²¾1‡M led‡Ss™w‚æo‡Yel‡qishØS4‡ww†L alous‡r‡7t‡st‚šhØ)ńœj­d‚š5ƒ¬:ˆ`edŖ0Æe‚Ł żQś‰ity‰ ly²ØD‰(se‰.x_£Ųd‰Jness„¶ƒ› )‰as‰Pous‰4eu 7‰g )yˆfin‰vialˆIanˆObˆTckeysˆZhnˆunquilsˆ{rdan‰urneyĶQƒ£_Šrment‚²_Šxe‹ ing‰ū ‹g‹%ith‚Ņ%‚ŗ` Ёk‹G iet‹My‚IŠ‚u¾õnõs‹{cationŒed‹uceŒfi‡Ø',0ŒiPŒ5,0st‹Sl‹+ d‹imped‹one‹AicewŒCPuŠ7oˆ4e…v-aˆCim‚ÖU‚ŃCź&,ly2nessėRŠMQs„ÖU…ŗUƒ«~%dingVerjs+p%p8n‚ō ”`ƒŠä'ÜwŽ7s[Ž+eŽ1ptŽ<yŽ%lsoŽ+nt®^‚ņƒŒb edöQ lnsį4Č‚Ć:‡— !/ly;s5ness…—É~ cs,A!di g‚œ' ‚›  ds‚ž+ e]w,nl+ssŽzdsŗ‚ī es_lõ!…ŅQ007‘00wkeltƒ‘y ‚ō,‘.ting‘( fe‘4t߁äIƒ…  ‘Xed‘]ing¾,ł‚ć…“`ƒį „÷R …ęM1`’n’ s’ledge’ing’estk’ 1`w‘c ck‘|tting‚0’Xk o‘ 7e‘Ci§*ƒi’|‚0n9]iŽJ[e“oranļ!…Qƒę“Nratory“Tur‡§‚Ąa “Zo“zyrinth“turnum“IelŠ‚ŠA”.nairełp‚½|”Fsƒé4”4e”Kk”Yquerƒ…„§?š„ĆgEE„4•EEy•ies”~en• sƒ‘ źW±-ö •Kght•QtŪD“0 •ls•VliĖ ƒüa”– ing–scapeõ=‚™R‰ūd†ŹWƒ§–Blyƒ­ –Hid–<age–Worous–] u–6tonƒāļ?—g–d—tern–1e—kų.×D‚¢$—Qis—Vseße‚“†ÄJ—tr—yst× ų˜d˜s‚˜!eģ7ƒņ+Ёw28˜Ced˜Is<˜O28t˜5h–{äoĀzƒ¬+‚ė,„„n%™ r™ly™st™nessįEĮy™Bn™Hr¶G™Ne™biced-™%e˜zch™ht…Ōa))„ąy„åj„™L†“*[š))edš"ingš.terš(s„Ž]š4[ghš_rel‰yƒĢ ÖC› s°eĒ ƒšCōI ›"s›ers›ing°#ƒb•4dše]u˜f<s™- t—rge—" n•r mp”_c›w›( y” b•@ id—\p•Fkeš|vee_‚ĖM‚Šm‚ßuœXnœRdœ^róTä2 œdeingx§eŠless#y³+ųX„Ķ Č+N ingHedƒ‰×IČ& medsing…ĀP‚ōžed…¤„#…Ģ<‚“L)ž3s‚Ē0ž9)ežGing žM0vž'st dTny p)fžrnž-therBguesī`„å/ Ÿ8gerZŸMingƒØL77  Ÿ)ŸgiesŸmyŅ:Ī/  ly lŸscčMż*¼BƒŁ& 0ers 6ing ;s‡ˆ8É  Ad cgth it®Yš_” ardus”ora™!0”3er”9rosies‚ˁ„””_on‰”es”tt”Ycaut‚¾ ƒ• äU¢! sƒ“/BZ¢'ter¢hargy‰9 ‚Tžca¢5BZtŸa77ft”zs o nŸ= d gaŸSer”on”?pŠĻi£-ility£2le‚ßG搣Pals£Vty‚Ķv£rrary£[erĖdŠƒP¤džY‡R†ß5¤/s¤#ded¤)o»VĻ:‚‹f¤Yu¤Ssƒ˜.ˆ›:hi¤tlongƒ‹„ edn¤zhie„t˜?ų6„=söV„7d„Cn„Or’ųG‚²F‡¾p&„Te„|s„ping„vningƒĢY‚ĘTƒ”uƒõ‡‹PUi¦-d¦?s¦3ly¦9nessƒ§}j¦EUie¦qingąr‡ø\§sƒ¢CśE §ac§#ies§)yą7ƒ›f§Ss§NedĪ|‚å'ī §sed§nation§y it§Yb‚„3„ƒžwńXØ4sØ(dØ.nĻ8ö<†ęZØXedØ^ingébŌ6Õ=üK©s©ed(Ø:eØdger© kØ}ing„„f©©Qs©Kize‚ŸƒŃE::ƒ G©s::s©mpedō¦żfƒ›8‚ŚdŖ!dŖ'rsƒ”ƒÅ Ŗ-eŖBing„œ ś> Ŗ` lyū$ŖH enŖf less'Ŗu$tŖ_Ŗp‚Īk‚ĪT«*ry«0tureƒ‰3ƒ‰a‡WWY«ZWWle«Ter‚Ę| z«`Yt«6era«Nheƒ…= ‚Šg‹¬d¬#są¬)ie¬=yƒę9…“ C¬Ws¬ d¬Brü+ M¬]Ce¬{ ing‡+„ nf¦wjk«v zt­M v©y Gp©#( n«' s¦&ghtØm¤cense£xb§/ l¤^e¤5d£7ab©WonŖquor‚ķ ¬)Ė$®7ed‚Xż/®Rd‚¤>Ś®Xe®jsome®ding®pth®=d®LfersÖ]̐Æ1edÆ6ionsę; Ža€)ÆS edÆYingÆ_kÆ;at­?ƒē2°ing° eėf‚Ø.°/al’qųp°4ic°Cs‚Ɂń ę6°eed°king‡Ž}ÜS©\ƒņ ±r±dƒøF†i‡ÜJX± e±3ing±9sq±?JXg±don± ely†ö ^^„ŅFF…Ī] …Ā^[‚ ±^^ed²FFing² sšs‚0²3ned‚²[‚ k²8seĻ~‡Æxy²_shipƒ„’5 ²xs‚Ąjžƒöa'³t²~ e³s³ ingšIÓ ƒ\³Ius³Ds‚·vų‚É ³fer³lly‚Źf‚ĀX† ³rd“ is“nged“vre‚¾1‚ē!Ü'‚Xst“RrƒłI “^e“sness‚Ļ& µ y“y i“Less‚®x‚¶Wµ4s‚X…ƒhp,µl“Fdµ:rµHs‚“b/µNp, eµuingäˆś8¶st¶rƒ§¶e‚¾‡/²H‚o²exyrdµ{/v±_qn³'sÆaÆxc¶3w“ u³Ot°dg°Ig°piter°_hengrin¶AyaltyƒWūT·Wy‚쐷]k·jrative–]åmźƒč ‚ė3‚ā[ øeonø ing¬bÜN¼Lø@edøFidøLksó#÷nøqless¶ƒ±¹sü1ē‚͐¹lyƒ¹ ¹4y¹%ious ¹: ur¹e_ #¹Q xø& nch·pcøRrøvstre¹ teø ggageøllømpy‡³$‰•Q¶G‡/Qo­‡+bi›JƒbOa¢Q‚T:e¹g#uŗ@ying®1lž6„ Ė_ōi»kintosh» aroni»erated»hineü`’'…Ģ~nnž]ƒż ‚ūv‚ī$$»bnne»m ness»hly»Xame»srid»]dened‚ÆvŁƒ±¼Bal„-¼Hic¼Wnificent¼<enta€ułķz½ en‚‘cėĖD½)taining½d½l½.n½$m⠁Š/„ųn‡S?_½os½ir‡ß l½u?_e¾ ing¬Iƒ»CĆ/¾3y¾-ies™dō¾Us ¾9d¾Zy¾'bar¾Otesta¾}‰~ ¾f aæl‚ł$żYĻ)æ,mentæ2ržoœW‚É‚ü~ˆ†ś4 x‰®uæusæcedæiismæoly‚ˁj‚ĖTĄ1shelfĄ+piece›Ą7elĄSle·V†ų-++‡ß. 3‚ Ąu++yæ{nerĄYtæ8ageæQdolinæWgeræ]iaĄ%onĄoufacture‚äh‚Œ Į^s‡v Įd leĮrre­ź:‚ód­:ĀetĀiteüĀ%arĀ<uerite›8åöĀ[aĀagoldĀfonettesÅņ6ĆdĆt«cƒ®i ĆeĆ0sÕ~–4ģ ‚ķt„ł)Ć^s„łPū[ĆrdĆxsƒ/Ć}eĆdageÄngćb‚óCÄ6ingIÄ/iÄ<yĆX edįtƒŗ9Äiyas×£vƒĀ@Ä~domÅs„@…ƒÅ"lyÅ(lousƒ’f ÄLI rÅ7velĮx bĆ6 kĀAgÅ tyrĀkiÄnsĀeĀcoĆLlowĆRqueterie„‚©  Ę;s„a‚¦~ƒ«sĘUsŻ#„·z Ę[pieceĘis‚”Ęo erĒ sĒtĘA kĘOsesį@č"‚“/ĒHdĒMsūĒSeĒBboxøOˆm‰“$Ē~isticČsµxƒÓ|ˆš!%Č*só-&Č0!%erČ>resses0ČC&tČ erialĒgchČ$sžtŽÉ veÉsoleumĪh‚Ķ Š”/2É0fair†HĄ{3‚ n»y$$dÅF)r¾lkÉ6/2yČ]0 tĒ$ sæ l½@i¼]g»"cÉu½hogany½djorcaÉ+ximum‚‹-‚łFśXŹ[s‚ē ƒ˜<ˆųƒ“rŹzsŹtlessƒ’$ƒ÷ƒ¢o>ĖsĖingĖtŹnest‚Š‚«PDĖ%>nŹalŹUgreĖOsureĖUt‚ŠY§ ƒ»<’mĢismØ÷Qž‚Ż3Ģ:iesĢ?yĢEitĢ4e‚‚Rˆ“#ĢvumĢ[ocrĢaevalĢ.cisĢptativeĢ| iĢallionsƒÖ)‚«l„÷ ĶPingĶVsąAĶtcholy‚“B‚ø®o‚ ‚Œ‚ˆVĪ(ticĪ"s‚Ÿ#Ī.ramaĪiousĪDyĪJdĪceusĶzanĪloĪlowĪ bourne‚ą(ŸfĻlƒ¶?ĻAyĻ;iesĻGrĻ5iresĻ]oĻ/ber‚›Š lyŻS‚‚C Šed“X Š# ionŠalŠ2one…īrJWŠ8 tĻõ ‡ ŠgibilityŠlmanŠqs‚¹‚Š/ŠwhantŃutioŃ!y„åo((ƒ¶h>ŃI((lyßyGŃO>eŃ'cŃ^ton‚†)ŅgeŅlina‚¢eÄ„‰/Ņ+orsŅ1ysicsŅ%lŅ7ph‚©Z‚¤( Ņfs„»&):Ņl hodŅQa³IÓs…Ū „ ‡ŠYJWnŃcG rĖ[D aŅz):tĻtmĶ6 dĶ\etĻ lĢ  chanicallyŅ ssaÓxicanŃ7Ī&ŌaelŌelangeloƒ÷vŌhŌ<roscope‚ŻG‚łńj Ō\dleŌhnightŌblandµ†Ü;=>Õy›d‘~÷5²}žTÕ>s ÕClÕ-dewÕ8kyÕ'anÕ3eŪõ5Õked•ƒń`ƒÜo"'ÖsÖedm„„K Ö8ral•"š|‚Ż)ÖNaturesÖTonÖZsterialå#„Ą4Ą|× sQÖ!"'d×uteÖ> eÖ`i×tż*†čn‡ķū%×[s×Ued­×ar×xurs×~ro×OandaÅwÖ+Ų,dventureŲ2nthrope‚†nÕy‚‚$ŲYableŲeyŲ_iesé#ć-ƒś_ ‚ØWŁĶ!Ł"onŁ'ssippi‚±!Ł edŁhapenŁ,i‚ÓRāCŁisøx ŁoeŁ}ingƒ‘B Ś ak‚„7;ŁFsŚ tŲkerŲ8aŁ fortuneŁlaidŚ( understoodŠ*ćƒĪ{ć(ƒ ŪedŪ ingŪture ×!Q nÕ=>ghtŚ.;sŲrŌn dÕO lŪxŌBcÖmicŚ}ttensōb‚ŅLŚ-Ü!ryÜdójƒŒ=Ü'eÜ<ing„„&ś]æ…ƒDÜdityÜjnÜ_ationÄdˆłf "ÜzrŻsÜYlĪŁ7Ż6cationŻ;ed$Ż "eŻ@ifi¦u^‡—ƒõƒÖhCaŽsŻ|ary‚õał~¶ ‡’-Ž+lyĆKŽ1ousŽ@yéWƒš`ÆHŽbs¹jƒø Ž|ousŽvanceßrŽher#ßtŽ\ieurĪ!ł„ăžS ßRsßX hßGaigneßMecß0#sßftŽ eyŽ&mouthŽFotonƒĶA Õ?ą: słJ°MąTtoneƒ¤ ąNlightąZslą@dąi nįrish‚„+ˆ“lįį.tyį(stsį4zeƒ¾_ˆĖh į9iįYsˆ„R‡¶H  ƒ…X‚‘'‚’s ¤ Å<©4āemā!uaryIį{  eāningį_ alā rowįubidā'tā oseāse‚ƒs„ō.MMNćMMtćs„šu,,Šsƒ³o‡“Kć=lessć7ed‚£4„³6ć]s ćConćcve8ć1,,herćq iŹEäs‚’¬nßä;ingä5ed’ČI‚žä^sädthäArnä#ldingä/ntedäXse„ˁĆA‚›Rå.s‚¬å(då4ment‚T åBeå[ing …#ā?IrącnŽCamentćNsä8tŻZ$ dåa vį oär uÜAckÜanŻphammedŻvist‚Ž „°_Wbęq s…ŲU\\†6‚ˆ ēsœ  % Lē)formē/plyē5tiē#es‚²įs ‚‹UƒˆY ēj edēpous’-„Ųx**ś‡“=,č**edčingBč!,murēv derčky‚ƒ½Ač[lyĄ‡üičpsƒĄ  *čaalčvian·¦\ƒ­†Č $)é)nVé/$)té *icéké#linsƒŗTƒ‹Iépteredéjilationƒé?V sē\\chč:BrévtēNlē dēfflerēdnificent‚ĮU *źfs…×t//‚§K…®1 ėousėesƒ¦Mė iė#yĆ~ø^£-ė=alėCismė)erėIicGźz//elfėbt†‚‚/‚{ėxG sźlriad›WÓ$„ ‡QeÉG†Haåw…#]oźƒuģ‚/‚{ yŪ8CięwWbrļJƒæŽwą…ˆ{…­N05ķsģ{dķless©UŠxķ,sŸķ2kinķ@les’,…Ģ3‚ƒ ķiedķ^boroughķccissusķorow“m”ī%onsī+ve…±< ‚› ’1„øD īNdīTs)īZ eīH al,īp)urī1iüŁķ 05meļ,tķ|rķFpģocreģukedļvarreļyƒ¢QƒČLĻ ļylyļser‡”-„ų\šyšilyčfƒē=š?yš9ies š#aršEitš%į)¾%šws‚œ> š|tiešqedš[ essń  k‚™WõBƒ„‚G ńDsń?edЁ¶ńfesńlrońaligencež9‚€V‚Ž#ņhoodņs…’n ņ8therņghbour‚ŁO¾Uœņ`nianāƒ©= ņws‚Énų„Ø1 ó lyónessó ousņ} eó1vņfo®(ŹEŠƒ!óawork…Ŗj00Ės®MŹ,„„.Ū4ōpapersō letter‰“,(2ōsōlyóby†Ęl ‚Zów00verō5(2wóGrļarń# cōUxtņ> ińJ edóftńygń9dņZphewó[stsƒÓ ‚·E¼QƒœKcgõ`sõZingalesš=hõfcgtŅg„ ˆ«G Ādö teenth˜ ö!eö4th’löhghö:nõT ceöleömblyöOtricę‚‡#‚ļp÷r÷st‚ņ{ ÷le÷5odyā2óJ‚ܐ÷\ing÷WedÜ ƒÓ,÷ylessly÷eųily„’ŌƒŪP Ķ9ų9 senseų.eų4 proprietaryź.øŖMųvern…‘l ų|thųpmal„§#…ĘTł#sƒ©Sł7trilsł)eĄ 0‚ø‡‹0 łUdł[paperłas…“}]]ķ:‚—č0 śdśsŅ ś ceś1fies”m¢PˆŸ ƒo„jś ]]hingłg eś6 iśNoriousśT tinghamshire‚Ģ‚ŪA•a‚ĻC ū#sū)ty˜ ū/ lūFmberƒ÷H ‡”ūc adaysŠče dˆ)śZƒo„j tūiwų?n÷; būL veł  rł=s÷bddųis÷Rcturneųjonūuvelles‚“’;Ū[Ģ&żberż erous‚»h żmüxggetü~isanceż)tsšPū}dˆ)/oō[‚Z1eöT iļ%aż/ uż\ymphs‚Ģtņp‚‰!ž&sž,thž k‡ƒ†»ƒŽ žUedž[s»%ƒ”FƒÅ6ž~d’ežxation÷D’g’*vionÄ>Ė:„Œc‚Ø)’Ration’Xe’^rv’LquiousĶm’ve’Fcure‘€olete³ŲŲ ‘€>ing‘€8ed‚“k!ža ject’/li‘€s‘€Ctain‘€[viousžOelisk„÷Ā²‘$ally‘*edūa‚ß(‘Pied‘JantsŪ-ą/‘ored‘ur‘Vp‘‚u‘0asionōļŌ‘‚6agonal‘‚<ober‘‚ c‘‚Bt‘‚1hre†”g·G‡æ<‘ƒur‘ƒrous ‘ƒo‘‚|d‚²ƒüKčHĖÕ  ‘ƒ@ed‘ƒFing‘ƒLs ‘ƒQ r‘ƒ:nsive‚˜‚ų6‘„ sÓ^ ‘„e‘„ial‚ļ2‘ƒr e‘„# ic„ˆB''‹Ż‘z’S‘„92 f‘„P''ten…Š[22·LżO„…X‘„vs‘„|yƒŽP ‚Ż~ ‘… r‘…st…ķN?I‘…$ eƒ§QO‘…9?Id‘…Give‚Ņ8ē*ē)čQče‘…oed‘…ts‘…yn‘…ilette‚‹#‚‹q‘†'es ‘†e‘†-nibus‘…car‡ūPPˆw„ŠR€C‘†ielf‡Ō-ƒ6ƒ:‘†osŠƒ;ˆĪqqv‘‡qqy‘‡ine‚»ēx‰ūu‚r‡u‘†ƒ6ƒ:e‘‡vl‘†]PPce‘†cdes‘‡1t‘‡7yxļoƒĻ„›W‡ŗ,1‘ˆed‘ˆing‚Éy >‘ˆ 1n‘ˆ& raÜbåwā&‡ģu‘ˆMs††m ‘ˆRnion‘ˆ`um‘ˆGatesĻ.‚‡z‘‰y‘‰ ies‚ę? ‘‰rtunit‘‰*site‚f‡E‘‰Rive‘‰Led ‘‰0 o‘‰Xress‚…Gƒb‘Šmism‘Š on`‘ˆ,>e‘‰o p‘ˆf i‘‡{al‘ˆAhelia‘Šti‚¼°{‘Šdsś)‘Šjnge‘Šxtory‚‚^‚ŗ ‚Č.ī~‘‹"s ‘‹(id‘‹ard‘‹estra¾„ž"‚Ć‘‹^s‘‹Xed‚µ1‘‹der‘‹{inaryŁ'‚…a‘Œ zed‘Œsm‡‹$‘Œ&iwŽ+‘Œ=an‘ŒKiesŖoƒŹO‘Œol‘Œutorąo‘Œza ‘gin‘Œients‚„ ƒĖX‘=eans‘7andoż@Ø ƒó‘bed¤H‚Ž.Š„R ‚*‚s‘Œd‘ŒQg‘‹5 ch‘ i‘Š}a‘Cl‘hnament‘wphreys‘]molu‘}risŸk‹‘‘Žqcar‘Žkborne…‘}€>„¢ Uq‘s‘wise‚ĆO„ĀP õ> ‘< elves…¤NLY‘B sõLĖP‚”Ķ|‚’G  ‘x ide‘~tretchedō…Õ6.‘ s‘bcast‘gdated‘lfit‘rlet‘!ward‚‘&.t‘TLYr‘6ght“ ƒšq‘‘ le‚€‚…-„Ą‘‘.essed‘‘(awł0‚™Ęz‘‘Sd‘‘Yrdž;ģ„ēV)5‘‘4dr‘‘_hea‘‘M emphasized‘‘"charged‘‘tladen‘‘ztired9‘‘)5 er‘‘alŅlƒæH×‘’os‘’jdŅ_Ż/ˆØf ‘“ er‘“s‘“ n‘’ue†ˆqƒĒG„I‘„V‘z’S f‘‡=‚r‡u n‘Ž‚*‚s"r‘l‚ u‘’Q9 v‘“.w‘Uqther‘Š*`p‘…MOl‘„p22h‘€a!b‘‚^c‘ƒ& d‘†< m‘Žwsž:a‘“Exford‘…ilūķ‘”ss‚—‚ģ ‘•d‘• rs‚ģ‚ų‘•e‘•'ing ‘•-k‘”ye™&‚¦[ƒŁgå)‘•es‘•_ant‘•ke‘•Yan‚ł+ ‚‰łƒņ„Ņ% ‡”7„Öh'*‘–6sJ‘–<'*r‘–0 d„…1r„„= f‘–JJe‘–^ing‘–dsƒ’‘–j ft‘–*s‘–ed‘–$fulꁑ—  n‘– d‘—4r­iįj‘—Wce‘—]teƒ‰?„ŗt‘—xtte‡”N ƒ{ĶF‘˜ id‘˜or¦Wśģ.‚»aś‘˜Cy‘˜2ates‘˜8ers‘˜>s'‘—~e‘˜l‘˜Im‘—baŃ$ƒ“[‘™s‚́ŹW‘™,led‘™2s‚ĖB‚— ‘™8l‘™Ns‘™gyricƒ’Q©‚Ž$‘™|hers‘šing‘™T e‘™vg‘štćĖ+‚Č^ ‘š=s‘šCwork‚ė\‚Ų ƒ³‘šges‘šmox‘šaiseŌKĘ5 ‘›sńÄ%‚Ž‘› graph‘š|d‘›&lysed‘›+phrases‘›1sols‘'śbƒÖT‘›zs‚éP‚ģ=‘œs‘œ ageÄm‚ū ‘œ/ianƒß‚ĀC ‘œEer‚ą!’`‘AØ„§(‘œksƒ³^ģ=—ƒŽ= ‘ ly„ųä-‘ cular‘es‘%ng“y… ˆšz8‘+i‘Sy‘œed‘Ms‘hian ‘Y8 t‘›7 a‘œ5is‘œK k‘œqrot‘›tched‘›don‘œent‘œZliament‘œ`ma‘œeodył'†ęf<<‚•gƒŒ[?‘Ÿ<<d‘Ÿ s‘ŸrsbyƒÆ= ‚¾'‚…\ƒŠP ‘Ÿ>lyƒč=ƒž-N‘ŸSs‘ŸD ate‘Ÿ8_W‘ŸY-Non‘Ÿ2 ngƒ’z ‘ŸyWi‘Ÿ?e‘ž{age÷xųR„Č@%'‘ 0e‘ 5illesG‘  s‘ :%'tžO‚š:‘ jes„.įJ‚ø ęE‘” os‘”eticą‚²‚™ ų‚ćqåV‘”@s‘”;ed ‘”Fn‘”5edā  ‘”] er‘”ri‘”x t‘”h‘ pch‘ ent‘”*ience‘”/ron›G‚ 5„Ś~ ‘¢Pd ‘¢V se‘¢Jlēsŗ ö*‘¢ment‘¢yd‘£nšU‘£ e‘£)ilionƒ­5ŅF‚€"ƒĀw ‘£Ging‘£Mments‘£Rs …‘ TGs‘—9 i‘ž #r‘˜t' l‘¢ t‘£X y‘–g‘š! n‘šH per‘¢d u‘•E c‘£/v‹QƒŌ‘¤ffullyš£Y„ØP‘„s ‘¤le‘„ ock‘¤~h±Cø2ņJ‘„5s‘„;yƒ˜h‘„AlčG‘„Wr‘„ c‘„esant³aży‘¦ly‚SłNū ŠdėC ‘¦,ed‘¦2ing‘¦'ageąAĘWƒÕ}‚ó „„9‘¦kiless‘¦qy瑦_cil‘¦wn‘¦Zalty‘¦eitence†£Ahhč`ćUå(ƒż^…æbˆ“80‘§Yly‘§SionåfŁC‚“‘§}sŖY³D‘Ød‘ØrÖOƒ ‘Øance‘Øe‘Ø0ing ‘Ø5 m‘§xatedĒf·[‡¶& ‘Øus‘ØodF‘§_0ect‘ØX or‘Ø{ ume„ĶH((±‡ņFŅ0‚ų‘©Dic ‘©>l‘©Iod‘©8dot‰/ ;ÜĪa ‘Ŗssion‘Ŗtted ‘Ŗ i‘©}anent›¬s‘Ŗ@tto‘ŖFzesć]„ĪW‘Ŗded‘Ŗjity‡µXßQ‚± ‘«nt‘« d‘«an‘«ste‚¬„ŗ ‘«Jy‘«Dies‚Ŗt‡†‘«Pit‘«fly„‰&ƒŻY,‘«lal‘¬sŌ ‚×I5‘¬ ,on‘«-i‘¬'uade‘¬!piration”T鑬\h‘¬burbed˜\“#‘¬gia‘­vians„Ž G‘©Ff‘¬-5s‘©2((haps‘©X i‘Ŗ( m‘¬gt‘ŖLo‘Ŗpplex‘­ u‘§Ich‘§Ndita‘©wles„Ģ~‚ø+ē]‘®s‘®ledŌXśgĻLƒŲV‘®Flyń"‘®$al‘®Lulant‘®;it‘®Aticoat ‚q‘­%G9r‘§>hhople‘„j a‘®[t‘¦8 er‘§n‘¦culiar‘¦ bbles‘¦!destal‘§DpperÖm  ‘Æv lafė@‘° s邤‘°asant‘° nomenon‚ź&Ök‘°Dc‘°JstƒĻm‘°Pi‘°ey  ‚Ŗ{‘°p‘±stine‚Ö0‚Ņw‘±)y‘±#icÆO‘±/oph‘±Dtratus‘±Jos‘°kanthrop‘± i‚Ź#‚Į:ą(ƒź ‘²d‘²s…™?ƒ€X‘²/cal‘²5ology)‘±e il‘² rase‘²;ysi‘°antom‘°&e‘² otographs‚ČM„š- ‘³!o‘³istsšl ‘³' n‘³>zza‚Ā>Ų"š‚½S‘³`ed‘³fingƒč4‚š ‚É1‘“ ness†”;‘“que‹žlKU‘“"s‘“d]‘“2KUture‘³lk‘³ZcadillyćKƒ‹ ‘“msĆ#Æ7«(‘µced‘µre‘µ s›Q‘“s ce‘µr‘µ2troš‚ń`‘µWsŸ.ń4é|‘µkd‘µqsś!śx‘¶ sˆńƒ‹‘¶-ow‘¶'ars ‘µwe‘¶grim‘¶3l‘¶!ier¤O‡¶ śķ‹ ‘¶y k‘¶se‘¶nacles‘·sµZ‚Ń ‘·4s±šX‘·Hachio‘·Nolōgƒģ‚øs‘·ry‘·leous 8‘“H] c‘·xt‘µ8e‘· n‘¶J l‘³D a‘·:pe‘µ]geon‘·Sst«A†į ‚’Vƒń#7‘øi d‘øos‚—DĄ‘¹ d‘¹ng;‘øu#7e‘¹i‘øcard®-‚Łƒś}‘¹Ptively‚øM ‘¹Vn‘¹ited‚q²xśO‘ŗ sļo‘ŗt‘ŗs‚ĢKƒ±‘ŗ:ic‘ŗ4erwork‚¢wæP‘ŗZsƒĘ(€k‚ć; ‘ŗ`e‘ŗnform‘ŗtinum‘ŗzoƒŌ}‚w‚›n‘»0s‘»*d‘»6r‚ę „š@…•:(J‘»De‘»X ing‘»^s#‘»d(Jy‘¹,;c‘» t‘¹o i‘ŗn‘ŗ@st‘¹JgueŃH‚Ū{ƒé‘¼Der‘¼Jly‚©nƒĶ_ ‘¼hdƒ‡;†ē`-2‘¼|sD‘½-2ure‘¼n e‘¼PantėE‘½Das‘½0nitudeœ ÷ Äv命Udded‘½Zt‘½`ughman„Ķ„™ ‘¾ ed‘¾ing„9ä‘¾ck‘¾,maged‘¾2ngedt‘¼#!a‘½5E e‘¾8u‘½eo‘½Oied„W‚„~Ēt‘æsŠ‚±=ƒ÷m‚Ŗa ‘æ,ry‘æ2s‘æ8 t‘æ&mĄ7„Bń:‡ż+‘æied‘æoing˜˜K‚/ƒŗ ‚¶d‘Ąous‘Ą ed‘Ąs‘Ąing0‘ætnt‘Ą%son‘æcgnant§=Ž0‚’zä[‘Ąyan‘Ąen‘Įm„Ż^‚—W‚Ö`„‰9‘Į:s‘Į4ian ‘Į@ic‘Į.e‘ĮV t‘Į(shed‘Įce¶}¬™I‘Įk i‘Ąsand‘Ā len‘Āo‘Āyssena˜'¤XżCŖe‘Ā^ous‘ĀX egranates‘Ādp‘ĀRander偩‘Ćd‘Ć!tusį8Ņ`‘Ć=e„Ć!‘ĆPr‘ĆBlß!üL‘Ćjes‘ĆpngķL‘Ćvpi‘Ä ularłX‚ģ%† õuń(‘Ä@co‘Ä:a ‡‡N45‘Ä[s8‘Äa45rait‘ÄFi=‘Äo8t‘Ä.k‘Ä)celain‘Ä4phyry‚ē„ān‘Å3d䂚 ‘ÅLtion‘ÅGng¤zƒŻ?‘Åjd‘Åps‚…7» ‘Åve‘Ę ionĻP‚|‚†X ‘Ę-e‘Ę3y‘Ę9 l‘Ę(ility‘ĘMib‘Ę essūÕó2‚ś} ‘Ēed‘Ę|_‘Ēures5‘Ęe s‘Ē  t‘ÅR i‘Å9e‚šQ‚”ƒƒxƒg‘Ē]ed‘Ēcing‚”7‘Ēir‘ĒWnds‘Čted‚D‚Ģ‘Č,ed„”j ‘Č?er‘Č2der‚‘Å= r‘Ē-5s‘ĄP0 i‘ĆV!o‘Āl‘æOe‘ČE w‘æcket‘Ātm‘Ču‘Äp‘Ć'n‘æ aching‘ĒQt‘Č&vertyŁ+‚Ųr‘Éely‚Ō ‘Éjal‘Éye…‚ĶA‘Źe‘Źing ‘Éc‘Ź s‚„‚Ó‘ŹJd“&‚•2‘Ź^e‘ŹdtledąK‚‘\ŁN ‘Ės ‘Ė r‘ĖdƒŒ‚‘:‘Ė e‘Ė.ing#‘Ė4y‘Ź6 cti‘ŹPise‘Źjtƒę{ā\‘Ėtd‘Ėzr“g‘ĖeĒKł]„Dƒ° ų{‘Ģ2e‘Ģ8ion‘Ģ>s‘Ģ'ous‘Ģ,pice‘ĢTi‘Ģ!eding‰ś~‚łV‘ĶredĀ+ś.‘Ķ'guring‘Ķ-x‘Ķer‘Ķ2i‘Ķ ace‚ŁH„‰b‘Ķps‘Ķjd²$ƒ†jž1æ)Ø3Ņ5‘Ī"d‘Ī(e‘Īationśl…9‘ĪMbes‘ĪRptions„‚ ²ŅBč ķ"ƒś‘Īyation‘Īed‘Ļiment‘Ļ s!‘Ļt‘Īs ce¢a„RבĻTd‘ĻZs$‘Ļ?!n‘Ļ`rve‚ŗš‘Š ed‘ŠingõƒĖa> ‘Š3ing‘Š-ed1‘Ļu$ e‘Š9 s‘ĪXcri‘Šid‘‚…N‘Šying‚ėh ‘Ń ty‘ŠendƒƒÖX‘Ń,ed«M‘Ń2ent‘Ń@iousē8 j‘ŠR1s‘Ńt‘Ķvjudice‘Ģuc‘ŃFv‘Ģach‘ĶKf‘Īmature‘Ī5par‘Ī lude‘Īoccupiedƒš[ƒü:‘ŅTd„³%äy‚€Q‚Ī<‚ĪfŻ2‚ūl‘Óitive‘Ņzarily‘Óersƒ£|‚°‘Ó4sŅ „‰‚Ė6 ‘ÓNs ‘ÓT le‘ÓHal ‘Ó:e‘Ób ipŁ0Ż6‘Ō ed#‘Óx c‘Ōtó‚ž?‘Ō4ed‚ßh‚ŚP ‘ŌHate‘ŌNilegeH‘Ō # n‘ŌT v‘ŅZce‘Ņhde‘Ó m‘Ņnest‘Ō9son‘Ņtg„Š&äƒÓ^‘ÕCy‘Õ>e‘ÕIl‘Õ8ilities‚× ‘Õ]ab‘Õwlem“lÓzęO‘Öng‘Öon‘Ö$ssi‘Öeded¬]ĀSćx‘ÖYed‘Ö_ing‘Ödur‘Ö:e‘ÖSopius‰ū" ķSŹ6 ‘× d‘×"s‡—FĪ>‘×' e‘×<ing‘×Btionõ&ĒW…ĀI‚—v‘×ts‘×nalųj‘×zion‘ŲorÓāw‘Ų.s”<¼i‘Ų@ies‘ŲFy§ ‘Ųess‘Ų3it‘ŲLligac‘×hanation‘ŲbuselyéĖŒ‚ XX„Ž Į.‚(‘Ł<ed‘ŁBing‘ŁHong‘Ł6etariatÕ6ƒÕh ƒ€S‚Ķ6‘Ś d‘Śs‘Ś se‘Ł{nentlyŁ Ī9‘Ś<ng‘ŚAon‘Ś"i‘ŚFotiŃ‚¬V‚ØR„c ‘Ūy‘Ś}ies‚šV‘Ū t‘Śwly½āC‘Ū6sied‘Ū<tĖ‚ąt‘ŪXed‘Ū^s‚‚0‚†3„‰Q‘Ūsß  ‘Üe‘Ūyal‘Üing ‘Ü s‘ŪdrtionÓ‘Ūer‘Ü8 o‘ŪAhe‘ÜPrietary‚±W‚Ž ‘Że‘ŻpectsŚ&Ė5‘Ż%ct‘Ż*sts„³ˆ‰‚3ˆ“‘ŻMd‘ŻSrbs„ĢÓ, ‘ŻqdŌd‘Żw e‘ŽingĪR‚‰>‘Žs‘Ž d‘Ž$sionÆ‘Ž2i‘ŻYe‘ŽIokedŽÓ‘Žnlingi‘Ł0XXject‘ÜUp‘ŽO v‘Ś\m‘×Gduc‘Ųh f‘Õ} b‘Ö{ c‘ŻGud‘Žtw‘Ł_l‘Ż0te‘Ż s‘Ł%grammes‘Ł+hibition‘Śrofread‚žoā7‘ą)ssic‘ą#denceƒ÷{‘ąJingƒD‘߁i^o‘Ń_j:e‘ŌnHi‘ĖL#a‘ą/u‘ąPy‚¦ƒÆ~‚„‘įcal‘į sts‚„< ‘į&i‘į>y ‘įD olog‘įicalƒ÷cƒ%†łC‘įration‘įxly‚ŖM‘į~c‘āshed÷)‚Ęw„Śq„ØI‘āAed‘āGingƒ²@‚¦i‘āds ‘āMl‘ājse‚Ė1ƒŗ,ėk‘ćed‘ćmentĻZ‘ćsh‘ć6tive ‘ć;i‘ć ctualityŌƒ›S‘ćts‘ćzpet‘ćnils„Š ‚ō: ‘älyƒ¹<É+‘ä3ication‘ä9y½ ‚€L‘äYismƒŠ= ‘äoy‘ä_an ‘äu t‘ä?fƒž2½V‘åle‘å$oseņ4ˆf2‘å*p‘ä$ e‘å i‘åAsuit‚‡W‘åod‘åusżk‘ęing‘å{e„Œ\ƒ‚R …Ś*7‘ę0 ting‘ę*s‚Ū* $‘ę6*7t‘åF2r‘ābli‘āx l‘ćS n‘ęsh‘äp‘ęOzzled‘ā6ddles‘ā;ffsåp ’^‘£|… a‘ą^ƒDLr‘Æ ‚q_e‘Č\‚^o‘¾\t7l‘ø80i‘ęU$0u‘²U)h‘įX sych‘Æ{ g‘ē7yramid‚Ū5‚…‚ļkƒ‹- ‘č6lingųaƒ–. ‘čMs‘č< rel‘čR ter‚Ź_õ‘č`r‘č0lities‘čxtorze‘č~y‘č*il‚ļ} ‚ Iƒ¤ųuQ„×9‘éEed‘éKing‘éPsˆH‘éVstion‘é9 en‘é?rulously‚†z:‘ź!ed‘ź'ingƒ£BāS‘ź-en‘źDly’>×W ‘źblyču‡ŅElll‘ź}lleƒ©Jķ3ƒ‘i‘ėed‘ėing‘ėlt‘źJck‘źh et‘ėver‘źwnzeār‚žj‘ėgation‘ėledG‘ė4 i‘éwe‘é a‘ėrotG‘ģ G"u„ƒ¾w‘ģ@d‚Ÿ‚÷~‚Ś{‘ģZs‘ģ`cal‘ģTance‚‚y‘ģni‘ķleyˆ«Ź# ‘ķ#e‘ķ)gedŽÅ°C‚Ē+‘ķQbow‚ĢPžM‘ķgd‚ŪR ‘ķme‘ķzing‘ī s‘ķWn‘ķKment‘ķElingsņYŽ^‘īAed‘īFing‚Ė_ƒ‡x ‘īced…`‚Ó5 ‘īi g‘īxk€5„ 3‘ļly².‘ļid‘ļ)t‚„0„ ‘ļDly‚ņ „Œ‘ļ_h‘ļYcallyč+ƒ®‘ļ}s„Ń//ƒ‡³Zƒ„K‘šdI‘š//her‘še‘š#tle‘šional„—CĄ&‘š]lled‘šcnous± ‘š1It‘ī~ n‘īi‘ķ/ g‘ģFce‘ķ d‘ļ/p‘ļes‘ļJre‘īLk‘šive‘ńyed‚JĒk‚“4‘ńsed‘ńyingĪ‚ĻRŪfƒĪN ‡ņ!3‘ņ) y‘ņing‘ņable‘ņ#sˆ«ƒ»W æIõƒ’G ‘ņld‘ņr e‘ņfation!‘óz‘ņ` ty‘ņZsm‡ķgg…Ź)1‘ó6ggly‘ó!iś=”h‘óTed‚Ųg¾Źs…ü $‘óhable‘óned‘óts‚‘ó<)1l‘ņ/!3d‘óz$son‘ńch‘óYppearÄCń_‘ōQsƒŖńk‘ōWn‘ōdus‘ōjlioĮJĶ[‘õd‘õel‘õukeÉQ‘õ9ed‚Ó'‘õ?ll‘õLpturedŃw‚Ø3…‘]‘õqdĻF‘õwe‘öing‘ö v‘õlptĘ‘ö i‘ö5ntlyļNļj‘öRed‘öWingųqģ„£a‘öyness‚́—/ƒ”— ‘÷d ‘÷! ze‘÷tionƒ¹*‚²:‹,/ƒˆI‘÷/ gni‘÷Gllection‘÷Yrd‘÷Mmmended‘÷S nstructed‘÷_vered„ƒ32‘÷e o‘ö;e‘ö~kless‘õRa‘ö\hristen‘ų5reate‘ösite‘÷liningŌŲ_Ł$‘łng‘łon‘ł#i‘łeÖL„Ÿ)/‘ł9istribut‘łMressed‚µUµS‘łulikeó ‘ł{d‘ś led»8Ö6‚ć_ƒ®6‚¦<‘ś3d‘ś9mentƒ¤Xō'‘ś^ion‘śXed‘śdorså-‚„\‘ū ationĆFēV‘ū!ains‘ū'eshedƒ‡+×t ƒŗ'ņ …o ‘ūYdÓn ‘ū_ e‘ūming‘ūSals‘ūs s‘ūN nd‘ūHge,‘üu‘śilect‘ś?ine‘ūorm‘ś.erences‘ū-r‘ś(ashioned‚°ž"‚ņ`Ś‘żstered‘ż mentŃC‚Ó]Ī7ƒ¹  ‘ż:s‘ż4fully‘ż@tedĖ:‘żF ret‘żi‘żarded‘żent‘żjulating‚‰[Ÿa©hę1‘ž5ed‘ž;s‘ž@n‘ž/gns½O‘žksūJ‚×y‘’ed‘ž}der ‘’oin‘žqection‚›,„’;‘’:hipŠƒ  6‚Šƒ¾VĢ&‘’bn‘’hus ‘’ngio‘’\ef‘’Vable’€ i‘’@ations‘’PeaseäN÷(ƒ¹3‚”Z’€Oing’€Us’€Ied‚ž:»g’€|e’ing‚—‚Ü ƒĪD ’$ed’able’€[in’* rk’kŠ ƒåWƒÆ[üP„Ÿh/’ged’ming’ss‚‡/1’x/er’‚rance2’‚1mb’bdiesƒ†3Ķ%į„Ā’‚Ped’‚Ving’‚\sßJ’‚ad’ƒiscences‚€‚¦RÖ-’ƒ/d ’ƒ#rse’ƒ)te’ƒ4vek’‚82e’D a’ƒin’ƒ@ oļŽ’„issance’„ medÆ-‚ˆÄOßG’„8s ’„> unciation’„a’„,dered’„2ewedę ‚¢¤a‚Ō+ ’…ed’… ingtķ>’… at’…/tition’…)ntanceŃNŽ!’…[ment…Ś~ēQ’…pied’…`ace’…vyš$ŁHÅ&’†ed’†!s£eć’†=ons’†CveÜp¤>īH‚Ćd ’†Hati’†_ed’†eing’†ksĶVÕWƒķr’‡es’‡!ing¾k’‡'ach’‡@duce’†p esent’‡FoķX…ś(’‡ws:’‡_ r’…{l’…4e’‡|utation’†&ort’„~arationÓ"’qŌT×; ’ˆVments’ˆQd ’ˆ[ ire’ˆLest‚‘Ł<…ŠK#āj’‰d±>’‰arch’‰$rve’‰mblance’‰2ttlingõx‚śƒøm’‰wst’‰qgnedąŅ&’Šutions’Šved‚Ć3‚˜“b’Š<ility’ŠBleā!’ŠHab‚ÕM‚Ī7’Šqilities’Šwleü’Š}b’‹ve ’Šcect’‹onsi„›Pś9ų »lйDßT ’‹drictions’‹Laurant’‹Red’‹Xless’‹^ored‚¤‚¬t’Œ+sƒ˜’Œ?d ’Œ1lt’ŒEme.’‹j t’‹3 p’ŒQ u’‰8e’‰}i’Š!ol’‰ cue’‰lhaped‚†Ń‚ū^’>red’8cencesģB‚ÉAĮ3Ņ+ƒ»' ’ded’jing’ps’u urn’Di’2ain’_reat„Ńp „ŠU‰Õ]’ŽA ed’ŽGsƒ“iĢ~Ć:’ŽMal’Ždlation’Žorie’Žjnue„|ၽ’)ist’.val’#ewsėßy’VedńA’[t’jver"’Žue’>i’oolėa‚ØF’"edą-‚.’6e’;ing’'ard’AritÕ† ‘ō‚a’ƒ`km’ˆ :p‘ų;2c‘łS)/d’Œg.#s‘ü1,f’"v’Ž t‘żo g’€% l‘’ j’ˆu qu’„K n‘õ"b‘śe‘žUi’Ww‘ž)hearsalØ.‚ŖR’’eims’’ymes› ‚“w’’Asō"„ž’’Xons’’Sed’’^b’’Gand«sƒŗo€X°.‡æL’“er’“mond’“ ard’“ness’“#h’“Rkety¬‚“{ö#‚’/’“{culous’”ng„Ø"’”i’“ue’“oden„Šv55™Zļ#’”Gini’”Mmed ‚æB‚ÆCW ’”ws’”king’”qlets“>ų,Ńqƒ‰%’•&ening’•,ple‚«u†ł’•Ns‚ģ.‚éBūO’•hing’•bing’•Te’•nkŗQģl÷Z’–!al’–&er ’”A55ght’“Xc’”!d’•}s’”} ng’’ub’•2p’”Sm’–+v’’;ario’• o’–tual‚•l‡%’—/d’—5r„?‚’’—Od’—Ur¹L©!‚Ņc’—od’—us’—{e’—[be°Ør’˜&he_’˜,ksÉg’˜Ie·!„ū^’˜[sˆ¦kģV’˜om’˜utsƒ§` ’˜zisŗ`,’˜ace’™ tic‚ŗ}Ŗ ’™7o6’™,an’™= eˆMļfß’™fs‚Š/‡‰Nfk’™ys·‚Ž)’š sq’™fkm’™lf’št‚×_‚·$¬D’šClind’šIry‡æ" žcƒ·; -’šg s’šmttes3’šs -e’šOa$ƒ›a’› ting‚5‚ż ’›7ly‚ųŽ+‡‘PR’›Lly’›Rs`’›XPRnd’›= gh’›osed‚¼1„ēL’œs„§\Ó ’œ)ies’œ/yĘ ’œ4t ‚d’š!qo’›u`u’™K6 m’› 3s’œJ yal’—;a’˜b’˜Od’œw’˜2c’›&t’™`ndes’š=peķĢEƒń[’Qng’Wsh’]i’Ked¬…#’žes’žnstein°^ ’ži’sb’ž.yƒĶp‚¶ž@ŸD’ž\lesłD…Š‚Ģ3’žrby’žwged’ž}s‚±L…’6 ’Ÿ"ed‰* ’Ÿ( n’Ÿ7sselant‚ @ƒōa ’ŸWsņ@‚‹(’ŸkdŗgĮd’Ÿed’ s’  our’Ÿqble‚ó„² ’ 8ning‚„‚œh ƒˆp¢1 ’ U ed’ [ingƒé|’ a h’ ztleö=ž  N’”s’Ÿ= i’ > n’ž4 b’Ÿ] le’  m’”xton’Ÿg’žVe’žbff’žPde’ Opert’”t‹b’o† ‚e’œX‚d8o‘ń /a’–A*i’” N(u’’!hĘ^ꁚ*’¢Uing’¢ZsŪ‚“ŗ5Ž{’£s ’£ifice’¢|ed’¢vament ’£ r’¢`kŖ5‡µP’£Ule’£OenedƒķEƒB ’£sly’£[d’£ynessģ8ŲM ’¤ ty†Źh‚‚ėM¢‚”A ’¤As‚”‚•"’¤G or’¤Us’¤<edś&‚Żw’¤{s‚’¤4‚‚d’¤[l’„nt‚삁Ģ@ƒ¢ō1źm’„Lt’„5ad’„;e’„Alow’„Goon…ҁåOäV’¦uineäE’¦g­°Y’¦+s™ ­_’¦?acen’¦Edius¦‚Ģ*él’¦kwood’¦es‘7ƒź‚å:’§ied’§ying’¦qn’§sf’§ režJ¾N’§YiconƒūP2’§5i’§_yr’§Surnineƒ„=ƒ˜’Øntered’Øcers„½p’Ø:sĪ‚• ’ØNd ’ØT e’Ø@ageō„¼^,-’Øxdust…ŗ2„‚4„żL`’©s’©ing„m’„‚i’©`y’§n2 t’Ø},-w’¦me’£~ d’Øb v’£; c’¤% fe’„/ke’„Ql’¦n’¦1pphire’Øu’¦Kr‚ˆ,”āo ’Ŗ@sęgūf’ŖTed’ŖZing ’ŖF dal’Ŗ`n…‹ƒŅ<’«let’«f’« celyĢ0ƒ;’«@ed%’«r’Ŗw n’«Etter’Ŗ:le‚øYƒŁ3 ‚½8 ’¬ s’«|ryĄV‡øf’¬ed’¬ e’¬%tī0ī5’¬Hism!’¬4n’¬Mptic¾æ=Ź;ƒ¦F’­y’¬oksųvŠ‚„]ƒž] ’­ bo’­'room’­!girl’­-s ’­3 ol’¬ylarµ(ƒŁW’­wbert’­}mann’­` o’®u’¬seme‚Õ} ƒĮ- ’®A tific’®; ceż‚läj‚‰O“-’®pndrel’®vrging’®|u’®`lding’®eoped’®ktlandƒšzĖx+’ÆGmble’ÆMtched’ÆSwled„°V‚“~’Æed’°ingźP’°"en’° amĶ,ƒ÷h’°(e’ÆYa’°>ibbled’°Dupulous’ „„RćP’°lpture’°yffling’±rf ’«T% a’¬\!e’°J r’®Gien’® h’Æo’± uķ(ƒ -‚Į ’±uing’±pedƒ„7’±{ch’²edƒŸwƒŚ ‚ŽX„Ž3’²6ed’²<s‚˜+-’²r’²Bt’²0son£qŽv„Œj ’²s…ƒc‚ś$ƒØ& „Ļg)3’³ s’³ary4’³%)3t’³cyĶ>Ųf’³RsÉE” ’³de’³jityN’³=4re’³ ond’³Wtion’³puråkš ’“6s’“1edˆŖlƒ‰D„‡”!’“Wing’“]s‡¤7xx…˜F„śL ’“{xxed’µsƒ½N))‘s‚Ņ1†”D}‚\’µ m’µ))n’“Qing’“ck’“<d’µ%s’µ+thingćs‰4’µwe‚:“I’¶ ed’¶ing ’¶z’µ|n‚š6 •B‚ˁĄ‚†D’¶Med’¶Sion’¶YsÆ’¶_ct’¶~niteūW‚ü=’·nessƒź.’·"ish•h-’·3f’¶A by’·e’·Ctzer’¶GdomĻA‚—R†Ē’·{ing’øsƒ „ŗk ’øsƒŖ^‡“U"9’ø2s‚‡6É ’øFble’øLtiveĮ8‚¤’økal’øqousK’ø8"9e’ø$ ation’øwu’øRiĆRčw’¹6sÖ~‚Ęn’¹Iists³0’¹Omental’¹`nelsƒˆ ’¹<ence’¹fix’¹K s’ŗt’ødƒü’ŗ7d‚„N’ŗ=e’ŗIion‚恤ƒķe„óU’ŗqly²Q’»s(ƒß9’»sĪzē’»,d‚ūH‚¾n’»@ce’»Flity+’»ant’»Li’»2eF’»d+v’ŗwious’» pent’ŗkaph‚¬hÕ’¼.d’¼4s‚õF’¼Ning’¼:e…š? %’¼TtlĻ‚Ź’¼yth%’¼een’½h‚«5 ’½t‚Æ ’½* n’½8 raléw’½>e’½TresŖt‚ĆoŌ†’µ1}‚\ e’ŗxn’“N c’¼F r’²Y- a’·I- l’¼j %t’½Zv’¶- i’ŗOparat’½vx’²ybastian’ŗequence’½pwn’½|ześ[‚™C’æy’æily„Ž,‚Ÿ}‡ž/‚ć@ ’æ?s’æ9ed’æE ow’æ3e³U‚ŗO‚Ö{ ’æwspeare’æqn‚ā ’æ} e’Ą ing‚‘ƒų’Ą4ness†˜^Qb’Ą:owŒ|œ/’ĄZd’Ą`sĪCƒ¶’Ązful’Įe’ĄfbleČƒ„ ‚ćz‚ŠZ’Į, d’Į2süaÕs’ĮNd½wĮ ƒ’X’Įgness ’ĮTe’Įmp’Įaing¶-’Āed Y’ĄKQbll’æ\d’Įm’Į8pe’Ąk’Į~ r’æbb’Į&n’Ā"wl‚’=‚…@5’Ćr’Ćp’Ć tƒ¤+‚Ų’Ć.l’Ć4vesŸ5ł’ĆPard’ĆVry„ź:ƒ/ƒ;’Ć:l’Će’Ć[rÉ"ég­DĖ’Äe’Ä$yõ3‚•)’Ä>s‚”t‚–{‚æ!’ÄQed’ÄWsq’Äted’Äzing’Ä]rt’ÄCp’Åver’Äeld’Ä*n’Ämmeringœ%ž^„Ė?ęu‚÷č[éK ’Åming’Åher’Åss&’Åbk’Åx tƒši‚č9ƒÆ ‡“/…š ƒ« ’ĘD s’Ę>ingö,…šlt’ĘJer’Ębné<‚]’Ēed’Ēing’Ęhtld’Ē t‚¤` é ’Ē9 d’Ē?red‚ä;„Š< ‡ēf„Āk '’Ēa n’ĒE e’Ēgs’Ē[ingv’Ē"u’Ēm 'w’Ę&o’Ę8 t’Ę2rt’Ę,p’ÅVd’Å\es‚ŒĘhņu„©8  ’Čo ll’Čieksƒ‹n ‚×+ ’É ed’Éing…š( ’É g’É/ ug’Ču i’Č]ank’ČcedęķCƒ˜P’Éeed’Éking”7š‹V’Źed’Źs‚Ē4ē%’Ź1ing’ŹerŁq’Ź7t!’Éqdder’ŹPt’Ź n‚ā ‚­L’Ź}ly‡]’Ćrƒ/ƒ; e’ȁvo’Ā/Y"a’Ź^! u’É= r’Å i’Ėy‚ÄrUU„dę¶]‚ØK’Ė_ed’Ėesƒ U‚ƒøO ’Ėken’Ģly’Ģness’Ģ k’ĖYilian‚Ńc÷$ƒėk ’ĢIs’ĢOwindowsņ{’ĢT e’Ģpledū1ƒš>’Ķ cle_’Ķgeƒ€i žHƒŲ0’Ķ4ed‚š? ’Ķ. ed’Ķ9t™i‚Œ&õ+ƒ™-‚€u ’Ķqs’Ķeed’Ķkifies-’ĶH h’Ķw n’Ķ_ismondoƒ­j üƒč’ĪBly‚ŅG’ĪHt’Ī< ce’ĪWusö%ų ¦‡œd’Ļs’ĻenõH…÷z’Ļ(y’Ļ"inessƒźzX’Ī]en’ĻFver’Ļ k’Ļ.l’Ī{houettedØƒÆ8’Šlyļ’Šar’Še˜oƒŽc‚‰T„ā}))3’ŠC))y’Š7e’Š=icity7’ŠI3pl’Šil’Š1onetto„Š0ƒ…’Ń rityģvųf’Ń#d’Ń(ing‚·6ķ4”g„X’ŃNton’ŃIness‚·}’ŃTe’Ńoy³pįl’Ńul’ŃCing’Ń-e’Ņ ularä‚Į?Ćj’Ņ@sƒĄ\ƒ¹Pl’Ņ g’ŅTs’Ńce’Ņ:king’ŅFner–G‚‚W‚‡’Óing’Óed‹;’Ó p’Óhonsƒßq88‚›6 ÓD…Č;ƒĢR„Ņ’Ógs‡€l’Ó{ing’Ómer‚‚+‚š’Ōs…–<’Ōt’Ōuation’Ó\e’ÓasƒÆRŽ<šw±V’ŌWeen’Ōiy’Ō]h’Ōcus‚«U ’ŌotƒŲx’Õ$d„?’ŅZln’ĻLX l’ĖSUUbyl’Ō,<t’ÓP88r’Ši7 m’Ī- g’Ģ1c’Õ x’Ģud’ÓV ster’Ó7p’Ķe’Õ*ze„—>Še„„-’Ö7ing’Ö=tch’Ö1ins‚)†čr²X’Öees’Öklfully’Öqns«„— ’× y’ÖMe’Öwi’×ullÆA”)ƒ–v’×Rder’×Xtingž{‚’i‚Öv‚Öe’Ų s’Ųryė  ’Ųve’×Lin’×^n’×wshed’×}ughter’Ų$y»xƒ·Ąh‚‘G ’Ųming’Ųgers’Ųsless‚ƒK‚™4’Łs’Ųy p’Ł$veéR›]’Ł2e’ŁMw’ŁGpt‚­Ē6”Yƒå ’Łvly’Łpest’Ł|sōp‚ƒD’Ś#y”„ŻqŒw’Ś<d’ŚBrs’Ś ght’ŚHppe’Ś(m’Ś6nking‚Ńj÷ƒÜ/‚’Ūly’Ūer’Ūw’Ū pingƒ›sēq’ŪIggish’ŪOmberousĶAP’Ū2o’ŁS e’Ś] i’Ų) a’ŪTu’Ūryćƒ„R’Ü,est‚Ž_’Ü1ll’ÜArt³·ųk’Ücing’Üill’Ü]ared„Ķ#‚Šv†č<,’Żd’ŻsƒŪ%@’Ż,e’Ż2ingą<¹0‚£’ŻNe’ŻSing’ŻYtenC’Ż8@l’Ż_tņ'†‡‡³’Že’ŽingóO’Ž%k’Žcked’Ž;oth§6o’ŻC i’ÜGa’Ž@o’Üxe’ŽayrnaµJ’ßsņ9ź’ß(ped’ß-sėw‚ēs’ßke’ß2p’ßHred’ßMtchedņh‚i’ß~edå\h’ąed’ßSa’ąeer’ąow‚Ӂō2‚ŅB§Bórƒ‰’ąKbing’ąQer’ąWieski’ą]sį„Ā+„‰4’įety’įal’įology’į#i’įFket–@É5’įhden’įbaģ‚ž( ’ās‚‹Dźć’āly’āened’ā a’ā#t‚æ(øcšBÓuĖ‚˜‚˜’ālsĖ!’āror’āgationĆ‚ē+’ćary’ć ude’ćcit’ć&t‚Öq ’ć>i’āaemnly’ā\d’ćTveƒ~‚ÉL„żC…Ä:~~„灒ä~~hing’äimes‚ż ƒƒ5’ä< at’äBere‡‚Jaƒ’ä!t’äHwh’ä body’ähowƒ’ä_aƒe’äbreØ]‚ŖF‚ć!’å-s³‚ś)’å3net’å'g’åAorousƒņh…ł}’åker™’åqn’ęthed‚ĮF‚ׂ…W„µo å ’ę/ s…š/0’ęCy’ę5 ow’ę)ierüg…™’ęhsN’ęI0r’ęmt’ędid’ę#es†ßˆCƒæ#„Ī\DG’ē.s’ē(eve‚·iśQƒ—* ’ēLed’ēRsˆ5‚Ÿi„MĢr’ētern’ēzwarkn’ē4DGl’ēW nd’ē"ght’čth’ēnpirƒ¤’čMtyß*‡õy‡C’åƒ m’čn u’ę{N r’åGn’ęo’įLc’ā<f’ćZ l’ącb’įnd’āPiled’čSvereign’ąEared’āVjourn’č`w‚ļ+ęs…“k‚… ’źdņ^ƒér‚ņ ’ź e’źks’ź!rows‚’ź' r’éwce’é}de’źnish’źIsmƒ”ƒų3’ėingÓ’ėk’ėr‚«'„v’ė1lyŁaÓ’ėKed’ėFc‚Ś'ī ’ėes’ė7al’ėkmen’ėPfiė;ƒāš2’ģsßd‡īe’ģ2s’ģ8tor’ģ$cleęT’ģFa’ģ^ral·r’ėxi’ģct’ģk’ģyulation‚°J‚ЁŃl‚‘j’ķ5sÖV  ’ķI t’ķ;dC’ėa’ģc’ķO n’ķ)eches’ķ/ll× †b’īinxes’īereē6öeęR¶bG°vĖ+‚¦Aū’īis¾ ’īoe’ī{ingĆy’ļz’īcty·b’ļiƒżg ’ļ.ual’ī]edÓc‚ńe’ļUe’ļ[ted"’ļ< rit’īQlled’ļat’ī:ces’ī@der’īEed’īKkenard’īWnels÷0ƒ”Qōs’šRly¢8’šXid’šgourõą#’ńed’ń s ’šmend’ńinter’šMashedƒÖ2 ƒŽV’ńI ed„£:„¦v’ń^nåaź+‚­q€’ņted’ń|s5’ńdke’ńOil’ņt’ńron’ńwrtż9öj’ņNed’ņSingƒ›’ņXwl’ņoy¤ƒ¤e’ņua’óing’ó eadę ’ó6ed’ó;ingĒ M’ķcCe’ņ5 o’ļw"i’źO a’ór’ń# l’ī h’óAutter’óXyƒ†^ƒ”r‚ĄA‚éU ’ō;sōE ’ōA re’ō/bble’ō5nder’ōOt +’ōed’õingœaę'’õ"s’õ b’õ(leƒ™<õ8’õJcato’õPksŹcƒ‡ Ž ł@åuß/’öe’ö ion’õr e’önat’õxgering’õ~inessƒš‚ę3ÉLƒ¶0’öTed’öZing’ö`lessĖRßV’÷ case’÷s’öfn’÷r‡/‚¼#’÷@k’÷Flsā\÷sņc’÷ged’÷ming’÷rp’÷amered“ ā"„„!’ų'_ƒĘ3ƒ«n‚ŲX’ų;ing’ų-ard’ųAs‰`’ųGd’ų!ch’ųizasƒq‚½/å £{©{’łed’ł%y„Ė"†åTÕ‚ęL‰ū8’łFed’łRled’łLingƒæĆ6’łXt’łed’ł@s’łing’ł+r’ł{ve’łlit­5‚–R‡*’śKiness’śQyŹr‚Ż$’śosÜyƒć4 ’ūs’śWl’śtment’śEd‚Ģ#†(’ū0tteÕF’ū6e’ūFs'’ū e’ūKu•'ƒ‹BƒčƒÅF’ūing’ūyed R’ś6 r’ū_' t’ųon’÷,i’üy’ö%g’õ5b’ų m’õUc’÷Ll’ūsveley’õmffŠmƒq’żfastly’ży‚ၻG„iƒ’u’ż9thy’ż-ing’ż3sōz†=’żfing’żaer ’ż?l’żd’żlm©cƒ‰*‚ģn’ž%l’žds’ž+plechaseƒšl¤‚€[’ž[medƒĀLƒÖ  ’žqed’žwing…˜‚Ź(’ž} p’’s‚“tącši‚˜m’’<ly ’’An’’0eotyped’’6ile6’’p’’P r’ž a’ž1e’žam’žUllated³‚āI“€-sŗƒ‰ƒ­e“€Ged“€Ming“€Sl“€Af‡Kƒ_03“€~ness‡¾ź«“ed“ing“!ups‚®H“'r¦R`“03ll“Hr“€jf“€3ck“Vtchedā„Į“‚s¢%ŸšO„“‚-s‡ˆz""ƒŲjƒ•1&“‚A""d“‚Mping“‚Glƒ•^—*“‚red“‚xingƒĢj “‚~pīo„¶F “ƒ#d„ó~÷g„Å& #“ƒ) e“ƒC y“ƒ7ies“ƒ=m‚ąOßO“ƒonessó} w“‚S&o“ƒI#r“ƒ p“‚3ne“‚ck“ƒuut“‚!len“‚'macher“„ve‡W’v„Ņh “„hened‚–WŽ\äv“„ed“…ing“„n ght“… n„¤ »ƒ¦~Å †÷O.C“…9 ly“…Er“…Kst“…?nessÜƒŗ“…|dJ“…Q.Ce“†leƒ¬iēb“†%ies“†+y“†0berr‚‹Iƒ‰hä,“†Ued“†[ingc“†Jng“…#i“†Fw“†ay“„bgglingƒ–j‹6“‡+ed“‡1ing‚ĄKƒČo“‡Nsƒ®‡˜M‚ĢA)“‡Tet“‡htched“‡7am“‡bngth“‡nwnź{Ļ“ˆ*ken“ˆ/t„dƒę‚ķ“ˆPe“ˆVing¶#ńGū\“ˆxedƒŗ" “ˆ\k“ˆ4c“ˆ~p“ˆJdes“ˆrngs“‰ ve„O“‰Ld‚™9“‰Re“‰^ing‚żm„åF  “‰zed“ŠingÕ\ƒŽ…Š“Š%ly“Šer“Š+ng“Š ll“‰dkƒė< „³“Šgdģ “Šme“Šying“Ša ck“Š~ggl“‹ttedH“†yca“‡t)e“ŠC o“‹u“‰ iꁫ‡Ń »Q‚łb “‹zing“‹tio“Œ y“‹ndedó7„²~ƒ„ …–O“Œ@ity/“Œd“ŒFpid“Œ4mbled“Œ/ff“Œ:ng“‹ickæˆ…z“sĒ…`’üRGa“‹<H>r“„ wo“\`i’’t6e“ŒV/ u“yle‚ņv“9×`ˆšZ“ped“vs½kŹ1ƒƒõ ī:Ł,“Ž*e“Ž/ion“Ž5itut“Ž$ance“ŽKt“Žcribe“ŽequentƒłDÉ“y“ iesƒū“t.“,tle“|ject“Žes“jaltern“Žmission„›^‚łw“ved“|ing…ĀWė\“ful“ed“ssˆĖ{SS‚¶u“Jing]“DSSh“.ce“Pk£4†åz//†ü[ :“‘//ly;“‘ :den“{ariaöA‚×0…i“‘/ed“‘5ing”M“‘;er“‘TicientåW„ƒAƒłe‚Ö “‘yed“‘ion “’ gest“‘tar•ØNøhģļ~« “’Bable“’Hed“’Nsˆr“’S t“’6cide“’<s“’uvant‚‘5ƒĶ<ƒĶV““1y““%ily““+s‚$‡“A““Uly‚©““jous ““7k““[len““pphurƒźšx‡¾V “”%s‚ b“”* r“”dÕ1“”8e“”Nonedč=“”Tm‚“Kƒ„^“”yeams“”urntāf†s„Żz  “•* ight“•$ess‚£!°T§w“•Iet“•Otoneń“•0 l“•Us“•b“•dayၺ0“–ly‚”<‚ŪY“–+argo“–1iliousƒ£uā9“–b“–7c“–Sficial“–Ystitionsœ\‚Ć.“—d“—rŠ€S“—.ce“—4es§#Ö"“—PsƒE„ū#$“—cd*“—i#$se“—Vrt.“—w*o“—e“—:liŚt‚Æ18“˜ . p“–^er“˜*remeŸN‚Žx …Ŗ !.“˜X lyĀ‡ū“˜ms‚b‚³ü,ƒˆ< “™d“™ s “™ rise“™ass½a…ˆv‚˜=ŁG“™Aed“™Ging“™MsÕc“™Sender“™toundings‚½ƒŗM“a»*“š%d“š+e“šal“š9iv“šeyed‰LN“˜^!.e“™( p“šNv“™zr“˜sface“˜Rcoat‚˜b“›"edĖ[„_“›5ded“›;se“›(ct“›An“›Xe“›micions ƒ>“^] c“šfNr“‘;d“˜08p“:.b“•o n“‘Zff“”km“’{i“’ g““~ l“›sspāNƒé“œys“œsedŹhžEė/ƒ™iśJćA“$ed“*s “0y“œllow“mp“rthy“thed‚ˆn€‘ “žed“|r“žtƒ—Lö7³k‡§z “ž1er“ž7ness “ž= t“ž+p‚™>‚Ļ_ö6“žW e“žqpt“ža“žwrved“žkll‡“O“Ÿ-nessœyƒŲo“ŸHing“ŸBer“ŸNng“Ÿ3ftē3ģ“Ÿ{ed÷l“ on“ re0“ž| e“F a“Ÿei“ o‚œ}‚ćUŗ “ Tcal“ Zze‡ś“ `iÖpˆ†„‘4“”ze“” esˆ† “”i“”-y“”eticæu “”3 ath“”Rhonic“”X p“ wbolĪ ¼}“”r m“ Nbil“¢ stem“¢nonymous‰Š'‚Æ$’ˇ]oh’čfy‡CPo’¾†te“'…`Zt’©3„mCa’Õ6„?]i“œ ƒ>u’ó^M\p’±1 ?c’Žgom’ŪxP)l“ *0!w“¢y’×& k’ą& n’ōT qua’¢O_¹t”AƒŠ;<“£gsčV>“£m;<le“£aernacle“£{ooed聎=“¤&or††d“¤:ed“¤+l“¤@ntƒĀƒŒP„“A-B“¤bn“¤hsƒŪS“¤n-Be“„ingē…õn„Ą‚Ķ/ƒō *E“„,ing“„&ed“„2s„Ž!J“„8*Ek“„Yl“„ e¢,‚ƒƒŖ²)“¦agra“¦gled“¦ nhauser»[“¦;sīxŹ“¦Mies“¦Sy “¦Ystr“¦Ar„8 “¦o e“§pedŹL‚å}īo“§!nished“§'ry“§-tuffe„•‚µr“§^s‹“§de“§ring “§xt“§Xselled‚ŠPęz“Ø'ered“Ø-ooedƒŒ ¢U“ØL ght“ØRntĘ.óq‚½“Øzy“Øuily¦“©dr“©nyŅqĶ“©2es‚“„ Sk“„_Jl“¤>b“ØXu“§ p“Ø s“©7x“¤Mi“§2r“©w“Ø2tt“¦n“Øovern“„{mperedóėd“ŖCing‚” ƒ‘ƒ‡m“Ŗ^s“ŖXingƒ‡H/“Ŗdr“ŖHchÄ/“!„æh “«lyóv‚¢`ŲC“«3m“«9phed…™j„œ)…‰\r“«Ving“«\st“«b\rl“«?egra‚† ‚åD “¬s‚Œ0‚‘q“¬ ament“¬%ed‚É^“¬+r“¬Fst²=ƒ›Eƒ¹“¬gsą“¬mation“¬Le“¬{t“¬ale‚š\„Ąc“­)derness”AŠƒr“­Is“­Cedēv„¶m((…8“­i((e“­oyƒšJ‚Ām“® ies“®y=“­u8bl“®f„ŗ.[“®+=i“®@or“­dacex“®F[ r“­Om‚×k¦fĶw“®ile“Æure ‚X“®ex r“«ztl“Ŗ|/a“­  mp“­/n“« dious“®yst“«.eth“Æ xt“«chnicalņ‚ė8Ļ? “° s“°ed…ö{“° kˆ°JŠ`Š`‹f“°9Š`Š`t“°*{nā>ƒƒH“°Ys‚œ“°_e“°micalųS‡£+‡ņW“±s„ŽI……\K]“±&selves‡žsńu‚ ‚Ō“±Ty“±Nies“±Zr“±IlogiansˆÕl‚S‚SˆŪˆŠ7‚A‚A‹  žeØN“² ‚S‚Sre“²‚A‚Ay“±,K]m“±ir“±An“²se“°satr“±po“± eö`éY“³t“²nedĒa‚›` “³ e“³ly‚Ė(®c“³<f“³Bves‰÷p‡Żwz“³^s‚ßL …ŖR‡”b“³w ing“³}s‘b†‡hƒ“³fwzg““k““ning‚¼Z ü}Ø$‚Ž*  ““W y““Qeen““F d““] t““Lst‹Ž EE„““"ƒn“µEEs““sr“³% ck“³He‚ą: ‚ĒA燶 “µObury“µUton„ä “µuoughly“µZnˆų^BBĶ<ƒóvƒĮˆ‚ U_“¶&s“¶ less“¶ful„€F&“¶,U_t€zƒó}“¶^thł  “¶O&gh“¶dsandb“¶s u“¶BBse“µ{ r“µI masŽ}ń;ƒ©n„É( “·Ds“·8bare“·>ingF‚ˆb“·mened“·J d“·stƒŌ;ģj 5“øe“øa“ø wƒę4‚ę “øFll“ø@ft‡C‚µ> “øbedƒ²G“øwbingļĢ+‡ŗRVW“¹out‚„E‚±…ų“¹,n“¹&ingv“¹VWugh“¹2w“øh at“ø}b“¹ neƒ˜a‚Šx  “ŗ t“¹zh<“¹Jv o“ø$5 e“ŗ us“øLiÕŅN“ŗFs“ŗ@ nderstruck¼T“² žeØNe“°A‹fa“µ„i“·bo“ŗ<r“ŗLu„§3“»$sé‚Źs“»Bing“»<ets‚‡ŪQ„Į,“»`d“»frRńK“¼ed“¼ingć?‚×d“¼ en“¼$lyģ$„·G„—O“¼Ming“¼Gl“¼St“¼Bed‚ötƒ±r“¼~_†łmn“½s‚ÕA“½ne“½!idlyēG‡ ƒšZō“½Ky“½@gling“½Etoret–ź$“½vped“½|toeƒŲƒņu“¾d‚äa’{Šƒ‚ŒF“¾@ed “¾:le“¾.an“¾Fter“¾4he [“½'m“¼al“¾ re“¾S t“½Qn“¼*ght“»Hck“»le“¾p“»*ara“»6beriusŚf99®H„3„ö5čp‡”3…²/MM“t‚¶|“Ąs“Ąb„Lƒī5“Ą.d³‘ “ĄBsśv “Ą4e“ĄHgue“ĄVic„„k""†Åj “Ąz""k±ī‚Ŗ'Ģ  “Įic“Įped“Įazes˜:ƒŒ+‚ųEĒ/š‚»‚Čwģ$“Įnure“Įb_“Įhoise‚ųL“ĮJe“Įtt“ĮPies“ĮVn“Āy“ĮDch“Į\pidƒŖ†—(“Ā\ed“Ābingƒ²`„£jƒ®=%“Āed“Ćing‚»Ü.ØI(“Ć %ch“Ć$jours“Ć*rneur“Ć0t…‹I«T… “Ćcards“Ćo n“Ćier’I‚ä\“Äing‰Õm‘“z“Įj o“ĄMMld“Ć6(u“Ćuw“ævgether“Į p“Ā r“Ą[ n“Āhss“Ą"m“Äy“æjad“æpe“æ|ilet“Ąkyo‘Mń'“Å9dø9ėr‚ˆw“ÅRed“Å?e“ÅWk“ÅLingŚ Ė0‚õ“Ę an“Ęen„³y“Ę mark“ĘsmƒėU‚¹&“ĘKy“ĘEies„^ !“ĘQed“Ęg ic‡\‚ “Ē n“ĒlingČƒāōBé“Ē2ed“Ē8ing“Ē=l“Ē,ing“Ē&ed‚‚5Ń Šj“Ēybe“Ē~ptionö ‚µ“Čd“Č"s‚Ó,“Č<ormed“Č(igure‰²¦< “ČBf“Čcri“Ēsaction“Č^late“ČdparencyšAõ“É&pings‚ē‚ŁA“ÉCled“É=ail“ÉIelƒ„s ]“Ęm!g“Ę+de“Čj ns“Ē i“Åfc“ĒTmp“Ény“ÉWv“É,p‚č2‚Ž~“ŹIley£(‚ļVŹm„ ‚‚: “Źns“Źced“Źiment“Źt t“ŹOd“ŹCcherous“Ź]sures‡½~“ĖDsŠ#‚ŸnŁ¼# “Ė\d“ĖbsƒØ;“Ėh e“Ė~ingĻ[‡¦/ “Ģly“Ģbl“Ģ  ulous8“Ģ/m“Ėa“ĖJe“ĖVllisų“f„›n™…Lƒ£7‚ĆY“Ķsƒģ“Ķed“Ķumph“Ķ&vial“Ģtbes“Ģoangular“Ģzckle“Ķmmed“Ķ pos‚Ņ=ķńƒ²% ‚–b “Ī d‚Øx“Ī e“Ī,ing恢p“Ī2bl“ĪHsers“ĪMville“ĪSu“Īd“Ī jans“Īop„Ÿ\ˆ;11ƒ™|‚ˆ'ƒÜX ļ…™[“Ļ=sE“Ļ%11e“Ļ7 st“ĻBth“Ļculent“Ļ+mpet“Ļ1nks„“ ƒ³z&“Š ing‚7“Ét],a“ĻPEu“ĢH8e“Š&y“Īw o“Ķ, iƒ‰\ƒÕ)‚Ėf“Šgs–9å7“Šyers“Šing¶(µo“Ń"ed‚Øq“Ń(an“Ń5id§ū@„¾66ƒŁv ±4ƒ¾: I“Ń]66ed“Ńc ing“Ńis§/„— “ŅsV“Ńo In“Ņquoise“Ń;b“ŃQkish“ŃWmoilź‡“Ņ[ck“Ņ`ree“Ņ$V r“Šaesday“Šmlip“Ńmbl“Ņfsso“Š[bes“Ńnisians‚ż~ś „€'“ÓUy“ÓPieth“Ó[nt“ÓJlve‚Ź3ēČ7‚ “Ōed“Ō ce“Ōsted“Ō!tch“Ōlight„ßv@@i“Ō\@@o“Óre“Ō.iŽrĪw‡ü{ “Õs‚£B‚ē&“Õized“Õyƒ™w“Õ"ann“Õ9ian“Õ pe“Õ?r†š ƒ"ß“ŗi¼T_h“Ä+‘“z0o“Æ#‚X0e“Š&‚7ar“©E‚;a“¾|['i“Ōbi w“Ņ|eu“æe99m“ÕWy“Ō~xtÅ+ˆų “ÖZ y“ÖTiness—C‚ĆA“Öxster“Ö~timatelyāM‘ž>ųN“×- ulterated“×2vised“×8d“×'bleßt‚Ų<ƒ„U“×sarable“×ycoming “×e“×narredēlĻV“Ų5tyė’]É0‚żK “ŲUanČƒ’ƒŸf “ŲplyU “Ųv scious“Ł trollableƒ’_“Ł n“Ųjmely“Ł,uth$“Ų[ le“Ł2o“ŲIhanged“Ų:ertain“ŲOivilizedź0‚v‹Līyƒx…£`“Ś'ingƒ°m '“Ś-and“Ś= oodŠ„*?“ŚC'st“Ślip“Śgrowth“Śneath“Ś"rate…“A“Ś[?er“ŪisturbedųĪWˆ“Ū:ducated“Ū@ nforceability‚Ś7ƒÅ “Ūsortunate“Ūmairś`‚×?µ ōJĖn“Ü(ed“Ü-ook“Üappy“Ü"eededĖ0‚Ŗj‚„G‚Ø"Ż æ“Üx ted“Ülon“Ürson“Üaform“Üf nteresting“Ü}versal„—V‚™aƒø‚GƒĮMŌ1“Żeke“Żknkņ1ä“Ž cked“ŽadingēB“Ż_ess“Žo“Żpi“ŻYawful“Ž-ucky‚ø‡’I“Žgved“Žmwnčkˆ† É‚Ŗ\‚‹2“ß ardonable“ßictured“ßoetical“ß" unctualityēM‚Ļ “ßiityķu “ßol“ßsonableąƒģT “ą ea“ąipe“ą#omanticžM‚äI‚†“ąTen“ąZlfishˁ×'ƒŠ “įtted“ą~iledš}ąF‚Āh “ą`e“į po“į$tained“ąNatisfied“ąyolicited“į)ullied“į. ympatheticģ^ż “ārnished“āsted‚ūg‚É,£“āFl“ā@dyģq•G’Y“āfoubled“ālue “āLi“ārr“āa“ā:hought“āaouchedÄJģE“ćBisely“ćHorthyˆ:\“ŪA d“ŁS$ c“Żi“Ž2 l“į4 s“ą) r“ć t“Ų b“Ūyf“ŻMjust“ŪEe“ß(p“Ü<h“ŻSkind“×Xa“Žsmo“ćNw“Ügainly“ß  necessaryЁp†ß=VV„f‡‰Fč‚™“å:tairs“å5et†ć‚“å#VVon“å@s“ådated“å)per“å/rightƒ„*†”((‡ß×‡Ū“ę&nessÓ;ŠõF W“ę((d“ę,less“ę ful“ę=r’[ƒ˜C‚ÉW‚ā/“ęxly…(y\“ęB We“ę~ual“ęring“ęmhered‚Ø ģc‚Œ7ß4“ē<ance“ēBed“ēHly“ēNterĢI…b“åY‚p“ćj\mn“ē y\ s“Ö`gl“×l“ēqt“×"mbrellas“ęrn‚ā‚Ś…>“čXlyß …ŠP“čmly¬?‚÷T“ét“éntinois‚́Įk„Š9 “é-d“é e“é3 ue“é'ois‚Ž‚Ć{::ÓnŽƒó  “éwty“éllla“éqshedH“éf::e“é} i“é`deleurĶy‚„b“źEous“ź@etyƒˆ5“źced “źKi“źinish‚Ń|~“źHn“éAl“źv r“črin“č^gue“čRcant“ė tń/„s‚§>“ė[sČD‚Ā]0“ėus“ėoed “ėal“ė{nŖ ä“ģ&rium“ģ,squezÖ„_‚ƒf“ģRs “ģXvet“ģ1a“ģLlum„…*×s“ķsšb‰W‚ÕF‰%“ķ etian“ķice“ķgeance“ķ%tured“ķ+us‚ŪHÅ|„·@‚×Zƒ•‚‡“īilion“ī outh‚³Ødłq“ī2s‰ū“ī8e“īFion„ńC||“īb||y“īLs“īm“ķsdict“ķyge“ī,ona“ķmb“ķities‚“GƒJ„/“ļ=ige“ļCments“ļIt“ļ7sel‚×P‚ȁ;“īh r“ķ1n“ģ i“ģf l“ļcs“ėUgetables“ļyxed©DŁƒ²T“šTing“šNe„mˆy“špsŪ(ƒÖ “ń s‚É!Ūk“ńa“ń"es…“xź “ń(i“ń=y“ńC or“ńim“ńYt“šve“ńious°¦zÕ'Ó‚ål‡ż “ņ$s“ņed“ņing“ņ* w“ņnna“ņille«YõQĶi‚æN“ņrness“ņwrå<¢u“óge “ņ}e“ólaä1ųCT“óDgar“óIe“ó?aigretteĪrąß‚ø=“ós“ōt“óynce‚·1„š “ō)s“ōe“ō/in“ótates¤7„ć~ˆq “ōcsŠI “ōi tue“ō]gin“ōwusŽ|›3„‚ ‚䁬3‚Ł%“õ4ed“õ( ble“õ:t“õ.on“õIi“õage“õ"contiœ9¼3‡ēP“öity“öl“ö e_‚‡gƒ±7“ö;ly‚©C “öAd“öPsecting¬8 “ńo c“ņKe“õhs“ō=ol“ō| r“ó* l“öV vi“ö&ta“šZbrat“óYn“šHands“ņlii‚čüV„ØW/4“÷gs“÷alessƒüh6“÷m/4ce“ųdƒŁ\Ń“ų's “ų,nteer“ų!me‚EC“ų 6i“ų8 lu“ųQwą†Ä)“ųtity†X“ųzgar“ł tures„“ļ;)e“öp?i“ė~a“ųWC o“łul¹eņ,‚“ “ł`s‚Ɂ”$“łfgon“łtner‚Ģ{ż ‚æe“śs‚§V ‚‡@ “ś. d“ś4rƒ™ƒß'“śNing“ś: e,“śT't“śnscoting“ś stcoat‚ä ‚ę.‚®C“ūed“ūing»} “ū nƒś,…‹n ĶcƒŽv(“ūGed“ūM ing“ūSs¢k¶>„É9 “ūs“ūyed5“ūX(k“ü l‚Ąv‚¶J “ü6ing“ü0ed®tƒ¢e“üSd“üYsą ƒ­@‚ķm¢?„œ…ų(i“üxed“ż s“ü~ing“żonĀ“żit“ü< der“ü_e“üsing‚Õ0‚Č‚Ło“żmour“żsrobe‚–9ƒ”c‹1ē;“žly“žed“žth™ß=ƒ“L“žKs“žPing“žEedķ Ļ Š4“ž{ies“’yƒ¢L“ž^n“ž$m“’rant“żyd“župed“żgbled“’s‚ķ{ƒŸDÜ“’qd‡Ąˆ<ˆJ“’kn“’wte“’ehƒ°‚ŽH”€&d”€,rsƒ€0 „ŚL/”€2e”€G ing䃤6ē[ ”€js”€ebury”€py<”€M/ch”€v er‚Łń‚Ņƒ½' ”8s”-d”3ring‚ŸY ”> e”_ing®y÷s”{ed”‚y‚€ ‡’M07”‚s ‹h”€ˆ<ˆJs“ż; n”< t”‚!07y“ü5l“śl,i“’!r”e v“ū9 ke“łzg”‚x“łZferŲs‚£;”ƒ st”ƒnłkėW”ƒ&e”ƒ;ness‚—8…Q”ƒXy®²3Ü›n‚Ņl”„g”ƒ~ess‚Śt‚¶ ”„ n”ƒxly”„ some”ƒredį#ńp‚© ”„& i”„Qs”ƒler”„Wy‚Ö5åa!”„\ r”ƒ^lth”ƒ@k”…ther”… veÜ=ÓO”…Aster‚†.‚¼U”…Wed”…]ingōY‚”…zdĄ!”…cd”…ge”† nesdayćd‚čv‚“ ”†:s⁆}ü”†Ning”†Ss”†@ k”†Yp”†5ds?¬N”‡ed”‡tƒŒ8‚ø8ˆĘ2DF”‡/ed”‡5s„Žu??ó\‡˜_{{“O‚¬]”‡fern€ …¦ 1…”‡^{{re”‡;DFll”‡R??nt”…!a”†qe”…Gb”†d”‡lst”‡igh”‡|t”‡Xptó…!й:…³Lƒƒ&”ˆpever”ˆvsoeverƒ'”ˆ|ƒƒ&t”ˆkrfčB†Ä‡ä[_”‰9everƒ„ …É9=”‰Rver„‹c ‚)”‰?[_n”‰X9=re”‰h ther”‰4el‡³N~~ƒüóYƒĢ+ē{”Š&per”Š+sš3öo”ŠMpedĢY‚Ū ¹ß„Q”Šf ed”Šling”Šrsų”Šwper”Š`kered”‹tleƒÕ4‚”h°H”‹Hd”‹NssŻI‚‡;”‹ies”‹oing„Üg:A”‹Bchapel”‹Tne”‹uwashp”Š~~ch”Œ :Ate”‹s”Š le”Š1m”ŠRp”ŠHned„¹$$ˆĻs††x‡¦A..‰“Ed‚T”..se”Œu$$le”Œ{m”rls…’\\Šp”‰ƒ'a” d‚To”‰n‚)e”Œ3pi”9\\y‚”{ƒ˜ ”qd”wrŽDĖKĶ~ƒŽ”Žr”Žst”Žning„÷må ž‹‘ ”ŽJr”ŽPst”*‚é )”ŽV e”ŽmlyļƒŲ]” ness‚Š<łIžT”&sü …ć)PT”+oughby” is”9s‚”?PTl”Žs)d”ful‚”rĪ”ed” kelmann‚£ ‡—N ”- s„U‡¾< -”3 ow”Asƒ«3 ‚Ó„Č”js”dedŚj…Øu ‚WP”G -d”^ e”‘ ter”c”pg”‘some‚‰ņE”‘Led”‘Ring»L±#ƒƒ,”‘nd”‘tlike‚ž{‚ß/‚ŃHƒĢ0”’d”’%s„ęB+1”’+e9”’?+1h”’e”’dom‚–>ƒŸ”’ked†ŽnˆŻ@%%Šŗ…C…”“%%out”“in”’qerž’ V†”“ …C…h”“0nesses”“6ty×ƒ“, ‰A”“<†t”e‚ l”‘P n”’M9s”ŽDfe”} cke”Ž"de”‘zre”‘Wp”“cves”“izen·&‚ź7++ƒā-BBm””cBBen””]++an„Ål ƒÓ„ `:@”•lyƒ›# ƒ£l„ƒN(”• :@ful”” ed”• ing”• s†ˆ.  ”•&(der‡S÷Gƒśt¶gL‚ųZ”•pland”•dbine”•jen”•vs”•|workē}”–d”–:lč\ƒŪl ‚B…Ń;”–Z s”–Ted”–`y‚ƒxŅ7‚£ƒÅ/”—sgŻN ‡ēn[”—+ s”— ed”—ing”—%manship‚s‚ē…śD]`”—fs”—`lyĒĪ[”˜edƒ§>ƒĪI’”˜ied”˜$y† K ƒĻt ÓC‚§t ”˜F ped”˜LsƒģY$”˜R hip”˜@ e”˜jt‚5… ”™y ‚f”—0[k”—l]`ld”–f;d”˜p$s”™ th”—e”˜n”˜ m”˜*r‡« ƒm…ń‚4‚8”™xnó~‚¦M”šed”šs‚?”™~‚4‚8ld”šnd¦5‡O”™"‚fr”š/‚?u”•R  n””imm”–@o”™r tton””Wke”šHven—Z‚Æ^”›d”›"r”›(peĻ$†‡"ļQ”›Os”›Iedń5ė$”›ledńPŃ7‚ŗ>”œ tched”›Uath”›qck”œnched”œsting߃„@ ßo ”œQ dĄw ”œW e”œding ”œj kl”œLgingŸ?É]”bands”s•SƒĘo”<sņqĶ1ˆĘ &”Be”[ ten”Uing”Phed4”a&t” n”$st‚ˆ~„ćW”ž(sƒ•ėK &”ž.ng”žB ught”ž<teƒŪe‚õ\r”ž 4i”žH&o”œe”›<ap”žiung”žoyŠƒ-­c”‚/‹hSa”?Šp*h”“o‰A:i”šN‡O8o”ˆ1…1e”žur$r”Ÿ,ww¬.§Q”Ÿvi”Ÿ|v” ičöäe” 'sä" ” ,rd” "cht” 9wned†ū}))ƒž 4” `))söāWƒžh” ~ow” ted” ying‚ņE …Ó4Ua””$ terday„ŽHHv””*Uas””=HHt” f 4ar””llŚƒøv””jed„“> ‡†<HQ”” er…ŃC%%ćs+”¢%%elf†ŁX‚”¢+sżƒŠc%'”¢:sŠ”a‹kŽf”¢*X‚r”¢HQng”¢@%'thk”¢N‹kŽfou””Cv e” > a””pieldūq¬x”£#angu¶4”£)p”£8thers”£>i”£ele_Œƒ<”£m»æthe%…,“Õlƒ"߃8tŒŅBĘ@„8aŚŗ‚?hƒ²c‚\i“¢C‚Æ$ˆis”Ÿ2­c‚Kw‘“K„I@oģ)›Wƒ*mˆRšGƒTbė–i†WcŽÆh–O„Vd‘a •gƒHfŗF•Q‚[l‘ē<’^…Wp”¢rky“`Y‚1gżbnŽÜ@‹zƒe’¢‹bƒRr“ē…bu“ł*„v“ ƒi7kŒ~wOj‘ģ2G#qŒ[CH_Œ„o0B1Œ† 2Œ†2 3Œ†f 5Œ‡Q8Œ†E4Œ‡6Œ‡+7”£VzŒƒk0” x”£sļminimal-http-server.c000066400000000000000000000062011476025525100351310ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-fulltext-search/* * lws-minimal-http-server-fts * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates how to use lws full-text search */ #include #include #include #define LWS_PLUGIN_STATIC #include const char *index_filepath = "./lws-fts.index"; static int interrupted; static struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_FULLTEXT_DEMO, LWS_PROTOCOL_LIST_TERM }; static struct lws_protocol_vhost_options pvo_idx = { NULL, NULL, "indexpath", /* pvo name */ NULL /* filled in at runtime */ }; static const struct lws_protocol_vhost_options pvo = { NULL, /* "next" pvo linked-list */ &pvo_idx, /* "child" pvo linked-list */ "lws-test-fts", /* protocol name we belong to on this vhost */ "" /* ignored */ }; /* override the default mount for /fts in the URL space */ static const struct lws_http_mount mount_fts = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/fts", /* mountpoint URL */ /* .origin */ NULL, /* protocol */ /* .def */ NULL, /* .protocol */ "lws-test-fts", /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_CALLBACK, /* dynamic */ /* .mountpoint_len */ 4, /* char count */ /* .basic_auth_login_file */ NULL, }; static const struct lws_http_mount mount = { /* .mount_next */ &mount_fts, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; struct lws_context_creation_info info; struct lws_context *context; const char *p; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server fulltext search | " "visit http://localhost:7681\n"); memset(&info, 0, sizeof info); info.port = 7681; info.mounts = &mount; info.protocols = protocols; info.pvo = &pvo; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; pvo_idx.value = index_filepath; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-fulltext-search/mount-origin/000077500000000000000000000000001476025525100335655ustar00rootroot00000000000000404.html000066400000000000000000000002271476025525100347040ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-fulltext-search/mount-origin

    404

    Sorry, that file doesn't exist. dorian-gray-wikipedia.jpg000066400000000000000000005141611476025525100404000ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-fulltext-search/mount-origin’Ų’ąJFIFdd’į•ExifMM*bj(1%r2—‡i¬ŲB@'B@'Adobe Photoshop Elements 4.0 Windows2011:02:22 09:59:46 ’’ 1 L&.(6WHH’Ų’ąJFIFHH’ķ Adobe_CM’īAdobed€’Ū„            ’Ą j"’Ż’Ä?   3!1AQa"q2‘”±B#$RĮb34r‚ŃC%’Sšįńcs5¢²ƒ&D“TdEĀ£t6ŅUāeņ³„ĆÓućóF'”¤…“•ÄŌäō„µÅÕåõVfv†–¦¶ĘÖęö7GWgw‡—§·Ē×ē÷5!1AQaq"2‘”±B#ĮRŃš3$bįr‚’CScs4ń%¢²ƒ&5ĀŅD“T£dEU6teāņ³„ĆÓućóF”¤…“•ÄŌäō„µÅÕåõVfv†–¦¶ĘÖęö'7GWgw‡—§·Ē’Ś ?ōŹźcÖ1”¬h­€Šö©4{GĮ<$¤p”2BJa ”L¦ILa<'NJc ÓĀb’–I$’RÅ2r¢’Ÿ’Šõ6}š Ó3č7ą8Į׃¢JQ#Ać B7×ĻŅ0>ņßūźÖµ¶³qŌ‚Dkv^MdI©ņŃńGäIMß_Bā ķR•œÜƒ³Ēk@=õƒ»ū*ėݳ ƒ€ )œØŪ“U>ė²ŗõ{¼ƒžü›x:*Ł$ه”Į©Ųńa»’SRļ­8ĶÓ‡ŚGw¹µ·ĆŸŅ¹U’œ™×:)Ŗ¦Ļ“ž@ÓłLńżÅĻa #®ē6†²’?œ’ēx vķ9%/e•œ‚żÓ  ķ¬ī³žųØ>’F§ŗĒ6 ēķsž`7čĶæIgU”ē¼Ėµ‰{yžŖŹė÷Ż—Ō†#aĶŖŗC*H÷_iž¶ß¤’ž’œĢKčs±/mąGŽ›˜C_üėR‹¤;™Ō€jęśK[^EŌ²ŗŲ×Pv– Ī;t;¬ŚŻ«¢ÅąņDÉł’äRRgióUh›ąžu–7ä}æõ*ę‡ļU0–ø’܋$’jSĘōęW&‘óī÷W¢Ėe{yLD’½mP ]_*³ČĻżKš²-.eļkæ{_†čII:}Į—Öė 1ŽŅ7 {;Ÿ Õ vkCF†¶ļxÓļ Ų?7č*­±µ»éjščtI4K2ķ½ĶŽÖļh,.e§śŚ$§®śžʶ³Č{÷•Šģ\×է՝‚~ł]'ØS’ŅõŸc~rYģwŪN¤ĄĮ§Wnž®åÕ·č7ąÖóZüūĢĢ<€<›ģożJJi¬|}¹ĄĆG}?ļېoῨŠģŖ¶ć†Ł{œa‘²ĒĮ}/ŃūÖf{Ϭu@ ?ņHvį<ćŽCKnĻŽMķžÓ’SŃQÖńšś­˜ĶÖ¶°g—XęW·wų/Kž»ź-Wõ·±Ķv4lh°nė?J[ż†[®Žt$ßÖ]F-ø¹4Ę1cŽņ>—·Ž’3×ó·hk@ŪÉ’9 ž­˜ĶĶcŚ÷ŗĆķWsż•X°4Č[ŖO¦Ź¬ ¹…Ž"CH#Bcžś’—nė°óŻĘ8ÜęūóV~mA¹6»tmy{œéWģ–õ wžkĄ®{]’E:·}° ‡8|A t$§6öX_Z@‘ŲŖļĢEŲZėŃŠ ńŸkµ…ĢčŃŗū¤ż é?Eßē”ÜāÜ·q.H׳))č~§źŁ®…’GÄĖOżÕź¹?©ŅŪ^Ƭ5Śų·ž©ui)’Óōö˜cO€ Ķ3ģ{³²H\ķ³’Aæō—¤Ł»Švß„²ń"’IyGW½’n·¶“{ģ-‰žQo·čžźJB×ĶŽżęTmõr.i×e`ģa‰ü•{¦t|ŪEłuV6ŗ§ht:5÷±®kę³jYx×a±¬°;‡5ņ9÷™żķÉ)ȰŽ‹”čueP=W3md7mŚH>Ś’{čæ{=«‰%¬ˆ³ĒŸēnZnŹÉlŅĖ+ žmĄg{ś^ķæł”ō>»\ż¦Ö3·é$ūœŚō;އ}ÅäǹŒŠßō½Ļś X¶ēŽŹŹØ¤Z÷Hŗ “½–Ū¾ŻĻwę«-ĖźwXė,ŗ†µĄ)a!Ä’Ā=®~’å1%62FŪq\4 N‡Üw ßēż.Øršé#sZ@ų1ģw¢Ņ^ė“9Ī> üßĢŁé§źõ+~ŁÜĒGbŅ×øiŽIN=Žmoyö‡ ?ŒØY}įf» éęV²($ęŠŖq7øDH’’’©Ö‡å9ĆIan¢;ų.¾ ä~Ø·õ¦†ųp» ©)’Ōōė4­Ń٤¹xžuķūuאū ¤÷ÖóćW°‘5G‹cļ Ėz§Hs²¬©ŽŽöøø“Ä“žė\>žéüśŅRż?«:ŠZÖcXśni%”•’)XėyŲoŁkŚ[em¹ö½ßø×Öļkmgļģś %½2ŚŖ}”īReõDCGÓŪgŃŽĘź5¤GJĻ}š,eõŸ{ĶŽ ²ZĻZ¶Õ[=›+ÆōąRS‡½ēSÆpźŽ÷¤5äCŽ£ū_õg=—=µ+s„9Ś4OęĖö#7šŲ]u퓹Ä5»ņ›īŚ’‘×WØ6±ŅēÜ Gē}/ĶWŗv×Ü\] ±ī!ž pgųMØķ§„aXX-79Õ}¢‚=®°ķez²¶_ü‡¹F¬™{öŪśrŅ(nG²Ąų»[a{[³vļŃ$¦ŌW[/cüĮoŖŠ$µĄh×+ō‰gśiiŌ“u™ żßź*xłM­¢ēÕ\¹»ĪŒ$ū­Ū¦~ć»}ŽVߓŒČ›%ŽÖ‘©×é$¦c8Č|˜#Ą Ś÷[øR6@˜?GŚÖż$öu+pŚ,§V±®{Ž­kvKĻųĻSҳž 5wu š¬cńÜ֖–=ĄŗHśBŗē;Ÿš~¢Jt>ŖČĖcĄ;\kŒZę—µŪ‡µŪæ‘łėÆÜ!Šģū>N>Æk^kH%Š5ŲŲmæ£ż’ęæįU¹%?’Õõżüä\ÖwÓÕo,Šd—¹ßD=Ģi~čüĶ›ģō’?bōc~qæYZ×_c^Fö‰tjAwŃnÓ¹®öæoöŅS@õjhi6:§ģ°ĄsZgMŠßüö±mĄź8ö?ЦēÕ3U¬i“ūšKéwķ+KFĶ›€i’ęĢ ņßÖS¦Ā÷Loqåŗ~čŚ6¹%!Ƶ8 Ø,'CeĻ-†æGaŪ·óßŗµ Ź+ČuŒĄm®pk['Gl‚ń]Īķu{ŽĶŹN”¦ĒōāH€Oͬ÷œ‰‚×ӘĖ,öVN×ŗ €ļfń?ÖINUnøÕ/h{D5ī~ AšĮiśߣ³żģ}ÖĄdiµ³Ūoņ½žÕgØ7:›Ż‰šąėqŻśG¶6¹Ä5ķ“ģżę} ßA> ¹Įļ‚Ą$䤧W«š±Ę>u…ļ€$ 0=ĶŃæį’P­db?#„ćēÕ¹ž .mv9°Ė]éūv]KwķśkžĢhvkė’AÕĀKÖÖø”ć0U„_–š7°›öµĒŃŗĻŅ~‚æ„źĀV’œ³”q^CššG¼¼·Ü%•³ł-ÆōŸKc÷©;Ŗē–5sĘčÖ¶Š›æ2 ¦ŚØmopcZk–ŌZDh!‘'üūšżłeaĒŚLĻpēcbJw¾¬geŁŌqö46ĶŅšŠŁ€ķ}›w}Ī]¼®źĆŽ©†Š.s  æźX»©)’Öõ6}š ™śÉŒFA°Iõ[«6čcĻęŗjžƒ~eõšĒćzgn¤Ļ XļĶjJ|źźŚ‹ ŸoŅGƒZ«¾×Vv5­ ƒķ:óš;Ķ[O C«ƒ06ˆŒĖŸė±e_Ua”“ŲšłĒŗĒ¤rJk3+ß¾ĆohDÆļ+¬ĻsšĘ4{7DA~žį“9SōČqü‡ē½M€0Č:8rŅń))µö\\ް_}k-`gŖxmĮ»iŗĘ{ZśæÓ3ü'üj®Śņ‘f-µ5·TāŪ$€ŁiöømŚ××ōv¹MŽs+±Ęīˆ£CønŽŽŽŸūO#ÓČäŌYU€4X×ouŚ{Ÿk*wčżOų“”äŽńfM¶7ų3Ś?źWAN6C±čy3[Ųn¤źV7Q®¶õlÖ0mÆķ·`{› «©Žõ1ś7ŅkÄi2<æ?_ĪIN ©ōØŹ¼ …¢4ik\,ž¶ķļżõN¬M–4¹ēh.tʧc}]ŗīś_Amå42& ‡VH12ĶĢnćōv’éEOŅČpŪ¶æn£]Ą€ó’M%:V«©āŲŃ 6[g?ł’ķ¤.Cźč*‡«K€ņ–1ß÷ÅÕīIO’×õ:’›oĄ~E“Ö čķdĆ'Ėžžµkś ųČ©uVVkkœ—ņ’SĒęŃiʍ”Ī Žu:xG½ßńmöÅÖ³S‹Äjī$ź¼øĻž¢ź/Ę„ę\eęvL™?Õl,¬śXǽĶa‡5Ę~;}Ÿėé$§Ģgµ­{šaĶDÖ’kżXˆ‰n”ģÄžnęė’M\}6–C=Ič?­ær©m5‡m}Ž·oų1ķƒńś,ž§éR¶m!¢Xē€ tq#ž/譞…MŁ_hČ“0^÷ „mt’]gāā_e€×X”ƂI¹ćū{m³’©^ĶéG&ŠéÕ”®¢5Ü6{ŪūŸ÷ō”ąf]»©eZ_Æf‘¼Įs¹ƒīßš¶°¾°åem©˜„ūVčŲ=¬.ż«ÜÖ’¤½źĶ-a}•6÷ƒ”phk@ś#Żō·}/żFµŁ’NĶŽmaŗ@O€k}»RS†Öc¹¹{Il: qŪķ?GŻ^ļķ¢7Ł–ēHg ø;¾“{óŲ¶- z4mõj; @-Ū»ūHĪčģ­žąk”„Ķ$»vļśI)ÕüV¶Ė,=2GœlŸóź­Ó©5Öāęģ.?G¾“Ļõ¾’·%?’Šõ*žƒ~EōWc·Xć€x Lś ų)IHKd±Œ BčU2ŗeO{E4±¶‘ ˆŚß@śkI#Gd”āߊØx>š »W“žē’UWoÕ¶V֚źįŽ” ņ5Ū.ÜĘūæ–õŃ5­h†ˆ°I%<ż]įūŻVĖ<>ƒ‰śV~bŗŽ’Ķõ6:Š6øĮˆžD­8L’œwō[½CpĖ|ķ„ŒhįøļżvÅcÖ±ßhvāL·_pĖp’¾«Ä&!%5F £@Cµ’w4īk·¤śƒžĒva$!ØÉŠJGS!2J’Ł’ķĘPhotoshop 3.08BIM%8BIMķdd8BIM&?€8BIM x8BIM8BIMó 8BIM 8BIM' 8BIMō5-8BIM÷’’’’’’’’’’’’’’’’’’’’’’č8BIM@@8BIM8BIMIL1 Untitled-11LnullboundsObjcRct1Top longLeftlongBtomlongLRghtlong1slicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongLRghtlong1urlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?š8BIM8BIM sj @ČW’Ų’ąJFIFHH’ķ Adobe_CM’īAdobed€’Ū„            ’Ą j"’Ż’Ä?   3!1AQa"q2‘”±B#$RĮb34r‚ŃC%’Sšįńcs5¢²ƒ&D“TdEĀ£t6ŅUāeņ³„ĆÓućóF'”¤…“•ÄŌäō„µÅÕåõVfv†–¦¶ĘÖęö7GWgw‡—§·Ē×ē÷5!1AQaq"2‘”±B#ĮRŃš3$bįr‚’CScs4ń%¢²ƒ&5ĀŅD“T£dEU6teāņ³„ĆÓućóF”¤…“•ÄŌäō„µÅÕåõVfv†–¦¶ĘÖęö'7GWgw‡—§·Ē’Ś ?ōŹźcÖ1”¬h­€Šö©4{GĮ<$¤p”2BJa ”L¦ILa<'NJc ÓĀb’–I$’RÅ2r¢’Ÿ’Šõ6}š Ó3č7ą8Į׃¢JQ#Ać B7×ĻŅ0>ņßūźÖµ¶³qŌ‚Dkv^MdI©ņŃńGäIMß_Bā ķR•œÜƒ³Ēk@=õƒ»ū*ėݳ ƒ€ )œØŪ“U>ė²ŗõ{¼ƒžü›x:*Ł$ه”Į©Ųńa»’SRļ­8ĶÓ‡ŚGw¹µ·ĆŸŅ¹U’œ™×:)Ŗ¦Ļ“ž@ÓłLńżÅĻa #®ē6†²’?œ’ēx vķ9%/e•œ‚żÓ  ķ¬ī³žųØ>’F§ŗĒ6 ēķsž`7čĶæIgU”ē¼Ėµ‰{yžŖŹė÷Ż—Ō†#aĶŖŗC*H÷_iž¶ß¤’ž’œĢKčs±/mąGŽ›˜C_üėR‹¤;™Ō€jęśK[^EŌ²ŗŲ×Pv– Ī;t;¬ŚŻ«¢ÅąņDÉł’äRRgióUh›ąžu–7ä}æõ*ę‡ļU0–ø’܋$’jSĘōęW&‘óī÷W¢Ėe{yLD’½mP ]_*³ČĻżKš²-.eļkæ{_†čII:}Į—Öė 1ŽŅ7 {;Ÿ Õ vkCF†¶ļxÓļ Ų?7č*­±µ»éjščtI4K2ķ½ĶŽÖļh,.e§śŚ$§®śžʶ³Č{÷•Šģ\×է՝‚~ł]'ØS’ŅõŸc~rYģwŪN¤ĄĮ§Wnž®åÕ·č7ąÖóZüūĢĢ<€<›ģożJJi¬|}¹ĄĆG}?ļېoῨŠģŖ¶ć†Ł{œa‘²ĒĮ}/ŃūÖf{Ϭu@ ?ņHvį<ćŽCKnĻŽMķžÓ’SŃQÖńšś­˜ĶÖ¶°g—XęW·wų/Kž»ź-Wõ·±Ķv4lh°nė?J[ż†[®Žt$ßÖ]F-ø¹4Ę1cŽņ>—·Ž’3×ó·hk@ŪÉ’9 ž­˜ĶĶcŚ÷ŗĆķWsż•X°4Č[ŖO¦Ź¬ ¹…Ž"CH#Bcžś’—nė°óŻĘ8ÜęūóV~mA¹6»tmy{œéWģ–õ wžkĄ®{]’E:·}° ‡8|A t$§6öX_Z@‘ŲŖļĢEŲZėŃŠ ńŸkµ…ĢčŃŗū¤ż é?Eßē”ÜāÜ·q.H׳))č~§źŁ®…’GÄĖOżÕź¹?©ŅŪ^Ƭ5Śų·ž©ui)’Óōö˜cO€ Ķ3ģ{³²H\ķ³’Aæō—¤Ł»Švß„²ń"’IyGW½’n·¶“{ģ-‰žQo·čžźJB×ĶŽżęTmõr.i×e`ģa‰ü•{¦t|ŪEłuV6ŗ§ht:5÷±®kę³jYx×a±¬°;‡5ņ9÷™żķÉ)ȰŽ‹”čueP=W3md7mŚH>Ś’{čæ{=«‰%¬ˆ³ĒŸēnZnŹÉlŅĖ+ žmĄg{ś^ķæł”ō>»\ż¦Ö3·é$ūœŚō;އ}ÅäǹŒŠßō½Ļś X¶ēŽŹŹØ¤Z÷Hŗ “½–Ū¾ŻĻwę«-ĖźwXė,ŗ†µĄ)a!Ä’Ā=®~’å1%62FŪq\4 N‡Üw ßēż.Øršé#sZ@ų1ģw¢Ņ^ė“9Ī> üßĢŁé§źõ+~ŁÜĒGbŅ×øiŽIN=Žmoyö‡ ?ŒØY}įf» éęV²($ęŠŖq7øDH’’’©Ö‡å9ĆIan¢;ų.¾ ä~Ø·õ¦†ųp» ©)’Ōōė4­Ń٤¹xžuķūuאū ¤÷ÖóćW°‘5G‹cļ Ėz§Hs²¬©ŽŽöøø“Ä“žė\>žéüśŅRż?«:ŠZÖcXśni%”•’)XėyŲoŁkŚ[em¹ö½ßø×Öļkmgļģś %½2ŚŖ}”īReõDCGÓŪgŃŽĘź5¤GJĻ}š,eõŸ{ĶŽ ²ZĻZ¶Õ[=›+ÆōąRS‡½ēSÆpźŽ÷¤5äCŽ£ū_õg=—=µ+s„9Ś4OęĖö#7šŲ]u퓹Ä5»ņ›īŚ’‘×WØ6±ŅēÜ Gē}/ĶWŗv×Ü\] ±ī!ž pgųMØķ§„aXX-79Õ}¢‚=®°ķez²¶_ü‡¹F¬™{öŪśrŅ(nG²Ąų»[a{[³vļŃ$¦ŌW[/cüĮoŖŠ$µĄh×+ō‰gśiiŌ“u™ żßź*xłM­¢ēÕ\¹»ĪŒ$ū­Ū¦~ć»}ŽVߓŒČ›%ŽÖ‘©×é$¦c8Č|˜#Ą Ś÷[øR6@˜?GŚÖż$öu+pŚ,§V±®{Ž­kvKĻųĻSҳž 5wu š¬cńÜ֖–=ĄŗHśBŗē;Ÿš~¢Jt>ŖČĖcĄ;\kŒZę—µŪ‡µŪæ‘łėÆÜ!Šģū>N>Æk^kH%Š5ŲŲmæ£ż’ęæįU¹%?’Õõżüä\ÖwÓÕo,Šd—¹ßD=Ģi~čüĶ›ģō’?bōc~qæYZ×_c^Fö‰tjAwŃnÓ¹®öæoöŅS@õjhi6:§ģ°ĄsZgMŠßüö±mĄź8ö?ЦēÕ3U¬i“ūšKéwķ+KFĶ›€i’ęĢ ņßÖS¦Ā÷Loqåŗ~čŚ6¹%!Ƶ8 Ø,'CeĻ-†æGaŪ·óßŗµ Ź+ČuŒĄm®pk['Gl‚ń]Īķu{ŽĶŹN”¦ĒōāH€Oͬ÷œ‰‚×ӘĖ,öVN×ŗ €ļfń?ÖINUnøÕ/h{D5ī~ AšĮiśߣ³żģ}ÖĄdiµ³Ūoņ½žÕgØ7:›Ż‰šąėqŻśG¶6¹Ä5ķ“ģżę} ßA> ¹Įļ‚Ą$䤧W«š±Ę>u…ļ€$ 0=ĶŃæį’P­db?#„ćēÕ¹ž .mv9°Ė]éūv]KwķśkžĢhvkė’AÕĀKÖÖø”ć0U„_–š7°›öµĒŃŗĻŅ~‚æ„źĀV’œ³”q^CššG¼¼·Ü%•³ł-ÆōŸKc÷©;Ŗē–5sĘčÖ¶Š›æ2 ¦ŚØmopcZk–ŌZDh!‘'üūšżłeaĒŚLĻpēcbJw¾¬geŁŌqö46ĶŅšŠŁ€ķ}›w}Ī]¼®źĆŽ©†Š.s  æźX»©)’Öõ6}š ™śÉŒFA°Iõ[«6čcĻęŗjžƒ~eõšĒćzgn¤Ļ XļĶjJ|źźŚ‹ ŸoŅGƒZ«¾×Vv5­ ƒķ:óš;Ķ[O C«ƒ06ˆŒĖŸė±e_Ua”“ŲšłĒŗĒ¤rJk3+ß¾ĆohDÆļ+¬ĻsšĘ4{7DA~žį“9SōČqü‡ē½M€0Č:8rŅń))µö\\ް_}k-`gŖxmĮ»iŗĘ{ZśæÓ3ü'üj®Śņ‘f-µ5·TāŪ$€ŁiöømŚ××ōv¹MŽs+±Ęīˆ£CønŽŽŽŸūO#ÓČäŌYU€4X×ouŚ{Ÿk*wčżOų“”äŽńfM¶7ų3Ś?źWAN6C±čy3[Ųn¤źV7Q®¶õlÖ0mÆķ·`{› «©Žõ1ś7ŅkÄi2<æ?_ĪIN ©ōØŹ¼ …¢4ik\,ž¶ķļżõN¬M–4¹ēh.tʧc}]ŗīś_Amå42& ‡VH12ĶĢnćōv’éEOŅČpŪ¶æn£]Ą€ó’M%:V«©āŲŃ 6[g?ł’ķ¤.Cźč*‡«K€ņ–1ß÷ÅÕīIO’×õ:’›oĄ~E“Ö čķdĆ'Ėžžµkś ųČ©uVVkkœ—ņ’SĒęŃiʍ”Ī Žu:xG½ßńmöÅÖ³S‹Äjī$ź¼øĻž¢ź/Ę„ę\eęvL™?Õl,¬śXǽĶa‡5Ę~;}Ÿėé$§Ģgµ­{šaĶDÖ’kżXˆ‰n”ģÄžnęė’M\}6–C=Ič?­ær©m5‡m}Ž·oų1ķƒńś,ž§éR¶m!¢Xē€ tq#ž/譞…MŁ_hČ“0^÷ „mt’]gāā_e€×X”ƂI¹ćū{m³’©^ĶéG&ŠéÕ”®¢5Ü6{ŪūŸ÷ō”ąf]»©eZ_Æf‘¼Įs¹ƒīßš¶°¾°åem©˜„ūVčŲ=¬.ż«ÜÖ’¤½źĶ-a}•6÷ƒ”phk@ś#Żō·}/żFµŁ’NĶŽmaŗ@O€k}»RS†Öc¹¹{Il: qŪķ?GŻ^ļķ¢7Ł–ēHg ø;¾“{óŲ¶- z4mõj; @-Ū»ūHĪčģ­žąk”„Ķ$»vļśI)ÕüV¶Ė,=2GœlŸóź­Ó©5Öāęģ.?G¾“Ļõ¾’·%?’Šõ*žƒ~EōWc·Xć€x Lś ų)IHKd±Œ BčU2ŗeO{E4±¶‘ ˆŚß@śkI#Gd”āߊØx>š »W“žē’UWoÕ¶V֚źįŽ” ņ5Ū.ÜĘūæ–õŃ5­h†ˆ°I%<ż]įūŻVĖ<>ƒ‰śV~bŗŽ’Ķõ6:Š6øĮˆžD­8L’œwō[½CpĖ|ķ„ŒhįøļżvÅcÖ±ßhvāL·_pĖp’¾«Ä&!%5F £@Cµ’w4īk·¤śƒžĒva$!ØÉŠJGS!2J’Ł8BIM!yAdobe Photoshop ElementsAdobe Photoshop Elements 4.08BIM’į9ohttp://ns.adobe.com/xap/1.0/ image/jpeg Adobe Photoshop Elements 4.0 Windows 2011-02-22T09:59:03-05:00 2011-02-22T09:59:46-05:00 2011-02-22T09:59:46-05:00 uuid:390A2CF4933EE011A1CECC646E904B0B uuid:3B0A2CF4933EE011A1CECC646E904B0B 1 1000000/10000 1000000/10000 2 256,257,258,259,262,274,277,284,530,531,282,283,296,301,318,319,529,532,306,270,271,272,305,315,33432;9E91B447728BBDD1F7CA9643BC709EC1 561 844 -1 36864,40960,40961,37121,37122,40962,40963,37510,40964,36867,36868,33434,33437,34850,34852,34855,34856,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37396,41483,41484,41486,41487,41488,41492,41493,41495,41728,41729,41730,41985,41986,41987,41988,41989,41990,41991,41992,41993,41994,41995,41996,42016,0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,28,30;E86F79C357B4EA7EF2983F70ECC7391A 1 Gray Gamma 2.2 ’āĄICC_PROFILE°ADBEmntrGRAYXYZ ĻacspMSFTnoneöÖÓ-ADBEcprtĄLdesc iwtptxbkptŒkTRC textCopyright (c) 1999 Adobe Systems Incorporated. All Rights Reserved.descGray Gamma 2.2XYZ óTĻXYZ curv3’īAdobed’ŪC     ’Ą L1’ŻG’ÄŅ s!1AQa"q2‘”±B#ĮRŃį3bš$r‚ń%C4S’¢²csĀ5D'“£³6TdtĆŅā&ƒ „”EF¤“VÓU(ņćóÄŌäōeu…•„µÅÕåõfv†–¦¶ĘÖęö7GWgw‡—§·Ē×ē÷8HXhxˆ˜ØøČŲčų)9IYiy‰™©¹ÉŁéł*:JZjzŠšŖŗŹŚźś’Ś?ō­6ĶAß ¾;W.™øųu9©—O»5+¾n9€?Fjv:e„4ß|ŌĶĒ(Æcżs e0é¶cą2Ą(§/¦ŻŽjR‡+76ĶĒ}ūę eS¾jtšĢFŽ…sx£QņéŽÄDĪ× ų(©œŠ%”oɾģVƒļĢ7Ųļ˜žŁ€öšĖ¦łD ÷˦YaLĆģę§\Ŗm\°?Ā¶9ŗ{åõĶÓ1>6Łd÷Ķ”iż™©˜Ó5O†m¼3ułfę3V£+æO§.øß»,Šué”:o÷åPf=q¤Ņ¾ż3röĻ’Šōø9töśrĄķ—ĄuīsqÆ}³ųf+AņĖ„7ŹÜū ŗ}Ł€ļ÷ę„G±ļ›ĆĄuĶOĒ)#cC昮õļš†æĒ(ŒŌ#,Įæ®ŽŁ€{f#bsuŹ Ææ†]r»S5LŖf„7ė›lĆż£•śņž,ŌĶOö³PW¦lŪš„—žtĢkÓæŽXéņĶA”FōĢi^™}Īm»usSzę;÷śseŠę?†ožQūxeŽŸ>™TĢ+Ū56Ė=Žcµ2zę§|£S¶U(źyC1÷镶Ōļ Žł\Ī’ŃōŠdfĆ/5)Ó/·\Į|s oš™©LƘĖć·šŹ"½²Č={ꔜ2Ø{}Ł__lŖ ÜiŪsß1Ź|Õģ2™‡*64> ŌeUžy]³f¦Vje‘°šŹŁf½s~ŒŌū³Sū3»ę?,³^ż3SńĖ „r²čr€`MMA; t˦jvĶ\Ōvjm×7æį˜ nŁ·ńŪĆ,ŒÆžmŗōĢ3W7l”–OߕŪß(küröśr¼k•˜ōńƚ×Ū6Ō®7‘šĻ’ŅōēO|Ō7 {’ p9ØIö˦U>šę¦ŪuĢkCMφa_ Äxęėņ÷Ķ׿ѕC÷wĖ=:ż]²æĢęļÓ6ūžł©”G|ݳfé¶QŪzuŹ Ó®Usf9ŗåoLŗf„>Y¶'å˜ō;^’Nb7Ģ2·®8ūž}¾Y@e÷žŅ@źh:eóo÷ę†jļš›œĆøī3S56ÆZę©™…i”+ß6jņŹ §¶X4Ģk˜ŌōĢ6Š>y}?ˆĶ•Z{f=1¬6Źķ\ms’ÓōéżYd ²ĶJĆnÕĖ m›Ś™ŠŒŖS§LŌĖŒ¢æM3| ßŽ’Öõ÷ĖjęĶÓēć—Je f÷˔雾Vc×)¾P ösčk›+¦Qß1ę§ß”|;öĶLŽž]zf#jåoóŹ#ß7l®Łˆü2ˆļ›ē±ĶMóuŪq˜ŽķAŪ*›ężYc¦_L¹¾/Ÿ2śęŪĒč˦5«š›~¼½ŗciķ”Iķ–k\ÕßOߛ¾jöŹĢzüņŽō7·l߯/n¹«]óo—Ś™Cß1fč2Ŗ+›¾7lŖå’\ßN’×õ Ķļ×( ²śmć—Ä}9TĖ9@mš„śóš›Ó1¶6™©ß5ʦł@żr’ ¢7Ź9©Ū7L£_žQĶO£*™ć•_»(ƒįņĶŠS1®]sęūrśūffvĶķŽży‡Ė/1ÆLŪ›0D}ż³n{åP’fU6ß+n¹Y‡‰ķ”ŽŁ_#”6­s|³|ŽXńĖ=³W|ǦjęŲõĢzeWż¼¬a2z —Lœ·åQAʝÆÅĖżŽ^’NQŹßĆ?’Šõ¦…‰©ßb*h~Ž™t  éŽ9Ahi—O»1¾ŒŻżņ©×¾l£×lŽć|Ŗ mųf#5vöŹ=j6Ź=s­ów÷ŹżYDf÷Ķ_ķĢFŌŹżYYYG0Ģ6ĢwĖͶ_źĶM³Peōś;eųS5~’ŗō'¾:™F{f>²†c•׮ٱ¬ Š·|„@aŠeöń»W¦Ē/¾Qé”wŽCn; ³\­¾y«—Pq¬$.…*ūÅ*IaMØj8ļģŲ„|2‰Ū1;’ Ę“Ķ_l£Lݲ±¦»ćwĻ’Ńõ5FQ§Ļ,eęŹ=rūemōę å{~9Y©įÓ( Ō9]ņčĘåļŪßaæ|½²ŗōŹń®QŹĖ­rūyF™²·šŹ®l­†XĶ\¼ÕĖX9u9¶šĖĶQÓĆ0Ė *@=:åxę3~9_.™Gl¢vƚ™Dm·Šr»uŹÆŻ”O†WĻlŖż9e€ *Ā»šń?k³†n+³7._ˈ§Öž°ą-SH;؏€'ŅtīĒųdų±šŖ£ÉĄOŲU53߃Sćžo‡ƒņžaޜ`ī@RĮ[rH#©هŚĒZµPš|GĆ}›oõŁ`°XŃŗ’ĆŃšŌ ³€$”  {ŠКbÕŹå½+B3—Q_sß*§·lÄę'+|Æ£?’Óõ8®mŗę”ĶO»1é›Ū¶je“½1“ßųf„2©÷åž¼£^§¦QĘ:»ø‚MØqæˆĖ®łŽV’NW]³²½±’Ź‘Ø.x‚ĮAÜ՘Р³sŲWnD…æ,Ā€mÓŪ6łG7}²ŽVnŸFfķęŹė—›ųf’:fŪ,Ÿö³Ųå×o|¾^łdųf ō ¢Ł|²¹f ½1 ›ū;gTøš8dmÕ‚±Ź~#…žvņŻØ&K°w J–> Ģ)’Ę>xZߙS[¤ö–W—i#˜ĆGą£1SžI\/Ÿó&ę9jö+é€ĆźŃ0–BŌųOŖ U߬~©žNøüČÕdŽdm$°eŽŽ•“§Øó+¢±ćčs’#Üłē\ŽßזĀÓH…†÷2ÜI3:Ēńm– Ž|Ŗßń£q<¶×®&Ī[„”œæl”¹ß¦°¼vV÷+N3FŽĄv,”ˆś+ŠI VU ”› &„Ö™S»¢”åÉūģ\)ü&Ŗ=rŌŲ3 “µH^Ē3̱‘^D׎ōģ é%ŗĘ±¬‹8ŒŽŌßbĒ”ėū¢ø–Y–HØčō]Ǝ4 Ö«šŌāęŚPÕGIų˜V”øŹŠķ c™¬œ9£r½*ъĆ*Kț£tĒōƳ*üLh*ŅMć›7źŹ'Ć6ž9Uß/¾VlŗöĘ<˜Ōń” uÜÓ_ ŗŒÕĶĖÆl՚āÖČ«ttācŽģζ²³ˆĄYeŒĈƐeįœšIö8`˜lŽč4²?īĀJLóNå™"`Š*ńį3ś‹©ĖÅOfLF1¬3Rb@}1ȆB#㨑cųĒF_·š§āŪ Ōµ°Ņå™g˜“—ŅQ$0FDø?eXEčĖéqōaoåUĆ;{®^ķŲM,® Ֆ(āQš€¢¾œh“//²ķźKĖ÷ŸŻŽ¹»×žE–hܬĀ[ˆYPJāD¢“‘²4QŸLzGŸ%høzn’!عó—ŌŽī94Õž’ā’¤}žk'¦(Kqgąķšr烓ϨŲ[‹+uĄ®fEfv$¾Ä±™ŒŠäü<½Fõ9ąą„„F”±u-Wu Ā•‚±ÉĒz% ŸĻ–µĆ3źķź¹ųwW„Ÿ kū_b žKSď…9еzž×+µOŚ\ @ƒŗŌūtū@5HėŠ}ėJ”Üž4̳ņ 4P{Ļ‡€šĒG!aR)_óšźę®żwĢӖvė°= Ę««W‹M‰ū㽿ŌØĘšo’ÕõFVł…zżņČb3m›æ¾QŠ·†jö¦nžŁĻ*“r¶Æ\Ŗ#ČļøŪ¾]GŽŽMę­~]Ā+ņ)!i}9äžI#X”«7ØDQĢģ«Ēćų~ų°§YŌ5䄣ėVös0bæPCŖ³š[—’¬Å8|1ĆĒ zåʎשm{­®·wź2›yīzģe’ą@Ī…įT_“œ[K—žŻZŅĘāį"äљ “‰¤ £^_ćčpåö1¶·¦Y!‡ŅyŲńš%J‚Jąź¤āܤzÓĒöZOļ=5m„¶¹‘£V†#fē0)^“n±v?¼wŸM¦’uż©9Ié„[żežxncXL‹RŖTÉ2 qįvOIźßģ~Ā!oØč€ÜY½%»ŠŹŠX4P1‰4Š«G#ā–Wų¾&ŵ GP±Ō=9”k+yQZ¢¬o$Ź®ź‹_ZG¹?æōÕ¤ķ?Ś„)Ø$ŅJņA#!XÖŽT)äÕO4 ÅJ8•$ż™†VŸ¦ŻžŽ]6}>+ˆa@Ŗ}yr”53Ø#SSżē.|°ĀįbiÖśļRhcxµ²z>‰bjĄóŠi_ģśP¤jßp~O2h—…eXfŌżZ¢¹ŽK€ĄD—œq„OŲft’ŠS ķ"ŌPE¾ Œj(¶óʱ: mĮ`Gh]AkvĄ+ÜČ©Ä}„dց$H’ÖH’ĖĮ¶ńCIoPŪ3<$ČTŽķ-$ųvė5Æśų:-1ˆĒÄsˆ0u m^1ŽŸ“ķ袒6 ŽåB4 č}½TÅĆåćŽ{Ą£ƒ8Ešā±?·šž@žśė…K2š‘^¤xC!©ŁxŸšøõ¹—įQZµhI”%MM+Ķ~/åä¹W±Ū';™DԘ„J·ĘõMˆ;+.—Ī FžIŲŽCźŠM0;‘³¢“]kžķĖ—Ģ· •t¹c@„¹]Ķ @Ø«HM̟gāžļŗ® Ģ†ęX-V@ ¤1¼¬µÕ¤”Ę?g=µƒ-ć9Ėu=Ōėń(•Ö5č–ėSżefĮImi†d…BI2·"æ\\ĪŽły€Ž¹y’ÖõGzf„s—”: ę®’<¬ŪåkŠu8Ęz7¤×ø„?^cČR»uØė¶żöÄ®%ąµ D„ĒpH¦[¹ 1PH^jØ  ļĖ—¶¶›ÖWu`і2(GŠv#ē€|ĀålT‚h“ĄīłD‚œæÉØ’‚Ä“fq£ŚJńZץ­;žø&hyˆģhÉćÄl““q?ĢŲZ¹’(ģÜ)r“ņaПM ŸŌSµ·eÕ9“АØ ~µĮ—J¬¼ÕJ–4Ÿ rū?kq'6 – hPnI­95*TķŠG#*|MNx’­Nōė×)™R?E”Ž Äq4AS׿|Nš–Ņ^D*(`CČŖ~š`}oŌŽīĀeŁ£b*7ūsŪÆbpążÆlFY”Ķč“W›įZ }8·¾VU~üß«+ÆM²»ūfÆūyUķ˜će‰ĒŠü6öÄķM-ŠT“V©?ėXœłžŅ;Æ/B²Aq ° Wć§pz£ŗœåWšzĮ©i„®’;KuFĘ –…ąˆ®øN>ŸĀ“|2ĒżåĀ:<ųÉ<ŌtéKšŽK=>PÖ¶h €!#*Z6‡$~\%dXäāˆųųõ䵖“z<’,Å ”aĄ¬€ū\$i“ܤHłČ±āŗT¶— wØB±ĀyMō¦PJĶ"p7³J?Ø$Ky•Yłói½5le—™‹É<-µ'!„iÅy“†S'ī"’'Œ¹äMĘHųódų³#L.õģ’,üƒ=ćr+ĮйyX!y8lŹž«żµĘL=;£u.„søˆ ”FHąsø$–8m›’Fō½ż®<ž,tzv” ŤGu ­¬q$q”*?Øbø=ßė‚V=a}Ń!ÓcŒžķse‰w_åh¤į’.³ŅńX]ßÉ%¼%J£0Ž µMBÄ'pAnżL=HŃm);D²^8żĢ³uŪ„.\ĢŌ§Aq’˜¼ža±·b>ŗ­+Ń^HĶ\ŠWīVKIXx3£`aę9$…—NÓåšŚæ½‘‚Å ßxi:ŸņĒ«ąµż7q m{t¶QV©oI"m’/W qéŸ) .>}>Ššé§½˜o ·“1āGūīCź[r’Z<®ŠFYÅźnóSŃ īdķXv\(¼óŸ–¬å1I«[Ē3Ō¼v夔ń–Ū-Ģ/Ä}­ÓCē4JhŚmģ¢B¦1C§ĘĎu­É›z|_ yĻĢ‹jLQXéŠÜųY®ę$ q·6Æ’cSÖfgKrę`a•ĮµHōč "ü6į‚ēÕīg#’pĖn“‚GĀq —“’v±śµ’t’vü¾]źī*eõJL–ĪŒä}‰#C#øū5)Ēż_‡O©‹ƒ),Ķ##š/…mØG÷ņüää¶ŁU$”†5ązm² /ŁĆ*ņ䄚ō$}ųśīG†X?v]wž¹ ’×õGlŁ·łeœŁG6ؘ–2ÄRAāĄѼ>{ćAėˆ]HS‰, y“C°ö”Ē($‚H#‘jSŚž\4Ą1©ŻŹšQĖąāFāśą ČÕ¢ˆ\F­ń+§Ąßh±Qū’Wįų±"bgŽ2ĆŌ’C24»XĮ«£©©€*@4ķ\J cÜņRĢ H UB÷’X`YKx”{ģ]÷šlKM,ĮdVÕÆ¦ƒāÆNü²õ‰6‘DB”©jTĄØ­|9vÅrceåÉ·$Pī Q{Ū/œŽ . $(‡-—šÓ¦ĆlD&ƒ=K­Pw#‹l cäōæŃ€Ł‘«ĄÓziZŸ³LKĢ ś–Ģ ¢š’+_÷¦ß Éų©Ų‚k÷\ėĻQćø>€*ŌØŻĶjvšĮg®jŠ’”C”)ōåÓ+lnmĘjםKMÕC‚*FäP æ_ģåĮ#<Ģ k˾Ūćźpæ\…eŅ®‡ 8°^¢”‡Lä·!£ō.’½¤Lį–F„š2UÕ‘æ½‘ŪŠŗ3ńTåĖ÷o»šhl'–Ķ£ŽŽVUŠōå“v&­Ä$ęgUŸ$Ø’‹%āųĻÓžF±fW½³3Š'”5Ū{r’Ż.„'m‘¾ÄĻęŠ$­ö”< Īń%šÆ_‡ÖwW§ĀćŁæÕÄ%ó‡™^VÖ66O nWsĖ=ă>Š…lQž×ķatŗĘ¼äĶ>ÆsŖėĖźQAdJrRC“ ė’wüŅņų—ā偗l.g®š[Ēv żišrĄKČļÉŻægķq’#ģąÕ]/O³‰²ĢZ>1F …āĮkʅ†ćŽkpžšRCfx UeP#%‚żˆĒHł7ŚĄ±=ó³\\6š€S•}J%xžļį>¤'Śu…’—įĒĶw-„„ø’)=oЬKƤņ³ݦ™_Ųį–šĶܒ”bŹĢ¬ !ćG5t HWÆ6,l’ń_?NCuš:ÅģŸZ.ˆźpą¤jµ$mźü 'Į'/MqŅ,RĻ$±wt¼£żöÄAüĶčS—ŁśÓ®‘Y½9#Z5»¢FĄü4!$e’Ę8ž!žėžnY=‡‘ø•}P®IfŖK[Ö Ÿ ų}¬5‰‰sSøØ§ŻŠ“Ż{~¬pöĒ—_l’ŠõNŁ»eæß,å†m±7fS‰$Š÷ųÄuF ØåŌŌ“@ @ßīĒĘü–»{ÓĒéĘĢ€„扖č Õ–‡s½ŪÓÜIȰé"° $JŠm·śŲg¬ö‘ˆĄē"Š€Õ¢ĘʼnŪü’øĶÅæÖķ£!śk*0;'äų1kØŁ.eR…žI=XZµŁ”#A·Ä©öłäąMF1%½¼CGMؤ±;oŁvY Õó1·IŠZ¤f'XĮ,y:Ąd 7')Wž%‡:mŌ%u•£!v +TJ«Ÿęę ų­£Ęk2ÄBU^•„h@ RĖa!ę•^¤2Š/"¦µö\ 5ģ2;“‘źUZ§ÜWˆm©ö’Õ’)pmƒbi fā ( ×ö|}¾ų~Ö6ędIŃH(«Zµeœ¾Ķ?™æŲc•¤H©­J³V•nGö{Æ/ųNYi} .~+Jöb$©µEŹó ź“B¬+]”{śŃ7ük†ä(•EwāiS¾ÅGńĄņ€Ś”hG$1ąŠ˜•ėąF ÷ʞĆ6ćßõeŒ¬ĒĒzåvöĄQ7ī'cAIę©ķß§q6ÕJšš–%‰$ØėĖrķÜbŃl®#ŒŃ8SļÄÓńĪKŖ]HTĻUtø™ 3²|7•¹Gv~(šÉż×ķä3QÓāą×Ū5œņÆ™>8å©©Žą ĢIJ©ä}w_ŪgĮ~__«\Z„_If“”1åéŹa#ŅV ėוįN+Ēūµčń=ĆžŽCĮ¾½4%×”ō£[€Hj£m,‡‹ąųpKĮqp_ӑĢJĮd(‹ČøPX=}BhĶĄ1Y[ž,‡Üé–hZK¹Kq ®X† ŲU.?LŃ©€.5ļ&ZȞµĢW/°-ĆĪkNĻĻ,?»v’Œx„ž“‚²XX^ĶéŽDČŠŁĘ¢”YÅ Č7;ȱBßģp#łļĢS$ŃZŁŲŁ¢7ļ½fyœŹwų½?A$z’æ’L &»ęū€ė]”q¤[HJFTµVDD„#/Āߎ~ļÕ§Yõ™„Õnd,­’¹²‡-ĘNEšƒÓµ†b5Šā8 145iźĢ»7‡Į#ßł°uĢҘªŽRJCB²Č……zļµ?Ź\×°HņؑX«-ĄD%‚«Š·@i_µˆĆté;¼qŹE}fbüc©VzVūHæg'’W–śŚUeŠž0Ń*ĘR(š]Ķ9q<ø­[ö\°s3ŹŽŗžųĀŽį½6Ė/RŅ“ŅOņS5¼ź²ŹåWŅ„…&¦…M]˜’(`O’"<¢›‹Ķb©rģ—ČS÷l=I N¬„—ż|č(Ģnāp[›Č0£Ń’1Juć¹ĆĖg3ŌQĶA­AŲb±w>4=kŲ PWčĢ Ū÷ē’ŃõNm©›6l®ų”Ÿm Sę|q’©4QŻŁ4ż–üq–¾¢;G%HÆr©»Pā—żąhĄT}< Æ(/U%Œa€Øū[Š}8×会µ ”ćČt5CųŒ u5Ą¾µ¢ąlÆŲ‰;GK*ҤƒRk©kā “v­G\4*r@9);Y…›w­w’W ļTDĪBÉh@4%ĀķCąĒ[HѤņ0ųŅ%^TźŽIh)’ŗąŪEu•m׹ę}YIa1C^?m‚¢Ėž#šāśŅ 4łŃź€×āVm‰½ü1(YR)‘˜£ĒźćZ€%q]Ø>ĖaÄ­#Cšül•pXžRWš€J’{’Ćpām¤™"¶uåĖćp¤Ņ„3z€±§uą06±zĘźŌ č©Õ©e©ŲBŸļüŸ³‚ōåoJ“’ņˆĆH¬O0 QiæłMń`łĖ­£FūCq{9ü MižK’ĀąÆ1śFÉœ84ąĒųaė?ļ€cĪ¢‡Ø"½°3’ĒZ2:śDTļćÓżø˜zIZšŪ6ĒH ŽłLŌ4‘Ś m±4ÆŃ‰Ęfāµj켈§æ*m–²PQ»RŒw'į©­6Ē‚ØÜ‡Ą īÄeazø[YŗšÜJvŪżŽrō·%n<©9¦äõ ?{{cd‘”}¢¤/Ģ³Œjoė,īńA£gHz£‘4uÆŚ ²ģ—#ā8ķ%·’ęįm£WŽ8ī¶•ż0cę]•}Užńä’Æ/‹āÅ4éL—–5,wH@^\BS}¶ū/žĮ¾Ü¹(ŃåōuģJæé(esJšÜE$/×o¶Č˜#JrMԊۃ ¼E>ŪÄg~ŸåŠdSĻ…#ÓķŽU[µ“žUō倍™Qī˜qȍ­ū,ńN&fXē^`}ŸE– ¦‹ńˆÕ±k[Ā‘K-ŹĘ±$lT—”Ŗ+CP U’gŒ··õ·2•6åÉqæ70õ9ö¾Ėń’‹>Ņį¼2ÉjŖ}šĶ$nŠMG«Ē`UXæįæŹÅįC*ĪyļĀTš¬j‡żi8"ō_ųwĮ2%½Ź$jkk4¶ā6`H$”!—s˚/ūÖŠ[É:½­éōżEEz—Q߯%éǾ<śPl–ÖÓJG”ÄZJŖ‚ĢōWždų«ń7śø”–ŅC9ō, Œ,6äÕkij7CæŁų’ę„e‚é”ō&–!"ĒAR$āŒęޟ~ÆūÆćūŠŚözžq@¦· s >ŒJXŹĆįäģĖĖįlIķ4Ėy]$bī…C$BŽ@$7Ū2ĢÕ?Ÿåżęn7 ćź¶ßTŒT5Ō¤ĘĢŹ9|O7ļ>ßņžĒƏ†h"‘$pņÉ]kĄ(ū,D„2·>ńO‡ü¤Åme™ļm…Ōœ!Ŗž˜ēUSĒÓJ…»„ā®ß ¼ž¢s~`š€½–ęHC4B+eŽ.,c‘˜I7 UY}V ŸD’l‘ńŅTCvüŚeŚ2ĄTų—f ķĒéä‹É·ó]©Y/V5ö©¼lŖM ų}Iro„¼§QąjĮ8‘¹Č+P)×āź>\8“a Šh*zŠv郣#|hAńŪ—›l’ŅõNlĆ0÷ŹĶ‰ĢĮx±cś?Ć’DR£—Z£oA„ßžģI āĮŖĄŠń#Øė¹Ådr#$Pƒāh<7Ąūóbc©ė½Eo§“—&ØAķx—Æ@p’'郚ņ¶ķ+Ź”+ʇčF½>åĆGv mAŅ…©rTmBģ9×ü¼&¤”ŒŌ)QĄ”ݶ"µ÷įĮ±jæU(¤’(™š“4Gß°ūI\eqm,AõZ"ėæŁ–ŪŅļū'Ō+I»õÆŹ…ØśĻ&“(,ÖF4=½YW µTCe+īK‡¢ŠT’¤÷ļ€8©·˜ČB…Ł«±«ŹŪÓ¦<d.ŖĢ9–ąh8ńą“Šo‚„–Ht†h©š\o槬#+›I¶[»U@I2¼‘–~GxĻĮVnŌćžm‹i@~’Ōn…CR;P AżČj+°ųž…’ZVŗU×Õŗ7]™fP6§J0W™JkOZ9Æ6= ‡c‡ōżśž@’|7§OQvė™Bżmš»P£½Fäž8³|CĆqæNųˆŁābB•R ‚Pš’qšPĀ”­8Ž“­(<6ū±,xmAĪ”ÜļOł¶TU1ĘZ„ؕo„ƒNYü<@ 40"æ»®eu 6+Bv¤Tt’cžĖŽK8 -AC^Ąļį×ß ¦“…£’G#s/’Gj1śCrK¶’——r(Įē2ž,½sŽźö_Wtµwä“–ŖüӒhiPI§Įß ­®ö6ņÜÄ÷ņ5Į C½%iQ«é~ßT—Ōżā·.+ŠéńÜC+#0É k(N¤ēnĆ”e«šoŁõłWœ·N™ö ģ~®-ī#^æ ܤ©Ņæ³ļ‚|¼ w7Ł&€vĀæÓ&EüŽÆ&ŸzKŃŅx]K+ĘÜSwBŁKw’'ß€|\¢'ęækņ&łnä_O‚™ČZqV« ĢŹI’WEhm­­Ē1RŅŠŌėźš‘ŪŃ’Ć÷žŽO©4Lhé/ė»GÅA"˜™™å‚”Ē%«¤`²Üž.+£§._,F'ųUĖȉ &‡ć;”^(Ąqz•o·$æjN}¦3…Kxī-ĻsGBh¤J¼Kš‚#ūxß_O™HUĀQG X(4r+‰³3˜Ó·ŖÜ½Ež^_e±c©_ ²1G4'‹‚CÆ\QXÖN_Åö›z÷~‚IJ¼prHŻb’4O™Ü•ˆqįAžžV’+üĖUsq2­ZE&•,yd«rjńdIWāuĒó…bcGOŠ8”**9t'”eJ«ŗtž|Źa_I%ć2w›ģ§ā}–ā­ź'ÅūŸö°|ŪZĘā8ø­¬m Ф† *Ź<³ §Ų^Ė•p ÅäP«’£ĄŹéÅxӌ`’:R© (ćžWņä‹ĖƒźÓ‰ Õ!–ŽyŲóśø.ŪīÜZł9ŅČ:¼Lhĵ~ę®§­ÕÆl>ˆ1+S^ “·LżAŠęĶɳ’ÓõNVū×§l¾™³fĤ&¤…SQJ“ģNūkń„¢Ō¼I©Ą‘ś¤°z1ų˜1 ©Š’f>Ix ńrqŽK݈šłc “"±o“!f ČWnƒ ÷ßģāQŹ“Wuä ü)ƒ·ģīp’źEś¶µ(šāt² Ę¢V*k^ “œæŌ|.ņāÜ_Ś^ß])„ŽOTh†ÅiŠą_¶Ļ·ģįƒ[žō;r©Pε!Z€ŠZņä¼g—Åö½5t®®$’ÖZ±õhź>?µYį䫵~Ėaj ĢK,¬méO‡‰ų‡Čq’cŽ“¹ś½å‡H{„Œ’:r…C‘µŻBøØ—OU, 1ęŪö*zmś°.›źĻlÉ §*£*õŒƒ­|NYdēdf]ˆ-B\;r^ž&4ÆŁĘ ø8µ­Ū„“F˜V¢cJ ¬„™[ģžķ¹bsYEję)DfPœ¤¼‘Üü ÄŽVˆUø~Ļģį®Ļž—#s<ī7Ŗ•!U ‰Ü|Cżn8ā/Nś$­= ąėՄ¬Ē±o ˜…uKB£hE:; Ņžųcyu$vÆq3QČ’yzbA!Sµ>ŹąŁRSšnŽLF `„bH?9d …-¤Œ­Օkݘ|?/‹ĆéÉ ’Ŗņ ØģB¼_öFLVŪ„—JņŖ²SŃ=E6@Ž&ÆK‰M#’Y*Ė@”-M‡a¶Łó#˜“«]( ·Ęi®=R²0¬¬+ü²OĶwĮ–­õ]:(Gå(ŒŅŸ½ ōh•_‡ģžĻśø6)”øbæWF2#T€hkšV¼J2üģ·łXåH…¦/ļaźæ²9ļB~Õp®Iš?Y•_J$i(ŹĄówßä“ųŸż“bF?Jņ ]¤’·S,2ļń¢É’£ tš²ņ"ń`Քⓠ»į~’±D‹bĮ&”­\×riöpŽ+ō¹āф š°é5włąŌ“Žk ³“!=‚’ÆE-¹īž©(øX,ƒ²TĘå•T‘Įєŗr‹Ž Ó¤™ŠT©ąˆČ»Ą#)·Téń` ņŃ^ĘąĻ4jŠ%–‡‹) [ā"¼ŽB¦ ļŪä2%,aÕG&g½zWp ßL»}õĆ-V·D¼®ĻĻģĒR|:ąŲęfu<©ńNjv²x~Šń®:Üø‰æ2Q7ŪzņžQ?9ŚĶ.£:Eśģg©ū2[ĀY†Ē§E3˜‹ÉŽāšDŌ)ĢIĄŖE,q‡ćŹ•18ŽnüŹĶöxāVóµåŚß] 6…ā‚8QÕŁÄ_¼cŠ7§$nOņ’Ÿ%2¢ŽDńJ§Ņ°‘#ÜÆ4au ·{vćūxe ĮęÉ¢m—ŃJ’•Viō°£ĢjßPŌĶ?yõ5ORRf’ɌdVCŹĶÅu$xŻIÆZW:āV Yc!HUŌ«%?®X§Õ%ć»Hņ¬c“šŖŽžę˜„“Œm'’Ś5 Īčz†ā#óżēü’tĮwAⶌ¼Ę6!Ń}0 'Äæ >\ø·fo„4—RÅs qĒĻ/„WZ¦ų~Ż _ŽÆžóŽ õ#ć[„Ófg–AĮTń‰‚NTćūԊNOšż¬ØāyWŅ ¬­Td"J1 Uąó'ā@ʼ›ććƒā–gøŠć’3£–VŠIGĀ@ Ü«ĮVœø’Āż‘:,+}8°ä+ŒßUVęŸfQĒ—ŁĆ©¼µØLސHRŅ6‹FXpū_s¤’3¤ÆśÜ—† ]ĪŹŚi-Žßø&0Üxó4ūOGjFµōųż•ųÖ‡źŽ¹µ•¦ˆ­Ä ’0e‘Uٶgcń1~&ō’Ź‘0™ˆ31ųĒø< $ü5eų¾ŅüSžĘ+(ćoõZ„ĶrCÉRµH‡6ļ]ŚdŒqų¤żā}¼bŻ(U~@­ŗ|!.M±]ČĶ7Ä[ü˜æŸDĻљd.ś BžZ;I3šņå†G–y[S’Z$Ģź >œ©æłWš¹×“Ņ[b# “EP6 B:Z}šaķø&J_Ē|^„Teńķ›ˆšŹ”ńĻ’ÕõIé›5vŹ­F^U1’‚hA”^ć|jÄŖ¢Ŗw#īżX×āŠE(:óĄ73²¬­š“20jP•>"Ÿī¼eō…\‡eÆE `«SB%æÖĄZ¬^±‚ČYCJǐŒlŠģ,±„?•²;~E’˜/n Պéöō"”Ļ/QŅQ5Ćč’—‡“‡”pŪ«ĒBŽWe>2*Ńhæū,Fš˳FøPŖƒb8IÆ&-_ę’›°6±pĀÅéTč܍hŖ-Į4/ó× żW·¶¹R¤5ĆDdĄ!ć;r=>Ķ}ńY\\±ž>>—2Ó␀ą€v<Ė·><™æÉ_ˆśi`ŠČ™PˆK?…U·äWĒ`¼1ŻBó?x ؽė–ÅmŠ ^h¤!T`jA)ö©O ĖĪ«¶Ž©­”żłżc®1j`–#÷@l¤VÆś’kžA‹“  €M-Hķķ’4āpüqIÅ6Ø“^“ū?Ė’7cql@*Õ!«Oōe O¶Ų.Ż‹r×ā'­ ƒŪ¹^Ū%@au3U‡c©OÓŪįĆ]1Ā-ͧ×$ ĄWs聒Ć(ź$3W• WÆśCųxālč*Åc NĒhäaŌ퐒:MŅ2qēI(h~C$¶Ą„]ŗõ;W ł`ŠeÓ+„|sq_ ’ÖõNnٶ͔swƽxš Ÿ ¦4ßĆø,ŖEäŌ{ąyJ˜eŠĀßĶ׉"›÷Ĝó‘yŠ²ŃH=>gÆ.8 źD.µƒÓ‹d$ŽŖO:“_Ū_‹įū+„Z%ØKhć–2Ņ"µÄĢAī™jQŖ~5V’*6ĆŅņs"„s'§* Hož $i@cTćp#T†āEOÄGCÉ7’+ uGåaə‹€„A_EC“ß“›a]’¹X䑋d›Šż®q:0ūÅf’-~2Õ k.§Ā”Qg‘+N%URNĘ¢ƒ‡ükˆjņO5bGą°¬kÅXż§JČF]ӎ“aqĄB•ź@Zž¼¤K'”2AmŽ&BA؋“ ß®>ėO·7+%³Č®­ŹŒL‚‘˜iBW—©æ/‹ZBńCĖÕ&BH1eż®T¬¼~ņ[³’t™č\€cU`$”;|F†œ©…ZœäÜĄ­PĖ456£Ž‰ŪęÅęv_2ü\HńˆłSĆpuļöpÖĪs7Ö62,AA4š–4„*ņFū?š8&Ō™u5EųŃa,½‰Ą’7’!pd¬-±h~ĪĄļ½łńl}»ĄÄŽĒS_÷PŲ»->-²¢(-Ö)A*ƒā„kĮ:€wß*¢E`©u­”&Rk×ķWžEŁO÷] š³ģ1±ĘĖ €(Ŗ¢Š¤lS·|j€VfbHS ’| §ĻAÄR5% j*M „kģ8ąŲU¹ńh hxØ„)œśIA× d©[Łuč÷·TüW$ŚKY@×ėR‚A¦źa”ė’ƒŌ7¬¤^K]÷Ži·ĻńqPÄģØ>U?øzõó“OKw”¬©ŠżØdWRiÓćuĪauõ;ĶdŪ]Z»ÜÄZ¶Algy‡f¬rĘĖĖ“+ś|x¾¤P"Čńs“čĶh¢rģŽ9åöW÷>‹I—Ž鷑\¦“q"̳,n«^ n)įRHFY‹npõ¤į©C)#įāvÕ£fמ-…± ¢„Ó'@ę TŠ„Ģ`ļEd Ł×Ń ]½6bw§6„’“˜¦ž™aā}EtÉ#āåüķˆGÄXCUādćJV»@ÉįL5½“öŅÉ%³#8=8¼€ųRrēI%’īä²8BÄŖÉ$ˆĀ£f~2óŪāoOłp“\:":qT˜qVāŁ—` P$·é2LŸńØE&41‡`ŠśfISQUņēĒāå|[ HčZDŒÉU/é‚hß t’'~ücĢ#šTŒ°•Ią¼ySŠ’ŒZž§ĘŖ[āžóÓÉ–®”Šł`gV†X^5OQd·}ĖŠÉĶ[Øæėš?—@±±½’xåb÷€”°ųŒÄņ4.x3}求tjŗ-¼Ž’“t‰ÉV Š+h6Ŗ’•’Čך¦™bI žåž1°<”Ž.ŁŁėÉJ’­ūyRR2čæĀĀ0ĮPµ*wĖžKśæīø…Nrʰo˜rļ–1ž»3ūco·†z\QČąęBś®Ā›SQŌ|3#o—q¹³ Tr w¤Ó§NFOų,‘ya;-R:Ӝw_IH„ ’ĄĪ•¢?X„ŒWÓ»–*Šīo«Ž•ń,¶äĖõ?Cū?Óöž@f"¹\[Ć?’×õMi›7Ė6U7Ķß!! µ7 ÜŸaˆ}r±+"4fxŻGŽE)žWŁĄß\ÓfżŅ]Äe• € ;uāMvĢĻdĻ“ØĢA…jn:ōŹuądā6 ~ąkCN•’p»V·Žā­d`źĪ Z/÷*y:üe’¼EžĻ ‘dŠif¼ąÓZŻ„ķqewģO+JĖ_ęćƒ1`ĻRüˆcOмŠVœ|p=¬Ėåœ&‹$„O=‚–ī£įųø’“€5æSźG"Lģ~Ė£‘°=O.æš8BÆuGt‘¼ņ3³¬[r*mÖ& )ŁĻ>?·Ēż\9K…¼æ²ž=‘–IK-GÄNTŲw‹*h.e¹™Hī2üĀR×_±øŃdyÆÄ‘”-M)VpÖĪ_F÷ć äcØ ė+NæĆžĒ -yõG{r~*Šš†#āū>8:GZž;²€ĮOZrŲÓŚAV  QķqcCńr+±#~Cüœ!„b5ū,‚j#|0‘#ą]½2üųńWū,ė²‰ŽDšA,RR6ˆśœĆ BŹ€G /‹ķ’'?ˆdMŹ(›zŸLōßvn¤|?v&”Lgą€iŇü{ŸŸśæóv:­čT®ęJ¤’Ŗ M0:³<ƒ)ØēµA’D=wn’šŲ"ŽJ8P åM÷~"½3ž]HżåhÉStåj;O|’‡ŚÉFˆ±z'ŸMĢÄ+u xzoćĒž !ā]OØÕÆü[510 įE'ÓŲ7ü»=ižg üįlņŁ[8<8Ć<,Ø Ä“€wµoœWŽŚē[‚'‰¤<Įģ€! rz†śøX¹IžW‡ õ_Fņ'SšF}Kpį‘¢Y˜1ņÜ'²~(yq’&ŽUį ­3“iq„×É;;*±,0ÆBŽ¢KüŖÜ²gwĘ&ŠVØįs$ķD _o¢fĖd’OEo²d÷źŹĶ’|ęQĘŃŚH¦ž¢Q]{ÕRßœu³“2ūA3v©Fp?Rā²šH-”åögeŠ6ÆßŲā-ś%YÉ^IŒŻG]ö?<»Pģ²€iq“īd}žĖ8ĄI3¹ōŃOų¤E” ®Ż›ķŗŃ‘+żēļāż„Ąń—Ž@ń)] ›**„8’„Į@Ģæļž-‚VcB@6 RØXŠ'r~Cģ/‰[ģaŽšüā é±TÄŹIŖP+Ą#/ī’›Öąc¤p‹ĢÅ£™Ė/Ā>Č&9ˆØčßģž÷kĖnĖŻX’-…Ģ}X’Źą€ 5é'³ö8IĖi‚ąéń‹„‰Ł!E`h”¹ļÉæŌČ7µ ś£ČĖ QÕvI$*Œ+°§·ŚžVūQ–±pHI,M JžmZČręĻ»+~ź<m`Ņ%Ą^CĻ“~Ķ*I+ūAU›~×ĆH ćmwp%»ĖĄŠń5VæµD(£ÜĀ‘µÄ²Ģ ŌÜ-Š0nŠ®²J#ÜL.a Ų‰" kō;S:60—M75¢™Rę•” ,é8ߎ œĘP'R­×sŠąŽ™Dö²é·†m³’ŠõNjŒŁGĄf­z|²æLlŒ„@Ə¾'źƒŃĒzšŒdĖ £ŒØŽ?–@éŽøG{&‘ė²Ik …[n%¹qAŃ|\Ki ·ŒŪ›xˆY§$ŠŖ (4āߌżœn£qnf1,­$ $b>LX–”•pY¹Ÿ³¾Öh““d˜G RDwØ”?Ø;‘Š-ŻŌSÖ¾ÆęsFĢEKņ`ü8ķĒö’ąqöÆ!cy,RG,00(C$fä@`“z(O‰Y“|ń\ŪĪ–ĄJS”rź†50=7“oņ°ŖQR9…Aˆ”ć½x\ī|TGŠéVó-ĢL…ćōg5*Kś±(Uų[ķƒ&;S×-¬šPR!BÓŠś|ĖFź zcćŽ½>ŹäF’Īž_“1«É‚NQŪBd”ŗæ5UY’«ö˜’±Ā=ĪÖĖWµšP¶‹+Px“’FŃ£€…¶żŻæÄßĒŚPvæ™>e•ϬńÉ€ŹQ©,jŚõbWųX¤K#ĆžTmńäŽ?Ģ«kxR;Čīf*ąĒ¹Ż~Į+ɔ©Ši9¾ųüK'Ó5Ė UÜŪKYĆ(IōärU€cCžPżŚūX[®Y ŽW‰ZTW™­FW˜xVA)söų©ZqžÖ‚WśüČō+ū֒€Ą¹!R„ļ_‰°Ź7‘5»xˆšvŖ×CŸ²£~<’ĘŲaØĒģü_²ą’%qčÅĒĒN'÷ˆß Ģr6ŪSŗ÷Į1©5ā7Ij¼qµ£-|TEz *1ŖˆˆZ€j»ś>4ŪłrČ"E€”Žü¼Z“üq£RÄÕAa@kū‡Ū³ƒƒ'ĆŗŃ ÄP^ōČŖ¾Ŗø$·ī®Jö=@ūŪ%‘­bŖ‰XJē“(¼ 5z‹żeĆUø#¢Ø‘ŠņéA&Ā•Æį²ÓŸ,~/„šŌ?W5ƎūąćÓ%GŅD²·ń!"¤žĢœƒ_²]O+”IcøW‹’ņųŽŚYž!·.2¤FŸĪ˜G=¹š}BŲ²­½”y#Dj #Cµ#—&­d+*«ņāńį——ąHō9c3¬©å\h ŽIPMTChæĶö’ŹÉ0a7—*Ż^Ē‘Æ Héž]ŗā×®}Ź~$£/ūä_kdȵʬZÖ  ü <7 Ūį_Mi·j¹Ā`źįÕEU4” ECJö !q$«ck0L²Ü{sś“Š ż"ø¹·."D45½_Pų»ś«ņŁ03!¹˜:ńA#‘ #qYį7ÆģQpdŅ'Øķ=Z e6ļJżžK?šēb‹÷4¬j.QZ?.€BŒ~ߥŸń¢rÉqM –ōב".löØbŅg‘"OååöplĢ8AōŅ” š)¾ĄÖ!¹čÅžÓ`:īų õµÄ34e*¤ŒØČjT1‘ö°ÉĖķü1žh¦..- aZĻk‘ĄFõ/ʔū·!ū(ńą¹#ˆüq¤ŖÜi,4ų˜]’āK™¹_C4LʲčŹX@)øūBæ/‡üœ‡ $žöw•Ą^Nє؄—˜Sß§ļWžĖ2Ā€ “³EŹ”ÜN”'čp©qšńbÆš ‹G‹ø÷8,0{8Ų·kq ޼D@U|yV0Ü·?/¤`UŅ)b!EO8ŃeAæ‹J¼r_£PĶĖā qå"ր~ĢkœĆ̾p†yf‚d’E‡œR%X– Ķ|Cj½}:"žŌŒ³q¶Ÿ”RŽöŚ9d…¦H†3č—?~œJ~&ā?wžģuų½<qt½ÆĮ䗙B*śmA±]ŻŪażļļWżó&)g§R9$,]˜H.„PņMꠐŖµųcāQŹOµöŅ¢ÓGŖX4›ČGų§]ĒZ~ČU’ˆ«%·Ž(ŠĘА8č)JšžĻs¾ßóFK4{é®.ķn§L„Au*"€*a‚qęĖźÆÄæ³ÅĒāc›¹T cö‹\ÅĖzD¼e·AßüÆŚĀv%—Q„-*Ķl © ČõžSć‡VŅ“1Ձ«|}ĶzœnØoķ¦m{NŅI0jÕV¦“Ćł¤ā¤!(f¢ń­*S@8üTV”žlVŃ>ØK©‰~*ŽæeiVū_īĻņW‚ž•GFwP½ ‰€§NŠ”~!öW:),¹Õ#‰·q™TŠ’ŻOE95>šuĤWŌ¹5F(i]½*~½ńĢYnA I”€ūU8“X¾ČżŲų€ć“/AŲŖą0Ė#Źõ* Æ¢ą•!Ą“R7ٹą„R€K$‘ˆÄŠĮ0¬ģ7ŲwLjūŖ*žķW 4Ė8Œ)q9õKp!#õ@55^|_—Åń~Źü1.ærh¢„˜TSR Õ¾11āßå¦Xj2‹įØD¬²ĘŽ“[īŠ„”ÜSŒŸ Ė'ķ,œWŠ&LĢwIՓ‚’"žcrc#ökµ-ö’e…V+ƒ RBŗµv£-w’X’­fU[™.̌Ų7Gc&–Ń’\¬frzU£©§óCäŸĖóAk§čQf“K½M.z˜’,|dµ|éŚz‘i ±©Œ2ĄšĄ`ĮŽlŻ~g6ž’~’ÓõEsW*»W)ĄŽ4łe@n€Slnćn¼ŖN&Ī€»1 (‹T(¦żNŻš·RÕmįJ3QE]Ś„ ¼ŪsJmÜä!µ'žEY¤ŠVļŌcæ¤Ō Ŗ qxävo³ĖÓō—ķzø†§l«1Ū·ī$Ō‘ˆÆ"Ą£iš×—ūĀi›ˆ‘ŠńŒ1¶‹YX߄rźåf4­#‘•j@’}ņˆJßė¾ŪĖõyč Łb”«[\ “Z'¤«ö°Gšµw·Ó«oS$³¤Į•dT^KRĄ0ēš·ģ}¼ą·šŗ5ä×&žÅђ#˜/īŽ@ÅÅW’A’&żÆ²a¢ńهc$3Zid„©Āś£‹#:²óXø»3üNŸ¤AĄG~PĄČRŽŹ#āąZ*ƒ±āŒļū?o':æ—Q Ņ3hCz•$mVóe§Łū(ßģü2ød†EVQŘŃõ$oOĒžiĀMkXK9Ś5“Ō’3C I„©ū\h&’›°^‘ę/1-¼ÓĘb‚āZEehXqēJ€Üy|IÅdūĻ?‰ųō+ąTŪņ$²\Gš–Ö^ŌŪź”æJŚ ±J֋N‡©ĆKxŃtöB82**½­#å՘’)ļ•kEsiU€– ®ff„h;rĮŅÜÉ3QHĖȰ©ä:VæiŲäüÉ’-0]ĄdōÄˆī‘£0RV²8­ p½8žĻ/ƒYī&P® '?„©% Uw’*ŸĒ;Ó`hv> ųļ˜9T"54­hvļį”ęJ©…–œŠŃjTv5ØרšŒH©Ŗǧ% #˜r‰ƒ9`TÕøżŖÄžßēöqU õ€VŒ 0Tß9ŒŹ%k„vōį"æĶIŠÓéQ“-FĆJ³‹oƒŌ©4ėя¾€į¢Č=(ŖĮv€ pĘøāZF-NG§„KžŽk„, ×ū™£$ōų€ÆįœkĶ0KY£j*©ęD[ŽĀm‘‰ļ,ĶѶP“‰”(Æ]—Š+’GTųxžółWÓįČW“œH÷N%–Gå"Ä%XØTšV¬ņĶc_‹ŽJü¶ µ Rgš!ćĄĪH’„¹Ė²PśpFŲ™I’dłˆČ昫%õ©ū?Z‰£cֆeäzT’ĒĒńŠU5hfP”ČƉŲ¶I)’Ų„ĮÉa'ŽČ¬65żĄ½ł ķ­ĀbJ“įŲķŠŹdcÓłF!¤ś¬Į©T‰ƒµd¹«Tü÷Ć1ÜĮl$?ōłž›,ąµ~Šįe¼J±Ę‡sź­XnhxµhÉ|²LÓŖ54Xā¢ņ’«É—•:?īŲ·ķš’‹3G,Ó7¤ĢTĪ܁O²K õ?iź“'ķ6 ŗŒI ¼jŠŅ$ÆéDhŃs•f4 U¤duoŁoäūj^„Ņr śPĒ4RŠ– Ė‹²·‰£ż…ż•Oƒ±Ö§°¾g@ĻÉĪK`Ē…C Š6ėÉN’k÷ŸėäžėV‚Rś6ØKiöŸ"+*£(j—Hc†W„O/·'o÷šĮ¶W‘¼j>ƏT=XČ¢fÆo†¼q#29iĻĀā%DSöUלɸļSĒi…—×……a»daÓxę‰÷ķń³r’c‡Ś#Q“€ŻĒw‚+G’)]( x׿VƝ-Dē“ŃSR±Šh‚ģ#¹±t„‘QN|aæŲgS“¤†)™B4Ø”x°ųą ŲīC®;Ļ’Ōõ?lݳ i&‡Ē?¼&¤)Nþ1’Ž„šÕŪÄÆ|qź#ÆrÜ؊()ŌūdĢŚ”µ(ą 1 šęCH£A†¤Ī2ÆšqoõÄIÜļØ^ŁÜH.nÖė‘ū@'¬‹1Uū-ʼnāy³Ķrxó±/IɗrånQŖ×«ĒʟóÓ I¹2!—§%-¬mԊ;-CJģ>Ļ%ćÄż…’+–TØLjnB½Ä¼äō‰`ˆV¬ƒC$Š©Ćć Į›*ŁŚYc‚7¤“·%q°Šp#žŸ»Fn?ļĘ_õ™Mm'€ČńEXÅŗ7(É“•‘Œƒö]Ux’'łiŸ®ģB:ÆĄ+ĢÉšøVńŒ9†«ƒ#q$ŒYŖū€½€ŽJ|5ķ·L 굞÷Ź—ā؃w¬“F½ · ®õ\ćšip%ŌHƔ6Į§CF‘·ŁffŖƒ-K³7.0pQžĪ_ĒzT»¤ž¤…Š#D^WU%Įd"OMYĖK!—āżÆų©‹Œź„}Wh”•Āś”Žm‰bŅ1e܏²#+JŁ(Ņ`–GŽfÖØY$*ÕFųųū·ņSÓžšMūj‘_²Į;F„BB‰ÅIęŪķ|LXõ_ņŸÓĀķLź¶ņAo£ŚFć4… JõŲ4hæ'Z³·/µÅņIåė[«y=0Ņ$°ĘfäœC&ģ”pIRµd+žīū|ѳ£P5“+ź,ŃR7ę¬Ō%ŠČ„vß 5Ń^«Fh±Įń{ü6ą„/nXjõöÄŠ·Ø €ņūAxZӋeB^VÓä%ƒ ŃŚ„柽iß \/īģ•„a>7QU—"Fõé!Z7ł,’ĶÉuĆl©q/7x‚MĮ i OŁT Ē–’óVõI$LŌ”ŠŌxx}ų›Fއ X—˜}‰E§_—ü՚@ZG©¢•¤) ®’włż¬rĪAŖ’OAJјļ㌈ÕX xŹ-XWj© TŸ×ö±ÆĶb”§#Ör­š+Fķāj÷éžILØ1i r RąöÆś8Oų“b6ȋo$u?é ŽÕ(©žĒÓĆM£µ‘ń· ¢žō ’e‰¢Ļ°Įm­qéŖ¤UZś£™čükš$×öqó„¼ÖŃHµōŠ˜ĻØjĀ  ĒnC‚užó÷\ߋ4͈ŽĶoY£Ü/"GÄÓ!Øzrņ:Ļ8½Fū|œM̱ øy .ÉZ„ˆy9gfŪģ,ßäńĶpÆu"«s䢠0bŠwīŅdū\x§Łį„Ó“D–XĄN*ÅҤFß5£ą¤æ’//ēlś‡§e*H£Ņ”Ēź%w‰Šž@š£pté’ė—4qŸJ*VU Hw«3–y +ū2ų½™¬ČNå$~$Š w_õvn8ĒY’rĶĆ*”U9Ø5’‘j0D|ķŅÖÆĒźö®@m¹rą)§łä†+”µŗµ‘ćgxׄaŽy#ü„r7#ü¹!Ń&’mĒ[Uø”żÜŠŒĢ§üØē—Žt}s-ŒU^&ĘSĄP„kžA\2VķŽ æ¶86_!្Õõ9é\Ł»å¾=ń€žM¾Õūö›²‡f4Ŗ­N•ÆšĀ½rī`·øb~Lk"Æ2¬Ńµ“ ßķqĪi’JÆ ’Ń-Ķܑٹü-ܤ 4…6Ą/"®·ź„äf»†_††€¤P°ķqųWž ±-ėĒnišøiÜm³| ­Ś8ųuųc¾‹%'ŌCĄK›d§Äˆų;W’śˆæźG…ęDW,œ¦.ˆI”d‹įäīOğ“ßä«qZ2 µ›“7īŻ”Óį.“ź)‹‚¢¹ŠhŽ]€ĄæTj Vćö™• nYŚ+ˆ”š oL¹exYéū)ž®)jø`®Ågֆœæxxż®X_ÆÜ‹m0@Äs–Ży(4rŻÆģüIżąū-éžĆ6qŪ«É ŗŒĘō…dw,„ƒ,ŠŌ37Hō  üEšq“āĆŁ¦š÷E–ą· g~)XĒĘI$¢–ō‹G*žŌœ}pšézō7\nc­ J¤’¾”®üVi£W®Ļ¤ŸkćųruJĮ܊v߰ƆäyƊ¼ŗ©${恮ļ-„œ8“’Häņ5ģMvėüŲHÖb†kVv[H#‰$w^,MHŒ?]‰’b¹Ń“›Øļ4ós£[[I' tnkÄŗ„9H:‘ų•>f”7AZ?‰¢£n[~ hOū°Tņ¬‰‚ÆCµ”‡ł·Ė·”#Xp(Ü,{v±ń4Ųaŗ5üØļ$f<™‚½]ˆVC!ų—ž.{4ø!g`mŹ–€X²ńŌ?±‹4~“Ė`®Cš”ź(zģEköq *ĘØ(O ,“F KC(ļ/ĀQÉ22Zņ!×‡ģÆ ^Śy^#[“FYœšD!?ź©ŽIÕ捕ą>”Zī£N†œXOó0Xy­īš 8æ²)ōT-³HĢ ōoIxPc‡Öä-ū¾SĪĄRiĪ@ vQ^!ĒśŲ“71 »F!'ĆRVŒ»õeųÕĮsFqqé1f‹Öd@¬Ż¹Ŗļ¹ćĒž Ždsõ›˜ēūRś–‹)åå.õ­‹Q[ģüXs§O$’Ē!RKHŃ*P“„OBOc˾ł0Ģ–z<\€ēb¶·w ȏưą™Ņ“w-oT‘$0½:тńaÓŁpČ*ué–ūY|ż³’Öõ5>üu{ iʑQæłÓ|nĄäPbfµ&µ®ÄxPa›åipČ”[ØJņ„ kõ²Ŗ_pŅ®®óŌōÕ|LŃ1÷ėĄķ…7p"Ļ:¹ -āB²€ŹÅiКz‹žWĘCnāPkČPÅ֌ĮŠ»}拐foõ¾\Į4÷+õ3%fœ“ėĘšDę„K7f“eŠO²Üž× ’YØYŻĄĄJQ¦įŹ~ĒÄŅņ’ÕĒ]RsźügŌ“į% IöTńū šķūźå¼“G±Š–[‹„ Ū – f æŁ ižSaœ÷Aoø+s†HēÜķQ!@įJ+bšuܼ,=1=@P÷q,'§¼|æŁey£M†ęź;ØPĘRŅKfv;3‚Ņ#HTāe]‹|K;Źgó¤ß¤e Ķ¢…GeāȊĮw^ߎ_ŹĻ†¶ZZjšüVīHa7Ņ1Xˆ<¹ƒö‰ÆńĄŚpÓ¦¹I#†KČHę÷ŚÉ- @Ņŗ¬iN<Ö¼æŁ|HŻJÖ­gļičń •#öĀrū_šø夒żMK"Šv©?ķ¾)s ś‰›zmP ü)ź1©įį—eg¤DÜ~ Ūoõ b2Lź±ČĄ#2Į"±‚$“‘5*ę8rū׋`øBFަ1Ąójƒö·%€ÜŌž_š9”ŹĘ"vØBO.æUéō’›e'ĄKHĮ”!?·ĪŖ`ĄR¤’xÉüæ/ó叔‚x·Å͘-A„AzōöĢLd©­MEj øŁŁ j•`vģ#lØž)ŃĮ*9©Ü€kPvńĢa`Ņ‘V”Kx€~RE2„?Ł6M¼“Üō© )V?3掵I`YĆĖR‡§O§4¢2ŹÜP“ ±£|2F ;Óž#¦fś¼¢« ­Nƒ•r'ę˜Ż^PÕc»N æĀeČŻOt ū9Č4ŲfžŽK§p@£ā!Īź±ĒæÄĢ~×ŪfUEżĻƂ&žC}E’}¤šé€!Ēź)+Mž•äɓ &²j· đ5¤DŽŽØÕ’eq.’łŲ„‚ ~‘@ćžl'ó§Ē„Oļ°Čß3"G’Ʉ7QG$öĪ›®ę$ų¬ą?ŁQNNž„ÅŹµXJöģ»×bóu§ĢbŌ2čī“-ź[Ęż’˜‡ńŹ’Ė$‘|L`äĒüØŁč7ł`łE·¦j ’UaæŁŌ©Êb6„‚3šM3¹’Y$Œ©©RärŖ8ŒxÆØŸ }œ««—ƒ‡Õx‹×•¾Æ$jO SĶæy' —‚“ŠæķHU,4ŠIaćÄ)Š(ś±Į!«×“Ē'ū e2’Yś‚³GSū¶Ø ŲHŸń•ńKAĘID¤2ńHY÷€¬¬kÖ²"HĒżl|¬‘i)”+…;Ö£•Oұ&ƒŠĖhü‡¦Df­9I*Š6Ż6bŲ:ÖPŅ™$)@š&=éņSˆ˜ŠD­Umäč:W Æ† “š85(‰ZāgsAr9’b ĒZ8µ»’ )"3Ā“sd2¼lŲ?¢0o.0sE%š@UG“^”ƁćJ<¾īh­ÓŠŗg⤲//Hm­ P ‰”ź CRŸ~üqõ¦X4ĒrĻ’×õ>oĆOн¼2·ūŗć BŌ ¶?֘`fāÜYČŻT  éC]æ›">tœ¬KA?ޘŁŌA’HÜń§-“õ²Ø$ēPō‚&- "¬fˆ¼‰Ēn‚nXž”"‰ ‘X"É&£įZČNŪ/ĘyWöüœœDĘÖeoŻ»t0!aaИŪ÷\žŅ²Ąå-Žż§~ÆpŽ¢ĻfSŠĮH“Ee⣐ū ū ¬ø²“čÅĄ’JŖÄ# ¤#`Ż(Ļž¶+3Œ¶ē‘Ÿ÷l7Feˆ †Ūö²¦yUc++P·Ŗ«öˆōäZ’Æ’‚¤T ı„¬,‡„8” ųWaƒķć$ܓBa¹•¶ßįb[æ‡<=µŗy$0HkŅun„Ę(»tÜ‘ĶEÓ®®±Ę‹Ź$*ńJH“•xŠūJĮ£ųxü1śQDņĒØĢtöśÖ™hG fb.ÕŌĄÄ²zL?ŗ÷”bćūÉø.h‘Ż[…Šåݽ3é!˜°4]ƒ°oęk|<›‰PŌ,Ģ$ōäį ę“n¦ nHšńĶq<±BwU+E=Ą švķū'ōM ŅźēӞ_«”cj HM7#J+‹’ü_šł)±»ŁA5ŖHMTīņ”ŪÆŚļ’ ›‚“©ŠPŖ;śŠzŒÓśnŹIÄAPü=‰ķįĒ.0’Od±©”†”ŠÓÓ)» qZ²ÖŸźįœ U‡Ø¬Ü½]+P@”P#_±[āoŪū<ŸY‚!Na Ƨū*WüŖ}„š?ŹøėY’YÄLė4°ņV›ęĮ†ÕŪģų°Ź:F”vzŅ«ü’—iĒİŖ8‚OŁ“śćę™C%€8Ēļ|ÕŹ”)ÉK(öųXÖ3DYcPT§ āŻ@:~¤R/© ’ Œz‘Jž™Ė¬Ü󛝧Ń=Ę.|O_“©“O(ś—>Z²t€Č ,_ŒÉM6ß äK“ &#Ē÷ŠÕ_ćZå½ĄŽTf_MT0nD»&õ$o¾¹ø±ć1õŠ3ó CQéŠŅ„ņØZä_Ķ.d’ņXˆ<Ö;„qR»'¦ĒaO±i&r¬¤–åģSŅ·ŽÖY£¶xŠz %Ō“ź0_So°æÅū¬^;éRhį¼ <½?XLÄBI"·uōøŖü öw&K4é]n­äSń=¤ØOˆ-?ädŸšø&åYµc 7ĮsnȆæĪĢ£īY ĀÆ<WG¹mĀIHūļĄUGü<$¼W“05)$3‚憧łM„óH’O!CÅBCĄ ¾Ģń§_oŽb‘Ö;Œå# ŽŃ±aó«2湤QpaĘæ»=÷˜ō§E®,ˆŅµ$U #Ėq!*[`ŠBq–wt n’kććš#HŅLļAź3؍XŌ|{R£öŲ…‡üšųŗā°³ˆ9zˆĢ7§)Ć{q,‡żŽB"bWąČ“ŠA½$jŖ×Ąqvc’°Ž6G·‘R‚2Mk·ļµó Č1÷3¬·£¤Jžį%Y˜x|+€ ,m·‹˜I?ģUpŹÖ5ąŃGVHŹ‚MJ«F¾=xā”wnŌiŌ9?‰»G%Ō<”qa/'ńdhE?įŗeŽ Kł&E-źČĘREV¬PņZ%?ėI†VNX$Néč\“!„S·0„b•6§ŁvI?ĖUżœ‘é4k#·©ub³²S©Ec:°’$“]³ØirG%¼F’Hüjź}B£ž‰ĆLpĒ ŗē’Šõ?ėŹ©Ź®łDÓ¦"įųRœ…)N’}q)œlj jä{ŃAÆ\ē>oøõ.e1ņ-n€•,JQ‚1n­Ū—ņäFīä<“1, Cu;hHø(Ŗäõ^(®‹¾h•ę²O\fćˆŌP(J’¬ž.D”ŚĘbVā.?SvbÜČe_X“Äc®£ģ·7żø°ĀĪę[†W•D³#‘Čƒ÷eø ~76’³ óżÆˆL<ćW‡Ó$2ƒµˆUŲӗüML}§Ś•1[ XÉčĪ ¬ŽV»ń¦%y ‚‰<±°b›Ģ*}ź+†Ž‹,nźµ3q©§9Ł’†Į6ŅĘdpŸ•Ku­XŠų.ø±Ō[G3½ōބӿJ’”0‹Y½°h/c¹¼1[ś MĆbČØU‚W³ÅźU’ą9?Ųwåö±mz5KčĢ÷O(‹~*’ā½8ī›ćn,ܲGØhÖ×j¬j”I,Sbk¶Õ}øń’'ķš-›HÕ [J$JÕEv"›3ŸŚĀˆ|Åqov-n4»‰^ŽŹŃĮ")ų˜óiÓ~_ģ’&-Æ^O„]YCŖZ=¬·å~«K =ō̾˜Ūü¬„ž‰žå¬oµd‘Y#±^P­ĄĢV³žQÅéŗÆŪų>ŌŹŚģģŽ ¤>?²}B€ ~Ķ1_KįųHucöx˜Č÷~ŁW$ŖVf;ÆÄxš4 ŪÄ— f‘¬4ę’v Å*ża‘CSpŠż­ėˆ‰t7‹ŃŠžćÓuį,fÜ2šo‰EN(~ĻŠæ³/ø<Ϧ<­8ŗ™-ŠŖz@ŖWšĘĮK3?Āyņ£}•h°e›tĮéF'oP!2H`-WZmżąäř¾?ŚĄļēkHāYEÅĆ7>2ˆmāPG $%=C'ŁT^?ĢŃšżæ…‡ĪVŃLč·wΈLp³Ej¤ˆčŁ{7ŚoŚō’Ÿį 7žlžIŅK½H„yĘ-ŠmŽF<}!ŗ·«·>?ŻžĻŁ¦óœ¬CE}Xä1•Yč}CV *ĀJ’"’3e'œķ}7d¶¹ Ī2Šnf$‚””Ķz{‹‡‹_8Ū\*É‹ u›ÜM#/Ŗ Q>=øóķ/ņrĀf¼QveHYeV™\ų9ń0”©žRø¶‘ØéŠčāāKFüœ–ėtŖYȼˆoN8Ēö?™¾Ī ŸYÓɕŽŅIb<®ŸV5Õv;/8„r8’sĀ/‡ćõ„šÉŹ/©GéŖɧӜöyžT޲/Āæ³š$KƒĒ™įµŌo+øX­Wźž™Ŗ7bŌų›ŒŖķ%ģŖšäœń×ŗ…¦©.„{kĻŃ{•‘”/C)5^G~’ŸĆœ²ōNšō^¬ˆŅLX¤bE5*[bx|mź·Ā¼"ORY$åÅ32ŚßZzjž…äƒt“`å(Ęi½?dń żāó_õ²W§Lė©éļ(Łł’)ьrOą8kÓĒs’Aļ—RŲļą1Ż2č<ݟ’Ńõ6cÓlÆcÓM?†0ƒµzoż˜āEN|…)1ÜMśg6ó‚ onrõHągbórCū?a[“ņČģ–’¢]Į1S!hģ>"%ĘßńkŹ7Ą]†F·ĮL$®©Ņ”įöp&“–÷±˜~°ŅCŌ d“ńre­xž%Y—4ŠÉm,ŁæŖčĖ6Ģ(dpDźe•~Ēĉž¦ cc†u{„WE” £TRYT×ģ÷ų³@°Cyč‚č®ITmŚ2ņWznOĆöGĆöU³G# ō R#sżļ@Õåń†åžW,×PŪĒn÷q”EV!xŠrŚ¢˜;‰R(byLP"µĢ +Ȉ“ädŠ(÷^埞1ż¬%Õ<ĻBÉg)˜,K…”ĒzńžNKūĻWū¼‰ÜzŽd7’¼“ČĒėČ·:8J¦č ö¾Ž/åu­u&—Õ1I#™!“vųŲż‚O+G'—ó~ĻÅŲ¼æęK=VŠHń†D?iX Õž_’K†³M³±ŖŌń54¦żśõ’Ŗ˜M¤jcIó°Ōobø±Ö8£·€ŚŽI‘ŠQš6xŚS|QIčqū\ņłŁ©ś¾vZ‚ЬJŪ0ˆRꇭ%iE?ÉĄ:6Ø.xéÓFlź±Ķ“hä 8¬›†D)ę_~%zŻÅ¬©k ¦)C¤Įž¼Z²˜Ö3ĢŠ2æ~Ć"ä¢ĒĢZ’rŽęŅ;”vDY,ä <£›‚)ū3’‘ö0žöāĘH#ŗ±›Yž6U#hŖ Jy|H’š9×'Ėó:Ķž0ŻIĢ`V¢”ųpœßL¦(Ž8YØ  ż–Ä.°_ČŲŻN·†šŖŌ‹¹v~@ü%ū_mV\CRwŠcpT"’ŽŠ/ÄżāT8^ ĢØ’“’ĶI’x!˜š‘DŹj6*Ė)ėŁf žĒ0u“eŖŖ¼ƒğTĆĖü”ćöqI›‘,‡ÓŽ5®ģ”az€:tSpńÅfZ…ˆ &›’H€ž_ģS]ŖĆ§”äÜąe±īĖ6ćüžK¶ ³TŠ+½Ć†€qõé÷#böŹGÕ·ØQ3Q€lמ#&@–Š%>8Ņ2iŌ «öB‘JÓuåüļüŲ„¼Šõ»„ ’VCMiub¼©_Ś’ˆc½B¼e2ZS=Ą”1¹JļEäi_ååŗ¼]<@#ā§ŌE.’aBģb¬ņHxµ’-›łŠ"×Q%RŽģŽdXn$?#Hh)éŖ£™_ģ«Č“sēšāł†õĄ“HŒd•ŽąV)dć)é** 7«ö~5Ā©f»KUÅ$įž‚“-Ź…–”.ž—īć4żŅ«z|9~š¾Ņ7•ŚYś5ȀŠUڟ‰x8žĻĜxĘŖķŻ­ł1-ŃR4 Ȁ±°ÆÄ7ž+t\%EųKvR*~}?VI<¹ÆÜĮrgk{¤­Š”‰VU;ĻöÓž1sĪ”c­¦” «¼a.a-"ŖQ‰S ø ©ūL:sēžTJĪž£}a“iröbIÜZ™ł(ŽxhVE‘ų¢«FŅ7/īŪķē×59õ-Jk©Ū”ŒHcREI,Ż|]˜œcz’Ū*ŹUĢ_»‘dåĮ‘«Ē:Æó’¼¾ß ™Cu Īv^A–ŠŽņ9E"–żź(Őņ’ƒFų0lšøKZÕꙧŽGžšcV<Š”sRME‹jņ·č;€MjŹŪ¾(~Œ&y?Ņ՛eøZ’ ‹”’g¶#jėŌ)äŹ.•įißF-33Ė#(ųŌÓ³ÆüœĆ'ØØC”§jI-:ū.](Pæ ±’Œ3 žü°¢CIŸb†½Żd’c\·'ƒBēoRŚR@¼qF õźĮ°=ø„ņˆóäjj~)’ĖōłzĪ*8$Šk@‡éū$āWj}`X’.ŪµŪåŠŹLa뺄ΜĢNćį’Ū•kļ¶=Ē„¦[ĀŌ+[vŲ „‰6ÆFų±óĶ$q“ķ4S4½vųR䨩’)WpÄ]ČWjEpv¦ģ؍»ąķ ŃMF8v, šaÅb‘+Ōoź4=ųäcRŽŽ]~vŒaŒI0ėéņR÷żØ½B?ćśŲM$9nķÓkf„­ĒĮätū$ōū\ž?M™0×Oœµ©rĀD¹ģIÆĀD?5=än¹.æuV‚CūqHEv£:±’…–LmįHщB÷+Ä[×ģ‡VhŲ°ż£š'ŁČ44A3 «%ŻÄ|M~/Ni=ģW—śøĘbŠ£,ŻĻ*Ēé2.?Vų­„U’†•«'ßöŗt $„ŠB&”ļŌ5µņąé`Q“š€†Š1&4_ ž`n^ŁŃ¤bÅ`7ļĒČT9Ū›Ŗ…ž?»“āE’A÷6>µŖEؖ>~œ’…ˆj%ųV¼[üƋüœ,ø“Xa’HW•ŗ‚5¦0h¤Æg«!’)?Čx°1‚1 Ŗ¬k Ŗ?h°Š¶ć­Źņž~)šČ¬µĘģ„…;¬ÖņŠvńŒ…’аŁāoEQGķ,l½@HI;”Ģæģq³4SC$%k,D7BI”§øéž®!iXÜÉåŁóņ•I?FDźbYģ%Ū!ڟ°B~[× ®OšB Ŗ»(#ž2<€ķļü9p;5āōŁäZޤrÆū%’ĆkžŪQeQ‚iXD š5AŅ$ü)̧‚žĒłK’/,¬)9XŖża’¬¬ÆéżMdHަ„āō.Möą²¢/£qõHϧ lŹ(G%”Ø=’¼q’Ož9łc/o»?’Óõ.Qļ”Mzåń”ަ•#šķįf­’“ Z‚FīJõ ;W!z­Ģč°,†޲ ž× xšžą0ȉXżiꐬ V5Sæ_r[ žŚI®^B„ ¹&ˆmB́$­GcńÆŚż¬ 5­f7ź+)%ķĖR…‹³ż’’kų_üœZŻĻÕ§ŽCéȒ,DPŖÖ!„j?w]æ›ż\KU•ŒSŗ±if*$ä Š**ŠīR¼æÕĀ-ju’Dµ…̾šÅĢĢI¬ˆž¤•a½%d§śßėE4Æb£ń£²Ęh ;ŽKUē_ēVĒ[IĀÕä ܔ2«TUK%…kɔڜ¾/‹ģ²²wėķz¦?«ƒĀU;+Ī‹R‚ŃhŹȬ}­Ėˆ9¤.ŌsĶ€S±£s æü_'ŀÆy%¼•bĄ±J×öł=ĻĆX§ją Ŗd*ß Wm»ŠcG,‡tmĘĒprQå½jźŒBžØVå$oܰ­÷s2†Æ žĖń<Ēę^z {vIuĪ7†7  ˆ„häJ–ų‹.Ļš²}ŽjܗŸļƒ,g1·!¾×ĆMŲ8‰>W¼æ~ÖW°<H^Ci9o³éH Ūą”=?š<4±Š}%½L±=e‹ćOQŃų]›øäßeæį°ĆĖņÜÉ©<‚eµøÓ:¤¤ˆĶ-žFZ÷Y$ś»ń’~d–žw›NdA¼ŠĒ*ņ$¼ŖhGŅøW2‡„ÉZH/m½I!ń¦i §!Ņz×į‚źiņŪ,Ÿ¹`@ųdVg= ^ŲSo~ø“2Ē$’»måj(I/=ĀL©^G·ā>ПŠ(§xHģ=ńŃø˜…t;PT#ÓĒ $ąI'ć<äoū”'ČØCņ[Ćūėžœžģ‘OŽś’PtŲqĒŹĮ£’Ć/Ø$t#§$‘“÷”P„ē$Øy‚ĀĢÓÆ-’–¼±F4®M)ė*z‡Œ~ŗ×“˜ĮęKI•uY#ėAńÜŚĘ?L"ó}¼+­\­Ā€°É$NĶö }*õN_åG#’³/ž;ł- Ą‚×Q"v‰c2ČŻdŽ?Ż„ųJ÷ių?»äų)QĢW‘@RBŃ(x²¶Õ¼­’’ėš’Ś4‚”sˆ{ÓŌń¤‰’ŌݚP-IڽNßåĄŁ1>Æ5č™X‚~ŌtÆüœ’‚Ą×JŒ!#²ßn¼3’&’į±MBB±Ü1ߊ°:Ņ(©ßü®XY|“²ЧäĀ”=`œ3Œ‰­£˜Žā*:¬„žhV˜ ”Yą³4:3OŽWz^5S׿–ÓRįeµ90w‡›; H|9+_ŽFßäIƒą·ŽxĻØĘųŖ›„¤WūR7©@GZÆ?•=l¼Šž%+ń']žĒ/¤;2aݤ°Ģ-­Ü~īὄļV1€ĄĘó«Wüœ3ņõõͶ£%•ģ”ēHöoöLŃ׼䝔 ŗ‡~׳YŌ4ø9µ¼ŠCÉHݜØ<•OUķĖ›üKńd„SūxįLŗē’Ōõ-7Ū(åW¦St'ūq:Tų- ū°ŖņfHH”pBäĒł«¶s©§Vi„&»1©žę+iįr?ÉżÉjaśibP Čn!JķɃJ)Ó½> %%v·HłĒDŽ:R鬄’”$įÓCpÓÄU $~š;(UģweiN“÷ׄŖs¶Ž4™Ø:ĖĢqj 5,.Õfuw‘†T’`~ L rü^Ÿ$QüĶžĖ =&†īyĘåä% v–¢ķMß‹ÆśĻ‰£<‘Ė~ņ#¼låZ |GĀc'/Łx"ÄmŁy%(“r$UŪaNLžZ’žyćbõ%‚ęę~^¤lāH5GrĢ ”ąÜĀ¼SžHU”,k;²•­$|B‡łăžyÄŸäą Ź“iX¢ø–Ŗ• SOųČN؜üŅtꊱ JŌ)팸‰}PSģ9%kŪ~‡Ž”oöX­•ĀG2±Ż VE—$=hæĢŸŽ/łJø­äwĻ%\Hßī”öš^-Ćą <æh׳0Uއ¢ƒ¹¦ūO§4„G©šėN˜{I’kgĮ?Įʅøó ö?™Ń€#ü®)’=&ż§…Ģ’+J«Ė:ƒĘB‡Ó~Ė7‹žo\JĄ½œ¬„}P€üNŖšå7 ä—,‹«dŹāIyĶkp§œ6±ńaŅHäX„ŽD ¶Ģæš-šąQ õ 5L| ]Åkū×ģp5¼/興§(åę’j0OÜŲĖøŹØą*LRk֓Zš~ūˆ%:©‘Ćīei?ć|t¢Ä'įd’^Ÿ²ÆühaXˆ@ßn&nĘ„¤’›± ķKĒ‘Łc·DGųß ¢‰~±3(fåŚ“KcZ}'u$P¬@‡s˜ŅX`»£ Ā‹O"~ƏXćXgūų˜hŹN浊0tÉdm“V (6hԌ*¬×jB’ᧉ@ń2Jių­3Uē…ŗƒ"©„"‰—Y”OŅ:|­N.®]ö#f ™”ˆaož,ėfē“K(ĶxŽ.h…~ɉ›ö¹qįö_ āŌ£KŁć·“ė·Ń1.ѐŤHĄ©ä#RnnÕųU}?ēÅa·ž iŃŹ‰X<Éʵ±—Ѧćš/śŃä¦E[ÄGć6¬"_ņ‚4kO„"Ån µ»JGī÷aßį ÓżIdȅŌ$y‹Yč©$6ó€6©*É’VĀū•wˆ0’•m…Ć«ÉÅŞ25 "aɈ*”©ūJyW$1Ü4Q•&9[Ó+SR>¦õæi† “Y(€āĘ9=©/ ŲüNp(†å-å+ŃDčGś,‰øń꩞Ė’'`Z5aĆ žä¶ź„ ”<~.+ź*ü|~\”LK~ņC#k Rh‰V™Ō%cG8Hä÷ū\x§ķćoÆSŃŚŽŻPXĮhB€ŒbY9Ē‚8¬źs“āõzßmyāźńĖkźEńDā&W&żė}'•q÷Ÿ­ŹpŻĖO—Å‘żlŅRīy"¼Ąm¹*²qļ\m i„±}¾"Å]¾ -K'üG l}ONcĒ“GʧłŠ€żóĶu +õ˜ŌxŃ„ž”°³ÉČ×ŲIJ4Īķ_Ićd= $Y*?ą›žp^ū»hŁŚ‚Ō (dÄü¹ł¹5K/eŌ-f<=+Ųn` PŹMĢ‚>,(G 4?NōLH[˜äRYKP3­P}޼™UU9|,‘ pšĖQÅ@±ÕöĻ’Õõ)®ŁD×FŪõŹ&Ÿ,k§#Ų~óģv–ž©ć8ūO2ʛßŸłż¬ēK:Čt˜£¹ŗžBh›Äҕ߫;?OŁ|'Š3Ž“h»“+ 0aČŽ"מ{ £rė Ā£ŌõDĄėd_ö·ÄŸŒQ#Ÿ³ʉ°ó‘A§vųp€‹MŚE õųŗØv;Š+H­·ņqĀO1\FÖćŃ<]®)f£˜āRœŗP«ó’‚ć…ByEŻĆ*ķéń””āuŖż³Ä2’²’U±Å\9 ĄŽ*IųG=B½¾.{ÆüW.$³“u„õPŹ•” VŖG§Äßģxęµko®aÉfVIČܔ䯹˜©ćž_/ŚõBĘ;0õ!„£Øj†’ž8ū’9Ež_ŚūŒŖK€oSÄģ~ę\|č^ŁZ…}"x)³Ą sŲ’“‰QĪE”$ņl»‚Ā•ųæe×l¹WŒDSUźh\éæQžĒr»}šµ)¾ß,`ūKČl6ŪcL6^`!5OŁ@ƒ–ĆŪāēž^I<æ5Įøt)%ܓƲ­“h]Ć|hĢå~‚ÓćiUų«’yĻ$0é0Xk1ŻÜ„·½»š1cd…f’I%K€W‚Ž ÉW—Ćūk‚ę³øÓo®,.¢’&Š&dw [3æ£"ń$q*Ÿ žĒŁdO³‚¢ š»ŅŲ)÷õ\~$āTu=æzÕ=h¼’İ<‘Ŗ]<5-ńHˆ„…\ɗÅ=7äŽ(d”n nį×·OųŪ‘$’Ś~&­4R(a°äc@>HĆ·8觀TčP!”ķVŒc¦^O3(© ?… ?ÕĒzĮdģj²±ķ»*¢~³šw‰#¹E©hķ¤=(R5nżŹfžPCÆģ°RŌżäœwÄ"Ž‚eކįoµ Šž'ŚĄ’i‘Væœ vŽ%ž#ƒŅ‚ę"Ēcu,„{Ɔūā±[rś²l…ķēf>Ļ€üX/śŲM½¬lqVš$“ždĖüĒ·’Fcy+–A#)¹%™9Ėń23|Yh­^ŲŚÜ@A2A" ƒŒA䑞$ˆK*Fü=T柵ū-ƒ“ć4 }nņÉ!Ktž?T|jV_L–üü柱’Ż,š=¼@ņeWˆWł”2}50cķĒ©¦Ā«ødTßü cėņ–<ß%t;ŽŸ³ź9F œx©ŻjīrųˆVåSčņ’%¤’'ā⯑ݓ֪(+ēžźPæė’/p»g“Õs»žUߊ± ņ­y++RJ§ķśŒüłpĆż/Ėi¬[•žāh„UP« ØWš†‹'ćż˜Ż8š‘S—7/Ō<µŖĀŖ°IŁ¶Ø¤ 9Æ#_‰ ėøQŸ+†eAÅ^64ܽP~×S§ņ®kKVbd~Nī*ŗ™EjvQ“ły?ŚĘM ¤V9Yެ…ĀqFąĄ5C|kĒ—ū?ņkD–צ‘m„ŒÄÜ  õųźM©ĻążßópnIIcwź-bäH,Hut|Xƒö\ņĒA|‰"—¢”£U®Õ•o‹&žSx®ō“·7ĶbŃN÷s'–bąµųØā9}ÆŲų8|GsĮĒ,ŚlM§×nź³H öeY%7’u¢?ū_¼åĘø±¹°“½ˆČn­ćsF„$I"”ŸIÆ(ŌڬŖßĪÆŠFUeø >Ć@›oR­ĖæśŲ”,\©t’æLS·łY’7{Øå;RTB ?bęDzOл؂x3Žœ#-ŪčĢT-”A,ī‚ƒæŲ±?M—Óä€éÉ~qŹ}·Ä¢ņ1s³‰‚ö*ļcˆŹ\ĢTVˆ°ļź?ń®*Ó1•†Ź¬;“ź(ß·|¦š±FWpéJųüOųSnÜe£oūēv§rŒØk’ˆŸŻŁĀ”£ >.+Š„¦ßHĮ*ŸZ`Õ ź„Ž§ķŪīÅ®9}dŃ·ŠŽ@Ŗä€>ęč1—¾’éé3 «Žō1¬Ó·Żéć|én—–v‰>ĘKYaĘ~Œ+ׁ­>ĻŠ,sĆ=¬Pζ>“*%bN ? ¤’ļ+Å<œ¾/‹ūϵƒ 3FCvĖėz~•Ü öHpó+ƒ]Ć*¼{’/ū’łHÓOŒHĄ˜„`ūt£#ŸÄ͊Y«-‘‰kŹ3,[ҼāgOų²ägU‡ÓÕ4ÉįG2¦ēĘCOųYׯÉ1Œ7Hä ³rb†‚ T•ĀstV霬”Čr”‘@_LŖ©'–ź5—ŁKŽÄųQ™¹¹¢…§.õųpB^3x]œ‡-,pĄņ īōRTƒń7óc•/i Mm;IZ„c*Q‡-¹…o“Moy4|V# FJƬܖ¼y^“óū<µū\0č·1Ę.'•oĀ„b"”R£÷nĶJö«|^Ÿ©žģĄŅź÷ó[¬«ża¹č‹Œ<>›An '6ōæiW÷Œ¼–!héq©Ü7ØĢī“y…*I_¶ŖCWƒq‰ƒżØø6ŹßéČÕōāōĄ;~Ó: $Ÿ”7@ĪNŻć„P»mķTó6Š’L–óFųŪČ$Z“ü«‚’B`y@£$ŠĒ’v“ÓżR0@Ž=”).LL‚„¹F…<6‚ъlõōŗõų†ßņKž ōą#Ö!`h\·^œ”IūÖEÉ’R6XM"²–§`D>„}’Õ|é¾YOšÕ­Ņ Š0`hąƒSUpŁ ĒC—Šo›l’×õ ür{cI­w”Ž˜*FĒzFģÕ”Ī[łˆ«{}j_ŌÓŅQ u_]Ć'>æ9Óž2a6³p·šŃDeh¤ō# †Y F” ?³žĆ „ŌbYćšw, °³]Ŗ®{!”1j7Oļ0(·µŲ×į©F÷b2¤†AšBŖĢ"–‰ŒØcĞC°’ˆć$‹ī RÄü@Ų ¾Ÿų,l`#†d ŕ*Ņ•ļM釚uä‘E¢± ūŌz… ÉȞ//ƏĄ®ŸgÓÉÆé=ā×ė:Ķģ÷Aå§Ä=8Qč([Ó)ŻøüOö[ģ~Ž=ž™©Y]ÅZ@Eļ"Hęˆ’ƓšŖ¢Ō~÷— éóĘi÷ un®”L“ ³žÉhŹĘŽ8†Åxˆ§ŒVŠÓn(Lröü1°Ēµ¹,‚£ƒ\BKm¹ …‡į\öåčÄĢ’9m¤ŒØ?š+Œ’”lĒ8°+Ś›Ęq±fU؈ŗķöDli÷ļ‰Ū śŗÖ¢®cZ“Ņ@‹‰ĖžōTžÓĀ{ŖŪ½+÷ć„^ Wtī+_“OšŹéų"~Hkū XoZ¾Nš$ č€h ßԜéž¶4*µØbjypļū\Čłü$e^¶¤PŽS0{Ź”Xײ±ĆÉclk“Į¶Ų Ģʝ~ÜQó慶š¬ŗ\±1ųŻ=ZR CÓ}čiĒ“’Į6 óæÖt›s.’[¹RŖŽ“nī˜^q"|Cāįör"‹)ÜŗK?ŃÜ$`øõ\+źz"żė|rIö_ć‘ÄiĪ“^‰ŽA1øōdę&XŲ°*Ō#Q¦<*ĶžVJ¼®5Ä,zJŒŻ¾)s§üųnJżb¦†;‰‹ś³Gp“#Žgˆˆtõ*9 “żæu ü}ĀkĖjÜ,.ŽG’ä6(ņ …]’•8öXģ씼±ĀˆČc*Ŗ d#€éü£įĆi®Ż®6™YéJŖ¬1– ¬ķŠŻ­Ō+ĘB9v¦Ū|Pŗ’Äӏ 8¶ųXŚäĢÄE"*ØxĖ 1䑽iń”*ß“æČÜ׊IXĶpb°<¦@Ŗu„6&Ÿķ7Ę©ł#ÅŪ­’sQŖ™ ¬­ÅHmöš—[ŽŁ£3OVH™Ā G¦ķńKŪģ® Šą”j Ŗ„įœ4nI D±:UŪ§ć‚A¶Ž=ˆe“©4;™Y_ņIĄWĄ¬ÖÉ„dr¤t ¤÷ķaM£¢\Ć8‹ S׌ńrßż‘§ū^ŃŪź2‰>“A%Åø•ŗoö™š|*”X–£‚ŒĘ‡Æļ$oՉˆR(Š1>Š^MöWSüÖĮ°f†_ōœ^°ÕIRŌDrv߬/‡0ĄU՘ULšµ<Ń”§ŅłŃ¼#»Ģ·5õ Z#”¼ŗÖµųŗqÉX鎒:eõž™Ø¹’Šõ!§ß”|:euŹÆį€5Y’+9åz”H™™E „Eh 3”ł¶õR;ĖŠć…Ń-”2·©iOõ‰ųŁyr1©\Ć£oŒ²Ē¢]·USĶ,ģiö”4Do÷ćqĄµøOYŸ•©fćJ•‹*ĘRꊪ?Čż¾y¤iäŽ@čQå²ĄH噘ČvÓģÆó«‰M;$©'TŽCø”€sŹH#’s/; żŸKX#…Y*Ķo`ÆčĘę…ä37&bh^”=5v?oāžL,»»D6p€RT‡“Uųœ5I’+įĄ7sÜŹę9‰?W‹0 ‚…ų~ī*9-üøä‰#ä Sp‘Ņ„Ejšnn_cāĖET!Ŗ!u˜rŽ„­×ķraŁ~/÷fäĒQ#2qW%„d v«nOüóųUø}œ1““ Ėź+&e˜ÆĄDl82€yXI$uįšĖĒżŁšÓćš£ŸJ¤ˆ)#*åĮHūRq¬¼©ö›Õ_ļ!LV[ż5®š֎”†ćY$ۀʭ ®ÕaĆłłd?Z¼k÷ŅŌ¬£ŠĪ‘'ļ•x… Ŗčx’«&ZĮń  ¹*šx•©N?õĘ2D‰œ”āŲ‚YyŹ›ņ®&%eŠā.@,ØEf<Øi¹ų©·Łē»<™É]ƒHŪiÉĒZüK×ö¹bGŠÕ}†;‘SÅØˆŪ®/gp"‘cz,dՉQš÷ß”źŖßõÓe¾”séķdx£¤u˜Pø”…>³uoŚoęĆo,N`¾õ$C)‡Ą¼€ƒß†%ÆéJąŃ¦ß?EĀ~8 %$aPĀ;—R“?†%2J«ö‡%»/?‡Ćƒt=ęńyŹĪ–üš‰4’³üUą€n«öy?åöpö)Aos]ņ¹‘ąŲ“ę®#āOŁWżēŲČ潄½…Į†AX˜ķä§ģ„AFŪiŠr’YĖU'I©å±3“’zˆOąø“‚YQb&€Ėńå}15~E°\p½xÆ¬Ņ Ȩ꽿•0—ց£YÜ«֒øNæfOų\6žq?—ąž•Ń̦„“KD?Īē¶D$’->Ѧ”‰ē˜¤-22ś®ž’R½!3ĒÅĆüæ‹ŪŚŪ¤ÖwVüw<ć“ŅpÉUøz<–/Sģq_å_‰²[¤Ę’„nŃŖž“P½+ћüx°Ņ²^ކŁd™«$(üž?š8Gę…v²(āž7Aµ90?įŁšŸP޲E(4żōNk¶Ī‘G’F8Pˆ$Ķæī’XܶĮ„U’gƒķÕEč’SXĢfāa±ų]9•’dÜ?ä^š6d\/©32$ˆäŃۃŹĖæĆĮd•¹~Ļī“łqó5Ķõ¹[Eōm½üC ÉFt’=ĘĖNŸåcd[ˆd†Ļ˜~"õE9sŽ(Óz~ÉuSž¬®ßī¼wKg?»^.Ū†g‚P~eJož¶6ż™ć+ĶJ:śoæüa†+ŗ—4–I§­W1ķžÉ·ĒHĘ0‚CDē©=E 4’Yp¤ź×p…<ˆ‘‹0žer mQńz;į\dGĖ/$"ŒŻ2za”Š&Qo½U˜1$‡éÅk'X~ņO޾±įä{ŸT3\ˆžš€ƒ›= ySÓ_Oķ~Ź»’…» oN0ˆSoLƒŹBß܄e’/ż†I©¹ē¼<ø±f-Ń5 Äכl‚Oł·įMŽåJЉ ķėœøµ@ćń8ųž×Å&"l®š!³"04U’Š ŌvÆ&oŽ7,¤Óį}Y¤ų?Ņ~_jØ E÷āÜ?ąż1öVÖń·Ŗ–ė@°ל®Į‚0ܚ°­8~Ūü-Å…›—õef…“RJ”ßāHˆQ@ J<±æ\ł±ā:&‘¬­Śó÷BS0Pō4 šPēĻāOŲN žV)«\:ĀŠ[\˜$Œ—U&ˆAĢģĶ p“›Ž4æ¼åĮW!ŗ¤–RO,l&’]’Gb²zŖÜMGŪøći"@ģ»»TČH©$ĘTšų·7Åf· XŪ/‰j ’ŪŠÆz³~×óe å*ROM¤g-B(8JOV īąÖĄ«ŗ9V5 VbEŌŖ€>Ū36_Łų²§’Z€•ę Šˆ)ßł[+¹(<Ø)N‹Q·æĻPįŲ‚xü»t¶ŠĻÕ«>ąžŪ@Ē£SāŪüӆ—60Ćs\zE„Qź³€"—ˆ ¤’/%bĖ*7÷¼”—„ælóČ2Ķ'˜ī„·āŅŤްRä£2ęBXīĄŗü_Ė“[„Č¦ŖÖ”dj|qN§ÓaüŌäńš’'ł\°ćHXmżIē‡Ōž)™m£`Ljį¹³±ß—eJqnGöZN¹²µhį(ŸRøM~0S™§Ļćs»/Ų’bü?w X‹F‘ō3©gU§*Qqßģ€ĶĖ»Ņ.£’±¤3“‡į‰\DģT»|+ 欜Čų¶žķÅ}4'‹ƒGb}GubY^8Ż)Ƀ+kšü?Źė‹Fes#G%ĆÕg†Å"āōĢ”Wr¬Ē¢Gž_Åšą»[…!q0”Ó,äĒÄ»qjBqeGük‚āÖŬFā*Ü£ģµTŠŻ™’É pāģėšņ ęxåŗŃm®%^34U®ÜŠ”bHųVJ©’ŒœW#WéÆ3żÜž²CQTc_Će‘'“W'Ņh>1ŌxG’³b—Ä)FÅćPµŸv"æ¹ AÅŁ^I+ćéüĆ!t ßfōx”;}ˆĢ żķ®D®ģžkˆg †+q'Öå+²¢€ž’ö׉^q÷gfā˜CwWŻX@®Ær+Īz·•Ś`/ė’'¦‰“b’¤ėūĘ·$½_‘?ÆŃ_ö8-#?_¹E;zqˆž“0žL`0„śœņ‘šr‰éįé\¬ŸńŒ‰¶Ś¦Ō-o@¦µ%£i#’Usk¬Ž Øśgnžš»žæå·<ē„ĘŒŃ/PwZGƏŚln”KųĮx§ŌPƒBd"µŪć+·ł-€ę¼ž Ńco†s"ÖæŽ;»€ōĻł9RNĘņ)¤ ńf–6›Åz“)’e‰"š¬ M (ŖAžuT®Ž>£c'F’īŖU&{qQø’z·ŗG[üSYŗī‘Ŗ¹Ųķė9"æš ˆ¼æčźda¼Aż£„t’SԐƒo)„R@$čw<‡¾܆V›‰žķ€^#į<Æånxg'ZFByCpt§Sķōā×JU®ĄDõĮA70GŅÕĒ2:E-G%I­®;¼}6§æ$ÅāµTžH“TT1āAčųX°|3IPKHņ…aP¤%Üū•uε ²Ju^ŒŅ7 Uf#¾Õ®H†?~¹«į—C㟒Ņõ4žDõ8ӄŽgoOD¼4سā<]OĆOųlåžm†¹i¦adI}p®©X’z~ö^ Ä.BnååhYi#ĘĖ2–”ū 5Ą²—ćĻö®[“|0|csTxĻ F‹†Å`R }?™yæ14?¶ø…š“- —0ˆ ¼²‚*VBPœT¶ÉéD?›‚"žŽ7Qŗ’;’ŠˆśeKäó8Ŗ+U”Ź8¾’i[ö_ īdø·I¹‹dg1£•«†żć7ū%¾Ąū?šš*VŽHt>]xp’„’_‰/­źNc{p)ĀF“9E"¤kæņæśœ~4Į"IæFzę©4­éŌ30Ž:| RvX}Ÿ·šż—Ą‹zÖV릉,€u¦Żn#»rųŻŸĶ—¹œƒuļ9U`$2ENļöT°’(r_åO“¦”,ķ„YŹÅ$ŠC<Ž=F;ŖųõżŸõ¹|^šm%ėÜK=㼋H‹F$Tõ_‰+·Eųy·©ĖāĀ1éÖkfZMø+¹!J° ųø²¶ßģæ—ó"v®Ģźڈ.-ŅqóĮĘ(ö«¬3?~­CCō¶#yR<¦2¼Üō§ØČM¶/†6щōۘėDąŸ+—y:’*ÜdBig˜%¼e!f’“§ŠFeŻĢĪĪUQx’ŗžOŁĄrĆqA e‚—K{ˆ³E'/Ż™ų²Æ§sR¾¦üe›y’»)di“éĮ«2ĆüŖ,ōóŃįL4Žõ+²zL*_FEoł6«’…ŚśØŅnTō‰%õ茿®Ȉz-Źø§)®(OuQõæŲšf•ć’žäPń©ŒČōiŽ’ żŸ¦X!jν”õ”brKŹKˆŲ•–II ü@4(ŹÆß«Ko·óf½E’{™$źÓ*ƒŽKhĮ»ĖĒå^$B¼lBŠčæó+2²^BŃg•DŪtō£2Ÿå*āQĪćQ“-_[•ŗ(;ńŖČ ŽŪÖ“Ćč¾Ģ\Ź„> e M¾Õü6æGh%…ǧöŠfN@’ŖŲĶIū’ŸĘ_‹›‚ķFŲš u©Aų~[}Ÿ‡ł}WCÜ%Ķ•Ō/'”‘H䝚W’Ÿ²Čмæeæa+–hį‘łGœ©^rQØ”[ŖĆµc ŖĪßņąö1*ˆŅ(‚¢8Ēā:Wh?ą~Ļģńu=šČ³Üśp>œ Ī)aB#¼œžÓˆä“öxpT…­„²–ŁĆźĆ #W·7R¼!~ß̼~äUāų[ ÓźqސĆosךD.ń˜ÄŽńÅO³'Ń>ēnMƒšEŃ«V‡Ó/U¢UŠæńö~Ž)qõ„`×<&p—VPØ„K|DS©Pq‘ś`1BX1 īkĄ+Ŗf<Ńįę—VJ71+ÖE·˜µwŪ‰uȕ×Ödk‰mż5ŗ¶›Œ!ՊCĢUĄ5āØźI_Ų‰½OŁG4RK46zŒ-„—źr)n,Rˆ Ø.«żē/µĖķrćörE ߝuŲŽtqÓ£ąĮ=ŗ’±ĆĖ•Uø²S¼BI¢*›ż)k!’eˆkŽ®•{Z±‰Į=źcųŗ©&C£‹Ķ©+šś¾¤‹CŗÉkďøTąOHĒ:Ü:Z2Ķ@zś«ĆžqhKCįXāBµ®õg`’r°8”¶‘4ņŹåK,”ˆ4F Œāʜ1 žS/)FP„Aź8ę`~IǦ]Ģ]€€*ŖĪ6ØHł“ō±cž¶ų䆬fŚY¤P7Ź„ŌÅ””.«„Ž@@ų©Œ‘Mė^\‡śŲrčRāHžDG0f­>#¶ćā^8ä®ĮC@Ė QæŁõCšöØ^ųķd/ÅŹŖZ:6-+ļ…Ra#NŠį–¤ÓįWÆ\ni ‰ć‚ܬā bCOłémĘø8ĒžŠ®jZŽ#µz“¼=Õ# &•*H2…;ĘŃų1’†:øk‡Š`æÜ[A&Żyśmöžm°Ź44@„°™¶ m§WĄ™³§łząÉ›Š¬¼r€=”Sć’¼p„ré¾Ż3SÜ}Ł’ŌõlĒå”k÷öÄdu $|M@ ”Ævśao’ĻĖŗ”ÜCŹŠ,pDz4®Ģ“ Hm‡²¹Č|ŪÅ-5+¢ÕP†ŅŅē«zqĆ鼌+כ7Ćž^D½) œĪŠ^K§^(Äéŗ3 ņEÖ?k÷œÓķqÄŁ™TĪŪŒ¬j€ƒmh€zq‰id<—ģóåĖż÷Ė ģį¶bPŸJ@¦,ų؍)PyrßÕTˆ_Š5Gō>ß,&ž‚4‰mH‹Ņ¤exĻ>/Ž¶Ķ­$I`įD“Ņq»j9U©öĆŖńćžGģć”ĒBԟMZ½O‰o‹ąL "*Źž€’5`Č©_³]éBŹ“éū_ģqs-¹™’>>¢ĀļTW‰&Š­Zs?š\½6āÜpS“𭰊?ŽUc€ų Ī„B×r+#}ž Ĝł»ż”¾“–SŪM&xć n§ķ/4?lq'‚£ÆŖ+žĖģįzV²3~ņd!˜’f,āeżåßqĄ²ĘV%ÆĀ$ūC”ųHSģxrō¶’}æł|µ£Ļ“‘ pEkžH'[Š[šŽrBČď‰cV54ųæk·ĆĒrEĮõ•ŲR 9JF켇ŲćžR É0ēĶ]ølG#4§Aö± ’8•„„S!Æ^“€iüÕć’\儫Ȳ&ĢīŎę„)#“WńĢŌeżį.ž¢«1<¶ąßżłžČY+¦Tj0‘øöR&»wƙkj°‚”A!£!W*ƒ‘¦āPßäÆ'vžVao»ąĪio"FüŠTņRū©ÅO¤«ū?÷1¾ĀB/”oN)j±£2¾Ģc§’} xÕ?yé4Ÿģ’}9ŅUīō[h“ĻФ””Ē'(¦J©R~Ņ D›żoW m",ĻVEcZnČą”oŚ­+EäņūdEŪ#\F­ź*0)Š8ę…Iö§ņńż‚ī.„Šx±Zžā„vŪŖ’ŸüU¼Ø¢0Ó9"?LräzWā5ļūĶž »] RŌP±óś« ø€”I”NœŃ™˜ØSÆ&ēéüŽ :Ųe 4"hćPĮ ēy"Q^Ÿ»F’døÉŪJ“•ś[GØŠū±mpŌ ņDøŻ¾.)šæRóųP<žb†×PŽ +K“¼e®®’(ćHø³ž-'‘•Āķé|[ūłdē/0kėģąJ*Ķ G*œEHWqFUįVN|½Iįū 3MÕµ£u j—æč×3ˆ“ą"x7`JÄŠŹfć/ī•ž²Ü°$¾lŌ‘4¦&@³WM†2¬²S­3CĮ}_J7‡ž*“ģ‹ÓõŪY"æÕŻ™t›i"Ś3żiU¤Š…ę`䬒EĒÓD›’ü„†­åŻrźź-";Óqj*^HŃc’“Żų(Pj| ń'ļU?cŃķå‹TōMLŃ(bxņ3%½7g„{änšMüā0A’å¤UØ éŠ§Łš%i?ČOņššiąŗø“†ŅjKm,u’_ļ ŹżwVęü üµū?I"p4łe QŠį)ü¤Lūą{tĒh„ńåEi½^'¶&æģ¤8«Ø˜2TĆżz7źžL‚Ē ŖJ¤üBd5ųTšBM}’LBõŪź­"²”/·¤ _ųŽ\å8j¤?©źƒü  {žĪaɄņ>‚ĄŹŌūqƒO¹°=Ō©*Er¤i3ŹŖČˆ÷ŖŒMďu4@Ō4MéשŖM^£āuÄåaŅĶÕ»’^+OäOLPoZ·*b&R5„w‹SÕ$Ÿˆ_£h˜q,īž…ŚT‹*‚[`y+Žø‹^¤M“ŒĢÆ?&Š9N4?[®7ė™ćd#Š£%YDŅ ‘ CüƍÉ9É|ŃfņŁĒ?vy¤43¹ŚµäĖtČr1*]…i¤iÅA) ŹÄEĪæOq’`ŽPŗ³Ņk»…’Dh"V%‚ČĪ F_Ż£SāOƒ÷b૳ØRdÆ`pŖĮ鹆«mĆģr_÷fŽ/S÷n¤¦ŅJI ¼j8ŸU“‡ų[Ÿņ` ˆb’š ˆd†¼œt1ąŸ»ėPQӊņÄÖRi"¢IgTXŲ•e1Ņ£鲟Żü?ʟkķ_7k‰(ĘI",ÅG`Xņ,Ŗ~?ģqž©·‚TØ@&W`ŹæY> æń’ŽŖx·.ȧŁ’Ė)ÅC5äT֊7Z‚’Wü’i@­$Üģ™œ ­aJ|_Fd/ V®Tuż£Nć%Ö±ź7leOÜL’0Bh*ĢĻZų²C„yWOž16…fEœ”X¦Q#"33+ģÅ8²a£łߟ)Ō0Q]Šŗ—Ÿ‹)4Ż žĆĘæń6–ŽßORöŃņ¹R®jhdgGNMB9O‡‡įżœ 3,w<,ĶHŽP] Œ»KĒĒ‹…)ĮžŅšåÄd18R’Eé,G!ČQ‡Ķ’ź|p;#|AgiÜC9Ū”y䒑© 48†ųO©ĖūæųEK^ī* HĀ sõŁĶ?©* P›@Ž/ļ_NOS‡ÆĻ”Ö,“Ū©§øŌRöźś4¤Z4(’ļźrA+™>.ś«ūÅ_ļłć›]šzM Ą·2£–į@¾ŽFŁL³ŗ£pūl¦F_ų©šĻ™uM6ÖŪ”&åU#FjK!ō H›`n<øóO·„ĆY‡ŅK{yņę(Ł“ČnŚ „·}&ę²»‚pņoŚ_ļ1{…ׄÓUŒrĆ<␱€,‘TP³‚“ÉcOõWöqöĖe +k}m#Ū¤BXJ²Bœqꧦ>±H½4ž\$±ņÅżŌ²éĘS8vō4ųā*‘!!õ’rMä(ʬße?e¶’4{m2}KEv°»r5‘‚Ēs-ežʍouź$ņņipvt"љd‰¢’ÖYc‚ v7H²«Ā%ā¼9ė!ų§V^<åĮépéÆ@œ”U#1É5ŹĘSø2Ć ægö~Ć|k„z„· _PW‘–’FrŖĮaš\ųl#Ö„±¹¶‘ƒ]BcŽ!Ō¬œųR*YŁŚNÉčžĻŚĆūM:ń¤^nØ]ŠWwæp?Õ>„{a¬ąÉ¦FüŖėčšōų•Ń ’†•°jÆ9)Z+‚°cÄĄ­ŹĄg>½`¢éŲUP½RķP}f®ų•Ó<öSAŖÄŪ€=j©?šuĘĮ:²Ė+ՕÜUEM>Mߎ&)b«ĪŽŚBš4ŽI7ų[ˆÓޜrļ#įŖŽSóƒįŲ—ŪnĄFą°$*#•'­XÜ’'ĖćZøĄ·(ÓŁ „ķŠ0“Óļ×ģČp?­³FŒ 4"CȐ h¼š]ĻņóĘżzüBC\¬‹.‚\ƒ%OOų³Ó_ęų±VšóŌe”‘›Õ1†R²Ęj9P~ķLœGņü_`asx©=`Ł”nMÄģĘŖ+¹ū\ą?kaHȲB¬ ­†%˜0$ žĻū,̼mž0€FŽ•'„#ä+Šų`W•Ś#ż©ĄY4ųł’Ÿ*H±—rŠ|q–7 4$ŠS§Ć†ŗRŹļh$P±ÄV3SBZv!«N’J4²­¦ 1ćN’ń'õ[:sĖK³”š2Ļ 0š(-Ó·&ɤ.¬ŅĄńaZvŖ)ßļÅxļŽ§lŌ>’ÖõØŹ9DāR֕ˆ?ŽłÖ¦u¤³FėR TÉjŒi±÷“ėœ£Ģ‚I“é^Ä ADœT¢ĘĻĖenLÜ`‘æć'?ŲČl6»i'‰cN?Ź¢‚4rO"$¦Übõ&äź’fœĄ’Õć~ś¬1©õei J¢·jšVW<„^ ķń,Yi4ĀE{¹*ėÉ`†3Ą(R¤ÉĢ€yzÜ}(’Ż?÷iµŅ„ŒÉ)[ˆŃd(YH’Šćä9bßĢæ±,Ÿ½õ8…õćõhĮRęy`J0 ҵ-é­•ž÷‚žĆā(dGõdZŹ Ķ<‰Tž”cӕkżŚóžńš2Jx234qž^¤›T–!Ÿ~Ė‚„>ò·ķI‚­a¹ŗ¶D©ża@`€Š€ƒį©ą?vŸĶž¾Xā’$ŅAɘP…隟jŖ§ūņ_ß~ĻŤvō›ˆaėQV „ “äŹßeø­?»õ=?ŁVÄby%™§E)Y£X˜€LM¹äv§oQSģń‡üŽ8d|·,zzŪIlĢL5 ,PGHyŠŹYŖččYžĻĆ'ł9QŁÄ×2G5Ģ0zŒ“£<«^³JÕ⬵nLæm¾žLGaĘ7ŽPÜshnVIL4”īBp}£–œ˜äzųĪŹ²Låd;U~ĻĒućÜ}„ųF$”Q%“°+AZ·s’ˆ¼LńM «ćŠBK"ÆÉ ~{³*§&Į0+:§*8ģ8GĀĄrZxŸ‹ü„’W•I§¹ūfyn^G H5÷’?…ŗT*ÓZ/G•˰jQyņU÷?Żä¢Į–1lhx¼Q…+ūÄ`>ŽL¹)Ń-īo$™m#iDŠŅ¢…x×§dÉÕ”X@]n.”¬J±%įp\ °5SOó\)ŌaÖ¢3;ŲĶõ~tŽjqrØIVąĶÄ–Ų3ņž_ŁĀ1®‹]FXµSjĀ·7rĒ3@,Œģōāܖ6“—ŚuųłEw‹ÕYšédäövöÖī_Ó&œėĶŲ£ž›Ńōł}æębŗjsMtŃP³5¼š"äVؐ›µ%‘ŪŌOāų•Ó‚āžbó?)!T‚Ęų`hŅStTɑkÅyū$‘ü_óäcU¼Õk{ż@¤æŻ®#™ł­bLnЇö8ÓłżL’yaŃ®#—NFųŅ»ō)éĶP…’AHO æŻ,Šæięū9:Óō»•“$›÷¼Ņ8ƒ,i]˜æ&ų¶_W›ŗżøy}–Ļ}o Ś›yŲĒ!u€t„¦ģ‰ ō§ūłæć ` mŲĘg» n">°ž;“:—sźĒ"ı"ÓāqĮū2ÆģŒėr…¾²““% źĖt‹HMZ©#¼¾¤oū.²G%žó —ĢõĶü©¦\Żéw›[±2rŽTeä&H˜Ø pXy¼æز/§i·š}櫬Ķy©2rQ=šR ]@āŏŚķn?’?U~YõDg’éšI&˜$#…! XŚ»»©åž»žń `wk„4ā^"Ńу šŸ³!-ū$­P;3•ų²9w„Įu#8,g“’É0n $“eä †8ٚŒ?ßmĆ÷œ[ <³4’[3Ļń¼‘·"v%B¤Å·„y—pŻRI<·(SY’ŚP޲"Šł1?ģpĘ­±N¤7ÓbOÕA58”Ż_DŒVc%Ą–Ł"¹$q¹FT½&YOņAė‡VJPŹ)# ģ8Ļ$B‡øżęM4EŅ;U­Ł%;°ŽS÷œž[Ė1© Ū”d?ńś2óoą3’×õG†7(ūāSTĘĄlH 9 ó®-µ=Bšs¦YzåFō¬ĢōaCøś‰Īgękpćź”„id-MüL*4qqÆģÄUڟk‹6F䩑d5ü¬Ó'hK©”(;Gš7õd’[‹śˆ˜Āvz“7³Ź$bėÄæĄ¦é ūNÜ}GT’S)ח'õ^U…Ų4Ž \³^$ĘĀDJt‘žéyńĀÆ^[«¤Y\qO†Żˆ&¬©@jQiš ’&?ćĒKok ‚"H*ģĖʆŸhĘĪ’ķroē\JęņIUŌ79¤$Ķ%8z’HCøžU”ćź/ӏ÷ ŽdF*X‚°•¦ėŪz­ń²ÉM„1„H üj‹# 4V5+Z1ćé æÕ|=­½µ«–žöäņ,H5Vų¶ ޚńąæĶž·ĀI-ÄĄČ_ˆ·ŠJÜ ó*„ųvTūJ$ćö=oņpVmvļsŽMńtPA źA½¾Ÿņ¾4Å/"†ä¼³€XŻErĻ·ļ$)šŌkź·¦*oÄņ¤ņĻ'‰¤oŽI*Ž‘+šĒšÆ°éö¾ß.9rµĶÜÓK%Ą@ćUų8€~Ź×ÓL ygŒ¹A"7 ¬`TķŅ“’c™£ŒK*Ōļ+ě’Bś†ūģc^óź÷3²"¼ōeˆ śˆdf1^ų#ź*‰kĖ“ńSķÅø¹ŗ…?́dfüœ|$ĶRFńƒĖāZqVå_MkĻž#‚“PŸ\²/ŚōŁBī­B§vŽ„z¬ßė|?g$CŒФ“č$€÷ä”\w’$įŹźŗ^’dĢ~&ˆÄUyøų‚Ś” ’¬Ų"ęo!ėĮiq«$8Ū¼Ŗ…ʐÒÄÓų³‚ßĖ:&”ėĆe„ VSOōi39m‡ļćäܾ4Oų»æŌu{ß«ßhz-µµńRxµ."ōÖ]ž“õUćźP/ ‡^xŻWĖ’™÷7H/ukXd,—ZtJš$s)Ž­ø „M”i?“āžė’zo哺n³łŠ§ĘįŚ«p{ vTõ…—Øųחļx>O”мŗ¶¢Ł“ Uė „)IL±Ź}’›.I>”l¶–L–Öē¬Ké*vcÅĆu’[!ŗē˜n“+łn(MbVŽßFxķ¤·‹ķDęuVyŅT+#rŽŪķįߕ¼Ė§źŗbśś‚ŁҲųm# Ø‰Ķżu•ŻŸ—ĀÜ£“ö°{łNŅxc¶if¼·†ou/ļäBģ\Ń?yWVõY•łśž—©ńāh¶ś“z0iæZ ¬FB2’?uVŒæpŹž»7óį~–4ķ.yž9ąŒrć ¬BŻVP“ęĢĢŖUW÷m/¦²rōćl˜ĖņDŠŽ"ĶÆŖ™y.C|Oń3Qc“‹zæ“I5ėŽß‰n.Võœ/L¬ŽŃ‡Fz·§Ķ$D#Ӂ½^_“–µęM;L“Ä‚I™„iiŚe!—eZ‘ń7Ł?|?ĶĖčWķĶüW¶‘ŪÅq3Ā‚V>²GqĘ=8”~쇖®ó·Øßš9$óIē©ŲKśŻ“’“²+2ƌhł™’ŲdvāĪÕ£yķžXHNsŽLč@¬¤pݹpn?ĆńÆĮ†^žcrÆpŖ$oŠUZæ ŖlJӔ)ūęĆĶ >¦aÆĒI®õzµ~÷– H¼’ŹĮ:;šŌ ­$-üÉēbM8~#ż×’’=8Äā!ųP,@÷Å$jGq¹\ŚŠø˜-ŵźcv+^Q}[ӑ6§ŚY˜õČ­ƒĶwŖ G”Šb(UŁ>W—ľ·ł? ¼É«`moZG…Ų“³Gä¤_~ 4^eO‚O‡ŌÄ4ß5ėÖ÷ßėkc$‰ÓĀ’"ćVbgFÜ7ĆqÅ’Ęj˜V· k¬®+ \C"·!öŠ 9ŸhņY~̉‘›æ3YK±„µĄ@=>(Ė-Ō(¤.ōvvIWāåüŲū?7]Xś+ś6ĀdD„{w1rŃFVW”• Ē“~Ē.gźŽ}óō\.$j–ˆT­Ģ­3wį—‚}·ćĒ#²OtĢļ$ņŻRŅ€IE«VEōъ×ifį$ųVEĒĮFEœÉ#«w … °A+óć"'ūĶŚnxd–W7Ež#%®ŸEŽ)ę2VZ ŗĘ€4ŅĘż]Ņ)VOŲ‹ąĆyÆ!¾»-§E—lR½;Tõ.Ł cØ‹ūeŸ÷—?$ĘŪ%µ…÷”ge$7r1Ynœ$× dųy™90E®ß­’żÆ„žÖÜĆsk ;8ŠC3ČģYŖ]XÕĻ¦y‰źZ4čFHƒį¬\ćŒöRs’a‘ķBŽ( ‰n a,€žU”Cū¦ĆāĮšmÄM{ŹrQĆ ŃÜUć#zė¦éDĆ%Ą$—I}Z»+Ć,c[/„¦‚«nŅ"åbr©’&?į²3®²Śj0Čmā—ā÷Šģh¬BӋ/ģ϶>8“Ó:…·Ćé“ }lŪ2;*ŗ’µ(܌æi8•6Eć·[OV€ŹßWKwqŠ4eł•c§ū,u»’Gb²®­]Ō"SĆnXŽ­ī()2Ü;ĶN‹ĒÖ’ĀbńIBŗŠ|ł‹•öżš6#%»8‘SįĶ­ÄPs»ÕQ[ž܉I/ĮxŹTõŻKõ©źņÅmģVrFĶQĀd†A¹€n!kOŽ”cuĄÉn{uć *T5y˜źV“ū,~/õšTp¹ˆ,ŻĘŅMnMC;•ļ_’W*Ņ֐˜¤4Ždō£“öˆ”,™/ęČü³™,ƒI4ÆĮŅįj‰#‡š:į$l©æŁh’—Kk ‘D937'r>&¬.iZr„cĶö¾Ė|+”-=a“Ó(ņ•\™)¤mÄV›™?āI—t/į!™Ä±ÄIäPīŅ‘@lUœ.' —d^a=Ye`Hżš3_õ„*~×, sĀ ÕŲ-*Ój±W­?É2*’­ž¶Š RbäŖŖ„ä9}öØūMlĒ—ó“Šé‘‘ØĆ#€LĢŅsš/(=¾ę§ü¼;I$ŽŽ@¼˜šäėŌD?W‚µP"ŗŲżøer•åBČc­{S†§3Źt1Ę]¤Q,Ŗ$T`ņ»s ~/…zŗćĒ -dm8ÄķÅŲŁŹQƒN$ƒĘ¾Ÿśźā?£mŒok5½gžŒU £S“SŒun5’~`˜¬})øGq'Ł!£x̜B…cŃ~Ž3mü©ü¹PŲj(Z8*²ĢņF.ąż~.5^ŸµöpÓN–_«É œyĪĻP ā¦Wō„‘öxÕægķ~ĪE%g“”ϱrx³ĀCr$ƒ¼¤ņ§Łū)žN dØųsšÅ Uš“(¼æÕųæĖoĖ·HØ`YjĢĒżŲµźŅ97§ń7ĮĪHcū*ŚysZ¼BāvńŽ//! Ŗ¢šń35ŅæļŸ…~×/‹]Py-­”xēŠJ“_V…åĄ4ån¤­Ó–óńō—ż’’ ?O¶³¹2Ņāī3Vŗøš9$?³šó·ƒē9ö}_Żįµž—ęb3>™uy ˜É[kfQµ]XµģżæŻimū|>Ņāz4Z¼÷D\ZŪŪŲ‡żõ•„ŌH…ŻęĶõŻ7–x—;Ńtū)ļl“…Ó®#¶q ø.‘›:Žf'W¬œĘž¬¾§ģ#x…įŻ¹ü9™Ķ>/EUœšŚį‡ś y<³så[]Rń#ā7C-Äb‡zŃ²'Øéö·ą3H"¼VahUčįbv_ŪŁ?įøą½D–g*fWføj©gXÉHŻĄ C¼‰F 9|?®Hģ~ »žT‘JāµūJ$»Ņ\lV7øęµ0ĢAÆś«!ü#|ŽłŃ µ:Ø«$’4ņbYU£Rżń?ÜÆ"y“„ŚN©,±Ž,ņRęŚ'EąÅ??“ßŗūGāųp膼HŲÕ+''e©!Ų4`Ž Į6¢†ø"¼ Ž„r§nĶźc)-ļ¾*“+ YkOŽ,ČŖµ÷ęķ’•9•„$Æļ –ōŪ‹Ht;žĢ›ņ’+l‹ Ćņ5X. »Šķ!tO§†ĒE·IneB‘¾õ<#Šõéū ˆ¬nÅi7Ŗ¼ųķ@Jūč/ü&‘£ŻÜ~ā$w'` Z«:véoŠn¹/!b7Ą#o”°^Ÿ©ƒā3›z%eœx’Åqā-čĖlb”UŌžü=E_ų®#sČO ŒæjXŌ®’“©]żł5qKW[HFĀć–ßń–>¾a±i¤–(NŌŗ*ÕźQ%ŠcJמyaŽ™,I©ŪĘą­zņ9;tŽ$tż‘“½=$~"„q“„HŪdusžĘ­“ HŠ4ņūóź„8–ާ¾§~ł`WśåPųē’Ņõ Ol¬nōĄZ³qÓ®Č#—”7F€ŸM»ķL'»‚42[ÅʤĆ$ƍRQrÆŲoŠ™Ā|Ē ‘K ĪŽ©§ŅPŖ–b$y Ü3=¼”n_Žäg\™Õ­ķĻxšG˜‚A’PEd>xq?äü\0žāX¤u!xĀ£ŒIPI P9ŠķüŸźąrĢX³IźNēü» ›·īQb‚įč·|("J™$5ÕQė/žīE÷™#‡QśŒšĻaĒ °XY•Ś‘ńSŻŪӊ%žó퓟gąkõ•s<§ō†£Os*? ‘HÄB9Ē5Y?bŻ$ŗćĻķLüŸŖéŃ_:†H4ė8"…¤_ˆ†‘‘U÷Rpoüœ˜_iZ¤ĘźāÖ5“_U~*µ, OĻö²­łJŹŁ.īģnŚī{8šķtłR4"Y=)ęåx‰Y>/ų,ZŁZܪ̆……@”-Ēaćšb7–Č#«‘ŌGUčĶÅ+¾ŽųT#Y\GĘ+½QLÄ*D [„>ÓČ«…Šś^ŒBąpŒ‚)³•`.€70¦æš\~»fy}CĘ%gw-RH{†o²ڤ ‹Pækž<ņ؞) ÖH×į4Vw¦Ęœ^N ö¾Ę/Ī?M[‹OH^µųx™$$ é°’?‡Ļ$ņŹīXķ äkF$K&äÕ}:"żœnĘ4(¬ą2=ā~Źv­Q>‚lĒqŲŅe^iMÕIˆR†ŸīøŁÉ|6 G-Ä+^#dŲnŒ†€ƒÓūÜf¦%šŹ3ÅÖŽ!¹’%¤ž“£‘@„OOt«ń?śĻŹ:¶{ežNsbź¦RA*~„?Ųv“ūÆR_‡āŽI4ķCGW„I§‰ŁÖ7‘.Śt¬j›‘_Z?Ż·ćgżŌ|žÉÄŚ¤z•ŖĻ§hšµš2eį/9‹†O‹tU*ĻĪ'åö~ŅüsÜĮq%ĀßĻ-Ńŗ'׉bhƒøn'ԐĖæ»ū ź£/ģ,oƒźö)[yd±†GŽ"tYwEoBēJų-Ēū6ÅÕķ§­ÖžöW²F„Ų<Žņr«4ęįÅöTš’aµŌõ{ėX[Ņ1Īčђņ#§Ą¤Č#±å#Wģ/ü ŃļøŽ.Ŗ {[ųšD¶'¦Īøpä0^1ÕcOåēŹ>mö± ˆŹĶz’-bydQB c-Īb)ޜ—\\Oå}h™)'«ĻĒąõ¢…儚I¤ų²'{n$°†SYF²<ŹhC=P¦æ« ńū<ųą» .žŽe "TŹh}U@QO*/>|—āćö—łM#°,5&.AY”FsīX³ĄÄŠ?Ł`Ėaßܤ”¤¢)ޟń`<«žĘ'’‚ĀÆ7ZĻwcičD&¼Yė? “c™<?ŗ—Ÿ,‹ßZGciZJ“\8źxźŹ**+(’ų‹öžWa~³opJŖŹą=E&5Œ¶ßåͤz’$É(©2CZ)’”‡üŒÅŽdäŒ'(ŌĻĒ¢ĶÅd Óģ©‹ž±²¢Ē:¤¤“9 †AĒÓß '«’#?—yIJ„ (ݟˆEšc§łx ä‚f(­n)ҟeBIQüÕi# žN8$¢9­Ą°Š×‹Ž4#²Ó“­ŒONKؘūŌp‚‚†¼g_„ü1[ŲT#·§ÉCĮ#ķRчį/*‘ćūXŽš²ÅÆ© $óŠå” š‚Y½Įxd\NXŚęTįB !Gļ£GŠėƝLqHIām¦ˆ•­j €ßń,ˆx2uHd ļŠ¶Ōźjƒ®šqŖÜńŅžV#cš[ĘĖ_o‡³·iƝĮ؂9,¤TØX‰QāJŠgGŃ®c” $H+Ń©0žZxœ×&¶*¾ˆćøbĪ“žVbĆš8+Žż:eń®U3’Óõ #(ōƟ|/×C6z£\)ÜŠ@ŲRøų*¼ģĶPŹ–€P,’ā+œ?SŗO]‡™tĖ( žÆ%õn&A"EF(¬&›—Ęæf?‡ü¾{¬Üś×F–8~Ӓ(@n»?y#<æó×  ü[w ąų­„¼“ÜC S”®Ø+ŠTõ?äØųŽM/u({{;t+onņĒü–Ń‘R 92’4ū,ŲŹ[™nähƒ?T„õEgV„vģŅ/(” ńś~óāYD¶¶­kČ +0rˆ8¼Į=5d„h}Vōįćžūd…)ĆD‰’IĀņ°²¬Ā5£LĄ€žīūTų–å_ķ®LōĖ›ŸO÷²4~­ S¹£ jōų”3*/śŸåbzĶ ›KžH%ąŠ·©†„}d`8Ö¢ž£7cā’…ĄŽAÕÄz.œš€ī5;hg*Ź•żā±}Ø>וÓģņoƒ¾ŃtSq ֛™Ó øbś«Ē '&””¦ČĶÉYæŻ™Ļ”*±ZĻtįć•”š62)W?²Ū1 ,ßyó ÉN:uµL·3ItŃ­h±æī£ZŠSģśßŲż×łX 8„įaŠĒ_Tńžķ””<8ż„!w M—‚ņ’U_ü¬Ó¹a+µ\¤Žx…Æ)y(•ńÆÅń}®-öq_PEp8 fb*’ \£Zö݇‡įųńёčz—]–FģņŽsŸ²¢•’WäYÕø*ŅV K8r9R°•ń'łX4Hé,p–ąŲ’Ń„géOŁ1×ü¬4¹ūEi=$ŒöØ¢Ł}÷ Ģav­w$v‰éŸe,Øjh Ąō öä+ŠŁzź«zØĀ/‰…ēD Z§ćUA ’Œ©ŠiÖŽ{©YO ¢häņäė%T±®Ń½Ķ8É$¾[Wˆ\É$öI%¤‰ öcG<°M±ļ”h•vuXÅh?Ņ*oķ3qĢ“ ćZ}bH˽XHeö§Õc®¦Z]Ī %ˆ£Z%ƐoŽ"ņžhųžĪ»·s$‘7®S³¬qšÉ„>®Ņ·8ėhbe»x.R~+,Ü%J„‘‡Ł !eoŚ’W īl®-õ1Nd+“ב5»·pC?Ķū9“Ö»‡Ė–·6æ»o\ QÕŠR¤„ų½&cČ»0f·c§;Ā'VŽ2ŠAfbąt hSŠ ī߅pĀ9Eø‚(D÷ @fø¶T’HL`##ńpŹÆńŖ«š²ø į/l’ "†¦cJH“Ł~)9ļšü<’k -Łżšńįøø…ÕŚH­½2«²°įš²×'Ė·”Sf?«s)2Č0N(ŖŖ„„x«ńÅ'céÉź2īė·Ań¢"µ;s~ųy§ÅėiZ‰”ŸŽX ČZŅ‘(w$t§ĆĘøIĀk{C‡š$n†Ą!„”µv-ŗ/ū<Öšµ­Ķ±õ¹ĒaĆu å”ņ§Įź*śź’“‡V ‹ų¬Ń“C~®Ģ’„V’‚Ć„źn²§īę„üF›ž÷·ś±3Į`_7ĮéłjöC%ÄϹŒüj‚źž^ožĖ!·HB‚jĖ‘W°ų&šßį?;Rį-šņļ;$”čx•FSöšEćŽ³u[² dõӈ”Ÿæci­įeżŸ@RD;‚“"1é×čĄöÖ²F-|dˆ bIĻ(Q_āéńHČŹמlQ}D·fŲ·4hXPŹ.K^ūH¤‡÷p¢ĘX«”HĘå÷x ż“Ēž|qó¤gM·sO^ž›¬Šag4ééps‰ß•…ć•cžźUrĄt‰%?Ōū+*ĄāŸWźT,ŖŃ·2JJžĖūåbzb»‚³-D7S«æņ”“ŌJÆÉł a•ķœ2G-Č $āejx£‰Ų5?Ła.”hļaAHäŽŖ{ŽC’Ÿæš8H‰ä3ˆ‹ŸIéüĶÄž¢pēHX¾³"SŪ€jz4–Ņ1š ±Åt` »…¹sic ÓāoE~ŗ’u׳³„y6$K©£J:¤ tūToų‹ØÉ}„J–‘*®Ź”wź8Š|ū`®'jvĶM²ø’N’Ōõ®c8…Ą¾žŌ“į54= Ūc^™ó”$ZDļ)ąĀõ‰‘Øā (=˜·\ä>vŌ$—T¾µ…€·yi<Ø+OM½5Ó¤N¼ųņäœsžŽĮ1£(Fø•k *ˆÅŖü*y'ģńōŪ$RI"Ø^RJW‚ō$¹ŲS޹ Ņ”‚ŽźÕC2 VINęIž7TųMD£8’iņ®PÉ«ź&5u‚ŽĢäīÉ ­ž×) ōĘé—-*LŅČ¢5tXa„†ŽN4§'ō"[ubß I“õ9FDžµÄ0Ž$ØVgųE+ŗ¤³Ź łćżļģį¶•Ī)`»‘’kˆ%“Ր- —Ų€ ’vŅæ5ݾ£OŁVÉeŒŽ®Ÿmp”Š;Ę;/.@téEZav³q:iÖq0iš }4R>Ś£Ģš¶į}1ü±”øĶ5ĶĀŹ3õ3Åw2+qc4!R5Y(OĮW’'įVžlźz6£©ĀŅ[ÜØŌ“Łś7 ÉdŽU«Ń֜%äŖū«/Łū?k9/˜"¾ÓķcŠäO5õ«zrõuƉĢŃ|Iš42"ÉžWŁĄ~W¹{»•śĄć}nD,¬%€"T ¹ EOł~&ĄŹ˜rU•ŹŗÕˆÜŹ„n"‰ õDZšØ&T…Z‹SŃ0¾[…ŽąĖū1±XÖ» Ń ÷4=?gįÅb2OŚ*f÷AįģŲR. N Z'®F$QžÉ8Ę&ż¾Xu§* ¹a «Na¼§&x£ō¤ńųH1Ō`›YCzhē÷1¢,Ž|dŽ”ūĘ]«‹éØŽĀŻ@=hC!ū¾ ˆ®ŽŽĄI$e‰ ˜dVÜu ćįĆ4ŪFBU™"$³ ś _׋誆ś ‹”ėšŹ…‰’d$c“æ*²C«iä‚Üģx+PŗB#Pż “ė0DP$”xō‘†.3S/?’Õõć+qßlitĘ5*>}>Ś;W OŃØāR琼j橬ƒŸ/±ößž+\LÅpüžpcå@óŠO)˜“Ā(T}Ÿ‹Ō‘W÷,[O°Š{“ÉžįT .oM]ø EAvū;sżæÜF±Ć†0iĘÖÓjį}VÉ+H‘G""BJ;r⾫ńoåįĆā•YG¤X‘āZŚYKw R+‹fY‚‹pćŹF’-¹foGfnA”T„*¬Y^›3Mb‘b'įiIX¾\ećžtq–™£ W։?Ų)ä]0ÓC™ŪY±Œl„f‰»ö+÷Ā’HČŅBP4Œį5”gbHß숣*?Łåz©еh€/" „ŁĶų’WŒˆgŽ@IH‡~ņWæ€8q$M,¶+ =^m õź±7& ­x³ņ’c‹ėBŚMźš!k2ņp*üĆ8āéW‹ˆČ-”Č4W$«·ļ—ažĒnYVČ¢Ü#UÖOZAąńn†»²;ceø0J×h ;*É Ó‘ų†„{$²qˆH$" “ÅŒ@X#vˆ° ņi$U ƒ–-Ō‰4’̬’!":oXĄf¼c'’[ū”ųĖzW*&>­QĄä±®'-µ±WRń‰“©/­ÉükéÆŁäć巒ŽńB/Ä„?*Ž+/5o”ń’šA*ī"Œ‰ ż™]NŻĄSGĢKØ’‰„%‘ŌņR€,r%„?ąŸły`ķ;ØdI'•JĢ Å˜"€üIj3|MN˜wÅʵU@¢kж޺9*¤žĆį’' õ»Yż%QåxYŚ† üpO¶‘mŚīTes$K50rå#6źYŸģæö'p*K¬Ę’lŒĖūBEG·Ś G'­nįé*iĪkō|?š94ņź°¹ŅŁ$ā±ĘČĘ•Ø–TJužwß:%ƒ–¹uõeü\Ÿć‚×5?ŪĶF÷Ļ’ÖõPʞž8Ā*Ąg<ómŻĆX\ĢŖ“Ü]FšéČO›–Œ²Ø$V« ?ž^)œƒ_ŽŽ`¶–’G$SHķ ©Æ4żŚ($īśŚ·śŸGn¬Ż•}1G4Ž׋©7žT«7‚”ēö1 `)f°ĒS3<‘%Y’7m’jSNŸī懖id[ŁÜDæ[óMeTRIފhGŚl·ŌŹ\[Ü*Š%āU…G$¾Š*ჺ<—— T$‹ź€IQų¢ÓłÕ)’=0Ķ­ąćm`OśÆt䑹ĀX­Mņõcgeżæ«¦+§:•ēƤ°*Ė4ƒ„·<);Š[ŪĆ(ż®NŲfšådŗb7š;{SüĀÕ*ńÆśŃaö•©!›Óšxč¢Fj ĘA‘y/łåd¢ ¹d¶ˆ‰C8`ZÆģØęźŌū³M•%ä¼½XČ^-Ģ–‡—ĵÆ@ÅŖæi?sš7§ūĄ÷ר°Ė3|&@hй¢Óį.(ÕųųŖqdt_]£ŚœO;q`ād5q33£ü\=TōOG—/†Eo—©ńąO­<ėŃ2ĢŒ\däI§ŁOĀ3ębKŪ”·­ķ‘:q Aœ>ר’ˆńĀ"v§~ē‰KÆ|1•϶ĆzēŠąˆTŠ6Õ7aü”§gųV1üĢĻ‚a·–w  ””pR‚Ŗ lGuY­žRÉĖįĮqśwHEO y¢ü=ORĘß““¹5]I$ÓnīaŖē–2‚P„IėńĖ 7ū, “»Acč8Žb ƒÉIA™˜üŁ‹ÉcĶY¾Ä_oū¾rµ“ZQ«Į¦2 Æ„IłńåžĻ ĪY¢ōśKNµń僬JÅh„Ńž²Šcn7 4e¶­J¼qožV]ͬq]ÜŅ”Wž®Ć`†c¤~Ķ=Œd YXń'»½?įpęē"«-x Œį5 ĶŪ²¶.m8ŻĆn„d>`°_§ƒĀaåĪ›Ÿ=“nĻ4$ŪŖķ^h«¶ōųVŠ[żšā÷ žta%eVŻH’ĶC9ŻŪŽ£lO” 2nQ®į&“*Ä2¦žį¹dŸH(‹ru¶ž9ć=ż¹õ֝;#g@Ó@6Į~:ķ½jŖjǹĮ å÷¦;|’×õ4ƒ±ü21ŽCBzVžōĪoē7ƒN ŃĘęÜpZ„6Ā2Š*ŹInG³žĖāćZÄŒ Ķ1ŠßNO«Z”nl¼Ž0j»Ō’'’)?ÕĄŹŃź6ń֖šš³t °öSö¶Šßįż®M’aĖ(HO"…]ŁPrCń<–æ²Ęæģ¹`‹[ø–lź¼9;‡Ųr<5’+038OV>4åJ؊ō’?ŚĮ°ŻFöé܊mŠī‚) w¢ĒÅGłM‡zuĆ­VįÄŖe‰/wQ(ćAOµõ‰‰ż¬ZĮ„¹?{éĶ2Ķ{P #LģėA’.ööåųӏĆƗÄŲ¬ßSHĮR°ÅonńĒߏØŅ1 "¤¤*ĖĖķ3·Ā‹{‹^)äB­#™+öc‚KxĘõ§ū§/ņšē˚ĖH.Ė’£Öt•jHY–OŲØY{ŪżŸK% ¬Eq ¦&ē"ń7Q*‡õ ˆ H‚»»/ģSāįÅÕ¾4Āū‰Œ’ÉhĻĮŠ+$o^JŃH€ĘĻ"µ*ŽČÜ>ĢS’ K»© †IL•’Då …]xõ%I¤ōĮU_Ž›Ņū ŌļŽ_Ż4|$Vo¬7',X¶ėń³±bĶń·ņšEĀā@§æ\­ė\fœ‡#ÓĄō*¤>܏Ć_ņ°Qū-Š»³# ć•d ­x×ҊŸīĪx1ŽCčšü ĆÕ R(ܖ>b=’c–\3IyR*+@œ;Wįdlm¼óKū6N!u(„€|_gcßė6 -d³(ĢńČÓÅ Ź*üaUŠŽ'~%ųžÓLŸ³‹‰.%yF\݉ĶSŌhć'ŌāÕ źĶéqv_†~ĒĆ&2 z²Ė, $*‚ęeSÅUQ‡AźČœ¢Mææ—ŸłXyo,­"¤ńćDh݆DfvS=޽“ü“ć‰ŪO1eø¶c²Ņ3$r+ū K^_³//åĆ ŌNU"ŖARMlyR¼mń|_§'ģb(ļ<,²«)…ŅŽ8‡Ŗ(`Jhe…øKųYԊOq KĖpX²ÜFģ*TžéŲÓjó~Ļņ`˜,Œš™›ŌśÜ|mfDawI(¤š7(ł °ĮkåĶRK{‰fŠÖ%&k‰$wOЁœŖ-X¤gāį„É¢A ›†‘V2IIC²¹(ÜäÆ\æužN †%hTCĪwą+Q¦•8‰ŗü?Ćö0×O°õAfSN ,¶‰^FcŹ>Ļä’…É•o¦ŲÉÖ/Æ÷l q‚.(^]Yän5?k$× w>ŸqėLœåV- E€}=·Ŗ¤?ėœŽÄ “]#ę±VŪķGŹ ˆ^źZv› ƒ!’åCÅ „õ(‘T±$ÆfTŠæŪū űTXšžŽ{rZ9b‚{weįQ:,±F¢’«Šy‚ī×ō¹+&™ĶĢŗ£CH ²,|åŻćU "dųæČĀ­}ę±¼“ŗ†hēyÖH4óm2ŗKė2G"ž¾ ›üœuĮś¤‡‰2ņg>¢Ž Rść)ź ’oI+}Rę" Š;gH¬UÓ›Č:–ąœŖ¹‹„(«ØęЧ¼„Ēśä}ųĮuwé°2»Üzj kiHš¼ÖĄļÄMĘ:ŠHžŖ7‘ā_āÆķqšd€#\śDzlH‹øģUŤ±]¬šĻéĒsAz¼’±ü)±BÄo*ĖJKm9„5kĘT…äcJŽ|žĻŁ_‰ĒAū?9bŒDb©«…Aā™I!~^Ÿ/öXi½#i2ž‹zl¼H„SÕ Æf8[e•®#oŽ)RœOÅĶH”ŪŲ6Xå'gŒ’ÓnHć§ķĖż–æ{Qõd»™¢Š 8Ø ūÉd,Aā±S‘żžOžN2(•L؁„0Hd‘™hā9ĄćZŃ :~Ēū4×O½–6āü.^6CN. Ŗ{*ä7PׯüµåūšRTŗ–BĀ †¶„§ĒŌZ’’Ų’-ŁŚÉ¤E<źMÜļ+,²SŅy’wY²'½FķĖ*ęāŽĒQX9J%õŽ[ś`FØ.Œ ü_ļĻęåž¶J“eēpb—qtńM+‘Bģæä#’ĻLéŌåčµĶm-»©„ GÉŗ™³¢Ų;h‹³ “ž,87ŻŪ.§łæV’ŠõƟĒj=ńėéµ8×ü®{ōĪoł‹„·8®]9Äņ,2€Ė-ÜIĶ»/Ąģż¼ćzģ7+kYŃĢ—‚ģͤģÜŅ»lČäŠ~Ūa ūĆ5Ų0ŸÜ7jח)”H=iĖŖ/ü#ØĘÜ™J4lŃŗø €ß½JÖ§£2’°Ą†I³WāūD“S^•ß®ųė—õ$/Z–ų¶®Õ܍źM|øčQƒS‹Ž ⢵ē\0[ĘŠŽźN—.c~l8:Č®=N mČ7ž«¶ŽńįJ»”Me«s· FąQ9'Å’æĆöń!{X­DŹŅ“P;ĖPC2ŸˆoūQ??ņd|4ņO—ZśėJ,EīVāƐī°õ[öQž†6ä¹'ŃtØnģę1śqĖ#ܤæU$Ę>ÄRIĄ€Æ½ŗÉ°ć 'ƒ÷˜G©°Ńn£·XŹ-É?KzńAĒ6 87§ńĖqn żŪ śĒ8˜˜m¢~<ä:‚G \ õŸc“­üŲO{®« ĪKŁö1©jżšÕ\®ĖžOŲąFwļRNēūqŽ‘ c^$µß~Q Å jX’°Śæ~)ɃŪˆ"O}æąpjĘĖ$qņ£Ć PĮ@ jFäķš”’dÆķ`ļJIm–4OݘåujģĢšz1­tW‰’ē¦<¤q£¹d§eœ•ķ·ļŁp§Õī®mÕ 2Ä>Įꑉ%Ÿ“ø’eƒmь‘\$`:“A}:†~PĒ3|5ųø‰y}ÆŽK'Ū\ZĪŲŪ8ø2„Õ Hń€ˆƒo÷ż+Ėķ|K‹]G$r%­³ܲ¬ EēpX™„RŌoæÕJĀéßLX!PŒźM»QŠƒrĶæ#CŲ¼’‘ń}ر6½Œ@ęq¼ŃĢU¦ĘMŗPW‹Ÿöø:’¾šg鵿6²­æ ’ŸņŁÄL¦½’ɦ+ck¢„ @®Ń¦Ž‘ēŃŗŅæ»pß_i•ńyÄ©°åC%Ūį¦Ćć~Īi—3ĮŻÅƒ¢]Ē'“BZ,‘«D?¶²=9ņ›Žn®@šīęGX q1"Fܤ@,hĻ ų>X*ÓĖ÷÷ń³[Fī‚ÉypDq£P£qåD 6ßkāżŒ5µŠōčådOWR”ó~*¬• Äs’vH…E?Ż1cī"ŌžÜŪ“ŃŪ¢˜ĮQE )ā=%§Ć]äņ±±ˆ-€• mxEė`©ż2~Ó­¼ ’Ē$:eåċB’¤”aˆ|+InN+³Ø’6u-Ļąū8X¹Ó“k(½P}y™Å­±ųKÓˆŲ‚Ź#DŠœŪģg9'Öõw–yZ¹‘ZY¼b¶J#H€ÖŖ¼[ź‹Ēœ“:Æļ&ž¹VņC©ŽŅ(­¼qųü ĒƒÆ’v“S[Yc¶†į<£’%HÜŌ ²–4eQĖāų~,ƒXĄ÷—Ęņ9šKĖ‹‚V”!«“Hćń7÷)żßĮÉŅū2kmZŅ’ÓVÓ'kj³G«ŁLؕy°’ø­˜üE¹’­‹Ķu¢%œ¤jöói÷Éo I= “3FĄŠeåæģ3+'Ćö›ŠōLĖu!}`”]©Ē÷t§j­FGęWŽžżŽü'õ#Æ/R$ēÓŁ˜āK\H Äš £ŖAZ°é×~UĆI=D¤«ƒÄˆj¢ƒ·4š­¶ ŒŠ¢‘šš}‚īz~Ń8ūFę÷ SŠ/ĒØ'ÓÜļž®$Ń#X- T1oūHX7œļn© ¤Ä<2Čģ ,•$|€é”ŹxJŠøåÄÓa°ŗ#’ŁäVwģ PėۈĄSXś·‘»A«I3Žn#˜øšŽėū?Ɔ5&åßķ½Q¤ļ@*:{ą-NĘóPŅu L0¤°Ädøš9&e#’Ŗ*#‹—ļOļ?es•]ŁŁ[ĢcmE$Ž“Ž7=|?a¾‡Ćß,ź÷^¬}­f†hžŽAØö±+U=dōĖ$eż&“ķĘł3½ŠŒĪ±EpŸø†tõUT࣯^ žĪhšu݌iox`×ūåŗķćE,’I°ŅāŁ Ę³ČŠb•ĒĜ¹po“ļśøG…«ŻŲÉqś9š ŽĢNˆSÓ1s¬TP›<³ü¼°’źEē%“ØöŅp¤ŠČ •‘ dų(ŸOˆa}7ĒT‘ÖæŁŽF””R(Ć„Gū{橉._ćäx’zµGÖßl앲š1m P9hŒ<Čo~<’Źoņ±K)¤k ąžVņĄģw ˜{N£vų’Õ|8ÓµI¬ōŻSMŒ:XŻ^”¼¹‚”ž¦¦“%äŖŃ€ĮæÉeÉG–īu½?Sś–›4w:UĮR·Š±²Ā¼ÜĒ?Iø«Į~ļ÷œ£LoęĶĀ]]ĮV¬$čü”—žźi`Sā^E“‚ü_äšlŠEkoŒ7š³ÉK›PįęŠV$2Hā-ūׯw^?»Čō§ĄSP@;ż1K(D·Ęy•ń 9¼ 2»²ō9(X%äbjØų( t”P­ZŸ³ńal詅fŲńeP @+@zļŌ·-—ćĒZĘ«-HRIX·Ž„°,Ūo²’ĀņÔ餢B /&/æ!DPXPĘ9Nd%!™9š,įėĢriV:RœzŪā‘02É>DĒ"ŗØ«'ŠP×ā‹–#ؚ`ü^[ŠjėĀCņć%„Ż\ ćTj˜ā’•~ dW«o…°SĆ)·„ ) &Ż#aŌr O·(’Łføi%„Øy$heōj(=Y#WĀ“b‹ÜĀVōŗ9H£rŹŪņUl¢u›Ŗ\·ķ2.'gɅ­ĖÆ#Š{¾e™xŽõ(TŸęÄ-¬'‘eˆ0ēÄ»HĄŅK¹Ō~æīØŪšÓģ³įå’Ąc6öÜø«¤HļŁ-‘”„>Õ%~×?ņ~ TZš±šŻ(Ź„¾-冬M;–.Ē ō·ś’$7IOY[ė¹> u?•šį€ż ax..&·‘Źó‡ÖoUȱ"D+R«æĀø"]~vd2Āņ‚#޼f¶ŒzŖȰØõOŚåŃ~‡–!uę{™Qb’rˆ*ϲ$/ģ€WyŖūĘ們ukć/£3³ČX7E*ÜV üjžĘ_.NÅźē÷!R4,@ ČüKÕ¹’»9}Ž?UÖ¬<³£ŪĖm &yž++6FĄśŒe’Ÿī“fž_•æ–FNuu=ę§r×Z„ĖĖy%+3ķZ”šū”µ~‰WķpOŽI9ņߑÉŅ⻹š>āUĮ:²Ņ Į“ŠØćūÖgõ%Æ.O’<ńš•Ö™¦GŻ^ĮÖTh-[ėRHģĖA‚¢4ųøś“4qņdžljšö£«Ģö±§åbgµUćZśƒ×ÕäbJ3Š*ü-’— mĄ@«,ΊZ{RWØ+;ŌP[)¢ų»Ō“ß Ē*ʗ· ƊĢĀ•ėš*–ąæĆ—ojŃ#W…¢Tģ QLŪśH <®¼‹×q̐Pū|\±ŽśTū[ŗtžĘĶh‚" sHźdjĄ b"±e­SȞ†„×,Ö¾ŸN4;n7µü1 %Š1s’q£„jų˜«B¼OĘ“ų™—!ŗ¼S-ĶŖ78¬.c0å,œĄ+³Dš²ÆßoķrĀß/É„¦«0Ģ’Va?ƒ”ł‚īŠĖ:ß\ŖĖP‰‘Ä/T±äyÄ©$oÉ.Ońz‘³šČtĘżåYÓ×Wb€,-øe^*y&ČĄ€8zkĒģ|ōŖoöŖŅH“ėXd<Ē÷Ž’rū»o³‘kŪ -ļBā5÷qÜĘb›‰ÜsCß刯Ą °„kpE+P1•'¹žĢĀ„SIÖ²Ö@ĶYIܰ?j¦£ÆĻ/žhA*Ā»5>³“žĒĆ}p·qĶhÅdV2ĻVä ēÄWˆWoµöžū2[=nęŹ&¹·±³±2«JæXb µ,ėćåAĒįż®īĪ9Š<—ä-WS€jŚź½¼÷`’įGÖYA †=„ ˆÜcęæŗ“›ś27 P7ę·åLŅBuß.‰ekxU/4²Ķ+zQūĖzņ5_÷dķ|RGńņWåQySĢ’Ū}j=:a(xŚ@±™AŒ9V—•GL7?Ųå†^QŠoJ-Å͹Ž8½Ue”e)Z22žM‡÷6-}f–åĄh„~™ļXā#sžSr’‚Čtģ*0Z¤3rAŃ\[™H­ü„}«’5`y-’ É"RޤlĖž?o‹ ­ūOé•’!æ› \¹iR2$ Y‘Ö›«ń¶ ūLk—o/¦¶u4 ¬ĪvÜńšaŠŒwˉaŽGd H*«B(~#8sg£kr[Dm­„lµYoˆRÅ@°''ęׄދ|X14 ·HgŌ. «-ĖĘV Sķ|qփ.lś-½ņ,öXF·Y$¹†į¢%£U?,«høżŖ'Į„Ó ”–‘¼œ¤SN–<Ø‘ŃøżŚ·Oęųp$ČÄTR54 #*P1ųT°ęĖĒāo‡5µ¤Ü,žšČęE ģĖæĪēćo³ĖŠ}ŸŁĆ+P¤NT*«x8j“(ÕM>/‹¤’Ė27#Ī2¬­ČōŒh:nē!~nÕgŌ5ĪŸRŚČ5½²¹ TĒX™÷¢4ŠŹžŸ.šõä“įēĄ•=†Db¢HÉõ›™^L <ÉęĖżäŸnInŗŽ¾·"IC Čœi˜Wƒ«PštŖ’ŗ—’ż˜żNĘa6ö—·w‰ (ņDrfäĒpUb‚œ÷Ąež<™T~ķżFZ š5ū_6Ę]åõµ2#…BHńņ$žąŻ‹āŠ–Q ‰m„H,ϲV¬xōfu®äż‹¾½½ŽH¤¶™ķ՛÷É Špü€ӌ©$~˰ǽżŚ²¤LiP1·(g•“—*$pˆäjßep[žœ‡Óš[4k·Y Ś Žjl­Ź)&ę•ćßö°¶óThŪI”ÜÉ&o%Ģķn"śĖü8G„śkr.aWYüóq'U…‚Mپ°#¹°G••Ćäń:PRœ wI——8½n¾uwÆźWž†ūNŠ!qÕ»-±x‡U‹ŗ]Ēū·~ Å+'ʱńĄė«źTky ‚Öq Ė%ė»ČÅ]™%–Ų;@Ēć‘Ö_OįeżÖ¶ÕÜS[Ģ`±Õ­É‚Kr«f÷.…ģēb-$(š[ĖńIĻā“łÄéjééswi4LĖżį’6”*Ń|P¾ßŻ?ķrāļ‚eø¹¶†šĄ n¢[k„Uäį]$6žOõæ—!g³K d¶ć’\¤B ’EYŠŸPH­ū¦_O£~Ė7ĮˆÄ²“¦¾ŸéZ½čs܁障ĖzE„¬Ÿmד4r//±ĆāÉmĪ» ’I.Že @mgõEP“V½‡Wy¢[GK{[ŠśImst#š¼HžģĒĖżŪßāĆŲeŌŚćŌ–Ś8mܱy! ÜXŃ}4›“ŖņÉN–¼tžYOnœ‘_omšČ{åŌtĖßĆšĻ’Óõ)Ó64ė]¼;c‚«14 'Ą ņę$ŽI®äw—ÕÓcŽ· ¤¤q„‰„+·Ū’6üoŅżēŲĪquIļŠŪ’9õn„(gøÜ( koѦšÖI"‹œŸī̌ßčŗŠć§A$1g¬’,ó•J³¼¬…mx|Gx”ž%ćé¤īÜøĒn“aŠiå ]Ū2"ų„$ųQCFwųCGIžźFūxO^ a%Žź(ƒg’NČ2•Vˆ7ZQ1ЬK'ÖP4į+ 3¬Q| °ėOŚĄ“[[I·1–‡÷¤, S½¬ĒāZӇÄĶüŲ?IņĖ_ś’żjm£eŒ\Lé™§<ŲPžŹüLß³ńa½×“- Ž9ė:TĒĒ÷q±’“Ÿ‰’dŽČæĻ„W mkŹ@Ęv%‘•‘āx… ©äÆĶ…ĒüK‡O7ikØOmŖ«$Ņ×ėb44uƒ“zæńO(’Ź‘3¤yoĢ’•Ś,‹=øæŌµPjZ‚bP¼k7Įåńsų„’‹øü9&œ¾[Z7‰‹J˜y:ńS5wöĮ–’›ŗ„¢]%(Kr€ī}–Br1®ėR‰ŸĖr}XLęąéš’ØƒÖÜ:,lŹV$J¢)8¬œæaøc“ķ0^$wג5¾¼!T˜—2Ū0ŒņHł’v›żÕ’g÷æÅ=£LØB‰cćĶQ¶5N@ÆNJz}Ÿęū*³znޟŚāń³|1Ū­ Ų9śå’ÅČC¦Č¤‘é1fW«}®%“ķ`HU£‰™(°øs·9+$¼B+6Õå×öpm¹šIaäß’‰Hz…ŒT\ü;‘J/ŚĆø‹}^K‰+§\? Ųnh ońsQꌀ\Ķ śÜõWÜ1·ˆ!O#ĮjĶ_ēbæ2žĻõƒz°ƒ+O#™¢R&,ƀźĢ9P(äߎQQæ»ūRpŖŽ2Q„\5Óõ7†fXĀŽ<kķ$¶¦P^›{Y­ģbCŖRK–&NiæĀ3Ä ų˜ŪÄĪßļĘ^ra„…Ķ¢X¤hęVfw©&kž »QŪ÷’zlß ’/Ų}–‘quyź^ņĘÄŹ(T/ķŒŽ‡āżóW÷+zŽ«FrˆĮYʊ‚Z”čņT §ł*‹÷.ä|A. ®äl )¹ļűÓ@ZFPA$ݘš“ĄßåŠe4ńrP0Š€"ē˜£R‹S·Āq  …Œ†ĻļH=.L¦Ŗ>>-4BW김¬ƒ„¬B„ŸŒŖķžWŚĄR’ōfEµ“•ŚFžęy ¤rŌœŃČefEk$>Œq’vÜ=DVź~lü½Öo ·¹“Ōl®cˆ½Õž™ih“GqUÕ„āeySŃųxIž¾G¼Ā|˦Z.ą-·%’éf—еYъpx=%·y® ‚ÕżiZ>o/ŽdšŪF֞M:ķ.ÅŌś‰’$øv–Ż Bž¢–’XV)HÆ{yW×ū_¼d’L)¼ņŖ$“Ļ©ßĶkęk‰GŃ`™ ½ÄK@>;yĶϧOµ3qoå‡ö1ņj×zdj>±„G’Žę{¤‘daN2?­›ˆoRi?kŽ(<ßsØXŻG«ł‡JÓŽE‰ †ZuPŖUÜ? ī^>§§…zuę‹m®E=®±©łZ Īį Įōš”ęDę?Uy2sžĒ„ńrĆx/¼¹gmy šķżdžY®„²Ą«,eӌ27«|3ÄŅK„žķĀ03ŪŪ«ÜéÉcbĢazėźŠ| ‘2'Ą*Ąßń“iU’Ę9f}8Y[Ö ³›gØ%ؾ“eŪv߂¼œæ¹ōŪāĆė?0yrŽžēOÓę²ŽÅŁžÖyævŠĒ…}kŃOŽü<}Fåš»~ÖG®čŅĆčO«YŻC#PĆ<֍ &‚†?¬^æå ¦éśzĢ’Ų"ĮǐSfÜcļšĘ$žßžHżœšh‰ØQZ_A”"ž°2śÄ*ń^JŹ©Ėł˜7ū8ļļ–_ݟ’Ōõ!Ę×*‡tVFFVXxƒ¶Guč šŲ›«_­G1‘] ŽDi+é9}Na#Ņ#üŸ–s½JĢŁŪÜ5收ŃOwXŽTfExį9i9‹h‘[”iżß)^GĀ }v·½#Ó°[ŠIsn²z0An¬R'žTųÖ(¾BoŽqy>ßśKFŽ·3E>¤Ś‰l½pśä>ŸØÜqi4mr+Y®§ŗ]<ÅØSƒ¬ŹT̊“Wr’ŗ_öXī#xĮÄ‹cõ9Dበ˜•Ż·žcĒ—üC ­b{«ų“ūWC°ŒJź&PˆzÕAŖņ-šFæ½õ?āÅL>Ÿ§ÜNÖ÷W_]Ā„ÉF·˜•e!ˆ x/ųżXyżæSŌā˜7HÕ!ŠQk¦ÅõU1)iVG„Č¢²Gt×ÜCš…äx9·ģ~Ö ×,äÖ43 —%¦ĻÕgy"=eäåL±–hWžü8'óšĪu ©•y³'£æŲuc·ł(õ6ŽĶą敃†(_ƒ'ćŚC<\#+į½ē_\œ©0‰¤.Ž„Æ_õ¶Fū8tf‚fŠg?²Ž—0O­j1HīńHĮTßąh(?Ų‚”’cƒ­—LˆrŽģ[7ƒ²Ć’ ¼~š$_ėā÷vWÓP¬°Ü(Ō£0#rbŹGN-7śĖ…óŁÜĀCpœĄW„”œL‚½Œ“<_æ'Äß [®Eä[hīx²0ŚPLŠĖzŠP†jq’væÄĶ’ —,Öš@g•ż0B“gį©d•eڵ’~ŗ’Įb–ŅŪ‘=¼O,ŸjT±£Ž”ßūł>/åĆų“‹Ū’šŚ¢ČLIO^FJSģĘxöū(Ņ/ƋŚéŗ5ØORWøv^nKEŃxqh”BĄń<’Õ_ņĶ,­4„oZŚŽ/“rķ-OĶJŌwż¼ZMMc˜[ĢJó‹oĒ~œ©øĒö²£ŗ`åĖjī6#®Ū}Ÿõų&–ę9ķ©1õ •jČŌWP£FG!Ķ*ƏĜyĘüroä4Ķ}e.›©HŅj6¬ģy™ v>ŒŖY¹PõäßĢļżć†ó5¢¬k3-Ռ|ļ!COZŻ*\®ßßF¢±’æ8śMöłä^÷U°·ÕV½[u™y[¼n‘Jņ_QŒgā’Wķd†ĻY‰Ä_[n3Ŗ²ń•ż¢@䦿“Āß³€0<ɍ§ŚFŅØ’ņ_ޘ‹˜£Z²ĒB’īY~?ų|>Ŗś«+/?ź«/”¦G§[ĘÅÖ¼äĘX‹#’&–Df’‚Ŗ’ĶĖŌż¼>_;ŲėVQŚj¶R„ĪžÄ[ś2-Ė"Ÿļ#’8Ķé•ZÄTÜH’"ry"Å!ˆEŹ9ĘJÆX¤y( ŠMčß俬_O²’G‘b©hTÅĄ6ōŪ‘åÅpFµĶĶ›YBī-É (‰ųśœceōežxU۔пi¹üŗČ®”å»xį1”ø`žš/䢨ų'Äæb‰’°āž¦Żī&[r$hčĪTµ!ÆÅÄ· U_¢|_gö„”ĪĆHµzŖŹ(ÅdHŠQ‰_…dR¾˜ O³ĖŠ}Ÿ¬HŁsŚ[µ×į’ęāEœ tPįiž4ūDQӓV·–ė„B‹$®öŃó£BQŁžETEOYßŅ’urāĶP[›åFŠēP™Z4Œ¬DšŗĖĻ›²“J$w[÷Êé~`žöIōū4™.:›€{1/ßæūnв|˜ā•æćĮċ^ņõō1¶£ź^E8WI&µŠC#ÉnŹßW.eAW~\ž(Ł?øoWÖZ_;hV”HŅõ '­h—WózqĶø2$ ,Ė՛ƒF±“‘K[ó©#I}q=Ē!ŗ»;/Š“²Šż³üŲ…˜¾“¶v·f5ĒX”ƒöjŹļNM‹&‘ØÜL‰R]LʬŪ2qģĘBY~ü9·ņÉ ĘR9”QµQW›hGģ*’³žļ “½Ż+Ü]©½ŌU7WÉjY~…®g*ģ܍=xe“āžļŌĆx<£¢_Ū¬‹D•)Ö–dhĖqĻŃåMšHž/÷Śāzd\’p¶_Ōomł˜ē¹ō–;ud4bń£‰×Ɣ‘ÄæĖ;Ģ1ϧ e°ŗŠm4Ł„²#0w™ZzŠéqZr~Ó|?kŃüĮ®‰Å™¼śŌ2÷Gc-ÆwS!3ušUG“‹+ńÉF¦Gw×Ov÷(і6ä‚—©p}OH²ÆŖ²}æ‰~”łbą]iŻˆVt‚P‹R½rƒx×w­rś æ‡?’Õõ.’F6›üń§¹Ę’6÷Ā}RÄÜżUÖ;{Y¤–P ń? Õ¶Ŗ|R}–ų’ą² ŖŲ»ß<±É)GIa‡”‹QŖDŹģKšF£»LĆ÷q||ZYxKĶn/āęKÉöą&wąé(SWų-xżZ:~é%śÄõ›ŸR!7Öјµ‹Y-Œ‘2iöįAµŽž¬«•y‘n_gÕfųćˆE”Z½å“MpVŪOˆ‰Ņb#Š2 /Ąpy?ŌŽ_I滎I’{¶‹k,ņO=Ńh*’][ʍ…¤ŖDŽŒŅN¾©Ł"–O¬Mūq¢&:ė@±xīEø]LŠĶ;z3"E)<¢xÕĀˆĻŁU”pūŁē†[‹ ŅĖQR)HxŹ?$dŖ~±'4HčŽŖ;GÅż_J^Nu6§©k{$ø‚Y y+i~±#lk2?­UžøŽßåaŽ• āźBå’ęŅīDHŚ;«UU"¼‚ "’āoŻ·ŁY’/Å"ń^XIē;X£Ō-ĀY=•ÕćŅv(M›—Ł]hJzÄķ/„’L$R‚ʶεGhĀŌl9pœń'p².-©nƒ”–еøŖŅÖĪB Pœä–:WżL5®·Æ‘q*B3ĻqÆP?KŅiøJ­"·§ÉŃ9ņeÅį“Rš­YŪ©͛ėWLŌū\x–J~ŪŻ¢ü\øüX>Š]¬kŹīŁöFŌE5TČļĻż€|w§ęX åmzjˆYY>^(¶łę[OĶII’;ų%I(Ō²ŸLń§\/“—ĻQj2-Ť~£ģńĀ,ƒˆ=½ŸłLĒ– ƒLŽLɤȑ¾ÅÖŗTf5*Lr "œøū?īĻŁÅäÕa@‘¼éć ±GV#`Ŗį?‡ģ7g’}ÆÄŲ.°•,]d‡ķ0(挬Aų”×ķ|,‹ū|=\jSšĶ0‘~2ķąh$­[žIĢæ³ģŻī­ghÄĻrˆÅ9Q›ķØļGeXzœ¹G/±€5»ŪW–p5ŠŗHŹ‘B_ā„Wē§^_ ŽāāéI“Œ‘ÉIŅB$€-›#䟚i?ČāUŖ][ŖGėM$Ę+Ucń4jBZÉ#m_ˆ8¦’ä’6ł?Rż樢‘MĄąT:ńŒ±Z5x·®ĪœāŸå擉5…I… 9×n-@ćń®r­I4†æešīžŹ{G6±“J$Š «H×ÓŻ€’/å_‹ŽmS»Ņõr‘j)%Æķ=³,E—Ŗ³Ū\Q;QFčüyzc%Z޹äsN‹NÖ¦7HŒ$ŽāĀZīAŹ«ÄśfUž?°ßcŸČŚjŽÅ'–|ŃeuctĢ©gux¶×\ć÷30RF ą§ī›,Ś×–5+yֆM/VT’F»Sū›’‚”YÕꍛzÓzŠæ‘ś§”Ļws}­Lžé“ÕaI ’č?NhĆŃk$G„Źė/Ł_Sū¼wē;›MzXķ’-mį”$²–F $š)‹G-²žåVū2zīŸļ“K_2Y\±ōФ“ķźŹ£nH#ś{»?įžļ‹(–øŠķ)#™kĘdŖH‡„Y;V¼ZŸ wÅ’ŗBĆ”ŁKs„ś¬0M(+4L#µvئP 8Ž*äz²Éƒ­ō«h®$“čበK[y#IĒ¢Ÿ¶D‘}@zqŖĒł_oĘ¢"cŠ‘£Ģ"97Ł•S±® TX”„‚BņoLŻÉēßü²pŒźŪŪÜ”‘9G,–ᙂRCÉł1ųUU>&cöqNīąŚ“±IÆ)OÜŖq«™=j#ÅŽ|Ų"7Ą¼[— £“ f«3ĖE’ę4 ĖźŽJĻĻ„5Eż—å*Ēżä\øĒ„¶wV2ÜŽK„ŒŽ«kqĀž³@˜*äÜjzā$γA"$œЉV ˜•«-œC÷Ī~/Ųvžņ²En"æž–At‰ń@ERŻBy¬tū GĄŅ«¼żĒī×ŌR=cQ¶†Y¬ķigśŌڜlĘ)$ÉjYĮ- މĖūŸƒ÷MĆāĮ†Ö3„[Ą±²ĢʲZéš(‘ž®Ņ‘įD #u›ó^bœ•˜UTüoŹæ-BѹrżŽ6ŪXøä–7’+™£ōŁ£ffxˆ–ˆŖ#‚VWåĖÓųž,Ģvź‘Žy¤+ū‘ŗÉ ŁT*r„“}#ąČĻš:qå&[ßż\fYo #Ō2HY(˜éŪƟ·š¢ÅžĒ‚y’Å(ZH㔯3;żćö~UżŌTYeųŃāü“6½D2ŽĘŃp5’“P"“ÅZDi\ü^œj’Æ%o¶Ŗ×¾ĻĢQF^3kčŪŖ–’{Łę“‚ °GYxČyX#—ą’vG².i|Ģd¼ŖĖ"[š(D<”Æ6GŒQŚen?kŒæŗĮŠ[y~žŚ \)OUPn“Œ’żRF•¹/÷XU«Gs¤²Gyo&„„D€JÜ@iOŽ¢Õiöžiǚ3pę7Ó/ÕZĪWslCH‘M*(§‘ЫǕŌuųx¢ÆśµŌ0L·EĪdE~& ü_ ¬uUū<æcŌuuŗÓ’Ī'fŌPÜD¤r˜ä!Gü\ņ| ’%–ęicŽ7ZęįĆ@Ęź[¹ą U+#qžGų~ sØZ]·Ŗ°M(‰=O‰–ĆÕšūQB…æÉ¹oēl½[ĖZÕĆüK$i+TÖ¬dšn5'ģük’]dĖVón›oy,o8v™R‡2Ē—ANæÄ?āY ¼¹µŌī/oĀKé\ĢG飿ˆ^¼¶å鿩ǟū/³K ǰ”éҼ’Ū·z\ą;qīš«ÖE­?y õ’wČŗÉõGµoBčĒmQE'˜Ø5€ĖńCįū_ģ™G[ĶtŖćP“²ŌcšŖC¬Ō)#ąn*«¹?»'ŸüW†>T»ŌÆ-ę±µR4Ųęđ‚ĪDURx¢‘ĻÕHŚTžn—ÆŻ½„ė 2ßŖ‡¹āÉ%:'Ó\•xšO‡"‰*zEfęÄ8f GǹÆ:žŲ©(’kķ'Łū"ćK»#¾³F’”W(üē`ŹC/*6źČėń§ģüRŻ+Ģ–×qĆč"š0T‡t^€óP¢Hwćź2Ęéń/ĀæĢ,DįĒqČ­V4ŪŖ±ū<šz}ĘņAüƒ,jo€š†Mæ»cń:’x‹&Ÿ,RC2Ķo/9cø@B±ŗ•;Ęč[‹Ä~%’‰#,Ąŗ[A.„w}#^],r\C*DÉefF·…ŒŽ‡ŲįĶ­£~(¼xČøc©iŚLkg$W6Ļnž¤0ŽEv‹x Ż’ą'¦É*–ąŽĮŚDęœSjķ彘µ¶™.ōņ£—SŃjÖŁéĪ>5”óNmūžŚyÅ.Œs_śö!2Łr!~+%fy>ßÄļš~ÄKźįl:Ŧ—8³{ [Ė‚8Csz¢W“ŠHŠōœtåń|pśŲ1?Äw—ŃĪŽ÷zŒĄEóCźJ€$[Ā­&ä~ńsŽé:~«q5¤³Ź¦Ą „»Ll±GĘ6¤YeŃ“źJܾ,3±ž õBśō·Q«gj‰Sč@ļ^ ÅTČčæŗ…¼ų’wÉ%čŽoUåø`.żkĢ-)RĆāų©Ćģńk†oŠWSkAØĮ-āĒoSr-٤‘‘¢“ż (~N‘•‡ķržU_„­ļ¤°–·‘ķÆā‚hŚ+QI[Ր.A>šŗUä}DNr70v%Üwo'é(ķa‡Ö‹EóP* qh¾5! QpĖüŅLģŲqŌZd3Nœļnåc#O0Hćp žķ­ÕŁĒÅŹ?†VżŪĶźpĀK«‹Éę2°\#+ņhVȞ€šGćōœsõ„gōe_QŁā’A„ZÜĖbmļe·{ŸY¶‘E#‹ūםż0ńD~)¹zßäžóŅēϼĻqy¬I-§©ÉėųųsžĆżk¦žyå ŒG T“|RÄSįTāy&9®ÖÖY~§#aÅœx©§^nó’gö°O—łć·µeŠō‰eIhI/D×`~'Ūüņ±š^2ņ˜1ŠTŒÜ­]dźŌ=yE#|'ł°ęźśćO–*D%ŚnTeXČy€ˆSصų‘ŸöāēˆŻYKy,z¶ˆœ3JØŹČZ“’9@ŖÓvūKĮæoūČńח±Ą”ukx Äj„Vą@ąŁyižB·žLlšķÜVX–Ńb“3ŁĮĮGؼЉB• Či9NMü¹­Äw3L¤Ė!f‰hˆõ9¾ŅƒN?e~Ėć/ćW—ė3H’‘V=}FƹŻéĻüž\?gIe‡‹ÄäĘwć_‡‘‚ ūlßkö—ā_…Ń]K ŹŻŚ3C*@®Ü[øÜžHh0ćžėoņ¦žZó:ށŠEtƒ‘‰v ÄOzSöćÆ%żŽQ’s.MY(ĻĆȊ¢¤ŌTńÆFįoö8¦•5Ō­ČäĒNŗ¶WšŃ¶UŗI£Š ’£įn.ńÉķü?g‡<­Z[dyd’9Ž1õR‘‡ŽNlĖ4RrŽJńŒ© Ék`ҦˆLōmœĆX"ś#‹Ó’šp1aø"i$¹V‘¼vņŖ Ÿ…}Kk™üŁ’ÖĮ–o§¬Jc[‹Xö$żQ£COę0DÄ®’gŃų°< ¼­øŖ8śæĄņ‰Œ‘śe­źĻpį+*|_żœ!óV‰u”ś“[9žĀņ9“ÅU Ź©4S©žIžŖüŗ·ōž5“i+m=śC, ”±śI=ĻN1qź¼s9 ÜČ+7ļ~>-Ļ)mš’³8øšDd¬KØ5uXĻØŸÅsésū Ģ士D F;Āń™‰•«ńš#÷’’æ¹"ü1ąŻ4Oy9AĘcZx™R8†äM"Č!õ(Ü84küŸg¤ólP£išn%‰’]IY•%JšHTseaķ~éWöĒłEü»‹OŠKéU¾%žbo”TŒšŃĪK‹y…÷œÕ’™pŅo:~ZX\GZ)ą_ļ-೜0'ᢽ+ČߟŞÅpd_œž[†5ŠĘŽāxć2z Ÿ°¢9Iā?¤lwł© 5ĀĖ-Ė“¬ĢLrŲ]Ż\]7wžåĄW˜Ž[K$6S‡‰Cs•ķ'jš *2ń"æfĆž¹üŶ2x!ydC+Mš]“ĖöZ«zž<›’Zɬ±šĒé¬v ļSÉQ—Ÿ#żśÜkłpmæœu1 µŒöņµæøä-į‹ŅäQ˜śĖ*žš HÉéŖŗsūiČĪ/:j7DB–±[Ö#+É|D£Ó1™*¾cFmŪĆżēó]ö¤š«‹»¹®)=eKRéźAÉU”ā„.Q}ų,0Ó ±Ńu¹ä{DśšÓŅBüD²¬Ķ-Ą)µd-ĀżÆęĪ‹¦Āé¼Īd–J±©Ø‰>sūX4ń½²÷Ļ’Šõ.VS nŌt²­ŲGqĮ„.G $"ˆx÷ųˆŪ"Z¤I¢[h–q‘-ĆzSI*ŌEĒūé^µ«mšæ$x’g9ż¢ŲYŻi¶|¤½ż-%¬’‚#D"R[ˆXŹJҵ?ĖTųS„d:„ćN˜[Āņ²F谖w/õŠØbŅܾ܌œø’»?ٜhGcåǹi—©æe ­)5nÜš~E¶ū+ń}–į‘Ū½OVÕnJĄĶjÖ¬¬õ䄆ą”däOņ7“üĶ`†¬b‘-Ž]8€ÓDÆ(gšž«٤wfoQ$x'‹—īøÆ9ZėrAda²…Z‡īdh–Ž>4Œ®4āÓeN ö’½ūRr2Ōm”žŌjJ m …Š Jp ńT7:’…¹r?½’SįĀ߯F¦HļaśÜ6É?ĒĮ¢$I$ų>Ūan›­XƬˆo½FŽŅhŹYXD‚&ž ĆĪ0Ū2ʱ¢ņšDćā’ĖĢĖĶ:6ē=HjšeūĒŖÜ[3KmwV‚gµ·’/©#dnČ?g“'/I¹rՍŌ׆¢‚¤Sõ昞*?dVƒē‚>ÄtsW¢õmĒĀ£—ŁTNą}ƃģā|–I½^#R8ʔč½Tŗ·śŁ¢Ōi¹ u Æ"Ŗ ±ŲŠ‘²ż¦ q_öXqķŸŌŚ ÉB²’›Ņˆś…‰ m-Ŗ3·©š$k†:6­õIÜN;‰%/ɇĄé^D³ ŸŻś_ķ?ĆĖ‚:į¾§ęł„b;6ī”PčK¬’)ōć‰X K'Śn\ż8Ż~¶(ŗ½=8ßQ{skG»2–) #Ä’«ü*Ńšõ0BZYʱ•šR­č &]öų^Eh’fŠ‘óäŹøq ¹Š\*”„‰č71Ÿ‡ö8pų\)Ö<«e«Ż²ybÖĖ­cyVI(ĶäźŪ|R1‹żWāøóʺŜZ}¶ømō­]£šUµ‘Ó‰† @¤’‚"…*ž“jņqōłGN"™|æl4Yļt»µ½ø° ņĖĘ!pØĶTbĻ4Ģ=“÷¢q‰’ŗ^y7R˜ż1EC^Ej r555ާüžÄI©­I'®Óo –”mx76ņ+{€~!’\5ó‚Ä×¶ÓGR²@­JOł%é×K¹otKR¼¤ø†E…É BĖš/"1Y-ŻżOõ0 wŅZ[\Įc4ŠDģ9°u”ūšū-Œ‘żÆ‹—Įö]i~”Qp±…!„¾Œ8>€žńł2ņ«&ѧ©ń»šįžoī^{‘4ŹĀŪ€¶XŁÄjEV^UćNLmł>W’Ś}Jü-ĄŌ­~ś#ŖŲĀsÄ|-Óéč;cørb•”5MMzü²ŃdUICĒwÜmā?ęœ§Į/Ø'‚_JD£A ,88`7nŖ ā>ź¾W’y¬I]~”E$üjx³@šżŸņ°ōS/öv;ö9\d’~¹¦’Ńõ/łķš›b7M:ŪČÖźuRbF n‘’j~‘·ó7‹łyN¹<šźĄFE冠’? 34l²¤¼Ižqmžüų“Ņ’*#®[–æCšzfź“qęL†Žü‰*j²¬Ŗ>ųįń{=å„¶©q" 6mōøÅ–F‡p‡—Ā“ߏ/õÕ3yJ³hā¼wdd…­xµ8¹'ā/Ė›7¼_—Ś_ŁSRµ³Ž%yŲǧC µäŹŸ3Ķž#ćńü_½gÅķn M0iņEÄÜŻÓ¬‹RY¢“œAdŒ1–8Ē©Ķłń⟷ū9$ŚßķlŽka$TThķå2~ī6žH6­iØŪźS¦£ŠńŪ֙~+5_ąYhkŲą}¹@iæ* ¹½““/\LvÖį‹4qŠ© Č;%ś½“\_Ó_W„Oéšt Ö,R6 ;L±š8~2ÕŲ§ØOMøzq7/ī½y¹Čų<_GĮ„2,qŅgbcV„…yØī‹š§ūē‡Ē„מrŠ­ųCIØśGՍR.6įė±1GÆó4p’©+dĒņšźęļO»ŗ{h--™ĮŽŽŃf,Õw”–fäń’Wõæ+h·į®§±Ań+"ńvߐų©źoö¾ÖF/ō‹e†Ž ĀeYažVše ‰åĻ)Č7§Å•~Ėd^ļJm/PŲ(ŗÕļŚ/Z/RŽnl$§īž5āȎZFõ¹§6…$ĄĖ«]é×Ü"T[]BŻ®c†*•gWed€“#q$æ\xśk‹ł~ 9c‡UŗuÓć“uŽ˜¢ ŃI+z$²žg‚3 “æVē/%%óÅüŽf‘o#T»µ­£ŖŠƒčņÖĖ•~ü¼p²e…µnAcQžčŽœzęåžOŁęĘ õj€ö ų¶’Ÿš_ł_śæЬdAqĮćē3—åBXĄ…~ Ć£ą=O·ū°Į„–ėnźcĘ2ŖąU„¤ŸŠµæÖÅn\gQoéōŹ¢Øü_Ś”’³IjöčėsŲšę„ ŹV…Ł¾ˆ’y*#:Ä5 Ģh…ÆIåQŪżoŚĶe‚ó‰_šČkĢųV¦»šqū]>?ęĶJ”5<ė Ŗ…*ƕާžæĖĆh=³¾åF$]Ē`6X-€kMē®*ßæŌnUd<>±!Šiīces0!ü|Ś9÷Ÿä6Į%Ō·±MõßGėę0^Ö5QH—įdS^š’.vŸ'@ŠčĢŹźy±cńLI'©fĆįᘜæ¤ē’Ņõ1Do”~Xݰ=ż§Ö­&·ØV‘hŽĀ”\nM¾Ė…l#ÖZŪR҇Ö"åå"š*ļ Õāń–„UƒrT’‹×Lē7O4š¾§lī³ [§‹Ņ7_W’ ­˜¶Ü}M¾(Ļäy¾ßģBu­>+Æō5C Ūń1ŪBŅĘyB¼wTy#OGo÷d^—÷’/$<¾`¼F"ćn6”}E Ÿåń4Ÿ¾gųæwĶuÉŠ|ņEoĘFZ½Ģ²z×…TµÄ½*JB [©'ļÓį„’Ą—÷Ń\_'8­—Ö6*8¢[GšD¼×ąfrTŹå¾ĻĆö=5uōK)Æõ©Æ`v·WI‚HWģ@JF8GøS)fHQž¢½O³ƒĄ‘¤ŗIVHķ!w†ÖŚ"bS,¼‰GŽ.*>¾ß%ōcZAmŖ¶Kf‡“EÄ*MŹY> |*„cĘ |?fæåcm#iƒ³”+°īH5’b ·ŁÉ ·’üÅwfś’iw#O·ˆcĘŁjjUī o"°«žķ9;IĮ›eäÆ7˜ŲY-ŗźżbęhį‹ ?SƁ~ųĖĆVņ͉7×ŗw蘩Ī” Ŗąü!ŠŖĶ12Ę Ń?»n\„ūōņõµĶ’ÕķŽāM-J›“iƒ§§œ‰‰ū1²ē|$ā/3XXĄĶ¦En±”ś„”–čœāX7‘g4HR“ō~Ē÷£Ÿģ4BIN¤Ķl× "…dVtEŒɘ»*ĮĮżõĆzņŗa‹ŌVĘGz )v·-čÄ”Į%c7ÕÄŖOĘ«q}sö—Œmźc®žŠĮ=½ ō!#œ×N½#Z4ildś¢RņĪņ\\·ĮŚć†~EŠK=KėvŠM<“ŻĀ-•A‰)‹UŁ„n-żŌOöææ™x*¼@|×äėĶ*’P’kC$‰s34q7ØØÆ#Ip„Z6FNtų?‘×#\²Y£“”jŠrf`E!ĶE9WįdnIö¾%GÅćŗ.-„“¦«O«€nØę¼Uł7ĮŹI¹}™Żž 3²^µk kmgR=gƒÓ‰½SŃ¢JŽ(Ėö£“Œlß rF’lއ’“Įf¤ń#quŪ‹˜ŁWgSZæŚęü¹bQxaĒ}f…‘čĢŖ«źjš©¢EĮQ?i¹šL!y’¦JļĄŌ׋š|,Ō ńńäækķ·ŚĄč„/& x·Š÷ĶÉā}ŗƒ¹ ‚:m؃˜Ę U$§.5ŽĒŃ’ųšDč‚1$lü@l¦‘’C§.•ŠON\¹“† ‹ˆ~Øš™ŁĪ’[ŸT,\|¬Ŗ­@Šžŗ’'ĄŸgŠaÅ“JĘ&(%†TQqw“‹“e^?‰>Ō’×Šńy]Ÿ÷|”<—¶Ö0¬ƒ õ±•OĀ“°i+(~Tżüœ~Ӏäg?mÉPŖÄ7aČ ł0ōł'Ēp’¹}ĒI¬­˜h£Tēö}Ē÷j €„Å@mž4Ašżži€gŌī®B-åĮ)ŖĀ­²mąjˆM~Ū+Ķšā6–Ésp±™©Čš°‚ ¬ĢiķĒo‹=ä›(4ß+YĄ‹M–I ҳŗņŲ„0ās[š€’J”ßąn{ m\ˆjÖ±±A9%\P!ØŲtßā*æõĻ,(N”)éčחōYmų­%)4āåwŠ%Ž%ų׊«dWŹśÖ—mgj÷q+^‹™Ŗµixśaäø“‘,Żhæń‘æ—Ó­Fūō]­Å­ÅŖI§ėQ\„Ć8¤«$nõ’v[Ļö[ż÷ū¬ŽK%Ģ÷>£–’yEdŽ (r?”VøĮÄZ#-9z²;ģ„zާörĶę ØaœÖCBŪµ?wÄrć’5;¦’#P€> SeQ ISsńW/Śä­ö“›źĢˆ×ƒ"RjC7"A;ŸŁ#¦ e»6ÓŌĘÉčĆĻāāH$2 I†˜”6opźe22$ÆPę€Rōošµ‰)ōęx=ExDµ?Ąl§•Tӈl”cČ_ą,Ģ(]‰āĄ%Tµū_šŲųX’V”ZÅȫȫS©SŁ›©’)¹į֓¤\ßi< ^S-ä©õoŠŅ6U’b²rĮŃiV×7 ‘ˆģä»·•ź©f„”üŅ3WyN¼]b”,vö$¬Y‡M¤z*RK#ń_õ[;·—Ū–— ęZŖ Ö›ŠĆA×Ū.§5OóŸĆśg’Óõ1TŪ|ĒMü1ŒĻŪ#śŗ‘,ó†R''·ćĢ: ū[Ӌvē^Ą¼ >k³ˆjk܈„1¬sHG4! •’AššWśĀĆ=>EŚoµÆ-­Žœ÷‹ØĀ’»¤1)QMüø¹’V ØFÅSך¤ däŃFdõ[©iaą®f8ŪöŁpßKŗ¶[QpēėŒźf$’ ģīĢ@äĻźr‘Ł~ːė#¤ó*ßiz£Ę%§Š‡’ŪKBźÜ«ž’ČV9yzO"żæO–h)¦yšßėnåšF¹sY@̦hėŠ3MnćX~'Ÿ–6§-„ŹZżcÕ[k‘sjĀ@é,-ÕÓØћż*՗žZe·oŪ‹*ßTCŅ4½8»K=ØśŠŃźčĻK*˜•m’»ąŸÉČUæ^śĆO»¼°¶Ōļäø—Ø ¼ ĶXĢ*F’ÉGŒśĪ’ É'ļÓāķø¼ņ“ZRźQéV䎒„Cµ¬nž¤§ģĒÅć(İõxIö?cö™°ł‚ÖŹŅÖÖŅĀĻH’āQ Énµ%dČ~צ„äų~?i_˜/ńdņżbļŌx8™b¶hĀžęA7uõ٘zKĻįų^oO#ö¾gÕdÓµ;mAMž„Ļ×-ę‘Ü·`$(XæīŁWÓä¼£hł}Œ,V‚ēPkBåƒŹ£ŗW–Óā)EĮ}8Āzæ6dō½HĶ®u6ś”ŃķQ8Ź Ø·*ū]Ōq`?fÖŲI$’/ļå™~йžG-rņ”*D(žœ|"…AR#4KPœYĒŪ•"įŹX8$¹¤•=&FÉx‘5JėRĘ-¹·"”i }® +7÷iI$ŃKÅĶK1`¤Ž­GFŠdfåǟ„ĘWųŚY_0FˆŅ·FfD—ÓU$^IJQ§“—üd¼n\ÓCÕµ[W”ŲC³qŪ)_¬?ģ§ī׎%-ĮX]і¾¦ĢµjYT)ļ“o³ĪO݁ÆéŪ„öŖŃŌĒ1ˆ«",a•‰ų!ā”|"®°óži0TWZI=ÅĶŗ˜§%ÜI,v³Ī¢"ڇö–T_‡ģÉö8ō#Īś„čˆ.ćŠ@AkkĘҊ@ ŸJJtUŽG’W ąÕŒ©Äé"RWc4jK³^ ä_Tó%ϧk;˜2$"x%Œ27ē'% @²-[ķ¼ˆ™ °¾y ³æÓȉŚ+ŌŌ¤‹Ū‹Ö«žNqkØČŒÅ^ HĪTüq"=(z³1å†>fÕļµk„¹»UWPā8“hŌ*©jT ßķ‘ɾ7ųq8H2²¬”›Õ·¹ Į†AJŽ?gżO‡öŸłĖ!]:ŁU¾2—PĆÅvą ¦Źæ²æģ¾+ŪX35¼2ĢnT®ÜX;€ĶAWE1«°’żœœ²ŗś*—‰ŚEivįĶØ*;²ņ_‡Š’.2kVaŽe”<ņ1‘JÖE⬵āųA?äb&ÕŅŽXįaõµ˜­$<© //²?rÅāŠ”Ķ HŪCĮŠ7ߔˆ$$ĖżÖź>.\ø’.TZt?V½ø±(f5õ8¹,q 鬬“ā³Źöś}ź‘.MP³DVä·Ś‹ćąŸoŁ\,’ŚŻ§7Ź įmD+-½'1J¦…›‡ÄŹÉń'¦ü“ąŹ¹¶™$ŽO®A#7÷dw’F^{£pāqūKń``Ė9ZĖ=¬¢)~ÆRĒE‰c“ķ}”Į:|é>¦[ ŅkE0óbÕmčM>ĻØbI?i~±ź~Ī)£ßżv›x¤ n#Š°PcvųdØ£*É 7ņ}ŸõŸf—-„ DSmŖŪĖ\ŌP³,źĻ>ć÷ž¢B¼‹rę’»żœo%®„DĘÖŚĢa®lįb­ŚO,až×Æńz‹+ņżėżæ…¦ŻŹIf³za½[‹ %QĮ½PyFŹ@V^? ōŽóHļ"ż¾ ß½Ō‘pbЈ•”ˆ’ZHÖPؒ5Ē( ĶĶ9EĆŌÕõ0J@%·‘"V-ź8®ĖF*Ŗ9P|ńqžDųžĪ!kݤ1ĖČMbźÉz«“HžÉ*ŹČ¼øŌüéö_ģØåŚŅHH™b‰®fU$—sæ*nxņ‘E9.š T¶[z«:*¼b&e~rĆq ā z“+7H¦Nq·ó1¶¹’ ŅĖ$ĮžOFßӑ½@Ō#4č“’>\cTH’i˜‚­¬‘ĶhĄb§Ņ,'śUŁœ"ųŲśmˆ¼E=)#āJŠÖāux‚«Få³;r·‘ż?±žūd\Q­mÄR}S”ˆ®C<”ś×(ŁØnyƒØF!¹Ü?ļ„’OŽći%OCK(żŲļv£’Ó֟ÄēŌ“żõĮł`Fƒ÷źe§œ/8¢ˆ:…õ™Ü ķ0Vq|<#YW÷xµ¤*Ņżbą³r4X’„… rsG‹‡īż†uh·ŅV+ P¼[tY؊ŽBŗrŖŽlŠń“ŸņŅŃ6]]]\yV[ PŚ“Ź-¤”–exķ®Yh? óż®?Ī’k#“ł%øt²·KÉ¢āe«ŖD<ŽČ?d;śLßg÷šą8/4—Ō/5QŖ˜uåŠĀGŒˆāRX«²žõ֔õ~ęĒėśćƤDšĖ,—éĀAsw'­u^)eå1Żåō—ÅĶ ųæk!w’K4Iq4‚I$f޵*((:1ćÉæą¾Ó6%|¹–‹)UjT§%ģ[ŠW³õ—’lBš ż‘Z«_‹ż×.67(}B‚};˜œõū[n½ĮäÆž¶)鄼1Ī~šÉ q"ž§Ł4Ų†åĆš! Ēė!†įsÉyT‘ĒÕZ¢Š¢Ē(š$rÉū27ĆŌ¤’æķsyŌå‘{Ćugp ¼Œ/ĆIR2 /Ķ–µ4~cāZ’²ąü²Æ¹ŽŽCof Ŗ‘,vńЃÄąBÕ©·OŽ7Ł^Xm[©ģ:šü”V˜ŠĻŠ)ÜØŲ°;ŽTßčĮvQßI MKxcÆ+¢h :zĒzü4ū_kżl1³ņ_šuL–šlÓŪÆÄ×¢j÷Y'ō‘½ų³a¾Ÿłaęxī#z\šJÄ*ŃPTV¬cśÄ”#ģq…¹d¢ĖÉRč֒$šŒļs{ ]D˜ æĀR5¹Ek‚€²±“łł$(ł#•töI/a[˜.LČö6±O°#)Ž©ĄĘ“FæŲfvOŲūs‘źŗtÆ$³Ł«\G1[_PōIĀ#ńj’4dGąųŸį^+ƒ#Ó­'Ņg¶Óȓ•ŻĒÕŽŖm” ų™yrųæ› ģ`kß1Į§?Śžq‚ǐdR“«ŁŻwšø ļNø6ӗÕ!@­Unfž_…ł}ž8}wdņ^ih>䆦 NŌ*ó#mŖĪp4ó™ocŽ2¼­¦ Ņ$•GnÅ2īåI/~²”ōe–ŅXÅ3# "žS…č."Ž4ŠVTе^T„Pžtå1[y”DĖ'*½KƒŲƒ’ ø½„Ā,ڬ”Ø'·$V„Uć`v§Ń—«óŗ¹“‚]FW‘­P<źŪöš-ˆ[CÅŻü¼¹I¤‘čĢĪ«’\2‚Ź+Ø,oܘRUEBµ?×`ø4Ł@·uĆJÜĻer +ŚiĮĢ{ģdP~ŠW— “Ėu·Ō ²„ŌųÕ> oŹOźhŠČiź9¬”ž`«×Ž”ĆŹS.ž9t÷Ļ’Õõ>U7ĢŻ1“ÄåŖÄģ (¤ņšŪ®D5Fu%ŗŃmŹ zʲ>ź ØżŠz²PżŸµżźp,ÕN›a*X}`Étģģ¼Ų€X²ØøÓķ9ųßĆ$^ā-Q¹™ćEśÄ’ŗgAŠåSn/UhŚpƲsFU_ŚÕŽ;ØłzŚīdkˆÖNF{–„Ąe rp²Mź5ińŗÉ"żÆ¬|>žG¢Yŗó†8œNūF˜Ś¹”©Ä­*nßﵑŸż×oĻ­½„ĮE–i ¶­9­ąšü Ī(@ļKĖāN~0·ÖņÅ\­źHėhó†"F+DA(ōD^ ·1ņifųŚ8’Ī%¼–q9`%n>šzėY¢wš„Čųąõ=FWUēń:¶VŽ£Ķ*±ČÜī!?ŗuŗā¤šRˆó Iģ„Ģ_ī¤ä¦–VYāRu w!€VU*=N¾ÉųS”-ūčSÖå s¾}0‹ZĒĪ`²žīh¤¤Øį}?UI§ˆP,RGżŻŌińśsŖ.\/<óˆęTžYu¤q\ś}€%­5Ä$Qø?łĖ*²—,Z„giē¤RM²cPƒń¢Ē%oUžŌ |SI'ķuéIJ˜I€ƒ@iE!ż  —xāSńž\¤żž\±ļżĖ<“1’~LŅN+,ąqfįėNßm™9OĖ—<āļteµ·TGo1Žņ9ČĒöüq~Įń·„å¹^0ī'LÄnń…ēĄåØų’ͱMrömE[R˜$ž4Ž“õŗ»0„ŁŪ3@Śb…žö7,ä×`ŪmŌ|ņ’ušÜņŠ%Qń—(PO:†‹­ānI»}œt3F†V@U\4`«½UŠl”¾Wä¼ł²£AĻās jD ōŲOL±VŪąųŲńŏ«Y™}_IxȓTˆįn÷r(gōŸā’+Åj‘Ć ¦uTµ·¶ÉZØ(Óāć2G7£*4rü0ŹŹ8dŌž¶é#Ū)d·tn2KŅ?[ü…#›§ķ|Q$KĶżN;½>XnG«5ĖśĻvĖń«Ō$toļZ›7?…}cżŪśŽV÷cÓ[y.dŌ4²(²»‰UHcŤHÕ œ|“Šś¾žŽK·V¦åd¬hÉ8e+U Źh9/ņ?ńOŻąx&y£†¾1·¢Ń &õz|4Ań*žĪ(·a„)3µĶ˜^uAĶŲ|}Ø¢’gąÄš½vyYQ*¢¼X‡f.ųø‘ūĶ—łWƒdæĖpYjčÆ4 «Ē,Šd+APR2>Õ#~)üÉö2dŚ~­ot“ –*²LxJT®ė4Ī[ģ¢(U’!ņM„ݼˆÉyŖ“€/RH«'SÉ!ęÜ*œŽgć_³MbßN½ciq¤€Ēźŗ³źIjÉ#3#vų׏ƅ÷Z°ŗæ‚y‰74hņŃU‰ E^-ž·÷™žŻ®.­&¶hÓMVø]N>š–k4,ˆ¼‘Æ&ūH¹½Ō.eóĻžŠ,±­“QxDÓ3(’„§$R}6O°’¼ūhQG&»§ź,{usm<ܘ¹Ve"½v]żŽX ŸĖ”vä|¾® Aų­nO#°žją›Š‚ĀÓR˜éšéŅKżźģEõ  ōˆ–Mz:7­ov×ų©!f9-:eålBÖ)Ā(Zą`·õ`— "IŽR\õy|<¾Į–1C$Œ÷*lõŗ{)Ź‘Q#D]\V«é·ĒOŚ‹Œ‰Ė’ą+X ¼V“·t[‰m­”‰äcEe•„š”į¤ßĖ‹XiRŽiNŒcž( uCZąåæ%ų•æ—ÓŻā:eŪžH¤ØP žŖ€vš#sū<Óō„‚źęÜØ ‘@Ō2É·üĆ%øI|ŗV7%,ā–Ž §«s4a|LHæüY‡ ūGŅW4].ݜ_Š8eŖ6’v Sž¶[Čmo Yć¬m(žņ ŠJõę»gSņœe4H[żüĻ*ŠŌp-DūŃTįĻĖŽVŁ’ÖõFli\G€öÄ.ī#“µ–ź@̐#HŹ‚¬ĮExØŚ¬Ż"×ÓM„Zżb8ļZœ˜-mPÖ7»˜ÆŖēģŸB'ąŒß± æ·š1˜|æa“Vw+䶄š\I~įŅ‘+Uōh KĒ÷œ=/_ūč…ģ(šƒ¬fTyąZåb ėƂHŌ<~?čó,‹é v“SDõoŌO0n2:QqĬ”(b掇żŪĒ Æ‡—g–!%‚ •«u$I2!Zš#7­$f«Į?w'ū'ĀūĖg¾“Ó{9•!TĘ>5jVI#õLĻ"Ņ‘ÅūČį’vž÷÷X6ĻIÓ#¶xķ%Q(Fkˆ®fõC°āYœÆŠ…c’~#ü8D”–!BńWżoSž+_‹9‡žtōżRK«H½…Ą‚Q g÷PÉt'„OŻžźCßc„ø’K!*VĢź¤Rņžd‘^“zfY¤ÅRQœ*€ G'5§²ų,»)u%ŗü!Ź»¶Õ 2­zQ^\Njļ™vaJŌ5O샳7ņņżœ„.—<ܲ:9 $DŽU+AU;ü'z,c•}HÕUUē·%ø5ŅØ]ø•?kįh™›įŽ<źJJ7-ˆ2ņ20ūqųĄ>‘Y­„–9øžŹ¶p®Ü/ØLQž4ų RćOM‹Cź«“‰Į9d‡J²ŠŅ F"ihd(Äžķ@.{V“^~Ÿ_Åź4r°©n#qĮB.ÜV›…č§^ķrųxś–üXČ=YÉć]¦ūlI4 ģ÷cĢÆēĻģ\7f¬ó%-f5O2+ńpˆ,kÓoŁn˜Čø!`Ä+­benJŌ$­ØäźÜW›|R"ā&‹#Ņ•Żv!‡* ŃTx‹üŁmndG'.é›e A^ä%)É’ČfÅloŽŽ¬!Åg™ĒĀ„}¹-V?…>Ēķ:ͬõ{9¬#œ£Ēė‚7*ŅJŖ+G<©é…³üÅĒ ō›4ź…Ø·¶"‹sw#qaJŻDˆ²Øż•¤ļĒįĘłĖž`³ŽkėMfŽöźÕŕĢDĮ¶"0[ūŌÆūķbćĒćņ!¢ł»Z“Z“†é–5[˜#‘cP¢śŹ$x–wż„Oē’W 5x“‡ŌŁ-šę{Ųcžū‚„ø‡,h»Ašņ䬣Ó®ZV·bß½g‡U¾°īĒö™pļAøµŽÖāi`\ÅK„¢<…½[t‰V$@OVxĻķ3ś•csi pi·ŃĖ—vsŲĆźĘŃŗ¬÷’7ˆ<–Dˆz­ĀZ~’ŸŻŪ]Y˜Ļķ­&‰¶ń+dj-X§šķõ(OFäJ żä‘™žGU &Æš`Q .õ*[Ų\ÅÄ/ÅY”1?ī±,_ģÓ /µ°“¶„A¤»|DKrȂy7®Ķé/ų×FīŒ£Ø uØ4ÆņrG§źqa(Œśf;x ` xķē‹Ē§Ä0,ŗuÜVk‡Äeiøµ_P>ōōŪž .ķ¢ŠMIfrM€H a»ŁXPż–o‹ÓŽ7ņÕ¤ §Ņ·›Õž›ĢOZx/o «k&ZżbÖÖX‡#ҐÜ!§oŁ\ µĘ±o8“ėå`Œ~Ē"ĪßB#æśŁŚ¼°AŠ“āˆkhߍ)BĀ§éŽ˜l2ž@ĒpöĻ’×õGį›¶U>ģŖ`Kų„É ,“FZµ Ÿ[ńōųįwčš5d2H%hŅYÉ Ō<T ĀüS³1ų’ÕN_1^ÅuęY”*$‰­ę“µSRæčĻšF U’I=#·ü{7lųDå};­Æ×BIX–z•WHZ:EIœKKūȂG3Å_īĻ‹ĘlÖXķŁZÓRZ[wTOU•ŲŸŻ‡fŅoōuxŸķšVęҤ‹ĖmxÅ-Ģ6l¤I1Õ§Y7Y£ŒæåO‘=tQdŽyr_&˜×Ö…¶­+g-‘µkčŲÜ£ [ÖFheUōyÅĘĶ7Ųå&qŸ1ł^ēA×5-ād‘ģeQÓ ŽTõVE]Č䱨n?e¾ %³“sʋZDĶÄ ·U Jo²ņÄČ«ź)*Ø|…Gā1yJ•ĀhU·rŖÕ;’hüבżŽ¾Ö*҉įW1F€°Vą:,\‹;…żŠ|QÆĀé4y¬.—ė),® zsE/bŽ”ĻĒć^?Śā†_Suj:˜œ/eŸM8Pņ‘Ą‹O‹Œ©Ė÷±zݦZÜYÉ:s’±ń¤Œ¬ŅšÆ IņūĒÅįO‰Õ7Æ,ŸhāŠ†UųC’5õēAöx³«æ·§—Š®”÷1Š7>Ū7ESĆżEūV˜ėę–K`cV‘cry&✘ńņų›—ķ/6_…¦ŽÖŖ=oC „C"‚zœG©ČŃjKņēŒŽ€’?w@M  Ɛ+š+žŪziūXĒž„˜W™ęI®äņļńr~_źį†› Ģ’MĘcRĒĈ4AĊę5/‹‡ķ7,E™]aebS›z|—õĘT£ īY¾ß5ćšpÉߖõk^~čĖn•(‚»ŖR¬ļń]׹§^żfć/©yßVd’8„6Ö“*ŃBŽ„IÄž”fY9÷g&Džx^Ģ[a¬Ü=ÜŅš’_«Æ­#©įˊ’œĖsōÕéÉ"£\Ķ’.ĖšäGLYW·HtKŌbį…züKR~Ł_ų|œŻŻZi–·ŗŒVKõØķUZzõÕāPI?ųŸż_ŪĀÆ/‹;É­a—뱿īf"…Ä`L>LµĘœ>%Å<™¶µ£@ _JźķåѲ>?ŻWÜżNlŽöŽč®•=ĶL„¬¬°ÜźCź'Æ<(£żõĻ©ÆéV»kfTśĄõ¢wŠ>£o7’)¾%Z~Ū`?Š­ŗé×±˜ī"¶f@ąspŃpŽW T3§«Å¾ćžG +ż[Aµō£ r‰-¬ą¤ĀFbWˆoŚ*­ūp„£b½åZSÆĄ»tnækł?ΚƒÅō ßłėJt¦łoNæ½Ōo-¬§ō$śµĖøUēź*P !G/SķŁVĒ-Ę«֛5²™ ĶÅ“iń¬ŒŽIU'sŹNuCū86öŪź÷:Än’ ~s%Kw”9;Š’rP’­†ŗY|™y2DÓKéųńśĘŌ§ł<æŲćܑ©k¼Ļ¬µĆ0pÆlĢŪ‘ā”LĢ–BRÖÖk@M\«Ā£nŸŸk;‡”׏–t±įob6*}šä(®Y_lÜĒ?’ŠõNWolŪo|NEć$ʼnõ‰_z(×utˆ5 N^C“I ”åV—Ӎ8žNģī>õs•źP\Ś]i—q;‹žF+ÉXģīB:Č«é³4ģ’QĒŌoQ’Ń”N ,⾤eQ>ÆĆėŹ•¼Œ„ …<ųØI«Ļ—śņpC_Y®nJkŽ/©Č%U9§ Ģ”jæ…}ūω=Oƒķ¶[JĻŖÜ\Ė'¤’Z¬RM%™ås,©12‚É"'ķ’’Ķ„J×&ÖŽtšv›ŌšźÜDZW'‹±õb·+ĄS÷Ҭ1z~Ÿ„Ī7|4•īćHdK[˜Õ„øšh­—ˆŖ’Ł«K7?ŁT_OÓ^qĒūnMCP–ż!©z>·ŽŹŹG,#Ž 3M$‹³’~ńQæå”ąĄ«i¦„“ā8^i·w_W`[¬’—‘¤ū?a像ūå'žł‚‹ n(ķ@ڃ£)Š4,ņøžBŖ®ä[—ū^‚F¾¦!ŻČ>¾ ›‚WOŻ„•–£­VCźO!vż¶X®%_Ł|0“ÓlĪ+Ū«ƒM4Ļ 4—ҼƓ^K)GĀ«õtśĖ~ÓpeÅe‹Oõ™ž©F„LÅ"¹»=ŹŹÉmß³u3ÜÅ|šUƘ ŽtŽi0źs7«4aMB©•Ś5’ÅWąŸ±'ģįµ°–ā5x¦kˆĄo†/ʵ)i’“œrī äš³,&Y`ņE2”#oļ&xʎܰÄ·±Śƒ Q4” H_ÕZwPĢšĘĻ’¤Ī’ĢøBŗĄµz ¬<ø“ny©ų¢«Dė·÷XäæńfU½Ųx.ŽU†HZ;ŠUhé1ZņUhŻ„xŻOŪāÉūOńHĆ%Õ“j«²¤*—73EP¼XB·2ģFĖ$ßėc“ÖŒŽ”! ‘P€)żē6“į’5Ę­„‹Ęd–T XžńߙG`w@ä²³ō’vIŠK¤‰}`ņ·sńrQœ¬‘*ŸQꎬęF‘?ß\3C§ÜBāE–ķłÄŃĮq!Ā‚¤,“Ųø µ.‚}¤żē\Ś/Õd‚žŪŌiHŠCGżŅ°ÉONTćÅJńNKöWćÅķ„ärK(wY•%œąāE!„„>™DYēÅWŽUūM“ķ6x­ēŠäˆ•ad%YŠČO/ˆ(*gāżŲüæĮóžh\Īś®Æ2®Ü‰"ø‹—5Ž”ØŪŒ~¢¢7ó¬ŸźäLŗKKŲē‘ŠŖƒV•<*µ^KüėūK‹,1%ķΟr=g¬[Ō!”£|,±'ćų?›–ŽÖt™Ń˜ŲAĒ4;qVźŪ}Ÿµü¼±2Œe#Óu”£¢©Ŗ°ėµ7čøeŻÕß§kŅĶėN8‘"{™*v_P(dŪķČŅņćū>ŸŁYe˜‚#†LˆrŅŗšM‚“’¹aZ 7§ļŸxł“ZA¤²*ģ‰ /!w? +āʬ~/“’?Å.C5£1Õ%iÕVRš)Ŗ‚AµųvųWłp82‚¾™©^µ‘eߨ )ö~ų!ÖvQˆČ¼Cq7vBvāæļÖ_ų’ąŻ7Z[{߯[=Āž?W A!c@„ üTģܕxü_IicwØŁÅu:JHłĶ<+ÅB®Ń†Z‚ėµ—Ēé|Ɇ,Vk4²¤Kė™"äÅ+«?wn4Hż9=V_Žš‘ N…Ø\‘¼HVžŒ1Kū™·®ćūÅ‡ķš‘Ł™¤6ƒo¦Å śÕZ"ĢņŁ11ÆĆńH·›ķŖK$’q’ON?µĶ•·š"Ÿc¦[X@Ŗ© źq`Ę>Öü„ņæk“¶łŚšĢ–ėé$VĶi}rØ£e,JN*gŪ¬oÄó)«DŠśš¢I2Å„6ÆīÕ°]¬‹¤j£Q·eøŽn&Bˆd$·eźwJbšĄŌļ/„½Vb_Fߌ¬~Æ+}”ŲPŅ…3*~Ļ‹–7Ģ(ŠÓK‚Ź[x†“ „"7ćlWł›ģįI·#óĢĘ$_V)Šü4r HØÅ8uæ›Õż†Ą÷¶į-ęęŸéJ#‘Ŗ[Æ/†¤Šīøœbé 8V™'ž+ŗoóćŒW ^õN(ÜI$ žÖJ’-¤X|×'1Ī–—čŖ7%Š„+Oׁ×R0hžV^§€Ćs5 "¬¬#ģņ!ū,dŃæ”ę–I­£”ČŽ£Uäć³›ÓHųbš=Ō‡ŹĻlßXØxdc_öxmęK‰tķ[P1Ę^99J‚J«n{ĶžĖååšĀm*öG2>Æi4GT"!2Óįā\’­×@Qś"Ī•*#P¤ššA¹Üķ†!włwĒl;o ’ŃõNjeS(ƒaµFätW¬78Z’¾1²×ćąOVV<•ߜ—9¾·iq‹9” ĖØĒŖcrž’GE~?Żq“ŅÆĀØīĶšśæT„b“e1ŠDĖR2­%cüZ²H9Fń/9=_ˆ Kš» ę,I!ćrÜOؼBŖŃbc ōž¤ų~5Ā^Ä[“—RJ€z“4Œr!£EžH²E*<’ü+šĶéqĀ{SišŚ+$—vń7ļķ§‘>®J$‘`Ó@’·6Į‘ÖDżä_Ę„¼w¦G¶u¶sĘāqݱ.=Hż!š½ųŃćź~éc’5欹¾iƒO{t–Y øŽŽwOĀóøY>>”ż_ƒ³·æuń³.a½xb{Sqo$j–sIĘ8RIĶ9ĒŇżņqū_Žšžń©\=óŁE-Ŗ2žīFc3z1ń!پŠ'zürŖ£óo‚Eå&.t«}ū»® oj=YYD*Æ2“*_ŻĒ¼Ÿ?ŁŪĄšÖ$¶·c+US˜Ź³1*ƒ‹V“ķ„=(ųĻĮ—Š·.ndÆ$ž™RF…‚Ę-ÄBh˜=Gb°ŖJń+ČüŸąGžL$‡¤œ÷,5v ójjČI—¢’Å‚'–g_EE‘Õyqā‘ü8o%“¬b[«µ•?xљcŽUR Ž-D•7ųOæŔŚl—ĶŌ¬’±]4ę@I©TIg0ʾ®:Żļ-žēš\»± ,ÜR`Č¢œ-žÆ~Õ’.9~ß»0źŽžĮcŒ\\Äg¢'–=~$e‹ćéšüÅßńń…·Z’i‰~–ń «pZ8W‰ ¾‘*“ŗ… /8™xś^„šņ‘ŠŽø²†öÖᤶŽ7åȔäŪb§ż¹$h8sHņOokuØé¶³i÷¶Šhäµ½ƒĘ‘Ń:1`ĶŖ“«éš_BuģüYüҵšŽÖÕeFŠA1„Fz$qā«M»ś•’vzŠĖœśä–ED^Lz(źiŲcī£tĘģ\( œŽį;)³O俜1µ³[عȲ5Ź¢Ŗ£ó`č”…—į? ‘Ŗ’¾ŽZi׆0ń:šI3Ŗ½œA· “RgŪżõ^LŸšX!4Ū± ĖX\°·”š[É”Épƒ£$¼h¢aĖ…dē*»ŗ¾FŽĘKeܬq‰4īĆԌGɁi™€FŽ@©¾¬®ßaāåɵøø14ņIA‡»øžćķSūÓ.e’J’uü Üqc#}e'‘]ĀÆ2’Fų‡īdUbŸ£H©ź~ēĒ†66`²3æŖb Ŗ­ĢFy.x³ ŸQŠńGų'ōāų™FĪV5Š!ŽādäŖ“¢M€oN5@Šž×ī|ńƐkėĒæŌ¤¹PQåp# hCASZ.ū×ö᱈«šŠ0@„BWā”jĻ)oOüŒRS#ŖÅĮH4½Ō¼@;ždņE’%æą8ą'Õƒ)šÜÕ¶gø2üKūl‡€±Æī«lļüß³åÕļŁ]DŒņ—ē ś ©¢¼Ę(Ą`+ū»ołø3M+¹™hļ ’ĮmūʬćÖvwyū?ɋZ\Ćrņpc˜±¤SsēĢņe™‹rßūÓĘn<9|<°tÆ4rŽnĪх…£J’PtEifhX|?W»užX„ŹXca*[-b„sšŻx¬HMH3Ś3"GĆųˆ†?ų·CvöÅ#šŽ&"‰Ī·Œ²Óį-äkćĢz·īžÓKö°ŲėqڈVOR7O‰ Ä©;ڽ⒪ޭ»/ņb³ßZ–Ū\%ē}Ø”S<©½\¼qōæ×—Š—÷‰.Fļu…‚ŅņčDīõfu+”1¼V¶%Įjæ§ėJĆü®źžč‹¤=µ®Ÿ’VŌ`‚8®!™P-ŌA>²xOCźÄń·©ń_>WzŽ—«ĪÖÄGķĶ `|[|JTpIYˆ-źÖ9Ā’Źß ėv6ŗĆŪ[_ƒ ±Œ ’É!VāÄ£Š$|~ Ü_ÕGā‘ē,x"S'ĀX))BE‘[qѕ¾śē%ŗ•mękØmJˆu9āuW#ėLb£Ž ~į“—+źšĆ=kŹw^W³†-RŚęį BH9K¼ĮŲ‘“j·žŒP5>6–9=WżĖĒͰ†ūĢz“ėß^4°/¢F1žüaœ,’·/Ūføyö™š1šÕÆ“<و/4ŅŹ~*2ŹBqŲ’¾ųńżÆŪƋyˆ1¤SĖ1'Ÿ¦'²•M~Ķ‹Ūɰ)OÅÅæŹį‹¤vm;ÜcŠs±˜„kü±4ŠCSą@ß¼ū?ŹŁF{[i½vō¢V%„²P$°¢…¹³üĖ·Å4LøŖź$AäźYEżē4Ėā!G­$1śĢņqhŅE—ŌĢv¶SÕŽéÄņŌÉĮ™Y•I”QWŻžĻū/Ž4»ebĶšó ‚G.ß©čU9?,O"…AT9 ‚čM  ņą²ž/Įx3•§Ę½ząF(Ė™Šžl^tvT ÆOµšžÖÓ[ yīBĀ‘…õ}Z*ЦŒ£ˆSž²·üYĒXڬ’Bb”żØćeutCr2 ÆÄŒątåĻ÷Ÿ³†W—śa¾H•Ō\ŪK#¬je… üw§&@2“]NöŃLDD”Fһ߼•00[»čøZÄļ(–ܬ?ęnbEMi»Ą“ßö²aŖhŗõœ.¾®Õ77rĖjčA‰ÅĖ]Ł’ÓõNlٱ²'(ŁkBE*6ĀłMb’Ā2ü”H¢¤zµ ASķ¶G5/,µÖ”=ėHÖšķź#„Ųś¬ŒśJŚ/ŪųžĪCoķī®­“Ē-“/ń*µY"“öĄ©^*~(ÓŃēÅćõ²2†ŗµK«;`ŅD X½ ˜#S'&CM’wūš§ĀųYv·×7^Ķc¶öķźżf‘Ū…I-<äņąäņŪžģČYwy}qi,ņŪ$zķ”3Mńµ>¬I"ŸŽDīĶūø’yū¼ ʗoisāŗ[«Q½v…#NKš£żLAš}؉“įćńŗż ÷zŒ1ThśdVĢOĮØÜĬåHŚH£HŽwā)+z¼¾6_å@ϦŻĒū¼šXOÄ~·3„’Jže`ž·ĀæjKŽ\¼‹öĆ H–ŅQzÕ ­/J!ng5ŁŲ„ļü+ņønd‰’VxaŽE‘c-AG!é‘nö°$ļ~³:Ėź/÷|¾ ’Q©o,öʜW`ņIvIŒ//äI¹}¶żŽI_ék!ēĘi!aĶ$ę ²ŻM7¦ēj·īćo‹—ӊ*z¶įŤ±2(#ŒrĤ²KĖéö·õW–T“ŻLĀf’Ö9Czō3HŖҬ}yŒæ+ÆÅĒ2ÜŪ½ėS½¹ ö–CÓ=_Pńū_ńžikĶ¦Ģ ŲY’hAø¼w”ƁP•@É·Uo‡ķ+`˜ÆdµāZā8Ź„*^Ŗ SƁw=x#ż®X*KO•d7>›T2*ČKƒŌėLāOåżćÆĀŸa~ «]GO‘–Ś&Ń£hWÓQļšŌ·ÄŪvßø’Špl,`Uõķ]…¬ŒÖņ[ó2Å·T‰ŚIx•õŽI ’Š8ā¶vŗtĖ$֚¼k$ä)µµh%cÖÆ5ŗ,jkŹžÅįńś‡īĒĖŪrĶĒŠžHŠ'Āļ0E1ØŻ9[²r’‚ĘŪŻ[M2„ÕĀ^ʃ×`a6öŠ «3?˃“čē·ēe"4Ö°HĄP!ā+•åxƧ8xy"A/āoNIdÉ)yņŠį¤†”¹-*żž>›ü/@*xæ«#'Ło…0æX™mģÆ&·Öźą2p€ņEIŃb‰Zü#ķDŒČ±²HŸnl…Kn«=é·ĘPJ[›1DF™+4•YŁ>ķńåŻ3PŸS“„·¤”©aä¬ėĖÕdeT<Ąų¤ųł*rųsøy·OŃüϦŚé·w–Ö1L±éw'ҹŗzb)ØĢ‰ėIƉäĶźqOųÉĒu»+ķxķŻĻ©WIį1H²qˆücfHڟe‘æcāų‘› l®Üz‘=eچ9e‰Ą ślĀ»/÷š|8¼u “Ńr¹²7ļ!76ģŸnOĪ0~É@Ķ'k’ Ēæē"DĪ 5…f+R[ż)Iū#ö’i>/‡ąŻBĢŖėo,b„ŗ*ʤ‚#䁦•¾ĻśD’Ļž‰,Œ‘āeļfŗd†t ®^īąń¬D?v~8¢‘Š7Śõn#HšIZ"ōÕm~u‡C6qĘ"·ŽA «V7yz³,Ņ1?¼.[ŒĶéHޤ¼[ĘJ2l¼øD§bKLE>õ[ķ}¬_Œ`WŌ”–ˆ(äO©š¢|Gį”xSłæÉÄmZPˆ9Ōq~[Ž ‚Ģhāķ·óqĆtšPYh’8’B7_E[‘䓞NgžzæłXkåi˜jZ„ĪĘ?NŚgb½‹| ‘ū[‡–[4R5¼hIdˆl*ÅQ‹Ń˜ŁŸŚd_‹ķą§¶wGK¹øā¦U¢É%„~dFRÉń’¾’>L”Q›eV… Hæ¾$ŠĢ•€WŠFęķĮÆ’}¦/;]%®8Ȏ WŒ’óPU¾Ų’eūJĪJ ©ßźŠ–¦ŽX ©SÉ£{‰€’y'’ƒČmńh5kšG#(oH¤]‡o‡ 4d‹ō“ƒū†)v½E¦¤:ņc^?źäÆĶ7wy’k×ų¢šKE°Def„³ il„„”2žūŸOķrČטEÅǦĢę ‰ķ—ŸØ„ $& ŽT!ŪØ’)‘p é­,v¶ĶĘ]$–(Õø˜”€ĘKń,9”“’ü,ܛā_čwZzŻz²¬ž’BÆ"r1Öpč«ČŠFæģ]1xÕ£qs‚ėŅ öƒ¬)Įœ~Ļk6„r8HĢ‘±Ų¼¶ĒˆŲR”¤ųvĮ:Œu{ęQHŁĢž›(āå¼eōN~µöpśf¶ŅµöD-¤×WPž®b‰$p+݇ócķīFƬź:åŗEŸq}Į¢vs1¤‰,D!SŁ“ƒü_g |Æ«å >"jÆęÆbmyĄdĢK%妨lʬ²Źd‰ćéJģŅ(„zSņ;Ŗ4w,‘©ˆŖšÆ©2JĄÓŪ’’«{ŹüN…cĆEŽ€bGчųeœŗūē’ŌõNW#ʜM)^[SåÖ¹y²ˆ4Ųż8±”`ÕG•ī RøG©\"zŗxiÕ£Œ5É ”uj*¢’X/Ø[ŠšžWå{©P-`uųÜIĒ“<Õ"…źŽŠ²ō’wIķ|öhŻ{ŁE­°vā„AōPP³=xŖ4œ~&żÜ|£_ōˆĶō÷śŖĮ<ŚbCerį“m:rSՉG5™£&“ä¼łqN/šņ½²Š8Ć\¹r” *†ś“"@UcŠ%9ĖöDhžµÄĆ—¤ņį;²]+­ŗ¢ĀζPØFō#ŌvT`óŻs+õ‰Óą†Vōa’Yæu‹\É“F“žžåŪՎ+uäĪ„‰/ ˆ2#:’»•!gćżēżlou'§$–³0¹cŹWFåV”ؒXFüxŃ’Ņnążģ(˜ŁžŽ1)(­õŠ’‘ńˆ:)I’kˆĻŚØŽīŻž×/Sw{›ÄZÜM5µ0Č-!F1ē-ĆLėĒöŽwUūŸ,mĶ…ā‘.§y w2•ōį<§˜ķN³—‘däæ E Ÿ·_³ęEšnp*Č*n.VKėš‚OŁUhb”Wų'Łżē.ØfˆČ#KY5 ˜ÜwT+R(ӋÖ_åųQ×ü¼ly4"KÖś½£čĀ?І© 1‚ŸŖæü6cy:ĄQ!śÄf¹4¶4 ė/šÓž*[«Ė¶„ÅÉćĶyD¬±%(@hŻČ}ŸµĖK+e0²Įtd`¬*ąõā}7>ĘĢ>$oŲųšI1ĖÄŁ .VæŸŌ”‰G>,¼$“ھŸó|yGXœFa–ā8ÕIć4Œ²ČźĄ†g9ā——E>×&Å®nué–÷U»µ„"²žF €&{^¤üedo…¾<„Öōų” <7Z̜”!Ō2„~75-ό~Æģżæ‰øƒŽSs,-<ÖĮ@X-ķ!†ŁÉméÅīd¢µ}EŠf’/—ņ—7ŗjĘ× š/§šņų‘ |łåX|Éå«MZÉi©ŗ#ŗ1ei8Ėśž  Rå#RQ›ūÕć æ±œxH’Iµ 4DńvUā;RäcE›ū¦Å­ī5(Ųzv‚Ņz2‚k@Ecņä?gö’ŹĖ·ž6¬“Æ I¢}^ v ^ԟeaĒö¤ćĖ ¢Ó®Ā>Ÿk ©TäHˆ‡;ņhčĢæjI?ŗū/{§†Ļdš}²ĒŖŻČńæ5P§ŌVŽ~ Åb—ŒĘ$ŠFüeI#žk¹¶‘tų-ÜøHY„?»§"å@^ õQÄü\¾.\“—÷Ž[!JTX«uē"% |@=ā8łTéŹÉŽŠąĘ¼ˆ²Ę#žtÅ-xµ½Ģεi(©UDµxF§łQāŃŻFœ”ę )@: †ńõž“Ü’kįƏ'ĄóA­L— k[rģ6żäŹdž¼ŗļūY3†ÜC….=Œ°-JnOPi]ĖżÆł©ź—1\ˆn,š#">”«°`>Ń$~Ąøż•żŚÆņ±ōĖ©ZK—e¼ ,*¤Ė° ’x˜—łSŠIšņųWŠĶŃV7Icš(Érį–f™Ų3Ō±ųƒqžeżÓ~Āq|ZūO²ŗžĪ$ān-Æ'š4ä±I+E#o_…ŪŁ–Śö Y(–I$©3rŖżžž×.Xo£Ų42Ai$nŽÖ®±+R$æų’vĮzĻÖ[Ķe${ ›Wź³4vM($ŽĖ‘t?ärųŸü¬+óMŃt°¹”{­6uŻx¼¶Ćm÷÷ż¬(²ÓDś¦õ1"OVtĮ‡$õ™$¤Ÿäśņ·<0NŸ-āXŽÅ:z‰s 08Ø$Io H“ūd”üŸOj(§"!ń2Sr?xĀ’”§!^ĒüæņpĻXXąÖõŪR†@/a’ö‚z©Ę”*×oņqO J­«HŒCM%„Ä϶Ą\=«Ąńå\«‰XėVÉ9¬RC D”4ām@wޜB¦-co½Ž„Ŗń‚BčB‰P'¢Ø=«_ųLŽF5Ņ4Š5‡r8ŠžīÅeŪäa®H„€ĆhÓ(”7aE?vĮų!_öY¼£g ®½sD“Yä&SĖāhb½>Ó}ņ³Æym=Ö8æŗUŽ«Ę:ÜĻš’B 鬄qyLa™˜|TOŲ^<štąaŽF‘[į0‰"¢Œ»*Q›n??±ö~Ī µ†Fe†;"[‚I!Š2†9˜Ž7µ ųžޯņ V) woijļY"µ‘aJuW‡Õ•׍htž§ūóŸÅ–· ŅCiĪīYFRŅ؈ž=‡.\Sūj’É2·³ūXų%…5cX­īc­Ÿ*\Qć@8ČØY™>Ģ-æ'‰cų߃ ¶†Łķä·øi¤Ó¦Ubņ0icUPč¢f)ń[=7ž_‰’Ѥøś°››É­nC]•h%ą7!i*µķÄŌ/5\UŗŌt«›·ż¦„ž°—Ōeˆ%Ś’V°EƟf“4«’†š~Ætįāś5,œ%†Åi€ypY~9gE’—~MĖżnO3’!ņĢQ¼·WšŅ¼Ęy3µ@©Ē“7ģ'Ć’ö?xŲJXSV“fEēĻR- $qHu2“ ¾Ķź‹ž*L"…,n”µ»ø+K¢—.ģšY¢JÉGŪü¬“Xiz¬MĖkyet%39j½Œ‰*l7>¤\y­ˆI5†©IaumčY]$›&„„ø‰č(JŃŲ;’ĻO‡#¾pāŽĒźŠ²Į [Ā•$q¢Ž­ŗńĀUžiļ­õKcń0++5ZfBbį°čŃŪ;VŸ±žVŻPĆ} DāõP,n QÄńņõąŅ¹Äķm#’ŅöOL²„ė$›¶ ÷Ū®¼/ęŪÉ#+µŒĒn“…\żĀ•Ļ+Ā֞a1<”'Iųˆ;!ˆŲ®6śoBmY÷Ŗ"ļæĄQāJō§ĮƖ ņŌ“Żź4“-}{ÉŲ |rHџł—LäŌ i£[Ø£)ß©-e$=?Łaģ 6‡liVk–EiWE2®ß5ĒyF#7˜®g4Y¢Qįø¦’ė.uO+ʱhÜ«qéJć†ÕĖ®jū~’ÖõNlٳfĀKėrJŗ}¼r ÜN**•§¤’…]’Ż^iŲżć« M(éīgø†›’„ŖFX$1($uQN®ž‡Ē¬٦Ÿ¢ņ‘$o³ }.OÓüŗ—bGæ½nnAsnó\$³+Wœ×wKń|\$÷͐3hŗæ—umužŗgŸMŖĶ Ä[żŌūqd'„?ą[ž˜—źĶq“’[¬×- jTՒ&"Œx³HŹØæ3|xūÉf’_ZäĘŃžöZ—V‘*ś„Ŗ#OM#ōæc†J<¶öl 3+`—$PZ©ŖĘ†/ńża››ülˆńĒüĶct;°œmļ]ä“VųLÉ-8ĶÄģ=@‹Ä/Š©…4ŹØ•ŻˆQBµćTI>g“5>ĻƏ³ę ³””ŒzkČŠÆØ8mįĘ:Æ/ŁoOOPLHI( /ˊ™eäØÄ± ė$æźŖžĻ̹“%c(\1źT•†1OõWŸ_²ł7ņü"ŚĻGV6ø»ŠR¢¢FdĄĶr]elösÜ«3ŽÅ~Õŗ˜†yurČў‹jĖå_“œya­•”‰oõB¶Å¹śSčʇģ«V‡—&żŸņ¶ļW“žY+=™«"µfeŠŽ-ә åšóŁ_īń8õ¶Ļeeoé\IŅž ĄÉ;Š);QxŸŁįź~ļÓBkˆ‘ķ…”’{®„Ō,m$zŽ%®n„~Ÿd7¢¼æŌĘĮåĶ:,~‚¼œ5ģŠK(–2zRIĖ.7„W<>.8w¢ź:W闩杤2żrÆQDr?Ż^›€NGfŃÖūUŅÜŽŹĶi:Ą…õe†Ņ~0K!//ŻŖøUż®_ŁĀ­a¢#Ėī£u[rI £­ėÓłsImmõū`‘ØtG¢|?ßÅ)FŚ•`ńČžiY±Ktxšžé[šŹĘ‡‰-YK–’æ"?ąpH“X¬µŠ“&)58”-V#`^”ęį­ĄS4@VV,£W§Ž*Ė7ü³ĒÄ!lćøŌn&Žłż{[WŖE )rÄܒĄq-ÜŅ8HšY9|?\’u*Ō­fž(/¬"’xmdZ[\/&˜%޵żć"µ=5ų¹żæņ0zj>”;*ÉlV$ÓērÜŃczIõwŁ•?^įæ}čĒö$`Wń4.¶ÖšC-­Š1Ag|CĶź^I#h½‚·ĄeiYdżļ­'¤įVŻįmļ${“B$c42“ĢQš­ūćf4ęŹ¾£*³rG—Ē½™,cŽi“oG¶‰˜ Øćc(V’ĻvO‹ģal6āHšUxį”j%Q,‚%o³U—’~ŚĘ¼æāæå0š}98±mBįø…†I=PĄė™>Ū‹Eš.D÷W réĶf_ō‹cZ-øeį95@Ē~5YSą~8%­ęXŽņ9 å¬䶄ĒĀ¢±aūĪcÓ_KŌ’_ õgņoPF¶°/?P’K,‘TYx—ā’÷_¦­ĘGÉõ%Ō&€ŲZ–žˆq#³Yµ$Ž®Üłņż«śŌĒ÷w.­ÖQ!Õ£ŗ@(X׹UhŲ~ń‘x§ĆżēŲu§ŠŚę»’I%H™#‡Q ķrBŖØ‘iéśj8‡dU•92’æ1²9>„vŖm…cfHƒ*µC(øų¢_VŸ¼nwœÉūX¼ic‹fC VdˆĶČŌ-A*£É*µcUFā’æīŁ[Y§,„ķ®ÕUĢÖײśØdo‚yźŹœłĀ¼żOŽqN_ß'yse'§éŗéóĘ”c‘ˬ0½HEYōł ՚0’U•?yé³|8&ā’GXėUÕbÕ¦¶ čZŚ'§ńø’vQTn?dkӑ±O.˦ŅZĻnVēŅ’„"@(V%Hd^·ģŃ£ōžNO‹ ­C[Ė š2,Só67q'[ˆ÷x^ŠĖń3B[Õ_ōˆy·uØßK-Ō‚@¢XDUˆq‘ć U$˜ė»/©®} ^XŻÕRĄ†II0B‹<÷Ź)ś•`=“§–Ü ŽĖĀn?é^£zvK.°ó…†•\Čeøŗ ֏%Ưț3Ä#FYž³7”ŁżŚ.~aj2Kåm.Žü˜µYnščZ‰”-ų4kÉø(õExcn.ü¾ß§Ļ9čgSš’ā£n¢‡“<Ȳ38]čΊ(7ūRž{¶Lō+Ł.,­mÅ¢J÷Ҭ6vq<ȱ ćS: ĀKūŌćŹONĻĪ{Ņo<·h†©ia#+š‡w‚FųŚ“݊“’ œĪt‘!‰ß‹3ŠV‰żÖūSsĻqüė‹ŪFMŗ£æ.dn¼±$-;ņj’¾¹e¼ĪxGŖń(®Īć„CżŒHÆÓķb†.”1@„žå˜¢‚*b€” iöžM²px<¶(ˆ=n½ĄčDvņ© Ą2’“šžĘO_U†ŅÕRŌ†øz āAևŸBüŁÅš¾ēQ~|.¤`‘ŸH# U„px*%>*såūīŅ?O³„\Ĭ> H”+ Gģ;žģ|%Sö×毜|Ņ–ŚŌĢ÷FORHėTä !÷pĢßŽĒ—ÅüļöbćM=Ķä čU¦‰Į&÷•egqey¤ Éž/B(“‡90”n¶sÉgdTŪĒɅ»Ÿ·qF.T–?z“j”fį?°Ų_q ”·Öš@^"­;GK‰Ł½N }1õ¢…ųŹŅzR·Įép1–ś˜Ć q ŠŽÓ’Åh­ÅcT¬ŒŽ§5ų”pē|¦Š/ļ ‘]I{fž¤ŅŸRu†±C©ÄÆ YeY=^KžėōŸŸī÷r\b²Az’˜%ŃäŃ\‡ %(•&Ż”DéɹpśŹ4²ÉūĻWö“Õ®-͚»§Õ§…dć‰an ą±½AN|=EųækįE— &y¤žļŒ6ń)-³—Hy:–D`ŽOŽ5=GvOŒmĒ’˜#$°­­§¬¶Ž8ÖįŠ#p!Bņ‘§!čĖĘ8£…æj&_µ„³ĒčM-“nā9_“E•õW‘pÆ!dų„-~?õ’­§Ķn“š‚”¹Æy Ų­˜ŹåūLxH’źpʾoRe‰yGƜ`š?LO(ŒåzP¤1§ŲN)ū ‚~§–ܽ5’I¤.Ŗ#vbhLk-x–ų%ŗX׳>,d–Šś%.¤1ĖnžŒwE’ŃŹFåU"_ÖSĒ÷Šæ·Ēł¤FrGr‡--œÅżK …įˆ"Š4ž…Eßa'ķ}æƒÓų”øaõŗ¼~’pŌ-˜ĻÄvb®¼ 3z+öæŻqśŸß£l“J¢Ę+ø¦½_«,оœ¼e…ä~e#ū®m$搾,)m{up«%®£Nj°H«R ”ŗ€¾ÓÉ2"qēč’ŗżA1iąžśęn^`IPø+BQ”ćN‹ź¹įńAĮɑCߣ»Eńr!n&>Hß PbhŲé ¹e${i½N\qżh\Ķ©vē²ÉØŃZkpĄ>Ū<гįépu0K+»[qyo*4qÖX®mėÄ+€Y–*Ū}fÖ¼_ūČ}OŒm®»k%ąŗ(±­į÷šrÓ¼E&©!dä«Į$ūN¾Ść*`}f9¤”OźžķŹĆs cÅŅHżky)5•×ÕµF!däīŸķ¤ÉoĪJ܇Hī.šĘ‹ bdõFš†ŻŽ’óDķéśr+ė1I©-“–MĶöĶy»ÜLQwIer_ŽŻāHßMĀL5Õ4 [Ķa.2]²YhņH^häō¢bĖ: :ńx¦ōē‰ł|ģņ‹ŻyE&ŅŚłmeÓÆexģĖV2Ń?¬Ēė õŚŚugųśk#&) sĶ»żaU¢X% ›”qšøefåÅæÉēš|9×’'<µnIó¢ąµø1X<Ō«HŖŖĢ …ažī5’~;żœłš€Żčs§Ć ŚÜF8Š}DjSµć\ę,«čČĖƼP-6«*:’3ü_ź~Ī uŒ;*š#K•¤!^5Śč¬ņ7ł^Ÿū·®f<;• ŒYB++’`żćĒ=G0?¹^½ż¦ųW$ZTs }%r’[;Ö¼ƒ²¼„¼>&y™~ףż¬½¾£RRņ ;f»K7„ åÉŚ1Ļ£Q¾%ū|?ŹÄÜN’Ž$ōuPÖ±¼{?¼2ĪYøn¼>?ģś•č+Ņ)ӒвŃŌSqN|Økʍ’&åų$ZxŻ™]“½M[}‰bJæ]ééŖ’:Iū¬ÜŻŻņ»EzÉzĘgzTņœlæš³•ĒĄ…ø²MĄ–@Ō*“œ<”G’š±M.ĀŹ Oŗ`Ķ,o4 4C„°°OŻ…ZqŽ?µö~ĒĆöp”š„­¾½Ą’āāKkY­£c$Ęu‘bˆŖŽlx/īŌ¶~b):“‘"ņ-c ©’D ©ž\,°.o`Ō/84[Ū•jü\ŚAØų*Č#oęÅthY®"ky >"8ęj|ż]°£u-½ŻµŹ Gõ©ai„Õę?z“ļ"øMVwB\Ę †ebiĘktVŚ›~šóĆX¦¬P#' du R§Ń5Zż¤ųųÆ—Ē÷ŚT˲ĄbˆWj+5į²CäųŌy®~ J,Äõ„¬­æĖŌ\äRWō0aö£µØ?iEį‡ö¤›IĀ‘Ę=J1ZšÕäŒūq †ŽNeO1ß§NP¹'§[ÉüϹ6Ń]4”¢ń_MZöŽ åļÓ53’ŃõNlٳfĄ·öĶ",±H!ŗŠ¦˜T ŅŖā«Ź7 äµ’+ķŖ6ŗÖ$KˆķYā‚åŌA¹39§ÄŠ·ĆŹ8«ńæćžķōWćČmķŸé“¬ŠæX +«Øh ‚XHĄPĒ ȏš?Ēß&Āv°³™Ń®dtˆUWÖoVŽGéĘ)Ybzæģ-Ć;Hæīž%ÜĒÓµõLlčäÖ¦5ę“§ķIY~׌vżęŻ‹›³§BѤsĶ\»)¢ž–VR[—5Ž7óŗŹ.VüIn«3¬B6VŖ¼mRA+Ń£uų¹}ƇģšČö¢VTHĮåpņś²p@¤š§UZy¾'Æ9=y½%įčį[Ń--ą+6Ę¢åŅ8dU~%y•y«3d·H„Ō÷Ü«ĒhģąŹóÄši¶’s$Ń“ +æĄŚ[“#4†^DKsėÜśæŻĘņĘˊ[›­"Ž1kŠ5Ģl¶öóæ6€ÅÕZ2nƒĒ A”øõ^iÓ÷¾šž¬ 0Q’99Z°_Ehh ĘWÓę¬9¤„_Œkž‹gs’2}D[Is‘„“L¶•Vī1ŹD@€©X™U"‘ųŖ%ųżw“ģücn­nm‘ä·įqhæ †Ū¹#÷SÉš”GźźØ•XžSö½OļpžĘö [(^Ę"@DøpL€Ö¬8ƾ„[ķ

    4w©]Ś'«y=Ŗjæ]¹sŹ#2p×€KJĻ'Ćk ?i·2G‘Ÿ0łM¼Éęe†MZuš¼­on\*†:«z±ŗŁøüKĝvHµ N]*Ņ“¶"‹%åX ĮdH£1ČŹ¬ĻźÆŚäłĶ;'·˜hÖ1Ȳ;zҵ8~ķ"“ Są,Ü[–rÄųLp źjY…hõ*¤ÓcĮäćü¬Ńā²<ŁJˆ@ā+ČØRżU·Œ/óz“—š«,r}Y!÷Ó5y¦I hŽ_.ä^ Ó£nsŻsUŒš·µä­AŠr’Įä×@€OŖYGĢGoė*Ēź)r¢;iŠ(?`L—įL•jh2^æ÷¼ćVx–g| ¤ŖŽœj\žkŹŽżÆ[F–q š¤“vŠž°½X·õų~?Ė‚ō»mFķ$±Z¬ĄlAq«……‹§ŚFt’+Ļk$m%µ¢ŽŒ„–ćŌ? %”ŪgX’Łįėŗ•ŖÅFČ~0KN’+rnü Ū .#UŌø7^ó”4„Ō?!\+k…:]ĆFŒ.īGՕ8•tŽį>Ŗ)gVbC|rKƒ|„©EØF$ž¤Q^Ā-™•A*Ń#²ķ;U?Čžl%ó %ߙRt&­gm"SØ? ضGZÉ%°ŠĶ  ”ÓBĖ! –y×ķ}Ʊø@–Z“qŽ/Qh*ŠŅŌlw|¾,s[Ćmv· źCĮ4~4–Ī-·ł9škęū›yIo®«Ī„ŗ©Ž7u½hƒė63Ļ©y|$[‰Ų·Xä+ķVųpVҦš@­2K œ’¤T–TžĶp׏R…ó…ńn‚fg§] AŪäp?‘]«¢H —ąCķį’k }_PT¼·`½÷r†ņ⵿œoćSź±RŸ©$‡É֑NyWā”ģ ü)žOŽƒC——SŸ’ŅõNlŁ»fĢH§ ļļ$dSā¬IvUā ü›öc—u$kÕ)0Y „2D“P§—pŹ~æ³'7nļ?7’EČŌ¶z„W[ZŽzń')'·»‚}Fi(.»,L9ĢĘDŸŸ%Ya{Ž Žė§O‰#žŽXn¤ä„HFćß uX‡ĆĒŌ_ŪOV?ą-•hųpōķŚ…aCū„īR^椫é7/¶įĢ·r¶øSf€™õ‚•juś°Au§[—ż×ģEõµise黨’D4%ˆ%ēbhń×o‡öÕU}$ĀMVšÜ¹xˆ¹¾ "†Jz±‘Č-g óNnžŒ1[r½NܾÖ&…įš@ee tp³K%M-ķµ`„QšéżOVNMėM+æī•žv·Q 1¬±!‘ĢŁŁFµEŖØy®$^QGZo³źCs#Ł££]_Ļ,–ÓIŽēPœ¤’†1$*œŅ"ÄXbõąHāO…}j’ęņų}F/R*HXM.%pŖŹyUR6,«Én!·D_ļn¦gōĀÜÉy¦Ķ,1:InØa¹“ڌ[į++ńEFzŸŻĖéÉ*śŠæĆūÉ·>„Ą’ŹAÄ'żē™L‘Fī”Gsńżb[ąGż–ųZ,ä¾£A§_3Ę¢4E!€$s*į}4’Å Ģæ¼O7ļ0£,w+,w±«ß$E¢kPßWX™Ęń>­ĆLŹßŁēöeƒ÷ÜĆÅ„ŹMØĖėDĄ“sĘZ)U żė9^=9EĪOµńʜ¾Vį^ĀŽ3="Óą’’ÜD}וA_‡Ōz}Ŗ·ŁFēšóĖŅŖ÷IqŖĢ·SæĆcdq:—O@…X”åĮ"o‹ƒā——I¹hĖŲ[Īx<²’)ę6T,wųł¾•ż6åĖ“OØĖŹŃ9z(•œņ ń#Ź$v…ҵ_FĀ%ćĻ÷ ąŪÆ©Z˜ÓT+#]+²‹e)p¤–$zl ’Ÿ‰½9}i’zĶ'ĆĻhuW•…ŖČė«żbŖ.ƒŠ„‹ż›ū?¼ƒć•> °ŠĢĻ+’¤^±W”„yc%2°+wlŖ>ĻQ[ķřœ:ŹĻi;…į×6Ņ”·›€ū¹øņ›ƒę’G,’c¶Žn.œH#śÆīš 8š$ƒz‘©’X‚•ų_ƒśŖŹæŽ*#=¢ŖĶ²F,hD–²;$ń¬„ŽP7Ā…%ćźzsGģńćžėZkÅŅÓԊīHį™x‰\§0ąńų£‘„1Ó쬨·iĒū¹aÄķīt ɔZĆ^9āź€[,ŠE%YcT Ą“ū”–.?īæWāŵhī!Šī ™ÄQÖŸ›°ұ«Ģ°I"WˆS$n}ÆUSš6Wiõ6ŸhŠĒHnÆ`ØxĄ Īi#RG_Sƒqż®Ə0O”246‘ø­ZxLŹŖNõD†y$T'öY%wÄtJ{6¼½†Vž b¢ęėźėĢUŪrœXÖ²KõÆŁ‰=I$uE+JQߓ4Ó$±ś›G$Õ)Œ4Ÿ»Æļéüæģ° F74u “ŅZW–ą×~+(XŸżFć‚K½ G(ĄM6‘ˆ4?°*ßóĻ/¤Ź!RŃŪĀ”ŠŽ2TƒæĀ’ź£äóȱIqŖé)s¹‰ęŃ˜'»4«×ö2}-Õå¤q][(½J©¼@žiš“¼EׄUdVćö‘ydwPŅ…¼ŠŃ\ȒÕÕk³r‘#xįjņ¢| ’H‰ö†Yźp­µn#3†PŠ“H;в# žW’‚ūX„<ż>qKKH¢GfeQńQĖ­ĒŁ¬qHŹæ«‘é,ī%×n©8K;ÕKbEL«(»‘Dˆ«EG~\¾.J™zt׌–ž>ŗÆou5“ˆœjdŖ ż‘YOū%ÅVŚ[-:{»Ł=(¾±,Æ)ØCH$ūl؏‰A¢łSµż' ŌšŚŪÉ(mŪźŃ,°YÄQ‰ōÖM” N/é’/Åńadq˜šĶZś¤’ÄG|ĖSJ’h0=šUąj?£.¾ƒé\ŠTž#ˆ]£æé[qöēµ­wų¦Š={~épMŗ9“lŠl“övżŸ©ĘŖg÷]ŹĆmZŹ&óxP4’[]*P“m—o¤÷Ę$Ō|²ĶöZŽłA÷ä=’— "RöŗŒny½¤°Ø=©ź*Ÿųgėƒ<°6_IŌś„ļWŠ1ßnųĖņ m3J”ü<`³V ’撍_%m@śÄn8¬oiÄ’©Xżķ\2¶UƒĻCĶl³0­ AoO¾FÉż’qIŽFf§ozSśą¬¾ŁUĢ3’ÓõNlٳb3–vØ&„•?ē’6į}å›NL#K † wł.Ćąū-žģ[Ÿ±…RŹef†Õ}f—.:ućȓČŪØ}Eųx"Ėžņ޽ÆÖ%±xź­U”4\āÆĆĒYåĪß½ō”——9ä¼ōŁČ†Ÿ jI–ŽĄÜM!ŻM Z¤<ćT€“ž”°ĘĶÅ8Æ>TÖ¢k±%ŌhØ,v惐iJŹä’e’2±Åńrõ¾ĄZĢ $’Ž=Ņ!!ųŹō#“X•æŻŸ Æü“hėŽ_jMéCžE§9Ų9µŠ“ U!d”ŗŃø°T•}NhŃ+½ģ.£‘-¢v’åęžł¾×%ŒÖ5įøė?ū¦?ŻEö›ƒÜDח6ÖĢķ%²,S ­$£—ÅĒ‹;qįéĆÅš·ĘńĘß ļ%‹Nµõ® ÉØH$[4‰Q„lcäņ%xEĶU÷ņp‰~Ģp"G)4śdwB3xŌŖ4֐YŌŗ­jLŽeŖ’\Ėżā·īž§ ózš³‚8¹*Xqh“MАŻHŌci#UųT½œ_gŌk‰~ĪKXšz„Ėi·\ƒN¶„Å+)žī(ŅO…ķč~8ķćżū~óŌŁAķīģŚB­krĄŖ/¤ 4VøØōĖqfŠ%õ£nīæšLsĒe„¶—õ¾¶˜¹HZٌõ!k4ĮG ‡)=4į7ļ?ÜÆd66šGėĘļ„,Ķ$nĮ@«JņĀ™¦AńĢŃ£"§8U—Zéš5–®~“ˆŖEČĄ1Ŗ%Ź–OLŽ_Ĝø~ķ™R0 3Gõ{ÆT“1FP`^Rs@Ó„j~Ź<ž¬~ÄkĮ}&Š}f#4p¬(Rź_īÉ5Z»Ģ”ęU\]Ų‘Zźś:dinK”=I®},Ä}‡åüƜÓó‚wż#§M idH„hY[‘14JŌf’/ģ·ŚČLöéĘĪĪ1É~ܼv¶Ńш®ß¼c"ÆÅń|?źąhĀ‹I$uåź2˜Oó,uD®äwfW’Yxżœ§Į%ĶŹD RyžfQøzqŌŌńųĖ’‚¢†5¶RHtfę„1*hˆßÜRU_ęh•ņył{ ©u$óyŒ2ųd2”†‡Ņ*ŹōƒķdĪ搑¢²ø[hŠ€ĖĻ/zšųĆĘÄļ°_ŚĄ–:«\E6±~]ž®ÖüH[~‹!’½™jæó~Ī;U²HØšĖ)3¬Ó<ҚĀ…„?Ł'üŽ9ÖžŠœØģ7SžWžjÜÅž§ķdGĪw[7©o's’Ćr żnE©«tsW“­ƒ,µuf·žłÅZIąŖŌU”čÆĄģQS¦øóÕü¹ś*P°ŻßŪÄń«t2\ āGN@ ‰‹mńbšõ¶­såV ęŠĶBņĪ;gõŒ „øbĀ®”Z6åš’Āą]RÉ­5;«/PŹĪgŽJq#×½–EZTŃV¼ ¬nŠĘC? YÕ·%L·(h{yšÖ8Žźķˆ5¶²‡“ŚōƒŪ~逮$6ŚVŸŅO¦YƒÄTń†RM+²š<°]ö¬oįŃoķÉD¶ć0$ÅD‰-?•¢fųN?LøśÄŚ%Ė%½·*zü27†#bŹömvÆī‘Pwā“)8/E‰5(¶ōĶd  «ņO G/šŻ›©”Y‘J £Gšs)ÉåÜ¢Y/¶ŻŚ­Ė² ĘæC`²¼Ó␠Ū"‘ŗKƒCž«ŻBĊMH§©­7ÅŽXĶCŸ’ŌõHĶ›6aŒFŹcrVŲ©Üļ…Śõ½¼%eō#B󳲤IóHOĀ‘Š~ߌ_²²äkӗRY^tkm)ĻVŠ{žTžņ§Ō†īŽ_X•8żeā>­ -vżŒq,6ÖjŖŖŃāēnŪÆĮQ}YxDæÜ¶*¤,bXŠØa“’WbõÆ¢†Œī z’/÷ŸüŚŽ”©H¶ °ÓŽ§q"FģĒD'ł-Į™æ”“čÖöӛx§w¹"“ŽČ}GTF Yj=?TŸ†ŠžŒmžėųdŌ{Ø­¤[5c,gįŠ.RČ9Q‹Vf‘ĖóiåoŚõ„uäžØ fE† śjÆéĢ’*ń.ŹŖČ2žggTżäŸhßj\/{›«8'ŗŌ„kHĮܤj]½BXƦ]½7•õÓųž÷Ō\ƒYĆrÅī¹JóNVE{‚­kT` ŒŻßŅq‹ÕUįĮĮé„W‹!²,ÜTśšœŒéoȑĻģ²=ĖQxń^6éńüžŠTŒĮ2‹y¢Ń„Wœz¢šÄ Ŗ$N)Éu$Aeś²z?å2£"²3Ćõ‹¶YäøäśŻō!HXeųz^§Ē"ń_K£ÅŽW€Ķl­ÖŹ==§ÓŃĖKkpXĖ' ą“) <™¹z’ĖĮåŠ.HÅz–£Ļ«[jē÷fF'œŸh³¼rœ~O“s@‹q4¬ŲB-žQź-$ŽVT",TuęŅ[,æļĘĚ³†"’ŠķÉ-•¢åjWÓ„99¬©Õćø‹Ÿķ3ņ“.Qżf÷GOBœL²¬¤&Ā‘ĘZO…¾Uhמ*ū? ­ĪŸØ,Qæ«,¤F~S+ę2¶į œ˜ß²7ūµyz™R¶ž7ļ¬õ6c#ō¦¶õAcÅĻ«čGBķóeų~Ę%)’å涊Īó³ōø Ź…‰¢›†R~%Oud䜰E­®³GŽŚs§Ā§”)¼„K1 ÓOǚ±(hā?‹āćé¤x3J“Õm#–d×(9\H¤“ņ32Ŗ‰&yc~„x’­š’õÓu©„Žy ·BxpXT#šņ䮜7 öćn?cŪÄoPˆˆnu; U˜€E€ ū>“?ī‡Š"Æ%ž|/’śŹkŗIskõŠØ3Ū«ŁHõ xŒŃ9ßu<•džS;hµ+ÄM:^Ü?"¬Ó4SÉO„2Ė – ćAöU'ųYæg–]¬–2EsH¶!$õ$²»4¹øøŲŅDŒ/؜Õ_ӇūĘDI=ćį”ó^ŪBO"“†ćҐ]n²ī$õ—ĘÖ?ņųį]µ«Ė ­z÷—T*Ūŗj—œp^Ś*ēžN?ĢŲ%ķĮ˜£ l–Ii3¤µšI©I®9'ø’Š­ U_äćńįŽ†¦ė “źw­M6Ą©ži*܊q•œAh/­#vć'/ŚįŌü”½–t·Ō$ŸP† ©d)ŠŌC²~ķ*cƒČß“¼ł`żBķWÕŪĮ,ęźXšĢÄ»²Ŗ1ćŒ~Ē2iYs–~dŪ;źvw³ō8dŽV™Ż’óÓsĢŖÖ±<}9*šūYBd·ø„=yĢv¼™…UŠ–˜PаV•‹ž_„öń÷ŽIä„H#IÅOīŃ8–”ćńpOŒæ8|8¾›Ø[ŪCs4Ņ„žļxćņŽ">  żŸŚ tk)µT†ŚĪŽiķ£^&åAŠ 9įżäŸ“—n?Ŗœ›:.§z4ļr}Y56²)ˆ~ļŸū„ä“ūĻŪōæŁdšŅń!_NK5ęÄÕ¤UE;„¤łįmżöœ%–Ņżm–‹*±ÄŪ’»T™«ū?ŁAhaS äņX­W~{֊¾¤ėzłIõMB8HAU „­XՇü»ó’ŒxMę­0]Ļyr¦IŁUޤņv~Õ §«ß üņ‚[ß.31I%h݊ģ‡ GzdsNõ¢ĘGäöŗšŪ©®É‚õÕFĄq©|7ó$7ŗ4ėĖi-@ŗō䐒c•fõ„,¤?ćŁ9 ū/†šßÉ­\Ė£tŗM£Ļ_Ng»<÷éU/€ü±!3A ĆY2†=>+×ŲaøR×<–KyeA^Œdˆõļ…—E¬Vœ½="ųšƒÄ4rI_n{aG—¦’āĀŽÉ—ŠÅ GČy L3!§ł<°žĪŽx“ż=MžmA×}Į’ē˜#żƒŒNĮ£6žqˆÄO ÜGCE ~ž8'C‹Ÿę¤¤[N»=)ĻfĄz<ĶåHT”-õ{&P{²ĮįČ äšŃLÆQöĢüų¤NcG(šžĘ׿&ÉŻ‡$ųļN§ZÆ šŖń öĒåķÓ6Ł’ÕõMsfĶ”H Į¹ļ¹;Ž?~F.ÅŽ§79c­¼-ŹŹŌQƒH¦‚āB¤†§ĀaJžėį›āŸŠā–Æ©A„E4jVēP9$``š!ei䓱†.+Éųü?a,v ²Iv{Ć#:ÄÄ3I7Ū,hEX;R1ÅÉc×āvr¤}FHm€Ž‘ #~ ÄrOłx’+÷iæ /¬­t¶¹µŅāBĮ€14‹O÷Pź‘’hÆUg’użÆY‰Õ53Žu–ėxĄųE²J§åRYŃ™-Ńxą'’ 2Qk£Ū$čd¹¾˜± *O)]æy)byońČܾ%ūqšŹŹ aōŪėŚµÄ”…Ģ’¼:·ցxƼ‚Ŗ¬qņwżÜ…×wń5ź#Ģe‘$õ’sĀI\!?Ä{-Å`FżŚ~ń’}źLZͩȢĮV(^Fõ¢rŠqČ#¹1žh’8~±'ļ8HÉżäĀ„»KRė]ŒĢ„ł[ȌM¼Ž>ĀGōų’æ×ų!FOŽżœVęxĮõ)TóćčYBĢ E ŗ³²R^.„”#'?Kł"’⣣»”š[]åŽī6Q(”,ŅĢcćźqūIĄIõ²œ¾Ņ¦EÅćÉ<¤ŗe=7™źüUaéTvXż^,œ}nj5ÜQŻĖy{ %Eœq‡œĒBIZIM!f’UFI[łø·$dY]ŚęÖh·Ä]ØhH§ĘécĄnš‹āõdfÄ&c¬RBzq“öü吐8™e7E9±O‰"X~ŹżcąĮöĖgoh÷q!Y$be–FŖ³WŠ©‘ŻżDä;śéĖ˜ ˜,QĀX‰טzp«:“' V5gÜ|p·īøś<ł¢ēR…>° ė*ąz±e'›øB‰?ģžn®’7Śhß÷xšÉ6„'Õõćøŗ$·i±Bō‘ČVf_¶ĪģņwŠ]^ņŠ8® ŗ[]$TH„.yŃEaV5PĻŹG’6OīqJĘȱŸHō®Æ £5„p­ÕTõi—ŗŠī§Ūō’cŁé7A½YcŠk…Oˆ¤PŖčwĪÜwųyĄńųq{āH–ÖźĶ¾ʐ aą‹*ZDĆsY9ȍū|Ÿ %Ó4õ•=M>chü„Ņ‹A#5([ė2¼ß Ž?aQŸŸņ`ū]67•VĖNÓacÕ[ µÜŌ±…Ŗ(ßV?‡"¼µ™į‰GĘ»³†Ż!UcMŃ\Sž,›‹3r& r>·d#7w@ o¦«Ü]Čf4ųæ_\ż4ų#^Y=ņōPYh:8¼ąŠŠ¬&i#Ž_«’ĀßąfFj Fpķ6 »²“ŠįŽ>7SŸ†Y„%„ųw bå”o²ē;üŃ.“ou²[Ėep.ž2VZ”P‘ņ'“rć!䞟§ŸĆŹ2Ž\pŠuUˆHØ8‡Õä»u!Ūżśø”’ĢG“cS½wÆöc”nKńS©ćÉ~’p×M¼¹i ­•¼××7*Ė6Ė7Ŗ¤P†‹‰wä“§$›'6Śī­¦YOm¬³ŚßCi-ŹÅH‚1tRD*d~"%āŅžĖ«æļ0E§›a71,r=Ä3Ļ29eY”g„ĆŠ™•[÷€ńOņ~r¶’ĻŌu{H㼑""³€ ežŽæŹxš3[ĀŅ­$‘£ųå™L•QŁ9±CÅ»1xSżś™‘¦1Y•ī›ģ’Y„öŲ mšüÅ’1=VvŠęŃø“źź’E6Ę”x–jĄóDS„Žmuś¶“/%õ"µøŪ†0¢ŠW½ām•„ʋm| S\ź³ÉpY€y©ŠĒ-[›•ŪŠ’ŗłæģį÷˜l Ūh7kcotd’C@R7 iž“†ųlw™’‰/ä#į}>E6’{*:dkE‰!žÓ‰ę€Øā÷S˽6ź”’[ gu†ā’˜Zµœē¦ÜŒŃu’€ĀMMęŠĖŌQĘAc|NJÉŚŸi~!¶“O©ŁÜŽć„ōē²š‘ £w’uѲW2ˆ4Ż!ČØ[™ō’vų†č:lŸó²kõš°åü¢)ĄüW ģŅÕ¤ŗrø`å€ėG•žĮp‡ 65ćTHŌ $A ’Į.H4H;ųc̄ӕTŒ/҈[%:>›"8¢žń¹*’–„–PǧYȱ0i%ų®Ń$’B)źæĀ8Šqąy4p§ĆHŽ›9UčEŽ[‹‰=c¼iZ¢õę­ŗ ųÄßkāõł~ž ›T’ō Ā2XV‹$‡ØkQÅkź\?VE_Ż"z$­',źß\Œ‚%¹Zµ—“¤‚Hg“Ÿ„Šņų#vćżÜsńē…³_Ķ,© r½æšFŪ6pÆ#‡rĆf§4’ žī>9Mke`‹{©Ģ÷3Čß»^!TȤ•bŻa‚W÷ÆżĀz~¬Žæ7ņ^OØĶõX^!²¤—ÆH–(ä/$„KnµHćXš.HŖŽ¢qž÷iz.5o¦÷6„Ø@@wSūōā8¹ō¢’yāžļ­ź/bņZ۟¬jsĒū»h˜¤vցjd™‡“ü_µ,¼¾ ~ǦŹĀTqurPÕYd]ÉUµµ ”Ž1±Ž(Š}ؑ}v^ŻĆĖ‚pŲŚŚ«ŻŹ­ĀQe6čŖ”ŖŸM#>¤fi8,4īüęęééā u­ŻŠźĻœ¼¤W*K ”*U½Hų’/؟µĒģÉ;ėŪG¼‘“ŹZŪĀ ^ÜÄN1•,$x—ūŁK|^§Ś_³'?µ†š¦‹u`ž­¤Ķ4ČØņK2(·̹<Łi·īꍳ?c ī,/'‚S„Ē4qæ&—Sgx£) ”Ę+ź,Ō2Éérųł4ŸiGh÷pÉ ĀZŪÉkw „ĀČŽūՌG“Gķ•ų¾Ļģ|!u¢IżOFGié²"Ę ¬$eGć,JÜW‹DÜæcģ`+)äTG,lć1Äį ‰ 5–Ņļ€-¹žī_ŚćÉłńĮrYĀ—1¤¶wVr³Ņ;ūXŽÖŽ‚¬Äs‰Püø¤ŸšĖˆ^Ę×A­cž{ķ2 גˆJ?RM¼ę/Qƒ ¶n\?ŻHų¬væX…~ŖÆn¬­f²FŹęØŹ¾˜eUšāV³é|ĖŁ+n”mÕBZ2Q`Sžü“žÆŚ‹ćå‚#D\G2Ū†!ŠYõ 5>'ŗœy“†8Ż’Ż_q`ĖxBF·/ųö·@ķ+±1ƒÖjrzo3qųVO¬ņūl"e…eK‹ÓźÆuYޱ‰‚ŽTpćĒ™vetć'ķæĆéXلΠ#³ø±Ē×iEŽCJ3äą4ßlæØŸ /ŁĪ‰­¼q¬ž²Ę 1†$JJ6ØØųlMcT~_¼Eż —MźĘpŻ›”‘i·Ęјҿģs‰žhjĶuę²ŠYR$ōdŠY( ”$’åųÉö™jx?>_ixdT}xĘW—$VV1JŌØ4aĢ2ń@Ü~ßķ’­‹Cm1eŪ1PG0m$q_µ.Ē·ę’TbŚŻ$ŌkhˆŖ•³yÖ¾æ£ń|“żWż¬1“·F¬–ʰ£BE¼qļøõ)$Æķ|iń.kķ§ĮZ~šWźI#I·¤ZI£I#ĘĶüüR?‡‚’±āÖśńÓźŹŃĵnU™ £1^#ąóįĪ›Øy£Q‘4żµ+ŠĀMµ†<ą!ęVF™"ŲŌż©>µ'ĒĒgēļ¬Ļlŗuä÷1Žįī ¾“€L’$](ņ~Ö8čR[Kę?2~€ŠQX­ćāóĒŪ¤śJ޵_µüßk%63Ćt‰čÉ#Į%Ō“Å4£‹ŗI}³2ö'r;õSęO/Éo2›{«[wh%<ˆŒ, ‡ Æ©+ń6³QmØéV1ĘR9g²½XA%TŻi÷ '¹,ßågB.²él€rYeˆ)Ū©łČøĢN[\¼pjFoß}īמjČÜѵ“‚*”I%·ž'ōneāz}†uĆ-dmrƼŽHą5žYaYĒėÄZ_^X@ąµ³Gumrąv‘Į%Æ™©€īō»Öņ®§i3Ė}©[„·AĢÅmg©§÷°øl“iöRĶ”éÉ:^µK€¦”dŠibz6ܾ1¶;˱¬ŗt÷AKr†ü—Õ–55’T tkIŠ€²E •ŲW“ŹÄą_,G/Ō½'ūhDÜc·%žXƒ÷¾±§WW$Ux˜ oįńI’ųPT¤§n‹÷ą…-Ź·;1ł[³q’×õH͚™³oLrĢį•$*ūĪāń j’Į«„Ęā•·DM%„BŖģx·‹žÓĆr’v—_z0H³³U@‘GRECĮĮ#1ųXž_µš·ļ#źdÅ.u>|d­•‘ų 2Š*R·%9†1ż•õ(ųıƒhµ+õ7$Ū/ŁDŲJ«Zpӂæµ3æ÷~¤ß,Hߣ}]浉~»} ak` ŽÖ1]å™@_UV¼¤õ9/?÷_/ļ·µ°“g°……åķ̇ės²†ē"®ķŌR!Å8ŸŻĄŽœ_³Ē*-$Ēu ”Yu-ŚI‹Į j?vXq,±U#Ž?‹ÓTųžä§Õ¬‰Åāk‚¢OL€Ģ°3HģĻ$Š>>g‘<š^\[ ®®¦¾q ¢Éåy< ń”p¬c!½> žŁg~/†į¹š ØŚkµ¦¦`č÷KĢU‹#^É0Ck'4·“‹r“‡(qg{‰.%‰~«õ£ŽįžŽWI)b…§‡¤³žķ}i&į髿<©Ž›Hі8®.e+•»/A`¾«Ē?JŻXÆīƒrtōżYdgżÓįҦŠƒS»’wrĢńÆĀ)VÜĒŲSżÖĪéūæ‡‚Ēš$†X¬.ēk‰m„Ō„w‚(€[‚¤|­øP*9š‹ł‘>,_ĢsY¤‹sØÜŹ×R0ŠS s ·(œ¼k#Ęååły¶ ŅnįšŹźĪś9ģŃ”°GBI‡Æw$ęÕū4_S÷ĖĆķŌ“6Õ!hāŗž2źåQźF’Ö‹ ¾ÆØß"Ęīü~×ū­°†(uxe ×÷(”āŒėĶK3*Ē(õ%Š4§Ł“ķrvēÉp]Å®§jāŽźŻ(Įe1µ½Ä.(ą4Ė4<{™ß‡ĀŹ­…“y ý”H漑’¦ŒUeNTN-ń:GūLجœy‰­¬0Bd—ź[mÜB±™üeVŻķ˜³©ö“|?TV‹<’¹µ”ń<žyŁ•\žŠ±Ü—i\Wn_ŗ~?kŽ#-¶g†Ił™ž«Ū‹kumčTIĀ’*׃3rżÆ[ž:9õęҦ(ęEjVIĖj9Gxźk²ń·Y~õćĈ¬z“^%UĢ €My'ŖR8mՎÜŻŸķ«ü8¤:5ü—%å…U÷ >µ1®ü{žKź÷d*ˆœŻ_ĖSfśõüŸ f¹’M÷TsĶän$n|±‹5õŌ¬©ś›!E&~ž,xh¾§ec,3ÆŲś¼ŸÉkb„ÅØĪ××÷©eUą+ö_ŠB±ÓoŽĻp’ģIöŸ.«utńƧC ‡dõ\Į$,Übõ$ģŪ/§Ć÷kėüXqœŹĶĪį®īÉų®d V”ć ŗJ(č+>j¼]żƒŽĀ¢Ä…‹īĪO&~ß¶ļÄ~ĒŲ^pzkÓ¬Ö5śÜ”ydAŖŅ4?¢æÄS”%Y¤~Q·Ąœł‰$¶²TĮtBÜH±±EˆĘŠ¢„šŠ.!xĒšæŪ’v2d„.X³Č÷Goȱ•“` ĆNH(ķ’=—¼×, «õ‹ä–W?»e™cG’ˆvjxüyĒæ3­š8^YĒ)Š!#Ō Ķöań¢,ؼ›—Ąæir;a’‹*†åĀܕ!ŗW Sztn?Ųåƒ ³² !²1zŸRNʦ„×”b6^,½›²X/Ą°[!ÜČĻ4Ņ) ō*Ÿ]×v’+[€„į0ċ¹•cHTie +ķÄc‘dš?¬Ż-ĶŚFhAÆ§Šä-ʟꪒ­‚ķ5mÕ&õ¼æܲÄVŻ„ŗ˜¤lŻ$hŠ‚ī»ü<ā’WMröõķ%7(”Ų‡‚Åī¬'Ų»rżœ4]WĻś¼<ŪWŌĢ3:Ļs|ńAW ¢;øåįé§?õqKOĖė™#id•Ąoµ"ÄŠBOzĻr#v¹$|Y4õ—N±Ž@B­“ƒR¤7(zŠV¼¼0ŸĖjēSÕc™ƒŚĮe$7V†²ÄŅA·CHćdc—uQęp߇Jf'ŚÖäæüLłįļ<¢z„–Kˆ×⩨FH©’)qšĀacij'ŅŠƒŌ‘Ü[ų,š-Åͤ†”Ž(Åj>HSķöF ózQ^­A]Ł­|Y¬rßÄ®‚ĪņĀā). „ɇ•Ń– Ņ”·ś8ķPOüՒø‹šZz Q+ν@®ūSs÷öĒķ›6ł’ŠõAĖĶ›50¾Ifõ08švb_¦§—ģżÆņŠHD‘Ę„@e¦ßiA5ų›§/ņTõ¹dc\Žu¹xĆ«ŹMG2ÜwčĢvärV³š£3į=½¤vņ5ё§»xż7øjāß*ED`*ʜSöŸ—ĘųęŗH¢$¢—`L1 …UŪ“SӉā’gū?Ž~Ōj”–Ē’I4× ƽķį %tķKö­ķÖæ Ž·ķńvnN…,ķ$X­#EœĘ‹ ¢Į½9xo]žÓ·ģŖÆī—¹žŽŚ,É ūÉ6„w;ž¬ŪW¦Dļfż#sĒ# š£¬OꮄŒ¦±‰–ÜńųKŽ’Ę?ŽMkjmƒÜŹĖii~˜ˆnģŠ933“Ō“ń*ņåĮ>6Eųе7fÖŽ RüW7“‰F%Ÿ5iTóY”lßjDåšiŗsŽŁ%åæ+cpßX“Qćˆ v¤Ć¬ņ'6ćū©yńD{źKo5Ÿ ×i"–KŲ)åtpģZžŖ(@)ūŁ`Š6oN(¾Å5 Ę­"„Ē5Ū4ub*æ’:Š«öUU›ģš^Žb–¶•eoP„Dä­) ! ”s° µ8qōų®¾–ĪI!žįŅÖĶ~$ø~k,ę•Ę3:±dųxsń»S‘–“sÜIs4ž’!·hRNJøœŚ…†žŖdø¹‘÷õ$P°)äNąÜ2Ž©’Z, ·vh²XéĖqr×72ŻźS'‚£9²³Šæ²Ÿé/žĖįĄ÷1Ž\F»¶ÜĖšµ kš¤æW·Śõgwõ°u–%ÆÅ1KW¢ņ@LBķFX‚N[°õ$dżŽī¬KTžĀŃ^ŽY–(䒏HĄƒ•GÄóĆ'•œĀBUæ™8ü8—é9mm¢H,ÖĀŻ€X¦æ" ŌųvKI;³Ē2/…°Į?HK–wK;> ś÷m”Üü.ŹO'jż‰Y­gžNOū¼ &©¢Įž\kÓĖ_R+zÅnÄæZOžKJ.ųÆŚ“żÕ…³łV™Å¤ –Ń€vzQ^`v sū×Zžß¦Ü[ģ²*bŗv‹,£Ó½˜Cl&Ó­‚…$ŠÖwcĄÉū\¦õ›Ó’€Éś1žķIäą,Q[ņŽæŹß CūŽ>ł’²Z5h€”ƒ‘” '­kNkя/M}KźH͊\ÜĒüh¶ļı§ZnG*ģƇż5ćū®x½­“Ź#°—¼š„#"†»3½XĖWķ}®\æ½Įėõ}:=„{›‹“Ęwų˼d™'}¹zq(¬\ݾ…>/…šŸĢś¦­o ]Į¬ŸH…oŖ\æ Żx˜+ž‘ µ~ÄÓ~?qČōžr¹’ŻažÉZ²©’瓬oB^<”­’ąO4jŃjš¬—" ā*E!(HU)!¶N<×ķ/äć…^¤Œōsr9ÅŖ č@†ß³šā¶÷vöüU–NQæ÷,ŖšńpJņ³"ńų±³]ڤķ¢BU’e ŹżĀz.<]ŻÉ)˜[Fœ‘]8ųU…Ć£y‡S“‘¶ŸPr qp~(„‡$-łsp…9‚ce챘x±hėuqŁ?·é¶[~\X»“¦_G§ķåK¦QO“;iø7ūöy#ÓtmOŚ5XīŁ9XŅ›™dvéį᢫Š‘ $VR¼S­>×5’]²+ØĄ÷ Ļń¾©xɱ$ČŹ’ 曚Æ1ғ՗Hšą§§=å¬YuB]›Ń¹QQŌ• …÷žSÕ%Öō‰[„ŠˆÖŚN;ćÖń1ßāżģŠ­Ćģ¶ ņ|ńĮå9åżŻ¼vv×FJŅž› å=¾ÉxłbM¤Lś…Øųf]*«Šz‚a±łš9gO’µ;ł'ÖŽŅD“eįf”5w‘važCcüß ÖwŖ»9~#†1C]«źŒSZõŹĪN%Ča³«_öl”’[$Äybޤ Fiīņ™ĆMQ·qū©µB”Ź×'—޲ąĖIV(gÆBĀP)Ņ®®~ļS „ŗ *¦ø|””®õž|GJ¶Y½c@ N t]’—yyŽX¦P¤|Wphr y ‘FNŻGA‹Ÿ<ŌĶų¼s’ŃõMr·ĖĢ@"‡”͉“+@ »Ļ¾ųŁcżŪ’vNõP+ŪŪŚ™ ŌÖF’i%,aäƙÆ‚A­Į’ųU^7-h8њ3!'„p†U.zŪ`ƒķŹķöWā÷\xŚČŽIė\?$Z<’U•N Ie…X«Ū'Äßfī^w/mé/ØL‘ U“‘`[Š)ZÓŌp„‡<ø±Ļįš_ ¦š;H¤dZüTyŸrf?ĶĄy{,//ŲEU^XY=™šŗ»³Ń£ńcÅw©Df^€ż×&‡įżä·«>1ÓĻ7ÕāÄ)µ+§ŖN¬Ā„ōåET‡ŁžDJ6śi •ö*KNōq‰˜‘ŖZ§öd›ąż×©o×!8§õŅŽW—į<ī¤ ČīćūÉÜNŽŽ?·“|e~^»Fī’ŗi“5ŽŖĮ Ė€Ņń…xsD#Œp53Üśq#|r|Ké {]QzÉØÜ,½]Æ3 „~¹ó«‡÷ĀFųWįć…·w0Xݵ¼ėĪhĶ-UĻØģržŗHüÕĪš¤»ųSöpŗćTó%Ō·Ńi­5­=;¹~Wžqqü‰öøüOń²«.4żięfM3N‡P‘y /n÷t”ū!jėĖāefųŹžvĆ.½!HbÖįšD؟ō}¬rz|MUMĆāIīĻOł~,_źk%Zęź÷Pw½11nTźh+c’%SķIĖįĘ[ŁGjĒŅ·µ±‘EZGęē‹xµU’ŒÜ oŲų±gwāLÓ4‡dXå`–ÜyAķšņ>³~ŹĒÅ°™™ąI¦mŃZ?UČż”éF>?ņ.?Ūy$ĄWzĪ™oVXīfŖ@¬. ~ŅĒ1¾ŪÉ4’Ąśx‰Õõ×t‚;AlĪ+ŗ,²0čI‰Æ7Ż7ū4āø–” ŻŖ+ź×2§ -…—0FÄ[ ’śDż”i¢µų~Ģ‘&Csb®"ƒÕ,ā‰m¦ŖŪs4©i=i˜§’:ü?köšEšj·~£ŁĆo¦Ū„Ō—™&»…śä,ŒĻӌ§©ū_ ¶Ž'+j²ė7źO;Ū”ˆž„yeŲ»ĒöWö’o4śC“Ź·<Æå5åkhV+d ü\ÜżÆ„s’vJŸĢešcŒAu:ŁÅQž…dœ95E›•هŁęšśæ·b€Įnΐż^Ž1UøŸ„AG욐P+S‹ņžż¾—‡ŁFĘś9Óż· õS:(ĻøąŒM\.üÓż÷šŪ³Æ.C †T «F¼‘yEɁ@ īäԁóIńsƒąžõpĀĀŅ¢ŽEk‚CŽLjdĄ ”īÄ’Żž“žūŸ,P5Å¼ŅŻ«žāZżoŖ( Į]UƒzqrÆ/‹ŅIWœŹæ¼äCę2āī—PŸPĄ¾£;J‡įfę¬ūKńųo÷y]KL‹Otżŗ”ĪIŗ”—ƒ"’Ķ'ó|oé³žĖÆĮćˆČ­ėĘ“ˆT­^\€>”TFŪŌ‰VjZĀ”É!r+Ņ [mæ½»X±c£Yøcžöį  „^Ü$ĪŹ,‘I$ŪvX¢’_]"Ź Ęærµ­x "`FåxC*žŖßĻ—čI=¤JדĀČÜ&ˆĒ¦ĒŌ¾7¼ !Uäē™Åō@¤— @O¦’)N¬ nßfWłyā‹*7÷¬½øZ±ßł®9łśxŽ04±n6wPÖ»qH÷é’M.&÷PÅZ ōÅ «¬lińųĒƃ¢³oÆZ 'š]BYv ć8aÜošŠmž¢qų³ŸhÓŚOä{K(Ļd}V==%»Hdėā¶ķ‡/y¾gŅ ~»i“ æīX;ʧżl~”¾Œ%, ”ØŲ1[[·~Å£’‚Ąŗ¾iŖMpķpŃ mķŽę(›ąwŠó„e¾ų‚C¾4įü˜¶„§=åœ $µ½ÅµĮjųm䕣()ö‚š’'–Ó“v‹O[ ¦Y\ĶpŖ• „•“Æ^>¢ą½RŅK}>;ž_ š¤Å€žöā"Ā•äń^“³˜' ßņāZ…ĀXX{"š†4EŪÆĀŖ wųr'<ƒ3qw`Bė·~ĪąqŒ0ū?iŪūŽ?ńģź‘ĀĢKNč*95RÜG¹f)Åy?ĆūßHÓÄaŽį‹Čģ ‹eJpvēHž5AĆąćšC뤉*0[Į(‰&}Fņ½5^%øĒs_N”f^\}5ēūųÕ.įlcėWO,q»l\ŻKqqQū4ć²| š¤N®².–pŅ“wx„UœŖĘ¤ŽCŒcįŽæī¤å$ĢžŸ÷ß¾Ō-D®—’‰BĖe:ų #%„5?ņŽaN{ĶGV¢­ō:UšĪ+YRK³žI”JŻwžāf_µÆ/čmoĖZ:m…æÖuY››éÖĄÜ^I%)Īķēpž–ßīłU—öš5󳚳 w.—nēkXO«sČļĘyˆ4`ĆQ¬‘~ÄČæ½ĀČm¼æ”Dnd<%¹'Œ“Hnneažė¢–w"æbäæńń&—SÕļO­§éĀŅ/“·”Č‹A±1A 7’‹‘•æ¼›ŗŃī%£¼i®¢$<–Č¢ŽŻ¶ūm %Oē–~ńžUĒHÖŠDicЇؐ¢Å鞞ˆœO”²jrō6ÖHÓ«žĢVŠŒßńc¬ŸäG‰]ͬ¬?X¹ÓM•±ŁdŌ.bµM¼CU½Eż¤ųęž_G EĪ”7ÅõÕH‡Ś:| °±*n®LKĖÄ+“r~ŌˆŻYRRd•ā—‰ė󅌁½R*ŚDĆüØŚåČFŹP·UōģÄ2É@%KTdGłEE”|ʘÜ'üOlõĖ•+æUV£46ʱAA±išÜ/?~”©ū>¦m#L±ä/ⵑIõ¤©¬ ¤?ńkČæļď ­&¹P£NµeyØ#½ŌĀ™];q·Pļ/ŲćĘž×÷f.Ś8ž³ŖŹ÷®-ĢæżŖGD—ķĻ՟—Łż¼4¶²w·Hą“ŃßҚEHm«ZrD'÷‘©ńśšüÕōŗE‚ØÜ—xÜG$UV;šaĒÆķECź/Śū_𙙣ÓģΟnūĀĪ@4f©Č”'Œ²4ŸŲha@É 2¹y¹ź%OĀ—#ÖaQ*BĘÓūEg¶’»ĮÅōg՚Ź*!6öń+¼ŹŅuōP[ś’Ķ*~Ģ*Ė2|K-æŲĆDŸWŽBo$µĄ­†…×Ń’yp`^Oé’»N(¬­·£ĻtūFŁP ńivT­>#·ĆÄ}§ā¼V?AŃ&Ž>X,Ķh¦ōįŒür?Ą•Ś€’4›€ĖĖķ³v³ņČæšlQ³ cˆäo\ĄŖ•J ?Ogjż¾_mŻ×"Śf“qØO b9.¢Pg˜•ĄMAŒžażßóJ‘ņŹŌmķ­ę0[\#\D£ō†£8!¦Žœ|zI’E/÷_ūõ°RśzM©3XÅ(żåķŚu/>ńĄ­š®ß9[ö¹«Æ>ltł®õ.­ŅĀ€L tõ„e ŗ‘čĝłČ«+ēHÓa£XÅ«[§ŲČQ„`ßĢ94`æe¬Ņ7ūīå8²ˆŽĆQvdy¢Š#žś·õ"r6£sźš¦ļĆąžX±YāXcõn®^åUvŽ4$•=z47’—CüµÅšāw™ž©$_$–…‹qś•ÆśŒYæāģ|V×…Ė‹RÓ>܇šŠSā Ķ¢ū'ŸüöćšćMŪ2N—6š‚īŹp¶¢Ė ā_ų¶ßüø_ķb–Ö¶”,’8ŽC@āīcj×ć½9ü•’ÖÅ­lŒp¤ެOŖ¬_(Įiæ„37‰iYy`[$g’˜ż©® iøNPŌרā¹$I G¦®Xć4ųÅ>®öŪö?×ų°ŅĪŽĪ9Ṑ9h¤YB†NSP@*­Ę­^|¹3qČ(ņą·ó7čX¢õtX¬®!y ’ä9QOŗųÄmć̚+…ćčiaŠWP¶Zæc‡°F²ł†ę7”·“IWøéqÓ“m/S–šG Ē­=„ µ¹‰~šņŻ«øč¢4ŠG’%åÉmõŗBš[¹)½"•«ÉĖż^'ŲiäÉȬŃĢ<ųŠ)źV¶§Glė·8Ś1Ī“‘YZ:Ø“tĀIJ&ö* *$oļżäi’2šlIXėßÓŪé¶c·Ž1xj–ÜXļ"'æĆXy6Ūķ½p÷E…!_D‰©Ø4*Ø>c Ń8Š܁O–;®j~9©›?’ÓõFj÷żY,Ć0ƽx:ž•ńÄ”ąds^LŸM~dļ¶äžĻük…ŗä­ÄU‹¦ĄMiAJ·^4 ’W÷œp†@~ĢbŒ7 ą6Üī˵|ć"|7!Łc(-!„NćsJÓwjņ?å·üd“ÖQ$ńQ~…#ŲW¦č>×ņ|¬±¶P”yN8«ž ü˜“°Ųäx»Ŗ¢ś¼¹IÅėā^ƒ³‚ņz æ0B+NJxĀ”MvZEżĖśÜrĢJWŠŅ įĒ‚*ŸµD?Óģ«Iö&o÷bÉź`Kė5Ž(ć†/ī׉X’›Ā€|ƒYQxzoūÄgĀ©­õ)¤*dxmŹ•1'(źH--ÖīČßī©­‘&oųGø,Īk%¾›f–p­^įĄF²ORy$.Wįė#«\æóÅöp—RŅ|Ć02Ėu,q2é¶ķ%˽cø—ÓD‡~_øh¹~Ņ7ŚĀ];NH.$– ė.=3#Įq,ŇģLė™f†’W }†Nźęyo}D°±³1ܚt'ÕiĶļ’gŽézĢ©ėi÷0E»“fāNdt ń³[@æė4—üŃLjA£é螭ž•a4ą–7s¼ˆPüLXŪ¬ĪæåĒöpS5­” o5N6’W“h¬­¾#ZĀĄŠßń`•ł’$ųM.¹l†I4‹(åōĄW¾ ĻB6@÷Rż^4cæķĻĻö$ģbĮę{ŽMmÆ ±F!R)æ„#˜vŪž=ÖH×ķz‰‚m|„„ĢMõŠiĀŽsĢdōą"“ē$ózŒcZqwf’!0`¼ŃR>VP}u#޶Qˆ,ŠŌźr‘¬F»ĘŒīßīĪg»‡Vŗ ÓI‚œ–ĶšTŠńIo'Uva’.šŖńžéų|X†Ÿå»Łµ·Öe Ō z’J“o_°ėé+ńų?ߘ2xģlįFŌ.-ģmä$¤0”õdoɘ,Æć" …’^UĄrłŖĀ)Ö-/L{‰MO,ndaüŠĘĮ$ć·ļ8}S—Śo‡÷Lōך5Tō qõ¶,ė%æ„ĄÅ3“‡ŌUī™2żæ«šć‰„½åRh®łKśXQŲ-7ŠŅ6Dķ+ĖÆö£’‹[Gm=·+4Xć˜ÖMMżYDb¤FZ²qķ;I#æ/‰>¬Ÿ¾Ą©:ŻĢ–p O­ uō„ž6 Čģ±ń’+w’|ÄÉõ–_RęoK›ä£NņóÄÜ^åį™PG,p:Irˆh}?PR×OŠŸī‹u’UO.žVNvÖŚ9µµ¶*¬G©’æ6¦&$æ³Ź_‰Š^2ż¼mĀāUŽśõĶB–„š°;ÖAČČGDH–N½‰ž4uĖ•-'W‚įĶÅÅŹ½»4(BŒ„[ŅŻć‰š¼/«7ܓ߯«—ÉéĮ)HųNü&Œ# ±Zzæx„&QjßŗńõoܕjWfņI“ŽŽĶ Ä Ąś¬¼Šv撱ϗŁų•‡CÓ­`Š#d·SĀy¢2–’Iéżä…Ė÷=]¾ećńx]'Õ՘Į"ˬFC\^2ś‘YsXąŽ“i>n_ļĻF6dõ¤ŚfŸ œ™•h ĪA’vf’v¼­^2;׋~óāžė“ņøĆ™čQ+Į›÷ˆæ*}„¦źĢµżąų”_÷o¬Ųė·†8ÖKÉ}%,m!ūjGĀWŸŪ§ūńӊ’ŗ”ÄLĖ% ĄĄ“Ä4Õ_Žt5U<¹‘ü£ė ūoü.)(yÄ…8 zØa²’©“­ūywOzń·Õ½?Uvu’3"Ø“aU?×•ŻæÉĄKqu,DžܰKB3 ś¢3#’’!xÓö[āĮvvb&mä—¼ÅŻD±–š? véžHfl2HhöJņJŠG'¶’ĒēšįlVLn¢rÅU>³R”UŖ× (£uS³’¼pĀŁ€ø¢Øe–q°„Izń…ü?Ż­’…¶C–3~ĖV¤Óģӝ?g–ksǦkPÜĢĖčźQ-Ņ©-»D…Z»|hPÆłj’ääj[u_0Xń4į¦F›t%ļmއžį²Ś#ė:„ra{{8܂ČO%»vŻhA£uSĖåæ*i¾Z’÷T°¶– ēYķĢ 3Ō~”•”āoåÄļ ål²\ń–Ž%،DŽŸpY}OņĒø’ŗW W͚ “ˆ½·½š¼$K_ß×~W—Ż+»Å9µ0zQ)†ĪīnjY !·NFļŃøōߢśVńBß³źau”—d»[XCd÷YĖĘņ;½6OŽ"użß”Å0¢[xn§x¬ī$½¼‡„•©IT5H”/čų$åöŚhÉEø|J]Xõ‘oī$ø¹‘‚›m:B±Ę¼M߯rUoų¦Ęęō¾fFOkä=0ˆÆ¦µ{¶5–ĪĢ4ģĢ7FVį׳Ņ@ÜŸāżŚüX¤:„܎棓 ģįSKygōķœ+nh\śŠ¤|Qz>œkž[eĀ5ĶBW6ęŚ õZÖ'¼u>2Ļ2„ŗ±ńt™ßöŽ_³‰ĖŽ×(÷nu[°Õ‰$“ōŒæRˆH“N ūQ|}¤OŲÅnµ‹(i­ģŁ~ʰ7—@ކ8ć‚·^>”MĖāN ńą{›‹øāŽčŲ-„nIMGĢÓ-»0ÆÅéŚÆ9˜ ü Ė*Güö°6”ŖpāÆ}wØLÕ1ZŲšÓԚ}…2®¹‘ö¾Æ O"|M' )¶Ż=ĆZŪŪĆr6s ³¢ōänoL’ŻNUiT…½÷÷ūļƒN6°Iõˆ…Ō÷'•ṏĶ4žļįJ%M$ż5±Ķ’Žyqč[ŪMqŖ/ī$£Ei,~”vūIź‚쇧īż6‰Wģšō~ Gė©ĘKgiQW÷Ā" ŲŃ«éµÜōžķGonŸŽął<æŖźRĒŹÉ¦i­“lģ¢žā*Õ Ā”c·‡¼qĖč[Ƽ„Š'ÉN“¦Cgföö†8kÄĒjŌęŪō‹·āŅ·ģæOŠ2BŠü›ŽU‰±·DAH­¬Ė-ŗ'V\Ńōپ†ę4åŠĆ-Õļ ·YČ*±„a…Ó„h¼®%Jż§Qrž×ĒżČĖȒHŌ]]GkaŃmā*ˆBŠšŖ.œz¬k*³|OūØń–Öҙӄ ¹£)›į$VŠVńq.ĘVåĆ÷ž’4‰é+©iڤ÷S‡PŖ!˜3TĒķś· ¬PGĘÅEO)E*ÄüEéFy |3~ԊŃĆĆ-¾Å‰ą7ų‹ö;4P©ų$‘>Ē÷1ą§±¼`#“ˆ}d”¢Ė@OgAWQūi «æŽzsæĆŠZy>åēõ®n½Y$’}–«PīCnķńpōŪł—īšDś u?TEŽĒ6„“^lĖ×ū¦įłĘÓ5“H„j“On`˜øxzRĀø‡Ōīč¢UāÕ!96¬{p@“”ņbW–ĖF25¬€ü2]¼›Ÿų”•Õ(Ōū?gŽ “³™R«^=D‘ńēŽ±D¤”oņ¤ē†[HÕ!¢ŠÆT’ŏ°U’%p[n=7‘d™”ņ^BwcP717$łŪż–(¤BĄŌ]÷ 5;’“É?m©ū„ųSĆ©\2ŗ!āW©5 f4ų½'’)łĖ…bš)rvšę;uēCÅåtųXŽŒOĆū)€õWć«—RŚŌķõ’_ņ—$ŗ.™—ś…Üœdś»ĀŒ*Ƌ¤C„>Šō„“į’WżŒ‚ī)ø+‡eD”載h (Ģßk‹UŽÄšĶōuF%k€XÕėG”įJV½y6jQM»’kPMNõ ŚN£żśß}oš‘;UV•‘¶^µmśŌD~×.\~&—Ó{ÅLv±Ń„‘"Œ°@ēpyl5PyUM(Ŗß|+č:z nŽŠ–°ÜHA`dz˜É;DŌŁ›ž_Q¤wV|Alu}„v‘+U‹™n)EZS‚Ēæ=œĒĀ&ōä~ Ƃ-ü³¬^}»ų­ k<ŠŪ—żåjQ„²?2­šń/‡‚š‹O+hĮA¹Ö5[¢t·cń1¢æ%ż¶gy“ gņ'–£‰µ V“Øa=Äp4Ŗ+Qčß_Ié¬å§ĘßkÓWČõī²»išĶ%“ Ń WõŃAۊLLj›üq¼©4æĖ…ӇЗWæTÓ(ĮR{¶gh¶ŲD¤Å ›:’Ž;®ä.śŽ›vķoec}ę9ųŅepÉü\XCcÄžĖz_ń‘„oƒŻ[łÖ{?B÷UӼƦW€·³%īGŲ2(EYX żIdžOO ĖŖ£®«®MOŽkéŅÜ+ «zlUĻŁe ’æ÷Xcž–PĒmĮ¤‰ įa§[;Ļ!ö‚¬LWłŁcū\ķ±+ŲŅŽ$vÓØTO©KĆQŗVŽ&{p+ŗ4’pžUš\Rč #_¬ZÜj.EÖn6čŌ§¢ąõ~Ļ/UæŻ’Ŗžė Ž˜²Īß_’;vjzZl„Ą J]¾tŚŁ~ˆ·'œk“S1;ŌF_›0ś³HŸjo‡ƒƒH“K)ōt„ƹ\^M!kTpIg,9ĘĻ·īȊźę7_Žo±Š©źLØ›Ę #‚‚w>œ@󜮒߷.?f_ļ  Ó4›7ŒÜršįGĄ÷µ ( Ę¤|*ßŗfż–ō~,0h®ęA+8Ҭުe•PĪĢ?–Éy(ų_ąõ8uš| ĖS¤ĆsÕć¹¹øÄPßN­,ĶJ³°”ŖÅŹĶÉ9;’s ½8ōź~Ź’Źć‰5¹fõų«6čü«F>5ļ·ś¹‚$Ņ3"Fw•ų~6ØÆŁū’[ .Ń„ƒ‹†ęƓ(Ž’†ēSžIõwĆ«[xķaHPtāĶSV©BmæÉŪžmÄR8źĻšĘ×$€cfsÄUäI*Źæš¹QZ1dECJ$’Ž{•Ŗæ§üÅöpĢ jwʧl¢2ŽŁuöĻ’Öõ>o|¾™³fß¾%s*Å%Ø{ųnr75³Ī(‰,½Y·”Ŗń§f’‡õūԌ/čĖ—bЁń3±oQńT³1ܱåž_ØüÖuSBv*ĶĒG7ÆBßż_Śż•įńG Ų±Óø1‰”cRI„ 7=1’€’uāēFY™ø×˜² öæŁžŅņż—ųlł~ÜYœcń}āŸš_k—ł\żGG Ūʵ¼oŻ CĄ]ƒS^œą’uüQü8…Õ¾¢ęH-ķÖ+(ĻĮ >ŒL| āīõ'ģś …~<*:N XI%ņ€vōģօB’y •ÉSšŃ`uųW÷xO+Ģ· r!³ŠR~ÆbŸQ½$žŹM5Ā:±]ŪÓäŸäI„Žaņv©q~·PŻÜ›gŒG$6ńAnŽ 24±FCüßWH®SĘße°³Lņ²7ļ4ż8‰7×Č\‚7Wy½K†ˆŸ³K’9d†/-éecŠīyī5E)Š*‚*K*ļĄ}¦ųŲż¦ĀɗLµ¹v“·V„»G*ī«ū5vži‡Äź]żOļdD^ć=j1ŗŪJĄ·¬9 7čźģZU€}—bÜæaR5ƒ>“o$±4ńĆ,ōiż3Ęgįیc›’æe?Ż­öW„„¬’X²Ņdšz·Bģ™%”Ü“ræÆ4g³ČE²’Ę%ų°L¶š½Ō¼tµÄHGŖ +V‹ĀŻć’Z7ś[zßm}_³€ļtū½9āÓ44Üj€ņ5ĢKokÉQĪhą ĢĖOŻŪŹģó}§ēń*’y„i–2żVņśWæu^o уøįø |jžŸ«ĮŹļshšNµs—Gўy ‹jś—(į…؍Uƒ ācøDćö"Ć |­§¼f]{Ykµ­Eš*ÄE+FWXmŹgćt’īĒõ0JhāĘÕn쓿J9Ć-«³žuż£ +*ŖžM2śqÅÆĮ:…’hPOŖÄ”å@4mcµ²øVŗŗ’0³”šN+yÉšEHĢóFeė³\Ķ›g+Ąež¤·šU…Ł}eQ¤…cūæ "•ßhz¦²d]Bą„¬“3Ś“ńĮjŅ.ēÕH÷ø`¼FėuĖłW[ŪYĒr~®¬œ¶öšG"ć˜™›”uąĮxķæĆšóUeāJ¹¹¹u¶’`‘ĒkĪ–ź‹!>¤‘7©%y/?MY½VŽ.?k“qć!°°½ŽE #³ BR²\±nŠŅ8ōŃßżŅ¾”æĢ²sų±oR&¹1XėsP ¹rćƒr~fK™++ʧŹ8Y¹q“ŃĆ4Ó!Ž{w1¢FyļL\bEåĀ ĆĪ/²Æńü^£ą]fÅ/ģmžŹe–ęk‹Ĝ±°zˆģY÷1}XIɛӞGų0Œw:—•–c7 Õä2BŻO؏1pY­ß÷tHć—Õę«õt›ż#°µÕn4™ķŸPH½RӊBb“”J~–v¹nkQĶŅ?Ü/÷QÆļ%Å4č®{y!•łs‚` ©kćPHӕZH¾Š9Å,ÖÓ !ÕćāIxņ©įåĒć¹fHž>8ś²:2!$BB~ šŃ‰ų™ĻūŹßaWįõ2®¤¹ō€—”6żōMiö·³ÓūŌ?Ž/Ł“6™ØhW>¢ŁÜ-Ū§%Ž}ޜVZ‡Ż%Kü¬6²¼W‘Ņ®Ķ(Śæd¼D'‡Ū‹’’±Į’_C‘#)•hLj}^ ŪTׄ±Æz¶"ś¼mp#Š0čG÷’9-FÆUGĀO„ʸ)YÉPT‰ŲvaßģMGڟī¹>,¶aHø‡‘ž ńžµŖ¬†9ąy«–µBOصę܉!HßāfQįĶ]g ®ua ōm8‡3+Ģ{ŠP7YSżEåćX™źÄī>:ŃH§QŹ”R’ßQü8&;(˜ļö¾¢Ļ^1oö›ķüXe ?OؤZUĒN½T“ū)‘ˆ`ēł‡f Uc‰8„vå“3u­wɤĘ8›™%*hj¦‚ƒżeZX±‰ˆčÆÄ+ʧcæŅßšXĒ…Łł*¾Õڔۄ=Iėū 5Nv¶2KPQ™D˹ųKTÓŪ‡ĀĆłW ęä_«ŸļZ‘æū*ŪæNźx°Ć¢”Æ$ŁØhM@ż ń#ā„Xז!-“†‰#Įxƒ! €7<źßīµéüŲ*–4U €č)ŲŠSŪ1ʓž[uĶFĻ’×õ9ė›qļ—˜ن6iDHXī@4Q@M<+…e'šB÷ v”‚Gøˆ’?‹—÷Bā€( 6ķņ’?Ų{Ś) §ķToōc¢€Ś€ŅFōł×ѓOcāEG½2½NĒŽąųƒµ2C&~,V§‰£€v­g„Ķ8”ÓC|ŌT× ų¶ß©ÆOö\WāĄ&I93NÄØõc½8ŠŠuų~?õx³q“’ČŹBĮéĆWnMH®Ż>Ļł2"}¬E .Õ+żąä¬"ćj7ýŻ‘/ģM(ś0’ƒö©öÜņ=Č©.W·&ēü³ćeЁ’ś„zźŹ+ÕøŠ/?ų³įõņ)¬Ėmrķ¹i =PT:»Æv )Ä7ڧ’&n_ ]¶š^B‚7 Z™{šnW˜?Ž#zÕoƒ÷xaåKc b ˜q FźA©ūQ„8~ß,7–t{Uk—†$’Ÿ üBń  nbĶTń䮿ʸI,Ö2Č W—M†ŚP„Æģ豟ęH’»_Łfl &”ƘŁōhÕ <³Ej]‡ģÄēėWCžģē Hߏ˜ēMŗ†ŠĖ­źÖŗDž‹i[YæhŻåŗøAžķōŅFū2GĒąĄśv£§)|¹åć{éŌ>Æ| EjˆI0S"÷ß%težn_Ė· ¾lքQ ¶ˆāųO.6‘JY_j¼lŅ7ŚI?”Lqy[ź÷6ś‚u‰d$øŗ2?^įĀĻ4"§— –ü›ćŸŚĀO0éņŽAq¬;nķ};]”<XlĮ!ZGnwsųķ–oSūĘĮ„žŸq%~¹>Ļ1‰ų¤²Øā†•ų——&ųyóųĒ#ł†`؍™k %²IŃk·>"I"RŸe=%‰ækö“‡oi5Ź\_ógÜHL·"]‚ŠśÕ¾1$‘²y€®ä·“Š.ļ Š(ZXųʱ‚‘śÓžéØū.doŻ·Łżæ·Šé:<ö×77éX£ŪéZKH™¢…TÆ0Opģ©VDƒ÷æ„ÅĀÜŲLÖ<ÕšÕO2ļ’c©@üU©ÉRTų7Į7Ś\»ø”“ÓµŪØš4}>Bˆ dš v•T“|^­ĘŪz¼ž,ÖPjZ4± y&”löš\!W ORÉO‡•*Ä_÷ō/Ē -m(–vf¶“„[€Œś¤ÄzB1ÓÓ±'Ūų_ģbG—ʝ§ŁYI7­5µ²Bn‚ślĖ*ŠņŠ4.’e½Oćø‹ū¼• hé$ff ĢØ”ź >ĀvNńTŸį|žRÓnd3^OyxYŒ‹\ŗ[ĖąU‚¹UÆy’Ź‘0Æoåo.¢Ž,ŗtČyFÅHņVŖ”T+Jj9RfćūXųr ¬~`ź­ĪK{xģį%¹ź7µeĊDlOŚ[tK™Ółp² O4y‚įf‡HŌuHŗGyØĶś:ÕČŽ©É½W_JN,æn92Ncó>™kzƹ”yz ) œqr¢ŽŠü¶Q’?Փüœu¾ŖØUlüģ——P%«›9YĻRC?ĢŽ•ņ|8:;Mi"Œ››[‰ Ēż Pw¤ü˜“+ū|ć™Wü淂ģu+ėQŹėOõäz—{+ˆXŃ~ „“Q ĢfOåulŁkČŠó0Nƒ›Ś\#[IĘ rōęYw_?›ü¬2`ž™f@j ż:ń5Oö\æ›ü¬¶²$hWmˆ4x ŌSü™0-ʆ² ¶%Ė0E]źv§.ŸĶVõ?oįåńcāŃ!VÜ”PK’A$Tž)Ołēń~Ö9ķ,­;ÕøR‹Pƒm”lUUE~Ķ~×ģóʮȀCŃUQ@ģXü&žrāßk÷oö$Ó­~¾·¦KÖé€õ)ŌØ+š»|,Qyæ?IŪāĮėČŹAz•!‚ø‚8рėø-ńʘ„)ī|s}įn¼¤ŚEÓÓĒź‚h µTųją-.¤»@ą–"’F5ė"“÷ņ‡õšōØåZoćß/æ|ÕŪ|iĢkO|ol­ĖlE?ŽjŸ’Šõ=6̧čĶ\¾æ,±‰Ķr¤R«]{÷Ū–Ė·06č?šGü¬Z™»ę‡lŻń9¤ōӐRĢv ؼAåū äH¼”¶‡öāż—õ¤3Śˆ$ŠūPk»“ =„µrqP²±'`§÷I#GĮ>Ź3`;Uąć Œé€užcŹ`[ł§ZNGö8Wł°#;™Ģ1‰o/yk‰Ä…Ļ÷¶÷ Iš«żgŅ䟮žļ†ZčSŻGÖmŃbŠeøŠ> $žŖĖ-"1ƒ'.L.qÆķEšį„͌7vsYHĘ/ÖKBb ©EÆßź$r|?oū$:õķīŸ„³,VękÖ7njź#ŽåÖ©o…¦ēτпü 66Zv¤¶7S¬Z}õ·«-ŻÄž’›“äsźś±L“’tųŸåäžMŃnn®®ž_©ÅšĘS‰’1%QĆ4 Ķ?ś™/·Ņm­ßԁLNŪ±f.ĒżgåĶæŁ;"ń^+ītī*Žśö ŃBćbŌ©ž“r£6ō2po‡ķ}†Āć£ėźĮSĢsÉd¹³µ˜°×÷iOšÆņĒńc‡˜š!Ē\F“e ]’bU'Ēį“–Gäé&ŗkɵ9ę¹'’½„µœ#i"™Šžœ„ŃIĒöÕ8ąłü·qk"ßiö°Żźäz[½‘ę–8kR‰<¬Ó¢rųų$¾ŸŪoKŸĆ€O‘/®`–}{TøÖodŻtųg“JӅNą­Ø3KžT—~_Čø„æ“J.‰e£hņHyčXĖ4Œkš“,Oo+¶ų¢ézŻŌl—7_\E`BŖ˜ć‡łf’ļ•ŚWhp<Ś}źÜjN6nP˜ŽŃ@U_÷dnĖžN-æ›ä ·²Ōķ‰fIÄņZR†”‘=„™öż/Ś’tC’Ż+‰<ØĀsŹ ćbżŹšøˆāܛޤh‹DP v¦:žs £ķ€īlR6!•O©?)±,8Ō}®,œžĖIƖP±z†ä*ې(@ÜńĆuÓēžģēŠ-ØØ,j@ S}ź@'_Ųųæ™ßTTTqQŲfß(į?™+$0Ś„n— 侈öoßó_ųĒ‚4r%Žāģ5EĢŖ(Š#Ūż’6?«64Ó66‡1öŹ#~˜Ńįš‡Äē’Ńõ8隇.¹¾ytĶ\ٳfŹ”ń®½¹(ėŠ1ŪV#~ŪńšßgłP_K#ØFWf‘h~1üÕ¾žŅņū\¾5žüB¤ōå9.ģjj¼B [Ū·śßīÜZ(ÖM… jJ‘MˆŚ‚•’6ż‘>ŁDv½_PŠ%ōB¬ŪHW° ģiø’cńa:"ÜĖ鄪ÜL+_Qæx+ד©ä“ū?kįoŚĆX4;p½„†,GŚ#ƍÓü’pz[ĒŖŖ Ä-ÓLd¶)#«ņ)ļ6"¦§ āog»9jÓx”@U@„>.5$“Ėģń_³ū¾IŌEź0)U»aN[ ų6ż¤ų~Ļ÷-ū¾B—OGāgų‚ˆĘŹh~]Ūe?łG«yŅ }A“}Ę]gTˆ~ś Z 5Ł'˜H]»#²ćšątŃ<嬀ŚÕųŅmś‹+éžS0(ó+żj?åąßZyW@µ·0%’H¬C;ĢLŅ1SÉk#–z)ū*żœŚ†±¢č‘‹w+•å …ŗ#‚h8D“ūG§ū/å¹4ĶsXRŪčVs|°ü7rWvęźÖ§xž8›żż’w€õķāĘ-“½1ī-č}3J%R0b äø–Uõ÷r7ŲĀČtnę^)cpff¤Ęvvćž2IśĢŹŁņOņ?o Äi·iOt×n¾Æč.5¶@µ­Z…Ÿ‡~¼ŪķI˵€h¶śĄVžē‰ō•¹Ä*ÄE8&ngćnH’Įš2įߣ®>²I–XŌ“„ˆ#öÕG9UGĆūŲęOęl ØµĶ¬ś}–l’ŻÜĖč9ørŚŻ"yÜGY?cHG£sćū浇ŗvœ–P°ęežZ‰Ų́J qÆģFæ ’®Īģ*†”ģ:l˜É!÷;)Q±§†4[C^L 5)ń÷šé·fūXń`(ų¾ÖŻkćć–|IʧłŒÄŖ·‘½[U’Yž„QŖ6j}© ņ«"WöxH˜Ņ+»Õ"Ī9'ˆ_]’»4żæTüžD±§_Ū‹¬“‰£ZĻp}B)HBń_~N§›’•Ę5o÷Ö*…ń$õ$’Iłœ³C•M¼2ĘQĶōći\Ō§Ļ1Ź9GŪ¦UQÜ ŖŖT"(¢…=€Ģk•\ŖefŹ4ĘÓš‡?’Ņõ8łW/6^lٳfĶ›šŪŸ"(Üŗ«T‚)Jw§üGł—3Å"ĄĀ †VūD~Ń„įy²Ę(œ³ B 1¤Ē‰ šöjҧEū-öW‹8•UU  *‚€c+ õ ×ęe’īS·óšĮv6¶P-£ƽ·$ŸcRĒē‹ŠÓ(ŌoµZąg揕āč ō„>uyqåūłbQæxkU-¹Ū•((ĖČ«ńq“ÓoŽ`Ø¬ąŒ«šŠQŠ•ä’.ߏ1zcV5Z…T’HRjNŽ9`o›ož7€åˈ今õīĖ ½rˆ­røųā/adņZŽ3)§)8ŽgiVź@ÆC€5o,錤1ĆreĒ*ΰ<™š†ęØžļūæņpJi6Ŗ 1’@:©rØIīc„GžÅ 0§QcOä@}˜śePxę Ó1ķLŌĶĒ|­ś²ˆŪ1vQŪčCÉßÓNRSÕn"­Ēģņ4ųøö®8ījMrˆ9]²€ķ—ķ”A;e{fŹ9æĢf5®6ž9T„seS(ūet9»år²·ķ”q½Ķ~Œ¾9’Óõ8Ķ—¾^lٳfĶ›6lٲ²ó¢7÷Ź8Wy|ĶČG(HBē^;6į˜ÕJæČųy2·(ųć"3I?ցŖŒdF ^[4ā’|Æ/÷āŹ˜g “qWŽęµ©ėōSeˊåÓ+*ƒ®oÄf§ć˜Ö›vŹ„O·|Äٲ²ˆžÜŌ9@mS—QZ”^”Ź c1Ź”ŲfŹ9L”ÓĒ*™¾yDefŹńŹć˜ųeRŸ,¬ŌŹé¶Vb6ĶMń§n¹YT”ĶŽ˜Ó•Ó1ņˆĘķą ’Ōõ8Øļ—\¼¬Ćē–lŁ»ę9…sfĶ›6lٲ€zoć‰-µ°§PQ‹„ ;K¬I'–(‘Ŗ(TPŠ:(<;eęy·Źß1ĶLŖf¦aķ˜»6W¶Vµ4ł·¦U=³3eWę7 ĖżY[ę5ŽĒn™ˆ&Ÿ†jczåĄ“½3¬”ąs}Źi”röʝļķš™DPPåe}¶ß¾VQłåeSz÷Źo»*ƒ„r\¬’Õõ>U½yQ@ū>ųģĒ/0͘ę&ƒ* æ†^lÕ®lٳfŹķ–22÷¦V`? ¼Ū­¾ģ¾ŪåuĒ56;Wæ|Ż3Ć( Äoür»长\¼Ŗo•PM;Œ³L”@iķ”zę=2r+¾l£×õęß+ß+(°Øv]2…)·Ń•Ūn¾łæ\¢2ŽQŹĶ”kŪ(|Ē+l¢)”q¹Yøūg’Öõ04ĶŽøģنnūfĶ±ĶŠm›õfļü2ņ²ņ{o—”2ĪWLٲófĢ2»ęĖĶ]óewĶMóņØ~ŒŌĶ”vöCåLÄļOĒ*ƒ1m×ß1ėķ•¶W¶nŽłTØĢGŻ•˜ī1æēL”S½ö9³‡ß¶4e2½³SnłTʦje÷ćHĶM²©š†˜Üiü²¶Ź>ū×5ß?’×õ%~ńŽł«÷e×Ē0öĶņļß+¾^cÓ2šŠżłc6l­žYy«•æ_ŗfĶ›õfŪ6c¾c˜¢– Fć¦m²ófŹ͚™€Ź ĶJę#lŖ ŌÆńŹŽ”9³PeST¹¹fSUؐp[™&“*G+O‡āū\±CS;eõłåƹ^Ē(Æ|¢6¦Uѕ–js¶l­ń‡n¹}±§/®6¢•Ģq“Ķ••#|iĶĖü럒Šõ é˜W|wėŹ5§ėĢ?½’®m»frĻ\Ūo˜f9{åęŹŪ1ü2ņk¶oó9y‡|£\­Ŗ2ö§¶^ł_ƽ26­+_†¾8ģŁ²³mC›jfŹ{×ß7ėĢ:ćM6Ėķ¾nł_ęsož}3S(ÓčĘÆ‡Ł¦ß,Ł[efŹß0÷ÆÓŽ½éŪ1öśi”k\ݶĢ3dœiæLŪm”}’·,õŹ=6ŹŪ+64’·˜ć¦4fūó’Łfavicon.ico000066400000000000000000000025761476025525100356410ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-fulltext-search/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’index.html000066400000000000000000000013421476025525100355030ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-fulltext-search/mount-origin

    The Picture of Dorian Gray
    Fulltext search
    libwebsockets.org-logo.svg000066400000000000000000000226061476025525100406210ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-fulltext-search/mount-origin image/svg+xml lws-fts.css000066400000000000000000000731511476025525100356260ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-fulltext-search/mount-originspan.title { font-size: 24pt; text-align: center; } img.eyeglass { display: inline-block; background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAyMjQuMDUyMjIgMjU2LjQ4MjE1IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KCTxkZWZzPgoJCTxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjkwOS4xMSIgeDI9Ijk5Ni42OSIgeTE9Ii03MS4wMzUiIHkyPSItMzEuNjEzIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC05MTYuMDYgMTA1LjU4KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCQk8c3RvcCBzdG9wLWNvbG9yPSIjNGQ0ZDRkIiBvZmZzZXQ9IjAiLz4KCQkJPHN0b3Agc3RvcC1jb2xvcj0iIzgwODA4MCIgc3RvcC1vcGFjaXR5PSIuMDgyNjQ1IiBvZmZzZXQ9IjEiLz4KCQk8L2xpbmVhckdyYWRpZW50PgoJCTxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjEwMjAuMyIgeDI9IjEwMTcuNiIgeTE9Ii0zNy44NjMiIHkyPSItMzUuMzgzIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC05MTYuMDYgMTA1LjU4KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCQk8c3RvcCBzdG9wLWNvbG9yPSIjOTk5IiBvZmZzZXQ9IjAiLz4KCQkJPHN0b3Agc3RvcC1jb2xvcj0iIzk5OSIgc3RvcC1vcGFjaXR5PSIwIiBvZmZzZXQ9IjEiLz4KCQk8L2xpbmVhckdyYWRpZW50PgoJCTxmaWx0ZXIgaWQ9ImMiIHg9Ii0uMDg1NTgiIHk9Ii0uMTIyNiIgd2lkdGg9IjEuMTcxMiIgaGVpZ2h0PSIxLjI0NTIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CgkJCTxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNDc2NDQ5MzkiLz4KCQk8L2ZpbHRlcj4KCQk8ZmlsdGVyIGlkPSJkIiB4PSItLjIxNjYxIiB5PSItLjI5NDQ1IiB3aWR0aD0iMS40MzMyIiBoZWlnaHQ9IjEuNTg4OSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KCQkJPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMS40NjkwMTk0Ii8+CgkJPC9maWx0ZXI+CgkJPGZpbHRlciBpZD0iZSIgeD0iLS4wNTkyMjgiIHk9Ii0uMDc3NjUyIiB3aWR0aD0iMS4xMTg1IiBoZWlnaHQ9IjEuMTU1MyIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KCQkJPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMy40NzIzODc4Ii8+CgkJPC9maWx0ZXI+CgkJPGZpbHRlciBpZD0iZiIgeD0iLS4wNzUwNTMiIHk9Ii0uMDY3MDAzIiB3aWR0aD0iMS4xNTAxIiBoZWlnaHQ9IjEuMTM0IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgoJCQk8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIyLjMwNjQ1MzgiLz4KCQk8L2ZpbHRlcj4KCQk8ZmlsdGVyIGlkPSJqIiB4PSItLjcwMzc4IiB5PSItLjY5MDc0IiB3aWR0aD0iMi40MDc2IiBoZWlnaHQ9IjIuMzgxNSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KCQkJPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNC4xMTIwODgiLz4KCQk8L2ZpbHRlcj4KCQk8ZmlsdGVyIGlkPSJpIiB4PSItLjA2MSIgeT0iLS4wOTUzNDUiIHdpZHRoPSIxLjEyMiIgaGVpZ2h0PSIxLjE5MDciIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CgkJCTxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNzU4ODkwNDIiLz4KCQk8L2ZpbHRlcj4KCQk8ZmlsdGVyIGlkPSJoIiB4PSItLjA3OTU4NyIgeT0iLS4xNjc5NyIgd2lkdGg9IjEuMTU5MiIgaGVpZ2h0PSIxLjMzNTkiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CgkJCTxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNTgwMDg2MTUiLz4KCQk8L2ZpbHRlcj4KCQk8ZmlsdGVyIGlkPSJnIiB4PSItLjAzMjI5NSIgeT0iLS4wMjgwMDkiIHdpZHRoPSIxLjA2NDYiIGhlaWdodD0iMS4wNTYiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CgkJCTxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjEuMjM0MzQ2OCIvPgoJCTwvZmlsdGVyPgoJCTxmaWx0ZXIgaWQ9ImsiIHg9Ii0uMTY2NDgiIHk9Ii0uMzQ5ODEiIHdpZHRoPSIxLjMzMyIgaGVpZ2h0PSIxLjY5OTYiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CgkJCTxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjMuODg4NzYzNiIvPgoJCTwvZmlsdGVyPgoJCTxmaWx0ZXIgaWQ9Im0iIHg9Ii0uMDM1OTIyIiB5PSItLjA0NzIxMSIgd2lkdGg9IjEuMDcxOCIgaGVpZ2h0PSIxLjA5NDQiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CgkJCTxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjIuMDUzNDk2NiIvPgoJCTwvZmlsdGVyPgoJCTxmaWx0ZXIgaWQ9ImwiIHg9Ii0uMDM1OTIyIiB5PSItLjA0NzIxMSIgd2lkdGg9IjEuMDcxOCIgaGVpZ2h0PSIxLjA5NDQiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CgkJCTxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjIuMTg1OTg3NSIvPgoJCTwvZmlsdGVyPgoJPC9kZWZzPgoJPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTkuMDQ0IDUzLjQ5MSkiPgoJCTxwYXRoIGQ9Im0tOC44MDY4IDI2LjA4MmMtMy4wMzI4LTM1LjM1MyAyOC43MTItNjIuMTY3IDY0LjY1My02NC4wMTcgMjIuOTg5LTIuNTkzMiA2Ni44MTkgOS4wNDY5IDgyLjk1NSA0Ni4yOTMtMS4yODAxLTIxLjkyMy0yNS45NjctNjguMjkxLTEwOC43OC00OS4yOTMtMjUuMzc2IDguMjg5Mi01MS4zMzYgMzUuMzQ3LTQxLjQxMSA2My41NTZ6IiBmaWxsPSIjOTk5Ii8+CgkJPGVsbGlwc2UgY3g9IjYzLjgzMiIgY3k9IjEzLjY5NyIgcng9Ijc1LjgwNyIgcnk9IjU3LjY3OSIgZmlsbD0iI2IzYjNiMyIgZmlsbC1vcGFjaXR5PSIuNDQyMTUiLz4KCQk8cGF0aCBkPSJtNjIuNzU1LTQ3LjQ3MmE3Ny43ODQgNTkuMTgzIDAgMCAwIC03Ny43ODMgNTkuMTgzIDc3Ljc4NCA1OS4xODMgMCAwIDAgNzcuNzgzIDU5LjE4MyA3Ny43ODQgNTkuMTgzIDAgMCAwIDc3Ljc4NCAtNTkuMTgzIDc3Ljc4NCA1OS4xODMgMCAwIDAgLTc3Ljc4NCAtNTkuMTgzem0wLjEyNjEgMi4xMDI3YTc1LjgxNyA1Ny42ODcgMCAwIDEgNzUuODE3IDU3LjY4NiA3NS44MTcgNTcuNjg3IDAgMCAxIC03NS44MTcgNTcuNjg3IDc1LjgxNyA1Ny42ODcgMCAwIDEgLTc1LjgxNyAtNTcuNjg3IDc1LjgxNyA1Ny42ODcgMCAwIDEgNzUuODE3IC01Ny42ODZ6IiBmaWxsPSIjODA4MDgwIi8+CgkJPGVsbGlwc2UgY3g9IjYzLjYxMSIgY3k9IjE3LjE4OCIgcng9IjczLjAyNSIgcnk9IjU1LjU2MiIgZmlsbD0iI2IzYjNiMyIgZmlsbC1vcGFjaXR5PSIuNTUzNzIiIGZpbHRlcj0idXJsKCNsKSIvPgoJCTxwYXRoIGQ9Im0xMzkuNDMgMTguMjI0Yy0xLjEyMjUgMzYuMDg2LTMzLjMxMyA2My4xMjUtNzUuMzMxIDYzLjEyNS00Mi4wMTcgMC03Ny45NS0zNC43MS03Ny45NS02Ni42NzkgNy4yOTY1IDIxLjUzOCAyNS4xMTEgNTIuMTA4IDc4LjY5OCA1Mi4zMDkgNTMuOTYyLTIuNjA1NCA2OS45MDUtMzQuODg3IDc0LjU4Mi00OC43NTR6IiBmaWxsPSIjODA4MDgwIi8+CgkJPGVsbGlwc2UgY3g9IjYwLjQ5NiIgY3k9IjEyLjEyOSIgcng9IjY4LjU5OSIgcnk9IjUyLjE5NSIgZmlsbD0iI2VjZWNlYyIgZmlsbC1vcGFjaXR5PSIuNTQ1NDUiIGZpbHRlcj0idXJsKCNtKSIvPgoJCTxlbGxpcHNlIHRyYW5zZm9ybT0ibWF0cml4KC45MTQ2MSAtLjUzNjUyIC41MzY1MiAuOTE0NjEgLTg5NC4zNCA0NDguMjkpIiBjeD0iOTY5Ljk1IiBjeT0iNjMuNzI0IiByeD0iMjguNDQzIiByeT0iMTIuNDM1IiBmaWxsPSIjZmZmIiBmaWxsLW9wYWNpdHk9Ii44MDE2NSIgZmlsdGVyPSJ1cmwoI2spIi8+CgkJPHBhdGggZD0ibTg2LjU0NSA3NS4wODYgMy42NjU0IDUuMjU0OCAyLjAwNDggMS42ODM3IDIuMDkxMSAwLjc2Mzg1IDAuOTQ2NiAwLjQ0MTc0IDkuMjMyMyAxMy43MzQgMS4xMDUyIDUuNDI2NSA2Mi43MTIgODkuOTA3YzguMTA1IDkuNjI1MiAyOC45OTUgMTIuMDIgMzIuMzM3LTMuMDkwNiAzLjE1MzItMTMuMTg1LTkuNDY5Mi0yMS42NTItMTYuNDY3LTMwLjc0OC0xOS41NDgtMjIuMzU4LTQ3LjU3LTU1LjE3OS01OC4yODgtNjcuNDQ1LTMuNTc0My0yLjIxMjQtMy4wOTY5LTAuOTY3NTUtNS45NDg3LTMuMjQ2Ni0yLjg1MTktMi4yNzkxLTcuNDI5Mi04LjAxODgtMTAuMjAyLTExLjEyOC0wLjgzNjMtMC45Mzc4Ny0wLjE5ODQtNC4xMDIyLTAuOTg4NS00Ljk4NTktMi41OTg4LTIuOTA2Ny00LjkwMy01LjQ3MTEtNi42MTkzLTcuMzY4NS02Ljc2NjctNC4xOTItMTguMTk3IDIuNDc2MS0xNS41ODIgMTAuODAyeiIgZmlsbD0iIzY2NiIvPgoJCTxnIGZpbGw9IiM0ZDRkNGQiPgoJCQk8cGF0aCBkPSJtMTEzLjQ5IDk0LjI2MmMzLjUwNzEgOS4xNTc4IDYuMDYwNiAxOC44NjUgMTAuODM0IDI3LjQzMiA2Ljg4NTggMTAuMTY2IDEyLjYyNCAyMS4yMzMgMjEuNDE2IDI5Ljk0NyA1LjUyNDggNS44Mzk1IDEwLjIwOSAxMi42NjggMTcuMzU4IDE2LjY2NCA1Ljk5MyA2LjI1NCAxNC45MjUgNS41MDU2IDIxLjk5MSA5LjQ3MTIgNy4xMjEzIDIuNDAzOCAxNi4yMTUgMTIuMjIgMTAuNDQgMTkuMTk3LTguMjk5MiA1Ljk1NjItMTkuOTU3IDIuNDY3Mi0yNi44NDMtNC4xNDItNi41OTU5LTguMjQ1Mi0xMi4xODUtMTcuNDA5LTE4LjM5LTI2LjAxLTE0Ljg4OC0yMS41MDUtMjkuNzEtNDMuMDc2LTQ0LjU5OC02NC41OCAxLjMyMjQtMy44ODcgMy40MjM2LTYuNjg0NiA3Ljc5MTYtNy45Nzg3eiIgZmlsdGVyPSJ1cmwoI2cpIi8+CgkJCTxwYXRoIGQ9Im0xMDguNDMgNzIuMTg2Yy0yLjA0NzctMC40OTI2NS00LjEyNDItMS4yMTE1LTYuMjQyNS0wLjY0OTA3LTIuODIxNiAwLjI1ODIzLTUuMjYxOSAxLjkyMjMtNy4xMjgyIDMuOTY2Ni0xLjA5NDggMC45MjI5MyAxLjU3NS0wLjM3OTc2IDIuMTg4NC0wLjQxOCAyLjA4ODItMC41MTk4NSA0LjI5MDItMC40OTI3MiA2LjQyNDctMC4zMTQ5MyAzLjAyNTUgMC4yMTIyMSA1LjMzMDUgMi4zMTc3IDcuNTYzNiA0LjEzNTIgMC42MTI0IDAuNDkyMzYgMS42OTg4IDEuMjIzMiAwLjU1MiAwLjE5MjkyLTAuODQ4NS0xLjE4MjYtMi41OTM1LTEuOTIwNC0yLjg3NjctMy4zODM0LTAuMTYwNC0xLjE3NjQtMC4zMjA5LTIuMzUyOC0wLjQ4MTMtMy41MjkyeiIgZmlsdGVyPSJ1cmwoI2gpIi8+CgkJCTxwYXRoIGQ9Im0xMTguMzUgODYuMjE3Yy0yLjQzODggMC4wMjQtNC45NzU3LTAuMjc1MjYtNy4yNTQ3IDAuODEzNzYtMi43MDYzIDAuODYzNzEtNC44OTc1IDIuMDc2MS04LjI3MzYgMS45OTI2LTEuMDk4NS0wLjE4MjktMi4zNTk0LTEuMTY2Mi0zLjgzMjUtMi4zNTM0LTEuNTU4My0xLjI1NTgtMy4yMjE1LTMuMjE1My0zLjY5NS0zLjMyMjIgMi45MTQ1IDQuNDE3NSA2LjEwOTYgOS4wMjIyIDkuMDI0MiAxMy40NCAwLjM1NSAxLjU2MTUgMC43MTQ4IDQuOTY2OCAxLjMwMjEgNS42NjI4IDIuNTQzOS0zLjI1NDcgNS4wMTgzLTYuNzQ4IDguNzIzMy04Ljc3OTggMi42ODQ4LTEuNDkyNiA1LjUwOTgtMy40MDAyIDguNzQ1MS0yLjk1NDQgMC45MDg5IDAuMTMyOTUgMy4zOTA3IDAuMjE4NDEgMS4xNTQ5LTAuNTU4MS0yLjEwODctMS4wNjU2LTQuMzA2NS0yLjEzNTUtNS44OTM4LTMuOTQxeiIgZmlsdGVyPSJ1cmwoI2kpIi8+CgkJPC9nPgoJCTxlbGxpcHNlIGN4PSIxODguMTMiIGN5PSIxODUuMTciIHJ4PSI3LjAxMTUiIHJ5PSI3LjE0MzciIGZpbGw9IiM5OTkiIGZpbHRlcj0idXJsKCNqKSIvPgoJCTxnIGZpbGw9IiNiM2IzYjMiPgoJCQk8cGF0aCBkPSJtMTI1LjIgOTMuNTUxYy0xLjkxLTAuMjc5MjItMy43NTc3LTAuMDIwNi01LjU1NjMgMC42NjE0Ni0wLjg2MTcgMS4zMzE2LTAuODQ5MyAyLjUzNzkgMC40NDI5IDMuNTYwOSAxOS45NjEgMjUuNDQ4IDM5LjkyMSA1MC44OTYgNTkuODgyIDc2LjM0MyAyLjgwNzIgMC42MTM3IDUuNjEwMiAxLjQ4ODIgOC40MiAxLjkzOSAxLjU3MDQtMC4zNDM4MyAzLjQwMi0wLjQ4OTAzIDQuMzg1MS0xLjY3NzkgMC4zMDg3LTIuMTczOS0xLjkzMzctMy4zNDY5LTIuOTkxNS00Ljk3NDEtMjEuNTI4LTI1LjI4NC00My4wNTUtNTAuNTY4LTY0LjU4Mi03NS44NTN6IiBmaWx0ZXI9InVybCgjZikiLz4KCQkJPHBhdGggZD0ibTEwMy45MS0zMi4zOTFjNy4yMzI3IDEzLjM0OCAxMS44MiAzMC4wNjkgNi4wMTA0IDQ0LjY1LTguMjg4MiAxNi4yNTktMjQuNDQ0IDI3LjQ4NC00Mi42MjEgMjkuNTc1LTIwLjU0MSA1LjMzMTktNDMuNjc4IDUuNjI3OS02Mi4zMzUtNS41NDYzLTE3LjgyOC01LjEyNTQgNC40MzQ4IDE0LjgzNiAxMC4xNTkgMTcuNjQ0IDMxLjMyOSAxOS4yMjUgNzUuMDUyIDE2LjY0NyAxMDQuMDUtNS45NDA5IDEyLjE3Ni0xMC44MjggMjIuOTY0LTI2LjMyNSAxOC43OTQtNDMuNDQ4LTMuOTA5NS0yMi4yNTYtMjMuNzAzLTM4LjEwNC00NC4xMzQtNDUuMDYgMy4xMTc0IDMuMDA1NCA2Ljg3NzEgNS4yMTggMTAuMDc2IDguMTI3MXoiIGZpbGwtb3BhY2l0eT0iLjQwOTA5IiBmaWx0ZXI9InVybCgjZSkiLz4KCQkJPHBhdGggZD0ibTEwMi4wNyA3NC45OTJoNC40OTAybDIuOTkzNCAxLjY4MzggOC43OTMxIDkuOTE1Ny00LjExNTktMC45MzU0NC0yLjYxOTIgMS4zMDk2eiIgZmlsbC1vcGFjaXR5PSIuNDA5MDkiIGZpbHRlcj0idXJsKCNkKSIvPgoJCTwvZz4KCQk8Zz4KCQkJPHBhdGggZD0ibTk1Ljc3IDYyLjk5MiA2LjQxNjEgOC40MDA1IDIuOTEwNS0wLjA2NjEgMi4wNTA1IDAuMzMwNzMgMS45ODQ0IDAuNjYxNDYtMC4zOTY5LTAuNzkzNzUtNi40MTYyLTcuMjA5OS0xLjM4OS0wLjcyNzYxLTIuMjQ5LTAuNTI5MTYtMS4wNTgzLTAuMDY2MnoiIGZpbGw9InVybCgjYikiIGZpbHRlcj0idXJsKCNjKSIvPgoJCQk8cGF0aCBkPSJtLTE0LjM2MyAxNC4xNzYgMC43OTM3NSAxMC4wNTQgNS4wMjcxIDExLjY0MiA1LjAyNzEgMTAuMDU0IDkuNzg5NiAxMC44NDggMTIuNDM1IDEwLjg0OCAxNC44MTcgNy42NzI5IDEyLjk2NSAzLjcwNDIgMTEuOTA2IDIuMTE2N2g4LjczMTJsMjAuNjM4LTIuNjQ1OCAxLjA1ODMtMS4wNTgzLTIuMzgxMy0zLjQzOTYgMC41MjkyLTUuODIwOCAzLjQzOTYtMi4zODEyIDMuNzA0Mi0yLjExNjcgNy45Mzc1LTQuNDk3OS0xNS4wODEgNC43NjI1LTE3LjcyNyAzLjE3NS0yMC42MzgtMS4wNTgzLTE2LjY2OS0zLjcwNDItMTYuOTMzLTguMjAyMS0xMS4xMTItOC40NjY3LTExLjkwNi0xNi40MDR6IiBmaWxsPSJ1cmwoI2EpIi8+CgkJCTx0ZXh0IHRyYW5zZm9ybT0icm90YXRlKDUyLjY0MikiIHg9IjIyMS4yMzgzNCIgeT0iLTM0LjUzODExMyIgZG9taW5hbnQtYmFzZWxpbmU9ImF1dG8iIGZpbGw9IiM2NjY2NjYiIGZvbnQtZmFtaWx5PSInT3BlbiBTYW5zJyIgZm9udC1zaXplPSI4LjkxMDNweCIgbGV0dGVyLXNwYWNpbmc9IjBweCIgc3Ryb2tlLXdpZHRoPSIuMDQ2NDA4IiB0ZXh0LWFsaWduPSJjZW50ZXIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHdvcmQtc3BhY2luZz0iMHB4IiBzdHlsZT0iZm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDtmb250LXZhcmlhbnQtYWx0ZXJuYXRlczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1saWdhdHVyZXM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbDtmb250LXZhcmlhbnQtcG9zaXRpb246bm9ybWFsO2xpbmUtaGVpZ2h0OjEuMjU7c2hhcGUtcGFkZGluZzowO3RleHQtZGVjb3JhdGlvbi1jb2xvcjojMDAwMDAwO3RleHQtZGVjb3JhdGlvbi1saW5lOm5vbmU7dGV4dC1kZWNvcmF0aW9uLXN0eWxlOnNvbGlkO3RleHQtaW5kZW50OjA7dGV4dC1vcmllbnRhdGlvbjptaXhlZDt0ZXh0LXRyYW5zZm9ybTpub25lO3doaXRlLXNwYWNlOm5vcm1hbCIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHRzcGFuIHg9IjIyMS4yMzgzNCIgeT0iLTM0LjUzODExMyIgZmlsbD0iIzY2NjY2NiIgc3Ryb2tlLXdpZHRoPSIuMDQ2NDA4Ij5naW90b2hhc2hpPC90c3Bhbj48L3RleHQ+CgkJPC9nPgoJPC9nPgo8L3N2Zz4="); width:0px; height:0px; padding:2em 1.6em; vertical-align:middle; margin-right: 0.1em; background-repeat: no-repeat; color: rgba(0, 0, 0, 0); } img.spinner { display: inline-block; background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiCiAgaWQ9InN2Zy1zcGlubmVyIiAKICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgeD0iMHB4IiAKICB5PSIwcHgiIAogIHZpZXdCb3g9Ii0xMTIgLTEyOCA0NDggNTEyIgogIHhtbDpzcGFjZT0icHJlc2VydmUiPgoKCTxkZWZzPgoJCTxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjkwOS4xMSIgeDI9Ijk5Ni42OSIgeTE9Ii03MS4wMzUiIHkyPSItMzEuNjEzIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC05MTYuMDYgMTA1LjU4KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCQk8c3RvcCBzdG9wLWNvbG9yPSIjNGQ0ZDRkIiBvZmZzZXQ9IjAiLz4KCQkJPHN0b3Agc3RvcC1jb2xvcj0iIzgwODA4MCIgc3RvcC1vcGFjaXR5PSIuMDgyNjQ1IiBvZmZzZXQ9IjEiLz4KCQk8L2xpbmVhckdyYWRpZW50PgoJCTxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjEwMjAuMyIgeDI9IjEwMTcuNiIgeTE9Ii0zNy44NjMiIHkyPSItMzUuMzgzIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC05MTYuMDYgMTA1LjU4KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCQk8c3RvcCBzdG9wLWNvbG9yPSIjOTk5IiBvZmZzZXQ9IjAiLz4KCQkJPHN0b3Agc3RvcC1jb2xvcj0iIzk5OSIgc3RvcC1vcGFjaXR5PSIwIiBvZmZzZXQ9IjEiLz4KCQk8L2xpbmVhckdyYWRpZW50PgoJCTxmaWx0ZXIgaWQ9ImMiIHg9Ii0uMDg1NTgiIHk9Ii0uMTIyNiIgd2lkdGg9IjEuMTcxMiIgaGVpZ2h0PSIxLjI0NTIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CgkJCTxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNDc2NDQ5MzkiLz4KCQk8L2ZpbHRlcj4KCQk8ZmlsdGVyIGlkPSJkIiB4PSItLjIxNjYxIiB5PSItLjI5NDQ1IiB3aWR0aD0iMS40MzMyIiBoZWlnaHQ9IjEuNTg4OSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KCQkJPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMS40NjkwMTk0Ii8+CgkJPC9maWx0ZXI+CgkJPGZpbHRlciBpZD0iZSIgeD0iLS4wNTkyMjgiIHk9Ii0uMDc3NjUyIiB3aWR0aD0iMS4xMTg1IiBoZWlnaHQ9IjEuMTU1MyIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KCQkJPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMy40NzIzODc4Ii8+CgkJPC9maWx0ZXI+CgkJPGZpbHRlciBpZD0iZiIgeD0iLS4wNzUwNTMiIHk9Ii0uMDY3MDAzIiB3aWR0aD0iMS4xNTAxIiBoZWlnaHQ9IjEuMTM0IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgoJCQk8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIyLjMwNjQ1MzgiLz4KCQk8L2ZpbHRlcj4KCQk8ZmlsdGVyIGlkPSJqIiB4PSItLjcwMzc4IiB5PSItLjY5MDc0IiB3aWR0aD0iMi40MDc2IiBoZWlnaHQ9IjIuMzgxNSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KCQkJPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNC4xMTIwODgiLz4KCQk8L2ZpbHRlcj4KCQk8ZmlsdGVyIGlkPSJpIiB4PSItLjA2MSIgeT0iLS4wOTUzNDUiIHdpZHRoPSIxLjEyMiIgaGVpZ2h0PSIxLjE5MDciIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CgkJCTxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNzU4ODkwNDIiLz4KCQk8L2ZpbHRlcj4KCQk8ZmlsdGVyIGlkPSJoIiB4PSItLjA3OTU4NyIgeT0iLS4xNjc5NyIgd2lkdGg9IjEuMTU5MiIgaGVpZ2h0PSIxLjMzNTkiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CgkJCTxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNTgwMDg2MTUiLz4KCQk8L2ZpbHRlcj4KCQk8ZmlsdGVyIGlkPSJnIiB4PSItLjAzMjI5NSIgeT0iLS4wMjgwMDkiIHdpZHRoPSIxLjA2NDYiIGhlaWdodD0iMS4wNTYiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CgkJCTxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjEuMjM0MzQ2OCIvPgoJCTwvZmlsdGVyPgoJCTxmaWx0ZXIgaWQ9ImsiIHg9Ii0uMTY2NDgiIHk9Ii0uMzQ5ODEiIHdpZHRoPSIxLjMzMyIgaGVpZ2h0PSIxLjY5OTYiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CgkJCTxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjMuODg4NzYzNiIvPgoJCTwvZmlsdGVyPgoJCTxmaWx0ZXIgaWQ9Im0iIHg9Ii0uMDM1OTIyIiB5PSItLjA0NzIxMSIgd2lkdGg9IjEuMDcxOCIgaGVpZ2h0PSIxLjA5NDQiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CgkJCTxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjIuMDUzNDk2NiIvPgoJCTwvZmlsdGVyPgoJCTxmaWx0ZXIgaWQ9ImwiIHg9Ii0uMDM1OTIyIiB5PSItLjA0NzIxMSIgd2lkdGg9IjEuMDcxOCIgaGVpZ2h0PSIxLjA5NDQiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CgkJCTxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjIuMTg1OTg3NSIvPgoJCTwvZmlsdGVyPgoJPC9kZWZzPgoJPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTkuMDQ0IDUzLjQ5MSkiPgoJCTxwYXRoIGQ9Im0tOC44MDY4IDI2LjA4MmMtMy4wMzI4LTM1LjM1MyAyOC43MTItNjIuMTY3IDY0LjY1My02NC4wMTcgMjIuOTg5LTIuNTkzMiA2Ni44MTkgOS4wNDY5IDgyLjk1NSA0Ni4yOTMtMS4yODAxLTIxLjkyMy0yNS45NjctNjguMjkxLTEwOC43OC00OS4yOTMtMjUuMzc2IDguMjg5Mi01MS4zMzYgMzUuMzQ3LTQxLjQxMSA2My41NTZ6IiBmaWxsPSIjOTk5Ii8+CgkJPGVsbGlwc2UgY3g9IjYzLjgzMiIgY3k9IjEzLjY5NyIgcng9Ijc1LjgwNyIgcnk9IjU3LjY3OSIgZmlsbD0iI2IzYjNiMyIgZmlsbC1vcGFjaXR5PSIuNDQyMTUiLz4KCQk8cGF0aCBkPSJtNjIuNzU1LTQ3LjQ3MmE3Ny43ODQgNTkuMTgzIDAgMCAwIC03Ny43ODMgNTkuMTgzIDc3Ljc4NCA1OS4xODMgMCAwIDAgNzcuNzgzIDU5LjE4MyA3Ny43ODQgNTkuMTgzIDAgMCAwIDc3Ljc4NCAtNTkuMTgzIDc3Ljc4NCA1OS4xODMgMCAwIDAgLTc3Ljc4NCAtNTkuMTgzem0wLjEyNjEgMi4xMDI3YTc1LjgxNyA1Ny42ODcgMCAwIDEgNzUuODE3IDU3LjY4NiA3NS44MTcgNTcuNjg3IDAgMCAxIC03NS44MTcgNTcuNjg3IDc1LjgxNyA1Ny42ODcgMCAwIDEgLTc1LjgxNyAtNTcuNjg3IDc1LjgxNyA1Ny42ODcgMCAwIDEgNzUuODE3IC01Ny42ODZ6IiBmaWxsPSIjODA4MDgwIi8+CgkJPGVsbGlwc2UgY3g9IjYzLjYxMSIgY3k9IjE3LjE4OCIgcng9IjczLjAyNSIgcnk9IjU1LjU2MiIgZmlsbD0iI2IzYjNiMyIgZmlsbC1vcGFjaXR5PSIuNTUzNzIiIGZpbHRlcj0idXJsKCNsKSIvPgoJCTxwYXRoIGQ9Im0xMzkuNDMgMTguMjI0Yy0xLjEyMjUgMzYuMDg2LTMzLjMxMyA2My4xMjUtNzUuMzMxIDYzLjEyNS00Mi4wMTcgMC03Ny45NS0zNC43MS03Ny45NS02Ni42NzkgNy4yOTY1IDIxLjUzOCAyNS4xMTEgNTIuMTA4IDc4LjY5OCA1Mi4zMDkgNTMuOTYyLTIuNjA1NCA2OS45MDUtMzQuODg3IDc0LjU4Mi00OC43NTR6IiBmaWxsPSIjODA4MDgwIi8+CgkJPGVsbGlwc2UgY3g9IjYwLjQ5NiIgY3k9IjEyLjEyOSIgcng9IjY4LjU5OSIgcnk9IjUyLjE5NSIgZmlsbD0iI2VjZWNlYyIgZmlsbC1vcGFjaXR5PSIuNTQ1NDUiIGZpbHRlcj0idXJsKCNtKSIvPgoJCTxlbGxpcHNlIHRyYW5zZm9ybT0ibWF0cml4KC45MTQ2MSAtLjUzNjUyIC41MzY1MiAuOTE0NjEgLTg5NC4zNCA0NDguMjkpIiBjeD0iOTY5Ljk1IiBjeT0iNjMuNzI0IiByeD0iMjguNDQzIiByeT0iMTIuNDM1IiBmaWxsPSIjZmZmIiBmaWxsLW9wYWNpdHk9Ii44MDE2NSIgZmlsdGVyPSJ1cmwoI2spIi8+CgkJPHBhdGggZD0ibTg2LjU0NSA3NS4wODYgMy42NjU0IDUuMjU0OCAyLjAwNDggMS42ODM3IDIuMDkxMSAwLjc2Mzg1IDAuOTQ2NiAwLjQ0MTc0IDkuMjMyMyAxMy43MzQgMS4xMDUyIDUuNDI2NSA2Mi43MTIgODkuOTA3YzguMTA1IDkuNjI1MiAyOC45OTUgMTIuMDIgMzIuMzM3LTMuMDkwNiAzLjE1MzItMTMuMTg1LTkuNDY5Mi0yMS42NTItMTYuNDY3LTMwLjc0OC0xOS41NDgtMjIuMzU4LTQ3LjU3LTU1LjE3OS01OC4yODgtNjcuNDQ1LTMuNTc0My0yLjIxMjQtMy4wOTY5LTAuOTY3NTUtNS45NDg3LTMuMjQ2Ni0yLjg1MTktMi4yNzkxLTcuNDI5Mi04LjAxODgtMTAuMjAyLTExLjEyOC0wLjgzNjMtMC45Mzc4Ny0wLjE5ODQtNC4xMDIyLTAuOTg4NS00Ljk4NTktMi41OTg4LTIuOTA2Ny00LjkwMy01LjQ3MTEtNi42MTkzLTcuMzY4NS02Ljc2NjctNC4xOTItMTguMTk3IDIuNDc2MS0xNS41ODIgMTAuODAyeiIgZmlsbD0iIzY2NiIvPgoJCTxnIGZpbGw9IiM0ZDRkNGQiPgoJCQk8cGF0aCBkPSJtMTEzLjQ5IDk0LjI2MmMzLjUwNzEgOS4xNTc4IDYuMDYwNiAxOC44NjUgMTAuODM0IDI3LjQzMiA2Ljg4NTggMTAuMTY2IDEyLjYyNCAyMS4yMzMgMjEuNDE2IDI5Ljk0NyA1LjUyNDggNS44Mzk1IDEwLjIwOSAxMi42NjggMTcuMzU4IDE2LjY2NCA1Ljk5MyA2LjI1NCAxNC45MjUgNS41MDU2IDIxLjk5MSA5LjQ3MTIgNy4xMjEzIDIuNDAzOCAxNi4yMTUgMTIuMjIgMTAuNDQgMTkuMTk3LTguMjk5MiA1Ljk1NjItMTkuOTU3IDIuNDY3Mi0yNi44NDMtNC4xNDItNi41OTU5LTguMjQ1Mi0xMi4xODUtMTcuNDA5LTE4LjM5LTI2LjAxLTE0Ljg4OC0yMS41MDUtMjkuNzEtNDMuMDc2LTQ0LjU5OC02NC41OCAxLjMyMjQtMy44ODcgMy40MjM2LTYuNjg0NiA3Ljc5MTYtNy45Nzg3eiIgZmlsdGVyPSJ1cmwoI2cpIi8+CgkJCTxwYXRoIGQ9Im0xMDguNDMgNzIuMTg2Yy0yLjA0NzctMC40OTI2NS00LjEyNDItMS4yMTE1LTYuMjQyNS0wLjY0OTA3LTIuODIxNiAwLjI1ODIzLTUuMjYxOSAxLjkyMjMtNy4xMjgyIDMuOTY2Ni0xLjA5NDggMC45MjI5MyAxLjU3NS0wLjM3OTc2IDIuMTg4NC0wLjQxOCAyLjA4ODItMC41MTk4NSA0LjI5MDItMC40OTI3MiA2LjQyNDctMC4zMTQ5MyAzLjAyNTUgMC4yMTIyMSA1LjMzMDUgMi4zMTc3IDcuNTYzNiA0LjEzNTIgMC42MTI0IDAuNDkyMzYgMS42OTg4IDEuMjIzMiAwLjU1MiAwLjE5MjkyLTAuODQ4NS0xLjE4MjYtMi41OTM1LTEuOTIwNC0yLjg3NjctMy4zODM0LTAuMTYwNC0xLjE3NjQtMC4zMjA5LTIuMzUyOC0wLjQ4MTMtMy41MjkyeiIgZmlsdGVyPSJ1cmwoI2gpIi8+CgkJCTxwYXRoIGQ9Im0xMTguMzUgODYuMjE3Yy0yLjQzODggMC4wMjQtNC45NzU3LTAuMjc1MjYtNy4yNTQ3IDAuODEzNzYtMi43MDYzIDAuODYzNzEtNC44OTc1IDIuMDc2MS04LjI3MzYgMS45OTI2LTEuMDk4NS0wLjE4MjktMi4zNTk0LTEuMTY2Mi0zLjgzMjUtMi4zNTM0LTEuNTU4My0xLjI1NTgtMy4yMjE1LTMuMjE1My0zLjY5NS0zLjMyMjIgMi45MTQ1IDQuNDE3NSA2LjEwOTYgOS4wMjIyIDkuMDI0MiAxMy40NCAwLjM1NSAxLjU2MTUgMC43MTQ4IDQuOTY2OCAxLjMwMjEgNS42NjI4IDIuNTQzOS0zLjI1NDcgNS4wMTgzLTYuNzQ4IDguNzIzMy04Ljc3OTggMi42ODQ4LTEuNDkyNiA1LjUwOTgtMy40MDAyIDguNzQ1MS0yLjk1NDQgMC45MDg5IDAuMTMyOTUgMy4zOTA3IDAuMjE4NDEgMS4xNTQ5LTAuNTU4MS0yLjEwODctMS4wNjU2LTQuMzA2NS0yLjEzNTUtNS44OTM4LTMuOTQxeiIgZmlsdGVyPSJ1cmwoI2kpIi8+CgkJPC9nPgoJCTxlbGxpcHNlIGN4PSIxODguMTMiIGN5PSIxODUuMTciIHJ4PSI3LjAxMTUiIHJ5PSI3LjE0MzciIGZpbGw9IiM5OTkiIGZpbHRlcj0idXJsKCNqKSIvPgoJCTxnIGZpbGw9IiNiM2IzYjMiPgoJCQk8cGF0aCBkPSJtMTI1LjIgOTMuNTUxYy0xLjkxLTAuMjc5MjItMy43NTc3LTAuMDIwNi01LjU1NjMgMC42NjE0Ni0wLjg2MTcgMS4zMzE2LTAuODQ5MyAyLjUzNzkgMC40NDI5IDMuNTYwOSAxOS45NjEgMjUuNDQ4IDM5LjkyMSA1MC44OTYgNTkuODgyIDc2LjM0MyAyLjgwNzIgMC42MTM3IDUuNjEwMiAxLjQ4ODIgOC40MiAxLjkzOSAxLjU3MDQtMC4zNDM4MyAzLjQwMi0wLjQ4OTAzIDQuMzg1MS0xLjY3NzkgMC4zMDg3LTIuMTczOS0xLjkzMzctMy4zNDY5LTIuOTkxNS00Ljk3NDEtMjEuNTI4LTI1LjI4NC00My4wNTUtNTAuNTY4LTY0LjU4Mi03NS44NTN6IiBmaWx0ZXI9InVybCgjZikiLz4KCQkJPHBhdGggZD0ibTEwMy45MS0zMi4zOTFjNy4yMzI3IDEzLjM0OCAxMS44MiAzMC4wNjkgNi4wMTA0IDQ0LjY1LTguMjg4MiAxNi4yNTktMjQuNDQ0IDI3LjQ4NC00Mi42MjEgMjkuNTc1LTIwLjU0MSA1LjMzMTktNDMuNjc4IDUuNjI3OS02Mi4zMzUtNS41NDYzLTE3LjgyOC01LjEyNTQgNC40MzQ4IDE0LjgzNiAxMC4xNTkgMTcuNjQ0IDMxLjMyOSAxOS4yMjUgNzUuMDUyIDE2LjY0NyAxMDQuMDUtNS45NDA5IDEyLjE3Ni0xMC44MjggMjIuOTY0LTI2LjMyNSAxOC43OTQtNDMuNDQ4LTMuOTA5NS0yMi4yNTYtMjMuNzAzLTM4LjEwNC00NC4xMzQtNDUuMDYgMy4xMTc0IDMuMDA1NCA2Ljg3NzEgNS4yMTggMTAuMDc2IDguMTI3MXoiIGZpbGwtb3BhY2l0eT0iLjQwOTA5IiBmaWx0ZXI9InVybCgjZSkiLz4KCQkJPHBhdGggZD0ibTEwMi4wNyA3NC45OTJoNC40OTAybDIuOTkzNCAxLjY4MzggOC43OTMxIDkuOTE1Ny00LjExNTktMC45MzU0NC0yLjYxOTIgMS4zMDk2eiIgZmlsbC1vcGFjaXR5PSIuNDA5MDkiIGZpbHRlcj0idXJsKCNkKSIvPgoJCTwvZz4KCQk8Zz4KCQkJPHBhdGggZD0ibTk1Ljc3IDYyLjk5MiA2LjQxNjEgOC40MDA1IDIuOTEwNS0wLjA2NjEgMi4wNTA1IDAuMzMwNzMgMS45ODQ0IDAuNjYxNDYtMC4zOTY5LTAuNzkzNzUtNi40MTYyLTcuMjA5OS0xLjM4OS0wLjcyNzYxLTIuMjQ5LTAuNTI5MTYtMS4wNTgzLTAuMDY2MnoiIGZpbGw9InVybCgjYikiIGZpbHRlcj0idXJsKCNjKSIvPgoJCQk8cGF0aCBkPSJtLTE0LjM2MyAxNC4xNzYgMC43OTM3NSAxMC4wNTQgNS4wMjcxIDExLjY0MiA1LjAyNzEgMTAuMDU0IDkuNzg5NiAxMC44NDggMTIuNDM1IDEwLjg0OCAxNC44MTcgNy42NzI5IDEyLjk2NSAzLjcwNDIgMTEuOTA2IDIuMTE2N2g4LjczMTJsMjAuNjM4LTIuNjQ1OCAxLjA1ODMtMS4wNTgzLTIuMzgxMy0zLjQzOTYgMC41MjkyLTUuODIwOCAzLjQzOTYtMi4zODEyIDMuNzA0Mi0yLjExNjcgNy45Mzc1LTQuNDk3OS0xNS4wODEgNC43NjI1LTE3LjcyNyAzLjE3NS0yMC42MzgtMS4wNTgzLTE2LjY2OS0zLjcwNDItMTYuOTMzLTguMjAyMS0xMS4xMTItOC40NjY3LTExLjkwNi0xNi40MDR6IiBmaWxsPSJ1cmwoI2EpIi8+CgkJCTx0ZXh0IHRyYW5zZm9ybT0icm90YXRlKDUyLjY0MikiIHg9IjIyMS4yMzgzNCIgeT0iLTM0LjUzODExMyIgZG9taW5hbnQtYmFzZWxpbmU9ImF1dG8iIGZpbGw9IiM2NjY2NjYiIGZvbnQtZmFtaWx5PSInT3BlbiBTYW5zJyIgZm9udC1zaXplPSI4LjkxMDNweCIgbGV0dGVyLXNwYWNpbmc9IjBweCIgc3Ryb2tlLXdpZHRoPSIuMDQ2NDA4IiB0ZXh0LWFsaWduPSJjZW50ZXIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHdvcmQtc3BhY2luZz0iMHB4IiBzdHlsZT0iZm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDtmb250LXZhcmlhbnQtYWx0ZXJuYXRlczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1saWdhdHVyZXM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbDtmb250LXZhcmlhbnQtcG9zaXRpb246bm9ybWFsO2xpbmUtaGVpZ2h0OjEuMjU7c2hhcGUtcGFkZGluZzowO3RleHQtZGVjb3JhdGlvbi1jb2xvcjojMDAwMDAwO3RleHQtZGVjb3JhdGlvbi1saW5lOm5vbmU7dGV4dC1kZWNvcmF0aW9uLXN0eWxlOnNvbGlkO3RleHQtaW5kZW50OjA7dGV4dC1vcmllbnRhdGlvbjptaXhlZDt0ZXh0LXRyYW5zZm9ybTpub25lO3doaXRlLXNwYWNlOm5vcm1hbCIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHRzcGFuIHg9IjIyMS4yMzgzNCIgeT0iLTM0LjUzODExMyIgZmlsbD0iIzY2NjY2NiIgc3Ryb2tlLXdpZHRoPSIuMDQ2NDA4Ij5naW90b2hhc2hpPC90c3Bhbj48L3RleHQ+CgkJPC9nPgoJPC9nPgogIAogIDxhbmltYXRlVHJhbnNmb3JtIAogICAgYXR0cmlidXRlVHlwZT0ieG1sIgogICAgYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIgogICAgdHlwZT0icm90YXRlIiAKICAgIGZyb209IjAgMCAwIgogICAgdG89IjM2MCAwIDAiIAogICAgZHVyPSIyMi44cyIKICAgIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIgogIC8+IAo8L3N2Zz4="); width:0px; height:0px; padding:2.25em 2em 2.25em 2em; margin: 0 0.8em; background-repeat: no-repeat; line-height:100%; vertical-align:middle; color: rgba(0, 0, 0, 0); } img.noentry { display: inline-block; background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzMy4wNTQyMDcgMzMuMDQ0NzI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgoJPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTY5LjY1MSAtNjguODExKSI+CgkJPGNpcmNsZSBjeD0iODYuMzk1IiBjeT0iODUuMzQiIHI9IjE1Ljk0OSIgZmlsbD0iI2ZmZiIgb3BhY2l0eT0iLjc0MiIvPgoJCTxwYXRoIGQ9Im04My4zMDYgMTAxLjY4Yy0yLjI5MDItMC40MDg2NC00Ljg2NTItMS40OTg5LTYuNzktMi44NzQ5LTMuNTAwOC0yLjUwMjYtNS45NDE1LTYuNDIyNS02LjY5NzItMTAuNzU2LTAuMjIzMDEtMS4yNzg5LTAuMjIzMDEtNC4xNDUzIDAtNS40MjQyIDAuNDIzNTYtMi40Mjg5IDEuNDc1NC00Ljk1OTIgMi44ODE2LTYuOTMxOSAyLjQ5MTMtMy40OTQ5IDYuNDQ3LTUuOTYyNCAxMC43NjYtNi43MTU1IDEuMjc4OS0wLjIyMzAyIDQuMTQ1NC0wLjIyMzAyIDUuNDI0MiAwIDIuNDM2MiAwLjQyNDg0IDQuOTU3NyAxLjQ3NDggNi45NTA0IDIuODk0MiAzLjQ2ODQgMi40NzA2IDUuOTYxOSA2LjQ1NzQgNi42ODk5IDEwLjY5NiAwLjIzMDA0IDEuMzM5NiAwLjIzMzc4IDQuMTgxOSA4ZS0zIDUuNDgxMi0wLjM4NzA1IDIuMjE5NS0xLjM2ODcgNC43MjA2LTIuNTMxMiA2LjQ0OTItMi41ODEyIDMuODM4Mi02LjUzNyA2LjM5OTctMTEuMTE2IDcuMTk4My0xLjI1MjIgMC4yMTgzNi00LjMxODQgMC4yMDkxNC01LjU4NDYtMC4wMTczem0tMy45Mjc2LTUuODQ5NmMwLTAuNDY0NzEgMC4wNjQ1LTAuNDQxODMtMS4yODk3LTAuNDU3NDctMC41NDgxMi02ZS0zIC0xLjA2MjUtMC4wNTQzLTEuMTQzMS0wLjEwNjQxLTAuMTg3OTktMC4xMjE2LTAuMTkyNTYtMS4xNjA1LTZlLTMgLTEuMzQ3MiAwLjA3NzMtMC4wNzczIDAuNDQ2NjktMC4xNDA2NSAwLjgyMDY5LTAuMTQwNjVoMC42ODAwMXYtMC44MjA3aC0wLjY4OTA5Yy0wLjgyNjc2IDAtMC45ODA2OC0wLjEzOTMtMC45MzAxNi0wLjg0MTM0bDAuMDM2Ni0wLjUwNjk0IDAuOTM3OTUtMC4wMjk0YzEuMzg3NS0wLjA0MzcgMS40ODctMC4wODAyIDEuNDQzNC0wLjUzMTRsLTAuMDM2NC0wLjM3NzAyaC0zLjE2NTZsLTAuMDMxNCAyLjc4NDUtMC4wMzE0IDIuNzg0NWgzLjQwNDN6bTEuNzU4Ni0xLjI5OTRjMC0xLjI2NTMgMC4wMzYyLTEuNjk3OCAwLjEzODkyLTEuNjYzNSAwLjA3NjQgMC4wMjU0IDAuNTYxNTMgMC43OTQ4NiAxLjA3ODEgMS43MDk4IDAuOTEzMzMgMS42MTc1IDAuOTUwMDQgMS42NjM1IDEuMzI4OCAxLjY2MzVoMC4zODk0OWwtMC4wMzE0LTIuNzg0NS0wLjAzMTQtMi43ODQ1aC0wLjcwMzQ2bC0wLjA1ODcgMS41NTQxYy0wLjAzMjMgMC44NTQ3NS0wLjEwODUxIDEuNTU5Ni0wLjE2OTMyIDEuNTY2NC0wLjA2MSA4ZS0zIC0wLjUxMDY5LTAuNjkyNTctMC45OTk1LTEuNTU0MS0wLjg3MzQtMS41Mzk0LTAuODk1NzgtMS41NjY0LTEuMjk2Mi0xLjU2NjRoLTAuNDA3NGwtMC4wMzE0IDIuNzg0NS0wLjAzMTQgMi43ODQ1aDAuODI0OTN6bTUuOTc5NC0wLjY5MzY5IDAuMDU4Ny0yLjM0NDkgMC41ODYyMy0wLjA1ODdjMC41NjAxNi0wLjA1NiAwLjU4NjIxLTAuMDc0MyAwLjU4NjIxLTAuNDEwMzV2LTAuMzUxNzJsLTEuNjYxOC0wLjAzMjVjLTEuNTkzMS0wLjAzMTItMS42NjUtMC4wMjI1LTEuNzM5IDAuMjEwOC0wLjExODMzIDAuMzcyOTkgMC4xNDEwNCAwLjU4Mzc1IDAuNzE4NTkgMC41ODM3NWgwLjUxMzIzdjIuMzI1M2MwIDEuMjc4OSAwLjAzNzcgMi4zNjMgMC4wODM3IDIuNDA5IDAuMDQ2IDAuMDQ2IDAuMjQzODkgMC4wNjgxIDAuNDM5NjcgMC4wNDg5bDAuMzU1OTQtMC4wMzQ4em0zLjA0ODMgMS4xNzI0IDAuMDU4Ny0xLjE3MjQgMC40MjAzNy0wLjAzNTJjMC4yNDM0LTAuMDIwNCAwLjQ3NDAyIDAuMDI5NCAwLjU0Nzc1IDAuMTE4MzQgMC4wNyAwLjA4NDUgMC4zMDQxOCAwLjYyNzg0IDAuNTIwMjcgMS4yMDc2IDAuMzkxNzMgMS4wNTExIDAuMzk0MTkgMS4wNTQzIDAuODI5ODQgMS4wOTA2IDAuNTM2MzIgMC4wNDQ2IDAuNTQwNzEtNmUtMyAwLjEwMTAxLTEuMTUyOS0wLjUyODg5LTEuMzc5OC0wLjUyNDA4LTEuMzE3OS0wLjEzNTQ1LTEuNzUzIDAuNTUwMjUtMC42MTYzNCAwLjYwNTQzLTEuMzg2NiAwLjE0OTExLTIuMDgyOS0wLjMwNDEtMC40NjQwOS0wLjgyOTM1LTAuNjE2NjMtMi4xMjM0LTAuNjE2NjMtMC45NTI5NSAwLTEuMTc2NSAwLjAzMzctMS4yMzQ4IDAuMTg1NDgtMC4xMDA2MyAwLjI2MjI0LTAuMDg4OSA1LjI2ODEgMC4wMTM1IDUuMzY5NiAwLjA0NiAwLjA0NiAwLjI0Mzg4IDAuMDY3OSAwLjQzOTY2IDAuMDQ4OWwwLjM1NTkzLTAuMDM0OHptMC4wNDc1LTIuMjE0MmMtMC4wMzQzLTAuMDg5My0wLjA0NTgtMC4zOTI3MS0wLjAyNTYtMC42NzQxNGwwLjAzNjctMC41MTE2OSAwLjcxOTE0LTAuMDM0NmMwLjU0MDI1LTAuMDI2IDAuNzY2MjkgMC4wMTM1IDAuOTA4NjMgMC4xNTQ4OSAwLjI3ODA1IDAuMjc4MDcgMC4yNDA3MiAwLjgyNzAxLTAuMDcxIDEuMDQ1NC0wLjMzNjk0IDAuMjM2MDEtMS40NzkzIDAuMjUwNjItMS41Njc4IDAuMDJ6bTYuMzc1NiAyLjE4MTEgMC4wMzM1LTEuMjA1NiAwLjg3NTE3LTEuNDM4MmMwLjQ4MTM1LTAuNzkxMDMgMC44NzUxOS0xLjUwNDcgMC44NzUxOS0xLjU4NiAwLTAuMDk5MS0wLjE0NDY5LTAuMTM1ODQtMC40Mzg5NC0wLjExMTQtMC4zOTgxOSAwLjAzMzEtMC40ODQzNyAwLjEwNzE3LTAuOTI4MjcgMC43OTg0Ni0wLjI2OTE1IDAuNDE5MTYtMC41NzI4MiAwLjg2NzYtMC42NzQ4OCAwLjk5NjU4bC0wLjE4NTQ4IDAuMjM0NDYtMC4xODU0OC0wLjIzNDQ2Yy0wLjEwMTk4LTAuMTI4OTItMC40MDU3My0wLjU3NzQyLTAuNjc0ODctMC45OTY1OC0wLjQ0MzkxLTAuNjkxMzMtMC41MzAwOS0wLjc2NTQ0LTAuOTI4MjgtMC43OTg0Ni0wLjMxMzI2LTAuMDI2LTAuNDM4OTQgMC4wMS0wLjQzODk0IDAuMTI2MDMgMCAwLjA4OTMgMC4zOTU3MSAwLjgwMDIgMC44NzkzMyAxLjU3OThsMC44NzkzMiAxLjQxNzV2MS4xNjI5YzAgMC42Mzk2MSAwLjAzNzcgMS4yMDA2IDAuMDgzNyAxLjI0NjYgMC4wNDYgMC4wNDYgMC4yNDM4OCAwLjA2ODEgMC40Mzk2NSAwLjA0ODlsMC4zNTU5Ni0wLjAzNDh6bTMuNjM2Mi02LjczMThjMC4xNDg3NC0wLjE0ODczIDAuMjExMzgtNC45MzE4IDAuMDY5NS01LjMwMTUtMC4wNjQzLTAuMTY3NTktMS40MTctMC4xODU0OC0xNC4xMTUtMC4xODU0OC0xMi42OTggMC0xNC4wNTEgMC4wMTczLTE0LjExNSAwLjE4NTQ4LTAuMTI0MyAwLjMyMzktMC4wNzk1IDQuOTczIDAuMDUwMiA1LjIxNTQgMC4xMTg5MSAwLjIyMjI1IDAuMzk5MTIgMC4yMjY3OSAxNC4wNDYgMC4yMjY3OSAxMC42NzQgMCAxMy45NTctMC4wMzI5IDE0LjA2NS0wLjE0MDY1em0tMTAuNDQtOC40OTYyYzAuNzAwNzctMC41MjMyIDEuMDYyNC0xLjkyOTYgMC44NDUzNy0zLjI4OC0wLjIxNjIxLTEuMzUzMy0wLjg0MTIxLTIuMDI1Ny0xLjg4MzktMi4wMjY1LTEuMDcxLTllLTQgLTEuODAyMyAwLjg4Njc1LTEuOTM5MyAyLjM1MzYtMC4xMzQzIDEuNDM4OSAwLjMxMTM4IDIuNjQ4NyAxLjEzMjkgMy4wNzQ5IDAuNTExMjUgMC4yNjUyNCAxLjQxMTUgMC4yMDk1OSAxLjg0NDktMC4xMTM5em0tMS42NDUxLTAuODMwNjVjLTAuMzExNDktMC4zNDQxOC0wLjQzNjY3LTAuODI2MzctMC40MzY2Ny0xLjY4MTkgMC0wLjk0OTY1IDAuMjA1MzUtMS41Mjg3IDAuNjQ0MTItMS44MTYyIDAuNjY0MjctMC40MzUyNCAxLjMyODIgMC4xODA0OCAxLjQzMjMgMS4zMjgzIDAuMTM5MTEgMS41MzMyLTAuMjM1NDEgMi4zNzUyLTEuMDU2MyAyLjM3NTItMC4yMjk4MyAwLTAuNDc1OS0wLjA4NjYtMC41ODMzOC0wLjIwNTR6bS01LjY2NjUgMC44NDA2NGMwLjAzOTEtMC4xMDE5OCAwLjA3MTItMC44NDA2MiAwLjA3MTItMS42NDE0IDAtMC44MDA3NyAwLjAzOTYtMS40NTU5IDAuMDg3OS0xLjQ1NTcgMC4wNDgzIDllLTUgMC40OTEzOSAwLjcyNTUzIDAuOTg0NSAxLjYxMjEgMC44MjcwOSAxLjQ4NyAwLjkyNDc1IDEuNjE0OCAxLjI2MDQgMS42NDg2IDAuMjAwMzggMC4wMjAyIDAuMzY1NDgtMC4wMTkyIDAuMzY3NTQtMC4wODc5IDJlLTMgLTAuMDY4NSA0ZS0zIC0xLjIzMjYgNGUtMyAtMi41ODY4IDAtMS4zNTQyLTJlLTMgLTIuNTE4Mi00ZS0zIC0yLjU4NjgtMmUtMyAtMC4wNjk1LTAuMTcyMjEtMC4xMDg1Mi0wLjM4NDc4LTAuMDg3OWwtMC4zODEwMiAwLjAzNjctMC4wMzI3IDEuNDk0OGMtMC4wMTczIDAuODIyMTYtMC4wNzM5IDEuNDk0OC0wLjEyMzkyIDEuNDk0OC0wLjA1MDIgMC0wLjQ2NTEyLTAuNjcyNjgtMC45MjIxOS0xLjQ5NDgtMC43NzY1OC0xLjM5Ny0wLjg1NTk3LTEuNDk3NC0xLjIxMi0xLjUzMjktMC4yMjU0Ni0wLjAyMjUtMC40MjExNiAwLjAyNTQtMC40Nzk0MiAwLjExNzE3LTAuMTExNzkgMC4xNzY0NC0wLjEzOTg4IDQuNzg1Ny0wLjAzMDggNS4wNjk4IDAuMDQxNCAwLjEwNzc1IDAuMjA4MTEgMC4xODU0OCAwLjM5NzgxIDAuMTg1NDggMC4xODk3MSAwIDAuMzU2NDktMC4wNzc3IDAuMzk3ODItMC4xODU0OHoiIGZpbGw9IiNlYzIyMjkiIHN0cm9rZS13aWR0aD0iLjExNzI0Ii8+Cgk8L2c+Cjwvc3ZnPgo="); width:0px; height:0px; padding:2.25em 2em 2.25em 2em; margin: 0 0.8em; background-repeat: no-repeat; line-height:100%; vertical-align:middle; font-size: 20pt; color: rgba(0, 0, 0, 0); } div.searchbg { background-repeat: no-repeat; background-image: url("dorian-gray-wikipedia.jpg"); background-position: left top; width: 561px; height: 844px; padding: 10px; padding-top: 20px; text-align:center; } table.searchtable { position:relative; display:inline-table; padding-top: 6px; } div.acomplete { position:absolute; display:block; float:right; text-align:left; background-color: #aaa; font-size: 12pt; max-height: 50vh; right:0px; margin: 0px; padding: 0px 1px; overflow:auto; opacity: 0; z-index: 4; border: 1px solid gray; border-radius: 3px; background-color: white; white-space: nowrap; box-shadow: 0px 5px 15px gray; transition: opacity 0.3s; font-weight:normal } div.acomplete ul { list-style-type: none; padding: 0px 2px; cursor: pointer; } div.acomplete ul li { margin: 2px; padding: 1px; font-size: 14px; left: 0px; } div.acomplete ul li:hover { background-color: lightblue; } div.acomplete ul li:active { background-color: blue; color: white; } div.searchresults { position:absolute; display:block; float:right; text-align:left; font-size: 9pt; width: 100%; max-height: 600px; left:0px; margin: 4px 20px; margin-top: 24px; padding: 0px 20px; overflow: scroll; opacity: 0; z-index: 3; border: 1px solid gray; border-radius: 3px; background-color: rgba(255,255,255,0.7); white-space: nowrap; box-shadow: 0px 5px 15px gray; transition: opacity 0.3s; font-weight:normal; } div.filepath { font-size: 14pt; padding: 12px 0px; } input.viable { color: #000 } input.nonviable { color: #aaa } td.searchboxtitle { text-align:right; font-size: 15pt; } td.r { text-align:right; color: #aaa; width:99%; } lws-fts.js000066400000000000000000000133111476025525100354420ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-fulltext-search/mount-origin/* lws-fts.js - JS supporting lws fulltext search * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ (function() { var last_ac = ""; function san(s) { s.replace(/"; s += ""; for (m = 0; m < jj.fp[n].hits.length; m++) s += ""; s += "
    " + jj.fp[n].hits[m].l + "" + jj.fp[n].hits[m].s + "
    "; } } sr.innerHTML = s; }; inp.blur(); ac.style.opacity = "0"; sr.style.innerHTML = ""; xhr.open("GET", "../fts/r/" + document.getElementById("lws_fts").value); xhr.send(); } function lws_fts_ac_select(e) { var t = e.target; while (t) { if (t.getAttribute && t.getAttribute("string")) { document.getElementById("lws_fts").value = t.getAttribute("string"); lws_fts_choose(); } t = t.parentNode; } } function lws_fts_search_input() { var ac = document.getElementById("acomplete"), sb = document.getElementById("lws_fts"); if (last_ac === sb.value) return; last_ac = sb.value; ac.style.width = (parseInt(sb.offsetWidth, 10) - 2) + "px"; ac.style.opacity = "1"; /* detect loss of focus for popup menu */ sb.addEventListener("focusout", function(e) { ac.style.opacity = "0"; }); var xhr = new XMLHttpRequest(); xhr.onopen = function(e) { xhr.setRequestHeader("cache-control", "max-age=0"); }; xhr.onload = function(e) { var jj, n, s = "", lic = 0; var inp = document.getElementById("lws_fts"); var ac = document.getElementById("acomplete"); // console.log(xhr.responseText); jj = JSON.parse(xhr.responseText); switch(parseInt(jj.indexed, 10)) { case 0: /* there is no index */ break; case 1: /* yay there is an index */ if (jj.ac) { lic = jj.ac.length; s += ""; if (!lic) { //s = ""; inp.className = "nonviable"; ac.style.opacity = "0"; } else { inp.className = "viable"; ac.style.opacity = "1"; } } break; default: /* an index is being built... */ s = "
    " + "
    Indexing
    " + "
    " + "
    " + jj.index_done + " / " + jj.index_files + "
    " + "
    "; setTimeout(lws_fts_search_input, 300); break; } ac.innerHTML = s; for (n = 0; n < lic; n++) if (document.getElementById("mi_ac" + n)) document.getElementById("mi_ac" + n). addEventListener("click", lws_fts_ac_select); if (jj.index_files) { document.getElementById("bar2").style.width = ((150 * jj.index_done) / (jj.index_files + 1)) + "px"; } }; xhr.open("GET", "../fts/a/" + document.getElementById("lws_fts").value); xhr.send(); } document.addEventListener("DOMContentLoaded", function() { var inp = document.getElementById("lws_fts"); inp.addEventListener("input", lws_fts_search_input, false); inp.addEventListener("keydown", function(e) { var inp = document.getElementById("lws_fts"); var sr = document.getElementById("searchresults"); var ac = document.getElementById("acomplete"); if (e.key === "Enter" && inp.className === "viable") { lws_fts_choose(); sr.focus(); ac.style.opacity = "0"; } }, false); }, false); }()); strict-csp.svg000066400000000000000000000302361476025525100363260ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-fulltext-search/mount-origin the-picture-of-dorian-gray.txt000066400000000000000000016063731476025525100367050ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-fulltext-searchThe Project Gutenberg EBook of The Picture of Dorian Gray, by Oscar Wilde This eBook is for the use of anyone anywhere at no cost and with almost no restrictions whatsoever. You may copy it, give it away or re-use it under the terms of the Project Gutenberg License included with this eBook or online at www.gutenberg.net Title: The Picture of Dorian Gray Author: Oscar Wilde Release Date: June 9, 2008 [EBook #174] [This file last updated on July 2, 2011] [This file last updated on July 23, 2014] Language: English *** START OF THIS PROJECT GUTENBERG EBOOK THE PICTURE OF DORIAN GRAY *** Produced by Judith Boss. HTML version by Al Haines. The Picture of Dorian Gray by Oscar Wilde THE PREFACE The artist is the creator of beautiful things. To reveal art and conceal the artist is art's aim. The critic is he who can translate into another manner or a new material his impression of beautiful things. The highest as the lowest form of criticism is a mode of autobiography. Those who find ugly meanings in beautiful things are corrupt without being charming. This is a fault. Those who find beautiful meanings in beautiful things are the cultivated. For these there is hope. They are the elect to whom beautiful things mean only beauty. There is no such thing as a moral or an immoral book. Books are well written, or badly written. That is all. The nineteenth century dislike of realism is the rage of Caliban seeing his own face in a glass. The nineteenth century dislike of romanticism is the rage of Caliban not seeing his own face in a glass. The moral life of man forms part of the subject-matter of the artist, but the morality of art consists in the perfect use of an imperfect medium. No artist desires to prove anything. Even things that are true can be proved. No artist has ethical sympathies. An ethical sympathy in an artist is an unpardonable mannerism of style. No artist is ever morbid. The artist can express everything. Thought and language are to the artist instruments of an art. Vice and virtue are to the artist materials for an art. From the point of view of form, the type of all the arts is the art of the musician. From the point of view of feeling, the actor's craft is the type. All art is at once surface and symbol. Those who go beneath the surface do so at their peril. Those who read the symbol do so at their peril. It is the spectator, and not life, that art really mirrors. Diversity of opinion about a work of art shows that the work is new, complex, and vital. When critics disagree, the artist is in accord with himself. We can forgive a man for making a useful thing as long as he does not admire it. The only excuse for making a useless thing is that one admires it intensely. All art is quite useless. OSCAR WILDE CHAPTER 1 The studio was filled with the rich odour of roses, and when the light summer wind stirred amidst the trees of the garden, there came through the open door the heavy scent of the lilac, or the more delicate perfume of the pink-flowering thorn. From the corner of the divan of Persian saddle-bags on which he was lying, smoking, as was his custom, innumerable cigarettes, Lord Henry Wotton could just catch the gleam of the honey-sweet and honey-coloured blossoms of a laburnum, whose tremulous branches seemed hardly able to bear the burden of a beauty so flamelike as theirs; and now and then the fantastic shadows of birds in flight flitted across the long tussore-silk curtains that were stretched in front of the huge window, producing a kind of momentary Japanese effect, and making him think of those pallid, jade-faced painters of Tokyo who, through the medium of an art that is necessarily immobile, seek to convey the sense of swiftness and motion. The sullen murmur of the bees shouldering their way through the long unmown grass, or circling with monotonous insistence round the dusty gilt horns of the straggling woodbine, seemed to make the stillness more oppressive. The dim roar of London was like the bourdon note of a distant organ. In the centre of the room, clamped to an upright easel, stood the full-length portrait of a young man of extraordinary personal beauty, and in front of it, some little distance away, was sitting the artist himself, Basil Hallward, whose sudden disappearance some years ago caused, at the time, such public excitement and gave rise to so many strange conjectures. As the painter looked at the gracious and comely form he had so skilfully mirrored in his art, a smile of pleasure passed across his face, and seemed about to linger there. But he suddenly started up, and closing his eyes, placed his fingers upon the lids, as though he sought to imprison within his brain some curious dream from which he feared he might awake. "It is your best work, Basil, the best thing you have ever done," said Lord Henry languidly. "You must certainly send it next year to the Grosvenor. The Academy is too large and too vulgar. Whenever I have gone there, there have been either so many people that I have not been able to see the pictures, which was dreadful, or so many pictures that I have not been able to see the people, which was worse. The Grosvenor is really the only place." "I don't think I shall send it anywhere," he answered, tossing his head back in that odd way that used to make his friends laugh at him at Oxford. "No, I won't send it anywhere." Lord Henry elevated his eyebrows and looked at him in amazement through the thin blue wreaths of smoke that curled up in such fanciful whorls from his heavy, opium-tainted cigarette. "Not send it anywhere? My dear fellow, why? Have you any reason? What odd chaps you painters are! You do anything in the world to gain a reputation. As soon as you have one, you seem to want to throw it away. It is silly of you, for there is only one thing in the world worse than being talked about, and that is not being talked about. A portrait like this would set you far above all the young men in England, and make the old men quite jealous, if old men are ever capable of any emotion." "I know you will laugh at me," he replied, "but I really can't exhibit it. I have put too much of myself into it." Lord Henry stretched himself out on the divan and laughed. "Yes, I knew you would; but it is quite true, all the same." "Too much of yourself in it! Upon my word, Basil, I didn't know you were so vain; and I really can't see any resemblance between you, with your rugged strong face and your coal-black hair, and this young Adonis, who looks as if he was made out of ivory and rose-leaves. Why, my dear Basil, he is a Narcissus, and you--well, of course you have an intellectual expression and all that. But beauty, real beauty, ends where an intellectual expression begins. Intellect is in itself a mode of exaggeration, and destroys the harmony of any face. The moment one sits down to think, one becomes all nose, or all forehead, or something horrid. Look at the successful men in any of the learned professions. How perfectly hideous they are! Except, of course, in the Church. But then in the Church they don't think. A bishop keeps on saying at the age of eighty what he was told to say when he was a boy of eighteen, and as a natural consequence he always looks absolutely delightful. Your mysterious young friend, whose name you have never told me, but whose picture really fascinates me, never thinks. I feel quite sure of that. He is some brainless beautiful creature who should be always here in winter when we have no flowers to look at, and always here in summer when we want something to chill our intelligence. Don't flatter yourself, Basil: you are not in the least like him." "You don't understand me, Harry," answered the artist. "Of course I am not like him. I know that perfectly well. Indeed, I should be sorry to look like him. You shrug your shoulders? I am telling you the truth. There is a fatality about all physical and intellectual distinction, the sort of fatality that seems to dog through history the faltering steps of kings. It is better not to be different from one's fellows. The ugly and the stupid have the best of it in this world. They can sit at their ease and gape at the play. If they know nothing of victory, they are at least spared the knowledge of defeat. They live as we all should live--undisturbed, indifferent, and without disquiet. They neither bring ruin upon others, nor ever receive it from alien hands. Your rank and wealth, Harry; my brains, such as they are--my art, whatever it may be worth; Dorian Gray's good looks--we shall all suffer for what the gods have given us, suffer terribly." "Dorian Gray? Is that his name?" asked Lord Henry, walking across the studio towards Basil Hallward. "Yes, that is his name. I didn't intend to tell it to you." "But why not?" "Oh, I can't explain. When I like people immensely, I never tell their names to any one. It is like surrendering a part of them. I have grown to love secrecy. It seems to be the one thing that can make modern life mysterious or marvellous to us. The commonest thing is delightful if one only hides it. When I leave town now I never tell my people where I am going. If I did, I would lose all my pleasure. It is a silly habit, I dare say, but somehow it seems to bring a great deal of romance into one's life. I suppose you think me awfully foolish about it?" "Not at all," answered Lord Henry, "not at all, my dear Basil. You seem to forget that I am married, and the one charm of marriage is that it makes a life of deception absolutely necessary for both parties. I never know where my wife is, and my wife never knows what I am doing. When we meet--we do meet occasionally, when we dine out together, or go down to the Duke's--we tell each other the most absurd stories with the most serious faces. My wife is very good at it--much better, in fact, than I am. She never gets confused over her dates, and I always do. But when she does find me out, she makes no row at all. I sometimes wish she would; but she merely laughs at me." "I hate the way you talk about your married life, Harry," said Basil Hallward, strolling towards the door that led into the garden. "I believe that you are really a very good husband, but that you are thoroughly ashamed of your own virtues. You are an extraordinary fellow. You never say a moral thing, and you never do a wrong thing. Your cynicism is simply a pose." "Being natural is simply a pose, and the most irritating pose I know," cried Lord Henry, laughing; and the two young men went out into the garden together and ensconced themselves on a long bamboo seat that stood in the shade of a tall laurel bush. The sunlight slipped over the polished leaves. In the grass, white daisies were tremulous. After a pause, Lord Henry pulled out his watch. "I am afraid I must be going, Basil," he murmured, "and before I go, I insist on your answering a question I put to you some time ago." "What is that?" said the painter, keeping his eyes fixed on the ground. "You know quite well." "I do not, Harry." "Well, I will tell you what it is. I want you to explain to me why you won't exhibit Dorian Gray's picture. I want the real reason." "I told you the real reason." "No, you did not. You said it was because there was too much of yourself in it. Now, that is childish." "Harry," said Basil Hallward, looking him straight in the face, "every portrait that is painted with feeling is a portrait of the artist, not of the sitter. The sitter is merely the accident, the occasion. It is not he who is revealed by the painter; it is rather the painter who, on the coloured canvas, reveals himself. The reason I will not exhibit this picture is that I am afraid that I have shown in it the secret of my own soul." Lord Henry laughed. "And what is that?" he asked. "I will tell you," said Hallward; but an expression of perplexity came over his face. "I am all expectation, Basil," continued his companion, glancing at him. "Oh, there is really very little to tell, Harry," answered the painter; "and I am afraid you will hardly understand it. Perhaps you will hardly believe it." Lord Henry smiled, and leaning down, plucked a pink-petalled daisy from the grass and examined it. "I am quite sure I shall understand it," he replied, gazing intently at the little golden, white-feathered disk, "and as for believing things, I can believe anything, provided that it is quite incredible." The wind shook some blossoms from the trees, and the heavy lilac-blooms, with their clustering stars, moved to and fro in the languid air. A grasshopper began to chirrup by the wall, and like a blue thread a long thin dragon-fly floated past on its brown gauze wings. Lord Henry felt as if he could hear Basil Hallward's heart beating, and wondered what was coming. "The story is simply this," said the painter after some time. "Two months ago I went to a crush at Lady Brandon's. You know we poor artists have to show ourselves in society from time to time, just to remind the public that we are not savages. With an evening coat and a white tie, as you told me once, anybody, even a stock-broker, can gain a reputation for being civilized. Well, after I had been in the room about ten minutes, talking to huge overdressed dowagers and tedious academicians, I suddenly became conscious that some one was looking at me. I turned half-way round and saw Dorian Gray for the first time. When our eyes met, I felt that I was growing pale. A curious sensation of terror came over me. I knew that I had come face to face with some one whose mere personality was so fascinating that, if I allowed it to do so, it would absorb my whole nature, my whole soul, my very art itself. I did not want any external influence in my life. You know yourself, Harry, how independent I am by nature. I have always been my own master; had at least always been so, till I met Dorian Gray. Then--but I don't know how to explain it to you. Something seemed to tell me that I was on the verge of a terrible crisis in my life. I had a strange feeling that fate had in store for me exquisite joys and exquisite sorrows. I grew afraid and turned to quit the room. It was not conscience that made me do so: it was a sort of cowardice. I take no credit to myself for trying to escape." "Conscience and cowardice are really the same things, Basil. Conscience is the trade-name of the firm. That is all." "I don't believe that, Harry, and I don't believe you do either. However, whatever was my motive--and it may have been pride, for I used to be very proud--I certainly struggled to the door. There, of course, I stumbled against Lady Brandon. 'You are not going to run away so soon, Mr. Hallward?' she screamed out. You know her curiously shrill voice?" "Yes; she is a peacock in everything but beauty," said Lord Henry, pulling the daisy to bits with his long nervous fingers. "I could not get rid of her. She brought me up to royalties, and people with stars and garters, and elderly ladies with gigantic tiaras and parrot noses. She spoke of me as her dearest friend. I had only met her once before, but she took it into her head to lionize me. I believe some picture of mine had made a great success at the time, at least had been chattered about in the penny newspapers, which is the nineteenth-century standard of immortality. Suddenly I found myself face to face with the young man whose personality had so strangely stirred me. We were quite close, almost touching. Our eyes met again. It was reckless of me, but I asked Lady Brandon to introduce me to him. Perhaps it was not so reckless, after all. It was simply inevitable. We would have spoken to each other without any introduction. I am sure of that. Dorian told me so afterwards. He, too, felt that we were destined to know each other." "And how did Lady Brandon describe this wonderful young man?" asked his companion. "I know she goes in for giving a rapid _precis_ of all her guests. I remember her bringing me up to a truculent and red-faced old gentleman covered all over with orders and ribbons, and hissing into my ear, in a tragic whisper which must have been perfectly audible to everybody in the room, the most astounding details. I simply fled. I like to find out people for myself. But Lady Brandon treats her guests exactly as an auctioneer treats his goods. She either explains them entirely away, or tells one everything about them except what one wants to know." "Poor Lady Brandon! You are hard on her, Harry!" said Hallward listlessly. "My dear fellow, she tried to found a _salon_, and only succeeded in opening a restaurant. How could I admire her? But tell me, what did she say about Mr. Dorian Gray?" "Oh, something like, 'Charming boy--poor dear mother and I absolutely inseparable. Quite forget what he does--afraid he--doesn't do anything--oh, yes, plays the piano--or is it the violin, dear Mr. Gray?' Neither of us could help laughing, and we became friends at once." "Laughter is not at all a bad beginning for a friendship, and it is far the best ending for one," said the young lord, plucking another daisy. Hallward shook his head. "You don't understand what friendship is, Harry," he murmured--"or what enmity is, for that matter. You like every one; that is to say, you are indifferent to every one." "How horribly unjust of you!" cried Lord Henry, tilting his hat back and looking up at the little clouds that, like ravelled skeins of glossy white silk, were drifting across the hollowed turquoise of the summer sky. "Yes; horribly unjust of you. I make a great difference between people. I choose my friends for their good looks, my acquaintances for their good characters, and my enemies for their good intellects. A man cannot be too careful in the choice of his enemies. I have not got one who is a fool. They are all men of some intellectual power, and consequently they all appreciate me. Is that very vain of me? I think it is rather vain." "I should think it was, Harry. But according to your category I must be merely an acquaintance." "My dear old Basil, you are much more than an acquaintance." "And much less than a friend. A sort of brother, I suppose?" "Oh, brothers! I don't care for brothers. My elder brother won't die, and my younger brothers seem never to do anything else." "Harry!" exclaimed Hallward, frowning. "My dear fellow, I am not quite serious. But I can't help detesting my relations. I suppose it comes from the fact that none of us can stand other people having the same faults as ourselves. I quite sympathize with the rage of the English democracy against what they call the vices of the upper orders. The masses feel that drunkenness, stupidity, and immorality should be their own special property, and that if any one of us makes an ass of himself, he is poaching on their preserves. When poor Southwark got into the divorce court, their indignation was quite magnificent. And yet I don't suppose that ten per cent of the proletariat live correctly." "I don't agree with a single word that you have said, and, what is more, Harry, I feel sure you don't either." Lord Henry stroked his pointed brown beard and tapped the toe of his patent-leather boot with a tasselled ebony cane. "How English you are Basil! That is the second time you have made that observation. If one puts forward an idea to a true Englishman--always a rash thing to do--he never dreams of considering whether the idea is right or wrong. The only thing he considers of any importance is whether one believes it oneself. Now, the value of an idea has nothing whatsoever to do with the sincerity of the man who expresses it. Indeed, the probabilities are that the more insincere the man is, the more purely intellectual will the idea be, as in that case it will not be coloured by either his wants, his desires, or his prejudices. However, I don't propose to discuss politics, sociology, or metaphysics with you. I like persons better than principles, and I like persons with no principles better than anything else in the world. Tell me more about Mr. Dorian Gray. How often do you see him?" "Every day. I couldn't be happy if I didn't see him every day. He is absolutely necessary to me." "How extraordinary! I thought you would never care for anything but your art." "He is all my art to me now," said the painter gravely. "I sometimes think, Harry, that there are only two eras of any importance in the world's history. The first is the appearance of a new medium for art, and the second is the appearance of a new personality for art also. What the invention of oil-painting was to the Venetians, the face of Antinous was to late Greek sculpture, and the face of Dorian Gray will some day be to me. It is not merely that I paint from him, draw from him, sketch from him. Of course, I have done all that. But he is much more to me than a model or a sitter. I won't tell you that I am dissatisfied with what I have done of him, or that his beauty is such that art cannot express it. There is nothing that art cannot express, and I know that the work I have done, since I met Dorian Gray, is good work, is the best work of my life. But in some curious way--I wonder will you understand me?--his personality has suggested to me an entirely new manner in art, an entirely new mode of style. I see things differently, I think of them differently. I can now recreate life in a way that was hidden from me before. 'A dream of form in days of thought'--who is it who says that? I forget; but it is what Dorian Gray has been to me. The merely visible presence of this lad--for he seems to me little more than a lad, though he is really over twenty--his merely visible presence--ah! I wonder can you realize all that that means? Unconsciously he defines for me the lines of a fresh school, a school that is to have in it all the passion of the romantic spirit, all the perfection of the spirit that is Greek. The harmony of soul and body--how much that is! We in our madness have separated the two, and have invented a realism that is vulgar, an ideality that is void. Harry! if you only knew what Dorian Gray is to me! You remember that landscape of mine, for which Agnew offered me such a huge price but which I would not part with? It is one of the best things I have ever done. And why is it so? Because, while I was painting it, Dorian Gray sat beside me. Some subtle influence passed from him to me, and for the first time in my life I saw in the plain woodland the wonder I had always looked for and always missed." "Basil, this is extraordinary! I must see Dorian Gray." Hallward got up from the seat and walked up and down the garden. After some time he came back. "Harry," he said, "Dorian Gray is to me simply a motive in art. You might see nothing in him. I see everything in him. He is never more present in my work than when no image of him is there. He is a suggestion, as I have said, of a new manner. I find him in the curves of certain lines, in the loveliness and subtleties of certain colours. That is all." "Then why won't you exhibit his portrait?" asked Lord Henry. "Because, without intending it, I have put into it some expression of all this curious artistic idolatry, of which, of course, I have never cared to speak to him. He knows nothing about it. He shall never know anything about it. But the world might guess it, and I will not bare my soul to their shallow prying eyes. My heart shall never be put under their microscope. There is too much of myself in the thing, Harry--too much of myself!" "Poets are not so scrupulous as you are. They know how useful passion is for publication. Nowadays a broken heart will run to many editions." "I hate them for it," cried Hallward. "An artist should create beautiful things, but should put nothing of his own life into them. We live in an age when men treat art as if it were meant to be a form of autobiography. We have lost the abstract sense of beauty. Some day I will show the world what it is; and for that reason the world shall never see my portrait of Dorian Gray." "I think you are wrong, Basil, but I won't argue with you. It is only the intellectually lost who ever argue. Tell me, is Dorian Gray very fond of you?" The painter considered for a few moments. "He likes me," he answered after a pause; "I know he likes me. Of course I flatter him dreadfully. I find a strange pleasure in saying things to him that I know I shall be sorry for having said. As a rule, he is charming to me, and we sit in the studio and talk of a thousand things. Now and then, however, he is horribly thoughtless, and seems to take a real delight in giving me pain. Then I feel, Harry, that I have given away my whole soul to some one who treats it as if it were a flower to put in his coat, a bit of decoration to charm his vanity, an ornament for a summer's day." "Days in summer, Basil, are apt to linger," murmured Lord Henry. "Perhaps you will tire sooner than he will. It is a sad thing to think of, but there is no doubt that genius lasts longer than beauty. That accounts for the fact that we all take such pains to over-educate ourselves. In the wild struggle for existence, we want to have something that endures, and so we fill our minds with rubbish and facts, in the silly hope of keeping our place. The thoroughly well-informed man--that is the modern ideal. And the mind of the thoroughly well-informed man is a dreadful thing. It is like a _bric-a-brac_ shop, all monsters and dust, with everything priced above its proper value. I think you will tire first, all the same. Some day you will look at your friend, and he will seem to you to be a little out of drawing, or you won't like his tone of colour, or something. You will bitterly reproach him in your own heart, and seriously think that he has behaved very badly to you. The next time he calls, you will be perfectly cold and indifferent. It will be a great pity, for it will alter you. What you have told me is quite a romance, a romance of art one might call it, and the worst of having a romance of any kind is that it leaves one so unromantic." "Harry, don't talk like that. As long as I live, the personality of Dorian Gray will dominate me. You can't feel what I feel. You change too often." "Ah, my dear Basil, that is exactly why I can feel it. Those who are faithful know only the trivial side of love: it is the faithless who know love's tragedies." And Lord Henry struck a light on a dainty silver case and began to smoke a cigarette with a self-conscious and satisfied air, as if he had summed up the world in a phrase. There was a rustle of chirruping sparrows in the green lacquer leaves of the ivy, and the blue cloud-shadows chased themselves across the grass like swallows. How pleasant it was in the garden! And how delightful other people's emotions were!--much more delightful than their ideas, it seemed to him. One's own soul, and the passions of one's friends--those were the fascinating things in life. He pictured to himself with silent amusement the tedious luncheon that he had missed by staying so long with Basil Hallward. Had he gone to his aunt's, he would have been sure to have met Lord Goodbody there, and the whole conversation would have been about the feeding of the poor and the necessity for model lodging-houses. Each class would have preached the importance of those virtues, for whose exercise there was no necessity in their own lives. The rich would have spoken on the value of thrift, and the idle grown eloquent over the dignity of labour. It was charming to have escaped all that! As he thought of his aunt, an idea seemed to strike him. He turned to Hallward and said, "My dear fellow, I have just remembered." "Remembered what, Harry?" "Where I heard the name of Dorian Gray." "Where was it?" asked Hallward, with a slight frown. "Don't look so angry, Basil. It was at my aunt, Lady Agatha's. She told me she had discovered a wonderful young man who was going to help her in the East End, and that his name was Dorian Gray. I am bound to state that she never told me he was good-looking. Women have no appreciation of good looks; at least, good women have not. She said that he was very earnest and had a beautiful nature. I at once pictured to myself a creature with spectacles and lank hair, horribly freckled, and tramping about on huge feet. I wish I had known it was your friend." "I am very glad you didn't, Harry." "Why?" "I don't want you to meet him." "You don't want me to meet him?" "No." "Mr. Dorian Gray is in the studio, sir," said the butler, coming into the garden. "You must introduce me now," cried Lord Henry, laughing. The painter turned to his servant, who stood blinking in the sunlight. "Ask Mr. Gray to wait, Parker: I shall be in in a few moments." The man bowed and went up the walk. Then he looked at Lord Henry. "Dorian Gray is my dearest friend," he said. "He has a simple and a beautiful nature. Your aunt was quite right in what she said of him. Don't spoil him. Don't try to influence him. Your influence would be bad. The world is wide, and has many marvellous people in it. Don't take away from me the one person who gives to my art whatever charm it possesses: my life as an artist depends on him. Mind, Harry, I trust you." He spoke very slowly, and the words seemed wrung out of him almost against his will. "What nonsense you talk!" said Lord Henry, smiling, and taking Hallward by the arm, he almost led him into the house. CHAPTER 2 As they entered they saw Dorian Gray. He was seated at the piano, with his back to them, turning over the pages of a volume of Schumann's "Forest Scenes." "You must lend me these, Basil," he cried. "I want to learn them. They are perfectly charming." "That entirely depends on how you sit to-day, Dorian." "Oh, I am tired of sitting, and I don't want a life-sized portrait of myself," answered the lad, swinging round on the music-stool in a wilful, petulant manner. When he caught sight of Lord Henry, a faint blush coloured his cheeks for a moment, and he started up. "I beg your pardon, Basil, but I didn't know you had any one with you." "This is Lord Henry Wotton, Dorian, an old Oxford friend of mine. I have just been telling him what a capital sitter you were, and now you have spoiled everything." "You have not spoiled my pleasure in meeting you, Mr. Gray," said Lord Henry, stepping forward and extending his hand. "My aunt has often spoken to me about you. You are one of her favourites, and, I am afraid, one of her victims also." "I am in Lady Agatha's black books at present," answered Dorian with a funny look of penitence. "I promised to go to a club in Whitechapel with her last Tuesday, and I really forgot all about it. We were to have played a duet together--three duets, I believe. I don't know what she will say to me. I am far too frightened to call." "Oh, I will make your peace with my aunt. She is quite devoted to you. And I don't think it really matters about your not being there. The audience probably thought it was a duet. When Aunt Agatha sits down to the piano, she makes quite enough noise for two people." "That is very horrid to her, and not very nice to me," answered Dorian, laughing. Lord Henry looked at him. Yes, he was certainly wonderfully handsome, with his finely curved scarlet lips, his frank blue eyes, his crisp gold hair. There was something in his face that made one trust him at once. All the candour of youth was there, as well as all youth's passionate purity. One felt that he had kept himself unspotted from the world. No wonder Basil Hallward worshipped him. "You are too charming to go in for philanthropy, Mr. Gray--far too charming." And Lord Henry flung himself down on the divan and opened his cigarette-case. The painter had been busy mixing his colours and getting his brushes ready. He was looking worried, and when he heard Lord Henry's last remark, he glanced at him, hesitated for a moment, and then said, "Harry, I want to finish this picture to-day. Would you think it awfully rude of me if I asked you to go away?" Lord Henry smiled and looked at Dorian Gray. "Am I to go, Mr. Gray?" he asked. "Oh, please don't, Lord Henry. I see that Basil is in one of his sulky moods, and I can't bear him when he sulks. Besides, I want you to tell me why I should not go in for philanthropy." "I don't know that I shall tell you that, Mr. Gray. It is so tedious a subject that one would have to talk seriously about it. But I certainly shall not run away, now that you have asked me to stop. You don't really mind, Basil, do you? You have often told me that you liked your sitters to have some one to chat to." Hallward bit his lip. "If Dorian wishes it, of course you must stay. Dorian's whims are laws to everybody, except himself." Lord Henry took up his hat and gloves. "You are very pressing, Basil, but I am afraid I must go. I have promised to meet a man at the Orleans. Good-bye, Mr. Gray. Come and see me some afternoon in Curzon Street. I am nearly always at home at five o'clock. Write to me when you are coming. I should be sorry to miss you." "Basil," cried Dorian Gray, "if Lord Henry Wotton goes, I shall go, too. You never open your lips while you are painting, and it is horribly dull standing on a platform and trying to look pleasant. Ask him to stay. I insist upon it." "Stay, Harry, to oblige Dorian, and to oblige me," said Hallward, gazing intently at his picture. "It is quite true, I never talk when I am working, and never listen either, and it must be dreadfully tedious for my unfortunate sitters. I beg you to stay." "But what about my man at the Orleans?" The painter laughed. "I don't think there will be any difficulty about that. Sit down again, Harry. And now, Dorian, get up on the platform, and don't move about too much, or pay any attention to what Lord Henry says. He has a very bad influence over all his friends, with the single exception of myself." Dorian Gray stepped up on the dais with the air of a young Greek martyr, and made a little _moue_ of discontent to Lord Henry, to whom he had rather taken a fancy. He was so unlike Basil. They made a delightful contrast. And he had such a beautiful voice. After a few moments he said to him, "Have you really a very bad influence, Lord Henry? As bad as Basil says?" "There is no such thing as a good influence, Mr. Gray. All influence is immoral--immoral from the scientific point of view." "Why?" "Because to influence a person is to give him one's own soul. He does not think his natural thoughts, or burn with his natural passions. His virtues are not real to him. His sins, if there are such things as sins, are borrowed. He becomes an echo of some one else's music, an actor of a part that has not been written for him. The aim of life is self-development. To realize one's nature perfectly--that is what each of us is here for. People are afraid of themselves, nowadays. They have forgotten the highest of all duties, the duty that one owes to one's self. Of course, they are charitable. They feed the hungry and clothe the beggar. But their own souls starve, and are naked. Courage has gone out of our race. Perhaps we never really had it. The terror of society, which is the basis of morals, the terror of God, which is the secret of religion--these are the two things that govern us. And yet--" "Just turn your head a little more to the right, Dorian, like a good boy," said the painter, deep in his work and conscious only that a look had come into the lad's face that he had never seen there before. "And yet," continued Lord Henry, in his low, musical voice, and with that graceful wave of the hand that was always so characteristic of him, and that he had even in his Eton days, "I believe that if one man were to live out his life fully and completely, were to give form to every feeling, expression to every thought, reality to every dream--I believe that the world would gain such a fresh impulse of joy that we would forget all the maladies of mediaevalism, and return to the Hellenic ideal--to something finer, richer than the Hellenic ideal, it may be. But the bravest man amongst us is afraid of himself. The mutilation of the savage has its tragic survival in the self-denial that mars our lives. We are punished for our refusals. Every impulse that we strive to strangle broods in the mind and poisons us. The body sins once, and has done with its sin, for action is a mode of purification. Nothing remains then but the recollection of a pleasure, or the luxury of a regret. The only way to get rid of a temptation is to yield to it. Resist it, and your soul grows sick with longing for the things it has forbidden to itself, with desire for what its monstrous laws have made monstrous and unlawful. It has been said that the great events of the world take place in the brain. It is in the brain, and the brain only, that the great sins of the world take place also. You, Mr. Gray, you yourself, with your rose-red youth and your rose-white boyhood, you have had passions that have made you afraid, thoughts that have filled you with terror, day-dreams and sleeping dreams whose mere memory might stain your cheek with shame--" "Stop!" faltered Dorian Gray, "stop! you bewilder me. I don't know what to say. There is some answer to you, but I cannot find it. Don't speak. Let me think. Or, rather, let me try not to think." For nearly ten minutes he stood there, motionless, with parted lips and eyes strangely bright. He was dimly conscious that entirely fresh influences were at work within him. Yet they seemed to him to have come really from himself. The few words that Basil's friend had said to him--words spoken by chance, no doubt, and with wilful paradox in them--had touched some secret chord that had never been touched before, but that he felt was now vibrating and throbbing to curious pulses. Music had stirred him like that. Music had troubled him many times. But music was not articulate. It was not a new world, but rather another chaos, that it created in us. Words! Mere words! How terrible they were! How clear, and vivid, and cruel! One could not escape from them. And yet what a subtle magic there was in them! They seemed to be able to give a plastic form to formless things, and to have a music of their own as sweet as that of viol or of lute. Mere words! Was there anything so real as words? Yes; there had been things in his boyhood that he had not understood. He understood them now. Life suddenly became fiery-coloured to him. It seemed to him that he had been walking in fire. Why had he not known it? With his subtle smile, Lord Henry watched him. He knew the precise psychological moment when to say nothing. He felt intensely interested. He was amazed at the sudden impression that his words had produced, and, remembering a book that he had read when he was sixteen, a book which had revealed to him much that he had not known before, he wondered whether Dorian Gray was passing through a similar experience. He had merely shot an arrow into the air. Had it hit the mark? How fascinating the lad was! Hallward painted away with that marvellous bold touch of his, that had the true refinement and perfect delicacy that in art, at any rate comes only from strength. He was unconscious of the silence. "Basil, I am tired of standing," cried Dorian Gray suddenly. "I must go out and sit in the garden. The air is stifling here." "My dear fellow, I am so sorry. When I am painting, I can't think of anything else. But you never sat better. You were perfectly still. And I have caught the effect I wanted--the half-parted lips and the bright look in the eyes. I don't know what Harry has been saying to you, but he has certainly made you have the most wonderful expression. I suppose he has been paying you compliments. You mustn't believe a word that he says." "He has certainly not been paying me compliments. Perhaps that is the reason that I don't believe anything he has told me." "You know you believe it all," said Lord Henry, looking at him with his dreamy languorous eyes. "I will go out to the garden with you. It is horribly hot in the studio. Basil, let us have something iced to drink, something with strawberries in it." "Certainly, Harry. Just touch the bell, and when Parker comes I will tell him what you want. I have got to work up this background, so I will join you later on. Don't keep Dorian too long. I have never been in better form for painting than I am to-day. This is going to be my masterpiece. It is my masterpiece as it stands." Lord Henry went out to the garden and found Dorian Gray burying his face in the great cool lilac-blossoms, feverishly drinking in their perfume as if it had been wine. He came close to him and put his hand upon his shoulder. "You are quite right to do that," he murmured. "Nothing can cure the soul but the senses, just as nothing can cure the senses but the soul." The lad started and drew back. He was bareheaded, and the leaves had tossed his rebellious curls and tangled all their gilded threads. There was a look of fear in his eyes, such as people have when they are suddenly awakened. His finely chiselled nostrils quivered, and some hidden nerve shook the scarlet of his lips and left them trembling. "Yes," continued Lord Henry, "that is one of the great secrets of life--to cure the soul by means of the senses, and the senses by means of the soul. You are a wonderful creation. You know more than you think you know, just as you know less than you want to know." Dorian Gray frowned and turned his head away. He could not help liking the tall, graceful young man who was standing by him. His romantic, olive-coloured face and worn expression interested him. There was something in his low languid voice that was absolutely fascinating. His cool, white, flowerlike hands, even, had a curious charm. They moved, as he spoke, like music, and seemed to have a language of their own. But he felt afraid of him, and ashamed of being afraid. Why had it been left for a stranger to reveal him to himself? He had known Basil Hallward for months, but the friendship between them had never altered him. Suddenly there had come some one across his life who seemed to have disclosed to him life's mystery. And, yet, what was there to be afraid of? He was not a schoolboy or a girl. It was absurd to be frightened. "Let us go and sit in the shade," said Lord Henry. "Parker has brought out the drinks, and if you stay any longer in this glare, you will be quite spoiled, and Basil will never paint you again. You really must not allow yourself to become sunburnt. It would be unbecoming." "What can it matter?" cried Dorian Gray, laughing, as he sat down on the seat at the end of the garden. "It should matter everything to you, Mr. Gray." "Why?" "Because you have the most marvellous youth, and youth is the one thing worth having." "I don't feel that, Lord Henry." "No, you don't feel it now. Some day, when you are old and wrinkled and ugly, when thought has seared your forehead with its lines, and passion branded your lips with its hideous fires, you will feel it, you will feel it terribly. Now, wherever you go, you charm the world. Will it always be so? ... You have a wonderfully beautiful face, Mr. Gray. Don't frown. You have. And beauty is a form of genius--is higher, indeed, than genius, as it needs no explanation. It is of the great facts of the world, like sunlight, or spring-time, or the reflection in dark waters of that silver shell we call the moon. It cannot be questioned. It has its divine right of sovereignty. It makes princes of those who have it. You smile? Ah! when you have lost it you won't smile.... People say sometimes that beauty is only superficial. That may be so, but at least it is not so superficial as thought is. To me, beauty is the wonder of wonders. It is only shallow people who do not judge by appearances. The true mystery of the world is the visible, not the invisible.... Yes, Mr. Gray, the gods have been good to you. But what the gods give they quickly take away. You have only a few years in which to live really, perfectly, and fully. When your youth goes, your beauty will go with it, and then you will suddenly discover that there are no triumphs left for you, or have to content yourself with those mean triumphs that the memory of your past will make more bitter than defeats. Every month as it wanes brings you nearer to something dreadful. Time is jealous of you, and wars against your lilies and your roses. You will become sallow, and hollow-cheeked, and dull-eyed. You will suffer horribly.... Ah! realize your youth while you have it. Don't squander the gold of your days, listening to the tedious, trying to improve the hopeless failure, or giving away your life to the ignorant, the common, and the vulgar. These are the sickly aims, the false ideals, of our age. Live! Live the wonderful life that is in you! Let nothing be lost upon you. Be always searching for new sensations. Be afraid of nothing.... A new Hedonism--that is what our century wants. You might be its visible symbol. With your personality there is nothing you could not do. The world belongs to you for a season.... The moment I met you I saw that you were quite unconscious of what you really are, of what you really might be. There was so much in you that charmed me that I felt I must tell you something about yourself. I thought how tragic it would be if you were wasted. For there is such a little time that your youth will last--such a little time. The common hill-flowers wither, but they blossom again. The laburnum will be as yellow next June as it is now. In a month there will be purple stars on the clematis, and year after year the green night of its leaves will hold its purple stars. But we never get back our youth. The pulse of joy that beats in us at twenty becomes sluggish. Our limbs fail, our senses rot. We degenerate into hideous puppets, haunted by the memory of the passions of which we were too much afraid, and the exquisite temptations that we had not the courage to yield to. Youth! Youth! There is absolutely nothing in the world but youth!" Dorian Gray listened, open-eyed and wondering. The spray of lilac fell from his hand upon the gravel. A furry bee came and buzzed round it for a moment. Then it began to scramble all over the oval stellated globe of the tiny blossoms. He watched it with that strange interest in trivial things that we try to develop when things of high import make us afraid, or when we are stirred by some new emotion for which we cannot find expression, or when some thought that terrifies us lays sudden siege to the brain and calls on us to yield. After a time the bee flew away. He saw it creeping into the stained trumpet of a Tyrian convolvulus. The flower seemed to quiver, and then swayed gently to and fro. Suddenly the painter appeared at the door of the studio and made staccato signs for them to come in. They turned to each other and smiled. "I am waiting," he cried. "Do come in. The light is quite perfect, and you can bring your drinks." They rose up and sauntered down the walk together. Two green-and-white butterflies fluttered past them, and in the pear-tree at the corner of the garden a thrush began to sing. "You are glad you have met me, Mr. Gray," said Lord Henry, looking at him. "Yes, I am glad now. I wonder shall I always be glad?" "Always! That is a dreadful word. It makes me shudder when I hear it. Women are so fond of using it. They spoil every romance by trying to make it last for ever. It is a meaningless word, too. The only difference between a caprice and a lifelong passion is that the caprice lasts a little longer." As they entered the studio, Dorian Gray put his hand upon Lord Henry's arm. "In that case, let our friendship be a caprice," he murmured, flushing at his own boldness, then stepped up on the platform and resumed his pose. Lord Henry flung himself into a large wicker arm-chair and watched him. The sweep and dash of the brush on the canvas made the only sound that broke the stillness, except when, now and then, Hallward stepped back to look at his work from a distance. In the slanting beams that streamed through the open doorway the dust danced and was golden. The heavy scent of the roses seemed to brood over everything. After about a quarter of an hour Hallward stopped painting, looked for a long time at Dorian Gray, and then for a long time at the picture, biting the end of one of his huge brushes and frowning. "It is quite finished," he cried at last, and stooping down he wrote his name in long vermilion letters on the left-hand corner of the canvas. Lord Henry came over and examined the picture. It was certainly a wonderful work of art, and a wonderful likeness as well. "My dear fellow, I congratulate you most warmly," he said. "It is the finest portrait of modern times. Mr. Gray, come over and look at yourself." The lad started, as if awakened from some dream. "Is it really finished?" he murmured, stepping down from the platform. "Quite finished," said the painter. "And you have sat splendidly to-day. I am awfully obliged to you." "That is entirely due to me," broke in Lord Henry. "Isn't it, Mr. Gray?" Dorian made no answer, but passed listlessly in front of his picture and turned towards it. When he saw it he drew back, and his cheeks flushed for a moment with pleasure. A look of joy came into his eyes, as if he had recognized himself for the first time. He stood there motionless and in wonder, dimly conscious that Hallward was speaking to him, but not catching the meaning of his words. The sense of his own beauty came on him like a revelation. He had never felt it before. Basil Hallward's compliments had seemed to him to be merely the charming exaggeration of friendship. He had listened to them, laughed at them, forgotten them. They had not influenced his nature. Then had come Lord Henry Wotton with his strange panegyric on youth, his terrible warning of its brevity. That had stirred him at the time, and now, as he stood gazing at the shadow of his own loveliness, the full reality of the description flashed across him. Yes, there would be a day when his face would be wrinkled and wizen, his eyes dim and colourless, the grace of his figure broken and deformed. The scarlet would pass away from his lips and the gold steal from his hair. The life that was to make his soul would mar his body. He would become dreadful, hideous, and uncouth. As he thought of it, a sharp pang of pain struck through him like a knife and made each delicate fibre of his nature quiver. His eyes deepened into amethyst, and across them came a mist of tears. He felt as if a hand of ice had been laid upon his heart. "Don't you like it?" cried Hallward at last, stung a little by the lad's silence, not understanding what it meant. "Of course he likes it," said Lord Henry. "Who wouldn't like it? It is one of the greatest things in modern art. I will give you anything you like to ask for it. I must have it." "It is not my property, Harry." "Whose property is it?" "Dorian's, of course," answered the painter. "He is a very lucky fellow." "How sad it is!" murmured Dorian Gray with his eyes still fixed upon his own portrait. "How sad it is! I shall grow old, and horrible, and dreadful. But this picture will remain always young. It will never be older than this particular day of June.... If it were only the other way! If it were I who was to be always young, and the picture that was to grow old! For that--for that--I would give everything! Yes, there is nothing in the whole world I would not give! I would give my soul for that!" "You would hardly care for such an arrangement, Basil," cried Lord Henry, laughing. "It would be rather hard lines on your work." "I should object very strongly, Harry," said Hallward. Dorian Gray turned and looked at him. "I believe you would, Basil. You like your art better than your friends. I am no more to you than a green bronze figure. Hardly as much, I dare say." The painter stared in amazement. It was so unlike Dorian to speak like that. What had happened? He seemed quite angry. His face was flushed and his cheeks burning. "Yes," he continued, "I am less to you than your ivory Hermes or your silver Faun. You will like them always. How long will you like me? Till I have my first wrinkle, I suppose. I know, now, that when one loses one's good looks, whatever they may be, one loses everything. Your picture has taught me that. Lord Henry Wotton is perfectly right. Youth is the only thing worth having. When I find that I am growing old, I shall kill myself." Hallward turned pale and caught his hand. "Dorian! Dorian!" he cried, "don't talk like that. I have never had such a friend as you, and I shall never have such another. You are not jealous of material things, are you?--you who are finer than any of them!" "I am jealous of everything whose beauty does not die. I am jealous of the portrait you have painted of me. Why should it keep what I must lose? Every moment that passes takes something from me and gives something to it. Oh, if it were only the other way! If the picture could change, and I could be always what I am now! Why did you paint it? It will mock me some day--mock me horribly!" The hot tears welled into his eyes; he tore his hand away and, flinging himself on the divan, he buried his face in the cushions, as though he was praying. "This is your doing, Harry," said the painter bitterly. Lord Henry shrugged his shoulders. "It is the real Dorian Gray--that is all." "It is not." "If it is not, what have I to do with it?" "You should have gone away when I asked you," he muttered. "I stayed when you asked me," was Lord Henry's answer. "Harry, I can't quarrel with my two best friends at once, but between you both you have made me hate the finest piece of work I have ever done, and I will destroy it. What is it but canvas and colour? I will not let it come across our three lives and mar them." Dorian Gray lifted his golden head from the pillow, and with pallid face and tear-stained eyes, looked at him as he walked over to the deal painting-table that was set beneath the high curtained window. What was he doing there? His fingers were straying about among the litter of tin tubes and dry brushes, seeking for something. Yes, it was for the long palette-knife, with its thin blade of lithe steel. He had found it at last. He was going to rip up the canvas. With a stifled sob the lad leaped from the couch, and, rushing over to Hallward, tore the knife out of his hand, and flung it to the end of the studio. "Don't, Basil, don't!" he cried. "It would be murder!" "I am glad you appreciate my work at last, Dorian," said the painter coldly when he had recovered from his surprise. "I never thought you would." "Appreciate it? I am in love with it, Basil. It is part of myself. I feel that." "Well, as soon as you are dry, you shall be varnished, and framed, and sent home. Then you can do what you like with yourself." And he walked across the room and rang the bell for tea. "You will have tea, of course, Dorian? And so will you, Harry? Or do you object to such simple pleasures?" "I adore simple pleasures," said Lord Henry. "They are the last refuge of the complex. But I don't like scenes, except on the stage. What absurd fellows you are, both of you! I wonder who it was defined man as a rational animal. It was the most premature definition ever given. Man is many things, but he is not rational. I am glad he is not, after all--though I wish you chaps would not squabble over the picture. You had much better let me have it, Basil. This silly boy doesn't really want it, and I really do." "If you let any one have it but me, Basil, I shall never forgive you!" cried Dorian Gray; "and I don't allow people to call me a silly boy." "You know the picture is yours, Dorian. I gave it to you before it existed." "And you know you have been a little silly, Mr. Gray, and that you don't really object to being reminded that you are extremely young." "I should have objected very strongly this morning, Lord Henry." "Ah! this morning! You have lived since then." There came a knock at the door, and the butler entered with a laden tea-tray and set it down upon a small Japanese table. There was a rattle of cups and saucers and the hissing of a fluted Georgian urn. Two globe-shaped china dishes were brought in by a page. Dorian Gray went over and poured out the tea. The two men sauntered languidly to the table and examined what was under the covers. "Let us go to the theatre to-night," said Lord Henry. "There is sure to be something on, somewhere. I have promised to dine at White's, but it is only with an old friend, so I can send him a wire to say that I am ill, or that I am prevented from coming in consequence of a subsequent engagement. I think that would be a rather nice excuse: it would have all the surprise of candour." "It is such a bore putting on one's dress-clothes," muttered Hallward. "And, when one has them on, they are so horrid." "Yes," answered Lord Henry dreamily, "the costume of the nineteenth century is detestable. It is so sombre, so depressing. Sin is the only real colour-element left in modern life." "You really must not say things like that before Dorian, Harry." "Before which Dorian? The one who is pouring out tea for us, or the one in the picture?" "Before either." "I should like to come to the theatre with you, Lord Henry," said the lad. "Then you shall come; and you will come, too, Basil, won't you?" "I can't, really. I would sooner not. I have a lot of work to do." "Well, then, you and I will go alone, Mr. Gray." "I should like that awfully." The painter bit his lip and walked over, cup in hand, to the picture. "I shall stay with the real Dorian," he said, sadly. "Is it the real Dorian?" cried the original of the portrait, strolling across to him. "Am I really like that?" "Yes; you are just like that." "How wonderful, Basil!" "At least you are like it in appearance. But it will never alter," sighed Hallward. "That is something." "What a fuss people make about fidelity!" exclaimed Lord Henry. "Why, even in love it is purely a question for physiology. It has nothing to do with our own will. Young men want to be faithful, and are not; old men want to be faithless, and cannot: that is all one can say." "Don't go to the theatre to-night, Dorian," said Hallward. "Stop and dine with me." "I can't, Basil." "Why?" "Because I have promised Lord Henry Wotton to go with him." "He won't like you the better for keeping your promises. He always breaks his own. I beg you not to go." Dorian Gray laughed and shook his head. "I entreat you." The lad hesitated, and looked over at Lord Henry, who was watching them from the tea-table with an amused smile. "I must go, Basil," he answered. "Very well," said Hallward, and he went over and laid down his cup on the tray. "It is rather late, and, as you have to dress, you had better lose no time. Good-bye, Harry. Good-bye, Dorian. Come and see me soon. Come to-morrow." "Certainly." "You won't forget?" "No, of course not," cried Dorian. "And ... Harry!" "Yes, Basil?" "Remember what I asked you, when we were in the garden this morning." "I have forgotten it." "I trust you." "I wish I could trust myself," said Lord Henry, laughing. "Come, Mr. Gray, my hansom is outside, and I can drop you at your own place. Good-bye, Basil. It has been a most interesting afternoon." As the door closed behind them, the painter flung himself down on a sofa, and a look of pain came into his face. CHAPTER 3 At half-past twelve next day Lord Henry Wotton strolled from Curzon Street over to the Albany to call on his uncle, Lord Fermor, a genial if somewhat rough-mannered old bachelor, whom the outside world called selfish because it derived no particular benefit from him, but who was considered generous by Society as he fed the people who amused him. His father had been our ambassador at Madrid when Isabella was young and Prim unthought of, but had retired from the diplomatic service in a capricious moment of annoyance on not being offered the Embassy at Paris, a post to which he considered that he was fully entitled by reason of his birth, his indolence, the good English of his dispatches, and his inordinate passion for pleasure. The son, who had been his father's secretary, had resigned along with his chief, somewhat foolishly as was thought at the time, and on succeeding some months later to the title, had set himself to the serious study of the great aristocratic art of doing absolutely nothing. He had two large town houses, but preferred to live in chambers as it was less trouble, and took most of his meals at his club. He paid some attention to the management of his collieries in the Midland counties, excusing himself for this taint of industry on the ground that the one advantage of having coal was that it enabled a gentleman to afford the decency of burning wood on his own hearth. In politics he was a Tory, except when the Tories were in office, during which period he roundly abused them for being a pack of Radicals. He was a hero to his valet, who bullied him, and a terror to most of his relations, whom he bullied in turn. Only England could have produced him, and he always said that the country was going to the dogs. His principles were out of date, but there was a good deal to be said for his prejudices. When Lord Henry entered the room, he found his uncle sitting in a rough shooting-coat, smoking a cheroot and grumbling over _The Times_. "Well, Harry," said the old gentleman, "what brings you out so early? I thought you dandies never got up till two, and were not visible till five." "Pure family affection, I assure you, Uncle George. I want to get something out of you." "Money, I suppose," said Lord Fermor, making a wry face. "Well, sit down and tell me all about it. Young people, nowadays, imagine that money is everything." "Yes," murmured Lord Henry, settling his button-hole in his coat; "and when they grow older they know it. But I don't want money. It is only people who pay their bills who want that, Uncle George, and I never pay mine. Credit is the capital of a younger son, and one lives charmingly upon it. Besides, I always deal with Dartmoor's tradesmen, and consequently they never bother me. What I want is information: not useful information, of course; useless information." "Well, I can tell you anything that is in an English Blue Book, Harry, although those fellows nowadays write a lot of nonsense. When I was in the Diplomatic, things were much better. But I hear they let them in now by examination. What can you expect? Examinations, sir, are pure humbug from beginning to end. If a man is a gentleman, he knows quite enough, and if he is not a gentleman, whatever he knows is bad for him." "Mr. Dorian Gray does not belong to Blue Books, Uncle George," said Lord Henry languidly. "Mr. Dorian Gray? Who is he?" asked Lord Fermor, knitting his bushy white eyebrows. "That is what I have come to learn, Uncle George. Or rather, I know who he is. He is the last Lord Kelso's grandson. His mother was a Devereux, Lady Margaret Devereux. I want you to tell me about his mother. What was she like? Whom did she marry? You have known nearly everybody in your time, so you might have known her. I am very much interested in Mr. Gray at present. I have only just met him." "Kelso's grandson!" echoed the old gentleman. "Kelso's grandson! ... Of course.... I knew his mother intimately. I believe I was at her christening. She was an extraordinarily beautiful girl, Margaret Devereux, and made all the men frantic by running away with a penniless young fellow--a mere nobody, sir, a subaltern in a foot regiment, or something of that kind. Certainly. I remember the whole thing as if it happened yesterday. The poor chap was killed in a duel at Spa a few months after the marriage. There was an ugly story about it. They said Kelso got some rascally adventurer, some Belgian brute, to insult his son-in-law in public--paid him, sir, to do it, paid him--and that the fellow spitted his man as if he had been a pigeon. The thing was hushed up, but, egad, Kelso ate his chop alone at the club for some time afterwards. He brought his daughter back with him, I was told, and she never spoke to him again. Oh, yes; it was a bad business. The girl died, too, died within a year. So she left a son, did she? I had forgotten that. What sort of boy is he? If he is like his mother, he must be a good-looking chap." "He is very good-looking," assented Lord Henry. "I hope he will fall into proper hands," continued the old man. "He should have a pot of money waiting for him if Kelso did the right thing by him. His mother had money, too. All the Selby property came to her, through her grandfather. Her grandfather hated Kelso, thought him a mean dog. He was, too. Came to Madrid once when I was there. Egad, I was ashamed of him. The Queen used to ask me about the English noble who was always quarrelling with the cabmen about their fares. They made quite a story of it. I didn't dare show my face at Court for a month. I hope he treated his grandson better than he did the jarvies." "I don't know," answered Lord Henry. "I fancy that the boy will be well off. He is not of age yet. He has Selby, I know. He told me so. And ... his mother was very beautiful?" "Margaret Devereux was one of the loveliest creatures I ever saw, Harry. What on earth induced her to behave as she did, I never could understand. She could have married anybody she chose. Carlington was mad after her. She was romantic, though. All the women of that family were. The men were a poor lot, but, egad! the women were wonderful. Carlington went on his knees to her. Told me so himself. She laughed at him, and there wasn't a girl in London at the time who wasn't after him. And by the way, Harry, talking about silly marriages, what is this humbug your father tells me about Dartmoor wanting to marry an American? Ain't English girls good enough for him?" "It is rather fashionable to marry Americans just now, Uncle George." "I'll back English women against the world, Harry," said Lord Fermor, striking the table with his fist. "The betting is on the Americans." "They don't last, I am told," muttered his uncle. "A long engagement exhausts them, but they are capital at a steeplechase. They take things flying. I don't think Dartmoor has a chance." "Who are her people?" grumbled the old gentleman. "Has she got any?" Lord Henry shook his head. "American girls are as clever at concealing their parents, as English women are at concealing their past," he said, rising to go. "They are pork-packers, I suppose?" "I hope so, Uncle George, for Dartmoor's sake. I am told that pork-packing is the most lucrative profession in America, after politics." "Is she pretty?" "She behaves as if she was beautiful. Most American women do. It is the secret of their charm." "Why can't these American women stay in their own country? They are always telling us that it is the paradise for women." "It is. That is the reason why, like Eve, they are so excessively anxious to get out of it," said Lord Henry. "Good-bye, Uncle George. I shall be late for lunch, if I stop any longer. Thanks for giving me the information I wanted. I always like to know everything about my new friends, and nothing about my old ones." "Where are you lunching, Harry?" "At Aunt Agatha's. I have asked myself and Mr. Gray. He is her latest _protege_." "Humph! tell your Aunt Agatha, Harry, not to bother me any more with her charity appeals. I am sick of them. Why, the good woman thinks that I have nothing to do but to write cheques for her silly fads." "All right, Uncle George, I'll tell her, but it won't have any effect. Philanthropic people lose all sense of humanity. It is their distinguishing characteristic." The old gentleman growled approvingly and rang the bell for his servant. Lord Henry passed up the low arcade into Burlington Street and turned his steps in the direction of Berkeley Square. So that was the story of Dorian Gray's parentage. Crudely as it had been told to him, it had yet stirred him by its suggestion of a strange, almost modern romance. A beautiful woman risking everything for a mad passion. A few wild weeks of happiness cut short by a hideous, treacherous crime. Months of voiceless agony, and then a child born in pain. The mother snatched away by death, the boy left to solitude and the tyranny of an old and loveless man. Yes; it was an interesting background. It posed the lad, made him more perfect, as it were. Behind every exquisite thing that existed, there was something tragic. Worlds had to be in travail, that the meanest flower might blow.... And how charming he had been at dinner the night before, as with startled eyes and lips parted in frightened pleasure he had sat opposite to him at the club, the red candleshades staining to a richer rose the wakening wonder of his face. Talking to him was like playing upon an exquisite violin. He answered to every touch and thrill of the bow.... There was something terribly enthralling in the exercise of influence. No other activity was like it. To project one's soul into some gracious form, and let it tarry there for a moment; to hear one's own intellectual views echoed back to one with all the added music of passion and youth; to convey one's temperament into another as though it were a subtle fluid or a strange perfume: there was a real joy in that--perhaps the most satisfying joy left to us in an age so limited and vulgar as our own, an age grossly carnal in its pleasures, and grossly common in its aims.... He was a marvellous type, too, this lad, whom by so curious a chance he had met in Basil's studio, or could be fashioned into a marvellous type, at any rate. Grace was his, and the white purity of boyhood, and beauty such as old Greek marbles kept for us. There was nothing that one could not do with him. He could be made a Titan or a toy. What a pity it was that such beauty was destined to fade! ... And Basil? From a psychological point of view, how interesting he was! The new manner in art, the fresh mode of looking at life, suggested so strangely by the merely visible presence of one who was unconscious of it all; the silent spirit that dwelt in dim woodland, and walked unseen in open field, suddenly showing herself, Dryadlike and not afraid, because in his soul who sought for her there had been wakened that wonderful vision to which alone are wonderful things revealed; the mere shapes and patterns of things becoming, as it were, refined, and gaining a kind of symbolical value, as though they were themselves patterns of some other and more perfect form whose shadow they made real: how strange it all was! He remembered something like it in history. Was it not Plato, that artist in thought, who had first analyzed it? Was it not Buonarotti who had carved it in the coloured marbles of a sonnet-sequence? But in our own century it was strange.... Yes; he would try to be to Dorian Gray what, without knowing it, the lad was to the painter who had fashioned the wonderful portrait. He would seek to dominate him--had already, indeed, half done so. He would make that wonderful spirit his own. There was something fascinating in this son of love and death. Suddenly he stopped and glanced up at the houses. He found that he had passed his aunt's some distance, and, smiling to himself, turned back. When he entered the somewhat sombre hall, the butler told him that they had gone in to lunch. He gave one of the footmen his hat and stick and passed into the dining-room. "Late as usual, Harry," cried his aunt, shaking her head at him. He invented a facile excuse, and having taken the vacant seat next to her, looked round to see who was there. Dorian bowed to him shyly from the end of the table, a flush of pleasure stealing into his cheek. Opposite was the Duchess of Harley, a lady of admirable good-nature and good temper, much liked by every one who knew her, and of those ample architectural proportions that in women who are not duchesses are described by contemporary historians as stoutness. Next to her sat, on her right, Sir Thomas Burdon, a Radical member of Parliament, who followed his leader in public life and in private life followed the best cooks, dining with the Tories and thinking with the Liberals, in accordance with a wise and well-known rule. The post on her left was occupied by Mr. Erskine of Treadley, an old gentleman of considerable charm and culture, who had fallen, however, into bad habits of silence, having, as he explained once to Lady Agatha, said everything that he had to say before he was thirty. His own neighbour was Mrs. Vandeleur, one of his aunt's oldest friends, a perfect saint amongst women, but so dreadfully dowdy that she reminded one of a badly bound hymn-book. Fortunately for him she had on the other side Lord Faudel, a most intelligent middle-aged mediocrity, as bald as a ministerial statement in the House of Commons, with whom she was conversing in that intensely earnest manner which is the one unpardonable error, as he remarked once himself, that all really good people fall into, and from which none of them ever quite escape. "We are talking about poor Dartmoor, Lord Henry," cried the duchess, nodding pleasantly to him across the table. "Do you think he will really marry this fascinating young person?" "I believe she has made up her mind to propose to him, Duchess." "How dreadful!" exclaimed Lady Agatha. "Really, some one should interfere." "I am told, on excellent authority, that her father keeps an American dry-goods store," said Sir Thomas Burdon, looking supercilious. "My uncle has already suggested pork-packing, Sir Thomas." "Dry-goods! What are American dry-goods?" asked the duchess, raising her large hands in wonder and accentuating the verb. "American novels," answered Lord Henry, helping himself to some quail. The duchess looked puzzled. "Don't mind him, my dear," whispered Lady Agatha. "He never means anything that he says." "When America was discovered," said the Radical member--and he began to give some wearisome facts. Like all people who try to exhaust a subject, he exhausted his listeners. The duchess sighed and exercised her privilege of interruption. "I wish to goodness it never had been discovered at all!" she exclaimed. "Really, our girls have no chance nowadays. It is most unfair." "Perhaps, after all, America never has been discovered," said Mr. Erskine; "I myself would say that it had merely been detected." "Oh! but I have seen specimens of the inhabitants," answered the duchess vaguely. "I must confess that most of them are extremely pretty. And they dress well, too. They get all their dresses in Paris. I wish I could afford to do the same." "They say that when good Americans die they go to Paris," chuckled Sir Thomas, who had a large wardrobe of Humour's cast-off clothes. "Really! And where do bad Americans go to when they die?" inquired the duchess. "They go to America," murmured Lord Henry. Sir Thomas frowned. "I am afraid that your nephew is prejudiced against that great country," he said to Lady Agatha. "I have travelled all over it in cars provided by the directors, who, in such matters, are extremely civil. I assure you that it is an education to visit it." "But must we really see Chicago in order to be educated?" asked Mr. Erskine plaintively. "I don't feel up to the journey." Sir Thomas waved his hand. "Mr. Erskine of Treadley has the world on his shelves. We practical men like to see things, not to read about them. The Americans are an extremely interesting people. They are absolutely reasonable. I think that is their distinguishing characteristic. Yes, Mr. Erskine, an absolutely reasonable people. I assure you there is no nonsense about the Americans." "How dreadful!" cried Lord Henry. "I can stand brute force, but brute reason is quite unbearable. There is something unfair about its use. It is hitting below the intellect." "I do not understand you," said Sir Thomas, growing rather red. "I do, Lord Henry," murmured Mr. Erskine, with a smile. "Paradoxes are all very well in their way...." rejoined the baronet. "Was that a paradox?" asked Mr. Erskine. "I did not think so. Perhaps it was. Well, the way of paradoxes is the way of truth. To test reality we must see it on the tight rope. When the verities become acrobats, we can judge them." "Dear me!" said Lady Agatha, "how you men argue! I am sure I never can make out what you are talking about. Oh! Harry, I am quite vexed with you. Why do you try to persuade our nice Mr. Dorian Gray to give up the East End? I assure you he would be quite invaluable. They would love his playing." "I want him to play to me," cried Lord Henry, smiling, and he looked down the table and caught a bright answering glance. "But they are so unhappy in Whitechapel," continued Lady Agatha. "I can sympathize with everything except suffering," said Lord Henry, shrugging his shoulders. "I cannot sympathize with that. It is too ugly, too horrible, too distressing. There is something terribly morbid in the modern sympathy with pain. One should sympathize with the colour, the beauty, the joy of life. The less said about life's sores, the better." "Still, the East End is a very important problem," remarked Sir Thomas with a grave shake of the head. "Quite so," answered the young lord. "It is the problem of slavery, and we try to solve it by amusing the slaves." The politician looked at him keenly. "What change do you propose, then?" he asked. Lord Henry laughed. "I don't desire to change anything in England except the weather," he answered. "I am quite content with philosophic contemplation. But, as the nineteenth century has gone bankrupt through an over-expenditure of sympathy, I would suggest that we should appeal to science to put us straight. The advantage of the emotions is that they lead us astray, and the advantage of science is that it is not emotional." "But we have such grave responsibilities," ventured Mrs. Vandeleur timidly. "Terribly grave," echoed Lady Agatha. Lord Henry looked over at Mr. Erskine. "Humanity takes itself too seriously. It is the world's original sin. If the caveman had known how to laugh, history would have been different." "You are really very comforting," warbled the duchess. "I have always felt rather guilty when I came to see your dear aunt, for I take no interest at all in the East End. For the future I shall be able to look her in the face without a blush." "A blush is very becoming, Duchess," remarked Lord Henry. "Only when one is young," she answered. "When an old woman like myself blushes, it is a very bad sign. Ah! Lord Henry, I wish you would tell me how to become young again." He thought for a moment. "Can you remember any great error that you committed in your early days, Duchess?" he asked, looking at her across the table. "A great many, I fear," she cried. "Then commit them over again," he said gravely. "To get back one's youth, one has merely to repeat one's follies." "A delightful theory!" she exclaimed. "I must put it into practice." "A dangerous theory!" came from Sir Thomas's tight lips. Lady Agatha shook her head, but could not help being amused. Mr. Erskine listened. "Yes," he continued, "that is one of the great secrets of life. Nowadays most people die of a sort of creeping common sense, and discover when it is too late that the only things one never regrets are one's mistakes." A laugh ran round the table. He played with the idea and grew wilful; tossed it into the air and transformed it; let it escape and recaptured it; made it iridescent with fancy and winged it with paradox. The praise of folly, as he went on, soared into a philosophy, and philosophy herself became young, and catching the mad music of pleasure, wearing, one might fancy, her wine-stained robe and wreath of ivy, danced like a Bacchante over the hills of life, and mocked the slow Silenus for being sober. Facts fled before her like frightened forest things. Her white feet trod the huge press at which wise Omar sits, till the seething grape-juice rose round her bare limbs in waves of purple bubbles, or crawled in red foam over the vat's black, dripping, sloping sides. It was an extraordinary improvisation. He felt that the eyes of Dorian Gray were fixed on him, and the consciousness that amongst his audience there was one whose temperament he wished to fascinate seemed to give his wit keenness and to lend colour to his imagination. He was brilliant, fantastic, irresponsible. He charmed his listeners out of themselves, and they followed his pipe, laughing. Dorian Gray never took his gaze off him, but sat like one under a spell, smiles chasing each other over his lips and wonder growing grave in his darkening eyes. At last, liveried in the costume of the age, reality entered the room in the shape of a servant to tell the duchess that her carriage was waiting. She wrung her hands in mock despair. "How annoying!" she cried. "I must go. I have to call for my husband at the club, to take him to some absurd meeting at Willis's Rooms, where he is going to be in the chair. If I am late he is sure to be furious, and I couldn't have a scene in this bonnet. It is far too fragile. A harsh word would ruin it. No, I must go, dear Agatha. Good-bye, Lord Henry, you are quite delightful and dreadfully demoralizing. I am sure I don't know what to say about your views. You must come and dine with us some night. Tuesday? Are you disengaged Tuesday?" "For you I would throw over anybody, Duchess," said Lord Henry with a bow. "Ah! that is very nice, and very wrong of you," she cried; "so mind you come"; and she swept out of the room, followed by Lady Agatha and the other ladies. When Lord Henry had sat down again, Mr. Erskine moved round, and taking a chair close to him, placed his hand upon his arm. "You talk books away," he said; "why don't you write one?" "I am too fond of reading books to care to write them, Mr. Erskine. I should like to write a novel certainly, a novel that would be as lovely as a Persian carpet and as unreal. But there is no literary public in England for anything except newspapers, primers, and encyclopaedias. Of all people in the world the English have the least sense of the beauty of literature." "I fear you are right," answered Mr. Erskine. "I myself used to have literary ambitions, but I gave them up long ago. And now, my dear young friend, if you will allow me to call you so, may I ask if you really meant all that you said to us at lunch?" "I quite forget what I said," smiled Lord Henry. "Was it all very bad?" "Very bad indeed. In fact I consider you extremely dangerous, and if anything happens to our good duchess, we shall all look on you as being primarily responsible. But I should like to talk to you about life. The generation into which I was born was tedious. Some day, when you are tired of London, come down to Treadley and expound to me your philosophy of pleasure over some admirable Burgundy I am fortunate enough to possess." "I shall be charmed. A visit to Treadley would be a great privilege. It has a perfect host, and a perfect library." "You will complete it," answered the old gentleman with a courteous bow. "And now I must bid good-bye to your excellent aunt. I am due at the Athenaeum. It is the hour when we sleep there." "All of you, Mr. Erskine?" "Forty of us, in forty arm-chairs. We are practising for an English Academy of Letters." Lord Henry laughed and rose. "I am going to the park," he cried. As he was passing out of the door, Dorian Gray touched him on the arm. "Let me come with you," he murmured. "But I thought you had promised Basil Hallward to go and see him," answered Lord Henry. "I would sooner come with you; yes, I feel I must come with you. Do let me. And you will promise to talk to me all the time? No one talks so wonderfully as you do." "Ah! I have talked quite enough for to-day," said Lord Henry, smiling. "All I want now is to look at life. You may come and look at it with me, if you care to." CHAPTER 4 One afternoon, a month later, Dorian Gray was reclining in a luxurious arm-chair, in the little library of Lord Henry's house in Mayfair. It was, in its way, a very charming room, with its high panelled wainscoting of olive-stained oak, its cream-coloured frieze and ceiling of raised plasterwork, and its brickdust felt carpet strewn with silk, long-fringed Persian rugs. On a tiny satinwood table stood a statuette by Clodion, and beside it lay a copy of Les Cent Nouvelles, bound for Margaret of Valois by Clovis Eve and powdered with the gilt daisies that Queen had selected for her device. Some large blue china jars and parrot-tulips were ranged on the mantelshelf, and through the small leaded panes of the window streamed the apricot-coloured light of a summer day in London. Lord Henry had not yet come in. He was always late on principle, his principle being that punctuality is the thief of time. So the lad was looking rather sulky, as with listless fingers he turned over the pages of an elaborately illustrated edition of Manon Lescaut that he had found in one of the book-cases. The formal monotonous ticking of the Louis Quatorze clock annoyed him. Once or twice he thought of going away. At last he heard a step outside, and the door opened. "How late you are, Harry!" he murmured. "I am afraid it is not Harry, Mr. Gray," answered a shrill voice. He glanced quickly round and rose to his feet. "I beg your pardon. I thought--" "You thought it was my husband. It is only his wife. You must let me introduce myself. I know you quite well by your photographs. I think my husband has got seventeen of them." "Not seventeen, Lady Henry?" "Well, eighteen, then. And I saw you with him the other night at the opera." She laughed nervously as she spoke, and watched him with her vague forget-me-not eyes. She was a curious woman, whose dresses always looked as if they had been designed in a rage and put on in a tempest. She was usually in love with somebody, and, as her passion was never returned, she had kept all her illusions. She tried to look picturesque, but only succeeded in being untidy. Her name was Victoria, and she had a perfect mania for going to church. "That was at Lohengrin, Lady Henry, I think?" "Yes; it was at dear Lohengrin. I like Wagner's music better than anybody's. It is so loud that one can talk the whole time without other people hearing what one says. That is a great advantage, don't you think so, Mr. Gray?" The same nervous staccato laugh broke from her thin lips, and her fingers began to play with a long tortoise-shell paper-knife. Dorian smiled and shook his head: "I am afraid I don't think so, Lady Henry. I never talk during music--at least, during good music. If one hears bad music, it is one's duty to drown it in conversation." "Ah! that is one of Harry's views, isn't it, Mr. Gray? I always hear Harry's views from his friends. It is the only way I get to know of them. But you must not think I don't like good music. I adore it, but I am afraid of it. It makes me too romantic. I have simply worshipped pianists--two at a time, sometimes, Harry tells me. I don't know what it is about them. Perhaps it is that they are foreigners. They all are, ain't they? Even those that are born in England become foreigners after a time, don't they? It is so clever of them, and such a compliment to art. Makes it quite cosmopolitan, doesn't it? You have never been to any of my parties, have you, Mr. Gray? You must come. I can't afford orchids, but I spare no expense in foreigners. They make one's rooms look so picturesque. But here is Harry! Harry, I came in to look for you, to ask you something--I forget what it was--and I found Mr. Gray here. We have had such a pleasant chat about music. We have quite the same ideas. No; I think our ideas are quite different. But he has been most pleasant. I am so glad I've seen him." "I am charmed, my love, quite charmed," said Lord Henry, elevating his dark, crescent-shaped eyebrows and looking at them both with an amused smile. "So sorry I am late, Dorian. I went to look after a piece of old brocade in Wardour Street and had to bargain for hours for it. Nowadays people know the price of everything and the value of nothing." "I am afraid I must be going," exclaimed Lady Henry, breaking an awkward silence with her silly sudden laugh. "I have promised to drive with the duchess. Good-bye, Mr. Gray. Good-bye, Harry. You are dining out, I suppose? So am I. Perhaps I shall see you at Lady Thornbury's." "I dare say, my dear," said Lord Henry, shutting the door behind her as, looking like a bird of paradise that had been out all night in the rain, she flitted out of the room, leaving a faint odour of frangipanni. Then he lit a cigarette and flung himself down on the sofa. "Never marry a woman with straw-coloured hair, Dorian," he said after a few puffs. "Why, Harry?" "Because they are so sentimental." "But I like sentimental people." "Never marry at all, Dorian. Men marry because they are tired; women, because they are curious: both are disappointed." "I don't think I am likely to marry, Harry. I am too much in love. That is one of your aphorisms. I am putting it into practice, as I do everything that you say." "Who are you in love with?" asked Lord Henry after a pause. "With an actress," said Dorian Gray, blushing. Lord Henry shrugged his shoulders. "That is a rather commonplace _debut_." "You would not say so if you saw her, Harry." "Who is she?" "Her name is Sibyl Vane." "Never heard of her." "No one has. People will some day, however. She is a genius." "My dear boy, no woman is a genius. Women are a decorative sex. They never have anything to say, but they say it charmingly. Women represent the triumph of matter over mind, just as men represent the triumph of mind over morals." "Harry, how can you?" "My dear Dorian, it is quite true. I am analysing women at present, so I ought to know. The subject is not so abstruse as I thought it was. I find that, ultimately, there are only two kinds of women, the plain and the coloured. The plain women are very useful. If you want to gain a reputation for respectability, you have merely to take them down to supper. The other women are very charming. They commit one mistake, however. They paint in order to try and look young. Our grandmothers painted in order to try and talk brilliantly. _Rouge_ and _esprit_ used to go together. That is all over now. As long as a woman can look ten years younger than her own daughter, she is perfectly satisfied. As for conversation, there are only five women in London worth talking to, and two of these can't be admitted into decent society. However, tell me about your genius. How long have you known her?" "Ah! Harry, your views terrify me." "Never mind that. How long have you known her?" "About three weeks." "And where did you come across her?" "I will tell you, Harry, but you mustn't be unsympathetic about it. After all, it never would have happened if I had not met you. You filled me with a wild desire to know everything about life. For days after I met you, something seemed to throb in my veins. As I lounged in the park, or strolled down Piccadilly, I used to look at every one who passed me and wonder, with a mad curiosity, what sort of lives they led. Some of them fascinated me. Others filled me with terror. There was an exquisite poison in the air. I had a passion for sensations.... Well, one evening about seven o'clock, I determined to go out in search of some adventure. I felt that this grey monstrous London of ours, with its myriads of people, its sordid sinners, and its splendid sins, as you once phrased it, must have something in store for me. I fancied a thousand things. The mere danger gave me a sense of delight. I remembered what you had said to me on that wonderful evening when we first dined together, about the search for beauty being the real secret of life. I don't know what I expected, but I went out and wandered eastward, soon losing my way in a labyrinth of grimy streets and black grassless squares. About half-past eight I passed by an absurd little theatre, with great flaring gas-jets and gaudy play-bills. A hideous Jew, in the most amazing waistcoat I ever beheld in my life, was standing at the entrance, smoking a vile cigar. He had greasy ringlets, and an enormous diamond blazed in the centre of a soiled shirt. 'Have a box, my Lord?' he said, when he saw me, and he took off his hat with an air of gorgeous servility. There was something about him, Harry, that amused me. He was such a monster. You will laugh at me, I know, but I really went in and paid a whole guinea for the stage-box. To the present day I can't make out why I did so; and yet if I hadn't--my dear Harry, if I hadn't--I should have missed the greatest romance of my life. I see you are laughing. It is horrid of you!" "I am not laughing, Dorian; at least I am not laughing at you. But you should not say the greatest romance of your life. You should say the first romance of your life. You will always be loved, and you will always be in love with love. A _grande passion_ is the privilege of people who have nothing to do. That is the one use of the idle classes of a country. Don't be afraid. There are exquisite things in store for you. This is merely the beginning." "Do you think my nature so shallow?" cried Dorian Gray angrily. "No; I think your nature so deep." "How do you mean?" "My dear boy, the people who love only once in their lives are really the shallow people. What they call their loyalty, and their fidelity, I call either the lethargy of custom or their lack of imagination. Faithfulness is to the emotional life what consistency is to the life of the intellect--simply a confession of failure. Faithfulness! I must analyse it some day. The passion for property is in it. There are many things that we would throw away if we were not afraid that others might pick them up. But I don't want to interrupt you. Go on with your story." "Well, I found myself seated in a horrid little private box, with a vulgar drop-scene staring me in the face. I looked out from behind the curtain and surveyed the house. It was a tawdry affair, all Cupids and cornucopias, like a third-rate wedding-cake. The gallery and pit were fairly full, but the two rows of dingy stalls were quite empty, and there was hardly a person in what I suppose they called the dress-circle. Women went about with oranges and ginger-beer, and there was a terrible consumption of nuts going on." "It must have been just like the palmy days of the British drama." "Just like, I should fancy, and very depressing. I began to wonder what on earth I should do when I caught sight of the play-bill. What do you think the play was, Harry?" "I should think 'The Idiot Boy', or 'Dumb but Innocent'. Our fathers used to like that sort of piece, I believe. The longer I live, Dorian, the more keenly I feel that whatever was good enough for our fathers is not good enough for us. In art, as in politics, _les grandperes ont toujours tort_." "This play was good enough for us, Harry. It was Romeo and Juliet. I must admit that I was rather annoyed at the idea of seeing Shakespeare done in such a wretched hole of a place. Still, I felt interested, in a sort of way. At any rate, I determined to wait for the first act. There was a dreadful orchestra, presided over by a young Hebrew who sat at a cracked piano, that nearly drove me away, but at last the drop-scene was drawn up and the play began. Romeo was a stout elderly gentleman, with corked eyebrows, a husky tragedy voice, and a figure like a beer-barrel. Mercutio was almost as bad. He was played by the low-comedian, who had introduced gags of his own and was on most friendly terms with the pit. They were both as grotesque as the scenery, and that looked as if it had come out of a country-booth. But Juliet! Harry, imagine a girl, hardly seventeen years of age, with a little, flowerlike face, a small Greek head with plaited coils of dark-brown hair, eyes that were violet wells of passion, lips that were like the petals of a rose. She was the loveliest thing I had ever seen in my life. You said to me once that pathos left you unmoved, but that beauty, mere beauty, could fill your eyes with tears. I tell you, Harry, I could hardly see this girl for the mist of tears that came across me. And her voice--I never heard such a voice. It was very low at first, with deep mellow notes that seemed to fall singly upon one's ear. Then it became a little louder, and sounded like a flute or a distant hautboy. In the garden-scene it had all the tremulous ecstasy that one hears just before dawn when nightingales are singing. There were moments, later on, when it had the wild passion of violins. You know how a voice can stir one. Your voice and the voice of Sibyl Vane are two things that I shall never forget. When I close my eyes, I hear them, and each of them says something different. I don't know which to follow. Why should I not love her? Harry, I do love her. She is everything to me in life. Night after night I go to see her play. One evening she is Rosalind, and the next evening she is Imogen. I have seen her die in the gloom of an Italian tomb, sucking the poison from her lover's lips. I have watched her wandering through the forest of Arden, disguised as a pretty boy in hose and doublet and dainty cap. She has been mad, and has come into the presence of a guilty king, and given him rue to wear and bitter herbs to taste of. She has been innocent, and the black hands of jealousy have crushed her reedlike throat. I have seen her in every age and in every costume. Ordinary women never appeal to one's imagination. They are limited to their century. No glamour ever transfigures them. One knows their minds as easily as one knows their bonnets. One can always find them. There is no mystery in any of them. They ride in the park in the morning and chatter at tea-parties in the afternoon. They have their stereotyped smile and their fashionable manner. They are quite obvious. But an actress! How different an actress is! Harry! why didn't you tell me that the only thing worth loving is an actress?" "Because I have loved so many of them, Dorian." "Oh, yes, horrid people with dyed hair and painted faces." "Don't run down dyed hair and painted faces. There is an extraordinary charm in them, sometimes," said Lord Henry. "I wish now I had not told you about Sibyl Vane." "You could not have helped telling me, Dorian. All through your life you will tell me everything you do." "Yes, Harry, I believe that is true. I cannot help telling you things. You have a curious influence over me. If I ever did a crime, I would come and confess it to you. You would understand me." "People like you--the wilful sunbeams of life--don't commit crimes, Dorian. But I am much obliged for the compliment, all the same. And now tell me--reach me the matches, like a good boy--thanks--what are your actual relations with Sibyl Vane?" Dorian Gray leaped to his feet, with flushed cheeks and burning eyes. "Harry! Sibyl Vane is sacred!" "It is only the sacred things that are worth touching, Dorian," said Lord Henry, with a strange touch of pathos in his voice. "But why should you be annoyed? I suppose she will belong to you some day. When one is in love, one always begins by deceiving one's self, and one always ends by deceiving others. That is what the world calls a romance. You know her, at any rate, I suppose?" "Of course I know her. On the first night I was at the theatre, the horrid old Jew came round to the box after the performance was over and offered to take me behind the scenes and introduce me to her. I was furious with him, and told him that Juliet had been dead for hundreds of years and that her body was lying in a marble tomb in Verona. I think, from his blank look of amazement, that he was under the impression that I had taken too much champagne, or something." "I am not surprised." "Then he asked me if I wrote for any of the newspapers. I told him I never even read them. He seemed terribly disappointed at that, and confided to me that all the dramatic critics were in a conspiracy against him, and that they were every one of them to be bought." "I should not wonder if he was quite right there. But, on the other hand, judging from their appearance, most of them cannot be at all expensive." "Well, he seemed to think they were beyond his means," laughed Dorian. "By this time, however, the lights were being put out in the theatre, and I had to go. He wanted me to try some cigars that he strongly recommended. I declined. The next night, of course, I arrived at the place again. When he saw me, he made me a low bow and assured me that I was a munificent patron of art. He was a most offensive brute, though he had an extraordinary passion for Shakespeare. He told me once, with an air of pride, that his five bankruptcies were entirely due to 'The Bard,' as he insisted on calling him. He seemed to think it a distinction." "It was a distinction, my dear Dorian--a great distinction. Most people become bankrupt through having invested too heavily in the prose of life. To have ruined one's self over poetry is an honour. But when did you first speak to Miss Sibyl Vane?" "The third night. She had been playing Rosalind. I could not help going round. I had thrown her some flowers, and she had looked at me--at least I fancied that she had. The old Jew was persistent. He seemed determined to take me behind, so I consented. It was curious my not wanting to know her, wasn't it?" "No; I don't think so." "My dear Harry, why?" "I will tell you some other time. Now I want to know about the girl." "Sibyl? Oh, she was so shy and so gentle. There is something of a child about her. Her eyes opened wide in exquisite wonder when I told her what I thought of her performance, and she seemed quite unconscious of her power. I think we were both rather nervous. The old Jew stood grinning at the doorway of the dusty greenroom, making elaborate speeches about us both, while we stood looking at each other like children. He would insist on calling me 'My Lord,' so I had to assure Sibyl that I was not anything of the kind. She said quite simply to me, 'You look more like a prince. I must call you Prince Charming.'" "Upon my word, Dorian, Miss Sibyl knows how to pay compliments." "You don't understand her, Harry. She regarded me merely as a person in a play. She knows nothing of life. She lives with her mother, a faded tired woman who played Lady Capulet in a sort of magenta dressing-wrapper on the first night, and looks as if she had seen better days." "I know that look. It depresses me," murmured Lord Henry, examining his rings. "The Jew wanted to tell me her history, but I said it did not interest me." "You were quite right. There is always something infinitely mean about other people's tragedies." "Sibyl is the only thing I care about. What is it to me where she came from? From her little head to her little feet, she is absolutely and entirely divine. Every night of my life I go to see her act, and every night she is more marvellous." "That is the reason, I suppose, that you never dine with me now. I thought you must have some curious romance on hand. You have; but it is not quite what I expected." "My dear Harry, we either lunch or sup together every day, and I have been to the opera with you several times," said Dorian, opening his blue eyes in wonder. "You always come dreadfully late." "Well, I can't help going to see Sibyl play," he cried, "even if it is only for a single act. I get hungry for her presence; and when I think of the wonderful soul that is hidden away in that little ivory body, I am filled with awe." "You can dine with me to-night, Dorian, can't you?" He shook his head. "To-night she is Imogen," he answered, "and to-morrow night she will be Juliet." "When is she Sibyl Vane?" "Never." "I congratulate you." "How horrid you are! She is all the great heroines of the world in one. She is more than an individual. You laugh, but I tell you she has genius. I love her, and I must make her love me. You, who know all the secrets of life, tell me how to charm Sibyl Vane to love me! I want to make Romeo jealous. I want the dead lovers of the world to hear our laughter and grow sad. I want a breath of our passion to stir their dust into consciousness, to wake their ashes into pain. My God, Harry, how I worship her!" He was walking up and down the room as he spoke. Hectic spots of red burned on his cheeks. He was terribly excited. Lord Henry watched him with a subtle sense of pleasure. How different he was now from the shy frightened boy he had met in Basil Hallward's studio! His nature had developed like a flower, had borne blossoms of scarlet flame. Out of its secret hiding-place had crept his soul, and desire had come to meet it on the way. "And what do you propose to do?" said Lord Henry at last. "I want you and Basil to come with me some night and see her act. I have not the slightest fear of the result. You are certain to acknowledge her genius. Then we must get her out of the Jew's hands. She is bound to him for three years--at least for two years and eight months--from the present time. I shall have to pay him something, of course. When all that is settled, I shall take a West End theatre and bring her out properly. She will make the world as mad as she has made me." "That would be impossible, my dear boy." "Yes, she will. She has not merely art, consummate art-instinct, in her, but she has personality also; and you have often told me that it is personalities, not principles, that move the age." "Well, what night shall we go?" "Let me see. To-day is Tuesday. Let us fix to-morrow. She plays Juliet to-morrow." "All right. The Bristol at eight o'clock; and I will get Basil." "Not eight, Harry, please. Half-past six. We must be there before the curtain rises. You must see her in the first act, where she meets Romeo." "Half-past six! What an hour! It will be like having a meat-tea, or reading an English novel. It must be seven. No gentleman dines before seven. Shall you see Basil between this and then? Or shall I write to him?" "Dear Basil! I have not laid eyes on him for a week. It is rather horrid of me, as he has sent me my portrait in the most wonderful frame, specially designed by himself, and, though I am a little jealous of the picture for being a whole month younger than I am, I must admit that I delight in it. Perhaps you had better write to him. I don't want to see him alone. He says things that annoy me. He gives me good advice." Lord Henry smiled. "People are very fond of giving away what they need most themselves. It is what I call the depth of generosity." "Oh, Basil is the best of fellows, but he seems to me to be just a bit of a Philistine. Since I have known you, Harry, I have discovered that." "Basil, my dear boy, puts everything that is charming in him into his work. The consequence is that he has nothing left for life but his prejudices, his principles, and his common sense. The only artists I have ever known who are personally delightful are bad artists. Good artists exist simply in what they make, and consequently are perfectly uninteresting in what they are. A great poet, a really great poet, is the most unpoetical of all creatures. But inferior poets are absolutely fascinating. The worse their rhymes are, the more picturesque they look. The mere fact of having published a book of second-rate sonnets makes a man quite irresistible. He lives the poetry that he cannot write. The others write the poetry that they dare not realize." "I wonder is that really so, Harry?" said Dorian Gray, putting some perfume on his handkerchief out of a large, gold-topped bottle that stood on the table. "It must be, if you say it. And now I am off. Imogen is waiting for me. Don't forget about to-morrow. Good-bye." As he left the room, Lord Henry's heavy eyelids drooped, and he began to think. Certainly few people had ever interested him so much as Dorian Gray, and yet the lad's mad adoration of some one else caused him not the slightest pang of annoyance or jealousy. He was pleased by it. It made him a more interesting study. He had been always enthralled by the methods of natural science, but the ordinary subject-matter of that science had seemed to him trivial and of no import. And so he had begun by vivisecting himself, as he had ended by vivisecting others. Human life--that appeared to him the one thing worth investigating. Compared to it there was nothing else of any value. It was true that as one watched life in its curious crucible of pain and pleasure, one could not wear over one's face a mask of glass, nor keep the sulphurous fumes from troubling the brain and making the imagination turbid with monstrous fancies and misshapen dreams. There were poisons so subtle that to know their properties one had to sicken of them. There were maladies so strange that one had to pass through them if one sought to understand their nature. And, yet, what a great reward one received! How wonderful the whole world became to one! To note the curious hard logic of passion, and the emotional coloured life of the intellect--to observe where they met, and where they separated, at what point they were in unison, and at what point they were at discord--there was a delight in that! What matter what the cost was? One could never pay too high a price for any sensation. He was conscious--and the thought brought a gleam of pleasure into his brown agate eyes--that it was through certain words of his, musical words said with musical utterance, that Dorian Gray's soul had turned to this white girl and bowed in worship before her. To a large extent the lad was his own creation. He had made him premature. That was something. Ordinary people waited till life disclosed to them its secrets, but to the few, to the elect, the mysteries of life were revealed before the veil was drawn away. Sometimes this was the effect of art, and chiefly of the art of literature, which dealt immediately with the passions and the intellect. But now and then a complex personality took the place and assumed the office of art, was indeed, in its way, a real work of art, life having its elaborate masterpieces, just as poetry has, or sculpture, or painting. Yes, the lad was premature. He was gathering his harvest while it was yet spring. The pulse and passion of youth were in him, but he was becoming self-conscious. It was delightful to watch him. With his beautiful face, and his beautiful soul, he was a thing to wonder at. It was no matter how it all ended, or was destined to end. He was like one of those gracious figures in a pageant or a play, whose joys seem to be remote from one, but whose sorrows stir one's sense of beauty, and whose wounds are like red roses. Soul and body, body and soul--how mysterious they were! There was animalism in the soul, and the body had its moments of spirituality. The senses could refine, and the intellect could degrade. Who could say where the fleshly impulse ceased, or the psychical impulse began? How shallow were the arbitrary definitions of ordinary psychologists! And yet how difficult to decide between the claims of the various schools! Was the soul a shadow seated in the house of sin? Or was the body really in the soul, as Giordano Bruno thought? The separation of spirit from matter was a mystery, and the union of spirit with matter was a mystery also. He began to wonder whether we could ever make psychology so absolute a science that each little spring of life would be revealed to us. As it was, we always misunderstood ourselves and rarely understood others. Experience was of no ethical value. It was merely the name men gave to their mistakes. Moralists had, as a rule, regarded it as a mode of warning, had claimed for it a certain ethical efficacy in the formation of character, had praised it as something that taught us what to follow and showed us what to avoid. But there was no motive power in experience. It was as little of an active cause as conscience itself. All that it really demonstrated was that our future would be the same as our past, and that the sin we had done once, and with loathing, we would do many times, and with joy. It was clear to him that the experimental method was the only method by which one could arrive at any scientific analysis of the passions; and certainly Dorian Gray was a subject made to his hand, and seemed to promise rich and fruitful results. His sudden mad love for Sibyl Vane was a psychological phenomenon of no small interest. There was no doubt that curiosity had much to do with it, curiosity and the desire for new experiences, yet it was not a simple, but rather a very complex passion. What there was in it of the purely sensuous instinct of boyhood had been transformed by the workings of the imagination, changed into something that seemed to the lad himself to be remote from sense, and was for that very reason all the more dangerous. It was the passions about whose origin we deceived ourselves that tyrannized most strongly over us. Our weakest motives were those of whose nature we were conscious. It often happened that when we thought we were experimenting on others we were really experimenting on ourselves. While Lord Henry sat dreaming on these things, a knock came to the door, and his valet entered and reminded him it was time to dress for dinner. He got up and looked out into the street. The sunset had smitten into scarlet gold the upper windows of the houses opposite. The panes glowed like plates of heated metal. The sky above was like a faded rose. He thought of his friend's young fiery-coloured life and wondered how it was all going to end. When he arrived home, about half-past twelve o'clock, he saw a telegram lying on the hall table. He opened it and found it was from Dorian Gray. It was to tell him that he was engaged to be married to Sibyl Vane. CHAPTER 5 "Mother, Mother, I am so happy!" whispered the girl, burying her face in the lap of the faded, tired-looking woman who, with back turned to the shrill intrusive light, was sitting in the one arm-chair that their dingy sitting-room contained. "I am so happy!" she repeated, "and you must be happy, too!" Mrs. Vane winced and put her thin, bismuth-whitened hands on her daughter's head. "Happy!" she echoed, "I am only happy, Sibyl, when I see you act. You must not think of anything but your acting. Mr. Isaacs has been very good to us, and we owe him money." The girl looked up and pouted. "Money, Mother?" she cried, "what does money matter? Love is more than money." "Mr. Isaacs has advanced us fifty pounds to pay off our debts and to get a proper outfit for James. You must not forget that, Sibyl. Fifty pounds is a very large sum. Mr. Isaacs has been most considerate." "He is not a gentleman, Mother, and I hate the way he talks to me," said the girl, rising to her feet and going over to the window. "I don't know how we could manage without him," answered the elder woman querulously. Sibyl Vane tossed her head and laughed. "We don't want him any more, Mother. Prince Charming rules life for us now." Then she paused. A rose shook in her blood and shadowed her cheeks. Quick breath parted the petals of her lips. They trembled. Some southern wind of passion swept over her and stirred the dainty folds of her dress. "I love him," she said simply. "Foolish child! foolish child!" was the parrot-phrase flung in answer. The waving of crooked, false-jewelled fingers gave grotesqueness to the words. The girl laughed again. The joy of a caged bird was in her voice. Her eyes caught the melody and echoed it in radiance, then closed for a moment, as though to hide their secret. When they opened, the mist of a dream had passed across them. Thin-lipped wisdom spoke at her from the worn chair, hinted at prudence, quoted from that book of cowardice whose author apes the name of common sense. She did not listen. She was free in her prison of passion. Her prince, Prince Charming, was with her. She had called on memory to remake him. She had sent her soul to search for him, and it had brought him back. His kiss burned again upon her mouth. Her eyelids were warm with his breath. Then wisdom altered its method and spoke of espial and discovery. This young man might be rich. If so, marriage should be thought of. Against the shell of her ear broke the waves of worldly cunning. The arrows of craft shot by her. She saw the thin lips moving, and smiled. Suddenly she felt the need to speak. The wordy silence troubled her. "Mother, Mother," she cried, "why does he love me so much? I know why I love him. I love him because he is like what love himself should be. But what does he see in me? I am not worthy of him. And yet--why, I cannot tell--though I feel so much beneath him, I don't feel humble. I feel proud, terribly proud. Mother, did you love my father as I love Prince Charming?" The elder woman grew pale beneath the coarse powder that daubed her cheeks, and her dry lips twitched with a spasm of pain. Sybil rushed to her, flung her arms round her neck, and kissed her. "Forgive me, Mother. I know it pains you to talk about our father. But it only pains you because you loved him so much. Don't look so sad. I am as happy to-day as you were twenty years ago. Ah! let me be happy for ever!" "My child, you are far too young to think of falling in love. Besides, what do you know of this young man? You don't even know his name. The whole thing is most inconvenient, and really, when James is going away to Australia, and I have so much to think of, I must say that you should have shown more consideration. However, as I said before, if he is rich ..." "Ah! Mother, Mother, let me be happy!" Mrs. Vane glanced at her, and with one of those false theatrical gestures that so often become a mode of second nature to a stage-player, clasped her in her arms. At this moment, the door opened and a young lad with rough brown hair came into the room. He was thick-set of figure, and his hands and feet were large and somewhat clumsy in movement. He was not so finely bred as his sister. One would hardly have guessed the close relationship that existed between them. Mrs. Vane fixed her eyes on him and intensified her smile. She mentally elevated her son to the dignity of an audience. She felt sure that the _tableau_ was interesting. "You might keep some of your kisses for me, Sibyl, I think," said the lad with a good-natured grumble. "Ah! but you don't like being kissed, Jim," she cried. "You are a dreadful old bear." And she ran across the room and hugged him. James Vane looked into his sister's face with tenderness. "I want you to come out with me for a walk, Sibyl. I don't suppose I shall ever see this horrid London again. I am sure I don't want to." "My son, don't say such dreadful things," murmured Mrs. Vane, taking up a tawdry theatrical dress, with a sigh, and beginning to patch it. She felt a little disappointed that he had not joined the group. It would have increased the theatrical picturesqueness of the situation. "Why not, Mother? I mean it." "You pain me, my son. I trust you will return from Australia in a position of affluence. I believe there is no society of any kind in the Colonies--nothing that I would call society--so when you have made your fortune, you must come back and assert yourself in London." "Society!" muttered the lad. "I don't want to know anything about that. I should like to make some money to take you and Sibyl off the stage. I hate it." "Oh, Jim!" said Sibyl, laughing, "how unkind of you! But are you really going for a walk with me? That will be nice! I was afraid you were going to say good-bye to some of your friends--to Tom Hardy, who gave you that hideous pipe, or Ned Langton, who makes fun of you for smoking it. It is very sweet of you to let me have your last afternoon. Where shall we go? Let us go to the park." "I am too shabby," he answered, frowning. "Only swell people go to the park." "Nonsense, Jim," she whispered, stroking the sleeve of his coat. He hesitated for a moment. "Very well," he said at last, "but don't be too long dressing." She danced out of the door. One could hear her singing as she ran upstairs. Her little feet pattered overhead. He walked up and down the room two or three times. Then he turned to the still figure in the chair. "Mother, are my things ready?" he asked. "Quite ready, James," she answered, keeping her eyes on her work. For some months past she had felt ill at ease when she was alone with this rough stern son of hers. Her shallow secret nature was troubled when their eyes met. She used to wonder if he suspected anything. The silence, for he made no other observation, became intolerable to her. She began to complain. Women defend themselves by attacking, just as they attack by sudden and strange surrenders. "I hope you will be contented, James, with your sea-faring life," she said. "You must remember that it is your own choice. You might have entered a solicitor's office. Solicitors are a very respectable class, and in the country often dine with the best families." "I hate offices, and I hate clerks," he replied. "But you are quite right. I have chosen my own life. All I say is, watch over Sibyl. Don't let her come to any harm. Mother, you must watch over her." "James, you really talk very strangely. Of course I watch over Sibyl." "I hear a gentleman comes every night to the theatre and goes behind to talk to her. Is that right? What about that?" "You are speaking about things you don't understand, James. In the profession we are accustomed to receive a great deal of most gratifying attention. I myself used to receive many bouquets at one time. That was when acting was really understood. As for Sibyl, I do not know at present whether her attachment is serious or not. But there is no doubt that the young man in question is a perfect gentleman. He is always most polite to me. Besides, he has the appearance of being rich, and the flowers he sends are lovely." "You don't know his name, though," said the lad harshly. "No," answered his mother with a placid expression in her face. "He has not yet revealed his real name. I think it is quite romantic of him. He is probably a member of the aristocracy." James Vane bit his lip. "Watch over Sibyl, Mother," he cried, "watch over her." "My son, you distress me very much. Sibyl is always under my special care. Of course, if this gentleman is wealthy, there is no reason why she should not contract an alliance with him. I trust he is one of the aristocracy. He has all the appearance of it, I must say. It might be a most brilliant marriage for Sibyl. They would make a charming couple. His good looks are really quite remarkable; everybody notices them." The lad muttered something to himself and drummed on the window-pane with his coarse fingers. He had just turned round to say something when the door opened and Sibyl ran in. "How serious you both are!" she cried. "What is the matter?" "Nothing," he answered. "I suppose one must be serious sometimes. Good-bye, Mother; I will have my dinner at five o'clock. Everything is packed, except my shirts, so you need not trouble." "Good-bye, my son," she answered with a bow of strained stateliness. She was extremely annoyed at the tone he had adopted with her, and there was something in his look that had made her feel afraid. "Kiss me, Mother," said the girl. Her flowerlike lips touched the withered cheek and warmed its frost. "My child! my child!" cried Mrs. Vane, looking up to the ceiling in search of an imaginary gallery. "Come, Sibyl," said her brother impatiently. He hated his mother's affectations. They went out into the flickering, wind-blown sunlight and strolled down the dreary Euston Road. The passersby glanced in wonder at the sullen heavy youth who, in coarse, ill-fitting clothes, was in the company of such a graceful, refined-looking girl. He was like a common gardener walking with a rose. Jim frowned from time to time when he caught the inquisitive glance of some stranger. He had that dislike of being stared at, which comes on geniuses late in life and never leaves the commonplace. Sibyl, however, was quite unconscious of the effect she was producing. Her love was trembling in laughter on her lips. She was thinking of Prince Charming, and, that she might think of him all the more, she did not talk of him, but prattled on about the ship in which Jim was going to sail, about the gold he was certain to find, about the wonderful heiress whose life he was to save from the wicked, red-shirted bushrangers. For he was not to remain a sailor, or a supercargo, or whatever he was going to be. Oh, no! A sailor's existence was dreadful. Fancy being cooped up in a horrid ship, with the hoarse, hump-backed waves trying to get in, and a black wind blowing the masts down and tearing the sails into long screaming ribands! He was to leave the vessel at Melbourne, bid a polite good-bye to the captain, and go off at once to the gold-fields. Before a week was over he was to come across a large nugget of pure gold, the largest nugget that had ever been discovered, and bring it down to the coast in a waggon guarded by six mounted policemen. The bushrangers were to attack them three times, and be defeated with immense slaughter. Or, no. He was not to go to the gold-fields at all. They were horrid places, where men got intoxicated, and shot each other in bar-rooms, and used bad language. He was to be a nice sheep-farmer, and one evening, as he was riding home, he was to see the beautiful heiress being carried off by a robber on a black horse, and give chase, and rescue her. Of course, she would fall in love with him, and he with her, and they would get married, and come home, and live in an immense house in London. Yes, there were delightful things in store for him. But he must be very good, and not lose his temper, or spend his money foolishly. She was only a year older than he was, but she knew so much more of life. He must be sure, also, to write to her by every mail, and to say his prayers each night before he went to sleep. God was very good, and would watch over him. She would pray for him, too, and in a few years he would come back quite rich and happy. The lad listened sulkily to her and made no answer. He was heart-sick at leaving home. Yet it was not this alone that made him gloomy and morose. Inexperienced though he was, he had still a strong sense of the danger of Sibyl's position. This young dandy who was making love to her could mean her no good. He was a gentleman, and he hated him for that, hated him through some curious race-instinct for which he could not account, and which for that reason was all the more dominant within him. He was conscious also of the shallowness and vanity of his mother's nature, and in that saw infinite peril for Sibyl and Sibyl's happiness. Children begin by loving their parents; as they grow older they judge them; sometimes they forgive them. His mother! He had something on his mind to ask of her, something that he had brooded on for many months of silence. A chance phrase that he had heard at the theatre, a whispered sneer that had reached his ears one night as he waited at the stage-door, had set loose a train of horrible thoughts. He remembered it as if it had been the lash of a hunting-crop across his face. His brows knit together into a wedge-like furrow, and with a twitch of pain he bit his underlip. "You are not listening to a word I am saying, Jim," cried Sibyl, "and I am making the most delightful plans for your future. Do say something." "What do you want me to say?" "Oh! that you will be a good boy and not forget us," she answered, smiling at him. He shrugged his shoulders. "You are more likely to forget me than I am to forget you, Sibyl." She flushed. "What do you mean, Jim?" she asked. "You have a new friend, I hear. Who is he? Why have you not told me about him? He means you no good." "Stop, Jim!" she exclaimed. "You must not say anything against him. I love him." "Why, you don't even know his name," answered the lad. "Who is he? I have a right to know." "He is called Prince Charming. Don't you like the name. Oh! you silly boy! you should never forget it. If you only saw him, you would think him the most wonderful person in the world. Some day you will meet him--when you come back from Australia. You will like him so much. Everybody likes him, and I ... love him. I wish you could come to the theatre to-night. He is going to be there, and I am to play Juliet. Oh! how I shall play it! Fancy, Jim, to be in love and play Juliet! To have him sitting there! To play for his delight! I am afraid I may frighten the company, frighten or enthrall them. To be in love is to surpass one's self. Poor dreadful Mr. Isaacs will be shouting 'genius' to his loafers at the bar. He has preached me as a dogma; to-night he will announce me as a revelation. I feel it. And it is all his, his only, Prince Charming, my wonderful lover, my god of graces. But I am poor beside him. Poor? What does that matter? When poverty creeps in at the door, love flies in through the window. Our proverbs want rewriting. They were made in winter, and it is summer now; spring-time for me, I think, a very dance of blossoms in blue skies." "He is a gentleman," said the lad sullenly. "A prince!" she cried musically. "What more do you want?" "He wants to enslave you." "I shudder at the thought of being free." "I want you to beware of him." "To see him is to worship him; to know him is to trust him." "Sibyl, you are mad about him." She laughed and took his arm. "You dear old Jim, you talk as if you were a hundred. Some day you will be in love yourself. Then you will know what it is. Don't look so sulky. Surely you should be glad to think that, though you are going away, you leave me happier than I have ever been before. Life has been hard for us both, terribly hard and difficult. But it will be different now. You are going to a new world, and I have found one. Here are two chairs; let us sit down and see the smart people go by." They took their seats amidst a crowd of watchers. The tulip-beds across the road flamed like throbbing rings of fire. A white dust--tremulous cloud of orris-root it seemed--hung in the panting air. The brightly coloured parasols danced and dipped like monstrous butterflies. She made her brother talk of himself, his hopes, his prospects. He spoke slowly and with effort. They passed words to each other as players at a game pass counters. Sibyl felt oppressed. She could not communicate her joy. A faint smile curving that sullen mouth was all the echo she could win. After some time she became silent. Suddenly she caught a glimpse of golden hair and laughing lips, and in an open carriage with two ladies Dorian Gray drove past. She started to her feet. "There he is!" she cried. "Who?" said Jim Vane. "Prince Charming," she answered, looking after the victoria. He jumped up and seized her roughly by the arm. "Show him to me. Which is he? Point him out. I must see him!" he exclaimed; but at that moment the Duke of Berwick's four-in-hand came between, and when it had left the space clear, the carriage had swept out of the park. "He is gone," murmured Sibyl sadly. "I wish you had seen him." "I wish I had, for as sure as there is a God in heaven, if he ever does you any wrong, I shall kill him." She looked at him in horror. He repeated his words. They cut the air like a dagger. The people round began to gape. A lady standing close to her tittered. "Come away, Jim; come away," she whispered. He followed her doggedly as she passed through the crowd. He felt glad at what he had said. When they reached the Achilles Statue, she turned round. There was pity in her eyes that became laughter on her lips. She shook her head at him. "You are foolish, Jim, utterly foolish; a bad-tempered boy, that is all. How can you say such horrible things? You don't know what you are talking about. You are simply jealous and unkind. Ah! I wish you would fall in love. Love makes people good, and what you said was wicked." "I am sixteen," he answered, "and I know what I am about. Mother is no help to you. She doesn't understand how to look after you. I wish now that I was not going to Australia at all. I have a great mind to chuck the whole thing up. I would, if my articles hadn't been signed." "Oh, don't be so serious, Jim. You are like one of the heroes of those silly melodramas Mother used to be so fond of acting in. I am not going to quarrel with you. I have seen him, and oh! to see him is perfect happiness. We won't quarrel. I know you would never harm any one I love, would you?" "Not as long as you love him, I suppose," was the sullen answer. "I shall love him for ever!" she cried. "And he?" "For ever, too!" "He had better." She shrank from him. Then she laughed and put her hand on his arm. He was merely a boy. At the Marble Arch they hailed an omnibus, which left them close to their shabby home in the Euston Road. It was after five o'clock, and Sibyl had to lie down for a couple of hours before acting. Jim insisted that she should do so. He said that he would sooner part with her when their mother was not present. She would be sure to make a scene, and he detested scenes of every kind. In Sybil's own room they parted. There was jealousy in the lad's heart, and a fierce murderous hatred of the stranger who, as it seemed to him, had come between them. Yet, when her arms were flung round his neck, and her fingers strayed through his hair, he softened and kissed her with real affection. There were tears in his eyes as he went downstairs. His mother was waiting for him below. She grumbled at his unpunctuality, as he entered. He made no answer, but sat down to his meagre meal. The flies buzzed round the table and crawled over the stained cloth. Through the rumble of omnibuses, and the clatter of street-cabs, he could hear the droning voice devouring each minute that was left to him. After some time, he thrust away his plate and put his head in his hands. He felt that he had a right to know. It should have been told to him before, if it was as he suspected. Leaden with fear, his mother watched him. Words dropped mechanically from her lips. A tattered lace handkerchief twitched in her fingers. When the clock struck six, he got up and went to the door. Then he turned back and looked at her. Their eyes met. In hers he saw a wild appeal for mercy. It enraged him. "Mother, I have something to ask you," he said. Her eyes wandered vaguely about the room. She made no answer. "Tell me the truth. I have a right to know. Were you married to my father?" She heaved a deep sigh. It was a sigh of relief. The terrible moment, the moment that night and day, for weeks and months, she had dreaded, had come at last, and yet she felt no terror. Indeed, in some measure it was a disappointment to her. The vulgar directness of the question called for a direct answer. The situation had not been gradually led up to. It was crude. It reminded her of a bad rehearsal. "No," she answered, wondering at the harsh simplicity of life. "My father was a scoundrel then!" cried the lad, clenching his fists. She shook her head. "I knew he was not free. We loved each other very much. If he had lived, he would have made provision for us. Don't speak against him, my son. He was your father, and a gentleman. Indeed, he was highly connected." An oath broke from his lips. "I don't care for myself," he exclaimed, "but don't let Sibyl.... It is a gentleman, isn't it, who is in love with her, or says he is? Highly connected, too, I suppose." For a moment a hideous sense of humiliation came over the woman. Her head drooped. She wiped her eyes with shaking hands. "Sibyl has a mother," she murmured; "I had none." The lad was touched. He went towards her, and stooping down, he kissed her. "I am sorry if I have pained you by asking about my father," he said, "but I could not help it. I must go now. Good-bye. Don't forget that you will have only one child now to look after, and believe me that if this man wrongs my sister, I will find out who he is, track him down, and kill him like a dog. I swear it." The exaggerated folly of the threat, the passionate gesture that accompanied it, the mad melodramatic words, made life seem more vivid to her. She was familiar with the atmosphere. She breathed more freely, and for the first time for many months she really admired her son. She would have liked to have continued the scene on the same emotional scale, but he cut her short. Trunks had to be carried down and mufflers looked for. The lodging-house drudge bustled in and out. There was the bargaining with the cabman. The moment was lost in vulgar details. It was with a renewed feeling of disappointment that she waved the tattered lace handkerchief from the window, as her son drove away. She was conscious that a great opportunity had been wasted. She consoled herself by telling Sibyl how desolate she felt her life would be, now that she had only one child to look after. She remembered the phrase. It had pleased her. Of the threat she said nothing. It was vividly and dramatically expressed. She felt that they would all laugh at it some day. CHAPTER 6 "I suppose you have heard the news, Basil?" said Lord Henry that evening as Hallward was shown into a little private room at the Bristol where dinner had been laid for three. "No, Harry," answered the artist, giving his hat and coat to the bowing waiter. "What is it? Nothing about politics, I hope! They don't interest me. There is hardly a single person in the House of Commons worth painting, though many of them would be the better for a little whitewashing." "Dorian Gray is engaged to be married," said Lord Henry, watching him as he spoke. Hallward started and then frowned. "Dorian engaged to be married!" he cried. "Impossible!" "It is perfectly true." "To whom?" "To some little actress or other." "I can't believe it. Dorian is far too sensible." "Dorian is far too wise not to do foolish things now and then, my dear Basil." "Marriage is hardly a thing that one can do now and then, Harry." "Except in America," rejoined Lord Henry languidly. "But I didn't say he was married. I said he was engaged to be married. There is a great difference. I have a distinct remembrance of being married, but I have no recollection at all of being engaged. I am inclined to think that I never was engaged." "But think of Dorian's birth, and position, and wealth. It would be absurd for him to marry so much beneath him." "If you want to make him marry this girl, tell him that, Basil. He is sure to do it, then. Whenever a man does a thoroughly stupid thing, it is always from the noblest motives." "I hope the girl is good, Harry. I don't want to see Dorian tied to some vile creature, who might degrade his nature and ruin his intellect." "Oh, she is better than good--she is beautiful," murmured Lord Henry, sipping a glass of vermouth and orange-bitters. "Dorian says she is beautiful, and he is not often wrong about things of that kind. Your portrait of him has quickened his appreciation of the personal appearance of other people. It has had that excellent effect, amongst others. We are to see her to-night, if that boy doesn't forget his appointment." "Are you serious?" "Quite serious, Basil. I should be miserable if I thought I should ever be more serious than I am at the present moment." "But do you approve of it, Harry?" asked the painter, walking up and down the room and biting his lip. "You can't approve of it, possibly. It is some silly infatuation." "I never approve, or disapprove, of anything now. It is an absurd attitude to take towards life. We are not sent into the world to air our moral prejudices. I never take any notice of what common people say, and I never interfere with what charming people do. If a personality fascinates me, whatever mode of expression that personality selects is absolutely delightful to me. Dorian Gray falls in love with a beautiful girl who acts Juliet, and proposes to marry her. Why not? If he wedded Messalina, he would be none the less interesting. You know I am not a champion of marriage. The real drawback to marriage is that it makes one unselfish. And unselfish people are colourless. They lack individuality. Still, there are certain temperaments that marriage makes more complex. They retain their egotism, and add to it many other egos. They are forced to have more than one life. They become more highly organized, and to be highly organized is, I should fancy, the object of man's existence. Besides, every experience is of value, and whatever one may say against marriage, it is certainly an experience. I hope that Dorian Gray will make this girl his wife, passionately adore her for six months, and then suddenly become fascinated by some one else. He would be a wonderful study." "You don't mean a single word of all that, Harry; you know you don't. If Dorian Gray's life were spoiled, no one would be sorrier than yourself. You are much better than you pretend to be." Lord Henry laughed. "The reason we all like to think so well of others is that we are all afraid for ourselves. The basis of optimism is sheer terror. We think that we are generous because we credit our neighbour with the possession of those virtues that are likely to be a benefit to us. We praise the banker that we may overdraw our account, and find good qualities in the highwayman in the hope that he may spare our pockets. I mean everything that I have said. I have the greatest contempt for optimism. As for a spoiled life, no life is spoiled but one whose growth is arrested. If you want to mar a nature, you have merely to reform it. As for marriage, of course that would be silly, but there are other and more interesting bonds between men and women. I will certainly encourage them. They have the charm of being fashionable. But here is Dorian himself. He will tell you more than I can." "My dear Harry, my dear Basil, you must both congratulate me!" said the lad, throwing off his evening cape with its satin-lined wings and shaking each of his friends by the hand in turn. "I have never been so happy. Of course, it is sudden--all really delightful things are. And yet it seems to me to be the one thing I have been looking for all my life." He was flushed with excitement and pleasure, and looked extraordinarily handsome. "I hope you will always be very happy, Dorian," said Hallward, "but I don't quite forgive you for not having let me know of your engagement. You let Harry know." "And I don't forgive you for being late for dinner," broke in Lord Henry, putting his hand on the lad's shoulder and smiling as he spoke. "Come, let us sit down and try what the new _chef_ here is like, and then you will tell us how it all came about." "There is really not much to tell," cried Dorian as they took their seats at the small round table. "What happened was simply this. After I left you yesterday evening, Harry, I dressed, had some dinner at that little Italian restaurant in Rupert Street you introduced me to, and went down at eight o'clock to the theatre. Sibyl was playing Rosalind. Of course, the scenery was dreadful and the Orlando absurd. But Sibyl! You should have seen her! When she came on in her boy's clothes, she was perfectly wonderful. She wore a moss-coloured velvet jerkin with cinnamon sleeves, slim, brown, cross-gartered hose, a dainty little green cap with a hawk's feather caught in a jewel, and a hooded cloak lined with dull red. She had never seemed to me more exquisite. She had all the delicate grace of that Tanagra figurine that you have in your studio, Basil. Her hair clustered round her face like dark leaves round a pale rose. As for her acting--well, you shall see her to-night. She is simply a born artist. I sat in the dingy box absolutely enthralled. I forgot that I was in London and in the nineteenth century. I was away with my love in a forest that no man had ever seen. After the performance was over, I went behind and spoke to her. As we were sitting together, suddenly there came into her eyes a look that I had never seen there before. My lips moved towards hers. We kissed each other. I can't describe to you what I felt at that moment. It seemed to me that all my life had been narrowed to one perfect point of rose-coloured joy. She trembled all over and shook like a white narcissus. Then she flung herself on her knees and kissed my hands. I feel that I should not tell you all this, but I can't help it. Of course, our engagement is a dead secret. She has not even told her own mother. I don't know what my guardians will say. Lord Radley is sure to be furious. I don't care. I shall be of age in less than a year, and then I can do what I like. I have been right, Basil, haven't I, to take my love out of poetry and to find my wife in Shakespeare's plays? Lips that Shakespeare taught to speak have whispered their secret in my ear. I have had the arms of Rosalind around me, and kissed Juliet on the mouth." "Yes, Dorian, I suppose you were right," said Hallward slowly. "Have you seen her to-day?" asked Lord Henry. Dorian Gray shook his head. "I left her in the forest of Arden; I shall find her in an orchard in Verona." Lord Henry sipped his champagne in a meditative manner. "At what particular point did you mention the word marriage, Dorian? And what did she say in answer? Perhaps you forgot all about it." "My dear Harry, I did not treat it as a business transaction, and I did not make any formal proposal. I told her that I loved her, and she said she was not worthy to be my wife. Not worthy! Why, the whole world is nothing to me compared with her." "Women are wonderfully practical," murmured Lord Henry, "much more practical than we are. In situations of that kind we often forget to say anything about marriage, and they always remind us." Hallward laid his hand upon his arm. "Don't, Harry. You have annoyed Dorian. He is not like other men. He would never bring misery upon any one. His nature is too fine for that." Lord Henry looked across the table. "Dorian is never annoyed with me," he answered. "I asked the question for the best reason possible, for the only reason, indeed, that excuses one for asking any question--simple curiosity. I have a theory that it is always the women who propose to us, and not we who propose to the women. Except, of course, in middle-class life. But then the middle classes are not modern." Dorian Gray laughed, and tossed his head. "You are quite incorrigible, Harry; but I don't mind. It is impossible to be angry with you. When you see Sibyl Vane, you will feel that the man who could wrong her would be a beast, a beast without a heart. I cannot understand how any one can wish to shame the thing he loves. I love Sibyl Vane. I want to place her on a pedestal of gold and to see the world worship the woman who is mine. What is marriage? An irrevocable vow. You mock at it for that. Ah! don't mock. It is an irrevocable vow that I want to take. Her trust makes me faithful, her belief makes me good. When I am with her, I regret all that you have taught me. I become different from what you have known me to be. I am changed, and the mere touch of Sibyl Vane's hand makes me forget you and all your wrong, fascinating, poisonous, delightful theories." "And those are ...?" asked Lord Henry, helping himself to some salad. "Oh, your theories about life, your theories about love, your theories about pleasure. All your theories, in fact, Harry." "Pleasure is the only thing worth having a theory about," he answered in his slow melodious voice. "But I am afraid I cannot claim my theory as my own. It belongs to Nature, not to me. Pleasure is Nature's test, her sign of approval. When we are happy, we are always good, but when we are good, we are not always happy." "Ah! but what do you mean by good?" cried Basil Hallward. "Yes," echoed Dorian, leaning back in his chair and looking at Lord Henry over the heavy clusters of purple-lipped irises that stood in the centre of the table, "what do you mean by good, Harry?" "To be good is to be in harmony with one's self," he replied, touching the thin stem of his glass with his pale, fine-pointed fingers. "Discord is to be forced to be in harmony with others. One's own life--that is the important thing. As for the lives of one's neighbours, if one wishes to be a prig or a Puritan, one can flaunt one's moral views about them, but they are not one's concern. Besides, individualism has really the higher aim. Modern morality consists in accepting the standard of one's age. I consider that for any man of culture to accept the standard of his age is a form of the grossest immorality." "But, surely, if one lives merely for one's self, Harry, one pays a terrible price for doing so?" suggested the painter. "Yes, we are overcharged for everything nowadays. I should fancy that the real tragedy of the poor is that they can afford nothing but self-denial. Beautiful sins, like beautiful things, are the privilege of the rich." "One has to pay in other ways but money." "What sort of ways, Basil?" "Oh! I should fancy in remorse, in suffering, in ... well, in the consciousness of degradation." Lord Henry shrugged his shoulders. "My dear fellow, mediaeval art is charming, but mediaeval emotions are out of date. One can use them in fiction, of course. But then the only things that one can use in fiction are the things that one has ceased to use in fact. Believe me, no civilized man ever regrets a pleasure, and no uncivilized man ever knows what a pleasure is." "I know what pleasure is," cried Dorian Gray. "It is to adore some one." "That is certainly better than being adored," he answered, toying with some fruits. "Being adored is a nuisance. Women treat us just as humanity treats its gods. They worship us, and are always bothering us to do something for them." "I should have said that whatever they ask for they had first given to us," murmured the lad gravely. "They create love in our natures. They have a right to demand it back." "That is quite true, Dorian," cried Hallward. "Nothing is ever quite true," said Lord Henry. "This is," interrupted Dorian. "You must admit, Harry, that women give to men the very gold of their lives." "Possibly," he sighed, "but they invariably want it back in such very small change. That is the worry. Women, as some witty Frenchman once put it, inspire us with the desire to do masterpieces and always prevent us from carrying them out." "Harry, you are dreadful! I don't know why I like you so much." "You will always like me, Dorian," he replied. "Will you have some coffee, you fellows? Waiter, bring coffee, and _fine-champagne_, and some cigarettes. No, don't mind the cigarettes--I have some. Basil, I can't allow you to smoke cigars. You must have a cigarette. A cigarette is the perfect type of a perfect pleasure. It is exquisite, and it leaves one unsatisfied. What more can one want? Yes, Dorian, you will always be fond of me. I represent to you all the sins you have never had the courage to commit." "What nonsense you talk, Harry!" cried the lad, taking a light from a fire-breathing silver dragon that the waiter had placed on the table. "Let us go down to the theatre. When Sibyl comes on the stage you will have a new ideal of life. She will represent something to you that you have never known." "I have known everything," said Lord Henry, with a tired look in his eyes, "but I am always ready for a new emotion. I am afraid, however, that, for me at any rate, there is no such thing. Still, your wonderful girl may thrill me. I love acting. It is so much more real than life. Let us go. Dorian, you will come with me. I am so sorry, Basil, but there is only room for two in the brougham. You must follow us in a hansom." They got up and put on their coats, sipping their coffee standing. The painter was silent and preoccupied. There was a gloom over him. He could not bear this marriage, and yet it seemed to him to be better than many other things that might have happened. After a few minutes, they all passed downstairs. He drove off by himself, as had been arranged, and watched the flashing lights of the little brougham in front of him. A strange sense of loss came over him. He felt that Dorian Gray would never again be to him all that he had been in the past. Life had come between them.... His eyes darkened, and the crowded flaring streets became blurred to his eyes. When the cab drew up at the theatre, it seemed to him that he had grown years older. CHAPTER 7 For some reason or other, the house was crowded that night, and the fat Jew manager who met them at the door was beaming from ear to ear with an oily tremulous smile. He escorted them to their box with a sort of pompous humility, waving his fat jewelled hands and talking at the top of his voice. Dorian Gray loathed him more than ever. He felt as if he had come to look for Miranda and had been met by Caliban. Lord Henry, upon the other hand, rather liked him. At least he declared he did, and insisted on shaking him by the hand and assuring him that he was proud to meet a man who had discovered a real genius and gone bankrupt over a poet. Hallward amused himself with watching the faces in the pit. The heat was terribly oppressive, and the huge sunlight flamed like a monstrous dahlia with petals of yellow fire. The youths in the gallery had taken off their coats and waistcoats and hung them over the side. They talked to each other across the theatre and shared their oranges with the tawdry girls who sat beside them. Some women were laughing in the pit. Their voices were horribly shrill and discordant. The sound of the popping of corks came from the bar. "What a place to find one's divinity in!" said Lord Henry. "Yes!" answered Dorian Gray. "It was here I found her, and she is divine beyond all living things. When she acts, you will forget everything. These common rough people, with their coarse faces and brutal gestures, become quite different when she is on the stage. They sit silently and watch her. They weep and laugh as she wills them to do. She makes them as responsive as a violin. She spiritualizes them, and one feels that they are of the same flesh and blood as one's self." "The same flesh and blood as one's self! Oh, I hope not!" exclaimed Lord Henry, who was scanning the occupants of the gallery through his opera-glass. "Don't pay any attention to him, Dorian," said the painter. "I understand what you mean, and I believe in this girl. Any one you love must be marvellous, and any girl who has the effect you describe must be fine and noble. To spiritualize one's age--that is something worth doing. If this girl can give a soul to those who have lived without one, if she can create the sense of beauty in people whose lives have been sordid and ugly, if she can strip them of their selfishness and lend them tears for sorrows that are not their own, she is worthy of all your adoration, worthy of the adoration of the world. This marriage is quite right. I did not think so at first, but I admit it now. The gods made Sibyl Vane for you. Without her you would have been incomplete." "Thanks, Basil," answered Dorian Gray, pressing his hand. "I knew that you would understand me. Harry is so cynical, he terrifies me. But here is the orchestra. It is quite dreadful, but it only lasts for about five minutes. Then the curtain rises, and you will see the girl to whom I am going to give all my life, to whom I have given everything that is good in me." A quarter of an hour afterwards, amidst an extraordinary turmoil of applause, Sibyl Vane stepped on to the stage. Yes, she was certainly lovely to look at--one of the loveliest creatures, Lord Henry thought, that he had ever seen. There was something of the fawn in her shy grace and startled eyes. A faint blush, like the shadow of a rose in a mirror of silver, came to her cheeks as she glanced at the crowded enthusiastic house. She stepped back a few paces and her lips seemed to tremble. Basil Hallward leaped to his feet and began to applaud. Motionless, and as one in a dream, sat Dorian Gray, gazing at her. Lord Henry peered through his glasses, murmuring, "Charming! charming!" The scene was the hall of Capulet's house, and Romeo in his pilgrim's dress had entered with Mercutio and his other friends. The band, such as it was, struck up a few bars of music, and the dance began. Through the crowd of ungainly, shabbily dressed actors, Sibyl Vane moved like a creature from a finer world. Her body swayed, while she danced, as a plant sways in the water. The curves of her throat were the curves of a white lily. Her hands seemed to be made of cool ivory. Yet she was curiously listless. She showed no sign of joy when her eyes rested on Romeo. The few words she had to speak-- Good pilgrim, you do wrong your hand too much, Which mannerly devotion shows in this; For saints have hands that pilgrims' hands do touch, And palm to palm is holy palmers' kiss-- with the brief dialogue that follows, were spoken in a thoroughly artificial manner. The voice was exquisite, but from the point of view of tone it was absolutely false. It was wrong in colour. It took away all the life from the verse. It made the passion unreal. Dorian Gray grew pale as he watched her. He was puzzled and anxious. Neither of his friends dared to say anything to him. She seemed to them to be absolutely incompetent. They were horribly disappointed. Yet they felt that the true test of any Juliet is the balcony scene of the second act. They waited for that. If she failed there, there was nothing in her. She looked charming as she came out in the moonlight. That could not be denied. But the staginess of her acting was unbearable, and grew worse as she went on. Her gestures became absurdly artificial. She overemphasized everything that she had to say. The beautiful passage-- Thou knowest the mask of night is on my face, Else would a maiden blush bepaint my cheek For that which thou hast heard me speak to-night-- was declaimed with the painful precision of a schoolgirl who has been taught to recite by some second-rate professor of elocution. When she leaned over the balcony and came to those wonderful lines-- Although I joy in thee, I have no joy of this contract to-night: It is too rash, too unadvised, too sudden; Too like the lightning, which doth cease to be Ere one can say, "It lightens." Sweet, good-night! This bud of love by summer's ripening breath May prove a beauteous flower when next we meet-- she spoke the words as though they conveyed no meaning to her. It was not nervousness. Indeed, so far from being nervous, she was absolutely self-contained. It was simply bad art. She was a complete failure. Even the common uneducated audience of the pit and gallery lost their interest in the play. They got restless, and began to talk loudly and to whistle. The Jew manager, who was standing at the back of the dress-circle, stamped and swore with rage. The only person unmoved was the girl herself. When the second act was over, there came a storm of hisses, and Lord Henry got up from his chair and put on his coat. "She is quite beautiful, Dorian," he said, "but she can't act. Let us go." "I am going to see the play through," answered the lad, in a hard bitter voice. "I am awfully sorry that I have made you waste an evening, Harry. I apologize to you both." "My dear Dorian, I should think Miss Vane was ill," interrupted Hallward. "We will come some other night." "I wish she were ill," he rejoined. "But she seems to me to be simply callous and cold. She has entirely altered. Last night she was a great artist. This evening she is merely a commonplace mediocre actress." "Don't talk like that about any one you love, Dorian. Love is a more wonderful thing than art." "They are both simply forms of imitation," remarked Lord Henry. "But do let us go. Dorian, you must not stay here any longer. It is not good for one's morals to see bad acting. Besides, I don't suppose you will want your wife to act, so what does it matter if she plays Juliet like a wooden doll? She is very lovely, and if she knows as little about life as she does about acting, she will be a delightful experience. There are only two kinds of people who are really fascinating--people who know absolutely everything, and people who know absolutely nothing. Good heavens, my dear boy, don't look so tragic! The secret of remaining young is never to have an emotion that is unbecoming. Come to the club with Basil and myself. We will smoke cigarettes and drink to the beauty of Sibyl Vane. She is beautiful. What more can you want?" "Go away, Harry," cried the lad. "I want to be alone. Basil, you must go. Ah! can't you see that my heart is breaking?" The hot tears came to his eyes. His lips trembled, and rushing to the back of the box, he leaned up against the wall, hiding his face in his hands. "Let us go, Basil," said Lord Henry with a strange tenderness in his voice, and the two young men passed out together. A few moments afterwards the footlights flared up and the curtain rose on the third act. Dorian Gray went back to his seat. He looked pale, and proud, and indifferent. The play dragged on, and seemed interminable. Half of the audience went out, tramping in heavy boots and laughing. The whole thing was a _fiasco_. The last act was played to almost empty benches. The curtain went down on a titter and some groans. As soon as it was over, Dorian Gray rushed behind the scenes into the greenroom. The girl was standing there alone, with a look of triumph on her face. Her eyes were lit with an exquisite fire. There was a radiance about her. Her parted lips were smiling over some secret of their own. When he entered, she looked at him, and an expression of infinite joy came over her. "How badly I acted to-night, Dorian!" she cried. "Horribly!" he answered, gazing at her in amazement. "Horribly! It was dreadful. Are you ill? You have no idea what it was. You have no idea what I suffered." The girl smiled. "Dorian," she answered, lingering over his name with long-drawn music in her voice, as though it were sweeter than honey to the red petals of her mouth. "Dorian, you should have understood. But you understand now, don't you?" "Understand what?" he asked, angrily. "Why I was so bad to-night. Why I shall always be bad. Why I shall never act well again." He shrugged his shoulders. "You are ill, I suppose. When you are ill you shouldn't act. You make yourself ridiculous. My friends were bored. I was bored." She seemed not to listen to him. She was transfigured with joy. An ecstasy of happiness dominated her. "Dorian, Dorian," she cried, "before I knew you, acting was the one reality of my life. It was only in the theatre that I lived. I thought that it was all true. I was Rosalind one night and Portia the other. The joy of Beatrice was my joy, and the sorrows of Cordelia were mine also. I believed in everything. The common people who acted with me seemed to me to be godlike. The painted scenes were my world. I knew nothing but shadows, and I thought them real. You came--oh, my beautiful love!--and you freed my soul from prison. You taught me what reality really is. To-night, for the first time in my life, I saw through the hollowness, the sham, the silliness of the empty pageant in which I had always played. To-night, for the first time, I became conscious that the Romeo was hideous, and old, and painted, that the moonlight in the orchard was false, that the scenery was vulgar, and that the words I had to speak were unreal, were not my words, were not what I wanted to say. You had brought me something higher, something of which all art is but a reflection. You had made me understand what love really is. My love! My love! Prince Charming! Prince of life! I have grown sick of shadows. You are more to me than all art can ever be. What have I to do with the puppets of a play? When I came on to-night, I could not understand how it was that everything had gone from me. I thought that I was going to be wonderful. I found that I could do nothing. Suddenly it dawned on my soul what it all meant. The knowledge was exquisite to me. I heard them hissing, and I smiled. What could they know of love such as ours? Take me away, Dorian--take me away with you, where we can be quite alone. I hate the stage. I might mimic a passion that I do not feel, but I cannot mimic one that burns me like fire. Oh, Dorian, Dorian, you understand now what it signifies? Even if I could do it, it would be profanation for me to play at being in love. You have made me see that." He flung himself down on the sofa and turned away his face. "You have killed my love," he muttered. She looked at him in wonder and laughed. He made no answer. She came across to him, and with her little fingers stroked his hair. She knelt down and pressed his hands to her lips. He drew them away, and a shudder ran through him. Then he leaped up and went to the door. "Yes," he cried, "you have killed my love. You used to stir my imagination. Now you don't even stir my curiosity. You simply produce no effect. I loved you because you were marvellous, because you had genius and intellect, because you realized the dreams of great poets and gave shape and substance to the shadows of art. You have thrown it all away. You are shallow and stupid. My God! how mad I was to love you! What a fool I have been! You are nothing to me now. I will never see you again. I will never think of you. I will never mention your name. You don't know what you were to me, once. Why, once ... Oh, I can't bear to think of it! I wish I had never laid eyes upon you! You have spoiled the romance of my life. How little you can know of love, if you say it mars your art! Without your art, you are nothing. I would have made you famous, splendid, magnificent. The world would have worshipped you, and you would have borne my name. What are you now? A third-rate actress with a pretty face." The girl grew white, and trembled. She clenched her hands together, and her voice seemed to catch in her throat. "You are not serious, Dorian?" she murmured. "You are acting." "Acting! I leave that to you. You do it so well," he answered bitterly. She rose from her knees and, with a piteous expression of pain in her face, came across the room to him. She put her hand upon his arm and looked into his eyes. He thrust her back. "Don't touch me!" he cried. A low moan broke from her, and she flung herself at his feet and lay there like a trampled flower. "Dorian, Dorian, don't leave me!" she whispered. "I am so sorry I didn't act well. I was thinking of you all the time. But I will try--indeed, I will try. It came so suddenly across me, my love for you. I think I should never have known it if you had not kissed me--if we had not kissed each other. Kiss me again, my love. Don't go away from me. I couldn't bear it. Oh! don't go away from me. My brother ... No; never mind. He didn't mean it. He was in jest.... But you, oh! can't you forgive me for to-night? I will work so hard and try to improve. Don't be cruel to me, because I love you better than anything in the world. After all, it is only once that I have not pleased you. But you are quite right, Dorian. I should have shown myself more of an artist. It was foolish of me, and yet I couldn't help it. Oh, don't leave me, don't leave me." A fit of passionate sobbing choked her. She crouched on the floor like a wounded thing, and Dorian Gray, with his beautiful eyes, looked down at her, and his chiselled lips curled in exquisite disdain. There is always something ridiculous about the emotions of people whom one has ceased to love. Sibyl Vane seemed to him to be absurdly melodramatic. Her tears and sobs annoyed him. "I am going," he said at last in his calm clear voice. "I don't wish to be unkind, but I can't see you again. You have disappointed me." She wept silently, and made no answer, but crept nearer. Her little hands stretched blindly out, and appeared to be seeking for him. He turned on his heel and left the room. In a few moments he was out of the theatre. Where he went to he hardly knew. He remembered wandering through dimly lit streets, past gaunt, black-shadowed archways and evil-looking houses. Women with hoarse voices and harsh laughter had called after him. Drunkards had reeled by, cursing and chattering to themselves like monstrous apes. He had seen grotesque children huddled upon door-steps, and heard shrieks and oaths from gloomy courts. As the dawn was just breaking, he found himself close to Covent Garden. The darkness lifted, and, flushed with faint fires, the sky hollowed itself into a perfect pearl. Huge carts filled with nodding lilies rumbled slowly down the polished empty street. The air was heavy with the perfume of the flowers, and their beauty seemed to bring him an anodyne for his pain. He followed into the market and watched the men unloading their waggons. A white-smocked carter offered him some cherries. He thanked him, wondered why he refused to accept any money for them, and began to eat them listlessly. They had been plucked at midnight, and the coldness of the moon had entered into them. A long line of boys carrying crates of striped tulips, and of yellow and red roses, defiled in front of him, threading their way through the huge, jade-green piles of vegetables. Under the portico, with its grey, sun-bleached pillars, loitered a troop of draggled bareheaded girls, waiting for the auction to be over. Others crowded round the swinging doors of the coffee-house in the piazza. The heavy cart-horses slipped and stamped upon the rough stones, shaking their bells and trappings. Some of the drivers were lying asleep on a pile of sacks. Iris-necked and pink-footed, the pigeons ran about picking up seeds. After a little while, he hailed a hansom and drove home. For a few moments he loitered upon the doorstep, looking round at the silent square, with its blank, close-shuttered windows and its staring blinds. The sky was pure opal now, and the roofs of the houses glistened like silver against it. From some chimney opposite a thin wreath of smoke was rising. It curled, a violet riband, through the nacre-coloured air. In the huge gilt Venetian lantern, spoil of some Doge's barge, that hung from the ceiling of the great, oak-panelled hall of entrance, lights were still burning from three flickering jets: thin blue petals of flame they seemed, rimmed with white fire. He turned them out and, having thrown his hat and cape on the table, passed through the library towards the door of his bedroom, a large octagonal chamber on the ground floor that, in his new-born feeling for luxury, he had just had decorated for himself and hung with some curious Renaissance tapestries that had been discovered stored in a disused attic at Selby Royal. As he was turning the handle of the door, his eye fell upon the portrait Basil Hallward had painted of him. He started back as if in surprise. Then he went on into his own room, looking somewhat puzzled. After he had taken the button-hole out of his coat, he seemed to hesitate. Finally, he came back, went over to the picture, and examined it. In the dim arrested light that struggled through the cream-coloured silk blinds, the face appeared to him to be a little changed. The expression looked different. One would have said that there was a touch of cruelty in the mouth. It was certainly strange. He turned round and, walking to the window, drew up the blind. The bright dawn flooded the room and swept the fantastic shadows into dusky corners, where they lay shuddering. But the strange expression that he had noticed in the face of the portrait seemed to linger there, to be more intensified even. The quivering ardent sunlight showed him the lines of cruelty round the mouth as clearly as if he had been looking into a mirror after he had done some dreadful thing. He winced and, taking up from the table an oval glass framed in ivory Cupids, one of Lord Henry's many presents to him, glanced hurriedly into its polished depths. No line like that warped his red lips. What did it mean? He rubbed his eyes, and came close to the picture, and examined it again. There were no signs of any change when he looked into the actual painting, and yet there was no doubt that the whole expression had altered. It was not a mere fancy of his own. The thing was horribly apparent. He threw himself into a chair and began to think. Suddenly there flashed across his mind what he had said in Basil Hallward's studio the day the picture had been finished. Yes, he remembered it perfectly. He had uttered a mad wish that he himself might remain young, and the portrait grow old; that his own beauty might be untarnished, and the face on the canvas bear the burden of his passions and his sins; that the painted image might be seared with the lines of suffering and thought, and that he might keep all the delicate bloom and loveliness of his then just conscious boyhood. Surely his wish had not been fulfilled? Such things were impossible. It seemed monstrous even to think of them. And, yet, there was the picture before him, with the touch of cruelty in the mouth. Cruelty! Had he been cruel? It was the girl's fault, not his. He had dreamed of her as a great artist, had given his love to her because he had thought her great. Then she had disappointed him. She had been shallow and unworthy. And, yet, a feeling of infinite regret came over him, as he thought of her lying at his feet sobbing like a little child. He remembered with what callousness he had watched her. Why had he been made like that? Why had such a soul been given to him? But he had suffered also. During the three terrible hours that the play had lasted, he had lived centuries of pain, aeon upon aeon of torture. His life was well worth hers. She had marred him for a moment, if he had wounded her for an age. Besides, women were better suited to bear sorrow than men. They lived on their emotions. They only thought of their emotions. When they took lovers, it was merely to have some one with whom they could have scenes. Lord Henry had told him that, and Lord Henry knew what women were. Why should he trouble about Sibyl Vane? She was nothing to him now. But the picture? What was he to say of that? It held the secret of his life, and told his story. It had taught him to love his own beauty. Would it teach him to loathe his own soul? Would he ever look at it again? No; it was merely an illusion wrought on the troubled senses. The horrible night that he had passed had left phantoms behind it. Suddenly there had fallen upon his brain that tiny scarlet speck that makes men mad. The picture had not changed. It was folly to think so. Yet it was watching him, with its beautiful marred face and its cruel smile. Its bright hair gleamed in the early sunlight. Its blue eyes met his own. A sense of infinite pity, not for himself, but for the painted image of himself, came over him. It had altered already, and would alter more. Its gold would wither into grey. Its red and white roses would die. For every sin that he committed, a stain would fleck and wreck its fairness. But he would not sin. The picture, changed or unchanged, would be to him the visible emblem of conscience. He would resist temptation. He would not see Lord Henry any more--would not, at any rate, listen to those subtle poisonous theories that in Basil Hallward's garden had first stirred within him the passion for impossible things. He would go back to Sibyl Vane, make her amends, marry her, try to love her again. Yes, it was his duty to do so. She must have suffered more than he had. Poor child! He had been selfish and cruel to her. The fascination that she had exercised over him would return. They would be happy together. His life with her would be beautiful and pure. He got up from his chair and drew a large screen right in front of the portrait, shuddering as he glanced at it. "How horrible!" he murmured to himself, and he walked across to the window and opened it. When he stepped out on to the grass, he drew a deep breath. The fresh morning air seemed to drive away all his sombre passions. He thought only of Sibyl. A faint echo of his love came back to him. He repeated her name over and over again. The birds that were singing in the dew-drenched garden seemed to be telling the flowers about her. CHAPTER 8 It was long past noon when he awoke. His valet had crept several times on tiptoe into the room to see if he was stirring, and had wondered what made his young master sleep so late. Finally his bell sounded, and Victor came in softly with a cup of tea, and a pile of letters, on a small tray of old Sevres china, and drew back the olive-satin curtains, with their shimmering blue lining, that hung in front of the three tall windows. "Monsieur has well slept this morning," he said, smiling. "What o'clock is it, Victor?" asked Dorian Gray drowsily. "One hour and a quarter, Monsieur." How late it was! He sat up, and having sipped some tea, turned over his letters. One of them was from Lord Henry, and had been brought by hand that morning. He hesitated for a moment, and then put it aside. The others he opened listlessly. They contained the usual collection of cards, invitations to dinner, tickets for private views, programmes of charity concerts, and the like that are showered on fashionable young men every morning during the season. There was a rather heavy bill for a chased silver Louis-Quinze toilet-set that he had not yet had the courage to send on to his guardians, who were extremely old-fashioned people and did not realize that we live in an age when unnecessary things are our only necessities; and there were several very courteously worded communications from Jermyn Street money-lenders offering to advance any sum of money at a moment's notice and at the most reasonable rates of interest. After about ten minutes he got up, and throwing on an elaborate dressing-gown of silk-embroidered cashmere wool, passed into the onyx-paved bathroom. The cool water refreshed him after his long sleep. He seemed to have forgotten all that he had gone through. A dim sense of having taken part in some strange tragedy came to him once or twice, but there was the unreality of a dream about it. As soon as he was dressed, he went into the library and sat down to a light French breakfast that had been laid out for him on a small round table close to the open window. It was an exquisite day. The warm air seemed laden with spices. A bee flew in and buzzed round the blue-dragon bowl that, filled with sulphur-yellow roses, stood before him. He felt perfectly happy. Suddenly his eye fell on the screen that he had placed in front of the portrait, and he started. "Too cold for Monsieur?" asked his valet, putting an omelette on the table. "I shut the window?" Dorian shook his head. "I am not cold," he murmured. Was it all true? Had the portrait really changed? Or had it been simply his own imagination that had made him see a look of evil where there had been a look of joy? Surely a painted canvas could not alter? The thing was absurd. It would serve as a tale to tell Basil some day. It would make him smile. And, yet, how vivid was his recollection of the whole thing! First in the dim twilight, and then in the bright dawn, he had seen the touch of cruelty round the warped lips. He almost dreaded his valet leaving the room. He knew that when he was alone he would have to examine the portrait. He was afraid of certainty. When the coffee and cigarettes had been brought and the man turned to go, he felt a wild desire to tell him to remain. As the door was closing behind him, he called him back. The man stood waiting for his orders. Dorian looked at him for a moment. "I am not at home to any one, Victor," he said with a sigh. The man bowed and retired. Then he rose from the table, lit a cigarette, and flung himself down on a luxuriously cushioned couch that stood facing the screen. The screen was an old one, of gilt Spanish leather, stamped and wrought with a rather florid Louis-Quatorze pattern. He scanned it curiously, wondering if ever before it had concealed the secret of a man's life. Should he move it aside, after all? Why not let it stay there? What was the use of knowing? If the thing was true, it was terrible. If it was not true, why trouble about it? But what if, by some fate or deadlier chance, eyes other than his spied behind and saw the horrible change? What should he do if Basil Hallward came and asked to look at his own picture? Basil would be sure to do that. No; the thing had to be examined, and at once. Anything would be better than this dreadful state of doubt. He got up and locked both doors. At least he would be alone when he looked upon the mask of his shame. Then he drew the screen aside and saw himself face to face. It was perfectly true. The portrait had altered. As he often remembered afterwards, and always with no small wonder, he found himself at first gazing at the portrait with a feeling of almost scientific interest. That such a change should have taken place was incredible to him. And yet it was a fact. Was there some subtle affinity between the chemical atoms that shaped themselves into form and colour on the canvas and the soul that was within him? Could it be that what that soul thought, they realized?--that what it dreamed, they made true? Or was there some other, more terrible reason? He shuddered, and felt afraid, and, going back to the couch, lay there, gazing at the picture in sickened horror. One thing, however, he felt that it had done for him. It had made him conscious how unjust, how cruel, he had been to Sibyl Vane. It was not too late to make reparation for that. She could still be his wife. His unreal and selfish love would yield to some higher influence, would be transformed into some nobler passion, and the portrait that Basil Hallward had painted of him would be a guide to him through life, would be to him what holiness is to some, and conscience to others, and the fear of God to us all. There were opiates for remorse, drugs that could lull the moral sense to sleep. But here was a visible symbol of the degradation of sin. Here was an ever-present sign of the ruin men brought upon their souls. Three o'clock struck, and four, and the half-hour rang its double chime, but Dorian Gray did not stir. He was trying to gather up the scarlet threads of life and to weave them into a pattern; to find his way through the sanguine labyrinth of passion through which he was wandering. He did not know what to do, or what to think. Finally, he went over to the table and wrote a passionate letter to the girl he had loved, imploring her forgiveness and accusing himself of madness. He covered page after page with wild words of sorrow and wilder words of pain. There is a luxury in self-reproach. When we blame ourselves, we feel that no one else has a right to blame us. It is the confession, not the priest, that gives us absolution. When Dorian had finished the letter, he felt that he had been forgiven. Suddenly there came a knock to the door, and he heard Lord Henry's voice outside. "My dear boy, I must see you. Let me in at once. I can't bear your shutting yourself up like this." He made no answer at first, but remained quite still. The knocking still continued and grew louder. Yes, it was better to let Lord Henry in, and to explain to him the new life he was going to lead, to quarrel with him if it became necessary to quarrel, to part if parting was inevitable. He jumped up, drew the screen hastily across the picture, and unlocked the door. "I am so sorry for it all, Dorian," said Lord Henry as he entered. "But you must not think too much about it." "Do you mean about Sibyl Vane?" asked the lad. "Yes, of course," answered Lord Henry, sinking into a chair and slowly pulling off his yellow gloves. "It is dreadful, from one point of view, but it was not your fault. Tell me, did you go behind and see her, after the play was over?" "Yes." "I felt sure you had. Did you make a scene with her?" "I was brutal, Harry--perfectly brutal. But it is all right now. I am not sorry for anything that has happened. It has taught me to know myself better." "Ah, Dorian, I am so glad you take it in that way! I was afraid I would find you plunged in remorse and tearing that nice curly hair of yours." "I have got through all that," said Dorian, shaking his head and smiling. "I am perfectly happy now. I know what conscience is, to begin with. It is not what you told me it was. It is the divinest thing in us. Don't sneer at it, Harry, any more--at least not before me. I want to be good. I can't bear the idea of my soul being hideous." "A very charming artistic basis for ethics, Dorian! I congratulate you on it. But how are you going to begin?" "By marrying Sibyl Vane." "Marrying Sibyl Vane!" cried Lord Henry, standing up and looking at him in perplexed amazement. "But, my dear Dorian--" "Yes, Harry, I know what you are going to say. Something dreadful about marriage. Don't say it. Don't ever say things of that kind to me again. Two days ago I asked Sibyl to marry me. I am not going to break my word to her. She is to be my wife." "Your wife! Dorian! ... Didn't you get my letter? I wrote to you this morning, and sent the note down by my own man." "Your letter? Oh, yes, I remember. I have not read it yet, Harry. I was afraid there might be something in it that I wouldn't like. You cut life to pieces with your epigrams." "You know nothing then?" "What do you mean?" Lord Henry walked across the room, and sitting down by Dorian Gray, took both his hands in his own and held them tightly. "Dorian," he said, "my letter--don't be frightened--was to tell you that Sibyl Vane is dead." A cry of pain broke from the lad's lips, and he leaped to his feet, tearing his hands away from Lord Henry's grasp. "Dead! Sibyl dead! It is not true! It is a horrible lie! How dare you say it?" "It is quite true, Dorian," said Lord Henry, gravely. "It is in all the morning papers. I wrote down to you to ask you not to see any one till I came. There will have to be an inquest, of course, and you must not be mixed up in it. Things like that make a man fashionable in Paris. But in London people are so prejudiced. Here, one should never make one's _debut_ with a scandal. One should reserve that to give an interest to one's old age. I suppose they don't know your name at the theatre? If they don't, it is all right. Did any one see you going round to her room? That is an important point." Dorian did not answer for a few moments. He was dazed with horror. Finally he stammered, in a stifled voice, "Harry, did you say an inquest? What did you mean by that? Did Sibyl--? Oh, Harry, I can't bear it! But be quick. Tell me everything at once." "I have no doubt it was not an accident, Dorian, though it must be put in that way to the public. It seems that as she was leaving the theatre with her mother, about half-past twelve or so, she said she had forgotten something upstairs. They waited some time for her, but she did not come down again. They ultimately found her lying dead on the floor of her dressing-room. She had swallowed something by mistake, some dreadful thing they use at theatres. I don't know what it was, but it had either prussic acid or white lead in it. I should fancy it was prussic acid, as she seems to have died instantaneously." "Harry, Harry, it is terrible!" cried the lad. "Yes; it is very tragic, of course, but you must not get yourself mixed up in it. I see by _The Standard_ that she was seventeen. I should have thought she was almost younger than that. She looked such a child, and seemed to know so little about acting. Dorian, you mustn't let this thing get on your nerves. You must come and dine with me, and afterwards we will look in at the opera. It is a Patti night, and everybody will be there. You can come to my sister's box. She has got some smart women with her." "So I have murdered Sibyl Vane," said Dorian Gray, half to himself, "murdered her as surely as if I had cut her little throat with a knife. Yet the roses are not less lovely for all that. The birds sing just as happily in my garden. And to-night I am to dine with you, and then go on to the opera, and sup somewhere, I suppose, afterwards. How extraordinarily dramatic life is! If I had read all this in a book, Harry, I think I would have wept over it. Somehow, now that it has happened actually, and to me, it seems far too wonderful for tears. Here is the first passionate love-letter I have ever written in my life. Strange, that my first passionate love-letter should have been addressed to a dead girl. Can they feel, I wonder, those white silent people we call the dead? Sibyl! Can she feel, or know, or listen? Oh, Harry, how I loved her once! It seems years ago to me now. She was everything to me. Then came that dreadful night--was it really only last night?--when she played so badly, and my heart almost broke. She explained it all to me. It was terribly pathetic. But I was not moved a bit. I thought her shallow. Suddenly something happened that made me afraid. I can't tell you what it was, but it was terrible. I said I would go back to her. I felt I had done wrong. And now she is dead. My God! My God! Harry, what shall I do? You don't know the danger I am in, and there is nothing to keep me straight. She would have done that for me. She had no right to kill herself. It was selfish of her." "My dear Dorian," answered Lord Henry, taking a cigarette from his case and producing a gold-latten matchbox, "the only way a woman can ever reform a man is by boring him so completely that he loses all possible interest in life. If you had married this girl, you would have been wretched. Of course, you would have treated her kindly. One can always be kind to people about whom one cares nothing. But she would have soon found out that you were absolutely indifferent to her. And when a woman finds that out about her husband, she either becomes dreadfully dowdy, or wears very smart bonnets that some other woman's husband has to pay for. I say nothing about the social mistake, which would have been abject--which, of course, I would not have allowed--but I assure you that in any case the whole thing would have been an absolute failure." "I suppose it would," muttered the lad, walking up and down the room and looking horribly pale. "But I thought it was my duty. It is not my fault that this terrible tragedy has prevented my doing what was right. I remember your saying once that there is a fatality about good resolutions--that they are always made too late. Mine certainly were." "Good resolutions are useless attempts to interfere with scientific laws. Their origin is pure vanity. Their result is absolutely _nil_. They give us, now and then, some of those luxurious sterile emotions that have a certain charm for the weak. That is all that can be said for them. They are simply cheques that men draw on a bank where they have no account." "Harry," cried Dorian Gray, coming over and sitting down beside him, "why is it that I cannot feel this tragedy as much as I want to? I don't think I am heartless. Do you?" "You have done too many foolish things during the last fortnight to be entitled to give yourself that name, Dorian," answered Lord Henry with his sweet melancholy smile. The lad frowned. "I don't like that explanation, Harry," he rejoined, "but I am glad you don't think I am heartless. I am nothing of the kind. I know I am not. And yet I must admit that this thing that has happened does not affect me as it should. It seems to me to be simply like a wonderful ending to a wonderful play. It has all the terrible beauty of a Greek tragedy, a tragedy in which I took a great part, but by which I have not been wounded." "It is an interesting question," said Lord Henry, who found an exquisite pleasure in playing on the lad's unconscious egotism, "an extremely interesting question. I fancy that the true explanation is this: It often happens that the real tragedies of life occur in such an inartistic manner that they hurt us by their crude violence, their absolute incoherence, their absurd want of meaning, their entire lack of style. They affect us just as vulgarity affects us. They give us an impression of sheer brute force, and we revolt against that. Sometimes, however, a tragedy that possesses artistic elements of beauty crosses our lives. If these elements of beauty are real, the whole thing simply appeals to our sense of dramatic effect. Suddenly we find that we are no longer the actors, but the spectators of the play. Or rather we are both. We watch ourselves, and the mere wonder of the spectacle enthralls us. In the present case, what is it that has really happened? Some one has killed herself for love of you. I wish that I had ever had such an experience. It would have made me in love with love for the rest of my life. The people who have adored me--there have not been very many, but there have been some--have always insisted on living on, long after I had ceased to care for them, or they to care for me. They have become stout and tedious, and when I meet them, they go in at once for reminiscences. That awful memory of woman! What a fearful thing it is! And what an utter intellectual stagnation it reveals! One should absorb the colour of life, but one should never remember its details. Details are always vulgar." "I must sow poppies in my garden," sighed Dorian. "There is no necessity," rejoined his companion. "Life has always poppies in her hands. Of course, now and then things linger. I once wore nothing but violets all through one season, as a form of artistic mourning for a romance that would not die. Ultimately, however, it did die. I forget what killed it. I think it was her proposing to sacrifice the whole world for me. That is always a dreadful moment. It fills one with the terror of eternity. Well--would you believe it?--a week ago, at Lady Hampshire's, I found myself seated at dinner next the lady in question, and she insisted on going over the whole thing again, and digging up the past, and raking up the future. I had buried my romance in a bed of asphodel. She dragged it out again and assured me that I had spoiled her life. I am bound to state that she ate an enormous dinner, so I did not feel any anxiety. But what a lack of taste she showed! The one charm of the past is that it is the past. But women never know when the curtain has fallen. They always want a sixth act, and as soon as the interest of the play is entirely over, they propose to continue it. If they were allowed their own way, every comedy would have a tragic ending, and every tragedy would culminate in a farce. They are charmingly artificial, but they have no sense of art. You are more fortunate than I am. I assure you, Dorian, that not one of the women I have known would have done for me what Sibyl Vane did for you. Ordinary women always console themselves. Some of them do it by going in for sentimental colours. Never trust a woman who wears mauve, whatever her age may be, or a woman over thirty-five who is fond of pink ribbons. It always means that they have a history. Others find a great consolation in suddenly discovering the good qualities of their husbands. They flaunt their conjugal felicity in one's face, as if it were the most fascinating of sins. Religion consoles some. Its mysteries have all the charm of a flirtation, a woman once told me, and I can quite understand it. Besides, nothing makes one so vain as being told that one is a sinner. Conscience makes egotists of us all. Yes; there is really no end to the consolations that women find in modern life. Indeed, I have not mentioned the most important one." "What is that, Harry?" said the lad listlessly. "Oh, the obvious consolation. Taking some one else's admirer when one loses one's own. In good society that always whitewashes a woman. But really, Dorian, how different Sibyl Vane must have been from all the women one meets! There is something to me quite beautiful about her death. I am glad I am living in a century when such wonders happen. They make one believe in the reality of the things we all play with, such as romance, passion, and love." "I was terribly cruel to her. You forget that." "I am afraid that women appreciate cruelty, downright cruelty, more than anything else. They have wonderfully primitive instincts. We have emancipated them, but they remain slaves looking for their masters, all the same. They love being dominated. I am sure you were splendid. I have never seen you really and absolutely angry, but I can fancy how delightful you looked. And, after all, you said something to me the day before yesterday that seemed to me at the time to be merely fanciful, but that I see now was absolutely true, and it holds the key to everything." "What was that, Harry?" "You said to me that Sibyl Vane represented to you all the heroines of romance--that she was Desdemona one night, and Ophelia the other; that if she died as Juliet, she came to life as Imogen." "She will never come to life again now," muttered the lad, burying his face in his hands. "No, she will never come to life. She has played her last part. But you must think of that lonely death in the tawdry dressing-room simply as a strange lurid fragment from some Jacobean tragedy, as a wonderful scene from Webster, or Ford, or Cyril Tourneur. The girl never really lived, and so she has never really died. To you at least she was always a dream, a phantom that flitted through Shakespeare's plays and left them lovelier for its presence, a reed through which Shakespeare's music sounded richer and more full of joy. The moment she touched actual life, she marred it, and it marred her, and so she passed away. Mourn for Ophelia, if you like. Put ashes on your head because Cordelia was strangled. Cry out against Heaven because the daughter of Brabantio died. But don't waste your tears over Sibyl Vane. She was less real than they are." There was a silence. The evening darkened in the room. Noiselessly, and with silver feet, the shadows crept in from the garden. The colours faded wearily out of things. After some time Dorian Gray looked up. "You have explained me to myself, Harry," he murmured with something of a sigh of relief. "I felt all that you have said, but somehow I was afraid of it, and I could not express it to myself. How well you know me! But we will not talk again of what has happened. It has been a marvellous experience. That is all. I wonder if life has still in store for me anything as marvellous." "Life has everything in store for you, Dorian. There is nothing that you, with your extraordinary good looks, will not be able to do." "But suppose, Harry, I became haggard, and old, and wrinkled? What then?" "Ah, then," said Lord Henry, rising to go, "then, my dear Dorian, you would have to fight for your victories. As it is, they are brought to you. No, you must keep your good looks. We live in an age that reads too much to be wise, and that thinks too much to be beautiful. We cannot spare you. And now you had better dress and drive down to the club. We are rather late, as it is." "I think I shall join you at the opera, Harry. I feel too tired to eat anything. What is the number of your sister's box?" "Twenty-seven, I believe. It is on the grand tier. You will see her name on the door. But I am sorry you won't come and dine." "I don't feel up to it," said Dorian listlessly. "But I am awfully obliged to you for all that you have said to me. You are certainly my best friend. No one has ever understood me as you have." "We are only at the beginning of our friendship, Dorian," answered Lord Henry, shaking him by the hand. "Good-bye. I shall see you before nine-thirty, I hope. Remember, Patti is singing." As he closed the door behind him, Dorian Gray touched the bell, and in a few minutes Victor appeared with the lamps and drew the blinds down. He waited impatiently for him to go. The man seemed to take an interminable time over everything. As soon as he had left, he rushed to the screen and drew it back. No; there was no further change in the picture. It had received the news of Sibyl Vane's death before he had known of it himself. It was conscious of the events of life as they occurred. The vicious cruelty that marred the fine lines of the mouth had, no doubt, appeared at the very moment that the girl had drunk the poison, whatever it was. Or was it indifferent to results? Did it merely take cognizance of what passed within the soul? He wondered, and hoped that some day he would see the change taking place before his very eyes, shuddering as he hoped it. Poor Sibyl! What a romance it had all been! She had often mimicked death on the stage. Then Death himself had touched her and taken her with him. How had she played that dreadful last scene? Had she cursed him, as she died? No; she had died for love of him, and love would always be a sacrament to him now. She had atoned for everything by the sacrifice she had made of her life. He would not think any more of what she had made him go through, on that horrible night at the theatre. When he thought of her, it would be as a wonderful tragic figure sent on to the world's stage to show the supreme reality of love. A wonderful tragic figure? Tears came to his eyes as he remembered her childlike look, and winsome fanciful ways, and shy tremulous grace. He brushed them away hastily and looked again at the picture. He felt that the time had really come for making his choice. Or had his choice already been made? Yes, life had decided that for him--life, and his own infinite curiosity about life. Eternal youth, infinite passion, pleasures subtle and secret, wild joys and wilder sins--he was to have all these things. The portrait was to bear the burden of his shame: that was all. A feeling of pain crept over him as he thought of the desecration that was in store for the fair face on the canvas. Once, in boyish mockery of Narcissus, he had kissed, or feigned to kiss, those painted lips that now smiled so cruelly at him. Morning after morning he had sat before the portrait wondering at its beauty, almost enamoured of it, as it seemed to him at times. Was it to alter now with every mood to which he yielded? Was it to become a monstrous and loathsome thing, to be hidden away in a locked room, to be shut out from the sunlight that had so often touched to brighter gold the waving wonder of its hair? The pity of it! the pity of it! For a moment, he thought of praying that the horrible sympathy that existed between him and the picture might cease. It had changed in answer to a prayer; perhaps in answer to a prayer it might remain unchanged. And yet, who, that knew anything about life, would surrender the chance of remaining always young, however fantastic that chance might be, or with what fateful consequences it might be fraught? Besides, was it really under his control? Had it indeed been prayer that had produced the substitution? Might there not be some curious scientific reason for it all? If thought could exercise its influence upon a living organism, might not thought exercise an influence upon dead and inorganic things? Nay, without thought or conscious desire, might not things external to ourselves vibrate in unison with our moods and passions, atom calling to atom in secret love or strange affinity? But the reason was of no importance. He would never again tempt by a prayer any terrible power. If the picture was to alter, it was to alter. That was all. Why inquire too closely into it? For there would be a real pleasure in watching it. He would be able to follow his mind into its secret places. This portrait would be to him the most magical of mirrors. As it had revealed to him his own body, so it would reveal to him his own soul. And when winter came upon it, he would still be standing where spring trembles on the verge of summer. When the blood crept from its face, and left behind a pallid mask of chalk with leaden eyes, he would keep the glamour of boyhood. Not one blossom of his loveliness would ever fade. Not one pulse of his life would ever weaken. Like the gods of the Greeks, he would be strong, and fleet, and joyous. What did it matter what happened to the coloured image on the canvas? He would be safe. That was everything. He drew the screen back into its former place in front of the picture, smiling as he did so, and passed into his bedroom, where his valet was already waiting for him. An hour later he was at the opera, and Lord Henry was leaning over his chair. CHAPTER 9 As he was sitting at breakfast next morning, Basil Hallward was shown into the room. "I am so glad I have found you, Dorian," he said gravely. "I called last night, and they told me you were at the opera. Of course, I knew that was impossible. But I wish you had left word where you had really gone to. I passed a dreadful evening, half afraid that one tragedy might be followed by another. I think you might have telegraphed for me when you heard of it first. I read of it quite by chance in a late edition of _The Globe_ that I picked up at the club. I came here at once and was miserable at not finding you. I can't tell you how heart-broken I am about the whole thing. I know what you must suffer. But where were you? Did you go down and see the girl's mother? For a moment I thought of following you there. They gave the address in the paper. Somewhere in the Euston Road, isn't it? But I was afraid of intruding upon a sorrow that I could not lighten. Poor woman! What a state she must be in! And her only child, too! What did she say about it all?" "My dear Basil, how do I know?" murmured Dorian Gray, sipping some pale-yellow wine from a delicate, gold-beaded bubble of Venetian glass and looking dreadfully bored. "I was at the opera. You should have come on there. I met Lady Gwendolen, Harry's sister, for the first time. We were in her box. She is perfectly charming; and Patti sang divinely. Don't talk about horrid subjects. If one doesn't talk about a thing, it has never happened. It is simply expression, as Harry says, that gives reality to things. I may mention that she was not the woman's only child. There is a son, a charming fellow, I believe. But he is not on the stage. He is a sailor, or something. And now, tell me about yourself and what you are painting." "You went to the opera?" said Hallward, speaking very slowly and with a strained touch of pain in his voice. "You went to the opera while Sibyl Vane was lying dead in some sordid lodging? You can talk to me of other women being charming, and of Patti singing divinely, before the girl you loved has even the quiet of a grave to sleep in? Why, man, there are horrors in store for that little white body of hers!" "Stop, Basil! I won't hear it!" cried Dorian, leaping to his feet. "You must not tell me about things. What is done is done. What is past is past." "You call yesterday the past?" "What has the actual lapse of time got to do with it? It is only shallow people who require years to get rid of an emotion. A man who is master of himself can end a sorrow as easily as he can invent a pleasure. I don't want to be at the mercy of my emotions. I want to use them, to enjoy them, and to dominate them." "Dorian, this is horrible! Something has changed you completely. You look exactly the same wonderful boy who, day after day, used to come down to my studio to sit for his picture. But you were simple, natural, and affectionate then. You were the most unspoiled creature in the whole world. Now, I don't know what has come over you. You talk as if you had no heart, no pity in you. It is all Harry's influence. I see that." The lad flushed up and, going to the window, looked out for a few moments on the green, flickering, sun-lashed garden. "I owe a great deal to Harry, Basil," he said at last, "more than I owe to you. You only taught me to be vain." "Well, I am punished for that, Dorian--or shall be some day." "I don't know what you mean, Basil," he exclaimed, turning round. "I don't know what you want. What do you want?" "I want the Dorian Gray I used to paint," said the artist sadly. "Basil," said the lad, going over to him and putting his hand on his shoulder, "you have come too late. Yesterday, when I heard that Sibyl Vane had killed herself--" "Killed herself! Good heavens! is there no doubt about that?" cried Hallward, looking up at him with an expression of horror. "My dear Basil! Surely you don't think it was a vulgar accident? Of course she killed herself." The elder man buried his face in his hands. "How fearful," he muttered, and a shudder ran through him. "No," said Dorian Gray, "there is nothing fearful about it. It is one of the great romantic tragedies of the age. As a rule, people who act lead the most commonplace lives. They are good husbands, or faithful wives, or something tedious. You know what I mean--middle-class virtue and all that kind of thing. How different Sibyl was! She lived her finest tragedy. She was always a heroine. The last night she played--the night you saw her--she acted badly because she had known the reality of love. When she knew its unreality, she died, as Juliet might have died. She passed again into the sphere of art. There is something of the martyr about her. Her death has all the pathetic uselessness of martyrdom, all its wasted beauty. But, as I was saying, you must not think I have not suffered. If you had come in yesterday at a particular moment--about half-past five, perhaps, or a quarter to six--you would have found me in tears. Even Harry, who was here, who brought me the news, in fact, had no idea what I was going through. I suffered immensely. Then it passed away. I cannot repeat an emotion. No one can, except sentimentalists. And you are awfully unjust, Basil. You come down here to console me. That is charming of you. You find me consoled, and you are furious. How like a sympathetic person! You remind me of a story Harry told me about a certain philanthropist who spent twenty years of his life in trying to get some grievance redressed, or some unjust law altered--I forget exactly what it was. Finally he succeeded, and nothing could exceed his disappointment. He had absolutely nothing to do, almost died of _ennui_, and became a confirmed misanthrope. And besides, my dear old Basil, if you really want to console me, teach me rather to forget what has happened, or to see it from a proper artistic point of view. Was it not Gautier who used to write about _la consolation des arts_? I remember picking up a little vellum-covered book in your studio one day and chancing on that delightful phrase. Well, I am not like that young man you told me of when we were down at Marlow together, the young man who used to say that yellow satin could console one for all the miseries of life. I love beautiful things that one can touch and handle. Old brocades, green bronzes, lacquer-work, carved ivories, exquisite surroundings, luxury, pomp--there is much to be got from all these. But the artistic temperament that they create, or at any rate reveal, is still more to me. To become the spectator of one's own life, as Harry says, is to escape the suffering of life. I know you are surprised at my talking to you like this. You have not realized how I have developed. I was a schoolboy when you knew me. I am a man now. I have new passions, new thoughts, new ideas. I am different, but you must not like me less. I am changed, but you must always be my friend. Of course, I am very fond of Harry. But I know that you are better than he is. You are not stronger--you are too much afraid of life--but you are better. And how happy we used to be together! Don't leave me, Basil, and don't quarrel with me. I am what I am. There is nothing more to be said." The painter felt strangely moved. The lad was infinitely dear to him, and his personality had been the great turning point in his art. He could not bear the idea of reproaching him any more. After all, his indifference was probably merely a mood that would pass away. There was so much in him that was good, so much in him that was noble. "Well, Dorian," he said at length, with a sad smile, "I won't speak to you again about this horrible thing, after to-day. I only trust your name won't be mentioned in connection with it. The inquest is to take place this afternoon. Have they summoned you?" Dorian shook his head, and a look of annoyance passed over his face at the mention of the word "inquest." There was something so crude and vulgar about everything of the kind. "They don't know my name," he answered. "But surely she did?" "Only my Christian name, and that I am quite sure she never mentioned to any one. She told me once that they were all rather curious to learn who I was, and that she invariably told them my name was Prince Charming. It was pretty of her. You must do me a drawing of Sibyl, Basil. I should like to have something more of her than the memory of a few kisses and some broken pathetic words." "I will try and do something, Dorian, if it would please you. But you must come and sit to me yourself again. I can't get on without you." "I can never sit to you again, Basil. It is impossible!" he exclaimed, starting back. The painter stared at him. "My dear boy, what nonsense!" he cried. "Do you mean to say you don't like what I did of you? Where is it? Why have you pulled the screen in front of it? Let me look at it. It is the best thing I have ever done. Do take the screen away, Dorian. It is simply disgraceful of your servant hiding my work like that. I felt the room looked different as I came in." "My servant has nothing to do with it, Basil. You don't imagine I let him arrange my room for me? He settles my flowers for me sometimes--that is all. No; I did it myself. The light was too strong on the portrait." "Too strong! Surely not, my dear fellow? It is an admirable place for it. Let me see it." And Hallward walked towards the corner of the room. A cry of terror broke from Dorian Gray's lips, and he rushed between the painter and the screen. "Basil," he said, looking very pale, "you must not look at it. I don't wish you to." "Not look at my own work! You are not serious. Why shouldn't I look at it?" exclaimed Hallward, laughing. "If you try to look at it, Basil, on my word of honour I will never speak to you again as long as I live. I am quite serious. I don't offer any explanation, and you are not to ask for any. But, remember, if you touch this screen, everything is over between us." Hallward was thunderstruck. He looked at Dorian Gray in absolute amazement. He had never seen him like this before. The lad was actually pallid with rage. His hands were clenched, and the pupils of his eyes were like disks of blue fire. He was trembling all over. "Dorian!" "Don't speak!" "But what is the matter? Of course I won't look at it if you don't want me to," he said, rather coldly, turning on his heel and going over towards the window. "But, really, it seems rather absurd that I shouldn't see my own work, especially as I am going to exhibit it in Paris in the autumn. I shall probably have to give it another coat of varnish before that, so I must see it some day, and why not to-day?" "To exhibit it! You want to exhibit it?" exclaimed Dorian Gray, a strange sense of terror creeping over him. Was the world going to be shown his secret? Were people to gape at the mystery of his life? That was impossible. Something--he did not know what--had to be done at once. "Yes; I don't suppose you will object to that. Georges Petit is going to collect all my best pictures for a special exhibition in the Rue de Seze, which will open the first week in October. The portrait will only be away a month. I should think you could easily spare it for that time. In fact, you are sure to be out of town. And if you keep it always behind a screen, you can't care much about it." Dorian Gray passed his hand over his forehead. There were beads of perspiration there. He felt that he was on the brink of a horrible danger. "You told me a month ago that you would never exhibit it," he cried. "Why have you changed your mind? You people who go in for being consistent have just as many moods as others have. The only difference is that your moods are rather meaningless. You can't have forgotten that you assured me most solemnly that nothing in the world would induce you to send it to any exhibition. You told Harry exactly the same thing." He stopped suddenly, and a gleam of light came into his eyes. He remembered that Lord Henry had said to him once, half seriously and half in jest, "If you want to have a strange quarter of an hour, get Basil to tell you why he won't exhibit your picture. He told me why he wouldn't, and it was a revelation to me." Yes, perhaps Basil, too, had his secret. He would ask him and try. "Basil," he said, coming over quite close and looking him straight in the face, "we have each of us a secret. Let me know yours, and I shall tell you mine. What was your reason for refusing to exhibit my picture?" The painter shuddered in spite of himself. "Dorian, if I told you, you might like me less than you do, and you would certainly laugh at me. I could not bear your doing either of those two things. If you wish me never to look at your picture again, I am content. I have always you to look at. If you wish the best work I have ever done to be hidden from the world, I am satisfied. Your friendship is dearer to me than any fame or reputation." "No, Basil, you must tell me," insisted Dorian Gray. "I think I have a right to know." His feeling of terror had passed away, and curiosity had taken its place. He was determined to find out Basil Hallward's mystery. "Let us sit down, Dorian," said the painter, looking troubled. "Let us sit down. And just answer me one question. Have you noticed in the picture something curious?--something that probably at first did not strike you, but that revealed itself to you suddenly?" "Basil!" cried the lad, clutching the arms of his chair with trembling hands and gazing at him with wild startled eyes. "I see you did. Don't speak. Wait till you hear what I have to say. Dorian, from the moment I met you, your personality had the most extraordinary influence over me. I was dominated, soul, brain, and power, by you. You became to me the visible incarnation of that unseen ideal whose memory haunts us artists like an exquisite dream. I worshipped you. I grew jealous of every one to whom you spoke. I wanted to have you all to myself. I was only happy when I was with you. When you were away from me, you were still present in my art.... Of course, I never let you know anything about this. It would have been impossible. You would not have understood it. I hardly understood it myself. I only knew that I had seen perfection face to face, and that the world had become wonderful to my eyes--too wonderful, perhaps, for in such mad worships there is peril, the peril of losing them, no less than the peril of keeping them.... Weeks and weeks went on, and I grew more and more absorbed in you. Then came a new development. I had drawn you as Paris in dainty armour, and as Adonis with huntsman's cloak and polished boar-spear. Crowned with heavy lotus-blossoms you had sat on the prow of Adrian's barge, gazing across the green turbid Nile. You had leaned over the still pool of some Greek woodland and seen in the water's silent silver the marvel of your own face. And it had all been what art should be--unconscious, ideal, and remote. One day, a fatal day I sometimes think, I determined to paint a wonderful portrait of you as you actually are, not in the costume of dead ages, but in your own dress and in your own time. Whether it was the realism of the method, or the mere wonder of your own personality, thus directly presented to me without mist or veil, I cannot tell. But I know that as I worked at it, every flake and film of colour seemed to me to reveal my secret. I grew afraid that others would know of my idolatry. I felt, Dorian, that I had told too much, that I had put too much of myself into it. Then it was that I resolved never to allow the picture to be exhibited. You were a little annoyed; but then you did not realize all that it meant to me. Harry, to whom I talked about it, laughed at me. But I did not mind that. When the picture was finished, and I sat alone with it, I felt that I was right.... Well, after a few days the thing left my studio, and as soon as I had got rid of the intolerable fascination of its presence, it seemed to me that I had been foolish in imagining that I had seen anything in it, more than that you were extremely good-looking and that I could paint. Even now I cannot help feeling that it is a mistake to think that the passion one feels in creation is ever really shown in the work one creates. Art is always more abstract than we fancy. Form and colour tell us of form and colour--that is all. It often seems to me that art conceals the artist far more completely than it ever reveals him. And so when I got this offer from Paris, I determined to make your portrait the principal thing in my exhibition. It never occurred to me that you would refuse. I see now that you were right. The picture cannot be shown. You must not be angry with me, Dorian, for what I have told you. As I said to Harry, once, you are made to be worshipped." Dorian Gray drew a long breath. The colour came back to his cheeks, and a smile played about his lips. The peril was over. He was safe for the time. Yet he could not help feeling infinite pity for the painter who had just made this strange confession to him, and wondered if he himself would ever be so dominated by the personality of a friend. Lord Henry had the charm of being very dangerous. But that was all. He was too clever and too cynical to be really fond of. Would there ever be some one who would fill him with a strange idolatry? Was that one of the things that life had in store? "It is extraordinary to me, Dorian," said Hallward, "that you should have seen this in the portrait. Did you really see it?" "I saw something in it," he answered, "something that seemed to me very curious." "Well, you don't mind my looking at the thing now?" Dorian shook his head. "You must not ask me that, Basil. I could not possibly let you stand in front of that picture." "You will some day, surely?" "Never." "Well, perhaps you are right. And now good-bye, Dorian. You have been the one person in my life who has really influenced my art. Whatever I have done that is good, I owe to you. Ah! you don't know what it cost me to tell you all that I have told you." "My dear Basil," said Dorian, "what have you told me? Simply that you felt that you admired me too much. That is not even a compliment." "It was not intended as a compliment. It was a confession. Now that I have made it, something seems to have gone out of me. Perhaps one should never put one's worship into words." "It was a very disappointing confession." "Why, what did you expect, Dorian? You didn't see anything else in the picture, did you? There was nothing else to see?" "No; there was nothing else to see. Why do you ask? But you mustn't talk about worship. It is foolish. You and I are friends, Basil, and we must always remain so." "You have got Harry," said the painter sadly. "Oh, Harry!" cried the lad, with a ripple of laughter. "Harry spends his days in saying what is incredible and his evenings in doing what is improbable. Just the sort of life I would like to lead. But still I don't think I would go to Harry if I were in trouble. I would sooner go to you, Basil." "You will sit to me again?" "Impossible!" "You spoil my life as an artist by refusing, Dorian. No man comes across two ideal things. Few come across one." "I can't explain it to you, Basil, but I must never sit to you again. There is something fatal about a portrait. It has a life of its own. I will come and have tea with you. That will be just as pleasant." "Pleasanter for you, I am afraid," murmured Hallward regretfully. "And now good-bye. I am sorry you won't let me look at the picture once again. But that can't be helped. I quite understand what you feel about it." As he left the room, Dorian Gray smiled to himself. Poor Basil! How little he knew of the true reason! And how strange it was that, instead of having been forced to reveal his own secret, he had succeeded, almost by chance, in wresting a secret from his friend! How much that strange confession explained to him! The painter's absurd fits of jealousy, his wild devotion, his extravagant panegyrics, his curious reticences--he understood them all now, and he felt sorry. There seemed to him to be something tragic in a friendship so coloured by romance. He sighed and touched the bell. The portrait must be hidden away at all costs. He could not run such a risk of discovery again. It had been mad of him to have allowed the thing to remain, even for an hour, in a room to which any of his friends had access. CHAPTER 10 When his servant entered, he looked at him steadfastly and wondered if he had thought of peering behind the screen. The man was quite impassive and waited for his orders. Dorian lit a cigarette and walked over to the glass and glanced into it. He could see the reflection of Victor's face perfectly. It was like a placid mask of servility. There was nothing to be afraid of, there. Yet he thought it best to be on his guard. Speaking very slowly, he told him to tell the house-keeper that he wanted to see her, and then to go to the frame-maker and ask him to send two of his men round at once. It seemed to him that as the man left the room his eyes wandered in the direction of the screen. Or was that merely his own fancy? After a few moments, in her black silk dress, with old-fashioned thread mittens on her wrinkled hands, Mrs. Leaf bustled into the library. He asked her for the key of the schoolroom. "The old schoolroom, Mr. Dorian?" she exclaimed. "Why, it is full of dust. I must get it arranged and put straight before you go into it. It is not fit for you to see, sir. It is not, indeed." "I don't want it put straight, Leaf. I only want the key." "Well, sir, you'll be covered with cobwebs if you go into it. Why, it hasn't been opened for nearly five years--not since his lordship died." He winced at the mention of his grandfather. He had hateful memories of him. "That does not matter," he answered. "I simply want to see the place--that is all. Give me the key." "And here is the key, sir," said the old lady, going over the contents of her bunch with tremulously uncertain hands. "Here is the key. I'll have it off the bunch in a moment. But you don't think of living up there, sir, and you so comfortable here?" "No, no," he cried petulantly. "Thank you, Leaf. That will do." She lingered for a few moments, and was garrulous over some detail of the household. He sighed and told her to manage things as she thought best. She left the room, wreathed in smiles. As the door closed, Dorian put the key in his pocket and looked round the room. His eye fell on a large, purple satin coverlet heavily embroidered with gold, a splendid piece of late seventeenth-century Venetian work that his grandfather had found in a convent near Bologna. Yes, that would serve to wrap the dreadful thing in. It had perhaps served often as a pall for the dead. Now it was to hide something that had a corruption of its own, worse than the corruption of death itself--something that would breed horrors and yet would never die. What the worm was to the corpse, his sins would be to the painted image on the canvas. They would mar its beauty and eat away its grace. They would defile it and make it shameful. And yet the thing would still live on. It would be always alive. He shuddered, and for a moment he regretted that he had not told Basil the true reason why he had wished to hide the picture away. Basil would have helped him to resist Lord Henry's influence, and the still more poisonous influences that came from his own temperament. The love that he bore him--for it was really love--had nothing in it that was not noble and intellectual. It was not that mere physical admiration of beauty that is born of the senses and that dies when the senses tire. It was such love as Michelangelo had known, and Montaigne, and Winckelmann, and Shakespeare himself. Yes, Basil could have saved him. But it was too late now. The past could always be annihilated. Regret, denial, or forgetfulness could do that. But the future was inevitable. There were passions in him that would find their terrible outlet, dreams that would make the shadow of their evil real. He took up from the couch the great purple-and-gold texture that covered it, and, holding it in his hands, passed behind the screen. Was the face on the canvas viler than before? It seemed to him that it was unchanged, and yet his loathing of it was intensified. Gold hair, blue eyes, and rose-red lips--they all were there. It was simply the expression that had altered. That was horrible in its cruelty. Compared to what he saw in it of censure or rebuke, how shallow Basil's reproaches about Sibyl Vane had been!--how shallow, and of what little account! His own soul was looking out at him from the canvas and calling him to judgement. A look of pain came across him, and he flung the rich pall over the picture. As he did so, a knock came to the door. He passed out as his servant entered. "The persons are here, Monsieur." He felt that the man must be got rid of at once. He must not be allowed to know where the picture was being taken to. There was something sly about him, and he had thoughtful, treacherous eyes. Sitting down at the writing-table he scribbled a note to Lord Henry, asking him to send him round something to read and reminding him that they were to meet at eight-fifteen that evening. "Wait for an answer," he said, handing it to him, "and show the men in here." In two or three minutes there was another knock, and Mr. Hubbard himself, the celebrated frame-maker of South Audley Street, came in with a somewhat rough-looking young assistant. Mr. Hubbard was a florid, red-whiskered little man, whose admiration for art was considerably tempered by the inveterate impecuniosity of most of the artists who dealt with him. As a rule, he never left his shop. He waited for people to come to him. But he always made an exception in favour of Dorian Gray. There was something about Dorian that charmed everybody. It was a pleasure even to see him. "What can I do for you, Mr. Gray?" he said, rubbing his fat freckled hands. "I thought I would do myself the honour of coming round in person. I have just got a beauty of a frame, sir. Picked it up at a sale. Old Florentine. Came from Fonthill, I believe. Admirably suited for a religious subject, Mr. Gray." "I am so sorry you have given yourself the trouble of coming round, Mr. Hubbard. I shall certainly drop in and look at the frame--though I don't go in much at present for religious art--but to-day I only want a picture carried to the top of the house for me. It is rather heavy, so I thought I would ask you to lend me a couple of your men." "No trouble at all, Mr. Gray. I am delighted to be of any service to you. Which is the work of art, sir?" "This," replied Dorian, moving the screen back. "Can you move it, covering and all, just as it is? I don't want it to get scratched going upstairs." "There will be no difficulty, sir," said the genial frame-maker, beginning, with the aid of his assistant, to unhook the picture from the long brass chains by which it was suspended. "And, now, where shall we carry it to, Mr. Gray?" "I will show you the way, Mr. Hubbard, if you will kindly follow me. Or perhaps you had better go in front. I am afraid it is right at the top of the house. We will go up by the front staircase, as it is wider." He held the door open for them, and they passed out into the hall and began the ascent. The elaborate character of the frame had made the picture extremely bulky, and now and then, in spite of the obsequious protests of Mr. Hubbard, who had the true tradesman's spirited dislike of seeing a gentleman doing anything useful, Dorian put his hand to it so as to help them. "Something of a load to carry, sir," gasped the little man when they reached the top landing. And he wiped his shiny forehead. "I am afraid it is rather heavy," murmured Dorian as he unlocked the door that opened into the room that was to keep for him the curious secret of his life and hide his soul from the eyes of men. He had not entered the place for more than four years--not, indeed, since he had used it first as a play-room when he was a child, and then as a study when he grew somewhat older. It was a large, well-proportioned room, which had been specially built by the last Lord Kelso for the use of the little grandson whom, for his strange likeness to his mother, and also for other reasons, he had always hated and desired to keep at a distance. It appeared to Dorian to have but little changed. There was the huge Italian _cassone_, with its fantastically painted panels and its tarnished gilt mouldings, in which he had so often hidden himself as a boy. There the satinwood book-case filled with his dog-eared schoolbooks. On the wall behind it was hanging the same ragged Flemish tapestry where a faded king and queen were playing chess in a garden, while a company of hawkers rode by, carrying hooded birds on their gauntleted wrists. How well he remembered it all! Every moment of his lonely childhood came back to him as he looked round. He recalled the stainless purity of his boyish life, and it seemed horrible to him that it was here the fatal portrait was to be hidden away. How little he had thought, in those dead days, of all that was in store for him! But there was no other place in the house so secure from prying eyes as this. He had the key, and no one else could enter it. Beneath its purple pall, the face painted on the canvas could grow bestial, sodden, and unclean. What did it matter? No one could see it. He himself would not see it. Why should he watch the hideous corruption of his soul? He kept his youth--that was enough. And, besides, might not his nature grow finer, after all? There was no reason that the future should be so full of shame. Some love might come across his life, and purify him, and shield him from those sins that seemed to be already stirring in spirit and in flesh--those curious unpictured sins whose very mystery lent them their subtlety and their charm. Perhaps, some day, the cruel look would have passed away from the scarlet sensitive mouth, and he might show to the world Basil Hallward's masterpiece. No; that was impossible. Hour by hour, and week by week, the thing upon the canvas was growing old. It might escape the hideousness of sin, but the hideousness of age was in store for it. The cheeks would become hollow or flaccid. Yellow crow's feet would creep round the fading eyes and make them horrible. The hair would lose its brightness, the mouth would gape or droop, would be foolish or gross, as the mouths of old men are. There would be the wrinkled throat, the cold, blue-veined hands, the twisted body, that he remembered in the grandfather who had been so stern to him in his boyhood. The picture had to be concealed. There was no help for it. "Bring it in, Mr. Hubbard, please," he said, wearily, turning round. "I am sorry I kept you so long. I was thinking of something else." "Always glad to have a rest, Mr. Gray," answered the frame-maker, who was still gasping for breath. "Where shall we put it, sir?" "Oh, anywhere. Here: this will do. I don't want to have it hung up. Just lean it against the wall. Thanks." "Might one look at the work of art, sir?" Dorian started. "It would not interest you, Mr. Hubbard," he said, keeping his eye on the man. He felt ready to leap upon him and fling him to the ground if he dared to lift the gorgeous hanging that concealed the secret of his life. "I shan't trouble you any more now. I am much obliged for your kindness in coming round." "Not at all, not at all, Mr. Gray. Ever ready to do anything for you, sir." And Mr. Hubbard tramped downstairs, followed by the assistant, who glanced back at Dorian with a look of shy wonder in his rough uncomely face. He had never seen any one so marvellous. When the sound of their footsteps had died away, Dorian locked the door and put the key in his pocket. He felt safe now. No one would ever look upon the horrible thing. No eye but his would ever see his shame. On reaching the library, he found that it was just after five o'clock and that the tea had been already brought up. On a little table of dark perfumed wood thickly incrusted with nacre, a present from Lady Radley, his guardian's wife, a pretty professional invalid who had spent the preceding winter in Cairo, was lying a note from Lord Henry, and beside it was a book bound in yellow paper, the cover slightly torn and the edges soiled. A copy of the third edition of _The St. James's Gazette_ had been placed on the tea-tray. It was evident that Victor had returned. He wondered if he had met the men in the hall as they were leaving the house and had wormed out of them what they had been doing. He would be sure to miss the picture--had no doubt missed it already, while he had been laying the tea-things. The screen had not been set back, and a blank space was visible on the wall. Perhaps some night he might find him creeping upstairs and trying to force the door of the room. It was a horrible thing to have a spy in one's house. He had heard of rich men who had been blackmailed all their lives by some servant who had read a letter, or overheard a conversation, or picked up a card with an address, or found beneath a pillow a withered flower or a shred of crumpled lace. He sighed, and having poured himself out some tea, opened Lord Henry's note. It was simply to say that he sent him round the evening paper, and a book that might interest him, and that he would be at the club at eight-fifteen. He opened _The St. James's_ languidly, and looked through it. A red pencil-mark on the fifth page caught his eye. It drew attention to the following paragraph: INQUEST ON AN ACTRESS.--An inquest was held this morning at the Bell Tavern, Hoxton Road, by Mr. Danby, the District Coroner, on the body of Sibyl Vane, a young actress recently engaged at the Royal Theatre, Holborn. A verdict of death by misadventure was returned. Considerable sympathy was expressed for the mother of the deceased, who was greatly affected during the giving of her own evidence, and that of Dr. Birrell, who had made the post-mortem examination of the deceased. He frowned, and tearing the paper in two, went across the room and flung the pieces away. How ugly it all was! And how horribly real ugliness made things! He felt a little annoyed with Lord Henry for having sent him the report. And it was certainly stupid of him to have marked it with red pencil. Victor might have read it. The man knew more than enough English for that. Perhaps he had read it and had begun to suspect something. And, yet, what did it matter? What had Dorian Gray to do with Sibyl Vane's death? There was nothing to fear. Dorian Gray had not killed her. His eye fell on the yellow book that Lord Henry had sent him. What was it, he wondered. He went towards the little, pearl-coloured octagonal stand that had always looked to him like the work of some strange Egyptian bees that wrought in silver, and taking up the volume, flung himself into an arm-chair and began to turn over the leaves. After a few minutes he became absorbed. It was the strangest book that he had ever read. It seemed to him that in exquisite raiment, and to the delicate sound of flutes, the sins of the world were passing in dumb show before him. Things that he had dimly dreamed of were suddenly made real to him. Things of which he had never dreamed were gradually revealed. It was a novel without a plot and with only one character, being, indeed, simply a psychological study of a certain young Parisian who spent his life trying to realize in the nineteenth century all the passions and modes of thought that belonged to every century except his own, and to sum up, as it were, in himself the various moods through which the world-spirit had ever passed, loving for their mere artificiality those renunciations that men have unwisely called virtue, as much as those natural rebellions that wise men still call sin. The style in which it was written was that curious jewelled style, vivid and obscure at once, full of _argot_ and of archaisms, of technical expressions and of elaborate paraphrases, that characterizes the work of some of the finest artists of the French school of _Symbolistes_. There were in it metaphors as monstrous as orchids and as subtle in colour. The life of the senses was described in the terms of mystical philosophy. One hardly knew at times whether one was reading the spiritual ecstasies of some mediaeval saint or the morbid confessions of a modern sinner. It was a poisonous book. The heavy odour of incense seemed to cling about its pages and to trouble the brain. The mere cadence of the sentences, the subtle monotony of their music, so full as it was of complex refrains and movements elaborately repeated, produced in the mind of the lad, as he passed from chapter to chapter, a form of reverie, a malady of dreaming, that made him unconscious of the falling day and creeping shadows. Cloudless, and pierced by one solitary star, a copper-green sky gleamed through the windows. He read on by its wan light till he could read no more. Then, after his valet had reminded him several times of the lateness of the hour, he got up, and going into the next room, placed the book on the little Florentine table that always stood at his bedside and began to dress for dinner. It was almost nine o'clock before he reached the club, where he found Lord Henry sitting alone, in the morning-room, looking very much bored. "I am so sorry, Harry," he cried, "but really it is entirely your fault. That book you sent me so fascinated me that I forgot how the time was going." "Yes, I thought you would like it," replied his host, rising from his chair. "I didn't say I liked it, Harry. I said it fascinated me. There is a great difference." "Ah, you have discovered that?" murmured Lord Henry. And they passed into the dining-room. CHAPTER 11 For years, Dorian Gray could not free himself from the influence of this book. Or perhaps it would be more accurate to say that he never sought to free himself from it. He procured from Paris no less than nine large-paper copies of the first edition, and had them bound in different colours, so that they might suit his various moods and the changing fancies of a nature over which he seemed, at times, to have almost entirely lost control. The hero, the wonderful young Parisian in whom the romantic and the scientific temperaments were so strangely blended, became to him a kind of prefiguring type of himself. And, indeed, the whole book seemed to him to contain the story of his own life, written before he had lived it. In one point he was more fortunate than the novel's fantastic hero. He never knew--never, indeed, had any cause to know--that somewhat grotesque dread of mirrors, and polished metal surfaces, and still water which came upon the young Parisian so early in his life, and was occasioned by the sudden decay of a beau that had once, apparently, been so remarkable. It was with an almost cruel joy--and perhaps in nearly every joy, as certainly in every pleasure, cruelty has its place--that he used to read the latter part of the book, with its really tragic, if somewhat overemphasized, account of the sorrow and despair of one who had himself lost what in others, and the world, he had most dearly valued. For the wonderful beauty that had so fascinated Basil Hallward, and many others besides him, seemed never to leave him. Even those who had heard the most evil things against him--and from time to time strange rumours about his mode of life crept through London and became the chatter of the clubs--could not believe anything to his dishonour when they saw him. He had always the look of one who had kept himself unspotted from the world. Men who talked grossly became silent when Dorian Gray entered the room. There was something in the purity of his face that rebuked them. His mere presence seemed to recall to them the memory of the innocence that they had tarnished. They wondered how one so charming and graceful as he was could have escaped the stain of an age that was at once sordid and sensual. Often, on returning home from one of those mysterious and prolonged absences that gave rise to such strange conjecture among those who were his friends, or thought that they were so, he himself would creep upstairs to the locked room, open the door with the key that never left him now, and stand, with a mirror, in front of the portrait that Basil Hallward had painted of him, looking now at the evil and aging face on the canvas, and now at the fair young face that laughed back at him from the polished glass. The very sharpness of the contrast used to quicken his sense of pleasure. He grew more and more enamoured of his own beauty, more and more interested in the corruption of his own soul. He would examine with minute care, and sometimes with a monstrous and terrible delight, the hideous lines that seared the wrinkling forehead or crawled around the heavy sensual mouth, wondering sometimes which were the more horrible, the signs of sin or the signs of age. He would place his white hands beside the coarse bloated hands of the picture, and smile. He mocked the misshapen body and the failing limbs. There were moments, indeed, at night, when, lying sleepless in his own delicately scented chamber, or in the sordid room of the little ill-famed tavern near the docks which, under an assumed name and in disguise, it was his habit to frequent, he would think of the ruin he had brought upon his soul with a pity that was all the more poignant because it was purely selfish. But moments such as these were rare. That curiosity about life which Lord Henry had first stirred in him, as they sat together in the garden of their friend, seemed to increase with gratification. The more he knew, the more he desired to know. He had mad hungers that grew more ravenous as he fed them. Yet he was not really reckless, at any rate in his relations to society. Once or twice every month during the winter, and on each Wednesday evening while the season lasted, he would throw open to the world his beautiful house and have the most celebrated musicians of the day to charm his guests with the wonders of their art. His little dinners, in the settling of which Lord Henry always assisted him, were noted as much for the careful selection and placing of those invited, as for the exquisite taste shown in the decoration of the table, with its subtle symphonic arrangements of exotic flowers, and embroidered cloths, and antique plate of gold and silver. Indeed, there were many, especially among the very young men, who saw, or fancied that they saw, in Dorian Gray the true realization of a type of which they had often dreamed in Eton or Oxford days, a type that was to combine something of the real culture of the scholar with all the grace and distinction and perfect manner of a citizen of the world. To them he seemed to be of the company of those whom Dante describes as having sought to "make themselves perfect by the worship of beauty." Like Gautier, he was one for whom "the visible world existed." And, certainly, to him life itself was the first, the greatest, of the arts, and for it all the other arts seemed to be but a preparation. Fashion, by which what is really fantastic becomes for a moment universal, and dandyism, which, in its own way, is an attempt to assert the absolute modernity of beauty, had, of course, their fascination for him. His mode of dressing, and the particular styles that from time to time he affected, had their marked influence on the young exquisites of the Mayfair balls and Pall Mall club windows, who copied him in everything that he did, and tried to reproduce the accidental charm of his graceful, though to him only half-serious, fopperies. For, while he was but too ready to accept the position that was almost immediately offered to him on his coming of age, and found, indeed, a subtle pleasure in the thought that he might really become to the London of his own day what to imperial Neronian Rome the author of the Satyricon once had been, yet in his inmost heart he desired to be something more than a mere _arbiter elegantiarum_, to be consulted on the wearing of a jewel, or the knotting of a necktie, or the conduct of a cane. He sought to elaborate some new scheme of life that would have its reasoned philosophy and its ordered principles, and find in the spiritualizing of the senses its highest realization. The worship of the senses has often, and with much justice, been decried, men feeling a natural instinct of terror about passions and sensations that seem stronger than themselves, and that they are conscious of sharing with the less highly organized forms of existence. But it appeared to Dorian Gray that the true nature of the senses had never been understood, and that they had remained savage and animal merely because the world had sought to starve them into submission or to kill them by pain, instead of aiming at making them elements of a new spirituality, of which a fine instinct for beauty was to be the dominant characteristic. As he looked back upon man moving through history, he was haunted by a feeling of loss. So much had been surrendered! and to such little purpose! There had been mad wilful rejections, monstrous forms of self-torture and self-denial, whose origin was fear and whose result was a degradation infinitely more terrible than that fancied degradation from which, in their ignorance, they had sought to escape; Nature, in her wonderful irony, driving out the anchorite to feed with the wild animals of the desert and giving to the hermit the beasts of the field as his companions. Yes: there was to be, as Lord Henry had prophesied, a new Hedonism that was to recreate life and to save it from that harsh uncomely puritanism that is having, in our own day, its curious revival. It was to have its service of the intellect, certainly, yet it was never to accept any theory or system that would involve the sacrifice of any mode of passionate experience. Its aim, indeed, was to be experience itself, and not the fruits of experience, sweet or bitter as they might be. Of the asceticism that deadens the senses, as of the vulgar profligacy that dulls them, it was to know nothing. But it was to teach man to concentrate himself upon the moments of a life that is itself but a moment. There are few of us who have not sometimes wakened before dawn, either after one of those dreamless nights that make us almost enamoured of death, or one of those nights of horror and misshapen joy, when through the chambers of the brain sweep phantoms more terrible than reality itself, and instinct with that vivid life that lurks in all grotesques, and that lends to Gothic art its enduring vitality, this art being, one might fancy, especially the art of those whose minds have been troubled with the malady of reverie. Gradually white fingers creep through the curtains, and they appear to tremble. In black fantastic shapes, dumb shadows crawl into the corners of the room and crouch there. Outside, there is the stirring of birds among the leaves, or the sound of men going forth to their work, or the sigh and sob of the wind coming down from the hills and wandering round the silent house, as though it feared to wake the sleepers and yet must needs call forth sleep from her purple cave. Veil after veil of thin dusky gauze is lifted, and by degrees the forms and colours of things are restored to them, and we watch the dawn remaking the world in its antique pattern. The wan mirrors get back their mimic life. The flameless tapers stand where we had left them, and beside them lies the half-cut book that we had been studying, or the wired flower that we had worn at the ball, or the letter that we had been afraid to read, or that we had read too often. Nothing seems to us changed. Out of the unreal shadows of the night comes back the real life that we had known. We have to resume it where we had left off, and there steals over us a terrible sense of the necessity for the continuance of energy in the same wearisome round of stereotyped habits, or a wild longing, it may be, that our eyelids might open some morning upon a world that had been refashioned anew in the darkness for our pleasure, a world in which things would have fresh shapes and colours, and be changed, or have other secrets, a world in which the past would have little or no place, or survive, at any rate, in no conscious form of obligation or regret, the remembrance even of joy having its bitterness and the memories of pleasure their pain. It was the creation of such worlds as these that seemed to Dorian Gray to be the true object, or amongst the true objects, of life; and in his search for sensations that would be at once new and delightful, and possess that element of strangeness that is so essential to romance, he would often adopt certain modes of thought that he knew to be really alien to his nature, abandon himself to their subtle influences, and then, having, as it were, caught their colour and satisfied his intellectual curiosity, leave them with that curious indifference that is not incompatible with a real ardour of temperament, and that, indeed, according to certain modern psychologists, is often a condition of it. It was rumoured of him once that he was about to join the Roman Catholic communion, and certainly the Roman ritual had always a great attraction for him. The daily sacrifice, more awful really than all the sacrifices of the antique world, stirred him as much by its superb rejection of the evidence of the senses as by the primitive simplicity of its elements and the eternal pathos of the human tragedy that it sought to symbolize. He loved to kneel down on the cold marble pavement and watch the priest, in his stiff flowered dalmatic, slowly and with white hands moving aside the veil of the tabernacle, or raising aloft the jewelled, lantern-shaped monstrance with that pallid wafer that at times, one would fain think, is indeed the "_panis caelestis_," the bread of angels, or, robed in the garments of the Passion of Christ, breaking the Host into the chalice and smiting his breast for his sins. The fuming censers that the grave boys, in their lace and scarlet, tossed into the air like great gilt flowers had their subtle fascination for him. As he passed out, he used to look with wonder at the black confessionals and long to sit in the dim shadow of one of them and listen to men and women whispering through the worn grating the true story of their lives. But he never fell into the error of arresting his intellectual development by any formal acceptance of creed or system, or of mistaking, for a house in which to live, an inn that is but suitable for the sojourn of a night, or for a few hours of a night in which there are no stars and the moon is in travail. Mysticism, with its marvellous power of making common things strange to us, and the subtle antinomianism that always seems to accompany it, moved him for a season; and for a season he inclined to the materialistic doctrines of the _Darwinismus_ movement in Germany, and found a curious pleasure in tracing the thoughts and passions of men to some pearly cell in the brain, or some white nerve in the body, delighting in the conception of the absolute dependence of the spirit on certain physical conditions, morbid or healthy, normal or diseased. Yet, as has been said of him before, no theory of life seemed to him to be of any importance compared with life itself. He felt keenly conscious of how barren all intellectual speculation is when separated from action and experiment. He knew that the senses, no less than the soul, have their spiritual mysteries to reveal. And so he would now study perfumes and the secrets of their manufacture, distilling heavily scented oils and burning odorous gums from the East. He saw that there was no mood of the mind that had not its counterpart in the sensuous life, and set himself to discover their true relations, wondering what there was in frankincense that made one mystical, and in ambergris that stirred one's passions, and in violets that woke the memory of dead romances, and in musk that troubled the brain, and in champak that stained the imagination; and seeking often to elaborate a real psychology of perfumes, and to estimate the several influences of sweet-smelling roots and scented, pollen-laden flowers; of aromatic balms and of dark and fragrant woods; of spikenard, that sickens; of hovenia, that makes men mad; and of aloes, that are said to be able to expel melancholy from the soul. At another time he devoted himself entirely to music, and in a long latticed room, with a vermilion-and-gold ceiling and walls of olive-green lacquer, he used to give curious concerts in which mad gipsies tore wild music from little zithers, or grave, yellow-shawled Tunisians plucked at the strained strings of monstrous lutes, while grinning Negroes beat monotonously upon copper drums and, crouching upon scarlet mats, slim turbaned Indians blew through long pipes of reed or brass and charmed--or feigned to charm--great hooded snakes and horrible horned adders. The harsh intervals and shrill discords of barbaric music stirred him at times when Schubert's grace, and Chopin's beautiful sorrows, and the mighty harmonies of Beethoven himself, fell unheeded on his ear. He collected together from all parts of the world the strangest instruments that could be found, either in the tombs of dead nations or among the few savage tribes that have survived contact with Western civilizations, and loved to touch and try them. He had the mysterious _juruparis_ of the Rio Negro Indians, that women are not allowed to look at and that even youths may not see till they have been subjected to fasting and scourging, and the earthen jars of the Peruvians that have the shrill cries of birds, and flutes of human bones such as Alfonso de Ovalle heard in Chile, and the sonorous green jaspers that are found near Cuzco and give forth a note of singular sweetness. He had painted gourds filled with pebbles that rattled when they were shaken; the long _clarin_ of the Mexicans, into which the performer does not blow, but through which he inhales the air; the harsh _ture_ of the Amazon tribes, that is sounded by the sentinels who sit all day long in high trees, and can be heard, it is said, at a distance of three leagues; the _teponaztli_, that has two vibrating tongues of wood and is beaten with sticks that are smeared with an elastic gum obtained from the milky juice of plants; the _yotl_-bells of the Aztecs, that are hung in clusters like grapes; and a huge cylindrical drum, covered with the skins of great serpents, like the one that Bernal Diaz saw when he went with Cortes into the Mexican temple, and of whose doleful sound he has left us so vivid a description. The fantastic character of these instruments fascinated him, and he felt a curious delight in the thought that art, like Nature, has her monsters, things of bestial shape and with hideous voices. Yet, after some time, he wearied of them, and would sit in his box at the opera, either alone or with Lord Henry, listening in rapt pleasure to "Tannhauser" and seeing in the prelude to that great work of art a presentation of the tragedy of his own soul. On one occasion he took up the study of jewels, and appeared at a costume ball as Anne de Joyeuse, Admiral of France, in a dress covered with five hundred and sixty pearls. This taste enthralled him for years, and, indeed, may be said never to have left him. He would often spend a whole day settling and resettling in their cases the various stones that he had collected, such as the olive-green chrysoberyl that turns red by lamplight, the cymophane with its wirelike line of silver, the pistachio-coloured peridot, rose-pink and wine-yellow topazes, carbuncles of fiery scarlet with tremulous, four-rayed stars, flame-red cinnamon-stones, orange and violet spinels, and amethysts with their alternate layers of ruby and sapphire. He loved the red gold of the sunstone, and the moonstone's pearly whiteness, and the broken rainbow of the milky opal. He procured from Amsterdam three emeralds of extraordinary size and richness of colour, and had a turquoise _de la vieille roche_ that was the envy of all the connoisseurs. He discovered wonderful stories, also, about jewels. In Alphonso's Clericalis Disciplina a serpent was mentioned with eyes of real jacinth, and in the romantic history of Alexander, the Conqueror of Emathia was said to have found in the vale of Jordan snakes "with collars of real emeralds growing on their backs." There was a gem in the brain of the dragon, Philostratus told us, and "by the exhibition of golden letters and a scarlet robe" the monster could be thrown into a magical sleep and slain. According to the great alchemist, Pierre de Boniface, the diamond rendered a man invisible, and the agate of India made him eloquent. The cornelian appeased anger, and the hyacinth provoked sleep, and the amethyst drove away the fumes of wine. The garnet cast out demons, and the hydropicus deprived the moon of her colour. The selenite waxed and waned with the moon, and the meloceus, that discovers thieves, could be affected only by the blood of kids. Leonardus Camillus had seen a white stone taken from the brain of a newly killed toad, that was a certain antidote against poison. The bezoar, that was found in the heart of the Arabian deer, was a charm that could cure the plague. In the nests of Arabian birds was the aspilates, that, according to Democritus, kept the wearer from any danger by fire. The King of Ceilan rode through his city with a large ruby in his hand, as the ceremony of his coronation. The gates of the palace of John the Priest were "made of sardius, with the horn of the horned snake inwrought, so that no man might bring poison within." Over the gable were "two golden apples, in which were two carbuncles," so that the gold might shine by day and the carbuncles by night. In Lodge's strange romance 'A Margarite of America', it was stated that in the chamber of the queen one could behold "all the chaste ladies of the world, inchased out of silver, looking through fair mirrours of chrysolites, carbuncles, sapphires, and greene emeraults." Marco Polo had seen the inhabitants of Zipangu place rose-coloured pearls in the mouths of the dead. A sea-monster had been enamoured of the pearl that the diver brought to King Perozes, and had slain the thief, and mourned for seven moons over its loss. When the Huns lured the king into the great pit, he flung it away--Procopius tells the story--nor was it ever found again, though the Emperor Anastasius offered five hundred-weight of gold pieces for it. The King of Malabar had shown to a certain Venetian a rosary of three hundred and four pearls, one for every god that he worshipped. When the Duke de Valentinois, son of Alexander VI, visited Louis XII of France, his horse was loaded with gold leaves, according to Brantome, and his cap had double rows of rubies that threw out a great light. Charles of England had ridden in stirrups hung with four hundred and twenty-one diamonds. Richard II had a coat, valued at thirty thousand marks, which was covered with balas rubies. Hall described Henry VIII, on his way to the Tower previous to his coronation, as wearing "a jacket of raised gold, the placard embroidered with diamonds and other rich stones, and a great bauderike about his neck of large balasses." The favourites of James I wore ear-rings of emeralds set in gold filigrane. Edward II gave to Piers Gaveston a suit of red-gold armour studded with jacinths, a collar of gold roses set with turquoise-stones, and a skull-cap _parseme_ with pearls. Henry II wore jewelled gloves reaching to the elbow, and had a hawk-glove sewn with twelve rubies and fifty-two great orients. The ducal hat of Charles the Rash, the last Duke of Burgundy of his race, was hung with pear-shaped pearls and studded with sapphires. How exquisite life had once been! How gorgeous in its pomp and decoration! Even to read of the luxury of the dead was wonderful. Then he turned his attention to embroideries and to the tapestries that performed the office of frescoes in the chill rooms of the northern nations of Europe. As he investigated the subject--and he always had an extraordinary faculty of becoming absolutely absorbed for the moment in whatever he took up--he was almost saddened by the reflection of the ruin that time brought on beautiful and wonderful things. He, at any rate, had escaped that. Summer followed summer, and the yellow jonquils bloomed and died many times, and nights of horror repeated the story of their shame, but he was unchanged. No winter marred his face or stained his flowerlike bloom. How different it was with material things! Where had they passed to? Where was the great crocus-coloured robe, on which the gods fought against the giants, that had been worked by brown girls for the pleasure of Athena? Where the huge velarium that Nero had stretched across the Colosseum at Rome, that Titan sail of purple on which was represented the starry sky, and Apollo driving a chariot drawn by white, gilt-reined steeds? He longed to see the curious table-napkins wrought for the Priest of the Sun, on which were displayed all the dainties and viands that could be wanted for a feast; the mortuary cloth of King Chilperic, with its three hundred golden bees; the fantastic robes that excited the indignation of the Bishop of Pontus and were figured with "lions, panthers, bears, dogs, forests, rocks, hunters--all, in fact, that a painter can copy from nature"; and the coat that Charles of Orleans once wore, on the sleeves of which were embroidered the verses of a song beginning "_Madame, je suis tout joyeux_," the musical accompaniment of the words being wrought in gold thread, and each note, of square shape in those days, formed with four pearls. He read of the room that was prepared at the palace at Rheims for the use of Queen Joan of Burgundy and was decorated with "thirteen hundred and twenty-one parrots, made in broidery, and blazoned with the king's arms, and five hundred and sixty-one butterflies, whose wings were similarly ornamented with the arms of the queen, the whole worked in gold." Catherine de Medicis had a mourning-bed made for her of black velvet powdered with crescents and suns. Its curtains were of damask, with leafy wreaths and garlands, figured upon a gold and silver ground, and fringed along the edges with broideries of pearls, and it stood in a room hung with rows of the queen's devices in cut black velvet upon cloth of silver. Louis XIV had gold embroidered caryatides fifteen feet high in his apartment. The state bed of Sobieski, King of Poland, was made of Smyrna gold brocade embroidered in turquoises with verses from the Koran. Its supports were of silver gilt, beautifully chased, and profusely set with enamelled and jewelled medallions. It had been taken from the Turkish camp before Vienna, and the standard of Mohammed had stood beneath the tremulous gilt of its canopy. And so, for a whole year, he sought to accumulate the most exquisite specimens that he could find of textile and embroidered work, getting the dainty Delhi muslins, finely wrought with gold-thread palmates and stitched over with iridescent beetles' wings; the Dacca gauzes, that from their transparency are known in the East as "woven air," and "running water," and "evening dew"; strange figured cloths from Java; elaborate yellow Chinese hangings; books bound in tawny satins or fair blue silks and wrought with _fleurs-de-lis_, birds and images; veils of _lacis_ worked in Hungary point; Sicilian brocades and stiff Spanish velvets; Georgian work, with its gilt coins, and Japanese _Foukousas_, with their green-toned golds and their marvellously plumaged birds. He had a special passion, also, for ecclesiastical vestments, as indeed he had for everything connected with the service of the Church. In the long cedar chests that lined the west gallery of his house, he had stored away many rare and beautiful specimens of what is really the raiment of the Bride of Christ, who must wear purple and jewels and fine linen that she may hide the pallid macerated body that is worn by the suffering that she seeks for and wounded by self-inflicted pain. He possessed a gorgeous cope of crimson silk and gold-thread damask, figured with a repeating pattern of golden pomegranates set in six-petalled formal blossoms, beyond which on either side was the pine-apple device wrought in seed-pearls. The orphreys were divided into panels representing scenes from the life of the Virgin, and the coronation of the Virgin was figured in coloured silks upon the hood. This was Italian work of the fifteenth century. Another cope was of green velvet, embroidered with heart-shaped groups of acanthus-leaves, from which spread long-stemmed white blossoms, the details of which were picked out with silver thread and coloured crystals. The morse bore a seraph's head in gold-thread raised work. The orphreys were woven in a diaper of red and gold silk, and were starred with medallions of many saints and martyrs, among whom was St. Sebastian. He had chasubles, also, of amber-coloured silk, and blue silk and gold brocade, and yellow silk damask and cloth of gold, figured with representations of the Passion and Crucifixion of Christ, and embroidered with lions and peacocks and other emblems; dalmatics of white satin and pink silk damask, decorated with tulips and dolphins and _fleurs-de-lis_; altar frontals of crimson velvet and blue linen; and many corporals, chalice-veils, and sudaria. In the mystic offices to which such things were put, there was something that quickened his imagination. For these treasures, and everything that he collected in his lovely house, were to be to him means of forgetfulness, modes by which he could escape, for a season, from the fear that seemed to him at times to be almost too great to be borne. Upon the walls of the lonely locked room where he had spent so much of his boyhood, he had hung with his own hands the terrible portrait whose changing features showed him the real degradation of his life, and in front of it had draped the purple-and-gold pall as a curtain. For weeks he would not go there, would forget the hideous painted thing, and get back his light heart, his wonderful joyousness, his passionate absorption in mere existence. Then, suddenly, some night he would creep out of the house, go down to dreadful places near Blue Gate Fields, and stay there, day after day, until he was driven away. On his return he would sit in front of the picture, sometimes loathing it and himself, but filled, at other times, with that pride of individualism that is half the fascination of sin, and smiling with secret pleasure at the misshapen shadow that had to bear the burden that should have been his own. After a few years he could not endure to be long out of England, and gave up the villa that he had shared at Trouville with Lord Henry, as well as the little white walled-in house at Algiers where they had more than once spent the winter. He hated to be separated from the picture that was such a part of his life, and was also afraid that during his absence some one might gain access to the room, in spite of the elaborate bars that he had caused to be placed upon the door. He was quite conscious that this would tell them nothing. It was true that the portrait still preserved, under all the foulness and ugliness of the face, its marked likeness to himself; but what could they learn from that? He would laugh at any one who tried to taunt him. He had not painted it. What was it to him how vile and full of shame it looked? Even if he told them, would they believe it? Yet he was afraid. Sometimes when he was down at his great house in Nottinghamshire, entertaining the fashionable young men of his own rank who were his chief companions, and astounding the county by the wanton luxury and gorgeous splendour of his mode of life, he would suddenly leave his guests and rush back to town to see that the door had not been tampered with and that the picture was still there. What if it should be stolen? The mere thought made him cold with horror. Surely the world would know his secret then. Perhaps the world already suspected it. For, while he fascinated many, there were not a few who distrusted him. He was very nearly blackballed at a West End club of which his birth and social position fully entitled him to become a member, and it was said that on one occasion, when he was brought by a friend into the smoking-room of the Churchill, the Duke of Berwick and another gentleman got up in a marked manner and went out. Curious stories became current about him after he had passed his twenty-fifth year. It was rumoured that he had been seen brawling with foreign sailors in a low den in the distant parts of Whitechapel, and that he consorted with thieves and coiners and knew the mysteries of their trade. His extraordinary absences became notorious, and, when he used to reappear again in society, men would whisper to each other in corners, or pass him with a sneer, or look at him with cold searching eyes, as though they were determined to discover his secret. Of such insolences and attempted slights he, of course, took no notice, and in the opinion of most people his frank debonair manner, his charming boyish smile, and the infinite grace of that wonderful youth that seemed never to leave him, were in themselves a sufficient answer to the calumnies, for so they termed them, that were circulated about him. It was remarked, however, that some of those who had been most intimate with him appeared, after a time, to shun him. Women who had wildly adored him, and for his sake had braved all social censure and set convention at defiance, were seen to grow pallid with shame or horror if Dorian Gray entered the room. Yet these whispered scandals only increased in the eyes of many his strange and dangerous charm. His great wealth was a certain element of security. Society--civilized society, at least--is never very ready to believe anything to the detriment of those who are both rich and fascinating. It feels instinctively that manners are of more importance than morals, and, in its opinion, the highest respectability is of much less value than the possession of a good _chef_. And, after all, it is a very poor consolation to be told that the man who has given one a bad dinner, or poor wine, is irreproachable in his private life. Even the cardinal virtues cannot atone for half-cold _entrees_, as Lord Henry remarked once, in a discussion on the subject, and there is possibly a good deal to be said for his view. For the canons of good society are, or should be, the same as the canons of art. Form is absolutely essential to it. It should have the dignity of a ceremony, as well as its unreality, and should combine the insincere character of a romantic play with the wit and beauty that make such plays delightful to us. Is insincerity such a terrible thing? I think not. It is merely a method by which we can multiply our personalities. Such, at any rate, was Dorian Gray's opinion. He used to wonder at the shallow psychology of those who conceive the ego in man as a thing simple, permanent, reliable, and of one essence. To him, man was a being with myriad lives and myriad sensations, a complex multiform creature that bore within itself strange legacies of thought and passion, and whose very flesh was tainted with the monstrous maladies of the dead. He loved to stroll through the gaunt cold picture-gallery of his country house and look at the various portraits of those whose blood flowed in his veins. Here was Philip Herbert, described by Francis Osborne, in his Memoires on the Reigns of Queen Elizabeth and King James, as one who was "caressed by the Court for his handsome face, which kept him not long company." Was it young Herbert's life that he sometimes led? Had some strange poisonous germ crept from body to body till it had reached his own? Was it some dim sense of that ruined grace that had made him so suddenly, and almost without cause, give utterance, in Basil Hallward's studio, to the mad prayer that had so changed his life? Here, in gold-embroidered red doublet, jewelled surcoat, and gilt-edged ruff and wristbands, stood Sir Anthony Sherard, with his silver-and-black armour piled at his feet. What had this man's legacy been? Had the lover of Giovanna of Naples bequeathed him some inheritance of sin and shame? Were his own actions merely the dreams that the dead man had not dared to realize? Here, from the fading canvas, smiled Lady Elizabeth Devereux, in her gauze hood, pearl stomacher, and pink slashed sleeves. A flower was in her right hand, and her left clasped an enamelled collar of white and damask roses. On a table by her side lay a mandolin and an apple. There were large green rosettes upon her little pointed shoes. He knew her life, and the strange stories that were told about her lovers. Had he something of her temperament in him? These oval, heavy-lidded eyes seemed to look curiously at him. What of George Willoughby, with his powdered hair and fantastic patches? How evil he looked! The face was saturnine and swarthy, and the sensual lips seemed to be twisted with disdain. Delicate lace ruffles fell over the lean yellow hands that were so overladen with rings. He had been a macaroni of the eighteenth century, and the friend, in his youth, of Lord Ferrars. What of the second Lord Beckenham, the companion of the Prince Regent in his wildest days, and one of the witnesses at the secret marriage with Mrs. Fitzherbert? How proud and handsome he was, with his chestnut curls and insolent pose! What passions had he bequeathed? The world had looked upon him as infamous. He had led the orgies at Carlton House. The star of the Garter glittered upon his breast. Beside him hung the portrait of his wife, a pallid, thin-lipped woman in black. Her blood, also, stirred within him. How curious it all seemed! And his mother with her Lady Hamilton face and her moist, wine-dashed lips--he knew what he had got from her. He had got from her his beauty, and his passion for the beauty of others. She laughed at him in her loose Bacchante dress. There were vine leaves in her hair. The purple spilled from the cup she was holding. The carnations of the painting had withered, but the eyes were still wonderful in their depth and brilliancy of colour. They seemed to follow him wherever he went. Yet one had ancestors in literature as well as in one's own race, nearer perhaps in type and temperament, many of them, and certainly with an influence of which one was more absolutely conscious. There were times when it appeared to Dorian Gray that the whole of history was merely the record of his own life, not as he had lived it in act and circumstance, but as his imagination had created it for him, as it had been in his brain and in his passions. He felt that he had known them all, those strange terrible figures that had passed across the stage of the world and made sin so marvellous and evil so full of subtlety. It seemed to him that in some mysterious way their lives had been his own. The hero of the wonderful novel that had so influenced his life had himself known this curious fancy. In the seventh chapter he tells how, crowned with laurel, lest lightning might strike him, he had sat, as Tiberius, in a garden at Capri, reading the shameful books of Elephantis, while dwarfs and peacocks strutted round him and the flute-player mocked the swinger of the censer; and, as Caligula, had caroused with the green-shirted jockeys in their stables and supped in an ivory manger with a jewel-frontleted horse; and, as Domitian, had wandered through a corridor lined with marble mirrors, looking round with haggard eyes for the reflection of the dagger that was to end his days, and sick with that ennui, that terrible _taedium vitae_, that comes on those to whom life denies nothing; and had peered through a clear emerald at the red shambles of the circus and then, in a litter of pearl and purple drawn by silver-shod mules, been carried through the Street of Pomegranates to a House of Gold and heard men cry on Nero Caesar as he passed by; and, as Elagabalus, had painted his face with colours, and plied the distaff among the women, and brought the Moon from Carthage and given her in mystic marriage to the Sun. Over and over again Dorian used to read this fantastic chapter, and the two chapters immediately following, in which, as in some curious tapestries or cunningly wrought enamels, were pictured the awful and beautiful forms of those whom vice and blood and weariness had made monstrous or mad: Filippo, Duke of Milan, who slew his wife and painted her lips with a scarlet poison that her lover might suck death from the dead thing he fondled; Pietro Barbi, the Venetian, known as Paul the Second, who sought in his vanity to assume the title of Formosus, and whose tiara, valued at two hundred thousand florins, was bought at the price of a terrible sin; Gian Maria Visconti, who used hounds to chase living men and whose murdered body was covered with roses by a harlot who had loved him; the Borgia on his white horse, with Fratricide riding beside him and his mantle stained with the blood of Perotto; Pietro Riario, the young Cardinal Archbishop of Florence, child and minion of Sixtus IV, whose beauty was equalled only by his debauchery, and who received Leonora of Aragon in a pavilion of white and crimson silk, filled with nymphs and centaurs, and gilded a boy that he might serve at the feast as Ganymede or Hylas; Ezzelin, whose melancholy could be cured only by the spectacle of death, and who had a passion for red blood, as other men have for red wine--the son of the Fiend, as was reported, and one who had cheated his father at dice when gambling with him for his own soul; Giambattista Cibo, who in mockery took the name of Innocent and into whose torpid veins the blood of three lads was infused by a Jewish doctor; Sigismondo Malatesta, the lover of Isotta and the lord of Rimini, whose effigy was burned at Rome as the enemy of God and man, who strangled Polyssena with a napkin, and gave poison to Ginevra d'Este in a cup of emerald, and in honour of a shameful passion built a pagan church for Christian worship; Charles VI, who had so wildly adored his brother's wife that a leper had warned him of the insanity that was coming on him, and who, when his brain had sickened and grown strange, could only be soothed by Saracen cards painted with the images of love and death and madness; and, in his trimmed jerkin and jewelled cap and acanthuslike curls, Grifonetto Baglioni, who slew Astorre with his bride, and Simonetto with his page, and whose comeliness was such that, as he lay dying in the yellow piazza of Perugia, those who had hated him could not choose but weep, and Atalanta, who had cursed him, blessed him. There was a horrible fascination in them all. He saw them at night, and they troubled his imagination in the day. The Renaissance knew of strange manners of poisoning--poisoning by a helmet and a lighted torch, by an embroidered glove and a jewelled fan, by a gilded pomander and by an amber chain. Dorian Gray had been poisoned by a book. There were moments when he looked on evil simply as a mode through which he could realize his conception of the beautiful. CHAPTER 12 It was on the ninth of November, the eve of his own thirty-eighth birthday, as he often remembered afterwards. He was walking home about eleven o'clock from Lord Henry's, where he had been dining, and was wrapped in heavy furs, as the night was cold and foggy. At the corner of Grosvenor Square and South Audley Street, a man passed him in the mist, walking very fast and with the collar of his grey ulster turned up. He had a bag in his hand. Dorian recognized him. It was Basil Hallward. A strange sense of fear, for which he could not account, came over him. He made no sign of recognition and went on quickly in the direction of his own house. But Hallward had seen him. Dorian heard him first stopping on the pavement and then hurrying after him. In a few moments, his hand was on his arm. "Dorian! What an extraordinary piece of luck! I have been waiting for you in your library ever since nine o'clock. Finally I took pity on your tired servant and told him to go to bed, as he let me out. I am off to Paris by the midnight train, and I particularly wanted to see you before I left. I thought it was you, or rather your fur coat, as you passed me. But I wasn't quite sure. Didn't you recognize me?" "In this fog, my dear Basil? Why, I can't even recognize Grosvenor Square. I believe my house is somewhere about here, but I don't feel at all certain about it. I am sorry you are going away, as I have not seen you for ages. But I suppose you will be back soon?" "No: I am going to be out of England for six months. I intend to take a studio in Paris and shut myself up till I have finished a great picture I have in my head. However, it wasn't about myself I wanted to talk. Here we are at your door. Let me come in for a moment. I have something to say to you." "I shall be charmed. But won't you miss your train?" said Dorian Gray languidly as he passed up the steps and opened the door with his latch-key. The lamplight struggled out through the fog, and Hallward looked at his watch. "I have heaps of time," he answered. "The train doesn't go till twelve-fifteen, and it is only just eleven. In fact, I was on my way to the club to look for you, when I met you. You see, I shan't have any delay about luggage, as I have sent on my heavy things. All I have with me is in this bag, and I can easily get to Victoria in twenty minutes." Dorian looked at him and smiled. "What a way for a fashionable painter to travel! A Gladstone bag and an ulster! Come in, or the fog will get into the house. And mind you don't talk about anything serious. Nothing is serious nowadays. At least nothing should be." Hallward shook his head, as he entered, and followed Dorian into the library. There was a bright wood fire blazing in the large open hearth. The lamps were lit, and an open Dutch silver spirit-case stood, with some siphons of soda-water and large cut-glass tumblers, on a little marqueterie table. "You see your servant made me quite at home, Dorian. He gave me everything I wanted, including your best gold-tipped cigarettes. He is a most hospitable creature. I like him much better than the Frenchman you used to have. What has become of the Frenchman, by the bye?" Dorian shrugged his shoulders. "I believe he married Lady Radley's maid, and has established her in Paris as an English dressmaker. Anglomania is very fashionable over there now, I hear. It seems silly of the French, doesn't it? But--do you know?--he was not at all a bad servant. I never liked him, but I had nothing to complain about. One often imagines things that are quite absurd. He was really very devoted to me and seemed quite sorry when he went away. Have another brandy-and-soda? Or would you like hock-and-seltzer? I always take hock-and-seltzer myself. There is sure to be some in the next room." "Thanks, I won't have anything more," said the painter, taking his cap and coat off and throwing them on the bag that he had placed in the corner. "And now, my dear fellow, I want to speak to you seriously. Don't frown like that. You make it so much more difficult for me." "What is it all about?" cried Dorian in his petulant way, flinging himself down on the sofa. "I hope it is not about myself. I am tired of myself to-night. I should like to be somebody else." "It is about yourself," answered Hallward in his grave deep voice, "and I must say it to you. I shall only keep you half an hour." Dorian sighed and lit a cigarette. "Half an hour!" he murmured. "It is not much to ask of you, Dorian, and it is entirely for your own sake that I am speaking. I think it right that you should know that the most dreadful things are being said against you in London." "I don't wish to know anything about them. I love scandals about other people, but scandals about myself don't interest me. They have not got the charm of novelty." "They must interest you, Dorian. Every gentleman is interested in his good name. You don't want people to talk of you as something vile and degraded. Of course, you have your position, and your wealth, and all that kind of thing. But position and wealth are not everything. Mind you, I don't believe these rumours at all. At least, I can't believe them when I see you. Sin is a thing that writes itself across a man's face. It cannot be concealed. People talk sometimes of secret vices. There are no such things. If a wretched man has a vice, it shows itself in the lines of his mouth, the droop of his eyelids, the moulding of his hands even. Somebody--I won't mention his name, but you know him--came to me last year to have his portrait done. I had never seen him before, and had never heard anything about him at the time, though I have heard a good deal since. He offered an extravagant price. I refused him. There was something in the shape of his fingers that I hated. I know now that I was quite right in what I fancied about him. His life is dreadful. But you, Dorian, with your pure, bright, innocent face, and your marvellous untroubled youth--I can't believe anything against you. And yet I see you very seldom, and you never come down to the studio now, and when I am away from you, and I hear all these hideous things that people are whispering about you, I don't know what to say. Why is it, Dorian, that a man like the Duke of Berwick leaves the room of a club when you enter it? Why is it that so many gentlemen in London will neither go to your house or invite you to theirs? You used to be a friend of Lord Staveley. I met him at dinner last week. Your name happened to come up in conversation, in connection with the miniatures you have lent to the exhibition at the Dudley. Staveley curled his lip and said that you might have the most artistic tastes, but that you were a man whom no pure-minded girl should be allowed to know, and whom no chaste woman should sit in the same room with. I reminded him that I was a friend of yours, and asked him what he meant. He told me. He told me right out before everybody. It was horrible! Why is your friendship so fatal to young men? There was that wretched boy in the Guards who committed suicide. You were his great friend. There was Sir Henry Ashton, who had to leave England with a tarnished name. You and he were inseparable. What about Adrian Singleton and his dreadful end? What about Lord Kent's only son and his career? I met his father yesterday in St. James's Street. He seemed broken with shame and sorrow. What about the young Duke of Perth? What sort of life has he got now? What gentleman would associate with him?" "Stop, Basil. You are talking about things of which you know nothing," said Dorian Gray, biting his lip, and with a note of infinite contempt in his voice. "You ask me why Berwick leaves a room when I enter it. It is because I know everything about his life, not because he knows anything about mine. With such blood as he has in his veins, how could his record be clean? You ask me about Henry Ashton and young Perth. Did I teach the one his vices, and the other his debauchery? If Kent's silly son takes his wife from the streets, what is that to me? If Adrian Singleton writes his friend's name across a bill, am I his keeper? I know how people chatter in England. The middle classes air their moral prejudices over their gross dinner-tables, and whisper about what they call the profligacies of their betters in order to try and pretend that they are in smart society and on intimate terms with the people they slander. In this country, it is enough for a man to have distinction and brains for every common tongue to wag against him. And what sort of lives do these people, who pose as being moral, lead themselves? My dear fellow, you forget that we are in the native land of the hypocrite." "Dorian," cried Hallward, "that is not the question. England is bad enough I know, and English society is all wrong. That is the reason why I want you to be fine. You have not been fine. One has a right to judge of a man by the effect he has over his friends. Yours seem to lose all sense of honour, of goodness, of purity. You have filled them with a madness for pleasure. They have gone down into the depths. You led them there. Yes: you led them there, and yet you can smile, as you are smiling now. And there is worse behind. I know you and Harry are inseparable. Surely for that reason, if for none other, you should not have made his sister's name a by-word." "Take care, Basil. You go too far." "I must speak, and you must listen. You shall listen. When you met Lady Gwendolen, not a breath of scandal had ever touched her. Is there a single decent woman in London now who would drive with her in the park? Why, even her children are not allowed to live with her. Then there are other stories--stories that you have been seen creeping at dawn out of dreadful houses and slinking in disguise into the foulest dens in London. Are they true? Can they be true? When I first heard them, I laughed. I hear them now, and they make me shudder. What about your country-house and the life that is led there? Dorian, you don't know what is said about you. I won't tell you that I don't want to preach to you. I remember Harry saying once that every man who turned himself into an amateur curate for the moment always began by saying that, and then proceeded to break his word. I do want to preach to you. I want you to lead such a life as will make the world respect you. I want you to have a clean name and a fair record. I want you to get rid of the dreadful people you associate with. Don't shrug your shoulders like that. Don't be so indifferent. You have a wonderful influence. Let it be for good, not for evil. They say that you corrupt every one with whom you become intimate, and that it is quite sufficient for you to enter a house for shame of some kind to follow after. I don't know whether it is so or not. How should I know? But it is said of you. I am told things that it seems impossible to doubt. Lord Gloucester was one of my greatest friends at Oxford. He showed me a letter that his wife had written to him when she was dying alone in her villa at Mentone. Your name was implicated in the most terrible confession I ever read. I told him that it was absurd--that I knew you thoroughly and that you were incapable of anything of the kind. Know you? I wonder do I know you? Before I could answer that, I should have to see your soul." "To see my soul!" muttered Dorian Gray, starting up from the sofa and turning almost white from fear. "Yes," answered Hallward gravely, and with deep-toned sorrow in his voice, "to see your soul. But only God can do that." A bitter laugh of mockery broke from the lips of the younger man. "You shall see it yourself, to-night!" he cried, seizing a lamp from the table. "Come: it is your own handiwork. Why shouldn't you look at it? You can tell the world all about it afterwards, if you choose. Nobody would believe you. If they did believe you, they would like me all the better for it. I know the age better than you do, though you will prate about it so tediously. Come, I tell you. You have chattered enough about corruption. Now you shall look on it face to face." There was the madness of pride in every word he uttered. He stamped his foot upon the ground in his boyish insolent manner. He felt a terrible joy at the thought that some one else was to share his secret, and that the man who had painted the portrait that was the origin of all his shame was to be burdened for the rest of his life with the hideous memory of what he had done. "Yes," he continued, coming closer to him and looking steadfastly into his stern eyes, "I shall show you my soul. You shall see the thing that you fancy only God can see." Hallward started back. "This is blasphemy, Dorian!" he cried. "You must not say things like that. They are horrible, and they don't mean anything." "You think so?" He laughed again. "I know so. As for what I said to you to-night, I said it for your good. You know I have been always a stanch friend to you." "Don't touch me. Finish what you have to say." A twisted flash of pain shot across the painter's face. He paused for a moment, and a wild feeling of pity came over him. After all, what right had he to pry into the life of Dorian Gray? If he had done a tithe of what was rumoured about him, how much he must have suffered! Then he straightened himself up, and walked over to the fire-place, and stood there, looking at the burning logs with their frostlike ashes and their throbbing cores of flame. "I am waiting, Basil," said the young man in a hard clear voice. He turned round. "What I have to say is this," he cried. "You must give me some answer to these horrible charges that are made against you. If you tell me that they are absolutely untrue from beginning to end, I shall believe you. Deny them, Dorian, deny them! Can't you see what I am going through? My God! don't tell me that you are bad, and corrupt, and shameful." Dorian Gray smiled. There was a curl of contempt in his lips. "Come upstairs, Basil," he said quietly. "I keep a diary of my life from day to day, and it never leaves the room in which it is written. I shall show it to you if you come with me." "I shall come with you, Dorian, if you wish it. I see I have missed my train. That makes no matter. I can go to-morrow. But don't ask me to read anything to-night. All I want is a plain answer to my question." "That shall be given to you upstairs. I could not give it here. You will not have to read long." CHAPTER 13 He passed out of the room and began the ascent, Basil Hallward following close behind. They walked softly, as men do instinctively at night. The lamp cast fantastic shadows on the wall and staircase. A rising wind made some of the windows rattle. When they reached the top landing, Dorian set the lamp down on the floor, and taking out the key, turned it in the lock. "You insist on knowing, Basil?" he asked in a low voice. "Yes." "I am delighted," he answered, smiling. Then he added, somewhat harshly, "You are the one man in the world who is entitled to know everything about me. You have had more to do with my life than you think"; and, taking up the lamp, he opened the door and went in. A cold current of air passed them, and the light shot up for a moment in a flame of murky orange. He shuddered. "Shut the door behind you," he whispered, as he placed the lamp on the table. Hallward glanced round him with a puzzled expression. The room looked as if it had not been lived in for years. A faded Flemish tapestry, a curtained picture, an old Italian _cassone_, and an almost empty book-case--that was all that it seemed to contain, besides a chair and a table. As Dorian Gray was lighting a half-burned candle that was standing on the mantelshelf, he saw that the whole place was covered with dust and that the carpet was in holes. A mouse ran scuffling behind the wainscoting. There was a damp odour of mildew. "So you think that it is only God who sees the soul, Basil? Draw that curtain back, and you will see mine." The voice that spoke was cold and cruel. "You are mad, Dorian, or playing a part," muttered Hallward, frowning. "You won't? Then I must do it myself," said the young man, and he tore the curtain from its rod and flung it on the ground. An exclamation of horror broke from the painter's lips as he saw in the dim light the hideous face on the canvas grinning at him. There was something in its expression that filled him with disgust and loathing. Good heavens! it was Dorian Gray's own face that he was looking at! The horror, whatever it was, had not yet entirely spoiled that marvellous beauty. There was still some gold in the thinning hair and some scarlet on the sensual mouth. The sodden eyes had kept something of the loveliness of their blue, the noble curves had not yet completely passed away from chiselled nostrils and from plastic throat. Yes, it was Dorian himself. But who had done it? He seemed to recognize his own brushwork, and the frame was his own design. The idea was monstrous, yet he felt afraid. He seized the lighted candle, and held it to the picture. In the left-hand corner was his own name, traced in long letters of bright vermilion. It was some foul parody, some infamous ignoble satire. He had never done that. Still, it was his own picture. He knew it, and he felt as if his blood had changed in a moment from fire to sluggish ice. His own picture! What did it mean? Why had it altered? He turned and looked at Dorian Gray with the eyes of a sick man. His mouth twitched, and his parched tongue seemed unable to articulate. He passed his hand across his forehead. It was dank with clammy sweat. The young man was leaning against the mantelshelf, watching him with that strange expression that one sees on the faces of those who are absorbed in a play when some great artist is acting. There was neither real sorrow in it nor real joy. There was simply the passion of the spectator, with perhaps a flicker of triumph in his eyes. He had taken the flower out of his coat, and was smelling it, or pretending to do so. "What does this mean?" cried Hallward, at last. His own voice sounded shrill and curious in his ears. "Years ago, when I was a boy," said Dorian Gray, crushing the flower in his hand, "you met me, flattered me, and taught me to be vain of my good looks. One day you introduced me to a friend of yours, who explained to me the wonder of youth, and you finished a portrait of me that revealed to me the wonder of beauty. In a mad moment that, even now, I don't know whether I regret or not, I made a wish, perhaps you would call it a prayer...." "I remember it! Oh, how well I remember it! No! the thing is impossible. The room is damp. Mildew has got into the canvas. The paints I used had some wretched mineral poison in them. I tell you the thing is impossible." "Ah, what is impossible?" murmured the young man, going over to the window and leaning his forehead against the cold, mist-stained glass. "You told me you had destroyed it." "I was wrong. It has destroyed me." "I don't believe it is my picture." "Can't you see your ideal in it?" said Dorian bitterly. "My ideal, as you call it..." "As you called it." "There was nothing evil in it, nothing shameful. You were to me such an ideal as I shall never meet again. This is the face of a satyr." "It is the face of my soul." "Christ! what a thing I must have worshipped! It has the eyes of a devil." "Each of us has heaven and hell in him, Basil," cried Dorian with a wild gesture of despair. Hallward turned again to the portrait and gazed at it. "My God! If it is true," he exclaimed, "and this is what you have done with your life, why, you must be worse even than those who talk against you fancy you to be!" He held the light up again to the canvas and examined it. The surface seemed to be quite undisturbed and as he had left it. It was from within, apparently, that the foulness and horror had come. Through some strange quickening of inner life the leprosies of sin were slowly eating the thing away. The rotting of a corpse in a watery grave was not so fearful. His hand shook, and the candle fell from its socket on the floor and lay there sputtering. He placed his foot on it and put it out. Then he flung himself into the rickety chair that was standing by the table and buried his face in his hands. "Good God, Dorian, what a lesson! What an awful lesson!" There was no answer, but he could hear the young man sobbing at the window. "Pray, Dorian, pray," he murmured. "What is it that one was taught to say in one's boyhood? 'Lead us not into temptation. Forgive us our sins. Wash away our iniquities.' Let us say that together. The prayer of your pride has been answered. The prayer of your repentance will be answered also. I worshipped you too much. I am punished for it. You worshipped yourself too much. We are both punished." Dorian Gray turned slowly around and looked at him with tear-dimmed eyes. "It is too late, Basil," he faltered. "It is never too late, Dorian. Let us kneel down and try if we cannot remember a prayer. Isn't there a verse somewhere, 'Though your sins be as scarlet, yet I will make them as white as snow'?" "Those words mean nothing to me now." "Hush! Don't say that. You have done enough evil in your life. My God! Don't you see that accursed thing leering at us?" Dorian Gray glanced at the picture, and suddenly an uncontrollable feeling of hatred for Basil Hallward came over him, as though it had been suggested to him by the image on the canvas, whispered into his ear by those grinning lips. The mad passions of a hunted animal stirred within him, and he loathed the man who was seated at the table, more than in his whole life he had ever loathed anything. He glanced wildly around. Something glimmered on the top of the painted chest that faced him. His eye fell on it. He knew what it was. It was a knife that he had brought up, some days before, to cut a piece of cord, and had forgotten to take away with him. He moved slowly towards it, passing Hallward as he did so. As soon as he got behind him, he seized it and turned round. Hallward stirred in his chair as if he was going to rise. He rushed at him and dug the knife into the great vein that is behind the ear, crushing the man's head down on the table and stabbing again and again. There was a stifled groan and the horrible sound of some one choking with blood. Three times the outstretched arms shot up convulsively, waving grotesque, stiff-fingered hands in the air. He stabbed him twice more, but the man did not move. Something began to trickle on the floor. He waited for a moment, still pressing the head down. Then he threw the knife on the table, and listened. He could hear nothing, but the drip, drip on the threadbare carpet. He opened the door and went out on the landing. The house was absolutely quiet. No one was about. For a few seconds he stood bending over the balustrade and peering down into the black seething well of darkness. Then he took out the key and returned to the room, locking himself in as he did so. The thing was still seated in the chair, straining over the table with bowed head, and humped back, and long fantastic arms. Had it not been for the red jagged tear in the neck and the clotted black pool that was slowly widening on the table, one would have said that the man was simply asleep. How quickly it had all been done! He felt strangely calm, and walking over to the window, opened it and stepped out on the balcony. The wind had blown the fog away, and the sky was like a monstrous peacock's tail, starred with myriads of golden eyes. He looked down and saw the policeman going his rounds and flashing the long beam of his lantern on the doors of the silent houses. The crimson spot of a prowling hansom gleamed at the corner and then vanished. A woman in a fluttering shawl was creeping slowly by the railings, staggering as she went. Now and then she stopped and peered back. Once, she began to sing in a hoarse voice. The policeman strolled over and said something to her. She stumbled away, laughing. A bitter blast swept across the square. The gas-lamps flickered and became blue, and the leafless trees shook their black iron branches to and fro. He shivered and went back, closing the window behind him. Having reached the door, he turned the key and opened it. He did not even glance at the murdered man. He felt that the secret of the whole thing was not to realize the situation. The friend who had painted the fatal portrait to which all his misery had been due had gone out of his life. That was enough. Then he remembered the lamp. It was a rather curious one of Moorish workmanship, made of dull silver inlaid with arabesques of burnished steel, and studded with coarse turquoises. Perhaps it might be missed by his servant, and questions would be asked. He hesitated for a moment, then he turned back and took it from the table. He could not help seeing the dead thing. How still it was! How horribly white the long hands looked! It was like a dreadful wax image. Having locked the door behind him, he crept quietly downstairs. The woodwork creaked and seemed to cry out as if in pain. He stopped several times and waited. No: everything was still. It was merely the sound of his own footsteps. When he reached the library, he saw the bag and coat in the corner. They must be hidden away somewhere. He unlocked a secret press that was in the wainscoting, a press in which he kept his own curious disguises, and put them into it. He could easily burn them afterwards. Then he pulled out his watch. It was twenty minutes to two. He sat down and began to think. Every year--every month, almost--men were strangled in England for what he had done. There had been a madness of murder in the air. Some red star had come too close to the earth.... And yet, what evidence was there against him? Basil Hallward had left the house at eleven. No one had seen him come in again. Most of the servants were at Selby Royal. His valet had gone to bed.... Paris! Yes. It was to Paris that Basil had gone, and by the midnight train, as he had intended. With his curious reserved habits, it would be months before any suspicions would be roused. Months! Everything could be destroyed long before then. A sudden thought struck him. He put on his fur coat and hat and went out into the hall. There he paused, hearing the slow heavy tread of the policeman on the pavement outside and seeing the flash of the bull's-eye reflected in the window. He waited and held his breath. After a few moments he drew back the latch and slipped out, shutting the door very gently behind him. Then he began ringing the bell. In about five minutes his valet appeared, half-dressed and looking very drowsy. "I am sorry to have had to wake you up, Francis," he said, stepping in; "but I had forgotten my latch-key. What time is it?" "Ten minutes past two, sir," answered the man, looking at the clock and blinking. "Ten minutes past two? How horribly late! You must wake me at nine to-morrow. I have some work to do." "All right, sir." "Did any one call this evening?" "Mr. Hallward, sir. He stayed here till eleven, and then he went away to catch his train." "Oh! I am sorry I didn't see him. Did he leave any message?" "No, sir, except that he would write to you from Paris, if he did not find you at the club." "That will do, Francis. Don't forget to call me at nine to-morrow." "No, sir." The man shambled down the passage in his slippers. Dorian Gray threw his hat and coat upon the table and passed into the library. For a quarter of an hour he walked up and down the room, biting his lip and thinking. Then he took down the Blue Book from one of the shelves and began to turn over the leaves. "Alan Campbell, 152, Hertford Street, Mayfair." Yes; that was the man he wanted. CHAPTER 14 At nine o'clock the next morning his servant came in with a cup of chocolate on a tray and opened the shutters. Dorian was sleeping quite peacefully, lying on his right side, with one hand underneath his cheek. He looked like a boy who had been tired out with play, or study. The man had to touch him twice on the shoulder before he woke, and as he opened his eyes a faint smile passed across his lips, as though he had been lost in some delightful dream. Yet he had not dreamed at all. His night had been untroubled by any images of pleasure or of pain. But youth smiles without any reason. It is one of its chiefest charms. He turned round, and leaning upon his elbow, began to sip his chocolate. The mellow November sun came streaming into the room. The sky was bright, and there was a genial warmth in the air. It was almost like a morning in May. Gradually the events of the preceding night crept with silent, blood-stained feet into his brain and reconstructed themselves there with terrible distinctness. He winced at the memory of all that he had suffered, and for a moment the same curious feeling of loathing for Basil Hallward that had made him kill him as he sat in the chair came back to him, and he grew cold with passion. The dead man was still sitting there, too, and in the sunlight now. How horrible that was! Such hideous things were for the darkness, not for the day. He felt that if he brooded on what he had gone through he would sicken or grow mad. There were sins whose fascination was more in the memory than in the doing of them, strange triumphs that gratified the pride more than the passions, and gave to the intellect a quickened sense of joy, greater than any joy they brought, or could ever bring, to the senses. But this was not one of them. It was a thing to be driven out of the mind, to be drugged with poppies, to be strangled lest it might strangle one itself. When the half-hour struck, he passed his hand across his forehead, and then got up hastily and dressed himself with even more than his usual care, giving a good deal of attention to the choice of his necktie and scarf-pin and changing his rings more than once. He spent a long time also over breakfast, tasting the various dishes, talking to his valet about some new liveries that he was thinking of getting made for the servants at Selby, and going through his correspondence. At some of the letters, he smiled. Three of them bored him. One he read several times over and then tore up with a slight look of annoyance in his face. "That awful thing, a woman's memory!" as Lord Henry had once said. After he had drunk his cup of black coffee, he wiped his lips slowly with a napkin, motioned to his servant to wait, and going over to the table, sat down and wrote two letters. One he put in his pocket, the other he handed to the valet. "Take this round to 152, Hertford Street, Francis, and if Mr. Campbell is out of town, get his address." As soon as he was alone, he lit a cigarette and began sketching upon a piece of paper, drawing first flowers and bits of architecture, and then human faces. Suddenly he remarked that every face that he drew seemed to have a fantastic likeness to Basil Hallward. He frowned, and getting up, went over to the book-case and took out a volume at hazard. He was determined that he would not think about what had happened until it became absolutely necessary that he should do so. When he had stretched himself on the sofa, he looked at the title-page of the book. It was Gautier's Emaux et Camees, Charpentier's Japanese-paper edition, with the Jacquemart etching. The binding was of citron-green leather, with a design of gilt trellis-work and dotted pomegranates. It had been given to him by Adrian Singleton. As he turned over the pages, his eye fell on the poem about the hand of Lacenaire, the cold yellow hand "_du supplice encore mal lavee_," with its downy red hairs and its "_doigts de faune_." He glanced at his own white taper fingers, shuddering slightly in spite of himself, and passed on, till he came to those lovely stanzas upon Venice: Sur une gamme chromatique, Le sein de perles ruisselant, La Venus de l'Adriatique Sort de l'eau son corps rose et blanc. Les domes, sur l'azur des ondes Suivant la phrase au pur contour, S'enflent comme des gorges rondes Que souleve un soupir d'amour. L'esquif aborde et me depose, Jetant son amarre au pilier, Devant une facade rose, Sur le marbre d'un escalier. How exquisite they were! As one read them, one seemed to be floating down the green water-ways of the pink and pearl city, seated in a black gondola with silver prow and trailing curtains. The mere lines looked to him like those straight lines of turquoise-blue that follow one as one pushes out to the Lido. The sudden flashes of colour reminded him of the gleam of the opal-and-iris-throated birds that flutter round the tall honeycombed Campanile, or stalk, with such stately grace, through the dim, dust-stained arcades. Leaning back with half-closed eyes, he kept saying over and over to himself: "Devant une facade rose, Sur le marbre d'un escalier." The whole of Venice was in those two lines. He remembered the autumn that he had passed there, and a wonderful love that had stirred him to mad delightful follies. There was romance in every place. But Venice, like Oxford, had kept the background for romance, and, to the true romantic, background was everything, or almost everything. Basil had been with him part of the time, and had gone wild over Tintoret. Poor Basil! What a horrible way for a man to die! He sighed, and took up the volume again, and tried to forget. He read of the swallows that fly in and out of the little _cafe_ at Smyrna where the Hadjis sit counting their amber beads and the turbaned merchants smoke their long tasselled pipes and talk gravely to each other; he read of the Obelisk in the Place de la Concorde that weeps tears of granite in its lonely sunless exile and longs to be back by the hot, lotus-covered Nile, where there are Sphinxes, and rose-red ibises, and white vultures with gilded claws, and crocodiles with small beryl eyes that crawl over the green steaming mud; he began to brood over those verses which, drawing music from kiss-stained marble, tell of that curious statue that Gautier compares to a contralto voice, the "_monstre charmant_" that couches in the porphyry-room of the Louvre. But after a time the book fell from his hand. He grew nervous, and a horrible fit of terror came over him. What if Alan Campbell should be out of England? Days would elapse before he could come back. Perhaps he might refuse to come. What could he do then? Every moment was of vital importance. They had been great friends once, five years before--almost inseparable, indeed. Then the intimacy had come suddenly to an end. When they met in society now, it was only Dorian Gray who smiled: Alan Campbell never did. He was an extremely clever young man, though he had no real appreciation of the visible arts, and whatever little sense of the beauty of poetry he possessed he had gained entirely from Dorian. His dominant intellectual passion was for science. At Cambridge he had spent a great deal of his time working in the laboratory, and had taken a good class in the Natural Science Tripos of his year. Indeed, he was still devoted to the study of chemistry, and had a laboratory of his own in which he used to shut himself up all day long, greatly to the annoyance of his mother, who had set her heart on his standing for Parliament and had a vague idea that a chemist was a person who made up prescriptions. He was an excellent musician, however, as well, and played both the violin and the piano better than most amateurs. In fact, it was music that had first brought him and Dorian Gray together--music and that indefinable attraction that Dorian seemed to be able to exercise whenever he wished--and, indeed, exercised often without being conscious of it. They had met at Lady Berkshire's the night that Rubinstein played there, and after that used to be always seen together at the opera and wherever good music was going on. For eighteen months their intimacy lasted. Campbell was always either at Selby Royal or in Grosvenor Square. To him, as to many others, Dorian Gray was the type of everything that is wonderful and fascinating in life. Whether or not a quarrel had taken place between them no one ever knew. But suddenly people remarked that they scarcely spoke when they met and that Campbell seemed always to go away early from any party at which Dorian Gray was present. He had changed, too--was strangely melancholy at times, appeared almost to dislike hearing music, and would never himself play, giving as his excuse, when he was called upon, that he was so absorbed in science that he had no time left in which to practise. And this was certainly true. Every day he seemed to become more interested in biology, and his name appeared once or twice in some of the scientific reviews in connection with certain curious experiments. This was the man Dorian Gray was waiting for. Every second he kept glancing at the clock. As the minutes went by he became horribly agitated. At last he got up and began to pace up and down the room, looking like a beautiful caged thing. He took long stealthy strides. His hands were curiously cold. The suspense became unbearable. Time seemed to him to be crawling with feet of lead, while he by monstrous winds was being swept towards the jagged edge of some black cleft of precipice. He knew what was waiting for him there; saw it, indeed, and, shuddering, crushed with dank hands his burning lids as though he would have robbed the very brain of sight and driven the eyeballs back into their cave. It was useless. The brain had its own food on which it battened, and the imagination, made grotesque by terror, twisted and distorted as a living thing by pain, danced like some foul puppet on a stand and grinned through moving masks. Then, suddenly, time stopped for him. Yes: that blind, slow-breathing thing crawled no more, and horrible thoughts, time being dead, raced nimbly on in front, and dragged a hideous future from its grave, and showed it to him. He stared at it. Its very horror made him stone. At last the door opened and his servant entered. He turned glazed eyes upon him. "Mr. Campbell, sir," said the man. A sigh of relief broke from his parched lips, and the colour came back to his cheeks. "Ask him to come in at once, Francis." He felt that he was himself again. His mood of cowardice had passed away. The man bowed and retired. In a few moments, Alan Campbell walked in, looking very stern and rather pale, his pallor being intensified by his coal-black hair and dark eyebrows. "Alan! This is kind of you. I thank you for coming." "I had intended never to enter your house again, Gray. But you said it was a matter of life and death." His voice was hard and cold. He spoke with slow deliberation. There was a look of contempt in the steady searching gaze that he turned on Dorian. He kept his hands in the pockets of his Astrakhan coat, and seemed not to have noticed the gesture with which he had been greeted. "Yes: it is a matter of life and death, Alan, and to more than one person. Sit down." Campbell took a chair by the table, and Dorian sat opposite to him. The two men's eyes met. In Dorian's there was infinite pity. He knew that what he was going to do was dreadful. After a strained moment of silence, he leaned across and said, very quietly, but watching the effect of each word upon the face of him he had sent for, "Alan, in a locked room at the top of this house, a room to which nobody but myself has access, a dead man is seated at a table. He has been dead ten hours now. Don't stir, and don't look at me like that. Who the man is, why he died, how he died, are matters that do not concern you. What you have to do is this--" "Stop, Gray. I don't want to know anything further. Whether what you have told me is true or not true doesn't concern me. I entirely decline to be mixed up in your life. Keep your horrible secrets to yourself. They don't interest me any more." "Alan, they will have to interest you. This one will have to interest you. I am awfully sorry for you, Alan. But I can't help myself. You are the one man who is able to save me. I am forced to bring you into the matter. I have no option. Alan, you are scientific. You know about chemistry and things of that kind. You have made experiments. What you have got to do is to destroy the thing that is upstairs--to destroy it so that not a vestige of it will be left. Nobody saw this person come into the house. Indeed, at the present moment he is supposed to be in Paris. He will not be missed for months. When he is missed, there must be no trace of him found here. You, Alan, you must change him, and everything that belongs to him, into a handful of ashes that I may scatter in the air." "You are mad, Dorian." "Ah! I was waiting for you to call me Dorian." "You are mad, I tell you--mad to imagine that I would raise a finger to help you, mad to make this monstrous confession. I will have nothing to do with this matter, whatever it is. Do you think I am going to peril my reputation for you? What is it to me what devil's work you are up to?" "It was suicide, Alan." "I am glad of that. But who drove him to it? You, I should fancy." "Do you still refuse to do this for me?" "Of course I refuse. I will have absolutely nothing to do with it. I don't care what shame comes on you. You deserve it all. I should not be sorry to see you disgraced, publicly disgraced. How dare you ask me, of all men in the world, to mix myself up in this horror? I should have thought you knew more about people's characters. Your friend Lord Henry Wotton can't have taught you much about psychology, whatever else he has taught you. Nothing will induce me to stir a step to help you. You have come to the wrong man. Go to some of your friends. Don't come to me." "Alan, it was murder. I killed him. You don't know what he had made me suffer. Whatever my life is, he had more to do with the making or the marring of it than poor Harry has had. He may not have intended it, the result was the same." "Murder! Good God, Dorian, is that what you have come to? I shall not inform upon you. It is not my business. Besides, without my stirring in the matter, you are certain to be arrested. Nobody ever commits a crime without doing something stupid. But I will have nothing to do with it." "You must have something to do with it. Wait, wait a moment; listen to me. Only listen, Alan. All I ask of you is to perform a certain scientific experiment. You go to hospitals and dead-houses, and the horrors that you do there don't affect you. If in some hideous dissecting-room or fetid laboratory you found this man lying on a leaden table with red gutters scooped out in it for the blood to flow through, you would simply look upon him as an admirable subject. You would not turn a hair. You would not believe that you were doing anything wrong. On the contrary, you would probably feel that you were benefiting the human race, or increasing the sum of knowledge in the world, or gratifying intellectual curiosity, or something of that kind. What I want you to do is merely what you have often done before. Indeed, to destroy a body must be far less horrible than what you are accustomed to work at. And, remember, it is the only piece of evidence against me. If it is discovered, I am lost; and it is sure to be discovered unless you help me." "I have no desire to help you. You forget that. I am simply indifferent to the whole thing. It has nothing to do with me." "Alan, I entreat you. Think of the position I am in. Just before you came I almost fainted with terror. You may know terror yourself some day. No! don't think of that. Look at the matter purely from the scientific point of view. You don't inquire where the dead things on which you experiment come from. Don't inquire now. I have told you too much as it is. But I beg of you to do this. We were friends once, Alan." "Don't speak about those days, Dorian--they are dead." "The dead linger sometimes. The man upstairs will not go away. He is sitting at the table with bowed head and outstretched arms. Alan! Alan! If you don't come to my assistance, I am ruined. Why, they will hang me, Alan! Don't you understand? They will hang me for what I have done." "There is no good in prolonging this scene. I absolutely refuse to do anything in the matter. It is insane of you to ask me." "You refuse?" "Yes." "I entreat you, Alan." "It is useless." The same look of pity came into Dorian Gray's eyes. Then he stretched out his hand, took a piece of paper, and wrote something on it. He read it over twice, folded it carefully, and pushed it across the table. Having done this, he got up and went over to the window. Campbell looked at him in surprise, and then took up the paper, and opened it. As he read it, his face became ghastly pale and he fell back in his chair. A horrible sense of sickness came over him. He felt as if his heart was beating itself to death in some empty hollow. After two or three minutes of terrible silence, Dorian turned round and came and stood behind him, putting his hand upon his shoulder. "I am so sorry for you, Alan," he murmured, "but you leave me no alternative. I have a letter written already. Here it is. You see the address. If you don't help me, I must send it. If you don't help me, I will send it. You know what the result will be. But you are going to help me. It is impossible for you to refuse now. I tried to spare you. You will do me the justice to admit that. You were stern, harsh, offensive. You treated me as no man has ever dared to treat me--no living man, at any rate. I bore it all. Now it is for me to dictate terms." Campbell buried his face in his hands, and a shudder passed through him. "Yes, it is my turn to dictate terms, Alan. You know what they are. The thing is quite simple. Come, don't work yourself into this fever. The thing has to be done. Face it, and do it." A groan broke from Campbell's lips and he shivered all over. The ticking of the clock on the mantelpiece seemed to him to be dividing time into separate atoms of agony, each of which was too terrible to be borne. He felt as if an iron ring was being slowly tightened round his forehead, as if the disgrace with which he was threatened had already come upon him. The hand upon his shoulder weighed like a hand of lead. It was intolerable. It seemed to crush him. "Come, Alan, you must decide at once." "I cannot do it," he said, mechanically, as though words could alter things. "You must. You have no choice. Don't delay." He hesitated a moment. "Is there a fire in the room upstairs?" "Yes, there is a gas-fire with asbestos." "I shall have to go home and get some things from the laboratory." "No, Alan, you must not leave the house. Write out on a sheet of notepaper what you want and my servant will take a cab and bring the things back to you." Campbell scrawled a few lines, blotted them, and addressed an envelope to his assistant. Dorian took the note up and read it carefully. Then he rang the bell and gave it to his valet, with orders to return as soon as possible and to bring the things with him. As the hall door shut, Campbell started nervously, and having got up from the chair, went over to the chimney-piece. He was shivering with a kind of ague. For nearly twenty minutes, neither of the men spoke. A fly buzzed noisily about the room, and the ticking of the clock was like the beat of a hammer. As the chime struck one, Campbell turned round, and looking at Dorian Gray, saw that his eyes were filled with tears. There was something in the purity and refinement of that sad face that seemed to enrage him. "You are infamous, absolutely infamous!" he muttered. "Hush, Alan. You have saved my life," said Dorian. "Your life? Good heavens! what a life that is! You have gone from corruption to corruption, and now you have culminated in crime. In doing what I am going to do--what you force me to do--it is not of your life that I am thinking." "Ah, Alan," murmured Dorian with a sigh, "I wish you had a thousandth part of the pity for me that I have for you." He turned away as he spoke and stood looking out at the garden. Campbell made no answer. After about ten minutes a knock came to the door, and the servant entered, carrying a large mahogany chest of chemicals, with a long coil of steel and platinum wire and two rather curiously shaped iron clamps. "Shall I leave the things here, sir?" he asked Campbell. "Yes," said Dorian. "And I am afraid, Francis, that I have another errand for you. What is the name of the man at Richmond who supplies Selby with orchids?" "Harden, sir." "Yes--Harden. You must go down to Richmond at once, see Harden personally, and tell him to send twice as many orchids as I ordered, and to have as few white ones as possible. In fact, I don't want any white ones. It is a lovely day, Francis, and Richmond is a very pretty place--otherwise I wouldn't bother you about it." "No trouble, sir. At what time shall I be back?" Dorian looked at Campbell. "How long will your experiment take, Alan?" he said in a calm indifferent voice. The presence of a third person in the room seemed to give him extraordinary courage. Campbell frowned and bit his lip. "It will take about five hours," he answered. "It will be time enough, then, if you are back at half-past seven, Francis. Or stay: just leave my things out for dressing. You can have the evening to yourself. I am not dining at home, so I shall not want you." "Thank you, sir," said the man, leaving the room. "Now, Alan, there is not a moment to be lost. How heavy this chest is! I'll take it for you. You bring the other things." He spoke rapidly and in an authoritative manner. Campbell felt dominated by him. They left the room together. When they reached the top landing, Dorian took out the key and turned it in the lock. Then he stopped, and a troubled look came into his eyes. He shuddered. "I don't think I can go in, Alan," he murmured. "It is nothing to me. I don't require you," said Campbell coldly. Dorian half opened the door. As he did so, he saw the face of his portrait leering in the sunlight. On the floor in front of it the torn curtain was lying. He remembered that the night before he had forgotten, for the first time in his life, to hide the fatal canvas, and was about to rush forward, when he drew back with a shudder. What was that loathsome red dew that gleamed, wet and glistening, on one of the hands, as though the canvas had sweated blood? How horrible it was!--more horrible, it seemed to him for the moment, than the silent thing that he knew was stretched across the table, the thing whose grotesque misshapen shadow on the spotted carpet showed him that it had not stirred, but was still there, as he had left it. He heaved a deep breath, opened the door a little wider, and with half-closed eyes and averted head, walked quickly in, determined that he would not look even once upon the dead man. Then, stooping down and taking up the gold-and-purple hanging, he flung it right over the picture. There he stopped, feeling afraid to turn round, and his eyes fixed themselves on the intricacies of the pattern before him. He heard Campbell bringing in the heavy chest, and the irons, and the other things that he had required for his dreadful work. He began to wonder if he and Basil Hallward had ever met, and, if so, what they had thought of each other. "Leave me now," said a stern voice behind him. He turned and hurried out, just conscious that the dead man had been thrust back into the chair and that Campbell was gazing into a glistening yellow face. As he was going downstairs, he heard the key being turned in the lock. It was long after seven when Campbell came back into the library. He was pale, but absolutely calm. "I have done what you asked me to do," he muttered. "And now, good-bye. Let us never see each other again." "You have saved me from ruin, Alan. I cannot forget that," said Dorian simply. As soon as Campbell had left, he went upstairs. There was a horrible smell of nitric acid in the room. But the thing that had been sitting at the table was gone. CHAPTER 15 That evening, at eight-thirty, exquisitely dressed and wearing a large button-hole of Parma violets, Dorian Gray was ushered into Lady Narborough's drawing-room by bowing servants. His forehead was throbbing with maddened nerves, and he felt wildly excited, but his manner as he bent over his hostess's hand was as easy and graceful as ever. Perhaps one never seems so much at one's ease as when one has to play a part. Certainly no one looking at Dorian Gray that night could have believed that he had passed through a tragedy as horrible as any tragedy of our age. Those finely shaped fingers could never have clutched a knife for sin, nor those smiling lips have cried out on God and goodness. He himself could not help wondering at the calm of his demeanour, and for a moment felt keenly the terrible pleasure of a double life. It was a small party, got up rather in a hurry by Lady Narborough, who was a very clever woman with what Lord Henry used to describe as the remains of really remarkable ugliness. She had proved an excellent wife to one of our most tedious ambassadors, and having buried her husband properly in a marble mausoleum, which she had herself designed, and married off her daughters to some rich, rather elderly men, she devoted herself now to the pleasures of French fiction, French cookery, and French _esprit_ when she could get it. Dorian was one of her especial favourites, and she always told him that she was extremely glad she had not met him in early life. "I know, my dear, I should have fallen madly in love with you," she used to say, "and thrown my bonnet right over the mills for your sake. It is most fortunate that you were not thought of at the time. As it was, our bonnets were so unbecoming, and the mills were so occupied in trying to raise the wind, that I never had even a flirtation with anybody. However, that was all Narborough's fault. He was dreadfully short-sighted, and there is no pleasure in taking in a husband who never sees anything." Her guests this evening were rather tedious. The fact was, as she explained to Dorian, behind a very shabby fan, one of her married daughters had come up quite suddenly to stay with her, and, to make matters worse, had actually brought her husband with her. "I think it is most unkind of her, my dear," she whispered. "Of course I go and stay with them every summer after I come from Homburg, but then an old woman like me must have fresh air sometimes, and besides, I really wake them up. You don't know what an existence they lead down there. It is pure unadulterated country life. They get up early, because they have so much to do, and go to bed early, because they have so little to think about. There has not been a scandal in the neighbourhood since the time of Queen Elizabeth, and consequently they all fall asleep after dinner. You shan't sit next either of them. You shall sit by me and amuse me." Dorian murmured a graceful compliment and looked round the room. Yes: it was certainly a tedious party. Two of the people he had never seen before, and the others consisted of Ernest Harrowden, one of those middle-aged mediocrities so common in London clubs who have no enemies, but are thoroughly disliked by their friends; Lady Ruxton, an overdressed woman of forty-seven, with a hooked nose, who was always trying to get herself compromised, but was so peculiarly plain that to her great disappointment no one would ever believe anything against her; Mrs. Erlynne, a pushing nobody, with a delightful lisp and Venetian-red hair; Lady Alice Chapman, his hostess's daughter, a dowdy dull girl, with one of those characteristic British faces that, once seen, are never remembered; and her husband, a red-cheeked, white-whiskered creature who, like so many of his class, was under the impression that inordinate joviality can atone for an entire lack of ideas. He was rather sorry he had come, till Lady Narborough, looking at the great ormolu gilt clock that sprawled in gaudy curves on the mauve-draped mantelshelf, exclaimed: "How horrid of Henry Wotton to be so late! I sent round to him this morning on chance and he promised faithfully not to disappoint me." It was some consolation that Harry was to be there, and when the door opened and he heard his slow musical voice lending charm to some insincere apology, he ceased to feel bored. But at dinner he could not eat anything. Plate after plate went away untasted. Lady Narborough kept scolding him for what she called "an insult to poor Adolphe, who invented the _menu_ specially for you," and now and then Lord Henry looked across at him, wondering at his silence and abstracted manner. From time to time the butler filled his glass with champagne. He drank eagerly, and his thirst seemed to increase. "Dorian," said Lord Henry at last, as the _chaud-froid_ was being handed round, "what is the matter with you to-night? You are quite out of sorts." "I believe he is in love," cried Lady Narborough, "and that he is afraid to tell me for fear I should be jealous. He is quite right. I certainly should." "Dear Lady Narborough," murmured Dorian, smiling, "I have not been in love for a whole week--not, in fact, since Madame de Ferrol left town." "How you men can fall in love with that woman!" exclaimed the old lady. "I really cannot understand it." "It is simply because she remembers you when you were a little girl, Lady Narborough," said Lord Henry. "She is the one link between us and your short frocks." "She does not remember my short frocks at all, Lord Henry. But I remember her very well at Vienna thirty years ago, and how _decolletee_ she was then." "She is still _decolletee_," he answered, taking an olive in his long fingers; "and when she is in a very smart gown she looks like an _edition de luxe_ of a bad French novel. She is really wonderful, and full of surprises. Her capacity for family affection is extraordinary. When her third husband died, her hair turned quite gold from grief." "How can you, Harry!" cried Dorian. "It is a most romantic explanation," laughed the hostess. "But her third husband, Lord Henry! You don't mean to say Ferrol is the fourth?" "Certainly, Lady Narborough." "I don't believe a word of it." "Well, ask Mr. Gray. He is one of her most intimate friends." "Is it true, Mr. Gray?" "She assures me so, Lady Narborough," said Dorian. "I asked her whether, like Marguerite de Navarre, she had their hearts embalmed and hung at her girdle. She told me she didn't, because none of them had had any hearts at all." "Four husbands! Upon my word that is _trop de zele_." "_Trop d'audace_, I tell her," said Dorian. "Oh! she is audacious enough for anything, my dear. And what is Ferrol like? I don't know him." "The husbands of very beautiful women belong to the criminal classes," said Lord Henry, sipping his wine. Lady Narborough hit him with her fan. "Lord Henry, I am not at all surprised that the world says that you are extremely wicked." "But what world says that?" asked Lord Henry, elevating his eyebrows. "It can only be the next world. This world and I are on excellent terms." "Everybody I know says you are very wicked," cried the old lady, shaking her head. Lord Henry looked serious for some moments. "It is perfectly monstrous," he said, at last, "the way people go about nowadays saying things against one behind one's back that are absolutely and entirely true." "Isn't he incorrigible?" cried Dorian, leaning forward in his chair. "I hope so," said his hostess, laughing. "But really, if you all worship Madame de Ferrol in this ridiculous way, I shall have to marry again so as to be in the fashion." "You will never marry again, Lady Narborough," broke in Lord Henry. "You were far too happy. When a woman marries again, it is because she detested her first husband. When a man marries again, it is because he adored his first wife. Women try their luck; men risk theirs." "Narborough wasn't perfect," cried the old lady. "If he had been, you would not have loved him, my dear lady," was the rejoinder. "Women love us for our defects. If we have enough of them, they will forgive us everything, even our intellects. You will never ask me to dinner again after saying this, I am afraid, Lady Narborough, but it is quite true." "Of course it is true, Lord Henry. If we women did not love you for your defects, where would you all be? Not one of you would ever be married. You would be a set of unfortunate bachelors. Not, however, that that would alter you much. Nowadays all the married men live like bachelors, and all the bachelors like married men." "_Fin de siecle_," murmured Lord Henry. "_Fin du globe_," answered his hostess. "I wish it were _fin du globe_," said Dorian with a sigh. "Life is a great disappointment." "Ah, my dear," cried Lady Narborough, putting on her gloves, "don't tell me that you have exhausted life. When a man says that one knows that life has exhausted him. Lord Henry is very wicked, and I sometimes wish that I had been; but you are made to be good--you look so good. I must find you a nice wife. Lord Henry, don't you think that Mr. Gray should get married?" "I am always telling him so, Lady Narborough," said Lord Henry with a bow. "Well, we must look out for a suitable match for him. I shall go through Debrett carefully to-night and draw out a list of all the eligible young ladies." "With their ages, Lady Narborough?" asked Dorian. "Of course, with their ages, slightly edited. But nothing must be done in a hurry. I want it to be what _The Morning Post_ calls a suitable alliance, and I want you both to be happy." "What nonsense people talk about happy marriages!" exclaimed Lord Henry. "A man can be happy with any woman, as long as he does not love her." "Ah! what a cynic you are!" cried the old lady, pushing back her chair and nodding to Lady Ruxton. "You must come and dine with me soon again. You are really an admirable tonic, much better than what Sir Andrew prescribes for me. You must tell me what people you would like to meet, though. I want it to be a delightful gathering." "I like men who have a future and women who have a past," he answered. "Or do you think that would make it a petticoat party?" "I fear so," she said, laughing, as she stood up. "A thousand pardons, my dear Lady Ruxton," she added, "I didn't see you hadn't finished your cigarette." "Never mind, Lady Narborough. I smoke a great deal too much. I am going to limit myself, for the future." "Pray don't, Lady Ruxton," said Lord Henry. "Moderation is a fatal thing. Enough is as bad as a meal. More than enough is as good as a feast." Lady Ruxton glanced at him curiously. "You must come and explain that to me some afternoon, Lord Henry. It sounds a fascinating theory," she murmured, as she swept out of the room. "Now, mind you don't stay too long over your politics and scandal," cried Lady Narborough from the door. "If you do, we are sure to squabble upstairs." The men laughed, and Mr. Chapman got up solemnly from the foot of the table and came up to the top. Dorian Gray changed his seat and went and sat by Lord Henry. Mr. Chapman began to talk in a loud voice about the situation in the House of Commons. He guffawed at his adversaries. The word _doctrinaire_--word full of terror to the British mind--reappeared from time to time between his explosions. An alliterative prefix served as an ornament of oratory. He hoisted the Union Jack on the pinnacles of thought. The inherited stupidity of the race--sound English common sense he jovially termed it--was shown to be the proper bulwark for society. A smile curved Lord Henry's lips, and he turned round and looked at Dorian. "Are you better, my dear fellow?" he asked. "You seemed rather out of sorts at dinner." "I am quite well, Harry. I am tired. That is all." "You were charming last night. The little duchess is quite devoted to you. She tells me she is going down to Selby." "She has promised to come on the twentieth." "Is Monmouth to be there, too?" "Oh, yes, Harry." "He bores me dreadfully, almost as much as he bores her. She is very clever, too clever for a woman. She lacks the indefinable charm of weakness. It is the feet of clay that make the gold of the image precious. Her feet are very pretty, but they are not feet of clay. White porcelain feet, if you like. They have been through the fire, and what fire does not destroy, it hardens. She has had experiences." "How long has she been married?" asked Dorian. "An eternity, she tells me. I believe, according to the peerage, it is ten years, but ten years with Monmouth must have been like eternity, with time thrown in. Who else is coming?" "Oh, the Willoughbys, Lord Rugby and his wife, our hostess, Geoffrey Clouston, the usual set. I have asked Lord Grotrian." "I like him," said Lord Henry. "A great many people don't, but I find him charming. He atones for being occasionally somewhat overdressed by being always absolutely over-educated. He is a very modern type." "I don't know if he will be able to come, Harry. He may have to go to Monte Carlo with his father." "Ah! what a nuisance people's people are! Try and make him come. By the way, Dorian, you ran off very early last night. You left before eleven. What did you do afterwards? Did you go straight home?" Dorian glanced at him hurriedly and frowned. "No, Harry," he said at last, "I did not get home till nearly three." "Did you go to the club?" "Yes," he answered. Then he bit his lip. "No, I don't mean that. I didn't go to the club. I walked about. I forget what I did.... How inquisitive you are, Harry! You always want to know what one has been doing. I always want to forget what I have been doing. I came in at half-past two, if you wish to know the exact time. I had left my latch-key at home, and my servant had to let me in. If you want any corroborative evidence on the subject, you can ask him." Lord Henry shrugged his shoulders. "My dear fellow, as if I cared! Let us go up to the drawing-room. No sherry, thank you, Mr. Chapman. Something has happened to you, Dorian. Tell me what it is. You are not yourself to-night." "Don't mind me, Harry. I am irritable, and out of temper. I shall come round and see you to-morrow, or next day. Make my excuses to Lady Narborough. I shan't go upstairs. I shall go home. I must go home." "All right, Dorian. I dare say I shall see you to-morrow at tea-time. The duchess is coming." "I will try to be there, Harry," he said, leaving the room. As he drove back to his own house, he was conscious that the sense of terror he thought he had strangled had come back to him. Lord Henry's casual questioning had made him lose his nerve for the moment, and he wanted his nerve still. Things that were dangerous had to be destroyed. He winced. He hated the idea of even touching them. Yet it had to be done. He realized that, and when he had locked the door of his library, he opened the secret press into which he had thrust Basil Hallward's coat and bag. A huge fire was blazing. He piled another log on it. The smell of the singeing clothes and burning leather was horrible. It took him three-quarters of an hour to consume everything. At the end he felt faint and sick, and having lit some Algerian pastilles in a pierced copper brazier, he bathed his hands and forehead with a cool musk-scented vinegar. Suddenly he started. His eyes grew strangely bright, and he gnawed nervously at his underlip. Between two of the windows stood a large Florentine cabinet, made out of ebony and inlaid with ivory and blue lapis. He watched it as though it were a thing that could fascinate and make afraid, as though it held something that he longed for and yet almost loathed. His breath quickened. A mad craving came over him. He lit a cigarette and then threw it away. His eyelids drooped till the long fringed lashes almost touched his cheek. But he still watched the cabinet. At last he got up from the sofa on which he had been lying, went over to it, and having unlocked it, touched some hidden spring. A triangular drawer passed slowly out. His fingers moved instinctively towards it, dipped in, and closed on something. It was a small Chinese box of black and gold-dust lacquer, elaborately wrought, the sides patterned with curved waves, and the silken cords hung with round crystals and tasselled in plaited metal threads. He opened it. Inside was a green paste, waxy in lustre, the odour curiously heavy and persistent. He hesitated for some moments, with a strangely immobile smile upon his face. Then shivering, though the atmosphere of the room was terribly hot, he drew himself up and glanced at the clock. It was twenty minutes to twelve. He put the box back, shutting the cabinet doors as he did so, and went into his bedroom. As midnight was striking bronze blows upon the dusky air, Dorian Gray, dressed commonly, and with a muffler wrapped round his throat, crept quietly out of his house. In Bond Street he found a hansom with a good horse. He hailed it and in a low voice gave the driver an address. The man shook his head. "It is too far for me," he muttered. "Here is a sovereign for you," said Dorian. "You shall have another if you drive fast." "All right, sir," answered the man, "you will be there in an hour," and after his fare had got in he turned his horse round and drove rapidly towards the river. CHAPTER 16 A cold rain began to fall, and the blurred street-lamps looked ghastly in the dripping mist. The public-houses were just closing, and dim men and women were clustering in broken groups round their doors. From some of the bars came the sound of horrible laughter. In others, drunkards brawled and screamed. Lying back in the hansom, with his hat pulled over his forehead, Dorian Gray watched with listless eyes the sordid shame of the great city, and now and then he repeated to himself the words that Lord Henry had said to him on the first day they had met, "To cure the soul by means of the senses, and the senses by means of the soul." Yes, that was the secret. He had often tried it, and would try it again now. There were opium dens where one could buy oblivion, dens of horror where the memory of old sins could be destroyed by the madness of sins that were new. The moon hung low in the sky like a yellow skull. From time to time a huge misshapen cloud stretched a long arm across and hid it. The gas-lamps grew fewer, and the streets more narrow and gloomy. Once the man lost his way and had to drive back half a mile. A steam rose from the horse as it splashed up the puddles. The sidewindows of the hansom were clogged with a grey-flannel mist. "To cure the soul by means of the senses, and the senses by means of the soul!" How the words rang in his ears! His soul, certainly, was sick to death. Was it true that the senses could cure it? Innocent blood had been spilled. What could atone for that? Ah! for that there was no atonement; but though forgiveness was impossible, forgetfulness was possible still, and he was determined to forget, to stamp the thing out, to crush it as one would crush the adder that had stung one. Indeed, what right had Basil to have spoken to him as he had done? Who had made him a judge over others? He had said things that were dreadful, horrible, not to be endured. On and on plodded the hansom, going slower, it seemed to him, at each step. He thrust up the trap and called to the man to drive faster. The hideous hunger for opium began to gnaw at him. His throat burned and his delicate hands twitched nervously together. He struck at the horse madly with his stick. The driver laughed and whipped up. He laughed in answer, and the man was silent. The way seemed interminable, and the streets like the black web of some sprawling spider. The monotony became unbearable, and as the mist thickened, he felt afraid. Then they passed by lonely brickfields. The fog was lighter here, and he could see the strange, bottle-shaped kilns with their orange, fanlike tongues of fire. A dog barked as they went by, and far away in the darkness some wandering sea-gull screamed. The horse stumbled in a rut, then swerved aside and broke into a gallop. After some time they left the clay road and rattled again over rough-paven streets. Most of the windows were dark, but now and then fantastic shadows were silhouetted against some lamplit blind. He watched them curiously. They moved like monstrous marionettes and made gestures like live things. He hated them. A dull rage was in his heart. As they turned a corner, a woman yelled something at them from an open door, and two men ran after the hansom for about a hundred yards. The driver beat at them with his whip. It is said that passion makes one think in a circle. Certainly with hideous iteration the bitten lips of Dorian Gray shaped and reshaped those subtle words that dealt with soul and sense, till he had found in them the full expression, as it were, of his mood, and justified, by intellectual approval, passions that without such justification would still have dominated his temper. From cell to cell of his brain crept the one thought; and the wild desire to live, most terrible of all man's appetites, quickened into force each trembling nerve and fibre. Ugliness that had once been hateful to him because it made things real, became dear to him now for that very reason. Ugliness was the one reality. The coarse brawl, the loathsome den, the crude violence of disordered life, the very vileness of thief and outcast, were more vivid, in their intense actuality of impression, than all the gracious shapes of art, the dreamy shadows of song. They were what he needed for forgetfulness. In three days he would be free. Suddenly the man drew up with a jerk at the top of a dark lane. Over the low roofs and jagged chimney-stacks of the houses rose the black masts of ships. Wreaths of white mist clung like ghostly sails to the yards. "Somewhere about here, sir, ain't it?" he asked huskily through the trap. Dorian started and peered round. "This will do," he answered, and having got out hastily and given the driver the extra fare he had promised him, he walked quickly in the direction of the quay. Here and there a lantern gleamed at the stern of some huge merchantman. The light shook and splintered in the puddles. A red glare came from an outward-bound steamer that was coaling. The slimy pavement looked like a wet mackintosh. He hurried on towards the left, glancing back now and then to see if he was being followed. In about seven or eight minutes he reached a small shabby house that was wedged in between two gaunt factories. In one of the top-windows stood a lamp. He stopped and gave a peculiar knock. After a little time he heard steps in the passage and the chain being unhooked. The door opened quietly, and he went in without saying a word to the squat misshapen figure that flattened itself into the shadow as he passed. At the end of the hall hung a tattered green curtain that swayed and shook in the gusty wind which had followed him in from the street. He dragged it aside and entered a long low room which looked as if it had once been a third-rate dancing-saloon. Shrill flaring gas-jets, dulled and distorted in the fly-blown mirrors that faced them, were ranged round the walls. Greasy reflectors of ribbed tin backed them, making quivering disks of light. The floor was covered with ochre-coloured sawdust, trampled here and there into mud, and stained with dark rings of spilled liquor. Some Malays were crouching by a little charcoal stove, playing with bone counters and showing their white teeth as they chattered. In one corner, with his head buried in his arms, a sailor sprawled over a table, and by the tawdrily painted bar that ran across one complete side stood two haggard women, mocking an old man who was brushing the sleeves of his coat with an expression of disgust. "He thinks he's got red ants on him," laughed one of them, as Dorian passed by. The man looked at her in terror and began to whimper. At the end of the room there was a little staircase, leading to a darkened chamber. As Dorian hurried up its three rickety steps, the heavy odour of opium met him. He heaved a deep breath, and his nostrils quivered with pleasure. When he entered, a young man with smooth yellow hair, who was bending over a lamp lighting a long thin pipe, looked up at him and nodded in a hesitating manner. "You here, Adrian?" muttered Dorian. "Where else should I be?" he answered, listlessly. "None of the chaps will speak to me now." "I thought you had left England." "Darlington is not going to do anything. My brother paid the bill at last. George doesn't speak to me either.... I don't care," he added with a sigh. "As long as one has this stuff, one doesn't want friends. I think I have had too many friends." Dorian winced and looked round at the grotesque things that lay in such fantastic postures on the ragged mattresses. The twisted limbs, the gaping mouths, the staring lustreless eyes, fascinated him. He knew in what strange heavens they were suffering, and what dull hells were teaching them the secret of some new joy. They were better off than he was. He was prisoned in thought. Memory, like a horrible malady, was eating his soul away. From time to time he seemed to see the eyes of Basil Hallward looking at him. Yet he felt he could not stay. The presence of Adrian Singleton troubled him. He wanted to be where no one would know who he was. He wanted to escape from himself. "I am going on to the other place," he said after a pause. "On the wharf?" "Yes." "That mad-cat is sure to be there. They won't have her in this place now." Dorian shrugged his shoulders. "I am sick of women who love one. Women who hate one are much more interesting. Besides, the stuff is better." "Much the same." "I like it better. Come and have something to drink. I must have something." "I don't want anything," murmured the young man. "Never mind." Adrian Singleton rose up wearily and followed Dorian to the bar. A half-caste, in a ragged turban and a shabby ulster, grinned a hideous greeting as he thrust a bottle of brandy and two tumblers in front of them. The women sidled up and began to chatter. Dorian turned his back on them and said something in a low voice to Adrian Singleton. A crooked smile, like a Malay crease, writhed across the face of one of the women. "We are very proud to-night," she sneered. "For God's sake don't talk to me," cried Dorian, stamping his foot on the ground. "What do you want? Money? Here it is. Don't ever talk to me again." Two red sparks flashed for a moment in the woman's sodden eyes, then flickered out and left them dull and glazed. She tossed her head and raked the coins off the counter with greedy fingers. Her companion watched her enviously. "It's no use," sighed Adrian Singleton. "I don't care to go back. What does it matter? I am quite happy here." "You will write to me if you want anything, won't you?" said Dorian, after a pause. "Perhaps." "Good night, then." "Good night," answered the young man, passing up the steps and wiping his parched mouth with a handkerchief. Dorian walked to the door with a look of pain in his face. As he drew the curtain aside, a hideous laugh broke from the painted lips of the woman who had taken his money. "There goes the devil's bargain!" she hiccoughed, in a hoarse voice. "Curse you!" he answered, "don't call me that." She snapped her fingers. "Prince Charming is what you like to be called, ain't it?" she yelled after him. The drowsy sailor leaped to his feet as she spoke, and looked wildly round. The sound of the shutting of the hall door fell on his ear. He rushed out as if in pursuit. Dorian Gray hurried along the quay through the drizzling rain. His meeting with Adrian Singleton had strangely moved him, and he wondered if the ruin of that young life was really to be laid at his door, as Basil Hallward had said to him with such infamy of insult. He bit his lip, and for a few seconds his eyes grew sad. Yet, after all, what did it matter to him? One's days were too brief to take the burden of another's errors on one's shoulders. Each man lived his own life and paid his own price for living it. The only pity was one had to pay so often for a single fault. One had to pay over and over again, indeed. In her dealings with man, destiny never closed her accounts. There are moments, psychologists tell us, when the passion for sin, or for what the world calls sin, so dominates a nature that every fibre of the body, as every cell of the brain, seems to be instinct with fearful impulses. Men and women at such moments lose the freedom of their will. They move to their terrible end as automatons move. Choice is taken from them, and conscience is either killed, or, if it lives at all, lives but to give rebellion its fascination and disobedience its charm. For all sins, as theologians weary not of reminding us, are sins of disobedience. When that high spirit, that morning star of evil, fell from heaven, it was as a rebel that he fell. Callous, concentrated on evil, with stained mind, and soul hungry for rebellion, Dorian Gray hastened on, quickening his step as he went, but as he darted aside into a dim archway, that had served him often as a short cut to the ill-famed place where he was going, he felt himself suddenly seized from behind, and before he had time to defend himself, he was thrust back against the wall, with a brutal hand round his throat. He struggled madly for life, and by a terrible effort wrenched the tightening fingers away. In a second he heard the click of a revolver, and saw the gleam of a polished barrel, pointing straight at his head, and the dusky form of a short, thick-set man facing him. "What do you want?" he gasped. "Keep quiet," said the man. "If you stir, I shoot you." "You are mad. What have I done to you?" "You wrecked the life of Sibyl Vane," was the answer, "and Sibyl Vane was my sister. She killed herself. I know it. Her death is at your door. I swore I would kill you in return. For years I have sought you. I had no clue, no trace. The two people who could have described you were dead. I knew nothing of you but the pet name she used to call you. I heard it to-night by chance. Make your peace with God, for to-night you are going to die." Dorian Gray grew sick with fear. "I never knew her," he stammered. "I never heard of her. You are mad." "You had better confess your sin, for as sure as I am James Vane, you are going to die." There was a horrible moment. Dorian did not know what to say or do. "Down on your knees!" growled the man. "I give you one minute to make your peace--no more. I go on board to-night for India, and I must do my job first. One minute. That's all." Dorian's arms fell to his side. Paralysed with terror, he did not know what to do. Suddenly a wild hope flashed across his brain. "Stop," he cried. "How long ago is it since your sister died? Quick, tell me!" "Eighteen years," said the man. "Why do you ask me? What do years matter?" "Eighteen years," laughed Dorian Gray, with a touch of triumph in his voice. "Eighteen years! Set me under the lamp and look at my face!" James Vane hesitated for a moment, not understanding what was meant. Then he seized Dorian Gray and dragged him from the archway. Dim and wavering as was the wind-blown light, yet it served to show him the hideous error, as it seemed, into which he had fallen, for the face of the man he had sought to kill had all the bloom of boyhood, all the unstained purity of youth. He seemed little more than a lad of twenty summers, hardly older, if older indeed at all, than his sister had been when they had parted so many years ago. It was obvious that this was not the man who had destroyed her life. He loosened his hold and reeled back. "My God! my God!" he cried, "and I would have murdered you!" Dorian Gray drew a long breath. "You have been on the brink of committing a terrible crime, my man," he said, looking at him sternly. "Let this be a warning to you not to take vengeance into your own hands." "Forgive me, sir," muttered James Vane. "I was deceived. A chance word I heard in that damned den set me on the wrong track." "You had better go home and put that pistol away, or you may get into trouble," said Dorian, turning on his heel and going slowly down the street. James Vane stood on the pavement in horror. He was trembling from head to foot. After a little while, a black shadow that had been creeping along the dripping wall moved out into the light and came close to him with stealthy footsteps. He felt a hand laid on his arm and looked round with a start. It was one of the women who had been drinking at the bar. "Why didn't you kill him?" she hissed out, putting haggard face quite close to his. "I knew you were following him when you rushed out from Daly's. You fool! You should have killed him. He has lots of money, and he's as bad as bad." "He is not the man I am looking for," he answered, "and I want no man's money. I want a man's life. The man whose life I want must be nearly forty now. This one is little more than a boy. Thank God, I have not got his blood upon my hands." The woman gave a bitter laugh. "Little more than a boy!" she sneered. "Why, man, it's nigh on eighteen years since Prince Charming made me what I am." "You lie!" cried James Vane. She raised her hand up to heaven. "Before God I am telling the truth," she cried. "Before God?" "Strike me dumb if it ain't so. He is the worst one that comes here. They say he has sold himself to the devil for a pretty face. It's nigh on eighteen years since I met him. He hasn't changed much since then. I have, though," she added, with a sickly leer. "You swear this?" "I swear it," came in hoarse echo from her flat mouth. "But don't give me away to him," she whined; "I am afraid of him. Let me have some money for my night's lodging." He broke from her with an oath and rushed to the corner of the street, but Dorian Gray had disappeared. When he looked back, the woman had vanished also. CHAPTER 17 A week later Dorian Gray was sitting in the conservatory at Selby Royal, talking to the pretty Duchess of Monmouth, who with her husband, a jaded-looking man of sixty, was amongst his guests. It was tea-time, and the mellow light of the huge, lace-covered lamp that stood on the table lit up the delicate china and hammered silver of the service at which the duchess was presiding. Her white hands were moving daintily among the cups, and her full red lips were smiling at something that Dorian had whispered to her. Lord Henry was lying back in a silk-draped wicker chair, looking at them. On a peach-coloured divan sat Lady Narborough, pretending to listen to the duke's description of the last Brazilian beetle that he had added to his collection. Three young men in elaborate smoking-suits were handing tea-cakes to some of the women. The house-party consisted of twelve people, and there were more expected to arrive on the next day. "What are you two talking about?" said Lord Henry, strolling over to the table and putting his cup down. "I hope Dorian has told you about my plan for rechristening everything, Gladys. It is a delightful idea." "But I don't want to be rechristened, Harry," rejoined the duchess, looking up at him with her wonderful eyes. "I am quite satisfied with my own name, and I am sure Mr. Gray should be satisfied with his." "My dear Gladys, I would not alter either name for the world. They are both perfect. I was thinking chiefly of flowers. Yesterday I cut an orchid, for my button-hole. It was a marvellous spotted thing, as effective as the seven deadly sins. In a thoughtless moment I asked one of the gardeners what it was called. He told me it was a fine specimen of _Robinsoniana_, or something dreadful of that kind. It is a sad truth, but we have lost the faculty of giving lovely names to things. Names are everything. I never quarrel with actions. My one quarrel is with words. That is the reason I hate vulgar realism in literature. The man who could call a spade a spade should be compelled to use one. It is the only thing he is fit for." "Then what should we call you, Harry?" she asked. "His name is Prince Paradox," said Dorian. "I recognize him in a flash," exclaimed the duchess. "I won't hear of it," laughed Lord Henry, sinking into a chair. "From a label there is no escape! I refuse the title." "Royalties may not abdicate," fell as a warning from pretty lips. "You wish me to defend my throne, then?" "Yes." "I give the truths of to-morrow." "I prefer the mistakes of to-day," she answered. "You disarm me, Gladys," he cried, catching the wilfulness of her mood. "Of your shield, Harry, not of your spear." "I never tilt against beauty," he said, with a wave of his hand. "That is your error, Harry, believe me. You value beauty far too much." "How can you say that? I admit that I think that it is better to be beautiful than to be good. But on the other hand, no one is more ready than I am to acknowledge that it is better to be good than to be ugly." "Ugliness is one of the seven deadly sins, then?" cried the duchess. "What becomes of your simile about the orchid?" "Ugliness is one of the seven deadly virtues, Gladys. You, as a good Tory, must not underrate them. Beer, the Bible, and the seven deadly virtues have made our England what she is." "You don't like your country, then?" she asked. "I live in it." "That you may censure it the better." "Would you have me take the verdict of Europe on it?" he inquired. "What do they say of us?" "That Tartuffe has emigrated to England and opened a shop." "Is that yours, Harry?" "I give it to you." "I could not use it. It is too true." "You need not be afraid. Our countrymen never recognize a description." "They are practical." "They are more cunning than practical. When they make up their ledger, they balance stupidity by wealth, and vice by hypocrisy." "Still, we have done great things." "Great things have been thrust on us, Gladys." "We have carried their burden." "Only as far as the Stock Exchange." She shook her head. "I believe in the race," she cried. "It represents the survival of the pushing." "It has development." "Decay fascinates me more." "What of art?" she asked. "It is a malady." "Love?" "An illusion." "Religion?" "The fashionable substitute for belief." "You are a sceptic." "Never! Scepticism is the beginning of faith." "What are you?" "To define is to limit." "Give me a clue." "Threads snap. You would lose your way in the labyrinth." "You bewilder me. Let us talk of some one else." "Our host is a delightful topic. Years ago he was christened Prince Charming." "Ah! don't remind me of that," cried Dorian Gray. "Our host is rather horrid this evening," answered the duchess, colouring. "I believe he thinks that Monmouth married me on purely scientific principles as the best specimen he could find of a modern butterfly." "Well, I hope he won't stick pins into you, Duchess," laughed Dorian. "Oh! my maid does that already, Mr. Gray, when she is annoyed with me." "And what does she get annoyed with you about, Duchess?" "For the most trivial things, Mr. Gray, I assure you. Usually because I come in at ten minutes to nine and tell her that I must be dressed by half-past eight." "How unreasonable of her! You should give her warning." "I daren't, Mr. Gray. Why, she invents hats for me. You remember the one I wore at Lady Hilstone's garden-party? You don't, but it is nice of you to pretend that you do. Well, she made it out of nothing. All good hats are made out of nothing." "Like all good reputations, Gladys," interrupted Lord Henry. "Every effect that one produces gives one an enemy. To be popular one must be a mediocrity." "Not with women," said the duchess, shaking her head; "and women rule the world. I assure you we can't bear mediocrities. We women, as some one says, love with our ears, just as you men love with your eyes, if you ever love at all." "It seems to me that we never do anything else," murmured Dorian. "Ah! then, you never really love, Mr. Gray," answered the duchess with mock sadness. "My dear Gladys!" cried Lord Henry. "How can you say that? Romance lives by repetition, and repetition converts an appetite into an art. Besides, each time that one loves is the only time one has ever loved. Difference of object does not alter singleness of passion. It merely intensifies it. We can have in life but one great experience at best, and the secret of life is to reproduce that experience as often as possible." "Even when one has been wounded by it, Harry?" asked the duchess after a pause. "Especially when one has been wounded by it," answered Lord Henry. The duchess turned and looked at Dorian Gray with a curious expression in her eyes. "What do you say to that, Mr. Gray?" she inquired. Dorian hesitated for a moment. Then he threw his head back and laughed. "I always agree with Harry, Duchess." "Even when he is wrong?" "Harry is never wrong, Duchess." "And does his philosophy make you happy?" "I have never searched for happiness. Who wants happiness? I have searched for pleasure." "And found it, Mr. Gray?" "Often. Too often." The duchess sighed. "I am searching for peace," she said, "and if I don't go and dress, I shall have none this evening." "Let me get you some orchids, Duchess," cried Dorian, starting to his feet and walking down the conservatory. "You are flirting disgracefully with him," said Lord Henry to his cousin. "You had better take care. He is very fascinating." "If he were not, there would be no battle." "Greek meets Greek, then?" "I am on the side of the Trojans. They fought for a woman." "They were defeated." "There are worse things than capture," she answered. "You gallop with a loose rein." "Pace gives life," was the _riposte_. "I shall write it in my diary to-night." "What?" "That a burnt child loves the fire." "I am not even singed. My wings are untouched." "You use them for everything, except flight." "Courage has passed from men to women. It is a new experience for us." "You have a rival." "Who?" He laughed. "Lady Narborough," he whispered. "She perfectly adores him." "You fill me with apprehension. The appeal to antiquity is fatal to us who are romanticists." "Romanticists! You have all the methods of science." "Men have educated us." "But not explained you." "Describe us as a sex," was her challenge. "Sphinxes without secrets." She looked at him, smiling. "How long Mr. Gray is!" she said. "Let us go and help him. I have not yet told him the colour of my frock." "Ah! you must suit your frock to his flowers, Gladys." "That would be a premature surrender." "Romantic art begins with its climax." "I must keep an opportunity for retreat." "In the Parthian manner?" "They found safety in the desert. I could not do that." "Women are not always allowed a choice," he answered, but hardly had he finished the sentence before from the far end of the conservatory came a stifled groan, followed by the dull sound of a heavy fall. Everybody started up. The duchess stood motionless in horror. And with fear in his eyes, Lord Henry rushed through the flapping palms to find Dorian Gray lying face downwards on the tiled floor in a deathlike swoon. He was carried at once into the blue drawing-room and laid upon one of the sofas. After a short time, he came to himself and looked round with a dazed expression. "What has happened?" he asked. "Oh! I remember. Am I safe here, Harry?" He began to tremble. "My dear Dorian," answered Lord Henry, "you merely fainted. That was all. You must have overtired yourself. You had better not come down to dinner. I will take your place." "No, I will come down," he said, struggling to his feet. "I would rather come down. I must not be alone." He went to his room and dressed. There was a wild recklessness of gaiety in his manner as he sat at table, but now and then a thrill of terror ran through him when he remembered that, pressed against the window of the conservatory, like a white handkerchief, he had seen the face of James Vane watching him. CHAPTER 18 The next day he did not leave the house, and, indeed, spent most of the time in his own room, sick with a wild terror of dying, and yet indifferent to life itself. The consciousness of being hunted, snared, tracked down, had begun to dominate him. If the tapestry did but tremble in the wind, he shook. The dead leaves that were blown against the leaded panes seemed to him like his own wasted resolutions and wild regrets. When he closed his eyes, he saw again the sailor's face peering through the mist-stained glass, and horror seemed once more to lay its hand upon his heart. But perhaps it had been only his fancy that had called vengeance out of the night and set the hideous shapes of punishment before him. Actual life was chaos, but there was something terribly logical in the imagination. It was the imagination that set remorse to dog the feet of sin. It was the imagination that made each crime bear its misshapen brood. In the common world of fact the wicked were not punished, nor the good rewarded. Success was given to the strong, failure thrust upon the weak. That was all. Besides, had any stranger been prowling round the house, he would have been seen by the servants or the keepers. Had any foot-marks been found on the flower-beds, the gardeners would have reported it. Yes, it had been merely fancy. Sibyl Vane's brother had not come back to kill him. He had sailed away in his ship to founder in some winter sea. From him, at any rate, he was safe. Why, the man did not know who he was, could not know who he was. The mask of youth had saved him. And yet if it had been merely an illusion, how terrible it was to think that conscience could raise such fearful phantoms, and give them visible form, and make them move before one! What sort of life would his be if, day and night, shadows of his crime were to peer at him from silent corners, to mock him from secret places, to whisper in his ear as he sat at the feast, to wake him with icy fingers as he lay asleep! As the thought crept through his brain, he grew pale with terror, and the air seemed to him to have become suddenly colder. Oh! in what a wild hour of madness he had killed his friend! How ghastly the mere memory of the scene! He saw it all again. Each hideous detail came back to him with added horror. Out of the black cave of time, terrible and swathed in scarlet, rose the image of his sin. When Lord Henry came in at six o'clock, he found him crying as one whose heart will break. It was not till the third day that he ventured to go out. There was something in the clear, pine-scented air of that winter morning that seemed to bring him back his joyousness and his ardour for life. But it was not merely the physical conditions of environment that had caused the change. His own nature had revolted against the excess of anguish that had sought to maim and mar the perfection of its calm. With subtle and finely wrought temperaments it is always so. Their strong passions must either bruise or bend. They either slay the man, or themselves die. Shallow sorrows and shallow loves live on. The loves and sorrows that are great are destroyed by their own plenitude. Besides, he had convinced himself that he had been the victim of a terror-stricken imagination, and looked back now on his fears with something of pity and not a little of contempt. After breakfast, he walked with the duchess for an hour in the garden and then drove across the park to join the shooting-party. The crisp frost lay like salt upon the grass. The sky was an inverted cup of blue metal. A thin film of ice bordered the flat, reed-grown lake. At the corner of the pine-wood he caught sight of Sir Geoffrey Clouston, the duchess's brother, jerking two spent cartridges out of his gun. He jumped from the cart, and having told the groom to take the mare home, made his way towards his guest through the withered bracken and rough undergrowth. "Have you had good sport, Geoffrey?" he asked. "Not very good, Dorian. I think most of the birds have gone to the open. I dare say it will be better after lunch, when we get to new ground." Dorian strolled along by his side. The keen aromatic air, the brown and red lights that glimmered in the wood, the hoarse cries of the beaters ringing out from time to time, and the sharp snaps of the guns that followed, fascinated him and filled him with a sense of delightful freedom. He was dominated by the carelessness of happiness, by the high indifference of joy. Suddenly from a lumpy tussock of old grass some twenty yards in front of them, with black-tipped ears erect and long hinder limbs throwing it forward, started a hare. It bolted for a thicket of alders. Sir Geoffrey put his gun to his shoulder, but there was something in the animal's grace of movement that strangely charmed Dorian Gray, and he cried out at once, "Don't shoot it, Geoffrey. Let it live." "What nonsense, Dorian!" laughed his companion, and as the hare bounded into the thicket, he fired. There were two cries heard, the cry of a hare in pain, which is dreadful, the cry of a man in agony, which is worse. "Good heavens! I have hit a beater!" exclaimed Sir Geoffrey. "What an ass the man was to get in front of the guns! Stop shooting there!" he called out at the top of his voice. "A man is hurt." The head-keeper came running up with a stick in his hand. "Where, sir? Where is he?" he shouted. At the same time, the firing ceased along the line. "Here," answered Sir Geoffrey angrily, hurrying towards the thicket. "Why on earth don't you keep your men back? Spoiled my shooting for the day." Dorian watched them as they plunged into the alder-clump, brushing the lithe swinging branches aside. In a few moments they emerged, dragging a body after them into the sunlight. He turned away in horror. It seemed to him that misfortune followed wherever he went. He heard Sir Geoffrey ask if the man was really dead, and the affirmative answer of the keeper. The wood seemed to him to have become suddenly alive with faces. There was the trampling of myriad feet and the low buzz of voices. A great copper-breasted pheasant came beating through the boughs overhead. After a few moments--that were to him, in his perturbed state, like endless hours of pain--he felt a hand laid on his shoulder. He started and looked round. "Dorian," said Lord Henry, "I had better tell them that the shooting is stopped for to-day. It would not look well to go on." "I wish it were stopped for ever, Harry," he answered bitterly. "The whole thing is hideous and cruel. Is the man ...?" He could not finish the sentence. "I am afraid so," rejoined Lord Henry. "He got the whole charge of shot in his chest. He must have died almost instantaneously. Come; let us go home." They walked side by side in the direction of the avenue for nearly fifty yards without speaking. Then Dorian looked at Lord Henry and said, with a heavy sigh, "It is a bad omen, Harry, a very bad omen." "What is?" asked Lord Henry. "Oh! this accident, I suppose. My dear fellow, it can't be helped. It was the man's own fault. Why did he get in front of the guns? Besides, it is nothing to us. It is rather awkward for Geoffrey, of course. It does not do to pepper beaters. It makes people think that one is a wild shot. And Geoffrey is not; he shoots very straight. But there is no use talking about the matter." Dorian shook his head. "It is a bad omen, Harry. I feel as if something horrible were going to happen to some of us. To myself, perhaps," he added, passing his hand over his eyes, with a gesture of pain. The elder man laughed. "The only horrible thing in the world is _ennui_, Dorian. That is the one sin for which there is no forgiveness. But we are not likely to suffer from it unless these fellows keep chattering about this thing at dinner. I must tell them that the subject is to be tabooed. As for omens, there is no such thing as an omen. Destiny does not send us heralds. She is too wise or too cruel for that. Besides, what on earth could happen to you, Dorian? You have everything in the world that a man can want. There is no one who would not be delighted to change places with you." "There is no one with whom I would not change places, Harry. Don't laugh like that. I am telling you the truth. The wretched peasant who has just died is better off than I am. I have no terror of death. It is the coming of death that terrifies me. Its monstrous wings seem to wheel in the leaden air around me. Good heavens! don't you see a man moving behind the trees there, watching me, waiting for me?" Lord Henry looked in the direction in which the trembling gloved hand was pointing. "Yes," he said, smiling, "I see the gardener waiting for you. I suppose he wants to ask you what flowers you wish to have on the table to-night. How absurdly nervous you are, my dear fellow! You must come and see my doctor, when we get back to town." Dorian heaved a sigh of relief as he saw the gardener approaching. The man touched his hat, glanced for a moment at Lord Henry in a hesitating manner, and then produced a letter, which he handed to his master. "Her Grace told me to wait for an answer," he murmured. Dorian put the letter into his pocket. "Tell her Grace that I am coming in," he said, coldly. The man turned round and went rapidly in the direction of the house. "How fond women are of doing dangerous things!" laughed Lord Henry. "It is one of the qualities in them that I admire most. A woman will flirt with anybody in the world as long as other people are looking on." "How fond you are of saying dangerous things, Harry! In the present instance, you are quite astray. I like the duchess very much, but I don't love her." "And the duchess loves you very much, but she likes you less, so you are excellently matched." "You are talking scandal, Harry, and there is never any basis for scandal." "The basis of every scandal is an immoral certainty," said Lord Henry, lighting a cigarette. "You would sacrifice anybody, Harry, for the sake of an epigram." "The world goes to the altar of its own accord," was the answer. "I wish I could love," cried Dorian Gray with a deep note of pathos in his voice. "But I seem to have lost the passion and forgotten the desire. I am too much concentrated on myself. My own personality has become a burden to me. I want to escape, to go away, to forget. It was silly of me to come down here at all. I think I shall send a wire to Harvey to have the yacht got ready. On a yacht one is safe." "Safe from what, Dorian? You are in some trouble. Why not tell me what it is? You know I would help you." "I can't tell you, Harry," he answered sadly. "And I dare say it is only a fancy of mine. This unfortunate accident has upset me. I have a horrible presentiment that something of the kind may happen to me." "What nonsense!" "I hope it is, but I can't help feeling it. Ah! here is the duchess, looking like Artemis in a tailor-made gown. You see we have come back, Duchess." "I have heard all about it, Mr. Gray," she answered. "Poor Geoffrey is terribly upset. And it seems that you asked him not to shoot the hare. How curious!" "Yes, it was very curious. I don't know what made me say it. Some whim, I suppose. It looked the loveliest of little live things. But I am sorry they told you about the man. It is a hideous subject." "It is an annoying subject," broke in Lord Henry. "It has no psychological value at all. Now if Geoffrey had done the thing on purpose, how interesting he would be! I should like to know some one who had committed a real murder." "How horrid of you, Harry!" cried the duchess. "Isn't it, Mr. Gray? Harry, Mr. Gray is ill again. He is going to faint." Dorian drew himself up with an effort and smiled. "It is nothing, Duchess," he murmured; "my nerves are dreadfully out of order. That is all. I am afraid I walked too far this morning. I didn't hear what Harry said. Was it very bad? You must tell me some other time. I think I must go and lie down. You will excuse me, won't you?" They had reached the great flight of steps that led from the conservatory on to the terrace. As the glass door closed behind Dorian, Lord Henry turned and looked at the duchess with his slumberous eyes. "Are you very much in love with him?" he asked. She did not answer for some time, but stood gazing at the landscape. "I wish I knew," she said at last. He shook his head. "Knowledge would be fatal. It is the uncertainty that charms one. A mist makes things wonderful." "One may lose one's way." "All ways end at the same point, my dear Gladys." "What is that?" "Disillusion." "It was my _debut_ in life," she sighed. "It came to you crowned." "I am tired of strawberry leaves." "They become you." "Only in public." "You would miss them," said Lord Henry. "I will not part with a petal." "Monmouth has ears." "Old age is dull of hearing." "Has he never been jealous?" "I wish he had been." He glanced about as if in search of something. "What are you looking for?" she inquired. "The button from your foil," he answered. "You have dropped it." She laughed. "I have still the mask." "It makes your eyes lovelier," was his reply. She laughed again. Her teeth showed like white seeds in a scarlet fruit. Upstairs, in his own room, Dorian Gray was lying on a sofa, with terror in every tingling fibre of his body. Life had suddenly become too hideous a burden for him to bear. The dreadful death of the unlucky beater, shot in the thicket like a wild animal, had seemed to him to pre-figure death for himself also. He had nearly swooned at what Lord Henry had said in a chance mood of cynical jesting. At five o'clock he rang his bell for his servant and gave him orders to pack his things for the night-express to town, and to have the brougham at the door by eight-thirty. He was determined not to sleep another night at Selby Royal. It was an ill-omened place. Death walked there in the sunlight. The grass of the forest had been spotted with blood. Then he wrote a note to Lord Henry, telling him that he was going up to town to consult his doctor and asking him to entertain his guests in his absence. As he was putting it into the envelope, a knock came to the door, and his valet informed him that the head-keeper wished to see him. He frowned and bit his lip. "Send him in," he muttered, after some moments' hesitation. As soon as the man entered, Dorian pulled his chequebook out of a drawer and spread it out before him. "I suppose you have come about the unfortunate accident of this morning, Thornton?" he said, taking up a pen. "Yes, sir," answered the gamekeeper. "Was the poor fellow married? Had he any people dependent on him?" asked Dorian, looking bored. "If so, I should not like them to be left in want, and will send them any sum of money you may think necessary." "We don't know who he is, sir. That is what I took the liberty of coming to you about." "Don't know who he is?" said Dorian, listlessly. "What do you mean? Wasn't he one of your men?" "No, sir. Never saw him before. Seems like a sailor, sir." The pen dropped from Dorian Gray's hand, and he felt as if his heart had suddenly stopped beating. "A sailor?" he cried out. "Did you say a sailor?" "Yes, sir. He looks as if he had been a sort of sailor; tattooed on both arms, and that kind of thing." "Was there anything found on him?" said Dorian, leaning forward and looking at the man with startled eyes. "Anything that would tell his name?" "Some money, sir--not much, and a six-shooter. There was no name of any kind. A decent-looking man, sir, but rough-like. A sort of sailor we think." Dorian started to his feet. A terrible hope fluttered past him. He clutched at it madly. "Where is the body?" he exclaimed. "Quick! I must see it at once." "It is in an empty stable in the Home Farm, sir. The folk don't like to have that sort of thing in their houses. They say a corpse brings bad luck." "The Home Farm! Go there at once and meet me. Tell one of the grooms to bring my horse round. No. Never mind. I'll go to the stables myself. It will save time." In less than a quarter of an hour, Dorian Gray was galloping down the long avenue as hard as he could go. The trees seemed to sweep past him in spectral procession, and wild shadows to fling themselves across his path. Once the mare swerved at a white gate-post and nearly threw him. He lashed her across the neck with his crop. She cleft the dusky air like an arrow. The stones flew from her hoofs. At last he reached the Home Farm. Two men were loitering in the yard. He leaped from the saddle and threw the reins to one of them. In the farthest stable a light was glimmering. Something seemed to tell him that the body was there, and he hurried to the door and put his hand upon the latch. There he paused for a moment, feeling that he was on the brink of a discovery that would either make or mar his life. Then he thrust the door open and entered. On a heap of sacking in the far corner was lying the dead body of a man dressed in a coarse shirt and a pair of blue trousers. A spotted handkerchief had been placed over the face. A coarse candle, stuck in a bottle, sputtered beside it. Dorian Gray shuddered. He felt that his could not be the hand to take the handkerchief away, and called out to one of the farm-servants to come to him. "Take that thing off the face. I wish to see it," he said, clutching at the door-post for support. When the farm-servant had done so, he stepped forward. A cry of joy broke from his lips. The man who had been shot in the thicket was James Vane. He stood there for some minutes looking at the dead body. As he rode home, his eyes were full of tears, for he knew he was safe. CHAPTER 19 "There is no use your telling me that you are going to be good," cried Lord Henry, dipping his white fingers into a red copper bowl filled with rose-water. "You are quite perfect. Pray, don't change." Dorian Gray shook his head. "No, Harry, I have done too many dreadful things in my life. I am not going to do any more. I began my good actions yesterday." "Where were you yesterday?" "In the country, Harry. I was staying at a little inn by myself." "My dear boy," said Lord Henry, smiling, "anybody can be good in the country. There are no temptations there. That is the reason why people who live out of town are so absolutely uncivilized. Civilization is not by any means an easy thing to attain to. There are only two ways by which man can reach it. One is by being cultured, the other by being corrupt. Country people have no opportunity of being either, so they stagnate." "Culture and corruption," echoed Dorian. "I have known something of both. It seems terrible to me now that they should ever be found together. For I have a new ideal, Harry. I am going to alter. I think I have altered." "You have not yet told me what your good action was. Or did you say you had done more than one?" asked his companion as he spilled into his plate a little crimson pyramid of seeded strawberries and, through a perforated, shell-shaped spoon, snowed white sugar upon them. "I can tell you, Harry. It is not a story I could tell to any one else. I spared somebody. It sounds vain, but you understand what I mean. She was quite beautiful and wonderfully like Sibyl Vane. I think it was that which first attracted me to her. You remember Sibyl, don't you? How long ago that seems! Well, Hetty was not one of our own class, of course. She was simply a girl in a village. But I really loved her. I am quite sure that I loved her. All during this wonderful May that we have been having, I used to run down and see her two or three times a week. Yesterday she met me in a little orchard. The apple-blossoms kept tumbling down on her hair, and she was laughing. We were to have gone away together this morning at dawn. Suddenly I determined to leave her as flowerlike as I had found her." "I should think the novelty of the emotion must have given you a thrill of real pleasure, Dorian," interrupted Lord Henry. "But I can finish your idyll for you. You gave her good advice and broke her heart. That was the beginning of your reformation." "Harry, you are horrible! You mustn't say these dreadful things. Hetty's heart is not broken. Of course, she cried and all that. But there is no disgrace upon her. She can live, like Perdita, in her garden of mint and marigold." "And weep over a faithless Florizel," said Lord Henry, laughing, as he leaned back in his chair. "My dear Dorian, you have the most curiously boyish moods. Do you think this girl will ever be really content now with any one of her own rank? I suppose she will be married some day to a rough carter or a grinning ploughman. Well, the fact of having met you, and loved you, will teach her to despise her husband, and she will be wretched. From a moral point of view, I cannot say that I think much of your great renunciation. Even as a beginning, it is poor. Besides, how do you know that Hetty isn't floating at the present moment in some starlit mill-pond, with lovely water-lilies round her, like Ophelia?" "I can't bear this, Harry! You mock at everything, and then suggest the most serious tragedies. I am sorry I told you now. I don't care what you say to me. I know I was right in acting as I did. Poor Hetty! As I rode past the farm this morning, I saw her white face at the window, like a spray of jasmine. Don't let us talk about it any more, and don't try to persuade me that the first good action I have done for years, the first little bit of self-sacrifice I have ever known, is really a sort of sin. I want to be better. I am going to be better. Tell me something about yourself. What is going on in town? I have not been to the club for days." "The people are still discussing poor Basil's disappearance." "I should have thought they had got tired of that by this time," said Dorian, pouring himself out some wine and frowning slightly. "My dear boy, they have only been talking about it for six weeks, and the British public are really not equal to the mental strain of having more than one topic every three months. They have been very fortunate lately, however. They have had my own divorce-case and Alan Campbell's suicide. Now they have got the mysterious disappearance of an artist. Scotland Yard still insists that the man in the grey ulster who left for Paris by the midnight train on the ninth of November was poor Basil, and the French police declare that Basil never arrived in Paris at all. I suppose in about a fortnight we shall be told that he has been seen in San Francisco. It is an odd thing, but every one who disappears is said to be seen at San Francisco. It must be a delightful city, and possess all the attractions of the next world." "What do you think has happened to Basil?" asked Dorian, holding up his Burgundy against the light and wondering how it was that he could discuss the matter so calmly. "I have not the slightest idea. If Basil chooses to hide himself, it is no business of mine. If he is dead, I don't want to think about him. Death is the only thing that ever terrifies me. I hate it." "Why?" said the younger man wearily. "Because," said Lord Henry, passing beneath his nostrils the gilt trellis of an open vinaigrette box, "one can survive everything nowadays except that. Death and vulgarity are the only two facts in the nineteenth century that one cannot explain away. Let us have our coffee in the music-room, Dorian. You must play Chopin to me. The man with whom my wife ran away played Chopin exquisitely. Poor Victoria! I was very fond of her. The house is rather lonely without her. Of course, married life is merely a habit, a bad habit. But then one regrets the loss even of one's worst habits. Perhaps one regrets them the most. They are such an essential part of one's personality." Dorian said nothing, but rose from the table, and passing into the next room, sat down to the piano and let his fingers stray across the white and black ivory of the keys. After the coffee had been brought in, he stopped, and looking over at Lord Henry, said, "Harry, did it ever occur to you that Basil was murdered?" Lord Henry yawned. "Basil was very popular, and always wore a Waterbury watch. Why should he have been murdered? He was not clever enough to have enemies. Of course, he had a wonderful genius for painting. But a man can paint like Velasquez and yet be as dull as possible. Basil was really rather dull. He only interested me once, and that was when he told me, years ago, that he had a wild adoration for you and that you were the dominant motive of his art." "I was very fond of Basil," said Dorian with a note of sadness in his voice. "But don't people say that he was murdered?" "Oh, some of the papers do. It does not seem to me to be at all probable. I know there are dreadful places in Paris, but Basil was not the sort of man to have gone to them. He had no curiosity. It was his chief defect." "What would you say, Harry, if I told you that I had murdered Basil?" said the younger man. He watched him intently after he had spoken. "I would say, my dear fellow, that you were posing for a character that doesn't suit you. All crime is vulgar, just as all vulgarity is crime. It is not in you, Dorian, to commit a murder. I am sorry if I hurt your vanity by saying so, but I assure you it is true. Crime belongs exclusively to the lower orders. I don't blame them in the smallest degree. I should fancy that crime was to them what art is to us, simply a method of procuring extraordinary sensations." "A method of procuring sensations? Do you think, then, that a man who has once committed a murder could possibly do the same crime again? Don't tell me that." "Oh! anything becomes a pleasure if one does it too often," cried Lord Henry, laughing. "That is one of the most important secrets of life. I should fancy, however, that murder is always a mistake. One should never do anything that one cannot talk about after dinner. But let us pass from poor Basil. I wish I could believe that he had come to such a really romantic end as you suggest, but I can't. I dare say he fell into the Seine off an omnibus and that the conductor hushed up the scandal. Yes: I should fancy that was his end. I see him lying now on his back under those dull-green waters, with the heavy barges floating over him and long weeds catching in his hair. Do you know, I don't think he would have done much more good work. During the last ten years his painting had gone off very much." Dorian heaved a sigh, and Lord Henry strolled across the room and began to stroke the head of a curious Java parrot, a large, grey-plumaged bird with pink crest and tail, that was balancing itself upon a bamboo perch. As his pointed fingers touched it, it dropped the white scurf of crinkled lids over black, glasslike eyes and began to sway backwards and forwards. "Yes," he continued, turning round and taking his handkerchief out of his pocket; "his painting had quite gone off. It seemed to me to have lost something. It had lost an ideal. When you and he ceased to be great friends, he ceased to be a great artist. What was it separated you? I suppose he bored you. If so, he never forgave you. It's a habit bores have. By the way, what has become of that wonderful portrait he did of you? I don't think I have ever seen it since he finished it. Oh! I remember your telling me years ago that you had sent it down to Selby, and that it had got mislaid or stolen on the way. You never got it back? What a pity! it was really a masterpiece. I remember I wanted to buy it. I wish I had now. It belonged to Basil's best period. Since then, his work was that curious mixture of bad painting and good intentions that always entitles a man to be called a representative British artist. Did you advertise for it? You should." "I forget," said Dorian. "I suppose I did. But I never really liked it. I am sorry I sat for it. The memory of the thing is hateful to me. Why do you talk of it? It used to remind me of those curious lines in some play--Hamlet, I think--how do they run?-- "Like the painting of a sorrow, A face without a heart." Yes: that is what it was like." Lord Henry laughed. "If a man treats life artistically, his brain is his heart," he answered, sinking into an arm-chair. Dorian Gray shook his head and struck some soft chords on the piano. "'Like the painting of a sorrow,'" he repeated, "'a face without a heart.'" The elder man lay back and looked at him with half-closed eyes. "By the way, Dorian," he said after a pause, "'what does it profit a man if he gain the whole world and lose--how does the quotation run?--his own soul'?" The music jarred, and Dorian Gray started and stared at his friend. "Why do you ask me that, Harry?" "My dear fellow," said Lord Henry, elevating his eyebrows in surprise, "I asked you because I thought you might be able to give me an answer. That is all. I was going through the park last Sunday, and close by the Marble Arch there stood a little crowd of shabby-looking people listening to some vulgar street-preacher. As I passed by, I heard the man yelling out that question to his audience. It struck me as being rather dramatic. London is very rich in curious effects of that kind. A wet Sunday, an uncouth Christian in a mackintosh, a ring of sickly white faces under a broken roof of dripping umbrellas, and a wonderful phrase flung into the air by shrill hysterical lips--it was really very good in its way, quite a suggestion. I thought of telling the prophet that art had a soul, but that man had not. I am afraid, however, he would not have understood me." "Don't, Harry. The soul is a terrible reality. It can be bought, and sold, and bartered away. It can be poisoned, or made perfect. There is a soul in each one of us. I know it." "Do you feel quite sure of that, Dorian?" "Quite sure." "Ah! then it must be an illusion. The things one feels absolutely certain about are never true. That is the fatality of faith, and the lesson of romance. How grave you are! Don't be so serious. What have you or I to do with the superstitions of our age? No: we have given up our belief in the soul. Play me something. Play me a nocturne, Dorian, and, as you play, tell me, in a low voice, how you have kept your youth. You must have some secret. I am only ten years older than you are, and I am wrinkled, and worn, and yellow. You are really wonderful, Dorian. You have never looked more charming than you do to-night. You remind me of the day I saw you first. You were rather cheeky, very shy, and absolutely extraordinary. You have changed, of course, but not in appearance. I wish you would tell me your secret. To get back my youth I would do anything in the world, except take exercise, get up early, or be respectable. Youth! There is nothing like it. It's absurd to talk of the ignorance of youth. The only people to whose opinions I listen now with any respect are people much younger than myself. They seem in front of me. Life has revealed to them her latest wonder. As for the aged, I always contradict the aged. I do it on principle. If you ask them their opinion on something that happened yesterday, they solemnly give you the opinions current in 1820, when people wore high stocks, believed in everything, and knew absolutely nothing. How lovely that thing you are playing is! I wonder, did Chopin write it at Majorca, with the sea weeping round the villa and the salt spray dashing against the panes? It is marvellously romantic. What a blessing it is that there is one art left to us that is not imitative! Don't stop. I want music to-night. It seems to me that you are the young Apollo and that I am Marsyas listening to you. I have sorrows, Dorian, of my own, that even you know nothing of. The tragedy of old age is not that one is old, but that one is young. I am amazed sometimes at my own sincerity. Ah, Dorian, how happy you are! What an exquisite life you have had! You have drunk deeply of everything. You have crushed the grapes against your palate. Nothing has been hidden from you. And it has all been to you no more than the sound of music. It has not marred you. You are still the same." "I am not the same, Harry." "Yes, you are the same. I wonder what the rest of your life will be. Don't spoil it by renunciations. At present you are a perfect type. Don't make yourself incomplete. You are quite flawless now. You need not shake your head: you know you are. Besides, Dorian, don't deceive yourself. Life is not governed by will or intention. Life is a question of nerves, and fibres, and slowly built-up cells in which thought hides itself and passion has its dreams. You may fancy yourself safe and think yourself strong. But a chance tone of colour in a room or a morning sky, a particular perfume that you had once loved and that brings subtle memories with it, a line from a forgotten poem that you had come across again, a cadence from a piece of music that you had ceased to play--I tell you, Dorian, that it is on things like these that our lives depend. Browning writes about that somewhere; but our own senses will imagine them for us. There are moments when the odour of _lilas blanc_ passes suddenly across me, and I have to live the strangest month of my life over again. I wish I could change places with you, Dorian. The world has cried out against us both, but it has always worshipped you. It always will worship you. You are the type of what the age is searching for, and what it is afraid it has found. I am so glad that you have never done anything, never carved a statue, or painted a picture, or produced anything outside of yourself! Life has been your art. You have set yourself to music. Your days are your sonnets." Dorian rose up from the piano and passed his hand through his hair. "Yes, life has been exquisite," he murmured, "but I am not going to have the same life, Harry. And you must not say these extravagant things to me. You don't know everything about me. I think that if you did, even you would turn from me. You laugh. Don't laugh." "Why have you stopped playing, Dorian? Go back and give me the nocturne over again. Look at that great, honey-coloured moon that hangs in the dusky air. She is waiting for you to charm her, and if you play she will come closer to the earth. You won't? Let us go to the club, then. It has been a charming evening, and we must end it charmingly. There is some one at White's who wants immensely to know you--young Lord Poole, Bournemouth's eldest son. He has already copied your neckties, and has begged me to introduce him to you. He is quite delightful and rather reminds me of you." "I hope not," said Dorian with a sad look in his eyes. "But I am tired to-night, Harry. I shan't go to the club. It is nearly eleven, and I want to go to bed early." "Do stay. You have never played so well as to-night. There was something in your touch that was wonderful. It had more expression than I had ever heard from it before." "It is because I am going to be good," he answered, smiling. "I am a little changed already." "You cannot change to me, Dorian," said Lord Henry. "You and I will always be friends." "Yet you poisoned me with a book once. I should not forgive that. Harry, promise me that you will never lend that book to any one. It does harm." "My dear boy, you are really beginning to moralize. You will soon be going about like the converted, and the revivalist, warning people against all the sins of which you have grown tired. You are much too delightful to do that. Besides, it is no use. You and I are what we are, and will be what we will be. As for being poisoned by a book, there is no such thing as that. Art has no influence upon action. It annihilates the desire to act. It is superbly sterile. The books that the world calls immoral are books that show the world its own shame. That is all. But we won't discuss literature. Come round to-morrow. I am going to ride at eleven. We might go together, and I will take you to lunch afterwards with Lady Branksome. She is a charming woman, and wants to consult you about some tapestries she is thinking of buying. Mind you come. Or shall we lunch with our little duchess? She says she never sees you now. Perhaps you are tired of Gladys? I thought you would be. Her clever tongue gets on one's nerves. Well, in any case, be here at eleven." "Must I really come, Harry?" "Certainly. The park is quite lovely now. I don't think there have been such lilacs since the year I met you." "Very well. I shall be here at eleven," said Dorian. "Good night, Harry." As he reached the door, he hesitated for a moment, as if he had something more to say. Then he sighed and went out. CHAPTER 20 It was a lovely night, so warm that he threw his coat over his arm and did not even put his silk scarf round his throat. As he strolled home, smoking his cigarette, two young men in evening dress passed him. He heard one of them whisper to the other, "That is Dorian Gray." He remembered how pleased he used to be when he was pointed out, or stared at, or talked about. He was tired of hearing his own name now. Half the charm of the little village where he had been so often lately was that no one knew who he was. He had often told the girl whom he had lured to love him that he was poor, and she had believed him. He had told her once that he was wicked, and she had laughed at him and answered that wicked people were always very old and very ugly. What a laugh she had!--just like a thrush singing. And how pretty she had been in her cotton dresses and her large hats! She knew nothing, but she had everything that he had lost. When he reached home, he found his servant waiting up for him. He sent him to bed, and threw himself down on the sofa in the library, and began to think over some of the things that Lord Henry had said to him. Was it really true that one could never change? He felt a wild longing for the unstained purity of his boyhood--his rose-white boyhood, as Lord Henry had once called it. He knew that he had tarnished himself, filled his mind with corruption and given horror to his fancy; that he had been an evil influence to others, and had experienced a terrible joy in being so; and that of the lives that had crossed his own, it had been the fairest and the most full of promise that he had brought to shame. But was it all irretrievable? Was there no hope for him? Ah! in what a monstrous moment of pride and passion he had prayed that the portrait should bear the burden of his days, and he keep the unsullied splendour of eternal youth! All his failure had been due to that. Better for him that each sin of his life had brought its sure swift penalty along with it. There was purification in punishment. Not "Forgive us our sins" but "Smite us for our iniquities" should be the prayer of man to a most just God. The curiously carved mirror that Lord Henry had given to him, so many years ago now, was standing on the table, and the white-limbed Cupids laughed round it as of old. He took it up, as he had done on that night of horror when he had first noted the change in the fatal picture, and with wild, tear-dimmed eyes looked into its polished shield. Once, some one who had terribly loved him had written to him a mad letter, ending with these idolatrous words: "The world is changed because you are made of ivory and gold. The curves of your lips rewrite history." The phrases came back to his memory, and he repeated them over and over to himself. Then he loathed his own beauty, and flinging the mirror on the floor, crushed it into silver splinters beneath his heel. It was his beauty that had ruined him, his beauty and the youth that he had prayed for. But for those two things, his life might have been free from stain. His beauty had been to him but a mask, his youth but a mockery. What was youth at best? A green, an unripe time, a time of shallow moods, and sickly thoughts. Why had he worn its livery? Youth had spoiled him. It was better not to think of the past. Nothing could alter that. It was of himself, and of his own future, that he had to think. James Vane was hidden in a nameless grave in Selby churchyard. Alan Campbell had shot himself one night in his laboratory, but had not revealed the secret that he had been forced to know. The excitement, such as it was, over Basil Hallward's disappearance would soon pass away. It was already waning. He was perfectly safe there. Nor, indeed, was it the death of Basil Hallward that weighed most upon his mind. It was the living death of his own soul that troubled him. Basil had painted the portrait that had marred his life. He could not forgive him that. It was the portrait that had done everything. Basil had said things to him that were unbearable, and that he had yet borne with patience. The murder had been simply the madness of a moment. As for Alan Campbell, his suicide had been his own act. He had chosen to do it. It was nothing to him. A new life! That was what he wanted. That was what he was waiting for. Surely he had begun it already. He had spared one innocent thing, at any rate. He would never again tempt innocence. He would be good. As he thought of Hetty Merton, he began to wonder if the portrait in the locked room had changed. Surely it was not still so horrible as it had been? Perhaps if his life became pure, he would be able to expel every sign of evil passion from the face. Perhaps the signs of evil had already gone away. He would go and look. He took the lamp from the table and crept upstairs. As he unbarred the door, a smile of joy flitted across his strangely young-looking face and lingered for a moment about his lips. Yes, he would be good, and the hideous thing that he had hidden away would no longer be a terror to him. He felt as if the load had been lifted from him already. He went in quietly, locking the door behind him, as was his custom, and dragged the purple hanging from the portrait. A cry of pain and indignation broke from him. He could see no change, save that in the eyes there was a look of cunning and in the mouth the curved wrinkle of the hypocrite. The thing was still loathsome--more loathsome, if possible, than before--and the scarlet dew that spotted the hand seemed brighter, and more like blood newly spilled. Then he trembled. Had it been merely vanity that had made him do his one good deed? Or the desire for a new sensation, as Lord Henry had hinted, with his mocking laugh? Or that passion to act a part that sometimes makes us do things finer than we are ourselves? Or, perhaps, all these? And why was the red stain larger than it had been? It seemed to have crept like a horrible disease over the wrinkled fingers. There was blood on the painted feet, as though the thing had dripped--blood even on the hand that had not held the knife. Confess? Did it mean that he was to confess? To give himself up and be put to death? He laughed. He felt that the idea was monstrous. Besides, even if he did confess, who would believe him? There was no trace of the murdered man anywhere. Everything belonging to him had been destroyed. He himself had burned what had been below-stairs. The world would simply say that he was mad. They would shut him up if he persisted in his story.... Yet it was his duty to confess, to suffer public shame, and to make public atonement. There was a God who called upon men to tell their sins to earth as well as to heaven. Nothing that he could do would cleanse him till he had told his own sin. His sin? He shrugged his shoulders. The death of Basil Hallward seemed very little to him. He was thinking of Hetty Merton. For it was an unjust mirror, this mirror of his soul that he was looking at. Vanity? Curiosity? Hypocrisy? Had there been nothing more in his renunciation than that? There had been something more. At least he thought so. But who could tell? ... No. There had been nothing more. Through vanity he had spared her. In hypocrisy he had worn the mask of goodness. For curiosity's sake he had tried the denial of self. He recognized that now. But this murder--was it to dog him all his life? Was he always to be burdened by his past? Was he really to confess? Never. There was only one bit of evidence left against him. The picture itself--that was evidence. He would destroy it. Why had he kept it so long? Once it had given him pleasure to watch it changing and growing old. Of late he had felt no such pleasure. It had kept him awake at night. When he had been away, he had been filled with terror lest other eyes should look upon it. It had brought melancholy across his passions. Its mere memory had marred many moments of joy. It had been like conscience to him. Yes, it had been conscience. He would destroy it. He looked round and saw the knife that had stabbed Basil Hallward. He had cleaned it many times, till there was no stain left upon it. It was bright, and glistened. As it had killed the painter, so it would kill the painter's work, and all that that meant. It would kill the past, and when that was dead, he would be free. It would kill this monstrous soul-life, and without its hideous warnings, he would be at peace. He seized the thing, and stabbed the picture with it. There was a cry heard, and a crash. The cry was so horrible in its agony that the frightened servants woke and crept out of their rooms. Two gentlemen, who were passing in the square below, stopped and looked up at the great house. They walked on till they met a policeman and brought him back. The man rang the bell several times, but there was no answer. Except for a light in one of the top windows, the house was all dark. After a time, he went away and stood in an adjoining portico and watched. "Whose house is that, Constable?" asked the elder of the two gentlemen. "Mr. Dorian Gray's, sir," answered the policeman. They looked at each other, as they walked away, and sneered. One of them was Sir Henry Ashton's uncle. Inside, in the servants' part of the house, the half-clad domestics were talking in low whispers to each other. Old Mrs. Leaf was crying and wringing her hands. Francis was as pale as death. After about a quarter of an hour, he got the coachman and one of the footmen and crept upstairs. They knocked, but there was no reply. They called out. Everything was still. Finally, after vainly trying to force the door, they got on the roof and dropped down on to the balcony. The windows yielded easily--their bolts were old. When they entered, they found hanging upon the wall a splendid portrait of their master as they had last seen him, in all the wonder of his exquisite youth and beauty. Lying on the floor was a dead man, in evening dress, with a knife in his heart. He was withered, wrinkled, and loathsome of visage. It was not till they had examined the rings that they recognized who it was. End of Project Gutenberg's The Picture of Dorian Gray, by Oscar Wilde *** END OF THIS PROJECT GUTENBERG EBOOK THE PICTURE OF DORIAN GRAY *** ***** This file should be named 174.txt or 174.zip ***** This and all associated files of various formats will be found in: http://www.gutenberg.org/1/7/174/ Produced by Judith Boss. HTML version by Al Haines. Updated editions will replace the previous one--the old editions will be renamed. Creating the works from public domain print editions means that no one owns a United States copyright in these works, so the Foundation (and you!) can copy and distribute it in the United States without permission and without paying copyright royalties. Special rules, set forth in the General Terms of Use part of this license, apply to copying and distributing Project Gutenberg-tm electronic works to protect the PROJECT GUTENBERG-tm concept and trademark. Project Gutenberg is a registered trademark, and may not be used if you charge for the eBooks, unless you receive specific permission. If you do not charge anything for copies of this eBook, complying with the rules is very easy. You may use this eBook for nearly any purpose such as creation of derivative works, reports, performances and research. They may be modified and printed and given away--you may do practically ANYTHING with public domain eBooks. Redistribution is subject to the trademark license, especially commercial redistribution. *** START: FULL LICENSE *** THE FULL PROJECT GUTENBERG LICENSE PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK To protect the Project Gutenberg-tm mission of promoting the free distribution of electronic works, by using or distributing this work (or any other work associated in any way with the phrase "Project Gutenberg"), you agree to comply with all the terms of the Full Project Gutenberg-tm License (available with this file or online at http://gutenberg.net/license). Section 1. General Terms of Use and Redistributing Project Gutenberg-tm electronic works 1.A. By reading or using any part of this Project Gutenberg-tm electronic work, you indicate that you have read, understand, agree to and accept all the terms of this license and intellectual property (trademark/copyright) agreement. If you do not agree to abide by all the terms of this agreement, you must cease using and return or destroy all copies of Project Gutenberg-tm electronic works in your possession. If you paid a fee for obtaining a copy of or access to a Project Gutenberg-tm electronic work and you do not agree to be bound by the terms of this agreement, you may obtain a refund from the person or entity to whom you paid the fee as set forth in paragraph 1.E.8. 1.B. "Project Gutenberg" is a registered trademark. It may only be used on or associated in any way with an electronic work by people who agree to be bound by the terms of this agreement. There are a few things that you can do with most Project Gutenberg-tm electronic works even without complying with the full terms of this agreement. See paragraph 1.C below. There are a lot of things you can do with Project Gutenberg-tm electronic works if you follow the terms of this agreement and help preserve free future access to Project Gutenberg-tm electronic works. See paragraph 1.E below. 1.C. The Project Gutenberg Literary Archive Foundation ("the Foundation" or PGLAF), owns a compilation copyright in the collection of Project Gutenberg-tm electronic works. Nearly all the individual works in the collection are in the public domain in the United States. If an individual work is in the public domain in the United States and you are located in the United States, we do not claim a right to prevent you from copying, distributing, performing, displaying or creating derivative works based on the work as long as all references to Project Gutenberg are removed. Of course, we hope that you will support the Project Gutenberg-tm mission of promoting free access to electronic works by freely sharing Project Gutenberg-tm works in compliance with the terms of this agreement for keeping the Project Gutenberg-tm name associated with the work. You can easily comply with the terms of this agreement by keeping this work in the same format with its attached full Project Gutenberg-tm License when you share it without charge with others. 1.D. The copyright laws of the place where you are located also govern what you can do with this work. Copyright laws in most countries are in a constant state of change. If you are outside the United States, check the laws of your country in addition to the terms of this agreement before downloading, copying, displaying, performing, distributing or creating derivative works based on this work or any other Project Gutenberg-tm work. The Foundation makes no representations concerning the copyright status of any work in any country outside the United States. 1.E. Unless you have removed all references to Project Gutenberg: 1.E.1. The following sentence, with active links to, or other immediate access to, the full Project Gutenberg-tm License must appear prominently whenever any copy of a Project Gutenberg-tm work (any work on which the phrase "Project Gutenberg" appears, or with which the phrase "Project Gutenberg" is associated) is accessed, displayed, performed, viewed, copied or distributed: This eBook is for the use of anyone anywhere at no cost and with almost no restrictions whatsoever. You may copy it, give it away or re-use it under the terms of the Project Gutenberg License included with this eBook or online at www.gutenberg.net 1.E.2. If an individual Project Gutenberg-tm electronic work is derived from the public domain (does not contain a notice indicating that it is posted with permission of the copyright holder), the work can be copied and distributed to anyone in the United States without paying any fees or charges. If you are redistributing or providing access to a work with the phrase "Project Gutenberg" associated with or appearing on the work, you must comply either with the requirements of paragraphs 1.E.1 through 1.E.7 or obtain permission for the use of the work and the Project Gutenberg-tm trademark as set forth in paragraphs 1.E.8 or 1.E.9. 1.E.3. If an individual Project Gutenberg-tm electronic work is posted with the permission of the copyright holder, your use and distribution must comply with both paragraphs 1.E.1 through 1.E.7 and any additional terms imposed by the copyright holder. Additional terms will be linked to the Project Gutenberg-tm License for all works posted with the permission of the copyright holder found at the beginning of this work. 1.E.4. Do not unlink or detach or remove the full Project Gutenberg-tm License terms from this work, or any files containing a part of this work or any other work associated with Project Gutenberg-tm. 1.E.5. Do not copy, display, perform, distribute or redistribute this electronic work, or any part of this electronic work, without prominently displaying the sentence set forth in paragraph 1.E.1 with active links or immediate access to the full terms of the Project Gutenberg-tm License. 1.E.6. You may convert to and distribute this work in any binary, compressed, marked up, nonproprietary or proprietary form, including any word processing or hypertext form. However, if you provide access to or distribute copies of a Project Gutenberg-tm work in a format other than "Plain Vanilla ASCII" or other format used in the official version posted on the official Project Gutenberg-tm web site (www.gutenberg.net), you must, at no additional cost, fee or expense to the user, provide a copy, a means of exporting a copy, or a means of obtaining a copy upon request, of the work in its original "Plain Vanilla ASCII" or other form. Any alternate format must include the full Project Gutenberg-tm License as specified in paragraph 1.E.1. 1.E.7. Do not charge a fee for access to, viewing, displaying, performing, copying or distributing any Project Gutenberg-tm works unless you comply with paragraph 1.E.8 or 1.E.9. 1.E.8. You may charge a reasonable fee for copies of or providing access to or distributing Project Gutenberg-tm electronic works provided that - You pay a royalty fee of 20% of the gross profits you derive from the use of Project Gutenberg-tm works calculated using the method you already use to calculate your applicable taxes. The fee is owed to the owner of the Project Gutenberg-tm trademark, but he has agreed to donate royalties under this paragraph to the Project Gutenberg Literary Archive Foundation. Royalty payments must be paid within 60 days following each date on which you prepare (or are legally required to prepare) your periodic tax returns. Royalty payments should be clearly marked as such and sent to the Project Gutenberg Literary Archive Foundation at the address specified in Section 4, "Information about donations to the Project Gutenberg Literary Archive Foundation." - You provide a full refund of any money paid by a user who notifies you in writing (or by e-mail) within 30 days of receipt that s/he does not agree to the terms of the full Project Gutenberg-tm License. You must require such a user to return or destroy all copies of the works possessed in a physical medium and discontinue all use of and all access to other copies of Project Gutenberg-tm works. - You provide, in accordance with paragraph 1.F.3, a full refund of any money paid for a work or a replacement copy, if a defect in the electronic work is discovered and reported to you within 90 days of receipt of the work. - You comply with all other terms of this agreement for free distribution of Project Gutenberg-tm works. 1.E.9. If you wish to charge a fee or distribute a Project Gutenberg-tm electronic work or group of works on different terms than are set forth in this agreement, you must obtain permission in writing from both the Project Gutenberg Literary Archive Foundation and Michael Hart, the owner of the Project Gutenberg-tm trademark. Contact the Foundation as set forth in Section 3 below. 1.F. 1.F.1. Project Gutenberg volunteers and employees expend considerable effort to identify, do copyright research on, transcribe and proofread public domain works in creating the Project Gutenberg-tm collection. Despite these efforts, Project Gutenberg-tm electronic works, and the medium on which they may be stored, may contain "Defects," such as, but not limited to, incomplete, inaccurate or corrupt data, transcription errors, a copyright or other intellectual property infringement, a defective or damaged disk or other medium, a computer virus, or computer codes that damage or cannot be read by your equipment. 1.F.2. LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for the "Right of Replacement or Refund" described in paragraph 1.F.3, the Project Gutenberg Literary Archive Foundation, the owner of the Project Gutenberg-tm trademark, and any other party distributing a Project Gutenberg-tm electronic work under this agreement, disclaim all liability to you for damages, costs and expenses, including legal fees. YOU AGREE THAT YOU HAVE NO REMEDIES FOR NEGLIGENCE, STRICT LIABILITY, BREACH OF WARRANTY OR BREACH OF CONTRACT EXCEPT THOSE PROVIDED IN PARAGRAPH F3. YOU AGREE THAT THE FOUNDATION, THE TRADEMARK OWNER, AND ANY DISTRIBUTOR UNDER THIS AGREEMENT WILL NOT BE LIABLE TO YOU FOR ACTUAL, DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE OR INCIDENTAL DAMAGES EVEN IF YOU GIVE NOTICE OF THE POSSIBILITY OF SUCH DAMAGE. 1.F.3. LIMITED RIGHT OF REPLACEMENT OR REFUND - If you discover a defect in this electronic work within 90 days of receiving it, you can receive a refund of the money (if any) you paid for it by sending a written explanation to the person you received the work from. If you received the work on a physical medium, you must return the medium with your written explanation. The person or entity that provided you with the defective work may elect to provide a replacement copy in lieu of a refund. If you received the work electronically, the person or entity providing it to you may choose to give you a second opportunity to receive the work electronically in lieu of a refund. If the second copy is also defective, you may demand a refund in writing without further opportunities to fix the problem. 1.F.4. Except for the limited right of replacement or refund set forth in paragraph 1.F.3, this work is provided to you 'AS-IS' WITH NO OTHER WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTIBILITY OR FITNESS FOR ANY PURPOSE. 1.F.5. Some states do not allow disclaimers of certain implied warranties or the exclusion or limitation of certain types of damages. If any disclaimer or limitation set forth in this agreement violates the law of the state applicable to this agreement, the agreement shall be interpreted to make the maximum disclaimer or limitation permitted by the applicable state law. The invalidity or unenforceability of any provision of this agreement shall not void the remaining provisions. 1.F.6. INDEMNITY - You agree to indemnify and hold the Foundation, the trademark owner, any agent or employee of the Foundation, anyone providing copies of Project Gutenberg-tm electronic works in accordance with this agreement, and any volunteers associated with the production, promotion and distribution of Project Gutenberg-tm electronic works, harmless from all liability, costs and expenses, including legal fees, that arise directly or indirectly from any of the following which you do or cause to occur: (a) distribution of this or any Project Gutenberg-tm work, (b) alteration, modification, or additions or deletions to any Project Gutenberg-tm work, and (c) any Defect you cause. Section 2. Information about the Mission of Project Gutenberg-tm Project Gutenberg-tm is synonymous with the free distribution of electronic works in formats readable by the widest variety of computers including obsolete, old, middle-aged and new computers. It exists because of the efforts of hundreds of volunteers and donations from people in all walks of life. Volunteers and financial support to provide volunteers with the assistance they need, is critical to reaching Project Gutenberg-tm's goals and ensuring that the Project Gutenberg-tm collection will remain freely available for generations to come. In 2001, the Project Gutenberg Literary Archive Foundation was created to provide a secure and permanent future for Project Gutenberg-tm and future generations. To learn more about the Project Gutenberg Literary Archive Foundation and how your efforts and donations can help, see Sections 3 and 4 and the Foundation web page at http://www.pglaf.org. Section 3. Information about the Project Gutenberg Literary Archive Foundation The Project Gutenberg Literary Archive Foundation is a non profit 501(c)(3) educational corporation organized under the laws of the state of Mississippi and granted tax exempt status by the Internal Revenue Service. The Foundation's EIN or federal tax identification number is 64-6221541. Its 501(c)(3) letter is posted at http://pglaf.org/fundraising. Contributions to the Project Gutenberg Literary Archive Foundation are tax deductible to the full extent permitted by U.S. federal laws and your state's laws. The Foundation's principal office is located at 4557 Melan Dr. S. Fairbanks, AK, 99712., but its volunteers and employees are scattered throughout numerous locations. Its business office is located at 809 North 1500 West, Salt Lake City, UT 84116, (801) 596-1887, email business@pglaf.org. Email contact links and up to date contact information can be found at the Foundation's web site and official page at http://pglaf.org For additional contact information: Dr. Gregory B. Newby Chief Executive and Director gbnewby@pglaf.org Section 4. Information about Donations to the Project Gutenberg Literary Archive Foundation Project Gutenberg-tm depends upon and cannot survive without wide spread public support and donations to carry out its mission of increasing the number of public domain and licensed works that can be freely distributed in machine readable form accessible by the widest array of equipment including outdated equipment. Many small donations ($1 to $5,000) are particularly important to maintaining tax exempt status with the IRS. The Foundation is committed to complying with the laws regulating charities and charitable donations in all 50 states of the United States. Compliance requirements are not uniform and it takes a considerable effort, much paperwork and many fees to meet and keep up with these requirements. We do not solicit donations in locations where we have not received written confirmation of compliance. To SEND DONATIONS or determine the status of compliance for any particular state visit http://pglaf.org While we cannot and do not solicit contributions from states where we have not met the solicitation requirements, we know of no prohibition against accepting unsolicited donations from donors in such states who approach us with offers to donate. International donations are gratefully accepted, but we cannot make any statements concerning tax treatment of donations received from outside the United States. U.S. laws alone swamp our small staff. Please check the Project Gutenberg Web pages for current donation methods and addresses. Donations are accepted in a number of other ways including including checks, online payments and credit card donations. To donate, please visit: http://pglaf.org/donate Section 5. General Information About Project Gutenberg-tm electronic works. Professor Michael S. Hart is the originator of the Project Gutenberg-tm concept of a library of electronic works that could be freely shared with anyone. For thirty years, he produced and distributed Project Gutenberg-tm eBooks with only a loose network of volunteer support. Project Gutenberg-tm eBooks are often created from several printed editions, all of which are confirmed as Public Domain in the U.S. unless a copyright notice is included. Thus, we do not necessarily keep eBooks in compliance with any particular paper edition. Most people start at our Web site which has the main PG search facility: http://www.gutenberg.net This Web site includes information about Project Gutenberg-tm, including how to make donations to the Project Gutenberg Literary Archive Foundation, how to help produce our new eBooks, and how to subscribe to our email newsletter to hear about new eBooks. libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-h2-long-poll/000077500000000000000000000000001476025525100302365ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-h2-long-poll/CMakeLists.txt000066400000000000000000000014171476025525100330010ustar00rootroot00000000000000project(lws-minimal-http-server-h2-long-poll C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-server-h2-long-poll) set(SRCS minimal-http-server.c) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) require_lws_config(LWS_WITH_HTTP2 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-h2-long-poll/README.md000066400000000000000000000010231476025525100315110ustar00rootroot00000000000000# lws minimal http server ## build ``` $ cmake . && make ``` ## Commandline Options Option|Meaning ---|--- -d|Set logging verbosity -s|Serve using TLS selfsigned cert (ie, connect to it with https://...) -v|Connection validity use 3s / 10s instead of default 5m / 5m10s ## usage ``` $ ./lws-minimal-http-server [2018/03/04 09:30:02:7986] USER: LWS minimal http server | visit http://localhost:7681 [2018/03/04 09:30:02:7986] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 on ``` Visit http://localhost:7681 localhost-100y.cert000066400000000000000000000040721476025525100335200ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-h2-long-poll-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-h2-long-poll/localhost-100y.key000066400000000000000000000063101476025525100334270ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- minimal-http-server.c000066400000000000000000000076011476025525100342360ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-h2-long-poll/* * lws-minimal-http-server-h2-long-poll * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates an h2 server that supports "long poll" * immortal client connections. For simplicity it doesn't serve * any regular files, you can add a mount to do it if you want. * * The protocol keeps the long poll h2 stream open, and sends * the time on the stream once per minute. Normally idle h2 * connections are closed by default within 30s, so this demonstrates * the stream and network connection are operating as "immortal" * on both sides. * * See http-client/minimal-http-client-h2-long-poll for the * client example that connects and transitions the stream to the * immortal long poll mode. */ #include #include #include static int interrupted; struct pss { struct lws *wsi; lws_sorted_usec_list_t sul; char pending; }; static const lws_retry_bo_t retry = { .secs_since_valid_ping = 5, .secs_since_valid_hangup = 10, }; static void sul_cb(lws_sorted_usec_list_t *sul) { struct pss *pss = (struct pss *)lws_container_of(sul, struct pss, sul); pss->pending = 1; lws_callback_on_writable(pss->wsi); /* interval 1min... longer than any normal timeout */ lws_sul_schedule(lws_get_context(pss->wsi), 0, &pss->sul, sul_cb, 60 * LWS_US_PER_SEC); } static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct pss * pss = (struct pss *)user; uint8_t buf[LWS_PRE + LWS_RECOMMENDED_MIN_HEADER_SPACE], *start = &buf[LWS_PRE], *p = start, *end = buf + sizeof(buf) - 1; int m, n; switch (reason) { case LWS_CALLBACK_HTTP: lwsl_user("%s: connect\n", __func__); pss->wsi = wsi; if (lws_add_http_common_headers(wsi, HTTP_STATUS_OK, "text/html", LWS_ILLEGAL_HTTP_CONTENT_LEN, /* no content len */ &p, end)) return 1; if (lws_finalize_write_http_header(wsi, start, &p, end)) return 1; sul_cb(&pss->sul); return 0; case LWS_CALLBACK_CLOSED_HTTP: if (!pss) break; lws_sul_cancel(&pss->sul); break; case LWS_CALLBACK_HTTP_WRITEABLE: if (!pss->pending) break; n = lws_snprintf((char *)p, sizeof(buf) - LWS_PRE, "%llu", (unsigned long long)lws_now_usecs()); m = lws_write(wsi, p, (unsigned int)n, LWS_WRITE_HTTP); if (m < n) { lwsl_err("ERROR %d writing to socket\n", n); return -1; } break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static struct lws_protocols protocols[] = { { "http", callback_http, sizeof(struct pss), 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server h2 long poll\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; #if defined(LWS_WITH_TLS) info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; #endif info.protocols = protocols; info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_VH_H2_HALF_CLOSED_LONG_POLL | LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; /* the default validity check is 5m / 5m10s... -v = 5s / 10s */ if (lws_cmdline_option(argc, argv, "-v")) info.retry_and_idle_policy = &retry; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-mimetypes/000077500000000000000000000000001476025525100300405ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-mimetypes/CMakeLists.txt000066400000000000000000000013411476025525100325770ustar00rootroot00000000000000project(lws-minimal-http-server-mimetypes C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-server-mimetypes) set(SRCS minimal-http-server-mimetypes.c) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-mimetypes/README.md000066400000000000000000000007771476025525100313320ustar00rootroot00000000000000# lws minimal http server mimetypes This is the same as the basic minimal http server, but it demonstrates how to add support for extra mimetypes to a mount. ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server [2018/03/04 09:30:02:7986] USER: LWS minimal http server | visit http://localhost:7681 [2018/03/04 09:30:02:7986] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 on ``` Visit http://localhost:7681 and click on the link to download the test.tar.bz2 file. minimal-http-server-mimetypes.c000066400000000000000000000051161476025525100360510ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-mimetypes/* * lws-minimal-http-server * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws. * * To keep it simple, it serves stuff from the subdirectory * "./mount-origin" of the directory it was started in. * You can change that by changing mount.origin below. */ #include #include #include static int interrupted; static const struct lws_protocol_vhost_options pvo_mime = { NULL, /* "next" pvo linked-list */ NULL, /* "child" pvo linked-list */ ".bz2", /* file suffix to match */ "application/x-bzip2" /* mimetype to use */ }; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ &pvo_mime, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.error_document_404 = "/404.html"; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-mimetypes/mount-origin/000077500000000000000000000000001476025525100324675ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-mimetypes/mount-origin/404.html000066400000000000000000000002271476025525100336650ustar00rootroot00000000000000

    404

    Sorry, that file doesn't exist. favicon.ico000066400000000000000000000025761476025525100345430ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-mimetypes/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’index.html000066400000000000000000000014321476025525100344050ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-mimetypes/mount-origin
    Hello from the minimal http server + mimetypes example.
    This shows how to teach a mount new bindings between file
    suffix and mimetype used to serve it.

    Lws has a bunch of built-in ones, but you can add as many
    as you like when defining the mount.

    For example, lws doesn't know the suffix [.tar].bz2
    implies the mimetype application/x-bzip2, but we taught
    this mount about that relationship in the example code, so it
    knows how to serve this example test.tar.bz2. libwebsockets.org-logo.svg000066400000000000000000000226061476025525100375230ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-mimetypes/mount-origin image/svg+xml strict-csp.svg000066400000000000000000000302361476025525100352300ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-mimetypes/mount-origin test.tar.bz2000066400000000000000000000166451476025525100346070ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-mimetypes/mount-originBZh91AY&SY«×;a’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’ą’=ƾw<łŗz÷}Śß}Öūٽóėėęöō÷ß}ﯽńļ}óµīvww{ŽŃõ·µļ¼w×ßm÷{¶÷®õ{ĖĶī½Ū·_FMJ{"zA<›I£ż)ꀌMM¦š`MO'„<›PÓSĄC'©3MO&£&™©š§MźjoIšzM¦£& MmO 1ž¤ō&G¦SŠeD³MSō§ƒ$ĆDžL4LL§¦ž¦i=&FG”=FLh¢<“4&“É©é“ ?Q¦M¤iźž™O4Ó@jy4Š1L›MLh¤ńOQźza#ÓMO&šbič™!ŌōLČSõÄu '©øœm<ļåćauĘyW{ͧ‘śöĢ­ ŗRØA”Ļ^Œ\ŽŃ¦}&ėrμ‘²£%f•¹ÖŽé?i’É“tŪĀżõ¼éO­†Ę%)‚V ŖQĢhu­_£®¾˜šä&VÄ †ų¦cĮŚž¢OŸ:2fōmą|©øY]ńA1Ę£aw&F³#>Ļ“’ké0t¢9:﬿½“A7 ‚Ÿ;šŪæAÜõ‚č—Gmą¼·ŃćZœ‘ČĻ”v¶Œš©ś—Ā/idŲD‹Ń ³ ēÅ”5"¢?ė›MGé%y–źŸżźŁ•9‚Æ«ü³ä„ćJgŽ™„@h æ…“)XæēnĄ?nʗß[ °q‹T÷9q€œKka’^R8%–Uä&™­4ĀļŻQVd÷m8żĘų8÷ČHėĒF)Œ(3ōŻÓÓ„ ™µaõōčīéĄTŅŻ«*|ϳm¤®²ņ΃˟pjŠž]˜łõĮB  !a‡‰{n\Ė‡ ƵŁ;“å#¢ƒ‰d/“ޜƒL᢬6¼r„Ķ€BŽü  ›1ÅU z“öŠ®]ó=ż/“畲Ūō˜Ža޲ ż{ķĪfŖZ2"_ŠB_ŹRf_³y]s {£óŽŌu ÆZ±p.Æ“/”›5²®~Ņ˲œHŸYəVG灶t„K2…IČ9Ģ~F’ŒéEYܳyÓäēć©aŪ®bEHÖ'›·ā[]Ż‹?Ż(Äˌ<+ŗSLUu8ŁÓ AŅ ©Ūą,Ā$F’ȑī&T–ąŹˆņSŁž×Ų—+cn™¤®U}dՎ÷ČĻÕ»›mGņDuC½fwĄ\Ōś2¶P³ėƒ¶‹rrż¾3nnڊ3¬!Ż%c™=ķØC°f_ʜ&E4Ɩ(Nl”Ø:I“pģŲŽ„„ŚšĒŚÅ‚“jąńā£Āwł²%·³ć«‘½ŹŃå”j½_ćn%”ž?R,„¤¤ōĘųń”¶ĶÆ^’2»¼ńt!a_Y`]göCSs¬<!­”7.ĘBźozįB)£ą8&M[&»øoÖņ‰õZ2ńa„Żżņż ™ ńֻ#ŚĒ²õ)ĆęõĪ”ü›µ&\RAŌs‚kśnvõhę0uib‘Ef“ĮKjy¬g–r {›füNǜĒ©łk3_›ū’£ļK’ ŸGł‹ūES¾9Z«:ūęś=5éśŪל8"Px“PĢf#h”e@B;d~±0žH "ŲŪĘR>/Ļżių,¼¬Yp‹ѽKM~Ķ2Į,˜ÆŁečåDōP2įäIq¢dłq‡Óš^ׄu~łĄ@tn»ü±ßL¾ź “ąlūŹć$©5W y¬) B¬*źÆł^Ŗ, s`Ųį‡"żv®ōĒŌytŹqājXecCH*ā.Ū.¬ÉńŻÜ&Fœ‘–¬”‚fĖ„oY’æ¤ė€xžCœŲ0R$@Ą(·„²É¢·®ėvĀN‘ÕT‡·±ńž#Š„‰-Ÿ}ą€ {Fą>QõJe”3†”¾”Ą÷«cMā»ÓlŃÜļ”bsĖvV;Mw ’m-U$«öę>*Ņ®¼¬ Ä-œB4²¢Ŗ™OŻ‡dōņt£“[ʒN=Ķ¢ÅZxŽ|¼¬‘ż‚\Ūņ÷f[4£qzyJ/©X^„ŖÖū:ģž•nRZø0k€r@UX!ŽüN‚ä"ĮyĢžÉ9%Ł[µwŃ©› żUO„\ŲĄŠó<ģķü “SĒž»Ś‹ā©G3_’Šs ué.jī×}“rÆé’Šņ„pĢ1o€ž ŸVe‡²Ä[ÉĖnNOś«Ń4t9œČˆVĀÅ;–ž…,Hj†³½Ō~ĮćŌŠ—šō漈ÖÖ}·mEgn>£ydgBMŹvPNdčül«ż}¾»Oj#õōH0Ŗ ”Æjs0‚ōŚ'“)2ż³Ń“ćœSŠ$ؖ…#ŌZ™ˆ‚#ĀĪ£ļ‘˜-篂¦s®u潞d9٤“µÕ;(§m‡2Ÿ0w¢8Ų[‚É K²„‰Jńg«vg§.w}HĮæ$ŗ]­4.Ś’ŗź@0>:|ićŁ^GAFūöیGw*X°±Ų·YÅNę(Čh+‰ūĀJh±ÉnŪ„½h™Å¾e°µ©÷`’ģģćņ …ƒnÅ.³µ&=ž”ßĶ# rcœGÜ5éH®Ž/Ø9Ēž*ā0CŠŃÓvk ģ‰ž²¦Ļ¹Ø¦[-„\ø{$!2×hžgÓ»!MĒ–Ąh\ŗĖdz¼|šė‹„Čƒ‘ur‰ŗ*-%ÉrÖk…WQ–qEmezi«Ŗ6É Ŗ\Į÷ĪŚ5D1'Bw/^ æ²qAf æLĄO{|čĆÓģ²T5§æ)n4}ECøĢ’*.C—ÉbÄVź¤×Ƕno KłŠ\²næžÉkŪł2Ń»ƒJ DÉEóŒęS‚^ŌŹzfc§Įp–WzŠĢ\öRh·i9•õĮŗś5“k裓žB>d”¦hļ8R™5Ą¹§üįYA%Šm¾'\+©"ĀųāÉIŖÕpNéŪŅ>:S°Ę·£:ŲK拵J’§ZRĀvSß^!5›OT‹)vĮŌōYÆPüpŖÜŽ_~ŗ›p$Āüé;6ž-üłŃ ޱA7…¢mć$MųQė°))¦ņg½½sĒBéü:ų!-ō¶ŅźdV±8[~‚JZ?³<óqš-óCŒ01p›ī9l3ÕJøG˜¾€soĖ'Ŗü^ź6ÓŗŖē÷=l&^ÖxW jĘHqš‹č41›`åa€4ś÷ūа˜] ®Ō šp-5dfS%³›ÜµƒpīRn#äŌ:žC/'Ä„ hHMVÜ=³-qō‡ŃFū”-éh„{õy€fŗėœV>­rū“Ųyƒū_ŌVnØjŲ:tE¦®Ē:Æt|^®ņ3ŽęĻpQ“)wŪ`)Ē£a”`īüŗōĘq¶vb–Ų..]sé’Mčäü›ŌqB*͈€jŪč¤ŪlT@•¦člP3Ł5Co3Ķ c¢wĮįŁŸef“ŪI+IYPžĀUĄ…Q0e3µ`ł-ō0Mļ Ģ×é>&Ø;wU¦ĘÓK“é¶žåQčńc vÖF9āgīU»¦’JV4„\EéuŠ9oF\t7‚`ˆ›^&æd…ššGŗąŠŌlTźÕ¬Ē`HA'©vx™ ”n}:¶J•²»eQģq±6PßauAĄ9ŠšŠ©˜­’k3]”»+oŻ®Ųp =œ/~Ö»÷^|ŽCFė†źRIĪ‘”Ō hŽ™OPÉä>«dŸV¶hļß~ƒ™L󾓏’>t¤›ŠBżKŌŹ s»j²ō¬āīŗ“˜mEæ Ü’īmŁĒ°lŅćŚ?ęŒ,żP;]ežoÓŲćcށĀįČņ2¢6QéR c @ŁP”1zźI&©5: {ioHW(Hļł3œgԁ擱ś.×^Üņgtdü£ÉĶ¢>9DęēŌ‡œ?_BW«ÄōOĒ—Üóčbõ\€Ž–Ć€Ē ‘ߊ*¼*KĻb1÷f0żBѕ‘ņ%Š *['šĪųŌ@žsCˆœZĶ«J6ĖXŲbÜĄ1åa­nČĪ'®‡~4Ņū¾Ń„Ž«JõĘZq˜'Ž“8„ŽY«ónł•±&{xUäåķÆōSäŠG+ śŽėŲYĮ=+y½Š ó%ŪŌ5ÅŌł‹ nI)QtśØŲƹj'®Į-,‚²gŹ£/æēÉ$!üĆł}r¬–Ę-lš¾7D! ·¾xwĘ^Éi3 ŒRN­ö.–”ć_ø?ÅłŽ@Oķąh~Ì+å[O¾ĄÄ燔UĆĒĀRŽXĵˆ·†ĪĀ 7 µ5ż.¹óM˜!‹‹×k“…mw€ˆ«6Ynՙ•«ųZ Õ+—>JšĀæS°vąMbŻ ĀՄÆČ}Ķ6ŖZCéI|Ž·Iņ3Źg5¼=Ÿ_/ebĆßӖ{ÄY8ēń:ōTkģpk\¦”˜;č‹ 4 ešµö®’Ļ”›r(ŌłWńi„žĢ/9P.€8ŽŖ)?ėwu T³śM«wĮ¦”¤×"›Eļ…{2ļ>Ē4/!  ǹą&‚¾„;+0”·KSCʗS >Ó©ŹÕKb€jĻūaG!¹½ÆzNČÅŖ­­ āt±5p•hŒ|kŽ>”©fŗ1‡ßo¤J6Vź„1oˆåŽ™ƒ˜ŻrQ1Z}(‹¦/ģ¶āi’reDÕć描Ÿ3µOƒmF!ųjkŠą]]`¼WųcöƐÓ(ść‚żšµK e¹Źó:ŽÆČ’Tdųó=„nEsTā5ęģ½9ü'&ān“Ļ˜LŁgégå N°$ƒ Jźå#ɰ’„)® kƉ3}­„łiH©Cų&ųÖ AäJ[Xµ:“ ķģd-y^V„)ꝭ&w8=”ū+‡™%råhĮDŸTœ6˜čĆ0ȳ•µžl6Dī †I÷–Õ0ņ %{YŠ”Żn—~›OļēŻĒŽYĮĒdž‹’.kć¹&øęCŅÕ}/õõa¶€µšžæĪ›䏞“‡­)@źiyéĆé](}yR3kņęf*ĶØd¾\\ź„6ØłĆĀ{uĢÓŃX¦Ķ£‰ Œ8É !}Ö}~gŪĄYćśā'$øÜ¼ź~ImzXvße«#Ašuh,<‘Ķ ±[ķ‚ģG„Ļš-i"É¢&Ēy™'‚¤%·L±t›Źk*‡ÆX1 gR “Töé2ƒ!hPVn[ÓZĄs ųõČąX÷ÆWÖ Oj<½³{yÆ#™ā ekd† ĆT šø\ė3{źćh¢³Ź6®W:<½|†¢ż^†ū„HŌm”+¾Ś9~jĪB~Ōŗ:toqÄu±¦]©ČĶC{«õū©ė„»®Ō9“*æ*9āUč«›ęś!}„É–—įį©»ö¤ł#诨”™Ø:†ŁóhĖkˆsĪŠCČć…X_f%Њ¢Ąl*³DŅæČSz"—ĢO#e»Õ£¶š+x‰ŸÖśwŌ_†·|æœ 'q§Tß7ķ¤ ÅlĄū[‹ė“tńĻ ŅØń؟·JĮ·™óɖ”Ó‰AéSÓ:Ų”Z• žZ2•3«šIćŽ:źĆöbļ)°˜o_æx¶gᩳ…Ćķ¢f²,āŗų[—Š8ÄHÖ°ö8>ŽŖ&W÷|%ģ9ļo•Ūr:Q’Ƒ5;”ŃŃ{\–F÷%¬„ķęk0PÕ~#8 yśį”›ńb€‚PĖJ+?īkW³ęŌę+Ö„ōV#7"ųõ5ō\5 ÅZxQ!C­µ¹ “4b ü'{kĪE Į/µ¢5=Ī”No4£²| mõ ę.ŲÜ]©w²hĪ—©·×ƒ,š8Į ¬Į č·NčBjŲ ”·ö.œk/²0^.÷+ī=‚9,J:÷ÆEõBß-ö•ĘļUx° µš–…ŲĪ įŹPāóŠc4J¼üYĒ•W³vĄ^ėH6æ!ÖwYÄĢ7µ…ß»W×ĀąFp®įüūFmbĻhІū$x•Õä(–ģh…9óұ|Ōn§ ”ÜÄūŖ¹ČŽīACń昗Ń~«¹ŖŲ– õĶŁy_Äř·YóƒÅ'§B žfĀ5Ķ M‰Z¶VKwU&|®ī•é+ÓӦ謹3ŁCœßöSÓ-n‰s,ׇōq„B¹¼5š`µ×5*±{¦ŹÜ‡lr܂fMšĮ ąwöWdœ’[ | ė8ļ%Ū'¾ź k‹W¦yꈚXWų|Debug verbosity in decimal, eg, -d15 --die-after-vhost | For testing failure handling ``` $ ./lws-minimal-http-server-multivhost [2018/03/16 09:37:20:0866] USER: LWS minimal http server-multivhost | visit http://localhost:7681 / 7682 [2018/03/16 09:37:20:0867] NOTICE: Creating Vhost 'localhost1' port 7681, 1 protocols, IPv6 off [2018/03/16 09:37:20:0868] NOTICE: Creating Vhost 'localhost2' port 7682, 1 protocols, IPv6 off [2018/03/16 09:37:20:0869] NOTICE: Creating Vhost 'localhost3' port 7682, 1 protocols, IPv6 off [2018/03/16 09:37:20:0869] NOTICE: using listen skt from vhost localhost2 ``` Visit http://localhost:7681 and http://localhost:7682 minimal-http-server.c000066400000000000000000000127101476025525100342370ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-multivhost/* * lws-minimal-http-server-multivhost * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws. * * To keep it simple, it serves stuff from the subdirectory * "./mount-origin" of the directory it was started in. * You can change that by changing mount.origin below. */ #include #include #include static int interrupted; static const struct lws_http_mount mount_localhost1 = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin-localhost1", /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }, mount_localhost2 = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin-localhost2", /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }, mount_localhost3 = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin-localhost3", /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } void vh_destruction_notification(struct lws_vhost *vh, void *arg) { lwsl_user("%s: called, arg: %p\n", __func__, arg); } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; struct lws_vhost *new_vhost; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server-multivhost | visit http://localhost:7681 / 7682\n"); signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; /* * Because of LWS_SERVER_OPTION_EXPLICIT_VHOSTS, this only creates * the context and no longer creates a default vhost */ context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } /* it's our job now to create the vhosts we want: * * - "localhost1" listen on 7681 and serve ./mount-origin-localhost1/ * - "localhost2" listen on 7682 and serve ./mount-origin-localhost2/ * - "localhost3" share 7682 and serve ./mount-origin-localhost3/ * * Note lws supports dynamic vhost creation and destruction at runtime. * When using multi-vhost with your own protocols, you must provide a * pvo for each vhost naming each protocol you want enabled on it. * minimal-ws-server-threads demonstrates how to provide pvos. */ info.port = 7681; info.mounts = &mount_localhost1; info.error_document_404 = "/404.html"; info.vhost_name = "localhost1"; if (!lws_create_vhost(context, &info)) { lwsl_err("Failed to create first vhost\n"); goto bail; } info.port = 7682; info.mounts = &mount_localhost2; info.error_document_404 = "/404.html"; info.vhost_name = "localhost2"; if (!lws_cmdline_option(argc, argv, "--kill-7682")) { if (!lws_create_vhost(context, &info)) { lwsl_err("Failed to create second vhost\n"); goto bail; } } /* a second vhost listens on port 7682 */ info.mounts = &mount_localhost3; info.error_document_404 = "/404.html"; info.vhost_name = "localhost3"; info.finalize = vh_destruction_notification; info.finalize_arg = NULL; new_vhost = lws_create_vhost(context, &info); if (!new_vhost) { lwsl_err("Failed to create third vhost\n"); goto bail; } if (lws_cmdline_option(argc, argv, "--kill-7682")) lws_vhost_destroy(new_vhost); if (lws_cmdline_option(argc, argv, "--die-after-vhost")) { lwsl_warn("bailing after creating vhosts\n"); goto bail; } while (n >= 0 && !interrupted) n = lws_service(context, 0); bail: lws_context_destroy(context); return 0; } mount-origin-localhost1/000077500000000000000000000000001476025525100346615ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-multivhost404.html000066400000000000000000000002521476025525100360550ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-multivhost/mount-origin-localhost1

    404 (vhost localhost1)

    Sorry, that file doesn't exist. favicon.ico000066400000000000000000000025761476025525100370140ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-multivhost/mount-origin-localhost1h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’index.html000066400000000000000000000007131476025525100366570ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-multivhost/mount-origin-localhost1
    Hello from the minimal http server multivhost example.

    This was served from ./mount-origin-localhost1/index.html

    You can confirm the 404 page handler by going to this nonexistant page. libwebsockets.org-logo.svg000066400000000000000000000226061476025525100417740ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-multivhost/mount-origin-localhost1 image/svg+xml strict-csp.svg000066400000000000000000000302361476025525100375010ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-multivhost/mount-origin-localhost1 mount-origin-localhost2/000077500000000000000000000000001476025525100346625ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-multivhost404.html000066400000000000000000000002521476025525100360560ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-multivhost/mount-origin-localhost2

    404 (vhost localhost2)

    Sorry, that file doesn't exist. favicon.ico000066400000000000000000000025761476025525100370150ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-multivhost/mount-origin-localhost2h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’index.html000066400000000000000000000007111476025525100366560ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-multivhost/mount-origin-localhost2
    Hello from the minimal http server multivhost example.

    This was served from ./mount-origin-localhost2/index.html

    You can confirm the 404 page handler by going to this nonexistant page. libwebsockets.org-logo.svg000066400000000000000000000226061476025525100417750ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-multivhost/mount-origin-localhost2 image/svg+xml strict-csp.svg000066400000000000000000000302361476025525100375020ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-multivhost/mount-origin-localhost2 mount-origin-localhost3/000077500000000000000000000000001476025525100346635ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-multivhost404.html000066400000000000000000000002521476025525100360570ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-multivhost/mount-origin-localhost3

    404 (vhost localhost3)

    Sorry, that file doesn't exist. favicon.ico000066400000000000000000000025761476025525100370160ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-multivhost/mount-origin-localhost3h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’index.html000066400000000000000000000007111476025525100366570ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-multivhost/mount-origin-localhost3
    Hello from the minimal http server multivhost example.

    This was served from ./mount-origin-localhost3/index.html

    You can confirm the 404 page handler by going to this nonexistant page. libwebsockets.org-logo.svg000066400000000000000000000226061476025525100417760ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-multivhost/mount-origin-localhost3 image/svg+xml strict-csp.svg000066400000000000000000000302361476025525100375030ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-multivhost/mount-origin-localhost3 libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-proxy/000077500000000000000000000000001476025525100272055ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-proxy/CMakeLists.txt000066400000000000000000000014741476025525100317530ustar00rootroot00000000000000project(lws-minimal-http-server-proxy C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-server-proxy) set(SRCS minimal-http-server-proxy.c) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) require_lws_config(LWS_WITH_HTTP_PROXY 1 requirements) require_lws_config(LWS_WITH_TLS 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-proxy/localhost-100y.cert000066400000000000000000000040721476025525100325460ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-proxy/localhost-100y.key000066400000000000000000000063101476025525100323760ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- minimal-http-server-proxy.c000066400000000000000000000044701476025525100343650ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-proxy/* * lws-minimal-http-server-proxy * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal tls reverse proxy */ #include #include #include static int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "warmcat.com/", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_HTTPS, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server proxy | visit https://localhost:7681\n"); signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.error_document_404 = "/404.html"; info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-proxy/mount-origin/000077500000000000000000000000001476025525100316345ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-proxy/mount-origin/404.html000066400000000000000000000002271476025525100330320ustar00rootroot00000000000000

    404

    Sorry, that file doesn't exist. libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-proxy/mount-origin/favicon.ico000066400000000000000000000025761476025525100337670ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-proxy/mount-origin/http2.png000066400000000000000000000166131476025525100334120ustar00rootroot00000000000000‰PNG  IHDR@qeO„Ö pHYsCC,ę·ētEXtSoftwarewww.inkscape.org›ī<IDATxœķœ{”žU}ļ?ūņ\ŽĖd2!!!@ˆ:Ķ1Cė… ˆZ ļ§.EcO½j„zŖmķQj»°ķ$­ÖćŖÖ„e)еœ.XWµŠ*„F«Ų(1š ™dBfęĶ{y.ūržxžwnļ;™,Īj¾k͚™żüžēŁū÷ģ½÷ §p §p §p §p §š_b9ļ½Ų±cĒ,ķųų8;wīŪŹ’ļŲ½[lówģŽ-¶ŽyÖ¬»öģ[FFÜĪyĻŪ¶m›gĒóļŲś’—Ąž=bošJFG­T,““žŻ»}łbß„ķög¼hŸ{ĮĪ¢ū¾Ż»wūńńq/„š,%ą½ģÜ)÷·ZA”e2 CWQJ©<—2ŠÄdšśµRŖf­&E§#d’54¤l»Öf¹Rašē¢ĒIÓ_QŹ5£”!‘I§£”s “RER:!e @8'­µ&TŖŃt.Y”µ{°IāOņÓy.kCC¦jE£(k„UŹuǐ­XaŻÄDņƒuė̶mŪ\?Fōe€qĒķ·«_žÅ/*YµŗRv:CV)ćņ<ŌR†6MµUJ[Øy.}Yom,Y!¤¬;Ą įźB„Mļ3å}‚RŲM½¢°“¦Y½VSi§³Z z!œBäĪéż ©u3—ņēŽ˜‰)hoyĒ;Ģb&ōgĄöķ’±±čH»½>˲M&ĖĪ>-ŽW 8—SÆ×P*<ĪY‚@!„Ą{O ”µ@© R ¬Ķ‘2Bʹ(å±Vļ5RfX[|9­«(‘ē)BXŅ“M§Ó$Ļćœ”ÕŹØ×k“įœÅū€Zm­C¼ļIbš>&MŪ>ü‹@ėļW¢hļŹ›āā‹Ķü±ź~_×gس’dČdŁęÕ•ŹłńʍgQ­ŽE’ pHéĆ:R*œóx/Ńŗų-„B‹Ru¼·@„sŗ\W)` ö ‡Rē$ŽĖŁ6)Œ18—#D†sMŒÉqĪ eŽ”1Ī8—U¬³Ićœ%Ir²,#Ig„©9ŠlīC©+÷ģiyļÅüYŠĆ¼gĖĪb2MWäƌĘk֜ɹšF¢h5q„$RJ@Ŗüŗ!BtŸS Ö{‰µA9p0¦`āģkR ŒhķqĪE!Ī„0Q“ƒ£;ē4Ž+¤ōX[ōĒZƒ9R¶€P®\9%¦§G•1?gd¤gĘ÷2 D;I¬Kµ:D®Aė5H#„BJ‰” 8Wtŗ@÷+z„@ń[)A¹ŁEŻNtļéŽļ CˆņŁļ!<Ö:œó(%f TA!˜]JåT*R&Ōė5/„ńÖz&&cĄžVKā\¤ĆŠE­”Ŗ– „”B)(Ö0³_½h+jm·ĆąÜ”Å’ŌšdĮÜĖ :÷s}S ¬u%c¤¦ *QDcŗĻōXK9;Aą"ÉĄ­õw‘-Ė!0Ÿü¤*•Ō;gšŽP©0ū…”’’āå_~šƒ<ėÜså_łŠŸ\²é9ĻGåSż(ÓiŹUų@?Ͼķ×_łJź+Wrżõ×÷\›’ĻUļ}Æ8ļĀ Å[.æœC‡ͶŒŒš’æ˜W^ɳ6mņå*–ÖēņŠŹ įĪīӁ¾3`4ŠÜ0Ģl§“£µGK:¼h-:SSS4Žgö+—Ģ›žžfjjŠ4ĻIJŗ”Õn#ƒ`YŗNšŠééi:„‚Õ«W099É-·ŽŹ7o»’Ę7Äęg<ƗĖT‘e‚8Žā0 [IéZm€%ą=ūÆ»N‘$Cu„Ö&Hiń^~8f÷‚īß]ĮŪ~ó7yĶĖ^B`…`Ó¹ēšƽ–]TLĘZ­†”’?ū£?ą¾ūļ絯=÷Žy'§­Z_śöļ~€(Š8²oxĻæ~ļ{¼źµÆeff†}ę3|ŗčO±Īłé4mT‡†š­éi»<€hõjiÖµ8ސ2œŻŻ‹ĶmĮ {2ļŚšš0ĆĆĆ̾g¬[Ēӟö“äkŹ/z¬Łœm;ēœs8}͚%Ÿ¼ą‚ xłĖ_Ī 7ÜĄīūļ/Ś•rYęHÓć‘RM:öcĒģØX8 ś2@NM ­”±Ž{„PHYˆ¤ņ„]“ŪmvŻw߂Ncüæ$–ŗ¶˜ĮĖA)<@½Vc^m)9“Qź˜ŃŚló‹ŸŲBå¹Ī…Q„aŒ÷Ž+mL÷ļŁĆłĻžņ|<čĆē÷žĒŠītøé–[øūī»xÅ„—ā“ųX!rœóĀūĢf™ßY«Įœųś1ąŽ;d^©DY£Q;])÷²TjzÖOEœ¹~ż‚>šĄXŪCzR‘e¾š… Ś.Łŗ•w_qEw™Œ…BSÕĆĆrۚ5]½”æ&čA09éÓ45U„Zkӊm¼·(%°V ēnŪ¼™ļß}÷=ąō³Ībrrņ‰;Pˆł‹ž’|“Ölܰ—^|1’ć²ĖPB:÷)=Žœ3BZģžœ”Ž{+ęͪްfØG‘m>l‡½—d€#Ļ%aø¤]żd" Cīŗķ¶Bóƒā·sÅĄ½„āeQ*%ĻS)e–g™ėtzśæ` ąŁŗÕ9pĄćœ”ҁFŹ`V}Ŗb”8.žŃ:4ÖĘÕ8®īMÓ‘ÕÓ°cĒĘŖU†!©µfÖLõ=čS…¦š¾J…^ˆµćĒulŒœļŁ‚>K`||ÜóµÆłģȁēŽ[„š(åž¶aƒæō×~MŒ>ć ovŽæčEĢ4¬?ćŒ—„÷\zÉ%œvŚiKö}E­VŠyO† ®¾j—^r a×vč@ Å„(E”*}Z”“”į™gÅų¶m~ūöķóˆ{˜ēŁ;ć“Ń83ʲ­gž…¬]{>ZŸÖu” ˆ¢b­ĘĻ`ņś‰Bw($'M}éKheæąČ‘ķæ÷Ž„^’®®Õ8kŪ¶d¾? W‚dbĀiļm†ŠBddaK{ü©‹łĀŚBzļ¬R.Čs§¦¦–·ą£Č„|¶©pw-­ö>UPx†<…OAb­DJ9Qb­īd™]<[{Fä]€Cßń>+}׳/zŖ£š9F14E5ƔķYó½ŸŌ{¶ŒŒˆŠŚhDė:APÅūbיSxžźKĮ£”4Z‹¶1¹P*Ż»w/Ž/ģz—X«%sctT«i” š>,ļė†ēóœģē?'č!ņƒq>/V™Z¹µjśŒ3ˆŸżldį€yōPŖŠēö­ćs<3& ¼7“QäÄ Öąa„T’$]äQŹ”»ķÜŻ0"¹ļ>7ßLė;ß!łĮpĪņƒŠšų¼óŗäF~ė·ĪīēĒYÖ®łī~UC™÷-Ēvˆ ]aīu=ٱCUAÖ!,°»ņ·\«Åō—¾Ä±k®!żÉOļ|ʐÜ{/ɽ÷rä#!|Å+Ų°cqéL9!ę÷©p‹Å”]–å€crņÄŖ0ć愍†Bˆ•„a čśż»;l’w§)\}5?Ū¼™CļyĻcü"ēȒ韸’Ā Łżśž‰0·7y¼‘cL µī;e{°cCJ9éœAėŸ/D7Š#śMżÖæü {/ø€‰÷æsōč£åŠĪį?žqī|Žó°ķörä]&ŲīßRŹŠćwMMI)}ūL kL„tieYœ›»Ń˜bGĢs_uū_łJ²Ÿżģ±īQ`õO~ĀWĘĘH–bB”wc…ųRq.„ŖŒŒōLį¾ XQDnR:Ę“ŹŒ.7ŗĘ-·pōŸXr?x"°éČ®}į {ÄYœ“h­B„a„Ŗ”ƒž¾öŪ|:Į"0"„²Ž›2ę.Źé椠FFXóÉOņ¶zļv_¹ńFīśÖ·ųõW½ją=ż‚ 8żC˜~-pß8×°ŲL/ee yžeŠz]ūE¾ĶŒ2ŠD»ÓY9†UāxBTqNHŲšÖ·ņŸł ?øēžG5šłxĘ»ŽE>44­&x`®”+¦»Ź[‘^“GJ…6 ķīf³Ēš]rŃ)­£ ^A©bo Sŗ˜NȄ7¼īuœuę™  „Ö¬zéK¦wIBš¦s ŽŒčŚÖŚNžŪ0Ė\gjŹ/–½K­–0E`1,“ ,ŽēĖĶ€“…xÓ¦i;@Ņe@©ŸĢ¢›œ%e;¶ō¹æw Œ{«µ —Rd„Vµ“Č<ÉÕź@thÕ®eNSu(e±6Da[d¬Į ĘPnŒÕZ%I:8—ĪŅ>IĮsäČ@t‡ØZ%z4Ü")K)C…u­WÄBÄūĆP-^ĮżUį0t™”¼÷(UB¤œKO›Ė {B`&&¢{ŲøaĆ\ĆBMŠkeØTą!޲lłŠŖ°ö>BˆBł ‚9qų$ ݳg ŗū€_³šŠ%Päxo‡1IÓŚD:—Ł‘‘Į!U©ÖåyŠ1-ņÜĶfr>Į¦Æ™˜ ™Ÿur|ø`±R$T:“Nńސē@<«Ļ3ś*BĪūV’e Žž“ł¦šāŻö$¢ło Ää6p/š«/xĮ\ćÜL°@Ž÷-¼÷6˼ɲüGI²üčfŽ+cōt–u°¶C‘‚ś¤L’Ę?žć@tßź«Vqхö'ĀQäfåa(į½\Ń'u„ļˆff“‚ØÖõ ‚ė‰ >KĮLLŠüēˆöą5Æ~5Z/’ĪÅ>„ń>Fˆ„bĄ )Åʵk—×ļŁ±6y®b„B” ‚R#~#ĮS÷wxc–„;Ü ¼ķ­o]x”H‘ó„ķ"D8Ž””Ź‘ļ?|xysxčŒ3„‡8·vmT©Ōč&/Kih‚'™>M™ŗīŗhožŪ3ŸÉ‹%JĶE ʛs¾™$ Ī%k5·¼OŠĪιÕT«u“ĮŚz yĀ>’Ōß’=y™ļw"ąVą]q‹Ć\eBG×u/)–‚WA ]éXŒlŁ“ÉRęBʜ””a”АRį}8» N2|’pōcˆö Y­ņ?ßüꮋ]†®0 W¤ DžŚĘxå}ˆµŠ"WP/H<:ÉÓ’Ųg?;Š×Ļ€k€w¾żķ¬,Sp{ś#„@Y*qt¼")ŻŽ>õ½ ˜œōa˜\Ź£¤é ֚2éHĢśObxÜ>Ģä‡?<ķ @³^ēO®¼ri¢ł)3E‚gT‹ćŲ(µbtŻŗTįmŪ|dm”u}6Ež¼€CW^‰™Y–®\ ¼ēŻļ^:znšcœxßi$I"ĖöÖė=Įž±Į¼V3NE×=kœd4o»ĘM7 Dū9ĄóŽ?ųƒŽ‹óŽ…Ö);“¶¬måyޘyč!·¼GØ¬Ī“AŠ ŻnŅ­‘ņ¤ŖĄ¶Ńąįßū½h®¶’éŸĪ¹Ąū”k uÓd‹ ×T;7é“īlqÅR°‘MŒiam^–æ™RĒV3—"÷1ń¾÷‘?ųą@“’Ųtī¹¼ėļXxa±6ZX¬Żś¢”N§M’4|µW¬YćxĶk³OMéÜt~üųŽO"D0³zĄćō’źW™žā¢ż:p—\ó·ŪĻńы";Ä£TŽÓ“ŪĒ…÷²11!YIb ¬‡Ą*eŽ43äy»¬Ą8)Ó?č!žīļD;Eńõß~łå¼`¹ŗ„ł³”p޼·äyx?-ŪmŃ-Ųž~ Q­¦ˆĻ\±b BŌ1¦B”U=.&ų<ēĄå—cyd śæ¢õėłČ ±‚"mÖē2’¤™¦iGH)V¬Yӕ'ö īܹSŚĘ¬¢RYA®Ā¹ ĘĢ„Č<ĘĶpāŹ+ißsĻ@“7ß‚k?õ©o|óQX¬Eu©”„T†@#Ļ%kֈe}‚»ĖZżĄ{I&e"“g˜łņ—9vķµŃ>B!ó_ł²— ž’¹JR÷“"ŽWcVÅŽ»''åņbC— ”°6„ȵ1e‚ŅcśņéīŻ<üūæ?-EPõœĶ›ł«>›Ö’˜_½Zų+H9D)Aī}Š™šZ^ ŒLNā„˜*KŌ›xļ‚ĒTäšMzĖ[p­Ö@ōØ×¹į _ ņX&„ cƒÖ‘²vJU†ÓT”"c“vCJey»Ż ČĪCc|ś;ĒĮßłҟžt ņ/·Į篹†s7oų5 PĢE± ¢hH*»<‡V®ģŃ{–Œ vœÓRŽ«²¾æX_Ž‹A7ĮĆŪ·ÓX*~æ?¤X÷ļļ{ŁvŁeŻÓ×*ó i„Ø!„VB”Tŗ¶ÓÉŚl«å•”­cŠņöŒGóåé/|£żč@“G’ ¼ųā‹łŠ¼jށ1Æv™Ā $š¾šg*VĆ0ҐļéaY’ø@­&„µ¢Ón?‚÷Ęų²~p /ß¾ūī7=C±éU6ląĖ’šØĒ©bŻŗ†b¹:ēyŽriŚ7Ķ“\`żztXk­'M›H)䝡,ĪöīåĮßų üüõšĄ‡’ŒcnŗžzVŸ –čQBPÄ2‚ KÉĘ )°¼1d;/Œ1-!’zqx‰ļ1<śŻ75ÅÆ=öŲ±ei[ĄŸߔ’뮾š-Ļ}īņĆZsuĆ¢ō ņ<—ÖZY«Ižö“ĮCcÖ9JE+B朞µ·ūI\»Ķƒo|ć@)³?Ž|oÕ*¾zóͼõMozt] Ż~Ü¢bdĪ)źŲ³głš!€©”µ(ŠF*•APGˆˆÅˆyšYĘCozķ²ˆłDų šĄsĪ;/żŁŸ±ņŠ!&Ž’~ÜņIŠKb䷛ʳžµ°±8˜Å†aģ\ló¼;€„k‡”P„öK’Ā0¦äby Ay—öŻ Ń[ĖĮ+®(bzĖ E”P|mõjN’ńiæīu<öaĻįKūöńŠ˜_~ę3ē•ņ¤)SQA Œńī>§ČōU„†ĆŠYē4Z‡Q(Aó#C]=Ą{żį2sću“¼Xsō(¾ØI>)øķöŪyšĄ…ER·DkQ¢Ųc‰‰žŸ¾óŚLM¹Øø=2§š-ø’šų8SŸ’üIČIC‘'č1Ę"÷>a(uŠÅ•¦ż#C##ŅG‘#ĻSœs€EėnÄu.]~@‡ę“†…!üٱŁN;޵,r•ēt- Ž>‰U"£[Ń”žl”Źc*µšŲ»wļņ•£»>ūY%“DˆāĄ4Ŝ7Ų•'4,<¹į©‚łż*īČsMš¦Ęڼentt“ē¶)°eÓ&æoļ^„„čP¤Č )QqeA²@μöZްmÓ„¶žHģ987÷£T‚R*VŖj ÷>\VVĻ”W nŻźÄžżią\jŅ4ÕÅńtē,RZœShķ±VTŸ÷<žäśėÉĖō'ė<y3ń9ēž[D‹Ÿā‘<‘².“Öι Z½Z.ƒż*G©<żéy*DGj]EŃé@t³/”˜bą=/¾šĀåܝ—ó÷®Ī¾ü*6^?ū»ŠĢµ…ĘšēŽāŲ=Kš¶³<ĻU½nlŸCTś*Bnd쇖FkĀ,3„O 8ØP©B,ŅfŠ57 …*®4Em’BFĢg÷†Ž,“³A˜Åž‡.Š,Š…j÷ĖgęXkHÓ c,aŲŃBäk'&z|½ ÷vēNƤl><33³±ÕjE)•J„ʄeܽ{–X7óJ•kÆ8@±ė€‡µŻžŹRC“tĻ -ŹZŠ/WWĖYqŪ½§8MĢé…„*Rb F£Źkc,Ž7Iӄ$ɽsŽ4e/°xģ;’‰ W­× J=L£±ju„ D@Œµ® ™ååį¦(RiŅ4Dkƒ)Īåå tŁń¢®ßū¢®Æ81/]ŁēŠc;„ŠX«2ùā0Å<„ŒIŃŗŚZ[„ļ­•xļpNēÖ£Ż>lcʹĪLg›“‹O•ķ{ āčķ·Ū©ÉÉF23óšĮ#GŽžE0¦CUExß"Ļ›eĒ»ĒlĘå R#„ƹ„ĀóÕ­>—e5ĒJI¬mį}Š:ŰäyFF8×5"‹CS„Œ)=<„"Ā–³J“ēšN§I§s„G™xčŲ±q?Tƒ„>ESżĪńŪļ¼Ó½yÕŖ$yXdŁæ’bß¾Īś‘‘ÓāJ„†Ö ČņćĒi&IĒ_GÖāø2•$ œcżŠPqĢmµZGŹcŚ$I‡(Ŗ–~…äłqŅŌ ”Cėˆ0ĀŚ¢ā»Ųų,Y–†A)Ž)]ŻQ)ŠcĄ‘e-„®ŻnåĘ)5“off2‚½aL8­:sƆ}Žųź»}{ļ;vˆżēœ“®·Ót(bČYkt5s$Ļ… ĆLd™Ø ¹Lė<}äkj­GLšvu†8WŹ c”׌Ź,[AtB!Ž)ē2ć}`ŒQZŹP†aŠ“ÖĒĪe. ­ö> ĖŚ‰RB'EĘBk)Ė"”TG”8k£Ü{YŪI«ÕéČŚģ@§“m9tȊķŪ{|‚'–_Ū·Ė;@n“ū[-iŽ÷ŒŽ’5›~ljŹļ*##āČīŻnė¼éµkjJ®ŃA’H72ā»Fˆ¬Tо83y¶n]Ļ“›šņlŚäٳG°i“ßµgŲ²i“æćĪ;‹óǁ½÷ݧōА0ĒūŃuėüžVKšµk½>|XlÜøŃpēŽeĪ„/­AæčēDōŽū?Ū·o—ŻßŪ·o—KŻ’hūµų=÷¹§p §p §p §p ’%š’‡­·ķ:IIEND®B`‚libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-proxy/mount-origin/index.html000066400000000000000000000006241476025525100336330ustar00rootroot00000000000000
    Hello from the minimal https server example.
    You can confirm the 404 page handler by going to this nonexistant page.
    libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-smp/000077500000000000000000000000001476025525100266235ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-smp/CMakeLists.txt000066400000000000000000000014451476025525100313670ustar00rootroot00000000000000project(lws-minimal-http-server-smp C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckIncludeFile) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-server-smp) set(SRCS minimal-http-server-smp.c) set(requirements 1) require_pthreads(requirements) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${PTHREAD_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${PTHREAD_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif()libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-smp/README.md000066400000000000000000000023211476025525100301000ustar00rootroot00000000000000# lws minimal http server with multithreaded service Lws supports multithreaded service... build lws with `-DLWS_MAP_SMP=`, the default is 1. If nonzero, some extra pthreads locking is built into lws and it supports multiple independent service threads. ![lws-smp-overview](/doc-assets/lws-smp-ov.png) When an incoming connection is accepted, it is bound to the pt with the lowest current wsi count, to keep the load on the threads balanced. Only the pt the wsi is bound to can service the thread, so although there can be as many wsi being serviced simultaneously as there are service threads, a wsi can only be service by the pt it is bound to. The effectiveness of the scalability depends on the load. Here is an example of roughly what can be expected ![lws-smp-example](/doc-assets/lws-smp-example.png) ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server-smp [2018/03/07 17:44:20:2409] USER: LWS minimal http server SMP | visit http://localhost:7681 [2018/03/07 17:44:20:2410] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 on [2018/03/07 17:44:20:2411] NOTICE: Service threads: 10 ``` Visit http://localhost:7681 and use ab or other testing tools libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-smp/localhost-100y.cert000066400000000000000000000040721476025525100321640ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-smp/localhost-100y.key000066400000000000000000000063101476025525100320140ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-smp/minimal-http-server-smp.c000066400000000000000000000075011476025525100334760ustar00rootroot00000000000000/* * lws-minimal-http-server-smp * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal multithreaded http server you can make with lws. * * To keep it simple, it serves stuff in the subdirectory "./mount-origin" of * the directory it was started in. * You can change that by changing mount.origin. * * Also for simplicity the number of threads is set in the code... note that * the real number of threads possible is decided by the LWS_MAX_SMP that lws * was configured with, by default that is 1. Lws will limit the number of * requested threads to the number possible. */ #include #include #include #if defined(WIN32) #define HAVE_STRUCT_TIMESPEC #if defined(pid_t) #undef pid_t #endif #endif #include #define COUNT_THREADS 8 static struct lws_context *context; static int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void *thread_service(void *threadid) { while (lws_service_tsi(context, 10000, (int)(lws_intptr_t)threadid) >= 0 && !interrupted) ; pthread_exit(NULL); return NULL; } void sigint_handler(int sig) { interrupted = 1; lws_cancel_service(context); } int main(int argc, const char **argv) { pthread_t pthread_service[COUNT_THREADS]; struct lws_context_creation_info info; void *retval; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server SMP | visit http://127.0.0.1:7681\n"); signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; if ((p = lws_cmdline_option(argc, argv, "-t"))) { info.count_threads = (unsigned int)atoi(p); if (info.count_threads < 1 || info.count_threads > LWS_MAX_SMP) return 1; } else info.count_threads = COUNT_THREADS; #if defined(LWS_WITH_TLS) if (lws_cmdline_option(argc, argv, "-s")) { info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; } #endif context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } lwsl_notice(" Service threads: %d\n", lws_get_count_threads(context)); /* start all the service threads */ for (n = 0; n < lws_get_count_threads(context); n++) if (pthread_create(&pthread_service[n], NULL, thread_service, (void *)(lws_intptr_t)n)) lwsl_err("Failed to start service thread\n"); /* wait for all the service threads to exit */ while ((--n) >= 0) pthread_join(pthread_service[n], &retval); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-smp/mount-origin/000077500000000000000000000000001476025525100312525ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-smp/mount-origin/favicon.ico000066400000000000000000000025761476025525100334050ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-smp/mount-origin/index.html000066400000000000000000000003711476025525100332500ustar00rootroot00000000000000
    Hello from the minimal http server SMP example. libwebsockets.org-logo.svg000066400000000000000000000226061476025525100363060ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-smp/mount-origin image/svg+xml libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-smp/mount-origin/strict-csp.svg000066400000000000000000000302361476025525100340720ustar00rootroot00000000000000 libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-sse-ring/000077500000000000000000000000001476025525100275535ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-sse-ring/CMakeLists.txt000066400000000000000000000013471476025525100323200ustar00rootroot00000000000000project(lws-minimal-http-server-sse-ring C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) include(CheckIncludeFile) include(CheckCSourceCompiles) set(SAMP lws-minimal-http-server-sse-ring) set(SRCS minimal-http-server-sse-ring.c) set(requirements 1) require_pthreads(requirements) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${PTHREAD_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${PTHREAD_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-sse-ring/README.md000066400000000000000000000013561476025525100310370ustar00rootroot00000000000000# lws minimal http Server Side Events + ringbuffer This demonstates serving both normal content and content over Server Side Events, where all clients see the same data via a ringbuffer. Two separate threads generate content into the ringbuffer at random intervals. ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server-sse [2018/04/20 06:09:56:9974] USER: LWS minimal http Server-Side Events + ring | visit http://localhost:7681 [2018/04/20 06:09:57:0148] NOTICE: Creating Vhost 'default' port 7681, 2 protocols, IPv6 off ``` Visit http://localhost:7681, which connects back to the server using SSE and displays the incoming data. Connecting from multiple browsers shows the same content from the server ringbuffer. minimal-http-server-sse-ring.c000066400000000000000000000245751476025525100353110ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-sse-ring/* * lws-minimal-http-server-sse * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal http server that can serve both normal static * content and server-side event connections. * * To keep it simple, it serves the static stuff from the subdirectory * "./mount-origin" of the directory it was started in. * * You can change that by changing mount.origin below. */ #include #include #include #include #if defined(WIN32) #define HAVE_STRUCT_TIMESPEC #if defined(pid_t) #undef pid_t #endif #endif #include #include /* one of these created for each message in the ringbuffer */ struct msg { void *payload; /* is malloc'd */ size_t len; }; /* * Unlike ws, http is a stateless protocol. This pss only exists for the * duration of a single http transaction. With http/1.1 keep-alive and http/2, * that is unrelated to (shorter than) the lifetime of the network connection. */ struct pss { struct pss *pss_list; struct lws *wsi; uint32_t tail; }; /* one of these is created for each vhost our protocol is used with */ struct vhd { struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; struct pss *pss_list; /* linked-list of live pss*/ pthread_t pthread_spam[2]; pthread_mutex_t lock_ring; /* serialize access to the ring buffer */ struct lws_ring *ring; /* ringbuffer holding unsent messages */ char finished; }; static int interrupted; #if defined(WIN32) static void usleep(unsigned long l) { Sleep(l / 1000); } #endif /* destroys the message when everyone has had a copy of it */ static void __minimal_destroy_message(void *_msg) { struct msg *msg = _msg; free(msg->payload); msg->payload = NULL; msg->len = 0; } /* * This runs under the "spam thread" thread context only. * * We spawn two threads that generate messages with this. * */ static void * thread_spam(void *d) { struct vhd *vhd = (struct vhd *)d; struct msg amsg; int len = 128, index = 1, n, whoami = 0; for (n = 0; n < (int)LWS_ARRAY_SIZE(vhd->pthread_spam); n++) if (pthread_equal(pthread_self(), vhd->pthread_spam[n])) whoami = n + 1; do { /* don't generate output if nobody connected */ if (!vhd->pss_list) goto wait; pthread_mutex_lock(&vhd->lock_ring); /* --------- ring lock { */ /* only create if space in ringbuffer */ n = (int)lws_ring_get_count_free_elements(vhd->ring); if (!n) { lwsl_user("dropping!\n"); goto wait_unlock; } amsg.payload = malloc((unsigned int)len); if (!amsg.payload) { lwsl_user("OOM: dropping\n"); goto wait_unlock; } n = lws_snprintf((char *)amsg.payload, (unsigned int)len, "%s: tid: %d, msg: %d", __func__, whoami, index++); amsg.len = (unsigned int)n; n = (int)lws_ring_insert(vhd->ring, &amsg, 1); if (n != 1) { __minimal_destroy_message(&amsg); lwsl_user("dropping!\n"); } else /* * This will cause a LWS_CALLBACK_EVENT_WAIT_CANCELLED * in the lws service thread context. */ lws_cancel_service(vhd->context); wait_unlock: pthread_mutex_unlock(&vhd->lock_ring); /* } ring lock ------- */ wait: /* rand() would make more sense but coverity shrieks */ usleep((useconds_t)(100000 + (time(NULL) & 0xffff))); } while (!vhd->finished); lwsl_notice("thread_spam %d exiting\n", whoami); pthread_exit(NULL); return NULL; } static int callback_sse(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct pss *pss = (struct pss *)user; struct vhd *vhd = (struct vhd *)lws_protocol_vh_priv_get( lws_get_vhost(wsi), lws_get_protocol(wsi)); uint8_t buf[LWS_PRE + LWS_RECOMMENDED_MIN_HEADER_SPACE], *start = &buf[LWS_PRE], *p = start, *end = &buf[sizeof(buf) - 1]; const struct msg *pmsg; void *retval; int n; switch (reason) { /* --- vhost protocol lifecycle --- */ case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct vhd)); vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); vhd->ring = lws_ring_create(sizeof(struct msg), 8, __minimal_destroy_message); if (!vhd->ring) return 1; pthread_mutex_init(&vhd->lock_ring, NULL); /* start the content-creating threads */ for (n = 0; n < (int)LWS_ARRAY_SIZE(vhd->pthread_spam); n++) if (pthread_create(&vhd->pthread_spam[n], NULL, thread_spam, vhd)) { lwsl_err("thread creation failed\n"); goto init_fail; } return 0; case LWS_CALLBACK_PROTOCOL_DESTROY: init_fail: vhd->finished = 1; for (n = 0; n < (int)LWS_ARRAY_SIZE(vhd->pthread_spam); n++) pthread_join(vhd->pthread_spam[n], &retval); if (vhd->ring) lws_ring_destroy(vhd->ring); pthread_mutex_destroy(&vhd->lock_ring); return 0; /* --- http connection lifecycle --- */ case LWS_CALLBACK_HTTP: /* * `in` contains the url part after our mountpoint /sse, if any * you can use this to determine what data to return and store * that in the pss */ lwsl_info("%s: LWS_CALLBACK_HTTP: '%s'\n", __func__, (const char *)in); /* SSE requires a http OK response with this content-type */ if (lws_add_http_common_headers(wsi, HTTP_STATUS_OK, "text/event-stream", LWS_ILLEGAL_HTTP_CONTENT_LEN, &p, end)) return 1; if (lws_finalize_write_http_header(wsi, start, &p, end)) return 1; /* add ourselves to the list of live pss held in the vhd */ lws_ll_fwd_insert(pss, pss_list, vhd->pss_list); pss->tail = lws_ring_get_oldest_tail(vhd->ring); pss->wsi = wsi; /* * This tells lws we are no longer a normal http stream, * but are an "immortal" (plus or minus whatever timeout you * set on it afterwards) SSE stream. In http/2 case that also * stops idle timeouts being applied to the network connection * while this wsi is still open. */ lws_http_mark_sse(wsi); /* write the body separately */ lws_callback_on_writable(wsi); return 0; case LWS_CALLBACK_CLOSED_HTTP: /* remove our closing pss from the list of live pss */ lws_ll_fwd_remove(struct pss, pss_list, pss, vhd->pss_list); return 0; /* --- data transfer --- */ case LWS_CALLBACK_HTTP_WRITEABLE: lwsl_info("%s: LWS_CALLBACK_HTTP_WRITEABLE\n", __func__); pmsg = lws_ring_get_element(vhd->ring, &pss->tail); if (!pmsg) break; p += lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), "data: %s\x0d\x0a\x0d\x0a", (const char *)pmsg->payload); if (lws_write(wsi, (uint8_t *)start, lws_ptr_diff_size_t(p, start), LWS_WRITE_HTTP) != lws_ptr_diff(p, start)) return 1; lws_ring_consume_and_update_oldest_tail( vhd->ring, /* lws_ring object */ struct pss, /* type of objects with tails */ &pss->tail, /* tail of guy doing the consuming */ 1, /* number of payload objects being consumed */ vhd->pss_list, /* head of list of objects with tails */ tail, /* member name of tail in objects with tails */ pss_list /* member name of next object in objects with tails */ ); if (lws_ring_get_element(vhd->ring, &pss->tail)) /* come back as soon as we can write more */ lws_callback_on_writable(pss->wsi); return 0; case LWS_CALLBACK_EVENT_WAIT_CANCELLED: if (!vhd) break; /* * let everybody know we want to write something on them * as soon as they are ready */ lws_start_foreach_llp(struct pss **, ppss, vhd->pss_list) { lws_callback_on_writable((*ppss)->wsi); } lws_end_foreach_llp(ppss, pss_list); return 0; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static struct lws_protocols protocols[] = { { "http", lws_callback_http_dummy, 0, 0, 0, NULL, 0 }, { "sse", callback_sse, sizeof(struct pss), 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; /* override the default mount for /sse in the URL space */ static const struct lws_http_mount mount_sse = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/sse", /* mountpoint URL */ /* .origin */ NULL, /* protocol */ /* .def */ NULL, /* .protocol */ "sse", /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_CALLBACK, /* dynamic */ /* .mountpoint_len */ 4, /* char count */ /* .basic_auth_login_file */ NULL, }; /* default mount serves the URL space from ./mount-origin */ static const struct lws_http_mount mount = { /* .mount_next */ &mount_sse, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http Server-Side Events + ring | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.protocols = protocols; info.mounts = &mount; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-sse-ring/mount-origin/000077500000000000000000000000001476025525100322025ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-sse-ring/mount-origin/404.html000066400000000000000000000002271476025525100334000ustar00rootroot00000000000000

    404

    Sorry, that file doesn't exist. example.js000066400000000000000000000015041476025525100341140ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-sse-ring/mount-origindocument.addEventListener("DOMContentLoaded", function() { var head = 0, tail = 0, ring = new Array(), es; es = new EventSource("/sse/sourcename"); try { es.onopen = function() { // console.log("EventSource opened"); document.getElementById("r").disabled = 0; }; es.onmessage = function got_packet(msg) { var n, s = ""; // console.log(msg.data); ring[head] = msg.data + "\n"; head = (head + 1) % 50; if (tail === head) tail = (tail + 1) % 50; n = tail; do { s = s + ring[n]; n = (n + 1) % 50; } while (n !== head); document.getElementById("r").value = s; document.getElementById("r").scrollTop = document.getElementById("r").scrollHeight; }; /* there is no onclose() for EventSource */ } catch(exception) { alert("

    Error " + exception); } }, false); favicon.ico000066400000000000000000000025761476025525100342560ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-sse-ring/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’index.html000066400000000000000000000013141476025525100341170ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-sse-ring/mount-origin
    Hello from the minimal http Server Side Events + Ring example.

    This is a static page served from ./mount-origin/index.html.

    It connects back to the server at /sse/sourcename using EventSource()
    and displays the perioding incoming event data below.

    The data is being produced by two asynchronous threads at the server, which each sleep for a random period inbetween samples.


    libwebsockets.org-logo.svg000066400000000000000000000226061476025525100372360ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-sse-ring/mount-origin image/svg+xml strict-csp.svg000066400000000000000000000302361476025525100347430ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-sse-ring/mount-origin libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-sse/000077500000000000000000000000001476025525100266165ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-sse/CMakeLists.txt000066400000000000000000000014141476025525100313560ustar00rootroot00000000000000project(lws-minimal-http-server-sse C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-server-sse) set(SRCS minimal-http-server-sse.c) set(requirements 1) require_pthreads(requirements) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${PTHREAD_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${PTHREAD_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-sse/README.md000066400000000000000000000012011476025525100300670ustar00rootroot00000000000000# lws minimal http Server Side Events This demonstates serving both normal content and content over Server Side Events. ## build ``` $ cmake . && make ``` ## usage You can give -s to listen using https on port :443 ``` $ ./lws-minimal-http-server-sse [2018/04/20 06:09:56:9974] USER: LWS minimal http Server-Side Events | visit http://localhost:7681 [2018/04/20 06:09:57:0148] NOTICE: Creating Vhost 'default' port 7681, 2 protocols, IPv6 off ``` Visit http://localhost:7681, which connects back to the server using SSE and displays the incoming data. Connecting from multiple browsers shows content individual to the connection. libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-sse/localhost-100y.cert000066400000000000000000000040721476025525100321570ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-sse/localhost-100y.key000066400000000000000000000063101476025525100320070ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-sse/minimal-http-server-sse.c000066400000000000000000000141121476025525100334600ustar00rootroot00000000000000/* * lws-minimal-http-server-sse * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal http server that can serve both normal static * content and server-side event connections. * * To keep it simple, it serves the static stuff from the subdirectory * "./mount-origin" of the directory it was started in. * * You can change that by changing mount.origin below. */ #include #include #include #include #if defined(WIN32) #define HAVE_STRUCT_TIMESPEC #if defined(pid_t) #undef pid_t #endif #endif #include /* * Unlike ws, http is a stateless protocol. This pss only exists for the * duration of a single http transaction. With http/1.1 keep-alive and http/2, * that is unrelated to (shorter than) the lifetime of the network connection. */ struct pss { time_t established; }; static int interrupted; #define SECS_REPORT 3 static int callback_sse(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct pss *pss = (struct pss *)user; uint8_t buf[LWS_PRE + LWS_RECOMMENDED_MIN_HEADER_SPACE], *start = &buf[LWS_PRE], *p = start, *end = &buf[sizeof(buf) - 1]; switch (reason) { case LWS_CALLBACK_HTTP: /* * `in` contains the url part after our mountpoint /sse, if any * you can use this to determine what data to return and store * that in the pss */ lwsl_notice("%s: LWS_CALLBACK_HTTP: '%s'\n", __func__, (const char *)in); pss->established = time(NULL); /* SSE requires a response with this content-type */ if (lws_add_http_common_headers(wsi, HTTP_STATUS_OK, "text/event-stream", LWS_ILLEGAL_HTTP_CONTENT_LEN, &p, end)) return 1; if (lws_finalize_write_http_header(wsi, start, &p, end)) return 1; /* * This tells lws we are no longer a normal http stream, * but are an "immortal" (plus or minus whatever timeout you * set on it afterwards) SSE stream. In http/2 case that also * stops idle timeouts being applied to the network connection * while this wsi is still open. */ lws_http_mark_sse(wsi); /* write the body separately */ lws_callback_on_writable(wsi); return 0; case LWS_CALLBACK_HTTP_WRITEABLE: lwsl_notice("%s: LWS_CALLBACK_HTTP_WRITEABLE\n", __func__); if (!pss) break; /* * to keep this demo as simple as possible, each client has his * own private data and timer. */ p += lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), "data: %llu\x0d\x0a\x0d\x0a", (unsigned long long)(time(NULL) - pss->established)); if (lws_write(wsi, (uint8_t *)start, lws_ptr_diff_size_t(p, start), LWS_WRITE_HTTP) != lws_ptr_diff(p, start)) return 1; lws_set_timer_usecs(wsi, SECS_REPORT * LWS_USEC_PER_SEC); return 0; case LWS_CALLBACK_TIMER: lwsl_notice("%s: LWS_CALLBACK_TIMER\n", __func__); lws_callback_on_writable(wsi); return 0; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static struct lws_protocols protocols[] = { { "http", lws_callback_http_dummy, 0, 0, 0, NULL, 0 }, { "sse", callback_sse, sizeof(struct pss), 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; /* override the default mount for /sse in the URL space */ static const struct lws_http_mount mount_sse = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/sse", /* mountpoint URL */ /* .origin */ NULL, /* protocol */ /* .def */ NULL, /* .protocol */ "sse", /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_CALLBACK, /* dynamic */ /* .mountpoint_len */ 4, /* char count */ /* .basic_auth_login_file */ NULL, }; /* default mount serves the URL space from ./mount-origin */ static const struct lws_http_mount mount = { /* .mount_next */ &mount_sse, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http Server-Side Events | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.protocols = protocols; info.mounts = &mount; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; info.port = 7681; #if defined(LWS_WITH_TLS) if (lws_cmdline_option(argc, argv, "-s")) { info.port = 443; info.options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; } #endif context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-sse/mount-origin/000077500000000000000000000000001476025525100312455ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-sse/mount-origin/404.html000066400000000000000000000002271476025525100324430ustar00rootroot00000000000000

    404

    Sorry, that file doesn't exist. libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-sse/mount-origin/example.js000066400000000000000000000015021476025525100332340ustar00rootroot00000000000000document.addEventListener("DOMContentLoaded", function() { var head = 0, tail = 0, ring = new Array(), es; es = new EventSource("/sse/sourcename"); try { es.onopen = function() { // console.log("EventSource opened"); document.getElementById("r").disabled = 0; }; es.onmessage = function got_packet(msg) { var n, s = ""; // console.log(msg.data); ring[head] = msg.data + "\n"; head = (head + 1) % 50; if (tail === head) tail = (tail + 1) % 50; n = tail; do { s = s + ring[n]; n = (n + 1) % 50; } while (n !== head); document.getElementById("r").value = s; document.getElementById("r").scrollTop = document.getElementById("r").scrollHeight; }; /* there is no onclose() for EventSource */ } catch(exception) { alert("

    Error" + exception); } }, false); libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-sse/mount-origin/favicon.ico000066400000000000000000000025761476025525100334000ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-sse/mount-origin/index.html000066400000000000000000000010741476025525100332440ustar00rootroot00000000000000
    Hello from the minimal http Server Side Events example.

    This is a static page served from ./mount-origin/index.html.

    It connects back to the server at /sse/sourcename using EventSource()
    and displays the periodic incoming event data below.


    libwebsockets.org-logo.svg000066400000000000000000000226061476025525100363010ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-sse/mount-origin image/svg+xml libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-sse/mount-origin/strict-csp.svg000066400000000000000000000302361476025525100340650ustar00rootroot00000000000000 libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls-80/000077500000000000000000000000001476025525100270535ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls-80/CMakeLists.txt000066400000000000000000000014101476025525100316070ustar00rootroot00000000000000project(lws-minimal-http-server-tls-80 C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-server-tls-80) set(SRCS minimal-http-server-tls-80.c) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) require_lws_config(LWS_WITH_TLS 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls-80/README.md000066400000000000000000000053261476025525100303400ustar00rootroot00000000000000# lws minimal http server with tls and port 80 redirect ## build ``` $ cmake . && make ``` ## usage Because this listens on low ports (80 + 443), it must be run as root. ``` $ sudo ./lws-minimal-http-server-tls-80 [2018/03/20 13:23:13:0131] USER: LWS minimal http server TLS | visit https://localhost:7681 [2018/03/20 13:23:13:0142] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off [2018/03/20 13:23:13:0142] NOTICE: Using SSL mode [2018/03/20 13:23:13:0146] NOTICE: SSL ECDH curve 'prime256v1' [2018/03/20 13:23:13:0146] NOTICE: HTTP2 / ALPN enabled [2018/03/20 13:23:13:0195] NOTICE: lws_tls_client_create_vhost_context: doing cert filepath localhost-100y.cert [2018/03/20 13:23:13:0195] NOTICE: Loaded client cert localhost-100y.cert [2018/03/20 13:23:13:0195] NOTICE: lws_tls_client_create_vhost_context: doing private key filepath [2018/03/20 13:23:13:0196] NOTICE: Loaded client cert private key localhost-100y.key [2018/03/20 13:23:13:0196] NOTICE: created client ssl context for default [2018/03/20 13:23:14:0207] NOTICE: vhost default: cert expiry: 730459d ``` Visit http://localhost This will go first to port 80 using http, where it will be redirected to https and port 443 ``` 07:41:48.596918 IP localhost.http > localhost.52662: Flags [P.], seq 1:100, ack 416, win 350, options [nop,nop,TS val 3906619933 ecr 3906619933], length 99: HTTP: HTTP/1.1 301 Redirect 0x0000: 4500 0097 3f8f 4000 4006 fccf 7f00 0001 E...?.@.@....... 0x0010: 7f00 0001 0050 cdb6 6601 dfa7 922a 4c06 .....P..f....*L. 0x0020: 8018 015e fe8b 0000 0101 080a e8da 4a1d ...^..........J. 0x0030: e8da 4a1d 4854 5450 2f31 2e31 2033 3031 ..J.HTTP/1.1.301 0x0040: 2052 6564 6972 6563 740d 0a6c 6f63 6174 .Redirect..locat 0x0050: 696f 6e3a 2068 7474 7073 3a2f 2f6c 6f63 ion:.https://loc 0x0060: 616c 686f 7374 2f0d 0a63 6f6e 7465 6e74 alhost/..content 0x0070: 2d74 7970 653a 2074 6578 742f 6874 6d6c -type:.text/html 0x0080: 0d0a 636f 6e74 656e 742d 6c65 6e67 7468 ..content-length 0x0090: 3a20 300d 0a0d 0a ``` Because :443 uses a selfsigned certificate, you will have to make an exception for it in your browser. ## Certificate creation The selfsigned certs provided were created with ``` echo -e "GB\nErewhon\nAll around\nlibwebsockets-test\n\nlocalhost\nnone@invalid.org\n" | openssl req -new -newkey rsa:4096 -days 36500 -nodes -x509 -keyout "localhost-100y.key" -out "localhost-100y.cert" ``` they cover "localhost" and last 100 years from 2018-03-20. You can replace them with commercial certificates matching your hostname. ## HTTP/2 If you built lws with `-DLWS_WITH_HTTP2=1` at cmake, this simple server is also http/2 capable out of the box. If the index.html was loaded over http/2, it will display an HTTP 2 png. libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls-80/localhost-100y.cert000066400000000000000000000040721476025525100324140ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls-80/localhost-100y.key000066400000000000000000000063101476025525100322440ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- minimal-http-server-tls-80.c000066400000000000000000000074731476025525100341070ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls-80/* * lws-minimal-http-server-tls-80 * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws, * with three extra lines giving it tls (ssl) capabilities, which in * turn allow operation with HTTP/2 if lws was configured for it. * * In addition, it runs a vhost on port 80 with the job of redirecting * and upgrading http clients that came in on port 80 to https on port 443. * * To keep it simple, it serves stuff from the subdirectory * "./mount-origin" of the directory it was started in. * * You can change that by changing mount.origin below. */ #include #include #include static int interrupted; static const struct lws_http_mount mount80 = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "localhost/", /* .def */ "/", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_REDIR_HTTPS, /* https redir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server TLS + 80 | visit https://localhost\n"); lwsl_user(" Run as ROOT so can listen on 443\n"); signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } info.port = 80; info.mounts = &mount80; info.vhost_name = "localhost80"; if (!lws_create_vhost(context, &info)) { lwsl_err("Failed to create tls vhost\n"); goto bail; } info.port = 443; info.mounts = &mount; info.error_document_404 = "/404.html"; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; info.vhost_name = "localhost"; if (!lws_create_vhost(context, &info)) { lwsl_err("Failed to create tls vhost\n"); goto bail; } while (n >= 0 && !interrupted) n = lws_service(context, 0); bail: lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls-80/mount-origin/000077500000000000000000000000001476025525100315025ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls-80/mount-origin/404.html000066400000000000000000000004261476025525100327010ustar00rootroot00000000000000

    404

    Sorry, that file doesn't exist. libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls-80/mount-origin/example.js000066400000000000000000000012511476025525100334720ustar00rootroot00000000000000document.addEventListener("DOMContentLoaded", function() { var transport_protocol = ""; if (performance && performance.timing.nextHopProtocol) { transport_protocol = performance.timing.nextHopProtocol; } else if (window.chrome && window.chrome.loadTimes) { transport_protocol = window.chrome.loadTimes().connectionInfo; } else { var p = performance.getEntriesByType("resource"); for (var i = 0; i < p.length; i++) { var value = "nextHopProtocol" in p[i]; if (value) transport_protocol = p[i].nextHopProtocol; } } if (transport_protocol === "h2") document.getElementById("transport").innerHTML = ""; }, false); libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls-80/mount-origin/favicon.ico000066400000000000000000000025761476025525100336350ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls-80/mount-origin/http2.png000066400000000000000000000166131476025525100332600ustar00rootroot00000000000000‰PNG  IHDR@qeO„Ö pHYsCC,ę·ētEXtSoftwarewww.inkscape.org›ī<IDATxœķœ{”žU}ļ?ūņ\ŽĖd2!!!@ˆ:Ķ1Cė… ˆZ ļ§.EcO½j„zŖmķQj»°ķ$­ÖćŖÖ„e)еœ.XWµŠ*„F«Ų(1š ™dBfęĶ{y.ūržxžwnļ;™,Īj¾k͚™żüžēŁū÷ģ½÷ §p §p §p §p §š_b9ļ½Ų±cĒ,ķųų8;wīŪŹ’ļŲ½[lówģŽ-¶ŽyÖ¬»öģ[FFÜĪyĻŪ¶m›gĒóļŲś’—Ąž=bošJFG­T,““žŻ»}łbß„ķög¼hŸ{ĮĪ¢ū¾Ż»wūńńq/„š,%ą½ģÜ)÷·ZA”e2 CWQJ©<—2ŠÄdšśµRŖf­&E§#d’54¤l»Öf¹Rašē¢ĒIÓ_QŹ5£”!‘I§£”s “RER:!e @8'­µ&TŖŃt.Y”µ{°IāOņÓy.kCC¦jE£(k„UŹuǐ­XaŻÄDņƒuė̶mŪ\?Fōe€qĒķ·«_žÅ/*YµŗRv:CV)ćņ<ŌR†6MµUJ[Øy.}Yom,Y!¤¬;Ą įźB„Mļ3å}‚RŲM½¢°“¦Y½VSi§³Z z!œBäĪéż ©u3—ņēŽ˜‰)hoyĒ;Ģb&ōgĄöķ’±±čH»½>˲M&ĖĪ>-ŽW 8—SÆ×P*<ĪY‚@!„Ą{O ”µ@© R ¬Ķ‘2Bʹ(å±Vļ5RfX[|9­«(‘ē)BXŅ“M§Ó$Ļćœ”ÕŹØ×k“įœÅū€Zm­C¼ļIbš>&MŪ>ü‹@ėļW¢hļŹ›āā‹Ķü±ź~_×gس’dČdŁęÕ•ŹłńʍgQ­ŽE’ pHéĆ:R*œóx/Ńŗų-„B‹Ru¼·@„sŗ\W)` ö ‡Rē$ŽĖŁ6)Œ18—#D†sMŒÉqĪ eŽ”1Ī8—U¬³Ićœ%Ir²,#Ig„©9ŠlīC©+÷ģiyļÅüYŠĆ¼gĖĪb2MWäƌĘk֜ɹšF¢h5q„$RJ@Ŗüŗ!BtŸS Ö{‰µA9p0¦`āģkR ŒhķqĪE!Ī„0Q“ƒ£;ē4Ž+¤ōX[ōĒZƒ9R¶€P®\9%¦§G•1?gd¤gĘ÷2 D;I¬Kµ:D®Aė5H#„BJ‰” 8Wtŗ@÷+z„@ń[)A¹ŁEŻNtļéŽļ CˆņŁļ!<Ö:œó(%f TA!˜]JåT*R&Ōė5/„ńÖz&&cĄžVKā\¤ĆŠE­”Ŗ– „”B)(Ö0³_½h+jm·ĆąÜ”Å’ŌšdĮÜĖ :÷s}S ¬u%c¤¦ *QDcŗĻōXK9;Aą"ÉĄ­õw‘-Ė!0Ÿü¤*•Ō;gšŽP©0ū…”’’āå_~šƒ<ėÜså_łŠŸ\²é9ĻGåSż(ÓiŹUų@?Ͼķ×_łJź+Wrżõ×÷\›’ĻUļ}Æ8ļĀ Å[.æœC‡ͶŒŒš’æ˜W^ɳ6mņå*–ÖēņŠŹ įĪīӁ¾3`4ŠÜ0Ģl§“£µGK:¼h-:SSS4Žgö+—Ģ›žžfjjŠ4ĻIJŗ”Õn#ƒ`YŗNšŠééi:„‚Õ«W099É-·ŽŹ7o»’Ę7Äęg<ƗĖT‘e‚8Žā0 [IéZm€%ą=ūÆ»N‘$Cu„Ö&Hiń^~8f÷‚īß]ĮŪ~ó7yĶĖ^B`…`Ó¹ēšƽ–]TLĘZ­†”’?ū£?ą¾ūļ絯=÷Žy'§­Z_śöļ~€(Š8²oxĻæ~ļ{¼źµÆeff†}ę3|ŗčO±Īłé4mT‡†š­éi»<€hõjiÖµ8ސ2œŻŻ‹ĶmĮ {2ļŚšš0ĆĆĆ̾g¬[Ēӟö“äkŹ/z¬Łœm;ēœs8}͚%Ÿ¼ą‚ xłĖ_Ī 7ÜĄīūļ/Ś•rYęHÓć‘RM:öcĒģØX8 ś2@NM ­”±Ž{„PHYˆ¤ņ„]“ŪmvŻw߂Ncüæ$–ŗ¶˜ĮĖA)<@½Vc^m)9“Qź˜ŃŚló‹ŸŲBå¹Ī…Q„aŒ÷Ž+mL÷ļŁĆłĻžņ|<čĆē÷žĒŠītøé–[øūī»xÅ„—ā“ųX!rœóĀūĢf™ßY«Įœųś1ąŽ;d^©DY£Q;])÷²TjzÖOEœ¹~ż‚>šĄXŪCzR‘e¾š… Ś.Łŗ•w_qEw™Œ…BSÕĆĆrۚ5]½”æ&čA09éÓ45U„Zkӊm¼·(%°V ēnŪ¼™ļß}÷=ąō³Ībrrņ‰;Pˆł‹ž’|“Ölܰ—^|1’ć²ĖPB:÷)=Žœ3BZģžœ”Ž{+ęͪްfØG‘m>l‡½—d€#Ļ%aø¤]żd" Cīŗķ¶Bóƒā·sÅĄ½„āeQ*%ĻS)e–g™ėtzśæ` ąŁŗÕ9pĄćœ”ҁFŹ`V}Ŗb”8.žŃ:4ÖĘÕ8®īMÓ‘ÕÓ°cĒĘŖU†!©µfÖLõ=čS…¦š¾J…^ˆµćĒulŒœļŁ‚>K`||ÜóµÆłģȁēŽ[„š(åž¶aƒæō×~MŒ>ć ovŽæčEĢ4¬?ćŒ—„÷\zÉ%œvŚiKö}E­VŠyO† ®¾j—^r a×vč@ Å„(E”*}Z”“”į™gÅų¶m~ūöķóˆ{˜ēŁ;ć“Ń83ʲ­gž…¬]{>ZŸÖu” ˆ¢b­ĘĻ`ņś‰Bw($'M}éKheæąČ‘ķæ÷Ž„^’®®Õ8kŪ¶d¾? W‚dbĀiļm†ŠBddaK{ü©‹łĀŚBzļ¬R.Čs§¦¦–·ą£Č„|¶©pw-­ö>UPx†<…OAb­DJ9Qb­īd™]<[{Fä]€Cßń>+}׳/zŖ£š9F14E5ƔķYó½ŸŌ{¶ŒŒˆŠŚhDė:APÅūbיSxžźKĮ£”4Z‹¶1¹P*Ż»w/Ž/ģz—X«%sctT«i” š>,ļė†ēóœģē?'č!ņƒq>/V™Z¹µjśŒ3ˆŸżldį€yōPŖŠēö­ćs<3& ¼7“QäÄ Öąa„T’$]äQŹ”»ķÜŻ0"¹ļ>7ßLė;ß!łĮpĪņƒŠšų¼óŗäF~ė·ĪīēĒYÖ®łī~UC™÷-Ēvˆ ]aīu=ٱCUAÖ!,°»ņ·\«Åō—¾Ä±k®!żÉOļ|ʐÜ{/ɽ÷rä#!|Å+Ų°cqéL9!ę÷©p‹Å”]–å€crņÄŖ0ć愍†Bˆ•„a čśż»;l’w§)\}5?Ū¼™CļyĻcü"ēȒ韸’Ā Łżśž‰0·7y¼‘cL µī;e{°cCJ9éœAėŸ/D7Š#śMżÖæü {/ø€‰÷æsōč£åŠĪį?žqī|Žó°ķörä]&ŲīßRŹŠćwMMI)}ūL kL„tieYœ›»Ń˜bGĢs_uū_łJ²Ÿżģ±īQ`õO~ĀWĘĘH–bB”wc…ųRq.„ŖŒŒōLį¾ XQDnR:Ę“ŹŒ.7ŗĘ-·pōŸXr?x"°éČ®}į {ÄYœ“h­B„a„Ŗ”ƒž¾öŪ|:Į"0"„²Ž›2ę.Źé椠FFXóÉOņ¶zļv_¹ńFīśÖ·ųõW½ją=ż‚ 8żC˜~-pß8×°ŲL/ee yžeŠz]ūE¾ĶŒ2ŠD»ÓY9†UāxBTqNHŲšÖ·ņŸł ?øēžG5šłxĘ»ŽE>44­&x`®”+¦»Ź[‘^“GJ…6 ķīf³Ēš]rŃ)­£ ^A©bo Sŗ˜NȄ7¼īuœuę™  „Ö¬zéK¦wIBš¦s ŽŒčŚÖŚNžŪ0Ė\gjŹ/–½K­–0E`1,“ ,ŽēĖĶ€“…xÓ¦i;@Ņe@©ŸĢ¢›œ%e;¶ō¹æw Œ{«µ —Rd„Vµ“Č<ÉÕź@thÕ®eNSu(e±6Da[d¬Į ĘPnŒÕZ%I:8—ĪŅ>IĮsäČ@t‡ØZ%z4Ü")K)C…u­WÄBÄūĆP-^ĮżUį0t™”¼÷(UB¤œKO›Ė {B`&&¢{ŲøaĆ\ĆBMŠkeØTą!޲lłŠŖ°ö>BˆBł ‚9qų$ ݳg ŗū€_³šŠ%Päxo‡1IÓŚD:—Ł‘‘Į!U©ÖåyŠ1-ņÜĶfr>Į¦Æ™˜ ™Ÿur|ø`±R$T:“Nńސē@<«Ļ3ś*BĪūV’e Žž“ł¦šāŻö$¢ło Ää6p/š«/xĮ\ćÜL°@Ž÷-¼÷6˼ɲüGI²üčfŽ+cōt–u°¶C‘‚ś¤L’Ę?žć@tßź«Vqхö'ĀQäfåa(į½\Ń'u„ļˆff“‚ØÖõ ‚ė‰ >KĮLLŠüēˆöą5Æ~5Z/’ĪÅ>„ń>Fˆ„bĄ )Åʵk—×ļŁ±6y®b„B” ‚R#~#ĮS÷wxc–„;Ü ¼ķ­o]x”H‘ó„ķ"D8Ž””Ź‘ļ?|xysxčŒ3„‡8·vmT©Ōč&/Kih‚'™>M™ŗīŗhožŪ3ŸÉ‹%JĶE ʛs¾™$ Ī%k5·¼OŠĪιÕT«u“ĮŚz yĀ>’Ōß’=y™ļw"ąVą]q‹Ć\eBG×u/)–‚WA ]éXŒlŁ“ÉRęBʜ””a”АRį}8» N2|’pōcˆö Y­ņ?ßüꮋ]†®0 W¤ DžŚĘxå}ˆµŠ"WP/H<:ÉÓ’Ųg?;Š×Ļ€k€w¾żķ¬,Sp{ś#„@Y*qt¼")ŻŽ>õ½ ˜œōa˜\Ź£¤é ֚2éHĢśObxÜ>Ģä‡?<ķ @³^ēO®¼ri¢ł)3E‚gT‹ćŲ(µbtŻŗTįmŪ|dm”u}6Ež¼€CW^‰™Y–®\ ¼ēŻļ^:znšcœxßi$I"ĖöÖė=Įž±Į¼V3NE×=kœd4o»ĘM7 Dū9ĄóŽ?ųƒŽ‹óŽ…Ö);“¶¬måyޘyč!·¼GØ¬Ī“AŠ ŻnŅ­‘ņ¤ŖĄ¶Ńąįßū½h®¶’éŸĪ¹Ąū”k uÓd‹ ×T;7é“īlqÅR°‘MŒiam^–æ™RĒV3—"÷1ń¾÷‘?ųą@“’Ųtī¹¼ėļXxa±6ZX¬Żś¢”N§M’4|µW¬YćxĶk³OMéÜt~üųŽO"D0³zĄćō’źW™žā¢ż:p—\ó·ŪĻńы";Ä£TŽÓ“ŪĒ…÷²11!YIb ¬‡Ą*eŽ43äy»¬Ą8)Ó?č!žīļD;Eńõß~łå¼`¹ŗ„ł³”p޼·äyx?-ŪmŃ-Ųž~ Q­¦ˆĻ\±b BŌ1¦B”U=.&ų<ēĄå—cyd śæ¢õėłČ ±‚"mÖē2’¤™¦iGH)V¬Yӕ'ö īܹSŚĘ¬¢RYA®Ā¹ ĘĢ„Č<ĘĶpāŹ+ißsĻ@“7ß‚k?õ©o|óQX¬Eu©”„T†@#Ļ%kֈe}‚»ĖZżĄ{I&e"“g˜łņ—9vķµŃ>B!ó_ł²— ž’¹JR÷“"ŽWcVÅŽ»''åņbC— ”°6„ȵ1e‚ŅcśņéīŻ<üūæ?-EPõœĶ›ł«>›Ö’˜_½Zų+H9D)Aī}Š™šZ^ ŒLNā„˜*KŌ›xļ‚ĒTäšMzĖ[p­Ö@ōØ×¹į _ ņX&„ cƒÖ‘²vJU†ÓT”"c“vCJey»Ż ČĪCc|ś;ĒĮßłҟžt ņ/·Į篹†s7oų5 PĢE± ¢hH*»<‡V®ģŃ{–Œ vœÓRŽ«²¾æX_Ž‹A7ĮĆŪ·ÓX*~æ?¤X÷ļļ{ŁvŁeŻÓ×*ó i„Ø!„VB”Tŗ¶ÓÉŚl«å•”­cŠņöŒGóåé/|£żč@“G’ ¼ųā‹łŠ¼jށ1Æv™Ā $š¾šg*VĆ0ҐļéaY’ø@­&„µ¢Ón?‚÷Ęų²~p /ß¾ūī7=C±éU6ląĖ’šØĒ©bŻŗ†b¹:ēyŽriŚ7Ķ“\`żztXk­'M›H)䝡,ĪöīåĮßų üüõšĄ‡’ŒcnŗžzVŸ –čQBPÄ2‚ KÉĘ )°¼1d;/Œ1-!’zqx‰ļ1<śŻ75ÅÆ=öŲ±ei[ĄŸߔ’뮾š-Ļ}īņĆZsuĆ¢ō ņ<—ÖZY«Ižö“ĮCcÖ9JE+B朞µ·ūI\»Ķƒo|ć@)³?Ž|oÕ*¾zóͼõMozt] Ż~Ü¢bdĪ)źŲ³głš!€©”µ(ŠF*•APGˆˆÅˆyšYĘCozķ²ˆłDų šĄsĪ;/żŁŸ±ņŠ!&Ž’~ÜņIŠKb䷛ʳžµ°±8˜Å†aģ\ló¼;€„k‡”P„öK’Ā0¦äby Ay—öŻ Ń[ĖĮ+®(bzĖ E”P|mõjN’ńiæīu<öaĻįKūöńŠ˜_~ę3ē•ņ¤)SQA Œńī>§ČōU„†ĆŠYē4Z‡Q(Aó#C]=Ą{żį2sću“¼Xsō(¾ØI>)øķöŪyšĄ…ER·DkQ¢Ųc‰‰žŸ¾óŚLM¹Øø=2§š-ø’šų8SŸ’üIČIC‘'č1Ę"÷>a(uŠÅ•¦ż#C##ŅG‘#ĻSœs€EėnÄu.]~@‡ę“†…!üٱŁN;޵,r•ēt- Ž>‰U"£[Ń”žl”Źc*µšŲ»wļņ•£»>ūY%“DˆāĄ4Ŝ7Ų•'4,<¹į©‚łż*īČsMš¦Ęڼentt“ē¶)°eÓ&æoļ^„„čP¤Č )QqeA²@μöZްmÓ„¶žHģ987÷£T‚R*VŖj ÷>\VVĻ”W nŻźÄžżią\jŅ4ÕÅńtē,RZœShķ±VTŸ÷<žäśėÉĖō'ė<y3ń9ēž[D‹Ÿā‘<‘².“Öι Z½Z.ƒż*G©<żéy*DGj]EŃé@t³/”˜bą=/¾šĀåܝ—ó÷®Ī¾ü*6^?ū»ŠĢµ…ĘšēŽāŲ=Kš¶³<ĻU½nlŸCTś*Bnd쇖FkĀ,3„O 8ØP©B,ŅfŠ57 …*®4Em’BFĢg÷†Ž,“³A˜Åž‡.Š,Š…j÷ĖgęXkHÓ c,aŲŃBäk'&z|½ ÷vēNƤl><33³±ÕjE)•J„ʄeܽ{–X7óJ•kÆ8@±ė€‡µŻžŹRC“tĻ -ŹZŠ/WWĖYqŪ½§8MĢé…„*Rb F£Źkc,Ž7Iӄ$ɽsŽ4e/°xģ;’‰ W­× J=L£±ju„ D@Œµ® ™ååį¦(RiŅ4Dkƒ)Īåå tŁń¢®ßū¢®Æ81/]ŁēŠc;„ŠX«2ùā0Å<„ŒIŃŗŚZ[„ļ­•xļpNēÖ£Ż>lcʹĪLg›“‹O•ķ{ āčķ·Ū©ÉÉF23óšĮ#GŽžE0¦CUExß"Ļ›eĒ»ĒlĘå R#„ƹ„ĀóÕ­>—e5ĒJI¬mį}Š:ŰäyFF8×5"‹CS„Œ)=<„"Ā–³J“ēšN§I§s„G™xčŲ±q?Tƒ„>ESżĪńŪļ¼Ó½yÕŖ$yXdŁæ’bß¾Īś‘‘ÓāJ„†Ö ČņćĒi&IĒ_GÖāø2•$ œcżŠPqĢmµZGŹcŚ$I‡(Ŗ–~…äłqŅŌ ”Cėˆ0ĀŚ¢ā»Ųų,Y–†A)Ž)]ŻQ)ŠcĄ‘e-„®ŻnåĘ)5“off2‚½aL8­:sƆ}Žųź»}{ļ;vˆżēœ“®·Ót(bČYkt5s$Ļ… ĆLd™Ø ¹Lė<}äkj­GLšvu†8WŹ c”׌Ź,[AtB!Ž)ē2ć}`ŒQZŹP†aŠ“ÖĒĪe. ­ö> ĖŚ‰RB'EĘBk)Ė"”TG”8k£Ü{YŪI«ÕéČŚģ@§“m9tȊķŪ{|‚'–_Ū·Ė;@n“ū[-iŽ÷ŒŽ’5›~ljŹļ*##āČīŻnė¼éµkjJ®ŃA’H72ā»Fˆ¬Tо83y¶n]Ļ“›šņlŚäٳG°i“ßµgŲ²i“æćĪ;‹óǁ½÷ݧōА0ĒūŃuėüžVKšµk½>|XlÜøŃpēŽeĪ„/­AæčēDōŽū?Ū·o—ŻßŪ·o—KŻ’hūµų=÷¹§p §p §p §p ’%š’‡­·ķ:IIEND®B`‚libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls-80/mount-origin/index.html000066400000000000000000000006601476025525100335010ustar00rootroot00000000000000
    Hello from the minimal https server example.
    You can confirm the 404 page handler by going to this nonexistant page.
    libwebsockets.org-logo.svg000066400000000000000000000226061476025525100365360ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls-80/mount-origin image/svg+xml strict-csp.svg000066400000000000000000000302361476025525100342430ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls-80/mount-origin libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls-mem/000077500000000000000000000000001476025525100274025ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls-mem/CMakeLists.txt000066400000000000000000000014131476025525100321410ustar00rootroot00000000000000project(lws-minimal-http-server-tls-mem C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-server-tls-mem) set(SRCS minimal-http-server-tls-mem.c) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) require_lws_config(LWS_WITH_TLS 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls-mem/README.md000066400000000000000000000045261476025525100306700ustar00rootroot00000000000000# lws minimal http server with tls and certs from memory This is the same as the minimal-http-server-tls example, but shows how to init the vhost with both PEM or DER certs from memory instead of files. The server listens on port 7681 (initialized with PEM in-memory certs) and port 7682 (initialized with DER in-memory certs). ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server-tls-mem [2019/02/14 14:46:40:9783] USER: LWS minimal http server TLS | visit https://localhost:7681 [2019/02/14 14:46:40:9784] NOTICE: Using SSL mode [2019/02/14 14:46:40:9784] NOTICE: lws_tls_server_vhost_backend_init: vh first: mem CA OK parsing as der [2019/02/14 14:46:40:9849] NOTICE: no client cert required [2019/02/14 14:46:40:9849] NOTICE: created client ssl context for first [2019/02/14 14:46:40:9849] NOTICE: Using SSL mode [2019/02/14 14:46:40:9850] NOTICE: lws_tls_server_vhost_backend_init: vh second: mem CA OK parsing as der [2019/02/14 14:46:40:9894] NOTICE: no client cert required [2019/02/14 14:46:40:9894] NOTICE: created client ssl context for second [2019/02/14 14:46:40:9894] NOTICE: vhost first: cert expiry: 36167d [2019/02/14 14:46:40:9894] NOTICE: vhost second: cert expiry: 36167d [2018/03/20 13:23:14:0207] NOTICE: vhost default: cert expiry: 730459d ``` Visit https://127.0.0.1:7681 and https://127.0.0.1:7682 Because it uses a selfsigned certificate, you will have to make an exception for it in your browser. ## Certificate creation The selfsigned certs provided were created with ``` echo -e "GB\nErewhon\nAll around\nlibwebsockets-test\n\nlocalhost\nnone@invalid.org\n" | openssl req -new -newkey rsa:4096 -days 36500 -nodes -x509 -keyout "localhost-100y.key" -out "localhost-100y.cert" ``` they cover "localhost" and last 100 years from 2018-03-20. You can replace them with commercial certificates matching your hostname. The der content was made from PEM like this ``` $ cat ../minimal-http-server-tls/localhost-100y.key | grep -v ^- | base64 -d | hexdump -C | tr -s ' ' | cut -d' ' -f2- | cut -d' ' -f-16 | sed "s/|.*//g" | sed "s/0000.*//g" | sed "s/^/0x/g" | sed "s/\ /\,\ 0x/g" | sed "s/\$/,/g" | sed "s/0x,//g" ``` ## HTTP/2 If you built lws with `-DLWS_WITH_HTTP2=1` at cmake, this simple server is also http/2 capable out of the box. If the index.html was loaded over http/2, it will display an HTTP 2 png. minimal-http-server-tls-mem.c000066400000000000000000001005001476025525100347460ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls-mem/* * lws-minimal-http-server-tls * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws, * with three extra lines giving it tls (ssl) capabilities, which in * turn allow operation with HTTP/2 if lws was configured for it. * * To keep it simple, it serves stuff from the subdirectory * "./mount-origin" of the directory it was started in. * * You can change that by changing mount.origin below. */ #include #include #include static int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; /* the cert and key as PEM */ static const char *cert_pem = "-----BEGIN CERTIFICATE-----\n" "MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD\n" "VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb\n" "MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx\n" "HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3\n" "WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl\n" "d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0\n" "cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA\n" "aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW\n" "aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8\n" "Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek\n" "LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH\n" "KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6\n" "jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ\n" "Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz\n" "TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK\n" "Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0\n" "nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo\n" "GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p\n" "sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU\n" "9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar\n" "jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow\n" "YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA\n" "xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P\n" "wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34\n" "H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv\n" "xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk\n" "ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g\n" "1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA\n" "AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg\n" "mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s\n" "8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX\n" "e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE=\n" "-----END CERTIFICATE-----\n", *key_pem = "-----BEGIN PRIVATE KEY-----\n" "MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ\n" "PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK\n" "nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ\n" "toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU\n" "0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT\n" "J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS\n" "Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN\n" "uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9\n" "fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn\n" "zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au\n" "ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB\n" "QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f\n" "qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+\n" "vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9\n" "fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A\n" "Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT\n" "G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/\n" "HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8\n" "YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl\n" "xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs\n" "esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw\n" "zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz\n" "mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw\n" "au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77\n" "40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5\n" "YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH\n" "PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj\n" "W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR\n" "naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6\n" "2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m\n" "39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79\n" "J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC\n" "R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp\n" "Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh\n" "BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE\n" "fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ\n" "x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI\n" "UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM\n" "OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L\n" "65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A\n" "aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5\n" "SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S\n" "me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I\n" "G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK\n" "TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY\n" "56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2\n" "gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr\n" "Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E\n" "NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs\n" "fBrpEY1IATtPq1taBZZogRqI3rOkkPk=\n" "-----END PRIVATE KEY-----\n" ; static const uint8_t cert_der[] = { 0x30, 0x82, 0x05, 0xe6, 0x30, 0x82, 0x03, 0xce, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00, 0xda, 0xb9, 0xd0, 0x8b, 0xb0, 0x3c, 0x52, 0xa0, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0x86, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x42, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x07, 0x45, 0x72, 0x65, 0x77, 0x68, 0x6f, 0x6e, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x0a, 0x41, 0x6c, 0x6c, 0x20, 0x61, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x12, 0x6c, 0x69, 0x62, 0x77, 0x65, 0x62, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2d, 0x74, 0x65, 0x73, 0x74, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x01, 0x16, 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x2e, 0x6f, 0x72, 0x67, 0x30, 0x20, 0x17, 0x0d, 0x31, 0x38, 0x30, 0x33, 0x32, 0x30, 0x30, 0x34, 0x31, 0x36, 0x30, 0x37, 0x5a, 0x18, 0x0f, 0x32, 0x31, 0x31, 0x38, 0x30, 0x32, 0x32, 0x34, 0x30, 0x34, 0x31, 0x36, 0x30, 0x37, 0x5a, 0x30, 0x81, 0x86, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x42, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x07, 0x45, 0x72, 0x65, 0x77, 0x68, 0x6f, 0x6e, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x0a, 0x41, 0x6c, 0x6c, 0x20, 0x61, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x12, 0x6c, 0x69, 0x62, 0x77, 0x65, 0x62, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2d, 0x74, 0x65, 0x73, 0x74, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x01, 0x16, 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x2e, 0x6f, 0x72, 0x67, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xa3, 0x62, 0xdb, 0x96, 0x68, 0x80, 0x82, 0x63, 0x4b, 0x49, 0x3e, 0xe6, 0xf1, 0xa4, 0x88, 0x08, 0x2f, 0xe5, 0x96, 0x9b, 0x3f, 0xdf, 0x98, 0xaf, 0x08, 0x42, 0xbd, 0x75, 0x5a, 0xd7, 0x9e, 0xeb, 0xf2, 0x14, 0xc9, 0x49, 0x68, 0xe4, 0x8e, 0xb4, 0xda, 0x6a, 0xb5, 0xa9, 0xc2, 0xe1, 0x4f, 0xf9, 0x26, 0xa6, 0x84, 0x7c, 0x0e, 0x2d, 0xc3, 0x02, 0x61, 0xca, 0x9d, 0x25, 0x9d, 0x3d, 0x6b, 0x67, 0xd4, 0x1b, 0x57, 0x2c, 0x4a, 0xcb, 0x95, 0x48, 0x87, 0x81, 0x90, 0xeb, 0x65, 0x62, 0x27, 0x98, 0x40, 0x63, 0x28, 0xcd, 0x43, 0x65, 0xff, 0x82, 0xbc, 0xd1, 0x99, 0xf8, 0x4c, 0xcf, 0x80, 0x1b, 0xf9, 0x9d, 0x37, 0xa4, 0x2d, 0x67, 0x1f, 0x23, 0x96, 0x59, 0xb6, 0x81, 0xae, 0x20, 0xfd, 0x43, 0x97, 0xf2, 0x24, 0x34, 0x3c, 0x3c, 0xcc, 0x5c, 0xf8, 0x72, 0x98, 0x8c, 0x7b, 0xf0, 0x45, 0x19, 0xe9, 0xb2, 0xc5, 0xd1, 0xe1, 0x2e, 0xb2, 0x87, 0x4a, 0x6f, 0x04, 0xa3, 0xe9, 0xd3, 0xef, 0x7e, 0x2d, 0x22, 0xd9, 0xc7, 0x29, 0x3f, 0xe6, 0xe8, 0x34, 0x94, 0xd3, 0x19, 0x59, 0xd7, 0x77, 0x7a, 0x7a, 0x12, 0xd1, 0x9b, 0xbf, 0xfe, 0x37, 0x1e, 0x3b, 0x33, 0x75, 0xcc, 0x4d, 0x11, 0xf9, 0xa8, 0xa3, 0xff, 0xed, 0x34, 0xc4, 0xda, 0xcd, 0x14, 0xeb, 0xe3, 0x34, 0xb6, 0xc1, 0x88, 0xdb, 0x3a, 0x51, 0x8b, 0xe9, 0xba, 0x8f, 0x38, 0x4d, 0xc8, 0xc0, 0x53, 0x27, 0x5b, 0xb9, 0xf2, 0xa0, 0x1e, 0xdd, 0x95, 0xb9, 0xff, 0xe6, 0x00, 0x8a, 0xe6, 0x58, 0x00, 0x1e, 0xa7, 0xe5, 0xb8, 0x54, 0xa7, 0x8a, 0x05, 0xb8, 0x1e, 0x70, 0x61, 0xb7, 0x01, 0xcb, 0x05, 0x51, 0xf2, 0xe8, 0xc8, 0x9e, 0x91, 0x7c, 0x6e, 0xe5, 0x90, 0x52, 0x3c, 0xb9, 0x37, 0xca, 0x52, 0x36, 0x9e, 0xec, 0xcd, 0xd6, 0x2c, 0x9c, 0xb2, 0x69, 0xbc, 0x07, 0x74, 0xb2, 0x26, 0xeb, 0x34, 0xf8, 0xc2, 0xd0, 0x54, 0x02, 0x36, 0xba, 0x4d, 0x8e, 0x02, 0x66, 0x20, 0xad, 0xfe, 0x98, 0xa9, 0x38, 0x91, 0x75, 0xfb, 0x65, 0x3c, 0x1e, 0x7e, 0x80, 0x33, 0x4c, 0xae, 0x25, 0xda, 0x91, 0xcd, 0xb8, 0x2e, 0x77, 0x41, 0x57, 0x3f, 0x10, 0x5f, 0xbe, 0x18, 0x12, 0xc0, 0xc6, 0x6b, 0xc2, 0x0e, 0xaf, 0x59, 0xa4, 0xc2, 0x18, 0x8b, 0xb3, 0xa6, 0xce, 0x49, 0x00, 0x28, 0xa0, 0xbd, 0x51, 0xee, 0x84, 0x7f, 0x6d, 0x7b, 0x2c, 0x54, 0x02, 0x14, 0x80, 0x4a, 0x23, 0x3b, 0xfd, 0x72, 0x08, 0xbd, 0x7f, 0x03, 0xcc, 0x2e, 0x1a, 0xca, 0x95, 0xea, 0x15, 0x44, 0xdb, 0x1e, 0x70, 0x1b, 0x02, 0x3f, 0x9e, 0xbd, 0x5a, 0x02, 0x57, 0x85, 0x49, 0xf0, 0x7f, 0x69, 0x68, 0x9f, 0x87, 0xc4, 0x66, 0xbd, 0xfe, 0xbd, 0x1b, 0x9c, 0xf6, 0xc8, 0x5f, 0xaa, 0x75, 0x74, 0x9c, 0xf3, 0x75, 0x20, 0xc4, 0xa7, 0xcd, 0x70, 0x9a, 0xb2, 0xde, 0xc8, 0xd9, 0xf8, 0xae, 0x45, 0x77, 0x48, 0xcf, 0xde, 0x8a, 0x8e, 0x51, 0x90, 0xa4, 0xfe, 0x17, 0x7c, 0xd5, 0x40, 0xf9, 0x11, 0x8b, 0xed, 0xa3, 0x27, 0x58, 0xe1, 0x48, 0x69, 0x5a, 0xca, 0x58, 0xbc, 0xc0, 0xb6, 0x0c, 0xe8, 0x18, 0xc4, 0xef, 0x3f, 0xf0, 0x2e, 0x7a, 0x12, 0x97, 0x9d, 0xc0, 0x49, 0x85, 0x8b, 0x56, 0xd2, 0x5b, 0x53, 0x8a, 0x85, 0x71, 0xfb, 0x9c, 0x93, 0x61, 0x20, 0x19, 0x5a, 0x5f, 0x88, 0xb2, 0xc9, 0x97, 0x8d, 0xe7, 0xf1, 0x26, 0xa6, 0x22, 0xdb, 0xfe, 0xd0, 0x5a, 0x6b, 0xf5, 0x40, 0x2f, 0x69, 0xb0, 0xd7, 0x23, 0x4c, 0xc6, 0x81, 0x40, 0xb3, 0x74, 0xdd, 0x3d, 0x50, 0x7a, 0x56, 0xec, 0xed, 0x8d, 0xbb, 0xb3, 0x17, 0x44, 0x9c, 0xd5, 0x2d, 0x87, 0x89, 0x08, 0xfb, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x53, 0x30, 0x51, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xf6, 0x66, 0x14, 0xdb, 0x7b, 0x56, 0xdb, 0x3b, 0x28, 0x9a, 0x42, 0x93, 0x01, 0x76, 0xab, 0x8e, 0xbd, 0xaf, 0x8e, 0xeb, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xf6, 0x66, 0x14, 0xdb, 0x7b, 0x56, 0xdb, 0x3b, 0x28, 0x9a, 0x42, 0x93, 0x01, 0x76, 0xab, 0x8e, 0xbd, 0xaf, 0x8e, 0xeb, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x36, 0x32, 0x01, 0x32, 0xba, 0x30, 0x60, 0xd0, 0x9b, 0x84, 0x02, 0x5d, 0x3f, 0xb7, 0x61, 0x96, 0x14, 0xf6, 0x45, 0x41, 0x51, 0x75, 0xe4, 0x54, 0x24, 0x3d, 0x08, 0xc6, 0xb1, 0xff, 0x86, 0x4b, 0xdb, 0xea, 0x6c, 0x87, 0x1e, 0x72, 0xbc, 0x9c, 0xe6, 0x1e, 0xcc, 0x53, 0xe3, 0x52, 0x59, 0x91, 0x29, 0x48, 0x0d, 0x10, 0x3b, 0x80, 0xc5, 0xb9, 0xd7, 0x67, 0x33, 0xdd, 0x09, 0x13, 0x55, 0xf5, 0x5d, 0xa6, 0x4a, 0x16, 0xd7, 0xbc, 0x2c, 0xa2, 0x0d, 0x8e, 0xd6, 0x09, 0x01, 0x36, 0x06, 0x7e, 0x38, 0xcf, 0x6e, 0x8e, 0xd2, 0xe5, 0x95, 0x93, 0xee, 0xc3, 0x34, 0xd2, 0xc7, 0xf4, 0x19, 0xe4, 0xc1, 0x4b, 0x4e, 0x9c, 0xcf, 0x4f, 0xc2, 0xd9, 0x83, 0xf6, 0x98, 0x56, 0x7b, 0x19, 0xb8, 0xab, 0x61, 0xa7, 0x4e, 0xc8, 0x8b, 0xe9, 0x49, 0x7a, 0x73, 0x2d, 0x10, 0x95, 0x32, 0x56, 0x29, 0x52, 0xc4, 0x51, 0x04, 0x3a, 0xc9, 0xd6, 0xb9, 0xf3, 0x67, 0xb6, 0xdc, 0x9d, 0x40, 0x5e, 0xab, 0x6a, 0x15, 0xca, 0x5f, 0xa0, 0x4d, 0xf8, 0x1f, 0x76, 0x9f, 0x12, 0x21, 0xb2, 0xf3, 0xcd, 0x9b, 0xf9, 0x90, 0x62, 0xc2, 0x47, 0x95, 0xfa, 0x8a, 0xba, 0x5d, 0x51, 0x7c, 0xb0, 0x5c, 0xab, 0xf7, 0x36, 0x2b, 0xbf, 0xd0, 0xaf, 0x59, 0x36, 0x25, 0x92, 0x94, 0xd0, 0x7c, 0xb4, 0xd9, 0x4a, 0xc8, 0x0f, 0x74, 0x41, 0xd8, 0x55, 0xc8, 0xef, 0xc5, 0x0d, 0x83, 0xf9, 0x7c, 0x83, 0x47, 0x46, 0x91, 0x2d, 0x19, 0x6f, 0xc5, 0x46, 0xbd, 0x74, 0x71, 0x85, 0x1c, 0xb2, 0x02, 0x1b, 0x7e, 0x09, 0xba, 0xae, 0x40, 0x8b, 0xa9, 0x4c, 0xd4, 0x4b, 0x28, 0x0f, 0xc1, 0xd2, 0xb0, 0x9a, 0x4c, 0x72, 0x6a, 0xc7, 0xec, 0xc5, 0xb0, 0xd9, 0xc2, 0xa4, 0xba, 0x30, 0xb7, 0xac, 0xc7, 0x45, 0x4e, 0xdb, 0x5e, 0xf3, 0x7c, 0x05, 0xd6, 0xeb, 0x85, 0xe0, 0x58, 0xd4, 0x0b, 0xbd, 0xbe, 0x4a, 0x67, 0x10, 0x37, 0xb0, 0x37, 0xf3, 0xa0, 0x42, 0xfe, 0x79, 0x36, 0x4d, 0x3b, 0x09, 0x6b, 0x04, 0xc3, 0xce, 0xac, 0x0e, 0xbb, 0xf5, 0x5d, 0x66, 0xfd, 0xa0, 0xd5, 0x6a, 0x53, 0x1e, 0x5b, 0xa6, 0x94, 0x29, 0x59, 0x78, 0xff, 0x86, 0xfe, 0x39, 0x12, 0xc8, 0x3c, 0x2a, 0x36, 0x74, 0xee, 0xd5, 0xaa, 0x1d, 0x0e, 0x65, 0x1a, 0xe3, 0x16, 0x68, 0x75, 0xf8, 0x4f, 0xd4, 0x75, 0x8f, 0xc1, 0x42, 0x85, 0x72, 0xaf, 0x28, 0x42, 0xbd, 0x78, 0xf1, 0x06, 0x00, 0x00, 0xe9, 0x5b, 0x50, 0xe2, 0x50, 0x53, 0xb4, 0x30, 0x45, 0x67, 0x75, 0x55, 0xb9, 0xf0, 0x84, 0x3b, 0x50, 0x59, 0x70, 0xbd, 0xd8, 0x0d, 0xb0, 0xd6, 0x7f, 0xf1, 0x91, 0x94, 0x91, 0xd4, 0x13, 0x3f, 0x35, 0x44, 0x83, 0x86, 0x40, 0x52, 0x51, 0x4d, 0x56, 0x8c, 0xc6, 0xd6, 0x83, 0xa1, 0xa0, 0x9a, 0x72, 0x19, 0x2d, 0x17, 0xab, 0x40, 0x2b, 0xb5, 0x3a, 0x8c, 0xeb, 0xf3, 0xba, 0xce, 0x42, 0xa4, 0x1a, 0x90, 0xf9, 0x32, 0xb7, 0xc0, 0x54, 0x48, 0xd2, 0xb7, 0x2b, 0x8d, 0xa3, 0xda, 0xa7, 0x1f, 0x84, 0x03, 0x8d, 0x75, 0x19, 0x7c, 0x1e, 0xaf, 0x10, 0xb3, 0x9a, 0x6e, 0xa7, 0x2f, 0xac, 0xf2, 0xc7, 0x42, 0x18, 0x39, 0x70, 0x47, 0x72, 0x4d, 0x08, 0xcb, 0xfa, 0xbb, 0x8f, 0x0e, 0x2b, 0xce, 0xc5, 0xe2, 0x67, 0x08, 0xc6, 0x19, 0x12, 0x79, 0xf1, 0x49, 0x50, 0x52, 0x08, 0xdb, 0x9a, 0x42, 0x18, 0xde, 0x56, 0xb4, 0x4e, 0x29, 0xe6, 0x5f, 0xbd, 0x72, 0x73, 0xb5, 0x1a, 0xb2, 0x17, 0x7b, 0x61, 0xe5, 0xff, 0xb3, 0x34, 0x73, 0xf9, 0x5b, 0x67, 0x81, 0x6f, 0x5e, 0x00, 0x11, 0x95, 0xec, 0x76, 0xae, 0x48, 0x12, 0xd0, 0xa6, 0xb4, 0xe8, 0x71, }, key_der[] = { 0x30, 0x82, 0x09, 0x43, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 0x09, 0x2d, 0x30, 0x82, 0x09, 0x29, 0x02, 0x01, 0x00, 0x02, 0x82, 0x02, 0x01, 0x00, 0xa3, 0x62, 0xdb, 0x96, 0x68, 0x80, 0x82, 0x63, 0x4b, 0x49, 0x3e, 0xe6, 0xf1, 0xa4, 0x88, 0x08, 0x2f, 0xe5, 0x96, 0x9b, 0x3f, 0xdf, 0x98, 0xaf, 0x08, 0x42, 0xbd, 0x75, 0x5a, 0xd7, 0x9e, 0xeb, 0xf2, 0x14, 0xc9, 0x49, 0x68, 0xe4, 0x8e, 0xb4, 0xda, 0x6a, 0xb5, 0xa9, 0xc2, 0xe1, 0x4f, 0xf9, 0x26, 0xa6, 0x84, 0x7c, 0x0e, 0x2d, 0xc3, 0x02, 0x61, 0xca, 0x9d, 0x25, 0x9d, 0x3d, 0x6b, 0x67, 0xd4, 0x1b, 0x57, 0x2c, 0x4a, 0xcb, 0x95, 0x48, 0x87, 0x81, 0x90, 0xeb, 0x65, 0x62, 0x27, 0x98, 0x40, 0x63, 0x28, 0xcd, 0x43, 0x65, 0xff, 0x82, 0xbc, 0xd1, 0x99, 0xf8, 0x4c, 0xcf, 0x80, 0x1b, 0xf9, 0x9d, 0x37, 0xa4, 0x2d, 0x67, 0x1f, 0x23, 0x96, 0x59, 0xb6, 0x81, 0xae, 0x20, 0xfd, 0x43, 0x97, 0xf2, 0x24, 0x34, 0x3c, 0x3c, 0xcc, 0x5c, 0xf8, 0x72, 0x98, 0x8c, 0x7b, 0xf0, 0x45, 0x19, 0xe9, 0xb2, 0xc5, 0xd1, 0xe1, 0x2e, 0xb2, 0x87, 0x4a, 0x6f, 0x04, 0xa3, 0xe9, 0xd3, 0xef, 0x7e, 0x2d, 0x22, 0xd9, 0xc7, 0x29, 0x3f, 0xe6, 0xe8, 0x34, 0x94, 0xd3, 0x19, 0x59, 0xd7, 0x77, 0x7a, 0x7a, 0x12, 0xd1, 0x9b, 0xbf, 0xfe, 0x37, 0x1e, 0x3b, 0x33, 0x75, 0xcc, 0x4d, 0x11, 0xf9, 0xa8, 0xa3, 0xff, 0xed, 0x34, 0xc4, 0xda, 0xcd, 0x14, 0xeb, 0xe3, 0x34, 0xb6, 0xc1, 0x88, 0xdb, 0x3a, 0x51, 0x8b, 0xe9, 0xba, 0x8f, 0x38, 0x4d, 0xc8, 0xc0, 0x53, 0x27, 0x5b, 0xb9, 0xf2, 0xa0, 0x1e, 0xdd, 0x95, 0xb9, 0xff, 0xe6, 0x00, 0x8a, 0xe6, 0x58, 0x00, 0x1e, 0xa7, 0xe5, 0xb8, 0x54, 0xa7, 0x8a, 0x05, 0xb8, 0x1e, 0x70, 0x61, 0xb7, 0x01, 0xcb, 0x05, 0x51, 0xf2, 0xe8, 0xc8, 0x9e, 0x91, 0x7c, 0x6e, 0xe5, 0x90, 0x52, 0x3c, 0xb9, 0x37, 0xca, 0x52, 0x36, 0x9e, 0xec, 0xcd, 0xd6, 0x2c, 0x9c, 0xb2, 0x69, 0xbc, 0x07, 0x74, 0xb2, 0x26, 0xeb, 0x34, 0xf8, 0xc2, 0xd0, 0x54, 0x02, 0x36, 0xba, 0x4d, 0x8e, 0x02, 0x66, 0x20, 0xad, 0xfe, 0x98, 0xa9, 0x38, 0x91, 0x75, 0xfb, 0x65, 0x3c, 0x1e, 0x7e, 0x80, 0x33, 0x4c, 0xae, 0x25, 0xda, 0x91, 0xcd, 0xb8, 0x2e, 0x77, 0x41, 0x57, 0x3f, 0x10, 0x5f, 0xbe, 0x18, 0x12, 0xc0, 0xc6, 0x6b, 0xc2, 0x0e, 0xaf, 0x59, 0xa4, 0xc2, 0x18, 0x8b, 0xb3, 0xa6, 0xce, 0x49, 0x00, 0x28, 0xa0, 0xbd, 0x51, 0xee, 0x84, 0x7f, 0x6d, 0x7b, 0x2c, 0x54, 0x02, 0x14, 0x80, 0x4a, 0x23, 0x3b, 0xfd, 0x72, 0x08, 0xbd, 0x7f, 0x03, 0xcc, 0x2e, 0x1a, 0xca, 0x95, 0xea, 0x15, 0x44, 0xdb, 0x1e, 0x70, 0x1b, 0x02, 0x3f, 0x9e, 0xbd, 0x5a, 0x02, 0x57, 0x85, 0x49, 0xf0, 0x7f, 0x69, 0x68, 0x9f, 0x87, 0xc4, 0x66, 0xbd, 0xfe, 0xbd, 0x1b, 0x9c, 0xf6, 0xc8, 0x5f, 0xaa, 0x75, 0x74, 0x9c, 0xf3, 0x75, 0x20, 0xc4, 0xa7, 0xcd, 0x70, 0x9a, 0xb2, 0xde, 0xc8, 0xd9, 0xf8, 0xae, 0x45, 0x77, 0x48, 0xcf, 0xde, 0x8a, 0x8e, 0x51, 0x90, 0xa4, 0xfe, 0x17, 0x7c, 0xd5, 0x40, 0xf9, 0x11, 0x8b, 0xed, 0xa3, 0x27, 0x58, 0xe1, 0x48, 0x69, 0x5a, 0xca, 0x58, 0xbc, 0xc0, 0xb6, 0x0c, 0xe8, 0x18, 0xc4, 0xef, 0x3f, 0xf0, 0x2e, 0x7a, 0x12, 0x97, 0x9d, 0xc0, 0x49, 0x85, 0x8b, 0x56, 0xd2, 0x5b, 0x53, 0x8a, 0x85, 0x71, 0xfb, 0x9c, 0x93, 0x61, 0x20, 0x19, 0x5a, 0x5f, 0x88, 0xb2, 0xc9, 0x97, 0x8d, 0xe7, 0xf1, 0x26, 0xa6, 0x22, 0xdb, 0xfe, 0xd0, 0x5a, 0x6b, 0xf5, 0x40, 0x2f, 0x69, 0xb0, 0xd7, 0x23, 0x4c, 0xc6, 0x81, 0x40, 0xb3, 0x74, 0xdd, 0x3d, 0x50, 0x7a, 0x56, 0xec, 0xed, 0x8d, 0xbb, 0xb3, 0x17, 0x44, 0x9c, 0xd5, 0x2d, 0x87, 0x89, 0x08, 0xfb, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, 0x82, 0x02, 0x00, 0x55, 0x9e, 0xf0, 0xc4, 0x19, 0x6f, 0x7e, 0xe4, 0xda, 0x07, 0x40, 0x57, 0x76, 0x3a, 0x6a, 0xaf, 0x1f, 0xaa, 0x89, 0x0a, 0x42, 0xa6, 0xc2, 0x34, 0xb7, 0x77, 0x82, 0x21, 0x85, 0xc1, 0x89, 0x1e, 0xcc, 0x75, 0xe8, 0x25, 0xf8, 0x3a, 0x0e, 0x2e, 0xe8, 0x67, 0x13, 0x5c, 0x2b, 0x2c, 0x37, 0xe4, 0xb1, 0x44, 0x82, 0x19, 0x20, 0xb5, 0x0a, 0x84, 0xad, 0x0a, 0xa8, 0xdf, 0x95, 0x4f, 0x22, 0x81, 0xfe, 0xbd, 0x75, 0x29, 0x58, 0xe8, 0xe7, 0x0a, 0x63, 0x38, 0x9a, 0xe1, 0x40, 0xf7, 0xf7, 0x17, 0xea, 0x66, 0x0c, 0x73, 0xc4, 0xe6, 0x26, 0xc8, 0x34, 0x7b, 0x02, 0xdd, 0x04, 0x23, 0x99, 0x57, 0x0f, 0xb0, 0x3c, 0x00, 0x65, 0x6a, 0xac, 0xfe, 0xd1, 0x43, 0xa2, 0x48, 0xc3, 0x1f, 0xb6, 0x99, 0x3d, 0x7f, 0x3f, 0x49, 0xc0, 0x67, 0x7c, 0x11, 0x1c, 0x81, 0xb1, 0x3f, 0xad, 0x93, 0x74, 0x22, 0xe8, 0x3d, 0x2f, 0x3d, 0x95, 0x6c, 0x0b, 0x52, 0xaa, 0xc7, 0x12, 0xff, 0x73, 0x02, 0x05, 0x77, 0x71, 0xdf, 0xd9, 0x90, 0x6d, 0x25, 0x77, 0xb4, 0x28, 0x19, 0xf5, 0xa6, 0x4b, 0x56, 0x86, 0xde, 0x40, 0x2a, 0xac, 0x7d, 0x9a, 0x57, 0x76, 0x3a, 0xf9, 0x7b, 0x36, 0x38, 0x22, 0x0b, 0x51, 0x71, 0xf6, 0xbf, 0x9f, 0x67, 0x0f, 0xe2, 0x39, 0xa6, 0xc5, 0x17, 0x04, 0x00, 0xe1, 0xda, 0xfe, 0x47, 0xc9, 0x84, 0x30, 0xaf, 0xfb, 0x6d, 0xde, 0x15, 0x5d, 0xf4, 0x35, 0xa3, 0xf4, 0x06, 0x19, 0xb3, 0x13, 0x1b, 0xeb, 0xa5, 0x16, 0xbb, 0x22, 0x0f, 0x23, 0xfe, 0xac, 0x12, 0x00, 0x68, 0x60, 0xb4, 0x8b, 0xb8, 0x03, 0x8c, 0xb0, 0x08, 0x05, 0x07, 0x83, 0x84, 0xfe, 0x34, 0xf5, 0x98, 0x6c, 0xc0, 0x81, 0x1c, 0xfc, 0x60, 0x6d, 0x38, 0x35, 0x37, 0xef, 0x66, 0xb6, 0x09, 0x02, 0xbf, 0xbb, 0x84, 0x3f, 0x1c, 0x14, 0x2f, 0xb8, 0x1b, 0x4a, 0x14, 0xd9, 0x06, 0x52, 0x8a, 0x0b, 0x80, 0x20, 0x9b, 0x17, 0x1c, 0xe0, 0x35, 0x41, 0x9c, 0xf3, 0x71, 0x81, 0xff, 0xa2, 0x30, 0x6c, 0x43, 0x3b, 0x47, 0x9b, 0x97, 0xaa, 0xc1, 0x62, 0x13, 0xbd, 0x4b, 0xa6, 0x6a, 0xe8, 0x0f, 0x28, 0xca, 0x4e, 0x54, 0x3c, 0x61, 0x99, 0x29, 0x21, 0xc2, 0xcd, 0x54, 0xbc, 0x34, 0xba, 0xca, 0x06, 0x60, 0x71, 0x66, 0xda, 0xbb, 0xc2, 0xc8, 0x45, 0x65, 0x7e, 0xc1, 0x37, 0x51, 0xbf, 0x1c, 0x17, 0x24, 0xc5, 0x93, 0x9d, 0x12, 0x78, 0xe7, 0x05, 0xd9, 0x02, 0xf6, 0xc7, 0x32, 0xa6, 0x99, 0xb6, 0x44, 0xa5, 0x78, 0x25, 0xc4, 0x11, 0xd1, 0xd2, 0x18, 0xe0, 0xa2, 0x7d, 0x08, 0x28, 0x90, 0xc6, 0x7e, 0x8a, 0xf8, 0x6c, 0x73, 0xbb, 0x36, 0xdf, 0xb5, 0x11, 0xc7, 0xbc, 0xbb, 0x6a, 0x13, 0x10, 0xab, 0xe9, 0xcf, 0x96, 0x88, 0x9f, 0x8e, 0x0e, 0x78, 0x2e, 0x66, 0x02, 0x94, 0x46, 0xcb, 0xcd, 0xff, 0xd1, 0xbb, 0xec, 0x7a, 0xc9, 0xd6, 0x8c, 0x31, 0x3f, 0x6c, 0x6a, 0x68, 0x4f, 0xca, 0x85, 0xbb, 0x2f, 0xb4, 0xba, 0xb0, 0xc4, 0x3c, 0xd2, 0x1d, 0xe3, 0x85, 0xdc, 0x26, 0x6d, 0x48, 0x44, 0x89, 0x46, 0xe7, 0xa1, 0x2b, 0xc4, 0x2d, 0xe5, 0xd2, 0xcd, 0x75, 0xc2, 0xb2, 0x29, 0x4e, 0x65, 0xd7, 0x72, 0x4a, 0xb0, 0xcc, 0x54, 0x7d, 0xb3, 0x6c, 0xfb, 0x7f, 0x4c, 0xe3, 0x7b, 0x2c, 0x6a, 0x66, 0x0e, 0x0d, 0x4c, 0xf2, 0x3b, 0xc2, 0x43, 0x37, 0x33, 0xc0, 0x57, 0x96, 0xfa, 0x76, 0x19, 0x30, 0x48, 0x7a, 0x8c, 0x6b, 0x58, 0x1e, 0x15, 0xdd, 0x80, 0x2b, 0xc2, 0xef, 0x10, 0x17, 0xcd, 0x10, 0x06, 0x05, 0x73, 0x9a, 0x01, 0xe5, 0xdb, 0x89, 0xd3, 0x83, 0x4d, 0x14, 0x1f, 0x53, 0xa3, 0x66, 0xc0, 0x01, 0x02, 0x82, 0x01, 0x01, 0x00, 0xce, 0xc5, 0xfb, 0x52, 0x0d, 0xb4, 0xaa, 0x1b, 0x2b, 0x5c, 0x5a, 0xa3, 0xd8, 0x3f, 0x74, 0x99, 0x1c, 0x05, 0x83, 0x03, 0x43, 0xb8, 0x00, 0x21, 0x0c, 0xf9, 0xe0, 0xb0, 0x6a, 0xef, 0x40, 0x4a, 0xeb, 0x65, 0xd0, 0x80, 0xe5, 0x34, 0x33, 0x09, 0xf2, 0x70, 0xb6, 0xa6, 0x1d, 0xb9, 0x04, 0xc7, 0xb9, 0x84, 0x70, 0xd6, 0xa7, 0x67, 0x06, 0x40, 0x9a, 0x20, 0xee, 0x96, 0x7f, 0xde, 0xa4, 0x28, 0x81, 0x08, 0x68, 0xda, 0x05, 0x27, 0x88, 0xa0, 0xe2, 0x7c, 0xde, 0xfb, 0xe3, 0x44, 0x1d, 0xca, 0x49, 0x65, 0x4f, 0x34, 0xd5, 0x44, 0xea, 0xa6, 0x3f, 0xcf, 0x9e, 0x7e, 0xb7, 0x88, 0xbe, 0xa9, 0x73, 0x1e, 0x6b, 0xaa, 0x68, 0x67, 0xc6, 0xb3, 0x9a, 0x13, 0x91, 0x96, 0x96, 0x8f, 0x9b, 0x2e, 0xf8, 0x1f, 0x9b, 0x4f, 0xef, 0x6b, 0x23, 0x06, 0x5c, 0xc1, 0xfb, 0x39, 0x61, 0x12, 0x0d, 0x85, 0x04, 0x71, 0xd7, 0xba, 0x9a, 0xfb, 0xec, 0x61, 0xe6, 0x67, 0xc4, 0xdb, 0x97, 0x3e, 0x33, 0xd7, 0xe2, 0x20, 0x14, 0xe2, 0x35, 0x2a, 0x38, 0x95, 0x3c, 0x56, 0x30, 0x14, 0xa1, 0x9c, 0xaf, 0x31, 0xac, 0x66, 0x8c, 0x12, 0x63, 0x7b, 0x5b, 0x4a, 0x93, 0x31, 0xb1, 0x47, 0x3e, 0x04, 0x33, 0xe4, 0x57, 0x31, 0x46, 0x30, 0x82, 0xab, 0x01, 0xe2, 0x97, 0x03, 0x41, 0x78, 0xb0, 0xd3, 0xa7, 0xf6, 0x44, 0x08, 0x40, 0x7b, 0xcb, 0x7e, 0x24, 0x85, 0x58, 0x79, 0xdf, 0x59, 0x81, 0x13, 0x69, 0x8d, 0xcd, 0x25, 0x48, 0x41, 0xc1, 0x99, 0x3f, 0x52, 0x3f, 0x0e, 0xf5, 0xe3, 0x5b, 0xb5, 0x14, 0x35, 0xd8, 0x05, 0xc2, 0x28, 0xbf, 0x19, 0x6f, 0xba, 0x33, 0x4b, 0x94, 0x0f, 0x2d, 0xb7, 0x51, 0x54, 0x29, 0x6c, 0x5c, 0xdc, 0x57, 0xca, 0x35, 0x0b, 0x69, 0xd9, 0x73, 0x81, 0x5b, 0xe3, 0x3c, 0x01, 0x02, 0x82, 0x01, 0x01, 0x00, 0xca, 0x48, 0x99, 0x05, 0xc3, 0x0b, 0x91, 0x9d, 0xa5, 0x49, 0x4b, 0xa5, 0xb1, 0x38, 0xa8, 0xd7, 0xf0, 0xc0, 0xae, 0xf7, 0xf7, 0x0a, 0x3e, 0x7c, 0x01, 0xbf, 0x69, 0xa6, 0x23, 0x68, 0xe0, 0x1b, 0x11, 0xd3, 0xc3, 0x9b, 0x2b, 0xdd, 0xa8, 0x66, 0x17, 0x97, 0x93, 0x6f, 0xc6, 0x68, 0xd7, 0xd0, 0x68, 0xc3, 0x2b, 0x4d, 0xfa, 0xda, 0xfa, 0xd9, 0x91, 0x68, 0x20, 0x10, 0x3d, 0x51, 0xb7, 0x3d, 0x7a, 0xc1, 0x00, 0x53, 0xc9, 0x77, 0x7e, 0x08, 0x1d, 0x7c, 0xcf, 0x36, 0x72, 0xe4, 0x7d, 0xb0, 0x67, 0x1f, 0x41, 0x5a, 0x02, 0x87, 0xcb, 0x4c, 0x83, 0xa0, 0x4f, 0xf0, 0x80, 0x4b, 0x3a, 0x66, 0xd2, 0x52, 0x13, 0x77, 0x3c, 0x6d, 0xa6, 0xdf, 0xd2, 0x3c, 0xd3, 0x6b, 0xb4, 0x7c, 0x53, 0x55, 0x40, 0x22, 0x4a, 0x87, 0x1d, 0x66, 0xd4, 0xc1, 0x45, 0x2c, 0xeb, 0xbb, 0x95, 0x57, 0x03, 0x4b, 0xd2, 0x4d, 0xfa, 0x86, 0x15, 0x3d, 0xbe, 0x8c, 0x0d, 0xf0, 0x4b, 0x9b, 0x98, 0xce, 0x88, 0xfb, 0x98, 0x90, 0x56, 0x78, 0x80, 0x7e, 0xfd, 0x27, 0xb8, 0x17, 0x23, 0x4f, 0xd8, 0x2a, 0x16, 0x89, 0xef, 0x25, 0xed, 0x85, 0x85, 0x64, 0x76, 0xb4, 0x85, 0xe8, 0x4a, 0x28, 0x7a, 0xbe, 0x11, 0x66, 0x09, 0x9a, 0xeb, 0x60, 0xdd, 0xd5, 0x53, 0x73, 0x4a, 0xad, 0xc9, 0x06, 0x8e, 0xab, 0x62, 0x31, 0x7b, 0x2e, 0xf7, 0x7e, 0x47, 0x00, 0xc2, 0x47, 0x5b, 0x61, 0x1e, 0xb9, 0x9f, 0xfc, 0x85, 0xe9, 0x97, 0x1a, 0x4d, 0x56, 0x4a, 0x0c, 0x57, 0x1b, 0x73, 0x6e, 0xba, 0xdb, 0x82, 0x70, 0xb6, 0xe5, 0x09, 0xaf, 0x45, 0x87, 0x34, 0xae, 0x54, 0xbf, 0x92, 0xf3, 0x38, 0xc9, 0x08, 0x4c, 0x1f, 0x77, 0x80, 0xec, 0x8c, 0x9c, 0x0d, 0x93, 0x29, 0x63, 0xed, 0x31, 0x9b, 0xb2, 0x3b, 0x8d, 0x34, 0xfb, 0x02, 0x82, 0x01, 0x00, 0x62, 0xb3, 0x28, 0x83, 0x03, 0x5d, 0xd0, 0xb1, 0x05, 0x62, 0xa1, 0x35, 0x82, 0x7c, 0xcf, 0xb8, 0x62, 0x22, 0xd3, 0x65, 0xd4, 0x86, 0x59, 0x31, 0x6d, 0x93, 0x3d, 0x48, 0x98, 0xd2, 0xb9, 0x7a, 0xc9, 0xa0, 0xa1, 0x05, 0x55, 0xe3, 0x33, 0xd5, 0xb4, 0xaf, 0x4e, 0xd0, 0x3e, 0x71, 0xd9, 0xb1, 0x48, 0x81, 0xca, 0xa6, 0xfb, 0xe3, 0x76, 0x9d, 0x91, 0xb4, 0xd4, 0x8e, 0x6c, 0x5d, 0x27, 0x38, 0xda, 0x56, 0xdc, 0x4d, 0xed, 0x95, 0xf0, 0x66, 0xf3, 0x95, 0xad, 0x8e, 0xc8, 0xed, 0xf3, 0xd6, 0x62, 0x70, 0x84, 0x7d, 0x70, 0xab, 0xe3, 0xe2, 0x15, 0xa5, 0x92, 0x3f, 0x64, 0x76, 0x56, 0xa4, 0x65, 0xfa, 0x08, 0x64, 0xa0, 0x4f, 0xa1, 0x0e, 0x8c, 0x26, 0x79, 0x21, 0x4b, 0x9f, 0x22, 0xf1, 0x29, 0xa9, 0x54, 0xa6, 0xb4, 0x5f, 0x0c, 0xa9, 0xf5, 0xce, 0xf6, 0x8f, 0x6e, 0x21, 0x82, 0xe8, 0x92, 0xb5, 0x90, 0xc7, 0x57, 0x41, 0x97, 0x95, 0x27, 0xb9, 0x32, 0xc3, 0xab, 0x0f, 0x1b, 0x0a, 0x1a, 0xbb, 0x3b, 0x9c, 0xba, 0xc9, 0xfb, 0x96, 0x68, 0xe5, 0xaf, 0x2f, 0xb9, 0xf1, 0x23, 0xc3, 0x6f, 0x4a, 0xc7, 0xe3, 0xe3, 0x2e, 0xb7, 0xe6, 0x02, 0x1a, 0xff, 0x47, 0x45, 0x78, 0x16, 0x19, 0x11, 0xf1, 0xc8, 0x52, 0x51, 0x9d, 0x35, 0x5a, 0x26, 0xc1, 0x7c, 0x18, 0x13, 0x38, 0x04, 0xfd, 0xcd, 0x7d, 0xae, 0xe2, 0x28, 0xc1, 0x7e, 0xc7, 0x53, 0xf3, 0x60, 0xc4, 0xc5, 0x93, 0x31, 0x98, 0x69, 0x6b, 0x39, 0x71, 0x81, 0xeb, 0x17, 0xc9, 0xb7, 0xa5, 0xf9, 0x83, 0x5c, 0x7c, 0x34, 0x38, 0x7b, 0x74, 0x4c, 0x38, 0xcc, 0xf7, 0x64, 0x58, 0x9a, 0x31, 0xa2, 0x6c, 0x18, 0x63, 0x5f, 0xe3, 0xef, 0x9d, 0xf5, 0x39, 0x8c, 0x82, 0x4e, 0x0d, 0xb3, 0xaa, 0x03, 0xb3, 0xa4, 0xdb, 0xf4, 0x01, 0x02, 0x82, 0x01, 0x01, 0x00, 0x96, 0x33, 0x77, 0xe4, 0x8e, 0x62, 0x8d, 0xba, 0x88, 0x1b, 0xb7, 0x9f, 0x0d, 0xcb, 0xeb, 0x9b, 0x84, 0x7a, 0x1e, 0xb1, 0xa2, 0xef, 0x29, 0x5c, 0x7d, 0x13, 0xbb, 0x88, 0x10, 0xac, 0xf4, 0x13, 0x45, 0x96, 0x7f, 0x9d, 0x3d, 0xe2, 0x36, 0x03, 0xb0, 0xaa, 0xed, 0x60, 0x46, 0xec, 0x5c, 0xab, 0xb4, 0xce, 0x8e, 0xde, 0x35, 0x51, 0xda, 0x88, 0x28, 0xef, 0x2f, 0x37, 0xbf, 0xc0, 0x68, 0x96, 0xaf, 0x0a, 0x96, 0x8a, 0xa0, 0x83, 0x28, 0xc3, 0x2f, 0xda, 0x18, 0x26, 0xef, 0x02, 0xf8, 0xcd, 0x3e, 0x95, 0x37, 0xba, 0x75, 0x3c, 0x8d, 0xd9, 0x7f, 0xb7, 0x4f, 0x04, 0x5e, 0xce, 0xfd, 0x4b, 0x92, 0x0a, 0x3d, 0xc8, 0x00, 0xc7, 0xce, 0xec, 0x4d, 0x38, 0xbb, 0x28, 0x33, 0x79, 0x49, 0x8b, 0x78, 0xb6, 0xbd, 0xae, 0x3c, 0x47, 0xb9, 0xdc, 0xd4, 0xd7, 0xb9, 0x26, 0xad, 0x8a, 0x51, 0xb9, 0x40, 0x2c, 0x84, 0xc4, 0x81, 0x0b, 0x3a, 0xec, 0xd6, 0x00, 0xc2, 0xb3, 0x83, 0xb0, 0x80, 0x88, 0x89, 0x4d, 0x4b, 0xd7, 0xe8, 0x59, 0xe2, 0xf2, 0x56, 0x40, 0x60, 0x09, 0x0e, 0x92, 0x99, 0xef, 0xcb, 0xf2, 0xd6, 0xbe, 0x99, 0x40, 0xf2, 0xdf, 0xb2, 0xba, 0xbc, 0x2d, 0xf8, 0x8e, 0x1f, 0x6f, 0x2b, 0xdc, 0xab, 0xc0, 0x5e, 0x97, 0xe3, 0x82, 0x2d, 0x46, 0x83, 0x89, 0x69, 0xf0, 0x9a, 0x55, 0xf1, 0x88, 0xfb, 0x5e, 0xf9, 0xab, 0xf7, 0x96, 0x72, 0xa4, 0xd7, 0xe2, 0xaf, 0x88, 0x1b, 0x8b, 0x4a, 0x96, 0xce, 0x2c, 0x2f, 0x89, 0xa0, 0x38, 0x92, 0xea, 0xfa, 0xb6, 0xb9, 0xd1, 0xa6, 0x0c, 0xc5, 0xb7, 0x2e, 0xa2, 0x69, 0x9c, 0xb4, 0xf3, 0x17, 0x53, 0xa0, 0xab, 0xad, 0x8c, 0x90, 0xa4, 0xf4, 0xc7, 0x30, 0xd5, 0x43, 0x43, 0x2d, 0xad, 0xb4, 0x57, 0x6c, 0xab, 0xd8, 0x8a, 0x4e, 0x77, 0x02, 0x82, 0x01, 0x01, 0x00, 0xc9, 0xad, 0xff, 0xcc, 0xaf, 0x3d, 0xf9, 0x52, 0xfb, 0x1b, 0xf7, 0x92, 0x0f, 0xd9, 0x06, 0xf4, 0x7d, 0x24, 0x1d, 0x48, 0x9f, 0x69, 0xf7, 0xad, 0x40, 0x98, 0x60, 0x3e, 0x3b, 0x45, 0xe2, 0x85, 0xa8, 0x9d, 0x37, 0x56, 0x6a, 0xb9, 0x0b, 0xd9, 0xd8, 0xe7, 0xab, 0x3d, 0xc3, 0xb3, 0x94, 0x3b, 0xca, 0x5e, 0xac, 0x15, 0xe5, 0x25, 0x89, 0x8a, 0x65, 0x08, 0x4e, 0xe3, 0x6f, 0x77, 0x96, 0xfc, 0x59, 0x0f, 0x62, 0x2a, 0xe0, 0xd7, 0x19, 0x6d, 0x54, 0x82, 0x32, 0x81, 0xc0, 0x53, 0x38, 0x73, 0x63, 0x76, 0xeb, 0x76, 0x0b, 0x52, 0x23, 0x16, 0xb6, 0x80, 0x6b, 0xde, 0x18, 0x07, 0xb3, 0x67, 0x7f, 0x2a, 0x28, 0x85, 0x36, 0xe9, 0xd9, 0x33, 0xed, 0xd7, 0x84, 0x09, 0x8e, 0x2f, 0xae, 0xc4, 0x64, 0xc2, 0x1a, 0x53, 0x5b, 0x42, 0xc6, 0x54, 0x2a, 0x63, 0x71, 0x0a, 0x1a, 0x2a, 0xfc, 0xa6, 0x02, 0x80, 0xa6, 0x02, 0xcf, 0x15, 0xda, 0x83, 0x2b, 0x66, 0x2c, 0x35, 0x61, 0x0f, 0x6e, 0x39, 0x4a, 0x16, 0xc0, 0xea, 0xa6, 0xd7, 0x06, 0x6a, 0x99, 0x57, 0x0e, 0x5e, 0xf3, 0xc8, 0x4b, 0x68, 0x16, 0x02, 0xcd, 0xdf, 0x42, 0x55, 0xa3, 0x1f, 0xd8, 0x64, 0x71, 0x04, 0xcc, 0xb1, 0x46, 0x97, 0x40, 0x33, 0x83, 0xd1, 0xaa, 0xa4, 0x49, 0x8d, 0xc4, 0x36, 0xa3, 0xaf, 0x6c, 0x25, 0x75, 0xfe, 0x85, 0x29, 0x46, 0x2d, 0xf4, 0xef, 0xa9, 0x21, 0x0a, 0x80, 0x17, 0x23, 0x56, 0xca, 0x4a, 0x7f, 0xc0, 0xbd, 0x1d, 0xca, 0x0c, 0xfd, 0x78, 0x07, 0x9b, 0x68, 0x1c, 0x8f, 0xc5, 0xe4, 0xe4, 0xd2, 0x12, 0x21, 0xa1, 0x84, 0x77, 0xac, 0x81, 0x1a, 0xec, 0x7c, 0x1a, 0xe9, 0x11, 0x8d, 0x48, 0x01, 0x3b, 0x4f, 0xab, 0x5b, 0x5a, 0x05, 0x96, 0x68, 0x81, 0x1a, 0x88, 0xde, 0xb3, 0xa4, 0x90, 0xf9, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */, ret = 1; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server TLS | visit https://localhost:7681\n"); signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; if (lws_cmdline_option(argc, argv, "-h")) info.options |= LWS_SERVER_OPTION_VHOST_UPG_STRICT_HOST_CHECK; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } info.port = 7681; info.mounts = &mount; info.error_document_404 = "/404.html"; info.server_ssl_cert_mem = cert_pem; info.server_ssl_cert_mem_len = (unsigned int)strlen(cert_pem); info.server_ssl_private_key_mem = key_pem; info.server_ssl_private_key_mem_len = (unsigned int)strlen(key_pem); info.vhost_name = "first"; if (!lws_create_vhost(context, &info)) { lwsl_err("Failed to create first vhost\n"); goto bail; } info.port = 7682; info.mounts = &mount; info.error_document_404 = "/404.html"; info.server_ssl_cert_mem = cert_der; info.server_ssl_cert_mem_len = (unsigned int)sizeof(cert_der); info.server_ssl_private_key_mem = key_der; info.server_ssl_private_key_mem_len = (unsigned int)sizeof(key_der); info.vhost_name = "second"; if (!lws_create_vhost(context, &info)) { lwsl_err("Failed to create second vhost\n"); goto bail; } while (n >= 0 && !interrupted) n = lws_service(context, 0); ret = 0; bail: lws_context_destroy(context); return ret; } libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls-mem/mount-origin/000077500000000000000000000000001476025525100320315ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls-mem/mount-origin/404.html000066400000000000000000000002651476025525100332310ustar00rootroot00000000000000

    404

    Sorry, that file doesn't exist. libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls-mem/mount-origin/example.js000066400000000000000000000012701476025525100340220ustar00rootroot00000000000000document.addEventListener("DOMContentLoaded", function() { var transport_protocol = ""; if ( performance && performance.timing.nextHopProtocol ) { transport_protocol = performance.timing.nextHopProtocol; } else if ( window.chrome && window.chrome.loadTimes ) { transport_protocol = window.chrome.loadTimes().connectionInfo; } else { var p = performance.getEntriesByType("resource"); for (var i=0; i < p.length; i++) { var value = "nextHopProtocol" in p[i]; if (value) transport_protocol = p[i].nextHopProtocol; } } if (transport_protocol === "h2") document.getElementById("transport").innerHTML = ""; }, false);favicon.ico000066400000000000000000000025761476025525100341050ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls-mem/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls-mem/mount-origin/http2.png000066400000000000000000000166131476025525100336070ustar00rootroot00000000000000‰PNG  IHDR@qeO„Ö pHYsCC,ę·ētEXtSoftwarewww.inkscape.org›ī<IDATxœķœ{”žU}ļ?ūņ\ŽĖd2!!!@ˆ:Ķ1Cė… ˆZ ļ§.EcO½j„zŖmķQj»°ķ$­ÖćŖÖ„e)еœ.XWµŠ*„F«Ų(1š ™dBfęĶ{y.ūržxžwnļ;™,Īj¾k͚™żüžēŁū÷ģ½÷ §p §p §p §p §š_b9ļ½Ų±cĒ,ķųų8;wīŪŹ’ļŲ½[lówģŽ-¶ŽyÖ¬»öģ[FFÜĪyĻŪ¶m›gĒóļŲś’—Ąž=bošJFG­T,““žŻ»}łbß„ķög¼hŸ{ĮĪ¢ū¾Ż»wūńńq/„š,%ą½ģÜ)÷·ZA”e2 CWQJ©<—2ŠÄdšśµRŖf­&E§#d’54¤l»Öf¹Rašē¢ĒIÓ_QŹ5£”!‘I§£”s “RER:!e @8'­µ&TŖŃt.Y”µ{°IāOņÓy.kCC¦jE£(k„UŹuǐ­XaŻÄDņƒuė̶mŪ\?Fōe€qĒķ·«_žÅ/*YµŗRv:CV)ćņ<ŌR†6MµUJ[Øy.}Yom,Y!¤¬;Ą įźB„Mļ3å}‚RŲM½¢°“¦Y½VSi§³Z z!œBäĪéż ©u3—ņēŽ˜‰)hoyĒ;Ģb&ōgĄöķ’±±čH»½>˲M&ĖĪ>-ŽW 8—SÆ×P*<ĪY‚@!„Ą{O ”µ@© R ¬Ķ‘2Bʹ(å±Vļ5RfX[|9­«(‘ē)BXŅ“M§Ó$Ļćœ”ÕŹØ×k“įœÅū€Zm­C¼ļIbš>&MŪ>ü‹@ėļW¢hļŹ›āā‹Ķü±ź~_×gس’dČdŁęÕ•ŹłńʍgQ­ŽE’ pHéĆ:R*œóx/Ńŗų-„B‹Ru¼·@„sŗ\W)` ö ‡Rē$ŽĖŁ6)Œ18—#D†sMŒÉqĪ eŽ”1Ī8—U¬³Ićœ%Ir²,#Ig„©9ŠlīC©+÷ģiyļÅüYŠĆ¼gĖĪb2MWäƌĘk֜ɹšF¢h5q„$RJ@Ŗüŗ!BtŸS Ö{‰µA9p0¦`āģkR ŒhķqĪE!Ī„0Q“ƒ£;ē4Ž+¤ōX[ōĒZƒ9R¶€P®\9%¦§G•1?gd¤gĘ÷2 D;I¬Kµ:D®Aė5H#„BJ‰” 8Wtŗ@÷+z„@ń[)A¹ŁEŻNtļéŽļ CˆņŁļ!<Ö:œó(%f TA!˜]JåT*R&Ōė5/„ńÖz&&cĄžVKā\¤ĆŠE­”Ŗ– „”B)(Ö0³_½h+jm·ĆąÜ”Å’ŌšdĮÜĖ :÷s}S ¬u%c¤¦ *QDcŗĻōXK9;Aą"ÉĄ­õw‘-Ė!0Ÿü¤*•Ō;gšŽP©0ū…”’’āå_~šƒ<ėÜså_łŠŸ\²é9ĻGåSż(ÓiŹUų@?Ͼķ×_łJź+Wrżõ×÷\›’ĻUļ}Æ8ļĀ Å[.æœC‡ͶŒŒš’æ˜W^ɳ6mņå*–ÖēņŠŹ įĪīӁ¾3`4ŠÜ0Ģl§“£µGK:¼h-:SSS4Žgö+—Ģ›žžfjjŠ4ĻIJŗ”Õn#ƒ`YŗNšŠééi:„‚Õ«W099É-·ŽŹ7o»’Ę7Äęg<ƗĖT‘e‚8Žā0 [IéZm€%ą=ūÆ»N‘$Cu„Ö&Hiń^~8f÷‚īß]ĮŪ~ó7yĶĖ^B`…`Ó¹ēšƽ–]TLĘZ­†”’?ū£?ą¾ūļ絯=÷Žy'§­Z_śöļ~€(Š8²oxĻæ~ļ{¼źµÆeff†}ę3|ŗčO±Īłé4mT‡†š­éi»<€hõjiÖµ8ސ2œŻŻ‹ĶmĮ {2ļŚšš0ĆĆĆ̾g¬[Ēӟö“äkŹ/z¬Łœm;ēœs8}͚%Ÿ¼ą‚ xłĖ_Ī 7ÜĄīūļ/Ś•rYęHÓć‘RM:öcĒģØX8 ś2@NM ­”±Ž{„PHYˆ¤ņ„]“ŪmvŻw߂Ncüæ$–ŗ¶˜ĮĖA)<@½Vc^m)9“Qź˜ŃŚló‹ŸŲBå¹Ī…Q„aŒ÷Ž+mL÷ļŁĆłĻžņ|<čĆē÷žĒŠītøé–[øūī»xÅ„—ā“ųX!rœóĀūĢf™ßY«Įœųś1ąŽ;d^©DY£Q;])÷²TjzÖOEœ¹~ż‚>šĄXŪCzR‘e¾š… Ś.Łŗ•w_qEw™Œ…BSÕĆĆrۚ5]½”æ&čA09éÓ45U„Zkӊm¼·(%°V ēnŪ¼™ļß}÷=ąō³Ībrrņ‰;Pˆł‹ž’|“Ölܰ—^|1’ć²ĖPB:÷)=Žœ3BZģžœ”Ž{+ęͪްfØG‘m>l‡½—d€#Ļ%aø¤]żd" Cīŗķ¶Bóƒā·sÅĄ½„āeQ*%ĻS)e–g™ėtzśæ` ąŁŗÕ9pĄćœ”ҁFŹ`V}Ŗb”8.žŃ:4ÖĘÕ8®īMÓ‘ÕÓ°cĒĘŖU†!©µfÖLõ=čS…¦š¾J…^ˆµćĒulŒœļŁ‚>K`||ÜóµÆłģȁēŽ[„š(åž¶aƒæō×~MŒ>ć ovŽæčEĢ4¬?ćŒ—„÷\zÉ%œvŚiKö}E­VŠyO† ®¾j—^r a×vč@ Å„(E”*}Z”“”į™gÅų¶m~ūöķóˆ{˜ēŁ;ć“Ń83ʲ­gž…¬]{>ZŸÖu” ˆ¢b­ĘĻ`ņś‰Bw($'M}éKheæąČ‘ķæ÷Ž„^’®®Õ8kŪ¶d¾? W‚dbĀiļm†ŠBddaK{ü©‹łĀŚBzļ¬R.Čs§¦¦–·ą£Č„|¶©pw-­ö>UPx†<…OAb­DJ9Qb­īd™]<[{Fä]€Cßń>+}׳/zŖ£š9F14E5ƔķYó½ŸŌ{¶ŒŒˆŠŚhDė:APÅūbיSxžźKĮ£”4Z‹¶1¹P*Ż»w/Ž/ģz—X«%sctT«i” š>,ļė†ēóœģē?'č!ņƒq>/V™Z¹µjśŒ3ˆŸżldį€yōPŖŠēö­ćs<3& ¼7“QäÄ Öąa„T’$]äQŹ”»ķÜŻ0"¹ļ>7ßLė;ß!łĮpĪņƒŠšų¼óŗäF~ė·ĪīēĒYÖ®łī~UC™÷-Ēvˆ ]aīu=ٱCUAÖ!,°»ņ·\«Åō—¾Ä±k®!żÉOļ|ʐÜ{/ɽ÷rä#!|Å+Ų°cqéL9!ę÷©p‹Å”]–å€crņÄŖ0ć愍†Bˆ•„a čśż»;l’w§)\}5?Ū¼™CļyĻcü"ēȒ韸’Ā Łżśž‰0·7y¼‘cL µī;e{°cCJ9éœAėŸ/D7Š#śMżÖæü {/ø€‰÷æsōč£åŠĪį?žqī|Žó°ķörä]&ŲīßRŹŠćwMMI)}ūL kL„tieYœ›»Ń˜bGĢs_uū_łJ²Ÿżģ±īQ`õO~ĀWĘĘH–bB”wc…ųRq.„ŖŒŒōLį¾ XQDnR:Ę“ŹŒ.7ŗĘ-·pōŸXr?x"°éČ®}į {ÄYœ“h­B„a„Ŗ”ƒž¾öŪ|:Į"0"„²Ž›2ę.Źé椠FFXóÉOņ¶zļv_¹ńFīśÖ·ųõW½ją=ż‚ 8żC˜~-pß8×°ŲL/ee yžeŠz]ūE¾ĶŒ2ŠD»ÓY9†UāxBTqNHŲšÖ·ņŸł ?øēžG5šłxĘ»ŽE>44­&x`®”+¦»Ź[‘^“GJ…6 ķīf³Ēš]rŃ)­£ ^A©bo Sŗ˜NȄ7¼īuœuę™  „Ö¬zéK¦wIBš¦s ŽŒčŚÖŚNžŪ0Ė\gjŹ/–½K­–0E`1,“ ,ŽēĖĶ€“…xÓ¦i;@Ņe@©ŸĢ¢›œ%e;¶ō¹æw Œ{«µ —Rd„Vµ“Č<ÉÕź@thÕ®eNSu(e±6Da[d¬Į ĘPnŒÕZ%I:8—ĪŅ>IĮsäČ@t‡ØZ%z4Ü")K)C…u­WÄBÄūĆP-^ĮżUį0t™”¼÷(UB¤œKO›Ė {B`&&¢{ŲøaĆ\ĆBMŠkeØTą!޲lłŠŖ°ö>BˆBł ‚9qų$ ݳg ŗū€_³šŠ%Päxo‡1IÓŚD:—Ł‘‘Į!U©ÖåyŠ1-ņÜĶfr>Į¦Æ™˜ ™Ÿur|ø`±R$T:“Nńސē@<«Ļ3ś*BĪūV’e Žž“ł¦šāŻö$¢ło Ää6p/š«/xĮ\ćÜL°@Ž÷-¼÷6˼ɲüGI²üčfŽ+cōt–u°¶C‘‚ś¤L’Ę?žć@tßź«Vqхö'ĀQäfåa(į½\Ń'u„ļˆff“‚ØÖõ ‚ė‰ >KĮLLŠüēˆöą5Æ~5Z/’ĪÅ>„ń>Fˆ„bĄ )Åʵk—×ļŁ±6y®b„B” ‚R#~#ĮS÷wxc–„;Ü ¼ķ­o]x”H‘ó„ķ"D8Ž””Ź‘ļ?|xysxčŒ3„‡8·vmT©Ōč&/Kih‚'™>M™ŗīŗhožŪ3ŸÉ‹%JĶE ʛs¾™$ Ī%k5·¼OŠĪιÕT«u“ĮŚz yĀ>’Ōß’=y™ļw"ąVą]q‹Ć\eBG×u/)–‚WA ]éXŒlŁ“ÉRęBʜ””a”АRį}8» N2|’pōcˆö Y­ņ?ßüꮋ]†®0 W¤ DžŚĘxå}ˆµŠ"WP/H<:ÉÓ’Ųg?;Š×Ļ€k€w¾żķ¬,Sp{ś#„@Y*qt¼")ŻŽ>õ½ ˜œōa˜\Ź£¤é ֚2éHĢśObxÜ>Ģä‡?<ķ @³^ēO®¼ri¢ł)3E‚gT‹ćŲ(µbtŻŗTįmŪ|dm”u}6Ež¼€CW^‰™Y–®\ ¼ēŻļ^:znšcœxßi$I"ĖöÖė=Įž±Į¼V3NE×=kœd4o»ĘM7 Dū9ĄóŽ?ųƒŽ‹óŽ…Ö);“¶¬måyޘyč!·¼GØ¬Ī“AŠ ŻnŅ­‘ņ¤ŖĄ¶Ńąįßū½h®¶’éŸĪ¹Ąū”k uÓd‹ ×T;7é“īlqÅR°‘MŒiam^–æ™RĒV3—"÷1ń¾÷‘?ųą@“’Ųtī¹¼ėļXxa±6ZX¬Żś¢”N§M’4|µW¬YćxĶk³OMéÜt~üųŽO"D0³zĄćō’źW™žā¢ż:p—\ó·ŪĻńы";Ä£TŽÓ“ŪĒ…÷²11!YIb ¬‡Ą*eŽ43äy»¬Ą8)Ó?č!žīļD;Eńõß~łå¼`¹ŗ„ł³”p޼·äyx?-ŪmŃ-Ųž~ Q­¦ˆĻ\±b BŌ1¦B”U=.&ų<ēĄå—cyd śæ¢õėłČ ±‚"mÖē2’¤™¦iGH)V¬Yӕ'ö īܹSŚĘ¬¢RYA®Ā¹ ĘĢ„Č<ĘĶpāŹ+ißsĻ@“7ß‚k?õ©o|óQX¬Eu©”„T†@#Ļ%kֈe}‚»ĖZżĄ{I&e"“g˜łņ—9vķµŃ>B!ó_ł²— ž’¹JR÷“"ŽWcVÅŽ»''åņbC— ”°6„ȵ1e‚ŅcśņéīŻ<üūæ?-EPõœĶ›ł«>›Ö’˜_½Zų+H9D)Aī}Š™šZ^ ŒLNā„˜*KŌ›xļ‚ĒTäšMzĖ[p­Ö@ōØ×¹į _ ņX&„ cƒÖ‘²vJU†ÓT”"c“vCJey»Ż ČĪCc|ś;ĒĮßłҟžt ņ/·Į篹†s7oų5 PĢE± ¢hH*»<‡V®ģŃ{–Œ vœÓRŽ«²¾æX_Ž‹A7ĮĆŪ·ÓX*~æ?¤X÷ļļ{ŁvŁeŻÓ×*ó i„Ø!„VB”Tŗ¶ÓÉŚl«å•”­cŠņöŒGóåé/|£żč@“G’ ¼ųā‹łŠ¼jށ1Æv™Ā $š¾šg*VĆ0ҐļéaY’ø@­&„µ¢Ón?‚÷Ęų²~p /ß¾ūī7=C±éU6ląĖ’šØĒ©bŻŗ†b¹:ēyŽriŚ7Ķ“\`żztXk­'M›H)䝡,ĪöīåĮßų üüõšĄ‡’ŒcnŗžzVŸ –čQBPÄ2‚ KÉĘ )°¼1d;/Œ1-!’zqx‰ļ1<śŻ75ÅÆ=öŲ±ei[ĄŸߔ’뮾š-Ļ}īņĆZsuĆ¢ō ņ<—ÖZY«Ižö“ĮCcÖ9JE+B朞µ·ūI\»Ķƒo|ć@)³?Ž|oÕ*¾zóͼõMozt] Ż~Ü¢bdĪ)źŲ³głš!€©”µ(ŠF*•APGˆˆÅˆyšYĘCozķ²ˆłDų šĄsĪ;/żŁŸ±ņŠ!&Ž’~ÜņIŠKb䷛ʳžµ°±8˜Å†aģ\ló¼;€„k‡”P„öK’Ā0¦äby Ay—öŻ Ń[ĖĮ+®(bzĖ E”P|mõjN’ńiæīu<öaĻįKūöńŠ˜_~ę3ē•ņ¤)SQA Œńī>§ČōU„†ĆŠYē4Z‡Q(Aó#C]=Ą{żį2sću“¼Xsō(¾ØI>)øķöŪyšĄ…ER·DkQ¢Ųc‰‰žŸ¾óŚLM¹Øø=2§š-ø’šų8SŸ’üIČIC‘'č1Ę"÷>a(uŠÅ•¦ż#C##ŅG‘#ĻSœs€EėnÄu.]~@‡ę“†…!üٱŁN;޵,r•ēt- Ž>‰U"£[Ń”žl”Źc*µšŲ»wļņ•£»>ūY%“DˆāĄ4Ŝ7Ų•'4,<¹į©‚łż*īČsMš¦Ęڼentt“ē¶)°eÓ&æoļ^„„čP¤Č )QqeA²@μöZްmÓ„¶žHģ987÷£T‚R*VŖj ÷>\VVĻ”W nŻźÄžżią\jŅ4ÕÅńtē,RZœShķ±VTŸ÷<žäśėÉĖō'ė<y3ń9ēž[D‹Ÿā‘<‘².“Öι Z½Z.ƒż*G©<żéy*DGj]EŃé@t³/”˜bą=/¾šĀåܝ—ó÷®Ī¾ü*6^?ū»ŠĢµ…ĘšēŽāŲ=Kš¶³<ĻU½nlŸCTś*Bnd쇖FkĀ,3„O 8ØP©B,ŅfŠ57 …*®4Em’BFĢg÷†Ž,“³A˜Åž‡.Š,Š…j÷ĖgęXkHÓ c,aŲŃBäk'&z|½ ÷vēNƤl><33³±ÕjE)•J„ʄeܽ{–X7óJ•kÆ8@±ė€‡µŻžŹRC“tĻ -ŹZŠ/WWĖYqŪ½§8MĢé…„*Rb F£Źkc,Ž7Iӄ$ɽsŽ4e/°xģ;’‰ W­× J=L£±ju„ D@Œµ® ™ååį¦(RiŅ4Dkƒ)Īåå tŁń¢®ßū¢®Æ81/]ŁēŠc;„ŠX«2ùā0Å<„ŒIŃŗŚZ[„ļ­•xļpNēÖ£Ż>lcʹĪLg›“‹O•ķ{ āčķ·Ū©ÉÉF23óšĮ#GŽžE0¦CUExß"Ļ›eĒ»ĒlĘå R#„ƹ„ĀóÕ­>—e5ĒJI¬mį}Š:ŰäyFF8×5"‹CS„Œ)=<„"Ā–³J“ēšN§I§s„G™xčŲ±q?Tƒ„>ESżĪńŪļ¼Ó½yÕŖ$yXdŁæ’bß¾Īś‘‘ÓāJ„†Ö ČņćĒi&IĒ_GÖāø2•$ œcżŠPqĢmµZGŹcŚ$I‡(Ŗ–~…äłqŅŌ ”Cėˆ0ĀŚ¢ā»Ųų,Y–†A)Ž)]ŻQ)ŠcĄ‘e-„®ŻnåĘ)5“off2‚½aL8­:sƆ}Žųź»}{ļ;vˆżēœ“®·Ót(bČYkt5s$Ļ… ĆLd™Ø ¹Lė<}äkj­GLšvu†8WŹ c”׌Ź,[AtB!Ž)ē2ć}`ŒQZŹP†aŠ“ÖĒĪe. ­ö> ĖŚ‰RB'EĘBk)Ė"”TG”8k£Ü{YŪI«ÕéČŚģ@§“m9tȊķŪ{|‚'–_Ū·Ė;@n“ū[-iŽ÷ŒŽ’5›~ljŹļ*##āČīŻnė¼éµkjJ®ŃA’H72ā»Fˆ¬Tо83y¶n]Ļ“›šņlŚäٳG°i“ßµgŲ²i“æćĪ;‹óǁ½÷ݧōА0ĒūŃuėüžVKšµk½>|XlÜøŃpēŽeĪ„/­AæčēDōŽū?Ū·o—ŻßŪ·o—KŻ’hūµų=÷¹§p §p §p §p ’%š’‡­·ķ:IIEND®B`‚libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls-mem/mount-origin/index.html000066400000000000000000000006571476025525100340360ustar00rootroot00000000000000
    Hello from the minimal https server example.
    You can confirm the 404 page handler by going to this nonexistant page.
    libwebsockets.org-logo.svg000066400000000000000000000226061476025525100370650ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls-mem/mount-origin image/svg+xml strict-csp.svg000066400000000000000000000302361476025525100345720ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls-mem/mount-origin libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls/000077500000000000000000000000001476025525100266265ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls/CMakeLists.txt000066400000000000000000000013771476025525100313760ustar00rootroot00000000000000project(lws-minimal-http-server-tls C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-server-tls) set(SRCS minimal-http-server-tls.c) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) require_lws_config(LWS_WITH_TLS 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls/README.md000066400000000000000000000033271476025525100301120ustar00rootroot00000000000000# lws minimal http server with tls ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server-tls [2018/03/20 13:23:13:0131] USER: LWS minimal http server TLS | visit https://localhost:7681 [2018/03/20 13:23:13:0142] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off [2018/03/20 13:23:13:0142] NOTICE: Using SSL mode [2018/03/20 13:23:13:0146] NOTICE: SSL ECDH curve 'prime256v1' [2018/03/20 13:23:13:0146] NOTICE: HTTP2 / ALPN enabled [2018/03/20 13:23:13:0195] NOTICE: lws_tls_client_create_vhost_context: doing cert filepath localhost-100y.cert [2018/03/20 13:23:13:0195] NOTICE: Loaded client cert localhost-100y.cert [2018/03/20 13:23:13:0195] NOTICE: lws_tls_client_create_vhost_context: doing private key filepath [2018/03/20 13:23:13:0196] NOTICE: Loaded client cert private key localhost-100y.key [2018/03/20 13:23:13:0196] NOTICE: created client ssl context for default [2018/03/20 13:23:14:0207] NOTICE: vhost default: cert expiry: 730459d ``` Visit https://localhost:7681 Because it uses a selfsigned certificate, you will have to make an exception for it in your browser. ## Certificate creation The selfsigned certs provided were created with ``` echo -e "GB\nErewhon\nAll around\nlibwebsockets-test\n\nlocalhost\nnone@invalid.org\n" | openssl req -new -newkey rsa:4096 -days 36500 -nodes -x509 -keyout "localhost-100y.key" -out "localhost-100y.cert" ``` they cover "localhost" and last 100 years from 2018-03-20. You can replace them with commercial certificates matching your hostname. ## HTTP/2 If you built lws with `-DLWS_WITH_HTTP2=1` at cmake, this simple server is also http/2 capable out of the box. If the index.html was loaded over http/2, it will display an HTTP 2 png. libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls/localhost-100y.cert000066400000000000000000000040721476025525100321670ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls/localhost-100y.key000066400000000000000000000063101476025525100320170ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls/minimal-http-server-tls.c000066400000000000000000000100571476025525100335040ustar00rootroot00000000000000/* * lws-minimal-http-server-tls * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws, * with three extra lines giving it tls (ssl) capabilities, which in * turn allow operation with HTTP/2 if lws was configured for it. * * To keep it simple, it serves stuff from the subdirectory * "./mount-origin" of the directory it was started in. * * You can change that by changing mount.origin below. */ #include #include #include #include static int interrupted; #if defined(LWS_WITH_PLUGINS) static const char * const plugin_dirs[] = { LWS_INSTALL_DATADIR"/libwebsockets-test-server/plugins/", NULL }; #endif static const struct lws_http_mount #if defined(LWS_WITH_SYS_METRICS) mount_metrics = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/metrics", /* mountpoint URL */ /* .origin */ "lws-openmetrics", /* serve from dir */ /* .def */ "x", /* default filename */ /* .protocol */ "lws-openmetrics", /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_CALLBACK, /* bind to callback */ /* .mountpoint_len */ 8, /* char count */ /* .basic_auth_login_file */ NULL, }, #endif mount = { #if defined(LWS_WITH_SYS_METRICS) /* .mount_next */ &mount_metrics, /* linked-list "next" */ #else /* .mount_next */ NULL, /* linked-list "next" */ #endif /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ "http-only", /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; #if !defined(WIN32) void sigint_handler(int sig, siginfo_t *siginfo, void *context) { pid_t sender_pid = siginfo->si_pid; lwsl_err("%s: sig %d from pid %lu\n", __func__, sig, (unsigned long)sender_pid); interrupted = 1; } #else void sigint_handler(int sig) { interrupted = 1; } #endif int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; #if !defined(WIN32) struct sigaction siga; #endif const char *p; int n = 0; #if !defined(WIN32) memset(&siga, 0, sizeof(siga)); siga.sa_sigaction = sigint_handler; siga.sa_flags |= SA_SIGINFO; // get detail info // change signal action, if (sigaction(SIGINT, &siga, NULL) != 0) { printf("error sigaction()"); return errno; } #else signal(SIGINT, sigint_handler); #endif memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ lws_cmdline_option_handle_builtin(argc, argv, &info); lwsl_user("LWS minimal http server TLS | visit https://localhost:7681\n"); info.port = 7681; if ((p = lws_cmdline_option(argc, argv, "--port"))) info.port = atoi(p); info.mounts = &mount; info.error_document_404 = "/404.html"; info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; info.fo_listen_queue = 32; #if defined(LWS_WITH_PLUGINS) info.plugin_dirs = plugin_dirs; #endif if (lws_cmdline_option(argc, argv, "-h")) info.options |= LWS_SERVER_OPTION_VHOST_UPG_STRICT_HOST_CHECK; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls/mount-origin/000077500000000000000000000000001476025525100312555ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls/mount-origin/404.html000066400000000000000000000002651476025525100324550ustar00rootroot00000000000000

    404

    Sorry, that file doesn't exist. libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls/mount-origin/example.js000066400000000000000000000012701476025525100332460ustar00rootroot00000000000000document.addEventListener("DOMContentLoaded", function() { var transport_protocol = ""; if ( performance && performance.timing.nextHopProtocol ) { transport_protocol = performance.timing.nextHopProtocol; } else if ( window.chrome && window.chrome.loadTimes ) { transport_protocol = window.chrome.loadTimes().connectionInfo; } else { var p = performance.getEntriesByType("resource"); for (var i=0; i < p.length; i++) { var value = "nextHopProtocol" in p[i]; if (value) transport_protocol = p[i].nextHopProtocol; } } if (transport_protocol === "h2") document.getElementById("transport").innerHTML = ""; }, false); libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls/mount-origin/favicon.ico000066400000000000000000000025761476025525100334100ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls/mount-origin/http2.png000066400000000000000000000166131476025525100330330ustar00rootroot00000000000000‰PNG  IHDR@qeO„Ö pHYsCC,ę·ētEXtSoftwarewww.inkscape.org›ī<IDATxœķœ{”žU}ļ?ūņ\ŽĖd2!!!@ˆ:Ķ1Cė… ˆZ ļ§.EcO½j„zŖmķQj»°ķ$­ÖćŖÖ„e)еœ.XWµŠ*„F«Ų(1š ™dBfęĶ{y.ūržxžwnļ;™,Īj¾k͚™żüžēŁū÷ģ½÷ §p §p §p §p §š_b9ļ½Ų±cĒ,ķųų8;wīŪŹ’ļŲ½[lówģŽ-¶ŽyÖ¬»öģ[FFÜĪyĻŪ¶m›gĒóļŲś’—Ąž=bošJFG­T,““žŻ»}łbß„ķög¼hŸ{ĮĪ¢ū¾Ż»wūńńq/„š,%ą½ģÜ)÷·ZA”e2 CWQJ©<—2ŠÄdšśµRŖf­&E§#d’54¤l»Öf¹Rašē¢ĒIÓ_QŹ5£”!‘I§£”s “RER:!e @8'­µ&TŖŃt.Y”µ{°IāOņÓy.kCC¦jE£(k„UŹuǐ­XaŻÄDņƒuė̶mŪ\?Fōe€qĒķ·«_žÅ/*YµŗRv:CV)ćņ<ŌR†6MµUJ[Øy.}Yom,Y!¤¬;Ą įźB„Mļ3å}‚RŲM½¢°“¦Y½VSi§³Z z!œBäĪéż ©u3—ņēŽ˜‰)hoyĒ;Ģb&ōgĄöķ’±±čH»½>˲M&ĖĪ>-ŽW 8—SÆ×P*<ĪY‚@!„Ą{O ”µ@© R ¬Ķ‘2Bʹ(å±Vļ5RfX[|9­«(‘ē)BXŅ“M§Ó$Ļćœ”ÕŹØ×k“įœÅū€Zm­C¼ļIbš>&MŪ>ü‹@ėļW¢hļŹ›āā‹Ķü±ź~_×gس’dČdŁęÕ•ŹłńʍgQ­ŽE’ pHéĆ:R*œóx/Ńŗų-„B‹Ru¼·@„sŗ\W)` ö ‡Rē$ŽĖŁ6)Œ18—#D†sMŒÉqĪ eŽ”1Ī8—U¬³Ićœ%Ir²,#Ig„©9ŠlīC©+÷ģiyļÅüYŠĆ¼gĖĪb2MWäƌĘk֜ɹšF¢h5q„$RJ@Ŗüŗ!BtŸS Ö{‰µA9p0¦`āģkR ŒhķqĪE!Ī„0Q“ƒ£;ē4Ž+¤ōX[ōĒZƒ9R¶€P®\9%¦§G•1?gd¤gĘ÷2 D;I¬Kµ:D®Aė5H#„BJ‰” 8Wtŗ@÷+z„@ń[)A¹ŁEŻNtļéŽļ CˆņŁļ!<Ö:œó(%f TA!˜]JåT*R&Ōė5/„ńÖz&&cĄžVKā\¤ĆŠE­”Ŗ– „”B)(Ö0³_½h+jm·ĆąÜ”Å’ŌšdĮÜĖ :÷s}S ¬u%c¤¦ *QDcŗĻōXK9;Aą"ÉĄ­õw‘-Ė!0Ÿü¤*•Ō;gšŽP©0ū…”’’āå_~šƒ<ėÜså_łŠŸ\²é9ĻGåSż(ÓiŹUų@?Ͼķ×_łJź+Wrżõ×÷\›’ĻUļ}Æ8ļĀ Å[.æœC‡ͶŒŒš’æ˜W^ɳ6mņå*–ÖēņŠŹ įĪīӁ¾3`4ŠÜ0Ģl§“£µGK:¼h-:SSS4Žgö+—Ģ›žžfjjŠ4ĻIJŗ”Õn#ƒ`YŗNšŠééi:„‚Õ«W099É-·ŽŹ7o»’Ę7Äęg<ƗĖT‘e‚8Žā0 [IéZm€%ą=ūÆ»N‘$Cu„Ö&Hiń^~8f÷‚īß]ĮŪ~ó7yĶĖ^B`…`Ó¹ēšƽ–]TLĘZ­†”’?ū£?ą¾ūļ絯=÷Žy'§­Z_śöļ~€(Š8²oxĻæ~ļ{¼źµÆeff†}ę3|ŗčO±Īłé4mT‡†š­éi»<€hõjiÖµ8ސ2œŻŻ‹ĶmĮ {2ļŚšš0ĆĆĆ̾g¬[Ēӟö“äkŹ/z¬Łœm;ēœs8}͚%Ÿ¼ą‚ xłĖ_Ī 7ÜĄīūļ/Ś•rYęHÓć‘RM:öcĒģØX8 ś2@NM ­”±Ž{„PHYˆ¤ņ„]“ŪmvŻw߂Ncüæ$–ŗ¶˜ĮĖA)<@½Vc^m)9“Qź˜ŃŚló‹ŸŲBå¹Ī…Q„aŒ÷Ž+mL÷ļŁĆłĻžņ|<čĆē÷žĒŠītøé–[øūī»xÅ„—ā“ųX!rœóĀūĢf™ßY«Įœųś1ąŽ;d^©DY£Q;])÷²TjzÖOEœ¹~ż‚>šĄXŪCzR‘e¾š… Ś.Łŗ•w_qEw™Œ…BSÕĆĆrۚ5]½”æ&čA09éÓ45U„Zkӊm¼·(%°V ēnŪ¼™ļß}÷=ąō³Ībrrņ‰;Pˆł‹ž’|“Ölܰ—^|1’ć²ĖPB:÷)=Žœ3BZģžœ”Ž{+ęͪްfØG‘m>l‡½—d€#Ļ%aø¤]żd" Cīŗķ¶Bóƒā·sÅĄ½„āeQ*%ĻS)e–g™ėtzśæ` ąŁŗÕ9pĄćœ”ҁFŹ`V}Ŗb”8.žŃ:4ÖĘÕ8®īMÓ‘ÕÓ°cĒĘŖU†!©µfÖLõ=čS…¦š¾J…^ˆµćĒulŒœļŁ‚>K`||ÜóµÆłģȁēŽ[„š(åž¶aƒæō×~MŒ>ć ovŽæčEĢ4¬?ćŒ—„÷\zÉ%œvŚiKö}E­VŠyO† ®¾j—^r a×vč@ Å„(E”*}Z”“”į™gÅų¶m~ūöķóˆ{˜ēŁ;ć“Ń83ʲ­gž…¬]{>ZŸÖu” ˆ¢b­ĘĻ`ņś‰Bw($'M}éKheæąČ‘ķæ÷Ž„^’®®Õ8kŪ¶d¾? W‚dbĀiļm†ŠBddaK{ü©‹łĀŚBzļ¬R.Čs§¦¦–·ą£Č„|¶©pw-­ö>UPx†<…OAb­DJ9Qb­īd™]<[{Fä]€Cßń>+}׳/zŖ£š9F14E5ƔķYó½ŸŌ{¶ŒŒˆŠŚhDė:APÅūbיSxžźKĮ£”4Z‹¶1¹P*Ż»w/Ž/ģz—X«%sctT«i” š>,ļė†ēóœģē?'č!ņƒq>/V™Z¹µjśŒ3ˆŸżldį€yōPŖŠēö­ćs<3& ¼7“QäÄ Öąa„T’$]äQŹ”»ķÜŻ0"¹ļ>7ßLė;ß!łĮpĪņƒŠšų¼óŗäF~ė·ĪīēĒYÖ®łī~UC™÷-Ēvˆ ]aīu=ٱCUAÖ!,°»ņ·\«Åō—¾Ä±k®!żÉOļ|ʐÜ{/ɽ÷rä#!|Å+Ų°cqéL9!ę÷©p‹Å”]–å€crņÄŖ0ć愍†Bˆ•„a čśż»;l’w§)\}5?Ū¼™CļyĻcü"ēȒ韸’Ā Łżśž‰0·7y¼‘cL µī;e{°cCJ9éœAėŸ/D7Š#śMżÖæü {/ø€‰÷æsōč£åŠĪį?žqī|Žó°ķörä]&ŲīßRŹŠćwMMI)}ūL kL„tieYœ›»Ń˜bGĢs_uū_łJ²Ÿżģ±īQ`õO~ĀWĘĘH–bB”wc…ųRq.„ŖŒŒōLį¾ XQDnR:Ę“ŹŒ.7ŗĘ-·pōŸXr?x"°éČ®}į {ÄYœ“h­B„a„Ŗ”ƒž¾öŪ|:Į"0"„²Ž›2ę.Źé椠FFXóÉOņ¶zļv_¹ńFīśÖ·ųõW½ją=ż‚ 8żC˜~-pß8×°ŲL/ee yžeŠz]ūE¾ĶŒ2ŠD»ÓY9†UāxBTqNHŲšÖ·ņŸł ?øēžG5šłxĘ»ŽE>44­&x`®”+¦»Ź[‘^“GJ…6 ķīf³Ēš]rŃ)­£ ^A©bo Sŗ˜NȄ7¼īuœuę™  „Ö¬zéK¦wIBš¦s ŽŒčŚÖŚNžŪ0Ė\gjŹ/–½K­–0E`1,“ ,ŽēĖĶ€“…xÓ¦i;@Ņe@©ŸĢ¢›œ%e;¶ō¹æw Œ{«µ —Rd„Vµ“Č<ÉÕź@thÕ®eNSu(e±6Da[d¬Į ĘPnŒÕZ%I:8—ĪŅ>IĮsäČ@t‡ØZ%z4Ü")K)C…u­WÄBÄūĆP-^ĮżUį0t™”¼÷(UB¤œKO›Ė {B`&&¢{ŲøaĆ\ĆBMŠkeØTą!޲lłŠŖ°ö>BˆBł ‚9qų$ ݳg ŗū€_³šŠ%Päxo‡1IÓŚD:—Ł‘‘Į!U©ÖåyŠ1-ņÜĶfr>Į¦Æ™˜ ™Ÿur|ø`±R$T:“Nńސē@<«Ļ3ś*BĪūV’e Žž“ł¦šāŻö$¢ło Ää6p/š«/xĮ\ćÜL°@Ž÷-¼÷6˼ɲüGI²üčfŽ+cōt–u°¶C‘‚ś¤L’Ę?žć@tßź«Vqхö'ĀQäfåa(į½\Ń'u„ļˆff“‚ØÖõ ‚ė‰ >KĮLLŠüēˆöą5Æ~5Z/’ĪÅ>„ń>Fˆ„bĄ )Åʵk—×ļŁ±6y®b„B” ‚R#~#ĮS÷wxc–„;Ü ¼ķ­o]x”H‘ó„ķ"D8Ž””Ź‘ļ?|xysxčŒ3„‡8·vmT©Ōč&/Kih‚'™>M™ŗīŗhožŪ3ŸÉ‹%JĶE ʛs¾™$ Ī%k5·¼OŠĪιÕT«u“ĮŚz yĀ>’Ōß’=y™ļw"ąVą]q‹Ć\eBG×u/)–‚WA ]éXŒlŁ“ÉRęBʜ””a”АRį}8» N2|’pōcˆö Y­ņ?ßüꮋ]†®0 W¤ DžŚĘxå}ˆµŠ"WP/H<:ÉÓ’Ųg?;Š×Ļ€k€w¾żķ¬,Sp{ś#„@Y*qt¼")ŻŽ>õ½ ˜œōa˜\Ź£¤é ֚2éHĢśObxÜ>Ģä‡?<ķ @³^ēO®¼ri¢ł)3E‚gT‹ćŲ(µbtŻŗTįmŪ|dm”u}6Ež¼€CW^‰™Y–®\ ¼ēŻļ^:znšcœxßi$I"ĖöÖė=Įž±Į¼V3NE×=kœd4o»ĘM7 Dū9ĄóŽ?ųƒŽ‹óŽ…Ö);“¶¬måyޘyč!·¼GØ¬Ī“AŠ ŻnŅ­‘ņ¤ŖĄ¶Ńąįßū½h®¶’éŸĪ¹Ąū”k uÓd‹ ×T;7é“īlqÅR°‘MŒiam^–æ™RĒV3—"÷1ń¾÷‘?ųą@“’Ųtī¹¼ėļXxa±6ZX¬Żś¢”N§M’4|µW¬YćxĶk³OMéÜt~üųŽO"D0³zĄćō’źW™žā¢ż:p—\ó·ŪĻńы";Ä£TŽÓ“ŪĒ…÷²11!YIb ¬‡Ą*eŽ43äy»¬Ą8)Ó?č!žīļD;Eńõß~łå¼`¹ŗ„ł³”p޼·äyx?-ŪmŃ-Ųž~ Q­¦ˆĻ\±b BŌ1¦B”U=.&ų<ēĄå—cyd śæ¢õėłČ ±‚"mÖē2’¤™¦iGH)V¬Yӕ'ö īܹSŚĘ¬¢RYA®Ā¹ ĘĢ„Č<ĘĶpāŹ+ißsĻ@“7ß‚k?õ©o|óQX¬Eu©”„T†@#Ļ%kֈe}‚»ĖZżĄ{I&e"“g˜łņ—9vķµŃ>B!ó_ł²— ž’¹JR÷“"ŽWcVÅŽ»''åņbC— ”°6„ȵ1e‚ŅcśņéīŻ<üūæ?-EPõœĶ›ł«>›Ö’˜_½Zų+H9D)Aī}Š™šZ^ ŒLNā„˜*KŌ›xļ‚ĒTäšMzĖ[p­Ö@ōØ×¹į _ ņX&„ cƒÖ‘²vJU†ÓT”"c“vCJey»Ż ČĪCc|ś;ĒĮßłҟžt ņ/·Į篹†s7oų5 PĢE± ¢hH*»<‡V®ģŃ{–Œ vœÓRŽ«²¾æX_Ž‹A7ĮĆŪ·ÓX*~æ?¤X÷ļļ{ŁvŁeŻÓ×*ó i„Ø!„VB”Tŗ¶ÓÉŚl«å•”­cŠņöŒGóåé/|£żč@“G’ ¼ųā‹łŠ¼jށ1Æv™Ā $š¾šg*VĆ0ҐļéaY’ø@­&„µ¢Ón?‚÷Ęų²~p /ß¾ūī7=C±éU6ląĖ’šØĒ©bŻŗ†b¹:ēyŽriŚ7Ķ“\`żztXk­'M›H)䝡,ĪöīåĮßų üüõšĄ‡’ŒcnŗžzVŸ –čQBPÄ2‚ KÉĘ )°¼1d;/Œ1-!’zqx‰ļ1<śŻ75ÅÆ=öŲ±ei[ĄŸߔ’뮾š-Ļ}īņĆZsuĆ¢ō ņ<—ÖZY«Ižö“ĮCcÖ9JE+B朞µ·ūI\»Ķƒo|ć@)³?Ž|oÕ*¾zóͼõMozt] Ż~Ü¢bdĪ)źŲ³głš!€©”µ(ŠF*•APGˆˆÅˆyšYĘCozķ²ˆłDų šĄsĪ;/żŁŸ±ņŠ!&Ž’~ÜņIŠKb䷛ʳžµ°±8˜Å†aģ\ló¼;€„k‡”P„öK’Ā0¦äby Ay—öŻ Ń[ĖĮ+®(bzĖ E”P|mõjN’ńiæīu<öaĻįKūöńŠ˜_~ę3ē•ņ¤)SQA Œńī>§ČōU„†ĆŠYē4Z‡Q(Aó#C]=Ą{żį2sću“¼Xsō(¾ØI>)øķöŪyšĄ…ER·DkQ¢Ųc‰‰žŸ¾óŚLM¹Øø=2§š-ø’šų8SŸ’üIČIC‘'č1Ę"÷>a(uŠÅ•¦ż#C##ŅG‘#ĻSœs€EėnÄu.]~@‡ę“†…!üٱŁN;޵,r•ēt- Ž>‰U"£[Ń”žl”Źc*µšŲ»wļņ•£»>ūY%“DˆāĄ4Ŝ7Ų•'4,<¹į©‚łż*īČsMš¦Ęڼentt“ē¶)°eÓ&æoļ^„„čP¤Č )QqeA²@μöZްmÓ„¶žHģ987÷£T‚R*VŖj ÷>\VVĻ”W nŻźÄžżią\jŅ4ÕÅńtē,RZœShķ±VTŸ÷<žäśėÉĖō'ė<y3ń9ēž[D‹Ÿā‘<‘².“Öι Z½Z.ƒż*G©<żéy*DGj]EŃé@t³/”˜bą=/¾šĀåܝ—ó÷®Ī¾ü*6^?ū»ŠĢµ…ĘšēŽāŲ=Kš¶³<ĻU½nlŸCTś*Bnd쇖FkĀ,3„O 8ØP©B,ŅfŠ57 …*®4Em’BFĢg÷†Ž,“³A˜Åž‡.Š,Š…j÷ĖgęXkHÓ c,aŲŃBäk'&z|½ ÷vēNƤl><33³±ÕjE)•J„ʄeܽ{–X7óJ•kÆ8@±ė€‡µŻžŹRC“tĻ -ŹZŠ/WWĖYqŪ½§8MĢé…„*Rb F£Źkc,Ž7Iӄ$ɽsŽ4e/°xģ;’‰ W­× J=L£±ju„ D@Œµ® ™ååį¦(RiŅ4Dkƒ)Īåå tŁń¢®ßū¢®Æ81/]ŁēŠc;„ŠX«2ùā0Å<„ŒIŃŗŚZ[„ļ­•xļpNēÖ£Ż>lcʹĪLg›“‹O•ķ{ āčķ·Ū©ÉÉF23óšĮ#GŽžE0¦CUExß"Ļ›eĒ»ĒlĘå R#„ƹ„ĀóÕ­>—e5ĒJI¬mį}Š:ŰäyFF8×5"‹CS„Œ)=<„"Ā–³J“ēšN§I§s„G™xčŲ±q?Tƒ„>ESżĪńŪļ¼Ó½yÕŖ$yXdŁæ’bß¾Īś‘‘ÓāJ„†Ö ČņćĒi&IĒ_GÖāø2•$ œcżŠPqĢmµZGŹcŚ$I‡(Ŗ–~…äłqŅŌ ”Cėˆ0ĀŚ¢ā»Ųų,Y–†A)Ž)]ŻQ)ŠcĄ‘e-„®ŻnåĘ)5“off2‚½aL8­:sƆ}Žųź»}{ļ;vˆżēœ“®·Ót(bČYkt5s$Ļ… ĆLd™Ø ¹Lė<}äkj­GLšvu†8WŹ c”׌Ź,[AtB!Ž)ē2ć}`ŒQZŹP†aŠ“ÖĒĪe. ­ö> ĖŚ‰RB'EĘBk)Ė"”TG”8k£Ü{YŪI«ÕéČŚģ@§“m9tȊķŪ{|‚'–_Ū·Ė;@n“ū[-iŽ÷ŒŽ’5›~ljŹļ*##āČīŻnė¼éµkjJ®ŃA’H72ā»Fˆ¬Tо83y¶n]Ļ“›šņlŚäٳG°i“ßµgŲ²i“æćĪ;‹óǁ½÷ݧōА0ĒūŃuėüžVKšµk½>|XlÜøŃpēŽeĪ„/­AæčēDōŽū?Ū·o—ŻßŪ·o—KŻ’hūµų=÷¹§p §p §p §p ’%š’‡­·ķ:IIEND®B`‚libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls/mount-origin/index.html000066400000000000000000000006571476025525100332620ustar00rootroot00000000000000
    Hello from the minimal https server example.
    You can confirm the 404 page handler by going to this nonexistant page.
    libwebsockets.org-logo.svg000066400000000000000000000226061476025525100363110ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls/mount-origin image/svg+xml libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-tls/mount-origin/strict-csp.svg000066400000000000000000000302361476025525100340750ustar00rootroot00000000000000 libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server/000077500000000000000000000000001476025525100260265ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server/CMakeLists.txt000066400000000000000000000013021476025525100305620ustar00rootroot00000000000000project(lws-minimal-http-server C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-http-server) set(SRCS minimal-http-server.c) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif()libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server/README.md000066400000000000000000000005011476025525100273010ustar00rootroot00000000000000# lws minimal http server ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-http-server [2018/03/04 09:30:02:7986] USER: LWS minimal http server | visit http://localhost:7681 [2018/03/04 09:30:02:7986] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 on ``` Visit http://localhost:7681 libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server/minimal-http-server.c000066400000000000000000000047331476025525100321100ustar00rootroot00000000000000/* * lws-minimal-http-server * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws. * * To keep it simple, it serves stuff from the subdirectory * "./mount-origin" of the directory it was started in. * You can change that by changing mount.origin below. */ #include #include #include static int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal http server | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.error_document_404 = "/404.html"; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; if (lws_cmdline_option(argc, argv, "--h2-prior-knowledge")) info.options |= LWS_SERVER_OPTION_H2_PRIOR_KNOWLEDGE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server/mount-origin/000077500000000000000000000000001476025525100304555ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server/mount-origin/404.html000066400000000000000000000002271476025525100316530ustar00rootroot00000000000000

    404

    Sorry, that file doesn't exist. libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server/mount-origin/favicon.ico000066400000000000000000000025761476025525100326100ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server/mount-origin/index.html000066400000000000000000000005451476025525100324560ustar00rootroot00000000000000
    Hello from the minimal http server example.
    You can confirm the 404 page handler by going to this nonexistant page. libwebsockets.org-logo.svg000066400000000000000000000226061476025525100355110ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server/mount-origin image/svg+xml libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server/mount-origin/strict-csp.svg000066400000000000000000000302361476025525100332750ustar00rootroot00000000000000 libwebsockets-4.3.5/minimal-examples/mqtt-client/000077500000000000000000000000001476025525100220755ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/mqtt-client/README.md000066400000000000000000000003321476025525100233520ustar00rootroot00000000000000|name|demonstrates| ---|--- minimal-mqtt-client|Simple demo for mqtt client operation minimal-mqtt-client-multi|Demonstrates automatic binding / muxing of independent connections to share a single tcp / tls connection libwebsockets-4.3.5/minimal-examples/mqtt-client/minimal-mqtt-client-multi/000077500000000000000000000000001476025525100271125ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/mqtt-client/minimal-mqtt-client-multi/CMakeLists.txt000066400000000000000000000014151476025525100316530ustar00rootroot00000000000000project(lws-minimal-mqtt-client-multi C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-mqtt-client-multi) set(SRCS minimal-mqtt-client-multi.c) set(requirements 1) require_lws_config(LWS_ROLE_MQTT 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) require_lws_config(LWS_WITH_SYS_STATE 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/mqtt-client/minimal-mqtt-client-multi/README.md000066400000000000000000000006451476025525100303760ustar00rootroot00000000000000# lws minimal MQTT client multi ## build ``` $ cmake . && make ``` ## usage The application goes to https://warmcat.com and receives the page data same as minimal http client. However it does it for 8 client connections concurrently. ## Commandline Options Option|Meaning ---|--- -c |Count of simultaneous connections (default 8) -s|Stagger the connections by 100ms, the last by 1s -p|Use stream binding minimal-mqtt-client-multi.c000066400000000000000000000266641476025525100342320ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/mqtt-client/minimal-mqtt-client-multi/* * lws-minimal-mqtt-client * * Written in 2010-2020 by Andy Green * Sakthi Kannan * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include #include #include #if defined(WIN32) #define HAVE_STRUCT_TIMESPEC #if defined(pid_t) #undef pid_t #endif #endif #include #include #define COUNT 8 struct test_item { struct lws_context *context; struct lws *wsi; lws_sorted_usec_list_t sul; } items[COUNT]; enum { STATE_SUBSCRIBE, /* subscribe to the topic */ STATE_WAIT_SUBACK, STATE_PUBLISH_QOS0, /* Send the message in QoS0 */ STATE_WAIT_ACK0, /* Wait for the synthetic "ack" */ STATE_PUBLISH_QOS1, /* Send the message in QoS1 */ STATE_WAIT_ACK1, /* Wait for the real ack (or timeout + retry) */ STATE_UNSUBSCRIBE, STATE_WAIT_UNSUBACK, STATE_TEST_FINISH }; static int interrupted, do_ssl, pipeline, stagger_us = 5000, okay, done, count = COUNT; static const lws_retry_bo_t retry = { .secs_since_valid_ping = 20, /* if idle, PINGREQ after secs */ .secs_since_valid_hangup = 25, /* hangup if still idle secs */ }; static const lws_mqtt_client_connect_param_t client_connect_param = { .client_id = NULL, .keep_alive = 60, .clean_start = 1, .client_id_nofree = 1, .username_nofree = 1, .password_nofree = 1, .will_param = { .topic = "good/bye", .message = "sign-off", .qos = 0, .retain = 0, }, .username = "lwsUser", .password = "mySecretPassword", }; static lws_mqtt_topic_elem_t topics[] = { [0] = { .name = "test/topic0", .qos = QOS0 }, [1] = { .name = "test/topic1", .qos = QOS1 }, }; static lws_mqtt_subscribe_param_t sub_param = { .topic = &topics[0], .num_topics = LWS_ARRAY_SIZE(topics), }; static const char * const test_string = "No one would have believed in the last years of the nineteenth " "century that this world was being watched keenly and closely by " "intelligences greater than man's and yet as mortal as his own; that as " "men busied themselves about their various concerns they were " "scrutinised and studied, perhaps almost as narrowly as a man with a " "microscope might scrutinise the transient creatures that swarm and " "multiply in a drop of water. With infinite complacency men went to " "and fro over this globe about their little affairs, serene in their " "assurance of their empire over matter. It is possible that the " "infusoria under the microscope do the same. No one gave a thought to " "the older worlds of space as sources of human danger, or thought of " "them only to dismiss the idea of life upon them as impossible or " "improbable. It is curious to recall some of the mental habits of " "those departed days. At most terrestrial men fancied there might be " "other men upon Mars, perhaps inferior to themselves and ready to " "welcome a missionary enterprise. Yet across the gulf of space, minds " "that are to our minds as ours are to those of the beasts that perish, " "intellects vast and cool and unsympathetic, regarded this earth with " "envious eyes, and slowly and surely drew their plans against us. And " "early in the twentieth century came the great disillusionment. "; /* this reflects the length of the string above */ #define TEST_STRING_LEN 1337 struct pss { lws_mqtt_publish_param_t pub_param; int state; size_t pos; int retries; }; static void sigint_handler(int sig) { interrupted = 1; } static int connect_client(struct lws_context *context, struct test_item *item) { struct lws_client_connect_info i; memset(&i, 0, sizeof i); i.mqtt_cp = &client_connect_param; i.opaque_user_data = item; i.protocol = "test-mqtt"; i.address = "localhost"; i.host = "localhost"; i.pwsi = &item->wsi; i.context = context; i.method = "MQTT"; i.alpn = "mqtt"; i.port = 1883; if (do_ssl) { i.ssl_connection = LCCSCF_USE_SSL; i.ssl_connection |= LCCSCF_ALLOW_SELFSIGNED; i.port = 8883; } if (pipeline) i.ssl_connection |= LCCSCF_PIPELINE; if (!lws_client_connect_via_info(&i)) { lwsl_err("%s: Client Connect Failed\n", __func__); return 1; } return 0; } static void start_conn(struct lws_sorted_usec_list *sul) { struct test_item *item = lws_container_of(sul, struct test_item, sul); lwsl_notice("%s: item %d\n", __func__, (int)(item - &items[0])); if (connect_client(item->context, item)) interrupted = 1; } static int system_notify_cb(lws_state_manager_t *mgr, lws_state_notify_link_t *link, int current, int target) { struct lws_context *context = mgr->parent; int n; if (current != LWS_SYSTATE_OPERATIONAL || target != LWS_SYSTATE_OPERATIONAL) return 0; /* * We delay trying to do the client connection until the protocols have * been initialized for each vhost... this happens after we have network * and time so we can judge tls cert validity. * * Stagger the connection attempts so we get some joining before the * first has connected and some afterwards */ for (n = 0; n < count; n++) { items[n].context = context; lws_sul_schedule(context, 0, &items[n].sul, start_conn, n * stagger_us); } return 0; } static int callback_mqtt(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct test_item *item = (struct test_item *)lws_get_opaque_user_data(wsi); struct pss *pss = (struct pss *)user; lws_mqtt_publish_param_t *pub; size_t chunk; switch (reason) { case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("%s: CLIENT_CONNECTION_ERROR: %s\n", __func__, in ? (char *)in : "(null)"); if (++done == count) goto finish_test; break; case LWS_CALLBACK_MQTT_CLIENT_CLOSED: lwsl_user("%s: item %d: CLIENT_CLOSED %p\n", __func__, (int)(item - &items[0]), wsi); if (++done == count) goto finish_test; break; case LWS_CALLBACK_MQTT_CLIENT_ESTABLISHED: lwsl_user("%s: MQTT_CLIENT_ESTABLISHED: %p\n", __func__, wsi); lws_callback_on_writable(wsi); return 0; case LWS_CALLBACK_MQTT_SUBSCRIBED: lwsl_user("%s: MQTT_SUBSCRIBED\n", __func__); /* then we can get on with the actual test part */ pss->state++; lws_callback_on_writable(wsi); break; case LWS_CALLBACK_MQTT_UNSUBSCRIBED: lwsl_user("%s: item %d: UNSUBSCRIBED: %p: Received unsuback\n", __func__, (int)(item - &item[0]), wsi); okay++; if (++pss->state == STATE_TEST_FINISH) { lwsl_notice("%s: MQTT_UNSUBACK ending stream %d successfully(%d/%d)\n", __func__, (int)(item - &items[0]), okay, count); /* We are done, request to close */ return -1; } break; case LWS_CALLBACK_MQTT_CLIENT_WRITEABLE: /* * Extra WRITEABLE may appear here other than ones we asked * for, so we must consult our own state to decide if we want * to make use of the opportunity */ switch (pss->state) { case STATE_SUBSCRIBE: lwsl_user("%s: item %d: WRITEABLE: %p: Subscribing\n", __func__, (int)(item - &items[0]), wsi); if (lws_mqtt_client_send_subcribe(wsi, &sub_param)) { lwsl_notice("%s: subscribe failed\n", __func__); return -1; } pss->state++; break; case STATE_PUBLISH_QOS0: case STATE_PUBLISH_QOS1: lwsl_user("%s: item %d: WRITEABLE: %p: Publish\n", __func__, (int)(item - &items[0]), wsi); pss->pub_param.topic = pss->state == STATE_PUBLISH_QOS0 ? "test/topic0" : "test/topic1"; pss->pub_param.topic_len = (uint16_t)strlen(pss->pub_param.topic); pss->pub_param.qos = pss->state == STATE_PUBLISH_QOS0 ? QOS0 : QOS1; pss->pub_param.payload_len = TEST_STRING_LEN; /* We send the message out 300 bytes or less at at time */ chunk = 300; if (chunk > TEST_STRING_LEN - pss->pos) chunk = TEST_STRING_LEN - pss->pos; lwsl_notice("%s: sending %d at +%d\n", __func__, (int)chunk, (int)pss->pos); if (lws_mqtt_client_send_publish(wsi, &pss->pub_param, test_string + pss->pos, (uint32_t)chunk, (pss->pos + chunk == TEST_STRING_LEN))) { lwsl_notice("%s: publish failed\n", __func__); return -1; } pss->pos += chunk; if (pss->pos == TEST_STRING_LEN) { lwsl_debug("%s: sent message\n", __func__); pss->pos = 0; pss->state++; } break; case STATE_UNSUBSCRIBE: lwsl_user("%s: item %d: UNSUBSCRIBE: %p: Send unsub\n", __func__, (int)(item - &item[0]), wsi); pss->state++; if (lws_mqtt_client_send_unsubcribe(wsi, &sub_param)) { lwsl_notice("%s: subscribe failed\n", __func__); return -1; } break; default: break; } return 0; case LWS_CALLBACK_MQTT_ACK: lwsl_user("%s: item %d: MQTT_ACK (state %d)\n", __func__, (int)(item - &items[0]), pss->state); /* * We can forget about the message we just sent, it's done. * * For our test, that's the indication we can close the wsi. */ pss->state++; if (pss->state != STATE_TEST_FINISH) { lws_callback_on_writable(wsi); break; } break; case LWS_CALLBACK_MQTT_RESEND: lwsl_user("%s: MQTT_RESEND\n", __func__); /* * We must resend the packet ID mentioned in len */ if (++pss->retries == 3) { lwsl_notice("%s: too many retries\n", __func__); return 1; /* kill the connection */ } pss->state--; pss->pos = 0; break; case LWS_CALLBACK_MQTT_CLIENT_RX: pub = (lws_mqtt_publish_param_t *)in; assert(pub); lwsl_user("%s: item %d: MQTT_CLIENT_RX (%s) pos %d/%d len %d\n", __func__, (int)(item - &items[0]), pub->topic, (int)pub->payload_pos, (int)pub->payload_len, (int)len); //lwsl_hexdump_info(pub->payload, len); return 0; default: break; } return 0; finish_test: interrupted = 1; lws_cancel_service(lws_get_context(wsi)); return 0; } static const struct lws_protocols protocols[] = { { .name = "test-mqtt", .callback = callback_mqtt, .per_session_data_size = sizeof(struct pss) }, LWS_PROTOCOL_LIST_TERM }; int main(int argc, const char **argv) { lws_state_notify_link_t notifier = { { NULL, NULL, NULL }, system_notify_cb, "app" }; lws_state_notify_link_t *na[] = { ¬ifier, NULL }; struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0; signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ lws_cmdline_option_handle_builtin(argc, argv, &info); do_ssl = !!lws_cmdline_option(argc, argv, "-s"); if (do_ssl) info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; if (lws_cmdline_option(argc, argv, "-p")) pipeline = 1; if ((p = lws_cmdline_option(argc, argv, "-i"))) stagger_us = atoi(p); if ((p = lws_cmdline_option(argc, argv, "-c"))) count = atoi(p); if (count > COUNT) { count = COUNT; lwsl_err("%s: clipped count at max %d\n", __func__, count); } lwsl_user("LWS minimal MQTT client %s [-d][-s]\n", do_ssl ? "tls enabled": "unencrypted"); info.port = CONTEXT_PORT_NO_LISTEN; /* we do not run any server */ info.protocols = protocols; info.register_notifier_list = na; info.fd_limit_per_thread = 1 + COUNT + 1; info.retry_and_idle_policy = &retry; #if defined(LWS_WITH_MBEDTLS) || defined(USE_WOLFSSL) /* * OpenSSL uses the system trust store. mbedTLS has to be told which * CA to trust explicitly. */ info.client_ssl_ca_filepath = "./mosq-ca.crt"; #endif context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } /* Event loop */ while (n >= 0 && !interrupted) n = lws_service(context, 0); lwsl_user("%s: Completed: %d/%d ok, %s\n", __func__, okay, count, okay != count ? "failed" : "OK"); lws_context_destroy(context); return okay != count; } selftest.sh.broken-on-travis000077500000000000000000000012241476025525100344210ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/mqtt-client/minimal-mqtt-client-multi#!/bin/bash # # $1: path to minimal example binaries... # if lws is built with -DLWS_WITH_MINIMAL_EXAMPLES=1 # that will be ./bin from your build dir # # $2: path for logs and results. The results will go # in a subdir named after the directory this script # is in # # $3: offset for test index count # # $4: total test count # # $5: path to ./minimal-examples dir in lws # # Test return code 0: OK, 254: timed out, other: error indication . $5/selftests-library.sh COUNT_TESTS=1 #dotest $1 $2 warmcat Q=`which mosquitto` spawn "" /tmp $Q -v dotest $1 $2 -p-i100000 -p -i 100000 kill $SPID 2>/dev/null wait $SPID 2>/dev/null exit $FAILS libwebsockets-4.3.5/minimal-examples/mqtt-client/minimal-mqtt-client-multi/warmcat.com.cer000066400000000000000000000036241476025525100320250ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ 0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ 3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/mqtt-client/minimal-mqtt-client-multi/wget-log000066400000000000000000000011671476025525100305670ustar00rootroot00000000000000--2018-11-25 07:54:30-- https://www.gravatar.com/avatar/c50933ca2aa61e0fe2c43d46bb6b59cb/?s=128 Resolving www.gravatar.com (www.gravatar.com)... 192.0.73.2, 2a04:fa87:fffe::c000:4902 Connecting to www.gravatar.com (www.gravatar.com)|192.0.73.2|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 24761 (24K) [image/png] Saving to: ā€˜/tmp/q’ /tmp/q 0%[ ] 0 --.-KB/s /tmp/q 100%[================================>] 24.18K --.-KB/s in 0.01s 2018-11-25 07:54:31 (2.04 MB/s) - ā€˜/tmp/q’ saved [24761/24761] libwebsockets-4.3.5/minimal-examples/mqtt-client/minimal-mqtt-client/000077500000000000000000000000001476025525100257625ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/mqtt-client/minimal-mqtt-client/CMakeLists.txt000066400000000000000000000012371476025525100305250ustar00rootroot00000000000000project(lws-minimal-mqtt-client C) cmake_minimum_required(VERSION 2.8.12) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-mqtt-client) set(SRCS minimal-mqtt-client.c) set(requirements 1) require_lws_config(LWS_ROLE_MQTT 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) require_lws_config(LWS_WITH_SYS_STATE 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/mqtt-client/minimal-mqtt-client/README.md000066400000000000000000000023251476025525100272430ustar00rootroot00000000000000# lws minimal MQTT client The application connects to a broker at localhost 1883 (unencrypted) or 8883 (tls) ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -s| Use tls and connect to port 8883 instead of 1883 Start mosquitto server locally ``` $ mosquitto ``` Run the example ``` [2020/01/31 10:40:23:7789] U: LWS minimal MQTT client unencrypted [-d][-s] [2020/01/31 10:40:23:8539] N: lws_mqtt_generate_id: User space provided a client ID 'lwsMqttClient' [2020/01/31 10:40:23:9893] N: _lws_mqtt_rx_parser: migrated nwsi 0x50febd0 to sid 1 0x5106820 [2020/01/31 10:40:23:9899] U: callback_mqtt: MQTT_CLIENT_ESTABLISHED [2020/01/31 10:40:23:9967] U: callback_mqtt: WRITEABLE: Subscribing [2020/01/31 10:40:24:0068] U: callback_mqtt: MQTT_SUBSCRIBED ``` Send something to the test client ``` mosquitto_pub -h 127.0.0.1 -p 1883 -t test/topic0 -m "hello" ``` Observe it received at the test client ``` [2020/01/31 10:40:27:1845] U: callback_mqtt: MQTT_CLIENT_RX [2020/01/31 10:40:27:1870] N: [2020/01/31 10:40:27:1945] N: 0000: 74 65 73 74 2F 74 6F 70 69 63 30 test/topic0 [2020/01/31 10:40:27:1952] N: ``` libwebsockets-4.3.5/minimal-examples/mqtt-client/minimal-mqtt-client/minimal-mqtt-client.c000066400000000000000000000214171476025525100320200ustar00rootroot00000000000000/* * lws-minimal-mqtt-client * * Written in 2010-2020 by Andy Green * Sakthi Kannan * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include #include #include #if defined(WIN32) #define HAVE_STRUCT_TIMESPEC #if defined(pid_t) #undef pid_t #endif #endif #include #include enum { STATE_SUBSCRIBE, /* subscribe to the topic */ STATE_PUBLISH_QOS0, /* Send the message in QoS0 */ STATE_WAIT_ACK0, /* Wait for the synthetic "ack" */ STATE_PUBLISH_QOS1, /* Send the message in QoS1 */ STATE_WAIT_ACK1, /* Wait for the real ack (or timeout + retry) */ STATE_TEST_FINISH }; static int interrupted, bad = 1, do_ssl; static const lws_retry_bo_t retry = { .secs_since_valid_ping = 20, /* if idle, PINGREQ after secs */ .secs_since_valid_hangup = 25, /* hangup if still idle secs */ }; static const lws_mqtt_client_connect_param_t client_connect_param = { .client_id = "lwsMqttClient", .keep_alive = 60, .clean_start = 1, .client_id_nofree = 1, .username_nofree = 1, .password_nofree = 1, .will_param = { .topic = "good/bye", .message = "sign-off", .qos = 0, .retain = 0, }, .username = "lwsUser", .password = "mySecretPassword", }; static lws_mqtt_publish_param_t pub_param; static lws_mqtt_topic_elem_t topics[] = { [0] = { .name = "test/topic0", .qos = QOS0 }, [1] = { .name = "test/topic1", .qos = QOS1 }, }; static lws_mqtt_subscribe_param_t sub_param = { .topic = &topics[0], .num_topics = LWS_ARRAY_SIZE(topics), }; static const char * const test_string = "No one would have believed in the last years of the nineteenth " "century that this world was being watched keenly and closely by " "intelligences greater than man's and yet as mortal as his own; that as " "men busied themselves about their various concerns they were " "scrutinised and studied, perhaps almost as narrowly as a man with a " "microscope might scrutinise the transient creatures that swarm and " "multiply in a drop of water. With infinite complacency men went to " "and fro over this globe about their little affairs, serene in their " "assurance of their empire over matter. It is possible that the " "infusoria under the microscope do the same. No one gave a thought to " "the older worlds of space as sources of human danger, or thought of " "them only to dismiss the idea of life upon them as impossible or " "improbable. It is curious to recall some of the mental habits of " "those departed days. At most terrestrial men fancied there might be " "other men upon Mars, perhaps inferior to themselves and ready to " "welcome a missionary enterprise. Yet across the gulf of space, minds " "that are to our minds as ours are to those of the beasts that perish, " "intellects vast and cool and unsympathetic, regarded this earth with " "envious eyes, and slowly and surely drew their plans against us. And " "early in the twentieth century came the great disillusionment. "; /* this reflects the length of the string above */ #define TEST_STRING_LEN 1337 struct pss { int state; size_t pos; int retries; }; static void sigint_handler(int sig) { interrupted = 1; } static int connect_client(struct lws_context *context) { struct lws_client_connect_info i; memset(&i, 0, sizeof i); i.mqtt_cp = &client_connect_param; i.address = "localhost"; i.host = "localhost"; i.protocol = "mqtt"; i.context = context; i.method = "MQTT"; i.alpn = "mqtt"; i.port = 1883; if (do_ssl) { i.ssl_connection = LCCSCF_USE_SSL; i.ssl_connection |= LCCSCF_ALLOW_SELFSIGNED; i.port = 8883; } if (!lws_client_connect_via_info(&i)) { lwsl_err("%s: Client Connect Failed\n", __func__); return 1; } return 0; } static int system_notify_cb(lws_state_manager_t *mgr, lws_state_notify_link_t *link, int current, int target) { struct lws_context *context = mgr->parent; if (current != LWS_SYSTATE_OPERATIONAL || target != LWS_SYSTATE_OPERATIONAL) return 0; /* * We delay trying to do the client connection until * the protocols have been initialized for each * vhost... this happens after we have network and * time so we can judge tls cert validity. */ if (connect_client(context)) interrupted = 1; return 0; } static int callback_mqtt(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct pss *pss = (struct pss *)user; lws_mqtt_publish_param_t *pub; size_t chunk; switch (reason) { case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("%s: CLIENT_CONNECTION_ERROR: %s\n", __func__, in ? (char *)in : "(null)"); interrupted = 1; break; case LWS_CALLBACK_MQTT_CLIENT_CLOSED: lwsl_user("%s: CLIENT_CLOSED\n", __func__); interrupted = 1; break; case LWS_CALLBACK_MQTT_CLIENT_ESTABLISHED: lwsl_user("%s: MQTT_CLIENT_ESTABLISHED\n", __func__); lws_callback_on_writable(wsi); return 0; case LWS_CALLBACK_MQTT_SUBSCRIBED: lwsl_user("%s: MQTT_SUBSCRIBED\n", __func__); lws_callback_on_writable(wsi); break; case LWS_CALLBACK_MQTT_CLIENT_WRITEABLE: /* * Extra WRITEABLE may appear here other than ones we asked * for, so we must consult our own state to decide if we want * to make use of the opportunity */ switch (pss->state) { case STATE_SUBSCRIBE: lwsl_user("%s: WRITEABLE: Subscribing\n", __func__); if (lws_mqtt_client_send_subcribe(wsi, &sub_param)) { lwsl_notice("%s: subscribe failed\n", __func__); return -1; } pss->state++; break; case STATE_PUBLISH_QOS0: case STATE_PUBLISH_QOS1: lwsl_user("%s: WRITEABLE: Publish\n", __func__); pub_param.topic = "test/topic"; pub_param.topic_len = (uint16_t)strlen(pub_param.topic); pub_param.qos = pss->state == STATE_PUBLISH_QOS0 ? QOS0 : QOS1; pub_param.payload_len = TEST_STRING_LEN; /* We send the message out 300 bytes or less at at time */ chunk = 300; if (chunk > TEST_STRING_LEN - pss->pos) chunk = TEST_STRING_LEN - pss->pos; if (lws_mqtt_client_send_publish(wsi, &pub_param, test_string + pss->pos, (uint32_t)chunk, (pss->pos + chunk == TEST_STRING_LEN))) return -1; pss->pos += chunk; if (pss->pos == TEST_STRING_LEN) { pss->pos = 0; pss->state++; } break; default: break; } return 0; case LWS_CALLBACK_MQTT_ACK: lwsl_user("%s: MQTT_ACK\n", __func__); /* * We can forget about the message we just sent, it's done. * * For our test, that's the indication we can close the wsi. */ pss->state++; if (pss->state != STATE_TEST_FINISH) { lws_callback_on_writable(wsi); break; } /* Oh we are done then */ bad = 0; interrupted = 1; lws_cancel_service(lws_get_context(wsi)); break; case LWS_CALLBACK_MQTT_RESEND: lwsl_user("%s: MQTT_RESEND\n", __func__); /* * We must resend the packet ID mentioned in len */ if (++pss->retries == 3) { interrupted = 1; break; } pss->state--; pss->pos = 0; break; case LWS_CALLBACK_MQTT_CLIENT_RX: lwsl_user("%s: MQTT_CLIENT_RX\n", __func__); pub = (lws_mqtt_publish_param_t *)in; assert(pub); lwsl_hexdump_notice(pub->topic, pub->topic_len); lwsl_hexdump_notice(pub->payload, pub->payload_len); return 0; default: break; } return 0; } static const struct lws_protocols protocols[] = { { .name = "mqtt", .callback = callback_mqtt, .per_session_data_size = sizeof(struct pss) }, LWS_PROTOCOL_LIST_TERM }; int main(int argc, const char **argv) { lws_state_notify_link_t notifier = { { NULL, NULL, NULL }, system_notify_cb, "app" }; lws_state_notify_link_t *na[] = { ¬ifier, NULL }; struct lws_context_creation_info info; struct lws_context *context; int n = 0; signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ lws_cmdline_option_handle_builtin(argc, argv, &info); do_ssl = !!lws_cmdline_option(argc, argv, "-s"); if (do_ssl) info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; lwsl_user("LWS minimal MQTT client %s [-d][-s]\n", do_ssl ? "tls enabled": "unencrypted"); info.port = CONTEXT_PORT_NO_LISTEN; /* we do not run any server */ info.protocols = protocols; info.register_notifier_list = na; info.fd_limit_per_thread = 1 + 1 + 1; info.retry_and_idle_policy = &retry; #if defined(LWS_WITH_MBEDTLS) || defined(USE_WOLFSSL) /* * OpenSSL uses the system trust store. mbedTLS has to be told which * CA to trust explicitly. */ info.client_ssl_ca_filepath = "./mosq-ca.crt"; #endif context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } /* Event loop */ while (n >= 0 && !interrupted) n = lws_service(context, 0); lwsl_user("Completed: %s\n", bad ? "failed" : "OK"); lws_context_destroy(context); return bad; } libwebsockets-4.3.5/minimal-examples/mqtt-client/minimal-mqtt-client/mosq-ca.crt000066400000000000000000000024161476025525100300370ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIDjzCCAnegAwIBAgIUAVMnfaOq8yiLnvIB/obE689mulMwDQYJKoZIhvcNAQEL BQAwVjELMAkGA1UEBhMCWFgxFTATBgNVBAcMDERlZmF1bHQgQ2l0eTEcMBoGA1UE CgwTRGVmYXVsdCBDb21wYW55IEx0ZDESMBAGA1UEAwwJbG9jYWxob3N0MCAXDTE5 MTEyMDA1NTYyNFoYDzIxMTkxMDI3MDU1NjI0WjBWMQswCQYDVQQGEwJYWDEVMBMG A1UEBwwMRGVmYXVsdCBDaXR5MRwwGgYDVQQKDBNEZWZhdWx0IENvbXBhbnkgTHRk MRIwEAYDVQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK AoIBAQCyw+kBLg9lCGlBceil0lNqgh7fyguin8IFm5X60bfSJ/pV6i8dZZplVjE+ g75iFEFBYyfn+6bOPdinfQ7Uu+l6t6y2HWbK6MkoypF/g7cdtUFy9s4cUX0467BZ hMPJUc4UfnD+bYcXoguPJ6/OH84+Ayg6uvm5nJ32pDiXr6gMd5YljdXaJpCeeh4w O2UBD1HffyPIklIPT59lxv2ZvKnZbE4UE1uaLLvTWiT+X+gA3i0Syxkq5RlZ61DE 3MyIYAUVSf3coNXCSdJ9wrOsGoP+X+T+aDjnFCCnqus3QX3JOHTKf4+tBoF65cNP mnHXb5/ZQCcR9HMofacalMpjiGb7AgMBAAGjUzBRMB0GA1UdDgQWBBTl3poLE/22 R4RXTMoXPHMlc3QRjzAfBgNVHSMEGDAWgBTl3poLE/22R4RXTMoXPHMlc3QRjzAP BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCwWVnNjKRH9CCBv3yT Djah51q3NH3E+f1IcBZz2c5WbJHxEtP4QC57ou2x3hC7Cur9iOqIO57VW8vnFP2Y bD9oHb46grsGhwuaSuA2AlFZ5EuUAe2cgEj5/3Ihd3HYsXN3rfRO1PVGN1iRG1sE xAxENNm6nOS1Ht1Zy5YmMiSPzghcsTnpg44AqsmowbIED75EpumLwY2NbAl9/7JL EJil3cxEZ8rl2DVWPU3hAwrOfhl/rkQTCcigyPvZvAqsJ9vYhZftrF6njUsqr5kL KHENu5ySKPNk5gFR17WjWoqT6iEOZN25qyfFhBRzjpCX6zD1gx0sYcVryCnTH5Y4 Drjh -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/mqtt-client/minimal-mqtt-client/mosq-server.crt000066400000000000000000000022241476025525100307570ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIDNTCCAh0CFFu5XIMrh5gPYnjTr8UrXA3UiWqHMA0GCSqGSIb3DQEBCwUAMFYx CzAJBgNVBAYTAlhYMRUwEwYDVQQHDAxEZWZhdWx0IENpdHkxHDAaBgNVBAoME0Rl ZmF1bHQgQ29tcGFueSBMdGQxEjAQBgNVBAMMCWxvY2FsaG9zdDAgFw0xOTExMjAw NTU4NTdaGA8yMTE5MTAyNzA1NTg1N1owVjELMAkGA1UEBhMCWFgxFTATBgNVBAcM DERlZmF1bHQgQ2l0eTEcMBoGA1UECgwTRGVmYXVsdCBDb21wYW55IEx0ZDESMBAG A1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA tldZ5yGrBsLR/7G4b48pwQSSG6fp4egiZdeFV7SRNfbMzpuIDlFdZM9zdcoQQrTl 24aVIGwkvfsMD33Hb/D1WW+r8UFnq4CutigwXArXUxoFX6fa0rwEEjuxwG3f7+xm vb6p/KXomyWcdAUmAvALaDXIUDEc3tH+Hxik5z36YjIqRjH16jhhs/6T8B3xAWuR jnDknJWv36QruMIyPUqYYkl2zl4VXUKBgWZr31Opm08kb/FrWJ6lQ7912jZC8G2L rtwZJB/1psBrX3Oj/Quj+BWHmzkosqVae2G5zAhphZ2NMrdSVfxdctNmakH8oTwf hRas8DE2olW3whUkfKG2DQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQAKEQ7LpPdU XbJKushJ7wmuljQn3pmW9SjzFMlL9o59KLHWAmxzTDaAm6r3SGgHeSz3ZLwqtJ8I 7pCxQxI6V1ySMkWI1mfi4KPSavxBRaST4o8+YIKJt4c5aLB1seHoghx3Q/jXEGEB 9dFyLMK6u3EhYSletQNeMVGaeK1q/nVZdHNk4LXVIHsXnKlxyMnW3v18iaV3ZhVd doAWMpnbY91AyCXjOmQrfQaHLL6n3r1Xk2L+cRO3nSor54UIXqIJxHZtj+ZYOy3Z C5AkQ1yyTTOtEz9WB0Bk2O4ZfNgJO+1MbQSfL0m0YKpuaFnMHD9g5ufUlJGR2aMI nw1F/oGZoNUl -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/mqtt-client/minimal-mqtt-client/mosq-server.key000066400000000000000000000032171476025525100307620ustar00rootroot00000000000000-----BEGIN RSA PRIVATE KEY----- MIIEpQIBAAKCAQEAtldZ5yGrBsLR/7G4b48pwQSSG6fp4egiZdeFV7SRNfbMzpuI DlFdZM9zdcoQQrTl24aVIGwkvfsMD33Hb/D1WW+r8UFnq4CutigwXArXUxoFX6fa 0rwEEjuxwG3f7+xmvb6p/KXomyWcdAUmAvALaDXIUDEc3tH+Hxik5z36YjIqRjH1 6jhhs/6T8B3xAWuRjnDknJWv36QruMIyPUqYYkl2zl4VXUKBgWZr31Opm08kb/Fr WJ6lQ7912jZC8G2LrtwZJB/1psBrX3Oj/Quj+BWHmzkosqVae2G5zAhphZ2NMrdS VfxdctNmakH8oTwfhRas8DE2olW3whUkfKG2DQIDAQABAoIBACMctwc3CIQIx/+A 7Y8t9lBg3PHOZ89EsDsEQX0eHEhT+iRe9tgq+t0KxaUNAAyYYRrg056mtHyQ90WU Zu87a0OJqYaPnbL82KfjHUzcGZK7FAXTgOPLqM0KCbSQc+rzjuVC7eDk4eHeYD5H L4apSskKckRe8LxHm7PJPxf4a1q1EuMEfAyJhh7Tot0oVsG/wABGFUuJVJWXnec1 0ukPowKh9bg7UyEecwyeYGzXqNqvbjhS3J0dBkjG5vfxuVHae2yIeXk6ZNsCw6tO K8bklmsmbWAFR5SKpsNve8X/6nlclP0taDDZsz0KSbxJEd2DuRhFcdiRWEoryZVp 7DOORFECgYEA5sdsRjQoHaU85QZuM7ff6NpNT7kMIJbjHRdiauEBakLHs8yVLNEp Vvg5fcZY4PumqPKyGEjUD6DenlLvb4OBGqzKGGhAJaLz9cpVoWWPz8y1NRBfPjlB FQdB4GdtBQGXwnZoD9kXPjYHlk4nwZZ/Sitm2w6RibiIxE0adnwLhP8CgYEAykTE 5NZ88OGGf0RWUt54OxTl4fChAcvK93KkdlK9nbokXHs7VIl4QpKPFu1nuMDrkVI4 fVYwRDcZUjyxqbpBSf/M6T/kuEsMWBYYGv5c9/U87y0UWHbphN0TSdML2DJp9BTy uy4RleQovof2kOr6sOsKP8lhBGSlhXyJDKn1iPMCgYEAnpvc7HsYPxe7vGQpBV6Q g0bV777seNF7EhlqSK6P/GodOpOWyxCN6vn6+ViC6U3Lgz4Z7NrQ9FTJ6+JwMSIe byjmVNQBklxmcz02kRBuQJEe0XOJIgjTlBJC0moC4Xfwx3P9nTbE5LrZiBH6/O/k WCNwM4nVuOOdC906HMiwWh0CgYEAqn3m3ODydXQTk2i9vqIpA9vsnVLf1Ay8a3El sVqy26VQCugQrYQmay7wD6pS2Ec9CMQeO3+PtaAf5tKkCmWlrMNCLIWfu7v+jq0o 6m/nW1ZKY2xDDwJEeaqDHKIZBMYRyxxxMVd2mTq1IUynh6WZY9DqVbPf4/0WC/tZ 5ePIxAMCgYEAwwBNT2xjG1mWD4eANvKjQgrsxKFttmaXXCiixZJR+tsQc5bff5Yb IgvvkIwLHoNpL2Nk7sEjS4sUtAKwzCtIMwvPnhQedICnOEteZ8NPfaFmPewcovcL gv9k+mFActZ7H8i9FXLrZHyEzOXZaM/vY/mHbrlJSWnSDZsvnVzQv+o= -----END RSA PRIVATE KEY----- libwebsockets-4.3.5/minimal-examples/raw/000077500000000000000000000000001476025525100204255ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/raw/README.md000066400000000000000000000015611476025525100217070ustar00rootroot00000000000000|name|demonstrates| ---|--- minimal-raw-adopt-tcp|Shows how to have lws adopt an existing tcp socket something else had connected minimal-raw-adopt-udp|Shows how to create a udp socket and read and write on it minimal-raw-fallback-http|Shows how to run a normal http(s) server that falls back to a specified role + protocol minimal-raw-file|Shows how to adopt a file descriptor (device node, fifo, file, etc) into the lws event loop and handle events minimal-raw-netcat|Writes stdin to a remote server and prints results on stdout minimal-raw-proxy-fallback|Shows how to run a normal http(s) server that falls back to a proxied connection to a specified IP and port minimal-raw-proxy|Shows how to set up a vhost so it listens for connections and proxies them to a specified IP and port minimal-raw-vhost|Shows how to set up a vhost that listens and accepts RAW socket connections libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-adopt-tcp/000077500000000000000000000000001476025525100245335ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-adopt-tcp/CMakeLists.txt000066400000000000000000000012321476025525100272710ustar00rootroot00000000000000project(lws-minimal-raw-adopt-tcp C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-raw-adopt-tcp) set(SRCS minimal-raw-adopt-tcp.c) set(requirements 1) require_lws_config(LWS_WITH_SERVER 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-adopt-tcp/README.md000066400000000000000000000055531476025525100260220ustar00rootroot00000000000000# lws minimal ws server raw adopt tcp This example is only meaningful if you are integrating lws in another app which generates its own connected sockets. In some cases you may want lws to "adopt" the socket. (If you simply want a connected client raw socket using lws alone, you can just use lws_client_connect_via_info() with info.method = "RAW". http-client/minimal-http-client shows how to do that, just set info.method to "RAW".) This example demonstrates how to adopt a foreign, connected socket into lws as a raw wsi, bound to a specific lws protocol. The example connects a socket itself to libwebsockets.org:80, and then has lws adopt it as a raw wsi. The lws protocol writes "GET / HTTP/1.1" to the socket and hexdumps what was sent back. The socket won't close until the server side times it out, since it's a raw socket that doesn't understand it's looking at http. ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-raw-adopt-tcp [2018/03/23 09:03:57:1960] USER: LWS minimal raw adopt tcp [2018/03/23 09:03:57:1961] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off [2018/03/23 09:03:57:2079] USER: Starting connect... [2018/03/23 09:03:57:4963] USER: Connected... [2018/03/23 09:03:57:4963] USER: LWS_CALLBACK_RAW_ADOPT [2018/03/23 09:03:57:7842] USER: LWS_CALLBACK_RAW_RX (186) [2018/03/23 09:03:57:7842] NOTICE: [2018/03/23 09:03:57:7842] NOTICE: 0000: 48 54 54 50 2F 31 2E 31 20 33 30 31 20 52 65 64 HTTP/1.1 301 Red [2018/03/23 09:03:57:7842] NOTICE: 0010: 69 72 65 63 74 0D 0A 73 65 72 76 65 72 3A 20 6C irect..server: l [2018/03/23 09:03:57:7842] NOTICE: 0020: 77 73 77 73 0D 0A 53 74 72 69 63 74 2D 54 72 61 wsws..Strict-Tra [2018/03/23 09:03:57:7843] NOTICE: 0030: 6E 73 70 6F 72 74 2D 53 65 63 75 72 69 74 79 3A nsport-Security: [2018/03/23 09:03:57:7843] NOTICE: 0040: 20 6D 61 78 2D 61 67 65 3D 31 35 37 36 38 30 30 max-age=1576800 [2018/03/23 09:03:57:7843] NOTICE: 0050: 30 20 3B 20 69 6E 63 6C 75 64 65 53 75 62 44 6F 0 ; includeSubDo [2018/03/23 09:03:57:7843] NOTICE: 0060: 6D 61 69 6E 73 0D 0A 6C 6F 63 61 74 69 6F 6E 3A mains..location: [2018/03/23 09:03:57:7843] NOTICE: 0070: 20 68 74 74 70 73 3A 2F 2F 6C 69 62 77 65 62 73 https://libwebs [2018/03/23 09:03:57:7843] NOTICE: 0080: 6F 63 6B 65 74 73 2E 6F 72 67 0D 0A 63 6F 6E 74 ockets.org..cont [2018/03/23 09:03:57:7843] NOTICE: 0090: 65 6E 74 2D 74 79 70 65 3A 20 74 65 78 74 2F 68 ent-type: text/h [2018/03/23 09:03:57:7843] NOTICE: 00A0: 74 6D 6C 0D 0A 63 6F 6E 74 65 6E 74 2D 6C 65 6E tml..content-len [2018/03/23 09:03:57:7843] NOTICE: 00B0: 67 74 68 3A 20 30 0D 0A 0D 0A gth: 0.... [2018/03/23 09:03:57:7843] NOTICE: [2018/03/23 09:04:03:3627] USER: LWS_CALLBACK_RAW_CLOSE ``` Note the example does everything itself, after 5s idle the remote server closes the connection after which the example continues until you ^C it. libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-adopt-tcp/minimal-raw-adopt-tcp.c000066400000000000000000000112101476025525100310000ustar00rootroot00000000000000/* * lws-minimal-raw-adopt-tcp * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates integrating somebody else's connected tcp * socket into the lws event loop as a RAW wsi. It's interesting in * the kind of situation where you already have a connected socket * in your application, and you need to hand it over to lws to deal with. * * Lws supports "adopting" these foreign sockets. * * If you simply want a connected client raw socket using lws alone, you * can just use lws_client_connect_via_info() with info.method = "RAW". * */ #include #include #include #if !defined(WIN32) #include #include #include #include #endif #include #include #include #include #if !defined(WIN32) #include #endif #include static int callback_raw_test(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { switch (reason) { /* callbacks related to raw socket descriptor */ case LWS_CALLBACK_RAW_ADOPT: lwsl_user("LWS_CALLBACK_RAW_ADOPT\n"); lws_callback_on_writable(wsi); break; case LWS_CALLBACK_RAW_CLOSE: lwsl_user("LWS_CALLBACK_RAW_CLOSE\n"); break; case LWS_CALLBACK_RAW_RX: lwsl_user("LWS_CALLBACK_RAW_RX (%d)\n", (int)len); lwsl_hexdump_level(LLL_NOTICE, in, len); break; case LWS_CALLBACK_RAW_WRITEABLE: if (lws_write(wsi, (uint8_t *)"GET / HTTP/1.1\xd\xa\xd\xa", 18, LWS_WRITE_RAW) != 18) { lwsl_notice("%s: raw write failed\n", __func__); return 1; } break; default: break; } return 0; } static struct lws_protocols protocols[] = { { "raw-test", callback_raw_test, 0, 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; static int interrupted; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; lws_sock_file_fd_type sock; struct addrinfo h, *r, *rp; struct lws_vhost *vhost; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal raw adopt tcp\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } info.port = CONTEXT_PORT_NO_LISTEN_SERVER; info.protocols = protocols; vhost = lws_create_vhost(context, &info); if (!vhost) { lwsl_err("lws vhost creation failed\n"); goto bail; } /* * Connect our own "foreign" socket to libwebsockets.org:80 * * Normally you would do this with lws_client_connect_via_info() inside * the lws event loop, hiding all this detail. But this example * demonstrates how to integrate an externally-connected "foreign" * socket, so we create one by hand. */ memset(&h, 0, sizeof(h)); h.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ h.ai_socktype = SOCK_STREAM; h.ai_protocol = IPPROTO_TCP; n = getaddrinfo("libwebsockets.org", "80", &h, &r); if (n) { lwsl_err("%s: problem resolving libwebsockets.org: %s\n", __func__, gai_strerror(n)); return 1; } for (rp = r; rp; rp = rp->ai_next) { sock.sockfd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); if (sock.sockfd != LWS_SOCK_INVALID) break; } if (!rp) { lwsl_err("%s: unable to create INET socket\n", __func__); freeaddrinfo(r); return 1; } lwsl_user("Starting connect...\n"); if (connect(sock.sockfd, rp->ai_addr, sizeof(*rp->ai_addr)) < 0) { lwsl_err("%s: unable to connect to libwebsockets.org:80\n", __func__); freeaddrinfo(r); return 1; } freeaddrinfo(r); signal(SIGINT, sigint_handler); lwsl_user("Connected...\n"); /* our foreign socket is connected... adopt it into lws */ if (!lws_adopt_descriptor_vhost(vhost, LWS_ADOPT_SOCKET, sock, protocols[0].name, NULL)) { lwsl_err("%s: foreign socket adoption failed\n", __func__); goto bail; } while (n >= 0 && !interrupted) n = lws_service(context, 0); bail: lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-adopt-udp/000077500000000000000000000000001476025525100245355ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-adopt-udp/CMakeLists.txt000066400000000000000000000013761476025525100273040ustar00rootroot00000000000000project(lws-minimal-raw-adopt-udp C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-raw-adopt-udp) set(SRCS minimal-raw-adopt-udp.c) set(requirements 1) require_lws_config(LWS_WITH_SERVER 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) require_lws_config(LWS_WITH_UDP 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-adopt-udp/README.md000066400000000000000000000033671476025525100260250ustar00rootroot00000000000000# lws minimal ws server raw adopt udp This example demonstrates echoing packets on a UDP socket in lws. A "foreign" UDP socket is created, bound (so it can "listen"), and adopted into lws event loop. It acts like a tcp RAW mode connection in lws and uses the same callbacks. Writing is a bit different for UDP. By default, the system has no idea about the receiver state and so asking for a callback_on_writable() always believes that the socket is writeable... the callback will happen next time around the event loop if there are no pending partials. With UDP, there is no "connection". You need to write with sendto() and direct the packets to a specific destination. You can learn the source of the last packet that arrived at the LWS_CALLBACK_RAW_RX callback by getting a `struct lws_udp *` from `lws_get_udp(wsi)`. To be able to send back to that guy, you should take a copy of the `struct lws_udp *` and use the .sa and .salen members in your sendto(). However the kernel may not accept to buffer / write everything you wanted to send. So you are responsible to watch the result of sendto() and resend the unsent part next time. ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-raw-adopt-udp $ ./lws-minimal-raw-adopt-udp [2018/03/24 08:12:37:8869] USER: LWS minimal raw adopt udp | nc -u 127.0.0.1 7681 [2018/03/24 08:12:37:8870] NOTICE: Creating Vhost 'default' (no listener), 1 protocols, IPv6 off [2018/03/24 08:12:37:8878] USER: LWS_CALLBACK_RAW_ADOPT [2018/03/24 08:12:41:5656] USER: LWS_CALLBACK_RAW_RX (6) [2018/03/24 08:12:41:5656] NOTICE: [2018/03/24 08:12:41:5656] NOTICE: 0000: 68 65 6C 6C 6F 0A hello. [2018/03/24 08:12:41:5656] NOTICE: ``` ``` $ nc -u 127.0.0.1 7681 hello hello ``` libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-adopt-udp/minimal-raw-adopt-udp.c000066400000000000000000000114451476025525100310160ustar00rootroot00000000000000/* * lws-minimal-raw-adopt-udp * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates integrating a connected udp * socket into the lws event loop as a RAW wsi. It's interesting in * the kind of situation where you already have a connected socket * in your application, and you need to hand it over to lws to deal with. * * Lws supports "adopting" these foreign sockets, and also has a helper API * to create, bind, and adopt them inside lws. */ #include #include #include #if !defined(WIN32) #include #include #include #include #endif #include #include #include #include #if !defined(WIN32) #include #endif #include static uint8_t sendbuf[4096]; static size_t sendlen; struct lws_udp udp; static int callback_raw_test(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { ssize_t n; lws_sockfd_type fd; switch (reason) { /* callbacks related to raw socket descriptor */ case LWS_CALLBACK_RAW_ADOPT: lwsl_user("LWS_CALLBACK_RAW_ADOPT\n"); break; case LWS_CALLBACK_RAW_CLOSE: lwsl_user("LWS_CALLBACK_RAW_CLOSE\n"); break; case LWS_CALLBACK_RAW_RX: lwsl_user("LWS_CALLBACK_RAW_RX (%d)\n", (int)len); lwsl_hexdump_level(LLL_NOTICE, in, len); /* * Take a copy of the buffer and the source socket address... */ udp = *(lws_get_udp(wsi)); sendlen = len; if (sendlen > sizeof(sendbuf)) sendlen = sizeof(sendbuf); memcpy(sendbuf, in, sendlen); /* * ... and we send it next time around the event loop. This * can be extended to having a ringbuffer of different send * buffers and targets queued. * * Note that UDP is ALWAYS writable as far as poll() knows * because there is no mechanism like the tcp window to * understand that packets are not being acknowledged. But * this allows the event loop to share out the work. */ lws_callback_on_writable(wsi); break; case LWS_CALLBACK_RAW_WRITEABLE: if (!sendlen) break; fd = lws_get_socket_fd(wsi); #if defined(WIN32) if ((int)fd < 0) break; #else if (fd < 0) /* keep Coverity happy: actually it cannot be < 0 */ break; #endif /* * We can write directly on the UDP socket, specifying * the peer the write is directed to. * * However the kernel may only accept parts of large sendto()s, * leaving you to try to resend the remainder later. However * depending on how your protocol on top of UDP works, that * may involve sticking new headers before the remainder. * * For clarity partial sends just drop the remainder here. */ n = sendto(fd, #if defined(WIN32) (const char *) #endif sendbuf, #if defined(WIN32) (int) #endif sendlen, 0, sa46_sockaddr(&udp.sa46), sa46_socklen(&udp.sa46)); if (n < (ssize_t)len) lwsl_notice("%s: send returned %d\n", __func__, (int)n); break; default: break; } return 0; } static struct lws_protocols protocols[] = { { "raw-test", callback_raw_test, 0, 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; static int interrupted; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; struct lws_vhost *vhost; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal raw adopt udp | nc -u 127.0.0.1 7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } info.port = CONTEXT_PORT_NO_LISTEN_SERVER; info.protocols = protocols; vhost = lws_create_vhost(context, &info); if (!vhost) { lwsl_err("lws vhost creation failed\n"); goto bail; } /* * Create our own "foreign" UDP socket bound to 7681/udp */ if (!lws_create_adopt_udp(vhost, NULL, 7681, LWS_CAUDP_BIND, protocols[0].name, NULL, NULL, NULL, NULL, "user")) { lwsl_err("%s: foreign socket adoption failed\n", __func__); goto bail; } while (n >= 0 && !interrupted) n = lws_service(context, 0); bail: lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-audio/000077500000000000000000000000001476025525100237415ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-audio/CMakeLists.txt000066400000000000000000000013021476025525100264750ustar00rootroot00000000000000project(lws-minimal-raw-audio C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-raw-audio) set(SRCS audio.c) set(requirements 1) require_lws_config(LWS_WITH_ALSA 1 requirements) require_lws_config(LWS_WITH_NETWORK 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared asound ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets asound ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-audio/README.md000066400000000000000000000022671476025525100252270ustar00rootroot00000000000000# lws minimal raw audio This demonstrates operating ALSA playback and capture using the lws event loop via raw file descriptors. You need the lws cmake option `-DLWS_WITH_ALSA=1` This example opens the default ALSA playback and capture devices and pipes the capture data into the playback with something over 1s delay via a ringbuffer. ALSA doesn't really lend itself to direct use with event loops... this example uses the capture channel which does create POLLIN normally as the timesource for the playback as well; they're both set to 16000Hz sample rate. ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-raw-audio [2019/10/14 18:58:49:3288] U: LWS minimal raw audio [2019/10/14 18:58:50:3438] N: LWS_CALLBACK_RAW_ADOPT_FILE [2019/10/14 18:58:50:3455] N: LWS_CALLBACK_RAW_ADOPT_FILE [2019/10/14 18:58:50:4764] N: LWS_CALLBACK_RAW_RX_FILE: 2062 samples [2019/10/14 18:58:50:6132] N: LWS_CALLBACK_RAW_RX_FILE: 2205 samples [2019/10/14 18:58:50:7592] N: LWS_CALLBACK_RAW_RX_FILE: 2328 samples ... ^C[2019/10/14 18:58:56:8460] N: LWS_CALLBACK_RAW_CLOSE_FILE [2019/10/14 18:58:56:8461] N: LWS_CALLBACK_RAW_CLOSE_FILE [2019/10/14 18:58:56:8461] N: LWS_CALLBACK_PROTOCOL_DESTROY $ ``` libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-audio/audio.c000066400000000000000000000112601476025525100252060ustar00rootroot00000000000000/* * lws-minimal-raw-audio * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates adopting and managing audio device file descriptors in the * event loop. */ #include #include #include #include #include #include #include static unsigned int sample_rate = 16000; struct raw_vhd { uint8_t simplebuf[32768 * 2]; snd_pcm_t *pcm_capture; snd_pcm_t *pcm_playback; snd_pcm_hw_params_t *params; snd_pcm_uframes_t frames; int filefd; int rpos; int wpos; int times; }; static int set_hw_params(struct lws_vhost *vh, snd_pcm_t **pcm, int type) { unsigned int rate = sample_rate; snd_pcm_hw_params_t *params; lws_sock_file_fd_type u; struct pollfd pfd; struct lws *wsi1; int n; n = snd_pcm_open(pcm, "default", type, SND_PCM_NONBLOCK); if (n < 0) { lwsl_err("%s: Can't open default for playback: %s\n", __func__, snd_strerror(n)); return -1; } if (snd_pcm_poll_descriptors(*pcm, &pfd, 1) != 1) { lwsl_err("%s: failed to get playback desc\n", __func__); return -1; } u.filefd = (lws_filefd_type)(long long)pfd.fd; wsi1 = lws_adopt_descriptor_vhost(vh, LWS_ADOPT_RAW_FILE_DESC, u, "lws-audio-test", NULL); if (!wsi1) { lwsl_err("%s: Failed to adopt playback desc\n", __func__); goto bail; } if (type == SND_PCM_STREAM_PLAYBACK) lws_rx_flow_control(wsi1, 0); /* no POLLIN */ snd_pcm_hw_params_malloc(¶ms); snd_pcm_hw_params_any(*pcm, params); n = snd_pcm_hw_params_set_access(*pcm, params, SND_PCM_ACCESS_RW_INTERLEAVED); if (n < 0) goto bail1; n = snd_pcm_hw_params_set_format(*pcm, params, SND_PCM_FORMAT_S16_LE); if (n < 0) goto bail1; n = snd_pcm_hw_params_set_channels(*pcm, params, 1); if (n < 0) goto bail1; n = snd_pcm_hw_params_set_rate_near(*pcm, params, &rate, 0); if (n < 0) goto bail1; n = snd_pcm_hw_params(*pcm, params); snd_pcm_hw_params_free(params); if (n < 0) goto bail; return 0; bail1: snd_pcm_hw_params_free(params); bail: lwsl_err("%s: Set hw params failed: %s\n", __func__, snd_strerror(n)); return -1; } static int callback_raw_test(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct raw_vhd *vhd = (struct raw_vhd *)lws_protocol_vh_priv_get( lws_get_vhost(wsi), lws_get_protocol(wsi)); int n; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct raw_vhd)); if (set_hw_params(lws_get_vhost(wsi), &vhd->pcm_playback, SND_PCM_STREAM_PLAYBACK)) { lwsl_err("%s: Can't open default for playback\n", __func__); return -1; } if (set_hw_params(lws_get_vhost(wsi), &vhd->pcm_capture, SND_PCM_STREAM_CAPTURE)) { lwsl_err("%s: Can't open default for capture\n", __func__); return -1; } break; case LWS_CALLBACK_PROTOCOL_DESTROY: lwsl_notice("LWS_CALLBACK_PROTOCOL_DESTROY\n"); if (vhd && vhd->pcm_playback) { snd_pcm_drain(vhd->pcm_playback); snd_pcm_close(vhd->pcm_playback); vhd->pcm_playback = NULL; } if (vhd && vhd->pcm_capture) { snd_pcm_close(vhd->pcm_capture); vhd->pcm_capture = NULL; } break; case LWS_CALLBACK_RAW_RX_FILE: if (vhd->times >= 6) { /* delay amount decided by this */ n = snd_pcm_writei(vhd->pcm_playback, &vhd->simplebuf[vhd->rpos], ((vhd->wpos - vhd->rpos) & (sizeof(vhd->simplebuf) - 1)) / 2); vhd->rpos = (vhd->rpos + (n * 2)) & (sizeof(vhd->simplebuf) - 1); } n = snd_pcm_readi(vhd->pcm_capture, &vhd->simplebuf[vhd->wpos], (sizeof(vhd->simplebuf) - vhd->wpos) / 2); lwsl_notice("LWS_CALLBACK_RAW_RX_FILE: %d samples\n", n); vhd->times++; vhd->wpos = (vhd->wpos + (n * 2)) & (sizeof(vhd->simplebuf) - 1); break; default: break; } return 0; } static struct lws_protocols protocols[] = { { "lws-audio-test", callback_raw_test, 0, 0 }, LWS_PROTOCOL_LIST_TERM }; static int interrupted; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; int n = 0; signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); lws_cmdline_option_handle_builtin(argc, argv, &info); lwsl_user("LWS minimal raw audio\n"); info.port = CONTEXT_PORT_NO_LISTEN_SERVER; info.protocols = protocols; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-fallback-http-server/000077500000000000000000000000001476025525100266605ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-fallback-http-server/CMakeLists.txt000066400000000000000000000013521476025525100314210ustar00rootroot00000000000000project(lws-minimal-raw-fallback-http-server C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-raw-fallback-http-server) set(SRCS minimal-raw-fallback-http-server.c) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-fallback-http-server/README.md000066400000000000000000000037341476025525100301460ustar00rootroot00000000000000# lws minimal raw fallback http server This is the same as the minimal http server, with one difference... if you connect to localhost:7681 with something that doesn't send recognizable http, then the connection will be switched to a raw-skt role and bind to a protocol that echoes anything sent back to the sender. ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -s|Configure the server for tls / https and `LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT` -h|(needs -s) Configure the vhost also for `LWS_SERVER_OPTION_ALLOW_HTTP_ON_HTTPS_LISTENER`, allowing http service on tls port (caution... it's insecure then) -u|(needs -s) Configure the vhost also for `LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS`, so the server issues a redirect to https to clients that attempt to connect to a server configured for tls with http. ``` $ ./lws-minimal-raw-fallback-http-server [2018/11/29 14:27:34:3014] USER: LWS minimal raw fallback http server | visit http://localhost:7681 [2018/11/29 14:27:34:3243] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off ``` Visit http://127.0.0.1:7681 This allows testing of various combinations of special features for unexpected content on an http(s) listening socket. |cmdline args|http://127.0.0.1:7681|https://127.0.0.1:7681|ssh -p7681 127.0.0.1|flags| |---|---|---|---|---| |none|served|no tls|echos hello|LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG |-s|echos http GET|served|echos hello|LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG, LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT |-s -h|served|served|echos hello|LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG, LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT, LWS_SERVER_OPTION_ALLOW_HTTP_ON_HTTPS_LISTENER |-s -u|redirected to https|served|echos hello|LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG, LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT, LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-fallback-http-server/localhost-100y.cert000066400000000000000000000040721476025525100322210ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-fallback-http-server/localhost-100y.key000066400000000000000000000063101476025525100320510ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- minimal-raw-fallback-http-server.c000066400000000000000000000076361476025525100352140ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-fallback-http-server/* * lws-minimal-raw-fallback http-server * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws. * * To keep it simple, it serves stuff from the subdirectory * "./mount-origin" of the directory it was started in. * You can change that by changing mount.origin below. * * In addition, if the connection does to seem to be talking http, then it * falls back to a raw echo protocol. */ #include #include #include struct pss__raw_echo { uint8_t buf[2048]; int len; }; static int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; static int callback_raw_echo(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct pss__raw_echo *pss = (struct pss__raw_echo *)user; switch (reason) { case LWS_CALLBACK_RAW_ADOPT: lwsl_notice("LWS_CALLBACK_RAW_ADOPT\n"); break; case LWS_CALLBACK_RAW_RX: lwsl_notice("LWS_CALLBACK_RAW_RX %ld\n", (long)len); if (len > sizeof(pss->buf)) len = sizeof(pss->buf); memcpy(pss->buf, in, len); pss->len = (int)len; lws_callback_on_writable(wsi); break; case LWS_CALLBACK_RAW_CLOSE: lwsl_notice("LWS_CALLBACK_RAW_CLOSE\n"); break; case LWS_CALLBACK_RAW_WRITEABLE: lwsl_notice("LWS_CALLBACK_RAW_WRITEABLE\n"); lws_write(wsi, pss->buf, (unsigned int)pss->len, LWS_WRITE_HTTP); break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static const struct lws_protocols protocols[] = { { "raw-echo", callback_raw_echo, sizeof(struct pss__raw_echo), 2048, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal raw fallback http server | " "visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.protocols = protocols; info.mounts = &mount; info.error_document_404 = "/404.html"; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE | LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG; info.listen_accept_role = "raw-skt"; info.listen_accept_protocol = "raw-echo"; #if defined(LWS_WITH_TLS) if (lws_cmdline_option(argc, argv, "-s")) { info.options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; if (lws_cmdline_option(argc, argv, "-u")) info.options |= LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS; if (lws_cmdline_option(argc, argv, "-h")) info.options |= LWS_SERVER_OPTION_ALLOW_HTTP_ON_HTTPS_LISTENER; } #endif context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-fallback-http-server/mount-origin/000077500000000000000000000000001476025525100313075ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-fallback-http-server/mount-origin/404.html000066400000000000000000000002271476025525100325050ustar00rootroot00000000000000

    404

    Sorry, that file doesn't exist. libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-fallback-http-server/mount-origin/favicon.ico000066400000000000000000000025761476025525100334420ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-fallback-http-server/mount-origin/index.html000066400000000000000000000005621476025525100333070ustar00rootroot00000000000000
    Hello from the minimal raw fallback http server example.
    You can confirm the 404 page handler by going to this nonexistant page. libwebsockets.org-logo.svg000066400000000000000000000226061476025525100363430ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-fallback-http-server/mount-origin image/svg+xml strict-csp.svg000066400000000000000000000302361476025525100340500ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-fallback-http-server/mount-origin libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-file/000077500000000000000000000000001476025525100235575ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-file/CMakeLists.txt000066400000000000000000000012121476025525100263130ustar00rootroot00000000000000project(lws-minimal-raw-file C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-raw-file) set(SRCS minimal-raw-file.c) set(requirements 1) require_lws_config(LWS_WITH_SERVER 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif()libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-file/README.md000066400000000000000000000027221476025525100250410ustar00rootroot00000000000000# lws minimal ws server This demonstrates adopting a file descriptor into the lws event loop. The filepath to open and adopt is given as an argument to the example app, eg ``` $ ./lws-minimal-raw-file ``` On a Linux system, some example files for testing might be - /proc/self/fd/0 (stdin) - /dev/ttyUSB0 (a USB <-> serial converter) - /dev/input/event (needs root... input device events) The example application opens the file in the protocol init handler, and hexdumps data from the file to the lws log as it becomes available. This isn't very useful standalone as shown here for clarity, but you can freely combine raw file descriptor adoption with other lws server and client features. Becuase raw file events have their own callback reasons, the handlers can be integrated in a single protocol that also handles http and ws server and client callbacks without conflict. ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-raw-file /proc/self/fd/0 [2018/03/22 10:48:53:9709] USER: LWS minimal raw file [2018/03/22 10:48:53:9876] NOTICE: Creating Vhost 'default' port -2, 1 protocols, IPv6 off [2018/03/22 10:48:55:0037] NOTICE: LWS_CALLBACK_RAW_ADOPT_FILE [2018/03/22 10:48:55:9370] NOTICE: LWS_CALLBACK_RAW_RX_FILE [2018/03/22 10:48:55:9377] NOTICE: [2018/03/22 10:48:55:9408] NOTICE: 0000: 0A . ``` The example logs above show the result of typing the Enter key. libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-file/minimal-raw-file.c000066400000000000000000000073011476025525100270560ustar00rootroot00000000000000/* * lws-minimal-raw-file * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates adopting a file descriptor into the lws event * loop. */ #include #include #include #include #include #include struct raw_vhd { // lws_sock_file_fd_type u; int filefd; }; static char filepath[256]; static int callback_raw_test(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct raw_vhd *vhd = (struct raw_vhd *)lws_protocol_vh_priv_get( lws_get_vhost(wsi), lws_get_protocol(wsi)); lws_sock_file_fd_type u; uint8_t buf[1024]; int n; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct raw_vhd)); vhd->filefd = lws_open(filepath, O_RDWR); if (vhd->filefd == -1) { lwsl_err("Unable to open %s\n", filepath); return 1; } u.filefd = (lws_filefd_type)(long long)vhd->filefd; if (!lws_adopt_descriptor_vhost(lws_get_vhost(wsi), LWS_ADOPT_RAW_FILE_DESC, u, "raw-test", NULL)) { lwsl_err("Failed to adopt fifo descriptor\n"); close(vhd->filefd); vhd->filefd = -1; return 1; } break; case LWS_CALLBACK_PROTOCOL_DESTROY: if (vhd && vhd->filefd != -1) close(vhd->filefd); break; /* callbacks related to raw file descriptor */ case LWS_CALLBACK_RAW_ADOPT_FILE: lwsl_notice("LWS_CALLBACK_RAW_ADOPT_FILE\n"); break; case LWS_CALLBACK_RAW_RX_FILE: lwsl_notice("LWS_CALLBACK_RAW_RX_FILE\n"); n = (int)read(vhd->filefd, buf, sizeof(buf)); if (n < 0) { lwsl_err("Reading from %s failed\n", filepath); return 1; } lwsl_hexdump_level(LLL_NOTICE, buf, (unsigned int)n); break; case LWS_CALLBACK_RAW_CLOSE_FILE: lwsl_notice("LWS_CALLBACK_RAW_CLOSE_FILE\n"); break; case LWS_CALLBACK_RAW_WRITEABLE_FILE: lwsl_notice("LWS_CALLBACK_RAW_WRITEABLE_FILE\n"); /* * you can call lws_callback_on_writable() on a raw file wsi as * usual, and then write directly into the raw filefd here. */ break; default: break; } return 0; } static struct lws_protocols protocols[] = { { "raw-test", callback_raw_test, 0, 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; static int interrupted; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal raw file\n"); if (argc < 2) { lwsl_user("Usage: %s " " eg, /dev/ttyUSB0 or /dev/input/event0 or " "/proc/self/fd/0\n", argv[0]); return 1; } signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = CONTEXT_PORT_NO_LISTEN_SERVER; /* no listen socket for demo */ info.protocols = protocols; lws_strncpy(filepath, argv[1], sizeof(filepath)); context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-netcat/000077500000000000000000000000001476025525100241165ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-netcat/CMakeLists.txt000066400000000000000000000012211476025525100266520ustar00rootroot00000000000000project(lws-minimal-raw-netcat C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-raw-netcat) set(SRCS minimal-raw-netcat.c) set(requirements 1) require_lws_config(LWS_WITH_SERVER 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-netcat/README.md000066400000000000000000000024411476025525100253760ustar00rootroot00000000000000# lws minimal raw netcat This example shows to to create a "netcat" that copies its stdin to a remote socket and prints what is returned in stdout. It has some advantage over the real netcat, it will wait 1s after stdin closes to print results that are in flight. ## build ``` $ cmake . && make ``` ## usage ``` $ echo -e -n "GET / http/1.1\r\n\r\n"| ./lws-minimal-raw-netcat [2018/05/02 08:53:53:2665] USER: LWS minimal raw netcat [--server ip] [--port port] [2018/05/02 08:53:53:2667] NOTICE: Creating Vhost 'default' (no listener), 1 protocols, IPv6 off [2018/05/02 08:53:53:2703] USER: Starting connect... [2018/05/02 08:53:53:5644] USER: Connected to libwebsockets.org:80... [2018/05/02 08:53:53:5645] USER: LWS_CALLBACK_RAW_ADOPT [2018/05/02 08:53:53:5645] USER: LWS_CALLBACK_RAW_ADOPT_FILE [2018/05/02 08:53:53:5646] USER: LWS_CALLBACK_RAW_RX_FILE [2018/05/02 08:53:53:5646] USER: LWS_CALLBACK_RAW_CLOSE_FILE [2018/05/02 08:53:53:8600] USER: LWS_CALLBACK_RAW_RX (186) HTTP/1.1 301 Redirect server: lwsws Strict-Transport-Security: max-age=15768000 ; includeSubDomains location: https://libwebsockets.org content-type: text/html content-length: 0 ``` Note the example does everything itself, after 5s idle the remote server closes the connection after which the example continues until you ^C it. libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-netcat/minimal-raw-netcat.c000066400000000000000000000141071476025525100277560ustar00rootroot00000000000000/* * lws-minimal-raw-netcat * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates sending stdin to a remote socket and printing * what is returned to stdout. * * All the logging is on stderr, so you can tune it out with 2>log * or whatever. */ #include #include #include #if !defined(WIN32) #include #include #include #include #include #endif #include #include #include #if !defined(WIN32) #include #endif #include static struct lws *raw_wsi, *stdin_wsi; static uint8_t buf[LWS_PRE + 4096]; static int waiting, interrupted; static struct lws_context *context; static int us_wait_after_input_close = LWS_USEC_PER_SEC / 10; static int callback_raw_test(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { const char *cp = (const char *)in; switch (reason) { /* callbacks related to file descriptor */ case LWS_CALLBACK_RAW_ADOPT_FILE: lwsl_user("LWS_CALLBACK_RAW_ADOPT_FILE\n"); break; case LWS_CALLBACK_RAW_CLOSE_FILE: lwsl_user("LWS_CALLBACK_RAW_CLOSE_FILE\n"); /* stdin close, wait 1s then close the raw skt */ stdin_wsi = NULL; /* invalid now we close */ if (raw_wsi) lws_set_timer_usecs(raw_wsi, us_wait_after_input_close); else { interrupted = 1; lws_cancel_service(context); } break; case LWS_CALLBACK_RAW_RX_FILE: lwsl_user("LWS_CALLBACK_RAW_RX_FILE\n"); waiting = (int)read(0, buf, sizeof(buf)); lwsl_notice("raw file read %d\n", waiting); if (waiting < 0) return -1; if (raw_wsi) lws_callback_on_writable(raw_wsi); lws_rx_flow_control(wsi, 0); break; /* callbacks related to raw socket descriptor */ case LWS_CALLBACK_RAW_ADOPT: lwsl_user("LWS_CALLBACK_RAW_ADOPT\n"); lws_callback_on_writable(wsi); break; case LWS_CALLBACK_RAW_CLOSE: lwsl_user("LWS_CALLBACK_RAW_CLOSE\n"); /* * If the socket to the remote server closed, we must close * and drop any remaining stdin */ interrupted = 1; lws_cancel_service(context); /* our pointer to this wsi is invalid now we close */ raw_wsi = NULL; break; case LWS_CALLBACK_RAW_RX: lwsl_user("LWS_CALLBACK_RAW_RX (%d)\n", (int)len); while (len--) putchar(*cp++); fflush(stdout); break; case LWS_CALLBACK_RAW_WRITEABLE: lwsl_user("LWS_CALLBACK_RAW_WRITEABLE\n"); // lwsl_hexdump_info(buf, waiting); if (stdin_wsi) lws_rx_flow_control(stdin_wsi, 1); if (lws_write(wsi, buf, (unsigned int)waiting, LWS_WRITE_RAW) != waiting) { lwsl_notice("%s: raw skt write failed\n", __func__); return -1; } break; case LWS_CALLBACK_TIMER: lwsl_user("LWS_CALLBACK_TIMER\n"); interrupted = 1; lws_cancel_service(context); return -1; default: break; } return 0; } static struct lws_protocols protocols[] = { { "raw-test", callback_raw_test, 0, 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { const char *server = "libwebsockets.org", *port = "80"; struct lws_context_creation_info info; lws_sock_file_fd_type sock; struct addrinfo h, *r, *rp; struct lws_vhost *vhost; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal raw netcat [--server ip] [--port port] [-w ms]\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } info.port = CONTEXT_PORT_NO_LISTEN_SERVER; info.protocols = protocols; vhost = lws_create_vhost(context, &info); if (!vhost) { lwsl_err("lws vhost creation failed\n"); goto bail; } /* * Connect our own "foreign" socket to libwebsockets.org:80 * * Normally you would do this with lws_client_connect_via_info() inside * the lws event loop, hiding all this detail. But this example * demonstrates how to integrate an externally-connected "foreign" * socket, so we create one by hand. */ memset(&h, 0, sizeof(h)); h.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ h.ai_socktype = SOCK_STREAM; h.ai_protocol = IPPROTO_TCP; if ((p = lws_cmdline_option(argc, argv, "--port"))) port = p; if ((p = lws_cmdline_option(argc, argv, "--server"))) server = p; if ((p = lws_cmdline_option(argc, argv, "-w"))) us_wait_after_input_close = 1000 * atoi(p); n = getaddrinfo(server, port, &h, &r); if (n) { lwsl_err("%s: problem resolving %s: %s\n", __func__, server, gai_strerror(n)); return 1; } for (rp = r; rp; rp = rp->ai_next) { sock.sockfd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); if (sock.sockfd != LWS_SOCK_INVALID) break; } if (!rp) { lwsl_err("%s: unable to create INET socket\n", __func__); freeaddrinfo(r); return 1; } lwsl_user("Starting connect to %s:%s...\n", server, port); if (connect(sock.sockfd, rp->ai_addr, sizeof(*rp->ai_addr)) < 0) { lwsl_err("%s: unable to connect\n", __func__); freeaddrinfo(r); return 1; } freeaddrinfo(r); signal(SIGINT, sigint_handler); lwsl_user("Connected...\n"); /* our foreign socket is connected... adopt it into lws */ raw_wsi = lws_adopt_descriptor_vhost(vhost, LWS_ADOPT_SOCKET, sock, protocols[0].name, NULL); if (!raw_wsi) { lwsl_err("%s: foreign socket adoption failed\n", __func__); goto bail; } sock.filefd = 0; stdin_wsi = lws_adopt_descriptor_vhost(vhost, LWS_ADOPT_RAW_FILE_DESC, sock, protocols[0].name, NULL); if (!stdin_wsi) { lwsl_err("%s: stdin adoption failed\n", __func__); goto bail; } while (n >= 0 && !interrupted) n = lws_service(context, 0); bail: lwsl_user("%s: destroying context\n", __func__); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-proxy-fallback/000077500000000000000000000000001476025525100255565ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-proxy-fallback/CMakeLists.txt000066400000000000000000000016751476025525100303270ustar00rootroot00000000000000project(lws-minimal-raw-proxy-fallback C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-raw-proxy-fallback) set(SRCS minimal-raw-proxy-fallback.c) # NOTE... if you are building this standalone, you must point LWS_PLUGINS_DIR # to the lws plugins dir so it can pick up the plugin source. Eg, # cmake . -DLWS_PLUGINS_DIR=~/libwebsockets/plugins set(requirements 1) require_lws_config(LWS_ROLE_RAW_PROXY 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (LWS_PLUGINS_DIR) include_directories(${LWS_PLUGINS_DIR}) endif() if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-proxy-fallback/README.md000066400000000000000000000040411476025525100270340ustar00rootroot00000000000000# lws minimal ws server raw proxy fallback This demonstrates how a vhost doing normal http or http(s) duty can be also be bound to a specific role and protocol as a fallback if the incoming protocol is unexpected for tls or http. The example makes the fallback role + protocol an lws plugin that performs raw packet proxying. By default the fallback in the example will proxy 127.0.0.1:22, which is usually your ssh server listen port, on 127.0.0.1:7681. You should be able to ssh into port 7681 the same as you can port 22. At the same time, you should be able to visit http://127.0.0.1:7681 in a browser (and if you give -s, to https://127.0.0.1:7681 while your ssh client can still connect to the same port. ## build To build this standalone, you must tell cmake where the lws source tree ./plugins directory can be found, since it relies on including the source of the raw-proxy plugin. ``` $ cmake . -DLWS_PLUGINS_DIR=~/libwebsockets/plugins && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -r ipv4:address:port|Configure the remote IP and port that will be proxied, by default ipv4:127.0.0.1:22 -s|Configure the server for tls / https and `LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT` -h|(needs -s) Configure the vhost also for `LWS_SERVER_OPTION_ALLOW_HTTP_ON_HTTPS_LISTENER`, allowing http service on tls port (caution... it's insecure then) -u|(needs -s) Configure the vhost also for `LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS`, so the server issues a redirect to https to clients that attempt to connect to a server configured for tls with http. ``` $ ./lws-minimal-raw-proxy [2018/11/30 19:22:35:7290] USER: LWS minimal raw proxy-fallback [2018/11/30 19:22:35:7291] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off [2018/11/30 19:22:35:7336] NOTICE: callback_raw_proxy: onward ipv4 127.0.0.1:22 ... ``` ``` $ ssh -p7681 me@127.0.0.1 Last login: Fri Nov 30 19:29:23 2018 from 127.0.0.1 [me@learn ~]$ ``` At the same time, visiting http(s)://127.0.0.1:7681 in a browser works fine. libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-proxy-fallback/localhost-100y.cert000066400000000000000000000040721476025525100311170ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-proxy-fallback/localhost-100y.key000066400000000000000000000063101476025525100307470ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-proxy-fallback/minimal-raw-proxy-fallback.c000066400000000000000000000074521476025525100330630ustar00rootroot00000000000000/* * lws-minimal-raw-proxy-fallback * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a normal http / https server which if it receives something * it can't make sense of at the start, falls back to becoming a raw tcp proxy * to a specified address and port. * * Incoming connections cause an outgoing connection to be initiated, and if * successfully established then traffic coming in one side is placed on a * ringbuffer and sent out the opposite side as soon as possible. * * If it receives expected packets for an http(s) connection, it acts like a * normal h1 / h2 webserver. */ #include #include #include #include #define LWS_PLUGIN_STATIC #include "../plugins/raw-proxy/protocol_lws_raw_proxy.c" static struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_RAW_PROXY, LWS_PROTOCOL_LIST_TERM }; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; static int interrupted; void sigint_handler(int sig) { interrupted = 1; } static struct lws_protocol_vhost_options pvo1 = { NULL, NULL, "onward", /* pvo name */ "ipv4:127.0.0.1:22" /* pvo value */ }; static const struct lws_protocol_vhost_options pvo = { NULL, /* "next" pvo linked-list */ &pvo1, /* "child" pvo linked-list */ "raw-proxy", /* protocol name we belong to on this vhost */ "" /* ignored */ }; int main(int argc, const char **argv) { int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; struct lws_context_creation_info info; struct lws_context *context; char outward[256]; const char *p; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal raw proxy fallback | visit http://localhost:7681\n"); if ((p = lws_cmdline_option(argc, argv, "-r"))) { lws_strncpy(outward, p, sizeof(outward)); pvo1.value = outward; } memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.protocols = protocols; info.pvo = &pvo; info.mounts = &mount; info.error_document_404 = "/404.html"; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE | LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG; info.listen_accept_role = "raw-proxy"; info.listen_accept_protocol = "raw-proxy"; #if defined(LWS_WITH_TLS) if (lws_cmdline_option(argc, argv, "-s")) { info.options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; if (lws_cmdline_option(argc, argv, "-u")) info.options |= LWS_SERVER_OPTION_REDIRECT_HTTP_TO_HTTPS; if (lws_cmdline_option(argc, argv, "-h")) info.options |= LWS_SERVER_OPTION_ALLOW_HTTP_ON_HTTPS_LISTENER; } #endif context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-proxy-fallback/mount-origin/000077500000000000000000000000001476025525100302055ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-proxy-fallback/mount-origin/404.html000066400000000000000000000002271476025525100314030ustar00rootroot00000000000000

    404

    Sorry, that file doesn't exist. libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-proxy-fallback/mount-origin/favicon.ico000066400000000000000000000025761476025525100323400ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-proxy-fallback/mount-origin/index.html000066400000000000000000000005621476025525100322050ustar00rootroot00000000000000
    Hello from the minimal raw fallback http server example.
    You can confirm the 404 page handler by going to this nonexistant page. libwebsockets.org-logo.svg000066400000000000000000000226061476025525100352410ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-proxy-fallback/mount-origin image/svg+xml libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-proxy-fallback/mount-origin/strict-csp.svg000066400000000000000000000302361476025525100330250ustar00rootroot00000000000000 libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-proxy/000077500000000000000000000000001476025525100240215ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-proxy/CMakeLists.txt000066400000000000000000000016421476025525100265640ustar00rootroot00000000000000project(lws-minimal-raw-proxy C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-raw-proxy) set(SRCS minimal-raw-proxy.c) # NOTE... if you are building this standalone, you must point LWS_PLUGINS_DIR # to the lws plugins dir so it can pick up the plugin source. Eg, # cmake . -DLWS_PLUGINS_DIR=~/libwebsockets/plugins set(requirements 1) require_lws_config(LWS_ROLE_RAW_PROXY 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (LWS_PLUGINS_DIR) include_directories(${LWS_PLUGINS_DIR}) endif() if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-proxy/README.md000066400000000000000000000023511476025525100253010ustar00rootroot00000000000000# lws minimal ws server raw proxy This demonstrates how a vhost can be bound to a specific role and protocol, with the example using a lws plugin that performs raw packet proxying. By default the example will proxy 127.0.0.1:22, usually your ssh server listen port, on 127.0.0.1:7681. You should be able to ssh into port 7681 the same as you can port 22. But your ssh server is only listening on port 22... ## build To build this standalone, you must tell cmake where the lws source tree ./plugins directory can be found, since it relies on including the source of the raw-proxy plugin. ``` $ cmake . -DLWS_PLUGINS_DIR=~/libwebsockets/plugins && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -r ipv4:address:port|Configure the remote IP and port that will be proxied, by default ipv4:127.0.0.1:22 ``` $ ./lws-minimal-raw-proxy [2018/11/30 19:22:35:7290] USER: LWS minimal raw proxy | nc localhost 7681 [2018/11/30 19:22:35:7291] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off [2018/11/30 19:22:35:7336] NOTICE: callback_raw_proxy: onward ipv4 127.0.0.1:22 ... ``` ``` $ ssh -p7681 me@127.0.0.1 Last login: Fri Nov 30 19:29:23 2018 from 127.0.0.1 [me@learn ~]$ ``` libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-proxy/minimal-raw-proxy.c000066400000000000000000000043651476025525100275710ustar00rootroot00000000000000/* * lws-minimal-raw-proxy * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a vhost that acts as a raw tcp proxy. Incoming connections * cause an outgoing connection to be initiated, and if successfully established * then traffic coming in one side is placed on a ringbuffer and sent out the * opposite side as soon as possible. */ #include #include #include #include #define LWS_PLUGIN_STATIC #include "../plugins/raw-proxy/protocol_lws_raw_proxy.c" static struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_RAW_PROXY, LWS_PROTOCOL_LIST_TERM }; static int interrupted; void sigint_handler(int sig) { interrupted = 1; } static struct lws_protocol_vhost_options pvo1 = { NULL, NULL, "onward", /* pvo name */ "ipv4:127.0.0.1:22" /* pvo value */ }; static const struct lws_protocol_vhost_options pvo = { NULL, /* "next" pvo linked-list */ &pvo1, /* "child" pvo linked-list */ "raw-proxy", /* protocol name we belong to on this vhost */ "" /* ignored */ }; int main(int argc, const char **argv) { int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; struct lws_context_creation_info info; struct lws_context *context; char outward[256]; const char *p; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal raw proxy\n"); if ((p = lws_cmdline_option(argc, argv, "-r"))) { lws_strncpy(outward, p, sizeof(outward)); pvo1.value = outward; } memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.protocols = protocols; info.pvo = &pvo; info.options = LWS_SERVER_OPTION_ADOPT_APPLY_LISTEN_ACCEPT_CONFIG; info.listen_accept_role = "raw-proxy"; info.listen_accept_protocol = "raw-proxy"; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-serial/000077500000000000000000000000001476025525100241175ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-serial/CMakeLists.txt000066400000000000000000000012301476025525100266530ustar00rootroot00000000000000project(lws-minimal-raw-serial C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-raw-serial) set(SRCS minimal-raw-file.c) set(requirements 1) require_lws_config(LWS_WITH_SERVER 1 requirements) if (requirements AND UNIX) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-serial/README.md000066400000000000000000000030761476025525100254040ustar00rootroot00000000000000# lws minimal raw serial example This demonstrates adopting a file descriptor representing a serial device into the event loop, printing a string on it every couple of seconds and showing any serial that is received. The serial terminal is configured for 115200 8N1. ``` $ ./lws-minimal-raw-serial ``` ## build ``` $ cmake . && make ``` ## usage ``` [2019/12/08 16:30:53:4436] U: LWS minimal raw serial [2019/12/08 16:30:53:5016] E: callback_ntpc: set up system ops for set_clock [2019/12/08 16:30:54:8061] N: callback_ntpc: Unix time: 1575822654 [2019/12/08 16:30:54:8253] N: LWS_CALLBACK_RAW_ADOPT_FILE [2019/12/08 16:30:54:8364] N: callback_ntpc: LWS_CALLBACK_RAW_CLOSE [2019/12/08 16:30:54:8456] N: LWS_CALLBACK_RAW_WRITEABLE_FILE [2019/12/08 16:30:56:8455] N: LWS_CALLBACK_RAW_WRITEABLE_FILE [2019/12/08 16:30:58:8460] N: LWS_CALLBACK_RAW_WRITEABLE_FILE [2019/12/08 16:30:59:1570] N: LWS_CALLBACK_RAW_RX_FILE [2019/12/08 16:30:59:1604] N: [2019/12/08 16:30:59:1641] N: 0000: 62 b [2019/12/08 16:30:59:1644] N: [2019/12/08 16:31:00:8463] N: LWS_CALLBACK_RAW_WRITEABLE_FILE [2019/12/08 16:31:01:6392] N: LWS_CALLBACK_RAW_RX_FILE [2019/12/08 16:31:01:6397] N: [2019/12/08 16:31:01:6407] N: 0000: 65 e [2019/12/08 16:31:01:6411] N: [2019/12/08 16:31:02:8463] N: LWS_CALLBACK_RAW_WRITEABLE_FILE ... . ``` The remote serial connection will show the string sent every 2s. libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-serial/minimal-raw-file.c000066400000000000000000000123751476025525100274250ustar00rootroot00000000000000/* * lws-minimal-raw-file * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates dealing with a serial port */ #include #include #include #include #include #include #include #include #if defined(__linux__) #include #include #endif struct raw_vhd { lws_sorted_usec_list_t sul; struct lws *wsi; int filefd; }; static char filepath[256]; static void sul_cb(lws_sorted_usec_list_t *sul) { struct raw_vhd *v = lws_container_of(sul, struct raw_vhd, sul); lws_callback_on_writable(v->wsi); lws_sul_schedule(lws_get_context(v->wsi), 0, &v->sul, sul_cb, 2 * LWS_USEC_PER_SEC); } static int callback_raw_test(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct raw_vhd *vhd = (struct raw_vhd *)lws_protocol_vh_priv_get( lws_get_vhost(wsi), lws_get_protocol(wsi)); #if defined(__linux__) struct serial_struct s_s; #endif lws_sock_file_fd_type u; struct termios tio; uint8_t buf[1024]; int n; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct raw_vhd)); vhd->filefd = lws_open(filepath, O_RDWR); if (vhd->filefd == -1) { lwsl_err("Unable to open %s\n", filepath); return 1; } tcflush(vhd->filefd, TCIOFLUSH); #if defined(__linux__) if (ioctl(vhd->filefd, TIOCGSERIAL, &s_s) == 0) { s_s.closing_wait = ASYNC_CLOSING_WAIT_NONE; ioctl(vhd->filefd, TIOCSSERIAL, &s_s); } #endif /* enforce suitable tty state */ memset(&tio, 0, sizeof tio); if (tcgetattr(vhd->filefd, &tio)) { close(vhd->filefd); vhd->filefd = -1; return -1; } cfsetispeed(&tio, B115200); cfsetospeed(&tio, B115200); tio.c_lflag &= (tcflag_t)~(ISIG | ICANON | IEXTEN | ECHO | #if defined(__linux__) XCASE | #endif ECHOE | ECHOK | ECHONL | ECHOCTL | ECHOKE); tio.c_iflag &= (tcflag_t)~(INLCR | IGNBRK | IGNPAR | IGNCR | ICRNL | IMAXBEL | IXON | IXOFF | IXANY #if defined(__linux__) | IUCLC #endif | 0xff); tio.c_oflag = 0; tio.c_cc[VMIN] = 1; tio.c_cc[VTIME] = 0; tio.c_cc[VEOF] = 1; tio.c_cflag = tio.c_cflag & (unsigned long) ~( #if defined(__linux__) CBAUD | #endif CSIZE | CSTOPB | PARENB #if !defined(__QNX__) | CRTSCTS #endif ); tio.c_cflag |= 0x1412 | CS8 | CREAD | CLOCAL; tcsetattr(vhd->filefd, TCSANOW, &tio); u.filefd = (lws_filefd_type)(long long)vhd->filefd; if (!lws_adopt_descriptor_vhost(lws_get_vhost(wsi), LWS_ADOPT_RAW_FILE_DESC, u, "raw-test", NULL)) { lwsl_err("Failed to adopt fifo descriptor\n"); close(vhd->filefd); vhd->filefd = -1; return 1; } break; case LWS_CALLBACK_PROTOCOL_DESTROY: if (vhd && vhd->filefd != -1) close(vhd->filefd); break; /* callbacks related to raw file descriptor */ case LWS_CALLBACK_RAW_ADOPT_FILE: lwsl_notice("LWS_CALLBACK_RAW_ADOPT_FILE\n"); vhd->wsi = wsi; lws_sul_schedule(lws_get_context(wsi), 0, &vhd->sul, sul_cb, 1); break; case LWS_CALLBACK_RAW_RX_FILE: lwsl_notice("LWS_CALLBACK_RAW_RX_FILE\n"); n = (int)read(vhd->filefd, buf, sizeof(buf)); if (n < 0) { lwsl_err("Reading from %s failed\n", filepath); return 1; } lwsl_hexdump_level(LLL_NOTICE, buf, (unsigned int)n); break; case LWS_CALLBACK_RAW_CLOSE_FILE: lwsl_notice("LWS_CALLBACK_RAW_CLOSE_FILE\n"); lws_sul_cancel(&vhd->sul); break; case LWS_CALLBACK_RAW_WRITEABLE_FILE: lwsl_notice("LWS_CALLBACK_RAW_WRITEABLE_FILE\n"); if (lws_write(wsi, (uint8_t *)"hello-this-is-written-every-couple-of-seconds\r\n", 47, LWS_WRITE_RAW) != 47) return -1; break; default: break; } return 0; } static struct lws_protocols protocols[] = { { "raw-test", callback_raw_test, 0, 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; static int interrupted; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal raw serial\n"); if (argc < 2) { lwsl_user("Usage: %s " " eg, /dev/ttyUSB0\n", argv[0]); return 1; } signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = CONTEXT_PORT_NO_LISTEN_SERVER; /* no listen socket for demo */ info.protocols = protocols; lws_strncpy(filepath, argv[1], sizeof(filepath)); context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-vhost/000077500000000000000000000000001476025525100240035ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-vhost/CMakeLists.txt000066400000000000000000000012161476025525100265430ustar00rootroot00000000000000project(lws-minimal-raw-vhost C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-raw-vhost) set(SRCS minimal-raw-vhost.c) set(requirements 1) require_lws_config(LWS_WITH_SERVER 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-vhost/README.md000066400000000000000000000023111476025525100252570ustar00rootroot00000000000000# lws minimal ws server raw vhost This demonstrates setting up a vhost to listen and accept raw sockets. Raw sockets are just sockets... lws does not send anything on them or interpret by itself what it receives on them. So you can implement arbitrary tcp protocols using them. This isn't very useful standalone as shown here for clarity, but you can freely combine a raw socket vhost with other lws server and client features and other vhosts handling http or ws. Becuase raw socket events have their own callback reasons, the handlers can be integrated in a single protocol that also handles http and ws server and client callbacks without conflict. ## build ``` $ cmake . && make ``` ## usage -s means listen using tls ``` $ ./lws-minimal-raw-vhost [2018/03/22 14:49:47:9516] USER: LWS minimal raw vhost [2018/03/22 14:49:47:9673] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off [2018/03/22 14:49:52:3789] USER: LWS_CALLBACK_RAW_ADOPT [2018/03/22 14:49:57:4271] USER: LWS_CALLBACK_RAW_CLOSE ``` ``` $ nc localhost 7681 hello hello ``` Connect one or more sessions to the server using netcat... lines you type into netcat are sent to the server, which echos them to all connected clients. libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-vhost/localhost-100y.cert000066400000000000000000000040721476025525100273440ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-vhost/localhost-100y.key000066400000000000000000000063101476025525100271740ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- libwebsockets-4.3.5/minimal-examples/raw/minimal-raw-vhost/minimal-raw-vhost.c000066400000000000000000000103121476025525100275220ustar00rootroot00000000000000/* * lws-minimal-raw-vhost * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates integrating a raw tcp listener into the lws event loop. * * This demo doesn't have any http or ws support. You can connect to it * using netcat. If you make multiple connections to it, things typed in one * netcat session are broadcast to all netcat connections. * * $ nc localhost 7681 * * You can add more vhosts with things like http or ws support, it's as it is * for clarity. * * The main point is the apis and ways of managing raw sockets are almost * identical to http or ws mode sockets in lws. The callback names for raw * wsi are changed to be specific to RAW mode is all. */ #include #include #include #include #include #include struct raw_pss { struct raw_pss *pss_list; struct lws *wsi; }; /* one of these is created for each vhost our protocol is used with */ struct raw_vhd { struct raw_pss *pss_list; /* linked-list of live pss*/ int len; uint8_t buf[4096]; }; static int callback_raw_test(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct raw_pss *pss = (struct raw_pss *)user; struct raw_vhd *vhd = (struct raw_vhd *)lws_protocol_vh_priv_get( lws_get_vhost(wsi), lws_get_protocol(wsi)); switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct raw_vhd)); break; case LWS_CALLBACK_PROTOCOL_DESTROY: break; /* callbacks related to raw socket descriptor */ case LWS_CALLBACK_RAW_ADOPT: lwsl_user("LWS_CALLBACK_RAW_ADOPT\n"); pss->wsi = wsi; lws_ll_fwd_insert(pss, pss_list, vhd->pss_list); break; case LWS_CALLBACK_RAW_CLOSE: lwsl_user("LWS_CALLBACK_RAW_CLOSE\n"); lws_ll_fwd_remove(struct raw_pss, pss_list, pss, vhd->pss_list); break; case LWS_CALLBACK_RAW_RX: lwsl_user("LWS_CALLBACK_RAW_RX: %d\n", (int)len); vhd->len = (int)len; if (vhd->len > (int)sizeof(vhd->buf)) vhd->len = sizeof(vhd->buf); memcpy(vhd->buf, in, (unsigned int)vhd->len); lws_start_foreach_llp(struct raw_pss **, ppss, vhd->pss_list) { lws_callback_on_writable((*ppss)->wsi); } lws_end_foreach_llp(ppss, pss_list); break; case LWS_CALLBACK_RAW_WRITEABLE: if (lws_write(wsi, vhd->buf, (unsigned int)vhd->len, LWS_WRITE_RAW) != vhd->len) { lwsl_notice("%s: raw write failed\n", __func__); return 1; } break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static struct lws_protocols protocols[] = { { "raw-test", callback_raw_test, sizeof(struct raw_pss), 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; static int interrupted; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal raw vhost | nc localhost 7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.protocols = protocols; info.options = LWS_SERVER_OPTION_ONLY_RAW; /* vhost accepts RAW */ #if defined(LWS_WITH_TLS) if (lws_cmdline_option(argc, argv, "-s")) { info.options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; } #endif context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/secure-streams/000077500000000000000000000000001476025525100225765ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/README.md000066400000000000000000000010761476025525100240610ustar00rootroot00000000000000# Secure Streams Secure Streams is a client API that strictly decouples the policy for connections from the payloads. The user code only deals with the stream type name and payloads, a policy database set at `lws_context` creation time decides all policy about the connection, including the endpoint, tls CA, and even the wire protocol. |name|demonstrates| ---|--- minimal-secure-streams|Minimal secure streams client / proxy example minimal-secure-streams-tx|Proxy used for client-tx test below minimal-secure-streams-client-tx|Secure streams client showing tx and rx libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-alexa/000077500000000000000000000000001476025525100302545ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-alexa/CMakeLists.txt000066400000000000000000000033001476025525100330100ustar00rootroot00000000000000project(lws-minimal-secure-streams-alexa C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-secure-streams-alexa) set(SRCS main.c alexa.c audio.c) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS 1 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY 0 requirements) require_lws_config(LWS_WITH_ALSA 1 requirements) require_lws_config(LWS_WITH_SYS_STATE 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared asound pv_porcupine mpg123 ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets asound pv_porcupine mpg123 ${LIBWEBSOCKETS_DEP_LIBS}) endif() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\ni#if defined(LWS_WITH_SECURE_STREAMS_PROXY_API)\n return 0;\n #else\n fail\n #endif\n return 0;\n}\n" HAS_LWS_WITH_SECURE_STREAMS_PROXY_API) if (HAS_LWS_WITH_SECURE_STREAMS_PROXY_API OR LWS_WITH_SECURE_STREAMS_PROXY_API) add_compile_options(-DLWS_SS_USE_SSPC) add_executable(${SAMP}-client ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP}-client websockets_shared asound pv_porcupine mpg123 ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP}-client websockets_shared) else() target_link_libraries(${SAMP}-client websockets asound pv_porcupine mpg123 ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() endif() libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-alexa/README.md000066400000000000000000000057341476025525100315440ustar00rootroot00000000000000# lws secure streams alexa This demonstrates AVS Alexa usage using secure streams. It connects to AVS, uses your linux computer's microphone to wait for the 'alexa' wakeword, sends the utterance to AVS and plays back the result. ## build There are some special build considerations: 1) Build lws with cmake options `-DLWS_WITH_ALSA=1 -DLWS_WITH_SECURE_STREAMS=1` 2) Install distro build dependency packages: |Dependency|Ubuntu package|Fedora Package| |---|---|---| |libasound|libasound2-dev|alsa-lib-devel| |mpg123|libmpg123-dev|mpg123-devel| 3) Clone Picovoice Porcupine Apache-licensed demo version from here https://github.com/Picovoice/porcupine It provides binary libs for wakeword detection on various platforms. Copy the headers and binary lib to your build context, eg, for native x86_64 ``` $ sudo cp ./include/* /usr/include $ sudo cp ./lib/linux/x86_64/libpv_porcupine.* /usr/lib $ sudo ldconfig ``` Enter the minimal example dir for secure-streams-alexa and make the sample ``` $ cd ./minimal-examples/secure-streams/minimal-secure-streams-alexa $ cmake . $ make ``` ## usage ``` $ ./lws-minimal-secure-streams-alexa [2019/10/16 16:22:01:1097] U: LWS secure streams - Alex voice test [-d] [2019/10/16 16:22:01:1115] N: lws_create_context: creating Secure Streams policy [2019/10/16 16:22:01:1115] N: lwsac_use: alloc 1532 for 1 [2019/10/16 16:22:01:1119] N: lwsac_use: alloc 288 for 168 [2019/10/16 16:22:01:1119] N: lws_ss_policy_set: policy lwsac size: 1.796KiB, pad 11% [2019/10/16 16:22:02:4114] N: lws_ss_client_connect: connecting 0 api.amazon.com /auth/o2/token [2019/10/16 16:22:02:8686] N: auth_api_amazon_com_parser_cb: expires in 3600 [2019/10/16 16:22:02:8686] N: ss_api_amazon_auth_rx: acquired 656-byte api.amazon.com auth token [2019/10/16 16:22:02:8754] N: lws_ss_client_connect: connecting 1 alexa.na.gateway.devices.a2z.com /v20160207/directives [2019/10/16 16:22:02:3182] N: secstream_h2: h2 client entering LONG_POLL [2019/10/16 16:22:02:3183] U: Connected to Alexa... speak "Alexa, ..." [2019/10/16 16:22:06:9380] W: ************* Wakeword [2019/10/16 16:22:06:9380] N: avs_query_start: [2019/10/16 16:22:06:9381] N: lws_ss_client_connect: connecting 1 alexa.na.gateway.devices.a2z.com /v20160207/events [2019/10/16 16:22:06:9381] N: lws_vhost_active_conns: just join h2 directly [2019/10/16 16:22:06:9384] N: metadata done [2019/10/16 16:22:06:1524] N: est: 42 1 [2019/10/16 16:22:06:3723] N: est: 108 1 [2019/10/16 16:22:07:5914] N: est: 352 1 [2019/10/16 16:22:07:8112] N: est: 4284 1 [2019/10/16 16:22:07:0300] N: est: 3369 1 [2019/10/16 16:22:07:2325] N: est: 577 1 [2019/10/16 16:22:08:4519] N: est: 9 1 [2019/10/16 16:22:08:6716] N: est: 3 1 [2019/10/16 16:22:08:6718] N: est: 11 1 [2019/10/16 16:22:08:8915] N: est: 10 1 [2019/10/16 16:22:08:8915] W: callback_audio: ended capture [2019/10/16 16:22:09:0993] N: identified reply... ^C[2019/10/16 16:22:14:3067] U: Disconnected from Alexa [2019/10/16 16:22:14:3123] U: Completed $ ``` libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-alexa/alexa.c000066400000000000000000000353451476025525100315240ustar00rootroot00000000000000/* * lws-minimal-secure-streams-alexa * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include #include #include #include #include #include #include #include "private.h" struct lws_ss_handle *hss_avs_event, *hss_avs_sync; /* this is the type for the long poll event channel */ typedef struct ss_avs_event { struct lws_ss_handle *ss; void *opaque_data; /* ... application specific state ... */ struct lejp_ctx jctx; } ss_avs_event_t; enum { LAMP3STATE_IDLE, LAMP3STATE_SPOOLING, LAMP3STATE_DRAINING, }; /* this is the type for the utterance metadata (and audio rideshares) */ typedef struct ss_avs_metadata { struct lws_ss_handle *ss; void *opaque_data; /* ... application specific state ... */ struct lws_buflist *dribble; /* next mp3 data while draining last */ struct lejp_ctx jctx; size_t pos; size_t mp3_in; mpg123_handle *mh; lws_sorted_usec_list_t sul; uint8_t stash_eom[16]; uint8_t se_head; uint8_t se_tail; char mp3_state; char first_mp3; uint8_t mp3_mime_match; uint8_t seen; uint8_t inside_mp3; } ss_avs_metadata_t; /* * The remote server only seems to give us a budget of 10s to consume the * results, after that it doesn't drop the stream, but doesn't send us anything * further on it. * * This makes it impossible to optimize buffering for incoming mp3 since we * have to go ahead and take it before the 10s is up. */ #define MAX_MP3_IN_BUFFERING_BYTES 32768 /* * Structure of JSON metadata for utterance handling */ static const char *metadata = "{" "\"event\": {" "\"header\": {" "\"namespace\": \"SpeechRecognizer\"," "\"name\": \"Recognize\"," "\"messageId\": \"message-123\"," "\"dialogRequestId\": \"dialog-request-321\"" "}," "\"payload\": {" "\"profile\":" "\"CLOSE_TALK\"," "\"format\":" "\"AUDIO_L16_RATE_16000_CHANNELS_1\"" "}" "}" "}"; /* * avs metadata */ static void use_buffer_250ms(lws_sorted_usec_list_t *sul) { ss_avs_metadata_t *m = lws_container_of(sul, ss_avs_metadata_t, sul); struct lws_context *context = (struct lws_context *)m->opaque_data; int est = lws_ss_get_est_peer_tx_credit(m->ss); lwsl_notice("%s: est txcr %d\n", __func__, est); if (est < MAX_MP3_IN_BUFFERING_BYTES - (MAX_MP3_IN_BUFFERING_BYTES / 4)) { lwsl_notice(" adding %d\n", MAX_MP3_IN_BUFFERING_BYTES / 4); lws_ss_add_peer_tx_credit(m->ss, MAX_MP3_IN_BUFFERING_BYTES / 4); } lws_sul_schedule(context, 0, &m->sul, use_buffer_250ms, 250 * LWS_US_PER_MS); } static const char *mp3_mimetype = "application/octet-stream", *match2 = "\x0d\x0a\x0d\x0a"; static int ss_avs_mp3_open(ss_avs_metadata_t *m) { int r; lwsl_notice("%s\n", __func__); m->first_mp3 = 1; m->mh = mpg123_new(NULL, NULL); if (!m->mh) { lwsl_err("%s: unable to make new mp3\n", __func__); goto bail; } mpg123_format_none(m->mh); r = mpg123_format(m->mh, 16000, MPG123_M_MONO, MPG123_ENC_SIGNED_16); if (r) { lwsl_err("%s: mpg123 format failed %d\n", __func__, r); goto bail1; } r = mpg123_open_feed(m->mh); if (r) { lwsl_err("%s: mpg123 open feed failed %d\n", __func__, r); goto bail1; } return 0; bail1: mpg123_delete(m->mh); m->mh = NULL; bail: return 1; } static lws_ss_state_return_t ss_avs_metadata_rx(void *userobj, const uint8_t *buf, size_t len, int flags); /* * This is called when the mp3 has drained it's input buffer and destroyed * itself. */ static int drain_end_cb(void *v) { ss_avs_metadata_t *m = (ss_avs_metadata_t *)v; struct lws_context *context = (struct lws_context *)m->opaque_data; int tot = 0; lwsl_err("%s\n", __func__); /* * We have drained and destroyed the existing mp3 session. Is there * a new one pending? */ m->first_mp3 = 1; m->mp3_state = LAMP3STATE_IDLE; if (lws_buflist_total_len(&m->dribble)) { /* we started another one */ /* resume tx credit top up */ lws_sul_schedule(context, 0, &m->sul, use_buffer_250ms, 1); if (ss_avs_mp3_open(m)) return 1; m->mp3_state = LAMP3STATE_SPOOLING; /* * Dump what we stashed from draining into the new mp3 */ while (lws_buflist_total_len(&m->dribble)) { size_t s; uint8_t *u, t; s = lws_buflist_next_segment_len(&m->dribble, &u); t = m->stash_eom[m->se_tail]; lwsl_notice("%s: preload %d: %d\n", __func__, (int)s, t); mpg123_feed(m->mh, u, s); lws_buflist_use_segment(&m->dribble, s); if (m->first_mp3) { play_mp3(m->mh, NULL, NULL); m->first_mp3 = 0; } tot += s; m->se_tail = (m->se_tail + 1) % sizeof(m->stash_eom); if (t) { lwsl_notice("%s: preloaded EOM\n", __func__); /* * We stashed the whole of the message, we need * to also do the EOM processing. We will come * back here if there's another message in the * stash. */ m->mp3_state = LAMP3STATE_DRAINING; if (m->mh) play_mp3(NULL, drain_end_cb, m); lws_ss_add_peer_tx_credit(m->ss, tot); #if 0 /* * Put a hold on bringing in any more data */ lws_sul_cancel(&m->sul); #endif /* destroy our copy of the handle */ m->mh = NULL; break; } } lws_ss_add_peer_tx_credit(m->ss, tot); } return 0; } static lws_ss_state_return_t ss_avs_metadata_rx(void *userobj, const uint8_t *buf, size_t len, int flags) { ss_avs_metadata_t *m = (ss_avs_metadata_t *)userobj; struct lws_context *context = (struct lws_context *)m->opaque_data; int n = 0, hit = 0; lwsl_notice("%s: len %d, flags %d (est peer txcr %d)\n", __func__, (int)len, flags, lws_ss_get_est_peer_tx_credit(m->ss)); // lwsl_hexdump_warn(buf, len); if ((flags & LWSSS_FLAG_SOM) && !m->mh && !m->seen) { m->mp3_mime_match = 0; m->seen = 0; m->inside_mp3 = 0; } if (!m->inside_mp3) { /* * Identify the part with the mp3 in, if any */ while (n < (int)len - 24) { if (!m->seen) { if (buf[n] == mp3_mimetype[m->mp3_mime_match]) { m->mp3_mime_match++; if (m->mp3_mime_match == 24) { m->mp3_mime_match = 0; m->seen = 1; n++; continue; } } else m->mp3_mime_match = 0; } else { if (buf[n] == match2[m->mp3_mime_match]) { m->mp3_mime_match++; if (m->mp3_mime_match == 4) { m->seen = 0; m->mp3_mime_match = 0; hit = 1; n++; buf += n; len -= n; lwsl_notice("identified reply...\n"); m->inside_mp3 = 1; break; } } else m->mp3_mime_match = 0; } n++; } if (!hit) { lws_ss_add_peer_tx_credit(m->ss, len); return 0; } } // lwsl_notice("%s: state %d\n", __func__, m->mp3_state); switch (m->mp3_state) { case LAMP3STATE_IDLE: if (hit) { lws_ss_add_peer_tx_credit(m->ss, n); if (ss_avs_mp3_open(m)) goto bail; lws_sul_schedule(context, 0, &m->sul, use_buffer_250ms, 1); m->mp3_state = LAMP3STATE_SPOOLING; break; } lws_ss_add_peer_tx_credit(m->ss, len); if (!m->inside_mp3) break; /* fallthru */ case LAMP3STATE_SPOOLING: if (m->dribble) goto draining; if (len) { /* * We are shoving encoded mp3 into mpg123-allocated heap * buffers... unfortunately mpg123 doesn't seem to * expose where it is in its allocated input so we can * track how much is stashed. Instead while in playback * mode, we assume 64kbps mp3 encoding, ie, 8KB/s, and * run a sul that allows an additional 2KB tx credit * every 250ms, with 4KB initial credit. */ lwsl_notice("%s: SPOOL %d\n", __func__, (int)len); mpg123_feed(m->mh, buf, len); if (m->first_mp3) { lws_sul_schedule(context, 0, &m->sul, use_buffer_250ms, 1); // lws_ss_add_peer_tx_credit(m->ss, // len + (MAX_MP3_IN_BUFFERING_BYTES / 2)); play_mp3(m->mh, NULL, NULL); } //else // lws_ss_add_peer_tx_credit(m->ss, len); m->first_mp3 = 0; } if (flags & LWSSS_FLAG_EOM) { /* * This means one "message" / mime part with mp3 data * has finished coming in. But there may be whole other * parts with other mp3s following, with potentially * different mp3 parameters. So we want to tell this * one to drain and finish and destroy the current mp3 * object before we go on. * * But not knowing the length of the current one, there * will already be outstanding tx credit at the server, * so it's going to spam us with the next part before we * have the new mp3 sink for it. */ lwsl_notice("%s: EOM\n", __func__); m->mp3_mime_match = 0; m->seen = 0; m->mp3_state = LAMP3STATE_DRAINING; /* from input POV, we're no longer inside an mp3 */ m->inside_mp3 = 0; if (m->mh) play_mp3(NULL, drain_end_cb, m); #if 0 /* * Put a hold on bringing in any more data */ lws_sul_cancel(&m->sul); #endif /* destroy our copy of the handle */ m->mh = NULL; } break; case LAMP3STATE_DRAINING: draining: if (buf && len && m->inside_mp3) { lwsl_notice("%s: DRAINING: stashing %d: %d %d %d\n", __func__, (int)len, !!(flags & LWSSS_FLAG_EOM), m->se_head, m->se_tail); lwsl_hexdump_notice(buf, len); if (lws_buflist_append_segment(&m->dribble, buf, len) < 0) goto bail; m->stash_eom[m->se_head] = !!(flags & LWSSS_FLAG_EOM); m->se_head = (m->se_head + 1) % sizeof(m->stash_eom); lwsl_notice("%s: next head %d\n", __func__, m->se_head); lws_ss_add_peer_tx_credit(m->ss, len); } if (flags & LWSSS_FLAG_EOM) { if (!len && m->se_head != m->se_tail) { /* 0-len EOM... retrospectively mark last stash */ lwsl_notice("%s: retro EOM\n", __func__); m->stash_eom[(m->se_head - 1) % sizeof(m->stash_eom)] = 1; } lwsl_notice("%s: Draining EOM\n", __func__); m->inside_mp3 = 0; } /* * Don't provide any additional tx credit... we're just * mopping up the overspill from the previous mp3 credit */ break; } return 0; bail: return -1; } /* * Because this is multipart mime in h2 currently, use a "rideshare" to handle * first the native metadata on this secure stream, then the "rideshare" audio * stream mentioned in the policy. * * Lws takes care of interleaving the multipart mime pieces since the policy * calls for it. */ static lws_ss_state_return_t ss_avs_metadata_tx(void *userobj, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len, int *flags) { ss_avs_metadata_t *m = (ss_avs_metadata_t *)userobj; size_t tot; int n; // lwsl_notice("%s %d\n", __func__, (int)m->pos); if ((long)m->pos < 0) { *len = 0; lwsl_info("%s: skip\n", __func__); return 1; } if (!strcmp(lws_ss_rideshare(m->ss), "avs_audio")) { /* audio rideshare part */ if (!m->pos) *flags |= LWSSS_FLAG_SOM; n = spool_capture(buf, *len); if (n > 0) *len = n; else *len = 0; if (!n) { lwsl_info("%s: trying to skip tx\n", __func__); return 1; } m->pos += *len; if (n < 0) { *flags |= LWSSS_FLAG_EOM; m->pos = (long)-1l; /* ban subsequent until new stream */ } lwsl_notice("%s: tx audio %d\n", __func__, (int)*len); #if 0 { int ff = open("/tmp/z1", O_RDWR | O_CREAT | O_APPEND, 0666); if (ff == -1) lwsl_err("%s: errno %d\n", __func__, errno); write(ff, buf, *len); close(ff); } #endif return 0; } /* metadata part */ tot = strlen(metadata); if (!m->pos) *flags |= LWSSS_FLAG_SOM; if (*len > tot - m->pos) *len = tot - m->pos; memcpy(buf, metadata + m->pos, *len); m->pos += *len; if (m->pos == tot) { lwsl_notice("metadata done\n"); *flags |= LWSSS_FLAG_EOM; m->pos = 0; /* for next time */ } return 0; } static lws_ss_state_return_t ss_avs_metadata_state(void *userobj, void *sh, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { ss_avs_metadata_t *m = (ss_avs_metadata_t *)userobj; struct lws_context *context = (struct lws_context *)m->opaque_data; lwsl_notice("%s: %p: %s, ord 0x%x\n", __func__, m->ss, lws_ss_state_name(state), (unsigned int)ack); switch (state) { case LWSSSCS_CREATING: return lws_ss_client_connect(m->ss); case LWSSSCS_CONNECTING: m->pos = 0; break; case LWSSSCS_CONNECTED: lwsl_info("%s: CONNECTED\n", __func__); return lws_ss_request_tx(m->ss); case LWSSSCS_DISCONNECTED: lws_sul_cancel(&m->sul); //if (m->mh) { play_mp3(NULL, NULL, NULL); m->mh = NULL; //} /* * For this stream encapsulating an alexa exchange, dropping * is the end of its life */ return 1; case LWSSSCS_DESTROYING: lws_buflist_destroy_all_segments(&m->dribble); break; default: break; } return 0; } /* * avs event */ static lws_ss_state_return_t ss_avs_event_rx(void *userobj, const uint8_t *buf, size_t len, int flags) { return 0; } static lws_ss_state_return_t ss_avs_event_tx(void *userobj, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len, int *flags) { return 1; /* don't transmit anything */ } static lws_ss_state_return_t ss_avs_event_state(void *userobj, void *sh, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { lwsl_info("%s: %s, ord 0x%x\n", __func__, lws_ss_state_name(state), (unsigned int)ack); switch (state) { case LWSSSCS_CREATING: mpg123_init(); break; case LWSSSCS_CONNECTING: break; case LWSSSCS_CONNECTED: lwsl_user("Connected to Alexa... speak \"Alexa, ...\"\n"); break; case LWSSSCS_DISCONNECTED: lwsl_user("Disconnected from Alexa\n"); break; case LWSSSCS_DESTROYING: mpg123_exit(); break; default: break; } return 0; } int avs_query_start(struct lws_context *context) { lws_ss_info_t ssi; lwsl_notice("%s:\n", __func__); memset(&ssi, 0, sizeof(ssi)); ssi.handle_offset = offsetof(ss_avs_metadata_t, ss); ssi.opaque_user_data_offset = offsetof(ss_avs_metadata_t, opaque_data); ssi.rx = ss_avs_metadata_rx; ssi.tx = ss_avs_metadata_tx; ssi.state = ss_avs_metadata_state; ssi.user_alloc = sizeof(ss_avs_metadata_t); ssi.streamtype = "avs_metadata"; ssi.manual_initial_tx_credit = 8192; if (lws_ss_create(context, 0, &ssi, context, &hss_avs_sync, NULL, NULL)) { lwsl_err("%s: failed to create avs metadata secstream\n", __func__); return 1; } lwsl_user("%s: created query stream %p\n", __func__, hss_avs_sync); return 0; } int avs_example_start(struct lws_context *context) { lws_ss_info_t ssi; if (hss_avs_event) return 0; lwsl_info("%s: Starting AVS stream\n", __func__); /* AVS wants us to establish the long poll event stream first */ memset(&ssi, 0, sizeof(ssi)); ssi.handle_offset = offsetof(ss_avs_event_t, ss); ssi.opaque_user_data_offset = offsetof(ss_avs_event_t, opaque_data); ssi.rx = ss_avs_event_rx; ssi.tx = ss_avs_event_tx; ssi.state = ss_avs_event_state; ssi.user_alloc = sizeof(ss_avs_event_t); ssi.streamtype = "avs_event"; if (lws_ss_create(context, 0, &ssi, context, &hss_avs_event, NULL, NULL)) { lwsl_err("%s: failed to create avs event secure stream\n", __func__); return 1; } return 0; } libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-alexa/alexa_linux.ppn000066400000000000000000000001201476025525100332750ustar00rootroot00000000000000¢‰ ƃrCõͤā,×ūęž«#€Ų’våź$nZ9°‚4“ڼ”c e}÷É[Nöß)Yųm'|&pÖĘ«jŪ|—į[ „a_žµlibwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-alexa/audio.c000066400000000000000000000242101476025525100315200ustar00rootroot00000000000000/* * alsa audio handling * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include #include #include #include #include #include #include #include #include #include "private.h" extern struct lws_ss_handle *hss_avs_event, *hss_avs_sync; int avs_query_start(struct lws_context *context); enum { MODE_IDLE, MODE_CAPTURING, MODE_PLAYING }; struct raw_vhd { int16_t p[8 * 1024]; /* 500ms at 16kHz 16-bit PCM */ pv_porcupine_object_t *porc; snd_pcm_t *pcm_capture; snd_pcm_t *pcm_playback; snd_pcm_hw_params_t *params; snd_pcm_uframes_t frames; int16_t *porcbuf; mpg123_handle *mh; mp3_done_cb done_cb; void *opaque; int mode; int rate; int porc_spf; int filefd; int rpos; int wpos; int porcpos; int npos; int times; int quietcount; int anycount; int wplay; int rplay; char last_wake_detect; char destroy_mh_on_drain; }; static struct raw_vhd *avhd; /* * called from alexa.c to grab the next chunk of audio capture buffer * for upload */ int spool_capture(uint8_t *buf, size_t len) { int16_t *sam = (int16_t *)buf; size_t s, os; if (avhd->mode != MODE_CAPTURING) return -1; os = s = len / 2; while (s && avhd->wpos != avhd->npos) { *sam++ = avhd->p[avhd->npos]; avhd->npos = (avhd->npos + 1) % LWS_ARRAY_SIZE(avhd->p); s--; } lwsl_info("Copied %d samples (%d %d)\n", (int)(os - s), avhd->wpos, avhd->npos); return (os - s) * 2; } /* * Called from alexa.c to control when the mp3 playback should begin and end */ int play_mp3(mpg123_handle *mh, mp3_done_cb cb, void *opaque) { if (mh) { avhd->mh = mh; avhd->mode = MODE_PLAYING; snd_pcm_prepare(avhd->pcm_playback); return 0; } avhd->destroy_mh_on_drain = 1; avhd->done_cb = cb; avhd->opaque = opaque; return 0; } /* * Helper used to set alsa hwparams on both capture and playback channels */ static int set_hw_params(struct lws_vhost *vh, snd_pcm_t **pcm, int type) { unsigned int rate = pv_sample_rate(); /* it's 16kHz */ snd_pcm_hw_params_t *params; lws_sock_file_fd_type u; struct pollfd pfd; struct lws *wsi1; int n; n = snd_pcm_open(pcm, "default", type, SND_PCM_NONBLOCK); if (n < 0) { lwsl_err("%s: Can't open default for playback: %s\n", __func__, snd_strerror(n)); return -1; } if (snd_pcm_poll_descriptors(*pcm, &pfd, 1) != 1) { lwsl_err("%s: failed to get playback desc\n", __func__); return -1; } u.filefd = (lws_filefd_type)(long long)pfd.fd; wsi1 = lws_adopt_descriptor_vhost(vh, LWS_ADOPT_RAW_FILE_DESC, u, "lws-audio-test", NULL); if (!wsi1) { lwsl_err("%s: Failed to adopt playback desc\n", __func__); goto bail; } if (type == SND_PCM_STREAM_PLAYBACK) lws_rx_flow_control(wsi1, 0); /* no POLLIN */ snd_pcm_hw_params_malloc(¶ms); snd_pcm_hw_params_any(*pcm, params); n = snd_pcm_hw_params_set_access(*pcm, params, SND_PCM_ACCESS_RW_INTERLEAVED); if (n < 0) goto bail1; n = snd_pcm_hw_params_set_format(*pcm, params, SND_PCM_FORMAT_S16_LE); if (n < 0) goto bail1; n = snd_pcm_hw_params_set_channels(*pcm, params, 1); if (n < 0) goto bail1; n = snd_pcm_hw_params_set_rate_near(*pcm, params, &rate, 0); if (n < 0) goto bail1; lwsl_notice("%s: %s rate %d\n", __func__, type == SND_PCM_STREAM_PLAYBACK ? "Playback" : "Capture", rate); n = snd_pcm_hw_params(*pcm, params); snd_pcm_hw_params_free(params); if (n < 0) goto bail; return 0; bail1: snd_pcm_hw_params_free(params); bail: lwsl_err("%s: Set hw params failed: %s\n", __func__, snd_strerror(n)); return -1; } /* * The lws RAW file protocol handler that wraps ALSA. * * The timing is coming from ALSA capture channel... since they are both set to * 16kHz, it's enough just to have the one. */ static int callback_audio(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct raw_vhd *vhd = (struct raw_vhd *)lws_protocol_vh_priv_get( lws_get_vhost(wsi), lws_get_protocol(wsi)); uint16_t rands[50]; int16_t temp[256]; bool det; long avg; int n, s; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: if (avhd) /* just on one vhost */ return 0; avhd = vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct raw_vhd)); /* * Set up the wakeword library */ n = pv_porcupine_init("porcupine_params.pv", "alexa_linux.ppn", 1.0, &vhd->porc); if (n) { lwsl_err("%s: porcupine init fail %d\n", __func__, n); return -1; } vhd->porc_spf = pv_porcupine_frame_length(); vhd->porcbuf = malloc(vhd->porc_spf * 2); lwsl_info("%s: %s porc frame length is %d samples\n", __func__, lws_get_vhost_name(lws_get_vhost(wsi)), vhd->porc_spf); vhd->rate = pv_sample_rate(); /* 16kHz */ /* set up alsa */ if (set_hw_params(lws_get_vhost(wsi), &vhd->pcm_playback, SND_PCM_STREAM_PLAYBACK)) { lwsl_err("%s: Can't open default for playback\n", __func__); return -1; } if (set_hw_params(lws_get_vhost(wsi), &vhd->pcm_capture, SND_PCM_STREAM_CAPTURE)) { lwsl_err("%s: Can't open default for capture\n", __func__); return -1; } snd_config_update_free_global(); break; case LWS_CALLBACK_PROTOCOL_DESTROY: lwsl_info("%s: LWS_CALLBACK_PROTOCOL_DESTROY\n", __func__); if (!vhd) break; if (vhd->porcbuf) { free(vhd->porcbuf); vhd->porcbuf = NULL; } if (vhd->pcm_playback) { snd_pcm_drop(vhd->pcm_playback); snd_pcm_close(vhd->pcm_playback); vhd->pcm_playback = NULL; } if (vhd->pcm_capture) { snd_pcm_drop(vhd->pcm_capture); snd_pcm_close(vhd->pcm_capture); vhd->pcm_capture = NULL; } if (vhd->porc) { pv_porcupine_delete(vhd->porc); vhd->porc = NULL; } /* avoid most of the valgrind mess from alsa */ snd_config_update_free_global(); break; case LWS_CALLBACK_RAW_CLOSE_FILE: lwsl_info("%s: closed\n", __func__); break; case LWS_CALLBACK_RAW_RX_FILE: /* we come here about every 250ms */ /* * Playing back the mp3? */ if (vhd->mode == MODE_PLAYING && vhd->mh) { size_t amt, try; do { try = snd_pcm_avail(vhd->pcm_playback); if (try > LWS_ARRAY_SIZE(vhd->p)) try = LWS_ARRAY_SIZE(vhd->p); n = mpg123_read(vhd->mh, (uint8_t *)vhd->p, try * 2, &amt); lwsl_info("%s: PLAYING: mpg123 read %d, n %d\n", __func__, (int)amt, n); if (n == MPG123_NEW_FORMAT) { snd_pcm_start(vhd->pcm_playback); memset(vhd->p, 0, try); snd_pcm_writei(vhd->pcm_playback, vhd->p, try / 2); snd_pcm_prepare(vhd->pcm_playback); } } while (n == MPG123_NEW_FORMAT); if (amt) { n = snd_pcm_writei(vhd->pcm_playback, vhd->p, amt / 2); if (n < 0) lwsl_notice("%s: snd_pcm_writei: %d %s\n", __func__, n, snd_strerror(n)); if (n == -EPIPE) { lwsl_err("%s: did EPIPE prep\n", __func__); snd_pcm_prepare(vhd->pcm_playback); } } else if (vhd->destroy_mh_on_drain && n != MPG123_NEW_FORMAT) { snd_pcm_drain(vhd->pcm_playback); vhd->destroy_mh_on_drain = 0; lwsl_notice("%s: mp3 destroyed\n", __func__); mpg123_close(vhd->mh); mpg123_delete(vhd->mh); vhd->mh = NULL; vhd->mode = MODE_IDLE; if (vhd->done_cb) vhd->done_cb(vhd->opaque); } } /* * Get the capture data */ n = snd_pcm_readi(vhd->pcm_capture, temp, LWS_ARRAY_SIZE(temp)); s = 0; while (s < n) { vhd->p[(vhd->wpos + s) % LWS_ARRAY_SIZE(vhd->p)] = temp[s]; s++; } if (vhd->mode == MODE_CAPTURING) { /* * We are recording an utterance. * * Estimate the sound density in the frame by picking 50 * samples at random and averaging the sampled * [abs()^2] / 10000 to create a Figure of Merit. * * Speaking on my laptop gets us 1000 - 5000, silence * is typ under 30. The wakeword tells us there was * speech at the start, end the capture when there's * ~750ms (12000 samples) under 125 FOM. */ #define SILENCE_THRESH 125 avg = 0; lws_get_random(lws_get_context(wsi), rands, sizeof(rands)); for (s = 0; s < (int)LWS_ARRAY_SIZE(rands); s++) { long q; q = temp[rands[s] % n]; avg += (q * q); } avg = (avg / (int)LWS_ARRAY_SIZE(rands)) / 10000; lwsl_notice("est audio energy: %ld %d\n", avg, vhd->mode); /* * Only start looking for "silence" after 1.5s, in case * he does a long pause after the wakeword */ if (vhd->anycount < (3 *vhd->rate) / 2 && avg < SILENCE_THRESH) { vhd->quietcount += n; /* then 500ms of "silence" does it for us */ if (vhd->quietcount >= ((vhd->rate * 3) / 4)) { lwsl_warn("%s: ended capture\n", __func__); vhd->mode = MODE_IDLE; vhd->quietcount = 0; } } /* if we're not "silent", reset the count */ if (avg > SILENCE_THRESH * 2) vhd->quietcount = 0; /* * Since we are in capturing mode, we have something * new to send now. * * We must send an extra one at the end so we can finish * the tx. */ lws_ss_request_tx(hss_avs_sync); } /* * Just waiting for a wakeword */ while (vhd->mode == MODE_IDLE) { int m = 0, ppold = vhd->porcpos; s = (vhd->wpos - vhd->porcpos) % LWS_ARRAY_SIZE(vhd->p); if (s < vhd->porc_spf) goto eol; while (m < vhd->porc_spf) { vhd->porcbuf[m++] = avhd->p[vhd->porcpos]; vhd->porcpos = (vhd->porcpos + 1) % LWS_ARRAY_SIZE(vhd->p); } if (pv_porcupine_process(vhd->porc, vhd->porcbuf, &det)) lwsl_err("%s: porc_process failed\n", __func__); if (!det && vhd->last_wake_detect && vhd->mode == MODE_IDLE) { lwsl_warn("************* Wakeword\n"); if (!avs_query_start(lws_get_context(wsi))) { vhd->mode = MODE_CAPTURING; vhd->quietcount = 0; vhd->last_wake_detect = det; vhd->npos = ppold; break; } } vhd->last_wake_detect = det; } eol: vhd->wpos = (vhd->wpos + n) % LWS_ARRAY_SIZE(vhd->p); break; default: break; } return 0; } struct lws_protocols protocol_audio_test = { "lws-audio-test", callback_audio, 0, 0 }; libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-alexa/main.c000066400000000000000000000372031476025525100313510ustar00rootroot00000000000000/* * lws-minimal-secure-streams-alexa * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include #include #include extern int avs_example_start(struct lws_context *context); static int interrupted; static lws_state_notify_link_t nl; #if !defined(LWS_SS_USE_SSPC) /* * If not using the proxy, we need to bring our own policy */ static const char * const default_ss_policy = "{" "\"release\":" "\"01234567\"," "\"product\":" "\"myproduct\"," "\"schema-version\":" "1," "\"retry\": [" /* named backoff / retry strategies */ "{\"default\": {" "\"backoff\": [" "1000," "2000," "3000," "5000," "10000" "]," "\"conceal\":" "5," "\"jitterpc\":" "20," "\"svalidping\":" "60," "\"svalidhup\":" "64" "}}" "]," "\"certs\": [" /* named individual certificates in BASE64 DER */ "{\"digicert_global_root_g2\": \"" /* api.amazon.com 2038-01 */ "MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh" "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3" "d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH" "MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT" "MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j" "b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG" "9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI" "2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx" "1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ" "q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz" "tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ" "vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP" "BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV" "5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY" "1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4" "NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG" "Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91" "8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe" "pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl" "MrY=" "\"}," "{\"digicert_global_ca_g2\": \"" /* api.amazon.com 2028-08 */ "MIIEizCCA3OgAwIBAgIQDI7gyQ1qiRWIBAYe4kH5rzANBgkqhkiG9w0BAQsFADBh" "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3" "d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH" "MjAeFw0xMzA4MDExMjAwMDBaFw0yODA4MDExMjAwMDBaMEQxCzAJBgNVBAYTAlVT" "MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxHjAcBgNVBAMTFURpZ2lDZXJ0IEdsb2Jh" "bCBDQSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANNIfL7zBYZd" "W9UvhU5L4IatFaxhz1uvPmoKR/uadpFgC4przc/cV35gmAvkVNlW7SHMArZagV+X" "au4CLyMnuG3UsOcGAngLH1ypmTb+u6wbBfpXzYEQQGfWMItYNdSWYb7QjHqXnxr5" "IuYUL6nG6AEfq/gmD6yOTSwyOR2Bm40cZbIc22GoiS9g5+vCShjEbyrpEJIJ7RfR" "ACvmfe8EiRROM6GyD5eHn7OgzS+8LOy4g2gxPR/VSpAQGQuBldYpdlH5NnbQtwl6" "OErXb4y/E3w57bqukPyV93t4CTZedJMeJfD/1K2uaGvG/w/VNfFVbkhJ+Pi474j4" "8V4Rd6rfArMCAwEAAaOCAVowggFWMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0P" "AQH/BAQDAgGGMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29j" "c3AuZGlnaWNlcnQuY29tMHsGA1UdHwR0MHIwN6A1oDOGMWh0dHA6Ly9jcmw0LmRp" "Z2ljZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RHMi5jcmwwN6A1oDOGMWh0dHA6" "Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RHMi5jcmwwPQYD" "VR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LmRpZ2lj" "ZXJ0LmNvbS9DUFMwHQYDVR0OBBYEFCRuKy3QapJRUSVpAaqaR6aJ50AgMB8GA1Ud" "IwQYMBaAFE4iVCAYlebjbuYP+vq5Eu0GF485MA0GCSqGSIb3DQEBCwUAA4IBAQAL" "OYSR+ZfrqoGvhOlaOJL84mxZvzbIRacxAxHhBsCsMsdaVSnaT0AC9aHesO3ewPj2" "dZ12uYf+QYB6z13jAMZbAuabeGLJ3LhimnftiQjXS8X9Q9ViIyfEBFltcT8jW+rZ" "8uckJ2/0lYDblizkVIvP6hnZf1WZUXoOLRg9eFhSvGNoVwvdRLNXSmDmyHBwW4co" "atc7TlJFGa8kBpJIERqLrqwYElesA8u49L3KJg6nwd3jM+/AVTANlVlOnAM2BvjA" "jxSZnE0qnsHhfTuvcqdFuhOWKU4Z0BqYBvQ3lBetoxi6PrABDJXWKTUgNX31EGDk" "92hiHuwZ4STyhxGs6QiA" "\"}," "{\"amazon_root_ca_1\": \"" "MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF" "ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6" "b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL" "MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv" "b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj" "ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM" "9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw" "IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6" "VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L" "93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm" "jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC" "AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA" "A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI" "U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs" "N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv" "o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU" "5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy" "rqXRfboQnoZsG4q5WTP468SQvvG5" "\"}," "{\"starfield_services_root_ca\": \"" "MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx" "EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT" "HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs" "ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5" "MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD" "VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy" "ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy" "dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI" "hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p" "OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2" "8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K" "Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe" "hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk" "6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw" "DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q" "AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI" "bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB" "ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z" "qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd" "iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn" "0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN" "sSi6" "\"}," "{\"starfield_class_2_ca\": \"" "MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl" "MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp" "U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw" "NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE" "ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp" "ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3" "DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf" "8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN" "+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0" "X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa" "K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA" "1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G" "A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR" "zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0" "YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD" "bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w" "DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3" "L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D" "eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl" "xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp" "VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY" "WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=" "\"}" "]," "\"trust_stores\": [" /* named cert chains */ "{" /* chain for alexa.na.gateway.devices.a2z.com */ "\"name\": \"avs_via_starfield\"," "\"stack\": [" "\"starfield_class_2_ca\"," "\"starfield_services_root_ca\"" "]" "}," "{" /* chain for api.amazon.com */ "\"name\": \"api_amazon_com\"," "\"stack\": [" "\"digicert_global_ca_g2\"," "\"digicert_global_root_g2\"" "]" "}" "]," "\"auth\": [" /* available auth type bindings */ "{" "\"name\":" "\"lwa\"," "\"streamtype\":" "\"api_amazon_com_lwa\"," "\"blob\":" "0" "}" "]," "\"s\": [" /* the supported stream types */ "{\"api_amazon_com_lwa\": {" "\"endpoint\":" "\"api.amazon.com\"," "\"port\":" "443," "\"protocol\":" "\"h1\"," "\"http_method\":" "\"POST\"," "\"http_url\":" "\"auth/o2/token\"," "\"opportunistic\":" "true," "\"tls\":" "true," "\"h2q_oflow_txcr\":" "true," "\"http_www_form_urlencoded\":" "true," "\"http_no_content_length\":" "true," "\"retry\":" "\"default\"," "\"tls_trust_store\":" "\"api_amazon_com\"" "}}," /* * long poll event listener */ "{\"avs_event\": {" "\"endpoint\":" "\"alexa.na.gateway.devices.a2z.com\"," "\"port\":" "443," "\"protocol\":" "\"h2\"," "\"http_method\":" "\"GET\"," "\"http_url\":" "\"v20160207/directives\"," "\"use_auth\":" "\"lwa\"," "\"h2q_oflow_txcr\":" "true," "\"http_auth_header\":" "\"authorization:\"," "\"http_auth_preamble\":" "\"Bearer \"," "\"http_multipart_ss_in\":" "true," "\"nailed_up\":" "true," "\"long_poll\":" "true," "\"retry\":" "\"default\"," "\"tls\":" "true," "\"tls_trust_store\":" "\"avs_via_starfield\"" "}}," /* * Utterance metadata and audio send and reply processing. * * "Rideshare" and http_multipart_mime means these both go out * in one multipart http transaction. */ "{\"avs_metadata\": {" "\"endpoint\":" "\"alexa.na.gateway.devices.a2z.com\"," "\"port\":" "443," "\"protocol\":" "\"h2\"," "\"http_method\":" "\"POST\"," "\"http_url\":" "\"v20160207/events\"," "\"use_auth\":" "\"lwa\"," "\"opportunistic\":" "true," "\"h2q_oflow_txcr\":" "true," "\"http_auth_header\":" "\"authorization:\"," "\"http_auth_preamble\":" "\"Bearer \"," "\"http_multipart_name\":" "\"metadata\"," "\"http_mime_content_type\":" "\"application/json; charset=UTF-8\"," "\"http_no_content_length\":" "true," "\"http_multipart_ss_in\":" "true," "\"rideshare\":" "\"avs_audio\"," "\"retry\":" "\"default\"," "\"tls\":" "true," "\"tls_trust_store\":" "\"avs_via_starfield\"" "}}," "{\"avs_audio\": {" "\"endpoint\":" "\"alexa.na.gateway.devices.a2z.com\"," "\"port\":" "443," "\"protocol\":" "\"h2\"," "\"http_method\":" "\"POST\"," "\"http_url\":" "\"v20160207/events\"," "\"use_auth\":" "\"lwa\"," "\"tls\":" "true," "\"h2q_oflow_txcr\":" "true," "\"http_auth_header\":" "\"authorization:\"," "\"http_auth_preamble\":" "\"Bearer \"," "\"http_multipart_ss_in\":" "true," "\"http_multipart_name\":" "\"audio\"," "\"http_mime_content_type\":" "\"application/octet-stream\"," "\"http_no_content_length\":" "true," "\"retry\":" "\"default\"," "\"tls_trust_store\":" "\"avs_via_starfield\"" "}}" "]" "}" ; #endif static const char *canned_root_token_payload = "grant_type=refresh_token" "&refresh_token=Atzr|IwEBIJedGXjDqsU_vMxykqOMg" "SHfYe3CPcedueWEMWSDMaDnEmiW8RlR1Kns7Cb4B-TOSnqp7ifVsY4BMY2B8tpHfO39XP" "zfu9HapGjTR458IyHX44FE71pWJkGZ79uVBpljP4sazJuk8XS3Oe_yLnm_DIO6fU1nU3Y" "0flYmsOiOAQE_gRk_pdlmEtHnpMA-9rLw3mkY5L89Ty9kUygBsiFaYatouROhbsTn8-jW" "k1zZLUDpT6ICtBXSnrCIg0pUbZevPFhTwdXd6eX-u4rq0W-XaDvPWFO7au-iPb4Zk5eZE" "iX6sissYrtNmuEXc2uHu7MnQO1hHCaTdIO2CANVumf-PHSD8xseamyh04sLV5JgFzY45S" "KvKMajiUZuLkMokOx86rjC2Hdkx5DO7G-dbG1ufBDG-N79pFMSs7Ck5pc283IdLoJkCQc" "AGvTX8o8I29QqkcGou-9TKhOJmpX8As94T61ok0UqqEKPJ7RhfQHHYdCtsdwxgvfVr9qI" "xL_hDCcTho8opCVX-6QhJHl6SQFlTw13" "&client_id=" "amzn1.application-oa2-client.4823334c434b4190a2b5a42c07938a2d"; /* * Register the root token, and make the sticky AVS connection at the * appropriate times during system startup */ static int app_system_state_nf(lws_state_manager_t *mgr, lws_state_notify_link_t *link, int current, int target) { struct lws_context *context = lws_system_context_from_system_mgr(mgr); lws_system_blob_t *ab = lws_system_get_blob(context, LWS_SYSBLOB_TYPE_AUTH, 1 /* AUTH_IDX_ROOT */); size_t size; /* * For the things we care about, let's notice if we are trying to get * past them when we haven't solved them yet, and make the system * state wait while we trigger the dependent action. */ switch (target) { case LWS_SYSTATE_REGISTERED: size = lws_system_blob_get_size(ab); if (size) break; /* let's register our canned root token so auth can use it */ lws_system_blob_direct_set(ab, (const uint8_t *)canned_root_token_payload, strlen(canned_root_token_payload)); break; case LWS_SYSTATE_OPERATIONAL: if (current == target) avs_example_start(context); break; case LWS_SYSTATE_POLICY_INVALID: /* * This is a NOP since we used direct set... but in a real * system this could easily change to be done on the heap, then * this would be important */ lws_system_blob_destroy(lws_system_get_blob(context, LWS_SYSBLOB_TYPE_AUTH, 1 /* AUTH_IDX_ROOT */)); break; } return 0; } static void sigint_handler(int sig) { interrupted = 1; } static lws_state_notify_link_t * const app_notifier_list[] = { &nl, NULL }; extern struct lws_protocols protocol_audio_test; static const struct lws_protocols *protocols[] = { &protocol_audio_test, #if defined(LWS_SS_USE_SSPC) lws_sspc_protocols, #endif NULL }; int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; int n = 0; signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ lws_cmdline_option_handle_builtin(argc, argv, &info); lwsl_user("LWS secure streams - Alexa voice test [-d]\n"); info.fd_limit_per_thread = 1 + 6 + 1; #if !defined(LWS_SS_USE_SSPC) info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.pss_policies_json = default_ss_policy; #else { const char *p; /* connect to ssproxy via UDS by default, else via * tcp connection to this port */ if ((p = lws_cmdline_option(argc, argv, "-p"))) info.ss_proxy_port = atoi(p); /* UDS "proxy.ss.lws" in abstract namespace, else this socket * path; when -p given this can specify the network interface * to bind to */ if ((p = lws_cmdline_option(argc, argv, "-i"))) info.ss_proxy_bind = p; /* if -p given, -a specifies the proxy address to connect to */ if ((p = lws_cmdline_option(argc, argv, "-a"))) info.ss_proxy_address = p; } #endif info.port = CONTEXT_PORT_NO_LISTEN; info.pprotocols = protocols; /* integrate us with lws system state management when context created */ nl.name = "app"; nl.notify_cb = app_system_state_nf; info.register_notifier_list = app_notifier_list; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } /* create an explicit vhost so the sound protocol is initialized */ info.vhost_name = "asound"; if (!lws_create_vhost(context, &info)) { lwsl_err("lws init failed\n"); goto bail; } /* the event loop */ while (n >= 0 && !interrupted) n = lws_service(context, 0); bail: lws_context_destroy(context); lwsl_user("Completed\n"); return 0; } libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-alexa/porcupine_params.pv000066400000000000000000052276331476025525100342140ustar00rootroot00000000000000porcupine1.6.0TPXG€0+‘÷Ž€$Ä& üč9źĮśļ€  W󑍙€)×%%Ņ؁š4PO€ ļóAE®€©b£"›0 ņԁߘęäØņ€³š14C7³P/€7&<-ģ‡Ō6€ō4€(ł0ė«C 0'öŅ+ ×9©-ė =.Ó GŽõ""€ 72 €ęéM®0¶(;†€T€ģÄö!«Sļ÷+5#ĀŅLńņŲaŲīü÷RĒ„’÷ś Žå¢ÕJėšŃį3ņömšē÷ ķöōÆžJ’5ę€Ōš#köå9 pė“&ŚŌ“žŅ=Ó&öŁĢśé&=ŻEóėōŁŠĖ Ż§ģ< æ ró>&ńż +*Śēˆ8¦j” ć'%Żņ;ł Åįņ ) :÷÷/=’ģöHū4Hśä ²#\)śŅDł ć%Ē"ĪŃŪŠņčöńä½ąDöšŠÖŽ?ŽŌŃ_Ś’ŠŲę4ŽįóßšķŚ÷!Ąkó·ącÜÆž.4,Ŗg$ŃEäĒĻé:ūĢ.įųģŠ ĪSłķ hŪ5³7śé÷ Ź dł~·>RC% ķž Į:!šFŠģāÖĪ ?Ūś)Õ™ ē4żāźńīčģāĒ6ģć0ĮĶŠßß%ÜīżŃĪ@ł1 Ń-÷®ų$Ńü Įżóóōżōõķōžė•µœĘ öł ų÷ņõżõ÷õųżū'%3 Wļ–*ķńóņó żżņ’ģń’ā" ü’ īśóįē’ż ūųłūżųśų’ń÷"žōäż’ ’šķ ųł’žõłż’ ' EGGA;CJBX2BB/ óü ęöķóģóķōö÷ććÜŅÕŌĻÆÖ½ÅŲÓĘ挳ļ üąņ÷äöŻc~)˜€€Éüūš ū’ ż÷ ųłåółś’’mlf"ŁŲĖļńģšģüöõ’÷åņłģ’ ÷ģ’’üžņ÷óżü&’ö&WvEģø“Œ€üūķżņż÷ōüł ųż÷ó÷ōöß=ļń.J(ż÷  ģ’’ū żņ õł ’ éöšåóģņüųūż  ÷żõ śłžżžėś ų żįŌå& ę1 ō÷’ā ž ņśłä’ ś ęźżū÷ńżīŲžö$+$äżš ńų÷÷ śōüś’żųżūł ćųļśāü ŻPpHĄ¶±ąńūüōńüńūžńńūłüūīęź›ąW]ø‡Äó  ’ż’ž  üž üü÷łńūóńž÷ ÷÷žńü ž÷łłńüńūžżłüž  ’ ž ńõüżüü’ ēź ņś÷żū  ūń ķüūśųółž ó$Le#łāŌŽääŽéēįéńö ä’żłņīŻóąöķēóĻłóūėé ÷łö÷# . čō %ųŻöųž ū ć ģü ųóü÷ ’ ūü żņšó’’¼ŽyīōŃ śźņ  ōöžųźōśńł ūą~õĄŽ0»ļ ųóęģ ÷žöó   åžįōŅl>Ć®öśł õ żńäīī ż ńļīüĢZ=€ÉóäüŻžūōłś żśļ :  öP8EwƜü϶ż īžķłßćŚéäŪāśōńš źęŅż_ͳāóĄÜāź÷' ) ó  ß)žžå÷ÜŻÓßüīł$ųķģ*üīźśņ üžņ öą+&’žįųļšśö Ł ’ėéęņ%'ž īü)ćż üžļņ õ ōł   żźóūóęłįźėüõūźüųūńóö÷ųž   ! ū ģķ åįWļ>ēÅēōööųö šń÷ó’ńż÷ūū ōźųōßėö-%Z)Æō  #$   ųųņū÷śüņōśųņĶŚĻąäīōųūž ü žžüöīģķśžś5+-> čśüłśüłü  ųż śų śśł’ń’ģž õłüżü’ųūžžņžž ūžū łžż÷ ’śńźżō  õżüż īéļj®¹Yļūōėžöšöžżóśž’õžü&!-1!Š Ł üóśž Žōņ  ōžõ źŪ©w“Ļā’Č*ąö ņłśžųōüšėüēöõä ĢŲ€IXˆJļüžõū ’÷ żüóųśüūžż’ģśķ čżćāŚś öĀš2`WžėźÜū%’1šó’ šūü÷ žć ėēģ&š-"ńö’īł ķēž ńūūł   ęņźēõä÷łŁż1@7C +€ÕŃņ÷'ūśžžüåęśśļŻ ółāņÕ Äé.,÷ąźųU€Cż÷ä?é. 3žžņåĢåļņ’ óū ūōŪļóŽāčš"÷Üąłčįņī’÷ų÷ų žł’ üüł ūš÷ņżōū÷ųž÷ūū’öžAX ųžśųłü÷ śüśž ž  üķüéŽÕé’ūžś÷óüšłåéāäīżų’ öųłś łńłńī žś’ł ÷žūłń%āźćć’ŻŠąļųūŽģźõś ģéõßå ėģłŽźāūļõõ ’+ )($+’óöéūüčŚńń’  łėó)ģ  ł ųžöłųųśķżōüśóóōģ÷Ü÷łņżųżō ’ ž ’’ž   śšŁēÜĻžAIõĮ Ę÷Śų ÷żūņ śžüžūļ łōčņõöŁžūwˆ‹Ó1* óńüńōķž %>šü"# ü. ś īĘā(!+& ÷ćüņĶĪŻ čųåÖ÷öŌļęņš×ņēśžųū üł‘ä8Ģīžłū’ öžū’õś  żłéÖ cšūõžųśüżī!čŠ9 ńśģūõ’ł÷ųūńņ óś ķÓĘŻ7z1üģõō ž  ģś’õõņ ’śö ł’łųżż ł’žųųōž÷ ļōśų ’ü žüžśņż łż  ūņš¼óēųž ’ū’’’ ł žłīž’ ū ś ń"ņ’ śżśłž ’ż÷öżžó ūžü’ųü ł ' žōś łū ńå#ōüūļģ%üóź’õžšęļó÷ö ÷äčźéöśŻłõēšņõ" ē ģ ōśłńü ņņžõ’ żĘ (åńżųłėīü żõł ų ż üöłśłņ÷ ü ó÷ņöüśņöó÷żūóõųų’å  ś’ū÷óõšüēż ķüżéöż ųšų ąŻāóķ÷üńīż7õ"&õ:ūöŽŚšźõڼęÜ“”ś*+ó%īéįł4ęźņرŚ+V9# õ4+ ųö! ģīūėćßīģž ķķģäō’ļųö õóčüüł  üā÷ėņłžųóōėųõ ! (5/87&2’ś ’’žüóżųöõńõū9Ó­Ķõ'śžżżõłžżü’óöņłł ŻźaQ»ų) ä’üü÷÷ł õ žżż śūčüü ž’ģüž¾łėģõ'śåųńšū %! ģéåå&ö6"÷z7½õŽē’ķāćßĘŁé ’éäūŽö’%śéŁ2"Å. Įė óę÷’ķńžö÷ūöą ž( ö ųŻćö YéõJą÷ ņš  é÷żŻģžüģ éłģīž,śēüļääåūņż ÷ļūńį ū ööšš.  ółśź’ńųų ļ3ó#óöłūķž ś6ėłśżŅā"õ÷Ļžćį łŽ’ž÷öūöų ’žÉĀä,,ģžųõė"Ūųōéņå"ūčųüéļļ’ųöŠįšó’ŻßŻę ļńųįżūūķž’žōžčūõ ’ "-( üńųżūö|uļē$@čģżžūģž ’öōł÷’ óńīžśżśżšņ<ߏŚåņ ’ūųśõüžžü ÷ūśü’ģ  ś ųüõ÷öé..ųõ % + ÷’īņö÷ėŽų ńńüüč Ļ-Üß,č!3ļ÷ß' ńżśžżśļżń ą2žää8ōé āčß ų ū ’ž Ķ č1’ŽÓŲń!ūł ųśõ ųöųžöłöū =@ä:b’ąßµÜĢūöć’üõóõöžżł0ś <+ćĮĪÓįŪčģėīś āßäšÜÕĶŠō÷"ūŻłģśéū, #!üų ų%"2-/9& ģõņ×éŚčū Ūū ßšķ"ōüīę’ߌō*#ļóčėųüō ūßäéšö.'łųļžųž  šģößżųę%čōņĖŃįÜįžķńéž ’ ļźū’ļółéŲäEUŹļ "żüöż łōśīčüś ū żź’½~A‚'Öżčśśūņóńõüēūņöźö’żōõńōęŹ:ŌĻvaĪןå2ßāų ÷ żćķżėž öōłłū÷ų÷" öö’Oz~'üÓµ¦ø¼ģūłīéčöąüåū÷ óžā ßéÖåÕŻÓéįöĶŌåū <6Glłž   ’ųśóüžōśļōśņĢ·łļöü ķ ūž  śłż ūōśęé ūüōę¤,§iż?÷ łö÷ōÖįߝšéśŚóöļężżńģżžž ūżīģå āĻų!/V/- ’÷üüž.  ėģõģźüłōėģéü’ųž ķśīćóē莹ćŲŚŪŪįčÕūźž’ūžž   ž ūķó$ąü     ņüžõūūüķžžüö ’śö’õ śōųżłųżņłūłżūü ūžļų’śģłż’žšž’’üł¶ćż’ū ū’ń’ņŽż% žś÷ŠŠš+łņ ę żłšõ óõéū!ü ų÷ ś żī š’ł’÷2³Æ!łžžėłöžūžś żöś÷łöųóżų €}Ā<Ļģż łžž÷ų÷ūų ų5~å*ś$’ė+ōßķśģįóņ÷žńłż ü÷’ŪB•ōē’ēõóé#ó(ć!ļēĢÓķ äßų’ žłļ’ōłŚ Ūīäśń ’ ’(’$ō żźõöõźźä!!ų0- źüūėßųõģÓŅą$óėš÷% ÷żōžåōÜņ õļõźš’ü ü! õō#';K$’ėėµĖ××īż½Žųäõ Ū.żńéŻūųūźžō ÷ īųóū õ’žņķöéš’ ’  ’ż ųūżü óė’ ÷ž ū łöž÷! ļõč’,ėū ʹÜ÷čŅį£ŽÜēÉć( žłåĻė¦Õģž õżõõööńęź šźĶ E%T<"(=C#ó÷ö üżķšļž©LŠćļöų żśņśżż÷žžūżõś  ł’żę Ż7źęę ų÷ óżü ÷žźģż’óžü÷īš ćīżę żõ žųūļć ųżüīņłįęäü )ķżżōżü ‰=ĪŌńą ņ žü÷õ÷ėļ ūļüóżūżüZ„Lōüł’’ē ō ’ś ü ńōēżķūń"ż!'ž/Ö»Žńī/  īė łé  ł õŁęźŽ”ń^ųÜģīõńōėūńéõų’’śüżūöąæą) ż ’ųūž śśżž  ś"(߯6ģęųģ ģūśóž÷šōēńüųņöõõ öż 94ōŻčųń×öżé ż’õ  óū ūōšńū÷Õķ žžį% śż. ż­ø)%ņ÷łłüł īł Žéžūńõļš éõĢó:ĮÜóč ńóų!żéśŻŪr^Ēž(ß óž’śńłłžżž ōš’īłÄQہäĘļśśļśų õ ś’ēū ’ üż üś  żžżõü’ų łūśöžō÷üłśž ż śū ņżśż ÷  ’ć6 ž  ņ č éŪ )  ōśŚūś  žīöõéžčųīļõÕĖēōųņļģŪōłéć+6€ €kĢųė ūż’žų÷üöłžōų÷üśųžłēŌjĘTńłśū ’ś’ł’öūżń÷łżöķķļ ōųżļłųłńūžų’ū ’žżžč ś ż ūū÷óū ’łü ųļģńŅųņöŻŪņż’ųóŠŪäöõó$,* ųžīųłüīĻĻÜÅ/%!, & *õó šł÷öįčé õīžžšķ’ų ó !ś§Ōė F/!åō"ń÷ģ ’žõ ėņüēōöķ å Ø­Łęęžżł ķē$ł,õ,ä ßėßŪøŹ åŃĪÕĒĻŽćÜŁÕæżšķżåźõśś  $4śė"2 1+-)ś5łśųčüŪÖļ õ÷ųō īō’ž ķīó <ĶņģŽ÷$ü ßųõŽō õõś’āõļõūļōųūęé ņļōē$2 ) ÷ś%žöš÷ßćĆŪł÷ ķī÷ūś#9īģķķłó įż īśå1’ łŻō śņśćļõ’ Åżžöżūūöśž÷’’÷ļų’õü÷ēé’5'žó   śųųōųų÷óéÓŽÜł%0KDTVĜŌžņ ņ®4žóöł÷ž÷ņźõ ņłö ćņüįąĀ]žåśöį’ž ńš÷ųķžöūżōżųłąŻūžō$ė ļ÷ć ÷ēćųõėšėž '#łõįų  ’śÓåųöųįņćņ ųųżīåÜ’ń ļÕń’ųöśžģłļ  ęžįöļńįčāü !ģū-+ -żżėł ’āöéōüņ&žžžż ž  ž’ūžśó÷ļōł÷ęųńśśųüż ó’÷ń  ’ž&óśüžõž ’ņś# (  åŃŻėžßųõģū žīļ īčż÷ ķõżō ūßńłöõń õčńōńóžųśśęóĒ*>?%ćĪ?MŻšŚäłļė÷ž’ üó ūģžģłńō ŚŅźēć $ źōż1ó÷ųżüżüō’÷ū’śżū÷ü ūżźķļóėüßąžšūóžųņ’ š ÷ōīüžė’šł ū ż ÷ 0 0D|Zź ’ńļéšüłö’īļ ’ņųšśęćŅņģūõżž’ ū÷ üžūūåõś ü÷ļūó& æØÅö135ē*ųÓōūĆü"$ł%%éķųßčļōūɵ†ÅEķ@āĢö)ņėĒÉß0ōā÷ż Żżšēųö’ō’ī žüūūŻG"ė?nžŃāöĪšž čķÓįćūžł÷’ū÷ūŪØ~€·ż ’ś ü’ųųü  żśū ¼Š0 žģö üüūüś ó  öüßÉ$Cī°Ņšü’ čłõ ūń ģ’ģžų.~%°Ėčė÷ēńéżłüłēłņģłöšś ü’  ’  ßēģööéųłĢżķüųöš ųóļ’õüųķąźóāūžłūčū 02>-ų  ÷ńéÕéūč õŌé āńż "ī’źķžōū ńį2óŻńż&ūšųżņ žėéõųōö  ōüžš žńóö ł’īŚŅīį2 T÷īśÜŲžņ  łōźķ ’üī ŻķÖÓYŽó> &ōž ńśüšōż’&ænP½«+&Õ÷ėūōņ ōėżöļ  śžńõü ’4Õšł üīü8ņŲ ūķ0üĖšö’÷  öų łńžö ń’’łżśéųüé£Łü"ļōģšüū÷ōģżšųż ż žūūśž ’śņėž žüü ’õū÷ś ž’üüžüśų’ņöū’üż  2,a­­üž ū õżśü÷ šūöżżžōįžżģłļśūóÉluśśä’Łü $žóņųü łśéśłżü II1ā‚A¼ (žķ ō å’öõōžūż ÷ūģäĪ |[Ŗõźōō"ļł üūūõ÷ņłż ’öģóöūģ$õ żäūśü ’ źū’ē÷ÓŅėŻ!  :'ėųņ÷ įŽųėųßņ śūžßś%%’<ūżĒé¾T@žč05,(łüż÷÷ņ©ČÄ»ĢńāīĆ­äõÖÕØ¾ęŒ’óŚńō ķś÷žå÷ņļż Ń29+"!,0Q@'ZŪ, ż’łõ=e”µēźųżüłüŻūõ  żśłūżmDäężńņ ōōļōäłż āźłģ÷żö’ųžżģżųüö’’ö ’÷ żžōž ž  ÷õ ÷ īü  łō śōķĘåļ !*  -$+ ! ųēöļöåōģēūüēļßłéņ ųõž÷#7ųń šźēńņūęŪėåšŪŽēöśżō²ĪĒńōö÷ ü’õ’ūżņ’śśų żģõ#÷ėóžų’ų śöü ņ’’ż÷éė.a~¾tüłžüńśž ó÷ ÷ņčėöś÷īšžžÜ "ŗ€Ļ2źŚöéżī śūžų÷õõ ’ż÷ųū&% & ž’  ś’ūżųśķüņ’÷óü  łģķōżżūżśņöö’żöś ōż ö’ļńńńśńüņ÷’ ÷óźéķĮ!błŌ³Čōń1 ūäū ńłū÷čźżļ ö óĀÅd‹¾õ'ūö ūōü ēŲĶłōž  źūüģü  ż ššīõķī Ć<@ķ. ńé’ē õōé łł# "ķ ū žśöõńłśīńžżžņų ėžōśüč ž+'8 óüüłś’÷żõżł üśśś é ćÖ üļįōšćłéłžč3 (#2.©¦¢Ż ā ž9Žņōž ö’ųŁ’÷ų ߎ"ŃĒß0%½’,-’ ū’’ ū śüś’łż ž üū žüś ž÷żō’żž ’ öų’’ ųžūūżūß@žŅķŃųż ų÷ žó’ņśż’ģ ūīū üųš Ė K€ś>ėš õų łūżüōóõ öüż śł *.&ņ*ż ó²ŌåėŻģńōŪöźķ0ū?9kUj]k/äü*äėłńüóé' ü # ÜåŠś ٌ†‘‚€ ö ü ųņłćżģ÷ Püā öųųžž ļųłļųź é8( śÕŚó īż óóģõ’č;ž.Q ųłīäōżųöńīŽöõ ūņōöłöļ’  ÷ōūī/7’ ńāģņõ óüż ’śųōžż łōś’ų÷ū’’’ų÷łų’ ūīżśś’ųžļāńžü śó’śżłś ūöžż’żń  łóńł’ųłćõśļüżōźōśõßģņ ’šē”čöś ńžśóõ łžū ź ’! õé=ą1 1ü÷ėüCæöō ōłžöūõ÷ó ńś’ ’ü’üŁcłń łśņ żū’ ūļžżū üųūųėęĄAłņžļōūśüśųū üł ūņ üü÷čŌ-)ŅŽ÷ōū čłéų żõö śö  3ń‘’6č’ė÷ūņ’ ūūžņ’öüž üńżõłķó ’ąü  õü’ö õ öų żżņ÷ ÷ ēč ‘6Gę®’’ óöōū ęóķś ŠēŽÕ(ųŪłõööųńéśēž#÷÷ģüżųöŪÖēžł÷ źūłś ü  čżõźŌÖ0ķčćņķń ’ ßėĮL ¶jø÷ė ō ųžžšöż üżū’łśžłśöčEī~·2łöłś öśūžóśū żś éóņėŅäé üśõåłłÜßśń ßčóīó#!žü’’ü’ąóōżłņķżś ł ÷ # žüžłóöõś žųūö÷ ōöü ż śóšō&śšņģŪłóż óļÅžļśž ūüłżśų ’ļōēÉ ē!$ö šęž%õ2# äćäõūēżāŌ÷ū öōłūūóåšūńł ’üó’ąßņ ļ ’%ļūīłõųżżżžśņõżüś įÉ h€€ķ¾õūųžžö’’ū ńčźöų ūž’  óćčŌLaģ).ķĆóōśūżżółžżüüżüėźßįćį÷Ī+),*-.-Ö½Üēįöõž’żü ÷ üżūšėėčēā÷üåżüģžó÷üķęŽīÉ橸ֺū¼ćŌ¢÷óĆęņüóžęń óćõė ķżļš/]>_P`H,vGį%’ń#)/ē?/ļö ė’öõī żēü’ł ńżéžöėöķū  šōłū$ č÷ ł ö÷éģüņūū ö?±Kź(õ÷öōžųģūž ūšž’žüöõ ū Ņ`„ó'ąõžł’’żńżäģ ūü śśö’  īóʀRįį1ęż ūžüūõłńń’łś ž żōįŗ§śoŗķō õäü ėū’× ńļęΏز”»Žļłś čäśķ<÷ūżżįY1öęńüŚüżŽ’ēüż’ńźŲčüłń / ųčéĶ8 ’×ć÷ļÉŌ×Ēßīöēéšžķęčī: 9+&.ÖŻšč">ł÷/ņó łóöżš¶^=€Iłž šūųõņ÷üū łłśśžųų’üś’ž×1vĪ :Ō ūöüž’ō żżūłųžōū’ųō ’ ļżéū ÷ß#Öė’īųūķéś’źšżżéõüü śł  üńūÖž÷   ž÷ų!õ ł() ś üłŚå’ńķŲņų0ćÅĪŌįżśöŚ ūģ"ōīēńæå6??:½¢Ę<ɶ-·×üžöż’’ żüųķś c€ źļżžüżéöūüüž óčźįė ’śłüü’ßü żłś’ž īö÷łģäķķņłžE’ćļśå()+öź’ź ū’ śūśńėėüęöšĪ½ķź7`Pųō śēŪļłöüųü  ūŽźģą¹ĪAķ!ęõ" īņųņļęöšöūž*&’ļÆŹ©‡÷<Į=o$÷ ś ’łō ššżčÖ÷åŲų’ūžŻŲĪįčäņóąšłźśęÖõ&*;ųģįļļõŠéöžŲū ųųńūūģŁż41!&K,ś/+)! F-&10>/( ž ł%C)ü6 &+ ōżūšśõ ś÷öšżć CśģĄ«’÷÷ęõõśóóüäūś łūó’ļ3ų õOÆ„Ž%&ół  ź’ žż’÷0²õväŪ*±>ōīłžü üöōķ õžī’ūū’öž µ$²'é’łš’ž’õžūń ō ÷ųś ü’ū ö öūółżüūņż ćāš Żļ×휭ņ÷ żņķśõżģģśóü  ō7IJąDQŒ2öżūūśūū÷ų žöłųłžłśüłūśłśī%Ķž2žū ’žū’ üżü÷śł ūłžśöö öščņōćļśšņķģń  ųģöšŁćžń÷šźżšŽģõ’ōņżųž  üśūöóļżöż’÷ņķõēłüśöłėēłļėéėūėō ķ÷ńļłū’ųśū ęö õśņāēüšżńõųųśūłųņ’ ś’šó ×]_­¶hĆčżžš÷  żššö!ī„Ģ+ćßéįūć:0žQ');öīP/':’ õ óōīõóūŽėŻĘŲÜ( ›é~€ŌėšÄŲŽŲ źņė’ū ü’’żżžųŃųż’ ž ų〠-“#õ śłü÷ķł’ž  ’óśņ ŌLļ žóų üņņņūūż  ļ÷ū,śīšėńūõžóś Üóčóåł śõżõ Óßļųžš ś öłųųźü   ųžžł öÜ ģ(0 Šė ņų÷’źžõ’õųėļō÷óśöųż óčę ļüųė’ż  ž’ųūļų÷čśėśū÷ł ’ ž ś ž ųöżś÷ż ū  żżüüžśõöłż üżēt†qüōöō šśżžöž’ž’žžń’÷óóų’žÄ*„šDÜ5äųö’ūśś  śüėü÷š ü¹˜B,ńŹó ž ńöšųņ"ūśųõ ńļŃį*-ģķöÜčō üōü ėśōņę÷ūõī śų  ’÷öńųźĄˆsmń,Ģ÷ü śśżų’üž  łųķż öæEėŪōśįļėžģ ö  %( 0.ģ"·üŻāéŲķč ūļ Ūō   +d¹€„Ü­ėū ł ÷ō’ųķāśģņ!ܝR+ģćąÜļńōūņüńóčņüķłöžóśtźčŲ׌ł čśńžłė’ņõóüśōż żöéö  üõšūū’öžūż õ÷üīōõūżśīōłń’ü’ ’  + ö)6öŻąįŁŠģėŠĆŅķ  ,łū ÷łēŲśłŽėŽīŅ "žA>)ļéźŠŽśņļäęńż ņśõ  ōėįōīżģüņö ÷ęéöņö$!<6ś¤ÅĒśśłö×óūśļāüś żćėéßčśčŪčŠö!01"Jō",:Ņł'Ķ ēšé÷ųę ā ķ ņłśčļłųņü×Ć‚pÓņ śķõē ž č÷ūŲ’ łčėüķäāįāŚßÖÜäéćõżžļī ž ż ēåÖø¹°*ó( ’’ ’õ ! ųū * ņņīōł% üōł łÜĆĪŲŲßÜėūńäõźEāł÷čŪēōīļ ģčųžö÷åūą2'> %%śś(G‚żōž’)  ū~€€L$Ōżččõīłüööźųųūžü÷žśż śŠæŚ īü ōśž ’ōż ×Āń üńųüó ž’śęöčåĶō[Nż×÷’ ųł õ  śņłšöļśÉéÉ÷B>'  žōžų  õōżų’žžżż öę =é²ÖĄśś  žńßü õü ļ’ūųņ’÷ļüō öūóüžöüöū üüš öōč÷ łü ņ!ņ’’ōü’ żśżīõ ž  ’ ųž õųėżōųōö óēŌĶē9>ūųćėńļöśōõüüžńąšü> ±ē ÷ńó ÷łüōń"ę žļłžųųūüī×įżó ū÷žłń öųõ ųö žžūķ śė öėāūžõēŽŹÓ·Ķ $ę’ūõž÷÷śļżüžń’’÷’ī’1dp|5ųóÜūõ  ū÷ģ÷żųżžō ’ōųüžż"@T¶¶ÄāŹĒēŪļīžūč5ł×čūū!/ż'ōėõ&ęČ÷+[1ś%ż åńā žļėąŚžńŻõ åčéū żļūüžū ’ń’łłļųķõńöńļų’% "’ ö  õ’öńųļēņšĒŠžöĒG-öó’ģžķņö ö(ąń śš łžå õ .ņū ü’Üö óń ģ÷ ś ōź ö÷’ ēī÷ż żųųżó÷ö’÷ńO¬ż%Śā$ā #4ū ’ń łų’õīń<Ē+ ÕļFąņ÷āķū ģółļļėł  ūłü’ žū üžöüū śū ż’ś’ż’žųż žżžśųśóģžõ’’ łõśśŽīąÖ ’ńęäÜŽ *ėēŽōśüłłūżüóžööü÷  ', ŌŲēł ’ ųūõ’ś0ńōģōīā ųšņÜ  łżžķ ŽĢŪėń !ź üóśōÜ!ÜĢ+ äŲäŌ½üł ’šģöüżģńFWȧŁčüöęśģė ś÷ųžś’÷ ēĻ”Óū"ė.-õ’ń÷÷ūśżū# (@,;>& &  śų÷žĘŽŅæč… įśÉżEāūĆŁćŪÖńšÜŽćł# ēžõ žü ō’ 04żü üų öļ×āąłå)"óü5%ĪŚ×å)&ūķčļ’ž’ö ūśłÓ µ’’ ļ’ü ł ź óņ>! ń ī  ’żżżüīż üóćåüüūīłżžśóūśż÷’žś÷śū żūų ēJ€-<Ī_ńęõžžõ’’öüü’’žóśüóü’üģŁ7Č®¢÷ū( üö ńü ńóż ō üś’žž ’żķżšÕ*śžżń!ō*žų÷÷īéõüł żźāK  ī óüåņĶęēžčķåš śś źźC8cÅåūšõźööėä õõóž ūöī ś ū  Ōūc/šĘ å÷õō÷ ł÷łė ö łžüžóžēżžėž éņīļļų×ėųūåī śų÷õčńįś’Ų" óŁ' ļó!ü(>łōšõ÷’  õžķ’ż ’üŹŁŅč śų ņī żėś žü ųöņóöęŚ(ź¤÷ńčō śóź ł’ņ ’üü ń’łģų ż÷żüśžųž ’łüū žśż÷ žž ų’÷öüõś. śė ’ ńūóżūē /łä3üčūńź’óŽüõ ņŻóóż- ü÷č 1õŒšõē! ųłżĶ»”ļšéĢń±»ØÅĒŠæāĢŲéü łõęąę 4%$ū219.@3W7<8D'ō ņōśńö éžģōųōōūóž śüėü ō żüöōüóßüņõūžś’ūóō ū śśń ż  ę÷žńł%éüż ļųżłķóīōėųļå乊øĘµµ®Ÿ„œŒ€–‹‘¶üõśüżü łż ž’   =4:0SMlp[÷ż’ż öżƳU ų ū’ūžś’’ūłžśżėēģķķ»”–ģM)-ż’ ž žżšüå<;ūōėäŪā’ ōžģśóėę÷ õń łžä30éēģįéü  üš üžų’ęō óüžüż ’  %+();A?A@GE??$+"ū÷žżųüōū÷ėļõöńńģģÕ߯ĘĮĒĻæ·Ą»ĢŠąīóż’żüüüūüųų77ĢˆĘ  žž ’õž’üųżų÷ŚŪ d\ć÷ūūźžņüüśųśłžśż’’   łņ÷ńķń÷ śū’ėž’ žūś  - żę×ĻĶĖßöņć ÷ķū’’ ś (ėżöžų öóž’ ļļīóšöūčżłśńśųžļóųõž$łņłžķšó ų ÷ų’žüōķčó ōėüüżūžśūłłł’ ’’ žų’ōėšž%. ōģōłżõńóęóžž’’÷ł żžłśžõ’śłżł óüżü īŪū=eQٹ«žüłüūś ūüł’÷ś’ßĢō6ZZŅÆåżż’ś÷ż÷+ļõļüōöģż÷’åķÓūžü śų’ ż÷żźęęž÷žüüš÷ńžś’żū’ łłü’ųž śšńžžžüž  śļõüüõū ōņ5;żźīņčēåģźųń’į ūšļūłó÷ł éÜßī’öśõųō óüķįö ö" ś ūō’ńÜ’"  śņ ü’ū’żüūśčš%7äÉ  żüżśüž’ž ž’ž÷õųõį:÷¹.üž’żžżųüś’śūū§¼ß%'!ōųžž’śłś żś’łžł ū÷²«Į4-łū öóō ü ū’’ńū žėšė1:lŪ¶®Įßįóų óōšż’ śž’öüłōųäźź’ 0" AėĻÜłńļū żś÷ ōūęöē÷ńī÷ łŽŪÜĪčķūüų ž ņż ņåč  ō "ł÷śšäļ śūń ź’ųūģóūšūóūūżż’ų öõóōś’ūö  š  ’łłżžõ ł ’ųų÷  łųūū  ’ł łÓĖĖé:( ÷÷ ū’żķóä’÷ōü ÷÷ūżłčŁĘÜFJņó ’ ńśėłéłż ųūųžłēČŻÓŻąęåéīųų ūś ņ÷ ’   : &# ’ż śņž ū’ūõó’üśöżųž ųżšś ž’žūū ’čō  žūłėńńīģŻŽń łś÷ūųńüõµå'ī ’öųüžžłżõżżżü(łņĀŪ Nī’ż žžüöžūųłžś ö ¾‹Pč žżžśž’ž’śżžžö’źŗ~€Fßžžūżżžžžüžūżż’üöśųłūśõééīŚėšżź=-RņŁż ūžņłśż’ü üžłśÓżē čüśüółšžū’’śüūžžųūż÷łśś  !īB€żżżž’’’üżżžśł÷  ķ7€’ö *, żīīäą®®Žąń#óūŪöųšōõł ÷üņöęė "&žń öš šņęü łū -)* žłšüęž Ų ‚ ųīēöóöķūóļü äķüšüūöīū’įü4#ē£ū ’ö  óśļō ł żųųū’ļžōś ūłżüöųż čģżöžņńö õ ūł ń č īųńöö ūž % ķ÷ž/ńÜ,!ó óßņ'ņ šķīżģźų  łėķėŲÜĖŌ ßÜ$ćäłą ōžīīūłŁŲō34ÖÄżķ öķł’ &żüōżõ÷ģń!Ųēżī ųž÷śōüšź÷ūüüžüś’’żüōśūū÷ššŚõL`¦‘Ķčģ žüüūųü ų’łńęĻŚ/eh ½§Śļń’ż’öžž’łśü÷ųó÷łśłõšųų’ü’žņž      žłžž -ß»÷ż’žż’žūž ę¾ß"÷üū’łžž ž’ī)÷Ųšśłļ ō÷ģņ’ łųžųųōłūūšżóģ, šė½äüōķ žųėóļż’ž’ ś üõöüś üõ ’ü ųžśņśźåóńšō üńų ’óśżüżžņūüż÷łś ū¾šģóżóöūųūüłłłłüüūż’śžž’üż’ žŻ# ż’’ū ų żūųż÷łõłöłūł÷’õ įžū ųłü żķ ķ’żõó  üõļżņōżäõėüų’īšł7ŸŚū  ńöüöłö ō ž  õśģ ōöśłNĘćüüüłöžņ’ņüž’ ÷ļųśįżž ķšūżś ł žõżüśū ż’żüżōü’łü’ü ’žśžņśł’ūūśųżö üż÷ žū õō čū,õģ õśłīę÷ö* łüźŚĢÄÕÆüūõł ćūģšł ō䌟ą üżļ ÷ž łąļųļ ģ÷ķąžłś ž ūłöū ż üśüõöūņųńłåńģźļųž ūü’ż ŲŖźV įłņųłüżžüüžü žūŃß+Šōżļ ūł žžüłżżū   ’łīņōó,<ńųšö  ž’ģüśžöōśģ’ ņüšßų¬Ļ±(s ūżśõō šļ ś÷üŻłŻ ō'÷ą× ūü ’ü’ ļõ÷ ģ ļ)ö(žāĢóęåćśõųż ųłüžżü’ųžńōūėŽś70ö’ėõņśōų÷ üń ś ńžžķ×Ūļņ’.$ü(ģūģś ’’õąü üż’öųų’’öśóöü# żķā#łń÷’öł÷ ž żšłü ÷ūžéųūśõ ļ’ž÷ķó÷łüż’śīūņüųūžū) "'*ģāŁåķąØśū ūžö  ńöŲåöžļ+ öų!ūļŚ:3õųżūśżżūüž’’ž’üū’ž’ģź ļęż’žžūüž’ž’żžś’  õųļōńśóō7FķÄÉē šļėąč÷ūüž’üüś’÷’żöžųžžś#()# ęŽņšųż’ 6³įńłż ’žüüļ õ ž÷ūõ’ ó Küņżž’’łņ’łłł üż’’žõžų žś’   ’łžż’üžüłž÷ųüņüśżžžū śüōłųłłüüżųł’ ž ś łüūśž’’’ ė%čē šüńīóųüūōöšóõóś’ž’ ģ żśÖōłč óö ÷ż’ŌōKEå½ßūüšžžłūšūž ūü’ö÷+ Ż)r"“¦Ųõżųäųōżõśüż’  łžł ō÷ööćõ÷öóžśśļžüģśųųśżöōóś  & ż  ōōüóļśšóźńż’ō ėüī ōõ’’õėöü’õ óķļšöč×ü ęžĶż żģõōłų÷ńłś’óūņģ ’ ó’ūٹ~/åõżżöūūū’üųūū ŌčŁļ ’ųžż’÷üūüõ’šņĶlśĶ éōżž’ū’÷ž’žž’’żūžÜēĒ «ł0ųžłō ÷łžłłöż’’ūż’łüžžü÷üīŚļ÷ śśöżń śžōśõ÷żųūśü÷żōķūōńąĒĀÅģ04,;+’ź ž’ žżū’’ž żż1ģpĆē,ćųüö žüöžżś’żżü%é¬ KÓń÷ õ÷ųīļńūõžųü’żüśüžżžłų’ś’õōö÷łļł’žü’žüü’łż’ śā’ųõļüõõńėäšźģźōöō÷ųłžžū ’üųń łśóõ÷ų’’  ž’’ųüūłīśņ łóüśöõķä ż’īäé1żżłōśłó õü ż łńļõ  žńõņłņóōżų žģź é÷ņ ų ž÷źłōäīźüžś÷ö ž× -!ü! żōżžõōŽõūüśó’üóņõųōüń÷źŸ #Ś üż’ü’’żž’ż’żž’üžžźÅˆ į ž’ž’üżżž’żüūūĢĆæłīüėīņžõ(ųī'ļūūīē ļč’ėéłć÷Č 8d &ü ł’ īšųō"ģõä&äį ßš ī$ķ$ż ó ž+%)0.   ü ’Ųą õéūżėéēśļÕėāīšōļįöŻōėģļžūūżķõźęć’žųū’ żżõż’śüłłżüśśūśųšńļīóģļļóō÷ų’śõōśż’żŻ+ļŲäéóŽźćķéš ,üķÖńōļōö÷ų Ž."śęöń śńźń%ü/ ņóóž’÷ė’ģ łżżżųżśöż ž÷ūšźßø«Ņü%@= 3ōĻńłż’ż÷ ’üł įŚńüż!ēūü’÷ł÷ųß*wž»ēóüśš’ü÷üżłž’’ūżüżūü’źÕ-é’öīž ’śżńōöįžīö ūžšüžõõ ņżļŽń  ļ$3; ł ’öż ņśśšüżēõšż ė śŪéÓ öż žöóĻQtīÄ ēöż śłśüśśżżūżųżųöćŅ_;Żŗžōūźōōś÷’żūž ūüłż   éōįŁüńšū śõśūņń ’÷’ żžļŹ×š=pŪ ųōļņųō ł÷žž  '%īįź ōPNóČņ śž ’ž łžļū ÷’ōüžīōšżńļäāõłŽāG9å×āżžėž õś öī ’śü’ü’’÷ųųżżöéåō łö ž’ õ žżļ÷ūł ųģŲŃļ žė ķßšļ5)ĪÖŅįöēõ  ūž")żšęŻåßņźźėśž!čćŃž ßųŁõ żęłģżüž &ĮKĘć#į÷žūžśżžżż’žśöūŪ Ōšņ śżžżż’üüüų  ś’ūü łóōó é łśśż’’ś  ūśóżż öēļļīõ  łķńóņõņņóśōśšōö’÷ņ!%'64ņ’üÜł ū’ õ ų÷ ö’ õŲŲéļģāÜūśśęöž÷ßšūł ųļÕōóńīüņ$ŚJĒų üž’’žü’ż’ņS€ż&ł ķüūüžü’łżž’’’’śżõ’ žēżż öś īśłņō źłöžüüķēöõš ’ģõłļž žśžśżžżņźłšõģ ""! ų÷üļćņč’śöķćšźčźėāćć  ūžüōśū  ÷čž ž óųüśéööūšé Ģēę &ó)ķ %õā«+Dį ż ’÷ü’ ų  Żį(Ž+’ "łį" 7¼÷ü÷ ų ś ! "' ')/*õļßóūéśżłöńŻļ÷Ųņķéõóęīšüšžģūéēčśćõōģ÷ ōų śō čõ’ōųėłöš÷ņõüśņ ÷śļ ūūłśłöüīü łüū$ōüó÷ņü ż÷ šų  .-)'öŚ×ŪÜĮŁÕąŻŠĢšõóšżź÷ą š źōėķõōčīś÷ōģģó"/ ńćż’žżżüżż  üńüīīó÷śž’żū’üż  ćåģēŻÖćü">žžś ’ō(ūūüūüżļžüż÷żōųõśžü׀Ž! ’’ż šśų’ųż üļ ōéŪßčžö ÷÷ū’ūęńõŽž üų’ļ ö’ó’÷śįļåś ļżž żśż   %: Ī­»õųļüžż ’õžōųųųžžū÷śõéšńšķ’õžśō  ņžźų ńöżE Ų÷ž÷ ÷õśł ÷śöśö÷õü’š’ö ū ń’ä ó žžżś öśž żųūųóš÷üł õóśż’šó&"ž ņōōüķįöō ūöś ģįūūūšćć÷’’÷éööŻüłųü ūž’ž#ßõ Žó5#éŁīžū’źžūų  ó žźß ģÜźöūž ’ķüü ž÷’üžż ’ż łżÜč ńšłōžóńń žśśžżłüżīśčÉ÷ūöäܰ€±ģļūżżżłūųżžžųżž ū< ž’ż’ūżüłśżūžż’’łõü’’żžüžż÷#²»i\ÄŠ=Åę ųż÷ółüżžłóś öŸ¼[;©ģL×ōņūó’ö»%8ųõ÷’ž’ūžüż żżó’öēīųīܱ1b ö ū  ųłü’ś’īłśš ż’üžžž’’ęÅ£ )1 ’żł’’žż’’’žū’0+ÕŠīņöśōž’ü’’żžž÷ !łčö’’žüżüū’żū’ūžžžüū˜D;śōņōüüų’’žöüłżūśż żõ žó’÷žżö÷ūšõųõ ńņ’ž    ūõüžų ’żž  żł ļśōŚÖļŽŪÜēō’ūžżś    ’ėźś÷ūóöļ÷ķżż’ žžųóīōžö÷÷’ųńü ōłöųśūł’’’’žžżų’żńšöūųł  $4<»¾Ņżżžüś’ūžž’üżžłõśčå+ 5> ĢæŁž' śżłüśõżžž üģYĒŖ:(āų óų ’õü’ō’’żö÷’ūž  ž’č8’° ōé żūųõżóŒF ūś’ž’’ūžž’’żüš‡Sżž’ś’’ū’žžūū żūžūłłėåėš ćģļöü ō ń  žžōųü  äšųųż÷ ’ś ń’üż’ęėåEHž ļśųžö’ õżżū’žöüõūżūü łūļģ¼V ėīüöüūõ žüś śż÷łõś’ ³ ūžżü’ś÷śž’ū’’’ūüžśž 4#łżüūüüžż’õ żųū’÷żųłśśżü’ū’ūžų ü ųśņöżēżššż ’’üž’ śśżüžų ’ žż’ :żž’śüżś’’ūūü’    żžž’ż’’’śżūżüüśųüž’ łū’’2žČÖł÷  ü÷÷śõ÷ż’ ūž śūżłžūüūģäVQ Ōåņņń žżļņ śūąŠ#äł’łõó  ź’ōžłž ł śłś’ēćõ üł ö ’ ’ ś÷ żō õ÷ !#6 "’ ÷  ū õś÷ģžśü’ęśóēŪóńģåēńźŻŪŲåīõććłöųżüżöözb¶öä’ł’’’’üłü’ū’žžżžżžž’üéÖ$#±×š’žż’ž’żśżū ū ąé=ÄÓėō’’ł’üū’żżžž’ž’ ōī\”2łó’ ’’žü ’ūž’żų żóįŌąķżõŽÜė÷  ņö’÷ž  ėīļūż ł  üź÷žžūüųłńųžųžūųüöū’’ōųśūśśūžōū .łŅØ«ė0@÷óųöóż’ūū 43 ŔŻH^3 īżłžż’’’ ŅĮūļ÷ųōü’üūłśžžū’’ž’ż ʦ NŻłųųžż  ųžšóōūīóųū ū ’žžżłł’ ’ ü÷ūčÜąŻģóõüüų łżżó÷ōü÷żöń ū÷ ö÷śüöū ģł’üģāš:nŗ”Ų ž Ųīūś ’ņ ’÷’öōżžöåļ*IęÄöż łūū’śłöėä"ūūųüś’’żõģõłššüń’ż÷ć śŲö÷’’ü’÷ļ’ū õ÷ż÷ņ 3 ې÷ ż ł ’õń’ żū ūżśłōśļ õś śū üóöėż żüžł’žž ļõžśńóōł ÷ ’’õ ś%/>&>U:?G;bņśźū’šś ż ų łÜŽčķńčŃŗŃˬ¢Ø¾€ļüžśżś śō ņķöų÷öū ż’’žūõ’’’žłōŅįīö$ žūüżłžūēōś÷óÕė żóųżłų’ óķģŪŲ  ūżūüüśõüöųōžü’’ż’śż žöżūśśł÷üõśńō’ōģüžś žžłü’żžüśü   żżžżüżüžśžüž’  ž’śōėėŽÓŚĪš›żžū’ž’śłųóüśųüūų "žóųśņ '’’öłłöžž żō öö żö üžüüņžó?üėžõõśūžūüų žłżž ’ųóżłżüž  żõōõż÷žśėźņž  ś÷ūžžņęāāéų+@!ķįžžüüųś÷’ūåżüņŽåāÖįåDS%üžüżżūżłł ųóżöķ÷ļŻń÷ū’÷ż żśūüś’ ž’üś ’ūüłżóüų’ōöõčšMFÄŠ óóųžń÷łśł’ūłż żöł’÷ž’õļūłUŌ”ļ@čė łłšś’ü ł śōõéū\€1ö ’÷āś÷ķüśüüüóü÷żõūķ’śłs€.0ęöóūįģü Ó T€@Ńė łžżžū’’ūżż ßA€5Ż$ē ūžż’’’üž’’ü’÷üųõśžū’ś’ūžųž÷ļüóõėłžūśīķńėéåäō÷        ż ž +ų’žžžūž’üōćŚŲßźś ’üūńįŪąóüś śśöļÖĆĖäōņžžż’ņżöü śūżņüķ-ń$÷żšū’łū’ż÷’żžū ųżųüžüūü’ōóśK@ö¢ęģ÷żżśü’śū’ėĪÖ9fŅļ’ ūū’ż’żüżüżž’’’žż’’üūśżųüż÷ųśżūųśžü’ ž’żż’śūżž   üūżżśżńņ’ōńņź’śņéäķŌčßĆŲŪźŌ½įēśžÕąåäÜėóŌōüüõšśüś @+!!.=01; !!ž$ė ż ’ół ō ś$ōķłżóńżūōż įę é÷’ūēśžēó öüėń÷żłųöžü ē’ ĀėÜź śõūóžžõóżšöśłō  ņśżł <’ ’öś żõūż ūõ’üõņō’žü’žī÷Ć 9Ló ž’żž’üž’žüžśżśöž’żń薐;uų ūö’üżńśö ż,9 üžõ ų śųöłķłļūüžž<õ/õüķóäāęļäü’ķüūż’’öįšö ś+ ü%ž¬ąćķĖąßķ÷ żćō 1'"źĻķ žśēśū1 ±ćōźć%÷ßłčīõöĻļ ū9‹6ģüų üūżž’žūžū’ż’žžūžM€$1ńżūüžž’ž’ž’’ž’žš’’’ū’łäŅ×"  üūłūūńüķ’’żū’’ņīž$!ėłõņķö żü’śūūžūś’ żóÜźź Y1ޱĆ0UÕØFćöūżžóżü÷ž’÷’ żųźåłŌö.. āĪAó½’! žņžžü’’öōšĖ·Wqšģżżż’śżūžü’’śżžüüüżöģ© T÷śžżöżž’ż’ü’üūūłžśž óöłńķžśüžžżżū ü’łž   čēÉåėõųśž śįüžų’’÷ž üōēūĻ€O<ōóžż ÷ż’’’üśūū’łųߣ¦iL0žü ūżżōżķū #/ż åįīīüųūżüõóćüóūż’. ōņ$)łšļńńś īžõīģģėīž÷īōõ ’ ö0ż ų÷’ żņ ÷ņņž ÷ ōć óüąż ’źŽėéūśüīų÷ "ų’ģüß[€7é’ūūžžżś’ūžųśų’’ęK”8śõ õśųžüżü’żüžśSŗ÷Aōę ųöžūżž’ų’ūł śžųū/°8ąžłžś’üś’žūż’ņ ’žž’žżž’žśžžżüųų’śłūõīģīīšėģä’’üžż’żż’’śżüżž śśś÷yŠüłžž’ž’ü’ü’ž’żżž’ ģūy€šņüūü’’żžžż’’žü ģŽīåėņ’ūōšīäš üśūżž’ü +ü(ćŻēÕĖīģėŽūėźäįéūßļčéöś õü ÷ļž žūüų  łśņžśś’ųžūķłųū łū’öł÷żųź÷žū ūžž’ūż üļ*ČÜ$Ūųłśżöłž’ś÷ł’ üž +<±³2;ŃĶž’÷ žķ öł’5ß+  žöų łģż ų’ Öūšęڵķ(åŁ×’ųņõļäāüūżüżż÷’ž’½ćž’’ ÷ ’ųžžżžžö Į€żQõ ółųżł õśł’ üż*CÓ×ņźīņōķ’śłśłöłöž ś’ż7 7ŃŪķęģłķ žöž÷õóž÷ öõöż÷üūū’ōžł ž ’ ūēļ ņŻ’śž öļó üżóõļūü śś ÷ ōõļō ’ģō÷źų ! "ō÷żżż śłėū’łēųņõńū’śīõ’õ ū  ū÷ūņųžž’ó÷ń ų žž’ žåDĆå~ž'ėų ļ žž’’ żžżżżžžżžž’’žõS‹śq•(ū’ū łłžłüżś’’õß ū üöüžžžłłłųżų’ū’ōō“•~*č łž ų’ūłš÷ü ń÷üųžüż’üžüüśżöŽé ļęśõžśśżžłžžžś ł’ ń©Ó* é#ś’’öł÷ óśūłöž’ķ·•éhT#  ųž’žżśūžśüō žöśłÓ³Ń=J ’ ’ūż÷ž żś’üż°ģ  ü’ū’ ł’śżü ż ’ņķ®Į "+ś÷žżü ūüųö’’’üśüōśūõńüö’ńķłōóńóų łžõńüõś÷ž÷žņųõżöł õōżžõś÷ ü’śöłź "-’ü’õ’ķįčŪßŲ#(ōķ éś üōī üż5źēÜāßēŻąŻĪåÉŻļ/)  Üū óü’ö ūł’ ’öś’ ż óāÜņėźōGžżūžüųõķńśłžśõūł’ķ’ųüłųüųł’śļ]ń(æ,ų’üśżž’’žżöż’łł üžń2!é€3īå’ļ’ ūžżžż’’’ śųųųžżöü ūłņä ąåŃķąėéģ ńéüūģåĪŠÜ% óõöśžźūńö’  ÷žś  łõźīń÷ łõóöż ų÷ üõ’ļńž%+$;K?CC-)1ōöõłūųōśśų žÜļŻ×åŃŽęßęīčģČæŻÓüłüžóīšłłź±¹>U&! ż ū’ūü ü’óöóē éųųś’’śśżüłžśś’ö÷öźĘŌ#4÷’łżśüųżžłžžž’’üüųIAĪóüņõüü’’łżż’ ł7N23# ’ ūžłņł÷łńńņüžöųŠāĄųłšęüķķłōļõüūö’ķūż ü  ’÷ śņ÷öž ģóöŃńü(#$üśōųõś’ōžų ’ņöłõļ īńėłšźżžõó źžśžūū÷żQpü›źćśžūųüüżžüśū śśLCķŸčķ÷õłųėūõ÷żśžūą!&łčųśķż÷ščłłłūų×Ļńļż$"ųłüäõß’ōó÷śüōó’ųó5żŅóō  óūįż÷jFśżłųžöųś÷õżłž ūłłō’’žūīĮ“¢Ģ ń’’žś÷ žžłśżó7čžüś!ńōļ ņżųüųåł’źū÷żō ÷ż’ 1śćś*$óč łžšüõóšüżżüģųż÷üųž÷žüōūõł ūüž’śņž÷’ ų "żśöńśōśžüż’żü’ūūų’ž łļü  ’÷ūśöņ  ļķ üńūžóūž( žŚ×ēžųś  ńćōżåż ųżü’žķōöš  łżžõšōŚģ*ī ’!ęčł ń ÷łū ūżł šžōśąēėńłś ģ ķłśėūūóų ł ų÷ų÷ööūī ųśš’ōżū óūż÷õņšūż ’ūżó’ ’żłüüūõūšģåŃĻēCHüüųķ÷óõż ż’üöżżųżłü ÷üóóęīšöż  śņłõųūųö ū$ śēģŽõ÷ōśéóē÷ ņ ļšś  '. üųūļō ń åņšńńÖū ’üżüöųųųżž3F Ņēöųżłõ’öī’üžśöžųśžüśśōņ (ł÷ ü÷ üīųūśū’žņōšõüōūõóō’ōņöłśžõīķķķņķč O ž ū  ųóüīó%żūü  ’ūõūķķ. »ėżžóżõūś’üųżšöšōōń, Łż?óĶ Óņ+ ī ųųųé%13ŻŽ&śčŌāź ü÷öųłūž’÷ų’ā&!Ūō ÷ų  ī÷ū÷ū üūųśśķ’üśś'Ņū-¬2õł’üžüū’üśżüś’žöēīA÷™RĀüüłūżž’ ūüžšš&ļź   éģśõż÷ęśūšųöõīļŃųżāēšņźéąŽźü ' żżöł ŁˆĘ C ÷ öżś  ž’’żłüżż’’ūõżśÄß=ūżüū ūż’ń ž’ō żż õģśüū’óó%Ž÷ķ  Üćń3ūśõśśūü ūčģ÷ķõū ģ!ōł"āÜūö:Ķžżž’’żżżł’ '”Ž9ķžžųż’’ü žüüū’ ż(3¼Ę!ūüž’żūüčēŪ/.įåęźęōüü žļ’ż  Ü óūćń'āŁļ ļ÷łśś’ół å  śü’ žöüžś ł ė’ņŹIģöūöśļ ü÷’ųöūóņńžüžżļģ ’źń ÷“×,ūž  ž     ü ’’’üüū’žžü’żüżūžūūüžū’żł šųļų ļūüļ÷šżķ’ ō’ļųńēōźöéł ÷óõšńšüśõśų’’ ż #  (ųž   .%6$3/?K8=5/Cž ž’łł’öź÷ņūōņåėŪóŲ֊׮½Ė³Į­½§śüżž’÷ßÜ_:æĒżž’ł’ń żżų’ų SV€øćāś÷ńõ ÷óśńņūžü’÷ü’žžżų ü żłžłöū’ųžö÷  ū ņüņ÷ üü üżųśöķśųöóōö żłóü   2/.>5F.@17D)0ü÷ėŻżļö’śōųżųņńõģõõõīźÜŁŪÖŅĖÓĪŃÖÜÄćŽčåūžśūķH-®¾  üźłõó’łüūś ó  ūńąhYę×ņäéųų÷ū’ź öųō žüłłļļłöüūłżśł’÷śüśžż ņõżīō *$$ū żęńü’ūš÷éėųõžńłųł÷ųū ģŌŻļ ",Gžļśż&0.2óóžžüń’žżżū łóó šųśõ÷ō žżśīęāńčź   āöšńčÜ’üćČ÷#"),żųū÷śó’ś÷óöūżžž ś õż×ńśśōŹź7FEŪō÷ū óę śżčņ ūš÷ęł÷’łüųżūūüł ’’ ōśłółżęĘļ3j_ĀŖõųžüłż’ž’ś’üöųłūēŅ/RR Ų¹ę’ūųųżžśł’ūū’ż’ž’ ’ūżżž żłū’żžž’’ž’’ų õ ōāłÖī ō üėųūō ććė öż=żųéōī’óõéńņ ł÷üąŌF=žšŪŅĒŪÖåūüõņīł łüųżņö ļčõż śšś’ ö’ čō’üśõżżóļīäļćąū žżųų÷ü  ūž’ń š¶ŲXv¶ļóö Ūģ ’ūüöūłłŪĆJ}<¶°=%ŪĻ÷ ģķ ūõłü’’żżłģüüłųR ŖĆŪöšž ųņžūśūüžśųö ß!vŌ¦øßīü īśõ’żżūū÷óļļOukźÓƱ×üšīł% ÷ń ž š’’üūõüņöśś ÷ ’åįóš żó ó łėłžč  õśūü ūž óźüśšķņ üż õüūś &'+ ūźüžčėčü ółüż łööūłģöłņ ūņ  ūųłłłūźśļčņ ōžżś śłųģś’ ųßņ łķłųóļń éū&:I²Šć7G ōī ż žüż łžüļäžś÷łżāŻōßś5+÷ ’ōōżż ņžžüį÷’žżž żūōųšīšõōōłōłūōóūüöõ üü÷žž’’ü’0%/ļõóųē÷źśöłśüńę ķöņū ś’ūżžż’łūūžöžõżśłó õ÷ üūö’ųöśö’čżżžžżž  ķų’öū’÷įF­Ćū ūžžśż ģłśżūśēšE÷’ņ ÷ö’õöūõ’öņūū’ųū €Dōķóżżü ü’żžųžž ūźńóź€Tü łž’ū÷žüü’żžłü ł÷õžūüżłõśüś’ļķ’ī %īķ÷ īž÷żžżł’ś’ųųžōüų’  żžüžń’žžžüųż’ū łūżņ ōö öóųäżßÕčśłūśūüżūū’ż  ņ ó÷ūłóģ÷žóāčćś÷żłģõłęéķż%+/ ņłčźŻū’ žśķūüõūéńčżõļķž ż,$$7öüūėļī÷ö ļżżśżü’ü’’’ųžöżßü’üżżųųūųžü’ż’’ūüõžžüłųļłēčä’U’žūśõū’śöśżūžųüń’ żłżūų ’üśżžłłłüņśśöųšėń’ķöūśųü÷łūģūūżžłü ’žżōéļžłüłłõźė÷ūż;īĻõō  " łźīž öšł üüļŅĢ!~EŽŃų%ž üčņžéżżż’śų’žūöž’ū’üųżüłłżüż ’ üż’ž ūōś ūųõż’ū  ū’üŲżż’’üüūžūžżų éÜįŌ’Jrł£¦Ńūń'üž’žżüžśżż’żž’ō śéŠŚ UKÅæņ ņõų’  ü÷ų  žž  žłżüžśü  ÷öķźõśł’ńóēćūżü’ł’ųżóńż(]żÜ’żśśś ł’ö’żūū ü śūūļõĘŅX1šņģł’ūżłżźü÷żūłłŲęéżžž’ü’’śżžżžžżžü żūÉĘÅė*6 ś żś’ų ūõśśōōł’ öüūłö ÷ š÷ūū÷ł÷żų žų ž’īåśżžņžųü’ž ńņżöćļīóļģōīž ’Üõśņżż  ś’žżõüüü ÷ń Ģģéāķłģö÷ūų õżžżż÷żūłżü’ż üöż÷ū üģųń’ ž’’ł žžóš żłäū ÷žżśż’÷öłźķłūšŅūV(É ļéśüņųžž’ūśüžūüūśūžü’’’ūłł’žžžż’ż’śż’÷ųö łżüņž’žłżó’’żū’ųö÷ żēāöö öųü’öżž÷’ó ÷ķń ’üųų÷śžõūšėż÷ģ ’ų’šķ0\bAńĒ·ĀęųŠćüģżū’żłśõų÷ūėõūŽŠüBfgšÄŲēņŪņ6ńõųńģūżōłėž üžū   īń éõųēīėś’’żüž żžüż žūżöģéßįėšśū-/ĪĀ.nžóųż š õśū īż’ėžųżńīüłčĒ(]4źõżöļéųšŽėõģżś’śłžśś’üż*§€  ķõ üó ’ żųųłł’  €¹ü ļņśżö ’īžūöūų żžüų’ś#*ģążöķõü  żłīū’$öū’÷č÷ ļėž4D÷ ēēļ óźģņųół’łüōžóżüūźķķéö-Jéķżźöīūłņņō ÷żóż żų üóšė&ēń åūū ūōśŚžł üšśūśüńų 5żŖĀ&xÜ×"ō śėž įģ śõ ’ś’÷ōüś ā)ēĖ` Ńł(žŲłūśöśģųśõīšóśž’üüõõ!+$ (ņķžóīļžĻ ųüśī ż’’žņš ßćžżžžEŻū09’õī÷ūõśśżüśū÷żżųż’ī÷ļīž ćąō ’’ūüūł ū’ś’ż  ųóż÷łž ūś÷÷śłżņéó ~~LŌµĘŚ ’ÜŁėü  łūłžųłųüžśė ūąīķéōūž ųöųģśļūžų ’ū ļ üżśśżūł éņō ģņūž ’łžų ’łüłüłżžżōłūżų’łšéņü:9/ üłųśł’ū’žśśö ś ęō õ’ļņåŅ÷:’õńčł’łöõ ųõüł ś ņżų’  żūõūūśņ #śīńĘ(ś’µ7FļŽłś ōł’żüżł’üół’÷ ć 'ūŠŻC0ŚėöóīśżżüżōV7ž”õž’ė öžõūūžžż  %’FÆæłäī÷ōśčōöņ’’õńžžõż÷į÷ &%O?& ż’īöžśūü’šłū’žīōōįęóųéķšįņūžüółż ņł õłłé’ū÷čūżū ž’ ēź’ ž żöłż÷ų’ģ ņšäōüļēēķėüśżųūüó÷õųž śüōüóšū ųś¬āpåžżņłųūöż ųś ż’żžł’ž ó÷ņ1,“čö ż’ õüż’õüūł žžśžūžöĪßīNÜÓęūń šśżž ł’ö’żżõ9²ĢE=¾Ō'(ß ģó žüžśūō’łśö łł’’üż’ł’śóóśāćõóżźž’ųżõłžõü’ūžńöźīėξ¢Éū7>>P? ņüż’’’ż’üž ¹ŌĘĒ4'Öć ń ųłžž’žü’śśüłśüé Ü·ķ;Üņżńüģ ; ūķķ’ōīš ęūėßį łīńłü ų āŠĪÅŅļŪü’żźõź’ż ’żūņžżóšž ął+ģė’č÷õ÷ģŽßąŻŻäšīäķėęžóų  ęįø łųÕķüö    ü÷ņł ņü÷ōšż öéīüłš łōōžż’łņõ÷÷ųļęōńåžīąģ ż)žņ’åīõåņūóśųė’éö÷ōšž å )óü%’ó±³å *żõõ÷ ļüŻļßķšńēÖŠī ÷ģ!VB5óŌģóśū ’÷ķżšųūū謚8ūž āńżżūžüż’ü’’ū’’żņ ķ©"ųå ’ż’żūżż’ųž@AųóŲžųóģ ć Ż&éę#Ü)Ś ūūółó5’ńüļė óūō Ö"ė ļŻ’ńö õų’ ’’ ööīėõķś’üśūóżūśś žųžū÷üóž’žūüūšłćīłųóü’ųųłūü  žüōżżųšöńļóüū÷šżśćž÷ųšńüž-žśżļś÷šżž śž ,’óśōöśéõėŻūżśūżżüńū ’ž’śüųśųöü’ śłłžż’żżžżż’÷’ųū ū’ū öłųžü ’łüūżõżųōģłžźŪƲÉē2EB:I, ųåūžüłśžś’ūų’śż’ūéóńöūż’üųżłżżļćĆęM ķžųžģōū ųųūś ż’ż÷üūśēž'Š™_üŚ .ūżüņüģóž’ö žłųśžųšųķö÷ūūžą ’ų ÷!Ü!8’šųūż śś÷ż’éäōłéęÖÖ÷Ņ9A;nņų÷åŚv~ė¬üłśüśöóżöų’žü łųü ų ÷÷ŽģJ$ź¼ūū÷ ūöžžł’üłūžū ūżóš’ Ö®Ł÷ģūž üų ’’óļ &’žöįćÕ„Dļ’ž ūģ÷īńļńėšžõžųöł÷õż’  õšęõ ņūłżųüžõ’ž ōõūųż÷ńļ  łļūōü, ś’ū’’ ģč īžģüūż÷ūžž ż ł÷ļęņņõņü ’üžś žü żż’ųߊņ ėī’üżłēüńC!ņęļėłē śżžüöń±õłń÷’ śžśżóōłō ņ÷éŲųņćģļłū C±MņŹ:źü  ņü śżżūū÷ łśģ ¶=äå öśųūž’ż÷üüž öų ųłūų ūšīöūüōćźėō’ūóõ’ż ž ūųž’õšāł’śģ  šü ūžŲšųöł÷ ūśī ęļšųóöéé÷ū ’÷Żåäķ ōõīš÷üó!żŁćś"  ū Žß:Żčžóü $żüų2å łūżü’żžżūł Ó"“ åčżž’łüžüžžų’ž’žžž žū÷ģļ’ōżūżųüūųų÷ų’ģ÷śż ų ž’öžż’öüųü’ūżżüśšū žóżōł÷ūżżüżč’ śżöųüūļöž÷! õłüōś óüųśņėōīķääćåŲŁńķš  žż  ÷ńłõ÷ųśśūśżżōżóšģźćłžō#*)- '.* óż õåńź÷öģšü’žśłöóšų÷žżżńīŽāņłäŅ’ #!ū’żśńšŪéņóūż  /’é ōžķķ÷ž 9ū÷ś  żóļźīļčśćśų  ņ(ņ÷žąčćōŲõ éü÷ ü’’ūśōōäū( īńų÷ ōüåµē ļš üö’ ķźäśļńżśł ųōū ū ōóś #ė3  šŚźōśšŻō śłūłņų õå÷ś ģēüż šå ųóųśōöūżü żśžšōžŚęń  ńśćķóó +ūłžüżōńųžū ųóóņźēåė 5, ÷ÉĻÖśžöžć£Ń"š’ūłśłłžž ž śųĖP3Žßśłų’żųūś üó’żłüžüūż é õž’ü’’śłšöźųņō÷ųņų     ’õüüļžüūüüū ’üüžż’ž÷ąģōĢĆ GRś ’÷ųļöłūņ ųłųõōżēčēų$ōöųüśł ūų÷ žųüö÷ō’ś łūöžüśżüśžż ś’’’žżżśż ÷žż ł’żüųż żüūśżž’ųüņüžżśõ ’’ųīųõžļö’īńčų ż śūžžüśõōūł ģķž)?'ü ż÷ėļāó÷ūśõšżž ū’ž÷’÷¾‹,_ :Ų™č  ųžż’ķķéōüžżśųöŻĄ’/äÓąģ)] ż żņłłš ūžõśžł’ üś üóżłšŌ÷żõšė÷ōļö’ż’õöų’óųųńžōś÷ż łīč (QIšüž  žü’öłūü ųųśöīņžžōóūõńčĖÕßłž’żõ śė÷üśõū’ żüż’’ųü’’’śüž ’čŸobŗ„IW£ŌKŅīōūų ś ’žłųžūöō Ž_"›Š`“ųOÕóé! žņŻA(±½4óųżž÷žö’ü łõų ś ńNKٚAųöų’šūūžüü žōšåó’õ ž’’’żžóĀįL»å÷żżõū žūūżū’’ųż ģ¾bččžśõžžžūž’ū’śż’ūžłķŖ€@ö ūłł÷óśūųżž   ż oüńŪūžöśōļņū’žžõ÷żų’ž żś’ż÷ōüųņśõūüėü÷żżōõ’łüūóüūüśłżüōõōžų÷ žż &ö$’ś łü ūöįėņŻąē’ ōśš’÷śńółūł ó÷ųłōłūķó÷ '"ūėšķ÷ü’ž’÷ųżü õūüśžś ņć·€Ļ1N9Nż’’ś’łżüćčäٳā1R4$ßū’ū’’ū’žō+€ ™å.šė õ ųś ł ’ūųü÷ž÷ōłé.“_ųĪ źśžö’œō łüüžśü śūżśū÷ļü÷ūżż üžōż’ū’’žüžżžł’÷ śżśśģöąōłžłõż÷łżū żłłööņļžč ł įėõ $’üēüųģõų ėśõ  "žü’ąŽßo÷óś÷łöł’żžōūž łüž÷śüī’ųįé³0TŪõ’’žżžüžü’üżöųłśż" ūę÷ö ż’’ö’žūž łõžōüżū ’~,Žūźłż õ’ūó’’śźõ üųõūü ’ żś’śéųłīļół’łü÷õż2 ÷ņöæČśżłģųöłų’ż ’÷õżõ ōų ņ-F2=$+ žüńĀłž÷’žü’üüžśžżśōūūńž éļ÷żļļķ÷’łś’żūņūłłś ’żżóüņ÷ū üėųųśūłųž  ūīźł  üėųż’ņŽöłóžł÷żö’ųū÷ņńü ėō śūóųåū’żūū’ž’ū’žūżüžųżūūś ’ü’žż ö’üū łųśūżū÷÷õūś’ł ÷ōś÷łūüõü÷÷śōżńüž    ūõ’ž  ū ż ’ęšYˆ żė ųž ž ’žśūūśžżśļ4ȱ2$’ķž’ł’łśłżżłżüüüś üų Õźm£Ļ:Śųūžł’’ö÷ž’ü žŌķöhµÜ2ó ž÷ś’üżüżżžżū ū’’ųžü’žūżżū’ūūüū’żō÷’’ūśū żūōżüś’üūųłł’’’ü÷ ’žćĶĘŚ/tóŗĆöūżśśž’śžł’ü’żłīüę×ÄŲ?}żŗĮ÷ö óžõņłōžłżīźģśd ŗōż öśż  ’šųöłū 4Č·9.Žņś śņ öüćį4F;) ķķśļįśłōļųóōżżżśņó  ÷öļ½÷ćūż üüż öśłļšłüõłó÷öž’’ń÷÷ łōž ÷ųłū’ļż ’šõłłō’ŠP'™ƒŁ *żé ōźž ž śžžüžļ’!öÖŌīM)ńŁūö’ł) ž üųļ ’ģ öśųžõ÷ ōöšŽöŽéōžåē śł÷ųś ōšųüėžõ ÷ōų ńųł Żģ0įÜüųģų÷žśżū’ūņ÷śö ōčāūĻņ%åžü’ū’ żśū÷ ł’ü ūšžōžüśų÷żųōż’śųūõųõōļõ 3=;V[hkao_’÷śž ’ž  ’ėąęąÖʾ²¦’ŽŠ€ż’üżžżłü̼ L'žī žżūü ų ÷öžüżłžśżčłūśśż4&īēé÷õųžųśśžżü ī" 2<ļęįŅūš’ņżüžųįółõżģ 3ė&īÖŪćåą ļ’ūķßšžćžżōšūüžż’’’žüżžżśžłśžūłżüų’’żžż÷żžžżüżžž÷üżōžż÷ōõłöõśųņžłöōöūéųžü’ū÷żż’  ūūńéūĶćŲįČĪ¹É ’üżžū’žūżų ÷ųż÷ ÷Dģō ģßJ-/ʋÉ÷ ėūīņųņüńé ’õõöńōė-’Ćöüłõšåó) ž÷ģ ļé żł’žžüśüėģ "ŻĒ/ńń’īśłūž’žüż’žž   ׊UóŃ ųū ūżžłõüžõżü’ü;2 śŁéöżõų’ ž’ųśūś’ üššöīūļźĢ CrE’ųōųö óäūõó żņūūūüö’’’żü’ūżżśŃ8—ŗ1öåś ųó ö ž’’śüłó’žųłÓZŠģE%Žåüžļż ūś žķęšģ!E ųõģ÷ēł  śłśūōųßķėżū’ žļ÷ū śA%ńńķł õųóćńüüžżµÉžų+Ööó ’ü’’žžöžüµ~Ćóōéńżśūū’ż’żżžśžžü’żīšóńųōžłśūžźņžžłōńų  ļüįž’ķūīė×õ ųūžžé ķ ų  šžćż żōüż’żųīö ōéįšóž  żł’ōł’żžūņūō ÷łžūžśśū ųm~7& ųóųłū’ļē÷  ōń÷ł’’óśń ń ęĒūģĖüųü ’ų ’õģö žīł ū’ų õņw#¦§, ÷üżž żüōųż÷ü’’’ ųüüćŖ6^ĘĪóųųųžü’üžüłżü÷üöųžųžż  óģķčų÷ś ó ų’ ÷ł’öūųüóųķšś’ų öł   īļżśķžõūžüõžņģļķčäćåčåęéßźżó čķėūčł žłę ųųģóūń#**) ,"'> ü  öżöš’ ņłų ż÷śųō÷śõóż  ś ł’÷ļļģü üüż  öółļõżööķ Ū ūōķ  ’öż÷šś ż÷üõ’öž  üŚ'’č žżų’’’’żčż žšōž ųųłü÷üžśüž äŻ #—Fä’żž’žūü żõŲā!f‚€dŹ śųšųż öū łóūółööžņūś ’żū’ōōł žłłōį öw}/īßėēöųųż’ļåų’ź’šü’ łļ÷ Üųū & üŁĢ×āņščŻßöóÜ ż $"żśņļęė ļ’ž7ķ߯ö99(ō1ųļļčäēśž’ś$ Ē;>Ćģźöžūżżžų’žüżž’’üśé:ŌųŻ!ņłū’żūžüž’’ūüż žłōł’ū=*¾ž  õśųłóóūłüżśžüóūłüżżż ÷ĀśAöłéńõ ś’ėžś’’žöžõüöžų'3Üȶėn7Ē”uā¹ņ+ īžü’ųöż žūł÷9ģ½ÅöU9ٶZ’Ōō÷ žžżśżüóś0Ąśõ žüūłłü üżžüłūżśžü’’źŖ;[āöłłųśų’’’ōö ņģś’ū’’÷é ł åķķ ń ÷žļ’śžōķ ōł žōłéöįŽāÓ·ēXzDSÄĪߥŪčģ’ė)žüūż’÷ż ’ę’€§4ż śžōžż ūūõķŅöą• õūū śõžū ōśśüńōīśšī’éš öžū’üžöõö ęćžķłšż# ųģż üž  ž  ÷ńż÷žųłšųū żžśųūžļõśü ī ÷žżż ąńöüżśž÷üžōžōśģžüö’śółšššżüŻų/ ź_§’łõōśü÷īś’’ ģ÷ śÜŃ8śŌyŚ üėū÷ ūźųžūōīžž ż õ'ŗĒ$ńėż’ų’żüžž’żśüłģ[Źūņüüżłżśł śų żżūüł łżüū    łż óÅļś’ łöżėżųż’ū õō’÷ąķōłų’ü łÕ@½=ä ōóžžžżżžž’žü’÷ņĪ7(Ś.Īü žé÷ū’üž’’ū’łś’ś’ļųż łóōģķö  õ ö ģł’żūšń öü’ ų żćģķļńżö÷š ö’šćūö  žåųńü÷ųų÷śõ’ łüū ž öņķō’ööšųłü õūż öé÷÷śüōžż ÷ś žõóüūśūžžü÷üē7K€“~oµžACŻŽ ’ üśų’śżüżüśūäA«¼oKåÅ'.īŻü÷ ł  5 5+71," .żłü öõł÷ąų łāŪłļŁéėćåĶžĢćšćä鹊åü’żīųūżł’žūżū žūūśöżŅŪ½żō ūö üüž žż’ūōõ’öė~2€é@ł üģółž’óž÷žž’ ’ū¢„Śö’óūżżžśżūśų’śõņųū’żžų’ńž ]ɲĻāųś÷ žłłžžų ļžōžžüżōųūž’ łōķŪ 4,Öåśłūśż ÷õž ļ÷óņūż’ ėķō;-ŅÉśéö ’üüūžž’śö’žżūū’ūśžśžżüłžū÷÷żśżń÷ūśłžżų äS·Ó‚KŃ&ļūśżż’žžūł’’ōżé-žėFĒå(äńõśżż’žžūżžżųżüóźųńżõ’’žūżüō’żś ūūš;ø°ėīüü÷żśųžś ’īč÷üžüżž’üūžś  üś?ŹŁ ų žłśžś łūžüśņļżīŲM^ˆĮdēń ž÷ ōłśżż’ łļ0ˤåźģōüöõū’ ūü’üüśžūū üū#BĘŹóźņöż÷ūüśł÷’üżķZŠŌėōóóżüž żśś ’żńū’'/·ģ’’ūõóžžš’ųīó’üūžś’üūž’ųžüžžöüųśüüöźžüóśż’’üüżüžžśżśłųüš’ śöüī’õń÷ śōśųžóüžūžųųōńōóū’ ūśūš’’ü/?=71.D" óćŻÖķō’÷÷ž÷śóż÷ųūżżżłśųöžžüśżõüõ żü’Ņšįßģ~ł’õöśśś’ųöż ’üšūļöūīģŻó’ sžźŅFĮö(ī ü ’ūūūūżżū  žūśżļŌ¼%*źūó’żśūž’ üūś’żżž żż%Ś’žŻ!žķėŽ×ÖéA¾ųśė 61āÜųóīõīåšé#8 ōčßžėåé!7āĶŪéńųūéółöōż žūłś’ōõüłż ņ÷ųõ’ ’$ łčųūĀü’žõ÷ńśųń’ūüūśłłńŽč+ ('ż’õż¾ž’üž  ÷[b€?öļüżł’ōśōžūõū÷ż÷öõõł÷ų×·ĢDTōūųöõųųūõż ūśžõūžńģļüńŚāśą#vī õž śõļ žöż žōžóģåųW~ĆŚūņųżöūö÷ųśõóųÖŽjd>üļķīßšįž’ž śóņšū ō’  čŠīņż ÷öčłõķ÷żżžśöū ś ’ū’’’’’ū žüžūūū’üū’żū’üž÷ü’ü÷ļśż’żõīļūł ūłżžūųüüłó’ūż’”€;)čžśżżüžž  ž ǾAļņ’ü’’ś üż÷ż ’ž’’ūūłżż žūūųüż’’ łś÷ūžżųüżõū’’ūłūžūü’ü ’ łž ÷śłęČ£Ō 4  üžżūūż ņ žł'IXķåōęäīłšōńžöūóż÷ūüł÷ü÷ūõ ž ’÷ļ!÷ūė śņżūņöņ÷’ų ’ķżü ų üśė;#ūņJ] ’śī÷ ņéūļö šń’åõóīõżņõł’ōņ  śņžśöśų’ żš&āóõłłųü÷ō śčįčųų   ųōŲŚü- &’śś’ś’ńś'åßö ėł÷ķłūū ļū#IIłßŲģēóųōū ęĻī/ąļ ū ś ō÷ų’łõżüóöüž ’ć"éŻ ž!’łģńźõśż÷üöļ’ōżüüųčB¾Ī5 Æēāģ$2 ’ųśūžłūłųł÷’ üżņ’ųųśł’ü÷żóņķėēņóļóö’ü ū łš’õōüüöųō ż÷ńśēóķńšžż óE,ĖŻśćńķóüūżż üī÷  śč ޹ż’õ#5 ųõõģ’ūōūōśžüšöõó  ūžõūļąčõź÷ų÷žī’õ łīē"88ż’ū÷śśżöūõšõžńöóųśś  żģōݼų'ŲŌ%ü’õū   ł÷üüżŁĢĻęłų’īīū å åū’÷ķņś ż ž’ōł÷óēćźÓžķļé i8+’ų÷łöņõļš ōõīń*õö÷ž  ōōž÷łņQ=čĒxŽ€,’Ķåžņųśł ūżšļüüö ĪÄ;ī;¾ß[ÖÕ:āūóüŽż’ü’ž’ž’ž ’ūūūż’żü’ż’ žżśž’÷ ū’’ūūžžõž ūōŁ5Śņ žžśüłūųž’ś üžś ą9ŻĒJöŁ Ł! ņ żż’ż’üüżśō üłłłłž’’š žģ  ö’’ķļõū!’łśń÷ü ’ųś ģģ÷ņńó÷ų’õóŚ’ ń:‡Ś/ēżņģųöń÷žü’śōüó’ś ķż Śńćšōžśł’ū÷śžüśžõü’ūūūōģõ õö÷ū÷ł’2’öłż ś’ūżüū÷õ ÷śéęń÷ūų`üüżśžüž Ś€OŗÓżōńšłśś’łų’żüż’ćś+ŅšZCźāž žśūżųūöä źčź’ō üł ųģ’ņų÷ ’ł÷öņų õ łüūųźśśō ’łšńžžöūö żūśü’ųöųžķč 9h'ŹŃ ł žžī’ūśłüõų čšSC䁇'éķž ūżö ōųóõżļīųųńüóü’śū żžłųļō ü ö  õū  ūńüłś ś öżü÷śšōęģ’÷łüüųūš ÷ ńųūöčķšń’’īłł śž ųżū óž÷ļ’żžž’žų’ńųūčėéńļćŽŪÄŁŲŅ»¹·ĀĶĄŹÆöųżöųüż    -)&*/6>MFCCbČXH€0,‘ö݁$Ć% üé9ėĮśļ€Ÿ €W󐌘€)Ö&%Ņׁš3OO€ ļó@C¬€Ŗc£!œ0 ņӁŽ˜åćØš€³ī24C7³P0€6&=-ė†Ō6€õ2€)ł/é«D /'öŅ+ ×8Ŗ,ė =-Ó FŻō#!€ 74 €åéL®1·(;…€T€ėÄō!«Sīö+5#ÄŅLńóŲcŲīūųSĘ„žõś Żä”ŌIģńŃą2šõnņč÷ ķöōÆ’K’5ꀒŌī#iöä: oģ“%ŚŌ“żŅ<Ó%õŁĢūč&<ŻEōźōىĢܧģ; æ tń>'ņż +)Ūē‡8 ¦i” ć'&Žō;ł Åįņ) 9÷ö.?’ģõHż2Gūå ’²%\)ūŅDų ä%Ę!ĻŃŚŃńčöńå¾įCöšŠÖŽ@ŻÓŃ^Ł’ĻŁå3ßįņŽļģŁų!Ąjō¶ąbÜÆ’/ 4,Ŗh#ŠEćČĪź:śĢ.ą łėĻ ĻSśķ gŚ6³8śé÷ Ź dł}¶>SD& ķż Į;!šEŅģā×Ī >Üū)Ö™ ē4żāėņščģįĘ7ėä1ĀĶŅßą$ŪīžŃĻ?ś1 Ń,ö®÷$Óż ĀT6}ŚŠÆ€”h€Į=ķŌ'¢ä8žg…ŚĒÕ®’,<ū0įzÕ ›ĄļóŅrŽÉ-ęqdFä€ęō~€€q)G2ŚŻ» ūś+ĘųźĆĻŗņ;Ō‚žäø=*Bؓ%”Fū"ü ØõŁQÆ€0öņÉłÉõå°L‘mō#€¦Ē i2ƒć 3Ģ"ŗ(ÅÅVė©Š#¼Ū 2 9±Ėaæ€C՗»Œ6ą%Y¼$*€åDŃJ×'ŽžW€ų˜Āā×gĖ€‚¶;&€łl+Ź ¬ . ¤+€QĒW]ŠŸĢśKµ/IŠ÷‚ä#óó€¬e}gŻ2ę:€8ÆRåäā€Mé$õßž™@A¤EZøHŅ‚Ć_iūĄå1Ō2ĘńÅįÉó€ķBńŅą„·Įäł7}=Õ†'¦} ^€)ŗޚūž«9Ʋn~ńū~‘ĄūĄŖ€ œ€+€]™9ņō£.Ī·ö#lȳ€Ä7åĶĪ"ÓÜ’YŠīÖ^õŪ&ČĻÜžķėŅ8āś*÷Šė½łĀ3±õ' MÕżŹ8c.ń²Ī‚ ģÓAKł ~ēųŁV¢X)=Mä$ 6M*ķåÜŚ łĒ¢ūčā±ā07EöAB1 ö'Bó¹:¼äś ŠčĪ ņķś~ŽąGÕ× 4@.ķېĶŪū-C‚ž7: łlÉ+8ŗŹśö(EŽ3āŠ 2ĪU ĪņÉ ž7ōP€¢ü‚žóéŁ*ČīžFjĢ[’ł Į·ßŖĖø[ō”ūä¼#ģõ偓­¦ķYń57ćč†I=Æ ‚ .4 āčÕ·±љ2¦Eón$ā9€&¦śņĆ /ßĀļ­ėŅėÉv åö*ŚńÓä¾IżśRļ6\&Ŗ7ö^ ŻŠ:%õó3ėKĮ ó'a:H䯟@ ĮļÕę£źōžRšG{Śõ €Põņ ļ+”ūPéŁ=kąśn5ūÓļšõÄÖ €½öś/,ŅBGļ:Ųø /ņūPĀH!6ÆßįJ3ü$0œņ©>g ö1 ž ·3é {ĢDö0`Y ˜÷rņę¾š ąĻ<ƒ€/=±æŽõģĀ}ŁńöšõĒ5•Ėė ē8üū§ų ė~ ćgü'>*Ųł"]÷ńŖŌLŅ<ōļć#®ß¤-å„Ź%æ1TŃ[U‚×µyÖž|ÖČ #ä~¾]”ہ#ėū¼…=RkG"ą[}Ŗ’\0µ:F¤š“Äö÷ńŹųźō§N›ĖŽIš”BĖ)6Żēƒ2s;rI¶€%é 'å(ē倒,¶ź‡4„!§D“Ģš›Ź+‚Öż‚×L³«Ėŗ1Ø\éĆĒPZõ “'*ځÜ€k/ā¶\Ņŗ5Ҳ}čÉšö.łąä[€¦¾öŌÆ²õĢ@oQG:“{rżLŅŻÅ›ļ$€ļ~„n,®13ęd$$)D«įSŚ,$&ßóéĢbéžņŲš€÷ę-R€ ¼&>ßļéÅ:€ōįī wļö ņ5ż×Õ(Cfļ#ķv6]š€Żń8X3üIä éū'šž ü(;:õCŚŅń"#½H·%Ųęķē h,öEŁÓļē@KāīĶ’ń=Ö"eõ“FŃ<€Š ūś #ćź6·oåfąjćFš1’ŠJ ų9 Łlöķ>×įĢ+č$ąŪ€Ž9ÜрŪł&Mķ"Ų½*€2÷ĄčA—ź kū:čī ł1Kõfŗż !$xūüü śųžōˆš¼åČ2ßøį)4ū"Żņøā-Iæ¢ŚÆ æß’ČļźÓżŃäßń!€÷ä‚Ų2=÷åų’‡łĆ鬝gĢÕÄłśĶµoÅāFžüŹé,O81%(ę:)ĶŽ'ęļŪöN"ķ1Ž€'åŗ®Ęė™äX^i1 €ö­€l 6½? ¼ć¹ŽńŗĒś¤ęŒ1!C€UŗķćPEŪ4¦/$Ö˱«D‚SĮ8÷ZLļµ’€0Ū~ŠŲærØ·¦7–ėƒŅÖš97ńŻVī«ćŠĖ>äńĒ÷ūŹ)A²×ī7ś²BQKóó* '-źŌ<ō€€ųFü€÷Ė7  ’ģ ĶŁųļ>ń€ĻŌŌ3ūZź„ĒQDéĶ&ÖČśĀ’ēīŁ&ć ōšó@Ś źX€ŲÕō!éÄäƒę½äąšŃĘŪ÷Ņōžž”’ĒCś>ńŪō%ōŚźĆå䎷ĮžŗŻ?ųįž€īĖė0€ō×åC°&Lļą£ąģŽåŚ÷÷~Óģė;EŲęO22óõ’õ';ȽS!LģīöNš6ņōļŻ1€/óā &÷ę ŁÜņ×ß@ūžņśŚķ”F*ēā *ćĢ€öÜ ļų<’éĒ ä'Ā [j1P ÷ ķż#ēĄŚ…BžSWś:–o›/^ óÕβņįž"įѳšõł€ģcŪN²½¼žćŌ¼ų?€õž' ß+ ~µŒj" ąŃFVĢńņ üä"7&ō:jīÄČõĀ÷öšķbå*ĘÓé5č6<;Äł&ūV-ųņ-1ńü2VAķ9Ļ!ƕöłÕ}ś<ģ(āŽ7-}ķ%V5ż±ųĪ=GÖķŻōśķ1šPšŸņŌ0æA&Uį/Ī Ōč9.öÄūŚÕIڌą4óéUģäÉŠ śŲŠE1²»ĖĪś é-ŚÜÄüęš Aä÷ ąa!KēĒ.+3+! ÓԌżéōĀ €ī'ł’$³ź°ųĪ,ÓōóAó—Ņ=@ ‘ä ņÖŪ8 O¼Cį2Ó=Žłó<‰%+“ŻÕūVĖ5ń²Ćæ ÷`†é2å- ģž™Ö&ŲNĮZžńńłEõŠH/2¾œóˆķŅ€€ļ(€N8PäĆļž?ąŸ×>Ÿśųꊒż'j6½ćššķ ĀąĖAåöŚÓącŻĻ± źé R   š×õÅa7ĆqēüŻ+ł¶€0ÕóõāŃÉę šįp ļĆŹfÜ Žóʱł īņź)’1æ$>KĻņ-Ų4ś ųÓ•€ %4166>˜ąŻŗ˜ 7œŽŖw7ī2eė9ļ|ńr€3$’Īś@¢ŪÅŹpOī ¾YĶ«¹#Ń1ÆÜG˜óéąĪŠąŚ“ÅÅ"æé(uķ>;Ä- ī*{õ¤$€$~ż*€"ż;j¾‚˜śŁ Lķ,>Op­ź7Qõ’ šā¤€ ā7dō"?q>'L®(øļäåĒūļž€/·µ¢¤žĮžE÷å’ė0čźÉĄłųČ)ęKī3<+Ö/ "%ŁģĆPėö8čóńųé4ó/ $ō= Ć:BKļķĀśõ$ū ćģ0+÷Źå»Ķß"8ŪžĒ.Ģ× Į÷ķ=Ż*Æ(,f3ĄėąZŽ4āüųß.-żD’ļ’°/ż.“  ŁÕ'É Ś/E÷"$4'8 įč#Żšņ÷ūė ĖN ÖćєSé? ōP (Ž€Õ ü7‚€„;Ū€čß~±U?‹·@€\/{ƒ¤€jæÆ¹Pł aõ”ī~FXī''€Ģ£~`š?PĮ‚kį퀀€€aÄ/ĶŲ²E€ņƒEÉ |€!®€€D~øØŽ€Æ€MŃĢ„ĢŠ{€N€ćŃ!}ļŲ€Å;Ķł}ÄČP’¾ €qŪvÓ+į瀂ig€ŁŲ«`€€ ‚‚€Ń÷2+ĻŪš¤€Śīõł@i@¼Č Ö0ę \ģŠĪܽ/Ć/cōōއ‘YøĮ›…—d oń!Ä6Ņ~»ņł3 eŅŹ°>йÜ«ÜÅ~ķ®˜ĀŃ`»€Ņūåž“YŃā1ŅĶ€D%ć' >øPčQ÷"Ņā¶gż¹ Jl&¬€RńżŁŽ†Õ%%’Žä“õƒÕČł®®=(GķŖ¹`ŁO•įŚŁćĘęóŌ ČB`·ńł²=”o)’÷ĆĪīćGėč(µ ›AC'Üńy€:#ćæ’Ń ;*†O×éLā®ņź³óäÉ՗ćįū FR׀€ŻGĻ€ÜŁ*ż»wŠė³@Ć/Ń%dų’ŲŚĢ ’ę’Ł.(×ńMš$[ŁMŅÄV*#ŲęAēčŚģ2ļæ3żHDÉė€0 żéę #æĻĘĄY¹44GE¦ńģ–Oż&µB=nÕ4ÜĢŁ. ßśCźēžņņƒÜŁŽļ €Š%Ūö, €ÖķōčŹ ćöžć)ž6š*ž3ļäJ€= ĻŻņ“üĻ*&śāµBšŸē.ó}¶!A’¾÷ū’Lžō¾Źš*ōŅ# ļķŅfśÜ ÕöĻį’člęėŁģū’"ż€žīēŹš ŲÉ$Ņ ą:Ū: }ĢÕąóćņAŲź>ń÷äŚ9įö žžõļč ÓŪįŹņŌ(ĖXK ĢĢ"²ų3;ׯf1é?+D ž(ń¦ŚņĒ\č#tąD(Ū€Ū(ē*%ō’łĖįĆķ`° Ö>°Śż%ÄÆ2ą/F§’Ü߀7éŲēž€!k)żt?h€Ū ł9ś<Ļ9’ą ŃÅ·†ļų8XįS5īĻ,’åų-ėĘJ4įŪW5īEŲ *# X¶ģßĀüƀõ€ßĢ=ūĢ–UĢ)üÕÜķõ" ć4)ń ūCČÓ§ &ķ³Éńėčāų侚üĀē Ė" čęAĆū&€ą+#)¹Ī , ”ĖĖö2Čż¾ĢŠüć±3ä Ił-1č/ŻŅlėhņ×0ą3ł”" ó ,ļGČ1Ę üRž³Äł€ųõ’Ō:ūÖł5"żŽ$ ōCęśĶ)č ģŸöūÕ '7ė É»łöķ3_śŽįĒöEūā1Į”?“°M¶s€ćąÖ÷€ ą霈ŖēlĆ÷3€hĮ”^ÆWīĆf1¹½įģķAą Ņ™ą÷dz{X1›ŁÖ÷ŚŗŲ~°DU?ŅbTKfö]ż+ėļ]  ųĒßž>ŁĻśłŽAžŚT}ū¹&7Iɛ”#0•ŠĀ&īŠĄ¾?’QņÅŃõĪ×½Ņļ¼Ō Fē:Į&3»€"~]ż¹ČŹż•4õˆż:(ü-ēö-ź® Ū«v<>ʀ5¢Į ģ*õ ĆĮ¢źź‚Ė€<ówÆmóQ|oÖ¾źå¶Ū8&ßåøŻÆ"5Īō’-¼„æ $ŚG»ZĪ+«3Ł$:äō>łŪóśŪ¬µČ 'V ȜMķDšÖ ¹ÖÜüÕŽ¤ęœ*ŲOÕ!ųņĒ(0ĶD#éH$ŠļČжÕ/Ż ÓĄ<čóųåöü’žč>øęņ^<p݀DŽ1| ŸŚ€/ß«€.ż6¼ŁCĖ;~'õÕūi¦(€šŠóf¦D½§ī<`€7ݰ€ŸN£šŖ¤=&Īėķ)øŽ€+Īś€5eŁœǁü K‚»Õ ”æßć%Ė _įĄßņ%ĢŅ āčÜöē­Mźöķś5¾ę}^.ŪćÜś6Mk»»Ō€ūĄÖ<=Eē €rą)ūĪ¢„ņ€öŚ~ 0€Ö¹FzńĄ÷ōs!»člVK#ז€Ź’žćįA0Ę(Ś ź’nõ į[(Ļ€ßŹĘ !Bęƒ "„ā"ß÷/Jąų@|śŽ&+ ĮnK~ — j€3ęłėāąÓ6mĮHīģŲčåłĮŌ=®ā$iŪßóįū“ü+<–æ+0źŻĆā=^AńßųōŌ]č.Ō‰°%Ņąö5½äöSŻÖ>6!Õėųi¹ ×5ĒšÜĆĶżī™ÖŽĘ÷ŪŚ/(wę Ÿø­üųĢŽóZ 5 Q7ŚW6üņ õŽĄżĄĢųņ„Ų91 Ću×Ė?(įĖ?„A(ĪĆõĮ ęhŁÕ×öŃō)öęų:aæDg6\ą7$ åÉ(įĀ ŸÓĄī ŹėŽÅ&uš>žšÜ¦&ļZ>OņŃĖ!.É’÷Æöį€Įדģ’ĶM#Ž ŌlģL“€“ÖóJ«V Ä©ŅĖ—ŽČb1€·€-üĖ8ī'-1™.ó šźäÜŃ åņ(Ģ7ž  Ņ€čöå`üų Ōå#&2- ļśģ żźė3&ó’«æ@ķJē'÷Pćź/ éķš äæöęæļšęķčę÷ =-źņņö*’ č%ą/÷ŚĶ ņéżįÆö?ķĆõī(źūłļ÷éūŲ÷Ö ļ€ķ;8÷ōńBļš ņģü/ūó1Üäō™üéńĖę ±‡«7\H€ €^ńꀀ?*ł§“9ÓČ88Čx½‰¬€Š…&€Ó€Tõ£€%Ėō€€DūŅPƒ¼˜W¼€ €+~¢t‚9~Ą€ŗd³ó €”Öķīõ €Gu÷°E)§Ń“€j›Éž Ńö°Ź€U ó:ėęAŃ’~±±9JĄīXŌŲ#o§ŌÖŲ.6ęłO’ąa)ÄŽżģQ›ź~Źž©“”*ĻQ{Ź~Ś,sęśA~H2ķkF͇š×±ŅJ™śŖÅ Ņč]ŽĀŗ€ččĻPéi¬ķéqŅ4ĄžŻX6a±Üē'ŸH¾+iŻ1ķ"»Ś„”÷€4 ±ė/"y ¬€D«AÄ*~¹UŲ1šXėÅŻ×׿ڶõļ“PÖ!āķż¦„Ģ® ģą9+aŲŎ3 j»D€0ųÆęĢĢåėēĪ*öĪ[»ó#”ÕĪäYŠ Ēžż†7!nYG4Ū*ü߯¼aö$F5čå倀ū-åń€ ełžėźėM?ǬöĘ.€Ū€€\żŽ;.€öGÕ£.źčūh2€{›ģģ?ģŪÅdł¦Š_§¼ŁA鐓N¦żß ©Öo©ŅWWŽņ €łĻ žĆ£€0=÷ <*¢Ķūīąöé€Q湿`ģ.D€˜ōāŁ€ÖžJg,D~ó&-ó~ć÷śē·\ķiÄ!?ēKÉßßżŖž m€Äw€|Ž0߀Z1ŽŒ €›vÕN/Ē€Ø‘~!6€ÓŁśķ2€kÕŻQy€€Ž4‚‚Dœ°ĪÆXųX‘}÷čÄ!Ž?Šßƒ€€¼d€’Tµśzn‚¾=UŌõČčśżģ—µŲŠĢģ€Ī,:ōäč¾}€’.€|~h~h­m—p?Q€ü+Ó¬äĀ>“}~Õ"ĻŠkÄ}€Ų#}B肀-æĢū™Šøć‚[„@g;‘ ~~y<å²ļź;ńé„ĮüAĖ„€Ū”"××!ģÅG׿T8G>‚?¶šU—Qē€äį!H=€ś¬1õš8ן¾‚÷ü¶$ŪųPŸJ$÷§ī’d±ČzBĆ Õ~æ \Ī7Q ó϶`\¼×,"…*É~ÅŹżŻģmZ8ś©ælģĄĮھšīĻÄŃŌ&X¹[Ö#€ŁĪ€¤‰’÷P¶)Ŗ!IČ=ēĖ ±Ā>ČRæyÓ°ˆ)•bØX­õ<Ø­źXńM~y€€}߀ԁ-ėo2Ā-÷|€ę¬ĮŠ€÷ŲŻ€€€Ė7Ö° ˜­ÄÅB ~߃÷Ė”.݃#ƀ9›ßŹ€€Č€Ė(?‚¦"€ |ž*žĖĻž@/怀ųĄßł€4T&Œ €~}~I‚j·‚Ų€Š+€9.€FC|ʂ€R`Š}ÅMūŲ~”€‚qč€ˆ¦Ņ"€mž•|Ķå šƒ¤%Հ€°Ŗ›…„"żx&K€‚±|€Ō€Š®³t AŲVb€*ąŹ%ī$Õų¢©½”…š«<člOµQ€¢b<€Fżóʞł Ė<Ļų*”Éåßļå'8µÅžé ž»å8õłģ‰Łæō¼ž±+ ō é¹ÅĀ ūOš;Éłćō÷ĪŃźĪüĆłå! ć!ž#ė łĻś#øäżģįÕłų ..Üķ)ēŚÉ]ÜöÖŹļ 2ęėĒķāæōł½å'ŽōJ±¾2ćĆ%ųāś ŠĢöäüß%É óēõ+ĪÉżčĶł äģ°aŪ!żĄ Ą ±ö½ĪŻņōųćźå&Ŗųµ3fõžŪÖ\ņ²»ēöĘŽ?^ō$ 䈜ēģ eŃ žāĄōeżł÷-ō ńų÷ūõLöżO%…ö°ķļųĢ æė 0ņßZ örüžųžÕŃŽ1$ģC¬ĖļüÅŃŃćŃĀÖįņ;8Éķ4żļć4üŹźßž.×ürŗ¤Ō܀ŗsęĘåHĢĢź.ģVw;€¼UāD£Ė>J:ßUÉĆü‡]YJ¹š!ŻG{,ēbŻö  €ž|)—čŽģĮģ€ČČ8į·ĶĀ7„¤ž|#į–€Ģ+>/ī ęŻęNۃ¹é'¹ģb#üū|&ŽdQ Ļ;•€Ć*#įĀ7Fą$Ź1āaŚūāŽżß ˜€~¾»€“°Įō-ÉóŲÓz%'P,óUé48–Ü’’’Źļ×ļįņӀ‰šQńø€<ߑ£,£_Óō"öōÄiéEŹĶęĄŌ° ń'€£"±ė»ńī‡ūķĀ"Ž'É[ ö¾XĘŗ,Dū÷(—æOū+źEč½,ŗ8öćĶĢļø1-?÷ ¤9€«ö<Ķý£»ä$[fRĆĀ÷ū€Ćū™$˜ 3+Ž®€ļÄø‹±7ų#)‚śÖ× é‚<öæ]Xį“T2Ѭ$Ō/Śæ.’£čöŠźß\żäŌaŚ•@U4N€/§äį¹ŖčK9TBå€ąĒ*¹¦«ĪśļŲ,īėÖ/ü<ų ĖŁī;īÕKĒŅUĆņóń"ē Ū&5źł$Ģń€üÖb:ē/5­żók¶ E5Ü JĮ’G×Ń"ś ©ń&/7óĆ'z¾×ŪŅł$.%3ć €Fł"f2k¶ńŪū3éą1Ś}Ŗ:śJ@aĒ \ŁŻŌ0żI  Cö-ƒēŗżĄeR€Ćւ§_xÆ~ßÉ~õ{öóU€ö€•˜€€C­†ÄŪ" ·m}€‚Aųƒ±| –7ĻqĻåžę.ó&ØÄ}‘‚~•€É9€¾€ŅöŁkŹŚ}€0ż_ÓĢÅĻƒ€¾ūöɏķ»1]Ēŗµ€ōŽŽ!ł-ė*Č|U€ €SĄ6!€1dŃVL~øe²CŁ=‰ €$Zøś0>€Fŗšö¦Ŗ6\Ą õ23‘IÖ )¦ģ‘ŁģČt¦śś^‹˜ēąå¶Œ.ö„ńČŻē€īŚ̽ōÕ! ø“~j’ Ø} Xō ėA µ,īšĘėćßÅ8V+Ż-ńC6ź#Ė ķÅýć€;čĒČ“$~ų ĮzõEm§ÆĪ,€Üśü+&ņ€Ø)r ż`ĖÜ"3Äź{½ /¹/ń)©Ņü+ ć9’żŻ-Ż`ūĘÜųŲ`öZ±?$Ż’Öčó Ž@0D]üzÅI3ģŻęšÜŌģÕśx/-8 ’ šļ>gĖŅ#·†÷ŽųžŖ įÜüĢéĀĘóųĆ#€ÓĀDŹ‘Ų  åó č“ĪõłÖµ7Ų~ķźłĢ 3ō-’’ü.ö×ßū‚ė)ļ'±‡ ČÖ ē‰ė>ęū g®į+R'śž›€(ł;Ł:ō؜ņ© öלŲÜŻ ģ1(±?å$Q7Ž7‚ą õ#Ū’oō4?A'€9łFŚ€Ą¹¦ /9éĪƀ€ €ģæIłņ÷‚*Ä4,č:€€€€7jņ'2é ē€ķ€‚iHü€-/ß± žų€+Xžą&€4ļä.č ^śņ"ĒCĘū˰€IĮVÜT5śÆFė€9µ-±(GųįļÄ>ŅÕ&_Vį‘©$o)gõžžHł>ķAź˜ “8Wųķżńå+8ŗ%Ó¶ä@čėŪO§u'#żŽśüóæµ`!%~ŽśįķśŸČ”ó€1źIŃ)“;S4V#Zʀ~Eū€»õ*@Ż~Ä1) ŁÅg)ęØåōÜf"ȱĄŁŪ ńc„ń Ū7^gĒśÜō8> !"ł—ņ/xų°rŠā$‚7-ģ*õE#ļrĢ%ę†ķļ.[īż€ģ 8śŻs%Fč.šÕü— @ ĘŻ»ūś1 ¹:ģįnSĻ„&š>€äŌ—Ä åģĻó Ā.ļńė¤U3;ō“ų(ZÕ¹°B2ÜŅć Ś»YDö)¤$¦ņ°åÅĀśÓ%žI7źQy:ŖKeŪ# KØ×·Ł÷ą!ģ ƒEJ×ö1÷ü/£Ķ7żę€ī(’’,B—ÄŹ6Å$ź)Æ„Qīb Tw"ŹĢ¹ææG āCŠD÷Žī(Æ u§ ō›>æę½Ń&LŽ; l€~,ž€čD'‚Ø,Q6q'“/€Ū€—«`Rl€€ęÅæ=ŪLü JėĖ}r“žB¾Š€µ~ō¾Ś6øj€ą®  @$Į›9µ€¹DøĒ€~…‡́/€l~ÓŌ)%čąš@»Uʰ7΁Y²ŗ~€a &ł¤ä~}öĖ7P9€Y€5~‚Ą‚[ T}±–€€h{3±ų(āĻ$T)“€‚ūŁ~1KąĀ>F€wÜŃļįśĆõąä»ƒ”€½%ā“€J¢pŻ€Ū*rņżūŻĪ÷ ‡9Ż®€¤€a82GšĻU-8 ÷lī÷ €3Ķļ $c޵{Ģ» ƒę‚× €ĄŲžŠ€Õ÷9īDBÕjŚ »Ńėóļ ĘŁį,ĖOžÉ« ī=9µ¹ę810'ݼ&€ÖāŪ;½„„%ä*śæō,Œś$宪µł$L7²Ō€ńęłżżÉ,FćéæAķāēżņņ®±>äŌ ™€d€fĘčÄūśÜ*ÉżŁųÄIc ½)›ææųDÕ1Rž/ū×0!!ŌjÖBė$ō'€ß€7:C™¼½žKO·ž‘ą•ōŌķś ā(ņūēz­æ.!@Ē‚ōÖśéź! ž·ą~ū0>ēÅēY¶ū€;ģņø)÷ĆĘ5Üū4€Hś«ńŚī÷4Ūłļ”öKO¦Ė1&jüąö„Ö’eš’ńą­ §—ļüŸ9Ì·ęXå,ł?³Ų%Hžåć™#óōĖńČƵśÅŗķ C ü€é/āąöP.”Øē[C'?!»2ų ēōģŽ€į¶ŲÄŲŻ söĖǼęćC1ß%öl<ė(ź»ĀĮśt»åš×÷×ńaµ?ū*ņæž87 €č"ņųõ®õ(öīĖųÜ}×(ģ*ĢŌä5ÄL6ć®%ŪJóĢÜśü ŹųQ›ŅPųł–šļĪüĖ'§ń>įÄ4²/. öČ:IJS\å%Ü÷ ōž ŗŌć· ł+śī ż ūŅ łԌ< €AŃĢ’å’ļ=š ÷}"/@k¹õŅģó²ĶóĆßö¼*æīõž³ÆÖĄ Óāšķ’‚³ ® Ō?æ÷)õÅķō""IIV ņĄÜ'łģĻÅĘņaīrö5Ļēł)ū<ōŹłŁMō0€6ķĶ@©Ėį'Dŗ»Ķ;ā ļź A?8*‹ś$ŪķÜILūG-öźåā²^įīÅÕä! 6ŲM¬ę‚©ŻV Č’łēćgš€ (£_¾’'uM靀gʃ'ü’% āÕ÷큿²¢€Yķ*µĒfōūøźą¼!Ś pņ#ˆĪśī üü€œ€ŁüļéA6Øš€äé)“};”ļč4 뀀ōßgH1(‹€Żæ’€nD Żčåö7Jäöo/“Éš€ÜÆłīŁžŁkśč|½.$Žę š¶ż"~õj99Į)÷Ą±¹1 ó€Ģ7įų€ūż€!“(ź5;(1Fęhn?ļ# ~ż~šX4Ķ[·„Ž<»"ŚĆ‘Ż#ē¾|½ĪņBŅīļ@õPüŲĒ©+17āĖćčLÓščjLź±!Ļē»õ .$7ž-?ę@šbÆFų‰$š*.(’E·¾ōGŽČrłåģÕ u ééņŠģČĢō&rāęLģ ž»"ÅŚń&(ę.€ļõ Ā~Ō€Dšæl€ÕG}/?6Ż2?0ÆV«žµäb2ņŃśń¹ÅĒFĄ÷ŗü€Ųāż é÷ź>ųķ ’ÕŽķ + Ļėł~+śöZźLU9 &&Öęä˜żl~ōl Ļ“ż=dö€a®¤€Ż ¬ž ą•ūßŗ€īżų ±ļ€#Ż ī}ŃĶó?óŪA¬ĄėO Ž?&ņŽ=4y ą6Ц =£YėkĻ€¶€ų'Y0ōŹę䦌šÆāRź ĖśTÖØ+žņķėņÉčń0-Ó¤åę€g¾I1(>%€|üµœVX]B"¦b YĀ@yŌ7i¼ß øäv¢Ė‚ź €ņīē×b‘¾GÉ£Õ×éˆ湗#ŽAĻķÖŚ¦Ż±ä=Ą; ¹Ąąä9Ļ}$LŌ¶Ā7Ŗ8Pģ9Ńä@³} ō±»ö>žåņ1ā łČBõӅ ś –ģ)»ŽģXśóžŁ×īŻåČó"'Ė×ų#6€õ?¼’€€ä¤óšżöŪ+Ńé¹€~÷XD4 Å*˜¹ņńQ" @¾iĄųņaMöM(äB ĶĒĘóū€ Ē» õņłGęņü61Ņ%÷"ķąļ÷ļöĮ€õļēĆėśÉõ & ŗ÷śxĮŗ’~)žŗ ōķ1<²é Ży hß½ųŻūp1 EŖó@PVøčó°I‘µāČłš¼ń²”Yݾr 5ņŗ€LéŲ&˜•–Ń’J,±ŚĆ/ŪÕF<’|CF¶’å$Œ@Cš ś'{伀 βź~€T)?Ć$ņüüńßßM¦čūžÕ;3¢ėōĪīeōō¼Ź!'žDÅĒ>Ļø³MŠQ2ń)„Ö¤€A0é½2ŃŪĘd ēć!ā µĆē:Õøįż€*÷§XõĶ*.¼ż]Łčb1¢ĪżżY8 Gń„\ćجū×Öī¾ÉŽ5µöų Å0 é8-ź AøW * „£¾+•Ü€į1Mę.4Rė ¾#TĖņ’łC5ŗĄ#.ŹėjÄń~ö~~JØ'¶ōo“ö:ĒŅüĪĮPģæī>Ōš""%g*ēüēT5— Ó& ’’/Ł łįÕųT†ŁėœČ)eæĆü!­ą ¬”Ž(“ŲŠ-:RōŻä’š Éų äiö½:ėōDöz_ōÄūż’)SņÕŅöõ®µAóõ‰·ÜĒ÷ēā6ßۜ,Ģ+$ä­ żżś*.ڵžüŚ?źŠ_ŹŽó!ųēž -æļ ß6̳ķ īį&;-ū\˜ Åķ€Ūķā{šķöż Ł93ōłļKēłüšČ2ņ )<ųźÕŹæņ®" ®ż4—ģėõœ(cóJČĻžłŠŅĀķ$żf»rŁóDlr4ņB½ń¹Ķ׀ E|FÆ|łŻó;~æčĖB¹ŠbÕꁁÄdźčó}Ź7öƒ Ęēģ³õP“€3ģ~˜ésś2žī<ś®‚™ū ćž!]ųqEń€\&ž¤g1ś2&EõՑūšē²48Ź®ų·€t$& ÖĒ£B€ę#‡’$,¹ÆLÕ½ö'€1厁/X¤öģŽčĻžĮ©Ļ Ē*į§ł¦}ņׁ“£ÜG&š]ćaÉ€HY诀#〲Ų#/ķ8±’ŹūĮē„ģėĖ~ļśī[¢łµłR· Sā€Pā¼’¤Ź @ &šź5ŁE@™ &ę' ĆŃćó /¬$5Šļ‰½÷:GŠ)-€eÕ”*B‘+ū<ģŲ€ļõ]©ež7;E¾Y»7#ę)U;B#80€€ąüŚ ’]wõž÷y:Ó 5ū•ÕĀŲå³A{~ €Aą~˃€‚v'ģŁł€÷;eĶńó`ē}ķÖźt¬ŻĪ»~7€€Čf +€0Ių¶SRŲÄH¦ļ˜éŲż Č„}$é“ķ«€.żBŠ–#Ūt€C’õöCÆÄ Ļ/Q€Ā9=€ąüØ,ĒńŲ6±Š:C¾!Dį·ČĖ4ö6Ōļ„€ź(%„€„šeĻųD€Zó€É:¬Ę,żEüēvQKøķ Ēčūł“ü"Ž€Žd2ć£!žĀ§nĖ€,![T Ś€(ɰf€LĶŪ‡«YOށWē#wŹŗ©kŗ=€×°]ÄEµéōŠĒh rćÅWˆßc’C¾ōÖīŹüŗ¹ź  ė!æ'‡įŃ Šn÷ĄÕ ZńūIXÕOL1@%·²Ģ€HśĆ>Ś+ž¬Ÿ§ÆNžņŪķń³āÅģ$“bķźė Ū/BŌż|ł9ÓĄ¢.ļ6BNi™ŹŹ&§ßl€q¤€čż_PÖąė&ģ)µJ€ ŖĘøĶŖ»Īoė€šó8Ø'΀ʀ£€ä½éZ€ō? $ģ&!HŲ»}€õ©Y×ńSgž¾Īl°ÓšaD ųŠūą€9 €4Q~ÄDšõ4©āßły½ųÜĒū­śŻéš±Sś"ŖTūĒ +ßEŪō ąrśgņĆ0į€žśŽń€Ģ€·Ėņ€ƒ<õw«ņųÄČ#žć-žæ’.ŠßWAźüż '®)K03ļ)"é+öŽ śīKčŃ3BÄ'īīģ>Óåė Rį„€ķ ;"ļUķ÷#źŚ.'ŲäćēaõÖģ/ ~Įāč°äÜį„,ęSńĒååą×Ļ×õļėiķÆēÜų B43€žī<é ɖ$č>łķŚéūŪ€¾ÜļėĖõEćāöŌ āŅÅ Ą÷6ÜŪļŁ>ųÖū ńä’ĪčüŪDžs€ęčÆ €¼Ś *ICĆČņ€€Ä{CC€ō/¢&­>€(ą- ‹ź€8¦8ž#A½/ļė‚Ī€0€åaØźSų!­€šź Cą˜Ą~_4,pŠØøC¼3Ó ē°ģ_öÖŃ߀O&BE€ŪžŲ€ė¾B~&MŻ9»øÜmØq£‚ĻØōŲ¾,ō6¹1H½€€ėiZķµ€7€ä©|R€ū€~T€ īĢŌÆĆE »Ó# ķĒļ®į-ģ#ļųF›<€ēČ×ö ü ģĖ /ž ēė<ó0ü _łZņ»cń>ļņ7żÜ:ŲĻŠóż1€ÖšōŁį8×c¶#›/Ó¦āŚå#¹M÷|¹6 ŲÅ~Läļķņ§ń1$ņģī‰Ē/N(ū?ņ+ó ó€ųå7ÄqI )?Ü čĖÕĒ+€ ć;8\¦†4Ģ,%ĮĶŽŪĒųÉ+ķß'į,ķ ~ģą6Ö;’ī?:€ĢPӃDϲžé󹀦 ķĪ&ń)'9ÆĖ'²Ūż¦äė÷KńYŗ½'ėŽę5€«īŲ =E¬ÆĀäė#Ō”źļŌYj$ķ«÷05QÉØÓdóßģĻ7ąŅäē‚AĢĄ€õķ÷ÄÖŲ!õßÖ€}˜!ø€ØÆbī㚠ĠēS‹˜—Žńų)æ€2øļ NĶÅā Ū(}€‚.?÷īģfĶ 5¼FĀ䊼±"XµĻ+!įč€=¹ ¼ ³E7Bū+é¼§é!y į¾*#(©óÜׯ5åĶ2Æ1šć+*ųyęõūĆ)·V‚łܟ€äč AŌłŚ:Ķ įÖÕūłi÷ ÕmŅ;€+ŗøJ¤ē(łJŹ 8C #Š“ ŠŅÉPī !€½1&ł:¹#*¤žćßé'Š”('ķ¼UÅ éŻĖāģ:”#ą#nŹ/QõĘāŲlīēĖ’,ä×Ę"²ņ)É ź É:CˆõĻ Oć Ō)żĘ¹ņĢŚõõ"łš `Ź’ ą×ūżł¶Õ:Ēäę1=5Öļ×80§Uą/fāßņÓūÅź¤ŻłŖåŪ( %÷ā& Ź3 ĶMŌ Ņų÷ł ń»+KÄ~õōŚ\ ))ÉĘ9ŗéę śüčūü©ķąś²·+|$Ž˜Šź'UŖ€LŚL'ģŃåC/~ĒńK**åaŻ@§8āĮó ūĪņŌüü+¶’,ō])}÷ģ2ķń& >Ń-Ėõéūµōæ%ėŌõéßC5Iņ ō 7ß&ŃžÓ$ ķ“ "LŅ=(×3 čŅBŲė&Ä(9" 1ōŅ&S£z0€}×<€Võ$LŖlū†~āJ{¦A@<€ÜŒ!”B€}Ķ?]€}žŅ~°AĀ©€“¹±~«³€³D:© ‰€]蹯Z-wI€›€_”N°€€³6=ā į€Į-FĢĻį~€€öR€±V€Ē“w€}Ģe=“[ Š@"Ļ<ķpE€Ä„šüÄŽ“!ų} €¬€äĀ«_ķ-4 )ģ8€Ę;~żõ€Ć*źy]#4Lžø!€ ©ž€¼½LīĮ0ŽŠEÅżvČBꏁ6/O€;ÓÉž2Méļż1! ²XŠ%P‚8*/ż×ųž+JŻŠ(p® 9É?’üŁēs ęŪõÄ+ĻÄÅĶö Łó öąÖæ~>ōõiĒńčūčgīōĄł?AķOų— ”€åó2Ņ3‚ļĪŻŻ|ģ~䯟ģ­)Č>ų~ü€ Óķ'īōń8ī¤č(;#Ŗ?¼ņóP°ōżōńēÜö¤Ķļ Iļč%øćČļč ź•ė3łė!ą÷*īó&!ś§Į2©LžbĘśĘ#ĖŃ óIėŁē ܦē åü <źŌś!ŗČ==ņžÜŻQŅłĢī:ć*·„āŪį/÷½+”© ģåéł ÷ ×ūīļ&šŌåÜ×ėß Tūάō÷+5ģ7dö%ĮHJ/żõĖņ–ó³,ļČÉŽB²4"ļĪūõ+š%3V¬-õ§ŚĘė# Ņ×1ēK %ęŅ­ō‘ßõć=xĶ!'ÓUтõŚ×Š0¾ šė{4'\Ø5čæŒŽģ˜ė”ć& ’QŽū©Ō5­ŚÅĪV[ķō ~~!L—Dęgö)逷ęQōūļõŠ€ż©śÖ(?Ż.Gė„š ļŚņ č4ī*婂€į%ūōžŻńŁā•äÕēžČĻPäÓ ņþ ö~QķÕÖ,’ÉN€ƒ€ńĆø3'ĒŁjåŚä Y, €!²įUč€ŲńŁ£1o `‹š€½ü1&»øņ|'„ēņ€ČūŸīä$ū ĢƵQ'¬"3Ļ’Žc7jA ½“ ę?]öąįģ€å'Ķ^ŌĖ><#8Š:ńÓżvĖĘŌIą„s;”ųæüūČ-€nūĢģ‚ų„… zC€FˆTßü=ŲK’…–ńÄSēß³šō¦ü5Põ5õČĪ! Āųa(XčEJČŃ:&ÜTņüͼ ×6n°žŅÜżÓAĘ,н»ž¾0ŠŽ ·ļųpó2µč Žż<€$€#šl=āÉNéÜ8Ņ€€9Óē·YAåćÜĘ(ŃžeĄ Ž ųü®½ü'F€ Ł36ČüēGīś€į¹ī„‚ZŲßÖ /äńź,†ƀüķö++ł+SįĄ€źāš×]€ŻČ3 ķH-õ“ß“ń0ĪÉ;ėäŌ¾×ąĮķ(ėģÄöģųYR]K[B÷ō5]ĄÜ6#ę&ÕZĘŗć5ģ-ŁÅąÅwĢ{ć”bļWbł%p€2€ĮüłjĄvBĻ@(ģB)'Ółķą"¦uĮŲŹ?M7gģ‚UØYćĹø*üŁą§S_'łņÓĮFPą5’0ūķ2 \ H8ŪX<Ü!<§1€ø÷}åŁ†ĪśĒ×!ŻżG[łĘå·éśĶF0å4Kū"ҀĻĘÖń’=F˜& IśēčīIćŲåę³FY8ļYZćŌ£“čõŁ1%ü„žųą)\č8»«¦ŻĆĻ ÓŠéOč O-ś3'5‡Ž=…²āäžęŠĒ 9’łP! !üšŲ Ł€ #„éx-co¾ +ļéõwрßżCé$«ŌUžś4ę,ĘĒö€Ś\łfķŚŽEÆf݃:ļ揤š‡ōŪž%+5ōéė›Ēņ2Ü@0Zŗ“Iy“ŃŌŚ€Ó€y½€ttL¼pķ¶}’÷AöżŚł€,ĀŽČG€š2|}ļQN+€€Q€į¼Ü“/}4&a9š^°•/õÕ €—ĢŃ ›~Ųō%ų ķi×ŃŪ4źöM<‚²Š"7€ö¦ŁŚč‘[t•“~}[µ€ė082€€~æ8±ØŲ¼@ßeāós€&fßb$˜·T“gŁ÷rpDĮ»"~րE īį5(UĀ“UQØsF~Y8,÷&Ś 8wĻśņ'Ż~Ē~ ²ūč‘^Ä~¤Q«‘7C:ŻØ•JWd€m}Oīąæ’VŠr.+ˆ,€cś‹gŠĘ€$€ß„‰éŲµüR€€ß4¼K‘)dųKą}e=‚ūāāć’€Zø‚Œ µä–$Šģ$źIŽż;ł€źŅŃž—\΁^y€ĒँO—9ąė'ŅŻ€(»įK’ŚÕ}ł°Ńé.¢ł č*Ó €ģąłīJ4B×Hźļš÷Ū值żųģĻćAļż#ōõö"ŁĮ~=9#Kæ ź‚4 ž3:ļ{ ”ā8C? šüĀ!‚č×ĪĒ1słŚņÓģ Oēü Ł(ź45C'ó 4+źś'1 ź¼'ż®šöōå‚ęÅÖŻĮń ÷žŪõ --}ćĆŁųź-ł€ę%ĶżG7=Ł ģ€üø é(’Ö$ŽHī4āį» 0 ž>÷Ž“Ž#ńµ /ķåIü據$ż&śč1 &7ŅN®Ž 3 ą60īųƒå0ó(žōūóźžė&¢ šäĆ>3Ś2õ’2_5č ņ+D5öżå!" ż-Żą¾ßųģ  >&ū7 Ū4$&óóņžŁūšÅE1¶ķ€żüĶ’óń Āč'żµņĻāŽ , š žó)妔Jņ€:øėŪĒ;A?gÓ³ +§ąåŪ×⁀€½€€ļš€ć…å ĖéL7p#^*)Ż"a4Ī}4Gī(#>šó­€q€0€ŃßS ?3ū›½³ēį—g<Ü©€ĢńB ć,OYsfĀŠ~$Ŗźćóķź€¹9 €üß'ó2ŸhpÓ#',OÕ*ņ&Ąc,Ō€6±żmĖd«ł€ž ­&gńĪ÷ž2ųŅåŖé=ė7+ ńģ9ūč*Ž ą‚'3uCśź1aߔ#öĶÕļ1ķŪä$A6ŁŠŲüŠĻ„ ÷ń 5?E€€‚'S&Ń';ĪNÓ%”Ń~Ęč’¶Żń!»˜į<ąŽp¬s9ā6Eģ>ķ;[ĖÅŽ&ōZx*¹āłM Õ÷!ŲČ*ģŗ$)Öé8 š‘pōūåMSޱ#PŁõ÷čµÄī’ž}L §M ׀)ĘÜJåįŖ¹fķEæ+€Iłö“ą):õį€~Ę$šź€‚€’˜cØ6ƒĻ‚õŲXł×©Ņ€ŸÅ€c€}ōb³ę«„Ŗńó-ø”6¼“œżNс|}ņšõ ‘€>ōź86Ń•©ÆÕг²Ż‘Ęö**“Ź5S͵P~ņbņź5Ė0€ ńĻ€€ßA&|{čņĄ8H­$ÉŪ0Ūæīõ.8“€3¶M`śīėģ8~ģ¹Ŗ{ąź$’÷$&ÓóĻÅŲŲ€ųc,ņ}ėģ’H'—ÓĢŚ3鐒«į©¦–=ż€ņ€å€}ś±HŖÖ&ø;ü€­}%Ņ(€õĶ<äÖn™“č£ ņ%€0lZŃ ż#ĮYF f*É?ī3CI 3 ²īV¤¼āæ58!*#ČüAčƎó4‚ÕōÜĀ…Æś æó’é&gĶÓoÕß÷Ś’Ü8ē.o 6€üóPßf ~ł×5[U« ę8÷Ē’šĢäŻ8M䣹ī$źņŁē9yŌØ õ ܜŗž÷8šĢʐĢ8śĀĪ;ī N6ŹöĶ-Ų÷¹wż7·?^· čń Ėä˜!õ,åŅ@Gś{ūłÖēõÅ:€“#5~ēŠĀ9é5üŗB×äĪżóé_6×ÉĶaŽž É_ ¼Wn Ø#ż%ŚV覟Ö•"ż; Ł.+M‰.Ńó®śģųćE¾’įȋmJ€ ŌķīĖĘ·ķm}4r8 €†9fiœ€S8ś€’½²Ē9%2k@”±ZƒŁēVzQD€N®„85qmÜBX‚€$½)¶Ō€÷€»‚¢ŽĆSė %¹~?āsDŁLm€W‹1˜€€¦ĀĄ€Ž,‰®†1(ąU€'€č,Ģ<{ķłĒ[Ź…|øžIAņU€†Ųš¼“Ą-—xU;¶|·Åܐ…ļõåˆ%+A ę?ė ńŽ/Ęī÷łßæņŅšźÜśĪ‚ņ© Üņ2.źķŽŲ.9ēļ!]īčFčńé1Gb©å( āšSłģ^.3ü +åp"!ū ÷ėC/üüķ­Ķžü» ō/%%Pśš-*čųÓŗķ ć'ūīž×% ,5ŌõĄ&Ī3Ā0' ģ4śņJéė×Ūå:õ# ׯłŅöL1ŪØ"Żń”łęųćęų" į ” 2śÖİ Y! 2ęõķFįżöM°Ųę’ö”Ę ĒÖ<Ö:Č@.ķ>ųĀAž«ź?+@śŗ%*T’ĀÕŹćŹ<: .,ž" Ųį6‚±ūĖĮūåÅ%%$É?}āä¾łĄŻ³ą[!6¼³Jģō=Śd Ū1ÜēŹ(ēBŲšų2 ŗ8ė&*€"Ķżńšé)1ėµÄ±zū$ūā  ’ÜL9-õJ æąF)ņŠŖūż'āīĒ=­¬•­Œ¬Kµ°ē7ŻĪ$%6-耷bęmģ9āBåYü±¹Ńņ‚Č‚0ÆOĮó@0ŗ >üńéÜ(Eń¾"ččSœ} ½č&ńō*<Čä+śĘρ»'ķŁ¹ā&” > Š»!'»[­6ĘÄWüēķÄĘĮźš'Å1!ć;»ž6ļb4ķō€ņ;ż€Ū bŽ9óŠXöżQ閹&u’ĆÉ·µ¢Fz€#U—+ĻŽ'Ī–5€A;Ā 5ń&@=ń‚3Ž § ÷"‡Ū€€&oÄø€€0ū(ķpžįGŚAÓ^Ø#A7Ź#ōŅ ĻąOs‘Œ»ŁĖ]ą“÷‘2ģį0Ž3S«(ĄHÕÕ=%ś0PK!~fŠ#€“ė]Ł€ć,~ 21.~Ń!ń‘ 2;nŠŌ€āßÖĶI÷ įĘp)VH.Å{,½æŲÕ ‚ŚĀü€° +*/U7ģ *M„öęźÄŁeRŠ;čī€LӀ6·„ .)eĘķ*Ÿ3<ø2šĘ £żśZ}śK€Šę5 ¬ż¬ĆĪ ńų€”1+<źå5ąÄ–ć%…ņŲ. ėš¾ń÷RȀEŌłĶ¢2 Š+\DÆĒˆ)Æš$ż|U>éLŁĶ<@·ł=Lź%’ÜŠž^N났šŻāé9ŗī”ó/ÓÜŽF(eĮ`¶Z|Å’ÉM€Ą Š …}¼Ń#ėrķ*dćG÷÷+Ē)Ä?ö åāOČü¦¦PĻś5Ü­ļī] ŌßūčCńćOFŪĶ@śęü!č€Üė8°ŌĶūó%æ3d+łtø8Ē ģöóH!ŌŽ2ģ=Nż$¢rĪßą“I£Ōfł č C±¹-Ć6š4× ļ@ēŌr å ź!%=ė5eóŸ ^Ø Ą ' !äÜ6MūĻįš%*`)ZųŽćā~ēķŠ#¢Ž|’€Ļ’ ģ'€»2”Nū+IńZŅ ōÄ4)äĮEŲŌŻńėŖ›ZļóR ”Ōv”AŚÕ&yøµ. Bīµņ :āö;ģäāįä> ĶśVńņä±ŪkŪļ5īģK2Ī÷ķā R€³ Łė–«Ż āü¬ß÷ļWöŖćŃą&źeļ׏4sė ĻŻŌūČš'å&žäģ õüź8žģ~ė Ē÷ž ¾<åŽņūķ:’„ƒĶó+ŗ«€=õ!ė1ĖŠŽOōüN~84=6ŠOŽĪå ų5įŻūž ż’„Ęėžßī½€ ą€}8łŅ sƒžśŚöłÜ 0Õ÷óćGŅ.$ņéį` )įĆņää )Ōśń€’;HėžéĖ œöł€ 0š%ˆšģš ŲĮ:ą+ņ*ļu@ŻiĶļ#ā<%ŒÓ¼ŒŻśģ)ÖźH× aŻ &#žšę÷ė^Ńaßśļś0# jŠ\ ž}åś žČjµ/ĢŲ(4ܼ’óŻ1€šŽÉ€Jō>åń€ ó2Ķ„²Ī6’"øµ@t-żŅ\™®Ū÷Ģo×~ć#ėūˆųŖ_÷="@ń–ŒBŪ¦18ķøņ'‡Ś÷åśÖ7€ žŌ0É"ó¢Ŗg€€šŹ€C8“’ŅåOˆ|Ėż-ė’įb€ €Xō"Ā?³ū÷8Z-™TœūŌµ°€€éT€Ż~AĆ*•€+ üOÆA­’°|Ņöŗ €ÅM¾ęųŪŌ××! "6>¾ÕõĪB ³žö÷·±öš,šž—1,2·!~cźź­E*@{€ī¼#€€ęš@Ó„ ę\ ć/»8—ŚÉHī5~)€ ©—.’ä6ž¼^y뀩 żÄ>&Į)\Ī€äĄbÄż+Ż>1÷æ,»>ŽāŚōÄžģ!+õõ ·ż’É×Č ķ€ ģ©é'žh¼ɀ§Ó¬C¾Ež?€ÜōA³WÄ(E< Śūu 1;5žÜ6Åøå)?Ź€/€ß³åĘÄüÓī~"øŪļŽ¾üN Ā*ÜĀĢQ €×&ŌžĪE¼ŲŌ+~‘)ōć)ņM ĢĖ÷ćÆFģŃĒ€ @°žTšĀ­Õ/. žģüÜ3ł.ÓčÕ$źńöćÉß͚¼ģą'2šģģ Ņ®ƒą)öĮDĄūÓŻūV¶ļõ×ū¬’ö ļžŌļņõā÷żėŁķ’ įŽś óŚł1&ˆžIīŚßōéķ"ßü×-éVšėół-Čž&é ¬Č’Įāżų8Ė\ö āį;’ūŹč.üģķÜŃłÓ÷ņÓé®äKåŁźīģ łļ"āĒžb®0āŪ7īŗ-9āū€7 4+ų-ʉEæ._¦ń€/ ćd÷’ĄP«ƒ0÷'÷Nc÷ä§a.W(€žŌ‡N€ččšT ²€õźēŅ*.O"€ł”Öµķ×äå°(#*Ą¶}(üīM É’ <åH&ųH ļš€’$*3õ ĮćjļAé*Ē Ä ‚ĒQŪeŲGhU:€ÖļM3@ņ€€ą%³ŁKTą@ėšhŠLüŹż .ÅE <M\d+-‚¦46ĶQŹīČŲ§ÜfF&åuŲ8µ¹6č Īč-Q)ļõĒõ'¼HšÕVNą#Bߔš‚÷*Õ2īŪ@¾ā;9ˆ“<€€ā<ćՀ ö")ߌ€½FJF·KÓu¼ 2ł"/©Śč+óŠ4öń KØ’*ęžą÷óZč¤×÷Qŗŗ 7¾ :ģßåĖŚ „ [1 š øī¦ņ7Ž€|^æĻś% ½€Ž$Cåć ²ĻB¬ļoś¼}Ļ”‚Ä#ÕE‚XĄį#;+ ćń 4Ō³ąK‚ź ‚6Ķņ’× €[6ö,÷O\ɑWåĆä,·€ńēžź\ ćīµö)ūĘņŚČśCč;č’ībF*ģłĮ"åņŌNZ?ū ° FB%n³š·ó€€!÷ņ&É’æóAOŲüp~ąųēĘ×įQį€?©K/ūļż’ģ†ą^C<ĖŅē%ų-ėöņķģ5 !=ū ž#Žūåł; Ųģū įĮü8Ūoü)µ Ļ~÷ų’ßņģųłąķČų’Žž’NīģąĖż’Ć’ā½ė 4")&ųāģĢQ=õóź%ķ.’<žėŹ:ÖĮwžI'A׳*:żō×õļß ńŅ})ņōõīņĖMńéņjųŽ%ļ öģ2ŗŚ0ĄÜ\ēśžÄAÜ©ł¢Śž­•€]*]'\€©€ŽččČ·ƒ€l‘=Ŗ~é"Ӏ2ńƒļńX4/+¶’öģ 6ā€š³B€ņšŖū³ŽŲ ń]Č·ń~€%ī€^Ŗ.% śŻ¹%™Ŗ$8ü¶ (¬‡ē€V”æ!¶7Ć«‡|ƒŹ"€×ķ Ÿ€ėMuŃҀﱕ“(¤!{ö;äū0ŅČ7L«-܀}{ėų΁ŹbHį=ƒ „ŪUFA†KŅ5ÜGöļ!Iż & šļš4>ńēN Üųęż"¦£ā#×éŌ+ÕC. ՗›ŽłśūĘLHį@žń’ĒŅ*ī±ī õšī€ņšøįåē×ų łĀķł (ļKŹ#eó©C8ķ:, 2œå–+Óē$ęōō$åö÷ēū õź²4ēõ×ļķŸžņ3õõ‚$ļüĻ,=»ó3ßśšń¼ÄģŽÓÄŲńįJy€½€€Ī™č łāÉ€Ä€ļˆ€Ė C 2=öĪwD9įś«ć+/‹ Öf$ųUāł?¹‹©÷Ō^ /’€ƒą"fŽåŽ(bڶ’Üō·D €ńŻįā}ÅęĀŅĪ õ‡~é(’ŲÄ‚Ēą½ž~?^ Ȁ,3¬7Óßŗ%.ŠĘūET÷€ŖMÕļ÷üę#Åąī€Zß?Ś4ÅéĘ]6…kļ Ä Fä K€Ż$ž²±3õų@2 čåŁÉ T­ńe0qś}D€ īu÷A"(ž õö±ÅĘ~8ö’ß/™é0Żń×ń€;ĪŲ‚ėuūĒ&ŻöåģāæŚ¾żö(8…öśüŪUTę€ōÕļäćš<яĮ+ĢÜ"ė†Čqćčö(üėö6ż¬jēE>ü6Ač€Ä =1€ X ż, <ėDOŽ ’Ū÷ģ#±3€é( åĘ üÉõ"ć<ź€Įö½=»8ŽĻ5EäėŅ’‡¼ćžŪ)–ö, /2ūÜ *(!ńÖ’(!²Mßķó ņŹīųņäŖńążž:(óü žōęęų;”łōģōļ² ļī×1äŅś#N¾ó ģī :ž üńä ń8‹ņź Üėµ ņųöü8ėå%ųąčū-Ńā¾ōšż’!ŪŁĻķīėü{ ūķūńįķ é’1×ńĶ’ķÅ ÷GŲmŹ #ż ÷*]#· ųī āł˜Ž ļ ćX)MžÕ äģĄ-ļ@÷ķåü÷ιįż">śłé6Ņ"āö 0 ó¹ģņ/ū' ć?=ćņö$åĻ'ėõĶ ä1&€ Ä„’ Ä!“& 7ł Ó_%å%ŗś#ćę$Hµśo1’īĪΰ Fā04éŻUż˜č4Åłń6ī ä ×2š‚ źģĻŲż6¼1ņĄ šEŻųłŃ“Ÿ"ś)į)aāI±ūįźÖ’ŻŻ)śŁ2ŃĆžSR'śó:żżž=aĮ(šēōŚ+ļąį+ńźź(ē~ūҰL¬^ö’ ßŌ€ęš#żÖéü!¹ ēõ*·ö ĮiŖųę±Rą@ĘĮūȆæ-qZŃ¦}ļģõłZ,ÕÕ:‚¬€})° kŽ1čkīü€ģ/Ųžn1Øé=̤E3”ōŸ¾żō¬ēR$°ķ£Nå.é2õē߃ńēüčæ·3ųį ’ŌąP?Śaź>Īk€P,1č/AōwśÕÖ»%ÜŽŅߌØNśķŽ®FĶéč  9! Ž!J˜–īž5qśīķ€ŅŠō#ōłÕ‚:āā_ž:ąŠ9*ś-ōł)'ׄ€ ā?š+Ļ” ¶Ü–)&õńéšńŅß5šāÓżų~ĢēņéÜż‹Ģšś*24‘–ž4Æ÷0Ūē ę!Ųń5½>;éžH@ś a% FÖļŗķ=&ėż”ǟ¼~=Üę€Äėē@̀ٮć}O X%žŗ—©0ęd6'S¤ēįł²Ż÷ ē\„€,\żŌ«ÆÉ€87Z5ųˆ Jø4ÕP’Ó Ō”jśāųEččH½—&’ žÓ6"‡©&>žöėä8× ōĮåõb; ļū ĢāöēŗäI­€ éōÖ8 ń». ć óŅ#ĘZšyčõõ-ž)üõ BÓŻŠ÷żį< Fū fž¤~b.µéūŗ~öÓīn \%E*×Ū ¬ķ¦&»÷ęŃüŌÖĶø”©RłÜæ ńÖ”6#Hą/±ķ€éģ>eāīŌł,ŲÖĘ>½Ź‰K“ó"ĮźĆļŪ¼±9ŲģgB¹īõP”"ś€ķ}ۃ¬# '“÷6-ōė#4ēļ’Äź ČŽōŹčöōęėXōŌõ­Ü Ę=ØAšŅÅŅĀ‚ ¶ŲÕīśņ÷Yõ%ß_9ŻŁĻŻÅ$F\øV €0ś×śź0¼°­ ”ņ '<ŌÖōĄCŠĆ üķ~šÓå!žČż/,ō ć))'ų°1īŻęŅö , ē ąF/”øö õ'ŚŖÜęuėŚ/ö=īĄ ĒīĮ+žóHż²Ļ÷‰4 ³€ü&4WCzåõłĮŃ įĘōäQŽ\Ę €D–ĘÄ ńŽ ė ©Š%—ū܀1H?¾įÓ»+Łéž" U€&$ŁĶiŪ 0 Ž”--,€(ā7ŖńĆh‘Ź5ƒ±āÉѓuP²IՃ^Ééķ‘;ŀHŲ­śŻõMLc2õˆØ+ā€VŽjŽĘ0 ¾ą¬į°+šÖ,1Œś ģמØÕ S~šOƒœ7 HEf€€"óōė’€$½5ęAąņŽ+żmÆmōĄīR©b€”ł€ęD€’ÖY® -Ą„ģéūæäčõ9FÉ~Ų%ššłŃnššō1óƒ’ųS"s'ĄõG Ó’Ū€ģĮń@ŽŚ7ö*ēī(Īr0m±ńähÆ„čMčD' ž+ėõQÉ}qā7öß Łļģ#ÜŅćß/ ½īėĀHģŒČØŲŃĘ!"ī ß źPŚAč Ķ7¶‚€æ8 ų #ŽN½’(Ūėļį [¶&!:¹ šī¾/JģĘā(!‘ õń÷śžĘ!écäŠęėį M~Ɏ €L­‹€×€¹7Ęfµ4؁€ĘœµĀ,›Y€€Ż-Ŗ€€€Øä竀=U€€Ūč*¬€ę°& Éń§Ē =ņ:€€€€€ č €€|šąȂ·W.b€€ßā¤a}€"Ą_•ą€lļ@€€$m€}€ä7捁įWGk€·O;©Ö^ƒ¦ƒy€q€Ž}AŸ÷€ąķŌ€€ų$f’`üųÖõ%śjĻ2=·|ŒW€ĪęȀ¶hNC†F8“#ØGų2}$Ŗ€ķr›š€Jŗ€ń€IÜ€×)² Ɖ*€ęŹ4ĘB€Ż#€ éõ”ƒ€ÖA½Ģ€{Ź3:!€j€Ą2A0f äém€+ģ=K2OÜ€ž½06Ūś×A •S~ü.Kgį$HpŒ× u–³-B•J¼äŲ ~"²X邦ā4‘ń­<~lĄŻA5łĘ~5Rą/błO¹óī$H-ĄĀÖ²žč€÷å ę8’Nö ĪdÉžBńäӜéõå0ķĮĒ’žūłBg€Ā8“ķ×Ō‘ļx0“Ł Ź'ĶżéćńÅūģ÷Ż%śę/ģó+@\,īX· °.öĶ ŌüX­£š<čŗÜ¢ģ ćø Ÿ€ū >€Ż1ē„ Ńö­;ĪåķņÉĄčĪżź.ŁÖ‚Łöę½/Ī€óėóžĻ‘™ĒCˆĖ äŠ/";ÉŪ$’č2żŲõłćōłĆ~>ĒäåT €ą ū%ĵUżö|źfX€EåžĘ70>ģļB3śs³’<źĶ<\żŌń+ałœD› >€…õęĖ÷Z€ŽōÄ0¼0ą¾ś€ܟŪ6ć¾€§Ą"6@.ɸڀހŖ° ā~ä l ŃäVīÜ⼤e&»€ĶņŁ, 'ĖŃźcö‚ø7Hœ;}® £–5€€µµ­O[Ż,Wų,Ųæķń¶{~ ųŗxõCælņ݇’Ć~ś'6€[~3.Ö鯛ōµ˜~śø‚ķźŖĶ(mS²Žˆó賖D»r¤\ €Ü}ØvBŚņĘAöó”Lķ³Ū*€¤ 7üƒƒßęŽ×®3˜Ķ®žA¢h“™Öé}«3 ŻP E©€€šxąĒOŅ›«ą€ųńÄrźųęĻų ØīIōéń¢I ł!ą"ėķõŠĀĢēāžķŖ0Ō0ćö«ÜĖÅģ9łäĀÄ$ęĪõ’Kč– €C&Ń=¬nā€śĮÉBā āķ¬ ėėåłüź®Ś­€ć/#å3€%šŚųNńīĻ ÷5ų8'Ż-ķ =7Ø5ā’ęńĀūXū~ģłÜėĪ|Ełźõč $ź’č 6ŗµ,ŅŅ€Įš ¢ńéśÜųąXī÷ģęõ?ł'" (Cõ’„%*v% ł”ü' ŻŚŲśšĆÖ"ü&¬ÖŅź’é÷²’€åį(Ų\ŖļG*µ+ĻķŃśÓ÷¶żłč€ó€ķóéż-ņ²ķžóņ6Ė·÷ ˜ ųŠŪćNžßl46É€0į+ ų%źBę ÷įß ė*ԌGź č’&€ķ€k×ÖŠŽĢ)Ėģs>0  Ū.šGBˆÜ#ż4ŠŅł…üūą5ĆķÖ½Iõ¢½¼v}rÜZŃ#»¦ųĀ2Åü -į#±Ņ±ÅóŹĀ@ŁOķv*dĄ€€<Ÿ4ćõ€šž÷°<“€<ÖņKĶ Į#“ä€ßćõ€žłUš*Oø=čd—_—ć厠Ż®H.ÜxŽn'Ņąō Üł$«=߅Ō4£Ó8{’\+ļÕŁņŒÕP!ļr–Ä3ĄŒ ō8óśčåā·+Ē?€$,ųü’%ķ­8ķC ø6܀śÕķk€ĢS)É˼äüŠü,ÄńĖMü.;ÆŌ$ ī@ A/£& ߀ūōŸĖĖå­=ŒōČŚ€ų éīrč‰Ķ0NŪ+ī Ņķłō}īäšźįŃ$ ÷Üž@½>yÖķ*į  !Ģ(źŸ ~€(ö)ū€)€,ŗśNéōXČżż’NłŚ†€į„ē#3čv®ü舨~ņĄÅį Ó"ōųÄéĢūś3ł:Øņ~ŠäĪéųĘīĀŪĘØ:üŲ# ūōMŽš½¼ōÜ×Éń^C8÷€ļ%hnkÓ-õäę&č­ļēJAó²ūĪX] łDĖō!»% +1ąõųėęCšż˜'ņ0ēķ~ž 2.üćąBź äÅłŽ4įėXńFŃåė»ś%ųÜe $Wč!č€IõżĮŁŁ€€2óÓ×Cš5Å@鄣ø Č3ō1¾ķŁ$öł%€}߀‚豚ś `1:„ՀĖ&³õU3ž€u€®ĮXŽĖæžō;÷ß°ņ}õž÷āĀV(-IŁ÷ݗڰŪ{ĶĄ%ņĒŠ&Š€ÕČ! ąśĻ )óÅ3Ń5Ąņø€(-ßĪÖü~L·ēM2€Õłd|Œf ņųōūŁ€G‹}nE¾ųœ+€€”€+āĻĮõUėĖ€~#]Ęż¼8ĆĮĮ#ū5ÅżB8åż8õżéöä@Ž IĘüXYÕ- SŻźĮ0Ü+4’T'šĘNžōH Į.÷) ż Śś,ę²ć ü ÜŗŁż)ż»S©d\½ó ³üėö-U7 Ī  ,$÷ąć:żöā4ü"=éó0&{ ł )7 ÅGšĻŅļį­1;%­ļųM &/½VėŌ3ĄėFééŌļÜP %bō4ō*÷bŽIÅj6ļéMīŌ÷īéʦ[Ń-4I įćŃņm²&Ä沨4ŽQŗś³üÖ£ä³8īčŅßų)ę*Ź/ķ1+å÷)@Ź>ś ÜĄćįĪAķŚAö]¾!ä³ōććF‚ūóöżūĮo^ą T“öėōÜÓū€Ł?ā)į­^ųĄ /?éžäų…ļųēIĒŹ’÷ŚļżÉG2ćö©6ąņ2ąīč7 ~ėĄ7»ōŃ/Ņ!# ļōņ«R>ŁVõńU ąž­"üō×÷ą (’Šöżā,ūūń$ž  ŠńĪÜ’~ēīŲ3*ŗńŁļ+ %ö7 Ō»ų ź9ēŪų+Ķųāō"žU:ü &Ī!ö÷ģūć’C€ -ßĢé8Ŗśõśž×ūK÷ż·/ōÅńķōč Śų?ź&āīšŃö ¾ ē’ŻČ8 ż¼ż ū¶ ÷āłļ Ōż¼ųŹķ ąź*å'ü šņó–ÓŻŻ$HöņņZQėč÷ńĀŗńĢį€ūU5joĀ)łaļą ģečĮõśF7ŅKģだėļ 5ŃņMģķśĖģlżÓū§ļ×&¦źāŚ6ŠŹ€Ź’ÜŹĶžÖęr ¶MšĢAÆ$Šł?÷ĄüüłōźÜ+ Ē'*² Ł€ó€%Ń œū#”!ś3SĖ@5ļ± ńŽĒąŲŠÖĻ=‚Įį%ĢŻé"+“0ł=S殀Üķķ2ÅķėāēżS(õÉUī®5ÄKŚģ1ķō};kŹż)ŽĻöĶcėéÉż\™ö õ÷D”­ó$‡:ņ%Ī9€€Ä/ļAš “ō*0VjŻ*Ó¬YčŃ'źē÷ū).ÆYķ÷X\"Hś_T*%ł‡"ųĢi Uü1Ü6 3÷ŅØ§6 '’”š¦Uä’·Ūɧóūć9īd=ēļŠ 4ŁōńūČÄ1öką&ōŻxčZś óņ’Ń€ÜX!B’q€īӁ÷ó,Z€åų·Ūōćķ½ żŪŪ ą€•]žężÖŽ-]ė’ÕGāÄīŻc‚ųŁ^ ōō!é‚ üŽĒĻ€*čūīą­šé€ęēŁ¢õ Ÿj4’€ 1é€ų¦ ¬ŅŃ 0ņųõżÜÅ.ę%Z; ļŌĖ£óRćp½ßåÕĆżBŃ©įćĶ=źöėb& śR‡÷3»7AõIĮ°ź8B#Čė/Ž¤Ā × ūĪžžłŽ( *tŽęó’ĄēūģÖ!ś ±÷,õJ.ćš2-ŚŽļżĒńśŃ8ķĀ,å ęńgĄ "*īLń$ž)ÆāōŪ¾ļµ,ģ5%-Š“ ¹ōcąÜŻ5-#¦į©żõż8÷żšāÓKćėéńų9ˤ~ ‘iĻĄü¼øÅ="QūŽ~︁#ø·iā«Š~\ü€H‡”ä€ć›č»b}€ź™jā€ŅźƒŚmŠĢŚØż79·ģįGŚĘ“Ÿ„~€­@WAīyĒįĪ5,Hˆš© ē9ą;łŃŪ,MŌ€v€nm€S=·¢¢ŃR1d”&€ĮiŠ®-Å1üĄŻƒ$Ƅ:śŸŁ½Ś÷=(æß~į² Ō>~ŁpÅż@Łē8Ā~ĪVūҌŁÜøÆ”§Ķ÷2āéš²žƒ€Æć®ĪĘŚ÷5·Öź_ņIŲż#É7”ĀÓŪĻ€ ŗ&—€žč®@ĶZöPĢÉ 9ÓķÜ)Ėõ ęVüĄ÷-^ģ€=€ģ‚“ߣ$ż­Ėķžā,ó5ó50Ō’4Ā5ć€UūR!/€+4æĪó.ĪDY€Öfčų1Üī åÆā÷œŌééšż‚ó„¦é$!Ļ~krßŗ€%÷ŪŁóūœõÉŽ˜NĆĒķ€yų ÷öõYŅ\ź¼ųHŠāćöĮ¶P~LéĻ*ÉŲčDŻBüöŁ­ą*€7ꀩ­‡AŲ¬$óįéŸē÷$|ä£Ó®ē'"üķėéBÅɌŸŹD,NūŪ-ņ'ÅüP~,õž51ŗŲ+ƒē(ų§“2 āŹĆÉ ėīįĀą#õ:żŖÖćˆ:Ūŗæ_׿—ßõę}é$Ļļå,ēŸ×B/Yęėī>+&éćĢ)’’" ś½ń¾ųa=īž©Ü—A ž’ś0śDeµøōņī%¾łż*ū K<€Ęńōä0ŅXŲŲ Aõ ęīŲóī÷ōŠ9ēųŠ›ōšŪįĆĻ÷ē$żć Ų)Õ’÷Ų ÷FćSę»ńźč;Üö;’õūęĒĮńšč+Ūļķ’ęēĮ÷äI«!Eų¹&ųą§Ö×ļ¾ū ½ųŖóŲߖēõćöŽŚ öbŠ!”ź=€€,"sń÷N7ć!€Č9ŌRJ »Ų+.4nģ~ń1ŠÓöĪą½Ķįł-ż÷¢Éšø7ćĀi§Łłǚ*“ÓŁ!³ļŪ8#ęć‘5Q‘1 &ėÖįk÷ņīš2@#Ō€ ģq5åŻJG-ÉżÖĪ&ž¦?€$"é?'Ļ3ćŒ€ī€ōź€ž ¹®JĆ`Ķ ö;ō½€Ę{&Ģ» ÉMä)īł€Aža€Ę£…²€utŪ€O€”?śIåæĆ€.€Y؁nķ Q€żd3߀€ŪÅŁ˜§~ł1Ā€€ų’c €€€€€N†€€Ōū>fį—€» ÄA9¦¬—Ī÷Œ9å;͵.ž€æX€~€ĪŪ~€ķé€n}SKß}t[€Š2;ƒ€~Ģ“.a~‡}€Å a­ųūš€€€Šßn€Ń䁌vźx+JøĖĮÓaˆą€°€É3ļ:I¢]ŲŚŪ38.āī€S׿Oą€ ‚øÉÄ×§ĒæIŻ QōģŅc€*•ūßBAåÉ·8.€Ķ?Ś#yé)ģ_FĖķāėSž³}½Ż9GĢ”ÖV3Ģ4-9€ā¤4ī ėœsĄŠÜ&Ļ#³6ƒķI±śÖ€Ś40Ś KŲ£ėāī0 x€ćĒĮX€ĪåÄō·~żBņFß 2 Ūv~ōÓļ&=Œ’4 łāžäšīGžąNĒĀŽģż˜ÄüŅ;Õšų Ä÷”×ÅŽsÖäĢ~X~ļ~”éĶČÓžHÕ#M.KV3€Ó6Ō€tåõŪŅåĢī’ś ēKČā)£ĪĶįéÖ€nö÷ĢDŹ ł’&ä<ž õ6ö’é ¤&óĮgé Łś ( Æ €  Į°°õ(Ģ©ß÷ū ¾B š4؀91ŚŚ’>-ņöŲź)éąąßĪū—öŪ-‘ øL’¾Ń ōPå' q(Ėł"&ų*÷Ņ*+€ä+-'‰ŚŠųį@øæ±å>-{§÷ē ÉvÄŗÓJ’×Óęēü’īBē 2µĪńŚõʘÄ3ó–°ŹŽ"Møö?ģ.ąśš¼īżX Ųķ Ž•” öą÷¶7é7Ż Ī¼łõÅu&ų- 7ķīüĆ$ C¬åX€-üJ jæ#ņõü%ÄāP×yŚń*åøŻ ’Źżćü€'Ųµ±ĘŪõŌ ćĻēDÄ õßß=äŌ³NĶ ‚Ąż€SÖBš(Æ#ŽY 7öś¬Į˜ńżŅAŪ% J1õóMĆäļļļś?ūć1ĪöAÖÓē?­²cĻļå&Rčźó¦ ä,Ģņ åńė7’¤Ś°śüp6)Ų?°Ó¤Õ…ĻņīÉäś'!œžAį"č  éń„Ų€]€č€1ĻJÖĻEHóļÄńŚ€č”sä$€€ Y ]·2€ļāxź¼Ńŗu#Ė+@Ę †¶ 3 œ%ęN$ęæU­ ‚ŀ•2ōÉ{ €‚ä)é¶ź“·ł&ĆBīfžH¬Jī&JŃü×Ėśö5į ś”šHł€å0Š%ž'€L~öņęC=Rń€ [ś@C!2aüė€7‹ĆåÕĘÅD&’.¶VCŃ}łĮ÷ėż)—Ķš+2ņģL:,Ąöü^¹ÉźģķŁ9æĖš ( !±š "?ßģC€€Ąą÷ƒ?ga=I’„?ł 1 Ųų€œøĒCÅ!$“ųĆī̜Õ2¶Ö’ÉŲāłf5 u éw1ū {Ł«œėd>śUåĒļ7 ŠÅœ+ŚåšņūÕ ŚŹśŠ× ŠČŚā7%ą)+śžø(Öåmõ€P³Ž×Ē8õ“Ć>e²'€>%’ĮD~ūō$$~ųDšP€ń€ü€H½g€kę€Š4‘€œX‘ąp€‰{JÅĄī©ö€6Ż%µœŲĀ€u§ÖB˜€Ø €’ `ĆEÜKu3ŃČżÖżéĻż¹ŻīŲZ '9€ŗīw¬ć~n6%:ś%_ÄŽłÕ€D.ņta<üÓOč)€ķ²F3Ɏ ÷ŃE*€(‡u óŻ.Ń.!®Ūt+›*Åćš£3¹“ ų w 4-8öį ī築ōM+ĆG: ž 3=(éMį% )/ā¬m ČŚž$ņńÜHŸõKČõU ń”ļķ?H'C8ĪņTé½Ü8.ČNłšą2:[ŅsœŪ7Qä¶č «'äæ/ŲßÓ*}ĻĒ—<(Ö?VāK7ćōć*ÄÕ.#āęĖæö5ė+€Qūši@ē'Y$Ż'ötOåģ!ēóÉĻ/"7ė÷ ŅĘźčKä'sśä €Æ4Ńó~öķjü²įCP §~==> (O·éē ė}Bä’  æĖ~5?{€[cBIbņ!Ī„±éÜ“ õ d[®eX(ę-€ū€aA"£Ų$$ä9üķ(ī ó!€¤öæå$<?÷ŻW¬"ųœŃóž£9PŠŖįs¤œŪTĄFŠźģńūI÷ģėœ€½ųP-@ņžÖØøģi+€*ŽrÖÖ(€0ŪØńxÕ²>–6 ¤ąBˆW© Ś€ń@¬1–’k螈Ó3Ūæüšš 5€ėė[ß2€¢>Ö õ ß„Ø6?ŲÄ^Ķ:Ń×ü€€€^Žü eÓō~2Ź#ßj€“ÉtQn÷.ķqÄ]õķփü¬ =.ģC€ )ø öæó€ŚŖG€¢łķ1'€|Q€€ļćĘ€q`;ģÓūÖ*cyĪ‚‚€‚€³ €†“¹}­É‚,0ŅāéĻŪļ$žŽŪüÜēø]¬Īīj&Š€FŅ*ÜķŚŲGŽü =’čąŲ?<ĢŁ̀ ˜€ī į!õ/ŲņXń±‚’¶@ÖŌ€žØ4: īóQ*„‰d÷ĄóåF»ó1ŖT‹żD&MŅ +žž€ÉŹ+éßēE čė’»ėžĀ¶ņ&4¦čŲ|Šöže\ņ怀A.#’Y: | ńé ŗ€ŹÖī¼ļÅķi Ł€2ū±ķćČÜąÓźįåīCÜė÷>. Óśršó.ūTż)€`€ ō€šVĘĄ= ęÅĒōŗŪć}Ż€ęćóVuļ€nMx£C€3 ’ĶØĮ„ŠJŚ;:ś€ūüč¹+ ä` ēĖĒĢŽ2öb1µA0Žā >žĒ Ķ€žŚ»Ū'źßA†BIņš“JÕ *ÄŻåéņ׀֝õZńĻ»×öś,Ź€Āć¶ æłź%7N+Č ÖĖ # -RÄķķ ķ3 įū2ņū‚Sņ˜ó+ßĪ<)žōaķo… 8ᆉŲÕüØŪ×Ń’&+ĢßūįĻšā»"āc­OŁÓśō³É2)6$žĮŚÜļĄ“ŁčēB4?ėž 2`ēß*-±ņį’&  ÷äū тņÄہ2¤ūŪœNNģĶ,~ Oś<Ę åkūló9öå\iīĪ~’;1ń߄4 ńP Ž!€ĘĖ=Ćź(ū&(Yåżģå-1ļł³(ꬩö³ć$Ś ī’^ż³ŪeAB~łö-\å£_ €0ķį’ęžĘGÉöŪ’(>°śĻéš6KźR ² Śé–Žā©ŻŅś€€ŽåĒ€4üŃOŌ€šW÷€~߯Lū±¢„õD@u€‚§ÖFjŸšŒnüæ!˜°+²+5‚*TmF€ģ€\Ÿ7ļŌ= ü!#­Ó€ćŌLĀėėāžxÕD ÖĮļ FżAŽĮKY żõoŒH‚­ĢJ›dĶ&€żį÷耹/!ķŠ}ķAā]ī„ĪĻyŲ¶óå€YŠz Ł»RĮÓ€}$–ė€Ū,n]” #īŪę;BåįoøķÕĪgõ;dž€įų¼ążµlŠ€' Ā4€»“š% Ē€€ĒI;øżĶÉß`²Ģ T̽:Šģ€+Ö,žŻ”nŃč¾ęŚÓĀ̵č#²>€hēø‰[Ļ@ć:!Ī$½©ķ€LžĆ-ŒļŌ`*ó ‘īżšāģūłē0īųG/€Š•Œõ4ĀB… $6šį6J—÷ĄåAīE½ŗžŲćć ܀æ¾Z“„k€SŪø¼é¢0Wģ€bˆöÆŗšĢÖė ėéōX”Ē xŁÖ€ń ‚āQ%Äąb€?Ź.Ńl÷ŲQż‹0 ²ŅĒo: Ń"(%æÄÉļķĢ““«ņŚ#ējūć÷ęŻųuĘ"Ņū¹;ÓŻ×1nĮŅĶ(G7¶a€÷K»‚!: š8¹=śŅŁØ Õ§(ź#ś~6‚€ŁWb0ßó~ł ½ /Qõų ŲŅ"Ń % H÷ņöŽ×üžõŠeT0+ģŻ"Žūæü»šõö—ō.ēÓ*6² ×Ōß³Ž §FM-;’ń± Įٽķµūž µķŖįōś.åÓõ āŻÉ+—×9ÖęQ$)ųŻ0ėč.*߁ūéįńöżi»Ø×õčś÷3ż å5ķčōūšÉķć }ÜŌųųöé ö}‚ą­=䳬 $ėšŌņ$ķ§ėDM“Į75@¾ólļ1v TAÄ'īäö¢äńdŽŽõ#ó*%ę 2÷’ō°Bæģš%'ĢMß÷:QÖAģCÖōėÅķėēš+üąŹĆœŗ<ėĶFZ*ō•ē"ō1Ė+1(ėĒ>öŌ“·ķāÕP©?&ĻžJŖĶé$ąB ÅļĀī ņżI Ć’ $ū:ó ÖC¾ŌB $hе$I“AÄŗ[å„ż³-āéėõē¼D&īBźŹ<|öZ€~¦ø€ø5dR „„%mX÷€į!ĀGĒ€ś'ĖõźĀ_šę¦å5J€y€N€`}ÕĄšžWų¬%)Ź€€ƒą‹€ĒŁ€ €Ų€Ź€E ģČw¹:Å:€Å1±ł€#t~€üŌŀw«ģ-‘€¤=€ ²ŗŚ‡HŽ‘²€·'1,ōė ŌYĢ’~`č{2€ųK~'€NG€·袸“ĒŚŗCÖ»L'»!ö " # å)Į/ģ] ćųå ĻŠółŗ)2ėŽūµä˜Żä½–7"¤&ڽĀćõ,CöųęÄ+÷TS‚Dó€%?īü€€Xµ€ś‡WžŅž 5ąęń‚{Įåū€˜Ū¤#•€Śæ+š’āĮj?׃^ 0į±Nć|€mX•/€ż2„‚4āĀ7%ƒØÜj|1RU€ /"铸€ėčā󷏀oźŪÉāĀ2Ó¤ä‚1ÜčxʀeęĘŁĄÓS†~€8€Ģ3­5Ė€ه~?+&gmžZĖŻKśa½G¦n€~Ŗ}ƒ@Ł%ś¦Fų"·©1ŻäJ(<ōĢź×ŚQ¾”ƒ Å#7ĖļšėēNŖ±ö>& āOĶÓJ€õ܀Ū,)€īÅMNY§‰©ž’nśŗĘŃA€]!ąō×PūŠ€2 öļ~œrZ/ĻŪ)Ż dō ÉŃųä&Ļ6 ÜšńäJß)¬ŪzŁń&åų0ķĆĶ7źy„VæöD­™‡ģ%ø.÷€iü~’ī0/Ś}»ßōŃöų€Ė!×\…iéG²[+õüÖu“ńŚ/ÖīƒšOķĀ&8< §Å’’¢©ūŲõį0ąĶū āė1ņU&ž§1~į@µ×ēó8&žģæ“æżõÆ6;#ļė ½ƒ*Z*żA.ČdŪ5D+o ļõĀ©'ė ¹Œ æ€öģŪĪ|9Ą3õ$. %ū€&"ćņL!äĪØŁ*Ų ’ W å}Aę(üƒ×įĄT ×ÖŠ ļųł Į>÷7‡ * äŻ2j×5ö–ųń'µ¢Ų §3x;ÕżU^ )Å—„ĖENö™f·_ļ9ßÕŹÜٲł’Ńü×Ėę*7jfŃr'·į^ćī€:/ģ€4vՆö€’ÖäĪžōZŸÄ@ĘĆABmJC>ļZAėå-”Ėå ēĪ2C,‹ ūÖłņöėüÕŲ÷žš¦~"@8KĻ|#ņJ€šfCEĶ;ø Ņ<Ļ7/Čõź]€ė“’š$^ÉŃ8č`*xÓ'ŚĖ:>+O;€õžł åž#”³ ĖŁėø[Æ7™’ōțųźžŗń ūŁŃ åä*žü²>āžŽĢ‚ ųĮ€>@7żĶŪ. ȅ²ū7ģŪĆō=źäT3ū$¶!öõč@ Ų  ęA(= ~ õīÆ4Õ ń.øžŠ.ēįńŃöß’Īčī'ź€Ó?EÓĪ šŲ×ü5.łŚ(ŲÉŲéGõ³Įāö& FēŚų.ĒŽę+@õNL)÷Düō‚·W×- €ņśÅCAóL“Ģó±žĮÉ­!, $M}, æīw@(Ŗŗą ¶W5±%æķ€ĮĶļŪ§č€śB“ØÅ#„ąa".¹ ŹAŸ×u<€5ŗ±Ķ`‰JŲč‹ī)čdŁ×~ ł’÷J%ęõ$#W‰8 –Æß7Ä*ź>ńā€ĻĖ™€DQ§/łü)3«5ģ©ž$¾^)ļßöłēˆ¼4žŽ$čé=åŪūŃźŁńē€ķ%żüśKŖ“Ž3!ĢšČ)ܟģ ū«Åō ńé ėÓß× äņóé5’›>6ä#-QĄų šóēū·AŲšž Ž»ŚßģÓžŻœ’ģ¬Ż£ĄĒŚ÷üįóØįć ņ4Żć¼ē€Ėå² ųėCńļžóųłś÷0­ż’ĘžÜÓĘ.Oõ±…5 ܀ß/Žéŗīž”zł橦*r¾%€ €GH‚Ęł÷S Ėy€P”ĪրQ€ČLšÕiūļMIݤ €Å5ź®Ń’øē€ €]€Ķ®łčÕėó%šD*ø³ēŪbŌĘōŅØ«!ćæ,ā÷0!· a/÷~j’2Ų9÷ŪšK4lĆŁÕ€€ķį40)(׎0&<Źé"n—ŌģŻ€–AƶIB ĻŽufhčÖå4#ņÕßėŃčŲ<Ø"ėķäõMÖ=ńŚŃ2ł ī.Ć"üōŌĶŁ+Ų +-3ķļåäō) Ē <€ü#ÕŠåö'äńēš 0$"’Ģń€4ęÖõ› ū×ō RōÜŽ’<#ų  ē#Fėé U1 żJ·ŌUź*ä&ōŁöü×siV±Äģ «%ż:ļ( ŻņĶżēź[šłO5ļ÷Źūü Ī «aĄ>č‰ õņō.s€ūķžŲŌÕ+&ŗęåćł» Ū Ō²3C¶Ž}Ł¬Æ„KĪQ ~­ĻöŲōٵŻĆ ‘ĻīRÓÜ1ŚōĢõņ»éĮįū„š:ö!ÖÕB]=%> )čä4Č $+Wéóį:Ę2 :ō÷ į0 ĶįÕßäŖõå6$°ŌŹ/Įß%+<ßߌEŪlź+½ļŚŚōØżńżŁ€0æ~SU €(ŗTīCĮćń:ļöö<ūÓ·o0‚ hŲ-€ ~Zå’čGWųėČ "$‹éV† žū`}«™AÄöžöÓÓå›Ņ  ŒMšžÉ2ó]<Ömnüš/į€?õké.Höh¦’³©) (ū2GÆä×Ķ~Ņ4õż Ķų€ņ‚ €čpŒ)TŠāåF/S9-¤ęą-#Ģ×Ö4 č<Į-ßź0PH«ģō3ÖéÉēŽ ó„ŖĪĪ= -*Ųē×åfܤ"óNŽEHż„€ēć!,õ ŗš/KįēäŃūįņĮAĖ!ß7õåeįž»õ’ü'+ĖĪńż€żåŲŻR, =ŽūŽD#åį ·TõA,e3 “éIĖ5 &É(ń’ż÷= øÖč“ū^ńÓöd"ł0×Ųī·5”0µ%āŁ0åį»ć žūø‡,• ģā-Žč$A üį ¹Å±;&Ś ēäį™ā‘Ķ>’Ūżˆź€Õ€ī\ Cč0įČI·œ* āėāņæžŗņ±ņų!~ōń¶śŠł ,ÓÓõ #Üõ“g׊Ā3? ļ6!Ī€ļī&ĒĖ2šÉųłįzóƒ’IŽń=KµąŁ3ś½÷ęŠĒ?Ž÷ėŃSLä<$ZŁā?öężņ¹ÉŖ)STõnĻ€a=īՈpüK åŃß/ÖŲѵĖ0į @Æ=Ó%ŲĻ»H ’A¼m¢æā[7ÜöĪōĄ 7ZŖėĻét÷“Wń‘ŗ ©~5ē’+ūęīÉ-ß\ŗŽéÉŪ ūīģŪč8Ļī÷HĶßāöX ,7"äŽ>ģ&čO€Ū+ļ œ€5żŻ!*Żłģ${ß?>ü~ ÷ŹčŪ īó€éĒ>Õł 'åaźą,M)ŚŅBB`ūȃ.£¤J÷‚};b”ĆÓÅČēų˜1¼11 ‚dŪ€ńbŲ/ÄšHh k:(ƒKšŒś£5~ƒÄgSŲzĆ~×Ēņd|ʐēČĮÅ浯ŗŅņ$%*ßĆŅOõ'AńĄrߜŻŅ-ĻYłĪB³hĢŃ€óÕŖ5!ĆąäšäMZ§©ųŁō© UĀAĻF§ō€’!qŠü ß}yÜ2+ųS-«'6'>š gE.‘ā€žE°-G·%$&Œ.ō±TЁĖÓ‚Õé©Ń@Ó҃üŃķŚ39wÄģ ¤ 'õ(3šļ .Ō}™^7'ć~ į?%V€€@D׳ā¶5/÷śV~7Y¬€?åĻ€Ż9N€AķåD*œ&G#ė<(€žš5ś> Œ×Ę‘„ćŪÉ-ę€&o ÓÅL³ ’€»ę“ĒŹØ½€ŹĶ(~Ńī3ƒŚü“Æę~‚¼üS;Jaüķé€' ĪōaÓ€ĒҶ¹ł г¶ß >$²€°ķ6€÷¹łž3ŗÅ ¬…Õ0€ܝ¼žNÓgŚŚŹ#Až€ļ‚€€¤ōüČŖõ+ڵč©4!£€éŠÕ+Ķć#øĻ€āż€ėJ/6S£ü¼°“Łź$ŚČųƒ ų$ö åJ}ī¾Ž×8ʁüÕ¹ćéųĢ0õš×%ł=ļųæėŪćŹrĘēöĒ Ż0 ź=2-#8§¹=»Ļ˜źĖĮ` 7īŅöū+Śś½Ąųģ„źöźūļķūÕŅķńę‚öėE ōłńžėŁüśMd Ł  č&öōūōöī?õ Ē’>ņ÷CŚ!€ ÷$ō E€ŠØ ¹óž‘}3č]…žŅźėßĻ 5Īóū3 łÕLÜźA©ĖL pµµŁåę#½2· ‚÷=»0©Õó’.ŁćßÕłåõóģ Tļš šč÷żęźöżšōśä čśęü<ż.óżōÜ’ ĢØ ž żÕŻłūłŽ÷ū óųżčß×ķ÷ļå8üüłęÖ  į”ė—ęķ€žöĢ ÷Ō& ĒļüžźŽö0»'Ź€ńīźūōš šģéßķš•ķžÉsļāōŁ|ÜļüóöÄ÷ūśö×ģü 9ö’6ł ,÷ Ūüēöł÷³Üķ.ēųµüž#ó ō żöżÜõęö6ī!ł„žōųüų <šóž’*(āIųŖ’#ź—žņóĢžé-õŲūę(›¹3åł &0Ÿ€éŪöēļ(ųģŽķķ  šļ ŃćŁūō×õķā%Wņžž@Ūį €7SŁĆż€ś½/ų2;Źļ:įāņ’ģ)ēżŁõ%!ŅJ%ōŚņ $ōšö殹ÓķD5Ć#ł:̾ €8śüīßīūķ ļ*ń/; ßģ²^¢Ēė ėņ Ž!nŗ ų <ü%Ūšūāļ"Ż;ąN$€¢ĢŁ41@Óż&F9żä³Ö,€,ȁĆõÅŹPģ# ÉQö:æéœ3Ž[ČęåģÕŚĄ¶t8ėŪØū³ŽÕ3 ń9ōå#&ūžR!PīĘ*#MņĮkóĄķ’¤>Ł*.Ń·½’ź8śØ‘+ö3é-ōĒ/PŲüIDÕüšę·GźF JÕ÷?Æ((KąéäūĀæ+׌ń”Gō*×zÓū'ō Śł1ō)³É[äŹ¹Y¢9BźÕī<É’Ó£ÖŻ!’Ų]CÕ~ZÖÉŗ&€/”—SfMśņ6‚Ņ€D ŠŌ!!¤“ŁĒŗ¾‰m+$€‚„š’/ö™ūE/ Gń‡ ®>G:GÕ ) j8v1üc-€€€ }>ŌŲī›}›7(œęzÖ§ƒŲŽqšżQéĀuÄ€ē}äå€é}0żŻüә0"æ<€€µžÆ’å ėŪ«ßw€Ø*U¢}^8Ī ~ā<ōł&ō UūÜ ģWD-ńÓžąJĄÆ×·÷Ļ +8'Ūž Ą€×+(üÉ:¹µŠ¾4 ņ& ń!ŽÕö לöö$I䞣)žéąš ,łö óŠŻõįśä īó ü’$% ÷ż Żģęśł Śģ/¶óÜ’ ¶č&į1üéūö‰H÷ö÷ē.öŅ ŁłŁQÕć9Öäśõėų‚ۃĄõĒIÉĮÖĪą"×ĪėøŅ¼ ą’€ģķĒżŒė/ \>.Ō~:Ūćśź ą“÷ļ'Āaģ ķ+ĒžĆŲ,$ųŹ€’ŠĆŁ ĪõĆķ ņ-Øćöf×ŃéåłRóüéģS׎± 'ė$į ś’C÷Ū€åÉį1ōŅłĮłŪö)A׹å4-ÜN_$āøå„üøūēLłėÉė$ś‚ ū ōößBüŠķÉö3€õ ź½-į+ä żÕó’æĪšų•` -š÷Į÷Uö$ųÖ 0ļęBÕĮ¬Ć Üėxõ7äŠč÷ć*ļļ!åēöéšų¤15ņžųõńōFū/ܵšēź’ÕĪļŃļœ6żCcāĪńD ü£ņ ī:öęöC;äę  ńąŻź öņšżÆļųŻł ćļīųßśšÆó€÷óē µžģžõ ęüōņ%ęį÷ ć#ķįÖä’éčŽōą ņ!Tčó%é šłēżŪžß÷ Ėźxšäźżīē<ėķńīžėPœ łĢõē÷ķļ 4ķ #’ņźżįśżų’žģžę€5š’ņń ōšü:ń"Ó&łżD śū ļųļžéBó -éõśåłūõņõśżõļśųõū1ģųüēū į õļ’ üńģłÕżŃżöš7āö ņ łłŲ óųżķ’łõö čųųōś šüĢēś’öēö ś÷ż÷żž  ’  ņż łüł ūćÅ’ ’åüõ ż ų šžüžžžųżśŪÖ«Üåō5Jē¾A(Æćū€å0é½ģ4'9Ö3śÜÜė¾!ō?ęėGōWąūCå0ś} [÷ę8ÜRųÄDöWüżŗģśI$ꮀ0éčĀ Ī Ą›ÜūäÖzęS+ßé!_š"īŻĄ3*.ŹŪķ7ŁźĒńÅBųE.ķ ų#ė*ßBžCš-V©ģæųĶ6āīü‹­ļ-ļß(īļłūĒčāŲąŽ*@ҵ¢ń ż’’Ī“޽ü÷ęōų :ĻēĶļöłą’›-åž ü’ķąńūėśńė ł%ōŻŚ<Óų“AöėńēÉ’Ųüń śļ ķśó'īäų3óö'į ężSöźśžīO ŻęŃįł÷4öźśųņ Ļ÷żėņ ž¢žõ’ōłéęņžüŁź ’€ ‚cģń’$žõ%Śž× źÜ- ģö’ū!Üż%9³ÖłŚōšĮłÓ×6‹÷õ'ļ %ģēŅ Óió ō6Öķ¦Š77ķų¢ 8&( ā;Ɓ± )€Očż?į¾9ć¼!É5Ūńóū(Vļ°/sÉīŻļź(Õ öIÖš²Ü;Ōżāčdē M'ĄõÜĄšć¹HōPÜ(ńęņĀŁāźŅ †é1ż–ŃÆŹ!ü ō-ÅbS&ŻČæč)åõ/­4ÕŻUāłh  æøż 4hDK¼F,ź6ŚI£#EÜŌæ;€ŌłĆē!€hąõ66ł(9Ö#"Ŗ}ģ` Ź€V¢,ö÷¤Ć½»ųū‘בĶÉ1 ēš÷ €ļųųŲTŪŃ KĄÉ€&Dņ=‚Śīü O€ Øø}K€sQēUĄóółOݧ1U*΁ėCFÕ}34*ĄĻ&ŌĖĶ Åóø°Y€Ŗń35Į=õD A—<¦(×4CĖłgė(ļł@ø?%Ęh—,tĖ4*)—3G²€ųÜĖā"øbźŌŃłšł śH~ € ü±Ń-üaѶƒ,ʶū „į7( ŹéŽ<G?zīåųS/Ž!ŪŃāę¼7ģłčŗ$Ė ųų7ƒ& ąō,U *š,īņ€ŽŹ~‚7€ąÅPĖå*׿q¹Čģ4»!č€ęåš’„ŻģöI !Śš×šmB:= ī+źė)čųąńūģ ÷ Ęź ć)é ģóż Ī×ķź% @,åĒ*/7"öōöŁ0CŽāÜ-ä¬p±ŗ źäéŁČŁ ÷7źČ !’×ßĻ÷Į(å"÷žŪłņ(ŚŪV>ąüäßÖ ŅĪŻæĒŲŪE³-õ’>€ŌįÜäĻģś÷ųF ÓŌLājē4Ąšģ øõ$žļGļĒņ$ź21 K;słĀäć&2KSPõåždµąÕß‚Ł*ęē÷(Ž%óōØFä/„Ē&4€åč:ŃčĻ € ·ö‚äė÷&š įé~ææ-Ų€¤,Ē*ČąśVžō&»ķóc.Ś€ÅƒĢé’ Åź%ĘN× +bøåźĄŽ+  %ÅŪž%"Ż ś•Pįś#b’ŃÖą7”“Ü ~ (śōŠ($ ž-ČRčóņX¾WTÕśūįžōų’ Ė8 üžē1ü÷ļł€ ļ(†ōāēł÷ö-üŁśpįńä | äD" "ć%ņ ų#čńöė- ęüžīśų’Ō3ćõ ķ3łń’Ī) ’ ī’ļ* ’ņÅśģśžŻ!%ģg÷" ļõ '÷ģ žēŚ×ĢŚĘłüīļŲżüöķ+ęöó÷Ųķķō éņż üüīćßģžģ ō‰üļ:’ģóųėõ² ęŲļ7ėšūšżżłūū ś żżõśjōŚē Ūó żö ¹ųżņų ^ ļ  ÷ų…’ōÅųēų’ņ’ ž’ų ÷ļēüģÜüóüöłłöģ ū üŻūż÷żö üū÷ ž Ęõõōņõ² ³ģ ?īōōųž9ų ōõžŚ "üõ€ē:żńųģżūłżżßō÷õęšż’üžłä÷ąžžųśģ ų;żĶżķųļžż ’č ż÷ž’ų7žņU’ ńų÷öĆņ łņśņļų żųėóü ųģėžé¼?śńéń? ļžęßõ’ū2š@üąšņ ÷ŌŁŅ+č­ Ģ0ń×ę$Hüé0ŲZĢū€»ń. ¾ÉĻĪžćÅģ čø»·=§ĮćžØ©ł€Żģŗ–üõ'ŌŽŌļ¹]šŌēÕ+²€¤½?)¹é€źä7äČšņį;ė dłč€Óā½ €łēµī8łä’"<Ņß܍ “x’ Ł!ŪźK'ćZó”8ĮĒāÄ+°˜$²łĻńĀ2ą æ6NŪź’Jž'½BäļŠńt“žMļē ó v÷ńžM@ū€ńŽ4Ššęßė?Ģ6ųXö&D‚įćš(ųŠŻĶóÄšr9„šÕī2Ń$‘8šń% čÜņ÷o·j!æ€Ńóūé߁īv ,Nē`éņŪ!å?€šąöÓź7a * 6 \ļūü8 %õߊLž!€äōųéģėšāDióa»÷ōy éÅćv*ķóā‚ü’ĄIŌåņ+ ūęūŅüŚŁéž €"żóš1É3 5+ ä#.5+Qć€Bü-õō “øōņŒźī Łū=Hļ īWģ ±Óā1 Ūų“ķ4õé AēŸ*r@d äŪ÷ė÷ü÷Ń!ąŁ¢Rł!’š<ĢėīŠ'óĒ ń; õ<銟ž&# %vƒ“$>'Ä 1ńóļ #—°€×ŻĀ{­Qōå#’łę €éūĢbŚ2āõ żÉąÖóķ"Õf€÷-S~Ӏ…š,ėAF€šśōü}ÉĘŹ¶¾ė ĄåÕīĻ Ōż(ųEņ*’yō€õx€Ą·RŌ¹Ęåõā<O 1ģģø;ųöČ­$’nüļ ½EĮ4īāÅČ÷6å€ ‚ ž ŚēcL‧€ éF‚­:ł7įIŁÜÕžsć»4’öō¾~#°ł 7ķź<Įżī$ҁ¢Ś«© ‹I§ģž<ĻūT«įF(ųĒžžź)A 5Äł I^PäłRŃÜķ€t™ćīāĀ| @÷ó"éėΒ޵/źÕĶ5@߀.Ń–õŗčuē"ą€A<6’!€ó[Ö ęæ’‡+‹łųŃÜéóXŻĆ€5ŁøÅö#ņ ,@ėē)5)Ī$šρ0žåīnń² GfčÄx 6ģńŪ ‡Ćøķāiė繫JøGģĒX€ųŁ}G(Āō¶1ó(aCš X€ø€‚&BęR&n)’“Iėßō&Ɩ·5:1?żŻ*Ėš­ą"%4ÅŁ³±~¬vß×ó€Įį,+ś€Īņ.€²øĶ€ Ö ĆŖłū{€‚Vņ €kŁ‚/ÕD~7v1“€ó÷Å’Ö|­ż. Ƃ dōŽś£`½€ĖSčĒ)ōŻģč]Ų2~ĮDÖę#)€ “ŁõÉģ2]ĘåÆę§ ܀ÕDņń3é’Å+Ó6!sųŁ€7öŗųT*'Š źļīļĪä•ó7čūóK8ļŽķźåäĪL¶ž€ßš~ń×ĶšŹBĆĻ ėöĒņģēš€ ōŽūłór^Sōįķ2ē&ģ€ą×ųų€›žīŚ%)üžūĄēąśē -%ė…ųē ’æģś.< õ9±=\ź’ŌoŠFķōöß ŻōšĻZś(ņę (ä ;,ęQņõĀ«{.X śa*$­<ņū’ĪEŚķĘź8ĪhĮ)„( H#ŻÅ¾ŪCl/Ž5'Ī5åRóńJč¹Pś2^’1üóDٜžŪwßFńÖp¤č5įéēŁ Gņ ²HŽ#Ü,ŃČ#¾. ł źśō%šąøÕ!.# ćĻāĶ4æłLĆRĖyį)GHŁ`ķģķÓ0Įį );¬NJ€!üAŗū¶ . ” Ō ~8/~·ēēžč ų üāß¼żšźūŲąųōąś!Ę÷žī €łążś öćł ų Śģ ł@ų÷ öųöčīš%ļł’ĻšśšÜ Č÷ķ öžō žś’ķų žżżśłÅłżÜ"õūųRžż!Ļéß$ų9āŸ śźž ńæĻūõō ń ėÕ6źÜ(ųś 1Ė÷"7 "ų ,č ż÷žżéķ˜ģś‡ŲŲŻūŅAöÓåė ’īįģ×÷ źå$󚿶M]k—õłćŽ&ķ3šņŻęäŃÆ-ų$ė§ģK’ć0ž< čžČ ųÖ’õźśųāš ą  śņņŽū7¤šō ęÓ÷żś¤EėāęF"¤įÖšž ¤åųŻāöõŌåö°ż×ŻEłž#…¼ēü¼ĘņŻā-'Ē’€¼×¾¾„ć x-é’»®(]ž'õŅł¬6’]ł45‚óęĶČ…ŌĪéO)#į܍‡ ”½SāĢģ-GłJ |)å‘śź– 1ž×q6!‚±ép łżN.µ§^“N”:IŠĖ$MaCÖU½¾ĻŲ»¬ €ņ a Å €%ųؑōĒ+Õö ½ó<å^ņ‰ĆųA'øś1’åʞ€åĪ·;« 7Ü5‚b‹€ē"Ņó0_’9Öś ö,"š$<ū’@T÷ŌłćßEößĻ8÷·€Ō>(ōPę¾i8ó €,ßī$)śļ–ą1ń«Ü,6§q ü€āŻÆ-śž<@Ēż$2$4“"Ź;BTž½v+åÓ¬ móŅśĒ ć,Éśæ,~Ņ ļšö'ļś¾(_ ×’œų##SńÜĀĢų;€żø ź ÉÕ$=Łö’ &½ėœóÜĮłÓŗ ’ #ōį šó…ƒó"ņś,/- 4~ õōń:(żF€ęžļĄ“U(.&“EįĶšØ{Aąåäüų.‚ ż¼ų÷öH# Drā;)¶ čďõņõ ķō÷ŁE[ÖųAūčozŻęīÕ9įńźä*6` ĄųØ2Lś ügYwŪæ¹Å€ éD[ ßMĘųźė"õ"}éōsźōÖ?śUō“ėü“ł’ĖžžUŽ-D’÷&s0! ņÅųŌž4īų„7üóķŃŅ( €ś.ķõß$;0ūß:4 ž>’ & Ä4IõŅ ē &ėė¼óń*šä‰ !€żN $#0š öś+Ūļö1)śhõšŁ“śą0 Ńłłų$/éŲåŹū°žįÜ ėŠÜé šĒ śų ųę?üłļūżżūü é$ī,õõžüōļ.ųć4=—+żžūń īļ¤öśķłŃų›ļüššŌ÷C ńHżß’ Łōļņņżś’š#-ś~ż…ū śüžq4’é—ē»"žū˜üųļėłśīśä ņ’ņģńüžłńč Å&żłöń3ćN²ō’ ÷IāŪč žī’ īūėü.÷ōÅķęDņ÷žŪ&1ųōžtßå—ø y1'„"ø‰ ⑲ķ)šÕ—żAśüćšd€ #ōÕÜćVļ(ßŃżÉ<ęłė#%ÓųŲųÉ»+ķī›ōōū±ų,ų™õŪüöóę— 7Ā ļļ) łŌūÓÓćķ/ż% Ė(ØDī|ż#ł’ž?’ 'ī ó“&8ķļ€öšō>ÜśÓģ 7īķļ. ų5Öų ńßėƒ  ńŹéßū%īćļ ś  ±õ¼ ū&óˆžå  ')ņ fł2ü¹ńŚō3D<š"ŠēŚžżö'÷ ūū?€ļöōō!ßõū ÷ Yųé’÷(ņłģ½ Ķ ęō<ų×ļų Öźėļ¹ü żüéEŲüdė3ė öōßkė¾&Ņ÷ĀķķłūŃ"žīüėųī× ÓżŃ ŀ!.õö*€ųž×óØĒžź€Žļų ŻŪļīŌć ūī€üł*ļ)ōļūq'ćō¾é÷į’čķw żšĻśūśÅ#÷äīµÜłģ~ū÷|’Żćöōż"šņ! ļ$ųł Yõōłüūō€śūäéłųś ) $ųõ'č÷ėļö'84ųééļ‚ßéł8üļŃÜm²µŪø+īÄ÷öć[8ėīž_!'¾ŠķC‚ēō\÷ä€6<ņVįրøĖõēą|éõŽ2#ś—ų'żó öŅ"Ųė \īč&*ÖŲģī HJęŅŲžĮ4ń-)³Kė§(ļ~B£éźõč -ēYņģ÷¶ $XB@.įĮŗ€ŻŠōd*"Jõšóż $ć įŗęś/ Ū’@ 'ńźŻźķXń.üūčłźźėæśūåō­ü> }ö/14äīūüßö’ēŽśé»0³üė’ēųōYłÓóė¤üēüõ æ¾²õ": y¼Ōķ ą4žżAēü ż“ūļū÷łøŚóä ńÕņōį ēąŁ #ćäąī÷¹üļS ¼ūęĖŁž+Ūš)ŗ 5/„ ŌÜõæż'Īč( žĒųķė~7k)ģēźß&-Żõ»ך ) įļ&ųęÅŖ$(ģŪüå(Ļ%Øęż<ō¼šē.ÖŹńĶŪżŻ­P÷“€ Ēźń»óó ąLųņ1éņłsĢńż Cēąó ü.ķū1żöčßłźżņķß|ćNüńėóöĶ0åŒäöä8÷Ę֓Żė$(’Ræ=šŌ² ėē-Ī4äŲBģŚåź$éģ=öæźõ`µ Š*~ŪźŪåæ’ ¹ńŖ€Ū3’šR€Šž$ćŹĢ &“Fūż½ Vć@ٶF.Š’ 1’Ÿ+Śņš÷ī#ģEåė’,6 ēćB ćļŖä ä4żžš&õēč%Ūąß,*Ö ’BŌģ$šć÷ü źŁÕ?fÉ ÉņūłÖNś éÜ&Õāųż’ōŚźü  öģ šŃ^ź 8’ńß ü åöÓ-õżķäüģōōč½ƒŠģīõ8õšōģąüöõįūšų.Ģņó’Ģš’ńżĀåū éźōÉ$ąóę’šł÷õį'Óńóī;ńõ  äž’ÜĆńņč v Žż’ōė’žŪķ8ńŪ×ū7įį šż7ķIŚń÷į’ķüÓŃ((óš ż÷ś ż’ĪōōŻ^źŃ%ģūź;.5ŻīĢ ķö,ōIļa%įų ģųš"åżY jćžł1öīś’śŒõųš6 4õŠüāėųłģĶš ś’ų— !õ ō€÷  üńć!$ Ćżķ/īņł „[ł¦ś ’öź)ū]ž ķ ÉÕļķģšų$öłŽ šĪž2żóš ņ*5üóńóÓ".ł ųƒųēāīžūéę’ šõśööō±$’é<Å!öśÕóöł ō‚ūłų› ­é>®Ē ›šģž­"ūē %ž­óx żÜ÷+ēń9 ūļņźéšó’¼ņ ŪņĢööūŻģżķų3īBõ–ū÷ż Ō’į²ę’ķįų’÷łų2÷ń!1%åāö ’Å *ż.1 čśéžł  ś ū÷ ü4ńł÷  ¶ ą% ū ó żĄö#ś$éüūłóņöģŻžŌ’7Ż ś(ół-ūąč"ņ% öõ ķńśÅņżó īū  š å÷ ōū÷ßŌ ×÷ņģ,9õų ū ÷ ’ ōņÓėÖżźł6÷, ż!öųō+Zčźė’) ļģļŲźŃ!ņ"šŹG#€ń/-ü łśņ:>ā’śå ¼É¬€õ 9åŌłö•Üō$×Õū'!ė € " ś!ŲÕžŅ«9öą ā€ēų;ó źåńä׳śå’!ó żäģūųōš$ ęķłė6ļ!÷/ $€å žŃžš ­Õņšń Õ ėć$÷ä×éö!Īüļ#’ģ8> ļ·ō ĄÖOōīō ūåŹ3ö śńÜ$/ėĘ žė ĀōłŁō)†ņÜüī Č)åčå€~ūHī"õė)ķ"šžP¼ąūńGł"v ž’õ+µŹ€ńū¶ųų ū÷ŲÖŻķUēāĻöęšóĢ’óęóģé ö  #-» L»ōī2ōżŌōžDśļ’ļO "õ»÷ü*ķ óŻ ®ė CŪŪļ}^ņńž", )ū2"#ūķÓÄ ų!÷)ܒķŅ!4€īLݶ€V ö &Ü ē üÉטÖńšš¶yÅņźMńŪäōį0»äūīĮ÷HĶī1ś×5ń!D.$ķŠŽŚŻĒ8Ų!ł?8ńI;ƦP^ū#KĀŁą{š3! ī÷ų9V?ćč^÷üü„čDīå'‚ūüš¹‚+4żŽ/ € 'įŠė 4BźÜ5Ó“ÆØū2ŁĒ'ņV/ 2ńåŠ ćś](Āf¼Ä2%Ed‹ČüĘķ’¹ģöź6<óĮé+ūźÜ֎õò€ūŹ 'ךՀ ĪĮÓŲī4ō M/ļ~:łīöM+#óō"VčY  šų(śĀżŁ}*óņ÷ 4žż±‚Qšū½ė üķ÷ąõž)€ćC·Æóļģ Õ"ęą÷ł ńśüä ŚģJóüčņžõ’ž÷õ öāżóķżž÷÷)$ ’ź¢ööążöīēöż śŁöśOśł’ üüūö ėņó± ÷ėżüī ū÷žś÷ žųžžżöåģéļžCīśś’ķ’Žžóōöüć÷  ’ ż ÄŌAü"ń)ę„Ōė;ńŖ2G !øX õ(FłŌb#,{ąbyo$!ėĮ§Ķų± īųČž?ķ*!ēŅ—€ śČõģāųݲ›Õ Ūܽ­Qöč[öŁ“)Aš­åäÕAŌūĄąś~ė"Ķ€÷LT&Ń$Ņ·śė.;Aä/ż…;¬Ņ“7)įŠüķ°3żōąąōł¾’!9 ±‚ö‹śóŽłĆõźśā揧é)ןŌGO öšÓ'Ņ.ė’żTÖŚ ߁Ø,DŪ )>„Œ@ćŪQu«Ēė±ä0ś€½*õ?œt ;g*ū<’€+īс‚2Xhł[тĶ!1īõō$N^Y³LkŹ‘J`—AŃ Ļ@›ś}ö’ųėŲ׃;gČ1~&A CŚ?·>Ćąų‡ƒöĆ„ÜīļŹ#œį€æ>‘Ę ž€’ķ!ńżī .*[Į8ÅļšŽmåų™-Ļų³’L%łą<’łš÷5ś €õßžŽÓš-ų’ śś" +łöüžćüõ ģ€ö÷ć ųü’žł€5\čé żłų=’ž 9ü’żõ š)žóžž€óų’€ķ’žüł’éąŲ ’ńżūć€ōžśųR’öš }ż õ0žø üøń(ü÷ńb3&kėļ$‡ļł'€Ś/\šļ§Ž¶Ń9ūö‚ 6ŠŌū'dś×»Ę' €ż¦ä>6®²sX śśśØ‘F)Ņ=¼ü#UÆńģŹZß®ņåFĻ÷#4$zo#LĻü_›%īžķŁö«ō¹€O<į 3ä@ń`ąå>ė}Ī# ņ±ŪH¾<¶/¬učÄ źŌę“4,Ż€[šö—ö D»’óē˜ČüŠÆ›dŽåUŌ ļ‰ DŅ'!ó"čõ,dšģök įż" łž÷9ž}īÜūąųõ½+ ń=#ņ<’ešžņļĢķ(¤Æž  ,čīš1ćž ēšŌāāTž&ØēŌ’Čé4šįō’ *ū Łwä ķšāļó žžōē<"ö ōėń Döōaįł žńŪüÖō ųŃóŌų¹ū čś   ņóųóĮłų žš ęņ  # öłöéł5åńų ųęšüööž ü×ūŚö«ž5’ēśī÷&’ßż÷łī×ņö  Īóōõņ’ž ī§ż!šņųóēļĒ#łõżöōÜśįKųĶ’’üśóīęóśÉüüdžŲ’ļśę žėźķ ’ óų%ū˜¼Ü‹ śūPėnŲ„édn€uKńŸ7ł0š.ĻqųAßģ £’Č2ŗb ń~žį*€ń~õB čńAķ;ÖūAPö=q/²oņżŖ*,fóŻĶoųLæęĖų^~,žķ5׎üŌĀģūÆśÓöķŹHÜŲ׍īņéź#½Qqąöƒ'ŃüL ’±Ęā1Ž]!9fQÕ×ĆŃöōāÄśŅż¬ĖČėņ Ģ ž€īž ó Ēē$ ģšļį0%āšōņä’ żž īś ō’źµōōūī/õ’ü+ųž ņÜ ūą÷ łõ³ų÷ēžś#žģųŠ ÷žćŌļšöõ (öö÷łźü( śąńĢżś÷śóŚéżöż Zā’čóĮśčļėž š× ūżüfZ*'žö õĆ÷ł ’é8++€õ ģļš'Äńöśä Ž ōŗ†ü#‹ķūóõō?į@ļó`éą ōĖ8š途ųęĘ ÷ėēÅųÕųģUųłųä° üō ģÅöŅóćš õ ū0ę÷ļ)Ż×ų*Ž 0éäóīųł÷šŅ÷ ēPūŲš ö”ū-ū,įć’Vģ!ŪÄŽ ž-īŪüćÄų÷ .](*ė īó GźWŚ ×ļ/~€!*U| Gēōņ" #Ņę[īÕõššīõō Ć#ź¬ ł2\²’ķšćĀ  ׃Ņó~ķ2'é žęĢžčų§Ā‹č8ct:ŗī<% ļßąįģø>īŌ-å Ł&:%"ūā%Ū#ė* %©Ņń‚„Ś D'"%O€Mč÷BO #!&C5RłÉ>!łŻåżf,MöėłKŌ3,õķßü óŽž÷€ŽĪöö#ŲŻbūIŚö÷%ożÄ²õö’ģóžõŻßó’Ū  ßöĮ ś†>2ßśöĘļą;}šė 1’€ųžägł  üķréžõŌüę*# śżüųźłō<śņõ½īõśųÓ÷ ņ0ęNņjß’ńL’Ū@öėéööŪē ā÷Ääź ö ēŁŠ×÷ų"č %ĶŅåõMćÉu¼ üłóšż.óźŅ  žö× õąC#ĶõĶžTō5Ė$Æ,ģµ5€ŗ2ń$ń2:čō(žīōąĶ L,ó2~üó›E&×3čņŠdõ~ü"Ž ü™€’Ųż#ÖŌäźŲ> ļāžā Mā74’Óļ øįīÜ“äū %ųõóÜäė’ęėęų,Į:éVõļõÓ?čüY 4šūõ’ŲÓŲżūłŃśéĆ«Āu'ŠäpŪ6’Ō–3éÓ"łÜ ÷ €ģęÜ€×šēøŽH™Ē_ 'óćüś*žÅżlņ*ó(# "ŽļÖŻŃ’é&ćlįśīü÷†‰‚’• #įĪü$žY€9ČĖ€!Ėe¦ (’"ģ:ĻšŽ€ōīŠņāŲßÜÕ ß6ųź~°÷ūX)ž8Ü9óæļ!õä +ݤ’¢ģ,õ śmųd&ē,:+,³ļ$€ņķ B³¹.śīėÖ¾ƒā1+Ę4ļąé+?žžŌśÉ CŲōkŅ’ēŻ æačõ źęÉ ^÷D>1Ņ ×Ż.¾ é,Ā,÷Ł—Sżė"žą÷1 )! I(Ą2ļ™÷ Ś WūŽ åŽ1žų920<©ķ·ß $Š ÷'ö÷Q *ŚŻūŁ’±šūņ×Īdö6%9 æÅćåÅ( &ųj/ ÷¶×<üÆO$Āø_1н;ņļäŃĒņŚßČš¾łįZĆŲ©Āé<Ė"2čų”0挰 @ńųķæÜ*%.×#Ń)×GüĻÕö±ö«.(ķ<āÕ× Ō;å€čõÉēåķ4ś:åś čūü Šö *  õšō’’ėöSüļFł öóžūśõāö ńŠ’ųž÷ūļņōÉčõńõł šū ė śķžšźūö śžņ0 ’ūł žščłśó#ś äš ō ėśZ ųżżŌęļūĮĮó’’üžļ÷!śģśīõż÷%€Ć:,ėjĪĻ÷Ę [RšŃ;#śÄČ© X|čž#Ąä!Å2nųuǃę*.aÉ5Āā°,ķl¶±ż ELņūĒž žå›DŲhŪ€ż_Ż/ĮžįT`źj܀Cū [ĆēSIžŻ€cē)aPó–|ö$Æ €Ł%3Jį6—>IKĢ÷tī.ķ­ÓóW €ūģ0ž§\ż-ąŸę&äöŠķćéC2"cņMŸ,ķ÷ķ"ōę& '"پĖź-é /;Ż$Ļ’ė2ėÜąåõŪóĘ"(źé‘õ˜ į@Čž=ī×é߀(ö Īńķ„V źŠčQųõēåå!åöĀ’龛ūóļ÷śłc’ßLĒ’ŻūÜżÜī ąāįżŪÕü,Žł=šŲ “ןė ÷¬źé €ėŹžMū Ōłģ Ģō*žųņŃ Č15ļ­Ü4ōļÖCūžmć÷Ą€śöŹ'FīńŌÅ!¤0Ž!-ģ”Qģ’āü4€[¬¢Ū5ƒšPć ŲĻ%z!¼±¼øÕŻDöłČ<M, Cźņ&+/0~ö&Ü%/‚}ę& źõä×ūč²ą@¼ Ń&żŲ ŲŅtńÄo‘Żį ĮüõÉŲö€ū÷°Ö¶kŠ5Ś ’ßņjģå6üļ²Ā€ž¾1'× ÓīŁų#3ū÷###łźö" *łėü'żī&0 ų!å&Ū( óžęäżłĘōĒżūžć('īģüūśįććōūė>ż £%żäDŅżĒźžö8łüöżņģļū’žžć’ śż#š śēķżõüł( żīóėCOč$ĪŽ Ō*čõ čùĶ)ļ ­ßóÜŚ~żģķ%žč ūśšęÉņÖ€ČõaŹQń€ ¦Żj€‰{0Ųę³×*f0U~"ććį`ŚĒ?4€%» ‚Ņ]ž‚õq/ "€]$żēĶņ€łąKA€üĄż·ŠĘģ)€Ū}ż“+ū:"Œ;ü9ųē 1ɍ$€€ß Ņ,#¼·T÷Qqčņ­šē>9€ęe@ütӀ€āoHņ$Z9Ą)ō6äæåģ~Śõ=ęčĆČNģą5Ęēē&ķž žĖ4ŚF–A1ģ0ō$%é4ńū”ż¼­®ęÖ żPļļėb®$Õ~(ę1Ž;Īę č6œ·×h€!Ō)ŁćZ=Čā篐ī€"Ņo!ķ%’>%€ŽŗV(樧3 Ā×ēķģ }ß¼5h45Ō*ŗŌ €ē®b¤€Ā³^Z/"æō±ßūåā*ā$„€ŁŚšÄ,±ŚüóÜ ²·ńŽR^ü.Ž Ī yńō ±ż8ģĆ"ÕŁ_)~ā Ž ŁüļėÄ š€ń&ĶöČüłhü €D’ōóĒ÷Öóīšłé+öHūķłĢłążś ō(Ž öčžÉ‚łĶęąēõš "šńć čżųłć+žš’śļ åšüėųõņżö łš€śūų÷õńłų’ õ śź"÷; ļė-ų9 óīżńśä’öō(7öź Ü ü @č 0Ņżšīš÷ōɳõ Dūń*÷łüžļŚ ł0ūżóų ŲšĘó: łŹč ļēüū€)öÉöōĖ’bą’žÜžö Ą ’õ  ’ńöžüčśüü ķ‰ õņ8’żü0ų÷įżłś’’’ēÄé’öž’Ōüłō ģ“0šĖņ`%šüŽ='"-÷ŌS°Øü,2BĆ«ģV(ķ÷ōō;ąć;Žhż6•xÕH%„q4ÕČCµq÷=;ŃŲĄķå;šČÓéiŹĒ€©,ū ōµœ²c²5ōŻ”a?QÕEīķÆ#ļ÷QF?–( ėmŽ’Ÿ,°6/ż& $ŁMžÖ ŚįĒōÕ~sē€&üš ģ5ķ»Ž1ėb™ ¢)ōöń¶±@äē"!ĪŲŁOłÕīÓĒäč @Ęü.*»ŗ*¾ĢóM ł £ģķš)čķš ĒŪčąė²¹€ūćąßį#Ž “Ę)(äŅ’7Ļ*ÜķŠˆā3ŚćĀ•µŌLĄ%× ..õķł°łś¼ŃžōÕąŲĻ ųĀö9÷ū+nż ųLW1éó› @łųõžģ@0ÕģĮ4)åōĮćÅŅ’-čõČźE7Ł’'ėŠžö|׹źōė·”łĶåĢ-1ž,#½ąŻ:ū„& -ī$ģżßģ-čÜŁŹ€īžÜāéŌGņ?Śģ8µxśżæ$@/ =ąźłåśż1ēGĆõ Ģī:ŌŸ’1± ó€ųõJśūć53*(aMNą0©ųÄ×ōļG šĆüå%÷ @éDŪó€õ÷’7×ėž©ŽüŠżP€= >é#ö×€c 1 ÜŅį³ß0/טüTJŪš¦°bāŻC“`2žśA‚Ū ŠÄą~»ßĆóčĀ€ü0†ķ(ęÄ>Wj }ūƒBʦ#€PЉ)._·€$ņ AņąaćųŹę[ŻYÖ…-j£ŸĶÓŅ̾*óõųy2å —śģŗ³¢Yšæn,Ķ9ķ€kü "Ń~vĒĄĻĪł4M‚£$ź~ī$ YŁw~Ūā»ģĄĒÅē ½%\ɱē÷čŖņųųW}Ą6/Ö%õź~č%Ģģš !’ć%ŅŲč įś ) ńŁ?Ū%÷ĢŅEČžV#öĶģšżįąÖō!lĘõ¢żÄ&Ķ5 ėéĖņąAńśųąži"ŁĀ†“öāģ ³łū(Ūńńżóõ":īēöų±öÜ’éšņžīŹļ ÷8 +źžó*ķ\Ū½õćļö ć Pń ŪNś ļõ°1’'+­&¼­øķK6ō)ß˽ć€CóöPžP3šż:pžśž€ą&:€Aõż‚ņįń€:€¹Ā„ M<9›‘Ų·YjPķį€皸>é8`‚¼4¼ÕķšćĪżń-€™ø"«@&½ö?ģA@—?ˆ)õzˆ€Ü«3!ź€ī/ײĖēü•ėhē)€0Éž!~Ć<»F,[ØŹõŅ*§éķāļœ.^Ö(远jļ³ą07сO÷YļŲīY÷āśūa Ī ä ā1śü ęūāłĻõų Ė  ī  µļ źü-ī€ėķäö/+ī #€ LÜ2ä&ØL-’äųåŚbżųń0ōźMźšōōž€ ōū ķ óŻ’÷ķóżö Ļņž#÷ ūų÷ ÷’ų×2żļ LÜż ÖŌō’~čü׎ Oéž[ł2ż źŹó(č ģ’ó÷żų’üŅłī÷łūõ ü²ģó3 śę8ōūłČ’č ų Ó ō ņķ īņīóüöö śēę ģ (Ųõüęüž’ėōņ żŁü ų ÷óüųīü ą’ė÷üöēž’óżżį^ūźń$ īõū#Üś’)Ś ükõ üśüņīų ėłę ģ^ę· ļfž5ķł+š½ōW Ļ€Ōł²Ūź%ŅšņķĻ‚}īéōś/ X¶éū óųäóę’^żį³ŁÜ¶¹ß$÷ėÓÓüö üķņŲūu  Īä [ūšŃ ņŻó !1ü š ėć÷Ē0žēņ ’"ą³$šįŸšļśŠóüö)ĖīõČ’éļž§óż"ōģö* 鳹ѿõčŻ śųųļž ģćśžę ’óūų 2šīń ėóģö1’껊ą éü÷Tķųķ÷öņ öųū’( ē öśÜš€ ėļžéāž÷*ō ó1ųńÄüņWöõ? ūźžśčÜū'ÕļĒ0÷’’ųž žD"ŅóżõźDł ’Õŗ’ņ ó4ńĪļō’õ÷’ ’žś ł łDłŌąķńśēż üķź%žööłł’ó &ļäółēęOöīõų Łūū, ķü ųżčą’Õż“õ’łčæõż&ó ź   ūńõõõ’ ÷ķū ’č ū žśśóļļ ķ ¾  'čü8÷ūł  ōųčņō¬ą’ģ õ’óōŪķõ~ķUš%’’&õ#ę ńņd$8.)>ŌćĀżó×:ģé!ĮśF÷ ū.Ę# &Ųåś ķõźß õļŃīš»Ž Śåß/×¹ŹDęŽ"Õ ÜŪė€ īóŪ<ńó«?śé)öóÓ½ų: €ōżģ$łÖčøģ ÷!Śōīü‚ō ÓüžĆąįü ×ó Ū÷ »Š@óėå0>""ü āķVū4-ń!ōQõųśü ž3ż÷怒ųżŠż!Į÷ł ęP€4€öõäųüėłśņłćåƄś)ė4ńĮŁėŽ żźųōõō ųł^śņ ņ³’  į’é€)ųę Ųž€özśõ żīžłŽū ūž ēš€ üśł+žžū÷Uļģłõ ļ €õØżõ!żž½ éšÕ ź@śńż!ę Öņ ū ' #!ļ.%Ś üś€Ęō>žųčž7 ü(ÓŻ īżōąŚDķ$ģėčóĻś Ö  -›ņóå ų÷žC¶łĶšķÕžüńąėõżżsśōמō óńöš/!ż÷$Ś3÷÷üåī,2) .Śök ü €ōéÉėčīųļłāŽų åķŅķšńłś éš ŠōżÕķ,’śžīģYŁ ©Ł2 ó>śōå/õę ü"ŌūÜžł+öūõįā ś ūšĪüŹś äß œü+ ’ żšż÷źóöŻ’ ’śļūēķõéōüŠ ŁŠņŹę  )&Õ#ćö÷ąźĒč1)ž ģš÷ēżžö šōų  żśūžčāżņ÷Ž<ž’ėśśłż Ūżó’ ż’€?öćöžēö Ų ’ö łõš ū&ūūŌśłśõėśŹŃćüō'ń Ņüyėüļūõšż¶~ųž€īõżśó ’łųš’ ’ õ÷ųõ žóü÷ņŽłüėóö’ åó!ųōūKéü$ łīūļ ’õžęüüš L÷TūÖū#ōĄ-óģŽEāŃ"1}¬5÷ķÓ!żśŅŅ1ĖÖļ>āGó ¹Żžļ~0į% ~ (żą’ź鑎Ī-žåÖ³Ķī&ö½ļ‚ę88$É ų’Ėō¢DD<' Ėū?8Öų4š÷}( õŲļ6/‚rŻļz77īėõł¹µõ¬Ė£ą‰5aōßÜéL±ū'Cž ŗAĶńķ žó\ö#ōöūėī!żžūāķ ĮĢeėśÓŲ÷%ū ۜŅöĶÉž *ąźß öżæū÷P źŃĪ ģ(ņĮłüHõ&9ēįŽģĢļ¢é¾šóõ Ķ÷ ’Ēśō÷Ńė& ōłśżż÷õu’éūź ōęķ ÷ööś śśó^Ū5 ÷ÓōłčžłĶķżśųź\_óŻé¤łō*8į!żüń’ķ ųÕ ģśź$öīįö !āŻ"Żć žūļ{ü0=śč!Ėōüü:ōÆžżõ3)2Ōņśõō åżå÷ņģļōš5¾é#ćõ ÷’ ü €›ģ’ņźźHźųö ļ4ų%ļ ’óū*Ń)üńķ8 į2-ņłšų©ą’ėC ūö.öŃ÷÷õē’€ā×ūõóåńåĻ—"Ąż ōōÉóųŹ8(_!²Ųńų KīōÜÜ öżéķņ ’ėū-ąūĘ_åÖŗē÷äéłćūāżóõ (Ó[żźā]ųé ‚Õ¹ųžŲ(ń$śążūŌš õüüūšüäēõī0’œ ÷ūÓŽśc’ūłźū*Óü ėžń€ś'ēžö0óéžĪś¾ļÓžżō)ōü?ü !ŽM’  óĖ2Źģüė’E ČžÖÜų÷ >ū%’śžžš7÷*īØģöČļ‘ģ'%éOšŃ’ó÷łz󜂞,“זŲó’ūžłšž'žōżŲłüż 7 óöųü7÷ēļü ü ōü֋śū³żŸ åóäŚ÷ üøüK „ķļēöó±ö)źäåĆÉq6Ļ ń, ' īā AÕīÓ"&ģųł .ūõźØ Ļķö’ öŪŻVO/üŽ!IŹ’śź’-ą×ÉčÖ=&)ļō;Ėõ€ŻŽ/ö Ūę5čö#Ž'#+/, Źćęäźõž 9ģ÷ ł>NõöŻūöų ņ÷×üŃÖ&³źīōå3y ųå’÷ķĘė".lāź: Ļķ0Łżźiüõ‘'żķõ2&ā=ÖßDK %õ Õ~1*é$"‹Bu91NJ{ś÷é!µĖF*Ø ¬× žöē6.·»2īā‚ē Łśņārąø/² €ƀ ¾8¹/õŚĆo­€ź× ¶ęśĘķīW®¤Ćęć= šż8śXóń÷ģ# Į&üĶŗŻÄßd¶šł 7öä'’ö½Ö'Ćēnė֚!4).Ņļ&,āłŅŠć²;ÕD<āŗå·+Ó Č3›ŃĮ0Äūģ+īDĪ#T/5ٰcŽ7 ā]ļį ļ2h“4ąå"×ĢČØóJž>äÖ®9Ć÷=Ķ-ŸśŁč.·ÜūåLļ¾Ävńō`¹äĆū?ź“Äõģš¶A¶ķö’1Ż.żŌ¬žŸ&¹ąTČTčIéń1ž%?Ü®į7Ėź ß2³b€S”ć7ĆCÖųóį Ļ!· o"z˜&żņŁčżżģŪkŽ:żż÷śéśž  ķńļżŚõäß÷ż ’ŚÜüõÕūģ-'żąõń šöńłņ/÷é÷õ÷÷ūś÷ō õÄóńėņ€ # łż%ōōł*’’ūüūśéųüł ģłóųšõ9ņ õ’ õčŌ’ śūųūö÷ē÷żüģ  ü Ü ¬ū  ģśłóųé’žł[čžÄüļśåż4 öšōūģ ’óż’ė Ž%ó # Žüōöō-&č×ėō’śöś’÷ķē ųżņPóżö–åö’ żųśžļžö"śü.ąó’ Ėd č  ü ü żūŽżÉŻķZž üūóņężōėŃ÷ł <ććł ęūłŅ /Ü ē6:čņ ŻÉo¾īa +Ķé /ųŗV÷<4@—ģ)ȹ¼ŹĪ†Øq=3ćCLŁ6Dė5ā³~Ū ÷÷ŽčŌݾ?āõɀu0 ŗ€JŠŁžO0Ó'®@Ģ؟ņåśüæ–Ģ5žžV2©˜åŽ&%Ó9Į2Ža “š Ž*+Eœó ųU6OŌ‚ äs50€ĖI6:søóųģ=< °?(Ž#k µѲ Ģōśēņō*üūŲ4³ ÓĮćŃīżņ10ÉŽ%XēźŁŽ ¾ģ:ļžą õ&ē ųéó ßÜŪMW’é<łü źķšęü ōęģ#.ß Aś÷1 !É ?'öß’Ö¹"śģŚ÷Žź*ļóõåöżäÆŌźż#ķōśčŽó€ņżåŚēć& ąķīÜąō|¹ Õķ9ž éūõš īģųūüūįšē ų  Ō)é%ō) äŪ " ēšK ńęūŽĮN’ ūž)īÕōó ĖŅÜńłż÷ē ÜŁõ7žę īÄą,µ ’ ÷÷ž ’ü łęõų" č3ņó ė 耳õ° čśĪžłļźłüōż’šłüķņ÷žżüēīųöė ü š“*ü"õņWą' ś*ń“ü#ō(üõ-÷ Ł2§Śä &͚öķ{€ģŲĶ÷$ŅPźšįN%śķ'īŗ€łčžČčłĢöū)Å3łńÕŗÜėg€ÜĆģļ !/ń ? ÓjPŽ3Ķč™") ÷EŪł÷ūVīų;%'%Ē €ĀĮ÷°Į0Ō ī"üÜ&Ä~ażģūłąŚČ×č+3Ł.ņąQĖēŽļķöZĄĻ,SnģŁś+äųš÷ĘõõHĆ=öś'ćņB0Ų=ü“’ķš²AÓńśĻÅ’Öō ü Ń Éäōę ļżŹA$ĘŚķÖļš ßīōļ÷åą#Ó¾žÕ ū łāž ņŚō )äó żõłÄåĒ’ ›ŃēŲ īäęŌėāųõšį ō żžęé łģéūųżšūüńü ūžĀń+ėÖ÷ž ć÷;öö’ ōņUåß'ńč!ōē3©=(&7!/’Ō$ōęäƤżąö! 8!ż(į6ĢHꚎ)¹ł#ĘńŽ IŲž}éģ šąļńŌŁēÜķń1Ž0&į»ļ1ō Mė++ņ © Ń=Ēśé(śóäŽ2ƒć8D1ž)ś÷ćÉb }B÷ūåśō?# ž .+é'"€śŗóīćłżćP»«Ńåõéńć ö9*3"óģķ$õ öū&" ·1öōżłłĪ"’Dł ÷öģ ’õīļełžžŅüłÕļüó÷żōéśśž!š äóéūTōōó ėßM üū’: ÷ųõįõ"‹ėōü éłō’ śŻųńå  ĻūÅ #ž’ż ü €łhįÄ®’ #÷üČśJ$óü łńķõįüńBū(šį1ßÓö T8šõņ ¾ź ś#øä”ļ'ÜŌ üš#›üō<ķ<žųļ(Ģ"ĢņüŅō 2&ņõåźśūź,(ß’įŻ įźīń0Ā&7/÷÷Ļ*9÷O äņŌ Ņ÷ßśł-ō#;ēēųš"%#é ŽÉö>»Ł3ł ūłį Čń'üµõ.ś®ü ü ū(åšā÷żßžüŲb’ żĻ€ Ió ųųąśõčōė ūżļżū©±€öŽūśšž‡üņłķü’ņš  ö Śśüļöź³­čéų€ ż‰’®öū:ć’ ÷ś' Ļåš īī꿀’ī0ž ó ģŽūčō ū Žåų÷ōł±č÷# ÷ó-śž  ūīüųž’ō0EÜī Ū+łī/€ōŲņķ÷ü2 'Ü ūõšū õū!+AÜü öŽžöKāöō$ģK åćńŗņ ęņóć#Īńäö&ļęņē÷  ćżßęĒźēś1V !äīš ź,%-Ķųūē ü żśŚŻ ;0Ⱦģõ üśų »D#}õō*+ōś ńüżõł?’RĄeõčēķ÷õż·÷wū4!o€üžō;ź·Ś$™ćõĖųK üüūŌģ„ ÷ €|¤ dŪ'æōź÷ūé2TŲūł 5*K³Õ¼¤€ėńüŒ€ŹßüöłØ$@ęPū‚~ō5äEüģŃ æW’ś$Ć!ÓX0Jö} ėäó ÷Żö@öą Ģ’ćJé!żłL@ė÷ūļC…į]šōßä÷įōĘåŪņ €żłžż ė ūVü€ ߬  %Óśųųł÷Ż3ļłßń)Ó šżgąź÷ģ’ņÕīč%łėĆž_óöń€ł!ź 'ż 0ü čļśžµž%ń€Ņžž’÷śį!&żž’óųփśīżB÷ ÷śūłóśźćQüKńņ ņż&"üN ’ ėņ&8¾’9 C’ńäųūūõżļ’ė÷ķuÕżš å ’+ńüŚ>ö÷Ž éęžŽŪžē’FąęüūāśļāBń ī’.óč ó ųųįéŚü×ķģóūķö/÷ü€ś łžöśüņĢóņ śłŚė žūå* łżā!ėņżŻžŃ×įöå öź ’śäöł"åśńšó乣śö é6ų*äśśŪłįüīõö&’ ż åšżżģšõ žķö#ī ōųć/ ėł žšžéśń Cō ü ÷üėüń öčē ’ śūüņ€ļ ģÖźļģö ė ŪĮ ó õęēėģüŽć łéóż/óēų’  ūžńńöłüļü ߎżöü7Ē#żńč č’õ ÷÷ ļ ųééś'ļųćé÷ üõöżķūö Łäų;éģ čģīNļäĢū:Böłł)÷ č& ōć’ įśĖ Ś’ęü€ õ×ūūōų³öõž’śšåįł ż@čńüēķ÷: ūłéäšō/čõö A&č ōķē żżūīīą'ż,źóžääūŌ%ńńé ęųŽäģ8ōćöżłö ć üšŁł? ģ ńā’Q"ū×õüäö0īŪŠ.. īėū 0ųā ź ĶåĄšA%īł śūż ģ’ ņčłßöģķ÷ųŻ+ūś"öļ-Ž éŲż?ŌėüśŌśé ī32Ō źóŹéüļńć!ąߊž-ž€ó,Ü õ3Żé āāĢģąų××5č÷ źõīž ų.š7/ūć#£Ņ’Ė ķąčś+ķŪśÜ ÷ė½ųž#ķDµ ģė ūįóčļõŅų õ8ķõ!öś"ķÕŚ÷õßųö ś+žŠī|ńīęųĀ’ą5²éźŅ"üę9óč%įäõųūąĖķń ×ų’-#ŅłķęŃ÷ż ų÷ųóśź2÷żšķ ņļšōąūö’ öŽśŪųč’ éóė üüüüķóžżĖ5Ļ ÷żū÷ć õųĒ ōś÷żņīęž×żōū’ņ ś,÷Ėūż üśśŚü÷ ńó÷ł÷øžžś’’īžżš’é÷’üB÷öõūž'ņł Ū ’@yüüķķ öśåėżäü 1°1ģ6čī½€zx÷DļO€ė&żõ³+Ƥłģé=Öż żšž _’ł8 śB{ ū:ö.źģ ćč ’į^ēIJéæŲĻžX ਠŻļ߯ś2Č× ł=öŽ āéžīšöę ,‡&ļF#üł ņ~ńö÷ö ł€ü£Ōś!ķ' ÜYó’€üĮé-"¾\Ž ļ A,ö'éūšņõēč ųŃńģŁł0éūõŪó*šõ8Vī ó$$2ēźż ’Ł ²üüóå ųčå$ łüņō€*’ ž  ĢžOõ”ü "ćRūņ ōšńöč€ōō€ļüźē÷É äź śž žū õ÷’ģēżš‚ ’öģõö€Ÿį÷ģx ó Ćłų-F#' ßśż&ģņŻī ŌÅŽåŻžóō ł!żöõ1ĖŠ€õõ-įķ³"āė %ŁčŁģū­čõšō’ł÷ ūŽ QŚ ųń ōėüŌך !·"īŽ ņ!ł€.ģłõżõśź €śåżĢ0ēĄŽ ėźū €Ąõ ģ(šŚ2źõ’ņžüļųńŹ×Ų.2ķ ą&š0ķ&%ūēę  éōłļ’ųķä śęŪųŲīōēä€ūōķł×ōõżōü- ū%üķīźųęō)üī ćõ$  ;ūōüšå’'ū żü ā ż÷÷śųõōś’€÷ņ÷§ óō ūłśš ŽłŪ żņžā ż°õśŠž ėóńĢīģ’'ī÷öåõL ’J% ž’’žé Ó<Ųņ’;÷äüśŲ ōš’ž óė7Ė’6īżģīqĄ#0õ ž ³Øžęūüż öń ż§ ķćņŚ ’÷ųśnś÷OółĆ ń žŹĢōłżšś:’ ńįżņ. ńų Ü’€, Žžė÷ęū ęķžöūčö)ž»ōš½!Åóēįš/ōśųż/śüŠŚBÜĪüÜ3MķīčŃŌ$ŪįßźēõżŁ =ķ÷ž'-ü&“ŚF’ õżę)Š0ō+ęŽ?ēņąģqßč„ģ“ß,“?§źĄ)ˆŽī)-ā# č ū#’)@ś ¶%é ėŲ*Ģ"ų¾ß!ÓėökōNŹŖśč>Äåźķēčü°ßżŻŪ8ŽŚ *žÜåż3?ś*żżśčĮ)ü¼­<ك5,?×S +€£_šś1Ēļ¾³ū ¹Ņ*©‚ģéŃ£ńæó5€Q'ąĄr뀲ĮEŹįõČįS{ą- ź'āõ ۚi¤s؝ŚöÅĢń¼ŗ„č9()yƒ‡ćéč·V ,µeš!„Qe€ę*ö`¹ģü«ŽŪæéč`<ć5@öV`XāKŁ×äėČń’źäl'üŪWn›V0$ D>~ßŲģŻHU ōÓXĄå7!3Ed} =&ŒćÕÉśŠ ŠöĒ~ÖŪd÷5ŗ Öś­¹ōÓ€ĪŹ &¶2ōĒ\'Ūķž5d;įēčˆ÷Ā“YņēR49?ĢłŸČŖ€Ņ€ €#ŪiųŁM’ōÉ«­“’šŠŸ RčĒ€1jĪčńX?ü»’~- ß(Ūx€ų՛ģ;Ż€¬ó% ä€ÕŲåķ2ĒĮ(§ÆP)÷»’0ŪįĄĆķó œ]ŪW ź 8 (GX ·’ Ę’ž:ĄłÄćśÜńō ųęīB®ūõü õćč!ęžėćžĖ)–śįøōļģ’©ņņš#ó<Ö?ńöķøžčōķł#’ōżāžöó  õü4ö×éšžŪū$é ųóBŽõžįķė÷ Ž4ņ’ųX,·óźū€ļķõūŁŲ Ōž($éćī÷ Ż3ī "ėž·Š^āć,Ó»ŪmĖ9ž Ż[ )šėõĶ)’ż½Ō^ćĒč@œ‘o)Qžļ7’įAšŲŅcšÄFŚģ‰ßæ³łĶłõ2+å¹ <%ūUīŹó-ó×’4!-įK%”īž÷ ’ż{ż&žĒč( .±ā šļüc+õ’ŲBŪ[3Öļ÷÷€õ ā+ ÓīųTą š)ūŌŠ '! ā )äßīėĄ=ŲŚ · ųrœK *šÆ÷! Ö>±é÷¹ŅhĮļ£@ą?v·ČĢĒ9%śÉļĮ+ņŹ*…—żķŻ«ī‚łūnś ā§ł"ä*ķÆüļŹž"„ ŲĄāc59%Ś÷N—żÓŌ#Žėķ(ōē.’W B„ ƒŠÅ~ĒsÓģļŃņé!Ķ*5ŒūŪĻ%śŪ&Ą Š9ėŽKą ōūõģŲżčų ł’ņö ņžżš īšł÷ś÷äGłž ÷å ēüż ōņž 5öž-śēčóüü, õ’üāöéü ł)öņżųū’’Żšüśöęžłé öņŌł’öĄüūżžüåŪśüśüčŚū’ņšń½īžöūóüųļīųķ!śä’żų įė éž&ž%ī€ōč5óóąÓ„]¾õö÷ÖāĖśõ żģüųēųžØōžÄ“öė Ś<Øóö ńž ō÷ īņŠųé  öł ½öłü€ūżśöżõė īšŚ Śö¤$ųś€ ś$ī&ż ÷óŁžéÜčõ·ż÷ ’* žqä," öōÉ·&øÜ“ś÷ōäŲßįĢūēĀ'ŪTՀnåGŚ ķõīŠŁ÷ųóā’åÜųėM„µŻ÷%īāóü9,ÖDŻųŌėļŚŚūéįz½0žō,óā Żżé6 Č’īBćŚ ū’ ‡Ųł÷?ćżäżśćč-ŽŠ ó%ēäŹó 'ńżķ÷Zö;ņómĖ ĶŲū÷åJ3 žšõłŻŚłä÷ķł ōžų×į‚õ9ōį’ż!žßīųÖóž3ö+/©ńūņūēó ! ūółž Ü  “ōŁ" +õēē łšųīóÖöńń  ž õ”ļūķóÓŪōļżłüŪ€±­’ģż$ ż Öü %śżŻé%¹,č ÷ōõåē(Ņ ģśżšŪģēś%#ā ķó€ī$7ūŻ2ńąäć3ōćńYĖ‚ÅÜ C’÷öóżöž?0 ńĢżżō&ĘB’ī5šś½ōóŲņõSkü÷ ī ńšßM ń Żšļō÷č¾ō)ę'’ųļčēłńōų’÷ņü€’ķ ž õ’江żĢžž66ó^;ļ] %ńēųö&ūłå%÷ żł ŲłśÜēŚĀ(ķņō¶ Ū²;łė2ź¹õśõļŌŽšżņńįž "ļ€ūw’ õ ō}źä ā ŅśóŲśŸźē "õ ā) ż÷ņī÷ ė¼ė ÷ īų łųķÜķ%ģļéóõÜž ļó’öņåŻ3ß»A įßżūūļķ ‘  ņłÆ ģóšüā¶äś óė āćK>öžå ūøŚęśį¹Ō—,āKī÷®ųµß@2~«ųķėøė!ļB…Ņ+¼ BĘī“BūÜ Ū黨é%޳īĪÆ r¹ĆŅ™:ś€āpÅŗy‰%Łņģ%ę: D&ĮĶ ń˜ū%ø¼Ü”ąįöĪų?žŌ›0$ŠŚļā£1óĀæ¼ ļ4õćϹöDčOåīP«æäęįČóJ »ėāUĮ¶ęM¤0¾Ģپ9éN'ƀÄ“JR-ČRevž1łżĀ*ŗāŽ 0čłPš¤P“;źņ9õ) 9]ŪM$EĶ2Ķ QĪāAå ē-D-284!åróōߣä Y’µźļöUįŻūééš/óą• eČ9į1Ļ1Ųź;ėpC„’żĪ<ü*GOććÆÓĘOKiż€ĢĢ_†Ü5ļXjå(GKšņÜĶ Ō’¬^_-&¼Vł…ōށ ÄÖB/°ļ Uū!m¶ ÷ž ż ó  óįųųŃņłžé’ō *ņ ļōžóū ų@Õ8ūņųż ņõśśśļņńūžž ūžį šõļų’õüżņž ’ų żū’žß’÷Åōó÷óšūńöž ÷iŃš  üĘū ’īż’ ’ ū ķńó’ åž  łŌę÷öśłņūŹ ņś ō8ż/÷źóö ņę’'ŽÓ žčŸ®óčüæ( ?žöżś!Ąķļ éB÷÷(~ōāź÷‘÷× ŚńĶ>ļ’Eü+üņ“=!ąķGf3$ķA’+Śļńāö:÷žćżé÷# )åĀœćžŪß·N €ōēśå0ųźõŃž’ņėŹžüšŪ!śųś åėĶńüŽüŻłļüėēžłöłę&Ūż€üæ  #ų ń÷žĶ’üöŒžłęõžü’ģōŅō€ü5ųĄöłĻ śÜž’ €žžūrōJ:÷ėü’€ ö€ó’÷ū ńļöÅüō ’ ū‘€žĀł:0÷üöģ ź÷3žCõ÷ž)öōž .…]žAö’ī ų’ōüž’īžūńöś’łō ū śń2’ ūōFųż’’3 č įõ÷Ńöžś īü’"åió $ėėūŚ’čųśļöńśūż’ģ÷żł/õń ņ ’ś’ū’ ü% ’ž ’’÷’Bõ2¦šņō ö&ģõż åńåšüźūü÷ūG6Źī¦Ų"/,ļHöp¼%«UŚ,ÕĢ+)śš äøJŲ ŪŁ·łĖš#ÄćõdÕGļ¬Ķ‹l»<ĒśõÄ­"ŅL¹?ʖ”6UĖś€éi±<ķćóÅD4ōī#ųé%ļ*ÜŽšŁÄéāĪŻ=8>É @"øŹ(’<6ŽßÓÓ=$/̬Æ4Lō÷)ć$6÷ĪŃŌóƒĀ¶Šū²Sä² ø!ū’žĪĮ>šĪJŲ¾58 ¼»~½€+ą,Ųåē÷ģ~<ŹöŻN ƒUų.ȤŪ1,Ӎ<ņ:ģ ŅO&,ōōū€c;›ŃłH¬/P ŗŠQĘ)6ÕŹ”÷§ÆĖ6ņāEmEcøłŹ0į²Y€€óķ­óg€Q€¦»Ų|ņ.ļžWiölģ;• ģļ“­“ą [/€ū/ķŗßŌɬQg¾÷­Ņ€ū±ź€%±ś÷9Ä’#žÆųBšŠJÉ ½µųĄ€”€49”“€o·ÖźųģõńśüöūōŲśÖēōų 3čŲūõĘū~żõ ĒÖ÷ üöś-ēūóŻŻ)õ÷ü’ö¬Gķéé%Ōņöīy&Óćł¾žŲö=ķü žžóņńĶóöüļż Ūś šķž ńųśźä±ė ęśžģčü÷ ēŠļ,iå’Éģė#ßõżų׳ ęļž ź Óé ųń.Ź āčJöż > ė2Č śäÜ čųYćō/ųąŲöųć ÖłéśĪÄŠ1ćö’įįžōå-õųÖ%é ' č’ żģP P ń÷_ Ü’ūóąõöfā óJöŅ)čį"ż÷2żģėąż£ųźüķ)żÜóā’Mņžį˾ üŚÜēüźÄ¾€,ūī, ',Ü.ßõ.’ś(źšōė łöėū’óŃįēˆł÷ ’ Ņųć(łõńīį¾ĪųČrŻ÷įūź  üńś¦ŲM ö .)į å$ļįģž’æö8  ū& ’ 'ę  żšö\ķćžó üäśžüī÷üüūü "š’łĻ €āē+ėüö2õåē’IŻż źł ńöęż9  øü7Ōņę4§–} "č Õ‡ž<€.ĖųFfóB28Ō)ņKĻ%ĢD6Ž Ēńļ/„Ź-R4’čĄ*½żŚžąóüž׎Ć("Ś÷œLųFź¶Æżŗ[}A% €5éõö))£&4łFö!×4ÕŠ¾#‚ģ%ļōÓŁEŸ]"7‚ čķ­|J®ü¼žź&Ō B7žų ųÓžåØł"żöśåżåŚ#ń īųé( š żd’ćóčą(īō*óų’)ßčóßńńū÷ņž ś žüžH śéõł üłóż ąłīž Ä’ÉśLōōż Ģļņųū  °īž@śųåłŚ’üżłõłķņ ōšõ$ ģüö’žżłŠ üą ŲŃ’ ü- Č/żš8śžē Żżėļüń#ū żī ’ÖżĄāžōłėü%ų!ßļ©ķŃ ķž>č ź ćč.įżļŽö * īüü/ ų ųēģšężäśĀėīńÜČŠōäßéä’ū’ųš źč €žś łōüłłõĆ€łķ õ42é ōŪńęžūųųžõdęųäņņ0Ęūč\śį’ż9Žļž’ڵß`)ōļį ÷’÷"ōū½äō Sęū ä£Ü ś÷ ÷ņ‡ūę Žõļąörųżģ¼ Ų ų‚õżÓėšę%śģõööń žž’óī Ŗżż 2Üūčżśś€éö%ōüü’Nõūłß’ŅÉ’ł’ų įęę! æįčģ§LŃ+%XµlśüÓŹ'žśłįłī ńŻš„ķĒąņ Ųe#ŁÓĖų,Ä'Å+ōkŪ„åüłŪśżß!RńŽżłę éķ˜ūńéÜåīźėņ óōć’@ąāų3u)ķ½'öśļ šģ•’ūś /īMĪųõŚ¢õÅī ö½ūŲ ąņ 3łĢåūFīõõóóż īš÷¹õżļé· ĪčąöüłūæöhīĶžäęŌ, ōĮēüļŠż]ż =V÷R/’ŅÉīżžįęķļ ė> 8Öń5ņłüó’ā łļ’= ōłšļūü%ž×ūßźć Ģżėķ?łŃĖū ’ ąöżśėöŻ’īķź œ*Š7!žņÖ ī īAŚś üQ"#žźóŽō€ļóOĆļ»ķ7ēĻĮa×óźó ū"Õ Åń‚a‚Iä Ōżõ”RŲAüāū„€¢ŻłŌ¶³ ŅÜż& Ÿ—÷ąü‚Ü"’åź*8Ł,Kōŗ}ńÆŹ €õ€õÉō€€Ź—ż1tÜ0żó2ž„ĘįĻYY% īšCŅ»*-ė„ŁÆ SžÖŁ÷ūē¬ļœ1Żä6'æč¤ź€óĪ@·½Ņ©$±JKŪZžéyī8 zö0įŠłNõź9ü'Łź+Éęæ³õŅ ³ųŪ ėń08Ńõßėå@Ū/ģ³ ö Ī€Ņ <¬ŁßēųŠę÷Ų÷ Æ&ɧś#ĮÖ’9?× ĀķĻģļģś1żķķ’_.ūŅ.śŲźųÄ(Ļ ņų ׬ųłź/€ū ēéėD)ĢBC 9žæ: ܏ź€Ü,ńäČį 'žŗ"ĘEϹ3õĪÕĢóū6ü+<ż&ś0ļōēėļ3ūÖd$€<ė xńŪ÷ĻżŹųü'öü/ģM ß÷åżłąA›óūŠ">!õļiņļŁ=ŖņĶ=Ö&ņ2źęČķśźńל +6ėżōĘžž ’ļAüīįóųļAūāėšõ10ūūžó( žż÷Ü īĖg łżŲ÷’ģYž ÷€ņ2Żų’üą”öł 5ļōŁ ī€ź Ä> łßéżõėä;ł£üāö ĄõōįC÷ü²šʀõį(ęĶM.ōņ”žó߀ų[ üš)ÆĶ l €ēŠüōTą^ł€€ž õč üõųČĶōż āżŻ  Nźõ $BE€õģę!j  Ē)äźä$-ķüōžŻķ”C<"+÷ó/Ģ!+(ŁÆ²Ó«€ļš ńk'÷€€$4«ę3»I~€[q€}?É6R*4ž€Ęß!€ė©ģ#»€-QŸ T‚žń‚žcb€čdčāįģžŲźń%5;÷>ĢŅ|.±·3śŁ²Ńrīŗ€µ ʀōʾ$Lä“(QĪĀóž…1 ēš®ż1)ƬA뢸1ę€wÖŽµ–B+!Ž%Cm‚ŌµßŲfŖVĀ4a“®%ö߀Ć.ĄłŅÖ pō!čŁ ū}ŽķżYöó łżĪdČŽ īŌ÷ݱ<ןź$Ä Óļõƒī2¹ „šņ å%ņśŚ÷…YU Ü*ß„įéĪ]€óČüi¶åÉ/ Iæ&É €ŌšÕ ]a#ÖŖ Ņū.īßły*$]öė$źCāĻ;ž÷ŗž źį€žŚėģžŲš"śų‚2żź¶čų÷)ĆłŪ0ķ60īėķ@AÖŪē ÷y@ 3śXķŚčäī 8ĆżżĢąMčųļĮī©ųÓ/Ńó)%óဒó&ģóĒõ2ń!Dļś˜ö  @üžĄż Ōšņ;ņ5ž9ęėššęü"Qń%ī åŚū; ’Ų ļąß\äVūē‹’÷Ę›īŹłī ųéśóśÕ"ü żżĮ*źäżķžżõśśłÕš÷ć ųųF÷A 9ü-żżš%å ( ų śķļößķēšfēżčįłģŌśż%ü ėōųóżėßüL  åńź ō÷Üžō׿ ö)$ģų õö’Łüēżū 'ēņńžvųü’žĢ=’ś×ü €ūõ€ōöōśńņüšŗ āłčüö$ę ūū ōįųķ ŽČöźéĒö,õŚ)õå3 ¹Öļ’ šóö1ģżź2 ó"3čńFłU#’ĢūšęJ’ČįėŁäõīźüąī ž äšŃõłś¢łé!mŻšļīhłģōäīōųäü  ’ł 0 Ųńėōģž–åŽ ō)LĀģ Õż’Žü! &ļåķõ < öźśóń÷(Ūģų;芀ӹ*1ųūžäźĢX* ļäŚÆ ēö éś>üŌūüKĒ-‚ą€×ņq :`‚1õó%3¾34ŠJ40Ż* Ń}ļø, Ŗ)ČØf6Č ō3ż;¬ČŻś9ę1 – CĄŻ€ȵõ |ńęVZU« ĶŌ%'ż²÷ļ.Ķ€ŽńįN/Üį}é€FóéAš‰%ļģżŌ>·õĘū-/÷Åšń­öļł×ęķēŪ²ŹłūĢüÅż€ ķŽļĢ'; ŌūÕ>" D4b ņšÅÜ 7åėNēśśÆķQÜ(ńŪ üźō ü üš Ģźņ*ūūeóö, ī Ļ öåūļ’šś+ļżņöĮ¹Å óūūŚ÷ Š<“÷śčH*ņū ģņö !ēäń"ZžżžüHÜų¹"Ō ü£=Č#%3Ņłś14‚~āēŖī,śŃļŽOŁū.żōēć耏¼üG©óĶLßs]Ō &} čyČÕė'EŌśŃėĻÓ2ėŃ] ą‚W4;äéĮ€ ĶŽ~·×BÕ€ŹłPņHRdņéŃ,ćóÖōŒIżŌ& ńį"ķPMŻ$ķśģÄŪ;+"ėż!SšEō6Āŗ‘‚%· K&õ/’¹Ō#’įŌńE:ͳ;!Ų»žē3ļūŚóŠ Ģ× ļżäņŃ’’÷ķŒńäÉōžšē ×ō ń ęžčśöš ßų’ļńŹłāéņćķūš÷ļ#õņžõ5öżćģ8ą">*žėķ¤āĒ’žū ÷Ūõå9łžūė ,  śŹóü ūģśļŸ Õł@ųļųė-Tüžž1 å ņō ćƒ ī*ķĢķūė óēą’ßē@}õžŃć+żÓ ü÷Ž.üüĢ''ļŻóŠÉš ŪŻżéłī ė3¤$äŪ$Žž]:Į źó'ūGķ’śź”ōŲ€'ģŽžķ#ō÷Ņśś’ūīĖ ģŽ śöõŚSļčŲ.ņ~6ēų(Īžė(÷Õ¼\ņæą°€ē,%į)’廚żēī a Ųüłį!üĶź*š@bīö߁—€Ņā¼Ķšž[D–)Ī«eż1Bh Ń§ĶĖ<å €ź0EĢÕż!®ÕWóBĄßņCčō(ł€x?ßRõ÷Uę O2Ų{ö€ĀĀ9īÖ£2¢s€!КLlB~ h¶/&:|ž¬ēv€€€^޲©€ü”Ir¦€遏Q€h<€Ā$ƒB޼±ōŽKż%€6ó×@6YÖfżvJēmčü^ņŚŚ•“ä“1”€ūńņŽ 'ż’ż $ ż+ųÜś3 óōK,H’ųąó* Ö÷Ł ’Ją$2ć5-½ ž. ü  õč#6üūŹōõéלĖ5Ūāėūūā’!€ ­ļķNķ &ļō÷ųōėõš’üń’ż 2żĒī ł÷Õūķ’,: (ųPųü& ģ€źś(źüēéšļūīÕ’ öpņŹ#ųÆ÷ŪżÓ®Cń-*ī @ēųż§ž$É×>!øśó^°ņUŪŻĶé>S ŪūÉóŪÕ\öī3ż€ū;Śī źŲå’üóµč€pEMšū~€č0ī4ćłł)ežĀyģ&źžö䌀$Eœ źüķōÉLē6čBš€ņāŖūķśēærę.Zķ%–%å;ÜŃ#䊜āéŻšŌ¤®ĀĘ Žķ1O Ŗžóčp²žĄą# ģC€)øķēŚÕ¦ĶF  öō› ļ õ@ŌÉ3Ś]*č(ē~|©ģ(ĪØ+ą–Ó%f!Šąéņńī YHšžĮå)ņ9%0‚Å»ć7šBę*÷1ó0BģīīŠåҁIŅ”~Øłš(;ėĀ~G?ņØ×@Ņ>})ZŪ÷8ØKÜĆćAų!Š6ī€ÖFōlŅ% ß„h1šTæ#€ƒ±{āå8 õā,>ęŽåķöśż+€ėó™’īo+ךķéŻfœÕżQ!öāĶ$üų  ¹æ²ļō= üČ#ÖłŅČń3/ōéóįµü Jłō ń5cóśī’éõėņČżļÅõŁ’Āš. īćśüš ųüęņå×ų‚ óöś āąń:ž ų÷ōMžłž Jö’÷óĪ€ńžļśĻ ž'čå)9äūłū÷+Ūéé÷(ģ%ńC8Č®õ>ō’!³ŻńŻ- żĒł÷ņ źūÅ,ū=ńć4³ż± _'5ūģ?õėūėģūūī_$ņģųóéŪJųåļ äĪł/ćč$ Łļ’  ėāE’ž!ŚģģųÜųł=꿎Ūö ó#üö #BńöŪå*ōļA߯¶+×JāķéśŪ WüÕśó4÷„ÕĒūAō÷ ßņó’ż ’öö&®ļńžżöü "łżćč’ķščGOĢóūé#’ōū'’ jš%£ģį’’üWŠż ė’Żčūōü ńśęāgżü Ķ÷éüŅ’ųż łöó÷ öś śśųīżķżł!’ ū (źüł÷ŲÖ(÷ķ2ģ*ö’śÅ ÷  &! ²óī ą ä ńö­ķū"Óļö ó ¶Ųš"å žā<ņõł’čø3ž]ķ ļģžżü śĘeüŖ!ż ų4ō Żž¦ł™0ĢčŚĶüąÄē ī« ˜3ņąģČ Vßõüźńė ’÷'@&ö'žūļé$ ōķųį  éōā ć€ę$ž%śźųō1Cüäē’‡ōĻżćŽńKōūäś÷īõ÷Żäöļ ’åö/ü%/ķŪś×ųņ:Ø åÖł)ņüööćśüķ ņķżŽ ž ²öÅų ÷ŁŅ 9ü¾"žŻėčńēģń Jż3ī/żū)ū Čńīö)öŅ÷" éīą łżūģćź üżźåƒśēż2ūŽžāżūį’Ń’ėųŽäėó“)ģ$īīś®:с#ńėą-ė fōó€,ńÄöįĒ䔾 ›ŃóÓļü&ÕāFó?™Pś€Ķ9 )€×6Ćķ€4Ł3$.üłĢļżŽ;(0Ļū7é[ŗŪd%y1 2¹ā~€]ĄŃļś¤1ĪąžcA ŠĮ üŻ.’.  VÄ3Šł?ēŽ ›Ö–€8Dbaś@üšōāŻõ©@ąū1 8LŹłśĆõ, -ćõ ū å‡ģ  ĖņūŚ ž ÷õ* °Żēļéżųßś÷ųÄūłį"ɽ ėūūžŚ’+Ižšżč÷žĻėģ’}ŻųśĮŃ õ ÷ Ģūöü óƒ~ż ÷ź#ę ü öNĆū÷ ļģ ū łś’ ĪÕ’Ąśķ ’Ńóżč5 ķōłł÷ €õåųń÷ 3 ÓśłKīüŅ*ź<äł’+ųĘ-˜ü÷Š»ń>,åžM6ś’ėÖéółÖ¶Š÷ ģ¶ėółœ()ņżĖņ.ōłÖ’÷ ć„ %łć”?ćģ 8)āŚäBę:ģŅł­æą° īīēżŌå&Ūö ńŠ!×ÜŅóįbTÅóŌŁ )ō ×#3-&å|¢ 5€ē ²ŌöéźŅ’Ńä芞·źÓėÕń+źī åŪĶųü2ļĆ÷¹ Ł'ßŌē÷žöķöģŽé¦ ēšŪåöū’*ņłö÷õõ×9ž÷ōśĆÕõŠīŻ+ųóļ2śõūņ§8 ’Ż߀’ģĢś’żńłšüčśł’łņś üęśžłĪ%( źņD ’ņś¾ łģöčžäÖĻē ń :ż¶ż£å Uśł (3’×5õżēģļ ēłü7×Ćhā‚ ŸBŁńļžĶŠūć_3ŅõÖūåüeĒćŚļ )֟õØŻ L7ńé€#õßćÓķ*ģDš4ł&Ü’0h’=P8Āūčī.*ØõōŚ€žņ+éö)æ #ōցóśŁ÷ņ Ŗóīć ęń÷7ČłG’L'ū šŲōķ*ā*Ӏō )%ųÜūńü īžėūŻēüö§Ś Łą óżłčō< ųū Ö(ėųö łśAüłśęä6šó"ńüµō,Õ1ś ½ķÖü ÷õõ )÷ļł.ļč’ųźųńž’įžóģł ü ł÷öéģßū÷ėćęĻ Ö KéüźéÕÅ#8īīüų-Ū ł÷' ņ üķ ³ é ¬ßĘ: čåīą gWĄ"ōĻGüšKö³T»Č×~įŹDĘä ö¶č"ŗĒ'ŽÜ8ó ė0ę,÷ž:‚Æ(5ń[ļē1Ó¹Ͻ3½P£8łdYĶ‚××cAęE(HcäńźÖē ?ÆÉ'æ(žŅܔĶ!YŚ×śŹY ńŚ­»!;9Aó‚ķß;Äų~żż+’Įģ( Ö˼Š3ŲĻČüĘŲ“üó60ó5€›€šõaŁē,š Ō8 Ćhżį’"ÉOęĘ4ÓÓż°āę ŹēÄ-6€’8‚Ė-+]–Ļ ×Ģść2›Ū„"čĖń9¾=(€"¤ŅĪŚ"5PŻ€nīī9A-Iķ@Šé)%Š%ņōĮ ÷åč0äĀņś$ /Līż)āĖ5yęBćéżóó ̓,źČSōüŲ=ØAY'ŁĶüM‚ē īŅļÖė¹ł/ü€ż ¾ ūķōżżłå#ž wōųńü® ęųń'ü’žéüģ’ņ’ ļ÷ņł šÜńüūńę żÉ ¬ õ  !ķė Ēžū’ Ńõ€ōĖÄ ū* ÷ `śųķśõ÷śśž2żś śž’ū±ń   ±ü ü ņīźõČóś ųž»ČÓņ2LÖ³$žųų%€ÄĒÓŌŃJā”“ĢŚŪ agīóūūūŪŌĻ1%2cÓł4öå 3 .J ŽÅŠ6,ņ$ÜPVżÕū#(ĶÓ÷üüŻč*ü`Ą`ż-oŽ$ń ėĢi+ͬ~ĮōĒĖų2Ų!žĻĶ"N53×H8 ŗ(½ęźü! åÖńÉŅ¢XV#Ü ź(ø~õ¤ė“*RśRµģßłO#éņšåųéßßžś„ńńśņé ąź öˆąŁé ū OĀēķ÷’ż Ēų ļüģ ģóśö÷ ęßß ’łŚ"żŚ āŽńļž­aš’÷üŲÜūv.I łžģżė節ń÷) ó%łÕ ēķ’ē×ļźńƒ÷žü’ąńō"ü’"÷Óéßł' -ķ­ž  õłD°üµļöńż>åņāéĻš«Ź ś ŁõÕ õå €żŅā¼Ś ŻśĖŽųBņ+’ž-é’ņśę’DõQü &ķņ ę źźą):üōć'éŪųśłKüóģžØżōśõšćŪJäń-ń Ž®ų01õöł šżéŅ ż>’ö’ńڽī!Õ -æōļ8EoĖ īļbå$½ņāįšć'į//óŃ_å źęµÓńżŽ(öęļłäé#ėOāķóX%–Ö)bśū2S:¼į ÷=ōģöėčæĻāøK1éüž Ż,čŪü ÷:ź ¾F3/Iõż 8õÖ! Éē į*`ö5ķķčäĖ’ē ĒšņėėńõāŽ DÕäŚļšCūļĒõźūć'ųīē/8źüč?žģKåfÖ"!ž#ü4ųöå Ėļģ#ś$} PłśõüļĄ~śüśŲ ,ü%@šč īGŲ7ÜĆģīåųéQÜ! žFĪ­ģč × $ż³Õ! ŅėńŅčž½ųƒśļöū ź÷ŻĪĆŅŻ #Ż&š#ō~ÖļÖļūĪ>Ė3äņ ö=}śŚß,÷ļė]ōüäĀņ-€łįūūĀļļģóū’ÓćĪ@ē ŽłäčņŖļWćBŖ,ā’éżäåøŲ5ü J ę÷ąōŪ Ų į!@÷ō ö ėń a›ūę)įōģśČ’ō Ų¶žńśūEųõóķāVśä) D#'ģmšĢŸÜĢēNŻīņ šų!ųķ3Śā;F ėż cėŅö ōōŪ¢Ö Ö$Ķ'.~'-dą))ķėōš äąśūõ FmžÕ’2Oč&’ė}ķįō ÖŚóŠ7ł)ōŗŽ ŖšöŅ #F ōų÷ųŠŽ śāć·ńćłĖ‚ō¹ū4ėńOĪ23ŅŻ’BL” ä~ĄDņ$ųCŻĮ,»Jķūłņ ūŚėļ×øūłń-ö īš’,ÄīēøłéēóZ)ŗ" ;€€9ńć !¼żŠE@ģŗ/ ńū!ą ­ń ļ,ńūTłÖśźöōć°ō}éęBńī‰ī&÷’ I.žū%ē6 ĖļMåļź)óĆīģ* ę÷Ō Ś+ ļż ę ē%āģšę’ē›ĶŽõ—Ó7ü7~’ž=ķņł äåēšü-åš"ų źéC čõ . ŁļŪń“#čę$'Ų’$ źąīČģżÕ*LāóŖąčż;3'āŚŲDÕŌšŪÉ5Į ĒģśźŻ8ŃRąüśżė# Ń<ł&!('œ÷!śüėń"Ė >Ź )ŻÜ&ķĀłĀūī>>%ėńŻĪKø€ÜōÕ  õpéżł«6åļö ż 5ōĢūēå żä!#’ߣų¾0’Żßč#ļņ<ų üīµU śšćÄōłö}÷ō õuGõśżāąņł,4$ćńŻĄÅõŚā7žōˆał™æ·īvē3Łó\*ŁėÓ’ģ-ä€$ņ› śÕ’ÄŪ÷ąų÷Ė­óõĄ ü ėĖį;6/ <śė2ńē6łIÜ")õųö³ ĢõĆäõäųŪš ’į%’Ļņļķć*łĶ·õ ’Ņōü»üųń öņĒŻ~ź0ėž#üĢŌMżŲüŚöÜų$Žų'łųö!ė!ūó ’Äņ N’éõčšżžæē)-}łüźõ3Ó łĮ’’ł&ūBł¾õ)üŲüę"ń8łōõ:ķńV ˆ ųņüū’ĢłūžļÖöõļģķQłžśż ķžėųó®éł!ķ÷żōū€’.šń÷ŃĀ’žšóńלžöļ÷ Źš"©ģņłųžćżńĖ ÷Ģõ Šæ $CϚń$ PĄž4ęžŲ2ā-  Ż€6ūĆu ž ā©Ä÷.÷ -Ż!ųƒėi²)>Öd¼ļü€@ķ]öķŃ×ē<æMŽĆųäŹĢģ%ā PV%×±õ&ü¬źī Ē ŌM ųAłō1žõ4ä&<!’ųÜź +õ ßR!šĮŲ× €?īāŹŃH%ą’ķeŁņŃł5ńNōµ ļīßµžżāļ#ī4Łūļæž,T ś ¼ÜŚĻü«XžN#ĪūHńÜ   įĶõ¾0¢³Ü)ŠääŪÖ€9šqļü#ś'×B”į’ū’$ŲVßęžÉ? ś9ē€öĶź’ öŪķ’*ō–ąėĒę č!ņÄĒź ė YūąŪł¼VŻž,ąŚąņ-Qń’'’Ż ķ ‘'śō"ćåń+ß×ėžļA=łż é^’+Źćåbļöē¶>‡īī[õė’Åŗ~ž>€æŗō €"öŲÖąē.!3ņö#ś ęø<źżņō ņ«ś öå+9ųüóŅ )õ’įņķōõŽŪģźļä 賎ĒEöö ųä ĢŻ@“ż6ŃæūłöĒ*%ūįóW6,ŅūōŁåšįīż’`ģ@÷Ä}ė "ųÓĻļuę öžō’(÷ö üī@üčöķųēųéģ$’Ōó05łüżļõųŃ =åń © ė "÷īäłāī'ļė’žśģ@ūüž Į÷ų)Ż Ļ +óęęśó%ĻØņr ė õöõ5łų&Ō’śKŪ ä÷~.½ßłžīüõŲpśõéÜ’€łŲ3ąå’ä"Ęźį%Āų ¹]żDĢĻłųŚÉ¼(õÜ)įĖįĻ÷Ä>ģ"²’Õ ×¶Ų%{ęėń_Ż #홺I’#G* -óεļ"'%'2āį÷¾ģ€Ž3ķĒ1Ųļ8 ßēņéó ÕJ­#’ī šöęąüt]ļłc()ÉkĻ Śóā9Ü$ūļ ż1õężńźŽ õéūėīį ī•Õ>&ćó½üī$źž ;ųöö żėļų’Fóųń÷,ū5š$` dłń+łļ&Yįųżū-å3źģļ Ć ō^ź š µ 茒 Ośų÷mżņ)ņ ź ’ś÷łė 00'żłļüžüžåūć¶ ł śD Éļžž żöģņĆ’ū•’€}4HZõįO1¢AŸ€€ĖŖ ŗ>ž+=ø² €÷źCŅ}¼X¶³6ĶósÆÕ#¬żµ–ę}G €ū7Ć~Čś½Īõ Åó į‘ļ&—Ҷā–`mX•ףmü(€\śÉEÜk*€n—€€€€Ęī€~h€ĶėL½ņi—U…J¼oęéŽ#Äb=2€Ńčg:€h?é±¹Ŗ8’Ā [³£öł ·€®ńß¹29ś5Ū#PF;É1÷üž¾čś,ąśö@šųłä&6+Ńޜ Ž m ¾õō įüžn1ķ Į9"čīäü MČßå ąśņź÷ēżõöĪė üēģA÷ōjŌ÷žö÷¤ā16ū’Jēķ1ņó ļųōéÓńķ×#Žōż4=¹õņć8Üū'ģ*Ū ßūö&)ß[+ņž¤š’"óŅ:žŪžöņŲŁ½€āźüŌ~ēŽõ ökīą7ń3ūļåö ūēTBą»ēńõ€ādŻÖōųõž Ņ€+zńō"āĻżŃ1ķäķå ņõ)ü’ åöĖłūķ€śżŲźš ūšņų5īēņĒ’ōéļćä’ō’.ąęģ'½ų-Ō=śśķĪėķ ļĶ’ų·äźŽó ś ( Óé:żė]€ł ßöå'üćūķęĻē8čø)Jłµ õļļęךåõź ź Ŗą/Š:ŪüÓ šŲß rīļżņ’ŹöīPńģ÷öššųōē%ęų峚ä —žūÜ~śō’õüżųņęś&Ł Ā$ŪžÓ ų ŌśģėĄīŹčķx6ņęŠō=’ūæžģś,#×óÖś%ś/>š ó é&ųöķķżžŪźšÅ ’ Ęč ŲüÜåÖö źōÖśō 2öÜ(H€÷ņėo™±5ųó$ńśĆāņų޵ō/üņĒü÷J|  ó™@āŌŁ>€rķłüpįž š $-Ü &öģö ĢīłžŁŽ wŲ ÜžČ÷ݘō•śóŅšz‘üłŪ ņõėåųžūĄė ķ€ł=š÷Ž( č!üśõ ģÜął'ņņ+ļ śżöčģ²÷ńėžąö ×!Æ+ōīŌöéīęųßśÕÕļõśä1Ü ¾óåņ"ėU4ōńöŪŲöźģ0—=ūļóõöńüūļ>2ųõ żõ÷ūõ š÷÷õżI Ķöģ’łüĀéöłļ!MŲšŁė’) õół’ ÷+,üģśĀųź"’łóž÷Ź÷ķķśļ0ēŅĶŲōļę$ģį5ęēööåūį1žóėŠōĀ2ż)ęI˜źOų*ńū&Ōļ9 żžõņ%ü ?-ī€żżó ēÓöüķķß šŽėū ļ; )÷ųśÓŁü ņāž3לóļ ļčöź# ėLļ ’ųķ,Öā ŹļÆä÷ČĘćöń2õ ė šļśū÷ņ ļóźSźĄ Ž%ļōOćŠężņÄŪč€'1 €ż$-"?Ł; Ěל×÷ż¾Kģņ¤'“ķā=ń_éćįĄ~ ķń-.ūųīņā ćņźėūĪf p  ž!Ł ŽtĖū¶ņę)ŲĖüłķÓ ųŠ WśŚ÷&… ’īīĮå ćõéžüł(³¬Õń ąāYģ3ó×4śŻūū÷Ā L!ņöžŌó’š,äÓė žņś.)śņßī *)¦2ńēółķ%ūüź+žŌ ÖÉōNé ń 1¬÷%ģ Õ–ģü%ģūÖ)÷éż%×~ÖÕ=ēß%(žüžń ĢŻ $¼3üŪź’žōæ,*Šė *ų2ó÷éėö # ÷čš!Öźēž0ąłņ’ŻõŁöĖńłń( $ā !ōč  ÷’ńīź’ėśöł’ūéŹ Ü~żÆłęž Õą RźF(ńüņōéį õF ęń(ćŹū°ęóŹå’? üéńž"žMē€żŁÖõģ ³Ų÷  č ŻņĻü 0(ćšų ÷÷ņÅŃūīüķč€óķłō&õĘń ķ•ź(üöå ö ±łīóżę ģó ēż¹ņ = īŪņ  Հłėē:å:ųWņõ ÷=8ņėöśńń:źź€’׬é)ćBš€öPŠAĢšū&÷#ų ęļķü$ųčN=Śżäį €üś£łżöģö’÷’ œßż ķ(īīķ& öõ žö Śä' š-śåōśŠ÷Ołöčļś¹Ś3#öäōż ō!ńł'ļļłćłÉūøśß ą÷ņ* öź”āÄū$¶Ū$ķé’’5Č/Ū÷ā#ń ē'4š ŅÉ%łł ōō)łÅö1é÷÷ųēē$ĶĢ\ õ3 ėb šķ žüęųū¬Ųć(ųńö ę+ŽęĻč ēōāąõܤō«žÉóäīŠēśėīēŽóż‚ż! ļ łŅ!÷ Ēš ēłė4šٹčŃ{ēś+’ōõü ūūč ń÷śųü1źī’ńūōōÓžųų] ļü ņū€ńóžŪ šüĶņūų Ū üöś’ōüėéŹūųéļ ōõõ“Ó ūü’óū÷ š ’öź¢üłžõÆųł$% ÷š÷īłżĮļūųųģü ŚśĻ ūŚ 7'°ļ īńšļŌ6ī^K› (§-.ńņž>īļéĢķšźöńńčųŃלe9' éöź+ī+žčž’īłÓ3łń)tųżÖzźņqÕęßēćŌ õŁ śšŁüś' ņ2­ śöóŅīńž0ųč’ųŃXAłšó’ķłŪų÷27ŚźŽū :į;Īō čÖä ­š;ūżżs1Dž(Ś š-ōŌč4į^öīų8 ų żü2<÷Ųõš†W&Čėžįö #żxö“€õŽ Ššųé’ņŪ€ģaėīīüž ųö.&ūņšŁõĄź!ūęéņ ’ēōęÜīćō īłöģÉ-āžéŪöłö1Źž‘źżū×ļš(üŹÜ"7"Ž&õ"ąßÖģEĄšķ+%›å Ŗ(ōö&öŻłWįįäėšõ&č÷€·šąóš3A ׯ+-łņķ 6é!÷4öćÕ)óģ’õüč«āńņžūšF/ųįżšōŹėłõ)$÷"ūæėłęōŹĀ ō źe"ņņū ęäéęSó‹!„Ć:7C‰źéĀ»Ųļļ Ņ×÷ģ &ó żś* čņģoė –śžĆėÄōAšž€Į€ŗµčö ęL$Ķę õūŁĘó’ń0ü¶äóyń õ'ū×õ¬ļō ņ÷!I÷Ōģō —ńŹō6ģ÷ųĄE śźA…(ÕćDā ģ«ņķżłž !įłłć  ćā ½ #żķžņ¹ū ļ'' öō ėJó±ģ ßL ×’ ģÓdńųźģ'ķ÷ūĀž ;Ü’ć& ÷ćźö9ŹśéGjšöbč-.&źižó"öNŽļņ÷żū=Ūā’€0ÆU½Źšśōśčž;\įįīg€śöīcūüńō]÷ČŚ(ū ŽÜ›ščō4×éõįō"öóöćéņģ # Ā÷õ ųū=.ąśžōƒü /Įä¾ä'ķåššię8ńŲ)ö, $8üÅńF&äžpęÉ÷|’ėķ9”cłEģžļ~€ł‚ūżcūż 7 śžüåņ’ åų€éõgĻOŚÜöŽ,Ó&Ų€ŪdŪ ¼ņÉ=+ł(1łäĢįJüīŗåųć*üN$óčŪč€Ń4Żąß  ŁO ņ*łĮÄõ/śųąīĘüäųūßż~Å÷ūć U%øėž#ūÕ&žŽKāųč1Ö ē;Ö’ŗ’ ų ūēėõ ŽņŻ~ē÷ ׹*ņ÷%öōź*S ėĒ(žTēšžüżõó ÷ņ"ł ÷®LęóõėūĄ%Yü 2’ė2ōż.ū ÷ö€ SżÓŚŁHėĪ’;-üŻöOüčĒü ü @ś ėDżÕģå-Žąāś ūžüß ķ<Üż¶AŽ$īõÕ"Ķ ģīöąš š©;ą²ų Üś®ģū žęüļāčģżßü&÷ żhņųóŪ  ā’Ų÷öĖ'Čż)óöö ż’ž& óē ņńżŁųļßóūŁ /  żł ųłś Ȭżž’ ņ ķūšļŃ©énžžŹłū $’óöż łƒźŪžų żųõ6÷ö÷čüū>ņųžū €æ÷ķėŖ ģøņśųųęųūõö¼0Eč’ŽÉQ‚ ūōŖ ź ż ĪLC˜ųżĘŪĢ9€*=‚=īĀ ŃļŲ€gŅ&ģķ;!Ü7TųĖć΁ŸÓŃÓ4ć–÷Ó®ż(Ӏ8żk "Ü»Žż0įÓń0š?Üd2‘$ż •āÉø,Č ŁõļÜ-ś'Š’Ā÷'ė2>ąG»é!~Ū°ž32ąó’ėŪ@$Ō §ĻĒ£! ö¾mī×ēö÷$ ąČūę÷ō( āŚėüäž öąõĪåļ’Ö)ßüõž †!CGūŃŁņ-õĪłÅēļėłü<šõ Ōāēć=)%Ų ś Ü!’ģņ:ń¾ź!åėćżżūł6äųźėÄ–ó$łā (Ź žŠųųņé źćńŌų`ūüµųüśōżūųš1 Ūķžūä(ÉöõżéVŲ:’ a ļJ÷'ŁóśŪ~$",æEć šōē*K– ł źéūŚžćöóöŠéKÓ ’īņņźģöĀŌ/Ū-šēōŃr ;Õ—ņģ'å õ$ü/Ń) ééś£ķü‡żäņļõéž÷žĻūöÜŻō Łų’6žõėž ķßł īéėKŪń"÷’ļžļįäK} ) $ .õ#÷ŃĘmų Ž0õ)ķąŁĶ¦wÖY"Üæ;)ŪųßĶńp¾#›»Ńāįł½¹ķ–§ł*Ó2ź˜Ų.śŌ c[1÷ŹņŪH÷ü śūÄóģīŪū3ŚĪ0ĒłŹ+4{Ų÷˜ĖŪĪZ¬÷äÉś78æ7ŅU:źļłš.ł0ł’*ń÷AʶæČ|/€’*Ö®WĄś&Ū3ŲMI1ŁZŻ©$ óŁžÖśŲā ĶŚŚĀŅÓŪüĘŻņņ7;>čUóõüEA Ų@HęB&żė8 õļńļņēņĖś¶µÕ,ļšóńģÄĄžłPńįN)ćśĪ'Žėš õ Źšóńż ģÜ äĖž&ķź&ż¢å%Qż(ūēóŪłŅ’ž&ĖŖ$Ā üõņ=õ ]ģ ņÜŁ ÓēŻLčäöN ń,GšŠńćēéQ0ļģ ńÓÅėøż" 1 üłų”÷7ž’’źæKLŹšģüōłūśŁē’īĻ?’#ņš(}ųśļ‚ß¼.’A>ėö ’ÅöÜÜŪųēšŃĶ:!Óé0śīčżŅ$ōõŻÖžXõ'ć > śź+Ńń0Ķ éńņėņæź ĆūŃļČü  ėöŹż+?ßķ’Īżźāō« śóä ųłļśõč ÷źūś ż³-¤ž&ķ¼Öł#ĆdÆóü·4ń = ś ņā Ķ2ēĘ(²ķõ(šŽßńį"čō ᦒńŻķõ)ł–9łd! Õ;ųÉ3ļ™ńŻõōé@’ĢąåóćéžcżöłŚĆ\ÖöäŚ2éåźóčēÆ'!ś“$³åūķ įć€Ūõ!Ī*0ī2ŁÖūĘóś6ī Hžéń&ł’’ó ’ąõņīžģ}!ü óū4Š%V ŃūĘ·Ćź[÷ęą)ąćēņ"ń­ōļ3ü÷ż ČŹōåžłÜ+ ÷ķļņ®ō ź3Ž €äūšāūųüŠ0 łżŻŌé łņ ōÕÜšüūõęJž $ %*÷ęå÷ ūÕō»ūšŽž€ł ( ļķä’üžą÷#׏ēż žÖęūš’čżņļžüżęAśäīō łąŻÜ2ō ó’śį~ō’õćżB¢ūńź$ł īģ)äžÕė$)üū’ņę Lņ’Ē4 -óŹķ’ ģŅš)€ł÷ń#ģķ/ż÷š (īūū!ł)$ņāōÜ%ūśū!ß!ZŽłčßėūé(ŃŠ×ŚŽ Śšļłō$žåōņł4 ōāļ5 õēėĄń ķżŽ×śųā³ Éóęū0 ü Żżåł÷€šä)Ā1ę ’ö (äóźśė ”Ś?ĻĪĀ÷€ń9ć"×ß+ŚąģėńīŽś€ėł[÷ ļåĮĪ€‚ĻŁčæ ž~CžżĪłõółöÕõķöź„Ųāõ ż ńõĖó;Ü ' ķöĻ×¼ųü ’&g°„ēų#Ė…š7ž„xłō Ńņģņļŗ’öĶOźž»%ś8ŌŲ 5ņōä!,óģ$ī +×üŗēę/’ń5ļņūŻAR€čAģņ"Ø)żŻ[čųŃ诒 ļłķĢķćÜNåšž&«ą ņ ń ž@¼ õēżōł2ś’éōóŪ¹4łį¶ÖQūųŠĮ/ņ#Ņ%Ō¼žÅÜėšŠÄūKŚ)=Ļ÷L ā%ćŚ śģ±!€ēė1Qß ąäź)ōŚļüŪJöö& FšūųūµBįõüõ„ ņöiĶÓ"ņµ,ņ õ 3čĆéxéÖĄš>Žł$ūłž‰‹ąóęžé'!źķ^Žźüą÷Ś9÷ öńā1ŻŖśäõćHóń6ööĢ÷ßź…ąįżėų(Ū’«żöĢó ēŗ,"¤2 Ū Å&ōżČŪD'?å Šž-śĄĘÓ*ؕłäā÷óećÅż ķßÅą®ōöļ Ļ ųķż¾ž Ó ąī ū"€ āžśOųüż9>š»ŲówžźöŪ īŪü žū āÕÕłŻŌKłž+7ųŁs Ļąöō  šż ņ (ł ė4J (éäšŲG ļ|ņW,€Õśü"/ōńĪ!źł(īöWēAYłŽóŪć ćīŁ åł öļ’ńāčó äšžÆ ćżż ņ’ūłŹ50±ķLéķöŅ;żżßž"żõCī+öżłż į C €ÖēѾśīšī-&ęń*ńę±ęššŻXžģų? żšÖ €ĖųÉłž¹+-ōéü&āÜGśżåĪéō÷óų 5õų&üĪŻż?Ż,†>¾’HÖ$ńŽ>ł ģŃ’÷§ü¾Ą4•ĢęšĘ4Óó’ķūéž,ü¹(#’÷\ų;÷OÜåėī’ łššó17ś³ķ"ō%’ ģēūäŽūēźų ųžūßż÷ õ/ĀģżŌéżšģ€’ź2óū÷ś õŚļś  ó šļ,ė ńä’ł óŽ$Ģ8 " §Dż½&“Ö"!*ńżUŪŁźóńĄóū š×ć÷šŽśżēźUńėņōÖŃ čŚ öå @Ü÷łĆō·÷õå ö ģäī$śłäī垟ļĆēš Ę! € łŻģ’Śōł* śńšÕķūŚłĆ#ę Ņß’ ņłüźš Tü %ō’łŌß żķWüāņŚļĪ D¦²żÜŁöżŅāāY Čć÷Mć!ō/żD* ,Ś0źÄ5H3ų»«œłüĻ!õ€ł ‚ą+ł 8įSŽA[šī(Źģ).ņłA yåŹø1č®› īōˆė#ū6(Śūß €5ņģEņ.Óęūū `-õÕų’óāśźź:žÉw€!żŪė&¦ Īłģ Ę'Ū’ŌąļīżŃłųē?;¶ łb%ź ą5%€ūĶ ž­ĪCžYų(}€Ńč÷Ś9ē-4ļĒ ńĆG­ĆEč€Ūę+“ ż6 $~ĶĶ߀HāméżŪČē é3Rģū~žö;ä ėŗŪKKļšõa€00šę XßŌ7žźžłüŠż2%õÜŲ ńįõ脪Ņāįš Ø%żmü•ÉĀķ'®Żžļł ž½Ų1ōi&kµųķ:ē#Ż+QAÉüä>ŗJąš< d÷s¢ē nŽ’-¾)ó ÷{(ąčSšųŁAÕ1’ūÓ(č ģ’  1žųĆÓńźų[ƀ+ū5ščČõE¬šé³>/¶ öż/Ęńó@ ĆåNCć ŠšźÖĢż+Šą~ ä$čĶ!+÷Żč!ūÓźŁ.Āš6h@ņ’ą ß&ĮĖoüõ®@ēń0žĒ,«[čĢõ÷!Įą¹žį?ųčÓßł&śŲōŁ’ōčėņ%ųŗĮé čÕżīrļõīąī"(ņŌżä  å$ū <ąģõšūåõčż’üļóōCžŽŽ0żīĘńķńž7+żŲŪ 7õ!"óFėż#üņŪõßģžįäŻ ēō ī)Ł~ēļāū šģöČõÄšņęģč ā%»Ź $ģųÅėÉ ō)ø Ż  ÷ółņóźļ ęķęļžźü÷"ķ§©ķźżć õčė÷óō ēŌ÷ķųśņD½%$õ ćö ÓōN š’ ń’#ś×’õōņŪĒÜšųå÷Ö¼' ų’ó$’ ńūšņżōļćžöö‡ūÕš»ēõźųķłņč õ+Xūžęļ ž’ ł÷Ņ īģŁ!<,łFĪÆśŅFĒŌś ķ€hū³/Ø Ņ"ö~ĖmŹFć/{HšōüVī|$ŗ<€ ÆėŒń,åC2³ļŁ XÄ$‚äżæB4%€7éŪ •źõ5Ž6Ō.2ē)ė€×įµB]„āąC`“źŖółč M ?Šøy&ž! YF1¶ÓßbŹ#óčĖ/€»UĢāĪ«ōŃįI«®3Ö&.08 ų Ļ>/ä½+;H¶mÖćŌŁŚŅģś ŲŃļāņļåöõ żęźõņ‡ģöįįSöéļ€ņŹ' ? ź6 ņ8"ņłėąžŅ’żīĀŌÕĮ .ŻĖóķąWĻņ5šĘąÆóåŲōJūłśōj"ļņ~÷ ąˆī=€ ņ Ūķ7ū łąĢó Ī’÷ ė‘ūż ųēżäóg%$ų/ž ××,õž0šĆöń)Įń žžšų’ś'<Ā$ Ė÷ųč÷žHHŻ :·0 ¤Ą/ ģ.ā ćńö÷ ŚŲå½4ęŗóō}żč į÷õ, ŲŪwÕįBņ r §ł€#CĻōł)ÉśŪå+ł¾(ļ €'żęä¼! 4ÕŃų8’Óį›ų,łöīś ī’)ļ×0&€å÷ żŹń Żō$ņōöō’Ģ Æ­-(ō ų#ņMößŪńü’ź@żńłįžż§ģł ?Ü šāļłõ÷ģņóČž żó6ū/ ž Ó(óųēļöćČżķū’ņ¼śöńÜč üņõž žü’  "· žūöüśü€ ł ńTžłńæöžēå §ģ’» ¼ęČüZżųņōłóć÷Ż÷Ģ$/ņ 9ģl ōńä~ń÷Żōų·ńü4~łéņń(é ü"($+ š óóõņöżėŃŪčŸū¾āŁ# öóKŅžģ ļ"/8šéüńgļ’€ēüģŃś÷ õāķ?üņē×ĢłåÖõļü ÷ńÕó; ’ųæÖżń4ų+ e5ģ-=ł>żž żžŌņō#Ą"ų#!± ųZ÷ŚśņęĆŻÜéų1ÖŪĀśŌėÓżąŽė”üķ*9Ģ‚ŠšöųżČį%Ż7.,śčūźįŗĶ »^ņ’5ļ ½ć¢ĆšPĀŃÕę,Ž泣 ėįūäūšūų^&ģėśÜōąKč)īõūOł łČžęŪ==’ėųßĀóʀņ."ö œ Ąä+čÅāśą·É+č­Lżź!'½B÷ć žūė  å’ėśÓ€/šÉ$õ?ō냩1įŪeŲZ€; ;ŻīZģ@=øęöüŁįČ€ßcŃņõ4 ź.ŃŽåčnķž#ńķ0 >»"śK śś SųYšģ­Ņ…& •×ŁŁżp Ōźźƒ),6žüę"Ųćę’XÓųņ%Šņ ! &üŻēÜ -"÷ź5Aō˜š°ż#ü’Ē ÖÉ E¦īm ĶåK³5Ę óś€ļ/ūųīź0źĒĘ’ž 1œń! i;čōā) ųņ+óåēķŃ(ŃāČ3ęśÕ ę›āįśżĪēāōņé4Ģę³ę?ėš(šó÷ć÷šó öĘ Ļ ś×äįļņ  üž /ēąķæżśż÷ęķóóż ī āu å@ó- ųśž7čāż÷ ėż!ōń÷ ņ Ēż.żķŅķåõ õū€żčĪ'@æķš»€õć ›žÓõųīłśß ńNš ŻĮą)끷śäųēģį żēķéļėčģąźžę óžåūžłÖūļŌēšł8č 'žCÜżģ š,į÷ń =’åśįśłśżū ļœ śōżįöū&Å ļ ž ļżöüäš Ķó 2ļ÷šŚāŪöžł2óö *żžäż2üŻżÕ£üū6ŪÜĶžāŁ/Čač#ųė’ā÷šõžõĒ& Æ#ęŖļļ ņ*ö° ģķäūcéūō€ ×īä ž?ū ÷öĀößłß÷ó%ęųÜłł!  ö& »ØśōŻłķ1µ õ;DųŌÉżėüČAĢģźēš,š ÄöĒ÷Õé īmó éōŻż ó&÷ ņćōŁżåłžńą Ķńč#äĶśÓļéā./ėæ'ī‡6śėŚ£°OØßüK ēš6 ćć õķŪė5ö'ņĢ Ś ÷łDś*’(ļ÷łE1į ą ō” ēÖõč ųćęū ģ±é× €÷ų ūÓ łéįŪŽāćöć ¼’ųžŽż6ąēé ō’9ņ<š0å䯌š’Ü÷īóöČ;¾žųÉź/!ŖšėKÖßśĆ.$š2+×öõńūŲ ŪėāCžė&Żüś źūÖīĖĢōYŲ /ėņņ5&$ó×ņ33óĘńŽ’%Ķā&ų ųž 1ųžÅ™-żõĘĶÅØČüč0?}"ķ ģ’,!8ųž² ϶ā+{Łööō,øšĪāŖ õü¼"Ödž«šį™ö ę"Åäņų Õ×§Ņ' 7 »O¹;ēŽ%}|ü¤äUß ŹC÷ŲĖõ ÓoĄūēģūOņéõ '/ €ė÷!pé!Ó,€Üåńƒ/#hń;rŃę,̐ś;Üłóū*G’NĀłęƒ/ī*čŚ ­MČ÷ū܀ķÜ»äźūū¾ļ÷öŖ÷÷€ ­„'b÷’ęQä7Xõé(÷üĪ,ąŅÅŚ±śęśš.ļnå ųŪ'öŪ%©ĆŲė"}Ļ!y~Wū ­õūh!źÅØJ'"»źŻÕ{4Ū ųČįń÷>=!g,¤¬D]õ“*€!5ēō* ņĪ & ÷Ł»¶EČó ąčĪ!Ō ö-āKÕ1 ŽŲĆ$į-,åŻ 0}*ö#nļšśņĶ<’IŽ€$ŪņÅĪ]“ģöć-ŪŻæYėŗ ƒåį=ų8Q öūü3ßž%įÖĖ÷ü&ķ!³é@%ē@UYż ĻI÷)$= Ļ,VļŅļ*( ć]$3 '4łļįĆ<ŠóŠÖ  żäV9śģčÅ2÷Ļźļų.(ŽEIęķč~’ ;ķņ ÷7Ü÷Śū EņBęŹļčŌ~ļ'üG³įŃŪ’ś×ū )ž d/ÕüßŲ’żōķÅļīśūö2ķśŻ÷ū ķłhÕėśęÖõüżū  łļ×łŁ ēżō žļ’äčī0ś żõ’Ööė÷ļ݊"ģņåüųźćīéŽå  ÷ōö¬ģ ’įõ’ šžē ³P łŻż/łč ś@üśöóĖżšż€ųīūµõś`ż4÷€ś‚ęī ’śGķ!š ūžś,čńóžķ"ōįåüņåń įš ķóų3NņżŸõ 0ōöķłXł_}<ć0ēCśäöšę×’,€īĆ,ńę&ą’ ū>ųŹ:ģÕėōÓ3;ų¹ žķčóįöģī ūżōčłÓłö÷āóļłüźō ’åŹ łõēõÜĒŲė łųóėēāš×ćļö.ī ūģĄö4—Õ×ÉRųņĶń-šĮöęōÕDśŁł X÷ŃŌķœ÷*’)Aż@įųŅéŪščŌ&Ń%ļąņ2īńõż"ČõʲÆęų'ļŃŁä„ 6Kļ Ģšż/^ų aõźś/ē6ļŚń!õŽųåż„ńżŸłōśß÷åāģā(äźč’īųō#ļ öłüņé~&Dł ś™ ķ9 ę"Õģ×1ōóā ÷õ ėä’ŪÜ0öä ū&ģ=ŽL ’ĪĪ “ēęōéį ū7 /1ł ĻķŽśķżł’śŲćüņģ!ļ0ō×ü .ŠŅ5¾%ķöų" !ŻżÉ' ųńż’§ģöü ė CįõŁö 5Ā 0ļóY5ŅõõéåP’+åżėņāüŅīā~ć éłUüł&ŽØ5÷:ėćīü­Ćēīä(÷’óåąšéĪņī¹G ż ÷ė$÷Āäüī šÕ ń¾ł4ŗŠģµéŁé 2L«čģģķ-¦óźćżä ź šŪ83ķ#źžę1;óņ&€&óŪ* _ öī"ų$ņßĮüėż!N- ņĮ ūļģļ%ū"óōšŚ÷7#ū>ęčRõżŻłńĒõ,ōÜā!źįĖ_ń łł³3śń÷ öčį)÷óōńó\ģīŲś)ŹżÄķ0 ÖóūéĀ’“ūŽ ā õč. ńņłžś©Õ×ō*ņ/ę÷ ŻUČ6äąīUńļ/łö =÷šŗīķŻ×äś÷õŹ’%åłłóī‚$ü±ÖÅżéńĻüżšōżēņķżū =āų 40ųģŻ żČüž Ņūļ¢ü2ōūźļ7¹ółóąģ å ņ÷)õß0Æńņ’†óŲõü1ēäōĪ"ŹėéōĒŪé<(9QöåŻ žü~ åŁåŹäł×=Łłų!ģėÕd īķ÷ņóĮ ļ$*Ņ"łņ÷Ašē…4ąį¼ŲóĪėõ"āTÕ×$7!××"Ń «ńŃCóćŃ$ÉÓīéžé°$šåāŪGī«"ŽŃ÷óæī‚ēķšŌųĖ’ļćÜ,ąų Ü4čķŻĄßļłä[ ćĢ#ęčń"ėŁłį śāČJ“ęD )0¹€Y¤Ażäņ~ķ¦ Ü2.üā Örń}¼Äyų ’č)ć¾é×KĘ*$žįµ!_õ€öķ§~T€ū“łč"ń•āžkųķ*Īś­LG%‚#ŅŃå » ŠPfüŪĖg Ī…źŻźSķĖŪ*Öć"'-1&åńä:ŅĖś =/ņęžśłųõųŗĖŚć’S~-€Čšä-"ŹÕÜć[0å&  &ż€/;ńē4,»čó%÷Ēņó śåģīķķķóģļń Ōōņ śęńū ųõłķļ÷÷ūüŚÓńłü÷ŲÕÖBśšŪóüśēøčõśļõśYå/ųŃóīč1 łŅ ļ āõå#ö’ßł& ÷ėźóóņņīņßå’#žöņŪ óčė åśńąŃū ōćŁļ źćūżéē"ķśųęī"ļśZē· ń·õ čžĘøŠõKö›ŖėźҦ+ „ƒ¦ŚńŠéųūcūńÖć ŠI×bšĪ ĶŅšÜś@šćāü@ÜóP%ń-µ€¼‚Ńļų*ŁäŽłóž%ķŲ€ÄęŅBļ.Ńóüūóµņ÷8ŽĻ ĢöÓńų3ō² €ųżĪŠõ÷ š¼©-Ä7)§ģņC4Õ’“#ż ÜšRżų!żĆųļčż-+FT"ā šōߚł68ėéųüŲ'ł@ öžŪö"żśbXÖćü šśT;^7½ ’#ž%¦łü šH¢:Ö½ ćš¹ īó· Ķ8äöšõė!ųžč€ @’Čķųńūź÷Ą÷ -.×Ō#ųöąę0#Źģõö'ŻäśKõŚžóńĢ( ö)­Į‚ī ŻōżÜw%Ä?\šņą ųō’ņćüĆ÷Ś0öżėųŠņ_Ž ŚńŅü…īåF,ń+ééātż+ Ģ÷ńģķPīŃšō ½ōĆļö’ļžŪ2ī–/õlźšFérą€8€'ŪŅó®õ 'Üūł€+!üĄ:ķ 3 ś'ęł ņ$ č “€łé ąģėŠĆ į)?rüūՕśóåKė#;śāżż łü]ń!ņöŖŃśöćŽņ’čä㣠÷Ņ Līģž+/!ļó'éóŚĆü/ųćčõÜńļż3ļĻ üų   ńÄžšŁčļ¼%õųžśYļ"é āā÷ķę¶īų  ō ł6ń*šåūķļš  ų6ž&łłģńüļųĘÜģšś÷ Ūéżś ūź: ž’ųąž čŠč’śŅRęńųģž+žćģšīęŹüą ćńåū1. õÖģ-ßÜ %ūżH÷©’€#Ų­EĪäĪ* @;ŹØ(ś!!źÕćü÷ZöóÖź %*Ņ€ć+÷Cćü÷’Øśź)Uę+AōķņŁĢ³#UR1" ’rł Óßė9é,āųśžŲöū÷’įė¦) ŽõŃ Jōō »ńū ų±Ó+źŹŌXš*ż5¤ ā ßüøźń1ż* ÷ č#½ąĪńįü¹~üģūš¦Rč4ė ÷¤Ī—€JčöŌq19"Ļühöū€‚Tæf#ˁ³÷Ӏ4€ć³\‚åś0‰ä>|$Ń3~T)€é,‚4ó6ÅŹ‚—öšÜ4ģ†ōńˆå č’öµWör€1VĆLī:=€iꁀć€!Y€®Pc®2čƒ8õ‘14ųb0Ā“LįĆń,ā­$ƞEæ(°æ¬I¤!n³Ļd²ø! €Œ<<Ž . ÷µį õįęæś,õłć*ōļįŪž ļ~ō5ž' ūŽź6īļ÷’ŽéJ-ōņą! ųĄēś‚6ö,;ąseŻĢŪ€ūā:Łś÷ąß³".ć"ä6^ Ż\ļ ŽäłśļŁ#4Ęń)ÕŲ’ķ€ĖķłŠŚÖņ żōŚēܼ;ĒH&€łēŸØń,ņéČ…1üä\ź䚊ģGÜ!é°īī:2("łļŒ4!1 Ō ’ į5“ē E6NŠāūįļBłåÓųé&ōż*üäĻ+ß éļ×£"ą÷ū.żüųä.ųųõ3 ū 9Pų ž’ļ!ūķ.#‹ļī¼ź õ÷0ī!1Śķóč枣÷)ć¼õńdł­Ü üž õ ķ č×Ļö @Ń śā/ņ ÷ß#öźīźŪĢą¾śŗįiģÜÓū 6 ģł ė4ķ"čß*ą (ö;Į<ļģną#įš Ę:ÕAōų śJ&ūŃć Hģ ō ā 'E켨KęŪ8żéćśø’,źŻ÷ļ7-ōōŃVń ßō’ōćš ż,śÅė“ äQįę 8šē’õ¹ æó ÕŻģ #µ õĻļśØśüČń%ć. ÄfęļśŌXžų0 %Óņźš0Š+÷ ē'żō<ČēÄ 'į ėÅ āö*’żūż1ū A/Ž’ ŅīēųļU  ļ Ūśł ńžżśŃ.  Ӏ öęü ŽĶ!ü%óżšńśń ®ģ ćųŪ-æ^Į,ŗõź®é*zų’ėöśŲā ė ąńž¤ķņ ń Ųżé äī<ėģģū'Ųü ļ  1ūī’ū !ģü1 öĖūåōČļžXī īųŚ Ż >5÷ų ęėį ¹ Ėš0 ōæż įż"ąØńļłCŃ ļć’÷żõśūćóÖóü’ž %æēüÜßüŽż°ź ņ³ļ’š0’ūĘéżī¼šśūåņ ÷ ż$ö ė ÷óąūŻžżųŃļÓóö-ļ~%¶Ųņó’äū÷žīķ öķ%ü·±ķ äÕüėź'-ēųĻ÷ćųēńĘīśžų‹’ōżņź) ŚįųžīļŻ’ąüųźūūžė’ĖŚėūņ ž2čėćžų’īž ć ę ’õ ū÷ÆĻō ÖŁöłĢźēöŗś 2ēśóįķŽ ·ō<Źūźųä 0ĒÓ*EÜźŹ÷ž."#öš°/ńłß’ @Ū6ÖōöĻŻāį'ūņćņöģŽĆ ' ž øłł'ųMäAūąŁöūę1AÜöšōKū×’ī ą/šņĪö , õ ē÷’)&žŁīāż öšķåāŠū)Ś_ā€*ßļŃŚ×öźAóūéöę-)Ōé’įśžõÖųä/¾FŠĀĻżÆäžź™Ķ_逹ōŪ ĒJą8&Ä)ĢĪžżęBĄī€ĶīMžÉ”õQć3ū' öHāē#Įż õŌ3įų4ÅńMłÕ Ü"ś ³×é%š’’ėšōüæCųŲ«ćčÖŹļüēü1šĆ'$(!¢å¹ :š|ļŹ. Ųß½šKß %ū łōķ’Óģļš+1õŌż’ž×ņ ’ ¬ ź ’ņGµāŪā~7'éāEķīż¼į¹öųÓļÅŽ éłöż’ŲŽøüų;ł-ė=0 Ż Öń0ļś3÷ÕļŲżųŚ Ę! š žó!€ žōŻĶŌ V+«ĶÖóŃÜTė ,öł€'ļŁĘ*7 öÖö’ ķ ßęćļ($ćóY ā ꊿĎž$)€Śī'0#ĶFA@%ˆōÜ~3-!#ź1`ń}ā°C8ŸģÜ*¢€ģ4ö ’ åĘ €Ł\Å%įGę« }óźÖž]ģžūś•ź2ȰŲŌ0łŁ(×pÜğģóéDüšķ×óOš ķč2”ńę ļōś€ō ü!27ŅĻ‚ūĻĢł€Ų€Ģ Ēž’å€LKå/ųŹä-eåė¤Ä×>įė(ųōFUóH ŠśBė®Śōśe8RćÕŌ,łļ4ł~)ŁŖ#-ģ6½ÓCT Q6° €!ē6^_ Éē½OŁņü×JӀ)ō¹Ā=„)’æŪ®ü$zńßī¹ķĘ@ü"¼ų äęg,õ)/½§ė'>źĆ(źÉ*Ē"',,ģ½Ł æÜ#²ųć€(ķ ¹ģ l€CŠģŚVāäˆĒ“ ¾² Üž×żŪš żü 8ī¶ł¾ū’%į)Ģ÷3ę CżžņžŠŽŃžōīģā éžčõā×õ÷% ü/&Ü %öłŃ’m’7ōń ŽĢēĖõųńŻü*īż÷ō °@ü’!÷źź =žę õ $śį&÷ ž(ż÷ń  #ż(š’č äAžłłC÷,ńü$C÷Ł üū›Õ śāöŠĀżüł¼’É$ś/5ćč ÷ā¼’ü%fōoųū’ž ń#åųŅ’ą÷öādö "·«žżē Ėł«6ć źć§Bńöłłżń’ļ́—ļ Ļ+ pń ’ ļüóHó'9śų ŽPļčóå?Ī/ąų ūĶčo 7.ģ'åß®śž!€÷öó Ö ć ĀčōóéĘ ļI0Ż ü$ß¶ĮčŚ¢ųś€¾9åģŅü õRč’ü" łæÕ"ä* TķŲę¢)7 ń ēü/ ä$% ķ"ńóŪģ ōņńŚäģ°ęå‚ńžŅÆĘŚõ-{š1 āūŹ@÷ą’éõļä ń ß ź=ś‚ü"īÅ÷õå łķ5$ć;üŌüü’Ė Ŗ-ĶķėĢŪ&ąż•ų›Ēż«,ŌÓI÷ņ÷łī äóŌĪų $ś½NĒņö€ó Ööģ !É ōā#Ėöėģ¼ģÄŻDžē Tż·ĢśŃ ģ~ąš**6Ōå€ õķ’ó#ķźų ('ō Gāģ€žå €źäł)ö÷ &Žņźõēżķśķ ļėīńżłéČńüńü ū’’'ą€:ųõą'ųśŽč1ņźś7ōßJų+}łŪŻėļżĆ$Žė £šž öµŪÅā;ģłµ €Óūå.ŠśŻą ś!āūžč ’ä±²źēÉü/žÜįöĶ 6ń šŚŪAīy’ńžņšžČü’/ųćä ŲŅ®ųś^üĶ÷Ņū šŃųś ž#éūėÜńāīłźśö(żóŖ GżŁ! ņĶŪ Ē=ł Rōõ()&Żńę*żŽ9ę ÷ |¤žūó’/ü1 ļ łM; ńģżšūöü ņżžżøžs ų ų“ < ń õ ÷%’ž"Õūö ē’žś€śšżļłšūłś(üų.łśöżåüķūč õ ųś’ ūėņņöņ ž÷üóļųżūĢ’Püńüü?ž üėČśō ä śĒēMž45õ×ųĻćīćī:&G//ōųžųÜīöūõūź’3-0 ÷’8ū óŲ÷ü e’Ń(ųŪ2õ å÷$'ł õ÷ē,ņÓӍęüßźü (šÖųśįśģü%'÷%ėäCé$ž÷ *ĘģēÜżį-&ėū ņR ąņžłś$.­ćŌėć2.ūõāŻ 0ń÷Ł0 ēł’ųūüņž- į"śōū)įÜ)ė÷ō2 ś~ćńūć $ īīšųŽ õīŃ ł ü’ļó äż Īīī’ ĶčĄbū÷ō<ż üź ņąśķ ÷ !’ģģ.’ūü$%’šóĪłž$ćś÷ī<ōłć_óūö’īų łūüųóć ų Ż ęųśēģńĢņžŽ>@ äŁčłččš öäĶīśĶüū ž ĶļÓłŲ,Ś:×Üśł>ęź -åīųžéćžÆ. ’ ōģš# óżż öŚ0Üėö0,ķĢøfżż ś"’’ õłõR 'ž õ<ōģ’żŲ| 挌ėųśÓģņźą.ę’ ž ¹š½ė ń*NĢõõ.æÕųē÷ģņD "ńń CŃė īĀž õ īā 3’Ņ: üųč÷ń ō ’Ÿż½ųģōłņš ö8 ņ*/üčöūēĒ"—õų鞏żü ¬÷(ųųśśI€÷ņłž"ģ #’óļŠīšžąų•é Jżį ņł īéÄėŪśēś÷ž“ū)£šäž÷õPūė÷ōėō¾Lü#ž³, ’žÖįLåŚ ÜO’ū45ń+Ł ß ōšLķė ļõŲē į ł“&ōĢ×Ļļķ»śž ģ׳’ņŽś ņ /ŚčJ×öIō!ē×SāśÉó6"}ęü˰īéķŃų$Ć.źŲēź W"É*÷-ā0€ūķśļ¾×īųūž1óöó. Ü€õöśTüÕöżŚ ’’! ė Ć"ōÓ'/ŽüłÕ āüÓźĖ!ēŻ!¤żšļžļōóźÓƒŲÖ źń:1ż»ń äCŸā) żņ1  Ķģ½,w 0Óųžž‡ čŗņóŠDō&]ó’"ćūŻ$š ėņšĶ ö’ Ęęn īž ņõŪ Ś 'NŲķ'é/ļ’ łķŅÄ÷Ż€õ ’ū  Óõł ōÖų$€ß-żÄżLż×¤A׹ =ž@ł"½ģ.ł" čņŠšĆ÷žį(õßQ õĢIņ!Ē š źōūõĮłĶęš²Ō-B’Ŗ“Æ)H ĀĢҼśØ‚9"Ų.½y…å<Ŗ€'#ü+ ×Lö^–÷ķ÷Įéč)ķėåµżļ}ć49Š"F§ėÖ'ü “ŗ 2ēėöŻG 3ćDė ēü ę­öAš)gB€śü; u܂· ōēø7Ož"LŻHģ!Öū5ö&ŽēńģČ33żÜäōżķ 5åäØć"śĢ£ßļTĪśAŽØņŠÄ ö±Ū)ėŪ ģŽ /©ü<³ Ģū Ł÷ķóē-;ĮéŁį öŃõŃ9šść,ņöĶåó":é­ēõÖ÷Üāģå 4%éčB’õ ężū«üóßĒā öæé+,ä÷é "ü/ķ’ž$ß6Ė÷ ńÉįö&AąōÜó{ūk Ž67,Õ”Ū£a>½ iBPöāĻßįK’\.QĻܧ4ć}Ü ī‘vų§ļ¢ćų»*!2Ų–‰"Ń –.;z³!C$KBį¶ć Šż Ųõu!!ŃųR8Ś »ö\čåGĖż4ö+ć8Čė Ųņ«žŒ ō+Ń*Žč(Ņ6ø@Vz4<#œ#ųKڶ Žė€O%(÷ 1ꀯĆńÕŠ> ńćå)ĻÖŚÅßŲļżļŁŪüłįŻń9°Ø÷ó õ茣č×5'6 żÖ6ÜCų+óč-eĻĒŁžń žŃ.źłüüóµāßāē źńłÅųņ\üųūēĶłėėõĖÜ ćż' Üöäżąó öü'ōģēģü ÖĘßöó$źķ€ąŻśUö !ģވŪą<ĪŌßžšķ āėĮ’#ļ šüĀśį$ āśö #żĆóģżćņŚŪŽ åŻßåÜŌö  õ÷šŻśńšś č įōä°Ć$óÅžŌą öŻłŪ^ż÷2! ŃæT ÷éüóóūś Åéšś ęĮ¬ źńžōźüżūėęļū żųčī÷|ōśśūįąņķDļńäõ ē¢~ģ öšķžņč"ć’ū )­ü ŪńņŽź%źłšē4 ÷ ųģ÷@īõųÓō’&āīū:źųN śó ćåŲžü öÜė ž/ īśīą ę¼įņ üģśźžźļ&C ą‘ż ģŃüżūüüüłņ#žļōåųA ė łō&łh üż÷ūüöš÷ Ü€ū2üä’īÕļDśå āżäū ž’ēłņ6īõ4żŅō"Ś>öĶž-€"š€p"06Żš :įĄCį€.č %ņüś=Ūķ÷8ģ<(åĪ‚Ńz Ēąź.ł*8€ćų ĆŃ’€,Öżp ×~Ž$ģ’ ūśWˆļų+*ŪŌųū.łó ü ļõņēžDaä~Nóšć€Łę žöÖŠĻ„Mū Šīųń\žļ'ząč*_öīćīśõ ŪL‰ł‚;ł4Ļåŗąė ķĀŌåžŗųõļ* Ūó蕿ōkś€Å÷€ńüē6ķōžłż 'ńü€ė’Šmųå÷ņū÷€ ōÖ’]łō €żźżCžż ūż - ó䀿 žūłó ų ÕĀõöłłü!ż óö0 üFżó’ķķé ‚įł(żńķ’Q žēõ÷¾ö üm ų”ö,ĶõŽĄõźōŲ“"÷÷VōÕźÖļ+ßŪó)Ėń$õ€ū£F-$8HĆ ļąõšā°Ü ֚öüö䓳8Š÷ģQęŖŲƒ ė«Ÿā÷’ż€)ś&ćż^a2’š’ ,ž”żƒ×­:éĶ’čÕCīśÄŠ Æ żń õłš*öʝž ū3-Ö īīĮ> īƒöųå õ;ķäõ'żÕžŽ,xŠü= #Ś÷ēā'1śį +Ļį Óźś,„ö[]KŌŽ^ 8ļ!ć ČŠžÖ¤ö9<1'>7ŖēæšR7śźłŪ6ŁAėIJ½šń*2’ņ@ĢP0" @Šķž84ō1ęé;ųŠóߎŚ4ńœāņų  ŪłŪ&’Ą¼ĆųÜ ;<šćµ!Śćõér3# -!įŠW*Zó+%Ī»åé%õś’ēšūG C»!»üé H ŪōŪžžīäņłāüü śžņäļ’ūģųķ÷  ē  żŠ ūźó÷Žūę ņūꞌ÷ķżģśÖš īūųäüśļŻ żļ  üöśóäóŽō$ßåšöõó7šźóśń łóžų÷õ  žļóś ųäź  žś !łīō ķēüų ÷šóå ęüę’żŅń÷īī#“źŅžāŗs Xļ 8źō÷ 5Ėą+°žżź’<ü€śļįõLķ·äōņżŻņā$äü,ŁšĢē éŅįń żłüłčįČoÖģ ņĄę#ó~ 0ļüŌ»X& æŽö ńĖ "’Żóģó &ūū ōńüų‹ģ)!“ēĶüŁ2śŅ óÆÜ ģ€āė ĻōųĢ Ąö ģēėå(Tņā ėö’ž5!ź_ī ü’ģ*RņżÜ$ś ķĀńó ×[ń ķż.ūß#Hųšéė$ń Żōüųē ÕłšĘļź ÓęFśĮž ’'śģļF³Ö.öŌż÷„é ń’ńõž ½ żźżÓåģ)ū(ėńķöūųöLß ŪķéüžßQ ŚųFēģ'óśĆūūŁóüų -üöŻ%Ķ€éē.łžėųõšäūGæōūż ņ ŹņųBrļņėõ¢žźėÖ½ś÷ūłļį-óü źż šE ĆīčźøćōööÓōüųėź?’’"żšŁéõ¢õ "īšųūų;!šgž8 ļ$ņōź ų įx&öÓ+Ė ų Ó4ģžł1ņü°óµ’ōśūśóšłõó2' ūų=Ņć žņõ*ĀüčĖūģżü7Óšē °ę“ŪšłüįÄžŁõśŻķ¦ąóNś ī÷)įż āõõßłź ś÷+ūņżĘųD ÷ųįė’ õõ óń×÷łū éŃųŽ fń"†ōÜģūņ ōō €'ų. $ųāĄńė" Ū *J žÕ śšžćöŪRįFĶćļłĻ ’ŚՀ¤ļž =š¦Y'L?žļ—å:ā 5ū *€šŹßø€ĖäĘ!'åųéłĖĻÕ€Q(Ų * ÷į Äż›0 ’óFõ\Åōß3Š¢ĻŻ€ ĄķņÅź śń"ČĪõė!Üļ įż*šė’Óó€īöŌŁš$¼ņū’ōśõ#ų / ŽżāęĶśī÷aį.éåųāÓēÓō:3’ų$Ā/ą ß’š÷ōįōŪö€š,ż ŗéļēŪūģ¼*ū'oč$( ŪÓ½ݦ@ėĘżż @Ł4ńĢÓ åčė0į×öķčķīš_3śą3 4ķÄŽų >üųĢ`ę €ūßż¬å" ųāä üż 6ēÜģŸ óīūļąņį6_ņ æ’YŌü’(ģłė÷ą-æ#ĪŌ’Å ĆäßņūūŁģż0 śBBöōčāäķćģLķüĢžõ$ėū"ęė IÓŁĖńśém)ņīö Ė ōķŌ ś¶"ģ¼Ż÷žī်ėÓū÷€öņüÖÕ“åWłńģūė öūõė mņŽēķ’ż š’4 źö ńłū÷Póļ)Dō. ķ’ öżśįׯ$ļķżł½īļ Æćō ńųÅ’ ż ę× ī-š ż ō'ļū­čšöŻ #Žõöńmāõ0ö÷żņķ)ō6żų¾.ń ś4õžż'&;' ģęå’ćųĶéēłÆūPėķ Ł ōīļ ś śąž ½źčõ£1įĢÖK’š Šē Ō Öģ.ół/ī €š¹9ö ųŚ’ »žŪł©łóÖõ  ŖūEąśśŲ ćģ ŚÖß öū(× ÷ŪųŅšõĢłķ(%9žļ@’õĻžģöłļä,łČ"ü6ķ-5 śbģ5Ū )ŅėüÖO šīŁåÉöŚęŁ Ż Ą$õŌńŚ !æ4ō1(’ ōä’ö&õńżō ÓžŃ%ū[õ’ 5¼ųįĪōŅ łīŽ2ū& ć ł2ķļŻłdńå÷/ N*Ā6š!EåūóÉ’K#Ż& ÅRå'Ēü&ł,üłčż!Įūžśīūo€āŲ ńü’)ś•ą)Ńļöų9ó÷ üųŪ:üŚÉšĆųמßīōŪó\’ī śĻśéŪö ąŠ÷:€śõżģ)ņAųōÜ  jó57 šYšļśõåęKśćš?.ŻAē’÷żåįüūrźć%€žŪķž’ %äĶ)łUÉÄģģÓŲ®+ńķņ ż BūĢŲ +ÖéĶ<šüüõž×ņ =õ9č €ż €ųÖ  ōäŃ; ĮŻļļéÄ/ļŌóä6ųųŌ~ ž#ņłłńG  ż0 Ėćöćē€łÓģćń ,XąüżÅ’ōÖż$%ÕķńAåķö<÷÷ į~’éģōņåŽźŖźų€¹oļäó AõÓ šÓśżåäõóųģšėEž½ņ  Å ž=ēō’’ńµüńA ę4ė€ūµż#n?õö¬ 7čāü¼ %öž ģšģŽ,÷żäĒ; śłŚśū’bGö©Ņįė­öóĖ’„ę(śūķēŪ Łßšē鯒#Ņ’ŗ 3 īåšń-ļÜ ü-ōJœ ž0%ēįŚ ī öČ2ÆļūīĬķėóēāüń6īāŌļīņóū÷pČÜŽé,å ęž÷ ņóö ķšõõų…’žõńūś=żö·ļ’ ōöūźū łļķģę &ĶóŌ#’éū’üAė( ąźūĪńųĆ©2ū'Å  ČżÖ(Ģ4żŻīå żūżśÆ ž&ķņ“’’Žü’/ ’ ę70Źżūēęž ’śČīśóõ’č-äŪö8"ōśż ōłžńŚ ’Žį Ąė  0ņōż Óūū ĀšĒ<"ś HŽż’ķāż’ēśüįé­ūėģēī š łõūūīų.+ųń@ Üļł ūśö šķöéēģ śņķķå ļŻ’āēī(' åĢżųź%ē &ļņķłźÜ łåóö ģ’õŽ!ū<š$Fņ ģßļėõųöóĻžū#)å÷į×Qāō "6ńōņ1ÓŻ½! "÷żµņķųį÷ģåļźņäŁ8ó.6×ę4«@ #ž“ŌŻśń 1÷ŻŠżé>ö°żłś ćūöõNśņōČĒCīžīĘųųä#ģłųš ł1#÷Üīėåń ß’ąŠÖöŲųļų!'÷ģü“ę>ł÷÷źõ½óŹłĻģ÷’Hé·&ßē<’ęčØī ž ół $Ż ū łńéÖ÷ + żōģłó īūśöźü'ö’ų÷€4¦ūjńü÷%ų’笸źü.õłÜUķłüż’ŲõūšÓ(’ś÷ Ž$ų%åüķż~ńļ×üŲGö ņŃŪĪM%ōüöēąŃ äśüā ę4éłšüõGģżöčÖöīōä€č’żū»õīņńļį%č V*Ū "ćü 8’ōž1é ōö#Ōņ7ń›õõāŪģŌ īōäļ%®ż!čŪģē5ļ$ņź÷õÉæśńģšJå źÜ×' Öęö)żż’­ś# ?5×äģ’×ų’ō ’mčĆžÆšż%ā Øüļ-įü°ļņęė@Ļ Ś¤  źį%#Ś õ€B7ōļĆŲžż ąķö×(ŅöŃźńĖō’ī’ųūō* óś ÷€śłÖ ų<’įōÉžö"Ä%čäéīōĄ  ’)āÜ<)Č AćŁļÕóųŖF‰čü3&é#ū,<0ōüĘ#%T=Ęžģė’ć(Ķ$ćžąČ÷ĀCūūś€4ńG ģčFŸ /÷óēć9žčńōüõ@ ĮęõöÓ(ł ¶ż÷’ńć-2 Üõ ć.Ēß Ē$õ*€? żž īą  U ×ä ™ļęöČ(ū$÷ 4$Ī’AļéĢ ü'ō įW & %śŲŚ ’ęüрčƒ7įŪ,#ąėķ'€l5„<5!q>4ÜŻ ҾćŽTž+Ž€ėųļ>¶ĢźźÅ ĪÄē«ėŻū m#ōń€Ń*õ (ł0ü5P©åČŻ3üńé’śö!ŃźšņÓĖļāģļżį āßłā ×wĀķūĪčÅßōęÕéū Ī=Ąō¢LōŠ ž åń#ņ-ŖżÕļ©’ĒėļŌ’ęąü½śń“·¤üźžXP&ś’ÉŽźķńŽēīŚĄ#ōķų€åī|āę%ōžįļKį‘»÷ļüŪŁ'ÉüČ ėų*ūŃ; ļšņŻöS@čīžāųX ģÅ öÄų÷w÷8Düųłū»Įäļ-€×_öĖŃś#åķŽļĀī&ńźÜ±Ē ćų2KŚÅ’*ćžęźū# ę Lė’ņ üÜšüÜ *ē ’äūäü ē’ōėņ8ēą żå"ļęsļŻß$ń ū¾ųųČ3Ēš’- ĖžóŻä ÷ž pżäį# č ó īćü$łöģżõ~ łż žŻū0 3õ×,äĀęšņķīīéžź *Ō³ū’3°ŪL%hā£ĘµėÕčŚ!·":öß(ŽŽ²čōKß~€ ÷,éAą¢Ż K2®š$æXÄšįļŹ^ū ć*0– T9CČĀį#©Å%ų X¾ż ÜģŃ!÷:Āī śÉTĢ)¾ĪÆ"$ķĻ4ųŹ/ Č "ęŁųåōö€Ø ń“³¹ćāĄ·ėś/ģł?M#Éī ¤'ńžvģ«%ų ĪŁ3/w€ąéü#Aū čķ ó^=)EņÖņŽķĪč2’ūž!)ć!ń15Ü9b@åūé&õĪāšėÖ"łHŅ:ä ĻņŠź÷Ņ’ōé3ń ā Īģłüń š"äśšņś@łÖ śńŁ ņģżŽ9'ģźóźī éqĮPŃ#ŅłÄų ßÕēŽżü Óęō(Aė (&÷żŠģ,Ūōķ ÷ żķĘóņżĪ ūū ę &źŲõ"čj.ōÜīįģā÷Cā:óĒ1āėüūņģćT5ė ģžū“}Pł»÷räż*óĀ󒔞łļśļ€ŚĀé °ī’e čūÜżóļ‹"ųėųå ŽŚžś’ "Ø¼źśŻīńŌŁ1PšÕ įEķ’÷ÉńŽ’2¢ģžÓųūWāōķ× žóģ ŻūÖóżŪ=ʜĄŅżńłīh¼ė yņĢõ5 !² õčīē żó:L8€øÖ;(÷¤čóõVõčö8æ ZĶ Ł€ Ž įóæ ūĖķŽÜĖĮą+Üć4"½!.±˜ł#īå+č ū"Ź .ż#å+łę#~éź ķō €Tłė ø*Ł ŠĮ抹ōź"ā ž,šõ6ꮏ ņéĻĢŲäĀõķžóĮ™ž×¬’Łż,1Oķ–’ģ ’Ó€ļų& ļĶĒ źöģ+ó<1č½ Ł ¹Õ W’ļźüäó Ä éų ÷€’õż9åżż-÷÷ ó³Āģ÷ętū-Հęśü ł]šę ņń„’÷łŪąåæģļūćÄō’Ęéų łūķīģ4’äŪ  Ń ņŃżAü\ óļ$÷łAęĘø’Ū¦¹ÄśüßļżśīżÉćųŁŗ ēōŃ’9Āg 4čōĻÕļĪ#éū ÷ūę )ł 4æ^ ü×č ś†’ō$7 ēėņéŅ’ū „ 1 łĖ½’’: ūĘ ł žų1ķü’śėž ųśūć'÷ĢńģźõŁ ü®ņśsōłū ^Åź9 ’ś ś£Žó ö ųó3žóīųńøęĄģ6.üŖ™dõ3 #ĮDŽ”#8ļ÷ -šī—< Fåüēć ·ųM倯 ķŻļńö#ĘėŌ ‚ķļ7½%~šüžīŁśŽ+÷0 ėü'öż6 ų« ó) ć'ü™ūō ķĮ$ėčœ'üūČų6ĶöŹ$€7źöųÖQ©Ųź6\öGą"śęóśńī* <ā÷įęžīņ~õõ÷®čõ÷īū aóśžŃč3ĄūõńN÷šå żėŅ#Ę Ōśčł/čń žŚū·ōęšęŽŻé#š÷ń *ńé ńõī łö čšę &ßū%żīę>’6%īżīõź ü f <ķęō®ī÷ććģ,»fļĄóĻ×ó ē&ß3ż’öōåL01ĶÜōė?€īĖ’#é'!żĶģöķ¹ęļą'ß’õ ģģż%źŠ¾óŠ4Ó,ćė łóņܾ Üń Š÷Ž5Ęū'ÉŻ ļļMäĶåéļŻÅąŻńżIéś“ź’ā(Ųįę Ė Õ!ĢüŚžŲżč üŹż:BčŚō¢óÉQūč÷ŃŲ4lōöė%.$Ē÷ų’ ģńõ÷żīüŻåī7å,ó'åtŹž{śžŽ26S+ č×öāźŹ>*ž’÷äģŁåłģžŌ/ó&šēėŽļٵėåł ń’Näņź &śÜ#åę ÷ Ķü’éóŽķŪDõ2ööėž'żäÜąźöxī ūķó §ź äĀUū ÷ųāįńėė ūŅūęĪ)æż(ėīņżęīä0ö Šś7ęĒāÖõüö&Ķ , ·ęü: ŹŖÉö īõŻŲķĮ1OKŻ8 $XŻåžņļ2 .žŻŹ Ģ ¢Būų ō„jöłåöhaļ¾+ūŪĪĖįłöłż÷ļäń&öŌłńŅ»ēś«ļ÷Hēą<ōž!Č Łé“ūō(Ļ!žŃ> ī ńėüōD¬ėķéĄbüė(ķķ%ķĖłĻ(ū)(×»äŠč Ō.ĪłüÖļķõ ņ$÷ęėļģķ?ļŻ<Ķ ó-ØEżŻ÷üŹŃMæōśķŁéī¶ł÷ę*ŽŹą +Ėź Ęńņ 33é’„'Ȁ±ė÷&é )ōūšļ毌Śņ(ųńŽē$ć7ūĪń²łī’ÖU ńłŹ 6žēŅÜåĶō²é•K‰łŗ üšœģ õŽåųč÷ ņę½ö« ū ó ä=ńłīHXüņįöįūéöģōēūżŽēųƒłæ źĘłē’ žųĢļ ź śü)’šµüōżóö:ųė8 ń/’ żōņé üļō ō žųüšüķźžųžķ0  Äšū īŌęIöūK’  ų’ š ņū ä (’ūņ Ž9ūåżßłųęńöęŽōßōųśüߌģMöżōźśįūč€ģ7öó ŅüŠ8ä©’ļ/Ū ēJæé÷ķõ źł÷lõÕõż ßšOBųõļ łųł:÷Śīķų¹ż Qüę%ł;€ćå1Üå4ēś / ó$ŪUūß ń ē’! óü'łšf-ņüīõ’ēėõłū’ß÷ö÷žąéŪVüüžšöō ōÖ’ū āūśäųę,0Ēś¹ēō@Ōå)ūśžņBų%÷Üŗüöļ&Ü’ž ŅüŃō÷ ŹŻęö÷ßłUūüZś >ź÷ł’üžņ ž¶ šżūū ūßķżćäū_üņõ šUcü’÷÷äß ÷ś€÷żÖ ł żō÷åŌą`<żÕäśÄės"ó]-ś:.ėŻ |Zōéėåļ’ ö źž?ś÷łZźžóöą!ģ"žMżõ’ Żżżņž 09ņš’'ļ:Üõį€ā’ śļśÖžū9żńåū.ņŲPāńś Ųųł/ōėž'ÕŲĖEżķü Ńņ\Ł ļ^ (ē€$üø÷(ō,ŗÖĘōć A ń,ųņĶč÷EļžĪĀö ļķ"ŲŌg. š²’Å F&öż€IŻ-'ēĄĪč:  ķē @YģķćÕ,¦õ’Ü6ų˜]õŠąź^6 ńĶāūōčŠDéwęCķ;°Żäų=łßłęd ż;żūī×č7Į÷Üēē ąøž Ł"÷Ø ł,Ū*¤8Ł< łŁ ĻJÅ0€ī:,g#Ū€Žå "!łŹģØń.gjü)×Å÷+įłé÷’ŃŻ6ūļ>× K÷żļ Ÿ#ūć¾Ī*R č Śü%Cśō"*K÷’śŅÄģęŠ Šż÷ģ ų’ćš3,žė’łż"“ė ņ¼ż’8ėęī üėō©  ū žżś  žżZõųåEńWšń ; ļźķ  £ģ "Œźźł%õńņžöéūż ś°ąųńõ Žłņ’ē ūß E’ņó'Ó>ļ­ŠäŅžŠ×ÄļDÓ’łIŻ ’ė šļ ÷Ź" *źĀŽöųģżšĮļń9įź7ź <ūĶü€,ķųōčģåųķü ö Åüæšõūūōń÷GūžłõœŌņūķėéčęüń'\žé÷לņčżżČöąŠ €āīö óżå—Ūō’ģļķżźšöšöŖõŲīŖ’Š(éĀŁśīūׂųĻ]éö*ļź( ģõÖ+‘ūšä 0ś õŪ*ÉßšćßŲćą% ū÷ óJķšB02žäčŅń&ńž%śā*å “ĆźiōõłO ÷ś¼łü$üłśō źšż/ņóūāŽPšö öūāžŚ› ŽŌņi łīāéż<%óńļö’ōß1ł;ń)éŲęžĒčī#.ļ&ŻÕ«ė¶ĶēY9?€ģÜ÷øų ’>&ģĖ ÷÷į÷ķłģ=ō÷);ļöĮōĒ ąŃłM"ü&é2ĻśŗūćCė#ķߏļ) ļõū śŃx&§īõõ0ųāżńå ąü ļźŽĶłF€ ļģ¢šųēģįõõś5ō÷"ół×óņB7Żó€#ó ōĶŚĻ ąōųųųģż5żŌ*9éJżč÷’õõēßX ųł.÷Õ)Č5+ I}żæĒļÉĒåõź ń’žjó’Įśįó÷öū€ü×8ß2ķ±ōü}ķH ņŸŁõć*ö‰šT~(Ü’*ś ’ķčŁŗ’!żłė=šédöś’ ‚ć}łļŃžłą&PĶōJōšÜ%óéųõüŲü&żńŁ€"ūčģźę/āĆ¢B,(ךŚķ+Ėåéq’—ČN ć9ü:R$嚣P Jf/Īł0ųėŪÓ"ćźīł,ł qē $¬‡žżś… ōėĀąĘAÆŅĢ-UW”3"ļÕõß×¾N³ŖÓ6Eųń½TCČ·ø¾mM±‰_½€ 1ąÅGęĮóŒĖ'€½€ēB#„ķ+“ å’ń)Ņ+&ī*›(š ė>ż&©€€ļóDc8ņ*ģīøć:¼ Śīßõ›gåūÕŃšļ  ĒłŅšōfōÜąæ€Km śē%üŃį)öµķ%ę’ćźó”ų~čĄųūēŲ)įāĀž2 ģŽšųūļę§ł\. Ä6žł.ōó/õūż# % õį9ŠŻēłõ Hųūö5Śł ż™łŹP9żĮ€éžŗóųüčóÓ3 Ćżć0ūü ōÆć ¦ėęLåųą ćÖ’€Ų¾ķ āöŽņéģˆś Ś÷Ūśķ ģž)ŚŲ;ü0)  ž<ģųšł/Õżø,ŁiūŹłĘżūō7ó  Ļęń õśŗųļć +ģų=ōģ žÓ&ß åś-'Ö¶šÖłģčśżß³õńöč óüŪņĀ(ś$NÕŲ$īī$"ż#6ŃÕńķ<kņą$ėėļõ!ė!Čč/ )ąńßłųž+ē A.Lß ×÷ņ/ń ŲåõĒüźž ¶³ Ėżē.ŪÉłō’šżåįÜź ūä»1ö ōśēĘé ŁšųĘūņtś‚ŻŅīėCÜń.¶# š,ėōŚa õēöżŽŽ“ 2ö (Öż·ļ¼ O»āŻ [ńźAźķ 4ļ! ūź÷Éńś ϽžŠµĀ¼õ7ļūÖŠ#ŪÖ¤ öü ŁÜ ōóóūŽģŅīüß.łč»P?Dā™#ćżģūDńųąéöģŠ½Ż#öūūūę÷Ėį"åŪłķŚ1ū9õ=HÖž'į½)$ų"źēŽč 9 ņ ļ#ń M8čķõŽėźŁįĢ @7żņŹīźšÖØÜ"ēFĪėŅė%ė éųčŠ  ’ ś0ō=ķÖ ķCƒ­łęCģNė ų@*ö/ü'ć" źłł ÉŽüōė"éåŠżą|åöžžE łĶ }äźźņųźDó"ō #ē żóž Ū+ųT żŽüś āå å"łé Ż ūļü óņPū  öō«’%šć ,9ķēņ2śŌŲm’ å*į.čļęųĻįĒģĘ ėāõµō(’!üł,žžł(ĀéööżŻųżēüęćó¤$å÷š’ļčōųłÓäÕŌ!ė®»žöņč 'žÖ.1Ūć€ņõ« ėųōģś©Ūóśč#öžžł_ö ŗęŁw öż3" •ū čGź>"Ī(ģńž>čóżUÜŁįłP Ų*éךÖśēūč÷/ÅžDž÷ĒŽ ŽŁ óŻōēżņ šßū÷õ’Ūįżųź°ół÷ö’Ž( śśėó #ń6żžō'ņäõĄśč0ī ėčżžĶ’śļ"÷4üé ųģóéżų ōó"åīł’Īžó ģļõōüŻ#ųż©īłłäŲēžžž ū(’üū$ Žėšśõė÷÷éōüÅūčéßõūłėųūė ģJ āļ³ē Öśņ-öų-LÖšąźē!ģŃ”!Õ ŅēäÖå -ģ;łž ėå źüūžģÜüōDėĆ Ł ŽīŚłEüįāųć äīõå)ü#Ų ” ł Łź,ūžź&ŗ āū6ļsŹŲūøŃĖģ*ū÷āäń,1ś( žąśšĶŻł‚źźżłģ}éššķÜĄCöė ę× ŒUTķ÷HL ö ü ŁįüĢļšŌķńį4 ģó!ķŲźõ oĄ#÷õ!Qū€āł€5Żīżņ Ś€Ėńņķģ}ōżöłū ĪöŅ äęųź éŌ Öčł  ēŅõ! ”!üūaķō ńżšń$ģś—ø¾Šūõ°ń#é Ā’ĪžļBī0ÖE>NōĄų&Ī•ŗ*™/ųķĀ ?ZćöZßąGÓła‚é-mŅ)-€ō(?<ń‚VŃķÖż/€’AüŚI$8śŌ,Ō8»ŲēD1€ üų%€*D䀾*é0FwSźž#å*3-0Ž“Ų#R?åäšäĆE1ž¢ś`7 €¹ßÅöń{ąž“ßČČĒō·š²č"ūĢPÕŲ#3 ż™ćPéō(ę¬äīżńĢĪķ=óėõū(ę”CĶāōāŪ’–ęß ü5ŽēŁņńāó> #įõ īśśģ!Ž õĮõŻõč4ó0ĶäÓņWéėŌĆōėžīńźēųģͲé'ōķ÷łõ Łūöļž ß@ī üģņāüź’üéżķäńńśėŻķöžõńéģį ąū“ü  åŲä# üņŽŽūšĆū-ē! õņūżīś čß’*écó üū z Š8RūĘĘ šĢŌė(éŌśÜń’#Žäį+Żųßüąōųōėžó7īė ų '„äųķąņ Ö#;Ś ā’= ō+¾į"ŻģŲśćōJé9Āńś! 8ÕäĢ€Ųóī2ńļ"ć÷ąż$&Ė÷Ī€äŽņółņóń ¶§"€’Ōų6¶Ī )°M0ź×½égęļčóöšżžö kżēÕÓ ė“ō¤ļśäÉ1ųįžķ'üķžšžõšėü ś.šś¼ūóõņūüų7å’é - ŠōÜīķ½ņó ®#ö äęīö(ś źä÷žģžĒ žõ óōźźüļ  üų® / ščłóóśū Ć÷Äüš žłšę ūžżĖ’ģĆūõąü’žŪł ė÷)Nßųåū!ōÜü³Ń±÷õ‚āģ/Śė7ūź–¹„Śų =*Āģµģžą!~’ 5ņ$łų÷Ś $ƤŅłļHśĒ$Ū"Ńé'éę}æ=7õ#ŽūKś÷÷,õ ł#śņIž óųé!!Śó’' ņķ4ūō„Ū ļ ģūīżÜų@ö/  óĆč ł’įš īčŃöłė%ÖŹ÷Å šé ÷¬˜éÜł€ąłżć÷Ü ś÷ģ%1.ų Dš:ōöó0ž'łŪ ńģ7é~ģ&ļīž’ÖéūźżÓåĮč Bżõś’?īó#óŚ’<ü ųńĀÉśūšżüņėß!ĻU|ī ō÷Ž/łā&ōŠ ģĆߌóąŪö÷ų÷éÖåō’Ē*žōæ*ń< ļ@ß÷ó öŌÖ= õķ€"øK ³ļų!ēņłš-žąČś2īõģłł!.ė"Ļā@óäćźž!õņ4įķ8ī -ē%šųę× ķžł’! čüćīś>O šņĢ Ļ*·ć)ź­ž#žóāņņÖ,×Ųśß3ŚÜéōM “ėÓę ū'ź õžęēęé,łųž’ @ų ļäšš4éņčüęņō źšŠRöæģńńü*ūžōźąõóžģéšŗŅ#šK,żżŖóųń’ķ @’%ōžņūįö ėė ļš śżūśėü÷ć÷žśņņ’ļéõō ’ Ļńöäīõ#üžńé ÷ēģ/°!ņ:¹ŪīŻ ģš õ%éķGvÕo*Ł? k#ńīėųŻ ń6Ūžķčžõšķ1źģšüĻū?ųĢ_V ūÉ!õā$( źčųńčö¾ä]!åä+ńėžø’ų’õßü!õś7 ē’ !Ż*śĖō"0 ķżNćóÜćÉåP ß·ņ7/«Ō Łä(Ć]į°ū’!!$ö@ˆüąąų¹źężēōä Ś¼ū óńĄ0ÉBą)ūÅĄę ’Ėūēžņ5ōéÕ÷ńŻååć&0ļžšłå©2/ēė0b?ŌŪī 44ė ļä"ŽįļĘ’łŲbńśžńüõö¦ų ×āö ń€Ķīžśķ 0ž·€źž  $éဠą÷÷ Ųģ,* ü€€€€ž óĻŽūŽʀ $€²ń ķŚ.’Źļ€÷ņ2żĪłņśļ€üųżč’ƃ ąį€’ä’ēģūŻŪö&ų×ūöü1’ė)’ż9šžģ įó ą$ &÷÷üü #ż÷5ļ#ź#ōÕųīė¼ü żįŽķó0 ŲńųėńķēÓõņW1Ö üö/:’żģėś!!ģķ0ń’ōĪĻļžū"č éÜīõęūęłÓ ł č’&ÖŁ,įųņū’üļ,äüżūģ % ÷ęŌ’ śąąōņ  ŽģÓ åż÷óēÜńŹ ńööęģÉćčš’įŪė éīżåĻęõöńģŃöŽ õÓäēāäłōéżõÓōńłÕüÓģšÓļśŃļõėśģöŌźōßöõīąłčŲ é żŽ õÜöė÷ąėŲ 4ļłėéöšśóüčōīD źś ńšžŌįóļļģ#źŽūśšāüźēžīõčšå,Šā³īŲ*R4ųÓ”B¬€5ūńJĮ#Ņäijüįģ€!ŽŲ ķžÕūČ Ų (6 €½7³lÄwC čü½åą³Öūśį]~Üżćō©L@Æņżē+Žģīé?įš™ÓåźŅß*Īńä›ėˆöģÖ¾ųńą·ąe!éņ’żūū;>¬ś€ĀéŪ@żÖ%ę2ł~£*$ńĪųÅe.ĪS’' óbķ>¹Ö*ÅīüŃ"SźJģ ¹Œī€KbÆėó[Ū+$­>č)~€€Ź›QąCŽjŚ¢~}PÅj€¤Š<.ßä~ź ÷7Ē2äŽ@7~źł¢Ō»‚€~·÷‡éÉXłĖā€1ł`üQ~Ś»E€˜A¶ļ©ą€ēųĘ4šīĒ€Z€č"Égö%ńS €%8C€č~ķT.ēU~·(¶Ž(›żZÓ1DL#X+©’Ō>@[[Å×Āõ)f-¼ĘG ’Ųāü}÷ &uņś% €ßõžŁö ėD$ +ćņž÷×ęī/ężćĢā)šäśņįū߀ÕļµŅėČÜēōü4ż ä63ü,× €ņä `śäź%żś ń׳ŽRņėüž€ū% !€Ņ X €€^€żēõåųł÷šśÉ¹÷ņüÜ ī€ūū8Ü śö Ā= O Ōń²õżę õ ģł äBŁōöż óšņåęšūÜ "¼åčõägóŲś_ļōóīŚ åŽČÜöžėŚżś’pć×ģżņņ’iļ÷#ÖŚöę¦įčö ųĮ#’ü8 õżĮ6Ūń1&Bžź’ę ōǾź#ó’6? & .ężą žłņß ’ż’ęņīĄŌ3’N ł #Cś%ōēČ ōź÷ńōų±ņž”,ćōä ķņĢźĒÅßūĀģVA™Ķ¶Pųų =ć<«š’õ«•Y)įō K€ ²®łŖBŻłž· ĘķĪ šėźĀėõųĻ* $Ż#¹ÕV6ŗŪ4±$žš7&āiśņ śųD*€Ž>Ųß©é …żČäó”.ęńŁ~Ģņ€’’ ^Ž~؁ćĢ$dÆ% - ÜŠęŅę™Ęū*ķ„dąśĒ Š@*"Ó$Ą×ž Å"÷’ ś¦ž~B»įµķ)’˜ó·#įcÕ7ó§Īķļ Žķū üēę 4óķūö óĄģźU$½ÜŁŹļīöÉžāJŪąåÄ ÓŻł,·ķīŚž ūŠE.( °Lā€ģčšĪś.ļŹ ›Ō:ŚćŽ8īFŻėĀāćĖö-äE)ü·šģ÷7ŠčūģÜ>ł>9üąöõņčÄóõ#ł¹¤čČżīżń!¾ćģÖŪÜTĖŽ,åĒ8µ]Ł'ҼŹś©×Ż2vŻŻ0 ķź/ż2įŽ0¹ŌÕ¶źāŽ ź#bń>ė+į€śŠ·ŅŲąńq$‚T3ęęķ$Ńü ė“ü^Ų¬!˜"ł ó¼łr>2ōg.aLłióŻ ąŽćīėUD·G ų»*o!čóż źöģ!ÉŃ ŗ «Łś+­/½ńōę÷*¾č!ģĖŁŁ ųüõÖāšäŠŽ'ść Ś+ Ī]ĶÜéżŅćńŪļ:sĄ€ ūćķ  Ł+’;DæåÖGķ8+½6ŽĄį&Cųńß²1 ś>ÓõĻż%«b ĀŃ+6żļųųWéLóŲč-īżīIµĒĻü/õ”Šųƒ ’į ė-"&ų’V4)ó$žžæŁ=/© ēū𿀰†ūd!Ē7äŠ`ĖåžĘ4Õ= Õóœc ėķūūŻŃ>ęįY(ėäɵ4 āé,ģ! čžł„,üiÄž"ī ŲŌįC÷u9ņ ęķÓź&ÜīĄ#  ūĀō½>ałŚĘ+Ó'ą7Ó^ŚēŌ“Ą(õ€ŪĀźĢ1Ó®ęÕē,ņ&äO}FҚ ćŁåż;ż‚ńä1óņDŪŹõÄE(ßQl®ń¾ćÅ!ŠóĖŲąæ(üb4 ēū€/)‡M’ķÕwč'«äźķżōōg ŲŃŁ€?Ą,£ó#9ž>ÉŌńśß  ų€źéĢŲEĪąKīó>ļēõß×5+åķ»ėĢV耒oń:(ō?ųäJśĘ‚%¼gųąž ųõód ķ8ų÷Œ źż€  ąc.Ūa“öł÷,7!&ó1āĖ-Ą;4ūųŪü’*ųČGŌ Ūįéē*ö ųą4ńņ ÷ū÷'łčøŠĻ’ åßóÜŚĮ ’Żķ ’2"#Gē åČļ/ĮÄŖńŻ ĖņąųŽĪūśūäłń÷šīäņ 1Ć, įĆ·č öłŲ’}äł.­é #°žćōśö¾üé%ćöóą< ”šŻĆųÓģ4 õćļBڳ%Ż- éé'óŻå*Ū ķųļČŁĆ łmŽśģóńĢčž÷2žŻŪńÖõŪ×õćó üīļžļ&õ5ōż#KšÕÓÖüņ»žłčAóėłōüžf’ķłč7>’Ł øįš$ķ Jś?÷ėóüĢĪŁ÷óߌ!ł7żā-ų¹į:ūö'õŅ Jśēļ3’ąŁGųŻ ļłöĄõ e.÷¢6āOēŻ*üū2EŃßę4Āóń"źķļĮ¦LSöžüŲć)󤏃ņŸ 4‚޶ŽfžĆ-āŲīéŪ,ĖšŻäɀź _Ż6®ū++šĻM*-¦ęÖÅ 3ļ;# łŌ« Ż’!ÜŁ Ź Ń’óōß3ŗcī÷łØÓ(5óŹņńųĪķ*ßąĄõī&Xģģ!ōžųü8éįē(üļę³ĆĪžŠźńĆėŽīm-Ō J0mÄō›åĶķ 58¶’ć÷]÷"ÖFĒMZ ļė6cśC'1)Ą#ĒÜlįąĆ@$ļóīšų³Ö ž÷'īŌQü#ÕFŲĶ€µå(Ī€ń’fŃ×Čē6+īøćäł’Ųm×UŻōń³8öDĘ" ĪńröŲžU”+ ČD ĒļĆ üńøłKś,éÉų7(Ų’ų2ś Ńäń÷źź;’äČ8 ½Kė"ąöŸ·ŻÖ6hźų>(óŃæģ3GÖ3ą ī$€ 'įšŁĻżäIµPeö'įś# <ėŹõąļž ņ!VŪżŹčķ\#ī?*čŁōŻāčĪļ hź ķH÷ś=č ń)T®ÖŗŅ4ź&ē½ųŚźėśĒ"ļ- žDĢģīü † Å "žõś#ė żü€÷-"Øb±'óćūķ ćŌ0 ūÅš‹'/Ż ßõ€¬Äż‚> -šž€Dćķü?Ś÷ć\ķŌł 3ńöé÷üūÖõJ½ņŅśōžå!( ¾š¼ŖüĀīÜĖb ņ]?7ėLÅĶ­ž Åģg÷ńŚMš Qä&%ļŌ åĪ/+ś ų  ĪžōåYĻ å Ūcģłč4¶ā.źšģåuī%ė5 ”« ūé>€ėėź ś׀"łoų’ą€÷õēēćҾų! Ģķ3öŚžÖÖü·Óčļ4āó .ó =5),ź°ņŽ äū=ć鎒ėķłŃ ‹ /Iė5Ė! eļ7+)õ3’_Ēž÷į’=”&ŹĮ ķĘ×ä’āčüĻ.ńü>&I!^¤$žóęųÕ}’Ų 1’üTŻčÜ÷ŹöŌĒŅ(åĆŁņtŗ’źóē  āŻÅėĆS ēŽ ē"ņ ]ßķš>ēē/²Ī]ī1ö^Sż Żū%ĶR8ęč7¹įį»ńÓ įp“ß±lcą¹ g>ęŌļŅśųTž» ŁćŠ<Ü ģ ėžÅFļųöŅLÉģĻÆ$īϢٱ7ćŻÄģh] ÷×צC#DŅJŚÜė Ėßź«¹9"äŌ "ć ź:<ź(ó”įģ- +®Ńéą ąĶß8Jšżņ#ī ĢĖ ņŻūōčOļąĪ÷ļķ ńż"0/žõź ń ŚłśėõćķėüüÖõńēłō!=öń ł ·cŌļō#ćęīź -ęś)ū4 »=©×å  ņšģ%įžųąé Öš:ųä %")ųšÓżĮõł3žń÷Qö -ł% Ż÷ā,Ā ł"ŽįŅõżłéžśźų ó0ōāĶ)õUģ÷%×ķ?’ ģŽĶ ł÷Ū Ś Ķł,äÉmŅ.óß#õÉé÷Ć)äĀŽ+āÕēÕü’_ŖņöEģČŌńż&ŻżP.dßģźÅG=¤ē(żĪĶżģöņ¾ )õčÕ/ĖŲ .# Ō,Łé’ ó¹öłüų öń±<ė) ōķ'čø÷žōåūš@÷āŹ_×ŹŁŠęęłÉü0÷ēŹÕL&'ģAĻ ń-CéPž.Ü@;Aļn˜üķ1H«ņ®Źé΁Öš`żčOSćøĀ)*ģu×ÖÕ €€ĘYŠ@É4 ÷½%ź3ŻĘ]B 2ĖżŲéĢŲŚū.Fćvś š’ Ÿžō#AĘ +ŠśžåG ōW!$õ :łš÷ŽÉżFüŌļ¬/Ū ·Ņ¬ӉÆīæŻ€č/ń ų^L:ū:/ūäļ÷ ĄĻN&8ų$ķ-ČüÖ÷÷ół' ļōžķīö ņų’/æł śŻ¾ęÉ:üøŚÉŅž#ņņ4Eół÷ųĢ)!=#’5äńä7Śōē“öó+)łõĮżŲģ3"Į+Į ("°ėE:ūEį•1 ųÕ"¾±Ö>śłćł®ÜĒ*(īŃN:-ōā¾O{6ÜÓÕ žé12 'ć#į÷'!=ÓŻż%ēžÅųŽ ,F0Wģ!ÆŲŗüØū•Ź~’¾.’2®€ŽL›^īT6°:üešĖōéų^²V÷7³ |"Ż1Ļ©õü <ų³ļ;ĻR€€ęŲ•„}ņ°å[€ćóIäö’BG’ņEĖ–üH;Kqˆ¾ņŖųL²&ä’ ®‚^ĖŹ€õq/˜˜ŗ:ŃFĻŚXÅÓF€»~&¼Ų¹ĖEīpāG¼±łļø%¬ņ€ׁ]äšó Õüū$ ś µ4÷īļ ē: åE÷ō…éåøŪUćēŁĘņōįżļéõöÖ(ŗņļŽ÷D8÷ßüĶģōīö$ļĄÕ4Õ’,īēĢš)ż üõą¼Ė %*Ģśś$õšāėģż ŽÖļō#Ä śżūń ōóÓś %’ī\äū ! éū=ĮūģĶēųūQöHśśųęļ÷żźźå¾M äöä7öŪoÉ»żZDó'üėāļšśćķĶü@ä#šęšå14@ŽōćųÜ ąō.%š!>KęTōń-ēņ ųāŗżōó ßÜ0“@Aõ ×ņśߌņüų17#ü æōųćĶČLÅ’ūĖ ÷ż Ū³’ėLó3;Aģ óäõ\ę KČļņ*÷ß °ū’-ķē *Ūżį0 Ēö*ų’ņß32Õõū÷Č*>ź(öįż śö’!’ūśė#é » ļåÄł-įł¶ $čžžūę/ł'½żÜŻ1ĪŽ ł ;É鎳ć$üŻŪ€ūš÷÷é åż CŻķ'ńœ Ż žł÷śćü"ąćåEųä)āą÷%ģ3āŁį-ļ9ńūųż÷žŅü ö< žä/įö4ųĒä÷ äżī+ É 0äöćĘ-Žė×,=č) 2ž€yĢ‚ę5׿1[€Š€čåGEJń#!ŻŠB“Ź÷ī|ćVŌYČų/Ō 3ų$ČčÜ ;éĻ®ēs(ĖÄķī…[Žöć% ųžx  ,õķņ5÷°~łü;=įż»aéū!~A'ė0Å]ēźšÜć°@ķęóŲ Nök§ółĘ­Ķ JkŅ@æ| JØ`é S£ä"ęеčę łČ üģ’ óķåõūēŁź'śõė’ĆēĖłāūó ąó’öģķé%Rżóś×“öżņ’żõĆ Õ'÷žēėß čķŅųüśēņļöż įōŻžß)čžüęū÷č äžšéŁ:ź  ś÷ōś%ųčęāśńģė łļ ųįśį ėÖęß į!Ü’ńēöųŁŪłõń”Źńö÷Ņ '…Ųśīīą=©Čū÷ļ ļćų $<ʳ÷!Ł IŅėĻ’¶NåN kģ0~ $ćĢčłżżģčV·ä ėĀĮąį&ąóÅąåäēÕ ź @łģü +Ģł0}jG/KߥäÓ=ļ+źóJ夊üŌß®ĖČÕś÷Ūźķ XöÓ'„žų%Ćū&ć¾ćµłčļ č$!šµ7Z[°ē%,åH’Ś<€ź€Å£ńņ”®’†%½ ,ė'čļ īüücÉęčšÓųäćžÕōŃĻ1:ą P–łÅåę],ėŽŃØ0 ęX4= Ćż‹'ö)¢%Ķ£ö6ė 3#õU "įŸĶĒź"ūįIeōD%AJ¤ōnŌÕ×’(ēó!.ų4.*×Ä ķ¼ŗŽīŹŹ­„÷ļZ°0}`ÉŚĶĪŃ=ņŽ ģŖĒ7 õ é.ČJ Żščś ņ+%õķńÖ8åżŪŠę ż$7ć ’üéä%ńõe ÕD” ēśśżż€ń·*ŻßNūõRīńä Õµń- änĢ#š×?ķOCēõīŁÄŽå:õžč÷ūŸąSĪŃ’śģżūēs4%Śāśö~Ė ō ļć óÓśCš ²Õē 2€’żóŽ)śÓVč ®ł’ö ūī4+&Óń/![å9(įĢĄEcēšP/£0 cÉ'Ż Óä’’#ž õ:ŻŚ;17¹įóŽT…ģųÜŗ²ŲĮ÷Ņóv ’ :%>āųõWłśę#<+īęÓÜ*ŪVfłćÕm"źę?ÉŽÄ„=ī!ŁŲšėnŪšd!YœŲ„Gi“ōÓ4M½ūżź<;ķ€ Ī” ’¬ąž?ŃĻČšąÓ­w½ZĻńż Óē.ÜIÓß ņÉū 3 °ėP ļ’üÅņcś÷ųįŪFŻ ņżŃT (ōåõoļõ<"żų Ō/ńÓgčžŅłłē)ß:å&äö&ń ö(žčź:!2¹śOĪéāÉ)B¶åżÄć!čėYõ ųģ Žå½óļéĢžūąū ųł żŃķ(ėć ų0* óÓķ Āīīēž Ūė(ū1ėżį ½šÅ5Ž×õ £Ń/Ä€ß * ź r»Ļ °ē7Ż€]ģ’YNŗčČøĻøŁ=Ģ ø‚Ōyī]ī¼ŗŚŹŒ ļāµń3[3ć®QņÕö·õÕõ ūö ĪSĄjōņÜŁŗĘ`ą0±Ł¾Ō$Ģ1ęĻĪĪķ Öö÷=×äĘĢųģ1čS¦ Ą>„ߎ 5ł9 ėE#½öėóč ś[ģÄ.Ćö)ūF/Ū@ÓŁłõŚóĄ€óQĘē嚎ć$ø€ģžóūŠå'ąZ5ųöńĻč€Č6,ČēÜ #żęŚ§„×1€īD’źŠÜŌ€)ĖŅīK\CÄąOÜ(»%“VU°ąŽõ=ó+QķéGūå"šģķčóżŖŃ„ CDōō?įūWļ Ėå5)>Åķ’ZN€ėīĢ恵 żņŹ53ų÷DŅÓę’ōčTä©Ļ6Üūē# ó8 s÷6 <*śoä€ A9-&ļéIĪęÄÜąäüŁŽ¶øāŚøZ°¬ÉĶÕ~ä 'Õ·žģņ…ɀ€²ćźģģcÕāąĆ˹Ӥ’Vļ±€Ķ:ćż®"øöģ QÉ ’ $ģQ’ĀÖI -ĒW%ÖĀč 3āśP:Ž×Q6 ’ 5$õō÷ū~/ę6Ź€ėÅöv÷S9%+óÜŽ<Łõó‚/ö%Uńé/?öß,łŲ ķ.äŽōōųÉŻń 5"ż Üü *ńüšģł  ēāŚš×āöōčT-õ="€%*ļŠńģÓ!Ōš6&3Ū LÜśįūā(öĮ0ÉźŁ’ūįŲõź! p\ļ ģ ńü’»ść ōöÓ'ńūė  õ.ķżéčģĶšźéöōāĀė!ų÷翀īŚńŹ ōćąó Ų÷3Ļń÷! Ū ŻļóüŁų÷ļź//(Ōw6-ūĒņ5 %ą›ō,ąź&ÜŲŠžńąō’ĮįŚńÅŹ[ó?·ėÉD™gķ ŪŌĖŚ<ćŠ(ēJūmÕ ųŃūß’®ļ›“2ÜüµÖ×Āń„ā7ś°Ń#ž€÷Bé¶1ŹŪŅDÖéīčąś¹ “.0įßó¾Pćō Łėą ?­ķļ/|ßųźĮõüĪųÜĆńĘģÕ&żéųÕ 9ūŌė )ķԌK.0÷Ī ÜŠ›Ųžļ÷ē Ūļ)ö芀?üRK}ŲÕ·ż-ė÷5€Źā+ōļ¼ś  “ĒżāQ3 Šś¤örę<÷ņć÷V0p ( “āįŽĘęū—ėņŠēłC%Ģ?ģļ½šóżĒ Ć’š_ē5Ė „Å GŌī„!ÜŹkŻöĢą¾}Ņųņó`£ ń 51,‹>oķŹ? ęņ6 ąJ’°ŗ įÖŹ@ś€Ųķł. ģó%~įś_żķ/å’öūųńēūŠ427Śł(Ė D€ā_ąŌ *āłšÜł7;-Āń3ņę-äģć įĖ·÷ĆŹä$÷ž Ļķ•7å&ó Å©Ų ē ų'÷ÜīĀćµėūBąšó»łĢ”˜ -ü³O'śßčĮ!łśČė&ī+Ų/ĶJśŠ(ńķķå> ļļ Õ÷÷'żPŪļŃ"żšóčžüFTåčYõNŻS1sDå3Ė)ł1Gē ā öōŪ ńöžōŁś üšīōūūń÷īKżū ōłżöłā³ž üé :ŃÄļ,Śā ķžņ ļ²åõžūž6ų  ēūśņ ’÷ß]Ī ńż®÷ 3 įņŻ.īč&Æüłļ÷%“ūžżļüĢśņōēż Õ÷ÅśģźłżÜå÷ åįģżųÖ īü"łžńčOńēg G7* ÷ Bóæ:čńšōšżś'ģžų į²ü łžõīŪģ1+G "ń¶%ė #ęJęÅōļūģ» ÄHŅäÜ]\¶ų3ų÷Ķė(ęLķ÷éöļ‚ŽĆ ńõīó÷2(īūéų3Ųšé& =Ģ2ģĒH&ŚłŅłņžQźų ęĀšžč)*é> œŌŪ"TÓ1ūŁGÕßĒ*Ė$BHžå'õŠĖԌäū#Ō/Wēõó×HēłŁń^„Įä ’ ĢJŪĀ ±į)śģ=7õØüćėśó ÜÕg "/%Qīąļ óķ3ā-ä+ ēõłÖµŁó ćīŚ€äų»½Žøõb</ķŚc?ü~ÆRķūš|Ɓ qjų hĖčų!ā{ōøöŪ€oĘś»čŲ=>% O"š X“Ҽ!×ZĒļ¼2€ŽžßŚŁ'ÕÓżė4$®õ>ō_ķį—Ź.ŻÓ%ķöpŽ×ų"&ĪāG pL#ę©üiõ7B_EåGå>ÕÜĘÕ9h2ĪŽś’µüÖ1ŲĆ@ģ;óśĖO łåæÅ8ēśęŲ×5ē%ćé6"š6ö°?łžOꀗĶł£GÕū°ĒČ¢äM'6ß"ÅßødÓõG%ģē]MŗĘä’4ķąõ-Żę± õįĢżżģņ! ”^ ŻÜcž6"$ł»l%€ļßOļ õ»,Ģāł’õé2q;#ģGŠjĆ*ś÷”½ŚŖłśĶŹL4ī öķ÷ćäžąµFł*"ćļ÷ū’7×"üłś߯Dż÷õņ¦šąóé žž łÓ Üä$āņėīõū@ųąÓ ’Ż  NķśļõŠ ķ8ńöųŁ!éŌ'ēÄŻ/ū į ĻōŽųżļū ÷éÖ8×ķčč­AčéŲłŪč#xłķCĄ,Żü¾ōŲ ūŲśūĻāūāłųšķķ¶³ōÕQų°įšA 5ņņ«ōŅi-éńęķM¼!ĖšŁė÷÷²ų/8Ūåūų4.¹ēŃāōs0:Ł'<-$5ÆŅ' ŻŖÜįRĢB³÷žļŚŚéŪ8ļī ė+Õ~śü,ŲĆ(éÕ[ŹVÉ VĮ’ĆĶūØ źå’ķÜӗ¼0śŽ `ėńįÜņ ė .ģ58Ä)ļ£Ś*hūŲ$Ź’6ź’ņs½ÓBž.Ųīü,ļī×L0)ÖE $Ė#րėæ E>ó¬ źōI«#Ž7Š€ļśį,õł×šķų÷E/å(ä@ÜŽ ü"#ŪŪŻšÖē$ kńÅĢŁæœÅüĖÖTģė½īńøō8VÆÜī.Īö ó÷ų̵w*ǧßå+­¦4ėšöĻł3@Ż?ģ'‚ś@ģåė/ņ ×ĻßģŁņāīśA g  õéēĘ@š³žģ8żėæĖ5蚀4ńśõśņE*6ųžąßźėńźū¼€ šüØģąė!F[ļŻõ W)¦"vĄ°NŚņķ+ģ(Öī (ōó śūĀ’’* «ņŅOżą’J'’ŅŃų4ķŃļė?)ųė“%ūžĆ)Śńš?Ā ąüÓÅOłee’ę3éZ ä&*Ó Żö ‘ żßā ¼ēŽń­5ģvżŪå’õ½ää×īÜöó!*ł)ĶFPCååĖ-§ķŲõķš.UŻE)ßH(“Õ9ā  ÷¾L©€ Ņ#óņŁ ,­i' ENįåŲūzŠRÖ .-­ģ)Ųü#?~ŠŌ=ɞ€)ä”k³²üB*¶ÉB"+4HĢ×ėõÅ€! įėŪē&8Ś‘;ńū½IĢ8!łĢżŁSCƒĘŹĆ:ĶŚśī&ý A¶3`ŪŪųā äN§?õīŚKõ§d2>÷ü"ŲżÉqA’üā?'ńŚ+Ź"#åŽóÕ÷ą]čĢżé÷ś# 3č?å„źJĀ"ʰjšŁ ÉCńÖā0>į5ńß'’:õūFß Õ āYś0<é%ŪžᤠšōŻŚļI$ =² óźĒż)ČKÓü· ! Ż5Ż5ćīĻ #6ģņÜīćqü~Ü D &éōī!õšŚŽń-"=ń,ōąķÜ=źčČOÜńć÷ ż·śśē,ĖśŻš’Ć#ŽéŹ&Ųj·õå !žęö9 0+<ŻļÓ[»yČ*ŃūéĮņöāē~U·Óäß`0ż Ó*ŽĀÖ×ūŻ š>nóÖ÷چ ²ćŚeæüÜĢ’ l ōĪ÷¬š’ĢŁč€ ēĮ.޲c% īņėĮłūū<ķ’źÄćž?ę īßö³4ųūüņė žīó ŗ ū.’ą4ī9ńłµōŠE(öM śāŗüԁ6żŲķŖČżśūP$÷Üģ.ü÷ļ¹źŹĪ€÷@-»U’ķś÷6Mū%!·ŽX"@Ž÷ēÅÆŃČžĶŃLōŅŪźõÉ»Ģó˜ž0×ø#’2āøęīėēāžĶĀ,ā(CÉļLÜņ3ś ųąŅ/č(žū2ć äÅ»ĆžÜß½ū7Ö-ūę2ņÅ"Ū(ŌÜ:Üų ’ĖöōŲłļļÉ(ÖńõŽŗä% ¹ē'šŪÖ ćŻåÉóéż#ŗē2Ę1µ"Ńä׿¦¢¤ėŚČŁ čÕ< öōųA†³.ļ ć +āšZ×āśh ÄŠī’ččł ÜõŒM&†ĖJļść;3’īÄĖ ŽŃĀļ.ŽŹÅüō'ųĀüžCėń; ’Ā< ļmśśē!^įŗćNīžėųw’ō“ *ß6Ö“ä ššłņ¶Æ’Kżś’ÜåÉżĮ€ šõ×Cģ’Ų6ī$ūP…éäĪ«“ź<’óĒÕÜčō«õ(.F ½™6ćó¼d¬źķł ė×Õ ŻŻK,īó<ž ūĆŁÖĖĀķž›ä"/#Ļšą$åÜ šųŲ ļ׿5ŒšŹĒ1¬āłčī+Ņ&ÜŲÉÄācŪūį ĘōéPėŠ\Ńō ļēņ "ęĮņOF“öłĖŠĀĻé7}€!"Żōęęź Į²Ę8źÖ¬ ė ö 6łŽ•żā72!ķ öR÷×"D‘ŗ¾ąd2»ēüÓżöŅéųżļUĪ›×ćżöż ų;ŲæĶZż’ž¼ ø7ņŚė3Ūų0ęP"åųę\6:™Ŗä ķCʤö‘épŻ}ģķ$0§'äÜō·ŻŪģÖóÜęŻh=ų~Ł"āō'¦:_$Äč-óū`ē/ŲĀ OüU€qG&ÓĢó^\7; eĪŹŌČģ^I“Ļßüöś ęĒĢZ/”"<×;6łā( b#£ž”öåVū)" óéZīuå ąµ>“EŚģ cĆ};#9IŠ€OÜ£b/»‘ O ÕDŚ "šōĶŹĆųŹ“Öōœćžēī=ņ®-%b€%#€ėś\ʋź|Y!JYųéĶĒlŹ.»"0 €īŲE÷8,ųėū üŁÆT2,ē Mų} ’ź¶$8Ö$ņįģÜéÜōś ó5$'Ā* źŚ;zńŖīķBåóūå Aśś:Å Ōų £,žāūś ė 'S&¼żłŹåōŃ ņĀŗIóŚķÕµ!ÕÅDåÓī מķ=ć¢ēćQū ųĮ žüÉžA-b÷  ååŃ éčųåJøĮåÜ}DččįŌėöw@ żē2Ķ$’óūöNŁ óö Ł~ٳõī’Žš€ęŻ łūł÷ā”ļīī ‹ōß;`Õåõżųś$÷QĄO’ŻŽ¤óąåļŖėćöćŌ3xAųū’č>õė€˜öłŽµ&ŗ°?Ś#é2Ś ¦ņŽČżŽõõƒ&ņŲēöõ5ąēł€ūæ2ĆńżŅE wÖÆŁ 'äÅ¼ÜŁņöō/ßĮļ ĒYAįó€Ų“€%ļņ)ö‚78ĒĪųčęõł€ĒT86°śā$h”·ņ® “ö’ł’ā’ś) ’ńĆ=äžź-:ļŌĄķäķķńį4"öĪ8-ļĮלł­%ōŌĢūõćöÜņ ųcæ·E@, ßĢŚ^)ŽZ *&Ęēų ŻŲóÉųńłń ēÅĢŃ Y1Õ@¤ī€ĪHņ¾(Üų€!÷ģŁüćšĪūß1ā=/XO­Ō ½4š. ²:'®ĄłŃ9W!¹"iŻ€ °å›#Ķģ'æ•øŒäļ@ńģ ŲŠN\ĮŅ€æ×|ČŽ€Š#ķ$ŹøŻN »ģ(ć.s(ųæx  #ą ®ļ€Ó€&VŒÓŪö&‡ļ+܁ö¢ĖIźĒüłZéWń ś6®6Īō‰ ų ąāø .ģų ēŃēÖńó߀ü®ĒöŻšØń5šõē+žć4ń˜€åśšöRŠÓœņķņ šłžē{H:č÷SėńŖõ®§"šŃLüDš ×Öļ4Żę3ė*'żšį6łL,Ć’÷śņ€łģąõʾ:ōī!Ņ ’š÷@ŹÓ£ŹŪĢÅģüéT#õĮ>yę÷Ž€’Qā|ßmgū°ĖŪ×Ęź.†€Gŗå9Ʊ*æ’Ó8ßģ€NņĻų€"5ŹGāĘŅj~/ śātĖÕļäŪwHįöŲ-~ćŸ8B“*ξą-Ö×~—Œ~Āøæ°%ö9ū€Ė$"0ZÉ"ńjó€ź%ĄōtšÕćį·Äü ń÷X¹,Ņō…×8ŅfųŖ—:Ę]Üį°Ŗ ČEū3“ ĪŒMd3īŠĪż“oön±3žō2ŁĆ1čł+äŲ $ ä\.ąśäü7’ś Į±ūģõķåź óž3 +Ē÷īż÷aÖśłäųPą.¾ģŅń.ūīśĪżcÜō(޽ źA,ėüéø(3$żńš Čž9ó é½żī)šżÄó.ŅĒõŌÕš<ÕUž°5 ÷ģņįóžä>&"£ūčīź÷Õōō.Ō)ŅóŲ łńYö̽žśŚ2ūčūė‚;«ƒĻ,Ó§žIĆHŃłś•ļ€5õ0#4æEį¹¾ē³ €µ ģüģĘć·I43żÓļä‘įÉ @ŚĘ…5 ³łÕł$¼=ā#į gų&Äąqļ-žā’ä¬$™šį“šė äÖ/ĀÆüčŲš84Į͹’×,Ģ+€åūį Äł¹ųg!ńņ )5T2ōwē%Ļ  ¹UšĘÉņŚ ĶÄ)åÅēķėĖįńŌ’Ż÷Šņń»äōń÷ōÜ&āĖõūóÉżśńü!÷ūźļšD ėū7½å’å óóŠæī+OöĒō!ś ’Ō÷ļ’šģńē"żņśī ō÷ E€ ņżčõź 9Ü ĀNā$ņčó/5āś ö’ ’äŽöü·ä! ÷ū÷ļŻ/5P,$Ü žįšęųżöšļ<žīśööå0ĢįäŁ; ū[4ĘŽÜ+ŌM~9w_ģĆįóĪÉ éāüļėóßóęō,ł÷éēņv ‚łņ$ IžūŠĪĘY!Ś üó"ļ+)2 @ Xęf_Hļõśˆų>ų0śĪ’Č;žžūlJĢļ€ဠ(øč49ÄŃśłžö:ņ-’’0*öŁ8Ćķėźū©äfĖ(ō1›ėöÖuīž Yn$įėÖü2źūŻ:> ń²ī;åū÷ĶÕ8ę~ż8ļ'ķū(ŠŪčūķčė)Ó ’ߣžš0ü כķ͇#ć#L¶=éķ’ 2lÓüę÷  õŽįūįźļĀņä(ōīŖ¶é ßåĻāęķAüŗŠų ųZ“÷śŃķ6ś $ ļ €Ō¬ ó&łŚ ;į)&š)€ü½āļņķ;Ųźųł÷9ÉĶ鎒=Śł$ęÖųžöōߣ 4üńŸīõS襓.룀żņ÷źČ>ę:<Ął’ß÷(ßżš$ē Å?äł;åź÷Ü(Ņžī€żŁ)wÖüģ9@łā⻀ļīšųBM#Ą§Ę/ę¹1~¶ŽŚé5µĪ'’üNJŪńļÕå ł·+ÅÓŚū„Ų.ō¦āÓæ¦ łłžFļķóœĖ÷ ""üžÜä%®"ęŃż ć¼[ץYŽļKĆ öāŅHå@üꋯ!|(ö¾Z 'Z FĆ@#ęŠ9Ķbž üÜó1’åé0ݹ Ź0 ā3m»£ź„11ņ7R å(ß ąŠŹńPčšĒõŻœ˜õ%=čę°%żōŁÜūĄÄŖ²łāö}Ć1õąõOąIŽ+³ŪĒūöķ##× źŻ ÕūBķ2 =Ń ų-ęÉ:ͬ$ėŲŽÉ šęłėŠÅJć å!ŲŠń śįūģŽŽ¾Ū&Ż(õø: GNżŲń÷ķ’Ҿš%į¦ņīŪ/Ö<ō<ūŚĪüįę  ģźōŽūįų(ēpŁćŪė'+ä,žń ŌBŪĶŹė׌’ õÓåųųōŚŠ4éś čżŠ# ōĶą#ī( /ęģŪę9ņ ōööüėJżžĀ82I4’öĪŽśłD ļę žńżČßŁĪżō šļē0‚ƶƹ2ä¶’F4ūž+ÕĖ 7æ!8ėžŹåņėĖņśĻŁōÜ¾ßłĒņF/œAóŌČł"€Øō ŲĆŲ ¾ž$E õ’ü30ģ@^üžńėYźó÷ŅEäź/Ś Āž€üöĘ_$łļö\ =Öī+»÷ķ~ąyÖī!")ģ÷ŪŁÕŹō!čżŖ• ß Éö æ" PÜļū ū÷žż D•ŅÉŌžÜAŗGĄ6éį3üé éüˆ((Žö 82XĆŅÅąÅŒųK-Q܂쒀ź6ģ+ µ“§ŚW%üęĘūėŽ”É Ģż0MC å‰é<(šķ;¶čżĪ ,Æ­'æõ\õ5 _cžĒųé$żø ž\ ųõ¾ł:Ķ⇠ß)"Ą¾ęŹ įņ^耶łČł ķ˜ł Čīš=$ī"Õ÷ķŁ€?čįźĪčū©ōõKļŽśÜöųī’čH üfūčł#ßĆ)ūū źéśŲųā”Ž'čÉžåžÖłć%Ć0šŪI,Ī;įųę ¤Éģ&ķ¤ ā’ÉĆOąĒüö§ ō dŲD<’åį éŽõUÓŚNčH+ą3ā $°/2ōŅńI¾c’ī÷#³Ąāųīż Āūį īų!Ķ'ßA:8,Ā  O遀߮Q£Ł× &|»ūö4+ƒś}ś“䛎Nø•ĢLų(“cŹ|蹁×[ö;"Ń`n[€!ąšļXę/f„„€ƒŁē€ĆeóP2&ßœźŗ½-Ō€å7›€ēń?„€­Ÿ€{~]1Q€±zsņjʲZ½‚5aś„Ļ6%włÅī„āēē)µz€AōöčΟ€żŻ ~ŠĢCó/€%ßÜ/ėłŌ!ā&/ż#ą ęīéžÜīćŗž żéčóĪüūĢčŲ ĢŽAęķŌī$żœķ6ģķł ń$ÆńļRūÕ šp++$żģ.M‰ļóß*÷³źĢ:Ž 2 ''õéŽćņÕŠÕż5€’ļ+ßÜŻ,üėŅ)Õ!„’BüģŲš €ķĻOå Õ€ż:Īóž1µ’żō ńł)YąŻżūūXĮĻź*åĆ!Ąėģ÷ äč ó4ńöóŁóč÷ó©ķ÷ķ ģńśš;ŁņėŁ žüķ¬Ž żõś* ī$÷3õAČųłAłtļ?’Ż,õ¼&ś!ö.’īūńÖ® Ö!éÄėĮĘļįēÓ #ēżń8~·~Üõ ½åėņńłõźļśÆšµ÷ńš ń ”! ÷ōČņÕ’éžų6Ž &šäų„Ľ€!ö/õ2ŹžāŅų ÜÉŽÅńūž<(ßļšł]Ą›%/.Œść\‰ś&Ļ į×ō×"’0üą„©ß÷Ǽéņķ«¼ō &ūĄ ÷réćł Ćž1Ł1įšÓIJ!ōÉļņżŻįč3 ,éĖ*å»$īļ4īīÖŅŪäü÷Qž7µ-ä’ōĶņųó2O€×ļąÅž ÷ ß."×’śŗąėĻ (ūßł¹ķÜŠüJ ēé%īÄ3Dß !¾Ķā‚ęųć¦įūņŲ,<†ąĢų/§gøŪJśńĪ1ėĶżšĶŻė>?ÖĢ­-rĄ"1čäōż·ż9į+$› "+ŽäČŅčż®!ĢüŲĻ0čåćÕäļ /Ɠöó2<ėż¹Óōõó=(“óŪ?ūō8‹ś žE˜_JķŚAŪ ŽäšGåŚÓ× (“ķ å4ļóŁK. ł€.ģ¦ ×ė AĮšųā ßõĢ ĪąĘ+žé2"č(fæJó3Všģ Ī5÷ )0 ķ.ž RąČÅ#§ś&*ŅJæcņMü.+ć€ōšźś’?żŁC )ßō)Ś*7ĪŹ7éģVÜDģ%ņ&ųĪŚą )ņÕųÉóń1,’A ćŽŖįøćčMōØŁL+ ųöżŻ5 Ļ >įßē’Hņ’Óņ#K3õ !ū/Ü$Žš$ļęĘžßØéÄ ģ/čīś›ī%óö&ÅŲ *ūā\Ąśīä2)ł²ģśå"Fż3÷.ü°šąĒćĘ ÷ń#ćɒĢĒń&öć’įĖ;/L-üßųå×:ö-¶ üÖśĢ&€)’€j°#ä’ ļūļźŪEś æ|žž ĻšęVĻó… ė·Ę(śų"$Zāą Õ\āģģó;éä^ÖĆ’æč³÷ō 8č2å‚ŪčÖj€ÜÜab£A ™*€#+ĀßÄ)5 Ö*? }Üšćäī~B+ćŠūŚlė×Éā~€n:+óÕ9ŌöŪ€ėgšŠśF|ė ÷0¶5³(ū"€Åģ¶›»ŹŻ }#4ų€€šāšÜŻ<ņ€õ&xŻ$b*"ģń¾ēń¦§ńo ļcĶ ± ²‘ż=žÖ”®ÓŚsō 쀂 1õÕōÅ){ė'š'* 'ō5%b‘ŅéĮå×ß÷ųōF$ !ż»¹ĶĘĀ+6õõüŽ  'ĮYé1 ūžė=ž%āź¹< äĖÕł.€iö,˜*Öāõü“Pīą,$E5+qņ‚ėļŁ£ł½Gį“0÷łÜÕ+!ń3ļćĖšŁ 7ęüüČ® 3žÓŃōA'ö2Y-ėīķßųå ó×÷ėą·Ļ’ŹšWēõ=ņ#ÓĒOłįõōūēōŻIīź*õģõŁõž D,T€’ī0Æä(Öź ±Ąčm'»ļŌéźöū÷éń šŲųņ-ńóó $œž«ä=ū@Ī•ēś 1ćųÖųŪ8š ėųAļP#ź ÷äß ėą×ģłłąŲį"ńÆńūśšŻ÷×ųż¹<Ņķż°/ż÷5ūģć#X÷ōI€ˆĪėü€*&õ:ććå¾Öˆ,vģÖŠ 0"AV ł÷ä@kEéKȤńł#ź¬+żńB$pą éN@jüó0éś[ŹŻę3ŽÕč‚é»Fš"ńw€µk® ÜīiAć ÅõāŚöCĒV9&ᣀõ<Āī2/f5¦j&ń6ō;Ó5Ą¾:ąĀ(‘ŠČéæ;į“" <żŽŪģŌģØöŚžŁņõÄĀŒŹ•ŲŪžÖ‹A”5¹Bā<ŚeÜńäāś½2 ūĢU"åčÉ $ČČF ­ßģüŻ-ąšę€Ļ ėČž·č ĀüēŪzńùN–åį(øś*ŽJü ÖÉĪę -Ėåģ#ćśšĖ÷ļžč(NH"ōĖÓŠō 0M9ŅÆ%’Š$įļš «— ł#VŚü&ĆÆ}€&ųņ÷ €2CÄž>å­!ų0>×2^dę¹!ö¹č€ÆõŅ€ „ūļ@} ł „2ö[5Ŗ@ŁßGÕŅēBļĒóż+%éü°8śuėóųą!–!ŗ'Q*Ł/ŃĪÄż RPśŽēŃŹ ć ķ7ßų’ń%n0«-łóõčōć2ó% *čū›āßĢóčę Ü&ü5&ļ/+žź÷õė Ģłź8µ×žł9ė8 €ńīóāѽ÷ńß'5ģ$Ēä®ūłśńöéķ5:šļżū’"  öå÷ÖõģļÕļ’äņźč=ßņŪų>åö $ĮčōčļĢŌŌéł»üž&Ž3#įšŃņöä Ōģ|ńččÅūŠ ćõö-õ’ļŲč@l) Ü÷ ³ō$܏ŲQGņųŽ,ĻÄŅ%õą:Ü%Ž^ŗŹ<õķ®ģ°įŃ7mŃ-”F·åU= H½żü1Ķ!Š7üžŻł")ńų¹1ŅĄ2Ó}±(4śŲ2,ä ō1čćūūē: «&)ÕųĆ“ÄŲ’ø70EŚųŽäūįEšū!ėó(÷Ķ:ÖÉ#4äū:é4’Ī5épņļövąź ’÷øś<ūł±½GbŃĘč̀ʀ Ūö.ü ž@žhŁ’ż #ÅńʀĻŹR­*śŽń ė/ń˜&Kó©æ;˜’}€BóóāäĒą€Ō–ł(%ŲF#ĢĮxÅśö Ö ßןė#āØ·ŽŻÅž›äŽéļÅēŚRŠā ėį*H÷µė9­ H‚ķ%ŗƓéņüś,’ī[čU,-zžčöÄĘģg²ć%š jįŗć<ųõå8ļ<“į” 1$ö’õē@ą€A9? =ĻJōāX’÷ÜĪņŁ–ņgüŪŠžż€~Riœ€ńē~Ø„Vx ć-åżŚšÕ=_į'Ž»Bņļżēė£ŻÉĻ¢ŗźŪ!)Ü/\^,1üߎ8Ķź®"($fž›ŁĒĶĆ\ś®žWÅ~ģbļųÜ,žö Ķ5ĢÄć’ł4²äųG€š’ĄöX&ģĢč­ōē źĶµ[ótšūóöŃ÷[ ń1Łę-$!)ė!/ŚČĪōńŲ7ü įčĖźĀėēŽł ņšäśCųżųņ€œŽńėĖ“ćįÖņņtõĢ “8ēśé®1IĢčF­ŗ Īż0ńŚ#žüž¹ÕķÉō0™ė³b;°ļ’ģQćöß 5$@ļlŹäžåŃ-'!7ųӜĒķ²Ö“qØ7š’Õ ¦ųńęłś4(ļōK’ł7Ē9ķņ. 4±9ńń·Ļż/ę ŠĀšÕŽ×Ū×ļļ!ėä#ó) ąóŽōłł öŲä3Ž!ģõż( ė$1 Š×“¤2Ę’%øųåąėööÓ°’)šó­ ā8ÜįĶs;źņš<šĀ4$śź"ż=Ö(ēŃ~õFŹåāÜķ×ŲŚļ%öéõ’ń!¢ü3źõ'ōĀ éš÷ Ō+äŅūüõķēšIĄłēųŃćōĢżtģą;Ć5 ē.[ šŁóń,ŚņŗūėėÖņ«ėõ¤ķ :æÕčč66ß#Ųöņõ ē|õG óŁāńē īłę4+ åāźņį×üāŪ?īüżķńņż ź źīśÅ(Aųåüāf!Ł^č9ųŪćšėŪå7ž,ś) :ņŅóNõ’ęō  £!šÖ8&#čŲõ!åżóļīsųōåéJšōī~į»9! āģ8 Aę ß»Aüų®Ųż’ōNŻ!Žūģ’ćśĖö×(łģ%ū4ą! 2‰ē2ķ½ .čöĒ÷ūĀń÷ōģ÷É 1ெ ĢyńćŽĪ īōÜźžī ļėņĪ'4$ŚńŪäźŪī4īüę÷Hżžżįņ²šų¤ļŲėūoÕĪóśŠéfTķįł ś“ėźūęęÜĻż5" ļ)śÓ’įäńęžÓ¬Ołņ+­ŃäĀćšģRśš#ś’6äŃįą€ 0ū•Ūūư ÜČźÕ,a“Šą€ņĖĖ@æ¶šõ Ź*Ģ%@/łģūé+BßÕ€ŃŹčēŌŚQŚ ŠHęĘĒģ&”+8€ŅhZąõ¼ŲøF1ė5 äņJ>/Ī€0IŽJ šäĄų ’Įō#t ūU@AŲēģŚžŻ¶'ä¶Ą(čŗ* ×>äō5ņś ā##p¾Ń€Ū !Ļ5īźį*üÜ÷ķņćĻBäźæł+¬€óŹ?#Ūęéū  Ö(*Fö÷Cė·'ģ6Śłę“łqęÕūź49ī/~(!$ %+5-ń Õč Ŏēāfŗśū ŁüžńÖ\ ÷ĶŁO0 āž,+S!ž÷üóß/śāę1ßü"ŃīÅšŁĶG@.ĻDėł½³ ." 'żīĄC(ōś¹Õ: ¶š'A %ĶóśÜś ~ ś’ŅÉöéĪ#ģś¾ģłõ Žņlõ !)īž(é(\÷ų¾Ć-ź Ā(=»ü⯒)Åėõ-4éųÕüčū¾äŚżčę9Ó×ņÖŽĀ˜'ńź!鬎üŚųóžåŃ$ üĄēÅ:÷Õ1ą¾.Į.ś,ÄŌżž` ėÆE!" åOźüåļß.õÜ%ģüčńŪģś+ŃśŠÕŌöłżąłĶžóś ēé!éā¼Čō'Żiš¾óßŪŹ ½’=ū ģ é EŪ>žų% *į¾šDįłÓ+€īĻĘįŌ,– XédÕ )ź=ē+õõėŲ 2äō Hšüž  żöūļīüŁü>ßįOšžóõšä+Ś}Ķ  ö  ś3ń÷żĶõ4ģ  §0ųõż /öÜęłü ģš×įżė&L Ś# įļī÷/’ł1-żžž ģ ÷Óöõ’Ž(ńē Ńäłé% ÷ęūņ&%üÕ3źś&ņ8ÓčćńŗĆÅļūT, ččų-ż?'×ö­öžśń +$įš”Ųūž€Š Óåóļ’ļĖc(÷©6žśėģų.!ń óäśä. Č,ł’Ćžāń ęńńüūÜäłõ Śł€ļāEš Śłö ņļö Kž  ńī#5å*čŠĖģłöę£ģ čĢę&ä*’õ2»ōł šč©č óó ņłĆļ<€łäū!ö) Ļłū šąä«~ūå ūSĮł[5 Ó7 8õłļžųōś’ó1łē× ģäī++ńŚŹ2Ö)ųžUPŽ.@żßżEłó%vÕģżł#Š’ Ę߯l§ łš4꓁ś ūEš‰G>ėåēbĘł ŽęP,Ł'Üō,ōnĪß ŠŃŚ Pėó=ėų 'ś «oŹżē’Ó5ę+ī4Ī #ĖŪ°ńä9ł$\īFäņė2*&½ś/č‹6Ųįõćś ,öżsÜI$õē Į1 śźŌņ1šżėę2±ćłłė-łöŃÖó’#ģ2ó!ö)ö8é*€ åu CŲ÷Óćįē|Į*ēćŚÅņ å  +÷;ĻČņ*%ż%ģć&%’ė Į%įī÷ "÷±ń’ķóßłźN7żńÖūņ6 ī±(ńĆõŪķąžłī ń’ā ųęKāźļž0ā0čøł©Ņüäéżóń °Ä¶EOóś €FźŃ”Ś5>)Łé€5³×Ļ€’Śō"ÖÉÖ ļöōį4ėó łĶ R7YhÄ0?Śyō  Ź3,;ä  ,ķc 7 AūMė#€ žææ1T/åŚ\×å,ÕšŽ›Ļé÷×Ųą!ūõ$DO‚Ķ8ēõóŲeHš(¶ģ%Źóü6å8;×Rė%' £ü< łē€Ä Ų®äÅHų ;ś ōżėßńĄÓæ“ų’ż÷OŁėßEŪ÷čé8"L Ą%¬÷ Ūłš'ωśÉć%ņ…2"_'÷āõ łÜā%ńü"äx6ūŽŹųżąÄ ś *į-õģŅõä (ī>€8 ’ŃŚ"¹&Ģģ  ¶"Üü!ōĒę -÷ųĖŃĘźĻīźģė€ ė6āéōŅõ#ÖÉ š˜õéį’śö0.?čŁĒāś1ņ.ėźŅęķēļÄ÷ļėėåż÷ī ä ūź<ā5ųU.,­ą .žģ$¾ +5Źų äķļŽ¼ ’źćć Ļ(ŠņūŲ#æ'ŚÅóÅöģĢķāCĆžjAŠŽś’"ŚŃ ß-ż*īģēģ ņśŌółüčųż žėåū¼žĮåŽāŚŲ"ńļ-żBžģń3š!ēüĪųį į,’  KÆz‘:Ļ賀õÜ ęžŽēüÉŚÕ)Oā*2ųēÉżµß&żČ¶āÕå²ęä4ļ2-ņāÆų üōń'’óķ¹/ģÜŚłA¶ŅīūśRžDć%ŽD˜ ōėČż÷C?łÄcžāŽ×ėš)ź>łCw24Įę-é ēł%ė€š G $ŹįõõŠćśĻæOXFé ÷żöįżŅ'0āć’Ķ+" ĖŲéųČÓ=ė÷÷śĢÓ·€åŽ!bėšż3š6ŅīķķĆļžś€ĖŠ5ĄįćĀ!ėCÖU?ąū“ā-Čńh˜<Ķū ^ĒäćÉ)ōÓėZ+Ę=ź0ĖƵé³Ō(nņź öHńū^üķšŽųśąčĮ’Ź ¢"ēśB śŪū2ī!č9-Uķæå ķū*/@ƒģŹļ°×üęGŖö;ö×)J8Ū)ŪŲė ČG?/õŁ(Ż&-#Ģ'š&Æö.?Öģ€&ó×Ā€¾į:6.č ¾=ČŻśķ$Żōķ‚ ĢĪZÓĶŚāÓó§Ęė÷ø¢D#āš7õėā–ĻÄāXQ?Ź–,Ž@µŗōš;bģžŪzĢF|čć8ĖŲüåĢØøÆāó‘G$ū*åŻY*![#ņ ź#X€ė»‡Ńčš;ūĢŚź,ś ~’Õż0ČōŽ ·e6ŌÖęõļņ$żĖõ"ģ„ę A1ŗŚŠī€ -6€Ņ&üRōżJ¾"ģäóėģå‚ö迀Äļęüö&Ü€4)ūļłĻ#&†D*)ķłé „?ū¹Ķń1;łÉ¬ ݵ$BPųō Õ'Õ ŽĪšķÄī €ĀÜ*’Œ7ėūžąŽ½Īū*Ņ÷āī4$'$€Ó.źĄ¹ŹÓžÜå ū Hģņ~ĀõÓ ŲĖ_ ūĶĮų¾ų#č'ÓÉ~ó¶Ä Ö$+åįĄ éʙłŌ+śģ,¹%SŁŻšš1õ€,ą)ŚŅźģźś ÜżČ ü‰„Č bÖ?ļ'ćżó€ŁÄž5]IŚĢ:łņŗņ:ŁŁĄß2$ź$Ī1Mćå1Õ$Ü«’Ļ™ü æ/ŚŪ åØÓ÷ķ0Qśčé÷ī5õD€łķķ4»Čļ< -żįžļ5ĶóŽÕ×3 ēķ/Ž īó4 +Ļ6č(ŁļĒŲÓ§’ė$ÄšÉ;¦ķķ¼ ņŖąĘ—ü&ü&āßĒī%ƿ׏ßÖž+8øųÜ(źśõžˆėīė/-ü.ņė *ÕŻŅöķZūśż’ GĆėÖČõn7 .åą 1Ų¤ņĢčcą,“čé;׀ŠĮķūšü ÉōłÄ Įž 'Ģ 4āļņ-ķ"装é:88¾’Ō&įš’ó/ź×żCBé8 ,·ęG­TÖ÷ß "ßóÄ śĶī= 2Ń'ŚŃD(śNš&Ė$öšĒ śņ’üķ0įłž ģ@ÜČšüł÷,ūŃ#ź(óēüļžŻū#gĪė ŲD×ŃžßłNųłÜµī ×óī-€!ī6Łķčż$õå Š&ėįž!€Ē 0Óš šŠŅ•ćoōéžėÖ/źńėßÕ,Ń+ łņÜńāŠßēčõ÷ņ ń ÉÕ†¹žČ²äĻļż źĻ÷×" īéäöīøńźŁ’å3žŽ>Ū ’å%Āš¼,ó ė.-ųßżļżŠ DéųõąÅūļ"!Æéœ/€ć Ł'€_)ś+ūž»+÷å‡ Ō­*üęį½Ä¹ņńüŲŲōŻ’åćU.ķŗū’’Ō€ü#§īŹŗ÷#ųą ü*=šü9ō4, õļ5žę &ķ gāč!ō|Ō%éńō³ā Ģęč)- ĻįćŽ¾ *÷Ń*7ÖėŪéąĖēåą F>äņ!ļ&ū)ź!g× ¼ÖĀĒōč ÷Ų ?ė÷p殺ąBĪSõ®čņč%ļ(ÓżŌ#’Öź!žĶēŖFĄļīłĪ’ćųÕš Ę’×ń÷€Ł' ķé>1ļšQķć ÉÄÉ,$0Ū×ĻŚšŲD=>öŌ&÷ĻżŲ5**’’-āķC/óšč öīŻÜźįū?ńõž3ŖŹYōō9Öčõūóąõ 'RśųķŅ6 įD,čīåF Żåū Ģšģ"+ īņ$’żŁó ńKīźč&Xķāw4š,C$) ōö): & ačĮåņķ× ćųūö41 ČZ & 'ņ:/Żņ.ūźż '$ü ’ī3šń’Ś(2ņŃÕŌņāQų Ł&åįųēļžßš#'Į,ņŻęŠCśD"Ė€Å#-Č"×ŅāŻźżüü ÅDõĻģķ#õēņłūļõē<ą![ń’żžĘļóJķšŠ<ōŪņ¬ÓōEŽö1ō*.ĆāśŪļż!0Vą ßšéĆą.J’ńüężłėļõ 5@?łūčā)š7č #=#Ļłö*]øŌ#ĘīüōŠž/"óĶM©ģų÷Ź(¼’-”(ŌżÖ®ś¬'żŠ©É¶)ģ€ņų üō€åżŅżĘĖćĀüłąH’ j$õŌé§öćēćŽ²ļų·ó4/õ;³šūæ* «+$ųķķį7$3ś9 ģ ķŚńķńńóÜīķ9 ž éĻŚŲņź%žÜé9ŁĆU÷¾ČūŃģĀń>ę܀ó٤ó(ē.¼$ń€A£Ź"Ę+'Ķā§€õ .޼Ŗ0īø%Ļę#£€€Sįśø$¼)×væšMEū+ģ±ß>@4ß3]­ 1õēńą zåØž€·ī»ģėķGÄN€łÜ'ပŌÓü#Örņ+ź÷āž€ņ_ć€ķīī öō/õFĢŁ+āGõŲŠČ Ģ€Ś4ī€-ć 8³oNĖź,ųų!"ßó¾ūķ®ģ˜ į“å¶ėŗó1Æ%*ÖĮ īüõŠöÖRčĶż ņ J€’.ńJ ĮåĀŻ£9īž ć2ó ŅŚõē֑ŪČź=ķĶæģćń,»#ķéB7üÕŚ!ął7ēżż7c#ńõŠĖBō(Šé+.üżßū€5öŪčåÄĀÕ-Õ=ĖMĶłĄ%ņ į’’6ēĀųŅķėńćļŻJßźęėūĪ:žÖż, ĪÕߊūŗ$õ/ĻõĘŽöĪļśŚąŅ’Öļw^ęåOÉVļ %E+õĶøūóó#-ēŗqÖźķÓoäė@źčäģįģŌšÖŹģßųīæ ŃĘćß Õ(ļł'śī]Ä)åŁųń*/ŚÉ8ü ó3śń Žł£ü +ńēśīŚŹ17 üÜüX˜ü-ģ<ķōā"ü ö"Š0ūʦ&Ė ķ­&Ļ܀ø<ų ņ6ūżāW·ų$Įł÷õżÉčōųÄŌīŻU³ n€[¼2€œ€‹æńõa NįōåČ2łæūĄć īĢfü’Ż÷üłē g ąĖ\}¢(ė÷ņ{:!įŹ!V:z.2р Ģ&2¼Ķäå% ¢Žśē·Ą3ū`ʂŽę`ņĆōbŁ)óčpīļēśĒ~ėŽč1ō;‚~×2X8- $ ½ü›Ņ/Ņ÷į+÷ŚģĆ *śÉ +ńš¾)½ M"ą)ļʙ€Ż Ü;Óź÷ńųµ1%ųōģöžHĒ3ČŚč­Šóģ (Ōå!š÷×Ī% Äō’ł 7×BĶżŻÉĢž !ÆJ,ž÷;;"éöß÷&ėą-å é>%Ūīžņn!ÜĻü$Óńąźźe’ŠóüŲI83ĢÜūZ/5ćVā’×ū1ņ Ęį 9ś÷-’Éłē&  ńßęńģõńīŠāķłĪó?Üõm$öĮķŗź Õäų’ģå ä5ŁļōÕ żłēĘDž¤ėčõ¹ņöļūŠēłīė#Õ é<š ÷ņģųėūŻŹü²žņüīśż"ńÖż,Ö*2 Żåßä ö ' ż’üßńāē źŗ\ č$ö(&čĢH Fś Śõ(ŗÓöé"Ęā Ōųō>čsŻ€RōiĢ8čōÓžĻ„ėĶ P÷ÕĢ÷īóęļ#ī&-ÓļHłļłīļeģéÖžļ?Pģɀ3&īżėS­ÕŻqīB$0ā.ł.śįŚŪ^ īņäć ó$ äāē=öŌųOųĄZ å ’ųėņ ų#,1ŻéńGņ¢ēŅōh,Ü'öż/.1īż(S"’/ī’EßöŁ'ņ .Óįćī­õ!kØ·Bfm0ŃŠŌ 6ßŪ·œö'ōūÖø „ )÷Aō÷ķRūųź/WįĻŌģҧāŅģ&鎿)õ Õ/öI"ķĘ÷B/?Ķą ģDń'0žņÉ żš3ūĢó5 žē}ń ü+Õź' :( §Żµ()éųöé.E×ü:čdś(ĄŪKńĪe ŽÖŌ āüćńõį š§ģīŚ ńŠ0ńB ף éāąĖóēüęŚ ģ ś"ŌłŪŽ üžēšÜē’ń':"Āך īé ÕĒēń"ģųõ ą ž&ŠööóõśŻ õ ÜüūĪ÷ óūōīŚ 2źļ+Ö’!ųōńÓšłŅūåq į’ó Źö!šüŅ ’žėńŅšõļķųā „śŌ= BϹõŚ€ ąŻā¬ūKß"kĘżÜöŽčų€&ę&T4Ŗ%Óā&įå? AÉóE#ŒŲ(ÅäMžD0łžņ¶ŲĘ×7æĢńąQŲĶČł÷¼÷§zĆ,Gö”1ąKźõóżŹč#čĒ­ŪėŽ.śč“ŽŠź”ŻS$ üć8Üļ€łÄ¤éńłīDžė’źQ6ņrŖŃןŽh6Ė$äĖļõE āĖéłöīė(Ÿņč ÕäKćģC1‚’Ž ļķÓ 0aÕ(ž#ŌłFo +ÓÓ!žęÖā>ę ŹęŁ 4ś÷Ī$Ńü¹öĖŅ÷öėśü€Ļ$ńl•'›ģŲ00ż#ó Dėīž) ŗ+ė ó:8É„-jŽžIųńå]÷ļ #ćį iR ōü8>¶2}ĀŻŽüÕ žL· }óō?šÓĶųćā?÷ ÉcōÖŗūåų ęéŖ+ßąóīߣÜųäŽ  ęŻ !ūäŁC< ÷Ōęę4šł* ōōš:ĘČ(ųņėJŃŻģųžÖē öä÷Ų o×ńžÜņļō‘ćå' łé9ų0Õ»ļ ā" 9z 0Üšņ%ŃļęĻķšgåł ųč Ó÷ń0ćü=ē“Ķ ®!©įö:+ųń¦ó(-Ēķłąūæ} ōųūīęąĢGžą3ē.'Ū’&T€ØA° a#ĢĖ®€ņų% ÷ņ;Ō>lŲ÷ ļ± ļ¬š/Ņį髳+ūŁĘžDčļ ōµ ZŖ-üžŻ+ń™2ōĮPDį€?č’“„l¤āŃüÖŹŚÄ!½ļ7ć<äŌčĆēĄä/Å Ų,„#ńū#ÉõŽōł½JżļŃĘ “€ģ®5€ģšĪ ®ģļĄÜé ēé å<Uā)ČŃ>öąūP’#Ö. W8 ¾ß) æłžń>ėŪņčńłśżųÖ?!ü õĀäņÜŽÉžżģŁśķ9ņ"-żÖłö 8”ģžĶ ōęļ'곣äųóŸō$ž×#óšÆķ'÷ņ łģHßāŁ åŹõęé~ļż ń"ūōĖīŻć ÉėéśĒ’éé@>!" ņšŁēūüōü’öīķ ©Ł ūń÷źü&źöōł ŽõćĻ &óū’ ÖęčÓĮłęō öļ5H=#æüŲ“¼łŽGĮīÓįó;÷›Õō;»õ,9ßśżņ ׯĪ81ģéņģó* ē½+ń’ļŪØPź ńžė õŠ Ö Ņų ė õšźņōõ÷"ńä3łš½æļąAåįūń¢·¼ėįęć)Ųč 6Ś)ū»Č-¼ĶüłČ+÷5Ļ`é Ō& Šė0ź 'åŻÜüä"ŸĄ÷2ö1Ēņõ€÷,ü’ōŪåś5€SÓąžBżŁ4ČīķMö¹0€įķģ ōšÖś6Ł÷2ū ź%ėłÕņļIč@źŁ#ų §Śķ 4Įł*õśCÜĪČ Üŗš.ó7šT«õń óć÷éūĖ'1ė ōō÷ūčźō%ę óJö÷ōėĆņÉŹ(Aų’ū€#ž óžž.śūł3ęÅļž÷(Žż$Ē÷ųįŁöRš’ėēļEĪÕ ĮŲ’ ÉŽŻ÷ ÷óńܲ ’ żķķ×čÕėėź*Łļģ%ÖŪ’&óģ')ūłüŃ郦čąÉöŽóų×)@×VĶ żć?ąź‹ļ Ó*žļķ'ķōūŻCźüÜŅ2būż÷Ńåē Ż CśöĄļĶīY»ŽŽķ×Ō>źźō)®×!åūX€ĻÉčĀļłāŃ BĶ’ś¾Ü$QÖ1µĆ É$ ōÖź0ŠšćļŚ°üĢF<:’öĒ5[¼ĘŌĄdņ*žōļķõåėś3Õ$’58ļ­ņ3ļīņҧ ŪäÕī×ؐŃ łė āčR€ēŻ€żĪĀņųŻ'Ź Ē3Šh' ĀīąŠę H$¹’óņĶņ2ĢņźŪŅ(%%°!ž ÷ģźóė .ńųLōö÷ö ėųś’łėĖ!ž0õŌü3üžŪéūæżż±(ŪłŻKéö7 öų/ņ÷ł¬ ²š &ŠRć ’õįšśöå Ńö0įļ ’ōń1§ŁŃåńŪ%óź Ń čß+Ńņü ÷Už)ÜĆ/ņėüęžŲę’,žźįż ģŗóÓŽBę1.ēź Ų¢?)ņ€š +Š Ž÷čū ł*Ūūā ÖQ,éŌ:ßĮģżY  ’ ƐķÆ,įž7õļ-ąōŗüö’Żżé: ā'¤ģüģŽūóžńžV÷ūÉšłų ń>Ó Æóś@üŽėź į>Fō(ĪāėŅ_ž šąēįķ$ßźõ ›¢Kös:ü)Ģōņ ī)ļśd;Å8ūģļūݼ€õ ¹āōū1Åķm’" ēķ1éėō4ōŌ’ķōū ÷åż=ł/” N ’÷Łł ņĄŌóŠō šž ēóĶ ģ2åõŻšłŚŪų$ēŽÉ IŪų ģ#!ń-ÄŪś¦7+Śū ¦Ąóõś ·õąģÜ’³·ćųšü āśbŲķ öæJüߘē@å1Ł“ž-ųIō$ף$śćūÕņ ł Õ  ęįō÷ü;¦ÓĢųé ņŅ÷÷ģųś’ėįš#7%ķ «ßØ’ŽŅé.īčĮäĻūó2 Śń÷Žō÷ÓūŁäł ­ēźå'$"Æģõ "vūī!@ņAģźśó ż)ęń &ó å łü  ńō÷šZÅļśŽ· ė żéēł5öÖü/äźčįŅńń"ę ķŪÜÕš×Õ&ĄÜüūąA óĀąßąŃó’Żłį/ 4 ŽŌūČŖśęWŁVų+Ż3éÉߣ"ć%ŻÓśžź3äš÷Ńēąō÷€š_$ß=ąŪöHéė’Ēżßķē ųē"ū€ŪįĮ’żōęįśõ!Žē,éŁē.ļ ź Ćä5ęŃÆä ö½ŲĻņčųäļ 4ź-ūāń’ÜŽå!ŽÓó$½Į*0Q> š–"āį€ŌŚ ŹĆ’;¹ō'ĀUńó׿ѵ܀ęĻBų8šČī/6ä¹Į öäų.Å<½ EüĘō×åÜįßęÕö2šŅ)Õ{˜ž “ü&ķ× Õ óūźé"ļĶÖŪ̵ķ)Ā:ßĒ ēžUó#ģņŠöīH*ś ŅĒÖŃķØ×÷漚ķ1łōē#Śń öēū.ĀĖÆ²« 0÷öܝ,øé!#.ś£żģń?Óūr6īĪ'ó"!לĶņŅųŻĶģ(ęŲ3ö6 ·ćéŹėĄężģįŠŻłń€ł,Ž/. Ćś.üŃīƒķ #LĮ*É ž%*C 6öüę€ īÉī '/ŌŠ@#ń=ōĪ^ś!śźųĮóģ­BóņžģŪ5ņ =äUÜ/Āąč&Śģ* żĖ¼ę.ÆÖüśž O€ ņŪ¦y–!  ö%XłŠ$āēģ÷ģõ ŅśÄĒ"ńĮ.1=Ćń÷žĶłG³1-ķū“'?ėś×µ’ŁĢĶÕ'Ųčļ€,ųņĢ ōś’žPšĢŽ ŠåõG%)@įķ/ś€׆ÜāŁöāģ<÷ Ā ÓļŻė ę&öŻų0"śŽ ̌ū ČžĢķĀó‚1ē ęKüžÉ-õé ōmM.Ū@åŌĆŌō6×÷óęģÉÓß#$Ų} óį"ަś-2÷ČK łŁŁäްVóå~Å ,üś%•8,Ć#éD*üńßčÖÕč$óĀīžļŽśžōł½ßŚ:¼ Ū"# ÷ßß „.±fõ÷Wķ~+_0R 1R€č˳’¶R äĀä+B(Ų ķ«šGåĪõßČžJö”1 ׹æįĘųÜż¬ßÄč łžž3 Aęī Ī0ł ų2!ō Ü7-p÷7÷$ źōųł 8 ó Uņ·”÷ż,Ū§ąĀžķ/Gø#õ÷%:% ūć åģ8)æ üŹü÷ -š™4Ó¼"ś+ō÷ ßž*ń6š÷É!¼ÕåĆ*„ū߯'UŲ ÷뒁[+3ņ_ķēüčźģŚ-ü ņāūńž§ öÕWåō8’ŚŠ5„)/ōĢüēāūÜö$Õķä€ć‚üE€ĆlŲå<¾ydy½ī’~^Ńé,,:Ę«½\Īģ–Zõć€ļōSyŹŠ;}4~$ņYŻ€”Čž˜ī…5€°Ó€€€śŻK2¼ĀžOH€õ× wųéD”śī0Ķ~€™C.€”€K€@F €I#Eķ!3ś€_ŠŪŚ G7€æW$kĆĄÜūÜśV½Įæ€ÉåŖų̀ˀ­ę³Ė”ėČŠ(’Žč¬ų6I ō¶ś Ģ‚WšóĖŅåø!Ėߗż öņ8Ļ0""ū8Äõ"M!‘ž¼­’żĪń^øJ4ķņģ’¾ī»ÕåŽ=’Æ7ŁÅ ĪPØł7«é)į(ŻQēźŲķčöĖśīæ#°Xž ńŹeĀėéčÓuŠ/0ī fka€ņÖ¾€¼ÕłōE÷ü€ą~D }ė īĒĒÓźŠT1·ėĘݽ :ŪĆ÷( óóģ˜ĀĪį# ÷ ė ēC!.®īž+Å’ģ’äżö°ęÖĻ"< ģäńŌūŁ ö~$ėŠä3Ō/%ū3 9Ņ%ėęéę żóõÖĶ Ł'ÜłpūžžŌśęGļóŽ” (éŅ*’ !ü0ö$"ą×1;ŪŻ¾žš€õŪ 2+Śüūū’Ó ĪÖSĆõŻŚč’š6(÷ßÕŅŽč šŸēßž»ńßŌżļģ8(ćė $ ö›Cż?ųĶęęWF(“ö£Óŗł­ćāó1ó§~ĆłŅ×čiß¾ĒŲńŚ:üJŽBŪ®2äžœĻģ ©™ŲµńįüćÉš#ūR3,62ä8€ź÷Š®Óš>8÷ó+÷¼"kŁķ0ÄÜ% ś!āīĶÅ:  Š! “ūwįōąŠļÕ§~"ķūå3ü€$5ÜČž óķ%!īź$@.ļ'ń5’Żńń8  įö õń÷#õ’ń*E×:ķć­ń÷äž éõ4¬Ŗ»'ō0åńŽ 8 7 Ü.śÉ"ĄåÄķņķ)÷+Ģņ" āīŠžz"ģžßģß ±,ü!ČņöŠģCüóŠéķ÷!ó/’Fš×ēYłÉ½łß3ĻŁ'ĀēVżŲļ öäšåōęWņåņ$]ż5.ęļõ€ÅžAōS8#ļäéü’ņ ŻēśęōŚŽ “ʶō!2‚īū'ŃrėĘēŲŅ’źĀ§ōPŻŲ€Ł9ųčNūųż'äśCņęĪŽė*ą8 Hłį)ėö šźÉó å_Ė%ģī(øČćV_įį€Ī€œŅäåū#8ń’aß,*ō÷Ųųõ(G,įC µöŲ}~)ŃY.ńģ“ĢR¾÷3żįžžē¹äŃü"ŽĪÉ!64 ūČ;Ų üÄé+÷īÄģŻč+ķŹöżćų ä Ųūźā- óį÷¼éÕóH!(/ū_īń5 ņüĢ!ōŲõś®łįśD7Ų°×ķåł ŗżłXž€ ,ņ"żØŪ¦ó/į9óź ł ½% īQ"éC2żiś ÅÖB.ćę 6śž÷ź Žūõēžšņ’ģŌõź /²"ś ä9Ōū Ž%čųü-ūžäų żśž?MēĻęf&S , °,Üõš6 ž’ēóńśó)ģņ-ÅŲšÓģŠ"£9ą¹ļö%>ģįV0łćd żęšžBōųźüų×÷9階 ö ėŽ²č0\ź“Ł ā F.ŃN*!ŃŻ żÖ ū’ōüÄŁö;ŪāŖŲéśåĖķńXĖ’ !ļŁ-ś åPé6» ē*t&īžź_ūŪ€ü%Ä&·ųéļų Ę Ą€׎ĄÕöŌ. ė°+ķ 6ļź™ōņ£ēŁ 9ÜŪóģå;Fą1 'ė UBļ ?ļ*čįüāčß āāŁöĪÜņCęÓö©\ūP(ßɹ\:ńšų4īóę”9å!õōŅ)-!Ę,ó1 )æ-é³ēŌõüżśžīGų÷ öėł"łčÓĖ łīą8Ž’A)ōĶ*ý /Ķ5’½-0ß źü TöŪéŅ×üūś)Į č-ņēķ hÜĮäłżĶįń÷ź澝üéļæ=!6’ŠśJõńģŲŻĶåéö”ŃoÉļ÷ÜÄżŲTšŌņ#Æ ÷üŲõć6ųķĒö&<óĖŻäįųErGEPżņ}Ó&ó€}jŻC$ģóĘK€ĄšīŚčųßµ =Č@-å~ż® šŗŃģąüõ~…€8ĖöŻ2IŪ& *ĒčļOž| ‰8€ÕPcą£Ä"3!ü¼»qķņiö&Š"¤Xū2B›Ī')>>Åö2@Ķ÷óÜó~?nß4Žf2~ć'Ź$ļõC0€ēūH÷HŻņīöĻ€$M>ōOū’5ą„}ÕzØÉ°6> K¢ćų €ŽŌśü)ņ )Ėćä.#ŃŲņ5+&ŹšŁ)ąååżXļ~!Sųé:—|! C“'ŌŽˆ3ęĶĻŁęõņ?ŻGäĮDü”!óķŻ) "ŗĘ  ó8€ćÓĘßłöźÜįĻäį™@ŪņłŖ&Zō/Üu€ čź)’ķę'ų1čŻõ:Ų ÷EąėęįÉńŚs% 4ņ 굞ʚĀö4Õł‚Ž!>ęęž āž=ó"×äč€ß»ķN ņékäüŻā ū Õōłųõ¶!©#ŚrBą‚%čļĢ:ęž^‹ņZ0<)#Ł(Õ’#ōĻŅ"ļŌąü)%åäéė’ż-F0ĢėčŹFŲłćhÓżLư!#“õ ążÄ7ņ()4 ‹ź¼Śźč.‚!É%ŃČÖmŽwŖż”8įµō"ćģż(č Ēņ1÷6ūEĪļC ąč Me5ŌŽ*šźāäcwéeź,H ¹ŚŌ.Žū<ģšČ×3W€ģ°/ć=0öDEÖ’ß²Ū 4ŁžqČå즩ż ZĄ"MH,ž€«ņ?7ēų1CÜÜqōĶē“Źß fßbāa ²å 3įęŪæ āQCö:é(Ūŀ‚k 󚣒XÕÜéŠė ńŲ€ö)’ęü’Üāņūöč8 K žŠõź ×ó Śš źß’śä Iā)ž„耹óóĶ÷RģKåńė%'ž)ęŲ’ņõ ź’9õ ­ž… ޲ó€ż/ĶKüÖĖę÷ @źßõł/÷ņ’ūļē7ż.ź,łÜß5ńą ö )ģéšļ0ųž°9źõĆųŁåŻ’ģ1ķ¢ģź·6žŪī E įąīQö/öæ(ėY%=ėhŲ;¾F‘ҧŹŽÅ_śĀÓ0Ó³7ŌķΤõćŁõ| ‚CŠ®85ó+š#L=Öą$Äl Ų1÷Ā׃€ń ńućb/ī=ėÕN#ć”(ķ ÖA,įŹļłåi4‚$ŽŁöō~ņüč %T]BŻUÖ# i0¹&ęh02ū€ų €42’E.YbßīĖĪŗŚ~č®!ļ!ߊoé( ēäŃŁī. $JłĮWńŁY ūźÕ1Śį ėˆż¦Ķą&]VŪ!œ -æ¶I ¹µ: Žåōį Å»Ņ2hūļ+Ģßļģū k ń£ņOżöż9 D€Ūęčśģˆ5įżāóŃź»£ż€$?ēå3ųēāķŪ,Ż ØŻfļ .!ēżü6.’Ī› Ō ÓDü’"ųQī³HßķōŒłŁķśėõūßń. C@i 9ü’3®@EńōܝŠäD**Śõą¾÷ ‚/€õÜBŒŠķēL(›Ą ųĀ€€Śßūc"?ĶŌ&!/ąäTÉų¬ÜóՀ»€µĀ„ åü5(XŅ ØäāYķ Łš-PiįŁ’·d‹R÷~ ėįöšsDž,-Öś š&×JUüI*ļ€ĀŠ‹į²ē;@@Ź€üJō! ķ‚;ćo' ģ&(ōAżäaž×ķŪ:$ī õ 2/2Dż"ūü’Óć&×ķńū ūłųĪšÖõ€Qķ¹!ę|?żżšŽēļĪķō'€*ī4%ģžķč@4ä.& Åöķų (Č6 kźé$ģdžśšŻ (ī+āŲŚFå­€ķ+ūń)§ę ŃļäĪŽć7öńóĶCŅ „äßéņ„ų$ńæMļŃēŹ CńóĪ L#iå÷łÜ5ķšŲ$åź’ĢšÆŁõśłåļ!ė!üķ,ė*č·’ōž"C",(A 0õģ>(Ä čęĒ·ć÷īūņ?õīžĘąÖĘÆ'3śóųåä½Ō ūķö³!ā&óõń÷Ć ° ÷šģ* Ų'Ń ŗ5&Ų č¦ü ŻģķłÉūõ’ō(é )ś6āŲżļ0@'*é äŅ$ ē ķżžQ’Õ “Ū ]>$ų4I €įÜĢyמņĆ 4ĆĶB@ę%ģĒ!Ł’šĪå߀ ļ4łdźėE/':(€c·Õ ļŗÓĒšYQ¬ éż ·÷ą¼óżŌ‘ßļ€ ūć9źP Qń ÷ÅČ"Ūéš°ń€ē Ąńā;ßžݬ€WģŠäūņūŠ€ą®ėą6÷€ķī%AēJšī’*ęb>ū’÷=ń l€øļŽ”Ķńń.Ćö¹³šO÷ Ö1ŃÓ8õį#żFBż“ūż€P××Qī®1 {€öÜK9ŌŖé1ӾȎӹ/Ś>±ß" € ÷ńŅ’ėÓNęōėß·Čāüś'ÖĶ! 7ęā]ąĖ Ó8= åł1÷ö†DŁ»yõ$8ņ«ä;ņā’ņ1W? #ÓéFżńõ.ļ®Ł?ķŽćsS̶.%9~č$Ņ"żšłįI“æ~€źŪęäĖ™ļÆ"˜8õŲbģĶ&ģįĘĶ#d“Üi; 1Y¶Å—ā X\Er€€€}о€×œ€(Āč®Å Æf!éOi߀€)ąĀ€CY¶;ņ …€ I~7$0ęŲ€Ł4怅Ҽ€«~UW×Ńīø3×öĄ$)y’ä;·;ÜęsačįĻõÄćGŪžš$öśń(1ōøŪ(€&óžŠ0ńńļ ½OF !åŽ Ģü ļŪóųģ!ļš4 øNł»bųצAē&4>8BĀ ü1āŚ|3 żāMļ0ĪNų)~Æ » §§ł€^ų ‹źšā€öÉ£ŽĘ8ģ×ćņīÄĘ6‹fHž}*!ś­īÉ>ō2ć©hŪ!|š ­;2RĻīåĢū 3.ĖĢN7ū•WÓŪ%œĖEłČŹT$õżPŗń®Ä#’Źź@õŁ¢‚8ÅŚļÕŚBHüŌźāćł’ Ķ›÷“Åu2$'śō GäųØÓ. !©JB1†)ī2Ø”üłĒ’Žō€ģ!ĮuĻJŽÓ÷üÖĪ%³éöėÜ!äźØw r©ų%ė ™÷„ļ쀺} ÖņśłĖēRB“×/ü šTų9ż2įüHéb Xńóė«ąhXśĒ 'ģ/āÕé½üśĖ®ę-47(ßؚŚ»€Ž6æį"3P» ~ŪšĶˁĄśņØ0Šüļ!=ō,Äå:åóÅü)kł+Ü ēė €1ģæēīdīÖ¬M#'Ä-Ė1µķõ äćģ >õEhæ-óøćœü¢ö’ł¼”ė ¶ķŁ ķš 5#¼ėņ÷ų?€Ķ“霚źõŠ #Ü&°+Ē’Kćń’Ī;ļ`ŗ*µ)Ō°žó.×īł 0„ō™ _`3éßC29žł%õų$PŌó‚ŃģĄŠ"–ņµĆżõ»€I’€čLžf&Ž€łĪ€śŚž NĀnłębÄY,=ĄĶ¼ŗōāņ䣌ńė/jŠ>K+<į½ķ€@ư3—ę 8"3”Pdü¬Ļöū®7Ą@åI’ÄÜļ@®öī­Gķ}¾*“(æōŹō…ųć€J0$žJĢū<ĄźéāEėCķś’Żų„_ć(ÕćļÓŃæŠ÷"ļųų—QöÜ6$ßߌąŪŌłņ"Žģ.ó ­ģ!żü(öž ²’Ōb’éN-÷€# £ńĒóźģ$ņ 6$ō åDžü@%Jöå³ś <Š' [’üdÕ)ŒÅnż’źń#1€ńśó€.h)6õ.ßöąģ®ł ć9ßč ėß*ßLč†ōū ėū ŻÄįÅ’¹ēŻÉåBĄģķīßY-ąåē ų×üO$÷#ČīN#÷ —Q ōåhĒĖ÷šŁŠÖµš.ķö5QŖą.ņ€ęśęćÜē? wĶĆ=Õ73$ ‘T~ąč į抇ßõĆŗ(ē:’į4 %(ę'—*īÕ»ķ ģä*ę© €ŗū7ėß%Ÿæ?ū = éč„ļ¬ōćĻ ¹ĖåF-÷ÕÓē|µ )öeŪūžķ 2Ī !ńźÜéåśū,Ł$¼ ī:&Ż› ĻÄéģ[ėŁģéīĪ– Ź£$õ÷’^źĢŻ’öśMĪüĖÜćš–S4~Ō3&ŚcĢ÷į¶ń¦PY%ƒć €!é’īż1 ćłvóŠįw"Ņõ¾3Õō%$żEU¼ŪęQōT/3óēGó,&ęŪ×ŲĀ!ōūśśŁąēėžļüīżĢ "ĒÓś5įŌIłĻ[ĶŌµųėä €#±ī×>'åńÜ1ŅGé·2ŌżöC%ć>’żņćO»ēęķü7ęĻ 2,Æå# Äį!Fėä źųFŗķė'1üś×%<öÖń6 ū½źŁūÓŌņļü’øęß)Ń,Ó ļõ:ŽÜD,ļ哚ō÷’å)ņŚČėCū&9Ż øY¶'7Žž¢Ü„ś $p·&LžęÖöūć(/Ųėėū=ŗī8Įן Éż{݁ģ»Š ×HÓåźļAē'×ŗõ ĮÓ ęāóĆčĶéż9BłĮžšJ7ĖęŹLöüƾģ¢ļ>ć㠚Ū-Ź“ąO5Š)įśü׿ōęØĘõ-)">•łä!#Ÿ­U .ŽÓ ā&š-.ąōćāēšł  '“źéC#üŪ"Ż|ņ7åżūśŃōõöńõüćčŁ=Ūē?ŹķŪźö":ęłĒüåéć*ŽĒ'ū¾’³Ū6źö’ÖģšķBżöšžżŅ ėżęńó$$Ūėš 5+Ī:Ģąö44ė āż×./ņt ’šłÕœŁ  ĒćL ļÄÕåŽųūžFļćöč%ķŁõM'ń½C£)į%ĮŪł=ŠŅ–éņ6øM1øś*µ)-ō9ћŻŽō,āŃ’Į¶] öłģ,+, øķ‚Ł«óĢłĖńš0čē!"<ųņĒē% Óń½åG'žćżŲäłX¼ņļĢĖż’;4Ҽ’7D/ °{MøŪī,ŲÕĢq @ßč)Wæ7Ž—Äē%ę"ÖŲī€ ’$až3CÄŅÆIļÅEóéõ Ū/Ņ$ąō»ėŌĘ5&OQśļČ”#Īóå€ųżŹäŠ÷B!DŅ:ŠüžįŪ’å‚Öśéśų :€Č÷æā· ~ŚŌ<ˬén« ėčū %DŅÉĢ‹ ś(ŚŅ‘ÄŠÅŽČ>įBäŌüĶļˆBźŹéŖžĒŅ2¾ŻĆ7šĖ)"$°Ü<.[Õ&īĶłŻ«¬A“ ’o.T5h<é¶éēšD,ŁśĖölŅ÷D3ó3ĶÕż-攎LöęĢųÄā³Üė× Öśą ÷žżį÷ÅšŅ³Ü9ńźč)ļķ &ė%ģYą õ,äÓ„ šėīB 8ś!Å÷÷»+õŅ 1 óVń5Õ½ß#§Ōłļģ=ėūļ¾ śœ ī8śļ 2ł»ŽéĘNéóŁö&ŹįöŅŽC ė6ų*¦ś»Ż# n1 ²>.õųł ’øż% /čHä  ĀōūóBłµü*O aĪ’<‚PHlį+,•Có!×’1źū.ėŌcŌ0-«#zśŪĄYC2ö€×żć }€ß€HąśčH1ūć’įDśFņņtģĻEģÕ§ōńŹ¢)3öG?'h)üéś)ĻŲČ@ŅįõÆ.?½fśÜīæ-³1 "ļŽłø ¦~ .=ń åó}ŁUÕõūÉīŪīłæŗŽŲA+ĶūĖgö±ģł‡Ķ§q ĢķŪ6žy$ėłńäŻöö,8Ń#÷ģš÷öśļžüõö?āłųŁ’ūżłór÷ņą$ Ŗ¬ž·ĻŌEś=Pś+{,ėóśD凒žĄśū Ä÷²Ļ9Š3+ĪÜżŚŌ ł†ĶŠš×€Ļ±ń"ųÆō Ł ś €üņ ņötŹōžŸųó€ņķņžŻķŹ»DŲųė-ż&ī³×ūńõųś0&kčę ŃęPŁÓēųü#’ūĀÄÅ"ćēżņķźō üżżŁöó:é # łĪ äń0÷4 ņčąśßļ4%ī ééīĀŁ&ž%ńĢ2üģõķåü ü, ’ń%8ć DßūüčFéÕńņōęļõšūņõū¦÷‹—Ž×'ļ&ó ÷Ē÷ķū׿ś % ņŚ.č šźų (ō€1+%Żźģšé’,õ ž³÷ ĖņŪŪāCIŠ1.ąōķęšöōæōŪZž-Ņ&ģūūĢō÷ķė ń ÷ųń÷ü+ūĆ č÷óó8źõ *Żģäėž,üŚłųÜēśķżŪ łįåĆāę÷+śņęõē,ć,ūŲå ×üų ų$ó"+ū "īß÷ż ęķó—ó®)>ųbõCß1Ė/ó- ėķ-ąę läˆü Żāž=łéīŁŽ2Ģ‚)ū‡:ćŅæ ń č€éŁ%õų1śŁļ€ēҁy:Ģõ֔ĶĀśÅČõCü+P ®/Ō_õœN‹ļėģ€D4(ŪՀō e>ėóŚ¢Ģ 8ü£°Gūāö"īõž !4ZśśŚ’ŖP8 Ā0õ4—·ūņśŽtĶ/!Čöńā¹N¼€śø&öčĘ ś·82åÅ#Žų õõ€Ć’;Ń4ŚćńŽōóĶ÷ žĄķ&ĶÓŁkYõīŲæć߁ ĘßMśüŸū1Åó£ü×ķŲMāīń/¼źi IŪĪßāöä®ĢŽōØ!Õų Ŗūńó ü-$öą×  #8€“šĘųŚD óČ6k5ŚO5’|õ(%øŁ1ś#ßa9Ńæ“’ŽĘķBJŚĢĮü ęa*ńż÷łś 2÷łžīĒ(ž $łŽöüļö üė ņčĶ ī’Ł ’éķöų0čÜłāōś ÷śōåļ’ ęöėų’÷žīšōē īō÷ļč(üŁļ’Õ-'ķśĒ÷8Ž ż š ņåõńöčŽśĶ ó źöü ’öż*4õ õś ž÷ Īī žńž÷ ŖŚņHUĶŲ’CŸõ€+Ż(%÷e+Ōž$ žÄ6¼ SױʞźØŅ€TõŪŲ •}ŪöśņŪĀŌŻóź€Ą LīĪFS-:WšļHģZØ­ĘEóń1’ņ #¼€āŅ„/ūļÓ éHoöbßšBüÆĶź#¹€X2śŸļÄź/żŸą¾% »»* ųč2ć›ųŲ<ėž? Öļ±) ®źźŌīś÷ć Üvō’ų öōšņōōģōśō’ļ 3ćśń#śž žõń ūųöšųē÷÷ģžūķ»  żūłóņų õ%Äęmü’Ķüžś  ģ öŁłż«žRóųūż÷ęō,ó’:”ų ų’öŪ õģžģ ÷ž×’ž’¦łö Żõ*é÷ī Øćųł ’Õ źó  ÷ā ūżüõ(,ÅUųņžł ü  ļž  äŪńŻ Ż÷@ # ’ āō÷ūß üņL’ōū’ōīšėUõ!ķLĻŲ%ńņõśęxŗ’ō ļļ ÕōüHżźī ž ųź"ß üėC(śõķėŚ2ūš ÷$Bęļóśöģųčšöüšõķų#ķłü!÷ŲįÉūō0Ēųśłć Ü*«łęš ėėūżįŃō9żóźŽ$ 5"ūåˆ īüćöÄ Ś0ęįpĖåÖżż Hōā ķ#ļūżīkū  Ÿś(ł ÷'ļŪ ćžłµŅü~ć­įųöśś ļśņüC  Ŗšūļ śįČ½ äf ”"€P " ė$Č šōō÷ę ó韌ēė ųūÕśīģ ņłū’¾ÓŲ÷ ąõžēžł÷2 ģ Ųśøä×É÷ ųąčž ā éų!ę’ ņę üžļķ÷āźü  ’¾ü’ļčū ļĪźķļé é÷ä!ū&ečžū żśļžą'įöš Ż 6 ļÉüōģć+īśéńż#ųKż*ļ )ßģńd#āÖõ6āģų]š½_&šó*įüī hī6ķń ÷ų§nų)ĻŚä¢ććĪĒē1åķīėüP&=ŁŌ.Ģé.Ó +öå&ó:żÓā*æü’7ēž\JėóŌ8śL !ŌīG’3ß!Aē ģ#żš÷-ó2óŽöīōūžźŖÕā9IŠBźŲöč¹õåēų5Óöū=ÜņāĘ*ų1óõæöūłē ź'),üžļ ÷!šķńļüčūēųšęĻšś #üā ä*å, ńģ ųó$1 īūżķžļļš,ęüš’ņųśīżżżäīóō ż'šżį’ļ Ń ’ģēč÷ē#D± »ņ0 ų!õ÷ ńŁżŪīāš $õ łęśüü5÷žķśżźß < ęėÖń ųī Ö÷śéžģ’õģ %ń üóC’Ēū ’ēõ»ļž #śū ņģźŽę2ō ąŃ é%ņčüżfńžļ’ĖēõČ÷ń’ėčś ó Øóżõ × ÷+ļ÷/śńāēųūŃū éśÕņ īżå0õšš)ł’ Ćł Ō/÷ć üą Ž’ €ŲQ\īšę'ŗśųūōg”:ś|łėģ+ĻŻņĘą>Õüē+hŚ÷Ćß3&õ:Ąēéņ¾·öŲ~Ŗé×įżżß8"č*bģķ ö”öåūę„9ŁčF ĒŻ åŌćņPķė¦ėß0žé+*2ķģø‰ūł--š( P€÷ń Č:2× ĆžÖ”ż,0%öŚ ęé, ęĄūćėńåśųń7ō>üŅįņńö óźżĮ’üü ūüŗżūę+ $Łł ķŪłöüķ÷’ ’ ēųžåżšžłõū(Ņžčżļčśēöšč!ßšü++üśīėV ėÉ ūWōķéōņņõÖ$Ö/ō#ö6"š é€ żĖó Śö ņźė" ś ć&öīōēžõ ųī’ ņŚų$ü õłņŲ;÷ ÷ŽåéĢéü üöü’÷ üõ÷ōé’öŠįłüÖÉś é2÷ ’ ōöķś÷#žZļåæńš&÷āžéóõšņöāŅüčöī ü7 óņīų Ū ņņ÷Īó’ł 1ūķöķ Į ćR ų’ @å’čķ "Ųā üō źś÷*żłśĖū Ą(× žż ąłóļ ż$ōńńžä3ļŻ õė÷ķÆžē芚ģ!ž’÷õūõšŃŪöą š äé)÷źĘņ×D"óŲ żüóäēžł6Ł’ß÷ū Żõ)ķėüū4ÖóōČ7õé*ę åą ī% ńś×õńŪ*’ęō)öł)īüųż żķīęņż"Ü#’šļś +łČ ūļķźł ž"éŲ ūą/ńīÜ#üŠ÷ū é@Čį< ÷ż żēżóŁņ’ćķžÜńö÷2ņžVeŪ ųū³8 濎påżåééū/śŽķ.Z?É +-śŲ’- łžųļüŌś żGQ’ ģ(śĻ$čē L  (Ē’ņ ō5מū&ż€ģžė$öż÷2š’Ķ6ö6üó cōū[ÜöéīēŹ ü°’ó÷łbį/ü4ōņüę óõé’ž2ś īęžų’śīõģüć*ģōü į ų’š’ūż9 ü÷ä ’ųĢ;õņéžēū÷šjūóüł÷õę’ųūķå żžūųń ė ’óśżQNźræ×üč ūäĢļųżūŃųüüń) śžüÕāå’’ üųü’’ķ÷’ōōÕ ęóūś’żüķóéßÖś ž ō¬Źōń÷źś’Ćźńšö²żžåēóó@’’ņüņųÜ.õī B÷ ļ¾Čņų’ųųķö žł Š’ŗų śŅ•ī“ ūŁĶśōöśžż “ćĮ!ūÄ ļķģóż ņżż  ļ1õä !Ę"Až"$Üę źīźßT äåž! ēčÜģš õ ģ+"Śī÷öō$źś ÷ā!õųėņņš  üó’ś ę’Ŗ ".ē+ Ńł+ņ ÷ōóģÅōž 5ü÷żėū'źč~Ü ’ Ė é’ģ ó 6 ­ Śņ ūśė ųü1 śÓžįŻė śõłü÷³Uīė ę ü čśēå ėčóŅōģßÉŻüųōāōüüōöšū !ŁöūŁķ üóųĪüżų’#ö÷žģóūPżīėćģ śčńü äś?÷ō 2ø ś öÜėŚčė »H$¼āüżūR+;ł Øžüš,  žśöėŠ BT÷ēżüóķčļī’ ą  ź(Ū ’’ļ ć Ž ė öļäõņųŠąā 1óśÜśöéėŅś  īī ŪśčóńģļÉłšū,éł'Ķ÷üūōūŽö`õõÜ č ōņõē ńŲāōśļ!žżķõÄü&ŻŚėČ ķŚ’ !čžźńó2 bų!Ūö’ōū ķł&żōüōäōąĢłJżŲšž ü ūŚō Ō¤ śę6żHō×śÜ &ļ܉ ś’’Åć悮/öŲņłųŠóń Ėž ÷šßņóķū0eĖ’ēߌ ś šE/įöż ōóų, ēń įóō ėéųō;¾Ś(Hß+*%ūŠų× ž4õ;ÕóūĆ ńčņģńųįż'źĻ; ö:’ōæ’ōāM€#@0ž:÷ųūŪ"āB óžėėēŁł:Ķūšģõ.łŚ4ß Tśåļ ņ€ĖčE 8ėįķšńŚ'å- $ųę ļń’Ē Šé óīģŪ ēÕžßģś!ó ä(²óżåmę Ź«l2Pģ ł’Ÿ`÷ēČłó’ēżīV6į€Üļę8ęQMöļ’ī#č Ņiź óBŃ!’ü õńHū( ļłššķüöõ ņņņāŁłūó÷ ā)õĄō ū ÜįšåżĘ ń& ż 5Ū ĻņŹčćēĒ’åūõš0ū’żā ÷Ü ßčš ÷éē&ōńū%ņ ļ Ųčņ’Ņł!öžįķÖāųū­ųüLčśå ćĖ.%įG öśńē  ņځī)ōźü ß( źž!ó Š÷ōĘ ż šōųbüūŁ’ķ§ °’ōŅķÜĻ CšÕ įūūśå ’ūńóńoµ5 ÷ ’ŠÕžT č łś’óźłö ×ō’ÆW õōPäö:_śźÓś¬ ę’õ ī5ųųōõ’’åõ1$éĢ®åųńłÉŁųń "Ž*ūö²’żŚüņ ąžŌóī#²ńļķüö ’  óčžż ļ4öķ€ś"’ū ķ$ķćā ŻāóŚķśņū $é’ö(’(÷ź  žÜāIżųģźźżöļžōō ’ ģ ęõŚ’üūųķśčj’īś#ź’ņūė" Źž ėłļč čśżŁ1;łīļü÷÷’-ī ė Ł÷ ņõŖüąļų÷ ÕõéSųę'ņ ļžß žO÷ė)9īéā· "ńķå ō «N « źłęąŁ ÉĆ0 üł šõq ķ!žņ ėóźßńłó ūóų$@ó ō*. čžł éķ+  ühėBöģ  ū !-łž&ßā/ņ÷3ÆčéņŚūæõŪÜß÷üśźĪłį Õ*üöŌćž čŃ ņóė\ńāų ģŁį÷ų’’ é ü’’ž č+×ö’ĪsśüŪųń<äł ć žĻ ļā#L÷ū’?óżü(ļč üõų0vž ė %ōö#ʀ äĶųė üļ¹ź łūŚŃõņųõzżö’6 ÷±į 4õ÷õKÖń#üåźź’ Ōūżņ*õ ķ į MĀęä%¢_Ž«ģ īŽŃū*X#€Ž €ĢD÷Ł#¶÷įĶå#ĢŁęĢ ŗ;ż ūöōā2ģŪģņ1Ü»šģåāåäéüķ(ōśŻ(č'ā/3ģüJļ!#žš.š®ż)Ż Ü óEż$ ¶ ]€ī2Ųņż āō"0š"G*?żīš& )ć~—ČćĻßßęęä ö€ėųųļļńō÷ņ Ø’ ėąņą śÜž įūßłņģų ēé’åßó īŽåTńč'Ū.ūķžźź ńÕćī ŻĻ’ūųkŪķķč’ !-÷ēņŪõōõų÷ōńŽżżōöųö - ū žöö 9Ž’īŠżųóņčé’åłóé õ ń>óśÕų  ķółč :ęģõźķļēõā: ń īūņ*żń  ī įōēé’’õ* ķō’śł éłōżåķ!žų ģõ!łššüÄF ōū#āńī÷ņü )ćżłęę üļźć@ žö’ åōožńī&÷ ’õńųCŚś ūęņŁ ÷¹ųöĀų’Üļōõåüśóżļį(ļõ!žńū ÷ öüī/÷óüń:ł$ųõ°"÷ęŽčźć÷9 ī ż ųńŠł½ŁAųųüķē=*!÷ÜęXĶÄīžŗ’*łšÕŻ üł% īżł6Łčźłü#+ųü,åżēŅõōōÜ#‰ Ść0žü@łž&żģźōżų$öūŽęžėżör ßĪ nó5ųņ,0ģ ’ć)ßóżźžųśšž’žūńłžóü żõõ÷.’ó żņóōńąü ’ūūÕ) óó $ŗ!fåõ ē*ŅķźD ųļėų"”ķš żæ#āõńłéņ÷ ö:ńūäńłĄJ÷ čżžōńķ+üų ńń’ežļ ś ó.€ŚéżõŅÖT°ćžż&’óżś÷ūü&!żŁłšžõ'­ųę÷ŁłģĘńīüĪōęšśßą ėóņūņčŲ ūśźļ"ķó ģéĪ üų *ĢŃŹīöłžūČ*;(čżńÖ $Žż,ó1Ó ŅųÜó7 ļżų!ŠžłēCŪņōōžŻ5L ńņĀ@>éśźųž ėŽš ėĮ×*%÷ņõ÷ ż-%žėą1ź4 ģā īćüI÷żśöņ’ļņū&ł"Öų/ģŁźę3מ 9ķżł/įśōįū śėü ūį÷ūžĢųżųöęņÉ%ąÅžė,ž 'ÓēłéöÕéś ÄEćÉų"ņ ö žņ ą āęõę* ōż-īõÅ×ó) ėćż !äųņš#īņę īŠś ūĆŲńä éē?č÷×ų%źŪĮå/ # Čłėß÷õ÷ėźł:üŅ ū|>)ć,乀ĖåįB:ūā×Ó ė īüą§ėŁūēĘöć 4ä³äČąūĶļė ōSfŁŽõr ļńČ'ų, +’ųü4žšķņ’ńģūī#¾ē õęłš‰ ; ! Ōśå óõ žó8’Ā ī īæłó )źö$ļū Ź śįŻüźłņõį÷éņķŪņõčōōŲĻķ-īśėEĢīóźų#’+1 öž" #ųŻ;öĻQ ĒśīŚóńųĀK'āšß+ńłšóŹō%9 ü śö śÜä0’Ą" ž žźĢĮ÷ööé*ś’ī÷śöžł čüņĻłļ÷õ ,ūżłŁ³ā Ę Ż÷ü ššļč4¢’Ņŗūś( żcü„öĄé’Éó ÷ō0p Ķō߯Dą 1ń=ż÷ģų%õõ" ņņ |įę j éūā«üśüńó”öŁęó@ūĄ öü €!Yöźżķ ėÅ&ž ö% ūäłūžČõ#ü’½• įżüļśō’įcżö§żņįķū ņ+žĢ Ū ÷īģ_ ūżłļż$öī ńü ńśóŠłōś  7*?õ šõāų&öńų'ū ų]äōéźÆųą ÷įŠ łėóēžé>*ż"ó* öū ųž’ųō&ļ ūēŚōõ ģÖśT-ņżģžņ«ņ(żĪĢļ āņ ߝšģŁčŚŁ"żž ėćB ó÷ō÷óęįóżśžźüóćā ś$ū ł(ł5öżĖAłš! į å÷Ö’; ž!ķė?ć× ×ūj_Qüüņę.łńģüõó*÷!ü/śķüöšżÜų , Ś&łć?ķć<7ōŻźļåųńĀ’×Äć’ż¶ŠęüŌ ²Ŗ(üņöŹæł RĆ÷P ż īłłŚśĻÓå ö»āÜżåö÷.ōś’üņńńō9ś1 ’īūüžžōąęųČźŁ +8n(óöųŅ ž ßķł%ūģßęūź ’ļ ūł åłģžåī Ķö&šüŖŗ žŽ  PļżŻłłł×ŲŲż#źøģĒš ģßVū1)š:żīėż ōž5żöÅćųżÜšś’ģņśõķę /Ćųńšüą“÷öłü«<ņéł¾ļöšäśė ńŪ7ó"Iž. ó ų¶ōż×’ÉĄĻžė€ž§üņõ ’šį ūś# ż)Ų ŗń 4Ōčõśķ÷,š% łåó÷»ŌßPĒ ä&¼ü#ņó ² īąŚū?õéėū»öž/ź+š7V!ć0Ūųōūł÷Å Æ=!ļł ÷ąā?ūPüĻäDöüłć5ްÖõĆų ł7ż2 ŹŻļšū &ó’ū ÷ ­łčOņõń#ė#Ļ;÷łņĢ#ń÷ūĖ’ćäß÷,:īöē,+ ś8Śūųņ ÄóžŪąäõłŌņ, śż ÖśļžĶę×$’ /ć4+śśōüø $ +č!~ž Éü Ö÷ ēž€įéśīü1ł §šś’ ų’ė% üżõõ ’śC&ū š7ó īżF¬üōźÕõüųėś’ł ūöż¶Wń ó Čżł ķńųėüį ž ü *ˆž óŻūžūüčųü öū Dś ųž!¼ēaųż1’#õ’śóMż8ńź3ż  ž Ę÷Śśšüķ÷üėų’ ųüī ż Ņ’ćō ś ņž >’M ų&ē ÷üāōü Ū1śū’ūłżöņżöż&ö9 ļüü ü åżųģńįōśŃ ņ ’Ķż+ųS$ ņźåå¼īUś Ļõķżęāż Ēēńšś!ōü÷ŻöĻ žüžGżņł÷ļ Öņõõµ½ķņš üžżø’3ė’ö ą śāģżłńāÕ(ż ’ž,=ßĒĶÖ Įųžüģßłł0üÓä,üģä%öāĮāöłńōō  ēž éóŲ“ųęīüÜļö%Ō ų$ü’ Ų¹$öķ ųÓ -č*óėÓźė ÷žéäūģģ’ē×Āž !āĆš!śń ņŲüžŃż$šė¢õ’ åゥķ0šąžļ źš:Ļģü¢ł ņó Bžąū3äŅé#0ż÷óå ō÷+Yå  ņätå õę™ē1ś` õāń,ųH ć Gō žųü÷+ ĆōŽīN€2ēé"Ųäüųń!ėž õ­žRę$ļåäIūnšķŲóśłżęŽ>Kõł õ’Ś &a÷"õģ’(ß’żų’ėīĪņæŚØęūŻē é%üōäłźčėVėłüSEĖß% 2 ĻķÄóäōō/×"ż< @Śśę)ēčÜ ā5īģŌīčč 5Śžī ń ,äņ:ļ^źōń ĮĻ ’ņłł¾0ū÷äBģ ÷6Ķä Ņsłė"ņšń š(ŚķüĻ?čŗ źõķ ģŲōūū7ž!-ųēåļ ėĪß$éūńꣳ ä0÷ēłģżńéļćÜõüźė  ō žō’ū&õš ×ćį¼Ųéž õöóō’ ß" ÖóųžķęžĶūÕł)ē’8ū’żųĆöęųż’ !Ķžöļņżõłż’žßŲõ*ä ) Cžóō öźŃš ż÷ÕōĮ5ö"õ÷ł’÷Åśź'ą īśŽ4Ā÷ÖēÓņ1ūDę.ōęųõńŅ"?!ź4Ź— ųaķóJ(ēČ ²óCčö1_õ<ō śüq}Yī7źŖ'’’šŌėūģ2żį’öĪśłģŚG^ł)÷ź ń#ęõ˜ķõéś 0ņÖüūė ß 遷łųåą.!śÓł÷Dæ>ˆōółčõ) *V Ֆūõś0ü õõ„ķéć ”öē ż½ō}é ł  ńüō9+ńæ(ħæ’ņZĀīD ßņ&õ ņŻäŁ’ ź¶×ķ.Ó#łÆ:7ž Õāļ ļ ü ŽEē;ż 'āaåöł’ 'Ćģę%=ņ†Ū!ßĪ~ŲćšäłąūCįé (Ü (Ž €žĢÜ įõ ś¶ū ŌŽ#&ņŹüżor ÷Ū3’ūĻčėćļÉ6ßč°ąŌ%ņüļżųŃåõļ÷=īńöóņź ä ž**ķ’&ģ6’¾ś‘õ łūżģžŁIūż" ÷Ö’ńō ÷šżż^žéąż Ö "ų łĪžćČńņķ Īś ęü'āģōöŲāå7   ĀĮ4żóćīō’ķēų'’įī€ł .- ļ‚óĶ÷o žóŽŽ å’ Ž迌 ÷łļų É tĖžł ųX8łśćaåļÜ÷“ōę!?ćæęŪ<2móż$ē÷÷Ø®÷$ÖšZPżö3śÓļŹŚ7)«ńżō~®×ūGĖšå ŪŌ!ķĄß Ćąä$ŠżOé.źęSäŲÕ:ł ŚĄļ,C.€āE/ÉŽÓöGń Ōžō)4ź™+@ē$ūżæģļķõ”!žżšĪē!W'ūūŌ#žłö’ßżäž$ļööņöģ*ćįęšŃōß*ļ é2Ü/¼öņėš‰ ēČž%ļóńÉķųŚėüąŹ ŪžB üÅöŃīó#ä÷ čĻĖś ŲēōÖčóLöDŖõžäźÅåöč īłöüü ūä%ėņÉŻTBņ’žäš āüįšš)åžōš’ŹA®ž7ą!'%Õ? ÅZ$ų/ öŻ®ö ž ŁÜŁ ŲI ņמ’-!#ķ# ż ō’öųńÜ"’ ŻżŅ÷#é/āśš&ó 'ć!żó"óšžšćöż ōŅćļ ų ņś ųüū ņ ąÜżö ’ öļń˜öŸ=鏜ģ&õöś ÷ļ#ĒĘ ūčöģõŌį’ľ Śīī7ļŽņżü/Ņ Ö%õ üł#’#ߨśŠ ļęųķūļŚ÷>Ń Å(.ÅģżéPÖŚį!’5’ļš)ō ÅņäłÖ$ģ¬CŹøßęäM6ß-õļęĒįī ņĖ ÷Üį. ū§ų%Żń@"ł’ÜMļźžéļü(žČ ŪŌŌ&µXdļū Żõ<žūųģFBģÜ(ģüė&ģę éńåžōłćł%Ä×óāü Śéć üįĆ÷?ņžņ$ż šīóS’eĒ%Ńķ;śŹ"ō ŹßÖĶ+’éŌ’ō™źīŪ!į( ļčąä( -ßšó2ā€.ėŠłęü :Żōój ųü Ž’2ł×ōõٹ“Ę*(żė nń¾ ×ķżR(ł.5żżķ ņ²źōč!÷éšģ' ®*ń#ē8 śńļ$ äŽįNł¤žģŅ Ü*ßūüś.ńé’ģžųõńč@ģõżśńōüäį÷ Ļā õóŽń ś,ūäŪś’Ų»é öšžėż ’7ūģŽāķ&Į #2š żļžēōūó7 ļūųūõ) ßąŁėžżöūžßäśķóVžūń*śŃłņóźÄļ’Ź ’ŲėÖõ  łūų„d&ü÷ŗÖüņäņńÉńŅ ū šęł÷' łŗęōFO ššųź6#RŪ šūŪ÷ Ņł’Ļäō ōųó ö ųöš ’¹5 üYėīśśæŪ¶÷å· ·żó"Źoóķ ¾Ö €ż ŽÜ’.ĒüóėÕ`_ü>ųå ņ 3é’WüėÄāōŹŠ’=ć"ŠÓ‹€óē„ņõ’ųŹ10 ;#hłųćœõņĻśĖ"’½Ė' ņęÆ7 żäĶ ÕūŁųģꊟź»õ°śß ėŻ ž +!:Õčłü­ńÉØżŅ(PµZ’Ł #Ó' éóĶ÷”žĶüĖOōéłŌ÷éšīĘ =ĖĄšÕ%hĆń&؅Üłźæśóļģ!Čń=žö’ K€ąņĻ2åĢ3ćų3ųÄłū÷łåšęń!éšōóš ū+ś#īąĢ ü&ļ#.üī3ųż .żüą#šūō÷ īõ’ź 'č'ņ ęšąśō÷"  #éä ŻžóņŅłłO³łį’åöęĖßöĖ%ņśńūõžŽ×Ģōūśčšäōń śöĻėõüš āõĀš’ ķō ž’ī ģÜ’÷Ś3żļżżń³ųš+żzMž %ģ ł# ŽG¾ūūü  üüÜåōū×ÉēöēÆō čó/ļõ ! q  śé÷ķÄ łū’žŃ+=#ņ¤ū÷ł ńż śÕü ųEšDĶųčļųī#óqą C»ū ś]ˆū” žžųFėśŁ$čūļÄųżéźÖ#ųƒŃäŲļōŃåńüżšżÜłó īģņā¼ööĻīūśšķå#ņų šņŹ ż÷“ķ鎳&ó,ū (yžłüā öęšżžšżüśįžęõ ģ4óūĻżų /éół1ņ Iųįö G šśĶß+ +Óßåś õóńļŻįłįņ ļšõ÷ēł¹ üččäņćLń½ćźHń ęÜü Ś<J# ( OńįÕųĘ“ģžįĖī9ųŪŲōöü÷Ö" $õėÜŠōČ:žł%ģ ōńśõ% żü®ķõŚēśżöęśš.źłś* ¶ųķéOężļāż1Ž )"ģ5 *ö ü ī"é@żō,Øę’2ōęC½ä% ÷ą ž å,ž’ėÉū4ŻčÕņö÷ūÜ#üįLė#Öź$ŒÓśĒ ’Y÷Ūåęī~ėūž×)ķ%Õļ1 ŽŒņ¬ūÖ÷ėē Šš$,!óķ,ŃåĻūåŚ ßéõ6ń Ÿ!',ż ,÷V».óļüČ’,Żņūžü" ’ ÖķćķMŽĆķīĀåģūńÄŚ0ćߢ÷ļąųóÄķéDśźļčėķļéŲņō  Dä’ ’߯ õGńļš4V$śųōōńūö  %ōŽ÷ūõõśŹžś żļŻõüČ åčņģŚāžśź ē’õśüīüęķäż ģųč'ęščśźŻżčśüųżĻņ’ųāśņõ+ņõē µöĢīļ ķ  &šķóć;ķóõųķųżų÷öŁāśņöõ üķų ~ņźžųśżėŽģö żņć!ž ā"¶Źó źźJūūäōC ō$Š(õėöüžŌź  öĶÖ$ūŌżåØö  müä% śż!ķś+ ]žöūšV) ż ÷Śļßćöōžü÷ņ õšéų Æüż$óšź8#ęüšķńC÷éēčü’ś 6łą üõ#|Õń6÷ žõAÅĒėõń&ųü€ćöüp ķēĪ÷öķ Ś ćܾÖéüō 'õ8*ōų-$ųĻūīōśżį ņężųż=ńš' śū܍ņśģö3ł#łżNężńŁōź÷)ü*"€ĶĄē]ėł ńė ~ūļųžgū>é¾8öņĘłüńż' ¹½Œųų‘ü ŚżŲīéßęņų\ÄŪŗģŻó™!*źöĢŅćXńžWņÉõAżēĖų9’ī¾Ķ ćŖä.õ“ łżČ¼$-łć’ż Ī»"ż'öÕź Å (ZńU’U$ į9żŁ™Š×9ĮŚūö‰ž>Ü9ĶóšEŁ/”ķ}^ćōī ėÕ~č“O„.3:żŪ’ĢŻÕļńł*GóĻ:¼2ėł ū°Ė ļó?Ö\óšüõö€÷ė’óŪš źśūõųÓžķöņž÷üśé÷åńī ńß6ü’ūłųłšõõ ż×õż ž  ×ū ņ ĪłżłšöMöōł ö÷§śöīżś@łūŁžģ’žų üīö5ņņēžåłö(žķ® 8Ųų®ųüžöüūĀ%üśžųī Šįćó÷ õś,ęŌļ ų ’ź  łķ ńóżńņõēņęūł żāžļõ’õ šŲģ÷ųžÖ÷ųõśź! ł’ūūšŚČ ’’šģäśų ųżó’ķŚłżü: ׿įüõīžū ó ģ ūõ 0ų ńĄ ’ė$ōą( ģėōė÷  čłõė īü$ Ņ÷ŽłÜłüīü żöń Ōņößžń%ź÷ėLļŪ č łģšśź÷łļŽčų÷öęėģž2ćęūąśśöūéń÷ż÷ś÷üśņģ' ż łņõõŠ­Ūś<å ÷ż)$ļ 5 öśčžÖūōćņ ’ś+Ī’ ēõ5ćż»!ų÷óżö.-÷6 śGü ģöł łłąüõņĖ’ ųō; <Fמ ņ Ųūķ&ōńż(éSó#q4 ’ź!§õ<ń ÷ųū’6ļ÷QB   °ęŅšōõē Õśüśķóöü1ćÜ©åž*’ łćń’÷,óČĮžłōdųģēL[ ü'ųļņ½žėżšö [ś īõž0 õå0 ńŌõū÷į š L ōĮČųż āBüóö ü&Ī $ üŚūŽ ķłžšńÕĮįūõĮč#šė'’" īķÜņ ėōšńoõ’ķÖZĪģćõļŁ÷'ē  õŪū #žģø3ż ž ŠÄŽōĖęü ėóųö’Cūłņśóī÷č  żń ōū÷óģ"üķõńļ ć)ņē±Ū öŅķ鎮÷ā‹ó’åž²ė -éüŠńžé)ń õčEļņ(ŠŻųüŃīŚļō ōƒü-vō!÷AüöĒ ÷.ŁŽŗäööųģē ˜ēöń$%ŗš’ėż™² ć źēüžÉęńė ®ėßÖóź°E)/ķö 4łųĪłüļū \ķļī’š÷ęü@ūPSįü’ļ üöķõ ō83ųń’śŌĻÄŁü Ž`Ń÷ õiźīõō’ł'+ļ óņöņńź ūčńž ĒżŹ žé™ūö ö8> ćÖōžś īšžų÷æū’€ł’żüłŒęü Ē…żģģżüüüłńŪßłóöł Ś śó ųõ–łõō ń 5ęāõšķ6@¼źä%ß%ōéćųÆįā ė ļēłģń6;"7ćčć×ö7ųā%§ž­ -č3(8õŽż,ȼ’žłÓŖņžį Óü0ĮžįŹ/2ģ%ŠįĶö-+5& . ī27 #Õīå/ųC$ź\JÕš ōį ņģõ(* ·Ä- !öŠ4ōć łĻŚ$ęÜżńßż3ģKõšć ü"ūöų"ŻčńžūŪņüļüļ:Łōö’ģźčö ö ęī,(#AÖū:éŚņīõćē÷¾ō6Eų÷2üč? ū#ļŁā*ā×ā4'ā’÷÷żżéć’ļžāöłöų%äW /'ö¼ß;Kü’üķ’>0ŽūėÖö! äé&ŪōÖéÜūćģ"ķū.üóÓę Ģś3 ćõŽīųłōłR āõō ņ õķ  ōūś šī šļō8ņļ ōļ’õō ąń !źņļ5ų ķåńįū+@Ķ ŽLÜńčü ąō š )śćę"ļō /łöśēüĶüó ś#Bį’"’ ź÷üņž øčöį ’ūļ/ēł1łīé čóüŪųå ģō ćĻžļ`ųōźźŻķ’õ šģÜö$ šüšļųł" ķ cņļü ļL’ī óō€ćßņóĮõū ū÷ŪŪ %")!óõü2ńd#’åĒõų÷Żųķ >į² ł ó ūųį óčö÷  éūžäōš ų“ļōūóóŽģńų÷ļ*ęŅ÷ččūžłķöZÖ ļöžńėBŅģę÷ųnĒó ąń ćł÷ĘķĻéžž õźāéėėś+ųł ōö &ŽžŌżõ ņņ  ³ėżółńźżžńģõóćōź8žļß 1źżäśļöķ’ żéFKĶ ü ¹ś į ’čēłåłļå ż ¬ģ‰õšūńśšõ8Xģō `ūų¶®ü)ü ł8)-ž)żöŚń šØń’śš’$Ļ48F!ž*ē$żč÷ó9ü!õź.ńä ųģø$§čģü^Ģėņåģüł`ņ* śņūBėł įķ ųšõŃß ųņ­Mģņ!UŽ’üüśśį )%ū3 ę&łūó?Źųņž×Āėå-ż’óżīēķ“śŽė’ónZę÷":åŌ’; ī53ó2 čõčŪAó×ó '"čÉńėŅž ĀŪp€ óŌhÜcO!;ÓęOŚĮć;˜÷†M“Kų瀁Qųļ{D—}ä`/ļó‚™5Fš€.-·²ö%xź@ć «~,µ =q,ń‚~Į“¦÷ģś€UHÖųśöK-:ž§`Åy54€}_›ŠųŪ×ĢuIāœŅČłž"üāź 5ū! )"ö\Śėķ- åāńų¾7²2ż»ų3żčū.ņ1ŗÓžŠńå"%Żąčņ!ņŠ)ūķŃåīų޶ į5üdļŁéčÜł óśūüéÕę37ó öŃ ųäöźé ī÷ō)ß žś ¶ėøķüåļļ śņāķSō  !ī÷’Ōļ!ņ©šļęņ Ņ ö_ ū”.õčóū ÷łśįÖģ? ķį ų ńüõ ņś÷žęĖķīóżņ óé$šYģõć }öåćšžaēóźyżŅęmō āß’öł’ü Ņ śÜ+’Øāū#žķ%éņ Ģżżó"öø.  ģį’Ś÷śŻņō+ņżōś ģļ ’÷+źžīåļėśbŠņü.× šÜźń ż ų÷ō<ėśå>ż!łķåŚžł’īą’½łõģņłßżŌžŚó!üų žō ßó(Z'8ś ž!µńėČŅÉIēłų ķ+ĄīŅįīĻĪ%č¾ •Qšé &CŻ@ų'E ų õĄ’#µ?čž’Łć¤±*āŚ:| ¹üżŻ6€0Ū«æźŃ,'B ל‚ŌóõÜ|ą5›÷q+& ߀Ŗąž=ńāŽ€ų żż 6 !ū “)ńŽqäJŽŌ×(*€›8 ė±0/ąņį€ģšłŽųżõ*Ųķ ü ü éü ü¾(šķ%š#ņµėä5 *€žķžé H  ż÷ ń öźśBń”ūCļķ ’#Ø’žüńżļž,śåäōųó*ķ Xļ ü eėņāõż #öāéG+ņņū õčźėüśżCńœžōŃūģ åł’ńfČßĶķķŽņ$ėóźåūīöėūß Ė(Žž+éųī Ūīõūż$óēźōų×ßJ. <’żį Ć’ó ×ļ)čšš7ļå!Źšłķ ņżüčāł(öųö ņõģę’ūžū!ÕäK>ł%åC,ŅŲåÕ½īōėóĀ0ź żļżī2ļyłŚļżū_ųžł’ś&ÖĢ<  ų#ä Śē ų%Ė Š öųęÓļ9ō×ųķףóŻ !×fóĄ ń éčž½ą÷Ņ CćÄ Ž­ ß裸śŖŽįü)Ń’ ņ>$4š*Ā/ śó8¦ļ>õü6ćA½ Ć,“ éöŽų ’ ŅĄnۜ ō¦„ų żöŲłöśńżśśōŁL:ī ±Ōōīąøžś÷šåųŻēņżśÆ?ī^'ī)&äčõ õŃIė"&%2Š ų öźģłüżēėō/īäč õ łóö%śļŻ  ō!*żéāŪ&ńńłõ ģųõżÜĶńÉŪ%#ķ$ńūś(āō! =ģéöėņŠ ż8ōīņŚōėåźčóļ ł čó#SŲó÷ō,ņō ū ō žüŹļģ÷īö żŌÕé ģźžżüįüśH÷óīļż }¦ż&ŻöśżŁ÷üņßųśóų÷9<43ē2ģ÷ŅŚī Ü ÓóŻQöÜķ ōĮčõČņńńāų āżŅü’śóõņ ņūņā!€ķüņRų?Łėń : N~Ņ,żņ ü僂ļį,Ūōķēūƒłõ<ńÉõ÷šĪīŃéūõ ’1ż%åūłpŪĪą žš ęėL÷õ÷ßõńļ÷čóż’äĻļē.ćüńķń2$į×ÕēõōLüćįŲŲłį÷ź:śó÷ā®,ū’ū"Iüüż öß ś’ūōßņ×Üśü š čžąJļęĶųŃ/ģ[ü÷ųņųå/ņżńß1 ęåšüń’ åčņńūōü÷ż’ż ! żü(ų ē  ż7ś÷% ų÷ōėģ$ń/ō?öšųČ÷Ū *#ö"Śäõßīżßčöū’ŠéßīņļDīĖł$ļ ņŁ Ēćó>’ č ’īńŗ’ļšż;ę$%—ćłõ’ Ųķ/Üüß ę ņūź ņīō ¹I$-żļņ ųū*żćņń,'ōėėłåŽó ūļ@’ż7ŲēŃ’>žźŽö<ķ)÷š1č賏3ńģśīŪžń@ńģ=źõüļūöžč4ūėį'Īķų’ķŪŪńĪ/łŃśßüū C9ŽŚī 쬒žšąž ä7żz!Ü2šńõ ŻN ·żģłö&ęģ%ź8Qć ’’óģ ļūKåĪąŠźØ! Öśį’Ņ& ģ+ĢT ūŠķšüōķ’šõ ź " üųF3ųāÜĻ׿žż÷žųųCéR ėH$żęōé(Ū÷€ Śōīū’Äōćūź.õō ų ļ ō%š1ė€Õéžüö’śłõī«éHõžż1ž7ššźõüęĶ÷ņōź*öķų 3īųžõN0ż¹āV¢õéė’ åäūž’ÜŹ žķń5„žG:ÄQ$¬äöĄõ™ā¢ Óūė(HÖ*$ $€'éį€Lō,ßē"ŠüåžÜņćäżDó€õÖ|Ė&$ūźĢŹęó ŹĆ’Ėė9,÷ æųšåtXA]óüŲ$īöī'³ķģł¹Šč÷k ó-āHēę£ŲēEfĖįĒīŻäż&"ŽM÷»+4ī ä×’ŻżÕ¼=F7ż8Ŗ(~ĆšŲõ ¼æŪąć Š$į%ä*ājį÷ķąģö õ ż+,×ū žō’õūįę ų"é÷· 5€3ō}ķņž’üé“ ćēóŗ (÷š ū  0ō 6śÖ/žs’ó×õźōźśՀüļūå% ¹ł ą;)ü*$±ŹóėźśūßōšÜžõšó;žė0åßį ŁäöMó ųįńķś  ß óõT łō#å ū ;±ł=ģžūłß ’üÖųńśĶžäŁ ¤8:ż ’÷]@ųą ü ÷åĆū7ńųĶüśß Ņ ķņ  żī(õéęõł÷õååļö"’ģž üįė6!ü ųśķó  ÷FśģŅ2āßōļč÷Õó$õōūū śŌś!ń Ó0/łė Óö óć+’2ą=ą ęü* äõšī¶óųł šļĢ 4ńźūæ8÷+įč ężņņ>āŻę÷čś ’č#ż÷ń&éłņō¹ņū śńWšõ]ż śō÷3ļšŲ ó ģ$$%Ž2ņł÷ūäō Üģéł|« žõüżü’łč ėą,1 ōččT Ś ń *č åųĢś!ūŁ ź%W ·łÖ ļäę ņ ū’ų9ķäų’ć š#+3öŚŹ#žś Nõ÷÷śō5+łļūÓ’õėčåąų -üźõ ņŅö ó1ņåé ×,śö’ŪŚåóś ą,÷" øĖņöžļņÜõūū&<’ĮÅó„R õź łā į öö$$šīć ķņ ńłśų’ żLõśüģó’Ł "ųśņń ķ ī ? “÷ 3 žėī"ķ2šéõŽ71&ł «žļžüõōū’( Lćņīūū ÜāųŚäóčłéō’ÅīåćC&÷#ėųÓųķõóū õę €õłP ž'ōĀ īōżżōōōųéūé×ÜćŪū ŚŃ É÷1łōö’żūīžżž’įüüśģ€žą ^źŒmś ō÷äįŒ( ų÷éģö)üóÜõ ń# ž äĆßa’Sś ūÜåšśłĮśö śõ ż Ū‹+żöł’ģž ąę ęķżź fūŲ¼ķō ļ ż2gåBńŽ īųśł #ōé#źžółüööåöų’"÷’ł õū< ģłüö õ łōų÷’÷öü żōźī łąż å & ē÷ õ/łżõįģ/÷&łłóįķż ė Wś#/ųöī ż’b ž üūóśäüö€ł  ž õ’ŻõžśöųÄ»ģ2ęśž ōšōūū»Üå üĪū ėłōūü꜎#ęŅ īéüéŽC œü"žŌ1€Öå5Øļ€ÖŻł½ īź’ź¤1-ä~ćūņ’@2Åó&Śgž$Uč,qNīęÉ<ē 4ļŻĆė4ö÷īßūå4ėeåźóĘ HGfDN£!śÜL'ūčz&Ņ€ „Õ>TźĪ܇“J€ķ‹¢g`² Ć£ļŁÜ)ó-ø õbŻ÷€ ²©& åü@ų†Øśxüā3ŃżŅ$_ ± ä'Ü;ż(»ą; šü!#C ‡ž<żśŪHś Oūü÷ń ņ%ćGģäžķż #ą 8Ńóó !õśę ō9łÄšŌšģäķõķŠ Aõėļü ā&óß’žņōå© ģ  łö÷Ł’źīå÷öśūØüżķüš ķ÷*ōśxņśč÷ūōćāł•Ä ’Ųö’ śŁóü ›ūM )õ(õżŻäßżłńśóźłõžēśł÷ėų,ķ ÷óųō łļŌź¼?"ś #źóŻó÷óā©’į’ņ$Ś÷2ūčśöļéž§ <öå÷ .óųó óļōßčąńóŁ ļūōń”ō) ėāżķų§ź š·öėōݵ×ļ3ūśö÷óĮ÷ńü’ģõē’÷)š  üīņ ć øń¢÷čƒ üå6śŻāų-’õØśóšÜ³čļč?Ž(žöśśźųčÖé éļ÷ģ‹ė"żó ōōåłž-Ążżēćī VńĘķ ßł*łś# żśģīō÷š āÜ ’ļż™žć#ī śöłõ@č€ šŁüXłüģ ūć ōĮ®ķR$ē’ėķłō aMłõ’ńóśč'ū6īśęšūōń*ö ŽżóĢš īõ  żęż żćåķņHßōÕĀ’čõń'"  śćā Ūł’ńóõ ńž —žķ½ų) לü÷÷0ō ü÷å’CõōłĆśźņōńķš ÷ł ļō÷äļ ō ņ÷ņõ. ģĖ õżī  Ńųłģ ōĻåųżņśą’ōż$żūāėģŽ$śŁęõųäōģ ūéļ żóŠņģ­ķėū čöś(’żžśīģ ųļ Ņö.ż÷zŚņķžņ+żž}š š*ż3üšĘ žĢķų/ė&ö  ¾š ž,ņõņżēę2óļÄūüņŌ%ķŚāłķżÉ+õ9ē׳*īü'ģšń÷ģēō/÷ģŠž,ņ ÖóõŲ’䯊mżĄņń?ņė{-čźģ ī*Õńüü2Ųf)ü<ōżš ź!Ś 7#óś ß½5 žłō-ń GŅ; į‚ó’ūōū :’įŠį*ÖšĪŁš ōžęń%āöŚG’$ūŪ’ęß$öļņčōņ’ā¾ü óāŽīė õ&ŚųĄ é ® ģóģ’* ų!’üŌ%ķ’ņ  Éķ ųüūįüõ J óö$§Įū&¤÷’Óńūē żÕāóĢźģč éč#ķņäż* )ęōų­ķōū ż’#:ōV#ų!!÷.ŹęIēčGźņóüļż#Żė öXł#łøśė“ŃÕłõ/ōöśõņ’ą;ėģ÷öÄö’ķüū ł īÜõ¹ńŖ żóļ1³’źēńžŹłųŌŻÆüæ Ł'& į# ģģ¼ž ŹōńĄFöśöŁ÷£ł Öóµ %,õźūŌß ½÷ź:%ž4Oįüś/žłēéFņėŪžźk¾ćśĮ-ķłÉ÷×ō ÷ėōÓükĘØéƒüõļ) ķ’üļõīųå&²ņųęöė Ą1ż% ąÉüž82īī Ź˜ õ ¼ėżķ"ā’3üąõéėø%ü ūäž>ė įźŌėė šāĪń#/1žßéõć -ä öõ×ųõÜęéĮöÖÜāņæ"bŻī 8ń’FõžŹŲōG õü ]éńĀżįĒ!ß÷Kų,ņ ųōõ÷ió ćéž­ŲżżķōžÜ0.óÉńūšŚ Ēī’Å#÷ Š#Ńķūō5÷÷ źūąå÷ó’*ę ż$čķ śĀÜŪėééīö ·$õ+ ń9 .žāóÖ’ę1&źåŁłžw3ż SģļżķņüąÜóĘł¹üüņżüššõ:Gšć ß ’Żżī żå.üńõ ējüÜŻ ś ōąčłžééö€ūųiė Żń„š! ū ņüÖ<öńÄęģŚśUū Ś%’ūĢ’ęńXßüõ; üėD÷ņÜńõ(`Ų÷å8 ŹŚÜŚąŅ%! ń 4ė ž9īšżü¹łńņžĶ ē÷ ž¼+’Eōņż( *ÜéŚ+ ź2žžūūβöåóż ļüśÖ ļśņŪöżāĻ?¶łŻń ü’õõęīóčö Ģ Ź Ożļ’öśö&óśō ’āüH"" >"åżõĀåōńšņ’%ųēķņž ń G÷K Łģ öķģųżżšÓł=żś ņü&ē.źņ ģėņł÷kóė× 8÷ŻŽÅžń żł*ńńž ’'śģ!ńū÷żųżLßš  ńš Ž8’RŃłų÷ūöžüųīÅš äŻęńņ#÷& óö īūėöżĄ5ö÷ ć÷ļ’ŅųüļM æŃųś& Wģšäö żöžś·Ųņćļ Ä ü ųźųōÕķūž „Žųęõüļóó öęō ÷ķļłź÷ ż47žč’žļč!śõ#ųķō-ē4  ÷šŲūśžżš ūź9Bķłńłą Åńś  ž ŃO Ūę į(ļ÷"Bļōżųń 8óõå’ū ś!#Õāłöž  µ’žæščüžöĪ# śą ģņóŽųóń!éžÉH į ü#łźńöų"ų:’ć& ōõūž÷õõ&ų 0’ķōā ńåń įųšįš\ ł0ąóļž  ö o©Śóõčžž÷5ń ĪÓż/ūčé O +Śųóśüöéå8üöŠÕ$āōēżō"öGūžń÷ü’æå żõ’“ė/ž"ļ°žėėčōāģł4ļ ź2ļķżłš^žčPć õ’ķŃ ßæIõżŻņSü­ó óļŌ H×ń Ļų: ķ śśüä éĢ^üŹ -żK&öŁźņ7ńķÜõ¼Čöļģķų ńģ/śó =%óöģ×ńīŅÜėŽł üČ īųäżżń ōųńń3čś"– ōæį’ śūŻė+ŲÖń ō1ņ’įÉą žņńóō4ŽļB/žą$śö'¾ź"ėõńüź#> 4ūž,ÕņŚ¢ģĪ’ õļńöųū ÷ō žł éōūģėąż×Óš/ ė%Ü0Öžõ 蟎ó"÷ółöž łžŌ÷šļ żų- ü哞ģZ óī ęłź'ä’ž#įŁü÷Góż(³3žõš 6ļõüćé#%ןKü» ņžŲõł# Ūš'óźš÷čPŹĆżł ĀžļżŻ ą’ó$ųŌÜŽźņļŚę ÷!šģ ģü %’ķ0#žŚż’ü"€’ōćÜŹķŪŲūéü üü--ļõ$ó€ÉķćóQöż9<Ł,€ųé#š Č'ū÷ńøä²óŁöķ³_Ķ#÷ Ž€ęö¹?’īķ÷÷ęńæ?ēó’ öüļę+ėĘčņößžjŻūńÅ "šĒÜ"óõž&’8Öņņü)"’öėšńĪźŅ÷õ’čξĖ›’łņŌŽļėņēöīėįłģŪėžż‰’įļųš ņī"÷’āóö "Žé 'ńžÓÕųĀņ öšŽłéżź!äńžKś ļ ÷ō÷÷éüž ×ļöń õ/ä%ó čü³ė:1#ŲéA éõĢü#ŲóöRśN4ū!īāōń »ž’ ÷8üļį ļ ō šŽį] ś ė+é4 ō(-ńųéõõŻ ō6ā)ó ūóųō’óēžź’ģų)ī öŌõ ųßöųŚ ń ¶ż żģŌ óķś×7ōö÷äóÜķž öķŁ÷¶óéśū¦ 3žļśž%šł żµ ü öļųėźäģ&óĘ! ķčé÷ż’äęEŁą÷śöēķńü ś (śÖ éé8ē /8÷Łłōśłóäūõś ÷ķż*ģū÷÷’×’Š0 ōüõ 4łõåų÷}ęōģ¤łō)ęģųģˆa’źø×ś‡õļūųńļĶ’āģ ¼ž€śōēŲõbóā ē āņų*īI[ß ä#5DīūėüĻ’žńUļŻž&"Ó š`ä:õó ģķß,ėķūžü ņół÷,Ūü ų)ąō ķāüž į Oźöü ćŽģŹōśūĶó’_# ū ę=" ųŁóŃå:õųōłņG ś:ūź×åŁ ø÷žõ;"čļē ź5õä-Śłöä÷Ģńō'óņūą÷’čéģ'ŗēšžńÜ4)į+ źżź%ļżöåĖ ūÜ" ūžŚē Ł"VęöTōśčųžŠņ,ģż ų÷ī"žž÷üü>Ūļū ķöņć ’÷ž ,’ų"üžēśś ōõłń ųó÷ī8Śó,ī' Ņ÷ ČźźśīųÕżō īīóä ōåö é’ī$ö0 łŻčņöXłśś ņż÷÷ķ꿎ś<÷<  žD żčśīOĻūų÷ūśėP ėžžł4ł2õ*óÉ! ō(ėōęņ üźõłģņŻńöéłĘėū’šų 8ü!ųčåų’’ūńĢ÷õ  ļóõļÖģś ė÷ūźč"ō’ ’Ł ń ųīź’ī ųžā ß ļżśüÓżłö ä7 ó Ū’ņ ćåļ"ßģ /śóŽń üóśķ+üżóūģś Éē-Üü¾Õé-ķŗ" Č÷üč1<óŲ üńĻń÷ōķżÖ?!=Ü.Ņ &ųŁ’ęó&Åāīįżņ+ļįī4 ÷ °ńOč-’ĘäĪÖ żēõķĶ÷Oļóų  Ī&Ź! ŃßūŠą ęģ> öī łļćšåńÉ åó ļūąłėłŁń#ģöŪśśØńö3õ õQ’ń'_Ųżųó@ž žŁśšś\ä# ÷  ś ļõžóķšūīčń2õōŗ/ ēśĶż#" įųõž# ‚ž÷ź ž0æ’ģę’Äļ*śśųō{ōō üüņķļęCö’÷õžąśč õž'Ēżļžóī ü3ŒģĘšĄöųaóĶ:īżÜTā Óõļ ė!šśū ū Eļķłö*šńÜ  # Śž ’āE ,/Ł#źŁō$ųōūå-8óöżōżæņ%÷+8<÷Ć*¾ßģēÓżś øBł Āņ'ĒAļ ķ ņž×įż+ ībßĖ~ēäęüŁŽōŗļ@ėūł5’×óńŅĖšCļÖüĻõō°NĀ÷8üģ/ŲŃ 6ŌžÕōįŸļü×’ąšķņī+CõŠķīśå ÜīķłžßÖäö Ńž óŪ&’÷ õ·ä 2ęēä5ā×½Ėõ' *÷ś÷õćšī’öö÷š)Óö=īūŚķś (!’6īŁ× Ł ÷ńé'čõļš÷ Šł)óä (ģżųéņ#õ8śĀŻ 'łķ BÓś ’źŲ÷+ų -Ō ņłōłøŚ*ęįšš ōōēõĶłūģł õóęėÕ)ōöńžóųżööóöšł÷÷ ģīžė„%ż$ńż79śż’>’īż÷ #×ü; öżšč$ö,üģńĪńśüSi ķ’čöü žż/Ė꿀 ķšüżÉī„ ä’īźœņÉ÷Äāüćń ÷!@ šÕ'ī÷T $ ü žä2ļöūäóé ż’’śųŪÅš4ī ųųńż÷ ūōśö ļ%ī" ž’Ń!ųįśĒÓŪżģü÷õŪ īĻżŚóÆČ2ķšųń ü1ś(žģ śķēųĀõłęŪō¶ģļł`ūĻ ł"ć*š× žüžśøéń üź"ÖßłńŻéü ĘōāĻé’ ä3łćšłéżŅś’ćłĪžżéEåü÷öķūH¶óōž žłķēõ Æ3ōģł#ł $’ś ŌķĻ: “īń Ń ź#łłŽŪźź÷Ž0 ū !) ń’ īżś ī ÷ü =ėšĘõéņóżų '=ßóēžų ģ )ó’ c ōēńų"5ē ōüść 12 ŅŹ’ ųģąä ¾ž ó ęņąžüöóģż 78āśŌ< źžńü±ėģŁšüż ūĘå ō÷6Ļ÷ ėćĘųZéõłšųčżčŪ?ųųńņ÷1(öń’ūßīčõ÷ü ėźń) ł D:öõš"ī“öžģ KĘžŽłųóū&āżųüņ“ąüé»÷īņń ` dół>ųŪųķšõMą’éłļč ėėōüŃüń ąü  šü’üżłĒüūéōŌü÷ ļńįōźųģó)źä žļūąžü ūź č  äģżåų šūģÕīž"ß ž’Ėķ ėęžłņī ņ÷łßśł8ż% üō÷õńż9ł5śžė Ł  ųžķöļśõō żńō ’üūõųöż ų īéö2 įõžõśńķółüīŪó ķ Īš’ęÕū qūžźüś żž’üģ ż üžę%Čłųżńé ’łłųŹū ł ųšüü'öįżķöś čō$ńļłū ÷ö ōé žņ¾ æūņ öļ’ö Ó óčżų 3  Õ ھķ óõŪų’Ūę!ĒéćÓČ$Ųų óŅüäĶ ž/!įšĻżŃ ųŪĆž÷Ņ ’kļ-ōZźś'Śśčļ7JęöÜŹöļ āśėż śŚ½’Ū7 ņJŁ%*łż@öėśĶ8śŹēūīļžīöŻŃõ Ō¦-öśļó×ūż! öŚ,# ś÷š ÷½ń"ū½÷ "½!!ō õöž õ ü” #ęüłūś*÷üå  ÷üž1’ó ńÖšüüžóóęēöūłQń’öžöåüó!öųöķõDłū¾źŪ÷ČźÖüń ’ąĪ’ŌŚņ ņ÷"ō!j ńQģ ųķźśü÷ū÷ųķńļģ%’ŌéōŲ  Ķįų żūųżł÷ōķųļóēŁł ńń’ļ ąģ5žõżżł ęßū *č÷ūņöļÜ€ęÕšśŌśÓ śō÷üUźéūō2ėĢūłęņōōķśõńųųüō ģ ļµ’ņęčūżīłK÷  čO÷,ü ų9śćņüł  ’õžžõ óėćó į$ū%4ßōŪ ężŁūńė% ął.ŪūūēĪĪ=$Ń!’Ņ& 'ŚäSėłÜļõģ $ņżÖż3é"č5ōõ 8æŌż ؤגžß)<ļßüż ( ,ģüļńūöüŁZ2 ü Öó&õłėšż!ķ,’żųüżü)źęšų’ō ń(ō ’āśłņęū’š3ų śžóčä A'üīóŪāš’ ļ÷ķ2ūĶé'ø %9 *ńž š3āśņü ż+źėėüłė įü4ķś"šįŻō$Ē’õõ'7ūž÷ļę!åū ę)įĆM ęż iß ½Ų&Ł1&āåėļ"žÖšū!D ßķų1ż(ł’4 õż ŖöńĪĖś÷ļįó õ’ūūśü !÷0?Ģž€ö’ ūž&ģčōłüżžėü ééųü š~čäü’ā  ķüėŒ ż4;éń4Ł÷ā¾ųč ōłś·Æ ļ  ż/ļśäś ÷õ‚ć ß× ) Ż« ģ’óģć#āš ņęūüūōņń ōéļüõt€Čä Éōõł’öčńł ė&āń÷Ń ÷ śńķ Óõ1#5óīź ÷’ōÜ&ōÜī ņ’ŠóÖų!ńīž żüśö'ķ ūń įó&ļ)æ Ģšųž"łųū2 ‘ĻŁķ(¹ģööüäó ÷śųśBśś īķšPü鯳ćõ"ģņ¶$čīłŃ  Ż į-W÷ ÷ż+"ņū€ļŪżėŲīž ść&Ļģšó” šIö åņšDüņ’õ÷ń !ō/ßšūń-Nńįżų īķꚬēū*śķ’/Ė ś×ߌ<0īųõm <é÷'ģč’#,¢ Äūłų’ćķų’éÄ.õłū µįĪ ū Š#ö² ń Łėšęįõēøé į ’ó8źü¼įõŚĶ ļję’īóēļ½ņóÆH ņŻ÷ņųūķ/õł+į"įī7łāäņč ķīżČžÕūöųäżīŠž ķåžų é÷3ß ń/ņ łļ*Ž9ßÄūņõåņ÷ņ’öļĶųü’VĖ€ūļ×ōų×īĮė+ā Ž" ķķćóķ’ Óūę",šūQ7÷ ćč’  ²üū ūś\ń@žüųI# ž ü2 ōųéźā óšÖŽī ę ń*÷)ĒėśņõöńūŲõ÷¶š õłžÓłĻĖü¾ ū’żż›żžžķųöļųųõŠśöūō ż ūAö$ü²ķ ō żųōŠ - ö żš7źøŪ€ƒ\hÜRŽ«‹g¶ŽŽÕ/n hœēė,aA«Č 4öśļ±?€ Ä?¤Ū<28Ģø’~ ³7 ² ść "DÓ€²•¶ož€œ°žū€@ XöÓÜLąźÄōÉ.Fˆęłę်ŗZ€Č™R…~U!H$1Vćü)Įb€xŠ#źŻĪ šćP&yŹōO˜Ö U÷&š² ļĆļõ7€ĀĘē‘ś—ōū€K§#šūÖņūų 8ŗEürŗ#ųšłC÷ü’'ģś ųŁīķž»ńÉß.!ń # 0ę Ņ1ńśōēž7 ńžū°+’ć¾é)ņ źÓó’43Śžčõų?›õ(ä0&ē’$Ūų-6żśū 1'éļŅÓ(ķ*ü0³ī ų¾Č’ųÕνųśūõ žŚóāÉāōōō¶š ōāŚżĘĘö ģ ö ÷ųõģż ö÷žā #ōü!÷ņõĶ÷ü! ņ-éśń*ś%ćīT  ņłŲ ŁÕ’÷žó÷ģõķń÷åļ’ū;żFģüć"öńę 'ęż ł÷ī&šųśłó ā×ģ#榜õ‰äū š ļ ö üłHįCé ōūž šé ģč, ģų”’9#ņó ļ/õĻüź’Ūõ+Żöé"ā#ēŌėśĢ’ųś’ėóļėĢßÖ½ń’"æƒ"äėµłņāōś§ńŌ éśD- ßźĮ295īśś" Ƴ łéģķī£ #ć%óćIåąįģpņńėŻõĀ’K /šūöu Ķś÷ćģ G­O pÕõķ’ é„’īēM ńö³ö+öłżół½šńńźž’Żč ēŅü²Ų$ łć’ü üś ģöīōū÷į šóźģ @'šöżüäĒ8 źś Zõž’’ 7 üꎜ ńO õ” Śźöõ×óŚłļńŌōłĢū$ö/!)Ż ų čżļO( ē ē(Żó!ōŲö JēŠ ā’ķ ’!äśüÓ÷õć'ščõēńż üżśüÜÖīćļšū’ļ÷ńśōüōžż¬( ųŪüžżõ š źš łėōžśü÷õņ īō śšüļöģ’ü ’žū’ķūśö õ Ł’ūšóüśųDõ ÷I xżńłžóōƒ ā”ųū Ō’“ņóC ųłüļņÕąųžöų’ś śSūŅAšłł÷Ćó ņīDöüį N ś īē÷žö ęęUżō×õž(ū Öų1 šłóžLģśĻķ ūł žßłĶ ū@Ś Ś łžõżņšõķüž õśöģģņīņüń ł7Ūėåé "¢żłę  'ß,Ļū 2Ų¼Ī"üŚčūśµ Ćļżņö’5ņę č'ĀēżåŽš& ’ļüéČō  čųķ÷ē÷óēüé ņę *ę  üąöłł’ ąč Žł1$ł"üųčŠ ÷ńū÷5üšą<ńšŁżļłŪŻ’ų•ź 'ņż’ū-Óūōģų’¼D䀯 óź8Kéżü÷ųīūŻō łćŲķÕńŚÜ ó0ć* é ī ÷š īńćīžšžŃņ7śń÷*’īÜ"ūēČ ūŌ¹ėņ÷īćŲōż0ķżÄ æ’$’÷łł’żś($żüü õĻ'ō% ÷÷&ńŽ Ųīį÷3ūēģ ļß>õ÷’įģģņ×ģ ó÷é9ģÆļäņöļåģū2üń Gćļ žōšķ ń BżõåŚŚę æś/óš9õ ō ķ (ńģü8ń¼óõśö ń' ¼Ņčļņżī< ’įśĪóė üüé¬ėÜÜō÷õßÅ-ņ÷ż,Dōśė õāöėó;ńüč ńÖś÷1!½üš Ś !’źM’ł šķł ļö š(ĖīųĻ ł% õaż 7ų䁑Å×)ģō łóé"Rļūūūįó Ņ#11ōØ×āäåĻėū’śĻéŽ÷5ā !ĻŅG ü“ ż!żĪ  õūīł ÷žļųõfŁ ē;Aō×ö“ŽIühå ĻģŽśąäŪšēōõßkņżūēvåéōżļZ4 Åóķ üē}ßGåłāį ł($ óžśüóļéņłżöēĆ Ü ’Ū  ż$Üž5Źćļ ÷ ÷ā)Fū 6‚śē ĢśūßåšŻĒģŪ’żüóĀńžō+ś’ž€ ķ )īüō’õ8ó)ŚĖ$1āžō=ųåģöćēžćčźėł÷’é’ļż÷ę Ė÷ņ Żöżž Üūóš ‚āųńķł¼Z , "ū ż’śćüóśóÜŲńĻ’ż$ėłżńšś?īņģ ÷éćöūö *’ŪūżāžßŻž Żš"’ńųśž’ńü’ż ęBīõżžę õ ÷ī³ ļ#€€Ž÷ ’ōśųč wżņžąŽ óė~ūjąū,ēĄ1ų žäžüÓņŃäńüį×%Ŗ!ÄĄłęŻė6Čļēļ  üßł&.ōK ģ’äģīż„^’ņü·^*š’›ųõˆ Óöžī ŌÖ ’ Ą(ö ū žĻ ¬ųć łīöó€# õņÜßüüģŠČõ»żż'Ķź %V€ĢŚžēźķBūšģē~ü’ėõŌüł¾öōVĒåģ łś€.Š łžķßāś’/š p’šäüųņļ ’ėüłö)ż łóõöłśGY÷ż%ūłī Ęļ šōų Ä'BšņóčįöÜ  ½4ł÷ķółn’ žĢ°ģņ÷!ėÖYä"ö/õ’šų Ū§łž’ ßū¾å ų,  öIž> õÖN ö¶ķīŅółēü÷ åöŌüó tūŁ@ķNéīļ`€:…*åķłó-~ō6śóĪ^śüņB!ķŅŚŹõy3ļĪõ/÷Ś Ėl_ī ś éó7ņōł (ŽūąĪļ#Gųoł’ćāśŅīäĒ÷÷č ėż/H0ė÷æŻĒš € ūŻį+ā3 ŲčõOš")éóś÷±üń°1$ČGņ€Ü Eõééņ)€å'ŗéķžĘŻžé3ż÷üų(ūęīüŁ÷ż  ņųĀūņžģļż’öųģōšņņļ“Ó ’śģé$ż÷Šķ ž¦é ŁSōöŃ0ŲģłöōöĄ ūčā÷žbūōžł”­ś%ź÷åųéšńüž ÷śś < łśļ ÜīīńqåéņčńŅéļų īXż÷Åż ś.0 ņó 5ż ž čąü ń łżÄ÷Hė’õĢģīÖü žó  € ŠūŪūń"óśčłčS÷ĘĘŽč0 üĶ÷š łōõó&ī’śųĶĒ Mņģž% łļī’’ ą§ł č# ś@ ō3÷ żó’ėāō ń Ą&÷õł;č ųųøž Ļō?üķöšī#źšō6"Nåöś€÷ńõżćšģζņöźēņ žµļõńšĒųåł ’ ßėł׀ĻAäąĶŚ3šļę2ū &Ś Äõń Ź śÅ·žäæżüśĘKš9š÷QFöĪūGėēÕüūĖęé’ž’ēš 4%ÅéžöüŁ)ŃęÓšŻ ī źį®źöź’ßžģü°+ Ń ųTė łōöö’Łüķčśšżōš/Õ$š2š ŪÓ #čöÜŪō čž +ż ėŻ÷Ś!Śš§õõ+ūŪ łžžū#õóó  ńź 6łģžõ( ’ ö  $õņśņūųā Üā š÷ķęņūģ Łņē÷ Óźó Cļģ#śŅ ćč  8åīķüü;ā)!Ų ż’õ (łōėųs¦ūółęü’śĻ~Łē#ÜŪųžŌ’ųż3õõėėś’óżā(žŗ%>ņŲžżęĖU$ųśųģžzšé§€÷ ü4 å€ėę*īóßłåŲśųąō’’Ė*óģüüųē’ż ÷śōēŽżäū÷éųįžššL)÷  ži’÷÷Īśņ’鿥āõ0 ¬å ÷÷żłæ¶łŃŠ&üę6’į“'’/ģ’/įžóķóż ’ł¼ų üŽĻā0%ū*ŁÄ’© ×čśÖŃšōžū%Óä’ļ\r"ż ółõž€Ų’©  įłóöČņ÷łćÜü&ꣀł€ł%ō ū ’ģłū÷ē4ČaCžž Óüō Žüś™ł¹'’€łł ¬ éģž¼¾ōųi[ū€–Ó1jÖBCBĖGŁåCŪM9ē~rµŽęųņɧūžSń3öī Äü€źFĻßķ›|9ģŽ*Ay{€Ÿ’€DÓ»CpĻūĢ%ŪŪ:Dæ%ć] ü–ėž+€„…ł½;ßȽü%”pÆźEĖõdņŗDčJ3æįå€į*‹Īę/ /ćFīžĶQ’äf@3ūŅ![!ł`į¾ģ&üÓÖL˾įÖįśżüģņA÷ āžīł ü2ś ž’ų’:Ų’äł÷ .#óćü+3ü.üńę'’ ś÷Töūūžņ’ ś ų ų üōööõ+Ī €­ń’üšņłśģ{ $įģ&œłüüśš)ū* żżóźŻś÷ęģ’Žś.ģ'3×ĖŻ*÷6€ü¾šīķĶīņü ŽH,L%Ųųćōäśž¾ņĒÉąDłÜ­…2÷hęĖ€øÉŃ ńß{ł 䳎IŽõ׿! ~Póš\ ūõēźŚ× #× öõ ī Ć ©ÓĖP;)ŽÕ ’ īŌRČŚkP&)¬+0īŗd3RwēŃ$åŲ)Öąšź)"ņ ’!Gāł( ō%ŌŌóżüų÷ąśä ķ ńńłÓ ņōć’ūćśį śüłż źķŲōüļņéļģ- üöŚ ōīßāßą žū ķ ąū’ ą ū&ōų«öńęA šė!ģŻīó śśłļšė žž ų ņłż żūūūč(ųĒ÷śćüęšż’ūźżźŁüńüÖčŌėü’żįłūöÓėŻ0ŠšäģļŃÜśó_Õ2)ö"åńśĻå¤éžŲķ7āü އ9 ō ąāłÜžØ$ź:šļõ5`Ń÷Q\ 0 .šłõ/ēĖļ;ćÓąū€ŚüźP S/żéėķļ’ŪŽł/÷č 'ńźźÆļæē÷ōć’0ņEģLe'öõ3TŹ"ķā$į6Ę÷(V6"Ż ģść8žõęääżģ’õ  ņķ' +÷’’ßķ āŁ÷-ōĒŪĘ ééōöū’ą ėōś’ žģōöłłö÷³’ūōĖžv ųåļõ  ś’ ūĻ Nóš,Bö łķ€ć 4ē’ĶŁŃōæņõńųõךųlģ÷’ŚDśģ#ė .åæāų ņöļļ6ņõżéÜżś’ ļšüĘōķļļųóÓĢĘÖ/ČŚŚ’ęšń żŲžš"šŚś(÷Pą\ć ä":GķŪģ’Ćō’čėūņļšį;ŪĖßéõ²õž -Ś öęļ=żķ:QćåČūšŚ.čž'ō(ļ’žā Ī}÷ł° ó÷ņŅĢžāģüXóe׌żōūóžńķźš° ö,;^ī§ #ćēž÷üü ģł )Ķöśū#ųåś ęš"ąŪēŽ ńł ’óĀīōū)śļžōķ )ų€õŪÜł›ąē(ķ éł0ŪōļüīIłł &Śżśģīżś öļųų. Üčč_ėóžč8éKóķžžšōūśļśāĆńņ ;żHżŻüéłų ÷ōūōźžū śĢ ņØå%ßź óšóüų’čńģĒż:ō ¢źņļėįB;čņĮéōüĻšó żµ1ńÉ&Ē1րė2į+øół³Ž’ šę³:ņ“õ¦½ēčć® %ž« 6!üĮńEńŠõH(ß)¶ŗėóŪĘŲ~×ōŠ ĻéÉgö š W(€ ē$Ęāś8>(!_ćõēŽķ>ł¼ -ŌĢģāāīłč&ŅńPBäQI|(’Ų!?1fäÜ )<äĀäF6åžģ,ńōÕ"ō ņéšöķōĖCć õŅ ŻööČ ’ś,-A.Gąå ę Źūóõš ēDč’ ! ūŅ/ Ć ń)÷'öęśŲ śęēõłż4ńōß%Ż+/ņ%æś’ųéļ*šļóC׿÷įł* ļį’ņ$'Ūäū.Ōģ'+’ų­ńZüå 4 IŚ1Ņß* ųķōīīå: ōÄó ĄŪŪņą<Ūśō÷Īłī‚’÷ēīė3Ūńśņčö²ŌšžæÜŌŁ IķžļżśĶūüźęśĪś %ŲÓęųŪųÄ /\ņ ÷ųéüåķšéĖįénķż°ųJū Ąö,ō§8ćMé%Õ*ž üģāYĶŽ ē÷Ö å Ņń H÷ )ćļÖÜńÕŪńĢņč" łī üšž‡!śńśĢń ąģŽŁ­óó÷žü!ųüåõś ńÜ ų łļį*ü÷čūžé6 ōżōī8źč īź:ż@ųi’ģÕŠé’śQķę’ .L Ōńłń’ņčņ’õ’÷ž/’ļXö3ūÕó’ś÷ł ķ ļźśłųļūć/ūųXś üėņüŃī ²Eä’Įū ÷ć „é0¤ūŚŚ!4ųõ!’ž<„ņ1įņ9+<ŠńŽG"ų‚Ż'š@Éģ īź’Ķļ=ć&ņęė! įč®(ķÅĪųć“ųńś ų, )/Cś<Ā+ōć 6ż»"ĖõDüŅ+å’. ćõā*8žż õöĘł/0S@üś[ äߌź-äūåż&śėõŽžć’ ŻāóŁł žńÖ ō õ)+ģ Šų Ū  ö3 Põ ŪŹß>śęų°ł”ó3óģśćąÕ [ß’4Ņ&ļī höś!Āīč é’ķ,Jš»ōšļ=ķļü4żūńõö ģžķ 0óēżŽ ģ’’’žģ.*ö’üåś żÉ1ėśŌõ,žćöžööąķÅ+éķŠńėł÷å !3ķŌńėņņäCüż$åŚĖ#ńņ* Łō,ßTäéüÓś÷ żÅń$«ž)ńÓųśį(éš×õ ŚóĀųē óōNńU <ķīŪķ!Ų#łčŲ?ä'Ņę€ āó(õłŽõ’ąü’ųt1ēōśńļł“­ öų Ņ $ķł÷ģüüŪčīŅ śķ ÷ö(ģéłż ’Žłņ#śŃü¦pžü"īń+ Ųü6ōńŽń’ ėśūĶžÖēį鿣śś¬#ōķ-żņźüę#ų łńłó’ćņńÉśś¹ üņķśū€÷ćĪėń üž×üłļ ! čģćéźķż ’;Ą4ףāķ&ø Ųūł žč ž üóŲļų:#üōžļū,÷śšéõ’ šė߆ņšžņńÜļĮģüž!ł÷ ų ųčžĪ >’ĖśöÜ ųī ųéė  ų  čōąžųŻõ’óę÷×üĄō’Gę ņåč€oõüų 2!ūAś % Šūūż śąõ’Ä[Ū" ų ķ.Eó šōžó  )ŽŽūžŚł ūōńóéųļć’ DüVųīņ’šż ģ $óū'ÜŚżė$ ąššåłś! üź ü( ’"ż#õĪ÷ģ ņž Īž%÷ęōś"7ķ’ ÕįōéųūšéØīģ$ś’ā(ÜłŌęł_Ź0śüžū" ņõń’żųłõé÷ ’īķÖÖ  š"üń=’öū žūńõå õš#ūhīŌłźļęęū#+ź$éĒ÷ų ķ÷žŁā!ę#ł ė >ņ’ü‹,$ $śļ’ ņļłü’źŪņųž į Ūżįē÷ö’÷ż žÜŁēö1åõ5šś/äóķ ūįäś%šóüü,óóŽõäõŃ ś_ čα<÷ł$š/ ¢µ€ńĄ 0 >ż¹ž ū śš äžé­õćąłśā/IłµM<  BÄā÷ó£ ģž 9"šīŪ„)ĒÄ0śæ÷Ö ß9ö Ģł' ŌŅüŃųŲŃļģšķ õ ō£[ń)$¾+ żÅNMĄ¬šõ&ł ”ėFķł ÕųŅ$,!ų ĪūJ ×Pć"óżėå -ųżéš õüõęō!öĪģ õ$é"! ń ćé "ä»ÉŻī0  ļįżõżéź  ųåų± ė; 1üüś åÖ* ć(Üćś Ü üū  (6š·łłä É ü įßÕļłęÕóøśŌ üųčåü. źž*.ķńå/óĘčeŹčģr’ķżģģõóßųĖŚåļķžųķļ7æčżõ$Ī,ŹīYųÕ Ņźüōē¶å$ūęžīł ńüī?öĮģń &ØŅä’ źFMž’öį,!łčõ ó €łżĢŅę6ž1µöõśķ-Õā枎 Ü>( ß/öIMäęłėņģļÉžNņŚ ćŽ[÷®Ć;ī9÷śš$ņ#’ģųÜ ńķķńģ0Õ«ō źźŪ£äéźÕ{Ō¼ōć~ńöTōŽ!ōłĶń9)SóH©Jčä# ĄŽ׌ č FģŅTü1ųē'Š 4ž!ėūH8š3/čŽßüļ;¬#ģä åųC)šÉ*å/ 5€ł"żūéłŌŻéÖåó īńJłå?ń!:É9żŻüģĀżįęėŲė‡! ÷~żłė~ńźÜ€³Č/öūłš’ėŪ?ķųž8ņźčéāŲĢŪüņöé9ąūšČčåū é~ ś āčüå öē*š0ä3 ęé°žł|Ģżżī’+ķū0įžūčōč" õŻ`åO €FBėķśŁŚūóżyųõ¤Ų9G ’ü ō äæļ #ĢŌ’)é- ŹŪēé& ’ÓżņėĒ6õö%źōŠ.ū ė÷śšūāżžźłŌüH" *$žöżćļēńņÕõéć ņ!õ% čų©ėų$öīų öłų Ē ś ÷Ū ,ż Ī +5ōžõ ßņęnŗ’’ūõ¶Öī×ķļ˜ē’ 4÷Žś’śź’#śģż #@»ģšū÷õ óżü9ćQ ł/ī3żūŻ ūś$üļļü6- Dņīśßž,Ņ : 'ęų˜ ūéųī ģč Ż’ąfŲõģļ°cŁÕćõõÓ¾ź ń&ēūō+‰ģˆ²łīIäņ0;»ģóź2ēŽ öćLūŁńžĆĀ$łįFāūFč+ģ" Ų Ķi?÷KĢļŚčY%ēļüūłó1õ[•ńņģųųśˆ°ö× žģŖ5ž.€į’ļ¦9MüśĢŹSžäįžūōņžįÓō ś ūę’"łźå’%+$4ģü   ’;ńō2 ļ’Ģń ōöõųČ’LäD’ū ńśŹł ų9õEėėļųéūń.ėŠöå÷öęų+ųó%+Žōå÷ļļ Įųėū šš#ŠžņīóŪęĖė āéõ2śõĖä÷é&Šó”ÄŻ0āā  ü ćźģ,-Į%āöRŠ'Ż}ā'ć1ņ-ÓĆų *čŁŲ żS~ō'ę [ßB#öąäj$į’ųśSōš§ 3ł\öKŃłž’žŃß #Ą Ē üҁ( Łóóßó ­*įģµä%"S7ž’ÉKįė!āīd :¢2ż Żņśß Ē võL=*ßųńģēįČ ųņ:5 īĒŪ÷"ü"÷ģ0ĄÉńü?ż’öłĻäŹeéćč’Į"Ńćåń+õ“ Cź õóčĖ Üźū÷¦Śęė÷ß%åųęŠö5õŽóMäŲķźųüųę+ķ’ęŽ*ä  Lųłół ó śżõčūģńż"ņüņ8ųźĻēŃ īæ  ’õåų .ņīīüė ņˆõź/ŗŪöĶ<Ēüæ%ķć" ÷0õūłZ,\ŌŃŪāńļÄ!ŅĖDAb§č<ģYö ż–6-÷%J’Dõł+Ä QØēē’ńŚŽÕ¤Ü±;öćÉģVß6SqÜÖģī €[Åč)y€÷%” -~Ž_¹%ō÷$"šüū ģ'÷åäė$*.4~õ€Ģ(ś[ ö‰źģ ¹ ō!łm€ī9éķüśĘüńó<~" V†ūÓåłĀ)Ż“śå é2”Ię€Dš !÷7k( Żżė ŅŃVłž L/Oņł[é‚"’Ö%0(gĘņŪńÜäč ł ÓE #É!žIEžüżźįłōżōé*Ū怿·+żńéŌ=ģö>ź ×+šģīģ¾Ż%Žó"Ņ"ų{ē‡’ŠŹ'ōĀ 8J™ äō);õéńdšķ¬öŪģ3ó .  "8+śßōąö 9īōõ 1ļ ö Dųš5äōž?/īł #Ēņ’ūģō†ē.āåÓÓ;’šĒ$Gūł2 H¾$')’-Sõd ć*ĮĘųśķéU÷[óŻžī ęÄüū'äāŌåß(Ź’  Ķ ł ķ÷Īāžī"÷õ)ķõęŽųī šŃé*(ū“óüžßü“ŪŻ żüŻżó-)Ņłź<ų 8Fēą'čēūó½ē Śī38ņ0ūžųĻõoSōšÜ$ļ+4óżļõļč č ÷$ļ ī'÷žł *ģųūōūŃšłņųś÷ēī ōč/ü;ܶś ĪŻį’łł5ęAõōśü #łéą’źņ’šÕóŻ÷ ēŁņčåč ŅöČöńēūšōż)é.6¶÷źŚ(õÖö ūōńŃ" ūń ć%ų)ųśóŻż1ńĄMɹėDÖęåÜį9ų@…ōūĢīš@ūR<ŽBłĻł'ļčõ€ö÷ŲŌ n-åā½ļū čéĮö)ź#įśŠ9& š$÷'é \ ņē€QĻÜ!óĻž ­ņ33¤ĻžłĆü0 ŗīčžę.€īśļÖ$ õćäĄóĖł/īčgÒdžźężōļį4×ųä½2³ź&åņ  ē7ņ»Ś³źŲśõ䎒DJ1éüŲóŁöōŁī( ėņ E+¼1›ź6ļ#ÖΊō0É÷­«ž5 ėż÷¢ųó乞CéüśÆčģÅ%’ņīžQšćņżųņā2.ßöų«€śīįgé!óF)4,°•ėŃś@éS¹ąžźńE7 ķ ū!2éEāÜ)±źüīé÷’ā÷ 3®öļüA…« ō iČēļ¾5 üłŽ$ņ9ńä~4üōžŽāłÉżģ Äī õ÷Üõ·ŻŽļÜ)īöķņ#³'’ķōź2 $ø¶ćTź ÷Bčģō’ó ßį÷ ģ īäŪńų€·ūīķ éżłņüųÜęėņČżö łśėüįż} ļéž’äŃÜŽŅ-Õēłüöūū<  ó>ņd’ DŪŠäžõ€źé éšžžżśō@śõŁšūŻu  3šž ā’’!ęžķßłœäņõČŠéŻÄüč©€®ė½čäpļ’¼N; ·ć>ż÷"ĶūõąōļŠłćׄä€ ėĘą 7! ś€Ķ5Żźž)óć‡č&ę0ÕĢ .§śłŽXž*æé“ļęõ ų€ędßČ’Ā’ó+R½ļ÷ę’żÖBs ä!ų Ršō€ ųöķ TŪŪŁ:ļ óļ’ō öŽżē õūū&šńąąēōć÷ ŌĘÖ÷ä@ųĒŚżčŁĻÉ ć<žéšŅöŹŁ žŲŁ  ćšżūłę%ōĶōł÷#8ģń7³Iū×äņÖ’ż×B  ßķŻ5ü×ņ›ū’Šķä Īįššžķēōē3ä ?AöźīÖü(Ō"ü4ōē­Śņ Ś#2źī9·Ų» ķ4&,ū č’ųśł×’ĀłļżÓˆ`čāßĻ ęą.Śż“ų Ŗ c ńśļ ū4öŁśī Ī&łų,Ū!ą}ł-ś3åļśūėŻįńżó –ōģļÖ äīōHė;€4ŌŪĻāüJ÷„ZķųīŚ€i?Ž ~dłčüąņ9÷ö3čš, ŠåęōżłģńŚ ģŻš5łöī÷÷ ż ,ŅÖīūš)7ó  (ąūé!$Ž ±żč÷żöńóüõ ųšļńž ŪŽń239ė Ņ įö ģģäōšŠõżõ&÷öżćč Ā ’!ä÷żšūõōé ņōõČņķžĄ ēéåóķōķńŠ^÷÷õ%Ü śÉéś"ųāāęčż 'ūųŹļõ æęļĪ äŁÉļĶq#śšź¢õķ2, ķö ųŌėā 柎 Õó(ēż MÜįüź½łźģĻūėų ü##š2@# ŻāCā ć¹’ īĖ<ø ęĀ2ūYó’ į#äżõI% #īĶ ;ūūešūżļęą2ńņü ĒÅõź7wąłĪę’% ÷µŠķŚē Ö’Ųž’žaņĪ žįļļ yø’; 6 īŚ¦(1 Ęż’õīļŁ»ńFóåōłßéA³ųC½ńź–ūC¦żžĻ-ŌIü;ģćŃ’÷?÷ Šõ$ō÷ņü ÷žżļī %ńģ+ų ź÷Ń:ģ4&É Ō’å& ™ģ›Ī 3”Fżėśļ0üč7mš“÷ZŪœ+żł’č<%/Š5’» $šęÜźźł9’ 'łó Įé' %"Ņļé Ėų āłīF ĶīMė į!€ōšśŁ,Ł#üˆńīšėĒųśü’’ö ĀččY!ėßJüńģ.žł įš(ųĀ 9Šōóū%łČęĄŪņćńīŪ7÷ė ½üēž÷)Ļ#ęśĶ ōĢ$Ą&ų ŲžYŃ8×äD ōŻņśÜū ? óhĻ\žģż€¼³āéōć é4ų% ’śāüłńĖ WĆ~7éżŲÉ܀ēģ±č ’ł€Š3$žæåćą0ź¬#„Uīķ $ ĆłZ$Mś»8ö ÜŻū~Õ(ź ö0ņڈüōńõū łē¹¢õ‰éö  {Qīåōīų Õž ėžĪß<ā|šķHöõ1W4& ’éõ × $ĢėążņžžļÓ÷Gł>żńé÷ņėéĖģō÷ćö !ßłń ßūō;ųEß ļ ÷!ņöąė#É žču.’ū ś ę ĄļāšķōéCõ0’åį‹ūŚä,üų÷&FšŚęż&ŚŌč·³ł÷ņ÷ öļ Ė ŚŻĻĀŚ*ķņŅęčķ4źŻēśnų,ų’Õö%żųÓõ $Ö+śõßüźņāŲŪŻžÜÜ.źó ݆ óõżų(ł4Ś?ę õõÓó ūųņźś!āó «ÖŁāķžŻ+Źż į8ū ņč÷˲ õÉßķ ŪÖāśé ž#łŠ óų÷śé÷śīś±ešš#ųųīÖżŁģų =Ü äēŚõ#1Üī ö (šēļęüōŻČöīū ÷ łŽõŲ9ļīßŲ-żō>"( .ńŌ*Pų ßĖ“#*ķ’žĪ(ć łńńņķQ6+üźēŪīŠüė÷Č$(+łĄ1ķT7ņü)ćėņTō9ߚź %¹"D$šÕ 'ćšżŁā½į°óļéAž’Ņ.ĻųŌøå£ī= ż,įõßĶ# Ņ ä+-ŚéģšōU÷Žżž*2kīµōļ*ā€ļØś/ Ūń[āŻ%äüö 4ē#;ķ Źżüī# Xģöæ÷ž0 ģŻ ē/ćŌ+ģżÓńż×÷ųöŗæū `e~,`)00##L,ü#ĶŠīéęI’ļFÜ÷śūSCīņ. Ū#łŗä<.Y9ŁżCRö²WķėÕ½Ó] 4ńļ÷Ćėū"dü^ ö'N š%óżö=õŪńä9Ö%*;ųō’;Ö$G¾ĖŹüŚąĘ 1ų€Ģ -ģĀē’) éņó3  'ĪŅńč% /1źßėšūģ.» įęńę+Šé ė łņü Õ$źé’EņÖćķ8 Øäōķ!üžžėęõī!ń$’é-ų Pä?ōēłōūė&ś"ŚāGźį6)¾%V/÷÷óÖ1*ßģī,%żģŲź+žóüó ōźõ öļž0äąńļäłłóõöäśń( üŁõł ;ĢRķó×ö(ŻēķŌē×īŚ$łėŻ!Ŗ3=µ¢6åśü.7öć}č÷ī“ļÓ8¶żķ"Éīžü~ź÷Ś9)ńīśżņ"¹ŅÓ ń=W­ē ,ś³Č+Żä)żļé Ń!-ėßėŪŹņłžÆüš4ųä ­óöį)ŚŌ£ļõõ'ļń6‚·?æś ŠĒė÷Öž õņC 6ź łęįįŲõéšč6$ōüō÷$Vįšū/źF 2’ ų śöāćūž1öī­ęüŠčÜųŪüÖķž’!ļū!ż1%źõ “(ėēüīó9 éÓÉ3ĻĻüéō;ęńļ’õ>€’ šÉŽšėŻščö÷Ćśóūóņū!cžōüōšćųĻ (ē ÷żlś©ńž*Ö üō ĖäŠ(Īąū ī’óŅź õäš8 ä,ś ņ%)üéģŅ 'į žĶņüūōčĢ įöōÆ(3ó&}÷ó’Ī)ŚŠč 4Ö # Ęü÷(%,ļų[ćö÷ßZēŲšö’B5åü- ³<żļ’ķö ēåYÜż #ó Ģ’į%ē£÷ńņęū’ī!šåūėĆĘģ(ķķÕł  å ó$ķTāŚńÉć õ ń÷ūóżĪó'ć 0ŌźŃā öę ŽBč ģ÷ ŽÓŻļ ąī;åżźó± īŗ*ö¦.ēÓł ?*RÄĶĄ¼š #ŽīåüõŌ»õ%üÅ’·ū  ßŪ÷ąńłś+UÖIłµł+ŻŅ0ėāņõ Ģķ.1ŁēŠłõžšĒ Ų2ģ.&śū%ćżöōū žž%ņÓ(ęĀńčę’ÕĖAģūōÜBüę Ŗ5(7.ßöO ł*’āŹ &ā,éļńĆžż÷čĻ ę&6źųŁŃÖßīįÄ !ńS’#žūųō€ź·Ņč×QžßōS“.óõöŅüųź"ģ$¼ĪłļĶ7Jæ 8żÕųķ’ė žÄöļ6ĢŖņ,ßįäąŗķÓ ,;9ųŪ ƒž÷ ėģš č9’āę Dń’ļėĢķ^ūņśē?üżżąļ’ł'ž’źųōā÷õ÷ńåžģõ-#ź'÷ ł0żĢšŪąųłżęĖšćŁģ(ķńó÷’ūŌ&üöŁüłöī:üäßĢņÜóŪžššõżÓļõł# ō÷ō.šźõ ļż ė ’å’ gīæņõī ÷ ż īŚ‹ ö!ōćŅóų÷ńźņķ ÷÷ģūčų’āįī$įā üō #ś2ź ļ÷ńk 4÷üīüą'ņųžėēóÖ ööžžžåģ 2 ūžõžNčŅ ó ūóžźūż ņ-ūī&'źūśģńäųäņüģéżēśõõįŃÜčī!ļ8+ ÷"żąš łüļŁö:ńéūīżń öūņūüęõ%ų īūė čõųžó$ßńß$Łź÷śCŃÅ÷ ćņķüć žćĻ"’®šŁ(ł7Üń ķö€ Ł’šĒõō’éLµK2ńV#“3¶¬ņśéõ.šžļ8€öūżČ4ü+ŚN(ēĢó'Ē#Ņēր ü˜łó)žūōė /('×ņ€īļłäÅĪųō šõ õņž'ļłÜ ž’ Ģż$ ž*ēĶńÓēé8ķć&Żń!ņŚå<Ē(7ü;śś8ģłü-łŪźżÅī ęńūāāń!ō~©EśĪ½ņĪŹżńę A żļŃ:%ā!äļž˜1ļņ C ņŚ»Īźł~żEļ#ś@ēć üĆ"ŲŹ> Hö "É žėÕį/9ō» ģÖ÷ĒŚ ųøūēŃÜźźøä÷įü‹,Bõ ŪČEś żĻ"ŁDņéźčēߎōŅ ģü’ 3ę½é Ó;Ō1§ūŲĒ’Ź4ųįŁ1ś+ü;ķÄŌāŗū#ćw‹żĀšš ŗ ļ9 š‡ū€(’¦īĆÄüł ų’ėäóŪŌōśŠ óņ'ķŃĖ#€% ųć*ńŠ€Üś¬ųDņóņģĒāöNõąźć’ Ż-«ŽöżĀ:Ėįöł8ģ (šü%;ęwülekž é śBė ü sÖ(ūšÓ/ŽüēŁŽżĖÄ' 1ĖõĀ!żżōź/’čéžć94ń ē"¾ō(žÓ!ęłÜß#2üĖņ5śź ńä&üėąéÓōżöąńżīćöõÜŚö ÷@÷Żåš!ūķ" żōšōłįēŁ žāHż žėĘŌķ äē"  ņŹö@ų7ŽŻ’ öķē ‘Dž!ūšķ0Fģ 1ņ£>¢ļÕėŃĪŅ4Į÷ņAßņöåöüÉżSåaī—"Æßčõöńę Ūüć Ś Lģź»ųĢ÷ķžķ3)éņBō0ūHü”ÕģĪ*+5ńśĢžų×ēÓüłĒō 8 }˜ģćõö™%6€"Ł#īžļ›ŲųßŃö;ŃźŠżģżįł+ü9öõĻņøńū ę!QŪ;ķļ’Ē ŃąW)'—æŹüū łõ;ŚŅĘÄłžĖē+-÷īš’÷éķģ’÷ #ö ųłüžņÜżĒ¼ĢC'ÜžękbßłõūÓķńėęš÷īģöŠ2ųųēÄ)Gņ"(»4(ūÆłćäżõ-ō;ūśķ(ō ÷,<ĶĮåķŲ čśž³śļžėļ Ē ’ō ÷’ķśŠ#ä/łż*čąāŽ·łąėūŪ÷ūģN+ķŗóå ö ūų!ųž"<ī*åćÓ-õ >É*Čü;Ö š<ęčd;;\K%ź ģĖ ó$YA÷9“× ŲL 5 ģś:… Ü Ķ€žŒ_ä üžŚÜڃ śļOG:)&ķ żŪÖÉļ%óāūČ>įłŅĻ"~g¼ńĻó ż  ĀīKć-Ž’<ó”¾ ŖüöśSŻ 9Ś$õČāBųņ7ŌõģĘķ 1 ļ8 į łōCü#ŪčC%öėóß0ėŌ-(Ōņęó ž ļūõ ėōėŗņ’Ŗģ!į<ū|1 -€Ūō÷čžŅŁ’ å#'鵣źńéß’Ļ!ŪĖMż! '<īśŲEēEść³é¼ źżė’ō’ Ź ų2 ļKé €łčĪõéū×ōüŅš×āņ)ōł ß÷üż" żź$ łȀžiąÓ“óüØsß” ŃõŠ‘ß,č·ūū’)čžß’ĶÜĮźÖŽ!Ė€ č’Ģų ź åš—ķž4 –éĀ« łģŚ ü5ł ųōųņłšæĶĢŪōŗõ ķ<üņŠ Üā±āŹöż>„ķ/ Ū÷꿀ܾéĘÓč¼- ķšäūöĘ ]žŌó$€ ±ō~¬Mąż÷ś į ōŚŻ$  ó2ŻÜ+AŪć ųĆ é•MłīŹä 0ŚDrČ»óśżūöłėēßłīq"įŁčÜæõ«4°öżÖ Ōķ˜ĪļŌņŁ’#0ī$-ōä/ įßŽą.#żņėÜžüm枊č ל Å#ÖõšÓŚņś×óŗ Łų€ņķÕķ‚ÄUļŪŲK’ÜÅz0 üšįüĪ- éŚ÷ö’é÷Öü.,#"«…^ūöū$C"čāŁē6]ķĪ&ūł!1Ķ ±R÷¾ōö<’­Óūä )Š$ķŚ"Ż&ä Ņąß Ļō&šŌė3ķōóņ“Jā öEŹäāŠóż,óēśEąÆ3?ēżŽ÷&"ó,ń#I'ģ>ł ŸŃžŅÉöšØŪę(śóĢīęWóā(ö8īŪōĪżI€ć–źī%Ž× įū š ’+ąļņķõŽl 8ėąū ŃŃė¹ó+ėķģö ęī×ī%Ō4 źńōŚö%åė’!ü2į.äĢDģįšź šśß Ńł ī¼÷ūį!čęółó ś!ō= !!N."ī[&:æÆöž$ż čĻ6U.äųóź!Ņ ä!™ 9+ü0ē“Ź"ī łņģłīń×ģč%ó ¼,ü ź'€ē=ŁśńźĢc›ÜüŅÖ ł éó,õīīļų;ģ)[$.IŲźńų’×óš•ūčź1ÓŽęŠ[QՑ÷Š ķ) * n?9!2*Rķ1= āģīńó¼:õ’ źģÆ&ź!Ć;Ż÷éōĢAį' †õĖźóžV3/©Ć÷’ ėģŚ.· šćŪ4ģōQ* ķŖ 2"¹šž9ćŃ$#$ģź÷¼@ųė0ł#Ūļźõü4žÓųąÜ) ąķ" ÷ļ#ÓŲ 1ļįŲ%#ßIģ ļųāĶš0ō× ņģłäĖā·üēńÖVó Ž8ųŽīÖüFąÜüóżśžÉ$÷ 03ó(Iē &ķÓ<ēõ÷$ żū'4 $Ūܬ óļSŻ"( .$’/źōž×š’łė×īż!Ü źė #łėĀįčuėÄĘš7YüļŚ?€Ió4öüėKäö.ōģJū÷ųēčB#/öł Ķß6ō_ Š’,żßž³:ā,. ó@_ źōø’÷ōóė żåśöąźēōćó ēłü÷ęęßéĻŲß( ūó:õ’eųčüłīū!ōõ ė©ńė·ōf%ųłÆ'Iėź%õ ńļæļ ’÷-€żåżÜū"ž/× *Žšīķ,ūųų+ā"@ņéĪšų)ÉNŁ( <±nūņ ·Ņ¹DŠĪ~" łņĪ÷² 2׳ŸŠ!žÄ×Üłé ߎ×NÜāTÖĻ^%  øŠĀŁ ś÷4’Ł•1 ņÓõÕ ßņŗ M€äųć’å» 31Sō ōB÷š=ć 3°öå 7 īļ!é , éµ×Ķüś÷/SŪššŚś$"-'ŽĄš š÷ Šł·?žõś'Żņč<źź×#Ü·/ņĪ“ėŻ9ß„ŠžóėĖ"ūÅķžĢń5ąĪ( ńĄ 4Äßä ŚūéģŖ ÷"ąåSż ł’ń÷%śĖ,žßšSęöņé "°éŁ’ć÷äŪōūšśš×HŠÓžüUÓĢü ģÅ!’ęžš # 9üÜīē !ó6Üļ"ü„'ī*ö!ļÕņėåśj$ļ Ēł#ģóūŸŻģ\0óīŗ0Ė&¶źå'’F’ ķī=Mbłė ćźńč# ßųé÷ņŪŻÕįóżP ä/ģ’ā’ōų ÜAź¶ų  ńó ū ī% ä9īņ ļ)žž ēų äó(ńüž!ü+š ’,ļŽÉįąńäń!ß$ źĄ ĒöŪ³ųĒŽ"»·ć[ļå ś æiŽf'Ģ#ųū Ķ×`' ĀŻß Ų÷üūąčķO’  ųFé5Üąū éŽĮėņ!AõżėēńœcĮāļ(÷ Bīą€ū÷śõ’’I$ŹŽźōė#ś»°żövłż×ł ÖńļĻ&2£ Vö Zūéāųö’V¶ *5ցĀć*ņåÜ=ļÅš5ŻK7żīžgēń ęł3ŲŪ,šĖ HŁó÷øń.ó&ķīćŗłųĻ įé5 $-ÖO•ōīīāĶūź×Ŗā Ģ/Ż÷ĖOłE;.å)ż ŻTń ķčó2&ī÷VėØö4ū $ÖÆ. 3÷õ³ųł'‚¼ čÉ .åČ’ķŽ½2źŻŚņūżÅåķōŠķ) =÷įo 9%.ņ9ļŖł’źķpćģćął ķ’ėōåńś5ķņ ģćõźé ūöŪé čżõž ūŃ ®ąųėüÖ÷ńėŪöŲķéńäŠķ÷ś*ō(ä4&ųóßźŠłūķėčī įėōšääŲś ųģņöųł)’õūś ö’#’Įåū ōķ łžņź€īŽōöēćķīßżéĢ Źģ īńė5ńų’óšģõõūžó׳ź,Żįų ĘĢE~ÕéõĀĀ < ģŁė é! 0ńŠS’:/ÜĶū óyżāōćń÷ī &f ÷Üń#·’&åžż^ ī.õŪ @ ńļ ģĶßžčö’)+īņÜå ńżä õń6:ńõ¶ōŹ’~;Ū¾ ÷ųļē/5$÷īń&Īōż/ķķŅż×jųł½ŠŖ~Ū.ż"ō7÷ 3ōš­īš>éų$ ĆĄß NkéņŚ÷ņī $÷6ńŚÉ½ĒŽćüK'ølŠŪś«Ž< äōģ&R!žėöŅr&÷X”š%<[ī ńöļ)ÓōՆś&ģäģ'BŹžµxlķŌ69O!ćöōā¶ĆłęķŌæŗ ėųńō÷żć4ęģWėōÖń·š8’ł ÷ō åģQĄöŹāöÆ īüåDł×ņó ęéń¾ģÖę’÷üŚ÷ ēćŻéēĮāń8źŪæ G ³'ń“ś)bŻ#Ś+ō’’Ųōł’š)ĮDÜĢõ7P1M!÷šų!)żŌńń">÷Ķéųż3Q% ¼åėŲ å»ńÉ(čõżą õńę ćŲäĖ)Ģ »Ē2ŃQ'¹ėč"ņ÷ ė1Ü Ē ķāõččė-2ēåä žśųó2Ō +öäÖė¹ 2 ž0’/Ūśå¬ Ā"š L.ūōņŹé)8–8ųóē-לī~!ų“j 7łåó@ėõ}Ė€ųļŠ+ć~?ō Hł'ż"ųīBŽņÅä8õ Æ‘£%+ė’ųŽ'0÷üį ń .Uīż$µĶķēP8&€ąŸņ$Üź€" Ųū üń×Ó å??6Ų( !Üš$Öģžf# -ŠŅÕŁéąéį ¾žūģōĆ%ś2Åüģ7ķ śéżŁ  ęŪźłŌ ųÕåēŌåųņčćåõ ć õŌ Ś ćóļńżįõų%# żčōßīń ÖĢķūļ$ōü;äģż Ō÷Ū J ģėēņĢ×éčŲüęõļōęłń2ž×ķĀŃ  ż óé Śšł° ņųźńłśžļā') ö ¼īżöėżÜīŽōīó!ōęüē ąÜņųü=õ*žģõŚņ!Ū8 ü ōņŽųæė łÆéōęėöģ¤é&öĒł½Ö ·ņå€%łöųöÓõ ēłāź8 õ÷ę×F(  Üžģö ū’ žé ѽ€õāīąüÜėåŹņĮōĖŪ÷ż„ļ'ó ģ'å÷ž"’ÕĆś+ćżķ ćŪ 'žź€m:ēėęßłÄ$Jćżłėߌß’ė&Ū0ēAśļóü~€ų äÖAōõ÷įW;ńÜ ŻŻńüÅ~#Ūõ÷žł —1ēģ㯠ćö;Įøõų$kü Ūš÷ę ūü(.ęä'žÜū(čßōõü7’īłčćļ#õ÷žżōįäėĪņ  )ēI œ-ł=²ņńņ’ż*īd))ŽŃ¢ģ ÖžĄņśP õ)ńQōmčNś @0eļ ļūbŁļõDżŖĪCB9ŻÓ@*Kż¤üģČ»äŽ¢õ¬šę€7ÕæŖŌ,±–];-Jõ¹šó##ŃĒ-Ģ ŽF’ö– ü+ ę,äÓŚ0+?īöįźņPg¾šēłńī,ÆŌ ųģ]/žHęÓą€ 1 ģĢüéłuą žśĶÓń8eŪķēÅ9¾ĆØųßōÖįĶVĄŲ%›~ čŃ1XŅėćų3Ś’.ĻķVę"dōįķŌŌ’žŃÄ~ ķ  :3³~ĶV’ę'õļŁ+’-õżć9% " ķŻłMóż ö&²!t*äÉéģ<ņ®ń .9 ó8šż@äĢ‚ŲŅł2×óµü1-//šāĻ>E×ļć1ėTįŌüBIśé„ ļ»Żśņ ¬oś äå S÷Åń€ žMõōģ€ē“ī ŃĀēęśōŠōńėūkóÅÖóī šū üÓ0ćGōļ ūéõųż åłēžü×$č€ä öš9ņ½ėüśłļžźģ"ųÖł ęųęä÷ņūžĄ  Üėžų€šĖĀśūéēóēõóī%Ģł)(ć%é’źęū žļūÜėVąöäī7ūņ×ķį ł *(źįå%ęė„ńķäżķ óŁą%’Üöōéńēūųń¶ģūæ ė’żŽśüöŪżō*ų óńŁ@ žīēõ łż’äųį1ėßõōšéEś ’šē&ģŅūōųó+ ń ćżŲķ ßŅ÷ņ#āäēõó÷~ ųóņś ł ŠŪ öóō ėžæü īā !į õżšļÉō&÷;÷żłųóēņūåģģ ōīóßõś÷üEų żī藹’õķą6ÆķIæÜ">ē * ļżÖŅąśķó±÷Ī; ~żŽõßåóĄ1 ōŪ"£ ’õņ'@ ęćžßėp!L}2ÉģłŁ†ąīåł%łAžöŽų#ßÉŌ”ä Šėém ź  ääļéŸńåžö0€šģś /. śöžŪę?:Ü9ķēāŁźiŸųüč)īčDŁōūģ86'ķ üÓ> į ųļ %äńė &ń Š ōųóóCłńBĖś·*Ū ōąäŲõ#ūŽöĘīš ŻóĒü’Öö9éöņ'ķń(+ż ŲśÕ,³[* Öė8 Š^%ż#0 üFņč4ŚGž ł’ÜŻŚ,ć57ųīŅŁąņ õī&Ż÷ŚĘż¢ūōņįēŅżįó5ś ėė$üī+Įåś’Ųķ $ī%ō¾ųķ`ęā÷ š ×ūź×õķżūŪó ūĀڀ辀5IųłĖąćżIōš’ū+ @ļūmķ*ą& Jr ’ļķŹ£õæ 暀źüõō u žńńīłąī»įēÕŚłų'’ö€&ųżżł.ģģļŪ€łĒŅźī(”ż.éźč/éśķ¤cÓż6× Õ › łżņčūęß ÷T׌ēŹōč™ĖÉļ9±,å ŲüČö¼ć ņńµźRņ¼sż$ÆĀä[ |(õõų ;üęŪņĘŻõģä¶@š=å)ÉĮßÓ'& $ōšļŁ»żćēėė¾Ż×ēÜļ1ß>łū€śźvÓ׌ęA%~"eŻ&Ńéé7ė¼D­‰ß÷$š“*€ūø2Ļö" ,ķųśė 0 Ū ę“(Iöß5å÷ąųėśóĻÜķŚėżé,ä()ųŁ%Ķ AÕł" ē ńõųĢŠŚķČÜž ėķęōõ!äļŽņū"ĢļĒš ½į+1#ļ. Ļļśöążżéōō ā0ékžżć÷üų÷ßŪ ßÕ’÷ß¹Ų č ļūļĄäāūų ±’Ų õ鏒źĶÜćŪóń’Šļļäļöėżļ\ć#š Ż¬9ĆĪRŻ üī üDŅė2ł įłö#žŻų=Śū āRĒEE¶3õčīāö隊 ’ķ·ł%÷žńäüĢķžŠįD ō ó Üįõų éóāŪūę$čįēņ1²73BūņĀŻ0÷Ģ+gļāöš)'ĒĪžŁ** ó’ź/ĄįŌŪå+ mX÷ķ!Ėģą C÷ļ÷ń/ęöēĪžŪīõų ī泘 żōŁ£óķńüśW%14īķ׏$÷ģ)ūõöõ łģÉÓ ćÖQ'x  šī $ļ)ö"wÕų! ųõóōßīJėłŁ“Ī &ūßóÕ ŻļĪ"ģ$ż›6Õ9łēī(ĢļōÜ Ķļš"öüV×ß÷ų&2 č8÷ż(Ü=’ōJźŠ8ļļ=É×ųī ÷+īļā šŁ.ō ?’Õßó©ķų žł’ūӀ. ųįż¤ļ'E ;ņŅņ߯čŹåū 2Į āēįč¶Ō  õś@Ģ-ķ3ę÷«)šõüįųŪÕéƽõžßŽ"ēōņ'å*ūńļż ā*Óķš(µł6łą/ņąśąęŌŁźåóöå-ĆéÓż,Ģ ČŃŠ’’ ÉāėŲŽ-ü×ńE+ļ',Ū!ż žķōęößģłķ&ż5&üłõķż  ė2ą+äż $ŌÉķäżōóĪł’īéėó5/®łõēņ ī# ćķūėķõśą ņü ü÷(éļ$łäśKųN  šõ’Ż.ōļß"€%Cū»’ óäėŖ÷Żč ‘ņ ź•ń1 šü'ļ,š2ķÓśĪäÕć"2Śżųģō5%ą:öŪ0$ėJ= ÷ūU÷ōé  š 1Ū įŁū’Üł ČĻŻņīŹ(ŪåŽų8 ņ’Šöõ6/åę,“ģõéóäŻū"HžźōÉüėMŠģōģ -'ĪūüęÆŌč09öņžė×źÉ į’āå  &."!!6+žų+> ūŲ 7)ļž )ōŪąģŽČĪų ķ6žų§ņ ķūņļ Ōä÷ńVął żč‚÷ĄüB'õŠšģŽ•¼ģĄ8Gūģ ĪBł’ļѼ Ģ˜ė D÷YŌ3ć·śŹ-ā āČ2*£Ž;āęŅī,9ķśĶß‚ō»UĆżęĶä6Õ”é ŻīŽ’ŒB5 łėņNKąÓļ;łüȼĄé„ ;„AÕē€õ*1Ä6Öõ“Ś!åT‰<1¼Ućüąļ Ü" )ņ"ė.čżćś$į Dö $ŃŃżē ļלŽ8óŽįŠŚŌ “ū8ąü· 2:ÉŻ ńź"ūõD:ćąõ+?ņēāų® éūł.® Kżm*łŲņü ŖĀżå'Ņ÷Ŗą$€öĖ1å&żSē÷ -ąž“ū^öč ÷Žżī“łĪ±üėć÷äøöHžļäüüÜżģžŚ š$ĶÉ×ń#öH¬! Ś[ć#żć ļ ņļū€šßōŻł'ēŽ(€Ų#Į ź)*ļ*ēÖ!ģ’ö³łO-Č-:ė²óŠ×ēčā÷ ķ÷!ō’ź’ 8ÄēżĶ čžłųėĒ’óõźžź’żŹō * ’żüōŚč$š„Ō ÷ż’ Ńš(¹Éņ" ū.żŻ %C( 9~ŻęÕóśūY+ėõłęśS µĆļ ō5ž•ēņö’<ļnćŗČ"CÖ÷FóźŲ üGčųąėłöźBõåõ% ś}ć‹ß=ė".a€ńūź’żøŅżē 'Vįėå%3䤏 Kų¢2äė × -ćżŪ2ź[Ū ßžńéģ| öņ!łź )0 Õ~źó3 %Ķ&įģ|ų źāšō’ķ2ä)ķłÉ¼ &»ą“Ē“śŹšė9čFݵ’õüĖśł .’ņ Łę2š šŃāźķļ’žīćāū žžū žā*óB!ł"śīāļüŽ4óŁÜńėłžöēżėĖ ō ĆŌķųģ¶ĮÓõęā* ķ ģĒJņõüŽļÓŃéżźł’Ó÷ÅŁļöł# į ź,ų׌žźóßÜšę¶żą&ķõ žżžńčįŽóėśī ņźŚ#Żė/ųč š÷šķäėžÖÓ ²ę0žńį 7ņ%ń ž, ķūę!’  ųčįķ ī Ūé÷+ā÷’å&ż żéń1  Ōś'ęńųEäōõż÷ļäŌŽ÷śöÓżņīé÷ßęōų ģć ļżųĪ ė,ččõ÷ž0$ö ęčĻ &Ņßśē’ķ ńō÷õīęüśŪÉēXäńŲāēģ å"0’ū žßę&ļžć ";čŅūś% ¹ÅĖķčć÷ßčõāģ$śčü$ųżčōęšāŌÜŠAą)Ö ķĒ śīŅžģāü櫵õŲ•.Ō÷×’ ßņ!õ ć ^ģĘóöņüļE 6śē įŻę"Ūļčīł’’ĄÕ!żē鵳܀ 2ųėł •Dõ1Éźž åłõ!ėżä实÷Lõ ńÖŁ ŻĆ€õ „šž)ī¬ł×ėūū4€öQ óÓ0%Ģėłāüż<ž–'óń2Õ²čÜ[ą÷銾 ’~ļķį¦śdÕņźß 2ć=ŠEš~#Ųč“…ūEńż…H¶ūÅčćīčšé$®šć€ń³€EŲ’ł ģÕä ō)ī5 ꤳõ€’łöIš:õ&Ż?$;ūu2ōéķļ,ń śģ"€ķ€šŚžL ¬ėŅ9āmēšą$ńšć.Ż£zŪžŲ¼Ī'4šŲóŠēöę; ļ$ Ż)AĄĖ.ś#ĖŹī Ó<÷ ÷ćĒŲ6Ų²½šģüžŪÖä÷!č$1#õŲļīüf6 ļŌ!ś± #Ź+ōżį ’-»ń(,ģųūéžÕ5łėkõł9ūžß Ņ.27ß)Ęķļ=H-Śēćö¹éų6łóżėńųŻėÖ¼ū!ļņ šĀ-Ń źćŃł’Ūö¶+ū ūūś±ęÄꊿKņļé)4+#õę żöź#ņäµ'ŲEņļ40š1ˆC ¶#U~(=ęō%**čżāąĖńōJ!ÄüųŚä 8 Fżõįņż%ckö  åģĘļ čō}:ēŻ’ŲŅĮī ūūh’QéüMą’:ķ.ŹŁųĖė\VĆ(ü, ż  śŲŚņźāüģśš %Š­ G @ģĖŽ'·£šŁųü Ø 3Ų Õśö™śŚėL ?ŚÅš! ¢ść ٶīēą īžŃżē3śōæö ņQśūō .ÉÓŹūpõó’üūJó Ż>€żżęń0ņÕäå:ü4ĘīB:ńö>FNųłż'/ )ó#%ąüĆ®źØćņżåķ& ׿#=a7žßšļü'ż(ŤīĮćķšLó ūķōž +±üGŌżōĻéšÉ3ēķė’ęäņ“ųīįńņćāēc!9Ū ź*'öŁśĪĒłŅāO掰åėį öÜĶ $K ž-ūó&RłŽžŁŪīžņņčšæ'ńīõč9ŁĪÆžŻÓ“0ųźķōõķמ’@ōĶń'µąś ųīžŪXäé ōSųč éą"Ó!čŽļź%Ž排Ļļ7żķāžčódņźųŹöņŚ’üūć¤˜žĢŚ$ėłüõł÷'#žåšōāčpļõūĪžĄĖ ėÉ’%Ż÷“8ōIĘÜā÷Õ»ßŌõ•ö ĖüH0łė÷ŗżā½ų%£÷ņū诹 ZŹĶ Óčå×!ųŪĻēšĶņųżóōü ņŠåēźTēäś  ¾źß9Ēķü9óµōļ€"āŠž¹øó÷’ž€ ģ±åų,ī&ääń?ģćéļå%-õųŻū!Čź ųłĀø’'Ņūīõ ²Ż(éłŪ(ļä÷$±śųįūżüÉłćīéūüü@ćō  ėģ ÄŠĘ) )ėģŻõįį "1č üŠ€łć ń’÷ōŠ ’Ał:/ėŽ ļų6õéÕś÷éżżžłĆ ż -ņ!×äłó’ł+ŗ`ļŌš—ł1üżņ+÷õ ųé$0B?ģIų<õ#×GÄ׿åÉÄ.3 ą†Õ: ó3 ‰”ÜŚń ’€åę ÓŠóļ›=żFżŁå FŻČęŃŃüč€1śóó'ł/ä'’Ń Ųåeź:\Ū% žž8F2ōėOėńū8€#6’’2€  ꀋ QĶč€ üļƒūmßńž< „öŁ3ö’õ$ łFę'Ażģčüł# !źļÜćŃ5ŅÆėűģæņķķŗ-ąč,é¤ ’ čłńÕÜßųŹĒģ +ķ÷Ü9ņó+ńēõ$5$,לÕŌśżį"ēóźķJó’!šįS>óķóčņóńÓüßļPśõčļ’ō ü!ņå łNļņżĻņüšō4ń; Ė”DåņżōŽG€ “šÉÓŚčžę/ ó ķ’’ ’<Ūčę ļß;“Ėąī4©’ŅģšōŠģÓź•ž2öĢšę/Łß%åÓ-!·ąįżņ<ģšēģĪüߣ% ķDį*"įB.źaåńéŗż K¼ū'¾9J÷ėōöžšįJżįP ū28B7ÖīÖĮüå»ŅżÆ /Ś­ś-żÄ -åī1éęćāāåŪłŅÓź.óųüūĻŽHńõżłū7&õ ’%ž,ŽśįńłüĖÕņūņå Ćó÷śÖ鹯’ŌōüąÜõłö ųśŲÉżżčąäēģäåčČ 3ā÷»ł®ōCüŻI÷ĄÉńąų"œ!ņߣ’Ė+öāēļŽ9üXĮ4•ŪėšóšÖļ3éäćüö ō ś&öŌīśč#īš÷ŌŪŽ śīŁ&õóļĶ ōō’šÕ ,X ēūü= ’÷ Ó Š<ńļ ’öąūįŲļīģļ’üß÷÷%Įł ńż× ńćBųŻ’/ź.åųÕ°żüō- ģ÷60ł’ Ż’īž÷ųń’īųūģü’ Ś žóżüŪķś÷#B#<ļįżėū¼ųćžöé ųé ģ śßĢ!ŹžŻĆźü •Yóģ/.č ū÷ż, /'żž+#ķłłž”ö. õéū-2ą’ņ*ų’(śłņ ņEņė(?ņś Ē ē@Ó8ņĪŹöćžČš€ ķäāČżóķü$÷żńčüō’ ņ'ķå2ķģWäłĖ ėøż ä€Öżżš"ģė•ķ÷ öę?žŅ„ƒėó€ žźņOśŻ×ĘŃųõü/'̼ōķłöI/C’į į ,ąßćČŠžģŽōīńĘ0źå ļęčāšż’ģ/Ū;āļ‰×Žč>ūŚģÓĶüĆžĄ !ż2īłēŹöęūÓōŁŪģF-ŁKóõāņē-Oī!Žńō1Ćęö/łūś(óÓŹ ż åü # š««āŅźū/ŅüģŠö"4#Łō¶`ņšę!̵ćėėķ éņ’Ż&ō»ė)ŲéK µÅ÷ĢÅžęł¼ļJŠąjē÷žżŁųŗ–  = #źŽūéĮæŹ ąŠ ęŃ·B#J·ōÜūéŪ%ųłž!²ōą9å×ÜēŽ½!óöĢ÷7ų2ī’’ó Å’%üķą8ōßó4~üķ>āšį":ģ)ō œŽÄ-śåėĒ)ā÷ģ!¦"(Óąō}* ŗŽų)>üūŽņ­ŚņĆļ 䕼'¼R óå÷ųųš½ āŁüĘų1źķåŁīė5ģü$óĘ 3ódā½ÖēÆ&(ó±…&&ŚŲ’ŽõśöõäōįÓ+(üńØ$3ż"ńżWčƾŽęŲžĄž#ÕIæ‰õßś %īė?įčiå ó é±Iž 7śĖ ķ÷$©’é9ĢCńÕŠé ·õÅ+žįć"ŻóĶš'Ū6¼ļõēż ż`ų)įģŁ÷ā J)œ0m÷īĻäįŠ€ķš÷čćąŅčē°ī’×ö8÷00śĢņż ĀŃķųė²é6üżļóėšóšūņ # ł õ ōī9Āė×’ŽąīÕųļė µį ėļü÷8ŲĒśüžVŻNQ ļ’÷CōųĻń,óīą÷*ėō)ųGī)šš©oõĘ,ŪÓļōśęāŠų’ä"+ Ć4żżåė!Ń6żBöōó!ūó#č ūįģßµ ņÖ óē Öįāµ ßą ņó: ž06ļ ~ć/ļ)ų3ķ»ņčżźūļWčĖ88÷RĖóÖ5¤čŌÉī׊ėĖ’ ą:Ņ& čźĘĻöķąÆ983G!€Ā ū(īźå äņę ģņśä%WźŪņąĀRśļņśōī īō !" ĢŲöĄ $õ ļąĄ’éŚēń ż?(*+ł0 €ŒéöĒą$d! ė Ž öŽžė! å×ė I³ųō±žŖō ±žö*žBū"ć°ąōī% õ²ķ ų4ńļŅćźšėåų +õŃź öį÷Xō’ķē ųõä[W ųüŽēńõā ēVåõ ėéłāJ÷#Ł1 Õū( %kōõõüŚ$čüż ī öł³! ÖčĢ ōśū52ŚŽ>+ąü- Ń:żųąų(õ "÷öīų ółLü÷Ś ē’÷'׳ūéīųż"ļüņšżśķJ)įķāżü+-śūżļ ūüö&R ĪīJķźüåļ$ķķūō+ģšŁÓ’+õ üŃįóļę  é$śŽö’ī’ć !7-ō"+ ēļ % ķūųT÷-$óv÷Ž õYūÖīŚÖ ō{ī:Až»šŅ{+%'ėūėŌ%Ē'2 õ’÷ńōń øšč ō÷€ ź7éÉō ) Ü÷ļ Ķß .!ßD™įō$!žś8]üŚę’ņķüę ¼ß%ī5Ö@Žžæķ šĻ'ėC/ł/ģņņż% ūĻöÕäNć#žÖžžšįćźļšÜĀ īŽ  ā÷öńńīžżö÷÷' ÷ķ źž šéžüöśāźéłń ī #łÖļ0ųå§$ ÖōółėśūÜóųķ÷ēö ēłä÷  EĻõżźņūžčųü¼Ōł óż'’óćÜöĀŽō’łńš4ųłā÷ ß.Ųķų’ūé śīĢ.ģś’ł ą żī%žöŗÓŃ&šéüóNšų9+ąÓųfū1ę"ÕĢKĆČ!’Nżę€üńŽ5ńņĘŠ ćHѐ¢Å,ó×Ų:®śģ Ó³ķ óEėłĻC#Ą² /Üļü®€Ļ?Āīź [÷ųłņ»"~ŚīŚ-Ö÷逯E+öļ uōŹ.3ų€Ił$ '8$ū’żŠ!å¦Ō$ńūżīė»ų šņ“!õ'ė#)­ J%ķųß äżüō#Ņäß9’ū/šÓņžųßś!ęŌÜĮōŚ’Ž*Č$Ż ś"ēž įÄÖņæóūöōö×ń$&ķīõć›õė(īł$5ņ3 ī ōžŚšąŹĒō$ ūūōōĘ’/RTųā®ūģüżóō Ś<ü±ū%ž,ö 14ņåśB īżńžä¾óźļ;»Õ öŃš ōŁļē’÷żŠ’³åF’ü«?ņ č <Ģūāśż+’÷’!Ł# żŪõ5 ’G śĘļū/õö5Üņż ųņĘõ .ł īģUŻfśķÕ’ödś’łų ƒ#žĮÖņė ūˤ'+ä܁ļ ß"äæĀéżäģ!š! V$ģüö¼ņÜģ˜ķę(÷é×įūö.ßź#õžīüóķå.7ū+ĮųŪÜź"c ŌDÜćĻ2 ÉÓ':ÜŠ+õžŠĢ{ܵT2÷ÉåńŽÄŹī,KŻ 8Ó ėųJ,»~Ž5ųō±Cż.˜RÉŃń§€ŁÄļK2Ȃž?ÕÜ (DŻu÷(%¾€’&DüHE³Ųųé2źć~hł ę ęė (ŲĖ.ņņäń Ažś’0ć®ļźŁ31ņśūÉ!ō_üł+ŌÄé$ŃĆL ÷žāŲźįæÄüÕ į#[ ’īEŻßŃ© ē żšö2 š łČ;ō?é#žņłJóĢž÷ūß&ī ųÕ&~čōōÕĪ9;÷ńņŪ !åłź f"ąļ)šāīÕ ó?™ś Œäü  ĪžśõŽĪõ «5Ż/é īöģ  &Ō ąćcZļķ×/ņńśß śņŠŌ’ņąČ,õā. É’ Ż Ü7ż ĄŽ÷ūļ9 TÉų÷żģłÜ Ī &×Ń Ō ńģÉčģŁ µ1õéæ"&ž  śŪłķńėóĢīōżöõóŻ H õ ņ ¹ńüüü"Ā!čüń”1 ©ķż,ķė~żŻ’õśĆļ ž šÅńą&ōė&ŌžKž ź-õļńüĻē É"Üź?ķĄŹł ) Lńõļźä:"ė žģéś äńņŁĆżśķśå ō³Śę÷)õ·õäłš;ŪŻGĒųč _6ł2É'½óņćųÉĻżūķ čŃöżBé$ņņ ¼öå ęč ¼Õ`化ä÷ŠÜīĆšżēž å&ßųääķćš,֜ɚXņł*ł ŲŌéźžč( ž’ą U ņ÷ō ×ŪžųĀóęęż"śńš÷ŚšżÕGRęė$ęēņå ųõŁųęóņ ķß ė ó0&ś$-Åęøūīł+ż’ōõŲ&šŽžīÓ÷öš*łł’żöė&ń"÷(ńņÓō.šųüń_ćū ÷ 迎GēĢ&ä>³ź ąŽņżóLąźóņé÷»ķł üźśßÓśłš 9ś ōĘ šiŻ $üīīÅŽ-ß²źėūļ@ęū ś’9,ģųģīŻ÷ #:ņä$$’š ÷ĪŻć ś(ķčóÅ’ųĆś’ö ńžšēĒ2* õē+’’ļņõķł.źöšź ęä Lčś č $ūā1 čä ē)žŽėįEćīķ āųŽź%ö÷Ļō+č ųį×±ęģžČóģą ążńčõ īöōēņ!’čŁ ü ėųķõćõžü’ōłö’ęÓžŚźņ8Åļ.čüŠõŗ’„(ķ÷Ųķŗ öłD9ē÷!ūžė ō ż[ ģ õÜÉźęōŁ’5Üāę"ä1 ė6+ģĖ+A-ųśüēę÷Ž %ķńŻ5ļ Õ.õöņķéšē§ļ×öśżž÷¼ł  Ķųü+ >÷łłWś ńX ī ģų÷ĪśīāāÜžŽśņŻ.% é¼×œ×ųźģõ ’ęā Ī÷ī!čēąłöåū#’#9ūźē° żčó ū ĆūĢ<ż üÖčźūóźöī÷łž łßįü÷ųž’żõ’ Łūż’üō ó āėņóčÓ øü įłņäć!ų’ś ééņź’ ūżÓī D#Ršō³žģķ/u€Ų4ł~ī ŽßėśĄį,ÕŌ*[U$Ģ ;^äDÄčõrbnżō ņ!"žö šÉäĘŅßõłÕš›Łļ²ź€ óõūš&’ļšö’óUīńEĻ€ Ķń<źė- מŠõīöŒÉ4€¾ü0ļśųč.ļüżŠ ćłĀėō 'äéŽļéüöūeĒīäīč ąM ņ»Żčd :/ķ<ńõÖĖ?ų .õ4Ž’,ģ+SĪōöķ$÷ęüń’ Ń6ņ]ś$ŌŻ ÉČū éļ÷ā æė"żėĢ’żģ Ó×(üķĪ1ļ# Ā'HźĆÜźžåļ xö "­üū\÷č~ ü€ į*ļ’ŚšPī,ļū$żݾž ņŽģ öłŌõūų÷éāķ€üłä; ŻõüėŚčMöæ  2 [Źńńõ3÷öļē¶"ÅżöN åłŠēņö ·1ßśõė÷ńļžééćūśĻ Łüāįų͘,ßžÖįĶ Æ÷”ņ篒!čū+Pšźó~ ĀļģńéŲŅHķł’hŹźžāłaļŽŪż&ŻįÉ. ź€äśņ ų$ź’ õåū€żõ„ŻųÉ/ņųēėņĮóŽö½üŹöź¢Ū łå ź’ė.+ ęńžśüģ÷üķīłņņķŽłęÉķėüł+ ńč%’"ģłēļä)ūĀļ*å ą+ķ č žßĄśšõŽų  üėš"įč ņ:Ł4ķŻź  ąūėń9ęüū6;Ņēäų Ł&>żń’’÷’Ś&€į°Čņ鯒ź"×'% ;äš Ņü÷ ōņ'č!üžįóü ÓåłÓ 8ł ;å Ģą÷®.š¬ąšķ š Ė#ź ń?śõņõßŃ Ū Īė7ĖĶłÓ1'ūļß?įņ ää<"ŹūźóõLżł²āóYĻŽąņ( ü½ņ é6ōė1Uėīąäö%'ÄÜ×#ėēż,2ķņļ’õž āā¾į Ōļ.ī"įČ’’āøc(ķ ėūįųåļå=’ó ģ’łśõ÷ūß1å āĶźV¶õ4¼Éć&Ģäīłā÷ģńō E/!š?’ĢŌ&æćęŽė-ūćķė*ž"ŲéŲéń’ąż#°2ū!ž(€1÷ _ śŲ’ćāų’ ÷Ö Ü%÷ńBźüłAū Ķ6žåō!éē4ńēčśĮ#Ŗų3,>ęéHį÷A9ųģ÷åéöŪŪźłĢ !Óņ7ę,āåõū =¶ ōŌ Ü ł÷ļō„śčė+ ŚżŲķMō   čīį"óūķōĶé<ŗūŲö¾į9®ķ Õę&+ńūõēĮļĘų ŪŽåįų® ōčėrćółõéįä ģ Ŗųńżž0’Ä! ŁNö ż÷Ć’’€ļČģūß’āłńŻķéŅ÷C€šK.ėļŚššīīżąōē ėšļéSóēĻū„’ąįū!Lø5Ķ€£ē*ęł¶ź \/׹#vOéķžƒ×ēĮŌŗIļf€' €RE#éD˜÷åóś-Q)§(óśńB=Ō/ö$F)å|ėĄb ÕĄóū1ø%īĆ4£% Ž’Ø€›»-3€łŠĆöńć'š/gļ 6"ŪļĆŅÖŻQ € R šõŹ Óć¹å4š5ūł÷|-ö76ūŌå«å'ģ$ņšćé˹ż‚óöŽŌ#ķśßäś¼üśó!ģŹüéņģ£ē*Ų1R× ā dč²ŪJ’韞ŠīĪō ųņń²ćXń÷ » ĆößĮėŠ¦±!ķß!õķ#:ļĪ[é#1żÅ’ć(AĢ&.öéŠ7:$äļäöęšŪśß#µļ$ö<Ææšó,÷&ćĶ ńņŲīł¾čļžī×õ Kķō/ķÜŽ Ą7ķųōōŲ= Ų'6 āY Ü ōēš#īźĮī ŌŠ.µźäźÜ#Ū*ŃųłĖ5üŚ(÷¦óŽŪą į×óä,’Ü ŠFAß) ·Ą)Jćõ’Ąß 7/śüź¼īń¶īĆü1ī’’@łĮŲłĶŅ Ģó°1ōąžóõņņS6ł¦½ģ!*ĀŽĪō’ńķ£ż(ė2×õäūłÄóīé:łåŁżÓįń=ķŌłŽ$Ē@žš·Ņīšßīā%ö÷ļķüėŠ čūĪ"ö€²ƒčķóę nŪńōęį1ģ ż8Än › :†C ÷j¹ē ēž€ģūõóB €ōób!ńüj%ųŪÓūĆö.2(">ėäžšM *Źā)Źūļ*€pźÅ{žA3~1ĄŅmńžŻżĶłńæ+ŪųŁ[b÷ ēų Ł?Ģ~Ś'åż ńÆ…Źėźå 3ņGĖŠ?ģęźå!Ł ’óŃŻŁē˜H°ģüß ūÜķÖł’ÜųÜŚč öĶĀĢę7š jß>å* šõįŚļ­ ō&/éūįóÄŻ (×ē-ćLūT-å’%!ķ ąŻź+7įóļīóčį,čā[ōÖ\į9ÆÓéBūŅ Ż'÷Öņ’.&ščōµōa ļ%ć &čžėžŽäž’ éĶ$ųnõéūūģ©čš Ņ,óķåęīŽåb¢·ųSö 7źjÕŁŠūł.ß čāē #ūņEł 3öé ā³+ź&’Ģņņź Cżķ8%ö,åūµ¶±żčÜéēń &é’óä÷Č žćöŪŌ,%'ź'{MüŻ ä  åŲ6īõę&Ū/Göøåż4é÷Ž 7ń(ī7×1īųß ü÷0żåųĘņ ś śłnŌė€ ōį 3śēļöō!ņģōņßöå-Ļžź ’4€ šB÷ ć( łžĀß÷ äūķėŌę äųčŖ&ėż żę*ņ ¾äĶõéżµ!ēķīł8 ' é(ć65ö¹ Łļ Śū ų- Ęō ōó%×ėŲ§ōä:’ Aźó@éóźś×Õśē÷"å&Ż(ŪņČś õżčJķöźķōł .×ųÉō*ä<ąźųõü7ąüĒ ē&ĮźėŚ«Ļ,ōšśī’LÓēōšńńś !éõŁł°’śźųżĮÖ7ļńļ…ż $ęśéóōé ńņżQ* ļžüś9öōDļ ōIĖų ż/åśõąė(ęł×īIēįé3žō0–ųŽ äü!ö’Vž%ūDīīžŁöż÷ņź& ö÷“6Ó×Ģ-śÕ ó:ąóżßź į3ńš żōžæ%- ä4ū÷ėź Š¹.’ōā&ń'# žŲ!šąĻÕņŽūßčåRņõžķįīżÅč$ķ !üH9Śļāļźʱš ē żÜź ų½öü2ćš Ō čć’’ #÷ŌŚķĢżč Ł: ßyŽjlöÜĘõżķśĒüŲā 1ł!żżłėü ęõ  ūź‚ųé/Õ5„ ģŚż ś ÷Jóß#ōõū=šü $źŚł ’õ]ŲŪeī%5ųö6č’źśŠŹÖ!’ķļō åāņŚ śŃūłž(*įšąö ēČå śß Ąįź8Ö.E9ļ&šłūåõü ółä)/÷90 NłTŽ źļą żöōū ģ O÷ņÓłĀńü1ę׌81(żE€ÓłŻfŌöźĆö¤=õć+åŁūī­ēēį[¼½ś8Ā®#(āó%ÓöÉį ŖāóŅīõē)ķ×_*lé€ģėüļüe QćŲÜśųģ÷]ģ)č3ųčņķ Ņėķź;Ž’ļćżŲīśōųżōó"ļ× óŪżåō#ŚäųŠŽüÄ’ī»ąī÷Šūæš ’*Ōåūö  ģDųćčĄūóŁžķŹ.ų ś’,+ėÉł3ēęT$Ił+éž.ó ’š&ź-ōäGSłų¾oÓõš*“śŁĄ¬Õ«ī öėó'łüÜ  åóėõķ‘ī ÷7,?ūńżńźĘSć (Q%ōÜł$óūō&m#ōčöļƒćśłNķĄNšø°ęłĢN×Ū Żwļš(ŽCžōėä8ōėŁ¾+ń$āŚŲ-Ö!Ä’$ö]÷Ų<ź!«ź½ķ.%0ÉÉójęķ -’Öüžä¢(ćÓģćÅѶēćęäč €ü6ÖźĮēėÆž6:×’ $ öė»ę¬ėÕźéń4 ōńš1*īlžö $ūöņśÜłć įīś’æäś® čöŽĆ÷üåóķ į šŹ $ū%äģ)÷ģōķš·ņÖśŽ" ;ó śļŻ’-å.Ų÷ļ/ōłśįļ+ėŲńś+ųéĘ ŪŻ @ļ)ś<šć@’8 ¤€ōöłūžåłõōšŚöū żčł ņżž ńéī öä!Śüöžō ’ķżü ģ(ēżīŌļģŽ1Eąēņ3ä$Žõš žžš’ö÷ņ÷ąÉ ō ŹąŌ ąūźšōõųżōūį׿ōś żę O¤Ž;Eüļ"žĶž") ±åõźüłüéś3ĻõŁūŖć€łĶüłöÆīü %ēļ)śęł ó% 2ėÓųżÅG˜īž%ęūōį3ķ(6ž“čC’Hs$".ķé 6ü†  /šē-īEÄÓEyLĆó+Gā żė’ žé»Pź½ēĪŹģŽĻD÷Ņ"Ē.õóŅ-Źēéļ:óŻVęź!@-<¹ ßöČ7!ń€į1‘“*4GéN3 FķźÉÜżoĄjÖ% ?/#€’!/ä+ōī€ņŖV8”åä(Öąō <ēųłŒš óüäą, īżÉė CūųÜ÷ ü¶ūĖ ß¶ó@X’ŃąūĪ Ńū,ų÷€ć÷" Šž»"łķŠ’ų€õŻ īöżR’ņūżśõčZśłć(ćŚ ų ųųé-×Čūüųż5!€ņčļZŽžó žŠ*öŚŻšĒ,āÕļ3 ū"š<Dü"ųŚöä)9÷-ģ’Ü ķįÜŹŻ[¼*#-×å5ėSDŃųæķÓ%Ģa’ Ö&ē'Töć2ā9’Ē-°óSW)üś‚' ōÕ.ź)ńņOŪæāįYÓ׿śi7$ × ŃÖ¾Óē äŠĀū:E×ū¢4ža`D­ć ĪĮ×~Ć-'øĻJkšžRåZ5ōżńåņÜ?ų;ū 6CŲū ū€ŌÜ’’čß#ų ü¢9ō ļGN÷ "ę÷ēæķ’ń ķÕļįü õšõŃūßö Ešž;ųõAõöķ!äķēū €Ļ¢ćķ-ńöņūõöĖ]Ž#Ó9źó÷-’÷Eó ń*ąńāōéżēļńÜ­ęZéłźēńó1łõ迣ü ś‚żūõīõč"łšģėü!č)FįS$ųüŻģĶłš;ōĻšįūęģėźüčéć$ōäļ ųś,Öāįį’H :ńųżļųūē’’ńėł ģŻāų÷ļ×ćÖ’ūĻ$ q÷ šüųņžų  ļļółGŻņšż%īū#Ü óžöżü äuźū÷ łóšūŌ łóéżų’Ńļ <ū"éģ6śųóé((ŹGķķżž÷ ņūó4’ļā’ ėóśņäV2× ńę3ę¢Łæøēõėńõ©@ŠÜžūųåĘ× ś(×+ķŪéņśõžźń ņ,ןéž"Ł"÷ōčŌ6( ĪįŲ įļÅńłņZźü ”šīł"ļéśūė@Ń#šŪÜ)üōįü$$²ģŠš ćŽćšÜN£iū ŽÜŌūāö4Õ<īöėīźņć€Ćėć"śęį½ēė{&-ēśłčŃ ąį1ļ ‚ öżūō¬ķłEīž¹-ż ?ż’ D)éģ¹ś9śĢóÜļõ)ł/Ń*ī"ą)ėō*īēö ! ē’ēDå,÷é& å÷ü€äĘś’#Õ0żųķśžĶć!ü(ä)Y ļÓõģń!Rž Ż”$Ś %€Įģėõž÷× ĄśśēÜ łžå$čÜų ĖļÜ!÷"ń31ļļüō÷ö<  ūūł&žü $ĄR#XÜŹÉ)G’ ó5^ļųöśß2ė3×ö -žīHę ąü#ļAĶņĖ÷ōžžģ ż’®#+ū-ž/!Ž#Ä ą!& ū 8ö*ėņųĪö L'Ū ä LńÓ3 -õ "Ń ńü’ ęŃÜżü"’ Ō-Š4 Łż÷½ēŁĶŪ Äēņ Ź  ōżAķŃū ī"ä8Ė' $øŠEחČĮńŠŃŌś×(Ćåūžśö =;ūģ'’é’śŖīķė2"Üå »ÉāÕ*6ź@Ļ4*ąJ ĘŻ )īųģāü=ń÷± ųō÷,óóņņóą* ęęHfĒē½ēŻķūų7ē:Ėķ ļÖńū ÷ā%ńśé įļś]0ńü ž-ā &żž’4ņåżūź’ż šūūłśžō’żįśś ćžöÜźčļńĶ÷żų4łżįö źŅ ’ ÷śķūīźžģę’č ž1ōäł žžō.ż$żóžó*śģ Ū ÷ł !ųųöšżšłŌü÷üžūó žõē$ļĻ ėō8G ŌŁłüōčžž ž÷Üłįńō÷šśł°H;ŲóĶüłčŲāŲž§$óćōą ę÷ņķö @ńäļńļłCÜüįŠšś÷ū ō€€ö6ńļ÷Õö ņBūģ EGńįšŁūž÷+Ņłśāźķ2šē5óH 3ųp HŠļź@ü Pųņŗ üśéLåż÷€ $śßźšęń.õBč ’3FŁ ÷Ēõ ļ ÷Žļü¦ī=čŻļĒėŲŁ'Bī'ŁŽü!’ ÷ ’įó ķčół³5ß;ŽćÅ öėōäż ūįÓłųóļ,Ł÷ŽłŖ\ź%/Ü0&ī÷‚ś’õķ泊śöCūüē€Éāš½é<ŹķfųÕė(ĮėÕ !ęęɀū%ūŻĄųŠ,Ö  .;ųņ’ģė"8å÷ ’ņõõ,!  łņ’ēńĀīųOąłŪ$ćßĢŪóēŽź,ł¾ (ŲšŹķżķA ż'(śĢĢó1ģą\üöģ ń ļN$ż#öūģłĶ:ä9Ó Ö(ņųžģėńųH"#üµżå 3 ļüūÖäū'ÅmķÓņšéå(óąžfūäĪHęāėīüÜóŲÖ'Ķą8żōžčÕUŻÓ€ōÜńÜÖózAā“ņ!:% dģ€k×"Ž86¶ęõö€īāćėōžäž9÷žnüū÷ł2ž,ź Ą„ ń5įæÖŪ‡Ńš…ęļéē' čņ3żöå!żŪĻ BOåP’,%źśę"’& =DŻ$ ģ Ńļģćē ų ę’õO,Ūļęü. Z#Oųūšßłū' ŠśŌśłöĄūŌĶ”öīõ "żōgś ńÜōšŅ23žŪćę śSūśžōžåż6ņåī,īśų“×6 ē’ł Ź įžćžä žėūņśūš"ļż īīłóę ü7=)ėGč÷ōŌų;+ų^ł= ü'üŅ€žń ڹŲFĻäōēøźäą÷ā(š$Ü ö!ō÷( ś(ųųĻĶÅ©ŅśāķšŲAüäTąž:ÅéåÜ÷Ś <ų™ė Äå /ĘŌćŌņģėžC >ÜųņŌēĒŲ;ć4 Łä/Å#ó’ė !ąĪĢ59ĖųĆē  žųćł2}ńÖā@ I Ś®5(P & ".Ūń€'ĪŁž&µź#JåķŹßż 3ūņ"ąČ# ć0+׳õüüżH8čŪÜŚŽ(ūĒßü ķźõż Żū ; ŽĶ诜ģŲžü¤õūžß%  ż"# óóņŚ6žõé'éņä ļćł’ł ’ėģ ÷¼šC Ż ģńĪš ’ō2éüõ,Oēčśū śōĪļ¼$ÖžīōōōŪ÷#ž* ćżęģś)÷ģó ŚōŽėóŪøÜūČģķéøžÕ ü ģŻŚš ļéóŽ 5ėąĢń8éö OųśCéžōUŚóüžŽüōśłŗŅM ęķÖü2% śżŽōö%åżäü śęš"åīAüĪŃ Ö ä ńūųķžīöūßĖŽÖ’€ÖÜą+ōżåÓä%÷#S0Ģ-äź éńžźĀū‚ßÓóīéūś *!å Łž4üėŚę!Ł$~&įÖ.ņéłĶīšōdųį 3 6ęÉ &ņS#ū öĢ!Ź\* Ų—80Ņćčßśó/!+ É=oųC÷<ß÷zģ1”™õ &’öåł 4:R%ŅĘżō (źĻ ’Śā6  ļNŻ^/¹Ī½īŹB%1ó øüĘqńßńQ—ģ£!;&Ėś!“ŪÅŽVŽk ęŠÕ ,č'·šNęń!ĒĪ?’% ° N÷!ķ+&ēģū÷·é2,ą £* p 7ģłTś ņE/ ēłŻ ūßĖ!źįń€ĻÜ÷#óī˜Į&߯Ųō Šīž(_ Ż ÷ņ%Hķ:Ņ2Öųē$ś ,))$ 2 łå2 *ć&(Šåś+žēī é’’?Ż ūšćŚč Ū(õ÷ć0ō1Üßģ©ų ėß ųčšįüÕ{ó   :żč'ģŻłē >ķŪ ł ā©Wųõõä ü+# +'>Ž€é.ē  ö.éĀö0ģż  č įų żķōĒ)śē ęłłśŻ õ€å.ū€ÅĮżõ€~ńõųõźč×VOē ’ö÷åė }ż/ ćž žųģ’ķ 4żķÜ€óõĄŖ’ Ūų$Ū"85 ζ<éÕ!Éūö-ļ éėł ćšļ >˾M㠃äżģéźé ė- Šź Ż īŪ15śåĻż%Ųöķyü6ö*źźGł53#čšü3ķ0ķŽź>ӑééĘŃį÷ ęüÅŚēÓšLĢē5Ź;č×ßŅśqģńÖ<éÖļńÓäLīļŚłēß  šžūłžóTÕņęNüō ż źŽ ęō ó!4÷0_2õń)ļ3óŗ ō+ō\Õ/ųüōń ųÜļĘž!łö Ö— )Ö ģ śųęōĢüō(õĪõļé)#ūū 9ä ō/ąŪž š! ūźŻ üŃ ųę ęćęåā4ö÷ł śŃż*2Īóüi);ął+ņ;ńŲ }ø’šŹģCųÉźžōcą-55õRBéźæ§4ŌķmÆ2€×B,G# žÜƒ0ā źš.ųrü Ņč$5ŅņŹŗČ·’żÕ–āB„ć5'šö =ĒõņŅ³ß DqŻcŽāy ł€Ųš2ėš*_ü³óō ż1ĶÅ" Ōģ ōāņŌųõ»ąć,Ķče¼ō±ķŽžå€’$ŹęńLütā½łŁõņ™֒ńó’"żõšÉζ)Šźžā41ų īų÷»żŚ3, ÓßčØäČż ÷+ķį*=åū Ä8śŲ4ĻDśõŪīB%3$ŲīŅńŲ³µü,ń’żųßę÷!żMų󳚣īųćśé?IÜļōē)Ņćś ’üžųövšīļń ó%ųDū'Ū÷ü)į ģč;ł)ūå Ćżūļų~P—ę> ś÷Ź ķ_õżńōöŚ%łł ųģJæēŅ裳± 1ćčą%-—ż üźć,2åŽ÷žūņņŻö/Żz+2ń2ķž š÷)Ųūä÷…÷×ēż>īūŻ %żķó[ ŗfüž¾÷’ł 2!š€÷ž O€Ż÷ń€/-ō ļ N9,õķŪR.ź€ūTõö /źėž[ ķüéĀ9"åFęöŅ4ņ;H­ļŅö šć4ßōēž†Šķ&„ūŌ -č2śó-ōģ¦å·*ų’Ūć&€’ķžż éZ% 9ęSń ļ Nü  ’ųܽōūūžöńųń ³ēłēDł :ĪżŁé ō ŪüõÓåžż'ķ.÷ꀂUķߎŽļåī~ˆę^*ōĻ×+" ęõßõĮU_Ėęż=-÷ é ä$ĄćéuŚłö  üą üõ"Ó% ĘäõīłŽšīDųšßö~żīķņÅ łūż’śū&éóČžž’0Żsń)źņŃÅ÷#ņ.Į:č ,ņń Üżźē±žß õÖ ąēŌ’ł ΁šüńčų āŅīŲōń,@žņżqö÷Õń’1ū2óPĘłųūßĶļõ °!é*īüźü.ėėōö¹Åū š1ķ1ö÷üüņ€šł åYģ³€ó ¾ģæ õłš×üÄ"É!(%ōŪ öéŪmėų/Ń0 šFśõęńō¹ģåżqėė)ž£żöżK šĻ:”Ģ€€š÷öäŻ0āRąąźÖńåVĒéŌæūż üĖ"ē ź Yš*īšjś"Ūńź(’śĪ ćń6ėO .ń "łÖ 'ńž öÜĪŁęŽżŻ Ēį€ŗŻźżįģī> AųŻ ńšķ3‡’īč’-ė/’©"ŌØ0×:ž×ų,ųī÷õų ēņ»ķØųĀś’)ž/+Ś×$äžżöü98Üōżł ąķ ė÷śŃVÅÜ ģķAß ū/0GśćķżōŪūņĶ ūóąńfćč#éżćŃ8œ4Į9!ÜŁł),Īōė ņĪę3ė½ē_]ŲĻéč!źņĪżćžĮė 2fćšśüĄńļ½żį)}ž÷ł äć ÉŻ÷ń-ćVžÅż ½ Żēąä’āśŗį ö€öčÄ Öį!żŲü2ꎟāū8ūīė$·ż ;,üŅū&Īįų€(źęēŁóš$*ģüīłÜčū-$ ūūóč(÷ ļė’ņł’¤ė÷ ü5¼÷ÜDćąäūÆ'ų÷śśķČōńÉõ[źūč„į’ ńłĖśś8ų%šö†ą õ;ė6żųõšėīŹń2ÖĻ’Ćš!ļ ėżń%ō! Óė8ń ÷ųUCĻŻŚ-± žū+łłł ķļ ś"šöłųņī ŽäŪ žśŚų ļŅż9õžł*2-4éķõ.Ūüé€ņÉ"÷ų$}īõ4Kü’I|7śńČ’õļi÷! %öäģłŌū€ļł õŻ…äķīėęžńėżū°ćÖ ō ó€ ļŽžųēē"%ł×Ø ßņėö’!ėŻ€"8 Ūģ_%” ±>1š÷ęčžķ·÷Ó ›ōŚķįŌžėģäüīÅ&ćņą ź C±éŖÓ žł!Śõžņ ė õIśż(Ō„ĶĶÕĘėÆŪØź÷ź1ū_<Ūśö¦ņ Éżū’ķĄė.ŌūŁnE ”ß÷ )Ū÷€āéł ųņM'’%ü5IćŪĪŽ ŗū쬀Ń'õź$æ ü źµ ņū’’ßAŻéšžęĄł)ÅłūŹó²üā":łĄ åģū ė Ū fŲVą ÷ÄDĢM+C0ń &/ŅŌŁżūŠæÄėõ Ąč¤ć+žXżżæų/(EWY,’ż.Ŗ!ņĢäóZĪłłõńD0ī²ćŃā÷ŅXśé@ńöŠEh!ū ć#9ó @ä +ÓńŽ Ėüēīüõ3zÖöć5s/ĒüķŽųī&žĪü¶ń é…éą,ī¼ó (ī0žą?Fr÷šįæŚ ńų#č,ćŹ"÷é:pśżõź’ģņöŻ>×ųż V";)é²ėÉńéč.' $÷ź’āΰ2·ēĒźņ !āŻäP÷R"™, ē”óūśö6Ū¤€ņ9S€ķĻ%üöų'+Üē÷ßČžé@ž½ķåįų@įõ€Z:×įķśBāDå…ź€ +vę„÷üŲkD"ŗę üž %ī ęŅ*Ļ#ąż'ÄÉ õūō÷Vņ’ų1’½ņ ž÷*ņ©ī DEéŪņIłłżļžņ’ŃÕ źüż&$ #ÄĪā"üłšƝś g żńõü“€Žśšä÷ėņŚŻžśīķ ż åü3čģžū÷ā üö¦ųĢÓ ó Dżßū čģģü<Ņ’ūžķņ ÷Õ’VėŻć ž ×ā:ō śćį)ōõī Ņ äż.÷ń#NŲÕ ųōļä6źéł žōżņżŲō ž÷ōśäņÅóźüīæ åžQ/  ūńÜŪÕŪķ" Ś÷#pŚ$ %żńķŽŻ,!šü åąēēŌų*āI’ Öõٳšķżćüęf›Š"ł¬ĖNŒ ߟמ8 Õ,ūģćš÷ ņ÷Ņō*5 žŅ&ė;Ž’ ń8é* z/ŁOšöĒ(üūļū-ŽĄ' A)åćŪ½ų«AFĪWņĖŃł4čåÜČķēó{ķ?nŚ žÄšģž€é-ę× żåkōģ .ūItąģ’ė& ’õ` äčł*šžåża/ļ¶å4ļ^±Įū śü žń ’PĆĤõņŌōżēą!CkŁäĮüŽė $ķ(ś2ÉSŅŲņG—ÕķŚüßńĢó7ś2šå,>7ž錜ķü׿(Ģ«£śÕ ŁqĖ8Å4Ņ5ĮāśßóėŅśśėżõą¹Ńö ×&ź Qš Ūöå”ėŲõĶĢūž ž"Ćüńč$2ŪõĮüūįŚI ļŪö+šDń.ōG+Ü P śż[*ėŁ°Ģ Śżūō×ģŽ"¾(ž.+!ū—łüäę Iļō źU÷+č ē*Ļ"飞;7ūĪü öŻīś ÜėśŪņż÷BóŃõóė6ܱŻųĄ ö Ł+ ų 1ńąź+éł"øųÕäk źś'ėżäķ Iķ’! ōżķüüīŪžö’Óś’ĮčóńŪüż€éõķ ģśž ’ā ¼ćż8ųęßśę³ź+šśéóķń$ļ÷ń)Ž$šŽ!A śī°’ēÓLH=õ ’żūĶųģę"Ąć!®’ģččņßą@ •ŲEÄ⦜ō4čvXšļFśą&ł # ōĖö ķ=é“:¬Š)’-ų1ŃėP×#įī*ųā!ßķ’įį’žCāĒå ü= ąņõ"5łŁÅ$]ę’&®śēļ-¾ āĪéŃÉöšÜüīīGīä3Īą:ļ€ņó³čÜAļXń(8ś' ÷ żS‹€ēß%ö*į÷į  ū¤Ł&ģÕĒĆ2ć āęōŲ’ Äžē8ćČōśŁō’ņł&ł÷ ÷ółöžü, ņö'ņŁ÷ź ’’é!ķāõšśž#Ż0%Ö’Ļóńō˜ō •õ×ńź? ž&Śźŗoj%žū ėõų>č3ā ō īžś M¹·Š 6żżĀāėß*Ńēóą®÷ģÅÖ ų5ūž$X:~ć¾ Åģéż’ŸŃ! óś æĆŁ+ŖėśŅė šÓ&.ļ*I’ģš$33%0 ģÖSĄ½?ąśšń£1>Żö))ōņ ,źńKśčę°ōõóĪ)éöęü šXøĖłéņ!ņģ!·ü½gõ÷;6 ś÷ā€N÷Ūõßų;Ģżś*'ö&źŽ<"ēž’+źčÆäÖų7!ūķł!¾Ų  õ Ż ō ķü"O,Ł ō)Ęņ ÓŌ# -żėūōńįĄźõŽó1Ļp’J#ń*l Ł÷÷>  Öņō õī܀üŪóüźī`Õ'_ś~ż*ņ įåł9ü³ 8*łŚš#õéśź ŻęļĆ»«žPųöą`ž%÷ļōčĻßų ’üܧ €žō$ńæļĢųééĶõąÅł.č%ć56õKQæ5īų  ĒŠč,ąÓ,:ßįč>ģ÷$Q# ņī ßŲč÷ąśĻ+Ūä!ö žŲŁZŻļ(ūRą6ųōĒńć3ā0łłÖūś+Nü÷ × ņ!?Õś"ĢÄIŅāü0 éŲ5ģÕ €éČ ) 3éńß’Ūįćcę̳ņĢ> !łźģŚ 4ś ڹæ3źłŠīō.ä»ćõ ōŚęīĒõłśŪźč’&:1/ź(å©üįą8Ń"'ø’ō¾ ōśBėōÜššéøų*īĻ*õ\%óšģżöŽńģ4ķĪī&Ž1JKń Dš+óõōĶ ½ėÖĄŌņōó;ļ’² īÄ U’mčé#Śķ' ģŽéžä’8åöė#Ż+Ļķ.ÅźEĀą') üN&’D"Ö óĄē.ž 4÷Ū’ ł#ŌģūŻķ?ÄģŚüēLĆó³Ä=#öč*š6< ×:•f*ńéÖæąśśåųŲ÷āE%č $ļ žóōžDõĘŌõū*Ķ >ē¶Ņż:ćöż"ł× ļčļŪÜŁō& ŚĀä+Ā ÷·Õ0ēį  Ūūžłnźūąš0õžńņŪā ę ī ¬ ū樒’õęź6ģłüö·<ķüŪ3 īĻóń¹ūŽäö&(ō!żé€üĢö÷ž13żį’ś#ūņż=æž²Ł$Bäė6Éūźų’’ķBé Ü=¦ō öżžį!éūżč׿ ųßżĢ IUńōōńŻĀä2ųėČ æó ö#łīš 'ōĖ] Żļ ķž &ōŁšģ×åŻī Ėäžķś ż čō’ źüų ļąūäņå šõółśöą ü÷ńēžļ + ' Žął÷łüŅź×ć ś(ź%ū źh,õāłć2Ė÷ łżö*öū! č ėõķž š.÷ś ūśų޾’ė'7ö<č żń,!Zō6~ ­éüńōż÷Ōī[ų&@÷īĖōģÖ½%’-3ÉĘŹäņäńkž īūę;ęų) ±Śę ÷õęęü9Żł³,N žø"’)=é£ąŠõ…\Ń īŌń¹ļīøÅ÷ ą ÷8ųśķŅõäśą üĖå  ’ōöū%& &€Zuė÷ ’÷żōŗŃĢ,śģ[ņś äŌ÷ćĻīķĶ1­„ś®0>»ńŅģ+Åļ3ž¼ų{'IŲ>ī»=¶=S‡Ś~ 5ų€,$›Ā-ąÆüöūĻ­ Mä'ōe75ų ÷H뾄a( üåćÓå¦Ó`$Ōß"ź}ĆålĶöśįĒf÷ēŃö.į(Ü ęG‡ß蹣äīé#āvżķv#M7'$.*śłńåõóā@Öń• °= äå4ė ķļó A’ üńāćųūķ—Ōūģšó ž ōķœ?¹„­ į( j ó‡ī5ąæ™Üõ 3ž5źÕÄĶōŹ5¦ ō %÷’÷×2,ūõ¾ü6ņó0īģō ĄįŻå ÷7Ņ&śėóC(ōŚ ž 95óĄžų€  8ŚģÅņńķ Sš÷ čķ č8÷óŃū ’čåīĢ%Éüöó!ÕĶļFŃä"łī;÷ņB×Öōą-ņįņRˆ Ū ßµ€’0ń€yŻõŃ ±įžāõŲųükņšļ€ķ÷ŅŻųä )(ž‘ąś"šłśœ€4 Ž9ėų³żū)uāē:'å Y’Ėó,źņ.ąVļķäūīŪ¢š2õ÷ ?Ųī$H¢Ö÷ ų Ų«ķ ß å ė ų % ūźÕܚڒÓžūŻ õõéč’’ŠŠśŽü   įóśšāśŁć ńü'÷Żłō÷ķ&ė š ū(’30łłõžšųśśų÷*/äģō ŽėŁå@śōōńąüžųä"ŻėņźöšTł9ŻÜ/öū  ėļāÓīöĆ šķ;īšóö’ūūūł·ŪīėņŃżė#Žė ūš'ļ ūæžZ"ŌŽžÕų/!čć’ßž#üē÷ō1 ÓŃ ņÕš- Ņ3Õ Ņéóõ0ōōź5õāöń ūū ŚįßŃŚļū;)/"Ä9õÖėĪ šēó :ņ÷éē%,žų3żõ1ūõłūé&łņ'óźīī$ 4āåāŪ'¶?ü!†ļ×ö éń/1č ÅŚśųŻßč öžĢżĒ¾ū.ōęÜų÷JJņų ÓįčŻ2 öņéÅå ņūųdĶY–ͳ×ÖÅ‚ ӂØļ µÓ/żė&ģ÷ūAŪÖöų$Ą.X1åkś*Ž×ģõóõš%Åóžąģ ÷ŁK ėŽ„§?×&ö ꎿ« śéłōåķŲ å ĀÖĘśąīYó1ų€ü0 øćäīč6 čśA’=ßń Łųåōķöāöų(Ļį@ō śóĻģėī#üćÜōīŚßč @ėīčõķ īģö! "äŪ ÜēŲó:õ Żóļóü÷č+ĖŲōśüāįõęńŽś’÷łéšķ- -źžśóšķā-ąāńźš żŅļöįųüŚéĶ×ÕÜ ųöźųÖņę!ö’ŌöūĀģ䊿ū $ćÜńłūõéõąš&ą ČX€Ńłō Ēö ®  -± µ2€€žźūųųłÆŽÖį č€ ō€č?ö ņ€Ķī’€śķ0ž·źż #豀 ął÷ Öģ,+ ü€€€ż óĪŽūßʀ #€²ń ķŚ-žĖš€ž÷ņ2żĪųņśš€żłżēĮ ąą€’åžēģśŽŚö$÷×ū÷ū 1žź)žż:ņżķ ąō ą$ ’&ł÷üż #żö5ļ#ė#ōÕųķė¼ū žįßķō. ’ŲńųģńģčÓõńW2Öżõ-:’żėźś! ģķ/ń’õĪŠš’ū"ē źÜīöēūēłŌ ł ęž'ÖŁ,į÷ņż’ žī+ęüžūė % ÷ęÓż ūįąóń  ŽģÓ äż÷ō诚ŹńööēģŹćźńįŚź éķżęĻēōöņģŅöŽ õÓåēāäłõėžöÓõšłÖüŅėšÓīśŃļöźłīųŌźóŽöōģįśé× ź žŻ õŻõ’ėößķŚ 4ļłėčöšśóžēōšB éś ņī’Õįóļļė#źŽüūļāżźčžī’öéšå,Ļā’ŹÅ óą„ģōĶC/€ Ąņć b‚" żā~O)#ķ;ēü€ļ)ėźŪłƒ6ˆ€¬~Ę滊€õŹ€4ė耀Ō-öśƒKč$!_ī€'€~ćÜAĻĢ2µ ś¤~Uąé€€ś-€7°T*¬e½v=åø+HH2$€Ļ~†HxŌžĢĪĻ?”óō«’Fć$M5ĢŪG»Š’މĖ{\ƒĻŽc‡ęȼmcąęöĆĮņ%õYū»L•š€]ŅŚ~!q uJīŁ6~#Ž~€&Łqd"ņŃó?ų„«-„Pb`ꀀ€ąÜä€- ŗ~ډ’ōWüŗ€ķų•¹\€ī«ė€}ū"~Č ß *įŃŠ€ĖŌ“€UŁŖƒŠl oŪöäՁ85ē¤0žKĶ€€€{ Ł;51ā"÷€ŚŹ.~nęśI+óčŠ7qŽŅOaĄ¶!ä8<2ĪĮ€@!Ė“/!ö>ZńäQ»ė~¬€¹€źZ=č Šd†’H‚ŗ …Ī€€ZĪ;3ćgā€{źšļļģM0䈹¼!=9ė7x;€>€čģ!€čŁN*`Ł>śZąūņØŅ+€?ź:é¾-Śź­³)öŸįr÷åÄDiŅśP Ā b*掑ĶĀ€č'T˜¼~3¾Ķ+€IĆßčNn$Æ$€åØ®R^¾h?öä‰P°ßr€ aG€®=Lņ€Į¾‚Q#:§€~ū¤N³8…ÉA4÷ݾÖĻ<õÖėŽ8 ŻSݵµJ.čP•|_^€‰’ūż€¤«ŁV8ž©@ü)z©ĻD7Ą_pļ¬ =€PX1€€}žP­åc€ÓœF(2%€üļ4)ƒ“æŻ·õĪŪrŖŃVńĻÉ(^,%Y Å3@ŃŻļ”ī~óĮ$Éčüų©,ŸŁW¹üś€×*śĖÖ%Ėž ėĀńĶāźÕ!® źįāĀ„żÕ9,­K{ōGż-!ŌŌčS’¾ŚŲ[MÜŲFēŪõ£"óöŚNAüä’飊+ÜŌį4źēL€Ōż÷å ŲöĶėžģ’µū-õāāłėŻ1± A‚Ś×ów5óĪ}šJß_+-ö^üę1ėĖä¾żŽĻ Jž€Š÷ ĪSį … 6Ū ¹›į<Č ÉŪłžŲĮäĶó,jĪöžAöņ³ĶĖż¤ŲŲ;čļčŁÓį?šū‡¼²ĖE ź ¢õå ÕŚWŪū45R øū/¶Ģ.ž #éó0ćåĻ,0³ąÖą77©MųCCż#AW=Ņ!Īā X±ūąļ3Ÿ- sQ%ś źČóķĘšŽņÓ$ś )æ¹ćķęŚ. ¼šŠC×Č)+±$ģšū>Ś0­`ųÕī ņ M9QóiöŌŪõ¤/ä ßł Ą$6üüżāāą»%³ų ąBėFņńī¼6ź’²įJłå-!ĢČ ō~¬d€€¬ßĄŪØ­~÷ ŪęO€%@ž&€x÷ Łü;÷Ć8ĄčŃö5OŽ×rių`;€łĘ!ļ’€CŻūĢŻó灀qūĮ~õ€Ļ‚O#M€Ŗ ¤ē(~9²×€śZŃi™ēēą”AŻP,<€Ot÷Ə"õŃĆX Ó~¼@oŖįßO®"Ū)3=?å‘öłBA€rdNŅysC€ŹŪ|ÕRŌ#€ż;ēb©óĒHžM-lń9g.éĶć.üč%Óņ3+;ݻ޸)D¹ŽōÅ?AŁÖß„~€÷Ļ~·ÖķōH÷&*“ų¦ōD¹üģU(,äćhrĢņĄč·7ķł.ĄĢFūī"śJÉ„D3ßYż2ōœuĖIƀū.2GšNFž›ƒøÖž ćīÖ:ŌżöĮ`žĀū¾²¾,{ ķ~Īń ÷ŪR ܵ8M,åļõ=~Ö Q€šBōįšķXģ3P;")?ÜóŁÅó<>Š)æ%4äŻč<ÉĖā1}Ę%}ņ… H€Öåč@ӎݾļĻ·}į—€>ąĶĪčŲķĶąėčń¼Ŗ÷zņ9ŅfĶńļ,  ¤ūČä“ōš7 ē8ßŪå-A,ÉLż2ē6MōĻՑ.M3ƒD¾GÓ1ĶÄģūŗ€ž~TįB  ėćÓZM$Ké,9>4ʀÕūāē“żó üä¾Éćė óóÜżšå×("żō"ŲŽóüųÅóAņŹī*’įę Ó&- Ņž€!Ėų2ģ0ŌĘÖü&ĻÄūō7 µó¹é»ń€ń³G°?ĆóĀ4­ŠCŽżŽ%¾ōŠ ļžHD,š ńźüņŽŻś Į’Ä-āäFŻĆ 2āńÕŹņ»?-ńÓźā'Ź!(ż: ’ŸIļ×Ī÷ õ_œé4ķ$8ØńPļH ąIH1nģ?÷ĶIŚa«sż÷ė×óśõߜ޺ž« ŠöņIüó#/ņņFŁęAī0 Ü£0ø"Ū"~"ž¾ń€÷Æī@’ ę3-`źŽć: ŪŻĀŪėFŁōÖ6«ļčłRŻZ €Ī óŚCÖ#DÜ i’ĀóA§Ž€S̱>õņB'ļŚß$-Uļėč4į’Očń€7ÖROJįćĮś€ÉIYČ’Ś, ó-³į Ģņ &’e>īÅĒ4Ź’čū’ī$ćņ. ĒīKé OźMßÖÖ. ņ4לņĒ@ĄōÕ;QõIų*õżć”cóŠŲåߤšŽļĢ)¶ēĆå!%³öōŪż’ņ3ōÄōįŪü %(ū;ēäČ%-˜łé­2č×4żŁ÷+ņßRŽĶĪĻ,ū õC%ļåąźĶśß ūžūĪź«Õ 0“;(%üaĄ6ó Öēæ99 ŅÜ(Ņ7Ķį9*ŪłćóÜŲėĮųļyüžįK’#2HżCńēĒ™TuįėAÜgQĘĶō0-·Ö1 *ŽĀĶÜÓŗÖģõ’-é%jožŃ .ūPÜ’ńH€C»ŁÓóż.żŁ·bT’?ŅĘėłN:åčļLķ!ā%Ń8³*Āō/õēņ)īŅŽōI[™Ŗß(üĘßż,ų!Ōö×ZĒMō&Ŗ”"ń`’é LńŅ€éŌ « ņŁ%öå5 * łģh0ėŃ!žwśhž’wPćƒŽāŻōŹó#øŪėēüķļķØąJÓųŁś°ČłÉ‚D’ĀXĮŻ`Rm&śłū,WģsüDī:ŃŹ®N0ėų}BĶ2·öŌ@•ą/óń Oß ę¬Ūā-ü ć½ē|é õK\óäÕ÷ßųNš'9}€&€bŖåAAK?!žš1įß$ CõT õŚEHņėĪŪ!ńéōäĢņŁ2ģ3ģšņ)5-Æbž_éõ/ų ć7ōöżÕ Õł~WL)̲A³>&ģńźKBōOŚ*UŁżŅč4 $Č'QÅÕūLšAŗ?%'ł#ŹśžEę%Ļ¬Õąū, ÜŁ=€IŲō Įčå# ¤ĪĻŚoå9…÷%$ ’ÅÕÖ2×ųÉ-öóŻė$“4ūäÓĻųéI|ްóĻÜ ,?š€ī€å¢1¢×¼T½ń›§JwC@€šÜ§ÅVū6Č£®€"Œ'CŪ7óhž{­Ē®ķé9“ū>čŁ\~$č˜OG6±į\؀ģ-€ä?­ēķł€ÄĀH­R£–śżēńÕ0%€ćÉõōZDąv'/€ŽK•$귁¢€Ā™ō׳Ź/¾Z€Ę+żÖņW¹3ź€ģö€ēŲCżųź¾ūr'3ÜbIJ:€øŗåųó.8¬ü.\: Ų$łāpŌ?5¬”(6fŪ&BȹÖ=ī+źńūń.0éŚņŽ“#ūėPÜt ŠĻ-&åčäk(>ņ< ļŅōą_3ł:+óŚĀćČ5GÕėśņŹŁ*š łó ’ÖųŌ>2ŽČ' ī1 ŪŌ<īą :[źĻĆŁB ķ^žŠ ł ūõßč&ę 2"ĻÜēž:( Óų7:æ .¹QüLČųŗāęńōó5Ձ:BČČškŹl  7õWŖS€ų€Į»#ßņēóN'éć%ŪåēļGĮ z €“ńöÉ.š’Ó%ø>ĪĻÅ*Ž€žŁ",ä°@6d9LfŲįõ'鯹įۚ?šb;¼ļ‰ß08…ßl1ö!'S :2!$üŁ%čĖĄć6$ ŸīŅÆ:ŁÅ )"’ `ä’ō'čÕæŁźžū2ząńį4G#ēóŽā’Šįźüy™Źh$ŁźÆé·  Ö’Ł_ėXĒ6śū !ļéiå $),KŹöęū»ŌöšQFæ‘Y÷ėāųĻēöźE7śśä īÓ ĶŽåŌĘüńŚėŁŌīŲ)Ć/į>ĻÖ.ŚÉöEž’ į@ąH'‹§÷šVW˜Ä?Äģį “€Õy7€€&ž{ß°~AÅŅbÕ“ķNī!yV˜ś1O€XTŪ!%¢¹<*Ś©€ļ8YķśįŠĻé5²€_÷Oˆ¶‡¦ŸÄD:pŅ&@B)€¾Z~hįļ›ÆŽ ż€ey³ %—€ĪŽ,yP,ėĆw€ŃĮĻ<-;ŠĪĘĮŚĀ)“¢Š=×Ļ[ī& ĄC ^š¹ĮF:ځĄ“,€Å„ö¼·ä›éčŻ įüėöŁIŽ å#õüōóķżśü?ßYśņ»Tžź óźÕ;%*×į č#ę* Ż ąąęžķņWū Ē1äā Žīģ!į’żļš,žööōüqśÕ ķ žõżÕÓ;9Žóū ÷šõčė *šŖŠę,ķ÷šóęū.ūėöį*ńßļųł.žčćü+?ķ°Šü$ęēž8!\óÓ-§Łœƒ«ÅB!»§+„šs±WŠ;ž7żqĒ “­),7Ćt“ķ€žąĪž4~ėéŠnź¶ ’ķ=ęõ Øēėą“ż51ń9 ōdž!ĒŹœüŻŅ=NUį„Ž?:Éćiå9fäÉ÷!2u0kn5Ė4 ‰ ē”§ä‹uäķź1ūų€Ā4.†&Ķ#Vö"¹ž-ŁŪ ļŪzž$01ć›īāš®·0ęÜ@ķOѶ÷ę M$暀ƒ€p’GŁ÷Ų§'“Q€#ėQKnĀēMEü©ĢŠ}½å“r:g€ķf”ž4|xZ€ķ_7”ķäšՀ\ė’šź,€€éf1å“ŌOuµĪõ‰€»Ņ±ž(ą€kŗ“.m5ƒś$ö;8ā°VYI}ņf€@*d¬ •Ųģż€r¹“w€ļŪ{æ“AŠŖ HÓĶŅź€ŁPŅä(s+I^ ɀ"õć(éš’óöŌŲüÉįĶś¼Ó0ÅōņLÜHżöå”ō@<ś!ąóż"0‹¤ų’äÕÓåżåŻÖ2ŽĢĀž čū½ ½ėģŃ÷Ō. ’ļļϱü÷äö¼;ž)+¤6Åā*ŚŚ0-;ņ“ ųŲł Uõų#R"Æ3Õt ޳žūšŌŲ¹õżįüē¾ ōż!+Ó"ī šžżU±ä "E1ųłüˆŪž! -ė½%Oʟž'~’~µ i 3 ‚<€Ė#ų!€ÓT|?ŁAžŅ9õ~"Ÿ"²*mä¼DæØ9Ó %ņŻćĆ"Ņ ś$‰[€šÄUĢ“ 00,Ō(źr€&«ĮŖ ·~"֌Æ®āó(Żfē‡0įyN³ÖéĘÖŲ"X%~®Ć$%;ŅP;ŹĢŹęNōŅ-Óē+†óĖ ģÅÅāŠ÷— ą '7L):(LóIčæÓ € č³żÜ~ś×ĒÄģéī) Ł<’ō€VōåąZÜĶģÉÜĪāŗB·,+Ā*8’k.µ/č“}ēqäź9ųąŌßśł"Ŗķ·Yķł¬&Ź1ņ ÅČĮÆīŠkāž5WBä[,TtĀŚ ōļ=+ ąąśńķ¼ Ó#0Ŗ£ _-RÕōbü4čų9ŁŁū2§ņ'"ĒPüņ6Š+Ō'F2ī+ŁH(åģ 3•?X^śߦłBšåz÷у8U “÷ :- ĘŚ+Ģį”Ņ Ņåč²’ZS  ·*ūóA30'”Fæ'š!õ óņP€ŌžŲCå(MÉÅś>śāóŹķO– 8žåÓ0€ņ @ ų; "ę× ē’ś ēųź>ģ2ų(į­č, ³ģūīę€ä ļć'08¬ē-“ń+ņą ųMö*åō7ē,ė* p Ūę(.Ż,=%ōżŌöäį' ŲšT½ė$śé"ŻŁüĪ ęąčū垼ņ’õ ąēÕŪģ!:tō#Ą&ŃĢņķšŪ!ś=ņÅßöĪśņ8’Żöüł½åśšśéžź!üü3#“ėĪ É.ųņŪēĀ@. ßīģ<Å Čžäų’ åšūFpĖŁś/)ņÜ"ē€ŅĶ, P’ėņŃ€ēĖÜŽ4ß°žŹū åĀy·ß:üłżÖģ łŅęķVŲ# ŗżéVÜŻLžńŽ #źģéT"0Mõbé D¼„:]¹6ö÷ż6 åēų— Öķ×č9ż÷šóźņ+Šįł!ķ0CÜ0 õ =Dčõ€į V&įé'č;źŲŁŽ<ć^'Ē2ņÕ$ÓŲŌ0÷µL©” Ł”Ė  óā¬écGĘčĆĘ&ēZ4ō’öÖ/}\D3ךļŲŸA æĢMk!žīöšXń÷ŹŠšöE¦ ś 7łX×ģå &€_LŹ+€,m#hJ²÷BHßAĻ$7Žõš'!¾“-]ņ/7¬ŹcÅÕ°Čū <įŽ÷Ń >­Ņ(×HäóIę¹āM°¦4 >åż €±g6RAŅ1L €‹CĻŚ‚÷Õ[Ļ N%"Tœ“żÜ„@}O¹ó6Ó;ͧ·ēŃĮ²%éé ö ¤Ų/",$ģ1Ixķ| ź’d€ÓńćŌ €,ž 1€ē`Lņż„żTĒPļž·#«"3…ļś­jŽåĪ\å>ŲņżīnĪ#ŗ*ś";šŪslķž€Iųū=QZ0ß3x%Ś~rćå9'Å#čĘb¹|ōū t+7,ķ,ŹXqŗd&WŚļ,ņüy-ż Čļj(ōõ×("ī0 ×9ĻĒšÕ.7 Żī<Æ69ßütā²Į+ZŲjü|"'ĪiŅŽÓOåŁžęÅźüžčCUSä ŃߌĒbńÄł5÷üń÷ŪĒ ĶĖÕ6ņŽūN.ļDł8 ÷+āŹ×÷c.Īé#Ļūõ 7 D@»”ņŌ% ­ģł‚¾] Ł…ąņō'Ł)Ēä5Ōė ļóņźš '"ļ&śōöžüūóåż„&#÷ŽĪ æņO’“é ÅļÕ÷ ļOšŁŻåēņśVŸō-öóåīś,ź)ķ÷ųżźąÖņÜF5(ģģķņ€ļ+Dßź’ó&"Żę*4ÉįēīļźźŃņ2>šł ÷źąūķ½" ńYį śśß &üIņńųĖģ4ŪPļ«į Ķ š6õē/(  Bš°))+įĢśņéų B)ņę÷ŗöüÕęļž÷ų>Ißī:‚qéģ ,+'č³<ÄõŽĆĶžFŅĆć9Ē(į»K ÷$č’é4¦³ģ=$ó3"ł³&Įžļ²āIĆ"MŠ=¾śŃÕ£ Sģķ/Ę1  łä4tgī.Źō(ģ«F ŌS+įö:Š4ņ€ńō[÷õĒō1ߌAŃōæ3ēČ:õ€ś’:ó½2.ŚōHó¾łAöŲĻ%GįY£ ­”€óźNҧ®ü¦ų°÷ų¦1ęÜg·śńĶķé99ī[P&\KųxŽīėņ'(ĄąŅCĢåźŠ 2«ū)ŗ½öó€ÓÅBļ Fš¬ Ł2ŖEPų%Ü Īp?Ph*XÖ#Ņ#߀ė>å.³ę°Ōåų«ńä ŗĖćĪŻhŸé ŽźfĀ+?§’ü,Ō1’Ų) Ņ’9Y"ćā2Į«× ĖśÜ’¬ THæīīķŠéÄXRF¹.1- :EōøT>L–åŁ€Śß q(¦Zć\ø`å1dØ]ō½ż„ąy5Ū¦śL $Ȁ0ī½iÕ8€ąÖ}üsōģZ"=3ž[ßÖb(Ģ7Nb»yāī€īłöŗR&G-ķp‹åi&»‘ §ƒź}ż•#«ä¹hœŲ G$ܝ!&łān ą ü~ļ’š€:¼±v)ØōI+€‚śųPt“µo€S€ €¾nē·*Ś6¹eoį Yր@ŌGĀ€,”N}Ó«ø ¼ å¬}ØķöģŚ>@õ^€"Įl½ įć÷Ņ.QĢųķ°1+ÕÆŁč¾ $$ŲÅ׌ā ōs$łßļ€ ūīņ’„ĢŖå/’m·.9ąd*ątK·āC,¼†Z€-÷6;č,ÕŹZ/+ķīõ88^ÄĢČ€æŹ ~ȱ"G(=;€e€Źü”>B)āv€ÕŅĖ&éĻP*ķŁĒøĪŹŁē5~HW-,2Č # !·Įøśé śņC*Fų1ńÆ å«Āū" ėčīŚŹLā@C„čń’Ś.¾(D:ŃĖż“&Ę SģŪ ēü( źå Ó@ā?ž–ÓčöMäŪ½ŪJ`ś%)ó*āģåö(’Aöš /Žé !ä ņ›2Ö$›ōĘĪ…ÅėēŽī·QŁōŠū½’­ ķ;Ė¢aJ“ūąŁ’%ėńķõž’®pąųį_׿ ęČM€»&Ģł2š äB4ż‰,UՁńŌ?3—¬DSįśŻńįŖÕ€²ēąLÜöĀ ÖM"äĄ<2 ģ¾Ōƒ’¬Ök«H’äČČ7Ą ;:Ó ”Į~pŪČ ū[מ ˆ²ŲĘ0ć w¹Ā‹ń ­-H(ļ^@ļĘw’Ļ+€µžÖā|ē÷ś€€ ßŖźŅīųt°ūüč]µ ŌĆĀ<',ųś^Gõ$Ā%Ó­,öųśŹ3łGIśōW¾ł) Ųa²ŗ63ńęC–Méē|Ueķć!śŻūÓ6]LēŃ¢y¬ČÖ ߁o=8ÖnlųłłźÅńĪķE)ØÖ+g߁Ó꤄ÆŲ"–ŖQ,ėÕćb6ž$Ż­¾9§Žło©€€8±ß ņžŲPąd2×R-'Ÿ ōć×<å{Ķę€ķ  ~"ršķ×żė’ŖŲåŚŃ*4ķ XŲĒ0l€ÖżĒņż"¹jü×} Żē€ĆĢÖTĪāō½”€;ŹFó÷€üēķąt†ĪŚy„Q1_§)žĄņ䀀g —8PœŚüŠlłÕŁŹ¼dæ'üȚģ%Ą0’łĻŪh ą==ęĆ7ė!:1ĀĮRsŪ%ómKķ> ~±ņ9ē?R€^ėüS iäž'‡ŲQkVdßEKšņ×~~{ÉĶńĖūÖæ ńźŁ Sśü²"€jÓżīŠļ 5*ž š% ä1łęe6 "ńāŻ3YĮ ė¢Mē³ÉćäV4GĘ<āųĒ*š›ŖńĻ ż ą?1©Sڬ–ōąŠ1Üx9ą JįÄķ}MŖBŽ$÷*óīŽžš MdĘ öčĪŠ-Lb «Eé €(ćŲśLķ×’ĀVš-ÅA}°‡Y QŚä2ÅāT¹†>äŌä8@'! ?Ģ-ŃÆ³w2EŠ>3²€’¬ öĻ;°d­’EķT0äÉÓMÓŌŲžč÷Ųļį€­š±€šäąōž×2»×ŗXŲJöӄŗEźŹüSb„3 węĮ2ĘōŠÕ S€Ø}“ہģĢ+äÕÕ,Rņ‹;jńįķe ·+w|:6•ųĄ“Røē8Żå³č=£3¦~½ØŅšO°,@ Žž¢(T-ō)Ūąęų±Ņ–ģ7u Óŗ€)Ż”=ŲÕīężNXŃßūøĶ Ų-Ļķ斀,ŌéBä$ĢYąœå'=“żĆ› ’ÉĪóÅ"AW€×ŚB÷-ĶThC„@Jr5ÕŁ “S§ū[ßŅ'pūę·(^Ļ@Žųż=Ä/öÅĖē;ÄܾÉß$óŖĖĄu’ų4UéJ>"Ü ķQ ŪĻkA€õW}ó*h"9ć ņ·¼ ēé!— (Æa1 ÓėfŚļń#(źļŖR×ōķ Ģ2»ļŚįüŁITæ3Å}±`čųÉ÷ń®ÓŽZ÷ę·ų®öųŗ§÷Ļ6ēõQµč}ÓĀD7,¹ζfÖ9¦OŻ7‡ö' Ā±į ŻĄ6(įņ÷Ķ5Ö}ąä†» ś~Ūå>ä“ ńŲĒ€ķāģķ%žĖŁoüīśA#PĻCŗ5ģÕ Õ)$,9ĻģŪLąAģGč’CŽ3ų (åŲą€µÄ)7Ę’}zżųßøĪH2ß/ €;„žńn“HeʀšFóüāÓśÖ%&€ 1€€VHåĆ€5ś€'Qā~ŽĪ6;9ŌŻ~ĪļUœ€€0Å*!€öäR“õżĆŖ€+ü’4ś+śÅīIī}3€ž ģ&pŃó꬀!V-āĒG9 ‚’yĖRa€ż­Ų"°ā'쨶\ō•€‡÷čäŅ÷ Jļģų€9(f×ę¾Å§(NŖÓ)čč1Č?ż;ÄŪÆŠń€6ķ’5ÕŚ„Š“CIčĪøß6ŪP£ ó}Éj4Cś~/ööĖ 3\L/ŲI/6ŚŚßÅ©Ė4D’īśLH/ z“šfĪ!’©(1K£āBž#BÖé<ߤÖ÷ģė4Ö3ƒ5’Õ [G“ņÓ%8å!Īåū€8Ü1ćOūoŲDčNš&*U†ėļ$Q-÷ž3ןĢ1ś Ś!–Y!m4NėÄŌ™0+ H/5GėĒ‚d€(Ah0»BF€ikGļ{ ȽÅ=€£Å…',0Ƙ§ ‰}Ū€€÷sĮ1€V;€¦Ī·ī‰7+Œ†ÓmyÉöys  ƀ€ó€Ä}:~žb£Ćø}&‡€ 1€ Ą~ę ä÷īé“€€€’“ō ź&ˆąśÖW€9Z€Nčéƒ €€żA<†īń[œ=ŃņYż¬ßĮ/4šDųćėNA%O~<Į„æÄ €śø€ŚšõćBkė5ŽńÅ‹õļŅ óŁ>ŌQõś Ž?ģ;wÅõ"ÉE×rRšĆŲø`Ö ģÓ4Z3 ęܲĻ4 ņQęļF“œąZ“γ,ö=×Hó]M&"ųÜVŽŖ›ń(1ģßō6bA#ÉčūÕĆĖcæŗēčŃS‚?ghč~/ÕĄńƒĢ¼ŪŲхH’TėrĮżO(čēģ D(Ā.18ż Ų=%m1ĒDčä+ż(.ęūäåżāŌ¬ķ—ŅŁ,HÅĢüN'óUÜ鵳ųæ\Šģ/ üČ+ĀżµčAś $6.ī*ļ}0ČŹŪś¤K„ćāł~ę/~ŽżūA×ķéßJĻ čÄ;³€ĻÅÆņ*O%śŲ&āč&ÉóŚ F€%ŪO'Š~š5 » ŹĶõā9ǬANčłčļóņę(ĪĪ…;żŻ`Ū"ÜTī€4ąvŹó.Ŗõ!Ģ3 2hĖÖ$ŅĘŹł# ŅGś(D+ĒŽ+:ł Ō ĶĖzhćļ"ŗćā-ä a ¶ļųFöŪ ßrŃ6 Ł44 ’żŃھŌä‹“Æ /Ė ä/ šįĻé÷ÓM»Å%6MźģŚ)/³“ŌĮŃ>ńĻÓž3ż ųSóĒp -ėĮņ_®Ńö‹Õz ä(īßšŠį=<4•:.ćnčDęŚR³ńµ[€:HtĘ#āś}M?€Õč1Ųæ1œS¾’]F -Ēõ€Õ5^čĘ€!D0‚}Ū‚ū€įš/ģĶĆ,ĶK*k{³€Ą¾" ŽZ€%k3~ īHŽ3ńt4ÆÆ”‘ąįØ 씐ĘĖ€-+—!ńŠY²`ƒ€Ž…BČIŽep­ģŪŚŚĘQ&B©¼ōĒ5ūņƒ¢”iłp@=_É[Ń7] žGdx€å×ļšĢCßž&ėրóÉ÷Ų=Kä’śō-Ę ķńŠŻ7õūķ\ōž äCž>ņŁ&+ƒāŲéė6ę,»B Kįš£/Fń¹=é_ø’»Ź@3ö7,Ēų9Ē(Ŗėžēö· µć éļā I6F  ó1Bõų%6 ę$ō~ėńŚč#įüÓĄ³įR±$ūę č!Į@ę×$Ļ 1åŒŃųģYķ÷€łū²µÜ,g‚Æ€õéƄrįہę9ų:y"f}¶†źšųķ€Q⤀€‚9~€ß–8€ėń€bÕšī 6ōöŠ€A€€Aƒ# ‰õ7Y€~€ī}€{źŽä€ĘąA§Č~ĖyøŃ\’}‚,ć½f[8¬(~x|󄀨Yž=J~Œ€€”Ņ$J~ļ$€ęųr€~oņ€¦7žĄ,r|€¼Ļp€Y} ˆtMmµ÷žųó’* ūÜūś öéC żļEó+ūšī¼’$ėź'Ēł ņ õ!łū ŌŠ ą=īēųū3 īē®’Ū×äłčöė÷螼š7-ż ėńžā)’%ńßķ=^ēŚöõŌėśš(ęķōķŲģõ;šś’łųó ėé>ńś=ö?Ęōųž #ėöų ŽŅö øšéüŗ čĢ üĖ%Ģ.m“ż9€:!$ŅŚv®8߇߶ś·źūŃŌĄčåśą×ąŹ"µžE(åęļ xS€T;NŗOź'čśHü!ż ?MÅķź.ČüŌĻ­ņī—ėÜ ąÜ¹eI½šøFöŃ£%N) +€ņÄį·šńūD4Ģr!%ŌÆ¼Žöå£׹ēSÄŌÜÉī5 DŒ55Į,I%ęķŅŪ"=īOĄŖę÷Ü;ģsBąŠKóŻņ š 7ŽŠéų $4ų¢D€ūļŽ4÷Tę÷ą€Hæąßa¾ą";ŽÖ'§LŗĄé *Ļ̶#/>ģ7»ćūśśēīūžņ_=2 ę +Ü)4$ž3ī*GžĢŲč 怾ź,æāņ²§U%IIŖŪŪī7¾²,Ö31!0ß - Ź[œé„×öc ęB÷€ź"Ō4åēōģÓC øśōž.5ļvR= š23­b 'ļė(µŁ€ėŲÅ¢ i'€ Łö~ß'+'>n,ņ’TšēÜń•ēœł@īR~4äAĖßĒ%śŪŌłō܍īčųm1 į¾€,śb< Ūķe@÷šśāĘé§4qī0šӀĢöäńøģŪŅPTų$iŌŽÄæē żDģ CA÷BŲ:/ - /ś ó!ĪŽ¾ żŻ āŌ$×ל 3,µō5+%«ō ōyłź ł#ē½įć'U.$%m Čž€-4½Ć÷×Sųß11K#ŲņķĒŽĖ9/ĮįŻćģµōöó‚ĮśŲż$ÉĪõķŚ @- ¹,ž0/õ’)ėś:$ČėūŽ6 AÕėńśßZ*ņ(.Żä(’NŻ ÉĢō æ 5ä„ńĘ„€Ģéų.=¾ō­ģ3ąRĖ"Ųä­żĢ[@ē©ČC€€x¬)°oąĖø §%ļ€ņł¼~Ą•Ü(lēXµŁ€€­ź‚ž«NW™_MĪĽŖąićÖõóč~ż'Ź‘ gß9>ō÷3'eQ<æQW.&į€ā`™YD0ZBĮŻ8D¢Sä8ķ–šĆāKŚ’"āŚĪó™U.eB*Ņ0-¾Õ~ŹĪ ,ś¾ī&į—Ö;– Ž»õ7Ė2 E0E ŗ§Ä%ÖJąEģĄ]Ē‚ŃĻ»æ źM.Ņ«÷Mˆżæ2ž{ļßÖų90éųKļŃ÷/3) ‡mŹŹĶųŁÖ5N<ī!õ kØeŌ ŪŲŗńō†ŪūžŻs˜Ü„£ż⻘üž17'¹³'Ķ (€ü÷Lœ½B€ ē<>¹ÖŽī路ō€Ū½ūŪsüKśėļ§ĻŌ$ÅŻõ;%5ˤņšź hļó1>@$ō'Ž Ó”)ū& źī mÕÉ©šī·ūžÄłŠĆdČå!ģ!īŻŅ†cŪčŪļāXūJš{}Ź)Āķ/«éŁ‚Ė ;$Y¢!Ēį3.Aņ Ķ Ē2ĄĮīęŹwó%/Ļ$§ž$ŚÕʤćō5ėŻE>"šoųóęŅ3]ś­ģ ā*Ŗńźa/ŻõĀŲBā2Īę WŚ9ÆK€ćżäņ÷Ö!ōė·óĖØ¬ņĒšõč£Õ€³źHŗE¾c÷#Ļ·-ŪŻ±,ü<Öåéąļzą~ü 7 ©Ć˜ź·ÖŠŃÕī&źł(1q»ÄL¾{Š÷ˆ%}’ņ!Å9å"ė¾äęŃŌŚė%ģLÜžĻ‰ļeś¬Ż®3ņųzēEīøfށõ×^#ą'šń+Ļż2Ę,-ŌWĮ<€Ķę×F«€~)Ėąn}®č'ž‚1AHūćJTéž%2}ķ°5žØZē.&żŌ• "_Žė;ėĘP!’1!Ū.ś'3ż(Õ½*;qž b)÷ūś Ķž£O’ķ)Hńē 3Żś‡÷%VA# ź×ƹ$ś)žéź'DRżć€€ų€Ü żš2ŽŌ1 ŅŁ5"MĒā%ŠéŲÖāCÜ|ōŲą!ōĘļ (ŹŹåfs$ćś¶=ųM-Żįū!’óßņķüe{żčą!÷+éś/> +6½W19<½G÷D7M€µņ7§Īõ]7 ūķēżģ_° 2:īł~@ ZXØŲ#[GžņÖŁ&ŀž£Ó!5Ēģ"ć/äė ŅŽRæįb7ņĢ %`€‚įOä=ć®É1Q,+~ žšĆ Ńö ;ä"ć ½ł ģūīśšgóØęLź DĢŻ+Y8!1ļ 9&ź Iš@”T0‚Ų޵ üÓźź“9kT2ś (”Ėe[Ę#üåŌ dŲż€:«ū»Z.€v]m€#€ų~ž8•Ŗųv€ļ¾Ła‘€äīHŁ+ļ~>‚čuåĄ_›µbJåĄ«„šŗ¦8#‚š€€_:~‚€īĒw€?Pš~ĖUā€ŅīÜ3€ĒÓQ€€ū€Oīń€ķŌ€J›ŠĄŁæģėnր®Ö}€龙å²€#÷€ī€0€Ę€ŻŽß€~Ōéč,ōśü×Å%&ÓłųęųĪ ž%DĶōųHŌć6ēļ= üš å( ļ¶ ŁŪ’5Õö÷ķćÜŖ -ā¼ÉEņ ĶŪĘčāČćI½’!AŚŲĆężĻäÜ,ųLPźĄCź/ÄŅŻ ÕõõĪ"€õ»(ü ūÜüŌW!ßLŻč .Ć˼AŚõ-(ĘŃ$ĻūāÄžćĄķ ó¹÷¾ž÷ū!ĀņäJšóEźö»Ķļ>ļ=qžö4õ7BĒ ņō8ė+Bõ’ Ö6Ų3ėĪ7ÖĘ=ó%š÷"ōóūJ;ųÓńŪ) Ūč@£(ż!įõ;É,ż4ć×3?q6×Ęō 5ęS %8Ō"»śņņ&8äö"˦åĶēõūąóó Śn½,ł"%"ō<žż~üūšį ×Åč +ąśńų€7ŽŽĪ# ’4ģš+ļ6ąźüRłņą±ń€Ń)’Üī:@ņöZ$ER¼Ü€ü/E3ė _%·¶(ĪĪ4ģų² ž÷># Ąó]š$ņMĒč:U4ŚļT±ŹléĢ)ĢŲüä¹V® !å«iøš×ųEšéD Žą(ńÓŁ9ž¤5ćC  iÜĆ /÷ā¼ŃŁÓ“Ü*tÜŽ¾9/õųæ')@ņü«šæcIž‘šŃłųüīęˁ¶Öuē€ęó?@ĒĖ+šĪÓĪųJ<ź$~"÷ā3/9Ģ@'+¾ žöPŲŃ&DŸ0’D€])ėnģŠøGfÄ õįökĀ7ķ0€ź4€=4{ŽÜdĖ†ĆČœß—˜KŽ5€^$ū‰ķQ¤ī¬%ü+ęż&Ƈ„>±!{ ^ŚļŹ“YĻóœZ ŗśX3ģ\¬3čłø ŗKž—Į"€Ķ’ś|`-%ɝŗĮ¢"ļ "†ųį² $¼žś)6OäĄÕ¾ęõeČšč% žBŪTķ#€€æī„ų#"’ž’’Ś#6ņ<ö/ŁC'/ĶĮ8ŗFڐ¾óķ"ūCŪą«©½5ņĄ »ųļā»Ė1üō³ŚüBŠ;=ļų7ģ%~eōÜ~_ł¼¹Š>Į&p‰Ŗ"_ą@Ė(’„ĘÜĆ&’ē= !4׳³ĘšóżÜß4¶-Lć8!  ļ!ļåł’å4'.ēÉČŲ/ķ¹ū:āG3õ 6ś Ķõģ8$åßģŅņWūĢØŻżėBŪ;įó(óį <čå™ķ0E,®ļÅšŚ:-öŲJö< ½%¾ü2ģŻ–óŁĆ0ōé÷@/¶ē2č’ן/GIŻżĒūī=é2Q՟ó7Ł> !=%/ōüįõ5/!įź'ū4įå'ż )86öäņ1Įßó"/’ęžķH£ūł·3)Zü1KķNg;A³4HŖSę3>/ō7} żUį%ډ¼€€ĆĪŲā-&żįŁ%f@ąÜŠ-ѱ~éą7[€ŽHž+„Q(@ń šėģ „ļI×~ōėćȟZ"¾Ē@0:æķ ,ŗ ŁåE ķŹś­ķīź,:ō),łN“Ļ6÷ÅMCīšš3īģĶ÷M)Ą, ²ļŠüżØÖ?¾ė3āɂ 9!Xór€Ó©"’ü;A%)żŒ'#ßPß[æ"J,T€&RūĖÓ+‰!0üĮ,ōfĻ>Ėź’ś  Ū-€!žģėųv„€.ZĄöuó-‚¢ņĒÄ„­¾Éū ÉÄīĘ+éś ~7£?—’ź "’ŸŪUøÕĄ0KŪó žåF ›ź|żMĢH©§Ąćī'Zūŗ’Äś *īžā(’Ń'HDżżćć2”ć )Nõc’ųėžŃ÷āżŪK>)ŠæĢ÷Śū·2ŚGĖ Ēōł ’×Üģ$źéāWćž÷9€ņKÜ÷ä9™žc–±Zļ¦ūń”ī¬Ńßt€Ć&s€-v.;tŠz~«ŌĆæ`˜))ņfé7 čŅ;,6YF³yĘ£ĢŚŲE¾iA…ļ)õŲōhź”·üG€¾Ļ— 73Ģ÷ääĪĢbĖ5`=ņņAyIFŪ«Jż'Żé>+£…“r²j·ÆKՁ„NnŹū²ā¦|č&Wöö”GKĀ4Ņ[½€Ē€}+fĢ©v h·ps˜d#ž}ćŌ!& ÷öO‹į$ N·9³üöAžQG )ćķ€5žB+»ÅÜe¢­^yZ]"2¹SÜź5ŹżĶ*ć.śeŖDžū0¬Y~ŌĶ€&śń=öŠū=†›čąĻN>~(GÜĪśĻÆŻŖņÉāĪ5¹„ G,ä…ģų2†¢&Ü ßR @,`õróź@ÖÜÅ-K}&ö:ŅüäX!Kф@ŸXÉq*'  ×`*÷ģ'ū'ūž’Į/ņį0ZśĪęģ-Ś9ćW ŗÖńžS‰āšĪ4Ö-:+'āüE@ž&$ ēÄŪ’ į īKc&ōčł¹Ųś2'ņ[óä'Ä÷@1ōąŽM>,š óć }āųŁś0ķāÓéö¶¼ā#ņ ĮÉų$×Ŗ O*’ĮEžÅKÖ<Ö-—ķR*ö’āöeŻ ŚöééąłP™ =/³óńē³€u½ł ūŲÉŠ±ė+č&ęćžÅG'Ļä¾üééóčŲP&EŽ’Ļ @ õūó ³ōö ō«ÖŪ !”ä ÖŠż @ Ņżóųģ’ó6Ü  @Ū'‹Äß óōü üš#&>śżĮ2łļäæą“Ö;üō4Ę5ōå÷6äāāŃż’ņ AüņŪÜżŌõ.äłś»ūLŲü°óMćįłƒņčślńn$L¬üņ€š=ӛx„Ī gQ³~ū).ģĢ)xž\Šŗ€]žNj~*9?i]{’—19ųū¼v€ĒŁÉµü“Ķ #;“öRŅ€žō€Üœļ ĄL€|.Ķ#€īĻÕēžŻ)Ż.”€ūé +n€\›s¹#éŪŲ_Vö »/”¶€j7GMŚWęłėĖóó=}¾õr«°÷ŅčVé×T ūÖ”„ć€€ęŗƒ².ĒŠĀ&D4ģ2'R"ā“JÄÖ/€¾žBį)½ÜŸSźNö|rĒ!$ėó¾Ż õN!’Cа>¤ō’(ұŠįDüŽ÷Üóäßj#ļŠw嘎ķõ?(éėõŌś99Lµ»ņōĶņŒö»).€žĖ䵚¹I)R”Ņ ŹĖēÕŃ ÷ÜīĮĖõīČ-ą}č$EęŁåIÓ+ Ų}ÜŅ"av2ō«T¹¹ŻPšģ€/&dČ @’×E!Õļ ~čæÓ!8 ?bņé 0īē‚6ż“Ł“ÖŻj ż0 Mv »ŚŚ0@öŻå¾ĮJ²Eéīėš1ĆÜö³õB=ö ĆŌĘźBQēžF6śžÜóóå IĄäA=&ųY ÷—Āńø+ö Ō’"é€ %+ÜģPµmż²RłģÖśõ H2żś;;ŠŚį/ ø“éĶ3Š*æłźĒĖś_Č,& €ÆÓõ‚†ĘÅ€~œ"W&9€wŪmėĢłū¢}Ō€Ójym;#Ä÷®]ēŠSų~ķąŃ9Dł€€Ć+€ŗ»BB7€K-ÕžHÆĪ€ńÅžv‹ń×ßTR~7}l¾ĒÜĮo(QæłµUŲʁś‚Ž@ƒ&Q€Ģļ•öüģ^`Ļų?.¼¶éŸŻD„#J.@sŲA\ Zó܀ž2"QSK}¦VŹ>W-£ąćŅ}€¾“Ō"3’“ŻönQ€š=ņ·<©mÜč€y~Sęą--õŲM›€U«€w€€Ō²5[Ķß1V€£š]€ųÉ+~Ė)ū€(÷€€ėź=»ęT€/€d0¬i ÓrE)„€E†!ĘĪŹ#Xz8åćń­ō^Õ~žLJū6Ž÷AźFŚ™_€ĶĖ2ä„\4¹ā<Ā„Ö۹ڀćmę1Īy€ŃėøÉpI2ööU €Ćü&Ž%š\.ÓkQQ-±ĖŁ ī€ü Q€6U&LÓĘĮ~Z߀¦×ūGK+EÄ”~”æĀb™A. µÓē`)ŖŽĖčüYĆ1ļą 1ģž:ēēl€$-źé¶ńjćö7µ wÆøÓķ@{E4,ß’<čé€[Łī}€óTēIK5a%=~ż3€$~ßU &›āž ('ÓŃIÄßÄ!«*éćÓ§‚ +óNd}Ā׀'¹¶UÉC Ņč%(Ż īUż†…¹yõ™nó8ö+ŻĢ_łüZL ēįīāóėPW½ČÜ Ń?ŲäÓåŌ @7ž>ń€c`.õ+ć£<Æų»įŪ3ģ:ŹyčņčL,÷€ł;šē%D5ŁE‘ū„Ņ܁픿±Šć“~Ē€ß ¦Cē­€ĮčķW>Ó+Ÿč&ģ-Å8(źė¬ü<'üÉĪ.ō]÷ōė „å#N ?śĶżÓŻņ+#ķv ÆŅ©č -÷/ąīńņ2éüMć‹ęģėüā'É·ōōAŌŠš>ŗę'Ņ’õ÷ū śņė'Y śĮ ćįĢ’.ļÓń»öĒ' "NÕ2ģśåżĖÕŽŲģŅ ˜4ē ŌĒņ Óõ&Ø =ńųžńŚ·ŃĖȵ,ś%!ėīūžĻ¶Śļ@ śšå›Ńõ’3ģĪۚų½ą· Ó |ņ€Ž»’ ś’īÉ é/š’¹·Sõ ĒģŻ*P/PC ś4$Ųøó/¶K÷Ā ę÷% ż<ģķĪÄć× X÷Ģ>3ęķęå/8‹S%šÜ2ŅU/Ķ2'ööįšŁ5ŽĢģ.éģųž% ńÅś2¼ĖA’×ļ0ō ęózõ$’Uāv2{éāėņż$±ĮųZł÷Ą&ņénė ųżźęūBėÓÄāā4)Y& %öŻFģŌõBčų,Ą-“RóƒĮ÷ź¼-éMåšöūõŚķł÷ĆŻĖÕż­Ķč ®ģIBČ‘Śąčłµ0@©%÷4Ōt",5Ź€¼Ć&ŲA øĆ.NŽįĻģ,Nńüźļņč5śØßÓčĪō<Š/žÓŻ Ä<īčåūŽŃõ*ł B»›Ń 4Ņź#ā“Ķ2üį×/ūó8żRķҵ€€P€€€i®¬)€€õÄ) 8ßŗŚ~‹,€.€ņ5S>²€€ŃtŌc[€Ļ–ių€€×ŗ€I€ ‘9G~{ČĢaa ęü ‚F€€}~ĖP\€€ōķ]ėkf€Ÿ€€M ć~~(Å쬀0€Ÿ$€,€󁣒€łę‹E=¤€ߘ0~ŸĀ€€Ā耀€ęl%.ŃLĢ! ׀åö=^A­ ąŹ čŚ8©øńķĒéņōa E¼DńÆÜ÷&ņ»óļßS) ꞎął#āō#Ā( ĒŠź 4#5@ģ9öFūüļóó¾įŽśž6ķāÜ×āw€D~:ōųūŪģ’öėźć€×”ø¾' = ¶6€ä5ÉåłĖĻŅÕ¾å ĖĪę(!V ź5ž:8ŚŪ&ŁÄ’ٳāH(śŃąģįóżĪķ7!O€„ś,·źÓJõŲ°~;AŹÄ‹ƒč C'48N5XęyB6 K=-"^z÷¼Ųzįń5ä€)x4Ž I±Čž„į"ļ €€jœ "õƍ5Ā:&)ŁU~Ҙ€j{€Å0•ą³ć õÖ@°łÜ"5Ńšēą Čš~ē¢ńļśūh~%Ī4ģś6€ś”ßźóó õkżq¾ółĄĪƒ')gWĢ;õ&>’p€€1įAĆŅÆÅCÅź€WU.Zźż Ķ€J=6BčóÖŸ ā! »ŽėY'“\ ! $MfÖµŚŠĖH1EC^B[śÅę16Ö/#k/!;Ž5é/ :CkõŽŁū¦ī >œMC°āŲ”ÉüĪą¼4Äy+  ģ ?;ū$č:Ń‚ī i=’-М œÖ#’ݰ½Ž&®1*õ9M ķł!#ąš…5­ß}čūē ŠŽ€QżYń(°į ŃāKćÓģB3dņżčõśéšÜ’Éōė÷ęÜC"'ŠZMč%&:8ņ¼ B£õņėžóF<Ł, *éĪÅļ÷,(ķęśļ ³ " ųęšūµö3ݶ¢ėęē?ļ æņ)/&3Ó÷%į³.°ćķ ń$&ŚQ0 ėę%īüįžĆŚüµ?7źź5+Āėų#Ė,ģĶé1/ Ņ%4ļ-õמ*Ė1Ų$÷ ¶2Ū¾Éž ·öø3¾~Ś0’× ļó‚%Įģę ņ§“ąąŅńż8b$.ģC, ńåųĶ śéĘŅļTĀ9ųęĒ !ä&0 büś×<ē.֊'šņ'č+1Ķó%ī$śSä>S}A,5V!@Łéŗ))ż «’,˜ ńE»¹,ū§3ķžÖŲŲćųÕöņ!/ń»ą ›āė Ņ Ł” ) ÷¶€Óą`ę+ż>Ļöų ēcØ~ØķSē"łĢŲęßõź(lŽŠR6,9ļŠ$Ųų`ś.A, Äōó%&R0Äõ&µ•ąā3SĻęF ń^#TЇOāć ŗē€˜¶Ś4Óo+ąóÖÅø&ó¼!Äķ»įķĶQūą9ŠćōżĀźPĻ ę0įń¾3ĖčP¶ˆ$;/<Ė#õżĢIżīķź3ō#ūķ½Ģ'Įčr5ƒĻŠķĻšć Ńóõ@f,b9ź1 ƒĘšJ"æÖ“Õŗ~bŽ":ąŠfŲ°nQ÷0N•ļ:QŽ:Ž÷€j€’½Āgć’ųgI\ē÷')Éö !0‚×’ąQ=-<Ü ļ« 4Ü/ ›9šŸŒXą!ÖZõÓ倔€uŒ.ųŃœĒ] ąø!š£ÕOžtšĀ7åĶ<@ęČdŹīAā~ü»Ķ@€ųģ¾.4ņ8*€ÄĪĀ9"€07²q,€ķĢäŲ€pŠK~5d}€Ė«~É~<ø¦«Ł€É>Ģn7€ņ7żB4ęö8€?€äģ3*o€ļjč/žń¶Uʀ܀ ńņ¬"ɀ.¼},‚Łé’~Ź5÷ĒĖ6ṕ\,¬Ą€#Mæē€ęSdx&šK];éb €ŸéaŃᙿz垀¤€—‹ O)Ćd˜€ż5&€€e.“øR€×©~ŪzT¹4Ń ) ?ļ~ŗ)+܈ó2¶~’Ņ[Gó¾Uū."~ß»ōš& ›Ćõ‚ķŹ Šķ¶O’Üčč*#5™ģ&0/ČģõęģŹ+Į)ßźĄ`Ė:ųōOóįęHnņ³ūÖ£ėīŅ"żl€ÉųI×KüžƒTĪæż Ģ:*¶“Ō³ūåÉō:›$Ąp-ōņ'ÜńE†ć¾‹6’ņŃO9Ć$č€{Ć`é€D˹݁ͯAŠ [ŌSśĒ]ļ;ēÕó6 /É Ä >% .ō’öŻ’€’Ž2ĶÜ ĀO@#|•śkEīÆ#€Ÿ)L}^?åćĀ"ž)Øū$µņŹžŚ×ö!#”"ņSūę&€Ž\KüXž!÷ĖĮŃÜźE÷¬Ģ0Ņģģ÷Kś±Ńļē."éć# ö÷Óāč]䔹4Hż=¶ŌG.ŲX*Üš3IäwGŃą Į;ŪźY’ćņ&«(BAGG4 %$ŻßšÖ +š‘ 2§ī9Ķ Õ/Śģļ!ßĀš(ķ>Ł×Ģł  HGī-IŻ Ü €ļߊšäūē ß±sõĀõ2 +ĶTīąųĘóę żS!cł/’ Ńåģ@$ŽHŲnäĢ&(1äqOų óēé÷Š*±ēÄģ0½( ŹįGĻÄDį·!ÄO5ņ óϹē7Įē¾ %,ņļ¤ąŅl<6(éˆü“ąHQ5X5¾˜Ņä’Ł»ĶV÷$łśß8}ń„מÓõéø½&»,)°õ ū#ä-ćåßū&4¹ +ćē,ž€ öo椯YåCśžóļŹ~ĢģņH !6¶æ żoūĮóüĘöÓE&÷< OŠŽY%öąą¾ūäĀ¢< DGįāŁüīŪļ÷W«#åč>Ū>Ķ"IßTņÜĪēŖb!!č¢čĻ,JłK(ž0ļ`ä©ń„&äÕžēōl±åżńĘÓņ Ą¼*.%=¹ßį­ą·lŚ ń’ģķ÷äøšźqŖÕ>5’ õŚŁ'łöR`ó;ł’ļ™į ¾$ė(PµļŃŽ,(ÕūłĪ3ē„ęõ$-ŃOEėüń)Eõį« 1iŪĻąņUģč’k’žĻÉ —{!²żĖ*6ž;%ÆŽ¶æķōę ®ü@ ¼8ü*ŪµõÕÅŁQC®ćq¼ 6P&ćCāŹļōż%žīĖõÓä*åCū$ļ÷,9’$ąžü7UdīĘ óŲŚį4ŽĀźśŅ/öHé6čäü$÷ į>ųį¤į“ żč߯Cķ¾’ŗ€éć-ÆM ā)6Ćų’é-ńĻѝCßMļĢ€łP>ż2ōČ üŻ/ō@*z=J,ˆ, č€/ĘżüéĄ ü!Ō āõJčžļ ŻŽ ÓóČDŚņŻ-å ~ó/.Bž“_Gģ*/€Ā± åČ*ķ5«²¶ó¶¹ł×Ż>-ŁÅŠŗć’š4>(Ł®ņÖqŚšü;äé;š5 Ó !2żę7<õųõāōßŃäFü1ļÆ5č!3åü-ŅüH?ń—"įļQäų5 īāö×)īļ’2īļźU$Ü ×'īå Šś ƒŃ1 ųāQ:šEłĖ J!ī!<ś —öC ļ/éF‚ßē  ŅOŻņėķæįń8Ń-ėē!ķ 逾łŅłõ41& ÖZ,¼BķŽŃŲāŅŻéõÜŲ ś 1ڧ°>éķŚ6²ČŲÜ(>ūęć#4ŹTP#~8ƒ(#Q0%ŸöŲMŃfė1Å·×+)Å +Ø~µœ¤Ż ö&Æ-2ņ!7ąūŚŅāĪĖCŃĻ!F‰¤Ę#%£MÉįK|ė·ż÷ķzþ!Ÿ£6½ö„Õī5Ž˜ļüXŗ):Ō ×ļģķļCęī¶ŽbšĮžŸÉ2ŽfŻҼ~ū’öńÜ( %±=€żw+Ƶ §Ń€ ĆjF÷ ĢīµżČüķ#:ņȦš€$õ Õ5Cb—¬k2/4>6} Ži€½ćóL÷ŃÓū+|A :°įwĪēĒi»M£•ŲćÅI2ę}|.ŻłŽū۟ŃÜõżĶVŽŽģįõķEĄšņ0Ē t“kóT®Ž{G9€Ŗ,›ĪÓūŲĒ€i”€¬é1Ć ‡3¹óųT+Iüāė9ųń*÷Ę(Ī3cl)’?ņ:€šØ €ćZŽą€ ‚6€KÅ#^$¦÷’<“ÖżĀłéj;Ż2źQōłŠ<0’OŚų0¾ÄŚCž€•į2*~ūśŚ³ō!%Źūēž ēŠ6Rųó*ųIšĻćüÕļ÷#Ą]=ģ× śé6ęū. ÕßļŌWŲ+!?ųēü’ųš%^5ŻźnąÅūÓ7©'Śż÷ŖšŲćē$ęö’ '1ÉTŪé 72Üżųægł¶1? šÜÅ‹öņī=öÄĢĆōųFŌAą)īĪļ)%4čńVüäļUFļąö )ūģÓīBņøšų(hŗŃ ÖšŁ»NĀÜ9!/¾Ļīę€rŅ’Ż,Ēę^8ŹÜ)čN)EĄįh€EUŹfµ€1/$šGš}·}@oÜ^Ģրā$³MŪ‡µ~ä’O³Ųšēļ1ØŁTµßv ļS1­ <6ŗįö•#ś’ĀÉ€.ČßC=Ļ417y%‚ĪāÓ_é­5Ņä‚S‡ėō„E߀wź<;Dū3©$€ģHǐĻ=ßt+>źgóßå息8CśUBņŲś—¢Ģ鲿IżIųÉč÷’“ń§˜·īć*āš #·†ÜéńGöūņn@ ²ż×ŽĆŽóFė'Éąī“éXöć'¹É®\,ÉĢGą9K ėŹūļüłüž²ēõšī,ŻŅ3ü÷[NśÕ=üÓżóß$ģ$€ö÷ŲęÉÅ 1%&3 ü"’ų ½",1ģ“ōļ `-ĄĻŁź2ž1÷ ×X8 ū¼ Ū ļ łėq!įćl0%źŲõĮOą“åģļ÷ ÅFAčŃ.\ųĶ6Ż’å'()ńäé½ó/īśŌóIKŽ„ł¼5õ|  ęŅüćīŽÜQ¤ś­āÖ½Ą$är0(Ąś@›;ļņZ5 ōŃ ģeŠ7@('ćĀa0 ¦ų Ę"ĘŻ)šĪ-žŚ¦gņ¤$eĖćčåÕ%ō8"ĻĮä4לŪ/*łĪ×ŪįéÓļå€Źģ[č ā—¼*[ ž6ĄēżÖÄ3ŹšżĢ–Nļü±ń ޲öŪŚDž&ćŹ€Ū»Mą×å ļčņ ł…ńüਠ€ zŁ%lߥ𒻀Ź1…ŚD&¹AĢķB?ā% >(ō!ęĖā&d<ÜģĮ*€m3%¢mųĪͦ’ņ l1Ū ¾­ń&%ŪC<Š-)ąM×ĢŚÜMā(ģXęųń.1Æ6÷ź€õ%"5Å"’£¦=5öč÷$=ĶśĻėéYCŅī±FY,1Į y}ńĒQķ¦ŖĆÕå=Ä4ŻŻ ū }$, '^ō#Ó&¬± Ģ0#“ĖNÜśŽ¾@µ[óĮ²ž™E.KŹā^ÉükŖüÖfŖ7Ÿ»@\«šĪ¹ōė&¶%å‹DCķ8Ŗ'éģ*3ĪérŁć'Aä$żżņõømŪ÷'Bä’īłQīųšųņV3!)Głć>ŃķŌāīĢę£ Š*īšÜ#„¼Ō!2ćąōå ó÷ĢFĪę!ķ/äļ/7öŽH"5G" "%å*Ņ÷åžē "ŖÕóü³Ķ ėC ’€Ü#å ńÕ­Ÿāż°0ąIčŚę 6Rśūņįżķ²óBņłų@ļČēĶūūŅBģ5ł&ć%£Ė5Ūlüņ®ęKÖ6öŻ× ßšē6²Ń€(ū1 ÕŻŠ/ż¾øūå<ū’©ķł… ū°N±×Ų%ŌéŲöڇöō<,ĀÆ h€āŚIJ€ž^ĆųGX&%CČ€åü©č!°@€€yC>€ęŪL€3ē€<:YS«Æ _Mķo €€z×Kaü€ē¶y¶ÕNäX‚Lnś6åņ.„ Ń ½7_LLĀjL¦ōśŌÆ‘…€nv-‘ĢäQ€·‚wixźęķŅŁ š!śōµZ-$%XCC0Ö,'DĘ 7</&N¹÷Ķß 7ū!I-ĄŌǰŹČöå}ž™(ēHģīS&ĆČ»ćū~ī2“żģN3Ø8ųļČkŻ9ĆĖ’4įĖ7óņĄ#& Ć"į§8%ē€éĪżų– ¹€B?čų ÓŻģāē1³fhęÅ/É —¹ŲŻĀZžĆŚ7U¬ķų’#%“Ū:‘żģÆz7Ü?1;ņŹ•ņĆI×毚ü4’ūņnF!=„*HÜŃŪ/4łžTč¶ūßģ āA ~#łļÕž)  ć ŽßÓ×@Üō9Z šó˾€ōēäåüŁ øčä2"<, €į5üd4 Jł^PB5½(Öćńą¶’œ7żżÓ=ƹŅIBĪÉŻ×(Ż ś ēhõ8Ö3ą ēė÷:䌔ūŽAXüU Ö·óŚļńī4ęņ÷ķūŽŚŠō“Ö,,é °Ż ēœŽńŗ’āĶö+čüŻ C’`~LÕś[œ 8 nĀõÕļņŌ(ė#·jÖČąŸü"'UՄęćČų r0ŖÜÜųķ™® ų€#‰Žć\(Ołį’%]-ŌSū<”ę“Éįäī»g(]ܼ7²įÄTÜ™ ;ŖÓĘ Ņ«3Dļ.+S{ų«ķŹ Böģ.㣁Ł~ŻŃļļ-2ā+’RKžę³Ķ B#94łÆēv󘁳Ēåč€Sަ,’~Įīś”€ån9łŻ ¶)ĢOŪX<#«ź¾€ČgŪ%Ś)H€ž€@EśõGKŅ1€­¶DO€PZ†ēg”łą¶ø³éų€Ś--¦Œæņ#7b³`A$€$ķPŅQko2š™€ĖųÜSM€~Šh€ļ ¾¹€å/* 9:ÖŻ‚ćŁ;~pĆĻ׳Ź~„&T@łu=ā’łņĢĶߊćŻāśõ,źD+Dź)ččLó’"čś`)ņ«ĒōœćĀ?ö5 !7łüļöšÓņŗŚóõł7ų÷­+ē)b Ö».ŪQyņ’Ų&óNŚ$įūśßūĒļµŅė&ŌóŽĶ:¾Śģ_¶-' Ś,ūžé­ĻB_ū$ŅķźÜüy>ųÖņųü(ĻäĄ:Įńł*äGūņłšÖų)óü āūšĪč ūńnš1@+Ū29šķń’ķā7 žõ€¼€+€¹ŖoPż÷43½€\!žē¼īļ'5ž4E¶1^Ü5öĶ×_īšn=Iҵ,m[€ų÷Ņ")€š€ŅšÄųž#ßł#ņõxņ &ē÷šF !€ż#ę(ėźć¶3Åū įÓłąŁu3|»ƒõA‡ŅüčāŻŒČŠF7ßó÷ƀ<6€7l-d'$0ÕæęŹ~Ī` V4”pßŃéĒ~ļEó,č~üJńńś+÷šАMķéeB’É“! ,5ø3 ĶčŲ<Ā-%-,ݽÖīf÷Óąt‰Ź.Cē Ģ쁛‹ķ=ńڧX ōī4OĘÄļ;ļBÓü0ģ#é3÷łžīćų$ĢŻ×ųšļÖdBŠ™ĮØź8ŚE›Ų#)ó&e+v='¬õÕŗƒčć‹ āĪÕ$ĪųC&ą'ģ¾ BąĶ(ģi;Ų8ūä6&%źļ'Ļč ā"éÄ2:ü%"¶čæ€$ü[ŁīZ’å¼±öąū€ĖŁļ'(žęf&ąö’åą‚e/ēūŚÓė#÷²:ėš>õÅĪ8+Ņńņöéļ<õ_ż Ė+ōęnÉāō€ĻĆ\ßņ’Ü)fīÅ*E7äß`ŽīP9š6Ā(•0Eź źŃ 1,D,ÜA¢×Ķ9€Ä1¦ōć üŃōILŌęĀ ~»’Ļźü¼Ł’’źü÷ׅ÷9•)Ę?øļ+ŗŗ«p!ėŹÆØg›×(™šųūśõŅīŌb(Ī^ņņĘŽPĶbĖAWŽ6~ 9²ß‰ū×v¦å€Ž@‚0óŖ;+śÓ@ƒ*nĖ„ŽĆ€į)«Õ?ņ:Ź¢:%øęēўšÓķŹĶ§,æ. Ö@­(‚"˜č€8 ń ś×g1ČŪõóM}łœSļåāóŽFł.Ééėō$āø1»š - ŻāĆõ-ށĄ Ūį»üč $ķŽ ō  )ņk€ś’ĶÜłC ō÷ŁĄ Üš Ūäö> Éł9 ¹Lv%Ę€’&ģ-ÜŚģńś ” ųņūłķč Ŗ8kŽŽŻ+6 ųźēō’9Ž ī:3Įķļēåłå6×. @éźķ"Ę#ų Ņ!8ņ÷ ČĀ7ēģ!ßßh°ĀĄ "TžõF"2żģ!Ż;)),ź8 ūū4ć, ė’÷ ćā$£ōē»'ī"äĘżąļ=ī ß.4’å) ōEķźŚL2Žš  O7;ę.ß‚®Qüō6×ęųץOČŽ šÅ&µśų_¦Ą—/Ż(ń#$ŠŁ×F»ēēĘī6Vł½üO[ ,$ āķÖŖŌšĖyģ že5ńÕžĢ0ū&č?ś ŗ¶ųā$ŻØ"üå4ł1ūĒ% Ņķ%żQGß^:*ÄŌõėÜė×$¦óķÖ"×’€œÕ Æ35(/3Ż)9GääaŅ¢ąŽāÅńó÷ŌžÕé,*Ž .éOĪż-82÷+& é ć0Uįü7š Dłļõ#]ųOI9€õ7Ž%ąęāń÷CŃ-ōäųŌ'äÜ5ćų”Ūõ›g/^nżķĮ©$Ŗł$ł××5¶Š\ģäłĮ9’č åŲ283!ål/åįP.D¢ąåå‰) ńnāÄ1ķüģ«ü Ņų'ŠĪōśŲ !ąłēųĄöHūĻū‚ #žÉ+3å0$5! ķė…9śŁ8Ōž9,€¾ŪŹ ³õś’åH €īõĢĆoŠ‘ų åŪ®÷<÷÷Ā(ó/'õv8ßłTČDč"ąÅ%?ö8īö0ūµš#=ėĆ=Ģaåéń‚/²Š  ė÷łIķ1uŪ ś:Żäęü5ž3(Ūēśž?GµÆÅ<Ŗņ #Ø 93&)8^†Ņō.递%"ć³!5Öj#ńĢ hß8ßø[/%?ž KßՀDźŻņ#"büį肿éPA§&Vą ķтåMÖŽ ķÜ Հ[ąß€õĄöśŚō%:ģJ Š F,²"dŅåQå!¢óńįÅģŚĀ[ŗ+ž |īšŖo B$„īžåĖN!>Žó3Œ;¾€eŖ0ąŪ)Ų€}€Į38,ģi:¶Uł»ū2€€ē½¹Tž¼®:³ ą©¢ŁB\•€€¶ ,Ś; +åŒ(€‚ 5B޵ęQ1諿Ąć¶łīäßjӕ€BĻ&ś52ŗ®/~š1’"Ź}Ō|Z‰!<3Łdō,Ü+Ęķč a\4€æ€€; ;&’¹4żć¾ ö'ķ&ē ōĪ! ō€čō‹öŽ€ī¶śųųŹ Ŗ«ģå#ö@ń ē$ ęĪ2ēHóüžāæč AŻņīõ *@ŗ!ĘŻ5õ2 Ū(÷õÕż*¦$kŚ^}8žś53ŃŸČ 'żŻöÖ¦ø ö>ķH4Ō5’ł³ōWĘū`ęąÉßįģ`$Ėš",#9ź ÷“ßżŽņ@ä' Ēōā’#ół Ō/óčź­69!bū ųōĒĆT”ÜŁ€žöā'Ų÷$žŅ(ļ",Ņņ NÕžō! ķÆó€ ,šrÓž1­üKźūū’Dżä­Øų’üę-ø|ųĖ˜ĪÜ WŃ~æč~ņMķ“S¾%'6 õ6Üøäī,üVō6žŅ¼ˆž.`Õ7Wļé[‡F~āEž¤Ģ«õÖņŅ÷ Łå'ēģ)Ū~õÓXbć.åõ=ß’(¼$=õ-[ŪļėōüŃā—ŚÆ÷õå#ō&ę$Gu ŪŪ0!įĄ+Ü1öĖŻźŒü ‚JśEÉćąū98Bé"ėŲ$ÉD?ū€%ĀY÷(®`¤Ą* “N瑬,DŁ=軜čńņ,’+4óųźźųē„2_Ćęŗhķ)źāWäĀ3%ęł‘› ćĘ €Ø$„·ŅņņĪœśõŠå+ž4~ҁ+4±¼ąWחTl×'ēūü %ĘńÓŪŗ GŃüÉł)Qų6-YܲÆ)K)ĘM\% uķčõŽŪ=A?ĒbåBß’ķĖ DŅ3bö óö$śóŁj°ŪÜ‹2łś#ÖŚå"2ęE÷ żøęĮžšiķūĶöŁHć1üģó.ĒģO€ČR’ŠĪšŠńżŽ’2²1łėģ ("ŁQĒADīėa =# ź“Œß ä%µ:éóŲßą¾~ė,8Īė’ćéēŽÆūĪĄ)632FÕL/ķż`""ž¬’‚ĆäšĢ÷ēhłqeaēńŻĖö Ļ2žÖ +[ė{×ŲØ0ÓĘŪļü,÷ė—Gō’āÜüPé äģŸĶÜ%ņ ÷ͧČż$ūļ6°ųü‘-€ׯė%šćź  Ēåč¾Ķł#žWåHČį ž>žĖ ߣ"€ÄUWˆ£“ķ÷Ęį ›€ĪzEėĒū€€°č0{(ć„€ß~˜Š%ćē7÷€ų²øį7™€Ż€TŠ€l~E}œ²åĢ~®€Ė€Ē€ø1)€#€€|ŚŖž³€8}ڟ"(4©Ō€Ž€}€€|@€€Ć‹įķ1€LO€!Ą Å ŻÜo™•ī*€y€ »ć1)wKµ‚€c€O€ĶU€G€f€}€Sf€&M­“C׀ū“Ÿ$Ū¶čŸ(ä€謀/ėŗ#Żō€ŗ+ļm LT/*3¹»½¤¼żčņ•éÕ!€€s ~ķ5õįp€õ‡€bāē|°¼ŃEC|Īżט‚€"¼j­ #€øE»*̼śœ11‹ąé–ņ €?ż’LWŁė ēĄmŲbd€t=b0śæh©hZC/·¾µ·\ŗüj’V¬?qó€š)DßłŽž9|gżÓ€įŽ %~~$Üņ«arąą©ņ'Œ3µŗ×7Ļ Į6ņ$Ņ%øĀFI¦:~z¹Ō¹Łž/`ļĻõŽäń€Ü’͌Ŗ9[āÖščÜų6ä׎Sńž’7!(¹€}ė@W= ļČh4 |#īŅīÓ!¹é//Ø÷0KIėÓÅ8Śæ{€3ä¹{›‚Ś*ū-č׎JÓŪ+ 4„'Ł)•É®7Łū ¹ßżŽłīĖšöܳz!÷żĪø%-Ūmčłųė/ųļ$;Ę&č€ūģó – !E:€9*X€-~##ō36)1ćÄįŽŁč€EŹĘü$B ķųĆć>#Öµ6Õ 'Ć āėŠā€ĖĪRüõ7é؁³ %ßĢ\ņ7~Äó^ õ.F±ļŪÉj€/ēå`ćgū” ŚŌ€2ŁńĖŌ¢ąĪńFź­6 Ķ=ōĢ<ņŅEaśāźņŽ bÉŲāź.Ų±€śšäķ±X$2īŻät"ĢDō.FŚĒ( ϵŌū į0šŪķč%=(Šėä6§³ ׯ%č"ļćŃ !óė'ż/&ļ*ķ2÷äūīų+vś[ż łēĖś ßąöÄßä»ÜŅń Š÷č6Uźö;8Ņō(×IR-öĒł'WōŲ¬ž )ęā ƒé ēÓķč)šś ^ ¼ä łÄé÷č’Š.’ŗŻѬå %Ķæ’ł¾¹ õ Ņh0÷ńÖĮĖ0½€ėś+Ŗ4aĖr$ÄĢ#FĖŻļē ˜ +ŗ0äķ$ 2'Ź‚‹Öp¤›ķ /ņŃY×`ü7& Ų×Ļ1¹öšöļā%/ń.*ļ.ėųźŗ’Ż9Ż2 Ż ,OĶ ß×7Ō» ų[6ņõ! øś Kīī ēńü5CųµóĘńÓ¬įČśęŁ ėö£¾ ĖćāÖ%'Pāķå(žķ›Åųūż>įžßźķ#åš9Į VRŲ “ä2n č%ń0%ō)ŽžÄĘšżkĶī¢6IéŲņ, ēź114Tč-ōĽõļųå ’Ģ8 łĄ÷äčłįRų ēōōČ(Ķłž(Ź@óėłš! ,åēŽ¼ &Öńść -Ėż ų’.õ+#ģįC%÷ ó’ū'śŪ õ"iżĢ(žęń/Ōįļ#%6öš.ķśT üėšĘ’Ż ė¼ē)&Ó1öÖ,=õ@įŅåŌ[!ÅČ :āä÷åÉÓłSĖĒŹߨ\õ3ńį ļ%äģķę čŃ,Ų ”a1 ū¼Ńķį±Õ5±°ōN !śEÕ ßķŲū ų üņ­ ūÜģ2šBūģųāÕŽ'īń½ŲČŁō4ž:öŽDķ ĀŻ|©“Fé„B¾ŻķNB8+Īęų1Ņd• hĪG 8śŽ§Y‚ŁĢńs)ÓZn<ģ6Št8ŽŖ&ĪÜķ÷Ż {2œŻóø}+³Rµ¼Ném3ėę ĖÜ0uwž*ķ.Śī/–Ēt‹'¤ĻĒ Ā /3ē“’&ß°ų5/æh~gö ö:÷śy@) ĆęćĶu{ĪŗūöĻ劭’ó42óĘ ®“łō nģ3C®÷&?Ł+†Ü%83ó¦Ķü5ļöž:mõ0tó¼Ńāź4ÄMęą½Š- ŅśįżūżõÄBń -B.»Ŗéףę~ Pęöį÷Ų}åĢ(ćĮćēßžK4¹’č4ó]& ēä÷ …[.>K10厞-ģņ$ĻiÓżŲ ÜäžL × ĶÕłź”8.%ÜÜū<ģŌ ŚCĢżõ &ģš)šó÷ł xÅŻ“0÷>!ėģ= ėąōŲ³ąó"$ S€čę¶€:.€ą$€½2óüS'Ńś97au+!:ø“ŅõæÖ¾µļń]ä 8& ŹÄKW Å’ķņ+Tøk zŪ–ؚźōŌ’ŪČļ#&ä€5’ͳ#ŅÕĢün‚äę׎)īL¤éUJņķßŅžÆ/3ī=Ā"kĻŹFąaī±(Š:9€)Ā"€ 0,'#j <ßJC€0—3žnåāģŲ}ņ;]8ņĪØų×]£č¦»1€Ą,ˆŸOqßJĆ2ńęææÕŠEŖ ē¬÷QǃWĖ«č~ųlź å¬*ÜķžŪ##}ū:µ6’ĻŁ\ģō6śŲdÕ’‚;ČZėīŻ"~öģį€ŪÓō’°]!ĢŃń]Næ&īĢą½ä;h’$ćį?äąż±WÄŪ Żģ'°?ßž;>Ž3ž :€Ī“ś“ž ķ}ąÄŽJ%Åüb&®!æĢś2śńńŚŲÖ¾žQ € å7š’$ł#¦²øQžŒŪ š ĪU-³ īéŽÖh)Õ 'ö ĮéÆy((jųø5“+Uļöļ1ĢŹą¾€2É{š‚ 0X³ żÄÓż+/”üżÕ,ź#?ŲT’·„ßµ.ē,7īĒā 5žīmé,Ķ#ö$üāŖŁj9Hūė”ńķ¤ ĆIN'€ĄĢpÜ4Ć ) [ ļR ō"öSø>/ Dģ%wöé0€Š ņFąć"Ś,(¾Ā§üeļäē€3é+ékZLośüł+ŗ<ł‘ßēüüžjݾ łĖ ņķÅķė€&€T”ōĻŚ$! ’€~RśŪ°?Ō[‡Ęéč ÓM°Ų’œåū’ŪĖČīQ~śS ·Ćč•éyš(Xŗķ×Lķ Ié,Ń©½ī€õcĮśę€Źäś…¾Ņłn‘‹ŪĆē€[XrQļü€0€TeHv·[ĒHŹa:īļö /,’ųē 4ą Ģ Ź*ćą÷ńąō>ļ=ų % ęāūŠ×ń'Ā7ż[Ģ#óŌ õÓī‘ų'Ģö2ąüųĻcT¾ĪÓCÖęÕöśåŌ!±¬$×ä6>Ķśµŗźś,ĻŪ$ %€ĀčŻ³-įģŌKį’ķŹĘŖ’Øķ×2 F(Ų2 ńģ#.Ł0ī'ąśēŌ=ņ@Ó$#ųŲóūååńĖāHÖR`øóŚņ“ģŚń€žØ€Dć.' ņNš6(„kFĻ,ōÜJg§B!ąśŚÅ)0Ä¢Gō”%žó Ō8ˆ5ü“80Cföś~ļRœČ ōčā€ófčÕģ»É/<>%„§[o딣 "§ęѶń'#č®Ū7Sš”/É?ĮC3ų¹~ž6Ā€ä'õš °Hį×ANž Ąŗ±ņß*€įü]:ó*H€~H†Ē62ō’ĘYOžé>óĘ$śōÓ $ C#'HļPVĢ#õ&ßß²”žŃćę€ųŚ 0…Ä~ŹdĶ 4ž(”7yx~ƹʕė!‘āķ€%yBäņć »"nś=ė'÷÷P$_õ?hłÅąåčżĖö]Kk ū łŠFz­łģļ\ķī€×!ē÷’ą7Ō7ėbKU+ Ū#ž7ÕLāöăÕģŅļB›ēįnóvłÜ`É$3’ĄŚŌE ęĘ«ä€Õč3ńŚ©ūY—Ł#ķöMČ&a*z'ŠŠ¶KŽ0łÓŚ“šŗ>’óļÜ,÷SŅžB%1*(XšąFÆ|ü0 ^a¤~%F½KHć€×€3¶hćŠć÷óååDł÷Ѱ˶ŸP*¾ńęnUŅS9D¬]Éł„ŸĄš49Ļ“¤øöŹ5č~3ųaµž€**gļq1ŌS€€fb‹Ł7FāõŚÕYš P=ą#. -†µ *A"8—ĀīūSĀ6×¶€Õ…IųCō ¾Ač+-ę *äŚŖŌü=4ŲcĒ€äw?P¾ )Éżū-k1ģ€ĄŅ'ÓŚ×:é%¼ Žćīņ(ž§ŠŃÆž= õ»³2Œč6*{hļ_-%¹~ ö¶#IÄ®÷ąÕūa„&õū6ķžžĖ°½¾'é€é¼½CĖķcżŽu󢋋C&Ÿ#'OŠAv°+ݲģŗĒŃZ)Āߟ’źY+Ģ <=%½I}ėŃä_ĖĢ퀫Æ,ē?ÅĄŅ»Š;Tę N½#śęü¹?ō ›.ē’ģ§€ōĆ"ź¼0¹ŽŠ? ŅW’ śųHŚŗ+8€ņ!ņ«Éhšķ` šĻ€k_Q04|ĻGÓ %µŁ9 %¦'qę_³2ĄšŖOL}“jŠļ9E€ģ.¶š÷BUõDé™5Īå˜R—€|óiD˜~š€€ķŚŠ±åG}/ō ¦H ĘćācČZ<”ŚæĢ®\Ąi×ō4Ų27 ÜūöĖ-[ünŁ€¾ģäźö¢X€·ōü§'™øī?)]Mqu#źų€īŃ[jFß-“Ņ ņŁø,§ą8W<½ž0;+śįŪ/=K_/ß“2ūģĖxĘŲąÆõüå¹³ƒ!€ĪŌ ųö7NćŒ¢ĒUŠ«FĶd!B+ 2LfŁ€'–€€;ņ‰]¢=€€ ~Oö+„·gēŻÄßėÆ€Ūƒ){[-ś=q€Uz€;žŻ€/ ƒ= GÉ}6ĵ8Łćķ] €'k~óŲāUĖ2Ēkäjółöא3 88Å3®ĶåüyC D~Ł“ipW~;¶=€÷šĄ°ģ·s¾ūSŻU¶•€ €C8-u~UVĢ€4üŻr^į&0»÷Ųā#,2ĘAÜŪ,§ = '¦dCfćĪF%ŪżĄ #Dž “­ē’P(ŁŠ5€ōAŅģ9'Źo5-„·4¼,§ļ!°.Źļßā÷%Ō’“:ZÖč:D"ļÜą–õs ÷ź4ŻõÕ,½#€€ ĒõeŠ#ź%¾õč¼%’ S"ĢBåĒ’ź+5‰¬’Ü©?頉L¬įJ"(ĻŻÅցĘŲ€ņćłÕå*’į‹ųæ= ÷üłģįĮ„÷ŻXż5#%)o$ō'µ=:^¬ ńŖs$Ę’ņāä-ķų ¶ź³#ŗ(俘37ĶĪå[Č ūŽĘ?ļ®ōŃK6ęéŠ&0!TÜö ,¦&åąj5ėÜO)ŁĒ8Ēź$ż ’ė4ō%ó$éŁõ]ņ)@€žłMī%*ģļ'ąn_ķ ÷åūūÖ1_ę ³9(¼Cļż;ąŲSÓMĮCņHˆóŪ>ŃĮG·éŃ*%KĻ»ēA÷ŌARčµĪ%%ø:pśPžūŁŽ=€Ės©€ż­¹^P5 Š€}ļųĪI’eŪ€~:Ś,Ū€‡ńę4VVŁ(GÕŌ¬ź÷×&… Yų,O«Ą&š„ü"貁€Pčß7ŁBŽ:,6ģkłæ×č€õ~ņńĒ5UE€01%Ų":&€Ž”ģńFVĘķŪ€WÆŽł¼ž”c,4ó~=œ»Ą×¦Ąłö 9åĄ裸¬Ė€3ąŁjł#毂ó(6ł:Ei;šąŃ% X © Ų #ų9<ņ/%ź;!ÆŹY .Óņ ņPöŠQņ2ā!=ńDč)ĢÜ%  įå ÉÕå‘+ž^Ėėūнč"īł Ęšģō<ŅVżśŸčÕөׯŻ<ėįEÉӛ«ż1łģ׀›ā'Ó<2õąŚtRȼ7?&ū<ėL€R&3²2üłĄėü€€gJkŁN:€€“\ƒˆ°«”~€‚€MķR€3ū'€ļ°åĄ-€’¼–į#7Šz~€A€įćYŻ9€YĖķął€år€€åüå1~y楁L1=ūü€€Å·3€~śå®D€€HzX ›‚€qy«.»õČT˜ƒųų¦ś€1Ś€ŽÕ߀äķóƒŠķÅå€Ė\7‡#œ•ć? ńc]ģ¶ūŠ«¶“ Ėę÷äŁø ĖŲęŌć4%ø4žūųϹéē 3÷Ąāūć&¦PĮ)ÕĢ(Īä%’° īÉņČįÆÓÖ*öē *ē""wē+(õóĻ TāHŖŻ ŲŌŚÅ³ćāÕ0)Õ-ŪŲmnóĖ€6Ų1 'ž~Z³ż ķŌ ] ķ*ōČ5±73Ų‚¾ū×öļńā’Śõ"UĆ;#ē8ÉķDžĮī¹Oģ §Ō?N-Ķö»ådģ3dā¶Öf57ś'15%)4xE ūˆĖ*į'ĆVę€×öÉ üü śÖōŸŗąķ-’ūųćāę-&8Ąēóōō•ńāĻ’\Dä'ģ~ćXź@ ”“ śąt-~õŁ•ō·ö,Ų$Ū0ū®ƒł(é#śår°ćLų4ź>ńŠĢ6#Ī(F WŖ.Cėā%× éZ/Ī Ōf*Ā*¹óꕺō2!謰34Ū›Ļöś¶éŁģŁćvū_Pšäį’aŚžŃ”Mfęé×FFīʰ6źŌɚĀÅWä#ąüīŁ$ų¹ßvŃ =®VšŠDŌÄöźŠ;  Ļķł ĪÓ õŌéōŻ(åīč·o4ųĖ&°®B%ļĒ!é 8žOU€ģåń€¼Ī źC÷įįĒŗ ō/źćÅqĀ98€–€X €¼žgē¶lóW. €Ī~ēüĖŸšļ½I@` ā’Čn$"ĖĢus=f66€±Łć}Óą_x&ō€ā¤ nœ€]µ6|n/€ś«ęäÖJh|IģՀI €ę!Aė¾Ē)Ą6GÅŌ„BźG6īÜø…7€}³Rć3ėå ?ź öOžpö4ļōW/łŅ 9Õ5łYĢ ~æ1e#|OāU6ŗł“9‘ū倀äŁŅu~ŗ }GėŚŁą‡GG|}5 ŚÖ!¶īS+ķ¤ ęQé€.ź{[] N7©>ONƒōUŗŽćé@åĢ?šrC1H}Ą€®ĆŒ;żīÅøŲćxå–~Öļį`‚:)Ężõ $ąĆŽŚNKčĶøÓ™ü,Š3zkųqļ~éPݤŌ~Ė5&¾Tū~ $3ÉBĪcÅø©€¦~ÜR*€ƒ„ōר’ŁķļĮ~ė¶łĖlóŚõī"ŠKŻ2 ,"Źā1ÖĻQ!6ė! #³¼ '‚ 7źüĖš*§}åšØAåćņ%9ź€3ļŌÖ“čī·:żöųĒźß*¤åŻ0Ų*ōŃOōŹäęæĢ"’&Īī’óžŠīĖŚÄČž8Öé!č'*Žį£åłüŁæżO-+Ź+#!‘Łż8A&)ŃćĻŗō€PÓ0’éŃŖ%€ƒ—¹ü‡'ļŅ&į”ĮĻ.9€µB­Ē_ü;HÉ;ó.źQŠ-xG0+‰P€. śSī進ņä¾2_LÜĪ/ŚÖŽ~ć¹"ė,ō~ųkį½JŖ!’üī<€ä 3į€ćŃÕæ³»Æ×6Ž×ūY\5čź!ŹéšÕé!™śéĮŁ£F^€€ē’"9Kö€rŻ'X6ó~Ąā !Ó?h Õzƒ"ši€ &ipKé=Š4±$õĆćńĒ%ŌGø$Ń6ó9Ń>;-zG¼&æ61čģ±Š’õä)āēÉÅŽßōęĮÜŁÆŁ‚ąŽ’'óBÉńÜŁ÷ö@–üĄ“±ķŁę1żōÜņ±Ņ)9XąéZZāvõźśšā÷?śõ€BĒ’ ēüĘ I¾_rA§4ž4!ß żó>ų°ó; ęų7ņÓ.ßßļ€Įą{ ²-cņ$9ڹ ō#2ć  ļ&īž%äń *Óī$óäž!čś(ī6&ŌOžł,üį""Óå'7Ė&?Ķõ.ć  öśėž éĖ÷ųī Q öĆō3×óōėąė/ķųžāÓĖĪ>ģ+ū: P$ģüŲŃ ÷7  łķ+Ų9%2ēģ%śĢśŃ ńŌé7ć$ ś,üīó ÓĪÜ!Ģ öóžķö÷üĘĶīåõ8:3ńŅåłÉę²ó ą`žų,żźÅüłĆŌøµ)ų ųĀš×ńåėÄå SXDĄÅ×+ē  óćģEÕßŲóģ>óūųõųV"# Šūłøā÷üīąIī(Ł,ßļõķų]ų„ $ŪP 72ńśĘ3ō4ß čåāå "õ)ņHČÕōŃ8åöėü×-ĒmŽ )’3ļ+š“Ś @ń+Ķ6bńś!*ōņ½ųN"ś× Ž.**õ$R ."l?-*=ųŅļ ’Īų§ćĪ  ńāŅ#PśÉYLvßG"äįļĘ Ś4"žąū,ō=r÷#HFįłŲéļ1ų÷ūÉ4!cÆØźäŌ7!éŪ‰źu0õC0œäķ ‘+ś€Ä! ėé÷o(ö !掯4²= 5~ļÓšÕƀ(1(šėŃ׏ėėē’/8ށŸ'2“€IåŲPó™;=7č~0Eū€%ÅĄėFŚųśĖó€€€Z7åßåDÓõ€-Ū%ŁŪ?UŚŪ €€0§#1€Ä6¶ā߃µD€-=Cā» øHˆū/ł@+>a=¢~ń °~÷Č ō ²éųż’ģźūķżł  ų¹ī ź’śóśĘŃŻå! ) ö 1€lF?Dū-ĘÉōķÖCBpżĆ1 ė½€vĶ Ī2ŽøöåC 9ąü$ņóē•ż, ø<&%\ šĄåŠØó֝’ū×gT;F€fį%Ķt€f*ī-ģ6ģåÅģķģ=ęö+gܛŪ ¾ķž'Ī&"€€Ó€Ō'/:^@óŻļ!Męž®<’ųŗīäP ĒšõĮ :…×~ŽļÕ¬5Ė éÆ’Ņ7 ²Ż6Eāø µ:Ļū #÷Łõ  "Ģõć&Ś÷IĶ$ńš ōŲå#žźŁ!!žéūō÷č üŁ!āģóīģęģõҲ÷ō Żü ļ&Óåįš0'čėč"‚÷įļŁüŗIķüšŻņų  ū(ųńÅėõņB) ’Ńō ×# „šĒš(!ļüöņ Ģžõš š/ų ż€š?ńŌō ×å} 1Ó(ĆŽ½ ‘Ų€ņ <ŌéūĒö1 4R8€1nÅńģāR³äĀĖžļ5BłĻéĀžY)æB@ĢēL3Ēłæ$wėŅ:öī ęꌳŌ(Įø€ ķŠūżųc•ē÷ś’&žļI ÷śøśiąėōßĪ ū½sļ Š’¼,ōå~J8#٧ćŽƒÜ+ ė įZø$FŻĢ Xėū²Žóäķüł!ę„ń€õįA : ņ źŪļ(Ž5#üęƙ žžüōūŪ*ź)ķ!Gõ<Üįõéų ī' Śś'łšäØ *ł÷u šäŠżåō ;ÜėźVżūŻóō(3#ŁÜ*2äōķßM2ć,Ūä’óś2ļ4ŃŃÕģ%ä0ęäśģų)ńņĮåūķį$$ń\ ~+ė3Ø’(ś!ŌŻš  §›ęłžūżśžö%’ģŲā’ó ōų ö(ōŽēųńķšöżé×ļ÷ūņ€Ó -÷ņ Žöž-"÷įó&ķüōóśłō!ņōņēöšųųÖķ ó ō8 .łķėņé"ēóüčö ż%’é’ 3’1ė śyżńčåĖ  ļąšõŽóź ļ ńū÷'÷ļüńś&åō'ē#÷÷Žģīżōśżī$öõ ūÖžļ€łńÕēżļ’ļö2÷(ņłõł ż! żõėżń’ą=Ņāļ  źčūķėĻņ Ö ÷łjĖõĶ!/ń$%ś£õŲģŃ3öäņõä*Įńƒ 6ŪÕćĖööZ ,÷žī”„ė‚ųˆ„ęJęķAß4€Ż’lčJš1ščūųÓć$8+Ö.ąé-Æóų:AH.ÕüßH )ęęņ€,_įÜžFé!€žö-ץć#‰½ķe3üīś_įłīūLō ūķöģ½-!{?ɽŌÓ`ČD üž€’ūī€Ż Fž Ųžė=m÷)Åī€ŅĀŻ5 šęĢņ„ļ5ķ|ż„ąŃēßūżėļ*ų’śńĶ’ öüųžį+<1ēŁ āżź%ėįźč äXņŚÕż ŹńęŲ ’ł!ąģ ŚßÉŚéŁ# ü ż°ż ļ½Łćļ ńźWõż6ļó@ūņ%ö ąįēńųķ0¾) żÉõ$Łwī$š÷ģłõ ņ,āģżłųčųņöź÷ž ēż ėõå%šļīžžź‚ üāū’īżü  ö2čģżųń ÷žņļł’żöšż’üėšÅ ėž<źųśŚķ żųžųū«7ūö  å ņ ūż ņ÷łķ ö’öļś ’ žń’üżöśł/ēłėüņūåč’’*ėū ļ Õ“ Åōü’üłIāņK ōū÷ūē÷,’üżłż÷ čÅųó’ųõž*żĢüģö’äżü÷óķųżų@žŁ$ ģžü÷łń łßģ 'åü’śūńų ūżžķ’öśłūū#/ž~üü’żŻĮś’ ÷üėēō’’ųśŌł’ ū ’ūõüīū łś÷ļ žöō’ų (ö"!ōśüõź6ö“ļłō óółśż’-ķńśż(÷å& Āé' $" ü Ūżłēžł S&āü ųē (ć ÷¶ųłż8 ļŽAķšē’üį! óŹÓ’īńņ)Ž.  āė÷ ĆüųäüžžģéįōłĪāłłżņ ’įń÷÷’é Ų/÷čŌ ’;éWńżļźó ó†#7żśķžņ śŃd 1ķó䵈0 łōēł€Ū’#ܬ$łļ/ńGÜž.‡%ņęöŚŚ< "Āł7ų, ! ĖķŌśĪ ņś"ēöóā!ōų īßōē$ĀóóõböōčéāłÅ åM S 0$źÕų±” łečžÖ  üĻÕ õųóဠźäxųķķśūõłżģūķ†žļ "’ ņżēś ķ ÷÷éßäčåéźß ģś ļMīčķśéüš ų(ė Åż’żś žöÖķņ öī üóż ÷ųżķöģöŽžūāżł ó ’ņ*ł( ’ ! ļ Ö  śńļCųņąūńŻżö^óžž“Üė䯎Ņ5-÷żõśü ėäłļļē&üüśėČųł ś ÷ģŁžļåŽņżųÕū“ō ū5&’ł’%ü ņRåż 0ų:(ä!õ:śąäüšüął Ųķśżß ’ūŌū’ņż š ö!ģę'<ū¼¶+äš ōŠĮ)ÖŃßõŻņžł žļÓš Óūģ[Ņåē’åćńźK÷ń÷ūŻų/×ėćŽö’± 2 ś Ł &*óÜŚ×äī"ŹŲ&M ŁęŌŁķŪņšż9!ę ģķF PŽüų ¾ūÜīäóąõūąą.ņõ[ę!ŅŻF ŪŪó’÷šņš’ŗ- óļŗņūÜń ęćųūœÓū×’śż"×üūÄó Ł+üŃīöēõ óöłłń ęńėžł×±łšųž!÷ėżīõóžųõ’ūĆõų ōź?ćąų%óńń÷>ś óń ³`łį<$"ų! ūžDŲ üå żł/žų ļŲė š žōöšųŲ +ūłõż3µåķāõćWź’Łō ’źęčł,Ę÷ āūćŽ×üžężųī-żõōåč+ų÷.ä×å Óó*Ū ]'ż ī!į’ ś÷ŪÓņö- āżŲģ !ņłę, õū)Żö0ęł čżęöš!ū®Čųóėߘ-ęūė éõŻģśļõššō<ś 7ōöżó"$$é!ų÷ Ō žģö -Lżõń® üŅīž ń õ&ūĘüėŌżé޳ *ōģō ķīųĻ(øļūźéņźkÓ ’łü’ś÷żÜųé™/ ī†ō&óśāÜżīž ęćŽōŠēśļ@ų*čüóžņāų É’š ēģęŲźė+īśE ŲģźēŹ* ’-żŚļ Ąž÷üōżčõ*žŅā’ śöÜĮż õåūŁ€ŁĒ ·ŁōžåÓļ²ßó(÷’’(łńź( G )żųżäśīęīņīżń'Ż’ š¹ ?żįc čCÜ F§žē(ēł5)īB é$åŠ_&Ćó8( ščæ7IŲóŪ ,Ļś€ö½ķ °š¶ųż&ņŚS3BŖė4įÜĮ³ņį7䵟–5ä€6AŠCķų( ¾åȵł čŁéļ€Į` _·€ņćę;·ŲpĻ0*ł.5 Yūbeļ8*+÷)ÉėÜ/ķ<æŻ"įćGéõ #ß/Õ š6Ī ½Į\Źŗ¬8”Žžßó×’ ę ¤&ń šżń ó ćŻ: ńž’ ßł÷‚&ī ł ģłóżų ;õōžĢųłļńÜ ü(š’öī €ėļ"üž÷śąåōłėžäļó1ż’śöųßśóżšóóšžź  čń Ī åņ ņö’÷Ś$Jņ ÷üżžäåźśö Uū4’õōöń •ÖŌā%?ī( IłŽöķĻ1Mė ĪZŌóƒ=$öŌłŚ Y3 ö÷Ńł·0)}ĢS·ÜūŪ9¾ŗŁŚčÉ 1ėó9õę€.ęļ'°Ūk|üŁ>ī¦ 0¼ ’åŅžģš§ģå=迀ŻēU›=F÷ū’Ļ"ā+ įņ)(?!“3Ņ%ŻĒ3ōÉ?āSŅż< ^Ģ’G÷ ģA@Ėņ čÜo;÷Ł&"ßCćĻøüīäÅ'Ń×äņ0÷€&Įó·č ŽŪ'"ĢŽ Ńóūü 1šņ: ’IŽäŪąś ś"ö«°ōņõ4īDöł"śėóD&ć!ž¼ žē4ēļ%×A) óéšü’ō"Ūļī Śö?ćźÓõöźä% $-ä ūŻ('źöėžń#ę$ųū‰}ńłQ ńßčą ßķū ū ę Ł5ĶĢAšüÜ£ģšŪļćņ.)Pģģ+÷śI; #āéėčķ7źäą55żÕķ÷ļ ļŅĻš ÷ßģ÷Ķ›žšżšų!÷ćōō%ūńķ4õłčōķüēōę Äõ» ÷ž1Ōī÷ģģ;ņīņö%ą’Ńä&ī ė  óżō2šü ē ū.ü'Eb]’0­·Nü”RIN® T€ü$į ‰“*~YāH®ļŽÕÅxÜGØt$Ł} ńšŻ&€tó ī°%O*HŅźĪ‚ųßæ0ū:ź>0U×(ž2#0«Ę6ģcł ņĆ6ĀVõ#ėå×öEčĪĖłŌ¼ĻŚś²®&šń7?W°£ķG¾Ü żĆ’9€B g¹<ķŪźōę@ö MĀ%Ģī?>ź–$śyĖFɐ'HéŲ"PŁ!>‰Ü~°ōäžó ł öłčō õöüłłüūÄüśņęÖļ’ óų÷ōö čī÷ń ńšųéśéśžūöś-Üūģųųūš ö ’ų åüžōčł ō÷ č čśłīžųńåéąūš÷īčšūźūö üżåż ł’ųĮ’öžņö üūłģ’×÷öń¼ō żé ųóņcźÄ?ųÜ Éßżö*źćFééÓå żķ’+ßS½ņłūė ( č1ų+ÕõŁąŌD óßķ.ē,2ļå&ōÖ<ėīÜń1RH$ŌŻ$öĒ łÜ= Ååų.õłśM# Łśąõ’ĄąŻ!Åļ%āģó4CÄń-ŌłĻ ņęńńļėšéšŽõīöĢ!Ź Śß’7ōńšš’äń īDõ-üńš"ć÷ž*÷ Ō ŃŻ  'Óćų?ų’ų’ :³ų.ų»śį­žĢ@Õńóų5 āģļρŠ'’Ń "åä÷åż>éķųķ&śči䜀 Ö­žUćš" żū’¤Ž üłŹ ėBźŚŠųüē/żėīų ōū’ : üüļüE łōāń »÷ žķÉüķ Žß ÷ļ+÷Ż>ōÖ?ŁęŚ’€0 łšļ żĻ÷ī&źŃžśō& AÜ į€ŲžŌćļä.4Ź ō0 iĖóM“­Čįōåżģš ˆ›ļńŖąóé'N ü%żéż(ī€ščK#€  0łBåģó¾CÄŲć-µ÷8'%H63”ą9 $ óīAPč² óć1r öčŹÅ)Ö\ÅīsATłŲ#B–ó -ķĪC"Ļž=Bć£Ö‘¶- ŗ\ńēļ3Ž:ŻĆīųŖ>čł$ ¶ėōŲņļD*Ę/, ~²Į(Ø ŪŽ7²ėģŚuõä12ŪŽ”Żī™õ S'ę€ĪĄŌ08%fĖæ’ÖžÄčā‡ņ… ųÜāßäžÜéź!Čėóēß(:ĶĖąl§ÆõiŻīr5ŅļąēÕ$ŚJA!rŻĪ=Ų*ö€Š:Ū;Ģ~ *łø,å9ĶĻ'öö ÖY 4 )ČĄ%>ń}ņ€łī×?µįßµ^ĒōÉ Ÿ3Ū+ē Õ.žöõķ ś ~ū’š  óõų ż īśéõłųų īüśųšüģåģš ųž$ :īŁü$÷Ēō"ż ī’2ģÖ $Łšõ÷įśęōåšKŪŽ ó.ü üÖ :ü× ż÷+ żžŽõūżõņ4ėāņź ūß<śģń?śÜö÷. $ōńöūš ęŪżś č<ŃüŽ—õūėžńņžóä’•÷ż żīół÷ó(’ķż ?õä÷÷łņłģššķņ  ž ’žšŅĢžŚüGčŁøėūłż žļėļŌĪ ōėš’čęń&’į  ģ÷żģłķ!’ žńō"*ųół’ łCó ŲńöĖų łģš÷åīóžģ’öųł ķēś&ś € žäń üżäåśžß »õ!īēõłīāó Ä/  ū.ųüģōģ÷ūüģūō š:ģéž’÷ī īä%żāŪč łüž ž’īżŽõņįF ųżė’īė 6 ż <ń š/żņėŃöčö’śęö’ē żüųņń  ö š÷L%ūŗäļ’ ś’ ėöķ ųń öčžõęēŽł ī% ī³åöŌÜŽéĖūßō ļžōßÜ÷  źė  $ų ėļ Żē0ū’ óś’ óū÷ę õšõźōńń é Ö (īżņńņĻįHżł× īŲūżśĒ!&ļ ę’ąŲWÉ8öłŻÖģś÷÷[õč?ś'īüń 8ė ¦įč žųķÖėų÷ļīL’ž #ŚļļĘ’öųāņÓæł* Ųõ¹ėD÷ēD÷-’ć!żó-ūóųńī ū ļōł-ųńÕłüūšįüųüĶć÷ńūĪłž j¾*āē÷śšī āé÷ŻßŽĢŌėĻųĒ żŁīõÜ ē ’ūå!ōōüēń޶mģ>łóķīüŁł“ż śąļĻ45'ŌöŌįžżC üõįū6éł ē Ž Ńõóą ’š 6žĮõžųėõćéļöśģķ 0ųč ņŅ H ×󜚆÷ółšü÷0ņ  2łńŽķłłõåś÷žõųłćĖīśüĘü-Óõéwżł÷öä’óųüų’üżóńś’ż÷¶śųŻü÷žź ­ś÷ą ųłžī ī* ÷ēų ź ūųń’ķņū ü"žļōśżóņ÷’ó żų’žõįżņ½ōżõńżõ1ööõåž’ üžüģüżžż žóūõśśõū÷’ šžß öčšū ūūvū ųņńö’ź%ü üżń ÷ņõńēß÷ųóóžöżƒ ńźéū"ž/ó ī’śęōšūõöōIźöśvųļĄ  åü õŚīņ.ō’õģóė  ųśóņĖłų*#ē0żńņõź/ö’ōū õūī ėśž÷ļĻC¾ŅųėóõüķüśķŲ ōżīöŠņżńńó Ģģž ¾ģįüó#õ šģāżå!ćāā ą?ķż>%õĘī Ļõņ õŹ’ļó’ėēž!·% ńķ€5(÷× < ņæō ŃķĢ|ī-ģ!ńŽ÷ ūššŪų#ń—~õ ż ķć"ÕĶžžä9ģ ųßūćųiģŌŃ . ÷¾īéź źņń€ ūž ņū ółųūų!ÆŪ÷żćžų’ $óöąäčųóū ĆōõēŪ żņų7žūų9 °ėń-ņ!ļī  ’ēķų;ā ü#äĶł*ĻłßķóŁ;cōĮźŪ»āį’D)śÓė,ŲśØä’ !ńPžčüķ łöōŅ’ *ńśųķšü1čÉ÷Ł÷ńGsĀŲŌųü Žż< 5lūĀżøēä>÷ų’åA›6›’ ąŚżĶBĶß³)ü÷ē)Ō Ō $Ķ(Żó’ųßßA®żńŌŻ;ŚāLéēĘ-Ūä#Īōi, ¼ģõå ŃęŲŁœeėž÷ bŌū Æõ1(%łéµ½[黜ć'ģšóżģõ.FöKģ Uń¤ģ  @&’0€  #MŻęŃŚńŹŃ$ #Tś[–ŠģD,/ė¤ē ž¬AGŚ'4ėłå ŒŠŅē.+ąųšę ’!ž5 ķęŌśįĪäėįŽóŌŌēź5åźĶń³ åßŲźT7ūė7  2ę & 6&/Š Õį öšåäĒ(įó ōŻÜå ī!ä ćäń 8(č Ų ö j ķū Śś<üä ņņźÓņīčC#čā ł ń žüéģķņžćŽļ &ģüś'Ś%üéóé   %ų.åžģü÷žę½č¾õū’#Mź õ &(äīĢ Śļ ÷ Mńņ? 'źš śÖŁį ÷ üĻł÷ļŗņ掟Fīšõėųśč-ź÷åĢ)š åūēūĪųå.ļżīóį 5öžŁ#óÓō Ī óŅēžīōŽ%÷Ģ ÖNāüöųūīžQWżķ.ī­Fš5ģĄė€Y™~é²Ś×5å8 €hO¹€Āō+¦Lś -/Y]¬äõA2y} {Ī"ˆ H³€Šéī ćęę³§Ą )Ēs~]=źō-ó—$Õ€ĢĪ?€Œž Ļ?~žŁ•!LDšF÷ėŲæ5€Ķ-•-Jš9pž°ŅŲ~ģĶ#¬žéj'6ćŁ×å¬=Ėėįėlģ ģGJĶŲķū!U]°Ēų8–ĶĆ@4Ļ€ģ  ŹųōśóÅ %ūź ģśń ģä ł’žå Ąž’ē™ąņų »ō?äē óųÆō!į!­½ķÜųöą üūå’š%īżńżłūłēÓ: ’÷ļ"Ļ÷ śēöźśö’ ćį’č(żųķ' ģåöćė*Ķłė²ĄłĀŠ)¾ņāŪöüč ē’- ļóįI䣧"•Äæā@ō ›!ŹÜ Ō!āį!$č³ĮŻå½NŌķÖ'ļ<éG-÷b ¾86€Y‡ĖO†¼ÅTņ„ÖLFÅPGĖÄļĢŚ߬@.Y!’ŽŃ1Ō +CćõÜŁDśĖĀAÕÉD#St2}Ėo€?€Ķ3ŲĶ„ō>ߒ5ó-ųÓĮ ĪVćé’ŚS¹ķ2ØéÓ ØN%×$Ī÷łMaź-Å.ĖÖ×Ó.Ńų Ū;čõ’é##. ąÜŪßųōŁōņņ':ūå Łš :€Zķ 5åėž#ę 6,ł õ÷ õśH1ļ÷ńłŽč3ćžāŲēķ’ö 5ņé>Śü īś ėI!šž7Ūõ> Ł Øź ÷łõęéÄŃż’ųīģé+śŻ 5żüē!ž’ÖÓ’žüē ÅŚü󞣟, źń2ūķ Aé-’ļ;öėłńö,!<õ1ńģ" õ &€ļ Õīķüśõ:ā ūē9ų ; ūėś€śĒī7×ķõóńš& ń¶  =$ģņē3ūņ ųļ!ķūśūķéå! óåÓš Łźįōöęų óž’źŚėžÖfūŽ  ņå-Qōė EŚėē+ ßāeTźēśļ 2īhשĪŌ <>ć%Ś,Äßõų«ŁŖ’»½§OŠ+¾Crģē%Ģž8J÷öKLń+ÕEłņ]Åų"½Ö0ŚM@HĄõ)‚ ¼ż1 łįŃö26H5/8’ļž+žÖ1Žnó>;üą×šÉ— ī¦ō*ī»ķ ł\ĄŹ}’čö;ü÷H”č Õāłėź,ån"Ü$Ē*š½ö± *Č#Ż÷ŃąńČÖļ1° ķņō÷ #łļ±ņ! —.’Ģ ’šŠ’#óä):<"ķ÷Pź1ūū ä ņńŽƒüįü/"łī-Ś.' óä śń ųõ'ćš įFõŲ"ņ%øśłłųą[qäŲŅļüDćžå éķäėžšč,čņīćäšó ī7’żėč[śöó÷śā6ēģüężK `6+ŽĒæź ŗ$ĆܖB6õ”) /ńŻÉŃķ„õćņŚźÓŹāķ¾ ’« w'ńļÄł!ī$]/{łB°Ł Ż4)5+ęńŲF+ģŁ ķMš8Ä>¢Ł×“\:Uļ: ÷×@«üÄüēē`ļ'@KõB )įŌ-śEĪ1źŃ'ę@Żųß“¼!žīéųųG× t5ļ+· sē3ÉģŠķ ó¼įźśŠ Õņū#H !ä ųśšbžųŅżęņųėņ E ĒŲ9ū›źĘ#ŠėÓŃéęōö ś ȁžćDŁŻķŪßįļLä"žśęNqõöēō ņėżöéüĄ"łåźeõ Ųżļåķöį’éīē äēż. ü ŌņĄäTpéõéöėśōēųžń ī*ąŠÖüGüēųü éļłÖŅõ€IóźŌ÷äöøóńł—ŲéõNĄśēŁłį‡ē`ŹCĪų’-ō!šÄō'ūCāčәąšĶÕóö÷€3¹ųHCF!śRōŅźĒ÷:ōßė5Īųéé : *üM$ĢīG3 ņ·€Ž¹øVłR)āźQå€łźĖ%õ7„šķÄ?#ąéG:׃ž?ņŠķŽXüžö]ķĖν ÷ņZč®"ėüž÷ņŻß (*Ó ā÷÷ßüü ś!åŚ÷čé)!Õ‰)ėüųĆóÓ ū"’ ķ÷ģųźæĪćåŠŅ ÷žź Ņ’$ėé*Ž Čļ 9ļ¾ƒīóEōžī’0ā× õžćżń Ī"õÕó’,żäģųśžźļš/įöź÷üćż5ķāÖóæė%*÷żśłåĒ) śųč   ż+ż’ ōīšĀų” ŹZšŽÖćČńį&ą7ęōłõā’ėčćčŠķ ģėŲ~ųīļłŁ‘  ś šņåū ė2öüżķņ’#īķż’5÷ė źżźõõå‚īé &ļķõ2  õūż žLåēēŹč ąłGń ŽžKą5–)ž0ūŃüĮ÷åĘÄśž<ö+óūóēH!öŽŻŽ6• Äō$Īō|AĮ§Hļ~„UŁ:*ŗāÓß%×#žč “c3˜į[óŹHöüŪ6)2ģĀļ@$(·‚9ā~# ąÕūĪ÷3čć÷óF»ö×/ó¢ŽöĄ ųO­ó§žC×2ÕąČó_Xļš8’Wż€ŪĪ`ōĶ7ą-īŚčķ*O¶?Eļ#īūŁļN&ć#óŽĪ÷š ßų”õ 3 ī§ū ķ.÷čŚÖüģųŽ- Čóęü$ūé+7 ź&"€é3×É Čńłōū;Ę ¾@Ó·ßņéŠģ äļ4Ö'š’ ķ’ŽīŻĀ÷Ćģ Ńśü ęžÓ÷$'šĶß#÷* )öų!/ķō)!ž $ķ "śęāņžéQ+ $’ź1Kńķżūä  ¹ų½éŌưó7ŁüŠ> p ŁčŚ˜Æ2Äż½ ²J8€@še¾Ķ耔·™ éeźēÖź9€ą˜JŒūßßx}UKP€€ßēH ūӁ1ÕŃ:::I#m8ČĒ€9 ę27@ρń€&/b  €ń€žš’*±/l¢žœ«$AŻūŌŪ\iõ< é`øŲ»83Ö"~ļ€ˆäNå Ćåū€9Ģ /ļ¼ÉmŚĀ¦€żĖų¶éźį€ķģN÷öć4@µŽ6Žčłń ’śżö ėÕšš  čāēļķńāžHß’'#ņśĒßżš¤/öśęóööŲ ·åūŽó%ģūöéōėä Žõłłū ÷Ņ ņ.ü īł!óźūęśÅ  ļIāųüźéŪÜĶņö%)’ė÷éģ óJü ,ųńüŽõݲä% ųų#ēūą ÷śōüņö’žõōžõņśųšėžł®ĶūõöŠ ōņüäõńųäČåäķ Ō ų żųū óō  ķžĒó ģ ś’ žü ļ ūśšņżļóņõ€žśżžżżśé’üū’żūū ī’)õ’ Šųšłüģ žžųłöķžžųüłüžś’ė ÷!óöįī  ųķö’ū ć ńö’żöü ; 1 ņųżé’ėóöė ž źņ’ņsų÷æĻģéüśļŁūÄņ^ŽŠĘüååóų õ4 üüēŲą šżöļ.ščž ś÷ļ čq Łūūóķå¶ öҤłśü$ļż ó“0šųžņ ,ńų8ēÖ×ńļ ÷Ń> õ•uŃ2Ņļ.ØāŲ>B§ö‡" ÕT¢(}ŌĆŁļĻšéwŲ0ó÷ŲĻ$Ł„æč) tÕ\ŠĆż Åą€ūŲ€ŹżIõAä!€ÓäĻ’¼‚Č€č"'ŻńĄ Ąż@ŃRŃ”łsō&ŁłKšĒžä‹¦jž’mK“ŚÜ 3Ī ėöµ½ņ%Āä IåG+–Sųžį-ńźOAüEPé%ēäŻ =ŻHō-K2'E ļŽźZĀńŸH»åćš öł#śöž’łž4ķ ,ī ’ūźåĶõć śź+ųķńžźģż÷ ś#€ą ’ł€łõłōćū  !õū ĪśłäGżī’óś\öłłüž*ņųļłē Ō ųšėė’ߎüéćó$g@óöÕŪÕ¬ -Ś×ä ūźóōźŌńöyõšóöķśķņė3Ģń7śśõSÕ€ō³Ō¹*žņöżAø#ł?žū’ %éŪ3š‰Ó öō° üū/ąßĖ$öŻųś>ōU:}D..KāŲ ŽkćüŻ7ė0P&óŻ ņÖÆĪYÕŚ÷ŪķĻśļ (g žī*g7Wε9 õüįėžģp~DGēבŲ/ öõŁēŸMqÕōUFś*ćüõśóļ ’÷ū’ü<āęśšżŻŠļ’óź'žńóļžł™ŚŌ ļ ēż ęčü†žūćõśź’ē#ĪŪčēēŚ ń笒ū ńń ūžžó õ©žó1ęōžėž ’ōßōž’ņłźīöōźšōĢ ń.Ņōüńč ģöųŁóöüż÷ģ” ąķŽņęįŻųźżēę’ō@Üꯟńņū’ļł=× !’üßÖå Ś÷žū&,ėć ńżÉķņŠüżõł4Łóųßöįš*Źöź Ę &Ē"÷źš#ī üßōōäéŃńķżē÷ Śņ÷ļŁ Ū ·ć*öQ )Õ® żRööŪ žö 7’ķ)īó ž3 ō.Üų šŁŅ÷³Ōż+ė.āĀŚäö%ōī ėöł õżŚõšš ūø’čōüų( śšõ 8" ļč-żąŻ žć÷ō6%®÷ł[ģō ’’óŠū, »Å ķų ļ $ŗõ ķų&ų’)łåŚģõ śžūłłŽ( śóņŻöžÜäł ž*įģöųóū÷ó!ņ & õļ÷ķķ6ךńąžæģü üüüę5Dģ0ģ%źģÅšŻŪõ ó¼,4Ž ś$Ų÷/+żžĻõš³’ ģ=ķX*ćBż?0®@ōį’åż(„ 9!+įŁūąęŖ÷Ų÷š÷Płū¶€Ōęę ß āŲż &Õ÷%ķüŚąŽšÜĮ8ņļķņėī÷ņī ?*žņį( ¶ę!Ć"=ó'žüļ '&žŠįņĀūŲ  ’ļ ņ ēē÷ żó åüōõźä ė’  ūõėź÷ßšōōõöńšü€ō-%ļ 2 ąõó łō üČż ÷õõõ=åūóķ÷ģźķ ī#ćī ōöIģÉųżż šó’ģõü0ł łåžźīü ń÷ī ’ų ÷Łāśšžōü ŲĪšäģē÷aŠļ×éŠR7ŪłX¢Ģ,1ŹY qńC8źņUƒ ēīA ×Ņ&J~ ę.ķæŖą-Ī”–¶HÓÅ&?0H~ ö×ī×RA$ƒ+£¶Īä$č åŌ =2œ1Ŕ Uܵō•)s÷ó'£Ģh=®ąž·’Ķė;Ķ“žę@„A²jĶļ7éĪ7pÓš·dųĒźłq ęĶČ]Ųiłķ; ö†žŅ’()ź÷ßõ!äÜźļüŲīżņ$'óöéšĖ’ Ö õŪ*ģ$óõ’ ߯ Č» )ßÓ ƒä#ß’ĖŌ žöÉ)źåßśņ2łéģūļķ.å8śśīžėļų' ść’ż ē7ö6 źš$ą&ōÜAŲśš-ō×Ī ŗ’'īēšśł ķņA öüā Ņ ž6ń'ÕĻóę$ ōŠųšōüõ/ž«łģźüŪ“ū"ś õ6ļ"ųń÷*öśęēĘå éż ļźńōśäéƒ źfł )įąā5“ųó ņńńų¾ūžā’"ķ,)śūM÷ļžł?żņäžäņ ęł!óķÜź ĻļüōĖōöāžžżśõļęēżųūš&ģß 'śżń*ŚŪ÷_ łżčūüū!ō!ńōöł'ūõ ėńŹ’źęžó"Åšüē ēõå¼ć2 Õ ė  ųč6#å.č čųļūŗ+ļæćņyųŽÓļšĘFüńÖ&åūīųīęļž!ÜžÜģōāŽłõļ’ 1źī 3Øóēņ±½.éōźųśžąŁÜē ņ Öé .ēó Fūį÷Įč śÓ*#% ļ’ģń ÕžōŪėģ āžūś  ļš,ž ó ’ž õöżüżóóŁēąöž ÕäüūöģÜōśś»ū’÷öśģ’  óé"ūŽģ0łū łęž’ž ėõ÷ żüęśōé’īīļ ļóį 1’š%šėBūģ÷öóóęŅśÖöŁļäņō ž_! ć’8żęüżųžĆö õņĆųõF&F+öŻźģļ1&BŲäÉęś8žŠŚńĒśż07Į #č;ܹŽ÷ģŻę6žŲ¤CÉūŽž ĘüݱæĮ3üź9ģū8"ä»×éÖó4ÖīŌźżĮÆ-Įęė×Ā ;d#÷(õį.Ęüśų-3ŲūšĻŲį’)ȱčęüłé5üųń«EžĪĶŲ!ąõŻÕėč&LĪ‚/8ėäl(¶ ½*mź°ģļńé¤4š”=ų&BĆü#4pē³čéuž& ķϼ‚śµéŲ¬KŠÖm’ņK ģēĶ üæ£|ųG0„ ƒR~ŅžÜ€Ųē`mą?:€L¼é~"Kšó æ¶éœ²ć»Z„2 =i7ń)q~ŹļšG°’ : ›ĢĖŌW€5Ł-ÕŌ€<¹W€&Å”üī'Œš{Ój_=¢9Ū}¬ģģ’é óųłāõ  ū ’ėū1ōčņéōYļ-üŠ Q  ņė āśūöSŽ Ū ÷åüėž źłŽó ó'÷ūżö#čłšŁ õ+ų’ųśč÷žōž ķĄżEīūF:ū ńĖņńž×-łēōü žšśóü’šžžžóüńūūü÷ķĆłģäųģ ą ņŁ . ųłōģ÷žŲõū  Ū # ų źńõ öśāūż ÷Hóš ’ŁńšųĮ žżūA@øźģōņ’ś+É€Ž ž Žģ ś4 ūéóü"ūū÷īōōīóžó’ü÷éķśźęņńņ"ū÷!  ü óŻŽ7ļķöÜüē ōń)żŻ +čūóžüń ū?’žšō, ’ė<>x ķäåļóõßĶ’!õ!0©öŅ÷įżżóć&óĶģ’łŁą8ńū óņöńäė<žģ ąšģÄ Óķ žŽć¼ŲĶī7€ß0é¼Ļäżņ_Żõ0ėźž Žų’ž/łų/ēü Śžņ éīžA & ź8åõ.MÕ/źüć'óņ:ž’čņü&Ņś:ī}éóņõ 7žūōõą öć‰õ ן łēÄ’YY>ļūžš4Ļ)+üb6š£6÷ šž€īž ~ÉIĀŁę#Ģ€=J-ä$<M·ź õzś›ąuÖCīś‘żÓ#Ūvģć"рĢ!©łļäÄ. ąß»²öÕ5ź?ŅÅ9®L9®qÅ-ųeų˜ŅņE76Ż€ćOżņ.ālÉü@Ö„ójķ.€\=’@ Õ-öéō€ĪČd›ģóÜļÜŠĪū…u"|ÆÖ¹Ź%śł­ł ~ ›’;*øēŻü'įõō!õ ņĒõž#üõō×Ń*ęōūńĢÖńīųać9čæåXåéī"Sńų_ ŁŠżļ f%ó/ł-"E,ņ“ėÜ1 #ł*" ĻĶķYāĻ-¾³ō ’ś+ ģ#qżś žą* āņ* łė Ä÷żøĒ’łįĶg×õUüēüŚģ'ģłłÉ ÕōŠāįæ1öŚéł>éłņóé čšż$ī’śü łļš š öžõāęšš ų õ&ōźõ÷łå īś÷żśö éė"ńŠė‘šó ųÓ ü ōżä å Ē÷ćęōņ åōśö»žųģīīė õł ķļ!’ö ųņ õžł ņśāł$ń Īųųłķų’üłģņąÓņ’ń°źį<ÕöŽīÜīŁž’4õļ$ Ó į÷Ö8ļ%ėą÷+Ē &’ūłś¾ć)ś%ł  żč$)žĢē8ž÷":Gžź" śŽ öśõŻ ÄŁ¶ēć&(=-ŅEóī š‡V Ä +©, ļ)ŁÜĆ7.żłćś öģšõäŪĒüāąŻŌźżKŻśė8īA ūž~ćī8ńŠżöüSī¾Ņł4°Ē åŲķĖ,(€żŸ ÷ē=Xņ+!"būš  #Ķ)4ŪĄūŖÜYśāē’āųćžįņāįōū*żōāł ļåLćŻćƒŠŠąōüźA±/€’üź/ ą*½'Žó üåōæńś0Ōš+õęĖ’ö ūŻ; Y?ņ¤āņŁčżż/€-ŌąōÄFæ› ÷źōóķZĘž Óüē€ż»+GĶķż 8Ć õżī ń!ļ ńėū"’ū’ ęöÖą ńšĮųžöōō ūäū’žóųóė ¾/üĪó śA.&ōRųöļõüžęź( ļéćųū+ņ āč ķ śäšśńś Dćīņżś¼’ Ōżū­’ÓåĶõāåųķ÷ä÷ņģē ż÷ ž÷ģļżØųż ōłż„ņūņš’ĀŻä+ (  ĒŻäĄ!é’ß)Ųłūüõö#šó)ōņīł ń0­źļ-ŌÖķüēūÕēśķųńš Ōüõü+ æŁ¶ßų„ ių#śüōū­é ūŻśłß÷Ź÷!ä 'łńć *ńē,šśüć¼ļ’ė tņźńł ų%žėōūüąķ.ōŅåõśįĀ~āĆę$©:ćņ#ó ž#)įÅŻįņīōŁ4 żŪ’īżå "N-óėņžččżūīŽä»ü=ßņšÅÄ š!=öēŪźļå;ķ×ā÷9łņóšµų:ĪžšŚڦ4ā*ēņédß2ćł* : üAĶŚüéēßį#äž (Ē måę³ Ęėģ ųöżįķõö)éßåōI öćÖųßZń(Õč* ,&ŃGūż ķłģü ņōł łżŽ’ ęē ’’žöęłõ!ń  šüżųī(ö÷÷žńó ’ öōó”’ąõłļņ°żčü īźņö<ü öį’ćĄ÷õ öōüšś üžęŽ÷’õūüš ’ūņóż  !ńž "ś/ žõų~üčäėłś! " ' šŚļųó ž’šö÷Ļóūżžßūōś ł, éõł’õūŽ ųŠ’õ õņų’śżIš żē żų÷żŽńüłżń§Ūųš°ūņō !ōū ö"łļ½÷ėż - üż÷üü’č üėÕ ÷ž ēėū šģéī’čėōłéżžüūūžūū ’š Ü!ń}"īź"9ąBIÜ"õüÓī8 /õ»\ūŪrÕŁł śĆš×.ü5Īäļš€ęż|ÄҊf)Ü/čåäsņś¼Ņ¹7źö5ēö€źéåŌ¼ęÓµõ]ä&Cßūėżyųżå7õ)Ū`÷ļķ?ó ›čłåéÕū5jėõ(õņ€ī8"#!» ļłLśö¹ē\ŪŖ"Š,õ$2+ž] åćļNćū€äį4ٲ šńķ śśńōūö żļööżūõśżłī÷žńżķ žżåųėéūųōö ėśż  ž’žÜ 4’ę ż ü įūŹėź÷łźčöó(óõżčōū łźóūöĪ÷ó"ōļźó łÖżōöąšį÷żūė ÷ ł÷ļöžū™ äžść’ģü ü/ óėüčšč 7ÖāķųńķģžŠū õüö#ūūóĖOķŚ ü Ūó ģśöŽ“&åćčå2”ż’ēĀłįŪÜīń'żó‚ż&śśķÓ łų±öūśżē%ß#ļėŪłóņ!čļü ’źŌ÷’ļōćńµ ’ąõłż¤ķųŌž(ü’Üé$ż÷žåüöūéņžēĻś`yW;o¾±€¢Ųč"L!‚Ņ䱝š8ŁTĘvŻ ?!§Gäōęš:\°ż å ŽõÅuc”O$×ęY~i'±‘ĘĄKųé71±å6©bfł$^Ķ>ĻæµGū;+)7®ėĪÅķM8ŻOkÕZĖÖł×A @äĪ ūéēÓ <ųƒšDŌrā:ł€ńģ ŠD­äUāå0Ö&ĶČÓs÷|€8&+öd™ŖĄ‚ė ߀ä†NDņĖpKPϤHĄ $ÓÓ ķÓ®Ō°Qn"~ß1 ģŖB rŪč­ŁV¬žbž3ŌŅŁ³ķ-Óē*5ŗģ 7żģ%Żó¬ķµŪ3ō4e<ć$÷õõõĒņ#ńŪŹänķļŖĻ©AŁ0·J„æ EµŪ€  į8žWńH·č&ß Ó€š¶$ÉŚōźöą™śÜ-¾ŁŸ'ł× ßåįH;ʹõ0ÅļĄLų öāžļ ’ģ˜š¦Ņ&ė­ąø:=­ĒéóõļöŲĖŪńņäÅąųģģßžŁ×ążĘ-(숿ķŃ Üļ#Nć č<šēżŠČ>źćķŃSÕ÷'÷jöß#PżūŽ68*µō£īŗ’Ļ!ź/ īį ōßC 鼞ģė FöēÖä’óĘ»2éćfĆģć¼’­#< ž}’iģöšÆū0÷żŁ ŗÓķü$ō%4Ńļą óķĄ3ķDóīßē’ķęōĖ ŠääōśśūłE łź ńķ1=ü½ä2żõ÷ *1Ü įś½ŁžņęŁų""ō ÷ż5ūģ×*诓ō š²N2"œų"4žąīļ&éķ 'Żó ßķ0#ėć ö×ö Õ$ ėēł ōŁżŪ; ž śõ÷÷Ēߨķēėūė1Ł«šė2ł& €ļē ōńōŁ åõ ż īö ė īōćē’é éę’åčīėóüł ēü iģżę’ų ’öžÄļē’Ńś)ųD!éśÓ ķÓĮ'ņļéōōżņłčī™ó  żī*śńų÷ ėłęźKūūUĪć ķ č’Ų-ōüåņ÷÷’č-2żņ žżūā2÷EDŚźųą õŠ ćŌķß!ėKąŠ ģÜcå÷Zõ-żÜóśó÷”ō,PD/ņųōļųšÓżč )3ńŠīŻū ’-†ĒńūĀŁ&ž üĢā<ķ’Ļž¦ ~Ļėż ķ:Ōįą;ø)Üšķćē$6äÕó ń±5÷Ū łĢŲć!÷Ł'*ģć Śß(ķö Ņ’ż Óų<,üŁ!õ* +Ž&Ė„ŗüąōąīōõž—Ā9ŲŪ<("Šå0ģéīŽēęüĪāćŻåīōn°¤ż2ōżę ģŽąēļėģ  _ąŚ¾čĆśöó:(| Ŗ+üõ6-ŲEUīNśįäė¾ Rūč94÷«ģ üü"üöŻ· ō$÷ źš!Õ śĆŌ ūģņ: ļ’źųųūą ā#ū’' śōüēńLVłŚōč(qZēŚķ’čŲ  æÄņßüł÷öö® öāŌāüéčō’ė å1āēąć’Ą’ į ū÷ūźōł įžö śžV’üķ × Öšćž śä ’łžūž$ęņöėļśćüųāõłżųńżč#šš čõųłÕõś ÷ėćļ žŪę;óõę ÷Ķ,ą ėļśż÷ä%Żä łŁč ÷ ²ż€ūéüõżģ ū #é ö ņćéų åüūņ żō ōźūų’ōõåŻčõü’ś6õ ź’śńž #1óåü ņמ ėīóōź(ųžö/ĘM’åųęŅüāć:ųāżęŅ’*¾ Ó § Ź+ļb čžō į’ģŚS¤õ -éłīóü (’ōżģųÜŽŪ’åżį-šńų÷^ęõń Ü ¼Ųłł ßī™’ żü_Jļōść õ’å"Üć ,éżśéóåÜä T!·Bļ!,>¼ų߆÷ Ķ÷ćļśÓōėźž ūåūńčļõ Ż öó’Ėų’ ģ  üīåįžéģōņüóõĘėšųż é÷åśłÜōõ÷ ķŚ÷ćéįńźōųłšō‹īŻųß ł žüė ’Żń  ž÷’3"’ų!’ļļ’żŪ  ’ žžŚšö źżüų üöłĘō; łäõ÷ģł Ģ öśęū÷`ųöūž$ļāäāš1ĆåśØū ģžēž:ųē§ā’’åī÷÷Ö ä8źśīożųį% ł’śź’»"ģę% ā/ŗųÕD(ų’ōķ Ušźęō?śĪż ²/(ż\żü,ćČü÷ļ ½ü’ŗžōĢėßśžŠö’żČf āF  ņ"Só/”·ŠY?}¹_Āžøļź@ [&€.)Å īŃ=ĆĻÕš©€o.ŲcøĖ Æ4j`E€ńŅB6‘’€ īūµ'€'€ƒ+ $µŸ: łX@õ: gėķŹ0łó5Ėõ‘wžŚĮ-&’Ž,<ÖT›Eó ³ę öĖ“ŻLćźĀĘŖv ½ńńķ źĀ¾ “68ė+ ’õŠLŁ® öē“…¾Ö+’ięĶž%é³®ķöų ļżąź7öśKŽß ņčŅü ļŽņłł÷ėŌłĄ’öÓļ jśŽü:łųåļžėŽłäŚCé 4 €ö&żėüņ“Ö ÷ęņ÷ļųĻčöżŽńļ ÷ūō Ųö Łō'į 'ŁŽōņō7ł ÷ū ŅŻ÷5ļ³źõ‰žśū·éI åų ōūŪÕźéåś« ä=ņś#ćżķģ žēšė ÷ūżõļ žõųąō÷$āŚņķņś ļ’+ą <å öęń ü ōń$įöłķčł÷čöųčū5 żü üŁėõ ’ Ձīū÷łż źżõÖżóŹ ū÷ęńłćńāüHšē÷ęöžąøń żņ0č%ä÷öóŻéę ®ö õ%ģēāūĮ źŪóe2š!÷Ü&ŁåžéõÖö Ņē2U.į!éŪ ēÖīõ ŌĒ÷  €ęųļó5Ķ?õ×e Sēćāåyķ  ą– õ?źüó4ī&ėŚ+ļĖŽ,¾žš. ōļü Ģ÷X2'ü Óéöłņė6öžæ"ž#ž é'Õ&ńī’õŌņ÷Ų(ĄFŲ ×÷"öōÜśņ?5 ß "öģģÉ3ķ Ž“Ūč3Ķł8ļ õ"Ķƽā#žFŲó ž@;%Ļ#žäÄĀūæņī'Śó× !6čw'óōäĆäūåŌęŌŲéńŻ.9õAõ-D:ģŽ€WČ}āÖŪž$%éāłśÖõ D­*ÕCŪņ~ś)Ž5ē2Ł>®āļ)ŪÄ?õŪŅ"äķ²śķ5õłÕ6.ōõ*97 õ÷× #ā×ü ,ŲAĀ*⣷’ķś.öĪÓĖ’CČ $JŲŹ8Ų @čĪęŪ%ēkźś~üš“µśų-ź ęåłTó:2öś¬tč×:sśŲ夎ūxšżÜ ź$°+'ū ėgō¦×é;ėóö@JzäģņQŃß/į8Ü%ūÉ6€_ "ś÷šĆIł 4ķ,8¤åÕńłó2MQõå£ZRT½ŽłŃē« ą~ (ĒĻZõš»ź-1¶^++Ō!šM Ø;hLŒ¤Ä €źīK2MŚmźź5OL€åčbŌ7ēż²&Ų -1B’ŚQBAņ’(ŻćŚK~=}>śĪķŌć0ŗÆ ^)į[;āčE1ō”͹°"’Hf3śżŚų DńŖßšøĒ³“Š4©JõāDÅęž ā«ąĶ÷ßų÷šÅężš€44"ŌČÖķūÆō aø÷śįŚ’ģ DŪż #;īĀņ ćæēöõ`÷ŪČŪć5ŽĘŌ4§:P»/Möī\ż  -ˆę Ā-i>5ļäÖŲ"3õÜśćųłüŲ~E€£*āŅū/ō 6ń”BõĆś ģU=źNŁī Ūą”ø źū?Ęøł³ *įłē (ß”N ķŻ ł!Ų5(2 Ū÷ū %üJßłķłåōŪÄÜöōģö"īūõé5ööųč’ļ*īćüžōóń ÷ō’ ÷ęė £ī’ żūė÷ųøźņ üõåć Żüńļų÷ęėž,/ ś ģńśķź%ų„īśéö #č ń¼Õīėė0źüńž įśöčõūśüś öē žüšŻå$ 9ü äčō ł ė ķģ•8’čłČū ļ3!ļŅžõŁŁļķÄ-$ ū(ā+ ÆćÓņ žWāPūćžųł ü ļą½ū*ą Ēéö8žć/ēRłäłĢł"ķ¾ģķė ņ%łśń"źŅ pžżŸōč.!÷ą"üńĆ (Ó¹łńŠķü0źļŽļśš÷ÖóķŌęžä'»ūłżźńįś5õī čč#ķžó»łõēšņ äųåéķ%õó ļńąĖż  žŅėż’Ļ 9Ūļ#÷õą/ōįÉė+ńļ"ŪūŽ!Å óš’!ņü õ֕ō÷üćų śł“Īū¦ūļ"żÆK°ŚDŚģŲÓųö öŌ >ņŗĆ!÷śąįQ’Ž )ł2Ķžō ūłļ>#ŲłÖįąžpī0łżŲżļł& ųķį ą"š ōąūŚģżļčõń ųł; ż+ź’ųżüö!ūū!(ēŁ((ų Ļå 3õßœćžõ¾ļŗńņ#īśŚś%ųžćöŌņ'źé’ł¼5ö0ŅIłōūō*’ ńųŪäßņŚź ģņįūō õēņ÷ŌēųEņóī;ō= ćŪ õäüłģ:ń'éšćžž&’ ķ’ąń%Ņ0šą'ęś _źōķófāŚę żõąņüäŅ" Ęžõ åŹóŃń÷ęļ“':’/óą  ’åT õäų% śņ$ī“åżź łūįĘ"ŌźÕāłóćåļł ņՀīüóļ/ ūż—ö’-éžīóüł!Žžóņ’óśūł%ļģÄż ężčżņüž +żīł Éõ śčōšżéūæŚ ūüėęń%śÕ«żżżµłõųł÷ßöźł÷’˜ ’ņ ż(ēżćžļŻ żģóś7½ļ öćšłė¾÷жäų ōčųŻ2ų€łō ć #ÜŚ€ó åōų  ąņüū¾ ī ņ2 ķżüÅīÜšģļüūóA0!śŠ łó åÕūō"<żąó žĶŠ ķżŽūÓ.Ū}öę)‘Ć+łö&ńļhī'óŽ ×\ÄČż%ļąšĢś’é)0ņóü#śóń# ąēųäõ ĶĶKų Ś’«źÆ Ó Ž’ ń #œ©č÷Ż[)Ėüå Ü&ż2Ž ŪŪ ’śü('ģü"RŁś€žßž5óūĄćń€C&¹ż–%§L rĶ źŻÅ“ _’ä`óü’迌CŅåżšĄ>¬ē-Õ18 -ż*ģį. 'ÄĪĶģšĶM*7/!^õ7ÕūäĘ-žŽ 許 ŃGė%‚ÆB×ĖŲ ų €ž“īū ä» łæäā2Åūž@ŅņłJžļÕ\ą—źźČŌ ī ĢØJ%%žśŚ.ü’€ūDóõU ĢźŁ aŁēÜÓźį‘Ķ*+ģżżqõßĻ Ü?Ę1ÉłŁ ×ŗ ø(ęŪ(ڹ»ü¾ź Ž ļ÷©€ żūŪ( ל09/43@ĶŃżüÅńę'Mó łęężöYķł Ł…öĪųÜŃ üøÕéüäü’÷üßś,üĀųß)"óCį 3 Łģ’*)Ū6šę Q* ¶¹é ęźģå ž-āī.łćŲĖ!õč żēĖ&,ķ ķÉ÷ął ś$)üüė (l ĶĖųŲé›(ń¬1 ^čķļ÷ ¹ž€ üćłšėģūśćļśŌŻ3öńšöļŽū' ģćßį2Śūēž ÷ĢŻü÷žyü(%š7üÉź*Gķśżģōēū õłōÜ żī’'ąü(üõłöōėŁ÷)ēīóü$ų ’4Ś;"-Ć D ’ķ ż& ’ēü*² ļŪ  łółüģöńīłčŃ €^ķ`ńöäÕćłŖåßēųķĀįģópżšņó ćõ׌!(ųų$ĖūŲē7-ų-ōöōėī köūöŻ 9ų'żüü "ł ēśļ šńÕ"ś÷ ņžłņś4üܝŁÕć’ ėūäńé ó ÷ÜüķŽē$4ńö ¤-õ ö ģļńéųŠžöÜ’óšĆģ īššż 7䓳 šģžüļ ņżūš åõń ÄÜūżäķ0ūĻżżå’ćī"ė żµńż’ųń! AįĮ’źÖūė (ł ķÓ įßü%ęę*Ū Óųö’ ŲÓ sń  ŽŪļļóĖ&ū"Ļ2ę|ę’!ąŻ£Üó 8FśŁ ūöź)6ųāŌė ź*ö š ü.[ų÷ų$ąūō ŃļžĀåüŪļįļ9éהĻóō śį©śÖż õ’ õŽYė°ō!!ķ’óžóõ ’ģ ūų’÷żöūĘ "$ō!żŲ(!įóćžś ėóš Óéų ņö*żūžųū õŁģżżņ!ńąśņ1’ņ’ ųßłĖüÕ äņüöրēēś łę šį" Įčłāß5ōö õ ō’õö÷mŽA÷ū ėūżõśš5üśżņčū Š’łčńņß2 å "źīņųžłü*-łäüģžü 6żżįōė#žĶśŃūłöų łųų öżŚģüżžµ  ć÷ŗåęcü śņŁ~ öüŻėĶŻģųĒūśž å,š"Ūū“ėņśóżż’÷éżģś ÷ßśāóģķéśčžī*žśłāŒčö³żžčŚ ŪßöēqŌņ0šĪ2čś Śč¦< €Ķź¹ļ8ńŃåNŪķ±ß»"ō/īč"#€ķõ{0*ŅÜīæņšūżōęē3’ģß ŚüHŹŃ/Üł ķō÷ŗOŌžõPÜä>')õą&ģ ŽÜ÷ö@ķP_Ü`šźć2)—°#ŲŅńŠķ Hö’*żńłé#Uņ #åęåCę Č0×`īÜŹŌ¬ņńü'× Ō ŪłļÜž"óõēÕŠ€£Į4įHÕžüÄ# RõUŠ&Ļäį³!J ūR¤qžŪķśÅęD°ĪŽAó ÷ō29 ŁSņ8å‚śÅƒ¾łą¤Żļēó©0ź~šśĢŪ÷Ų õJū ļ° žź ÄĖŪ÷ģ Õļņ!ųņ +žžŻŲņÖóõļ Ź;Y:ć;½~źõõü(ūŲ’ńį–!įļ"Įåā‘ŠāóĘŻ7ā-õļéņ³įž·į-)óį³ß[ąęģäŃ&#ō’%%:’š óęä%ÓĪ$ā*ŪÓčńė.ōļ’ōš’Ӂä éąĖļ ęčōźĒŁģš ßą óūšÉŲ ł(3!%éņ½4Ė€äÜ.Źü ķō2ā >Žö<$«(ķł5’ Ķ÷)äŁ&÷Ķ'ļļņ×īśųkŲóIüóöõü õāųźļüłżŻżžėź   ņ÷+ śłėüš±čšłšžūņźų äļįäę~ųŹøüī!ß żļģŖč÷ę鮳ўą÷ś ķö ļšü’’ņõ×ä ķź ü ü€ ó"ń,ūśūö×įų óōųųźłhōž 5łęųčļ ńź«ūō åóā ”ģ Óüńī¾ą1šõéą śüūöł ļćųČčģē/÷åņśł>ņė)Ę5÷ ņąźīāųń’EGŠī"ś+ ū !ŽžĖśżśżēäčńūć  Ī ( łŹ ū&ž,ńŁņ+śąķó&6 ųżõź. ū&ōōęŲö ćēāī‡ē5ń”äšłōØü– ģ$€RĪßö­H¶,ņå#2Iöäš³Įņ;łĆį4}č™ š7€†ų¬·e»×+²ć5LM*YüŲ0ĒüĪģŹõ*öŽ!ō+’GÕI¢ĀķŚ #<gć¼ū"ÕēĖ;$ČS"ÖĪó?KÜ÷ĄSłTÜõŌ"'RC6ØŚÉ+äų4Ś łĆ½Ÿ®©¼Ö Hūžż¢óśżę ²€ %ü¾š aöń ßĒ$ųŲ÷ļ įžā śśśó ž’ćŚ ūśęB%ńąż š åüźķ ųöų źėüćĆųłłł !,źķ śéÉųł’ī  üźöō’óö ÷żõ™źóļżź ’Ąūõäņ ņžųōž÷ó’ņķņōļž ī§ōłėžž ß "Wō8+ ŗ‡ŽŚ8 ĆCļ:Cķ€Śč+)é°ŸS' ' /įśd# 7ŁļóņŹ4ŁĢĪšäręą ~æ Ż ŽśģŌ+ )"öuų¶ >Š7ß:öņ*ēHó$/ 6ÄŻļźNŌĀ"ä! DÅ'€õ}倶ēŒĢż&Üś/Ļ×źļĻļ¼Śæń!üŚ ĮwŽ É¬ž )?äóÜó~’yżHĶżÓ W%ō<ĮźRūŌ'ūł ŁüłÄł 2łüńś ńü ēķóüųł ßēįś üļ#ųGßō²ļź’Ü īųó$ŪÓÕśš=śųī -åš’ü ’ė¶ū äżćż’łļ ąėü(śęõ!įī ’ķž’#ūĀž"õ€ųó čż%%<šūžńś ?(õÉ óśņųżī÷;® ńÜł*ś łņąī ęė ū"öęō÷łébó$&ŚĮźĘ ńļžü(ś/Ī āżIż  ķüüÓä!ņš’tĪä=śżöNēįš ī’ēüžł¶Ÿķčõūöõ ÷õżžöż!Ž: 4śÉ ’µž$¢ń&ńļ/õ žö ¼ężėšōų  šķ łßč’’ ćō ¦×ē#õōņģŌęļųl_‚ņč÷ŅųŽą’ 7üēõŁé”ōóā’9Ś6$ķšńż Ėē'Åõó'śīż` =ģE÷ģžęšš+–(ó+=fĪ(EöŠī’’CöČ4Č`ķż ļ śūĆåe17īȑ:¤öęŪń?’ šśžøāžóüūļRś.6čśä;āÉłšŲ%“mėÜśģ޲8õöéÖīŪ’üžėŌėžńļöķ¼żDģŻóéŚ ōēż’ń ÷÷śéü ?ź ż ü õźł łóŁćūźśżęæł īźļeźź¹ų× Ų’ī’ž9żōģ ” żüÖżū3÷Żž$» ž’ ’ ųŲüčļśč ż€æóéźOł’źż)’ū7ü÷ę)łÉī łó =J½ęśå!6ūÕ! ń üäņ ęßöūüõļõė žīŪöųī’ īųżęü6öę õźāņŁłĘžśżāśĘüłFčė÷üęGęśó*čõī ń’ żćō÷’ņ ź ŌŌżķ÷ī(œüń ķĀ'ńŅū( öņÉīóķų žć ź üīÅļųņŁü ’-żłżžöņ ŗįńāńõžłćę’ óņõ ī÷źōœÄ%ļ’ņ÷ųž ÷ļģŲ÷ģź "!ēł(źīEĶöūķō×õē8õ ńś óóśīūöö łķ'ćżéōłųż ō ļžū’•Ž/ ōü Šźąó' "’µ» ēņ÷-.öš [ "üōśē÷¦÷Ū’’ņ ō ūģżśš Jāłś÷,+ąžåłāčÄ×÷ē öżž ć öų śŽįŽ#ā6ž!‹ūč’ģķ ūļ+® ģüäššõšéŚńMĒęāÕ<ū9ūĀ/ = Ćą)&ļĀ÷Ńäžęł’ŽēÕųžž ­ÜOōģņ! +’āų’’ņ Cöųąć-ėūJ"÷!õöķ"ź½öķŚ!Iōķbźįōźź)ēó1ŪæžĆÕ]’’Ō3'°8ł ’'įÓ$"÷Ń äÖŅąģśŠ+ų"öó NéņšļŚćõŪķÕü!’ų2ųĻśō Ńö!Żöē<Ź =ė¹ßūš×* ōUūćå× 4'NäūŪżń¦Üė4żļę9ż&Ó,ļ’;łś:Žń#)”Üü;įŚ,ņéUÜp$śĶæķńä™ūEĢ8"ź%„üž€&ž&Ó= ģ5ļēĆ/8=RĻśJēpóO®Zśéx³ōB€0#YĀ.“¹üŪõö-ŲģāꞣbA_€ų÷¹§42Ńś!éŲ "ź'ņōü&ĪńķÅķōŽ}?A8ĘĄōżPXĆ!ė ŻÖĪ 6äĀ ęóūŠ/,&õėBc` Ę+6ö œÉi!;¶ÖKųķ'* €×'Į!7ł%łśśūžąņ  žł  -Öžžīžõ#Śų’Ī żŲóõõö’7ōž÷ō’ųśčéōūÉüž1Óüö śÜą’ö’’ņėÓłżÕ1 ÷ß(ļż/ē#ķŠĶ÷üQ*ńąšĻōž$ūųģó…õóė#īóóI螯ś (Ž%ö ż&Ś÷Ņ (ōźŻųļēć-ćåŅ$ųß’ÕśūĮ ļ.ļķį÷ņ’-!Ł śģöī'ēėÅ 8, ¾Kś ī ń *Öß) ųųė’:šżžŃģķęņå įó÷Č -ō+å4ģńīēżõšń2ö毞 # ŃĪģż ųżē‚' ź5’ż õ’) % ō ęüųē Ž 7ōēßä÷ō ż’ üüäļ(ļńł’ģżŅßüų öŠłåńå׿č &łōģüūēų ųēü *õōīīæBśšä¹üłįģšęēī+’ķžóü łēźĻīōõžķšłõśę% ’ō€5ęß÷ßō žöšąæ ±ū×üķ€3 ą%4żķ ßGŻō÷! é śüWśžųĻŪ ž  öłśż Żīłīūų üś’ō’žüß÷üųŁöć ėļ"ā¬ū**ūö śÜ ū0ģóö÷ ŪŽ ū õč čėśņż÷*īöNėķś&ōóö ß ž÷ ųėõóč“) ńōł šūģĘü÷ēųšūöõįŚ ū-/÷÷ś RŹļžžē  !ņ÷÷ õ÷ł’ōūüųčÕ:Śūóīēõų5üŽūŠ%öéūū÷ žöxö ł ÄūÅņņßģžńßł 8 :ēüó’ääŽņūģėņ å !’ńŲ üų(ŠÅ)čżżżń!ü ųńńäķūžļ÷(åż ļģš8õšāģśCø“ ~挼Ž%3*W Õ4€Ł} ō €źÕ谂ŚNļ »ķ%Ų R4ŲŅ"Õꁒ '{ķ–|S5 b%ŌB·éčŌ€õ¦6KN½#`…W©Oź€ć€½3x€ €#Ŗłé}Ź€ūŅ$ ŠŻÕŻü×÷5ŁŚBūÜä)’ę/̰’J žĄ²óķ£Cāö½ ņ„]ģ2%‹4ī]õjōHģØśĘH®ī­.ųĆ.UÖZFü€ŁV9Ē£żĻ#/e8ę5 Ü’ ×Ć:& ń\ą'éßܱź%ŲŌåÓ:čæźš ż$õN+,.(Õö(żCXĶĄ’$īōYX÷½ßąĒūŠVōƒZ"Ōž‡„ŗšł ̳3ś®RĻųf Ķē+®6Ś Öż×¶×Cŗ2» ū€ęGÕŚō5›\¹üųŽ3߯$”}ŅęT 8 Gś^ N Rõ%ŃūLŪ’āŃź%Ä*ņßį>É ĻłšJŚöļźķó ż@Å'ó ń=öśõŁ8&ļ łł äįūåź¹ żĪūõ ųõ ū€ óńģŃ éńč’ģĪį,śGžśū “ö,ųņõ !Ö ź×ūłöEą Üćģōż< üź ’ńü Ł-Ųń”žś ėó’ ī“ŽŻņ‚1+3Ńźłčūššł éÖ  ŲĀóĀķōōųō’ć+;å+ņ Ąpķf śėüų,ö#ł>_Ē žé Õ’ !åÜäńķ ¶ū éņ€Xņķå!÷ū ųįźöń’ķłš `śńóżī’Ć8ŗß<ģ÷Śń1 4ĶÉ Ļiāš€ź'łž+ śį8# ūķõäż„Āóą ņūšć÷āļų’óāōՁ2ļ=ė*ńÉ ÷ '4śšōūķ’ī#óķžõōõóČ ņłēūėę.üšõ ąįīåżš ģńū÷éė5"ųś0ņžäą żūŪ ó"üļūĢč ōķ ļłüł(šīóū(! ńö’Éņ ĆöåłÕ ļśõ$ūóśųˆóź Łīłēłä ś łłä÷üņ4ń(%źä2ķ (ėöš’žöć ąłž 7źžśūõż ėžäõ Ŗ źė ļ÷žńŲųūü"’ų ņīņFY’ä ė ķā ž ģ é÷ųł źżūö ņśū éżš"ö ’õöģ: õõÜ OĖ żö€öę .Ņóņ÷žųų &ü'ö Fśóżļ ö4żéą’.  žļłśł ļüöūåå öąāīžüų $ #ōėöżķTāüīŻ*łŹł`ą õ÷łöüåļZ ÷Žé’Ī÷õ  ųšž’Ūņ ū!ģāź’’ļļņEīłūņśõ󞌚&ņ÷ļļ%/ėņ &ū’žß&Ūõ čŚåōü €  ūż üfū$ ÷’óÉķūļēżóēüł/錚žēśųöó ’śšī÷ łūīüöžC"éļŚ’ųōļāīū?ōūł ōż3ņ7žēéńļ +!Čō ģąōū’Ó÷å,ńóūŲōžšī śćļé÷’ńš÷ŁŪķ ģFóņöžōó÷āšģ÷õó’ńÉóś žüšłĻ óćü śģ/źŪžń<ą.Ż/ķē Ą<)ŌŻÕŃ ēFūŪŁ Ō¾Aź üAł*źé!ā^Ó«*ü Ż*·ī;@µ˜¾ģüŁż.,€e² ķE½Ļ Jѱ1ųŌLża" Üü$øæ,äŚ*øĖ¼#U<ņąéĢIĶÜó»/Õ é˜ēķūī<%MõÜŅąŪńŃ9Ė÷ļ0& ÅAŠ!ż.Ģ-(ްäųŲūė Ö $ž÷ż ęųéÓŲ ężÜž ;čõÆżńś č ūŻó (Ō/óī) ćķŻ ķūīöŻžņó’šīę*õÜųżó ūŪķöō ßóšų錎’åßśśłź öó$ź’Ó !ķżōß ’÷āźżł ’ė č÷ģ²žå˜#ū)śļ ’üõł×’÷Ōśž ķ,%$ÖĆö÷’öžŌķėūįō%ėńbō«š÷ī! "$żēŌóūµü  ‚Ąī½ ęž!ź~ ō{čxéż7Ōóåģńæ#Bö ū+)/ņż >5įū×÷ķė#żõžššļ!’)üēĘßč7"ō čÖ+śģ1ķņķėī, × ą  !÷żłßżµÄō˜śč:ė ūŲŃūā1 ōļ!č ÷&ļ ÷  éęśõöŁöšü ,ęöö÷÷īļ "īłüčšżśż ņśŽņī’  žąĶ€śź ÷šģŌŹńž õśóל~ųõē$ń,į -Ūūšüžžüų ķż>ųžüėęīž, õ’õł åćż(éż ÷ü ü ųööņģźöóäę šžūéßå?.’ų żžõ ö÷ķÖ’ ł÷ (õź’ćųæŲś"÷żõļĶö†ż÷šW߀(÷Żļż$ūå“ ąś÷ėł&0 ņ¬öśDž÷Ń ū÷ņéųüŠžō żõ'śķŲżé: Ųł, #ś¹ģśōÉäõśÓüĘółūīöö ę÷ /ćģ ßö ł’ÓŃŌĮł äüęū.’ē"ńŽūīŻ ųåčžäåÓ\ė÷äųł*ßīŚśŠ’āõŻ)=ōVėīéÄÅ W!ųō éć’®D7×Ķś÷ūź»ć-ą·õĖüūžłīåč?ńķ"(ļģŻ÷ąŚÅ Ź’ž óāģč ū+Ż Ł é’ * ü,ūWOéźś+’óų÷×ī īų)śęA€Üäų’ņŲ  ž’ķ čü²öčņ8ų÷’ų÷ ųč’(- Ł!  ļ é ¹)2õ#õīč’ł ÷ģŻ(żē-žłłžęģōųłšū õ÷ąōļäśūsw šŪåGŃÕķķöļ÷ę,Ņśūų÷ńņõ’ųĒšĪś÷ķ Ęõńųųęų  "āüó É’ćų üó6ļōśĮžŌŻÄóżÓÅżē’$5łžbŚó ōsēķüļīéūēē8£ čųĆOü ¹< ÕŹßŲņÓ÷# ų“Ū ķäD’źöüū­Ū#õ½ėHņ÷÷¹Ńnķ óō ×īŪ=ūŲ:õŚ&ځšį÷:0ūū&ŁNLžń5ųĆ ųķ!³ŠįūćŪäńRFćż÷źšūż(ī ’ öóÖż4źō’ēĀļ’ē Ó:ąž ;śø’ł€Ó Ž0źū% ķåźŽ Bźß3’ž ,ńž@,õ'ō öČūŚõĢū ņģ,õą“Ś ö,źńķ’į żųżśöĪ ėųłä ųóÓżüŁŲķMł/ äüåś˜ų( ņł Ž Ó ÷’! ē#bąłńų7šž ō ü śłą«żüéĻüķż śō ó&üŹäčūų×õö®żśł÷ā łēą€÷š÷äč÷ł ’Ōöł-ņõūķžņżÜē ų åółūśõģ ÷ĪęŽöŌśžžõ߯ , 0żüļéēåäółė’’ņ Ž ń÷ż øņłü·ü›$ż{(öƒ*÷* Łż#Ō ’źé šŚóöCĄī$#}ģäׯł÷Pżß8ł. ö !ŅVž6āéōšéęļ Ž& ćųėģČ äżāÅ=łćŲī6ąššĢģo ųŻ9õē숬üž öõ9źš’ąŲõŌźč÷Č ?°ē'ļž÷õłšż (šēüÓģüåÓłćOāķ"!zÉĪūŌéÖŽQģįÉŪįU Ģ÷'čÄģ@!G9Ļ#(9 ī›* ŅśŻjŚÜĆīź Ń“0A šŹųüŚåü5‰č#š$üŪ5Óéµä=4 &;0@ ģāB¤/ śæõ ģøÕ% īį.(īōō.9łŗ×~/.÷< õŪ8 Į Ņ! śłŁb=ęĪ!@ė¤žļJ/v€÷+N’üOŽīųä1ņĶ ķīõłTóvźęöä¹ļō ’ć<>żš2Ü ’ėō˜ēņņ GžĢ ļčģ óśŲi éńļį  ó¬)ņ2óŃÄŹZīī×üŽ’Žaž#ףųžžü żNż åčłźž¼ ģå÷ō’IQå ńö ‹äł łöÕńöśī)Ė6ć’į’Š vüæŻĀśō ģį"ųūž #÷ €śņōżū źö" ś®õ’ś’ žżż īģōżļņ  ńų €ćįūņź÷ģ ę€ ü ńė’’ö( ņęž óō’óöūś%ż ćś ė šōōūēļĘźōģę’ņ Ęžķųūöü  ż ķēöņś’’üōŲć' !õżšóī)󚏿ōŪ#ܶ<įĪŌń[üéĻ$Óż’óŪ!öéFšFT-ś×LŽé ¹öڱć ~üö_*K[Bö3ėœ1 Ŗå« éŪĒUy„ü¶“€÷ź‚ś. ±įŌć,€+äĖĄ(Ģ€Q„ć5Žģ’õ%Ē®¹ģ$Ā^ąėļ€(ųDõßEńłóĄ%ēEõ/€3j2bL’8-õ&Ä ÉōōØ%׳:6CąŽ€Ż&ä<­ā-Ēåć~śšö÷ö ńž Ūöż óžžččęńśžŁżó’ķõųö ūC’żéūļ ń6ė ģé śł’śŌžĢóéōļ’óżń÷żū üļö,žöū÷ģ ī-õō ÷õś$śü÷/ś½żšų łżńž &ņļŻ’ś÷ ų śłöų¶žžčū-ėš’ ō(88éóėģ&€Ķt ­Įüōś,+ķGø}ģĄ*ėūä9óėģŌätÜ "ä&ŠtÄ0 6·Ö$Kūƒķ ī/&óüėćÜū €, &:"’1»ÖÓS¼½Ćć'ˆóōÓw6ōćäšūę€ ļö2ėņ!śż G žńüõüÕįö%ūųżń½÷ūō€ZöõöņżīŪĆēśłļųöæī 6ųććų/óūūłõóę Ó ü ›Õł¦4ö ö(4·2š @ öż ęܟó,ō %šķ&( żłį ėįńõ+’÷ō *’ń Ń÷üļø*÷āóżņåŹ’ń(ū0`&ßü „Ļžø÷ń ęļņóNś Ūū õśųHé -½ ܍ɱÅMž “ōłŅŅ’9>šA$Š8>+qįż€#Ōā4ß|AH—Lüčśł? īļ4ŽĮ<TŻēŻnü`Pęā6ģŲÆ × ųžū× Rń/ÜęC',(ąĄž"Ęģ óĪ3š¤ŖJÓ4CŁń –’€ž”ŽC ęōģŹcśöżż‹CJ/ł(ćüŪį/Łę—(=,Ū8( ÖÖłė?ģß"%ö@å2śł-ō’üą' žśüā’ūŲś × žŁ’õäóļÜęśōčžš/Ņāēäłģ’üŲńļōč ĖōĀ’ėųłüó’õ! ł) čäņö’ J"ķūųļź’ńłīį  õ’ż’ń čžž ś÷÷ņļ#ćĖč’żś’ļ+0öüž ķłżå’\ė ųžļģ“ó÷łā.ÕŹ€¶D:~cȏźŸfŠŻåh“(M€€<ö< 1eć.ō4‹Žųįēßä%~©€‚‚!>$G¶÷€0ä‚/ó.Dį“€Āšüb!Ł~k68ąŠ9N0 čåūM‚®:€c’q€¶ õÖˆČņACqk‚ÄŅi}śūń*Ž©ĮųŖĆw×ģęŖ‹ū°Éó?ų€øI"A#öłx“€Fü²Š‚ąŲ%żĘśū*Bö&ųļ’Ežüēų  õģ’× Ķć’Ż : $$ķ#õ ŹóūŪęßż Ń$ą.ź@-Łć' /ģć6±"÷āĒ#×½*ā/žõó7Čč>ļņīšó,īŲāĘéīŪčśž#ż1?ż å šģ4ą f* Ųųõž1©”ż.ė žé Tīųō7 öūōēÜā õė'6¶ ÄŽłóļ<ī€ą/ ķķāķūłęS ė*öüųļöķ5ģēūōł®4-ńÓūŁÓźżģŻō  ćź ó,ļ÷’öä÷ąū÷ĖŪž8ōöńų-š$õžņ%šäķłć+ņė Ł 1 ę2#ż;Gż&źö.ęēńüśQć½ ĪŠ÷š/üī%÷@ū03źŲžūīļ6šŚ+ ņüįņš’åūķłęĪē å7ļšģųķūä@Jģśłśüēū ųĖßōŽ)ę õšåłéļü%棿č ķūĻöūģīś9$óųāģ äōīū’¹Ž÷ 5ĒŚ Ņį ł ķżģ- ńž#!ńļūéóóźśžōö6ń ÷ūžüļś&āņ ń×E֗(Ųóä’õ*"®.ŁČKó MŪL ąĮ12Ń=R„fģ5üõŠŁÅņēøčéóŃ2Ķ$ ]ēūĒ}M©ń6õ·ä0ö“/ SY䥞ćäž·éÕŠūō  āķā!ćVł¢mĪŌ%żz€Ó{ĻÄf: ĖĪZ#éMÜé7Ą~ńÅŁī8.IÆ×Pö0·śļB3~äļŽÉ 7&ē śHźė8£įE÷‰Åj½k :śČÕŌūå×ūėąØ&čūĘ Ķóų嬺±3"bņ=}¾ņ’ęõŸ«#Ó-CYÖÕ\ĻPņ!–ż^ōMŲVé õ”ąŻń/Ŗ ZWšļKāć’įö€ŗĻ‚(~låuņŁ×ą¶#ń¶FŻ€fŖ×ÉčGģ]jŪ)1ąż£”ō ńź½€#ą"ąƒčäė÷āģPģæ SŁł ńĮļå™ļšĪ&/ü=öīėłĪ: łöššüģ’ļöėžłōļóż÷ÜĪ’óķ.ņ’ęŲäö żųż0ō śéńóģš’ś śūļ0æõ"23åęć'ž łūśł#÷žųüöļ5? łēżś)Ļņõ ü’ģķåśźõž ėū źŻōöōó ķ  Żķ%/łō\ųõ&Žīīżéå²åõ$ ūłčš ōļÜłĒüīäėõīHŻłŻ6:÷*+Ö ąų’ūķ%ź01  ą ~ń õ 1ū÷×6čīłąĻēäßĘū ųCŻńųóķ óäżĒłģ  įÖķŃ S'ķ 3 żāśū6z) =ļ łö'ė\ żŽėōõļńŪś2ÖÕ÷ĶgīķüĻ€ ÷ čö žś’ ż üī³÷Ał·’ Ēėżōōüļēł/š öņóŃ$"ķń2śņŪóūū ńŚž ņīźŹ" ēüßńs’žųģJ źśäčÜžåĶļõ  ū ūųńņöłą)żōśłöōōčžō*ä’üäōõžüÜ ńēłŽ é ķ čüßD ē$"’żõCć+! Ūņō Ž$čłžōłŻ2Š÷ÖŽ%Ū2ūä¾<× ļ ö’ń ’ "K¢ų÷äēķżÜś)ńć5ų)’Óó(ęŲ’ń 1ėÓŽ  łļłüóčųüČVīķą čš&ęõžāĆņņ8’ģłįŚžōč š(Ż  ōł葿Ęņį# żō ņōžčōę ÷å”ņłńųó$Öģīõ’ćń'źņõŁóüģ*ź,ćłłō õ öū÷’ūŃĶ)ä -(’ųüŅŽó&ģĶņ€źö śŃÉļ'÷ ÷ įÜüūüß ņĻū1÷žżüīžüņńÓüž2Öä„ņķė’ õõõėĆ飊 ēń¾įčź’ė‚ĢņśōHēŹƒåįżüü…$ńńłśõćżžĮéšaū ’6ż"ōīöęó•ü õ;× įųö+ēłė’üüļō÷ś÷¶ ąŚéśķ ł é %ųöńķ÷å ’ņ ż+Īė1ō(żī€¾ ōõ?ųŻ ō“ü ģ’ģßć )öõū’ś÷õ żżé÷ēš ķūś [ōķ÷šōśKŲźē0ģ(õ°ßŌÅ ’Ź ‰é€B­ü#åųŸÄą¼öÉēÖ¦-Ķ#•ćąhŲĀWļ!Ėü×ū2õģ(”&6+Ģąņąź3jźSō æžśŽęB7%Ī4ρģļüźæÄ³æų )ÄėęķļŹ1Ż»+ż±B>ßćŅ’ŌXõ°€'āĄżŚŌŖ7ÕŲŪ@güūĻg³ē7ŸÓ6.Kę=čŽåį5€ö̟Ģ%ź„ęK÷C.&ėłŽ  ž’&õ ńī žė ģõüĄč Eöū ģ ļ ’ óņøēųģ1ų &åżįĄ÷żZį śņEč$ń ¼'Ü !%‰ūėšāōńėķńņźüÖō µōä ÷’  Ū øüū~Õć#ŪžÜõ čżżŲŁėšõ3÷ņśźįńļīžŪłü 4ķņŲķ¹ōüķ!¼÷éףšÖÖņā×Ōź ų ł #Żl""čדģżm@)!9 fģģ`Óü’łŗ6Ķ$䙸łĶķų!žłéū€ū4» 0łüMļĢó÷õē"ŲŌ 9ļćŚ8ōéŃż3źŖ ĶCŪķ[(-±ƒÜų÷(ö:.ł/ĢĖ׌°āÜeĻķŹ-Ą&żļņģŁ’$ųōŌ *ąõõ;|% ß}żßŅŪ}Ūūų!"Ż $ć$.÷Hš<ēī<õ óóóķĪėųĪÓ$śųšņ’ē6÷#čē&”$÷ū(Pż÷Śßüž¾ėĘę'uõēŁŹĀā>Ģ’-Ż& ŪŲņņā ēöńßųąüōéężī!hłäła,! ūż õšįŚåšō é ŌÖµNA!Ōüįčłõóųģ Üūö›Į ŁQ’+ņš9-e&ä öī<č!„śö ģ ģĆ3ń0żżĖÕéäĶīöÄńÅ"žęß²2ټåłśāß’ $ļ”( ōä’Õūżżķżū2ōž,å÷ņĢļ’ņ&ōÜ3C“ Ņļ>śé·³)C’ö ē"å&ł%ųõččFÜ' éē}üžŻž ŌéÖZįšóķė-ķųÓŚå× [ńžA×õėöńĖÖĢį̽āąĻ1„2ź÷źš3- Ö=5łģU öļŲX'źŃh ęå)āŅ:2óO$.ĄŲ÷ Ē)++óžõ"³+Ö,!Ļü2āŻōÜśóņ+į.ė0Hź* Ł쬮7'2*ÕÉźįóńüāž\3Įņśś1Ļē óūŽ ŹŪ*Ö äß'Ęž Ć*ÖOURžŌ§Ö%ąžņ/šMųīÜżŁļ ü)ä#ņ U8Ų8ü źūś÷ą üę ļ† ēU ķ×åęļąŽ«× ÷ļłųųŃÜėįŸ%č äżīFą%ź*9ńĀļśļµ  ź÷)ģ$ń÷ ų*BÖē% ą)ņ üūģŹ ęīśåéęūažžŽ$#÷é,.ūīĖ žŲųųéńśŚŁvšź÷é%ąęåÅ%·ćõ&üVź! ?ųĖų ×i€€ōģTā;= ģĪ/€&Cā5€½ąÓ.ō6¹Ž)óż”ÄDaü Ūźb~lŽņž¾ÜÖ#& ĄōĘŻ’'Į A$­Ō( ;ä³J°*āÅēę ż}¼żÓ·Ö}éŻ^ŻżsÆĄńśēćņÄžāńæĆŌė9õ¼čĒżņģ÷ķ…ęķ)śāVMķ"ŃĄēĖż ĄČ Ščó’&8,/é@šéīčĖ-ø~Ō¹‰³Ā’“ē6öäöų%5Cń<:ń.§Ņž’ ļČź ųų¾ń5 µÜ€ÓńŌŻ ŻŃŌćāīpÓžńū9} Żł é\žĀ“Š1’šHĆŚžĻöÖč:šYÆø:ż‹įńĪ;Ņā›9ż44/óų $ž-óšīļ‚’,+ó#1<4īÜõź,ĖÖ 4ź)ņ8įŲųā óĶļāī ķāµžž × Įóų%ōśČļ’žÓŃÓżéŻ&OŲÉ"Ę¬ÕšKé*äõ/ōģŹŹ!ńćźśü īķ»ź ÖNļļéŽ ūžńßųčń ėńō6³r[Žū!/ī_’ųD.%ę ā͹ć}ņÜ$ģĄCŚĪ§’ņ Õ8ß(ž&ݜ ńźū °ö#äŃÓõ ųóäōķ00ąģöŪŖęź-H öA śą$5ō"]ų»ņÕ_šōńńīīEū<ģŻżäčī"É Tō÷āųļמłå.į÷łņä¶"ēōÖé#/ćDūŁźŅ,ųė5óHä6/ä.™é)ķŻżīõż1 =ķåīėõé ī !čõ ł’ ŲėśDä¼HåōÖó"ŻŻ#÷ĪåūÆ ķõ4ń śŽłüf óÓōGŪ ¤ĀņżŌĪ4Öįõ"ŻśŠę5čŌśL;!žżšėM&3-!%łō šŽą6Éēū&ņäåéņ©Žģ*Üćõ æŁ ōżųż ęéß ź5č+ų ÖąÖėķ,Ź^ŹŃģ ).I /å,ų¬Č ’ī žūó'śŽōēśśŁ0ž 4*EŻå˼ "ū ŻęēIGļ%Ņžņė āÓõī æŅ źėöž "ėŚ öõįź' +ßźāō6ė"ūŠ0޽źŚīļ<ł¹ ī é0/Qķžį’¾šĒėśņÓņ$ įēćų’üęśę"īōōŻöļO&ŚÖżł.$$ ųćNņ’ŅĀū!óļü6ź9ūęč« ó5ļž=ßżķļģēĪć öų  šw ŌäĒłüō ŁńŪĘģÓīżļņ#éžņģņ’äźÖĄūū¼łžū++ öŌśģīH÷ä%Mķņ&ńŅń+&! ō"4Dū÷% ŻŻ½¬ * źĖźę žäšĶŠśóįé"źł"åūņęł’õ%Łźōļöūņń7 ž #ųÉ Aśü.ś ‡)źņõŸėōźł=ā&"×   7ł)Ėł ć:C%é’ś#Oüö÷&¾ %ńČ&źč#+ņ čŚWāM ²Ł"ćéŽ'āūäöüFžóšīßóńN=ų-hŅī ½ōšī4ļüōöĶŅÜ:ņō!*ŅūŌėÖ'ōēš2ķ’įÓŠ÷ ų5&D ó ųėžā<ōõłćńaõE äĢņń "śŁŌš ę īž¬÷ü!äņLĶ#ž’śóž6čŁ =ė łJōū’ł.ļ Õ+æżšęē76ŚźĪüÖŪ£ņźÅšś‰źĮżäśĻ #öįś=ņś ŸÜŚčŁĄŗžĪ ļņG ü(üüńłĘö0 öŲóńĀźų2ś ļÕōēų³å»ēž#" ęéśī­ö!$ūŃßćĻłņžō—ŅÄĄ1÷?’ļ÷ ųõŚńP #+÷ī’ vżö÷&Łļ¼śųNĖ3яßę,é ;÷ūÄóĪ ā«ų’ 5 ö}źę<ļÅł žŽąūķ!|(ŽėąžīüIčÖ1Õöģļ÷Ķ ž»źB÷ EÆ “* µć¹2+9ńļ!'öiļŌ"åļū;0’éķīOś’ 'Ś5óįęJęŃ Kó 'į ;ł Ķ›ćóńŲ ņ+’ż„Ą$Cņ,-Äī ŪģżH$ņ3 ļ ī 0.’ śā,š8Eōšž÷ī÷ł&ö56ōüōž #Ć ģē1ėóŁŠéģ,śųčń#Żėž -łõŚĢ (ūż /ōUܓӜīōķ/ł–ė¬"ūģ Ł š"é ņ1ļßżKćI#ōŚģ*Ū(ėēņāŁ–÷# FÜDśŁ’ņęąų!õ ŌĮīĻŚźņ$ō* %+÷0.ż öĆ ļŁļ ¾ėÜąb"OĶĢųöó'żūō>'€ļ żüócĒÄä€UćøżņśO2äH’"ōŽ <ž šåŪ Mõńūß"5ņū’’×҈¤©«Q&äę¦ī}ćżų>ēŽ÷ēēē8åU÷œż'ēļ=śķ¬×1÷%Ļ(äī Q"öżüūśćņūóćó“ö $ģśłõ Šś(ā$ė ģš åŚķūėäš±ö$³?ōŻŪīńš ŻŅÜ.żį ų’÷ż’å&ķüÅé"żėüž Ų)ūļžõóŃ ÷Ż*å/-õõ%ł&ØĀ6óįüäü Ś2$Ūõń Ńöüūćņš Ł8‘ ļņ<ąŃńśßłāŪļįžķņjūÜķ’Ė$ßįęņ)K@ ł5žžå -šÕūŌåŪģńäåīųķĪą÷ęāŃēųõ ’#ą1÷€«ŌķŚßä!Żł’ß÷śēņjžłņŁÜ 'óź) ł® ķ½ūöōžžéé#’QŽčķå! ėķÅī’žšł;ü,ēōčIś,+ ',ĮžÖ÷ä§š²āų Ų ŹńžŌ čŲeŻéłĢ óņ@( ģ¼ ćóüÉI ģŌÉęšįģ¶ž½'ņŗVó÷żOųöC÷åÜśÓ#=iÖ]ģā Ößż÷Y7Łņ°÷ų É%!  źō Ķēżä÷.öéžę(÷B:śĻ'ė|Ģų Śś ą5 w%äMüŚåķ“ĒĻ ®’ßų8½,€!4&Ūß¬ėž Ļ āŲ$ŹWIņ÷'"ųĆ%Łģ÷  ą'6×Ä $ężåģ»ų’Cγ +ńēśøō±ź>!TęŁūōąüęŠūōŚÖčŌź9 Ō  āö3čšķō#Ś CśģžŽĘī!2"ā4Eź÷!2'ķ7äļÓõ!ń(’łŖ"÷ū ŌćģęõčłööÄśė žī3’+śš(+7(Öżģųõ ĢĀ“āčē+6É×~×Ä"7 ńļéųīŻööżh>ńŻųį÷!Žå÷÷®$ōäüŻł)āŃŲčś 7+Äė#ļź#÷é,ąpū7?ń$ܾüŠģ!ÜĪóÅ üļĻü×ÕšŌĒéڹ£ūĀį,"9 šß žM%ķł!ė-$ęČ+Ūęń) Ōķ ż^łæśōśŲ2)źęņ~Õ(’ü%č$ļhģ Ž.ńĪöŲģńį ).<$ė÷ž ¼.’žńµ4€įģÓ +-)įÜīī ÜŁ0šÓ! ęO=ō ffŠżūčśóLŁ ±’ųłérö%2Ųń ÷)¶ģóī-$¼Ś.óųƒó ÷-žģÕ/ńć< ņÕźŠś}Üč=śėšŲBö;ØĶö’Ōāę$€•Ł Ų2ķ ÄMÄö>Tgø6ą› +/ gļ$]Ϙ0ęŠé½"gF<(į&Ń(ŹĻ EŌź č=ņ·¶ķ\ĒÖĘÓą-Ņ/ŁóÖzįžM,·§¶«ÉŚüŅ .B+łßż—BEĚ /Ķ€4,/DŁ MÓpćō , €ėÕ=ķōę ŽöåśÖó’)/;ėō)’ųī9¤HīCńżņ$ń(Ü>ćÄ 3’įĆ}ļüŅDüč ŚÖŚ’ķēśääļ*VŁ1žäŠł1Ż8ĒĆŚķEūüŃõųŲĻģ$ō3Ģ)ė=ų¤MżčźŻ/?ż:ó7#śĘ<ļ×įÕöNĪāåóčĘī6C0(ļŲęŽģšżöć(:ūŠ’.鞊śA ŻŗŅēļš8ÓĆķ÷3Ēšą$ Ķčß Ó  ų±ēž×ūŸ żö Ūźģč€äśė+ 4E*0oÅ7źßčK üéž ×žå*A ä~ÖėįL3żŪćŌ1›€ ;ž &ŗäé Jē€ ; ķJ#Ń  'öģ÷Ćßł/&Ż#ü Ŗ÷É(ļū-Ąńųžõżšæ]ųčõ ęÅłø!ŃģĮ@«ą@",3āųÕ¦÷ æīÓßŲųėü’bņ ×ń]ł-&Ōīöų3Z³"ĄDóŁĻ6"ļ?'óńóī«ģ üļ ’ ūöŁ śoŗśõ ×$ 9Ļõśūģāē ŲņŠS4(Ö7ųīēłĢÕģ9+ŪļźÄ’ Ł_F&āŚų$öXĪå +ū7ōėż.=ųŹļōöėģŪ’.E¼&ōūÉ’ŚįčÓśņ’+žśļūöõäÜęüķńżž"/5ņ žóåĖ  ēäö óė*ĘņUī­Ü!*õ’ŽäFĢŻäūŁ’-N&ŽnėóĄ?éŽöģ¹ĻG+‹sfGļ=Dõß(ŲĢüÖāļ€ąGcō'Ų> źHö#įf lš+ĖĢXę5p ž[š0åōL-ö ųĖō*ÜF»Żõž&ćóTŠCž+’ļųŃśū!Õžšó÷ķ'PBōžķŻū|ļiŽÉ(ū÷I0ł®ļā\ü^O)Ó 0™5óńä ķÅē ś ę€ķå[ūóü ' 16(J+£üäüīė!łčžē<ōā%Ć/ČįZŅ3•=¼Óęč9Ö“77¹ī8é5÷ōäö’Gå#÷Õž&Żž üėģöŻöīī3ķó-łĪęĢ÷Ųėó=!4ÓÜ&üå Äö äĻų Š*ķźęÉä+ćžčįŲ*ģĖ<×$ ’÷ %É×3ņ ćö¬īšņńÄÆÖ " ĄčÜļŁł$ūŹšŚų0ėI Jå"ų ļ# ÷āśģ#śż õęį(ćāś.öōūÖłżżÜļłN9ŗüš#öŻäžążéī1ńõ ÷å žņ š ō03 Ńč7F *)ŚÖŻ>·üń:, IÓ’Ķ Ź :ū$%Üöķłüųż &ė ?Śń ן0óė ž" ģٟ ś÷?żžī Ö%.#ć2āņ·ņ]Õ’õä Ū7łÖ½,Š &ŌŽö+ŠŹ)Õ÷ą .xśäź/Ž čä 'ęķž€!%%tńÜśź&1ł4ņś’ 1öTŲŅģŻÖŪ÷Ó÷éGįT ’ń¢ ")éŚ#Üa >ģēXó3ßżŁĄęó1žļ ©8'ŁŅĖć ±5Ūłūł.č73ōŚč’ėé ōäJÉl"Į§9éžŃń ė.,jįłŪ³8łK!!ōé$é āįļ2'÷åŃŃĻ.³ųķÕÖGĀ1ļüĘÆQKķ}é čõ N#Ņ ü%įŠÜ5½żEÕĻčŗE%#E:äŅå!“£ Ļ*Mō ±ū@Łł/6ł—āöč.ń e ;&ēR"’ÖŠÜö!äńąēį- ł0żŹC"(ė* &ōōå_$,­÷å 2ż½K·½]Bż ÄāģŻ½/öįß3!į’é 0źéęŻ ēųĶöą€żżę(ļśų3ÜžŚõ łŪīV šūžėģśūVå’ķaō’įļņåāłßŅź7ńżś Ļ ž łé׿Č½ąż»łń ęōććęü!’ž! īēĄīį ģōóšĪżūŻ꟎źķõžżĖū ūīņ ģļ÷Ļż÷ś .¼Ü 1 ų ’õšžöšģž üč ąķ üū ę÷°ą§ńÓ öžįšźżōģöDīńļōčÆčż %õŁüõIĖūūó5× Īņ ķ 1÷ž(ü¼āóļé÷üśķ ’Næ 4ūõīŲēżō÷/öķ(Ńų łŌšųŻžė āßč)Ūģōūö ×  üšKĒŻĪō ų3żÖÓ ōPćėń8īśóńģ“Ūżó÷čģņ,Ēįū @čEēŻōŲŖąößÖųõ82ā`ėčāÜėĘļo’ ūńĮö ę! H śōöŚęę $ źłó'ßćżš 5õ©¢(óžöåö%ļ  óė’Ö"ņ.ō±„ć ž&Äöł7'ģ’ß(Ęł¬į Ūņ-’2)śÅĪ4ōŌ-!ÉLŠ÷­½@ų÷ųī/ä-ņ!ęņąöéŌ;-ę€ęē(*śē4Ōü ąébūöŚ ÷.(Ń’Ż2JĢ ˆžśÅś×-×Å \żßśé'’.O.ńó ŽŪē÷ŽžöčćŚ 0Ūžņ’ź ×ÕłĖ^”ōÜåęšóēŲÓ->ŁóÕū łÜńīå'ń ļč:ė ½Ļ»öķUś §Ü·öēå}×ėė-īšō Ōō® ! ÷ś ąN#Ó,śūę’ö,÷$Żōę5 ń ¾V’ųåŲ&ó÷āÕöé ÷āé-ęŗéēÄō-ū!éņ,ĹŽ ÷ßśņ3ņüŲל7÷D& ÷C  &é¶ ń M &@Łńö/ óäó  ųŽ/ż·üņÅö üŚ éąĖ(Ó7źģžĒž7-÷üŃņś^ö ßöččŹņܹ écęõā½’ų)źÕ#*ļźö÷#*Ųü-ŃęQķß #” ģŪķżźĖXūõ_ūóė+ł' IüŲ$žų>šüUÜ*ą%Čß Ķņ×"ņŠ Xńśž$éīžžęęöłŁŹē2<ķ»š²DŠĻ *ķ;į ā×źŠ 5ÄÕSŲé+æ&+ęę5č­¹ģū•=-c4O ö8 óž6LōłäįĶ  -O’Šę(?Yąŗ°ö*ó6åi§()OÜ-ńś/żČļ!ü ņV[éĘźüøķŻŁ ķļÉ,ÜGū­Bå#Ž€aóöąŅāęš"H ŅQ& ™ ÖhåjÉåFõš[±Łßļ%ķķėįū’žIłöļŚż"ģäėšė0 ~/ģåÜ<üÖ×ģ  ’Ķćö öü’ł#ųė2T*éņĒćņžłųī ¼ź÷į!ü1üīó ÷ų Īō Üķ!ēQ&ŠėŌį÷żś×ńņˆ"ÖšŚ śé,ķ ē$ńćéū.žš.&.ķźģ½ńŲåŹ öi ’Žļ*1\!,ųŃÆėķ0ģŲŌęöjĢĢ!Ś žHĖH<Ü öÖā”š• >’ųéŁf# ńė␐ 'Ņ ē-%ę ēąß½†ƒv0źćŲ ü;ėśćŁßēčåžæ.üĖŽ šś³üōŌź½į3õ¼Zł0żų}ę śź“ćę}CKTé Ū9Üéąų ņ ąŚ)žß)ńķš Ą!ŃēķR źéņ¼9’é(xļ)=}śČÄ·øł&ąßüüįõ ĪßąĖćśŃżīöųŅēö’ųģPō—ŲŠĻ"źé–÷%ūFżõīü€Üņ²ć/Å |ō ŲQõÖōßśžįū* É’ķ’K " ßāų ĢTĶ3ź÷.šņ궀ŪĘ!™"žAäģüńFū GņėŅąŃźķ ķäį’ŃŠūüąåö7ė1ā ź«Ī ~2 UüĻĖłļ ī(ō õ$2ü%ńę P óó-čöŲüĀį"n,č02ēė»ž š€ō"ÜA÷ ąūšÜ!²$- - ģßž  żöżÖļģėņņ×äéėģ›ų?īńó蔰čīQļ(Ä,Žųšļū Ģ ņż(õį,Gö 2žūüīåĆ nņü÷śüņšė ł’ū? Żń’čåHņū ,śŻ’^"ų¼„™( §Åć [H($V\$9לŃ逾· ÜĘĢŚŠ Öę’źKņg%a'-ķźżüŠø1)€ų /D¢Ā"¼Üꛄģ2€$ÄÅ&' äBżŌśĻń2铎ēģķĮĀŪō& Ų"Ńļ€R ŚüŌéīJ耯®IłŁöAĮžFĆ2īÓ#ų>öÕēåŪžēÄ ĆŗG Ž}@żŻ> 0č\üł ž&"Ü÷'Ōü ēčÉåįõżŹļšåė?’ņĮ4ĄżÕVä,Łģūčšżć!ÖøŠłūŌNüęļ#ōč9šö$>·Ühś%Óžż EéAŁźłųÖ×óżŻņź éŌD#īģķĘčÄéųžžĮ’ļÕżÓķ ūūćų/ž ńåźźćšźŚųņ÷+Cõź%$ķśśž ę ō$˜ąōŁ&-Eųćē’?óŌö$ų+ęā?ū#FōŁÅ©ā[ ó,äņ^ū„üėī$čį+ü;XōüÜÄż,(C(2żĖ/<śĻ9•%ųó!śõŹģ ¦éÄßāŌ ńī42õŚ<(čņ#įųūŗśüŹ)ĮŌŲ ūńBīšÖõ!ūŹ+ōėÄóį! źUA1Ō ®Š±Ūō}óĘĢńąā¤Īķ ī"ż;ÖŽ#é>?üžųŪū¬WīFŪó±ó)§ņźż™6åĪ&+ŻÄ÷1%%ÖĪŠ:’ū"(·ńé &Žé,Fēü3Żź ¾ŻīF#E%Ņöøī½źøōūÆś 3Üą@#Ö$,%ż*ļę'JJ$Ó)ĢĖĘ#œĪ2ūŌ ÷7 ąā+ųLč¹6Ųī4čŌßüąŁŖ ēā#šŻę÷Å~Żōä  ×ļ]DĘ3€*æ ÓśįõĻł<’)įō30+žšė*ōęM"ū4ģčł÷šå[*’ö€š) ŅėA × īąāå*Łõžü)HÖõ+’ū)ź‘ź.ė&ŁCI&$½ō 3śē8ŲŻņż %;$žšä Öņćįõł~öś,KÖł’öĄūņåųķ ķą$ļžż}Ō ėaCõŲņŠĢ! ĪźQ÷õ!2Bń ńĀ*ļŚøļŅõĶęć«å‹Üį &-ų Ćšę ēóĪcņ0ąüīšų ćö·/°€ĢĖ!ĆႱ9 ź&Óš4ŠBĻģū×9źįöž0łG’żąóīżōžū% öĶ} żŁņõŻŲł ž“ł64΁ščĘKų §łj? ņó/ ,üź)Ł0ŌÉŻ Ųė ČŻŹ,;śīū’&)ų ķT!9į’čģ }ŗéĖ?+ö#Ģž’)I> ńŗć=6 % ×üņ%’ßńõ€ü Ū,õąčó@ē%Ošßļß¹āųį` õ)öćõµTŠā0 ųšCõō2ŲõžįĖ(łžõ łĮė õÉū»86ŻŚŁąÆśŽ’Æ3ūųä)¶MüAŚĪāŠū ×*čõķōķÜ&č¶1@8łąń¼ēģ ņÄė’6öģš :;÷*,ēäł$ļĻ ķŚB ūĻÕ ŚžīņļŲ ėüąėśį (-ö’ä ö’ńŠŠŽęN ųüźļ÷Ģ’ž£żD(E..óŹ$å"ż !ļ1Śäż ēŪ Ō×÷ēśöŠż*ü 0Īāõ ūßŃ3ķ;Š«ķłŃŠś ļÄ:ō$ś÷üVų Ń÷óRž’ĢöźDņöåų'Žę  ą÷ū(ž÷Śņ1ŠüńۃÜģēŃēG-źTĒłęōÖūĆĶAä4ćķóöx %Ł×īó’ģūtė+éóĢßķūõ×ßćēā ęč2Üū.śäd®šĖóEļĪ<±č Ģ."õćóśżō!Ē.ńģM Ü’ąĀŽżņź0Hō-,Łūkģ3°‹€¬F)æ0F €±Õė(õL ł/ęŅĒĮµōŌü#ļŠB ću\’0X ķ1Ķń –LģććĢ>ė}L§XŁå§ėįāóįÖĆą@w’üįµżÓ&%8±ŁśLżčG’<µµąk¾żęš(ņ+–ŁŹ Ųć¶ÜŠa7 ż÷ž ’›ė²£üĄē€Ó6ś€ĘČ&8 " öä 1šżęķęōūųņń'ž HUžüÉĀ(ÓņéčńDü Āöž Ͳóņöę’2ńŁ! ńń š«Źėõ÷ł,*ēż.ü ż÷żźļąD9ū½÷ć ų'śģūŅéłųßå 9ž ž ń ųķqēšĪļé’żżėö źÆō ż ł’öt%Įē#żŪéÜķüż÷ńš! źĻöļūīóķżįųüįĄšž łö łś’ū ōžöśÕļųŁķųā ėbžóą’:ķśüśńü żõēŃģōś !ßå±KęīßļŁ ž’Ģņģļ ü ūõķüõ’ (ūņņńīīóó&śķ’üšõł üüśóēļ'ąāÕ šųōńį>ŽęļīļõiŁü3 ’™ų54į§ņįćė˜ź ’ ;ŌÅ ¢ń"ß©®)łņÄoŲ'·äśśęū `Ošbō źąŪńNģ( ūųüT+ć1”ęöėąéöÕķųŚē+ '9ó/ŲācóĪóķZļŚÕ÷l ć÷ųćÖęčäéŚ×ē m÷ąMńZš† Īč õ€-÷ź’ļČØņĘ“ż(ĮüīäóŒż!Éōįüćžę×!Ķ Óą/Hāć·łå›'ō*ņAžŲš½ų$ÓŲĖō‚! -»ōŹāšļóÉŃóĖ/«ö&łłĢćäÄńõ(Sõåķīüāł Nöx|ž2Ł-,ś "’·é7ä1š“ņÅ$ś6üųæśķšėüēä#ņØśĪ³!ėL/čŲü;Ÿüżļ8ŅŚ2żžŚTżę Öžā419ī2’æīĶ! Ų!ķ%.2ŻÕŹBčåõņ]Šć#"Ūóįéž<ųŲ ņō½īO$ :Ō4 -!š: ńĮ›±ĆZdHŅMķ»ė4ä.6 ē13 ņ&JčÓžōŁk ėüųä1ņ.śö.ą%üöüŚāõ Äó ®3ŠŻ æ%ī×ń½ŅįÄ"<ŪåēŚœ1öÉ«="ęüŁ üė79'ķÖźĒÓōŚ*ķłüDķ×ŪŁć¹Ųū“S śé ‚#  īV.ėšėāķńĮõ Ļāäģąšć¶'$õņ "žśĘ +żR"å)śŅ"Ņ ųQŁ$Źģś ¾:ī'(śĆĢäłWößĮØģ€’ŃāÉć󜞏į#äżGĘń åõ É_ōąįŁ"Pnž·.Łģ żoHįFīś’//ńōö(?žķōĶöżōŹü—ļļģó>)čśö5śś ÷¾īÆöųÆõ€słņŚ) ņņńbö×Ē Õ%Öīļ5GõŁųśōš÷'ŪŹ=čéó žšŚ’Ā7į Äāżģćš Šńõ1ĄŪ ®īķÅÕž±÷’ Õś’9įł÷ż*FŌō*Ų÷ł āÖžś %/" ö F /ŁŪłõ"ė ßä'’ĘčąÄ¶üŽųņ5ö$÷ł Ņź~įŗÓ2­(ē#jBūZäīŽń%Ҿā€ķTź$€O ņAćƒäĪa!D?īÜyJ +Ų¾¹Ź!æń”čÅūō5^ōŹ$čēČż7}üź¶¼ö$Į~3Oēżīüڱņēå Qé ł+.ųŃÉ® éxžŸ1’ö? ę2ųķ)ēÖeē'ķ]Ēó#öō÷%åčõC ,,ż&āŁųżŻÉŌ#¼ēģƒ»éõż ööź0ōļü÷&ģģīŚ ,ÓĪžōĮ³ē Ģė"EŌā÷ąüüöłœ0ą0ž  ėŲ ¶Ź÷ 6ä+öŃśīĻē/EüŅųÓęIąžųģ¶ćĢ1E!šū>,)ÜßĪ žäõŽ%/ėēŽóóF2ķ üß* ų(<ę0’ÕÓ%ū§*å ’ŁģŹ "šē Fē )°Ū ś#ł łÖéū%U’īœ ņśśōĖŅć×üŗżųę" ’å%/ūõĖ'ō2& ŚöżĢ÷ķóó!Š$ šįżčü ŲóF ōż0 ß’€—ęŚųŲõŻ3 ’ģżīė!3!š’Ėź!2īųā3 ńŽņó$%ö’ćåš2"äž>ę¶)U;÷É’ī ąüķ*ņöō 1 Ģöö Öbž±÷čņÜēĻąÖŃŠ  ōŃó’…+ųŻ Ł2ü€!ūļņļāąæžń ÷ŲńŲ×ūÖ( åÖAāöūō÷’óŻ’ēōÖł÷ó'ģŻß ÕšśEąÕņāęõŚūi!łėįż š¤óķÓźųłVž@óźęŁėšŹöŚĻüźŪŌŠ 9ŽCå źō Ė—ēļš“Ūł×÷ĀĒ,µģć ĘŅ’,åüš ä* Ū~ēąåōÄæäöÅĄÖZ!ˆŁčžVóś3yĮĪ' ļēÜ @לå2į*ŚŃ-*R ?ö€#A ŚAcöĄĖgå4ż34ü&ß"ōŅłŽ)"$śżkæ0eMiŲSõ)é×®źŁįŪSõŌW8¼"D% ’śÉn#Š%Ų— S+ŚC4Ļõåųō ­–óīį,Żąłų'õėÉG÷öč3 ’ö”&(2ó śę”ŁŽŪÖü!,MFļ½ü­Į+ «#ēBē3߁ óüė%éčźóŻöęžļ@ś ćģōōņ ¼ł7É Ś äžżšÜŁą!’ė+ÄŲ%üä 濯ėė ;J'Ņ÷;ŸJź ąžćł²{äM鞊ż“óźģ0B"ļżšŖ8Bpų!ųA!$łłYŃėņī’ą?żų’#ų&+ōū’Q ū’żśäŌõģĄźČēü é÷ń’(Üģ€ü’õ Ģ$gŁ|óōĶ$ čł1ėA$ėń Ō Kļ/-ą×Īę;ÜóēŚłųÅ éÖžō5ś åĢ~(2L' åÅčźūäžō ķš+äēŅ÷÷Ė’ Įéō’ķŻ Ū’Ā’ Y'źh8ż ń  #üįū’ śņū ŪüżõņžūŁ%ēķšą÷üņćżžņõū č ź$ŅģŹēū Ś üčX ł#÷żī*1ēś ųś ēż łźŃ  ūģś»óó ōū ģõ łļĢčźśF÷üīżņ1 õżńąõ3ł! ŻęĘ >óé'ņ ā’öÄĘī'ž+llĘųÜ,ŃųŲŽ÷ Žd čĻvģäŽćēÜĢļŠģšÖ€’ŽĪōčóŲÓŁ,½õ×Å÷ŠĻ×W łēāżķåü®G’&3łģ źų ēĻüž:ķŰÉ#Õé-ł8ć.#ßžķö Ųõńéņłń¬ üŲ šåU¾õ2š)꫞ ą ŌŻOū ęąüåūčöłė 8»,#ė5ę!C ŲõšłŁķł,ńµżńa$óń÷č&ŽŲÜąøö8$üłł ,źĖ(7ƒ#ēnß+/ÓÜćņV'ą š: Ņņü³śĶ“Yģ5ķÖ# śŲäīč’śüŃūķÓ)°'6÷čóöó õčćėÖ Ģē’ł€ Ļ~īóć$+43ö@ķęąÜģä$÷ē ?Ū9õ$ :’ņŁDJ"ć*Ć>Oł ā?õv"1 ć÷šžSĖć cķ#łŽé-åKŠįL-*čå€Ī ĶQ0ĆčēŽų. ÓĶų÷÷źźó ż _ōåńųA -ģ*ĘŃõāēÖøĻ śķÕõ&ā׿.Ėå-ÖµķKŠłų ļéńÖ/ :Yƍö~óō÷ä -āĢ)2Ÿeõ2Ķīč’Ō*µūå(!+åP#ń%÷<åē ŻĪŹ 3ūńŗõŌ÷õĀĖŁ0 įõó#ä ĻĻ-֚%ų·öņš)ų:-E0śŲ3ūöĻū O؁ķ÷čņÉń_ļüĀėõ*Ņųó ÉŪŹę!€€ōĄśß ó=źĮśÉčÓņ õėŠŠÜõ)ü õņ½×ĪŌĖā+  øÄĘ/ūēśŠ6ū Ꚏ’ōéóń īążėŻžļĶŁĶóķłų óÓźÓńŃŪ $õż żeļż üś’žÆ0ö%ņ’ ķ÷ņģōKß÷ą÷ŚŲ/ź@÷ńž÷)Žā ńćÉ ļė’ Ų ' ż Čēź ę ŁūūŽóžžņńźńų" óżõ÷ąöõō ŪŻćēüü.+īéüŗ/ ’’žI @Łö¢ūśÆķ ķ±!)ęīąź’ µķ/ō+µīę,śņĀ?įČ6õÉō$Č6āoåÖN®æō;ėŲ(żēł Ž%č!Ⱦęóźā$„Ņ ž%’$ŚŃö0šÕŅĪ!ļ7ß ’()Ä(łŌ&U7 ŹōąāŚłR" cm.€ĄTĢ,æńģūöōįĻ’ øżžœē$Żņóūöķ6T@Ż" ķ(0ąÅŗļąūūĪAŻæ ’óō÷ą ē+ŪõóĀ\šĄüĀ*öåÄņ&ÖęäĒķķMįšžįżÉ²łńCšžžźļķ0:üńźėßLō;ź ó N$ķóEH)ų Ö¼ćó- ĒŁŃģą(Uåķ’Q ŽĖ łķé źåüŻļČ(é+LōåÖ š&!$FņąŁ€$5öóüÜÄ20Ņ åęĢšŹĖŲų(Qų5ąŚ*€ŃūōźHłõčń ‹0 hīĒ9 ŃõļŹd{pōž’ś¹ÓnJÅźšUEn¾Ķ‡ų»&ū ’õß Ÿ.­$ąė _ 8āļņ&ķ×,*,ķ  »üČ×’>ęķKīÜ éd–'*Ż’pŠ€ÖķŅ ķ ÉĒŽū:šĀŌDųĀĆż >¶ņ3ŚŸ@ ś8;ĮźŽŁü ģņöśģŪłīÄīóœü³śł ×ńś“Ü6śųßņ ņĢų ąņõ ā ļ䓎šŚųö ī%ļśĢ$ŲIČńŚ:÷ś!Ż9ś*0 ņł½÷BšŽńļź"čöäAĻūģ’?õēÄ ö ēū湊 õōņŃóŽĘ"żSńžüōéN~ $÷ō' ŠģšõLėÓĢ÷HŹ ļņ(ź8’ūēßĪ3÷żü&æņ÷Łļć?śõĒų Ļųē)'¢+ōHłæä’ŠęņōńÕżīģēųŻõ÷łōČŽBåŗhō-ē ÷ ¹ļ"÷ó0żüäĢē ’āā Ē öó5%Ū|8ŚŪĪ Ńń#2é+żĪōŪ²‚Ēš&ńé ŻŪ¾łš£ĻęÜ īüåŌŽ%é ?ē=ōbŃ5čģ/õ+ädļÉ¢%ĘÖ¤āĮż6G¾£óĢÕżˆśŌēS æ·V[&źĒö±%ŅĢé łŻ÷Ü d&ÅMÆŃĀöß Łéčć÷Ž€AłĶŌē߀ąņž 'ōĖÖ?£ęōŁéJu ×’ńvüō÷›īģ/ŗļ’߈?EłśDĮ“ƎżĢĻ:æ„ĀsÜ,ü4€ęQŻ“ ņĶŅhį»ōż’3łÓėĪ ļ÷õńłóšD$łBū’5ēõÓāóļ鎶äü÷ €ĖŚļĘ1åā'öŲöų&÷ūų™€·ęE­ę½łō7Š/ėóßFńōGĶõ’Ü85üüCŌę ś7 ³š.#?źęžńm?(żģžüī š5Ńū ž öšīõ śķ ķą­0.óÆÓŪ~ņ;óō > žēņ#üņŻ"E 3 , ,ķģćģóōÜÖź īžßÄó2 ößš>µ @żöź®üīä7 ›ż…įųśÄ %ęFžVÜßų ×2-4"Ķ ½āģņń ŚöžĄøžŪŁÖ×’ ö’ö%ś÷ ’-Śņńż×éäŹ"÷=ņÖ-Ņ\ ’ß5Śų™÷ćźćīśüåąŠäüōö-¾ūßų)ś€€šūöņ#ūč%üžżłć × äü9 ÷āŌÖŃAōł’ÜżóŚŚśÖāō ś Ó žnļė*’ę÷ ś üŚ'ķõ#žė/B! õ—$$ö)šėźåŽ DčŃāęž ėłł ļö ńó3åķžŚ(żēōŁ/'ŠĢś÷ż"ųöū+ńķ– ßž42éāöÜ0gå÷śX wę’&ÜDčš 8ņęš,łŅųžēš żŅéżĪņė łū+ é#ūļ'ē׬ž õś ā"ė#u %ńöÄū ÷ėüūöņ śģäķļł6挣ūśę ļėč æ1¢öŪ *(ų!éżö÷#¤ńū' gł Žķż ųõė’āŲōķķśü śŻŻü ńčń+ā+š&. ķšļņąōżŅJ#š÷*ēŗ÷ŻC H¾ß×± ×óŲŌ Ųą4ā%ņ Ż?80éłæŽĮš;ļóŃąG Ž’;ü× ģŚķüĢįķ»ŚIųĢ*­$ tēż& Ožłß`åķīöėłńįäō˜'ńE ³(ņš 5=ėśņ¾ *éŚ M€źūļ/“Ӏķ’*Mń Żś$ō'ō÷¶!·!žÉż ō óņ į)÷ üą üŲßöī žÜźī('’ćļ.éĶłźó: ėļóś’ĻäōańŅŠÜč9ńü?AžžŲÅĀ!ż*’ å )“Łģåöõś’ čęÆčóĄ÷ų÷Ö÷ą$  ĘČ Ś÷öš4)ż#ź ś ’ė ÷Śńļ÷łÜż’!ļĶ÷żšŌįųņ+Ęį6¹’ ä¶Į  ä & Ł ēóßųåIłOįå£Ć<äÅņģćÜϹķvņ‹ē=Ü"a ž ąÕˆČäE’!éŽāßģX+ éō*€—/ę- č;įęė.ź ’’5Žį\ Ś#•/č ĒŅ ąēćל#Žę9ńŽ,Łēń3éõ&īO9ėŃĒūŁķüóźó 0+ś­ĒüżńųśM<Ų[,# ųŸÅźń#¹Åøė%Ņ1ųń—?Sł¾Ī ł[ŗ3å\4ž'āża“įó€ąKī>ņ!ē&^󮳓70Ć ×ī$Ѿ®3Cœ'¾1ņ©óūč'įÓčł²ÕھŪ•?šŻ 2ļ¢ C­ē5ā“@’ŹČņ5×"ņ·ģš¶®’ĖōźóŌ ē÷ d )4ß ėūźÖ ŗŃLsŲZÅõļWŚ5 -Ż»§Zā‹%Śš+ĘŁHV)āõóÕ Īē(.ūŚ)Ńń“Śüū9ÅčēöģŽŻQ2äś, ššōĶÖ""ŗżĘ, įģJėZŽžå!ģŻ6'~ö$¾żŁć¶/’ š>ų'åźéÜ žķĒ<éęś<ŽūāŁŃį ļ¹7=ė/ź)ń*Ał/å’õ+ųiļÉÄ āėöōł+ õåšŚ’#Ó ŖłĆžóą!÷ļČÓńŪ1ūüŒÄÜėü¹Å :’ĻšłóžĒŠÕ.(ś3% ÷,»ö’ł.Śæ»EēŹł|/ßŪ XüÜ9¬ėö Vįå™ś ™€Ģ²Õ·²«ƒOĶ~É Ųņ;瀀€Š8»ļ ŽE&¾ņZ"‰ū7ā ķß9€&#āĀĢÜZ!:­¾Ķō;æā  Aā;ŅAøĪNņ ą'ÜĻīōżļē•Õś×ÅŠ³łŽ3'HÓ2}ć5éµėJū7ę'öŪA-Ū¾ŽļóFõ"ēńø?Ó ='ėü€ēōė(dųõż,&ÖŻéū–éSļć7§÷ Ó’Ū¶üCāņüżJĻ ’ėćCÉó!ģ %ś ģńČ+ś’õš4ļ)ŪūņĪŽĢKéī#(ŲD> ½ĢĖ5āĀńę ) łČMųżā%Už#ó" üMąä%8ü’Œ ¼’ĶJĄŹś”ÓZł5śÖüóŌÜ^b Ż&īģļ ųÖē źżŅżńüōé’Ģå&óź$)(ęŌéę ōźĶ3÷åą ķūśęń'żņū’łźx"ģČMłÖ÷Iźż] $ņńÖóéó õłéė’ź#Õļ ķ÷* óėē $ą*ļżäūūÕš( ßŌž’łåßŲžĶ÷ķóėūųńĮöžćśöżŪīÓóŻåł,ā ęÜß" ģ-ų ūģń 4B#žąöļüļšęü žńĖõ÷Uüś°ę  ó !ł éŁūūć:öüč  ļ$ßł"*ļ’KNū¾įó~ꎒė 2ß÷(ŌęMéŲźā=ę ĮéŪżć7Ęųūć ļ-ļ4 åżōėüŁ }ķūōAłų šńŚžę*,~ų÷Iå1ōĶ3õ3 ,  #.Ś(Gõ× ņ¶ ā“īż=į-ĒVŽåŚŌŅń-šó-÷Ļ*&1āüėĢåö@ä"åō,OŲśŌłé Ę}&³>ō%®Ļā%ŪłŹ3č8źś&źü 10éßģ< éH <üŅĪ܀ö5"2÷ļģīąŹ !žł ×ļG="ŃÖ Ź )€åé߁óųŽé" Ūžłšüžą £ēńīłĶčķūćįń# źßćä"Ä4ŅčéķžDä>īėÖļ’#Łß-2õ?HģķėźŽĘ ü+-ę'Ół ų«?ŠŠžś#ł ¢$ čķß÷2=ģ$įūįķJĪū šģžŹŚ&Īé ó<2šųóÜÜ ņcéą½Š ćżįęļ<ó)Ō¾Ļś ó« š ų`éę%3ĪųĻóīŠ^ųś×ļ£*ó7ąŲ;5Õ’Ėņ5< čĻē’Œ ī Fšöķō Réõł÷šX:J%7äŁ×õČńźŗŻhžŚ#4!ģ*Ź™ł&šū¹õ ŪóCŽ’ōś$=āū,ĻčČ»ķųēųćČī „śOł *ņūņ/PKßęāßķčč7ģš®éõöóąéśŽÓ<,~÷=ŁĒśå/źSt&ĻńēրķŚšū ėöæ) /źį%śļ"÷?¼ĘĀöš Ć+ūļ 1ū+čī"‚ģ¹ö ä²8ĄČ äåB Ķ&śŠÜźū ż&#ē€ĻGö  ' ćźņĶŁ÷źöČųļč ,óęöśĆōīżśõĀ+ĒZņĪĻ ś1(õ"&öõźŁ /&óG õöź÷ņ#ÅLRŹņłėK ż ž Ōęģūä ģšŽµ  ō,óüż ū ēęÕńųōźõężöżĆ>ļüōåĄżüėžš*óź/'Ų#ļā Łöś0ćų łļŌ ó)č’ļźņßā ńŅńäįśśūüü&ś÷ų  õęūųłšūó'õ Łüś×ę ų 'ŲŻOņ ūõ’/ż'&śõüEóģźŃ- Ł0ó7ü łė ąōģę+Bå®óĖūP' Žöśł$ķ‿*ņłüŚūšŻ.€"Ė’ó õ)śYłD ēāņĆ :ž=ō ńū×ū!ģõ Ń#%źżßĀ –ģHÄśóøžäž Ć)€÷įśŗćŹņ·’ €ń÷ģŠ+õęÖŚ÷ņ÷ė×ō/YŪ’.§ķŁ?ß6ÓR Åŗ"Īū/ū’ū@Ąą ĘRŪĶŪ ö õŪĒßź)±ēuLļć’ šē÷Źģü××’ó Ōr(źŪ>ę®ģ*÷ŻÅÉõßÕÓ1ž Ź 6'ÕźżĮłÕņ-Ķ"Ä .(Įß’ Õų!õŚęÅN÷Ц%šB=()ćG µŅ#ź·ĘųĢ$ł2éõąÄśCū!ÜćåKī+ūkÅüż÷/ žķō#ōõ%ķö=ü÷öżņļjĶŠōłįī0)ćéßćąßś÷½Õ..Zś ž8Ų/Ō  ü0&Ž&ęśP÷1ļŻ= !5':ćś Õ= õČ?įßż’ (Ņ(ėšā  # ūéņ×õļī$õ÷ų#!"*+  ź’āÕžēķ ķ0×é =ūŹūßā8šåD”$ÅžÄFų>õõ üÆõGŲÜņ¼ÆĘ“²³ĄüŪT=ĘŚ#Ų(HåūŚ)6’$2łG'ćöÖū!2ŽĆé"ü,ī÷ %øĒ=ś,łŽ·Ń䌳ūĒ& łčīÆų)÷ åł¼ :ē ·Ó"6/źņźVśü90ÕŻÓÕ  ņÓü÷!ļčū)ńöśń'ź8Óž(  >ūĪī¶žÓ/Żį3öĶęąę"ę%!Ę ž¹5ōėŌ].(æö”ģ üż0ś½7ąéü ć*óģϬę,Üöīū'Ė*_€$÷ į"õł—ąęÉ&ź#šóÄŲź,ķīwdžĶōė ÖÖš-!' ńć+82<ūøŲężĮdł€ /ōńūėżš%śÜ·‹.ąīäēīč÷Ś7%Ąßł®ų’Žńŗó¬ųž$ł ÅöļĆ ~żį*ŖćŗĶŃõÉX ?/¾‡śļŁŁ9ż Ėč n4üįŲ.½ŽÜ%ūB㨽ņ c„’+Īź ­'ūż/'Bßķķ ćūäóā÷Łņ8÷Ų#ļż¹~Ļ9>Ź-ģEœ'żĻó“ōķ"$K7 Jõü,žųņöĒśü$ ö:ĆBPń5#”šõÉ<ēō{üūŻćņä ņ'€ļ¹ā4&¹ '`Ŗų C.ō"że"%żĻųąõėęłń& ü$”Õ Ø’0é šļü÷ ¾÷Óķżīēć@ćõ²’ ņÕņ ŲųĶź ĄŠŻ@Āóś ėł*ģ ü! ķ"2õćüŃž/ €[žYśš׎ūųļ3Ų>øö0öZÖäņ ļē#õūłž"€ūģ³ę0ß ęšßĪ÷ķŚ ßķ .6ųųŁ śöę6ō,ŌĢž'ņūōēšŽ¾XR×ļ*ŚųģóÖó;óü#č6ąŻł-™Ćā„’ł=ÖBŌē&-÷ąłĪģĀåMe#ädÄąń*¼õĘCó’×üņ·7`Žį +ć'óóŅēÖ×'øOč ÕIÄ'ķb8EłżČęÖøņń ,és—Ėį ö ÷ä:ļ~żźŁń€(iöŽ€ł£õęžųEļ)éœŪ/ĻŃų #ųČĆÖŽØŌõĻÅLŠKäöéH*.żĒ;%7ŽWæ"ź üū ģ1FCŌ( Īå"įš}q ł÷J@ģĄĮ„žłŁņńēōäĒą»1ó«0'71äųįž7×å=-ŅōŃ÷ ķśēDöļ÷D#Üł 8>åMŠ'ß ×ę®ŪŲEÅö÷ļ4!ó Üö·†lōėž€ź/Ņ€ńb.+ķ ņņ ēēö īģńķé"×éęõ öŹžš¼ģ ;÷õöęģžŽü!ą,#ąŠŌ õźóóĪėŃßō# ū’ śšKęūģęóūīč÷ļ+źżąź ķēūßćć!÷ä ü Ģźžüž ņąń"ģś ū ž öōó" %0üõāĖäłūŽīōżšŁ"ō2%óĆņžü!ļA-ÓŽźš Eń*%ć’Üžōō<įń'ņų~ĻéńHÕ~ čģ ŲįõŃ/S%ńļµŲr×ęY ™źą*åĪ ž/śūīķ 2‘ĖŪ*üŻ×ńEśįėżĖńä"ē)-ėŃųŻČEś'6ēśĄųūJĶ(ÖīĻ+ 7Ģģź k ģVĮ łż“üiÕž ·EļļÕžöāŲŚ ņēū,Ņš7’ū)8÷ÖńÕÉÄĪŚ ģėńI(Ņļį&ū‘Ańž żüšĢ š €źüüģŁŃłņś 3ß¹ō EĒ=ųŪGęõÓ õŒé $ó.ģ ÷’ÅCī ńŁņ  śšŃčį įņ  čµ ł‘ō4ēŁįōīłķ0’$Ō  ĶźĶ¬ņ(žŁ ęģśž¹ć ōŁļ¼#÷EÄ žÓ·*įVŻõ?MōŸŁ¶ķ#ģ Śč¬ķŅäēēÓŁēųņšćŁ6+éš Ń ĶŁÄ×ū ōś(1O ÜüŪĒ æ O+ĮÜ/4ūźņÓ¼÷śõĶ"ėīūNüåäöéńóäööčäĻüļčAŃ0€0õĢģé=ņžąż+½čĶ)€óčļŽł×€īś <žßŁāÜÓ <X#Ė'&›Ø¤$čõ ć¦įHéŌG¼=ć5>ų³āŲb~ŪĮIåü=8ĢÕÉ0ļæčÜH%Óį3ęūüä’×·€õĒL–åß CĖĢ€dõł"ŒėĄAŽ$ķõźĶŻćźõ'Å蜬ą<¤ Ü.Ćż!G¶½›õ-ĻN6ρ&éĻōīNLóó]„ó|š+ģ.źś€äZĒįīńęÖļ! ļļü'4ŃZéąģ/€ķżüņ§ļåżŅŌ"õśó’6ł/;Ö čäõ6×<ē%- ķ õ©7€3# )śõTĪ ü'óģŲõä3Įė Ļ #^*šč%ź4ńņWėž -žōż<ü&[ūļńś-ÉųęėŻæ4ņŠ įņē?’ā”Č/’žŁłŁ ę ×ē>ļī,čų#šŠõ$*zńź%ū÷ųī(żŁčēą!0ūĢ#įŃ-äāśßųō#ąö" ŲżÓXŻ!Ź ·ßÜ*ć=ńęöōšćę%éö4 #5Ææź·ÜšÕ'"éĶ’īF&ł!ū ßĪā ņżżć  æ¶ ū'Ś #3ōŁ@2Õ5'Dõ÷éć !ŽĆõ5óž÷Č#žł@!ŃÜPóņ÷Ē>óĖ (ž  õéŽ ķ. Y*$Ū Ÿå8ń"AG1½żŲ üą'ŪĢsčĻŻßč "å.ó¶ ńL×Ųž NSąōŁU̼C#żšdŠGĢ=žķų@žźūQž@Ö ķ7õķ5äĪäž8-čń!ßėī#$õöÕżß,Ņ8×Ń&ļüb’żé6;ŽEĮń:€@ķP§ŅÖźõŁ*ķL Föšż8Ī7źśD īōóļĶ—ųäńõ  ųė ''°ł“źüŽ÷ļ Hó%āģ[ō"ķ[ć’’ų;Õģ’šņ äļ)ū é<÷ö’½÷ Īū©ņčŠ+ Ę × ×żśé1čų įŲåü3 ūÜļ Ę=ņżžóšžõāöäų5źéāü¾ óą’ōå#;7źIóųūóŲū žüūčģćŻÖńŃō’0 ūļž’  š "ށģīūōęūģ'Ų÷įš÷`õļ^ß󄿎ž ó DīūÕ   āĮ Ž õ ų’ü  źņ/iūééņ Æ÷Ū ģįūćłųśīśųģž’ų źō&śūž("Ųćčżīł&ņ‡ļóü$ńėńõö óš0ģžų$Ł »żóõöś’ ’ ÷Å ńóŻÖõžōŌ÷,30ė_ć3ćż’ ść7Ž’_õļ4:ššļ ņŪśĖŽLĖ ń$šķ ś((,!śÜ!Ēō 7Žšż7ȹ¼"õīīēńśüųńł Üėśō āž ’źÄģēéīų÷ śņ"ā§ĘüÜ.&ķÜö ņņöżķ  üźńóųłžżģŅęĒņõ#żīžōö éū‹śķłÕöņśaŻŻżż ōö>üöž"Ķ”é÷õśłżū4  ÷ųį÷!õŻõš½ūY ļśS"’é ż*"żMżõłššńóÉļŪņķ üž ūü ół õ ©źäĢ÷ź 0 łśś LīČ (€.ė ČĻ$źŽöÓ3}ī÷žņGčō ŻłõŁųē²šä\ ?J)äüņųäč"ēęź’g*ł öĮ ųžõĻžĮ ŹóĄūŌź× čļńĒīé ŗ]·-OĒ:’Ö×8®E š&Žāõę€Ųźå’ųŽ/ü¹ņĖ<ćśŌ’* Öī÷Ō ÕQH åķ€0’ė¾ėą ź ;ĻģaļöĶĘŚ€Õ ėš’ā¼ķśóŠŻGžź÷óõń3ž ?0÷äėÜÕł3ŃĖ;,"1Ł!ŅŃÓ0ĢśŚõ'2õ$,åJ1 Ŗø·/ų:CÕŌ8åÓ"žŪčDą  8 žĘÜūųś®+×÷ßÉ×Öyü%Ƽćė .ū(éĮśÅćĮāųüÖķÖ ėćčūĻ)€ ßäś&: ęhųŌ0Ķž ڼń ūėŽū ü ņž1µ& ćIģćĢō 6$!ōēļöĖżźćņū&æīē7ŗ6ųõßĢšŁ’*Ä!éŪŹńĒÓį’!ŗķ)ŻéŃńķēģšųšć’÷5}ĖżBŽĄ ńļBõŹ'×’õ+ūł€š÷żŚņå!4£č*ģå’%ķģŲ ņų÷ų’öžżŠŅÉōīęž żĀéŁ"ż»żłŃżõį½Ę#čõīå*H’åŽ!ę ć¬ņ÷āē7’įņöūļż H+éŪÄīģ¼żķī 1ļżżŅĄüõ ÷śņÕš€žüń×Ū_# ÄĒż`»Ś ÷łÜ÷Ęśśł, ŚéĮŻīōõ÷ Ł/Šłśź įä’ł@÷!żĀ2éüõžć÷żū  ļžč6%Ņ)éū@/žņę$ö 'õéęŽ!"€ż>Ó·õćĄöŅ)ńķīČģš ŠķÕ7Ų’ż Ļ)ó,±-éUÜłž /ś¬ģįŽļ=ŌŌśüI>Cņ’µę÷óģŪāžņ Ś#ā Ü Äžõ÷ŹIš3»ž0żøå ō# ÖāóĶńšéØ =ŌŽåĖ’!;Łāī³ų2ś33,ģ ™CLaśČ åķąńÕ ³żÄ÷3!ĀĪłüš ļMóžõ( ś6Ö ā"ųēšīķķčĆüļ OžŹEš åčüņķ2Žéåžś÷ū+čŻÓŲ÷Š æā(ü[^ŲR×"å1ĢŌčŅł ŒõńéņŃäóüź%óŲńż’īšõ =&ÄŃķĶ&ģ W ę0śņńżö£ŚōśÖÜę ųĘņ÷ÕņśżŚķęćżšż -’e€ę Ę4ó=?€÷@5'ņęŲėDüīńż×żÉÓ"’"S ōņšŲÓ9 ßēķ«ēōČ)< ß÷'|ŠśŅäņčĘ#ż įóģėŽˆ0€éķ.“,Ļļųļ) łńĖ®ż nįLbÜŁźłHÉĢ!Ų(“'Ēż$ ŹżJÅöšō-< &³-%cāŽżÜīżų ĻŁ ŚąÅī¾ŠĪ č%ę ääöą€*÷Ģī/žć%ōźĻü óč±8łøöåD;!_H$ öŅH×: öķŻśJ;ōģöĮ 6_āū:ŪÜĢŚBķéō,5ō<%*ķ* ņöõÖ!Ö’śžŠ2¾& '#ąBńśšē©śBó1ż<åųŁŻ[ŌF7Oōčyāøž0 żė÷¹4žź öś³2 ÉāüüåćĻ ĮžÉųVēC0ą $ļ¹"£ėØ1ō)ōŃ „L #ž Üńśōš ąāĮŽ,ŹćĢy  ÷łü’ń÷äį&ē#3õ ł”Žä. ėĒ!ļķāšłŻēDéįüēńśöįć÷łžßńŚ ķŹ,½ŠžĖųü īģ(=ÅŁ ń»'(ļ Ø µķóé źč kõŅ, īżķō $ Éń#žŪ åŅ ź }7īóļõōčéćļćżõ²õŁś4(ę ął öłŠ€ņ(Ļ Żŗ#/õņ%ł/ėéō\ō čą3ÜŅćĘ(Ž‘6 Ēåõņ";*.'ļķ;Ł-Ę)šź ÕšÜ/żß «Ģ,Ā.üz ŌųF3 Ŗå(š·ūį"ÆŅKõżéņĒœ&5ńž0"7ł÷īę1ĒqģąüóžčŚč$ޤß%­ą šĪ’8äüĮŲ6ėé/Oļ€ś2ĘøÅGõ#ŗJ+Łē#źūż’ąē%°9’+ ćčņżéɑ“äżūü£šÕŃł*Ā'\ī(ōōęóßüźń÷  Ŗ×ėĖŹŗ3ļsćū:%×;ģÖĶäX1žÖD޳ķĪ’ś«8ž ÄņłFöõżėš÷· p#ęK¹Ī¼öŅĖņ˲ՒŗšłÖ Ņ ī źß ˜ ć%į/¾ņ %) ē“ółķ.ēÄźņ÷ Ēļ  żĮ óźĪĪ÷÷äėŽ€öŁ%/ĢÜߊčü$ļ™’ Ź+-īņ;'ąĪ ųņ«üĢėoĘšąķ%Žė&ÖżēėäżČ "€öēžį žēż6=53īéóŠėŲŪįGŹčē„’ę&ķ ļX#,ņT#ų!ś&čØź.7čžłįņ0ł ó0ĘčS$ ōĪŻńžµ/J=ķāųū żżņ[(ŁļKū’&ūĢŁüĻĶ62ōćõ Ķ+įėįĒüńåžųüŲ0×Ų#Éż ł_'ņ×)÷ōņ:é×įõūJśģģŁ5Æõ Iņł1(ęõrĀ Żö,żÅī*ł’Įō:āś€äõłē÷ $ķśķ Lä Ūźüż'ņ)÷ŪQ3;Ńü&ŅńĶųė :ųŲ *öķÜŻ™ęæ 1]łóžņåżéĻŁĘś!§'ŌŚėęćģå=’ūź `ĻŁõóŌ$ō“Śłó%Ą²#ķÖęŃ(ļJń ī#žóéh߯õķæ’ččļŲü÷Ż^æųڤ š ēńŠė“ė*5 =ĢųīåŽī 0č óĄĮįĻ’ ń!ė×%’üö' é "ō%+ćõ(÷ 'ćŠ!ā0,õ÷ē&š#Įģ×ü ė ėž3÷ŽņĮŚ"¶ōO’÷ēS4Ż"õ""ōöŌśÕŁÖŽčŪ!·Ų¼öå$W éį&źĒĀ’1öź&ųśųńōüż1 Ų­ńćķõč ź=ćL ńļłīöĻōöč·źŁųŁåšõ÷ēŁ×:éō ųļŲöėü߀’Õׯ1ū.Ķ Kćę ( .óļöxü Ų¶śńü7źņšīźńÅųÜõ2ó(Ųółņęü÷ēęžö÷ķĢėļå8ėāįPš ×Āõ4ōī"ōńõųźķ}ļšżž.ī éōżŚ2łéāä÷Š÷äŲõńŌ·ūłā  ūēģłūµ õīģŖ ßōüœŻąščłõł ō ėģ„Ūō =Ż źė?ū/ō'¶@ū)zųōĪõö*ģļżīVć’÷¶Łöļš2ū’ÓŹ2äĘ’ś+ ā ōśå2÷Üó’ńł žß ó!ōŽ:ńźżčśü+żē ēā Ś÷ųńńT˜üŌšłSśų*é#ģīŹŪé!Ų!ąšé!Žā%ńń&ģŻ6÷IŁŹłµęń1ī¹ß ģūń8 ł5˜Ų E%üéüĪAö° Å~B!ķÜ/śķćŪćõī× żĻŌ’­5ĀŚŪüžŃ0_Š£Töšž]æÄńū0°€śüŅųąóæåōCö 0÷'ö(Śø6õņōą’Óńų+1vĒŲ %ōŹüś'īéś”’ųńž’ ź š½Ł’ ö ņ õūć#Ę’śŌ;ńė é˜ĘüēHōö÷ųć1ŪŲĒĪūīłÉ ·ĄÜ0kõ÷ĢŪGī@C6å1ōÅ ½÷āŅö÷Łüē3šÕ -ń_å"ŌŚéėż×ōõ)ģ/ģķšĖö1ž%"ŲĘęś%ņį)YNÕõ#ł»šžčģ!į øś;ćźĻōß3Ńū 0žš³ĶūĒ» $’÷ Żń2#ķššń»&š4śŒ 3¢ńēļÓļ HóīÕ āüū"żą!ÖčŪńļŠśšżćū&÷żŁń ē5×ó×€źąīņņ| F÷āõšłśņõōśEÖōžõ3üųŠéė ÷Š×ŪļņÅü ’ž÷ūŁēō Óėļ3łS žüō õ ÷ąŻÕ śżśńżŻžļń’Āžõ ,ćžĢņķūĘņ źńū$ Ūłü% $õÕõ ņ#ē.ų įõå9ņ żĮĀĻšŽņ«įó4 łCó†üļņ½Śõń žļĻ ė’ &ŚžIģÅ*öÜäÖšŪqŲņIōķĖņ.SŌč ń’Žśī¤Ūįų7üę ŌõPśėž5śÕężń b+žŁś; śŻęųš AžŲūśžśčŠįļ÷#źņ’łŁ>7ģ*åŪōššĻ€żŠī,ū3śśńōüö=żļśÉ ś®ķõžś óź* õüÜļR’ć õū’#ųĶč#ż;łō-ōēš'ł,ą īīŃóźłū(ēžö½ūńńšæ ćÕ<į’ õäó÷į śŲ2ü A 3ŪļJü8ķīšćŻō źć éc Łęńś,÷üķ ćõ žż ÜÓFźīļųŪ,ļ€ŠūåŌūJļ3ŠšõüčöŠõ)įŪÜ6zļ*#ōųr ļ(õÜö ó ŗī šĒ6öŻŲKõö äÕ"÷ųžōę× öõ€É÷/łńÕó"-óčś»ų’ß’šåÕüČž#ó żėÖęR łųēźō÷ęü)öėO7$āģ ; #÷ģóćū1$ų÷üķ"ų*ļēĖ" 6ģM ą#ėć: éóų. )1žī4*ŽĶ'Ż+ČͳŃōł(17ØųńŚņ€ "=£“LåäaI,ģīąŌ: ļ6Üšļ,2!`é * ŲŲŃÉĖķ/å÷˜üųT ŗų;5+:1€5ąķ/'Üä>Ń_=ÄģįųūåĘÜoų »Ļ'Ē. ēń/ā1#ŖŻ: .T$ Ķ/= ė üŻ>óWŅūõŻ"ŻčÖÓE .9ćÖ Ę\,/įĘ72§ņé’Ėé<Æń^ņóīžūĢļ¼½Ē;ś'ż÷Ļ.G¦  ’Śžé¹ŃóżŪųÜčīčé­€HŽĒØŚę)øBų’ģßāįŪ/ü“#šó—>±%ąęžö-齯éŅ-łÅÉ ŁéóėöÜėÅ#ń ±ą(õ÷gņą1öß@ÓŻ‚ вóäYśq%ÓÕāŽūų®FÕ +ōÅēłņ·8- Ēżöå æ!üÕųõ$ źB$0āž ÷}2ēāżųę%üźāš Ōōū śź3’ć?īHõéņF>Å’ēņ€Źū+0lßÖ¶ā -óķ8 d %ł@'ö&ł"žźó> öĶäß®ū))=ŃżźÅīEŻ ÷żŠėĮ<ń 2ĆöąžöĻŽņ4ū³ ÷łį"!šķŌÖ ;%&ń#&# 2ń$Õģöź÷#éō ūü7 "éÖźīĶåóģö č-! 1ā÷ń Ų§$ķ ŚŻ$ ׹-ų šŲāå éų#&ł ž<įčž÷õļęß  ž)ųż0åē$ óš½ąšņŻļŻXćńņŠóųų=ģ Õ ņ +ō%āīō’ß ":ōųūĪ>8ČźāūōcŚžįŚ%*śūž*ēśĖ"²żųõ· ēņ čśéĻ ¾ōŠ"õ óü«įņāŚ;óéUé-ūäå éĘŠß'Ę’ žćķ 'š14žDõ ēąńŁŅ’źÖĪ#Ćģ ×ń÷Ž’ņéóēæļ2öńõļłóbō łéō÷ €Ł˜źčĪ+žåÕŌÜąąē ü Ü÷õ÷łÜÕį’ó (]“’ś,¼å7ķżžōü įķ€ćżĪ5ńä ‰¼»€ųÆåßģ 46ģ™Ó\ņ)!ļŲ'õŲųŌó#ƬŠ×É*īńų ńżĢ’čšłEż¤¾Ķ¬(•āćéۚ'öß·Ō[e€Æ.Ė ÜC čķ5pQ³Ęßģ­üĶ;ĒüżžÓžB)ʒŗŲ(įēÆX€»ĒĘ:7ĶīJ ģž>æ¤ģš Öź÷ųņģīż2ćI€ó·€#ś¼%žųč%’_õ÷,ŪŚ.¶ĄąęB fĻųōšĻ łŸÜ÷žĶķ.#õBūćĖż’Ó5čäų"é&ķ²įU×2›ZōĄó(öŅĮŲ¢ēŁĄńIüŻ%ś¹>M  §ė ą H7(ŻHąŗōŚłć5YÖģ24ŌŌŚ .Č70Žģü#åįų Iģ"ī&Ū%  ’.žĪ1ļļčżüŻ—ćŲņŃ1žüīõ+÷÷üīäą÷ķņåųōńū żŌāäÖ+’3ōūÖųó*,!öųņāńū ģę6čī ś ßžŠ*ū$š×įÖ`õžżŠńćūųü × ÓūÓĶ÷÷÷ "õū÷!Žįēšū ćņųī:ććóķŽ-ų5’ūö½| ÷!ž÷0,ū  , Ö)čüóĪńž’•)ć *żļ; ßå“äĮéķśBQģĶCÜķ,ū ś@ĖÓ+ćżĆ‡!ĄįōĖ ķ ć4%ī#VÉļł±ų9ā2xįBłŃ FÅ/ŻŚ³6łÜ°ēųõŽģO4#ļŠ &¢<䯜ŚĻČl¤AՀ%žšŸ"26“ó„ćüšūģóźūõ冞żĖźŲõ žü2 ö’ć͟% 1ģ@įA÷Ēń.xž ńŅų ģōUŃüÖŅ÷ļÕ3ō%¢ū5łņöņ/īUŸü÷ įļå·ßµ÷”Ž#!A3/ć×Ō÷X(&ž!6ņhóāSŁ : ģõ2¶ Üųö © žÓżM•ĻōÖEIĖå>Śü.l¾s{Ō Uį ėČ#FšĪxś’ŚæėÜ ¹īŽ²äś čįłüä ÷*åčę¦ņ "ßčüż$%źėś’'Ą Ćū7ŪņāŻµÅīŽó÷Ż5žśķ AéCä ģńĪÆŃļĮ,ö$"äć!ļ’"ś Vö čGēńióĻō ŚęÓ*3ÜŚōóüń’šų= ēģģŪėźŪÕ#Jš ķļ$74– Ēó+ Ō€ó $āō  ¾ćźąŃóÓō(ė×üśģīGD žģ ģęī č ą*õė é$ņįŃüōŠ>Tź ōńōż Š)ĖųĪó÷õź0śėÜJūĄŚ ĪŃn É"üRÖēÖ"ąöćóŽ"āÉé ųßĶ)ō$2ĪöĄżųķ* ééž*ć/łŲ›ģ’äųżä#Žļ łōīī é.Ćõ’õņ’Šš'čūü7ģš’ (ų:€ź ć"č’Żęą}Śņņõ ā žÖłÓ šåĢšśI-ź'ł'éŠE¾źš õžŽ8Ž)ļńįĀÅųēõū#© ńŁŠ !0QńļüÜźó"ōõ)'Ķ\ó%W2ā „"³ +µė! śņ ’%½äū ¼ćń-€ßńā ó܉ żąśĀŪ=1×¹ęćŁŪńŪ’÷*ģś ģܶ"Łśė6Æ Eż äś"ł ķUļ!ż-õż į*"ä3ź &÷ćó»/žµĖ% Ė€ž,łžėäū&]]ūž1ę ŗŪł×NłĮ$čņœÕōćŪ^ū ,źł,äķ€äśō€@ēģżģČÅ·ŽŻ÷õūēļ+½ōĄ %šōļ4Ÿć ‘ō1ś2Æü#é śźš*ÕłóŪü€Ō&ØØ2Ażēģ5æŁ÷ żńżō0čļęžŲė ÷Ļ ”óå  öł÷ļžžō,ģ ķļ«šń#u꣒4ļśūO÷ęłlŪŽ²åż ü’žšóčäSōé ģīś’źī-įÖņŻž(Õļš Ūõįłü' "ūģėś9üńś žęŪīż«ķčģņėżķźåńóąėĻźčŪ ī'ņ  ņåßłęE4 śÜŽĖČ&žĶöł’(»ĖŌ6’¾É]Ģ%ļ’ļģźśķ’ōģü0ńįDčĪó’ųŲš żüÖŵßģ<) ßöN0é ,Ķ!Ćŗ2 ]üĆņĪž2śŅ!łčŽöõńUęó-Õ Ėū²ó'ø ūō÷ā&śężčŒ 50²ó>żóćĀųĻē² öŁé ę$éžūļ _öFń÷ń(71ÖŚīļšŪ 6®§7Ž×0Éi( Žų%(Ŗ#’šŠļ-÷÷*ž* ćE :ō³w }ž9I.ź’ü0'1¹čżÕ)Ü- śä%6’ĢŅķųߦäåźÜ¶éśųź²"ż12•Ó³ŗ ÓĄĖß3ķŻsņEą·jē)ŠõȀYŚżŪ;覞ß2Ż ē5ŽßSõ̹ ­ł0öīńģ×$#DĘD2€ōÕŃŅØėvõ’ļėų¼÷õ6ī× żÖö łņ6’Ó/$ėōņŌāāłžā% ö ų©éŌŅ5ö4ūuŪę;½Éöüö+DōūąŽ"ūėßśśżķėĆ&żÕå åßäŚĪōķܽ<ńöļå’%÷`4ÖļżŚ/ńųąō õßKŌļīōõ"Įéų"ŪūšŽ 'ēö;ö īüĀņććųÓß źūĻūėģńŌ-, Åæ?ö›ėŻ 0õķ Ż,ö2ƞęģhō¬įń:źĖCų’ ķ?"×ī&čōųź%Ŗ°ió2(ėTėõøėąå! 4Ū$,%É# ņö»)īĄ#ū’ćßī5ń !ļäžō,įŽRōęņńż#8čļßöēžčš/ń„’’6ń(źż łJŁöł­łå!äć²ģ&åé(Ūźõż ÷ĻÓ6īÉē4ćžĮŻńō ķ÷ŁŽDéŌīģ( 8ā-,  Į’·ū\õ5ļģ'6ł Ūķīóń6ū³PōųąŪ$åįć ’ źD%šņŃįčļ źüLó ĒłüÕ ģŁõė G"/äą 2ōķYä $­Ł ļęōžL)ōśfÓłģžķžÜģņīšeģüÆņŁģ3ą;GÓŻĪóśėGńń÷źōóļ%&ģūĆ'ż%ō¶ø Üšļ ėš'’ ķ±ŌéåäĢ.ČßžćžšŠņ#ĮŪ7čżų ķķ ąłļ;÷óńŪŽń( ’ųĮ +į &®½ū ż4©łėńå÷üīļę.,$ōōžõģč -!üģņāāŚüš!éę:å'3‚÷öāß ,ėĶ ’švė׳CćG:öćõ}÷?KŁ[ń G+żŪ€»œē"öŖö*’Ż»ŅåĻõ Æ Ö'Éj 9 “Öąŗ ĢKāāoäéŽć÷ķ÷Ę3ąß-ƒā€AÓ ź¾īóż$ļł%ńóī¼±1×üž×Ųµ&& š¶õķŽÜ öõŪ&W¢ŻčÖź “ęóé—’€ĻļņM9č!Ż Į€ņźčõ¢ ż1ņNšT€ēų ė¤åńččfż4źĪ 9$’.BĢėčŻśĖ ćļķčžóŻ ėÆ!ŻūÜž¢ŻĶż-:ņ÷šīŁģźüņ.M#ĀėĆż Åēä'ĪīņÜ+ óß’»ŃśöµŻśį* ’7Įūń˵Īßüå ėKąūüõīā"Š×KŲŹóö *d ņĢśž $Dż:ķęĢžĮąńÕŹ'$éų"ŚÕŪźļņ7ę7č¤ė’«ł źŲąŽ$ż7QĮļēŽåKć’ņķś@ż ;ŅĮżūģ÷Ģś%ś!źųt "źÅÆēģYųčń)ūĘś īė,ó ,ĀQR’š÷ōß÷žŚ; ų3šķģų÷’* ńėėŃõå";ų÷ Ćķ)żéä’7 źāĶ'ß:ß ņ’ń÷ī"¬RÕ  śjääņł:öĄ€ s’śŚ ūņś «ĻŹ ö ō¦ż Ö’äÓč4Ü7āŽEó=ĘłżDšśķŽńŃÓü"Yæģś ’łģ#ķŽ-8č Pž äōżóņō śöé 0 óūńåŅöÕQÕłšąŽĘõ÷,óéłĶמN Śż ź 'ÜüųŽ(żņēęĪ#’Dõ,Ī'ŁļJžö)•Yꏳ6õŅō?ö Ī77vĪå°  z0üńźōł÷āōńŹĪźä"üš’ä āūžżü€ · > ģ$ążŪą Ķ&< (€Žć*ś M"ļ`ņKā%Ū*Žöź'*žł€ōĻģ·Võ` Ž=ö?(MēOüņ7Å’7Ž* šę’ńć ūęūBŻü13åõüŽžē’Ś OŌ’Žń"šöGõ-Ųæ²õ:“õ \h[Čė ų.рڒĢüņöö:!‚×Üåė ć īž½ źŚ!ą’ŅÕī]ł ÷ń¶ ¹Ż’ńöü,>żĶŲæąųŁŪē=Ņ FüņüįXłģ¾AüēĻ’2ēć’/1õŅųŌB鞝¾ųŲÕåóõčž Ž38ōóéŹųóŪÅéļ)éśö 8ųżé¢’õŻø »&#Ż ń ķN /X’ķŻūõ<>ģ÷øėŽóĘ"$"ō5€ßĢ€īéŻ.å÷ż?5.ēš.šö-ßķśśčäĒžõļ'ī>śÖEŪ!Żā Čč"ŻžķÉūĻ6ž.÷ŻÄžõī+ļŗ©!óų!7!ļś%ėć%ÖŅśńŪĘöųźŚME€® ŌŪõė& "’ĒĪ×Ųś%ż*öŌēķ/95$ūAĒū1 ²å śĢāīFśēŸ ūņö÷ó¹÷ ķ IÕ=ō°;ģų!żS üś÷Ņå éÕŲ¼]ōóŻźśÖÉŠģ&59åżŁ÷ ķļāųśÕ õłmń¼/šą&ŲĻ’ūż>ņ'Č ×ŠėŹźłA’ÜŠ“Ę+ü,ńĻļĮūö,dų Čńķļ÷!" ’"äż.üóŁļõ ĒģŪ Ū5īŪåĶń×ģ Jīę$ņ_m’ųä%$łėßż­š(üń,!.śūž  ÕõųóķųŲÆéüéöŽ×ć'&Ķī7A%ŪŹÕž:Ā&żüW.šį~ É’8ąöō+!Žņ–āāü’÷÷€<čüĶŌ āč v*,õō.łLńßō3 [ģįńųäóüKžčśŪ źļķō’ķś €4åg× åģ śųņ3 ›ŽŠõ4ģōłłŃ­ ķÓŪ’Z’ćõó¶ Žü*ń õ" !ņöēć ÷ńü €.ņü4õöų õß ß*"ė÷ł’ŽžŌ ōō5÷šż$³`īšėäū,ĶŽęŻ°åėcŚłóļķĆ$ šŠ€ Ķ ÷$é ·źć·ŚīęĪĢü€ĮŚY ›üõöüē˜@Kń ļ/ś%ßķęŲ hüļ&ż’åšJŽļėQńį:žó!]Õž%ļ· / óōJ ŪōIå#āņÕ*ķööń’ńī+ü Jłūś3ļżņÆ5%ōåĆ#ģÕ÷šį×ū $ŗKĮšī ņ³„ć×ÓŻłiźą,ł&%ä# ķ÷śźėė łĮ!Žńō5ą³,7(˜¶Ź ĪÕė /÷ž(3 ž-9$Vł.! ޽F¢÷ö!ĆÜMÓ¶ęĶ?ś¦ņ’ś DZąļēĪü å÷jĮ#ńŁ’ å'!ćųūOę%ĪšX6#ņūūųłéšæ é™.ńęšėŃ++ךÕ1)*Ū SńżĪ®ōÜ“ēV2Łī/ē³Ü)_ÖķłłWśģÖ÷=7ōŹõŖłżŲśöč)ņųĮ<ī1ģō õ޶õ ’łóńųŪrē Łą?ŪöŲć] Ś’ 'öņäöį8#ŻÕ/ ęź0 œ"ņņ ›·YķD€Žīģ ”ėö5īŽéįņŁĒ×å2!¢w0żõµīżéĪūó5)0Õ łØŪšä"_ū$žćģŪ0 '"É,€öģśäńü€ «4%é W:±ņ+#Īh5€+žą0ī(®ŹŠĒ<ššē̾äīŚöņõß$āÕÄ"ī§;Łó ¾ęžŲžśī-2ł>`ļšę€§Øčåų!Jēn#žīöŌ*śŃłó ŗ łč÷’¾Õõyņšż+m ōū žõģ/ųŪóÉ÷źźō9š āė.ų šäńą ļž#ü’0Ęķž³Ā × Ē ž ćŗ ę 3žĪčÜé“ąŠ’÷ą įŚ ķ įünīčīBōņųŅžžĶżÜ®÷ž ’ėÜõĒ÷ čŃś’#>&ü±ńāą,÷öģ ašüį ężĶĪ 6ÜÜŖņĄćåłĘ3ŁęÖŪŌ%ÆžęÉīļń ±ńŻ ęų*+ń éäź ó÷ Ļė żō ä%#'źįõżłČģĶ!¹ĻŚ€ż)÷„ įņģ##«'įÉū$É &ö٬ōéé #äś×0ūżŽ÷ ęšÖēŚ·éĆėį¹"āśÓ«üšģŌå÷€łśÕ3Ś#ņēļś€Ó ųźķĮčį3ęžĢåø ėŁŻOÉńØżģŠąā8äŹĒźź),ź4 Ö5ĖĢüš.éī$3Ö6ō ’ņś&Ū÷ęÖ>Żõś?(ĄēąĮķ#ųóķÅ"ŪžY5€žśźū  ŻČ"éū '’ϼ’!/Jų śŁ .żśźÕńģęķųōėõ-ūāśĖō žŻ>łśüīöķŪó’Ā"żõĆŹŌE0*źžBJ;LĆ»ĒāÖ'šöŁGc 2–P÷ćåĢ:ł6ā ķ嫓õ飯{!¦üķ^’+µQ!¢ßüķ ū #ė ~ļE®!4ļÕ ż'Ÿ ŃģGÅYš&³!`ūū=ü"“µ~ģĖŪ_ß%µ D&œŁ2茧ßöś7_ųß'$Ü%ó6ÕūĢö· Üšśóé/žē4²Ļ€łŗŽż¦ą4ėßōīéØłõ€ķųA ü Ō ŗ ¶õūō.żśÖóūįžłśąēÓūåźū7åßĆžÄ ÷łā ć3}1Ń *įš.łųļ"‘ü €ćŪiüļåąųeŅ!ŠėŚźų (ąöłŲņö į;)+õŻ @ŚČéŌŚö)ä8 šūč¹š)į*ś Ū’÷ ö2žó. ęŚ Ł0 ½? źł%Ófąźļā ąļŌčų+ęšąśé’äĖ_īų-ń ø’ĢśfĖI<ļłų ū15ŁļĆ’#õ/œŲ ŪO3fę2^¼čóų)Ķéöäé2&ß ļX÷öō §»ńā'Gėń&žĻŖķń/ß”éķć%Š PÜķł÷čŽÄ%Ńö×üŽżõÓńģ ųK#ą÷’¶ŪŪ¹ź$Ż@B€Hļ?ß÷’"qņä ÷ż»šóęļT÷ōÄC ’üõ$ ęb š)½ ąāī¶ēåūūķÖū0ķ4 'ų’µōļ:!ń2āš$ūģśļ·žūÓÓLõ8źżæčåų J Ü*śź#źŁ,ļóćģįēĖ ł+ ū 6 ēėā÷9ū38žāÉ'š2ś(ŽčĮėņōąóźßŃēG ¾§/’’Ä’#ņ ¤ÜŲŃńóŽŁÄ Ųé2Ž H)Š5Ū“śē" ÷÷  Šū ;B›ŁŲ"å­,†öĪ#ŸżšŌH3¾čĪ©õ /öŅŁ'śīÜä$3ž¶€õ ųļæūā$+_éA?":Ó’C,@$ß ūŽHÜ!Ģ=žßKń/ś ū'łķļÜ õł÷ń ü"ķüC œūŻķö šī! Ćā€22źł/ !ųUæ4H®»åZ Ł#€ąŅņböš Ś÷€)ś›-ŁĘ62śōāĀ"ųß} ‹Ėł©ż ķX`<ĒČō³ö'ųt-ś @],ģ¹ž =Ļ'œõ!ņ1DŪųŁ’!Ąķ&Āńž õQųīīņäė Ął-Éī2ćüÜī7-\0÷ūĆŃž9CūŚ[īiśŽĆõžų& łęŠķ1B’¶ÕŁėd>ēņżC*÷Éż',æ ’ Õ’€ėšŁēɀ2=ŽóYœ$Jα20šÖč R:ėö_)H*!G×åÜ[öIéuĶŹ½TlöS ¹$°ł¾Ņ¹F'łū5Øņ,Ż ‚żÕą€Gōæó’,ŗ~¾ś484ęE˜Æ@āõģ/’ķ’¾óæ:ÅĶĶWĻßĶō.óāųWÕ’īōhßKŪ»ō €ä?&€_Żćņhąüź7#Y…}o Š7å)äśÜŲ%±vēDżśģ> č÷×ēńūįöBåē0ÜRA3(łY&ū4÷ !åģ(ķ;1é›ė¹4) ¦Åī%č7(ĀōJ’+ö8Ńõö¾ųāĆ%öłōāńĄV+*3*2Õ}įī ÓÜõö.ś&·źĻ’ŹōöåäćóEÅČ!×÷ę &ķ<\īųģåöō—vęū?Jģģ&łhį ńžęŃŖ ڤ »ģŻŽ»ē,ųŽN»R€Ėł÷š żNīąęѼóąę(1ÉĘćŗźœą-ęéĆ ęģų"ī$ ū»ū$*7 õųI@ś×ĶŻŅł Ģę šb/ Ż½'ßß!“ļ0¾#8Ö"ĄķNĆō×#ńõ~ÜÕ’ óóĢ0ėŽć°Ļżß ’¾!ūłŌųü@.÷! 7)ž’żŌg ę/ "ŌĘķßČž/Õń ³’ļ ńź× (ÅIEūīó-ĢÕžśBŚæ+F’ąÖ#4śß ōÉü.LĀū;-CėīÖ '0Aį'dķģłīžŹĒ¹Ī‹ńžķŹń`śńå(ūGF  ¼ÓāŌāÉE$ž ņEłé%ŗø:Ķö½IõĒļśX) <ģ ßGżž#  ė õ8ńŅ,ķ č-ąö8¹ś½čģļfūī’é/ųįęä!ļõ ūūģŻóżß śóŅśööß:ų× ļ ė ķų’ģż3³ń#ųó"ż ×ō’(Śīņ,Śń-ļńöõŽļ ū õ öė#ö 'ļę掜žū:ćšŌī÷ŪŁĻī%"6 åōžīņśė śś’å ö ķ ü śõļšįÓ&ņüłDģąŌ ń ®ż’;ä> éū õ’÷ķż÷ö ė Üł%łłüķüž÷ĶšÜķõķģēņž%ō> ļųõ ’%żö žś=ķķ! /³"’ ńõ%ē Ūßō ó Śķö  !ūó %üļęūēĖŌŁėęčśśÜŲ ģųŚłŪņėčĻöķūžó üłńšōĮž÷Żōšģņ łŠ;žŪūځ#¼?ūŚ37äūŁé22ēķø§ī’(œ÷ąaßCé©8 üŅCų?B[ć)!%¼ÓąO’ šYSÕ!óńżø#öąqņš~5ū1ńė³ŪŅ >ł’Ś RŅ1#ńÅžų#żū=óĢÓ S ŹÜä'銈ü€ėŁķ»AĢõü/øV9äßē-×&ø7"Ź+ĮŠŅ€02ß[4rõļ©ü­ńōżV˜•Ų; īäļų¦īx«é’śĆųŻÖó’Ž ·õf5ÓŌń×ćZńgß!ÜįŌĀŚ’€ŗå õ0$4"ž"yŃżO³żżŚTķūē)#Kō9ļšF:° čóųÕ1÷'źä&ā+ē+’žōĒż#ŗ@ķrŽ÷ łŽ)éļ¾c­›(łD»@ gņīöģŽ5D 2åųüo2˶ *ō ō÷>+śŻŪäō-ö)åźĻŗõ¢ń óų ’ū Ęöƒ„ó’äįxäÖ"“õųIžļH¼ß å ÷ł#ščÕŲśžÓ¬Łęē"Ž7×Öćū5 śžõęĖĖå/! Bé'ģ€įü’ģÓÅįģŅåģԔݸņ’żõŽ8Ė %÷÷'ėēÖžė÷ķļõźHż%šóÕēÓÜQõĻ×Ń÷óī ęõźą'!ß’ģ Śś!’šńžķåė4@?.ö'ó öTõ2’åź’A’9'A÷įłŹé Ļ ÷ģ’Žżģ !õ&2¶õŻ0ó÷óŻJÖżū ug)ü÷š±óCśäĶōŲ? īķ’Ü*īŁ ņžžłż ųōŠš9°ģīFłõ$źśö*!ÄėŁ; ŽŽśąņķ·Õåķ,ūīä ó¼,4’gć-äź=ź8ē¹<Ųż¹ĀĄżł Ņ.ßāŁ67õŲ”ā'ž¼’üäčī)5ĄŠõłČģ+õ!łéĀ õŲ-ńżš’žółŁ×ö>źė !Äń(ņį"åō ķŽŠEć’ļ5éö0ŗĶõĘļŠōūæų 1ī0/,įī Có86åČ Ēļā5% üš^ŽĆäóó4Äļółöėīć óžöłļ éņ1’]žīö Ī Ķłß÷žśõ!ó ūżżń»ōå÷üŻ  éīįīē/ńŃčā ī’ ģ õū’čöšč’ėķ÷ųżļįųļļ õņ“%żč$ éĪ ų ½ńžņāē źü ööō·ńüźśŻūóõPą */źüüžė’Öļß ń’ż7Ń ”šģ@BóęųńĻžŁžĄŻŽ ģ׿ōõōöQņć½ öü ń!ōżń*"–ē ųó#ņā ż =õžžņļ óļ Mēéņųģółżüū-ŪūāŚų,Ćś ņźķõćšõõŌ2 żųśģóūčśżŅž Żōūłöą ļśķõųļüČXź€ś ūõē€ š +  ķ  ųķņ’ü÷ ńżś€üą ÷ü4  üś õłł€³’ €öĀ üūķ蟀ū÷„’ ēłģżż €ķņ×ųū żļć € ųūų ó×ū.1$ų6ńż ż€÷čīƒü÷ €Ł÷ńķīś ż ”ģ’÷!žĪŠęūąśųģżėŪėų÷åūīū ūüųčū ōśóļÜü’žģö$śžł ņö’%ł ° ņūõżżž ńöö łīģż ś’÷śöžųžõ ķū’š÷’ ėšõļęöś ōśū÷ųēõöóųśšųżņōņ óū čšņéóśńöüńęųņ’żóż'ņņ ŲÕčŪīĢÕ÷ģæżńēéÉčīŅččāź×źėĪßč乊ćÓźčŚ½ŅÓŪģĀÕęŃŪšįš÷Ū%āŌāŚėÕ×¾ķļāĖŽķŌęļżīÕŲåēōŁńėąŠćÕŃüüāŃßŪėōąæŚūŚÕŌÓßąĻģĮéÜĶųśźßģėš×īéŚĖ÷ŽäōŚńźÅå錯ÉõéÖēęśÓäŲŽćÓąäćŌŠŌŽ÷čĢéŽßģļŁēÕēąåŲŅęūĶĶßėŲ×ĢēŚŗóćėöĶń’śćÓ×÷ńśØŅ0. Žö#²Ėē-³)F ś%Ž> › ōēńÕÓšżæ1Cį:F>bŌŻł™ßÓż Ē1ń0Ļóźā ÷"ķ½éž"ÜżÓ~ ųī -ó/ĢĮĖöLčēųīŹé¶1žļšüŃč¢ÕŽŻž<Ü’0ūīųį8ųó0Ś(Ēæō 3é!śöĄģŃÜŽ ĻåÖ €ā8ćÅÓŠāŽō€ č·¬€ųęįęSó9:9ż >śś€×¬µOń&.æ@ŪĒ $°€5†€Éč/ēŲ ł0ööś$G4Ż5u±+āė"#ź`÷ķŲäe~ĢŁž..ēfĄŠ€żķćYČfó7"ž!ä%9ł,žéŻ÷h1‡ģ{ļD dń$ŁóÜÜõ¹żŪīšģ4~Ęą18 €ē Ö(–īżµõåéyņ•ļõ Ķ øć­DŪ¾żŪWߗüČ€÷ÉńģåśĄ÷HAóŃē(ó ä0ĒĪó ü÷Ōß3Īćö÷ļü õ Ļü*.õś÷ūöŹü÷žķ“Śå&ź õé Äķņž*(ŲńĻļüćŃśJĢ äæä×üü G÷¹ńśóčž9ÉŚż">Ł8žŅ +’ņ č'äęęĄ0 ŹÉé ŲŻŁńDõśįńü)ńŃāŻž" ÉYб ķ1÷ ÷ęū,Ŗā>’ė_!źč!ßŪ7#;=#|õ׀ŹeæW—ųęšų ¼» ÄžŪ’łŚ öß4źļß\õÕAóÉÕTęBää6’µ.ŖaŻįņ£ūŲł-ótHć ßļ“ :ü2-ĶĄėĻ)ī÷õ$!Ķ2ćśBėŅå õ-č%^śTņIłęł'¶-ļ@# #2 Ųł,YGFčb'ž''A0÷ł0gČśÖń’äJĘ0Ūń3Į8ŪčP껯֯ó–æĪ—×Ŗ'ęåæō#ņ79!×ķGxŪ„)Äśš®§$'.H>‚ĻĖ:„}XĪŁ)Y ä<ķCę¹B4~ęį$G©²žÜvŁŹ}Ō õ9ļŹ3šŪó 1½YNüˆź#ē/ĪHźó”×ĶžĘĖćĢųč>ā?aøåÖ40 źżl/ńjĮ ć ęųŅļ{ DäćDK×NóÜ/ŪÜ žJ±C~ä(&-WÅĀ{)ŃüFÅßļ’6.Ä ņ.üń©’å€õŁ Dåė)<#×/ļ7šū’"%Ė 3ąźųķķŹżūŪüįAöł}ś#ļ81ė©ĪīM1ü’ź$Ƴ$€Śō×ūVģ ņ49Ž#ÄÄ’F+€š ŃįŽÖ4āŚ §č&łÜ$$9öö.Fļį 5.öŪéīįĢą [ÅĖį½aāŪ"ĖBłüZļ÷ ņģ :ūŌ ņÕŌóį āōßé(Ø’ņ »óü€)Ń5F›Į€Lļ5Ļ’)’f ĮįĻ4,žłÜÖA Ę{G&$ÉéēŻ ²*ę ŪąźŹĶ_Uąłū’ÄĆŃ/ÓO6Ń`7Gń€4®Äü*åż[3Ī ö <1 9Ž*ģL"2Ēü՛ŽŅų&+ōaXēņĻ^•$ķōŌrÜ*č ’1%Ąń÷7Š1!ćC¶ Ūå.ķŌĆ&Ś?įÅÄ: ąų0ī Ńė äļMŖ1éńéķų×Č÷ēõ·¹ąüßś)ėŠ ×ļŪüąļģłż ÷ļść’>žø`å ņ2ųÕ±÷&¼䱞ķčĖé ŃõźĆäé4’[ćččć ' ū!ćę!(ŻĶ’Sśüļ õÆķ)@×É„ńö$üį×öžūõ"ü% Żūō2Óī/.Ļż%łų€æIśüņŚźĆÜ ģ£7ŲźśŽ)ä`ÜĀ 4Iį5śŚśéē 1ĘÓšO<ü½Ąå*ō\9’ŁéĄ§śįĆ7ÅØņ,ŻK Ōų.Wŗļ č½>ū*1éü&½×ĶĘ×ČĢž=ć(£’š(”Ō/÷Ź(¾Ė※!×ņІJ$æˆ)ł(Ś`śŻ@Łśß,łŠZę óå'łŪŪõŚ%ȁóčūõµvŠøśūĒøōßėB-Ļõį% ÉńČŃĶŁ­ 9óĻ ģ« ķå×ķģ(Īąøł B+ŲŽųż×ÅõųįF+Ōš*+Ń%źmęļŚ"ķ öžšżŻåćŹåÆ&/Ī&LYŲłųü/’’÷°ä,ū?éOčßūųóåŁä,)éšüDŽ>ģ ÷ ŲåéÕ÷8ä’( üŚ'ÜģĀŁÜ/×n÷žį ģ ņ‘޾Aąęź žŗ×ņīö+ Ö’łćó§÷ߏ2ćł’ņĘ ņ\ęćröĻØµå_'ŌęįŽÅėŲķöź!ö­ū¶" āÓ ÖżŽÓ®Õčøzż ēÜL Ļ(ļĖ&õAõŃ“öż6׀HP$¼ń›Ü8ķ¦·-ć#óŻ@¼Īņ&ā8€ßį×""öüĘ:Žbł &Tė Ōõģ =BēŅB¬(÷żś×0ń€$ōŚś$ ¹Ó@”ą€Ńńū!2oģ¶&ź;Ī!ż$ ž60śļĢ–õģķŗ 1źĀįö3ī!åĖÕóį ł>AĄ>šX ¹ķążž åóšÓ #?ūģņė²Äń,,śT3»$źÉĒń?8AÖ`įoÄšE ’ žųņ)Տźņ¬ŠėöėäBņć+ņCķļ\6ā=Üø¾ƒ:ŹA8±¾Įé Š óœ üéŪ. åéņŠģ>+ :÷ œēĆKŻ !D"žCŲź/ŲÆ÷Ä«æ/żĘĀęÜń€¹`Ż«Ž}(z}ŁöŠ1óÉ!ķ "ö!źą+LŅĪPńžN„šϲŠö+°ōŁõ!ō&AvVÖõśą×Ց6ēŽāÅ$`āūĶõO;ļŪęŹęйņiõÜģčšĶž¼€īģ"Ėć~*”Ć#ķŲū9ą‰W»å1Õ[ų5€ 4šŻžŌ„·čÕXÅ%ńö0Źņ“ B>^ŃŌę!cõvä(ęš°?vĮ&Ę@ ¼?13׿ö«%ÖKĮ—½9ė&!  bü^żūÅ€Š)ī+ŸŚÅ7ÅŠ@ÉīF'ąĘ ÓļœČÄųįG\ģČΰž žø"ßjéĶJėćń'("€7üµ;7rōŹTIį0wŖ]ø&śGńžJīōčšFŪ(ŚĒ7WĘÖ-Öō1ć,ˆŲó Ėėķ"ß!īßAųŻčŌ×§€Ź&ā~ćü įFŁįģˆ.Q¼žü ) ,äŁÜ  eĢŚÉŹĄķ+ŽQ@IĪ'Ųģ1'±ėšlHé8!ł'ń&¶kJ'šģo»'öưē«ņÆüųøįOÖ÷*į#ā“<ĻĖÕģ¾#tĒ ŌIåAEČÕźéSĄ)ź īüĻ$ŪŁ.ņāŃDüķČŪćŹÓ(!+Åģģ×>Ęõõ(ŅhėŌÖHŪÓśĮ ķ!Éį6Ż(ō"Č÷”()n"×ĒīēÕę@7éäó/üņ=,ČŠš²~"Óńõļ'ńõĄäŃüŚž+2ńā)āĆ&Ū‹öĒõSńÖ:śßEŲó#(šŻóżÕó į 'é  įŚvóDłšŠ5ņėšZęƒÉ#ŅÖŗ/ś?žļ?ā®čĀå<ŖÕ Ķķ>!Ö¬Ö&ńēńää\ļłŠŖž½'Ū&Īī!$Üū*įÖĻÓųÖéÅē2ōÓŅģ $' słųš śģŲüšŽŗŠ&šüąņąķ»AÜ"ĒżŲąź&>å3ķ߯ūüæ<;ŚžęŅū €ÓåąĘń× źTüü#Žé×Ö=BĶĻęóĖżņżĢ Ū4­öį 4bsl©ņŃ;€ė:.IP€€ī¬ųĆ”ūž°ģ ¼Ä ¼āˆ$Šģūķ%åŻ©źģ4ä⁠Ž#åĄC®ņłĪŅō®=łõ!ÅčƒķwаĀc¦'ŖŃŌŪ™ėĘ뀼¾HłģĢrŽ~Ģį»š;ĢAģūѼJ+€ F/Å0>Å (ėŚÅ Ōå$=¹ ōö“ééÖ7܀.":ēgēɵBž€+ Č)Fćʖä3 'ŲżŪ)©śÅ6`§Gę¼)#÷œĮL'®ē# ’׌ĪÉ:ż‚źŹ,Ļi€•ŽķDćX<«ą¬SÄ·˜>¬Ś'ų §ė%Č&MK õTó$8²Ņ8.  «ęä Q×óF06Ió^!ĒÅKčĶ'.ČļŃę?Ī 0ý‡²Č+¤Ē ß÷RJgBȃ»Ķź«źć)•ę÷čĘ’įžĀÖNĪÅ@ż©ÄjÄč•1q(Ų )łĖ õŌśĢń ’Ó\6žņź7óŅ/łŻŪüłäßāÅ)ä O+ųėķY¼ÖĄłü/ėŁšo0±™)3gųDJéĪš %ŗ@ ¬ś·-$Ē ōŚŲyĘéõłö€!ķü/ļ# į:Šõü¢Ó.¶"#æ ŹŸ€NćNīBĖA/žā7üRJŪÄQŠ%Tń[ąĄļMĀ×2 Ęņ%ÕA;hĻß’Ģ9Ś&AŅWüž Ļ ģBńpŠ’ģĖĶ ²§5čć~ä!Ęś}B"śMuŽE!›äõĘÜZ~IĖ€UÖE=ā.G<€ųn'ņĒ; €;Õ0įłt€ōķ‘ĖŖŹė€ļIęķ¬×üņĖd:Ÿä’żīóšĶÖAsöĀשŽČ0ź×!ā‡9(ļĄ—±ö ż,¤;IŲĖÄĻŅš„ĶāŪ!äĄH Ґ8ŽFēć\ŌńŽ®·ō…|”XC…į€×Žóń±ö’éõŒńåĒfpEĪĶĖ–Ģ6åĻšPĻ< ūżś%ņŽļåš ęō’¾õ/ä ¢Ņ$ žż/&+ %ź åšōś2ą# ōų:@ą»ė%× +ņW-ÓŚ+ęźóŅ’ 0æ öņģÜäń /ĢŻķŌÅüĪßŌ0ż%÷Dńó+³ę  6ÓėKĖ+)L F+ ļõē'ī4Ķ čõ! Dš āĪ1ĪźņŃśŁųÕ¼īõżõ,õēąüķó'ƒö.)0ÖCą ÷²Éąśž\5Ņ0©ó·")ļāåēÜ-ĪąśUÄ©éµĮ+åß)ūÖķß0U ēWĢźŠ’ėČŅåéž!-'ćŻ ē ģ' śĢ ±Ų7ŪŠņC-’b#ļ?3śÕŁ)×6ęĶĖr³=P÷ݟ -޹ż;½7ĢķŌŚčĄ÷ńCóä€ ūž ß"ŚóžņĄųø5 żĖ’; į מŲ=üŻ&įĘõjėį™cńąš%Ė:ųQ>uķ÷čŹ%’?ĻMŹDńiķž v2ä9ć~ł5č8€¬ĶųĖ'0ķ9ėĄyq÷‚ś&Öbk‹ś9Kļ0üÉó½ćŽ5ĆŖSčĘ5öāwéŻ÷&¾Ż’Ūš!ūĖ|ÆŌMĢŻN®ĪļŲ KóŻ\-\Xąƒ¶"~Żį(’čĶ%¦Ä&ć&¹¾÷ś{3Õįł “ś~¾!.ą+åBł3%4ēķŁÉ'€ą -·»ē)j<T«ūÅQē Ņ;B¾ī`€€ż€»€$üC Ę~,½ń*73$ü €Ā'ŠęMęąĀNØ2%+ $üž:¹šA’ūŽē#ņē ķ"€ńõ"Wµå×’åńŚ@ń)ĮM ź{K›åŲ¹4óAéLūAć üÖ~BĻv×ā){®HŠķĶÖÕ€ą'ķōŌż®  Ė÷üœįŲŚ)cō(Ś"ÜōŪefōüµīw8;Ė*ōøķ å ·/ź9. €1LźÄ槏ż®ÕęĢĻä&ņ ęĮP#Ēł ū×5¬#>¹- üÖ×čėåĻ äō’½VŁ S²ń’Ī'–ųV"øŃåoķżę.˜čó #éį žÜąŌą=Ļżn3ŻšIĪÖūIĆē'6-ņõĢEõŚ-ń9ł’?ńĘō żģž· įåū¹ē-&> j$’šö2;źęż®ė(?ńłÜÆ8ēĘź" /?ą Ŗœ šØöęśÕ×é#Žēīķž‚æJݶć+’*÷@ē(ģ×G.. /1ķ䏿§ 7 ēĒ÷RĀęģĖŁ÷Ī3Ų65ų:öń 9¼½įäšYēŻ- įāĢļŹ ÕRĒÕųßöīĒ óķēÕņ%ńĀźč%½īÄ ų(ßöķ’ńķé H*E'·ķ1Ó’ėŻĖłaöČĢę/Cņ¾ćQŠš1įĪ2 ō“ó\6ŗ7“ļ½×Ļ 4ŚŌÜŽöć^IźĮåŻQ·ńܤ€%)%)-#· IåüūŚł/ łÕچ%÷NõĆå ļL76šŗĄŃYd/ņź÷&[©EĖ÷ó?ß åüBżĘ¼; ä34ߣ; ,R'ĖAŹPÓńžė€ęĀL"üē ;ī’ĖįIóMß–örü ·ń~œAŲ śżė5čéZ*2!ŅžīĖÄ üYõŠĖLżŠŌ± 1ņ žżśųņ,FĮ ?ÕųGŻ›ńøāNčŅ4"äņŠ żUīK¼q ę’Aįøõ/G ŪŃīń+Vä%,Ŗøė;åłź:Æ&ø'ńÜ 1ėŹ 6āčŲ+E&/½Ä ÕŠŌ¾ł%#ܤīśDĮ÷ų’üöń-žš¦źŁž-`&łāą‡¶!8 Č“=TĀŃžšć%73Š%IdžŽ [Éąņę™Ō×lš Ņ ×"®Ę* 2ņĄóģ#€-OĒŅoüv)$ō4/Ūēį”ĄĒĄå+ćēę'żóåāDƒ ķśžė3ö¬ŅĻóģ;0ƒ>(VJIĢŌŅŁž×óĮł ž°öµŲ$9%'ČÓ ąÆ}Ś€Aēźā ąHäÉ*.ŃŲ–t꟎f+č M -½)ōņ*×ŃüĘĮEģŚķAĒčēAż;ō äōŁū>däųīģvź2.żć čĖźą4©ŽBV€õYż ¢)žŅżźŃŚ÷öJäÅļų½Ł!īķ$ź!õę ćčL¾łęśåęåōū)„8Øgģ'ū£54Å!·ū13+ėģśŪóŅźŠ·Œv6ŗ;ē óÄu æšļĶŌ/īļ%ŖFFŪ ä»3'ŌącėĢ >øķżwJ— &8É$šģ(É¢GŻŚ,ģDŽÓm’ ¹ŪÓ ł’&äõś€€ś2ĮKćŻcÓāŌ’7Ŗ6ĻÅē¼šÆÜĮėÕmü’OįB=ŲHŪé3l”(•0šz=ŽÜÓ żĀ6§ßŅģ*MõCčIųīāØ@[Īó" £cn¬6ą1ÜM*r/į„'1FņäĀhĪ_ŠgCģ-šūūńĻLį5ōņBEU+ĻžĪšq5üąį($ŪŁ üēžń'é öŪņ¶ōūīźõķ; įCī āźļżĻżÖŠ«éż¼ŁÕŻēąōśéęšóõŁõ9 E!ŹśóäšćŲ’źņČĆ ĖķŪĪåŁ (ųŻ ōŠÕšßūåR äīūįļYöK×Öõ–į  ęŪĀŗéūōš3Ńīį õ ķĖļ:óćž°D:8Č5ż'½š×«Ģė  &æÅ"äŃ ķīaöžä šÅ÷ĖŌĶÜ/®Ē7!²é’ćŚ7¤9ū*Ļ9 ł§łś%*Äóöū±?Āģ4Bżŗ źęHåģæŠõ`ż $ <2¼ üÅŠÉÜ- -łŹ óūóšÓ:Ļ<Īä īū?MĖéčö [ī8õźą Ēü)āāĪī ļ ŌŠ©ūŻō×Ā÷ #Ōā/šõū(×+I3U:ÉK¤’Ķ¢€ėķįģ™<%ķć¬K $ģ}ūĮżģž€ĖQŁ $ļÖöM€gĮ\- `ō&³ķÓžhŚ »ų źń¼}ó¬}»ćŠPüŻå ØąæT $(å€č :cęļY#k3Ķ£źńŽĻ9·lS>’įKńÖ±£OI_üé’ ĪŲązįĄų!Ū"€Żļ13ļ4ŠÖąŹéēėäÅ ōŖüćĖ#!)~FéēķŹµź4×󼒦.åūÕšīĆ3ö Å.ż&ŪāŲżį 3Ž÷Ė÷éÅü'ł*ķHźė’Ļ ęÓļ9Ż &äćģō"ŁłāżšÜŚÓ ĻļĒķŌ.ķ/;»łéūó ūą× ĪĀ(OQŃēšķ+0üHūÕņćöū ż -ü*ō÷ŻĆĘÄó(ōń)ÉŽŁ#6Ņū( $Į¼³ł śāėā·£ÄE·ńį[Ė÷ń×]īÖŁ ńmļū°&žņńÜŻSš÷š€źüęČ/ļ% )ÕŻ†§ńĻäM,ćŻ¹Ģ- "ļÖ(`27#Å 9*įĄI 'Ž ?­éÉŹż G¾ źŽŃÓŚÖŠüĘž ¹€!ĻŲ÷>ź(żÓ×~A<ī9ćøÓÉ=Ü&)Ūę"rūōęHŪMXāŚ€"ÖöD81ųŲ‹ńé¾ķ’EÓ$9U iĖ6<"Ņ޳źW¼ė ń’öĘĘśHöĒłšJ·éžŚGĮ*ó'(¼ēüsé5ē„ž ÅNƒÄ€'6€į.Ā ĘŲ^&ž łóĒåüNךT= ŃŪę€"Lā) Ē:ēÅĘ!å5M‹Øī$,ŁɛŚ®W"׫ęÜ0"ŠńŽÄŠŲÕÕžęäēö9ģÖŚH™ØčL75ÕŽū iŅ7-Žž”ičŸč·īŽóń$ŗōóöö"ō:ŲŠß ½JÅéÉ"Ø"<(.ż> ļ’üæŗćü5įąõāHš%GöLū ņ ēå$?įļńóö $łĀģŚQéĖX¹ öž`¢"Óźąæä Ī=ÖżŪXųĘĶ,ą OųżōäAšÖ.ūÉßčń2‡:¾õź ‚Ā?Õ!!ņ.ä3å5G³³ßųģē/ÉżššÓń>ė:÷ī6&(KQÆóą¹ ų/¼¤&@Ü^#Č.™  M"ÕČ%÷µJG~&øę¾;0ößĖł"žąh AŲÅ£éŻż83Ył8ĪĀģż ą<īüåDč’ņ ī©üņń ' ļų1 ņꨤ4ķ-żģą8&AĢ’Ā®ĖÓˬė³÷ Üūō¹ų€%įŽ ėń õ’ĘöųåG 5ĄĖüōQėÖ·­>Ō’č ēó©×ņ*7Z° āõĮĒÜ÷ēÅæń$āÜ]ĆtłėöP •¾ī"±Ó=#ņ—EŁ73ŪŅŽāŠ«,ŚqÕųöÉē AŚL%=ž čČyŪ Ģ7'(%&’{ 8£½ĢĮūö524łĮ½é*ü%’ź'īóé€0€&ö Ż"®įį%ü ’-%Ę$¤R-ō0ė–ż3ķćAżčHĄöm%÷šė’BŅĀļ!#)ē诚ä½é*åźHīŲŁ6!śĖóÜĪē0¾ńŠ\Ģ UŠž÷ĮGīŹžņļƒóīšŪ4HńĬżÉ3¾2Ō’ś 7āõŚõ ņ:’*ų%Õ¾Ņ’Ćłś1ī+Óā属6éHä~ÕAJ!, !#Ė“ ĪŌ’åõčµ(ųšė1ųļžŌ+Hžßā×CÅš:uōā-ļąź’)øG()ģł"öÖļ%÷šöųöōļLŁ ć8Ó÷鳯É«P×++ąņ»  Ü ćpž šéś XjŁų”×┵ī%Ū ±ųßó ±ö÷ŪØįęKåūź ųä*ńōŃąīō€ČūĢ’ū’æėāÄ śłöžö8’ń Üōųܱłļć%į ’śŅü÷ žō+ļ āūÉå £gÅż ńĘŽÖÖß»++ ÷¬Ó²Ø7’ś$śhóų2ÓāüčłÜD0"č Kß1ÕõøéMÜåU "3'źEĶßIi=ųŪA§ī÷&#Ģ) 1ķš(Ńw\5Ū &©ńCUŃųŹß$OēÆÉźķķ3ĪćŅ[0ūē÷÷ å# ½3Ųķé?}~+ü±üÅŽžXüåż’÷›XDŁƖ“yÕüķšĻ(ąCo€X­ICöļ.č#õłĆś’é* Ę ūL=“ņ^>ń-,ö¢6Ā”ü üé€Ķɀ’ę)fså8L€Å’4;-Ü( Ö ,K6ņ4"ä’Ģ7„ ü +× ė é³&ü!AJėĪ!÷ōž õÕ”"äöģā üļąų.ŗļ±ļÖ ģ°ćż,PŹå ė¦čGš*óög¶(‚Ż?ņęHÕ¦Ÿ%Ÿ’ś€ü Éņ=ÉČÖćóŗNĶŹ±0!åłå¾ÖĀź±#WæøĶ÷šīųé=Ƕ (Óāųā’({šļ0·ĢåöäÜ'šDŠÓ)ršĻHųģö¶ŖāÕąō#-rĶó¤Č ŻŲŻ’ ūó÷ļĻśĪ6 éõ4ŻųäģéõöĻ!;²$õČę’ńóÉéė&#>ĄČbś+ó@ )óŹų-Ś:Ģlō qļśįÜ6 ‹AĒĪŠöÜņķźßįų(±ż#.ż„ŚŁé4æ.ö€Š2ĶõŽÉž śĖrj×FńŠÕŗżxĢCū-ūāü->ń>MÖńūPńčĆ Gč0€ķÓ"§ķ!^ü ݧÕBõ€Ęāę h§ŽÉęęKāćĀ"Žū-§6Ŗ=€ŽĮüĄo;ŗÉ į(¹ĀĀńį÷&EćĀŗę oŪŁÅ(K! Ė»ćģöT"oņ'}A-įźóŒĒ,é¶ ķžōŃüŁļŅ6ķśŲśģ’oåķŃĮ+ŻõØ &éé.CźL.žųåŻĀ:īó&?0 čą’ē€śLžé&Ž Ü^-öęļ’żĢ ŌFžĶį ņŲąė-Ü3ĀżŃź6)žZ!ķ&Ł×Ä Żõ!ūąōā¾Ü.Ź( *ć¬9źĢ²ü¬ń×äēópüśĪń#ų źģūg)±Hż  Ųįö,ō¹ļW6“āįė4śļš1 ńEÖÉĖ(NģÖ2ŻĶ÷'äÕ’ū8¾,ĻęńŚ%š<äļÅm FįäŲ «žŁŪ¾ļ7ÜęöŃaĶė#$ńē ŚĪ ÷ Ł;ļųšųß)Ķ1üCśŁł CÉO2µ.ŁÕõ+źęēĪŚčGPż ņįüRš#/ł’źBüąĀ;ńH²üņöĪ.äŠ÷ņŲ)ßĒ ķŁČ Sģ(09 ąŻéŲ% īŲßö-ßūųŅåŗłų ŗ’ļżóņÓµįP: Łć=üäś "÷ŌVō)%DāĖļš+Ńļņä÷ ņėÄéŅ ŌÉÓ÷$įĄ)ūŲ×2ą( ~  Īēć4č * _ßōGėŲ¤ß÷ÖąąūÕ«67Ųą ®ą*Ķ&_ćžüė1ėīļŪöĀĪ * µŽHÉ$£ø“äĢŻ’Ÿ*éņDĀžų(äMœ}ē*¾łą: šß÷ŽÖÖŌā'Īå÷“ŅŃØū€ń6o%8 ™ä×ŌĮ@ 7W_ā õņ %Üł *]õŪö¹@ Ćö>€ų!ć’÷Éģį Ééō€"1råöźü\ń)ĮAŹ ½ūū'a²3 ,/ģ+::Žt1*×:ׂ”ÜĢ'Ö¬(éż?$׿ł.ČāĀ .ńäķŅLęQ!ī-č’õ!Ćć'×ŅąM —ņłŚŖķ¾ĀłöŹŽ(Įź)u×Āļą)ķė.ŠCž±ß)šī×īłž'Ūņ ß ßõķŻĪ9·ķé*öWśļįŻõž%¶óīģŻį łß8õ$׳ īģ3ōŹ»Z(ŚE¬ļóĖįCĘöĄéķÖŁ ŁįėŪķō0³ė0µ :Śźē÷ļĶ#Įé¾@/0 į¶7 Y¶ĀcøדņHįāį&żäžåķģęćL“š’)äĖG.¢27ōÉE%ēa·ģŻiÓJ&$")Ć95ņżŻ3äā Ājš ŸĀśóŃHźõó_¾Į 1ēż.ó5®"ķ%Ł-ėźł·õž v·Ģźį0ĻÄSõŖHÜ2  #Øē',²%-„O’"lę Lł/RēÅé]E>5ÉķažšŽG./ŃöŽG=ÉŚĆ% -ž26ō4$šæēX“Ö äĮń}}śŽÖö…š#`ēń ŗ.1ł…Ø#ü$¾1ņĪéŌÓłßō%ŃīÓ«?’żĘĘ Ÿęļ&Ę%Ńął¼åŻķż%Ó Üź·ü(¬ü-ė=’äõĖŚ9ŌķĪŲ&É€Æ 6>ŽÕėåGöėäćõß;Ė÷ķā€(Ģ8åžś1 ö÷ē÷NĻö¶ĶčäŽÓķĻBū č1-Ņł2< ść8ę·łóōŃć"éÖ:;FI= ę&Ł×ULMģ 6į°Õ×ėā×*­ß€ūŅķœßČ ė4?FžØyŪĢøBR[0““ū/°3øÆóĪC‚”¦2ś&Õ_Óåéäę&ńŽMcÅŚxć'ņ#ׯ(é3Ļ+ÉÓĆž2ŖłŚL¤ž* "• ēī17'ßń¾ū+öXļ+I—€ŌJä”ńč.šš]“ŗ;ø-įæģP϶ō9.TC:ÖM·š; öŽŻ0Źø:õ2"C(ŌŚÖL ½ŁĪļāÓųŠŁŽņśģ"Ü4¹óļ@T(ĢŲł ć¶_2ž$×J7čą \Ģ$ÓB¹ē¼āMžē Ņ>Ģ.ø  %ą @rA"üųõźÜųśJFłēŪžüņ»9’¾ŌŠ^ņąń Č]:ę&ōŲöć" ś)£ŗŲÖcĘ ł* öéŅēč "6ž 6ŠĻŖ4ēųIččqŠ ³MęŠ 6ŌļéČŽ.āVßó ĄÓ;ćCB įŲ"Ł I’õµŁ3--aāżūąųš ųłįų< ńż 3.ļĀ4)Ü įīźUā?ū(÷Ķö-[")½%F’¹×ä>_5ž’ŗ| ÖøäčäÉÓ’ųūBćV7ń0$'ėé*@Eõ’²ņłMŃąĢ×å3āÓ“ ¾š /·9Īė9D_(Ѷō%ūļōŌ8<éź\ŠÉ’ģęAŪģÄåŁļ)Żī¶¤QŃŁNŽą ń÷õ[»õüĮō4\hQĢŅV ćų!ēū²÷™'!ö¹ģ›ÄĢĖr>vį׎¹!€{§‚öXŲõ:œėKęł÷š˜€ü=­Ÿ’%ÄłźE€~ ü²ģšæ’.Ųķų€Øń%’ČŅ~£Ģéāū€żõ NJõ”aČFÜ¢ń.ėĄK„ 0€€÷W”żĘÉ38ÕNLöHMÆż ōN!Ż9€ĻL9¾—Ķ„ߜé϶9žōĻ8O9?"õēLD $ģĒ 7JżīēAö ~VÆēēJž}€ŚŻ¾6"ńł\ó’ETś¼QŌļ°Žą óĄėöšŪžPé;ŪÜŪ Ō%RäPrÉÜķü}5ļé ƒA­ļ€',"ļŲ0ļā+#C®ųį•ļĘŻ„ÄĮń?.!?ūō* Ū$Īē­-K°ōż#iįr½źØÉķ2ļ·»ć %’ā ŹłÓ’(ä'5€@€Ča8 ńć/Ž3åōķč#½ęż€ŸŠķ+ü"¦ņ²+% ¾Ž€ŅčõŁ ŚJöŠäÅźļÓ&4ä)6ńf8ąŻņŽ=ĒGŠż)߯ōŽŠłā2¶Õ(ńAī;OōĆĘ?žßīļ£Eīńćóˆūń÷÷ ©)äEŁü÷ü$°ė ŗā!Ļęļ’ķ. Ó -;ę¹#įQRä žģõŪśÅ-ž!ĘŁų ččĻ=÷ęʀąė¶ŚÓ). #ōéśįMńŃäæŃ ū&4Ÿ!ż€ś]ģ' ĮŃŚJę8-&;µć ųķõb +Ö"½čČęż!åāK OäÕ1¼’öL"Ėļś'/NśĒP&Ž<ŲĘ$ tµŖ<ßō Č÷ åŪ¦ ņAEC4 Įū3(Sņ詋< śź!õōE¾åō9Ėöå±āĘß"Kś&ńāóõŃ((śųŲåĻÖüzį죫$¶éJ ĆŪō’ŗ ŪŠüó$źåĪĶ$ Ż„ōõłų×ęŲ'&÷ō2ķš(źóģä" ņĢ)ķ°Žę ŽĶ āõ”нÜüū ·G--ł źŗ4U"&õõš#’²ćę&ģå€żŽ śśž ąÖļśČćę øžūķü¹DŅŁčž  ß&ź­Ķåę Ä.åA0½&ŌŲńŁżėäżł4‚-ęō~ńö$ė+ł6ĀųéĶŁ¤š“¾ Ōā’V ŃŪ ÷Ļśģ ;h:A-ć+%Ńčšm0 <ī~ĄźõŽįŠR).ūf€ ŽLų€Ų.’×"õ’łüŒ€öéZŅ},–ĮļDwżv"ŸŽź%„Ę9 “2 ą;āģQį5€¶ å>KūūŚĀ,9Ē<åģłĒļł[ÅóŪ ż …K-µŁ@žéSū-ū&ā(śüų³(Dģ©mŌ+Ī^Ōß,6Ųµä ÷ū''t2ģˆž ę, śłĶ % #÷å‹C;śÖ÷©NļēöūÆÜü 1Ä&!÷ņ³ "Ļįļ~-œ<įėģĄė\Ōčāć*ėßļĻ-Ā*#5ÕŠ ķ'7JEóhŻ£šŽÄĶUńūóųŹj×A¼čĮĢ8 ߢ 5Ū›ķ “00’ŌG'Üåōłõ*@łó%šé'żšŃüųćŁģė [ĢžõōńĶ>żßŅżÓ%óq’'0«ļéż÷Ø%œć7å$Ń£-ńšłčķ¬õ%3 īkä`䀁;*Ēזē×Kų1.Ų ōé$Ą ö) &ń Ū>8ż.2DWRÄKü%ēĄoćÄć¼Hß^1÷c‡ß ×C0ł’"ßõWĢ".ą!ÄÖ v¶īķ’6=ł×ØöåÄžå©ķŹź½Mm 1G?›,ĪŲ,ī6H)čõdį’ÓķėM7åc² ,D€®MŪ×ī*$7©ŗ ļĻš'3@~š ĄŻWĶ “é2JĘUæč®Ś5Ń6¼ēÉ €Ü€ŃÕå¹ßš#f ÓĒŠł~īöU® 9iĶŻ_ÖŲéäŽ ½Y9_ü źC×% ’Č.Ü1į/J|± ĄM:<³‰÷<ĄÆ2,Bóźŗ€ µūŃW`®Ų,Äöо"Ō#įײ' Ļ Ķż_ļś5™~ ćŗ&3ęŒę[ļąüżżü+5ūęłė8čßē6īėēõóÓ ŃGŠ0ł õ-ÓāåŪ  Ļü ćņ$Ö£éī'öŻŁóŗ"0ōęą3·?ó!ļļ!(žĶųĻŲ!,ź’7É:Ōžšöß² ūå#Ō<’Ņ;’Śśī4āī Ų1š3*/éŁņ×ō éüņéŃéĢö ׳„šõŚ\éķŲćģ÷õ%ŚĒĮżč #–łčąŲ<č¼č×ļõķAŃż ƒ÷ Ź5 @ē÷ēļĀ(ōėG 5ĶÆ¬ "’źBķīŅWåŹŽŽó>r· ¾38Ü1 ʁ ŻT+ą –ūŲāÖń T2šäąūśļ†?WŠŁøęź'$õŪīéņ(č¼.ÉšĖÖ7’ēžžęc’ņŁāåšŹžÜķöÓ ņłčķįóļ $/&ūē*’·-äŠ1.*ĮīUē'ö=ė¶¶ŻÕłm÷·ŻŪ%-' JčóóņćčģŲh0ćŠVļ’ŻŚP$É$Īó³óöų(Ź+KćķŽģ¾ ’#ų0źŚį 0ćß&1æø¼ ŗ=™ 8åū#ņ®×÷īūė¢Źہå=éń G3łžąś Č>°ņ¹óĄ ŅżźŚ1Ž-&¹(ō¦ß )A1é”Ü€Ęė; Ü ž(Ņņ7ń"©Z˜ß(€'ż×Āmujūģ.Ü3ķb!ßÕ ĪģŹUė'·z÷ą³Ń‘ŻķŪ€¢ŁėŃ+@²ƒŽ#“KHæų'ęõQ%× 8Ę ō ŪćĢØ~ōź6ą¢š'@ėśžĪ/Iü9(aķł5ĆņžzÉŁ&ųäÜKÅ æś€Võ źbŻĆWąÕ÷8€ž¦ņ~f8Ä~!ż©kŽI#żÕŖķŁś³  ŅDžæöHź0ż"# žļÕ<Ļ óųąüĮ+ šĢ č&’Ś!ń-$ ŹūĒü>ņ2“āų)&üŽBķö!ĆŌł/ņמ-%ēāöåēü%ā.ēłEĶæļģ( =īź,ż š śķźJÓžņŃź3ę!ŽÉžüĖŪģ+ćņŚ1ōEŅ!żõü÷č ÄėņųČ # ń6ųžćČśæ5 īń÷F=ķĘž<Ū'$įĢLKėź,Ļ!ÜŠī$!Ö3ģķ½žŪü+ĒJĶā÷ļĒĻą60 źäśģāī)Ū!äń(ō ÜļöĆ&Ė;ÖĖóĖėĘ_Ź-B½ 9Ļ ×"ņśÆ ŪK!Ø Ž÷õ)¶œļūÕ10€QÅŪ3’J'¹Ū $’ śü ų †ģčī3× ė3Į$ćé$ś)ļĀóöż å™ß°/ŌŚüęTä7÷ųŠÅZ"!Äó$ļ(M5 čęńćÖō ;ŠŚ:Ķé­ćä²å¹ŻĻöŚ Pņ2Ņ!˜Ūī€,šķ1EŻū’8Ńś/Ī7ĮėŁ€Ėč&õQŗR ¼ņ3„ńĖ Ż$5Ź5/;žLč“ņ\Ū(jßåūŅ:Ō¤Āšé÷ ’žńüä&ģÕł" öč#ŚŌö؊ū·m$*ėķ߯Ō1üGģ ©žŪ¾ļ.®Õ'ķöōķÅT”ó)˲ē2FĘŖõĶČļÜō;čę"5’śēYCŹ€4éū0ńÉ R%9“ 1 Üåē =”õ/ ö§ ńū1Ķ€cĀx°óŠćęė(ĘŽ°Ā%ż¾ķÅ<Ė{«żf> ń¦ń× $Ē b*DSķ?(ćĢõ¬ę3üéŲęåģŚQ6Ž Ķ*ūŪ)ūA€Ž,ū,:üąóĻ#ķū×ń$õ÷ÕÓ*$ÄŅńņĀæ/ó=Žąė$8ņ ½żaäöŠ’ļšóŻé:ĖŽņėåõćŽņäģ/ ēŲ»ĻÖ„č½ĢōÕ=,%ōÉśōĒÉš>ÖĢĻŖü (Ńįż9śö!-’ĒņÜ¢“Ēō:ėąģ ī²Ó×ÜųĆEĶ1: łGŁö,&įś’ā/É)ą  ī®«ĪÖūŌćÖ ó8’øžŁÉ#łDD'Ę/Ūķ'ŲQł'=’"ńū#ņĖī9< ĄQźģĖĒ)41õęńŗŁÜĘÄēĒä)Ŗµ1å%7ūć)#ņÅ) ņü§›āTNÓĒFé, ÷Śó ž Ķ’eÕ&6āŠ"’SŃ8Ų""é>õéŅß®.ąFļóٳć߯6ń#ĪźćčĒŲ! ŻųēęüĮ ś,ėäŚĒ4å,Ģ· āņ˜,lń9öŃ6+ėĻöI;!±€ ś,óFZyģū '[ŲŃhéŖ+-¾®Ž,ÉńŲšį ·ūé2)Ńųī,,ł1ō÷$™Kä@Ė žæVōüć)] ¬4!ćü9R¼Ö1ŪĖ“ąžųM;»4ß÷źę ółŻįšęü  ó<$ōp,õ- Ż#:Ęå ÜßżēĄå€?5‘ćv¾11Ŗżń,€°eāŻųÖ0ż½śńń1CŪįÖģōŚ.é&.#¬Ęv§Õė&ņģPLæ?Ń ė3ź9*Wų ęöG*ā'ķK=%ö’) G€ē ĢµÜ JľóĀõDÉJ8O ä™& 2LłēŚĖįļ@+Täü9śÕ}ŲłīćѲä' =)ń 3ėĶūóPĪ)ĖžĘē/ÉžlLõŪfÜ1“h¬ŁędļåšÅö"ü ½ óģc»ŗ~ļą$ąĆ~‚ķ<ł'ūčōīĶ$Š6éń+  ģš)łųĢōö5ķ> ł2'0čõ *ōŃŚē )äóŲųī.ļ¤$Ą%0óͼ÷I'ēśż)ĄžčßNŪ&öķ/ś?"B+Ö%ųźŅęMéģŚįöč&ĻŲ7øQØõP’$/ķžŲĶóś7żĆŃÉ ó,4ŹŪŽž9;ŻžūżŹŲīø“ĪńčĆÅß³Łć!0 7CāįÖśé)>ꫳŌ'õļÓAūUšż śņĻ!3=¹÷^-ń–"č&Ū I"r Żģ’é­Öb1ĶÉżŌżńģ’?»’/żńǽßÅö®ŃS !+ŅōšÅŗāœ2ö²éćē ė:Ļ6ūÜ ŠD± „™ńÕ+ ,åäī¬,Ā’ Ü“!’Ńęå3ÓŪī Ķąō5I-½śńūß/6ģĖķ ßÖ ˜ģ!1īĻ?¹Īų€^ß(žÖśųāė żXöŌč77÷4Ż Ģ$īéĮÜ+ļ,žōŃģÉ+Žūųé·žÄõś'Ų"Xū ź’ōķķąŻŠķłżū1Śłm ó$(āģ#”ųēŒ+Ņ 2uFš#,÷ž²÷?Óéöś'Ūć¬ēģHņ2Ūė Ü ÷/GłóÓ Óóż ŹÉ8«ļŠłĀźAžćõ%&Ę­Žķéą7 gśŅŁ.ठł üģ’‰&yūFL>ģ$žšæÓÕ#ć%ūķõŚ™Jv*÷) ų’łöüķų!†łæė+Ž łįÓē’Ėš×õæĄ’ĪŃŲ#šėÄįųŌ UÅģ7!Š%½Å'*ĘŌżŪ­Jö÷õ (Ī ß ū/10ć<ŽÆžŁź (’ļśņ󱎀 Żź¶öŻģR@šź Ó%=\$õż ż é+)@ūµŲżłųčķ“Ų÷óü bś€ņļ īFüĘÕ8żX/)ȔųÖÖLהģÜ»88ĀžCŲ8äŲŠļĮžŽ W#ė5žøt“čÜ4=Oął&śwf€åVķÖ±šüē4«.ÆēŻ«;1a;ļŹņ€ß » ½I#ÉČłŌįSīŖń ·#Ģb0)X2ŠūŗŠņ'=a+b8¶Óę¦f5²€óIʝ/,Wł@żŲ²ŃäÕ2&į Łī&üĄ4ī é ķW1ĢĢåļõ±>ōūš’Ś$8ž ńō'B‰’ &›4’ŚĘł’@ŃėÖĒ×Ē óŅŅ ūE@ņ“Õż@Ją!éÖēčł 1æ¾ é€ĖNՁ°=ø# õõÕ& ^Ų:9ķ{ ]óĖ@!ųŚ'š÷ūń ĘėŪ Äń[õ)BėT Rŗžą’_GĪ õL'ü&ł.€€śÓõꐷł«ÖMčĖĻÉ€ŻŹ7ø€ĢU²čŲ”) ģš@Ā0Š˜ åü¢č2%ųŃ ENõķō*™ź·%ųą"Ņ!ļĄ ×Ōn€ńģųÜÆ/nī ķś˜±Fö(Ž' Ńłéė 6īĒ ÷ŌŚX#ķ ܵ ėźßvMūśĮ ÷ŁĖ=½ūĒä’ą,į Õčł $b Õ Ł+ČōFā!,Ń(śK`9ążä“ļą9ŲšŁCūTŠE“DŌźų—ķŁ!ģšŠņ$ņøēÕņ ģ »żēĪöćņ éŻī÷ŌÓŻü#ģRe=żŚš,W-X]š$ ūīHę Ū÷žÜ³—E Ł 42Š\ŻĄŗ ʁšŻi÷õ3!‚ą!ö1śŪ·¬}AäŁß śŻ¼+č!A”ģьćt <čŸ;Éd§Ł2õŻ¢ē~öų±0=éž`ØF bBʲ ÖŃīį#ü23;0 ~ŻŠäÕĶ|1÷Š’&žŅĢ%7Ķdūō÷’ CfąņÅłŠ ŁņŽå3Ļ įūč#&å’! ĢóSä ~#ĒŃ,)÷K͹üüŹūłūQæ“õƼŪÜé—N€Ś*½ó É:$(§ŚāšÕūļā8ŲļSG­ąŹŪ’ Q’F-Ęņ•Ģ0ņ#Äć0 ķīIéĀ7c÷鄜cīÉŻ.®Ä<寨ļ7śöFŲ`\Ō  å N7%5Ģųźķ’éīĶęŲņ/ čŲ„śž÷õŗķįU  Ą@/Įi,ž 6 *Zļ ÜõMÄ»1^żõ58ŽFŪ,öõ$ dåķŲ’8ĶęDJäģ¤#Ģ"ŅźĻ ź¾)ŻŽ1;ąĻÖ'ßU ė×Õ1į’üĪ+ŚŪæčķ*üą ļėö;ąķ Ē?łļēĘŪ Ö=ąb,Źįø!³(Ķó÷šŹ9/ŽŌÄøĪīYüŚń:ėóĖ9U’śŹÄāCÖīRaģżŲåć꣜ńé åŅõēĪ6 Q;ÖC.ūÜ ķŅēļėĄ "Ł Ēü!LŲś?ÓĪĢåĄßĄń)ģåģ *"ź ;"żŁĻŌ ł ׹ńG„ä(ŲĶįõī [A/ źÓęŚūŅÕ¼ÓŹāó!Żć%ÓØ+Ó3å2Vłē$ ^0Nźė;ŁéBÆöįĖöé>Ļ€õēņėó!ńöæIōÓ š- Ę5ą÷łįīSęßē(ĮÜų0 ļ ć,Ņׯ,&ŹŃłż$’ĖHŖŌęčū &ŃąŁ×#ż)ń éŚÅ Č%Ī <ßūŅųāóį)īłZģÉōģšö³Ł÷Ļ0> žŚŌ#Īįķ"#üö¤¹ž ÖkĄ²Ā/åž ė­ć1źąįöņ¶ū×Näķ.(õćV’ōß“×;*'Čśł2;õņ+2’²Åį+šü ż4'īūҽŪčņ%²ų pōäDį:ē½ģö÷ĘCŌō&żŚųõżßŻXžõ ' õéłüĶ,ź:šÓø³Ī = . %Ęōšź;Öł"įõ1S Ē5!ł$łóŅźüŃöåį¼ÖĘżģń#ŚŠ &ĘČ·ä5½äęōśõķŽ" ž’÷ē9ģÉųOG’ä’ŚąŁą6ł  0õ$čščĻBōPóB=€ąģ- µķ UģŸŗO#SņąE*ź!8äķįĪŽž6žéåčģķ%JÜ&€2žå°Łż¶Ųč ĖņEä%é×čģź5, šū<ą"ćCčō,čI¹<Õš ėņ9 ćōŚ X ŗ2ŁōNĖžĄž!īĶųČĮķKŅčŅ÷Ę.,ūżJ$ÖXčkź óōś+ āŠ½ū’ąź MĄę&mõ(ņåö4.ķE"į<č ŃÓ¶ŖŪņīDXČĆ ĘüDQȽ’( ī ķśŪż< ńļŹńņźKż’’įł9 4üźEł;ėŅźīœ¼ö]'üųęÕšģļłL0-ėčūœĘĒ+ļŻ÷ģ1»čµDįC4ł27Ū.ĀĶōåŌ=%ß-!”'×öģ<4÷šØąź<‹ŖõEÓń÷öŽVõśõė'¾łīYīāą HšąLŗ×#ņ*0PÄŽÖO"ė Ų'źĢ:ėÖ.÷ (æœĖU&§'šĪQ¹3.įŅC:čĻ6-śļ)³cž ōń'йūņč T¼ż³Ņā*Ūļć0 ŁŌźÕ¼ā’ J>õéš (J8ĀAēōµĖ/7ņ€€Õö€Čä€õ\BZ$Ćé4©MɁ€ę°:® ’Óæ*)†×%é5€; K¦€PPQ`1„ĻJ’­ł€ ĀÓ>ģąZ×$ üś½Bēł.š€Üeā‡oÖYü€¹ģKļ=ŻūKPš€ķ.ąžĮDdŻū /Ń^ć śD'6Å šŹ)ˆ&€ą Œ°ūNA*1ęŌäņ}Ą0Ž,ļīńŽ VhĒĮĻ+1Ü ·ļź€ó÷%Ž'ö2ó% ,ń䱌’ō ō#Ź ę@?,=ō®īč ßżåūę¼6Śčö F¢ś>ŻćłĻś.éµq"Óm²EŪ8ą#Ą'ąńĆŻ’6ņ@"Öß ģāóļ422$ŌõÖ $Ų×ńłżóģ äŁ)üõž! ŲößWÜąö·ĮęQéÖ "ū=Ƽ×õóķĖD śĆć1Ļ?ŪÜüE÷ö3"ņŲż×óüÕó/÷žō’ 鱳ļŲüŽ«óņ§Å ž?ńĶžł ī§ōøī"’éų\ĶĖć-śŚ"÷įźīŅŻŚÜń䚦ūō¢śńāŠĘ(8śźĶŌē1õ"å#öŲ,Ŗäęå* ’’ įäņ:”I-ć¢õļö ķŁ ²ŲóīA÷ņēÖŽĄģļ īę<Aæ-ōēŚģ ūłŽņ* źŚZėŁėÓ"Śļ ÄŻłæūėó›öõķĶę¦0?¹ę3 Äį¶žäĶ)ŹņĄ,æ›śČĮ,ń’ž3ćĆżÄ ę4_"(Ż’<č·ćį÷’Ū$ō ŗ°ńšģĢAŅč ėółźŪęē Ś2M-!ņĆä04Žę"ŽåęĪöļīĒŚų¾# P%%Ü1żķķļżķÄŃćÓŪč7žöĄˆĶENĘ9+ŁtĮøāc%ĻK€ņݳŗ÷ü¬Łģ4Ź<öāī7kÆ)¤×ŌżöĀ.šį ę#õ­R/p ī]2ś^:ļś®ß ž¹åņŽ §.ģń+"öšųšŲŒĄ"åāMŃģĄĢ<ņĖŌż²śŃ϶ōIļōĪß$šńåšįłÄÄŃééķ æų @Ž€į͚Ą A”ŲO’ü3Äīļ # €@KaP€ā…‚Ė!Š׿Ł"Ć_%•-ųŪķń³ōʆ4ć€ņß1 üįż*€5ļ+ƒ3€īąõµœł×įŻ €g)Ŗ#ŹmÉā” š4<łęłū ÷&žķ÷€żü€ŌÜā:ō'±õļ’v€ø×ģG Ż›²Œ@į€}éģ×\Łkņ·~ æ47DŠ7Ū~õĢōqé„ ©"€öŻlķŽŻźēūn+³ !#¹ĘųE©„į’'ׯ/-ĄžI÷·1’;ĆÓäö€ūįč€+ó=x¾™Ąņ©&óóžƽųėĶ)ąķ“'øŸXĖ#éYūŪél å"9hś3į #¹ģ/××}ä?ĶÉ ōäōö%°35õI6"ōźęhąį$å?čŅ ß1%CM„Įžļˆ™ĻÜ Ćś(”ČÓŗ €Ņ’ćĻ|ŅŅÆ*1 -ŪØ+M8ļ%0ē ŠŌź×źķ’–ė?YĀėALBü Čׯū#‹:QżÜŌ“ģŲ CF3,UÜ’ėN×1 É'éNų÷ņĄĀžę žcIķ-īhźą°12įYóåėŃ$~źū%Ģł“7čõĒņ,ėŽČĄęŌšÓõī ò.œ¹±¹?->Āž'% ģ Ó»’"’ņÖµ /Æęģ€×”4ćnų±ÄŌ÷čhģł.ŁR 0<"@żõ"łźūõūōę żĶ×-ĮźŚõå°ń3G9ŠŻķ ŅńŚĘŌ źŻÓ),ĻēŪü(ö-<ģķ"0¹ģ)» hōŚō5ß!Ū;÷æųŁŻ żńBįŖŲö19ÄņÕżĀĆā’Õ^¶æŠ¼š<=ņāÖł[ Üķ6Ü č)ņüń; *ķŪžćžć'õ# "ī,üīä6-’ĶĻųęÅĄ.D*ķłö$Š÷ų’ öųŁ:ūŽģå öŌų1šżļ ó÷ŃžśŪźų ųķü'äčüäõŽ žēšüźćĶõDśĮėūÖė *1 < ė"öÄó į$ęųó÷ é× ņ ż’āń"īķ#"ēęś ×ęłž żÖŅž)žŚåē ņßŌ嚢śĖēėž"ÅųKÖ  ģŻķå !ʀł#żéøó#ŚČģßžš"ķŽ•¼ų $čŪ裿UéGõ$ųć?śŽēō ķ*Ķü5öīĶdźžłś1ńųĒõĶųĒž€ū’ßä(Ļļāߌ1·“Ūą26ńĀö ņ(÷ Žé÷%ņĄā)-!ļĖ®ēļ仞 MŌė”äĘēßžķģ)ÜÓ24éĶķĻŲ1ńäó¹÷ģł„@6²śŚŽū#WśžŃŲóŠ’}š3~ō-¾)åāŽóėŗ4Ż’÷ūé4,ļĢĪóūłØ!‡}ü~€"+Ÿäs®ē݁ ŁŲ—Xót€÷Ś(×įīõ’ē4H€å׫&üģĪTź&ś¼¼ėšā>ß0!Ķē}ąü’Åóä; Ź[żsśšĪ„ Ż'…N8ĢĶĆā3ÖMÓL’ä² ń‰!ąµ€?/ąĄõµķdē>Ā'*#ėDfō/|šöėĻĪ;" ĪźPč"łŚ]čĪ (“ó%łĖ÷ņēēGS<õ Ķ?żÓéüę#ļS!fŻ ×īVé,ćåž;l€õēf&ąK @:ē(ĘŌźå— õ[ź‰ÓHLīāūöį&f&öõųĪ&ėžūķ©įÓó ŽėyLļ,ć#Īö=¾üGš<Ģū8 Łč²å§ ī8 ęČģäčääģęą.ńēīÜ ö5€śž!ó=čĖAō ßųA FĖÕūM3Ž26V9 ŁCöüÕ÷įęūš ļ)ŗ- īŅ5 ėAōŲJž¼õ ö  āę$1ėņ_ł"2Ė0½U3ER Ģ!ķ²Ń ŃņMŽ ūšØ'šŁ"Q® ü%ưĖ#īķū8āu@šķ+õżŽā!ļż’ū   ŲØä,œäü9×>c$€$!Ķó€×ó”ż]€ėDēśĻā°æ ’ę)&Ą*ą’õ% ęóģāŌ†RļÓł0šdŚ,ēæ×ū,ćķCQ"”/€Oµg1ž×å /ęžńĀJēĻć± ¹śAc޼Ģ’›Ąé„óå“4’cWC+:!ū "ä0 Š)ŗ : dģā 뀵XĖāśī˜ée¼ćĘę2ń3ŲęłżŠ "ū%ēėÜļ1ß)ÅźöŽF ßų)Ųų īż-Ś÷ÕÜ%ąūčšićō:ōÕŪę’'öšöķ÷ńž’é ńśļ꣌! ķąß ļą#’Gåčśį ńēæ= Ųšž4ńŪņū ė +Łüėå’2ę įü’ń čŃvé.éųż’źóŌõ;õį9 ųę ī@éÉś ē}+Üūį¹ü"Ā÷ŅūćÉ%’Ó(ć3(ģąÓį ŹŠōć&Ż\%ŠŌ’ėę÷ōųį;ę%ēŁóäÖ4ļ āä­ļ ÷,ĶāŠ+ķø)’õ; ōPź' 2äDT!Į ęŪóéę¼łõ õ÷ŻńŲāöŁ5÷ęōŽåĶēćļ9ä'ķõĆ3ÉüČūö%ŪąĢś ÷ÜRļāg  ĻĢóūź/čõNč -’×śĶŻ īśń­ģĖÓ÷[ ųž×ģł×?žiŌb łōÄĪ6Óįīó”-óßäaé(.ß'¶Īé+Ņųöīų4ėįéłļņā›Ü&Üń'õ裦Žäč ÅšĮžń6ĄūMŲęgōŹŹ\üWńöż"čńFłIąčß’ ¹‰Ą©CÄüėēķĀŻņö~3 ¾Óō $Żźüݱä"ō6ļš?¹ö“ń ,ęĮŽłUŅABŌņżĶ1-ӽܤīŻī8ĀäįÄ,ā%¼ +ŗšB °"pĶ%ėĢׇüB‚öēB(ĶĪ8žž)žķ*7ßĶ¼ē«Ł’ 0ää īõ,žŲN Ł9ģ=ķFÓö0 ÉĄ?7(ųÖÆµĆöę²ļĻ)üļö8¼÷ü€Ųöü’ŅĢöæ¶Ž*AśsžÅ’±æ,A÷(¬+ā12@OŲ$Ś"»Ü īžµ8ŲģÕ`7ŗīģEłé #€ņ#H ńł×€šų#0ōŲŖ¾IģīOäč ßčŸN*ŽŁü_'ÉŽØ “åL;"ų Ėą)ÉÄ iC;«'mŪšHød€©5€ć*„ūĻń07głZäū­Õ9DŹŅÆõńšXמ'w ŪXÜļ) Čī(ȵćńQų\ĘKŚLßā€ūĶėŌņĪøå>¹Ķ&Ćæ§Ż.!Ų> gĻaMuł€žsļ76øŽČ€ œOHä0QFą-Mµzńū5 ė!07'½\\¬"*Eć €Æēü÷ O0óŅķ9OH€#š,ņ/J-1ßõŌóź5%MÉań²-°)Ķ "žI‚-āćõŌųÓ ØėĒčó4ZŲÕ"õņذOüĶļśĻ@ēćéē!9ų8&¹ółŅü7§åķń (Õ Õ²„łÄ’öķ żéč1!3)Å ģC$ŪóĖĻ’įč ÅžäßŲĒ"żī.±öż"Š?Bą>ćāū ü'& żĪŁ"óūŁ!Õīģsžżł č°1!+šš:żžO W Eļēż Óśęõ/ńŹŁę.ŚŌųŪ+ņ¤öT"'÷¼ ėéź ķŌ 8mļ=AŽłż €z~¾*¤Ņ8ķ4īėŅb’+ūŃ>PŽ$F$58üjŠ@dšó '7(»°p³ŅĆ’.®Q£ąAOų&šĖF[‚¾ß ’²ņן÷’×°@čŲ®¤ŖaD&õd'$éŽķęže×"č*4>õVóģæüØäŠ\Ö©(Ö÷õĮ$Ģ*ź„ģģķc ¹!€č¶ßI1Ź\8÷×CŃśĄK)ķ$Ž7ρü 7śā+Ķóńäłłī%ŃOāøż8ßö)ļ%ČżāĖ$Óó 3ž źūĻ’bņ×īōUū•“Žęöł "±#źęōŃ"Šö²J` Ś t,’"ļĄ’ 9äū3łĒ÷8ö č§·<éć½;*åõŅ÷8¼Š>ń Iš2žńš%č×5żŚ4**ó ęāśŃōŅė¶ų&Ī輨 ņõńšōł-š M0łiōįČ“Ō)ō$ŌźæõJ/ć ›ąņåŁ+-īÓ÷  5cśŽ›5@ Ąó9ė /.ī9żq /\õ-ōž L~€ūéó@ē€Ī&8¾ ŠQŹ‚š-VGVū“÷ .~Ļ#Ļćü÷3õćZ(ä×ōÓō š“׹’7Ł å"Ē=ń’/ 6Ļ ¤NóńŲźH€2ĀMĶ6 ¶ņ ē,ÓCśÖ²`€÷÷ ŪA }Ŗ9ō@6”üŁäķ8 €Ł7ų§ä¶1 †Ńś 〲ŪsĀĪčĘ+Ń ¼%÷>ß·üā¢,äĢ1.Ä ūļõ>ĄöŗSSRō>ģļłėf.åŌ€Ųéå÷üĪ.ųż1Ö3ņC£ö Ā&éāą@AÜŅ\‚ēÕ õ3ü=4ō Ō;.Ł2Ź źRóņóc„ė\ × DµŃ8X­9öüšķōņnĄWÖ}Ō–ž4·ēHĆn-/ žń C- ‚ $"¾ūŁķ Æ!ūų䚁 ՞ŗÖ‘åź¾&ŲKzŪ"ž<. óīüĘȽńŲ—šé .äéĶōE€TŽ1¾įå6”ØD·ż;ĀĪŲĒū«±ńōCöÖ1DQč8f2ś9ē¹ €26ēŸsńÓY±äŲńÕŹöZī=4õ Ņ4š3ū2™įćkbü Ųõē3C¼ÕżŞ ÷šÉģŅż?ž³ķż¶Ļś«2zļÖė ė”ļKųļ)īü) ļüś öżžöżŁ(Öé/Ēóūčßü $óčśBÓ <ģ ÅÓö÷Żīō&ä5šóć÷×ōšźųś'ź2ļżąīÜģ4īEż3Ūķš’ ÖōģµĀįėļł%Ųšå ł÷ąHĪų0俣š+÷ éīóĘļ! ēźć2ūę9įįŻļļÅśķ:ņŚļėēī!āāÄķä  '1ŲŅ$k33ų±'ÖŌżåū.īšō Bģžö ‡ķž)7Ń:Ņ ¾ Õ­ų0ŁŁ ÜŖÄėŪ: ńĪöö5’E)ö°÷DŁßTįĖóćä ßćß $ šÉæü70Š ¾. »æŻčįå.ķ9ŁąŽE/ēą ¤×ĻŻ ž ŚżåŹĻš£Ä’Üś-"U@ ģĆĄóøŲ Oź>½ČćøĖņ ż’Ż„ŌŻ$éõźźŠ -åł%õ°ŃüŸŻ,[1īDėŽģńåŌšC;śīō˳õi½Ōś) . 2$7 fjśÅčłä¾Cßü5ć0ģ½ņŚq÷’.‹īļµÓ„[¼4ü#'æŗ×#Śł'Žāę*ݘčć³6G’UĆ%·ńė)ėé)ü ³õAßž÷$… ć üDלÓÜ€;į-Ųžåņś Ų欀½1žAz ō~§ß «ó4\ßä×ęL6Ä+õļ€üéā #4°āīöėA^€0(€Ć÷€ż¬R!ŪµÓŻĶč(‡ÖÜ3Č’Ī/=“ōĄ\&’.&9ģ€óń-?ż  üīź5ė=ē+,ŃķMĻ瀀ų ń4.ń;-~ ÜźŠĶ½"¶%!ō€1ųÄ, ą%ģö”€ÅŅõõõĶ€½ż€š„Ļ/ēO’¾ęĶøŲéź"éy ±ß'FÄ ü f&ųZĆ&×~Ā ÄųųŌŁļ4ļĻŽšćžŹĒžĮäśīĒö ü0YŁįÜą&ÜŪķ÷°=ī(1Źėėąį’ĀŪ łå/¤Ż!ųō Äę¾ ėEņżÅIŠåņ/$ś.(šÜLĄ 4&é!ļ $/éĒčźńŲ!("ūŅ%ų­īā;1!Ķęķļ²4XżŅłįF.. žć*Ž žŚīŽŲŚ3Ł;į(åėś *ŁīŁŽŠéĖüFōĒż.Ż ņņĶė«ó%‹¾łāYļå)ķžī(Šųżų’ŻčšżōŻ/õßā’ŪķīĄšģ,,¾éóFōÜ1ēé 4ļC"ūŅó;;ģ¬& ŻĘ/)ś<ė ę(źā©²ņĖ óüśÅįøüYėłéäčō;Ōåš ų$öī '(ŻóĢś+É%•łŅ’õóęū €õ)Į°čū="Ä!]Ė,6łŁGB ÖÜöæ,×į (¼*-Å  é/83įżLQŻ8§’!é(óō.įņż10ö6ś1*¬Ųō 2ó&0 īśóÅķ ļÓ!#*ēĀąäąźē Ś /7ķķEÜ)ć8Ł ź=īąń5Žż ä>ÜžßR$ų#׹ģĖłe4©ųąč(’ŠÕżéŖ.ņļęĄćłēöµź ø5äß»”$õŌ, 2¼ $šõÜīõ(ĮÖüCŹęĖĘ*QÖ čŁļÅē«a)Ķ#ōāóųpę"P÷€ ć õōŌźå:÷ńū2*±£²Ē3ŪSÉų`éĪĆ}PĶņŽSą.žžé ŖH õ;ƒłµå–ś4"»“ĻŃū*ę/$įńÖ@ŽĢų ÷ =żń/Fļ“<óé]ąīū=ķķ™ó)ą€÷Ķśś½)ž-ķ8łägńäÄščĶ:īēģÅPų1ÜOżšé ōžą 3­Ó’äčļŽµĀ¼·ü÷AĖ:åÓΆŽŅö īžä:)5ų« Õ'ż)å$S9łē . ęKdŌüšĖÓ«ÓŃõ/Ńa¼ćņ8Q ŹF?ÉēģDؚį=łÜčŚ=<ĖNA ó 6 Ż.Źģ[¾"Ęą¹Y–óĢčŃų÷’¦Čń1īE@/GŲäĀŃ7ńžļļHÖų é8õH‰>ūą»Īä>Ļx īŌńęŃÕļ½;Ć“å×äĖE Ąņ]ÓōB+uż/ξźļĀĘ(ż¼ö% 8čż8ŹģlęMčJĖĖ,, +f§ Ķųō EĮ÷Ž åżż5?ž Ŗ÷@s/ųżęī!vŹŽćē !ņŗ ŠĖĖŠĒÜŗģҁģ¼é~ń\ĀĆū)īV$Ņé‰!%ēJūI€:Bė æŚ’Å†ę ꌄ/%Ż.ēüųč $Žļfė%Ų8“®õį÷€ ŚųÜ1ó+Xń Łöų õlöśņŲ%Žē* Ę÷ś’)L$^Ķ[ėß ’Ń& !ééÖ"€æū)­Õ üńęć ŅĀ×ó¬ā’ļœł€ųż#ó¼ü€=ĪłŗõKżķOś•±üWŽžz²P‡¶˜ÜA\Ž»—€ŪįēČJU¶ē7ėļ„Żøzķē$ Ż1įä!½Ła4Óążä „õēÖ>61é'€!*6* ļę1źå« ĪäĶ "ĖŹņ˜4„uŹ+ 'šG'¶”éŪ)9’ ÄĄż&Ē))!Ū'ß$€ęØĖŻį(:ųMņFėvķtÄŁ»®÷®C//é€ńą)āĻ"ųųż+\éƒī)˜ķ —Ēōۆّżė€ó#į±ļ4 Ó ėØŅ śććĘÓ0ēKÜöÜ:÷hē+ˆ=,,'ż.Jīā€šøīA()ÕĄ<ļ=!ķׯ40ķ1ēŹ <:÷ń'žŁņĶ’4éżä öÓ÷äśž*ėź##FńĒ] ÄźNµ ÅūÉŲŽņ0īč €OŽķć¶ĪŪöĖžüę€įĮč–ĘŌņ>Źłʽ«0 äģóżźīųśģĄł ū­&ū÷Ż&’!šŚ4Ż:¼ń §ņśõ*ņŚ ń׳4AćU * ©3ōŚŲ ąķ+ų(õżė.ąéqŽąäŌĶŚéśž5ö#åŁ Ä'ē&’&÷"į/8š'/ ;ó##Ż8± ł!čXńDėźčļōō 1Č ’äšĮóčM)×Õä žņė’®!Ą ’:Īęš( ÄźĀÜ:9ģÄāߝīŁõóÉÖc6?%ÕŹśō0ģÜ)eåŃļ;Žōćū&ē÷Ģ¢üå«"÷Ę ŅéÄą‹ĮP~-ļ žņ ‚Aė$%ŚhŲ$ÜÅęõĘķ+5u‡ā–üūĀ2żäõݤ¶ÜßļÅ&сą(b>Ŗe3śŌךōŽ +å6ļö?ķ:·ŪU?ņ’ĘŁÅżßėŚ6ŚÅ9åą)RĖ,ū ż ßėģ²±śM­Ö 8ĖmM.é :Ūüå-¾ĶŚüjóļģRHó»ōā€`łūĪ# -(ņ¾Ž€Ūéäį¼:—!Ü<²ćęp#± N˜ŃŠøģ örBļ}?ż ÷ūį żŲęŽõüVÉõ“ģö,ĶēōMA+L/VüŚžž€\ē[ų£=³Nęń>q&k0 +@ńI9F6É"āģß”ŌPž€ŸŪ*ķ‘ī×v‚UĶŁK„Üō&}÷ėūå>īöšŃśśž×× ķēźžĶź÷ŗž$6÷šć‹ÜFČßčĀ­Éłōś#×ĘļÖ ūå śę ×ķ#⟠ūھ&~ØeŃŌš:ń’B2Ī4ćūėš½&R1Ēų:BŹłÓźüžöīä/üęå «ó¬+ Ł’HTÄłā Rų^žņ0ōŠ’ AÕÅ"64ė"ėł3āł2ēżļ;ߌ|ĒžĆõšĄ öŪŲō5įžŶ(uF±ļWūČĖ'²Õ "ČļXēźÜ~ŁØäŻDߎķå’;8Ó? žŅ ķ42Ś¢ń ÷ŹäŻū,:ģ,ŅćÕzoī%Ä÷IäŽŌĆ’,čEtp²é"rāĪéļfćåó#÷ęÓ.šZ`žŠŅ¦é ģčŹ8d1źSąŽŠŪęĖżÖ8śōä ' "$ŽčŪ€ŗŽĢ?ą&$ 2dĄ*õžł9ÖüęĪ€ī 'µŁŅõ© J7ŸßäķČ'ųÕńķ*$"S  :āҽ@@ć5 *ī ūŅÄęś# å›äˆŁ ĀūļÅ@Łō:ģ-Ć!ć¤L€DR - ą ‹é¹YŲČmįą»ńš’7ēÕŅųkõč.ņƁ%źŲĶś-ēņŲł€J$‹ ČģĆ$ģŻGN$¤0Ø 4ŠZĖb¼tš/0EĢżć?ņ©ņk6å źÉ FĶżå#ŠßFŚ÷7Ē“ńšØ>%§ł!€<īŪ(—ē)耒ӎ¼-H ąÖų” ®øū÷QįYB’T3éĢŠ.T,,Ń+!ēūśOø07ō:»I(ĀņŸ#7čęŠćźöŲJĶC½)ķłĖ+ .QB™]GåŽńņłV×±ė&$ē‹€üē īŃ,"ČēO\üCå¤é€ēĪŗ¬„ųhwĘŗŻ"$ž.~Ćüś,)ż åōCŁš !ż +ń-óüuļ$ņI Cšļ®<źŹ-HźŌ03śśłńĻóĪėśŠCį€óėų@×ßåäż9Üņó·óĒÕüõįŗ ļ+G åÖī/”ī õ÷ī1’ įÓ.īģT"ļPāi’ū¹õLöÆż=åīü 7½äž’čņ÷ō·÷C ŲŃæüü!Ä#»’Čį.āA28šęųüõ³ēiŅ A×' Żō°čēé'śóæh¶ų'Ū×/~Ø÷į€ųÕ.ź«"soü}Ģ_Ļōń³ žżæ¬°ć ĪńTE»Ü0Ōčļ$øŌćF āūĻćK?)˜.ü»LĄ³(WDX×BJ¹ÅéīĶłCAķ-ś éĒŲLŽXŲõž+½œk8Ü+ÕźŃģ īȲ!Ŗę',Ü!żŽ/$4OŁõßńŠz»/7ÅÕ.Ė(÷ā&&Ōš¶Š'3ć ó½įóÖļā'EįĻč’4ąĮæę ąīįõžŅ’,$Ēį5ŖäźāžŽń%*Ü#ū•õČÖūĶ ūå€śęnÜĒ+G0ä˜ī@ł Čä­ĮČDéߎĪĖäś ńCłĘēÕ©öź³óŹ4ć¹’%ó !]ÕÕįOŚ ģb ō&,ļ"ęė`÷²5żę!ļ„/ĆČõČÖOś#ŻĀ)Fł<ŸĖõ3“€ż=4&[-Ü”ģ³8ņń¬™Cö»ĶĆŅ9R óŻlĄƒ4ł€ ŌčŲę»÷ꢪž ĆŪ:$NīÓĆĪŗSšäėź/w;0łóćJ€œĒłŃšżQ€Ż d €Ē. Ü&g€Ś9å<å&, €·Żķņ,äĻ2źu_ūæQ‰5$”ÆĻ 1b'ė8÷Ńß<åŁÄ7= ųążāēĒŅÖ׃•]-ļ 8’üęŠo ęłGŖ4Ź:ŽĖ eīõ¦ŽńņsĻ"B¹ļąå9€(ģšX˜ÕŁ19Aß±BüåB§d)"bøL½į/‘°Ī ęī/ņņÄ«F¹±¦n€ī-ėé÷(' ė/.N&¦qßņæĢš~źŅS Ć Ø(]č–] š{üE &čņ Żņ÷ü€ų4ģӁӀņčŹńõųļfņŻ Ź8»÷Ē÷öó@ē$żÕīā8µŠēßõ>ćMąš¢Ģ%»ēIŹé›€(Ö2I õ<¢,§%# Ö3:²īŅü’/:éųóų Ė)œųĄæōŠ’š#ą•bŅ#ō,Ä’Ö ōü•QåÄåĀZ:ģ½Čšģ)ķ0!Ó%d/ŌūÉQÖž#īõłŽé¹#Ėä7ĀāÉŚĻ׿Óļ.łēóĢåŪŅ%ÕCģq ’11ķėķś"µöI÷=Ü9ņżč_õ(āśų2$ ͽ>ŚūŠŁī’Ł_õ÷Žć÷śŁżŌŹĖĪē’*;L€ł½] @'š&IÖś¾ńƵ%Ę%ÅßÜūĪżÖČ99(4Ć ś2;ėč! éÜ’įå¦;ų,::ŅFłšńFüČ Ī&ź1©ßŹ!ä&¬._ßäļļ%ĀżÕōü-ŁŁü 6üć °FŌõū}OćķžŪÜū’ óéå¦ ßūĶ<°>ĒŻćų ŅźŁ’°öõK gœÜĶ"óīū@?€MŽļśä5ė+!K~üo/S)ņ½$’Ōš/\ƒ &e%ŚõŌ+¾¾€žÉóå77€ĆQóÜFŃŽ2ĄČńņ#~ZÜī/ Łu < £¬×ć 1÷%oĻę~÷FÓĀĢ ĮōÅ,Ż‹F ŽÓE,}ē3óļ@¼4Ӓ*Ęō„0÷ŁWĒŻ}6ŚŽECŗäŪ’(&Gś3·¦äBĘ ž āõą-ī&N'šVś"Vś÷7-¤āRī$ß~²·ņą9’į#!¼ķŠČŅI 5£?.9ķāU6įĒd ē[)>®šĪŻ÷ōų.p@Ńöō­ÖÄ+ł!åöŅ$Üj³żˆ/ŹÅ0 N%éiśųĢ m›c’ŽćŻŪū+ŗŌÓ2ץ“ōY:ęXė[B/·ŪŁ÷>č?õž>;æ äėÖĄ3ą0Ųī/ æĀ»ŠļēŪÄ5“ćāš_¹ ”»0$ų!$ųPė2e¾ņ5õĢģ~;?H€Š$ņīČ ģ¼Ž1 ÷Ļóå'Ōå6ųäóäų#ćō\-óŪó°<’Öå7 ė"śK¼ņ+@’÷d€ĶŃö+<¶3ÄøéŁŚēųÖŽä$ó·7ų ĶņŁ’ż!%Ćš ×»Aāš3Ē'čģŌÜŁĶD Ųł1¬/€£ü)e|"…wż×“āäŠ5™5»DĢ(+æÅ9śõĒ{ūÕå2Eļ ćś~įÖįĢ:5#ä!Y I~3#%ńSĒ! ŌģÜv,€>.į’½E€€C”!Ćāł 'ų€7ä°ļÜļ_>ü`<Ńė!Öł ķĖšŠŅE’?i½ūŁŅ€*Äń —3Ēżįżė„į9äK3*ų ݁ōמė'Dåś"ūėoČū7 ŖļÖ܀ ō!ŹąC!1¶!, ĄŽ“ĪōüśŌłK Ūó’ń  =3ēśĖīāŪ&Öóš\«lįDŅŚ#éLń·RčżķęYÄīī#Õ~śé¹õÓŃåĄ žMö)z.5ž> ńL½7å, Āņάõ!T $) ä2CŹé½äĒ$÷åóŸŪAŁ ö)ń! ŁqĖūXö * īāūć$öŌśäķdģ÷&*!ūJąYšėķé/ąę©`³7%äčÕ ¤$ō'žš ßųJāéļ<ķļ3ļŌĀŹ éÖö9ģīä±īŁ É+=)łAņį-äßĆžšģįśó%źķāé(Ń''ū4Ņ÷ļ ½ģūę"Łō¹ śżżūģįķóōėŠ%&é;žäŌ=ź L+Ū¹óļT"žū3 ’ ÷+% ź ŻĀ@õKĢōčū×q )béĘ! ¶3 Ż"Q ėū ś1 Į.Öéīüį78¶ė 4ŠčėĘŚ<ėÉķąA‡ĻܰŌÓSņ#%» WŃščääņČ®*óšĻ(õŃ8Ķ"°žģųG ų#/ĢF·Ażß1)%éä ĘųüH ÷ēŁ ā#žJó& ĻÜ@õ$šņ+0»-čč. ü&!Śī€ņļ#4öĮGńżŚū굓ŻÕēū@Ķ.÷Ū*õ*üEÖ!, &Æõ3#«ż7ū ŹóąhĪÜŠ½:ų! ¼®Ź=€żĖ€@łŅ9ćÜYUēŅ}očćņćŪ!-ņ ¶šöŌ "$  .Oé43Æā¾ź ä/÷JĆĖųõ’Ó’ż½PīŽĆ9ü)&Ē’ą6śłŌ!ąąū32H+÷ģļg€ŽīÉģÖ­Eź$~ĮĶĶ/ß'ģ ŃųĄßŅĒ÷²O>§ŃÕĮ “™Gž4śņł~Õį% ¹Ćä#Ö(ų7Č“I å9c.ķ‚ ōėā<Xœ-ér½Jńé5ŽÖ ēŻžXüõ’ö= ēłó* .ļļ%čźää„(gšN īĻļķ4śłš2 ,żņ3węųżā’©=5 -ē$÷ÓźūĘ+’źņüę)–Ęé.¢Ż$€RłóąķūĆĻćłä¹éā÷Täöü÷ó#£€ ÖCžć'6>÷śŌģó'Ņż€ą ŅÄń“Ż śéō ĆØĪ/÷ż÷ BżińŹ éßēĢøÜ ēŌš Į=(,åÅž$ ŅÓś'āŚĢŲå$4ńō}l“Yń!÷Ha Żų·ö#īü? ¦ØåFĒŚ /$ż ģČÜū5 %ŹŲ1’ļIłĄėņŻ$+»E!ź)Ž ļ)  ÜųŹū08-<-Śę1ņōžtEŠ .äSé Õ€ÖÄsŠßϳļ÷ųé *ąŪō½ģŻ3ļęāRfŠõÖ¤śįśpXH4üg$įæ& Ā_Óŗ.ąTłÅE·ĄĖšVÜīÅź ų‡¾ ·J=®*ł“5€ĮģćķRGÉŲüNÓAėņ Ē阝Ü'©ÕĮ÷ąüå¼7óGÅŻčż:׏(1ÜŅ€īößćF* Ėš‹‰ßĘuęōh;  ž1"ņTż¶ā7ž!¤Ø ½ć1łŽģĆėÖ²!ZD½Ćč5ŻŻŃŒ>®×ž@Śģüļ ķ äĘ’Ó©( ķ ūį§(Üõ)üĮü6~Ū {4ņ \“αę'äč"SÜ<Ļė}ŗj/+õĻ Cy€ŲńÕ%&Ģ3Ąśž±G½!Żšåą»/eķļÓ`C@^ €³ņ‘÷ņLN~ķAś,ĪąTųŅ"Ę §æł· 7žÖūÓß0¤ō!EōżSņęfC®÷<µš0~õ%Žņä¹ø1įóDm)öŃ%Ä }›HKķ;E÷ŹÜ, ¢±³Ē`ˆvP2¶ó6¤Žõņ·üą!ČżŌ.ė£ÄķSģĪ½Ø”ż€ļ}1žłčœõ0Ę4ń0}śģÖ+ʁ’¹„\üŠōCeŸä,åūØŽ4t(;H°NJ÷ßīŽ¦Ą—Ų8ÜčŻäśE8²ūē.8"ŌhĆŖ‹€Ēd"IįE÷üė2“6L4 8U!ÕŌš ŽÖ Õ ĢĆCÕåāņsõkžHĮA €Żå.ąłū€ A Õ’ć %ūŽ*ųė& żųāĒĪ=ė" Żź ßõć=ŚFčÜ¢tņšÜōĶŪDł Ö1Ģ8,ÕH$łBٲēÅ“?®) #’ķ-~éC{’=Ł%ćā#ūāI.l0ś#żJ,łT„õÅ’ĮK ¹šääĘԈīąāńßõ/4ķ·6ŠĘŃ.øį’å5ž×å ®45ąÕA^īöaõŁąĻ© -ż‹¤ż,=›ūnķėśńöī*$īł’lõ÷6ąųūļžķĻ;üGśŌČ8ćüī ( ŃŁ0żč)ņŹ)ŚŁńäźįŻ)āę žØ '#>ß÷µŪ1Lźų* ÖßBś0īł!#“ŽõĀ4ų:ņp&$$äąķłżķ@ųž3(ųÜ&(ūĆ׊ ö #ŁóÕū7÷šŲ&ā×’ōžąļ éžĢ×$Ż ’:Į&%ģÕü2: ņšąśŁ÷ Ģ€ł’=óĶŅXś~HņĊ§-éó ¬'ĪŠąž Ģī÷I÷ęŅZŠåÕ­‚,Āž÷čÓśū)Ģ3ņĻąŪō(—łFMē€Ó fś€éĪN ĪĖŲķĀĀÅŚĒŽ!ČŚüė # Jč$¼Hóć"Ļ(EB’GFāłĻdŚĪÜü*q€Õģ$B öō²’ü—†ź;Ķāž@'ńķų#++€ā=s Šė€ß4Åāa ōļ.ī€åęķūӘq§J’xćķų + žAd!Żž(ģ~ę©Įō €’ģkŽ$G’‹ī€ėģ- © ųśö-uąŖ¹ąKīRȃ&ćZ.BŲ£XIKŪęv܊yTNŽøćó÷LJé)÷żīF5÷Šį”R)%ē1!āPeŹż‡ņõI¼Ų,÷ŌņėÕóčIöģÕ-,BĄųé–ķżGįģwł3 šŪ+ģ/ÉŁéÉ1%ŲŌV£éŁåįģ>.* šĻ€åŁĆ4%0ūōGąūüĀŪ²ė…"Ėܗł“šÜōāüēŽL3ģiĄģBķ?ė׏ėūéņBļļF'Ō ŽĻ"ņūęö»óōæĶŽ’ 5õĘŹ!=—0-Ī œå>ųč7 Öš[%Fćüśź±ł®£ō äøä <¼}7²ŖŁ,łŪōĪ˜"čŁķšÅD c€ 3V’īęŬ̔ń ēśę)šJļ€c2\:€ē‡ę3 Ė”˜’&ÅŚ+܉A -—  lĻ+ ×āGų=’AL-ż¹åŌ4€š¦')SŽ"µŹźõBČßß抶5× ėĘģiĖĄĢ &÷ķžĖżÜķū1Ē3łö÷ž/ōߟŌńZ»ćŪĪ™éļ"žīŌ„č›ģ€$ž&å’æŃųĻģ€+Öģ€ŽžÕ) āåļ©éõł&ź'Īżų É5 ūōęĪ!ÕO'ę0ē-ł 4ß,ķ4!ń#.å" ,žõ7!ć óćõģ!Ī3äļåęń'.ž ÖėĻ%Ė!*Šåš ²!ߨśėšÜäā#Üßę"iŲŹęåŪ ņ4łöāģ óż(#żį¬Āł'īżć¼ &śą ā4šżšē&½ī*¢E¹źāēóģįć"įŲ×"1¼ŪęųģŲ ßēŁ *ģ"Ń>ī<÷÷łń ĄŽéĘŚOįÕ 6üŗöāŚ 7Ißīėéč÷ŌėČ”Aö÷ĄÆĢŅū&MńŻåį®ŚńŌs"µåKÓ×ā1)» 4$ėĒ.’ŪÅķ”ūĒČķ*ÄŅóŪ 4ÜTŌļ āōŠ&ŚżĘ ų5 2Ķ+Yé:ż=’ ģ½¹üé żüŽśŽĘļŌCĶĒŹäōł/'Ó) Õę.öüēŪŚ&‰€Ēö?'>÷+ gō†œĆÖĆ„äļÄ€ģÜżāĘR ‹S nĖCmͱ)Ó€¶¼€%ÜD&3x€Õßß Š'ē[óÜėX;1ż~$~ąōń ļÖų­„¾S;é//9¢Ü*Łś$¶"¾¬č¢Ń÷*Åư*Ņ €/$}R8Æņ²ĶŌńš¼€@'œ169»£ėŁqŚŁåŻ g€š€vŽĘ€īÅĒ@ćłNM½³ņü%īņōūųŁäū2.å/ Ņ1:<ųņł,ŚąĀ¶ Ī&&×ę­Fā)UūüÕ,’.( ź6śr¼éÖ)ø×Į÷¼ ļ8é1 éč!łÖāńųóęŗß³ī ÷żń æ+2Ųąßō ĪĪ ų!ŪŽÆ'ć’ė=Ļõ"ü-ń #īūÜ-Ł6æ.ā¹įł"  čŲĒōšŲłņ÷ņć½ūķ’Ż» 85 č03õļ$˜“Šš ī•š#ęāĖ ż1MÖż"æÓż›ūO±¶#FäźļĻ-ĢC€&öómlÕ„ö īąÕõDž%ž*ŽŪ»·ŪŃ<ńĶ*³°5įøŅģģ7ų1ēXźXÆ!”ŃąÜSGĘ*Ē“lkŃĒĀ5ŗ(8@’0+0šē’f«<%ø_kaݲ» ćŚåéĪBÜ ¦ä£åūŚ×ēµ"2Ś1äųŚE oßøŗ+[³#īÖOć߀¬ŪZ£6}£1’ĆŲńTōæ ńw'åÕč“uk9+åL7,0Ō5ÕŅĪļ$äÜ }ÄȚ%1.ńMēøÜš?5ÅōĒęĪ#kļļąČ3„żČ ĢĀ&`ū )ÜRÓĶCŁI AĄG Ģ(P²’R˜įJ¹ŲqžĢ! ļ÷ >  Ē6å%Nn3MĻ,Š2ō„Dż)Ė»!ę Ł'ż Ä4 ŲķģįįŠTłĪ½ü’į ž22ŌõʵŃ(!×8$å÷ßó:0 ó!ŁłśēĖ5öŚęŻNņüuā3ųģbŪÓä>Ńę ±āž„õęŪh@ćŽöŚÅēK"ÓĆģ Ļ-M!,ōÓK,$ ė64ū&÷ó%óß ÷5Ģē)Ś)4žŽŠ*ź’šÉī ö?Ī×>B4ōŻIŅŪ ĒlńŹü}ųįZš­$ēĪ gõ‚,Žāó6Ćć".įĢöū ³9Éō Ų-ö2ęż? óßA"")7'øėē5švū)ĖŽŅü@ß©Rļ;-*ERé*ėKź³šī;ś5Ą>>ēü¾7ś×ā€ųb%Ač9X&’ŪķŅGéöāĆ7ź’’ŻĢŁ¶ÉŠĻOźš=ģ L€źĆ¤£: +'ŽŌĄ°ģ†,C(õ̶#±¹ Ӑźļ.ś¬YźéįÅDī·ŽÕ“Łü ė ß¾ŪÄ"žÜüįßóē+ļÖ)#¾āž šõŹīĢčäEņŠēż6ĒGŚóAŁ (4%ć3ŽAü6ée6kJßąV.øßČČį~7ŚķERśż³'L1ZøĘ! ŁŃ4#Ķ«åŻFźæM śśģķūŽŲńä0Ųöé=É’4%E ÆŽóøč1ō=kę‘÷Ūć1'õĖķ)EīE!* ™ŒÆ÷Ó āO5āßčŚĶćŃU%ĢŽ Īę9ńū5žš· ;~ßϦā׹įå$ Õa$ēŁģ'ł*Ó[īĘŻżē=ѱśüŚ©ą`*ų4ā ń;óµ>Į'#- ć1ģ=īęā‚żiŅī€EV:Łų¼¾ī•¢ĖŃŻźŪÉŠŌÄŃ*€Ž… ŚIØ0ęŻ Kņ™ ¾#;ÖÓHɶÓļśŌõÜ'ĒĮ$&ŃķRF­uü0čóüńAķū ęŁĒŠZ~/+3 ß(čų ņŻĮų 4ą3ļHœé Ū<=Ü'ėā” /ł=éśĀFčžė åłž± 'ę4ź ĢŪĶś"é ½&Jćżė"B?Ļ'"ęŪü żą×Ė/ ķžŻ ó- ę ŌģZõĖMóąŠ!ŖÉT2Ņė2×­õü óäöźĪē ­ ąŚæm:äź”®¹ "‚ēīņżķ÷žų:ŲąÕźśÜ$Ü&öŹ×ķéń7 Q* 6ėŽ'ÓŚņżŖ ž“•=ļł÷ķģōĻōć()’ęŚÜūŁüÓRPłĻŗōĘŻĶ OžčēŸ×ē(łõļ,ą’ūņ’üęóääóŁÕåż*÷Łō¬ ">č ŁĀńłĄ'$Ģ ‘# Q+~ÓĪĪ×gpĖxŪ€¾Öų.ń~ŠF2øĮÉŚ„ł8VĘ®€ī€óÅą$“ūėßų󜀬`ō¹/ßļūPĖī"ņ÷, ĀłÓ_Čā荾ł€ś‘­śT7€4ŪĆåŻc1īś3ė 1:mĖŲ×؃gÄ’€ ń“:ŌcØŻČ,-Ģ€žµ'ń/¦±~ŚŠ<€%BŌJ± ŗę(.Åņ/D€ø¶&õ±ä¹½ķ= Cäø^$ūō'䚦ōņ¦/ ·æß$’õŪ żćŸÅūęōčąé =’‡°ŲTÜéæīCęš%ų€) ŻżĢžXēŚ»ć0ļ$/Üźū÷Śē÷ī*ć"/"å=\ŽŗĢļüö1ž%Ö)Ćžūāęś20B)9Ę!9=ŻĶ¹’„óīõöī,ī)ŻĢų :éųīüų ~źģō×÷āńżū°1Į(ū&ĆćQøüĒ“*×¾’īżżčśµüõŁł7=Ė3ŅĶŖķģ ÕÅü ²ąŠų³vé ņ±ęŁ ģ ģA¹üō,"ÖēqćÕć ēŽ€žčš)ļ#÷žć;Ģ3 ’ŹÓ—Fē 鎌 ņĘÓŲóŠ:ÕöćŁ÷A½Qå')Ó9IŽ ō ķQ9Ł*÷ŁÓĪśźŁäūÅ¾Ųąč"õ9ļ Ź ų óü÷+ šź ½Jžóš#ńŠźI5ōXē) ĄŖĢģĒ7*$Č:ć= Īä”Ēé’ś'ōĆčģAņ=įęZłšī,-ÖUŠRÕėēö4Ū^Ó.ćó&—ßžĄšų. ć7: Ā ŅšĻłĀŲļä¢Õō+9·é=ĖčÜżą¼\ž ź ńü0Ź&ćŲ¼ōģüöĄ$ ąĘśzžŅīüXóŁŗĮ,濕#!ņĒü  6ĘÕžvņ|Āź€Ä<ÜF9O6Ķ Ž.äž¹ČlģFČVėüAӀŪĶčBśś_Ż8ū¦ę(ąš Ū=(ÖņŸ kä&sł ‹ę#>/wöī ģš ’ü+ē(­ćń'€ ģ-xNÜŌ1ŽÜįń7}¬$IŻ8ĶŽ!·+Y!Ū«žņ1!Č’"éōóżž ŲTEŃ '’ 1ō ņ”BÉéΰÖ·š$žõ !śõ‚’ē1ļ:ŲÓ@)ņą6 Ų]Ü DóžB-ųč}© „žŲ %Nö£eåKćū±éå ĒŽšē(ÖĻņ£ŲåHš„ ōŁöO¦#!ą ģēāü?ļ*ÖĖ&/śū’ ĘģÅźģ1+ ÷' ·*ėEāŃģ,ęóų&õ!%ä)üų(ƒ ¼¬’ūł!éįėŲ.3  ŃóźŚŪõ1åĻŠ3 ā Ņ ńéČÓŚķļżÓśżÓü) äŲč!"ßįå6śź ųņĻÜņŽłņ ·ŗŠ-"čßé)@ūŪõąĪšé3 öæčięĒŚļī ōŻö0å ÷ź9»÷(īģ4 ū (ó'CįžŁĶåÖś &źŌö¾éĶŚšōŪżBåč»÷äņ t+īéõ7ąöü 4Š .ēŹķ 9ź$² $¾ü7 Ä綦 ;õŌ÷÷ą!ä/ė÷ēı Ē>ļū$1 $Ź ü߁BŪ°1Ķ73Æ@Ļ÷ ĘŠ±P#'ßĪQ żķćł’ ā1ŪāĮ5åĻøść’*FśŅļCŁ Żå÷+4 üńŃXąåū1ļģļīńļöšéĻ żīß ü. ”3īĪüķęßÉ;ūļ&$·äÜńĀģó>ī CśŪūņöŠŽ÷½š©ö &fĪŻ ?ņĒ(ķŲņ+* -s"ō!õž9/ūQżśń īO#ņ+ éĆ1’DģRņšŅ”,ä’ļ>Õ ąŃ Óé@=Ū.ń ļéöLf 'ż Ŗń łąB!©ęś 0ŲŹ ń"$7Ü'żBŪ.­ĪįŅōļ+źłūX°Ūųč)Ē“?* óķ€šęTĀüÖ97^$9ńIŹ ÜŁĆ õä ęõ¦ÜČ#āŌלü*"æęa77÷9E0S!0 0ć  «šąķ/å©žĶ€Lģū.X×ĻXÓīµĻū.éāp'éŖżüīļ*1EßåTźü’ćŌ8õ€ß’嫞÷nJ:;’¶źÖ…ØĆ@@·²šYÕÓEæ€ éü"Åė*/Ńčõķ@<ėI ó"8ž ģņż–ä ŵķ0ĻŪćõóßģūś"ģ+łąü$ßģGź!ķōźĆĘ (čśĢķŠķõ żÜ4žņéßūöŻĄ÷V§”ę/õćö 0   ąŁżāŅīĶŁ ņõS3čJśź±öųųķ ų  €åDĻ\"ėū ńņźÕäūšé%ąńó ž@ĒņāŽņ Ļž ģ÷ń³ēöĻ#ü’ś0Üšė‘žē3 „ ś'ūé× ų!ūNų śžģ1Łł(ä)’ėž üė+ņ šõēü%°ē= ī÷ ńųhšĖ÷,’×óåĢžė żļ4žøßŌž čūūžūŪŲAīķē˜ś ģ_÷ ,ķóąÓ%źļņÓ įåżöś ż÷ ļō ōäł-āüž ņ ļōEōę ōńļäžåå-ę łć żä÷żžåćū  āńūżüš×Īżś(šāüńććūżĶįõõć ćõ š&’óéč- żä ąśśäńāöńųŽī’Ž ÷÷ īÕ$ óņš!ü?ß  ’×9Ų zņęųćĶń9ņķČ +ęź'ńśęf'Fż7Ś’žš ÷ž ėć ūņč!ō ēĶ€ÕźL#čō"äöÉ#ąĶéüĘįAķ« ü֝ŅēųĄūļó÷ė'ńõ*×!÷õųÜōÉėõgųÉ/ś™ååĆūń,’ Ņ ŌźāźµśźąŅR%÷6žģū#ē<śżéÖ ż ėłÕhńłŲK"ź’ Ülūķ¬6 ž &)ąÜół'\-öČé üą &+ß!Żč #ėßÖ&ĻĄ’üł‰"E$ģó’ųžūęųńāģ.÷YŻ÷ł !åēžžÜģóZŁõ ż ó’(ļī īäߌśŚdõž#%!ėėķūįńÖ ķųųāöżüęłęłžōéē żūåŅüńžśHŁ ÷$żüČ!źāųļ šė×÷ūöūéÖźü ųķĒņņ  īü? ģš Ų äüš÷ŽŲņļÅż*Č'"īśŽ ōćÖžÖ õāą3īł żģ9ę:Ž$ößīćżż0Ļ łĘū'üļüļņ ęéåėōóēéźģ  ńćųēü7üś Łķ"!ļ’ š“ūööĶ$Tē%ź ¼ü (÷ė>ū1ł"ŹŲšżśüēĖłÅŌįĄć ę ēś6Łųē + žų0ĖńŁŲģ Łł īÖ ē *’Ū’ č¬ŲķźéųÜśŃ!ŲļųÕ: ņ1 p’śśī Öóń  ō÷ ÷ ,īķ )čā šłņ'ūßSē.łüņąŽĄŠ(%"ē)żåś ńöŅŲöźĆżßķź’ ä #ē÷*'żĘżż"ģ"æå"É#žņščŪń+ ģå!ł źļģ šüśąģüĄõ ęč4šśEķ§ ē ’śń2ßņŹłŲš¹Ś įśåéē½õžö ņ’ ’Ąććčõ ōņź śüé īóīśāģ÷ņ#ķżšśÖüųß éēSīż6 āž ī Ōāś×ćõ"÷ļēöżü żń žģęüųķ’#āóēÖžvž ńķ čģłśĪż ēłLžķ&>÷ōķšäųūõŌõŁ! Æ ō(ļóē$ģ)’ś(<ÆŲūėÜö÷ óöź$"üüėūīéē~Źćī į*Ó łīż ų įżJōŁõń0łĢń×ņčü7ų&ō*ćŃļ=śł  åõüöųų:NĒ éįļ÷äšōóņćśāāļżÜćżżšŠ#ŻNųīļ÷ģóóöݱķ$ē" ÷1üéß4łŅ =* ūźņõ ļöóōżAōśōĆėīŃ5ų5ķ ķ×öłÕå ńü ųåēüšóņó94+ģžż®ōū żō%;ķłå+åó’éėśĒēł  ų&Q’ š3§ę»>žłś$żå )ŽšĪ!1Ó/Ūū2Ī4 āłšįė,Ś >śµŻžłģ)’öō÷ ’źšxūŲ¹ś>ķŻŠŁžįŻż$WﱿńČ ö¦Ö6ųō ļ±Hāü$įłÉłÉõŪåŚOź ŅŃžü9ęźūšüäųüéÓāTÖžļ4źō ķŲ1Ųņš-éķ_1 %)ūļīņļńßńŌŽ’čø+Ųš"&õсńžõėŚśķ` ÕŪµŪēļöćščą¾ū!ō&ęķōĻß4ėūŠü ää" *ĘÕÅķŚóģ8ėęćĪģę÷üÅĢHļ%÷1ļU*ó8ÖŁ’4żCļÓč śŻóóŚ   šö ’cżšķģ ūżł ē’5¦Żó/’å&±Ś*āŠ%=õźńį'bŅ:įī׹ļų øśõ¼0üģüł ½A÷Ó3üé&$Ö0żķ"ēīļ īłé ņģ÷ÖüēēōŪ Ś’Öõ#ļŅķ¹ņīīÜóü’Cųé½öź0Ö ź=äō×Ö÷ćūÆķķżņŅ łżęņßŌżĮ¹ -ģžü-éāāŌóĪū’õōŹč1ijåöéĆ(óŃCś7 @ųęņõ JŠ:Ü%1#éō ßīóć+/!öä#ó’ߌžĶäź!üÕĪŽŠ3ŠīZ® ’EŠ"ü!łÅū÷éėćź €čńA%õļŽ" Xņ# ' Įąłč+żōÜżčś$øś ųųń’ūļå':Ē$ ģńĢŅņįļŚā Ų%źÜ /ųśIółÅ>żŚ-śžūņõ’€ Öš ÷Śś+2õüāł-üūéAŲų~ŸČÜņżżĘŪē2čŁÄēõóĶJöąķ Héą'śė³«õÅņ!7ļÜłöé ķ)źśķę"ąŌäiö āŁóļĘÓ+šļ Ņ=dėö€Üź&ž ]V#%lžŠåü:ō1žŗ5 [Ųīē h) ×õūÜų\Ö!żåłī|<ģOņ ņ ü×Č ļ)/ņ4 šņī/"Ęń÷Ś'õ'Śźę×ć)$į÷óž’ĮÖēŠ-ōłĶõż" ķC(żłļķV)źēÖ+ū%öĢä+Ó»ÖžŌĪģļ»ņįņńāīäcE!Å'ėŽŠō5Łöüć’ŲąšžįŻ4!Ā&Ķ H@ßōń *@#čÖĄŻ÷&åJ·ā(čä÷åÜŠŁļćś/ü ŽģöŲEÕŽ$ņ!#żü//÷8 Čėśß$ćJģ ŚĖ2ąę÷ŲōŠńų   ī ęöõų8ūųįŻ÷ź 'žGī ńā&ł& ö6Śēę’ćóńõüī÷'żį/ å öööćõö)0÷’ö4 Źäü ÷Ėņ ß ūśł Üõųöśźģž Ó÷Rż%’õż ųūÅåņö ’Żöķ ·üųõōż'ė&ąÓö’0,Ūķīå’‚ŃķŹīų&AĘóå MŻĮćōÓčīCéĪ÷€Üś€čžH ™¼ÜßEīĻ)ģéóĖü ļ1e Žźō#,ų$gŁĆb %ü"  *ōÓ0V‹€1śó3×Üļ“ õ3ņ;,+8%Œėäā/¼ (Č£śõžG #!- äé¦Ī7ļ  22*ióāÕżõšÓöń÷+²­óśT#/źą?źĶŽ3ͧ )²*>ŠI0Ż÷*ī×M®Ź,¹Éń(½83üFą÷ŁūŪõŲ')ö:ļĪÅ-ķå źõźļģ»Žģ)^2ķžČ &/ł3óēŪ#! ćšžóĘŃš-ĪŹĢöóäöāsåū ń­įHæ- ÜćŅ$>ī #įšóć)ŲŻ<³üĢśŸŁ6 Ó°$żļ k€śŃ9ļėńĄģŌ45“śź'€"ōššķä÷(ō=ģ’éė7šłöś ķĻ&ł)ó"öõ$śÅ’ŅÕ)ž’öŌöź÷<ņśšé§÷ś$ź#šWģōųéåķęī飚ėńš Ü !žŌ öūÓ2łŪļųŲ¦DĪ>,2õīņōČņ’ųõē&ŻÖęŠ+čš Ļ Ó ! į(ōäsčšśńųļ !ē/ü’ļ’ōł č*µ’īā,ņ£÷čōé%ÆĖĖż łöļÉüóž1éćŲĄžGĀŲŠ)ųמ£żŁ›=ō ņóäņ÷ŠāÆŲ+ķŌāĪ’óŖŁŽł ·Ņ(Ü0+ņŚģ'Č@å÷éĻ łūīžš’ Ōēņ ķ€ ą/Ś6éłõö?ßūķé€ā=ÕåPüŻ  ÷Óų×’å śžŃ Ź ÷õ ųöH’ŅŪī-9óž&!ų’ų&Ś>ō ’ōļöģŲūżĶż,!' Ż-ŌFßģńę1’:żī¼ &āŠōź2 'ļöūŪÓųł ēż Õ?÷żč ś! ųā÷ßå2äHäēłįłéųģėéŁķÜ SŲåžŁüć÷ļ %!źĆįDą¾ćūö, šß$Åü÷ŃóÖīćśŪ äūöū)³žńĖėÓŽź¹’)ļ«’4("Hü+’!źēńėįčÉų łžźūmŚń æģMš+óō" čö ųūęśö$óčāĪŚ ś ŠŌčė*1!ē)ćļņżģÓŃŪų“šš2śāīłŲž'łŠóŻš ęäźćķņć0å*Źł7ńäŲńńł ń#īžüōžņüłā%Ņūš õņł)ź’Ó ę+׹"ģ ×ē“ō'ųšü÷õŲ’Ü)üóÓ õ óń+ļ•ńŚŽüŗå.ēü' æķūÄįåģ’ Ļż čüžļśā÷ņłāąĒč ^žÜé īń+3ßųžīŻ łŲöłņ xżļųżūŚŪē’ķ’ÓŪļü’Gß.īŽĒ6ÕM8ä[°śK<ĘŁū śBØ"jĻĪ’ĮÆ#E,žļé+ ~2/ąĄ® Ģńó¦©ß Ó/śü­6FōéōõĻ ąĆUęØä ŗEžčļģŁ*¤’Ā ÷ÓøųĶå{@9ē# ŪÓ7+ś!’ć¦'åé.Ŗżļ$÷M7#ćŻäć÷G#ö!\óĒś żŅ ģ ėų¹ē9kä~0:ģ3õ÷(.Ń,ĖÓóÜŃĒ’žĒś( ŪĢ*čķķŠźļX żńńßāŲćÖēä(čõEćņųA Ńü°č)ē8÷żāų éÓū÷žüž ģ(ēåź&Ļė1Ķ’ćś Č ąņł 1ļīēõē&ųüÜņųŪķżé%ś±żßņ½śŗ4’čŻ ūó,Ņ ėęņīī üöķāüąų½śųē żļ ÷ś%÷ś÷ó× ’ż(įķž#ąéńūć,žĄåšż×ģū ōAž ńśé üüõ’óüŚžäģóž člūąłõ ß #åž&÷3ģöéé’ģōüņļņ<÷ńÖļ ņž!ōēčś5óµōŪ ģ÷$ā ūčÜöčß)õńż ųūłåšįū ’ üž÷šėłģö"!!0īļū;žłć /Ę-ü*,"'öé7ιŌHīŻó0¦/¾ÜŸ’ŲŅśč÷łņgķ&ń Ķü"8Õ6%ńÖ/ęą%īų)Ćž­7ŽäūAżŲü0ļCi×ļͲE2 łēķķ\,9Ł 34, ’ųé’ŲļčÅ2ōļąńĘ!ėåõ3²ļÄ&åŚÓćääüśĮ ęńę8ż ę łōśåūūļź ū "ą±ļų.·ńK闾čųź¹*,üų āäģųåŗ ō&Žāõ’2 Ņėó÷§üäŚķ ļ!ōżš,ņģžė-ÖØņż$õķŽŹłūźö’Ģģīžų’īó>,Cė! Հ %õü Až’ų!ė5ńųė}ģ!&(ųń’žŅ P, -4‚żź č#öšāłüGū.Źž#Ęż×&žĢļ#ķ3Į łĻEėFų\$Å’ļ÷_Ż’ĶĒāī’:–,čķžšŁ€×&Ńščģ²wžõńJŚčńÖą¹šųüģŌżµ°OWūW4ōćõ»Ėõ#­Ų8ÅęÖ@Ąś×÷¬ē>_ēųĘ÷ūżź)é’ģŅöŅö"¹÷šć:äóōäüų3$Ō3õ|ś’&žźēÜ#/śÜōŽöõ% ęŹ <ÜS.ÓńTē 8 õžļóžåņõįĪčė* źÜ'ņŁ€Čžüżī&TŚé·ĶėÓ ōܾņļžõīķ<źŚśō׎Ż×Āążč’żŅ Üł ż4ėųūŅ"/1÷ŪņąŁžļćźćŁģ%5'żČü Żģ*ū%īŁAž5²—ź žŪß÷õž öõķĮü"Łļļī łiĖóåęč+żÄ ć! >ŅčÅŅģ+! ēćdāüŲģó Ī*õēÜźńśź>ēļ»ņś)ŃŚč#ńžžī śķš’ĢāŲ÷=Õį öēū  öŅüŚ ļ ęūEóé>ćÜł1;üīņõdõ%óąē ę ·ņ Ä{ģģ’Č÷öé\žÓ“u@ žōšī-śčÓü2 Įņö)ź ģ ķQźśń0ęč’É $<×8éņÄDśšūĘҬõš'Õ#Ņņ ÉėńŻŗćųżķ€éÆH#Ö õūü ī# Ńēė(č/;>żłõüå äżĢģŅ-ńążéę ļź&ś ż ąįąįĆ÷ĖŻ5ü'ķóńü*;ųŚę  ^ŠūŁųŌ' ŌŃõźńūä ś"BŽ(;ÖĄ$õ×ńāŹ ö$ńź’ģĮ5ņ čļžķŪĮū ś$éūšń óõ:/čMłŻĖų& ’„/!Hž *Į'śųōšżņźźó'×,Üžėņ-"" źŻž$Åš!ćęīõ#,ńéū÷ė3ė õßž ō ėķ4ģį ē%üī×ųąķłńłō ęū$Ś .öš4śėūēŻ’öšöų  ÷óõųŚ$ īÜ÷óóųļåŲāżē'łņźŻöģģ  ŗ.ęĪķžÆ Ēę“:Ų õ ēč ż!üUļöA÷$š¶öüķģķū÷õź 2ųµłėłīŚų=kĘ ö’ųÜ« ėüčßöóóéō9 ęāč óńč¾żšōž"ćÉūž ’÷ś ķßńśÜ üš>ł÷ ’ķš÷(óźöåīōżķ÷$ źēž*ę! ūķŲŲę÷!śųįųD ŸüüÜśłģ»żäžųįüäßņööÜęž/āŁüł ķ ŪėÜń žõłóń×Éś īē÷óéāįÜ’Ć#ņłóŚūčż’łį’ōŪųžøżęūü÷ Ó!? ēļ÷ķė#÷ł ÖŁń  éžéÓÕ÷īž0ĮöķŻńŽ ¤źü+čź ‡÷ä!˜!+Cū'ź)&¹÷ÓĶłÉéčäļńośüjĻ Š ŗ’ ŌõóüģłóńOļæżĆģ÷ēų Üåõķåļ÷ ėÕ(ćśłö¾ķńŽ&ķõ¢ęYą öņł’’ ŁŲ Äļ3ń ōęóö. ķõóIżīł šĄšł ßž×éš .ńųūžźņö%ńūÖ’Ų÷+ü ūīżż’%Ņé@ėäöģśņźµ^ļšēfīöŻÖģŁ źgš#÷īćśü żžņ ū   ż ōśćėć#čßćźÄ:ļ ćī ’ęųõń÷)'!öźėžń ÷Ų Ś»$ęüūĮó÷ ļ€ė  ĻŗūŁ*×ęłį2,÷÷ä  ź ö$¤ß(ßŲż&(õžźN3Ō÷ē»Ś’ńņż5>ńŚüDģś ēō’ēūėŻ  ö,×ņ6üŻćĢųßóóņ .Īõ ō.čńų]óé='ž2šķčģā%óŲńčöõ÷ļŁó0į»+*# ōś$šņŃųŽ ÉęęĘą!ć Ø Eüņ%GńžŁņä(ĄŠ;ÓŁõśęąļ ł*)śĢ`į’łó”€ćTģ ó–Öüīū Ӏ īęśK-ģ*ųĘįņōę'X+&’žĖ ŠŹś!ÕÉåż)’äŚ;éž-  ,ōĻŌÉ#śųęŪō%%Ū ž"éļ?Žß"?ć ķķę c.ü3ėÜ%Ņ ąŅ äå 4ĻłŃōóųļ ’1čū !żõžćķžģŽųŁżę×(ēģū īķģīüćģūöšö <ėśūčūę čšś ņüēįĶųŃō ż÷ėģ%ŗ$Ą ęś'łH šõĢ ś@óūśó1įõć ūļ čēęóīķõ ąśŽõé ķå'ģéŪ,Žļ_Ķ)¼õōā÷Łž÷Iē4ņŚū7üņų*é)Ļ 6Ņāß ń¾³ą2ųŻ’Śēßķöģ÷ėĢīņų÷żž0 9ė!÷ģüĆęßÜóöēÖ÷ļü# ų.žłÜų÷ż2Żęųżõó ö* ūö_ óõ õ?÷éō’ō-Żöžģäšśń' üĘ ķŚū   Ż @ł’VśžŲż$ś#ę»ģ K śīöł(8ūÜīņ*ųģąöõųäæėØ÷Ūż4,ē*Čßßźź ęń!;- " ’ü!šł2Čųłģōv-ź»ēžēÖdéžÄ#Ģ]ģĆśS<9āīšĪŽ ¾÷ķ ł;L@Dī排O ÓåīD'÷÷ ēō) ņ žLīų=ŻŻļ"'³¼śē@åžŁÜ ō½óå9ŲŁłų9éņ &śõ §īģŪū÷ŠęūŪģŪö4łŽłAūž#Ō÷)ēķ< ėśūšüĀÕāöīņõņ < / %Ęōžą’ś’9 "š4äüžöšłĖ-Óā/żŽ&šń =śłÕŚ?öäńj®śéķ4$pž<ūīż žŌģüŲ äļņüŌ!Dńō> ēļż¤ŅŁ0 äå÷’'ūį Üłō !ųļéćü.ē ž Īžū ģ)ģė"ĶŻū ńćüčöSéśžöłźļö£ų Ś:óķśõõūÄ?ņłĶ ēčžīō ūņöü ü2 ūū żląī õ ’ ś!ē÷ź’÷ģźē  ēä 4éż ł ūģüéõšõś’éą ńöāėÜöpüŁō.žōšÕÜŻś-ĻŪ%ö!,³Ēž ż-¶łö!ŪößŪž 3÷Ķņö¹2Ś×źķłźŲå+/ģ üó&ņŚ®ķĖ«Z (öš½ö>ōįėü_ŅDŠŻųż䌳ŗ’= ēö'õū ÷ś öjaāō$āńóį_čßĖėźóģčń  Žųōė ÆŻ.ŻZųņźāżīęūż?$ü'’Źē* Zėßaóń Z ÷šģ’Ó óē  šš  $ż’ ųśõąūōįüļäłļ ä öńņ¼6ų÷@ōėÖśó$ņ4ćż’ūŽ&õųūž ķ“ü ļė# å÷å &żGųłžųŁ ¼Žõõųī×Čū>%É łłį å ß×ó +üõ+śńą!ūķĘŻéł0Ź ņšÖæÕ!ęéęūźś čćīÕŗ' äųŅõķ’+ę%÷ŖDŃ#ł ä+"łąŻĻ ŖłåėJéĢž÷Öõā!:é’ - óź(ō+čżŌö0Ž"Ś3 ńńŅ.÷ÓśŽ,Ż’Dś'āIA6ēöåž/ßł±÷ÕęēžÜóä /36ßāéÜĄķIßųĶŁ"Žłš ’6) ų×Oźū·Ö9Ž7ņņö2¤ō%žRĖžó ų æś’Ł"ń ūšÜČŲ ż'*óSßŲ¾ĘXęóė"EŸūĘ$É ńöX?ķé-ņ,ĄŹ WļĻÜń’>ä¾å ó ń7ņG ń ę+-õż3*łź9’żēś+ī ōę"ŲżŁžķ-÷÷]żņ.ņūśņ",÷ żńāīśž į) #üćŽņöŃ“B«śŪ[ėõęžśk>ėŻā®Ļō<éŹ# ņ>õāżžģźóī5ģ÷Õ ė× <é žü ĒšE÷Óxżō2õĢ żīóöńĻ*¶ üńžļż÷ņ›īåķ:āóåĮć žś+Ł/łRõ!īčų4-÷*ńöś*ł9īųßõ+ßnö ō Öśų¤ ’ķÉŁT ż ĮčØģļż<ėöF5 UŃćóģ#2āĢńŠõń%"?WM­āß6 ń !"!ļ Õęž&? ‘źæŪŪ:ĪC(ųūü QāĪ) ÓķļŚŠé R>&śČóćłÉ ķ šüĖd! üÜäųmŃKōŁÆž  (>łäž’ß÷'(ļźź4)ēźą")ž(§ žŽé#ē1)(.Dš¹*ę1ŻĮīēD4 ŲĀ<Ū$ ÕžŚzgŲüŪēī&1āåöģ 6÷äŲ+Į=¾ 8Æž×ü÷ŲF) Ķ.ā©8 ×˹žķēO÷õóā„. 9ęį¼ŌēūõYęłóųķĢżō«Åķ$éļ!Ģķ¬Öčļčóņ#$÷!Łß čÓCģčGķõ’Ų'öŚž¼źäAż žģąģ’žĻåšõėķMż’õźųåÜŻĖāżüü ģüō ’ūĢ!4ć×Ūä# źźńéó łšĢ)÷Ō#żć ņźś÷ "ķłķēō ųłėóīŽ:ņģŪõßųó śõś-šž)ū$ ö ń ę ņūÓķŖčš( Ś/ę.óü&CõźéąÖ’’éæ×ś ’åäę-? Öż¦ źõߣ ’ćśėżF3žüóįżéōłūB?ą*Ū’łö’EīäųŪ¾$łĻŽüķź÷ .śöüķÜīõ&ķżųQŽ -H7ńž5īĒųĻÕłōå õéīģ0ĢšńŌ=ņļ$ Śšęš Ņ*Ķūż ņķö'6ńöśś!#Ī ążś žöņūéžņŁ#ä’ł$öćżņļś°ߞčńõ)ēłłģźR ėģäčłā/(īüąśóŌīųēģ¼-%żāż!ōļō ’żŪé#ü ¾ęĀĪä *ń²ÅūŠł Õ÷žŅöł+6ļ Ć ėžńśīüöõēŌT ń(š€ńšūÓćį:šŖßĘö& ÕŁ ÷šäõ" !0ė#źö'Aé’ņ½ųūšöÕż"łÖŲ5ņõõöĆÅ;ć ūõń÷ó. ļĘ=(ą¼ŻūüåŹ*¾öćå’žĒdóGū éĻųųöŠ żčżžÖjźČ’’ą æś,įüüļĻÄŌńńžūčīŹŚź’ó 0Ļų޼GĀŽ% Öņ( éšīGłæÄąą÷ōś µł'ŅżéTń¶ē;ā}’ć Ä@½F, øžÖŪĢöɱ‚č€ēł!Š3Å Óē+mī.ä.üŚ=ŚĶÜņźB2Ź]ō¬źć€łņÖł   ߂ߗųę×ļė0FģIT×ūĶߥü¢Nō ėÓ¼ĆyĻŽų,-šł@åŠŻĀųšÕóĒęļėž*@ī’Źå %ņɾź÷īįęaĘ}Ū”- īņ’ļķü1ż ļå!žžöåś"ĢņųōŠ éü ųŁčõö ü= üü÷šó #ł÷ö#Ū’ēŅ ė÷ź+ųö*)öóų&žõ $ž×ńäÖ ąžń’÷Ü# Ļó īķč-åč.ó  š%,ńźłõóų’ļüųļŪżłķŃłå(čó žŪ ŚŻķ’)Aü"óļē’Åēß€Č Ÿć‘ńķäļāļŠč ń Éæ8 ,÷õ"ļ/! ųų*įńē", ģŻ×ą ģ źņŪŁć*ńžÜ-÷97ćśéŽŚńüųłģå ģ&Óķ’ķ+*’ŽCŗóźłļśŽÕĖŁŃäQł’ē(’ fó& ł&ćŻ$é÷żųüŠ31ō Ī# įŚš*üļčŁÓž GÖāņū ē1ē]ż9īņĮó µ)!ōū±āłe %=śŹž^ļ·€÷č¼ žę«śA’ó łPżxŠļ楠ŖiéϦč£;ŲłĒąÄēüĢ©'Ž-åŅ į ī £‹ēļńœøĮ8'Ėó’7ÕŽ2Ķģčłš$Ęß4ōøņ4Ę üČIāö üÉėīó䵌žÖėܐ3ø£õµ7ž@mN¤ö±ėēąóŚņīļäšÉųąžßō 2óķėūśōžÜīUųŁŽžųśōžē,ßŌ.0ōž  ėķ3¦äšŽī 0īśó å )ūšū ōą7źżōżø& ęė ģķ"  $ń6ųüöśÜęäO’ÜōöóęȀõ ļČ ųń ÜżųūN īŽé )ēģ żčźśżžäóšżū āņ ėžķō īūś* ķųļ żķšż ’ł ņųļ5ņłīŁ śhåęüź¾šüļ’ßś’ļ ÷Ųśž’ łļāē’ ’éž ’ų ę’ģķļ’ģ'&ūłŻļńłüąó &%ō’ŻīÖ÷õłōŁ üūųųß ų€äüāö Źäj% ų=óō4Ūł)ē!NĢ žī*ÖśōżĪ8Šš7$ßÕłśČ"ĖóüžéŽ<īóß#šĖ暁+ń åņó9Ö+ ķ’2 żIłŲļ; ü+Rō÷ž’öĀ#ŻõõĮ Eīż$ą±š ōé&÷ļ2ūį āń÷0ĆĀŪF āŗļŲéõüŚūEĀė,”żöłśõūłüšõć åē ūń)č üēõŌęōÕś’ß ÷īĀūŪsŁųĄī½ūųšģõé׌Dķō :ĒóžŌī ļ($ļ."ž'ū ’LOżųß Hóå"ü·Ż ų’:ė !ī½ńłŚüõ2ś'8łņ ęééóžś ’§<ś÷ō( ļź’ēįŲ×*)ļüõņš·ņ ž5ół:ćÉ śžķåüņLĢų¹õūó’Žżž„UéA&žŠšüšŻø’6ā-ź’õ*ō ń$?ßāŻåčī °śß Ļ Ł1Lż ąŽ Žäó*äé­ėKćÜś& āāł®ģ!Üžųžóõõķäöŗ*'ÕęŚāļŻēśłö 'Ć`ö2Ūčżžī’åųčŅäĘģÅDėūć łößźāń1ąóū üāńģļŅņšī"ßķ.ņ÷õųŅ éÕō# Šų÷üėīśņĢä’,ņź š !öŽżA’Eśįūż4ńśÜĖōņ.)ōõųĮ4ć3 ūšöņųÄ"õÖ ūČåü’N÷ Įōõżüļõöėčļ%ž$éū! #ķ"ī’šę&6’ łūīö$ōüūšŠŠõō łūŌ"L(Īć%ż . Ūūž(éž’,ņ$ņ'½ģŁCó ? ųņ#ßõżń!čĮĻī śõ2’’æäÜ üųĻ: ėü÷óėćžō Ķ’!ż"čÜņę! éŽå’(ėĻķ$ā ćśĻłĒķüń’ ųŁ<Ūģš-Åķż BóßŅļó(į ć#3!öųŠś6ņ ł ’¼÷ )čłŲ öõ÷ńōšśöųņ(ī!żšóü÷ŲóŻśłžł žöĘ ĪŻ- ū -6pö %ś€č žöäųėē‘š/-’ óžņń ńżüūŽė0ż ķłķōżĘA Ś’šėö&óŗł<ä  õ ü V&ČĪŌ™ść’üżäū0ū©ėöżšņ5'žķ"ß&ü ś÷ ß *ł;1¤ļļ čāēšėÖłēõHćķō ķø õA ī¾’ö0ķÉ8ŚFķ ö? ~ģSčó+!&ū, ŃDŌ((0L’ē&ńņ”Ūģ īÄ* Üųņō &5Ź$’żé éģóĒ)õņ)7śąÜöŻōū)ō÷÷ ź. żCę ŲõŪ *ūżē *šźćĖķ07/V#ų$ķļź  Ķ?õłēŃÉ āōžķćūß1łŃäĖźś#$ęüżķżĀōõ*õ÷āų ; żžü÷ūšŚ ż(ģ(öšćŽ’čĶ! Ņšūž$łÜ Žé$ļ+&Å +Ćó8ŌŠó÷ńŗÕś ¹öčŻčšŚ’ČŽĻ?ūļćēöē’KżżÖĀ;/ ėąšęćņćÖ’éŁ@ ’Ūāžóń-ŽžōģŃ>’ō’,ųžļč%÷ęüåęęšõ’ńÕµ Ż09J0Z ļÜHüżŻūģł20ņ"š!ČēČüść$  ōŌ’#Śä)ę¹ÕéÜ(ļź÷ ¬CŃ7ļł ķ'į)ą7ž÷×0żģõłÜž÷ż"’%į%0õ3IśéīŽŗą żõõ ÷ ń *’āčžÉóü-Ąż’ ń6č%Ų*ŲåÖ ĻńųėÅG, Ż ńūä<õßģ īŁéž ÅöŅ ņżāé éĶĪDõč Ōņ’ IęAöģßõŻßéźō÷łęėÓļöłŠīö„)Aģ ōšāšó ^į åöžõįżmhö3Üū6ä! Ró’ęŽėŅ)śģįć×_-ķ¶Ięś ĢAż ÖåaŌļõĒšńč:ņžŲõżŚkąėHłė—Õ?@ &šŚī7  ūčŌūĶ"ŅŻöō<Åł Ōńū“AõīŃžėīś,ūÓūŪŽ!„ģš4 śéłęą :÷Åń’įöÉēņõ.éē.ąøźēģēŗö÷ī ł ÜGß2 ņ!¦ųü÷ ķō ÓLBö#ż&Üē’čāįšęķåųēųóć*³ę<šļļµéź&:#óü7!ĖčėFÓĢü-FęBĻÄö6čŻc-:żūł%鼍č÷ī%č&®ęś%§ņÖó+Iģßņ ųÅ.G ŽōśęöÕZÖÄåéų¼“ įóõß õöŅå1 ćāÜóģó Üšōł;žī"’“óčGźö0.÷č4śńĮ ŚÓ õJżŻū¢ŁÜūūõü÷ +Ņēłó÷żüś2’ŚDžų +źÓåčńūō?ټ;ŪóüŽ(ö üõņõü#śłžēžžŽßīęĪžū×­š÷śīę šųó÷A%ōģ +ė÷ś™ źłå÷ł ?æ¦ōūü\Äõ#ö÷’,ā ķśåė’ąūėżõé š!āśļ"Ņū%łō)éśčųē÷ńųõūę õż’ŪžšźĀśÜīö.åßķü  üéŽóņęų÷ ÷ņīżōūūē ’Eåō’Śśį, żü<ćōś ü ’ūźź łšģĻņćżüžŽż ū ‰ėžū5 ųł’PŽ~ŌŽ2ć/Ņōīä÷īŻ ļĻüļėąė’ņł’ķō ļż’Ģ% š @äóŻ’äüźųēģé łü 8ӖōäüšóÜąäłßßśōöÜźė ų ļDńźżåIč1żīöžų üīö ß"čŅųē×)ćę÷×风æńÄ÷łūó ų śüöėõŽź ü÷žšaūśśŅ ö“öą` ĄÜōņį’©žå"ēżąģõšąģ׳ż ģŲöćõūŠģōšö ķ$ÖüūlŪI, ēÖż$č ÕÜ- &žķ0æē× &ž7Ö.ߣ,ł÷Ķųå 7Į Łä÷)÷ ’8ٰ+%ä-2ļ éą ź,ć13?ģiōģżó,ūķ¶ģŹ;ēčš÷ńŁöżž łł  éź ščĀśŲ(™įļżT’Ś'Ć× ×=,éžš ćGĪ ńö ö šńįŠöBŽ øŻ.ŃåąśÖ.’žŅÓÕ¶į ć ó$ēŻģ°”ė žüŠ 7ēÓöĆļč÷ - iŻŽ 1*š(ōJößN*ó÷ <,ę3ņW* <1K:ķčīųšņöóIüŲ żā1üü č üōäī'Č&"õ'ĶŻ8Oõęõõś÷'*õź82Ū/ %Č(üö ųū'ōLō$ !žš ÖŪ3Č ņķ ņśžĒ&Ćģł'YāėrĶ Ńį»āū 4ö)ō*ź¾ ½’Ė#÷,ņ%):1±ō,2 Łē6½öÉ ėü."żß Ē 7ōę!&ķ ž·ü ÷ā °$ŃV0ćŻķėēĖšųóūźūłż Ķś*žąļ÷ ł÷ś’ łłõ ī’ō)żäō źżīų ōī!ēūŽōń õ7 ż)śĆżģŻł ūļłü)öåłĮå*"÷śåŲ čžē ó "ż ż÷ę õ¬üåųųAūēĮ  ēģŪūńü 0) ņ’å õö čø-žśņ÷ õ"č*;ÉųżŃņÕļųä) ā3"ōčęņžłń Š&!ń%ÄÜÜūō0É2åō/ńž0’¦÷āü¬åä÷/ńöõ'×öū(č#Ł9Żō#óś4ūķā×éōŻ’ŽŽŠ ó ĶņņųéųüŖ µ ( Üöć Ķļėō 21ÖšśāžąÓŲ äęÉķõ#ó?÷#āÜĶüöÕóīķżHŪµųŻåūł$ įśųąŻöķōåē÷š.öśż*’ē*0Ęī ūłńC( öéå½ö10 ūö.éųī#üŲōĮž õ!÷żśżļ  ßöÖ żļģē9Ņż÷ęÓĪ3 óšś ęįĖžēäźłßš·)4)Ō(üōųé3īģņéį’ ółö󳊜éēģłüžé öš!äōž"ö»Ś)óśŅō÷ ! ļ ōN ņCųĖ»ļ öEõ+³ ŁīüģŅ:īšē&×=ųĻ&Ł ņ ģż ėąńļ(ÖīŌöö*öšŪ 1üĖ-źõ ć’’īźŗ R&Śé.až$ż:š,éīÜŁßóķ õš’×÷!ī"śśāłóÉųāųŻģ÷+ā ņ$®źķģ+čBõ÷ÄćõüŖ o÷5^Ō3ŪÓ߀ īäÓ0Ńī+é" ų'Ņ ’7/ņŲ$ņ÷üĪö8ģéü įåėß»ēļ-.šņņ1ū ć$üļźųŁäķ0ńśźźßņóüōņąĪåõūßėr÷÷ ó=ų(ą÷ ųņ—ŠĶńĪ?õ ģü ń ”Aõ÷Ķ¢ō/ōĮńöćųė!H>Å ęĆ)ĒŌ’’Ńö ü?½üŠ-ū.ģ$Ć£ Ż0ž8@ńńķõčSÖõ “ “ßńż’ń5åŽ,Ę āÅč÷ŽÉéŪćėōÅšžöēäåöĘĪ'=ø÷žēü)&Cī s× !ģžšü7óóī׳+ŲżŲ  ī¾ė%’ =ŁźīģŚūąōļńļųń÷ ,’ó łö$óõü")>ūžīõę’ $÷)Éćæ<$įD =×öą¼€ ÜÕ5'ļźęź/åŲå׹ōņļ #ķąķś%ģÜŗŃ-öü÷Śī÷7;įģńōāśėź ėżēšżÖģó Éļźüēčś ńaģąßą öųéßĻWźŁō ł0ć0Ą: ä Äłė7āF'¬śųóč: šėŲÓ(śį%Ü!ś.? ė÷īŅŪ#ąĖĄšūāžńģš ŅńŚüšéł×@ōļš÷õ:öō×, VĀ÷ųŅśīšń8éŁī"ēóßóõŌś) ÜńÉŠķłžųœž/ėéćśś’ńś÷˜ äāż*įņ’ š"7żļżüżö ŽĒõąüńDóųKų&īŻėĀčķEŲŁ Śš¾9żō Äūėń0öśč ·Ō2 Måöķńżõ Ę;īģ!īŌ õōó ÷.3 įģął£ó€ĢĀėžłņ’Õ±šžĻŽüź­ĆēüõŻųåĢŽ ł=éń ē7" óų¦śÖīėĢ/åłöäīļī É !ī’å żÉž ęäõĮ;ī ķž×ī ń=ų 0ų+éš$ |õéŗ+-¾(ė ģüé ą ļ ņ*č÷Nóū,ßēÓ8čņłżōššśąü’ ū  Ł_ł1ŁōĒū”żĒźZŲ#ģćŚ:’š āąō #1õ ’’č õÉņčū ķņ>Y żü2Ģą.ū’’ļŗłųņ ę01‘źT eć ž Ō >ķ½ė’€üš"  ä6Q'įĄ3õŹš’żžł€õ=PŻ bžŌłźŁžRūe9öķņ“߯ųÅ ć "» śūö ēō €ž2čīöäžņ— Qė®Że’•ÓēÜß õø Ž4 āŪł ŌŻżöņöū%źį)ųŚņ’ßęōé!ü%ūŹ('Ż'č:X(""óÖȔé0śóvó×.żÖC~õ )·čę#0ņüćä"B ā÷ö#īõĻŠ’ę/»ńńŚ%ļī śŁųXõ Üūūö § ķžąńüńÉ#Õüś ćõęÕÕ Ō)¦0ÖōĶ. ż ģ įė õ ü$ųŽŌ!Ōū3Ł'łõŽėąķĢļżō čŸ%Ū! čŹ$äõ’&ė<Ę× Ž"&ž2õÜ&*žžīź ų+Ü~ŅŹņß’ć-ö šįRż·žŚņīɦöéźšģ"ńüņ ģžŲ’ćŁ Ó½ģŠóF6 Ń( bć÷+ģŪ473*,Ė(ŽØ× ĆēƒŲź$’ %ģé$š  žżŁI ąśźŽ źé īä » Īć’ åųČ Źė’ŲųP§(Ėä*½’,é å’öŃŃżÅÉöē’į†Č)ŻīŲąõļÕģžä21ė#äé"ßóüėÓł- ąķäŁ šĖś õ÷įæł'!żēłģšŹ÷łåūć5ßįõ ½ńūÜÕļž é×Ėłž3!÷#õōń)– ÜčŌŅģ,łłźŅ’źžļ!åł&ßōN8ć ’į÷#ś,(’õā'ī ōģžJēüżóžś"žńżģž2üż% ļ Śåļģā’Āöī ĶķŃćé żüö° õōöĢ ńśż&üųöš ’ųļķā÷śüį ō š1 żćć!'ģö śÄņīö#’¶ õń &ū’%č "’ö śź šē÷ó ’’üś!ļ ööņū ą÷ļūÅźżü óķ ł5=ųü öŽö’ż’üćŽ+  żõõļ ųŪĘ ņ#č3« 0ššļņż ’ēą! ļģŌéąīų÷-FöļõÕļśń 0ēśų'źĪęöėĄņUņ¼öšéŽć2%ēīĖ,žųō öŚ“åéĮėEś!šõų’õųėüõ ķģ  ¾łÓńŁźģž"å ķöčį õģĒöšl"āžī ö摶ż Õd±ł÷ K: ©Žö¤üöŹ'ń0MĢīN³S =ÕóóųĪžźóū@ž /i ×7ÜÅ»7ą[„īžŅq’ėI*Dš.錣åÄc ī#ŌÅĪó^*Ņ ō8Äń÷ļō ÄąūóūV!Hé å2ų6µüōĪęš8č 5[SŲŽ+üń@Į®č Š ā¼ųéŅ’BäūĄ  ™!ųóįÅĢū)ģ\’·’ęŪ 7ęā&šśÓīQéžüåÖåüĖÜQÖ ź)ź’ ß€! ūš ūóåīā½ėóöīīń9(ūęģŁęįī, &ų$éģėöųꦞÖžõ2?īižź üł÷śÜē ķē(ķ’üėäąļž ų£ćü ć+Č 3ō ;Ü6V'ņņC,ļļŪķó ł' ōķś  óõżŁąī ÜŁķEŻöā ##(ś’35õ"ŻļōäūāĒ<ŻŲ'Šųéä#ļöķ’ųżčČņšł)eż/’ē+Čąįć • Åśöīļ łš ēŪÓżõåķłZ! ŚŹöEśņ÷Łčńļ-ż,š Ś ū½²!ļŻ!:ÅŪ"$ņžó Žī62*łķDī łč õä[ė#"BĢ ’ ģņ šÜSŁóą'÷żę $čņńęZēžĪÕß5ėń+ -#CśŚė üå,"ųōō  ńéŲ!ĢąŪ ššüõ÷A$ ééśźĶśŹ ŽÄ ó)ķõöóĻ!%łķnŹęŃ&Ņūńäžō 8šī+łāŌ)÷ ćž’Ļ’“O"÷Łķ ųÜŅļ’)(ļžą "'ć #ōŌł Ń+Æč āĒ(ģõ÷ūņ  Ńąšåå$ ęģóśä üųś’ßóŲåŅūųåēč!žž ļņļżō ņ6 ūž šē÷óķ ååņ÷č’꿯žöŃ ī’!łö ł÷ śū’óņłńõłėź  ōüūķóēņöéöā Ś½īłż÷Ų žźńūüJŚņņūśż(ųśóń žåē ¼éį,Üūóõ÷1 żōńļ! ßśŲąńš ü,ĖóÜŹéŲ ķėßŌź’,ėżīłŅ € ūń é3Bė?1ģŚįė  ųwŽõłūķįša,ńėęœéąż’ź5 ŅŁ’ +ķ öŁń<ųķJ¢żžļćŻē4Ź&öŲų0æČž j%Īś× =ļ7ŻĪēūŌłŚ łżģöž+ģņģīā'ķż ’ģ)ūńóé’ é ī6äś ū żäż ū ń ńśŠūäŻōų÷öüļ  ź žž’Üż÷īFš’ū’śōöā ūŽB’  ęāÖ%ń·šž÷ąū0ķūžāåņ9 šķ R7üģžä#$½ ż õ¾éūóęę łÜ öł ū Aåō’ ōżīéüļż *ķõßõėæ ,*Ä īŅ-ÜōŁÖłĘåōüŽä"ųäėńö+÷ōÆ:żCó)6ßį<ōų3 ŪłåHęó ,öįļ$÷ö’ D š łüŻöĶžļ)žąŲū; %Óčöęōūū .’6žī<ųź āņéŃłå4šņä Ę! ĆžņÕ!/Aļūī Ż1õÕ'ļśž$ņÕHżĶRī0)åCźęģ Ņ! éüżł;Łļ Ö01 )ģÉč%¢Õü÷ē ÕB7åŚõŚ"é<÷6 šć/Żģą#1;¹ üšüēāōńģņż€üÕžÄéŅū÷ äć'ž/żął$łu ×ÖŚŠŹ ’ųź¤ą÷ū&ŚÜüłäķ¢ šÖ Ōé%Éłś$ē;ųč4Fņ)¹ßķ×$ń6ų­ļšū|ļō߀ņ’-€ń‚ł¶Óä ża·Öž ¬’ģõĶŪŪś÷$āõ7Ü ķ÷óļį"Į Õ3ą0M ?ųėĖüŚĒ7ūķ€÷Ķ$żī9¾ž'ņŲüų%įć ü œŪēĻī Ć8‡b8łäd”䈳 &B ļź& īäõóå8ļŌCśéõ&ļ ė÷š÷ō7Ąģ¤ņóōżņōŅŁļ®ź ) ÉūÉč’÷$ķéųś7=łēÅņšīśžū’öļ!öņūó"×ēDåģųų8ū 7ą÷ūłšö ÷1ļ*žóęŽń$ "÷üCżśōż÷äéōŁ÷ūūśßü õ åćž , ėłäµö/ÆĪ' B ūõ'į.ö8šŅźū&!ėåśē*É÷$7 ģ? BBĪōŚó"ö9Ń %F&åčē ģļŅ ŻņÜÓäź «4+ü)’ÜŃŪ÷!Aõņż ö$ęõ/ī# ż óóĄŚųŁõģÖÕįųä:ūųDÕČ-7ž ×ĘÓ@ ŹęķīĮŹ,?Ļń«  €żģ'ŅÓšö ķō)%Ńöų5õķģü-įŻ õ(Źł./ ļ½ļöź üÓŁŽõ@ ēłż’ßūžōšśģŹŽłķūēļźŠžÜõ/Ł4ĻØ’ߊ+ Ćü%ķ &ā ų'ÖįŽńīęš  ģõĘŲōź + łöźõšóė*ō ģźēó ōā*7żėłėśāåć($!ń/ö ’ų’č’ö +’ŃĶāŚöū5üäĆļüÓųķķżķé Ķ’ńüŶ$įŠć ą$öėųĢęæūš„Žå’Ģę÷åū"ųõ#’šéćńßåļÜóż£ä,ąŽęė Ż’ żļ!²Ą5ųł.8ļäėķKöžūī Ū’ŻAó šėŹŌņ- žżóĘ ä  3ņŻ žā3łĄó"ļģäńĢüńŪ ½źłōśōź$÷÷åßG’¼śü(łŽąXŠßšé#·,Żų0öų śäžŪžģ ēé÷ńž’×ä ŃżłŽäćķčōžé "ążŌķ ) ±[ž ą'÷»īó=ü ö< Ń0ž÷ēöøī×żŲ 2ģö:Ó0öüśĪHśųōųüźļ ·1Ūįłļõłč ŁüsūóīĪ(ąŽõß°öźöźó÷÷ü­üL÷ģ ß źšž±ėąéĻ&īJ åē ćśćŌęæŃøū'ń$ģłB'źžŠõžļ½ą ŽÖåōą ¢ 5"ļš8ėtņ!’:#üö#’ś¾™ōćśōöĪł—Rāłóéõł#÷ųžģŪģ>ęšö÷ßå 'ųõ"ćĢśA öūōšņ!źłį÷½óå<ćü Ž ńŻõ’ęņłē žņīėŽ ķāłżńųūż ź #āīŃśÖšüž ššāčēó!ņŽ ’ģÕłėöšóõ))Ń/ńó ćłāäžāń8šś Ńōś ÷ķ&łģł’[ Ó ūö÷’ł ł ģģń ļ÷&Ż"÷& żöŠĄįš! é2üļå÷ōõ’ųł %żĶ&õüżųßąÓČŽšĢįŪģŠūŪ’öõśęń*Śūżų÷™ ’Ō(Ińüż)õš%Ž Ąńž’Ä<÷#äŚļ oś S¶ÖåĢ žķõī7įó!ćāĘķóėüŪżÓģå0įéóī$łĒń Įńēōīłž ąåßÓķõC#žŅ 4 žB,’ōūņē:'į+49 ēÕńö+ļņ&$ ’&Ą‘,ņåūOū ķŌ %’ŌŽ Ųō#cī@üź’( Ōżāęņį !’ąŁįéėļ"öÜļį,ŅĶ=/’żż",ģÅį(*ė’͟޸ļĻśŅܹļżõ Ń j#÷Ģšųö%!-æ’ū ļż16ß š Ü ą üņgłķų" ÷Į—ļū šųōńt.ķT ÓźõśL } Ī’žŚ ÷€Ę žććł3ūēłööé© 1Ćńėéõ’ׯ,Ćś ššį õč-SēāõĆ łų=æō `  Båūéł ķ( Ūōķų€ śļĄį&EžŌČęÕ9½ąįųé©ßéG÷ßž0ęė9ÕO÷ šŻ¹ųéłč*õż ü3 ĖV·Åj Fäõ ņģęś-óė'ßNńõéĻ6ö õ ō-żāē÷Śōļöé½ŲÖżžŚ äéģļ’ß Ģē(ąū$'śą°äē!õź ļĻ k4ßżDśźŁŪ ’ųē鿳ƞžųüõśūūīņß é%ĮĘŹ<Ū’ūĶ Ūź$ŁŁļĢ÷ń#ģ(ēé źÆśŲ ,šų*č(ļų»īłp ’0 & ųö ’ŻčEÜź(ų õŁ ņŻśęķŲ’żįõłžłÕśž " üģöųēšŚóKüŪęŪõóö šžžųšłė!ēų%ųÖ  ,śóšźõūōń%ļČšŻń$łŚ7üõź÷Īūł*ū÷ ń"÷×.ńüõą čÜłó0žś ķ9ś÷ ųśöļņžõńä%÷śå!éꣿūöÓīüā1 ņ’ė NžģČ#ÅüŻć’98 ē ļĒMų3 ź ūž į ņłśņśõāļżÜŚ$ž!Uę’·Žłłź ļń4šģźC ŠółĶłõŚē õūżņņčüśūļ÷±śķ-Õ'žž#Õä%ļ’ū÷ż÷ zčćģ×Ģ)ķļ!ŁäņõćżēóäžX$HD ļ$ś üŚ9"żłĖ öż 0śŲDŪ ė āęŌÕ9 ć$NŽ@$ŚīŚÓįŪóķÜų ž ģō’ ģōj  Į XžŪ> ö2Ėä*ł!ąż²×ķńņ¼āX ļ  śÉ1¾Ō$ķłś’É Ū%Öüą ņŽģó%óö&łĻ ž ŠłŁ (ųĶžŠ1Ģ ( 4ōęś7Śč󟎒.ųļĶū)Śüö ōåüņłšńnŅū łß>®Łėī 6ą /ÖąÅū(łņöć¾ ņ'õ1żG Õų÷÷ "žōąŪėō ø<õōś łėōCóńńżŽwöłüūÕū ńŃöéė !/ ó6IžÕČžŁä# + ć Ź!ō 1Ü ž.ėå’&Ų4Łōōūłļåč2QĶüó! Ķåņż,īŚŠ "ļ’(ī¼ųŲįśųÜ! Š1Õ ¹ßńļ ź.śä<óéõēŲżéŠżņóé# ż 0öķž åĒ Żļžęōęė’Ž+ńń÷ņõ’žüųõ0Ė"ņ%ĮŚģļ' łńÜł ĀśéGåüģāīī łļńįöŪ+ö õ +åćżžöŗ&ė$žÉńłžé żõ JįbŲķ=÷õč*ū:ž 6Ķõų ōöøś Ćžņż ćō’÷čŌī ļ3ė’üżšńźģųČśų  ōõžŻž€ ōüīŅßŲ2āüžžŪ÷ ž÷Ķ*J ÷ėžQóõ(łŻÄ/ōąę Ņā  ū żģśś Ēś×Łėł?ė żšŲšźŽōß÷ Iśū’ÕŁė2Ųģ ’Ł7Čźķżķń'ōż/ ł:żģņ5 śāųēõ ęļ-żé! ėśÓŽ%2Łųīī$éüūėŌ’Ž ŲŹź śīń’Žģ+Ų Gą÷ķ-üåų Ąśįķģš ą)ųśä÷ūõžź ęūüE,ųŽęģŚē< ńźń1öīž9åńö›+śļ ę ķ# 5÷ńéģ Źåó į å’ģģžśö7śšŽłü’ łżź÷÷æŪīųń’’öÖ÷Vēåo;žv %łłüīń ö€)ūĘņ ’ū8ģóźóģ ö(ļųšūż óś’÷ ē’ ÷ü-ó ņīłõń ßųš’ü ō&źō Łßģųśóčūśß ę꞊Üńć ķķ"Żöõöżšü.ćžōåśśä' -źöīČõęķęīÖėļüņśńė7/ łółóó Üąķ  õß&(õšęŽ $$žčߣ óŚžĘłźEń×ņóųżżē õ Ģņ½ąõņHšé ’÷ü"ÜōŁ óńšņDåóĆČ÷ (“I.ü žå é×ō'Žīųž°˜ż&6ź ó įóč! óāJ&ó2&ńÅźńķōcō!²ņūģ$ $õŠ.śÕźųŠų ĖcžšgųŽĒėĖżų&&įĮFæ×Šņ/6Épņū ūZń'ķ&'÷Š@A ÷į÷įH’ 6ų9łCųäžóą!’Ū)å$śüĘ9žĪęšŗńĢė ŻõŌ=¤üū;÷žėżöö))Źė~«ąGéO%Ķ&(üŚ ö×J!ģńį€#$’żŲžę&ķś) ūėüóå$ńÓ Q&źš(ØĄ9ß/Ļłķšö×J%”ŻŚķ/2 ÕĢüēéŅųćó’Ż%’ÕŚV% żŽöüõž5ū)Ļ ēĘŽņļŅō÷üč%ą2ņļü»ėč³ūūõŚķ’ćŚjžžOĪÜńå ŌŌ ėņįł&õŃŽźÜŃłöīėBÉłąź0āčė'ō łŌ÷Å’é1į  łžäłĄ·½ ķėņ÷ Ū2 9ōĘ!üņūķ÷ü'0 ž’Ūŗ ÷ļR¶öīųłļėūŻ õC÷§öėāžÄŲüź#żų%=÷ķŁ#B0*Vźźł/$Ūėé%Ē Ė*S a ćŲę)öełüß­ōÜž#ō3$,ä0éķ"xū0łÓüõżšśŪüėŲĒčöIõ(ńū2e×ėńų¾õśśšŅ€]Ęžśå ż±ńŲčäŚ šēŻ!A>śģóķ9šņ(ż²ś ×&Dż7Eō ł Ē=Ö*Āł+²L;ūäš õ 13ķķū3’Dųāń ģ’HųžßÜßš®öü U+.éāžüž Ō#+šš€žõņņžüėūööĮ“ēõš÷ $é8é tżžAęøēöŁ?ś čęģšžśī%õü+& @ōńģ' ¼ūńļ āōżį9Ąą ö*žć ÷ćņņ¦ Z­÷ųųķ ĻZĪ ś ųń =cź#żū š\’é!Ō ūūöŽ’į cŁžžŁźź’”éöoüūę$āņŃžĶ ė÷ "ó³i÷ķŃŚµūųC$ķūŪ  ÓīżńżŁłŚĮO žŁÉ÷&ŅķÆŅłõęįļśūūæ!żć 'ė#ėåŪńæūżę¾Ó *ßłõżųx 茿ßū3éæķ%å*!"āĶė’žū/ż,'\ł;ó #ä ŠŽč3Ččī&źŅļ#õūšįÜ3Ōņģ&÷ū(š"žąÖęż$å¾4:'&ż#ż ’ūÕĪķŽ’čĄéŁŽöńžŠīųŅńįģ’ B"šüķš ńŹ ū泊/Śū õ&óń÷Ś÷)åöņ ’ųśÖźī¾ü.ōķśÓ#ō ' Ņėü ÷ öč Śė ųśžöļŪųżē ßłķėöüĶż) ÷ūź×&ö ’ż&ņ1Cķļ×Öėń)4ń(@ž@Óäåć +öģ żšļśż ń0%Öćöō)žäģōüł,Õįų’ūčź÷Ž.õ- żüŽųŁųēó8åö$źš*īųćąāłļšźéģ:ŁēŪ,ū Ö"įłąż³ ’žöīõ7óś Oīęļäłńß/ĢG īńFś Ė߀óĒ3ųīō!)łóŻķ×Ä+ś!$; ßĢ©’4łźŹéCš ŽŁ÷ńžńęüžóÓŲŽó€Öļ"ŪŻ"ł źź ś ׿ Į$ó’Ęāėļ ēē?'Łüł żŌżüš" ī% =ó6÷ŻśÓśńųł’ń4+ę żćė źšÜėś$¹Ėčų!›ŚęJéīīķ9ā¶"ż#ōõā3ēģĆ(ĘõśŁ2ų½Śķ  «ńį:$ņ Śūńó ż' ÷ö"éōóõäś) ķß ä1ĢOźū īš(*üŁŪ4$ źóŲō°Žłž į*S:õģĪĀźū1ÓĖ)€* ÷ņŻłUŠōū õżćģõ/Ģ ü­ä(Kė%Ü’ó26ē śö,ūÕłó6üŻµÅ ÜłšĶ%õFō×ļ5Eé½čõųø’ ž*)6éżŌēųīŃėė żč ü÷!Ģ×÷!üīśļÜ O÷ų żŁōļ’ Äń ō1)ųź’!ĻÖNü 9šģģōŠłż”Ž2+ŁļOö ŻĻŲóĢ6ćŌÕLķĘ šķŽĪÜŌżėéć ļ ÅķļźģžPź>Ķź$(Ėźč’$ż $@śĻłŹĢ/ŚūõĄõīļõ¶Åé„ öõų×ōōūćķ"ā' ”ÓÖõģ&Ł6wōņ§ž9BśśõŽÜVż+õģ" :#ę,Žėß<ī÷ ś8āžÜźŌųżöÖš.čļ,Ń$7'ķKöäōüšćūķ ļįŃń’ IüśĻõśā÷žŃ ĶŌ ņ I+Å,ŪćóńĆ<ģ'Łēüµäōņ(õ׿Ääōł’óņįū -ż Ż- ļšé# Źł +ĆŽńä. ų ÷Ļį!(ßūCüādżņĶ1ą1ŅżåńOé4ßóķēżŌŻ;÷žūīļ’×įö6× >8HēēåłāĻŽB(įż1žłōģźĀćą½5ķRų¶ųģ0ŻŚœĘŽ» ą "é,CįéÜüč4ōŻÜĢß/ūü$Š’ą÷¦>ōü÷!Üņšõóü((*Ö įź"Ń“>ē’>łģ9ŅRāÜąóķŻö(ĖļĪōä±üāłÜņ÷õ?Ź'’ä ķó0ńćśrŌģ÷š#>ŚŃÕņ"óļLķ" ä ń"źśģX2ĖŠ3įüōŠįĢ.ō öžłéšģ4 ūŻÜÕ )äāžŪöõøųö»įŃ$ łūżüó ģ"ėčŹ4†ū"ņ ńßęń,÷ų .Łėåūųļļó@©ĒĖ;šŽńė#óé4+ēōń(0ėš9 ēņÆ,<žģ &ŻėÕ!ä¾/(ī¾ķłū * ōżł@?«öč³$"ųÕņHģĄšĖŲŁÅ’ē0Ćņ^śÕH‚«ńž1üŅóä#čõ 󚊖 wž@$öēųē$ēćīį÷łū. ŚÕŠ8Ģ ńķ: īÓėŪ"ņń ļžīļūłŹŹš¹źįćū½%šā÷ÖńPńüä 3 ß éÄźõżįķń ,5ٰńż;īźĢéjėN ³żH¬å2ĖFū,ĮßĮłA* ņźķįDõ ĢķŪ#»ę¹Ōņ ÷ ńaė3"ó 8÷ QņĶ,’ė)ZĻńģ'bģgżžDžM?ųEÆżh#śū–Tńżšö D.ś›ĘęńŻń×+Fó’ß$ŠOż22Ż÷üäĆÉē ›÷+'ćO āśŻ·æī>ģ°Ąöģ9ä'ļė7ž€ā)- ßā śŽŗņ 'öüīś ¼śå’„ēAƒ öźśīą ŠģõŽ(.2Üė*ńóžńĒ4§ē ü÷ßūįłåI°·ŻūČžź.öŁćĻšöõ€Ń&ņ ČÓżÜ2ūżóźč öżōó īō%jŲŽź­ćźģĆņüųĘóū<č÷'įé ł‘Ļ€ ńÅ žęõü  !(ūņō"“żĻŚūē ½å÷.ōą%ńĖ öł6# 5ķē$» €s÷äõ#šļłńļüĖ÷ ļąū AįķüęŽõź!åź!šīÜžćN*«öńģ_éč?ńD¶śćģųć)ś*įÜ;  ę€ źńńęäōö0ŃŽū$é. żūžėüż ėš)ćé'Ö2Ö ūį%Zߌö'÷ö’ņž÷Ž÷ė žĒć öwÕŲŌx=)§%ŻŲ9Üū’ßężō äÖŽ Ōģī ńĀŽPCéVDŹē'šōõåūŽ’ Ņ5|ńūłģŚoĶČ÷ߏ ÓÆżķĶ%łÅ9Ģß6Č Üš±ÕåõĪóżłżó("9Åē DęÅ<ėåł×Ąėėšö'YŻ&ü¾č3ÜC>ņ "²Ö*Ąģ.ūūīĻ"ĢA8Č+’ŽäļųÜW į)ņń Gš āģ*žķ ģĒ×Ć4üóóśCūćĘģ ķņķ *÷4üõ?ڰ&Žäē÷ ī׌ūéŹŌīņ‰¾ ĮėõģŁ'Ż+ńŪ öųšÓÜļāčöē"õłŲ1&śķķł %õóūŃ ā" å9’ü70 ņÜē%ķ×āļń?9ŪŲAń÷ųēńńBęęnŻōõķšõīŪų×ņ' žčūēėģÜ=*ŠĆM é6/ī03ūÜ,+ą=ųńåģŚBŠ3į ā×)Łīņõ?ōČ*Śż*0łļšš˜ń(+śįŪ ž ü&Ū-é@.üż$ö÷ōź¤ü(ūīžėļēöŻČõ¶ š)ęöÉ ņ ęž+ ņĖö"³ņ='ā÷'ūpüėč’ŌÜ#ļčø$ß" ÉöŃž ćō õĒ2śś’!åļłóūŽėŪīŁ’é÷ųž’ņ äĶ żš’_ž’÷ņ *ž)ą łŻ"ģ’4ļó’÷Ēóßšų7aöł ņ=ł1ÅŅÖ& õöä’ ē ź#čĀūŅšņēŠźęś!ē÷ī+ śłųŃõć%ē÷ų žčęģūń")ŽĆ ū%ż öęģōź öūš`®ļ  é½ųņāéļŻ3 čņ+üēčµöÖč%B7īÉü-÷Ą Ü2Ž‘ż­ś‘ę "Ö’ (÷ ļåčżž śķŪ!,Żų BĖ "=Čźē ó’ņü2]’9é; Dä¼’śö)4 ń8«#č0ŁńžźRśõķ '"&@łļŅ>Žš#ŹųöĘ÷*—¼ö6ćÓå%ęģĄMżŌļ2ŗßŁÅ@łņėņ$ų@ Ž#Åłų ’ō.å¼Ī # óāī"ĶōŽęīųäń]’ Cū+ļś1üõūļ 0$Ż ņ& ŅÖŪ½-ķāóŽŚń8Ößźģ÷3’ż#ĖęåōŃųśī ÕżĶė9Õźū&åņīģę ż!ŪņČåż“·ķ źż¾ ź »Æ Ļ÷ų ė˜Žłą’ń  ’ųĻėųóõöūš1ö Ź%`!öūāģ8šśūäęüŽ.óģ)qĻńėų$ °ń$6ŹŻč’ßļśė6ńś,üėļ%źż’ņ ł ųüšņčĖÓ6¾EżüõÖüö'źõ%÷ėų÷ö]żąŽżžųķä¹ńŽŁ Ö ÅĶäß²/ūčųåó÷-ņ»! ōüMŲ(ķ&Š÷錿ėśųéßśž% ­"Ļ/Ńņ ·’ė;*ן 6 ń Ļb Ń"ó@ĢHų÷Kž&īłŅ’üēŌ'ŖėĻ€Õ­7M:ņ 7S -Šž! ėćł ;ŽóģBąŪj'Ón<+ ąńÕģö9¼ĖėüŁžßēČóž.½jå³ććöŁźī¾źä.Ž›żāņ Ü0ž6’ÆåßļøēšŅ ł9é ó’ ü) łšģįēł ŗNū& P ėāĢĒ š¤ ļÉ;õ¾šņÖ óøõśņßō9"ž÷üČóŻéłńõėé'Üūü÷ 9 ģń'ąą źŲ’ µ°$žķžłžśē®ż&ŌÕń'ü1óżĶÖ'įņļū *ĖŲõ ,ćÉé’żķöūŃ ÷Ņōō9ė š¼7ķ3ūęūńļįķźŗńŗż"I;ēÖüķ)Jäįģ.ß õ×*FæŲßōĮęUNģö`Ć hŽĘ4·åĪ! ņ³0ÜÖå0ÕĆ%Āž ü õɶE­NJ  āūóńūŠ CĀÄóā2ž(L'$ ·Ü µÓ× E’æŌ ś€ö4ž )ö 4A’ś4įÖėļ ųäžżéŗ.ݾļŽČöh*ŻÕ™“éžēėīģžō)ś$ćżžżūģüńŃīķę ļįćŁßÜŽēūĀ<õś÷2ŚH’ó$Ļ#š' ’’žÕ,łų(6ųņŻÖWĮšåęģ6ö öåįś#,Ū ķ*ŚšöņÓżćżõ ńŪöąćéČšĄłßś ųö āķüÕÜ+¢õäž »¶ē šū±ńž1ķŻ(ńśņõ&+ō÷Žļ%öžńēļśóåńöżųūłßīÖ’ óóž) ķ!ģśūŚńžŽż čĘ Bźü Ģłóµō޼öī āåN ü šüž!ółļĆ ūō÷ćéŽóó˜ ńūśŌÜ&īõüśEÕĖ (%ē ’öóų"š(ļš#čōž-#Ģė ńźķÅÖÜ"žżśŻ-źó%ėšūķś ! $õżųńŪ Ģó=%čõļų÷ešÆ€ųū§ ģó‹įčŖ)!ųø Īūå$'öĻėŗŁåųó,šPGŪ1Źż’šćī¬š !čųéō;¹»+ óéī’Žķ ĄćĘł÷' ßžį+śüńłßąVĶŹ’Ųŗ*ö ŌÜõéžóķžć÷ĘųÕü€ņ) šęöņLėŁõóüŻ] ÕéąūŽīōóšķ"Õ’śčįżćźŗ ņüōė¦ Łųźū’ŚM ß(’ōÆĢõū¬Žłóõ'ųō<č÷Ö žėłņ÷7B÷eż#Ń?šż÷’ Äłļ[’KźćŪ Ž’Ö÷1 ’÷īą$ Ł īįžžÓŽ#šžė€ģ¼ ź 1Šżö’ņ ß āłCHż€’ņśńūųž üׯÖ&t śśäąrų$öģ ļł³QčŚ#Ēć"ā õż\õ8öŻ’0 Żį5 ÜųŽęĻżHģ3^źś įūėüŹåö Łś"Ņžößė’ßūņ+ģö )ęņHÓū ś÷’ !&įųł°/čėŽ ė)"+E( ķįń!ć õįķÖżžł +’łėōõäŹņ0ģö ć Ž$¾Ś<żóō ś¼š"źÕųłX &÷īųģĪé$ē$4§ģŠ8Óåßü6łö'0śēńżHåD!ģµÄ÷ ß㣠ÕŅ„żįąń÷²ć÷püśCī$ ż*łųšłHūć'6(żŃōģ ąOńųö÷ßöh ņéņõ Īół įü ż’PėŚį 2ķšē¶ż+"ųNüņķ  źųö ĪģŪķ3śē$žōßķłāÉśčĪńķńčōīļ ńžśņņÓų ĻžÜü õ’4Aé%š ę÷Āķļłć*żåš(ĀĪ%łśö[żó÷ŁųŪ÷üłįśÓõžéēóÜš ś’žšö1’* Tćūū źńžć žčļ Śóę ó5& ļÜŠ-ōłęņŁ bų ņóš÷ üē/ą,Ņ'. ż#źēū ņźńéźÕ¹ę õŽķ& +ʳ6>Ą’ļŻ  żŹ0+׿Ü÷Ż/āŪ åķļ ś"O0čīŖéßß Yć龚äóėź÷÷ŁĒöŸ(Śóᮼ÷óķ5#Kķä’īĶįõ,öž5 Ł!ŽīŃH įü ēłńłõ÷Ü1ļŅÉąō ’ęśö āżčų)ėūāźž0åßģö ÷÷)2śĆų'ģļžß ś1ķųŽēīÖ WōżfųłŅ0īčųŅžß¢ąMöóEä.)߯ łŌŁģ'$Ć!cÅŚĘŹ]7ŻM 2łēł /ÓśįĆē <Ę+:ųéņ ŅŲņE‚-×Ųļóśā÷įąīå1ν÷Ģģł!īÖéĶAõT5ōÄ ū*/ē &] õ«fū+ī6 öāāūŌŚŽÓź0 ß ųõ(ü Ū.ÖÓ ģ!ųųķćāÜżōūū3%+÷÷ņ ćųōåŚĶ+$ŻõÓźŚļļž¬åź(ń÷ś$ Śīó$÷čēČ俏ō#ĖłŪīń$’žäļõśżó"Ī)ś!ņ’Śąųżų.ęžŅüóõā#ł ļšś ųśīų ąJźłŻō+ź ųė 8ņ=ń ī÷žčųé܌$å Ž÷*ń(ųī+ņņń-ļčĆ/,-ā¼ó&āēöź żŌź’÷ņŅMßįś5å÷ŻŠšöóõŪ~ō #÷ éh#’ļū@÷ż7éēÖż²"-:żūēčüéźųü÷ėŻķÕÄŽė8Ķ’#żū3 šųžļī1ćāāģ/m¾’¼ĒłżčłļćóģņĄ’Yš !Õ ŪčžėDļóŽśåõĪų(óWÕ üڽ ōĒų ų ,čķ$8ÕēĮūļō+žģ¼ź-å¶śå2õ·įžņ°DčŁ·īžš ł'Üčöåęö’ā'Ķ į éŲģ’Ż4=ĪāI÷ß’+Żśł/īåžõ"ō öļģüŻŻė Ōč €±žžź"Ć FįÉžGż ģł'P8ĻŅeTś üG.śņ2Mü6ńßõ@Łßżź*é°õ'ńļü÷š+üī:ģå’"'»įÜ. 9Ģ ÷ŪNēńāĒ ±śó Cć,ź3ū  ² ģ’ųłõųåķÜüžų’L0ģüä É5+ žüģź’Ś÷ Óā ’÷ģ ž9éźß č0ķÜ 3šśüļó šķ äĢė3Jśč½õīä×ü Ü Ē2 ö ńö źÜńśŚėü@ Ū91Nß)õ $łųĖĆķ2’ņżü)džšģū™ź’ÓŃ-łD÷3öü ņūį Ž ö õ!ūż€üõŚāģŚł¤Ī»ģåŪęDõ#ĀščōÉŲļZųŌś"Āż&ųżīń97é2äēźV4ū×č!ņņī@öœ ėóēü¹dõėō!ä ē Ķ÷ÕYC’ģä]ՓęJBʤPŲäķź85Wä8ź'+Ļ'0 ) ņÖńQń ,åē1ūõį &2óūĆõłĀģž!ł:ķęśō?öSį7õīā"[żßŁī¼¹ õłõćųģ#üżŪł)Éń  ,īöŻ3 üå įöź÷īć÷ęń Łō šb J3 ķåż ŅŌćė óŲ5ł łÉZ²ó!:ŁšŪŁ ß[Ž-ę÷öŻō’Ū ń’Ś3IśłčĒóč .’ ųāźčō/ž Õšč'÷!Łæō0öÜųįīBėŌõūųź÷Võ; żŻö鳣üźū J ō×ģńTöļć åŪéŹKūī’śČš1öż·ńīö׿ó$ęīõęü’äöŚ õ:śĆą·ń÷ō łų $żļüL ńżķć!* üžģŅī>ś/!ūč-ųūćšń ŹŲ(Īņė õü  ėĢāļž&Ūü“ųōBč,äįųų īŪōųŽįę'ČłŽ$š äöłė ’ųåųŽōŽę ŻĒŪåä ł ī Fņ4±ā&Ų1Žģ1 Śī  éņÖųś.ź ųŪż÷ĢāīõĪ-ßģķü ’ Żć;č ÷ ēįüäÜŪ×’šāä śś"żćźņłŻ0ūöķō3Q Źć’%żĒŽŚ)’Żó į ?ü€ö'ģ!ĻĮé3ū- õ5ėĻ%ć2łēę %1ģöõėōūŠųß(ņ īšŁżżųł ōöüž"(÷ļēśąŪ "É>åüėōżė ĖżųZü)ęāÜH  h­÷Łń!įśš2ėŗ’ķ}'ā" ?āū%!˜N ēūģš *ßŪ댶<Yć]Śó  ōęÓOų3ńüFų€śYŚčéžņóNŚČ"šņ:/Ūē ķ éFŅŹY ūź7ń5÷/×$õßłäÖļŌ(6ėā łŅ«Eū*SŠ3żÅéä= å—•ˆć䉀÷0ļ³ā †ż žščŚ š¶ŽĀłš/ūń ōģęńŁ ; ķæ ņŁģäÉęČ÷ņģÜż 7é”ē#ÅłEÜńķ(G$ "ńÓ”$Ž0F~ŠųĀō śÖż’¢õÕ ÷8 ’Č=óęėō÷ļŅ8   ĪŽłA=%īöõ½į śŽéóŃśŅėĖóĒNśöżŻåü(Ń"Ąų*żģ šÓźö łģö3’ Ćņü÷Šź ńéŻ ēżą ,Ļ ķ>é5ųn ńūŪ öö< é" ćėłńźūšÜčßóģ÷’ŽÜ üüūŌīāÖ#äĒöŠ ī ÷6ģ ¾ķå  Ź č&  ūāē ÷éžśüīž čĢ)"6¦Ū÷*āų·ūų÷Š*åśśĆūżśń÷ž/ŅÖĒ-żćüģ&&żźōļŻ'õĒē!ßłęŹ1I"nüōö"śśī)ų  %`µGŲųōź“ōė2ńśŁģ äā=Üē€)öņ)ĢŌį'$J×ķļ-)ūź%ŽBż üķżóīčźžī ŽŁżŻō>ķōēśāļ’ųõē×’ öņ~łź ĻGįŪ'ž’ŹT ēéé*ć ŻķV7óļš*ž ņÅŌņ“.É  ĢŻń: /+īšĪŚÜõ ų@šń(šæŪōBłv*üżś óēÜż’H% ¹ģö·÷ė+×*ŲNųüö3/)’ŅŪ™š.KŽļčō+ńĘé üęśžāóŲ üRQ&ÜļŽńÄéę ź(ĘŅ ŠµŖŻųTźļöķXö7üųžū÷ę/źąųēO@  "Ū$¬é łśąōē:åü( 8’’Åśö°Ń( ļ93ćZļÖūįDšśŪį!ó"žó÷ū Ųļą 7P$"/P -2ņšč8ōł("ŲāūśōŁį&ņ ¾öüõž#,åóļēöžą3šŽ4# ķ gżāüüž ņ7ś3ā÷śćö śż#ī>źž"źė P åöł+ś%ū#ōó’=ėó÷šś’ūóß ņ ōŁē ņ õžūłļō ÷ųš 4 łōųģś’ö :óÜ ÷śųõ ļęō%@ėīśŹ#FhĻöüŁ÷įą óś’śüłö¾#’÷ śėž!’,ß÷įōōĮžśķķģūńźüų åśü Üī ’ż’öż’ūķłüņ!šÄč ś’ & żļī/( ėēēųĖŃšHŪö»üāšźH÷ž1"ńāÕżüēŪJ›ń÷Öäķ ŹöĪå9ōłö¾ €# ”Ū£&āļö$ēóļ %Įęņ$6äöōü× $źņŻöģńLā šņŅ óėŪóżéĘż’,ü""Xö ģłŲóŃüł}Ÿßżąū ž Ė!ž <žÄüģęäōĘųżR3śMóśéČī.ټÖöųIńķč;M žö ¹(‰Ą!žöÅž%KĄėĖŻńķ€B'JŲ’õ9ųßģ8åžł¶ßŲōģŹŌFJß%< āõš„ÆŌE9ńśżüėB : óš0(ėźķ)œķß“ūš’6ÖķNśōž0:ū™"Ūńūą@ļCźĒģķWż żųóįģdūāš25"Ū$ōń’,"ģŗ’U ćĮ÷ä éÜłķįūąųļó÷ė’źŲöĶŻ !;¶Uk ūåŚ ā į’ž* -"ģš ö&ķößś%ż„ņFH ļ”žCY T%7ŽŅÖäÅļČüķęŻķŽ­öļā ą ųšü įŽäļś% õŪÉF+Ē6ōū2!üž2÷/äC( ų=ķĮīśåÜųóßõē ĄÉ 4ēĢ čšO (õą öż8óżä÷ņęż4ß:ʬĆį ŠŃ&Ųś÷å/å FŲĻ’,łBģę/ŻŅ! ó ł$ņ§äßķüüŃī üĒó /7ųśąČ "öūēó–čōś’ Ź”įĮĶłÓo_Čņ÷č é#ŁŻšŻÉį³-ščżążéēJ żļų#śųÄćķ%ś*ńų/,ń)ņ:ŪóČ$ėä÷CŃęć ¶`*Ī!Śķ¶’žł0éßęÉčŻ ÷ō’ōę4žō$ .Ę(Ė;ŅēŻ!ńÕóå*ņHFóĢńĢ̶ęįį¹žńęׯ -+żŌüüņ×÷5łńöīåÕ÷ģß&Ż Ķ ’Ńū ūų}æģń<ō)ÅÓ0÷)­ņÜ!łē%ė8ź ! żŽŠłāžž’š÷ļł#ńąéū"čü  šÄ ÷Ū įī8Čč šü#$ )< ņ)  šóų$3ėūžņó š 4 üšźķöų#ėļ0ć8ö&łŪüŠ’ü$< āėęķŽŪĮ ü-ķśķ ō ųü’ō “’čžü ŽšžQĶ©=åL’ģšóČ>Ļßū&äų=ņļö;ÜÜ&öō1čųÖ÷Ł ņŪ ¹ČāŻģ 5Ł*äĢ;VĖ1+׳ź'Å ļåį"ĪŽ&Ńūż åé'õė õę(š åā8Ś0ģčę½Q ³<ų÷ę!ųóL’č½åųčé÷ö:ĪŌŽüłķčŲ2ŪģćįūūÕYŠģŽBß×ŲŌčäœ!ėŽš÷_Įöņõ!ĻōÓ <į3ÜĢĖŽķü×M žÕĒļ §ųć %Æóóé'ÜčĆņh÷Õ2ī#L šė ūč·Lī3į>=/œ÷56Ė4ĀĘSśö:ī  # %š ©6ļŪĪō‹Ż%äż!õN.9!)Ķų ŹģķŚčķžżśĀ)ąąä[æ±ń&Ń8ģ ’ž> ĄņżŅßżė!ĄĪŚĢóę#ڶłš/{īŌøŲÅčņ+ ń(žļ ĮūóŠóäüü Ę_š& ļ,öśÖ ģüłę³é śCüŁ-Į’&>Ņ’"ćøļŽūŅ XŻš…žźŁŪ?×żĘ ūķō$ö÷*!*ķ%ß󞔣ńĄņź īVĻųėÜņå Ļū-ņīöŻ? 'ģńāÜō,žņÆSĆŲ#ń..ųõ ęōĆŗü ųé÷ś®1ŌŌĢ (ć½Ļėó×=ūéEłųM×»¼Ē¢ĒuŹ3ó>ęųWóś’ŻPÜ @ļÕßĶRżĪ8Ėn:Ž ~+ŹjČŁ?;śžųŲ¶5•ŹHĢŅ -ē½.)Ū ĶBž’ńæ6§ ūōō= łń=½ŌåæóįN²éM+&Żō’Õćįóē(3Ŗę<į:Ų¼÷ūųĖ% žó~Ššó;ø4ū­ć%ó@½4"œŚ3ģõŌć ÷Ė X;Ļ#°ūJö"ōģē Ż2ó ųūšŚō .ĢŃ鯚Öü(łź÷,ö/ćÕ!*'ņęųė»öéüŅė×F+Ąģī#!żĀ$éZØēķ ćųšĒžąų ū’āüŌū"ó¾ßžž ņöėņń<ō¤# ßĆśÕė*ūģī÷ńĪaĀōę#"#éšė8UÖśŠÄ õĢę¢ßßŌļä÷ óŹÜĻč~šń ł ?Ā)Æń¼ßŠóŽćÜšü<ͽIź÷ėH¬žįņūņÉ„ ū $š'ēīčXCĒś 8éŻ T<ś qÅä ÉÅÜŚčõó"ńéįōę¬ģĶéęš ŽÜżķ÷łķź%Ž@ļ ł÷'ū÷Ķ/łå²ķ ŚŽš ł¹ńģ,õńßę© 4ä ×ē›ą÷ńōKaīą &õķŁ=”ā2Ž 7÷Ż÷ęćŚ6?ē/ęšńWšķŻA7Į03% $ńģ4!/śĶūŽ?ęĄÄć",ł! ńüF Cųå :'= 3¾śńūåCPŸļ/'LąŚWūęBėųŃPś Yå )ąåÉŻ"ėŃęTśÓ Ūņūļ ļtż$Qśó émińņš4ėĒģć?ļļę<:č ėłAŽÕŲÕč÷ī‚€ūóü n,7ņŁ I 'Ä&äćėņŽłß8ÓīG"õ;Ołć7śłō2Döč’įīõž)ą óīūKżŽBŹóŗō ß Ėå+Ż ļžē'äēėāņżźāōóū'śīé’üõ<ØĢį×óóēÓ,ć&$ŪóüŻņéæ51!ąīŌÄĆ× ūēņęŻRÜÖā'Įłś "ą" ųŽEź' ę*A¾ õĻåé’ /×äĻńļÕ0Ų**4Żė0ćų(ņššę:<*ōŌ. 垎'ī' ģ5ń/ż<źĢŽCÓńŻ7łźćé ÷žĒłūń&śųėķ×ćē üēē÷ß)ĻJÜŠ õŁė į ö3ó. õń!ęįµż÷ ßHĪ">÷üŁ; ’öé2+ śųķEóéß.ī łŽ÷ /"óüņõłĶ’ėāįåæ ó×éęćŪū7ÕĘHņóš'ė5å'’ėæ& źņœŁć œŚźšžé )j’8ē!*÷÷ńŚł=-5śų¹i”ßųßĪļķ ’ęēņīūēāõ/īņÉLįŅ#źóŚ÷ķąś Ų±Ļ)<э÷éF%ż9įõÜü2ŽĻźVĶę’ļ7 ś÷ ļžī* #ż’ł/ ź TĀ żūšćWŠ2H²ļųŁżõōÕ Ķõū Ā1"1 ;é÷°öĒåü ī'Öżč%ļŁÖéÓÄėĒ :śū '8÷ćõü #Éæų€ !ņ $Ūįž=b :ēś+#%’÷-’öć×(/NŚūßü×ōŽVÕżī¾Ššūķęüź>’ ąüŻćó%č+/ŸÓź"YŃ’ä"10 (} $ÜėśÓń93ŗšųŲüóéł'8öåķ ū/74ńū³ēŗł Ō# ¬Ž!Šūä3Ķ żCūŲ6÷;ķ÷ Õ ūÜ'-©0ūŚ<{·Ę:óŪ3ī ćō±`ō?Rą"ļźēń ļźÉżśĒ(ßŃåā4ųč’łķ÷ āā žDŌž!$ (& Œįė+ åó¼¹L żĆ ų5> 0÷ÅsĘ#ęč8-ī ¾ų8ėÅ×ķ ķōėć¶ ĪąŲõ×ĖcĒ'ĀɱņÓū%ļęż(Ś1ö+Ż*ö8ųė Ė;ū-ä’÷$:Ū(źōÄŪķūūčdī’šÓŠ  H,óX&ą ł ĮĶN #%ė8ü@­Ź éųÕ1@'õĒJ?.`ĪņÖõż6æ)Ū¼>ō5āĪBŲ&9 5åōż$DšŚ{¾śæźķö Cė.$ČóžÓŅŪß&ż b^Ļ~æn8čŪł¶üĄÄ ęćžćģĄ/Ū¼VĘśź’Ż™Ć5ÓÉ3Īęj”ī1€š}€?)ŲŻŃöį€H‚9įģ+åĻ"¹'Ć®čźę ’Y½Ŗšėž~ 3Čņƒ܂€ņÄå)æ €/)Cģ™Ón·‡7Kčƒ"Ŗ€ż2Łļ-øÕšęøł×ķAĪÄūK7€%9čvŃ#¦õżģõ_’ÓŃPģÅ%£€ł€!A¹wŲDč"æžšÄ ļŪ)üŸß’Ōćl•šüčÖŲļŹę Ė& ķ5õóÕ— 3ųźó ėåź6$üŻė+ģ6€”!¦Øõ Q6¤ÉŻ æ6čūāu„(į{ Ķ Ż§!ģ ń OżWÓżŚŻ *š4PęģåŚßsųöė&ÕŻ)4Ü÷Ŗ  +ååĻē"Ļś÷Õ '€@ \Ų%ؼ%õŻ!÷ ū9("ūQÜ ŠŚśüčĒ5ŅÕ÷ģńįŚ ėģßć&ąéļéńėū8ń4+üįźčŻ6żūŁõüڼŪ4óž +1ÖäóåāĖÄśĪłĻ)"!;åŪāņ  ńŁ!œ+ ŁöśČéößå÷Ē098;5¼ŗś4ū|óJĢ4łńžĢ ńÆ āõŅ'žŻŅą -ū)’ńåßęÖš åāĮ’ćŚ#,ņöņ ēŠų÷ŚęŚķõłÄå")łó ē ųŻ ōŁūāö%×’Ś(čį̼ źĀCō 8ń ß7ż )ų "ÄF¦ī.ūńTŁ0ī'ŪÕÉ.ķ Ü č(õh= åņģéōū *%é"Īåąüż "öśńÄ åėÖæūüī-9ćį7ł -Ėčī÷ %× !’ąŚöŌżßõ:1’īśŅöŠ ÜõGŲįæ(Œ –Ü5ōŗ0 ņóęĶ/$ą€H!ņ&59 iÉ’€ŹĮźó.Aِ2‚6WśI/ŹŻń8ō’nõžT°SŸ©Vž?8²€ü«ąž"~€öłJ €ėFŽm Jü(Ų’ŠųÅf&&Öü Ś€(ėž0ƁiҲę€#ųžņI -6ų&>2Øķķ1ļ(Ś4%;śT#±ļ•.Ņ©>ńņ6;õ=åŁ$į;öž$ųÉ  2 ß,ēFĖī÷ōė<äēKĮżīē¦ >ņ¦ō'(ō©ģĘQöÖīš-õĢ7‚ŁŌāĖš;3 ,(ĒęĒčČó6ļAL<Č1ō, īąųöö čqČ2öNŃ׿å¶,ŲÓŪö*Üß)4Āc-ąCó+Ō%ꫜGlŪŌ95€ų%Ćü Ó'0U?÷óŖÓŌžŅåŃļė* īFæÉ 6ČŠņŗ %äÄÉĒÜž8üq'Ćõķ[ÖŪķź'f©0ęÅÖŃŠś5)ļ"Ćł ē R6=Ä9µā’ĢĪś)#ķ#ģ0½éŹ %žž#/{Éśõ'"TB²’óŠGĀBčĀģ_ņ:5ģČųķ!”ŚEķ6äŲ ūņ’ ±ś ±ģčņ&Ó$€ķCüįÄšĢ*ķųčēó"ü]’ –ūż×ģŚž±"żē$č»ßįŽĪ0ā4ś*ė-ģ±ŽĪšāōāŹķēŻčų^Ē׳ ČŹ")Ź#ó-öē“+ąžķķłõ-ų2Ģöšö ōūjōņ£šķ×ßļėJ  ķö( ×K0 žŚ÷żļŪõ?ś#Ęś¤+]ŲŪ'*č1÷Ļī<.’ éä¶ēĖäČ!śüĻłōę-’ōģģšķņ’żó½ēć( ń<0fÉ ’ļźńńšŲ ž ž ćÅ łóßTķ)īóóõżšąž4 §vēžŚū;'öėüĢŠāō(ē2ēõ&R ’4Ź”ĶŚÕ1ų Ä×)øgņą1ĘŹźĻ&Ęńųųõö*óQ,3(%&;6:÷ų÷*égĀ" ØMÜń=öŻ×%ŪHŽ/ä.éš½Ö!Źś+żķ„ó4!/H 1ŚÕÅ ū÷3Ķ % ĪņˆĮ ŅŪūÅļÄūéŪŠ¢õÕĖōń ł“@,šÅžķ ŚįĀVĶę,[ä=ēĶĪ/>ĒŅ Å.ąźNś ń:õšĖŚŻĪįń:Ōóōńõ®ė NÕņįõŪ Õ¾ ŁžŽų׌*ūõü)ę„ÜFHµū £üžšńļ ķ'Ž2"ū®Tż5$ śž:+żéޚöŌģ"$/Č1 ŽÖżÉA®ū¼Eź‚ĻŗcäüąÉ“ī,Ū^ 3~æÅBļŻęņ ūŃö¤̃Ńü õ >„qõ/*}〳:ōš-¢¼ß÷3!Ž"Åģ!Ķ;P§ŪāH'óņJ Ö_ś#'įžņŻĪEāé öĒ÷÷5‡ę§ĖAżōÉ$å3äsĪ€Ęš ŽĄ9€ %ś¼’šŅŚ0¼ķ•žó¤ 0=].æ€/÷’'/Öńģ ÖÆÅńĢ“%LX%术)±Ü×ö]¼÷Ė«8 üؐŁü¾ś ćåÉ5ōūųĒȬ5¾ĮN1c$‚óDZLųą’¹Łė82 ųģöĆūķ@;Ź·GĻŻž%ć÷œŅß+81ł¹Łč!=#Ė×ė÷= óö4åēżĶ“ŚĖZ× +;!āšĒ›ąYŌß1Łå(&ģ&4ļųüÜóöīĪčīś"GäņŻŖ" ų"ęłū (ōĪÖt 0æÓü ė'OćA#$GŃ.łŽ`õ ,0ņŃĖ& Ō ńåłI3ūó ßh śAēÅ)ÖDĢŪń /ņńń"ę% 2×åą!'óū**ė#4šźų×£āāåõ ÷ūźēöģ ĶģŁżĪ łóÄ ’$=¶" ėüźīüōéÓćŹ9ÓŹ<Ąó ģ’­éBį> õėīŁŅśż’Įčī-ÓōįEāÓŚ¼Ėść ŃĆņā%7žū.ģŽßóū÷łäžÜģE`żÕīńž±3&’Žšė÷Š,ęėÓąąī ö žś^ü -!"õĶ÷Ž ėä÷ ŪķéŻü!Ų ,*0śń ÷.ÓóčĮöę) ż øöūļ4ŽČėļ#4ōūQč’ū3'Gŗńżķ0@ģśŁ8 Ń÷į BąŃčė¤#ŃŪ ńżĻū żę6łāŻR%"2čóąćčߎį€Ć+›:+Žī-÷!ņ%é&Ž&ų¼ėę±õ ńōūę ¼ž ’ŃģŠõčēńŚć ńR,' śÉšŃš ÓÓä*ī ų$ē3ė CųįŪń"ŖŽČ»Żšķżųß!$õ#:óėŌź¦żGéŽ_Ō !ė"1 ÅäÄ ŻLńNń+/,$ķĆ0, Äš-9ć7ņōū.Õ×ŗFõōĖż4_š:A=īą&/|5šē" 'ö§ ćךWåē/ĪŚ šńęķ,ńÕģ乌 žœļĀŚį5ņ#ŅÄīßWķäéå2öĶĶĢ,9ĘĮąŪęłøś æģ·®gŁ$÷3,ūłū&÷ęź#Nń6’Įł %ä68ā’ųśź"ūč ?ņ/Ķ  ö)¤#½ā5ę Ņ ŅÆó&ĘŪąę摲ą 1ńķ÷éĒDņ/ö¶€±7¾čś%5Ł)łŌ÷OēŅ;ėš4ūøńŻåé ĶūÖŗĘŪé ćį;äŪēŠ9šŌųöŅŪéc!ÖĢčņ#%ēūłļ>ģ%ńµõÜąėįōč &üĮćčž Uõ©ƒŚ#ÖĒüŚU?Lł7ī'€- ŁķżČūļą£õ%BRę.ēbĄu"Õ,Ī5ü,#BāQņB“÷ßö®Ģ éæś}ģ(üōĻ4;¤\į ā9/#^āź¦I mūč÷Ē ¾ÖņźåīA.÷<(€’ŗ%Ąńåų.ē³ @ćöī/=č9ż€Ē8Ń3æøčµмFå%ęĶł # ņÅ0/Ń-RÅņ š Żą’0#Ų’@¶ ŻRółõ ą6žćŹ-Ńńķ’(Ā Öµ+$“ź8ó( įėśĘ3Bął8ü’Żź“&ÅQ’Ś-Ņõ% ( ō!)é-ō³-óĶķĘ× ļųųéųš%)ź(²Ē××ņ Ž/ģéÕ(MĀēīČł”€Ėń&ēķāę„īéæń0ĘŁÄńāžžóåNOå÷ēõ'oHģų5ōõ Ā ž ĻÆšķļ’?Ų$åńŲß±ķóųĶ> żŚHņ ¹’ö¹"éķłįÉŁņ=śŅ(ī/ī÷įė!ķģŠĒ^ 4/¼Ž8Ūūö6­ 9ßłYĶõšÖß ÉśūēŻŲ"0ż9žųåź÷ßśē[üÅėÉżß?ķ"3üöÄēś ż*ųϹ$ōōL7’äļ ēįź ŗ Ā.č-ų $LÖź"¹Õ$ó2’āū_Óļń2ūāį’ų=:1ĶīŻ7!ėō2˜ō.ņ6’’ž„&ü ęō1üĢ4ļóõ~4ōŽ·Įžč’żģńļ0óš åŹįłåįč86«Džń鯞öņś7Ųéž"$čĶõüģÜōõÉ=Ž)4ā ¼> ā ?óüö’3’PöF«1¾“¤ä"Źāä ÕŌģ'5ŁĢī Ś#čł č3ūŌēõõF+K’Ö ’ "š%Ä<īæö@,@ļ¾]ų<šĢÉģ§ŌļĀęÜę ežéWūć7Aé żü!#śžD·ō  äNå/€É *Tü;Ó&9!T( ā/ ē%żīČ$X ųęNÅŲéźāó “80é>! Õ6ėCBņüćļj®ūČ9+ä×ēéPįč 0Ā›Ę*MÖ#üõźK¼ §čśŌčžįŚ‹ ķŌ)Éśšõõä8’.ČžśåäĻ%åł÷!÷āéō éź ö.ģR #Äóēģō&DŃČIHŃ"ę=Īłņ’ļ–ł>92#Išč4ļ#ę.ę4łžż?ųŽłÜ öļ湣æ1 ķüü8$ķė1. %Ųš» ężōśåé*Ż ųõ>÷Śāū1P2!ē&ó! #½ą ęĒĶŽB+öżÄźąö Ó#'āēéż=ųśŚņūš4 ŁÆż×é õņ2 óÖźŚ÷ rüń' ϱÆ–6Ęś Éóė»4Õ$9 Żź Ž6#ąŁßĮļé č2ōįCćŻņŹź"ĀöļēJ@"ö’ģō(*ļļģ§ÅĪ#p1čS÷b.V“ī"īšoóü é#īEģE¶Ģ ęćõ&ōäĆ#ł- Łóę ”ā Ķš3 '6ņłļąęł öF 0ę ¼śł +÷’ļ" źöé÷ś’ÅTē" Nłäļ÷÷Ļśßź¤8  …źń¦śöŽóćq)-ż: "1ÜA’Ń-ü!ņČLóßģõ-Üżźėėśóō,*Ž/$ -ŠīśņOäŌŪ"'ēŌė3åŁėĒŲ1ä“’šÖßüłūīżŁNĮ÷ó÷-ó¾ņ *’Ö<,4źĄßńłė ^Ż(åģ9-żōĀóæ7 ±ł2Mļšąį ćńį,å&ž2*ė0Čž@ņś7ń÷!ŲģėÉśÆŽ’ĻķÅ)~Üü1#ęÆ 1öķ1$*āīÜ|öÜ›ų(ģ7 #’JĪņīž÷ŗė …Ė żĄģäė>¤ōž õć ņĄ9޽’ū'¾GõüKģÉī ę"æ<ļšö1ķäųģŁ į5ŗŹ’H¦/ęūėåöõŲ ŲĒæ5Ēą īźéīĆ$ @ļ0ĒKEš’Ü €ū Öā<Æ®šīĘśų-Čõßźś/%/¾Ļ ÷Åų#ģ÷ńŠ.(0Čā€Ņ'ļDą 4§š ŌńQśóõ ÷ż 2÷ćĪū&ÉčNĻÜć=Ų Ķ÷gļ6č/%œśÅńN* ó0š4÷ē!Éąź.åDļąėžę#Ł §Üö»­é&įŌņ ½:ż īöHźöź€ń³ŅäōÉĮż:üÕYśÆAŚzŲ¼łö żń¤čń²24ÖŌ  ūįö×ūĮ .7žŹ×9FģČ5żæÉ ¾)9āŠēģÕČ,ŲžŃ×ļĪņMĶ+ė'į _ō°į#+ć+ēŪ„8ĮŌī*Ķ ŽūßėAćčųī14-ģčĢē!ö<é:õDõó-ļś¾&;ųõŁŪü2ÅžįŲūśEłåś ęŚ §žö+ģėįüńéĶÕŅŲ 1ńZĄēLé­ŲóցūĖ’šģ śõēĪ žįģÕó¦•ĢöÓ ĪŽżśū ė‘ńķ÷Łöø ń#0#'#&‰ā÷0Ż ÷īļäūĻęģĢó *D 2Ūś ,č1^ō: 2åõķėČöīCéķ ņ<> ŚÖ’•żóó 8ÓźšŻ 2Ż×š’љų ī9į÷ įįųõō Dųæ %čĘėļC żcļõüōŁū ēų+ÖŁ¤4Ö×Ū;"(ō,ÜŪI#'5ģł÷õB6śāß%š÷īģ%āŻū óŪ$żéęū%Ļąö’÷āØŃ÷.@¹Į1Lī÷ćŁ%5ą+9õō:7Ų¹Š1 ŃęüÕģ\Ü 2ō Mģ'Żī*1ōūHG²ś÷÷Ī Żšž*ģ ŗ~Į& ŃV¶÷Ō÷żC%ÅģĀ,óČ.Fó3÷5$ē/źųŠ %  ō&.Āö&ĶöśŌäźūęńåńĖü#õļ*Š/–· žóŠć šŅļå1öōōśöŹĻ+1īūŻÄźÜē¼ÕÄ%Ģ õš½ņ?ķ ā;ż:åé*ņō/ī_Ž*)¢ ńé’öĪõH÷?źö%ēśĄ zø1 ( hÜ€ń€7ŗĒ(Oä%$ó!ˆ óIąŌü  śÜ(’ūßZŠķģņm%ģš>Ü’æ’4œē’AŁŽ& Š.·ćԚīĻ Ü’żüĪéÄöĻ"ō”ˆ)Ūū7Ļŗ ó‘ł%ģżp+Ū ķ2# õÕńŠōģ³Ušē5łéæüżżÕ.Y¼&&ĶćKåšŪDäXßĻæč).źł8āŠ>āÖ ę9å)į©’Ö ō%’ńīźėūć ļ*ó)žö6óü÷eļķćóžżą śķćēõŗėßäāüłļĻ’/Ņõńēž ģāÖ:łĶ#Ż šīżéįēöīÜÅģ’ ĘÄŌŲŽ7÷õ įŅ÷Ł/ĢÓ,üĆ īżėń; ÷÷ż&ō( Ė  ģõåĆ’ęźęÜ .Žś žžņČ:ÓPšųż„Ļ÷/"āģēķžåR3(’ń$ņüģŽųéÄūńĘäļšH%Ķöēūłż0ŅŲūė÷śĢ#±ļ7īš²ģżö**(ē’ć’÷ćžĮĒ ėõ8ĻF¾²0š łŅ÷üü"%·/ŻÜČGĶęüūź$óÕĶģ ŌéÆŅ’Ż&Õ€Æ ÷ķ3ō(ņ’é"‰īź~ū’ģ|Å÷11ŽśDIÅåŪź8?ó €/%ŗŽG gĖ łę ė™"P1ėŌéō Ūē’čį‘÷ā¹²ĢÜ×.9'8’õCĻõķ&!DžÜń"ĆßS!0Į)Åųėī'ņ¤šĻ_Ōų$ėģéķ=źCSę÷°Iā~ōäłåäĀąŪtŻ)ēšō³K&šĢÖ%+"£ļÄ¢ļ)ļöŪ)Ię ž’ŁķŌļHŪ÷ūŚėŃ=ģ4 šDūÕ%#?!Ä.Ō/’ś×ū×å ā×·ź€õöĖ[,źö õ/łĻ ēŻä ēõ!ų#GŽłėŻņļŚ÷ōB>Ų’ ė&öß<ėż% ķ÷źżŽļŠŌ Ć*å ļõ>Ż÷Ē ųó&š×äŗ/ä=ćāąłęÖ Źśļ ś*ę Ė%ķėą€(źāåų Ŗīļߎ÷Ž1,ņ’$ł¾ėłå-õŽ Ō-ī8 Ųį-źÜ}!!c’ėėģ źļ2ó&M7Ī&ńč%-=ö­Ų½ą Ī.wį’×L9ćŽ Źõų4Ń1ł¢iė $ŃńŠ ĻŚ<’ėż1óWó;'&ē Ę÷*? Å5żü<’ģņ> łöó’ćĀŁżīžę68Ž" “(öé’ü+õ &ļüäūų<Śā(ōÜėÖŠųėöēć¹żžóū >ł ėåö/ŲįśČß;Śōėžźńņįč;É÷ī%*+öó3ōéź×÷Üū•÷č`ä’ņõŠśŪżÓīżóōó+( ōś\(ōϼ (šā ī2÷ņ. ļõ&5÷H%Ģõ’ė Öå’ żč'į’ū Ż8Ļū! ļ+YńįłĪģā ž÷č4ö0Š’ł%ŅłBóš »łųąß1ß3ö ྿ł üÄł7łŅĢ  šč 7öž#ųķ üć3$ėōšŪõģ)× ė3,~ĻUźķö3ł ģóœÕŃō1 ŪąŻżŚÕĢļ÷ŁóżöšäģūŁ>żŻšūłöāßš?(ōš5ÜÅšņ) Ņ šŅ3ūõB9īŁŃŠā<ł ōńģčśóž"Ź×8Ū÷ņį÷5żøļĖ#C ’ų »łßVŲėEżžņ čü«ū* ä÷ß"ģ$ūś AķōÖ»÷!(šū×ķ¦&®öĒ)ž,° ś:ōōóżŃö)āńļ I) żūļ ķŪ łFT-īī4¬ąóŃ 4ä+ūąģ+8&üŪā0Ė’³óųź µņ»ēņ $.ę9õößī*30ŽęĒ)ģŚžBśīó×ÉēķŠąź+Ś ÓŽ9+ųö <ŽęūźŠęčĆńįģņåó6õ , 0ņ÷÷āŲĄų ÷ęųŲIōö'-Ł×õēšė õūÖźļ’’ō@Ó$1éćīäēī" "43ü$ėę6Ē ņ2ÓÉĆ·ļ $żäöŁā’ō÷óź Ū ś;+ł$%püōßō ųŻä()žį× Żų2ż ē :ģžŠ±p°ņ ūĮ ĄFü  *ķ šōäŹĮå%ßūĒÓ0įKõäŃõš ÷/ģ9šų żį4ѱ öłé4;ū0÷õ,ć&å%ēähģ÷Ł÷ŲćŌÉ? ōšø?Ņ·Ō ’Óļ &ś Ś(į õł< Ž śōŁ)Fēū"é ŅīŁéöŁķąÕł×!9śāķ$žéžņż1+Ķ> öé3õ ųšœš š$$ ųZõ2Įāōź¹šŌ’o5FDĀ,”+5°ŒŃół Üęųy$O:öŻķ&ڦłÉĀĄ#ų iļæŻė ŃIóVļ é Ņ£ųI Ē öīžI®Ó*=śĶ( źķ3%Šč1õõŽ¾Ūź%Ń-в '÷'óEńō-śBļ,#Åńū"ē[Ó9)šJ & Ķį%¦įóūįxń÷ł žźÄ8żó"üåłŽ ćß:ėęžFóūŹ ęC*]÷ŅžüQK0ā7ž !üöä©ŪąöšŹšśÖųš õ&ßļįĶ)šõ2.® ŲCÄ ÕGŌńę'ēļķ ūč UŌ%ļ õöīėņ &ļž’ź ö+Šź/üē4žC’ #ē#ęōčłź#ķćóæÖŻ= 19[ņ ź",VRź’J~9×ņū$üéėåA’ä… ż=Öļ€Ūæ Ģ€*ķüšÖ ‚ŁÜõ; ŻŃ€ ü2Š$ÜēāÕūŽ ŪńÜ .:āļū’äŁńŠ¢īśŻßöłäėÕ ź9åÖA÷NõH .UŪOę(Ą yėæ› ģūĢģž:ųģBčūoĪ#ź<ł×åćīē!23óī/Ń›AžÄĢ:Ą—0 ōćå 6ä8ė  >bęÄŻ+’Våć"ōŃś" 2Ź2ē«&żĀhļR:Bļ± ą6÷» ÷ļāĄ“®&-RéßöĻś+$  ż ÷ü4 śśõżłŅś÷Āāó Ż3%)ŻšDżļ×üąĘ{÷Ö×ó$6Ž ūüó’Aķöłņž€ļó čėćśāļōóņė!ž!]»ÜõŃ÷)ū Ų׿:'Ēó ±Čóā'2ģįłü’¹ųų¼)µŪ# Ż’Ūöż ) ńčåÜö" Öóņ€$å(+7ÖķĢįž4Ż’$ X پ÷āėŅųŖė×ö ŃŪ!±J9ļīü™Ž?čYżłōļ;ļšÕŁ$ü.åŻü- (ŠžT2ÄÕźčļŁļŻUB Lżū÷:63ģž=ćCĢ#āłÜĪ1ņųčųÜ@4żįaæ@śźI'źų+ēć2ņĶC ×ī’żā'žŚ%óŻĢ ½ā@ź÷Śc±ž(ā÷“ł Gü$āåóų :ó÷ŽĻ׹ū’öń’Ć ź!õ÷®ūüÓĆį:č*ģü6āūāéīG ’čŲßń’Õžgļķź ņóū’ę÷Įģ÷ ’įäˆÉ6 ķ×ęmöėŲV€ö€/ą æĻŌ»Bŗøźē×gā!„ŻÖ1+÷Łģ č!LķFžõēÕ«×ū'öļ×Õõ?<<1€óą÷Ūź‘[ 48Ž=ą#ĢÜÕ3E?ķFćS’łźM—³ć:ńżŁ;­źÓĪ!/ĶēĢV§žŌ 5Čč!IöeĖŚsFćÅĖ1 *?Ķ ŲĒõ473ŌīE?D-B£ŚąĮĘōķCż€ å*óąŚģ åØĪņ蛯’ź ,ķ ŲĒ9łį.õņ)$¹ÅŽŻżŹ śÜ$£ōžž ‚ėīūūė×ņńŅ”4ąś:źćū *ÜĮóšĪķ ’Šü9ösżąüé)ėĢmŪśÖÜ ż ŹōüלģĘüõņ" 3)ģķéÜūķ$źʳ"Įåüó4>ö?9ń=éóĖž“Ē.żü#ÕŻŽ<ņõõé×eššŅ!«öÓŁ$’ įįźÜø6łĮžśų.ļĪē÷.ńØöŠŪå śÅĖ/ ńęĢCŪóĒw< ÖĻöūż$ ŅĀ"ż"öžģĻŚ)źń"¼“D*ņūĶö² ŁÖ01ū(ķ"Æū ģĢ1,é$»Ģż[ćīčžß Ä ö Ā""ōēģņA|ēŌōūöČ ņó ćŲ€ėĘąŚ 'VÄ7īßĖĢõ:ÉļŁ3ģ2- üĢ.Jųįõ•Ų¶ąįł$ń%ęG³Ö ߗ<õł&ėc?Ų0±üē×1ŃšŁŌńĻõÖ%įŠæ,Ź ėÅ&.åŁ÷ Õżć‚ßć9—ś,±ß’’źŅĻ.ā,ö²"ķ3)Żä.łßÜó!āėīį - ×2ßH!õÜų!Gśóą&!ė€$ł,Ż üėīčśž6÷÷, žķäöżÜźą 2ųŃåźūžžņāžĢś ÓõņéģŽŠ#%Ü.ė!čę%żąõł’õŌ¾ )žėņü ėžS "ś öÖ  ä'ń+"ĪŲ"å$术Ėķ źŪņ»,äIłņ%ćłņžŽ!!ŌņžÜć’łķū’%äūō%*Į12ē#÷æVńūÖÖäż»įŚęĖ"Mī-ū- ēĆą8"Aāž$š%ē ķ-æēĒĄłÅśL÷k;³» ņģē#ęU’ łļäļģ’²õģܓ=č ā Ōó3GfĻ:8Šūķ7Ö’’ĖėūŹųę9ćĶūąūā/Ń= Ź€D½"Ó ŁBą`^ąéį9ō+éķ%µŲ$źī8ī+/Ś!žÉQże• Ūü)øå²öńĄŽģ Ł  ;÷āå üŪŃż2ļŽÆįÓCēUŗß06š ŃŲćĢ& āŲ ųž 3ūĢ:łA?–ōń€Ł5Āōö2÷Tųü"'¼ōōļ ˜€›õ¶õ,<Üüž­Ż<ÖWŚõē3M×ė4#ļ Üē Ū?C2 <€ó 3Žųł,5*· Šoū'ļę:ļéźóŻ€>ō?@’šįšÖŽdśųśŻ<ńęå­üŌż7åķö+5Ž`Š Č-ŪéężN÷Ū:1&Õīū®# –Čč·&#a6šų N÷Ļł łż)/ł4µ€Öā#ņłäčģ83!Ć/)/ 4&!ßÖ(Ļ.2ŗK86čēéĪžņėŁēF;+Ą(,Żę Óčįš*uŪßļ;*źöĒģł,¼å ±ōŹüłāśŗ’:Ōo#öŹÕEMģÜóöFüŽĶļGćć)óŽHŽģ>öŌÄ7ÕįāŅėÓČśļ ē7ß@#ēźÖęłü ö ū’0"éś“įóŌčŹ ÷-#ĮņŁ )ūžē Ēa,ōJ¹%Aźóüšč2Vų!śž;E:öČīYéń<ņę ąģ3ó ā³ īĪ%ė4,#ĀŽą  Ņūņ3ōĒ4ŻīŲŹ ;ļż*ó·ūźė!6ńżÉ@Ķųćą*įĆ5ŪŁĆĖåłćń@üģ¾łńŪ Ų Ų=ŪōōŠ“óöķ÷Öä) Ų?ĪūÖöłYŚ7ž äžØäó öłłäūī č3(­nøJį4īÖņāį÷ō # ąŽā’ ?õųĄ3ė ėó Žęņüö s/ł óęšģēĒ" ó żč’ö%ļŲ÷Ę'0š!Ļą%ż’$ćöė8Ų,-ćÕ' üēŠļ'š)/G'ŹŅåźß’+DīŹ šĮåüŽś.3 ÷14ģåóØĒ)Ü9ž$GŠ'ä“üż śŃ*ā* >ß'/łY’š×õźXē Éńž“ģ(÷śIõ ķżü!ŌąĪ$1ō:ųBŲßĒģß÷ķŚŹ÷čóŲµßÖČŌüīōļš6}~čóČmśķ% į-( -ļ ęŁ_ū 3ŹćžA%õ¬łņŽ*×Ģō¹ūžōē¶ģķå8é/ ååŁēĮóÕć =ŪķļŪŅ%<ż9#Š%ÕŌź)Ž9’ŗ·Żń-&č ėėŽžÕī 8įźkČ_ŹčŠ/<ė÷ōõp2ļ*€Ö ßČ÷ÅGž¬üÖž"ī(ÜÜņ)Äć9š£śš+ gB ,0CŃ-²ł«óėéĖ9óRYõõ‰ķč)cü żVž½ų€öLö "ö( ŲŽ0žÉóņó6Č  ŁĪcšnŠ, öł•ā ß]āJF! åę?Čą±:Üē9Ę*śÆ¶üå² ó’ßžžī 8² +éĘ#“ų’ü÷ŚžüĻė¼|/ē Ń.Ēš,Śd׌HBnģ’ņ  ļ’’’’󽙎/Ķūū÷)ųļćń$÷ŸŒ’ 5Īö#/ÜųG>*8 .;ōį"ŻģŁęŻå)żĢīŹ&LśŠž#öēļ åąWźīŌ÷×ėćõ$ź6Š))V4Ś2’ś•ńķĶė,öń&ó >ż ęķžøš'śōņ īģö¢õ0°» ÷Åū &āč ×å ö4õõź¹ėÜįźōśģ2×\ęõź÷3ļ ķńų-ė45ü18Įę9ģł š,; ų Łėńäūså÷“žKõŪśżĀ9Į/Ł(ążō’2ü$ ēćNö6ū9/ßūļż4"ņ .Ųł=,ü;¬1 Ų܍8÷óĒ’+Ęßć @8Ūčēųßņé ņ’ž%ŌVŽ ņūūäńåó$!š"Õč.ˆŌē ÷ÖÓµRęńīŽ.śŌ6Į#Ąć¼ 0ĪČõų½Ņ·ņ,ā Ółfż<ųŽŌŽŃįÅŽąJ Æźß$ļõ-4źŅ’šüūöŽüéįžÖ ųųÕĘßōłlįźčģh’ģŚß.į¹ę4³ģ¼ĄęĻŌą' -9 ōūÕłī#'-ńļĘ>Õ 4"÷’éå ō×ćĘé& Ó2 +Ļł?Öķ -*ķ ,'5ž "āēņ"Ėń3ŚÉÕĶéźåķ ,ō’ķ Åė žėļśZōc8Źķ"ĖčŹ7š-ĶŹę įįŅėI ģę Č'óõĢé,÷AMBźį üßŌ@]·*ųŖÜń3@ž©2ȹ4żßC&+ņ]ŅŁĀ@īé M&µæŹ>R’ڬG’4īõś"<"įåōōė»-!ß·H;=Ó(ŗ4ż×5Å%õ`Fźś?ņ&Eń¼! Ńī’ė Ó‘ ˼Ń<ż#CŪæ ģŪņ >Ė ½Ö4ćūĖLĘģą·ž3žā"źöķ+į)ļśĶ÷*+± īļĪēóūSßčš.>:ę8 ųēüņńĄš’8ę¾! Ęøīļś²ŻŅ™ēł ńCśI Eüō’õ"#ķ$Ų Ō!žččęžūėųüõ śń īßųä)į,ĻńęóšåęéšQķł%?ßšłõ Vźóų äž¾Zėó÷ńŠ źćķńń3 ß$$ä ģ;ü¾ÕęĢP¾ųÅžööõ s ü'šęŁĀÕŽ>ź 7 -Fė ÷æĘłē³Ü(įģÜDūģ'ņėĻņī< ¹ęģńH żēńŻ9ó»Ž1 Ą)?>žé!“øśų ēžÓ óśü1ą*żMćžŌśŹ-6&7Å9ņ NŅNšį*×/)%09ÓBęQ ėüņNĮģõ÷’@C>Õē (õšųńü>ZūśŌ ā<éģĀš0éņ#žņųżÖ’WīģńōōłńųęłNś3Ė 0Ķżćį’ęĻ1öķń ½łū0’ž%AõHūżę"ōĶģį ūłō’ųč¶śłåń.ųéĻÓ=Č öį0Ž Öčć1žŪžō–ēĆź(ī®ōōÅ¢šłó%ÄÕĶå!ēź$#ļāĆ’hųńįö-ńųÖėŲ’éįĪĄįĘäõÄbŪ'ö !Ä*T*/½õŚB°Õž4Jó÷Ké8üÖģõŪĪ=Ä+ęķ8×; än2äKŌŗÓ¶Ķ8ĖĪś):Ü/9O¤ųüÉ!÷ īī3Ļ$'Ēźŗšä ŲšŁč ’?Ö8ŪĪżłu5!·ķžüą-žN)įė&(ź€~)Ų/(žUE̾>.ž3 š“ūļł(šœßŪÄÖ źéĘžŪÖēžž ēņ’=ŪJ’ÄoŽ?ž’,Dź FŠ#īįŚEų +ņ9& 9Ų~ĘNøąōČģ’źąü ,ō’ čĶÄņ -æüÄ$”ūś*½&‚ņ3š, K āęöåĄąūšąŠ ņ0 ŻÕ8ÆŪ >ųŲ6 Żą ųķ-¶p=ąmÖ  ĄžčqŁ(?:ć/óŽõķ) Źé żöāž öėĆ 3؟é  ÷QšÅ0Bī6S2ōäŻöž+ä=ļń]ēŽÖ&Ń[õōīīņ“ż/,Ø’3 įŚŪ'ŻĮāšķčóÖG/ĻÖłJŹā ’%ęžż/ż(śļŃ?,čW’·,ŲóöÜīķżī-"(öņūļõżöŅćü ó Rł ųč2b9#Ł<bŲšķ4d ķ ņźō¦ !ė) \C"įåÜ'óĖ÷Ŗą=Õ2žłŚČęå Č05Ē.#× 1ĒžņC ±ŻšŌ8éŠ0ݰųö! Ü Łåįłüė’ūäē’S"  Ų Żė)(ų ėĘFŅŌž¼ "ó9Ļėõ rõ0üłå$× ķėŃ&(öÄö'3ó÷öó’ "'.ē×ÕłąēóÅõ  :õĘžMóģZ:łóõ( ­’ļāŚŲ,’.ī’ ė1Ō€żÆŻņ¢9'ÄŚÕ$’Ā ć ģĻü Å·5ĪŁ0 ,ųūÜ3ųļü‰å¹Ż±-»üņ ż’&õ é¶« öųø*čĮĶAٱęŲśŪäŲ/ ÷ÅŌś÷AčņŪķŹõ Lõõ› Ōķ@ æå½÷ B[;ĀååÓŅ`’÷:Kōż¹ž< /"JŅØ/ ćåÕ:/éĖc÷üÜõŅų­žÖź)Ś3ėǼį 4ųĘõņö$ *8 ĄŠDóĢó°Ś)ü0ŌzĶņPŻ)Ėņ3ņ @%ż@ŽQŲ?ż Ā.:Hó ')Įņß)ņģEÜzõ:ä#å%Æęź żŚ=:÷õ”p’ūĶżžŅ)ŚēŻ8/ā*ź8ė0Śū·ł #Ėļ5ĄõĀüÖ īõźß4Oķ"ݳ ÓyŁ÷‚ļśŪē"žųAūė ś  _żCīŽõŪüķäļ ļ$»ß¦%-āåņź GĆ®I˜źö¬( @ę ūćĒGłĒPüĘėM!,4Łīć0&ö(łJö¼:ģ×ö5ŪYķĘō’,ū0ōź * Żńą ųö"Z¦±)É_&č ū  Čėūš! ģŗ "üŻ»O÷žĘ!õńą6äĀŁ$äĢ'I¹37+ćų ś"&äŲų € :ōķ¹%.Ņ'$ūŽ>Ē€2äč$÷ł*ųóBŚ ī¾’»ź$žļ÷ žÕõ Ź!ūÜJwI ųĆ’-%šķŗķüéśó)$ī8”ü÷ę÷(ߥ3āśĘņåĆNņ/ś!wų9³æKŌ.śLÖ71īß$&~ĄžŁĮĖżø(Ūē¼¶<Åō;ųX(žóżŃė+äžMÖA :’ 'ź#ļ÷÷ß ’ š2eąōĀ(ōJźŲōრÄ>ZŃį$.+%4]ųL©$āāŖŁļ-˜Ę®č“@ł.nž-*ļ5!÷į×4ÅŃM(ģēß;‘ÖĶ@źČø»3# #ŽʼW õŪ.ķ#ō«-ĪÓļüJūśæä ²ęļrŗŇē *ö½åœ 5©ń+ÖÜąDų¾2ļ7:üśĶóśIņš%ę&ó „/!!ęśßē ’Łē±ē@é)ļŚ§ " ēĄüĪł’śÄ=ąŠ ļ@ē^µ¤’Įż" .śó"&ć  * ķ Ņū÷5ųšNĻ ēč5īžĀöų3"łŽŅ+ćų0÷Œ*żōŃAŪO ķ ^–ōā’Ē€.1®ēŅß"łš!Ä ü ų;ć"ÜėG"öüCK*ČłŖ’6ųāö9ALĖŠ}čėŗŠ÷ņÖū$ŠåņŃUū(łmßłS4*üÉłßōłõćļ¢ . ūą łÕŽų äųÅ'ß1$įK!*č€ī­ŻķžēąĮ)(āCßē±Ķęņ÷öžŠēĒņ *ųž%ģ.å%6õ ÷’ņŗ ļ ćKž-ŪU£¼5)£Łķ4ś÷«éL Óé’ @. ü’4ć0ō¹é3Öõ Ūłżć-õūš,'ģūüN5žžāƹ+Ką+:Ółū»Įßš ó3 "ņ#ąK!éó+Ī’ēāČEņŽńą×§ Ż 1į8ĢéŅóģē6ĘśÜķWŖŪöņ,ģ/ŲÖü’ņ"³· Üšāą%ūå C Ä)ė4ćś˜3;V7ū ĘķAŌZ 8Ś`ņļģŻź½ śóå$¾Ö)ļįÓ ą ŃåłkÓõé’ĖöČÜ·õąą$īīėō0üė b*ņüšó2ō@ļŪü3cī˜ųė8éŃųś÷ļž ķśį  čćäņāń;šēņų üūNÓ<Ū31ßõä óņßäēü ž'9üŌåŽĻÜų/ Ņä*ų:ߋ38üī < ąĒ$ēõöÅõOčüøĮŲü ·ėź$ä±ć±&4ŻĻęQõDį ÜŃĢÓöȼß$$åõ3ā!ńåėąß쮀4ćžÕŠłSJŁŚ"ųĢYųõī×Ēų|÷ĻÉÜXˆņAēō?āQéž ćŲÓ3é`üڹćõé6@ņ$ž/#ōŪłž ×8üĄD'9’ź3± Ļp÷Óžįó$%ńžĖć¼ĒLńė0 ķNÅWŌ'õÓóAļ6įšÕI¹ļ ęęĖĖęAĘOż’ 6,Ź7öÆŲĢüÆ<’Īūńšģ!óģ½żį@ć\ļ 毫Ī÷Ż ķLäėėE·ĄÜäģ^ćŻ 7 4ĻČæśļŽE)ķŪ žk2 ŚYńžąŚ+€ž*õņį%%éåżüĢĖB;ņąōéüźŪģ÷ J&ü(#’€|Ō& +_ć*’āś+įŪ*č+.Ö5Šņ?Ēż:ļ>īįōŌõ#4!ĻŽ– ż,źŁżÓ ų ō×߯ė19^Ń󌜎.%ćņÜÖęÉŲĪ/¹ā#6.ōž#žń*J2ķłŹóęįłū¼,÷óŅ@1€3ß-ŗōęųčõ)~,ü"ßéü Łń)Żķń NŲōķÖüvą;ņ’Ü×-ś’éį€2łŲ#ńĶßžóüćHå  ˜¼šöČÄ Ķū'éšĻōäóš ’ ŁĪ" ģõģ!ąÖ é2ęńłįšäęęüEåņ&Žö4ųö!õčŅ=;ųÜ Žšń÷*ććķŸ@ķ‘Ą6õ(Å- ÷ ģōźńļśņ$(Żąźēćźīųüūņžßķ*C+ęī » Ś/Ųü~ žł×8#ął ņ=ąļ€=Ł7¤€qā!_ü0ńģš› ĢĒ!4ź?Š īՀšÉ·ĀŽWĮż -^ßłĖŅįĻŖūö*ģ—¶(49ūčŹLię2žėņD$öé€ÖśØĢžåĆŁą%ĒNüŖÓ ,åäŃĒ,šš­źąŅā)7ę2”ŅģÜäČßŪ Į#įļ×Męūmöd}č· d÷ŅĶńPÖŠ¤äįŅĄ ū%,ōŁ%ō ä6ō0Ėķ½Z’.ōEėščęOó$Łäį2šūĖĶāć0+ Čł=5īäį'žųģō"Õ,>w’ĶÓõ³-¶ł #óŁććņŽ’ūŹģžłĻäüļŽ*ōĮ„÷žß%šŚ)āķł+֚ȞŻ)ü¤ŗ÷ ķ )ż½ļ÷ßōõ Ö±Čņ%‘ō2šßŲ& õąFå ķģŻ%Ü ¹Ęē’ßĪé!öå,üź1(üų µÜ$óäžźńTļōåG%ńüńŠņŁż0éżī3é 4éžß–ø  ķ* ū%’åÜ ōNńč* Āõ,ę Ō³ė0āśļŁåŲ÷i#ĶļŽ#»’żō ˜÷śōŲżŃÉ,āšņĘ)‚ų5’ōKį <ĶėõCŻĪ¦Ś/å)ĒŹkõ+Ė ’öŚ’,ŁĆŽ9ģ¶ßķ’ń³õżł±æģĻśū ü śģ!2ŌŻŅĘBĶöH +Ä £āZ ÷ÕĮūē ÷ÖžŪģė^\Š4’öõ%óLŃņ*ņ)j ņŅ.ż: >łóV 3!'ö½&Č( S ÕĘąśéüŪ*’Ź,éąąļæ>Ī÷ą1éń *oŚD ŪČ(='ūš·¬(WO;ąŌÄÓķ½)"łęē3 ā+\ÆļY\ó.é“ōÉøåĢźßĮžYį’Ł÷ū.ń÷öÓėżCö÷õ ÜõŪÜżŪä ęČ+ą ī2 ņčöś=½ č„ķ-T1; Mļ7 Q\ęśķóūõå+īųK āń ?ÄļĢżšü×ļH KēŅóź² Üųö*°ņ&å6õĶÖŽ$õ’čŹgģó; €śźó5ķō=Ū \ņęōī  Sķ ¹ Ī’!śźüķ’Ö0Æķ%€væsĖŃmšėź#­ž+ń÷Łč÷Ūü÷ŗf)ńÄŁB÷·ęMģ ßü’’ž€ €W%Ōū-+ ō ’f¬įEUĆßß< 0i÷9ó4ēō Ōžń ōżü ž åóéömłä«Õńķ 䛂łõ!÷ö-%()#}ž"Ižū5Ī»ØÜŚūō°ČĀĶö1ż÷öī#łiN’!$ ļ0õ0u/“żÓ¦ģü+#Õ łņĻ įś:š)-ūŃÜ č& ·ŹӞŚF€&,Ūć3¶ŻÓRß5:<ņŁŃčśīž÷Żą(B*Ļč^²õ!Ś0 Öśł ęå'4CčŃ&šŚķīõ žč>ŚÖ#ö äģżļūü é9üŃŠ żŻD .'įų ēßĻ%ŅüņÓ)ęŪ’ŚśöÅ#& ÖóŹó: ėäļ.6ųķ ō)ē¼/ņŌhüĶ$Ŗź'óāó *1÷ųéäć `į§?“- Aī#F±,éLńõĻ Åõ5äžÖ’ėå ĶŲõöī öÜļßńĀ ŽH#* ŗļå1 PÄķę’óÆ/Šųåžēé$õ9Bä ņ/ćÄ=`ģ ž›ąŌė÷-ĪN׌ņ3ģ?B ¤ęÜĻ,0čž¶čÉ *#ĒóL€Kź'ŚķÖ ū Ļļ 6óį Īļął ķļŠšł ėķć]žįŹŌ/ęI5÷ś-¶ ķčŅ’ń-łŅņķ϶øŁ -Ę1Aģ7 ėįńõĄŪā¤äé "Ą+ųß×& ēūśč'Ąß;óėķ' ę÷ĖŲė Žõ!ķŚ"öü&ģŽK)#Åōā0éśųMÜõÕėöģ’žųCó ßÅčīę'Ļćó÷é飚­ó6ŁŌõ ś ½ėĘŌóņäÕ ņ %/šd1ń(ö čŚ%'å źó%ń1źŗ’Ū õ» č¶*Õłóōč† ÜÅAB÷įü$öļńżļ H"ēéżü ÷ §5ģē?źóŃķņäĶ !%+ēS³"Ė €ś&Ķū ķöęŅ!äū żMŹ įćńś®ļįāééä<ĘÓķū+`¾āčžóŽQŪ#ÖåÓ 0źĄ#ē'ļ>½żŅ2ÜźĒåāæó 0<Ō?Y0 ēż žč$©ė©óõ ćźć€1,÷äśµžņć·Ģż„ĻŲéŪéŚõżŻżó ßD9ļć ē 2 •¼%9Ųx óģ’Éū¬Åūčźļ’ ōįKąöųÄüMéu/Ä4éĻż^ ņ’Żžö$žż»ü(¾ĻŁ(žīģŽ5Ūą5×ÕĘP YĒĢģ”4ųäörˆłāHŪ9¤ķšĖ-4.ł ÓŁ¹Ļ ¤(Ūė€āņNš[ü©椚€×ęĻ=|]ß%żößäłöüźØł2:/ź+ šżę(Ņüāūöü§ę'žKųd*!ÜĄēą{ Żģ²ēåČ!SоSŪśb1Ój`Ą.×’łśW >Ķüū€ü¼ź ĪLŅłą÷ę=ųל÷)Ėڶ’ÕąīńŠå)Ō!ķ×2ÖĖ&¼ ßžż Čģ* ļćwć-öé]/Ö“‹ē@/Ņ/Ap9ŻO+0ł7-8VūĖųåŅL,'ēČą&Éņ·,ŻūŪöłļ+-ł2ężķÕé1-ŁŲÕö/Ü6ęö ū’ īź$żńšż”żņÉä,ćó'źw:€;ā“Ė ū $ ų±ņ$ū')ĀØņī"æūéō $ąŻ’JÄš5ó™Błłļ R³"óDöóīņįēņŻGć,AéTp@ ^ż4Ną2łū;!JĪ õ ģ8ļÓ ĆēĶęē6ćčžōV,ą»Ó7įūļś #.śń:ŚÆžžżžūšē žę½×é¶ "ŠÕrę'Ēõ$óč A¼ū’ųõä,[šśøNFĀCŻ1 ā£ėŌ*'_ćõÉ,“éņīļŚī*-Ģźšu(’dź ꚁ÷å?æ ?3õMįśšG».ģŚłŽ!EĒŽ+čĖž÷¤€ .€ś ’Ā5 č ęȼ ķ@>7\ ł„ß ’Ś(ńüšåŚ”ąMš7śÖŲ²äŲ€’ āŹę„¼ō ŽžB8$ Śś+įBķā1 Ź*ł Õ;ēÅģÕÓ)Č ąėź9&ūč6ų+÷ųką&āėń ,ģźŻćęüŲ6"ł\ĪĄ Żßņ2VŻĪN'&óļę õĮ ÷āūź'84ö3&ńķ°cķųĒā!ōš÷źFė ąŽšóRķ>’źć]-öēęąśž.ä'ņźæ«/Ö+?!wØķéó&½ ó÷+ųē2÷ āę  ī 4Ā»ōćö*Ćē½³ņ ’’  ÜČ,žä’ ķ:Ļż¼#Ļę0ļ’BÆūÆŚĪ"śéŲ÷ó7 źą’ąäH0Üż ņŁīČń ė& å­ń¬č łģŻųķłķŲÖE ųē÷=ķāčķ9ģŪöą Ž8ŃÖž"ķŌÓ ÖžéDŃ$½6ȿǒHČ ņōžčņ ž×õß Īė’ ķčęŽä  öóś CŻ$ń*āČé4Ž.ŻõŻ ’’Bß:ųÖ"÷ŌóīFŪåæ@6ēóéŃšļėūŽółĻńļĢĻģŪ²ćDTłŽķH*;“ķ÷žäPé܁ Öź óĻņżå;łäģC#źżčļ“ėżņ”Īś÷(’Ū Ōś=%Õ( ļóö5’PóŻóŻ‚)Ņ äŽ’ń ņCśōŪ߃śõ  aČ ļSÜ Öčšü€ć'ōėģł(©. 0ķ ’ę+Ņüź ŲóFö+DųłĘūūš#ź2 ģ!Ģ÷ŪüĒŗīźŚżž’ķ>Üčó),½ūŻ÷ĖæŃsüŅ7 ŅH'óc,ć"  Ęčāūńļåł0ōĻŽ -Ī5)ŃEŁ,Üš30ŲįéäŪęļļē!šž$ėņę!ŲĆBī&·ŹŪĘš& ×ō""æŽ<īŻ Lķõ÷(Ņ’Üōųįó0’Ożń&ĒEǮõŽ( +ųēĮcĢńMņ žńōėź'Kžü (ļ(üøÓd"ņ(ņ¾ŌŽŪö7ÉśÅ’+5ÖĢčėł'9 29ļ1Ł ķÖ!ō=;ßŅżšĆüĖō,äż ³™č]Ūäć9 ķ""ö* žę'\%źŁęż()ä'&ļ3ė=é 3ņ†ŪõŽŠóĄŚµóģüšõäŲ€0õśĪ9LŲčżP £ūķųśŅ: " Ų3/   ń ßńėĒĪl÷ä‚ęūķ.éģ4åŠŁķū? é/%é¶öĀö²ķ "éńūńCžą÷1.ŗ" ģŻ>ķß0838 ńųüłėŻł’łŃx& '(,ń¼Sūń1ŁŅ#) ė’Tņߌģ-WSϯঠÖ×ĖĻż+ ÷ šååóīż’łž%mĢ^÷ūŹķśQ ÖųŠóæžčńėØ “7%Ķń' šŅžšūłč Ņ•ū*įō ā.óū ł@"ąĖOćÕHŻēėž\ā!č.3īģĀ įķÓļų'ž#÷% 0÷Üūš ŌņąūĒę ÓŠŪŪūš Óš2ļöē#Ę ¢Ā åŽ+Ę=éįł*4Ū¢ä-Fqś6Ņ)łß M&ō$ Ó7 5 ĒF2źBÕē•ČVķöą­ćģīöŗö8[õčä=ńŻ  ö5ü«Ņō$źŠŌ&»Ā4-ģć#Ō"ģ×ōJīĘyŁ$抰ĘÄļÉ:]÷ „ūóÆļšų/Żø2āåŲīŲ?Ä%ÕŗjP  čÖ&ņ^Hæ€ōłŪėcŁ·ž ßŲÖŲ.Į Źé#FŅė%Ņ «éĒŻ 'Šõ+7ų5(Ń ļ5+Ł0ōü迚ѿ$ ŌõüžGł@ķŠęÅ)čś ÷å)é%-8ģB’ūö¾Oō3ž [ōPćŃ(’ Ę #®«łF÷ż(:Č@ßŌęņ÷åÜŅĮī!ż'œ’*$Śłżłč’ēÜĶéł5D°C× ĘÕ ś÷ėó-"· åžóćĶQF,“®Ó į÷Ļ'ĀQß.īTÕėņæę k٬źS·$<%ŌńėĆü7øS²ŲČ(3gĒł4ų€uÉ S# O;€ż0 ūŠāUĄ7Tõ¦Cbżń5öś-#f÷ü÷ķź.Ł$ Aū,õ)©«óä?äÉt ßļżŁŲŠŽ’ä!ŻÕ;jĀ#’m4āźŻVŅȾ–"@č¦ *ą3uSęēIł ! ģų@#1½Vė¢ų³ h.ŲÓŲžĶ’ŽÜśóö%Lļ“Üńńčå«źCžęA÷ń|Ķ6ņėõ‘äģ’õEļćFĪ''/0Ä-ā4¼üD’½ķŒ#Šü"’ēō ńźŠćkó¢ś)ö, ŃC½r:ņ$1ĒÕ²»ńó_ ķøš±č@IŪ®’ļŌ×+3 ę&ę’÷ź źĻAż%Ošé,ćśüéüŚĆ /Ūü ÷% śäVŌōģ’ō""¶ō öö¦;ē蔶Åöķģ&÷č/ ŲDOž·ŻŌęĢśūnŁå¼’o ^¬ėō   ņ)ßģŌ[õ6ćŁĀ[fĆšżČŠń8ĪŌźŃ&ģżö÷ŃüĶłļ4=*Ž 3ß#iŠ÷ĖŁ²å*čżīńīļ>¹ ½Ģūźw#ż ’%žČņ+ńź Ż1#ךś ųłJśü2éųü’öś’šé×Ęēļč%ēšķ&ę0+Ī4ō8õ cņēīžŲ(ĶŹ½ļźž 8gžš;<ć'"ųČü ī¼é¾õ äÅößßÜūęįĘåł"E ÜīłķéDE !G ßÉłŃ ųõī!,'ė5ŲĻūģĖęüż%!/"'ßGļņū’ č÷šąŅ ’öŹé#ż&*öŠR,Č <ś³łšEųśłÜģ/&EŌ Ū+!Ųż÷éõźö)ģķ4Šö ’/åżä5æķģžŽ/üŖÓ®õD! ļ„ ŃG¾šųĶä©<ŹPę õķ-91ĖēĖ!ō¤!ĪŽźC)ßļĒ’Ż żļĢé%ļÅĆMčę 2³ģŁŅ*­Ś× ÷Ćļ7Ļ %ņŠŹ&¼3X/Ūń:ę2 ō *øü. Ńė!Ö].äĶžDü0ōß"ÉžĘ ×Ŗ¾ęęÉüßé Ä÷=ł  d/õåŚ~'ē®ūų īņŽ)&"ųÄĻåļö;'HņvūęŪččŖ!į$6VõėīĘŻųŁģč'ģ ōüP>Ļ÷ņG=÷ź)! ŗéÕķĆ!éįAķׯ,%$÷śŻ£÷ü/Óś3” "ō ²¾šäü"ę% ŒŚ ßņŚļJź‹’ 'éą7„Fč¾)ąūäūü©ķ€÷*8Ō<Ō#ż*įɶó¬ö2YŪä<śŃ+FĒö’LĪ+·Ö5H >÷Ļ±šŚ śźČš,ļżņ²€×ńs•#śpßųņŃčBŪ§’†ĢõŁåŃōį !Łį-`žć#.)ɼ1D')ē#Ó5“Gć~’āŪģĪścŁ ž Ł?Ķņ2* śü>ēź>×īŌė õ)õöēļü&öõĻģé'Šęł5üõźšÕü1ż Mż o 3éźü8 łĒłļśģļž,äÜ’ŻõĀģū č° ¹¾ćžūā)-ś'³1ōōS Üö+Ü õž*(ī*4ņÓķł ÷$śčĪ Ļ(ąę<ūū· ÜÄĪŃŁś#įŚķżŲĪ·śŻæüąČų’ķõöśŅs ŲßüŪéīÉļAķ%ėī įō ąģųöīIīäžµä’5ņņ ņÜ łūÖü:÷&Ś "Üõżõģņ8 čéßķū×ĪćŁėüżźū%ļ¾āļü'öżč ń +óéōüķčåŪó ļöżļÜõÖ5Mčšļł ó śÖšżņļ ÷ņ%’Į śģ(<üū÷Ł*żóŁķ÷÷äī5% ¤šžŃķ*!Ō žŪīŲŗ ßņ")żÓ$-ć+ąĒĆĄ 7āõža@ņĻ#ńöįŌąŻļģ&’ ō Ž,ĒB)šń#2Ņ(5ö;żč(>ė=’7Žźļ F"±ęĶżūū !" õõń’9éž/Ķ īśķ üõØ ²ż$ųꏌ]ņĀźń &ŚōŃžż)āāÜ*ųź<7T4Ōų ć Ā$?õ‘¼ü+÷Ņ·ś#Ū ó-ļ隁±+Ų±ļŲ3Żū,£ėŃüā)ķÄXė #Ė÷"/2ęžO š¢"Ė»įśóĶó?’2’ŠųKūš/į,^µ31²ūļē Ųžõł '4ųńźŚ0ż¶čš Ģę)ņšģ` ÷#ż3ĪņūŪąŹóĢ×c’¹äī’čšņŠ~@’Š.ń$4īź8ń6 čß=Ē3Ż7čäńĪŹ„Ņž€ ņ )’Ā(Ł@Ļ’”'$ŗNĀZQJļ}öÜż^ŸźćÓęō!ÅGśØŃĮcčż4ā’ØĆ@āG!½¼'aŹŅS÷@‹=õŻźžņ%f8ö;Dµü’įF'ī ŲżņŪLUļ ł„&’¤Ł;?śĮ łżPšüŃÓ¦čŖčÜI銀Gõ#ŚDO*zż,šś&ćū 1ÕčŹ<”ćēĪ6ųĄčĖ$ČŲJ'S³å&ÕŚŠóąLśm ņĢŸŻ &ž;5łė¶ļPn(žö ęւ$ ēlŻĘ;ä6ŚõĮFź : į8ü ģEõåŌ((ł"0ŅńžÄ€éöŃółžp)öņēāęŁķ ōü µģąž²ćÜ*ķżįĀ »ėęāŚū2 Ąłæż:°*šāŪķŽL#šü=ŁśāēłõćēŁįłēõņ"4 üĒ,6.’å3&Óī$šģD ņąč8 źŲKŻń“ 8 4>WŚż)å,Ķś÷% óņõįó ’×ē’łź Ū@@ŚFžęžüŁ*ēūó2Éö īūķ÷~ÄŁżīĘüļōļįī»1ü čōĘģ *  ’žėńŗ ąš'Źź$ąłź“ś ÷;ż¼'ĮG Ūł%öÜüĻśŅ«Ż3Q 5Į1.Ńų üÖó?÷Sź’żŚ> ŠŚšąĒåc,ŃĀÓžX Ūņ: Ū Öā+ńu·%7Ż÷ļóŃŻÕšĪķåEōĖŖŲ'ŹéŪ¶Mźģ×óüõæ—Y’źüÖÅÓ JÅĀ ”ņó&ĮżAŽŪõ’EGPägń+)ģŚžųŠ22 ;Ī-Ś5ż*ā"üĄ%e$  Üį÷7F.āĒīöēÅ(čgź ķ å– hŲ#ż%ĖąæĀ!*BķęŲŽń×ŲöźĀß!/īöīņü$Šņ/įŚYłõ&žļąĪ/ņĶņ’l¬=Ń €ķéÅš ÖŚ 1ßüķ³0Ē BŚ3ņīēŽ1Įņį÷ņ>0Ł— ūõ8x1õü,ņŪ’ż€źī[÷%Óė? ź÷ķüŪ’ŲĶ"ó ęߎīōŪ Ļīź&ś ł!ś< ēēų'ęÓ  +ūßōCś> !&ó$ ĢŪśćō7įłÓ÷ģūūöĖĒ6ĖĄé³!āüššÕóĻ#łüśōé śčõū ×6÷äąćēąōöģäąļŲüģįč żķ¬ž õśę? $öśŌüé ą ōé ņQ(éĶļ ¾0~ė aįi«ēčüY ö H āāźõūcŅĢ£ßćīł Äž÷įč÷į§±źDóģæŻņÄ䔩śģšņH9/ē<õŽŲ4ü5ńĻ7 ęś95Õ[ ’ę’.łĒVÜNų4åąĻš91ŻkRęčšQų*/ !Ņūóżił“~äÉéļļWUuĮ:ą’ī"'öž³ž ĘŽåßźĶśü߀™! Ō+Wę4ųe" šįńēé ųA”ŪbŲüąžķ”ō&ģjįĖNī+–ćQčY€õā7­ęYĢ4>ŽšśŹ@ōj¹=źŠź¢łģ†^Ķ÷ģųĮüčŚ#üļĪŪČ ž"Æžė)äńä†7˜1ćb(ó¦ °ÓÅčHüŁŗ&ó$õ~ņä‘õ õč žļÓ&śźā²’Jī1ŽŪ€’Ö ń·Ćå2Ļ ŪŁ @Ŗ įóĻ4öųóŪÖ: ݲžēžūõ7č ķķś # ę!źßĖóļųŁł'=Õś%'Ā ņ9šš%ęŽåģü ŅÉ÷ōōčAņ²åրA +žėŁ’ņüķ. IõŽé ō+ ē÷ōšŹ'ėŻÜ%į/Ö8 üÜĮŽŌęüĒī čāé*;Łś1ćŌĒ•C¹åÜōżĒ%Āķźńņžį/ ōåĻ AōųŻĒķ/óøÜōü›ą,čłįłÕōįēܳ@ŁF›)ģż īÓ;ļ ÖčŹįŌ ųÄīŽ’ęÉü@Ė +Ü÷ųŁŹµéö'ū$ņō9ŽŸÜuž Żõüąū>]€Źżõ)ģų68÷ČąīöÕW$óśłņ¼%° Q-!ŚBöłŪ8Żę÷ĻŅŠžį ö)Ż;6Óäīžå˜į÷­ łœ#žżŻŃ ÅĢ/FŹ„Ņü—ėš ėėéĢüܔģö+ Cūķ#ėÅ.ČĪą7™ų’ā,ĆńÜż=ń7:‘HöFÄ®óFžßŌ·Į '&+Üņ,Ų+ō—7¼Ešģ Ćų ¹ō īżĻ%Ćģ2—ąīś"åźļB’ ų“= ūÆKżó0)4ā ė*ŒżóžŚ ćļ3ņžHż€  ģōŌģCę#śźŽźą6Üž5ū,Ī Ų 'ķ’ŹL ģ-ßö(äYų'*ūū€åĻėŹ7ałę"ķ>ļåģF ©öŲEōąÓŲģåļ#f?üĢQĒīĖČ' ö<ČäÅę J¼Zų78!äüįśöü2ē.Ķč,śó/žÜśō4ś ĶłżŲŪåō9!Öž%Ōž ĢüĶēļųŲö.ųńķśż ėäOĻH’ößQń ēīąąžž 'µ&4ųń'±ķ% äTJ*ž; ó (ōR&)žģŲ%Ų=)’ īP)/äć÷8"óäŠåÉńå;ßā(čIĖóüÆī«R1¦ś/]øQ/ę 6Ī#čŪšćN-ÅēHćPŃ8÷õååōé Ļ īōŚņžķōDĮ÷`ņŲ"!©ŹĮ$žDę éņĖĪŁōśó0 H* ę՞ܚŚč’4 ś5,ū*˜õÖ2ōٵV×ćžļó Ķ/€&<6ÄŻ·$Ü&ėņJŲŲ÷ÕLö×ćā/ūFž» 'ū%źōCģżŅō6ĘĒļ¾ķßę ń'A’Ždšāé(üSž!G+ü¬_4Łöėą~× $łžé įõŻśųčä3#ü×D ö5ļ4ąõŽ’šó÷ņÕŚ*ļ) Öłüæ· Ē’ž8ęé~Ģ÷īŽĶ éÓ ėŻ%äļ’įė2ŽśŠÜ$Χ ą ļčŲŚ©Sļ!? Ųķļļö ’Ų.Ļ6Yęü ē"īćģōčĻן!ō9ų=īŲ$õ26¶)łł’żåįŻ2äļ %®Üóó71"wäųõ'[%0ļś§ŪBö÷ūüÉó5Ņ&1?õ@»(Īüšō ų’’'Ō=2łąõÓŻX „!ąŌęüĀÅŃ×0$ ąč™čÖčÜģķsż‹ä'€õĘAAÉöĘŅ2éąŅ@ŪJ75ī€ėū Üē+äcöŪŻ÷ß7ļ0‚$ŁŲēŃä÷%W(ĘŃŲ,ā Øå ܛį)ęŗčĘō)Ģ÷×Įܤü’ć.­+·ßūōV1wÅ ąņŅ'ŖĄīżō÷×5Žņ ;ē īĆķ¾÷,ēQ²’³šøŽ‚ż;Z3Ēūųõ&ŗBįĢ»ĪJ ģ0ū¾÷ Ö ŽŚp’7éĀÄKź'Įņö:8īéū* ŃśųÓMöóĢ’śŃõK%ų¾ćé@ 3"ļU ×P3ÜśóBåBžīj0< ē$Bęæ ć čüÉĖØąņĖÓć4#Ņ OĻńĢā. ĀšŚnŹśš ÷÷ļēŁó< ū)ÕóDĖĒė²0 8ż,ĢęŹų!6.¤ū9.Ä$ŅÖū¼ä4’źa’1ō / õų‘2ģĻśćīüēś:Åź£1żīč Œų×VLą!Õżö Ó϶ÄA§ęóå'÷A ņŅQ<1€ U1ėć<ž„ģå÷ńL ·åĪ# );ģ€:lßīźĢu*å ĢžżśżļĆü"ęīężźČFvA÷%ū-ĶŹuUŌ¾1%īņ)ėążį]Ü Äåé÷+éŪĆ·ŠLž4īśĆJ÷”š¬C;ĮBü1ąīÖ+ßņīóÖ Öč’Ž+żż ż7÷öżś!ü $,*ŅłöśāÖü%ņ!<÷ Rź < 0KÓÜš)Ļ­šźĻÜ*śŽ,žģõŪģŪź'ß2ź,öüóżō'śŁüüüŽęčÜćŽāŅõõeųĀų,76&ź žś ’ģŪ ! ń"īß®KÓłśļö*,>äāēŪ#ķ8ßųģXą? ńģÉņč3ż€żÕÖ !3.ū% ü ēŹä1ŹXé!ÖžŽū#ģūū (Ź÷ŪäZ×$ē²fŁĮĀc`©,īżīč'ö Ć'ņ³ž2 ,_ŪīƲ#EZėL¾[ńćēžlō6 ŹĢžåż žāŻæäĘ6/ā­ Ąęł=C $="ōäõ:Ņįā+‹,0ß"*ųMČę@õłĀ;īõr-ėä.%źØ!āZęĢAŻöł<š)õ%čüÜü2ężéÕ(«9Iż’īķķ PśQŁöü·²łšÓAņšē—ŗį÷eŪŲĶ3@šę!ž;8>" , "ūÕĢVŚ+X TėVĒōķłķÜ,]ėøéäļšŠDžLšå ņ4;ćń (ņĶĆŪķÓŅ7ßdśšóżÓīż7ŪöÖ üß¶÷<Š üłP3ßļĶŽļ Q©žt,(ĀśŽąÕ öC E€%×c²g)ÜąŠĒ± ņcQ[>* ŲD©öw1!.Ż0Ģņß²Ģ7ėŗ3ķļō4ž6šė’žgēĶŲ„›0ŽDŽĪōęõÉA­?ų3ĪČ÷õÜ åčń(Ļöū+ģĒŻ;@Ó»ūļ ˜€ $5õō’ōóķŽ˜ćłąĪöī÷ųŁŻ×¶Ąć š  żüźJX¼ ś*'õ@ ’ūŹł°#ßņś$Ś5ļ:Ķö«ūņÜž=ąńõīę.’ėŅįøJ \ źē+ķż( ōkŚWŚõćĢ÷ Ļ&ĶŒÅõ>.Ģę*ūķłčąłó)ł5Õ Ģ ;Ž*/qūÕ!%ŃÜ śõ%żŌŚæ[åÜ9 ö"Fō5ńŅAčķŻ  ćņĻżó÷1 ś¶żõĆ~óÜ&żą ųÕźźŽÖ0žįéįŲÓēŲ4ļĢ,Ż ¹±ūūćéå>ž+Éć>ū5ĀŲŠī2Õ īŌ)Ÿ Y$&FÓūE6į@ß’&ęå ĢįC7ļ “ž(Œ(;ż ńó’ą=ū/+‡ Īżž9 ņŲÓė B%ŌöBŪ,éģ ž,ā×&3¹’7š &Ž'¢ćĪ? D1°Üęņ$rL,ė*ŻS€ū®č6!äóīĶ©¾ążįVgéōćö*ę?żŻö,Łżųä %Ųīš*D 4Ż#•īöł>ź ×Ļ$|Ļ ĘŽČ ć™)+ ņńņZ? Š»į,Ūü Ę)2Łź:śŽ5IżÅźżīŽŌ )öA /ąŃ19=HšÓ īį’Ŗ ¶Ä"ēü;©!č'ģ šVČ0’"žõś å ėŲčģ4śåüāÓÉįŌAÓi [5ĘŚŽųŃš@ #žŁ#µń ī.eń]õīĘĆāāŚŌ ęßŌHī¬ļéšL ŽżļČĒ 9üąŹüŻŲėJ·ņīž6& 7(°öŌ é&ėūĻ@’!öźÓżųź¶ä%Ę1^ļ=$ĶPģ÷īęā Ą ż’ōĆĀī õų<¶#ä/#ųóūóļł9Śś J.'ē@Ķņ +:c= Ł ö5Ū&å÷Aå/ 'üå'łŽĶó; ü šīóōų !#-šļ +īøŻ%ĻŌHÜO" Üņóųžąšūį>§LŽ"Ņ OČæ ŠžųõÜPä!E/6śūķ²™³łs*īüłļūXä" õ& ßń½ßé9å Žž Ó"“)ÓėbūųŽģŌ !ßŃłź 5ōŽŅü Śż)J»ŁńņśQ$’Ų( !DM(čī)#ū¾ēŻēņ'ł_R!½ŲõOŹaŲĻź(&šźēóŻ Õ¼+ ?MÜö hżÅÓ­Ź2, ß ĻÄEźŃč Ė ūö‰ų7łĶ(<(Įü ą(äŻ#"ł I-©ōÅ÷öņĒ1óęāś(ēļ Üõō(å9ū'ŠŲ!³ęŻ ’·!ĀčE ėŁ÷Ö æš*ä0ūó# $;õą!ģ Ųž× @īÖä»+0ō0īĖö² ķ3¶ż¢"ūą.ųó‹¼ģ õæźöŁ-üčėįŚóLüĖļ}±+øŪń%*ē$&ąŅ“ēļķźķ6ōčņä!Ņ `ūFeń2ŁŁ÷'ĖÅĢĻ įłķ’$ČĖšõģ+üKĀģVSæŽ&ü€÷įīū©åöŪ@ęõ@ś(R ė:ā#ÕŁĮŌ5ķń7āīŠ ŚŽ Ūå Ėļ "G>$š,P ÷ė#ś "Ē"/•å ū°)Ėü¹»ŅC*āŌøĢĪ&> $ūÜąėć" ŅŖö»Ü"—ž.™Ō=“ā uÄF€ŗY'?«Ü=9'™Ģ-ń( >å·Uč>84äģ!Wūų üĪ7öņÕw ÷Ōų÷ >ąÆä Ļ.0~!ł3€ßš^ķ!½°ōõ?(£Ē¦Ńߎ*ūRŽčŽ`³äō٤ś¾üÓ1ēƒųāī“1,Ņų)Ż”«į˜.³™'Óć+ä#ø šēųżVśń$Ł óń’īā į!ųī¾ ė÷ö)łśŚ7źKļKńģ7 š'ń0ż:ģŁ3ļōüåä@ Żß’")ĆųIųä ¹"÷õ:žģ« ļŁóÓwüźźķłüōźÉ+čąöü, »Ļų9 Ił½Ś¾ŪÜ'ń óŹ$źłå$Ü ųų)ō÷śłźzĖõõ'ż÷ śĄžĮŚś@ŌęŌĶõśŠå#ī÷=÷łżõÜņļŻģ %ÉśĄ="Ōõ&H/ļ !Śķ ūČ"éč+ūĀą0 ß­åčŻÓR)NŁBĖćóž¶Ż"%$Žųń’ŃŁ&õ$óŃ/ųüóżčą"äńĮó2č9ĶęöŲ+X  4čó"ś×#×Ķīć éńī OI’ū÷ŖĒG7 ū,ļīż’ ī®"@Ā*ēń+5īŅ/ģĆūńź$(ū£*ĆŠ4"€?ļł Čõ’å'óäāŻć Ó!øŚćü$z÷Ā ņŌĘīėŁP „Ļiõ7µåöļśń8ųėķ JŲć ¬>źó)ī90Ąū7Ńłų÷łī/Ō1ŁōĒĪŪżłc;łn )Ä#č¶Ęļ (ļ;å$öĻŪźéUÆ;ą'śūšöŌ~>Śä 9ń&+ä”Sńō$ ėē.O¦ł.)$žŽ€@ƒg*Dļķõ9·ö€ļŻ’Ū*)(÷Ké)żüLÄź"<+ń .}( õĶ‘ūŁ^„ąÖ Q!P½}0óM3Óbõ#¹ŪFŃX)Ż2–.Ą÷ō MŁģˆ&4ę• - Č&"1ĖĒŌŌŠģżĒ$ų˜Ų0ņĻvõ ,ż’%(ŹåEćōņźā†üYBżų\|śćöšį>³? Jź Ź€& Ķų.Ü« īRŠń9?ŚČ518…#ž³ęÉĢēéńÄźėݼ°óc/Ķąłļö žżÉł’ÜĘD ’iŲķ€Ļż³0ÖŹŌ 9%Öō÷Ó9žÕ(±ĆLĒ*Gń0÷ę'"Ž<» õ „{¼ øž īĶ ņźń¾ėxŚ ź'SģķŻ±ńāø1+Ł!ø ē/Ėģ= ā38Üć’Ņ@.Ü<+< ķŽā²Ī“ Dõņ@óAFŲę2ŽŲšęųśÓ·óųjęmᒠڀ$ Čs+"HHeņåāæéBMg.ŖŌ1:–-DßāÕžŌWBŠÜĄśė×/ō’4ū×)źĒœÜźįłł©¾®ĻM·#rƒŻL 󟊵&ŽĻ 7Ćī÷ēžK–ūųģą*łŅI6Ēö%߄-’čŃž&`Õ ķĖ/DļŚŽHĪ+ß)ā:gśŁć õč " ģŠļ#ų ž6ĶĆŚīŅ6ņŠ&Ł')ŪźūöķöŃ ņž7#Čļ1ē×ćįõ¤ōŁś› üż()Öėų? ’õ ņ5’čēĆĶ ū×īØ'šęę'&ī³Čż ;ģĄQ Ģ$Ļ Ć$ žņéäõ`)źŽŪęļżÜ>ĻÉVŁłķ@* MŲ ŪµžšĀ’"žżų¾ō¼żŒ 2&4Ž"ū3üļŹĄÖÖē= 8æ¾ éŽßķīīåļŽ%9ŅŁž/ĘÓšßD¦ZšāaŠš*ż#" *ĘčĒš‚ųĶŪ żī0ĖäõĘżņß ō.ĀŲ*ģżZ /õ‚æĪ䊜0ĖŹ %łż &ćō(ś ü€łŽ2īéóŽķ#\eŽŲ)żö4ś5×꿀I ¹.4Ķń ź>(_ķģ =z(ļ ųģŽöOåžw2ōٹ’œŃŲŌJŠē ėźŪąęś€[Įķü%ōįż-ßķ÷ęßōā ŅńļJ2Õ+@6Īļ"€ŲčėčĘ÷5łż.Łö5óüF ŻŻÕłß4ä¾JėČē:! ąóĄŠ&Ÿą.· DŠÕ,½Ķī²?6ĄŃłõåėAԁ÷Ż:[Ó8Éš×ō éņż’EÜ šņ ņēūéCõś&ĀßÖB’H ėļĆ*(ś04÷&9*ŃŪāė.ĒÉēØęųå żśKŽÕßįß)Ōķųü$Q6å;Ūźć ÉWļ±3 š Ēųōčģ= äśĆ3"§ĀŲ ū ĻŚõā5õżōķö÷īņžįœŽ­Ņ;Š É ś—īčųń-:õ#¤Š&Čó²ć׎ŁóļŽ%,šéS ćėļ×Ļßłė©ę;(šśęóŲłŹüŁķĻ š āę =ūėēŅ"¹¼ü~ķ ī -åŗdžņüķš®ų››ųQńõļןēēßÜ@ É0ę  +åąāėąėėšżųįłīž ų’ŻżāꎒāõĪ é÷ēį ó5°ß ’ Ōļō#ōć¶įĻ÷ėč łõō~`’åéżüąÄ7 Cśś÷Ō÷õ7ÉĻŪŚńņ+īźś,ųō<$šÜųō#É. ō <$źŌ śłß×’1ā-ē# źT 2ęŌ"ŽåźQ%ź÷:&Ą,dM×ßė(*ļ½eŲļšG÷5€ų’Üń׌(ŻįĢŅSļąŽą&ł9Ėį  "Žå$ !'%żøļŽöųĻJŪóµR>źĆ[”ēÕśōē@’Ü!Ī4ĪŌqģŻ %× ūć7ńüīvõōī'ęŗķŃ#ŅņĖšŠłHŪüšÜé ąļA' ųĮņūöėŚ®žB$’ēÄóūāó)÷"ņ!ų )õ’ļB ļż1 Åńłę!ō ń°0ģŻČÖŪßž¾(ÖķCžč> õČśīŹķŪ0ķ¦ā;’"ģ¾ęn 8Ģ å5Ś!ēŽźóäÕ#č#T÷ł#Ö ā Ń "ńĪõ!4e°^!ļļ.d÷ṁ’v2źīū@āńĪėłģKõBGł! įų7ęĖē<Ą Vć¶=ÄūX(¶JŪßåśD÷®ŽĻė#S.Ź ’čäō_źč ߗŽķŲDĻņąÄ "ņ “ļŻG’ßēžÄöVOś?Ś!!§Ž)čłÉÜ>ĀøHŁ @9÷ßĒį¼NYÄā'ŠG׎ÅĖž D:TΚźć>éŻŲšū`Ī'Äę+)¬õłėåģÕć’Ōć1æ6õńłÖ#6ļšüäė į(ņśńĻR3č3 Ź-ł1ż#Ģ ģA( $öüöćĻüĒć(÷ōCņüśä, ļŪŃų+ńž6$ .ģĘO žņó-%āŻžöö’9!% ÖųÖžÉ )łķ×cģ ś ČżņńédöķŲėčĢēėį׏(į ’&9öėō1ļ"ųųöü ųłą!ķś#ļ¬ Ń±\Łį$ōEŹ2ų€Ł7śŌ–¹ų3 &ß9ĆńåבīRéöŠsćžĮśķ÷Ųå§ 4ł!7’żģڹė„ü4īĢß)>-ķöé<Į8żŽņIż ×ńēBņü1Ōčč³züś ŖųįÜ1 ŹŗhŪż $ī»Ł€ NBßåļ õō ȽģG2̧öćšūå ń× ŚąŠ!ś%ńŻ2Ņśö)1ŪŃŻµĄ’ņ”’0Ź&šŸ ķ/ż¼ # ūÄė6? Ś=D’¬*ģŚ÷t“ J‡’$šßĆ"õ4į8ńšäŲłķW׹3æÖß±U$€ęō/ é »!×ććZ/õĀģ³¼īš"óö*JR \ łķé.Ś.š% ŽņŽ>LD’Ž&ĖæNĶ  Ķi "+©=ҽ<ķ1ńD%+ŁšŌöŗņ.QŚÉQ2ś; żå!śŗ’ėģ0ś)6ī>żÄöKķõŽķ&-Ńģ¤ķ !X“ķ$›ß ę÷įĢžœ"ō7ėīž ĖŪ0:śö8łƒŻ± ’õęŻ!,ČQłż1ݵ,äōņš#ś. łĪ(ē+åń÷.ūõń4]ķÖé¹źÜåæ+ūōįśōĪ4 'ĪŌöń(Ō÷ćǾąē5 ō&Äāīū÷8±6<('(ēV šŌėܬųC óĆ$ õōö Ū¶é’ķēDäC*čĆŠūž'ē Ćę,üø 2įŁ,ūž SŗŽ EG łę¾ĶäéĒ%ö+’Äņ’éÕģAלŽ(ŚČõ­)ī ēÖ/ēŽ4 å÷žāć‹ųń¼ ž(ß)õóāžāöó·õĶ7"ū8 Ņżš#wĮöŻłĻōŁ4&öJß÷*©%äśĻ ĄĘŌÜŌ³2ž?,Ć( Œė& %ó°āڲąāēéš’¬Ļbč6k~rŻZé'āĖ1æņĖü8.ėUõ’Ść3öOŗ8ų/- ķ)@ߊī[ĪĶźņ¶Ā„ēōŻōhłń#¹@?ŃžżXéōFõļčļdĻ@į+žåśóŅ(ńĮ=żī+ŠÓą$)ęóa]¹źą.āó’ß~%(éVūćīķÉ£īęüčåŅō 2Ėģ.7<ōó½,Ż*0B ė²ĻļłŽAzĘĶīģ÷ō .ŃśŌ×å ókņE- ö ų˜1ŁøĆźĪ Ū=Õ Žžźü€ę)SFĶĀ’žŖųkĖåšōCåfTõNśD2 €č— č.ü Iŗ’śī€ ,ĻĶķĻ <į€* Ś#Åł ū)Įłŗ×ÓßGąŚ²÷ųö "“#)šęéPÖ6’ÜA"Ü%ę &äąž ’.Ō<$ūężõ ?āė:#üū)ĻōÜ.%Īõ üŅ÷)×ūź+óŽ/Čźēķ×ü ڲ1šķWńįą×Śęū!ć%ŌżNśū:!’1ūßō»Ęēūéź öėļŚ’ ÕģÓ ć ŽßżßöżļĶ (óŁņ·"5 ] 4łī#čīÕ®ąö# ęłöõõēĶ+āĀ ęā*/äBś·õüŽYß#Bōäņ õŹū’ ēņ½30®īŌ×ģEėäÕē’Éęųļ AūX#äĮ ūę9łżć3šūęēü ī))ńV=Öö ŻÉ÷õÆę 0 øŁŽėģńŚ6*Ē żķ;²źžńÄōZĪN'꯾µ=ĻåŲū™įų-é Ų ‘ņź,Õ¶ÄäŃH7Õėō E©öóżčū9(4śōPŻčĢū($ŽźÓ/īŅ×įǕᓀšźķ;Õ Ę"’"ż Ęó*D>9Š-½ęŚņ„ éEż„öźĘŪłšhŒJšŻÜ2€ķ.÷ń§ĶOóņŅKśē©3ßļæZ¾ĮÖ ģń+ūōł%ų@ā'į×Īēß2÷ŅV2×öįŽė&ŃčüąžĪŃņŽ }§JüŲ€€é¼*ėüłŚć×ĖŲķ/’ń ų6Eģ~ė_õ*ś*ēŠBēŌÕ1=6;ß0öź/ģ: ö*ŅčĻńQīŹé łżš õ‹ęśēłžūóōųVąŪŹĢā¹Ńń!ńž}¾$žģć €ź%§ĘŚūź :*,¾Ž*ŲŽ0āß ü)ä¶Ś'ŠźLā’+Ö.Bõ!į'@Łä1Ķ’ čłÕ$0-ŁāąČńėń ėé %ēöŅŌ9 ąč’č×’ó įźóö> ¶+éäö ½•˜įĶłÕłū÷Īéžžšó# 2ōž śęęķŹ,5Ž Š'méÖ õūž-)ć 'é!Ķč¶éŽÓčćóÓśģūć}łē’ń ŹĒķ#ķ,ń;Ģę;Üü Ķżņš~3ņ’ō*éšßÜżžŻ× Ćōį ī éč Óķ,śöXӟY.ėį’ņ%Q8*ŃÄķņ 6Kå÷ńėą źśĀóóśĻÜ6ļ Ćę;§Ūæ×õų Ó ŚōõŌ!éµß »?mķį +čžłüĻķöŽ(ÖÜ&Ńļł:÷€źĻā2ÜõA~ØäųĘ”  įö ąōNžŲ/ō "ŻÉÖÖłļ ųOžÜūēņēÓ ÉĻģßŪ^ .žŁś ’ģķ ļą Õ7G2ĶżäM#3+#>ņ# Å ż# ¢ś-Åś@ķ €#śėöŲėŹ ö:,Šä"š/ ŅźēE,$Ķ "ž"†ųßśĪśÓ ĘÜŁāSń#äąĻž’ īōś ’ēī@G)öś ’²ńżšŁŚēūM 5×ųŻ+¹!čåŽ ćž7įĻóåóē7žć0÷’. ģłńņź&õōš/ģ6ĮŃ-ėųļ łž \ęłźėłŪ5 ™ūķĒč’÷Ńó *µEöļóC üłśāū’×ĪĖŚĘć ą&ńļĻ $²"Ćżįóē<&÷'ėM×ńļżšųŁIīł%Eüģ!ź£ņą ńŹÕĖ!łŽ÷æŲéē$ć & ž/-öÉ&ō+ ė ł ü ņ ėŪēĄė@0ņĘ'724õģ4’õćķéģäłż+Čāæ&Ü üķź/Öś"äćüęüŃäé2/Üäāö$éąõ8čįź&ŲŽģ׿åŁ÷&%.ÅĢ" õ#1ćķæÜóž'Ž #ś6é8Ęļšķģ÷ śžūł+%č é&#÷ŁÜŽļ-ž$',ę üåķęųüż ĻÕéē @ī<8Ģčć½!ŠłÜš åęnŻŃūĄ*bFŲ .³š4Åóģę ŒĖ’ä¾'SŃņ ż¹ī =Ÿź ź„ņ ąģļ×&üį/ 'õĖ)2ž÷@"ż Éś9ū*»ō Ł Öųū×Ė/Ų÷ō&ųīõ+2ķō4 ’ķüų"żąPś üüģšō(õ!ē,łõ’ŃÖę ;ę$ *uņŪćē%"åū& óåėɌ÷½ļFśń›., żāžš ņżHęĮŪį$Źżł%õ!ōüõ1ų Īėēō ąŚż  :ńīŪūHż õžÕ’ņūżūÅ)Čč$ öä'ņĻĪā½¾ ÜĖśųš)ń ųåēŽ’ēüź'ē žų Įć%ģńšüż ķ+1ÅG (’į’åöņ×&į *žĶüōÜĘųæżõźčųęÅķåÓķ ļ žPĪ/ŲÜ„õ& :Ūū/ŽžKć’ę’ō(ģļģżņŪŁŁś2 ķļÅüķ#Ā ōŲöŹ]ģęćN/ÄŲ C3ķ2¹Ų,Ž&Äūżųł*ž ž×įżą×ģ¹ķć;Ąē ś|é;ž÷ęÓõøÜīł' 2źHĶå’ņõ'āųżččö Š9ōÄ.ź&āī 1ķųźżķ?0$ĜüKėćö ļć$ ķÓ¦ģ’ QŃÕ¤Ų Å ź( éųė ,Ę ć( - źČXģ€ł śö瀐ń + ’ ģ łķņü÷ šžś€żą ÷ż4  ūś õłł€³’ €öĆ żūķ韁ū÷„’ēłģżż€ķņŁųū üķā € ųüų ńŽ×ū-0$ų6ļżū€÷čķƒü÷ €Ś÷ņīķśž ¢ģ’ų"żĶŠåūßųųģżėŪģųöäūļū ūż÷čś ōśóļŻ üžķ÷$ś’ųóō%ł Æ ńūõżż’ ń÷÷ śļķü ś’÷śõžłžō ķüžšų ėļõļęöł ółł÷ųēõ÷óųłīł’żńōóņū čńńéóśń÷żņęųó’żóż'ņó ŲŌźŪīĢÕ÷ėæżšęėÉčīŃéčāėŲģėĪßéåāŃćÓźčŁ½ŅŌŚģĀÖåŃŚńąļöŪ&āŌāŚģÕŲ¾ģļāĖŽīŌåšüļÕ×ćēōŁņģįŠćÖŠüüāŃßÜģōąĮŚüŁŌŌÓŽįĻėĮźÜĶųśéŽģėļŲļéÜĖ÷ŽāōŲńźÅęēŚŽŹöéÕēęūÓ䣎āÓąććÓŠÓŻöčĢźŽßķšŁęÖēąåŲŃēūĶĶßėŲÖĖčŁŗōćģõĶńżūćŌŲ÷šyń ›µüEĖćGįųŽĪ<ņJŲ׏ąÄSĒć÷+F€=`F?ŃūūŲϼ߹%åBŅų÷ł?LPļgó÷śÓ3Ž"««Xš[6Ü&géī€Ä=ńvōŁōZ­†ü ¤ūĻąŽ.ÜēŲÆże-]ŽGūÓ=CÖ8ŚJßźåÕ®ˆż‘ 1æÓ=xVŲHŁEŪą$ö’ąó€+Ūe€1Eu>ģõ€ļēßė*õõķņĻĆÜęŁ< ß3üäĖių Ń oĶķ īŹFńCõhé1#å 1ž2$ėlŪŪ ŻęūČ 6'«bKDæ‚õ¶žŗ·{š=Ki3O {?ųé ėĘøĆĀŠDĒ/ÉźūåĶŽ’üžČī+õB,"Ś~5·)~FįD <:ś¼Ć!€IźŌś馹¹0ś×6ž0 ŁZ~³“ LŚÆźé»Č,śĄ*’u3üÄų€źIśŁ“)ā0 Ņܱ#)ųź·ĆģØÓóōé9Ą”÷Ėü£Ē!ć=Ń>UX܏į1$$¢ó9’ŠöT.%’)#F1ķõļ=įæćŪ<ā;Ą2€ĪĪ;"Ö"U%“1ļD)üŌaւ/ĀŃ9 Ā’įÕł~óŖ?ä?3ä:ŗ(Ėė>BÕćT3ų‡ĖżxHūÜ&kéŻ¾3'č( š\ĶŅ mģŸććé ·éé=ńēęū:0ŁÉœ8„Ŗ >Źø»5•æ~ļŻgŁoYąÆź Ųēõ+„@ZÕ<7!ć,@,O-ō źŚ÷„¶3öż5č2ņāĀÖĻö Į€2€-³UŻFd J:Ų"?ēĻ;ėĢ,ā;üßź#Ļ (wܹ×uåā+ę`ķŠéž)źę¾tćūĆŁź«±ž+€ģ“1’ė˜Ž*BģÓ'²'A[ē$éńG«°źü8Ö%]÷8 ū+ ņś2nņčż)ņ9·É€ßÆ.Ó#CķÉĶ€ę7ø-(Šł+€śEͶ |ę Ü’9žāŖŻt$|ė1Ē.ąėś'ŁdÜ÷ŪńT”ēņ. ’÷Ūæā3:Ē!Ńę+ÉvĢSR©å½üļļė?ć.&ń.‘Ó*gÆŌøŻżč¦i¼hŲĘ5)-ć1ō€śæzŃĶÕė6Ö¢.HüķšJĆŽ9oJ+F¾źĒė#P\DĶm Śö é ’!ņ<¹zįĢźXę*ĻžÖmī$ó­ÓĶ€Ī%ūšł`*Šįµ)ė9-4·ś¬P:8åß:üŁ0ž1Ü Cسļ–Bå".9Dߦ¾B€'ķńJĶŚņ9?7ݹ×4mēłĖģ.€ōŽū4åmńĀI=Żģļńś¼ĖÉłÓSéė<#~Ż* Ž,ÖŽHGŅ%ŻśÅīÕ$Ēū å*õb~ ųį©»ģĪYdøŅń *ŃA€ż¶€{Ÿ6ęā­F5]üżūé™Ó žĪ#ąµ5o ™ŪBōzéīż®ųH¾“Ś »²ģ1Ä2År ė³ņĢžŅņ īŃ<€ Nl)Ÿ H¤Yė!8ĮJ®v ÷8#=½B:F¼ĪĮų?U€ę¶üõśĆ€źÄYP©ĒäŌ %L»V.5#ĪūÜW"ū*‡Fś€ßąū¤ņļŅ śūłŽ!ś)®Ż9ļķČšüņõ=ņÆ ķ!Óųżżņ Ļ® ·žķū ūģÜś į.G ųębŽĢ äĢ <łµĖģźåß8¾,ķīåNÄéŚ6ŃųŠņķCöŽķńīõ 掿C÷ū!ߌ2M50Wļūķż„Ūģ¦ąĖĀ7 /õ;ŚÕŅą %Š(Gć ,6ś)Ōć žŲņÓ4 0óąéćåŪėd7ĒöŸåģ)4¬@C)×;PšūšE13ęSĢŠ0 F¼…€Ż²ę3>~ +Kßģ )ØēāϹųŲ³ĖŁų0’+óA śģ+»Č’āż€gśĢŒ¦ü*ń>Ö. üž2# 2ėÓ&’Ų€Tžó &Ż>(łśę<Ē *Fļóģń2 åV£å"Īß’ š= 3(Mō=õēżR4ĒŚ!ĻŅÜņQĪ ’.Ę:ÜŲ¶ąGڟ šĒC­Ÿ÷S “÷?ķ( ƶ€˜æśĪ®Öž#ĢĄžS$}Ę÷ćåč āj[2Ė8śTĀ#±ś’éPZ'»½(±Śiō䜾"ņ1äœ'Vė$2%į ¹ ēėߓ­żKiü'&/õč»Ē¶ņ+GĻüžo@ž ¤ń€ēõø7ÄČÉ®Ū.@ŅPhȀ’Ūq! ¤öüķ?•Ł"’ŽŠ“Ćž hžŠżč9ē7N"Šį2µYŁśįŌķCł$a#RGüē6õŽõöÅźó *ņŚä"ū.ö蚬żóš&&ķą’%+Cæ!ó XļČõ÷©! <ŁĘ6Ė"ō꯯šųūϬ50ä2Ü*»£10SŚ’ā8D8$éņ7AłõUŻ€Õįž źäģų ł÷ē $"'Ž@Āå÷åœ=į%'Ė÷ ÕóŌ'#BąŚ6 0ś:`ć ?,’åĒčÅ sąīäA ōå÷Ģ t“- čū·ļQ’üŻŠÅčę{')éž ÕļŚ(”šĘ 'ÆYė$Ķ‚¼Ł'€$Ģ€k»Ž4ł/ņ)ÕAźĆĢ õ“Š»Fūųя>ü c&ÉēŖCó8Zņ" <’SĶŽõÄłTšB ä˜ņ.ō܇2:Ļ#ę%F¾ł€¾@śźŃń‡ĄŠ WZ,¹ńÖHļšėKM§]!± $"ł#Ü, ƒ ø$<}€:ä~óĶŪ Gč²%®ČŚÆĻõ1:ä įÄ»-Ōß#bć:@@kó?;ܵūUŚżßPÄcĪ'’ Pš;a¶“ߎŅÅ“€Ÿ gō×*ż=ōŗ€€ öŚ%ڧMŃ*F € BÖĒźĘÅ=ā ū›Z]26 ī óź Ęø.ņJÆYØ ]€ß®’)7ÄĪ€Bį¾Éó£ķ˜[Ė4“ń<-'ģNӚ` nK%1Ū€üL#ōÅ"ӲܚĢń±׀ī7„'8—»×"õŽ'źĻ²$[*ēNEƒ§Lį·šäĆØ.ęEź$ōĆiŠ-LŖ“¼ÖĄ°Ō{ąĘģÄU€$ūäņčŠŪĻé׿æ+Ż@ž:üņ Üé4Ÿß֙·šś×$KŠéīØ@Łćp’$æmźē6ü+=@÷ ˜3ž÷›ŽČą1Ѷˆ2čAŁ-ų$Ė °ĻēŲäŹŪöéaū ā&äū€FA«&&Ą3Eõ1 lܑś5ČĮ ńbŁ%²ä?¤’h"ā=g)’’¶`E&乀Óš*™Oō5ŹŽÖgĢ ÷÷:ď1õIĪšćŽ)“īę;ŁŚßŗ] Ļ^ŁŁ!€oFśĶīķ:Ė@³ōÕöŪŹā€žÅ-;ŃåF’7 øÆ0: Ī4āįJᙀū%»šĒ:ėFLĀ©Į€ž(ÉåüŁÜįļśA²čź²×v‚„NČ3€ećąhÖAÖZ (./©• ¼(+¢C .V€Åļ!Åր €Ļü;§Į+śł€tī³ŁCšždŅé9õ®LģĒ™+'ŗó0ā+lüóżBś[ŽcŚ6½9å¬) Ҭ€ŗöžŹĮŠ€įĮ€h)õó³\÷Ūūīē½G$ČŚüū4æžöĪüÅöņĘ(ā˼ķā%šŪēfżåVź--8Ŗ1ÓõÓćöżXĪėq S굯Ńń _SÄŁé µīfFߝß÷€ßÆ’!Ók%,‰9(īŚēSōĢ£¶Īßß×Ļśt;Įģž*źĻĪGęĀųėłƒ,4=BO×č1ņė±äö' BAļīg8+Õ½3AĄżAŠBł& (-ĒÖ§Ė(÷ ¾,ä@śõ÷.²ē÷œ39ęā’Č -ų8K™éżč0!ŹMŲ“ŌńŽŲAŅÆåÖ÷ī—Ö%¶Ō&&GŻ ĮЁ¬ģKXģ!HÜīĖ ś ą Ā’B×.6Ü&ńš īį[ žóŲ@€FėõöēšŃĘõó>ĢZāĶ ŃņåÓČ2ó±aŽ ó(@äkä§UĀÆžGežFś¢&DśĒāō†(oø#€—ÖÓ߀ćŚ)Ė+Jš|+ {ĢR2įŹāź !éč óT¼[Āę¹ę7ųńʳ€ŅīJĪ€ŽTas’’š,7%?3X0üMŪ$?į:­BÉŲ2v{¾TšįM‘ųų*9¬ė<Rā*€.B°VöŒ—÷öąkāPKÉŃ}8€ŁŗīgŻ…™ĄÕ¹ƒī¹4€ü8ĀJ§xÜ .Īȼ,²Ļ†Ģõ» V›€1‰/kyC$Ōdé€ŌB²ßÉÅąÓł µÓļ ü-ū©xÓĘĪZšĘ»ĒŠš## Į¶<¼ÖNćüō%”üī:č%8Ī!÷XņHŽóČ ĮæL$€-@Õč_ üųŅSüÓåc)ń¼ĀÄ ųbč×hŠąa\ŲEćč3°#õŠ~-M)< öĘŹųcę՛ܠŻmõdėSƒĪņ&€N>Ÿõ>Ŗ€čÖŻć.Lī#{ ‡ķöśvß0BĢŽčŖód$-Õ :DÄģ pÄ*©£ź ĒĆ’÷"=ś>;2\=ņ;Į$¦9LM(Ēņ#ÜÜėŅ źßņŃ“°÷{ĢŁžĄ„€9aČŚ·3OEē üjĢȱ 5Ö±ĻH=Ö8žŁVŗ¬ėš:=+ąŃ×LĪōæ0ą‘ČĶ—Č?;ńŠfÜL’Ā”ó ,_Y€ŲŁåüŸ’»9 ÷ń«±ÅŁ’1ĄP ķDļžµS9čÖņć,Ē+Śs’Ė+ünY& žšŹč3UųłÕf)PA¼śE«ÓÉ9 1ø,ŚžHķFóšćäŪ÷ČŌ!JŠpšCóöń Ä÷ļāõ ģ1ż*õ)AšÕ÷}ŅD !$żVĄ& ŃN$č@¶ų€č€Pc ųķłöźķ~ē#öē%)s5äĀ Ļ•Ö;4œZ$·õL4óŽ;Bջʪ“<2īĻŪż!āÅüE#¶½6ßõéÖ’¦¶»č0ƒĒ€ƒ#ŗ1æø€ŗ„¾ł/Ī©žŹ YÖž ļ* )āį'lč!§īE>"2ęļėņ©TķķĻé+)Œt|ō@ūā6 ¤/z »źĮ,/]æA!ŁÆį Į±*+YŲŃ%8čØCį&Üļü˜‹ņ±ķ€ÖX, š:%’AMĮ] ŻeŻøą Ą„4ż!€ŗ 8€ ¼Ēö" ģāŪłĢÓąīŅŁż-ö1łĈ’ ŌņłÜē9„čQ½'¬ÉRšöū!ųžŠ ꇟń ł<ĻŌX OÆ×ü:Ķī閿śĻžŌ"ūāöUŽļ ā£Å ž,ĪGČͱ ų&ĘĶŚÄī8ķÉõå Ż3ŃĖŹƒōTąÓ 1, ŲŠŽ#Źš/ņżæ +ČŃž<š¤ģś å:*Y)&ö ąś-õšLä.ę÷/ Ź£śEěńµĪŽ0I"ęņÖ„Č@ń%÷öÕų3óŪAßŪKå ķ “!$čĮWńßåĶóėHŪžĪæ’4»2ŃŽ<’?Ŗ?ųī/Ā:÷Ž%įV ߊ¼›6 Ę©(į ūČÖ&ųŃÕ Ķļūō1žĮ0%#³å,üļāó4ŌīÜłC–ĻÓ7 , 2½Ó^ā$Šž’äćÆü{0łż#ž É!’ß}ĆŅy2M½: މN€ A¼J÷““óĖäöG%®[ĄųLHŲ!7;„ ⮀‚šLżöļ?: ~%~N īqå ’‘t: d€Õ©č¬ō.šdš€¾¦_;ēJ2,€Ō˩À0#RdŌɀüŁåš õ„W€ŪŲą+&==^Uįši~ƒžÅ?łE8SHρgŚėā'ģ”+‘—‹Õź}ąÜ W$A ~3‚š]æ#źTü 0ō€MGŹM*½PW™š `6IOöĮēĖ ü’ (ŪG,åĢ*<*6™YęMīŁ}żDÕŚ ³]^ųGžć=Ā4,αÄō#Äņ_·XåĒņūp>³#Ņ<šŒŽļÜ{ł>õtśjĄĪŪØķ1ļčä½q ż*- Ż÷ļž¶9“Ńõų%ģ»Ż•üźmŪ:żėņåH«źų¦÷’~ß×čĖYæŚ•ß–ģŹėZÜhōœŸöäįé ₆¬ Ō% AȬ@æÅżęš€æČ AÉ\ĆŸČ€8ß)łŠ?ģāYŹįśÓä÷‡+'IŅ«ąŻŲ׎–lŌ¾@źęį€õ~!Vᢠ%äyņ/ó »*źÓ3 Nłž€‘£Ö&·ųź³VŸŚŁ÷ŚäŽŹŲĘ)$¹żų¬éęÖ’šÆį.Üß"6ü×*Lżgõ ٌ-®%+5Ė%-_0E M<ŽĖÓ /Āt.č.’%)2čČū~įxŽüÅü(ōßD4ŁA9†&5Ŗ ß7¦ĘQ'(¾é6 ó/čś>‚*CĒ 4Ė]žŲ!£ÄÕŌĄČMÕOųéśéM¦  "óö ØĆ&ŁŪ¶+Ģ'ćS;üųį4Ńŗ,”ÖźŠü„°°éµųb =ž Ń/_€~š€Ü ]!2ø4÷ęåŗž¦3ńŁå<•AķPžÜré5ģŌ’ÜĘä6ĶĘ÷¹'³Ą1’(‡źqż%ģ|ļżč±9üJęåü 6žŁA9 Ūč(%ł;’öÄåō"I [šXóĒ éŁŲÓ5?&*,²Ķe„„ó» ć€-€øŪßL4Ä'įžŹė¢<¼ ,BØń5ų!謉#æ76ė#ōZŪ0 Ł“śjŽōõ«h¾ņZōJŸśŻÄūł%š31ł×. a6 'ŌŲ ź'Ō¢Ūē²Zž P›(Ē;ęžĻC=ų8żgŖÅ=J'žŻ>ŠŻšśś€+^ż/7ńŁį~¢*ćz9@\Ōń,ö ¶ń›%ēī=$Ų‚ō8óžüµęń„Ų Ö×üūŃńā4NÜŹĄ&,÷ūKfśžNĘöŌī6÷BŗŁBą ŽÜ>öFŗ+Äõ_vāś¶¦~PÅ܀óQÛ۔€‹ū¾š6óę²§+rUźŻ2+ ¾½X€ : Čß ņ=@ dŌżČWśę<å-Ļ@ķĒöüPN( $ĀŃ6ČķN äąHC8Źö :÷*ž$śõW ćČ9Ź-cåĢĻ术ļĘ’Ģ ėżFóó™ļņ˚ڻ$ ¬ żżĒī®.’’¤ė­ąŠŁ'1ćéģ"[ͽż5wŖ4čõŚG1ˆČå!;.CTF3ė Čī?) ėįÕłONŹāżŅ%Ȧ»ĻĒ ē98l¶Õ0ųįÅń?Ķš§Ł5ńüč2<&āž“ćżń®éÅčŅĻ"å”ś1Č *ė ĒCåׯįÆĻÕõš$ņŲq ­Ö/Ļńņ)µ%ā®ÅåŹ0 5÷Ö žÕ“ŸL’hÄŅżčÓ-ł2/żū2÷ł®0$ŚŪŲõÄUūńÄ6*čAB$Ś*ķ ų ćY6öō0HćŻ9 ųżČ ņÕįŗ|޲ņ>fÉŁŌGߌüā'ŃĪōDśģķēžć3݇ (QŽ.!» ć"üé׳ ļ('ø‚ˆłÄģŪ‘%ü¼$ļń$W.÷\`*Ńņ-ījūå*ņWCåųRŌ©§lņ5Æśų?;åQˆ®,£~åäüF ų÷ł5 ŪāKķź¶®uößĪ7“Ś ®’!»ż’ÓW'Å(‡ėč źšÕ2.ĪdĶĶ÷$ōś #€€&Ģ"jIÓ®W:­€ĪĢjÓ&U`§Ŗ ™: FĘó°ŪU/ŪŹLIĪĶvŁBˆü^ÉėŠ “Ē' ųešå1‚ģÉāj4>޹­€ņfāīćWv/ )Ó5j\1ö¬ā&™Ś šQė&ö鯏×Aźč ‚*[åÜņö/šDģ½Œč{ĮŪ¶`šÖ׊įjp  ”×ŪØĮŠ9¹Ļ«$)Ō-¤:šņŽž 4€ńgßJ-% >ÄA¢$ė¾ÄÓEUJė?R0é½Sģą² Ü!ŠŃ"®ń,4ńą1ė0ČūŚ15ć>6K½((ņī.’žą ļķī’’ą ”:µĢP+łū ( žDāļćčłŲķ§J&ī 6% üł&å1ŹĶ8ś$ * ią„čÄ©Į+ÄČé@S#żÓŅÅ āĶöģ å0Lēł"ż:U’Žå ō ÅõҦ¢Eä ē:ųń>ĖÉŲIū1ģü÷(Ė@€é /Ė”ų9ń2"ŻJ<łģķģä¦ŲųĘZ®ī“:A @ńJ%P5gĀŁąĆÜ—Čń€¬”ųBšįPÓõ÷€ņ’ėHN? ~§^0O^ é*ĄŽV( ĄR½'°õĄ÷päļ°Q¹QßųźTyĒ÷.ÉÕÖuż(?BŽź=P€œīļ÷ŲńGq-•i@§ @×ōĒ$ņåLL³.€’ånäHJšÖ!²=2ēŌ,²– Ų~H<0×Į(Ķßżāä”/ėQą5łpOb×OŽ1ļŪĀ øē­ż ł¤Ō0Ł ģÕņŌ<a€›ś( ĘĘ'æõ ļņ%ÆLMĶ+6b!KQ( ŌĻŲ%óĢŽŗŁ#ūŖ14`Ń1Ąźź2<<#ü U.Ä-ü€æ'2ī +#'ÓBĘõī!üķėCKöčÅÓrÖŽčōīEśŠ Q€m! 9l0‚ˆ8ČÖ³55ńÜų!(Ÿž“«!˜+’ óϧČćT%®L*-]Ū§ ÕNLÕł5IS*Ó#ÜāJ?ųż’¾f’]""& ķż,ꎹžģ*9Ó =³ž6ˆ2EąŻ¼˜‰ā²ž6ūŻōĆņE8ż`āć>ĒG ōI< fE?ĶēąžM?%ź…üŲį4Øšīąę%W;J°ĖĒCņ·HŪÄā4÷÷éŹWĘ?'čõ<ķףųŽ2ŖL@ķ!üóõ!āŠ·õĪ€.&źÜč Ż5¶‰žļ2āQóäźÄĶÅÕ ź'o ī&¼ÕÓ !ī  ć$'Hųļ'-,ś/’Ųš ł/œ "ūśåšŹęźŠ ÕåīĮ¬ÖęĖÆķØŠņłķ-łŲŲóø»ėä>ž į9Ō>ąźčģü +ßźļąŅćÄ`Ō<¹*’ßA %ÕŪųęr3šC+*/āæ.ž"ŁįŁŻ¼×,Ķ?ėņĶ ’šķĆõcæ Ą÷§BÖõõŌ ūšŽ;_Ō7$€cnÓØ€ąą×=ķŹņ;’[ P?8XČā&ÜŅ[v'¦ņ4éäčēʀŻļą/¼8ś! #ąE(ćąL, €Æš®ČM%ČYĀĆŃD%~Ī9ų)ć%· ė2ĢXķó} ó¶ßmŠ%čż|E:É4°ŪŗļńżØ ’­įēÕćĻ1’"ūßžDä2‰ĘI)¶ Łź«*“ćCż Ł.ēTŁGÓļą/łēē×. ļåʂŖA€óT ~ńĀ«ß;@šꄂc\F'/ź €³ż`((DTzŽäzš1¦Ø ĆM5Ļ8ß9¼+ķÆ'‘éØō°±€uIüķXķģ+ŸäS¦!k8ķ!Õ°łŻKŃ+š¼k€µßģ!Üp])õÉ黗Ö5aÅģH2Ö׿Q苅X¦éDäE,Š;0ś÷.€;ĀŁā2śHä!€‚7Ņ%łÄÅ ^b ŹÓžrõÖž'¾]•źUƒ€ņ¹·‹€ģž4ų’_ ĒĖNåøųŃ’ ĆŅFÕ,ō,ū“= $ÉūaĢ˜üŅH/ī1-ŪGŗ~5zµöńų¢iČĶ:€4“į-–ü)7Äʰצææ:#)D )ūĻåŽņĶķŪżĆ}ƹįŅŚā«jŠMöŻņĢŠ* ŹĒęJ¹Yļņ¼õB/ó’#05ĢūSåÖ©ļ«”QG¦a‡ą¾¹=!-øĻņ$Łē…!ā`Łł$׀ åž¾’ T÷+Īš~ZŽNśwęšįü¾żß"’Ū0|Ųį(ŁŲŌdīžLąEżÄś ŽöDś ×ņżńŽŖmÉŁé­õ¹edzĖĶžÜĻüIļņćīŠK+-Q¼ ę. eūÆNłėŚćMįųšNéćB­ū€ļ+ # ¹A÷\ŪÜöž,€ŻņŚ ėäß¶Ųį¢)żŲ×|öAą!9“ģüėOĪbŽ,42Žžė+’(öGę ś)&źஈł ;T2 j£m€Bó½öŌųĮĘ čļBÄõ+ÖJ¾ķ%ĮD:­ė2Įœ0`­āŃÆŻŚōõōö¦ŌOėż čĶ÷čÄĖр2IYå æŲ:ƒ*źR7*ü é[*ĆÄÓ/Į4Jóśį7*éėÜ €ā¢żlkžžIĖnģįĮś.Qūü7īõ"(j)›Ų ÷/ńõŖ(ąX ĖöŚ* ńÖńņüš ńŌ*ø75Óē’ €0Ķé÷ N÷€# ėćßõŪļ·,Ā!̹ßū²ŠÜ å„>?;"ż)• HĘå7ŅŻ# Ūå4ĻÜ·JI Ń1ŖKį± óÖŲ&ųæß÷¾ā€ķ5µ*&ņü §Å`ņź™\F²Ŗē¹ć! % Ł ū# ōņ¤æķHńöūxč„ųU&ĄCó€‚)§˜* q ųā2߯õĆ%9ūŽŃ×'€ Żģ„óhM~ó¢Ė…€ōļé/“ŗČ“üžåUā}“f2ūߋ5_łŃ~œł€ś»=ßĘ߃ƒŪų0&8ęp€€Ķ·µBK:¾”ļ'޾€ ,¢1ĘńąŲ,uåX£Ȉ¬€ķńąõț ś#ųL;9€åŻŖŽG)7ą¬V€=é€å(żŻ»Ł'|ó•D<€7Ž–x€ Į õĀ„8q~Ń ŅŹ.»4«€€K :«¼iī2¦hā/ ?āȾ4r@rÅ!ēåĢ€„Öé {+5悁’~śżżĆ7Õ®źŽ.¾\? ö¢ 99/7Ä:ßżéĢźŽū0čÜ*óĢĮĆ*Ūāšb8äń ļ6 ?(ĘŲĶÆZēć%V3Łé²µC8=’'ąą=éå šŻā’" "-ļķ īĻéóZ96»]ųéš#Ÿ4ģ 8Ą ļŌ-ųĶÖŪųõ1äß$;Ął<ēŅ·+åxõ#ßčĢÓŻć’’āöģÜ?žE ī/IČ.ŻÖ+śė̹”B č īåĻ×ėüE?_Óhū› NRöŗ<сņ5/w€M. īń#ż ō¹ó+ĒńėŽ&ąāUS¦ēō#]€®×ą(ķü$ŃL-éē3äõō’åØŲūĆ÷Dļõ=Ä>ćw÷J¾X_'źŠė½äū×nń ŠY:ņŖžQźņ÷ģŻĶF¹8ä?ź+I÷3ūó4'ć€ÓčGē¦ŌĶ“$ØT%ļŅ ęõ*ē =\įŹåį0IāŃ@źü’!6ūł÷:;3ĪŅ*.å§<^ļūģöƙ”žŁŲ57c öÜܦ6ņ8BÖ8DX0Ū¹ęš°% &i÷›ę Š€"¢ėÜķ/šƒ"Åć÷ščńÅ7QöR7ę÷#öłē f·&ė0(Õ> Ż4āē]/¢>5Ż4¶½Ā?7ŠÕ Ū'(ė ‰ž2Ź®ķ ØŽ%4$ćŗ^óī€9„žåø£čæ=÷õå®Ń-Cņąļ®,’u3Ķp#×ųöÄI#?Ųćh]KČ é*8é?ūļÉūFé»Ū+)ļ#HŠ)óęø _Oå¼=ŹHpčāą\ń‡ą¾„_“.±įéM 8ó&¬8OÖæŻ.F7üųy5ÄÕļé*÷/ęįŻuų«Lęžb5ó¶ŻŹ-ų·× EHDńēä5cīģŚ€<‹ų¹ćm%Eė\ŲAPīž¤)sCī*ÜOńA#pČ\¾ėļŹĘłÕ­āõ9Ó+ķ§Ē£}ć,€Ŗń6ĒĢÉüĶEüĆ-"÷ĀAÉÕÆĀĄäūāÖÓ,Żį66Ņ–7ɀ ³¤Ÿ#Ż(”×Ņc#¦"ź*W=n*0€@ūŹ&,»å®ĆŻŻ^ ōńŲņEē7Iüc4U¾ćA5³Ń, ®šM@’µļ€Ķ.a$ą&Ō„¢É&Ü="-B!@ˆEćyõŻQIäa*’ ž ā­1ōŽ¼Æš×µŽČÓ2ł3*ō# źĘł,ōŽIĒå«Ł5v0/6ņ÷³¾4“¤.ō Čü65õ€Ēį÷£+ÉØ*Nu 1·;ČĮŪ} ö9#.(āžMēʈÓņ ,Ŗ7¹,ģŲĻQć×Ģš» 8žē:Xü馟Ō÷, ō:+0¶ūÖļė JŅņš$“ĶŻÄ*ĮÄé<ɀßVœāæń×ĄŠ Nų&ކ#÷•×G8‚k)ęģ ß4×џ’Ąųć4 g@ķ²ŲŽĀh;ü}#źĆ€Õ,=ˆ‘¦ą 2ńO’"jåčŲ²<Ż’ų1Øæęø»³ėIķāńU žśFwC€B’S 憓ŹćŪ4ŠŁą0Ŗ* ö·.ńėß§ī“ūąVß īKŲuėX¹Ņ7ŌēųŸ+Fē Pü"®ÄįŲæ6&ōNæ§JB¾ó]AAdż¤5g7Ū ÜįŅ6įß ļ£ų¼¼ŌҶõ/¼ /Ģ. ’4€2(b1ü†Ņü9 4ė C5$ėęĆ ąē0—žH¹J"t0Śå଄M’*ŻŪĒ1Ā'ģ=é+REĻøš Cä* ×€=ÖĘ#ŻēŖJ%Åw'©ė źČ•žÆOā6ļģdÕ6ģ—]=Ś· “K č;ŠEńŪ¹±ŅĖé(ųüžÉņē ĶO+uA­ņēÕ/UŒĪ߀“B/ȹ“ą‡Īž&üÅķ·O ń€MB€^Ūć(ļļ“/sWū9܀ɶ^(Ū4ń°<§ŁŽ-ÜūCŪ!żćŁįÓ‡.3 ė¼ė=˜- ÷ü8Œ9ą”żĘš;€äīŚT €/šąÉź¾%HžĖ€Ģ­ŁļĢ;I€¦źņ€ņÜLä0Ų1ęā*÷¾}2׳óÜNź"›Ģ’ąk/ĆŪ6šįG€€›ÄƾųśÕ³¹»Dy ™üS{)=é÷€L>ł"D~ īC0AŹÉÕ.f¶¤42n: <_ōŽ<5K• ”~r:±+ĖÅåśMłüͷǾ#Ä®łĀ %‘ū¹\Vd²}Åzō/ĖŲ!±Ėčŗļ‚ą5ķķ ļŻĢ6ó ōž]äįęś ōėżĘł)ŻO :%Ū šßśņƒ÷Ł$Ķ Ÿņ’ß #śśöł#2 ūĶįōōæā&2 :3Ū"Īķ ź$’ģJ=ų5BäōC#%*Nšöö Ōūī€ą&Ę(ķÆūĪDš€;ż>½®æ0ŻŪū³EÄ ,¤C ūČžś*’)ļš&<õūаßųžź ćųń/üöņ’ģ ĶņłØÖcĻdbßY$ŗ Õüõ1óŌdMĘ!äCmŃćńõ²ÖēS7čH'łEē4šIŌĀģE Oü¾ķé©ŪÄõµ; 1‘+ A]^lō%OÓ3źĶčņNčóŁåĮ¹ZŽÜ£³ĄŌ]i·uŌŌÅĒ(›ķK#ĖßĘ’-*ł“{T‰$Ił ŲÕäõē,Õį3/åŹR #!E-Øć¼ĶqāŲ’ę b<Ć·ż&ß9ļĶōżė$ĮīĢū- ;ć;Ųꀻ€3 ęóūć1ģĄ“įļĒķꀹŅ ĄČĻķé׉9"į¾źčłū•ųßń1ńĒäęśł3öÜ ÖĶÓ÷ś˜"(„'_®ž­)…’ ¶~--×^ųśūbŠ5ų3"ī?ćŚåĻī).ł1?TvCQĆõ÷ćü»ńf·@,Ź EJ4~,1s1ńČ#~Ā?¾'ćŅo`åŌP¶NżŹ48‡Ū ¢$Š īčž¼Ś^aÖĄG£×Ĥķ/ŅĘČečņK-täż)ڽąų;šųJ+LՁ£óņ«ĮJRņī ĶŠ<ļCÄą$ łķI4üW)3§ė"Ż™°šæēöÜ9įŌų£™R;3|"ń(s·)ßĮ(Ģā%³1&ü(ß (Y2ć$ŽšõĻ.Ņ=L¬ ĻćĪ÷ž Cćå@ż Ęž ęü÷Y÷MęA€ßĀĢż’a„t X £?aęN+×éŹdž6)>Ł™žBGĢDI pŽżęųäÖa½Į żŃŁģŲ1łįĻČ’j āå2BG'śóūąŁn&4Ē颀’TČ«ĄĻšŽ÷¾ś»ĻĪūN“ńģ4ø‰5÷/VģĘźŲ ęūå A 'ä“$/+&CóĒņ&&öUŲßöĻõN÷ŗP’Wź+1Pćķۜä9łÕø+ß.Ōē;Ä8ŪÓłPó6£ ļ*ļų/Ü>\2ō~Ų- ÅPżB žŲ¼šķ§Fõ#ā'ČRIĘöó/ £K Kņ|Aüį Hė5ņ!ä!·#ńšÖõ^„LE&ņõčBeÕžżńūčØ8,ūĄŌ#+įN))ē2 9Ó 4Š €ĒļķŚĢ$ŪĘ@Ķ$ޟóN0Ē*Š’1I2:'’žĀ ń ä!ź98ĆŹ?ÄūßåEŻč×ęį"ų$ō’ææ3Ī™f – õžÕąś ī)ųµÜ,Ņųļ_ŲžÓŹ’ŌB9'ßø@Ļ!ÜńŚ®Ķ×āü° å-¶ŅNĒÓ&É÷EĄ Ę*7ßÕō!æų ,ĶāĢö°%ė±źMź[MÅMØB3ĶSżFČDüģü ńŲ%Ē Aėį Ģń>ū_éö<ģŹī)¤#'ū'#ŗĒģæüķüžæ€īY gā)zDĢ,*€€ÆĮ’“ģŲęYÓ¶uŚ5 ŗā*ōn¾F¹¢CÓ÷­ä ¼8€€ŁEę=Š©6MąĒ€Ėõ€ēß4Cōź ä9é“ūē7č€I@Ū×@«Ö¢X²»ś¢Hźå®µŲ°DÕOÅŪ|ą&€ž*䢭“ĢBčų)ūÕ’%NÜ=€`aé„ }0[‘ł6€:”-Į4ö:µR~@Q޲(ĒéŃÓ 'FŖ$żī\ōń)÷yżf!ęø ē°Kń? Q Ņ$ń",õ;A€ ²ń>÷#÷ čėå±÷3”fŁķė :,Ą׎Śt€€€įĶ)GćlōĪėJųīņŻ"’ļ É?Ų%ķļ6üŻŃ­īƒ_É1żā Ź”3²ńöć’ŁHE¦ÕWņś4šū#šą+ę =ņž &÷>Õ*·Ó*PõAū.¢*¶)8ü’†;(BćŪę *-=Ī6ā¤)Ü!()E,Č­§#;öŹV pSčßŪ錮 &;Ꟁ ĢH·%ņ瀓¤čėŻģ­"ßęóäé7ŚAüŃĄŹõ ń .<Ąśé$Æ)2,45g·ā6Iéķū£6ŹÖ«½@ų×ü»s}0R Ū€:·“,åź××čĒBAŅäß.Ņ ŠĢĪ%(õ@õŁ(¾¹&Óī-ņ8ŃCėD8äņ qį“ÖŃ­ģ° 0 %Ņ$ą-ł÷é[€ė>„’¼€ØhT×*),ÕEW(#üÕņöóŠæĶaŹéųOŚ<źÅ£ź€¬ž.3MūIō€dĻ"-Ō ž’ĪóāęµĮHę}Кā'>€łé1ĄŪśćmÅäĄ:ĢŌh>3ė{·=Ū ± $ūś'å҈a-ų Ń+¼Ā®ŅßŗMQ§Ē߷ϱ9 źéśŹ:˜B$ę#ģRČš«¶õä#=8ŃוČ.ž* Üų ćłZ©Ōå+ś’ēßå2„ 8’óņ"5ģĒŃńć -ŚŽóÅäBĪ É)ėśÕK/ō+½IļĒś„JĘ$ä(%Ü9å1fŁažęL% ī)-RéžĢóäž,ÕŖńļś鞐A”!  £"Ć(Ź<>ž’G2ū8%*õņ‰ČńäėöļęæĆø“źX¤’Łt7½óģ8żłÜõŅ*ĆH7€Ć ūå.1Į3 /ö,ś ż÷õ(E6XøÕņŃź%@ņ!µżŖšś8! õBäąō"›ņŚŁćŃ^Ž Ąļźń.łäķį¢ó=Aö’Ō:¹š ¼QÄ K&ņżŲTņ=,€½ūżÅ1īģŹĆžA`9öJ;ź'4Āš)Ī"śXNūHļćm@Ā/ŪĢF÷=ĖųŲr=ŌG/¬WćAńßć>ųä:'ĢćÜ˾ąČŽ>ßÄóą;ō7ńĶ!#ŃOäFCūēź÷ “Āļßüāé-é <µōę’ (Łį<ųö(5ܱ :Fź¹õ½ūĒśUŠ?YŃļźģåīÉÓ!ńŽŃ" ׊āĶłŌ« ü°ģ"µŠėūäh*ŽćūõóLčÅč Ž.ZąĻ'Žé0ŸśÅ–'źYĻ ėĪNŅńčüĻņ÷éó<*/Ćč('Ęõī38žm[>ĪÕ!.€ŃļƤ’­ $6™6€Čė€ēāŪ€ä>Ā€ä#8åå~ͱ;»īÅ €³ūo®ŅŽAy.€P’ō1±·ĘėģüĖŅU¾Ū śmŲžHĢūÅĖ/ģüąļ)®Ł Õ¬¢f8źė6H ·øPčhÜóӀćīņCūSŁÄ3G»ćę.ėłŹ+ķĖžÖ³üĻĖÄĀ»ģöā8( įļŃš[Ę­õ”6ö%¼Ļąå3÷ż}ń2(2ōŲĀą ŹŁ ’ļ"’ŽNóUŽ(W¤ō%åß1’Ł#ņśö?ą  H ĘäČA ·ńAK%&(ßŅnš Öx’*:ļ ×ų(0›@6øŲõŽö§ÜĒĶčÓaõķV%óŪ:§€ē Żį(^ź× C®Ä×ė»Jßóņņ?ēį$åßfōļüõXĘ0ķ#Ķ šÓŚ"ą÷"#÷$äį—-õ=!ś$[†šŃ:ü->^>ŽŖŚõM5ēóóü ›¾€%xńXļņÖūā$ź0gņ±6`ŌÕ%Ā’^:)DÅö4^/½÷?öĒ~ɝ(5 (½BżąŅßsWļģIņÕ' ‰›'ąĒ]?ĻņX×ōLėĻ2ķū+būżŚ&ŃüčkNāģė>ø€¹ÓšH`Ģ(3Õc€ž%)ćņDV."38!īõęčéDRčī üļĄFM!“…2ś›īŠŠšŃęāö*ż²ÉŃ]ĮólVæŌ Æųųŗ(Ą ܰüAūéŲÓī*ü'šI$®÷ C“Hō­½¬“›āŃū āS圭QĢIń€E/ 1ÜĢ-Ęå ĻĶU+ģŌ—&ā½ĻÜō¶ł-÷]Ū8 æĢH­+… 3 üÄŽ2¾&ŖēŹŽéŁŅ?09C÷ݧ?źó&żÄńå0  ٱ·žžėŁ'ē6…éŪrE³—Źnµ÷éĢK怾F)M"LŽE¼pīų,ø"śź 𠬯¤:ü,_ͧś(.åĮØ›żü&Ą½®õõ Ł5”-Ų·ķ|÷Pą<f€ń5 €Ö?Æńųn&ń¬Nż B2ɲśDģš³f’%śņb蠑 G܁ńµ€ĆVqŁ€H€©ņ5æ Üö #8ŖŽWĪų -c47š4%äčÕ Ź×ĮŌ§ß„-‘åƒŗ"õŃ~ ć¬õÆķųĀ' %;ąvØčDß&ī7 ­āļ+:#VÆŅ#ŗ.IµŃ#ƒļü°Ø$ä>0ü ®żå1=€«ś9Ś ś<Õ<Ųŗ"°A€Æ(óü-ŚAZWŽõč ¹ūذ"Ģč¼²nZ§Š’»2üó#õ™,Éų×ćÄź!Ł {V©ń$I[KٟļņŪį€$(2ĮŅŪ’ĆŌŃĪß½čģłƒ—šųÖPõźsL®ü!Ī@*æ(щB©ļ~öņŻ! ,PšĖī"Å*b,'=A Ża ¶ŠÅ+3ōėŽ+łŪ.% ō¤žFė8(ōb)HņĄ%ń ŅX1 ~Ę ųūX’ąē<+"a32cÕ=-eĆ”æŻ¾čÆ¦­ 8%č•ōQ&L!% ćĪ!Öįõöõ,<ž-óžĮż¹ F<¹ķöķĪ(4ų[óšī*&&ÅJäėńĶ5Ķ7čhŌ7Ń[ÄöŚū¶ Iįņ=ŌWū“ÅG>Ņ<īä.#ķ“!ōžŚÕōĘ-8 ć/ļü€õ÷<0¹3Ń·ÜH@K”śĖ-³Õc÷Šńź×WĖ›īJäĻł­ŠĆ¼ žü½ž|É0(œ6Z#ųżß  L®·UÕĪķŃ öĆ źā»Į üIā/ļē"Ø~ŅŻTK&łĻQČR8dDŪ#8.@“ŃŃ߯…ļ ŌęV õõģĆu•N!źbŲ֓ū©Pć™^"€ķ śŃaܾó ļõ Żńøü„_t·~ ł3*Ąüén@ ‚É'V}ÖæžģĄģāPĶ€Ż ń:č°5ķfÓØüZŁ3€†-.(&Ē$ę#Ń}‚ōai)ö-ŻH}Ēł–½śS'Y?>9ą ž#Ī>ŻĆĄJFå°P :£æūŃ+ Qāń² Ūī±Ōü$ń'ó "ģäō€ #Ģ-Ū*€0t±ūõQ"ą€ž)éėéĮĻģ2³Ü6äåĶē76ū¦žģż¹ÄÆō030tMä19×·°ÄĒO€Sų Ęēņü#Īéō×Ńe›ŲčÕķžäļų²–-į׿ģCļ7»Ō5=%¦0ü@oĮźīRÖ 0ĢöÓžŁø3P·(ß Ēšń!ļĶ35ó#"ČCńŽü_ė4ē&,dķäõ“ľż &MüŽ>ŽÖÖøC€ļŁų¬ ī·Ż äÆõ.Ō Ąś(ėÅ­ĆŠŚĢąßøv0Ó Cž”÷ā3 ĖŠ7ėō@ķķß.Źģ5ēŲaD±"Æ'ĢX ä©čų©,ćżøŁ;>@āüŌļź¦>ŻŅŚšń4Ś4½½č÷4į"5ųå;)j5üÖż08ÄDøŹ;$Ų³5ŹTöŚśż‰żē ł­ģōįр#®Š£åżłÉDĆĒŹōŹGT!$Éß× š ¹<×ńĒN#ÖģłŁėU«ķ¦āDmÕõ Ńåž61*˜ŁßāŲ1ųžļÄr ś%֝ŁĻ¬ń4 "$žŸ ń ūóÉŅõO\VĖģ€ģ1ē@żē1£F+"¬/€VDkééĆEā(üTĢōDšå< Łõ ŃźāÖö€š ŻÅuZ}pįT€)ņk¬ł"ĆĻł’}R!īš ĀNŚ5ŽČI Ź!ß"[ø³į€ł7&ö} ūŻß œ¶F‚ ćČxƒū¾Aį_łŌę A#,Ų‡ä)ćĀņQ{Šõ¾ŲĢļė"µģDZĀČ~Y~óÄD|Ž)Z?Ń÷%ķ9õŅżęŹ€ĀęƾŠrŅŚ)žöbó7ŚNōēŃéPÆņéż1ę?üŃaĆŁ;­ņūń÷=?÷*,§¼."ł¦ś Īҁ0.]ļģ$2“8ŲķC/<ūQ e#'L¹(üł??ŚĪčĆē"Ųį ėī$ĢżPĒ^.*85Ó+ģÆŃ Š«ĘäÖ½óĢ ”$„Ö ö3č07tŹĒ擎<Ś CäłļŅĀU!Ļņāł×ŒH €ģ€xž!'Éś7å7ĄīLķā:/Ģ£Y.Äė¹4'5h"E™÷‘ ©#:¶ųö“yŠ×(ėōń~œ`ā6ż$8÷Ė)Ų¦ŽŚe¶™c”łßŪÖć“į‰éõųČ>-¶ēÜĖŁ šUņLŲKįó@Źa6$ūöŹ*ē»+ =ų ÷ƒ'Ų$ØāĆāŖŠął7ņĆs‰ŲŁŲ;% !é6OüMéńīSūä’’ŗüäńē"$?86;hŅMŚģKżą’/łŲOBö¼u©æÖķĮæõš¤ŲŅm;3óõ ŹRČŗ@ūšŻ FÓā¾ļĒȑčĢOłęŖ·Õō0ēļ&ÅĘÉÆś ©ųČY?®:1w½+Ńbü į)Įūß(#Ī&Ž3%gŁö-Ėó'ėØą&Ł< ›¾ÄF#O1āč4>ö>(­æ”Ō%Ą ½ćIÉÜźŻēūŲ ’²ē»Śō-^äėéĀėō)4 ā€C1Ł! ųæķĢ$?H4Įć’ē2ņāėé#¶ ĖūIAĀųšŅķåėł×ŅNĆė)ʳ(÷’õ`*źą%łśĆš[D&ĒI<ō½NĢ 1Žų")(Óņ£ß/¤ü-ūčķ˜ōüE0æéŅ’XBŽŃŽ ŚFjC łÆ ó:łėź !¬,üšŹ Ģ% *'%;'åņ5öņnČŽ ŹGõ,ąŃLõÕ’Äō! éēšīōTé²ŻŻē=É»ż9ē 1«ž±ŠÜ9Ÿ|ü½é}’ĮŪ &Öūķ,™ żŌĢŽ×ō*Ō ü’ąē¾ķęYāŲ+ę÷Åō% Ķ×ģ£Ó¤į;šĶŗ"Łō\TŌß(2ķ3AÓ ó§Ą<öśßłū’łé*čańĖE;óü*K(ĮżĒß0ęńśhÉüésLś ķĮ ö?ļ«ŚåBāėĄŠIõĶY±;ļĀöńī0Ģ,æ„ūĆē× īų6ąöpCä ūüa€č'€Så\ WfŸö§ķۜ-žÆ=¼1aNåcėÄó¶ķś€ų²Ńæ ó€įŚVķńÆ3ØyōņłźńēPßä!&<ź%‚!I÷Į°€Ģą;$:’Čwń޽āåĮłÄ̛‚€Åķź2 稦»¢åØąĒ"ń*=?<¼üāŌžž"Ģ4=Ś „·%]ķ/‚ģÅāĘó3ņ;ō÷&Ŗć/źNŻ ¾ŚūŽFśļÅ’2 ćä©ĪäÕ8¾-ü1Eō$å‚S £äŹ Č¼—D Ü¦‚ļ)ę2,åÖū’ÕūōéüI׿’µįł@ÄČō !gņ*ņ õūęµć#åÖāGśö0Åč:Į¤°Uź šŚć™«DīłéØ+-ŲaÕ¼ņĖXī-0€:ó.Ź£ą(/¬&:~JŒžū-ēŚŻWŲģŠKķ("ĒåŽÓ1É赏ū«"łGżāęC€čč)ąa ń"÷Ķ$ųōA' Fģü§øq łŃ- äĄ)ž Äį1ķ"xŗæ¹*üįćĻ»ņ0ż c¾ōč€ī98(ķ-Īō$ŪB 9ß$O›CžÅņļŅ5Y|ł&ņé"ÜUOMļ·ķń Ņ-mZž8ĢķĘ÷ ‚•ū+ųÆ'Ķ āó“'ö܇Čåß)νŹ'Ü ŃaŽGŲʀ1Ą!!– öń6}ö€®>ī×ó Öś( äčįMżäĖRķ!2Ų?ė6—¹]Ś»ų’ĶÕłß?UĀš›5‰¬ŽPÄģŽ¼%Ģ%)㾬ZōćšÉ¹ųłœŅ³K€Éųģ ń°Ö4ųśś ņ/”Ł%)Å©+å˜Ō’„Väm…Eå”ćĆŖŻ ĘDÖːšņĘ }Ōv¹,;UoūīēŚäĮŽ9_€!ŃĄņ×&ŚFĪó‡+ų:å88’žÉŽæą+R—ŻįżŻO“Ń“°+(ł,)éų¢׏ =,€0c W6ńļūcĘ4ŃŲĘé×ŪK€óņB5ū µ I˜ų‚“śEŅTųś=” óš2gNż=+¼Źņ¶ę~üéŽüõ€Č%\ńļ µĒā$ŲŅ÷ķ5ę,Ž#śŚFżķźXü ’įö«±ÄĶóŅ’HsŚ *>öō†ä‹ž ß’éųųóļSŪĮ/įōģæŻāÅĢģŻÓ5Ń!-N€’ŒāWó3iÜ`ł õ4äÆäė7Ā]āĒ:Aö-ė8åö<$ėČ¢öńŻąŪ )ŗ¹ =U"ŅśÕĆ™LɇI6’“\ž ³õŻ!YŻm0Ž’äēėęK«ģŅ»źÜĆäBHūē°&ł-ž9ūH¾€ž×Ü<é(ŸŪ! µk.łęēÉw¾Ž÷HTūłł%ź"ą*'#%M.eéćķéŽäČöd$żVéģÆ©ŃŠ õĖ&Ē€UšMģĖģW»ī L?:ņŚĮ(ōHŚź=¬ń;#~åĖB@ƀÄż» žīķ&'8’#Æ!~€Ž›žÜØ9,ņŹ95`P ü4׉½ÕŻą&HņĶ ¼e#KkÉüĮųÉęĆķ* śķIč5 Qȶ/ōéŪżŻ£āšżģžņ ŹžŌ’>#(»®ģ Ļ!ŌHņÅ]ŅJČ7Č”ūž¤Ń„ =€ć[€ć:ŠĮŅĖ÷.#Uķ3(S5ĶĖ剠% 5(Źßķd# )Ø īĪī7J!©]OĶRXó"Ō$ Ķżćō¼ā€ƒDĘŀRÆŌōī’ ĘīĻaĶÕ5Ē <;Ō!Ā)ŻĶ~ß>72ø“ÕéLœž ßM1H½Ų÷- qŖ”Žģ€eXĒ (~4ņL üęƒōhCųāėžłŻ $īD·«&ļįå$Ł(Ó ø$‚ą7!ż€ Č.)<ž’.óĻV8£6@ æā +ąŽņ·Ćńū=’Ē4Ź« äü;æ;0žü :ł[øŻ¾÷ĢŃ ń±ūÄ"åŌęž9Śhń ė‚ł/ É"f'ĶĻĄĘ[Ö&“_ļ źę/äę" Ų!Ė×ҚĮOÄÓ×ĮĢÓ Žł9ō{ĪéÆ$ī*_Õ7ż ęóļ÷0NEīÉ  žµķ5“'ó€žĀ~L€Ł;gĆŹXœz%­)»Ģ$ū5ąłķAå-ä’“ÖDż±aVX$ŚÓ1C߀Õ šģd025Ż÷ź3"Ø9®bį÷ ©čÖ cŽ ū w½KŅĮžč$^ł*õŽłŃ ’ńĄZ(ÅāŚeč8ī¬. ņ4+!ø’’ņ(ņŪ×ŪĶ  .ķŻX׃č'ZņĀęõųį=rŌeÖPęć+–ćęē3ŁÖ2]7Ž1óēĆīĖ!÷õ~Į*>Ö"ą é/,bš*#Ϭūź;’Ńšč  (EĢž*ā -ĮęÜõļ ±ٰćüŹ^'Éōé'/S&ŪÜżģźE × Å4óÓLČO Óāö 3ēųž÷Ņæ ?Ķ)  ŽĻģ«ą+Kū0āļōäDą7Ē ZĪé)Šń?ėčņŌ@öłÖę'öŽ öÕĶ(š@#ńÕ¼;Ձ ņ)05ŗłżü"¼ä ø!×ė3JŁü ÜüłĘŅüÜ''?7ó!)Ōė)7G’ZāīÓłļĖēč…ūīrßöŹĖ’)żŅŌćŌłšõßā0ņšśÜŗbHGūęóõśēÓå<»ŗäģćķķ čüź)ģóÜ5śüēą7³śŲ ń0ŌōóĄžüēģ5ėĢ# ū5 .Ūåņ- "č²4 wę.ń G"”õėč2‚½µ/ļš&āS$Y¹žnŅqI ¾ +,é€ńPł'€š@/Œå<ēč8Ūų'ś’ų55=Ӓİ1J2 .FžjFźšč2&MUKb«ūĄĶ¬=ōł’ōŅ)|ŪŚdAĘŃ ē©9ęįŁ <=L/ĘD<3,’ßļ„ä:Mó —:Ŗųš8ȇĒLš ģŁĄŻ ’}ö°2鱀šŽĒĪ%Õ%'ÖS® ™EŃīēSŻķ»ü PŪĪ3qæLź;“!°Ęń“Ģśŗ!ed}Ōżeī%–€3ßŻŲ†/åń+ŪćŹBŻęģ$60ü üv I±Šń߬uŠć¶M0?ŽYä0˳OŲōäJ (ų?ĢŠe7 ļpŽ8%=É;#āī$Ś1ü•2 Ö|äś#¢Äö°±Š£īVķķė©(ŗ8”.G++ōQóĄ*ŲÓē÷»’ęąņøŁķÅĖ-Õ''^«mS žøŁ»€šł`*’ńÓɇŹõ„īD ū+’įŁĻ²¾+,ēe=@ ,Ұ€ÄĮjčōC{€ĪńŃ ŠA Ÿ½” OäÖłÜB]3ö63įų7¶ŠąŖ×/Ö.2€'š€iāŹ YŁń/īĖ aß;¾ qÓ>»µŠR1ķĖń“ė³_Q€/ÉÉé ņMļfĻ# %Ī€ż­ĀéėĢ\ ōåś<#ÜĖRge»ź!Ä(å¼:é€õßC8×÷€ēÅØ3ŅÉóӀŻŽŻĀčį>S2.'Ia)²ōO Ģż=ś¢Ņįißžüń)INźź€¦½Üé0žßś÷XĮ82Ķż “Nʐ Į½÷gÜܰŻ? Ōāŗp+,€^¼š|U³eńŲóÕķÄ€)Cžšż¼€eLłŽļ»’ v ā«. ÜŌ4š€%ņŌAŽ/’4"µLDÕŹ#éķž€æ½1ō X—±9ĢŹõż'A€Aœ(™Ė±ŲŁ>(>ÄŚ½Ą®ż"øņż ļ2š’ó%Ćä@€åżņłŽńßÅ6¼æüÜópł ä߉ó,ģU ;-ē$Ŗņ śÉ 4©ó Q³0šāāŒń9üĆ@ŹÆg[āŗ¶°æ<óĒÅßĪ"įč ż (Æ*Ž®ļ.ņ'į,Ū$ś#·ŽńÜ ų ¦ķóž’Ö'õā\!×ņ./püj<ö×¾ ö’Ś üßņ15üŌśłŽ²÷XīéŹ'ę‚+=ź&üwØ$,,ņū-ŠŹ•łāŽąŠ¼óžĢ#öŪäB§żQņ5Y ·m*¹@ł`õ½KµŁl/æ}§Aõ €ŻŚ#ńāAåōqū˦ü%÷ ?ćźJ"€,KüBEćšū ōcüŹ9’3Ų ÷3Öį$ ÜցöF ķōņĒ0&š£<ēįń*żż÷E_ õ Ń2ąīņ €"¾$Ž3,OėźŻÕæņ! ?ø#/(÷ČPēéŠ6ü ž8+$Léų4čż2īę åõų*ä Ź«ž&Ų,P˜ ×Uå®l ŌżėZęjüŽ÷Šż2łŲķ=ē{&ĄūžéĀšÉō/ēŪ#8;ŁģÆ4ÓV÷ŻŠĘ÷„’ šé’É1īžāę‚ņŻ źŚ7·Gü€)%'ĮŃ’ŠēĖ+Ō]ą6iŅŚ/ūßōŪ»I'Čī“ö'śžǽ&žŃ6ā²°įé=Ļ[.üłŲųŽWģ7&š„ķsC7 ēEQäō—Ł;ź·öp€«ķĖą7ģ**Ē/Ź7Šó #ė1€Ž5/ü ź æ3jø’ ®½šŃ9 ?ū ÕĮŚ <¢õ± óĢŗAÜå źß,üū"Ė*h!Nš;)éŌłöć ØÓÓ%ß ó8ĮīE$łź* XA Éų0ö¾ę5×čÕ1ēŹź驸Łėż YśךØ"ę\ Yö¼é÷įžü%źŌ żIWÓš*+©ĢĪŪŹĖ7¦+āķ'ččŻÉĶ9öęń,źY Üēł&ģļ åÕ"Ō ā™ż€DŠ 7÷ēÕĻÄŗ#Ķńķ ŹŽŁ.…ćÖ!ē%ń ģĀūŪĒō¹ī=žąśūĘé5AĶøį’Ō%€ęEzß7ōéöBF ķž¾É ėūė.,„ņLWlūž|» æó©é5ę$€œ~f~0ż€š`āāąqśéCŽĄ“Y!“½ ×pJ€Ž>Fč‰Ü¬6Ł,A'ō€}*Ārž¶~D7““<ļ×]ø³†9µq§’@Ö7ā,{£ÉłįÜ>”ŽŃ2ßæø7Cļ)6ÆĆķ€óiē.³ Øā6!»|īĶŌ"hļŻ^^4Ø÷Oē€K€äČ’_¬ļ—¬Įöp"ī~åųR€'~’'ż÷¬p6ü$źü Ś8ī¬5!ȵ±ē5–B¹~ą½ōœŲœBįŃ..źąagŖ‚ČóT~,J³å79,ÄūÜ'šźĮ"õ€ż¤Ń’ ŽÖ‘Ӏ$ N ĻüĻä ³ņĪģóńøåc€ )žģ”#„ üéŅ«é€ļ!“āŽ12fĻģäļ- O  81h1ć~ą Ą46×+ŽēĖąü Š(ūųրtėņÓļĢøåEŽążļÉįyĄÓĮ ęŅ ÉÜ’0gÄMŪ Óņ!ĄœY37Õ ß ¦'Ū åķZ:ēśĀźĖ žäżüAMŗ5żū.ļīÖśļ')éå©āĒ īżģDAķåäĪäü›)ÄKC× @ńĮųA ķ ŠŌĪ-DĢÜ# ÕäĻ“ńäųöx«ż ī ĖŽēĢüįö>Õ’5į ü#lÓŃÜ’FĢš,±āą›)Ńܚ9ß¾ėź™ż<ųĆöĢu€ą³Ń­ų¾ÜŚ ( (ŹĀų2’ śÖ €įč7š(ōuĆśčūD ÅäüŅ/W.ō×·7ļŌčżłļķ±5 bGĒAi3Fš;&  <.3;$-ńßģĢ ķže)å½é(ü Ö=ōd1ŃŚ Źī·‚@č׀ōÆū‚DŹü7 ėģŌÜŠęD;$8ę5m©&?éŲęŁĶēņŗłĶžü2.³™śHéŲņ+ūęąĆ.Yöč·ĻóČŃņÜļO¹å'IÅš~³ÕžÖ #ģūÜļŃķ%+ ż§Ž÷ėļ. Ę“87ųń ó"Ó¹5*óD09,š: śI!Ļ<2ßĖ žš›;öĘä˜)ē;4"źģńõÆ:»ŁŻt ¾Ūż%RÄéļ_?ģŻŠÕģ/;Żļ* äżü ¼õŠżć=§ÓĘŹ ·#śļÕōź›’äČ3ŗ))*šńā×.éć%ż×ÅüŌU󜱄ół"€“ęwqĮXčÕ8ĄŽäņ;Kōķå,‚H}Ü"»ķ,éL ĶéśŪ-zŠ(ĻCģ. ŸąCą¢;Ü9•żŌŖĄļøXźĆć4ĻįœźXgŻ ŠęÅÕLØ!ūךz8ūBßC6öG: ų½uI/fģęĻīņēI›­ÆæŠUŻļšė€Īł‰ćžēcČßōó%7äߔ ̊ÕĄģ)"Ļģ-3ņ)ł!÷ųi(ąĶXŲ9ŪŚ”Ņ·ė×ļō.śśŅģ"ŠąīŌü2ÆŽ åō"üż>šŹł,öĪ-"Üņ½ėō#õēżśżgŽā(å& ĶĻķVŸ%é§ćžĀį$ÅēļšÖųŠ.',ėn ū÷:±²“ė’jyįśęéŚĶ5Ļ ēŃß#5śŁŠ÷"Łėļ1ū’:ēÆ"8FŚĶ ß"Br"ŗ čķ, ×ßŗ°#. ¶€Ś ūżõŖā ēō,' Ć„@·³½?,:>€0//6š#Ó,ć śéźßFĄŠG×ōč\ČŪA ž¼0ō;­Hī„’ż¢Ą*Rūk€’¼ėŅ}āńŖG é/;¢ óķ9ņģÓ¢ū Ļą2±ž’/ĢĶ~¾ī.Ūń„i4Ś„+Ч0ĻžpŅ%wÖŲ)ŚSŖäldõĪķ§įOü°Ś&Oąčń¼-€ö ß8ŁEĢÄüÕ;ėOČĢöü<ēģīųŪĢ5&źœŪģ!ļKEÉä> ŃÓüĄ¶ćų»Ņ kAūżö,ņÅ Ū ūčįŖü Üńń ĆŻ0Æ’1ÄnJć ŽżOü ķŁņū"ó€Ģō‚ó$ŠõFöł“ō !ĢžĒ’²ąN’ėŽ/ĢÜ ü"åšö÷ŸķńōHō÷ćŌ3ńńÜāI$‰ļ#¾éŃżZUł‹½+M-Õ{Œ šŻŅŅĆēēśJ_>ųĢŠŚŌ%9żüŻŗé! ą³0’Ūī€°Ö E%$‘’µ ›ūĮöĘÜ×éģüŸX»VłCÆ!ä–€žŚ`‰/h†{ūīB„÷Yü[P†‚züå$Ü]€,óį,Ø !Ō:Ķ«hFxWŌčÖŁO5U`€åŲłóŃŻå’é“& ē`ā2ā÷ įęš/ź›ƒÕ"Žqżń õ耶ē t·Į}ķÖ ü7ĘĻīJ§!å €×C6:Óė%óŲ ģ›ņ<€ ÷!žöź÷ėā.ņdō2 ÷%śFŌŽ€ ¹ŲF€īłcł~Ąķöc[7»Õƒ mą ~PŻōŪąĘ%ÉCXė+ī›ó1 ½"’Č»ļD7ńŻČķóåźšųÆ÷nēsøŲ»żÓ4śPe+_~¾ ^ ś½7BÕś’>BĖéJ._­ üö€šō>±Ęgź1ģ<9ŽÕ¹ĻA+!åą¤Ž’3FĶ%Œæōčć½; W ćŲ`2=(ŹķŻ1·ÓæĢ—@€»5Äś¬8½Ų¬>«!Ó¾ ©5rŅ#¹?—: ķY©O,y·Cąžó-)H5Ø+šYė9Ö±Q%? ›š‰ō®»óFÆߨH] Üč¦råŽĪÜńŠ!$õōłÅ÷/ńėŪ/¢ŪĖõšZńŪ(įšĒ8ģūļ»@0#­bSZ'€īČ<×ņÄ&E*ŠöI €3Ąćż7Æ*Ö: ļż$"ØrÕŗ-7.†īÜ4ģ5¦źņščē:3&ē–ļæ1hć%ā =ß„>åģė÷ęņ łņ+ĀōĮė.Ģ™bńņÜÕń:Õ'ŽÜąū¬éśŚ€ų:ķéY(į""$${ŲCućEJ!ćēŃĻcRŒŲŽŽš8^‹ż,ÜPKLõ»’s +!šß4wó>ņ’īü³ńŻ/?‹łć¹[L¢ėīś#;ü­õéŪŲō8źśšŃė »oļAó6žŲ"O’ć’5ōėŗģ’% zĆ dæüŖé;%„Ī(1”’¦ör= Ƙœż*>2ŒŻŁī4:¾.ė*ö(8¬K4ŃžßA(ž,/ģėö÷üŁ€[®¢a€Ü 1*iŃÕaŲi),qÕŚģį0Ō€“NŅ~ģ*­Hė"åQŁĻŹšżńlUć,"01ōÕµ0>ąŹR¹ĀčĶžĀqńÅ·*/iM@–F  /'šÖźėžc 0AŠ/ąņA. ē7øµķ>Ō )žś.$ÉĄĆ5śł€j–žu¬åŹąļWįKåĪ©KY;±t%ųŠŽ ÓFjś®<Ģ2PaÓ>Ćī+ńūĶėņöÖö &éō©7ė÷ĀšŚņ·ļļµŌ)Cą+GČhłī@Ÿ"š¶L.&×mė߯¦Ļl=Béž Ū®ĒśØ„é·Ž7-%ėįÖĪī×öČ%Ŗ":ž+C'=yóžÅ»W 5R`PøBŪ%Z_ŚĀņ±äü'ĖwĶ'ėXJ¼ł"Ė$nOųŅ€ ­“üż÷ē(6?.%»zvś7óĘ8øŹżłŪ'€"6¤ŠZšQś²"ķŁDč(9÷&$@ĒŪå“SšŹŽä¶*É,ūü ó(źEB#¹ŅąŠ×Ģ6~€ń„Y)Cąé“ė Åm·ŌܶiG Ö6Āž+ļ’ Õ ®ū£ļņ9Ļ?šełž3ķ ^gė ųóü…šĄļ`Ā£‹­łZāüÆaˆó&ßĻĒŲ(öQ‚ČųōO%A@FÜĪøk‚ōß¾ż3'.TāėBĪT0øM'źųö.įśū£ÄŌWäĶpÕ6ŽKūā$ģĖśśĮQ DU$ JŻ5-Ó ĒŃ2×Źļą¾.Nź3ę"1"ž€’ÜeėŻR£żX’G;”-m¼#K©ŽCõż¹ $ų‚=2ŁŲ !€ Ū7ž$¶)įHF¼C(ōŠ’„Ī:¢ą~#qC Ų@ž…ķVµõ¼Lū"Ū€ėĄÅķė> ścü#‘µõ“ąeB÷éŁCj¤ĶÄgå/c²¹÷TVč­:ÜŪōs€Żņ+ ÖHš Ŗé*į41!ģ+*ōūļ( +ēŻģšĆ4ļ­ēHė~¾Ż;ņ8 Üó2!¦'€1H°å 䏵Ų5Ū'±“ņ5‹ć2łż!ūķć0 Y÷«ā(/BD+Ī Ö)ó¬ńų’õ"žōž ńŽ)ģõ°ģśä~ć°õčķMžķ2Ąø7į> >×?šä$āå(«ŪėŚń ķhāęŻ0~$Õ±öĀdŪŗ å$óŽīÆå.õżDū]De(ĘĖąģ;š±%ÅĒ’kJŚźŗ?OŸ ¹ŚźC×-äOkžJŅ„Õ×ĒÅ!„“Ü XÄąā"Ć7õS×Ņ‘"M9'ņf<ʁūj-š‡āćä(:ö$%Ų Ń/Iź‚&h÷½€©pā[€Ēbż€éńg¢)ģ €€ā )§“Fčā˜NƒŃxąćōŲ™Śzp5ŽÓN#-}?ä)Ę-6Kųý¬” ÜÕ=D€ļĮ,((Ä ņĮDī-ōÄ÷XĶ•ÆB7Õė ŚB¬5ćäŽT„͵ČūĄ¾ķ·ĻUĀõ ßē7 öDÕśĒ€ŲČčśźīõž¹3®C¹cū¼›ö:Ų2ĢŖććś&1ŚTŲ0­č,Õü§'Ö¹²“?Š"č¾Ś I>ĪÖ÷§åå’¼÷ōōßį€)M],A,šč ż¾×>©ōźå5'Āśäī¬ģŲķ­ųõåļLa"ę|€’ž!ˆ ĖÕüœB~ē ‹ķUPŲ§PücŗŅāį| RšN 1Ļ/Č’€ŗęķ! Ą-3$“F‘éżo¼Ÿ+Cį99k:ŃČõįų¬™ ź’`ŪM_ł &3œ”¹™ķ2¦Ķ "Ɂ÷^e)ˆ%č#ņŚ nPĘĪ7ˆ-ł"ʜ ¼Nģ"žĀō$:Ä2!Ž)7żD ūß3ÉEśŻÆ!“ĖŪSŚ67Č·Ńmž\Ķė–ķłÕŪxńļ I°½EP ŽŻ+8äµčĮ/įĻō€’ Ń«ł׳Z±½Ó߀2;»æõ :9ÖESQÖŌū(·ų JIøśĻžūüŲ€Į ąņļ“ęRŻ%5¼IeīńŃ(«¶½õbkūŻĢ4G ¼G8A¼€ŅćÓģäŹŪŠŲ< 8 ą»Ķ ĢÕ˲÷©ŚŻŻūśØļĪö»ß¾ķĶ$ĮɆĮģ.ē+'Ļ )õü&/ ‚?åćĒX%Eņ|5Žųµ+ą€EŃó)Š"IE3ŌŪoūļĖŁūźO“% äóJąōė½Ö8XQš7rmPų6)Ć«€*õ × 3éįø»cÉ ä%ö _<ŽćĖ ušŸ”Qó6ąóšŠ!éf8Ų;Ö*&§€ ńīóøī_ +ŲĀ…’0 YåÖö/ĆųœąšĻßåśU ŪĢE1øś™—“U,ĪćŁö/O)ęąjŽÉ³ :Ō+-2ŗŌ+ō@ÅĢ’ļĒŸ ÷ść.}ZS3ķĖü½Āž”-Ņ)÷łę]¹ÜčFśŅØā+ 4 ÓC!+üŗĄ-»žĀŽ4õ6xš$ūGŪŲģ+€… >XŌ25PÖšžłč*š4  ÉFü/Ē×2 (Ł.ŽŽ-ēś~Ņ3€ōµPą',ńo'ę,}wdɀ%2‚ ž?øĄĻóր÷ćåī<ˆėϱJŽõHɍēū×-4)įŁõž`ø!C + 1’eē§$H ̧<€p6.U~~įŽdš²QöŲŪ("¬ö×¾ų~/!Ģ7[6źFzB„žĄpņ!ķģ4÷EåNŽ5=żŻ¬õü`ų'ķŹÕ½FÕŅįĪi^÷¼'(½¬„Ā*±ßj€­Óü š"SöČÓśõlōąŁĖō.Ŗ €ģūŚ µóL€’ō€¹ÕśßdN* “ōĢ(ÅżļÓ Łyśåįąč׳@öżĢŅødś*4Į/RÜ`ĮΧē€ūģ÷ņøņ÷łłg»Ćśęå!Ų M 抦ńś*õč2żß"ŃHŃžŚļ9łČī÷EļłŖŪ€ų½T āöśģ3Z æś3ŃŹééÓ¹BŒ5ų€A9Š*C7ćŠć!ńĢ2Æßc€Ć “'+Å"5IļYŠįŒ?€ÖķŅØ į!© K½¼Į÷’ŃŠé,ž"c¤A:¾‹ių9?_ķ€ź×€¹,łhÕė€ŽB‚hÜLģń2 מz¦ā£ę÷ņą€ČĪßĒŲčł[GøŚ@7Ö°eįß«EK=øWļŚ“Ģ1ä4Į'ņ€ “Ö¼öźĘü§,Ł1¹!.Óę ąłyī ėēå;W4Ź}Ļ?C"|€7šśØæ.ĘĪŻėbJIŌpJ) Ęč؊ÉŌ?/čęnō’Łå$ Š<1Ō”L€ćĄńčDś43*·8ŸŽŃä¾¼ÕV/9ź²ė¬šī°ū0ņVŪsŽ€ņ›£?šfu¹WфHök/÷ķģųūčĻ¢ü'AQŽ-õūū2EUĒüYł€ Ź™ļ)åMŹmī6ż­š.šET]źäØÓ,7×åžįü9ųaÓÓ#½Éī J‘½ė”ųޤź98Ū! Å-*;%óóĖ 8üVŲ’ż ĻĻF“KbĘū‚Ś 4 •Ął€ŽćāŚ+VĶŹł’ÕūQ“ēMF#ęB¶Y)ĖäˆŃŪB8HźōĄ0Ūdž! ņ(»"?VÓTj4ŖLóęÜ#Ü %}2+ńhŽT€ßżä8”äWGéįÖÓVȹé4,€ŁDė'ļĘčēä"Ļ(&ö ^[÷į!5ćšŖųü"œƒxnĖŃ-õ-ķį!Ū~‚®Öļ Š< å÷ō9óåäø±äŽ²]Až<_ł„śČ¼ż4Ų>NK‚Ś €šŻ€ź8ģkưŃĶļ·ųūšaŹåš*ŠŁ äģ¶®ŠėD-Ē"ö÷Ø&YmģGS1ßų>±m€CŠž€;Ų€ó Ź¬P%t#79Ā <«Eō÷óöüēCÉių »’¼ŗż¾Łžż>Š3½šńįc՞ܬēE9ęAT"’žüńłŸR˚ķ;Æ ÷łõĒXśźė !ī­ŲņŹŌ(ż ēDąóA‰ƒ"ŅĒ 7-)2U §Šåõ¹ģ&‹=+æé ą(O,"€€ōÓ.µ×ŠÄ"Ę»)ōß<ōį×5ߗć šĢĘŪÕżŽEųŻĆų… Kć&(ÖņĒś!FūŪćÅ)Īę čˆÉąėŠŲ'ŹĻ/š*÷Ģ"Ż!ž4’JžŚCõĢ%ē¼źńZÆś÷ė ųźł ģŌę·/ė=ńēfEÄ+ EOšŠčŗ÷²8u¾70Ļ"łöĪõČŹA’Ų)6ŠģFē5ęUŅłåĘø&’,ęįæŻā®¾īā ųšē³įöęłtåī»%^×Ė× āå*½ż8ēø†Ö»1ūzŌ#5å'ŽųŹļHÓ (ģó %;éķčłē&ā(łūRĒ;߯  ·äńüŽŌĒžFĆéżžŚ#* öłļJ%¼śźļTōžī2ęé*}ā.žĻąīßąõ€ÜŌ żķŪĻ’Fųę & ÕļÓ Ł’Ā>C¼ļįĀ×#ķĪõÓī?ņ .åf( ų$*HŁŪŃ bĢ%łé0šćęĻ%žžåļ8Ŗ ˆś œĖā€ü8.¤Ŗ­/Æa Ū ŗŠ ź·7ė½H¦ėēL¹óĀ÷ę8­(Ł®#ĢQŁS(öÄÓՀY'ė·ŻŃķŚ„‚ĖHBķÜx*茿(ķõź`7 wš ĖćŹŃ-“©g÷ µčźŠ9Ō-ˆ’-!Ū *łė­ éO*ś c 6ü>!U»Öš&8I.fcr£/œ ķģhóasI+»YīN?Ć žœńč <ŸĆ€åēĖߎ¬ī€~īĶM¤2"VĢ•4*©W5P õ|ŃÖą”Ą„éĆ,ρ®ū~`Ł‚„ ,ˆ0­¦~ā©é~B}Œóµ€e€Ō»ūĮuS ŸĀĀsģ Å+w³#€¶€ų}šN;CšgåKĶ~Ʋ™$€1ŁŃ€āł~€Ó ‚%}GĄfqo€¤;ēڵh°Ė䂀€~!‚.lł,ŽĄ›ģ{Q_"Ł~€‘šŒĒbīĶ®-m;ąeų~$RS€Öp€>m·°ĪŪ@ßņążŚO&·č Ō«ņ żšB !Čo—;' )ķC—ŗŲó’ė?F— .BĶlå) żø.~¹½óČļ+ņŽąŪ¾ÅŠõ¶7=ä:Š(>½ĻŃŪHįšŁoYż3ź/gįŌɘlIB4N_«™»ĖGźŚT€$C)ńĮ¢Ø/ōę)ŖäßéFüĶ 6}“–ž| šāŖ 5ŽŻå5 S) ņ1Ä éSø(£->ŃZŪ¹+Ÿ"ĪS¾$„éļ^Ōųōżīļ ’Có#uīĒ~ 7O CĢčņÅÕČ)Ö°<.ó) š'"ķė7"×0}Õ9 ¹4‘Q0¾żŁH8I3ŲėŚÖ (āŃaėćį(}eŽ×ˆ;#Ģó&æ]žź’ 2į˜!œŁ ÓźAö‘7:(öݧ €DųéŖ½šq&ä€å)äĻń +ŁĶ-“ņåĻIŃŃĮ1)óįÖģ?įVYCüÓŚģ-© ųą+Ó&»?Ę/ 6šFßå·89PŃ$’æ5Cē”Ć»ģļ"<)ķõŲņš&! ż’Ŗ/j÷8ōźŪżųźF×Ožī;ŚłŒņ¤’ä»2\Ó€Sõ7SJŠÄ—6³ņ·üOęµ\Ųū¶Łč­L~ųīćųą‡ėæõs?ń?k9=Ü ĪBīå2ŠśéHŽ(ęØ40ū.,šūź×‰×/i.opWI!H±õ4ū ōšÓć¹f~xiüpŽ'ąĮŽ•ķ(cÖ=LŌDŠ))|€Õƒ'9žń¹TčėmK€~½ó€ü)H€.lÖmė;\”?ė€7Ć#ēų€ķ\µü")ī}€+Ļ‚~ tčžńŻšŹA-ä’Ėū0ćō±Ķŗ+5ņĻžŚ€<Ä倲~ł@ž9‰nčߎ71"€$ʳ?-<_ņJZ!d}ß„įūvKņążžAŁÕ‹ņÖ4kęīq°ž)Ƨć©Dō*żļN ėÜ~$ łyļ)0!G¾żł €T $üäIĖ15ö°}&ĻPC©ó®c®€Ä󣚬7żTŚę906 ō3ā,Ū3I3@ĖVė|*uŲł\.!/rY­ʳņi,/ś’!šńOĮtįČćžET~ż-xü˜ž“?€°Ē€±4¦GO“[Gmæō ("7Ō7ņÜ'§źęłÓJ$źĒŽ8ųDŲ-ēQæ=ÕĪųŃ}Gž4ą%D²9ī×= N“˜“Eūŗč½9;ŠĢm"Ą F DīłMņĀ`Ąž'øŲ.Ā"6Ę+bū!ŃōVĻ5$ŪŻ€õģ2ā"30ģĀ!<ĮĘŖĢ;.ä×ūśłļCżŪž Åż>žĘń^± 'M'×9*Äż"ńß-ŚQ÷#ϳęķīē’ėąZŚ'ŚńöåóŌ ēņ öźń Čź ķŌßŲ.Õ ņ© `Ī#¤Ł1/łõ žæģ—ĢŁį«čÅAų$Ģ ÷LÆ?ÜįŃ(²XßŅTāą:Uõ/ōAŽ7Ö&üÖµ~ėūäF9#’ŠÓŻéėō#ŗķ#* ;Õ5ųņĖ5ēģųī(į€Eąžėų<Ńī)åīŠē ¬’ضŚ'÷Ć'ģćāÓ÷ŁŖā7ųõü+ מäā 8ŚęųĀ 7ŠKĻ-óŻ ½ģ šĻy9²Ģ3Ķ:#Ź öó JŻ6ä"Wż$/Ō.č!ĪĆēĖōÅęūŗ§æŹ°ūĖŻä’,ŖßŅģEóŪ®čż)ø ÷¾,PŽčś× ÕŃė'ęķ 9FČ/¤üļźĪķĪ įĖēŚöų*žČńā čżņšč&Ečä1Ó)ūĀAō#ŠōžļóVĖ% å ņ0·Čć²ŻDå* ś22Ż+ę ūB śŃäŽ=° Ė&ėūņå>%Žē#tõÖ± ö„§œfĶ £ĪšĄöłŚ ²ŽņŪē$Ź"ŗ8ĶŁ9ßč(ö(ī8! Ņō°źšŻīŪōå1łŃś$ A4ĢÆŻūā'0ņÕ5ٳšķOóńė š÷ ¾9TĻ–’Ż!…šķšćąü#ēčī6.ߥӭų ¼·ļCįLżļō–Ę#˜ü“ -Ņķē2¾õÅē–ŻŻńŻŃß¼Ō5UŚ0Ģ ŲÜ4/.ķĻÉ? *Ģä š¤śźĪÕ ęłTßb²Jłņß×ó0­’ ”Ēń Ń\ń0‹!óAßčß0 0 ^-ś%­=÷2śÅ-÷ŽŹFzĀÜ €Ž ¢'÷×üį ¹VćÜ(×~U&=ĀkĀ«S·F}ę#Ī ·„ jŅ EIŠėõKŠ€ż4,ų€ė‡Ÿ9c^Õ÷ö ½ķ¬?Š Ć–€½ŖŲū¤TĶ}%ŃģIź.źźńB*CÄčņß~/dŒūX€Š_ō€!K°Ķ+ņõ^\ļWtŻäĄÜæ{•Ū€į8pe÷ €51ÆĒÅŁ»ķÖµś Ķ.Ōį>&īńZ ćśÜæŪc+ć/' ż£Éü1ōąłõģ°(ūń <¹>ļéÄį Ąūę£ččCšÓĶ Ń,#Ģ$»ū£ŚQŻŅõņ!ēų" Lį³äĆ īFč$ņr‘Oł©Čę+3/źąSąż÷Īü5Ģ,ĒŲßļõŸļ-Ėį05ņü ņ·ńĪć ė,ŁšęĪŠ9ŌłÜD>D9ł:éó Ūź¬, ĖģŚ“:é÷ńßŃ!^ó5åę£ß!ų+ēš*ÜQßĶ /įŽłæčÕĶ*ĆšÉhŪÓŅÖūKļćP ō  éĖÅx(š¹Ö.5üö ķ ńĢš7€Nė0Ļ‚Ńb%įŠæÓ%į¦šŽļWņ4ŽAņßüčīōĢšŠy ćöóź @ź+<ÓŹ’ö›'’-ōń5CØŲ.±Ž¹×ÓŖ?Å J]ņ¾ŽļČ‹5*Ņś<«%ćąēĖ/ĄŠĀņāĪCģ=ó“4ś,Kīģ!äō!öIÖ% ė&÷ū$d„äŻć÷2€„*;8+G²(į4ß.ąą¾ö ™ł÷ńŗŠ&ē®“ÜŠG„¼ÄĶŪ¬ūū|’2Tk%œŗ ī7tģģÆū<=#dNnrTŃēŚ%*"ΐē(ī+pģ ČåķŠēęŻ,hėŹ,.2*×)ūęI ŁŪ7ŌćRr%Āė·ų»:ō0öGļĆĘśüµs€=²’ģCHŃÉ,øļ¹Jģ!ś67ź’ń E©Å%·»Å~ē3öŌķ¾0ņųĢ0ܘSĆ8!å¾üąŹf<¹Č} לō%³~)ø€Lü»~25ųYźA¶¹e,ÆÅYÜōŃ yÖ.łõ+K·ū¦äŃ6ŠłĖ÷@!m ž>÷ĶC#łōüó凹ĀÕXNō G=ü!ņĶ#Kē"[ŚwĄ#čń4č̲łŸ,CC“Dõüą`Dó°Č5€ÜрÓ›šā}ś4i‚/9KļĖ›Ž"čźY Dćł& -B܍ߡ~€ŃŹ×ö¼śĻ™į»ĖC \Żåó˜( Ø[ś(C R°īų»3šE@>öīó×MņŌč:ĄOŌ ©ģīŻ°™Éļ&™4f Īņü“ķ:īūØ,Y €ĖčąĀÅ" ź ŪO=ō6€śĘŹģ Šnfс¼05ß|ōÓ/“ż BčČ,‚=ÖHłT¹Ę«ä'Ę2īż ī!»ų0“ečõźš•ŅļšŸÓČio#Eź€ū¦6˜õĒ•);Z?ŀ»é³éŲÜõé § č śą[ŽO3÷2hÉD²ēh’«eåĶćēpłķŠ ·żŃ éōÜńąÕ֒@„Ŗņ€ž.ģN鎹üųŚ5ģ%Ö»©Ņóc¾• Ļ3¼ē*1CüßgŃ&Ž7 2†Óą·Ł ¦#Töē»+8%×(ł©1ݧŅÖūź+ńņ¼ ŗ%Ż“[ģ!żLBļ"ØūŅ ö@Ą ä P-ݦŅ1Īä2" Ņ.å)ķQAāöČ@ģė ŻĻóąŪ£Ę Ū¬ö ū”NCļŲ³ąÉüāõ >æ’2į  Żź&™ļŻ OŹ7NŚ?ņģēņ&€±Ł—<16Ū'5]*Ć6§%™Į@ü* ņDżŅĶ(J?Į“Y’nF!ąĻ·ÕŠ €Ü-ų(:UßM Ō+åp ©Ż” ö³Ą5P ’ ø€“ƒ•²åŗ ė.į@ļ/ߐ8čwĒ~°:» įė±Hµ5ńKT1·ģź| •Ž÷-źTfėÄż “&7&Ś€žżėĆ –4#€‹GūuAE6AżŽ$+‡×ė4) ÷ę$~ŗöVśž ĻÄ;(†© ĀÓ õīźß՝ź¼å#0ņ(įÕ>ŁÅ3ų ;»­ķŪ‚īśüšłēżū$+ę&õ-ī1 €ÖEĆ«āĄóę!BõŪżϼ޲Įæ„Č ²ķńńčóYŲ(ų VL%µē2RĮVł÷F€<'÷ÜbļūćØ$ ’s×'Ųšå³.Üņ÷į$’śā&ĀåŃ{Döźüµā)=Ių7]”YŌ.äĖI/ö”ŚĒ*ļĢŹź¹™’é.ö8 ļ÷ĪĖ Ü %85fńōÕų&/šą &VŲ ’ńœåĖā:,ģ%½’zŪÕ&ņ Ąä4Ž4«ĘąŲt'8Ļ9Õ’Īž(ż9”üOæ DöžøĢvĢŠ^ūŁ/z*?'$UC #ėö"å^üłĶ¹48żźŪ$—Ьžų±ŁaGĻ ś§$(Ś>0šž5&$掷,żŲGä Ę/¹Õ'Ź÷ ĪčÖęų ™€ßĒ"Ź#2› Ÿ;ą&ęK¤żkWGi Ę’%(ŪüÉ&Ył6Ā-ŗNģ ¼ Ęņo'óŹŻų-ńσ÷(’,įéšŪ(ŻoņłĶ¼ ·Ź±×čį1ĆÆJÉź"ć #·:ą¶Żž^Ü$#IßÅ$åēųņ9ńżļŌĶ#åܰÄ2- ÖIS=÷'ņXįūŅ ŲõŃü )))Ųū!š:<$Šu::¾ąšŪ&'ć’€čÅ9ÉŚ­ņ-ö&?Cņ9ė!×å’šÖą1ųõJńäŪ0!čÉź.é/<ēū2 ōÜ"ļH’ūčLīfż īŁ/! +:/ņ’ČŪA’Ź.=‘»øÉÓēģ§ģĖņ€éŲ·9įõ Ä!ę2Q”śāŪ(‚؁Ü#ŠRćā’åū3 5ńńOÖ āÖčšš,LE÷äŪēžAżĀęŻĀBßśģ ʼæŻņPī:³ķŠłF6,:į#÷24Üįż_óåüłąå €žŽJā#÷’ŁßcAĪ ŻĆĪŌ’Ļ21$&CśżŻ2ŠĘöć’:ū¦ćļ1Ϲś ""«6™ņ¼Rļ!ēeŲŌ&kŪ³7Ļ”ń€Ż*80Ś-ų&üÉ5€ĆZå$Ó¶ųŅ¾ ŚSŌĆčæĄ°2Žj/ÖŃģ+4'€:‡ ÅNĮ•C§ńķJįóö0ÜĪb ²(1ōėe%Xłx€ÅĮ›€Ū$įOš!ńėłŹĶēżÜĪO 2ļ¦{ ÕSŽ«94ż’Ķ2ūFĒüźŅG)2ź÷żŻ\ٹÉĒĄ/*Äō2ģ&éUZīŠ€ė:*čNŹł[(,% &Æ;× $-é›ó1>ū±sŅ3šŌĶ>N¹śģKŌśū¬“ /ܾJ×&Ė ż ļ śē±µ&ś+ü’ŲU“7>ę%ųęāÓ&ö~TÕ LŌ-_ü11ź(`4āOζZÓt?įÆ7"e:JĀčRU€ ņ}PI&ܳŚķ'Ž£P€8Qń8ō±Õ^"Ka µ@ŚĀŃ” ŅäģĄāśĆ%ō-ū )ņō_ķ3ūPäßŗ.ń)ō;K ģśŹŁ (QĶņÉĶ 1õ !ęŻō ®2’ ŠėżåŹė1!č  ōÉž ą*ėŁłųŽŽŻŽ ķ÷š7ćåā(ņõń+82!ī6ļćŚķäā ō &.ūÖ$/ ź śčūŻłÅ(ķęēėõ4ķ/÷ ŽŪ!ްå8Źņ7÷ųsóŃąöńŁö™ų÷ū ÷(A ĻēęÕ ńü ÷’  2 ž ŚūźĆDńęüüąüöō¢44Ęņ ķ8!% ’ ö&īÜėēžķķńłłķō-÷żā8 ģųĀū÷ #-čże ž’ żłśó üčżžĢśłóóż šūóü ģé-ö öõ÷ł ;’ģüŁŽ’ ’  Žōķ öŃźšŁŪ#ņŪ' Ü ųżņėō×óåėõ įĻÕåéž+ ž$÷ķ?ąņī÷ķõ ö=!ó å’*.÷//Lėö āģ÷ų+ųī.öŃ',×.÷×ēūŅżóļ/ģōó.č’ųą*ž$ķ*:ÉģõĪųćņ<ó ń·Čņ÷É%Iį!ńé2ūę&š9’ņ*ß*Ūä!ņ+’÷ńūżü’H8Į1ļ ćĢ¦å ŻĶļŠśéöčž.īīæŠöō  ĆŲ —ļķÖ+čŠå)#żŗAū! Ū)ŠÜ*ņ Ö(7ē?ę żüķķūüż.žĶ6łĮó#ūĻęüTąü% žéŅåż( Źé9ܹW-ūśž!éčüŽ’­Ž<'ݱТäTc€šŅüׯ–ņ!Ž ķ3čėģųĀĖéÄ?Cį²ÄƧļĖöõāśÜ’ūżüöšćBśš$}ļčšśņÓĢ Śįó÷Ü2ėFļ€šėčIń*\®@ÓīŁš4żź:ģĄ8ÓĆŁ&āę-² ¾×ļźš,=FįĢb–  ł Ī¢ņ‚ Ę;€Kņ?U1 Õ,֚£'õ%oĪ V "C’ų<`éČÜōųųŹłÖļń !Ć ąņģōū8ŗäõłż(4(ółīōĮ0,<+Ä &-Žļ¶ćÉ ł,ś-äŻģņ&ä0üīųÜI’#čĶŲ4Å÷ź8Ż’ģ¼įźŁ'ĖōśöįķļŻßēī÷ļ#ūĶüķļņ:é0 ō ŪõŪźõ Łõ÷ą/śś9č 8+%Ķåī&åų&6ķü@’ōšįŅ .šūB!³ čļ÷ äö ß  ā(*Ų÷ņõBłļ ķēõĻ#üģ ī÷ßÜöįņįį ē)1 ėżõńä×Õ,óéūł609#Ī$šņīų#  ēī÷ µ÷"ž’Ž&×õēśūīé õééżō'čŁē  äąļ=ļ éüę+Ė>õžū’Ó%ōūä%$žŲēż ņ8Xīöų$ īņü—łäōĄ1 ź śżöļ äķåšÜāóēńōų8śńūļķ ōųņ'Čžöļ 3ż’ųōżü÷õüöńōųś%%šś.#ńķńū3  ų÷ļśõĖęį=å ü'ŻģüółųŌć!óģÜÜüüź’ō8żąłēōńł÷Ś" ,ś ūźŚ ģüöųöņ äéč!Śēž÷Ūńžēżņ ž2é Ü!(łń šö’߯,ņųÜćź&.üųMüšļ )ść5ŻĶŻ#ķ1’ł ą śż öõZ śē1Ćźņ÷Üņ+ū÷Ó źżėüéŪģęļöōÕģ%įöėņ ’ć* ķź×#Īū?5ļżÄ4ąņ ’.ż <ń ćõÜļ , ķŪ”מļ?/ü;ō(ņēėżć’ėÓ.å,F÷ $-2(4&§īōā+MģÜ1D訬õī!& ļNżģ¾O(Tż8īżš*ś@öÜäQ.õÖ(ś×äīäå€$łī0Čćå¾)Ø!ńéU MöōἄéŃ6H÷żōö73 øŹKąŌ€Ę$ /"Ćéä°ē ÷čųŹēėąśå ōęėęęŠüŁļ³åņ$(õČģ÷õ’š üéī×+ ųŁčŽ4Ģ ė÷ģŚīč$ōč,±õSšōš¶UįéśūÆ×ņūčM÷ 'öūžÕ&ņ'ģŌü %ģŅ$ξ ÷īõÜ üōõ8īżĻžņ$ Š(éųėģ äūėź1 "äžßŹ(ŠŻēņ ŻÜ>ūņüŻżŽßł² ’%,ś—Īūäąšņė(Ņņßęöų łV’ž īåæśåćų&éś* ųų įėüéķÕü+ ģęķžššżßüąū"’ļ%õšįŠōõė’ōöŚäķÓ$źõī9ų ń3)¼ -#łŽÕ ŲŽśé÷ęą&ńööęļś ūäõņļéģąŠ’¬ ęßė¼ķĻŗzė8 ß $#A+Żź’ā'¤ü’īäķ¾ä 8&ęéū ģÅūßńėBģüFҹEż’žõ üōuóģ÷Ķńö śęņžńįŁ ķń ńÜĻßģ’0čŲ"śļ/Ä5ų mõü÷īņö×9ś3óü&ÖõģŻ5üāńżšĶę3 Ł%Ņō,ŁńłčåöģóļP’ū+ ó÷ Ęž5€ ' !ž© (¬ę0äŽ%Ž ģ÷"ö0ś (ą ż'äHū#ŪŲūŁń(HŚó T¤Öä'ųč2D’ ńęõõŪīöĢõ 5•įÜüöżčÖł žź2Ē+= 2’E ń{éžōŻ%Cלł žžāśģ-ēÖ’ē ’ļ4¹ټ¹Ż&é.žéąļ\.;%ļņå× ńėÖ,ōĖļž # &µ7+ģŌŻą E¹Ż5.¹ Ćł%Ę^ C!!śŹģ[3ć?Ö*B ķąĘżŖĘó03ę< ü-żś<«īģźīģŲ'åŚėŪä&Cō+šŅŽ"ł/ėęčį3H6–ŪīĀć.å%ŃÓ!ĖūżåöżŁĒž;äģ¶)ė»’åÜGčééłņ+ö+óüHļćŅ# N¢÷üŚ:.-šBūÕ6źÓū#ß÷ųēčēŅöšśÓłāųóēö’łćÖGśā#ņŚ#Ū÷ ūāīŌöö½įüūźōłźžś÷ßśāüżųżĀŚõŻšłųłąšŠłśóūß#&)šåėź ņŚā ē  ČŅļõä÷ ÕęX īéų!óąż ōģ)-ūļ4Ś% Ś źß’ęōFäåķŪüć *ś’Żīų-÷ éłśŌæš ˆ÷ę(~ł¤:÷>#%!łb$ü7Ņ1 -Ō.Ļé°åńļŽį  ž ż.$īEšrå4Ņ%õ‡!<ĢżģÄ쀸Ęń ąüę>(čēņžęĶūöŚūFŻś$ČŪ%īĢźSóó^3A 0 Z÷ö·(Ūüī’Å,õWĢ ėÕžÉł å“śåžśšń2 ÷ņÓłå€ōDĀ :ēšńū1’¼ūłśŲw+ żšžīõķłüłņ’ŅõŗżžņÓ śżó(śę8ņ÷4żß ķé ųų #&öōų öšŚ’ą’vźų2ä= ó`Ųūģżś ųāõööČ ÷ *üūśĮėėū š’üÜü3ģūīÓłģš%ł  Dżāł4å !ģż€Ūńī" ń裊ūļł žīżŽēüõĀĒäĢ0żMjėŌßžŲGĢ–$Ł(æVvżå+ķœ,ķ‘T €€ ńē)$ŻķŲ żsXJ9Ó.šĘ#_!ćŠéī- 6ōéęµĮ#Ųć<ū2ī . øÆ0/Ö¢nÄƬŪĘ$Ņ;}6Nļ^óĢīóå š²1<ĘģTčśgīÄõJĄų=Ķjč)žDßżĻżŅ@įEĀß(E+ „/žÓL7ÓĀ’¾ļņĀŁ?-ęŪ"ž#žżšžćĆœ2łĄśī² % łłOųČ5@üā2 ų ėłž/ź ä,ń)óžüńā Żóżķéö’ öņ ÷’4Ü&=ė.Ģśž93ŗPš÷#jčŁåŅżņę- Šāß Ą ōįŁó  ūŹvšūĢ  #ŅÜ äéķ Ō  & å÷ō$č Ł÷,šŪ+!ū  š Żęųžńī’ ąłöõ óö īļóšÉł$Ķż ó "žŚųüžś ł ž÷õńūźäąū½óžś%ņ ¾śłõÉó ź  Š*ßń’6öŻōń ōśśłD÷īī'Yń­ß4óųĻųīŻģ ÄūæCŁ .ś-ģŽŹŲ śļC ’!ņä ž’ų(ļģļļ ü ō!Śųčūé#ł~ń*1tæēģé .į`åūGųėŌÜõł*0ź’ķ ;ėRÓ4) ū Ōž "+G’āóęąĒĆūÜ-ī&”BE- ś+ÅŌöŅżņ Kšä#ūeš5ąŃ 2ķĆāō%*Ā5 łI'žÜā’ Ö8:ī ×ļÜ(Ę"ńž/éėµņѼÉģõ Ųūś)ź+Ä/ōźÄń čń( $Ņ )/ē%šE÷ßå’ö2ōšöń żåü÷ī ņŃ éõķźģģ%ķöõ„ūżłųź öóōųõŽ!ßśŪņą÷ųŚšūöģž÷ś ä—ų#M ņżżłū)óī łõ0śö'ßźÓįŚķć,ūėóCžį&ó Żźū ė š+ļš’ %Ōśé+’ō6ļ’ó  Ņü!Ōó¬ Łóü ) Ėķ’ņįāüņēŚöõŁųśžĒüłŽüļł2č*żó śśņšöĻžņ$,śčŪ ź ’(Zļņóó !žÜšęłń -żņēüļ÷Ó ö&ļÖū õ!ĪśŽå$ąōļ9Õ÷āśŅ÷Ń9ł’ü õļüę ĶōåųŌ’#°ö’ļ ūōėūīģ śņ5ż2æõŒņōźöųńšī č ļ  õīźó+ś,źķūüńŅaą$źÜż8ī÷öņłäśņåŠ %ņżęłīģŚĘ, āĄģ÷ōźśż Ü $ü'ōéóöüŻÄņüžūŌņōūżų! ŽÅī’šäķš÷ŽžśŌ ī'źžēąų źžśļżĢ'ē )Ļļ$é ł’'¾õķžōåßõžō ļ ķÓŹóę ō ńśŲ ģÖÜłūśż šéō čķūčIųõōń 8įöÖōęńą÷žńīžą/å2ų)&  õćé/ śCŹ éī+ļ ų å ! äŽńüź ž)÷ ļõ*åčż÷łņåü)5åҰOH€Žä)õ·UĻDĘ[é /Ł9)&0h7±å°žņ' åńØō Z½Ÿ ¹ō ņ3×ēåęö÷‰ŌÄ2  8ü"˜DßV̼¤0šČū×óžŃń'ńÓÜ’ąXŚōŪ łØėßö'5łīåź0/źŠ]Ā0ń.ėäåĶ€Ł/Ż#×1ż’0 ę§° ž/šLė/'Ņ'šŚēŽ’'£:ū!ęō½ąųģ,œļółĘß ōśJ$ēł!š ņāę ,!šżüķčīĻšž ōśģš u&öٵļÉčųŽēģ(!'Ļų!&ųõśśāčķ’żöōSććąR*ēŲė~ņū’ņīōžÉ£īļżõó÷ Šł , ļēķÖ ä’żä+Źõ÷’įŽ-ū%Ņżėņśņįųš¾+ŻśĄ6)ł"Żą> Õł×ū¾„÷ī.ū’üé’ÜÅźīęģŪśĮęÜż) Śš(ž!žāļ!7žżü óōöĶ’ śśŃ+łżĻ×öÕ!įļĻģĶąķ4čó÷JęŠ ;ķ’ćŪŃ=’įą ŌÄų6ČśųųżäŃöĮłĢō ųżķźóó*Ā!ģš=ļö ķVųöģšĄŽé %ąéęēA3$ĻÅ» ģĀüģ#/ģĘē6 ļ ’Ūtž›č,ŅŁĘŽ ķł%š.č żžė¼-łųč’5ŠE’é’ āżīóBŁōÕ=)ź6Źčüä÷Ć*Ó2ä÷ŃģŚāėöCD6Ōüöˁśģų’Ā-+ 'Šß% į$Dē5LÖģõq .åņ*ŚĪ)ßźöĮX 6õ@/ 3éėčė÷“öņ&ż ćĒŲŽīī/ś+ć ųĮłšõųų,ćģŚÅÖĢż* å÷ŽČķüäų’ ł,’żö łüõ,ęņćæÖżįĮąö’ņķī ī µģŲćļļÕīńCż2ÜŁóš·Ų· Üķłß Ōų(ńC%ŚÜēžł#äóõą$ź(44÷7ķõõ@ą$ $żÜõ'śŌ&Óōöą#÷āÖŁōöłĆ'äķ0BĢ Ž Ōņł7 ÷•/ęüūŖüÉö‡Ń3ųĶ ņüśöųóåśėüéŽ) "ēėč÷ļēüŲč%ąļŁ öų(ēLīżśä<½ž"Ūį’åż,õ%ō äūśń äüś ąS#0ßŻßøų®Ūö"ē-ķ h¹÷ ņŌ!Šķé)žČ śśĢüēś*ęöżėü4!łšÜ÷ūöŻņń÷ńõüõīžĢųß 4éŠčóüśöŲųŲ Ū迯#ųūī ķŻęčōęėł ö) į äųNžÕįÓ Ēż˜ ß óĶõ+"Õų.X9šō$2ņ ’õżė’.óćÄņŃ÷ūŌņ\ųųÖņżżóėżżæš-ó żį’ÕīöŻź å!łłŪ’÷ņöķąĀżē°ģŻķ 1óżźķ­’öś%šß,łĢ"ę+öÖ óōNųéņ ģ"óéū$ćõü 4µ  ķ# ėųµ5÷żöÉęé(üéż8ł!äUąāįŲ õč ųĶĒśžś"ź čę žįü*’.ī ēńü žöŃöįóšōś-. ę žī  ź+ žōćōéūļśēńFķģćH’åōō…šŻū,2ŻžųūĀ üŻņģü$&Ī ė  ÷öėįŁśłõņŠ:#śóüņ üö öžīķ÷לä ’÷öńå÷) ņń’ŚõśžŌüįóćśé’ĆßīśÜšżķīāõśė å(üåŽėŁóöüéßåü’’ķ ßéóć$Eńɾ­Üä÷-ąć} $ł ü źś/õłā śĪ¬,<µķ-ėš3+ÕźļśSņä3šūŁüī'āĢŃ_Ż&éļōŪųōĄ$ųłß õžĢÜ.żŲW Óčś-ź%ÅŻóÖč éņ%»= Ü»#÷ßę;ŌųżÖgńųó%6F’/ ™ųśóķ ä;ßµ:ó D õÕĖæ6üŚ öš6ü=ūł÷žžōžäōōāŻÖģ÷źéų# ńļö*ö‡ļ õēÉ ņś óķ=’Óüżõģüę/ėķ³żżöņņ¹ü 2óųÕŠ(ķįÜ ųś(ōöśßīēD6ń@ŲÕ’ļāśÜóČŸųžčŻŌ’ń żęīü Ķ!öųéšōł’ņ'# üŚś ßłšõ Žüöü ’īō čśó ĶžūŻÕŻāÖēĀŪÉ-čžńžĶźśōļą/÷ģ!ūÅ’óźCłģ!É  ćųśšńņćšõéó ėó 7ż ÷ł”% ÷ę2“åŁś&ü"ž’Ü“2šģėė;żžöšī&éū ķž żžōółåų½ €&óĻ+ų%’Hóé ’.% : ā FĘ<žĪż å’ ś żś ųčŌĻ (3š(& Fųķ;öVšööčńž@×* ūÜŁĘČŚ/½ų'łŲĪ0ž"1d żõ ćČ!Ęśń ßģŽ ńū²+ųK, 5÷Ōņ õūĀYåļń’æ^Ņ»¬śķļźöé *,ü+’ż’2ūü ßčųČŠ"ŁBÓ"=,’õ.ü Żż&(ńŅųŅōÓ\ (öšüńūū°żiŪõŠģ šé ņö÷.éņ łķļöÆ’ē 6érż ō  śöüäöęõ ēŌąéžī žłųé ųéż’š÷ķ' ņ5åYźüś’ čųł ūż ń ūīéėå~źåņå õüč’ŹīīÉE”)ńš ō ’žéööó ž:ę )ņóōŪŽšīżö÷ņ’ ļņ÷Ėę ö$Ūä"óčŪżź!ā żł’ż üųź€Ż ūćźĖõ9śń źįÜģīčÜ’ šūęėóž÷’ž÷=ņčęüź’ ŌBõöł×ę’ö’óÜŽČüż’ęņįšō÷ļ’) Ņüż ųŽž ź#łń!ńų-ų śčūå’Ś’ åń ż’łēūńņäüšķį.ķŃļ÷üķ÷*łöŽžō’ ō’ļõīŁŖõöśš ųĻńŌ: ņłśÉß&żå÷ą źō łśå %÷ņņūö ģžī ēļ"õ’ūŌņĢ×óųžżģŻśīõ’żßļ6 Ūłö,'’ų ńī’ēķćīśü÷š.ņńž ōīģ Sģņņ(”ööiźńן€Ÿ&Œć. žDņ× 6»)–<OēĒŽŹćųčR?ō"Fō>Śķ“ ģöüEė$ņüÖĘŽ:’,ņńģöX"ēåiļįČŲ PʼčĶčŁļT÷ĻžõłŌėįP880’ž=ķ‹'ś|Ų€ž¹å¾ķ2ā#ęłž+ė¾ÅįĢć½bŪИ@)»&7W&ĄŻž¼ųćļ#÷ółž Š) ÓéčÜśģźš!łüć$ÆĢõē ų ķ šćŽąž ž ÷°šųŪšį÷Śņś Q: ü  č ėąī8-ž’ć’õü÷*å"Łā%Āęīź# śöņ ęšŃ$ łé ļžIņŲ>Żśžśģßā÷źü*öąé łė÷ ā ŃĪłó üėÉ÷÷ĆĶN čė Ķ;. Üč’öąźųżŪöķ š üō$ōķäģķü ńż . å (ęūżżż$öņ Ė蟯Žń½üūäö28ūī&éķ *Įēņ’ś0ųüŹī . šŪēņ÷īŅ")ü÷õŪ łł3’ā é ļż’śŌō 4饒š÷7.1ł4·6ĶįĖ ł aö Ģų üģ +Ü1 ųĻBĖéś/'śĻGĘ żžŚŪąćėĶĶ#>żč )üģ”Ą6 æėėļłŲµč„ź/ ß2’ņ Źēõ$ö ŃŲ@žĢõ÷éžó ųęģĒ=¤'391 ö5 š8ݲYAžÜŲź6GSóóę§ĒČģŻų÷źöėÕ '0ō IłńŽüÄ÷Ļ?ž7č”.öįךį÷ųkćń żĖ`é ³ ł+Ž łŪĖ÷iīąÆ ėķż×Éé*óüėżŻšģÓE’öę^õ­’Ų! tłēøĖóż]$ęš ĪžƒB&š !ŗźŲĀĻŲķÓ9łĶ’ĘńīżČå©÷ž,#łÉæŠćēĮsß$Ł’Ŗ~ ",ćå÷śåŁõżäöēĢ÷åūž+Öżŗ÷ógų.¼Ż źM÷/ļėļüļśõüį;ćå÷šē’©ężłųöīłī:+« ꎒ Ó ń&Ŗ ėååõóõćŃüļķš éö"ü Ōļ ģö"’«6䀜śģ÷ķA¢ć7’’žõå ūąś'ūęó@ĪĢą åź(āėč’įū$ūĆžłó žū9Ā÷ū= $ńłóļ#ųüŚ ł ēž&ų ōž ń/īö÷ ł’ķöõ ×īūŅż ī÷šęéÓĪžóõģ 7 -čóēü ņņńļ 6÷öū#ńżļņ ó õŪ)÷’’ēž$×ū%łłąšČ3Ģ/ś÷-ōī  ą3įäćīߌ ż #Éćņåóõ żą ;' +Óęå%ŻĘÜéģõüś8łśńų÷7 ßż<ū 4ū]üńł żō łģ īšę÷ä›ņļ Gż'ų ż(Ū÷ ź šųćīśūķ&čļ ž%$’ß’śåī ŗūčżóėłżüżž +ü÷ćÓł)Ó óķ!ģ%ž’ųėžīłšßžäśęōń8āńżōŻ ’śņ šś õź’ 5IŪļśīśĢšĘęņęŚ2 žĢčó*ןö’ Ü'ÉÕ/’Žż ÓöŚ=:(å¶õ -ł’ĢćśćĮ¶śśņ%čG*1ńāłąĮū×<ćåóõėŚśüā+üę¾å`Ō-ß?5^=)žŸżźßŠŻų!żćāŽ%ŅņBę1ÓäQ£ā ąč" ų!ĪåE ĢĄĢöūāŽāīż ń軯śīĮóėR ߯ŗøęóó’¢å÷öļÜ&Š :ä ęų% öų!åėŠ?ė’÷!8óščÖ"ę;Ķ8žķū#ޚ¶ņ ōüöņVń ūŪśżTĒ.7ż÷āńŌć>ļÜ o)ńbśŁų €Ņ’ä׿oŌŽū ,ó%ŗśöČē ł6-é/Ņņéć żłūFvŁżÕ(Rł,å7éūć”/ŗĆ ņBę~1ŻŖį“ä3ÕĪ’ÉĪĀĆóą*üōµ,‰Żæ˜Šāµ‘źēßäÅ<9ŪĻ&Ā·ö“Ų~ÜļĄĄń€FčÉEi Ź –U—š’qå /#,«+€Iᙓ(G™•ķĄ÷n €źs‹šW»Ļ|pŚ4½V׀6GŁø †䂞:wŻņąŃTęČž‚Ńj–¦ā2"=č·ę鏯”“t×m%t Ó»īfõę%(õ /šę÷Żēē×Ć łéüš ķ)¶÷źłÜįĪ(īÓ Ü€ĖŌš † ŹÖŹĖö÷8!%-ßū&ūšÓ åĪŠ  Óųķļį6 ŻĪäšé5 üšķłčūė ķĘ"żßÓŪõé³łõü(ā@Ķņ å ’ģśõżķ)š Ųś× įģž ļ0ųüūćīģóõü.ļ Ń źéó(1. ųüŽ <ööōŪ(ŚįęóÜüāłõĪļž įįóśłžż,ō÷ģž ÅćļÕŻ ÄśČų:6S  ņī&¾’ “ŹšųŽ0’ė ś !ņųč×+īö ZõųÅč čēąGąÅę- ¶/Śųö-Ī *ųś$ žīųŹł$ ß# ’$ äāĻ āų&ņ ø ąšķ ĘøĆō öų«ö°żćļŅ0Ęäšćīīöł1Ē(āĢžžć äŅמ ž¾SśźŠI ĄÖššK.æō ÉķŃ@ćę5I"Ņ";ōž 9’ź ęĻ;ō÷ŚęŻŠĢļķć××E8/ńļž8ÖÄī ÓŌē6.. ńöśöŅžūņĀ$ļŲļ$ÜÕšż÷ŌĹæ*żß @ 2ēÜź)<čūą āó’,%Oéšģōś'ŠīćŚöļā÷Dźģź×üō(  ÷Łõķńųż$śōÜ÷ģį)õóü Öłžŗ>Žö0 ÜõŌĒ( œļ Ē’Ķžõ.ÖšĪāåńõ+üźŚłJļņ÷ž Ū’ņÉźķō÷r3=Éī$ģ öž²·ń’.×üįĖö€Čüß/żĀŅóé¢/ņ$ ’ģņTūĢÜģ+üęž’õÖéčå0! üčŲÜ õēńųÓń·ćåĖŪī÷ü+Ńł© ĪžųŽūŅ$åöżåņ ń‹śśŃÜ å¬čø6+ 2ß źžł Ū,żĻųćõęŲW/ń³ź"óźā#÷ąÜ-ńś×ķŹÖųü"½Ńś)Ū ß0ēģü õFāÅŅŚUåūėź?ÕŻ ä ? įīŲ ī0$Īųõ ēŃŅūąÓ'ūĮčļ#.  ż94Ģōż•ū蹯-·ń&žŽ"äļõ0ł ńī×õšę2Ė.ĻŲ üŽ 3Ōēć+L!į,“ ĶŌūļ6 @ ó¶ā.ļīŁōžž÷Üõøē&ۈ+Ķāņ+)śō āäņżŅų’öå.ćĆūó½ĆÜü§'ź¶ ęÕ<×ć&ž’«ųšĪäŽõ ö ŌąüńčīŁ-Ģ/’ņ ą ļ ń%4é @"¾(šżņÆ1ä-ÜšØ[ōńĶ·  ¹č0üīę$÷ąÜŪ ō÷,ųŽ Ž%üģ&2÷ŹāķńśŪčńMĒŚģœĮ J÷Ń@ žG÷įÓņßų!$šłłķśźśųų([ šžĪ łē®ūęīī ężö)ģņśÅęółĖģUųźÓśõźĮś&  ·įŚÜš!ó Ńłóžķšė  Žņ8ō žĶ Ūž­ś’āģöä5å ēņü÷ūāų ó׳ūĢļ毜 ųß$źžōéņźółļż é0ą/ü Ś(åųń%Ēņ łņ ’ī.łńśĻéÕļ/źź« !ü)$źņ 9š+ł$ŌīķŲ"Ń  łųų5ņÕņ“śś a¼ ėłóäņé5ļR äü¾ č Žō²ūņóńÖ\"¶ ’ ČõŁü:čéGŽź ĻĘó1ķ  č_ż÷Ōš’©Ż÷ČĪ öVģćöģų抜ūéō ü ó1õńéźGźĶöłPäņćÜ/ų& Ś(ķ#ķQś ķōšĢ¤ą%ī5ł?ēžžę  õčżģųAöVĆū ąīģ$ū%ėó=ņōć§«6ū!RėĻŻŻüä) ÄÕģø’ ĆņŖüų‡Ļ » Ēąé)õÕ \®Fūķ35Ź#ŪŚĄŽĢ§(ō"ū( Ų Č/’Ųģ>ś÷ öó,±ęŹš õo į œ #-,ńŁéāįŪ8Ę!ž!üĖ’ŻėŻ Õ5Ź&’0¾ÜĀżŅ ÷!Ŗż ż$!óŠśń üŻ łģ ū,ūż6 üóōõļžļ Üōōģ įųžé€ūż žļ’ķśžżó÷ōõūčüėīēķł öūńä÷ ÷ōü ßūåźžĒ ļéžöōą ÷ ńčšī öóļ üņā÷śõ(öėėōäŌź ’ ī$ś÷ū"Ć Ņžšńėģ # $ ī÷üó7üō•]ō%`÷=™Düė"25³*0żōņŻš$,+ ź Ī"·ĀįÄń!BĒ÷µśłQåó8¼0Rķš(7(½Gß(ēŲ’)ŁI„ł*ķßŪ’#:ō?5é˜ąBķ)ū YÕj+ūü׳**“(Ėüńžõ ?į,(ęDŠø×*% ¼ėė6ņšž>1g46ū¼ķÜüįAś%ž£%ź /Ū4ėMųčĢČķę * <÷ śę!ūŪ  ĢÓź ęžü’ńķŹŽņż’ģžŽöūōšū åą €ę’ śółūĀ×&Śāüōųõā0@į ņė$ä!š& żū öū7ś Ś’ļ "įųä7õ"čī$ß åśé ­'Ż)žé’ēźļōųć枎$ī ēļüšŚś Ō’ķųöīżś%%’éóś÷śŪżśž×ģšü ēī ÷žś~łžüōģ’õ ź!µńŠžžßž’ųõļŻżõų ļē éż’÷ėüźłŃ šš2ü/ńš #üŽīļ . žü# ķ ļöŚļ )żłūūßģī& īÉ!įüńś÷+ē’šųū+žŻū0+ÓOóɬģõģ)śü;!Õåńž &š”ŲłŪ++żż õūł å!żģ öĶŁķś [ äÕb ³śź’&Źźżżöķ? ņżō×ūßóį!ĄžČöī÷ųć;š±üųžę"$ūŽ÷óßō%ęļ²ė Ž$ģĻü/Łį6ķšīןō#,ź/!ōå#ųµąģ2Ö÷ö:éĻ čŠ 4× %öŪ’BÕXł»äŻ/9&Ž÷éš ęŻąŌ¼ö׏OžšŹśĖŲÉ óīĆĶņņč’GŻ.įéū&ŪHéłÕÕCŽ9ŃÜ %øĪē&Å*Ļ!· ū©ęŁå¤öżźų½Ę ݦūß+ģÆĪõż¶Š¬ ōōŲõŚžżÅśŪęģŁ%&=ĻŪ = šÉā7Ś«ģŪ źłó÷Ńč ڽźķź½ųóšė ä Żš÷÷ėō  ·õōåō×÷ 2  šźųłū8éż#0-#ŽžŽńōß/ õ üš&żń#ņķęļ ĢõÄŲüÕīåą-ė:,šāŲ źē$×!šćüāłūū*6#ńÓöń öēćÖš Õ*’’Żģüéžķļłėäżå(÷ż ėāä4 ÷’÷Öń* žė’‚ҳ(Ų Ÿ°7EnE0æDÉļ 2  åß:ņCŌüė#ČÄüśpīļž€Ė2ų/B üYļ"ürĢų õļ3ÕqÅīϚÅļu@H×?ņQåóÕš49€Dš)ż©Śų9õÉŌ*K/ü&ėϐMnłÓÕ×-¾ę÷ąańoŻŃžžó=÷ņŁīś’ū÷kėķōj +! 1$0 ź# +‘&éų źī!ķŁśŪÕ^śś$EŅūÖā Õ śŹūĖįń  Ųää  ŪMüMßåōTŠįļ+ öėüēčü0ģ ąóAąłćūś«é ĪÕåś—·)õ 4 ęó&įå(óŪžßėč÷18 . źņó , Oń# óä4 ņņłļ żŅŻXüķ-÷śņäś ŃĶżūīóęšż3ß ŗõś ,%Éōō nū,ė!ź÷īśéŹõ ’ł’6/.õŽūŃļēžģ¤÷öģłEķ’łęüžŌ-¤!żö/ž öķ āō ü’0ū4Üłöšų’ēźāš÷üę Rŗįł%éņ+üÓń÷č ģ$öį;Ūņńę ū:9é$'ęųåķÓųŪäCĀŠń‹žÆīżµ`īŻų &øšž±)!92Åūįū(ĶPŹ’ŗ¹š€ŪÄ ųD'Kõ'ŽŪāäųč’ąßč”æÖ ćĮ$Łūø÷ć&܁€Kń±7Ÿž/ų9®Ń44š(Éų%łĶ~¢śĆ)1#0ņģŲāfź3 ±>ØHA+įX$T(īų|"tēµ3ąŽ*³å+~ dFųģ ļ<ż5ĪŻÓ&üUēčŻP`“Łż€ģķ-0Ač%ų,8Ö%?ž"ė żÓŃŃTż śań&č9ī/óś)ćX$ś¹ōäīÓČŽīå€!óźöš-$īI&õäę#īżšÖ/łė9:ėńö$5Ę?āóÜßŌ.ŻēūšüłņųļXņ ŠŌżŠńžó½õß ģõéś äŃ  ųóĘģ’Ī’õ Ž"šśõ¾į’"ßō+āåł šŠźĀ Ūęėņżķļöü Ró (3śäŁĮ÷÷żžüüÕźEėļŪööŹöÆüš Źń’5óģōõęüóéśäź ķ½=÷ Üšėų ö>ęėĻųķ łü(é*żėžæüü>ę×ē)šēöłŻē÷ųčŅ÷ō/&żńõšųłõś ā6 īüSłš:°ņŪ0óā ś÷üŌ ÖńÜ"öŪ"ÓōüųF÷ņ  (å ćé¹µ ųĶżžŹżžņµ!é ;ūķßĒė÷ķļģōžń'Ō"÷õīļł ē±ŻļõM„Üžįūīźų~ņóžĻ/÷óż½öÓ74ßį!ćÕ&a ėąÜč=Éź żźŹēåóęŻó1.÷ļŽÓÅūé#„Rņ7 "¾iŅäŪ_ö±ņ Ł/©ćæI %ßTĶB$ė ü ē°óWø1ļ"Ż‚ķé'mˆé ųŻžśŪó ! &ߏĪÜÜ'öüVēż·1×97ķ~)ū+ö8>å0ü.!Ź ŚźT 5Ę īų+ąåüŁéļńõ÷šÄ Ć %½P.7ąąOöŹÓĄšżžōšķųķĘŅ;5š/{Śń ēóBķėå­üŽŲę-Üąėźń .ę;÷śłżŅų ,/óü’ąÖ&Śü,„ņļž×ČłųLśīąąü’ įū źüóŚųčłÉ’¶īĀ ")ļįéŲ1ų+óüžžīā ÉīüŻłĻóžō’7Ūō łūųłļ’ Čžģņ#ćš Üūö 0ü$įėĻņżļå ōņ čķóģ õ Åüćļõ54łüŚ’čĢōéśźIųķ© čšś öķģ ŽōŚņŪćłłÜ÷Ž ŠŹÕéĪ1ó’ņ4śā 7üŅŚųäŅöź óū+ŌņQ Ż÷éŲÕźåŚūźśćö"ņóóęÉģżüčļéēóģłūāßüīę"’ ņéēōć’ęüĖźėįć źžÅčźįčķāU żłÖąÜĪžīųÄÕ¹é Ņó6 ęüķ.÷łż äż ÷+ ó0€!(Bš÷ KųėöŁÜżōēöś“Łśø?żĘüņęüēūūä0xĪéääźķčė-ī š¾ģ&š:"ī @é®":žē % Žó’Ūž $źŠöĄ+]-21Ų<Ė#&č ęį„Ż 3öWģ4ėņźüž+Ł0!!łGąö(āś*łŽĶōüBčØėź-N 6ä.,öāAéD4żÕŅČŪ2ēšøźæ×3Ü(Ŗ ÆõōżśŽļõžŠŌ ŁąĪ"ü$īŁ’ ęĻśūųGųõøīéīšéŁ6åŚ÷ ›+ō4ļī2ĀÕūÄT·2ųž’S šåłīīŻ%źÜöļ #&%)ķ!D ę&öéÜÓüŁ’ķ ūõĶ üęĪÓ Fś’ńēųżķżŻįėą-öÜõ ūżōė® č Ś€G’é øąąų"čėźČųū!ÅĢ čś ŲśėŻ ?ń.÷ń’Śß ×’łķ+ž&L5IĀĖ@ °ćęģķĖśäĻÖš’·ś ģčCłą ÷īć ōŌµ ūąŌ'¹"üńżG’Õ ßÄCKÓä’ņ čŹ,Aü’ ĄÓ2ėŽ,D;4 ö¾Ö0ļ+äčßį’$ž4ńÆ3#RāäėĻ łŻŽó’,ÅŅäŪ ņŌ ĘÜķäŗ5ęŻųM ŻéČ`¬Tųü ĶļŲöńįg,ś æ ķ5ÜŚóŲM"É8’ÄŻ. Äėģżīīū§ąż ąAų$(č.ĶöüŲčŠóź0ūīņ ēéģńµńļū÷äßżņ>ĒūŹķź1õżöć’0ūųźśšėńŁöč¼õņō)īųš žšGéõ^žĻüéķįžžõņŚ ļš ü  ó Łüżö,’ ģŪłüžēż÷÷ż öšą ōõ·ņąųÕö ć  žŽ”ńH“åėēŪŲå™"Zš‰Õč.)• ź¶ē%³ēó@ž!Š š:łŌB ¾Ś/.;ämļŚ8’j÷' ėĪłßø–åUóPŪ×¹!̽źQUī{žÓĪóą#ü Łā•įš,Īņßłū@ź>$ŽŁŽŁÓęĖżĻ$āåµµ€% å Ϭh™8ü ĀāDöͧ(ķ•čś#/Ńé"īeēūąīE łÕåøõŻžÜįEæīź)Cėäņņ’3š# Ź—ŻōŅī6&šÕ ŽUÜ£ļó' łš’ļšäė÷ūļ*±÷Öó>7JēG÷ś[ ± ķ±&0ŻüŽć&āć7 ’÷ļ#š×.”;öėž“TįėžĄLŃõāĮó%*÷ö2ŅĖÓO·Ņ Ūõåę,*ó1¶åōõ02JDü’×Ań’_éēĒ!ŪĀ-/)įķóö'Æ«ŖŁĘ īėõ=’ń !õ+ åŪų:ī¾’ŌüŪū įēöXźź"īé »ńźęļ ÷Éóžé ź ųāņ7ÄŲŌäŃéżÖóąļŹéüą¾ņļ#÷ūł% É žżźņę Ųų/ ūD÷õāģäé Ņ:²łŅ öŌż2ųļźņž įŪÜ’üčśü3 2÷ēéüŁźłģ ū ū(śöēŪå#O ō= ßćó=įļć깎ļźŲ(Ļ ķņįžäūüūÜĮžźéųüKü4øöŚšž-÷&Žų÷.µŠ Ń8 ęō 3įQėŁų Ó¶ õ Wéŗ+ėĘż’é. ĆĪ öŁ2ןīžųńöżĄ ķóćæņģäł-źłįĢ#³ ōķįüēö+øźėļå÷čęĻMž;óÆģņ$įź ō4äŪ)ņąņłśŠ$ąń!šŅ7Ē2/āųą’)ū_’é ŚCņģģāĖ*ļ½ę"öĘ>Ó²łļżŠōæČōłJ ų4÷ķäć¦+ęģ)ōõžäąé%üŁń  üō žģń7é%šģļæÜ1±üāŽ`žÖķŽČóõņšØö&“ŅåžõūŹįš ģ3!āN5-Ł* į' 86ć Ś’<'ļÜčō 'óMó1ķ Åäśęņó(łń$óé ėūčģ ż 2 ó÷ ŲęūņóŪļēūõ ī™ ķ ĢźėčLķąšŌļöŽöéŚŃ ä,'éō’"Fö)’>żüūņ ģū%ė&įęÕōīū÷öī÷ūž½ūš- ޳’¼šūė×/ īłžļöęõłĪźģó é5żķż7ńō’āMū ōźį2 ÜŻĻźśüšÓŠ5šķčśüżõŻÕõń żõö  łóü ÷ū!:Œü Õ!ģļ!)ł)īżó Ūåńö ńõµ ÷’īī[ųėåņćłīĖż öFń Ü & !šöżņ , ųę ų’ōŚŃščźģ²!ŃšKŠžnēŁü  ń éŅéķßłšI(ćżöŁ !ęū÷ö*$÷#āšBī Ó& łóč#"*Dõ$ćŃ1J70ÅóĻ÷å-ī!*åŠ.äģBt šń’ķ;źŪłēōéśõģķĢņO8 ŅŌ>¬÷Q“Ė;»Ģ÷Śī÷,- „ö īÉ7žŌČ ļ.ąöśÜķžÜÅ&ōŠ Yłū,CĀģ4©Ī ž øćÓĄ#÷%&ņ§š ü^čóōŲ'mĪĒāč¹ŚŲļöō& ²ß?p³R§ó żŌöŪćåŲ Ć.!Ć.¾-öC&ļĻ' Õ #Ū÷¹ą(ō§ Ķ Ż9#ó°@GŃōģżÖ²īĒESāŲ{B+Ō ;52Ū4ĖĒ"ź#0āåRņ1Ū ģķżāłåļśāb )ÄJ ™½ļųŁ,ŠåŁ"öūóDõżżą’ö)śüń&÷ēįńēļ ×)å(ķł÷åū&ž’  ūļņŻ āśžł÷õĶęuėū ēšĻ•ūä Ęģ ’9ēķłń Źóõü÷/ü’!Ļ’õķśöłżōü÷ćč ćķŻ0ńž(żäżÕķīž īöģ äŁ ņĮ Łżš<āÕžžH ūēĄĀ#Ļ ĪųŃć žÕ÷üĄ÷’.šĖžõ ōń¾żėńö ī(,żįųžłłĖüį šėųįĻģõė(õ’ź €éżē*#āęŻĻĶéŌ,åõ śļ#é:2åŃŁśūłņ ĪņŹ’ąÜ’Ņž.=Ų×÷ĒE ćģöšŚ!ŌŠöGĶŅä;ö„õļįÉE é4āöżŪį&'8-åį,ž ņ ń ’ųäĘź’ųńą$ū’(ģ’źźūöźįüīź ćģć'("ļ <üīóžéšŪ ļćŽ ķė!ķģ īڵńéū ńĶČŚ/óźĶöHšąßż ķīkE$źõīėļļŹõŗ’!é÷ķ É/ĒóėŻŁęęĮķķ ķĖįčąłö"łšž÷õ äŪōš(ėóžØÜ" ī żąüž(÷äīDĄ!åźü ę2ā šķāū&ļ(éōŃüīķń!€ģ’ ł )ó6ŲĘ×ńÆō’Ż1#Ć0Žü%1ė ēü÷į ężöąīūCõļū žż óļf’óš:ņ„Éęļ÷ö ćž ēŹT'óšČ*Ž ÷ńāųē ēż÷× õņIŠ”ģė÷*čęĢķ*ÜŻ<>ė üČ÷Ęń Žēsł=&öõįü=Eäčż-'Yķ )÷īõīö7 ė’źżō=!'*ķĖų)ż=äŠõšō īłÖż¾äĖ) ōćķ Óäõēųéß é# ä !ž0čłż$ū×ćģ(óė āæźÜų ĶźaÅ2Ōóü Éü ?Ņ’AėŲ÷żöļē:§Ņ "D*Ģ0­Ķ2Č /3#š DŚYšŌņŃ9ßę^öżżī!×8*AŻ""¼"ō* 9Ė,€äųŠĀ³ź;ęóē4ōń y]Ķ>”Ų ÅX:裮„Óõ:ŖMņåłÖś%ęō1(žØęŃ#)ķ6Ó>Ł <( żé&‘ ößGīĄóÓ &!įßņ;'2ż (ŃÄÖģH+/å4čóž üž !ĻÓ Č1’źņļüõė#  żÖĶéšĖ(ę Üõ(ąõń8 ŅķŚż ō óūńÜEåčūšÆū!ī’ķ,͹æ&ż "āĒō Ś".ņõ.ł öķŌŪśūóóūäņ(=Ž 6åóō4Ūž # ęłóą×ń×&ą2ęņļļ*Ų!żāŪ÷ ééŌŪ’&å'4ü’'ÜšÉn ļ ę Ż· 6Ü9 õńųBü !ŌÖßņ'łĻĶ/¼ć’HģR$ī(.ą÷ļ ŻĶžÖīG°“’¼žĶ6żö@ (ŻōŽä1ģĢŗ5łōåč ēĮüųģģō÷ ģŻŪ Žč%ķćążūćóöõŅč÷ģźōņļż9  ’ 7żŪžÜü%ę/éū óĆ ņšä$åü Ż +ōĻńō ÷, ź4žŻųōö Ęõņ÷÷ ś# õĀ Śö ³ ūč)6 \XĶ)÷ŲäõĘóĢīčņFĪ÷Ūżłć’ŻģPÓŪŻ1žõļ õŌ+ö ¶éčĮG%ąģš’ ām õé#óūįŚž ÖīĶ0!·éßŁŁ š“Üżńņ5:OģĪŗjßŪTtrŻ!7 Ķ!Š÷łīõ )óBŲųč-ņßāĀ÷ėüź&ģüĻŲüõØ«ŻõõźŪ%æ"÷ 3' ö’øĒķŁĘ¼Õä ’įµ1śśŽņ)ŽĢž§õśæM¼^ł0Ś ćĘ ¶ ģß&$ł9’õčŅ(āŌīŹóĻ ÕŽśĒĖō !ż®5ļĖ(’ ’Ė@żóīś óų ž ö īüŪ’ņāņ0#łšżöåī ’ Ųįķ× ūåĶ$3÷õźśĘļĆ-īėļÖ õ ü%ƽś óåõäń!ü+ń!ZŌń*ÉłŃ Ś÷H ńßżģ )éö Óäē ģ€Ķ ōÕöīęäšü$ßī ź/ߏõżäżĒOą2ēż(3ūĒ ūōļńł H’ł% Ģōōó’Sßą ®4ĪöūÕŁńåŚņč[Ź*(ŃÜćž Cė h  ģŚį÷ń<źžŁõōżäłÖįō  UŁč*ćų-4ļ żÄŁžüó’śąõ(Ś’é)öė ąę0ÖéņėŪ': ’ģÓBė"$źķčÖ ģķÓ(:Žó#ęļóü/ łć"ķīūū"­ōī#ū;ūńóųåõłļ1ņé" ģķž üō śåņŪüēęņāūö ēõó ź:üł8óÕ@ōē ūśéÖšėćŽäę īś Nķųč łO µõūąč 'ų"äóšßįóģņąż ś ąßüóŅėśŻö!é ū ć+šīųåųŹćŽ! ņ ÕĀÉ’ōüłĢā’ŻŌßöūōū’üėėłķŁ÷Ķ -  ęōEž ó)öÓłž)żąėŁšąņżĄ õōēśģ’čž õ ą Ōž ģē§#'Ö½ ēśÅ ī/)ż*żčĢė2ą÷ōč*ć  šé.о żčēöŚ, Źžś€Åųō)ūݾļĀ× ę ĖųÜžšč ;ל$Ä’ūćļ ī-łõēåóóśśņŠÓÓŻÜś=ū ōżįöļŲżšķ1Ō8õŽżėüśņģõé "üŪū  öōééåń ÷ļŲł÷Ų óńšå üņ‚žźųķü żõŪōšöųŽ ų÷÷  čóöūśųų įóżšõųųöķü! č&šņ łųų ū żōļķ÷÷ź čęä%?ßęģęź ėZ1fC,™ ŃŲūėĢöĢć"ü0ķ×, 3b+"-āńŹŚōÜ; ģ1łń(ÕžžĖɀ ŚčöOē 1 ł"ņ„Š&ģÖĻ ŠśūŻEŖģ;Ē >ęÓąū+%õƒż ['żś3żč7ųĘ ļÄė"üäöąŻ5üćĒŻ,&ęģž]÷ęäč&ęņ łŚģł&įßééĪōłųą×źķ/ įō åæ’ŪŹ ō%.śõž ü żś$āüõóąčä łąā’õć,Ė ż?üéņŽé÷üķ’äõōęćī"J’ü*śĀā"Żē\!’įōźßņ’Ł»čž÷ņķėGōę1Ņłõļųųņõ÷%õ ūžž(Ųóź’éōźī(%ųńäéÓē'÷’ ąąüōčūż 4Śłųżžļ’ņŹśłÅźŁĪ! ā Šīźń暀÷’čŪ’=šÖōAöņūö?żĢõ ’ęš )×õ5÷ż žÉž÷čŻōß’śšų¼ķżūą ōōõņé.’ū ŪżķīõņėRłōķÜ!ųķ¤šż śšžŪɱóõ Ü/ļߎ'üäĒēꞎś“śHõöź#ä÷śż·éŚł ńģĶ ö ’üųņ 1ļģŽæŻ ¼ #ś ąJĖż& ńźč;ēŠćśź ūūą"įé"֍6āÓ®üå ×ōļüŁ’ģ ’žįš)’žūüōGāżīCņ÷õ 03ļäīĒįė ūł4łŅÜ’$#"óóüŪąŻž' ×$Ŗą;6.ėFē!ģī9÷ ųŽ $ Õ+Üļ7Ō īśö!éū4Õņ1šāś#Ņ óüÖ ōõ÷ÉłBüå$ģ6>÷ėÉß5 ’-żężŁłė68ĢÕļ÷ēč ģžōż ĒÜżFäĆéņņ* Č0ąćžųöa )źčä-%Ę÷äŽÆ ńÜŚģö&ńŁäĀęķźōµ6懲īėC~:*g7łšQ0¢“ļ,ÉxŲł×ĻT9 ü’č$įÜ1±õōŠ2Č+ķBä:ę¶ė=ęłömŁ=“¦*NŃ*”ļ{£źĢõ+ĄŅĆ*'ŃÅ'AµĢ Üņļø*ĒŽļųö÷y’ü²×JDĘė ąŲY'€÷¦”ż(;Ķ@=ģģÖ+"õēō&1˜/ĪFēčįūÜč ńÕ žļÜīłŲŚ71žģž)ß źŠ÷„Ū @Ų½ķĢ ź ĶøéIŻ ó,ēļėŽ)äÜķöŻö4ēļ#0ąJÄ Żś&ēžŅąõBń6ńH&&żńDöĶå3īŸō«ø!÷öŽŠæņK÷PńęĶÄŃģąčö÷ń Śų ÅßūńōŅī ķéņ+ų2Ėš½šń-ķźāöō÷$żÓ! Õś!æ - īņŁČ)’  6ĻŁü ńźóļ9üł ł ģüķŻźł(ęūŪą õż (óך Ł ļ> & ’ķŅłü¬Ēē7-īõ*ųųżśü"ž)»ół ņ žöüZū Ųżą źÕčłļ¶šLķś’÷żh ņ*ń ŅR $ł} ī ū ņ Źļ ņ åļ"č#ē0 ų1"żåäóüłęōIßŃęõ÷-#ńdĻŽń żķ"ä×Rī )Ą’å.ļŻ×6ķłöļõŲŲöūŪ)ō (÷ײē%’óó āŚĶū*łŲ'óŚ–\ĢÉé_šŠī%Ļś$ø&ž€1ō Üų*ņķłķ ’3Üś $šāÕ&ü!Ū÷ś+2;éÜųūĆ÷ėīĖåÜā³0ĶŅ4ĮŽę³#CKüąÅķĀėń޶/$Č’Ļéūś»%°ūŅęķ ’»ņō÷įśļļ ÜćĄŃū÷M öüóÕ"ž&+Fī* ßFĘžü0ō1 Ģ ä !÷ļ’åNģėW #“‚0WĖŅXķÕåĢūģńŃVÅūŁ;Ö%öšźśLā HłāGźÖ*Īš ĒåĶõżH ō÷łČķž(/īā7$ņ¹ņBļź×Z[é4 ī3 ʵŲĻ ( ÷%2ōR%’ōņé ūó'÷© éŒ3źėū“ųčó õõą !)ü=ķ÷ż±å ŲēGė÷žĮšŌ Żöžįš<%ģÜó’“õśĶšó!¼­Šõö0Ń żśūłŅöōČųßÜB*üō÷łÕź’ŲÄ"śŪāōJ Ķ9ēŲ2üōę!%ā ōÓų$Ņ@óō/ö4Żū ŌäŌ6öéĘǾŅéÕC ĪČž^Śżńąęō)ͬ0žõć$÷’āÖ䌞:āÅōū Õ¼Ņł+Źæążķ+äł)ųčGÜ! Ę-4åæ÷ BŻŌŃõżž ā"ą#õÄšžŁüßFæę)ß Óę·ėćą¶#īŪĻ+ń6š’ūż š:Ū+ΰÜ äåßŅõF&''ėé °ėėż )ņūźż  ł!üŽū0¼Éņ  éģÜßćóšō ÕņśĢä ÷ óīę Ņ/ ×īų,ų÷. ŚśŻü*ņśžčłū"śėüP ū(÷.ž,!½€Ūż’Šßżćų ó&’ōĮõå ń53ūö ó+"ŅŁåč Śńü-+ŲßćŽ4óū žż@Ö ’õųü!’ųÕīżņųō"ī’€ūÓš 0äöž *ņūżŌžō@źł&ż×šų īööŒż ŽżŅżŅģé9 łą’ßõ’āłå 龔ōōüŁ „’ ś#ņōŒśĻļŲ Ż ļŻ÷ół?Fį’éłś"üüÜģ = ;÷źÕüÖż Śų ÅEõ$’ÜéżćāŻćļ÷õéńŽżéūłś üĢ ķģōūńóž õōĻŁćż 9żåųĻōŻš š,õ '$ńéŽ ū& õę ±īīóžéļń   żū žėöē÷ ō!ńž'šųžŖ0"ļń)ļūć÷õō üó ģõć šūÖD÷ųģ ģ×üūū= õļ&óžåą’óŠĀśīäėåń Ń4ļščķ2Üļóńł.#ųåī’-ūLąß3R’÷! Ēā Õõ-ćųüżīÓāļń-€ō÷€ā,Õ2Ż×ÉŻš źĶß ’ō,;ĄŠ öōČłE ø7 EöI- BÓśāģHöę ōŁ Ļąčó 2Ż"4Ķņ -$Óā÷óT ōźšńX×ļ2ųé÷ źŚ’1äŻćņ)šķ ūīĪźē żł-)$ł/ åūžģģö ūßģŌ ģūēķģļŽžÅō’ $'ż’łÜ ś%ÕšŁųĪ?0÷ļ /&ę†-åņžöź’Ōēķńū’ įŚ’ óŲųžü%ųŚóŚłś,ūŪėó$é=Õčņ÷Śóń²Ŗ"ļŖżš³Õ8ĶXÜ0śčŚKH<3Ļż ¢ÉŻĮĶīϟ–Ņ·Ģ«æ‘ūā0ģ !ń]ōźįåF@DĆŽīŃö%N/@ś>~ScžūνÓņ° ńįĘÖ~WķéŪ3KĶū×ÜfŠFŲµĢļł1öžŪń²*źćLń-÷īŅæöęX öüž“ĄR0ūé ¶"%õąū·[C>ŃŚyīåӈõŸ3ēt½čć īĮć’ ’ ż:õ#æżįūü÷äįöż ä*ļ¾į šśö żżŁ ūčõš0ŁŪüõōųčüāż#żņóōńļ÷Õčņę%ė  łõ&1Ōōżłģū īķ5ēüń!’?Ö ōóōō!šõ;%Dåõāś?ŲąOõ; Ž 'łÜ÷!ņ ’ųļź# õä$ å!»Ü ģäīļļõö õ żīłę ŽļÕ ²õī 1ąĀčžņūõķ÷īū /üżöų źŚ  ś%š łśūüłģśŅ÷öųėūī čūŻėą źĪü-åŻżī€šģę żł,įąĖżźżĒķ żłż ļ  čķšöü éüģ Ešą Ö ąäŻ čėŲ ōżōśšėųēĆėß+āõöłÄéž ęžęż×ū Ļ%õ÷łų łõ:įō īżõ ńóś’łź?éæž żą šóÕę1ēź+ēŚ$ö öóĄ4 ü + ŻĢ"üģ­żłńŚūßųĶä"éšłó,óšŽÜHŽÖņóš õ>õ³ģ<Öäł ęŻēś*!"’Ó:ó1ĀÕ <ĢŁ(ä5éńķž*łų¾×Ó/ó #š’ųńCöįžÖM’ŁīŚBūÓåģ5  ķß’²Āņ@"Öä&’ź!(āš¹ęėÄņģļÉģ’Ńó-ź5ķą%'šļłž…-7ĆŽśļ ķłEäžōŁóń6 Łėõß 'üėāÜ łGü"ų ÓļÕßö4מ*óŪųŠī-ü$żåę åū  (ņŻå®ŻÕģš<ö’ķĻp ņž÷é)÷)ūēéčķśō÷ńųōēžūń2īų ’ģ  żŌB ó%!Ą ćć ÖóĮ!"ųīŠ ėó »nōšēßAõ( įßŪńå7Ēä- šKńĢ ą)ŌÓėūžõ +×GßēŽ’ ?’ģķ7čķĻ’éłüń ÷  3śßāōŪ0ķÅ ōōė%¶āåąņ ’żųīą"ö %ßõ²ŪųųųłŪß øÓ(ń€ ółŅõżńć’ŪÜč5žų„üÄžäŲüż’ģ 4Ō ōļ ōŪ!čļčńö•,šūš ūžüŃżćś ó" ÷ōÜ÷ ć2%ŌÖåž²óā÷W źķĀś āęŃėł  ļ-ūüž"į÷ī8ŅÖųģų ėÕ’ ’ęóüśš(’#ė'šė7’ łė5ų åüå’žłīģšżž Łį1śž’įś .öóįņü ķ  ,éļšļččśšß Ü’żł« ōżōē")é÷®óōų0Ó!ü& ēŚółžŅéóśļ// ,źŅ ćųšśō ķ  ųłīąž÷ņóŻõ-öź÷¼ķ?Gķ ļõāü ō łńŚ ŽŚėńłÕÕ+žōźóל®ł!ł"ćų šņ’ āĻ÷żßļµČź!Śå÷6ŹÖķŚ ĻCā"ó÷šĖģ<×#č’/£.Óõåąńō ōéżģū # ’ėņķ$ūśīŃśŃįų õ2Ś=ē!ž=7ųų źõą žūō’ųāłńŅė*ßĶ%ć× )åóäó9õ’Ųō įīūīÜžł$×2’"ół¾ķųō"ńėó,Ūéļęöč!śņśōęßņżļ"Żļ Q÷źńĪ-.=Všś#ž"&ä²ņžy1Ö ó"īśōŽłŁüö å ś ģ)ęßÅōųóģM7ŹčžėéÜņ+ūō 5żõļ łźŁū\2Ōōł śń'Ļ3ūųū ż’æų,åöŽ ’īęõü& ōōėįź  ąćż 3ģłóČšĮļØÕåģ ć+ä ķģ¹*å1ąå/ūšņ(ņĒķŹ1õ óźŽ8č*Ż &+łóßö +ń.3ōāŪųķčŽĪ)>ėćō4ūń „ŃŌō%*ęĻ÷ćō 0 ō!Ł łųķü+ęųłś÷ =+ ÷ ś ūÕõ’  ķ莞’ é Üüųåč÷ö +'ųī÷ÅÓ źžöļó žü’ģńž%€ ö ņńėąūįŁ éī÷ōüłĢ ģżžŽüčēśū»õäžę;,öōüōā€üÕ’#Ņ ųžććżłüŽųń-żś(ųć’QōŠ&_źųs€ØÉ83Xē ’} ó-ö-¹Ł Ó¢ ńJ³kŁģŗż>† ŽšÕõ ~čų ĘÉ,-č¶%ņD öč뀙ŹÅåöüē6ąZh*źŪŁäšåĀ  B¹€ŗróŸšĶÓŃ1ŽĮ6×ߎ[F>:’$×ģvOļĪāŌ.ļ 8üRk1Sšå›€Öhķ é#šć-’ŁļŁ+īŸ÷ū’’ļśńżĮéė3ļ€źŽń ńüŃü¾ųęż» ķżcų ŌūŲüž(īż×łšē  ė ūĮļčņņėśēķļ ńūčÜ ēžūö ż×é#ū ó%ž ņķåżŽ „ųõōż ōśō÷õźā¶ čó)óžł żźń;óźųņ’ņšöžēūםĘBž - ęSÜMå*įöśĒ÷ĆģåHłč ŗęī āšÅß $ ūõ÷ō1įą• ųķ’ćŅśńŌž!64ųł+€łŅŽŅóõäń ’;8ū@ ėüÉśõų"ż*$Æę 4&ÖóÖķæ$Ś:ÓĢ÷ż±żńėŪ’"ā" ā¾  (’ųÉ Ē ©Ńž»õ-@ĀDšļł éŲŠóėōä Ūń$ŽŽąóū5īņž óįųłę $Ųóę’L/ģöČéńłįŻł *ļōņÄ Śėļūīļ łłŁåōģųś öäłžŚ žłńŃšłRžä÷öüńšńZ ź ’įōźśōĖ ÷÷÷.Üčš ü å'd#śöžõ 'üŚź$ūįõ öčü" žłąŌŁåŻĮÜä7žŲGŌō+’õI<į%ń÷ųē ÕÆ+‘'6Ž ł%cęńįA)*÷įżķO0¾@žżą*0”ŽÉÜõ,»śĀ89Ł@į6ķ4@ē ­µēł"Å 6ö ēÅŪ ÷žó Ś#ų2Ųńōóõ›Ō¼žķąaę_Hē4įęą×ŲõŌ**ļ%šĻżė:źń#ōŲ&?Ś%°:ńõåóßśūöõōłõ żžļźżģżļ*ų.ü’üŌņ  õ'Õż$C-öžŪń ³-ßžģļłäõń÷;ķģłż÷Īåżņ!  -õźå'ļ’*ū ŲĒłķÜõ6’śķ«ē'ÕŲŽ$$ Ł"Żņמāņł -žē ÷ łéāö(Õ%ōāśū÷Žēį’īł÷÷öŪćõéšśšńš ÖćŠōöĪķĄŽ ķō*Uż( łņīāåųŪõoļ %ĖŲļķ Żģź żēOéģĘ,Ķśķņ$.Éčšōz!ČžŲūč×ņĒ÷ū3ššóų4Ō÷Éå ’ˆŻē ųųžõ’ŽęüŃ )ļ 1 Ņć Ü"8ßÉ'9%ņ ē'ķśūŲŅŽż,Iźģ%)ėöž÷!ūēņēŹšģ. äčF ó ÷ēė  ķ0ó/ 'šÖą, !ņó*2čųŪļüēčģū×÷ßļĀ.õŽ’łÅū+ķ%ż;ŌŌķĶķ'?ąćé.ö<Ķš ! ģļ ł6ŽžÜ éķ4 ż’ķīūžĄ, @Éå#Õųķ÷*č+/ōżD% āé%öš2)įóū3׳’ü:čōś× )ķ)ģל ū7ōī śąōę'ņ ź 1śēżÜÖō "’߯Ūå žųģ ĪŹŚLš%÷ õōAōėū²>śųÖņRįś ēĢčłłŁ&įćž"ų!ōąūåēē ŌšGń& ę4Ķé'Ńü öŻē(ō ńęģō43šĢ ÷ļöłŽįīķŅń2žł÷žBśéś > öķß@/öūŅ Ę P80ŁŻ'÷Ūų ŠlžūīōģżéīÄõöżŃž(īŃÖ Ģų4ó ń÷;§ŠęŚå#ģž.ķ ėėī I"ļ)ż , ų ŃšDHėŠłįż>ąžźēõĖŃ&äģä'Ņųš¾ļ/ óģ½āG ąģ-.ł×äŌž žżūQõś Ż õįī7Ūģį*<1čųö ųņļ*åź(Bųčō8ßīżüūļż ÷óźźü=!ē ł żįžłZö ä[į#īų’åŽśų åõüŹż’ņן ÷šĆ śė ķżö)’žÕ 8€ é ×RōŲžŚžś ņś÷åć ņóĪę ü į# āóéēźūš # ÷åD ė÷*óE#žŽźńźą#ī% 3µśÉųėä!ųŪżõ"ūšņ 6ćżļ’ųō’öņ ņėņ!ēäėå ŠŽü éÅćüųćó+ļż’XöžčžīžļļņåöżģćēĮ Õņ ü,ó üģŲóąģė7ĖčŅžōźEßś(÷ ė Ōłćģī ūæ=3ńÄõ/śį * 'žūī¾^ķäą)ę žūįō–!ēŪāļĶē$õ$åöā‘öēõų!ąś÷śņņžžźūŪŠéžäć üß ļ +-ß īŻźŻź"Ļēśčßšļ ųąž& äęüß+ņüļŪF Īś4ĮĶü"īóļō"  $E9Ž õRŪĢ,&čžĢ ū8 Īī4ģüļóē÷ä’Ļūį5 1čż4Cā īä.ŌųśĀ+ŃėŲņ’ž’ "%ņÓšńļ’÷īņ!õöīöųōģō ą5ģ÷ % īé&å Żō÷ļķ÷!æūļ׿ųõē Óō ēą'ē=÷ī½ Žėėė""ū*žļéӌ(ų4ćŅÓÖś÷&ėųŗ ŪJńņBįāįų÷ōńžūė÷üņżęžł ę Ļ Ōźņż5%ųīēōõ ųįģß ģü ŻēŹū éżß š40śąūżōū üü »ōóūą ŻDēźģž#ٱł9ē ’ Ż) Č Š  ļ÷żŻņåųūšĀ& Éģ£ßģóÖöu÷ģ  §ų’ ż ūż!Ļ÷žš'ńāł8’Ś)Ń·2)÷0 ķßŖėļ§  ī:õ#łõ9 śTēžß&Ź D,ē );Ķö÷ ®Ēī!$ 1ōŗ.ÜßÅāĆčŲ$å4"A $ņ5Åó Ķ-÷2*Õöä7+żĶņ ĀgŽDąźųķü’&!źBÉ Ļ*ś€ł ššģ;īņ ;õ)łė ņ4ūÓņ÷ ų ķłÄė ßÕęńäöżž0öēķ.õšš ł°ń ņ Fż ųį÷āįü.’ ęõūńŌ  ī’ūńōęā ," "õīīÅū  "įóč ķüóœóųżģņłžäź üžŁõ,’ś "ē!ūśėŁõ±ĪźāĖ$źŪų˜Üų³×'śį- &ńŽĻ „ń÷źęęų õ’üāī ėĢųōäņźI{Ę ÕśłŅŪÜī\ęń:`D’·ĀāęĶĪę&ŁĻ›źŚ*Š ]ŻßżÅŠ#ęśéäņ$ķI7ß»4čāķü7VżJEŁļ 0ö#4 ņ :ē)éßųš ÷įŅŗEø€ čĶĖ t Ēq1µ5žä.Ņ—/öģ Ł!Ī.üŌ>Śüü(8*¹<ÜŲŽŖĆń8*üļA'!!łć«,÷JČ$Ųõ $łķžžķļ;óŚ!č:XĢĈŃå*sń ¦ÄļÜšŹŪ7ę)I,¦ äńŃö’ü¶Ģ ķć3EńIī95łŽMŒ ųčŠ å×č’.'Ė%’õąŠ¼ŠóUŲų?śč°>ńNļŻ’±GÕķ˜Słč EķHū×["õ’$š8¤śßčĮćZūßeģŪ¾NYü żž×ž¼,'‹č9 ÷FćŠ;²(ūīėą4½óß+&NīĻŚ"Ņ0źš4ĘĢ!ļ-ć-čźõčå 'öą ’õŲĖōĢśÜöćėīņō£ ū1!ö§Ö$µł’ūüżāÆ'ß¾‚€÷č’&õĪĪ ¼›«'7ü¼8"Ń9 ÉŽ€ŽÆāŽÄ,;¾–GÕĖūŚü:’å;4\ŪAĶKõÕÓģŠšZłć0M‰ŖźK# Žš øē żōQļŹśÕģŚžż,—+āõōéŻ łłžšēś śųīźĄ§ö Ś$#.čć÷īŪóźõ#ģžÕÕģGóõŻŌĻ2āB¹öū@ !ķ Ņ÷’ ³¼Šóā< ķŪś).óąö+éųķ«ķżųāī# 3 ų.łĻśīB* ļ=Ł6(Ē+ !ój€ü 6Ł į ņł ןó ŌŠā=ÜŅĻ®LźūLą ’÷  °€Ą é ĪCōć%ā(÷)ķŪū Ąü(Äįx4ćüŲTšķŚŹœYS’5ćś ’čńīŲ€nĢÕ/ž”±ķÓ’Šājė SÖ)š¶ŹöżEģüź× ?€ņņØćčÉĄÉß+ß,<ßQ7„/å'”üžåNÅČ(żČ÷ öč7ęÜöćęŻČ:éŚå-żļåā ģÉöō ż ś’ńłłõ“ī óéņžéüś ßūöŽ ē#öūü1  üß ķńĪżņ÷ųųą<## üš’Üåšąä ēėüļ3ū’šń !Tąćėü śŃ ļłēņ ęź źłź’ēų Āüś!$óõņąćöų,ģ Ö ōPåü ęī   łžųņSńōńžå-ó’Óõīöóčģ (źė$ū!ł÷äåä0ņęėżüū Īżü õü ż#ųŪķžĢčõņńõĒšÖżó öłųéčųGäśžĶś’ŻĢźć ļś źü ś ž÷ éī+:ģ ł  óįžż @ó÷öåö ēżłģżłīįņ7’!ōöūėńżā Ī’ Čā#ōņ£ųģÖż Ä 'Ō»öóüó‹<ÖčĒ2ļ9 ģü$’ ź Žüö&éŪļ¹ŲčŽźŻ ßź) āķö:’ōēīńČ(#Ļęžįę (ółźłü äŗ5īŲšį"žėÖŌī²ä ĶüÅģ ü ½88ļśīä>ļõęųÕą žń Ķüķ:čīīŲü’žöģķ#śźūÜ óśä ’Ų8ńōÓ łū)ž3žł2æ#ōéŽ7ź ņš"ńÕó`ŅRĆčéšéDßÓ(ž)ęį(ų! ņŠ9-ńŽB&% Č+Ķ×õłóó- ÷ńß4ż&b$ł$=*E­īś"āżčÖŪųĄŚ½!AŻ-# üČē%¶0įžĄė īū æéŚ ¼ēśµ#ōŽžš &Ć×öŻć ść FÖ-Å%ģ<ą•ź Óš÷ āė$0žåž RE#“2ūśŠŪŻąóö ųśäķåŁōąP /ķÜ=Š8šģļ*Żś óāó"9ŚČ-å Ćķ# ć1ż)ėå6ńųõ÷ņ 8õéēī’,%®žŪüųļ%ĆźEļäųūēŪžśŻ÷ģżģčųźģ2ų2āōęłó ÷šAųįķ (üäåõ#šåćāå)÷ł-īµō óÕģūżCüü>üŽźÜākäč0Ōįå ā7ŸŚņī’ ųā<öGĘž żŚÕŽĮµłš ŹĖ<‰ę##’ęÖšõ:ų Ū$ģ,@į*ėü*ģķ6ó’Džūä.Ż@ žóŽ7éįŖź'- (żśóź÷łšŽļ ćųĪōóöń ½šŽ ėUņõč×E$ž%ż¹ė £ŁC&G'ļšųśš6ćśöÓō߅Ö+©ė²—<²HÖÄķźõ ?+¾ĪäŅō*51ó>*ę'ń}Ė€’֓aņµŁÜD2Żł¹ĒŲßT{Ėך2ä~ļŠłūēĆĮ½.ó?Ó×6ü?Z©Č ½;$C0Ūå¹2·RļFö/€Ŗ+5@ąŠHę¬\Ųł É ā;-€ö¬¤ ćĻoÉM"FŃ$£ōŽC¾ÉĢĪĻ]«³ēŠķ ŃČ1ģ”ōüōÕ± ßŌżų\õÓßĖōõģō÷’õ&Žæ-))ēŪōņ([ #ó”Qż. ńėēģń€A&&’ō7½ Ü75E žõŪ åčäŀnŚ$łģķėĪ3öõ,B-õī:čÓĪõą"ēźõųBāųłķ¼łÓP,Šķīņüß=-:’1 =\ īńą -õčīJFó Ī Üö@åóįń łĖ ųėķüż šśüB’:śó įū®$łøńł"ī"¦ńZ žģō* óš>Łß&ć åņŅ&$ż$*"% ņūęǶžóõśŅó!ö%é,ąż¼/÷ Źśņń÷ąUĮū.(ļ×8ńłĆņŻłŁŻūųGŅ!Ń ō ė ļ + æų(’õ¹ä½Źó'ķ÷Ł’)&’üó8ģ»1Čšśłó!<Ś ×3Eżńź × *+ā¦ī$śŲń 5Ż ēĮōŻÉīõšīEęóśĖęģŌ%#ęų*&Ų6ņ%ėņ åõģŖÕ üÅHśĪŻ% ²8 Įä7żŪVčŁfŲG¾HĆśķóLć&Ą Ėģ&½ß$šäęźŅŌõŪŌ!ܤźųūņŽš’ŚźĖńńSŽį(¾ŌŽ Ņżž¬)4Xó,%žŖ°Õæ26Õ'A $0.ŗŽć§żŹš!½!Ė žźR _å6īä '!ä Šńęh+ļ8ėxæ’SÜśł0õ:ßžčś ęaģ)śĄźā*5Š‘ļ:Ī"'ŹäŅ’ėŅŁĒUų.nūūJļ:ōöņ;»ŁOī( ųŅý×ļ ōĢ,2ń50ģåĆōąOžüš ›$īżņÜ/6āā øųÕÄŁńķū#ā€ōõč īLč:üčĘėśŪ ¹ēāŲ ėóęćśĻ ś(:ÖT÷÷żŽ !%żļ ūÜ>ÜM»$ēl¾ńąņŪ… Żłģ;ŖŁ ć©+e ŪĢcģĶ’ōĖ&€śźłńųR  ż¾æāēą*MüÖųŻļ”¹ę,Åž/ŅĀę'šøåż*#*B+ü×å"ģ!I-<1ż DžéėóūĶäōžĀłõ ēų%Ń!ūß8ų Ž?Žņłżāūģ ō; /’āķŪŪ$õééüeüõ$Ū%ßźūū°&źŽ ķŹä’ģōīōäü įź ’4PīĶ #źõöĒĶ,.HüHéńóĒļM"ģ÷šŲķ#&#Śšā÷ó #ł č" '€Ńł0åū öńģ$÷hń’ äńā1½'’ Oś %īüżČÜńžGśÓ õĻF'ģŻÓļš"õŗē°ō.Ņ ō ŁžņŁėÄń$ā żś÷Łēēß- ķ).õż åśū ’ć 1ģó÷ś łųÉXóöųķąņļéżīģ÷Āä č žßģķ ē,äź! į šÖĪĖūõōķõ ųąćÓ#÷Ž!’»įÕē öJń '!ūäõśóÉę õ%ūéęāņż’ś÷ę žśņ Żßļō’čłéšūņūń żüé!’ į ž!!ķćśčųųéńöå 2ō-ģņłż÷ńčšļ’ūžŃńń¶ą ņįūŹŁęłE Öł¹3$ł Õęūó€ćžšīźÜEųęžÜ’Žņ,ōöżč’Ōńō’ åųīžöģ1ņļ÷ģßõ čų ņ ’éūżūńŽåöōļś÷÷óżŽō’ ÷õžōń īąīõ)óóöźāć īļņīó óō’žšßū’ž÷ų ū ’ę Ō,ū īīż żŪ'į ųś ó€ł ōśćź/żļś#ųóžśū ö/(źŠóś öĶŻ &ćēęą÷ļżņō ńśōą õūžńųėō" śķł ååļ ’ūFč &$÷(÷+2ōēņī"÷ēšś śōé!ųūČ ą"õŅļ’Žź ü ļźę šćń’ź õļóś÷ ńŻŻģüź  ’Łõ3ūŃś ē>éłõöņöń÷õł%öśśü½ż0F¤ + ūą’(źlŠ)Cł 8ņā÷ē>ņåü £¦>+"ńąĖóüą; ü ś§¾Ō’ÖśēŌņC#42īż<š÷Źł5Ł$ö Śōė¬IŚłžŅŚ,ļ±/÷ńRæņ čŲ ÉęźĻ Ōö$ö  +0ēŌóß8ųżj<Š#.''ģų— ėéöé&į{+ūć/ō*%ßŃ !ך$śķĢ*żóéēćöč-Ōšńž4*čž÷ś é/ õéų.ėėŠß -üąō5Ńļ +üB4łŽōžłčó ņ ’Ū+õüļŽöćń '/ū Ļņś’ĀŌ5īåžęš¹ķ9żŲłłŹėńMčõ6ćć-ģš1ó'ķśēė*ščŽ+óóŃī9’šŃ©ų# ÄOģ7ćŽĢłāŅņ%ąż ļźņī ’Ōļ¦ ēŽ)õŹ’źåóōō(žå-źė šōģJ õ1ūĄé ""$čłÓżŅļī;ŃöŁć  5üóč'żęöżĖķĶ2čŹ-š/7 ŻWūōū/üźūłń =ęõźī 4ō.čā¾õ šó芚'ģ)ü÷Įī×ķåśłņė÷ćō šóģ÷6ē č# ģ& ¾Ż,ś ö, śCüõīņķūšźśćūšåšō ł ·żžįżėėKėŅ)@I!Ģ%#ßłóņļ$žä'ę $#öųźā' īĪ’å"Ó’K*åž ę;ī ÷ļמŻßĻóņļųņüŲ)šōķõęä€åńÉ$śū÷Ź ņåšńŽžōų!üōćčü×õć#1!õ0åźÓäĶ&łŁČ¶Ü9åÅ+čįÖł’łē !ņō M?ņ,ć Ué¬ōóĘ å!6ėā !Ų’śģš%÷Ų öōóžōŪćóų÷6$Żåāé łCźÕ ŪŲüŹ œśYž·Ņ1;÷ģū6õé’óščć ü ć"#S¶/Öį+’:ī¾ ś'üĻņ%Ųü—ü¾ŪÜ ńēå) łå "ß& +ź Ń ’ąöģļĒ,åś óņXõ+õE ß/óĮ9ņöųó/  ęüŖļ×’ ”ļīŲććņš=½ķč’āīÜŻš Ž ó üĖė õįņēģėŹĮą ńRöńŚ(už ŲŚ’/ Hķ  āö ׿öåž*÷^Å“ĒÕ­čJīżČ Ąķłł &dĮź%Óśä*ŚżžėµÖÅÅÖūŃŁŻŖ~ś=œĀ Š& Š×·ģրäŃ äżī“ 6å»=µŹ& õŻŌäž0ėĒ T.ōĻ:ŹŻ/= Øø¬äÜ ćæč$Ü b< äD§3ķ ĪłĻ€ü (€Ō śóš`÷Bó°Ņ‰żŗĒŠ€Ó~"ū¾€ č~éõĒL Īß"Ļ'܁7Ī^X °BBńé"'Õ ŲŻ2ČĪŠ()ł6ŁHŽÆ0KęŠån&ņē½Hģ$ 3>ńšöčå ź4ŃŲ%ž åŽ7C G:ö ÖżŽ×ęÖÓ$ ź ]Ōųļžč$ä×ķęŲŚ(±ē/¹ū T1ż×,#įĮō`ćQJ+ ü’ “®Ų4P+öÖ "Õ 2ū¼īęāŌ×’īóÕĪŽ'ŃżšÖĪģ$ĢšīĖŪÖ+óöą»Ķéģēč,= &"·/č1ę2żß¦€ üü—)ĻįŽ'üė 8¦ōÓėóēÓž$äłļż&ʱ ń /õĀčó! ’żńßłśżĘ% ģ3ōųĮüõśIé:śż Ó*óō !Ął¾ö׿īóž­õńżżü ī’ Łōåņ!Ó Ń5ĆÖ 'į«šŃįķ%€÷"Ų;€ÖĘŚ÷āó  ž÷<’č»  Óśśå3ųģÕü Ś'ėėå󜹌żķčż śõļ)ÜčąÓ׌ śīŌ ’ōŃüÓ=ēŅÕŪżėķ ł÷ż-Iėų³āō"ļń'.Ū ’ńÉ×üü(*ū öō÷éń$Ī÷ęŽ$ūņä&ģł1 ń’čéöå&ņįźüä°ęņ÷Ķ-äśłŸžįó#&šł×åšäēžąå/śżķ.ø šźž Åć 7ūżBļģū(üūgųEū äŲ’š ß1 #ōžõ ÉüßĒĻńīļčźįüł#ėį*źśųü.÷ŅēęĀ čöšŃ&ōłßč<źń ū ‰ā3% šųóõ"/ōßń ÄŸõJüćöö÷1ōļõ°ńßžł+ōäBŽ,Hż&±ßćļ śų óēĄŻį*ÖO ŹāAįéÅ2ģÜł ÷šÓōŽųļŅć=DFÖ*÷ÜĄŪļōB õśų÷żŽųėŚõåīö ż ź5N)ļ3śMóā.(&"żŽ, =ūW (čõųłč Ö":ćüģō É’4g 8ā Ü+ž/€Xńņā¹²ÜSł4+Żõķē\ÜŲķń-Į÷é Ś ūņč ö Óóń 'žų *łśż’ūŪ š śłŽļÜó ż ņóśžńżźüć!öš#&ę’ ōś&įūū ųäóę'÷żźūŚīõśžā ųŽŻćģ"äŻ %óńēćOķģŽ7(ę 3łÓīģł ī0äłŲųß÷ćģéłšüźšŃąńę żņŚéņöČģ Ī ×[ō Õź-ń ?Üš6žš ńéŁ0×ØŌ ī@(ó#1÷#-ž į ’’åõ%ć/ėF ōāŪņģ õņ V!ó ?óģö’'šś".ūŻż.łń÷Ś÷Bå2üęß-&ų;õ ķść×* éÄāģ ēåĻōčŽāė ĖŅłĆžģß ÷ē×¶Ž0üžĖģž Åƒ( īÜā9žņŻĢżÅåą%ųśĪ(Õ¾ųżįēęÓź ÜśļŪĆ.-?Ą%ūé ųŁ+6÷%J*óĀż’ÕŽÜųģŽ ėõś&FĶ Õķ °åŪöĮėąÜ"¾Æ>2ęīüš Śįń!čūōŌĪī×č%š7źö?ńü®ŪńūŁą [ęŚ łżżźčó#,åķų į ßöč9ö ,ŗÆå 4=ÉäöæŪäņ~Ż8ļŠ@ ¦9# ź)÷¦øąģ­¬ éO“¬ōžŹ~ķń? (§ČČé¹)(ė*Źäż>% ƀ<¢Ž Łžlķ”ģĖīÉÄś0ēä)ūR"É?£-Ļ’Ž(WĒ;Ž)×@æJćüQ/;V ™ųDĶ äcßĮą ä-IŹÜļõöż-Ų@€^!Dz&ž5üĶģ,!ė žųφ*5hīÆ:SģļóEü (÷åū3ēź ".ŲŁ½å ņÜÜļč 3 ? ŁŠäī¶ +ųĻĮ ĖŚč 2#åč ęķģĪžö",ÉąŹ{+äā%)ŠüöXŌ žžźŚ’üšą,čĘČ­åŪŠĢ Ņ.Ļļ ŚŲłšŁÉūģ Ż(łŠķŽż(Ųļ ½“N ųõēåļšõżżūį3Äļż*÷ēżŽüųćāķ÷#$÷ż ;õįŹžż%ūįÜē-óšģžž (šļ Śą ņÓč'ä=ļūłŌņ āčųķĘ ŹÜ'ÕAB ž ųōõū ßģų!ģūś÷ŽLł÷łżĻ"š9öģ ņ(ü-Óęō劒ü'ß?ėŌē%ķõ?;Uóūķ ÷äTÜūąDīŚšņ&źõŻ("žųą čĆėżõ'óčżņÆųKēłźóõ ńč āēėP“ĖĆįīųīłėņé"½ćž’ŲÜź*ļóåū*æż½1żŽņ äŻ5ó"ņĖŻ·ßŲŲęj®_ĘĖęčų(śģA/ēüń1ŻśģŃžR'ŽŠčś½Ö öźėūź.ąI! ’Öö7Š 6Āž'ęėėėń’ßęßŪ›ķŚüŪ  ŃŪēōäģ é'KŚŠ÷śļ÷ō÷8ŲÕI: é-ęģņ¦6Öž<×ģ6’õ½Ü¹:ü ō! ѹč?žŲ+€&Īöž·'Ģ(>+īžžõÉļ(ĄÄó¤ĻŚźŚöųŻŚśöīļéh‚i2šó÷ߣņź’C’õßž3÷įę īķ%7Ėčģ¾AéīöóDķīĒėć ¾ O& üćéķ/.ö鞯÷ć źü÷żAńßōžĖ""éųäõäųÜóå#/#Ņżšżļ×åū ł śįłōņļś%śļķööź/ ż ņ 2×3ņż ÷ß ź’śŽų)!ūĒčīūĀįĶŁā<ļķ ūž3Ņž$ÉŲźÜ+łÜ)čśéōō ķīׯßčėę÷ćōłŹ#ßęĻųńāž€6ų’­ßŶžńÓ %ė•YÅÆ4÷׌ÅĘš<BūĆųvģŪ±;1ēä“õGć8\$ėäŖźŲž$ńÅö /"]£7ķźtEO/ ņĖõļ,ē&Õžģü(ł”Ģņ)WÜ׬&7¢Ś#’ŠĄéßī·óL «ļŻÖEDWc³ķ)Óõę3}'8ć÷åõč ŽųĶ '- õBŁ”¶Óū čąUėĮČ=ćśłō ķܰŲÄ(AšąłłżŹįģņō%./ō†¹õMŚÕTś.¤ØśÓ “-.Y5*#7€ßĒźÓ¢Öņ 1›EŌé#°åÖå8&“ūå>ĢGQ‡ä ,jb0 ’!©>WöB]¹ĖŻó0Aęø%äõ4üÆ %LļÄå75Å7ĻėēEėŸfüÜ óž!Ėģ³Ē?½Õ,-UšFąüˆõ«ÓčŌ®ĄBټ€B÷ąźmåź)ī׳> 7 ó<÷¢Ė—Ē#%:ÕŁņ"ąSšłö€žńąįųóšü žŁ½żć&ōž÷’ķ’įķ źūļÖśņ’Aęā’÷ż ćŲ Īūć Ūżāųé¶äčé ųóņ ł÷’Žśõłüę0ńāķżłó’ōśõöÖįśśłń ÷żńž żåń;ųīė! ÅŪžē)ö÷ńŽN„’łÄōż łĶŅEā&(4õ ’&ķī¬ś#łīÜ­żū<ŚżīŽĀQųĪēņ3½ĖĀPŹÖ±ø¶õ õ1Ö>ĀńA¬*“”RÖąŽ^’13üį o1ŌĢĒF*Jłģ×%ÜEƒź¾Ž&5,Ł!Ž)AźNŪźóę C ÕCĀż;ųā łłśÜū’ź.ģčóąÄņ’ž3›ū3Łæ/ī,š ņčņģ%ڰMĢęĮYØšŹč1öįņ/· W ×ćųV£ĄŌ1ØTń /峚hģY÷@X)cHŌóĶ®ó-Źź1ūąÉż<Ž®ļ7¹=! PŅāė­²„2’ž„ļŻēė%…öĮµķŻ'BŃ̳Ō;éč*ĒŻč 6äFĘķģŻ%’Ų*ĖK8ķš’ą Ūī ÷łź ńśŁDK)Ģčę÷łõłģ"čŅ ō’%ų 5łń’;k-“&ź+ėėĪ÷¹żĖ÷Ń ÷āīĮęļśżščÜ!éśĖźČłÕģ!õž­łśö #īķīĻ’õįĢöŌ÷Į/Ā/+äDøŗųGģłčA Ņ Ģ/ *Ł’Ō ÷ū ėüś*ąóŁ5÷ž2Ā!įĻ;äŹūõśöŽ ÷€ś8"ōĘó#Ēi 4-ÆżņżźšĖ7ļ:ö+Ģō=źl’'ģ ’āŅ) óņ ÅŲåųŅ’ńĘńóŌ Ņ›+ß&?ūĶźœī0×@ļå*Oéś9é’ś&  ÷Gņć4ńDųČ'< bżę5’ł äšŹŅ’  ĶŌśščōŠ]ņö÷Ųś×ŚP’ž ś6Ɛ:Ö“a0ŗYŅį­ÉčĻē4øX.5ė€RĮ*ķøīG:)c;ź§cæóšå#¹åżGéžķē½ Ó'yŚ9Öļ ō€ų&2¶éV€ŽįļÅļøQyՐڱ9×~Ī’’Ļķž"õVŁēם'A€:ą/š+ ä€D ļłŹÖK~”V4ŲīŁŅģN)}ĪW]€%øAEī»V ķåįģ1P¶a‹8 8B /åŠłģ—īßą"*ŽāŪźÜö+ļ`Õäę"!įę&Ó,71¹ĆōÅńŽäņ4čłĖ&ęŲ)£ż ߯óé ¼ó'š'ź7żūÖūčÅéšżżõŃó·įĖ$Ī#ļÖ¬7čś B,’AĶ(’ ų,?Śėõāķš’)īīE  ßū>šŽõ ĀéÖÕ Õ#ģüś* ä)ßä¶v>ēó "żķ’óāłŃÓŁķ= žŚĻ&š#ä#÷’Ų4)6÷.#Ž āŪĪ·åīŹüģź ēėæ ńŽŚŽö$Łė( -"Čńéų$ĘąōŃ+šüŲ 9ŪŪ53Õ žōĶõķż!ēżėżé÷÷%ÅśųĮ$öųŃ2. ŗä½żśĮō-­'ßņÕ ½ęķĶóóņčŪŚéžģ2)ŁēśćõÓÕéųęņ)ūäņKÜü 7ąóżå-ę2Ę}ćį’AeJ7ž „˜'ā "ķśóĶ.棇ńüæPŽęܦ ÜÅŪNéA1 łX ŲöÉÕQ’$ĻÉõŻķźõ Ķ(ōŪ žĻõųüóõ üŠWō^ŹÉw¼Õāßą4%ņęćę*ųą’#ś.$’öńÜ9 %毧Ł!%3>ģõ=ŚĢõ÷éŪźõÖąóó'Ž] +(ćö"åēŁĀ&ž ’ž÷@īł+Ńå¶9ń Ž6Ņóį!ųZņ÷BźĆŅ Ž&āĖžQø Ļ2ŲX&,†ž’ź1"%óLĪ&ü7=éå×ÜūņdŠłLń÷ł³ £śģ€Ņ€ ī ĘŹ±šü£öŁļNnU$»QļĻ:7-”ķ÷+!ÜōłŲ ĶÅüĒ÷ŪŻéM&=$ļ½ «ūéģčĖķł÷Ö(äõEŗ=Łń'.ņ’ņ (a$G.0üÓųæżm2ūõŻęēG ƒ<°»RŃčŗ$.ó'D€„ņŻ;įā«Ķffņ;EggĶ€ õąę’'/ė1ĒęŃR*ŖĪŁ=ŽųQ*Ėüzä"€HEDĻķNEG['9K0ŃÕb5§Ī€€Aļ.ķ¢ņŠīų.ęŸ Ē^äß'» Ųč#i^ö³%(có€&õŠņż*§ö€p:͵5ٳœaрćäŪö7&ŠŲņļąŻĢŅ£Ū$żņŽåŌüźõā'öńžõßģüߣ åųPēų 2 üé0Ųä@ å åĶ/žöį%¢ÖŃź,üģŚżō*ņę’Ų÷.łų#÷Č łö÷ńą¢0ųōŽ, Sē× -’ėŪżī1ą” × ēĪöļ-ó ÜĀ'ł’é 3åŁęõ+&#üĘļāēō^ņV+ 0üļŗóŪŽpą½»Ķ3 īóā“ūīģ 1čÜ ąžBļ'õłe÷ąąöķ õßCÜż)ż’<ż /Ńł’ĶėļŽé% é¹źśÓ’å9 ŲZ0Åņ ūķżĢW.½ū÷’Ėę×ńģPńźś÷äėė ź2šżS0 4@ń®@ėń,āžģ(%×ö'ėūŃ÷§ņ ĖŁ» (Øūåš[łÜöå¼ į &ŽļČĮųīõM¾€ +Ē<,›ś5ųąGēĄŽ!łģ<ģģ’&ņ üį’ń*[ļaJāJÓļ’ķ(ŅĒ^`Ķūæó’’ļµ 1ŚąīńęŃŁ÷Ų*éŽ1- ’ŪōśÕ  VRó¼’ŗ’æłß &ó+H6æńÖóŽĮžW’ļ~Nģ÷Ü.cķńŹ@ŗ¹%Y~żrń%(" ̾ä2ü īéņūåó#čłž4ļńę%éķŻęć/%ų įōFų$%3’ åļ ē©ūõ’Üļ+éķŲīč:åjčķčŲń Ū')XĒ''ē’Ä!ÜŌ*Żų’äōÕåöŃļ2ņŽīŁ(ž %äAļ51ōÜ äē ūóźłīŃ5Śł“ń(ęHóę čščāč å¼ėā÷š Žéü+ļķé×äĻøŹĶž *%åŁ=L"õźāĪ/!½ bXĆń'żŲÖXćķßż:ōŲC* ( ŗM)(żŻ5õ!Ē^ĶóżųģRb óŚé÷ŽFæÅķŽęĖ õ#ĢäS!=CÄn4ä,¾ ēĢß%K(X÷xõz)GMīūæÄģŁ²ś)CÕŗłßŃÕÕ ?›&Óćłi2ß )’śśAż ą’Ü ĘÖėæ «:üĒźÖäķŖGŁŌśųė)÷īÅG ńt%),Ż× ķńšŁčEš ūźßéLšŽå įģ/åēąöŁ/öó÷ā,é Żé Źļ "ŚżŲJųł!ŽŻĀūRńB>Ūę ō Į ō!īńĖ!ąėłłöAń"ö÷(ęāēŻŃ"šņ’4ķ>üä  cÜėźO0*öĖėł2 Œž#üź9ߏ$łėõźūā!ķÕÜżĖļ× ąūÕõś$ åŚÆ < łB®¹ģęģśŅ! Ŗģš·óĶė6B1<śÖ<“+ķ›ń!f; ż ńGūšģ# žAĮžÓPĮŹŁžŻÉńųšķSįŻzĪ’’? ŗŠü˜ī€ ųžĒ šėÉčæī ²ßŗ=Gæś!2÷š/—źłæéŪY T®ü;'å ćŅÓ5'śM ųüœįńĀ 2+ŅŚć“ģšÕ-÷łš]įūų¤ż&ÄóO/źF€©6Éčöõ/ė/ Ż#ŁŠ*į= żå"ī¼(ÕĶ ×ģŠW B6įķĀö53œŽ /õDń ¾"’ūėū4 žāžīŠł ėüņāė(Ų( ²ßź,ä æņD$ÕSüāč=ó#-åĒź ŌŚh łń"Ń+öŌa5ō-Īē Žåį8ģüič÷äJÓĢłŲÜåT÷&ĄĮ jŗ%ĖįńZģžĘ/>ÜÕÄźėé:økÄśYÉ+ł BŚ ćĘL6טģų÷Ō&ńē*óäĪ€ ē÷,9b ųPĢÓó-,.ʰß šņ¾[ļ¦ éį'$Šś/€ēńZ?Ķź,×;ß>Ł żÕ5NÅłŃŹčü©€,5 ä8,Ņ’ł£Ł,/GŚ=Įóæų0Ļķ#Ī÷Œų²ķ£@~ū­#Æėłč$År0złäõļ ×ōīėōłõöĒBļż ŽŪBŃBŻŻčŲĪł'Ņę’ŌIź ,łōČačņįAą -1’43"ūŻä×éæź  $ūÕüÅō%Ē <īųųūÉš^­Cģ%Ų!üŃČģˆ’Å&ģ"ń ōł3Gķöõ8ŹŠóó*å¾ūŪ(äŠ×9Ō.ūņõ)õĮ'1g×$źFćé#B ņšŌ²Ē3ć Š 8į×±ž×ĖęÕ ā’čõ "×ńčå Ļ@?ļėēüż/Ó äģõ)!īŲżūēóų ÷- ńšęÄŽ Ūū ł2 é÷÷<6Įó,ķåøųóć? ÓķŅ&īģ ŚęöåžóųŪūę,@źéģęŌ"ŅŹÖŻ’ ÕĖß’ĻTł#ó ±Mėü÷I ęæżėć %-'ņņ@#łĶ šõŚG‡žüč śÕĒ'öŁ÷"óö÷ć ļśąóņźįīÜŹžę)žé $ōÓ-å"ł.õŃŃåŚķ'„Ģōī:*įųü."4ī Ūžšē š×éś ’#ŻŪZµśżīP/ųīščLóü·'Ü%1Ņł#żŌ ģļņīńž1 Żęž’ėį ń ō 6łłź ŚŪ!ņÉāŁöĮÅž’ęēõėńżūō €Ö ļßóōÖż ( öāź™ŗś ļ@ņīųžūļõ€ń üŲŪė%æ  Õļßé ’ó;Ł9ć ×ėé$ƒ#śø( óé±v .Ū1õ»šÕóõō’ łCśõŁó%)æžU½!ųŅŻ#õ' ,ąķļ9Ūč' źĒļ õŹ*6 µÖŻīšļ ąõ2’ģ/źóńA # ĀKžĻ4ąāŗ…:`Ķģõ+ŗä\÷ß+ļŠ: Ańp’ŲĶīÄū¹üęnÉĄ1ÉĮå½į!Sß;•ä'óįiß“!dęžÉóMŃß?5’…O,įī»Óš&×ģūŗ ¶8CÅĖ)?GķėūHļūBžĢĪĀióņmķźļ ŠČ霎ļżü<-1 Ęē:@$×Üń,3ģé3·Ł§iVöśzų®ĄķFX $Ō JģĆļĪ$V4ķ,Æõł&?1a×ļĢRĻ;->!7ųōęė"ź Ą$2Ā©÷),éĒŗŻńó 7ńńęīßd2óóÆsč©įZc)ŪčŪ’ ’čÜAØ@ķķīö/ ŁæßĮÜÓń0ķPFņ!7Ōń+UƼÓXźūā/ńY4š!ŽéÓHö’+ēŹĪāHbÜ®€×ĢĖ% ź õ)0±Ķč,ŻŃį! †R¹ßäō:š,ĢūZÅķ9LŠ݇(Ų ‘eäŅ9Īż”T4ŅņŪßå+:ī Č Ż&÷£ķóž ­ " ųķŌCE®²ź8 ¼+ģéĮzżī%›ńßė¢ «%5ĪźįZĪę5į<Ō”C<źfœęÓŹņZö*÷ó'zÉõčāć3·ĮMóņż*ŽņōéD ó$6ī#ė!’ļߎ7ģõ-ą#ūÓįņņęė²<= Ķąó"gђēņź]ĻķŌīõĪÆčĘ~ä'9õS?(•-Āó– ņ#"ś[)#źęå'› Oø$·ŃżųõŚēŁö1"čß ¶V0LźŸĘeÕҐŗ & ž5°»å—”6¹Ÿ©žń*A.āčż.ģ ÓQ€A³-œX0)ČT š ¹#?7€ €īø"(×P$pÜéļרżŌ5ŻµēR+<+ė<÷čęßyžŚå_Wź Ęį-ÄģŠć.×%ūā»éö÷6ÕüŲßīųā!Ü,īśO$%ćō  ! łżO$ßļ,=š.&ĢėÜ×ä7’ģāåšé±O$šö4 ē)éę9ķŅMöÓ9ö÷ü$5#ÜÄ5. ü)Ö~é$ųŅ,ų ķ å(×'ųśżŻķążĘńīÜģõöĖĢżāø:õš /ōŲJļąõ ńęŽęļi@+MķÓÕŹ īżēćā0"×ū.ź~Łšš žÄłĪŻĻļ"ŠlÓčŖŁłłčśĪ$Śæ.śÉ3ü8N ņ (!+š(ōķūš?0ö ŅčĖ ÷ńžź(µ». ī€9÷ćnŃź ’āKžŲ5÷ ńĒjžųż įßÜżęĶe;ŚČŽŅGü&ź0É-ƽ¢ 0ĄĀ"Ł+Ć>÷ń"²éõĖ÷žžüŻōę).ŠžčÜßß ę›Ņ/<Ż.ę–0!ģ˜ź:šćåļˆ&÷ż3/ ćśFą"C94Ģ0ćųŽĢŪß ²“ĢęĻJņ&°žžE(ō ßĒ"ķōŃļŌ÷ļļĖųÓ%Ø ģŽżžÕ +;3)č×ņó÷Ż5Ė£½ŌōݦžōE-óśōģ".4Ž7Ž“åŹ %Ū¶ Ž69: ­čų%„ÖõņFį’Gżō3-1ī.&½÷kõĆüėóöī[ !1āäįNü  ćÅ?.ų5÷üųąŲ±žļüļ Ō×'€2Ųļ$öżĀķ ŻėÆD, _7Ē6Ӂ!*’ĪóļäĢ> ÓģĒīģr!5J±B(ŅõĒ÷ž¢6ö\šõ°  ķ#åāDĪī#Ē!6ćūž Ģ×%gÅąĢĖϵ čįėļą#óĪŽčĮņ4ßęžöōŽöü Õ?Ż‚1Ņčå+8kģ$ņN*µ,½ļčŠÖ&tŸ*T›+@ČÕ’<ÄČü()Żī: (<·$¶ ąPīɟ(lBŽŹ:ÖŠÓ'ūĪÖ÷4;?nńßŃĻVņł ";Ā žā3bŚ’R,[ū)÷Ņ2@<Aö 0ó ą¾÷ Ōž×H/'Dóöö#3’»śA0īŅÅŅ hןęŲ Į Ėš `ĪfÆ3Žļēćöķžå Ö÷‡Vį&śō& §G„QS¾ńóÜ_*ņō¼e$öńž…<Ū.łžĻčēńD°Dńł%G øļ)ŗH’ Ķō?ćū˵īń)ćėņ©ė³D ÖŲŲ$éå-üņ1ńļ©Ų€“ŃĪåź±(1Ė"ąéó÷ą,ķÅč )6ŁYŹKŽ'” īÖćĄĖ9¼GŅ#Ļīé7šłšńśAóńĆ7Žł2!Ć:éŪ'ź ųŲąęĒä żŲķ!} )'š!JŸ[śń —%K(ä=’Ō×ĶŻ5"%ę ĀēņāéČ2 äJ;ø¹£łĪ"ĖÆ"ī › ÷Ö¹‚_ ĒÕ!—;ł¢3üŠ+÷ŹGģ õÖ&FČ!B,ķōĄŚ OĀ4Ć7üÖ Ė†ҽüĄČ­‘źøCHŻjĆ>.:ķiū£ ŸéŪ953ČĪ÷½Ō® į4ėšķćõßšļžīęū©!Ö@ūö<5é1ü(7’U6°öLŽĘ6ćä ī(Ö)ÓČ+¹%ö$öąé€ ÖßžÓžŁ+żN’žŌ,ą,ē2ķ4Ż Ō,ó €-ZŪMećø ČĻ’^!Čćž!w*ļõō%Ōė Ž ģÓć4ÄSź WśņēęĮłĶ×ŪŁõÖū&Žķ ś#āłā5%T’®Ü%Ļ%Zćś2ųö—¤N\¾ęīģ"&ž æū"’8ńÉņąŁ ķą  #ņĖ č ļéCįõOFņÉ2 ųź4ł DüõüĻÖó:ś.¶ō’Ų7óķŹ#÷"ųé «Z*ŁĮ»Ć.Aµ2įž8>ńŻš#ä1ģ EŻ÷Gµ,ķ-×ćé H,²ŚA1”ź&ĻTØĖģ/4pŻééPŃŽõÕōŠžł ģCDģ ×’żę„))ć҆ż%ćŪ0ó² ź` OŹķżėūņ+Õąńż Ļ’ęŅóĶ,ϳł')1įŁņāęK ķÓö"ķēÓ(8 ļgš:Ļ0ęģ)Ś73éŲļ ÖąX›ķ™õĘüV,€É&čē)>eŻÓ?Ģś $!åčóHńōčńż7 ø>üō@ūā*żžšē®*LHłŃļ鎟żūĻĆÓ"ė’āά/KŻ d*Ūé„D8€ō3ēĪ.óä4żė[Ū€įŠB6`ēŠŖ±J×äš: ā6>е)łüŁōīž#ÕļāŁåP»āŹŽēnł š’~ ‚ ڶ=š4÷”ņĮ *ģ±ā+.żŌsęĻ;Ļ99Ż8ę"-€įÕXéā€Ųó2āE•źWĒ,ķŽ®ü.@·¶ ŻĘϐŽ ÕōõÓĻAĆūü`&CńČ 3ķ ŹäüäščŹ6ī 7Ż󞢊üÅĪé?+ó0 ī#œōĶŌ÷ų›(ūŁĄ«æóųŻĀīéõ%&ńäγļų ž×ė#żī%Żø$Ÿ± żļ&–Ņäę6*]7C/Šų;ł3Éįū ūü Ā"$Ż¢+ü.Ēōćü łŻ ē& Čńū,÷MńūXįš×öń5‹Õ1·ęŻģ ī -ž(ÅńšóŚåX$ ąŚŃ¾ī0 Öŗ"Żža¬čóū÷śģųą8NõŹųŁĒ"€P_šßä ńåśŌ%Cßę öõ$<ųņĖÕŽā¼ üö"Ŗ¾"õä)÷.ćR ś ęÓŲ. Ū-é#Ļ-÷ŃD"ź ø% ńŲŻŸ ż× ū1 §/ė,Üļ+ęĄ+Ó<(éÅĆėŗū9„Š $Õä !ū ķłÕ ę²gē^äõōöמŃ<äŚfā*·ņAńēŁ ˜GęŽĖ.Ž^'Wż\)ųÜHcŪż!Bų¦Ņ **CąYšöį‹4’(ü'ŌšV/ź22šč·×ä4Ä2ćīųųEĶĻŁųąŠÖįŠå!Õæóōī<-A‘Å«™Ł ¬Šü-īy'7šä€ūÜ+ ¹é ōötŅš"óĻšś€ĘM9Ģ×.āōęŠŲ¾čžüŗę¦D!?$ńŌŪėC#’ ą6ĢNÓÓõ)¾32å¼MĢa¼ėÜ Ž ÄŻ$?öš§ÖG¢čõ 1ź¹5 ŻŠŁt$2 ŠH¶äŠ™ŃgW$Ć źū4æŁż*»|Õ÷č"LNz ©¦ÖÓæ×µ„»ž%žīÕ-=ī ĖÅ|Żšņ”䘊3 ÆĄ­ļčĻ I E×ĀšēF&÷[] ķ āHŅ(é5 ļīY%ŚųĖ>?é÷%ß’4Ķ$żėš)öź(ņ&BŚõāŃ5 -//Śä8"Ż"'¾æ·^ł 'ųōż*bĢü -įž²Ųšēļī3ńėā@×Ń$Ć®ÖL~Źć‘øī5ż\:UēąÉ‡ ö*Ōņļ- ܜļT3 žÕ ęŚ÷0ī!ĻŲūŅš -ņŅķū&Óŗęēķōū\$ŌÜ ōĢŽ ŠBc’[Ė6Æ:LMŽīŽóĆ:\ĪųėC\5óõåPŪżßF1Wä` H&ł!3ćąßĒāŌ{ż5 üĘ:č!'ųż#żųīŲćåżęó’ÖĪć7ˆŽRīø ņń'€=Ų€3åÓė8«ķķė,b)Ž'~’9×ĶéõżGP*ÖæDSŪS1Φö#ÆėņEģž$ŌĘīģĮ ņ -ĘĮĪõB^ł ā¾'įѼ(żėµāū€½ ōģĢÜšųŪ!Įśīł’fÜ š*Ł#’’ ä+ćü’žż#ó)Öļģōģæ’ ·Žķ¤­ū* ÉĢÄ÷I<į Ī;× ņźģ .Ū»ŁõÕ:ģōÉc üH *ŅĆōūցż’ė2ßžā&šĶÉó:ņ6 ś ēöī # K8ćę+Kõģ<ĄŅÓŻÓīėōóȄݻņśC0Ūæżģö@ ;V<½ēĻeŽŲÆ&÷Ž•«Ęݼc*āņłŠįļ]9× ½`:ā’žŌ` Õō į×8ŚöG AöōÉķ¤ĪÉ(čÄ"$õ×!×$¹ßńĮń Ü»)üž«$J÷Śś7/ū ÷õé5äóżiĆ&ļęėõģ,ĀŌŽō‚5KŚócÉõ÷ ź0ļ BŁ Föåļ'žš ūīōēēēśų ćäīŪž5 6& ēĶųį*–Üģ žß, ÷÷ąŚõ1čżźšéåūāū čßóū(ūņļ䳎÷óōüčųśśŁ ė3ž Ż&żįüėĻū¢žüļū ųą6ūćżÄß āįŻą Ųå&°)ßļĶÕź÷ėķŲüł’Ś &0’ä żī(ėć )§ öćšé8ä›ū½%÷éŌŅė’!Öģ = ųćß1õīķŽå>Šżłż<ŅŖö ŁÜķ/ $Öū" ź(ź;ļü Óšć5ōšńČŗ(@ĶĀ+š›˜$Ōżį łž0}! ŁśįĒōÓõŠÉ5Žźū)ėł6ČFÉÖķüče>6&Įö×ŪĆż)ććōßN„*Z.,Śé ę ŖįK÷ >‚Ąīśą ’NćóĶŹč ņVüŲ ‹óšœžłāęę0×ÉŌ ö¹1 %)"Į õČēŅ&ōęķŹ)č_ń ųŁĀłŲÖ-*ēä ;*"ž ćīõä0U Č>(69°YŸ¶źŠūŚ?į6 6ļÜń%ĢęīIö’$õłßłģ( ā -ÖĻŻ6ó$(ą#žóŅųĶBćī)'ü×'ųĪ0ōC BŅūčäüõēŁ ų’ üģėąÊ.9Ŗś(ž› 俏ńū4Ķ%&¶ĄĢõ#6Įģ1;*š õėĘŽŻ3üźĻÓFēšßó+Ś,łøå3Šžżół¤Ź-łćo 0×Ö¤ż\ę óō,-ī į3ā śÉęęāWGĻ$é  ä* ź1éÄĘŽåśŲāSśŠŗ§§- ųņ[ģąfįńēķ ¼+Jąį÷æÕL(ęī#02;Fēū2ėł×å"å°’€ŹļŗĀźc”ŲÆÓģ×/ ÷éŻ !Aļćöäß"é%ÄŹ4ö¢’ĖéĪCĒ"ÓŖ  ±Źū½·ŹõéŻēśłŠčśŁ¼"éņ ĄšļĪÉ(‰ń9ķ³üUÖ½ź=ĆšÜāÓ×)č3!Ņ­ óÄŲ/­ŠļI5[+ŌןŃ3!€7ķ­.Ö,9ŻŲīć§ē,5$&ū ąē.1Żó€ŅŪ ė÷ "ć éŻėžł)ģżĻźļžżóä  āćøóūģóśļŻä;ż9-Ļ >#‘Ļé,®ÕåčöOAū·83 %Ā/#ńļ>1,(#4;ņµėāp'’ŁŪ<å©×żūCĖõł);ŅŁ]Røü@ü䞶5ĒŚ% āIĀßå·ąż& _Ōč’ś¹ ¾ē¼Zę½”ņÕĶ*ąęÖųżÓīó¹Ķģ)5śēöéąūķēž÷ō# ėš éžą ö&/ ōń€ī’śõčÓü łß ķüļŻĪń=-ž1ū’ ł'ō ż -'+ųģżłččļŠłéś7É ē÷ ŲżAļüūšć *ąņó÷Õõö Į5ūłżź0™š¾ ņ ąŌÜ7ņąß~į(·SAńJwśPńĮ×Įźįü7ģ YĘŠÅķ XÉį/±0ė¾Rõņ×XŹßŪż°ł"*P%€>ćž ÷™Ńäć÷šå*Ša“ü’Ė Y&*ņ2Ģā½ć$ż.6ōõ€źC88dŪ»?ÓB=ł÷óć_%q÷ć»NN~8ĢģņCōÖ<ē+ē²½3é%„ży)®ļ)Ö éļė ūē×·č’ąū$žķ ćĶūõāļŃ;éš#żŗŠčÕ:ęėš5ū÷ÄŹ2ł(ķį’ŽóÄóššŽļ’šŁ ėÅ õż ÷ł $A ņćą(üł' £į%#Ō"Įžõ/’īŪĘéųŗ¾āõĒ 2éõÜ ü+éžķŻžóūŪė)śKÉŪFōāūš'æÖ9Żū " ß%ŚīīFF2ō¾ėZ<įöćļ—ąĄūŚå ļßZÖēŪWų-*ōōnķµčÄōČåååā.üČ’ĻSčńĻ/×6īćō ŗĀv+ ł-"%ŌóÓ4 #ųg ź-ź#¶ęö ß ę,UČ>ŲŹÄV7ćč’ »-ć3 ‹5W1õļÉóæ~:Ż,ł¼’śÕĖ裥"£ ē#FöōƶÓĘ- >:Ū‚õčćšńĢ(Ļ·0Ń ;„Øī€ &ĮźŻ:š.åķŃņśćI÷+žŲßųūēõuć )õMöķ#Ā81ó)ä5Żėöõßč!Ń%)“ž ¾Ū.šļ<)<Öś3õ;Ģ"@#ŁšģŲ]-©7,*ÖŃņż7)ūżēĢ ß¶ČłłU"ēÕ>øō3Ņ=łŽŁĖõłÜ/ŗ&ßźĄŅ®ń^õCŽź"Ż #<ö: jčüŃćņś ÜåņŽ7ķšć1ÖóCŽ®ÓĶŁņēšę(Ų%źó h€)ŪßśąŪ4ūõ:ŹłśóŠāOMž$ õ;+8&šēČE +ßč+ģ .ä KÜą Uęā> šć €ļXų"XHųźč@6]ūSÖ»ąŪØąń½ ģõBŌ¼üā!Ņ ķłņłęÓĻŠęÖ åķ¶öō²Ż3ńč-Ā5¬į$łüķūLŚŁ9`€żŃŚCŌÄ)Ūōćō-<Ę ęÓ°[8ń’ę-Hų$ü!*ų#ćéŖRģčöę-7€’.·D ­åĀ€*ļ]/ŽņĪ"õķŲķĖ ß =ņN’īšŽ6ž'» üŠ? /ųĀ1ų:(Õ«ŁüņÓĪ  öį 3¶2żčĪżÕ¾ʶā"Ąģåü*žj$ļ÷C ķĪænA %9 #%Ä&x“ńüõšŲŌ·’'īīłEė'œ:Śåū8żĶ•źņÉéüݳÓŃĻŠ«÷ ųĖõCŃēfś 2HžČĪŪļ½ė“-"Ė0ŽóõóūņĪϾžZp å) ĆKʘšdįĪ ×,“Ü2Ų13É #Āėāå&Īńųø÷Õ<Õ+šĒ”šųüń2ī¼'Ś&å(#Ļ2(ÓĀĒčņāßĶ#ķȶŖÕĮĢ WŚß÷!ßöęéPæś÷÷ķźįźē»éŻēČąįżćŅüŁźĢżłćXčń1,čõž ČŅģõX/ä /Łߏńīéü'Ö!’īŸķåõīNŃ!¶čD1ņĘųŃׯäšīķÕłüĆ ųļH"ł, īŚ &ą÷ūżķ Ģö žöłųļä&Aųųņā%æöó)ā ČźŻō’-ķ/ū$Ķ/,śŹ’*ś÷ž0ōuĪ×’įū37 õÕ÷ō €Öų/łœśčA9ś÷ķóį żč’éėĖó Ųöįū åłCĻ“ ė" öż1żŹ8āÖųģčģ)<4)āŠæx ߌŪļäüėŚŽōé’č-2 ķŲó€õķ ²Ēõęå & ½#ó€ķßÕ¼žŹ å(ą£ųč ȼóŅŚ’0Ż#żŅöŌ<’÷/÷łäā'"óõŻ$ś‚Ėä õķŻ¼ĶŚłōßć#~ ÷ķ$8żķ:oJ - ń^ćł˜)'ūŒ-×0•®š*Ž-ÜŹ§ÅÖģ éĆFį ä:.# ’ żŠ čīóĆ׀=ū÷­ć ł. ’Żõ É cśŃ\'FØēÄÕ±m,Wöļ/Rćńžßź"ņ:€õĀgćĪŃäÄš#Ä"ķA0Ž%ŌŁ<$šņ& BŲŁē°ó7ŁĖ-ēģe ō%ŅōåąŃ) õ7ųģ²D8Ęß3ˆśóå~Ō3ē{:śFD7 °‡üņ š÷¶³Śä,ÄG čč,"9ę*ó뀓;ģóüčóę€ņ÷‘"æł¶łżP9ū äŻJ# ņ(;$ ŪÄÖ/ī3"ŽM7×D°Õ &õąö6śė! ėįŃīÓY,Žhö3ųgDõŲ*žąå+ žģĖÓń(ī]žŪĒ0łą ·Ł-!² oŪ4 *~ų0 ²źŻķÜģQ\ä łŚö īG4޽$łéŪ(& āÓå3ńåŃ å×Å(ī»"ūķäę-Žūó ńžųŁ?é€÷É ś*į*(7åāēćÄĢ$ö ’½:½É2ŲCģG #7éį? éżķP>&ĶÓ)’ +ŲļśÅ5)+Įó»J 0ļń*ī:€)Ļųß¾ż Åę7@*Ėę’)ŻōJĻāĖ÷ńAŲ5šč!7'Č&ŽųÜŌ ×łƒŽ ą"ÅļżŠŅņŌ¢\`Ōņ Ųż%ŚŽCęšĶöDOļĘOż,ŽśXĮöńÜ ņHĮ"[ėĖ+ čł) ž62ķ5 ū”1żģēšŌ’+äŻęÓööž’ūö  ōŠŁ÷’ūŁģ čĀņó Ł’Ć'õäZÅ, Ķŗ4äŻ?ūÅźŁ ī žöÓäåąG Łų×ėŽ,*õC’å" D(‰ćU2õö!ź4B0č;\ūÓīų²ćŽĻįMFõóó×÷ $AŠ*&±ų’'B ąåūįé ÜóįĒ÷ó¢š'ńL„*ϲCå&I" ףS׎$+»1ÖīĮžĢ*ź ¼źŌč%Xź%Z%Dåō1ń÷ 2ÕÖęł¾;ź/ÆfŖčĪÉ©87)ńĆź'ö<š÷ߣń­ ąūž ÷ķńķÕ/ õEŚ <,+fié“÷śÜT Jūįž nŁū?ŚTŻA.Ė(_įäÖĢęŲxŽķ ’ Ē÷ īĘžłŻśüĒņ€: DŲßīśłž’żæŻ: ņļņ*IŃēź $ ņņ ćā@÷0ĻŽ īė"żŁįńōććķźśõżģīüū’Ę,ą1{#ŽŁ+ļóņģ&ōō'ńĢ­Ōéł" ęķļ, )Y'ųļē ō „ēöōõēFē)ī ćū€ą53õ ;+Ź Ū2ī ĮčŠ;³Ś€ēš.õ ó-ż&ü÷łåņå%'É Ż.ęÖü'ē10åł#öčąŌ'ō<+L®Ź@ū) œŁĖĆĻCśĻįžßįŽ. ņ2FEąķĘ)ķąE%)@Ŗ¬Üź×īŽ'ēč%ϼŚóõP#śņžC ;ńݾŁüß/5 õVōŠÜ꿯óżąß² . ī CūŗZ©č+ Õó ņķšéūó)įś ž3ÓNd)šŗ 6 āŗūčį’Ö6=üßųīY/’/&5«(Ģ6Ōł # 9łųäXÜžūŠA!Ū60Łųõ®Ł½óūŗćöńčvš]ö+õ *ėėDā=×bõ«*Õņ¼šLū/ FŲHL5āą-€ļM½0ūŚ"߯+Æłv#.Ś Ųäņüōį$ōęPĆļ÷ėōóĻų Žųåģģ%ļ–šņÓłįż4¬KÆė% ģņßżóĻ9ÖŪŻ÷ Ń ²Įī!źŪģł# Õęō÷O’aČ1 'öŪū#üōŽĢĀ šĖ żōöåŪ9%%įŁÖ īåą«ńĮąĻŌė!äÕ×īóCņįņėŲ 8Ōąņū9įćłļą¶*= Õš÷śĀ!Ļ÷*ē Ołē:Ó؜ēūöĆó <9øĶLuäöב8²ŁžRšŅėž—²Ö9¹¬ŚŠ)Óö,Tžė%KÕāܓMųńē Ąį,ĒŽž6ė坔»×ĖįūŹĻƒ*€©9*¾ ÄńU 75ŪÜŌū]ł:ėå€ @%÷Ė-JĀ’čć»ųńŗM`+×ēüciqī Éļœī’ÖÕĖėņ\'!~šGY%-Ī÷3ō5ī ųčéįŽå¼ÓĀŻų÷ü“<ĒžiĄ0~ü -7’č-0"ūóŁś1š­ +ÅĶś¼óńčó+āAūŻ#÷ ó,&JŁņ=(łÕ5ąć*6 ×Ā* ėĘ4ėœüÉö ļäźżŻķāņ0*€^½ź"TI.%4ļ$'ļ Į «ō<ćmÜ®AŚ+ń%ŸJČņO&;DˆĢOŌż .Śųė)Śõ/śō’O ¬Ś÷ ķ ÓÕK߬ö AģõäĻģ \€ū„ģÕ )2ó"&%äC €×īG°æķé%żÉŌ(ćĶäņō?āš#øņöū-ŁŌĘ"9ŪŻ WŖūÜöéѶńł"¦Ń_(äĻ–Ōč7 ļX.©ŻŅÉĄō­ž<=É:å@&pš¤Õķ1' ©'AŪÖŁ’Śß+ż¢\ųĖūūō*ģGiܳšĪ7 ó $Āś÷ŪĘmĖ4ńš%żeå±ģāŻ2E÷ļŪ+õßĮĒK7ś'!Ū×=•Ō#÷Č #>N™:¼Ų„)üńõ åéAÉņΰ!Üś©öęÆéņęķ"Ü4½ŲmŃõżģź"Äņ‹źūē–×ÕŅõ ŃÕāńé!ģ` %+ųļ”õļé žŪ€)ūŚ@ %śŹ&Ž ćņŃ(+“H~»÷VÖæü]ÉĮC%ÕåīŠöč -ö įųŗĪŹų%åõ% ŪšēäÕłßģ)óéü!ņ(ŁūÜ >!"  ż,łņéĻü ä÷ óēŽÉ÷ķż4ļńü(ū#üłź0#÷€õņ ķČį Ļōģó’0ōĄć ś “%÷Ż“ÕōŽń a *ė Ż ōõü ć>Ś K śÖóū|8ćÅņ ģ6īŲū’ę õĶŗī/ßź©÷ ’Āī*üąź¼.ģ_-°-ņüŽŲPī¼eĢÆ8"(²³āåTķłō!É4~¹!š%ķ÷ęĄ4ŚÅĻ“åœ I tÓäö#  žČöä ŽŃvd!;&k8(kī 7ŅŖż¾ėÖū7ä(Z$P߯ŻÜĆĒł;ĢŽńŻŚ'ŠÖ.µ.Ą)å5$) ĢÆĆ$ļöūįīó~÷ūģ4Ųö Ė A€<żē>€ ėf įģtƽėø'1÷6åųžŻ'37ĪĆĻ Ė4ÓHƜ蚯Żēč īžīĪą% ÷’*®ęé#žęęśÄ /ųH $±÷ö%°ėįć%ü8ęŠ÷óė'ŪŁŪņI+#Öļ' ×ß õv żÕŽ9üśJ÷õKįĢäO$*µĀé +Ņ€¹ģćēĢž žą Aš¾Ń Äż;åŅģ#LK. ÷žł ÜįžŪŪüśQä1¶”}ėū0(ĻĄ¼mń0Jß(YŪ÷’öKńß+ī &Ü ¼ 9ēį3įKņUŲ*Ó )ŻŖ“ B&+Ęźū}éBš ćż3'=› ā BWńšćĖMū€Ņ6ńøG ļQ$šN$) ÉŁø6żģ †f 7ćĆųāłClDšÓć^ąŗMŌłHī’2é/ć¾’-ż]åßžó×ā#-ėüżüAüś6~ ł³*ĮB'&ļBčīķšŪ€ĶQŗĮi@żņģä4ė'Våčćų ķü ÓēFöÉ,ņ'£ņÖš 7ś5č;Ū­õ"Å!żšūÜB!Jü^ćȄA ŌŻČęóż÷5E$ģ85TŃū6§ŌķģęfŻÖņ&óĘ ×żē ęÖéŲĮā"",Oü©)ī’'kN+ņ!ȇüŃ öČ Ś¬ŒFEūµFŚłčžšēŠł×N½ŌĶ„ēūńĪī)Aę* üō+ģężųņģ4¾įūŌ:7ķä&śū’Š÷ ęŽõĆ(’÷:3ņ ääP"ä ÷É:ÉüŹéņžĆŻ&Łż ŠāĀ·ž)ł(ćģšģń."ąč^ī½å,$GüęīÕģā*śĢĖō»÷%"-āÜēØ%āĶŲżŽ£.4Ł’äæ!1 öųśłł"×ųČŲÕ<ļņøņ/&,żÅūż2į)Åó>(å,čė’ä ķ§Ż,•×÷€Ųµäą±Ź;r '€ėQ±ąž¬óļM°Ł0é$BĪAēā6 éļß3µ#Ž a'؜Č 0E ³š+’ō&ó Č)īąņś82UÜJ?ņå’0½üŻ×÷ ¦į$’¬ķ ā¤[õ~žZMą»ŻŻ<ŗ‘Āč!ī,ŻøÜöå/$ҤćŚä9×Ąšźż Ż2łė3Yś;ŁēŹ1öAń€•ÜDą Ü€ę+B#GNź½!ŸĶ„g $ę/6žHü×Ä@M÷ćū ś'&įbŻüąUśŌņę?*0ä1-DŹ^$äģ«÷“’7kśķś×"ņ0ŁšŚ4ŅSź¼AA¤Æ@!hR%ģõ÷ēü’ĄÄM>ÜöVRŸĆūīūĀ÷ē%»Żdé #Ń ÖĢßüØóõĮäč >÷Ž·& ­õåEļOųŲ’ķ÷īģė-ń9öüć%’ńlĄÜśŲ#ļēųäūAņ’÷$×Ć*ž’ńš "+#ź č üś,("ś*ēó’, ęū )ķó3Ž’÷Łćüõäņ9F5ąļā źšśŌ#œŹźō(Ü čŅ  īõūÆģėŠ š"ŌŪżß€ŅīõŽßļüęģ"ļäõŽ­ ż÷ģ īé”%ēB ō鎾 ļ’„">ĻåŅößCīGĢ É{NųųŚõ"Łč; ę ÉÜ;ī!%õÜļQX#üķÕģŌŲYĪ<šÖį)%É'DÄßų4-ź'䞣åüšÕĮłČ!ī$ņÜūØļ€Į>ČīļöŽę !)öÆēś¾"Üń[ßXē’l4& cSÅ$?ūęlĘŲįöüҼŌJŪJŠžėµņń½ŠŹ’-.å"Ū-ų,żųŽņĻŚ&Gō÷ĪL9QŁÖ7F U*,śčž¹’H7fēŽńō“€ķ ū#"1é¼ ųģ§@õ# 2ł85©ų īšĘółäę2ųģž¶D9CöćūEåŅDóŲ.üŠÅųüźėÉĒ]ņā×7µī+Üō=ć#č+’ā!ö!ĪēŹéąćłĪ=ŗ'œ>öäń#Ž?ģŽbõē ":5ŌVćģóĻŃ4Õŗ. .öė ęō©÷õL ęčśāł6ڜńā%Æūžŗż".įžś÷ģöė,05ĢķCŽ āę5%ół0żźĖŌžį0š!Ō -7ńż7ēłļż ź” 4Žź+C"éä-īųÓüŻÕä]TØIģśŠµź×׿ŻóąģųÆ"ĆŪ.ļ8ńŪįłšĪ«żŠ“ņé/+Äķ ł!3TöźåŁŽöKÅüü,ž'K=*ÖKź~ģö$ķĢLå-ęŲäī]b/¬ģ÷²ż Ć@<ūā%$āģćżĆ4Ń ’Ś÷+6ńłKņ(+%4!ō-ūóč>õ •é)åÉ-OØ/¶ō֝nNÄČ(ÜŲ=ņė:ęńų!Ł™r$žņā5 ś÷ū&?š«Kč3$ęņ żÜŪ ļ5+3©äŹśį#:ļ##>-'+$G÷Éź$É(ESŁJ³ŃCģźņŖäķFŖ( R»ń9ļģž)ڬūįå’ä(ńל$žÓŽł€[čēĮóń04üäÜł6ŻŻ*N2žåć7ćźō5żüŃęó !åŻ(8O±!Ķ (łé*ŚūŻł óeē×*õ°ÕŲ ģ9»Ķ2/(9ńŽa9äĆ Źž ńč)Ų׳źSÖ+óīPķ!4½JēČĖŚ$ÆÕÜ:,Łń-žŁwĀõÜ73(+ źźčķńųčīŲõōå.:ĻķĻžųņ õä’ źßčö(,ōźš  īłüąķ õ’·)ūI#ßó€ÜżäņÖōż:ļīīō'īT±żņĻćŻÅ3ś(óéī" ÷öīžäń'ł!Ü ü÷(ć-ņīčc?ü°ōōŗķśå“Ģ$ ļ#ņ,ęąÜö ņžėł÷²ąŻü:8Õß Ī Ńéź±üõć+ øżł ! āČē1ń,s Æ2óü÷ė6>1Žģ?ü°÷°åīéĢ$ē.īÜšéģāĄųł.;5ńĀ źāÅ ¦Ć÷<Ż 鿐öT ’Å$Ų®Jß ųŅ6ūĆąHž/Ō¬ż%õdčAöėē÷ī47ī.$ŻG>ŽB-ōīķ*Yé"&Łõ· (*ģŌåśĒó+ŁŽ0ž.ķ2Ū - ÜļUÖ5ÓīÖģ#Z#čLb &ńųŪIõ )-ųłļęŪÆ"ļūńēü迥 Üö*ų" Žś ų8ńŗ,ö +żėŻś# ķóāöą,ķļ÷ēūōÜć?ź5# ŽÅżšĻ£ņ įčółūõ ž:Ąé2łūøžæ:ÓĆ !ē .® NOū6žIŪŹūļž*įņĻ%üļ8’ ’ē žjōåę-Ķ*ǼaįŅģEX±Ā ń€É£į&ó?öHõ/>§±$ٲ'ķęū æā÷54ģE€óīūōA¾õDźéūū+±ŁļD H'Pź©ó×č×čW²čŽv*.eö2!ėėpĖtÕõPóÜ Fߥü½.õüģ=3čūĒź&3ɦ’Üńę,óß ~+ōxŽÖåOTņ¦ķ"Šž+ēK01 7éć?ÓńIk>: üHŃā%?ä Śāż&yU.Ī Éߞƹó ĘĪū'ŚžķäĶüFųŅ÷% 0 1ŹąžS>ļ%Š<ū¾¾ ą#»׏’ÕÅūķĒÆEųęģÜŚ$Åč9ųÅé@ķÓ)ł(ĢŠ!ä-ōģĻ ļÜģģĒćśźģüāšĪĪØEšłĄ#Ūé--źŪõä‹“8;śĖšū®xÅŖ"ą%I’ŽAłśåĀ)Č$ąŖ Ļć1Õ>Bß ĢšµčŅ% ü#Ų©,ü/uäļF=÷0Hż½įųÕ„wI’Ö3Å<ŽućŃÓń·ė©ø>ļß!5/ųėš>ž ēįģ1 84Z’¤& Kž üT< ÜäÅóėŲģĄĮ ¬Ć'6 ~/=~~ļüĻJV<<¦ōž”v'Ć H¾ ŠōŅįĆłŪR¾÷Ļ'BĀŽŻ¾LĶĶJźźÆ ?Ź*h ęÜ 3"ķĒ##õüŅĪ„öÓ)hā %åū!āäč÷ń$Cźé’ü’ėā&īšöō„śźĄó*TąĻ%×÷ę P!ėč ÷ņųĖż“ćėĻķ30×Lķ@üį ūŻ*Ł*é’Bžļž5ōč#ķ& äŠUTµ:ę23Ķ’Sā1į1ŲķL&ę2ļ5é*÷Ōéö¬~īĶ(1/ē*ēź÷'’Bąģ2šéāNžnž&56€)ā üöłķč«)ł' ōŲšĪŽ6ņņŻüÓķä2š5Gå ęć<źū č²®)ŹSńŲöŌäńŚīüoęū Ļ©ž éęłõīŪŽīŁń 1Åšó/7ķöņåŽ@ąĮŻ&łēéˆZ’Āęł ÷>ÖŪ§ƒł"Ń óńüż]śķėńļ*į÷īČž#8®ĶÉĪ9$ŌļŅ÷ŻU3Ü5ļ€īżżČÅĖē1ī 莜Ķņ0÷Ģņ9$ ¾Ł.ņ ÷õ½3é’øņŁ’š&(īė#üūé׌·ŅĒ’Ć. Ł3"ūLŗ#° äwõčZ?é (¬8#Ź,öśŗDźHÄ# ąūżżÄ Ļ+”ķYŌĖKŅōų Ķ ą’ CžéįĶ-łöēē2ßBż%üÄŃ’E ćõ4#źś£,Ņ«€4Żķć—@~ ×ó6į7×ń·)ä  ąö8Ż$ź.Cė÷ßB3HFįĀF¼»ČĻFÄŽ#:ą ›[%5LžĮ·ōśņ18µWö¼&Č4$ŽBĘüÜ,1ėĻ9$>ōŻūå¹ŲŽžčŃ Ńß9š2ŁŻ$ģ ÷+÷å ķĘåńģä#+ bńV(gŃ čåŲųņ3ä* üéėŚģĒÅņū'1ē6B0ŖģÖĒĀNęŚõ TÕ×ėóź  łŽéš'Sæčé6 Ģ A@# /ęBś.#ū Ź&A @’üpēü ąĒ $ēöŠ"ó(ā”ņķŻįL4æw§ŽĮõ ó÷'ć'ęūö°&ńÕ-Śę,ńģĄēś÷śĪ(Ė#Ė!Õå*aņĀĀńĪŁĆ÷ń éš½ļ-äķŻķ(",]ńOāģĘŚ* ) )÷ą& õ ×`ķ!ö Ż=į*AlF ŽLī¾āūźŸC2 ęśø= Ī$Ę 9:IłŁå9č’9~µ ōń/"¹:’’īģĆżą5üEąŲ#kl%$ōżÕ+õO:¾Bõ/w³ @ÜĖźm īż[ž[&ęö3ōĶŠų<½ ˆ%’ž:¼H'ē9ī6Ū뀄füņ108žõõšžõķ !śKłAÜdą“įą<żĖ.åŁ÷:ģ4 2Ų€ŗ$ÖD6Vö-Øó5­ŗ’Ōņ%  ĖŕüS@óÉįŅŪ×ņ$“ņé$Ę+ū.ųüčŖģÉõŚŠäąL åĘ€ĒŠH1ĘL­'¢Ś[ą4ĄĪOĶĶéē=ēź’·“I^DSü»Ÿ:įYńÜż4.¾¤åÖō!H Ÿ22 ®¼é! +ó—ÉņöŪąĖ`éJ2×.3 NG äé’ĖÕęöö ¦;8Ėį¶ß ŃĄ,+*įčä…ķ¼øš;ĀVāÕĄžöŁņĒūēµŠöģ+ó % ńžüīÕū®ōÖ(䣵 ŽśÕ».£ģäö=ī«åäŻJģń/Ü;ʉŒō¦)ÜõE” R”ąŲö; ¢ZۚÅņūŠ1žrčśŲāł#·ƒęĄą E©H?õ¼©ī&¤óś$ųŁ Ī>śāÓŗįąõł+ ž-8 "éį$.łīŻßäŽōóü õųųż½äšź÷%ó’ž čüńÓū’’ōźöčż =*ŪŁWžšģ ŸŌśļ"ūēżŹżŽļżž×%Ń'ė÷’ŹńEéļÓ厞,’ŻēĮł ō!é÷/łīźģóź"õĆæąļųÉ’üŽś©ōś ž÷ķõšśĻ ōįß śŁźüÜĢ÷Ųōź'ā£łäÉåń8 č»¶šó?¾š¶ŚžõüĢļŚū>,-¹ ūę»(ļšŽŠććš łżéūōŌŠ3āK) , 0ļ6ē( ū€łćÕżĻĶüĆę ąFPšž#&» 3āõó¢ß¢ņA%žüįö¶Bž!!ūū ŗ, ß#Łų Ę Ģšūłōā-ćÅÕ)&ČŚļ,“:śäŌč÷’į' !Jųń 4 ģ õ <óC·'?bļ÷9ę'9ü ZĀ$ ć9; &ąéĻćgČóš;Ūųģąm±(ć(Ī$üĘįO/uö0ģŠ6bōóé ł+üčēDŒĮń%ė’ŽōŪ÷ÕõłłÜę ĪłßŻĆČ!ģ×/÷®łī$5čxń2;ÕE ę<É'A'šÜ% %Ę'ōńO(6ąT¼¶Ū  ÷ˆīģAKģūĪ  Öü )ģļ„ź!Ö&Ūų ņŽŽ÷H ņöŌśóŁņ-'>5 ōóę6Ī&מŠ;Ęųō%ć' ää —ģćņžų ęŠé&ōč#Cłćõ,ėš#ķŽ7žõ9:žżJ9ö įĘ#ż ŽēĘ&ĘōżåŁM –ąõŠ*RĢņļ œ-åśśėÜ Į ā#ßŌ)Ś ćę "ī÷ SŚž!ļ)ą ņōż öÖJśžūęłāŽóīśŌņųč ķōš Īć+ż ŲŻąć: ōŌÜēå å į!.ņ’ü& ņųĒéŪģ"/ŽŠéóĢżę(/Äżō§įų÷Ųüżńčōļń5ļč’ųė ÷öżķ ×ŪŠ^ųžēõ()ėŪżŽżļ,ŻŽĀæßīÓ č?śš č ÷)äļį1ł»<ēÉKé޹$Ų Üś3Źū=Ń× ščĒēX@>ß^ņųōņöAĀ3ėų-Āīūż+Ź82ņóĻ'2~"ž2’'NåĪż<,ōūæ$) ņBĖĶ1‡4ģw’ĘöZž·ąĖÕōX-éš8*É:V7ÓĶdł÷ŅāņšĘßĻŻ;ć<óå#ī (2dś ;’*Ķ!:Įö-ą¹ß/Ü ņ?ÜŅJżÓēę’×āņĖ=6üēūōŻ1Õąņü„ >m*@y$¦ņį—@»Ż#ŃįŹ6;ÅiŚŅR!#Š1īžZ  ų;H <å+óęć:/ŪŲzÅėņ - Eśp*KØę¢5° /ęÄłX$ö šSõūČģ×bļÄ-ē ¶éā— óŠłīŅŗ[Ųł<é+D°ś'jöĶaC5 Č 0²;ćCϰ!żÜ§"žc+ō`ć.ŻĻä—å–ī ε ģG“ē¬Éęćł„ŻéųYIFÕ4ćķ)ń,gĻüį°äŪĻßļCłĀmųļՖPį Į$Q8Ņ—2VAŌ­ ßöšOަĖąü ąüߦļ ßŃ+ĆüŖ,æ5žģĘ X¾Ģī¬ļŻ1īm®-ÕįP/=Ųżī5 &ąļ ß0 <%ėŽŁĆŅ Óū-Ģńąį’ĻéõčŽBČā0/Žžųõ!×č ; Ž÷ Ę1öå±ףŪÄćĀÅxÉŠ?Ä śFœžĻĖ’)*÷+ćĻ -“ļ&ų-ĻŌā&õ &BŁŲõč5ģīč)9ņĶtVźŌŗ$'éé:õ5'³Ūāęö9¬āÖõń%įgīcŹå„×õŖĒŽZżöÖ"ŚųfóŅåčŪļöņ:ūš*ųČóBģVG$>õ#ŪI“Āęįēńē&ńōÜÜž÷¦ ķÆ"Īé:1&õ-,Ū ³õÕž’ą$ éÜā=£6C’¼-ģ0ūńķ Äłóėżē=ćķ(õ IÄ- žÖöž½ņéę2šŠł8Üā*81ŪķŌįčżéõćõąéÓųžźł! «"čłL‚óżŃ? Ņī ×1ż'ź„ę$Č×ōłłūśéąŪėäõŲōóįū/ @õ« ÷īĶē÷Üģō"@Dźéų9ö'ÓFź9Sé%’ !ŪZÜ$*Å"Ē%§2*ćõŪŹš<Ā+č6)Š ÄąźłÄ ķW+!,4źŪ²"(%µCåꀷņĀ (¶äÓō¼=ėŁźŁĖj' ¹&ā41’ųĪż<ī;@’Ž õ!ÉŚ®å.;1Üé€ĒļT!€‹„ĻęŃģū0ģ1œõčÅ' į&!ĻξŲ2'ŠŚ$ך“Ś<īHńÖ¶ļŽņ*8ķõÜżÓāÕ"Ūź"óŚŃÄß&į ēEńŁŌćė:įńćą%H#äŃōŃŽå-łüŹć#źŚśń' ž2źėėżŲŹ  =©] 1å Īžį/Ū÷ūå#ųŠ+‰9oįĒŌŁāż’Čßüķ)īÕĒQ5 ś ļłĪĖŠ$,&&ē"P (‘÷ŁßBJéžńŁę_'ßBĒT-õūģü.¹Ų Öī0Ż?Õ1J“āęr Ä ó’ēēĒģ ēżõä J-ŪŁó*Ū +"öł:üāĘö ōå ņõÜś1č .łī÷÷šžŚņB9ų AśųWéEBł’$*4Ā)"0š¦Äī* ö ®ŪZń Ręęčóźēž;€ó2õŁ$č Ń’öČó~nÅøŽ,ńźÜ"óPīÖ3#żō>üĮēŲBÓń@’±ļųöšģK,I Źå_:ē.&ņĢĄ ķĆļ$ūå¼ųų ēōķĪō"§ź'2÷Q śśiģY羫#D-ćč ĘjA;_æłÄ. æ’nŻ éĒõŽų·ųģÉ­ÖŹ)ó'÷!ąÕżģøę Čōø’ś[Īø<śżMļžÓĢÖ+ö!²ÕāÖäĶŠ1!Ų,"4źĶŃ Ųžģņ ĮĄķØI/ į,)ŻöŅÓŅī$%$fūķźÖąįų8ć 7 ū-Ēķ "üō0Éśéöõ üÖż ģĘāö$čźīü5CĖõ1įįöĒĪüģ%ńŁłä!!½²ēó ėĪ÷žōõŪ åćņóų*’āÕF &ÓöÜ-żĻÓ)+ąį÷€Ūė+’ųĮ`ļż ę6ųś®ņČČķčŽ!ōżļ ś0K!ĻŪŌéńī,49Ė''Żü-õŪ÷ 6šśģėć%AEÕä.Nå ,Ń»Nā« šēüŽ Ļ:.#ÖļŪ5ķ<ōņ;0Gõ#ź!ī *ėĢ&?óąģį­8ēčD#+y9Žņ°ĻåćöN6åīč) ī3% 4 õL&ē*ŅŁŲæ-$ ų(Łš öļŒ#ĶJó@źūźīå±'sÖ%ĶūĪóź3Ł4ūČŌżż2ļŗīųźł®Bźüė­ ’§æĢāčĻž^«$& śÓQU„ģčÖå¦#(÷ ź:&ńÉMiCK -ƒłŠģüē,é ż~KNö= 3ņć īīĻ2żC "÷•ķ ļSšóą¦ÕöõłźųņÖė"4>ģ4- ó8ś›ķי6#ņčąš¬ėĖūĘ 87€S% Ńó ¹ąõļv ėāÖ Ę L>,ž’¬€{šö1IÕ$ųü»4€Öž~÷hūżäź=Mʂ#ČJ/Ö-ĒPĶ9{’ĆéęA×.ś|Ļ¢āś«“ņ¶"oĪŁ,×h Ł5õŻ;€Éß0Pó1ķŃö9Ó'Ś}źŻ€ńŹ>ÓżE@`ķčóT“Ķõ’(üżćé×Ü`0ė—׫I2/=² ģӀļā,ŌPÅīvÉē¹'i5Ė/ś%,żödī7|/€Ō7ćśĘāęÕū6ä#: SęÕķöĢ;/0 ķßšŽ'’&čšćōäįąé ꜣ×$Ł!ģńųšųÖŌ #é.žąšųš*ō¾Ķń ŪŽéōéńģńÜ Ö%õįę ėŪ$»Äå¹ü§,ī (½×ļģ )ėŽä.Fżäč%źį:,č4Aæ’ŃäåŲŌšÜCŁ õÕäßćÓē--īķęāä÷ļļš÷ÖNåĻŹ! *ŚDüąōĻśńDAéĶÖė5± Ļö// ńė7¾5ż ķńźż/šޟęö-óóĘ č¾ęŲīżŌpż& ļŌå#žŪ €Śė" U Ę »ZóŅę\6 óéæ,ķŲåÕŚŅüÓķ’’ PŽ "ų'3ō@̼ĘŪź4&²ßšéõ Ųč)ę3÷(āŪ į’čü+č%)*āµ ö3ć(žä#÷ ūą,.¼ ä÷± 8źūó ĄÓ?˜üėžģčļš$ÕĢķėääš%ģŚH8ęõÓKń óĢė ›łīäķµÕĶųŪŌŁ*øŲ|"±ėū1½O źåŖśöÄ«éŽųķ/ Ō(Ć!ć3öš šäēśŗö! ą éÉŅīģb½ŪńõūŃī 0ś1ŻķM8,  ä&čšśļ“ŹÓ3é’°$RĻ"ą īÅ×&ģč’Ēß5ć ų šäźėŠŁčē@¶e"÷öŽ!é/7 ×$+ ėń#Ū2µōōē A8ėų%ńMÅ"5Gųłś{u)"0RĶČėŹ õ1ø:ŚūåĶĄ<õž "ŃjCÜ3$ė(,+ .Å%ŚŻįėńć!’ßō`÷»üUūĻRūĢ8õįīī8ń2Ö`Šģ, ŌęWåŁčÄįN»`(ōŪõ&’qŲłģהöāĒĶĀ'źķĪį=0öńŅ ™4÷Dīüłųģ$M*"@-JH,ŹņŅūū”ÉÅŠÕįłóų@& µZFŚäž!é*ąó’łķō!Ėļ±óÜH4īˆČ3åóĢĪł/ź"×9Ņ̹ūŌżźŪPūŠāåü‘åž [³šõKÜż³µ;ĮߏõéŽ ŚI÷"ö+Ū$ĶZAóū~²ééKōj'śūš¤ŌÅ Ę·ę#ö.ŲŠ"Ģų1°R0KĢDāךłō1ūä)sąALŻ!4ķ ĻQ(“ßšŁ*V E"õÖ3ūØī¶Ėė;ēź į(ā»#Żś?Õi"¾ĀóĪŅ»ø1æ!ēąßå WŁĆĮÅ@L,ę īOóWÜHŽÕ3ÜåŗÅ3Ö ų#ļ%ų¢ÓĖ Š vžÆßäó•ü>×ÕĻ ōų÷Śųś'ÜŁRõė;łż'śĶŻż %"! ē!š Žēž4ŪņŁ÷ ’ś ’2ėõ ü0’LšęēńšÖä łöś%'ö÷ $ ō(å!Žś%īńōŻ+ų5’ėjć,ļ=Ū$.ēē6 0 :÷ßļ7ß’Ļķ*2 Ģ- śāńö1Šęż’Ž#šó4ųó źņąąčģüćųżÜ öžŅģŌŚ&Ģ 9EŃņū żńķ­āū :ļųōćņ ųōōųķ õŚ ŽŽA%łÓ’Ņń'7ŽŠ$ŠžŪŽ2*ų ’&éó ×(ł„įL$Žæ%Ų&{Ń2°ż<ß#Žżė«ÉūMÉėŪ3×)įååō ÖōćēĘ,Ī ū9Dń6½Ų ÜųņłÕ:Iģķ/ĆéÖōÄ/Ń(,`ŁIšŚ 3 $0ć Léžėęļŗ$ BÓŗ’ū0öō@B€2ōDzįń)żū °ß±ųīŹóR HźŃöŗ:aæ&šš(ĘÜöåĆ3ŚŠČõ“čŌé(ņ ü€B€"łō¬īoŲįŪ ’ߎ«īG*²I ŚC ÖIÅżžēŪ’ń!"Š3"DTōņ*ą2ēõä÷h:&¾ācėĀŪÖP-Oo3¢æ+» ś6ņė3łžŠØ-%€ŃĘĒ b“;ūūjżßŚą&’ÖńĻ."å?ׯ'ä Ö¾p!ń>BŽ šūąą˜üė™0ā÷ł čōdūž4 Ł 3?ō·ē ś ēģśģąéĶæĪÉóIń€.Īź-YŻ÷ŽęĪż ūžžM"0‹ö öņŽĖō"öł ’`ūšģČ9$6™ųäÖāģó|į)å'ŃOåžFĶ ÓžcÜŲāL4ģC÷ļ łīF Æ9 %6śāüU!ļėĢńT,Ī—æĒÕ$ŲIĪžś3ļ2&Ż!Ö š÷G ČX@ ą/’$Ų öąŁ.óIć†ĀėļęĶć¶N<«%u“5ź€  =ż0ĖĘęŃžß)ŅÕõBž­ł>/źĶ0įųdóųųü" įÉæõČÖ÷)P­ č‚0€ģBčīŽ"BI»+‡ķ¬ūß@Ćļ Aż1óģ×č-öūķ ßćóŲūĻŹę?Ī) žśŌ$ WŁģE¾Į¼žó ę$ō3ėŻ!ń ź-3ń #/öéĮėė’ßų#WõźÓüśū’ā!šī4 ńćųć XĶžā ŅŲŹ!Ī$üĪćó+ ?<ÕT')Ļļ²ÖÓ/` Öäø¹žķéį åīŪ äłå)ŲūćžöÜęéŲŻ.ńö,ŚŹßń×é(üüį’ūōŪū čė(š,3 ŃżÜųå 6ņŚ$Łõį¹įš9S€ÖŚÅžį÷ÓåwŚ «ķ±Vī%ßōõąŪäĻ’×8Ė i3īæ2 3ż½&ß57ßōæ3óżŲåĖŽāó"%G¢’Čō„¤ä×,;#•÷ėć “4šŚ ×LĮÕ ×? ŁæįśżŅżöŪÜōń<õŹ"łū8L ū÷āē¶Ź`böÖ;Éęó3ó®ēīŌŚ€Ćźźņ9śŻŁրžķŪ1 0üT® ė ą9ś Žģī"䤒ʰ*ÓšėŅ -% ÓĖ'śÓõŁ õÉÅā!-ļG õńŠńīōįżČĢż÷į!?>ČņÜD< ń+÷æĖ÷čźŃ޵×ō ėńčžöKéE ¶üŽėęĢżō%Ż#čėD, ģ/>Öš‰ÜęńV•ÄłžīäĀļ"&$Öō¤įŚ*ķųįė$ńČķć“ÄŪQ¬ń*óæ>.ĒäĶ„Õ7śä9’1 c23śŃóóEųEü€Dńū’÷=ČIö÷ķųŻŚéüų!ūļųćóŚĪĘIźš ł %³ĶęĖ-'UŲĶź/ś·4ś’'fĻÖüž0š ĆåąĀ āéń’ÜŁóŠóĢŠc‚.2 WÓ+¹2bż!$× žßõĆ÷nėīŻé?ä śōąłÖ aņńå9 .ĀĘüœćŚĒīüĻEH’ĄĢźŠ›Ōį¾ēą’LŪ~1*Rōė'D·ļX27$žå² ß/6ėėņč<Ł÷®”3€ē'čźüf)Cł>l'ķ¾8Ēƹāö ś@%QŲŻńĖ#9ńēį ääŠįˆŌĻ3%čśĒū9Ņ“ąč·:ĻTīMŗ÷*%©”;Ńü»ÓŌĢŁŻä&Ū 1š.Žüį8¦üćżÄļĢ3 -ö ņ¦F%(~Śõū ĖBжųžĢ0÷ęśźöę Ķ>ł~ūķž?Ś÷ %-p#ē;Y.ēß4 ø))ųņ Eą+0Žģų·EžÖžšŹ ė,ŌEīø3"ęēą€5ßē®ćÖ šéŁüĖŲ5ąŽ2ņčOģč„#Ńńģ ś[÷ÖŁ Aīä='(*ēU>Āöų œ#Ū€d”ĖņÓ"LFįŻÜļ&$×'ė÷'ū)1.ŪÕķķążŚ«ź9ü ¹Ē 'ū½<įFŁ ĶÄ +ž³ģI ņīźę°8ē ’Łöņbö>Ŗhæäé5&ąńćļŌĪåź#1ėņį;ĢÉ'Œ6õū("ėÄ/ēķśą"ó)’ö,é ģ-å Æ9ēÆ ÷ķ ?ņõ×%%Õ¹óźģoėēĻĮ§7ųš-ć-ēĪŹ <.,>śrķćÅņńA°õīāŹōüJšŃ_ŗé7æ ŚüF92ŒVŠ ķ’Åīķ$Ś'°ę!žå? ķēÓ>č  ß60bŁųóü*÷ū Ė ×ŽżuKŲńšų ļé‹ÅĄ6!©Ö+Ī#G"Ä,ķē*ŗß€ÄdŪŌć”äKńóFĖŌ *Ł’Ųæąę)°ŌĀņa’¹Ļś/įńż½Mäę ĘLF’śH×ūźłņ?žų#*Õō8(łū¹ģųæŪ! ­äæŃØ“-÷ā2ÕCÖŅ6üģÜÖéš’ čķĶߥ¹Žėņģ÷²ŗł(öųū#ŌÕåń4čęć&ü ŚņĪ &Ś7é/3åå/b —#óE;7) ÓŁšķī <ķü!ź5Z)źĢ&ś÷ĒęŁ%5 !÷/&, ęõ3õāź%Ž’ųĒķż‡Bų ļüC $ Ž’!üü »ųķā %ļ0’PÅŠŻżģ€ŖńXįšćÄĒÖÖ°Ŗ1® ķ+ėeōdŪš< ēäĮęéłėœĒ õĢ"63īśxź“~Ŗ%óēfųś¦+īĒ ųŠ…¹Ć(Ķ"#}ÄAAē³č&yŁ&łžĖ1Ō?׌+,]Ž =&ī2īŃī'&ó! ÅŻBß"#$ŅĪ®ś ⩟ńŹÄ³ßS€ ķ(ŅŌŽź&ĶĘ.5OžäXž'üÕ2@ ¾F€łē5ī<°[õ½ÖÜé·ןh3š@ŲKѐ=ņ—NŹöõ<č Ü*聯3ŽHÄļģ€ēō¶ńĢżäeÜüÜĒą8×gåģ¶Õß®-;­ÆID/Ź3‘ "µS.>W=oü€ł½ŸvÖuÕó£Ł@CÆßż€ŚB·½“PѦŁėæIłųŪ YLDä`*ūLVͼĮ€9õē>>óõDėöHƒĄ³­Oū Ģ åóģZģ+&ĒŁ”’9ĢBśµģ4•>ß2ößķŻ÷½B®ńćš īžņ B$Ź9²·öĪō+ź+ėcä¬?Ėåłż7īÄ'|IŃŹüm ø‡Ō-«2ßĻś¼4Įqoēä½'I.+Ē:ŻęŚņ™Õ#)Ą&& Č,ÕŃ{ūē ĢĻ ²Ē× ł'‘ óī óļŠ÷éõžćĀ&žųīéEī×4ń ž»ņļšĖł$Ļ ’žģę ćĻ śģóų šžš’ś%ūźćõņå óśõ żŁķ%ÕłēōāĄ9źėäGīżüõę2ę"ķīŁįö żżļśżåŻšę#ł"ó~ū’ŅõģģčÖž [&ś'üś šµōū &šōÖ' $÷üųÜöå5%ßß2Ś'Źü?äŚ Üķ$įźÓŌŪ׌ėEęćė5Żńól“é’&÷! śö%%šNšcč0²ž÷%)Bōõńč÷÷ųŅāļż ēąō’Éöėż×ß7“ßźźŅć8ŽČ&÷Ļ@ŽéīĄ1ż ·ūöø!ł¾CßÓĪĖéķlģżżCł ’1źŲ6Tćā3įņęō óä7 ī8ńČźśč½ĖGīĢ<Ź2!(öwą/ėšćC³÷Łå&.2/.&JņŁÅ+MģįĄŅ^õéģ ŖĀ’8ćń%į:ŃĖķaĮņ÷ś:ŲļīßćŃÕ9}Łč) źģ_Ķōņą:)Iö ”Ķ3Xńō6īČśŲ€ćģI&ķ%ī+"ó”½Vį’ü ĘmT%éĢ|%ōĪ)7 ÷ė7’śźŁßż³< )€’žÉ,ŪS÷ū>ųŪSџżĢÆŗ7æø€TČ/’Dŗ(8 ®ęæųķė–ōŠc¾ęÉę½4¦ūŌ<÷)°üĄŲžŅ')żŚķź łBß/Īéļėēך6ōļžBō ^Ū,6ēźś$øäō¾ļļ Ė óŖē*9õÓ #ŗßāė4šöG’ĆĪ  ĒÖ ŪŹšQžcäżÖŻę’$ÖŁ_äĆŪśćŌS$ŗżńZÆ+öŌ°ńßņ)ęÅē Cąģ\,žŲ>Šģ Mćå¾ļ' Fł! °ķį ņ’9å€ÉÓ֟ó3ōŽ#ÆėÅłū8ķF īē.ŚöĮ åčŲūģ×č-Ī2 )Zó’[Å* 2$@ź‘ē+Öž2KÓāLž2ÉM(łą)å1ōcśčż¶ņ °ÖįóėąŻęß*łłŚ:ģ”ķóø0 éų €Ēš5łšĖ wąĄūaüö ēÖJž›ōéłģ ĻÓąĪĒüļ, 0šĆ»÷÷ŚEa4,ōź’)ńöź}©ĖŌŻś~õģåśĪė«ļųŽ>Ŗ)=)’ĢņĮéķ łīą›+ļčŗĘīęļŅī$śćāĻäįāęA3õŽ" ćõÜł2=!ö Ó(ń%’ł(żüū ļ Ē6’×ķńł ēõųŲå€÷Ŗ¤šģ{ŃŃ^ė Ź’ž°ŪĮõTū>ė× (ė#ąŪüβŃņ¢ļäų,śęßó(&ĪVŪn öć-ųź`Īé7ßĒŲ)Ś ņ,#öĶć̽ūč.ņé ļõ'ųõå²āōēłĻāļŚ9ą 7ųņ ćńĄķ0 ēōéÅóõ)MÜ÷ßüĖå’åäŹœ½@$ ū5üń ó-å/ŁĆóķöą:ķ 3F"åÄĶ ÷ ŚŽõųź’#¾"#ė>ĖŌė ēēõBóąüöŻĘß÷÷ßążńI2š’  č&ę±"å+żūĻįŽ5ćźłó36’1łü0õģĮ»Ōžō~óēŌéź<)œøļé5Į ‰÷Ųā+ĪŃ ōģ/ÖĄ’ģņÕéļ(ņūä%ģē$ž6Öį õ ŽČą‚ź’ą/ķą$ ¼ģŽÕ ,ŹĒ$ķ½ ’ÜŅ ś¦€üÓģįīŚ7ż«į źź ŠØź+śöśķõŹ2!N©ōŅF ķßDüŽõ!ė€źõ#:¤ āėń%LżB§ įüąŽPŌGõ Iļ [Ó÷ ü%LūĖ-Ėß±īlßÓŅņBjåõŻ»äÅ,…€Ŗ¾üķöŲŹķķķüĮ’ėć&ä7÷ |ėóŗ’):Ē)ē'8D˜ż1ü—÷Ė Š ōņźĘ ’ü!Ļõ K śä:ĘźįÖöõ_9’Šņ&ś U„āōŲÄ=' * ’Č ńėČķģŌEÓšüÖß’IĆ÷öĶ÷oLµDQ’ģüé?ā"ū×5Ó#:süœē×ć*ÖéÕGīę 7 ņĮŁ!V)ļ4ģ@ ųźĖžš¬/čŁųüŌū%Ļė õ2PaķąźžäĘśīĄ 0īęųó·!ü%Ø#%ūõI<,ŚõĻ ®*·é°ąōęš:͊-Qż äō%ļåģ,#Żā«ž(+óŌļŃŅčęKZ».±,$ė@½ėśĮ#śąPė6ŪĀ’Š$ ŻźÕ-ĻĆėń6L÷Ü Ļ"’ ńóų9*, ž÷Dģž ( Čß’lHŁöŻ÷36=ŲĘCõū÷×)ļHŪ¾¹äŪż ü ³ÜÉ7ęčźĪ?ä³åü7ŅL2²uĖ=«Ļś"åŸČņļ éłŪóļ1ģįŚ9é.‰śŹ ņü# ų<ÕæĒß$éū’'åóÓH%ō A’@+ģ5ā)ń@ŻčÖ=ęą’ķßšžŚ ß15ž6ėń;ōē"č& € čūėŻę"~ĒŠÓÖņ(ė‹’#E"ó ń,’µģįŻś&śķ ÓP’łŖ8ܾ'’( ó ńņ|+Éśō¼@Öäśå) éw ą.)ńŹ ė>ūŻß’ķżķõęĆŁśČ74yŠ]>ō*Ü+÷óŅ+'åHĘöJƒÓŠ£Šē2ńńųĢśśęā¹Ō=ł%-īQä®Ēä’Ķü×÷śņł&ß5ÜģįCš%Ś=”ö˜ĢLą’ćÆҰōÜĖĄćŃėČ˰ĆŹ#ø¼Ų×°ķu®Õž#äįźK¾ęāÜŗøŹ7AWóö tžEóēńPÕå-ó!ł> üļūüįūņā)=!Łā ‚č÷2 × š$,D]0 žøPŽŅ »čéĮ.÷Ķ Ė8žį Żčą ļó ųŹéųēę ģrÆĢ1łn \ ėrć×<ūĶė¦2Ü(Ńī›ōļDų(öŠU­ŽŌ­°MŻ7ųČ>ßø¦1'Ģ"Éiįš)óö*¢dćÅ ü‰Ź¾Ż ų; +ėŻ ’*ž.Ž÷ĪķIąń Kš:Vųœ C-Š G4»ųØÜ!ź#ą"ųŚķšš3Ž,ŚČö6÷_^č8Ę×!ūĘ7 ī-Ņļ÷(Öõū½Dō'%. *ÅHéöA &ģÓų­;ųÆ,¤ ܧIG 0÷ł ųÖßēĖŗ ź Ö$,"GŻŪ å*&.8.8/ĻĆL7ńųļæō ś=ņžłS éļū˜Č*—÷ŗ°VüÜ9ėŚøŅĖ6å®ß’A%Ģūłė(2Sī&ĢBŅ,@į­Ń ±Ü­ā<õūäė-óNļ?€HŻśŃFß÷ä.€ :ćŁ÷÷śų-+)ńö/׳ ęī’åÜĖØ-źæÜ &ū1Óē āüį7 Óā’ļ.>ō÷åąŅd·ڼž üA•TDŁčåó¤ $)łš#Óēīæē+āć¼Ųõ÷Ņ$õŁ$ī)ūżŲõ÷×Ī’LżÖ5 ü&ü%` ų÷ŃõĘōē`?K/#ģŌß%š÷“ōō­É#UĻÓęõóūÕ ·žßłļö ’åļ'ē'õé+ ē&ķ.š5÷-ąńŽ5Å ×üōŠŁ éņ6IąŻ/ćØÉ’a¦ĢS÷Å ­ØĪ $į2 ŁA’&ē€įż ÕĻźŠ‚Ņžś üԁź,ŪT €p×&ĖŁ2éÅęsĘš ž€ķ G#;üŒ ß’ņŲLż?ÉźĶ ļ$& Č€ūė÷ō"Žē?åų$xßėŁą½ Ŗ3÷0ń€%)Øö'éē%įŻ’(”Ķīõ Ž Śó=15łĆ śą;*µ/[öµšżJ;’E+7 *ü恊īĘ ś %.éų " Ė÷µįčŌ*ń0Æčļó;<Ńī1ł ä!ß×čUßåėźčĄŁ¼-’Y54ķRŅīÜļSėśāŒCŲAŹ@’ĻźöˬŲćLż‚Į“ć·*ŅŠ0įüć5€Š€ž’ ķōN(ūčrõėśß*ŪŃöĒPęńć/n2éį?ē7~žJü-š? ģ+ ¶Rް0WĒžńā&ö4ųŲŻäĖÄā€Ž. ŪėåćRéĘ’ó"/óēÕļ čąĶBéµó/Ę4Ä"» “€äŠ’»”ō"š%žęŲ 0óŃžõä&/*Ņ>ęäŚėAOįūōŻĄ&žļŻĆģ čõė ŠVó ŵ²ēHń"IĢ’[%ąņń&M 5ö`ėĻĀ ĪõÕÖ"ŅģĀCķĻź%ō’Ņ 7ééŻÅŻ.× 1ė*Šėå_%ś6ę1(Dõ7LŁķ?õó'éžįäėóęĻ"óTĀī é°žA3H—ĄŪĄ"8čļŻ0I6G $š œ(óĒüOŃ'ŚŹļ!ļń Éć ūBęčż×+ōŗAō÷ öń*ķ#š&įÓšöŪģõ3Ė*ā· ųź—żč0÷„D;3Õ1Ļģõåōf5¢$Żē ņ2ŖäˆÖōćĖąę *KŰļž:%ų€ŪēĮšóūüčņB%żŃżŻ ū! ö¹Lö2 ėęłK+ĪĪ,ÖŠÄ ż»ļI°ćŁ ¾ Łė čī1ė×Ę’1/ė ŅķĒĒó-ÄćĘóŪĢė»#Ō~Üõ é<ō¦ó ·¼Ó,ī;#ś Ō§×@µŚō õ¬ ūźÜ%Ö"Ńżć ī /ĒÜ$Õø’öņļ)Ķ“éėėĒ7 Łö’žņČ Ą óŹ łäėÓÜõć#6åā¢ļ÷śīµéüųå3ą · õDųņČū+æ“ōG ś ŻöŚč°*%L)ōāčŪŲüł0Ģ5"`‡ųńóēÖjūxé )) ķŪ +Š'ż= ž9,āÖB Öē¢Öų #ō žEŌßų­āņ+ErŚč^ŚšńüL€(NóĻÅĪŠŲ 1õå9$Ń+ż*“å¶źöC(ŪĄ "÷ HöI4äŪ8äŹ ķ—Ōā,*VąŅĄG '’,8ż-äŹ!Ö)Š'Uėö<­-¤Õ¬ `ō)-ŻŲ=_Ńä+Ö 'ČõĄ3ō² ō~ŲźšæĢٲ1Å ü<āęŽƒįć ųõC#/ ,ļņ ģń!öĻćüć; €ģ1)G•üéÖŽŪÅ ,«īķ8”'ܼ2­„%ŌįėėÖužÖņ5ąöęRH<±ņ挥śøĆ€]āō ;Séó«c·ų,Ź!Ī쁆ś?ĖŅ·:é×ĪQūīö3 V)’Śś"éį)žĘņķē:Ü ė*Ū£IåÉģóŹģž'mū[Żņėā7Ķ ńŁŌ čÜīŠčŻąī* (źņÖĄåš(“2:%W*:ųĖŃ’ĻóéŲ`ŗē7ąč¾Āżśßõ-G–ģ 5ū*Ņ»ü÷Bž $` *łų©[“*’ó<ü3^Kąś¼ļü ėR—ēģŌŽęŅĶ$ķÓ,"Ū  *#1Ģą§Å+“:ĖĖ] ū͊ąśå*˹ž0 ­ö)ōͶŚį©ź žלŲ÷šŗgüŠü²!Ķ封Ö))=ŪZß]ĮśļīqIĜåō$ų(ś $3 ĶŚ¹’ŪŲäōÓ’Z$$ ļē§,ńļĘFHÓųDéāB0ōÖńCŽöś÷ļ4;žģŠ9’4:õ%ųÆøė1ųł&$Ōå g,œē·ųŽĮŌ“¼.ņäLāł(łńÜK7Āņ_÷ā>äA6ńŲódä%÷·ćöŪė+€žTČ ō”αśķŅ€ ˆgō2-ąę‘J²İłųĘšų ō* ķī›ĒČŁęĢŻ.=.¶.)‡’ÜżŃ ļCė” R€7$ę“  ńÄļ( ė (&ŃżżčN™Š™"£%Ś;ļŚ >$/īŽ +%ö é÷™ą9\ōäėĢŚŲ&€īŻŃp"‹¹ōāżųŪ÷2žę×+ņK¦WP€X’(—Ųõ—ū"ž½NŁęé*ņ°e/ äNĻņ9mŃķÄīĻĪõ2µĶå=Śżŗą7L/gÜ)×6ńų‚ß35e ,āDåŁ ,ąäĻųŖŠś«P²ūóčķ"¶čŗū3x€“š×7öŠĀŗBį3ŚÖ¹'’ŅĆ&<ļüĪ\ ų¶6_ܳ ’ųąOh °" Üūūūčzķžō×:Ūņį# *N'Ź!é *ė Ļż ł!ģē?Åōļ9ūų:ÅčK3Čßģ(žü ŽEŪMČķž  õßēńņ)š ¢ŻĆŹŌõóĪ īó <5Č'/ō’Ėčķ, ½éŅč»ęõüē¼äŁŁõ}óÕAń -7Y,øķ½æß!ęėģ ŚēHū~čDļ £ę ÜļöŚāŁß õAŚŅŅßōö Ų6"ŸųÜ%ū³÷>]Lłž$ŗšČõŠČ#(ĖŽźŒ4ę'›ų 2źÓźņžÅõķ JŗčżäåżÓ@łŚźķü 5ĖÜļż0AʼFżŹšŪ&[ųŹčäĖĪ9Óņ ą-Ęō3āDK&ŽQÕ·“”üö÷įźž ÷įńÜū )=Öļ€7ł •».õÕS$8.ü»łĆ’ņ›Ņüśµõ’CEśX4&tĻ+*Ū€ų®åś+ĘŹ¦°ęŲ÷õ2å7Āšųźä"å>ŗ" ōĪo7Óīę÷ą’ć')©"!1f€+éįėń GÓś0'×É*mį,%ēņńįĪõĆ2@Uü’µÄłō!éĢ ž1ü¾0źčź9ķZļ3Ėšżöēėõå ’÷ŲųĀęöśåōÓö­D Nų"(Ažßš$ @č=G;ē’ųßč8ńDīŲė!ĘZšśÄ ³EĆČĆÖōŁŅś ,öōńįīēį ē× Ü `0Ųąįżų)óāY÷/Ķć>ę"ģlµęłąŚ»źįü €Ń ē<ö?*õÜÖčļģ™ņŚćÓ¹õ(å)ųņ¶š »īć"ų<ā!ń! 6’ŒŽŸ»ŲżXŅ"aš ųć÷ÜģĢč®ųåżō ŸGüü ŗļūŲą żä ś$Ӏ 3ÓŃ$ź+-.ä:DĖė āŃįĄūŻ4)å€Öā[ż(üŹOŁC¢4 Ś×Ł@,źū)Ūķ&śQłłł.ĀüŻ!ÄŅÜŚ ņūŃąü4źą Ģ»Ä1*õšį,ŁĢąäE°č0ŌŪæÅėŅ8Óõ¹·ęśŁŌéćąÖŻ &ćųŹ%$Pā˜ā"š. 6„ęóõ* ×č Ō+śŃĖÕ6ęż įŃłźō Ēłź3Öążæ&üü/Ę;ć4č%¦ä ŪÕÖŲ&õŲżū’Ū 0"ū’GX šŠųč ŲLü»ęīüĶŌó“7 ¾ŻŃÜųŪ@ń öģFŻāīóč·čŪ!¤ĒųżŸ&ĶņŠ 2:żĖõ’õ÷õņ(,šÖ% gB'AÖŽĖØæiÜī»±ē/ńĒ!N"ß÷P/€Źš ļłįü,õęż1“€7’ŠāĘĆŁLÓ+ ’żö óŅł/óā“FéĖ‚=Ī5ä‘äß“"šŪå,öŻ­ęõ½čī ąŽņ±ōLń!ąž ųg­Ł«ŖKųžā¹Žķ Ģ,’Ų&Ī/„ņćŸ2āĆĀėÄÄŹ*L 23Ī ŲĒ% ÖÓŅ×ī ā0 ÅMś#öøäĶ8żŃæ*óįņõļ+ą÷Ż+$ķ”D .-Ū’Ģß ā"§ü éĶŌŪ0Ļ¹āIż)ę/ūéø=ģ€Ģ0 P“Ńʀāż"ĢéŪęÜ53 *^ś6ĖōŃ,"ūłģīĶžPŚųžźĆ ćöž’åĀŅŲ÷ Õ õõ× žźźķÜō$öŃųóó’ ś !ī õ!#ü€äōÅżżCüģ #÷ō0,«’ņąļŽųńüĶÉŠ1*čÕó04įåž×$éĢåūś,äĻö"äš0ä%*ōķśį’8ćäĆæ å+7ńśņī±Lųń*žĆėųžõŪīČų#ēŽ×Ü’.8ļ" åŅ‚ž>¾ō)Ž£§Łģüń*žą&'<$•ŪĻøńń3»ųG’üÉ4B÷×Ä õäĬ=nŁ÷«ī"ū%ēŹ8ģß#2XŻå4żøłūŌćēģ7Łųģ1ģŚō!ĶŖŲ7UŅ1ż П ž‘×Ń*ą9źŠ Ó÷½ļ@»Š ēÓ įōņ‹-±ßų90óģķéĄ¾¢ź3ųٽcķēéØī+.ėÅ’Ś!(Ź÷§ćūIņż"łÄię'VŻßī)A%’éäÖÄÄńąę!č ÜŹó2’ł’įīĮ&óųל,Ļ%F}¼Ś’Śž ļ²ęõöŅņõjµÅGįf!(ķ@ū)(Š žä¢2 ā1éģ õ vAō5>GCŅ%é“GÖž&! Öé¾śæ ģš4!ŌŲÉAZŹŪӚ Č ¬ 5Šō’ģ '*īēöåėājÓ 6B0Q°ä,ŲŚ ųö#ĘęŲJ-ł aŽ+å(Ž× ąÜķ_Ó/ €é×ä0Ó(éģ /Ē« ÷DęŖäS;]*óžO¾å%"żŁ ÷+1X$! GŗhcŪijōĒŖ§5,§ķ9Ž(?“¾Žń,ą¾÷ł÷Z÷õį) öłćąž€ś*€€&Š-Ö-ö5łĀū[ BūIó¢-įżčĢ•÷ĒŹČ.é2õäČM.d÷?ōćŻXūą0ē VõdŽń$"µPęųėļĆīųĢŁļÉ /¦šżĘ'żFūģÖÕ’;óģģó äGŻįõØęųéLźśå¹–ńĘłīś<źßé!ū1Ņęķ3žŹ/šÓĖ÷Å'$Ų÷ļ’ą#Aģą>ź,łÓ:’ÆŲĶP .ūŖ ¾įK¾ 馓'üÓēŽ“16Ūā2ł;čūŌįü +æõĖķÓI8ņč½¶ÓŠ\Óäķß!»$ó" Äų Ó+ēüųéšLŽžōųėŹłß2;&ōķ- šŻŲŻ%é ųõ ķńö÷óüõ!+ź’Īū ęĮäŲÜ Šõäńį“ģą>ęėÖō÷ÓķJźŅŅįąå!łŁžź¾ßŃĀč*ŪĒŪ+ōŃüžC*¼ķūń éĪś ģ³YŅåų.ąāčēäÜĶŁä$öČXē ļÓ»€ ś÷śóń0 ū󿀒 ü łöö śōKśóä żķüõ‚   šöüöėņƒś š€ńóüÖ"Õū ‚šū ņä ōö ū’ ų¬īšģš÷€ųī ’׀āŽė’€ųõ€üÕ ś‚ī¢ćō€’łū€/ ’ņžĖŻķåźżüķ4 źņķū īļžü)ŚśÜų’šóņ’śąė÷  õöö’ūōšžūūųõö,ż÷ń )żīž ųģ Üąõūģ%ōōļōłżś õ õž "ńüłżžż ōółķó ųš ėņłžõÕ!ģ ģž’ēĶŽŪ·æōįĀŽē¾ēČĒĆŅŅčóŚČŪćĪŚÓŹøōĮÕŽäŅąāŚŽÖŲŚ÷ÖĢļ×ŌÖ¶ĢįŪųćŚÜŃĒŲÓĢąįŲļĄ×Š×ŪÜÅŠŌ÷ĪęąŗĖą×ŌćĢߏńÕŻõĮģ¹ĀĶįŌĪĢåĢÜߎąĖټ°ÉķŚßąŪĢŃÓėĪÉ»ŹŁßÓĘÕĒČĮĢóŁÖŃĄĪŌ×¼ŃōåŅųęŪŌŚćŽÜĢŃĒŚŅĻĢĶŠŽÅ×é“ĒÕåĻłŁĖäŪ¾ūńŠĄĀšźÜčąĻāŽŠÜŃĻåĖŌ",ž"%ć’é:ż, ķēžĶ<·å¾ųęŲ@óšēÜžÕ É/ężü Ż4 б?ń=ßæŠųŻ  ņ HŻÓ 4 6§óĖģ0ķõÅķÉĢäūż"÷ń Ļß7åÓ÷5ęĢåó+—ó ųń -ńĻņņļł*éÜąģé('Kį5ÜŅ’ęīī ńįļėķź"šžę ĶŁĀä€3=ŻūÄöØ ŲČ?՟čö€<¹*żO}Ļ 8Ņļń褜öŽõ5 `DÕ7҃ńE=Šśš/5źē!”.³Ķ܎ćA-§"ĄP»ķ•'aæ@Č£ŖŃۃ½µĀłą'4& «/!ä(»Ņ8(>įžßīõ>¶TŹ5Y¾B½ ęŁ.ōĢł sļéć#»Ōļ16¢ę-+?tNūõ€ņPģ(Ąuųń(*ģ+(0ÕiĘ+čśŃĀ!ŚĆ<ć Óī× ćöŅķĻ ņŹÕ EmV&ßź ž!"’ēŌ+Š"½üåŅŚÅ ą ó0KAŅó6%/śĻõĀOómÕõ¹Ķ Š F9'õÕ4'šķ&ż?ūŁ ÷’įß1 ņė’ē(ĪĆüŌŃMą µņIś)ū„¶9&įī7’& Ž.Äęö2>żŹžßŁÜNĮöžåš Ä ŁęļńĀ a,¾¾Ż7—õėĘ÷<żöøĮļLõ½0ķŻŻŲ5Äķ*ń6ōĆIč2HŠŚlö"&įQ2éĪų¤!$ė8Ū čb§®Ųņ"¾µåęÕēņŠĒ޼8ö.ż³ßž ßĻ%éž7-’ųõņżÜö öĢč;×ń’ńÅ -å óÓńÕ)bĻŻŪæŁ1Ņå63ķžŹŚ÷īZ+§©ZĖõ°įźžżķųČążŗLļ÷Ž.ĖĖĒNś»Ūiģś5õ!čM ōłł Ä'*RǾÜÜŚŪįŁ¼×ī5?WÉĀüüēłļĖA&<Ö²-CGćū+Ģ描ž$;ģTאĮčŌŃ ±Ś>čé-8&.ߟāę*$9õģŻ>2Äe ¼ņūčĶéĪ€ļĻ/ŃģžłźĒ'HŹņŪ×2żćĶ’9Šń`“’æž÷ąž«:i¶Źš®żėż<+>fžīņļCĮé ńŌź9ĻųRŚ nÉžžŲüČÜ›Ū4Ķ×äøė½ź¦ų½śąöÓh…üå­ćÅŃāI•IøöFē"Õ6äóÖ"į€önސōÜ’d ŅmŌĶR6gńYŅ!\.ī€Ų1 Ǿ¤³ćė6/4 BæCRtōܽSÉ-ĖÜöį€"æ0ͱ(ĄēŽTŁAģ#²5'Ų€Āž!Ż/’LĖ1óūņė}ąe\8Ļö|Kł©_ZļPo-°.ļ¤Üņ 46óø¦ŗ÷; |“ģ*×&׃€" É!µŁaŌŽĻIė÷XĖ>(ƀģFļ²ˆ½AŃU<;]ŽU8 „É`:å ƒ5· żf' |ƒ3 +źņ‚W€!žæŽ:ŃÓ}‚H§ė}-Ӊ®ƒŽ+õ²”+t0Ūųö²ļn”оÖ7§…¼Va¤|ęā+bƒ֑Mź"Ėņų#üźŌgÉ{ų ļ¬Å ńž3öļüŻé!% ‹ ū¦ÄKmCՐ=üOų2ģīöŸś>4 NķßJč»ō+O Pū/Łż<ß*õŪåŪĻ€ė §Ē0:!Ā÷ŽŁó¼é +W õōüłėß% «7Ż;Ņ\Ā~  ō°÷<Ä?EžģõĖ࣪ńé.įjń¹ÕZ8 ø} ó¬cżÖĀŚÖ0C=łŌvÄ)/DEå€Q9-« >[’#żŅŃ Ģęéš$’ļ; ƀą,¶GO5ó5ŲŽ’’ŗčņ˜Ō<  Ō×źŅŚ ńåūFõŽ8ąłŽ‰Ų··ą/ŌŲŌķć* śģ4­ĻõVŖLĢV'’õó,÷Õ?ˆ'ī÷, =į׿Vē*ÜėÖ × ßē_ĀG& į’d÷’ ūč¼Bż+÷ņ,čž%īģÕ4É!ł£õé)(*.żåų>ßĢ÷ķó!Į) ćÓ( Īź=ęšć:/»Üų ß#(9+ ū"¹į%Ņ$ī9TöÖįłįņšŁ£óĮéżK H#÷īüūūŠż žžź=ßźŠį=’ķż%ųŸä»ėż Ģ RWåÜŪÖģ™»Śģ¢!óÖżüü< ń)ęńūīVFėÄ÷ė0ųÄ%)€LżāĒ9ĒōÖ!ŲŠźŌÉŅĀvåž8žĮą.0®Ŗ ’  AĄ.ęĒŃņ‰ó50ōż8 €Ūź»Õh³ś ąŃå5å7#JńĪ!"ĪĀä%›ŻūĢܳåūĖ’+ē9 źŖ:Ż„āń]®ÆŽ2üā÷ģŅ)€ō 3żŃ&ęŽń".cPėéĶõü“aēRŗŹō#¶Č¾~ ]挜B<Ķ^ -nĘz6ß,²±Ōžõ× ē/Ų=²5Õ'šSÖ-¼ ęD¬ " šöÅŹĮIżš+ĄL)½÷ ŖŃ¹ķ3żż+ēķ÷ĢĢ Ķž6ķē&Å& ēóźÅżźąžęb!Ž40ķßöĄŻ'ŒŽų%ąÉÜŃķ)Ž Óšų ÷ßõōÖŻģ ńŽ . É .@É#ćB ».!, Äż÷µāaį¹,6ŅRšS®)®O(éó !0)ųS2W±Gó#+ ×"žPI/·gÅó=‚ĢŠ! Ā*<Bśö#īžąŗĪ(/ž/½÷@ų~ RčćWž÷Ż’ÄŁŻųŚ3|¹ŹęÉ žŽ7 ż[ļ BöÕŽH“ķš"žE|uę³¼<'Q9Ć2(\fż§*ż:ūśņe ß­?ś‚"÷’īk4(óōš€ÅßĆ+?÷Źöō»ģNó(6Üē܄’¹ ß0 0!­ #ģķ"®Ż.ž÷žŪ%/9Ė( č>Ų銱Ū?Ł&Ŗł¤źĒ3Ō5ņ'#CÄĘł¶ŅŚ+ēŌßž 0€÷ų)ī9 ĆĮż,”»é×.ņßåż»čõē ‚īåP%ÓŁ˜ ų÷2.č§ś»÷‡×Ņ =ö0Ļ5! ŻżääÓH€ó'ūŅģłēZSŲųäłžņūnń,§łYłä[« 8śė×÷č9iäń+ß5Ķ+§Ą ķ€='ć Ż*OĀöó żŅKöń¼Õņݬ9޵üƹŁ(ćšĘī'łęž„’óćlĶ©Ø§#3Ļ"üą/å׿×ßł;ļ,Ń별˜H"ś_.&ĆQžĢōŠĢ!ī&[Ęü¼!śqü”įGŹźåūE€ųņÅĮļPVäł©ŅöūĒ#ōNÉŚ’·%* "ž÷į²éŁč!8ÕĢ ńåé8“ķņ#’-šžŚŒšœĶö -åNźŗ »ßžĮõŲ¹&Āś,Bž3śęīŻ !¾Żõ1įŅöµÅąé-š+ńŽ(óD ³/$ä)ćłńŹ&Fļō÷ń&ł“4į ńģQģĘCī6ś ’łé4ł8&ō%ė>No ć¾Ōü.ųččŹü÷Ėųń„É"ä>FÄāŗ€ÓśpÓõÕŻÜ7äõüI1+ßśBąFćAķ źė;Ū6xĘGėōąCš÷ Ō'W2+Ēč¤1ųĪ 5; ņ×’'"āü!:r]šÓģłł/Ū"Ęęęīūŗ-ż8ģīäØĪEć E@ö, śY ĮFĒßšµšüŲń4į/Īē;?žĪĢ"ÖK 1łä¹ķ šŚ Õ0ź8 ņćżäŹĢīĻśćĖ"÷üī *ćõ¢bßøÕéųź¾īśsŻ É*%Ńҽ9PŪėcķņé Cć’öńó5 öņU) łāōōģ’ĪĖŚ ß°čąÆ×ėAŪķ½Ū̼CŲöŲņĘėžĆ ééEć'VÕŽQjü€ļ«ō(ž¾ź'Żąūū§ŒšĖ0 ©@Żķā~é¶ēšź(ÄīÓŅ*³Č; ī^ĖżĮ€®=#āä>Óµō> 6„ōŁ ŁĆ $  Ū%õ5 jųčśüżÓŪ9ŚīÅäąSŽėź÷ūČJéµä£=ōS üĪ ßāū8*ķąK74·ā,†>±:ģĖ FžAä5ŃJ¬ņČĪųܕéčT =B¶'ŗ7ÆäėłīÕćčBų¾Ó”1āī õ'üž.ųÅĶńÓó’ŽóćŽ~Ńļāź3'2(€"’9 7 ?ŌŪ.©!-éō×ÜüüŃü „±õÖ0;0-\÷³ąæūģ%įÄ ˜ūöõæāÕ'ś’ ķ¢s"Ņ  * Č5&ē'®/Üæå*O"Ģš° # ģ¹Hę#¼Ü Č GĪß*:ž¹¾ĖŁó@¼Šīś4÷ä?2* #źū* ÷įėšĢ&2!4ÉėīŠžīńĶģåśŹł¬ą½ē ā-įČč2' Ż8ÜõĆŪ (ų*śßó"Q.ń@+č “’õ"ä8ų!» ā ōņ2!3É#@ŁF”·óļ& ÷%²81īÜĖß Ō ŌłŌBāćö Š8ōó%ż ÜėźéÄöČ(Óż Ółųß÷Īżōš)ęåéõ$!źÖ5üßęśķźņÖŚ.ŪøÉų<ݹš Ļ÷ ć6 ¶Ļ Ż ń s1©Åė*×¼¶vä¾'ēęģęן'ĪļÉīå ķ ė;Ü('Ś'Ė6óćąö›ŽöÕ 6šśłžŃü’æēģ- $ÕōŹęÉžķĶūģ+)Ī* õ' Uéń’źł  ĮNŽ7ķéˆ 'źāŁ)üņŚ÷ŁM5ūĻīŽ)ķį Ž;.·ó(ńĪĢś*«%Pßń įšä ś3ū(āųü£ ('9ŅųÜē:ģū "Ö 1ö¦Ö# ēßϽģäń/ü" &ķ×< īIDUź.Ė33ńš ĶžėW«ź+ń$ļŻŻš ńŽ /ńåčāšžāżŠéÖóF5žī®V”ķ±š2Oė %-,Ķ ØŹŚ]õ-#źė&H6%#70ńó7¹­K¹ Ō2Ż:Öź ް3²*?' ååßö÷ā/É*DDČłŪĪĒ“ńś€ÉĪ ūī/×9öĖ AõóżĢXĒ7Źģž!)°÷Ūåū¦õ«0O4āēń3ŠņĮ ąęS­ŪšžóéčńõįĖÜįēśĀū̽Ų! żōģč1÷¶Š ŅŻ€åææžāī/ź ōÜ"!ōEš#ĶM1 ]Ē( 4ļ õąĄ ż7 šå±ÖŪ›üēLQöåškś"×Õ,žu˜*āę3&ł7&¼&@ö_ßāģYä+Ģ9ŚžÜž8qūH!ńćd 5Šź@ä—ÓĖäUõ<ųĪ÷ćįöÖŃŖ,óņżüÉ'ņŗĆóėČŃęŅÜʶźĖ-/#&ļ'õAé&æü‚2É©«½Üõ µé<&ąŖ Ł ŌŹ#ę}§H÷ŹŌ„! €%%u¶tŚ€ćÜŅ €?æĶūź¹!Ķ÷C Žā!ĪŌ!ŽóšĻ!¼Źī8ņč²/āéT­¾ł»\žŹÜŁŹåüõį(ļžā Ąė.÷śł޻Ӿ :÷{š:C į÷½Ņ-ىÕSņ×üjĆšIėøĘ1|KųB ÷ńę’w1Ų)č'āÖą+īŽżõķńō Į׹ ęö÷ęļąĪ"ā"ž#Ė÷Ļķ’"Ö÷:ĄųŲ!F·ēĪ# 6'!Zł Ļ&Ņ č ķł’ģ9 ×@ßRłŪÓ8õĆlĘu>9T]Tš#"ßīŲq fL×ČßŪFķŃÕ^<ēE'*ĶĖ”µń"ÜēčķŌ*.éŚō¶ļ4׎ßóE"›ŗšÕ³óęąč ā'ē5UłWņåŗ’ŻÕ30ū9ņę„W,_Cčę1äŅ€[-Æ-ņŚ ”6ē>ąłŠ›Y?ŪūžŲ &ł Ģ⭈Śų0Ö3Ż+čĘ×]MóõĶĆ ņ«4Čųū”`%AųŽéÜž¾„ē@-žōöš å¦61^=, ĘÜ%ŅŃ õļ ˜Ū 3.SÉŌł6˜ć1 Ūóž°æ$(ć āäüÄéńķ¹ö?¹ĢŁcSģį@÷©+=óĖėņŃł ”ū%ä:3ćāÉ85·īīŅ  ×$9# üąé)č÷1 Ł7āM°ŁÜž2ʀńøļ ÄÄŪķIģ)ČšźąņąłĆŠ&Fźöīńł5÷®ńģĻų. +ä ŲǾŲėš.Ėלó&ŽĖŽžö (Ōėéøī³äŲ/˜ŚķČoČ4@Dų0ĪäĖ8łÖ2ųÕŠõAGõź’'’Tō(*ś÷9Ņń×/óCŸŻüR.śöļó4R#ēń äü¶1R!čüP׬=ążŚI¼¬Ö2,āĻÕÉDó æÓ"ģćāņ, Ķė4śō /ģ„żĀųŌ'ō īß1/Óę!$łŹT1Š&ÕąóĀż)ö³ -źėż+[óŃ’óųö*ŽG + łÖģū-ÕæśõöG ÷ķ Ć­āüĀēæŃ’čZ÷ģl(¶§5"#ĢÖżžU=CöÓę"ģ ßč©2%īŅ Ļ* Õ3VČŚ&÷‘&äqI "ćąžq4#&ś>…ä­¦ń/ą°ķüåäžżļĀżJ×Õ(āįØģšž÷C:!Äēż%_.".Ųģ$÷!"ėść&0—€ńG7ė9žä/VżaÄēĖļöhģŅ%ó üŅŅ ,ż¼ų²ģóņüōĮĆ'Ó&vĶ*ĮųŅłó’ a— õŲ ą ?Ińö"Ģβ·£6÷`šé2Bųą%: īŻŚåźå5 öŗņżæų׳ 9V+Šą &ļ ē'ćäļ` ÜņŲų÷ ļß £ņÉ7Ą ,HčņėŪ“øŌ/õå&Aų53S±ūŚę%ęńĪę#P!Ü-ęõš!©ś:öÕŗÓ Oüõ*Ģźēł įćēF.'$?6ļ" ØńAĪ*Ūń8E Ü]ōö@ėÄī4ū!Ē,Óężåå'žüĖ);Ń ÷Ś ŽāŃŃė"6% óßBņīģ³¢ A½ŻIļŗüŲų ńMŁśī 0ą,į5A;õ³ÉĻ}± ā/Ūłļ× Üū€ N@ńä÷C„ĢŹćĀ'÷怮õėÕņøä?!ūĪ)ŁAńC2üéĖ$ćϼćēØŃŚēŗé5š IIÕłŃVļäU?ņæć鯠ģ“ēm ~õ!E#“šłåLį,ļ'Wēē¾¼ŗ±€ ~88ä8ĆG4ł į :*Ć ķ Æ»ųö 0ļøHęłB0 C')ńźĖ”ūP9ŅÓ»LU€*2ž'Ū ¢Ż*ąŒÖš’§ī<“B2?ś 7¹[Ų8ĻĀ#Ķ’ ß-Ļ=5! G ōUR Ūää‡^ƕŠAŃ,Qķ’ŚüÅ÷de(×Öė’źń"×ŠČ ĒAį Aå÷1Ō÷š’) ø/žöõŪšœöb×4ŲöSņzėåźķ§= )2°lΉFķņŲ9ŽĻųč#  ēšCū%źs))q¹ ¹žFķż~ ½ķņ*!Qå½w(#õT#'F8ńõļ -Ö*1ąŚēšēļ ĆŪž.Ö*ŲĆż-’ ę[=ŲķiF@Y3& ą (ßĶÜööÖ§ų @ųįšÕ ėžįż'ŃŹ¼öō ÓÕ'%1š®/õåź4 š śĆžīüę ŠŠI'ōéš&ŽÄųžń õ!ķ8×ģ%öīėā ŻŪļ&ńż!śčłĄ#;Žöūįō·ę±B!źčéįQėą# @ņĶ-!?éāĒėŌ"äŗ,ūI×č(7$ŚĮŁļÉļėśŪŌŠ1ćĮ¼äÖQ ##(Żć9鏒õ'2Ēū3ņöäēē#Łüõ!ę!Š5Ųįņž !ņ1ĒėŻÉŪó ōĢ÷ĻŲģ)A¼NęC šĖåōņŁįõµ’Śėń0 äŌ)é ķFHDĢńčżćÆń3Ō| ėŪ-Ó+ õ ÜŻŁōæįĻõé4Śøė>ꤦł#ņھ£9üа š .ķŽčņ&šŪ#ņį¹ń“ģ< Ōā×97’ݲņķļōÉ2 žŪŽAŅ’ >öö3Ąż;*ŃėÅõÆ.éīłäŹźūčŽ'KŗS^ æS 'ģą8,h$Ż +ĒČ<Ź 02Uķ0 ą$;3ļŅēņū"1 ųē/Ź6ś +"•ķ8āāŠńüÕįē ł Üģ0’źlę(Ęüü[ģĪóæō$ļżMłź"ļŽŻŠŹ’łÉś¼ū@ŁųņčśęVüåā2Gćņ §GŲŖLŹ6<Ē’ Üģ0/ģ| ¬'·źńņā+“ß ø¤įßĆŠ£UŻä’ZŖņ-Ÿ"€°ž&³Ō7‚ē ą#ü7(!ę…%īö+żłęÜøŹ0ļö½åZŪģŌ+Ÿ%4Ż×Ü#Ż07“ūĪś_ģŅĄ īBüńŚ öū²AXūėĒ:;ģżņąźUfāgņūõų(3J >oüie÷ą;%ÖŪxõ#ÜUÖå,.NĶćÖ×üŃļ²óóśĶčķÅä(ōų/D ųĶē’Śš@üäōÖśąņ ó ¼ķó>÷ōŖųµé¬- äńWą” !ŌϹ&ĄžĢš õäń¬ē%ćŪäģŁ % ö7EĻٽĖż’.śÄ+ó$&Ł ķ¹ņõCĪŌė("ģ"9Ę $żį#śŅųō®÷ÜRĶģ6łäÖNŠśęWķ ż^įŃßÜųŽčÓ£ÉÜüb×Čŗ%õōÓלĘä żö%0€n*ŽęŅmĄäÄīń>öÅŌćįų!9ł#ģ.å@支юé% 8¦õ €ž¬ö Ż Ēś’’ĮĖĶŃ*1.F+äėåóŻAčk1?ĻIŃóöŻż7ķīę0ŚśF OŅóUå Ü!Ó,^ö×ÅäĢņé"ŻŽPI’A!ļLąhĶXÜĶčśL"ĮūÄ*[ć'žŽLõ ķņ ļ%įėļÖō'5öåį0"É É½å5Ųšš$%üŌéģėčßÓŻ!śĖ¾ū ö!ŽįŌŚņ'  źéęŪŻG;@#ź÷īį$1(żLłå9"ļ š õšżźńö"÷ėż +°ńś(ņ’3ōŪų,éó ķš į)ūŪūŽö&$ä  š ń#Ž «ÕšéŪ5é óņ"ķ( õéć&Ó! ūõņĻ×±łČóż ²āéäü9Ż)āµŻ śįā"Źķ üŪś ¾ń”6ųŅé<å<ż*ü Ūäæ 4+’Äż7%(× óõ ś;ĪūqńćõöĪ :šįóā %5 !ŸėŲńŚķŲ-ę Ļöņąü+é+÷(öęÜĶēĖõ÷$’Ż(  öŁž.ņ(óč.’?ķ’ėÕéS N~śóļšŅ* “'bĖŠ Ļ–(ļ*ąl.f€B)łēó€āĪżŃ’į%µų ųéŌ Ł Č,ŠōÓ/&ģ±*ā6š÷!IŻŪŻ, č(x)xō(€ ū‚¬Ü$+īYŚśóøķ ÷? Å,)Ż=ÕY)ž9ŠÖ2Š/Gņž*·Ņóū.”ŗü3 %„ ļĒē®6ÆūŪłņ4ĻÉļźPżŌÕņŪõ±Ž&!ćłī=÷Ųōųīļ ś,īÜłĢ öółį Ųłń Īļ/ %Ńążłįē éBēę$Ūīčė%ų 1 øŻ Ąéå'é ĶN  ō-÷Įż¼AŻ#(Z0õžŹĻō9 Ćļ"ųõžŽÜß3ßż/ó6ėģÖį ķ»ģ„ķų ŌģŪŪ&ōźśÅAōI×ī ,10%Üć+)ó!Ś"ĻµŚ %š=O6ō+!žc CėŲ Éļ ó.å€3öäōķį(Óõ÷įūųā»/4ģ`ė#SŅ#āćó7E1šś!'ó &@śŃż$K '9ĘēV/Ń’ŠA'źģ ~< ų×Å&ąS0ų(!AōęõÓāŃß) ūāDęöŁźZ4ē!%Ö5ł!"ŚĒ éN(Ł łK׳źŃū׳ŃÓ²™żżÕ.į‡4õźé ××ų¦ååĪ –Dź$źī3Ū7ø6Ć1ņÜkĆ8Nļ2ż7ŻÖaėčä®3QĶÖ ¢ ŗŠłīĀś¾óéłk č ĆćóŗXokīč—ĻŅųĻ$ź˜sś3 .+6Įźną°Ł(uęōGŠ)8W½śCś›žśCóÓłŪŲ ūÅX½NÜ' (ćų’Rfāßaźµīų¾äÓĒā(Ī Zķ!RįāØłóĶÖŌū¹,į9Ł."ߎ&  ĆŹāYķĘ4ęō³ņŁ/9-ūBÄ "¬čĪóŪ+ŲžŗčĒŻ# ś š9Ō*ńĆ­:ųó’HqĀķ# ų:ĆóDŅ'rłŖöDHÉw*6ł²!0.Ȳž$ķ-ķ[įŁÄ毞ó'ŸH š<ęéÖĀŃüZęćHīęÓ={łä?Ó%”2ź*%ļÕEż 4˽ńĪ×lšé#įĪęĶ?ĪZłĄēĢõÉ”HFIš^ČŲ ŗ 9ł%ę*ć$©·A²8{’MÜĒ)Ī’ Ķžó€.uŽC™Ėöčóų„-»ó›ü•0éźŗ-ģ]ꞎ"Ķ˱ü?åŲ,±ĶåC¼¢>$!+7Ó„ī÷DĘÕ,Š ŅėóųGHč((nŁ·hēÓŒ“ÜMēŻZ.bż°÷ē=‚ ńōüĶĄė}:ī4ß"(=Ž[\Oh Ėāä€ļ P öē€ą  ¹91Ā6>Ł:b@ÓVÆ&šß7×¶Fųąążģ|Ü (č6#Öļ0ĘĻ øģČōļč.öŲsK\ę*šŲ—é+ ø-ŃņźÅĒÕ –9F ĢŽ€āÄī+–įW,¤ ŽE&ģ M&Ņłś3ö55ÕŃõ$ĘFšÅź#$×’–ŅZ:óó§Kީ۷¹ūĮ^ŅeUT¢Ū#¬¼ķå ų×TŲß÷ åÜ)ę śõģż’Ś(ĘĀśŻćŖ.äŅ·Üöv¶é’’,ųõķæõłēŽā.XźĖżż ńüŠ÷:ż YžćŽęį°ł×ģšąš×ģģ’Ńś3 ę%ćź×ŚĖ(ššēö q%ЬČ*Sæ žąōö%ą¶äEĄź5ō½0é ķŽ8A‚Ļńö÷ķłą¶±%ņ ūŃų¹$DĢO Ńų&å!ķ'żŪķ!žšß÷1U‹Ś:ōįV ųėJåS˜3å°Ųō "»Ķ7,ŠįKßżčŲņSß %ł*žóÅķēĄŪģäę0śŠ ķ)źĀŽ·čĄ ÜūūåēŅ&ż# ÷’Béeóļ4Āųżš’¼ ßųÖe ņGUøć&Wl.ßß Ģźß,ŪźVžšģ¹ó»4Ū×ū+' īąõł&ż»²äź!Ō)"żųJéåŲ)1;öFõį / ĢÉŪÖ2#ėėüNÕŚG%JŌŚ2šźķęgō:Ę@ń Ó§óż¶Óü%ęą øžŽ#Ņ ēč, ń’)Ļ īĀģ$œŲī į.@āE5fĻüŅ'8ßržŪ ūŻKU;&GŌŗäą$ćłÖżJō GŅśŲģśģęęƒłłņōż Sľ Āź äĪö< #' āg/ŚĻ÷Ƽ(VÜεėēÜ!čėķćō":ŃI 0Ńä2’īūų!ģŽźē*›J’ēī ųņĪŽ55&Ź*×"ō'±žåǟēĀ3łšĢü»żŪļDūļ'0ų 'ó„ūŅ79ū%ń óĻüŽēĘ)ŃXļĻ*ģ*¾ÉēõŽ-šÉÜ  ėóļóFž+§šN'!żõ6éņń€ē*ŌŹóōä’čõ!üń/Ł%A8ųŽżŽĀķžž¼śŽ$5&ÓŃäYäģ÷ä©ųü .“ŹŃ¦łō”ēż’ńŁ÷ć¼źāź8ļÖ%ć×½ĘčćÓćāä¦ŪūīŌų (óüņżųż÷ŠęÖ½Éųģ;įżļ"üŁäą ąßĀ Žż8ė#¦!¤łū,$õ//ĮÉśń4óõü0ŽįĶ(ēŚ ,·5GŁüףķŽõĢõŃ1C,žóóŚDņ^ŽĘų!; DõBĶö2śLü‚ <8'? 6ī ßę×ü1ŅóęŠöjĀ÷šēēßź*ėż>ó-]Ņŗ@ĖŪźé1ī*ļž:łų qķõ=°łłĄąć$ėżĒó&ÕĄāś +čöė,ŹĮü*Ļׯ4)ė?Iö3ī䯜'ŌŹÓÉĆNļ  óßįāT!ķł5ł ėīßĪä J¬č„Å*ŽĘöß«ß+ž0§ߣį %ę š’ķ%A˵2ķķūńé2«ų×~Ł;ßóć:ļ÷ą5ŻÅŲöčāł* źźįųżäŪļżžėś &łŅ’š-ėų,ĀIćóĘÖD  ć*&Ō1ŪäŠć¼ļŃ/+ćéäś7)ü meĄ’ĢÖųāĘżć Īż óFÜÓŁļ0¢QMŁQóÖ2! āź¶ĻīÖ÷ŚÜÖ9Ż©ž (č.ŅūoźńēŻ£ś$÷ä $(ŲöŽ0,Ē &üę(Ó"5ĢģŃųō=Õ»Éą'Ž)÷ųńīŌąż. ÷®µč¾Z¹f(''§"ģėĀģā“ä óģåūł"%Żā/5’Šóų*»ņ ż5ś7 ·aĢņóš śĖč*¬ŲĮ ĪæöLŻšĻčā1AŚč;> Eķ&åģ,āķĢÕų† r÷A#čŸķź$Ł Õāäß ūéõįų¶“Õń<~ÓōļüÅēÆ+“+}żW :ƒšA"·hēŪHö É+ ó(;(3%<×ŗ ÷įįī²×GäŠI %ń0ä¹÷J&ŁÉ-Įč/ÕŽ Ø.Łņ¶ä:AśŪķĻHKGą”ߨ¤āĘMee÷(×ń$ŹĆęńĢ÷Ą%ß}ĶžįäFOAņ=źĢ#Ż=6|Gż2õå> ÷Ńß’Qų8kśŗ éļē[KÉļ˜+¼ÅRõA'=Ņē;å Oµśę÷Ć#» Ķķł«č¼ėł4*ėµ +ÕĪŻūŁŚśŹę1÷ Ø-;D<`Hć-“āKĄ`ŹķŽēüńńōē-ŽEĀįOÉżĶĪ<Ų6=ŗ4Yb™śęOū ’×üĻĀļŃ"ńō#&$•dEŪ»ś'ō[ó'ŗ-ų 9$)ļķ ‘ą+ō ÓWäņå<Hģéøéėö®' /žB¶ķĀ+ņBī0*ŌŪÜ’šÉźŚßĀŹśCó׳ē9Ģŗł2üóf üė2š(ļD@į4·:ļ”"jļXĢżĮó¹0°Ž€¶ā$ ƒ1šõĪ ¹: +ą<&÷æ?©ńēÕūÉšS6Mėźŗ풐€łńńŗ×€éŽ åŽ?:²źŽäĪMŽ(ŽE÷>ČR=ī"čźķ‘ $äĢę9Čś $='%'īŽ(Ū'öõ=1āü7ńģ#$žć¹ćCĶ"üÅõčļÕŃ ĮÖ<ÜĢķŅąÜ1ųųäßß oóźĄéŃčōł„ ąŁDż×ÄžÜ õąüóFŽåņķłģēžį6Äźš źõņB% Ļ'żõ,š'(ēėŻõå’ģź_$ń19"ų ”ģåŻė(ĆöĪŽėŚāŽļ ņ įęąūÄōĢ ÖłäŚį Š3÷@Jżę¾ ń=óÜóźVśĪüß ,a'Dó ?ėŁä>:ńÓŃ92-÷Čé.ėõė%9ļ*>9źŃķ3Jłž žŻļ 8&;ųōįŠF$’Ó’B0Ń/ē ö(üfć%ü* åüŁ ÓćNŃō Ņ-ŚčBęš6,¦Ģæōż%ęžó’³)Łšīź#ūŌCõ(XU 3Āļ”7Ć.@į7 Õɀ(ÅŅłļM æ%ø­ģ0Äłr/"÷ŗ WĶĪÜ“#Ņžļ(¹Ā"ļóŲČā-#ź-źŹŪī‘ąĆ*Ūž¬’™šBAīŹ÷ūĄäöCµ8éō,Ōų±Sćżķņßē]ļņG#X#N$ūPņĪźĢśņ1 ģłĮžĖń"wāQųÉĪŃ5(ß>åōM\ūż’Ź3Żś0ÜCšķ"¶’ķ īŪóĖĘē-Ķ#µV“ŲóŻóų<ņ8!źÜŌ'č"šū6Źķ3 ėųźÖ =õ,šāżĆ!ó¹ ±ŗńņŠŹó!Ś»$Ńż÷›Ļ&%ķ0õąõžõ)Óį2*"čķ%7ÕCóóęįŁÖŽ7NēŃ.½ōžŲŅ" ęģūŻÕģ!±ėÕŁ#" €2żęå7“ÜŻä Pó%łŽĒżīą% 0 ļŲé3õłż ļcŽõ ĘąņŌķņõ=fćÓ%€éFF č’LŃżéÕŁ"÷ō9'Ō< ł5č!ĖÓ+ćŹį%śń-ń½ü ćą?įŃ īõīæ ł%õ#'ęZ÷śķ0׹ē'Ś"öŃ źŌ ,Ł'éļ Ćł&ēł?:,ėśŽīģ@ń3ßę.-źč×ėūņ ’ńźļö ļ(čāūüŁ4š.; œ äūAdÜŠGÓėū&šõ?ĪäĶš¼čó*&(' õ© ĢŠėżÅ$Öß+÷Ē4ōĄžŚÉš6"ėBĪ ]ōįšBśėQ¾ŃŻ Ńü! ÷Ūń.ūžĖź+#Ō@,ō+7Ö,Ö; #%?žŠ 6ą Ż '=!śł7ōūóDöłūŃ(@ż)#1/ųśģ ė ā*0Į ņö¾żĖś-;Ł %ų ÷Ÿ)ę’·- ģóōšÉŽ%ų×ńRīļ!šų!÷čż ūä8 #$Ļ“€öŅÕFĻ5Łźö½šõÜĒģłÖŪń" <ģüļĆä¹ńś ė /ń §jĪōČۚ“ä"Ü*9ćżų.(ė ßńēžāś ųĢŅĮń~š>ĖēŻą×öüńżÕō;īćķč>Eķ ÓĖR,2ŪŠī ßŖ+ēųŃ(7ŗ ė§āæļń ų ķSęö3 öźĶų; Ž8ŲŁ$Ż6Ś!·¹ž#X¼YČ5 0@ūĶ €JŃ ćéÜ÷ż, ü åŽ ńō#Ī !ų'ßĻ ń"ś 5 Õ6¾ėßżÓĻ×-ćņņāēčŽ.c$Dł1ķć+2ū&pü“ūO$ė,A¹żL°ć ,ė:"Åö!]–įŹõčźńčąõŽ4ŅÉX*æŌé-ģ 4óō²4Ūćąėī!Ü’1ōüYńåų&÷:Ū'&.×’æĖšżV$#³ŖÅä1ģ2łYŌGŁćķē/åÓüé÷ĒĆŻ9ōĆÕā7üü5īö÷ęžĖčµi+*Sē7žźģåŃõ/łZÕ.[*ך DŪ»Ńžż ^ŪĢ!Ö¦ü—ł$CŚŠ&7(ņ Ū°Ź*½é†;)Æčüóä<ÅÖÄ Ļ'Įņ#ö?Ū ėŌś"óź’ óŁZūēē żÉ )ܬĒAś¼-Ė+ėÅżž2õųźBĻšłśMĖ-w ųāĒ1č÷ä5Ą;Ē(ņČD"ēBėüģÉEž-öŌ®ąY%õ¾Õą-å0šŚ%ģūŽÄž² »üī9 Ų-’Y£7žōų×īńĶ"ģķ ųėČęż ķŃŗ ž$ š,óļJķÄĶē7Ģ$€#`ŪBöŽėīśõŃęēņž ĆŠÖš$BÜ×’"ķ/Vā’ł¾ķĪo÷’ćīVK@m¶ķõ#äAa”¹ĪöŪ.ü©nŅčᓵ'ó(õA .®=āŲ€ė’42óƒŌ4ū0 éķ=Ų  cR×ĖöźØ$Ā’÷4 ÆŽm$,óą£Õ7ōĘķķ`Æ+čWéö!,&0Ńkļ€KōČÓ»ˆ<• MÖšŪŁH %C¶ˆ]łüš½ī. 7Ä3KĢ&ņĆ#Hōó> 4ž2 ļńŅöŪ:ī ŪŚņŽ÷@źų?/Ł-ŅŹWÉĆŅ: ·ńŪå²ń ņ©%Ī(2 ļ ųņĆäööµõīČæ/ßūEĆÅ=(öõ^'*ź ńcĻģ( ūÅł-ū<åmōģØŻ%źąüRāÜ2ÕŌ¼(7(ėŃ© ą²Ć/ōį!æī- -’"AšföĶöĻ,ńGļ Ü%' ų<ö5ķńüž īśĢłųģ.üųŌłžĪ%čĢ'=Ņāģšģ×ÕŖ LįĖå šöö’  Aóå ź ķ$#ņßé$’aõö ķ5åę ųčę'.>āIŠć#ę+%äĘ÷ <ų ŻźŽŪČõ łMūšļšÖ÷ņ8 šé 8÷üņ6Ö× ąę(Ö_ōļļģ(H÷70" ·łšE ńōš ÄŚ 9ŃźŽŌ$IŲå+ Ćóńų%.£„ļGŽ"ä:W 1.žžåłäAßåżžP üš-čžōū ä’ŃŠõķAķńčė6 šėŸĒ $9’īČąÜKĮ÷³ėé-æ#ń)/öŹĒėß7ō ē$ķ å åķŻžļäĻ)÷õ ėķ ŅćģņėņÄ 'õ”Ųū  ė-ó'šõąĪ7’ūČłėšŌ?ŹńL.ößžōšÓ8æ$ ņß"Ż Nļć&MŠłÕø’ėłŻóĀĘöÖļōó)öōį"Ėż›·ł,LęźÆāųč ėŹš¦ \*Ųä?’ļåČųŅü!9ŪÕüõPīļJ-F»»õ+9ųŲī å÷įĮęą÷ų"łś?ś"ļ'>ćŌ-Žš®®/ū4 ’ĄĻżÜMą¶äŃ! ņ./ķŻ…üōÄģ öÕ&µ\Ö÷÷IŌ#ćW÷ń’i$2ē!ŅŁžWIķīļ³ĪśśČįš!Ƴ$ńļöēŽ<āĪ'ż ż-ź4šÅżį}ÅēĒEą>ńķ< ū7Ž/Šāaōń.õWč3ÓŚéöłņļČ 3Źų%ķ”ĖųżāĢłßš"h# żńõó /YćÉ@ ģßõ"Čā&ĘQ¬ģö ÜśøĒįŹ÷é+ę ĆĒ'ż“ü6÷,c;čś$īģ"¤źļ:ł”6Ś芃WĀ*ąå‘ŗäŅņåšóķŠķåįėŻSÄÉņūŁóĘÖāłæķB*ų2ōŚ=ŸŻżūģśĶŹßķŚ± ķ…ē3śėLĻ šßܶ†Ś*ž9ģ ;"ŽŹ8×"/[åõĒ«ļF©ū(/ė3 ć˜#÷=õ©łūÓ¾Ń/øĶCą0 ¼ĘĘÅHE²÷+žXéÆ ūž üÓ¾„Ų żՌ%Õ+;ńÕ-łäŖ²ą¼-’ļ5āģ¾Ī҃›ĖźÖ:?Ąü/Õ õčō²ņgŃE€@yÖąõū Hś! " ÓgņŸ$ŌÖüßś¦ĖõWģ”̼Č(A#Ł»źą*ń+4’  ŁYü & )õÉ ņĪQā ^ "šé8ŁW"żä2ėĶ™āü•’ūā#ē!šĒĢäķóß5źė ?½š¾ŅÄéŚęŁŹ6ó7Šß×HÜŚ Ė'ō īŚļń¾Žöć šüČķŻcÖŁėōäó Żõ$śéĆČĄė( 7ž@ĪĻÖŚ ŖÜų-ć Ķ×ę'*%1Ļ®×éóÓéé÷# >Bēß!&ć7ó3æäó(7ŽģķÄ×÷ēäģłŻŻ$€öõōæéÓÖÅ#0)žć3’ĶĢ?5Õ'Ū½/śų ĖŠ»ā3'ƒž= īń)ŻFīč-#ŗžüÖ*ę ž‚1='śõ§ģäŃų Ę/Šę°ģÆ+ń]ėńä24#.źšŌéŪCŌé>ō2Ęķ¦+ĢŠ &łį€ń½%üžžµŃ’Ę8ž'ū9ŻÓÓīõÅ47KŪ čćś¶µPéōš £ęÕ±c8ųJż2śę9*R0%ßóI,õą,šŁä)óĀĒń8 ófŅŁb ēHLž„ķŲ9ś$; śÓÆÜī?<čØą׳8žÓöõó± äõė*ōśāŠ27!Õ& ēĶŅėģ %!śč ąüöė ōēņ C׿ś. "ŠBģįł õčķ&įąśł×+ųļ·ĪB€ +ŽĀÆ##qóā4ķī$AĢ ŻōóāQ įAśó€ŚöŪĢUÓ23,5Ė$łT2ŽY,üÓę% ūņ/ā-ŹßŲŽ4ķšßŲH¹ ÉēōšÅöS¾#Łē‰KĻĆ !ļ š¶Č½šō“ō’£Ä *ŚĖßł+Ł#C-Õ Čņé”ē ģžź“ę: ņō >½MVA/ēAÕ’ü&Öņē?Bė,Ģ÷ Žć#å!ĆJK÷ž¤ł.ļBķŁśąõęŚ$ś>ļĆ&ÕėīĄ žšÓāöHß÷’+YņĻī%Šż×ļćęæŁźāõŽšńžäż÷¼āSęłū÷Īæė śgāÖ!ļ6?3šŌżÄ»÷ÖąOūćį €ó;ŌģžŹĖ «·öņ# ßšÉ ō÷ šš'ėų(Ņ*ņśēõ °ņßń ķŽ ¼óäōųęļł įOŽNŻ.KéŲ ą!āōED¼ čõż ä4ģö±'ņA*ÓėÉė›ņ )6õ`8å}Ž?3ūįįrć õ 8!"Ž×ŻčōŲĄ,(įGżĘƒų™ūŚĮķYōÕ-0=ō *µī’ļćß ąš1ųÓ’KÕķķśéåįyü8ń7šćZÕ Ö?ņĄ ŗ#õŽÆģ³.>ī$}’#Ģģ3 ģ$óž¶Ō3ö„ņįķ'ńē%čōóę)éę ŹŅ$éäĪŽ ßż"é AĆh&’ęĶ"(Ćń ę<Ŗń÷*&ł’čś1ņ45żÕśI棏/kņĶČ$ Ģõ*ļI ¾3(’śŚōķ’ō)öŹ »$(ü*# AŪų’dŁŽ=Ūīüķ3āā,.ĻäąČķ%£ėĖ(.ćāšõķ$ŚÓŲŪŚ=IųĶõ¬öö&2ķś ¾Ėõ#ŽŌ!ųCš²ńčķ6ÅŅśé<@4ÖåÕÕąéÖ .čĢō!÷üÜöĘåFÓH×ü!Ē Ā āŪÄŌÅbš!3žŽ(žÖī_žÓ3š’ūßxüé .?#?Ó5> ģńé·QżŲ&š,ßäŚ ×äć éHć6 8žū%*Ņ(ź^^ņ ā /óśį’ėSļ*šżäõŖēąāĘņ¢5 "õ"ż曬‰, ķXöü' ĶĒē<Āōęż»ēaį/ž'+Õ’>čC.5Śšå,/2Ī€ ČēłžL õų.šēUĮ ÄĮń«oņ@5į-ģńF, Ōžīżæ#é%ŽĖų Įģ²OńžĀĖ4ŽRŽņü .^ .éÖč .ā-Ķ:øQ¹äōē/ 4 4ÕŠö%÷>ē× õŠńŅā0ÜźÆżģļōéÅżłėÉūŃ'"ņ,ēŁ'óā? ŗŲ Ūįģ%šŁ( \äŪåū.Ö Ū ÷ńüż&"?ÆŪÓöżōżįūQā!#ē—"ż"ö(2÷—ņHü#4Ćļē÷Ēõ/ĄŻčž'"łņēļēźäėį/ųųģė(Ēń»1ōķöéWA7 į= źßėA Ńń $ōšŠŽI(4Żš[ģųķ­ČŻ OĄāźü™ņõÓīĮWCų€ZųĘ*ģCbTųĮ*ö ŽĖ(ųą ą¤¶/ßōüōčŚŌ8śžKäÅō;'‰ Ā/+@ß  "Dķģčī üJÖÅÜŪ¾įßąY*:LŃ$Š—æ ńĪźųÜļD 5žāįŽ 8{ė/:óĖ(_÷óį,ĶśĒ%ö—į8śÉHž¶· ó"÷Ķ3œüŠÉŹūX-€ŁĖū &Ī"üK'E¬ē6Čś'ūNCcņžŻ?ķ2ū9ĘįS?å%!( ķ¤īßåŻ ŗąóä0ī#~×Ō$żś#ĄęGóÆ-ųéĖ#4ćGcżO ų¼ Ą’×Ļīū. ŁŌä.ķ öæ Č5ÉŚ€lŃĄ|€×–ć ˚ļėŻ¶ź0éŗĖ· ŌżŚÆåõ£šō®zó\)ļõńč ż’:ÄńŃóå(  ŲÄķį F÷.:ķõó×Jųš$ČįH’Ū&Ļ'ēśß&Å,čņ śč¼ūįĢ ÜÖ4Jõ·ŪģBÜ Å&źč;ėłŚ %(źč/(;­ėųč0šūē.­ģ5C±7MŲ-}čŃä/ĀÕżS »ÆķÕCRūÉ^5?&#G8ķŁJķĄ:ĻGé"µēč8$?XņÕĻ`ó˜N ŗžŲ9Ē+ŗØFCÓęŽī䫣lŅ3'FĪ&ÄNūµ;}āē)>.ü;5Ź0ü1) Óö)×åėäéNõ8(ĀÕģ>ÓĆ%ā æģ)#/œżļPēéćęßČžX“0½żõēžźŽµń÷TłĘ”" Ź#!÷4I» ūA÷óÅĒŲ 2éĘ39~ģ,#ŽŽ žż÷ßåÅćĄMõčč*ĄóžŅ!Üī/0öšPż)Śķ(ķ-¾āēėė“Ā.ŠĖöOļܖ%4ŃČįk"ēĻįģ% ĻżģÄ@ÜÜīÜóĮģŌīĘ$D’łŲ÷ū ­ŽÖ‹’šź ŪÉĻāżP+ óļłĖąēėB¹śļ.ī"=Åä'ūÕŚ%ĘŚ 67ĖłźA5 “Ą=šģ§E"Æßńŗšč¦÷äāŁ°f¹øGFšJÜéöŃĒøÆŚõ &Źš·śžķłXżÕĪčū ’ ó4*÷ąź¶ķ<ōÕßŃę('žōģE!&ņä"Wū4-čāūģś)-ū  śęÉķ åč Ööķ5žw%ģÖ’(4šü“łōąį߯ŃÜč+ŗ×ü“÷ūę 2ĀŻņ0½ ¦ŠŻµźūŅ żžļ Ąt% (łłŠŻ)ą±ō©®³źĆöū%/öķ* Żļ9ĒČćéųĶā+źĀĄ<:ö"ōxF¶ūŻaŅ#ūņ(¾ėÜå6Å!:+óžAG¹0š+0ōŗA KÕōģ÷ī0ņõ(üäīĄ:’ų@;ž5ņQ¹­ęö+ōHČķŠĖņDćĄį¼U’ł)LčāņąÅŻO(G%$š ,7Q 2žD+éč×µ“ųю)é ģč½&9ö¦’ļŪ3BŃ1ń`I ÓÜŃóķ#ń+ö)¬¹ē›A,īŁļ9Öć*žŲ&Õ’ė żē<Ī;āÜ ÜĶŻēłłųēŃ šņö ö%Ō1ž¼Å½"!üŹžķģķ›ß)+ų ęłš%.(/žéśęßųą!šüķ(ę÷ā (ķ&ņ’#ä&÷ė< ķß'Ņū. šśģĮŅżšś ś7ē¼,ķö>š1ģõįļ ōšŲŪ„żąę² üś!5 éśńĀē žŃ!ĶĢĶ+C'ż#ó *ū-ö4×ų2č/ėå VóŅóŁē’&ū"!)öężóõ)ģņŅ,Ėļ4!ū¶ē" (- (ś*śšöŃÕ $ļķ0(Ķčü åóŹŁŻDķö¼Lāóāõėw.2š&Ś ü+%<’ė -éāąüź1 ėūņäłņ=Õāüõ æö-Ūųīķ źēż-לł7$īŌŚčšéż Šśøłö"! ×RėTā¾<ōÕĶĒ++ņ'³5ąąčF'#ņĶĻ. "ŲĘ  ū łé!®ģłś¹ŽŁCč8#ņń¾ąć Ōßčōõžżß÷ō% ęŚē4 Ę ļŠś?’#čšÖć"}ä+ķ;Ł'鞣ėē?-ī ī.÷ģ%ź õ žR+3åéčé!’>ļ/ņķܓĀ;ē¾ įł‚ŃĻŠźÓJ,ūæ*äP3Š)åū» Qó(ĄRūŪöĢ-š’ŽŃß2Õ÷·ń*8Hį9čųįę¶GN4ßėļžLĻĶĀA#$č&»9ńīžÜž1ķžų.Ēņå 4ź8ó5ź4čö!T > öóą¬ŌÖ%å īįæ Cī-6Õ?%I:é/&3t÷:čBł7#Ļ śčŽ*éāś7ÜóÕłŁ&ØqĖń“ųäµó/ą  <āõėĒ&Õ2Ę[/³Qėäų¼ę’ļ“ųš7²0Ōł7/Ś &¾ŪŠ?ŸŁĄ¹ŠŽ č°ćęį'EŚļé.-ļ) b58Jž ĖĖŁ× ½¼ņ#ō/ÜżÕKØż° ŪĻąéļ* ėņGŻ4ĀŻģ™%d ųņŻł Ė2śćéŅįņšöó2'!čŃęłHÖŁč Ų' õ:óiöŪŲ'ĖŪŚC3§%Ėė” ·łß!.&XöäīķėR%źgå:ąåāūśĄ+ėßŲ”ÕėDŽW8ś :ūūäYÕżš&éę ¾V%1ć(č$ ×ĀüųŪcĘ%% $ųųāį÷ć¬1 Ÿ- É!Åłß¤żüéüŪ ł, ŹćįŻ÷óŅ Øęßō0 Ö¼ö€żE1¾ĘķÕ48ļœŲŽŪ\"$ȳ©°"ü&4ķäSść ŽžļĒńA;“;ÅH4óIs¶$„6ž©qjź’°QÉīD;źé} b×Ųčõä꜌Pś#µśuļąÖóņ<ųJ‚2UMåßöbMżäęÜŠ ģåįĮ.Ų­Õ5ĻæDõ©Fū¼šńéč÷ ]ĘĻ: Ņņ2Fśå !£¾ S€Į"€’€Ūķ°Ė8ŠŠcŁ$1Ń~RōGGĒę ¤ņĪķõWõī(:§ŚĪžÉZ7W0×"Ø. ‚źōsū ń­Üėł0eĻ×5Ÿõ¦(&ŖŅRĄź)8ģ1į1> < ×åõŸ”ėįćõ]t,ŪH5.ŚõYĆāņ0÷)Ī!Ų5÷iā.%ī“õ)ęįF 'ē;rč×öīGUĒ+×ĮÉž'C¾%Ū߯ßćl ĢÄc÷¹F/Ż BŽÉMå&Ēō ÷ž÷A¼ŚŪöŠū&£AÄõ š¹ LL×#5•åī֗čōŻįżåŻŚģöĆóJā’ū&-ī äÕ'G˜±&ʹÓqŁÓ)'CøPņ!ö ×DĶŽLĆšØ£Ą>J&õĢčBāąē?“ (( N8„7 ńķü * ä«„,"¹å 2ŚMāųżó^ėņåߑŚįHźö[’ķ}>äāņų*ĒČÜłĢŅ·éŪęÕŅ =]žeó<· Ö ćź ćĆīpķž NĆå%Žśžżä×Ó²āńé%ø'öņććńŽ0ąåÖ÷ŒsõŚ,ž īĘI?ˆķ2ōžģ¹žĶžÜéś Żå*'.Ō÷ßśž÷V¶ļ-ų ģ7}ź¼õ+Ūv3HėōāŌč'łļ9ŅŚżś÷7"6:č5ą) ś,ņ(Ō\GųäĆ^ōļ7RŖ7i½?2Ić­©ž­b¼-Šļė# ‚O ¦ėśēąė ÜčPæ2łČŠŠD2øE? £Ģ"į} ×6Ū<ūżńīÅń\’é¹·jŲśy0³ßYž*Ė<¤ M’ƀYaØķžȚ¼6ß»Ččē¬žG°Ōõ¾ōł #ŌÖ¦ūœ±“±I%Õęl§+D5XȦčüńžž@LóŃ óć”± źć×2#÷ż˜)2ééł1Óš÷X©HŽ­'żĄń(¤€ ļ§Ą-Čšł”ī’ĖĆA§”CF+żÜKF"%SĘģžØņŖ ėßBżēŪįū°/ż’QöĶbĪū +„$ģą¤Ó`(ÜśöżŃķÜÅÖßķ“Čéóć\āåK'ųS“øÓŁF-äŁJų#5ųRĖBAā> ›å¾ś*š d +ļĪøä†¾ŲŹžÖĶH·$Ļ Ū(-™ņĘŁ8±ŁøóÉ <ä  ©āųIõJ ź %ā jÉAß)ÜF šżČķėĆą+ āž#ŅÜĒӑīÄ%>Ė"ßč’ō4Ś ‹ó ųÅūļ2Ēļß ł7čŁĒł1#ŻŠß Õ3źć »ĖšÉžµėÖŲ:óčšķĒō8ūųĻ!Óśģ¼ŻāH  ’ 4Ó Řó <īę“ć'ēå õÕ#üµ#čŌść.Ņ,Žķ!ćńžłščĻ,ģē)¤¤#Ļ˜įERŁ.äģé;²Āųå-ī8&°Hä1ĶåĮ(ĄO']ü€óĒ)['ŽĒÕčįÕ-CŌ?ßóļ­ōó66$ 0ćć½ŁåŌ ]¢žĀĢ 7,ųØ &'’MÖ/Å&ĶQBšåpڬķs:üą+4šßüń2äŃkĶīÜķßĀb°(Ż ž½??õŃģŽ #\Żż ōšü#ÄEŽÄА'—3öōūįüŻķ.ųõįÓAéĒõ ŁĪ ūŃļõ$G&;’!ńåó!ī–ÖĆŚę2·«śźiŪźļÖėä+ö<ńڱŁęGļŅņū ǁ¹R%īæ Ė³śłżü÷Õčē(5ŃĒłōé# !ūĘSŃ '1õŗåų€!/ę”éĶ$żŠAĀę9.ĶöÕ%ĒJ¼#ū š Cņó= óźĆ=ļ$ą ß7GĻŻR3ÉPŗ8źūśšäU F,ŗ&ŌēŌéń å ģ ł!ąėż#Ūž æł©Ó 5šė7!öįŅ!ļßÕóć:¤.ć×ę߯JŖ Ž( .ĢŲ%ķź ņ„ÕÓ >ņ0ęč ŌSJd ś’żé śįŽĮß1ģŪ0/Aņ, ē,R,ļžūäł=-õšō0šŁń5āūŲ2õīš5ńļĮÜõńä§Ē€šK łÅ OP<ŽO"'śšūØõü*ā×ó@Łž31ļĄčłßįįļųöģžC$ķ7Žņćāś4ī2ß %AØŁœ8iŌĒ"Ś]ūOųń.Å>ģüÉóĻ×č#īŻĮ˜/3ŽėńDÅ  ėDę՜ųÅ÷ę ÜźļęģHžćžn']’2łR!'"ÖŹéīŽKźåŅęŅ ŪüīK÷Ń’>Ųāóųd<=č%†Ī²(!€ćę42ęā+ļęõżé"ā:ŁŻ¦±š¼ ēć(õÓŚūŸŃ.Üä§&ķņ Aāvcžļ4ėI&ż-1¶ ž ē÷yåÅ’ łč«^,8äM Ļé=żĮSõ2ēŪö:ĶŪąŌ <'õJ%>ĢŽ)å擣üīé9īśPŻÖūżĘģČMbąc āģ€ū²ēÆB 7’C6=č¢ ĄåA”VÖ»ł@ńź¦^ęA 0ü#0ŁėČż>’ėŲéÖŻ#Fį”ĢżŽõ. ĖōÖ É6 ü8ōŚ'÷ŗś #"ś%"×;*ņ½śEŁ6Eéšė¶ąśÜļõūéŪ$Ē#ćI ßšó,$:X Ų.äەóį/  éDü ,’žź+4Ā):÷ū×PčAéįĒŻņīõÜŲŁ2BIŸ.īĖłŠŻ÷ēčä ÜÜŗMüõāĪčõ’ĀūÅķ€&ąŅżń@~ÅŹŚŽū&łįŁčś’žų÷-~æŪß,·Āó$ ō«;; tļPłā‘,,õģśå‰ xść/’åöõń]ę āņŻ$ń`Óś”ų›ģēüį(ŹŻ’÷w[éNü.Ō`$ęF<±ģ«źä#¾½ūĖm+»A÷Ń ÷ßg7öżB-äžąńõš²īŃĶ»ōų.ŠüĘńź,.Äć’/īķŻ:©K·$2ŻęŪÕ#%Ź%žž PīæćšK½BŪ!'ćįóś]œž2ü:” JB/Žńź!éōņļÜ 3ä=×ļ64 ś¦·//Iē°’ RžHŗö%ĮQū?±ż;ū#&å€ZUKėŁ Lėōüŗ4 €ģ9P1ŅžŖ‡=@Ļ0ķ>$ü€ōŻ< Ō, väŹčł³9ā=śā†Ä ćöˆń!_F@żŖČé™%’½[ųź2Łäėųęéõ> æģé’)6õÅKōģ)äś"ėL Kp×7Ŗ‰Å<.×WB4’ |;ęf B•łY$·ēóßūŖĖBQģę¹ĻÉŚŹé¬»óŠ÷å^]ŠŪęaŁŲżßµ’ļ Či4įå0% ­6÷[ ©Ÿ!ģ0 Ēń"Üņ ÜĆųöéģļģĒ’óåņįūßćĀēLžūņß ė!ä<2Ł#Ä/ćŹ&óĻŻśģ÷%ūó÷ ś C*1²<ĖēŻŅ īķņ GŚā:żģč źŠõ ŻłõęŠ*Ͳž*ķĆØūm(äĆę2ń'  ė!ŲŲģa’`HŚ Z!žéÖłńšįļŻ ŠźŻWĒ#Yó2īļL:4€`2ć ģāō æńßõŪ*ā2ŃŹś! *Ė,>0&$ĪŠēāųśžŚ;:Īā:Ó#Jóņ$Č& Ķ#Ģ9!öŁŠ¼9 äŗūŽļDģā9’K,ó×ńČēßåÉĄDė³Źūķ%ßŅ/&óēõķÖāļÓ«ėMć óåųZ¤83įīĻäÖĖć#3éŪŅ1 ČébÖ$ŅŪ5Vėę% ąłä!žāńłÕöųĪõ ¼1’łü  - Ѭ šßņ+éÜé;) ąęą·&ż÷åļ-ųł,ł+õ#Ż öńDMļĒļÓ÷ņ ¾½žR?  ŻŲ  õīįóń!&ļA(öžH ņ ÷ õµ¾$7Ńżōōļ Ą š>("īś"5š>Ū8; ’šR&ā:żŌœĶŃÓ ’ēĪųŠ!Pū?0ąćūÖæmšļö'Č üćÕÖ!IŲĢ4Ģ!ÕīH7i¾üķ .Įō 7ļ/żā2źčŠ$ńĪńoĢüĢū7Ó AūJłÜ5JŁš"ūöZYé(Ėā{Ō -ĶĆćõĢųÓ ŽŅé;,Ķ҉¤ų×ļ$]ņ2AšM%ļŽŃ:YĶĪęäĢĻż,Óæ%+šń*ēŪIė: ż2ˆÉė-ż. Ėćā 9Üšæ5÷3!é’.éēBŖń'ė ÷Óšį>ģļ@ :ś’×ęüóēŗ. Š:ćUō. ą$ŪŲ1Õ$ųöåģ$ųĄśółśŃō;ä7'Ó Õė*ėø³Č=å[Ųś"?ŚüŻ6*O§ė6č!7“Ō£žƒ²źų.ć$,»’Ŗķźń’ :ł(Ōōéģä÷ž&.é ą&Žļžėēż³ @ßŗ’;¼8éĖ#“4ōōD>äĻéĪ,@÷ę*ģ@±åōV'¾4”JŃŚČ1"'Pøēäęńįė¶Ņš’Ė÷ Š÷ūÕ(ļ;ι(léé§ ĆÜŌęĢ1$+åõ÷õģfŪõķÅų'č!ēÕśā35’ĪbČ%TĻ¾³ĮĶä/ŠŃū-ś ģüŲėĢ-å€ńĀ3³:'!5Ģõł!. Īčå ÷ ¼śŚė%,÷æ10"ŅüC²0¶(ī© ’8ĻĒīõߣóÉĪ)Q»ćų+Č ģIōŃ% Żē „˜ŽŌŪėņąČ"żP393 pķū1ņfž«ķÓń¾Ožżńš÷(1Ė“3 +ęčēæåņ÷ó )Żü 37æ:čō’ü ī×®ÖŻś’Ā #" ķ÷ģņ `ņ×ĪńķŸź!ü QĄāŽ<ŚĻžŁÜå*öž&¹+Å3 Ł 09+Ś—ć&¶Óä*„óęūū=#&O’V Bćļ ćķ=Ż)×ėžŽ„öżŽ«Žž°ģŲ:ēLœė,!öąG×õ ÜĪ Yķ 9×é'ńQ Ų0ā!ĄėõĢa ź['ģ”Ž=ĄŁęMĮ3Žä)!1¾ø י"÷ē-"½ÕčłĶāLŽ YźĢh!Īķ%$ ĆīL÷ōłĆ*ĶžĖė"ę ÷³JĄšŗõūõŲšē'8Ō ż īõżUūŻšŸĒ"$ųćąüĖš % ±É öōū1!žš#ńĪ9Ł&Č ' ČŠ Ģć%5óéģšß,°ķŁS3šŻæ2śMżęł"źŁ¹$ł!¹ üżłčŠÓ éčģ@="µōIą§Żēßš§óÜ ēø$8Ņā(@µŅ.KźÕõ› "?÷ś’GŗĶŽö ī(ćĢ  ŚäÆŚ ņłķ9ݬŪŪ­ÅÕś!’ąśķę½ō,ó×ī&!ģó äõõÖęVÉVō\€öŲ÷ČB!§č ķąćŁ0ŻįŃ÷Z?0?¶š’MŚąÕ„€EŻŲy¦ܾ÷f6ņøæūźķ ł$Ēŗ/ ÷š–ČĢ/äœÕ'ݱéžń-āÜąš*é1ŃōŅš%"’ŲĪ%żÜ-·ĖE.ļYSšŌę¾öóžźĢüņŃŅ“żü¼×ŪģåĶš 6:ū¾ĖWöÖGśļ%ņę»ŪÄį8£„ąļŅīQ×ļ6&÷:éŻĀĢ'Ų9ŠgĢ.5ļżÅķłčå:/ÅŻŗ /ļÅŠ6)č’īæÖÕŁ*ś÷ņ'õęšź÷% ß # ųüŃō¢Õ½š0õūKĻö’łåśźÕńŌ '!’+öŪžéÖõŌ"ŅėŌżüö !ł"šÜć!õQŅ!3äL`ß ńņŽźå0ŪīVćłQ¹čéCģ&ūŻž ("#AėÓō=ū;Üė6Ōżūėé źī߯ģ šš 0ć %ėńŽÓRč+óźōł ó*“ĒÜūW( ńōóęÄ.$éć' .9&öõį 6č¾Ļ#ņJķŪģéäŚ;īR¦(óg*"Ŗś#īĄę Ū÷õ"UŽõšē÷źNĄī+ł ć 5;¹ŗ1Šīöć47ńųŻ .!įōĶųŽ/ņ4-ņūYēėō» š  ćģŽśµ¼Šč ÕõT,ö2ĮåŖöŻżJł½ŽĶš/@‘s±ŅÜ’BōéŽ÷ÕŪėž¼ōŌ łöŅ1Üō Ėė$ł!<2;č ķšæ\ų9+:č’šąÕ¶öōa÷šī–é”čĪ#ō'nI ŃÜ‚"õŃśõÕcłŌWąõ ÜųDDQ KŪŲéķś'ļų÷ųü÷żę"ŠŪ8%6+ł Č āŁלŪ5įCżļžų>žCÕą %žū8HūčĻ÷öļ žżŻõ½8 õ?&ńśąņ2ųäó(ąšŽēō:į@$ōķöųŽMīŚąJī+ė=,ōĆššž7ģż!Ōžõ ¶(ņļłōķū&żż Łś ž żßĘ!"1#įå(."÷Ōų* łš( ļęųßĘ®öūģ))ę Ė+ę÷ ūÄīōŖżDŻßų-030 ļ ą %Üšęüłč-- ćÓÄāéKŅ üĶ!UŗĪłÆ0ńė%°Ė))öö ų9öłßśŲŃļüšŽ"ųļüE-ēó ę āéćžšÜ8žäś (ÜŅćżėć śņūÖęü (ÖžŻļBėĪ"ę’€6ēĘ/N7ż9€üšXŪśń=Įłõ'ćąī輨$%DĖ€ śė,śŚųļ’īų ŗ6ä',™2*Ó@Äģ3Ī- ś! ć¼ž*Ę@éńĶ"’,ö$é8ź÷/ž+ö°*Ó×ų ö:š’āßäöŻ śńąä ÷ō#¶īż ņRŌĻūé?YõęÕ6"ć¦NNAEźßč:)…ĖĖ ķ@üIłļšŲBīüāüžBžä"öūÜ źūé Śįė §#ųšöļžōė*Õ?šž Ī3*Ė öļ.÷īł÷ž\ķÜĪåūš?čŃ"üčļ!šJ÷ČūAGŽ’ÓļÓ»)ļ;ß&;3H¤6ųŪņčļVūīī5Ėī ōäōPĖBīŪüA&ūźééž ó“ė?ł6'ÉīüŻ"õŲäńø6&åš 6*ü;;öéå#éū’Ų÷ ęāŪņėųŃūōÅ"µżÓčV%Tńū ,Įłöāń¤ś1.!ėkī#¢ ūGGĪńć²ć-&ńń$É" '’×ÓģņŁźóÖ4 ō&ūÉ4 ’’8å+Üį ĮøöėÉįŅĖė üׯēÕׯ Ó ŅßśI ,:čįÕĮ"ĖčäžĘé)  &ś'ņ8į^(½Ćā1m²ÖÜīŚI "Wóź+++ĒÆ÷ū Ē£ĆœäXqüÖŁĄó’Öfå/{üõJ<ķ łgų ć ½2#Sō„ǽ‡Š&Ŗäźųō ž+° +Ó °D<ążxŌAŅŁ»÷ŽŪ $ ŻŹ"¤‚ū(Źq &ļ» Ćź^2ć 1ö( ż—Ū×ķC>äń&Ūö€ōP’„0-Ā*ųŃ)ŁŪ1ś(ÕõīĘÆŽ<ż!Ėš ņ h(%ąŒ&ö?ēņ~·ŅŖóģBčįÉįłŚß8ÆŽńūīāT¤ŲųŁšŽųü¦ų*ʀłźņ*»ż£ChÖĖåFöõkŲ³Jīóņ)0Ł 8DQĻõÓPSfģł÷Ęįęī˜Dm[żå[·,Łčü åźŹŠ,Ļżēķö~Õ8ōē@ļüÕ ĻŸčćź żä_+ ōŁ*~ķ“ś®ßć ū²Ģg ĻłŁžå÷oųSäG’ -X­żŚ.œ¼(kćCģŪ÷ bčź!»ŗä+0ę;%Ėįä ÅģŲR’Ѷķ‚ó⢠ Óm~D3ė"”+B( šMōöńųó Ī_*ōŽńŹ&ļģ50 „į׎ ā÷9 ?źČ"ŗ"$ü Ķü ń“÷Ż4łüŌ1"ÖėÉŌMńģkKŅĻ%ŲšŹč¶+į»:į*™,ō *ŃšČū €O$ū Æå $/ń$ &-%PG:ģĻšģŽ žżžśėIAĆžÕ¾>  ŹVūĶ;Łėļ ’éįąÕó7ä ń»C½žÖæ<ų8 ¼#ŃŲ€Óü/Nŗļ<ŪōJ^ģ Ü%ś@&(Xōįńą÷9!äĄÅÄ÷1åœ>dä å!+TĪl:æĘ$ÖÜ3ہŠ÷9Ė;ä-'ŗ„*ū2Łō Ė)*A7š×žL6,õŗE,ė€ä½ ÓÖę¾ķ#ż>ńČž6&)ķ%ö× ī‡6ŹÅķAÓŽšŪŅ#Ń„<¬Üe$ŚśśNŒć¼SŠö‘Ąüąōńö=ÅjõŽČ ÕĢāÕ'Ą*½k÷ĄOė9Ÿ šÖڰōÖ9ļųDūėż&Īń >T 2ž ĶdŁE‡ó×Ņ$ä”įID 9ęŚÜ- ~šT£ū–÷įįß%»4&*WćĻōšČ æŠÅž>Ė5CĄÄøü%$ńŚ/źśī÷} Ó)/÷öōį?ē=īÄ €0Į#€3K, Ó ¬mĖ ÆRBĖęēĪįõO Ėī.’¤īŲ ž×ąū;z’óßü„ļ4ų+’+šĄää,óāżśå ńĶ1åÕÕō¼’F G4ų×åč±<ö9žĄĢeżņĻå—įÄģńš’óćé6ż÷ 8)(õĪ®÷źÅõ 8ŌŻę#©šŚ!ęĀ/2­MļēņŃÕĶ8īĶ" õ !ŽóŌ#öś ü%ėńź?”ōŚÉč~śŚżą%W#/åLŁFźÖ;„ū3ąÜą÷ģ9ū>YĄāŲĀĀē鏎^ł9’ö4ų׳ Šśņ¼ŲßäæūźPöč Ż^ŽÄ·\Ż °ł™ōćĘ#ž’ržžųćŗ į!ĖĘńRŻ'ć Õ@Ļó/ź1 öęĶŲ-\MŲōĻ*Āņ,õ׊÷éé#$ę!2ž üX$Ļūā:€ Ō= įŽ,Sū#õą÷­ A7ÆŁąßīP§äéčFō(C**„Żö&XźąĆ5ģ Dīń+2Č Éļ,ķ 5=Rß(Äč]+’8ņæĒšßé]ųE5ÜDz9­IŻ6Cõī2³ßĶņó;ÕęIžĶ÷Ą ļ]Ęž_’ł ¤P:Ž[’*Ź4€;8]KO²ē)%H‡¶é÷ŗ}ƒ€!B ֚ĄwŚ*ī€*ŸœĖÄ蒀[96ۜ~į;ęŠ%7L~}um õė? éN×Āņ$?ĻĻčŁĢü ĄÓćÓ Š4'$öÜąŁ2Ņ £µö“ųV WGŖę/ļRęīó ż²Żé“%Ž ‰P*¦)ßčūćõśŹļŒ*Cń1Š$ėåmą‚=+`ūõ*FädÉé,ųÅUķ'ö5bä%żū-nüŲŽś0©9įķļŻźēāŲ=!ĻŁśēa!?¢ŪÅJęŪē«Ž\½ē!ųŁøDŌμć Éź6ł*żŲŻē®Ź·ó°ąĄŠŃąķÜķH!Ū*9ķćõT 0 ®žõÅĻS&G/Ż 'Š7łū^ éߎčā"õū»©ż¶ÖÓ ķȒٲśĻ&(, F2É /.ćc.ģ“öķ×! Q $ĖłšļĶįĒüŚ(ÖłČ÷āE!÷ #üó$ļö ņLüÄįmÅbņęÅŪH:ņ÷8ųł&<ž üźūļóĘśōŁģēĖõ>“Éßß,0ŪõüłĘžā ™ł÷ąćŪ`ōģüĘ’ĒōļöÖē ų<óž³żė Łßś ÷ ū Ē#ń- ū>$Ńųźėó ėž ×#ņŃé!ģŚ%ŪļF÷Žļž%öAł$jų'“žļ3žę$ü’Öņ+ČĶŃßWõ÷ļåŽ8 "żīįŠąŪņļśé8łņ"#šīšźŻŁŠļÅOÖ#4ūņ}żü>žČŹ;šŪ6;>ę*M A„$Ė/ĪÓ=UŠ’ųåį5ķ+ė0į üŖć°ŁīŸD*-äźź$Ł įĶF QĒĻÄ̾7ųõąp 3 ĀdĀāåūüĻčÉįäĒ+cĶ Ū L!+'ėźć8ū¶żõ’ ō) 1¬'ĒĶ ģ">ōóŚ*ėóėTüõÅ Ļ 7! ÷ĘVŪ Ū "ō9ńų’ éņńóū×#’šī.óģ żåņć’ōų#>Ųžō ģõ2éēėśņżīĻ’+’žļ$/¼ / ÷ēåķļ ž4ī ׳%#Ūūłų×> šģ +ņ# 4Ųß/(#Żį ü"/ąĀļóźU ė ó2öń żž7Ēųį Č’ßżżżå.H ī ėėÅōŃńķūā-äłņÉ 3>Ö§· óē@łŖgé:ēźŻĪĄŌ:$C”ä<5 īĆĘżōĄņ*ųę’6ģ<Ó5éI޾9Fāģ94G&$öõ&śYįōžßćPą¹ē; ł1ēųØ9ķęćņ,ö =ŖEżŻ(»ø(VĖó=/łõV±ļč'pōļšŌ āŠöģŪó›ó/$ó#:ņņŽĮąµŅłś)ø½ßįćøūbģó. “77±)$ō&ż čŠōWŠ’“Ė ņN欒8+ķ ööŲį1ĖŽ5 ”.Ū%G}ŅśåŁ"ćŪęFöūŅuŚxŽ€ŖōĘ ŪA׳3 üSåJž#óž6ŅŠ Ķė ½/ āņ<ī&6ü;<Ą¾źģ+žõą$˜žåŁęJāąÓO!ų ±ÖńļAÄV /āÕŪķß»ųČüĒøśŁ7M# *ōó;żϵ żõžÄÆ īōķś-[÷ī’&ĆOŪķ’'į TĪĄ 2éä AółĖ ß½Ųå/(’#ÖAŅķņ1¹īŻé§Ģē2Ö×; ,}ś&°6ųĀėļ>!ß1źņõė(߀ %ę’ó÷¬Ö"×ļ *ŪųŽ?ē<ń& č9źēęźįĪńēŽõÜ śJķŪžū³ Ü,Ä(š“Ü<Ėń7%Ż é ź$Īóēæ/óļ+'%,ė1ēéŌģŸ5ėĻģ āäńŃ£-&łļ.įųŻ%§łG% Ć÷õų»ü!3Ńč8źXöŠŲŽėõ×i)Ż$ćųŽ×WFæńķĘļf損Ō+„ é ÷UżćŠCqå. ŻUkĶūišŪøŅKµ|÷§ų½€ūś%ö%ļ€ŽŽś#ā°¼ķ€ÓØŗ’R!ęčÖ .ÅčśĒļü¾r=żF*A_Ęz!¼ģõ‚é=;-ĘkŸ§t”(Ł*—ųA2pLŗ'śō¶Ś:,õķžØ˜Ģ•/įŲ½ķ‹s!Ź„=¤Xæ÷) żÓżą ś×8ś,­ēÉ -öšAó(ź'ēńWŖ;0“Ņ- :łšžMńä<Ķ ¬%'(ŲäķōųŌęēÓ )ūśGBö%ēÉČ)?üń$č0ałŚ:ÓE&$śżé™'Ų08Ż’0†āęÓ )Ō³ō#Ó7Ž5éÅŪ$@÷n€’§ÕęŚŌCī[ śüåŚīæ Åņę1Żļ÷Ņłöų’@»ē;äüŠņIāOž&ńļčŻ*Ė:ŒāYüżĢ ”šßĪŪ_Ł  ž ÷ JžĘēü’š€÷śÜ”"h_ ƒŗ’Óņ$ćNüąZ#!׳ōųĒ ž°æĢ’ĒĆBóÉŽīć ā,ܵF¶LŠęņ!žćūŚāęäiŽZš'ĪęŻö' ē!ßšžF-„öÖ÷㮽éN(G²«Ē€ ńÅä–ńŸÖä)×ČV#+!īĒl> ężŪ<½B¾ßžóĄķĖķī꓌1ŹģHŃōŪ“%¬Ēž’­ąĖū!ē0å+ī"·óĘš©ž$ó§ēŻ āŚēčūŻjąŹ18äņš€&ųō Mų2įšćÕÜćį9!Óü.ŹāY ŲLšæ"õō&_+܊źįæ0ō» = '.Ä;č"÷$Żćļęéł÷čŁ"/'öWÖ-īŚĖ ß.¶ä-4!$/šņ8ä÷ÓĘæ#żū'’ķ&ķūČüߥŌŃįĶš·öV×÷š"Ž¼Ü šžļŽBĶ 3ņ ĻīņL-łčł!=BõŽēÅē,Ńüō>ėś$#ē 9łŪķģ'üŠ<ļū68õ{ĪŌŽ<Č@׳—čŃ+.äēļŪ Ųóßųæ*D’$#źĶqaŅżģš5ļ÷- Š žüį(į-  ķ¾Ųü«æīĖ­÷ā'×ā$ęÕø#ĒŚķ+Ę÷Ž×=ų ß6½źļÜü'łķHÆżł !ą ÷óŻō¼äV%5ą%*ŗŚäģ’ !"Øņ’ å19āźĶä:ŚżÅå×Dźż+śŚ øÜł5ų "āÅü%Ū®ßOĮ($Ć “ öĘ WžMóž’1)fō)Óōńķ0ō)ś9įłŚĶä Ėõūūļ"ī*ćęųęGüCųķ ßāņęåT" ¹÷Ię%:ŻĮńéŲķąõĶ Ćę×GĒŹäūÉ7 į +Éßś,āė’ńėŽ,Ģ\źļāŁ Ļż©¾éÕ÷ö3õ ŽĘ ūõéŌŻūč¹š.ßóū9&ė $/ūSēōéÓ ÉóY ö6 ¹RB¶ö &+Ōęó Õ^]$ĆōF÷å: “ż ń1DīłҾį'÷öó4įĶąüśĮŚ!fżą÷įeŠĘÕZõ#č÷¶ŗ“Ī%öõ[,Ć1ŠČüŃż $Ųó »8, iiĆ2æ#ćż ß4¾¾÷&īZHÓžī1·Qšļ¬¦µ gęŃśĶō<@ųMŲ'ć$,ēå9Īö©ßé(Óóč;Õ1§YÕѶćō-ß·īö× Ģ6ģ"ėį=žČööā)@ÜÆ2ö÷žščµŽŽ0ėĀģęŲO;č’Ō*ü×¾"½īÜė ųõ×ņÓŽLųæ>õeä4ĄNB$Ź×źń󮚌/׎6łĢEńłüC ķń' Čó`āė’Īæ×ęĻDĪͶ(ėż'ģY+3ZžÕ×ū ō²F Y,­[ēĖäUÕĆ+ō*÷ ’ąßęć(ńūžĄ’-ł47Źūóüč"! $źĒ ŽŅśļ+0ĶįÄŪ;/!Ōó(Žū(įā ß łB¼óą8óś ŚŃčöę&üō4'¼!ö .dWēļ0ł0¶üČī!æė5E (C",* Ēś)Ųé*e' õīó<āģłšĻ@ž ńäļ>ąü#óV ū(#].Ć/éāöÖĒÓ6ƳćŚńŹ ö,ńĪÅŁē’õäęüiņ'é­Ī?€ńņāāēŅ#(WļœÖ-ć-<Ņ·G ™’1\ģųų 2!š²č(3ɦ"Ō/Żŗ-ä¶ć8ųļ÷ Ś ŪÜēXÓ  łBĶ’@šÕéō$$ōŻŪ©ź8ÓśĒ&NŻēŽ8’ŽńÖŹōóÕ(»*JĶ3õčŌyY9ī=#ĻĘ GŹ !ōČŚÓÜ 3ŁņŌ'ä$‚SåŚDįōłŠ+å.ó@Éó2ø Żģ[>ō×­“3±0ļńķ2Ģ Ł#ųē=-­ŽŅĶ’‚ą×üņĆļžŃ ŻÓ­(ßĘ4Zī#Lö&ŽŻś"/+(óŌī ęėÅĄł/Ć:,ĢČĪķŗ PD(RŚ ż:ŽŪ“ķ–ńė:żų÷/6ŠōåIEė(ŅāīXźĢåž43BåĶ<-=źÉśE1½åŗ Õ UŻŒ%āéTõ4’õ5!DļņėR-ķ* ÖO€‚’UŻ?ü= Ņ 'eLB"ųEŽųź1ß@Õļķņģß%ä揚•ę'L Łü½ ńČł@  ü÷¹1Ėń ŠģŽś*ā-'ÖL’ōūģļ Ķéņł łė[Ąø³ų2?åęąéü&&Ź’ ł%Īęļ»(/”+ öČółŃųąŌŽņćÉ$ļ­ÉA6ģÜōäü4Š2ü(%ēōŻüĪ’į6+ŅńŠ3ņÄ!ā)1Ø!(č1 ē§żłÉŪ’ķ Ū"5FÖŚÕŗ°øäs 12õ# Łāõ ŠĻ ׊(ł ÕĒ'#čÉųŃÅąÕįļF %õWō 'æśßųźÄ:%½ A,.Ńöa š’ėļķžA+·ß M ‘r]ź3žŻC9Ļ $įhä=ˆģŹ=Cj VŻ84Ā7Ż÷X*"/ķłŠé MŲīéU#MņėĄę’įśśŲĖĮžåŹ\źŲÖ CóV©ŽÉ&*œ—ł.5 öśå$Ņ*÷4Źģó%ūżó. ŽŅ8é$Čo-śś) Ō÷ņÓ4å·šŲĮ6ńńłžžż Ͷ ݹĘ"ßJą>čūńŌH4Äū 2 ķČÜŲšł€#üń <éÅšģųĘųų!hļńżö Ē•Ū":2ü€ķģŁ į.xīuęā€Žęź(ą’y#]3īęĶ1žß„ļŻ ‚%ŁäĘźĪ Ė‘ŖCõRÕÉ+$Óć=Ū!Ų õ Ū8$×K$ ļHóR=õłĻiü4Īģ½€ ¼īņä(ļaā’ņ¬šąŻÕŖ'ėŗZŲb"ūŪŪÕWšN ›Fī`ģļĻēč CZ @ś+вī„ų ĶĪņ2éŻ-āZĖ)ćāųhåżU-ż!,Č!7#óę ĻBL>+ę @ēĒZX*Õ#ż!±ÓłėćÖ>VśóŃś)ģśŁčŻ#]3ö¼ż)Cū÷ņĻŽõüY5$ā:œŌ¼'Ž-¦@Bīü8ć*,ŗĄĮŅŚ Ē/é8 š üJU&&äcÅć·“ńéĖļ6™ ¦ž0é1 ±,V÷04÷.FC§€Ł3i…<5ż™¶¼ O ńą^"·ńĢj9ž }ū³ E¾¹öūFE°łNŁŹåW€š:½NÖ@’:ŅąaDė÷E£ # €ó ±įąń%·šØĻŃ-źŲ¹ē · ńĻb˜ŁyčWå&āŚŃöźĀę’ž€Rżī@ŗ+d-L€ćü¦éŻžŗ_Źé Ū‰Ķ SĖ€ÄīųŖļ€%=#W·ał[öś,Łż%ćßšÜäųā ņčóōµåņļ$łūĢöģņ$Až Ņī?Ķņåō%įÄłŲĒķķĪ 9ņ÷ī÷÷§ 6/Ž 1ķß $ģź’8śšŚ &ėü÷üłņÕ  Üī’ī½÷ņÄżę ōŚó’źó÷ūö÷ ą ĪüõłĘšśü#äčŪģē ų *Žķ)ŽŻåķāļšÜ˰!ųķÄÓF MYĮėéīDbņXķā ż&M’Öąž ŌŪ£|Q śŚņāńqÕ&'UŌäAaé#‹¶& ųė`Ę÷*éDŪņÆ µNč ³£ļ(D-$ōÅ%śŒMū?éõ–īņĪü:źčD>)%ß3O˜(ķŠå‹ģ§øŚ×CHŽ-" ~M€ÕBéHŹöGM<%óŻÜ÷Q„ŲģCMæZi©ŽEĀ"śĢŌ#ōą)üń!ķė üüŻ,ā2Śķäūżōéļņõ0ōŁüĖśłŪó śKćūŹēūäń EĢĶūśśóõ )ė_ ½ó Ģ įó D ’) źü ł:ō4ĒżśģŠWjĪõå-Š÷#ńč«B ņśšž%šßĢ8ŽCžķ=%# ę źēłłōūćńķ3üćśćżēćž.Ż$..*’ļ×4ß ųń=ĘÖō»ęī%æó"Š3ź®Ķ ’ę æR÷āÕĆčB4õ×Üšųņ ą"\(ķņüļćł’ŲŪ ' ܹå$ż› —/ļ’ó-KGģŻøŹ?!čDųóōM!Żį7Ģ/_?å;Ķ ņų5ŲĄ4 ķ'$śöŌć¾żżē/ż Ķ)šßM–ī2ķłģłų’*Ņ9šōÖÕģźōņÖį. ?Īųö÷  õ ųĶūćĒ’é Ä× ż śõ Ņó  Ī×" ’’2Q÷üüė- ń Õū÷÷Ų-ł ė’ó Ž/&ó7čäżćŲŽ÷ ÖŠ ä÷šźéü÷’žśŪŚģžŻņšó (ä  ÉŪIń÷3!īöļ=ųÕ? ųųįų ą;éŌįJī9č ųżĖ.ķŚöõ¤ŖļžšŅąåųĮ Æś0& įš3ä žūöČõÜŁŹ)ēĀń’ŽąŚäĖż/2 ąūV šłį<śģčųō? ź-õśįĄŌŲWę«čŅ4ļ÷Ś ń5ņÅüĻæ% G ó!üū’äöĀ 1ėįó'łõż5üīöüÅ@dé_¤ŃĆēöFÅ=śöš3K9ü=\Ųų MŽFõß0!3Ź'žäeŽ;¹ŪóęSöø Fša?ų!-ęµīķčĘģŻ#ĆfŲ£ łéĆĮę %ģÆś õ+'ćé ńļ$ĒI#F×Ōč…~#Į>#MĘņ2(Ō28€M@üä@Nī ÷C\!ż1é¼,āI-ń ÜīĮ$× ŗXŠ0 ­4 Ė;;ÓķÖĄū*“šäōžęūšń5)š³6ļł ä8'ćž. ’ Į  ē3’ģżņōē)ļüõAŪ Äųźļššćņķīł’õ5Ćžõš' ńżį5ģ’Š ń 07īžĒųåļģÜŠŅųųēłū(ž=ķùĶü*Ķ-śčö ’ń’Cņęģū 4 č<ŲŠäźåņ8õ ūś č *’įüöņłūõö*ē čéźśļ’ ’ żķęÖóįķžżų łņ½üüłń’ į ’ņśž#śŁõņä.ņć&ō’ó/Ż ūäļüłüōöń%į; čż÷ųż’ū#ó,öģŌ įŹ Ż :,ųš ī ģćų- ģõå’õļą"ū źśų ė čņā õõēī%ęÓżüē&&ŲūļĪ1óåó#!ŪõŪ /ž+ Ķųē(Üļ)98Įśß­ĀŽäķöž ÖĶåź#ŪāųéÓóŲ$ źšéÓ*!" #ņ+ś+CõóFę$7÷ü Ž ē 3Čż ÖķÉńżŽöĖ’7ź[$6’Ż2ōļżņŚāŁ™äć ¹ņī%§>÷źēēĪÅīŲŻŁ7#óö.ń ļiģļōēxš D÷ČŽżóŚćßó×ÅāęÜ’"Łś  3ż³)÷üżŌó Äōć ńóßū<äõłĢččéźųōʶļųŽAóĄš É ¶šõ÷Ś,÷Éś/ōūč?ōüų±łš' åĘįš#’ ū@Ż0Öų)Ž ēļé śż#ōä’Žüóėģćżč ń Ķóā Ö Õ8 !ÓłĻņöÜ'=é6ę)öö ’šōėŵ“śåüéü Ū ņ žó ą53 ö÷ł% öźė’żś÷’Ū’ūōTöżéļž äÕżīę Ķ 6:×õ üžģ #Óüžü ß$ź źžōī9ōśī !ūž'Łś8 öśŅ#łćÜöó!ńłŠ$’ČŚź- ų&ŽüžĢ7É.÷Śčü žóėŚåż<[-$ōŌļĪśåāž’żģöÖ%å .&+ ×ųöŲę/-÷¾ū9ėæ ķė! ņŪ ī$ Ó0’ńž@īēóÕĒōāļīÓ"?ņ#śÜźųÕū0’ ļöśģļžįńļV€Ńū- ųō9 R9A&öķ)µFÖ Ń ÷Īö <Žõņäłó. ÓéHXöńÉńĆNų­žüėśÜ öL.ń'9~÷ćŌßĀ»āēą[2üÓģŽB "ęņŻķ äąį ż’7ģČÖåå »-żäļ  ž -ž×ę¶ÅĘŻ!āóźäõō÷ś ÷.ö ŁBš ,Öšü#ēį 챑ī ó?Ą9&.ģū ž  ģŪś#ī& šó»š ū łųō"1ģß2ÄäńFŻö$›ŗ’ā «ÜØ#ČśĄŃŠēūÖ.īrčĒ&ēĖv&XĶ4H*óæ= ģīö0óįŪKĪōó)Ē€éM#’öž•óÖüäk ļž ėņ“Ž’žųKņ?/ ė5įźųņųŚĪ;Óō2’ $żš×Yūø* ²ą€ĶÜ;śė±łū%ó&öē 0ÄńłūÜ’ūŹ€üI³D®īł°õ'Ć ģ*šoöüāå ˜ņŪęó*ņ $+ÜųŻöł#óūīüVłß BŌÅņėāģūī5+ŅÓėÉČŚ ėóüÕķ¶!ēŠŲ >,ńå’śģģōśå6Ķģżų š’ ’āō÷čų šõ,!Ņ ķŌ6ńõŲ õĖDóśļķżO0šćŠ įꯝė ņź $ģņ¤²,×»Gö#ńš#Nū ÷ņ­Ł ž ūĪDģõāQūģļć+#^ńé@żŗÉ-øć) ņ$ļÖū ŻŽŻųüÄŁ ų õņ.ö×ņūįć1}śģŁŚŠĄ(ż…ļ&0ų"äŲż ēō®ēēÜłšéķ ģöģįč īÉ! ö÷ėčųü ×üŚ ļł"÷¾"ēś śó!ĪģśŲęBūbķśųa" óé÷öķü±īģŹž+÷žšäÓÕ“žÄäņ8 >łź1šŻöģŹļąžū ŹŚåóē ęóŚąķ4 äKū WčŲ@3*ÕįńōŽĒųÜŲģ #šÜš6 ū 0/"5üŃ:Ų=ņCŠėūå ·ŌÖĖēõĒąīĮ×+ū pōóCŲŗż¾ éļiŅ#ŹöüO!:öŚ÷ē:ÜńēņŲüĒ#ö5 ć=ų) š ä ķę ńšļå Žž ńź5ü’żģ ś÷Ļśķéśśńó ż÷öżėõų ų÷ķēžę ųšėļ"Üžųõņųšō šüļ ćōļöąśņńķü ę’'śóäŁÜü īÖü ļś, ö$ģ ź %ś ūžśŚčÜ ō ÷šłķō ųėö(ģųčü’ ģ Ž"ßņ ņś;ć+üģęčžžĮ ūÅĘę3 "ź’ćż3(ö#öRžöļāīėļėĪQź źļų5,$ģŃė !Ö· # čž÷ć"ųŁ’ķā*, ó;ęų <÷ęč%ś³šĪŻųś$čųÕśčūō9å*šńģ! ńč 4Üéļō I÷; ­Ųń#Ń* ,żń Łą÷ūōóŪ,óśśš×üćķųżōĄ )#ī’Ķķ.żń’óüéó’Ó šüõ’:#ūģļ&$ųüõŽ/ńęõßóņ’éū’ö 6ųžėļėņžīŅ(ņčö÷&Łåä öōūč/ŚęéÉŃ āåOąģ’įŪī*ā$ĪĒóēŚ ä śšŻ-B ēÜåīł ģ¾8ū ( ņ,ū 3īų"ężÓģī&’žńŠ ™čżāłē ęäōłōHę ż&ēŌķź,ņīū¼ ėńų$ķźūž!ā.õŅżšōžų  éŻōūŽ ģü ’ö4śå čŪ ’ēŻ %¾ó&-!ļ’łö.łß"Õ ŽüżÜļļÕż÷%õįź÷#ģś õ÷óķOščļōŲ ļüńšź0 ņå$õēčō,śļ#ūś óņ"üč’öó ėéCÜĒščų&žąłūųėņśŻ öŲč čÕņĆą ų’ļ ’ō śśż Ō&* Ņžńł īüķ×ā 0ż ü ÷ öéż÷Üó2 öźšĀ '/ŌžŌ-BóņżÕēüĖ’ł üńś%ŃšĘ%ŅŚłōīō ü Śśż+õźć5ņäŲųßĶ `·öŃśžŻžūŪ"9 ü 'ÓōŹ* Øģ%ö'5ź ?!(ņ3ēę B>õ $Õ$ÉĆŚüš’šŽüÓäć ß8ķĪāŪäż) Ņś$īųźņ²= šēĘÅŁéŅĢčźąĮ ėüżėŽķā÷ūżÜšU$įé:ķņōŹ ą"ļ ö÷8čüÕ Å ļäå!ĘüÕŠž čē!ó )éDźēóĻź'ķ ć߬4äąU'Ćź«&Żēņ žļöż>Į ÷ ļ+ķūŅöäå ūś=)9ņęõķüŲ!é5 Ų Ūż@Łõ$½åē,Š$(+ńūģģū’ūĢł1ńļ3ńēŌN’.Óķ  !łńÄöĖż5ģõA÷Ļļ*%ų1¹®š¹öōžŪö żŅ Róēźļ÷ż Óķčäźß µīū óūņżóļŪ¶$ß6üõ! 2+žģųėāź( , 'ūJ ņūšėé÷"üł żėö!+ ą%% ņżó!õŁčĢū Ūł9ė į>’ üöōūõ$ü3 /čNņķėÖ÷śöķōķŠYö÷#+ŗ ōź*ßö &ęÜįž¾’ßę÷"ÓėÅ÷9 ļć’ą ēG$üŪ3čÜ&ėÅĪ«łóĀļq+  ŪŅŽüÓņ ŁĮśŲüčžāž×ōæą5ęŽ;üG E/$įöś4¹īfōņ!¼ģŪ žß™3ķ ßĆʝ*źĘĢŲČŁŽéq,Ō87@ ź'ģ Ņęņ ÷ęł5+!2ž7-Ļ ūg7KŲ’ųŅĒłļ÷õašWśįõFÓõ5”#Č7śń’ł,ŻŠ’Žč ė ģņ ĖÅ1óļVüŻūž Ł,¹żŪ?Ś"ł é­ėīę0õģį@¶ ŻéÓ Ų@÷āüį#š„ōĆżńŗé$$ WųDģņ’ł ³LżŚ@K(!Ų &"ō+üÓļųķßÜ’żö  Ģ.łĘ?-½K÷,ģY’ņé/ÜćīŽ÷ųęÅäķ3ė„ 8#Ś)ģ÷&Ļęł ūe7óė9śŚą•’)$üßZĢŪżõ÷ßŌŽīž(ōICõķšóõāŠ!ź’śKÉ’õńźD%× ō7š ä’(l.öäćūöĶŌ=ķšūāĮ.ŽĀ'×Ōėšųń;źŚłø* ęß>īś5 až­%ģ&īč°óžüłĒžHĻ-ģŪÕō/ļÓėŃéž ż3ūż = 7śõóŻ’žēäóIńĮżčv ’Šę.$(: ęėāõvēå"÷  ÷Ćō ģī’ ąūXāöä%E)ŁūŽłŁņÖś (ŃųųąĪ ś(ś üĒč3÷ Rņ*ó(źż%(éÄŚūŚ#нļńåRóF2ż öż ģč;õDĄ żäŁÖæķīäšõäūéóčCĻüžäś ėŻõ,B÷Čöł°ĻõļBWģHŪ=Ś;+לۚōģ$ģčŪŚ!,'ā?žī4źŽ .’1!ķę$ HöI ,ŗ Ū÷š÷ ±8,čńł? śļö '!%7 ŪäļūĪßģ<Ó#1źé<Üčėē§ÉKÓéä"+;Żŗ(Śö) nóc ČēŃū/$å6Üż&āŻ/ŅĻ#Ņ0ŃęßŅņ ō0ļņ2=żžÖōē’ßėūB ½Üį ¹ -?ĀߎĖōõ ±ķ÷ŗåÜó «µėöÖéģ6ę±ųęŅż īJļäŻäÅóśżļ,%ø§¾##ėč1šõĻO#ŚīįõūĪßō'ņäo šŻŠ3¾ öēīćZµóÉī’"?÷¶ ŹŪ'ņ ģīēłĆ-ųžõŗīņ"$ÓŁ’ō$=Cė6 öę-üäÓē+³šŁä ’ś7,ņšüģAē#ü 2ŁÜ–ģŹ7ūēčžöČ2Śćżņ3ö š6äöÓĶ®$Żł>ōÉŽąģī0õćõÜ !ąū#č ļŻšß%iī Sßģč ų" śžžE’ć¾ żä$Łü*śéėćó:Ėģ%·Ś’Ęś(łē*ćD)"% "ę’Õ°×ÜöźMFĖ<õŁü “<Ń )į¼ $ 0"Õųæń h 2łšņóėõĪ%3ėö’ķųŻ ,DŚńįÕōūżįSčé óC×÷ėäŌóÉįĒģ"õ>ü6ųļįé& óāf6ęńų%źė;źžł Ī"·ŻA"/šŚīńńĶ!÷#¼žÜōŠ­Ņ;.ī'ĻšS&ßÜź«$²ČķéN)ē%įįĄó$ēšÉāÉ é#Gę“ņŹ?čųō4Ž’Ļš śæXCńž½˜źīļHµžšõö×’÷+ŻCČŁąĒüéõ®+µ4ķüÓęįó4×éÜß÷Õ ÆÓK13ó©żž?źŹÖßģܟܹč×ńéõ Čļää ŚŲ/ł4ņŪŻ÷čÜĶßž7¶ł Ö'/žÄ0ā"ą#$ō Aļ#$īņ'ēāŁķ łŁ$åśėå÷ćń åž2 ż’ Ž)ˬ!éū ž$Rź×ūßB!&įāż6ņ÷Ü8(žī Šé+üßŅōęēŠ}’ŻčįģéšņŁ÷łū×īŹ&żV’’ćĪŲŃą÷łŲ’U#:åÕ# Ė#×īīłĖ9 ’šöķĢĮ*žå$śółן’ īöą’÷ķņ/żē ŌüóŚķėŪōūńųźąųķõå’! ńõęę%&ö(śńŖ å'ļł+3’üõū,ĢąŪŠēüųżõģū’įßīńęÜ!źóõ! Üü’ķ üīėóśžļź,’Ńł Éč ü šźéöšųśŽ¾Öś’ ŪµÓõųõ ·ķśčŪ īž%÷÷ŽöÜ13ę!įö Üź’å×õšķ÷4å\÷į’ ōīE=įŻŠ7üå’Ūūųī.ߣŁ?éŹ÷÷Cį¹-ÜżāĖĶēę¾ČŠéń Ś !ķüŃźåīŅ÷Ō( !( 6śūęźšõžķē/įDńžéöŁ0ōGž’+&śäīĀÖčćīåōēįśģī=Ū /1ņ ōģņāėż¬ūõ#žīē’źš÷ėä óūžęśÖ ž0żą÷  ÷ć-Ńó Ń č óģķ?īÖąõŽūū ąÖ1łū#įüę%-ūēųš ·Žéöõļ”Ś÷žżśŁŅŹĖĶ=ļ×Ūļś’šļķńūõš+Óēšõćśöó$4ńŚ ģ3ś1žŪ°+ ,é(ķłųDžųš Šü÷üÓöéēČQ%Ū&õÜššßö¦śŒņĻ-śĪū3Öóöęńżæūž =’ łóżę#6J=ö&õ×NÅū(Ż$ļĀ4$īģų³˜łēśņ īōÄšäŹ½ōĒ’üļ"Ļ5 &ń1ōŁųųó”łÕā¼ĖĻ4óž4śę ÕÕJČāėdō+×ŅF.ł(óōź%ŻĶõŲųłä½@ŹńóĆ é īķłīį żT ųīń‘õöęÕŪĻśķļżš+"ņįėąä÷ł"ś(ń ņ ² ų &Ó’ōĖķ ’żńü’( õė’Óö ł ģźųŌāłä(ū ėķķóŲBų4Ź"łķæĢķėŽžŽ æń÷ī*é8ęŌ¤ūī0īłē śśķ-é(šŃį÷ŠģĶĢ$eŪŪāõšźą¾ęą ÜÅ ęÉ>ĖĖł!-śĶņ4åųķźvģ~äč䟥3[łūĀ< 4ų¤Īņķ*ģ>’;V÷ōź %ļĄÆģ‡ćĻ ń)śĘBū 05Ż)4÷ ŌŽÉĄś(,Żæ.ŌŖüŁłūÆżįŠF;Ćåį÷`üŃŶ39ņõ"žąžčžĒ9ėń’ņāóēž š Ą#ģ Žź(ķäŌū7ź’’ß ģįļ -ž÷’ 7÷ö$ ’öń÷ ŽŽśõŌōņ'ężŚÖ ō"š÷óčé ļÓīł åąéōö š<ÕŅōŃŠó ųņü2Ńėņßżä5Ž,޵’śāķ ÷ī.2÷ŠŁÜļŻłīĢJž ö5ū"ö *ėņē’äźåü ! óš%Ś üž ś ž łćčź ÉŹ õīꌒńåüėćÓęõōō)ń'ü Ūõó1 Üö ’'ó#Ü ż )ģ.łńč&öė)Šģķ!ńśüä8öžü&ōłżÖūłįīž ż,ćõēßś’ šńź ’ -ōēģō"žÕ’šóó ÉźBĶ 2…ÕćĘŽņā ūäŻķķ\ńžö’ļöłüŲ ćó ĀńkśÕÜŽųĮ÷ ·ę>»Ļö¦Ü’’ąõ  žüń& ¼Ź 5ܹńŻžKų³™Łś õų!’,ņęŽčńźä ŪŁÅźŻ/Ę åõ€ü ńūķ=Wļ÷OžZŁ>Ģš)Źš ¾ķā ū’ÖŚ  ķ9ŲųŁćīųĶč-Óčō3! éńćššĮéų ńą įŅ'öźżėųüūźżõ źŁDõ&ļ%’ $óĢų# łöīčļ÷$šżŲąóćļ7 ė*ż (9 ņŽ ļōٶāńśųןčõ?é5 įźüāóš-čŃéßż# 'ēųéž/ ż-#ōśś.÷ !óā. -ī/ķ īōŌ ēč‘ņ@ū(ö֌76*#õ86Š35ļ Ī ćéō+ŻėžćŲ“k÷ņÕ+ö+ō  -Ö.("Śó±ģżųē)ł!5õ’ąźōšó "šłģī *Ź(#žó ü@óóū+ć$×ļé?ż09āžš ŚėāõęŻ4“JŌćÓčåKŲ+Ļ’Ā+žķ ŚżqžćŚĶ%õÕ!%ļēōó'E *ÜėāŻĆļŠ—!*!ūż±ę Ėö|5.Ś'Öåć8š078G )Hś<1!!ćĆ@õPź óŒóķŽ@>ĘKóŻėŠöōõżšČōŻń:>ŲćPį0ń8éšō!Ī ’õ*Ćśż $ń Õ  ńķłģé8Ą  Ł.łęōģüč'üŚšįĄčŚóŅ, ’ ģÜó  ņā'÷ńņ+ 'õźņ,źóåžō;&üÕśł éü7’č÷åļ# 4$ČŁūīęĻļźļę-ńńļDłžöūžżäū"(’Īę2# ńłš ŲÖŪüąéźį  ī÷@ Ģģ/ óöōüŠ<ļ.ćū1Ÿķ+ę*żÜą+ņ ķ…õ7į JÜ’ żņ× ¼ %łĢ1 + ÷ ×1ś)7÷·: ’žź÷žŽó ī-ó?"ū ?%ė%ś“ŗüšÄüóŅžŻńłćSžī ’Õ ĢŌü ņżĪ ’ĪžČłĀöčŽõ ’@ėŽ0ˆ1 ēĆwģüć2@QąAüąśęé),é9 čGöźłńŃ3óģėiĆČ5éę)š3öÄ6ś3JÓųõ÷čó ’©(åféįłóGö8Č;ŪG€ģģ×Ń=<.ń’Ų‘³7"łĪgšµ+Ż7žĖ/Ų.÷½9ņ/ĒQŚčēō:ōų/ĖĒå ś*-Ŗé)ž9żžłē_ŚÄęĀī ŚüōÖĆÖź(½ųĢŅüóīśģ ļ$źéóī’*æżģ+VŅżŚ ÓīéDāś’Wå ž#ć×Ō2ę÷ ōėüķ’ĄÜŪŲį9ūżäē’/Õū šģ@=%½ķž"źęąļžŻ’’ó ü÷Ī)®,õź÷ŪĪķąōūäÖē ėė Įņ$źĶ/ó½«ėų'Ł’Üś! öšŽ׏ųŪü.ó ¦Õā'ŪŅŅ ĪūBŃäćōė śßtå!A’ ņ$(ū¾å>ćŌä6óÉóó Ą óżÕ.Eįųlł!ļłźńćŚ8NüŲF- +ū5Į*ļó6ś7ķ!>äŽÖŽ üąłä ńö Ś ÷Õ#öņŌõģņ’%ėŪœÜóń9ŠćĻqīżŅ½īéč×īaėżē ģł ųńŁčō ß@Ķšé’ é&ųÜōņ0üć łļ"ēśėõåł/Žōłųēī łļ?ąćģļūéńóąü ń& ž®’÷š+åź ŚńśüżźżįĀŪÖóń’ļ ß)é ü’łłż×äģöÜöä’ėųõģį.å ćöń ßļžß§ņÖė ĢŁŲō5ž"žčžīė*ń ć÷ ū#šņżŪ1ļåķö,ÕÜéöż3ŻÕŻ0ÜēłéńÅ’ś ÷Ę® ¼ń÷õĻä×åćåÜŗ#šō ąņõĻāDõį×ŅņžĒ×öó %?EžŪ õė: żāŚEõö Ś"Łń/ń?%0 ģüöåēšõ*Ń äžę É šõóåū2öįō čĘī åčųśÜįė GŅē°ćŽ$ŃŻū)Ś%*ėõ ģōžŪćłźé;Bų+öļžó üŁŻżś’#āĒ ąe+čźÕŁņöģī Ā÷īł1łßķŹņćõŻõÕļ1Ž ;óż’īÜŽóī÷ńčä’Üąū ųłŚāģś ķęąóŻģ9Ż+ž  Õóśß&Ś$ą.§ü õ×é üōł ßōßóåėżżÕ$ż( ęęįäģōCKüįį:Śśź ųėžōĒ’ĘóżŻ%¾3ó ų°:$ģ3ō ńśš]÷łŃ Øģé)Õ.óŁ öż1Õ$Ąįūė!( ʧ’! ÷ż! ąų5NżAģŻūÄ5 3ņśś°É RīÅśóćś+'-é ńŻ(óäŻęųł0ģĖļ÷ėōōčņļį×ŲžāóūśōĻ-÷ų 4éšūģ.õSė³D˜-ķÉG"3éÕśēÖąŚ-ņlžQ÷ŲąRöŅÓĢ ē ś žäż ńūQąū:Ł+öŲ śś€éķģž÷Eś5ź÷&ų›c’-Ļū!üņ ņš[D’ įųõųŚ "ķˆ¦€e* ėųųŚÉÓźü!åö;ęńŃæ-ļżj"]ž"ž&Ą ó½źäö" łJčÜÄķģÅŹīęą#!ė©$-%Ł-ę īč·žē7õņźģ:īłš’7ä61Ō*āūÕ ĖZ’õźą×$ 'ūžõäōŃŽŠÜ Ļ 5Żō"&īšÕįīēß ņļ÷Ģś’÷ą2ŚłĆüö-ćōŲł ä1ķųõ-čķõāĶū üé(ż Iś”ėš ļ õč ć#Ī2åņé īōÖĪņéņß ģęėõļŽŚ’ ÷īö 8 %śīĢüļ .÷&żęøąÖÜ ļžõ4ęčāśõ4ö)ü ś÷!ųæ žųž¾Ū ½ ł0Ā2$čö'#āŚś÷ķéżJ(ū6÷łŗ ūšBņÜō žś’LŲÕ/ō+Ū·éĒž#LŃņAē ’ō: ōö Ņü#āōEżę÷īö 'ņ’ūH' &2żæ מaé’ų“\å-)śķėŚū"ĢÕéš÷Łž!ö-žfčńąźĮśŽß GŻ.č ē0€ēéč éŻ=’ų’łł'öé"’ ś¶ą×ģŲš* ńķ’™ŪĶ.Ķ Ķ/żĶöżģå0óŸFŌ·’P( Ūöóįć31žģ Ž?ąśēōŪńę÷$žļśS $ļ¼µöēžÅž ØŽųęćw%ģ/Ę'‹ߌÜ÷9ŹżžÉÄļ!é"ņī  čóÆęś07ŅüŚüÖ!š ÷.óźģJŻ ö÷* ģD5óŽ÷Ō÷ üĻZ~­'!é‡;õā Õķā ž4õŻŌŅųž åü -łī)”ś¾27Ž›##ī€ 0ößµÆ=ńāŻ čä ł 0čģvKīĢź9ōų‡Ē 3#īÕ,ż Õ=Å÷óé÷Ó÷ŪóŅūō(öė±žĄ ŹĘÄņ ÖęŌäœńĢęćŌęŪī1śü#Ō"ÅžōęóŽć"6ć) żżä ö)’!@Lٰ ō4.óOśüśłö-ėįłåųõü'ćļłōā&Ōļź÷ūłŚ 64&śˆ,’żč#ōłÕėBž Ż5:ņ"ā! &čķōē%śśČįńó ’ąŪ ōńéüųźčķ šćēū$:ņ/Ōń$ ņÄŪ śĢ ŁÕ’Ż ’/5&* ś8%%ä" »’ üł%ś'!ąņńóč Ūū-Éīęł¼Õč’%ź’ČėŲŲöō)ó% śüõčõ ģ’.żų·ĘéŪļ0 ē ėģK³å ÷Gžō1ņ:ėū+ņ »ńóžõźōźŗłńńŁš !éłļ)éīÉ0ė'/ńÉļęŪåė2' Góķå+ö ē÷ŚöŹ łļåĆī!AżŽēīōėõęōš÷ü#ŁA³3.ééŪųŚ × ķņŽś1 %é)/*ł71ߥśü5 öž śīöæ4Ģū$’ żÖ ŗ żöėėęńżžåŻ/č’ ėüÄ&Ū Žé/ óčśīżéė7ę śŁü#Ž@īßžū"ńłļ  ūīöī åńó’ ķ ßņłŁłėū äŽĢ ł éŲŌšóŁ8ŻõīāÜ÷ß8čĻļėŽ äĪ$ (Ł×ÜęßļŁGųż ö&ī÷÷#łųū źźī üĒ+īā!Ųģśóäė$ōõüōįķŚģŲ ķęóõõū’’(öö ü’Öž ņē’źģīś' üłßł÷1ē’śł Ż & öēżńāöŪ$ōé×ęž1īžłäōķ/śņū ōū+ę ž0ńźļ ēżą '÷õ’’Žöéģ/żåü0śūūÜ:óó-śńåńū!ņ×ÄēĀ’ļ%ī ėżņ÷2  łāDüėé· ćö÷ 3āķųÉ éÓķķ+ ×# Ųč ō öü> ł*Õ-×ę÷@ ė÷×#śķ $BÜčō ņ)ņöłļęćŃ(÷Āņ0īLõ ż Fņ ŪėŃ  Ž8 Ōč ą ą0īēķž $ņüųāśūöõūÖæ źĀõā łn’ ä öāŁ $CļŪ ū ÷ļąW0 žśķš+'õĘ§ŌśōŌīģģżÕ żāżé÷ō,åė 8ą $įźź’ĪŪ*EÕė­ļžųźźęż"5żēŌŠą ķ ļčA!żGøć#š $DÕĘ’”÷ćčŪžū˜ņ õœÜģÓóęB’ńĖźė÷üę 1õõÓīļõŌå ČūėÖ ūż ūśł ä+ōłš÷ å ÷ōōą’Śü6õüÜ?źōūĻó ļ#ężļŻüĒ  Bų ė’ņŻ8üĶ .ęšĪż÷’žīä$ł` Ų™ 6åķ÷:ā+' ńõ×īéīó’9łé ŪéĻ õéś·üģ ( ķūńņ÷āüµźŲ>2ōłŽåŽü*Ķ$žš%5Š÷ ą żąŚ$ōø.ųÜųū %Ūęģ 6ģūīž$ ūõč×ģ6įļäöŽ EÕ ćĻ)Ī-öžŻ½üå/é6ó1 ųōļńįõ õ üĘü"Ö÷’čłė+ņ `+ĻęńŪōņnć÷*óŃ ū#óšĢV ęēłāł(! × Ääī (ķ³ć ķžöśŪöŚēųÓ 0 ļSźIų! ÷ō0ź#Źś,ķņī’ó^ūś¶ćÕÖżēĒŗ4ųA éõöC Lń ō÷Õīåż(/ū¾č7Ē“žīŠņ%Æžķ ßÕ1¾)%#ņ'śńšõé ōŽöõŚūó įęėFģßN× ļņśčžčū«ōīšŃÉņõßļšß'Ž:ķŅū„ *,ōųōūü=ū=ōÖŽžōčęķńīč šźēĪŌMK! ļ÷.Č9ēšš+ ūč1ż"+ś¢ģ:,HHœž&ųžōP"ß+u%Ü ŲāĘßūÓh(s2!²ž1ü€ö“'*: źČčŪ 3­ŌŻę€µöŻ ūĒ'ŽŪ$?Gźš3(YŽāžąźķćÄéō<ž3R E&ęŌā÷) ŻõężŲļ öž2ę$ Ÿéüłö÷7ź@óč/$»ū4ō@īśźėżüųØōŽś ģśõž’ēŪł) ņłż)!ń)ē& ń’äö õų óÜ×ęźģö2įłöś4ų"@ė’Üė ņč*A¾śüā !;öÜ"ŽX7õüēÜūīĻ K śļ' įÓׯ#üņ ēźé/ 05ųéńĄŻRĘĆó¶.łō Åļó’ õéåÜŻ'Hčņ ņ!,’#ļųņ6/ōōŪ$ņ; ÓņßŲ ž÷ļīŠšĶéüĘ\Łńß/ńįęķL.Ū óüč śīī€Nńź×ż’ßųąĒōĆŪó+ļī 7ē÷įš3é- ūśö'(7Łī$śó¶Ń"Ņ# ('éČŠ8ģłņżK&śįéõ×Ѥ ģŅśā -Ó63ųśÉų·īń7 äü×ūķŹčÆČęčõõ’ēśó śģū/ō÷ķŁźŌę%öōŁżšĆ÷ķŅčüĄ"ńśų"&į ę’ŠßÕńń ģąž÷śš+=ī!±üś·åūģé .öė żņķųßśėóćń% Õ &!ןÖįļčĘī&5*ģą;ūō÷śł’ėžüģ"ųčžōōężōõżīéöķūųóļ’9ņHŻÆ śü’ó½ĪC’’’TéCõ ū’Ńšß×ö+)·4žüšģó!ąóś 4Ó1žõ$łč’ńżxĀßäó’ęžø  öļżčåH ó’Ųżšžü½&  Ö’ėī÷#ū"ó"„źž¦  1÷%.ö õłųļā0ÆāTąūó ÕĘF½óüóćž Źõų>0JĻłõ*²-ØéUÜ[ų ÷?įó0)ė"čŻ,ū§ÕņåČ#Ų*ö  Õ8…Ņź×&žüAźäŚöų BńŅėéĖ/ŅėŗĖ 8#ūåń¹ ēÅćš[ÖäōęŽĪ Ņś%[ēŚ#Śī’ Ö&ēśLš č3ōźę%Ź%ļ ’Ö)Šī!äČ ü »ÕH" ē)Āó÷Łé©(Ć5ō×ć½"ņģę , 4ÖŹ óæ ęźē÷āžčŚ÷łō)ļ ż(ŲšŪٵö’ŚXüņżć ķé'śš®ķ׎öčūĄŃó##^øüś.żōįūŻF&Ģ šłō,D #Ż÷*ōDŌ 6Æ ŅŲÜŻ & ÷7å;üīŽ’ūłę.ūś žīśFŲōQąį1`÷øąŠå$ę@Hõ42čś’ ėī꯹ćÕłčŁ’żó Ē ńłé /č ’ėÖóßŲó'šĄāņ1ŸžēāŻóēßČŲ7%ö ūēśźęņżźŅķĒCų#Ómų/ŪĀü .GüŠŽ6ĮĢŚ9Ą-8ō0(ķŠ÷ 9SļĶčĘüķ“ņ¾šćż0ŚčāU*é4Ü),÷& ŻÓ Ļģ1ēõęõč÷ õž:5šÉéŲżķ@ )?E’ žäŽżąžÕŁ*Å ßøēżŹęōÉGé ģžčäé·łžžąź ÷Ś#×õāžŻ$ęŪóé+ ųćßõū ų%!Ó*F÷&Źą$łŲ6 ėś ēžćł­ÕöńżóäóW'ŌķJÕģŽ"GÕ Žō’üćŽ ā ŻóįHżźģõ Ś ē ńō"ßż'ēņłśĖĀśēų’:żčį Ó÷ś5ėģ÷2ōéųė ŁßŁū#ėóD.ś õöäōŅ'ŁżųĖ ŃņČńčīšē)ō6’ ģ,*"¶ś ēŚ ó?ņā ö óę$ż"õņĖź ē0üŪń% ł ņų,: ģ!’¬Õś ųéž!õ ļńßįłÓżś°’&ōēźłöķż ęų ėåŁ÷į Ł8šų5 !ą Ńü ÷å,@?śé äž’śēü!3š!’żēßś ō!$ģž’7ūö3ģż÷ńäŪöź -śKńŠŠõķė'ų'öļ ó5ó —Ūņę įÕ’’ Łžåč Čü Å? *Ż &@*ŃąÄČKÖįüõD\žłõ$ķ.čÅ(éųĮ4ńŪī čå¬ūźūų·%ļ/šśżų’ž/ĖŅ żš÷ź;öīōåŃŅņ ÷D8’-ęē0Ō*ōż8Q’ļļż$’&+4/£×Čō÷ ņ×’š)üūJ÷Ó Ū Ų ßĘ9ąļąžõžõ õē R éćūīķž+üā ģOģūńū0ü²ųėųžæŻßŪūčģ#é-łļļū0öŚóó÷ōļõņō üŅ×Üėż ūłŪūń’ õŻ ś ’ńķ!%żžż’źįžūęō!$*õ ūžą ū-ēÜ%÷ģłņś&ėńś!ęīģēė’ūńšóō÷ü  Ūü āöłüīį ,ŻöżžÜźåå ćõ’öž" ūü)ūÄśŪ³õ,Ł{äżéśį%śüšß@ ÷ čóźžöż ŅŽķų’äõņż÷ Bņžżėļ ŪõłīåģEżõń4 / 0öųłŚåöģżūöķ$üõŚó śéčüķśó įéFA ųł;.ł^ķņäéõ ūžščėżćļōč żīüÓ ŲöõńĘĖ÷&ūū÷ ³JķüķĻįć"č3$-ųcé Õ R³Ķę ÷ą¹’ é!Kīóńē 5ā)ź  ÷ŽéóŅņżŻäyŌż8ō’įż ٲųėöžšēĘ3Oč1, öé šŚč’#/­ėæų ˜ė÷ė’!ŲĀĶĒ(诒²ż&ŽßŃ:ó"㬠׬,öéĘ/ó Ś(ŁŻö°¬ ćQš×õÜėīü;ø9( ńēKĘ$aŌ'ųõ"üų) žźü/÷ćņ’€ŚžŪļ Ūč šJļŻ6ü)Õē #ėę”GÆóöŽļņCūģ G$DõžśżīžśąČąš-šš$ Õš š ŽÜōĄC–F .Fńą(ņ ęŽ åž#ėųņāż Śėļ ÷ÕšĖķéųšłŪåē%½  õčķ03 )ÜēüĶšåōóķįßśåųž’"žüžŹįéś4%śłÄ Ł ó šēļīųś’žłų%Ų÷ųų#ķ’źō žŃżųķ$?' ēī ūåļü÷Ł ģč īņįšł(. " žŻź÷,éńöķūś żåéĒóHŚö +üļńęŽūśāī įžżĻń žķ3ā÷,łį źŻ ÷ ńžģ³żģ ōī5ēåł;åé2ŲEńąā#ö÷ę'Éźåųē’ńö "śöä%ņ 3"Źäé ā)ō)) ’Ö óżń%ųå&ųóå꣜$NŃĘžč)ž’#P 6öē%ģéķŸ,ž%ś #’śńł’Ż÷;ü÷żįńö$čÖ#ų ųō0ņļ1 ń žļ<üż äūüžå’īłóńų÷"  ÷  č×ūäżżäü ēÜłčł ńėć÷’ļē’’śŌļķģ ųķążīģ ż ūģūźü Ģ’žłģÖūŠłż ;%ķčéšųķ÷÷ōī ėīöūõéńÄéāņ    ū ųė žÜ óōāŪśś%öńõõóźä żźõń’ģśó $’ųéęźä>ģåĄĪŽ ż üć# ÷ńē1;Źż µąėėõ(7’+,é’ļņ Ńēīż Ä÷ūēżż%;ŚłčõÜ茣ō ó3ŌÕéāGūųéżķ÷"ŽŽ šŹĻąęŽ?Õłę Ų€ń 30ņžś ĪūöĀŲ ōīī ķćļ č'ū/’įõåėūėāśōł üžōģ žŌļŻ÷Āżī-ņŽ ž4 żĪęŽ  ÜĪžķę÷éņā÷. 4Ä ĮįŲóēøÜž Ü ’ńöÕ' ŲōĘ &×ö$D(Æģßų÷Żż ÷ ņå’#÷éßÉ)2M?Čó õ@ &ļ’łĻŅ ąŠųīžšó3éśō&ūäł%Óå*ź)č)å ō 4 ł īÓżłīļ0ōćÖ&įąų,: 15ōė² ¤č ģÜāŚīŁš£ģ"Ė“ųī üģķ łēMé’Õ"÷ Ū 1Šīŗę,Łå 'ĻšC ųšš ÖīM÷źń śOß"ŪāśŃŃč Ńīų ģ=G7å*ÕJ;žćÜG""2āšż’ óóāėŚąäé,ūķėüŃ, ėóŅ@*üł* jķ$łĘŪ.É 5ĖčźK»ś?Ńłš*äžüÓ×ēI=,ų„pžłņń ćżśųżŅ÷AśóŪŽļįłńŃ’ż Ąķõ÷üų÷ čģ÷&ż õź #ŻāõŽņų¾ īģĀžģ+Żųū!öüšT īź%#ŁŲŪłßåūąü꣣!×’Šśż^Ķė×#öčė+šŗė5åļ?óś"ō®/Wśźöąōć9 ’óōä 'śżūņ’ÖäŚōų"ņćū× ī&ļö $óĖ÷šāųąCO9ō÷öńŚń.Żśäćüćžéįö7Ń+Ł+ךāćŌ!$äCŌ׎žļ Ū)2é©£’į× Õččųżč;łž× å#'Äīžéäö€óųåūčõęęź%ōų’ß ĘuÄ3łš÷מõßē ś-ūģō ńÜŹĖ 04ģśé/ł· *8ōŌż:č Ēć ņģ; 0ł#õõöüłįķüąüł; śóĆ/4ēń. ņåćųü  ļŲśś »ļ* ĒōóėĖü9æÓōüŪ īÖü &ņį¦ŚĘõčśįŅśćńé6źõéY Śóļü>śżŲ!ņčį ėŅ(ü£ Ģž  ūöķę' žņ÷*ŲBśĖ÷B? śéŹŁ ō.ŪĮź"ņ Ž×ž÷ “%ü# ģś)ųŚłF“÷īŁ Ężū+éź×ŻŅŃ¢ į’éü@Vöå šńą’ōųāć/śźĘčķ“ņ ćś žń·ņĆģ#š ;$ééÆöū&õ¾Žć»"óųń ­ ö&!ŲÖõżżļä2č śüśš· Ü%Ų źüŽųņ’ ņ9Ī!$ņéž ķöęńńšśīś ėļžņż Ü’ ŌśųźĘźŚöōÜłōüŁęņęŻī õ ī%Ųäßš7čż&łž-+õ.Õó  O# źĶõś ė’ē śü< ķś÷ žłż õąķåų4ŃōEć JäŁĀłīščōŽó:é%%ÄüĖęPö ÄųüŁēėŪ &"Č 0ęźŲ éš ā÷,ļŽ„öäÅ$žž½D ŌŹ#žGźłĘ,*óąžą ’ŪŪŚ’5ģõńóēŲŌå×@įńŽŲó15¼4&ńÕķ#ū ż÷ēģäę” ėŃ 0óß »ń 7ü% ī(ųŃśźŪčĆ ņ ō’ļźŲ śņ3"ßśžźžżōļüņ*ē śöżĻ"śõąåŃ śé ąžÅÅ šüóż ņ ņīŽūāčöžū÷ķ2 ņī žżļśõäóęż(šņĶńū Õ²Ü źŻÕūńöųķžė/ģü ,''÷ÉŁ ųųCė Ēéā%įōś+ߐųŻ’(×ņōŌļēūļļķ !ŪŪ÷żīÜöŪ.#ģB°õČ2 ēöĢļęĻćņ÷äŽū%öč+ ×ńĶ %ł0÷ źń3ē ļ Õ Ó׹ūģ%Ō›Śü żR’üņ ł"śńÖ (ņ-5ź4Śē&4óóÜņč ółūżŚ(š+)ŻāćńDŅä’3āģłž )ēžė ā’ ķī Ūźū  Ńżūųļžņ/āćA)׎’ąįčė×śĪžūņ -ūńā ž)-,ķęī śųėė&Ō&ż ’!&ä ųź.ūź’÷śéų(ŲCņ é źėäēŅūč ,!rõöüČš / ėī÷÷  ź%ō  ŠóõŅŃšüōž’ōņü*!$šūä#ō(åīŪ2ļėķį’ļĢÄņż ōÖā šŁŁśö žō÷& īśł&čż"ļ ń%ŖõĖņ D’ś÷ūÖūŃ!’ż72żļļ׳ųéų .ć  ā*ųš÷Ł$ é.$ Ųśī×õLØŪšü ÜŹåó ņĻ×ė ääÓŃšõüļŚļżīīń.AŗB Ūō'ŌĪ, ü öē7=Z’éļŹ &üļńåÕļ1&ēįŽ+ųĶģß5HŁ×Eżöč×2žźēē÷źīÜĮ¤2’Ļ öõ÷Ł-! 1EęĮJė÷#2žÕ­ÖŻVžĶč ;$ "čūöÉķń& %Ńåü) ć×­ō)š×Źč+!Ś9 üŖšżöŲŪžĮ&/×č<’āņē ķ ęWųŚŹ!ó€ī5" üļź =ó)Ųõžõ Ų Ņ Ģ7ČņģŪē&Üóš5Ńé9ņē"’»ź+ü,ųō'óä.ńųę’%Õ’ĖŽīĒįĖó8ļś4 ŚīÆFĖ;® śõé *"ß#ńūłÉģćÖõā/'$ćżņźÉėöxīčŃłč<śä×ļżóŪöē’’éóÜI&ŽŚČńł8µņś@āī'ćŁ ŲFŽüBŹŽäžQAėöö' żĻŁÖŲe:äŚ÷Ę#žÉ4~Õŗßū,0BĪ9(¢Óżė%A’)ō1åēóš×¶õē%ŗģßģ˜ ĆŪ śńž=ĄčŹžūļÜžóū< Qõū ųf*2ņŻĢ#;ķßņ€Žž Īō*Ū€‡ļ{XŠÖ7ł"ŁF>āėšņZģżå×Ųüį×ņ÷pņ,ü!śGįłēļ3/ūžāöł.×īŁ ÜāłŻ ėżśęųÄÕ&_äĻ’ ØÅŃ3ä /ė÷ łŲ!/U÷Ōņōę ėŽķń  ö ņ;õ ė³ģ Ó’ÄĢÓśß-ņąĪķ Żģń&FĶŻŽūĢš $ ÷B!Ž* ęŪµ*Łä’9ų įš\õ ģį äéģw÷IūŃ-æńźų%.ńō ļéś ˆķģ=ć öīō/ÖłGŽ ;ēś 3 Īó&įōń¼'ī,ņ)ņ'üäĮ<īō4+öŪüł­ŚōęŚŃąēęźö ļF ’ōöū īä#öUóų- šę čēżųāųÜųåųŪ 'Śīń .ćWü ūųŠ/čēĮ8#0÷IśųśßŻčųā6ī’ģ+!öąčĻĻ%ł öäį÷õļóåE÷ÕĻś!ä÷ü(!źź ’ģöJńŚ5éōED""EłÕÕż- śŲ) ūšģłųį$ņēü %ė×üåŽūÖśņ$ų(Čõś Üõį<čĀõžCß¹éĪłŅł/Ņ<Ī+ē "źŻ$éČ3F}×īŽNūå Ļ ’ņ?ķŪåõŠņŻ3ś&'ńōļóÕü"ÉŻäśĒ’üį Óäģ)łhėķÖÓĪ&ōų¾ įõē-Ė×ö" õŁ$ųćźļ F ōąśźó³× ¬ļ€5Ņīņ/5ÕØļóšLŽóĪ6Ų.āēņ ż%ßń裚!źūŠZąŁĪ=āŻįž[ĒīÜņ+Ł'ö)ÓŻ$ß4āŻßU’ ų* ĪCĆņ0$¼ņUŽ“ĆĢü)"ß#AÜOś;ń$ėģŽč$™ß;*&ņģūÓšŻģļ“šćś» Kéź/ ćķöPåłÓÉ čü9$óś’= ęöįÉYA,ąó?!ęóPźŅČ?÷öėł»NżĘŌŻ'č 6"ō2ż4 įōū üė ö4Śßķę’ńŃ ś łõÉü-čęÕļģ žŹå ķūęųšŽņ & ÷ļė-ńéō óóĻšņ  öėķų+śē üņųęŻ9'(ō÷Ņ! ōå#ĪĢ@'ōļ(ŅēźöÄś!4ÄõóŌ ģĢłĖģ åńļłä'ęŚīėöīąä)ų’ ćųėīÅńō#!śėŻźõō÷ģŁō,åūŃšģŲóČīa!ēōŪ;žÅåžóž>÷åØž å#ą_Æōö!ģõŲć śųŚ!ČØļęŪĘ ß ģ2ńüėū õś , Č ÷ ū’ō Ģņńé3FČEĄžóöžü3īÜłų(ū ćå’ōKłßčīśėšģōäį ķś ū*  ūģå’īłļ ńōųüõŠ ąźė*óÖńī’Śīćüś"ņ żėB -ó 4äš@"įŹūņĮö÷=8ų'3ļłŚéåē>’ß’ŹüŁ"×4< "÷żÕ÷&.ī!ā Ü’Śõ!ų÷:ōé õ ¦ö 3ļśēż ń2ś īē ’ģē üóģń ’¼$.ä ųäķ"āüķöäńļķŚääķņ:ģ(ė9Ł)& ü-īčąŅ .ēą  ģįę’śś"+ čåū Ł ÷ūŌüīü š.ŪźĶĪäēąśIŚōźįóģ¾·ėāą šü Ż!"+ 鎯ćõīŌ$’öģ)ü.’ī!ģ īųŪ·čĖąŲ’)ęłĻ*’’)ö ę×ų ĘįŅōł.Čėåąį>½šÜĻöķöę ’Ż šŃõ1ķ* ļ*öō,"üõߌązźŲćłQ÷öļš VöŲõČō÷čÖ؁ūćļ )Žå/āč¬ ŪżŽļéžó&+żĢó9:éöĄłõ ņ«. 3ž.<"Ę× +į%×ćß ’ō'$ “ć6õęüCó ŻŹVō"!ń<š ć čć×éš)čd2ŪšK1Aåļėž ć9×üŁ€ čŃ łī>šļ&įŁÅåL ńüæńÉé,ū§śš×Ų- Å!ńžć Č,ėāÄųūč¶įę ōūś ņ #ō ā$<ęöōųMżüūźōīšą¾żŻūšõźč¹ŻzļåÜüžģ å ūóżģB ęÓ"įś1ūū,ś &Āåķ łó óā÷śŚśļž7 2ļöąōŻčū’¾;ŃųęēõņēČšŲßńÕ. Žü"ņ÷šņŪūśśó łźä1åå Ąå÷žöŹ’6ėžńķ÷ä Õ韊ėŪõ ×' Č! śÄ  ŪščŚŻüėŅäļ’ ī&ŽM#ŹŁōāėķŅėųY2Źē0čö®Ė÷æćæ&śźżĘĒĻ&ŽĮąß*L,łōÉ ¶0É+!3ųłńśöū3ŸŃüżö3ž"Lįī$ōĻŽżłÄłŌ ß/ūēžDį^cĢóōņóōåMņ$ ņģA%+ēÕÕ ł0?K' Ął’ė’ #’'ęó6Å śI¼3×[Ķņ ļżūķńū2ėńóĶś>Pń ÷üż?śīų¬ßōåżģģÜźż Üē żų0öéż’ ÷Ͻåę žńöĖź÷ż ×ū;śåļą#’ššźņ;<ņõü ę"īÓ įV#Īüųī õ/÷žČū õųōń ÷ž źųÓ Üō ł.!óņū@üģ öņšŌ÷üeĢ’ß -} ē ńżļ ļ°5JūšŻ ĢśųŌ&ōö7ō÷čś.ōōŁ ŌM÷&ŠeĢļÖéJT ”ąFł©!?3ś & ’ļųžĻėīåč:!ļāėż÷äĘ$ļų9Å“ģĆĆ¢ł+“Öńėīž>ķžÖ¼ļõźgšŪĪģÜ-Ž Ģ÷½č ļȹüÕź,üõå å$8śŻ ÷ā)ą ēŃģłEŹų%$×ļ 9į;ųŹÕü7Ž%öśÖöźķĖĒš  &ī “ēžöźōāįü4ĄĖ+-ņźż­įņė"+ė#ĆŠõńż+š  µü öę’%Żå’ū1’9 CĶ šÕDėöāć×’- Śü éüśųóž³$!įēó -)Ćżūš3 óäŠūšī&Ū9=TāĢßÓ÷śÉ%$ńśų  ź±Š'Õ!Łé5ņłćūž*īśėžķōł’ߎō÷ŪĮŽ ų$Ę Źē’īš9ļźļ %%ŁÓ1īųē©śö$é=’śųńļłõć’śŲšśļż2óųÉēłŻĢö õ&Ió?0 ōū& āņ»ōūō) ś3/åś Øöä÷öÜÓåö$čę/ž šŌšłž°%žĒĢż Ü0ó× +("VśĢē÷ėīŅžü’š/ ŪåWĪWĆ+EŅę×ēÉÜś ęåćßąų÷ ן*ć ÷ģĖH#šÓü«HÕüśü!õųéį ’ē(ōßęįāėč3Ż$Ūōŗō łŁņĆįŚ¹ōī& KÜš.ę?Mńż÷ę÷üē%žČ  ā"€(ōčöóéóĆéō )Ę łåś’-óÖęä*ėż źģżöŌ ļ%ė ÷ź żóŪšĻ’ķ÷ė$:īļ Õō ūžŁėź÷ Īū ś*ćåŚź!šś-ßū’ßņ×ĮķųŽöõ ģŽćżżäūęÓėšŌš # é ßī #ččžüŠļīöÖžü ü ųäźėü "ż ē ņéńłäžģó ń Śł!Ż“ ł3Ōöū6(ó’ņ )’ŽBįēÜSčÜäÄ ž@ćEįł±ī)(śś¾¾ 0÷ę)ęš2ņå 'Ų+ Ü P,"Čę/ŃżČ5āō©÷łŌā5ēŅöäüŽń÷żgDķ×ļ7÷ żü ŠųļļD  %ņ -ō’ćµņĢŪŁå¾ü% >(ņõģżŌŪļģ1,ųšļ%!ń ćžęö&#Śń÷å&żžéŽ’ŚÅōü(öų!łóėõäšõżß’öńį(żųžš ążģłęåöōśģ 7žĀ ćųę2ņó),Įū’åļłŁŪļüųš÷öāģųļ 0åėżöö ŃĘėįüśū3žžččšō ūéž "ĒļÉūł óń ōšüūĶļĪüéĻó ķA²łt+€ńš8"öś“’‡1ąų€»š( ēįīÅ0ķ õå2ÕędŪśVģ-³’ÖŠéŚø|ņ=µśŅÓŃ6›CżėAŹĪ$ößč2¶8ąhæŌé ÷Ö0šįÓųļø׳,PHłėĄł89Ņ€ÜīŻ ėĪ &żźéŃ%š& ūĶņĶąįĶŃüÕø¶*Ōżõ÷čāl ?Õģ1čÜ ģ $ æü-(8€=#Ćä śž4@,˹Ū2óļß*į×  å“»"Y ĶZł2’’ćÖŗT)BϳO×Fżč8Œšśģ1+õ;øÕō!Ńāī[ 5&ļ¢āėµ %¼ń¦Ņšń&RņÜ”6ūŽÕJģē ĪļżÕPRō5ŽBŚśŽÕÄæÜź ”’Ō«÷ ßŌ'5óK 0ēĢøļ1ÖõóĄćRTČ(ū 0ņĒ)ē;1ėügõšįŅ=ČUŪŪ7 ö$’öńÅ#ć%ū5DędūėńŻæ÷Ż "ĻćėĪ;üõ ęńÜåŽ"łÜķ’Ļöģ.ķ¢ą1ģöōżŻŽ ŚXŽļ<ųDßģåąųAįč Ģ>’Ė ø‚ųų CB&"B3%»ģQŃ(ƒ#Ž[œīņōüFHļźßžEÉ#ķÓ¹ń ^¬Óń¤Ė _ņ/? ķā‡Ź(ŗž Ū1Ģć  ā’ź÷ 1łžP7ź)į īż°żńķלöšĶųń-ü.ģóż~ó,śĖńōīłš÷źžģļķ ņā÷ž"Śé ēźźŲ1öóō’.!ś!Ū×LŽ“ č5ķńćżõ?ūąåü(ōöńśŚśšü#čēüķ ö*Fžś#’ļ÷ōÜ ųęėļõ’%ū¦āYŲķé§ļń÷@Ś ųķDššęļkLĢģłĪŻ ō÷š ł6µ&š÷ż÷B\Q!/ŠĘļ.Šžż¤ų”Šł°,żōŽōĖóõū7ĀńŠč*ŻńųåįČ+ńłł'śōļźüŲ(JU’ķūošńžÉ6¾(ų1šĘę¢Ėńģ!;[€Ō,¼Śłždž ±Ķ! ’šŻÉėų—ößÖ?Öõņ= ÷LźģóÖ×"žĻÉļņųūųéžėšķėś XIżķūļśĀ÷éčēųźīžõčńół?ģīüč ķ’’AółųÉą×ųāÕņįūćżź8ż Śš!ŠāŻąźóųÜž ż)ū >25öūŲ(ļöéŻōąėÜōõ)šķüÜļ×& ōē’ų Ū$ Ļ¢ü ńėńóē ź’įāą'Iń.¼ņęé õŚöß $ćöčżģėö ā'÷šķĻķ6łŠśõÜ Ņž ’K łż éģ’žśAžóö ų'śß  ō  'ł×4 >ē@ķéüāņų4 Ōš żéĘóēŠś äŚ ×&ŌżūŪøåęī)ā!įśśĖõŃÜöö 3Īßś±÷ķ’łģüźłŁß*ßēį ė" żמɳĀ+÷żø łM>ī% ’ !Æ łģŪķł õ%42ö  ōüŁ1Ķ&Dßų( Ü,ļ(šģ4ćčä ķ$Ēē1ē5öźģåūöęé żšśö’ć!öA#ēėć)#äÆŌ3ūóķš÷'ć$’&.$žšķļżõ ’'Į÷óŠļŁš5ūęĶÕŽžÕ'>ūä,ųĢ"ļ÷Ģ%ńļģļņ’éóÜÓ0Üķčé-ł%ųšūņ÷ ÷(’Ł łęÕ’ėŃņĖÓ9ż 'šń!ūļēż ó䟯ęģšū ó&ņš’óś ģ8ōõ)ī 4Ü#ó÷»ęīūźé÷Ųļ šóćłŁĻŻöżōųü% ŻŻüļó öŪ’żĮūźłī>öŻõK$ õßń āč: 'œÜųķéóķÖCņ_ö2žł5ć;’HŃéŁßĀöžņä.ž×īļōē#łž=ŅėńķėĢżćśźēŻēüųŌĪŌ·ń (łńŃ,4ėś żēŲęŠīłĶī(Ūł ļ(öOĮę" <"ū8ķŌżÄž åõÖ’NŌÓ6Y%Ōū^Äõī§öÜģęļ"Æėėü łē; O (ų ÜŲÕ , ×’ēŠ <įčę*é÷ įžŖ"õÖęįŗóõś%ļŚ5åģż%łėęÉł Jņ ŌśĪŃöŽ <ģāņę/M čõ żūŽģ ÷#ļ’¾ŃÅ× ÷µĀüõīķ'ėčž$/åųåēžĢūÓēūšīżÓ ö0ö'¬%ļžąa6šõó Ų.ņßńō īq’Ōęąį%’ēŠIš2ń‡ö& :ž źū ÉŽDĆśW:9öļDõæć;īčžģ<åē ęöĢŃ 3 !J’**żõ ŁŽ“ūōņ:÷ ļį6ÕčłÜ’ūį"ŁŪĢžéŚ5ŃI5µĄÕį7ŻēŹóÓŅÖõžbćąī93 ÜÄź ęł(‡ż>’ :ļŁSżąż īåßė(ś’öął@ēāŽēń łķ+-ńńåó ÷ūÖšöō ž åķ#łæųóš ü źéū'ü żńō*. ųģŲÄūśū(ū!äą" ō’ö5ü ā1,.ŃųŲ ÷ņ'ś5÷Ł#ņ ėöäŚÓżŽžū#č÷ķ!ųś6žKöü4Ąõ3ÜĖä¤é$ń åżPŽüĪćüöīų įˆźō蹌š’ō:öū ķ(Ųø Å łł?÷ėįšBŚK ųü,ńé ė ōDėö%įĶŚūĢ Ō4ėÖ6Ķ·5īī3ēöāāä#żŚĻĶäņćĒėēłž&ŗŽ”Ö ū ¹­’¼š(łŽö, ś ×(Ū"łĶļ"łįžŪō½éÅšļō+:cĘ.ęü"ą¶åšļś)ō%^÷#²źūõł7(Ü½Ž üąŪźżö šŽÜś"Öīüż#Ėū(!ė—÷Ųē-öįCļéį4āåÉī’ķŌąŻĘŌō"÷H* :Óģ°)¤ó éėM(żJół ę’ž łÕŚ"ö诞é½ '’óūķõ ÷[ļBŅ 4×øśų į !É÷ų*Āüć(ż*śīBķ’šśÅźńérłėīą ŁéŌ&!,×$üšńŲ÷>Żüßéł÷  ķ’čēóöā+źų’÷ĶŪūŪįŪūŌŹēė!SÓżÖžū ą õć: õ1ćē 'Yļ ß )7ń ĢŲFń*%›!+& ’’ ķ( ÷p¼ģżōņóüĶßģā)!B. ź! ü'ąŻų Ģūźūš,ņ=ū8õč óļųĒųōķō 4āõžüśķ¾ ģZ ņōėžüÖąšüńŁžŚłą’Åē  %öŽź°*łŽä/9"ßUęEģéõ"0åł !÷’ćöłžšļ$ż!,ŁÖŚķ1"ßšųšź’ā žį ÷±ūź»ü,ōĆ£ēÜųßé-ąó)!" šź Łęļ óń1ĪŚä’Ėāä’ŚŁą9 ļ’(Ōäåņśū9ńāś5ļ÷łģū#ų ś1ę ūᣠ<ćęóõ!AžŚŅŁīö)åļęöņÖń ļ($B#Ā é’)łņ,õł× źŌŽŲÖ*Ńįå<3#7ó÷Ō(Ž żąŚśŹóøĪ é#Ó öĖóį.Ų„ąūŹ#åYÓĢéļÓõīā ĆęĶ׌Mäü$ćåņ·ę-Ņö=Čūöķ!óõõŠ3ßŌéÜž'}aŌ ŽžHłś ŻŌ,ā Šōc*żš7 "Ō'šŚŪŠ­©*h»ąļ±ĒšŠÜ żĀÅ<õ{ńTüųą$ńó!śõś”ųü@43ןžō2ććžč ō,ąŁ(ŌöūńźZžąMżÕ9,B$žÓ ž Ē’ ÷üšÉüųÖ$Śīēż ź žģå žü“!ļšõń’ č ¹ģžŻłóóķģīŽó ö+Ėė2ēäų ķÓņšłé üÅüżŠņÓžńśŪś- ōśźĀōš ń)8!ęó ų2łķ ŗļććŃšę$ ōöķ$'ßŪ¼ ōšłų%ųń<ė÷ė÷śųņģś1 šžś ė÷õ åõč÷ !ž(ł÷ųżļćŪŪ$ ź ģōķ Ü äóü #ūż" ņīöųš śśūż  šęŪß ęó’ ņ 饯’2ūĻä’ųļūųŲŽ!ė×ć’ż ģ ūłöųōźüåüż÷’żö )źųß źūųņķźöšųÓ'ü Ūćķ#åļŚņŽūįģ! čūž ž"śō÷ļśż  "ź Ł żā’ųóćé ę’’čš'žŽž%’śžļęī$Ń/łųōמ’ ’õ ųļāõŽī īģüī2 ż#õööśćś$*ķų ņŽėłńٽ÷ż÷ģžīąßéņ3óŹīŻķ1óéųö'ņóŽżļņĢĆŗź, ’üē 5ä ’Xä ×ć’ļ~ōĄ.*ķżīų&šŠ÷ ł2+Ųóū,/óō¦("0ģń*÷$Ķ÷’/«Äļ’8ų6ś ģ’Ņ į·×ųŪįóö( ś3łń(ņöņäžń’ :ēį.ĶåČČōŚį#äõż ņØģļŚńļ5öļ*įē¬åčįżŽåńš¼éč&Żżź+’ņŻ’ąīć "üĖģ÷ģšč łńņŽÜ,ēņ&ųŽ$ó÷ūū īŚöōņöøś»ūé ūļģķĒō+÷óģLL’%!÷ś/ōčżśżé ńžś'üłį ų$ÜóųććńéõłśŪõąõžAŚņ żßņšł ń¶ļ" īńōźśžž ķįųŪüģŌłķīńē;ļė#żóžŪöÖóń ąįNžŅ Ä#C Óģ’īž9õ(ų"<ē.ņśś Äėźęģ1Ķļžėņń÷ū9óī4ķźÕ“ E**ū,&Ż/īX/ßßj’š*źėé+żö ÅūßŲ éÓėļüļ&$ #QųžDŻšć6ćŻ×ī+ ę(0ķīŪ#Āź Iįņõöś-ŁŅ0  ö!śśęŁüķõ ’’ßü£ü’Ē; )ōšgNūö,Fā #æü Ŗ1Nõ=įøß B0Ī4óRėģŌ1>NŚčŃAä ō.äžü & ÖŃ÷ś,_ų į&5ć Ęēįü=ŗüīĖČģ ū³öģŅų łń@7/wūī ĶŪųŽ ņīśłėÕ'$%Ē2ē äī>&™!/+ךžłõÓ"Ė6Åņłūķū#Ū¬ųŃņāį»(łšó1+·Ņ % Õī+%ńLļŁŻĻžŲ źīÅćīēüéņ\<õŠóēł ū"óžėĄļłÕOõ&L¾Śņ½% ųĖ šķęéĪō×$(ć$ ޶ėõ“!×+KZĆ&(āćóč’ ÅįĢ Č"÷žóü&ģ?éŚ"õšøŁńĒ®#õģų -(Ģłā"å%õŚ7č3ę '~üŹķéģ$łĪ$ žłóßõžļłŁšA\ļūģ3ŌżĀćśéŌöį!üłš)5=ĆōżżĘ-×&šųņóģłŚż ł óž#ļ żó ĀäęųŃ÷ąŻ öŽęó’ü Æ"O0ł9čöņŹ ż ŠÓ ü?āą+ !ž÷5Āäāč ļ&ż0ż ĄśõčīļHŲöčņ'ū6 ē ōĀł3ėēė ų¼ļżųėßŌ"ųż į÷Ö+ŲTżķćäń1š1ņ³äėåõųł÷śųģ 4 ß" ņ÷5Źē "’ūĢ÷ßÜåśß!ź żŁ åģņ ūóäņńš8ķ÷īōźō2-ēŌ'łĻłżõ ņĢę šęĶžóūöł čÕĢųæ ž/÷ł÷ā=ųłļł3Čīģõ%×¶õ É ųć4 0¹ ģŻ  ŗżķ óPłö ó÷Å%a éīńżżÅė +Ļóėüķ&öś5ģ4ą/čżūļ ź%ņöėģćEåóśųżõäÕĮų5AŚų5ī÷9ōģļP ćķśų/ļ5ōž5 š²»īżō­īźš Cķ!+żčšųļ(ĄļöčŪõžĢ0&ų Śģ’ł >žŪšųŚüļłążBüśĻļ!ć$#łńŪŪ ń׳ųńŁų  ó  ęūļöóŲīķńżēĖēĘō2ŌäĶ’ Įłż ž łé ö ņņīūŚ/Ēō#;č!Šüļ/ÖōśŁ÷ś  śŻ’ģģöü  ö’żÕźšš+ōĒų-÷óś%ōšģéź*\ż¾Ņīłź¬"ĒŽłBāÕ1õėüĶĘį ć:öPÉĢķīÕčģ’;öķõŚŽė åąŻöWŃõö×ÖŚō÷Å 5Ł÷?$ÉĪü2 üö:ł&ēõņõ1ūĖ÷ļ ’@Ū’'ō'ōÜõÅļßŌ ūDē{ FJĶ ÷ńö÷ ųźāūļŪ"'ęśüūóÜ.S6Ųžųcāūń€ņÕķųõŚ Æö €ę ?ü 5ćŠüļ .Ż#ū&įŅāÄī*ģš ēūń×ųéÖ oÄÖ ē#öēŚł+Śś’(ūŚŪüźśÖ Łå - ÆŻ/ūņųīöōō ų¬»öšōą Żü+ßõO÷#Öėžžéąģźöåūż÷ĖŻļÜčō(÷Ū; īĮ'€ųčõLį šś“$ü&± ×üøÕļR’ ėšÕ  Ėė źėŌ ü’ō×ūöåŅ)2ł ,ń óć4’ ŠHÅ$ńžķöõŠ’ŽļāõŁī-öŅżü×ķįśŁłśö ōė’łłńłžżä’ čü"äńß, ųõ ėā įŻŻŅŹ# ōĖžł īłŪÖģļż ßś ’ćĻü=ų/üōŽ Ķż@üÕüė6ĶÅ0ģūēŃóĻŽ$éģJ 2 Ö ņ×é$&ķĮśF­!ßķóēŁŹOõńFźŪĘ’ ś 'ļ18RźĻŪÅćśļœūą8ßģŠčģļŃ ćüCäĄŗĶīPß:čīśHų8ö’ū&éö ā"čŁūÅź«öÖ+!Ū ż)2ŪÜTżśńķļ ņBČåźÓ"Ļ+åQ) ēłŹśāęõÅóźłÜŽ2ΤņFūšŚĘ'*’ń#ēśnóöįēéĄ$žīō÷Ö3Z%÷üĖĖśžś6ńėé©Ö½ š÷5ō±÷šżż#ćūŸõģ+üÜŲė;Ü!Ō .÷× ī]ż/Ōą,õć źQöż*é ō©Śō+®ć’ ćžóģ,ę‘ õ,ą$ śņŃ»ó§#ä Ó$’ śņźÜ&Ć[ G1#…ģå730Ń1ś ęō "üö!š- Ęšń÷&ģ"l õéü>žū śų ’üł =ēōęī#óS ŅżFłų źėšÓÜEöķóÄ&Ę*ÄÅńö@ č€ ūXēō Ū+ Żčģ÷õ(ļŅA‡÷ųŖ68źģšņ -Kźöķ$ä¤Ō’äöų¼㠜ć Ž$čkę ó !Ē&ėń%ņūģōŽ× "’ų ½Łßśęćä"ą÷öāöÅš"%D®ī üžõ%óļńįäģóņĻ.ż÷ü'!ķķ Ųčķ"åæųåūė0%óųCł5 D'ŗŽūż%Ķ Gģģ’ģŪųäū ķ ęģŻóę’īå@’īLößŲō.ßųž čńö(ķČ 2č,$ü,ę$ć ü?ՔāŚ0ŃÓ€É5¾&ņĖn$@ó óńR/å» € ķųžęöēĄū"ę’ŲŌJ1é0%Ļ«żņį  Ņž+䀜“Ó'śóGą’Eņō’čėóõ5Į1óżūļēģ° ī ,ŪŪēL ēł  īźżļ Ō—-¹!żõ!īŻ©Žéņ’ī'Ķōłčķ;ó’’łÅ²Ž&(óŪ!Śä żäüõ ×Õē ’ō7åģ,³īó/öCöF’ļūššģĻ ėŅö łųįóAäõõÜéåńžóžĘöżč5öāēīüCų ųüšĢžŻ Šė ļęõŽ÷×Ō ėō'"%łöüžńå  'é%ężūéļ äų(ē1ņīęń ļ į.ėø ’мžūüNŲ’źą’ ^ŪŹńŅQķHĄģė’ńüéH śčĮ¦·*9ŁĶūŅįįķū ū4ŲÕż-śkń1!5,&ž©a 6Ū5,ā ēŚĻž üś č,ęļ(ó7&ś>ē ßüļ5äÜü4ŽšųźõĄØßšĻ.ņ ÜĪÓä#üįėŻĻū#č7ŁÅŌ’÷Qėē’Ó’å9ęęü ēīIąļóśåēÖņōųHś ±äżöżśó Żä²’ū¾0śÄķį üķ&ęłģč!ŅŻėā ÷0źķ@ūēčŁ %śļż!ųņņ"Ņ šü ß!āł “Żčžų(÷äź ŽŪšééźęõčģė ų®ėńšė &żłöīŚĢÜņ¹óž.ģź÷'$īī3ął #"ō Ü “%ł āģ¼ü÷#ā öäA!"ų ųóžń;šēŪūć* ųłłåł 5ķ&ó ćÓ ńóē0üĢö$!ćč5&éš' %šżś!!ųĖīä!ģńĀåłķ õģ.öś’öā ,Å’śśŪēįž’ Ų #?üļ+µ÷š ńī żī (6 źß- ņėą ÷źčń ųśüżĖłŲūöę#g÷%¾õ÷żś÷ūž&Ņś>üÅ> žļōTöūĒó öÓīž óĖ õ äōŻńöćļóå"ö ö š ūå*Żł3Čö9ž 1óįųžóÖÜŹžį! ÜčžīµŻŌęčŃöżEåīó)ü ’śų ÕųūķüžŪōńņį÷üéūųė*Ć åž ų ī D0éšō׳ܒž3éŽ#īõóģ7üū  o źõ9Õ$ ēC ųŻīŚö"õķõŽöśŁē śōļ%īūü© ņõņ õŲó0é)ūŠüößĪŁĒÅNC ń Ąž¶Ņńź'ž="-öĮś0óüæį½Ęņś !ą/÷ü3ź1Č&,īŃĮüžķĢ-×ķī" ć ņäųņžŽļążé šūūė ł÷ōž śźėūä× ōåų ÷ü źéżņ’žóéöźģ!ņśłž’üżųļéčõõźŽńńÜōĄńżÜł č ßłę’šŪūįŪļķŁ3 ł#śńģžūīžī÷ļīüś % šīüų÷ķ ’ųōļšćßķü’ćüųž*żł’Ųšē® HŁŻŹŲ$¤&ąó0’üņõłžģņÖžė ž üō Wī‚ŻŻŌńśžJóü’ŻÜāś’üś]40ōīōóŻ/å &=/°ó!äüźīčēųÆļźš«*’āūź*łĄ& ę*żēģł÷H’åś-Ļ&ń2 ķŁåćIü ęą;$×Ģī!ųłųüĻé ųņJ7ō!’#ųę.æ $šŲōŃąĘēļ šłĆ00ēŪõäįĶņŅ. ōłīžęń:ß ķŚŻäå÷ŪÅ# ć)ŅA:OŁ×ü9Õ7ąß. āŪĻčęõčÉĘ·Šļ8@  øÓ =ü ŲÆśńŻśēś÷÷2äńč Į ČÉĢķ=×ü ņöō ’Īéü/ņž*ūõū÷ŠžĒ. ņ'*ńŲ² ģš ¦źŹ)žŽĖÕł šó8śTņś÷ą%æū$Üöł*’žŽ'’õśŚŚżµģ .žļęž į%Bóėłīł Öõ"ćŪżį?ņųń'ļŁėšŚļżąėśžž,1"(śß śē ä’īōöÖń =÷ōõöčöż¹ \+ üž łķŚļó,čÜ#ļŪ ėäĻéńž’ń &ē’ß$ó żĀ'5 öįŚīüü9żś ń9ŚŗüÖŅŲł ńżūņ% ļŅč éłųżöņņś÷$ņõü ÅćöŻįöžŲéÓ:ūŌżæęŁņó *ŽŲųūŠüüī  Żü# ė/åśŲõųóųÓ ō,óģģ&üō0žōżõ5ļ Ćž !% ’# ŲłĻī #Ų/’ńPĀž  łųłå*Öö±śéčķóŲ łßż ųζ±ĢēčįĖü»7c -ŚūÓłó1Ņ×ÓŖÕµ€žūęó3= öś’ī ś*!ēūóܾļåļķ@Xø#óŚńFó@žņļŽėšö@ Żė&łgéś½Ūī©÷ś$÷ļ&Ó õæś  ś"ŅĶt ĻóE öóųķ 9(ńų XŚ7hō÷ūūżŁö)āįó=Ūąņžļ</ėū ļī ’;žų’ ~ųųÜĻłļ Ē żüÜõ5æńņ’ü÷ł’’čŲōšģš)9Ś ;üź&ś9.@ōÓīē ž÷ų¬źRēåžöž-öńä ņóšļ)Üņś  õĶóšōóóå ĮūźóēĒźóķ6Ū*Ļ ūūōī ÷ ßśäü×/¾žõä($-×šźś ųūņņŽ żå ÷ åė’Å#ż>÷ šåŅŅńöüĒ1 õųüņįöęū÷Źģłńšó/śżš’õäöśęčŅŌźŻéēī󜚌õńņŻL! ūōśķį ×’ Łš üāžśęöåżŁ9ż Ö÷’ ų÷’ōė ķ<šÓ+ļī ōī ģšŚō Ōźłć ’IųėśąłžõļĶ!Ūßż7ÖŌģł śėī ńā źŽźųčŲšēłęįמķõųŁäö4ó!ł( ćžõėł%ńÜčōżč ō(Ż'ŹäčäEę×ę-ģ !ś øóņł ē¾żķ. ’ū-ņņ +ś’ ÅÖś’&ö&ö’ž*÷šģō ē!ń?1žČĢÅĮ’ óćŹõ&ļGŪŽŌģ)ģń ū Ų>ŻVĖoķų ģĶĮä ögś…Ų$äį X$ūÖś"Īå’<Ū f€-Ø Ę3Ż>xč»ņ Ł _Šęõ¹45łöłńiöū# õŌÆĖõĘ€÷5Cśłż:ōCėŹü÷¶ōįī"Ä%(ŗCēžĻ5öśö Ö2Ś )#ÜÅE×ŪŖŪą įž’J;šņü÷*$ żūŻ ó äõé ōņõę &õöčń’ļ ķżüŌīė!毊ļ÷üśī:üõŅÜüśžėč $ę üłł%ėńßžļ’īūńōż ų’+Ż"żżÖ ’āėŻŲš õż ü>’üėųä78&&Üæ&ūżöčėę÷ūĆóń ’Åü ’ž.ų'ėūłķŃ3ū Īó+ ųž’ćȝ ńÕ>Ūū#×é ōÓ ąīü ūŻŪåś÷ļ361 #õä īÜ* įŃĪŚ :=å#šõäåó.ļŲ ńžżŚŹŻĒųŲąŽļŽžßé÷÷šÓ&ŚŽ<÷ŽäöüģŽžź ķµÆ,üćEöHś9šīŚ ęćAė+Öąā ęüAśśćżó.ģģ’żöGšłĖĪžŠęÓųŪļ/ņ;ĶóE0ņŽē>šČŁČ Żėų¹4 ÷Óū#į Äūś*ŸŃźåņŅļ, ņų2p 7%žģū ņ³zęĒšłUžäĻŽ¼(T:žźŚ ęēō ń,Łįłķ’*÷9Ž>ßžķ-*ī2õż§ņLĶń uņ ģ3-!Óļ õž/ļ&N-]čž#£ū.éŹxīCļńĶó „D6 Ś /ūę× <Čłš"ł öļćéķļšö$$ńļ.Ė7š#ńųŽ öš< õŪōū?żōōä ģōĘ-.!÷Kč¶ż’×÷0ā-I ’Ž2į4śėķ* āź ! ļŻć÷ęįŽżöéē3Č !ńźéü»Ćńšųü č öžń ģśŃß åų+üŪŌųłńł’°%’÷ī  Ī >ö¬Ó%Ų&µōæäłōźįūŅ ų2ėś æł##)ēĒ%!żēū ü ūļŽ%Ł4õ’ 8ņ Ųż ņšŽēūÉÓš1 š4Śųš%Ņ0ä’ńś/% /åąĢ Łż $ńĖ÷ ś’ĪŃš’ķŻ īŽėį3ą É÷žüčńöÖźśņ(żöŹäż  ēč åņņēģŹ”ÓĆ0 ź ė㢖ą’Ō)ąä īńłč¹żÖ ž ģŽŽ·“’łéų/żżļųšģÖģ ūģŚēįż'įP  ŽVūļžšÖ’ńŽė0 ąĶčģ š"×ōŻŗčłķłĢĆ(ē1 ą²ķ ā#÷(ßļ/<ł>,Ū$ź$1ō&ü ßķōüļ(éė, 0óĢ÷ įåĻ4 ļ)!į Ż š]##$ų&ö žūžģ$öņś$õłŲÖ#ųÓ.ęņź Čö ÜćĶžųüļü&æŪŽżś=& õ#ź%ĪŌ ēņ ż üā4 ąąņł(ćś žč ł"ņµūä/ą"źó $š4ćś óźŲó  ķģõµĒ³ēŽķ’ņ÷- õśīß">!/šŪ” üäżü,’ų0ßįųõā:äHå āōū!šę .A+HķZ'ŹŃüÜäĄŃžąN ø’÷ćĒéäł ń &÷Łģü/0ü®* Ö½( ..BļÓźÅŌš' ’ńõ<:> ß俎ś„Čīóģćųą å)Žćäćš ×¼$āń ćĶŚ’ Ū0ĶšōHĶņģ÷ŲūżĆŖ  ķäź%žąįéü   źĢČßū(* ņ %ą%4ė€ąÕeööč<ēėüõÅ% Ģž3ļ.ąėėß F ēžŻŻņ DĖå¼ŗ³ō ī6Ż*2ģ#§õżé.$ę üņżéóŅąÓīŗ0Ō’ĢŚ ģ7Żž V&ÜöźļŃVįB ā8"ŻÕNßīLęäŹŹÜ Į ķūččŃōī^ĒćéōŃ ĢüLÅń ńé!ö"¶Ü!ĒūżŌļģŚų?ö6ļ4Żéžų ׌Žč6$ ÄóõżśŻļ (ž Į.ÄąõÜś"6ę ÜįÖÓ ’éŲš2åÖū-+ėó:ž!ŚÖ#ü3ś-ó ļ *čĘ7ó3óśäņžżģĶäā)ģż÷ž ōół3öFģź9üč?$ņ¹ųōņNōųéšöžŗ(;&(’-óšēļ66ł3 ś6ņżéļDüøī æ ńĢōķłą0E *ĻM;żgņš ]%²÷žōź ųe&žņļ ŗö üų(ó±³Ö#āPäīčÖīõ+žó""ÜÓ;ö ūI÷Śų÷ō:?üĪ)÷ŌĮõõ©’ŅPŽ ż@īõ ·ś@ēźū90żėņćųūķźÜżöćÜ÷ņķ.õęż ļ÷tųŲŽž^(#ĪżÓ8ė Ū*éę ążļB łżņü ÷™ ä ¶ź$šżųŲ t'’ł"Ōś%=,=/ é9 PäņŌHü,į’įžšęŚčÅŅāńņč'Õļöåå å+ńž9 (’ģāÓū’üęńŪāņ ķ ņö ä nĀóļ#ßüłłżēō"ĆüML4 ’ē ūõćķü ł-ōļņžéį óäčļśūćź ’ńėŌč)õļļšéŅżąųč+Öęż śöųŚ<ś 䯊!ÓššŅūßļ õ, ķńšģÕžŻķ÷ * łļ%šų ļžšżŚóųõūćįļļ"&YäūéųņņĪńōś÷źŽö ģó!õŚõ  ś Ų ō üą žŪźķšų ķڹšĖ:p <üīéķ=’Ųū÷ ńļå/ļö’"jēŁ čķ÷<t0Īā8;ēŁļÓĶ’$ę!½!łąOCŅ:)Ł õó"ڬŹŹüŅóŻö Š.įōö;Ē^ģąĆKńöVż!žŹķ õēO°īļ ¬åłóī:$GśéäźEcīź,ę$ęé#·ļńłšżŁŚ(ź€Äé4 Į ųūU3ÆĪü ćŚ#šŁūėåśśā+Jģ÷ßēōėĖ÷Śūłė2öžöL é^1$ć#ü§* ÉMä»ü5įé)ņüģęźćŠķļüų2źš1õ žõžļīéųņßōść  ģæółŚŁļ!éžś ÖĢ÷õSłź ęéų óāż*ņÓäŅ’åņŌŃńé-ć ā ž›žć.( éę śēąģž÷ &ūļŪAņĮšüę1ų@õ÷ó(Łīü żšĆš&÷Ųųņ śÖćéÓb Ó÷ņļD)Ŗū ņõļī’ćī0łäķ&Į$ļžķū & "ēķ*LŁü-šłż ÷īĪŁžēš)&ÖōīłėųŽõC Kā ÜĢčÜ×ųGąōńåęīĒÓĢžüķļÅōśüÕļßųÖÅż#ūėīžņōēÅéūėÓöä8÷öīõ7m".īŽ ł÷Ś=&ųH+½€ łŁóŸźü<ņøūŽ%÷J“ą÷* ü’ūīōł0ÜÜĖ (zöś Ųį’@ŻÄłėē飳śD"‡į *JLģühBŠ ōĒĪĀöLę’/ÖčŻ*ūįąų³Mų2ƾEń& ķūLŠņé,×"šąā?Ż &ūOģ -ä!Ā÷D1ę-Ąųüō ×#źé & ļčõ2Ąiā%ēĶŲ,čķļ"ó0ŲēEņüßóJ: FģĘžŅł¹%÷Ń4üāėń[ ķ’TŻ"ĖŖ±įõ4Ś·Ō®ü4§4ß3O!ü6ķ:żśjśīKī@ō ļ<£“ŽšÖ“š+ōøčæ@,µīĻ)"TūčĶTģ-%Ę1ć ż·ó . 3ļ6Ō'łė(ņ\žčź9šųŌłÜćK®¶ļŽś įŒą&Ų1ŠüÜöäżķäł*ųBž.ÉVŁ!ž€šå-½÷į}ĄÉijŖ>@Ū3ż=ŗQīŃ:é Ų` B*õSłCĶĆĄż×ęó į’É"ü5’:*;)ų“ÖŻßÅĀÖą¾ČCśĆÖ7<ļ0äõćĄ¾š#’ēŽŅ/ĻSģŪąč"ź$Äń¦ČŪęž!~ĒĄõ ŗżšžź!!Ż÷ėÕŚłėåT6ŅŃö' ČõŌā’’ü5Ó1ÖÜīį# öŚĒõäģ7×īß,’ķ)\łē)ŅįåĻōÜņū $’ö ųć$  ōśČ: ¾#ü  4÷óµ !2ŪĖżž*Ō ŠžņŌ+žóö 0žåņšÓ’×#üŻ 6÷āūéåŚ ×üśķņųŽā ^ųŁéē# ōī1ķłüŻłõ ó(ś"ŗöööÆÕĘż $÷üL8ķ »Ģčæś\Īć’ą *«ā1Ćé÷ųĖI@“ņøī÷ ™<äŠ Ą ’$!ƒš*B)Tē(÷ęĢ MõõĒ ö!+ņāōč ŻÆĪaóä[ćšœöąåĮ>ŖśüŲŚLĮIž&#DÓ¼Š'ųÖ½9’”ęQ žÉééü3čż®ŁŁ, ķ:Åņģ-éņEŚįŪĻńĄłFąHŌąüö¬ō÷ä9āż ł÷ ķ+Ōš\Śõ4Ńļ Ųųź  ņÕŻóē Ķ%ņų ÅłüćńĪ&ņ(ÓõīēüęģķŲ õāßéćÄū &õų0× ńćóSÓšū åżīM,įßśĪžń ’Ö¾ Ų õ'ņ7ģāŁāāėļĄć'ī ėķÅ ēżźIöįĻśģéčŅö#öģż'Ͼ J<)ŽŻųŲ ōč >Š ĻčŌįķųJż6łēś ¹ģa&%Ź4ø ā ŻšĖ+õ(Ó÷žć>ēŁ¼£»Ū īüßĻ÷ēōÉ(Åū’ėåE ŁāĪųū Ę2ÜūļŪųš$ó"’žū Ģž5Ī<. (śėē Ģ!"įųīžžōŠõĄ66ŃL–źłž'÷Ŗ ś9-1ę#G =īÕŗ ü÷æ“Æ’ł.ó÷įž ¾Ćó ż"ÕĖ3ŖÅļņĪ{ółń)Éųūéß#Óū#CdÄ5©ōūßóŁśāó’(äš L Čæś!€żčų8 " ōW¦CČ3'ņŚžÆ4—ž Ļź\ŗĪ&Ųµā÷ī­óĢČüÓļč·%ŸB=ųÉńå 5÷ZҵāīųÜČēD7’“Ü$ł)šµ”³ cīżŗåķ(ĶY*ų.ń*ö ÷śė6Õ¹Š(šŠõ ż\āųł5äøióųōõ³ųüŪÜä÷ļ¹ķ¼Ōė"ųžüB®õÄŗņüé9k÷äÕģ+ż ół>żÅ)>9ż1ü·C½ž%ģĄ°źē%į­¤.!.H÷Ļž¼ę)SDīõńźėõĖąF“ńŖß G’ģńéQ9ßē&°°7õĶž²Ūæė(ąćČ@ąėŠś"Ż×?ä@Zō 6åéŪü #ļ<ć ))ÜŁųė+üķÕ%čś¾+ēļÜ ³ūŽżĮųJņßč×&Õ  &ģ×’3ÕžįÕš- %$ &7ŗóļ÷ėūŌÕ ń<ģēéŲ’ Ų6 ź’ł÷öÕuķōŅä ÜÜ š+Ōāūč=ŚŪė/īäō1čĘ3ćųń’%2ż­ļŃīėō=Ļķ>üüŸłćōżżßś = č.üū ¾ĪŁŲé 7 'ņÜņ·ŽĖ,"ź %Õ"ņ+ > ¤ŅčĖčŌ°ų»'ž“éĮžłļ,Qż),’8“EüęųŽ’7+’š3ÄݚĶęż ÕįüÖÜóō Õ0ōÉō(õņģßļHßį’ Ńł3źüźEB£Ķć×ZõŹ S“=ńę”ŪźüCÜ&6üź/Ēō¹" Ķ-Æ6 ¾ū$ö¬ÓāńžśŪźŻĒŃņņIéäA3É%ŻėĶš" OéŽöó*(īÕ½÷.ņńļ %ēĀüóĒŪ)öõČēÄēĻīó Ģ! åšųīć&ń¼ćįÉķ1ÕŽP,"ķįģų ł ō’Õōųķåķ" öī ÷ļ’jśł>žčö÷ GźĪ9šdćó³ß Ö ŚŻųū7öČ Ü’Ą¶šūŌŽŅō&ļūžß' KŌīņ*0õKīŲÕōӗź€ŚśčäÓ÷é&=×Ųųö-œģūšę)óZ—+#ꟳ2+Z ū.Ø£Ē$ 2óäŌ÷óEūüÕŻÕé÷ŠQöĖƹ:#“åŅü¹ī€ėdå’ßžąę+n޲;%E)ąįūķ×ŌūGŪēŻ/¤ōäÕĻÕļ? )[åćÉn\k¤ųÜź?1Ö,¾' ńÜRčÖö¹¾ćńżį6żć¼ķ>‹Ū«ūį4$āŁ'"耹ā$ ę Bä+śĶ4.ēÆ-Ÿ3äŽū;ī¾ł É4 źī>Żąļµę3;ņāŻóJ'āÓÜś  8õėļśÆžĀę¹ńņŽÅ Ģ©Ģg: 4× ;>óRžżė!óÖFŪōöJīFįhŠĶ ł$č*$ü'µŲż'ÖęĒåÕśūłČ.±]¶ļ®É Ėā>ėčIłś²*+Oåą8Ūą ēį濣ó@(ūBėś^éčČī ŪūõčļEŪēß,Cć=įłźˆŅó7žößėū ¹? ń5÷ń ’(āįDų2Š Ü3ć!ņšżÕō'ŃūķÕÉŪłGś’-ī’ßĖäß5 bŌÆĄćū¼ßDÜ ź!°Ł2õśM7 ü Ā0ó/ķżÜRÖ+Ž(÷/³łóķžä$'>ļĒ‹éä%Ż Į£éīśØüęŠ;Öå€ļü'ÕŻ!!ūÖ7Üż)]óƒŌ" 5čšū›×žö šŻažæ¹)įū µÉ¼«9óž=žü* #śŽ*;Oƀ ķüŸ,ūæåØ)ćžŪļÜŪųĒé+ +ę$ß’ ü׹KŹĄ‰÷õGąÉŻä-œõ6-÷uōļ2¼öŽĻā3ķŁ6 érņ˜ŁśņXā#×õם$’ŲėŻ$õŌŻū$÷A$<Ūį6óń¹ļ×ō žBĶäģÆ ēé×’üóńÓöņ׌õūūŪõńśÉEąž ×āŁŻmżčåĆ&ī·ķęßŅÕń5>.śŻBī¼čžūäĶōį ;Wó+D@óćŲZńīŪå' ūŃāņ"Wö ß÷'žēāŚŻ +.Š+čķŚóö$ńė ÷ģØōSR*ęŽŅ’# ä­¾ć?Śč õłķļšīŻ-óY÷jī2ó!ßP Gčõ×7÷(2šČĄ¶śņŚĪęų*ŅīņżźēūFš/ü,ļ(½ ŅäÕļłĪ-ė’ ö)*ś@ÆĆżüÅÅ?¼ **åõŲÓłß(’ ±åżéń. öß%#ĪŻŻD ŠEŻėē Õ&ųĻóżņķ!L„: Ē?ŅŃåÖ¶°Ļgéę2ż ,s"ĶäŗćĮÉ+Śų,ō÷Š1Bż ōśŌóį·j’+ó-3Rēõßż:īöHöśÕŁüū;ī+õĮÕ4O ņ!Āāö ó<$o$»ļHæļ@ŁSīćÓčå²ą9OśĘ·óÜGń*/Č:üā)÷šńė5 čš!CśLÄ#Ęć źĢ ž·łŽżžńč Ė §÷ĘĘóņ€É7ŽĄ&)Ņś>«6&Źš9łĪņŪŖŁņ .Ż żž%ųė-ģū÷ żęčī/čHŠąāžéå&üFōŌÕ öśóģ)2.ĀŪćēó’ź·ū÷äš ˜ą&ŠŻ ž žüūš Eļś ė×ó9ąó³#żõļŠ8žąūķėøō!I/łżāö3ś)įŽŚģž4 ßłčžčłžé Å/#ųõūÅüõ!0óīõjœųā/¤ėž,-ģóü’åéēŌčųŌ0(÷6öö + 2HŠųKŠČōźįœ×łØ"GŚĒł€ī*ŲŁßķ)BÜLģAū5ž üŲ.éäś VÓ/RČ.ł*Śó˜ŗÖS€ÜĢJ#@'1 ēŽD:ö›ķ$#”ķ"½¾©:0ä9Aų#åĀŃĮŠżŲ$ņŻņTƒ“Ś’B5åßÅķ ūB!īśņöōļ^+@śŹ6#Üų1€ ćųķÓŪ2ŗ ō÷°ėūß8Äš$ ×HāĀłéóö“žēĆü į ÓåōĄ+6ĘłųąK÷µņ×ī/éō-ć#!ģå$>3Č'æŲ:*x# 9 $$ōįĆüéō¾ųŌō#3L$ķ÷  ł×ŅśĀ÷ļś’’’IĘŌŪ( åä ė÷×Ō÷żÆŁ÷ū*5ž+ų-üā ļ/.īč\½ėóŌ¬·)éąöėł€u7C!œ'ś'¬ ?ūģ™čņŹ¢åIŌ Öēģ+õē“bĘź8ξųų[ #Ń0×)H’Šģ#0üŅP’żėĆųūõšē Ųæ¾Vóä!ā8 ē’,X)Ō!Éź–ōĘC>%ņųö6žbü2ū09Ćśå¼õ(ņŅņź>ī)Zīåć2ĪČ“ā¼Ę 'ėĢżÓÕŠ“6ź*_ÆŻģżšņ šģ[ģįᵦ4ž&čŹüć ō×ņ$ÄīŌÄēķ* ļē+żśż2C¦ųįķī # č+Ūę3^ĻÓŗŪ8(Ć&ļ°üŲøü0FŻēńüń īͶ^27ų£Mō#ÜÅ įāI·Ž5I÷Öś ļ-żĆĖŻ’ę'æł)īżæęȱ ?Ļū "·Vó3ł3āėłģå’łÅ2$'łšźē:Ļ#ŚŹ£ÜŲŁņ÷:ņģĀ &'č<(äą:×ė(ĢĄįųéõõā$ ĻPŠå@įūŹĖ÷ -ķõĮ+3żäś-éü!ö$¹!K?5Žį Å×>ųėī/ń;żŲ(ŻČö74ÓęöčāåśōĪöóęōÜ/ŻŲ é×ć÷ś%ž .Čģźš/ü:ĪüČ2)Äåa ńčéņČ.ŽēäģŌ'41"į¾×²ę­;i¦ņēźżõ’ŲĖÖŁ /Ųņū T>ä"+ņģ¢)70ķżßhłųóŁŁąģ*Ä"żÖõ#FĶ<ó Ä ÷ü BŃÓęćÕ"§9(4Óg’Lƒ ę§0ģ ŗÄ% č!śŸĻŌū;Öģņåķõ޹:ųCą=ģAžŃ įüÖķV„÷Ę»ī°įŠ ąī‰²Ųå-įņ8Ė·Ÿāų<-ĪA7ß’ øqŹĶ4©ņ±Żņ8å š.1³Ś@Źß ® ­S H¾Į)ü ’Źü ŅéĄō×õ1ąÓłüń ÜJł į96˾ųęōįōėćåĒõńü33)čķ#×Ūēą±'ł2 żāōŲE źųõ! )īŚ’7 ē?å ŽĀōét><’ėłŪ&ß0žč įļāłįī ęAģßįžŁæÕ ŪĻó$)łŁŌö żøłąWó )ł@ņėߌ“ó•rõņāėš&3­ÖĻĆ’Īø: Hķ½3’ üM ĄńįCDÖÆ’õģ+ ×äĘK ŌńĄ<³öö :½īŸ&<+C×Q8ūČ ÜŖųĖŠVģĄ÷Bxļ±96—ņE<żįōAÜį1O0$ä6!)Lµ»=NöżļžÄ€äœ Ľ(cÓųõŗęēžŖ[.ęÄDüUĻż.«÷Ŗ_ąāč„Ā€čó9¬ļų2ōėÓöś/*Šø+ē ÜĖĶ6öśóÜäŌó ā įõ4°ś£īó1÷ ŗõ&ČŻŽ,ęÅßüńĄ  Ų2-ÉõZ Ö Ā#Ń6!& ķń"Ž2įĖéé J Qū)õf:Ģ÷Ó äē0ĶP-ųŚš  "ĀXćāĒĒųLGŲ ¹ÖĪń×DJó%"Ŗ ČŁŃčĒ»ę óśīéįé6Æś`Öą\%±I#„ =ļóIķģĶ1óŻćā÷ ÷Āķ•šŽFėąk#˜Üīąš("Ūž=„07’É”ŗäżšżéU8-ōŹĖ×Īę48£Ū€¢Ūįčńų&+õĘåN"$ü+,0ū`¢“2 …é ¼Ÿ! å ēś DßVź÷e@üŚŃĻŲVōžō÷¾ 4ļś¹?”$÷’$ąü?%Ó°Ż6ČDS#Ā­P²œ)Éģ'Hņ7Ō¾ %1ėū$ę­Īūāč;ףś&_ĆÓžćxĻ%L9 ōņĆ|Óń°+0ł€×# Fė’ü ėQöKā˜Ż×öĆ- N8ǹŃ5&Ńčč&ż h-šņ Ė5-&Ķśš?ČÜĒń6ģ·=Ž:ōŚa‚õ7)8ü= ĪąŠ'§ś·šEē"Ģćā%ę-Ńóč¹ÄžūÄ Ī8õ6¬ŁxļNAńśļģāŽ ķ *8E ļŖ±õąģł¾ŽóŽQ0 īõ ŅBæŲ.Ų¬é&.óÖ,ī5ŚŽĄ©)ąóPäņbÅó3 ąū2īøż  ÅŹ÷ĶöÖÅÜ'7ē "ä÷źöĒ7ė.)3éŽ Y½ėū Õ'ŪūÅ’ŽļŌĆå Ē1ŃšżķźĢ÷Āōė  ć2¢ Ö#)Ā-’¤)8źģÄĀŹ(-ķ >ö'Ü3Īf/3ļĀūŗžļ éįģėøų7ņŃė:1 īūžéüē' Ģ’“8żG.%ĒU ;%׏ĶÖū,1ńśÜłōōDwģĘ “~ū ęļ ąūįŌ("hżē,Č*–:1?ÜŲńÕģģĘ//Žä:żÜ9jŌ0āōČ÷ļ¹ßŠżģś$7źĄ„ųńF ņ&õō ¹ōĪ äĢ1)Ó+ÓśŲ åć)¬«!ŲŌ±ī:Ņ Ćß ĀŁ-#,Ö¶Č’$Uß ü£0å#VŹęŃ’+Ģ·åų3ėžŹŃŁŗåęžīyķ·-öņēüś+ņ(ōśEÉåÜŌ%äėEź×Ųņź®ńģ)ó1µ#ł¢ŁĪ Žśėaūč×éJ.=·Ó ö²/üDī*Ī/’ģ2äš:čļģJŠ Õ !ٵ!°O,ļļņ ļ»é$Ū1Bāś éžęåKŲ?Šé:ŻķÕĀšĶ ģ’ö# Åå1Üī)ōC$Č( ė;×0 ŽĒJ źAżŹ4 õÖ»ēėēż&°ļļįŲ8ÖŪ(L­'Fš<·ūčööĪłõŽ,÷ŃÅāĖ5 Õö-¼ąų3ūÓõ1Žžįłś) ņśĻķ õ> ĆŪõų#Æ÷óõ*ż÷ųEēąīś¹žśóųóķüĶ’īźEŁŽć)ī*’÷ćé$Ōüēļ-ķ +ģ0 ä-Ūģšż ń łčś)ģćņąóŅżž1’ ķŅę>å$ņģł$ ņūķ%üļ#łęē×īį“Žõłįō×ä)’ õåą4 Ī ū;ÕĢłd.²_óŅÜ. ōńōōś?ŲŽ÷U'é ģ¦)ü\óęų.śåä ģź<(éų)šż÷ 5īEŚöæųōäśä?ō%Ų’:Zń9ņŲęVŻėÕńUś? ąÖ ķŽcÕ+įO"ć#n궏ę9é2ż.P°’ģ%żÅß ŚĘšĒŪõÕHś„-ī4¦ó÷óóņĢžBļ G(žźéöłÓ;Ļįāńė0ÉHŽż4ŻśS(’ŪńŃ dłŠ*Ä łæ^5žų"ēĒEķIŅģ!ūĘ ļėŻųį$!×ŃRŲŻŲÕŚ&#īąĢż$ńūļżüćö šĻš1ī")4 üŅSņ Č!źŪźē%ńŽ)T’Äóń5ŌźEł“+ńĖ"Ćõ ×ĆņĆŽā ńļŃ-śź"ÕEõĖšŠßüõļ Ļī%ē*¾6Ńēõ"ŲŚŁģ(ä &ē% <åżōĒĶź" ć2 īłł²’9śæ‘(Źē.Š\ŠČe2žJ¬Åė, äüÓīņŃńųöJ Tņ ł7ķ= #Éūšŗķ)ūĻ ń'ŚF65/åĘüż<9^ ü Ė'!@* æõžV õ÷')°ķ Īā7µē5%źD%UōŻŻ*AIM BóŻöņęČóŽ]æųÖāĻA%ēļJģ éĖäŽ;čž$õ !÷' óĢī’éüż/³¶!ął ĒążęHźź<ś>Ļf°,Óžņ,ū 2öĢŌł ®"żŃüé'ńåķ +(īÕ÷ü äżöš Ņ#)ūšīńŁ 2 ņņē žé óņ čåéāļłÓėFįļćž)ŲFȤšā'ŚžČŹÕ÷ö­±ŲÉ&5É’+*Śīń:G ߣ*Ōż Kō$÷č< Ó%ėĘŻäד8¾ ßāÆ. ż5żœ5Ć84ŖśēRšå®ÓNµ/3U÷ī źŸ¢”ūŲé0 5ęįń'7 6ķŪ6 :ņēīOT99 ÖŹūĖÉ ĢćČš2LžŠęP½×’Õ«+(÷p8Ś0 9Ź Ł0vģ0Ė:&øćņų¼äčöż.1<Ķž.ē!üÖ]0öŠšÜĢż!ļķĀÖ,üÜ*%Šä"ō äóā"ųš ŃŅNŃ Ūīķ ʼ/ńų.„裳&éĻß#Óä* F2ēīż Ū#)É9ų>Üū&ļ/Žł ņĒÅėčźÜų÷ŚÄ×/īķćt īųŅ·ąK1ź ×&ńģłü!ß= Õ'ł÷ÓłŽźąßćģö0%ąłł(Vėį%%Žō ¼ āvß?E96ń<ź:ĀśßÜ÷’Ńīš'óŁąDŚ<įæÜä’ĘĢõ=Ģņō×"ż)ēBńŌ+š !ŚõĆś5ō!Ś "’ ö ßżž”­š ų:Ą+Ū«Ł"ć%źčļ4iµÉĻ3ėõ@å#+Ņõ®ŪßĒ ź H=āõś×ę ģ Źł ē"(ķėżčźżł+SŻ ×üŻŲų#)õ®šĶöīŽ.Ūī÷"ŻžŌ*I įī/!ņč =#dļūā( ć8<īŲĀķŸōā’õžŅżļ Ų BÓÄnųöĮ»¦ī Ü"ų/Ńįū .łC#āöøFéõÉńŁĶćq Ė āŻŻ¦FāóŌQś’Ųe ķ"ōšTŖżįŖ #$ čÕõäx=ÜõÄ!Ń%Nü#ÖŻä ā OĻø[ž/ž@"įŽ…įDūšā QķŚøó&Āõ ,3°Ä¤ "ģ& :ń[*$*åŅČÅ+ūŽźõ šž_Õ’3óÕĻĖ %śäŪĪ޳ż¬ŠłŻÅéš)* ĀĄšē*#Õ" +ĀóźóēNś­ņ,"ŚŪ"PKČHÕHīõšß.åāē,)ķ !żł,ļį#¤=ßå+ ņž“õ/ń!üŽ2) ’6Ü —õń33Kå8ŪGģ  ŲÉAŌĒæŅ'ä<ąņü8éÖ Ź5 ¼ś0;»Żå/9ļ%ĻńČF,šĪ ņüõ"-Üćõ?Č×ė ü""Ņķ ŽÖ¹ļņ 0ęüś čĪņÓō Ōął&śŽßóöė* ųŪ8? õęŚOüä!öōóėŅ(ģ õć6Ę ŪĘ2óģīģÉ Āéž’ž­$ę–čįÖü6öõ9%ī’$ ōÓŚųŚD½“ųÜ%ĒĘ/č5 Ņųł!šń/)ĪŅŌŽ;ó×ļśĢąČ žė &ģ*'÷ ōĻ4ö)ł(ūć’& ę64ŚßלÓ·D(ćśŅėķ łźć ćÉāšéåķŪ# Ł0ö’¼Ž×Óžę÷±ńĒßG ų¶ėķ Ųö×I źģēłłkņCŲ2ŅIŠšß’ŚŃÜ Ū! Üš)#ļä fś2 ź š'·Ö 3 Nėčęā ĖüUķ!ž Ų3žšŚÜ\ž87/źš óČŽ»,#ķ!Æ čŽ#ü* įĆŗ< (¼ėÜéČÄ4Č%Ū-šż.źź²ö@5$Õ$Łś%9!! ė)ŗōĪ'ć Į śēżĻżļŠŪźó·ć1ńOū$ķ#&Ųö š#> ūéųŹ ;ęń-ļż·Ų#ōJüąC¶MśüQÕ ģZ' ó1]ßĪķĪąčÉ ņ$üĖž„RüŲ•<;āūPŃéüŅÄżä_ “Ā’żÆīéóżņ³č@!ńŽŃĢāęĘ®W=įŻŹ I&’ĪŲA<NŚŗ\FĢę LäūEōļ ąķÜŽ•c»ńFGJ-Õķ3Õ ³ń›ļįų ūłė«¤ņ ’XÕ»³Qi;Ø’ź}ä"&€ć›,Ż›ČĶ÷Žį¶śĮą€“ 'ź÷ōłł&ß.(7ļŽĻļ.éų?īBžDū°ó"7ū³8)łŖ2ą$Ö3'ü ŌŁżę܁čśõ(QA 8)Aģ]Lć/ÖÜ(®ŅäąļŠ äŪ#9ĶčhVŽ=¢źźüļĀoŻ(ėĀ[¾1FāīJźļóÖģ÷’*Č÷ü·«ņųź Ńć"&ųó’=§«-āź ąĮÕ"ø8&4ūbä4ęųÓ+ÖIół Ļłøāvö ÖęE%āģöņ¦ź' Ž$ $łź°(Ļ(3/ÄńĖšüüŽ'(ęÄŠ:¼IźūĢÉ.„Cń3õźģ!ćÖż ūæé0µėÓU·ł4śī<šøSŪ  K-'żĢŲ+÷ŻĶćźGżķ÷“Ūń%żć=żčŪźCžPńk&šõ)čąīŽä¬š0V(üNĻ'  ¼óįś’ä)Ėļ%ž ź£ź+Óą"ł # ׏ĖŅż%ҼŃćģŌŲĮåßūō éŁ#×ęļčĖłŒüž!Ģßłėōļöųąłę5ž1ķĮ š¼ž)ķč;2N%É^!ćļ:öż5ŹūÆ$«!5ÜŅq$’<)Šn 5 żöÜ«āō-³ļ4ø/G«’¤Łį(§  ąī«É40'Ų8ć5ÖåīC±ł.Pé³ū)'ą-ö;×ķ’Å ķ *ż÷łÉ)Ö>$õÕ-ź-Zę4ķŁźńß-äBÉ» \;óŻó+üõųżžłņ*źČ?īķļ":ē400ōū#žō÷ī2ó^ó%Ółü‰ ķźAćņ%ĆųŃO˰ NÜ6ÕåėßžĪ: ßģŻ,KG-ĢąįūL āąĻ Ū²"Åśåī÷Õ_,Ņ’É86ĄŽŚäü$ųöüšöčłE¾5 =BüüÄł+•É+ß ĀN9łłńūÖ*šą'' Ų=1łõŗź’5ų½) +®óų,Ž÷’^č Ņ3ß7FÜ:>ĪųÖ188ļL’ īńåöŪŌĀ $KšėÄ95 įžįvņŌ.ņ!Ģ# Aę ų6ķ÷ ’ĪŁ "äX7ų4OĪź2/Ā Ōś , ķŻżŚā™86ŻH )ļÄžŗķ÷žł āłęė"Bģžųėē@ūšŲł$čŅĒČĒū Ķ÷÷Ož×é÷&’Ö* õÜÖģ"ņ`Ņńę! ŽŻū0FŻ’ !žļź)Ų07$ŚģÕė2 šŪ öų ķÖł  Ū,ķš-ļÜX5Üä½śķī1õ+ĢśšÄ/B ī ćFÜųü 5āė(ķįāŽšōßąéō öõ&J÷į/šßWß"ėž…6 ēÜ " ņ Ģšżżįō÷óüüĶXß;®ŌĀš’ŹE čūĻŚŸÖņ üą!įģKģō* 'ŗęī āģć0ń,Ņą#ķlæż÷åŁķõ"½“ݼ07 ńż ÷ĆŪĀš2#8 ÓųąŚįįæķē.1ē öŲūśīėåźņ)õžų=ä6-Ż0žķ ŗh×ōēBē įÓüź5ćłÜvŲ.īū$H÷żĪāįĀ× Ö(½ķŖ=ļ äų 'ä!×ö’éīĒ!ŲäŻ „ ?KéŪ~ETÖ :éü³ŲļČšüśYį’ŲņųżńēĮģøŪź$ń1ļéäį*ąń"2Nß&= æōų0߯G9 $½Ē*ńż=WŌīķ öü …÷ķšņ;Ģģļöźį&īóż1\ļE÷#-×4żā¾%Ł9šķĒę'ėśę¼ĘģėŁ ĪßėåŽ5+ōŃ įēč4čŲžä9#!"åå8Ūó×éļH ,ų4’żńšųūLõH ŗ#38 ŪĶ#-įĮ ŪŲüéĀšĀ ž:÷ Ų µł'óWĄžŽœõ ’ Å[Ö?ŚĪ ä(Ž>ūDģŽū,čńźNß“4ų.Ä Ü ā×ó³$ʵė Ņöź=<ŻWōöęōdJĶŽ$+#1óĻ ¾3@%ĒMŁ4’ædėõG(ČÕéę2°’RŪń ÕŃńÕ„ųņ²śĢö9°÷ēDRé ė@ē *#@%ęņ;Ē&*V'¶’śšJĘųQFē-0ć ³ŹS@ö1ē˜Ž 2&ōÜ@ßÄēW×(3%åZ"÷!÷÷yÖą³)ņ ÕŻąöųĒāŪGÅćę6AńŌ€įšāž ź(ųŽäü¦śłķéĄ.õēāÆßĢW$'@łćčš5”ŌžĢó®) śD!ē¤åņÓķ’®Āžążń É锹ęōó9,Š -ć 4ė' 9'ēšQ 9 %!X /"ūōSé7¤ ļśż£1Š##ö*żä!Õ{ÕĀ óīŁģć§(U§Äõä łѽ;1ä ū±Śē×čŻń÷×į«ōŽõ!/FŃ 0äĘņ.ϱJāöŽĻźqsīżģ āüšéöōö!÷‚ ŽD² ų üĮ©)āÖńŒ¼ ¦¶ćō›ņ24Ęūä9°-D!åĄ)ē*’ņDčoŹ€öķD_āąŻ Yėī Č ōրG‰7-ń<-Bƒ!õ/ąü ē2A-Ēó<X’±„"' ÷€7ū:å’+“ūż² õ!ä €ōŪń3SŽżÓ!^õ4 #€ē’ īCÓ20b)śźśŻģĖ'ļŁł3öł±&&DęŹßŠ Å,öśłžé¼Ūń+,ēĖčó­ŁÆļęįš č: ż öÖļä% ¹ö+Åé4ÕžõŁō±ł ųøŹóč+-ē$85śū) š7''ļŲ'łøąRīé !’ŃŃŪMöĪķūå üņųåńżÉöė- ßčśæõī$żŌY7žĒ%į ’4Ņ ć9€Łęüī0ßū6¹Ö< $Ŗö1#łĒÜPß/7*ś(# ’ģńõģåõĻ"öĢ*Ļųöūłč ŽįņüŁČļ ā¶öėÓ fß²) ē+:YżāĮk%śĻėųŚĒ9į ß¹ĪśļEėąDóĒ)źÉ Ņ÷×Ä$äś"ņ źMųī.ń’%¦,Ößé'ķģžłŽ41üΚü’ż!ńŌÓĪ żäūęķėÖ(ēŪŌ±Žå0ńŠ3ūčł×ꜾóņįĢŌņŁņ-+ÕģĶ"č8-óV ÓYõ 7’6ļ#  öžćŻā äķ2Hžź !"öā:/B!é$ŅŃōłė„ņ āł^01 Ś õĆńicÜōņŻŃ ģåų0Č šžŅ Ö į,ńC?Éŗ öńåŪņå)į?öńÅŚéźĪųŚę7īņåņäģ/4Ź* Ūšßßļļžõ ā ēóėüÓŪž×ÓżāŁēż茩’śŽŚó:ż¹čŽāó źļŹŃóė (-ņł÷ź ŗį óöė 1  ņ$ń /Ź ’F÷ļ éšüĶ$õč1ęÉ"3ųēžŲKčōķųĄ"üü0źł.óźG!ū"ó÷'ŲŚóńīšÖĆó’ ģŻėĶ2õū’&ō,šć9ųźų’Ūū Ž3;ōö3ż÷žļ2Ų ßåśäųĆÉń&Ć>įōCüŃ EČ÷ š÷ üÕ¾3ł=Ų É£ ēå Ą*®Tū Łęėņ=õ/ņ+ł  ń×ķēĻ#Gśž ü+īü¹Ń ÉõżūōÄĻōć=ĢįüĒŽ !ńč»%Ōų4č%čłŪÉ ćī<5gü÷ō);čŹĘōŅĒ ūķóÕ)‰ź( %?ėīņ0ø·ō)¼ÖšĘŹ ŪµįÓö¶Ś*ö޵ß×)żķščą ŻŪ·ü÷ Ū/ü į>÷*łĢÜ 3?ß%ż1 M’é ōõ<8ĪĮóLé-÷«²ŌŌ÷GĢäśšĮ"ēšĮ77 Ż#ŚAĶģŁŻĒóś“³/ āżMģ å/įßäó īüó#ņŗĄ’ųōšūūģ%Ž-÷ģ ūéūŗÓĄķ(åŪśāļžčū:DÖį‚ĖåüŹ ń÷ öß,;“ŽņFŅ#üé7÷ Ū ēŁūļńå+ęŲńāč" ś(ķ ŲżČüÅ’łŚ-āžüm’śęåčßąŪēņWKńžĮźę×@!ķ3ć Ū ē/ā€õäN0ŁĶ) ĖWŽėÖ ÄŅ÷åäŌõ÷ĖüžģčIģßįķĘŪę { ž¬4Ė Ī.Ļ&ėöČŻČ0,%öķō, ÷9ńóūAĀåć:ś<+S)ę^ī³šęó,ŠČĪ-õ0óöŚ0 żķæ!ž #ŚCõņ’ė(5öÓń žøBßś"ż+=£ēÓÕ ąóŻśÉõŅ<ēšūS§ ÉčŽSųĢĢÅ’ł īŚ =H¼ üå ėäīŪßõōåŚĮžŪźBę(ć( OĪ×ī4"łŠØś3Ū÷ó)śŻGåņÖę³ĄĢ. ßEŲŗęźōąČv,ć Ķõćś5*6šz ŌŽńŪč įIēÜżĻŃ"’źš”6ō³ł,ōsÜ N&ŌÕśłįµæ>.Qś9óōļīŲ dūÜēę£ Ŗę/ š·œhąühXič·ņ'ģņ% $ū¤%-ž ČšśüŌĢŽ:'ö.G< ÓŚÕŹ%ü Śė’  $'#Ž ąŲóėĶCØšł’0'²źę%ū’ß÷"åćņžū!1×B*Ģ,äó‹ä' üé$:ŪČ&"ļ[Eģč8_ųį ꌞó Ó‡$ņ Āżę"E70< oŚ·$ū+ź2ę(õ÷Ł~]óō O÷÷ł ņ$’ļĶ4Š :ó¬äRõÉāöŻźĒłS!(õĮāćńęBūŚĄõś_-üžüŠõāæbüŪ>®Ģ ]æ#…F(īü׳–Ź,?åą0ī“é4Ć$Łśśę8żś&Ēö>ļ Ī&2õŲćÕīĆ£ēͰ"Ł"@FMFĻ" ¦ņ4ܾŚ5#„ćõČ ÜŚ÷ óå'āų°!ż-ŚóĮČ £Ųš°ėÅD’é:&å»óWDä錹čū÷1ī"ó µ+-ńŁ9!Ę1&åQåä(Žž¹A6 åē ąįł÷AŪ$ż€żų34čóó"HĘ%BĶāśÖ%Ų ŌõĪ$ģ!õÖäó äĖ!ģ üŖ2Šņž× ę3MĢ’Ł"õ ąź’ŚķļļķĮņć¹Šźśēā’ŽN3vėń5ųēī >ō' ! øßćę¶ łžćü'łóŲéā,ż*Żėķ ė äüŪA>ń 9ÕBĖSįėņVäŽķ·X!OŠō%.1Iżó żåNĘÓłā5½ éüļÄłü$żKŽūĖ»źŅżøģĄŌś2å #ńD 4)įę’Ń”žóIß2øżqøQ é $ ±ū ÷š ¢#’Äķ ä9ųpģ ąż$ŽSĆ*äķŻü*ÉļŗŃÕ<żŃó—Ć ÆĮüżõ,ēińÉšÕD .ņ7×¶ńņüż4! ŁÜūDų°żāY¹>Źę#ēżÕØē7 $:Õä$:Į üŃŁķ;ā÷ģ2äųP+įžīŪķ^ć.īņÉūVŃ«łŽPīł×ėļ?Łśę/ šń3õžžć%÷ōčä÷üążÄIŻü \ęßKÓūś³+ =ŠDõÖ’æĘŚŪćł*Ū @%¤ÕĖĢNVļbń%.ÕźøK¶ū-Ó÷ŻŠIlõ.ģ# Ļæį"Š%ļ÷Ė<1«įĪūņ’ĪØ±&ē]ē"āÉōĒęŌ ß”!žā“ąģ ģūõÜäPęķš#éķ,$ģCĪčīōŌ>:öR, üü+č·ńO÷ēē^>"ī7(Ńćä$'ÖÉēĪöĘ”żäōöĻ:$ĻõÖ Rž#2™żÅ3ļ$óų)ōó$XńÜLīÖĖ GŌśóżTŃ Ł$õņŲĻš ÆśŅŚūņ%ćßķāšĻ­$éņģÄŹÕņėŌ“ē ÖŌµ Šś ·)ŠļžĻļŸķ !Äń ūń«śJė8čõŽųŃ ßü ń0(%įńó ļÄ„’Ē üķģņ6 ĀóéķŃŽć :{ēōźŽÄĻł)ų!īüķ2(ßį Ł&ŹśÖĢ*ĶēĘ4DŽżū¶$śLėīWŃÉé%÷Éöŗ %*$čŽõģÜž)õMż9Aõ=ōč-3ūćÜ1($åŃ ūųŃ åŌ'žÕ÷ńŚ7(ŲÜ/ 2[Čć~ä2Żįķ3ķÖķ9é6īėŌÖõ½ņķ8ŚŲ ā&Ÿ 0Fåō2eŽģćõ’AņąĀ—ė¦ śģŅJé¢ś ’üŻīūĶśÉŲš2OŅF÷Ķ/M ėäöĻā4śśģ“ą(j–čö'ā­ņ.ö£#€ęłö?õ$üńīūįāżéń Äa õĶ?ķģć,śĢõ49ķżC1iä7+D:ż/Ē_ņ0óō ķ®ķįź ÷üšŽ³čŚ}j¹Ų8ü Ÿś4ü*ĀŁ:ĄŌón%ėIāĄć¼F 7łē’Äp/ ×ėżö Ī,bä:Ē ķĀ@¬Ź+ĄäÄ#ņźńé×ŌF0éõäŁüŲ%üóņ’ a’ńŁ#ōį÷EšĖ žŽ Ņ#’FŠ’šĻģß ņ»*ģ9ųöā ćŲģ'īŻóź/Ķ÷ÖęēéņóļµżÕŻņįł’Ź¾ŗųVļ ü#6āĶ(ņšõ÷ żź#ōÄĻ”@ń”ö5)Aß$ŽĪüļDė ī7Øæź;ģJ ÜķŲ ×.MļŹśīķ÷Ėśš8ćJ ÖJ8øńÕ'žéā!ö/ļ:ĻųŻŚūśŪäŚ5ąƒ"ń’·ūĪģ/ÆܼŁKS'!Ó? ę¹ /<ŗžYó é«é<Ōńķ’ó1/éJńłōī#Ȟ ņś:÷- ­)Ä=šä’ Åēł3÷ߎ öŻü(=»Ńé+Ņ Š6éß13Åüņģģü³Ńéß ųģŻ0ņ×’ėŹ곯#0, +ŻDŲłģž(%ņļĶā ÓB²*ų”ģÓ6 łģń’Ž5(ģīü  ą¬ŃĖĄļ ×MÆČąĪśļī ךśūč Ń+Ō!ĘŁ$’1 čó%Ļń÷öų垎ü"ų –ÕĢ÷= ņŲõŚļēšÜę'ĪļŚēčä,Ū÷ĆD­ßö ļŲŽš€ļ× ?2üPįčEüę0įē&ę4Ü'÷ģ(ōū7*ĒhĀ'ĀūÓģčęž?ųŃļņ’+ņķō*õü žß +ŃćŒ4Į ńÅ æØéśģ¼TŠ0ķõŁÕēń'×ōČšAüūō$ź$č° Ō²½ōķķ ōų¾łŃ  ķ5ŁČŪųŚ’*!žśĪKśāļėż ßÅŻÉč š$)ī« Ā&)5ōSæĶOgÖļ’C & ōģāśŪß,ö.ė’ ¾o ÷Ōł Ģńņµ’ā ü¹ōĖńŁ7‡9ś šÜ’ó9÷ü ’$½źŻĪÕ=ńō 2 -ū÷»ü4Ģ<ŻłH>ėööü4ā$ą »ÖĶń šc"žžö;Ķėė)²¾ž 驳łFīų#ččįéÖ÷Ż$ü,Ū ÷ēģõłžėźēņW½Ļ ŽŅ*C<ąõ+ ż õąŗĒ½śīVö$ń'Üü 3 ):9Āęźē(Ņ''üµ'įę Ńź"ļ<C ų *ęśü 3’)ēäEåė%“ć Ö’,E.%żŹBā¾ ā;4ģFÓčĒųģü§üś%ŪEߎžŲžłųŅśŪ²é å„īžš¹/+r)×ģéŃÜ*ų-žśł,"'  9żģųÜ>! ņ5ėĀ !Ģ®öėŪģåē4ŻæŪČł(/8Hąų#Ś ūU ÷ÖĢų$i!ĻÜÜżš××ūEžā÷Gź/ż E7ķĆĖīóÅK(Ķņ23Źõ ķūłėŻłSĶ÷PŹģ*šÅ ćÄčę(÷ ;äģļŸ«éś ļäÖ³ąź+ģå,ŁUÕ hl'S ł'š¬ üߏö)Ķ‘ūŁś ņį4ńėækSļEJŪ# v’ĆŚ—ćą Śéęļü½Ü(åE’P .čēMė÷µåLģż¹?ŁõFņ)»S0üį ęń ģ &ķć“ņÕÄśéÕźüŹD.'śź  Ā.ļķ`ńļÄāōü ŻłĶŃžŻ ’9 "Õ ,żłü4ņų ųśåļĒ*×: 0 æų >Aō%¦ĀäļEń4é ń4÷#č½&š"$Ę%ąÖ3» Ū÷ņčū.)²ķó¾łź0Ļ))ćŲīā§2ģāųŻīÅŁļ )é½(óšĻ €ī ±Õ ’łō!÷"ćō)¾ŪżÜ š!Öļ¬\@üÉŃŌ8÷¹.ū ę"³žæģåßĒńōö'åĪ 2čžńų/ń+Üłöį ļĀ÷ųךńČļ÷Ōėć5ÅüŪGęóß:%&䵹ĖŃļāņ įņ;ęóš"īŅ,é˜õĻŅĘņÄłéöŲīńõöŚężø)é0õß3ÖčĪĢŚ ĘūīžŚēĘŸļā÷īĢ^ŪDµäF Öųņé¹õóų“ÕįöüB÷7īŅčĒāčķ˳ęĶŻ ŽåßĪóīõßŲčĪ/ÓńŽ5łō'ł"掌żłŌ »; % óšžDŽųįMÖž /ą# ščī.Ü%#äūŪLœż ķßŌŲ;$Ī ģéąźõ ģźöåłäMÕźńż’čŪū؉¹öą ēĆęēļVöšĀļéĮēų -įłż.)C’Vįóņ 4öščD ūęÜ’&0%ū’Ź×Ä,#ĀŽõŃäĢ!ęGį0śš'ę!ś ¼č Ķ÷ōĢÉūŚ·²!.?Ūó꣚ķė^ ēö5Ū+Ł !ū#ōó ń Ž)ż­śėŌėāķų +ēńFāŹčŲ× 0¤ ō;Ę’ FŃå 5čūJūńßč-éßßīüÄĘףéŲ¬é)£ŁėĢ;%ŸŁ ¹ÉåąÖųÄŽŁ9”ż’Ź€Ėē ßżė;4ķżę ) üŚ'ź5)Įāmšāgł<ŁļÜŃźŚńćL?åŽŚńąĪī öWżŌü2ōʹh%āĘ’ŻNčĮDķŪÜѰŻŌ6ē óŻś”,Öź9Ü÷ņņęŅČ <ĄĮ&ėĶćģ$+Z>#ėī÷źŁķäųż,@€źéF ąÄ4ŽĪC%ŻīŪžæł2ėKę³ļ,ś,1ŃõŁń' ßĒ,ö2Ź;åų+ęÓīżó ķæ>»÷'żÅ%óéņńżüŠśĖž /»čéōĀ gH÷(Ó±žÅ' CiHŌYß^)Ö>żėģ ę$ķ’ĮŽŌ7ś’ž Įė< *@! Ę)ēŻŽźōóĻååU³īĄ ļ×Ėėżė+ŅŻĆūŚŽĒ &½ ō"ōø\ö4õ ū" óżŲųœQ¢“÷ķęćž'ļė "ļ÷Mż4Å żü£ßįß.ć’ś`äēč: żńł6ÖģĒŪŁ AZ ķØÜ’#į)ÕęŃćį 3Õ2īóż"éž*$īłĒūéßćšD ­ļĄ Õ$ēłėÄōų8ąģūĻ Õ7ć„óą0ą&LŅ'žŅŲ 8 ö  żź āģń ­Čń$’ŌŲģäŪČłņąŁ ē K’Įś6żķŪ'2ŽŲłĘ ņčhųŁC1#éŚ%ó Öö/¹ńūįųį ÕŌ)Īų25M08  0’÷É ŻKžéźÓį×)ńķĀīE-Čša» ö ĻŌŽŚ’ż ūöĮßį»2'ą÷*Ż%ĒģĶåŽ7öėÅÅė,ė4ēŁ/ā€ķåį įßśżųČč(+ö ļūī×Čģą’ Łāū/ųļäÄŻ’LŁ,ś(äęļłŪ%üž?ĘžZōŠ×T**LļśŻ#ī¹żõõåļW#š2ŚŌč-ß'ģęń ¹^%š: Ļüõš’6Ŗ,īč© üöŹ Õóėź"¦‡ŚČĻĪ#Æ4æōõ„×ģņśł /2Qśćߏ~.ŹŻ 4 -ņŚ5žØā łßčż7“×#śfūĀūś)$ Ųų®÷ÓīŃZ€Ā%ęĄĢż/"Ņ Ū2įóåǐĆį-Ū šėüęŲ8 L.öö+*äōõÜ-ÜŃšśųIĘļ ęA98āŽįņŲR ϵõū ó÷ś óžź ÜÄ鯏ó¦16ī!÷ó5ŗę3}ū^’0J0TņõńXīź ū®ųķ ,ÓāöōÖ ĖÅźŚ'“Ōóß ó *,ņ"źØ3 é¹Ń/ )Bž$<žōóź õåß”!ńIö~%>*üź[×ü Ķčį©r A,'ö)öŌēČś – [æ,¹-Ńß /Ž KŹĪÜūń­ŻéóŅNEI'%åÖūÜŪė¶'®Š=ž÷Šßūā įĒĻüE$×±5ļ%!å4ļŲż4äéć“Įž`üäć<Ó»āļļź=(ą Ü’ĶŽ"33ś¶Ļč#" Āųéų'ęŗņ©÷üÕ$’0łłÅģ č. öņŪųŹ.@Hņ)  !īÕ[ ē žäų¦żģ.»ŠäB %ÅŻ ė4ņI! €öŁMQūšäĮłāņęščęŲń0$źšõé%6ßóą7üż(Ś,Ēūæ&  åśõ !*)øźA! ī åĶš äåą’3OµŹ?Š-füų%Ä$’÷’3źžšŽ)ųœõóč,#’ŚĖ$ååŁžēą³ åģ)ćÕÖÓą’¹0ŪśéŹī!-ŚŽćū ūŃüąńņśŚ±Ō"DįN‚ž Ō’<åčŁśĀ¹$%ņ/ęņĢ)!ļ øčGłÕŠó ›ėįQä ÄüŠNą%Čłµ#ÜęļŪķŁėæ'ŚO÷īłįü Ķ ČīÖÖ  ę&ūćÉPÜĻ#äö żšķŠżŲĶ ņń£ņG  0Łčė× čŻĶö÷ .ß%×ļīī=ü -A³ó šįåŻ@ć.’īńųę(%ž$čśņāY%*Dłō÷ Ąģńģ$"é 3ÕéģęųßžÅŻ%ĶņéÖåJݰŅę(ģĢłęćć’Üģš æ"8öó Ż%źŁ(¤ćēĢŅūåż »lĘ)"óēŲ)ińĀ Mń~Ųć0üųŪą?Ūē=ż¾ļńµåSŠźī’õõ* Ó:ŽļĻŖéł=ö¦é!$ŲŻ-łŽ ż'żśÕ`ųć@.(R’Ф/Ųų ÕßōŲ8Ü Ņč(żó;ÖÅäi-éžż:Õ Š1%ńõ¬%łŅ#ĻėČéĮåź ģśüžčāņNĄ"*Ńų Ōćų(ģ2óÅėßäß. óŹ%)%¼ŽšAį:ö'¶BóŚźåwć4āīįåµ" '3äŗČė©ėļķÜņŻż,żŅźŹŻ0Rļć S*ÕCūļĒ9€Gļ w&4ß«^ūŻ>åø4ż’żųō³Źļ×÷żė3)ķ6 #īūöęÅ ŲĢū*ü5 5”æūėźńčĒłÉÜÕ¶üŹŻÄ9ń ®×Įų‡ģ!ĻŽā3#¼åš%ķ ŲŚĄ¼’¦Ģ>ģąūéö”«ę ŪēČ ¶ņć¤ļū ę.ł»śūEī1÷į!¤AżõÜ××GęYĻ?öčĪī6 Ń( ź0ņū˜ĘłÓĄŌNśHłņq$ŪąÉķŁZpÓŔ2öéĘšéĘ ń7<÷/×ēłåĄßf'1 @ÕīēōĶē*ģ×U2ļEī3ņä÷»#.N õŚ&óD Ģ)„%öŁä.9ūź'Ń łQ.÷Å’ĄŲ%Ģ ł¼Ķéõ3įźĪĻÜÜŌ1OÆā.P] ŁĶżļŃĒųņčĻ5Pż#šŽ$&ķżųóźŅ ć÷’Ū0ńäŻņü)¤© æ&Učü ÷ņ ĻŪŻäē.'ŁčēÖõÕž°##æ;åĄ¾Ż5ö=ūžµĄćīųä×Ļžķ3)åŖś×AåŠŁņ?ŽžŽłN¦ų*,JD€ĮķŌ Ņ,ōšŠ²Ā5ļ ąģ9ŽŌć8Ģåņ™ =łH(ó%ųęcģ1%JČ'§ÉUÅ5…Päū1"žņ,?īÅįöØ„!µŹś33ūÓßęŠ ō<÷Öōńģ*Ż$õżBęö×ÓłśJź-ÅG©·=38īŹ  Ää%ų8żĢž å ēŠå ģłļ5E0įÕśļż öāÓmėų0 čģŻė éļń&ŁĶÓūÕ5½ĢMĮłģ+(ģė?Žł#ž>Ēt ē/ß6LŽ%ģõ3õįk¶Ó KJŽ Ļå,Ż8\×čĶ6üG>ó ĒŽŁŅōįśįžČĻĘ€\,éOUöAźņzÜ%Ę/÷3÷Ųėų&Ž»8=ŲÖ=šōŲ ė!ūöėßžÖ ū- Ōņē% ųžāčł& Żū#żś ĆŚóūK’ķ ąÕłŲ×#Ł óÜĆ×į Öėęģė"ėł ä#ņÓ Ö÷üłö-ŗ:ō#Wł'ķčóß’õŠ ččķō>Ų¼Ėņļ=?Bä¾üßŪźE’ŪģńüÓ. öŌ»ńąÜ²!ņÕéŲżIęŌÕŚī ęß1×÷śēÄŹĪ1ļ&0ģ_ļĘŃ<źīä)"Ņ#¼ß_¾¬€łźę ņģ1"äĘ’BūōĀūOļ ƒņ.Ńō#Ӟ'1=-MąüHīJąA=€ó#(łęG@ĶžĮųšŁķm:ģ1A#Q$.éżźß'ęfø &1¹hā.Äš~ķŌį2Ó,ńąžßČF’:ü ›(ÄŻ#óYŅįżĆ įÓ ż ļŹüųÕżõŻšņł2ķ@C/ōþēUĪū ×6€ÓŲ ® $š 3ń1ūą iŲ-Ķ ōŅŻöÕćöėŸ˜Jö&ÉŁ’(ū;kŠĒ/üzšC%ü ŌÓēǧÄ0įéÅōS©ģžŖžōÉķü{ēLķīŲīŚ!ÉžĘõ Čéß$żž šŁ÷½ę=µ²%<ŅPē łźŽ# !öß:ŲҤC5ź0aŽKĆĀē ,ć ņįųÓėĄü®é·śń*Oļ"’ųłōżÜ5§Dó»JÓüÕļÓūéŹéE*ā",²ĮŃ9ń$üĖģ&I¼ō3 ēš %ĆŅė¶>’I ’ę,õż\īķž=ß”ś ĄķiéNF$[Ņ 'Ų õˆ ō(kķó¬šaŚö#ó¤ Śį-<ī8Ī8&ØįK7 żėļŹž÷#õ äb½ß!Ōóü§čö’õõŚÕ*Ųń½é  Nõ>6ŻčĘŌī óJėĢ!Ģž&ž Ų žÆ ÷ż,óŃĖĒ čć/)īēßšāŌę÷Īīų2BÕķ-¾ŁŹęēČäŌū$“-āF&’½ ĮĻż’ÕŲŲ  šåCÓ4 #ļöź(ŻžŪāĶøą öÜŲōō Š%$Į(ū) ųIż õ Ł Ņ"’ėõüäė(.źŅį#9Å ą9+šÕ %ģÖų%&(*ų• )śó&įŲ©’ķó źģōįó’*ł69ēŽ9é#- óšż šō÷÷:VŃ'BĮėūśŁčüķ0ä%¶ģČYżš ńė)÷ļ >÷ ēžŅļ±äB é ķęAÖß 5ś7ąĘłÓžśóæ,ŪÉūš% +»¼ņł ÷ž!ėė ÷ŁŚå ΜÓäĆššōņī!Ūõģ;ž Ežį$! Ū5’ōü(:H¹4ĢäÕæĢģõ,įŪ.ą ŃīĪ. źźŅü&üõä07Ā'Ų7fč²Ń:DŚåןó+ÕśķūĢ÷ŃŌĪ’ ó©łéņ%ū’?śę÷9ĢÜ &AH ģĮęķ×åÉŪ įó.żńäö&Åų  ŪąĖŻüŲ3ĖźģŹąūž ęOé^ūLł ŌÖöśųé'-śīūĘīĶśL 4üņ’’ć-õõćĢęÖµ9čų×+Ųńłūdü ąBėóA×õøé®0Č2ūģ×ńįq' +( /%Źsķ7.śLķ(Ō&÷«žfÅ’Żš .Üó źÓõūņ:Ūś(ŗčżöA,ī-2)źé,ļō ļČlōł-Ż#ŗXš”ŽŠ1åī/ź5ß<š!čÕ³0,Ҽ2( +9G'8*ßćß3"ł÷Čķ=ŚśÕ<łģ ųHź" ęģ' ŪÕ łīÜ4 2dū2ķ * ą šŁBčŠ3®Ł)Xė*PśńėBõX!9 +&,ĒIķÖžī:ć4¦E.!šü/HņöĄŚĒŽóÄL­éōėGUń Qčäm$×ļQģā ¬åó-ŁNŽ6éš²'÷ćdŅ9 Ä*ļ?ßģ½A4š$ś’Cō ąĢ4%Ā(©“VĖ ÕńžGäēÜ%øąįū9żRķ.śźG+Błž4WŪ̬)8 Vųį#įś'+š€¹—ĖõĪśĪÜXĢ Ėłų öŲŌĒēĪŻ­Ń.ó8¤ūK%$'Ł!ōō»Ę<'?.ęHTģąKŲ ė:¶7Ļø ųŹüų8Ųõóóšƹł-ĘŁ?ž;ž'īĀĄńįś· !ŃN õõąĶĀ*Ēččj?3÷÷Ē0*īšŠżīŲ”-Śčõ&üżž÷.ćōč(Ž&,į!K é3,öūś č!ōóü#ź# ¦Fēö1Ļ*ß.ī²ø÷ 7¾%č"ąž86ūWÜė±ŹéK1¹'ūīāšĀā0Ųāųō ×Ó(éÜōŠ>ߊgŚ÷üēļņŽŁ¤9° H2ųāķėļ üś;łū/Ła³į5×GśĶ­}ī(xõ0õļ SĆą#ąŽģŁĶøŽ^Ś 9’ ē’ ēEäčĆ1QęłŃšFę-öŅ#ćūüóō "ś"÷ćä"óčõś.ńĪŻü׹(%dķČ JĢī7#Ģ!%ņó šÜšłŁūü'ó ?)źō!+Ē©õ'żD śK#śż&įöōåŁ 2ņŪķ ķA—ųņüCÜļķ$óģĆ#ĀĮē&<"Ś7š©óĒąŌ<;/@1čąķ[Śė¹ĄżŃ'ėķ ÜøśØĒ'É%+ńŻ"h›ö&-"žū( €3@ßŅ%āćq,F4;ėśéę.ćøŃĶßźÜ@ µņÖ5ėļć83Šńō ž ģ ŲŅ éc×/"/üżé Ųāń­ĒDO4# ėęčŖćģ Ó%Éżķ6÷ĀügćęšÄ;čįåų˜ń õŚĢ ŹĘĪŲ®Õåčå,Ń6łŚļī(ł÷,Īńöųó¾ū%ŲīWŲÜ1 ’*Xļ"ģÓ() “3ą’+0ä żūēł Ž’9Õ%V+åĒõīį¶ī,šā-& łūļ ’āćķĖų¼Ī/Lė)-ŚäĪļ"ā«åż/ą5!&ķń$- ģ, ń,ē1*čåĀóņ$¤ ŹéĪĘõ Ōµ øµ-"ūŅÓ,ĻųŚżū%× / ;é¼*éżėŃżą’žŃŚżßńŲł,ŪžŌŁ.įÜī4; ļńŌ&÷ čŲüłńīć)ÕŌ"Õį #šŚ[ģž9ó“ō÷ó×ć/ ŲóŹģų§ż0.F÷ķó>Åżė8ē%ī Śģ¤0 Š!ė’ų×; "Ō Ļē·ńōażõŁķö&Ųģé į8÷; Ēō( źĘÓéķóŃō!šŪį'(ć1 ēä¦hś'żžļÜŲüåķ÷_3Ųč'óų ¶ęģąŁń%)Y’ļü’"Ą&>*/ø$Ö ó’%ļķüõČāśE¶ŻöÖóĘŪ&į0žŚ5éåÜćÕéųš1į¼Ē ć,ŗŚæźō% ÜŪ7ųõåĀóčž5īŪ  õżRż ē!ėö…ŌćOĀō ¹’Oļ ÓŹŹ&ā* ŻeŲ ń)¼ēĀ"ׯ֩= öäņB)¬šĒFō¢ź)#źÖöF/ł¹įIš8ņ  IŗāO˜ž,ć<ąémŃč/Ž7š»’cžŪÕéžĒ€8€Ī;%÷É@øP—ķäųį}ē`ó ż\=÷Ć ÅŽÕ-/čŪą„ü!ĢųĘĻó.ūæaß!UåļÓļąb˜Ųģ6©FĶŚłĮ÷9kŲĘ éż*‚Łä€Ł.Jłļ³ģŚåüīy­×ŌKQ9Ń`Š'0ĢüŲįöų€€ßĢ ķ(ł‘Õ›Qļ)Ž ūó  EČgāŪ€ļŻĻį2X÷Ś/śÅWķį€TśGBߎ"żG!śŌÓFŠŹ3Šļ ĻųwÖĪ'Łņ9ģžŌŻū  ĒūŲ+ÉĢĢž ķ÷BÖ»Lć#ąĄžåšŚ’źÜœ7N ÅŻ#Āū“4ņ Ų^" ųų*ä°@™ ńĖ%,%ų J éż¾ńģ(ŠŁņ²*óźżźłŲ€&śž9Tõö'½É"4ŲāłÜĖ7Éžåč)äēū䌿°ž!õfĮ1 õĢćńļšž>¦üŻžģ #»Öā;ø’æøčžłäżĖĶä !ņ½#Ażīž(0/ł)×µ’Ó„h&›ė.(ßSĪ0ć Sķ ĒGū ¾ä#!Kį×óé€ü"žITõāŪpåJ ÖꊹĒĘś$Üņß šŅŽÜėåóߊŌĶ2Młżō’OŅ 28š+'ģ(4 ;<ėś$æ0ļ&!ü'śąķ$A-ś·ćļĖI ΰ Ałü?ķĝ Żž(DīšĖżŸ)T9łåšę¶čłEóāŖ?!žčŽ £ć š»Üū"ČńęóēĻī’WŌüöŁŁī¬Hįņcęõūų?AÓĀ)äēĖ ėņ+ Ż6 žāå Ļūń* ĻĪłÅ+čģóŃMŁńü ńŻģHĢÜå ī$ö ö+ė!# õł5Óńüē+Ģāaīż%(+"žś čäųė+łßåĖŻž¤üż ī’ņńė)’įęģ ó2 üͼņł ńźó ųŁæģ[łyܤUs"’<Ś'Ü5>ą÷Ė«yžń'öŌĮ€$>&Ÿ¹ėOé"ßēųž·ż ³ēĘ'ÜH¬‹ł33ū)©žAcźżų7÷ģö2Ö¶-ę+Ćć7ü.,3’¤6Ųé-żLöŲąź2ōķ0ūĪ Č8Łō čõčŹŅģī ū ĢČį]ŽäéP@Ė_éžō@āņóńõÜ׳¾į¾ķõ ­žŖ1 CöŠ]ļų³NķĮžē.5óš6ŻĖ!²ų­ųåžēŪõāŽ”żš“ćĒī× 7¹?; Ńń·āżĶÖĪõöś óīųół°š=śģėōįčĪ æ%žüL)ÖNėīŁ×śęÄõ'āÜ/ģöŁņÓńŪśč ųK÷ėOV#ž×ė;ŹBšFč/ķśÜęĖčū ģā2ꎒū'Qī4õŠŁ) ÷Č" ’ŪöīķĘDŁ.×!įĪß!ĶßĶ5ģćåö2į’Ī!¾>å ĘœŲ įV54Aóüķźų#/ÆŅąäÖš÷łĻD4łæüļJć# Ö>īŽū .ōŲ@ėfé½/ŅųŪėų$«ē¢§ !żÓĪDcńMīõwGĘīģ-šēćéŁÖūęīł90žģūćō(Į¼ī*ü ĒļŅĮė ?8ͽ%Ķėé’Lģļ·įÕ-ź $åõ?ćĻögóŪ°iöTŲiģ6›ęĖĪż#=Ż!ōõś’ńų%Ž”!VFĖ įŃ!Ś+ųĻóų™¬% ióõ+!ń‰rźŁōüĻŅ+ńņēų²#E—÷÷XżżõŃ,Śžøŗņ#Ęōį¬_§ś+»DüÕŽöīä¾0Ż9¾>6CFŪ&U*š9Hāžöņ”äļņ5ņ· ŅłšŠ\ŅĻŻĶĻ/Ųķ!Ō ÖóL)ż²Aģų9Ÿ ’üūß ö<äżóEóÉ3 ü&÷@H÷=ē÷śŅčöš'×÷ßįøśŁųŁZōé’;ż“źĖż(×łŻ³,äŌīś Ēżūżõē Ę Ł’ŚŅ' īüŁJéžķŪÖšćūļ&ģńļBóääµ%óŪ&.¤÷ķčļņ="ōļżõŽ’Åļļ Ņ$čAč,ģƒįŃ!0 ÜüåFYõ%½ė(Cś[×ņŠżóń. ’FķęĄįVŌć/Ń ŌPŌh Ś ’’Ōŗ 'Į!ųŲæö=ų óÄ! '×Äš# $ö¢Šūżź3ŠŗŗÖżąā0ūžżÅ%0ŹŹ# A(«³-öł 1Żē/ž& A#č $ŃĖķ ))U.Š! ą6ß ēÓį7Qoņ čü"įžÅņēö óWÓÓ L$ņÅņēåć8ń9āųÉź’÷ż!ńŹ7ĀńłįŅ”ń ^āņ†)„ģüī3ņ2łėäųK³UśŚģųäĆšī:ū­ 1ČÉÜ˾?ß īĮ½ūöü’%ļæ$łś(» ššīóØō)Üł’õÖÕ?üä? žåæõŽÄļ×’äĀõńĪśō\ęų„ŻéAE(īÓ+ī żÄ õīķѾū ’ź!: āĶ÷³›’·$ļš¹čŅßQļ# ¹ććšåaćA éL¹ō+$ųŌ2·Žõé=?2)9ĀķÜĶ"ēżļņŪł ö÷ó½$HĀ źOüX8ć½č|"šīŻ Ś’ÓXė€5įų%ŪjŲķ Ģūöīó°éåZ%[)Ī83żž8ģ °4ź×§ņåēļ1¢śõ$æÜń ėßś:ĢßÖčń Ńé:;Ēæ9 "Ź:ųŚš2üžÜšżæõ łŽćē BļģÕļņīū ä'š»ŠßéöŅöBĖė4 ėōėŚżĄÉ &Ļć ŻłčÜ *ģŻūėąģį+ęŹ$ķ ż! L÷žņŁ Ņ źń÷9ūŹCÓ*āżéÜ Óßķś?żłūžėK­,Żāó÷ēć ńāŚ0čÕóל ŗåCéü(5\ė Ė Įž śėSżšz ńÅL÷ŅĒ÷Öģé!¾Y·ß/ģŽåŁŽįēīEµ ø.óļšåÜéžó“ÜüŹšŲ.ŖÆóšĒ(73 Łż+äĢčå9%Ō%÷ųJ@ąłīööų ģŌŠRŽöŽš Ģ÷õ#;:ī/!äÜż üŅ4Jż Ž 3ā"÷ģ]+ļĖŠ×lŚTĢķ#ū’Ķŗ"’¦H#óņļ= =ææŪé5śčŲŽŃÅ&öpž& Öķļ1īć:ü= ļfĮĪ[¾8łų ÷čõ’’žŽŁńŠåĀWó‚ė/ķ"å"ÅŹĻšåD( ¾ö¬)šJį,h¶žéLõąöĪ øųōÅ !*źć śõÜ%@ō $:ÉT ā³ėüŁ.śžøŌ šāÉŃ'ĘžõC ė0ū'Ł®Ż(ź,äčć8ź6ņŲ × žČM:ē“č÷Ź) ÕüÖ¼Īäē(ųŌ9ÕŲ$ėčņź8ė> 1ōfųüį$46/ōŽĖĻŽöė}&6’ ķ’ā *'ß&īÓĄBĒāϾļó ģ Ņ'ŽÜżŲ8) ž³ė7) .ŁöČ8“’ū³åpńŚŚõµåļąśõ(¾Ć.4ĢŻŗšŻŚń–Ź÷ūėĮ#5ļeįņŹ żłŚ ĀõąšęéŌž åż%õŹ÷ņūŃčĢ+÷"÷ "ŲtŽĒ.ÉSöīš čōŹó¶( éÉüłčõ(ūŁī:łĶ '˜(ūV–īżčöŚ!źœ4Ö kńė-ōIž5łü")Óņż¢P÷Ż)-šś µ'ł0Žś) ¶łłĶ ųøØž2ŲłFńõ"Ėčåsč-ž·) ŅąŁ ņMÉ9Ēń43īķš@QåÖÕVģ,³ ÜŪFŪūI)#"ūm:§Ōfóė$W,$X4ß×ÕšŚÄš) ½č’ŲęĄĀ9. ež8įEž®šś^ĪÓ2$; īõöBõŅ. æöÕå³į=§ķ 0%}ū.āüģ6įź č×ŪAMõī*ßąē)ÖÅŻ4öķMļąŽ£14ś0NęōńźŪŪņbµō ;ö_éļŅ$ĘTŹ Åq$6¹ö%½© žüń×(“ūõ:#K)Fä>ģ ÷ČIżäņōšĻóų½ ė$<<ę ż3Ļ3г÷.żPŁ7Ę$7ŗźė'!¹Ł č–Öåłó$+ źģ;ūõ5ķžŻńĢļ ė &ģåż¼Ų7ī½$ü÷źågĆ9HÉ1©Ų,÷āPŚõĀ:!ęŠī÷Į $ūžāīł"× łśūź=źéģćOÄ&öžŌ  .·ßõüŪĮī,ŲŽI# ģmłł Öų čöīųóÜÉņõ ģŲ×ó ’" $ū#Ų"ō5äżüčŠć×ņÖęī&ŽüĻķ;üšžU&éąńó öćīŲļķüüé3+ę7ńĪģļß€Śź ė. ĻÆõš × ²;2ųž!žųžŁčūŠŲ Ūį ßįę®ēū&ķĪČį¼Ū "/äŚó !° ćā%Žż(śūśīŲå%0ļĖæä2 :ō čŽö ęžßŠč÷į=ųńź(ŅśęŲōäė)ŁźOōųü ÓKīÅķ3ö 3ék×õńää &Åń üķåńÖ÷ђ.łīęÜćķč’ #$łÕ%ūQš.ŻĻžō!$ į #ųż*éŲņļłĻ4zž Žäįżģ:ņF÷ųÖ÷ .Š+ĢčĻ ó2#ĀŚāŅė߯ ;ŌüźīŃŹŌńū/Ō, %.õ10žāŚÉóā$.Õ'1ćø?ņūļńČćVÕžĻ ēšŁņ×č­3F ł ģ’ čö6 ģ(Wł<+(Čń“[GŻĪōŻŽ’ŃOŠóŌs6śž!*š™Īż , =.ē!Aź;üŁļU ŲķóēÜņ€čČ$ēč.Ż Ń īää$ß)UĢ#ä÷ÜĒųĢ’õ&ą)[żīÕ$čóž (ū(õĒÜF1&õŪ¬ż)°AŃŽü,š@#ń$ CńüĒįōŪć 5[22ćęŃ@^JDš8ńłīĮõ ņŚņéÅ Ō5ļ(åFæ” VMC %ßüķż7<€łÜ'ī_ąę¶@ é Õ įķÖ ½ļńń!ó-źńžĻžō3#ōÉü"ū÷žŠ ĖåÕžć˜Öźžįż#źé $šžĄųä!JŻ&$õ ēż 5ņōģż "÷žāų%ć)Ń ;öÜ(+éŪü’Źēż߯Ņ"FŽ-÷ģūÉŁ.÷ "Žöķ "č ųž "¼*. *ęąčųüÜ0ź!ųęōō<ą 0dėłö.čüŽźÄ%"÷ ž ż!ńń*Īß×ęšćļķüÓÓē‹ō1ŚĻóžÕ9Ę’õõķŁćü¾,ąPé"ļėąäēłöļīīń(äāĆ ļżāń÷ķųŚźźåōóRžFڳ ąśįžĖ öŲėźR6ææu€ #žæńäŁÜéŠįķĖ÷-!Ӛå ä ūīäł’ģŲļŚłūĒōņŅ M įŗģ7żįXłŗ)čš>Ż÷ßęõÜ7§åŠéŚāĻÕßõģķžFחĮų ó ī" ’Į÷?_źčA ĄGZöėļ÷$żź4ś  k:8¤= 軚Ó$ž Łv ŁÄyI.Żg”äę-Ķ×ģō5ŠčBŲźQ-ń%Z ųųć8 ÷!ƒ’öUī čõ˜"ķīä“üąóó?īŚäõ8ļÅŃŪ"&UģźŌ°3%śŲkÖÖÅ æŁ2ą4óūä2lÅļMSó Ōóß„Żōūžėęź’ 0čĘf µü!ĢÕÓ(· Cķ!öóč Ī厚ß#žęõĖä*IüŠŠųŒ#’ļģäoQ(ģÜMę/ėėø 2 ėģ"(µēčŚCD °«ŁģńÓG åå’ ē'ų (ēļīżĻ>ņÖĆæüĻėåµ!üģä64Ķč$Ū=GēŌ łÕźķĄų ŽńÓŹ÷Óöõķ IÅęņK łQ3Āō65 Ēų.ä-…ÖŽÄłķ­ėÖ#ŌD”Ś[¹%žīóm<ł«ēū’ąJ<">ģéŽ +Ł8ó,č0ųēE¼&pŁĶįßóŲ =ŪyńÜ×’0ēéQ¤'Ł’VųńŠ ęŻēć„Y/ č$Ąķü-źč`ü!Ąļćśéķ@ź Ä)2×[9ČĀ$Ē’Ž'åõżķ"Śźž C/MāĒ挣-Öć$Ćęū:ānö$·± !@Į 'Š`äfå›åŃjžēßś(-ÕåōņÕßęęĶņ÷ßļ.g×ķ2Į'ń̹=;) ))É ¶Łē»ćŹķś5 ]ÖÓģ=’ščįŻ ŲŪś4žōśÖś-ń )ŅśėķįA¾$ōöö×čõ)ū5ŃöĪüś»:§źŠļé!§)-pś0+< ż¾ūŁ$ī%ŅŲ§YĻĄ0ŪŻséæź(3+tؽ%åƒķ Č?Ż€$óÖś„F āįŽ Zņű%ÖÓŪ žÖń—€#'ęņ+ŠQąEń¹'L'čńäFüę÷ŪĖóūöžŲšÕž#@Hé!Ó3æūķOų»ŗó::2 īŻ(jĮ9w ūÉł@ųGģŽń€š>” ó"ļ%ģśĖüÓŽÅ1öżżī5ŠĻėėŗšėļūž+ķń÷łÉ¼ÖĻ ŪŚöŲ+ßšóÅõøäłē('ę ē$Ķ(+ ęł.ķ&Ģ6ė/ņäųĮ įē·+źõęūņ7Ć’$ė.ł/ė$½³ū8’ łõń’-źŻ 1īćśķņņņį,ļż AģĘķū Ņģ:ēżśģ"’ żč".ä$óūūōł$öųŚżūÄ7ä#ÕüäŁė³ć³’’žśģ3’“üāčӀģā ģš%71TĢŠźņļŌeķĻ 4-¾’ó6Įź¹0£ņĀĆņį'Äń’*ó#Äüńüļž'ėū-’KZß>\$Ńę79ūĘšäH .Sõ’ķ’ šPAĢ*"üDŽłÖ2īIōĆÖė@å(ĪŚģ’Ķģ&]!((ŲŽņæ&ķÅžAOļSŚ ŅÜųߥ-Ą%$ģ03^ķęš*ę4ą!A Ż’Ż’ ūŹŌ½ē³Žņ*ł.8(>ŁSåöč;, ńīš+Ų ŁõČõŚ’ś¹õń%žēXõõÜŹ hWųŽŌźāĶ eš *0ĆäūŌ4–!śŲŽ ń/Ų$óGś*Ńėāśźõ0ļĮĮūśĄŽTßĶ-!cōį+’÷ąž$īėߥG<Āéį Tźēµżźž$"Č × ĒļĘŠš"”Ēžź4īūšµ;éŌ4AZÓöšżÓ;żł"Ī!ü.ßEą„üõt?€č+ąš"7ż#'ó¼2ö ķ]0ėõ"’ź ¾¾Õ1’ą9§ ÷^īĢśīĶśŪ&ŽżIś#&½#+š¼śB’Ž-ģ į°ĪEžāųHćÄļļŪ'łÓņūżō% ņ+SIß÷Ē*õā&ö+ėŚ ķžÅå/×¢ŻĆģč0Żć×LÜ+ōį'ˆN:ī¾ūĀĮ$²FöĮŠł¹^ö āšÜAõēÖ Žż×õóćÓž6*§äņ@¤öI ļ&ļÜŃ:Ļėč4gĘõŃū0¾ńG’ö0ä&PŻ!āŖ-9¾« (å,ā  ēĘÜ7åĖ’ŃśöSųįĒł4æŃ !Ļü(ķ"9ņ)Śź¦óÄūó&ęõΉŁ* ŽŲčē ž7ÉÕoĘāįær—žøPCØęFÅ#ŹŅū.ŪžŖČ™)Ū ų€ Ūż·żż9śą…ćNčßNžšõ ż’č…Ļą +ń“ü’P2ö$ńčFž5­©ųļä/"żłĖLž('½9ķ$% ś>ā 9 ©ōę2DļąõCŹń8Ä:ŅC(#-śJņ1čŪńźqĄąhäÖģBĄ¼ķéQęī3<ō?2ÉźÕ¾ņąSø«ųÕĒÉĪéäŹ = 5ĻFīńä,)Ü-1„ gį+ŻHåīŽėĄž×€ščõ‹O)D€CUr õ°Ųāö,čōP­ŹżŹ("5żżFč+$ŅϹ 0ężć%¼<ßąŃ5įŪ ėč%HōąšVÓåŻ"’’ž"ŲŖźڤćč+ōśļė ł¶’ĶN(ģk" é' 6!·ųī Ķ3Ļgņ.ÓÖNŠßE½" ķĀć2śõĪ­ųüą%±öä*ł9’N Kō5  våŃēõęPõē$'#Żšó5Ż2DČ2'H(Ģ.Ė=×ń’żöęšńåłõN!OšżG ×ģĮżßņ•’NŌ:' öRł÷šįĢäęķü éœ>0÷ūĖŹéö'ū1ūžńōČŠńŽW)ķā*śŚ’÷±'¶HO)÷%ūü*$ ńņ/ךņÓä ļłI69/+ŲŅē1÷įų/ļ ŲūO=B  WĀē.ŽšŅä*ž Ž!õĶĪÉå2ć>ü€õś9÷čōģ! źx½3ćAŹ>1Śńū’ę-üęšōw2ģģźFōó1 €ąĖ4 "«’•ž -Žpé“q^9ŪōåXĖ÷ŌåÄś(óą õēļ?éAŁÓ,:^ź/Ż:č+(į0ĀŁęĪö ņDŁCż•ē6čßūįū)’V&ī ŌÓ÷’7ōėŪ3"ĪĮ'śō%d Öų÷ėēH(õ-7 !)Ū/üžÓčßĀŅ’=šÖW’ Õł#CŁĄÖžž *ņļׯć  , ń„Ų×( åŠ9> ėŗµ7É ö Č?é3žåīņ"Õ 2ļćīŻē%āĆķļ@Gā£ń’=#4%ģŪÅŪŲ.éé—$×įĆAł$(.½Ņé.ļE öŌķŪPF:¶ō±÷ā·lČjŲW-Ė˵H ąćA×ĆćaĖŚ€#üD{>öā'ZŹ[żĻņč#7M€)V p .’æjś&ō*Į¹\°åC€ŒĪ×%­’ŸŁ×ēåÜšé6€% MŻßĄÆ¬ÜD ?Q˜4Ŷ' dŪ©ˆź‡ŠŃTÖõ’Y Y~6īł¾į₾ēÅÄ—ÄI€ąĶ€·ČģŖÄ6ķ€0ļ2ś4žōż$ĶęŚ åÖųÉš-śėģŽŻ žžź ößéé7ŹżĘ#š÷žńŅÜ?ų$üČĶŽ(õŽēś  łŲżź±äå ūĖėÕŽń%¹ö#ŁŲéÉž Ö'F Čļž $4ž!ąļ öūķāŚ+ó0åĒÕ' ųŽ Łņ øŠŲčė/ńȁ1ņ"Ūå÷ģąĆóØģ„čŅżi/ż Ä ųõüįčöŪā.ٶé¶ó2÷ś"ņźĖź$Ī.Ÿ Ō šō!ģŻöęŌüį#š /č'ūžöųąńčOļļÓ- ū CóAõł5žŽģóܶ+śŽ ņ9Ś÷’ēČ;- éąü¼.ū ßč,ņÜ»½Ż ü#ņ$ŃńӖ) ė’ōķŚé.éŌÅöōß%ś.č`ō Ē/$Čń źćöÜńżÕ;żł ŚŌ óŽõŠļß.)ŌC"­éģ4ķŃöśź /ōūŌ"ņå sf žš% +/ÖĒčŪ£źį, ųé+Hö)NH‘Ł ąźžį%ģÜĘ ųĶ'ÄŚÜčė Å4ķśņ š»ķė ķ÷’ķžÜČ äéXļŅńÖC:ŁõŃęęĒ éŚÉŁńóįhé ’Ø"¾īąāķšķłĢśDK&ć.Ņä ¾’Öčģē#ł įō!:īś¾ ŁHš śū,ÜPŽ ü÷>äūķ4ūāūęķ1 V#ŚŽēWé2ļõņņńŠīņāןʒĢõāĆ ķ-’ż¼žŅĢ śÜ6( ČRčöśéņ õų$ĻAÕū/Öó ć ęö%·ōó*ŗFŁdčķć󞿊Īä6ė( õKŚšåö3éŚ;1 ćøå3ŽNųÜ÷É üÜŃ š Óų$źéüåĘ<>ģ ĪĒ ŚŌ ßó&÷Ż å$±’'šųšóį%>"ź ,õŽŲęŲsįį!ŚĮ½$żņā’’źē Żó%ļ įėń ėöĻ$Ņ%üųńņü·÷ķ śĖ&ä>ųĘÖėļ ś/āŻåī(õ(šźęŪļćj ź.ńŹļ×)ēš)Ņęś*-82uæįĢåŲčžÜŻßń °š>14!}Ł ņ!įžĖÖ|ś$ #ÕčõŚ.ę LēLķé.3ķrł-E !÷ńčÓ2ĒÄQż¬éé éõEėé āK 0ėę9„6×õ + oõā$¦ķĶļ īĻC&š × ×Ģń0/4ņģĢß2'Ē’÷ŌĻ#Yš’“ä$ "ŹPķ%*ś’Ń&Īm’8 Š0ģQ«jįéÉō6ūó"8,Lń3׌Uö€ūńäł 2éüJņū ŅYČ\6ŚēĖ ÷߯HĻŀįaĪP(ŹéŪ½ öĪ0öœEµIš:;ź0“łų1ējøĪ3½ü^\æ(ė׌ꄯåRäCėßāšęŽ~ÖŅĒ8ÓŌŗ¹Ńļ¹-³÷2ĖŚ²=üöż!iöż#źģń#ķ-õā"Öģ%ćé/ęģīė÷€ńŲ, $ŁņõŪ[ą ź#3ņŠžī­ćģü½ Ī3#ėõ$ųŚÜJ,%÷÷õł4ņåļóšŲĒłš÷ ŅĖÕņ®#+Šć ĪjŃ«ę"AśUBæ9'Ż żūŃ$Ū äń#žAÖłŃ+c źłėķóšÄ$¼”Cēą"ļßļķŃ ¼āł<ężÜ ÷įóšćģīŻżÕÓF8Ē!  īĻåūŌžäš& f÷õ×ÖÖ“& ŃŌūŲķ(ŌŠ4ū žRńWFc"ĪŪõņŃŖ»ĒūŲńä' õ÷Š9,.ņÕ¶pÅĄ÷Ķż¶ģhIŠÅōį0Įļü%ō ( ±6Ń* ;÷ś°óś#"Öé)żé§é#ļŲŽ%)8ć,G#¾ ōķä,å ą¼°7UĪ ĖÜ9/ĖĖśÜåó*Ų€ „Ø$ś‚jŁķ1ÉKūnõ=L†ņNŲ÷Ū€Ęš’ŃłiÅ&æ…Ø¦üŖĒbb—Ų¹Ė^“ĘDŃį*€° Į€īĖ€õDĖ.į…šDśÓ#$(­\»ŪłŲ‚ėG¬+± A€½ŗ€u𢀣4E^?+ˆiżū`­€  'W€ų~4ööņ·„æžb€9ź`Ę€€N&äŪŽ€qŻ4_Ć<žTĮ3求€üDŌ7ČåßŌšzč"č3Tśj=źöė2ż»įś/ī))ųķč/Š>C&%Sļ’å%/žŚ č'Ļś)óō!źŽņ)ŚĖé÷Ģ»éžäč#éæÖųńö]ļ ²!ź#.ų:Ū’ō%Ń,÷šüźĮ%źį%åÄ Ż±ńżį/Åś-GŽ<Ųķ ĻŚÜgĮł÷3'*ņøöģ0Ż * éśüÖOó4ż’KģõŚóļķ9“ Ė""ŽęŚū#óšā ÷1Ź 'ķ»*6Ō+&÷½&ąŌü-åą#Zė ÓąóõĻ ģųĮ ō‹1Õ RńõńūńīŻ)/ńęīąŚŚÕųīģ 'ž4ėęóŹŁźŗ!ēõŠžŲł%‚ÜīĀī õ/ ó÷ČŠāś(#īķ Ųśõųģ÷ņĪīźśÓų āŽžł· ē0ų0Ż8ō.ē÷’ĘšĪņĻõøśš. ń 4 ĻŻęłąźėžū÷Ėżū’Ų ōėœõüåŅŪųŌ.ż.Ó"$ Ē+#ö /  L,åÜ »ļ»ļ#>+ńÕ7ęž÷ų»Ä)DõŅ1-ōä .¶ńųś.Ļūśū0ļ,š ū#ęī+¼ <ņąłå4ōŗÓś’óīäńŹģ<éśĶčŻõU/ >]Ø2½€ŃÖC;³-FÜą#ĢQSźń ĄÓż ń²”Õ#üĀĪ0+£ÖČw(ŁM#6 ńśh]?į€Üēōųęė®Of®"Ձ&' ¶ę ņęMėķ< ó5OŽ:š€ŻįBŃ Ē6ļä\ŲųG6·\:ÕJžÓ×ļøVQ ÜV½Õ/Ź ”§Īē±č -ėģÅDēQ}ü@Õ%ö£ų)(Üśä¶ õśé&÷įŪ®õų;ųö$2ķąūęöÄ žÓÓ Ō±Üį%ņœ ¬1/ż6;M÷”äō÷ ōī ÓŪį&(’Ö ī¾ō¢ÖėŅąųņJhĖK8$ ēųĒę&æįÄ©āķæ$åÜčśåĒčł’-ö-É2 ė ĪėżĘ¾ļĒī2'ŗīÜī׳żÖ9¶Ž÷ ņ !ōō šīēĖį'łC óĻ蚷żłüō« śņŠ<ŌŁŌ¹ģõ(ķą K.ŻāŠ>Ģęė’#’ūžÓśśłśęå Źō1éķüš 'Īēīå Ļų3ęēüāå2 3ļ/żXżČśöéĻą#?ż½Õ÷Ķüųæ“ņFńźģŽŁžķÓ’ŗ/üŁü¤H8ŲÉÜ)ļ× ŅĆ÷?ŪęĪžKÖÉEłGįÜEĘņ3 2÷čļ)üš¼!¶ķžĻśŗ×ļāŪĮįīż÷žęćé3 ŗ$ß8ć­Ł’źé¶æ ö ¬Ų<>8Ņ?&ŚŁ+ŅļśčŠ’ ąõĮ%ßą ź ķŹ÷ Ž'žŲE1&ęü’«)'öÅ ģą&äųFčĘIŅõ ļÖč ė"4-ĆšŁ’Ūģō!7ÅßÉķAI £ öēHŻšśÕ:ēsõŲßņź  B%ļ!8łFõß"Ņ4É.žųS"(×(ā5ėćÉ^<Ņ#^ö§ŁšńÜżåöųĘŠ<ę¾čÖ±Ó+¬ģŽś%Ęü’ē*ž ©:,ęŲ öłūćķė=ĘŃČķ÷ŻķÖ÷üĄ@Ķ9Cß öĶćæŅ&±Å“ķĪŚń4C,µÖÓÜ­ĶRC .6ē ¾7äóŠ@µźĻ>üņ­śł.å)’ŚšēĆ,Õ(öÉč,!Óń /Ę2±ŗĒŗßø?å×¼Śļ5 ĀY@^Ō.õž×āĪėåąć× łćå]>÷į ķłĒīäāŠõĒž ķ ģ%1R-š²żč×įŻ žżĪäķŽÜĘŪ'_ńŚ ¹AēĻ4Žšłøņš Ąņ žü7ł  Īæ,ŚŃż04!Ūśł„ó$ķ'$÷ćņĢėéÖéęL"“u ŗś/Ī'żÄę4ŅĖśÕņ.ž%ė×äČ# ė ė2žéPŃżI&Ā[üé3. ¾ē: ÓüņĻ’Eß@>ģÓß"źēųśÓł/šK/!āõ+Ļü.ŅėßÜüü 2 RÜÓ%šöLźī§C½Ūą5F¶Ī)ė1“ųęūŪčķū+'!Īśį.ĀŅ×ܐ ÉgŅūŠęūLõģ6Ū3,žļäEö ōś38Éō’8ĻŁ÷Ųß č bčü×&ķ¼č÷ 5ĖžĖ±åįęė5ś8±Ā ĶŠąIĶÖL)ŻüL}łõ62ųĪG(5ńćśW* !Š×ļę ćź±Ź šżšąŻå   6#é śą.5Z'ČźÜ>õźŲēłĀSŽźčł§ū)2¶ņāÄśźŪ掰/ŻĪ õCٻΒ Ž*ėŽŃģųł’Ėģūūā%Žź6ÉĒ$Köń 9ēóõņ€ą1ž/*Ņ"łū[ēŃĮ:ąāŽų õ7Ä/Ż&EŪlžśÅŲę»õüžģše,ØĪó!¼ļŌÕ’MÖ æā2ņŅ÷é½ü“ )éåÅųõķą7? ģfĪ ŪGaÖū;ś Č’/ł’#'ä)&ē!M$ļįŠŹ¾¹ų ęźW÷¾öGÜńāēę-„³ł÷ŹÜҳ é „õõ&̬ó€żāöóė  Ō>'łśū@7Hķėńņ0 Óń&õåÅęäļų’$żI źė÷"ŁŁśå(ķ2Żž*ŽŠš°Õūš’.6éē€ģ#żüß Žńšņ8ÄÅāč,ų×)õūÓūT:_ūŪįóöłółEDų$öņ%ūõāŅć 3 ężśķńłŅĢ3æ&Č#Ņ]#šŠ Ś*ŽķņžüĻźŁ/äĶ2ąóĪņ?ķ(ėĀź ŁįąÕĆ4×”õń!äÜō ’ĮūŚŅžŪöÜėķÜÄ^-Ģ6=ÉōüÜ ńšłęėÕ<š ÷Xéóšīćß!"Ž tŃęģņ ¾ÕŹĄ’Ł29 >÷,<Ę MŲó, @’’“ß)óÅ4Ńģ’ļ’śŸē č¬=é$ķÅ 2Żę$Šõō­Ńģ‹;Ż  ę` *,<ō€;U6[LėāT$ųėģ®!ō„Ė ųšåĶõCRŃóOmOŲlŃ·Ž ¹é ('ųįč!ĻģåPåĪÓżÅ ÷-łŅŠ}!åŹ. ÷#ŁÅ{*,Qä  C÷ŅŠ<0­śÅŃa3óŠę8ĢkŃ­ń#äł% žżąØū8?żā=Młķ\ųr+Ū/G5ć$ ~’į©)ęH šŚ¾æņ 3ąńN&ū’žóŽöÅ ,IŹ…ņŁYÉįļŚ’-(ņŚ3ō˜ążÆų =üŲž¼»o­įņ?70ö8×#Ėłć„÷ņü$øžš§%ėń Yņ)I"óģ’šÉ¢į$ó'F­ųų¹%į~Ģ?¬Óaśó(éŲīė€ŲŽJęj U!é Ū9Ē %=ß6ÄŪ< ōåżÕ2Qµ¾( ā8ŽJļßN1@āąöß)ѵ”ųD õ©šæ¬ŁŲ#×šŹśõ.ÜG’ż*ųłļßüęŚ.ž%<žėąĆ Dé ś,õāBņ\õ%5óA½Ńé&ž0Ū÷)ó*÷Ī<ŗæ .-“+LÕ0åü ė4ŻĶ źóŃ„’źŪŲŠįń\;Õ’ó ż¹DčŌ#’§Ā·Äŗł ½0Qū%ß4p4Õš#(šź¼śՄÕ& ŲīĮÓć3żōņ Ł0dößčp Qöė%.ōßĪ,ž+æžZ *Ö%ė%>ńķ¼Ėżś/D1õ®®=$ÉÅ0ĮŪō6fėošō¬Ē?å"*×Ó-śbźļėķ*žēņÖ¦6×?ō½÷ļÓJČļõś ęź)Ō°żżß ©<žō ÷ĖšĪ\ rüń"Ž]øČXē īÓŗ€łųłóņ2 ü󞀒 ž śöõ śõKłóåüķüõ  š÷żõėšƒł š€šņżÖ"Ōū šū ńä ō÷ ś’ ÷®ī‚šģ™ö€ųķ žրāŽė’€÷õ€żÕ ł‚ī¢ćõ€’łū€0žņżĖŽķēéżüī6źņķū ļš’ü)ŁüŽłńōń’łąģų  õöö’ū ōņžüś÷ō÷,ü÷ņ )üļž ųģ Żįöūķ%ņõļõłžł õ õż #ń żųżž’ õōųķó łń éóųž õÖ"ģ ė’’ēĪŻŪ¶æóįĀŻē¼ęČĒĆŅÓéóŚĒŚćĻŚŌŹ¹õĀÕßäŅßįŪŻÖ×Ū÷ÖĢļÖÓÕ·ĢāŪłäŚÜŅČŲÓĢßįŲļĮ׊ŲŪÜÅŠÓ÷ĪčąŗĖŽÖŌäĶߏńÖŻõĀķŗĀĢįÕĪĖåĢŪßŽąŹŁ»°ŹīŪßįŁĪŅÓėĪŹ»ŹŪŽŃĘÓÉČĮĶóŲÖŃĄĻŌ×¼ŃõåŅųęÜÕŚāŻÜĢŠČŚŅĻĢĶŅŽÅ×éµĒŌåĪłŁŹäŪ¾ūńŠĄĀšėÜčßĻāŻŠŪŃĻåĢŌ ŗ²-ā,÷ŽõŪŻū$łēbł5²ųĶ’ķ8Ó źŌūLņš<ņåāŖ09åņķ?“6@ļ»-żėāÜĖņÖŻėJźŌöž ÓīŚęšŪē]ćž86Ä:ĒGģūņ6żśå $ Ąø7Ź $åģ*ķš ŗįļó =žFüŪą..żMÕõ+E39é3Źżõ*Óź1ĶųŌ'÷ńÖöLå Žß Ļźž=üåĢ1¼ō-ī}š#* õģż»¢ó ֕E~+¼Įš.÷HĒ <ž'ßĶō=kōņżĢN/ī!HĢØa’˜PėūÕå&-T\¼0śāŚń£'šŹwīr»O±ŗyÆæļEē µ+ū.¢ōŹéßŲåÕėµI±ćcó€ŲŽśĪå}ćŒčÕ\K×#"(3ōSČÅŃį,Ą»±mē‰ōR ūą5>Ć>ö,Ą'Ć'øóõ“äżģ¼ē­I·S#öÜø/ćZnĪź<$ŠŠj-óņē÷õāNżųBūĮēõ RńWÄõÕ-¾€G·ė’ĶÜuĻåĐĀ÷åÅälēŧIé0-Ź®8Ąķū7A?ū ­š »ųž0:7)ŹŌ7ĖļK ›Ų»õįF²īן 1 32Lųó 2֜­ü$ņżذܽ ¦H3=źģ ģõę$žŲ.åŹÖīŻ ę÷Ļ~X?7„£ÄęH/»¼(€ŽĢ 7鵞żæģÉÖÜYåŁįō!ÓČŪøęžśÜ÷VģÄ[BąéßaØē’,÷Ėļ@ś0"čŒ$ÉŲ ęļüē÷¹ ÷8āāĖĆöō)(ń0µäęöEšŻė å$ ņūī+żõŲ8€€ųFź#lŪ(} Óßū"R‚ 2 '-ĀæļĖ1ėś6GšŠ#>mńč°FY}ū¾Ž*Ä ōœõ·,¹ŃųĆą  ѵžP1čö@M? 1Pž(1ÕXļ‚ĻćÄ6}‡YfŠŪÜž3€»A©R¦9ēƀ›±óĘūļ­ŗžāé;<ŅÖóøī€K*€Hb÷ˆ¾ Ģõ¹}cņ% _Łŗ6³Ļ#ŗ+ķ÷ė§œī,Üģ÷ąōō RF+ģHĮ¦åāė%ńņ 8äŲڹü!ĮÖõ°)bį)7 !óŌ/. żQ8)ł6īŚō>ęź1łöĘóšų ķŽŅāäźž^šöC«żI÷éē ü1ü™øģ ż1ī×Ų÷Ų 4Ūōźį-ńGąūßęØįŚõĀČD›»'ó >¹óą1Ż0Ļ.Ęõ»“Ų*°2 Ū«Ś ¼źHÜõ#^)Å“ā‘mÕī­æńėń0 ßG>åTåņ!žŚEō(į2PdąāÉŲĖRaB.[ņ>w’Ļ$Ė"¬ØIą~Ś@Įüķņõ>¬Ū€½ĮŌW !Śņ¶üÓÅż1Ć%Źż%ōśĶE@K«&õó(Ī(ć"ōM;ė½5Ż)š7Óę»öu¬“P·PÓq6źµ’ ćå ńP9å½"’]üĖ"€YTUPÕń.Ü?ćŲ Kīåņ-ū’÷PT’„ź4Ķ9'²’Łõ=ŻÅõś,ÉģžķČ1IN’× 'ÕöĀ !ŲM“į)Ž–ļ#<ņ-4ģĖĪš*ōń«*2ūø$/ņč%ķł’ éõ‰ģśģń #ę%,%$+ŖüńžėŠ'żō’ėÜBÄõē%4ŽŻB^³ēÉ;>%ķ¦!č_ŹģŁż ,ā%½/øæÕ ņ0ØóŌ/ĄĻßü=/åźś«ģC Ļ üč’ą©ķ? (Ü’6ū’ēć=ś Ņiö¬ņ4:Ņćż>3å -±ČžKüéāųMÆCö";;ź&£Ļ H¶35ŚC÷ų&ż(0ļ $¹Ė¹Ø*ĒŚŽĶąĖĄ>×’šžš/źŻĻMū2 ²Ü -)2GeÜĪ+)VąG$›ćŻĖ@¬ČÕE^:ń5(%×(Š[ĢÅ0ß6ąĆź÷Ų!»ī1Ī?õ6īó ’'ŚōŚ!)ó ś[ó%Ū$õžźčģÖ,ī0š©GśöpÉąę!śĘņķĪä RÕūł%Ą’TžŖÄž°&ŽäAWĆŁHēžÖā-źķžß%µäĒ3éīߕĘüݳķ -"äŁļŚįzūżņ=¾Ó') CĢß$&ū’Ć ō²’(¼IżéžŅ#ņAųŅæåüÉ7ȵĘ: öłSY²ļ.(!é1ē诜 4Ü ü%óOźm2BŠōŁśźņźOŽė!óņņžīēńĻčš$äGżĖŪž ų ŲūÖī.ÄśIē ā&3ŪüÜ /)ņäóńćų CŲėžÕõīK)’Źńåä ’ ! iWļ%ų7ā¶ĒDļõ€ ÄŚęŪŪ®éįµćšģń¼»ż %.śŁŹuē)÷ū ę ź óżāåÖū) öüU¬'ōįņ°ōēēķDōš'˜ Ӎ'¶ÅŪōłń,āÜ ÕåśŽ4 Bįķ0÷ŗļžöōź%öšżŅų“c—ÜęN+0-ür 3H)Öķź#Ś÷Éū8įėŽŽ0FśšA·MÖžóč¶óNgę%ńœ§½Ū<’*«)»ó ę=Ļžī;%ń"' %˜Tä;Œ×0ńž:_܋źłĀ÷Ū’Ś?’Ė ī)%»žģ€źłį®&ų7öc$ĻĒ“ Ō`õŲņ ·Ņčļ #ŌįČīØß²ęĻ5³õń ūé!Ū7Ķ )ćĆķõ];ĄĖåü8$ėŽÓıžāŪ,öĘķŽņ!ģ(ēh1$ōģÆŁÉ3ņ%ó6ÓīåŃ!ŗ !ģéėRC $#ąć!Ž(黹JóśŁG?Øč öņDĒŃŹśé+2ŃP ÷ŚÖDcü?/ņńę–÷ä B5õŲŪÖļ`ņ’ńĄ#M÷8MŌū÷§2 ŃßųņæKnÓāJ8 Ų¾Ż$Ž?’ĘŚĻŪä= +Ö@Ō.'Ć6Õ×­FĘćÅ»¬+żŠ€ŸķžéõL–ćēęĢ%Ķ€·_^˜ (ŲŻ&'Ęēńܳ¾Dū’čšWł@Ņ ¬³uįøś'ö»6¾Õę!Ņ{üc,%ķ4ÖēŲFäöōŃįŲŸ÷(Ż?ęGµń=Ü żų= Dšē×ėīŁ©"Ńō ׌óÉ)OŹņóćę ĢūŚ’H ’ėūłįć$ŠšŲ "ļ ŠĄŽŌ"Å'ź49L@<ö3ūć’1ß’|ė/Ą* ž Ā<õżĘA÷å×ė+¦Żüų ×!)īĖ€ń¤ą ų’­üėe+®Ūēæ#E±ė¾ ”īĒ©§8õ« ćÖöŃØņÉ%ŅļįŃ÷&칐³„šō˜źćīõ×KÆÓnKµŻ) /+÷ŽīIĘ59w")Å\cß2“Y· ńöń÷Ūāüåą62É’ŗ¶Łæ÷¹d> /ļ?ĢųEĮž]žČ¦1فņÜ#ū#=¼XSØöö0īą1% ©H¢;˾ų9Ł~Öó*Š!3韥CŻ śż?Įšńüö ī"Æ„ļ™śĶ<õCĢJƶNͶķęē0ÉÜ>$;įTćóõõīnŌ>|ņ ķIl $÷ń‡!÷üžų*ż)ōąõķńBoHōčÆ ųń ;ā¦"9€¤ń$ɼš’Šē8ß ;1Ūų¢öł/ķ ¤Ķ%ąŌ¢ é/äUĻ$öĪ!é`¶!×$ųļĘŌŌ+ł /ÜčēõČ ‘ė:ν:ę9ü1õŚķKöŁöČīĒÅ2ś’ļź!(ö üķ€&«ś-5!SĘ­ 22č^’GFōŅē+ ä¬ŅȶńM ?ūö.ÕĒŖėCć Ųīž»ž’.؝»ź”äļsłe ”0ą:Ō#"É»õōJā1-å;Õūõā霎ģĢJ ŽZģ*ōļę ß23' Ź‘ ;µŽ€ ą÷oŠĀ&ĘJ6ōā1ÅŃźåĶŁüśöąÉ¦,œÖĘūķäī üß5Öł Éō=øķį4$)²ģż)ćׯ-%Øõź§7'3ķńdįWéĻNō6ēj%ą¼³üøŹĻÜŚ v(ņįēļ/öC18īĘÉ 4ĢŁģ§óĻŃM Ģ6˜&ØKKĻ@ ąßĄ³üßćžļB5Ņl#UAe!+š'8§čĖØ šć*õČ÷9aĆ3õśāŌ§°;+÷±½ ōģXčģģąyÖµ”Ęäšś±śšŻ)“}@čƒęś/ ä>.Öą=ż÷ąäąĻ4|„?ńś&€ō²ß ś š·ĀµßŻ;sP¾= ł×ŗć4ś# üōóóšÕģÜ"ŪÄĘę–} 1a/$£öŗÕį<įõ&ģ€śż=æŚ½łÓü92‹%*å3 ēĪ)żūIę÷żŁ¬É÷Žļ~ź¤ÖÓ!ŪõŃåų÷ąŸÜźsmŠaĪģ\ʤöŠ Ķ—Ą}£ś2 ū^Żéŗ­€ćę\Öģ׳čäŗŌģźJżīÖę~_ö6—~ £÷źä²6ōĄŁ (%=,ļž°ėŚ(gųÓļŃļó ×¾Å~ÅŅėĢWėÉ0CB-%Ō÷/żÖō:ļč%µ#üZŃÜų-łåŲ#D»"«Ē:üł;įüąČś*ź’ą*Dååź%Ś!ųü.ö8ńėĆÖõ*ł!āøēĖö&vŻżīųēųÕŻūždŁ ZąīūųÕÓ*ķäõ üņÉķ?ü"(’Ł’C9ćßĶDž÷Mōåžü Ųżļ üBč(AUÜņÜģG2Żņ  C,-ę€ ĪßšŠ( 1ł1üōBąš(²/&÷Īšżü÷©¶ūöŚ BńķüĒZŃyį +Qņ LėŠė !ą äøś<9śYŪg58)żJžć,ąķė5#IŠHōZŲš’ńŗ–éŌŃųĢĻĶČĻü šĒM¹’śšÜßäÓ#öŃ*Ųč½åT&¶6å£ńÄū®åŃćĮüė%*ÜG B šüöÜö'Š>Æ× ą%œųĄČ¼@&.ę7õ"ų'øI*÷×ö¢žū²××/Fę+ńĄ3]ŲļĘ O")ÜłĒĖÖŃü åēüźŃż1. Nö,oļōŻėÜ!ͼężżČļ÷2 ß½"{ąó įć:ņ%(ę7 ŽÄŹõņŌŽ "£Ī"ć ń÷ ’Š- ś(ŽćśüļD’ķźūeä9 ×ÅÜéēóžńśłöŲ÷āģ žė Ś_ē4üėéńÉÜ!üĘšż½V:[µ°)˜žūõģ6%ÓĪ čĒž#Ōž,ĖRźłøPŠżqł"óī żĀäž ćŽżŃś¬$ÜE!ę+Į!$G1s%YĢųśä:97AĀAü/½Łź.ģŅĖīņ'&ÆįGĖ¢×śąŻĻ*åÆ0Ż ōČÓµ¤ż Ž’ĘÕ(ӭߎøø'DšÄ2„!Üāä Žö)2÷ńҶE`ē󺮐м뒽FūłŃ«Eń÷9Ųöńó&Ül½āš"ęü¢Ėūū ņ0MżŽö%³Ųķŗį ’Ķń<%6óō1üģ”4Ū0 ņŪē&ó[0I­Ķߌ’ÉųøO£čėü'ēæõš>õČö)JäūIģ8śĶ""V1ŠčśüÕ 'RńŃ>ųÓŠ+ ,ļYŃ7ę¾ö\ĄLāåīBśæźųöķIJĪcńłń#ēG łÜģżī§M3ˆõīŽńĖ=³¼€ ĖÅķŻĪū % µļāÓ“!žŻķ€žą< -÷"#ķńÓ üĒö²ŻŅŃĶĪćõ/,åŠV’Óܼé’€%ŪŅ<ėš¼ŗÆŗ"ŽŚįČą ) >ŽōOĢ%G!Ģ&ą 1æÅčķ±ėÄź_ćžÄĀĖ$µ)&łõēŹżä S]Ė $÷©ķ€#ėÜ/ŽéöįQōųå$Ćė?NO Ģ)Ū÷£ ī'Ų#éōŃĘVŌå]ą 4žĄćųł¾)Ś4 51°ÓYĀņ°8Ķõ ™(ķĻčšCZÕžŻö(&:õõEśļō5Ņó,j»óÜ"&ėłNÉÄ×8;šK+’³÷3¾īČśé Ē4 'ä’Ó’ GYźUŲżß“"ܼ  $°š€Ūģćē<+1 ķžåį¾÷neMŲž(@Rü"KņAQ*ćōĪį0ŁÖōj!öźÆżDõ ŲąĻĒŌ¹ń,S$² ,õYź×ųŽ’×$õ·Ó!öæÕńĻ ņ$ėÕŅńÓ3ō*ź1'51åü¾Ī(ųł6ÉöæÜ.,('%ŽóīąĢąŠłöĀÅ ,'ŲŅĒķµŚšōšż 6Ā$ÕwŁéõŅīäŻ&ßė¹j 7¾äįIŽü¹6ŌęŖ ļ-'é¦ö»ŗģćąPōé’,äÕņó.č Źņī ¤( ×ó9ķD5 $(U(üżöŁtŌ± Öł !ē¬ä½ą0łÓ9ž —Ó³żäž!پž$ ö-.¤éøėÄéČńłśĢĢ’\7žą*ÜĢé:ŪüŲ/’ā8Ż3ćó;ģŌüšļ6–$üģ|õ ņōõī ļūų7 ŅÅJö Īü!.DŻżä/6Č&ÜŽĢ! ęÉöāE37Äå÷Ō¤.$į$W׎ó¾ÉŖĘ2ņ,): ÜōÕÓż³’ŪÅnééüÕć×+Dł1óįŅI͜Ō1ś Ūö6ÜčīĶŽæčė$;šĄ+DāŅ÷&’ł5å !ĪżõéĖņ’ē]ųBū ėĒ+įõśQÜ>ĢĀüV  )åģåšā¹Ī°-?Äņ šūĒäœ)é "ÄōāS+ŽŚ„+ēāą’÷«  ĒSĆ&üØäƓ.§Ū j*æ. ņĶ09ķūĢ"Ķ-, «.`Ļįiūž1 ÜÖ9R÷÷āģ>6« ōQųĻįįQģüœBŅÅNāńö-hš/8õō< é;3üćņó5SźŌģ¶åÉį%©• ź±ņė;$Ņ׹āD Šī’? ąłābķęą’š뚬żść »0äōķ&Rķ·%7Oń€ā#¹ņģ<)ü!ŅėŪ-Ųóß¾ČDé:0GėŽżÕß å?Žś*ģżŪīüšėģßßćé×ü|#õÕõōŌą9gĆ'Ē‘ņy÷ķĆ.Ųļ’ī/ćģ %ļ0śńę,«s ēÜ’÷ä äĮöö"ܳō/)B@Äę * ł :9śĮÜPõųĻ"Ś ļ“V’Oēźåįō‹(ą Ö4üŪ žÖŽļ!ĄĪ÷ßćīņÓ$ ņUō'+ģ+Ü­ĪÜ"!Ņó2óųųčćŽ $ 4įĪĢ:!P6+ś¾ĒLĖę1įÖ1 ż9ņ*– ~.ķP½õ ÓžÅ:óśčóåßci]ųĮ ćöEęīG0(’7š;eą+Źėīņź 1AēYą"ń( Cį*ę„׫óųūäĀ õͱäś$ .µ ńū$S%ó ÷Q°m™% žŃ÷M4\–;ä äōĒ˜õÕó0ŪŅ7ē ]®ÜŽLŁ6ė(CŸŌ.ęŒ5Ż*ōģž$†ē$ +óī? ŻY“’ Šź* ę“kß ’D(.±ĮŅ6»ż×ė'śŌż»<‘;Č$Ö ńč¦ ųĄėäŚ, ’¼õŽ·,må÷ÅA2ą]1;?ÖģŗÜĢļś<ÄH)Ō! ?:?ą#ĒóØĶ8MŲwßßJ¾ó÷ėļžę ą—äö¶ -?%ŃŁ .ņ’=Ļ ż;ģ Żš·¼'Ļ!ĒN8ÜBŠg"Ę}ØVĀ"<öݱī9ģļ)Į@÷ģ ųÖż«L“*¼'Óź ĶŚęŲģż; žé J-č«ųė×1< \čķßF÷āöĄŲ1čõž÷ó¢’E ’ģåC½ść 4 4Ėóē Ųčš½#ÓJŸōŻ÷:ūÓ'ÄŪ)äÜńJųĶŚÅĢń%Ō»%$ŁÅ6ģ,ưõ(­Öį0?ēć¢ķżČśČCÅU)Iö ÷įB²ĄÉžĮ÷ēóŹD¹•*Ó+Ö/2üóGDņ¼ ī łÜ%dūā$ ńÅ¢Č$ō·ā ĪL O×,öū>č÷öø¾* ĖŗÖē'įēŗń1āśś/ "ų&"ę/’ā·ą¹#Āõē?*ž ĢŪbŲ šīļģų PÕ!ńį ’āŠ(%¶%×ŪD *’PA4ī@źOž)ØāC?æ6“øŌäć å/ĆÅŁ šä+ ’dŲź+ģ, įüåÕĆBųŚšł×īćģS óŻ öõ"’Ćā$õįĮ;ļ#7ó0-žųåŻā !ś"ĢżóóŃ*PöžĄėžŽ)Ż Š"ēŽ-@šŗ÷ī“7õÄ)!÷Ż&ĻÜŚÅįłōéÅ ŠŌQ0ęŃ+&ŌžÓįTō-²ł/2³*ėź -÷ź(ŚłĄ Üąģ0ķ;÷ ÓŽ 2ßöõ ¹'°šŠÉŖéeųŸćšķ1KéÖ’}ĮęE&: ŖØ÷ė:Ņy ėłģų̼..Ųłį($)ōdŲNēå —éąęŠYźÜNĆ;Vśµč6¦.D’żÉĖ WAa§¼ØČ¶Ś4wü&Üå8ÓUāģĶīÓōąüQUR + ÷D[”÷ü^ó jüH½śŁŃ32ä.˜ąTØĪļOūĢńO-„¶š‹®!2o7ģ‚>éŃßA Äœ3ĒJ! zõķécūņõŌŲn±$Ü:ā m¶)"Ę1‘ē Ćן]+ķ^g>ž ŚłķŽļÉćŁéĀ.ö+OƟ+Ę-į*$ÉVFµé/ć÷H*÷Üē>õä#łĶāį±Č³ŗwŚź¼åŌå£ēģ °¶T"ī Ķų«Éś$Õī_٧ĶT29–ʬĀĀųżMśrž8Ō§+±¾ßńĘó&Óīü “,ģ) į÷ Żņ=‚šžĆR’ō µē%ēŽÕż ļ(,ņĢI÷Ō» ¬לÖ K½# ę~É’Iļ ä+äø*ŗ9Ūėā éņY(=$4óä‚ņ%“ÅŽŌDóBśŪö÷ńž$WÜ·"aŚõ:ü]#¢(ō!ŌĪŖ ē2³ä&߇ü3BģÉhń--£)Lü-­ņ…Ź÷»įīģŪėģ·żĶęņøÜŃ|öį88 eżąƒ= æŻKŗł1āĖó.ä/ė$’ųžĶöÖßā##Rįõ€ų%}Ų ä?ŲéńEł\;ó ĘĆģ4. l#śĒ+ 8+BčלŻ, Ł5ČM,Ķ8Ū(ń.¢Ō)ßÓ×’ ūäŽ@ą5  Ōģõś õŸćž.AKϦÜžÉßHąŻąśńēæ­é2Äż½Ü 6'čAÖŁ£ļ’+;9ńņĢQ’īē- 6ĶÓÜś.Ą(aśß8Ķ7śF?ā@øĮč2õ .Qd:„žóßäŚ/¾÷ä»LY īę ?åååÉ;Į ó'רōHŪÓä#P0ŌŻ„ī÷Z3hå 0ż7āõ’Žń²œōŚńłö$Ė ­ö÷øņĖ/ŪMŠĒ­ŹĒ ūšē.ĻŠ ĖŃŠź“ęÜĘDö*ŚĆųéčłŌźė$2ŪÅ ē>ģÄŪICÕź†ņć®čŌÓŹĀZ’óų' ±!ń0>YżĀ/ūå䏿śóc.į ž;óņė,;ōģ7Øīåłü)µņÜV§žõXÅ# ļD\ģÖ!Ńįėäń)½,¾2ųćD±¦š·łEęõļįś,ļńä$Ā1%×’ÉĆśĒāŪ%*ė•Ē˜å.ßõĪ72×ŗWŚ÷žßķ²<8Äģ5ŌöūīłQŪ’5ųū<čĀĢģ;ūę<ĮHł’%āčČKüū*Ü)Įõ+3ķžģÖłą2¢Ņöė’ļźß3õEÅģŁÅÜÄėłŌ0öåļöųņ$Ś3Ųī0!Śļį#yģ’īóóiÜ!"ü&ćųĄĘ#ųģÕ4bś"ü "%"š0ż"Īžķ(éŃ ž!öÕ ŻÓ-ĀFū%óźĮģ’'é±é+)<šņ»0!<Õ’ī /ļē§ģɟĪÖÓ’(ļÜ±óż“ ō(ü Ō ī’‘ęż0'é;ęķüä­Ūšé¦÷ Fżü ć§į½  ĻÓš”@ ŪĖēś&ščķĢ@ūĖĘĶTŪėæļįŅ ٽ5æäīā6" ÓÕßćŁņż¼ Ų½"ģåü×3żą ćßüńåĢŹąģ˜Åń£ę$+# ÖĶćß%įļßž< 8ÖĻ  ©$ÜÄÜ×ÉÅėĮäŅņÖÖ7ĻŪłĒĻóĄžą"¼\ų6ö÷1ėćüÖöĻŪŚā„÷ģžįķ ’’=õ±ęč’#Ī?ČŠ$+פŚōęėć ųäöęāŲžŹŠ-łß퓹뾒Ę&ķĪ'ßõ’(]ä%Ł5÷šĆ¢ÕĪ’,¢ėł÷’*öćS ų'Ķ’ńšķ’iÄķ•ąõżDžź÷zŪķāę2ę&,M¾¤÷«ćčŽ ų8d/6žųAō.ö÷/DĄå$-ź74ęŪEśōåųūķ ļCžĀ*šżõćÅīĖļ O1įųäćļžBóā÷ņž ((! Ż ńæVź üKŅń3ē:ö*Fżš?ģōɼū ĻžųøĮÜ1 ĪŽēŻ$öęēÜēõćė6ļĖē ęĄ ģłņ’ī)ņϽVĮ:„®śģõ1 Ęõ£$õ /N ź’äČōĖüŅƾLķžĻÖ*-Ü ó÷ ķ8ż’ŲĮä*Ć <ū,Ń)?üžŁ»A ~ŅIŪżąĪß !ģĪ÷ äÓāü@@<ÅaŠŠ)žöŌÕŹI ~ ö ż/[Ą¼īóØĢņæ ¾ Ī‘ Śź žCüäčĶĪõ-ņŻ_ž8ŃĻZÓüŌ#ųö$ÓųAõę$##Oł¾É&;Cóęī{¹6ć¼Ę1 ¶4š‡åś&į! Ę–Ć ®įā¤Åßø» Ę/()¾õ„€ßLŽ°ė ¾ņ Āó ŃŅB“"ŲÅ)ćÜ(įż;i/ņ޵ØåĖÖWjdaĻ +ō)’øĢ­A1 ?Į]źÕ÷žļ ! ĀÆŗ Ӆņąš<ń0@ĻŖKÄöæłČqA3Z> ģ*ęQƹpėŻ-²¾©^¶*öČŻćĢäž/ Čāč’ž9Ļ ?ū<ÓæŹßåŌL ³ä#@ŁŗźI†ē³ū²öÓüōö+o‚śŽč)õĪ7č śÕ»}żßż,õļČīÅÉņūŅō÷äL_,Füóź€åę,Ž")ź&Ņ ’öÓńžéā åę2'Q+ėń?: Ą9$śÓ±$  Sķ÷Ķżļų+Ų ")äł%ś¾Æåķųż æĶ”ņ6©;š©RśżĮłä2×쓺*GŲŲ÷ĢēŹāµŅÉš ć‚ lGŲŪń?ėĪ<’ŁŠgżŻļŠõķēŌĪDžłż’é'3õö™ ,Ėų /ŪńŹŻ śżéšįĖčęæ  śėß÷ 1G’ėŗüęĪ€2®ė§ ņ/*ÉžÕ·)ź;­ĮA&.ģ’ »)EPĘ/„­ ų Ö ōŅįļåć-Ē;łąņįŚé ·Ī9 —«ćĪfģų3 ŗĖį±éń÷ń¶Śnöōš' Śžö#ó żõļźł× ģųężÆĶ’åŲ­³Ųč1 1ń$ĆŹļśé÷Ģ"Ųéń6óøLMÕų’ ģīĀßĖķ NæŪšł‘ł[$ ō9óÜśCžµN Źņ šņĪG4 Ą9€ ĆåŽźŁåĢõ“. čņ¾*Mć’P¾ü&ßÖÜ ŃžøØš“!%ĀC#F~€*%Ÿ-ģõč Ē2ųšGĒš> 0ČńõŽæ¬ŅńŪžć1®č ńNļĘĄ"A# įų" ŹåöóåÓ%ĶOż(6šē7’¶Ü3ńĻŲ Ż"ĢHłśŻŗŲŌŗ÷ņöö`ė,’ę!ŻŁą ćŪ÷ż åU4ēdš łī@óüÓ@Ó#ÄéŃčŚÅ¬-ņĻ÷ ųŽīÖHåņNž0É+Ę @ēłåķĀų7L ńėīŸŁŠņŻ-ńĪßäėę0žłąąæÖ ų ! ڶŠśÅ $ šņ@ń"ż 2ĒĶłŚżŹaüÄ$žć÷ÄöłWŪÕ ĪöčśķĻā9 č!õ< üąģż’$šåžź"Ü2ēōó ¼ćŃč’Ö ļĖĻéŚ<:6  ųé=Tśķōß”å'śD&/ÄŌÕį@9„ņ’Ų+ę×åUŌ=į šéćż­é ¼!łż%ėōą9šģ=Ü’ ńå€ 7޶Ń=E׊öļļłž/Gx%¼œŚ¶ųŁ/ĻÅžEģŻ Ź÷Ķ7žö÷’/;óõźāŲLķä¾’,+éž÷DZ5[śīĒ2ąģć]Įg¶čL×r”ķł€q1 ĀšMö ē÷ÄõÜĢĻĻ^%ĻF+Ć%Ā$Īńb-3PŹ X4VÕĄ—%6 Ó'ą:Õ,`ęūźć-ēß=śÕP@=ėĶ1“Īąśņ8Łõ’€»śdTĢyļšōņhżÄKE'>óŽ8 ö’ÖĖ š}¾: +¾Uä&ßķū ęŹ ?4Q"č æļé8łÖĄÉåU Ń2F)7ė÷ęćŗ’Ā :ķķ,¼ī<)Ģęīč¾ Īµ6õŅ×'Š6x €ä%Ö ŒųŗNCČ2ąŌāXŽØI¾7/ ē T€š’ų:ž5~ ¹ķśŚīūųÜ;ōŲFåłēżģöĻ¢éē>€ø!‘š9 57éæ’6ÜŗŪŚŻäĻÓę1’ö=#å²źå ×öęĢōÉ÷bĻćĪ'(čG'ą’ęķ ÷ 3ų O +0ŃŚŪČ·õųšń(8~ż Ź* ’-¾1ū«ŃĀÖ ŌõĢ Ż?>ūĮŻÜ(!äńO4īūō-ćū÷čŅśVõFFK±!ĀĘi¾-Įh15:3'ś×÷łāKĒDé&źĶ Ŗ5,Ö4å„Ö;/³t–÷Œü>ćČÖ-×ģīĶ÷ ÷įėĢģ=īÖ’’ēąŻ óņķųü¤ńĪŁ@Ņė@ 2ü'Ö¬Ķņ õČšōēJK: ęB±Ž×,8¹Źņ.)śĄKōßęģ’ŌĄł5'źŌń"ć Żą)÷īŽūŸ,š+Ó 8$äæ ŗS Ż0čą &+śē/ėĆ ž-ž4)Šžč’Łļåąņ <Üķ Ł-·ĢęÅäĒ”é?€ĮÜ)2>ėEūAį#÷ŽÕŽÓXŁ5ķÄ4ü ?ź#Č+ Ļ Ļń鬒#Ļūūģ­Ēż,ļńÜ 8ęßīśź1’ć² Ī5łŲŪÉĻõ3®ņ‘8,#ń’<+•1)Ū Ü;·ēēżģī)ī<¤™×0Īŗ%N&#ī5õćļŪ1ϵźöŻņ’błėś¹ļöŻųmĮ Ķ2īģÜßśĢóīöü š Ē5Óśš ėö«łŹžū ā$!LųŠ*ĢBģ ōōć !Ū% ×Ćéż³æVéÖńß>¹öŅcŽøó#ńūćāĻ,)·ķ/ļ'<ńÜČžāĖ!·ŪčNõ Į)ō& 4Ję¾! 1Ü ·÷ųņÓÄåŻļÓöQˆ ŌéĀę/ųÜ“R ččĒŪO@į%L +»Ÿ$Ź«ņÆāż ėü+ ąķ$ź.A ņ*óóéŗś=ź?# ū> ±öóÉ5$ėŽīöfć:īū43ś7:ŠĮH&ÜFŁĢś ĪčÅĪįĮŁģ¦¹žåNņüTĮŠ’ HćÕé¶Ü“÷õśåø DæŸHŽĶ×#ŁĀŅ9|ŖļGO»Ā޾ŗŃ"ō11įą%į Ź’÷ūįI ōõõü-ß;CÄL6ĀÕ ģŲūĀĄ”üĀēu⃺Ņ0žüėŁ.EöŻ#öū·•3 Śł"ł ēõ!XčøŠ×ųJ’ ŠÄń<’ÅłŁ ōųäÓū6äąZ’I,Ģ  ·Ūė÷¾Būj?8?6ū.µų+žäīō’ ÷Ó ė Õč)Ėė’!ųś<·ó?ū&+ĘŻžčśóńš<ōäę=# 90Ö}’Bž¼ŃłōĀ%@Žō^ŚŚöū)Öē&-šń/į(YüÜdŚŠżē1+ą RąźÉäÅż÷ß$3 õö čøųċ ąr „ņŲėźÉŌĄ–Z!ņ Ļõßźž T2OW”³BļÓõā4Ł žäż&ėÜ0 Bõ•Č/Īģņ/Ń0ī?’’I Ģä®ņÓŁ3XŻŃG ł" āŚš&ś ĢÓ.ę×),Å}&ńģī)ĢęŃņÅī ßtņ ±ŲĒ öę:ōüE ­ļ÷6$žõQüŌÄł-,,!Õ ņBų6 ÷(*x(łčŁŻī’ēOģĖūŹźģÖĶ[Sņšö«( ½<øĆåųŪšÉµŲŖ Sņ üśā*ū7ķū&ÖĄå+%¼Ķ óčłŅö ¾õ’śŽ/ŚŚÄČśļIC’#ż×B¾źaīä -)Øgo÷5K ä,ļ8āį" ĖĪDĶćÖł/ö:éļÓņĀ Ü 8ā;ŁēŚż¶&Vģāü*éæéõüüżżįÖ$üÕŠĻć ķ(å91A ėĶ OŃ!ęķļī+üćü °āśż2įĶB8)žŻŌźĶßłģō?ā/ęł ū ÷ź:) ż “0{Eæ’“ŪKčA (õÄŁ2ĄA®O},ĮŲņ'Õ($0F/×5žō„ ,ęó06’šģ02>ēōźĻ'ģJåźą.ö!#0Š–óųōG į éłJŅŽ’ķFL&āóĢ×Ō āÉČģ)ōäóęóž&ūßšõ(ŲšÕšķ"ģ¶ņ ŸŲ%ųĶÓ- „ķżō#ÓŁ+ńŌūźó 4IH Äż.  ß,ōļŌ/ēėėåū Żāźļź/Óķ ’üēŌ0Ļļć:¼Ė(/ųŁēōāńśūŃ- °²Åé#ł Ń&Ļ ę×&éąų ±ćõņū ōÕćć ®ł8!,ó[ßÓ%õ%ĒóÓ"ÜÕźŁōōļ™’ėāŻĶ!30²Ńń ŗ ó>ńūøćś0ŲćŁÄśö’ōųć<īż÷ÕzŻŽ'Óńܽ.90üįQŽś!0ķ#&0¾µų<éČåäöĻÕóāõ żņąģ'ńQź >ōēģõ å>““ū>!į[Žąź#Č+)ńüżĄśĖ(IÄõ•ęųī žłÓ'į/ø ŅæC"äćü%ēÅõĻŠŪ’Żå?ŗżņėS¬Ü&äę&&ż÷õōŽń$ Ųå<Ółēóķāž÷ŽįźŹ,ōųÕęąķųŻ,õĘ+Ą5ÅüŠ÷äčź$š÷ĻĒõĀ>å·ŲęėīüźÆōńūõ’ņ!>ņļ»Ō&š€Ś߬ õĪ ŻĒÓ/Ś÷éūäż#įF;#5E6×*°Ęü"½Ģ¬ņ ;&33H(Ģ8 ĖźŻėā:óóōńßõ/ķķļŲģ+-Ä!Ļęóõņ ›Ö@Ó&õÜ’ öŌė$ž-Žå÷Žż÷ŠóÜįį÷Ķ0 0.čžł=(!ū ō-źė,Åäßā-" 3ŪņĘöóö+Ó-ņŃՌ8ó/4 įŗā4Ę'żä ńĢė8÷ļś$+ŸŠž,śļ¼ų»0ż9Žé "!®ž*÷Õ¤¤ģ¶GŲØa½ÓØ7 aéōżń“żåčõÖ·]¾öŪš1ł4öź"7Qū8ņcćļłöė€ŻSõŲ ąź‡!\•öķĘ(%ćĶÕ:’ŚĪ’įx›īT"%ĪĮ×üŅģĒŽž7Ł™&ūøĖĮ+J‡ł®óĪČŁņżK&)ZĄY«?üāū2ūį"­«ś į ÜÜ>,-äŠ>Ąbč$ņē%ō<ö.ßšł,ĪńĢśĢŽ+JÉOåĻŚ9„å® «ļįÉįBŠ-Ļģˆą0 ąē.ā#ćāč(4Ē’ŁūĻ|ņBŠŽīēāéŌAčßÄĪ A %ūæŌBŖŌåØĮź łµöÜĀ4ś1ąō>ŪģŚöģ; õ'Õ.ĆD/śĻ”ž~Y7\0Ō 0(øŌö$ĆņH×ÖžīÜŽĒåü!'4#ć: ęCę2’ŪŃĻģ!Śķ.Ź‚ZłŽéßķšPś·1ŗī1pŽįćåĖų¾ś°L £ąšJ²4šĢųשK"*žśÜ×ŗ ą'ŠEĶūą1#’P>:Ń餞ÓĮæÆO4BÕĪ%’ąŹōčų,:'&Ä0Ņļ×ū ļĢņ°JžÖ-!/įŃļĒQMóżėŲµųżėĪ %÷ ܙX4é āļŽŌÜ ¾—õ2Š-ģ ņ›#=Oųź¬ļĻŽY”) ł~Sļæ.CŠMśļńµķ„•ÅAß;é’ÜFģÆ^ė±ÉšņėŁ:’ćŻŃ ھš)’ šš#ĪĻ,ÓÕńų;ń½5ķ"Ŭž÷ś 4,5 ņ ĀĆ7B:Ł ‘€FÜļå&ūR·ÕŪąXbčļēĻĘ"ĶŻ’ '"̼’*ó0Ž4óWõ7ē'ś)QøQ,ÄüFił§3b ŠŠÜåŹĆĆĢĖąrųŠdÖÖ1ŠļńĶ9>ūųóūX×!¹< KčśQ 6sā)įŃ īÖō- §&łķśćśģźćĀ÷Ėž½)/ģɣߊōÉń–¹”¾!# ūšźž;”ķ)Móßčš+ä+ķż'źīÜöśŹå*ŻŚßłöŌųõū'E*öé3ś!ņöūĄ Ó9ū 7 %ę÷ń ę$$Üäå0č)+õō+÷ūģ#Į¤QÉżŻāäĒź2Lcć›ĻŻ ’ŪQ$ŗå3ųģ9+ųóķ>ßļć((ņĪ Ī"ž÷# śU+ń< “’0(6æąMŚÖ6óāęžīĒł.ņ(Ųļś9ųĒŽøļÄ[6@ū ßóų÷śÓēūįńķĻŹ÷»µ*Üō4¹j*6ńž>€ėģ Čą„¶ü3łłūžæ€<ż>CåĮé4RóĄ6š.ś'Ėķ³{Ś5RŹ<ŹņŲ+ ē—(įļ8öéĖ×(įīžģ#ļŽ “ĢÓ cŻ å€÷*?źö6 ŃĢ2 +ŪE;ėė4ļ¼=>)¹äÕü'÷;’ 5ččńŪģō÷Ž" @ēTž 6ńā[/ä’ļ-Ńų4óš5&ąŠäžė.æ)ē ä<+Ī!ńõ *Ö #łģ ",śćTą÷) aŁ.¹śŅćŠ3ÉŚ]ķ ĒS%!÷’ŁĒōÖņ9ą¾ūüļ:Šõź8ä "Ļ łŪ'ė,öć1ęģ3å·ķŚĀß!ņ€ÜŌ ć9Īõó¦0 łŌććŻĢ’ł8šŗ Ńś=bįĶŲż&2ž5ļ0ēāÄłčųćąöū"&µĻĀźņ"'ńŌ5ķFéŁ.éÉžÓQ­’ ųžä®&Ų:BĖ;Ś@ óiļó'īóÄåł¾ÓŽBąåŗ±ķß- ¶ķ÷ē¦ 8:žĶļ,A¤éGĮį$(äłāY³()Ń·īÜL™)*  ōĆŅōōéŠ;š*äķģ.šā ķē6ßŌ÷]BCR:Tõļ¹ ć)ä>µžō/ä&Š'¼7ü’üŗüĶšž8īC,4’ūąį÷ę ‚ čšõ8żĘą&1KĀ7(÷%šB÷"ÓŻäŪźūÕ(*µ’÷ō0拏ńÉ*īõ ķé õ Q0ģŪ­ōü÷3Ż"ā`×)öķÆåĻÉęį’śö):$ ·įśł±śō¾3łšóäĄļŪßųŁo ß\ßį74ņ ū¹Ź“:Sņī~=ö.5Ėüß6ķōŌīó'׿UŻĒŁ ųżŽ:śų<Żö<ÖĻ쌽 Ģn¾ę=óõ! żēDėĻĶE)čĢĢ :߀Eå÷ģČŪ éŌ'5Õ23ÕęZ6Ųå2å>ģó·)žCē Åķ$ł ę «Ų+Ļ   ō¶ĮĒŚ™÷ąĒŁ_ĶŽļĄEPD+ęåé#ŲōĀ0į ’ŃĮļ4«,#ĒéĆōP²¦ę"åŽŲó ā€$üæūĮ? õė'ńéOż,ō>+!õżVUł=Ÿ¼ėķ ŗė0Ņń ³ Ē&żųći÷ź#¤5ßņęGŹÓ$-5īĻČDł$ćģ)āŲį ń3&ė2žļÅ" ē€ųĄ?åĶ ońÆāZ·łź0ļCē¹ō“<ē $é!Ńęö&Ō9ē&Č2ö5šĶ’„ś (ńė~'8÷W)äō"ūÅćö$ģöåAJöß&N_ŖT6z ŹŽ®äŅ ¶“&8óŲØ9 ·Nd]+RŒ%ęÄē+ł-Ń×§čō½ĆŪąÖģč;õéź$śŖüļ āżóūųćD, Bųķ:»§ŚéšH€ļSåļłē(ń7ĶŪ˰+ųžʳ Ź¶ĘžžõH5ĒHĻŅó#½ŌĪÄG;ż ęzģ !ęŲģŻн;#õšū/&ź Õ#ńCåóņ÷Ś*'»Ü4*Ö×é24r12A H 2’÷ÓŻ $ĒūAĪķżįÜł.ń*RėŌźšø½Öāš×3ĘÄ’ ×’†õqN ČŁų Lč!'ŻäÖE,"šā ÓŚķ¹§½JĻę")ŻūU/>ńė0d×X+æ÷ķčŁ5ężšóg×čż*øä¹,ÉńīÕśKßNš 2Ū÷ü*+õVń>čł  " ąĆ-ņī’Q ģ«d9ļØŚŌ©ā22' śųīÄĘÖĮŃžó®ļė²ÄüśįŽō1Ł Oūļł#½ł+0;š É?÷”÷;ĮEģŽ,£0ŌD»5$Łņ*õ8¦ļ^)Ń[6õē*&" 0%' $ś+JĢ ž¾)ŚÓ<’ķĮÖC³Óś¶ųŲöī żčśŗÖ'+ ±%€č 5 ÕŹ¶&üŁ2üŁöŪż'šŅĖķģÕ'É÷ßļė_ü/µ]7ļń¬Õ" ū’'åŸā2$Öśķ&Ė ļL&64ó€E’-čė×ųć­łžCĶŁõ5T’ē $F8łź’éµčŻŠīŌó-ÓĖōÄż ńš" )V wp3Ī•–ĪķŹPö8īĀō((ŃŻm¶žē$ĀOńšļ€ 2K ’'ęēä-kü‚öŁÅņŽö‡Ż)¼ÓĶJ1$ćįÉŁ> åĄ»÷āÕś"ė1"Ōź2ļ%Å×ņ’öš³ «čé“é"@t+¬?8āōÜŁ' ŹĶš+Į«łb ĒEž¼üżģ“Ēē@ą!6)Qķ+ģ:õ;ķž2ų9ņé āGļ$2`”+µčź’łŖĖ)Å·T@ <ÕDł+Ł­ÖÓ .ŪŠ-óģEų<Q;$6 óß#'ćETåOę÷(éā7Ü īBķļ X+·"?Éźł(č厬ńźŽÕ"ŃC(ģÜż OĒŻ éš ?;5źńż%ėģ’#ĘtĀŽ ‡ŽĪŚū 'ėõół\ęĒ žĒ-`ŪøūWį%¾õ !*8ćŚŪ¾ōęä ĶģRųÄĒž īDłL µį6ęT((ÓÕōßõ·Ä ļĢūōśÖ:ųČ}Šü*ä9&ó ś÷ö1<åīåż#\e̟ūėä)ļ\ó, &Üēß/óą(*Źģ&ąńĮßDO CDļū Ÿ$éĢ=£ŸüāĘāåGĻ-Ę6(ōÉ ¹Čģł,Ĭģę  źFśöcóš łäŌ’äŹé$>®š§ģņE“öłÕ3ß Š++C<Ś·õ,S īōE$ķ&o óā,Ų¢ą#łū=4-HMģźŅ€Aßģ÷šµó ¾žŽéÜ ż²yć įąĻ’ĄĻõ*l“č©®2 āOKž ¢ŻV׀߹·4Å6(æĶ/Vå?Ģöėå‘āčö'×Ńä0Ūüłō«Ų'Æ·ų#> €żé'SeĮŻŃų"×īō×Ē÷ M>ļŃÓ©P¹.ü +xż—%](õž÷*×PFķĒé Ü6ĄØfļ'»¹čH€RĘDĆčķsųĻ!56ā ż#ZĘéęł ž$ˤ5ż&ź²¶±20øÄč )ž£¹ć'ßsėŌ ųu’š&)Å Lõ Ę? Õóé×ōź&).ņļś9ó ņåWˆ×ģń.~'"1ÓŲ( ķ/óŪĒ(öņÜÕƒbFŪóź,(Xæ .į’ļ6’–ĶŚ+÷-ėā}0łäįę-Č7õÆ|0éD'ÖŽYéę9 ąõóŁć&JŠ«Ü(ł’&ANāķźźģŽ“M`ėĘÅćŗüŹäŲÅ%>óü1ÖC÷äKD!+ Śōäź÷­c łż?ĖŁŻĻū×QŗäĻ“¢@##9ńŽŚæ“ą%©GÄóķ'OÆäų’Ūåł"ćęü  ķŽ²÷=\’%ĖŠ= åaŠÄ9ķąĆģ(+Ā!Śß 8 ų óõö½÷ kpž·6 łbōöēé 3/žÜę×?ō܁Ķį ŽāįųÅ’öųįŹ÷ŚĖŪļ_ę%Š[3½ŽéžoŪē%õ+äcņī ä?ŹįüīS7,¹ĶšŃį >Č÷:ū"įĒ,ŽßŚ=óżĀō 2ē+ų×ēāń2!–ŗ\ź>ö &Ųųć9 šµē0ĶŹ4Ä ķcæė(2ś_!$Įįµ-ūęź%)ü€üMķHļŪžöś#ķßÅ×čįķā ÖüĆäŲ ėż é&cņ/8—"Ó*ŲĻ*’bģO¶ź*^ō)Ó4ķĄ2+5õ+ģßÖ ķ ģōīŁö9 &Ž õ(÷ 9ņ@+õčÅų ąŅQĮłėóó2!Ł å OĆå ććāŃķķ.+Öõ%õ-  ßķ !Ķģńõß’Oė#ńöžčųBóļšéė ÓżķļEŲŁó¹%®ēÆūē ēŚĢ’(Āč ¼#ƚėŅō ŗŪńĀ-Ł, ų%4 šĆėīźKNę ģ,Ö6Ųā &CņĘŪõ)¹ü”7/¤čŅÓČ ķżōŅķĄ,Ś*2żźē žŗŖį0/?Ļöų*Ś@É’ä#óP..čW Ųß,ü=Ū!ŃŹ)zäō9ķ2+!+ŚÄģļ ą*ųņ·  ÷] &óž¤$łöŪĖ)Īå Üś·čōŅųī-åżė6ڰ*ŽK+„'bļĮŁ ĖVæėV÷×2ŅŃ3±ÄBĶ7@ģśķŅč Į"š’rōT­į*ųżJéäŚāņ4ĖŅ8! !ź2č’’ė,üĪæ3®1õ &%ټēŗ÷łŖ·Ā+ė.AÅżś 8ōĒ, -ėķŠÅ ęT ēĄ­f=$õšļÆ!¾8żūų5>öB õ@MŖ Ō~ÕĪ+ɲ 6įłńĆņÉłŲöŅĮķ Õ×>č <$žųÖó4¼õąß…/FūČģ**<čŪņ¬ņ%ūŠōLžżń¦Śłś%žö"ü'Ž$A*aīże˽Ęč%žź#ō€²ķ.3åKē #ĒóLDmĻ(-(Üę%ż’ŠČ’ĆD*ńēßŗLćÕóŁćņųūäōķ÷äéĒ A*Ż2õžÉī’ęŽņ ō÷Ķ¢5ķĶäģ>ń3*<[ĀźŠ'of# VÓŁ3ß25P ÕEūū“,ŪČū2ž?,»Ó)ń+ŪŪĖÆž ĪŲų}Ķ Ķ&ÕėžōĀ ÷ŖM å+Į#Āł’Øū4ķōZō2¦]%Ééł¢; ĒĮéč Ż!;ā*)0ÉK kģĄųł“[cjWąöōꎿÕAĖ9VHT2"ĀüĢņ6ćĻØ'įä*0Čóą$,@ŃŪ·9 čāš" (%ēōĘŚ<¢"+¹.ŪUĆĒā:ÕūﲓžFɤėģ#Īō šÉŅaėš „ė#ÓōėŁž0'āWų%üņäī% Ć,ĮŚ`ŅÜŠļ ¼› UöĻėū•_ģY4ę įÓ¼'čųć¬ēöŻ÷ݼ;€äšÕøŚ%£ĄÕ0ü'łF’Ėʶ((Źż× ßīåļÅā3īĄ;ĖĒ~ ĪČ& ?żĄśrī%Eł*Éł?Ū å,Łm§ģøŻ:’*2$ ĪĖė²Ōń7°€źēļŁęHüHŽ= ēĮ!6·ĪW.ÓČĶ)Ū 'ó°źń±łčĪ!ÓYž»¬Éüķ,ē»ōā!ķżœ==łÖfć»ö€#ͦżÕ)Ó&å)Ų½¶?·gČ^xēē<ČŌżGƀ ÷F,’Jµōv3ā…kģĒS³Žø FćõČ,’SļĀČŗŲ\};Y¼—7¬å5¾§)Ī(²!Kõį¶ØŪ4Õ5ö@Zß®v#€µĻįXGCå¤ę!ģ4B¾"Ń €”Ć,& īćūų`-ÓŲfÖ Š?7ó',B¾ĘšōS#Uōp,śćēW=ś#Ś+4ĖąŗüĀ ?šĢź©ĮņCćʧ֮ö+%øY¼Ę÷ų #鏟ÖēöB "÷ń±Ųė÷4č"ū6łFĀģķ YρŽ!:ų :ēĶFŽŗ°/Š%é~øņü *=Ó-ĒÕŲąõ±ņĢ@#³2éK āOöüŹ \īšėę-™6ļ~®Ųćóā³ŻžPŖōŽCā½ āA8dś łÖ @9śčß ģÜĆ"ź$æņ$ō(¾åC8 ēš÷óūF7ĢAšł%¶Yņ4 ,*@Uż8īœ śÆėÜĻō²jMÄĢ×Õ ļśčęßīå/łĖ «ōžėōŹź BKį/ Ežź3é#¼X@Ā-+ķ ŪÜöå,Ķł=ėØõżĻõNÄ%ś 4ģ šūšāS 2+ >-ÓČÜšų+Ó0Øóż×=÷õžųĖŪÉĮ=žūõćšß(× ’*3R @čŲŃśł€Rʹæ$7ķŠ—÷(ķ ųÖß!’ķ:óõĘ!źĄ ś˜Ö辏6 HūŃbłÄÖhHĀą‘Ē„š‡Ī; Kóö÷ Cö?l׳ ӲШĻÖ½ńś÷Ł-<õŽ«1ź¹ų¶ł÷®ŽšķįÅ8^nP9Oą¶)ęTÄģ{Q〽žį!ēåĪ©CūķD¾ß)Œõå& Åö{ 6š= ķ ć*ä õ(ņ!ł ąOóĢ)ó)(„ņŽł·Ųå2×ßG>ę%;Y)(ŽF²’6G ×6é.'«’ ēū&ŲĆ#Uõ»®®<Š1åėō”$8‹÷¢C¢'¤"Eś5#ńŪčėµ9õāń0•ł*5 Mü7ŗB%ųĻī#Āī»Ć¤0MF2÷Å]ähś2DĖÄ' 蚘ėÜżćÄÅäÜĀ’÷Ź ¾A?ށ`O€%U(Vā 1%–X8¢ńų6ū €“čęNUÕŌēę-¢ūA±źąķńµ÷0­€Ķ0ļ#ņ&5Ćų)(TŚłŗQŽÓlνńóāńó2Ź6Äõ:Ÿ×åłæŽ{ŁżūŃāąśµ0āźóŃÅÓDŚŲ”ė+ł€šŲ,š’ µ!ėóÄL/ äē?/ ×ÜtS)ž¾Ž$ØD]ąOč%¾ćÓź7ųø”ü°ŖĀi.Ž ¼¶Ē!Čę€AüĢCöĘŠó”4øŃŒš6Åš$5<'ī #›ń&-ģ1X¤ģå÷ĆÕ?õżĖ#ō,ś$Cŗ¶ž"¬÷įęBąŪĆćĘļ+K2ā#Jé >Å$žOȦžüāå[(¦0"ųģ )%2łĮĪśŠŪ2õ õē$ 7urŁ’åæżźŚ ˆ½’&éŌ,ūž ē•„SāĪ ÷Ęöø(pŚś*ńśõüߊžēū/Ō€éŻ?ÖŽ(:Wä&’č0÷0+5ŚEÓCĶ–Ķ(š#D’PÜÄķæńō=’ +÷ nĪD€8Ųņ Ųż,46 Õģćņ ģ/* 3¹ē¾ōĘł—üõ,ķķū?LĻņā)īCę #! ͽVź ×(÷ Ē6o˹5Ä·ÅL%ł$Mɖ².,Ģč `dīņŃńŪš×.Ļę¦Ō/Ń8¶ąąÕ·.XĶ9 Dē%ńRh(ņ~ĪNĘŗ’ųP“¦ąUJģčļųMēąŁ#=?Š_0=)šéå*RiéÜ2RČłDģÖIŻYž佱 Ōń­+ > *$(J)§ó+Ų?ĖÓä# *+łŹééüD’ćŪų[ŚņäóėżōåŻ7š=ßō³ ėū"ē +įēŁń@”ś;»Ū41­Ņņ9Õ9čņ!łKüīžū>éī ’'+ÜšąöÕČĪŚü5ę&įņŁŪ-ć<!;ź ĖQįīė åSī:Ł=Ąõīü((8 ! '½6Šßlå„ęÜųŠKŪłķLģ7 ĖłCō!ōϾ>;W¶7åų $+"EæÕ"õŠųõŅÜAĢŻćā@/ģ8 ę£ō÷Ż ŗO-äR׹-7ÓµÓāW'õ>2źJ$ļś kŚ)ä ī!Eą× @ģµøū żŃĘĆ6ūķ¼£š¢Ó+%œöP .öķŚ ūĶ„ Ńś,-+ž€¾>įŹ-ŃŽÓīMł 5€÷}óy¼EŻłłŻÓļĻÄķ’ōŲæ; !Ļ$žķ(ų! ¶L$ī U9(™=¼Ü„fį*ūö Ęk© ųē¾¹ųśŻüEųwYĪūū$0’ķ÷DwćōćĆ(·å$Öõ,øŽõ*Ģ$Żäš$Ń5Ą9č0ų+ͳŻÖü Ōļ‚Ś<õ#évģ/ąńųė°Äš’ źõÖi°ē 1@źĀ°å#1Šę %AŠ ¼]ųŃŻėæ%I€ķ(Ńū’čŠéŲ&Śżė®ųĻ7ž¶8ŁŚ³Ččīąöź żł)+@ś·å#6OėżLźEīļ#łżŪŠäŌāņ ižģƀ. āõŪŽ4ą 'vķčīõéņYõą9ĮŹųå»Żõ Ī"$ĮŗöŠöū'&€»*&Āāi&'"å#ė G Ķ“§I0ļļā;ßī=ė¾äÄo1īįÉ\ģżN€ųŻD(, įź3Ž PŲ)ÓķŌžźFĄņŃęõīF#óńģßåŚõ /_¶Jķśū% "ā!Õ1’EķßÕįćŽ,č.!ņ<ōŚLōīŠ# üL-<+ļžäŁĆ×Z= 2”5«"÷š>Ź Ü3żūAzń=üĶöĖüż ėłųó’ŻåMšā(ģ%:Ųņ¾ü%ÜĪÕćĖ*ŚEŲęzÖ(+Ź%DüėłĮ’7å X1ŌÖĆdąĄ$āKōŸ8ŅĖĶģÜ¾ŻĖ(€õł++"ał¦Öļ9@ öž .įŚųĻŁöźżŌŅģ/ Q5ēół/,$åśF×¾@Ł!ļҼ>%ųł_ÓŪŹæKõņ"ÅÆóÜßį֞ÄģŽŚžŪŪģāėÕ+;ē ˜e€ü' §Ķäś@Bś”öĘņņęž0Õä0éŹżĀ¹čā"ÅėŹū’é3Äż&żźö+ģõԘ čæ)I(³įīšRęŻTŌGJ•"ķ_ŅŚÓéFąź ŸüÕjĪ4üC³śēI5ÉóēJ€1@§äõ 1“3GųģĪė°C 0$ #Āü×$ 2ÖŗĒēóȹ³į8ō÷ńŗcńįŪYśUsųČ"<»AĘĻÜJ(ĖŚīö I4>/üK×!ću0×ģ˽%ų÷GGšēū%å÷%÷,Īį ńŒž± ćéĢÉÖ"&ó+ä5ęéöÉšö'÷AŠÜ'31ņŲĀXTÕ$ĘīŁž" ęō2żóćG#* Ü!}Ś-  ńäŚ-ŁŅź€śį!7Ņ&Ņ-' å3Š")ü& Qė›įõįÜę#ü¬~ó’įņEœ16žüļń3źW“õ+(7bŌę¶ čLķūźčŌ*ē€čŗē’åļä  % ł(Ż7üõŅ=©ż©ė÷€Ö3ż “Ņģ'Ō<ś²żŅ6E]ÜßÉŌŃ0ĪŖÖ7Dšµčž½ę>WHōīŻžŌ=׿äįķ5ź±'‰(ćé×Ųŗ÷źģēüóčßŪ¹õK½$Oćž ō…<ņė!ĖŃ! € źėń¹Ł)ģ¶ ÜņȬŁńÄØų¢Ę )ėīä,”kēŌÉŗŽž ĢBīó4ōóüݟћ„ńŲHįŽ÷ õ÷_š€Ńźž !FɕŌ׌ōń»ŁńKŲč8ŽõšMą/łśü7öūTż9$?ĒŌ!Šó’\§%ū›0’Ć ÜĶ;ķ°$ Ōę5ųŻč\#ĪÓ×įźģ üŽ©Ļłö>ņõģKä ž+ õŠŪŽńé Ų%Q"0ŪŹĪīŸ Ś „ ¼ē’Q5ŠųéMHZēäĘį ņ4Öź Ōų Åöģß+øÜĪāīÓķ*Ų÷%ĆŽĢļžŪŌęļīāö"!ėÓöū!>ŻŻüŠó±÷Öė食ä$(āļNė4öRīń ä¼ō × Šö×+VÖŽäēŲźčķčĘēé’Ą Ö  õŪėūčĒīģāōžŚ!3 §ÖĶŪÉ ż3ņõ÷RųłÖ·õ9.ėö"@½ŽŚ!ź’;ł;šĢ7$õāżßń(ĘńģÖÕžńHŽ Ü/3čņK$ė€9čc1’€ÆĪ€üGėĢūž“IQå6xĖRžHĪ“ń¤HU:f€ņ- h€.šäóŽ:~ŸĻ%…Ń Žš1˜e!Übą\8½q\h Ģ "–ŻÖ…g@:l!]P˜ĒĀ50Dņ¤åµNģ’€ė ®”ĖĘ ōH шŅߔ€ļNŲē›?ėšķ©^€ÜŁ–µzM€€"ά4ˆ HĀéE€Ą€€ēų€c,½;¤›‹ż:>_ņąŅ$€īīżü7CŻWäCń='.2{5ē\^ČĻżżćōÖņ č ķSõęķ’śŽŃāŚ:ē6E õņŌIDRŻėĮqL|—Šö¶;¶Śš(DŁ"4ā…żł>8$ūüõ%ū:źČĮ$Ė:'Bū!āģ ņRēł½Ä÷Īåć# żŪFóé PÕԟBńČŅ 2 õNTÜ’;*A÷źėüAźļšķ:½ģĪČųš *Ķš:š ēó3 \ĪłŌ Ś ÷-ŚŌ2#¤ąŪ8 Ųž³'7 Ń$Ś"+é<é æö$ÉńŪ üė× é(šŽÖŅš Č÷7ņųŠŚ’(ā ņ“¼ų3Ą0-Ń ÜżŻE,Ł čć÷üÓą)éé !§ &ÖóįłŅ ąłóY9ļŚżōµń÷Xą0Ūņ1 ļ×\ ­ āęą3F 6°āņ-Ü18Į”ł#(!ĮJļŽäPš8ĖęĢ€`Óų#O.)T·‰O÷Ö’ōÅę#ĄįäēČķ3ōīåāłļOó0ł ÜŲšØW€!ōĻHó-Æėė&õāõŲ-Ķ"ų’ 5’µ6)ė ß!Žhō1ĶäüõčKF.gPłź ó•ÖķŪ #Żü¼LW}ģšŲTó3żųLčā^ģŪ+. ü ņ#ńIē#ŠŁ23 ŖśFPņ÷ļõļāźSę.łūKĢŽ(ó*++ł¬ń ųļŁ Ü0# C$4AšŪ œ »Pįļ0įąÓHšä’ķ—ś ž(ćä/!Ō öīuļš"ݦ ÷ėųčĶųėE ŃķŅ<ö“7-ŃĻēéĆĄ’5ŗéüß( ŠĆ#¦ū%ĻŁē½ķ-ŁūDäÓ D 'ÜąšÕ/±/ D,Ōąņ2µśŚ*©#Fłāł%€ōsķÖVC^9ļųÖą0’+pé ™ó=õ³ķ÷šāŗŚGÄ?)ł,LŲökaą° å!ä "(GżĪŚßĘėŪ¾»×5źńė">ÖB\ŻCóŖ«Ó—¾$ēéč7%&Ą÷Õ'ņļ{śN÷×Įē·ĖĪ Ų_ĆÕś@#łźźń¶&¼ē"識ąÜĀ(ņé/B €Ł+(īĒōĘÜL¹³ÜėįÜ āń/% ž³ć )>Dś= ©Ö:4#ōńö%ķ-ÄüöżĢŲ’ŅūTßū *śÕī!!KøÜŃ?Ģęōćģćżßń&ž@ó *ßæ$ĖŠļŠĪ÷4éķąČÄüß*ģF7ńšūü0ŗÜßåįÜų'Į· $!āāēę8ķõ'äнD āߥ!ŃęŚKż»"+ŁÜ Ż ?°Ņ ¼7ĶÆų+ņŠ0ź#3Ģ Ź÷ƒėó1Bõ5Ö ęĒ’ņېšLßÓīOū¦ųŖ Ń©ā )źi(é*ŚMéņE€®<®"žŪų1Oć~ėē#ŽąėBīķŪŌšWčåčõČķ 0O5 »æÜ ³ å^Ö-?Ŧ!ٹžŌ * 'ŽĄM̵×ńņIš"äIH*ö&ąD”Aų¶š\·.Ģäõ!A Ź ¤Ģ:ŚŒ Ü·śUró"÷įżóź¾ 3ģ¶žĻį9ĢņģįŪŃÜ6ø  M\'%ö7óåś RæŅč ÷g* ŅńöĒšż?ų E&ČJ čļCāL%š,åóĄ^öī•Ö ü=)6æĶ łéšGåŻĮĖĄČ0ūčÕ ²ź7<źń‘Žģļö&"ĆHü*Īą,Ō6P/1·Ž‹ą\ķ#Ćųšī„ż͹įŁ§•Čā-ņ š’Ķ@÷±ČO!üź7ś3ŌčԚüżż×ńßüģ-īööś%Ū«1Ę(4 ¹Z%/"! ŠČžH Čęļ¢/ōY½ õÆŅō°ĀĒńrē%&ō?čOŚ śó (Ń?ćńжr żc łņC%ķłJŹSĆØõR›ŅĮ=ĪšóҲ«å·õĘ’,ÉčÖ’æé /R÷æč“ł$Öężjø 3 ńŖć āīšżö2ŻēĶß×µ²Š,łłĪŲó '°įż½P»ü3įāó!‹,¢ĢŠŪ+N õŲł£ćäöU4Aģ Ų@2 XŹI$ īń Ļśģē¹äŲę)IśĘĻżłÕįčņįüR Ūšń §ć’CpęąķÖżčÖÓ»ŪŻļ+1:½MEłöR÷“#üJÖ+ö÷·1ėĄÖøQ>fĪ Ü 2ĶŚ·ĶĀļØĪųēżķ¤*!0 H"/P5ö GTėäōŌš_*¼­š>·ēמŚõū+Łžć ß Ö¼Š#ēą%G’&ūĆŪŹķęĀå:Ńöį&Õńžź"ÖŽ(¾ <ć*³§G=¼ ūŚŲ -³ČE’1¶„Æźér.“(óżūĀMąź³ļõ.żõŁņ ŁöśśŪ]ŪŪ×)ļ&čé ®Üó. čeóĻ/ķé<ł *äÖŁłč“7å½źŃ8’Ó0jņ4Ōrŗ3?:³āŌ=å Ż¤ öŚ××(/Üą%Ińøäü?ó¦Ńß½ćĆšäS5õŅӐśķ0ģœÕPń÷)|Żā ® ÷ ~ĄģåźĻ* ż©Ż)÷7ŌĆ ßėī,ęåĒ€(µSĶ[ļįŠ åD¹zø'Ėņūśdä?±ļą-Uʋ) łēż4»õ×) 74ĪüFÖßī=ģŽĮĘ 5.Hūķ1ŪŲ$!Ī2ńĆż ś-Ęīń ń<8š×÷æķ-Ģ-ŽwķĪĮĒ!ŁĀŒų$ļśāł$+š=DŻ&=čŁ6Bž„üš4Fņļė×9[US?ŚÖ ū9 Óķķ+ĀŠłŽķń( šń¼ųė)ń ö'ŗ%ė÷øōčä)ÕEżęP*%­’ Ķōāć* ķ7‚,õN£éäÓł Ćš Ž3üńĄüAŻŪņÉķ[å’F6Ģ׌ńė6 Ņéń;ężå½ģUõĄ6ČÖׯ”+µéČĶåē7J6Üē1ĒŲŪUÆĖ8'I ÜĖÅšW€āÉńž^’柎)Ó73 j>£FóāQ&Ļņģ "¬ń+ĀżåŽ šųä#ZÜ6"Æ Į÷Ł'Õ@ąž6~:"9ŠÓęē)Ŗ÷8ųĀ&"ś)óśAG"9Ģį7Ä~ŅłF«*ž )/+ĘŁš§BĪß2ĖžĮā®Jš:”Åų8ĮųŲńĪÖ6%ę-/1źĮ/$Ģńį $Ņ1Ģ=½Źģ~Æķ’« )ń7ćį="Iæ ōėŃs<ÅĻ ¦żSŁž¾äīłČĒ ”Ž*æżåčKų= åāš Ķ %́ēĖ ŹžĒÆŠĪX"MŚČpÉāūÆāŌ©[š½g¾˜@“ĖŻįō€ZŪøõ™öYéĪ?“ Ó±7ĘżīÉŃćźé“žŚ%Õ?Įų©į“ó#1ī#ßD!&+÷ ’Č3ĶžūšėĶ%9ńüĢś’õõ żõņŹÉ=ŃŽó) ó=×ī@üēńųų é×ä ½:4ŹTŅ*ē ÆųŪ6bę6ļńč 4ö żŗł,ęŚ'éŲą "+łżÓ÷½žś É"²½©«ó" †ł@Żś'ųõųŁ2"Ž'ĻŌ̬ŹA`öõĒ'ž%ÉŠPīĒóŲźKćOž&T(ąūļ*’€Üą$›[ õؽÉī *’ŌžŽŽé$üāļóēĄO×P€Kō2śń.× ;Å^üäĶįĶ)łōĻ"ņ 0ød­ŪūæõÜD_ųŲÖÅčŚ5ćŖĪė(šŻćD¼!H »,8(žłė»ŽŪÄģŖńÆ·DųžńŪ.Öśžųģ÷öüłŪŅźČ ō+ ,ĀĆŹ=ŃļÜŽÓīŚ(!;ĀōÕž7F» ;ę‹f8Īõń÷ńŚīöš ėņ÷ņ¶źü®“łõū;ü(-÷b8ö,ÜĆO īÖ č8>ēܶõ('÷#.kG9Ė Śä0= įé!ėҧä)=¶÷0$éßZĮ€ó)ąÄķŚåš’ę½äŪÜ6æė)’óų#žŁģVźĀčų’!ÆśōHų’ļ 5łŌ³ĆÆ %(ųüóŃé:F RēŪ/$ęļÜśĀś’šÖČü ņ’ÖŽŚµ ń\ķķ@€ųėå.YO'½äßÓńÓ¼!8ņ,łüĀŠūŃ2ļK&žć¼p2XÓ %–Õ[Óż½ŽŚöĒ8ōBŻ+I ķēßäLÕó/Zl7 Ē +õĒ2ķD"ĮŻ03śBūŹ®ć\ ’÷Š”÷Ļ õ üŪ÷0Äżė’’5:‘Ži KÓ[Ķ2›ŅŁ7ė"ÖĖź3āä4`čæō^8½)/ʆJ— ·qķ ­äŃ&Eē&:HŠĆ+×¼÷»óü- żŅŁ $,ļī ŽčšĪõė ÓģÉ(:% '=ŗuĪöŠ ųЦėüš īūŪ ŅĪGö żāūóOĪFŁ į,žÜĢš*ś: ķŚŪš7ųćŪ0®Š@ßĮüń3 ó' łY ÆĮī~’ å7Éäßė"šĪäģśĘI±µ(+ģ,% ģ” óø5Ł+ł_ ö D9!8Óķ¶7Öšõ$D­Ńś /ļ'ź ß>Żō,"č׳ Åų*ü>ߢCā'ōOF žŪ!Ö$÷ÆŲ-?žĆųšųę+·ģī7#!ó#łß5öi 1šĪźęź/!œ6ōćÜķżćę Īå*ļ$ūŁĻńß÷Ļļ>6åŠłīŠż'/±'ēCŽżż<é +AV2įä Ū3 Wń8äśļü>‘ö ŗ Įę’-åŠ ļģØņöõ ų+ ēCī½4ŪĮHū˜6ČsįŲ¼ūRī‹ %×éÄš2üĪć¶Õóāö.N×Kšńō æ0¦ųŹī™6‰ŚĆÜń³Śéü÷k.æéōÜŃ6S¦ķ"šzÜ8Ök ĶēĶ5%į÷ęHņ8Īõ>"Ŗōųė5S–"-ż6Pō!oģżÅ0ś>k箌D„« “īߎżÅ Ė2żńSUōK ŌģI59å×ŃģF$š"ł¶ūļö%ł> Ęā īķ¤śŠO· ö ×ļEŽ“ Ģóü!«lā<JXųĮ->ŻÜųŚŽ%źģż(÷'a. ģņ×įūÕ1Fųš'łAĆ®˜óß!õūB·źĻ‹’7'Æ@=Įīźną÷÷łź{Nž6ßĶųš"&ńÓ¼ÉżŻ4,žęäĮ$/Ģ7$A ēģŅ)ÜŚ*%OćĒ&mIß% īCļņ ē5ą*H(ūóū č’ źįÕ ęéÖ!öįė Śź×žā0=U)šėųģÖÅįćģŻT - 5}ķ)%]"MLTė <ķ-Ūżé%ŃAМ’?čŠ Č÷67ēü8żÓÜńÖÕōó Fé÷Tāó?ŚŲ©īźH33Ņé$ūö9 śŃ ŁÜ:ļF uīĶÜŪqņ'Ņ õźó"ź×Ū?ł#¹ēū)ßņ™ š/Ü.ģśēÉźĖōŪż#łēŪAŻöļł"Ū ģ¼ģ×0(Ē ÉE ź#Õź=i9 „Żõ(ėÕŅšĪµśé£ņ’Żńöŗ÷QR!:ÕŽņėłp9żĢųüTāņ÷āźČÕČ ÉéYš*nē *’ü"¬Õ õ!õūüaķHėĶ+ó ōtE×.»śHóŪ Üéī;Ļźå“Ģ">1-īźĘĖ’ābXņ ķŚėĪ&Š€×'2ßćŹēäĮŌčN²žŠĀ;æķ.’?:•0źž 6÷ÕNĮ3Ā; [.ń"õøŌń1ģŌ&ńŚŁęė’Ī»ńėŁ¹žÅŻī÷üö Eu,×Ėó«ŻōēŻņ€ /%ĪHōŽęŻ7Įšļąż(ņä,óė€Š3w÷ģöļ€Ėļ4äīÓńóÕ@ō%J&49Q ,±žČ('’¾ŚŻł/ä™ š¹¹ŌśBS’²%ķV)&輗AĪ9æņĒ0^ūŚńųÆĘś­ąŠ”łĮ³ÕÄC #ūš ź KѬõ/ō_ķĖõ$[ē3ņĢää'ąą]qścŃźžµäīĶåLłøŻ eŚ0üę= īń1ŪVźųłū_łŗ("į2ś ī ×0o/ 1_Ó ¢Ą‚AżÖūčģ 6ż-@AŃĻ,Ę7ś8ŁČęé>$ŃOśś%%ę!ā+ąš ½üĻÜś(Žō!I OąFGP#ęj„Ųž$ļ˜Śh-%Īž™gżčäąĶS£3š źč->J±,²Ź(żł)*ŃĆń—ćśļXģļūo®ļŲ Bž ŌžØµÜßÅ  ūȱ9ŽķåéÖ ĄČ#EÕąõØŻź 2U&å9źÓ7ņĒY6ńńJńłī*ē`Ż3Ī€ßļ[óõöēź1ūÓęg’ųČĢ4ķ’DōõÉŪĢ śÖķ͵S•1ó’ź}ćŸ×õöü½ė3āįŃ1„7üÄ!±čéćr ļ( OŸĻ9ļęåčŠ+žńP Ųę;ēūŲĪö6éšßBBįā" Ģäź©Uźõ’ŗłĮżā Ć}čń(ś—ė,ImńĶ*ĀY`®GBŌ =Õļ2ŪŻņł(Ą5 9€óõAįßŖä /ī~-ä_īQ- ōŲ*Õõłõ%č÷<©Ņ²ėŠåņųķ¹å-īA'h@’źĢ5Ęē05ō!<’޽Čü)0IŲ–'"?śė ’šŪįąņėMŃ"ÖCtņ/ įŖŹCåF·O+śæó’ł -Ā %ų:31ź/>6>w# "ĶŚX¶’D®) čóõųźØ9ūų¦Ģe!ČÓ Ī(°± ä.¬DÉBž):Ü×$ńŲšīāÕéŅü·ņļ% 'ČšŠšŁīō–89’3= ’ Y ½õņ“ÉÉŚ»'9ĮŁÜ ²ńŚŃŁJ#āļ ĻĒč- ūįž R"ā)”Śśė4żĻŃöĄ6²¦bC56Éń1.ōQß2āÕķų#@īå)žõß’Õ 1ą5I¾­Õ!čŽČĮ!/āÜ#*åc,#ó䎢 ńŠÜńŠ  Χ)ĪĘ0;ēńż‡C@«Āł9 =Ś¹Č½ĘžėŚ3=ÆīÉ.ļÕŃ%āĆßJüž\ ü%É H¶ē)äŌžĪ®@0Gā"-žµŲĘ Ć9O2 ÷(Ēł÷k>ÅfĢČ2å žBc('ķüÜ.żüU ŻĪ3(b $aQŒ.PÜż~żGČ*ģYūÓ ö?Hó/*t?4å ś@#2 Ü’0$QP"† ŹĻ<Ä·2#óä¼ą #"Å4$<ŒčöÕé ŚP/ēī°Bāų ¬öŠķä4 ģį$D5ü+½!ółō97īF)4ųeÓō#ūCāźõŻęŁ05Õ "’ķė ļ-ńęüéīüøģēõŌĶ®āįIĖĆ'ėčņ"ęõžē5īžēūčĒ7öĄač“" ŁŪų5ƱKģüŠļķÕ²D %O¾_ąßśź3ė’ä:§;ŅŚŁŪAč $ŽÕ&²[ųéŽ÷_0$<Ńöū ś3Ā&R*šŪ˜žÖ$ŌĀĘ?(I,š _ž?ĻŁųŚ#ļ’÷š ¼ŠŃ]Ē#ż.cöįĢ+%ēā½)¼4,Ž2Ė.Ł ä 'ēķ&ĒŠKńīegģåL [2ÕJ5!ś,Ī%žÓöŠ)ģÕÕ’Łņłõæ÷Æū$ÄūéžōóŪIś÷ŚõźŸģķ•Qč2ķķ¹ä *nō¦6ó(Ļ)*¼mgŠģļ&Ę}ē5Ų õīV.éŗÅßY¤Ķ Ć>Ńńźcå GŠ×Āé®5ōĀ.±ć„ń§‘€ĶĢŌĒųbę³ļąžį§<äéžś dĻż'¤Č  (ż,µ %łˆĄ'ńīVµŹŚ>E÷Åą5<.š÷a8÷ėæö’)>4BOnĄ9bļ} >Ć$Č<Æęź.ó+ĀDAåõ!Åé1Łł>@Õč™ ģc÷+ĢųąĘ 4ĆŲ’ūłō:ęążäłDŗ$Öēö)Ę$üä/Ķ+*ĶśØ1ų ć*č"ļ÷ó÷üśņē»źĖżÕłĢ:OźĒ (ųŲŻP“Šßļ2éäO$ė¹źėŚļ#ś^Ė -3T­į߈(93ąč5ܼņ"%Ó%ä>%Õ#žó Łī !öč•ķńč»&5Ē1õPßī #ōõų!P’%Ć Ł+Ė£#SĻóü5Ń?ŠųļæĢĖåćć6īØĢŪ Żļ-!ųļ £#Q²łŲŲå+ńšģę½žūćłČSųģ żæīé3?ćźéó&į Ņ“)ņ£' ńD¾…7%\)>DĮøę¼€éÅčįIÜzÆ÷’Ä2½Oł0ü,łüŪ <ŁĮ„Ą3Õ?žn=„šĢ)®õ%ó²čOŽö*éōõ õżŚõśļō 0mĻšÜöźŽćóʱ 6÷õų4J«© żżė Ęūü!P¼bO3ų)C÷Ÿę8ČųŅĘV»߬ś55d ×÷Ōģ) ė1 łv-ūąć üńēÕėī,ŗ Äł«S,FÖ7÷N Õ"­# ŲJ¾-8ö ī 5 õ.šśāņÓĻūą€öćīC€ū!Ł@ōÓĮ š ļWÜIWļĻżõõč:ĮßŖŁÕ*ŻÉšŪ %ģĢ=ÄÖ~,é#ŪŃß`ģ¾ń;6łĀ! źł Ųŗ.2*ļ ń ēJłģaAŃ üĪŌūņų+śū1ČóķīNķåļņ;ą2ö .Ńeź2žĘéģźõūīņøPāōŌć‘āś0å»­Ał ķ š"öģŚÜÜŪļŚ7Ī\Ś ž ųē9 Ćļ3ÕŻ¾Ńč PžTć#óĆž·źI"ž±Ž×ßŪó ®‚Ł|ĮĮßģBøŻČÖŪėüĖLńŲ3ų>ēKĪŪqøP&ŹŻdüs‰Æ¾€1‰ żčõņ'ŁĻ]ėX'ū €į€āč¼'€c6Æ Ņā<ņüø÷!€:&ß+3ŲŁóCŲ׬R+ß/1 ķæĄKčč ĖV(Bį-ƒ6Ū€Wöėė#Ķ~ū·“õ¾ģ’&‚ij~ßŪ:‡ś~šL]뀹éö;"Ńpó’»H)PęL÷­÷įõ1łX*ęš2Ž-ŠŅ€· ŚE ¦!/Š>ł0.¼õżĄ ģ<’5Żż“ĪõMbų5QćܽļŽųĀ2ü„ļn{ŽŃąĮHābUų%U6 )ŃLŅĄŹ¢Ļēī>ąŗ,¶®“OŚŃÄ4½łüŅ- ^€Öē5€ø±ęčNóß2°æ¬ÖŽĒ•ūT=BØČUFߌ*OJéÕ±īMįöä/2ŲD+!čöZ%ū:ķPć Śżū1ĢŌś ßx<(óGū õFÓī?åū̱žh  t &čI0Ć4ąICÅS“ŠĢä×Ģ—«ķĖŪģaHŅš#.NĄóZåŻ#%ÄݰēףּžēA^šéźŠAÅ?Ż'+ćüÖŻEDÖ¢ŪØĻ9ķĖ×ļ2@óŅzŚ÷”Ū-ųļųńŪæČł4ł¼ ź$„ŽöÓą0āōżBŚŃŚOĘūł)õåHÉÓpVā26ø<ōāŁóŪčöĘĶ÷ķüļ%)!ė„ü3\Ó¬@505)ē¼óÖ7éCč5“Ņæü&Ģl,šś>+AĄ]12ČĶ,čģ“ęųÄĻą8*‚*ž÷ė÷"=ä#Ū#&×7Cģ #?*Šåż*ć*HÕ×6ģ]+ͬŁ$Ö¹Ā();") śäģŻö~Įčģ6šT1ćūĘ[÷ōźėźÉ(åå&ų÷žßŌ2óŪ9Ģ@²”=”ŪņĮK Ņå"Ł] *[Śõ’ ń­å ż ,ļ’ 6åéō ’Łåč÷ó éß Ż°DöšŠĪū÷ć® q!Ź’ ėź7*ÉēģüēE:Ńą8ĘĢW6ŌÄ ½HĆź/Õ.*ŲźßŠ'#Sä AĮ'å%ö >óøæŠźą³IÖķó©’6Č Ń'(į&ę=#źWüöż ’ā åõ źśé +Ü1÷Ü ēģ ļó’ķīį ŅšŪ×ßÖ °ķż Įż4=ē/śLłš ōśGžī+žę÷&Żęš÷Aņēėéóžœč#(A"ļŲ7&3Ż[Ü×Õ(ų+ öš ńÜ Ō łÓĘ9ūųįŚÄń¢8 ķĻ!+ 8, DŻüóżę.óžtxūpņ7āŽōēõ· Ś ąū ōś’Š É Ö飿ēś!żŚĘ2īė#žWµ ēéöžļūŲóōõß%oż?ōź Ć8.Q.)Ś#¶Sńšõ"o;„;łBé*Ž>;č Ņē' üąœŁ,ĀįńńńöĶā-0éń.į÷C¶"ųļ 3!ēÆÓōŪRģ »é "ąĘ÷:ų’śæ >ų%čźušńC€¶$Ä,Ž7÷’"ŪÆī¶ėŹłrų7!%’’¢ģßäĖé *āŗĪČ1-ĀJ?÷¹_īž#ēü!Ęķēö%ö_ą+ŽåŻćg r°æķ÷å:tčÜę5ęč*r éöž€<ō>)§#~µČ OČ æųč€ÖŁ«½0Ų>čīīJG%IŁ•éō]äßąP1ŒēŽąµ?×ö5ļ±Õu4 Ąlš G€!įČ(ö įŠ)ö>åŚāęßįå ŁÜ/ß÷ź’UĄÉäų&€ ŹĢ)&Ā%Eļ3&ööCH“"ńŹ’ōK!Öå¬Ķū.šļßä¾ü*ŠĘ²üżéĘż:’é#ŽE*!ĢĪ* ÷°óų° #õķō·ÕĖŲ:ó×ó»įš9ÜŁŠ*½æōõsÖ"ō)EĀĆÕ,õųßōżŅāŲ³Ēä ÖPē%±!CŅčDŹ)"=Z&üųó’Ö@ į æņ·Ę"øBÕ穿1ÅŌaĘņ,ź›$6E¼#ķü,äē%ĆŃŚŸŪńżš`Æž{žŲ ä ū2ä%Äī)$å)¾ „š/øP¦ž·ū“ę Ń-7ż=ü Ž/ÄPēķ’üü''žŽßõł Ē łü/ä¶ģM÷¹ég|ąū+7ų žcÜ"$ėCšÖąŌö­üŠØ9ѝ3ŻśŪ;€`‚čš%+A +kÜlÕū€ļži :X/$•8 ņ5wÕ½ó ŻŪõpõ48!5ÆÓĀ5ļčń&.'JLÖīöAö č")8W¾¶ŅåÉŽ ģ)õd]xś4!Ž <Ū›.€üź 5ż*¹* ųÕņŚŃź€ȐĢyžŪ÷Ń5åcž€č÷' Bģų¬=«ś]ļ꼎j1Ö”`M;€ćłģĖ 'ÕDõBĆ 'šõśųėśé¾¼ü óNć Żų'ļ å0 ŻūšīŃą?ßżü%Óćū%ßź/ŠåłQ!Ž#ś¶¬ī0öAÅńāķõ$ńź."7#:׳ßäņ]*ų²Iä 4Żą ÓÉÖõłžųśTī<×ćF³’p ޤłóļ8ķįā ņźų į#µī ųē÷āłö Ēōśę0Šēōį'ŅGłöšåąćZüą%üą üźųżZ š÷ 6ÄÖāåłLųų#  éõąź'üūņę .ļūģī /ĪÖäį’ ŌŌé ųšżēń ÷Öóō )ė""śśŠ!ĢNÓéō#"Ņõó:ą[<1ėŻ&õń ÷ļ ļÜąß÷2åŻķüī ćŌéÜŽŌ’Ś9óÕŲż™Ķ÷Ļł% ü ęœ)\€ųąbŖ¾»±ž”)³€ż=;ź”(ź^ņļųqŗó Łź.¾=?§4żĪĖKZ…Ž09ąń"ģ“=āč71(e©5ņųūņ6˜iŌśĖUSīįNšĀ­+ŌPÉõāŁķ Ū<Äį[$ ̳×ņōš)DōćäĢŻ%÷ܱ<ķ Cģū]ņŃŲąō*S–ō&ß×®éöµÓŲ¼ąŖīZśl‚Ż%õ7õ2’īŲ”ėĘ$Œ&÷E `ĻöģĘČū9ńć ¾ņ%ĒŪ5čżćŌüóÕ(įų±ĪõÓŲ U6]” AæÜēžųóśˆ.ĆZčKĘÕJ0 ūśŗ3 ±=Ā2üžŌ€ (ąūčŖ>ż÷ ֋VÕõ÷ū=¶éLŽŪÓøųóÓ WŠŅčćŪųČ,Ś%źĀäH!É ļšµ(ź-š ÓX÷ź¬ZĶk&ģן[ńé"> ˜0ķł  .ū%ü+åæ­^ńŗŒ ¾Wv2åŽÅģūŗP%µ¹Õ½9Ų_@:Q@+ģˆ FäŪōx¹!%^õ)Žż6ū"=Ń*µą#üąńē~ÕDŗū'EŅė »4ģ:Žż:%Õ;Ó %€/Ēķęųēó÷Q98ż¼å’čģóć²%5ż Ų÷ōźŃō ŅśņóNJēō"öDæł7ē-ųńäÅõ$ēāÖōŁY>5L:õżė”ń©įō"źų¹!_ūąŚąöĖ”ī ģ}ęóÕ :ÖÕ9Óć";ĒØØØl±¤śįOēŲåąĖźK&ŃĮåAį+ Ć'Ś žžO¹Ō<⨩ź F‚ !"ą Æä%"Ż8$Č ęW?ü-õ°źąĀž'Ęü¤É-“ēŚ Ø ņ÷Lä:[ėå˜Fˆń~)ŅÖö ą(ĘļMēćź Ęąlõ ĆēŁ©«3 G~x’ŁFźŚéK»7%Źī ’Ūä#Õ8Ń,ģ)ź˜ĘX&ÓāI%»¬ŅŖø „Į"³õ]ļ÷ŹōŪńŚóč¹šŁņć¹ķ šó’ŗŹ0ģäEę'ēž/÷ żī( ,ŚąŠśŽ!ų’ęĮš 2KĘi5Ö å²ś>ģŪü(éķöźČ;gĆłĶżĖŲÄV™‘ÖŲ āHčŅ×ļŹŲ:鞡Śś·Jį>®Õļö(-ļżõł«!ä,ōHK; ń÷÷Ķ)dōŪl(ģ¾Ņ"hĻ=Üļ3%õęDżāø£ōa Ć (Ń,÷Cćč;Å3»×įē+3ńד¦Āč/*ĖŅb-Ž>¶łŌD/Ęźü÷Ėśš.'Ļ,€Ūöó §’¶żļĀÖL3 #,š)™ūóÜ×K,  óCāćŽėMć.šŃ#źA«"8”ģ =Ē6,$*Č łģōĶõŠž ž "ÓÖŠźāŗQ Ą4Ę’ Vęó õĶöŹõ*c?ńzĘłģéM,üö›×īĮ)(=¶>¾śą ō&üÜ+ķķļŅÆū7c(@O# 2mšōcįč>¦Ļ śų9żō¶Šõ-ŹśŲļßóźöŻŠö$ßÉŲ÷ùč&ó!ż ā¹Źł%¬'ńģžļ ź8 ūUCö% ųźęUŁ=_ųĻ"ČŃJ=ó²ĪŻó-ķōķę64)# š5üśóČ¢Dā#ūÉūóļ & Ąā óēā4Ń* ,-Ū<78ńń!ŽÕīéŌŲŻäß@Ą žŅ 4ó]Ė pōķŲ’!ģł@Z’¹6ü):Ģ U/ø\ģ2é" µč§0 ļįńżIõŁ ē ō}Ä÷I*ūc Eż&Ø.Ó3aį3žÖQļ׀¢µ; ŌIöŗEøWé&ļķ³}ķ:“żźĶ 3ńŻ5ņÓŹŲClīžĀĀĒõŹL Z—;%°ź(?€Ņģ$ Ć×é„ĒJ= É÷§Ż‹óŪ’ $+vč=ā$³/ŪŁÅ«=ųåŪ= ūŽėł1nųŁ%ī52ń0AČś~ö- HT &‘!ų V?įĻķųžØļ¦ŪśŅKēöć”Ó!ļ?ęÄŚėꦎõßń’’ĢVžžęāž :Ēߎ ž  ÖŪ%ŌćīöAפį&¢DNüķń8ŌņūĖO2Ųžź÷ ė Ų Ėż(9-;$1ĪÓ1Ēėė.%3ÓOŗlżZÕ&ų#õ))ķĮ"ķØ ģēā—Ü®ÖÅøžņ,©ķ§śńļ ŅŠČ%×óŅś°žŌē 7É96’ !ńōņń×< ōśĆÆ@“'%’ĪŲÕģ*E2ē \4ł Tü?ė%-ÜÕøųā×)E+ żõ"1ä ł ÷ BųU’żĄ'éüĀ,Ņļūä0Łöõč¾žų?óež ū¹ŅJø–õ ÷·5ō4XŻ3šNųż;Ä īōŌ%’÷ŽžŃ4‚ ä`€«&°o5ųÆÓŽŲ6Źļ6ćŹÓö1,ĀüÓ“ Š:½ÓöžüŚŲ’ŻŲĢ0GŃ/ēČ= ž>W łŁö(7(NīUā<<&/ßŌŚŅüŪ(*Ū),8ā’ūČ/| ”0 ÷óGŲnććJœŃš 9ĀŻ÷ܝaȊāŅčFĖļ¤ņ(%É ×ÕęĒ3F§É„dÄæ"ÓX*/ÄB=ŠĢęÕ:¤hÕb Dś ßš V+˜%Ŗžē,#%C5'įē!$Ä Ģå īEnē"ęK Ü3Ö~°gT»ōN ¹£=;ź!Ż)ŹõŃ6IĄ4) :3 §ø+H95ĢōżĪ‚ÕāįśĀ›Ö5źĘE÷Čų$Ļō“5¢@ßB¶71ć7š­:ąEĖĖęK×ĆÜYĢ“B4ĢĒń½4õģšēŚŅć,¤0ĮŌĆėļUŁŠ‘źżŲ$0ć§šÜŲ14¾=&% žh ķÜ#Éł½ųĆń ¼ >2wŌżI=š÷’äś=įŹŁŁśŹŻ;ž*ūÜüßŲŪ*,оĢį½Zóń÷ŲÅ,üßÓĒ)*ūäń)į=ŪŻż’ ĒŻöēĻßü’ &ęįÓ ’T!ö9łÉõ¶ē öģ ķē(1ś(Ē:’<ŚųĶšęģiĆ-LžīJąÅ ó"µ3ŗū”(ńó8Ćė+śŖ’ŚżØŗ ł,ėßAęą9ųł1¶:ō,Ą5S%eXż óōA(!?"Ģ ց:·ų› ŗļÖōéĮ0ĪååMģ ģ#IŅĶ ¾_ėŽ.Ē8Žń~ūō©±põöMĮ¹ā#ĮĄåö7Įųł!ęeö“±4¢ķéĻēŃ1"ņŗ7]ģ-޼4‡śÄē°žęīÖ8ŽŽŗńūUķą#)ö)*Żć:iĶIš-(š)6“6㾟ä³éĻĖ#éIJ)ĻųFŪŅĪŠē 8 ø ÆĒŚ’źaķ&ĢæöąEK,ŚŹ#źfšĀmĖŠ÷Ī÷ņ×ķ4łBä¹.ö÷"É“ņņ%ā?'ŌŁiö öÅW‰#5ĶĪåį/ąźåüķś!÷ś"*ģė4ą’š " Ų÷ +ēÅ×'ŅKÜžńé&Ųé”cņū õé+0! ćäĢ"ÅK- äćłčõļć¹'ąäOä%śõā>ę×(Fśž„*#+!łīéøŅēįė-ćaüŽ „šĒėę×vŻI³Ż_ō@^),+ūŽŚ ]ōēžś7Äųņ)š å (SGįÕė™1PÆA ŁY ę|E€łŽ’žh÷č³*ōÓ’Q.łeƱżžSZˆ Ł­6Lčß •žö€®śüaĮóņQ ·ÓõŹ$4÷W 3ÉćƒÓKų ōĢW"č+(€ß2Ķ!!N@XłķķōŻ āĒė ģv A÷µ'–ł!ÄōxŪVä™ Ż_$AŲĂåVń§ÄĮ%!^¤ąĢéį÷'-ųŃą¾ĢīņXč¼;,¼Ł<īķ› ÜŃÅ=¹šūß@$ŅČVŪNßė™ļ@ķ2öņ<źżÕ·ĻŽŻŅĻöė' čéūß ¤ł:* ŚSJ?Ėü N±Ū/ųżŹ’šóÖ3ųī(Äō§źū³ų÷ØÜAååŽŚ§*źšk#å”č@ą2AĘ茜āłłØ6#2ļ ¾ūĉ ÷ѱķźBŽ€ŅÓJGR (ąĖŌŠ+$±š>ŅY>) ģ÷RÕ?ŁŸ”ö€Ä ®AöĖÕŁUȜ¢$ņ3Ķż1ŖćŪāB’äYŻ÷ >nŪ9łĀ5Q"f€`8*dųŁGĒŁ Ž×Ķ[q½€Ē$‚Ó)#šTG=į Ö+źé9 YK÷ļē~j­2’śšęź čåŁ Źäó/üóŻųįź+ż<įä-ęźó 2% ŁŁźéķŃąūźĢ ÷ū'äĘūŚšģ5łüļīóŚ"ō0Ü÷ņ÷Lę×’Ż37Āģī×čīēłżĪė®ėā%ģõé-ö ńŻ ’Ą ō öóģŪõąīI3Ņśó žõķ÷ČÖżśōĪśĖąõ&ęūÕųŲš/īņĶܹóūżņńś÷łģ(żżńņŲżŃ -Żö'żóūöõ Ž łüĢ’ ā:&ČĒēß (ó*’ōÓ1ź’łÖüēÄŚÅ4Ņ-āåćā+ ōęéō õż,īźŁ$ąŪŽśŲ8ó 'ūöģ   ääśēš"É!ęēē4蟊üēFē '÷ų ōųė ÷õō Żą,óęŪ÷4łś ’īĻŽń%ß°ī0ł ĆŗßėüIėGśņ+ū ž9ų ņóó,+Ū¶*ąųĮĶŌ½žŃö÷ž ŗ @ õ +Č4óēņ ć՛#’(ü%&ē  ’šķężģ öźĒūńģü"ĀÕŲōöķöō=ś×÷ńźŠ’Ž:ąē"żÕ? ņšęÖ $āé.Ų’ī?Ūą"śņåäéäńÄ4ó"ī¶‚ģł æÆåŚŅŹ€÷!7ן×X ßAšĻųŲĄā3öņßń£äÜ4ÖFś@ęzoY­ž"äł6Ńæżķ*ś@ßBĖć5Ėć$ĶÄIó5Åž„Łį¶Õ51²’öśČę3:;×-Ģ>"ŅŅ(@8}€ī ņ-  €äŪüųöō"Ļ’ķõõń %ś€ÄJ՗ ū>ź¦ ļłž ō łūģ÷ćäÕĢś 6ŲśŅ#1®Ä ²š ÷ żšō ńūĶŁžšךėõā ņõK’{Yøąūūģū' ķčĻ *ź" ÷įēŠĻ’óŗąā ’ļĆś2'Žć .łģFäÓė#- "/üłļųųFŲōšé żÄ’õ-éė öž’€ž * Nł÷ŅśŻ1,Gķ/’ć ģŌłÉ#¤Ó/C6€š$6åėąśė›%$#Ū' ĀōÜE2+žćūż#Ś:\Ÿ=÷į5’żbūDšū›łż !Ź’ %īH ś>š$™DéüŃęńćå ŅųMĀĄŲū91Ü #ń’Ø>%=€ę&ÄĆ1(H.LĮ żv]”aÖ=Ģż śAų #NØRŌćū*ńŅéüą:X×ÓŽÉ oųō+īĶŲ łź1÷ʀńĄ5ā¹~^ ҽBŌų ×ńüūķęN1śī²ÖŽÖ=Hża žÜ »ą/ ųž÷¹#”/Āė½2żI¼ž£ń欒ä!Dńś9Ÿ§÷‚ĶåōŅŃūÓ-€:å7ū÷Hʁ»Ņ ń€K7ź Żæ=ēĢ& łĻ+å?ąė.÷žģ.åāē)Ū1€ņ)ō‚ٰ¢c’Bś•kŠé!+ė• -@ óßę#k€IØĒ‚ÕćóĻ| ęś’ł§ż  Āėüüüܼ  ōōüšść(üōż#żļō’&’śŁ(­ŚŻÖ8ż ņó¹å'öł ųō Żēč0Ų ńėżżžŚ÷Ž’öśżłžūēļ ŁÖ!ĢŻ öė)’łżéķņģüłśį ģŲŁ ĒŗūēīŌōļ»ęéõõķ(Ćłžö)ų č ŌN-óńæģąÜ ڊ&łö÷ė ŚśŽūųė»ß> ėć()ŠK"~’ ŹńŠŽśé;;11!čÅļć ņźłš2MīīN"śģŹĢ& "6ģÅ×ĘŪķ+ 0Ļ ļÖ$Ćö&É(źĮš³ŠŗŽžåŅzßöUļž¹/šÄö Ņh71īóļ ÷ß ōŃ+:ūł×%õéöõšą !Įé÷ĢļåóÖ üęģĒļā( ’šųäå'ń,’śü ÷÷ įķŗéęń+õīąää ßū%łé *żŚ!śõó ņżŚ7üū ķė$éōÅ üśłÜ÷äžšüśõļųżü+ ōū’ü6÷óņ± ģŌ")Ńėņéäķźüł+!žś  łó ēāś įŁóžč#ŚĀäŁü ūšėūŁŚ:Šś÷,ķąŲöŻśūņóųš7(Āķ’÷żżāBüńTéŃå ļæĢł ļ’äūņĶ ųÜėūŗ©ņźķ ",Wč Č ī%ķ  +’ųķē"Źū,(7ųĒÖóéš ėüõž$Ö-Géūõģ½’ō ēśł  Żéī5 (#é.ü6ā ļŚ  8ė½1éI $%'×Ä9ų"Yó éĻ€).ų»¬ßź8ų«ī×Ō-½]äōļēō£ćńł=ž3 ž+błĆļ ćüS’ +öė€ł+Uä XóģüōžųN‘»¹, ¼ā!ŁäÓŁē8ź÷īÖ†Ré&żUļõųŻ2A Ż|8䮎Ż-÷ü  ˦ł?āę/3JćŻõ!»8!Õ(4õ_õó'ēčū4’ąé ķ’č' öųłē óü3’ļłĖ  šłå% $éžŽČ šųåćżÕ*Ī’õė(Ķžē ę’ēöń&Ōżņöūśõ’ńģöŽżąģŲ6+ ķė ķķļ'ńõźźź’%’õūžņ×ņŻĘżž2 ņ"éä!%Čųī’ėõż-  łÜŲń5ü" ! × žd ūšņ׎ ÷ óõžv‚Ū=9Ūęż Xžŗņó4% ĶĢ ģ ’ņģłņ.ł ęńĄŃ?#鏳%Ęć LżłŌū%ŹķżŽįČšŚķų#ūųī·¾Hķ€5+Ü5÷$Ž4(ņĪüĻ’ōß Ć ūżO%ĮŪõ×Ųś>*Ņūę äšāē<ż‡" ģ7ļÉńšž°'" żņéóĻāŅ*Ž ’$ó2  ł’9Īēčżīļõ¢óÄōūŲó?üżž×ø °20-źß  ’Ō*ģÅ!ņėµń į ź:äąÜÄ ā,÷ąś åę&x½×Sū éļ*&÷ę' ü+ń.öžńō<’Üó ó  +Mó€ŁO>#"ōž ķē(-ä&ó ’ ńō 'Žö1&ųģ å"ŻĮž +ī4 żģū÷ 7 ĶņłĖ3^Ńö õŚ ÷¬šõ!å.óKÖ  Ćó’ ńź“čīī’łēŌźõšńłßļęö$ųŲ×Ūą.ņ (’’ąų ē.śčé ”÷!9ń­č2 ŁĀŲßóéšÜņßõ,ŲQCWŻćŪ’ūć3Ż ńóĪļč;õōł#ÅŃ> åłĖśžų šū   Ö«ź)ųż#ł-, īüą ńų’ŚŌłćū2ńüėŹōżżüņŠŪćżšżłöž č ! 'Łłō!öūÆŁß<śóŠųžõīż ż"1 į łé!ć³ė»*łķīėż ÷õ÷ēżęüóŽóŃåQ ÖųĘō%9źŽŻģ’ŻŻ ó ĀąöšłI4ś/ųź® ń ’ń("ō Ļō’Ģ+ńĶżūńėļ-Žõą' Ęšßļ "ļ6&^äōŌšdī#ńņįŲž*š(īõęć,ŹżŁü0;ō%Õėä$ē'ū ōņśÉ÷ Ü*ų#ń°ńżįłē Ū ĪļīŅųēų ųÕīī ĖęģżšÕ ķ !&īŽÄßģ'éüŁįķŻõłÉüäÖ )Ō!ņąå5īĢģęÓśé½³ėČ/%žĒ'ęšūß+Ļ,"ā )?ž >čŅæōńÉ FÜó0Ż ģ ņĄčéGšśéŽó×’žŽ#ó# Õö ’? ~śōōšüóŅ'Žī"īūūńēą6> ×ÓPõ5ėāõšßėāļēū3ģ2Ūę!żCņłŻ&½ĢöÖņõéJ īī÷# ž źŪ.5 śų 7üóäßīłśęäõ+ĖŠčł0žś!žūż÷(Ė ōˆźž$ś Żüęęč- @ó ēø $ō žķū äżŃźŃŪ÷Õ õłÅ’ ÷įäīžéšóč» ’üė)Öūüėłéšūü!.ż(žķäčõ ś #éģžöē#öŪśīģ$ ÷(ß ų/Mjf€,Vü0%Ōš3ŚüQóĘ ģĒŪ÷(ö>2śÉ³³ī€Ü€ČķcęĆōłŹ.D·Ń) €“°Ų@«Ēūī*’ČŅųõf’Ęł€ Š’€€&Śęģ&»+Ō–Ń‹ęó’-n×ģ³€éBÅšž €6¦1óŪyŹdqĻų€'€M_}ߒÓn"™IĘą+īŲŅ ŪĻļN$ńö4õ؁īßņÆ>Yō¼ E %é"' 1/żųĶżõéżāĖ"āö>ķ.$ Äģėč +ėńüš’.³ ×ĻŪņļłļųŚ Čżģģ÷Šż ģ-üõŌęåńļść( ó /Ę"ņéü  žöüŪ é’Żæż± Ż“ąąšģ žó"ČßŁĀ äśāÜÖćļł/īķ ļÜž ŁŚłżśļöüā#Ōń÷āńõę/(ķÖԁŁ©čź0Ō@ ‚ģ&ęŖ‡ÆÉŲ Ö>õĻõŌ(ń/æÄó,Iä}õ/¾ł~3$åŠ%ßõfć’*ń•.ųÅß(ł ÷‡ļC{ųųTŗ’` ų+Ģ,  o5o&ļ€ę±32Į żłēz¼ĒŚśź é걀“Ž;ßžÅ~欖ö‘ąŖSöėC.ś -0āū+8¦²įłÖ0+ųāŖ3Õ²÷%Ā ŽŻąĖĢģ#ī ųåõü7ōśķ*å%6ū %ņŁTżśėšÖżÅłćžžE9ų(ČHåŲ.īÓŁ ,ųG ųćį+ßĒäčśā:.'ń ź÷å ģūšāōžż(ķ¼āš ć4ń#"õ śŲļėū źåĮņćö"&ū óšäņé śś’ųōōłī"Ķż šāŻīėéł7"ųĶūęå’õōļÓĢ+żū÷ģżé Ė’Ŗ ’ó ,,žŠ%ż!'#õģżŚ ģöDę–IęāąüóųīäŁ'*ś÷łö ÷>'ä& - 0’Ńźģń¼-żņ*åė’Š#3ēņķšü ų ķż ē ōųõńž dŠÅų$åčś ’ ń&é×ēķž÷ ūōõKö Żš/Ü7'’ēłś’ĘÅžŃų*ī $¤õ/¬!Öõ7ńłÜ%žįģ ńųėś­šģźń łŌūéė3 ł ęųŪł$ļä÷ó$žżIēž-žč õŲī×|üś÷ģ śļŅĘ>/ļ& éōpŽźHģæņ īāüńóŹüŁé*óšų']’ "ż ł"ńń ż &ģ$ó ’ąśčŽ&»÷,Ø ł0ļ,0ŁĶĘł*åī uĪ9: ģć ł7Üׯ%Ÿļ6č/ŅŃ:Xźė ėöÜoķ=õēū’.&'I8 ģE )ź=+޼ūÉ]Ń$ūę å«īĀ8Ń%īģšå/³Ö#ÆŽ÷Ķī’5žÅH/#īĘ+ «"S’ĢäéĢŗüEĪįŹś/ŗŠ/ŪŚ<?ś"ī żļ÷ż&Ä ß3(ģų !ł 4÷Ś.õ.ž:õō’įĶżŚŻüå$ŃĘ ų±÷$ ćĢģóā ?Ź-Ōüķū ńēśäÖłŲ1īĖ0ēó莞%ŃūöūŠ ÜPŲ&öĻż >;ž)łśmįśķ-Ūų(éč%-Ö ā’ųŁ łżī.čż%ė÷"ś,įęīļßõ<ģķų5śęļĻ(ó é1 ū’ėćė ņüśŽāÅ÷%įŁö/śüō.żé&ī ö& ųģ$üžōųć* !äŲ’żż÷÷ ēŁśžżģēüų -ÕaŲ Ē!ń"÷łŽ åå )ŻÜó×óżž÷ŪėüÕūčģé Ūżļ°0öņēāča ś ū ń ėåłūśśüé õ’ēßéė īÉžåż«ćęžõ÷šų$śßżģžńžó )ļóśćüłöõņī č÷Eńąóųüļ ļõįźß īėųś-( ś ūż ö×āżżóćł"ŠŻåå )ķŽų ÷ģå.äņ!īōõ¶öļ  .ā ężń ’ōŁöņå’ŁļŽėĶ- é’ÖžŲśūóŁ ×ŌVķ ÷=ó’ł8Żś'#āĢłŅČ©÷÷ų÷āļė"ńčć÷Ł7ģÄ ōńŻāņ%öõüÉ,óŽĀ!19 ŠģųĻļAćŲĢūüīį ’¼Õõł ' õ ('%ų’õ¼šČ šź čB&%š.ö÷ūÜģė ü*żßņÕ$źõžć’ųķē’’õ7äįć÷霏/ 'įģų/ųä’ ų×÷ šśōüß÷žś üŻņų =!ńŻśīź&+*čŻņńłĻmöŻļC’ė ŻŽŃ'*Ėų’Õ’ļüŪHŃōlē)ņģģżż3¶²F ōĆŁ'ōęå Fż÷éėLĀų1/ö÷'ݾÅR ’Ó ņśūńķ’ū R¾ōN83 üä¶ōIV õń ’÷5ņ ĻŻ#ųč6ęŹĖņĮóĖŚīśīāõ* PšūD¹,žĀüüéĻŽ)ńģ]$üŲžž ō’²ģŁō  žļóÖåīå. ąģ ĖÜ"%ĻūQ'ü.Hēčņ,źŪõż$(÷āģąžß Šīķ ļļ óżńżėł"äüżļ’ $ņž)ł āś!ņé böé=Ūō1ģ īöņ4Śś įśåUÓĖŽśģŸöō ēöźńįļšģ;łć!ŻŻķ ų÷üū 0žžóś õ¤ųšöŁłßūśģ )¤¹'?ĪĮéČė'įū ģ ų 5ŃźŁ īéäēļĢ &Óöė ÷"9 .“ śńąöĘń÷ņ6ä Ņ  īÖßŃöß&łā4åūō? õóI÷Åćß#ŗö ł `ō Ž ½5ęńįĮ ö“-$¤µ?+÷š/!÷ōäą÷ņöż!āķüņķģŲ 6 ’śńü čäūśéüó,żģ ¼Õ)ŽģĆčń ųDóžčžó ’É#ķļ!6Ē%üźóĢõöūõš ōņé ųęūųūų.߯ēļ  ółįžį /ģß üśžż&čššīįčśĢčė"öź?Žń$/9é÷÷ ņõņbļĘ łųóóß+ŁŻŽš ęöčõūŠźłł7č¾ćŽßū&’ļ66·ļż ’ļÕåłļ®ūæėü’Čüāė ÉĻīÜż&öōēņõ ’ŻäżéĖé%ļ5ēń žņōų&ź6ģźŁ?īѶóüłŽóį īįśł³Ā śó×YÜłėņōŻöųūÜĪ !ę '$Ū Ć żīåģżń’ż’¤’’ļ0’%ņÖ,īüęąķōįž×÷&ü0Ķóżåķ ļ ķ Ö'*ÉßłŲ ÷üfśŲŹńóæ&õ'ÕPüŚęūķń<Ļō÷01ŹÖ’åßżū&’0ćAń0ģåźöü üēŚĄżģ’$ʱBŪōėōHüõ 1ś ņė@ ķ$ īüß\#·łŽ$Ägąī÷ŌnĻ?#¢µē ąČB+ęź’’,1ł ’÷Ńõ Č ūńööč/1ü" łžü!RõĪńųžłł*õńē7żä!łńõģŲž źū(łiī"Ō %Ł łļ ō'ą)$ Š!ņö żÓ śā!ć ē³,łķÜüś ąķŻč óāś?ąōóūä öĶķŪ· ļ×ćśäļ Ņś% b2ó+’é į>Ūōłä’Ō üō ŪĢ -(ųü"ģ÷ŚśźįčĶ÷łūó-žü ß Ģ ų ūéķō%óųž öń*żńõźńĪćŪżē’ćėŅüōī ĻŅęūüć ö õ" ßēóą*÷&ņśŽź’ščŻüž Ęžģ„źļœī4 śüå2ų Ž6źžĻüL^€nÜ>ąš~ā2Ćs/ööāJ¾ņžü-ņżšH6(ø Ÿ€Ė󀀏Uō–ŲŅ/Ēē#żŹ“ž}° eĘõ,éŗ% Šļķę“9€« ž ø*ģ–ƁßųJ-jī׀ĪDÕė €9Ł 7÷RöPŚé)€4€Byjé€rżD£_¾¹0 ŽÄŻéŻTGćó/Óµāńõ2»EeČ'įļEłÕ*ļņģ.Éū$čó ń'óŚ'ļßÄõęń’ ķ6ĮŻŽż#$ó ūŚźł"2óåū ś1ļ2Õ*ųņė+"ĶĪĢAžč ś üźŻŗØīÉó Żõ¬ !śõśÖŁóÖŅ$Ų ³Ü)ć1żžļśą ļūš4ć,śĄĘ@’įéģÓŖÕéÖō *0ęāķõc ’ÄHŁź÷ ³öČ’š ćŻÕ śł üį’Ćķ!!ńńÅüžšś‚ ;Ū ź’'ģš ņ"š÷ לöżįöõļųļą« ń ųżžž"šņ2ć*$üéż’>ņģöļš7čżīųł źŲņ āółõūÜüłõšõūšåõųĪļšĶ=öļ:šÜōŪ üü ’žüŻź'ūņåóžæążēł* "(ļĖłŠ.ž W8+ļłéŲóŪ ķ Ü"üóÅó'šįóö’åĶÓĪKŽāžæ’Zńé.ōū7łž>śČöY ź įó ķĖēéū śļśüāņ  äßĪĮ“āŪŌĻäBėģ NK!) ī!łāäé2ÕĮć÷üÓż !ńņŌäŗłößĒāŲš÷ēśėRš&øžżšÖÆŚŽ#śūźżųC öų(õéńóŅŪZ/ņż üźīöōūüż ,ąžŌ’ģ äöė  žņ ņ÷Łž Źāļüä .’õD+éŚń(ōįļŅ#öčöJ)īī’ (*÷ ńD&īńķ öž ÷.ōé ņüóąé!āó’ś&żóņ ’Ź &#ó÷õł ź5Ģ’ ( Į’šč ķ€õśł’#čę€sPŻļWžņŪós€ ٦’Ļö_5åįß5æ×ŒüW-f4įé÷łõÄåĻ1ęÓ%&Q5џĶ&» € ŗ’ ā €•€€¹ū<€ļšńß,Ėå" žAHÄJŒ&ō &Į‡Kv€B €/Źī5€Łīå &ģÄCļA„šł Ś’÷:÷L€ńNŀ%³’!ž"¾+Oųü# ÜÕė2õøģéóń÷)÷ęö ķüķūčéõóōŁ ’ķ ¼ē ×õ7Īü5ń&7öż×0 3ņóĶ÷01ĖņŃöńśņśś#KĮ žŌ žč ņėė ååäō :&ģŲūń Ńśę&īöö'’’ī ,#ūēļę į ōõ’ŪŠĻżśĪ ņ- Ńś×;¼ņž ńō łÜ å1ģńĒįõķH±.,ļóē Śł)%ūįÕ×ī'’ą“ Ō’ń% Ł$ģč’ÕŁ -äčõĘóŁĖżöCßŪŚ#ß$ ÷éć ńĖńį& ŁŪ”(ĮŲ"śé6õąō9æ¤*óŹ5šSÖĘD- ó 2ē ĒÕ#āō  ėŌå%-A+Ń÷&#įŠÜŪ 'ģźąÄ~ļŌąśŅ Ųéćś;į!žS) ū2Śį ŲłJŃ’§öūäČÆG äņģ× /Łū"źäŽīģųš’ł(ź("ū÷įłēāįü°ū’ÓęØ č4ĻŃļ ī;šļōī ō(Ļ)ņŽēŅßöīń+@äųŌö?ßö÷óžóęā%8+ŹēśĀŁ -x0ŌĖ0ßĒł #ź.’ā@ā<ņšé ¢ Ģ ø3żżūżĪéśźü#ö$ėüäå++åž7’č ūś&% ÷"Ēīę$ åćŠĆäžņčł;ö3śóü ßŪńžŽĻÓŻ ążł ņą ī8'’ąśćżź&/šõĻļāćęŌīņäéÆöī  łäĻųĶ8;ž,žēņńźž ėśóéŅ W öōåņ öé#“#äåŌłģõū+öŽžäįūŁ ³ ļå ĢIšęü×ņüū ņ"2÷Cłß6ā Pżāśßõūż4ž īłī$ńŲéę’ó’ķ%łźėžÄćģó’ę Šęēż÷šž Ł ÷ŅŪūńāõ÷ü żŚćåł;Ń9čņ÷ķöłž õöīķśļ ūöŁķćåŹ 0½ÜåłęīāžńųśÕ’šöŻųź_ö>ģīĻ žīß ęļųŅÖē$ž(šōö÷õ ćūįÜŻüKņž’4źķ!ūžģšÆł2ś ģ» ū².śņó å’ üśžśĆżńä(įūįõš 'äöš  Ü÷š÷ äųÕÓŠ’śāķųśį%š÷Ż żöņų)ūņŃ-ēģ 2’ūūįńńė Żžæłģ  Ö!ų éŲŻłģķų ōńż÷ō%óóōłūšģęßź÷žō÷ģéėŠōõężć÷ē 3õå¬ü&ćńń2óų óéńīóŃĻų ßņÕ Ź+žżśĢčŲü’) ! ō )źŲ÷ ĶÜĪņGōēżńé’2,&ö^Žü ę łęüČ÷óļ śā ÷Cśōļ;žéž ÷ńóōü ė(ÓģžōŽ Ģīßæ " ' æČīßÖįčņ)üīųųõļ źåķ’ Ļ ¬ēŪ ōžüäüėō÷ ¾į%35>"łĪČŪéõćžńŽÜōįļ"$ߎįĪ ėāöółņļüöč õžĶŌķēźĮł4ł öīżō5ļ ³Šöä.ķ%Łé%$ńįśėóé1łó ü/žłöü’   NżüÜżūņūüōå+Žśbéłõą:õįļ½ō#śŹä"źėś÷ółłå źč)×ōaų#ņėģ ļĆī öŅ$Ķ%ž#ė + üõ1Žų#ąü0!%ļłļń&ūōīóīäéųŲ#å"Üßężū 2 żņųł åüŃ’łäÓ4ōł +öŌ'ī źšłóźģē żŁĖšÓü ż õŽūļFÕ ļ ņńÕ Żūģė’ęņłĶ!óąŪņ¾’’Ę%ųžżļÖ#ģų%óžš±źū»3Ęņ$”Nģ &ć  ū3`ÉčĒ čŪųął $õ“Õų Łó³éĢß×ģ żźćņī ߌęż,5$$ōž­ąå ļčļźżśó; żģ7ó· ężó’ņłéÜó2"ēć­ģģŪ9ä2óźŻāį’ģķõųūō× źĢ< üīõąŹ 7óńģ"ŗįĘXšž’éīė Ŗėdõ Ö6 -’Gōåńūņ#ńŁóŁĪįµÉčēĆĀž*łķ łÕF8’īōG+ņ'ē@šŅ»ļųīHä+õ6Ęčó£’ŽćŻā&ģ#ó6ÜŁÕČ’üåśYų²ü×QLä K>JĄāGąńī¬õųöŹī4.Įśģdź5%ńš#ŵÓćż4"ķņ›īėó׿ī$ń Ż>÷%÷½ \žū fūKē6 ŅÕĢēÖ7(éČģ)ö×WĶ7Zļ*łÉ ŁęÓ»EņīšZHŻ rŹžRĘ9 ČÅūčĘ%üWF+ Ēę÷łß5'1ņ^6"/µ4"#ĮŃ:ļOńåĀų,÷ł*žĘ\ą%9äK,ģ+ DY.i,łß÷ éĪéä żō$'ńņć ģ*- ŗ<÷’ūö 'š3įöĀ’Ńõ÷ņ  " ż ōüūī łčółń׹ēĒ÷  ółźżūī4  ü ęö$ņąąŅłüėć*õźūü!åąķ ķÖóįścīģöÜ,&ž)īźó’źéŁŻ Ałä  ąōżå ļŚų ā" śģōü óžśūÅę:ŪżCļūńēōē×ćŚųū.ē öā äģŠāśž’ķ)üńŚüü)ūę ķ ½ķņö÷Õņü8×ö’Ó dõŲčīŪż *ü$žż’ūčäųńļłž’" ČżčščųŹä’8Üłė ņż’Ē3ż Żēų č’ĀĪ’ĻŪĶó17÷ķēģźüõ öśźšž eųüÕĶ&īēüŲ7ū žź)Ąųāž„©"ė’ūśāķż!Gļōé(įŽ#ł8šļåčHüļüČ?žQĮóļ¶ I#äÓź "DÓį ėń$å1ē 0: ±4õǶå’ęŃ ļ*ć*Óī÷ęćÕ )å ¼'é ö,Ę+1"  ńÖ2§Ūż(ēüņ6 ūņą÷ūśēü"Łžģ!ńõöżļŌēĶ "łÜö÷żĖņņüüšī#1żĒąņ"ö ńśüŌä-äŲšöö õłą Ė)śõńźĀė5 šóÉŻėÕńüÄü2šéļŻł:į ģźń¾ üćžūźų īüļ ż ;#ö õłł’ųņīķ#äžļż/õ*ń āĆóĢżū łźTżņõč¤üĒ÷# óģŲõčÅĪ’gęė į ąöÖąŚööļ ĪŚżčńśö ­ļ"éųŽČ#ś īöž÷&¶ł0Ņ&Ü:č+ Üóī&ą+ćļżćāžóķÖÕ15)źž[6ž7ņųś'ųö#śčä ÷+śįÄ&ĘDŚ09Ņļż%0ÖģāÓčž÷å;üł ÜŁbx:€!Y!÷~āõłS#øÕć!®Ü8ś.Ż $ ĆņŪž€µś€ś€åżB-ŹŪĮł@ć.ż„ÉĒę­bŠ ź7ņÅģär’·ü€!Ķ –€ Ŗ õčŹHŁ Ÿę‘Ś m(IńųĄ€ŚEķ(śś į€D» @łź_ÜeĢ€ B€>dį€Ų^6ÖL½Ä$’įČž¼Ó^<ęš&Ī·ļÅ €LÜķĖ"’ū"õ#Ēėū ę7ėVö³ą,0:JõīöāŽAÖ"9,ņŚ!×øęüä’é,#’& ćéōŃāĢ£žXųÖéõ<Ė7.Ėę ¹ęųōŠŪJ+ !ū Ņķ6 -&÷żó ŪOIÕŠĀ čĶśü¶ū$Ć*ö!+Č ķ įŁš’ģ­ė=æŪ ģ ģ žÕņõ% 8ā ŲKĢ(ßģķ’9õīö×%ē.ę8õōė)įöģ'"’ łļ“ėšåńīż'šüŌ#ī&ßŅķšźģLōĻņł`ńšC!’ŪŹéļ/ųö ĻŃõ5 īņŚ:žłķ!žūóĻų4Żūó'śĀ韎šžŪ ņG óA^Y"’ śõäē%!Ü+ö ä,š( ģż Ō ’(ŗ Ų Č åĘõ,ē ŌćäéåA4ū@śźČ÷īšł#ķłūĶĒ!- Õń ö’ Ų.īöśūłŠą8ō÷ ńŁūæÖéėż’Ųō×ō*Õń ä×ü ų(ō% ü źłžńęö"üŚõōą÷Ü źėżé "(ēÖ’/ĮHńēš&óõę,)š& / ģė!ģĻę ’üģŽŲéŠ ¼āšó'?$Uū Zćś ļł=1Õłõ%ĘłŪō(;’6ū+$ėōååč éō 3Č4ÜżżŻōüź>_Ń2ōūóōāżéź ā$ńöéGĮĒūŲłōń č, /õ÷äųłīG'é'  ÷4Ģųį!’öóżė,ūō%÷ō×>üźÖųåŌśÓ7äŽ Ū×ü 4źęģŚß'4Ūż÷×āüåĄ ļü óŁōüö #āą ż×óęņ3ż÷ ; ÷4ѼU*ųīõ’śģ ōõā6 Óķłī Cõ÷"ś™ņįģśł8ž ĮķŻż žīčóņųåĻŌń šīšųļūųØŽĶĢÅ Äłį ķļäķšõ; Ķćųą*õų÷ęų%65 å"üŚ%łéõż!Žłūóõ ū1 śō čėŲģźÅé ńšś÷żąśšłöū)ūTēüšŪéż *šłņ ö śš öÖŁ4ė<1ģ žūŠ ćµž(Ļ Śńłõåöü’ķ)ļ+;÷÷ ÷/' ķ(ė’ž ÷źā <.Š ŃžØé īų żķŁłļ šüąÓš’ļčņēå ęļ%"’č åč IģķģųżōÄ žš ×ņżń ūĢõļ/öö õńōüūõ$żņōńīūÓńžżņż Žó÷  ųųŅ’žž äöżżī 3 ūņ  ž Žųļ’ żļ×õśī  ÷ĪÓ ’ō ģ-łŚ&õė&ūńļśžõ×ŪŠį A ü;ģŻåūõłīŽJżāšż óąöõōķ÷ėłżżčų’ÕŚĪćBÖõõżéÖėÜ «&śžļń÷õ0łōżļ1ć Üņžó  ļ’%ī ōż#ż ×7åōßńęćż÷ųÓõĪö’!!żžéŅžśłļ&6ł÷ūģŻ²ōłč÷2Õõźśīń ćó"ųäÓ į' /6ā",éĻųęĶņųüüPņż%ÕųśXŌłųī$ēō÷ó)ū×ö*$č#[ąÕĢßš -(ųęōČä0čŗŌ÷ ėō=ø-ųśóļ)āä šŃų9śśUē(īėŪįģžņń ’,Õ²ūąėź"Ü×ųä1óżī'ĀFĀ/ 8Ōšłż0<üčŁ÷īō ÕŲģóšÕ%é’Öß8 ¶żüĆķ¾D9Ų*Ć3×Ļ ä.ķ÷+ŁŽķåäĪ,Õū žķüļ÷’ö;Łūלūūßź ČķņņŲ’źčō1Ą% źūģÓūßųšžęó õ÷Ź"żŃšżöō"ķīēšśšŽēļä "4ńĖę%ó(āŁö+=éĻę(ōōöåłĪõūśńłłłē)’Ećū  ! óŁ÷ź ŲęōūŻ(1ńĢķåņōż,ź’# ńčń #ųä2ą'ÖļīīėéÅž?3żČ ņõųõŽ0üųžč+ļ+/üźūžö÷ēųŽ’÷Ś$ä% Żė’(<öź ģąūšéųš+żöł ä,īćŚõļÜ ŠŌćŅ ,įņļņėé5A łōų ņōńģ!źų’ō’ź9·Ž›źņ ’é#õšõ"ęōūņ0ņų ö Ń%ž’ėü õ3 %óųłżīī ōöĻųÜżśāüęåöō Óėå$õ īüžń üĀųŌŻŽųž÷ Ļę ÷˜Ųżłķ ūÖÖžŻ óēņ4 $% šų%ł×ģųąź"śģūTņ’ ū šļöļķńīÓ śōåöē śśü’ōģ@ā Łóōūą€÷ š łļęń÷šöīž łźüöļžņ'łŚ&1ōżż żūęš÷żžē īäßįįżć’'óżüżćļ Üņł Śóž÷÷ å' ų Ž÷éõżśöä$ööŃéūśŠžżūč 9ä&Ų& ō 6 ńŪ"’žļ łóśž÷žž <ź)łZŲž’ź2ä Kłō ūå#ś4ōä’ō łūķ ūłŻūŁņõGóĖ ¦æč7ķżÜ §ņCŚĄ掹 šŽęEÅÖķģųü?1Šłģģ<÷ī2bųõšżų!āįėūC B ,7śöüüžāĄųįüäłķFł"1öģ÷98.ģīėÕčŪ åģ āņŚčõ üčōžäāß2¦ü×Ä5Ėåץš+śIółū#2š’5ōśļ&õäÜęóļł÷ĄśOŽZ0ķfõÕņE!ĖĘĖ/ŠśżżĄč½óĶR(,’óAšÜøĮžįįŲĘśÉ=ęK dlÖ¾£"Ł ńźłĪÓ$& čą (1ä7¹ŗ ŅųĻä’Ķ6īš÷ł©ž$’^ępįĖ!\Ū+ īčŲżÕĄŲųžŲ^ÕIŃłžłķšģų”O$³-å+ņąÜ$D!ūļņB1¤Ęäłł46мÖķO Ųųž”<=ėŽźīŁóģŃ:ś įÓž× śĶļCó1Ó,žż+ä=ļųčå&A%ęŃęäéŚ ŚŪC éČ ½üżųŚ %ņųĢGü+ä żöėęīė’ń.¬õåū÷ ;6 + Æ0 óÄĄĖŁéĖļ’·÷łń/,Ūś÷ÜŃūķ ŚõĶ ü%šłē( żž’ ā$ü(īÕ ÉōKųø#BńĪÅö)÷ż²ź4ÄK.Ö¶üž ÖCłš’öķ4ųųėĪśä,Ł ¾Äą å-ńõę&ņīįżė éŗõõīóŻāōōń*įįé=ē é%ž Īōåł(ż/óčóåg5Ž-ŻŁĀ äćüåßżżüźķįõüųčōĻ!Ļ@"0Ņļ^Ķ$ßūŚš ņ ūńźóėģö öśżüü’č&įęł 6’÷ūłüžßčåĒž&öŻöŅõūō ō å öņäč÷Ūž ī’ūś÷Üńķö;ųółš÷ ž<ų’÷šŁßūéķ÷Ļßļöūóōź’żį'Šųśóįōüüóåäü ×ä + -łųłŃ Ó ła Å(£ į UBß’ėĶ,ķē Õ0ōšĄŪŁ4’āŽ č$éųķē¤ŹųÖį 0LO÷§Č*üćīä6ģ žö7ōŅżŻ!(­ ¾ż',ņK&ćśóžŽĻ ŅÓ÷õ šł3ö ü%cĀ!ņł"Āń3õÅī5Ń5Ģźś-ķųŁž'W-žż0÷®ņź$āü Żõō "Üķē Oäł’éŪūīžźöóż’õ ó’śŲ÷ - ģ6čć)ļ ń#ūų ķåāłś ÷éļė’õū õßćßņ-óóżķū žŠóŌęŌšäńķć’, śķļĪ2źõČ“ĀńųūõŌ%īōõšėōüö ÄīżśŃ ž’÷,2)šŻ"õł"ķšė÷ī ż õŻ8’ļĶŁžźŃ. c³ž‡óņķÕ&õµ2ĻĻÓk|"Ā-,&öęś(ąŹŪóķ!3īÉY łż’ą,ņō÷+ĄóŁL1 )åüŻHŪæŲģ/żļāó:8)ńżé żŌoīč4’C ŻńšąīŃ’ä!ėōö ōźJߌėčįčÆōrīļ TÓ.?ŹBį Ėöģ’ŻąDčŲĖäŪūÕėSõķCćų"ōą÷'ź/ś’$ōžėōŻą0 ō “ķćŲÖēü öį$üł÷% 6óņŠéõż>ü Ęé÷  ųźŗé öŻöąžŽüÅńõżBżńóéäłšłõ ĀäņŽNßļåé/żųĪłłåūē+ķżņŲŚŲ õ  éą,÷óLßŌ" õå ūū%-Ąśßż Ń*`żŌ÷ķś īĄŗņ7Ėėł’č  īö‘ż>Ć -Źčń&Į¼ģµćIūćąó45ų0)¾*éó$ŁĢ%ÕÓüżśöó[å¾ń³Ü.śõż€öōŠ½Õ š):Ė<ļņ²į Ļżž¼ņ$ Żü×ļĒģģ ńé óĶÓĆś×ė6ō&Ö /ßõ ŚhØ·(µė)ß’ óōåņŪüŻķčų'öųŻ łķ’C+ ÷ŲżõÅČū ī äīļļæé  ēĢčńņ üåžżö6æĀŲģļ ųł£$āöø żź6ō %Śśéü &ę ü&#,Ž—!é^ū,-ņćÜéĆčėõ’3÷ž8į$ąłėģNķłłŽ÷’Ś’ū'žś#łÓėé ņżų DõŪ2žē :(-"* <ūźļ ōö=5üėŅCļÕĪóš) öīÓæņÖĆéŌµų»ŹŠ/1ēŹOęÜ0>šü *@žŗāČ#Ņ÷źåŪ÷5ÓßĶŌłņ,öæŸäņžīīś½ć*čą?óńĶC6  ū%¤2Żē½£ż2č7ٚė49"øśśēćėįćōū)Ī/%Ž  ō8¶()Łü<ÅžĖæeųĢģżū ņ ķ0ó&üÖłų. Ļ,ūéĢųī!ŅŁżü)Š ! ō &- ō ö÷ %÷ģŻļģ-ß śņ !ņļķĄäŽęśńģźą÷ĻēõB+ üó Ś ē÷Ō ß’/5ē łńęäÓļéū ł åõߊ žBÜ>ūł(ė ÷@ ōęŻä"ķŻÖš÷óõśŠčĪąłńė0ŅüėŽ ć3ļ’éåW žżŅóbż5šęļ 䊢(ääźżūŠłÄųļś -čž%HĀB ŻĮÜīŁRŪäćGŚņ2ęæł92™© ųōT< ŌŪøāņ#ó #ļĒóņ+āėKęČ»öĪ$ā-IĻ/Ēõ<Aéš*: ł.3ķ_1Žš¼ ēĄä3į6tńŚ Ł5ÓšBē §&ž)ļźå>0śžķį”ēēÜ4ĪĪ:ń 66 \Ł.ó&¾(L6ŲĻ—ŁĄå¾śµč=ņ /P .N ŹįžžßĢ Ž< ŚĀŹōōÜ×ćÓŲ#Ż<€ØÕ'Āßį0$€śęĢŪü$ „ĒCęĻÜéł„ļ/Hö\ŻĒī+ń?ōŹÄ.&5ü¼ķŚŚ GüķŚ¹ń0įīėæŅŽėŻćļGņ ńĮīaÓėąåöŚėSčś üć%ńõå øéķ÷ż1·öżžł+ļē×'ļ )įņ4ģĘ÷å Öż÷žüź÷ūūĖ č÷ä"ĒčÓŗžū¬- śģéGž ćł’ó3ņŪ ó'ę$ ŗ&įū7Ž ’āņeČśņ÷&"·4óō%õšõå ōūųėī śščłę *)JÖ$ņ>ņ īčżöņżžļāĶó÷ūžé&OŃņĪ ēåķņóŪ#ķćŲ1éū õõ1ńŪ÷ä šĶĖņóāüųśļćß÷1ż įŽĶ×čēģŻęž3üźö%ó ]Ż!  ¹ļ÷ü$6Š- üčŌ=ķ&<łKį ķö2īÖžźźä’śßé%Ļéń6īš& ߎū Bß W.ōū¹ÜŽ?ŅÄąćšž$ åĘöč(ńģžłÓóū ńśźųåöć ō8ó!7 łž 2Hß"ó×-$5ŃÅ"ł6éżėń.šł8 ėüÕĻŲóä-ē.ēÕÜųūóėėķ„žÖ$åŪæ•äč÷ #ūāÜņ !&ęļŲ ßĢ ¾ōęÓåķ’żųļąēėżŹžń÷ŲīüćšżńķūīüÜņųJÜĀ ’ź’Öõõ ęņéåīļ š2ć"ķRżāčś Ė,Ū+ūżó¾ÅāēAKńįüÖõī"źÓ(ŁŪ%×ßśżņé Õ.Żß÷/%Õöęļ)./ģĢ£žķj#ē’łż#Ūł Æżśö&$Ł8ąū(śļ=7ń,ėć ń ( ńŁāŪå>*ģ<š$³€šśųņģ+לöÜżÓ÷äčņź üńļ:ūīūłü*śŌõöśDŽū ūłó śį& āūķ³äõłÄūžÜ ūķą×ō ōž Ł’üżÅ꣹1čŲĀā×āń%žļōó’ žī÷ńĮģ ó0ė?8(ž÷ėļłćöż/ŅŖĢõGžTģųżįūżįžćķé Ūßčöņ śļ/žęź š Łšäņłā ņķŃ)Īöõ’Ü é ÖÖ)óūĒ ś’ņ1å ō(ö# µńåę źéžŽžŚ ÷ļĖĘńśĪÜüį’I Ėł,õ.ł ½$÷Ō:ó×üמļļ’[ ĀżļüłōźśŠń Ś÷łĻöņśļ’>’üŌż+Čōüšńčä÷ēń ’ėāżū"čäļćĢĻ’’ ū õžä"" Ųäž ūķüß+÷ņ %÷°žžļūł Nęō ż3 łžųÖż öńJŠĶļ%ü_ļžīĶ“õņž3SįÅźöäÖū óĮųųžŃź*Ü' żś,žų-'ųŠžź !łį’ü!įė­ö”ī#¾$(ŁĻę’$åįķÕ $üłŁŌŚäęśåźāų,ųó āŌķčõļńöžó"ń9ō÷ķ0ł;  ūųŪšķč(*ļ&żšč0ĻŪŌü ż ėō 'ö -į’/Ų×*+Ū š ¼&Ł8-3/šøē öźłī ł’żąīü  ń’ē5Žļ÷ˆ "Óż RžŚ š+æ(’ļןL å čŅž4ń#óå’ŽŅśłö ’*ė öüŅF0łžšč ÄśłA"’ó6Õēóā ķķńéć!ūĘ ōų”üŪĪ %źāėš$"-@÷ŠČ&ćę%8ų7ä’ś 'č ŌäśŃŃ9åš"<*ńņč'ężó:įł#ćś(éīļĮż"×ļźųįóŌ õøŽõō×É3ūõ_ ź üūHļ$ę")ųž(ģģ#ŌŌŠńć2" " ßä" īKēļėģčęķŽ*ł4ę Ł÷ųż%ń- éłō/ž,ģÕAōņ €’ćūōįļżAXWÉŪźā ®> ž’ķółīŽŲŃŁĄ¶ī0ŌōÜųŌź½ü č°®ēč.ŚÕõēļō !Ƽ žõ¼s å™łłęšĖŲÅĻ':ä7äā/!üDļ4/ź;ļšéśųä#0©öĒöŅżN$ūĒßī  ŅŲŲłōČ÷ģŌē#źFYaõāÉąM:ę2āöńŇüņĆčRč€ęi«ėY «N~ƀ Nź/Ö]Ćß÷².ć:į©*ē3gČ<ķQŃżĘĆō+/ņģžKA8$ēķ>ÅҰ¢Ū@¾øv'3ņWūÅÖ½ńفęŹÓL߃õür$k Ź Ķפę1ÄHœ# Ėü×ʀMɀÉē“ĄE×ģŃŀ/ņÉ>Ż ņ¼ ĻęņŚžłą öł÷ź’ęśÓś" (*(śö’÷žÓłąÜ M$Żā!ī '8Ž&ż’5ūź$ ę Ź÷ū½Fń0ÜŲķ€é ńŃżęPÕõ÷.ģõĻ@žųļūż ßćüžé õņėōé׳Ūü Ō/!ū#÷Ū(łÉēG "~šŻźA Ś$šåźé A fÓ "źöžŃFüōVēüĆ÷õ74ĻŽžąĘ ! ä7% ŁļŽń ūĆIõŲųč2–ēŅGņä ō ż #Ī" łŪņ%1ļÓöš& ’€Čķčäü!ķE 1Üē ßīčķ< ŻįßąõéĪśÖ#s,įJś,¾7;/×ē<ļį łżÖžķ"łūōĶ`ņC% šųĄįņ%%ųē)ŽąÖŚBś ēč ļŸŚńüā!,’Ņ ’ņō żŽņ ńų #ź$:ōž" ń üčļūēłAå80ńūķļźÅ,ݶåüčÜé05ūįā ū(9$óüÓŅõ ’ķ(Łćåę„åģøž )čų¢ä<)ĒĘåņWļó÷<!ąņ"!Żäņē ź>ö ėóRÖķźēÜü łšŪņ š98ēåėł’õŻ åĀļÅ$ųך ļ6NŚīēą !/ōćīźēżņīņš!šńŪćęĶć÷ !óÓ×#’Čļé; åļ ÷ńų’ņģĆĢņ Ń šłūņ óż ē# ķż  & ’Ćśćņö¼ ž2’īךžā6ōŲųüé!å ūŁåššöÜ\7ų€ę éąķŠ+’Ż2š€ŁÜĖ' Ģ šÄåĮä =łłL;ó}õ.śšž1āÉĪėy0=©(āœFń ׊1ģöفöKųņ~Ėņ`š ūķFŃ$ķ_Bo+ šźž¶7¼-÷š~ĶÜČ×ü ˜¢‹`)ģÕץ©‚#’ękś¢*Aźńģü+9śł>)E­Āģł’Żś*=óÓ=Å“õ’4Õū÷ģīń'õ-ńłŽŠķ45ņģ įķ&()ę õ*ōó * ö(üó Ų ŽņšH. $4īü $żžŻéśóŚ"’ģ ų üłü÷/ūĖéēćģķįēō-éä Ŗ0 ūģ6ūēäüóõńóś ń’äżōōłŪ éč Üżī įųŽōųžāī žåą ļĪÕ’'ßģč ŚńÕāõ „Äæśųį Ö ƽ"ęćüń’ęžŅ’#ļåŅøšŁß’äöīīīÕs%#īćÉóåųä GO?[֐žųęČČøōTäśńG.źS3ó(€žÖ`C.ęõž²łīÖE+üß ¹24ö ö 5õĄżčå䯚CŚLŽ1ėMŁĖóÕéę+5_$²üéęģ×Ō$żåß0-ńųH ŠKńAŖå& /šKįłRD€(Lå'$-Łąqé6×ōp;Źē0æöü%łė5 Ń ƀ® €ķ€ÕņxŁĢį × ;Ź÷ØŅØó2©xĮńÓóó>üū€Ō‚"‚čįė"ųéRÓ—Ī„ģā'Fš Ņ€Žļ=ćł…9%, éīHÕfuŁć ’€ų+€@n~äƒ÷l"»·ł4ŪåźŪ÷N$ŅłźŖū¦"`!Śų4č7 A ūśöņöśūõö Żżņõē’/Ž%āŻ ņłōżüŲžńüļ/ąó Ķé/ż)ūöų õžūųėųāŻęžś’ļżöóõśę-ņėóō÷ōłģ"įŻšųźł šóōżõ’ź!ōļGõėļģģżų ūāźŽ   øŅęīčü$ūłüöžēīöżłęĀ’ņūü ļé äų"ķś< źÖß čé  č-+Vź, Żņüł īūŽē üńõŠšżÜźž÷ ńųęÜä#/éōķ×õäŪģ Ö’’"é÷üf ~ģģņ÷ūō&ūź1 åßś ^ćłņ. ź&ęöōYķÄ×ėęöņõąī’ųāż čņÓėųč!+%ßčžćŠżķĪę\żÖ.å¹E’üūģ’ź ž"×4üŽöźČśēé#!ņķļ$ą’óŃü÷ł¶ćłĆ ŁŻ āßļ-łĖ%ö’ź :÷ļīōNBźļś"ćŌ+ń³-üĘūÓų“ė" ūäŁÕśķńńŁēÓīąŚĮā1å.3@ēÜģļė, ’ČŻķ% üą Ż+ żś³źčŌĻ ņ»Eżē)ųŌ¶öšėå"#ō ėąÕ;ńÜöśĖ ōŪ įśęαAäŲŁäŁėł ą $ :#’ʶåŁŌ2÷%ęķåŽį'÷šƒ ”ä’Z>ō&ĘęåčÉßķöļōż<āŁć÷īü×ä,żń2Lżš:¾ Öõ šī ūŁā;ęžå H8ļ$ įüžš,ŗöķ žłó’Óżō%žļżśłōūīų ńģ ūēūężūōéuś õ ž š ś ńūż’ųäż*łżż ķ !ż "ēōś śųüłżų łł°Ē ūņłé ’žöūōōóś÷üųń® łå ś  ģäüįģö$ öł  Ū ęšG’,  ż/ōöõńę÷żÜ’Žżļ÷óē! śėüłņī ĪüłüŃ’ņŌ.õ$õźńäüäö%’  ņŌ÷ė ü$ ń ęīåöõü Ź ļūšłĻś)łūńųšé ē čūóšģūõ õŽą÷ļoļ īłżóć½’’ęś!õ3żÖ’’ķ  ž ØÖ  5"ĻģŻ÷ ž'óļ Ż2ŻōŅŪ;’ņöļöėöżŠųę÷ ł Ś6Żåņį¹ 8š õ;õ ¾ óźāłöņäżę 9ščūā åŽü1ż Ļčśõäš/Išüļåį’ćŹ ¶šųųęž’ķ·č4śņ° ĶĶåūņīćąūōåüóó“ģ ÷ŌņĪ’*(ŌńŅüß÷ %ōžĶōš žńõ0Öß6%żņÓėčņóMśü łßćŃņ%$  ķ ¹ī*6ż×ņą éõ¼ķÜęCī! ÷ųģ " ņV,śšžÕžēRŚłŌŲżķ’ ," &2;ż Ķų ō’ķ ć Sż$ż /0÷å żŲŻż9ßöŠŗń0śÄōVŽ1ń Ļéć13ŲŚč ōłļėó)ōŪ:ż(°ņģŽ7cś÷ōīūņņ;>Å ų¼*$%ęžļŻļHśńŌä%÷!Ų/& śšźīė9*ä 7$bõŹ ?\Ę%’üóńīMš3÷ėøčŅ ā(7Ļé†ęó1įłņ¬  ĪŠį&Ź: īźļĒŌųöæźéś’ŻÖčĄć'š'0č×/Ź-öąģģŌó#Ś÷±ččA(Łķ (Č ’åö5>ĻĢż-ÖåĢśü -Śå ’ ķėķ%ÅķÉņÜėėõė[ļäņÓŠęų' źžåĪįīī8ņų+ĪßŅł,č!’ņķņń(öį ,ŁśÄŪß2± (ćźž8JD ĶŌÓ åšļéōū 9Š(:(:ŽÕōē,ęüėß ˆĒżÆųó1>īNź+Żßõ3,žčßŌņõū»ķ+ūLż‰żŠ4ł0"ęęķß źļō1Ō="% ŹéÕžüł0(ż@6łŃčGÕįĶcÕ*ćņ“Ō ć6ōCõĪšąPžōäžöł3ęż÷:!ö3ŅōTńļą ž!ėśćĶ9öC!K'ķ!ąŪī) ģśļėß÷ó4ģņģßü7 ļõł· ż3 šä’ żė÷×(ē8½ćę«8S,ĀøēÖĢžT|ą÷ćĖѶ&C° āšT=ó9Iļ ŁŃóćŁūĒÄ `ćöäų„é(2 ü/Ī;0Ž2//5ą&’ī %Šóż  “į¾ĄµĄ8ś(įõÖ²ŌčŪŖÖžżčĶ×­öōå*ķ抯)ՕöōAß* y’ū³ß2Ā,9ū0’źü(ūā,Ņ6ĢØ¤;Ś0ĪÓī$ ģé” '  $ļŖåņžśōżōį žżžłķä łč üųį ć5ņ5’š ’įąļ źĀš  łŌŅ’ ųß ĶĶžč õć÷ń'/ļąĖüßõŚėż öé×Ėļłōłéąźųńź łŻõ ųš’ųŌųģśēōóęęŲ  ż0źźņõūō:ū čż#č <óöū  ×āóū łüółń" "š óśųņŲÜņ!’żńģäųń÷ļį ōćĶ# šķÜ Ö%ĶģųśśīåūļųšżųĻŌ ŅöĻģšķüņö’Ł  š üõę½ö"Ü$ńńēūž ėūö*(÷ņą&׹ā=śģžīć*ŻśżśāAé2śóżÕ÷į@1łüīü’  ś÷Ž ßł üģĢĻ øō Ńķī !,*ž ūõ+ ö!öūęöóįŲśīŚ .ļ+é#įäž)łüōęē żź 7żśśūžģüŲ  ų .Čóėżū ę’÷ļłłō ÷÷Ķļī ā ó)ņó éūśŌ&łžżĻś ļ łėéžžńóé óńė-ׯłüŃźčüūļū’’§õėÖÕ# āč’ģōāó%7ŪÖ.ݵņ½Ķ/óćŅū÷ĒļMķłé%śżÜ8ń"Ś!īžų2üāņ żżĻ ļō÷āõ+ų’’äO īąŌöŃžÓķīū1÷1Ń#ńįį×÷ūßļČėźėššļņšąšĻ›’ŁŌų  öß ö:åųń3žūšö ęžņüé ŁöžēAāžė’ś3õżž’Ė ā (3ł åö īźņś-łŪßū’āóīķäģŠłćėīļéßłŲ.ņ üÜüńW  ģüüłÕ)0/ńõ’üķīžżöšåī)ėåżóķņéšķ 9ūńQ Õ’õńń3J õ3óńęõžöųų8’ńć)žēéźēīŻł’!Ćåņć> ų Ļ»üłŚG'ł ©ųńŻbō ńī"ė0ūĻ„’ÄēņņŹć śč ęŌ%Āū ķ6ęÕõ üąūß śäč"ōG^×ń źģ$ėß ē×éįÅÄĢ-%'5ė öńšū’&ģļßź2ĒŻšłŌ1> "'÷ć(ė%ž įšėż÷ Ó9’å)Läųī  ćŖżśFōēžźģźż26’’5ėźī%"&źž  źŪīÖ ųšļ$ž 1((ö÷÷Ń1žųėéÅļ 1ś-ćē5 Óßķ% ø ’"ö’Łģ’÷čüęģķłPęóęśš˜ńš$Žźį ’łāņåŁ*Ū/ģDāéń%ųģ7Żš ę+Ķē óć'å*"äģ čķāö2Żüóū" ēłŠųč.ļžŁäąėĶū 'óŻż9Å0žż.ų% ÷žõŚŅä 3mė $É@ŪĒ#ī ś éĘ#½Šīö5Ułō ’ł’ōÓåŖ/ü4łĀõéē÷ōóäūśōĻ$ņåĶļEńą źņšę’ö'ó ü÷éņ ļŌōś é żųļāłßAņ Śų żÕčŠÕĄĪ īĘ÷MéŹĪłūął<ēŪ ÷Śņ/óó< %źśā(ßėÓŗ5&śHķķ+9"čōėóä8 ÷£+ ßōÉšŠźś#ź%: ’żõśōū 1ÄōĒŁņōŽ"J’ōųšóķéŽķżššćį ūś &;óNųė’Ė(ßų= śėģ ÷÷źäōŲÕ ū ŚöŻń/żé$ūź“)¶ßōęõóėŽĶ"9/’$ŻõIģż3śńķōö źßŌąž’ĪŠ§×źēīųó,ķē%łŃ-åö÷ž įūė#č ōŁ  ž#ļ¾!ū2Kņšųŗ9ų¼dNļžźē,# .«ėŅūż ąÕäžć× % 1ĀżČŲżć ė"éų’āõ 5Óļ'ļģŻńļ7ÖÖż:öńŻ /ł¾FīČęÜŻ,ęKüÖ%ņ9śŁ,üļ ( éšż&ū÷ Į: 7+%šü"ÖķĢīś8 Śéķą å*õė×ēŚļõõģ’ĖÓ,ēŁ  õ ķöō ņåž1ž÷ōę!ĮĻņä2ęŃ ŌŪŠ 5į’ ī ŗ-ū źGŲėäĶ óō’ŲŻSžłõųĢĀé’ņŌī½ óēū žŻł Üż Ļńõęõ  2ć8%Ō æłöēńūż€¾ńšķšµūÉūü ųśėėńø)ņ'÷ßšŲōū üļ' ó’ć$Ó ÷$óėõ óæūūC÷š .ß>ŅŅ "ł "ł ļūßšżÜŻ åģóā)%ŠēūüŽ’vŽ% ģéÅčõā#ōūõōöļFų"ņé·½6ēžQī?7ōüć¢źĻÖōÜTéū6ż2ęĮīÖ÷ū ’ ńłõ $DMņōõśń!<ż¹ńū W$ų é÷żļó śżI°Óšįī®žŽņęéżü#2)Ż"Š Ć ėÜüļĄ#ü’-ż/ēŁ óćßéēŁ 0žż3Üäżńõå¼#3ŁģŚ=&?Øīņ ėõ9/üėüēūģżÖųæ÷Čņ>Żüąü āå?*å+’'óąŚńĶ  ś”óūĆāóżōēōüļ ’ēäŪ¼ōóś!%Ü’ žóńūé(õįūōńłņźģļŲēÜ÷&÷Õįž īēčśŃ ń=üīķżėČėĻ( ō5Ī=łėāłė³ žŁłņįōõÜ’  !šŲęĆā’ ēł’ģ$Žņ ’Šõ°ļ-ī ˜įčóĶĒõóļČīłšø÷ĖńżŲČ2ńÉōźķśš.’ūč“ē%ČŅķŁ'é1üłļ! öż#ś äóņü Ųö÷üĢś2 ē ŗ$ ó ž éš“ļ ó æ ėēģ$’÷ łÉ’6õ ÖžŹżūń ,€Ó # ōėŠŹśõ"Ʉ ŽķāģÕ*÷ß’]øö9ķ°% -ė*ōŪĖų%Ęł+äś>éīįĖöćå×Ó'Ä(ĀYf1ĻśķßÓįūŌGÖŅś"÷ō>DļŌ2żķöĀī (ޤŽÜćß4)źĢą* óź2ī’ŚųP&ųģę!YE±ņÖ !M7Ļ Ōļā÷Č’üś  ņ ęų%ūÉāĶ!ąµń)Ņõ+·čöĀ;āė "õģŅėżąõ Ōčš P÷Õ: #( Ėč#īą÷īśĻÓüå éJ]ēŲ׏ÜŽĒ$ć-ŻżĻķč"dķśžS#Ńå#Ņłśš„* čå āģ FĢīżü čżełžšóūķ ļš öÖč€ų(õį'e8ĖūĒņ&šš מ Nžāļźč¼“īøéüI(į’ż3ććĻų'­Ł ī ’ļüĘ’Ųžżż% üüŚčēūåį ÷0 ż×ōŅ(!ŚžćÜŪ!’Æł!Ņ’ņ éŻõźóīųėģ3ż,Čö&!ż+ /Ń ßćō< ń)’š Ü óģ“ö5ļł (įņ ā ŌŻįųŪ  ł3żģŚŌČšŹž÷ķœņļī ū²żššŪ:ńé!éņøēöŁĖŚūŅ'Ī0)ū9 ’ń¼`ā/ę'·ųŃ; š$®Īēņµē éž-7Óūųō)ö ķūŚķŃōłęķÖŚžøj"ū ņ ŻüĻėĪļŲ+÷“5ō ĶŚüś¾žł 3äžo+śKūķū ÷»!ą āšņłš’D6ųż śĢę ž å8łł4ų=ö„ń÷é4ņęāņįŗÖŻå+žīźµŗČ‘ö’'XäŠįķģźŗū­äĻōśZÕ= +6Ž*c1$ó5ęśé!äń ȽY'ĢøąŪYĄųö LÅņ™GÕ_§Ń*ē/ėÜ:' Ųühłō éė %%!<żōõ×ųćģ!āöŽĻ\ŗęį>ł×ėńš²,挚F¹ņ~€9’Śē )&ó5ąöŲÓł9ņ (.ź ńś8ų£#-1ļ†ą"ķcŚ÷2Ä'Vņ ż öź*IōéŁėįžłš Ż) ģō"ŁĻ0ēćŹū 4Ļ$ž .VćµāŅųåæó+’-×Āżžńāü©é³āžßćKń %7.$1ģÓ ģ÷óżė 04ńš¼ćé§$©šī÷įOäęō'śüŃö ēļįų Ć 'Üń÷žą4łģ-+éłüčŠö½Ś>ńļŽ'ū į’ öóüŁżŽ!ī Eļć÷Üļ į× ōģ’ė$č.ó 'īóģō ’5Ķćś<éńō÷ćÜõņžĪ ąõÕCŲäŚ1üßźļóŁ7śŅŚ-ģ üō$ęķ:Ņā ł ć śóļ!Ü *ū !) ū0°©)'  ’Ó!>ęå8Ų Łśė2%į$#š3éü$ōėģ.<ļ ūš łćłųü7:üŹśśżĢż"2 ! ’Ż1 éżüüł ČūŽšö%לš/&śōę ߎ"ßćŅü# ÷éŚāöżę’ł ļ&õļžŽõ!øśóP-A’ %ųšōņŌŅ'žčüņ*čīŃéś, ōżšÖå÷ĘĄ÷ń Ha*Eēņ$ż "› Šaē£šłÓ źīõč+ōļė+Ų$Õ,Ü ėłźüäÆę Ć š°ėźßé#:12ĶųŁ/ļĒ Ķ õźTDēųžīŚ źŖłę5 )1:=C µŲžÓJ ŅD'ź÷EŌüšģ!āīż0±ō÷ņ÷ >ü&Ģżæ1,Š8ōšśõéEö%ųŌ č,īåöė÷ś¬÷• Ō ³ ś ē ćķ'ń ³FŅšźÖŅė'õ24źĒļ:źõżü,÷ę6ģŻūäéŻó !Ž# äÕĘÆčéļ5=öFłęĖ! !ćž!ąٱY|0Śüū!c¦ŽČĀ Ż1 Żē Ø3 aÅó(ź4Śļś½B*ÓįÉÖĪ8#)Ęé żaĮń I /VÖE÷'łfÓÜ ĄįÖ¬eŌ’čĻČ’čĒĒīü5}žµ25ž “ģ 4F-ś# Ų>Źššó’;’ 8 Óē7ń9Ų žīķüĶó’ŹßōłŠö ĖśéīŅ& <ģżų’ ČüC & 0ņSėńüóģī#š’÷żõżÜžēŚŹōłņžāä÷źųēŚłłļ Żšž śģŚņĮö  äļ * ū1õöēėą ōūėųžś"įę 5 ±żņļ%ų÷ õ ŲģśņóÖķūśõń #ōŃüńŠé łžŲ(ķłżEūĶö'Ū÷Ņåõ ģüō"ļüńäč Ūöęęķ  ėš’’žöļŪń’ŁķöŃčżīåęūż!ļķŽ õ/żō čżłśÓķų%2÷ ų3ļł÷š ÷ł’ ūēŁŚķ’õēŻķŚ ö÷ų! ś%æĪ ÷0 łõķąłß Eł6ż5 ŁÓņöō ’ż× ń/02Õśķ7ś&'ūźžņČ łśśę?ģ 'ē+ųēŲšŽšóņ ą ņŁå3+łäķżÓ÷ ążńI.ų(ćÜŚé/$÷šČ $öŃ %ĻēüżåūųŲš ó÷% ļōŹ)ńųĪ+ąłÜ3ćFžZéū ś ķźč! $ ģŲšń éÜč÷1ģ ńß„žõ įÓłõ Ć ’5<ż0į ó=×Ōļ ūļł >ōåę $(ŲQ¾é÷ēć " $łņŠõ$čš÷ųą"#÷ ģłžū"ōöŻūķĻī ·īĒ’źõś÷ęŹÜ÷ćü É÷öõłēēGÕž÷ų+óńĶī=üĀćūü>Ü)ę#Ķ÷;ņ(øł€ņŪ@Éų Ēļ!.čł"ś óåŃ“īü Ķ;-;(Ā&XŻųįīöłĆąŁ rōöbóF ÄåäŽåŻß÷÷ ćžØ%GēśĶ/üąÆōÖēŻźšŽŁ Ą^čåōåż/7žg4ßńē+xFłīõƾčĖÜĒ)Čģ÷<ūĢ3J’šõÄ&©ŌÅėā'7ģķé±"6)(ŽR’śļģĄ÷ź ü3ćŗėį&žņ óš$öö2óžöżž)Ėż ä/Žß)÷Q 'Ż-Ł ķ Ļó ģ&Üč #Å«Żūē»ÜŅ éĶūņ ų÷ŠĄAGļŪģźó2ŚģöēćŪ ļB 2ļĮžå)č ?3üīżķžøū ,6šŽ ė¼ņ’ š(õÄģčÅ)аōĢżõ żÓK+ģ`É āč!ēõ  Ž łāÕėēĄøÉéŃéńö*ó0ö äūżž šń #ö"ŠīļžĮ/īżŪü żū ĒÕĻŠųÖ!6 ’ Ł ŅŌŻļ īóÉ5źõėżłżäż÷ššūųöīļīē0éīėżöŃŻ"ļŻķ*Żī,   ž’źū 'ź %÷9ŚÖāó%ūö ×ļ$ńźż,ąęčōāõóö ļģ õ’Éü$ų ģš Ōżż&0Łö’öōō Y’Čüķ śŃāāś ū.­ ģ ēé# õ@üģżā’ Ōń÷źŻüūśų ė ė & ųõ0żŪŻę×ūö Õń ł ūĄ\ćŹū éŹ åķł÷ģöö÷ ć)ęüę" ÷jģģłŚ €łū üDü  ųāŚż÷ģšīżÖłüĻ’żūéēėžÜ 2ÕŃšķńÜ Ļč ū@ļ%Ķ$ ńāoa Gé;1ž$2/üūśžęū ķ’šīÜś ģčó/×öĖ(ģ*ßčł!Ļē'÷Ö*é,¾ēńūżÓ(ĪõźūG9 ėå;ē»:Ē öżŽ+š÷ ā å÷ų+Ī ķų!åŁ: Å žåäżō7ļžķūŻ?Öö)į+ķõE2GķęĘśūŚųö÷źķü åÜį’R+ &é ’ä ķ B&ļöČģļ'ņ,šŁ ōūś÷āł’ī ęż , üšÜ’łų=õž.ū+ļģńļś×$ żņ ó;.žŽčüåņŁWē÷ūšųćą žšéŁ ł,ńAķöł×Ą ńēĪ’ń ’ÅŚŻ!ģä8õß ż KŻŽš &’ öāŽĖ ī+ö łš÷ņĪ­ ßĶéā$&Ió$üųāųąŽ šųń4¦ģņę E’%ęõūņżéŁń žųõ žžąöźŪéŁĶļ7<ļ ųŻ’ $śšū Ś2ūś óń$éßÓ ō!-åśźõ ł õąÜÜĮ Õ0Ģč é6ī żī% žāŚ!ś ÷ńčä$ž!ā% žĶ’īō¹žś@żó žźńLė9 łüńü’óķįēõņė4š&©īśFńōõįä÷ļśūč÷ķī ęńõń ö Ąņ÷õ óźćśšīž Õ#ąūż ėģćßēöŠ;é üńå óāā’Ķ   ł’śäųųō’üYūä ļžĆ3čś"š /5ų##’-ŚūŹŚÕó ćÓ śčœ",ž Ē ō/’+śüĘü×āĻīł’ó3ķśī ūņķÖ»Ōéņ+ŽšõćÖé#(ÆćśßžĢų%ä ę"ŌģŚļŚ0ąóé ūߛśņÜč’H`Ą ŪśĶ¾Ē$Žų! żķ!CDķųėLų)Žčćķī“Ź1ų!Ų'č( ķÅźóõ€$ņßł ōśł0" %4ž 1õćöż! ōēł ģś9čóµł$żčś, &ķŲĪ’żÕ! ļ¹öõ öį  üöīļąēźīÖžüĪÜųń#łėöóŹč'.š  ÷’&'-żüśųÖõšÜė) śüöõśäü &Eš4ķņ,ģō«T ę ÷"ųŪū ÷ ö÷ö#ģūż+ś’ [é żč Åū9ŻżŹķäģ/ęņ øŲł0²Ęńī ž0č +šęōõ V 3+!żÄ*ńĶ Ü’8īöå@ŃŽ'óéÜł÷įĶÕģ¾+! H (ź÷ļ'0×ęūįźÕ; ’Ńó%üä ņ÷éšóŅōéųł’żčż 8éō÷õö OńžĻųŲ Dō3’ųŹžļĮü= ÷ņ Ž*&ŽŪģł>Ķė#2#€¶ó0÷ąłśģX+ń/Čļżāū+žŹ÷ń īĻżĆūÆ,ėāSņöōŅ3+*¾ńņa=ē8Ń1åÓõĆ-!ąķš CJ¹€öźŚ¢üˆńžßżŽ’į.ćK#»ļķ ś÷āõā (üģŲ FĘ 9"ņßź£¤#ĘæQń诹żųÜēķć׌ļ’$č !Żé ч0ł0åźīčśšüü|ņ éóāÜ Ī8$čŃŪō$ŪźĻX tōų$’ĮŌ9Ų.łū’#šC+ķ )×ß ’ėżŪ ļ óŠćüõółĀŗ!į׊üäÅģŌłIöēæöÕöīÖõÜ) #4)ūŚ1źå99ņäFų ÜK’+6ųļóāķ bæĖųĪöµńżńßóš ŪüHģ-÷ņ©1( äś5Ā äÜēį ŪŻņüČæÜžšÅĢźH:¶+ ’ŻčäūŃē ū34Ų×üų*÷#Ńėęų½ÕīįźłY½å*õ'ėēļšł,< āčęóŁrÕÓ#ߣ,×÷ŚńņūÖ÷äžŃĻźßš-ÓāöėÖē *®#$ÕüłĪ9CōŽĄ Äżņ¶"üÆķ)ķ’ć Čößõé’įś’ē’’ķ ńśżÕŠ— 6Ūšńę õ)üėš1ģ ,žņ1FūĶžž!Ż$Åėķ ż-#!ėūäč§üJķßö÷Ö!ćīķčŻöžļ÷=÷’*ż/Śģāń"ÕĪóŪųć" š ;żŪŻ1ó3ÕķŹŃŠŁÜī¬Ś­ ķ&č( śīūżéųåŚ#+÷Ųēüų9Öģ-ō#ėĄņ0łī*ēę/8īė¹³ģś%ņćž6ū%³8óCņ ¼é¾ņŚ.ų(ļžōļéÕ Žž $óņų Ö ŌŌßü ß1ų’ōųž!ķćĪżó$Ņ©å!ųŁĆ2I¼øŠõ“«ćį ’Ż÷ŁÖ-ßćŁ*ąģÕØČųāĶą &äžŪóē1/ōŌöŠąóD! źč óżā (I%.šÖ»ä ü ļÓō.üģīęźĀ&ųŽųæīŻ"ļ/ō8( ąčīčöł ū-!śšņņ(ķšĶīģ č¾GżHŻ ėą6żčæ1ķź Ś å’åÄę3ćāéļ L žŁ°  ;ėųČŽųŅ$ēėę$ŽóUĪÕŠēłĄę÷Dć yē$ķśļŪīģōü Ü’  )ęõōūö ņķņó÷ü śßśóōåōüܞüś!įõżüīĘäšīļų  (öł’ųüķūōśāķüüūōāūęū éų’ģŽä ģ ļóųéē öą ųž÷ķ żūųūż÷żõöäģH üėł ÷ń!ųüų*’ŠRēŌś÷ģńöįģ źöāłĖ#ÖņåŲÉēž’éüīŃāūłŅ óļ€ģó),“ź ćVųQÕį;”"PuŒó ś÷ģĻ. ÉČżģś0ķ, »Ē ģżńGļōģżęŽ' óĻ)õēaęķž1żļå3 żśõČ'÷|ū)!Ź!Ś’M+Ö7łż$°~öŚ) żķį:õß6_. Źöłöņ ņšū÷2łņż÷č*żļ"öūė!ūóķ÷ ÷žĻśāJśź ’įōņł#ßņ+ Õ #ėģńīõüå ’ā äū( óūÖ ( ūż ūńēėļüś$é©ųōóŚō7óūņłóóś żļóś÷.Öżšõųē ūżś"éźēüć÷źųļõó÷śß öäH±äń’ėģž.Žę +üÕå ć6"ćč)ßėäčēŃčłįéßŅüąžżķó4’ & įéśä åŠćųłżķ*ōńć,(H žęŅņó’ńŽ6ńķ0<ų$żłüļźćę.šļ9ēŅ+$ż öŽŻŲü"üÓ /āļ*ķ€ źŁłńÖäū÷ Óūģöķµā[é& åšIŪ÷ÅÖęŚ-$óćŃņĘ/ģѽ3äYĪ"éLöųGĻü銳$'ŹķÜė°ćĒżÜķ,’’Ž šņõ¤ż°é Ué¼ēõņāŌ’ĘłųĒø$÷+įčEŽéīõīéüšõöėļ Ż’Š!ī5ń^čö$)õęįÜ";õ±ÕķßčĻė )Ę÷-! ó׌ü5żöž Žū ó ’ 1#ė*ńéūżēüü.5żć’üéōü1ŌżćżŽä3ńźś éü÷ń’ųÖōżį÷źöųōīžłōæāīģäżūÜåÜüńļż)ė’ó/ š śž +äū;Œ)ź5ļū30÷ļżŻīäõóé&’ņč/éž!ķō2ģō>¶÷’5õR* żöŪšč üłöļóņō".ģšŻųŪü)łĒżšõõ %÷üļ&%óß<Õ2Ńß(A÷ŲDÜķčŗųęĢ.ö@ś WNģĀśåČ śųõ’łļĢżęŪ5ōž öżŁ0šF$ģÕ 8Éåźś7"õ3«ūšąÜ Ųüš, !#ŽÕ&ā÷ģų&ņ÷ä,ļ×ä/菿ź(&īśó Ņž»łPó/<śļųŲäū8æŻĪ8D۟žō<å@ ł+’N*ŗMŌ ÷Ź@žXõ#č&ż:żŗķ ŁźS"å$ šśēŲ"øī=’@é Ļ€łŽÓė ėåüJśø×&?ēćI„® ū Y Õ¼¹ļ*,čxC!CŠč"/?óß*śłé÷$ōY" Öb>'ßų8)ā'Źīī(-ą0ū±×ņšt£:ÅI,čŲųųÜÜ(žžŗåėÅ ųļń#Śśå¶-"8!ģP śŅė āß"īŅō žļū"õ āĒńī äõż%ņ;!ĘóŁ ß &ż żśP! ō÷żŪŲÜłżõ ä?šķŽŪMÆ#%śķö=  ü°åńöŁĒś“ó ½3žó ÉēÖ ģś,Ķ ū ¼/Óī+ćęńČŁčōś'WŁ1Üļ'"ńŠĖä#Īģł[ĻE÷3żż ēó"ē ż8 ’ż ć$(źś " ųžśÕ]&,ļü¹ėņõ/ŚēłńōŌ@ŚäÖ“ž ūņTĘüö&öč/! üć įń’ß óüŚ /!ŲŠó&Ż+'š 'ū9ż įņ Ś !š4Kżž/,ķśŚ<ź’ ū-ęŃ÷Óżų ąžČäĄ>@ų÷čmśį8Õ÷ķź Śņ *#ķ ļōłį5ŚāHė4ŻÓŅķ­īū’éśĪ8’æÖłļ%#ńł ,"öõśüų ņģ ü-šńļóĖ Śźü#ųōÓōüķĆīśÅčōŠ9+ļįģ’šīūČń ķ Åéģń0 ąģć2åśĒāūłńįü#žĘ ­ēĘÓüåčųķžężčT=ķ*ß^É3ņ[ō6öšCµ6¹čė,ž 2ś-/ļ: š -Ė ńŲ Wü3lüö _žĀö#ĢFįü ÷÷ĪŅ3śFēķ1(īTYļG×SįŽ¹' Cą ō?ē'ģŁ‡ńūŽ÷¼ä8 ³ó5š$Æ !ņÓ(@UŒ 1˜)"&öžžŪē$>ī!Ś1źøB&6[ńõżeżž’Ī ųļ Ęś Ņ÷ż" ę6)°ģĄöō ōõÕā' Žļģ:ģ1ė%)µ łó ńžĆä éā/ęöÖÜ&ĄžćŅšÕA-,į ½ęę’ å§ŽŁųņ÷&3ųäųł#ńüäDżRĮé(źó™ŅmåąģŪģ ę"ó%åŪé«C<8ńęā·ĆŠ’9Ųh¼ęõĶļ.ŁÓūēöė! ŚńüĶó¬”1äóōń÷į(ółäłÉćöÄ Ś"ēėö’)åīģŪšķ* ęéŲčżÕūčó % žć ÉÖJ6ꏹÖ õč Õé’ Ķł ł ćDśĄ’ķćĶöūćŹāėŚž5ė’žž ’ąšė÷ åÆńū ģś+Ēųķ÷ĒóŌŲõ,ōŻ łŪžūŅŚžŁłå&Čū<ą’ąųÕÄĪčö ūśżŅž:ö4+å#ļńŚ÷żßć ń źęÜé(ž7ž&®  éčņūļ ļĻš ’!ūŁ ó!óŻūŚłóŚōūčęėķż1BšóčĆĒģīżŹ öüü,öļņÕņęźņ"įĻśń ž÷ęžō żķŪēŽņĻĪ5 ŻééŁ(ü’4öÜėšģR ģēŹõźķÜųżīŽü’'üDÄņųåö!ļČ’ē .³&,śā åÉ,móš-ōłÆė:ļ:ūFōü×ē¬ż=,ŠŻ-ć:"£ŅŌ’Ü)’ÅøŻųń=šõŲļ'Ü6ōߎ5 /) žoĮÉŁ ą<%ń%üžńėų£+ēż¬éņÜ ī2É>ŗ"ęņ< QŁ×żĘąö8ŅųŹĻĀ*#Äś9ÄśŅóB  ŁōĶßćøg’&ņé’/÷äī2žžń÷ėóėžō żõFŅ%,³ßåĖ# 茿łōFQ$vćüķüŪd°ćĖčŌāżłüöÉÖ4óņ÷ō“žō)PžÓŠŲŃżŌ: ĶęŪ’ūż ĆüBÓ Ö @Ćę,łł AģöÄ ļŁēõö šŪ ķē&ū 1ČūųmńēōžŚŲńĮŌ įŪļż3%ą žü 3 ,ņ’ ’ćģ ēāå Ū čķłą )ūõŖę ā÷ųśFż’žłöžņ÷Ō4÷ įņ÷ńģń- ļšÖPźö÷’))$( ž !’åö-üX÷čż čń!ūćž #׳żšśė÷ ųÕõÜÓ ŲõüčÉööž éłéłÖį’ ŲīĆūņöÜž1ĆåöüģīēšģMÓŲĘ»ÕÖš#÷óĆį“Ļ .§ Eį" /ž’šžź¼  åżś üõŁé%Āūń!ęüüėķÆĖ -Ē’ōüÖžĆ ų8éö"%ęėń×ēźźVõ ęįšźĒī<äķćŲņōŁ÷®ūš 0ėģō ä#īßKĢö¹ł²3ł<ļū’ õ×Éņ#Ēß/ć4žśĻźōlŚź7Õūęīš'ą ÷ ę%Ž! ž ß.ōÜ5 6źüūō'K', ļē%Ü óķ~į1 ųóõ"&2 żö8ģóüéŪxüÕžņģ VÖüōōł )ļ* ¾ õśż:Įė ŻĪśē ÜščųÜ÷ķīŁōńĻšļčŌ,!Įūāä ļ÷ÕūüßÕ2öļ'ź ę śżįźAķMõ'Óź Łā/Āķńż3°"ĖŲļõ×÷ėiņ)*.5ŹŁ÷, 5ĖĘ’ü5’pė  ų '+4`żÜāķļ¶±ńō!ńō)ĻłĀ8·š ėūč$  ęŹ4AĄϊčĢ/Ąķäž86¶²éEś š#5ąüŽūŌ8ߌŃņč²7ģńē†×żŽPŁną Ż 8Oń)Ž*½¶ąšž2’0ZžOq' IĻß šö’+ęī, #A’ō’پ,ļŲäŻ(źŹ4ó ąń÷ķčūHÕĘń  13 /ņķ/ķōöüŲ-ų Žōšųļ)ģēöęś3 ėųįā÷ėź Ż' äū ÷)$ģ*7Ŗē ,iĪ ųśšņBö óźō éŚäāčęóąäé!1įŃ!źō"Ń ąīš’ßķó÷ļ)/ķ÷óŚūüłśćėöõążēżō ę ųųś śē ļųųüļ +čōĖ’š’Aö Ł?äüłō čäųņéüłīąļ ēļ!<= īłĒäś ūšÕ<’łžģ ė ēśżėč ę$ųč# /%ēü(ź’ļ(ļõüģ ļłėśŻņčš ÷ńéŪ ł  öåł/ūęŲ2ėįśČQ°ūüķńLūóöŌ%õż?1óōā’Ő ģć4$;żNĻ ):$¼ĖėŲń“žĖŁš8UHÓ ė]ĀŠó$å5óļE Ł!÷åšņÖś"ņĢĖŁĘ żDÖäńīßś9|ŠĀÜõH&4j9äEų;MŁš÷!ÄŚÜŲ'óąŻĒ'ŃėŁöļäĒŹż6<+ńIYŽB “ęŃŖö/śõ 7ų»Ēß#&L™śčĻģśNĻó¢.¬/VųE’.Ńżņ éōćA÷'!čęĢ) ŁĄSčäģ9’Ļ ö6?€-ŻH;»Ō+ Õøėfö5nė¶ųä3<7@fŲšŚ-åŚģģŻväMč× $3ģO ž¢KZčżę! 迣ą?€Wź-1Ž"įņ#šóL÷ČĄB#Ń­'éåDėļå2¶¹&łćŁēŪūćąäĆYłäŻķÉ·=½·AŌČ7ōę„Üż$C#D$÷?ģS&īėŪĒ ŽŻĻé;źŠ ×ć)É4EĢC&&÷öś7ūū.%O=H-śļć ó"9õ"ė(õ6žah$=*!ā*ēöéø¶ ģå ų%ĒŽč ’ƒ3ūŚF#• Ó³äŻøŖ!īF÷õ)ķQä’śÖÓżÅŽ(>› ÄČõÕōėļ’ īĪłB¤’Ų@«9&Ÿ8 ~ł"CAįŚÉŻźķš-QYD”¤× ’×VV÷Ć#cļó ŪźÜē č:ĄĶ÷1 éż,¹ŅĶ ņžėē&–fҾ}÷&Ń 7ė!č2ڳ÷žĘģ:@óU@)‘éĖ')(>ɬÖÜ-d»’(¦·ļķ ä0UOķ€B"mū&łQˆ‘9’[ÄdæĮŗ'%!’ł¢Ņä ŽŻQóÓįiāŹ‡š-óO+.ś#ęŁUęŽÅ1¾ą¼Śā²`ažŌ‘ÄāŽĮuŌ‚’Ń%?®*ū;å Łķßõä2 åńč×ļ18’CėYČeŽ`@źß)óü0Y.ųÜWŲė#ņ =ĢBłż·ÓY÷Žć<„Ķüółź# /ćQÜQåžą2ėĢi Y4éśé^ūÉ ų®łóaš6³c'8ē/Żö¶ōö]éüĒ;ūŁ]ÓšėŲ$ ńE"ĢĖæńėÄėל1 ’ /÷­WūWń#ćö))÷}ō’DŌś&žĢ܂Ąńüī '}īO{ŠĶß¾Müā"ćøŻŌŠć;C.ßMŃÅłƒņ¶æ·ņ/b'ńĢg8«H½œNęō<8Sź"t 7 Ūłm‹įŻ6Ņs2³īŲeņųę'éŃżė÷½c_:=ÖŌ>šbʱjõģ× ęčŪ#F÷ų¾SFŁ !óėęā" żņĒ\ę “õ‘Äōęę@ä4Ńæ ŻDÄŪęā·’ŁŽõļ€ÓõņDńļ’$ėĮ*’:ź HäŹŃ„ ėŚS÷ÖöŸ ü ĒŹų*‚OŻūh;2ÉĻ-éšćąŌ’3ź5#M üļÄ2•*§ Fö:õžžüżÖÖļÓ#Aå-Å÷ĆÓŲtūāų&źņKßߎŞG ,ŁCłåū żĆ3Ņļ` ł ćĀZ¾»bÖ’öŗŪ­ęĄ `śüąÖ(Ņłõ€"ēó6šōܶą  ÷Ź9ä!ÆżŻüß ×(R ņ Ńč; ņšēßīęä'¼ņåé@>Ļķ± "ę'éŌŲąĪµ#½õÖ $ųõ.éåü, čį*ē’üéųŠńĘčŠ6Äķ<ōå+ Aßž±äüś/óÉęŠ £éčZÉźĢ īū( ģćżłśčĖŪšżMõÜų+čźĶŲ%FžŖ 'S>ĶŽ ĻĀ’ F6ÜÓ Õü64ūŸ)čŅĆń($F,āį³»"ä;ßń§Ūµ¬ŪæśݵŹÉżŪŪ<ÄīžÅi2ĢŅ,5ĶńŻę&#aæńVęĮŃśHEż Ķšš'%ę.×ĆPńåö·’ÆĄń"€ž’³ ō„łd³#ņ¹Ęö öi>*õŃć 'ź$XĘU łčA&?;V ę›ģńŌóī/ąŌ žīé-āŻśīķĪŗź·Ė÷žķžūč1Ģ09źšvŹńāī’öüפī®ģ4Ķ$Eś 1čķüāüņīīæķėčų ’éęųķõü’ę3źŲ0 (ēßóEŻ÷äš8ņń :ēĪ7üµö@:ų#× ;õżõńé-¼ó”ą0,1’J½Ś) #éņŻłõŹąD@õźPÓŠÓ$āć(8ņ迏ū®Ū½õžüšņ#ņÜ 0łłĪżBZįų+& ²ėĒ1ĶķÄé£:Ś3éŪļ½ ģāņĒŪĢ7**Րä“õŁż½ń3ōę÷ Üāģ5čéBė’!@®½/%&4P4Öß)Pšö&Ł# äŪŅ X¶Ü$čūµō"æōL ģąčłĄM’Šēņ.éŻČģń½>Ż5FeÖŪĶšžśä$įōŅć挹KöĆ<1+Žķ½ÜČŻMŻņżķķ ųž:Äóń‚īņš÷īżī^ ļ"ź¬ę16ų)ģ3ģ-&öGōå&#ģŌ(Čżč¼ģ,é:"ķN>ė)Ų» +Üć;%ÕüÜ'õńīč-ŚKČöĻ åšŻģ%¹+įīǤšŻ#õŽ"üiŪ°÷üõõ$æ[™’īłēß’ŃĒĶņœū+ ģÉĄ>ŅšŖ’śćüīȽńŻž$Ö* āŖö*&ć½.čųŚ!ū4łµē×ųō3ģ=īā5.N ģ5ū ĶŽž;ŲŪśóŲ ÓąõÉäņåį&(Ņē ć õG øĒż Óz2 ’%ē%ĪŅGŃöūķöó ėą1čēČćåEŌė öžēOŗźaŻžę¼įżņüɾ 9Ŗ8ßŪóäōŹųŚł ūŃ ÷¹ģŅ śÖ&’!ŲZŹt*Śč%#ŁKłÜKŅö ŲęāĒ6ėłÕśął <ēćūĪī!šÜ?(ēļż ß Ö'ŽRĪŽN1&’ ~ĄļŹŁõ%„ŃÖ'Ų2uĖŅAY’Łę½!÷óš£WĢćIöÖ ń!€U@M€÷ä3 ģMźß-#*ä:ā’'ķŌVĘĻĮYōųóō? īü°ż·Mž÷å#n (J1ą"ʱ\89Hvß(ŌšßęķöģµzĻś6ĄŹ=SčĖ?³īåE€Īž.ö( ’ńĪūŠš"­6.õ ųĆŅ›+é7š,õųęļžJžßōD!ūīż+L°ģēļæ 8§óÉģüŽŅöÜś×ŲÜ)ņ/ė%]ĻėīŹ ³€ę&»<ĻĻF³(·Éßģƒ$’Ę^ļĶŠ.ŗ«H ÓåžŗcNųā¾éEżö]#-ģņ õ Ą<ŅÜ''ńsī Ż$b®.Čą$PLģŃå õūģāŅĘéĖžéĒĢł½¹ųÖģ3ķķ÷Øų¹>ŌūĘ&ę0–ä+õ'7×&žŽē= Ż śD÷ņŠÉ¹ęjLöGMė7öQ÷/6įąļų2érź’ŌŁßēA$B¶äķ£ėųö ņŠ1Ņ%’åųŲś’øēļŽÕNū/ÕL7ĆŻēģö“;Įó5õŌZņį5#6ļ2ų+»Åłč#"?īå(ĆņĢćõ+ŠłžĢōõ * Ńā ,åć'™æä !Ļ×Ų ąÉżżCŻüäŠńł3ūXąµF:ŪĢ%4ą¼óõõ€āŪ%ųóśźĘņōŻķł:&įłŻīŪž)6ņ łŪū ė#7žŠųĆ’ģöōCÕņ~óåé ÖäŲėęā ōĀ® Ļüź+'° ęłą#ī1/óģ6įÉD)Ēdų/’ėź+Ž÷÷÷šā ö OäLķźļžų6æ«ģ°Īūų¶ī*ÆØ÷÷#ź/ō'©Õ š¶§ YüCļ1Üčķ+Ž7ļž>?Ÿ '&YD&"7Ņ°Ū J…ßļö' ŅbĻ‚±õŌš"±ż#–ŪćŒģóżšōėÖųˆÕ+½ąšŌōęėÄöū×Ōęŗ©Ū¾žńÜīŻö×½ĆNōĖõöų:öT¹ÓC&4TüĆåę’ÉŚą)ĄøŖöįŗųŁNé6Ī/³ś!“²Ā’’ó"±Ē ėŗÖż ŠŹAŁė?¬»×Uķó JE9č¶/€ÕłÕéaįå’Ņ ŗÕ’÷ żŠŌQ.éü„./TńĖŚXš7ż7 ®×»ėČ žŻ÷,#Ų(ļÓ ŲÓóŖćŲ F+C˜FņHījī.gĖķčµ8Iż W į½Ć×’ ­ńļõ$H Ą>,ĻÜ ÉŹ%Ō@ēäāÄāņ ū×3ž$ńŅšŪ ų÷ßõńéČ#ÄīŻ’Ł ü6żņÜż")ĪŪ"ųÄż÷ķ¹śßÖŻ'žł5ļ÷źśćļ­ŁųčĀ#ĆÖąõŲö$ļž0/ł* &ō-ŁõńõĢź Ę- ģ½Ķóā.žĀ ēŌÓ ×ķFéķ ģšæ·&źĒ:-ŠW(š$ŻżŠ €Ņéź ¾źŲįäęł ś 4ń!÷÷Ķ×Ü! éH*’)žõżß& £$÷ŗ6*ŗ> åä-ŅŽæĘ°ĪšŽŁŠėĶ6ł»¼€ū2¾BŲćœ566ćöhÖ#Šķ¶.~Z(Ņ}ÖķÓÜō’ąģó éæŅßńT5żT£¢€čŹä()Gįa 1 Ō÷Drŗ;“¾Õ ^'ė|"«\Śķ!ÉJćē’,3śØ+āŻ :ė$žŚōŽż]}źį(Óśōż+ŪÄŚ÷(=ļóü’čŅ›ņ-óōöõ Łäņń,õ$õ&øHĪāŽž'Éó×&ēåēļš8Ō;#7éžĒ÷(ų 8Żļļ¶ü:Ė&ßß2ļNä)"Łń  ÷·oŪ!2÷ņÆäīčžćIņįī¹17Ķā­Ę²#4ō Ą*EżĆķĢÖ ąóčŌµåķL2Åęīé²ģąńéńńkÜF8IÓõ×åNŽÕ @ź,żĮōą.ģŹÓJ 4,’ÄÅņ5÷ę8 ßmŁüü<ńĪźŌč>.ųĄĪüķčāķģÆįī’ÉģžŻÖć1zFŚÖ*ż_÷ŲJA &ćģ żø÷#Ž'-ĒÜ ęūĮ9Ę,% ‡2Õóü¤Ł(ōĢ#ņ3 /ź€ģm6ūCŗÄ3×ńāĆżšČņ@pģĄ= ·š»;>C ŌüćŃ ßŅæ,ŚšŲ ×Ī0š" )Ü äåų °Ķé é üČ’ęųć*ģĢī.'å š/Ł0!ĀēŃłéōį č%0@Õż1ł?Ÿ2ß ¼.Į5ä&ČÉ Ż÷ż» ć %żéščč Ų ś'3+½ćłāężä*źŹ'ĻńŁŲIFņyō(QĶņ üŃķīŪ#[ūtüŗņōąįD-6EõŻĆĪöė$ąéĪIĶŽÄłåäC4žōžć:ēŁöĘ!ņ/&׹ž2ęź«B.¹Łū/óśšļRė VĮīTē»"Z'é/Żźņ,óÜĄęÅø^0ÜĄé äĢ$ēļ»ž$źĢ]¹)–Ż.3Ģ ū/0ēāō=Ąģ 1łĆėžĻC GžMēĘåcDŻ <ÜÕ!ļśQĀńłŠšńļ8Ć×Ļõ;CŅ6,é'’ŠōēĶÖH7 ę=)²2į źą-åL÷Ćž¾Ł ķōćńĘ'§ėM2ŸP¤ā «Āāpņū /Ż1ō1čä×"żŲAįŸņ)Ē2Vøī Ō'ŗĄÓYŻł)^ ģĶāę¾ńģäJŹīäū 7žõūē ń&*Šńč! ųJ¹Õ’ś Żßį 2ŚļĒōŗÜ7 µ)Aõ¬ąi(« ­!1¾.ł(ŽóóPł÷÷¬4 ŚĻÖøj9DÅś$š’ū 'ņūŪÄ$„ż0÷ōūX¬»īłå'ūŲśöśćå¾'Ž’ż*ļšū éīƒé įO6 źó’õ-ēņ »›ē łą  ż+ōÜžõÜ$ Ņö-ę » é*üā©łŁćń $ßžżšō³+ō7.żāō+ęöŻł€:& õŪäéćżłżöķõųŅžšWóš īį#8-ķķō Ļżåcā4ö'ń÷żļŚ.€čč.× é( )#L Ó0“ūš¢īÓĆ ć'öņõ·€üļ1į@ģŠśEČ× dę€$:Ö*,’<Ēöł7é3ū%“–Ć$Jį’ žń 0€ń"9ĶŠ@/ß;ńģčĪŽŃ -Źõ ³"Ķ į<"źøąņŽ:u2ļÕś,å$33 ¹3.ę#Ęö> Ļ åļ#ŗ¬Éžę$Ū×K ŲķĻĖŃ@į“Ģńńłė šūóż?$ćC ķīļŚÕ ÷3Ō5ųų2“!©Üū8XBöż(æ–āžü‘ł2÷Žrā¹ÜŠČį"čÖ55ą#įĘ ĶŪēą)ąż— %ö0óōšōą ŅßłĖĄö:ū .²ń4^,Čń› Ü ńĒ2ń’ä* ĆčÄŌģĶō/X7ö8 ź ē8uļšĖüĻČõęķåłóį?«š2 i’åÜĖßūš "łŃą<ŪŌ ŁW[Ēž O{„ !ćż ĮŁ0į^f ų%¢śęųŃŹį ėķļæ6,’ŠČJ#Ź'ņ.’żKöŻüøēóž’ćęæ#żżŠ(Įš!ō“žö*ōż²õõÕ] ģŲ!ćōäŻ g }Tęå×#y7EŁ ļČųĒäė3Ą-å¬õäüĘHōĪüāżŠ $÷H/®%āBݶčķŚóņČ’æ»īĶģģźļōŪõÖńƽRī’_üč%ļ ¹ī96Gė8®œ7ą ėą+%ēŽĪ3¶üĪ ó<ņģó*Łćš3ąąČĪćź"¼A,ō %÷ż ū÷4óūō"ßš+š Ō0Š1~HÉVŁTōļŌJK÷Ū2ŚīĢĒ>$i'Ńż³õģćż!&ūĶś U¾šå×ĒÕę T åńłßäąń!IŪ =’#ŚüņĘÜż8!āį ŁH#>öŖd%į!šßÖā4ĀJåę R€VZĒóFÜ%żóF6ł!Ż×żčż2/é8%0Ų[ĢßōĖ7ł®1ķļÖ ńļā5·*ą łF;õÄłļūžĶśĄōśū“’ Ž\łüĻ{ % !ü# æžPõēT9­Ćų’įD /Ńūģ óńł$ō żģśē/Äā$üó Ż ńĘėųēż č6ź8ᤸAŚENčé#į(DąO¬U@ļߟßė3‘ś+1 ĄįīĀė’éńŲjŪķ4öĢĪčś+2"ä›×ć "åĢę/¼Ł ģŻ!üż,łõc8Ž%ŹļĶ 5 ²½,"ėķņŪüēT -¢äūĻŚ7öų? š!Śłļ(ķāęŲīš É!ź7ųł &«żcö9 8čD-&AŁĢ8šÄīå'õS")u źśéĘÕŽ[ĖĶźo÷ Ś Ś Ō$é0čė’#õłŌō#ćBŚ¼ĒżģŃ$žŻŲü€óūLŅŖV Ų ū*ó!RŚõųYŲŽF*Ł€ółč ÷ńļūļ+Œģ¼Ż%+ÓŪ%č4? Ž’ĪĻŹLéUķūōļÖĘ# ¼™5ė ÕQßķ*!č6ü"Āņ38šHń8äÉ$:ŖąŃāņéž8č÷ģņŪ2ćüś +į0žģ?½ ' ō»1EņUčķ ųį(ŁģĖŽŃM¾,A/žęĖ/ååóßÅ'ņ茒 ņ / ū2-¾]GśśŲöņŚ! $õč=ö ńėü ¶.=śóąŽŽ ń0ė 1äMļß MčļŽś@üėā÷÷ņ(ü÷śBõ0÷ĢĖ’9#EļnōĒ?į ššéž1ģāńłó:źÆįŚśT»į$žūöøÖÕ?śńóēČĀŌēōģļ8ŹŃ8ó=å’ķŁv’ź.AŅų*æéų& ÓŻ&QåÜŁūõĶż ü#Éķ6ü ī÷>ü6Śė&éż ō  ŽÉäÄ.'ūńĘćęžčBŲńbٹšóéś+ćMĶĖę0¹åūó2Ēæä/4_­ą+G 7źŽī;%?åIĆ×õ(äŪĖ"Lå7óäĢ ÕźŠśŅłøÖņŅ÷¼ =ž;ėĖÜ/Żż-ŪĢł#*ž&Ļ ÷RN&½ć’"śŁ5žņ lNńŻ1&ÅŲī%ĪgŃBķāåMäĶ Åį-’āZę ūģ“銷óźŻ Ņü ;ü/’2öēąĻ²)šąCž’žŪö”īŪ)Éłąū¬’Ņ$ü0 ) šKÓļüąŠ=õ,׊X-ūó čīą"ś)Ż*ćõ(ŲżTä&pÓŽŲ ųA$E'˜Žę0į#Q3ęÖŃRÉ’ź32(š-ėѤ/ė&«÷*ēę[ė łėćāō0ā7'ŅS®ō’-2ū/łŲ÷A§śŻŲł+ č2õ ēōČłÜńėĀČöē÷'ā$ę½ų Ē/’F Ąń ŪĻ&įųŠ—ūšī÷ Ķ/ģóņÓäH§ł ž )“?$’ę·ó×1ėž]QģóęŃÅåų āßõöĶ ½č8CŹ)ōõÉ ÖÉ$ šų­iÄ:-*ē>ŻMć+RÜē Żź]%ų,ū13ĆöŁļÓž ’ķŽõ: ƒūź4»Ø%’å.öä)Ö×(č:Ņ)ڰĒĖē 2 ńņ‘ ģ5C Pŗ÷!ž ¹Åć %ķń)ņńŽž<ūöņģūõV`%ZźīĻüĪ& ¼ŌU2čŌģŌY"8 rš÷@ž õȶųģĘÜßćī»*ų‘"’©ę š÷ś ½QŠå„»>qēFiÅšāßźÅŁū:%2 1ó).Ų(Ųöī Ŗļ  ­ņ-Š%śö‘ "/ōÉÉéņŃŽż5 ī!¹¢āżŅ Pó ,!2Ōóö#ś×öļź’čž'ÅŚńē£ņ)å ³*¹^ÜÕųćŌäCÕ×čę3K%×°šķś¼Ńż0ś@ćūóŽ/Ėś2öR=ņ%%ų7N"ß>Ż4÷Béģ#³łļc:ķ <Īߜż ’Qōā&¹ßüŚ÷éæ÷ē ńü÷ļōųłļŽŚ"Ēõ÷Ą D ķüłA Óü š=Ŗ8åģĶ ņÅ4Ż=Įš€!ź!÷>ļįž!č(ŪēŻ!ä·9$īżóōрĪ ’&»1’0åO,üģ žņå óJēLśżŌĒčÖóČåę¾ł€ī4ÖŻÕį’Šä I ²Ļé7Ā ŖāńčūņBąż ŅŲų(!Ē Żłīž1%ń 7Éēłż»ęōÜĻäļ˜łŻ›ļ=AŚéłš6 A ½,åČč ,Ɔ«¦žJć ×¹ĀügJąåĄÆ8k]J%#õ` āē±÷ōĆ7¼6Šąb÷ĘźžāēņYPįÉ & &ŪŚļŪ€įø8#5\E5&"@Eū?lĘdōÄĮžÄĢĢjé^ŗęé« VÜ® ²Ē#ą*=ן¶©13Ģ£ļŌßäĻļłāå?ėS’¤€ēó-޽µüųüń öæ6õŽļ-ä&^Īóņįų)Xčö2źųß~ Ś>ž¶Ö¶÷ŻŅß<ѶŲ×ļ*ÕłėÜŠõ Sć&ūüĻįå:ß÷ ßöC»ī}Ėņ¼Į Å’æŌÖė/óź×łō,’+_Ž€ż"ŗ åĻ )éę8ŪÜ*øRżį'’02ż8# õż@20ļ Ż×ĪH ćįŲŚāå łĒāŻ’čō’ €÷ŠåšģÓ&ų>āśņ&+ö²Į¹öéņ³9?lų¹õ( Ūķ½ļ»Ģ %ōĶš ŗ·ßĻÖņņņß, ļ“ĶČ(ż5ÕØö9ż÷.¼įŪĘöąćźņĒiŁé*.)ĆÕŲ €(å>ōźœłū¶äģ ų;éIæ0ąŅčÅ_ļŹUȽ*,BŸĮūķ'Ūė2Ģ%ŅšŹāž›«Ķ;ÕC5 śą(Ū×·Ń ’įšßÖłÓ" ņé®[2õŚ’÷ś³ļēą/Ģž9³ĶB ®ō1Ķšųö6ķ“Ś^Å2Ź&N»­(E÷ōÉ’ēļE)7½)īō ;å1² šŹ+" BęŹUžĄ2#äū>ųć$#6ÖńA×ę–ĶėÜźąĢ÷ū-ż¾_ę0Žņõ9åūé );ņ<’ł]š(\įą"ĢGŲ ąĘšńŃ2łųŅ ×é-׀ ÜŽ"õ’ŃÆöšŽHÖĄņų0DņģĪōńžŪüģ (9"#"ķŚšE'Ć$ė/Ņ"č© ó ōó, żüÉĘ(źį¢ń!ĒÄéŽDéÅĶFäó "õī[ųńÖ3ū¹²( ģf»µõłĘ+ķIBćąō Łā$’ŻīšķŃ2³õÉŽö:8Ć&÷å÷ėł ×ćŠä^wāū 6ÓéŃ *įž×'[¾0^ī÷Rää" ¶E ų<īYš4WFõŚܶ )­§ž€÷€’ś5Żšćņ[™Ļćõßė×vĀ2’œņĒƐŚL˂܀#Aō1Óė'’.±żŁŖ€"+ļåģ€ų8Äeįė)"ł +€ -nW -v(w!Ššį5рž7Źö`u! &ĖļlÄ\ż«bč õ<;*üģ įŌøÆœæżČ*4z²ĢYŅ Óö2’²ū+õ.ö—%ćłš§üšżó#łÕÕ1īčóŠf¼*śČĶŹńöņģęšģėāāŹ$„R/ĒGÕC?ĻŽŌŻŽč9żĪFĖéēēģŠžfśWĮł,ą‘ēüÉ/ī<Ļ«äżå6ū÷Ļ€D" ćéā-"ń]żĒżü÷ĮÓUü«'N.īŠįżćŻźÕ—.ūæÄäTöÜü> TP÷߀33Ć(‚Ź.ŚĆŖ2ōžßå6żńō’ļää ÷ö õŠ "ż  õūå%- Ū÷÷ļĻ$ęäžåŻĻīīī4ļ!Łżüńāõśē  (īņżłõłź3ÕĶ÷óģ ų÷Lšūł÷N&˜ģ öēī$ģ3łīõ ÷Ū&ü÷.õč"0Łśą#ņ;Có&ńųōīüż ÷ōäĻłńõčÕć łģ€÷ėąß-›ļ÷ :EčÄĘ×^÷č 6ōF|)äõą 2,ē,3čA3 Cóš„Ų÷óBĶĒĶóB&8“ ĖžōåIįų÷źÓō&õ,æZ…Ł1+Ūś4ćų"čFŲ/ą*&]čHś*źčö)ž¾1ų ÉéŃ’ŻąOšÕ@PŅ^ūļĮŠ #˜ŠC’ĆBöŽē+B¾™äüŁ- Jū?=½ćššĀō ä.)ū#¶÷%ąÕZ@$Ń0š—Ēēc ū3Žżģ33¹Rė¶į:ĢŁŚQ% Ūņ%/ø8V¼tē)źŌē&(ōHąż#óc8ūźžµéĒÜųšÜL«Įž!ŚüõéÖ'_ Ćų@ Üģ;śįPń’ ŅDņ€Öõ Z3/Źż ¶>ĪŲÜąĪ ß4)ŲŻÉī> ī59e3ßы"üü¦łÜōLĖČAͦ ?ÉńU Ó5žćJéźöžęč%ļś¼āņŚŃ 5ś 5*“’: /ü-CŚŪĢļ!E+’ļõŽ ĀéøķĒéģļ³. /ݽŌ*Čųćķ Żčį#+ BņōūüŽę#ž·ß ķŲķ,Ž€ćŅė ēż°ŻĖ+##čłü*åē*śźøą(ųAśžī ž"źéąž¬ Åł€ūįśSšēž (ÉŽžóĀHVżC ÅćŚēņŪ9ņÅųėóRÉ’ ’ęܝäŌ:ŚåÉāĀšå ķåū#ćć S’7ņ ęśś:źņüT H=Cä © 5īä½'%ŠŠø'ō5āł»/"ōįč(Õ1ū)©éļ³üB&žüĢDńÉź³õźżęÜŃ$ ė.Ōåó¤å<Ģ&ųżóóŲĒķB+ś'ĄN6õčŹ1Jöcå WńÕMŗņa1ģĪ錊ī÷8ļIžļ&ģ Ģa ĄĘ÷åęźßä śó><õ9÷Ł%!ū/ć ų÷-²Ī“üĢń-ūåŃT $żõó˜ūÖ)öå"ŃöNŪ &łķę8ÜAōėćģ(ŲųŁåń żų22Čų÷żbÜ3(Üż žńaäŃĄ ūżłžHä÷ī¹Xķķ'÷ö!ßóõęōķš• śGś 5łīĖŁ’6<# JĆ%±ę4ĶDęńĶõŻļģŃ8:ÖżČ ćüā īGqžĖäīšĖī§§ūŠą  ÜßÓźöq÷āD$ż6Ó7=åBżéE¹ A/=1Ż­õą) Õ3łĶįš½%éļ"ä oŻ ŗż*Öī ļTó&ēGėĒIėžā=ī2īų Õģķā.Š”¶įįõ5’Öō ś%ŻņŽÜ ČŅ¶ŠŚPśh0*čÜ ļ ķē7 ×õę #ī³śÄž‘Ų$ŹžüÕį"ūōįHž-×6ķ÷ÜäćÖü%ų¼Üž6ŠFžÜŪ¢(F$ėć%ėĻÖC ŠņLé»ė1Ąųłį’Õķäż&ē(ōę"ś8!BŁÕµĪĒŁŅŖį łü(Ī"įóįųPėūŽįßų’»ąŹCī2Ęüąå’ĪŚüGŌéŻņ×ōIąĪšQ6 E6łęļ»åæÜg)ŌÜ&*;üńŌ ń’)ģfņ­)μĒļńå Æér£ęųś G öŪ$ (āĄł1żėĢ:ū÷ó īõūķ Žī’÷ $I÷’3,£HÖå *źšĖ0&+¾ņķpēžĻX€' 4ī³(Ł*æķŖĪžńĀ,8õ!ż>ūźB"žéķšŚ+ś.'>ņO’õš& Čōż$"ųōM;4Ų..ÕžŽōÅ ż źp 7ĻĶ5#ķš€öĄō˜8ŗDä ņūżļßõŌ3†ĶēņŌ ļü>Ėü.NÄ’ ūČ(œŗŁ€&Ł!śŅī Ćż7¼öĘÅźŚ1āŁ×ü,YV¶æÖ%Ņ &ōęö ņŻ>ĀšŲöȀ Ģ’źĪV&Å3Õ2»ųJøśĒAß)€š¤×ż÷*ņKŅźaĒśæļG šÄjµ¢s=·ųŽ`bęęĄ/óž×¼ĢÖČźžŌĶśææŒ ķ¢įĻÓßŖėżŽ Ńōź żE >N"µŪåģ÷ÖšKōō7Ó ūüńńį ÷’Ļ ņļ*ąšŪ"·Ś$Ļ ź) $ļÜęÜļōń’ģöą­ś(łÖżū’’ŃŲą ō ūŌąöĆć aņć:ń ž .ļĪ7Ī£Ų$µß·ōAß ńźŌģģ’ üŻAüļžļõéFłżėńķ»šÜOžå/ żģv÷üBōļ€÷ÕP>ż ’ €õ&)Hæg%(ąū¾Ż@Üį+śńšõõbź!ß8ńģņńä!ÉÓō× źł€-ĖŃźxīö ϰ åÕ<#ŽóŲ7ͦ *?åŠĪ$ēČś8@:ēś÷÷EēółÜłĻĄūĀ·ĢźŌ#+śēę29ņU ­’!āöź,·¢ö'+ŚÄöPķ.ÆĘųƒśöĢŻ ]ī ‹źõšüū)Iåį Iž0 ę@ä ŪŚśų Ģ(ń¬ž©VŅÕ9ŽČŌÖųå÷"ćó®~&õĪQŻ ĒĆĆóGpS)%öĮ'±ī"@ī Uüś328ØH! ć Ó9 Ž«Ļņ+9¾/ÖĻĻÜD@óżćĪĢ5ą1īļõ%ą1ī¼õõĪČė ų( žż€ō)éu»Ń-‰ŗ@ś+åņ ÷åņõ’Pūå40!ę½ -"æ,1āēå “ļ'žó2ļųēęą-é׿ ŪēąĆų;$%ąņ4 8ó1÷Ÿą<ļŃ#Æ%ąĶĄ÷: ķā ē/8:óC}»’8éųłģō÷ķ!Õś¶/łŪEļĻ 5ßį*čćÖą!Z$)üÓIŌī@ßų0 q ųįé÷(½ĀĖ7.ĢåŁš* Ż)#©Ö ĒłņõÉYōŚé čĻ÷ß̵&żJ ēń:Y4Š)č#å#½ōööšń(½²ōüųźŖæĒć(,÷Ī!öė #_éņŪ4óÓŪś@’ō6śČųäšĻš ėāÓc²ć=čņ@łØü®ķ2· łü9ūåüū.Ōš³åŅųŁž$¤ļŃłĀD3Č šäčEÕēßśŪL-éŁ$’Ču’0GńēFżBēåĀŃūåīń¼åņ'ėŅŽ× ōį$žüøėüī‘÷0"B<ńjŲ"¶ Ō:ęTķÉž$ź ļĶ …ŲÅ²Ķ ’4ŌŠ)Aüš öĮõō>¢ŚüĘGē‹!č<1éš" ń&§ė =é9ļżĻōöøY/ō*AŁ&4Č*Ó©GūõżĆ%Ä·Ōøü¼ōŅž¬āŖśłŅ.üD’żF([ *ńčł5ŚŪšäåöæ¹ÉĀ 3ĢśÖšėé÷£óė ŃāģÆ8łžņč]''½#ÅU@¹× $(ĪųģśKŌ ˜śæ691ŗ ėøé.Üö ŗ+ÓE;ģ {ŖÕ;F KČCĖį!"ņėŚ7Ū’ 3BäÕģ’ēZ×ܤ!ĘņéĒ&‚ś·!ß(Ų×3ś!V ś@]*aāL ߾ՀĢ'É&ĶąĪϧ:łą õéÜBŌō©¹Mł5 §Ńļ1š½w,÷ņ-9(×ē÷ķIÜÓź\ŪĄ ś4ģõ ē2Ļžcł»Ö:+ę’+#łõ$/Ś÷±+Üņ’ųßĖZü,5śe7:įN'ÓŻōźģ _:ųü¼‡ĘńF’f4üņ ł-ł¹88Ń S÷?0&Gāžķ;ߞ ŹIŅžń>XĪ&[O§ŪZ]ų$~öĢoµ½!ę¢łŌéŲå&ĶńŽõ7āŗ”ļčš ī¦+tžś(ŲėżSŪ?ģ:AļGŻõā÷rÜįÜ,żćōKū2`żšū’3óźē ąß&¾’÷ęČ ó=»ółčļ÷­ H½J łQ¹ń!Ń ™ĮŌK’į%Õų»įā ŃöŃśŚõ;ž"#öŚ)¼ē3ĖóīčĪĖų ’ü@ŠģČÉČķšķÄ>Ēļå3īĢżŲcīŅÆņFÖ¾żŲ÷(ę^O€ćńēžīŚå"¶&ó(AS@8ö źąŻśćā, īŻłņÄ' žōśŚĄńė ų ą8õ(+ņśó&ęČßåēöüÜė8Ų ĖŃ©āa. å Ś-AžŚ üņź ū(÷ā8 č!ŁąĒń!īčū?x÷ł4ūźļīźēü7õåč×#įķšąßH'ńķćĆĻĮ»Ųō꿯ēä%ķÅ: óX!Ų/ŚĢ+56łõøžĮ ÖŽŁ+TDŪłCž-ćó:@ō8č,Dö åņߊ"ņ%ī#’*OĶźļŁļž ·)łļ®-/ļŌ)UÜēöoļ)č/ĆĶę# ÓŹ b仟ōŸäŽ]×śĪżē4“ųÓéFŪŹ ČWųųŪ'ĢbīćĢå’×ÜŻéCYż÷&ūTīŃ+ģF=ćŻåģĖ$äš’āÜļ ū) µ/·?IŌč š=1ĢäĒūü’źä@.ä茱&åĒ1ĶņŽŅõäĀīŃŽt#TÅ ń$ Ü×Įšų­SŹŽĀOėćī¶īłčü-Ų<“&Ęn@ÖŹ>ēļź×÷ Ē> 5ēßēS€üųDźāéłļČ ż`0īlį >ŁåT  öŌÜ'÷ŽłņķČ7ķŃG č#ąŽŁ÷Śõ¬üH€,·żóØß€ņK!Ź!`7čź<=ĮDüńš· ų*2>ļż€ėåń, ķŲź/üB/8Įā ÷ŲŁįÉĀąÜöåU­’Ų8ŽŗóÖöé’åŪ1½ž.'¾ü.FūŻå¼’A !¼:Ü0ņŗłęÕ ęż!ĢG÷ÓĖ’ŽāūļźÜ$ēś'÷ė ī¾įĆ ōIåFHż3ļŪG61€īĢ" ļ+žā!¼É*öü Ęź’žüų $B4Žź¤ģŠōĪż! qŚÖ¢ó A# ąĶ ļŽŠ8šžć&1ž F"ōŽ ’ō #ģģ÷ŠÖ'ŃõöKėDÖé5Õ0ń÷_ ōRēH;ź-I+öā÷’*2õŻķ ó0@öń¤0ųŃ9ćł )pļŲōśĮ÷ąĘ*ę"ūĻśéßń“ģ, G%Ē#ż’_ķ($Ś 4ōÖÖŻ"ęč óS&Żä!NżŲŹģéŃ:ź”ųūŲõń(ļ÷xšü’Üåä(7X/ā®ć€÷śĆüüŽA,×83%ąžåˆ°Ģšå6é ¢#Ņ cŁā ä-Ņ+ö& įŲßĖāŅĘäłį:šųé € 40łģFŪ’; 9’äö  ĻW0ž­·&•š¼ żęž>ä5ų! ŠÜ:ē!Öū¼ āįŻ“ŪD@ēÓ³#ę/Żķ!µé×üĖ7\ÉöļÉģBõ,Ö§Ōū¼×ĻŽįŁ%ģ>ļøńå 8H Ōķ/ŪßÉį!5 B ÖJūó> Ā æŲŁč*!źö=ēB#Čēżč’żš÷$ńڱ7:äžWē AčųŚÓ?»ā»2éģŻĒĘöšŪĻķė: Eėõ +õ˶ Ö1ŚóÅŠš'Ó*šÅĮ3ļÄķĀ ĢŗŅĀĒž^ßł#"6ŲńüĘżå4Ā8åżS:ÉńžóGžļņ(žÖžśÉ$ē(é"ŚļŻĘņ-’ų$!ļ’ćńATHń6āõīš ž4č'ōŽÉõć š¹$!’üūļć<ĖöōćśŪćM$†3Ż$É÷žüū÷ś1š!1»ßšTźPńīü»Į8ą±ņź6žūćąø?äö% ="!Å6(SVŅö'(ūŲęéŻŪŁķ"Ģļū6ń(óAC ’”ō;į "å(Čō=0Ń&÷Ņē3"ź@ ł6%ÅÓö’;“÷żģž 6"ŪżŌ ČĒŌ’žć!,ų4ų0¶Åoé3DéŅŲĘ6Sü ÄH1ó¾(¾:Ņ.Å ś÷ );żKņÖ÷¢ņĒėĮżūęóĒÜäņČ ė/ ŠÜ<2õ!ŲćҼóśņģßTłņĢ÷בśėä»7ĖüšÆkź÷ ,ųū ą’ęāüBī½ĆōĪ’Öüžą#é#1ÜG öõīßå ž ŠÓē O #ŗęźń-?ńįļ üĆ*ō-ż1Ķõ$Bšę7ó"öųńŌųÅ!żä!ś\ķÖSņŃŪó 4ü“ūš"ģ.'ŅļSēģöź" J'· Ģ7Ļā$Óś6­*€’ĘŚėžĖéŚģžķč/Ē/²Dęņ÷’ŌéęÄžķG)ļ&ĮĒāį  .8Ź•ų< (ŌķäH¹äĖž­āźfÜ)ūęē! Ś,łŻćģö9Łb!&č« 4å žļüū" ! +ė Ļšń×Ń žĄ/ŃŌ ·e÷(€Ņ*Ķļ1#īźõ·9DÕ żęóüŃÓ&Ńį0ę īLŅĪ ü éķ'Å, P" ń6öČņå(®Ü½ĆÆ õēōį&ŪT÷åńŖżī ">šLßż*ķĀ Ė#ś<ķéŗł-%ēÅ?€ēōŠ üĪēżķ:ūüÅćżČ¢ELD ķöA(žķ%üNšŒł! Wš1%ł ūD# õŁĄõčł#.`Øżź óöÖ’I’ųķņõÜ·ęŽ#ÉļįŲńż" ņ¼ĒNżęų:÷ā o+Ń”§ßąnņ.ģeźNq Ė>³ī!Į¾Å0³²Æ÷='ēüü5óų ģ1öž­ģ9)Ż:õcļŲųģÉF1ü7›ļÜ ą«":ߌāŪĒå ŗ ×ėßDĢĮDšDėŹīĪčū ę8"ž2 A&,č +ļš0ėżßėł?Eą!·ūüÕ:ć(4÷Ö¾pźŲAōč©ķÓ'īßnīŅĪŗ;I$&T$Łō+’’1Žć'ī'ķŅšTĒ·Õä(ųŗšćČęīGŃēJĪŠā®xü:sŽó!^ 8óżč3Ö=Ę*ķĘ i5Hõ #īõēÕ Ėķā&`ōńćĀ4ą )ÜļŽóĆ’A)~ł5ĒME%ßģ$ #Ńōżé ī#ļ$€Éž!9Eé# ėŁäŪņ ”ü8ńó»ÖĮ/žU"čżwĒ'üą 'ÜŻ)Ż0ėžļ÷’üCAģ?ųļŅ&8$”ąō’Č6źłāźķ ųéÜųėå-,äĒ)į7ę²Ķķü!’ļ+N²ŲžæĢJ$:#ē&ڵ7ćęā»)E üAī#Ó4ßÉ<łہģŲęņ)'ō÷£ ² €ļé ó ŃõO­iåźāŲ š'ō/!č÷ź)Ü!'ź÷ų.€÷Ņ# ?1ó&ōįó <ĖŽŠģ ÷÷ė’ī"#åśŃ)*Öłž;üćķś?(ęąō óäó4»ä& ī-ÉČšś+ļõč’ū’ŅĢōUX>9ń; ē+ü ;į#ųČłÉ.ś õ»­% ęī+īVõ 'ÄåćÓóÜ ś ł7ŚžīĀØ+-ųÓņ ' ’G0’ 'FęŲ<9 ī=÷źėĻ›’\šöīąśŽŅļ™żśėļä.ćżĻń0ųŪ īų Ųé!ĢBļøõ4ļB8ųęüŹģöÓśd,ŽņR ėj%-ŗŌķEōēd<=Ó¬#)%ęŚÜńÄćÖåŪĀ<ĢŪŲ#, ʾīžõĶ ķ!×åŁ<īģę@žÆńĢå ļż'& ³#DĀI1.Ņ×µĶŌÓÖ"ZĢõŗü .āčń”©XåĘ2€ōķö×ęéøĶ’9ö×Ó _E ™!Ø5×čūļā"ū +2S…óčHīū8ņõėķ¹ū!ÅB-īåīĘ?&!J9żāҽė/šųČĪ&Ė>žJóõ1%å ĶšÖ֑÷/ųŁ×ł /!ŚóÖöėąÜźĪŻņ ķ÷éĘŌŚķ0ņčÆ79&: ūōéõļź,čš­åę#’3ééä×ņ’Ó÷*ēłģ<źRīŅ&ę½ä ņ7ķ3 Äõ,åH Ī5łżŚńÉSżūS'żš įŪ óčö*ĆŪą$źżūįB’ó"Ü"ęŻé9Óż/ŪČąåķ2įäö4%ńžĪų2šüęĪåųI)ļōīī&€)6éō®-÷7łķ ęł)ĶõKģżąłūüóĀć 2ą+Ž ÓFŁ"K'÷_ķč“ŌóĄ6ī/"ę)Ōöć9ļ,éīF’’ŗ$ šó1ķŌ×ćĮū ŻĘäŲē"ĻLæ¼ęöō*ŌģüÆśÄńĪ3 ’!'DĮšmŅ ±Wųģäéč Ųw²’ż#ńOŚ<ōäł[ęł!ķ ž õńśäÉ4ņēü,Å!Õ÷8 óōæŹŹ šÕå* ó"2žŁźļ0ņļŽĢZ’2#æóćä:ž÷ū®ł0ÖÄ«,ŻŁł×-28AńļóKśōåä@Å;¼Ųć8ß6Fūü¾Ü$IRĖŁ17Lõ63d3č8ü ĮĢöĄŻņCńęē=Ų«TÅ÷Ć Šd&€¼å¼ü¼’õ·Õԟ žöō6ü¶Ā,×¼÷õ׳ŚĒł¾rčŚ4ÕKģ’ģó ׳ ģóŽ&3$ķé#ŽĮÕ2 āCūÄ?ÜóŃ5ˆĻ jŲ ,ł!ń/•#XNēé9GęXģżŚ-Żܽ((žżĖŚčé-Ė @5łć?žŪą³ŲĪ čģ!!óLķ &żūõÜ ä9.āčōļmų ™üĄóĮžķŁ’®÷<ļśG%Üė.ŻåĖCżąģR#ī<Å’šžöĆ ö?ĄžŽĻ¬Ė šÖ1ĻS×)Ń-½ńŻĶ ŅFśB“źŌÓÄ+ óśń5Ē Ÿ7: ² & å-#ēK9JļU=óßÕ)D¾śü’! ć—ÄÓÓ( m%,µīį›ģĒ ku²XöĒ’ŲŚėįäŅū$ē ćśOŅ·7åäJąź&€"5ģŃį².õĪ ÷4Gµė%ž„žJ,9“ā’öņIŽ7ļĢśē½żIöŌõÜ5ZŌ@ĮŚ 3A+Ćreץ/ć¶ā!Ų9Z1)żRōń÷ł1Óū Ē Ķß»ąÓÉ3ŽŻšł Ü 3ĒKÕT ųŸžųŠ ńõéÓū%Ö>ŌØLōéØ-MaūłŻēģŻģįėöl®=DåēD1īř:łäŲ÷+³’C$śå÷ę×øÓ®’-ćųēÜśćŽ4ŪāL)ā-Ėź™ ¾.ŻŪ+ė« ōž½Żõ÷ ń üź;ÖūæÕ%/óķÜ÷É ÓŁ Ą’<( ÓŠ6?żŁ ˾ØaŖCf -*Üé­ā.ŽąžÜ/…’÷ķĻ'Ķé'T÷eŒöū9ÕüNõ17·MĪŪŅ!ļZó34šŲ śźäÄ-&īŚŁ& õÉ`ńŚŅź=õŽ-²§śńżČēó.a:<õóŸ›’ĻļūÄēōōā>Ö ķ%ńéė%²?š½Ņ?żÆ&ĄĄ*ĘÖģ,=$Ķā­ CęėėØę šēćńźŁéįųüłķÓąó ÷ ūģšż žūõāó &ļļęHķō žīóŹóüßļ2 ķśž ųŻł×ś’)š×ü#ķ%žõóżū÷ł 2  Õōįčłėüėżļłėąļ łųŽŃÉöüüęüżęśK÷-ńŲŌåųöż+ś ēõēłģō0ū³ā-! ņØē€…ś°ōģ5śČ XI$ŗŃœģ’   ŽČė0ģŪ9Å(źHčš¹Ł"ŌūēžŁŸß2Ż &*Ų= öĻ żōīXF66äō.Eįéń*¶śó’ņŃÄ©÷;ŃBŌõō<PēŚ Éź@ö£5+Żéń üāüC öą›ėŪś1a)ķՁ$Cļü 3õų«Ēł€&źńžļę04éłīąįJū+= āÆ+ŽłŲÖĖĢ&Ō0ī÷ń¾ /-Ó8`ķ)šŌ»ų0ołĢ0åBé˜łPóīK-nä2Öķņ2 ćĄbų",ž0Aźóé3ė$ķŹōÄł›į@* H€¾%0× Võēü¾( ż®ėńīņ'Eä.öé’@Ć·åöŽįĶł@Ū;źŁŖč ]Ś!­ł¹Ųļß t÷ŽŌ«,żõŠŗ°6āņW ņõU,ņśĄ ”įĻŻJéćģCßŲŽģåĖJēö_’ķ,Ż/EŌóŚżżį?¾ļė6)łóZśbŪĮäńāļčō&Ä%ė”BģŚé śšōńČ8åPóöņāīä&¼ėŌ)ūņ7śD še6ßõ ŻŽÖ/Žé9@“@H÷’ć Ų7ćō/łĖ! ųń¹ą(,:¶f"č×'å%ŹŲų#,üÜÖź!čūė¢ģņēÜÜNĢÅž ģć5 4 ÷hāīęćĢõdR¾«ŅļŪįö›øņŅBĮŃŽ % v¾Ż1łÅŹčgą3źģN6ÕWģöõĒ!ż”Żū÷’,Rtć¶Ö÷€Į! =*Ķä8³Ś'ųßü$ĒŚ,óö Ūåšóņüī$ŻY!ų)źģēīVčæéYć āöŠ!ÓźõÜčŗīż$Ž]æč 3#śÕń’Ŗ6ūÜżė_īÜ Qōó ź×÷ äQÕłī Ķę»ūäŽ×¾šļķÕ®ėžśDŅ# *×ōžąĻĒć Ę ;źä2õ&ŅūõŪ°×äåŪ#:.1Ėęė(ŁÉöžŠ?éņü żõ/ 4½;öģō!ĀēDń'ģ×3ųGø#öó÷, ēÜ ąå-Ōå .łŅ2ķž,½&'É.!ĖÕŅŲ ßÜJó ŅBŅ čūĀ&Ųė(ꞌö’-6¹O(č" #"ŲõŻ"Ń*jœ öņ-ÄŅŪčŁńÖŗįęā² āś>3Fu'÷"ųģĄžņå+( ¢ŁŅģÉńŪß6“ ŖčĆõ/ö() žCł śų źĻ ūŲöŚĆŽģ&œ4ż(żßįłÉDŅń¹ŽĪņĒį× Ö3 ōäž/߯; CŲč¤ōaä'ÅNšLšą’)Żķ÷‰?¼ŻÜ2ųō9ŚÖš/õ£Bs7ībģźĢ#öżśŗ@żäĻņźļķčśĆ¶~ēå6G%6ČĒŅęQé+ƒŽŁģö+Ać®Ńź’Z÷ó ×Į5“1÷ńųč¾žÄ ł-&ß«¾ū×qó0Ęöłė5¶+å «C0!™4éī@'0ßļõ7ėūśś‚ć/ó'ܛ'ÓĀk×’BŅ\ČĒę Ķģ"JUĖ·ā1źćģFų/ éWöö7Ź£&ųņ.B  ŹŪń}z]ę*ļæķŌPųō üžņ ׿æ’Ō”«ó¼Ų éąŗö "¾WżÕŻ7:³žõ»§2*’Uź;śś'ƒ,ļē üø÷óńŻģć/ż:%’\é’ N%ņ)Õ4ųø ģółÅ E Š €Ūżód#CĽōżčD’Šé!šÉāśńŃūI*āÉßE©Ķc*Śö9XךP-Øķé€ūōóūéäØōŪ#ąā.å gī2ÜÆÕ#ńšś(ņ"=ž×ɳéš ’é š"GQµüķ&/4ś-ęVßRŌ7ŽÆłėón§ūż­/ 5õłŃą/ž Bć%ēČšÕ?ō&Ż9ķėÅ(üå,żÜę Ģ1)čtHĶö3€"UĀ*źĪĪ_ź)łź÷ó5ćüŠżõ’ą"ĶęŹ ä1ā’ķ·üēüģ$ęF@ ŅłGżž šū;åéųšäžāūļėä€ŲęŅ­ ēņcų÷2)łī6 ø/ōµ *ÆśÄ#ćš¼Ü!"&ŽXģčéŠs·ó>Āéż %š7 żŻą÷ś¶ųĶšŪ«īķāųł*āėõ ńóņčįÄwģ)\Š,ž;Ė3A–e3Üž ļīL¢Ś ÖįŅż %āżééģģģŪ.ßöįüž¾ī/*3'ž#ļ’Ōż#)ą'åžėŚŽ -*ŲüõļĪź+4ö śēüĒź"ųć&Ü" "=üł’ī! ģ’č"Ōčė&äÜ āµ¦ żŹ õŌüńĄ°Ņóā)óe üżāšņēļ ūūåN’ė -ą(Ģ ćŪčżź÷’é-łš ō÷õō"   öš#õāÜķę.ž<ĻæLLž)óśņĘ ?Š"—Ļ *ūńx(ā&ó”Ėį’o÷śK>ÕčźŲ×łĶ’ŌĪ4ėźQŁ žÖ2Ėk €ėČŁĪųæ¢2€ś?ė6€/˜ų¾ū;µ³€Iźß”ąüįėŖ^Żü+=¬%źųś1[óĢŚ"Ū€«ĘŁ1b ņõæĪ ē & žĮļśÆĢÜ &;:¼īĪļó*öU¼ŹFłaż#0$įß·ŻŻpéļ¹öäł źAņē#ļčķąĶ8+"+Žå ®éÖÓŁļĻ÷ č/DKŚ÷Ł× ?÷$ā4ŪķĄķץ’üō š+Ü śšå0.ńĶēóVü ēÓżł€÷C­łįį.ųģ šŗf’ā²ĒŽL4·Ē6ü’ėŻįрŗĪŅę’ż*ĀņüBē4ŌÕT/ē’ąäž®3ė’įÕ 5é7ūŃśÉēŚ[ČŻJßæ žŃŃō€ś…Ö ąąūŅ ē–žķČKŅ”ÕĒŁ»<ęģ B⽂äģā¬Żé.ŚråŠ Ń~¾ 1Į?XķįA}śÕ®^µė»"żéŻåĪ+GĄ?åĖ%4Ų’.„®Šä#äĮżu2=ś’¶MŚBčüŅžēźJœB Ż śžķÕŲB% €óīÆ-†ŲČÄüĻŲ`ęź'ĄųŠFĻüķIŠēŌĆ侓C&’ ü"+śŪž"ļåāęśüŪŽHÓ÷ĪIS’ŅśĶJ"’!äŻūč}$$śõśė«ÖĘö#B@ĶśÅś9÷ś Å!Ž)žŅ¾ā/1ü ­$4ĖŽģåČąÖōŪńģ¬ł(ō6ļęÄōŁŲÕåéńó'ņ6Šéįś*D|"ž ūų)×)Ļ!Ęŗč&ĪéGĪū åŻP3ÉīĘķīōńėŻ×IŌĶż9Ż(Žļōā#ėJņē„׊’G4Į"e$)²ŗŲ!¶.żõńūę£ŅōżńŻ2,įš’ō%šäūęčäM ūGtüį&)CüżńüųČRїŻćü ÉžGēźÅ³$nĢ"śąŪ ŚQ"Ö Š÷DÕęG¢8åžŹäćdŸė)°,äų ×(čč aĮd+1Śå īŃćéņöčĖŽ¬×ĮkĄ×րąõäśäśL\ąįKĮų=Ŗé ,üŻ ?žØÄ·õłū&ō;śżŪß# ĖļØęæōęī½&€%9’ųf}TR£ņžćES*M1Ź üń#+Ō4ŁóP’Ķi,®ņ*¦ūŃJ©õĘ•!AŽ£ŪōYLŻFžŪ%õ)įÉāļńé%:~ņė»īń>Ć’ś ŗŪ¾ŻČÓ#åīŻŚ"ā>ōX¦-žšōīļ/ąš®ßşö’šņņĀęĒ7Nńą¾ž öżõń ģ’ų ø!’öé׿0ŽÜ]Ö $×6$)ķõł1"Ū'žēõä0¾Ćö@ęų2Ēāö÷ąīåĮ) ķÓŚG>Łõ÷÷-į oü šõŅå $ńķ ņµėłĒ×(R$½ļ($ R12;2ć*ź÷ūŃõ ü!ķķßõs>$ģKų³ęųėś÷ į’ ŪÓõśåƒ¢ėéŁ (üń ŅGöīµ%G'%:•”ģōó¼żīĶźå¬ø5łļō­Żś-Ńń5$Ī Ģ ĮĻķśŌ+Žń'Śź. —7.JÄ`āņ’ē.%ė=Õ< 8 ݽśĢß/1Ō!HńˆЬ:’ßūĻ$żÖļÉļõŃ ÆŌČK8½įQÜ6ŁŃ $ā+¾ź ō PćäŁ JŅ”VåĢč,ģāūżłE¼ęéõ1ę'&Ó)0ēēÄ«ßįńĒś“ņ‚ąęŃę'śÅä×äĢÜį6éßŖ]*',”Pāó(]żųA  ŁŻ£ēŪ° é#Ē'ģ, °¶ł ŪÓ0éGŚł£ņž/ÉGäøO4ÓF ±Dh n2X2ĬåžŻ;)!ōčł0BŪė“ģÕÜ Ō+ņƱ#<Ń·Šö”čĒßųß±õć ŻėčJ""ļ8 ńę€O ²ū ó=Ļ #ŻŪōŻÜ³Ü%ō š'Źćļē5üŚõŸĻū å Ūü 2ĘANš(ĄžļžĢś÷įĢßåöōå¶Ō,ćūģ żłCłĻ#īĪś!Gź}“Įļūæ ńłé, -ģŽ½ Ų!åĘŻč ń\ōö® 4%ęE 1żüČüžÓŁB4ļŽ 0ėūöņŽÕןē8* ŗ¦įQ,Ž<“źß’Ć+įé/ ēŌ_,’ŽÕõFčųą3'ņŪ˾¦åė öŅ"}«®ż×Ļ·’ģ÷¤%±Įź±¼’,ēöŪ`bź׊xļńtšŻē"4Ćźņū%¼ ņÜ÷÷ Ł*š?Oé,Ćüé(õąß’üŽ&LČ0¼9OŃķÖśÖR><€<’ń™ó;ķ€ć æł*‰ ē-N2Ńćłćōś’ĒhOłŅį(ņ@ļ1,ś"(»÷ /ęĀ® 5 ā"<+å#ŽĶĢŹ×.Ū0%2IX A\×äč7FĻ Éié?? ō ’MĢ 17bY:1ćLś¾ćīŚ’ŪČ· ßšżļ.;šŌI.įöÕYłĪŚ#Ć÷ž­óøļ¾’Ü+Ęęė4ĄõŅ¤ļ¬žA’0HźĶųäŹI7÷źĖfņ%ą×%żå;āC łżšåą ÷  ķXńč,ęž üĒ0÷ż’åŪ’ś°ļźżóó×-Īõęźųėśžń(÷ėśIęšä  ’ų_ėēž+ĀŠĖ öŅųõū( +żöóŻ*üĻ ķų ąīūāķ×ļņ ī Ōąüēī’O žžį žēś éįń3"ŲąŻ€źĖņóĆĶé . ŌBÖŽPŽč’ćņś#ł õ (ūūž¼īż4šųÕł; €ā$21’īŚ )EŻųļßÖ&ģ,Ū$ ņŃØ’* é š5ąõ.(ż 2ōŁŅņżū¼ éŽįß0#ō ' Åķ' ó-č’äķŁ Ó©ŻŚ7ō7š]ö0éś:-ń&Zń2öžäAŠ€åŅčé;ē*$€Ųż'ł ŚłēĪ÷÷ŽŲ1* ųĄĘ)Č)Āē2E$4ö$Ö4+ų £īś#óī) Ņ÷לųČÉ ś&ś<ģäéź’×ä/ņķūŅõź’õöīā =6Å5ū 9õŚ*Ļ<ņōūž’łßÕō ĄūŻ0Éąõ ÷šüųņŻ•üRłįųŅåė# ņÜį ĄĪŁ'Īģ)æ<żTĢæ é óõ!ó=ōņĘ#ų*"71É “öŚ-üę æEēęņ4õŗN€ Ü)“Į6ņļ ĄņÖĒķķ`ŌźĄłP!ŻźŠńū Ķ ÷%ę#ŲśW’÷ūäŽį>Ķ{9źņ’ķ üóæ3½N ē³ -IĖ#öĮ źŹ!ć§Ģåöś”ęŚ9öķņ é!öŠ÷×é$ĀłF õ©aŅö@"Ģ ·ĖM*ßGźžē'U  Ž ²üŌ,ėęōįž(:<ē5»Īä0ΐ ÕņĀLÕ žž£ Aļļ(ļČŪ4ńÉ$öÜō9FŁd±ūżńī× HąųĶŪ3ų/ńŽ ķūąīį÷ž“žŌß."# õ©óęüÜ”—ķDoš! ńæä3ńČĮÜŹ/!F®ü±Čóä%B ęīė/ČĮźō/ÆĢ9ńł¶Äܶ4 ×ā<Łš)ÜŠé%1ļ­,ą0Ų)&į€ū7Ćõē;ʞŃ:€', ?śū ųž5Ō¦Rž-9ß)#ĀĖ/ä#×nßµ›IÓ“V 7" īžKĮŁ“4åÓ €ę4% ģ\ÅÜĻ’įź;ģ$j$ ^Ō¬%+/0 ~r ŅD(°Jŗż7P%Ķ €ž!ŽĶłŃZ''RĆ~ŲĪōDsśĒļųź(J ¾@~“0Ż>.!Õ½Ōµ+ńšģ i/ ĢŚŌ¹>ž?0įÄÖ>Ļ’%ō'ņņ Ģ ć ¶7ž+ŃĘŗ óÓ)-), ćųōń/G ,öéę ēOIŃ$ž²æčš=!’ U÷ ½ńō¢łń @ņŪ9ķō(ŽŌ}PčÓ.bO™©”ō’óņę(N½ė  ?Ź-(ĢÄĪļź€-°īŠ1€ŌŌŲŗÜŁīł'łß+Ä÷ŗ(ćłīś~ä(ģń@ž ėY6§®ęķņżÜO¦/!åņś¼€€3ģāčöķ:(åāčīż)æöĒŠļł(ą%>żOįÅ2¬ćżBBŌ™ ¹ļ*ȀĄ éĆØųįö ŌÄćžżʚÜ=ź1* 8ü6Āč= į ¼Ś³ń!ćō4¹%©ÄžöĒøõēėķĢ(:-Į'=čņģå„ŅF5ś:ė<0ÜāŖĒO#Å*EŲĶČŻČžP2% žśŽńŹ+’”ż!Üł ųōĖŽ’@Öė%ü €śę&JąūTā4¾ōČŅ%ļDż¬2éóŻ$Ā8āč“'ļėģ#ń8÷ ‡ń(ķåöźęåöņ/ęüŽŚ "$żķM! #ō śżU÷+ õ0ż2ÕSńĘäżäśń $-!ū!š żć;%’žI4’4įāŅšŚėļÖ÷žūł<a&’õ ėÜēżūćÜ śö%ėēÖõżųż +Žėś5īÕ3’( įģ+õłöń*Žōōūē)Žüē³Ņö× ŪžüŁ@C ó:’(Ō #8Öń*Ķī4ū ĶBK1ÜÄą0ķć*źš ęé/A #Ü!#įõš§īv+äg ’öAźō åēÕ ä¤Čū!ü-ńä}0 Nō€ęBÖļ§ńķē éėś.ĪŁę žĖs÷÷ū4ś*åŁģ×ö€LŌāŚ~8Ą? ŽÅńGč€Ņ诎9 =.ų7ę,ž0’øI̼ØĻ ėļņųńšū(€čēźął.×÷ųõ:å%ą5ćöęüĮ+_ś Cļ ½ĪåŃ ņå"ŚŽÉüā’Č?żśø6<IŻó 'ęśČą "ĖėéņŠļū5īĢ/ģģźäŠļŖųŅ ¤4 åHõ?ūלģŽÅ!33>ēšųł*ĀļŽƒ“øģÓŻČ*Ę)"ęžW|żņöūė2š^éņźĻł ";ū+ēį1ń$ Cäõ ļģē(@ģŌå#Ćųž),ķååź ļōš0ČĻ×>ŻõÄŪćķšöēŲ" ŗ$ńõāŗē¢ĶźQ+Śö|ļ-,źų-čĢÅÜ*ó)Ü?žžņRėŗ#‰.9'ݹ?9łć1ūĀ #’õ0'^ų—łųåŅ» ‘Vé%žņIŲ/'9.2 ņšØé ģŽōŻų="ąāżŪėrń>!üõņēGÅĮą€ė Ņ’Ś"įÄBõ·Ā čóF Į 4õ ŅęĘūč*ū; śń;¼( ā+ōńżūöäŗŃŌGģB-ėš ŁöąÄņ¹ ÷Yņčžć1ŻIKŃPUń¹0õĒfę ÅInåŹé$.-1é78#ē8éŌōŹžżęŁę ŽĀō£Äõü;āų$’ī7ĘųßEüĶõÕ’04µŌĆńßķ’żņå"ÉĘįB*“äõ: ś" ¼Üā-Že"į×»)ŽŅõ£ä-żūü5ė$?æŚżčÓāķķŲUÉłų/’ćß3öćļ.)÷ż1¢æ ēīāĢŸ ŌłŁ* )ķŚ>ēįę&'Õ$Öō×üķ6ęųŽź_§ć7P4;0ĮŹ”[ÕöŚ&ōõc-Čń0 9B”-ČF"ŌübōŌĢOļ÷ęÖ1*3ćßG"ųä6Ķīüõ’“?K$ŪŽ’Ūž¼/ģį?Ä bžźŻŃńģE 7ŲĪūż ߌął!ģ·`Ōn0ņJ/Õ0ł»āųūDS:ņ#$Ņķ"ĘüÓōÕ[Åźš+*#ūč$ā&Šjį.ļ!õķēÉ p4é’1ģļSśŚóćżŲõNŠ÷h6’óņ;Ē+·ĖNē÷ā'ZūńĀF8 Õ’ ¼’Óń±4źä4Ń7’²Ź h$Ā ęķåūž­įāDžÜ%1ĆĖŽ®öQōÓ ż.Ļ'ķš7ū¶ī)±:ØļŌ÷ŁõłēéśČAĻ*ĘÉC9Iöņ#ö>ź#%’č½ŪŠ ū"ę7°ŚŪģæ’> Ēī'’éåõąā 'ņČ# 2ļīśš ļ ī'7ļó7į÷ėéöAāł %Š0Æ.ŲĆŃ÷ųn%Ų±÷öŌłīų ŚÄ"߯ęÖž #S’ž¢Õ žīČė4žōŻ% Įē ł-śĖ·ē8åÓßžŃ6źūYōē8(Ā ė ÷ŁśŸŚłP1[Bćģ,įIBĘŲ=÷äņ;żźŃĀķęćč Z€ š &ŅšĖņā*Õ 68&Ė ²ÖŚIš2ļŹś(ö"ßDBģÅ;ŁIRń0śž ÖŪ&žäÅ6åēĢ;å#AįŗĻżź’š)MåÓ Mß7Śūķź# ų„ŚBļZ®øęAü7ŚŗśļŲ!±#óGŲ<ųņ"šÖēĶĖŻ(żļ/ =ł°%éō3ĖĢōdžōńåöĀżįOā(Ńó,š(£8ÖĮæĻņā«Ź?ŅŚ ,»16ć:Žį §"éó$ČCy<čQåĒÄ{'23ŲæÓéÉŻ"0ūŁõÖ·Ežõņ–ģŚļął:ö i»ĄÜčõĆD&ł“¾ā×å&*#5%'.æ2ųÅ & ü ńŗ¾øŁõļś»ė²<Žųį2łćÓė’Ž/ņóŽ€Hōż’Śķō“’ Ģ^É"ÕEėŪ+ūĮAäŪī .Õ¾Ió8×žŅ ?ń2ü÷Ž÷ē.&óś#įĀĘéžś~śö:Fł@ éö½ä—$žÜŁüįć$ä ·2Ś;ń%ł6ķ§^ĖH&? F +ģ ėūń5>ξė7ļĶ ņpśļ'¤Ž÷øūC÷+S&¬<Ö÷ųļŁsÓī-¶ PJ,'ī>ī¼Ż Śųó;ēä$’ņłóÖ,ųõ„¬ėļįūÉö<īÜšć[?óč Ü[ŠżåćēńļJųĶšŁĮ3Ų=ŪśģćščåśüõŠÓūķšāķ%"ū“õéļųĒśŲ7Ōķ.ō×óų3#ŃFōčŁŅLßc<÷)ŁÜž60+=źż Nś½!0ųžį#Éžß*(äŹ-ßįƒģś’ņ’’ēė¶ßķļG0üŹk(ńń÷åйų°óēÆā%?).@šå4użdĶ€ōåtņģ9 8ĻĪ €Ė)ų)óÖ 3$ Ej%ž `ĢżÖļ‡īX<ō ķōéäü" +ó@ū- "Śł56 Õā$Z0źŪRFŃAFę(ĻķńŠ{=60ĖŽĢ5AĘņųłC!1÷ĮŃ!ŗōø5*Įć Āv„ń· Æī#Ģųś(+ÕCœöž?Õ×ÖLčųńOāč1=åł ĢļĖėéܾVŁųÜOG¹šĀ–žųŃä°%"ź"ÓĮāCڱ©ŃHQó$ˆķ®ź0ēSY¾ÓŻńžŅĒ2 "?Gś›ļL*āļł‡ą×Žõ?Š#ņķ€0/÷¾ö·=¬ņóļēø4ßÉŽ`Žō “’Ąę üśŃīeBż=+ÕĢõ)‰Ż=š-öā.īE ōö&~!:.óY×cŹŚŲ ļ/ūŠ(ż@Łö%ū7GöĄ #ō’łų/ōŗĻķłńÜ@¹ĻłŻO.-ü#ć ŻŁļ&ĢłŁąµļś×÷īĻōĆ"!4ż Ņš3čę üāĘ0ģö4=÷Š»Gé%;ēįĒńņčĒ6X!Ę$ūńÉīŸ ÷ųŃSśļé' ėįå$š#ü-ćć<äĢį#ōīß9šEüåÉĖĻ€7ōķµŲķń±źšSōgD¶ņäžé0B.40Ų&ĄQŹ’ąLžčžģŪK/õ’äįā Ö¦ žóÖńū?ē 1$ų€¬\I źņÓ1Ś'ņų:śĆÄÄ åĶ<³Čd2P;Ö9 mäÜ9ą-4śTėõńź ¼Į ½š<Ūłķ >.ö§- ǽN· KŅōśÓ …2ųčҟń¹*»@’’+UķL? ōĢżŃ7Ē-˜õ-šŁ¦ iēėŻ g€ėųż9ŹJz~ł=źōĘ/GāĪ'$ńė'SÉ«3é9 čŃļł<ęB_LōaĀ+@@ĘFß½Āīó÷“[čļ&łź³ó'OĀ_ĶõĒ1 !©ń -Å⒘ęŁ!Ö’čåŖąśĶŽų #ęæßŽųĢ#6ēńąĻt żōóÖęšģĒÕKī<Ō5 ß耵ŲĘ4Ņ÷1ķ5āėł>õźńņŽßžšüŅŽģą ģ#`żŚōõü.ł 6 ę śóѶ¼3 ķōé,ļŻŻā!ß“źć䌟5ž%ī ņž0äųéā>č!öåé+×čź÷Õ.żžś× ĻģĪ+-ėÖüįļ č7ćźīņ Żųų ģ. 3 ¾ł]öśčį%+ų€óŲ# ÓūW,ß˹ö± ģ0ö£H“ų×ōĄ»Ļšķ޼XŹśZīż!"ŲEģŪ4ŻŌ–ŪłßõÖą3ōŻŲG2%įéóü1ų²ó3 öū™ī9½Ė&:ģķ7Ć Ķõ!éļėö,Õäó)ą“Ą,'-ņ½ķć ø% ąMļēĶåž6'0ńõ蓟 õčü0Wüåśō³żļķ̼Ϋ½š ķĆčłžß.S»DēŌÄ(D?Žō ąńõźŹķōNLéTĀūõ’cń*ū­ķėĒ8ąY÷*D(äŃå› Źź%' š°-×ĪȽ’ųłKĄŚMÓŚĆė«6ū äČš DĶ$>ö žJę čå$ĪųCµö2ąäQ¦šėö$  Ķ­æöé”÷5!#łå6ņŠĀc#Cų Ę0÷OĀ=Ū.ÕŠ ÕŃ.ŚśÅöŻ-ō¹ōÅžś āųʦā×ģČ̱ęĻ ć2ÓõĪöšé pß"Võæ,ćł'Żćāń.Cńųļžāžrłn=EHĪ0Z.÷źä¼ó÷ōć.Ī0øõÓ2į42Ā(7ē ×ģĒõ3Ŗ^øźŸx ēžö õ± j ø*˜’ųĢŠē ķłMÜóß"©™Ń %÷Śó3ŪP;ĻŲAž$Ń § Śķ-”7ū3µŲćęėŖ#ŠĀ'LŅÄÜā ó“īŃ«*ŹģĻ & !# ģÕČ 00ĆU©Ļś5ĢQßD’ńł®1éåéė¶ęP÷ ÖŪ@ !(Ä“ąß:‹ęįdōņ" õž+Łņé:-Šõ/óųĶG'„ä÷é˜(ķĒ17 ÷Rš'd#š76ņ ę4!ōEœ ž+ĪŁÕįßŪ7’˜= ūźØ<“ņźŻńN(Cü®QĄJ #ųŹÓĢēͰ٠ō$ ß  ęļŃŪ.ļ ļļ6%Ė;驍ß1$čžčį0üžÓęóéžŃóķCē/ čūÓö ę4õēųŻéź.åķźä éāßןö2ć;¤ß !’ ’īūźū.,Qž× õĘõŁŅśÜż¤ńž÷īōĮÜżé €ż/)äŌ6õį ą2łÉĻ3ÜčŻĻšāī&ļ’ūŚÓ(×āÓćżų÷óŅĆÖė04G6ę9Š6ĶöQ”4äĻšpåóå0˜±½Ó$É’7ė:"$ ŚÄģ†ōņ§į’å Ņ&ń ąūža*ŲŚ "(ĶčÓ $õ ż-ŻlDå’µMgźAóųÜF ÕPŁ› ŽĘåŖOóūdæō,üRIŠbńņŽ +9č0Ž 2ųś’ōĖ91 ÓķŃx2źÓøźē9>+'ųßńŠ'ßń’Ą’ €įŚ’#U@ ÷ųÄ 2č*( Ņ 0é*ą ą  DŠ'ż9ģ ķ+é&ņŪ5!į2žķ äē÷āāĄńī9*$ ōß ×Łø%å Õ&ÓŁ1ā)<'Įßę¼ł<Ó ėm0¤łś¶ÜIįźöĀ2$ś22å/ Łźņó’Ś’ ųęß#äųōźVŁ ūüéłČ":!’įīWĘ9ņż>õš÷ūēŪüōį )ź(Ž6= €(Ść49ēēYÓ łķśMķĘžBĪ­E.=¼ŗc0ŁĻ*ūī#ŪłųŁSLź7õ Ęž5ż3ė0ēūĘļĻ;Śå’ō¾Ģ(ĢÖ ć<Ū[$ś6Oŗ×ĘŻų¬),ļö²ż·ČŅąęĮõńĪ1×(-ø!ÕāĶģŁ½\ōÉļć&™2Ģ IīCż %ģžō¶O-28åŃļłß0BšMåźčé*ĶJśūßėąéBūī&@&#ŗCŪ÷+.ĘĘ’ÆAņī%CČPčłņĶ+_Ś=³łäĀIÆę×čŲń¹–ܲ ķļȾ¼,åaōĖųõĻ’äšĀ ż~é¬ņģÄcä ńč« öņ"š ŅūźéCKīź’+ĒYŚ05£ż×!«ųöå*öī ęĢ>ÖÖ’LŌ 2  ä€#č)ć2ē:!-čéĢŌż( B åķ’>ŽčóŪžŻōōčņį=.ī üńųū ė)įļĀŻ’*ō÷ćü’÷ żśõķüüūŲšßōéłįü 6ė ×,/ ö Ņųļ÷Õ÷åś ĮęüøÕää č/ėŻšųŅēéõėū'ņźŻbšų Źū蜯p Ū3ō įųčų ļī4ż)ż÷-€śśÜĮ ütū’ČŁęį# ų>ū„ųżŚ3ž×ŌóļL"ØĆ,’'Īõ21¢(`īq „Ąéē<)Ė "&äY Čč÷Øü-āńF "āBč ó(Åš)Ńšū_ööķŁ×9øĢ*객ø,śč0żCś5śńń!Ņō,2ĻŪō 'ż>ńLó;óćļ½Śżķ(‘ĒŚĻŖß!0ŠīēóŽ.'_:’$ļāŲżŲŚĮ&*Öų;# äėä¹ķ(1^5ĀośįAõ “ iEA¼åĖ- žĻē%Ėą­żņ7PōĄ] -éߎŲ$ų%÷ Ŗ"ėĶąK0šī@ø"ł€ųš ÜäžÉÅęųĖŲéū $ )ņūźŃń#ßžįGé:¾N  Ū$)Žčćµ$ĻõįŻGęe5č~ąČņóšģ’äŪ 16ŠėŚųśī>2D¶ž#öÖńž)č* )%½ Ē Į# ū-ō ;ō ž&Ćśļį.@ ü Żęšü-ŌŽ?“Éźāš'ŃK ŖōéāšąöĢõ5!+õėHųż9žRõ˜ĘīłĢ$$’,QĪķł(źĒަ’ō.¼žó Żņžā#ģ ü’ĻÉļŚé ćł%.ąū×óQåĶ Ż!ÅčŲķōĶā bļµłóI (’łł$ļ'’žŲ ą võī ąĻ —3ß߯-ŁWīćČĀš ÕŲŁ#é/HųąCśĆżŅŲ7õü ßæ²Ķįęčų6Ļ0ńļ(ņ.±8 +~3 'ĻL9Æ §-! 3ļėŲśĖÕūFä+č łZ!į 'ķ# Ö$į/ØłµŃį2čÓŁ/ą·šż*ć 1fĪłźjĶ×/ō± ō ģ!ŪPēūÅųŲ  ŻT’$äŗ"éķ¼÷(ŚßČźü59Z-šśõ>D,V—ķ': >’#ėōüŻČī8Ó¼ßņźQ÷%łżāķģśļøęåü»ÜĪčßÖņßūšĶ-’-%ęEI NŽ2’?‰Ę ųȔ 7āć$ą?čŽųóóĆõćż.Ņ’+ų#ć:"Ž$źń4ųļķōēöļC&ÄęńLż“Ė-”䇿(¬ ģ€ õ· ćŪ.ļYŃx·[ā,/ż9 š6)F· ŲT×å ń’ā]b$ęĪŌõŁ÷į-ŚŪŁųÆ:éĮó³Ń<(į-”ēüL0ģ)- 'ģŃkx·ėüd L :pcī!*6’üJŖī:ݰH łóĖāż§"ųĻŁį„·RŻćļ’#ķūé.ž ł ųĢā5’9½öߣū& ½ĪćčŠ#÷ż×#,ž’(“ķ6ńŃŃ'¬ÄźÕóģ%õł2ķÓģCݹ¢ģĶ0)ļĻ&wO'¬óśęųćäź:ōē!@÷ģ'  ā2öżę śš-Ł ¼’żĘI»²ŖÓżėÜĄąńžēā¤ė#¤ł õĄń)#Śś āŪÖä×mń µ$ä$õĻź2’.N(ĘS%õłSōķöŗ“Ņ nņź>óß"+ż)9 ĀŅ·ņż#ś÷»ąēį° įü)ŁžŪ źĄEÄłł÷¼ł"ūą–mŃō+ź±#~īBĆ-¼3 Ķżā Ē Ź"+8 9žöżĀ-Ć÷ż$ÖųśD5*ņF¼õQ ņF@>öć+ä5ņęåļ!ĶÅŠS éÕč%ŪŲī ō3ó%Źūåī-ķM<’ÜśDj½OJ"±ćģ śĢ ł śšėĒćāųEĄ&3ū/ Ķ 0Æ/ üĪ öįņ ķ± ć9ķāéĀ"į*ńšļ *1ģŚĀ  ėŚųŌčųē pĒ  Šīłäõą»ėŌ’ēśūź½ł?å ćß5H÷śņüÖéSŅŅKßžėņŃ&Üļs’ūźē#× ęåóDóė*×Dõé .Õ ±Ņū ś*šö 9Ē0Õץļ²åņ įģ÷éd' å#Ų>ßšĢ$ŠcŗąŅ~į.ūĆŹŠ¼ Łó ÷÷÷,’ÄńÜūō%žÖ÷ kņņšæ÷ą? Ū*ėć5 ¾ÓģćźC9ņłŁžŒ4łĢ4čųåģĶó{ż=ō­ū3Ļčä£čė")ņŽ29>Kņ óü)Ŗē³Ö482¼Śą æļ(õ$-Žöō×~/č€hõÆŚƒ Ā÷õī@}ŅÖČ) ęGų×QOčņ 9 ėԟ õĀ&«Čéš"½=Ķ÷Ā·į5’& -ō·Ö ŽĢ Ąńś .«÷õ÷Ļ&ņ üó ūą&ę÷Aņ µ 6ė$żĆó0Žąģž3Jää Į0ģŃųūĖźŻļž/ #Ü(½ą!Śšdžśńč$!č ē÷*õół ėŹ,5%2īżŻūķĮ’ŅžßŲčāķڳ žžūŌų(HņģĒ ļųö"/óęēĻįžńļˆ żćļ!ä!īåōä°I& žüį÷ļåšųķå(± ~ōŻÜ0±%X0ŚžīHü óQŪĘ ŁÉõļ{Ā™öńŻā±Hp¢õ ĝķ' ŅŌ¼ß4Gšü0&ģĮ2ż©ą"Āöōä£Mā(ĄÖ.ÜõŃķL$ŪųüĖE>ņł¤1īäoŲų÷į¬ŽVõŌ½0Ž ö“ ó#ŒöäūsG½É ` ēģČśB¶0é/ǧ2ī™xüEįśų .&!ŪčĪŽī ō0Cļė± ü¶į³Ä4ż÷¶ü5ūÉķ3  ųį!!0 ŻģĆß(Ńą2ēŌŻ XTŲÄ)Kō5ĖŖ9 Ķ ŚāńĢÖŌÉå#š2ß æĪ¬ß#ÜŲēäńõ¶"%:ęė?ķ ęł³ļóņ"źščžķ0& Q%½*ŗó† äß*> ł*ŹŲõ ®ßžėšÕž $%LāĀõ1+Uį%]Ńå&¼'£Ā#ä9æō×ų$žģć‚a-ł‡ ŲGŁå8ä ø$åé_ą69!øÉ Š&µĀ*ķ1Ķēļ.ł5hī!ņ ł$Ķōą’ĆĢČeŃÕ’ėĢ&Ę¾Üžé @Ēˆģ;ėˆ.EŪŁčéuęŅX$ęüžĄ ’9ÓAäŃŪWęwęKą0Ēżܑļ©Ū$ż÷ Ū)_¼Ł'ĄßR.×kø=(˜ŌSĪK²RI¼ū÷;šŻNŗŲ‰ČżėĢćņŖū åžźAF ąŪNīZŗāå5/ė&ņž3ūŅś>3 5Įńł?ż÷ŌŠņó /:ė0įõ ė į) ēżüAāõžļ:ņÕ é)ŁęRæ3āNšé"$īĢģėŪČłļÕ1 åĻźōń ėłč 'ēŲ!ąÜ<üäōų’łš+ś#!ąį åöņ‡ó(ä Źķą ć×#ź\ą£żå.' äć&ÜšŽżō¾%ó ü0õŅ÷ļ\łŅųŃŠõųj6~;äĻŌŃą÷Ą šżöĻ_üÕõÅą*.0Ü4Śi#˜U,eÕĒē[Üżś©’õ ė ķ ż/Fč'÷ēĖČūōńŁś !ī'ž+ó#Śō+čČ2Ōį½d.üģ é$åYĻń4ņķōõŲמ!ˆ ę"ÖCA"ėßrŁöķÉč厰%ņQ Ü8§÷/÷óĀ ļąÜ ń@' Ö×õ¾Ę9Ł 3éÜžŲŻ’ Ų4*ŚN÷ķč׿ūķ(Ü'Ļų5 &Įźź-7õ %üĪĻźū’ ņųöĪįī+ĀÅÜŃü"œēė· ųÖņÜÕ*øgćņķ&ū 7¬Śó ā (ścĪęńĒ źÖȹUŽŃŪ Ē¬€ÖSēś ūó9ßžÓĻQ Ä3šōżPŚśĄŪKŌńņH+Ų9ĶÄÖį%ųļŗ'#.!#ĶÖę/¹’žĄõā+^ÉĄ9dą+'pMÉéG"Žććõc, . ęśk ) ;Ąšõš CüłČśP±'EXŽēB 1ļÓ ŅB.­ņĒ Ū7Fļč($ S %!f²Įņqšąõܽ*ķ( 4&’ėÉžį0¦źņßłģ*å¬źāšöčš5ž÷-üŌžNć šń×Č"-Ż=ŌĮįõ÷ģ< 7fä>ņÜśŁŅŃń#ėćĪķüāŻęŽ:A÷ 8€äī,ūŅ+¼ šŃćńöļ÷ĢYņłÉ³d 1 żÖī|ł}€õųW0#6%“.÷ų6Ćü$ü’Ųėģ7Š(T"łEĄ%>ą $ WāOćńlńĆ×Ļ(Ćõģ " ܟȜ×Ü_ÅļØį÷ć&’L ·ŅEčPĪŗŁČąo“×Óެź)<µōrąkÅ’+ÖŃ„L(RÉ!åć”FĻå`€9ūŻÜ0»’>;É׌ZČĆA9ŅļŽōü<×ņõ ę(ŻčÖ’ XÄŹłŲ ą>ń¾#’øTāĮ'1ÜęöćżÄ,×Ė&§'wĮ/I”0¾Õ2"ēWPA»ś:ćøź8ˆó ’ õ'ėļśžMń ūųÜ Łéķč÷ŲņĆóöūöōÓ  BāąśõŽŁ9T5ś!ē½µą Ō+ō3ėżĖ+ׯįŻßÕžš$āÕ1 -Ī7󿞎×ßś)’AŪŹūų/#ÓKŪšńų ńŁ’Śéė÷%īAļ)ŌŻ šūąŚ !Ėķņ’ž$ #ėīś(ųßé\łšJėó€äŽ*ā*#8Ӏļž~äūėąĀÕ_ņėøgÅoéäÅÓ1÷ ÷Ļņ ąń_ž¼ŲČę/‘[÷ŲNąŚ72¶#O=żC¼8ą+Č2#%n÷ė’Ż=õūōū,Ż ŁĪOüŻæ+Ņ -ÕT"ŽČßž)ī6ü1H@ÄäšĒŌå8¶ō&ääõ÷ØŻųśL ģ12=Éė)ĆŅ03Šļį ą ä]źŽėŚ¢53 ŹĻą¢@łõZŪįķ ėKßß4-ŚŻÄ–ēŚ)Ÿü/śCāÖoųó„ļīļK0åżŪźōüÓ"1Īŗėķō!(ĻĶ ĆźŠ)Ÿéšā¾=üžIĘ'=ōī “MĖC×Qö"$ 7TężRF1ΰĘÓżU²ėĄ ŁŠéŪ!°ųī'÷@ )€ż¶ ė'Ķ“m6×21żŽĆ,Éa5öé×7Ó÷ŽB¾Ń#ęČÖēŃ$ŲŻķ+ļųēéŃNąåī÷żėžš(ė śŪåĪĮž$B’#ł÷ń. ·P’šŻ/ā÷/öńäėó ļü¶\Ó# PĶöē ?Ē ūśž*óßż ü=#óńä śł)-!9Āī,ļ+Ļ2÷ ß“ų%<ßŲ 4ņä6)Ģ ó'Ķõ":ēõÜ6ļĒéŪĀeń’³Éś!Ỽ2ß0żP×7ó! Ņ ŽßÓüā ?÷Ķļ#ņŻóÕ ÅÜķÅäŃüžó0ėóĘä’é$ž÷õ’ 7Ł·œūŁŁģęÕß< ,Éė ÷É34ĪųT%Øśźį×ųõ"Ļžī&ńŌÅŪę@& &ųĘÖņÕ©1ģĮYéöēś4'öęņPÕ»ņśÜ.ĢĶÓüįõčūK5 ė+TōčƶóŻ%Źėa"ö8·śEō ²ę  .ę+$ ēĘžDÜńQØģ³G÷öö—øēžĻéšó<ĖĪČāļĪæLż*õ'#! EÖÜ2¹ž°²ś-kåä:€2ę’Oübō Ž×ŅŃĀYõKäŪo'#ܐC+€¾VČM9ž#å_ łä!]Æē½µ 4Žö,ÜŽ źøļ,9+÷H \Čś¹-`&éˤĶėļÉ42ēI"ųՒäōW!ų5ļĆdĶęK+ŠōöŁė Īįżö H3AüQūųļß'łļćķśå,Żė?ĒBā+ąöEų(Ę :$©Ͱ&ķļ ī < į*ūŲūīŽž¾0ūFüæ÷ųłīHē+¬’1 .€Óģįōöź÷ĆŁQłāźhżīŌ:Ć1$żζ˜Ų 3½ ÕūŚŠļ*ē"/D%ēńÜ(±*š2éŹńś2SÕŅĄĪĒ%ćü īaėŽ') „Y\ī!ē>0õź¹3õŪ:·<8D5ć涀ļōųC÷:(°łŠ‘ł>0?{ź. ć ńĪū8āū<¬JÜ:čĀĆū½ī” ć°÷1ķ¾÷ įś-ŗŽäé$’÷ĖöÄäĆĖų,$ķ>¢$Ö?é°0äņ Źdš  I ›ŪčöBįļõåū~Įėk?īC-ģ7ą)ó"õķÕŪ×čĮ( šģ µķ żųųū 2Å÷åóŁś÷äæłŌ ü"ųęńēūCÕ ēßņęöG Öļ"åėģķņóńīś!ńĖżķś ĖÖńżÖŲ’<Žåēõ%ė%Ż ļųłįBH×’óóóåüčŪŽŪ’+Ņ ē’üEū š ^ķ ōüįĀ åTēę$.Ī÷7łųåŻ Ś7,ø 76$ą–:ߣ Rāl5¼£į?ü5Ļ1ā0ŲR±µAćļ* <ņ’ģ'õ,,NķćžŌķœ;ǾÄÖ=öPBgźÉ€ źģõG6e Õ) É-®īųéJń!̜µe’‹óģŁøńĪöųŲ(3ŪG’ŽŁ M/×YĪų÷żü½ä9 ŲNŲąīµ 0Ģ, źĮįä9éęćf ł×HšGśq/ŗ×ć*ńó0­Ü$鞎!Čķöōü ĪłŁ%ĻļķŗĖ õ éGīōäģ& 5äę˜ć łš¾ŠĆąÖ/ęåųż$,Ę &%’"Ā5įĢ ÕžÕģOļŹżb“į .H2ė;; ¼üŚķ.ßĘüÄ»DÉęžĖś3ł0ęōåĻŅĻ ę+ ‘$(ÉÜįžŻŁöźAā’)ÕöāÓēųóÅ£ī³ųŲ+H˜žļõ šąē'ĒįĢš!ļž(ŽĪäń'ńĖ7Öł.ŻÓłÜõ½ņ ś!»ōEķŹ€ĄŲå7ż- ģęOpźä'ZżüŚLŪ Š&ł(>͵ĮūÕ¾äņĆ.2Ź8.ÆčĮZéč#ųPóāĖ@üžŌõłø! Ļ=Jö.ū¦ÜņźźÜģž9Ö^ķ-éBõ0)ł(šė‰¶ū3?ł*HK ų/%Ż)3ęµ¹ %Ž¾ÆŹā’ąųÕõō÷Fņ-Õ ¶Ü ņķž ŹA-žöTłÅ ką<ā÷ķņ% čōĆ2’ 0öééĒŌ’įšųć,łĆÕāéÉā, ļūäž ūj.ā'Óß4š>öņÖ_ī`žż!9įOŖģ#4öūźųŌ "ÅŪĒś’ģ źČÓ­ņüćģą õąéąų1‚3ļ0$õåłśNż¼Ććę÷żł’6ųŲ Ļ Qī*żśł3 óčūŻņöT "×ūÓĀłõž$ü÷åčÖ%ņŌģū ųń.ūų&éĻ ī6ü żū÷Ų ö.éåūéPĻ '% ļų0)&ģ)׳čõæÜ3)Ō ąŃ*1öśĘųŽÓ ž?Ł āōļ%õØ1ł)óÜŅł ¾ %ā +Üßź%Ū#čŹ$,ē€žR%lŁĆŽåßYķļ2:ūĶ)Oż!ņć<e¼¶ńŗņŽŽüöÉŽCåŠ ź¼&#>Ā Śä4’É*%ńå'ųÓAģå’¼ü©Y6ĀöŚa­ķHĢŁį>āöG³ėó$ēĢõķÕ ĘÖöŌŠ+JĻ®-ņöė­žSū.ćÓ?ŚŻ> é5ó&é¾ ^ń볤Q×ŅU$ē 1łģ¹ćą  Ļ9éFś.Ļ ×ē!ņ+2Öų ę1āČü¹ü%ŻģÕ0ģõł'Ńł^Ųöžł>.ßøą ģ%ģńł2ł õŪņ²K å“÷„. ÜĖž/:÷žwųöå ģĘ N śį'ÅŻ ī ėųīB'óģ&6EKÜņņõ„?ūß7Żóõücü+ßč1ūāĒ*š!õ43”ūBÓ8ĖŃ5ū ć4 čńFĀ+ÕČX/ššśč'õĢżü! ģęóīõ’ń6ļ‚ųņļeęßūłŪ÷QŲ ė‡0ö·’ØŁśćć*żšō īėööź$īĀ (ōżēØ-ųļųū I’łńüŽ ūķų"łčüųü ücę õ ń󀜗æņ ó ż’€ ö åū€ó ś ął!üüā*½5ņ  ķ’ŠćŌā÷ö īü ņ ō ęü ųķńł ģēā÷åõžē’ ćńķé žń’%ųšóüļķņżGśÉśćš (ņ( ó ÷šš źöö’ģōż÷įĆž żžūüóŚŻžõ÷ ė÷ļńńöķłŅó   ž ŅĖÕĒŌóĮŅą×öͦļćŲŌŚĪŁėŪÖŹŃāÖŚĆĶĒĮęŖéŅĒįŽŪŌĘŅ̾ėĢŻĘÖÕāŅŪÖĻÓÉāŁŗ”’¹Ź³åć²ČŻĻŚÖ÷ÜąÅĀÉĪÖÕæäŪÖéŠČŌŲī¼ŪÖĆĘŚõÉØĢĘ®ē÷×ܬēśöĻūŠäĪÄÓįąĶڲ×ÕįßēčīĒš÷čŚÓĒÅŚßņįęŗķéŅŃøčÜĪŁÓÄŠĶČšĄÜĮŲēąÕÖēŅĘä·×įČŪĪĻĄįÕÉŪÉŌåśČŠŗŻīĪņńźøķÜ(ČŌ•ś6KŁõģō»6„Y’óĖū īīŹó@ E" '!żöČļ#U÷GJN8é’īł䤛  1ȵ6 Ā"2 1>Ł·"āŃļ¢5K£č ćōö¤Gš$)Ż ĪŪć<³ä.Ųų *dGŃÖņ D0‚¹÷ōžĘi(łł+ū+ Ź óļūæąŁščŻäõžŅņšīļ!É&Ēå#äeEŪ īė(ģ %ā,/÷`”PėžjPŽ, Ō?źNżčõ ąL/Ö*jģō“ŽO?ņŽä­³%ņÄé6E^_#ųÅ ć5Ų8Ųźō[Żhļ-BŅ:4 k"ų“éę2N®üõĆÖŚ.f 5,+$ĖUłļ1]L)Į5æ ÖB<ż ¬¹$D ÷Ć„wńņLĆśoģĒÓä@Ų)¦Ó=Né Ą9ńŒą]½öęęÆĮČ’ÉÓ_łļ’łõīM˜ķGžāŚÉį÷ŅŪDę!T&ŅŲ;K¼"ĢNÖńŖž )ūžüźIŻü>G%+ų dõäŌ Žś,Ź%Üą$äŹŪēīr;Ų ģŚÖŠ!å@'.AĢßńč Ėł,+ŪU× Œ×Ŗ£ó &,13,Ę2É÷įė(&ń"żŌ,*õ6ŪęšÉšč!_’W t īźÓ-ż^9é2čļę#ć½ąėüē0 -Ī%ųē^åę)~(Ē3?`ÖŚ*÷įš<Źßõńč«E ńČų³żī"õ9.£PĀ1ż  ~H$åōb:Č?:ßʁĮĮ ł#@óéaÖl.S}Fä+VŁ«ČCæ#īy# ES:öąb»õV ņłó'ąQ€üŹJP 2M¶ų/#‡®2ałĢ ;ØšŠ„=KfĄ’ ōó>PÜōššžiėŠńŁęš÷,RŠ ŁįåŌ'Ń(õ3Žc³ó"łŗļóśŽóĶ>#āHńÕõ“Öķ$ļ0U8 £ ݧŃĻBß+H+ńąŻLóõņå÷ķ2ł.Ę÷I¦ö ä Ųš“ź-šæééąÖ8üīÖŽ’ż!Ę€ŠšģŽÓOīžś] ģŸū(Ņīž.,V%!õÕūAÓż #žī' Ż*ČÜ&0ŁO))» s°’GÕłłē3 Źóöī JŌĶ >ńŪśč5ū »ŽĖ’ŗü)łó7źąL Æöį÷ńŅTĖKā)±&ĆϽFęĀ3õ»—ß6Ū1ćJD#ēN šÜ”āĀčč *ŽÓ.ėHēÉ R śHεę 1Ęß Wēżü1 šP#ĪŽņŚųį*÷CŪ.;äĶ šßł#ŗśģšńūļü &Ž$$õŁ3…×®62ó&ņPńęņę)Jæ ŲŃé4#ęNś"Ķy’5~łļ8€łØIÜėöźÄ5Hī'õéŅųū’2ä@Ō#.Äņć'ļīØō\šĶ·^Ąoū L?ś)ŌC&ōr#ÖO7¾Ņ$"ź3‘@¦ū)„+®«ģžQ/¾ Kųµ¼€€Ćū2óCµ@Q)h.-žLJĒŌŽ-ŖōīmŁ0[ižĆšōaų” ŚĀĀFR&>¾ö޶¹Œ¢ż‚*åĢ+į¼l€€2šĀhČę-½§Gō± ŌēĖŹ3/ś²üę%³‚+ģģ+ ¾ ź:äžó¢¢ÄĘóōśQ, ŲŚó ēŗPśļ å£ō Ó!$ !įŽčß śæ Č ÷ą źļčŚ ŚēėÓņ šłģ#OŌ¶ščģß@IDģAąQ)ĘA ķłµ÷Ńōž Ÿū8š Ž-Ķ.ņćå×®ŻŚļóV&ķé:ūŅĶž#!Ņü©ŽŌ@ńÓžķ ņŲś$ó­#*īŽ#“ś ļ "ų°½&õ“ו õģŻķ#īöŠÄ>Ēļóŗž:č÷ŪܾÖ(2ŌŻč'ģ&ąZĒś?šŪņ÷üó0,2*ń"ĻŪõŁęŃŲ ĀßĮłóżē$ķ(Żøų²łā 2äą śĘ1š¼IÖ)ó=Č»Å=& ÕĪčźÆŁŲól."züšņ;Õšó½żÜåöˆņNē/iķ* Ö)ó’I[šÜÕĮŲō÷#&ķķNčźÉŃ>į-ė*6į żÖĀtŻßćś.śē'4öN Īśō.,¹ ,ū×%åÄęö÷”žw7 +ćź&Ėš ū'ü Ōß į,óąźķ ü@Æéäīź¼ļ ÷č#ÓėģńĪņ/Ū’ ņėó $öżš  ŁŻ0Ņ,NāźNźųą’ß*ó÷ēūĢ<6%60čō Zć ×3.ķģčĄGņ1ž ĆŌ.śļų®Üóš³ ļ§!ĶĒ+ÉÜŃļŲ; E&ü“AżĻśź°×CĶ×ī< :±,į&ė*äSųčł ß4śėŗÉ B*ō!ŁŪŻļ ś%Bųž !ģżœ5åé?üo½³Kčóśīß#ńĒüņ×L ļóšü(Ž łö!LĢ’čńßõ éį­¼ś×óž*0éļĻń÷¶Ż£čŪ÷$Ä )ć2āSį÷Ķv÷(”ÜŻ.ł"5ŅžÖ-ÕD_’į¾čäżāŪū2żįŹ ž6ņ’+ęäź+Cå VųŚóŽ ļŻ`ö»2ūŽ&]äļ3ŌTT’8÷ŗĪšęÖ.żų ļśūż7ŗĖ#2 ’ ÖĖō÷Ęć'ģAøü8Ų Dō/ńõ÷-9S21#ü,łķ]ÖŌ! Ģü ī:8&MZé&śę( <żų©ŁéóźĮõł0ļåŻåŻäķ ’ō5 šŹ!õżßņ é’ėōÖųŌ@ä½śßČ­š7"µ ē üÖBž¹ą!öŽå÷œ”ī $A9åÅ#->MśH äćžśLŪø .īÅ7ÆŁē !Łēļ #7įŲéēąĶ’ۜ*ķ~~ų7ÓŲśöĘŁĄōŁŪõ²’üŻ ī@Ņ Ņó÷! uJćŚKŚ,-# ×ēŌ !×ńßīģüļY ÉööŁų’Ž-č] ĢĄ ’=<å#:;6æź Yćä/ŁįÜĶćŪ·Ęģ’ąĢ®ā·6Ļ'WMĪś5f’'ō1ÕüśÉ)‹ņöčøśß ž§hżģ&AųÓ½ U ųŻźóžĆ/ž+$2Å ų(Ó āżČZņ<Šā½ČžķĘ’ßņäō.÷ųĘŌš—Āļč“Uéē’ DēAńß.+9ĘĘS DąĪ÷Aęć:£ 50ķźų Śūų š×3\€Ó·ŚĻįēłĶc×¾6Č +õŽā.ėš , > įį³ ( Ł Ęęčę/ó×Ü ķ?Żžūūż °)瀓&×ńÕč3āÅšīµÖ )Łļ"+śöŹÕmŚć+’ ėšį8ŗ5ą  ö2 3ķāšĻ,­ĶĄŖįā×ūĖĶųēŃŪ śµĘĪ·’Ł!ō+ńąóūĶß- ÷Ūµč æ81üīCē×ēž ĆŅ š.éźB42,§÷Ūł (ųų£ę’šū¼$šž,ī‹ģŌź@ņŸ1äĒõÅįĮóŚņŽõ/łä€žżžÉ-öł ĒŻįÖÉģ.ó ĢQį6óüõ +Ė × =ż'uŲĻ2ä ĪŠH$ÖĪ:ź ē3ō)Ść¤1éŻŪ$ģ¹żöVšĪ)ņźŽśõ0H»õ  ÷0 ęÓėōŅąė÷’$ėųĆHśūū 1ß )Ÿ€šō Łś/>8ź' ō Öō¼P#ž&ųŌž ļ0Ō=éĪ%éģõĄŹš8ų4ß@ė)”ķźöĻümQ2ץĪ}įH Õ ȃ|ܹŠE’ū öŗ&$ÄĮŁŽJ @Żj…QźŠ-ōŃé5 ś‚ G_پŅ( ±(ŠHØłęć żYąŲóćżŻĖ©ė EI,Ō¹@āÅń1÷ŌįĖéūVęßüČ! öż‹öŚōņ ę 3(×č"ų€Ķ%’Éę“ÓśĢōšŻém÷ŪżęµÓųDżŻKÕä/Ł7ŹéŽŠōaC<’ō5- õėÖ;'Ųķę )Ś®żļ3(Ž !-Ł÷īy· Ūš. ų„HŌ$ÄāņŠłŅūÆóŠ*’ōų3MóļŌ$>Õ9ņ÷ ęąö &+Ż)*ĢŌĖū.! £0åõIü źŻ¹ĮĖKę²Ū€ DÜö"żņåĪäÓį9CéHį#ĀļĻŻÜ+Ķé Čö Lß ÄėnśŅēńęõńžī™2>’0ź*˜ Õė-ā.äōo×37ščšļłęÓī>7&āĻ.uņ!®ļ< ūāö·%&2 ą’ś* ūŌåĖĢļ ģńŪņ ™,ü”ōžÖ’&ČÄĒ%ų-īŻäü öĀYšų0ūūźÖ6’ß-žł4ąŌ¶üÓ'ŌÜīæęädKĻ)ĶßčRä@Ńšž Ļ õ.Nä : įžń*åņäJżöL éõ ¬>ļéłļå×ųūæ5õéęėˆĢ gõā&Ģś3 ×.Ü ņT»ćą¹€#ŻüꁟūŚōßĒAŁ ¬Źųģäčō'½4č’-åZF,sļ!ę!" ģÆAüĢņŁEŠńC$ āż*@Žāū’ć›Kö ļ<ļÅÓŲįŠŌ åó5śņēä ü×÷ėüę(łĶjõīśĶć.8&S.(żłÄįāÓ¾ ŌśćóGŁ%Ž <ę łćĆä3ÕīC0įß’š Ķśš/Ö!āźįą()ķĶŁÖčÖüøÜÕ)HļķĘ+æņÜŌžņ'ģöś3÷$ó÷ ;ė%ŪŻ4’(āųÖÉāńųü€ž6D +ėł.Ü’óm*+Łā ż ńņ0*ó¼ćīąā0Ō źŽ,ū éÖĢ÷Żśēķķ÷$>ų/)šä J>ųś’ū1 ąźOó”Ó%ń",ą YźŹŅŻõ  É52žßŠ-ŻŪ"čž’šĪ÷& & Ūć7¼ū +ąąÕŁ &-ĘåRŪĆē RŁņ '#īėÅĄ’ņ(E/ģåńÜĮ”!$ü6%īŠżŻź4ß° Ž÷ Å$ä.Ģņ(üõōćÖšÉēöČ żģß?łÉĀLζįÕžM÷äļ’Łē§õżĪŪ žõó80;ĀÉģč  Sł Ē1ö 7ŚÉ.-ŌąDźńźF?27 5 (ģĖ’čņóć’SÜ'źåüå '+ßźīüŪņ #į/ļėÜéłåš ūķšNÖ\! 1!ń) å,)ėߢ +°%ZJ+č"åńöģÅžšõō°ģģÕéäJü’ݾ3Žīٚ×8žėå) 9ńóųī8æń³ ÷«öoü FŁ;%_ź īPFĒāŽćZõ+ 9ģē)ŽÓž÷ļYN$äėž WöčBAÖē āĪCų²¬7ļģ s  łõR8ŚÜÓ²)Ķ&Ģå5ŠćŠ!Į«F^6ī1ŽöĻ*[&Ü$Åņżā'ó ŌF0ŌÕ+ īµåÕōĢōŽŃš’įŪ"„Aä’öéå®ŌŃ÷/īį¾-²0Śō&ń-ž0_ŠĄĘ<,¶$ŁŪšŁķ$­ē > ēžŻ (h&EżŌFżAć¢éēūūšņ€Ē9āÓÉķŹ< ¤õņŹįüĻĖÓåüš!åļ2ĢÓłKó łõæ9’ 2 4ó.! ģ„š'ķĀ õ;«ZśŲ¼²Óė’ū ’ė 3ē139#śę÷DłŃ× !ģćÜŹš ÷ŚÉ,9æĻēŲcÜųN” ļ½²ų’5ėßļŅŪŅš7-ł÷CķöŠŪēäńŽČ1©īUśż!’ÜĮrįČßń ŸÓI4ĒČÖą!<ż ģŽä5Ļ3ü¤ģ  ż ķŪŹäłūśE'2°čłÖFłŚĆóóõ(ļÕūK) ųė 1čŚü6ķ09ÓŌŽę åĻįT®Ä²č» ĶAŁķ źģ¤Ń Ėńģ* ÖEō)1ę ī.óę¾äŪ>>āÜüÕŻÆŽ(óßćĪ łÜ1ŌDō/õ#ž»üÖł* Øś!Ūų7ŅśŸłÉ#hņÖä fĻų $ž ¼(;ĻįųĀŚCįGŅźŸ0Õ!%Ģh6äŹģ™9%ąˆ×q’ĘķĘ ßŁŠę@2×0Ś.žį62Ąż%NOž..7@EūōT7é$+š»I"]ģś5a1ޱ’Ā.ABåĄAŚ!PE¶āü<0(ÄÜ,,Mėėśżų\˜;=Ģ5ż*U Ł@ųÅė j#K4SŽīŲ5³~Ųļāß-–&%ē÷’/Åžš<½ŠøPĢŹļ2źóØżH蹥ž 6 ~ĒĻČ­Ü“żw×"ÕšĄK P#9šÉŠļ2­÷łļ;HÆż¦ŹÉü„:āįŚ"+4ćŲ£ķ ;ń,Kę&ü,€źG\¢ņFšīų€ ī=ąåĢ"%žß #;Ø ,Ö éāUÖAōĖóåžó?fłßR.%ÉüóćŅģ&=ķō±2ÕģhÜ9ōŽJŽbŃõ\XĮģńÓģģā¹Rōöśå &ęųóä)ĪķāE)ŗö ŲęŠ÷ż¼åļÓ éūĖ (łł€Uīõ’ŚīŹšUĆ4«ģ$ IļŹžĪć~īŸ'8ŽēŪśżćÓ„ż²N*¹é$šą¢¶÷H%} Ųžó7ē”žģ»mL&P:Góõ š ļ+6>õśōõ€Śņ į:é2øÜ@A5)ūöņĮ莫ā:ÖŹ)ÖąÖņŚ Ķå=Åå!°$Ž ęA×ėŌßņœĪÖńō+Üī1“Ų: ÅŻŗßč`ŎžŽ€źł0ōśz! ńŅ"Źņ'ć¶+å¼ōćĪžx‡ŪąŚÓN, ŪüōĮdŅāõ,żšOŪ$$žüė7’ŃŚõ’.ü³D$ 4 ¶)Lü£óŲ‰ĮŻAģ%2’ 2ēńšóĢŗ°­& ėė8×ŲŲż ’13óĘįB ōŚÕ ū@ÖžŪĢ ę ą ‹ōĘéćuĪ*ųļ1UīīįxķLå)Žļ!‰gJ1ÅżŌ !Ų ąž=Ś&śŪµŅł §ųżżźŅ?%+ Õ4ĘŻE*µĀį#.“Có Č&%ļ<-šüéŃń#, 1ż’ųņżēśüæŻ*żö,öėåĻ ūķŲļ?Æ*!óĒŗ1Dä÷÷ .Ņ. ėņÄAeų*·Ļ&ß "łżčīįīü”Ü éŽīéģp :ŗõŃ0ģŒü0ķŪĢ üĮ× łį T ü1*Użńģ~(źÓä/õ’(Żéó4ņšóŅēū޽ļŌ(E 61Ó¬#Š ź"éīšk16āłõ* ’żåė€óļąŌčŃ)’ųüöĄńĒP0@÷$Ķߌ»11¶ņÉ. ļÜUāŁś ļ ߌšŗńšÖž'öõ. š 7čĶįu6öŪF’ĖüĀ©š8)ŪĪ’ŗ÷ńžśźŚė’P? ž%Óū#50 Č2žąčŅמśß4ōÕ×īĆ„Y*åŲż*„ō+łĢč"/ 0Ś bä׎ń’OI$5éĘ"3śČDŁ ),CīCŻį"äöŚ#ŚåLJś!¢Ż÷8ŗŻ &$·’,Ÿń ü2žéå#Õųū éīōćü/Ü"üę$źDļ" ņŪ$Ł×½L*Ä$&ÖZ &Ūō ÕķżØźQĆž¼äķŪ ųŌ>›ņ ĀRØ})Ņ, |!ä,ģ ÖŌŗO~Æõų'. ęÕlķ§Š3뿐Ä@€ļā5ž¼T~"Ū4_ ÆhśĆ·Ń-€*1Y#ėÜĮõ™zOÆ$ō ųš+½ę¼Ot²x'Õśaž¾ļŚBŁ?g€ļ"1/ūę€ IōgšŚÜŚŚ@Sņ Į”å3%Ó€Ō™ ?Šėz>&ėĶĢøóß2[ņĒöč0ÉńaćÓńŻÜµćņØ2õž·ž D®ŁÄE2¦šŸ.ÜŌ#Hc)żü7÷÷¢CčŪŌFā8śYć"Ś%ØĢłĄcĖHéŪšĪ~v¬ßōßóē©åęūōJKü‘Ī£ć~$©öł6õÖeęÅśĶ:ąJŠ*ļĪOäÜ2ź×éļĮ6öńóQŁ$Õė"łå æ¼=ęšÓÖe5Ż?S;ڽįöęä6’¹[óŻŪš 'F DSĆüšJŸĘģźöŗ÷>ŻūżŌõ’»łś ó 4ö$±®Ę&e_õīż<"āŃ^ų?B_—'żć Ś!6±ä Ö*4ĘēüļõņźęōķĆĒ/ ĶŪ1 ōé»ļÜĶuŹōŻłCG'9ū¬ōÄ»Yżøźł.ĮöĀė"[żŪŽ $÷čA.=&ēī¹ Ś’ŪŻį;€ ųÕåÓžIśZāō-ßß ó`šĶL/ņ0 ōūžāŅĢķńōėźōöźśšüĒū-ą ōļY÷EÖōå ž ^Ņ ļ_łžÅ°4įČ ńó!ąį²ņ 3 ū2ņļęņ%³9Rķ:ģń#Nąļ÷6üūłī ģ># Ō¾ąŹ¾Ńń¤ 1 łłÄć ēŃ.ā Ļ .ńŅ ßņ,Ų%āīQ)Į)Ó”+Ƽ÷É vŅźūžŠčāŚ>vć/ŠŻ/ņķŃĘ×õķŠńū >(+Ų,+ųŚą9 ė#K-Öł-DøÅö%ŗūšŻ1ŲŽõū aõ,)Ež(ńīżŚHJ9²Dų±ÉżF<šöČŅ,'#ž4Ž(ų H 'ēJd90T’±Ū7ūäįė×äFēõ/Ÿ ķ’ ń !ŚŠ/ķų²Łł ūÖŻžčÄų/CD×ō3å°BR Śßņōėš)ęé"¾ ōOČ8SöźĢĮ²Čõ-kģ²ŻųÅŪĶU÷%ęŚ;Š“ éĻ:FėÄ ėĖ`1ĒÅ’<öÜōšäėŪ÷/āäŃÕ:ļS抯éĶųvßķśżšÉŽ ó,É AÖó-ÕBēį@ą÷ų  <žļ3ņ.Ś»óĆ7ŚDŃĀāļQ Ųżcć6Øć,~Õņėś ėųØē„ ųM¹×Įū×ņNµ7ėŅÕź'ä·3ņż <ŽĒĆķėŁļ «õųµ’ōĄCÕŹŅ'ńļ*’fž9ü.śÓśĶü7#Č;$ū&łQŗ=ēD +'Ö@Æ ļų” ÷Ū+Żą“čĻų ?Ę%Ė:·9Ć źUķīŽŚ ä éü"!¶G1%³ąę Õē1"žļŠ:ģķéÖ»4ĪŲčĶ? œņ"6üČ>Øöž©æµ*Üē %ķäA(ļ[ ~Śa(Ģ/ܵ[Ā/3ĪÅJņŃ7Ū*²€ģЁµ-öÅŽÕ»³¦éŪļ+„ Ģé Õīō)5÷X²Ü:ź€öŃ6SC Å?ür=ŸĻćX/Ŗ»ŸÖÜFēiģQ€v€;ĶD$®ģ„'öŲ=eß+ŗÓčlÆ>ć*ķŌXĮÕ6ŁĻJÖ0Rč÷d 3’'d dä/;7FęŪĆÕż”P=€)ń;_Ģ`ŸLńōžQ·õj ėBĀłļä&åģ,ó(öŌ#ńńĪ$żWI40/ŽŅń2Ü>ūž4öóD%öņ ōö9åß"ęšĄÕŹYĪ. ŪHā½G ÖĄ·µ!Ɨ£ļåüĖŌ!')±łŚŽ)łāåŃŠćåć< į+V+"ö"ßßÜ»ųĻīźāĒ: "žńó6łōć×Ū?Ž$ńĖŹ ž‚Ę’bėīė' Ö»¾ä$ó"ؘ.ūÖ %.ł!ŌUH÷öl‚?%*ųāį 5×4,QĮ¹įŌL”ž©“Béī"ü0Éö <ķ’ųéXę0ĀEĀÓīļ×Ńļéā¹ źI6²ü+ ?»+ž:ĀŚDźń% Æ4 Č/éö(XÓœ ģBó +¼'ė~&3ūå- CĀę2ĀļŁņēūŚär,÷?Bļų·ėųęÄ×¶õ Ōč2Ņ»ģĢÜŚŌ1?°ÄōśĮĀ&Mć±<éŽĢÜ$Ē©»½¢Ö ŗä:Ģ>+öē®’ä-Ū Ų&āL ÷ &!Ė 7ö…5!źņģžšõĀ“Kįõ,D€&%U.ŌNžģųŁŌķ ā>Lé1(RÓÕĢŲĄI¹/0RÜńƒéźĢčĻ ģ2HęåėG2'GӘeĻŚ#ńųöåęį0Ņäņ3ńāūźöÜŃ7ų _ä ÉŖÖ,‹9P&ėöŚ’ĻÕ4ž&õFł:,]a™ßčļÖ Ūå6ńŻē…ķ2üĻ$@'źŲčŁåĖé#ŪŻčĆēO0 ?° –ŌģĆ1>Ž9õ€©Ņą±˜ł>’ūµ"¾É½d)Õ¹ ćėü ĪŁļž÷ķ÷¾ŠHęÄ7ķ½”8®Ą5ÉżÓō !äĮź.Vń ¼čćt©žĖų Ł//ēŃĀ'(¶£ōPŽćĀ,ėćļņÕ(cźé6MI ÖßLāÖOĶŌCįČļõ ģ7ō”Ö&īŲÓüĢ ń)’ é'ų;¾ń$÷Įš“Ó ¼Ė=ģ0"„ äżų ā¶øćęÓžņÓŅVßĮ,H!ķ““ó3¼ŠÅšē›?žōÆCšĶśų÷ ēŃÕė×ó¾ņ¼ äæŁD i'Ś Ž|ŚDčē;łb 'vćÜĻĀ—ž® 0@&ńśė4"IÄ’- »ߥ’ü4HūłĆśį ą»( '-¢’ŪŅē39źīÖ¹¼)’+#ėE/żų"#(_Āėńęźö5 ū¾ō#I’ūęŅūĢė J Żė½’71ŃĘ#ĀŃ’ )ķžōXęš ł'ĻźĪ’® ķõ׳:ķOä1ķŃ? =īÜņė)ŹīŽ ś öö ÜļŻ( üćmõŌ÷ä# šŃE ń+N¼ń)ō’)źÕņ²ļāÓ°‡’±÷ßŗńŲź×ņ½ūįŲ (żžŠ%öCųĄĪż=B %<8ĻČ’š ŚŽŻČ#/@ "ž걑Į’ F/īŸģ)śĄæNį*ĢĄįŹå"' ėłČū’ź1-(ķõÕéīąÉ,ąóü÷GØŠ&Łp&żŹŅ õ Ć*ćū ćį2ÖłŌųŪŽ/ółÅųŻĖ&&āMÅč$.ÄõŻÜQśöŃū;×üÜłéł dŗĘüĢēļē$ Żå0ö¾4/ ņ-Ģś ėõ\'+żūģ.ń;īüūžŠāłūæĪŻŌ2Öāņ¦3Ų꿬÷Ń ģIÖėł>²Ł8ćų))A-)2üó#0@¬B öŁüŅ Žü " G7ėŌ’čģ»ężī“Źļ ł'ķõ;ĖOÉĢLļQö-ūÜņļĪ1Ü ) Ō Ūī1 éžÖŹ’*²įßš(Ż/å· Ńöīó żč /Ņ2 *ŽźęŽ÷įóŖ-łĻę™(l&7/IķņŌē³Žž ūę4ĶLŽķž90žČüŽŻöąå¦źk(åPS-ų×I’hļ*Ųč¼Ö0r2Åś³)åĢ»éėē$Ā$õļõ‚!ä×jāż±$öšžū÷šč õ† 3Ü&ć€Y%ńēØč`;v‚7Š6ńmõK}Ś·_*~~+ĪO)"ébL÷„I³ŻĶö*43ŻI-čl/ówyßł 7āÄ3õĄĄŁĆ~ŹV?ō;"ćõqØ Ż=Ų Č-ōōV 'O|śŚ2@€g¤[ÅņŹŻT38ĶZū€Dé+§ś!ēW%ß»?čECąŃ„ļ3:`ł¤ā$]•Ģ9Ū®ļAčk&Üeę1ąę©Ļ€·~ąģūåĢå3;²ē6<Å0FņąāŅb„ėż×04*dĮŚG¤aāõŪEeØLŽŅćČĮŻčė­€÷ēEL*ćłW· RJōõĮƳÆĪĖ€(åē"ą‘ L¬©.€ÉZĪ J—­ĘźÅÓ¹:ķéœĖO¶ –ÉØÅōWŒ7;ŠŻM€€ĖōūŌ•eHØõ(¾śį€J^Õ\9Ž7Ż SéChņŽļ1ėżłOś·ł5«4Ū8ĀåADBÓįŚŪńŠ™ś=5sר÷.P÷[P ¶Ó/“7¦³×Ā·ĪėüįŻė½—#]Ē@Į;3ö6(6Ś4 ]e'·ßǶļÖż6)-DĘ1Ģ€)$÷«C;+P·÷4ļ±3ēĆųŪBģÕ4꣣0Y»TŠĶßē+ķøMāĖ5ņ²ņ%éSģŻÕšüX$2ÕA4V0$Q„Ņ öžżO :Цģģśß *Ķųä&4÷"BāöÕ é× ńä÷ß$ ’ģ: œ*¾!ö,[ęĘÉę! 4†õŽ ōņņ>°ąģ5ü'.  :ŠÄµC@Ć?ī;õļ“·āĄšɐ&Ż=Zßå )ä÷F Aæå*ūūNéŲ&Ń.Zņ4ėćFūĘNÜ ößČįą '•Ł88āä *7~5öżģTŻÄĮ8öŽĪ[!%Śą;H%0ųXøH:ĻŲé–ņŪė¼H-Ó åL AĻ/ ńßKšTā"~ÜŃ$Āå+CŃ®æŌÖ*4,ģ+»·ļü’øž Öā§āģ3żDzBź=żīŅbżŠN:śćČ‘¢ć{õÖżņ¾«cī+4žžś4ć.+Ūī˽ńŦž āĒ+ž,8üĶĢĄņ+żźˆ×€ßż ÷÷ēššNž!äĪ=÷6÷ ń4įß ō+ĶŚčöģóåćńįÓ;ēõėąXŌņÜ×EÉķéķ āSīżÜ^Ō:ć"<ž ōą24õ˜žüłģķ!.äUē+ś-ūĒ*0)ØÖżšBŪ\ööéśÅĘłå Ķ üAŻ~ł0Ų¼8żņąü$ ĘūģūóąǾē#żżę»4čē čŠ,: !žŹÕä" Ļęßß  -$VļļŖd=&żuų Až] ÓąŚ-Ł)¾ 4Ę>SėžģńčüäŲŻŠ¹Ż÷%›Öóų€fņĘ’Óā6ņš 3ļ‡4cPßčPīŃē*Żāų×ē¢Š‚ŌķNå8ŽŁč õņ0ō÷ōģD’!ņÜ.'ūÜ ń,ŽźŃč¾Ō+„Ā#Õś ĢųŅŌßś¼žķ Ž$*ž=$õ×üłž0åōŽż œ¹ģÕLóŁ ÷Śé9Ś'ź4ļģö( ē’÷  (ļöž ż+ ķŽļż ķäŗ 0’žĻę#.×Ö*čü7Żs0ī3łŌų’ų ųµńDŽló1ĒśGGøŚģóķūł 4ūßĮÅ Ął _ņéįįćÕ+ŌŠķł ąēėü03šĢEœņ&ÜįA'#Ńå0Ųįöęś¶ęĪżš.ā 5ė ¼PŚā§ ½·ēÅĻäÅĄOŲ °M(Ś(P,Ņ#oćŪü7‹.™ ŪŪ°ģIhĖū=GėõN1HVŪ$č0Ķīė/5:4!EµŖ'œ>¾ļ1kļāC āłŹÅkē¦ö Rsń(Üżł[(+•ļ]ūßß9ü,ņšńšŖĮBčĶū8¦ŠNźŚ&5a; lCß0ąĶH?#Dņ(n ’iķså#~ńķZ Ż;&=ˁQ÷ż 5ė#š  ćN“ś™Śū*÷ū÷ė1ōż+ĪņTnŹūB°ėē !"¢“1ū>Ż&Ś÷ā ūżń¼čTD7:RąĪSģPŲĒрÓń’ų·ÅÖ?ś÷ ÷źUT ‚껹žģšżž#üŽ9õ:čHóZ ī³ķ'É3 "ŽšÕ׿½ ó²DR V½ō ׳-ƾL ūŃŚūĶĮžīēŃĮäļ žIAųÉ0,%ēĘ ćčżčW żģ0Ļ$µżģ>8ŌĢPä÷+)ė×ŪįžŻ É'ÉĮ÷åD7 üåCKS/*Šö ĻŖ. -A6’’±A ņņóć0 «ė();Qźüųų4’Ł(ļ<ėöó-ż9ż šPż-Ģīģ?Į$9%&ŌĖ8( #Q7ąüł±łö 2ńłŸĮ¦ģöķ¹łūFĘ8׿-ζģ™Cū »å#%ķŪ6öņōŚļŽ&ÆāČå $ĪLÜķź ņż ŲŌś×óēųģ%0ö*÷łäūį“įźßĻļéųÕė ųēļõ ĒØóŠ (ļŪóĶõ äŽv=Ž šMĻDż`÷5čŻÓųÜųŁŲ?5ĪŻ’ēīą‘ō3 é żåüō3åõņ$Å+żāńšŁ"„čéį č>*ęī¾&õ)=לéó=Óč’’ž (÷ńéšśģINYĢF£ŌŽA Öą÷9ėߥėךI¾ Ģ"ļ)ńÅžķü*Īré8ĆŚ ōü¼ēéHķłāēļį 8å,3%ķęŽč®Ü@ŃåßĮ’Ž×ÜŪŚ0ÜĖ#+hū’Õź6Rė/ >éLµXø 5Ä) ÉŪ(* ü)šõŻ/üó ė» Rź4ķīūČģåūų ł Ń÷üśč )Ųź *ć’Øžü šž:Zץõ’ęĮĆ’$Ö÷ģQ™ė Śļ&ł /0ž(Ćóų.Aä9× \!"6 ó÷ ļŌŽ—×ļž2ö’Ūü+÷ń#ŲāĶ~ÖĢż“ęģ…‘č2Łó .Cåø õæóū6Ī ēę’Wßöģ8 Üąõ '6Nō8ņö;÷½2 ٶö źŽ0ŲāóŅ ķķąż5 8å÷ūéĀśÓĪüćKóBń÷ų$ä½’ź XCg*49ć/'ĄŻõJÖōkÓ#äŻ²]ń'ĶŃ’>,Åę.ņǾžļŪ8ö72 ü0£ēāž½Šüšō÷Å4K/Ż ¤ ēxž“ęŌįŚ‰č/Ó$’żņū9õąēuäĆ –Óżß<5Ęń…Üę6)ņĘ ūÖ“ņ8”ćó9ųōÆģŸó’Eė*ąüÖi+Ȃć.ķVóŪąöł$ų5ņ ō5ā Ī /ū8a½3Sīšī19‹×Šå^75>ėҶųÕŹŽ Ŗ é?-JXõÉõ""öäŃĪŹ'#Ī€įq*% łųüōž!ĮY¾ōŌø>źšļĻÖ0Bźš(35HńŻŪ© ą®%śŹ!,ü9ÓńØ2śō3&ęėā5ö! ÷įöą]PāćųäßæŪ)ĆÅ#ūßĆō)š)ģļŁ½õTłźŚ'ٟ"9.¦Z8ü?N»ÓŸĄ“ #¤ łĪ“ųÅ®Čõ’@'ó·öŽŚń Ś'‚ļ*13óžń"ųjןX Ēä4"¹HøŁē“yßżż<ā·’ĘmøAķŻ$įOé-97Ć?4’Ņ".å žśėRĪ!įĆI Éå.X,J äżäš züÕļcÅMøēīG pķŲ"ć­=)āāēŻ Å°½F2©}ĆÓŚ ./’0-„ąŽ;ƤŽŪČŻźåėĒ8ā-=śļÓ&čąÓÜJŪįżē&]Ż0 óB2æńłvč2ŌžĢõ€BļŁ*ØŽÖśK4Ö$~¢ä†B'"ŽÆ!#ŃõxVēü'K$( ׯŻō¶åpšńPóŖ;ƒĆŽ»"2-€Õżć&ž7żųŅ1©ļ÷ĢÖŻO~a³Lų Féęų7ÖņUśĢķź%&ńŻ’Ü)5Śé9ŗńŽā ü ÷öõŹRä¾ßåÜü ū§Ųūż )1’ō%3ž ŅØ ķ!’Ū8Hæ’Ć å ŌĘĀ%šģ2ī-ēĘžõńłśüżżŅ3ńć„ņ)/ĖM½Š&,&ųņ6š=ÕfÖę-õįøÜü ķģåŅķ2’­ ęSĪņō ńłJįRHć0÷J%ćĆ ōńāć!ōĖČöß1°<Ńž}ž÷ĀźM,ėā²å)Dæ',ļöõ ó$öķöµ2?×ä/ē #ć¶ÜIžŠ62ķŻ÷5ŁČ 3ņäįč'Ań×Ę9Š%#ūßńĒŽ,šB"0Ū ģßÕūŁł Ó]ęŽäMÖ7<-ÕüāŌé&<ź’Ē. #|ĪÜĪķŲüčŹ, ųO÷ī"¦ßE$õŽŌ'ž1Āż0 °žÜēÆ/źćäÕ¬ÓŃfšŌē,×¼%÷ *#śÜD·Ž+*Żōćß Ę@L(Ę żźöęM<īåģŪ žĘų5¼×ųę%üDóÖć9>?>!L’øčļščöéīŽķ4ŲŻūĶšļ\ńæ?śŁž ¾öĖ õčüĮ+ŽéÉęÄ%?īū¼6ü=Źõ9%ŗQå÷Ö #-ķ#ē$ųĖ2ųö«ĀķѦ_5Ā* Ų åßlŚAå&p“/ņéņŽŃ-Gģöżćåł Üī9śĪ4éWżĒWīłŁėņōŅ0ęųūĀéĻŅā¢# ! Ü<ų “Ńė ś U-!5÷žµÖéĘüóčōōÓšī6Ū āTö3žł (ŌŪ&įŽ®¾į ü’éÖĻÉÄ4żļéDę4õÕÉē:ļ ģ #WÜš žń9īå»9Ü'’]ņŃń# 1u!Jėś ÷å ž åö ŻīõüģAöÜ9ō#¶9łųżóūŗčģ÷ßóŚÓļłįżB żāęåš$øŌĒļó Ū!Ø?ž­ @@#D3äų ģš/%Q’—ņüė½Ū’üŌTGśŪį.ńā×ēżü5ć,č>ō·ęßC'ī6 Į Ł1ģܬ-ļŹ&ųęńöŪēśD ×r)lū ŽĪ’õśŚ½9ŚŠÅ÷ 6ėćāōėźó6įłėäóż ężģś# -źąU³ęĶųžū ńśŚĶĖĻŃöׁk'0ų÷żęB®µLäžę ćņW0ź PėÄNN!ė ÓõWéļ`Ÿ7·Ż÷$š¶ī’19ēŽļč2 ā5'TÓųź’+ūūżē%ė,ė÷Ų uØł ?į^ )üć’Ģ-ū-<ÓWČ šŌź ;R¾żõ¢é 5šĪ*%Nø)[ åźB9ńķę("ö°PŻć’Ž$®ĆņšµĶP3$ä5K)÷»ü'03.ż$Ėš¼÷Pś/*Č,ņ  Ż 7š ōå’+ł­"ßåćŽėÖ. /ŁīļćÖa4!<ÅŪ-ńģŠżī<1ŅńÉōß ßćéĖĀŚĘē 'O ąś (Ų÷ß ć#7 ŚÜ!ŃĆī)āŻÉ"ŌõśÕļéųä5ōėśā$66ėäŅ(ČÕ üŽģü 4ģ ņ"žóėęžćČč 9ņüēńßōåÉų] D°ū öŻ¾Éšš3ųĻšųÄģķū ł Šķż$óŹż2 ń&Åņ! Go~(¢ż*ÖŪ«M5ł:Šžü $5¶Öä$ śŁĆ śü"ā Ī!" Ū Aę¼²ģõÉę"šRäČŗ½!Ō4¤C,/a18÷Īų?ß"į+«2Eā)œ(É:å›ļüĪV3Ż ėŅ ’ å:'Ā÷Ŗ2ģ’Ś¦õĖņ"ŃżŪ [üżģѼ!ūhūĘ4ŹāķąŚŚ.1öŲÄ'ÜM3:<āfõĮėŚõ ‘ķĘĀįį=ĒńßR±Ļ āšŲ6@< żīŠćė ® ŽŖ )!SĘ$Ū ,õ6ŸTß ­ ¤{ŲßÜČŻŻ .ģ$ųå5×Ė3ó·ü7ž,Éģ5õMż ęJš59øēüüĻü6&š’”P·ķ^śŠ¼ā1Ū!/!Ūćę½ąģČé0+ņģ>'åßī>—Uš7åF:ĪŹįr ņ6äóķ;žŃ»Dł‘üŖŲ¦ņ‘ļūģ/āÖĖŠńņšŌ9X#ČĆŗĆź ż`>ķęķķńĀŽčŃ öį²āPŌ@#ÉĘų<&ģż' č+’õ.ī¼ąļ ĪbµĀ9 ö=²÷Kīēč+Ų×õåļē? %ĶŁ&N÷ 1öõ#Ų½Ī"ü·ŻÜ&ģŌ?é"PęßēĘįž×śņI3éą6ī<× ó„ žÜį Żē(ōÕū=ÅėśśÉĮÜé'ŚŽč k ½Ōōܲł&śłÕūŚŚDó[D'„¶ė÷0±?õĢKĻēĶÖŌõ<ųgŪ³ÖŠgFDƒšę<š%1=(Ä#šņ,ģ0āMų&$åāäŌŪšęŲóæū®÷“ņ»_Ąļ.dåśP%з čĆõü†/ΤŻTżęļsģłP ²ł+Ķųī֛’ć))ėŸ;ó+ęĻõõćčō8É"Pü,9 äüÜ !ģōłńā0ų ꌟ4ž(Øł õ¶ż÷ź4%ŲĪ÷ćkęõöa č,śģŽą Œ!.,ī"Öš;é*Ś#Ļa ū, äŃ;Ü,÷õŪ, š³&Ułņ'+ķ&Ų+6¹;,4l×'üųłÖ¼Ųcš5ķHĮšÜó鞣ošūCŚ&©Ż÷ż?4CL¾ęĀ4ėķūķ¶Ēę ūāŽęźā. ŁX É# "Ś* Ł’ōūę*ļ&éė įžŽĒ6 ł>śŗ#åŪųÅńVķ¶$± "Ü6Ļń3ŁżņņģééōĒ'üźž4Įūģ2 īõ9C*²2%ąŚļę4åģ ą;ł0Ź3ą7Ė<ŅśÕ ėśęÜāś4%LĖ ’ūįźōŗŃkģ źŽäõā @'ółźüöéīłÓ Żžī2ū$ ļāŌžóķč ’4įšśĮ3ę Ś×>ōćĶ»į8ßŲĶ Öģ)č…Ėū) (Jµ)čWź.+ģ >źHæÄĮ.ū=Ō=üŁĪż “ęš  ėōčīā-Ó ’2Żē4ĪŚįöŻŁöģķõäū(# Ųå²÷ū5ń ĘāūÓö6 Üń‡ńā±Tų¾ć¬/|ół6åģ*­³äŪ ĮņZŻ&č’Ńł É-Źåźā½%ķ6"DĪś2p°ņĢķźšÅļź’¹«ļķĪŗ ĻŃŌŪ$@%żĖOé¾ĀėėĄū7ĖŁŻ ŗQģ(č4żĖŽ÷üō©T‚&Ų.Åś KĘÜ93A#)üō½¬õØ19čD5×5ģ^ĪĪ]ĻDÕ÷ē!ųŗä'³Ü©/óēųCEŚ÷Ē Š±9ōż(Lłķ-"Ęć źśō Ó5ėŚŚĢó4īH¼üč+Q98Sś ĶHé ?1-śYŲõĻŽ Ė Č%øKĒÕ. K'šōē Uńš(­åĒŪōoĪ ż@/īņćéĘ6Oųßųš ×äż÷ßįK0śńפµ*4½a1Śäõ䎶ņŁÕ+ó)ź*čDū ,=9+œéķīż-ņ ĖōŃńĢśŃ .Ž"Ź6rł’żP ó#ä Ņ_ ÄÜø±īSŹīKĻéż'õ× ā 4ņžÜ®?=^Īåė ēĄö7с šā7ų£ņęŪ8ņߊѳąõLĪC­ ėÜś9 ī»ģēŪž(#ųž9ģµÖē$×]i5)} ™®Ōüś½¾’$WĪ *č¤7ą¤į~ē›ėņ+ßŲń÷ŪĮ?ļõ'ō>ٶ ņ’ųøŪµņ ļā#äqż&ņ22 ż%  ģ”Ä żūŽŃåõ¾-AÕōO[,äī똒÷ūóĀčžą(! ōóż&SD+ 6āķ%ųÖ5:)|¬ OÖ –$’óņ÷łķAčļ$łĖRõķ<µīJŽ* öä ōP%ćņ_Ņ÷-żę ‡6 Ī’:HŃĮŁ;0;źEĢīąń,åą×'ó:| Ūśõņ‰&#Qū'€BĮż%ēä’õč÷š³O¦2#Ų“ś$7›"ąįžĀųūśĆ æöJńż!¹$Ė÷žĶ+ 6Uźå0ŁMł"ś^ģ± *ęėėWĻń-ÕŠā 2ņ3ū8ņåźåŌź(4śįŌéšŲó õ2+¹õŠv Ž /2ņĖ(%ķūŻąüŲšäżųųß’Āņóҹ" ųĘé.Ż >āēü’ņ øßęįé%3ŁņŃ.ļ‡ žŅöą.ŅŽ’ ’ åüģóņā ōßīößóĒå įč$ŹRä*>ü’-ųÉÜż,@ł-"ķßéā ßńŲė,ö ż$ģW’?ńęėš’ū  ųż#ĪęóD@ó  &(ńżņ:čė ÷ęå Ö (*@ūćź 1ā óé ż * %)ÄŽę+)üDą åĖż¹żŽĢäŽ.R1=Š/£ąš_Łé©98*=ųÜå"PĘ?  ÷¼äÕķ;ė=^æqƁźI(4X=)žł/æR0ć ÜüܓŌʛ6ŠģÜ %Čų7ńPŻ/56Ż-é*ņĄėŲG²Ė×% !]¹)ŠģNÓü!0źęEŪŃėŅÜ“X©źļÖ$ŻķEęŚŌ ó ż°ī—Ń1ų71.Žć7¤I^"<Ż·6ųŁąż!’Ī H-ö÷Ņ >ļļ½P'ķH%ļüŻ $ķ¦2žĪĪ€Óāī% Ł>ēϘÜŁšŠĆ/öPżYµł<#AÓ5=Üę8.ÕÖŃAüĶ ž]ė(ĻŃļ& ł" JöŚé0ŲĒė’$Ņßóčģ¤$#Ø"ü-· 38°Ūė¾’2łą°:ˤß-+ņ1į䜎2 %ą2Ōž«*.7żż¬F3ć&Į Ÿīż°č÷Ė-ū čžģ/×ū‚ź ©Č»°“1FĀöü!ĶźóÄ )%āģ’×į.@Ķ'Uģ÷ņS9żęćß#ųŻę(ģ:Ł.DÅś2@ŲĻüŪSüÕ×õé Õ,ØßŲėī ±š Õ/ŖÖQ & )*ÄēīŁÖŚ’żĶDŠē 2ڹE'%ł’(Ģ’ō& ķXĻü żņ©+ų5ČŠł3Ļ3)źżüŃ/",/ eśūļ×ēÕÜųõ/łŌŽ&ūŁųŅķßłé%ń!ėĪŠį ō,śę#õęŪŲė(ć0 ķņ!/īģŖ ’ Ęčķ)įŠŻ©%ßż!ńµ ū6ģ ļõ óEłŠš $’ģ=ź×ļéņę ę$ö+õÕŽ#š)Źžčóņ ź$óĪXįĶ߯šĪūåŗüČŃŅŚóõ%&öÜż0ćĻūłźŌ ųś·čMØ—ļŲOłŪķ 0įQģćŻ¹ÜÖ īĪ5ąū?śįŹŃL'·äīņ˜^+<÷0äóźļ”=šSšÖ  óōŅóą#āĪģśõ ¤Ė×įßVžAų`WėÆżķÕ^ųüW&+ł üĆŠ÷Ļ Ōµ“FĢA6Śē˜źēżŲ"Ł33ģūd5óQņŚĖEä ?Ńö©ć·ęŌ##¤ÕĪ¢ äĘ^­×āĻØ# ÓćA JŌ’Ż’uĒ ņ"Ś[!8&Å~'Cčżćó1Qåņ#1ŻÕ’żQ<Ņ/Śå·¼ß>Ōæčśg»):*#&šńćV¹‰‚ß#óĒęą7 šŃĶ9÷ēųĖ .ĀE,į 1ų@5ĄŌĮöōdāłśŠöĖŅX9 ™šļō'1ź ūČōD[<ó%Ń1ōD įįė@éüėļŪŲ+ĘH( Œ²Ģh-ĢōĀž0÷SÜęųך*Ņ +ĘE~“õÖ\Ąē:õ*¾7­KŁ ”G FKóėµšPhŅżś*vŹ£(ļļ›»> I£€÷Ö«ŗ`æęķņńŚÖ AGīų&Żi ć/ń01łŅS ū+Čą:½K ;Éįāī ź ½ŲG+ §ž\ńČą '!ųĢ Ł-Ż@Uöķ/Ģӂ$"æēŚ9ŲRĀ÷ 94. ĆŁŽ9čÓē0¼ļē <äóųóÉą¹ö‹,Bū!7ńNųõµ*3Ē›ł2Ī(7¦ķō ;Aź0Źčž$ŁÉļVŽÓżŸßÉ ūūöóśIžµ,-Ćś0ū÷#HÜŲ ņŻĶKÖŽ*õ»5.EåŹ~Š$ļęāżuHUC ė Ō20ż#åŁ@(æ*öģžłėźXÕšę(.łĪE ½źóŪą×ڵČūŽ·÷Ėõģ(ģ" ėö ČīöŚńąEźŖóÜļīģH?šž²ł!ņčČ$ł> ó-Ó÷īĘöž’żü)+āŲ×åšõńWźłśŲłŅĒäķCōõ F'ļ1 ļķĪ#īü+æIńéß æńåóįéDļ7ēŻūżšśÓŁ$7/ĀJ’ōł'»üė’Ģ’#>-÷äČ ō"ń«’#ų īō&+5Õ»ŽpDśźņ’ĖģūāÜč¹¼ńķ7ž`ŹÉ*ÖóļY;$#rVĄõ’2ł’żŻĄīróy9«ėęĘQźž9Ł5ŲNźµ-»>«ńåų0ö# ōåģļÄ’žśLÅĀ„%ņī^éõ >ū+óÖ+D”ŗ ó(ĄÉØ&¹W7š1»®,ü9 ųž!Ņč€ćž ŻŅ?ö"Jķóę׳,Ūäü;żüb”qāß įsõįĶ <ł>ćļż',čÖę×')ś ö÷N",Oß'ź>#÷īJŃuŚóUæ0”7W¹5ģąÕś9żķ³¬ŠÜö\Ą Ē0ŽŲ@ ÷ĖWŃåNN=žMįLįIźĖČŚ× źīMööś9Ļ‹øé*dNRJ.śłÕ' ŅńŻóü·ė/#<$/Mļć /¾čģü¼ )¹±ßLžüSšį źŌÅ÷Ž źźÕó"öżĖ$ł® ĒęśīęöQ6"¹ūź%ś^ č9ł×,ō ČōÖ$7ī÷ 3ÕIźä÷Ž’öMŅ & &K0ńĮŅ/EńŁčĢø+*÷'ū "ī’ō˜ åüoŌŁ ß&żņ śņŠęę%ćü“*(ģ¤čóü÷&'V½įųžśū ÅŁ1čĮV¼ÖŠ:åįš Ģ-\!+Fõń÷ׯ0 ų¬¶ ģąź*÷/Śļ  ĢŌGŚ$ĢŖżī÷0õIGeÓ%Æü5ūžńŌG I?ń (ČķĒü Čö{ńģįÕę ߯C ZÖ8ĒÖ0ÓŠ“Sµ/ņ2)ņė%OŠö¹A”&Jżūń(Ļ‹ę%0ļRÖōŌ“é <öŻÜ÷[ ü-ß ŗWģō%õ3śźöūŲź³ńĘĆIĶĢų0ēę ēļęņÕĆō ńźšż"’×ā;łöšņ÷ēÖīóźōIAUņć3’ēü!čųł ōŽŪ÷Ń/ßķ( +ēöÖä" !*×é'/÷ķę$8āņ)éĪä%ųĶō)ž Ųļēļćžł0Ņ÷¦śų Ō#Cņžę)Üėćļ ó7Ž>åóÖšīžž)*śś.ĢPóĪ’ żż’Źė®$ź÷ēĒāĆSßī'ÓļŲ N%źÖÖư?Õ1õÜēÖŽŚŲūÉ +5Pā;Nł:Õ!š’ō7ļūé4 ńÓęd 0õ(ŲĒ%ē$Móä&ō Nļõ2ł5ā°Ųö"#4# ć€čźŽž>Ťįźī3¼@Uź,Ч' ö,ņ(ąķ®öūćāź2ŅĘÖĮė Ę'ōԁJ*žŁ Nó.(ņŹŹ!ū7-šų āĘ8Øø  āÕļöå;Õ1&,B="ńõæŚöĻ©+ńķ PVńJEĖĶŃä)9R<ķś,Åõ7ć ģŅī× N¾@3(Ē!åÆĻĀ=.½Ś‚ūž÷7õZ/ į΁Ö<÷ÆCī)ń·+żŁä<%Ōü’!£»ęö¹ęĶQR0ģ Š<ģóķ#šŌėÖąÉa޽¤įĻč"@żš(Õ Ž :łSśķšš$Šź4įĻPTŪå §9²$M4'ś3ŚžLC Õćöńń7ļź»ī<ķų±öŻõ%õ%½žEöOó6Įģōóü/1- ķą&įó+ŖźŠļ)ģź0Ž¢Žöö O¹ ī­Ķ(ĖaĶĖÖŹ94Ł ū!R č÷ŽE%0 4'*čķßč ·,ŠŻč7Ļ š(Uų+/łŻ)ēł!ļšīņģś ž(JšNƒYųaŻī8Ļī€&}ŚĀ¬’C~€Ó²1¾"¶Œ€ ł€€€~ŌāŹUC…WLį„Q‚e"Fj€ĻØ‚ėŽÕs>ōGŅ€,.€ß• +ēļįžÓņÆ·Ķ€t€,óŚ}'€¦*(°/Ųš,Ė.Ń </GUB€å)Š ßį,$ ļ€śe 5Aš·¤'QĶīīćĢ õ &ʗ@󣰀1Ū¶œĻED/Fåķł"–'ŠĆ#čmŁ O\ÉgÅ;īŽ³ā(€ičŃ/ĪĄŌų¶īNÄA£õb<©Œg׿mOG"+|šVYČ»™ńŌ.łÓÕÕī)O=[¾•?9×µįŰłéŸļ }V^Įś’؍ŚŲŲW€Å ņōĖ5Eģį°ķ+ļ}[Kü(0ķŪ`ö÷-‹~Ī!::ß%ėF$÷ó$·„Üł£D®ۃà v)’ČŪr"ņj܇īžųųÅšę£@żŁCŃĒ’ĄÜYź9óņ’’Ś–•÷)6ƒÖīņ-(ļšhõ?ĻÖĀ’åał5Ź#P$Ēå—ć„9•ęś;Ąēż-r Įņ’ :"%óŻZ÷ąīIļüLŠą®ŒUÄŪćčć‘9ąšWį ó$¤#ņķßĪ“ßāÄĪ²Ü §ż/!šņ· &ąĄļŃHł ē=ߊU¼Ņä(ś>T(½26®ĪįRĮ×1,åŪ ó*ąI&Öīöéõģ"Ō÷įÅ“Ź.ūūŁÖT ū łōA1åž8ś īÕĪ×÷ļĪéōPA÷ßæĘüÓóÓŠ6łźżć%æ)^÷źęõėž#± ö++%NžČD’ć hčžö !č÷ ¶!åDÉėśöńėń,Į0ĪŁöö~ś÷Æه;õ!²ļO 3õ ųķĢÜó*½¾ó.ßś6ō¾ņŅdÅ‘ļ ŚnŪüŠāšd)Fō€ģÅü„¤h8ģGC¹‘ų’łŻ«÷KĄ²ĆŲļ ėÅĒńõ¾śIKC€r&ēäiD½7ś=¬Ńõł15.L}Žö×øhµöĖ\}ōĮ‚8—-ĶßĮåóa?Dž€÷Aēä™HŸµ Ä2蚌 7 dŪōÅ>@Ūč³UĀź[—ŪFūć5 ą&“Ū µZJ!(®€©+ųŅ”»‚óõķ^»P4L,³?}$*ķāū4Ų!EHÆ5r«FÜ\Yęźmóę…w܎Æ’eC!>VKĘN ĆóĘōŽ€)€3ėi…-õWTŌ12-!śbņCb&ō ENt"ę—D*ž®õ,kśŠ&;S|'Ņ$ žĻ4īō M ?Ų—9ißüÓédsÖ€p€é2ßćܤŽĘć1 Įģ€ģ9?5‚[ęģÆ"½ &tźų·Žmj‰ųē²µÖ4SÖŹ”š#ų'Ū‚ę+(«÷ß@ Ų½$¼Äüčó<¼3Žšāõēäķ+üłMõó( ę"žéūź$Ė Ķüł¼%źėõ¾÷āĪõčīń×čŁ!Ö’é,ĻśńAŹŹšģDž’åčéĒßąQś’$&'šįü$ųõ(ŲńŲ9%ś­żÜŪŻš#ōĻ-Ü 3Č!÷Żóķ»ę üäĮ÷ļņŚꥳūń-Éē#å$äBėČŻõ}^Wšč¢p»Ø»Ä߀Ņ!ĮtÕ.ńåńÓ$6ž€ßŻÜ×Į #, ś1ÄĀ<'ß&Q€¼D%ÉšœØ›KÄņC&cĀ&ä¼a1 e:š\é å9Õ'ZīGśī'ē~ƒä(A ļēÕC Ńź;ŽĪĻ #Ić`ųńq9Ų · é%6< ÖL!åĦŲ=6śāĘéģ÷2¹"õ–× ĘśĄ’āü"čźż šša5 ÜR¼&0ū2ŹĖėaą.5ڲöīPė ł±öó.Æź9÷Œéćēē ŪŻ ;ż¬ÖüįģOT÷ 1ūZGŻ’ÉEžQÅ#äÓ杬įš ³īņ1&Ķ,Ų/)²6YŻš8UPć `ėŅ])ļ¾ć Eōå -uĮ1@°’@%ɽõ©1<1*Ų;Žś¼ńh-ņĮį+øŌŽß"ģłčśM ©ćŖÖ.÷ń;°ą×ńńī¹ūį÷7šÉ ż"ķéÕī!ŠåĘŻ’׌ŠX"Č Éååā0ę(ŁlėŁų(Ö%%õ½>s’Ųįūį0’ŗčŅĆ„õ*HÕP&Öŗõ  é* ’6ō 6@ś!ŚŃ’üŽ Q|L1&@7ģ/Ó<ßū ńĆ*ę(»2Ēūƒ­)ž"łŪ*Ćńš<łČ÷*ź,ę1ÓčĻÜöā!Ćū*,×čŁņ4õśü¤ø(Ų2ŃŻ‹ĆIć‘ģčé·Ņ¬”ś›ŚJœżźŲ,<5'ė¶ %K= /05j•€ZęŽE±H ż<8¦ģĪ?yœ„ā4 >é5.BKjŽļźØŲ€öšĢ[b;1š9čé5ä’ēk<,ķ€ń/ U /Ī~ĢÄ5Īp˜ä:›Y>g×?5' ó$N’“Ź3 õŃśąQ8ɑß9®žµ ¼Ę»ćŗ-²ē ūēąĀ’ĖßĢė%H5ļģįÄļēĻä%7C,å>R421$øūóĒ.SĮš,*Ļ§Č Ēö õ īćö·čŽ$Šģūī ś ˜. żÕóöBÆļé&µžąµ1³ Ü śź<Żéåś üÓą:É’ĻĆ貤1]µT č=&!6½łńū2ój’÷ßéÅĶņę*ž®Ē8D:Ż& Ē%Bėļé0ņ%ĒēüÆ=&ģćóōŽDĄŚĪŃéš3ėÕBöF&õ/3éō@»>øüłŠĢį~ÓńÓ!ģą-8 5į^@ø3Żń0 3å/ŽĻČųõó üŹźJ¶čŅ&J6ąŌ.ą÷ ż6å óךŲŅŃUT#ķ×õę4īž<Ā6É $īõVß½ßŌóūŪŁśšõ*ż'ŽEś+ėāēź3÷5ūėüįė$ßóķŻ»– Ü " ōģ$šgÅ0-āģUŁ _ā /ü&p7Ż4‰,LߥĘ4Ī)õõĘ* ĖźŹ5ųķč7 ¹)ģö 5žõļ äµČģŪ,źż:$źÕóāą Ė<•õOą’ėń ½Ė>¹ )LśōÖÓ ’ęØĪ¾žąĢG›’"’įīŹ’#į5 łĒ6Ę÷Ū=ćēI# Ę5j:ā »P’ÕĢ1 Ū0*_’ 8ĶāÖÉ%Ņžć>ĮćGóŁ@÷ńķóńł!š”3õĄ(ĘÜŚĻŠßŚOŚš’éźžBöęńģŚų)źä݊4Ō“ÄńėŁćš'¶äßż żūōļ&¹ĀÜ —-Ä.żä(š>Ų'N:üųßJ$šä õ Ō€Ę×`čć3¹9Ń)ÜÜ··ŌŖT"ęŚEIŁŻŲĮ®Ü$+)Į5ĆĪÖ-ɒCłą?ń.÷õg¹xļŃ¢Nåß3¹ųöć ™ó%ė¾L*€/ ] € Å×"%M>ń(žō’8ńÕM2óöEõ"·ąßŪå÷ņĆ.ŲÜ ŁĪM$óīÄģŸĄĶAX+)€{#dé÷†2γ|ÄŖĻč@’éŚĶŲ‚ž\8Öóšż$Žąź:!‘(÷¶ßõšņšļ,g×<ß²īĻšX˜3¦§ ÖÓÜU'»5WNĘ/÷óūėŽI Óõ*äŹņåÖ¤ń č- ĖöģÜÖķżņ8ō Ķf*3õ.GĀU(8!%óøążāōļńĻžüó żĶŸÖ8éłcäšIś ńųāŠ 9ēåĢčü =é(ū ?½÷-ųÄÓŽBGŪó .(ėūšś(åÖģ*$īč8īÖ¢šłńŽķ " (ŌĀš~öÕźßłŠ3ÕńŚHņ >5ė%Ŗźņ;ų6Ē %¹'>ßńä÷£ ėūßóĻ+ĪČAć™ČāJ÷;¦Ūņ<(ļ-6ĄķüóķżÖÜõżųĶ˜Ōł5'0c/9ļ)åÖ%,ž ń8¾?韰怎V+ śŪ*·źÕūīßłM ó &$ ÷šßęōåīščB»ģźĶ ģūēÉ*“ ņå&¹éė+ļšŻ* ēā×äJ"EŲ'&-ĀķÖęā óLĆ$ö"›¤śąęłRåæ­! äIĘŅž’!N¶iĪÖėöš!"S?Õ±õ-ńćūźē/Ćł ?łõ½¤6Öó1łć#’ė(¶ž«š 0 ųģHÅĻį6"ł÷¼ėĄDĶėĶ%0ķ-óāł0Žś ŠäśŲõ)ל’= éĢg.ŃHŚČĆÜ--ū ķļ70ūŌĆõģ’<čūāø( ė >łSTęö±>ß¹å&(öR’"3 ķ²öę3śõ &2 æ8’@żÜ7ų52Ś“äĘäøōĀŁČāś½Āū’%ėģįõćķ, ’ļ üąęŲÕā0(éŚ /’’ŽźōŪ$ķ(óõ!Ž Š +įļųŲė ķėÕęļ„:&żłé!ąÓ ö !>’ä,ųń2ęķõ4ß#ļ"©ęļÖŚų  ĖĪ ½-¶ÖäŖ `!6+Łö0ŚŹõķ×Ō)ė+żń9 Dś Üņķšžæ/äńĀŪćŻ³A¼–ćŃēÕRRĖū/Ų± ’/ŅóųžŁč+;Ł!ć6ć(Éć »%’3č&XBŽņńóā'są$ŗ6½ūÕ]’ž-į©īńĪ9ŽÕDśԌąŃõKÖ_ćÉ Ł))ŁŽģņÉ&Śõ¼Ų×č(E ė5 ›ü!†Ō,)üÕģāäęŃķõ·#Õ>&мB4‰łÉ ÓÓN» Æ$2ŅåĘųjļŁ%¦č ÖéÉ赳ł}8é%óĄZģėėĻ’ "Ų’ÉĖK)3’ąHü,Ģ/Ė£DŅĀĶr¾łćøÅǵó÷żń:Ģ•×qś^6ųg'ŲćžęP#[Ą*×üØcĒ+°Ķ žī1ļ2 ¦ŗwēĮŌŚåęź ē½L5Ā0õå #ó»ķ©żŁŽéÉźÄŗ3čųż<ˆŁS6 ?4āųė Üę%Ī3X'Ž÷éīld·ŲĢ€ų£ķ-6ę é*ś=6 ՞ā@Ūļ%D“LČ%© æģŚėCß9łõ$ 5&F­'¾æĶī--’ eTF8ć&<ķ”.ōCķ˜–(ųšJķ'ĪžÓćAņē×żŌ’ūéõNóŃEPÕŁÓ%ećß !>ķL čöŻRü’$Ś^īįīc¾ Š ēG®#ęŲh%®ü&žś įÄ×ÕŪĪ£LķšٳO93 ē÷ķŗ%åV?žĄĒēźóēśķ&2@ÖłSāżŪęPĘBÕņāÕśJæå 1½%ķžŒćµ< öŁę& čŲQśżž4ą^ŽŠ÷ēõ×/éņ 3 óį4“žų )öčA²Ż’±ŗģć«ēRg5'ūčŪ›ü»ŗŁĖ #|ż”æč 0 łR2*לż°ā179Żž÷éź%łō ļ%%śÓž Ƭ+2 )ßö6ļūōī-ų 1ü(²ę$Å”ū)źé“Ŗäæž"čœ8ā ō‰ķ*īŻÄżĀ-ļå ō&æć ś-öżž)ęōäŻBķāõÓąģóäĘąś° $ķ¶ł÷č-ż1*õ,Ņūōõ žĶHŃ(éĖ÷·JŅžī-ūŽīä)Ūļ2^4ļCĒī ó÷ķ•’&ćęü ŌłĄŒŃ#ą€Öמ–į*ź ćߏ!Ęę Š +Ų$#óGÜŽųė“­āĄC;’×éŽī6BĻöģĪč’žė’÷O"šł5²;! ĒģŽ ńĒ Łź%#ķżõ®’ģ/ęķ$&įļč3QŅ$ģó/Ż$°µĢĪy+Üģ GŌ)(SģŠŃŪž öüöś&įõ0!ĻĖ   ųŲųöćśį÷ Ė.D:čöźŽžöĘųæŽŹ åF-/Æ"õ$÷!éłOēė2Fåńż ÖŠ ń4ŌĪ ģęųäŪÕ¹ )ŹśÅōśŹūū·ŅčāĖų( æŪīź³žįKīŁŚüõłćŪ= īķÓµÄåAŅ:Öš,äA§#)žūŅŠŁ 8#%×,Ņ4ł/åųŖģ4ÆīóćņŚäÜš÷ĒŠé Ł&#;Ųūršš½uŚFMčGāŁ+DR)ą3Ø"Äą8 %üčōńüé"%Żśčõ5!R ;õ¤ 9łžĮqęśóÜ×ĘÜ/8]ŠšĆūéģŽ`ž)øLĻÅõ%šÜų ü÷üZõŽ,ź÷÷.ńģóF4ēõ īęóćäńE£¶CģjżtĢ÷öóÓ, B±Š5;čōÄÓåÉšĘŲńŲĀī8ÓöīĘłėń'Č.óåłņńūķō ¶-żģå=×!öę!ø,Õ%"ö +'šÉį:ß?" Źī4:’ā/Ą{āÄ +HŲ0üņ±³Ą ęŚņ! ģÕā ć ų]!`×)öźśŌń.æö_õÕ;5źśÜńŹ4$!é2ž(ēŻ’3ę5ąŁe%*Ż(ÜOļ 'čĖĶäēš-C¹!ēēó#źł:é%ŗ (ŗŁ&ÖE#&^ö@ūā>Lj ķäÜēūź©īł&ļéļįōĪĻŽ°čŲ€JEłī}ų"°Ō)8É» Ó Żłģ üŁżõ!-ł <Ń ĆĢóŪūšń ŌņŲ Š"įāŠ«2J÷Ēń^+ń Ł.įÓÓ'/ęōų¹1ģAĆü&ąüC¹;÷8ž2ś™Ū›ėÓ÷½üĘņĪüöŻīń%¬—Žć+Į#ļ’¹öŅ .$&%³×ԁd$‡/5 ø±* 9”źOŁ.¼üŁ éŌĒT×ōCÜę-½śŽÓC^¾}žĻ ĢÜŲ2zž  ŪäśWjŗ”÷)Q$ǘ|cćņ“:ĒBģńį`doƒ1÷lÄ÷Ęż’ÄĢüŅįr$"ŲŽ/¹Śrżį˜'üĘUł:3)6µÉÆ:Ÿäēł$ŻEŠ\ą€ŪäæłäŅų¢²čś’€ĮQ '-ź™čemMąĶž ąūłæ6īūĄķēI2ŚÜ¶ģē!ö|æó(ĄčBī5’į/«Čąģ2ŠŪZåO‘Fß#Ʋ?Ł^“PL±ņ@­Śō<æ×ȐÜĘ{BĢ_Ś+O°'7ćĄÉ²€QÜ÷3oźļ¼ A„ķ ĻčzŻ7.ŚŌù Śā%ń §Ó±ó­×ž€÷ś&’ %Ō1śÉÅ5įÆH“éävĻŹžņ‚’ D3’ŚÕ«€čųĘ ķ åķįCūē厒ķüõ žĪ!#ūŚöš’ķśķ Ū$ū4Q į +,.Čżļ’ł „0& šłŅīŚ;ćö 1Jč Ų*€"#ėó<3÷ģ0:]Ź óü öÜś€óżLõ. 1ōõĮč ąŽė4ŽņŒ!ą ¼¾*¤'÷šŃ×ĢĘuOŃ'óŅŁSį„Só(éŹåŹj¹,ÓģģöÕ€ /įåBŚÆ8ÓŲ,źīž5ćßŅŌ0ų"üņ$öÕäŃŅ#éĒ )ė"ē'ałļĢž,2čōõķ+ļś"¦ ®āēŽ! Éü.ėÄ-ĻÆčńūÓé0ęų'AŲą³ß½0 !Ż=Ż@ū@׿äØ>ā!Ī)Jō  Äģéõüōć°ÖæÕš©Č"Ó@óģ ž3ŠŚššóEĻ"łóŚLū%'īLö„4ĖźPķ õŹ’ė&»ćÓµõ=ĻģŅüŁĘĒüĘ ÖūŁ-+įéŁjś ńųž\ $ķ,įH-2ł ę*óŌc6¼ž2Ī,KŃÜéļžģōö?ŗ¼£÷ ą?óŅ@īPŲī.ŁĪŁīü$GŚćéł÷ż!é§¼ĒŃē¾åžįóśśółćųė ßāŌģłśŽ$é-æńž8ŃAÅņš#0 ݂ۀLšķõ žą & ŃūÅ<Ė+ĶPūņŻČYLéĘż×&ī'ż× 9ŻįķDŅ _ääõŗ÷Ž čęźä½¢’O=ęōų×ķäÜĆł I×7ĘĪü=0żå šŻćū(’Rą0ģņū÷.ņ'żŠöóUķ/Ģņ7ė"łž<÷įēŻŲ!ģ¾żźėėń#ļ#ųōõąūų9ļūŅ]}6CŁÖ" [ń÷ ćå-śYÜÉ;\óčüūæC *ŲėŲ8(ī1Š7ڲ°łūÅ ö/ ,&üżųā%õ0÷ćĀæū' 3āŽö#öņ ć3 FŹöå¦ī׿(~Lā’įō“9ūō>? éõe éēś:ūł)čį3F50ä ŃÄ»ė“5)Ļ ńI3üé 6’§VE%Ų #÷ĶĶ%ņ ŅŻ18 N§(÷7ķėŸōńķ)ėÜż?5śö¼#ääę$Ņē#Üż¦ ·>!7"č åöčķŽ’ž-ōIžšųK=āŻūŚīäįéŽń .čé’žóņZ&ę&ėāš÷÷Żą1Ė '1ń&N6 3ā/šĢšä4±å#ć€é7ņĻ@H×+&„ż’¬į1)Fß2īĤPOHńģRņóBüśśåč ?ß³żāćD毿S HėnÄ’!’jŅĀĀx óś§ņ Ē93ę*īęķN¬Ö¦å,šü-ūÄ+ó÷ ÷+#Čņ ū‘œ³~ 80ÅĖūÅOĻļėā ™)l’ßéāŲ ŅąĻøAmmKžįiXķŗ+.(ä9¼÷.é½P ¢Ńėą'×Ī#U#Õ8żCņč=š]ģõėĒр¾ģŃ8ßĶ1ŅĆÜw7°-ĆŻ*“>üļü4uųFŽł›~īÖŅ Õ0ŲąP/€3ņą’4č#Éćį·ńŗøüķćž[$ä¹ŃķŲü +¤ż<+ų%HōŠA(Lę5 ū:ńŽFŚ!ļņÓŹ®įõēB'ĪżäĖ ‰ Ń ö1 Å 'ģ4ūżEņóęĻ㨮adž § Čˆ!’:š”ŖLž Ņ ((€oćžūš,ŃÄ jĖć?Ćj•M śęźÕ~ŗ!®®€€+€ķž üJżž’)ųųŅÕś1öó×5ž:ī ß;ŗ@ķā<ģ µėõõ?+0AÉŌ ą&č Xń£ŠÜļż9ö$Ų-Ńé0ą³äśīšQųžś.ēŽĒ·üūč!īłŽŠłÓžźž’ ķé@ąė # æņōŚÄR üńč’šżéåėŚÜļ ō!ęž-öĶ5#Ś×śśāõ8ļņćKŚå!é)6 0ž5.ķī…)įą8ī-'Ģ×’čēéģ õ4ĄóĀÅ2ćéįįŲņ)5ęÖ)7’Ś?9ō:å žōŪ÷äż+’?*ų !-ēš-Ķ ×Ė2äõę ¶ 0"DŲōÓüń8ė7įłß×ķ÷8źž,ķ#ūčõÜłęéDÄĻ#Šéž"ģÄūś!éįśęŲķó+ēżĪ#²9īėÖ Ķßą/&čęšģģ5Óą2&Ļ!ķ"ļ$ĖNŪą)2 Pėč@ŅžńĀé,é$ ’ Ūļ%ąÜńłńB’üŁ'?ģ8ä÷ŹCż’ļģĘ+ó„ņü')Ü+¼$Éńąßś&Śś÷öW?< >č÷2żīŚķĢ“ ’ŃCĮķ%Éüé 6ÜŃ,ä¾žŹśõĘSū@śĻąć 'ķM1’5Šžļćć©Ü:;Š#’<©šVé ßóąĖ ž÷I žžēĒéśļło×ōI -ķ ÷ŁźŁäÕź÷ėōāķļ'M? ”üżļļ&ūßąÉ )'ŻóÓ ™!źéžA(Ą+#ūÆĻ"é˜-&Łk¹žōöQ=÷Iļņļ( „Ü×õRļC»ēŽź’óńš³ łÜģéńęŲŠĄūņč3Ūø£ &7łß§/üÉååģķżäł-’żźå) ęļNŻóįś× õł6fD­öĶļęłėļāó į­ūž÷ü¹ėÕ ńé0¹ I;A7ęĢ"Ė"ģŁÕÜę÷ż¶0$äąóŁļéÓżĒÓ#żäķ/ĻīüžÆļZĀē-¦ńEå¢'ŽĖčÜ“ģū H¾+ĻE&Fė.S¦ ėēäнĻq!’=’żōŸŠ"Ż(ĶĻ,ńõ Ÿ $Nżõ²!#›!1ņ7ž1 )óI ;ŻśC÷ødöUė éÕ łéī ×ēģł“ļŹō0ŠĮū*ō64¦ąČž¦yś:”÷óüåøž Q.×õĖźŗ ó<²+Ö80ą*"śņčµüļÕKm%õ%Ś!ęH߯Ŗ4@Ņą*ąż1öņ#‹óģ÷",žŻē%PM*ļ«“ĻōųīŌĒ: ĶąłĢF÷åĻ×¶ėžąQõ(ö-»Æ+-[ń§żŅ˜ē±–عīŠĢ€Ü*Ō/ ßö.į!ēöēŁżB¤ XĀīę 3ķ"į ’­wśīŅųó ŅĮųž=åčĻņ$>ć@³ Ąü'ś®G å®ZźņöåXļT ż7ģė–ń&õģŌŻÕģĒŌQéß3ūėßś.?vīžņ÷ŪĪÜ üķ¼ )øŲ3Śż&čŚķ_Ų5 ńLø`*īūRÓīņ!Anūõä$ł@Ų÷ ÅłŻ¶ŪŖ°ĢĒń¹ĪõŠ.(5į?—ąėĀ £ėļ{EČ.)ż² ąüAūÓ6&ģŃMģŅ©ĖŲä ļņ Kßę“长”ē]Ģ õ½åłĖü@šŹé$÷2ēā7Ų÷%ēŹ!oųņ’ 9,Æ!Ż}ėĒĘąÉ$ŁFéē ńLģ±ł(3ńÕAÜA¼%‡ą’é×× Ķ ź ÓĻÓ±×öīķłÓž&łÜߦøųCüą6īüŃż& ž€ōčģ"‰Śā ŲG šŽ•ß)A5#ń-«żoĽéĖąŻä Ū5 äź*!Õŗ€īŃ šļ+īąŃüÆy×ÄĻśńĶę0%ņŲøT ÉõhWg ĪĶ/$'N*ųń+ī8ūō+1ó×.1ąų įüüšī‘ćņļŻ"Ö¼įś0ęńōėŅŃÜ=*²8ģ”E*Ä0ś-&]-ē‘BV9õUė}ģŖÕRDźB%Ćƒ“Ÿ5Ī#ü!©ĀœN)ėå€5źOöżšó,ņéų-’’žÕ£c‚%Ō¹   ī¼C³ 9ÕÅēō¹%ģ®@ź"īė(8C7Ó/œó )Ķ2ė\~-I‚,,6ó16„§¼ŖėŽõLˆK õęÅ~ĻFÉ׳9Ś)óĻŽPß5ĮÖOŁŌ7³¶żļ'Ņį ŹÉłĖēņŲī0ó*+)äŅÆšūąźé$ÕĒ P !9õēś öć * *ĶÖšĢ Ų§Ų¹āīčöĻåČš"Į)f-ć,! ÷Õäģäą ä8Żē6 ÷Į§AųĄ'ÉZēŻ-Żó&'ō N“ņ%¢Æ#źźóÕ°ÖäŲ ’Ōķē"¬³.žłś ėźÄ ķŽ÷#Ęż*ö ū'\č  Žę#,ģēųųččā)ńåś‘üŌ²A$1ėüĀžåōüĢżä'ßāĪŚ'ū&śĪ© ĻŚQõī<ś÷d:.ē*šĘ &µŌ&ļŠ#Šżõī ķŻŻ "×ų/Łš:!ś= źė Īśł’)ļłŻ"Żė(ō]Ź%»ē’ŻްÓĀģī õīžŌø!)~¾F ł'JAż¹ģO>ō/īż0ųč’ņ2Bć!÷“įĢģ÷3( ö’į%šķŌ¹¾Ū/’.æ7Ōų üÉFęÖ2īÖŽ ĄĶņč ōé žżŽģ ę=ØĘ!ö,š¹?Ķł ę(ÜźśįźŽĻ%ī’@āŻļ÷ödŃŹž -ų"×+ü Ćö’ėż1üįŌńä!ū+ %-éē<żš2ņ÷ ōŪ:µDŽBž0/#żżŲūļÅģŪ^)ŽŚÅ÷Żéł&qņžōßĪ09Ģ.6 õ ÅČē ū QĘūM%żųėž ÅÓ .!ö'ńŽĘ:įŻūž$ Õ0ččßÉ9Üå’ś,ķ)óü<ƽųärīŃĒ<ŠĢęĘģé÷ČŅ ½X÷ßčŽ WńÜŅ:ŽöĄ&ó ²Ę7 :*)IčĀ[Ė:ńWNšKįū ą“½ń%ýĄóńdų7ćś$Õņōį(Zśä¶/ ī ½ū3 ē"ž÷éÕQ¶V.ńĖķņČś”@1ūč3š£öīÖŌŽ÷Šē ĖģĖņčąüśŽDÕ~ķÖ—Žõ½Ķ6TäņG9cÖÅÕģóöŠķź ]Å£0öŖäā¹žæQ€śŚÕÄĶš1ĻļŲżG(2­½š&Ś·5,Õėćē ŅōĖz$÷S6Ęį€1J-BŃö+sē«ÜżÆ9}’ 'µ½*Ąć3 DęŖ ƒ3Ā"Ā üƒžÖ5źEæą(Ź-o61ģ9 ƒż5÷ō“ųŲĆDļ ń¼wü–ś r,ģÅåÉ-°Ś’¼äć Z'ĻõP(ģź .ōķ›ķŌĻś“!ń2ōżœFģß3īŪ "¬ŚNˤŠóäüą '+ģČ?²*& š8ŗēķ) ž ē!Aé ł ݳéįżŻžB'åŌ2 6醳óęź¤Čøšż ŠģTĖ8’ā3’ "ęÓĶüą.Š*ōĶäńäŲž;Ó "ÓHĆžŻä ÓŠš›!Ē"ĘŚņžI QįŃĪżżčCā$%oŁņuݳ)äłØć)ųźš”żß!  ÷1ŗŖ į ā ū0÷.śŲ6÷ `%9įĖśŻĶųKĒūž-,Rģ+üįŃ"ī„Ųü±ÄÜ %æłł4%1€c(Ū.’śę½ŌņJĖōāó89€ø&%eĹØA1…#€čžĄäń€Ć¶~¢[ņ&”żYĪŽD­/kž:óƤK!)Õūč ‚€t?Ž$Ź÷P³ōK€Šćżk9å üōņ÷ źå!²4īŽĪ#Óö ü0ļĻ„/ĖŽśž —! óīŲūWÖĖS·€!ŽóšÖ(š’ČŻķŽ ? »0÷¹¼ūāóżļ&>;8 ½±ō¶Éü· ©äŌ:śÉī4ü.Ń3#ą!%üĢžÉ õņ;+$å×Į-žĀžõ"ź’ęāõGŠÉݦ & čų"ū!üąėņ"ŪüčüóGßćÉ0ėŗ2 ņ—!Æ\ń- Ēķ)żĢŽ’Ź¾Ņ $3ķ½³ļ÷ ŲņöįĮØŲ3õ*łœ+щķ ī7šN=õGŻ8ŅØüÕÖķįļ>ö- õNĖś³į¶#ųõįĒä:;ŃŻųÉęeŹĮQŽģē2µńŗ±1(ģ ( ?öńI;ķšo÷“ō:ęųÜńļ"©ßŲ·Ļń¬ä’įĄīń÷’Žśö5ķ/ Ų0½50>%ēž"FÖ³ó¾(Ē$2ž$åõ0č÷Ōó0ŽM4£ŗmTČļī1!$ !¼ģŚK ņėųÜ'4Ŗą-ö#å3ŌŠ6Ī9 ļĆ÷ ;>Ō+ž% Ńļ%OźJ+žHē"µč÷ ČāŹ ę˜ū*’. ’ŁHAęņ ž)#ńŁĄūś2ģ®õļūļ,Ļ74$+L,Āā %Ē2WūPŠø:Įų’ōę %ē̊1ė“ūż?šŽč īļļĶĆL(’?90,Įō=ēžčo "-?öš0: Ž> ĖĖļ<)š¼½÷*Ļ"ŅėččŲŅ©÷÷鳓vÅ=ÖšŽ$ōQåCBĄ@ŃŻ'G3#Ļž ÖźŹ;Ą$Ų"ł+,€HÓåįņxŁĀł87Č×’ę* · įBģĪ13ź«ų&šWÜ%(ņ:äś˜ščļĻų&żü @$ āŽ.LJ÷ńC/įč² Š5*'’÷¶.ߥü/ūįü×äżfźźķšō1 8ß+O×ęMį8Ö Ģõ äĀöÖ’%óüś$į.XÜķ5ŅņĶ4±õų¤Ņ å(ĘĢĆŅĶ)(łćšÉÕHŽł--:ķ4ā “!ļšÓĘéō-Ó÷é%ėĄģMßaõ¬Īž įüöŽĻ;ź/:üķżé ŃžVēČļĀę·Éõē,÷čĖś! ś÷×ų9źą’ļģ<ńčīė(ķŠöĻÜščŠT?ź õ37Pų²:ģĢ źc&ż/÷éĶćŹĻ¢ż åĪ āē ŃćÖŁ(łņÖ¾½/óEśėž:ņ?łŲ׿ßā±ö&÷¼óоüĘ»¶ŻöŃå&÷įščżÖę$•ų³ó Ķ-šĒŻńmõżVĘ&$ōL ī6å)ī'÷ņ…šż+Ė"śåŚŠņõ ä( š Ń÷B¶ņSDI" !ŹĮ8čŗY$É6źÕa<‘éĆ!ķÄŠŽ)$jöŌ!> "āšŚōēÉD$åõļ 1’ō¢#Ų5Ł×,ŁČ¶÷@ņ«hĮ1ęäÉ»ļüŅb/Ź ¼ÄŻ·ś "¬ßÜōłÆ ,&õ)Ł Hī2Ābśē Ś×óWÕ‚ŒÅėø+ä>RęĶšö÷+óė5ņ˜+Ł”ķH' 78Ö¼Æö|÷7ŻSü<ą¢%ōŸćĻŹ$ŻŌ#’CßĀg-*@²> !.»ēJ5M.-īī§8öĢCNF*G“ß° (J3ś(Ņü­9 0Õ o׌ üÄ1Bķ2D÷ »ÕPąŽ9ę( Å×ǼRł. öĻū(“öæįėļŲF łUŌź3׹ "Ų"ųūō¼:ōĆŠ¼Āó!ŚĪ' ø ņTČŪņŲ½ ÷¶ŗCį2 Kēb’÷ä€)ėBīDćŌĻ=@ŅGÜįÕÅIÜõāA ½'Ā’¾½ųąę kē͹čŅė÷ęüėžüŃdŁĻéŁGņśē~nH—$õś/ī»2ĄIń ĢÖ 8ĀėžĪ€:LD%* ()'"ł4ž÷F?!ņįłź22+VEŲģŪŽłŠüž±7ĒŲ ńĢž,æŠiž)åAÜ eß[Ż,6łŚÜńÜ8E1öÖņŠ^bŪ‚¾ŗść1ĪWĄŚ"ćüņIŚ,éįŚKŚćåźŃU#łĪ«Łś­ÖŪĖĮĘÅ"÷Ö!ŻĖ¬CQūąĻ) ’ ÓO)ī•Ī(łņ×ļÜ Č¬(1]čūł:8ø° ĶcąGGĆįtQa×-EWĪ6ŽšSbµŃ'*ūAßP倀§©»(ģjį -ėŃeÖ-÷';d śū)īø€ŪĪčÜźgé 'ž#ŸÅ’ /ž«ūł&Ä,±ė€9ĢĆŪN¶&¹@ü,č² ¹»U+Õ҉0Ņ)īńĀ7į“Å/·ØųŽ+üÖ÷)<Ąń+ÖöŚ-$Ķ·RłŪż’æö޹ė#ģÕĻį ō ×öćĀ/#ūŠŃ’é,€+ŗģ’ś’ ~īųĒźłŠ+0š#¶ō5Bąš ÷BŅžĶ $!”ō%Į ń Ļ'ģߤŁß’į’Ÿ¢ ,’³ńČ §%ģīĢó%ä§Öń×+Ņķśš‚ć^(–© -»»™°!xXҊåŻŌ,ŌęYžŻ ōÕįI ³ķŚ!Žäą’EdĻĒĘ­vŠĪłśl׿ł° īņ ÓÜ’¶éDāžßķŻ8>ņÓ!Å'[<īšä Z,<ś?·S2 /ł×1„S °€ÄQMHƐō5IŪ¦ņ3,/ß ćž!-€*'邞Lį/Wų™½ß’ń~ģC€02€ĄŅģnļ’÷Ä%®šŁĪŪį ļ.ńüģŹė óPąšüģ „Ń0éōŃ ų!ł#'®ń7 >Ō?ō2!ī//& čėÖė’ 7żĖæT!žņ÷P'8öō&+ )żüQ ęÉųśČŪ/ę“ Ń&Ž'ßb»é%#J öī .5ĻĄ4 ”ūęąūā÷!ņ"ć=āłēōčč ļ'ķģŁĻWł ĘįŽßēäč! DāōŃšļ×ā+ņ× ×ē­ļ0‡"1Ī=ąH1źį$W Žż;žżųŖĖäę³é, +å,š$š:’åŻŹąöšŚ’- „āč÷8Ģśļó½ćØ÷čĄ@Ōųķ0²ē!ų¶Å¹Óų)°Ķ ÕĖ8č ÜJķ·ėŽž˜ÆżĀōč±ō!ščŗDT“äß$õē%Żį²+)ŽEĆž5Ół)&®ń(1é+˜¢'%Ą6Ī%ė7½ĻšŻČŲÜŻ&#ö¶ÜÕżć¶Jā äų+£2ŪL=ā19ĒX1(ןČŪ.$ČJŪ‰ń ŲÅē.AžģMŃšōąŚńĪ·&kū’ėIė9ė6źżå6ŌčļŽš!Ļ %\Øóõ" Æ~%3÷ķōéįdĪü8Čėģ*Ęl+ę0! gńa–*DĢŻ%ĻČŁ2ętą,ÖĢŪņŠŠŪąų ³*ŌęÉkśŸ0čÜ'&)żń>ū*@üżėłąņŅõ@ž8÷žŲā7öśō+ŅĶęš5įčßāõŠ«T-źļöŻ& Ä ŠŪ(¢ŌĖ+ Ö%É 'Į.ēčÓÜ,Ńų*ōż:Tł?ų"Ź÷ō%ļėźāłDāä(ģ‘āńżR²!™a·’ūīY#",Eōö÷śėņ÷īņ ś łśõ÷!łžė<$čIł JŚ ’ś+ł- ~Ē9×ņ}Rš-ģŠ €€øń·ńźÜłdßĆ "|æ×ķ¾ž€åØšķøõ3tž4ü*č$óBöüĖ€æ ²&˜Ģė€bö),ęČėĢ*Ż2„ł­b,Ÿ@ąĖņ,’Ś’üVŚü²ü~€¬äĒ 5ķļ÷-"čŽ#ūõóÓ.XD‡ ²9+Nö«„!üϾ÷÷@Åšūä߀Žß Œä,÷ćϐūļŅŪ*žG.ó:õįõż ÷ ĒńšŽŚHĪßįŻŻ'ōG#:Ō="ē Śžōõ>į¼ÖźŸ#šäŹī Ķ ąĆź7óķåŠź-ŗżõĆ6ńQåĻ%ż¦ÅŌš %ō÷źęÕ ¬%ńNö!öžŲ/œüćāĻčž ķ"ńŃ ©Ż śHžÓ33Ś@ źåēō4žĶé%Ļņ0;Dīģāó÷™8*B“-&ßżōå’ÖėčōźŠėWé’4ņ ;) ³ėó¶%”ņŲżĪ)Ļ&_6ł/ŪćśūĖ 2óĄ[ ½ū# įķIśŚåĪMÜŠõßżņģĪ!Åź)B&-Óō¼/YķYźł‡ęžÆK)öæõöO×#öųÕ= Ęūó;ē'0HóŌŁńØ#ūķļēŲ<ĀÓŻ+ūõö’ų©Žéź ’ūŃļ ŚŁ&ńĮģéÜGü *ē Ŗķķ›ųąė 77%ń,ŪųīźŲQßüļõįŌļ×Ū×0ż  4"H)Š36ü9žčŽūą !åĒīŁ.ą#+nLx1/üÜīēKō9Ū0ļ+ąÓĆ’+żī’"ŚņŃ4š“GźÜłĘ(82VĀģē,#źčDźé4ÓÕėó'10(8Ž >Ł/ךŅ)Ä ½D ÜÄßõČ` ėóķż`č0Cńķ ×RöEļ' ųź8”/ęŌxļ*Ć@ūÜ*¢_ņą!33Į4€ķ 6.āėß*@:ü˜Šą×Õ/ ā×Ķü..“ŗ©ēÜ4ć#Ü&BūęėŽĄ±(Ńżēś“¾ż ī2šĒĀ'0” õų -+ Ųż† ę+ēß+!žö ×Iüļ™’$š%ī,“ .žĢóęĻķ ćŃńų /6üīē/¤ż)Å’ļ"G  ¢ķĖ“ę"ųųß½*Ļääüōżäā»õńų77ŲżrD#9śū×ā0üDä-śŚš*8÷:÷żųķ—+ōHŗÉå=76ś6ģłĶÓ ų$’’ ż\ĒÓŻ!õ°ū#/ ŌÓ÷;:ó!īō#ß’'ņĮ-±ė >ōŃõćū!Śį(ļüį4źöś Óū’× ēĀ-žōööõ7ź4 Üä śģŃąńž ų(ūč÷ē Š *Ś÷ŻG ’$ś ś<Ļ÷& ł+ĄĶ%@ -ņä$žā9ż 䣿žõńߥ#$ęļ##ēÅŻŠż4"=ŌŹģõĀLčžü ā%ų÷åś"ź/ōŅüśś’ź(ńų ČōķŻų=×Ķ õÓ;ųŗé䎜üP-’ż>)üüķ’čā CŚčĒ÷ģé’ė%“Ń ×ųį#īä8Į&; Īõ-R$×ĆHÖ-rś,Šį6 Ņ%ŽŲńęø5( ī9'žńĘ99Ś×ęč2ļö>7įąņ’įćV'-ųēÓ’ü0ÜūŅØņÜ!ąĮė5)ģ¹éÜ ž'ĻAŪųö.'é<ų×’ź%¢Ü×šļł•ōėXīOöZłĢ" āå5ė’ųé¦ć¤Ńā"åDżī5ä .ź’#ķ:ńżėųń4Ø7Ŗ×48Æå! Ż÷ą )žŻĻóõÆšCģķ Ä-ĘüūŻźåä—ōÉÜ'ĘA< õŹ õL(üŽź.ķR)U4ś3Ż$ŗ—MÓģūį1Ć?>÷’äųBé$ś÷ē*¦Qļīż¾éŅķ čśß‡ŌśņƧ÷)J# ó ū,óöó Ņé8Ś,ī&(’×&)9 ļ öÕ ś÷ š÷óķØ?ēå8Ė ńóÓż½ę ;ų÷ųŲ7ČŃ ’ååäĘ ņÅžŁŁģ(PóņĢäīļ-üõÕ ÓŃ !ń$ ĘńüėäŅ#ņąć&掞é ć ’ół ÜŽ %ŠŽä:ę  Īõšążūöõ AךŲ “öėä ī賎öźÜ"GĒ<Łū,ļž'ńčå õĻóś’ø<żŚęż"ŌĖę×H4 ’żóńČćī !Yśśŗéģž’Ūīā÷żę¬īģłż 2łßŌ Ó!ėEŽ+ž÷ńŁžŽč"’ õüAč×"ė:ūĮ1X’źęń ÷ą<łģūė .ń$$ėĖ#ń0Ļ ī ' ęC ė2źüĒōFņ&é÷üž0 ŚÉü ÷Žõ’# āīü’õ ėó =  ė*żō  īVßōä#Čąģ ė āõ((īąŻ.ž’ )5õū ļ'Źõ÷ēž 0żōņ čēņ ō( īć ÷łēüŹ#é!ģņ(÷öźčłīõļŲėųīŚżņßļ4ų ö  žēŽį ņįČęäź(é “ŌÕPÉ-ńń ā’ ō×Åų %ĪŹ- Ż`ź-Õ©Ūń½$9QK  Ś'Ūßö%ęśIŲšóä D ×bÅīóĖ8-?HĢó]ś÷2Ūż*-Š‘%įĄ ]Fźžüw&'Ø’ ĢćęĀżē·7ńü ęš+ŁóŅżė- š!ÕŅžē0ų» ß÷ń"绺ĒŪ Ź ųY0ĶC ’ļ,Sņą Ęą!"ūčžźéŲüóūń/W4üėā%(ś Ū!,ńćōåŚÕūö(õś4é"OšÜ’,üėļ šŌń!24>ƼļB<åÉEāįöÓÜäēĮńY$ėD0 暣ś"ņö×ĒļćźńöÜóõü ŲūčóśŽćµźņ ¤5š³öā׳īģéü&šÜąņ×ńŌ ó$é żłš;õä źń ū’ė(*Ž/ ē÷ÖŅÜłļųķ" ’į*óź*ļż* ÜīąōūŚ ūśŻ÷’ā'å -äżåž’ėōēż1å!¶&źšōė ū)õā 0( (ņšš-åņż÷=ū č÷śZåöŃö# Gś%ēü«"īēü üńķ  ėīšŲćßł+ ’ł) ņ$’öKģ ÷ŠģžŁ’ł÷ś żŚŻ,ōÕķįņ"¾ķ‚Jōļ ź÷š$īūĄ,µĶó Bź=łŲųÜ#Č ė ŁŃŽ÷ēžõ *ńī!6ĖÜŹł×³īŅ"šŃŪ'?"ųŪüįźś1Ķ!łšåü0 ģł¬šń źźļóūį8 ’ ėņö ÷üģ1 żśģł9żōå(’ +ąüļŁä’)Ōžś#.÷4ųÜūł*åöń0 ū  ųłż>ģį īųźōū üŪųņ ļõÓ å ųßšųä' Ė Ü÷÷čź4' ׹óõś üųżüųŌŹšų2÷ +-ü õ*Õ żī)ļ.ų#īäē4Žū’÷9ųŽōšü%÷öééļń īżå õöÓ šū  ōķī/ųćų*.šöSżšõųõ&ūńõ ū' åĶŅ Ż%ķā’’ŲŻüüń÷ źīņž &’żś’#ß*äļõūžėüŽüóö üįŲ(÷ļķńżā÷ąĆöž āō*įļ41÷4Ešęīķ ųū ē 1ņ÷ūÓ÷ń ėżžīł é ņ ū ]éśöõńōŲūż õķéåé ’žķ  ā÷üīšū ūåų žķāņųś’Łķż’šŚ’ŃķųėÖäś &śū ń>äåēžźŁń Ęš'ÕōŚŽō ä÷łģõöų ēķ×迌 ōļõõż šųüėģńļć÷ł ęūŠų čžōęö%2ł% žž ć\aōJļ€āįāüp¬-€A 0ņćóē-&,žż,4źäĢņIWށēź÷¹ł’ā'Ó¼ņć(ė6$÷•u6ļ›ćœ@ŻńäGæü7łkŌŖķņ““&!éŠī õŻ)l瀶ĢėēĀ,?żģ9żųüåĢ ģņך%ėóĶ1;&ź >Łžŗ9Ąéłķ)ņėü÷ ,0Ś )×4ņóģ ź’ äōM$=¬Źł ÷ķŹčž( čć3äļōś’ žńŻöæ "“’īū +’šźņ-äÜōķ7õøē.ļļ Ū čąĖśõ üģ æ0öęł+Ėóļ+Ģ("'śŪźąŃēĪų÷ü /1ż5žEų%ē Ų Ū õųģóųšųł ÷ģåż×ÜęóÖ=ņ3ņäŌåāŠ" ’ . ’õ’ļ’ßąčč9& ōß!ķ’ēś?ų ų ü>ćō ) ģż Ö÷üß ūōō#į!łčżäŽłīč %ē*äśżŅüķōüśüīśęü÷6śłł É’Ūųš ö,ń÷åå''Ōś’%žņóēāŚü+Źó 2éēćįļśŌŻóšéņųŽūļŪ Ņ źĮęŹķ Ń4õ)=ŲĻ+9ü%åŅĆŠōé ó šś "õ2õ÷'.,ź’ż żż% (ół  Õ ēå łłüµ ÷õēžūū ķĮõ ņłŅų &מÕīūłŃ š Żčé Ėż 7ģ żåäį% .żóćķūī’źéļĪšż ;ŻüŌōń×óżĢ*Åß ×Ęłųśćž’ōžā õčŪėūįFąāīęóż ķļūą #åÜń 5+āŅŲūņ'ūżźŹģ8ńūś’Łč1Üķ0ė’ė"ōśķźģ“ ęįäąä ń? #)3Ä Ąż*śč ņ ųõ õ"ėō,4čūšŹ÷Ūįõļõ&ŽźżŅųüł×ööčāīź ū÷’óB!ó,āļōę’ōļ6ų;ö!āüšõ ŪńšL āÕ÷*fäųś7õżõž±.ķž Ļ Īļ÷ŅźąŲ DöķÕäĶŪ$š÷čĻ&1䏹ģ0š[ļåŻ ķÄ%ÓäøYų*č-ś÷ķAĘń÷*ę<žäąų8 ļ >ųž0ūŁę"ÜNź ēéś1'ąķ@ōä)öšŅ čõž ÷7é+ ųč*śöhŁ(Ś.é$ōōģįÉūēłü÷÷żõ łōõņóī 4ĶõßŲį źē’õń!īė ųŁŻļżžćžćķüŽāĒé×ōŽģłēż$ģ÷čßóüųłķżóķļõłĪ’Ūņ’÷ųźą Ō<Śå ÷÷N ō ūź*åģ»# åÕ $, % žł÷öśž !Żųųł öÅ÷įĪŁĻąńŲšžōÉOõøŽģī&ŲųķĘģńéęģå ŻÜĘ4å"%c ķõóėž7 ģŻ'éß!*ųšł%éžå+ å ŚäłÕŠźš ūß% įŃūÕõķüš0ł6\ņīķų(īūńģ0ŁĪ¼GĖ÷ õ  łżü’) żóßūéLų!õ#?ūą$÷ ķ.Ņ#ūŻ ć’ŻńäčüÖ üž ÓŪī-Üćéłž"žõ%ÜōĀź’šųŁļōŅŌ) ÷÷ 3åčŪų'āŃŚ ė -üźū÷ć üóų  ģżÕ»ķóģčÜś 1żßžņń÷ł š éčG÷ čś÷ö š+öīķžéń õ źłžöźōžöūž! -÷ųéńģ é÷ źŚõŻļ1;öéż4čAš é óźöół ųń"ńčūżÉé÷ īŃ !öžšīō(ģāļ 'ł+ńčūīŃõŁä śż5%Ńš ł$eōøśĻå÷ņŪłļŪ /ŁēŪę ķõ÷ėŅóŅ÷Ł*ó ü!ōž  &ū óüłōōöł éõįāžśŻõ Žć !ņūÖäńģś ššųś ŻšųAęĶó?ņļī ććäķ:ėéöķ!Ł0Óķó ż'żņŲłśĶš"žšżó;÷ų*óŌŽīņŪōŲō$ß"’ųņėöü’Žżć ß5 õü'=ģ#ź0’łńāųüķKüšć,5ņ1öŠīŌ ßéžĖ ęśł#Ś ;łńōŌ 7ąńŃöś+ķķģłę óżüźōÕŪļ3öļņBŽtüųžČ ężüąčś Ż=čł ęņžź Żšļķ5ś ćÖā üõŻö#åćō%@čäß’ žÉž÷ō%(īšēŚ/Ł×łü÷ų .ņ žņ!& é(õ č ĀńūķŲöżūĢē!öų÷żļ żīų2Ęš0Ūö$ŚĢė1ż1CõĒ' ó 0’’%åü2 ēóüŁčŽ ūņŽčųźą;čįŽüŁĆķ ŗ ōįŅéóółóśó7 ēžōŁńßÕę÷ń’ óóü’ õß:žēĶÅźĖÕ ś"ž÷śéāEć%ķ óżśķ čžIb ēćņŹžßŅķż ó%öN ęÜ-Åśł25 "ųąåäöż7ééV33ęōXżž+ŲĀųŪ ģĶõ7×!÷ÓžŃ śķģęćģųų šć  ÷śģķóūńę#ź īõŻõßėūģūęüńüķš’šŪŽēēü ęō  ś$õōŅ' ä÷čćū)š)ēē÷ū õ śżóä5źįļōń łųöž ńõ ļģķüģēņūŹ8 üōćķžŪžü Ī÷ ūł ź ū/ Źüõüčź)Ģāō ž ķļ’"ķū  Ųß3ž ó'’įūą÷GÜųöų žź’ޱ!(ņōéś#÷żęķć ,ś! ķÜßģ÷"óÓ’ļ$&ążī÷ßÜą± õčńŪ ®#*ųīėį"šųŲ(łŲā ų Ż)Cüū’ ĆģęóŽčüżéÕ ķ č#ō"$üČß5ķņ0’ēųčį ß3 @õģ$6õĄöĪń õŌ š ōŠčŠž Ķķąś ģ śńåš #ō3éņżō÷ėüņךšõū /š’ēöōūņß >ł’- 'ī üŻå +øÉ+ ē’鎒õõ&%ļß9ąś   - żüåķåä’šūżöü 8ö éūżŪÖ źüšžĻģõŽą4ųÕę ÷ęļż’ Ūšć9ę&ē (ļ(÷ņü!.?ųś÷2 ćģŽ čŁ7ÜćŗķšĻ ’'"ßļ7)Ė 6ų/ņń1 ń Ėō)0ŽüńćĘčéŁ4" ŗ Õ.ćĪ@õŪś¼žėß- ūōŲó’óėé ļū ś0Iįąļ ÓI#ōąÓēčęų Äö ćōļįö9 ļ.’ī Ż Ļś¶ŹķŠķęÉųżü ńżńņĢüśäÅöšłß+%'ŁłĪżų.ūžó čõūńļ"żļä %ē /źńń į¾łń īü šś Mćś Ė7Ć$:+ļ/ćó ėåõöŗÕńņĢĘōōėę š ężąŽÕčģśś)> žķ$Žū!׳ ’źķŗJē%ńėā)ć 0ī%6ģżĻł/ė( ó!ž>×ÉÕśłķö’ļŪŁ#!śó8ĻÜŽżįäó ū ėŪłīķõ"ąēõß-ńś ĢąĢõ+ųŲ’ęż=ėćõÉ Ļæżąż Å4ÖäźžŻ1š×+ ×ņŃŲ ūÖųź&īéÜŽķńż·ąš÷;ųü2迣 łČłł;׳G äüžö ńüß óżņķĀßģ!’źłü B×ņ"ėõõéųń×ßņżņī šüčóčłīōūżł÷ė& Ž(ūūR żńźł ūųü1żēłų ńķ ņō õ%įü ķčćųü ķö+" ō=÷&)ēńźäżżŪė ļ0 ššöūüēüęųõ- ņ’äśŪūŁż"Ü "łśųīŁ÷š ėņųųŪčŪūąćĻ#ā ł!żŚõŽüēõņ’Ų žG)šęÓćŅ ź ļżšßķń0%äÜūšģ ’äõ'éśķļöį ņLąņöõķ Ē äåłķīėź(÷ß ėś ķ’īóŁō ųś(š (Ļ,ļąż,Öńöö.ó ü&ßč4Ōć(Vö"šé õī’ Žļż  Ė!ūEįÜķō Üż š !éą =ō#ŌóßčņÖśąģń%õńD!žžō£$ż¢š¾/Ųó!öń źäłśŻõ!ķčŌcļėę é÷ׯį ķõõį Ģö×üśżéźĀų ęž Ž åö+Ū’)ęēüćš üõŻöŚīŲ%ńųüéƒ÷ ėō& 0ł!ų%āō'ūåż1 Æ(ÜśīC<ŅśųåJ0# Ļ “? ģčżśż\5&īÜ?č$"Ź š ÷ Ūü7ō;*ū č0$#®5ō4YŁÖā 'Žńłäń3ćėŚŁÕŹžŽ ģĘĖÄŠę įųįųŲś ļŽę ņŻ’×ņīĒż+įéßņļżžš( īĖ„8ļ*Nšŗåńņ/įß ś)åé÷łšĢ’ŚęŻŽķńł÷#ó ķŁ5ßüōłõŻåņóöéŲõŪō³ßćē<ē ēŽ ü÷&ß Óó ńWķżöśźåę öśžō51źŁé ńO ćüšļõņ(0ĪŽćń ,żłū% Ųż0ü*ļ åųģ żõńĻłõå šÓ(Ļųõź:ńZęšéäĻä żū įļé3ąūļ÷öūąōöšżłćū čśÖ Ööčņ"Éėłų&HēūćÕźņŽ ķŪ.č ņę č  žś9÷ŠļśøźüļšäčõĻ4,#īņč į!ńģńņ-Ķ’  䎚śņłŚćēč2ļ üųäį“ŻšŻ÷ß±õ×Ī ÷"ŪŌ ōńCļōńö"śśŽŌ  öėųĪ÷ōö;ķ’ßė’ ļ ÷(śčūżüžūū"2ćšźž#Śöö ķ  ŪīŽ’żš H &öūųõžį9ū, öääšū,ēģņ(ņ Ųåčüååėśįęé«ä7 śž Ō÷ųÕż1į × ųāžųńņęöżų×ēŠų *ī  óėō 3 ū<ö%é Ņā$ōķAą Üžčł ¶?ü CüÓŻęŚ/śö -#ž,éüŪäł(Jµł ļśņ7ŠÕĪ0ńżöęų īļųāĢŌóXķõ“Ū Õ÷÷žóŌ¾čùŲÜ4³'óÖ¶©÷ŽÉ >÷#üŲI łÓ3ķ-Ā') śķ’üģ<#" M0ł ŅėōņŅ-&0ņõō EēŽŁ Čžśļ)Ōō+=ö ņ'é ’ū’%õōųķłÖńäģå ģĖā IüŠė ś÷)Öæ &/ ōöż“žķ#õ’ćßżŌóģ #8ż’6żėõ2ÖåņķėóĻāéęÓ#üėÖĪżRāž/ÖšóĻźś ūų ęąŲņ+Žčķ’ šõęł, éųõūņ ōņ÷ śėžōžÜżźģ/ )5%Tč :·’B#ų÷:ZĘõÉķŃ’õ<Ę÷īēé%š»Źöė! #("Ļžóįż ĢśųźžāżÕJŚķČ’×āęźš÷-ķńKõēüÜ&@ Ō÷ė8Āį½ń’ÉŠż' ļż Ż ¼*śńēłŠęķēų  żč 2üä)%ō5ųę &ś ņēķł ś&ķ÷żč« ķ6 ųīĻś (Ö6#)łÕōīåĖ ņłūūī0(#õĀż ķķóśų(Ō śŪś /Žńņ Ćõ' +ś/Ż $ńļžĖŹŚŌ#ķüėņņų åõęü /żżūéõžüšņĮū Į č\ßüūōšÖļ-ęDŌŠ 5@ åõŽļ Ųō $%žÕõ$)õ'ūņóŻ+žō'žś ĒśųHĮŹÜ$93ż*ēī śŁ,š7"8ś źņöäÓ÷"éęłó#ē÷äāčõģøąŻ÷ółŃī&!  ;;!įŃ’ńÜÓSūąÜčłēŽųŪžŚźöÜÓįģąłļ÷%ż’5ü#ļī Ÿ Żõ& ųÜ­Żó'õŽśžžć÷ łėŖļłōŻõ1’ĀÖ!!ųī(Ńśč> ųįķžżė+9Lųįś#ąģäŻģūŻ,žž/ ė(:ų ßāVļü6ŚšõłčśżĢīļö.,#õÖłš­#ėõ’ęŽÖ ųć³ćŲģ.ųš>ŽŪžōŗšłĀŃĄšą ść øĖłõDłå±äģó %#ųņ2ī%żļ Šąšö÷źń!Ćżø3ó -é9'żłēõīåŻ×K# ŃęÜEéöąŠöĻ T#’4ü8ķł ļģ ģŽē+ö *Śē÷šÓłżéņßų’įõ Łģ!łē½ żķöŅāė'ķĶŚé:óāžšńĀā2 棒6ųćšś÷éą)ąųܾEęļęšž’ŻÓ’ęųóē$łłīīåŲ&õJž ž$Č Ž*é#' ’ēŹūüåž 暊ļ’ųŲ:ö#šīł' ÷õēü“Õöß ćšé ņ ü ¼ź"śź åļóģ ņÉīżč÷ ł ×+ų×Ō?óżöę> 5é>ö÷ 1 ½ ōžīé/žł7ć üļśŪŃ’žöķūūēōųłš0Łüķī4żé ĢžāåčĻšä !0Ķł ģū! ū ąõ ķ Åõ÷éū$ķ/Y’Ҿże$ȼäļ_M€{HmŒŚ Ų|nĪWྋéõ¼Ų „ –4ffrī×ĆśŽ ©DsĶ€€Žē'wč×ģ`īĶ€ė8x0ān[„ qÜĻß&€n ūga‚Óą§-$]šīo#ļˆźłĀq=+ ,=: Ė%u2&|1k;€Ūė-FZ˜æŠį]·:ē5ö_‘)ŹćŠi¶ūÓ¦€1ćą'š /Ų!Łž ¤$ž ųę4 Ńč0×āń÷ł å ėŽ öÓćńéśRō’Ó ųöK#! Óõė ēęžž»¢M!śļĀóĖ×ūźąłŌżń Ü-X/Ćńļģī’(÷óeŲ%ņčü’ćéā÷Ł’īóōąųų=/éÕž’ DēüįĪņ蹌Ž< łĶ'ūņ Åß÷ńŲ$ čķüėęģ÷ĖķŲõļÜŽ ćō4;ą÷ł’ĮÕē*.'$ ģūõ ÖŚĖź +ģ3ņöéćńŽĶŲųū.ń š (ČŻą  żśź )üżöfūź×ż» $Ņ)ģł *čé-Ś źńśū!īÜė$åČ’ö÷* ś3ęā'šų<įĪö&įĻīŚļ9ü’ķźõÜśü5Ćšü¶ż ļķłŹž Ė3ą"Ųó&õéīł÷śMżĪ(Dų03Ąśß×ČģńōēģņćČęĢūė żśŃ>ŲöįĆšīŽæĶļńü’ ČÓ“µŪ ūŅŻ Ś&ŪŃļ ńūåųĶōüŽś’ōņöņŽż-õīßūęŌ’0*"Žńó-åBūBų-ėėĆüāżūéģūõ*ōŽ0 łó’žņ÷õ čż īŚū(ü4ółŅūļÉģ4*ŲÜēžīß4ņŪžīŁŃŚ2ļ ćßžłē! łśųŹüÓĪ ņ ! ś+ąņ’g$öėį ščüżžžßāŠęę,䣥ÖŪšģī€ ł÷ū3äū'ßŌ"ķõ9’åūå’ūņżõńĶĮŪōć÷?ō’śßų¼łłų#ü&żéķż ģįń ęčżĒėīķöüķóĢ%' ×īÄ6 ę÷ #÷Ō’šė÷äŪ.’Ųųśęę ų2!Üļ #ęē #ņóēöęüęžłńó µū Ś+é %ļżźūĻ ōÉõķ#įķóėöō×ļŚżäłĮåĘ$ńžšŌéų+ńöšä5äFŲAõėŪłž­HAśŠÓń īóķf#*÷õѾųöęī %äģ ž% ’ęčŃü?( ūķŠüõ/ĘžŽoį żź# Ł! äįņ ÷ž4 ģ!8+Gčō½ü-!!Ū“m3ņņęśś źŪūõ ūų $Ćī+Bń ļŚĒü÷( ö¹ī+¢’ķü#’F ó)źč鯓 £  ŪōźÕēč Ä  ū ’ćżāÜėąąöIž!õ &ń’ Ėż÷ž1żąįęōüņIśōå7 é ėĒ%īś L ś Ü!ź*,ä’īķ¾ūō’!!4ų)óC’ļü łŁŽśń āėģõōę 2č į ą šĀŲ0$śŠŽ0ó -ķāóž"ščßąŽöģēē# Ģööü/õńė#ł×ģ+żįžłšõšüćņ äžõÖ "Ń !ī(’ü(łåÉŠę"ēōīĆé# śė,0 ūņŪöמżėĢ+ģéųŻŲó’įų(>ńį÷׌%ń’ėąŅł(Ł-ŻĶÜ÷Ųõ  ł-0ėüžōžéžÕŲš"õž õņ &-Ēķö śē ÷ߌśDņįßÜāēź#Õ ūšó2KČūļ6.Š(– 5%ö+¾śńŽŻ6  *ģŁõĻč$üÕą& ńļ±ć(B’/ćóśćāżļōŁśŪ ļķ% ŌīõņųÖść¼ęóīśÕ,ąēŻųŃųĢ6 žāGęüö%1 żŽŁžčķĖĪõźüī ģ6ņ ī9’ż!üųŚ3¶ūEģIü¹ šøåŚś -.Śåc”źźĻõ0ū.'U óŲs’°ŽģŌķĖ-šč:ܱ3&NŅ $#żó+ äŁéNą”į!¾“ŻŽ2ÖĘś?’Móįó ąī0;ń5#a "1é?Õŗ»€ ü!ÕęĀ÷Š!Éš’÷Īšēóõ6óĮīö+\;ę1å Ūś½ńŌ&$%§÷ń!ĆÓóÖķó#Ń+1ņõ’'ņ÷?õóŻüēŻ÷üšąśŚēņķżīņSöęĒ’ß()Üüšķī*ĮĢńćžóśż šźē) žÖåįėłä!9DŃčä!Ēå’äņč×ó#ēŠķółžż ōūśłżčļBōżńÜßāŚ%÷ČŠ  #Ūé’÷ŅåōļńūšNūśEšų÷’ #żž' #õõé Łüéžü ļ’ęćłķćčų ä&’ ÷ņžńīļę $ņ¾.žŽ/ß!ųüį ō2äų.īęäõ ėąīž #łó ŠöūŽļ/Ųå,2÷ ą ų ųē 4ńÖõņóśłõėČ ōōŅŲéū ļņ+ūü# įóśųäēųīäųä õ#/öłÖ )ō  ņ’%öžHÖć 6+üņŠŚ .ęJ ōźĖųą’Č)KŌ!łåĪī | ņųÖżōų ńņŚżÖ9óéĪōćųńŲäōł-ėūńīŁ óĀė  ’Łóōžżīåćó ż źžņ4’ņ#ļŻīöōŁöżźčćŲģ1ņ;ķ õ ’öžģęłų%óļģĪśżł öüńū+ē’¼žEÜī*!Mśś:õūÜ"ć Ö ÷ é5ūŁ$ŪåģąšĪ)&ūś ćżõö2Žą*ł7ś-üüõŃüŲšČD Ł Üļū/Ö!ōļīīÉŚ$īś’ćVü ŽęūÆłć ų2éé ķŁīŲ õė ėżž0žō.åõłćų× ’õöģōš’ņčņ2ū éōķėź(ģļĒE18%õīäśįŁóöóõüߣć÷’Ų-ŹĖõüę(üčłćšŻŠō7÷üćŹž× ėńģę %Ū!ü,üł0Õ ōē<ę’# ĶéįōŲō·ėąķź÷ģ’#šē ū(Ų 6 õż÷äöå!ō ūŚ7"ūüņćģķė5 ś÷ŚāéŪ ńšõōõń’×ųųŻ’ļķžŪżķģ÷÷ģżžąō łļ'ņō-ä×öśžčėź÷(üŽōö!ė÷ńņĖüäžöüö/Gź"Žüē  īŁ äČźųõŁ ’׿ łżšł ļČöā!ń÷ńė÷ך :šŚö üēįģåéžųļķüč/!żŚż ÷äęÜü÷#øüŪךžåēC ģżźVõ’Ćä * ó ō\ś ÷ż į!ÖēóLļ,źś3ļüäēī²ņ %Ų šä"śļ³®<@śćņ*įņ(óóü’źĒéōłõņŚ7ē& ĄźöÖīõ#Ŗęļ(ļ%Éšīšõ 7ė Óųī’ ’+źR ēżA įéõš-Ģ $×ōó żōęō,Čūż ’ē’ķāę/ Ģ žČ;÷ćńV ėēōõŪł÷ą.Ś ’Ł(Ž ś @Ļ&JŻó» ŃĮį ,ŪÜņģ£Żīėśę8"’ųŽūņāń ŪcųõĪ’0·Ųüģ/ō9õ÷÷ų-ŃūÜå9Ē# +ó÷ĻüīāĀŁüI2’ÖņåźÓłä,׌łśź9Š,. Ō÷4üó Aźżõžüó:ūčĒ% ōč/éžśą ×*Ųū$īö'÷ķėŻ0ōļŌüć,4üŌ ąŽī&!+ ÕŁŻ #Ņ· ąĻé!>Āī!’ŠųÖ SüśüČßģ$*įųó0¼īśįīžŌčĖē"šėō+ö*Ś  ÷żŃśÖō#öó2’ņšĮZü’čńó- ś " öŻčõäų šė"3źtŁķž.ē ?ö Ü šģYéĪ"ņ ’ö&īžļł0ņ÷ė,"  ūŌī - ž,ö×’äģA"żĶĶŻåŅ4¹ ÷ģį’öņ+óēÜćķģń ļč$ó éķÖ ī%×ć Üē<ęõ/gvšō' õŚ čžķ łŚėźÉÜ'--łō Ėń)ęŃųė!žųöļ½įž#!Ł  ß½óõŃńķī$& ź) µ ŹĪ!źō^ņķżłųžĶ:ģ=ėó żāīčė’ü» ļõł&ēĒńė!’’ś|ć"’;ęņźöÄåüĘōęųōžü ćżóE÷óįā<1ķōęų&ūū%&’ļų ŗ÷R ę Öžśą Āó)-$ķš# ³Įü ųĒó ōĀ#ć! żģ"$(ū Üąö$ @ ÜŁśų0ź ąūåīżō'ļūąĀĶ÷&ŃJŽ Ėšį& ļō/ņõüŅą  ­ ūČė-źAśü×ééūž żģ*ü ī ćē0¼ņéń&ūü :Įźīžūęčą%īćŃ+Ē6=Ūūüśõķ$ ųų÷ Īš)#óöźźŅ5ö ś įłńūē’ó)’ę įņłŁö)’ūš’ąšöüó’÷2ė+šé ņ' ×ļńś ūŚ"ńõ!(Ż :&Ń6åģ Ą(śś1ö ļ óīüūņBč$ ,4ŻóA«Žą,ö&žųä!üčņ3żłÖķžųüč#,& šėäžžźä<ū÷!åųķżŃā ńīÅūčś źŚ’ćõ’)ł’žģ׳Ņ õ óš’) ļęĢōåżóļņųśõ é "žń éū , ź  Żčķüš ņóš łū ųōńģę ųüż)’äųūž’ųöėńķė   ćó  !ł ōūżüž ü %ŚčłŽ%ōóńņ č üō!õ žģūū ō ėņ÷ųæŽ ņŽō("ėü %ōöüš* HµŌā¶č“æńėŻ ģķó« ģe'/óXłŁēŪ Ļgšéšéņ&ą  Õ#ė)ü×åōųƳ &Ūū>ėēķ7 ÖŅ$Ļ ņž¶ł ĄłÜņŠ#ųõåīēųž&öłŻžLń%ō$š÷ŲąćūÜóļݹ.ļ2L’łČ!ķg1’'žŲĖ„ł#łŻōŗčå+ ŁČå²’ ”+ŠŚ÷ 2ķ=æż<ēņ6Į! Ś"łźņ×:ä%šėūĒść&üāķŁū¬+ļEņ# %ŚėņžŻĢóŲ śńåöĘšņ®ßģū įė #ęī ŚšēÕ#ćįäŁ 2"ĖžĢIåķŠšČŻõéB 7 C.ģ×üŽü’ ėéóāīüŽåėż×’ļūéīų- ūE( $ņłūņūźšßŻō÷ļ"’A#+ īō׿ņäõńCŚčūÕ ą’ł  å ł żó$é’Ō ĖüĖūõņ’ū5#Čó#õč'ĒĪ÷ ęųēģ²Ōčå āĮüĪėćėłÖõųį’ļŽ+Äóćģ īčāčąū’ äūóśŲ”Nģīė÷ō ,ī&ų¼čłųž$÷ėÓó ū» öč¼ŃŁ’ äĖ 6öģ ōūĀūöĻžüńśö'ĢŚõÖ?'ź<-÷’łųų&ūē"ęÓóÕļöķü÷óćüūūÖ ż!Üżūöö"š! ķģõūėķŻ źłłī Äōä"õŽėžļ*ųųó&Õō īķżźöČžžüõńć÷śłąźš Żķż# īžūīŻŲ’šźńśüśīź.é éōöąöųī× ų źģžńŪ ļńĶŽćĪī õ łķś*&ń īś+ūõ Ö įä*÷3źü"ę÷ū$ æöšåż ūōų(ėäćųģų+ņ öéŃī’Óėźžõå łūöŲü Öåóį $6żēßņ÷žī ÷śņōģ#ÜĪł$šōäėūõųöŁ.żłņ÷ óįž żŽ%.Nō’ ;’ö ö ķ čłżųļś 43ĀĖüżØū&ó2 Š%öż„Łé ;żüńžš#õĶ0&Ż&<į åń ļ/ź0ēõžļÕņ+ ĻłŃ 7öóHčļÖüų ŃńŚīųņéś7ż+ ī*Ų× /¶ų ī7 /ąß ķź ’  šŃü·Ż$ +>+¾÷ōõČčž’Śųō,į"÷’čżżų.Ü#-98ķ+ õä’é'/ųüčū*öłų’ ūī÷ģ ł ēäńū !ż/’Üś. !ŻżéČāīļļžś05ėūÖŠŻś’į.E’ūö’ł ĻķüīĻšæÜ$ &ņū!ėūųÕéģüä"žłüÅüļ Ā ÷ģ6ś %įžųžŽŚżīłĻń&š ńÄćōźōüüļŅū öžßłņė’ļķ Źś÷). éōŲī("īźżBõGĄĪ%’Å÷ ¹żčÆõ’÷’’ÖŽüūęī$O1šģóŪ0ŚĻ×; ģ œõū’ ŻĘē#ąčüŅņ å)üõó0źĒēųĮŚÓŁżųäółÖŅäÓ æē’łō Ēé ŪÓė*śģīå6éōł5’ZGłČš &0ń»żßŃńńüÉųå$ėģ( !ż A ó#6 ÅŻ÷Åß" ģ 2ęé2éķĒäÖöõå’ ÷ äģR  ūšĶöņ ’ōüž(lńÖé@ 0ü-’ė6(>(ļŚž>Ł5 ńķHźßöłšX- ž÷óŹš’źŲ ńóųö ķĆī%óš!Óõßņ Nbļ ŌS %łc ¼üś»šēõ;ņĮēžÖįżÉń"ś$Īž4?īÅÜÓŻp!1 łņ &5ó 'ņńĖé'Õś(ģąäŃöĮ!%öÄ’ĻŅ&żģāłē±Å'żżŅ8DĢųŽłļńæā ÷ŹČģšdżõRBää1šæ/ö’2ū-2ĀēüÖŌśŃöż½Ń½óäćĻŚö22ĘŁ!ßįĖöEž9ÓöėéīT*9šó+ó'芒 Ž"üāļ[9ų+"ö#ņņźåŁžąåėčłńčęōō÷ą &ō üų5Ūõ9’ś   ų3ļų :õē õ ąšīčóś ųłėĮń õźóņģī׹ āåīčģ ž óŠõåżŚ  ęéōūļ÷ėą,ōö÷ņ,+ćū-ųņ ģ/č ööąÉŚū-īõįöžųäžšņ÷ź’ńßż  /.(ųśóžīŪįĀļ ģ¼č÷ą "# ė÷ķZšĘüĆ’'$žįęšČ"č)žųü ķūłśį"2õŻņÖö ś žńł'ū“āą ©ā'ĶĮŽĖ)#ßłņķžņźųź/ęųĢ’ŪåAąÉ0ž ' ×÷żįśöŌŲłśįń—ēģżŻē$ęØß9Ņėśöō’š’Įó 1ųń óŪüįāóķėßī÷ė õüčžōŠģŁõ¤żįüĀķĪ ä !ÕéŽ Żų īČåé äö śņÜŻBĢ "Õ(ąń"ōDõ!śļõĖž!(õ 'ŻīėüÕķÓńČž żņężśž#.-Ķų ąė"*åśłEū#÷š'óč"ó åīķ#ŠÕüŽŁ īę+¼üć×ėéJLü,õķöĮ+Ļž2Žō ĀēķÕųńŹ# ść )Ł’ė š4ļ,ųóöü"īŌ’'ēI’ń ā žńšūńņģą Ž÷ōĆę Ģ.’ Ž,’ćÖžŻ ÷9ł%Ü„ž÷ü1ėśŽŚÕ,śõŗł öė åā šå$>åīöīõŚČčģ$żāž"õ äś äü ÷ŗśAŖļčšóųŽäīäś%,Ć'ō#ėö'åāż ą-ŌSīšC’ļÕ'ķ%ūšīžž(üéāł’ą ·>&ųŚø#Ļ=ń ė ’  śõäėūüņżŽķśłł »ōü 1&õ,ŹÕ żōŁūõBõŁżß3üéķ ßÉŪžō ņõōģÕŃē ēūźļļć÷ ÜK§ ķŠ ŌžóŌ9 1  Bńóš÷-Ž õņ/ųŻ+9ć÷ģ«% Óūüó/× īöŻą ģźś÷3)Ü,üłšū"ś ō#łžłłæłīųåßG’óėįŗ’"ä9ęōīÖ3’ųÕ öćĘżäū+ķÕÄT ųņöž,śõŁąįüłšżü&öūŪŹė1 ĶķūA óą (Ū ńńģ’īņäõ+łė!6’Ų ńå ē éž āżÖæĻźžż(äš ų"Žčöś3ńüüč/öĘ4ūŁžŌē 'łć łĢ ).āõ ’õ÷ļśń"ć0Ż ć’éÕšōųüß’’šżēžöö÷ ō ńšīĒķ @ Aīčš!$ūčÜüņž÷/Ą®), ģ ū źś² ć& įīśģÖ ąźž īņŠūŻ2$½ Äļßå ö¾ČüĖÓģō4 ėŃėų Šė)`½ī’߯śÉÕ éöóĘė¹ł÷ģüķ Åó×ćU@ö)(Č$ćųäćĀėŽņŲšŌ5öūśņäūī³ēėóōīćåżćłöūüūÕŅóé śŽž ż  śä’*ü Ī1$3 ųźąÓõ(Š Ü""ö ļźīūļźÖĪŪ’!)-!ń įń Üü É!ų)żßźāżčē¬īÖōŽźżB Ė>÷ī÷ßL "Ėō5^GŻźó ąŻĢš:žüķČ4ģ ķ#šżHųō#FŲšĪ ųś4ėżŚ*ž$ŅŠŁĘŽŽćś$ĖčAå ÷÷Ų[ų&ćļžóĻ’öęę$ .ų7ūėäēģ2 ņ\ūߥšó(š "īź  žįšķß+üéõ ŃÕŚōļ!äéēŠļśšóōėś÷ ēßŲ"ęīŌ# ä ńńéń ę“ķłźž6ßöęęŪ &"ä Š×ģķėŪś÷õ īūåžĶųīüņÓłš%ųéū’ū’ś AĀść üA’ß.źšżūńśśįKõ"żīņśīśöńń=õŪėķń@łÓōĻ ŚČėųõäD:üĘčōļ žū ž)ż ÷āģüłŚėųžķóä ųž×üž $ēńÕŌš×ßżŚß¾ś× ź÷žßÅń ż-ėöėłźōģģ(īEŻņ żūūė-š(łü’6īė ėó÷Ö3ńņū óżžž ļ ÷ ōś ŲśąīõåŌ! å÷óū’ćčśųŠå4õūóōį ö ō. ’ć6ūŻ öŻž%ū$ūś’×åśūź,ßųūżķżłė ü žģóšųžšŪšóō+śųóś ō’žŽ ’’!łķä)öåżźćī#ūš õūóźĘōč$3÷ķ Ųśż éöŽķöõ÷Ūķśééō9ĆܶŃ%ęŠüéō@šö ÷׌ąžķŻ Üųų ųüé#é÷śžÓö ž06 gķ.ä÷żŁīżüü÷įżšŻōł žż å1 Čåß×łē Šõ$ūųß5ō ž!ŁżßļÜļģüūęÓā÷ÓA ņōāü’īś ł Öļš*ų Ų ’ą÷Kõó*žä*õ©ŻüĄ:&/ą7ךĶöWģ1Ļåņżé+ü·ü‰įę$;÷)ųBī"ņ4 9$ŻšžAņŚ!éńĶńŪŲ.įŁŪńĘķńĄŗ÷ÓÜÅźB†/Üėł+ šĻ’('’ęż ē’6Óžī³ĖĖżßč“äģčĀšńöŅżĶžÜųŠūéŃ:ęéžĒæśŽ5ūéó1ė $ ūé ųüõÓßśīé ųZ÷4+łĖō<˜éā  1 żõö÷Šīčó üń'žēūś]ćūéŽņźŽō  õįųšń õöćöē÷;šūźīźļšųųč ūŃīķüņļõ Š żö !&  ųūõ’ä50#Ö ¹óģ õ÷żīĻķų2ņéŠēõŽīįš!ū’% Ėä%"÷ļ' ų' šśģžūŚā飚ŲĻ üšń»ėšūšóėģŻčāŽóģõ Õė ’ūķóėōĀéõėūĪ/čńąŲ!ķéÖüöņŲ.éżö%3ųŅī$ Ü Š ž&ńā Żżü ó Jōķ+į©Ü&āāōęģ žŁŹ(#žéßöīó Żęęõū śėöĄėĪł 4 #ēłćģżóź&(’Sä’ ’ ļ Żłó ļą÷Ü Ńō * ś#-ł’õäēź:" śŽśļąöĪūłźžŁ’ą ĖßļĶžÜÉž÷ ÜųÕĘ1śų%óöļõĖļōÓč1(÷ß3 Ć×'óū)īėćžķųųžūų ķ é&äęó ē$ņģā3õ ķęģśŚ żļ4śDź%-ĀńžÕęąś1ż0śŪüöžéäķÕ 1'č , éõšńšāł ķŽ? ßGķŲäöņ×#öÄė #'åļüžļé īūā$ģėķó-·%łŲāéīż#$’#ōÅ ó) żGžļ6 ćŅłóāė ī%żÓų Ö4Üõčē0D>ļåųĪé; ŃŚž’(ūŪéŌų $ ė&ņąĻłōÖüSĪ åńŻŻ(ł÷ā÷ų į"Óę#ģ ļģņēŹšüźīž $÷’ žß2Ūßņ&š3!ŠÜ÷Ööńęßßę ńŚåśßżŻööčī0źļė"śßńśåųā(’ńļż , Ž÷īčņõŁ,įŽ)$Ī÷å ŹīłūõžĆū2#$š!éžīžó0ģņļł× ł1öõ7ōžüāF %÷ ņń õŽķń’Ļč’ū#Žźė Šš ćč/ļŪżźß÷$$ķŻžūļōōė äų# (ļ$õ’(āēłģóž÷ õ0żóäķå *÷ Ęūź#Žģ /Ī óŃ;śš Ū4å Õūńė Ą $žźīóżžöżū÷'Š čšžźōłüśŽęōćäÄś'ī ō÷ģüūÕéżķ÷ ōč÷%żžś Śśčū ō’źūÜÕćÓéŌ3ńį łīłķ ķ1 öčżR÷Ü!%ņ Žōż- ōõ TĖļ šõ Öõü2 éą’ņ2ųēąŠķš Żłåē% ņś ö,ćśü ńūžü ņäÕėų ąŽäŁ+Dü:’ć0īéŃūųä+ŌĀü¶ū=ļÕžZ ųŃā'&ö*üŠūżż53Ż ¼ė÷ė óŽč/’Łłļśäõūįõ÷ŻņżŽźķįĆéņčīŲįļü,Łńčļņ÷\ģģ,łŪ”Ę ē!Ī:š żč ³ žöńVō÷ž 8 Śņ€łŁķśĢö9óõ5éŠ ×łóžōčōż ž ÕåļķöęóŻ ń õ ( *Žū,ųęå%üļį5&÷ąēŻūŁÖė’ż*éžē×ß ńößé$’ćļž łųü+$ ę öķ ō’’Üł’ż3ėõźõ ×ī÷ųģś÷’ŲŽ#į$ģę,ļ ūüŪ5žńėēśżŁķć7=üŻšśńķÓśé,8%ÓļÜåśń¦)śŲ÷łę8ō%ś(źŠāTśÓųŌķåłšńė žņ.÷! ę Ÿ õļ³0ü éŪó:$é żł®ƒĪåß÷ŌĪęōI1÷/ę!ņSź“2ūśū!H0ą8’ńX ćöōēķā3ī ó4*ų8ł#öö,ężšÓćäąH +ų%ćö0 ęźöū8ćŻēĘū¤ėāńóė÷ē’Āīēö%ü öžīé÷-)āį×#żšžĆ› žļćń ņ)GīŲå "å[šėž æ±óŪõü, žŽģīöž¶Ģ&ś#ś Čų)²’äźŪįóūł+­&$ń÷ęü ōņ ļHŻLįńńÜūŗķčĖė źŚ ųŌžŌåšą’ õĒżüCķüń šš£š_€1&ŻÜ õŌģę1–īLH)BŃöTĢĪ& ”ĢE%ŗz17Ē#%į꞊łĻ~!äÉė`ͦόvąMźÜÆ,7S-¼€Ł4õī¼9÷d•Öe ¾RnDńźķæf_ļä°1ø€€X׌įŲB³/ø$(ŲļŻ č*ž!üŖÉą€Ż2 Éżū&H4Ąō €óķ”3 Ó€ęå >͹稌΢S × ę軳Ó(Ó8*f ķķ:äī’-ĢōK;0%’/æ“FFé ŠĀCŠ’÷ś9Wmī§ļ½€£€Łūż€Ć[)æ«ŲÓņńŅķń'ę;‚)ń%ŽE»”ēC31¾ōó µåšźź*×Äßń€Ó½Äk óÕ ėĒþ&+UżGĆ/āŁėį É€ŁLßK85ž Ś~ ļ Ņ% ×$ē÷9ł× % é9!śół ü"’ć Ų!öżšēž ēé’#üŪņļ(ā ė/Īąó ī  'ń’ółž) ł= ā ś’(ū,śóøößõīāķōū ł*żś'ņÕū! ńõįņĢ’ö¶öėśŪ÷ šųūW)ėļ%łö6ų’ų$8÷Ź’śÕ’ $żęŽ.ź, 9 9üļ'2Õ1» ćųńėļņöęö>żęę ó#ą  źļ÷āķ%śūŲ Ņėó åō2ī ķŁüüāīöņ3õ’¼ݟųųõšüć8Ėż%śü)āśŃęŚóē ęōāūIļė ēķŁźŚöė)ńś’ų Õśöīłėūęé÷łū*ļ öž$óźļęŌTėÕ Ųõł ųF üēśóōśōčū)ō’'3ņįņé!É#Žżł$żÓżńöä-ó&üŃ!é*&ó Åū:ōöįÖu ļŹļą,õžēł Żūć÷ łõūģėęĶü鵞 ķ,?żėżł÷źLūś5ÉēĮļļėžčäé1ź ēęż >&ūųīüüü 2;8ņóL2č+Ü1ēćŲtźÜīūš’Ū’ ’'ų( Ūłõó÷ńž śśīųčžĢŚ#ąŽņŻé8ś įõäķāö%ń÷üżÕ śź ÄćŪļŌńÖ ņźīłśūįöņŚź’ éŌ % ’Q’#źąüüõKī ą ū/$ą 1čźęšņüå ę äłžļżņ0šżõĻõśõ(÷ż/’%ž÷ Žśėžżü ’Śü óßś śż ėż6 ū ’ł éųö 'żżń ńń" ß ßįü÷ļ$ćųŅüōõŪ ų'š’ģč’óļė!üüęūīōīžćéš+žś÷ēüż÷ńåśžģųõźų÷żŚśöń éēńū÷žėģšīóéŚ . š6-ģ)0ų÷ģŁūē¹įżśŻ ]O÷3Ūääōģłńéš=ūśąī+łüģŽ9ēŠŁäśŲ Ożł(õżčÄ łį8-ż ķŪŃæ žü 2"*' ńé³Ė ņ  źŻÕĪŹSń-$źśųÕ$ķķ` ł÷ńŪ*÷ū! čŃĘŪ9š+ģ’īä' łķB0ü’/ēåčūōāž ÷ē'ųż+÷š’żģäūūžśó’ö÷ ųÓ(śś’åŅōüėAńåķ4óūł żżöńķłņņ õŻį÷ß ōō'žūžčŅųęōēü śā"/÷5ųū"ųģļóųźīöšš× ū Ūężö%Š'@-õņßüļŌśģ ½Aõüžü- -öć ķāŻ®ģŻõŻÖųWķęĢŽ8éńõ* ż8ÖŌü?Ā0,@$Ė+Fō.īüüŚźŲÖ'2ēü$ŅšF ķōķ7ļM ĪB(ż Bē=ŗ%č/öģ?«’éH*õĒī DžŹģß ĖŽīńéųł&) żūīāģÕÜ’ŽŪčūūųŃÉó3æ’õōņõķ„éŠéåüų ķ +$ 9ėĻż®›čūųąŲ<¦łń5^ %­Žč"ŁJģöččįŲŚ!Čé“D¶Ī%ÆDŗó/ģŚń]Ģ߯٠®ź Ćž’ōŃBŚą!?ÉÓ<ŲGćUņĒŹ‰Ę÷ģó>īłK*ϼśéŅõ!ś@ńKŻÖ³QńÖē·C04Üņ½łłQēŻ6ōŁ7äč@øĶ.ļļ ē:µNI3ŹĀßHą’„õ1vōķ×&ę- ń5 ģņä÷ģėü šžįģõ ń$ ģ÷÷Ż ōöŌźņū0L/žķš üߥõéėų/ #ųļ ÷ ļGńćó1öó ćĪ ł Öļ’ż÷šūč4üäėņéJå żä×ę0ł³žē÷é$ß +ßéāčģū'ņśżõ õ÷ōēżåę ļššņūßōėųö Ņ裞*ÖóįĪeķżA÷ćŽģū,įł0Ģ Ü*čÓłćččļ3Óõē÷óüÉėńā’: 0#æ)ŽŃļ0Ō*õ ńć>ółĶÕ 0ņ ź’ ū:ļĢā;ėųś'Śõ# üčżčå ķšģćäó7*žųš( āż,ś ń’ü ėń(ųÓ-’- )ō%Śłę’ )÷žčA0Ģģ÷Įńķ÷)óś^õüōū/ŚŻ*ūłļ÷ż ź0 ×óAųŚŪü’ų’æąŠī(ńžćōė.Ėšņ®ń÷ķĀ óÕ”įļęĶ :Ö"ē õŁ&öšóšķ$ %žóč;5ēš1čÕŅķ÷ĢĶ÷ü<żųģ#" ŻÆ ō õ% !5ī 4÷č$ ,ėöĒóÖņ& ÕÖņžžiŌŻ¼¶¦0Ņ1°­ ½ä¬¼%łÜ&æ2/Q >9!öäĻČ 0BŅŃččˆ<>åŹ)łī—fŒŚ½2€ؔżü’,&€äįµ!ļ1äŌŅČ%ž«š”Žjįū$rĻśČ-sĒéD¶ģC½C©Ū ēCŪö éĮĪōõŚš5čO1Ź>džüO7ĪE7Q2ö1ć#N;³ß:śż«½ .3ģä½ÜŁÆ2üJõ»åł$ł)#ę·ėĀžī0=ė ź,ń5hŲóŻ %<čöćüōāŲĖČå.ść%ęåęł ¾ę[ś÷ŲÓ “5-0’:R24 ćęłóQĪšóÓĄń¶2ū¹–Ģ1 &Ģļ÷äó`łöŽõ³ō ę’õģ ó­pųęņģ&ģéū;ųńćųžĻį ųģųõś(ōļņüņų!ģļņćė ó$- ꌿłłģčģłłōŃó .!ć ššžōņļ)óż łŲąū ū*ł±ó’÷0Ųė÷ģ, ō į&+» Ū÷Š $2&ģ;öį’õėī ļęüė ģĖēmč ÷ė ūķŌ čłż1Ōņ’ūģņķņ’Čšõī śūé üŹļķīŲéßĢćõ "žč 7÷ī 9åüü Ęų # %59ōŪä Ļé  öä%ü +ļ"śćżē ōóšöÕņ#š ö÷ī  ć 7śž ļōŽÜū õéü šźß"ę ÷ å # ōņ'Ūū*śņü žį)C! 1ĶÖžšśŁńž÷ļÓļéī Ģ'A ß$.ćݽģōł+żż#üŃŲņ’÷å2 šē’ 3ż÷žčõģ ńżöžå!Šū+į%×Ņļ–Žčßłł» żķ >ųó#öēõ$Ä <ö ģ%šŁ’öģŽįģŪėīģō÷ ó Óå&('īČķųįŃš'ōī!ćę"üćōŻęš/üH ×öó#łīāš÷ö'ģ" !ģź&/čŽ( žōŚöūŅå÷šŁ óģłÜõå#ż ’öŸž ņńóō!õ«÷ģ’šų÷9 åļõ"żž ć’7ņś%&īįģ=Ņńłūōī9"?ķż ÖčI Żņž  !ūžź īś* ūģ õčńńą÷ż ņłįöćå. ū/ģē*õļõųĆ" ÷ćó ąģō’öÜ× ČŌģŠūöß3ļā łŁ6 ģčń!<äžŲā äļ0 "ė ųųēö5÷ī éÅŲõėöč,ķžńÉ’+0ņĮäéēņ ’ó(īą.ē*ėųŚū ļõųžŻéé1źłķśė%ö÷ž÷÷R+0śņ5&;ņ  ĢĆ (łžÕõōöõŁB/źš ü Ųāü(żėõźļųńź üŪūŻ**-łłūżĶö(čüīü+īž’öņųüõļźó1čōżłōšąųūŁŽģ×ųšśŃį  šōŅ÷]īAÜęż"žÜėł' ’ īńż )źōīX#ųžõüĀĖļłņ ć’šįņ'éģģ÷Ąģ÷ī)ž×Š éčžéļņąēśįžćź !ś.-Č!óŻńżŖēä ńõę =’åš#Ó !  :żź &źēéŽó’üüĢ åééźÖåę0ž ķ)!ėkÄš’“õūńųŁ&ūį6’÷åć7"ōčóśķŠčķģ łņöŃü&ćŽŃå ļģ(!éūööģ ×ų3ł’4õō÷䎜'Ü ēĘIīįėūēš ēÕīęž÷ź įé żŻśäšĖóŲö :ž] ,õņųó÷šłĘ žįß÷ ėēźåāłüī õųč&,ķõ&&’žļłöģ#šņ÷ ÷ śżńŪ’ųž é ü łūéķł ļų %łśš ķśųöŃńōž ’ńż Żžćõ ÷łßų ž’$żżüł÷Ųüéöõ ńųŽ/ņīū ŽóŁ ż6ōųõé#Üó×éī&ų÷ų3źį ģ šÕł’&#ś ( ģ’ õżīčöö ōŁŌē8łå ūźäżF$ō’ėóćąūč)ūśūžź<ņ Åż ģęžü-źKäŚĢóņżł’ųš’š öķ ż(ęļ÷ćģä 3 óōš)ÖüÖ’½śąĒžü$õŚī öūš€żų##õł öóäśņųūšžöųļ÷/ ĪīåžĶŪ!åķėöņ1ļńŽėńśå(üPšĮņ üóõD× åż’õ&'öćł!é2»ć 3ćų ’ī’Ēäųļūć÷"ģ ą"Āśżīųżų 5ų÷’čžć ņųąļöö8 ųų @čžōėļŹć ī’āP.źōī ūĪ÷*õ÷Öżļ $÷Ą÷żķŁžPĶżēęŌŽ3Žź)ß )Tć!Ąµõń åć½ Ķūę#åļė+?čśś’E<öūģŽęōÓ*Čżö­.45(Ņć2"īĒüęō,ā=āĶ,.$ OÖDģŌėÓŠ3 ŚōĘŚėŚ(čų¼ś-óåź’ ö1’˜-č£öģ’ü×ęNē®ć÷ žēó ß {ę\Šėß-ü/ł6ńā4 ū÷ūīü2ŗó.ń"śżģOšśī*ŌčŁģöĀęō:ÕżøõīõŁüōė Ęśż%ņ7Ļ# śėć ×÷ž’ ńčJzēķ ń Żļł!*¾AC^×ģ ą>ķĒūĢü`ųĢųļö3µ ž šŪ8ĻčUŻäšŚžļšäöņķ1ōćŻį&ś ö0ą č0 ōļžłžćłŚŽīõé/łĆźĢBĶ:ūż÷&-I#×¹ęŻ,ö ‹Ķö’žōÜźŻŲł/ēžŹß÷­ś2ļ ŪųÕų€,Ėņ"* ūņ óČĮ/]éžÉņ Ķ JķĢ /*ėęĖļéÖß0žż: šŚķŽĢEó#@! ģžīł-)#ęü 5ź÷ ’#1ēč#ėź6ÜÄž³ėTIļ/’;ā¼ż!÷? Ü *Fļ„©žģ öåęŽāā:čÕįŻņĶū6ŽēašąńŌ$NšĮ#čŻņßĢžŅėŖśė  Ö÷āĄóüŽÖžģņ ±ń2Żżšü öśõžÜßüåē ņł$ņö ūķń õÆ źŁÖ)ōą ņšõŲĻįCīóō +ö 'ą ŻŻ"žłŽéņš1Ō 'ńōäé÷é ūģŚģ 5 ģā ÷ųń8ßņūå%õśōų%ÓåłśåŃ9ęģ õįūž’ä÷Śżõó ūśėčģ$éųŚ,üś A’÷āźżš łš&ńü ž Ķž ×ģéē’ó0ü)3ļ\ ßęéž  õŠżöļ ļ"ć?ć’ż’öķė’š õÓžŌ’ŲTŪ(Ķ čÅūõÖNŲćŻįąļ ņķö÷ū«Ü÷õšŃŽ÷ ōĻłęć- Ķėč1ķóäĄē×)Zūż! 86ü ć$ öńėņę3ćųÜ’ üßģóļüčłś $ģČŗĄæŻéÕżżķŅłß&ąĆāóöŻų.š“ éĀü1,õ ń žŪ+ &žĪ’öĮśļŻē""Ä Ńż żėšåųžģžĆżõó ņķ$;ōļķūóóž ņ6ę,ž( ļ Ż,÷ŽĖ!ę &ōżęõ.ō(ĄKę ÖÄń>čŅżņż ņ Ōą č 9ę õ3 !āķąö ųÜś÷ ,ōĢ1żųę0;łōūö ųŃ šä’ö'Šéō’æõöŽ÷Ė ųé źÅ FŻ’ŪėļļŹ.ž čųéöÕŽŗõę +ŌéÜ’õ賎Žčńš ō>ׯūėš įÓć ę ķ¼ń öÜ! $Ōļå ķ×ōļ"ļ% ż’éÓśżÅī üüŠšQ’Šs ż'i+žžŲĶ)ųŚįž÷łįģ @žńć+īżžĖŁŪūā+’Āūńäśē(ę" Ö/ (ąÓįó ÷Ō ōö ’׳ įõłęčļ&ŲÄ ś õ ęś 7# ż!’ęłń+ßüŁėćżųń õåšžö ń żó ęĢ$ī×ķčåōģŁžś łżŻķųżźż łāž"ō ļóńķ 9÷žāźūų)éņ-ēńŪ óŅłĶłņłüėģÉŻ€&Ų—?9žöä+H §]Š€µ‘7’1ņƒį(¢ <Cč]įÖxy‚  :Qżsł[·„ūɐ0 žśõ%ź!ށˆÉ€€€®łōR䀀.ä8č•÷ķ€Śųą›€€¬|Ł.’KŽļŖ™ėm>Ė×óį·¾…ėŹ+Ö Īւʐŗ0õ€źśÖæ¦]C3ų¢FŌƜə€Ś7Ū -¢`ņ/Y’Å(żÓŃ;ßłļ‹ŗćE$рüŌ5ü 2½ō3Ÿöü"ŁŹ ńīī ÷1żė÷ķS8ę@Éņ±,7üņ=õėėčē9Šģ½ģéā%ōĻīū*ö7æŠ65ÕÓńž!/Śįńä Ē !įļżĶ õśńY2 ÉFśYÉĶ ļ @õT  õłē#šųąģ .ėī *ę+ß ąģšĪEŅŻšößäŲé;5ŻēĘ­Łß®īŚļ 5čŪōōā żóå&ņźįų5 żīü ’óŹåå>óĪ ēīćüäóćßž’žēłā6čžś ēŲ’łį’ļ÷ū’ųīžéģö ü÷ć! żįńūęśń üźō ōąī6!".!÷šõ&ķńļ÷ óōÕåūįś*!łōó’õ÷öīā üĶł.Ōåćų9žōķ8É Ö%ų ü śüBōļų- żüŚ) ģ +žņšų$Ōēōź" ōśųų !é.’Ųė&ń)żćäÓųKßżāōõėóų żżåFģć źółŻčéč÷’õŽģ$ ąž. żōž ä&÷ų żųćöļ&ģ Łōüš’óĶńōåš9ęß  ķ’ģüżÓūżņĪųī ļ%4Š'ėŃ-÷#žōł*-4ĒĢ ģėćąŃöł ą³ų × ńõń&ó§³ö ŽŚ'Ūāż Ōüźōą'Ł öīōö-äßūķōŌ%;ųōö5 ±łųü$Ėõēé$ŠīēŲūž*ųÜšČ3ļĖ ųčöžžß’įü6 ń ó÷=ō( śē׿ō)äõ . įų’Š š#Ū ž­Ė÷@Ņ ½čėģõłŻż !å*üż¼) üčäįŌ)éś7Ėõ ę°Ņä#ś õKÖŻ ö! Žūżčķģž  . !NóŽĢšū!!+łŻųśé’å3%GŚ+šķüśżź»å šś¦’ä0 Ļ õ į8ßÓćÖžóĻłJ’Śśū!JJē5żļéūńöĒ é½ćŃīäÕźŻüŲżģåżŁń*žłĒ$Ū ÖśćēüŲ$ķēG$ū, Öõ%’Üć% žēł 22ŚūĪŹļ,7 ,ø %" Tóģ9žžä%1V$'ė ĻüŽęĢźÄ0łÓ2!(ēē!ćś¹üē2MėÅGä×ļŌóļč诞& ą ī *ź:’ųöŠ  ō-ūß ĒõÖūūūÜ ! åėžīśłõś0ż.ŚŪųņ .ņŅ üżŌķ3Ć÷(õ!ą'ņĪčųāÓåīäžż"$åč%ōĮĀŲļó&šźī ķņNŽöü÷ 8īųé%  ĢöśŲåł'ėõņŲņõ Āų÷éŽ"PėēĒół, ? ć¼’  īźöā‡7ÕūÄ#óų""ĖOöŽüī%Éõó-ę ä+ź²E%-ž’ī9üł&Ōų"#łś Ń@÷ō-ł®Óģš÷ 'ŽŹ ÜDČ !ŠéBÕłķ/ õ÷ĪšA3 :ņś  ß"ō/ł€ėó»ć<śŚ•cšŲķśįåņ’’ßķ?¼ēōŪåśéū9ē% Źģ!VšŲ1ĆųįóģÕŲ’§ė "źŪ 5’Üõ-’ļ2Ž,ü ŅŚāHäó,ń¦äĻź"ūķ õńšóå"õ·>īü¼ę_+*:é ė éķī äų`$ 2’ ’ÄÆŹõ)ܹŽ!ķóåōųķĒ$ł %ėüļūŠY ćō’ĘĪōū Ł-¦Āå 7õóĢ"$Jņūiģßģåčóęßģ ųäĮę\é>ńć1 é-śÓ  ģŠ’é *°Ś ųÖöŽóüõīöóżžųśī»śŲ’Śū ū ūšńå āå-šŻü÷Ž%łž* × šś Ü&śāūüó ÷ł Ļų’-%ė5Åūē!Żī åó šŲüź#äłź "žč  öąśżčŃ"žššč ęüģķźźćė ė ūÕńÓ’ųź čģē äķ+ ģņ öł š$ĪČųÖ Ö žšēūäń&ņR’ī’9śŚļ#Mžū Ž)'čē.śóÕŽ4źéä åÄ÷žšHļ#ł’ū4%šö¶éķū Ņ śżā+Ļ’ßŌžž ŚżŪą-’õīŪĶąīō īćėÕäåūŪżćäųżśļķģ$’čč’źżėå(/’óÕ’Šš źū#ś õöūņĮųóHĶų ė ģŁ #éõ¾łæ’5Ó āėŻ ż17ł $ķū> ėśŲßšŗūźR÷ ų¼óķ'ś4ņĆ.рēėķÓŃ%ä'Łóńšõ’ķōŹčüūų/ó@ßķšP’õ żŁ ÷żé=ń ā!ĖĢ’¶ ó#Å×ū’ūüóöęö%łEł"ö$ś#ōė čņńé,śķŠōCųļ’ģļ żųłéŠČöĖ ö$īģņŹ 8õų÷ éąųūįė$"üö*Ļęä7ćśóō žōŹüÉģŃķ ćę"ō3ō !’āśėēą-č+!žČ@ž'ļś÷ ųķÓåÄó%õųųÄ õč ī7ż#īĒų3õÜŚīüC śł÷ūלī8'Ö ų²šūCžĻ"“'öėżłč'ļååļńģŚŽč ęż š*ūŽ(ō ņš÷šž÷'ŪžR&&ūŪßÖ Ž%÷ćõóųą7" īŽ÷ß$3żģü’öB7Ųńāö Ō3öāŽłčÅżžD,ķöóį8ųč6Ńųų ’Śćš"óüŚż$'į÷1Ū(÷2ŲB ū%’ę éŅŲ!šńžåķüģźņģĆųÕóäbōŃń7ūś'<ß!Č ń ōś$Į /īņ’*"’ļĻŌĢ7õń!Żźļ-żÕ''ł ēźöüõ’ā ×å)ķ÷äå)ū ē÷M9ü( ģ żōāūļ ;-Śż"Ē×,’Ī ÷Õčüėę’$ ļå/čń%+ężßßņśé€žćźš óž26¾łņH"ų^ń(äČsž’0ū ēėĘA%Āö’ē<łŠ . åÜņ<<ھäńć Ź" Ć>õ:ė’óŌ#ŹåAõOäłg P:śūŃ“€Eö(Ķös±š®ģéżō'ß Ļę- ³ļķ³ÖĒčäģŪ (ū+)Ķ#Ążń>ČŪŽōē ÷'3üńäŃ étēļö"Śõ ķ ēēśü#śīĖ"żöč«ćžåÆņļźōÓ óåąüś&)*Żģ/ŽĢé ’ąņįžÉ ļššõŲü üūĢŽģĢ ĶČųū ÷ūŲ䎣  £ü źģś§ū(ö-óÖųā õÜ÷’ & ž3żĻāGļī"żāś$ö¹-.'čė ņā Ū$,ŪėėōłķńčņR( *ö’śč›8C"ģžŁļīóöų!õŁŚ+Ū[ų"Ę„ &ü)ß&ó#4;FžĆöéē üĘę8ņōfõŪś1ć¹āßźC*Ūņ õ ž'Õš!$öåßš ģ÷'$³ėPąš ōäé, "āÅžēĮü!Ņś ķčųņėŽü÷ął ŪóųķšļšÖą Ūąüżšśķż"ź $!å% žółęłßćāÖ ė  åŪś ē ćä2 ž ųßķõŪłü7ųü&% ’Ūü ņLņ÷’ģ’ģ/ś׎üē÷ńńśČķž ęčüóė ķ’ õūó$źķöīū ōžšęü/šł%6:źÕ(īīŌ8ŹöųįÉ÷"Äüč;?ęęēüģßą-&$įģŻżäł ßB×iŲ ęźÜęõ-17õEÓųBś"ņéÕ'ÕüžźųōģģŽĖJOĄ #*ģ.ėāå¹ ßöśńēļ&üį,eDPE<$&ļķ¾ūś6#ĪŻä9Łćäč5ŽÖ) åłōõōśį&0ąäōX%ģ ųķ Õ ÆųŪĒEįņ %žśśųźŌż źżū'ōļ"Üéę’Ł !üūīŅčķņŅ é č’žāė’Āäė åHę3Źņłß$łÜų× é įń:ūīīå śó ūņū ņłćżé" õ ģéłõū %’’’(ėōł’ōį!ļ4ō žüųņśČńģōśļõ ļ,ģś"ćóé õćóęžńŹå ®)é6čēóć üż *’*ļōļĻ’4ß üÖ ¹ėūąąäžįö++łŹžżšõöN'Ż1 ļ¢,ć’ųęģō6Ųļü(å6ż&ęüż½Ä÷ųŁēó ß ÷-ūFäģóF&ĻžóŚ żīĪČ,žé÷螯üīHóĢ)ų' 9ž æ ź7¹ö*B6“ĶŲē€č7ēóįųüüŽłŻģńņņźņ(ńāéFü ōÖļ’Õļ2Ēø óśéūņ:ōęœ=š8ūŌŃ"Ėžšō.ųŲHłżžüģõ Õ ģą3=ĘåU0ĮäņßÖ ļųū ’ż Õ (" ó:ō+8+ņ7Ā üž­ļźé’öźōč öģłåöäśīļīźń  öė÷ųńņüę ūń) ā4, ,&/ üōŚńī8’ó ź’ žü ń! ī¾ųēśķ%źņń3ÜŪśųŻ9!’æļį ēļūķöŃ9 ģŪšłŚłčņģ;,ōūłßŌźļųżšåīóņžžļ÷ōŪéėń %ąęŠÜŻ/į×;Ņė ųß’ó+ūĮ õå+ļōśóģąüņŠńūóņęąžā Ļ&ć%;2č' žū×5ōšłÄFńL 6 õ÷ž"µtŁ ś!>+µŗD3ÖßņÄóŒž öI%ó0äņ"é5šÕ%ø¼˜ŅŹžĻ0 ņÖßĀķåžžŌE÷* ī3ą-ßäŁĢü& G5å<ūŁ'ן7ÖĪ2ŚēJÕ&’¾ĪĖņ _åC¦õ’<-ÖīŽ šīģEÕAü(ų5ī**ż.šńå(öōē ĄŠł’õłöōŚ%ģ÷ķõ +õ éę÷ $ū’ļ0ö& ōŗó#ģ’üłĖō?÷ļž/ öėąŪ Öļäąń0ż E÷Üōłłėōż8ÕńöżäģčóŻ÷õķ $É7é ę "óėę5óüšüčęļ×Ķųšń×óžėŅžšå2šķ śņ éåį(ć1ūÜ,żś÷ąóųü2č . ĶŻłš÷ä9!ü éšååé×üŅö:ē/= īé:"šń.0 ąļéł%ńśźśĖäī÷ŚēčåĄ:;ōķõ ė !&śų5 /%į õō(żģīįź ćļī×öFī,ś/ō ķ¼ųśÜś#ōJė;÷3@?6Ēŗ’ņ’ėĘ÷Ż)XŁ&ž& )ń-å öŃų½>ģ"Żū÷ī0Ōī+āāAžžź ’Ö$ķ0÷Īń2é¼ōż ڼĀó Öś’ .Ć<āģĶ īū2óÓ¦ė!ēęXÜņ×ĶäŚ!ńé7€”ļēżęPBé ’ō!ѐÓģ5ųĻ$Ėöā>KŃŌūóŻąÜ $ā>šąŪ°Ė±ōéĻ7ź»ŚG¼ $ó^  Ż’3 (ĖĘöłÖĘųū:ßäõōćėŚģ5ķņó 'ńÜų ą*$ó½ )ŻLķłŻöńßŅ;ņA®ńč6Łłšå¶1 śż5ŁēķżŚöķQéč Żžńć³Ž%Óī)į ŽśōÕüżłėöåń1Ļ öņ »Õßõėś’ŽģįéČ5 ōńčÓż:õūLš6ņš?Ą3Ķōżü÷ī$ż Óé,Ų Šūć>õ 'Żź)Śśōõ!ų÷ņ3ŁŽ ķ’ Żõąēł óĶ÷!ćķ’ö÷%šŪ:ļąįųåüžŁšŚė÷#"Ļåłńå×ūīé æPäč/žü/ ęė ŁžüīŪøś1÷śõ ÷ųŽą éó Ōķķ ļSōś ņö/łųßūäżå=üöÉōµš~=×ķ ūįē! åćóŅ’ęģé³åģĖÖśšźļČ+žóé’’ Ā’AŁn7éńī! $ż#ć #%Åž4åū÷ (EŃ40 éöģ"ąōō Žóó ģ žč ß÷óóüž ęõļĻż'67Ōč# !Üēü ō łÕž ĶķóķīšĪ׿÷ķ$ÖRņ+ĢŽį1’+ å ģł"Ķš8ę ’ ļ2Ņćėłņżšš#ģłIé ćß®÷żžŻ ķäĆé<ü ķ ŽĖąé0čćčŚņĻš#żåüńĪ’1ąčžł% ś;ŃģūĒŪÖž Ģ’ ļ,ū(Ćć$!=#ć’Üīųøłū’äćįć" ś$ ŹÜžśÖü óüūłīš ¼Ųń$åū÷öŪŚžžŌüŃų ĪÕ īó÷ń õ +ß¹ įüĻ&ś%ś ÷ōęüķį +ž×éėńč&ų4÷ńł üõ/öó%Ż 8ßöéłå’ł'öķīõųŻ āóžäū ē:žé÷ ł"šų’ŻĀ ž0öūåõęóģśö’Žå`±#ō ź" ā ō '&ņ ÷č ’ ų07×éü÷Ļ !õõżģüDņšėļžöė źķ÷üōųņ üįėģń÷÷šõŲüĶź(’ŚķÓžćŽüōĢėÜń ėżõļėłžŠŁéģēåßõĒē7'óŪķöāžŻäéäē’öėĘł’Žžļ1č÷ŠŚ8Ņįęõł ą,ļē’"æ,  ēėš*Õõė ß÷!ł)ēĪų’ŲüĶõŻ$4ū÷ā’śAĖńųōččļĆōĆ2ģņ+ŅėōÓąö0_ß~ķŽ  ė šāöśßėõUłō(ŚŽäųÉēółņžüé ;żśń!€’µ ź|¹åéž#üž&ńėžż/ę×3åĮ (åūķ ņ4ńö-ś*åŻÜÖŽ£ Ų,-Óżų÷ńÖįĪ’*ž éäėō ę“'9Żö€ ņó ĶJ/uĪ‚"% õßŲ ßėģ óŲč7·üSõĘ "ÓŃöģēū ōķE āFųóHßļł÷ļā %łY šżĶģå Ü ųč¶Ė’ ”ō*śżüż¾ž#/’ūņÖöŌ×­š*Ü<'óĶÜ öÕšŪŪĖ×ļü?#ųą%1ģ#’ Pķń* ÷+śš ó ą źöżü żĻ×ÜÖ*(Į:ņö#óŅ!ßßģķ6X!7üåżłé÷ēé6!öčžųåŪ»ąŻ6­Ó) (ėž4ČįÄč?öäńóź éļė:Ś (ńTļīäśš ä’Žż(F@īūÜÕ±  éæ ?ėųÕóć-ö24šłJ ŲüļO'õKā5ėņļŅā" ļŲńĢ(÷Ų"āüÜģŪü÷ž9żüāņ6!ų> O4ÕšNš.ęāÖĮ ūēÄ%ļ .!CØÖ=ßźÕŌš9ņõ0ö/¶¦yę2Öź&×Ąąž¾ń3$6ģ#/čæ+Wāś\/@"įńfŹņ#鼝ØįKĆūśņ /;šaōŽīšüŪĘŚŽģ'ćŪå *ńzŗ ÓōÉ)$Ūś$ä÷ōõ)²ī9)éńåõ"ąd%*€Ł$lUĮÓśĻżė)÷«ó’ėųż ō"ó"ō’ė ž 4ņåńåž ( ÜćŹüżųE č’õ÷ł !ō ßĻł%±Ż%ģāū <Õ Ś ūD#!Ś 5ų! ’H/ē+ -ĻüėŽöāä- 6Ł×ŃŁģśųõį)ą!śļėō%ų ńļüŹīģšüżåń!ś ūŃźé łć4õ!żß.·ņ9ł÷ óó&(*²ūäĶĮ÷ ų ćž,ėģ’ūć7Æūģ1ōł¾ŅĢĻŌÓ÷ļ)Ä/’6åč QŹŁł q)&óčŌ## éēīēł’ŻöŁč7śB śBół¶ )ųÜéķžŅęž! ō8  Óū/(ø2Ļ3āóą,łĶÖÉ÷%‹łģķ ¢Ė߯ńń>:ž÷ü!ŚŃū%ō'āŠP4 Ī )Ć÷×ģŽ.ū*żłŽŲÜå¼üź"ķóĪėéģąäńźŲÜ@ čćģąīŽōś å$’ļŹōé’Ųčż-óśŠÖŅÖ"(üåÓź÷"ʬ5 ßł Ćŗ§ śńäĶų  ÷źłżųłżļĪ’ÅĶéü!īžöļOĢö$üõ’ņį įžķ üšŠŲłåēņ*źśū"ńéö’Äš÷õū÷śõ ž!ō ćĻ’ęųžņ%5ō’ļā$ņōżč'óå żé õ%¢ööīųźį łŲžāīČéūģō) ŁåģžŌ ņ’čķ’ žś ųśü š 0ēō žśē.#ö÷ŽŪżå& ōūÕčę’ó÷÷óń$ćč0ūäÄ/’ņ®"åļźūņėķā&ųŌ,’õłŚę Š‚ ¬ź1#÷# čę™dՀµŌśĶ"( ČŪĻųšš Ł¹*€&Ō ³0z1 ĮGSŅ€ēĆq€ĮŌ€aęPĮ#Ŗ7Ųü’+i">OŪ’Ā ÷ łčÜWŒ (€éźWōķB՛ ¾óėžß!ņ/ęĢś@CŹĻä§ųčĘÜJķŽŌ/ŲŪŚĆłåČé€Õ'Ā ņüūå,¾÷Äééæ ćŅķšÓėõųG÷ įśą,0)ź>üźų-śšī"öģŽÕ"Źōē÷ĶŽóÕź Wš &žŚ'ėķŪż×ŌŃėźō#ņÄź  ŻįŽXéčüŽųļśŁź÷ė’ĻŅń Lžģ į$žćöĪ?žõėä] ÷č ūÜåš+ ßö’öįż ÷ü üéõśõüĶ; ś’ÜśéńŚ ļE)Āė å Éõźīż@čĘÕēŻįÜŁā’ūĘł'; ü9«*(ņə[ūĶ÷įį¹>ßFųńąµļŪ\ī'ĻōŠ2ÖźCłų¾ÜŹ9óEśöćś¼#źūNüūĪū!õń' 2Ių)óē8ÓÖŹ+.0īŻ÷;157šņ’śųėVüäöäōżüć)÷į×(āōāĒńńśĆūłāōōŅē3ĒōšŅŚ !éōå) żÆõ%ŪśņšŽčä µżųķōŻķ ŽÜ" ā!õ¹śéõėõóå:Ó.ėŽ ÕēčÖ $ +įņéżĖAž®śļŹėź›: ž ć*"·ēß÷'"2­łÜ # šööūķųĆÜõ čĪšŁ! Ź@įšĶõĻū ę7ńżöIÕ÷ ņ²ŻŹīł÷āöžėÓö! ŽŠõė'āØłŲłŲēśŻ'ųęęćć5Żėūä ü&ŌŲļ×Č’8Ł(ėģūł3÷Ų9ĪÖ÷īū!.äŁóĖž#żō+&  B2żź9łā¶ōėŗŗ5ßžŻóųŪ’×ė%ģżüööķžÜģ÷ĮõŌŌ&üń’ā ģņ żśžķF'ņßīö"śŪų øźŪē8ś >ä %$łśż żšĻū éŪ åųż öųč9ÖĒōžōīį ū!źŚžüóÓūõę ūļ'ēéĪ-ļŹ å-śćÕåńćą+ś Ėõ  ķžõ#!f(&Ļ,éąžō * üżūžõöųõžū,Ķ’Ńż’ś>ü0%Üßīģ’åū’ŚÓēžĀū’ū é ģ öŻÜŲ#2ŻŌē ÖūŃņöķūōįŚżRż ļõóŁāśė"’Aą üēśå3åłŁöõ Ņłå’9ü"ęéęž#ŃżčĘ’’"ūś/ņčęł $Ń’ö#žüŻŌ/ō ö ūšūĶńńõķū Żģś’śäĖŽģū/  õöč ōń÷žśū"ū ;ńś:łüśųö’ēöšīĻō% ķųłū’öūēżų öęīóģå õśóś1ūöłļžŠ ū įżųź'ļß÷õ Ōńßõź+!ś’ųćąń) ū2ēżńš ×ńż "öķņÖžŽÜŁ žšģ÷ ßÖ’Śļöžüż ’ś ųü ńż "ė  óõłå÷ūćģö ółųōŻ ś Ļ ģ ė÷żöżüĀ’Ųžåóśįõųžšņ śāśüžē9ģšō# ż Ųł ģńöņń’šņķżėŖ÷žųü%óżżģ$łõšżū2ųžųś’ńą#Łūūšļź’ō’ńųä÷ žü’ųóõóųžį żż÷÷’āōłī łūłļūüāńŻł ö čžī!ļ&ģų üóģńģļģ'ć*łź#Öż.š' üĘåżęī&čĆö8Ąćńßģžēņ%  ģŁöģößĮä’ ĶŪå+Śźü ēßĻ÷- &ß ćž ė,ųŪõļ½óŚÖņŽé'łź õģ@ąūźś"üģ'-¼'ņśżüōł÷Öļķū) #"ģ ö- ŅĻŽų÷;Óūģų ś’Ō3ŪšźŽé÷źAéūäŽĮ ’ÅżČ ’ÜäĻ÷Ūö5ūķ Śū-ąö/ń ž&īŁ&.1Ģõśöų )žżīõžžžö ŠūżüŲōöś<ž$ė(ķōŻó$ j"ÓŻīźõī čŃņłó±óVöų.-$$āėéļÉŁ ÓšįdĻžóĻĒXģŚfż"šÓųšĒ/Ż÷Eė›GÖļ.äų.T*ĘU÷ŪR6+ęå,ļŃWīļŲ "ó’ܵ1 Ś’š&%¹'ĢŁńÓMݽ*Čī#9ŁĪ •Å8ī½ āäe-ā ,Č6z+Ņņūę9žć¦@īI×1żeė/üå’Ė'’Æ ŲĢѾB:īīņÓśŻQ28ĆųŖ³čæś*ĄĶģŲģłjĻößöć7Ķčńńææ#€ ņŽ*Äѱö-ėöé-é<%źžąń ūņW-ķļ %Ņ!ō; ßÜZń¾ 3ųį(ÅŠĖ*ņā(@ łüęĶŌ9ČŁņō®ō ®€śšģē˜ś>ÖUźž ó_żw @A)+ .āŁž=ź šŸ ł$Wź&»L_ß)ĒŻŻ'ßėéĖĒįę3Ⱦ»&Šö,!ō׳äIÉüõėVāZĖŽ23Õża+ŲņńŽėė `,,ōłø™śŌé*īū'õ;żź ā ŪfÅ8½×ćæūŪāłOčŚļ%Ż+Ūę .Ū÷ŽżżŪł ÷ć,4ĶŲ+#õ©ó9=EĮIįü„ėńńéū’åųõōė$&ė>;9ģ+ įüīØĄŸī’ģßWąųŲĮĢEä¶"ųž,, Ü4"Cā6ō¾żCļ1ēŲć!óģć6RŹī GŽĆźIÜQfäęóEų"-’®ėŽŽņ ¼Ź'ÖGéć’ōś2Ń* ūĖ(ŻųßWļčžś¼·ķŲ1;žŅļ~žūęæų"juņłņYUČŹņ`õ䞎HĪ6 ĶŻō µÖļē8łžĖYŽē!õŌńĶ ś!]`+ßŗ2õō :ś.łąÜÖ%樯ļß4ā+į7šćüȹŌb»ėä3ęōźśĘīSŅĆG ꌯņėų'ĪÓŁĒ"ÉŁąųś 2½ćƒ„Ńó@ J-(#žż +6 0ŠVÖ2ńęūė%ąņ÷Ł\Óų¾äķżĘä8PN—ńčķ-¹¾Śß&"$įųńóé ’ō0īŅĶÅŌõāŻķÖß=Ģņ’K/Ļ&ęæé «ø.žß± šÅż$üŲö é.ē'Ūā#µ'0õŲč_šųķų;5ķŁī ųgĖ 4šŚŌé/ćĪH#Ā×i$3óś#åÕÜ' Čē0ųÜ'ź4ß²Łß ēą+ńŠšßĘš ņ+ŌO +żĪōž®[ ūŚōāŽōš×» łć’ūŪņĆž ļüē''ūņ.ńužä ī<żßžćŻ4’;%ŅšńźēŪöß’üžīą·Dą-ūåČ ąš/Rßėųģš ĢĖ;ż 9€5šž@>ąėū÷!ßūÜśā+«8»ö ńčśł-é’<&’Īóżēęłõųūķżūīžįšüōé ;+óę’ !ü üū’żåł ā ņ©Ū) 4 ×ĀöŪ#³##ÓÉõ%'Ūńņ%šņÖD C āō !- ēīĖ żČķņē×īŃņ$/ūź¶źŁų¹!,ķ”įš' ś GæōõōÄ:ķš&įĘžüßł#šĄūžŻø/Ģ ų2ķŻ’ńń' ėźćŌĻōŽŻ!+Ļõ2ĮóóĘżśž(łäį'E°,.ŗĪ#ęóK#ŁĖWŲ"ńŅŻ'Ö¾–%73ų9 ö ö¤4!æŪ0žēüõł’P+żļ$€¬ żÄłćéčMōŪõY?!žŁ4[-ģ ĖķśĻ"õĻ’ķčģÜł? '4ā)ÕņÓŁn/÷˜S#?‰˜Åå+²čÓ7 ć£ļæŹl35FļŻ(ž¶ø Ā}Bż#šūä%ėżęøWōQæõ¶» $K«ĪéZųą€ī³ ³ ĪŃ"S”äŌķ) ģ'ćŚåŻĆ ū7Ż" ×ļ&ģ-ŅźŁØńéćõŁŽ0!Õģ?õ€źņ’'~ś¬ā4 j?ļ$šÖŻN ŃĀ/ķ$ & Łš$ ļ*,č„8Ęźķ# äēé)üsĮś*Ķ7P$żóé×÷ ę Ü *źNO ŁŖćĪŪȀ#'/ż1"į+½§Ö#ņń2įó9ßÖLšŌęńłķé½ņÓ£üæMąóä ńa Ģńē÷łčĆöQŸ-čīÅÖūW-5 š8Ń+öģ&š%K ä=¶Ōņä¹ń ÅÓž£ßļ’€å2 LÜČŌÖ«Ü„ Ϥ2r²ō€ ³÷ųą=Ģę;³9īĪ’ü¾üŗčĪŌāą š“> į÷ĒģĆ6æ8¾ČóæžåŚFļ '*ÕūŲM’)’&Tūłšōą3żÜB ß·÷Šä(ćŪüūč$ÕäĮų÷äbļĻ’Ņ/²åć ūĄ×Ž,öå’ļ ÅO+ø+÷©%ēźų,懚ż.įó ';ĄŖąĻ(÷Pż1'Ö#Ļū '•Å)")8ŗÕŌ×@ä4ā€3ń÷ņ5(}Ł&ų›<ńž€÷&ģ%Gń¬Ź Põč >oŻķ\ć ńšóĻŽāÄ(Øā ÷#é@õ’źÜ#īēćżÖ!1ĻHāĻ# 7¹Ö×M8&ß - =åśĀÓ 2īłÕ(6%aī÷ó÷ÕFÄė ųĀō÷Żõüü!Ę0÷)×ņ÷ń žķ×’=-žėŖüż“ śó’ōęīń’€ģźżśČčæÜÅŅčŲź—lčŽĻ„īDÜżĶ/ ÷źšŅ>Ōö) `łŲd’(õ)źŌĄÖÕĮ-ėTźā»å pŻ÷@ ÷Š5ōźÜśŽó:=ūT žć½Ū·ę÷'>ś  õ֗×õĪŚ#& Ūö?#'čņńFųæ źŚĒ٬ųųÜŚÜ`üę ŅĒĘȏ莚kR€Ū±I3Złźēŗšąü­ż@ł»Ł÷Õčśg’ÉęńŽ"š ęך*× Ļ ųņ +żū»ąźųNüÅ  #žņéłõšüō0åĮŚĒ»Śõ+ųģÓķå?Ž4żÓ’)ĢRIē¾7õūōėČōš"‹ Ä!ī<Ł;Ąä:ßāćōń įųńķ’ć/ōB&ļēōöāš.Ń?’SŌóėꚊč×Öę“ņū('÷(DéŁ÷üśī¼ÜĆ3ū £ÓóóØž)ą’śė·čYLžģĒ?ėŽ!Ųō% ū&ņ$Ļų0÷tśššĶß!õÕéŪżķ;ųģõ÷č'éŽ Ö ×P+ŪŪ¼ŗä %ąŅ(Łģšžż&ö!ģFńäė=īėQÜßņõ õį&4;’Ü( 0õåÉźž"Aūf ŲĶ < +äš Ć&lÕ²&B÷äŖēJż/!é'ćŌ0åä×¶ZéŚĒÓ Ōź¾-ĆÕ<č¾4õŗī&óōÉ.ąõī÷ør€ö łćō#ĖĆŻå " Ą ęEīŻĒł>ž½óéÓīķ$=ĶC" äžłŽōē5^ G©ēPļ®ń1!¬č ]ŽÜŃü ń±¶7ćõöļ 6ņāų ŹīŖ D&ķččł. ņ÷śĪŁļĶĀ-ę.žż:ÖŪ•«š°„ąŚ į’EæĀāŹĘ$4ŪŃšüĖ/ßčŚÅźĀų: čŪ ńŽų¢0Šż å( óööś*äåÜŚ/±ŁĶæ½ē>å×*ē»ł'ķū ÕÜ÷±ģ. ä"ņŪ«ūō@č)Ģ,K  ź«FÕįņ$Ļ'§ŚŲŌłŅsķņėŚų3žēķžOžśĮÕūF žśÕ½L’"³Z>(Ā.ä ļ4Įń÷ŚöśŖ2ķ÷ö) ĢUŪüį!Š&źó "ā 0Ņźż»ä€Sūą!ēń ż¼óéQ=Öŗ:śšņö%ż7ęŌēéļ Ū Ó<ö"<õ-÷ ķĒźļĄč iś Ćįć;ZłŻØõüŚ*õb×ųĖ `īÄ)żįÉŅ¼ŹśÖ"ęS×ų8ŪŚ PŚčõŌŗōž½ŹÖż  öūö »āž²Ėųšį; Ż?˜Ļźõ m ļ źž;’ŚCٶ¾ŻżęųóĻ™ü0€¶ēRödÜ ėžķßć4¢ Šś.#¤ßÓė&9ź ÷Żķ¶C"œę¾ X0Żåū,ü25ä׹Eō9ęż²*ļ8ĒźųĶ1V7ķĄ’"ķāSżå "«ÕEśēÅņNęŅHū›śŚłiü·ķż įŽ"š ?Ü)ųŁäd™īō ĀžĒśóŹ ė!ńčŻļ’čšę!łKé åĪ!ŌF£äRįāų3­ŌB]ąÖĪŽŲčō - čŻõó3%2$NšŃŠžM:õ ų%āöČéNä×ēĻ>å&į)#JóQ'Öłė>ŌÓń żéō ×@żūÄĀ ŃÄų4ÜŌŠėćįģŪ?ź Ķųšš·ų/04SųFņ’•?$ąéLüāĒÕņÉ?ųŹeXŃ ŹŗōĶłVįēĮĶ ō.D¬.Ų­šĶ ų˜*ćųłVĖ(EęÜī łō/ż<šāVŪE’=&ķųžāCü9žąū@ ŽŅżē Ó é‹. ėžōū!’)(’ küĖåķüDśĀā$Õ%šīąĒś÷Żīüļåō‰ąč0Īé"öœųŪĻüž¼ aaæ$ßėóÜC -ȔāEN’ų!-żńźžöMÕ·õčDųõüåāJÜč °D(ŪēõA"ńźżģśæü£Ō¬Ä0šŽ/Ƶ'ä÷ōżįöŽĒ=ćĶĀÄ'ŪA ļ Ģ•ā-æēņż#W,1ķĆ*ēŌæAŽÕ"łłÉąź š Å żŹßČ4ŠüĢM =ĢķłĆ ōóķģ+:üģė:¦·ö` ĪŃ,ėŪųęśźü÷Ÿ7:ā# īøĢŚ’"ąžę(Ō& łū@łŚņŗ±įĶłŁ!ńßōī—Ż!Ā1.ōėŻż½ĖõŅ*ŽŪ#šš÷rėõčÜāęą­’Ü1üGŅĒ#é ĮźČJøĻ:&čĻŲ:Ł÷Śž"8 š/śģµ+ą>ŠįÉÜšóõŌ}ÕöĻ®ŁTY ó)½ą*ĢCō^äåē¾Ų ńļI3õŌ é°÷ą>—1Ó$ ĶŅīé’°Iżp`1(;Ÿżćæ¹’ÄŪ~āõŽĶ{šĆœ4ļÜ É &ß@7+ā#CHģ8ŒŖĘ0 Ųł=ÓXłmÜ 8ģīb0ń(&ō­»\x *)'łĒD–%ē8ūī’%.÷咧צ’ł 3 ’ÓŹ.ćäāŽŖHŌžęĶéćÕŠŹöļäÄžłŠ@ŻŌżØ&ėŻ½ņäŽ,õ;ļĪī"1XĖĖāĒ>ć<ņ½č>ģяŅĒÉį(āŲä%ßĆ&Gņ"'õ¾ōĆŁ³'Ū²öÜ÷Oųķė¦ĖĢųŻĄ> ]/Śéļķ ÷© .ß,r=F¾»ćź4ķĶņ4ö’ĘóżšcĢ×ä*ģ Ū䷔ č ū$Ķ€öžō$@!¼üĶŻš$ĄĻ;ÓĒņŌé žį~õäō’äõ ķśßßČįż.ę;Ė×ūéŚüŠżß%„ķŲž©óŹķŪ9Ń×*÷1ū×ļ×źĻ¦éä$żT0×)žŽŽļōņ=ļąéāüįŠīŃ+ ńüäAń‡šō%ō!ņśņŻī¦)Ōóī×!ł  W ąŅē’ļę)Æūķöą’ ÕõąĀčżOż<ę÷.ęą%åNŻģŽ#ŚŌ’āč'ż÷-(āÕTģP)!æĶ×Õū8Ģ(7žCüOŅ9š 8śłžĪżåą" ģąķ%ņą ņõžįóųūł ąļź! ¾: ū²ńÅćīõūEöŁļÜõ/EžÖÅĪ:#ć× Ö’@ į AķHĪ$8&DźųęóšĢ/ųū-ļGóī×/ü*+ŃņüķģōźäŌ * ķĒĢķĻÖČ÷ÖH4éś%Ö?6 ā ØśķČÄ$ö ć<ā:ŚĄ 9'ŁDģ²$ż$ßžGė1MŃ 8Ø4ü Ķ’'7õāžŻÓ²!ӍBēųō÷ ø %Ō0ŹĻųÕ銦4ż¹>ĖĢ’Ėo äļ5 6ą6.ž@³Ż) Bķ ō7žõé ė} 4+"9 Ū@%€Įę%[ż ü+'¶čęę7ņBŌßDō$ā#D=ę[ßf’Ņü ײģ$ļū Õ.Ņ-ńųĒÅ×<$õüŃ÷ü÷ ÷ąįĄåŽ4FĶŲóżūŽ(Łū8ńįįń÷÷Ü迊ģÖ’ć4¾ķ(üīģ˼Ēż/ÉųūŃ&»Fīš 澆€éšøä9Mßż#ä˜ ćĻUa1Ś3öö0¾KžūAÕ ŁžÅų㙸ŻO 2&ŃÜć8ļ%ńFk ųÓüųöÖėžŗś*Ó/ßąÜ}ŃŸ WÜ$k >ŠHL€ÓŲ2Ś',ęIRśį! ą%ģŃĮėüń;¤B×.Ųl×ņąFUÉW³TÖ- × )óĻKóóZ‘Ō>pL* ĘŁ²¦[ĀįŪö6ēū=bČ<ķ} éĆҼ7Ōāū4ŠM’ŚžŅÜ+Ų-"Vü!OĄŲńó 8Gņē ݤŲ3“Č A’ų)4#"?,Ż€Œ±uś =ßķ€ųĖ1Ń8&<įŁĀĻ"P×āśēÅäb&"÷'5öHÅ= Ģ.—"ЧŠó<ž$łż'1Ņį½ ŪžųUÉńż½,%“Œ2GŻ ņ“ąĪŚÖR:¢ ŪĄ.Ļ ś WüĖ Ł;ų "ōÕ@łŌéŽŲ±ī!ż=·V ē) <ńéėļšČē”Ņ'Āūļģõ= -×>ļ źųĶ4ū×ļĢćŲäģ:Wõ²ņćļ śµąWšGīƈ$Fēā #$’#>Ń!ä0óĀŻęä ļģŠē44ńŖN/żśĒ÷ś F$ėīŃčTžō9üō(¦«Ųę2ēŻķ.#Ū /? ä1$ę$œ=(25Å Ü ž4 'ųŁĆĢūŅ!Ų?8ćįń#Ķłqžč # ķÓ’  ’WĻī%āü čļ8ĪØüÕū öųÉżžīγu€ĪŲćRJ×äįż4¶źIūD×G%=äŠ$;@r(×ßżŪ)'›¹÷Ā *ī?ŪÕL2ö)ņY ©8ųķółśWśÖ.L+Ü÷Šćē1ŪNL’¢ćO!,® č±Ō ĒDe“1+ʁ¶üQŚö8`&śćķōĢź%«č9K ć$*Q·f0ž($)“ŚZ-5õßļß)ķ䌣ŚņßÜS$āōģé4ōJó"ņ 1ɼģāö,õ*ś'4ķ’ģŻŌ. $üéąG%ķÖóßŚŽ üž× ĮÅŲå8;ļēßNWÓNļųļą ņŁŁ’$ü!Ųé5&į0éōć+ņžJĘķBÓ ķ ŌōļÉšŚÖä (<éÕwé4ŌāGÜž7ŹĀGŻ:%ŗ7ś;ؤ7ż»8*čē9 Ś,ŽA£śŠ×q"’% ”žģņžś-õų{Ćļ*Ā0 Ąśó×!,4×1Łūó $™U35ę’*ćéÖ÷(ė]³ļéÉ(H!’±1ī$ļ ½ģ8ąī) ¦ćį' ķŪõ0)0ĘłJģæ ™ź"ŁžīV,ļįźī>˜šĻ ę&ō% Źī#½Óćü8ŽÕśń=ü/æÖä$ĒęĶū1 $+ ×įŻÅžņ©Āņ„9ņŠPY¶š-ĖŻš6ķ“öĆ$÷äń_4&Žz9Īlėé6÷˜’§óéżņ 舞ń|’ē4Ļ?€Īó€éÜd Õ’šbķ·äō'Ģņ ŅŻćX(!āąL1ÓlßĢ<2”$ņ…#-,Lź-ėżżZ˜Ā¾$€öHĶõŠ żŚC‘?~Ģ-É/U€dÖ'NŲ½ŌK,k"!ūĘ?Æŗ æŹš×+³2Cą\ŸRčÜPÜACõK×õ¶£Įęé(*!ī =ģLųāōī€ Äķų9īŚÓ%@/@ū*ä~Ó ąDÉŽÕ21 ׎óõ Šō%ķßłņC';Ž­'Ż5D"žŅßnž-® /Ķč\C—éÖėõ2æļĀĘö+÷ć’ÕÉ Äń"p#ųšīĶī$ģäŌ>$Įū€ń;ąt ŪąĘ£ėśPBµ3ŅöāĀ# Ųåźķ čŌ’’1ģģéĆ8GSłü )ēĒĢ4,/å\[±!³ö·³ÖĢŁģĶŠōõŠŻęõ+»ŽüMšfW5ŒHā#x$łG9śūšQ“' kž%ĒķķŻ ÜĮ*äÕžõ7ü÷÷7üöŹÖ $Ų¤ž8Ö’÷é ččÓ¾6łõćåūśüŃó­óŽ6Ö@. ŃA$j»Ćžł/źŲCé`žē+ģåŚżų6į³1äæ  ł·É@u’Æ,¼õ3ūūÓrĒŅßėŅåæžīŪó,Ģ*čĒ UģéģčĻņ« üJʗ’jłéE€Żßß'ś%ī׌ 0Åm=ŲO(ī µ5ōš1ćNŅ/ Ļę&ö1_÷Ü굟Ē÷VōųłģĮåŽö!)÷ü"ųę€ē)Ļ65ÆŪ ÄńŽÕęō">05ńŃżćęņųóHĖžsķšźŃьļ^!ē~Ń. / øäļ7ś&ŠŌó ōģ Ü 'ށÄÖļrA"3ŃŅģī<öļJ$Žįāµ/ź1)ū ,Óš1Ö( ż,žĻ’:VīEśųńŲĆOÖłŅfōē'žäī$'ķŻģ=ņŪĖ:ßćV"ž¤?©ųйøŌßį'ĀāŻ!Óū·!įäįŗéó²*ēķ IāŌļ"³Ń8 !OēłżŚó篒¤’åĮ)äü ō )ŲGźōX ā<šé%ĪÜ+)ĪÖ-āž%Ü÷ą (ż5-/8/ėėÉė4CķŃōĪ ²%ĘeŪö/éįłęüš×¢>Ł÷’ Ē£ń!Vī(źē®ā±«ł'@Ś Ļ#čÖ#""ąÉ!Jī#ßīĀłĢ’ 0÷!/×ó C÷&Ąßßž4ĖŻć- “łüśäĪ2Ī’żLė94· ž&ųŚF ćN! #ųĄP¾+äōń©=īāēė Ż ģ1/,æōš ōó4+ö쾿OÅ#°Hü ŅĮJÓҵīŪBź5G ę×ćĶ/µJ²ļēbžŻŽ»"6ē’÷šśĆķśčĖīĄóÜ$’ö.ŖĶ2Ī..Ö-ē;öO@ļļOŠØž6/2÷ŠĻ1ōCā -ż,¾ż4 ä?üźUņ&ŁŽ üģčøN×čü× ś`H“ ō÷šŻ1ą,?1ļ€Ąž ąó;%ōūNõļ6 Žü"8(.ąŽI/óżé*ļ‹-é» čžŪ ü*üüÜāęö4ļĻńą&ć’ļž Ł¾äīē5 9ąÜ šÕ ųƲę (Ó,õź³4ąDżß’ģ ūõņ¹;³-ć0óXŃŽ#ū/’ ļČ÷źż¬łĶś- ąåüó2åģYįóŌ¼–*6“Uūęś< dŠł &ŠO(÷·+ źļ-(Ų¼åÅøĪöžż©¼ä0āśųóA?źöżDśŪäćÕņņ.Ū2ŠŹģ ÷ė ćÉŗćüõ 7D½ąź/Ų6ÅTŚüĒŠ’šįēE3 įÜļķŪķażś%"ņ;·>ģ¼ķēAWč+‚żõŲŃņžźé#0 ²ļ’ó#é żō¢é :NŻćŁį, ĄŌł „F **(ģ¶Ū½LŹ&Ėńźµųŗö!ļń7IņóĢżļ'71%’ ŪĖł B ü- ā;ßŃŻĄ)åäGņŪŗō  ņ -ń= 6C8ŪGāü@ė7ą !ķŃšßņSōČ!źīÉ õĶ- ĢęęMöżłäćéöžŗ!ŁõŃ,[×ø5ĒöGs÷÷éö ėB ¾ń ęÆ0žļėÄ̔ހC>ķž ųĶÖčø“2š'Ļ<ś3ÓźĶ&Ķ7! ŻŃŪ#4-ŪŌ÷Ž'Īśņ0%õū-1,čńģwšŪ±’åżōĘīŽŸš*ąņĖ)=ółīó÷ ö öī5š%Pćé3śž"ÜŪ :Hš6éÕ!#ūJĆD6?/Ō/ŸĢć ūāõģųŪÕ <öC#čÕÕ8ööžÕ*­ź°- ÷Ęčõ öīŻć€*;&/žāō’$4ąRÖš,÷ąI ēī#į½ņb/Üč4Ń÷C ®ė) ×ÅéäćŽćÄ żÖ'‡8’õ4Ö× €ķ-8Ķ/=÷Ė6.9ė ROüKÖO¶¹ē(ģżĒƒö. 7ü= ķeÄņäÉņļ+ī2Ó žśŃé!õ,é#S żóś]@%ć!üłęR¢#-ń!°ź99ééėģµČõŠÓ½ąøÕā7ļōJŽĪŗŸčä ¹ćå2!Š7ė.ŅŁ÷ ŌöŽļ#ē³sźŽöm=Ró2ļ:„Śõüś_ÜÄfśY0Ś*6ü'ÕöšŪņļŃčŽ# §ņųćäŌ ÅWB.&éŻĻčāGö-ū( ā­æśéņļ} ńīĶéżLėÓ/E”čńŃ Łśåüć#„Ų 2ä3"ū,ążķć’öĖF5źöią/Üó#ųˆ(É’CŽ4".Ō%÷ų įåīŪ¢ü“®ōĄÜßņ©$Ś#¾ŲĮļŚ ūÓÖū³/“õŲ«Æ¼9«äž.F7·eü=śóžßčĢP_[Æžę)IY?ÅĖó47%ń’BĻÖčBe9± ō€%Õ . źš:p%½'ŽÕ.J Ō,²ŌėÓļ%0óµĻą— #ĀL% Żj®ķĢ1õ żŃ™Čdė®Ųū ¶"AŲ5š3 öŗ'ßÖÆĪ÷åŽ÷J’3×3¦Ą‹GĒ×ŽŌ u Aą·€ā1@' åćżČkęģąĶ=Ļ1ę³Jb°N½Ą*į čć% ŃĶqõ%ä!ĖéĻrļä R,»įÕK Õßaó/ļß$J ģēš÷#čw(#ĆÜūŲ ?!Éó1%ååŗ¼ž&ķņęß Óō7OīW 3 ółÖ®Õ¼>šāāéÜÕń×õšł ) ó&öą3óÅ1'ńĘ“įŪę+źž6 ķ<Ė łŽś25*ŃćėŪü Ė!žČųźĢļĪęĻŖķ÷ Ļöī #·ń%°¶÷ėÓF/ Jٵ/IśRōōõčū“)ćĢ5õüÉ ņļ÷"ą¶&ā+Ū ūźäźŠĢ ÷5ļėÜJąŁ=!Ē]<õųöĪßęž ń3Rö×$źūśłčŽ@ ŚŠ†Ś):õĖ7vÕūäĄē™źUÉdģļé;żF$éŠÓśßoŪ&Żģ’fććłų ķņŌÕē&é æŲłģūėÖęłPĮ(ōTŽ1žū^ųķ )!¬Eöę%öچ/ę#ēŠ$ŚöśöĒ/7ū1Ä)ĢźŁŁ?EYüčżGų!'7č5ł(IĖB±łŽų ęÖęåų ć šż,ē,ŠōŠŁ©€õ/Ņś *­ĀžĄĆÖģå ā żĄ=źh ź aąń ģ,Fö(ėOūü÷Éēśą@ūü\?ėÅķĶÖß’4!É 5ę,GśĪ)¹ķģĄ+ öI(Åēćē÷ņóJ×ųŅćü ĻĢTĻęģ÷V"Ī5šõÜ=äŃć ¹ōé4YäųS(×)*ó + Ņ;% PāŻ&‹.#ō./ņ6'ēŽåŗÄĪ*Īį)× *šB<ĪóLÜ’ņ#L%&Rįƒ$Hē*åbŻŅ3 !Ūד.ŚB ;Ÿ“Žņ׹Ģ6 )š ō’ ° $ą¾’YŪ÷ 3×ĒĄ%ĻaõČg  ÜÅÕŠ4¤Š(ĶS“Ć`Æhą6 Ó*Ę">ÉöŲÕįĘAćĘÄ ńģī<åä &ÕŌg?4ö€! ­Īä0`,&ŠCŃūōēę5ŅīŽü ä9ī› óņ9.Ķõ½ āńś&šżłÜ ńŃš3 äĀĖļõ1!2ķėŻ ėłÉęųłōŁüįćłßüóē#žē āÓńąĮÖ9õÅēęö*#ļ&ŖōńÉņģ' @EĶéČ»Üéēįų śÅ’/åłš¬:żćöüę!ółūéüņžīēį§ BģęĖĪ9š.š#Ż õĀ0“Ž÷%÷/ęõ ŁC åÄƵ 0Ńķ…Ę 'ąųóŽ(Åū-Ś5ŹKŅßē&ņ'śHų ļī4Ż/éšö*&ßéĻžī# ÅĶŁµćš 7Ā’DķcU ĀōÜś?ź%ą!½F ó -ļ +ć1äļ) ĻŚ"¼ĶŻŁZ&>3ģżśåA=Ń ķŲ-’įģ×(ō/ōf±õ’öüß,øŽżČöŅ9-`X(DBųóŃĖŠBł¹¾ō”įŖł)COSį«žOąĖ>ņfęa֝’ĆöėćHōņķŲĘ7“%ę0€äāéÉį2$Čžķżæ’+·*µŲŽ €ę4ÜŠĢ-*Gźłx üܲļ€Ā€fļY"’ž­‰ 7iųQÕšÕõłėFŁgķj†Ŗłīqɀ’BSąóēéą}Č ÕĒŁ÷d·ėF:!Ęt5ć€UčÜ>ōŪ :FņHé Ūńd éŪ°93åüüł@ó:õĘä>×<;U ņšśõņ®ź!Ćžū2L=Ų¶ķÕōŠYŌ –čłųā}Ā+ćĪ Ę$Jß,Öė6ŁźŽ Ūą &ŒæW@öÓ,'źD Ł>žfÜßźdįÆ1“°ź>f;ÉĒäꗮ)é éćŃčżėČ’ūžö.Gą¼!2%ąÓ'żčßį?GN$é2ĘāŅ:'ń !čGżĘ*żÖżķ'ōé3žüR·1¶7 €A8²÷Ć4ę öļŠ½=-öśų žēŖŻßōÜēĪŠ“D¼“ā ō 38#żŁ )śż’-ķ źŪšžPc 3'õׯžõO-K-š½ėōIč ł÷įķ»Õ ćūYóžÓ*é& č Ųķ4 ŻHąćęšį©Ź/ŪÄ-F ķŠēąąUó’Ń#Rūͼų÷ü$łŻļ.Ę'Ćō’śGīļ Ų äłßF$ķ/,Ó)äēč!#ėńžö Ą"āŁ‘ŽćIłŖō+*ČüĘJŽ ļ6ų įFóšóµčŻ9ėļLś’+ŪU~ ö!å)ģżY¶ßū š Ō)žćź"#żóśōŽÕ¬IŅŁŽĘ +å 4 łÜ ņ äąįōłÖ-ŠŚ' Ļķ4Ż·ņīåüõŃōS@õėņś7õļčž’äóęąįžŃ ),ļų īS)&ī ļ öS įµÉ&ÕĄ¼ č;ņł3ćüģßó-Bļļßęæäµ°īŃżüė*ž-× $Čōķ1ļ žK"RÕüš )äęõ„ō6 Łš?üøŪ%÷,õŲ:ĆåŽ)ńśė 'ü×įéɜ Łūź¼āÖ ģčī.ūüōJĪ>ŪÆęÉźPĻāėåńŹ-›Š%ŽéčłNēžŁķ­  Ęąå4ł2-hóŽ’óęóŚjŠŃģš9ōćQ öŠéš·ŲÜģčK’žŪŃ"[Ģ©SßPēąŽ éēŚśģĘ3"ĀūBĻL#@.)č-ŽņŲ;ßž÷Ō',äŌÕĘäÜóÅ÷ć20½Ģķ Z*8˜2- ĄÄÖ*ńąó ąŃūśwdŹŻ’®üŠęģA5 ņßāÓžó/0ęé  čöļ0"ū茳ą(’'ūéŁčųöŠ-ūõ ÷®Öö«ŗ ;óüĆŪō ļÉóēšęĆļ,'ėįÜš÷-ń īūÄ ø$łŃÉ #÷ēQļ²É2Ė ”źūę0ē žž* ÜŚ1ž.ęÅ#½6C&ņß+ūšēü$żņĢ+%īł¼ģżóžž|xē¦Ö ūć÷"ŲÕz$#޸Ĭłą$łÜääō¹~ģģ’žaMB%ž**z4ńŪJćö×ĪŹ²šųgģ>ąäåÓåLnū>]Ė "Ųž55Łńßóī˜(„Bįń4ąļ¶24äš2ŗćµé<$ćI’D ’öü˜łüóčäøa ū øČū÷Ž1 ²ļ,öįņ!ų(h¤Nē*ńźBüÓĻó0ņNżŖŗļč { ØäŪåæĻĄüß$ŃeąīLōDöUĘĪöķĘĢ$ŻÆ÷ūöŚŁuйężH"Ł"Ń-žģž;·éŪqĢŠ=ÕUŅżÕķō'Éī8üŲéūż捜Ū&ŲAē³%€:ą ĢÓZ÷·%ē'įČżęņēŹ7WV9O@äł’ėµ  ķīĮąäē§Łų Ÿ;ž1ÄP±+āK« ÉąŹŁ+²ł6ŚØĻų¦T*ļļĶ öę õ#šźüĄłTÓś#ł („ŌšÜźłóõł^ĖĆł(= ½äŪ<É. åć`%üöŚ#åńūŲ+FļīĒå]ōīŌėźĆŅ ę, ųóŌį%ģ @ū ōē õīåłÖņłé#åįĆé1 ,ü#8šÓµ ū<ŪæŃźöē$[äķ]‹Śż ÜāūÜ8 óĆė—į+ŻĆć!ę Ņõų*čłųÜ*ä ŻÖÓ ßż¹ź®Öēč@)Ō'ęĶŲŗāāŪ©ūę$'ōśŽö> Óė÷CöŗĘ ņņśŁē īŻ/1łä]Ūņö ać÷§ü ūų$éńÉ©äå’7ņŪ@ŽųołĢaó_Žń4ā įšĮī6č0;éĪį’?3Oāś¦ę®"ēšŖńķö ÷ŪŃś -üėõ’’ÅČŪ!QõčĪė÷›!źčļ:ĻŅÖŁ;ūź?ņė+l!ž~ŻūŃ#֝Kąé.ōóÓķS¼Ū ųo[Śķ]ųöūh¹éŹīĒ2÷FżZö[Ųż®ē½ęĶ3ä+ ņüœ õłūśČŲó ņ6-õĪ€S MƒŽ ž4ų>ģ åāŽ?éBš;ąę&óA¹M/%„Ģ?Ž’ŅJāśYŌś1ó-)öŅ=įe?Įž¢^ ē Ÿ(ļČ$—/"ŁE ńJ’ōōü¬ĀæÕōżńæčūæņæ³ēņ#üĢSąłE÷’$N ł EĪčģŹŹé÷ėŽ"łń6×üŁŅ ē(.(ļ$Ó+ ķ%ž=$Õü9=ņMņÉ2õõč§?˜ėģįńŠ7’žį×Öö1ÖŪ±&ģ4»ųäŅŲ’2Īģ:5'ųżŹöLęŁŃz!ųīä’õŻåĪT(ČAFē#ńå5 €0ź®ń)Jý’ lDėCQ;źéÜķż¾Öųäžš‰P#×īÖ2įåļŲsÆā·’ßÜééŅ;E7½»ņš.LĻéźż.³ŌŃ@ŹéōWT÷śŅ0OŌ]ĀóĒ]$Ō±Ė žŁńś(ģ=ąķćÄĮ:óB߀śa3ń12čšÜŅ .ū§ĘŌ čö *Ķźę055öĀńü$ Ž@łä޾ɫ?x’ ķĆ÷Xś!!Śö"5äŠ ķž6ŌŌ÷ŽAŚßāūŅąņå1ģóĢ2ēśüŠ@ėėĄėę&čģ$ŪÕIŪŪŪö°ā2ĪÖćōśD 7&$"ł#ō¤.:# `üćŠKśķõśłĘVÄ %źĖ+>Łųļ,’Óó’éī Õ( éĮØĢ&Ś™I0!īšč5×Ö %Ŗ&óĶ #:@łĶćžtÜėéźņ 2į#ĪÜ!Ķ”õIŠ :5qĄö $ŽĢĪ1ü0Śūž) Ž8õų ±FųDåę&żąīģóąķĆŪ-#Ś ļ!÷?åÜŚG¾ ßęŚņé gōĪēöę ’ż)łųÜö66ļkģŚi ęŚų6ż=ćϹ“¬źC³ńŲŪ śžŲ ņ*įĒ?ńŚö’śDóC¹ķėģ ēĀ·źą+ź1 ō£ņäņ¼õż!1śÄ%ĮĆ ążŅ÷Uīüśęǜ“&ž ÷žżĆÓ&R4öćā0õ/ļóĒÉ- ¶żMÖĮļņ½ēčéS!ąłŹĶ@, ö¾Ī ū#DTõŻc§/éłļ'śū)Ŗć’:ŽĪźß ڼ6åžŻń&ž!?I( óü'-ķĆ'`ąćJ’ā™ź&ĄØĒźņŽŪéģßų×#śą,2ł K-ŪźöŽ . čĘ?(j"óüōŃšŲ*śwó šųéā ņŗOó ½šźžø2 &ŠŅRųö¾+Hćśė½õÓ"ü¶ų.%X÷X(2@ż(+ āūåöäÆóä%Å÷„žZż("#įōŌėÆ  ¼šč8ž4&Jįßų¼łąŪó;ś.#Üķ®)&Õć’IżfÄ -ÜšŃ?ė"5ųóŁ÷žBżŲ÷ģ54Ŗ/źśļóč¶ėéē4Ļž ¶”*Ö## ¤ŠSī 7,ėóĻūęļūŠü Ń ‰DęPśķ5Ś&ś(Öż[š`ČėėÜĘāÄ%ķżüįģõ& Ūø7ŪZŚŅīģ8żģęõ2÷• ĻŲ$DżāóŌ4·M‘%÷üšuõk(ė$ńµļ)ūŪ@UŲ­×¹#ēŪŽĘ7#2 ø Īē¢Gõ 2 Ńü 1"Ą<ūé’$ :*TĆfÄą$O÷ ŽćÜg€ų ’īŁ×!ś+ęĶ%%%ćŌ$&*Ü“šÖĢ#ä8ū.’#Mś äĪ@>#=ē õÄSäśó/÷ĆæéÕź Mż禶84«¾.é5 õų *? ''õģ^/—Ż]Cõ'óž6ģŌNŚÅ)÷TÜ'!I¬ņ3÷× Ū,"X’łö)ź’ ¬āŲ5 =(éš*é<ō9Sńüų;(ć‹CŻŁ1öp½ų §÷üüąęŲ4ś HĀ ńė%50ß^ėO¤$ņµōōóÉßš&ÓüŪ‚*2į &XźóāIOõ Ć}=óø3C²ķō łØ*Ł.F#ĆÖéą×źŽ³ķó³īüśōÜ=³é-&’ēHć1ÉŌ¼ųū` $Ę=`=\ÓßNÉņ,įõö F×U:ŹÕ:2É#ų&šųÄāB+żńŽŻ$üķĄÆKĮ:R%EĪóĻ!sö%7!-ī ¾"ĒŃżšŃś ķ/óEś OßūÕKöa7ģ³K2<ä'µÄ›ķžēĆŅ7÷ŗ404C Ļ’ŲŠJ#Ź ūćęą ®ĢÉŻ`¹ ½ķ!źBĘęóŚ+ūę3¼Eŗ^Ū'Č­ĀĖśÕŽ/õįūʏüaļäķŚī8Õ'œņ.CĢĢé īč€Ä žū#ę''ó³Ö;ÉŃĶųüä9 õķÕõ÷ś2Ļ4×!ó&KüSŚ °ÜÖóČĶŽ’,Ķ%$µÖōŚæ2Ł&ÄUöĘ<~ńP äŗL*ģ¶<÷ņż»" Å& 'ōßÉĶŹŚĖ&03+Żžķ)ĆõRĮDv9Ōć³ŁĪĒŽåĘ żźNŚé=į7Ē6č³ō£pŅąĖå<Ź­$(Ūžśśģē³įŲ¹¢ÜóēĒÜņ$“Õ ųŸčM #éŽę Ź32ī·å/2!«*"/2żåāā%«Ł/9ä3÷ īóž`łŠ# åÓą@ ÖÖäóŚķä WŅ"€'źĪŽŻšż  Ięė!żų½ŪŌŽ$$ūŚ*+ö¼B%ŪDļŁ¹ģų×ń õį=Ø Y®ļŪF < ³ō°.ķųĄĆāł¶#'dė44ö0īäćÜēĀŽ  * >žÉ:ėŻ čńłšŃ1ÕČÄėåW„Ū’óÖ@é( ü¼ävü×-ĢŚ@6ż3ųĖž%āZĪč„›+4/Ōźę)ģńÜēö-Ż „÷āå2ĖįņHŗ,3ęĆųSŅąc&Ė =" ¼óÓąóęĒń¬)(±ŲĪŌ]Śc ÉōJō}Ēś# #Äļ’į®ņģßļé('ū—õ ßSįE1Į £+̔(ņš(ēZø0:cńµń÷Pļ’Tżšū õ ,cĮŚ ą8ķ &ó%×óŚāćō Žę€ÓüŌ2Ēš-=ųÜ(õŁüQVP!ń÷®Ņ\%ć×Ļe²€ZŹ5ėś5üś õ+ö×*÷šD ģ¾ąē$ ł#żß“pż į¤ż$ź%/_° ž6ćŽįņņóŁÜ ) és»V7 É0%ųė)ž5čŻ"ŠõÜüļ\÷Oā»üõŪ²Äõߊīį« ÉéŲłś¼Ø*Dś’×ō’ī"ĒŻł9ÄŁ5 ³;!A ąP¤"łõ2 Ūé4Ćńųļļ0Z>¼ńųõ:Ö<īĄļ ßś +žÜ4ąļŹĀ½ ą3Å ōHūĆļ’ę(<÷ķ&ī¤7ėÕÜć^cń  -Ųē­õ©Ž ķ?Īīščļ(8ųČŪćŗ]ųŅ„?Eõ\¾ö6×Ųčķ„ Ę:.&䎳 ž’¾9 ’ŪČų ›a Š ź°ÜóBķž[ē Åčņ3"łźł1üīÕżōš-.ŁīéĪ ¼ZĻ Ö?Ż Jóōļš1Ķ2=(æŠč+3ģ㯺.$ ķ ēĪŌČ’Ź†ö Ķ4Žćīéā2éģ ŚŹ9ęå2'Ókč×ļż åĒ öī#Ć č]Ųéß3ś•¬ļ;C¹Ń:Bü)ŠĆįįĻŹéÄł żÕ&õ’.,QÉB #&ó½”ųĮķ DZ0ß;ė®Č ’ żīēüĒ4ż$ĆIŽOČßģŁŠ;üÓÕ3-č *Ś B¢&ėŪ×ŗw‘ŚŽ¾ņr#7ŪhšŪóšüæĶDFēÕ3Õ+,ū ņÜŽŹę¼ ēńŽżŃžZåŁśž,äž'€ĄŻłÉ ķ÷Ļšė+Ó½(=üŪčž/ó'ö$öčŚē’M÷Ģ ĖŠŻ¼üŌFŠūéęµŅŠF ĻŃĘ’ļ@’&ļę@śž #$=ŁŪīĮÕīļü į'× ūź8ßēģų süJ­Čśõ$,Õźüż'„Ņ >Ķ é=śµ ļ õvŗš¼•4·: Žõė#ļŗł"äõž&ū(I='äÓ÷ģžüõļ'ÕDĪ› 2’Ā0" 5č÷Ķģ$ Eī²Vżė_ę čė$¹ņģėöå,&ŠÖ Śå«˜D5IÓļZ3’Ö2ĢÅęĘļÖ¾'ńFÄ"2õD/ÆõB÷{ē>ą=,ž*(+WÅßü5€ĪõĢ0–"ūŠ<żĖ÷R Ż` š €é±čĄ, GĶ ÖÆŠš'ü>ōźÉģź ą#JŽåźŅūė BDśććźÕ 4ÓĀŹ?%šŁėįŅŻųåżŽß ŽŅą ŲTķß ė',ųĪŪĘļš ņ:äżŅßéTō6ßÅķ$ņ1öūēÖäķķ£/ņę ī¶$8 Ń×"5+īžł<żŻģ $ōžīĮė„»÷ å%éÅ æõō'łņ ģēēķäżö 6RAåūöÉģš’!ź%ĄĻēŅž¶£óM(»ū) öŽMĘöõ ųé5ī9 ī8öÜöŃšõ")Īźų å'ņ ļŻ"ūßėÖéŃé5āĆßĶŻ;Š3 ŪčĪ āŅÖÉė-ÕØĖŚć 2Aö ž ŗģńbčūŽÉ2ēķģāåN ŲõĖČ8 ģ+Ž×Qź48žęćŽ ŪJ ž5śüčŚ+Ę’žšØčńāTå"Ą łŌYōß(GžKōß Ą×’Ųū"õĆōHä'žŽdž'Ēż3łJĪ’žę·ŽĘp$Ą¼šż» ;;ćūÜhöģž/ėļį7C­LńļüÅ·'$ Üņ ʾ<ąžĖÆĀė13:łŪ Ūńż/×ėZ×é'(ū' ßēžžß50óBŹśżĄ%ćńžćī>įįś’ŠŻä1ćÄā& ģ ’ą ×õ™Ćōóéūżžż1& ū%ęņÕ’’óMś3éąŌäŚķš)5Ć @ŃæŹśšĢī*&Ią+óü¢2üÅįųąĖ<6Ń IJįų#Ö( üį÷ś¶ėŪó+ūņņZ$éŲ1āöõš Ą¢źĢčHō ß-QļŗŠ!Öčīß·ė#«Žé¶ ŹźŲ>0’`ē' CĆ!É,į@¹Ė!#ĆŪī ¹ÓķŻõ.āń×,ēj3õ43÷ŃśįļžŚž3Č(čń4æ4d6åńŪŚŪ±æ »ļžžčńŗ“źg*ÕėÅųę(%Głźūq °ĀKĖųÉąåł³ €ĆńųōR ŽĢÖq*ē÷,æüŌ ’ŚüĶŚ"ŽöČĄĪāæŽēźßåšÖܼž Į# Ņ śü’{Ģø€Ķł÷WÕč:ĀÕ÷ėų÷żņø7ŚšōĶgéŁĶ+=ņé±åŻĒ2ź4^Ūõéāą>!ü÷šįČ÷ߣ ųĆלÄüķ÷¾’!żĖš.”ø\4¾ā’Ī Õä%šó:÷äżóųĄ öõSŖøočō’ģ,>ß%湌÷®(ÉŚ’ēššĄ ų Ų(ÖöĶZŠ!° ö-õ"ĢÓ )$Ūół=$šõ(ćĖķj’:å! šŲī!æ ų·6ŌżęĄ4ē ģŚć¼śżļąāĪ$»č"æ=šHÖó!ü ńDķćŲóćšāķ-ąĄ’)ڬOUė?č5ž“ąÓīW­“3[ė3Ø©źŅšń= Õ##A÷³ŽHĖ3ĻĮŗĒŪŻÉa“Ęōó<éčīśĖčū5Ż?52ČGSēåÕĪńūÖÜ6#÷×õe‘ķ"Ž? ŽöÖģų€ģ;ļĘ;¾ŁSÖåē8ęó^ŁžŚö/ć25ū%)ųŪ 1õ Ż<ų€m *ģaķ5ŠĘ±UńśĪų:č<Uqų6īK# š#ČĄ”ĒŅ/[ßĘ:ó’Ķ ł÷'äA v:$ č×½%6|1×0V €ńĒõ’ėßńĖ"QĶAųźŲ#Ī4 ;Żķ÷Ī!ė2ė' žś.ķSóīĀū]ÄŪé?ĻēŠć ’SÅž€ł:ś9āąż ņŌ1Įé ī ßśćĢāQ"÷1¾ų ķĻį!ŌźŲęĆ5G6:éõń#ś¾āŲ2žųńēģ9ņļć ąŽšļ/ÆžĪōß ģõĖ·Łīē ąšķęŃį ņÓŁņęęŽÖß"ģä2ČõćČžżėśņē÷śč ×Õ žę "ź0ĶѾņųęõš.£ū śęŲšä(ßėŃŹŅ'ßņął PńöųśŚ ūļēåöü(üķŅģ0łčæōųŪ ’ ČÓó#æ)BŁÄó°ŽäåÄĘĢ’ėś æ½ķ7üż²Ļ>»ŠģŠ ōüڶ Ėł6ōI#ü ± üśŗō¾LĀŅ ŅēŶćģ.·. ė_ īź`ö-;Į$Ļ6ņ ßß,’ ŌĮį$½ż²Ļ$śäŽ°Ųžū ķģ€éČ ß33Ę"ōćjĖ/äKšŚ+Å, ŃŲŲā"WŁĀX*k<§7ø@ #õ €Ūōæ×EÄé¼2P'āī¾Āļ3Ė·ųŪšŽķÄ2€ĄęXŃ3LĀ?ń Å(Ić Ēšīßõ Ć}ūj_ó?ņO»J%ķ?Кå­$ś ūł(Č;ńŃöé ģųéń1ĮćéåA * Į¦ÄL33ķęŅ×¢Ś1}ķ?ƽųÓžģ[°’€Šh Ź ļÜIļŁń Ł F$gžžĀ±õ¹(ĢįĒŁµóÆś­ē,!Fę#! ĘĘ8ņč ė1ó"&ć'å%ęÕ E"Öɤą#ļGĄō4ķŠ·,žæąõ3”ņēśūįéP£ēīģÜōņn>“Džóģłį.ųż,öFę āžüģ$ŚLäęŽöėō żņ²¦ŁŠĢ ĆDśGŲłéÄĢ)žÖóķ’Ź•óŃĶ4 üŪ¹Ś8Éź’×ĒŻś ćŻä ķYó óĆČĆčŽ A&>Żģķ/k" GżCé&-õKDł ›Z8ÕD06ö1ėkģ*įŪčę Øõ*90Č©ęM*ÄåLøłńģ€ #õųŁģ ńPņ:š Ā =!Ną’ń($ā^NJōŃŪ  'ŚÉĢś\1•ÓŪŠ ążšXŪ¬ÉÖ÷ņa@Š÷:Ü 율'ŲĻ Uśdį¢))#žŪõÅé׿߅ ŪéÜįłīóMŌčāļ÷®ę¶ūń ÜĪ:Ę%źėéĪ Ć$öÖ1čŃ.’8 óģŻĮ ńéėĢęą'ź ļ¹Ćė1!īÓ'÷SeÕ!ņēąŻ-ņż×öŠļ)ółĶ8’ćžĀļūńõė2"××äÖ*ąź9é÷ō¶ūŪv)A7üżżļæł0ĢłżŁļ2Ąćī#é-)ŗ<ŪīÖÅ’!GõĒ÷p®Ūć śźĪ$õȵ½ŲĀę ųåŠåT*ÓßŃĮKō3 ķęÅ'ÉŽīPÉéŅś(&ń$!ØŁóīšõ ¬ż1%ĻėNÉżČČüø2ōźóėńōףö÷āä.óæčēõĻĪį łõģŁ3²ō2®Øūś3śåģßÜ õ"ńĖÜććüóĆÖJōź KĀ%*ĆüÅ’ø ō’.ĪņžöŽ5:łćŁĶŹ Ē׳‚é łä67,Ó;Eėż%Ųę8ūG³Ž7śųč, ƒ·ßĻųņØ5ääĪ!śŁŅ×ŪūöNżģšńū™öŃāäÖ+¾ ¾ö$śē$ĪÖĆ”õ/9ßhŲ2ŠėūĆśŽ÷Ų2Ļź Ņ"&Ć·šļź“7’Ä")1)6#ėł śėłķ(ū²šŠšĢ$c" ńėą+¬źńäųåšģĶžżö ÜŹåĻ ¤ō«š<ėā ę+,-#< 9žNß7ę Šėē×>å0)„Ōųć¹ĮņĪķõ,ū6äóą-[Zćœ3óĆF3Ģ1%§+ó’ ŗś čAŚŁāō{ׅŃ3ę%ēēĶß ąŲ±(© >ףĘ)V,ó õžäóēĻ+éłńķ5„Öś3’ɽ"DQ"-ńQüźIč%Ęóŗ čō0üČėĀē4ĮÄųõĢöł ņżĘ õ'ŌÄ*äSķ=(ŅŹõł$õ.õĻć-ņ 9, ŪŌ!"%š9å ØĪ$Ē#ą!Źź²Žä»é÷×ÜŚįLəčRĪ,Ėų*ņŌūŲžÉ<2”+ĶŅūŪżćēģķ5ĪEō æÜėÆč ļćüńżBõʼūāŪ0ŁżāĪ©ž÷ŗä½! īķ;Ęķ)HOžļŌŁŚ Š(ļéōJĀβšŃōų½ķ   !čįĀ ł)-æõßüļą ŪéūõŸŌņęåū5®AēęėūõčĆē<ņß¼²&Õōē<÷„LB)GāÅ,ćĶ5Ū2ēČ ųüŽŚēĖż Öéņ’ä@8! eŅč ¹7ńšŚ"ĻŪ=Žč  ÷ķ:éłń!ģ’ō Ŗå'Ś0$žćą(=%æ(ģų(ģūĻāĆ ,.ĀīńØøņč ß Ł÷ńī½0+śüåŽńóū% Ś ņÕēņē&čå4åüDīdūåĶåĢ%žĪżó(×V½=įūAóäžEó½Nś¹īayüʳ'(ūöĻčŪ'ą; ū<ą ų+ū#éßā9¼ü2ų÷8Ź×ŪņÓA,0Sć7 >óŪ% >žéņó <š5č4į* 'é6&Æ3™ćłæĖ­µ+ ŻźšÉ šü-Š7īź $)ļšĪ)Śü»DĆ.Č«õIßšłĢ-÷Ģ÷*’ Óą'Ų/E8pĖÓ¼ 9 Xģķ©Ņ’ēķ4¹  ĮT_Õ 6+$4?"÷šėįč^cöć1±>Ę$ +ó’m!Źéš ÖäžĢŪ½¹Ż± ʝńŗūņē č‹'@õųBH<¾ż$ņ ņŽęG遞ł:ŲųŃ8÷žKü5čćÖā ¤/õ~üŻö’)#ķ='Ļé„ėæģžŽü"šÅć"°į1'EĖŽåŪŽ’’’Ļėłš)ķ&ā"ŠĒ!ļ!į)%Iī(įöŃ&éō ©ģ"ō­Ęü Ė’äĆ ¬ ŁĻŌÜĢ2óöžźÓĘ>ņ&’÷ężļSĻ,’$: ćēžųš1ŌĖĢų+ŻćŲ3½Üæķ,ŅüĮNHš=©ŁŌ6Hźä+õ Üś’Šę(J]ąĮäüź%“³Ó.śūēāų(·å;Ņ3A ż÷żA?śų ģńä’ō źņęĄäųó6?’ ¼,Ež Å»9åś8ŲĮļT$īń“ŲŽčū,a g&Ķ{²7ķķš!@ųż»9Gå*?ī€>*Š€ų÷X?šÅ±×žœB Vķē'Ł$+żÖ€’āyč9:ļ’ń4]/ž„č“ "ÜėŲ£üušˆżī³ßĶ žń!ž‰ŃŖč #ń=Ģą6īīöĖõŁŪā»;8śUė²C ·S F(KžķCōŃŚóĄĢ}·é;Ī!žĀÜ ęc ²(T*Y×,;)ū Ƶ–ę!ÓĀ+É×\cž“¼ćĆrMŲ'ÕčD@ųA Ž Ž%ēėņCłČļY‘<õ*€7÷ā šķŠ×·©ö:ń%ü”6ĶźŲļÉūŽĻāAЬ ėŅĪpč)Į—%Ö.ŽģóĀ" ī;IżŌüå ēŚżąŹ-õ#ļÓ&čöÉńēžÜāŌ¹3üī%ōī) o ģ!é ŲĶ+’ā" ĘĒWā(ģźš’ ōŪųīŠŁSĖę°3 ó!ÕėÜ/×Ģ÷[Čńń$ąś»Ļrł:É īłŚļųā1.šŽŪ¾óĻ śņ® ī$ćŲļē¹,ėčę"ŁŃųģלBžŲ ėײī²īšóņ2zźš“ĪļļņŽĪōšćÖžģą$Ż ]"éćĶŹ¾õ0ŌĪča6ś,W<óŹ¤Ņ ’Ąšžżļīįūć6 ²õβĘŅšÓ2:Łü0ö¾Åų*&€õ^!ķė¾÷×ēōāōńķšā¼ņ<ņ ę_&Ü&9 6Łš’ʎ߯L# ćÕéłžāņ×įķ# āĖ ę - ßšżł¹Ų?7Õööł ŠĄÜéśńśÕį¶Ž¹ś%5G żż÷åóĪõõbė0F&Ž ÷* ˜łņ$›śŌņ!"ćĘźÖB×’öŪΧޫæźĢ Ū Ö$Ęä%’Š4ąlēXņšfŚöPO0'øäÜ -+ 5°öżńŻļśĘ6į’+×öūü’ćŪē¬ļ+įī#æ ŻZń÷żć,åõŲ?Ę÷»ŅĘ ėŅ įå ö#ĆĖŽš’ĘÖč²rĪ&ūEżē ä6+ŹL ½Ī!āRœśŠ'HĢø;3ćIEź”·żŻź¾ł½ęĒlś ŅŅøćŪ€» ļ02ņDV….•ä4=Ļ=ō%IÖA$ųÜęį .ßIū ÜDłĪ®üČōŽ(źżÄłĶē ńŽc.Ä»óęŻ3 ßēļŪ2*(ōÕŚēęéN^$ īž÷ņŁŅ.ēżņ #ēĮÄļ ¦RÓõ°Ö̹Ņćā öģĀł’Łą ąčĢż’Śņō÷ĻŪ³źM,Ķ&¹ļ&Õńóļ(Iź€ģņĀ×üāåē šäó#’ ŹÓEŻ;ü ’9÷ī6łüåµĖ!ē ōēF³ ĻõœżŹĀŽą“éįŻĘó3ļéµß#žÓöÉŗµē4/ć Ås%įķÖā+®źĪā3<$ąü#Ņ(Bź ų?2ī'žōŁ19ė!å2ōčóź4ņŠń ķ:ŲūÓł. ä’įŗFń;""ßą %>Ļ’+ä 1Ö Óč’ŚFŪÜÖ÷žę¹ōĢż ĖŲüżŖæŻöčAџHžż,Ļę ’čł*ß*Ż_ßT;ńł Ń >čźżeåöķņ Żõ/#>·:AųŃ’0ė4 :Ž»Vwōóē¹(EŠEó±Ü¼Ł:4 BµåMüū#ģŽń$ąōŪ`ɼ,ōĪ 9ÖōéČ*é ęåé%’+åė1ōä0ŗOY5’ Żß =Wé±äCę<é¶ć VŁ 2 öbö#@ڱ§ aœałbłÓByÖ ĢAŸ˜ODF.ćĮ½ ė_) ńõ7ńį0,+Ą§Õó>ļķ/̦ ńńŠķܹā ē'żė$ Ńļčļ ¹B/ ļÜūŃ BĻcśOÄŻ÷ūč’äŻÜõŠFć:xś7ū~īżÄ-óZ$rē÷&×ÖŅō«&½ū=ŃåćCź=/ļ"ĒŹŚ©Ų*ɦĒ#õØJŲōū«Ņ ņļ4ü’“,ņ&ń`ē/ &ŒŁ(ĖńĮģęŅėHŹ4ūįZ2ÜÅNÓęõÆÓŪQ8ŻĻģł ńöņ’Éųč3åį5 ürRč µśüĀĢōH#1Ū™(ģ%Óęäć2'”§Lh =Ż  ģļ›­šę !é éźÆō3Ż’¾łāCČÖé§ņR×Fā-ó聫EČš43 Ųé&VöśŅüćūźĖ+Ż9½ö4ō#ē/˜ššāõó "üąš’£Ąā  ōōėVéę5+EĖł §Žl/Żč÷ķ*īņ%õ,ā#0'čŪīÖŪóÕżöį ŃēŻĢŲΦCĪž !#č÷ģģģ?÷ŪĖŲų&¾ŪžęßćĻH Š<*Tō#ł@ Ó¶’˜īę+ż āé^é,+ŚģåśćAŲ īöŁ ( KĄėĄĆł(Ā)>ō ²0ŪŁžČ0> ­DłÅō$ėĢ"žó8äĀėńŅōąOų#żžźHöS*Č)čĒæé“13ņ½XŪö:ģøļčåż ęõSĪ8ł%# įŚżźčąčĀņa5D"PŹŪŚ $żVAżś>UßFVśŚüūŃįļ&>Ņ0ō0öīõ E- ē<3ęé+Ēē,ś(łóJķ½ūōM»Ņł Š Ń6äčżBČųƀ ĻFKęöŽJĀāœ$Ž%ščĘõGŪėźĮĄ>ū"ā¾”ł'<ģņöH!'õ!Cö Čö&·ŲGń"6#%=RŽÅÜ)õ“Īč€%øŠŃĒó éšó«Öhųå.<Źīæü­Źa8čīū «čåņ §§ä)(ōīå#Õß éĘĪķīčŸ$6ŗ-1Žßś$ ÷> ųŹł?ņZ éĪĢ F ķŚłĆīņĪŠ,Ž'ēVÜīŪ!ČŃ#=µś ņĖŁŌ1Å1ĶÕ ōģ§ Aė0.óžė?ŗņźØ& ¼FžĒŲĶņbŽūŪ™źåIóļź#ąóö Zļ)žŁ!ƒ %g2iÉ Ȳ:”8?1Ż^įJéōßĻD%ļåYÜ-6TĘÖ’ āĢ,:Č Nžöa ĶģKjPŻēßGóŽ“Åģg7QłņĖ ōóšńźK ¬Ā į%'ÄśŠ Ģö÷öM* #ó’“ ī;żĶļ# Ćkćö ĶOņ$ńŚōŅ;))¾ÜŅ=Ō0ėĄ7Ūų2æąŠåRš*źq.ØF*ĢęōČžåČę’ŅF)ė1śÓÖ'ņɦÓųĒ! 9 ŵšē¾ō÷Č<ō¹#įō($Ö DņŽ;0Ņ+éńŁ>Ó" ļū,ē6“(37³:ų²,ä#*M2ņ#’.¶Ššüā $ņü7@ļå×ŅįįłBśåģžłĖ ó-÷ąšÓ­5 Ę) PŅFć÷6Šķ%.%-ÕĒ1ūĢÖ%LCč!"ĒŻéÆC!ō@X"ē)ąń Iä÷/PŽ ųŹö!ūĢ-ĖŽįŹ€žļļ# ļĢ4ēą Ž ņ żŽ*õ&ü¼Ää/]°OõĮóEĀŁę§ĢŪ÷ś·3ōŲė-\Ažīgģ]מ Ź Ō㺒’č+ Īņö¼öL<éł&­žĪMĀżå? é%€āŠä 'Ōæóź ćU- &žŽĒēÄŚI)EąÜō é0ó.ÄYß äüń"(÷õj9ńīüņģó:%š’ ńŸ"…*óż14āĪŹšē;ōś±*€åūģVÕ’ē•Ćö/hüŻÖäķ3Ū łčŲĢå.ÓÖ3­×ėõ•¶Į'¼¹ą:žķQņÆč’µåźōĶń-ūĘĻŌš–8!ś5łæōW4%Īīń]4/$-ūÓų·ūģBEü ĀģD įļčŲäÕJ€éŽ6 ?łĮš/G8=®ļößėb %:žAś®ĢŠĵöėźżŽŠöl’ŹĮÉŠ»²%Õ¾/ń÷ī„ł½\9žŪ"©ÄŪļį żXž’ęĮčąśģś ą°ģh±Éę©Ģčœ$)ńŽ"6“g µµŽŚ1ēąčóž­ēŻčŽõ6Š÷,/wķęČ)ĆŽĪ5 -õ ūżč“ōæßć "’č2G(ģ²Ė 6į6ńÄ÷Ō7’Š/ż=ū29°ÕĆų.ý÷ņ.IĪ1:= õć Īżć¾ī'õżÕß“·Ōć4ÄčųU2ŁėóRńņ1ćVļžĘźŹ HÜ·ą 41ńpė¶šŃĪĢū2U”ņ©¹īåļfAE#GŅ "õäłĢ ŪÄĒóżęĀ ßāąåśė+·LŪ.ūĀöąKśwčŪTü½£/ßķŚĻų,JõÕ²’éå ]ü!’'ōß×-)¦/kōū7"4» ī Ąé<čļųąbŪÜ#äėŽüÕ īN éę öģā,IĆųö Žć מ"Ŗ5é÷Ś÷į÷+>Ū½Ćå÷øŽłÉäÕŲ0ņąČšßŲėÜX łŹó7 7 ō5Ü$=)ūķłé & ń>ŁšhāĄ5õÜżźŅśŪŲš-ģßŪēŽźÄ¶ ł&ŲāŌŪ$0Ź1öŗ¢@ŽėßFÓ׳ļ ī ģ;ć<łńū)łų6šźö,ńŽÅżÖ°ųÜää!Ż®ĘĮŪ:ö8ėó÷-ŠÓööÓ ’äļöŌėģ0ٹü1Śłčš żé½ž\’Ōž.ńśüŽ"īÖłōÓĘ/Ōā÷ ĆŽŗ)Ēj!æŌžėÕįļą3ś÷&*7ś# ¼ōąś©ą&4#ļU€K^2Ó"ŪĄöČéÖžŅŁśĖÜ#ŽóÜs õŠŠń¦#WńŠŲ8"ćCēóæ¶<·ü3" óźW#õŗĢ ūDĀ ųĢU³ģGåņėZŻ' åHū?#VāōÄķĶńŃļ0śæŻˆB³ö ̵ół…ī%ō4%Üä8é źÓÓ,Ż$ßĖ$ųŌ€Ųō8õ!ž®Ž÷ą.ó(&ų'˜ņž%ĪōÕŃ6Ił¾īĶģ¹Óžs?Ńś$ŁQźå’:ĖźÆÅ®ĖÅāHż*6¾ęJöńüÕų5å#~óčeū &Aō!ßä ćķ&)ųxņ/> ń&ø whā«+ ų5ģ*üŪŚķåķ ßūŗÖēåA˜čŠāąńüVĮ Ęź1Ŗ§÷3Ż #ų õ¾µC÷’ņ šĒż Ü “ÓÜcŚżō91"ģ'ō6¾Üåü 莣 µ  ²Ą¾õŽ6JŌŃ:å+’žüś¢ ģ äåäżØķŲ/,ŪĪųBōSBźæ"Łķ8üķõžįī/ĒäłĢęśńÕ#&ą×.šŹüįų.Ćļ— +Ņ#XĖž ×öą×āśčģŌ%žóÜó;īēų4¼Š«ń×I2Ęń-ż»ōśœµŽŅן\ōæ čż9ź)EœB7čJÅōžė(Uģ מöÅŁż™#ņøóüż/R“õō¼@Rįś÷śßĄ šĖĖÜß’ü"&ę_逼°2óķż%Fēŗ×%ĻFqDžūŌčńŁüŪšņģū0įŹŻņD½żųŅ ­õ.鎾üŠ:)×õćÅ’£ż Ēżßb ž@(éźZž\łOÖĪÕņŪŠöč7µž€C# Łņ%ā,6Ię7éĒŽ¶Ć ŹĀĻ6čÜ(.żųšÓ.ÖÜ÷#ĪÅŃÜ3ā7 .ē$Aźńł?üŻaĘ? ļŌŅĒ£(N3L*Ģ»ōŹŽń)õńćć,ĢĪ&åōł" Äń żūŁŹ?ف'éIń¹ķœėgķĢö3ś’*āŠnņ.-AŪęĮÄė @Ū5!Ķļūįų–³ģžĘ¦×ųßūł’,*-õ°ģ ąō5»é83µ’äńīÜ0+Ć%!į—ūšĆ<ó/  /āĢ®qė|āžū > Óś&Śüōę$(ÜŻģųÕü÷@ ĖėÄīø, \ü3Ģ/ń;ķžģŃżńÓ 'Å+/ұSŃö ņ Óś÷ēūóó8śó¼óĮ»!üšåņĮ2Ä»ż=,ՙ’5öłē’:$ÉÜäÆŃŻĄ- ×?ņų€ eųµć÷ņ.Ēėć½ž[ '" Żģō 4Üķģ ÷&÷Ī5ąóL2ūōõńÜī“¶˜Õö’Cźę®ė’ßį&­åÜņÜŚż !Žē1NfŲēē&’ä=Ū/ČŌō Śé ö(ŲŗŃī ż&¹»“åÄ(å Żīēū&Ź čšĮäāÕā1ķ%ØõżÜĄōł!Tšŗ  ū÷ŠĖĻ’łąåšÕ71Ł茌 üž9'¬~'**ć]éųSÅæÖķ+= :Żž+ń$¢ ? ū )%Łń ³×`āŪīę ńņÕć_÷Jwūń!öīļń9ęæ §B(§µżéłķ÷!õ’,ńŽÓębĻ÷ā<’Ō 2õ÷öC+÷āū)"żŪņ-ßģ üÅß3*ģ©'Y Ńė( ż-īōżš(šß¶ó#Ķ Ā°!Ó2åą č*N5īSąüĆź€Ķų@0õē żė čńū<ęą’źŻ%óĘĶ`ŠĻ,tüĪŁ"ī/ń0ń$'×Zš+% õÜüä“ķ’B8Ņ×Ģ" $č’ēšŅ1ć0ļ:ļŗŪŁńć ćóķčŌ2ŽSĻ$(“ĪąžĀóIdķ-ėūźļäī!< "š &) 3 žļ6ąćŪĪH'æ ūļļ.ó¢čū 2ĮŲķė¤ł€ąēłūU|¼Ń.Õü¹<ų¬Ūķ ÷łō!&Ił3Aš3äóįŪ€4ÜI/»ĶūXššGMü·ÜūĘńŪ÷ŻéĖÜ ęÖWķᦤ@ŗåłé<Ž’Ę85DŪéöč2ŠŪŁ6Śęü ļŻēc0Gö&ģ(æņ#ŚŚxõ Ųš°¢ļÆļŽšŃż#łģW“ē÷Äń*« ŚŚü.źŲéĮ±Ļ,=bĦęTō ķ%ß ĖßäŗŽĻćėé"±25Ņ,ļ( Žö"4 üÓį9ų:d# ķņõĆÓ8ł ņ7żÕ*(öżĄŌ-Ļ!ĆżC"ē¼ēÓ“ *Ķ9Ūėā õ.÷šŃ+Ų¾"ŃŪ( ūļł“?€ õ 9ź.ķŹ ųę8ōŹ ųźóż²īÕź+.żÜą)ņ’Pį¬ß,ńńł0äš ŪäĶč å5Ēźņ÷7*ō¢Ģ I4¾)ŌŁŅŽļ¾;. #ŽüŲ)ł'ÄēķßŃūśę (VŠķ#@āS)ĆĪķ¾ Ą,šÄźZīR (üĘźs )6:Č &µĘõ+ n„G(ĒٲņH1뮳łėͱ"ꎯQ)ęžfžĘĆk¹×ÄO@ūœņ+%Öš&(6,Ńū.@ĆŹģšęķ"õóŚÕł Ė|ķāĪK6ėššPåź ™²”Kß2ėZĄļšŃ ŹŻė‹ĮŃ9°Ž€Q: :ž <`Tž‹ńå*ž*ćśėMź_ČóĻįŲļ ® āłŲ "÷ˆ(ņ·IĶė&ē€fõ;Œ€ģ’Ō'É<ŃīÖן¾Źö)ķ0Mšęē6°×ė)UŃņ¹1¶łäATŻÕ°B Š<¤äłīA},ēōäēŁ× Āīfæ# Ļč'öśśŲA<" Ā5ķ“#?$1źJ C_ų€iŲ.+dßĘīįG½ß%ž7N5¹ĢŪÆ ö 3 T#Ōż›<ņ ’ ' üķ'Bęå¶ ’ öźó$6’ö7āė ń4Įõō0ńöåÖō¼āŪŹÓ'ō8>ĒCėł÷ ź ’ Šłõ)Cč,ČŲß7Ö āüłŚņłż=-ėŅ 0 4ø.Å źŠõöĒ̳üį 6$-äĖĀćĶ÷8įēI ŃŹ^(7×,øT’Ü+āAóąŁēŁéęą éČĒłœübūĖ’ų&ßžJ!% ģ,Źļ3õ 'ĮęóśžĪ¬» īē$õܛāņ ļąž’$ęŗųö$Fč20ē öłFļėžÜ7’M0āŲÜN)ęĪ;ķõłüŹ _ßП­1ÉÖ ?%~ū–åįFņ Ńó*1õöKC"&"JžHĄ'ö+Ķšłż’ģä-ü1Źā3ķßŃźųĶ»7- Čž@ķ#ū)ž#ēčP\ž1ĖęåąÄ'ÄŚź=,>#Gžö$żŠWė ėčėóU1ó,:ņ’ęY§6(DźŠĄø2›Ą'/öš÷ķĖč')ļķĖMņ³·é &īņ-ōĮõ Ź/ūē÷ćōźō³œ.TŻU öŽżĖ&ś÷Å ’ ßśź5üū÷AśõäāŌŗŁ+ķņ& ĢÅKõ¶ 'ŻŃįįßÜūžé/=8ččéĢCR1Ž& ÕĖśŅņļ£åžõāŽ 5ż>":ķTņĻ!óöõļĀĮ ćęŲś’B"Ńėó-ųĶŁčĪLA•ē%"0 WXÉóŲ'ü7Õ97 ņ⠜ü%żĀÜĮ—śō“ģ*īęø ķMšŠņŃžÕķųä žžąų%³ėķ"ĀæįīžóüŗųĪč)ģ±Żņ%ŌķśC9ūéųŠ,Ū½ ōńĆž+7äöžķ­ś)ųć”ō.˜ļųC ēŻÕ’’ĄāTųüņŪ©īŽģöĒ ńņäśĘ×ņķŅž¹( ģÄ ū H (*ŗčł)0*ąē3»1"ąńāĻõčžö'"č “ģ%õłķÉėģßōÖöņAżļżų 5.äõÖ ó Žæ õōåē=3’ć(MĢ3īēäļŽÜā0¾ ąĻž ī¹Š+ĢŌĪŚ)ߌž™¬F ļÄaŹćżG9—õĒŌģå'§Å3ēژ3ō" ī)/ėöüņŁēķŃ C æ+ó//É.ÕßųéßķÜóø ÷ßõųQ&a*/óćGżįĄ+5 <Ģ÷ģ śŁų’“³57ķŁeä7ѹņöåļšņß] 4ōŚžĻÄ 0ä)ųõÕéżåģõ'ūųčÖAśēŠĒDeūė ¾ģ 18 ńąö&ę: §č;ÕäÓäéÅj°Æ‰š'ōīµšĮEI±'Żó)X'ø’ŌĖź$Äøžć?čŃūŚ%Ļē µõ4ŗ–Jų+Ō)@ų÷Ōņ`Ł2Ī3QÕļ!$Üõļ,©ń6Õ$śŠńŽźŁ8Ҳ6ģžźķõĢėų8źĄ„,Šōļ8 Ūē’÷)šśćėž%ą€Żæßų<÷ųżÜ /ł&ż&.ųŌĪ Ü·ī&łß?"×ęī¢č5īōŚÕńžDņāõłżÄž÷ ę'ā¾ß+1ŗŪ/śUäžśŻ*ņ®łīī÷Źė”!=Ų ā ½Ģ  ØįŪ)Mķ"į5ģÓāė“éēó$ż’ė2ó*ś± 9TAŪÕ Mźüīąéńń¬0×īL īŖō: ĻžŌ4å>żĢųōß? 3åŚ+*×2銊ų'IŻ)śÓŌ÷Ų'ÄŌVŹ %ę¶šÜ+*ÓÉž’ ("čŽūųĢŹÓäﬨ«ł* öä3×÷»$’Žķ™Xģ4éŚüõųóąÄß*ķZō§ź ęł5;ŻńņEO4ž śö5!éłķœ&żFćī:=ł Ś5Āš.Ķ,śÆĻū9T0!’ćźāUõŽå£ć!:ŌōåŲķ„į™ī0Ś`įń ę­ĘŽAż2ĄÖč@ņŃéėöÓ wųćōó’żē 1õ2É1 šöĻŽvŲ ō:žÄā CŪ&ķ¼’Båų-ņž×'įŅéRķ!ŃÓżB$łŌ ÷źMžµĶ$ē ł¼@%ż=2ß 4öŚć`QóéŲ €„WĪ÷°&%ŅķęļŗŽ#ń Õ ŌŁå×ūą ÷óöīēüÕōÜ<оP-Ń«'UŽS(ö& €ųčćŃżģš)õļ89ŃĄ¼źų½ćó*ćēūč ūÓæū1Ķ Ÿī7Äż3ž "«ūéłę$2ģ÷ŽŌŁŲļĮŪéOķÖIšµ:éŌ3ß(āžóęęę į­’ühżįŅ 0ūŪöæõ’ń-ÅČóńEÉźÖß’óČņēś-5ļė(Ģė¶ŌęāŽ% šÕšĢ:½Õūēō2Ö<ź¬S>šŠ 3#SźHŽ å!Åʎꓚ/į=ė; Üą8/Āš.įö“ŽŽöŻ,ß9ō’äÅ0ĖŹ9%Ėöæ’ń(Ōš0ęģė"éŲ%ź(ŃÕÉÜųą0®P;ןé!Ģ Ī$€™ō'ģ0!·³ģŽß$/@*!ģśūōż€ńø¼õļ[śöĀĀõ>Cōģķ=ŪŠGCą*©Ć Ž3®$_Ü ņ²ļü¾ńŹ?ßBÕåīh×ėå;Ę.āŃčżžm÷ÜŪ-- Ū īąņō¹ÜÜ Ń3ŚŲéÉŃē;OŲcżõßÖP"ŖŲ÷ź½#!-öĻ )™Š÷åŲ38ļ+Õ1=(½öķįńE76 ē7ķŁĮ*śēūÅØ’·#%ß--ßö¼ļC$Č+;ģé#÷øćZöNEõ&@Üż5ŚÕ>ņėü÷fŚė3§ģó@ń:ßł½×) ·:ņLX ÷? Ł#¤“Ö!֏ēócŠk¼¬5, $ūÖXżļ ņ!0éé"£&öÉw ąę*ްNE žw/ 0ß±¹ķåõ(×Č$ģäņ#čßģŃįż ;āö|nó-(”ņU<Öčļ×÷Ģ&ċ š ćŻ4=O÷Ģ’"9J1ŪÕYŌļŌļŽō+æ7#:ś' .ĀīżāĪƒ Wć9ĘĖŗķ%źB÷žź -ō,S5’üę*Óóķ&Ihž1!÷Ÿa!1ūÅķū!ęc+’ų“+Šī»ņFkŠū#ē$ĄęøÖ”ß ’ÜXŽ"Üżź,A’īķ +¼€$5éńō÷ŽŁC<ŃT&Ņņ¼ 9ąīĻĒ'¹Hµ9óé”.JÕ ń B('× śčóāä“ńėļĶĒŽö×Wā tŪóńōē¶1ŁĢ’ ūĒ%å’āć/²ŒK żB·ņ!žO°čŃ'2Žł6 ś¾äHķ5SŃßźYā5Źīš÷ó.ÜŽŁÓ¹ń5ūd-Z¬VśŽ»ĻÜżF“čČcĻöŽļēŖ%<ł ä1Ķ A0ųõįÜ/Žæ’ė<ü‡š¹€žī‘ÆĢ-ųņģ¾Ö鬳ö«€6G&õõĘ+ÖVĒäż³č5Ļųü÷ąÓųAĖš)ę䞮’ŃŽĢKŹc'Ź*åß~Jń.Ąął _Š4Vė\äēķæ Åć¦ųŲ$Ł <Š üÜ$Üā&# ÷ŗĪŪ G$(’óćŅńō>÷ź>&īō/BA#ƶذ;7»śÄIžD²ü56Ū '߀.‘pš1õęÖŌéŁÆGōĄBęā*"įÕēīäČ;ž3C ߙņ ę HŽ3 3ģ %.ÕZķ¹æ_(㊠#ģ¦ź»ųG š #ęęž÷ć ļ ŌŠ &Žć įóĢšć#Ōś)Ą!ZåźČÖüłéņģąŪļäśį¼į+’§/å9ķöź[LōŅÖ4ķ€ł)!Ę õÖĒ*ę0śŁĆ žģļŚŲŌčaÉ ČūŽń 7Õ÷’jóĄīļ>ÖG÷š­ł°āŲ%õź6Żāič#ÖŲÜķ鯒é$SõõŪ5č^¾ó°°_ō˜Žį(Śm>ēĻļĘ:ew× 7Ö­ā %¬ū:Éf€Źś6E(:š„ŻQ.³7ņ ?ł“ėŃ!ĖśŻ öśū&ß Õ’łĘķņÕćÄš¼ķä 1ķēöA\¼ś ’ߤŲJČżģō\ņŁ}šö1:ĢcξHėī%Ō)ż±ę0Q$QūéčÕÜżBĆ,Lś,Ź’ Ÿ0šč4Čż,ż÷YĪ=ų÷—Ż"Ł3×čŚ8ģZõ@’>üĻ":ę˾H"’į)óŪņųįCŚ 'Dž0ņü$ +šä/¼ū’BĄćr’7Ž#ŗāŗŽEņļ ę@"F;Į Œś ņńāō # ŽńYīį&ę9×āéõõ’ķģĻ<,ūö+Ź ä’ēÕ/ģšŪMņ! Ą ń 4čšCė 'Ść.åó2Õ1  ļOŅ"š āćüŽŁŸDĆ0 ńśäéś9±ŪńNā€$ł ;¬ É ĢMé0 ¾é'ŲĄ²r+ĻÉR ūŻ 8żō[é ļŲß$ )ųŁ Ūą Ł > Mżó¹ Öčć¬ņĪć@»9ŌćŸķ½ ÷ £3ū’. .Š»»—µ ÷öńéÕ'ļ$ö8rŚųŅąąJż—+ćHõŚXņö*÷ĻēŒć3ĆūŹ .YżĒWźś3ū(ä`2ūłż®ßņ,åŅķ*Ö÷Ž&_ßų¶ä(’Ś1’=äåˬ›äÜŗ%ėT4Ēś8õü )KĆ : Ēōėżąćcü’ŠūĆĮ%µņóÜóĻ5šł/%ūČANي°āüPŚųčé+&NŻļHų[Š"b¦Ž¼Ó–ķŁæ %3C9t˹ōŃŻėßĖ č®ī)ŻóÅ ĪĒ3õ"V; ĢŽńķįGė Żāü!·ŲĢü5ņ@·£āŲ:ŅŲ*08’ā+ųä ó)iūé Ńźü€_%$.B'$7ņńėüį]€Ķ”źĢB@<ćÉ×C%ég_¶ ^óǵõ! Č#”йŻńšI#/ņóŠ$ćż4 ęģÜŃ%ė6-’üBōķŽōóó]=(Łģ ŅśĪŚ8śż Åė?Ņe<Ū%ŹSŁ4·Pߢėą}.ń($£3 Ņ÷Gž9š ŠZXČĻą3£ĄH²¶U=…܎+[õłóĮų Ūbčżč_üѽ)@ßĮBDć,śāLöš”’ų#żŻčFņ& ė¹éü„×Ęü¹#VįÖPęųėó š[Ž'6ē¾- ęā'ųŻŻÕ0Ę(Īī§öd×ćø(ńį ų=54ó’$÷%(-ÉYźøū1ĖĒķū ī)ž Tś-żłĻ ŻÜ’Ä8ńķŽ÷M:źį2÷$µ!#é’éÅŠ -õĶ9ø.IąČŻö7ćŲų&ćŃĪNļłł,,ōŹ·Ļ Z÷ÓZ: š Įś .ż!ŁšŻśū&ĮöĘŪļ$dÜ÷ģš,ęŹ@ĪĄĪ÷µ Hņb3= {ĆŁöܰB:ož(ŲEńĮ7Yó ų÷żżr kDķöĆ Ī;īŖ&õ£Mõü­źšźū·Wą÷ē½/ż5éŗ_ėŚ 9ėŌóšįC,ÕńPPį-čÖ6Kōµ åŠ ņ ØÄ1\Ģ’ł_śA«M¹8åōüāÄŲÜ öś$1Õūźó5įšūśåS Ųōį$ųö*é3śó,÷ ö 4ā*žėå1ś6 N(FöŻöĆųóżģßö÷ńļ ć&æĖ’ŲÉ%ĆŚÜČćĖ$I$ō3ėīŌüŻó,  ©ą) żóēČ6"Šó ķ4 ūėÖ#5ģŌĢ ÷ÓöšQ:É'éÜ$Ų÷ļńę½ńēćÅł1÷Ųõüā(GĖ&āū#_ .ÓžźīĻĘÖ (āż+öśŹÄ“ Cķ½"9 ičįņ‚ęłh(Tņ÷į óó!Ü@ā#ń.ēS /Lõ5Ź<ēĖ-×āÅ3ģ/ēī˜Gźä@åÄĮēĖ»ĢŅŽń4ęĒžų­ćÕßÄį1śĮęö„؀ aõĆķĢ-ŗ5Ųśłżī1-Č.ążÅ%P2Żår#Į NĒß*>Ė$ó-öMŃž#!ėIć”/4ūēŽ Ąī.ąŚĪę’ŽBļ»%1éü!Ö ūŌČöņ’ ļü_Š/č8ķ"»ńį¾OŚöļł ć/üÄŃņŁ'žź°Ü%øŚż¾«ŠY’ć=į)īŚŸ8ļūĶź÷ =¹óķǾŲ5÷Ė’Ō0ūš7*ńņ"×5’!1ķ 'ąŪńŸõŻņ/.4ōŃÜé¼å3÷ßšń'%żµźģĖÕģęźNŚŀ<Öß"Y ēŽŽŚÜūżõ<āł PéšķÄĖ®łė+ņ-ćž< Ż F/&ų;;©%ż Õßü łü×ćOžńž&óž=å’<ź *HōķŻźŪ÷\7@ßāņ¾EźģĻÉc@ļ+ļė%ź¦Śķż$ś9åūé -ÄåūTžģĻOęÉ$TOĢąŽ_źŅŹŽéķźč ü$ą!×& ōŪt3é Ü” å!šķŁ+»éÖ>ņęUĻö’§ļõŽōļ«[- šž{ē-ÜŠ­Éé % ė¢ā®’ß 4÷2ßōōĘöõō¼W)Žļ|ūą-ķ ŚŽ" ręBõ ī>Ė9Ė"¬ó« įŹ|ģu  OąŠEģü!6ķ)Bąģ`õ!łŽNÕ?$,;õž ų(ł=l“Oēķ²ģ'JVåųŃńół1žÖĆéčū’u³&'œß= ć.,¶÷ą9ØšC¹ϵéż,’/ż’õÜżP#ŃG 12Ņōńāåäāé”Ų’ ėų1ĪŅ)ś,éėÖŚ(<Ž2ĄTć <ß4 U»ü ģ ŹĻōźüūčr ōBĆņ%kŽ5Õą5×/įų½ łńéŃ̘¤TPĆGv"ń$Ā ńē¶šõAH$ńŁÓĮńĘ+ć2ŻūōŅ0ō¬1öŪ ß;ü@¶Ųūé--ÖŲäńąŅŻ ķß<ųŸŽż÷öęāćRš9żūÄ©ēż-$7Ż=ĀóįåŠżĀüĆ÷:#īŖ+;Fč»žå Ź“)Łį Ųģ¹ÅČ )/¢äņńŁ ż"+żīøš'÷ŃÅųē@!7ė÷ŌčČåöGŁ1ģüļŽßāźóÖHęČå #ū9ĪÆ įóķ&ņ×ü9ģ¦õ÷ėė÷ųņ Ōų3ś€üņ ėźį ~Æ’Ėł*śāŚW—š3,  ż"OŁčöšč ļ *>žĪPū¦¼ūļćż ŪėĘčÕé*,žņü ā6Ūž) čņ6ņ'ńņś9ŲčņŗÅįą 2ÜÜē -/öųż4ʽ ÕéłÉĘŹŻŚöóßļų×¼=õöÉśP#2üųŪė śĘ õšŲāė ÷4ł"8 .ÖõŅüūēš%3ß„óŃ„?źė ·CüÖ/"ņZ>ŽQöóū $ž[ņ $ć¾J īķ(ĀT÷Ł óŁõ[ģė9'ö) ź'õ3ü?’ó)ķŌG*¹éÅź Š :ćüB¢Ž?ęńóŲ ßśv’-’2ļ’ųĖ&i?ī)źÅ'Ōéįōżģ'žčüų¾ŃÜ%ū śāśļO źšõų<#)mōž#46ī 4ą÷bŲĪōžž€@%»ķźüŪāKÜŲļ:5÷Ž , *?ōļ%ŁŹēöŹęūņčśįŌńĪ6Õ āō$äÄōń@ "Ų®5åÄÉ\Öõų!žģNöA å”ęįŌŽĪ"ĢõŽÖg"šŻ„Dņē-ų,"ūZ"ĮJč$ēŗ÷æß-ēõä· E9Ū "ęĶ į@÷õ,ōō5ąŃšų) ˆąF ēāāęā ¤ŗc&ćŃē & °å7äĘłł– ĻČń,8čīĒÕÜō÷ü’kłŌžĪVS!ö šÉ÷āĀēÖÉø&æį'Ńūē÷ęļõ) ÷%ĒóŠõš,łļ)či$ļž ēŃ*@ĮÕP ͳ ¾·- ¬¾ōõīŹĖĒ*Ėg6Åļ5éĻČĮń6Łķõ Ė Ī’Ė5ėčČõģ*ŅŻ ?ū“ŪčķūŽąŌćžé5ŗģ'čÜ»ŌūGŁł”ל Ś¢ Ł]Ņ#ŠĒņäīęŚÜšņ WJģ6õµ ½łŽ FōńŃś14*' 3»ąĆųĢŻēų¶ś’EēŲ»B'ѓŽį(ź± €/ōł üā'ūbóJ5ē6+,ÜöÄś '1*Y’"Ö°½*ņĢJĶÉ#ü¦ūŅżŹę#!éõÓĶż6Hģ-ŽŅ[Ö"0ęä)čķ÷Ā$įÖåŁāžŃ&óÖ³E6ü ąšļ 6ćģśóē īō÷"Ō’Ś’Ėłšū­ųīüōĻś’Õż āōéųśśéūīēų( 0 č6Ł’÷G1D éļūP/ś)©;Üčäš įČŪõą2éß°ć CÄ’ ę4ī.DāżīĒģę9Īö–ĶĪČBę_äļ CåŹųżżėž8’ ģČX/īšūé'õĢžū ėęņīõżń5īųńļfåąūłÜ÷QŁ ėˆ0ö¶ž§Ųśäć*žļō īźööé%šĀ (óüč©-÷ļłżI”śņü~Ž üģų’"śčūųū üdē õ ńō€ł—æó ó żž€ õ åū€ņ ś āł"ūżį*¾5ó  ķ’ŃäŌć÷ õ īü š ō åż ųģšł ėēā÷äōžēž ’äńķé żń’&ųļóżļķńžGśÉść’ļ (š' ó ÷ńš źööžģóżöįÄ’ ż žūżóŚŻžö÷ ėöļņņöīłŠó  ž ŅŹÕĒŌņĮŃąÖöΦļćŲÕŪĪŲėŚ×ÉŃćÖŁÄĢČæęŖčÓĘąŽŪÖÅŅ̾źĢŽĘÖÕāŠŪÕĪŌĒāŲ¹”ż¹Ź³äć²ČŽĻŁÖ÷ŻąÄĆŹĻÕÕ½äŪÖčĻČŌŲģ½Ś×ĀĘŁõÉ©ĢÅ®č÷×Ū¬ēłöĪśŃåĶÅŅąßĶŁ±ŲŌąßęēļĒšöčŁŅĘÅŚßņįå¹ķźŅŠ·éŪĪŲŅÄĻĶČļĮŪĮŲęįÕÕēŅÅä·×ąČŪĶŠĮįŌŹŪĒŌęśČĻ»ŪģĶņņė·„ ¬HM,ā¹!Ōņ9!Aüß9Ī&vęå¢õ=jƒD"GŁŁ9¼Ų żł܁ąĒ*ŻĖ Ż(;üÜśŁ³öĒŌÖĪNŻžüā!>¹żż6éąQšņ-ēĶ ü¼łOßīĢĄīAśłŃńėķ+! 0’ńYäńŪ &óĢ ņņ R<!M ÜSŽÖÓg3'Žž%ŅM<‘ĄüŁĒõČMFõ 'ÉŚ.bäå·ķŪōÜö`&Ļ!Ž“÷,éŻå° cä%„ ų™ŚØC:%ŚŲąö4õ÷e¶Pū?¦øģ¹rdĘüOŌ»ŅåōņŠśŚ,{ųņī ,ßń]“3ä ĆĖ-éŅ])Łšą€'ŚÉąDć ‘ ’š a*»īŻŲ(Ģ<2“Č«ņńÉĮĢ-Ė"oéWAŅÕ;źĶ3IQŃż4ÜļĄĮż åļŪī Åņ÷ļšÖų9ųāļ’įƼāśĖņōļ¬ßųś%ćéŅģ"čšłśEÄXĆßCĻ ąźķŻē+æäÜē7Ōæž ¼*6ē³č&üÓĆČēR‡-7ųÓ;ł“ńó]Ó2Ņ5œĄ”ųÅūڱѺUćČ üōąéåŪ6Vśāāą žī'Uąß6ĀĒ4õć ūūDAäĪŻąæ6;ł"źĮåŃžńŻųɶŽ:õüœē*B ¤Źŗāś ę;ŻŅ8ļ>ķü‚Ć1é Z ēšķĀK)M8ćüšźõŚś!+eK NüĘīķÖą÷/ÕRčæ<Ō4ō€ūųŲīē!äܧśõG—«"ĻĮ±¶šiåĒ"ž ®ę'ž ū{dÅĻŹēĄ/ ŠĀŲßēNĒvļŲ½š ńāĮÜ[#õūīä¾ķ/õ “¼†Ó%Õ÷ éņĻQķ×ĪMžöńļļ;i÷śŲģ#¾łąĶ²ń31!F÷( Ō"ń!Bž·Ö4ŪUė@’„=įąšš ėŪóŌöä£÷;Lū ĖĘęūÓ ÜŠ ļąÜ0ł, ž+?×ü2įåü»ęė’ā*00ćąłĘ 'ėų:ž1ƶūą'ŠõM += čó$ =ģ$8aÖŚ!+ąš ćż’žŃĄŪōēąčK’ -żF$ō÷īäŚÕēėõ2&ēõ) ó.¬šŚż¶ Aų,’6Śų霦·=ģ·ĄĒ+s"č×'Ł/ŌŻ ŌĄā:ĀóķĢ÷6Fśž Ņņ Ļ+åŠņüä²ßģŲū7Ņ.ŠDōZųŁA"M@ŃŽÅŚŠįC6ŻłŪ ē'ś ]čę+ Ął<÷ ųe„+4+Ž+ī'ČęļÕüō:(®į2ć×ŖĒé įÉ3%’ēŪAĶå÷qŅčO'Ų÷…}"÷}śéOń*·Ö³ŚÕŒĖšÓü(jȑ-łž!mŹO-FY>+’mÄ'śļ…ÕFn’HSP:f¤n'竺ĒéÉ¢ļ īF ½ŃVL' Ēą $5šõ Ü׏÷ žÄöė29®>ū’ Ҳę,Śžčń4Ė)åĶšL:ą’č¼åŅąé.ŌćEDčķĘėÅ9 \nĄĻŽ›ÆļNežĖP`ō4 śVģą1öūé “šŪ’ŌNĘ83 żm Øł8’³'õöFÄČĒōū9¶ß¤;„é½ó) )( Ī6CćėÖó¼ Žńé<6ē køõķO& "ńü?QĒ« ó*¶$€QūN˜QD˜µśK/?:,ټ ōĪ€ ßīļūęłįÓī5įBŠéā+€`{ŠŌū€ĪŌęĮ7ńśųĆ9&ŁĀ”š!ģ +¤ ?48%&ńņö³Ō¹Ō %ž×ųś×oÕ&UśKļ$6%ŁæÆ>üŌē÷Ō(„ČŻ÷Ē0Ę]Ņ ’-Ł ģA3-āļė0»Ļä5ń'Cū/2mčŽdEņČÖōö,žžōÄ,;IJ õżp«ĻĢŪVŪŚŁœĢŠ”H3’±½µ ö# āŗźćü²'ųõČ9YMC*Éš! öEÓżīņĒپÕż5ŌģŽ&Č.×ģą ŻŅ]ßāĘ21ēóÖõņćģü÷äŅß ź¾5 Śņ/ŽāI'#śKŽóōåĆ ’ęą' žA[Čł:żžėĄš·ńßŪŲ ȀńčJĢŌ ī÷ŹJēė1C įŻē(Ćķ×ļż9ņŽ6ņ śįߐ/čŹņļ[6ÉČĘį¼ŗ%ÆóźR¾¹Ü-åžgęįōēīåą(³Õ żōāß'ėś Ż ²ÜŚū K~EĮć”]ūĒ!·åŃ!Ż,óA³»LԐIŪī*ųŸ!¾ä¾īUČĶ" å@%£’Ұ >ō'.U“éø0Å2 żā'ŁLż6šŌ"?Üī÷`"ķ’9ą%!ŌŚ ęÅōĮÜłļ—CźķŠ ½ŁŲ “ł .Tž ų)åķŁgč“ŲżŲD%$:ėĮŸ$5eaš +õ˜Cŗūō¬į6ų"¼Ņ÷Ėö&é­-¤Ÿ ļ¾ūēų °ä,. ģ·ÉŪ!žNńc÷Ö)5ī5+H$ō7;-E{“ī Zę¶Głš ņ÷47/€¼Öčó>ę!ńČ#ź Ļ!“(A*ėV¬ęäę%»NŅDŚÜ  =ćBĀšł’Ņ!ÆüšĪęÖŒ€ ļ5šĻę’ćĻš:’źŻ ŠģĘ÷žįCłś_įŌ½6Üķ%õ čĒüŹĮ-ō$'’ļT’€ŽĀD=č Üé,!ć6„<ŪįĒJO"ōäģ(4ŲļļģÜ ĖŹ®äśŽĆŅ3ćīÜģÜń·?4p.ē’‰ ś öٽé‰0WĀ'¶6 7¼Ńķō‚ć Eč×,+žęÄh÷Mł(·ų ü&¬Ł™9ļš6, źč3Ō"$€ē/õ>÷üę$'qØį›õŅ!Eꌞ Ł č¤'ŌŪĘ,3ø=§,:ÕÕÖļ[ś¾ų.ć$ö¶ žźéOéœ*ģ HÖĪØļL¦fĻķ%Ž=(üŃõūļÜńā0)åCś śØ;÷õ5óĘęō[2čČ(ä ÷ėMÜķŹēńž:GŹöŽŁą¶üéüģŽ Ą&.åöäÕ5Čē/ ? ķŌāpżßóÖ$7'ŽńŚīß1ł¤É%(ų-ņšąžҬ÷ł ÷QĄGķ¶+Łü&ČŲ³ōóRāą4Cę łö«:ūł1ś’ą$$4÷ö¹IĪū5±“ ÕĢA Õ ]ąF+įA÷;Ź%ÜśÆŲĻūö:+°&É0)-7śübé½é ,ōž4<éĒę!/"ąLŻ7ęóTüōĶ)~ Żī¦’æ.®żŸ0jžėK8/Ūä“YŚūLĮśž+<;߇r ū4ź› QĖüŸöīīĻū'ā éKé«0ĆöŅ8Ņš żŠ5#Eæ#Ā # Įf®6ʾ$-ß9%$#MńTä"hĄóųŁTź’PōńP’¹Ģ”3/D æ4õ#ĢŃå­ģżąķśö£Ē˜Č7ž W0Õ#Śś¾(-8Ó$ŽÄįÅąś OłĪļÅŲFĖõK.2,$Ł ˜óŠaœæ!žėö>?ÉĶ2ņśŪįį'(L+ōų#ļ*ļ°)Ć(AÉąŃČĄ0āćDŲ(įų#żgķÓīõćŹ4AÕł]ģ+«ŅćļģśŻ÷ųĖć&4ńֹܹ‰ĘŻĶļüĶü;Ž!'óä+öłõ²ģæe1€łH(ÄÖöģÜ6Fš ż¬*½M0¾ŖĆįĄ9о»-€ńč0#€×7ģżf( ꁧž6Ē "Lć¼0č试ķ;ņÓU“<&āĖ*ÖģüęāŪĻ®&YTķoßHß93OÅ>l@"²åłÜßąūś8ōĶJGń>ł³¦ņ÷š:żŖĻ+­<®¶Ļw'a^ü/ī6±*$–ķį3£üĻ_p²!ć#Ōķåžāß2€$'B>÷”ė|ś8śQŁĒC“ ūņPȽ%"÷öõÓqßä*&:ļŁņĒ ,Ēé ēõżŅ×54͹2ā%ń7"ģŠĮōģ/+9bßV÷ĢHč-v@ģģźå)/€ņä“d%'1 ā&%üG˜ü  Ąūś‘ģ ąėÜįÉ3ų5ņ9żīÜ ³Čķėś ÷}Ō€Ę;¹%a-ģśū3“½ĢŽ“üņ£äōVŽ8 4Æ’;ϾčÖ %ó×Ūäöż5./ģ Õ\ń(æżĆ>”!3ĮČ,$jéņ'žW/#5Õ L"ą ½żē¹æ=÷Ś’ó-ę.ū =²×;½ž)*į¦*æź0 üźĶ«ū.)ø'ē Åįģ { ķ?“śfś6 Ū5öWõŪōaŠč **]éżĆ“Ņ<Ż^;ļå>õ"3Ć#īš².×&×$īźų5ź 9ļ =óń@üīĢŁ4.Råčü. 7Ļ0ÅŌß’ų; ņŌĒ_Ār¹ūūĢ Ņ.0į»ćéYKō> Ö>ų&źü!$ėŹĖ8ēįńßDzŠćöÖ=ä* ż½$ŅŠšõģ¦ańēūēC“ōß’RÕ^ØDć4Ćžzõó2ėķ /S(å)ńń"ūŲĢS71Öó2ŻćŅ,ł¶ŽäK×ū ł$FaÕļؐļčŗėÄ+ä6I$į4ŅB- äźä»ÖöśÖ-ü:īöŁźŪŚŗ7õ °ģ ā¹ŅĘž4»šĀIŃ”0Ź&ī)  D 9Üö Ō“śą‹Q%å14’ š'Źķ ¦&Č1łė&LüńŲĢYó (ņŚsķįŚīęÆŌ¼ŗņ%åņåÕĮž ±#*éY»ž ž/5Õųõ\ 9ķĒ­ę ŻĆ• »«Ä*-ÕŚęŅ ½üģåė Ū*żÓńöüėéEō;$B!®+åCøėłųūüŅĪéÉ@ńļ—Įż ’ėć ÄR©8ķÜ#vē ūD(,¬ %,8§MšŅĢȶ>½€5N³® ;Ž Ź”7ć&©š¼ī É ]ĄŻ³ņć  :čż« ÷«•ą7U8EŃćė"½xņ"šĮ/_Ūń›Ńōä(ł-Ū€ĖĀOåµė•ßčŗĮņéµJŸ=G‚" €-˜A¼ ė*AäėŹįĻž­6ć^š…˜š'¹÷įA0Ōō(śķĘ(½/[ 1!‚ōī Ņģ%óŽ’p×?Āī-+Wņ’öäģM02ł ė”P(YhAM-ēź†ó,,ŅūąĒīUżį7*0RżńC58²ŌõŹł¼˜¹ī=ł÷źžĢśYó” ŁÆČ½«óéQެĢBY öńŁB" IŗęŪż!Ż ¾&(ģ !ņsõHšĘžūć ˼ņę*!čī!­3ß1ÆR/łėū=ZóČļŠØęĄä8ų÷1Ķ'źįĶÄŽ !ģ4 č3-ZōóĶåßĀÄÓäļĻĄųęŠļß×Õ’ęöÓģČź 'ķśū#ńįįįpĮD+ Ö¾Ļ’ÉżšDėüėčų“žļé*ŹJDīWµ&M¾»ńćĄŃūݰŖż€°ł÷å落ŗĖ|7Ó7¹ÉŁäķĄż  ż8ü~ŸĮ ē3T ~īuÄŌ Œ6ņä€ųæČqó„Eæß *“č“ ŪĢĮf )jÕc·×å¶źÉNßęŌ¶īć 0 -ĻžęĄœ%ĢĮÕ#ūIQ]kß½3ß̦Õ;©Ļ# *Ō>×N%”Ž£Ęį'ŗß7ęļżßåēŒąĘC=æž”ö(ŗ/Q,(.!š ŌT÷/' ö =BĒģ%ābĻĻ>=+½Šė÷&žėĶĄĖ1ž¢Ū Öą5š;’ å:4ōņØ’"ą%ķ€mNĘL„=ŌŌāķVÅ«öž4ĆżAāĢāųHćžäy+7Vä’€ŽĖ`—ōåå¾ŁIßcĘ(śćŹū"čĒZ¾ńĄėÉ<YģP?ń·ĻŌ*ĆščĖĮæMK¼;+^^8Ž4ń1„Ō® é+?ų×UŃŚĪŒ¤ ÓĘńŠA9ė1EŁģąńĢ4 IōkĢČöķ¢ÖÉ»bĪż€ūįż€P!F;ä’ó6©Ńčöńö2§ū’„ü€^ō éįµ5ż²*Z#ūś„+žńäēŽŠ ÷²4ҵėJųåXŲ¦%’UŠÜ&)*Ż;2CÕ*"ŸfqŌäģ/! 'ąŠV$~¼żDĒĒ Õæ§śä/ļķ1IČī¦Öiɉė.ä:8|~'¤'FĄSŁHĀė)ń€ģŠ-»ē·ōŃī:@!Š(ŅŲ1B©ė€Ų’ >×,޵)nŌ;2>0’ØHQĻżćÉĻÅ÷öķ+¹’+· äņĖ#ŲBčāŽk7ņjÅéÜłĖŻ-ś /³ž  ²ōĶ ,/5ūßĢŠ #(ėõ½4ĀÆÖŽ’ŻųĢ Ąø‚ąĖ±IõīŻ Ą ŗ€ķ(įų“(J)½"ÓŅĄMŅ0ļń4Kš¹Õ.&ģ~ōēÕŹ&Ż,åć ÄÖĶł#ĻłÜęŪī›żĻ&Ą;ń2$ŌėłņŠāÜ fĘOļ!Ū7:ö JēŻ <ų7B5ā,Ū"(OŚöćŚģüŃĢ+ń·u 8ŚŽ¾/ę]±Ŗ`ĪĻĒÆŁää(Z#õB)¼&ÆLĮ÷3ŗõP2ņØŻĶ¼néRē!L\ #„A€$½ö×Å×!ś%3ī©€óÕ³Ü×3€Ldd8ģšk³gkŃL0ŽK8:įŁ+4'8µ(ŌąÜ€. šUŚó?°± †ŽŠׯš_ *ĆD²ė¹ŻŃ+|/7€żÜDfČ#†„Ih„€é'Ė51ŪY{õŅsŹ|'ČėŪü²}~ÖѽųņĪ€!ÜdóV$šČ€ģŒū.bf €9&ÄłV2Į.£ö’&ĖŃ.³Ż$Ź-ŲįŅļ÷Ģź1ņųĮÜęć¾&NŪ ģßņŲ( õżš żł#ó¶É ä)=ĆńÕöćŲżż’ĮÉēĆŁŚųÖōįł&ĪAś;"FŌk G N©Ś .9-, Ę čėĪŁ4ń’ōū1öÉ ó­¹ó-$ķöŲnEbėčķõŲałÓ8Ķä³ŪپĄÜ ü=  ė!š®ŹŠō!<ŃFüāäžō#žńĘž*ÜSdN.§-;Åa×¾9č(ī&ü€­;’Ė<ųC2īÜ õÕpÜ=@.å Ķ÷ę,£ī"ź#ģÄ)µ°ŪĻņéžń(č÷®ģž31äćążņę3Ł.@ļ 'ģĖŲUµ'čPåä;ĘśČJģ $Dʒ*ķ$¤µA,HŪü½ŹłįOŗ÷ČęBāõ3ģŚį®ńüNžūQō"KķDõö@Ś;,šgų#’ā÷äīÜOŃöćéĖ÷D''*ŒŗŽ )Ŗ'ÄćßÉöžčŽĄš äī Ķ*6ÄŠä0/ķž× óÕ=ā®(<ŁEßŪ׎īĮĢ-,ūä«#Ž„śVūėį“0ŻÓćTŗßåŌūųłµ:Õ‚J ĒčėččżŃä§ßå.Īg6×čžĆA įĶģń(čūJ¶ĄžŚ÷źō=™żį­ĒHIS+’7½6åżģ(ķõå·ģś$źŌĒĮŃ%ģ’ :ā 0ż<3ųå 0²ĄŠ%o³ļ!2ųÓ,<ĘL˜Ń< &óŚļ9öĄś éÕÅļņŌÉøü(®-ōź6üźGęæī¶5&Žź.ūĮäżē¹Ž‡’Ų ō)pĪėĀå’:–I'ē "ö4Nä—ȾāŽ)1˜““ ĶVįl;LŃą0üŹ-öķ€WDĪĒsń.ŻŽøäś ,ŻźŁ Ż-ē "fāB…ÄōÆ62ļŃK(ŽåĘ%?°—čż*ū cō"Šųžė ęūS£øęŸēłR Ü7¹ŻÓń’Ķņ]žŃīü끷C>¬Ū"3ō)ć-ŽČ%Ļ ó÷é ī8ČųĢĒģ#āŃŌ+ śEżIĘõ~¦2łČ Zž äńS6Ł1’ś½“1)Č# ūhŲ'#³²C#0ūLóęóć@mä"(ļÅż¼ęä»ĒéQł!Ņ (Ć6@(Ų1?:21)č(ó@źHę§öĘ?Ģģ’ć-%:¾Ū©ÅłŪ2¢¶ShćščÜšÅ< Ž0źŹµņ*õšŅ»ČŪM]čŽņ1# ēż%Ł-€ĢģļĪLō; Č÷@ČŌÖ łœ.ķäœ% ÷žŻš(‹Æ²Ø,łē@ƶø²/3ŅōĮąīW1Ū»ś×¬Ä #Ķ ņ"›/ČźÅß^ ōļEßc#.ż0¼Ś)3ż¹2Ń?żćļ"Į8Å"-ßļĒŪžŠ¹ßŚēĒÖĮM6 AęŪŌŽ RÜ5PݾÖCEīČū ģķšÄF#—™÷ßņ$ū¢Ż°I2*'łßFī\ā81ō½Ä"äż+ž.ĖRŠE€Ü&ļQ•’”ēŁ‚5Ć śõģŚJŌ¢! ³dāńRį!“¼gÖY/ „@ԜÜüń Ü śöTńĮŽ~ŃwĪÅĄ€ņ™č).-Å$ņJšīdä=7reś8AäIģēæųč€ć/ķth€g #Ō,įļ;—¾kżē ĆóųŹĪčŠā€Śņ÷™’#ŅŠæą€~FøQóéĆ6 6&ĢŚŅųņöü Ł"! ņĘøļ˜żŅął6ļ9ńŻ +(óä EĘżżā),]’Źßż÷×ö%öūł5ß„»ÉŹć ¼ųŅģ)Śżšųį-ĪBņé$'ė, āÅēäļū,5Ļš*ž!żüóµś įų[ńŽKÄõ&( äBćŽ ģö43ŻA ĆĆī@’żīźńŽčŲņį4īēÜ#Õ Bģ#ż.įżÕšæŚė5XźĘäśöõ½üśČēĘ”')§ŗ ČÕń’<éÜ>ĀĀŹ Ų¾Ķl#ž,#Ńüó9ŽÖDA Åg !G—<óĒi 5 ÖäĻ5ķ?Né1 ų˜Ü9āļ@öā Ė)-N<ū7×4ČĖ×!# ļ±-ūÉŽ"!öӎŗī $ČB ą2Ģļ?šµ׫ääŅÅó1Öģā/š·Ł26Ņ)ł¬ā÷.;äŃÕ f+2é_ł«Ō(fā5 ē)żÖčĘ}ŻĪł*$@#\ÖP&ņ ŚńæŲ$ė)Ņ'O@_?ćD6ēęōźė8L":ā +ĮõīžKųA÷źöŽś-9ķYCXK?ģłüö "[&’śĻ,Ųšģ(¼Ķ ńĪ!īE‚Ļģé˜ öpīūæ‡Ū åŠL /ńžÖ%æļ÷ ÆÅī„łė%1ģ/ėš,"½æ4­,%ģż¤931ō ÜiĶņ*ĄĪžCŖEģ!žĢŻ ×šųį õå‚ ųöh:O§)Å é»ĶĮ*ś·66 ęĻL÷N!ĖųĖǹ oBÉįüīnŌ7ä éć¬x‹+ąa=üčÜĢ/Tņüó,ågž ź÷%;Ļ3ÕšN,čåƶN ö;CēļöåźĘÉ!8łķVŠą×1š7€xļöKŗ fā8÷ ąé ~Ćx’ ōJē@7šĻĆ9椎æ­ėś §WšēŹŚŌ" "ģ/Ū§€„ĆF1ęųLĄG2ćm9vå&ņō/¶æ÷I%Õ'Įāh½ó8šÖ€üż įÕÄĒü’1)‘鿨~ėD€:®ĶNŅģ… 7nęȧ>D5Ńį$#Ļ-ī1ū-ēGŚśFčü’ |GįķĮ0É$R4$#.×1āčõ ČŽŁ^Aļ?»Ž.? ‹C@m#˜š!)߯NS(ü’Óü4 Š(Ü õ¶ż& ć*ņŁåüīīźęųžö@ż÷nś1 ! Ó¼$T,# ąĢ 4.’$T÷%Ģ ;ęėų//ųĻ-0ė1(>ßłė ńäųų$$š+Mōē&ļżåĪ!÷> ė -ą½čżź"ü(éļķŽžÖźĪąŁūöżéĒČ*ž'4i  <ņųÖ-ĘŅ S" ŅE!°  žūæõųāūįķĮF ø?ĻW¹ šB" !į čé DWF¬ÉķÓĖTēŁEė),śŠŗ ń»ųūĀżųō2%&Š'0Ź (CPŗ”Ö ņĻž¾IśŽŁÅß ż)ū-’7öĆ!.¼ŌķÜ !Łü$żöJńśbĆäęė/?śÖĶ röģū׿•šĻīĘ( ń"%ł<ėĢŲŻō?0ęčé·ąpžpśē5'’R FåūšīŪRŗļü§*Ę&Į5.äåćä#Ūå ĀģXĪĢ›MęĖ 4śųī ^  Õū-7ā°āÅ5ņżŽ"×ņ/ēéŪĖń’ZĖ“ Īģū'÷­–&å#+C>Ś€ņ4 &ż1ńZæÄ-üśś5$ē“÷&ū-G¦šMŲć"šõģŻÅ$+ŽŌžś!#ܹ!³@³ ø.ŪӕŃUī»āßŲøåóĢśŌ#ŅÖ® žŽĪŁ“ŹJõŻ)€ņķ$öTńß… Ēś’īļµÄéóĘśĘęż=ą Lł¬6eP,’Ó ±õ“ ¶éŅ»åČč3«)(ŻÓē^Ż€¬OõŹ\”Ž·£įķ÷3É’ ńćŠöŲ›%%J××ī“»ń?"5ėĻ’ė #āõPJ@Dčķ»żķ9żUųmŗČÖ 1ÜØ_@KŅ,üĪęź«ĢĖóČ ’° ķ’åłįI÷d+;ÜCą±Śł–%2’Ōęūŗ6@9 Ō“ĒąčQŽö!“Ö| óŌņß­QeĀ+œÕ(°ā—ƒ1õā/Aŗ$"öK:€ä(ŃęŽä€ēG’.ż<›.LÓŃßg‚šųy%HT×’Ū <>æļ 'oižĀ6Üś>²śšé-¶ģ=i‡Æ„žA£/„r<ŁøåŚö§,ē=WĀ ‘Ä֔-³?80Ā5ēāņ FuæAū¦ī>éö .&’ß¾ŚąyEy2Ś Å*ĖōŃŠ>śĒ×Bč38ļĒ%šĻ:üö õ ČŹŃćėgśBĆøč>īCõžęŌ ČĻP÷Ą¤ń=%«+Ų&č驉ć彚²ķ=£.ĶŁžųķ3 %ĀĒŹļäū ōüšć)z5=šŲ łļqęžŪõŹŪž× ’ō:Ī!ŅųÜąų%>)*öÓ°M&öõŽ=)V<üÓjÉŌŻóõę ī6äēæ Ł0ĪQ ;ż-»¦¼«ż&č:äąłß ķŁŁõ :ŻZ"Źķõ»M@ó[üłŽ>&’ė¼óĪŅ@/-)ķčŲÄįźŠČ€9ī'Ēųßē1ćķRįTęūüę%é-kõž0ļźÓ½$ ä-?’ YųĪž>ÓēŪÜ,& ³ōą8Ų'  įŽ=`(4ō¦śC&)EŠ ĪōĀ.'ń&&ć,HĄ$ žńōŽų/ß )2Ąļó’ $ļÜ+¹ß÷äŹ;šĆĶÕÜŅę>1 ā•õąŅO¶. Käč%HßĶé čö)Ķ&7ĄŹóÅź„żų ń&ā żåŪģ%Š"ó ź<0Ē’Ūóä½ ’ éÖ öūß÷ ÖūįE¾ūüżźōå'įJŁ M ąC&żē9"Ļ# ķÖĖļ÷#łéŪīēāóėü ¾ū+ ūŲöń<"'ųķ.žśŹāEóÕLįēüłŽQ&åĘÓźéšä’Öź ÓMÅ!õśź0üAž.Žü å(šē>ö!ģüģżäåėļ鿎CX 3'¬Ž+ Cå’Śī1ū .ė4¶4Hé 7ņā$ōń>Õ%68Dŗ8€ēāĘčźŌąU RŽ"- čŠ"söĶ'%Ņßļāż>ÉčÖ8Õ ÉśÄōé ĒÜś]ßæā=ųļLźŽ~ūŌĶ öĒt2Įą‘9ŌŠ ^ņēŽļ ļ,:åøä~pžż³5vłć¶ü%ÖMćtĻ5 č ńÆņ äķļ# ;>`źGö©że,ŠĀēīSÖå<Ēp*×H)oķ'D’łŲ¹ŹéŌ#ņ¾?ź(÷õłö+ė‰+ɛb!Žąä»Ų¶Ńįŗź*”,ę/»Ų® · łXö]Jń^ßŪŅĒńcxŚņ¬ó²2Ł/’öėhēI0Z€^(ÉEĮ ä")Ś7.Ż@̓,-Ū€~iķJ¤€Å7\ Ń3#ŠLöźóĒ3Ź ä&ģ4–dƱ1µóśķ“!ĪŃļ½—ŗńI·āFū€ Gö‰8¶±¦P×ńŠ~ŁäŁŪ’6ī" «ŽÕūżĒ8·&I C!Č;’B8-óŗųś“ö©×Oæv ąĪbŃĖŌ€+łĒ"ēōUóDĪGbf*<~ €,²³žWā.ź”EÉ+eų`ēéhõ×=év\ę“÷3Żü÷AĀĮØÖų™³˜k Ņ£&ōó!…üŁČĒõ8łŅŠ&ŅĄŲ6#ų2Óā«€Ó`µ»ÖŪ[ ¬$Żxģå 2įŹDŠM·¦Ś Ŗö(¾åČI?­’ū߂ļIL>ü¢é÷³ų!®åč²b8O §ž\Ļ" ī=ŌÖŲ®$Ķ œ(%C,ōćQZö3!ĢŠµļ5‰ńæ ¬žU)ѹ_l+5Óµ&ł JDßŲ•ēŃž¢šÖčž¾ź/Ž(įšĢZA^ KōŽöü#ž å°:“Šō± üĢEęž¹>šī'`÷÷ž“÷)ęņæ Öõģż įZ-÷5Ē=š¾ 0/ŌūLń2$HŽŪĀ*r×öA7ę"ōč¾Ņ26źŽÜĻŌ’)Iņ<óš1ÓųūõĪįžóŁYāģėź/:üęÖźņĮ ˆ€lūĀō «$Ś: TL25÷5„+,Śī3MÅĘøį;õ?.1Óåź¾äūŹōĒēŲŪ%čFŃŌžLÓ¤4 ēįźµģ,¹ē‚8$ š‘Š śōš”ŻĶ;<żĄ¢ ūń(Ēøńp<*ž4aTÄü@2ß;Ē2¾%%ū ضœbĶćs€ß5üć@‡ ō7 ×īŪš÷?3d”ć×±“’%ķB:9BźźcĒ  Ł+V&Y+kg6ėó;.ÆŽŪė8]Ł‘, ķå_ +ńņÉō?8#±EIŃCUõ0Wś¹łYżĪķē6rÅį€ś źō޾ śö( ĘģŚ9Āśkā„ź€ÄŌļ3ā.ż č Ćß2Ö8kŲ„ÄÓü²Õ­4 `]4čņĻöreÓd šÜÜ£Pßßå,+ü÷ÉGšŸ;ÉăŲńż“µ÷®¼ö#½€š P0,˜ę³½Å&’#’½Ń-å öĶ 3Ó¾':Ł4ąN¾öéÓņ#,؞.P,ŁS<åÆŃ² ęŠå9ķ‹%Ėū5!ķżĀ%ÕŹPöų³ n¼ßōĖ5WĖ˾Ż8÷ ųõ3Öķó„#ę?¾’Ü ś/åøóŹRõ!/ßN (Ī+I 2ķ)€=e4ļŌĪų¦ė/•@įųØI:™/(EŽĘ7DYšĪčźÖ#vā7«ęŌ¶ŽŚ(“Ē-Ķ "š ėģ<’Åē%ÜÜ ų5Łįłš"ń’]÷ŠćĻ5×óŻź8ųų+ŠöųžŠ’584öÅģä­»E€a%š¶Ų+¹,č?MēėĆ ?īÖ# ŻTÉEøL•ń€ż1„PéŌ.7:ڂӰ-ĮėĖ+Ņß ]ł*+ "BĒ'µ&FżŠę€Ņ_ĖG*,šŗ€óļģż)OĶŹ°€€-å&2ÉF>'ͤć2Īē׌B­ż&Ū¶ŹńŠ!ąF¼õķ’€Ę3 [ŗģ (™ŲēĖīŁJ<ÓóĘćõI¤č–½+½…5Žė ņ÷ę'ō„€"Äõ3uŠĢź ūüļ“ĘżŪöŌē $ūß|üDÖ±³)žłäüØ )жäŽ2ßēå®Ä5ÅĮÄĘž‡ŃÖĶjšēĮķæR"bó²kbéō&€%Õ0ļGLśIĮ®ę'é$+n³Öõ1ū 9ÕśŻśz× īĘ%żó×Ō Źģ)IV#ŚĀę»B?ā‡ā¢~öÆĪēā—õœ“ł÷²Nķ;a>ŹĀśŸ²%IÆ63ĄŃ$mŕ 1.ß2Ą-8Į=KŠ,Ėõ»<™#±Qä÷ļÖūįō/dū ė,µ„ŃNČé,­S,öč I×ć³"×ōū ęGāŪV21ž ä’F-T@æ5Łµģł ¤ę ÷ąVÖ'6Ģ š%Ņ ’žņśÕŹ’:Ó)ų¢»Ų¬p ćųÓAĻ ŻėFö%ā5ūĶźśōųßW¾Āū6’Ų#'¾ūø(ž čļśOąėß< 8ėūÖOšō õü4×$ óŹŻ%ŚóöŁ ėų +øÖļüńłź>ÓĶõūæ*ŠńßÓ(Ęßō(ųzŽBļńÄžš)ÅĖņņśÓT<\:ų)S¬ōēJģ;Ę·ūĮ>Ķ#āģņäņčõ4 œėö¶½öĒ1ēŽņ6'ÜĶ(žūöńĻaüŽ÷ęä#Aļ€˜(ż$šł2ūõÕĀ <Õ0ī äHń ź āś)@āk’Ą€öTRŻś ݵ…ś¼ų.ād=Ż ~'ę ¹’.“Ų~–ÅėēE (żŪ;āµś¦”ü3µ5Č_æźż¾Ŗ čN+(PžąŠ#ļÓM+ š ®3 0—ÕŠŃ6-R€5ōĻ&ć—“ńŽŗ›āĢŅP/’ĢÓōC"Ų*b”3™¹]hĮ9ćŖ(¬ę£ķ)$zļ“°ķÖĄŪ ųįĀX‚0žÉ‚ŲŚ4Płų,7é+¹ %*6 *ń“ėą Ī×m¤;ūÕ-‹3åż1×?é°-&€ēāĀE„;ķū؜ŖĄ62B©ść. 7µķ’ńD ź©R$ ¼üÜŲCūōĻ+ĻĖ÷-·I,/ö'ĪźŲć=›?Č)! ÓēÄĻ(Ⱦ”?×*ū!­ōŽ÷#~ų"Ś×ėį0E©HŽķķ&ü$,šėęü/Ū ×59ĖņF- ÅååµĒEż'āOŪ ÉļÉŪ.ų+Óž$Aąü7":¬ õŠŻP$ÅįÕÅÜņÓ)Ū8÷īÜ-×9įźĖ$ółūŅ×9Ń3Ešųš"ń-įßåõ¾,ó Ä41 ŚÄŲ²ĶņĒćYēTī2  ęä÷ė JUöēč ķ9%ūų'Ó¹ćŪįłŁ% R’ šķ$ńöŻõ’-Ä=’ /9 ėĆņ!‘LTÄ ąæÜŁ[@™šÖI€?ņč-ČĪCŻ’@ćõZ0Ūćü8ÖōÉQ:?¶Õ¾žéāš/\NłÜ?@×ŌŠ#Šī9.<̶ū ó0ö(ų^D÷įĘĆÜĻūģŃĶODIóRŅ.Ē4ŗ4ūś Īßė!·1ö¼ õėpåīģį<\ūį8ļ¾Ļżæ©ä ®ćBĶCĆ óųīķI+$¶Ö×OÅZē·™?ILż-/Bö¬±Ŗ#õ4Ć šü äZBķĮķó'Ńčž÷ UŽ«+ ׇGs^ļłūÅB²7"¹X(č÷7(å5åKÖj±mćųĂę AŃš÷įī„čū6{°)Śņ (śķōŲżSüüś>•!š¢ŃQ©śŸjAĆ *.ēģƒ Ÿ5øöԁįļā‡ÖFLĶč(C aå%F šüōĻ0ŗ+žć!!Ń*2żČÆüüŽH©¼"TMū:æ,?ŲŽ’ŽO(Šoę…Bųøõ-.y€ĖŪŠ«DÖøÉÅQ¼Ńō±® I Ā(S7Ķ»\ uõ®W‹ĒźÉ50D²Ź>Ņ2‡.ż>×'ń:Ł)‹«ģēµ‹ķ¢—š$tķäōŲģS ³ ’ÕéäéåŁĘ ®Ź(X{å7ķĒąĖ™ō³ūÜ¢Ķź.ęōłM.ĒīĆĻ õ’ĆĪż@5øJģõVTŲ®B52ŠėĶķ ! C^Ē+Ó%,#Ę)Ļ!5ÖXIξŽ Ŗķ­Ä:ķĮ)mŅÅÖ,Äßė¦-a³ä†04źÖ· š4ņuæIęKŪŽ (Ē.¼26źļĒ Ö. Ļń³EoģīRžÆė[Ś@)ķD ¾Ė–ąēŅ’> nŪ5żšĶ.!äćFō-bĮ’õEѬLé’ «š_*®Ņą0™żI5õÜ«€E/ĢĶ9•Ć 'ź-ÓĘ8Ō© ¾ņIÆźźJHÕä;ąĢ!Pķ*AõŅšśü Ž ¼Ęż ×Ī.Ü)” ­Ī4¶<Ł(:+ÖćŁ÷ /ķĢiłõ.ķŹ¼ąšS'.<Õæ×šó÷)ÅCä¾Öą%ČĄ3 Įź#%3:=Rų$ W‘įõöŽ»JÖ Č9'ā’&9ķźēę́I2÷śųšõŅŽčśģ!ķKµŗŃ ×5Ņ›ē/ S,ŖŠ7ćłžį% MI!LŲVB÷_ĢöŗØ?Ašõ1ī.#æ±!ņŅČ%Ļ ü’@č Ré(÷ōĶ& € ņNĆō&R ¾Óšõ$Ēīöćł ŽūCų@#āÄėŅéųńę/2įŃó11Ž!Z? ×!ńū:Ž×.ņ×BÜ#µߊ¹15DÓÉŁ2Ż4BSŽ $£ĢšŪVü±,ē8D’ "!žžšŪ)Öӑ&Ąėü ĀĖ aé÷Šė^¾ū )Šŗō /½ćĒĀ1Ż…ÖŻCÓ(Ö>EņDc§2±¾ ū@d XļåįDž M1(ųÉŸł.ü"Ż„ތ ‰,[«Ż)01å5(E×<Š’ӉéÅF!ö+ ×ļķ*ĮāģŽž2ŽėEŠÅOĄ³¬E'ŅWBW/ōÓÖūõÅåXĻ/ŖŹ1ę³ńł’Ł5ŪŌ9—łē6 $+K Cųč×ā’2ļž¹)źžą¹Ē 3ńŽņÉńŅęįś’č #ķ 'ąŪ 9 ";Ņ&šęļżģżŌē»(žźśö ×*ž×ŲõūĢįźÜų’-ÖÉŅ%° Ėü Véęģéė.ļó ’"’ 2īŽüćöśūÖIÕ"śĪąĀūīģžē2ż/ż¶ł ś 'ńĶ$łXVõ&Øążģ5.ś’’ Ė: *Žü ćó,Üōźł *#$ńģéūóńća÷5õõSųōģĆaõėŃį“üGšģā+ Y ĒZŲžź¾˜ś#)ņ\õU«Ū 6ī¤ķ’&RüšOÉłÖÖžķ*ü ,śŌÄÜģüč0ėŚš= 8’Ō KJėÓ/ļK/) Ö ė#CvÓ2ųĒ łÆ!Ō^>“¹ī³ėģó1ō (ŽÖ ŽOõ3īąż8Äś’ É öõ ŽõŪ$óŗ½óŽ÷&ź£*?ĒŪ )ł,ȯٰĄńŽ€Źģ#5Ö2Śņ&čŲĘų¦Ņ%č 4äļķ`5&H²×ÖģŌ> ś"+‡ŌŁś9÷Ł€”÷'ŚÅĮ8Dżēėų R5tō× ,ļßÉĢücń’d2Ć=JļžÖśŲŚēeĒč ĻäéėsŹÜ’ÖŻ 1„;Õē  ½ )Ęęü$ÜÄZh÷ß39ėšķżŲ Dļ£õóźš–'ųÉõä*4Öߎł*ōĒīłAå¾ęó&Ćü.äęĢ&ŗķŅ%’ūķM&åü$.łī49źżć÷1lźłöķų&é'^ü!ēĢóļäåųüä!Žö (łś1,óŪīļņīė:łĻś, &$ Õü§HŪń ŠE’"ņ ŠŁ ū#ŪōŽŚ ß.õ9Ōāé4Åéć ņź.4žüÓ9āćß+&% #ķõ4 ŪÖĀī*ėĀ$±Óė2±ÖĻēŃ=L—ęų­@Ū1ĀūčĆńĘ2Šż€‰@XĮéš_\ÆåRöśēżŠõ*÷³Śē`ÉÄ»ößæo1ĄČŽ×",Ž-)#ŪͲYųJäģŽģķĮīš0öžŃæ øźŻžŪ"Ā*Čī]1åźöäJä¾+ø<0üåĒYČ;ß·ŠVĆFųč©8ŌģąåÕ &Z((@ā’ öŃł 9ńĢėžķ ŅłŚĮČŁīēķNžœŗ%ē>$M¼ŠāCąˆ ßõĘøų%O:8Čęā·ģø,ś,Rį āźć«śķ–5į#“õÕ]³QH ę7ĒC^óžĒ-ׯ“¾’½µŹ:ļ!JŪ%"¾&įEį ī÷üž1LĀūš å'Ųśśņ+µļāO %»CÕ Āč¤%¹łnų!_#±ń—õ•ŹÅņ=Ūś ' +Šü$Ļ.ä®9G2öč%ŹN ÅåŚMÕśóņĆņ%ē×*Žļč óķ’ł×!oóńę²#Ł_/&0Ž34 U<ć«ēĻź!źõ2¢ĘŁü,äŃ7ó9C2šņō ŻÄ,$·ņ&0# ¹,å ģ1ńīū ŪŚīK ąō ķ/߯!ŃšŃŌżöķBŹFé<ä*Ė*ėß&Hž-ńęn%Ē!ü–ŁÕ;D©ąŲŔī„ (F;ą-ź6,Ā5āĶūŲ&ŲÜŅ’.3Ļł® Į3|ŪųĀ%E'®ŗæćtŖß ūT Ń·"@€ ē(¶H÷ž4øĒ*5ĢĢż šįDt¶åļūÄ-)ćåÜāHĖYNŚīųĶ&*ķī$+A’åų¾ŗŌŪ7ųńÖų®¼+ßp/ Iö咮Šļć0ń¶ļR9ČßWß®²#ģ! ß9 :įŠÉö ×ļ®» ļßĻZķ:ėČ>ģ74;Š$łŅAh- #ēē5©ĘNļN:ĘŽź³Kčų2-Ļ”ģėĒ÷’ZīĶ®'ģ€ųž6@%Vš³¶ōI?žÆ— $éēųōlH@’*ķ֌ēöČŪļdŗ!Ó?W 0Åł(ūżģRģūÓĶæŪ«é6¶ ,Łß é7ż§÷żż*Üī-ś@ĘćżļēœŅäūĢ(Ķ5 Ö1# '€;žÖn łÜģ²+œķSŠį„’’ŽķÖØłł/Ē.š)= ~!$I"ōć>Ķōś €Įće< ņ•Ģūä÷ŗóżģŪąö Fżž!Ń% ŁȄņžŲ µ÷ėŖäõH^āśD4*"øĮ׿D3’.ąķüś:BöļRÉŌI5ļĒŠB2ŃĪI9Ńé×čĖÄčĘė ļņĆ„ģ? ķI2:!;óķį“×į Śūß%Óīī ½ ōĘź<ł°ŻĄ $éĖŁĻżüé F8 ±%ĄžÓūėܾŚż[ŠÄ„ß(ß ŃŲŚćńē)įāņä ēł,ž“ļ ØŌė³¼÷ń3ś’ŽÜįSĶ‹$ĆĒ:Ņłöāüé,÷ä ā”ć@ˆŃŠź;4=;ż ŽJ²õżš÷Kģ> 8)äļź!ŗüŠ=Ķ Æõ šįØ«F( -é·ēū Eöäū)>]ą ō$÷ō0ÄžŗĒ¶é»ŽąčųéÖäņ¼Ē Rõžö€+Uõ ėĪżŽpü08Œ: ūJ?ĘĖć~š?īāö7ųŌĪVAŠ€A·õžö€łō€Čł@8'&” äŌŗ9 Åęļģ!õ ¾Ņģ !Ōų=āŻĪ#:µbšž B(!‰U0¾čźß ŅŃ(óōęÕשׂæ įŲM?ŗé”ŪD W%åāü#Ōż‹}53Ī¢ ó€īŠ>£QńĀóLėdB7ś9”ƒą÷“ Ż)" ™¼¬łęæĪåé É]Ō^ šäīāŻĒN]2Ö4éĶ2īē(?aą°#ųĄå5*ŅĢEĢ;„÷Py€ģ#&Ż­¶Óü°Ķ]ečŁŌč"ļ&Ņįe."4ūž$Üä¹ąE怩 yQčD>ų ķ ąóC?×ęN ÓĄS׌ųÖf2śžļ«);ؾ‹ó ¬Õä”QŖµ9ņŻśē# *ńŗ•9ēĮę9$Ųż ĀÕ2²ā"&8,Ųā@1ūŅ#,ż–×åŽÜ:Ū÷ õļčķ(ÅøēüśčŽŲŹĖįÜĻö=ó? ōń%ÖĪŁüb’ńēēŽ82ķ:<.½ĻąĻį Öż3 ±żõÜĪćóÓåĒŽń:ļ30 .ķ^Ÿś(ĄĶ÷ńēNŅČį*åŃMĪżÉ1’eļ±āĢ%€šńę%ӛ(ņR©ƒ±ńł“ģß1 ĪĪ č„,™Ęī,÷-&’čāÉ @ +ĖIčóż Ś(ßÓ öėā ēūļ€Wū"ūĒÆ?\ēėņš€šģļ+ɜģČ Fā ōšĒŚϰŻßł-ūõ œĻŲč~×zž Ó°ā/Ā­f¶Cōįi3ę)($ÖŁ23ė’’Ų½éSēĻųµDŽ€2'Ģ øČĢ,š/#Ł3ēā$%Ł Ōś¹ž&: ę)¼’Ö ģ¾į:2śÓŲųā3ä)!?Čī9·Ōå6ćŠūš&< Āgāä7ó9Źóą"ßų€3ŻļńŪżęĪ«Ńä š \ Æ7É3BųIņ/žķļ¾®.uį%ęå('ččņų*Ęń÷Ćõ.Ģ( čūŠļ °Żļ3ÅķI'ÜĶżFŠ ¼Ė$ÄŪŖØč6äøą -¼čČBćīÜå é ’J,°:µö&Ä)üšĘ#źß6Eę.óŲĻZ5Ł īśåŪžśįšé$ūśč ķ!¢&įšłn¾žļAńżų÷üæ× "õŽ4Måć¾ąįŁĮš“ 1(Šśę üRšžS5üĪÖė@ ć ģ.ŚIå.»ķCĪźÕ!üāāŁ/ I“ś&źęōĀĢåūņĶź¾ķü<ēß<&!ā?į8Ė!))"įŻ3 "ĢīĶél½÷.ö RŃÅžģ š@Öüj÷ Ō<6ć²ĀųŸķÅŃä¶SęŅåĀō J óré ÷żßC÷ Ф$d;ĄŽ ŃĮ+ņ^6(Ļ҆ß÷%šMĘ6Šõ·b/0ĮīÓķłź+²ö ļUnÉ밵Ŀ K<µõ@żß€J ĶIģū5*ż-;¾Ü?½ ßäĮĘ’€ /Ņ2"Ž!ǶģÖ>+nõÆ!"%’&Ų©°®ņ@TźĆįUĶ0Łžš& ?÷Ž ŌŃ"ĖŪóµĄ÷ė óö4šą é)2Ņ#ćÓóāś.8ŌJļń0īK ę0QŽóū6)Šgš×@\čī¤(É>+į ÖūĮā(ņ¼±’ć׏żė¼’ŽŹć"Ü,ćŽī! Bš×5įÓĪŹOģŠ¼EÓéEīĻL.¶(żśķTAĆįĘ01Ēõwč^’7$±Uū’·*ģŌŽĀĶŪ÷1Ūį»Ź’y`É\ėż ķŅż(ėõĢĖ.Līģ ŲĮ&īÓäöŹ­ĘŃą% Ž3! !Ūu›āłå °Ųø<ģö ž8"Dś.Wå.7䨓Żõ Yåš"¶ś:Żćī÷+'ķėü¾ĆAĻžFü~ĒŃ"ŲėżąF żņ×ö™ć½qžėā?ž÷ž×õ;ß¾J9’÷ĮĻå'īž!ÅóW ÷+ČóåŹÕķńÜ ļē2ķBÅ%žćūtē žŅūģĖ1āņżCņęõ&ķ’Ķ4Äłźī“ ó£ČGŽ ĻüCåš<Ūņ LŠņ Jņų Ó¾<Ęöŗ-ßųČ/ čōäÓźŽ²0ĮīłėÅąļ2Õ īĮäóį¹ÉŁ¢$ļŪø(ńå/¶ŅśŹšįūRŹķż ŁRį éžõ½T5¬¾ĮĄ ŻĖ7 śā)āóćńćéīŽķ¾ ŌÆļ%āõ95)’ķż’ŗźč’*Õīõū"ī6’ż"»#T0ęÖÜĪ’øÅū×Ņ,ōbō% éYŅß1ń+ļéµį%ŹVųéŽÄē= Ą;ķ‚ź³Ščų#Ę$¹üõšÖ+¶žÜ äŁ&2ć§īJėśõwĘ ÄB‚÷Ä©€ü5É}Ł»Õõæ!Å5šõüłÓ@ųTBß)ĖČ/ģćō'óžĘ§ü`€ä'J+¹ 8±ĒØØŁeŽ05, ÉX¼E;Šņ'ś)ź €āĪLMõ¢ßŚßĄƒééČCõYēū ¼©(" auÕ!ėäDėģ+&)iś®ŗ‘ų2J×XĀ[ēśīZś~5ŸÖł€J–÷ÓBģĪąF8.¼k@?Ķ1IŪ8ÓD 0čś'2ļÉøņ°0żąŽØķž¦®óāæĄńńCåū)óĆ©.[¼Q ŲąB?Ó'Ś÷óÜē× Qµ’ŗr­ņĖJDėāźC.% !*2PĮßéļŃö°ēN&ųÕV;šā@ ÄiŁ•ć TüĄģI,łż ”ö† TŽŲŲ’č’ Q½å.ū(Ā-õDīž43¬įC !ķ½ņ+äĀžņę>8É"!α% ļ4æźé÷üfāįć’qž.ąņšØķćŃć&Ų1āŸŹ%ļėßŪå÷Ņ;ōį1ü•ņĮŖ$Jų ,!āž×L½īĢ <¬įČ’Ļ8ń >>ą)%Ćųėüłųņü!ņ< ėś*9äQęä&óõ .6ė ęż,Ėā8Qžć¼Ć.Ż3Ö č#ī øAūÉĘŪÜŃŚśįŲ+šŃåēÕę8·CŅĮõŗĒõ@ēIūļųJ.ńŪ„Ž×.’%ڳē±Ł:ę'šö&W€JEłMōÜeāČ2äXP še(žüģ½¾…Ėä0Š–Ü€Š) D''(vī ō›'Ż)Gę,0õō …ź#/0"ö -*Ź#EČĆų„ŠįÄ€±Iļ¶ģŃ÷ Ū3VRäčD’\ĘĖĀŃ ¾ź;Ż3÷ń)ŅŹĒē)Š?éÅ#ŻĪD²#—$č=ē×'BńĒ ė÷äõī^Bįß+ö :üL70ó4ļ üÜ.ü"[ģóŽąė{×ĶĢó+õ"’ŲŲ÷ļĮ)ĖæHę”%üą ü*ŃźC ŌŽŻ‘ļć#žFģÕ2ąÄÉ®÷Cā ¹,#Zć Ä1÷ģźäöV’# 6XÅÄ Ūžń.)ĄĆõóū8V.Z$bߎ ŲĶų“· żąąąŅé×8ž ŚŠąøįfög6šÕéÄGU¼;<ČŸ€ųĒ EģĘ2£īäŌ± "ńĒ@()vø[ŽÜö,õ¢¢5JŚVæk €'ÅŖ .ÉĖMčėģ)(ŚŠ€»ß©Ą€łŚAźņ@ģ óÕÕĆŅšå_9"H%¾ĆĀāžĪūnZÜØä '“O!Ą±)_$éo#aŅS~ķ!Š“ųŌźmõš@Ļ©/#Ü2aćGõ€įӄéčĢ÷ßh/ģ Fßģ, Ī/äüāk1Ž'åČŻ"Č5&ÅI’ Łąžē$#ūUń¼# s €ī[ģł˜‘ÜūĪē5äܼżĘųóōģ@FųÉŗPĒļ’BŃžIDų:ʤ¼ó)įõ(ī5æōåŠm,@źįAīŸŲ_Z©/ĶóJś£&Ŗō Óšś+!ÖÕŅŚEķ' öą¬Ģ ēLø3å *Yų ģĻ Uē꛹īūäüÜ2#ėÖāÉŌņņ2óąŃŻūåę?čž,øöõ!]ž ’ĀÖżĖūå Õ’0ė]¾į öÖ ö$ųą šüĒ ’Ęß»ģE*Ņč č3«ööōļ Ś /ō’ś(įššįēų·Łżø%ķ,ŲķŸņ-:ßė,ĻūĻŽŻ“«ÖīĪźž|;ųIĀŚ÷ū÷3ęčBŚųķż ĻóLóē CE6ķķ ūļŚŃ°ęņ& ėąČćų#ÓMśā¹ķ¹āĘģŪŠ'éś=šęüõšéčāōõ ø½.óÜ1j( ś“Ą!Cūžģįč;#ŲėÖģ'ŠŃ$ęō ļ¹Į"Ńåę0ńüĖ; łåÜōż õ,āž÷&üõ÷<Ø!Ø]ĆLGŌ0ÖßāĻX’ōĮš¶ļķÖī3/Xž•įųó|ņę=ßĖfüAo%łwõX€Š.€wÅ(ƒŸņÄWė}Ś0PØž'ÓŌēūųv8Ō2€ļĮśo\čÓo 71Ģ™*åóÖĻd SŻČuV#ēā”R éź%÷¶jV‚łķ€ŗݾŌ/ŽūŹńQŸ2* z;Ż€e’4«£ Ū3füäóʗ īĮ¾=Čņ#¹Ų<怏žåˆęBSģ€> )&ųGāξŻŲ¬=żŻńä,žÅšįä(7°äP •a@6[F(+]Ī* Öå{˜¼źę7ł” LmöP ńŠ€ö1śk—ĒēŪ=4J~~WG× ›*D "’O½BÅń }(磪5ßęŗ 8Ś…µ= Ģ!óę@åų2÷UāķŽ+’DķŠ)Ō¬ę”?„äŲŹ ·0%/ _C”ĻĖ[\ÅDä×ŪčŽē?īąÖ”)å,!ųMrĶß'śĒŽå0äĖóøh¹’ś÷Ėķźæ§-®Ļ4ś/ūų2œ ŚĻšN#Wž1'„’¦»*+ĢćīXķ’ī(ųŲĒö1Ėä3?üŃACćņ8šCčæ'Šū¬µ!ięóF2 Rņ!üĪ:#šóF(Õ*÷ ¢ņ0Œķų'"”ū@FĀ6ķ*ņ ŻĻ ßP!©)čėŠUż!ūÉŅšżą#Ϛ K ÅżÓG\½ńó’Ūö6IóöĄŽŪ ėŚ^Ö%,(Ą’ģ仳@Pó<A-Įkõ-XŽüčāńb󯄎Ēņ4Ćó9öź!Ł‘#%ö#Dōž!ΉCē¾UźĻĻ©ŃźQÉ üšżŹ,ź9/üĻŻŁ·ńÉ"{Óóü\āĪCfŹśéY’å"Ś) >5 Üģ¼īD')śź쳬å§ĘHÉ-ĶŁōöīŲ?.ąļ„ēā÷äõųŃ%ŲÉAī Õ;½&Ī=Nė'ßķ­õŻJééėŃļ/AcĆČ!ž€Ųŗ4ļGńĒ%ńļ Į Jåé?¼µ f5ų&ģæ&ćžä²B üģöÅ’Ō×ö¾M7č¬åĻ ×÷é½T×ŗ0 39ĒcŹįH,sĶž:ēŚ"ūźĮĖó3åŃl é)ŅFÆÓÓóā#הOPYĘ%č©ļ²NŻ Däš?-FÖ×ńšĢD¾­źąGQ¾īSG3åūŁÄ)©XÄ4“ąéž ßQŃńžC¤·éŁģŅō-)ļ3ž¾jüB­ÅŅżšÕ T'Ä! ģ0ōüßĮ5žłŁõ“ŃYŹŗC„ Š#;)ģģÕõ*›żĘüńjGIß Ć00Öņß;\#ł! ’Å"Š,µŲ ßł24tÕ’Ćł; Č“µ=åNž?bÓĄžŁļ·E&‹§/"ćų VäéÖŁśüē¼Ė(ś'öŌ ·éĶ/āļ¶ ’²' ł ž&ōMWłųĪĘ ųĮ8ŗ1ńBŽ[’0÷ę+Kžå¾/4įü <ÕŁA;źį ņāšńł ׹ߜįūÕü&ŁMåJöą1§ 6ÜRļżž6śėė?+õ;8õŚŲŻēāŖeēēķ<ÉķĘ ĶßĆčWå,.ĶŪ6Łļż)ĢÆæCŠ~öÖķĻŹZĪ«’/ģė)>G%”2?:+.ĄŠģ“Ē¢¼GŲƒŁźIņY¦1Ūš“ęߊ×:];ą,4ė ęś*Ȓü›BöNąüń&£€ųČę¾ üźÉ 'üÕå #žjŲ•īń1"Ū+čėćÓø “’ĖķÆ ņćNēźõÜź’Š5üāŲ¶ĢåųÕõ1É/"MįĆōöB§ü#F¼łŃŲ;éū* ŁöĶ 6ĮŅ2 *ŽéųŻ%ŅÓżßžå¬ ·+Žūėķ" ż#Ü:Ča%ķ&øäē#Š3ķÜžō *c^ $śėkżäź×©9ķń$źœ9ĒEńéŠ0µĪŪ Ķ äģ½6ķĄŁ#’­łM§ĻÜ*N°ćŗųó¦ņŌł \#"ķĀĻ.½¶Ė9±źšŗü>ģ˜łĖŃļżDüŪ‚ ēüčŻį“žf¹Ņæ'I)²7Ļ/ß=ėė"ĘĶÕ× ż¦ YCŅ0,ł¼Ä}, ģłŲĻŚ0 Ęų:ŃöWįøAŪ(Ī·;I<ĆĖÖ&ž²Ę-M(+ę7®;A÷*ųń#ß­R6"š¬ŪéśÜ°Ķ4Ź7žżą@åż-“ ÕĮ(–ÜjĒÜŹ¬īę:īŽŽ1MĘ(@ņ éJ#®×ŗ4^ #J!¾Ģ 1&æ1''źńņAąžćå-õółćō,õ1’Ņ÷īü:Õ łįV’ü āR7 !!!łžóŻ#?Ż!)ź8ßšŲźüĘŗ8%āDÕŲČ@€V†ÕŁĢŁĮćŹ)Ļ".ŌÜ0č+ēēģŖź¶źźĶöĢÕ°öÓ?ø0 YÓė2ל‚»Ģ¾č½=Ś"/ć‰“ĶŹó ŹóÄūOīéŪ©/ļŃŚāć)ÖV öų’’Ö"ÜŠł&AĆfٜ~Ć#÷ÅĪū š£łĮP:č2!ļĖDqāÅ *·ėķåźÖ å_żéI#$žŹ¹’ńŌŲ’ž¾ūé˜ÖńäÕå3ŌŚ2é ėŚŠŻ(ńĒJ# ’č Õ’%ńõठ$‘»Y Ņķ×<øå1īŗż3šõHŻćŚ-šÖĻF74ȵ&.¼ė, 9ķķš#מģ ėśū4śČęćÉŌā&ī™Ń÷ž=Ņł-ē/ōż“ 63\8÷čŪüķģ ;>éĻŠ7X(Ūż¹Ę1 ø$•ś÷!öĪźÖ; ,Č!Ū Ęķėį %0É©ņź%õ-2äÄö;ō'ųńė-DØĮņä4^: >+B+Ā›ō¼÷ķßń$ś D8/”ĶCń”ąŌŃųā;ńöąćōŅ=Ö%čęėöźŖčĪÖófF30¹Ż"Øæ ń÷Ś{õµśŻĮńŠžD›Šł’Ō½cü×*’óÓÓóģM’h'é6žģ!'čhųU!÷¬ŻĢ%Ā`ÅįÕš*¶5ųźŹčĻ’āć&ÓóīųöčŖµb/ŪŌmš’ĒŲŚ.ēč'T’¹ øśčś›*ź 'ų’*ćC!å×ņĢ€øåÖćß`öńī@żąź& gõF>ÉÉ÷Fąć?€ż € Žąų™¹3ńõkģ'ŌÜŁ>ļ ż/½Æ÷»°‘ńśÕ ŻüĆĪčC5ó÷šč4čÅ’-*ćĘ B8n»gęaķGŚJ6īĮžÕ.čĘ@Ī;Ų/ŃŹŹĶėŚĶÜ×įšś²ŠŌ, ,1žõŚŃ£Eą§ &§įūģžČ €ŃNśēĘ ’ģT)dģ¼ęÆöŠüžźāŪŲj?ÓT×µ$żWģ<Õź.6#Źš(ó$K ŻTžŃĖZŽ÷ŁļŹŻ*ģ¹ßč1-ļ„÷c.ŚźĘŌē$Čź.éBÖųĮ½äóĮ>9ŚžHńĢĤAūÜ~³ćZīģ€Žģ„Lņ±÷ńI· ’ńäX! Ūī]74żŸ/4żų#č³ś,łžįĖß8ķ莞żĄ ūń’8ö4Ńū’ļR PšŚ)#6#ūōĒÜ §T6¾ŻśŃšā”NæįŽ ą'"ż V/Ņ܀Ļ99öō½!ä# <ņóŲł'ź #č 2N(ߥĢ÷ŅžA¼%·š!"8“ž "ōŃ 5©ėÕ\ŽJ)JžšźJIłč V #.ÖĄÜ Ŗ/ ,wčļšŲ’Jüż0*ō»øśķÜhėņE.)õü Yēńķč%+&ł?$;ą¹üļŗėņéāL’ŁÓ1W ēššš "HPµū׿%=ōWłšK(ęöæ°00G» ģ« a±$Ūōś:ś2ūN’3Ź«źēŽĖ‘Ž .4Cö¹ŅĖņĪō›Nq<ĢįćbŁ8®%źŃ5å½ īć ±įåżŃÄYąķ aŠÕ2M"ź&ó Ö DH,5ļ>Ä%IŚŗś¼ķ6Õąī4öŃŲž§ņ)¼Ę&"·ēAŽÓL6!77'ʾį7ō ø” ąźī!’“½ļßė įīJßŃ&3õżę2ūóC( ģ;ļūü’Ó Ēś0ĪŲĪ:'"ųņ= TĒ&ūœįÓ.ūÓę.‚óąĶņčģ%cĮļõÕk ńź Aōä7hšŻš) ž»ī 5ŚĀ$ļē µ!!źīż%QĒóõ÷āÕäį ł ü Ö'ļČõźą"Ü’äīėėĖ(.čßõ ÖūČĻ<ūūÖéī5/#×Bń ĀüĒģļ;łµķņ Éų¼=é ķš+/ż#ą*ĢžĶ śęžĻŚÓĄź/ūęŃåö¾ß².ųłšóÕ”Ē"ē Ę/Ųīóūń=JŃŅYĶõłŚ ąż°b.}-ļģ驱–Š Ą ōŻ ģØß×Öóę §$ĒŽčŹ#āęīśļOł¾ļ÷8ŲŚīšŅž1ŲķŠčŻFå³1(DETĒ;EĖäī'Ż$Óķ™ä YŽĀŁōGNŌį&ķ, ż +ĢÄéEęŻB Ƶ½ół éś77M הžæ%ą/ß (ĆūČłR öļ?Ņź6Ļć±9 Č ĢōµÄĖ:ųāņ„ūłü1לńõŁ ōžó ’ŲĒŽŃ śāāū4čĒ×ßåĪ’1ŪDvģĪĢćŗš+ Ø÷Üīģū˜ćžšGŻ(ąŽ ē5Čõ¾!öś_." NĶŚĒįģ±Ļš°ī$öŌĖļ4Ł8뇵P&čŅ'Łé/Ś Ę"-$ õČķŲĪóīNóšż#ļßÉć" µźČ+åłźčšøļ÷Ų łåłß ļĻĘ 5ų5#(öŸ÷&Ė,ū óa3?×=ĪŁąūÅKčŅõśį ų3čŌ źĄ+×č=ģĻ&/"łłŻ(ėß7šņĪ ž#óž:Ōéģóē%÷· ŌĖź8ö)2%ž<ī7ŗ łĮ" ī^“ņĘąłöäå7ä%×K*(ńŽį' ēFė IöŚÕīžūĒŽEŗü®ėž9ś$¼īŻ.?0ŲõČ('ųŹ+ūAŚ$X< 31÷_Ēš-@ń|āąõĢoęčCŪÖö.ńįÜké«ļōÓēŁ.źš 2ęģmÜśč ś;ų#7$÷ģšĆ(éöŒļdźŻ»AÓ„J *Ģ 4ļÜę:Ég($%įļ’Ļł?īÄ ņÕģ2Ž"÷Ä!ņčŪ¼ö="#ā­@ ę“ćń āÅ °Śé// ¶ģa¹ ŠŽ!čüL,+ÉG¾ŽÉīßÖ5ķ"'Śö „I,×; żŻ»šųü“Šę''łĀę čŹ2\$'ēAŲĖŁ’ŹäMęęź(õ ųēI$Wšģ"5ü¢å “Aū(±0㻨4&×ųøüõėŽ 0ś+ģŠ üńżMå+éüńÕšŪ¼žŽ,ųć ēģ#õ×õēēéęż G ČķŌ9Ę× żļŻ-  č’7äß×ī+śŹčś $ēšų Ēłīżóś×©!"OŃü)żķōóæö ¤óŁÕŪęåŖ’ŅųśņNéÖ÷ęĄĢÓöXāä Ø0 å7ų­’ųįźŽĆ“ Ó4śćńźŽ óīõ$<»LŚ~ē¼>é1įł 1,ä·×UM7ß>(ĘŠ<ŌŹżŃ Ļ’I¶˜<Ɠ į:)Ńū€ģīśēō(ĄĶ¼ę÷$ū-ūņŪŁ3ē”0céģŹ¾īŖōVąÜÖĶ+éė*BņŠÄłó'żÖ!Ņ1ßēéö4ļP,õP$ņÖ9ńńšæ9ń ę Č1µüß15!;-"łōIķ;’ē%Į#Óūį>IĻ *)ōōŪōŚóęõ\öļ5ß7óą‘( n;ńUąŃöļ%,ŚŪJńż!,ÕĒ% 6,č AŠR<öĒAŅ ¼×)šŪź+ÕŁFµNń-6Śžóß· 3ōŌ,7A™Ū·ŅōķžžāÖŚ>÷įĮēśō(®üšūÅŌńöĒößż7ćżąŗā"¶HÓ6’®Ėįčü ö8óÜ'&Ą"# üõżI*.Ę1Žį 50Ń“TūĻśšÖĆ_õōÉ’ž“Ųßī;Žōķ ·ōIš š$&ÕĘ Üōć+Ņ }ķżķ4hńüī¶×&ĄōīĶPģū^Ķį?*UŲSųõŻ0Ö%)ö0ŪŅSõüŁj»ßÉŁś’,CiÜüśźžDŻĖ-ĶĀŠßŚä\ģ&¶ā4Rсó Ńå Ō!?¼Ł!Ģ3ŌÅPÜŽ öęBāņų ėģ ģÜ#Śé*īēĪ1ĪĀ@Ķ.'ą*(į ą’;Ļž&"ĀÜä")üźšēTäąæNč hį*Ųß!ųõķ&ße“Õ $&ę9ķ 8.ŅF:DÓż²²éó ćįD*óĻkļóA JÓ1Ē’’U VßūĪ V䯩!Šß“3ņŹŚĶ÷<ŻŠ³šČśŻ`ž ā×Ü(ō’!7ēšäĢÅ<-č3ęöÉ„ĻŠī#ĄåŻó-é¬Õ=ŸČ÷śŃņŚś1ćž&ķÉż$)ŃÓIĪõķģ ŽŅ!üćķE)ś+śļ„+!Ń4āĆB‚&'šÄEa)ū% ¦ķčéi€L£"ż"eœĶ+ĻK·īÆū3Ź4€·1F%IŹś÷ÄÕčņĆS%š¾$śąĒH;#ĀÜć7Mæ²µ€0į9[ȗ×B€łŗõ~ ėŠUęd傱×<éZ!$E’°“)3Ō(žä«ēéä?˜üņ@ĘM6Ü8f9ņ5&9īś·mšW¢}U«0ļ0Š€ą9b’Ūō&ŠļUjµ¼'Ą,Ėā½9ŁtØõæ ßę%S!žķāÄåÅņÄĢŚAź’åõ÷„ņBįÖ“ ė5ĀŠŚŌį€J.&’C¦ė øČŹéÕĆIĘHõ® įōžĻł„•;į1éÜėŪ“ŠšŌ*üź×`į&BÕžõŻÖÕóęó÷ąCĪ÷Ś„$Ņļ°9;-8ģš: ķ@ ÷Fė°$B}L Ö¼īą(ŃHø'ņł/ĪF„ļ ł FÄ>żī9õń÷JÓļėäóĆ .źö ųµå’.ŽļńÜLQ ł #ż Ų¤¼Ņ<ļäg×?üöå2ļ+ėÄńēõį'(xńė!Üż¢ņæ-×ĆŪū å¹ ęķßöūŪ%× ą*Ē$$*EńH’·Üīėł ŌūE8żVń÷Ååķųģ6śĻ Ņī› ,Ōļ;;ćšå:,Ż5¶åļüļÉÜæł,ēšė½&/óōõ’Āł+/G%.ū5Źęė/ń!ÜėŁų@D( × 󒳤ėŚčĶ›»_ļ!įŃ/ŲüŃõ¹BßģUßżū(ĢŲį²0A Ę ¦ūŅōÜÉõj*öāĀ„ź%¦æä,¼ ŽūŻABļć! åŲEĒDżŌ÷ Żå2@Żć©Ūē;Lć’\Ņźõ·ņŽöįņ L’ę…"ę ŌōÕ4Žq€¤M !Ūź5ĮŪ#×ŲŽĢcŗņ,źõ+ -ŽŁ8?Üŗ±óXƒ5ĀźūéA,1č’Mų’ ńš‰Ā<öųįG@åó "#Ą'õkø ½mĢKńUÓīņ=,€&>.„żżäž;;2¤]äŁR©ģ9[Ķį&)ż&īŹčŸĘ7Uļ$į;ć/ ¶5»Xłę*šķ(K:š¼ń3šÆēŻūž/a^,Ī"§4 ę=ßgļņ:žü’åXōÉżżP¬ݟ1ūū'Ł# ,ÕŻ¢Š4ČÜå12ū"ĖĢNcšG.÷پ>ś æBŌTńēęčŻõ Zü8ÕäZ ė4$Łöü1Ō <"8%ńćņ1šĢ0ų=ćŗ×ļā5"!ą3 źū)žŚ#ŚńŌ &ü ķšŲē ŠŪ #ģŻą9DĶ#:łšł½č(ėē½įRJ#? öEźōäü÷ü 3žŁężŠ¤ēó“÷śūōķ ÅżĖēÕε<ų$’Šķ(ų¶ķ(ӕ( ń+čÆńøōæŠģ³ė7ņš,ńģĶš#4śD: ½Bö*&ļɀš@›ų³­ö_qÕņ­Ŗ&Lł?$XżŖPTģŽĄ)­ÓVł ėŻĮąEöŠIģćQ:ÅēŹĶšœłÉĀ×’ōxŁŻR·žęåUJī\%ŁĀä(śž*ūŃĀ7ńqčŖÉ,”":'źłń4źŁ(éĪņ°!ćš®+!#ī°ø+Ž9õž²üšü¶Īõū@׈×dÜÅķ#ųŠķĪš!éuļ >ōū«ō»j ŚJåż$÷9ė<4Ą3Ā" Öęø*”ņ¬»ĻĖąē¦”8 īY-Ś5LéÜKõųą ’n÷ąėŌųC ¾Ō2öY/6, łmŻüײ6¦ĢĻP+¶“¶«ź½TŻåÅšōŠ·ī`EKŗÓŹŚž ?,®Ņ%ėšI“7ŌŻ™!0Wćš<ęēµęó0׳š÷÷Oėē(ź@ö×ŗįε!ņ #Śąé©ń!Ž3 ņņųµŲ÷’śøūóŻėN¢Ōūä /ļ"żżłÓ1ÜÓķ!Ā-4Ā üćī š õ2ē<Ķ\ ¾ šćØ ūž ×.ė4 ŻMģ'x2Ģ śŹŁ¦ĢŅü:Ä;ą&Ü@ū×äÉWų ×ė÷g;éņĢIßÜūåżŠ&6õ å&ÜFä$¾õ@½’ ś'Ąä OóŖšÆÜļųā<ļļėņD ßč’9Üįūō1Ę Mū6€²Lķ¦Ā¹½ę¶ł<'ś6Ī"ĖL-œåć䮢- JŚ+ 1!ąėéü÷ń÷.ų0ŲīĻJŚķ÷¦#ż ńųUśĀźąūź!’­5/#1ō’ČĘõ7Ņęd źöļó '’ ’¦-ĻŪ6Tśó»ė-Ķ ŗč÷71] ņą’C:>Ä Ę ›>ųŽ>šķõb ½1żéęģ !øŚ؜ĮłąĆŻš²ŁńńĆŌaœ:5§ōŁÜÓĻ4ūIćüé ÷ņŗōĄū½,t #˜£“'õļ€ĪæMŃ ž!ÜŪEéŅćō ēXņ/ĢĘ×3Žńʵ ń*öŻ ĶLõS(÷õ?<ā’ ©žäŻåēö:µHRļ OĆŽ»2įøż'"45ōõėĶłŃŽō4­ 7kźéŪܽHĢ5Ø, Āśü_õ’ ŪöµÕõę<ū*ü FC!"6¶ķÉYžĮ"ųęįčé!*Ó³[ ÖĶŪ*6āą( ŹŪ&×ŲģźļåŚŚ ¶7ķĀčĻ ł÷Säö"Cņžų Ų«Ž$\,žüž4ńŃ ŌąüäÕ>·éńŚś3įÖżŹį#ßßéś Č(ņ Ó?,õŖŁ ē'-yģ—ļėƒüą½9%&čŌKó÷× 7ņ ’ź@÷ņų÷+īńĀõŌśiē$QµZŅ &šéJ Ōė;č ’$öćī®Ž’ć&'õčCõ“ń< ¤cŌ{ ķę&!,½š )ć÷äĪü$Kčø+eĒų:ū ŠóŪėl,bŅ÷I¢»ģ)ßåQ*µ~ģŪVŽ=Ł!ŻléĖķ€GĶ#°CĪ™Īóż%Ń #Ž®ųłėģž«­Ź Ģ1MÆäŹCś,Ł80鎚£C®7[qv ,Æż/'Ż6ÉŌÆ1B9æ9ļü¾ļ³„*łŪČ,ßżłį,JóĻŪLÓ÷:łsŪž®ą„Õ.ļ*ł<ćÖą4ü&ū>Ū'*®€šų¹ō5’"kāŃĘ,+įĢšÜė5›½ä`’!:ų$Ų>Ę jE üŁ!&SųŪ/äb%ķČŁŗ²ĖĖ)’Ņó-ž’żšņź ź1ALŲā³ŻD×¾©ÅųÓ’åęūż’öåąźųŌā4›·ģ Fęü\įAó2¼)&ōš:ńō-Ā:ā­õęźļßģšķźōé>FäŃ09źżĄŚ6źŁ!źé•øł–.ŪŻū ö(­3ņQķļü9D$ÜŲüH $+žźē Cģ#÷ϼ'įśŗõĒńš÷/šó\Öčī÷ ż×±8å%ųS÷ĖĄä>ĪéŽ,ėōćK—åæ,ż Mų',īęńĪ $É ūšėž5 ŚŲ8ņé¹å4 Ķ÷źźčļęē-Ą2ōĮę łų žĀČŻł ÖÉė Š#ģš÷ĄŁ-žöģåŃ É9ß¹ō Ėżōųšüó×¾%Ī#éßļĖ.č ¹÷÷Ž ,Ī«_:łģ!žĘåŗęŪģ,$L ŅÜ%8³ųģ¬ģLėĄżćėdéJ€€ łśŽŁY¹,’Ųūķ;õ 72"'S§öćėź"ĢźÅ+õé ŠŹŽĖ‘µ/ĒČ4vKŌśmOż7¼šĮä ŪÕ ųēGźżķR ¬ č,ö»Ž€ 9ŹŻå īÓ” ęŽDKŽFßžŚĄ|€l^ģ0€7š)Ņ÷=Ų%!ķŠ ē©öŁ’ ĖŸ-*7ņ]ŲŃ&˜»Įß¾õŌŪ$0Tä€J\ź>Ļe( āŪ»ć5č ÉWąKč¼=×čŸ ü÷ ĄĄęķaF€žQō=öEµļ?IČp€Aüῆ ­.ĶĢčó'ż] 5€Żģć¬āó½ Ō|ņĀÄŅå9ĖāŌÖ"Ū@õ$³E¼5č¶~õbÜ«ž5X 5’³Ś*Į)ŻjīĀų<čõ 31Óۜß÷T B·ęķ&5üå7.éŠÆ±XÕü:BĪ17āõ€E|NāīźŹkäÓų÷pź7ņõ9;;ÖšźĪ»3öžų'2Q%Ņ% 1ž"æ€@eŃńšD)PöõĮåäŌv&Õņž'&AüĄåCÕ->'³×ßśÅÓ“éģŹĒ€E5ŻˆD5ź 2źé²>īņ(¢į±Ķ'uīąØŌ)@½QõnfÓ)(4€ķ}Õ6š²:ü÷([Kčėļę Ēlņż6<, %ųĖīųFē˜äóó čż*gÜÓń’-ųšēćė ę’ō÷ēČčīšłōę»B ’źöŗ€HŃóŹ%8¹% 0õĖ5*=įĻÓ ėÓ’Łå7õąłś š×Ŗģ1³ŁųÖłč½ĖąńžåĢč7’Ż*4§Ų÷ž8Ū'¬ Ö,ŗė]ą)5äŪų ś¾’žÅć÷æć ŪŌ¹ū4Ų=$żŸOųķŽÓłł ēėQ6Æ)'ę×¼ÉżÓõžB¾ņé*ŠŁēū·ŅŻ üšļĮŻĄż›É½õ8ęü;ĢģęŹĢJ é%õ'źųFõIÓėÕśN:žģżÜ źćÓźń/öĆŅśü15ł"Õ ŅĆĀŌüūņūéõŁŲž’­ÕŌ!čÖ^.„ą½ Õń6į!ŁÉ"åų/ČäGŃÜ9#½Ń×l2ēķ5ē·4Ö®żßÅ ź1ā!ļąŹā4æŖĢ½"@ ń«$äĪÜåė¢-\Äņ(ä)õņčī3Čķē!ŽśµØļļŃöF!’ķ%Ö"żöį(ęLżHņÄź’ĖĘć%÷ XüäVßżŪū:'īŅē!’#¶UżmßpųšĆå øCŁ«’$ÓódŚ Źęܰ!½å#”ĢģæÜIęÖŁµį‘ ŚńīšĘ¾ŹąĒžÄD$a/×óż“"Śū(šĪD%ū’0ūн’ź™įõæģćśĻę0ōīõÜ6.0ģL&%GŽÖüēģ!üėżN ūŻå#čŌėŌ<ļŽ ÕPł<üń(óśüŃöśō "Äōšœšā9óóšėåa[ö Óä& ģ3ЧõĢõ&ä ģö† ó,Ė%Ž"ļżGŃāŲ0=$ ķą1»öō­ųFü÷Č’!óūŹĮū0 K)ŅĀ-ää¬üGēXĒóTķüXį¤$ä€5ż÷ėG !ų*ö<ēųŁ4ļ¦é±±ż ) 3 š#:üķõ¬ųĢīnŪ 6„ś•»," ?Żć¼÷}?ŲųŲłļäÕĶ2 ī7°äĢļ ų^žÜŪ&Ō9階Ųš§yŌ¶õģó’ŽŽ>ŽÓF.ØqįBK±@śÓÓŖ8Ś8ū’ė#ģļ$¤Žŗī?ńļūīŲ߯ŹĪ˼¶ļ$Ž é(õ'łō QŻ> :ń8ź (KŁņó" žõCŠĘėEć[źŲöœÕ›,&™ĖéØćżŃżņ׿&ī ėў׳ęž#čšļ óäł*ŠŻ«+ū ÕI“æ ŹŃŹšö Ų(×įźł!rżļņč 2A½åę0'ß×0ÉōÖ Ūė* ųŻÜ ’³%ū½šūēņ½Ł ź ŽąĘé3ėŚīö5Ńķ4ų6 /,ńćāźöļŻæį'Ż čžfļķżחóA,Żśļó0ė-÷üšąü[ ČŻBÓėķż%ŚD'5īó%€ņ4’ż%Ł¢ņ äōõęź"é 8ōœ(Åķ6ćē ņś üįŗīQÕłźź*F Ļ ĻąĪ÷ū;®/÷(0ÖżŁUÜ:ŃĪõšżėą.żłń(ģō óžĮ,łļž łĀ ÷ēņÜ)<Č˜Ż/Ū&ó!Īźķė¢śāÆ®ąĻĪÅõ,ź8Ę:B¬ģ%ōŽå¹ $žž) =’“×ČŻźIž([U8ĒG٧߲ ` Ž õõśĪńŽ üųį >÷ī(Eū ņŲÖļH īŒ,ĶŽŻ«9Óį?ØBēÜźŪĮjį#š'āīŹ¤ą$µ(0š@ÉĄ)Č(I ĪRA$ģ7 Ąūō ŠĪC ś<ģ JM Ƭ»ŃĶ€¾÷Žäßļ+#Ōžć~ņKÖę%PMķ 9Ž”G«Źś°zó%ćŪ-ĘBŻ„®¤¼Š ҧė&=é  ć(&+ĄŽ×żr¾1"łõ >ĶŚå Ų˜÷NÕŲH_ žĄ $鱎Äó6KĀ10%×ÅUkNäU{śR–4ōŌ…Ņ>@üŃ“ŚX#¹§Ó÷%²ÅÜ)€ų›ńū/=AÖ’ūéė+ļē’’ØżŚ¤ņ#ģåč脌éћń5ī;Ŗ×ö #:# üŗ-9ģTū€ÅÉś"ņč=Ńå#'Ķš9ŅŁĖ5-ēśń‘)Ó+9Ł * ÷ūNņ:ā%Õ÷®BÜÉł`ÉŃ.ūžļ‘4!?.P2ē<ąś )ŁųG¾æŻłŠńŗ1ņJ įł=śŌĢłźóā’Ńķ²!éß ŹļŁø 1ĖĆģ)ņŗŪ'BŲóųŅ HC86ÜĖę÷$P+ų+&Č2 ųķÖö'Õõč@·å.1)2čėēĘK½łĢÜķŌóĖÄE×ĶŚå•ŠZł5āOÕ­ ÕęžŃŲ9ń¬ 3-8öē(Īõ ŚŌµĢĆ’N/÷ āę/żźĶZć`VĄ÷*7ĢĶśēęp»·ŪČĖ (ēĢāäĶŹś óóÕÅŁÆ$Ų)0ĘĻé®UĢü µõåÅ6 ö?šéž ÓČØö!Óō¶ō:O_%ęæEī€Ģ%ėÕŹģN1ó *– ø/«hõ鄨¾ ±€å‚/Śžņł@üź³(ė4Ą­’Ż$5üó›ćŃś+"  ’ļóugmĖ5"¬į ćŅ»’½8 ā-ō †ÅšŃø߂<Ēä¬55ųÕŪ ; ęN2µŗ ׳_‰üśōŅļ)0'ąEBYńż&Ż9õīļV #ēÓÕ÷%ķ@Ś÷!ął’UŌļ÷5/ėīš%!Ēģ¼(MķķŲŅ!Ļj< 8)ĘŅ?*ńÕĪŲĻīé ČĖšxrÓ­üé/¤ļ ęE»¾ÜšųŌ’Čųß;śVū¹„+ ¹+ą’éāģQļņ& /ŽģB#ū¢0˧Ūćģ¶.(ö’ Õ.ߨūŻ=ŠIÖŠ EÅāņœ .ęü öõŁĒŃé‹«!dŠŹ€€żŠĢĒŽ;čŁ'ŪŚŹ’ą?ū&ń9Žf ĘMŻęóŻēĘų+" é/e+7 ćļŲč×Ė:īÜ ųÜńH99śÖFū)Ż/ō¾MóÕ1}€4>ųķņó·(—6Į÷qGĖÅ÷ öķ Éėé#ŪśĮ#°Ć®½\-ź $ óÉšŚDę D<öŌĶéJłHśŁļļŻź’ķŲžLä.¶öÕó@ćėÄÄBXĖļ2E`ĶÅ D*Īå Žē>ŽüĀ’“žģõ“ø+™łę’Jū51č gßįŲõ&ńłd©śķļ5ųµčź2:1 Õó?×Ė’ŸŽš ;éüŃ"+ P%19C»#Ģß+ä&ž~ū’7Žļ÷ņöŚł° åęėA;ŪŌÓŠ×&FŲžó2ś’ ǹžĪBąż2ń-+ń7öūīķö½ü±Ē’ ņ õ0Ł Ļ$ķ ķ å*ؐčė5%ĢķÓćČŽ'óüā½øłńæ ėå’ÓĶćĆęCŁ’1żĶļŃś$ Ć*žŲŲĀŚŻõ"/ŚKä Ūń& Žó *õ#.’ėōłŚóó2ĶŅūGūż×÷źüW-Ž%éėöźś ß įäĮč7’RR  ÷žĻóżõą½ćć*&5żįްūŃŖŠ(#1žŃģž÷ !Hģžå2čžö!Žź¼/מóį÷Ž×óųüŽó’Ńģ&ōŽ\ö&äķϳ!ü>2, ½ŹŃüéhAž<Æöó&Öä"%Ip/Ł ĻŗŒć%XĘEļ“ņ€Ż<Ö3Üź 2ܳ4Š£‡å·ęłD+$÷0 ļŲm;ČI äOß²©Oóņā5!łĆ Ü+&šń*FćūųłŽ!Ó0žČŒó ć óöIŸÆ éįä$^0³«õźģE¬ ļīžéÕźÅ¼ņÅöY&ÜėPāéW;»2 ūśū÷? Óö€% żŃŠŽśE#óõ. ü#5źņ #.æÓ üēčńģņėŅõęčŲļņ¾ī³)7 ĮĀõį÷õ'ł¼5ń Ō9Ģ8äźń ōķś&īå@ēåŠŃĄ²ž3ōā#źõŅ%žųķäÉö Sō , žśõó)÷2č+ńäóżÕAü?öć÷Ķ­<ņ÷&ń÷’$ńüĶńćÓ)Jõą’-öńŁćāCŹ"+ņ „˜>@»ńĖEÉKMŚó+1¢Cŗėņ8į;č¬8µPōµ5ąŚ Ø" ¬’×»ų÷ ˆØł¶ßĖ’<ķŃߥŸöź*ĀP )ŌP¤X¾[ļæ’€ŌOūLl.€E ļćCĪń’Õ-+ĻŽoŠß><%#āš %€®Bŗ±"ŻĪæ!!ļ 15ҽDÆ'O^“ķéšVF'KåZń"FģAéQ2!ŚŚ-,F!Ēč YĘ·Ł?3<ŽÓDēņ(Ö; ź"'ēļäÄ=Ę%Ķ&ē÷(7MÓÅ,AųXĻ-óę…% @9ćŠ !½ŪÅZ³ÅŌ‘'G9ę+!0źĮģk'"ą#I;óÅė ¾9FģÄŁÄ4CٽŻUīŠrK.Ńjģé2>€)"Ł «(śż)9Ś<Śūģę! $Šsń5÷ Ōä 1Īź_ Żź&Ū9Ļ)fįźĶ¤Ń#ŹEśāš!-Ēõ#“ęäŚ$Ķ’ó«µóõ~€õÖ÷õ :ēģa~Ź ’ĮŹå÷L$õåÉÉųB8«ZT,¶Ī]ó ü”+VĒ ź4ŠŒó #-Ü?ä¶ż»éĢŅZįDž'$ .ōͬÕśųŻŽĘ»P«V*5ōÜž $?!×üē7ūUÓŽIüĖ]ąÆķŠ'ƒ&ÉK"¼bīO0č$łāģæßššJóHšĀļ÷½ųĻ> Ę-8ÕśŪ?ĪńI,’æ-īA/ÆŽé3ē ýĪļ4ņš)żņļ(ŽāčĄÉ)#41ńŲÅŪöå %š įŌüķBĒąō¬žW.-ÅĻüųĪģ œŲųųŌ)¼õĆ@(ś ēŻš#żÜā÷7žAĪōĘŻģ9 ©#Ōī·Ö žĻņżąåŗ ĪĻ& I8A ĪŃéN­ķūÖė-ėŚ’ēō ¹üĖć˜ƒ9óź. äēŃ ĒĄ#ĮöFńē ö ā×ų'-&’Ļ/Å»éł śžśźų'IĢū ?ÕŲ«ģēłļӚļīśé©¦ ĻĖē4ķ%=Ž]ńåźĄÖ/į ¬ųŌęż:Ąėņ¤ ĻĄ×Ó#Üāą÷ėķe1*å ųž®"ŲŃ*żäŌä$ 5łü>6ęõżö $×%į+ń$åŌPDģ÷šį:ļōÓóÜē;öRāHł“ō (('ŹÓNŁüšźŹ1õņų(žųßū Éå 7/¤ÖüV,īæ —Ŗļē:öõŅ 4ĮŌ¼Śł(Käæńާę]óŚ/H# ńe_?Ōņżż*<ŲņŲč*gžķ.ćżų×ŃōŽ€>öä ūé@ßŲųÉęŽ /;ģCł+å!<ńā M¤²ńÖ·Čēüåń$ßż¬üšĢāK*ÜŪø>@œ-ŃŚŚ ņ'ŻÅĖu#¤!ß3ŃY)įāM>D5čJ’ß ŻĶ7ķ'ąR×! Ć:ž !ōåß0żń€ĘĄ~89ć~Öć å რIkĖB €°ü¤ēĻĖĢō®żÜ>Óh‚ѽÅWl“wļ+D÷jÖÜÄ(‰gż"~ó*²āŸW_Ö) i®ļŃżū„ģ›\õ»ʉ pė-É@\č6k,17ĪŠ&÷wÆ%K¢ų(F÷ā“ąJĘĆź»%/3,ē}Ī€8’3TŸ4ļĖ#+ź“į§.īö«ŌŻĪ(ńä’åßBęBĖõ$ęč*T$å™)7;NĘć5Óó3ā ßͳ¼Ū]°SĄ÷Ūż=7éVē3ČéŽ0čļņö#--Ėäšū¤¼+Õ“0ęģYŚą Ų .?1ÉźII7ļĮLćČśųÓ6 ¹Ē:&;.ŁMųó°õś;čÖ7Ųś’ų(ł 0%*æ*?Ā( ÓFł¼0ęćńöż ź0“ 0<ČÖ "ij#ūēŗ+רŖĖžżZ!+ą3¶ć’Ģåć~$č¢ "ą€%AnÆ2$ķ½ļ ÉĄåłNęn?æ_Ötڹé=(3ūŪĄ÷ß( ­KŌ¶ój,ķūQ9%"%$łåć#Ōų4ÄįŻēB9;§Xżéł÷æńöü肯¾Ģ=üi aä,ų€Ńó赚ņŚ ģż½½š B ā ½›Æ¬ü(ĒóÜöm, ī#ĄĘ%ļŪæå% 1ó&ļčß-;Ēå2Ä?ŲČ&ß-5EæõÉ©ķLī×é)źĘķļåėŗóßŪ$]>6ŗż%éöćś ·=ė×ååīŃ»ś81¦ę«Ė3ĻŲ4ųā]éO Ż9Ć?ņę%=é^³:(žøŻĒü.ųó%óGÉ8•µŲļżŲ7ķŠåēūŅŚ+HöÜņķŌāķĪŁōŗŅÖ’N)łÉ"ųŚšŽŗ0ź*× ;/@(īńŲõų“ķ!½ j[Wū%ć;MŃGé­é£$vč4(ģõć÷pŪ>ä Aź+Qą`#żęÜżõŗń*0¹šź¼³7xÅ2śē'Ę;ö=ļÕ’ĪŠāŅ  ’A Ū /"$ź ÄėŪŻē0ßóĀŻŲķöśŻE&üŁż KĪļå ß5Ø)2ķ ÅņžĶŚ K ŹŁ’’1’ ė8ūÜCųĀī (=“*ŠŹ:5åä(čõ÷Īē ā *ņč @ėĢįåżģ.')ń"éÕ ü’%Ē%ałöö%Gą8 š7;%:Žū’¼hŁéŲŪõńTēXĖ/’™é-£Ćā@įżģģ×8ū81ū'ݤCūB#**”#,Ī #ńŌļŽ×ėTŗĘ ŸŻ0-½ Ņ(źĪė°š ł×é€(ļāģéļM2ÄK ²1Ń!*ĶeķŠņÕ&EŪł#Ē)čļ,”ēō&$óó ßšüžÜģłÕĘāŃą#Eć÷õ ģąķ$ļ ._ż Ų(ĪŻÕ(śļÜž"|€ ōŌwE7č ,)ņŚ6õ~Ņż Čš õĆ# WåżčžŻ22öÉņĘq²8īÜńžŪ¦ ųĖ%Ćɱųž "vš÷:ģi#Ó&ĢģĪDłÓõ+žĆŹäŌ#Śž Q!ōÉ厞­’Ļ·'’ōõ€Ab˜üŃęDåĻĪzķ%KßŖ-UœšU<ņęŁĶÄ éLłŃłšēŚßäøę˶ ^1&$7Ųæüānī*ė% UK'eų"ÅŽ4ČūUšOģCł-¹īŹūGÉė7ÄłóX Ŗ”1ī÷ķ ¹ń"Õ»ĒōéN:uĆŪ5Vš׳!÷¬ö ŁģŻFūŚ ¼ģī¾ 4ü $+ŪBģīį0ķé&~ė ®Y†é€Wī Š$µ8 Ļ­ŻŠ!Žų5ī;ķ ńž[»<ųŻ`ńóó'å>Xą`1ˆFźČź`÷V,ĖXR±aBY2-R»õ8ēŗ%öŌÖ8Ø/ķ,¹õ¢ęÅĢå©: „ö6 ō^,öĘĀ ²öRÓÜļĶ)Ÿéa_ńHÖéŃ5īÅ 0 ęHž9ś£/Fį=ŁŃF_Ś ź±ĒķŹ+ŽžīżŁēīŪł éšüJüįžųŠŁū­ŚüŠéÜģńŹłńū’ķļĖļ8ņģŅäÜ3 !6ąÅģ šōę(ģżņŌÜįÜÕöŁōė5öõłÜ č õżĀ Ž’ēōä(" ÕųŌ śė÷2šõń'× łł)ōų ÄBž¼ž éįü)ś'ųü ’ä2ńš7čńCź üĶ÷ū2: ś ō÷ąģ łÓģųśńģēē±÷Ų÷’ ķūčłųżĢö'üå’’õžßéßłņżėźķéŅüēķźÜ’šųų JŹ   ń’õģ.ŠŪģ/ģüīó’ķž#ņ÷ų ėéż÷ąßŪŻūöß ! ŻčäūÕóÄą÷5čśü ß üķž’óÖ ążń*ö ńóäŁäįü 93ģöüż žģ÷Łšīå.üęĪā÷ ųõėī'äž čńöé óÖĶšķöą3ń'åõų(: żBčė łśŠ ļ*ćļ#óėßźļ<šźŪ7öõŲä’ē÷ó÷ōź-óśöč: !ßõ$’óāüŃó;éŻöÓī 2 ś ėėüś żĶčśņóųåį )ńńł &ōāó)łĪó żśų!ųķģļæųų#÷³č įŻę÷>ģę'*ÖõŪī'1.čūźŽ *"ńśüóīųĀīÜśč0Śå ęķķś Ö łćõīćžżūåźöļ=Ńšżõ- ŠŅžąś,*ēöåéĄ&ź’č óÜł(+öī$żßōž*÷ (%×’ļĻųĆūż÷ńÓ żķóäßėé® ū/åļļžļ$÷ćėü  ķ-Ō")öõßčįčšėėšõĀńŅüģ"Üü×āńłå’ż  ī)#ä é īŃŽüńõū!Ōż÷ąėńóąüłš ęćĪÓ$ė’žņą"źžųśī’ ńśņ8 Ž!*Ö$āõļü ÷# įÕļé " įüÖõżų ģēųęż ŻīłŪŅņėžėž’šüóīŲå öŪ ļķłŅź žéżųųŽÜōäśéüĆ  ģłĮūļ÷īżé÷Õžš&ļśÖśė śėē čé÷üėč ė#ź)ņ7ųćīĒū ōŅņåżØņś  śšžü ¤üņū¾śņėžō ,ó"īčī’ņ é7’’ ź Ž äģ×ćč"÷ółćųö óŅš'’żł)Ż ,!ß.āõéėšüāź(ĘöÓźč ņąäö’+IÕN×Dēš Ą+ Ł:M üßė÷šćž Ó)Ų 4ėżŁų ųåź#īżōō éöåDī1@äč"ųó×ū’Ž +ģŚļ ū ņņĒéęę6 å-ėĄć"Žā ŻĖķęī^ļōõ%0Ūė’Ņ ųåļ ś&ąÉźšū’$& &4ź "ļņ× Š łč÷3Ńŗūģ ó’’ąņŅŠį šüü"ķńŽ8ż"'Ä÷ź)ōķMņ óųčÜ1§7Ļążū“Üų÷üŻ C >üŌ’Ļłņß’6śźßłół ś=öļ>÷ 8żš ’Ü÷-Ū čMž"×ß22ųśųžń "ł ’½ė) ž$ņłŹ?ąŻ#ö«ßžšłÜ#Żķ"éęš+ē’ŠļĒŻ į śōö’ ōįóōĻļłń)čššä&öĄ õōź¬( ū’ų’"õēī śżż ė÷ś ųųŃ  ķ Ž āåśśā!6žąķéńėž"5łė÷Żó( %ę č ļ÷ķģĪå&’)üš śé  Ü)ėåģąŸ'8$åąĪ ’9*$łö į ż’ń÷īļĢśäšGąĻģõõč8öUź Øąžņ ćń-ļ’ńŌšõźĒÕ,Ač/ š·&Ė+öśNźģųįņōü ņüčę¾įż5Ļ ņ7ō8Ņļ!ū=3 źżžńKöō2Ūśõč*Öē!š6ę$O€ó~ŠĘ×0€€ōŻā€¼ŃÆš;Ž/ŃĄ ÅŁ5ŗ 3*ĻOÜ2łčé) ¤śņĶm6€Ķ·±;Nļ ō4EȀTģŸÉ5žą@,3"-īĪ#×¢$~"€’«€Ų¤³öó¢9ąū7Ą·€½¦›ņ=o€‰Ņčģ^3_ u¼ € ȼ:·ŅFń›²ĮQČĀA¼k<»2ųī£Ķ0ąė ·*"Ąčę€Cfžļõß’÷ź žėŽéł÷ä;2õ(Ż"/øįöļüĶ%ń ļśėžÕ žōŅ įūļ łÓ AŌżŪķLÜ÷!!žęŲ5ż   łäļ"õ Üšö$śóē2ĪńšŁ,ēšāŪīģ’šē’Üżņö" ė,2ļ ć>łšŚ üö ļųź’ū  ÓÖł=ĶŚÕżļżų Ń$’Śš’ė ęė÷"Śßń°0ś3īłŻóS ŚšūŚĄļĻ"ėŚ2­ ©ø÷ ζŲQž÷$īļ ŗ*č6&ėēōŌ) žÆsäēŻąź,Ž ķ¹š’ł ńóĒŹäņQč įµšž²ūö» ę Ż.įŹėźŃūż°õś™ö"*ęŅģėūń3č -Ų» Ü» » Łöćż0ć,%÷åß÷Ū$óöÜ’ėé ž/ģ ģóöČū@’āåč öÜ/żßõŁń ēī ’2śöļń%䣿ģšūĪóēć įģ#Źāōöįģū" Śč óņŚäžž ūö õōąžõ ķģ ü ņāļ0ū ģš¼žćūčĶÓģžäūūĪ źčóŻIźśóļ śģšķž" šķ'ņ< ÜźććÉ"ņ!šųéŹéņäģ ųśõķ’żśŽīõįżęJüŲźė ŚŪ ÷ēĪŪßņäźūöÕ"üź+öńóņū śäģč4ę6ż,ٽŅ8÷,ö×ČŽ"A!ć’ćśµ Ü#÷łB ,õłō ūķ ąŲüļķÖ%% ėłśąČłäų6ōŚļļżŻ* žź ,ņ)›Šć ŻīÓųņź Cāó!ņŻÜź ó"Čļė"ŲŃśģüķ· ōł× äī“ß%śē šÕÜś ū÷śÄ’ ł0Źćń īśģõ!łūźōž )ēå  öńėŚ÷ŃėäżéšżÜóčßēāßšµü/żó ßś)łńńóźīųłż&ź-õē?żģźģó’ųĒčŚ āĖż ßķąļźóųžļūėü,ēļ)2ķŃåķ ķńĢķ&żņģ "źļ ļ÷łāūöģśå ā ėłõłīÜžģó!’öčż żūó#ų9öžųĻ õ ’īļ ł’÷1ėķ ūś 3 ÷ż÷ł ÷' ģ ģ ’)ź$ąņīņžńėåŚßńćāųŲģ2÷ "ꌹüöęķ Š Ė&ļžšąęśŃīæ ö4 żōAßėķ’ģ&¹āóėÜāōļūžÄ2Žć5µ+ėįķ¼ūģ ķ©ę÷ŚūįūŻńķ üĀ$ Ü ūĶŲÜšūĖļņIķ Żėõ-ėś ąŽ ļ×Üį .ūčūēāųóļś#Ō6Ż.śśś ėóįī$ ģ/ūžōč!ßĪ$ ńķŽŚžõÜźŌżš łöōź(ļ÷ņėē ļšóäūņś!"0ś×¼öń÷š÷š éųŅ÷łźóįüģšģööź ķūģóżēńŠéąņóõō śōįōŠŅ"åÄś"ū÷ $(ÅłÕįū’ķŪŁųŲāśDķżņŚóų’ ļŽśļž3 ūß Łš¹ īļš ż!éä ł ūŅéģ ū ųźāó ’÷ ņČäč ņ ŽŁēāż.ŲF #! ŁśŌųõųĪ Āćėėō īżņ$ ż6õ¶ī*Cäž-óš Éģ!& žų’ ā%ū ōIåäāü!ź ŃšłÄ"Ģ ż4 ęčų(Żś÷ļłTļšśņźņé öūBļžųäŲÜõłōó ą’ćųóöōžśųéß ’ Ėā’3ųŽõüć$õŪ2łśūóüōų )’łź ÷ńżū!ķų#ē õ  ź1łäģäźõūę õÉäż÷ó 'źīśūōłŅ žś ōóķćųäģóś ü)öŪžĢüäō÷ė’óż ė å’ķ/÷E ß’ßū!&ī žī ÷)žõī6÷ķŚ ķł(źū÷ó2ķńņżé Ī40& Ę žš źŪė 9čÕ õŌ#ī@]Üźüļė ÷! źżģįėåļöéžÜõų’ü é ź 2ć÷ ģßĢīéüīēžŃ @# ļõ ¶ŻžčļķÄäļó×ü÷āś E šō󿿌żü ėżå@å÷ōēŻžź üķłģöłįżĖź’ćŲ’źķĖ#åéųžõļųäźż ņ’ ąüõźųś'  Ūųķ’üųīćöņüóõńžčćüż%Ū÷ėü÷ų’ńų )÷üķźóéņõńžņėżā÷łéžäüžõžäźäļ!źóīćžü+żņ ÷ūöų ’ 7Šó0āłĘ"ŗöčįßē ÷Ó$ šÄāĖ čų ēöČ¢,Óüź³/&#ś6šĪ§õź+H ų»åŽō?·ģūŽC9ż×!ūIź ³å’(śćNńē² ĢŚŪųö‰å!Ö Õš÷õÖ=Ż1Å!&-×ßBėō²į,īżŻ!¾ķĢčųęūä #ł 07&ą+ y÷(ź$ķ6('żŻåūūęūīėś#ŽäIīܽÓ ēįćļ āÉ÷ŲłāŲŲŚB'0žś÷ēķĘŪłņ÷7üžÖ ż ėÓņß÷Įė õų 8ż1/EéóĀ!ŽšģĢ óžŠ čćė’' īöć ė,Öń"ć"čį,Ś õē§ņÖ"Äįą õ& ė<ü ŻńäčåÅė Õōķ,+’ń»÷2āųųļüķ"$¹ģ ĪśēīŽųłž]ł ūń żėīŅ#óō Šōüėūń錒įēŻÜ ń5ēŲöŪõńŪų÷ó5’ļņöēēÜłņūü÷"ęŠ÷ ÷ēšņßōč žŽ <Żšõßżś$īšī÷T ō+å*źŪ üŚōą!ūõ »ąść (ōó÷4ē(å÷-Ķļ’ņéŽ Ģ$ųēĖJ"üÄį÷ńęéėśŻ&óüüīćŚéūÕūöļōLņ’õģķ ńų’āōńūņ* ÷Ōō%ųģļ ż ’Šņų÷ ŚŌųŲÖś÷ōūé$öż.ķśķįāüćųŚžūųŽūÜžõźü /÷ÄöżŚš¹ž×ņž šńōłū!Üäē ņ ū ī+ģö ģģŻü-õ ä ŁųŃ ÷ģšų  ’Üö āšóō(õóĪó÷żūų Ī2ōö šūä. ļŚ ęļūśÉķ#ō ×ēP’ūćūųīŻ’ µš$ķ? öģ$õ ī=õŻćüżē ’Ūōł!ćēūź  āŚÖåä ą!%īöņ’ ļ (¹ż&. +ęæįźõĖģĄń 5L®F5 Ü>ĄŻŽ4Č ž ēĆ’,KĪ.1ĘŌ'¦ģ"ĢĶ$Č"Ā ėäī)ū0.ģš!ŽēŚō2ÓæĻ žļó żėōÖū'ĻĘõŪ ü!äāÉ7šéé.6×čå毚Óč X­1ļ!$ ń äœ<ɽöĘ'õų’8/Ę<5CöÜ ’ė7Ę =ų*׿ā'Ģ(¶ź$żČõ0"į6 Ł @Ćüīöļūēēć’éŌķĢ’õ9 "Lüė’śÄ żéóHĘņ ž ģņä ļ³Išėčé ·=įŅŪĖ żūžį= ×ųŽ(ąó5 (Ś (ĢčŅŪ0ł ķ óč7łüõó÷żÅłż€ ūéśģ4Č#ó1óļ×  ā ńĢó×ūó¤"éłū T- Ōö&ēÕ» óÜžł!żÖ  "ŪėŹ%śļ× ä ķļāļÄ#Õ÷ę½ DģBÜ #å ģćļŃ ;Ž ųł ńšśūš żą ßó"łćūóņšņ ėÕļ*ß:ķłėĶÖ­ć=ń%/üŹ Śš¬ü%µæŚūŁ+Ž)żšū&īī)ĪÅŽõķĒųéōŁģņŃīöę éųŚķŃ÷T[ńņ Ō!ž ·śåłõ üŁ+ Ļäź÷ųŃ ÷ó #łÜöīŃūåö!šüŁ ų ŚQē ļŌ%»ööŚčųłG ń ;מńż ēä Śś ŽżčŚŃåłāę#!ńó8č" ą0Įģå üėžŹ÷Żūķźķ1üłĒ%ü2čžł ÷$Ń ķćā’ōķ*čüā śōŠāńįš$š ŻöśäčćžÜīē ųņ6Ėō(ųõč Üž%öążėž āēņżśź ś ūįųßšõō ōēīžÜšł4Įł! šé(ų źųä2 éōÓūüšųŚłłęģū "żųĻ3! Óōęł#>ó @ó$śū éųė)ė$ŁGÜŚįɰĆéšÉ+D'<įńć ö#-įZżŠ§ś%D%ÅĶĪÖż?'%Xr€I()äĢW¾ćĻ!įąÓš-Ķįž„:É "ž>Ń!ō-żŁų ƗŚčŻ!ē)¼i(śĪē Įü¹Ō˜čM,N՟źó’1ÓO+'ó1ū īōö& `ŲPāķ Šš,į)ŠåS×ó,óēž'šźż ü ō ļŚ+",öļīBģųźŚ. ģųō ų’źäŲąņųłÕś ųżąėę- īäįķ ņ'é* ’č’ŌĢ? ć ūåŚļŽ%Ļėśž$$'ūŪŁūłļēķ ģõ÷ßĘłćģķ öžäōōńžŽ Ńņ)ż śóö÷%ōįį0ž'ž$śō’ł?Õ1, ģ ÓÓōĖ÷"Ō¾.Č’ėß:ųöéį6.óŁīī>Ę„Ģ×ķ+ Ķ YĻŃä$ų’9čõŅ$ż%ńńü’žĀõį*$ĢŌ*é!Ō)åźĆ dāü*½ńJ)éē$ ®ĻšįĖ 5ćĻ($łłķóßź;ę ńą,Ž !ö* Ż7Ó+ŲņņżśżŻ%)8Ū=Eģ@ėšķčńIķä’ā’üę"&5öł÷ ö!žÖęÖ6öϾ3üåŻ’ūøõėåģ 'óļļ į#šäń#Å ėśõ &ĮßļŌłĖŻ<ūĒĄ$. īü õśūēżś3é ź ä1łģ +ņų(ŌŹģū&$ģŠŽ%6é  Óņ¬ ćü*łŻ4 ņ!Ć!ščėÉļģ’Ėč(ūėū ģź ’ņå#Üą ū ųžūį’ ŽżēT ģćßüšś žķéłĢ üśżł'čüā0(öō źš)śč-÷üŗłłŻ3šĘŠų’īźūßł%!ä õ Ü+ūņ ö’)āĢöģ ö4’%žĘī÷ ėģźßł ŲśųįķŁÕ . õęĖ š&łüõö ŌłåüźīśžźūåŲłśŻ ź'Ńż,łżśūłŪ ū’čęé žŻōŅśļ ųģėÜķ# Śżšęö9 ņ  ųōēųłõŪüń$ėõöē żē  éöż Ļõ ŅčöÕńö’ <)÷Ų ūHśé ņõÜ ģåū łėü ž’×2,  ņ’õ÷ßłéß.ēßõŽčņÕūūöū<# «ó&@šŌ#żšĖžCŅź +óķŲ÷ü ńōų*łļĪōŹūēļĢłāääżö üŚÄ š,ś  ęĪž ńź«ņ# *ŻżöÖõž9ģō=’Żö?ļōÜ åĒ)ĀōūŁņ$ūžųóß ņėłŽł’#½=ĪŹ÷ óöäł&čš(5ą-Ķł ÷õ% ŃõŠÉŪ8ōĪ&;ņé*’ü) żšķŻōźąĶź-Ÿķż ł|L4óIŃŠšāþN0čŪąŌĒ&÷s!ōć­ ÷D’ż+°īÜī8\9!Q’óAöīĻå$Žé ±¹-’#ē÷č!Żé1üćŠÖŪē%@-ēõüż$ķ"ńéĄ%[õ3¶ ćėžÜ¼ų9÷čė÷åłæ&žēÜūāŪ ųöąÜŽ’ä¶ī×$Ų cšÖŚÕ'3ń/šłæÕŅšäÅ ü­4õ#Š Ś&ņŚ’;øĮ0ėĶ-į÷ ņŻźŹöééń. Ş1üÓ¹čš7>ŲŠ’õTó ėVįõÜÖšŽü 6įėėć(.F3śē# Ęķ ÅęĪ ńšWńęū 3ó ÓŲ%% šÓūˆ*éóßö+ņÖ’žćį Ž ęä)åļäĮķż-üüźė1łķź#ā ßę+,ļó÷Ņó ōüĶ üāöē÷Éółźåōņćķč čžģĶż!!žŪ% ×@éā6+ž÷ā śÖččäī !Š!ś īą-ŹÕīłņ"ō Ł !ģäśųõ¶īńźßł0ńųÖ ņźŽļś’ėīō% ų źß ¾ļ (ėść÷:ü ūŚņčÓ ā’éždßļśźķķšĪł30éōō74å9×ćĶßąÕ)ēÖżż$ć’īżūU!ł óåś åĻ#šŽßūž7ü ’Ūüėļ åõą×.ś$2 õŁĆšįB)Õ81śŗśŻŚ&ķę  ĖĢę ī śõüŲ2ī >[€s©żÆ"ńü€v€ö€$‘üóHēū€‚€Ś2 Ų€†€7Ž«2€ Å•^Ū#€ę€&€C"7)»Ü€|ŁĖ’€~xįGÉBŸ±ß€€€|¦Å€Z³õ©€Åß=V“Čc€ŽW¶\4µīnj€OY€hcSK:ŗ‡žƒ«¬™YŪր= 0„Žżģw4–A’U€ €¬Ŗ€żóČżóż Žč üūńś žņąńŽūūķļžÓ1ü&' &ōžäūżāēżüņźś;#ņńž óżöåģ/1ī"żėō(ķ$śüč!ūōöį ō ó’šćŚņ’żųś ÷ŪŚŽÕ÷ļĻēśĶŠüīś/öźāÕžüśåął ļ ö īųē ŻųŪöõ (&äēõŪüžÖóõ üćööĪü óūųóäś šķ ļō ’žū’ö×Ņ ę ęśżż ×.é ģ’į&ÖėĖ !ś ÷õéųž ėęö ż* üŹł(ņ(Ė’ Dń Ņå!ōčęłå īäņŻś’ņ(čŻųżüößś÷öšäėņ 6Ęåß÷åų ųū&- ćļžīö "ōžłśšä=čš ėõŚēüåŁŚųūłź·ģäåŽõćöüš*ž  č "æŻń;īź) öüćöņĆ<ąģģķŠčģėśüą ńšźģčāóüéāņõņŻśč ņ)ö %ł4B šļįņłčķ čŪżÖļž õ’ŁķŃū Ż'ēņ ė Üį꣒#ü’ėÕņŚąųęšČóŠčļŁų õūłö$Äū’šŲżżżóśö Ėė ŻŌń š÷ś÷ž’ ų +" Žü ßęį ńŹķłųčžüłīńšźīūę!ęü×Óµ įłč )÷łŻś"żŪķēÆŚ&  čĻż Īėö.īźź’ÜėśóÅž ō÷/ ņŲ ĒļõĆ($& ūĖ%ģÖł  !õÓĘįė »ä ņÕąé üō4ģ#óÅöé%Ā-#ż@ó+źŅēŌ öłłōÜż ķĢ'ŻŅ łć&ų ¦‘ōčņż ēī6÷.ķ"%Ņŗšļėś€.@’ ö#īšó (!äāõ śżü-ķšō öō ’ķ!ś ōļ$ õīžüī%ńęüļøčśčųč *š āź  !źōōż åē žņļłōūéģźī÷ż üö# Ņ÷ž ēīüž*+āöų ų ü(ßä’łīźųā łżö ģā’&żņ żėņž źüšżä ü×õö×ōüķä ’ń ć÷ļūģī <õŪųņ% ęŅžé(ężņžīöžóå’ÖĻ żÜ ·å’óšąåś <ļłßżņīü ūčżķöõüļķū"īńŌęļį’ōåįļG× Łśė ÷ų67éåÓ+õ雳ōóūūńż!-üķ ź ŽÜ ģ:óõō6Ż’ųżųā3šÖ!'-,,6ņą’ ń$ä!Ėęó śšξ ! Ų =ŽŅŚŚŚūß īōķŗ-=7óéķżÓķč ņööEšó/ģł&õ ßųżįł įžģśüņß-äŽ (ļÉńĒ ōÕū÷łō!+õš)ģāä÷ÜķŃįŠÆÜŚŻ'ļćęūźęć ģć'×ģåóņü»)ūńź÷Ū,%é6ķōį"%Ę'0ü'44%o:ųī !öķóöV’ų+Īóóüß ÷üIõ™ „%ĶŹōū#$ĪBń –Ōļų,ęę¾AÉŪüāÉå’§łżėū'Łä ÓłķcśŁįÓéū:ž÷čJ ģ«7Õ÷5żŽL×?1Ōšõ^ čŅĄ÷ėß/ęźż 6× üõ!0ż į*åłæīõŪńŌČöĻż!,ūü ģņE2ń»ßčüšõā =ż ×4FĢįĶō–Čö½Õ# óīĆś÷ü !ą’ŽŃ ÷ą Ū.īĻePūZĻõįūŻų„ķ#Źóīö¾ŸźŅ÷žÅšł ńżČł=łå÷ŁĻą+ę 2žŁéV Ģ ē&Ł'ź’%üīAKķ9 Dūšż7:ā'ŗöčśBį’īöģżųęś&(06 ņżżüüśćŠōśęą%ō2źéõū šš ėā ā: ų'Óå菞- łäŌŅāźņēößĖäü A é>Ź- ķźśó) Łöš! ńüõģ)ī %óčžūÜėÓžīūÓņöü÷ćõłļčź#Ü 5ūśŪ! Ā õó’ õ!žżśÜß ÜĀöÄ ļĖõķ#õóÕžĪēĻ9ōē’ŖśFķŁüŗżļžŲĘļķ`ęņŗĄųų ņūŪöÓ2ģšē$öėõ1óųK<ņ÷# ś"ķ·³ńö1ūń<šŌŪŲžģķģ#čūżÜ FłžööōŹńńŌČ’ äņ ,ņÕė8ļ2ęöŪ;łÖŁš÷Ž'ņč ģł“Ų/ń źĶ/ŃĖéąįęĖ/ ’ļ JłŹ%&Óżüóū!žüžłółčīü÷Ł#Ł4žź Ń/āļ Óī šćóóŲńūłźŽężųūč*óéö6ąż ćõ߯Ē=åōļ9āĻóö ōōLÅęŪųļ&’ķÖČŽ&ų’ą  Śš7Ģ÷’ŗ ĘüÉńų įēŲčü 1÷ĻŅņńįäūēńęī’āęķųģ1ü’CĒŲ÷.ó ų× õ óėåīū’ó' óäŪń’;4ō’öżÖśŻŽŚõŽßŚģ-äāŁźņ)üÜķō3äżżŪ× 0 JśåüśóÉąó ģž Ęł÷ åżóßī ėĶŁ.ė'ź÷ õ¼ū!Ų ę’ų")Ņļ’ł<ĒāŌžčÉ ł Śāė÷ģö’!čńēÓļśŅ挳ėĶśõ ģžįōõķö"Ęõń.ųū śłńõ * ”ģŅ 'ś+ ’ā÷ā į²åÉą ė&īķńöŽīöóö’%ė’ßöšŻóę'š÷öūņćŻćž'īīģ ņņīśüųŃ,ń Ö +Šš4ū’ ōó  šž3īęņ Ųś÷ÅÜü,"ųöÄą łÓČą6ĒAłćŅĘĒēßļž ļāāҳ+ēęåš’$!-ź3īåī¾üś’čüĻēüī# ęū(ēęūĢķŻ’ $š ŚĖä÷Ö%ŪõéjēŁ)źŽš’×÷NÜIėåäż*¹ŻŲģž’"Ķīś’ŽÕ? ź÷ŲĖä’ė éńI0żüV \čā@Ģżū/&ó;śÕ¾ż &dÕL?Nųü īė9ų$šĮiźŠHģņ/žąō"ćåŃaČįēŠ<źæ% ’%,EÕÉõéõē(ēźéŻ $3.āÖ’Ų@D05Ü’Ńī=ĖMG^ö!) ņ-éŚ Ō-4šźØBåŠäź-Ōś ļŻųšŌ2Ī!’įł%/’Ņą#5Õōģ±6/h&ÜńõüĶ!Ä ĖęŠ óļŁžDå Ņżļ!ōń)õśļžłū=ź ųėāš÷>ļō(ßküčīžõćšųŽąžüų!’ ķ!,ö÷Łźźč’ļ’ö-÷Ū?ēńļü/Ž!ēžź(9ĘöõŻ/ųķ!-ōéėöś Ņ łŹ'ņėęŪ+öķĮõ’ū"ą*ąś ööóīBŽ#ģ*šńłńN "ęųüŅ€%0ī.ķŪéčģ÷÷ģēų(å ūŠł žä īėčć é÷'ćńāŌēśķšŻŠéŲ ž×Õłżńęõ÷ń÷AŹõŻŁ,ßņįķŚšüżļšņ. śŪŪÕōļų æżż0śūļüó Ūž "Čųź$ŲÖ'ģüÕüņņ’ź’źšś#ó %9ń"5óļüßōż -ń ĖļśųĖą ’Õ Ņģó āśßŅļõļõ ūųśńėļŽ÷ŲŪžģ éžźźÖü×öž+’å ū ÷ žĀ3óż čóż ÷ÜŽöźūņī%’ļėéó’ž Īöų’  łĪ $łņó"öóŚ’žģ āīąÄšßś öś2&ž9Ó õćĶõÜņßīłŃ’žß ąłŚ÷ōż-żźĶō’ė’8ćŹõõ 'ö’ļ -éĪŁłéóK*&Ūł» Uėõ#ūčŻä‚ ņėõžäåöėū 'Ł..åīŅśžśśż ÉąöīŲģó šōłņĪéż<āņAüß'ūå ,Cžūģ#üŚōē6ŃąķÕõ99ź7é(Į: š+&ćóūĒ 'Ž7š% Üģ8ļāŁōäó_<Śęīč/-0õšū¼Ąś÷×õBõäFõ’ōŽė!ļ>öī'ÕO śæ-ĪĢ ą"¦īż'ģ*IFāčį)#°ļ/6ūŚE‹ĪūŚų&žó.. óķžą’Ą0Ū ųéńźÕā°ūų½øŽkł#Ü üłęߌß1Üļ+5c:ż Ūšē’£ūż Ōč— ęšųŅõśóū÷ęØóTųÕ D ąļ žś"  ģ į  Ņ’’żēśķä šü!šėņē+ž÷ žļ#ū÷ū’%ąęēćń ņī3żćäńķ$#ų żī 5ōšŲóŻē’ ÷öęō žūųŪ0’óŌ&(äõü.Ų ėų÷"ė÷åśäü źŚ’ģ6Žę  śł" ģóž0śļōūČśńŹņŚ ż= ZŪšĶš63é*ż»güū¬!ū÷ ¢ @č&#¢#łÜłü÷;öńü%ր×ņĒ*~õ€VHõ.I89GQčŅŚµč®ŹäŲśĒÖāń94Ī) &ū óéÖóī+šįś2ZęäłņżRßļėł)A īĢū)’Ž+ź(DŁļćŲ bźõ* Ēņ[Ūįżõ'łė"ūÄó u ­ŁĶĮī;Įģ$Č’ į äųöķß’. ×öŽŚź’7+ī ś8Ż į ōīńźß>÷©č&ģń ę×ōŽłę Ļü“’āü’+ĢųžVžėüōéė'ń&ģōö ’ó’=ž.ēźÉŪėėß’īīŌģ%öü* ųļ$éžņüé0÷š,#ė+ÄŻą’Ł  ź(¶3ė÷ Ńšõšų/ŽīßĻėāĖ( ¼$ōBČ( -ĶūėGĪ ō×ōųųēżüÜ šīńįÅųī ÷8śšõó æ&šéźģ#.ōöōģōķ#ŁäŽ# ż ŲŅž"öÕ ę÷ ŲĻłÜ!āī"Éśģ5 ōĻ3ūŚõ’ ņęü EłčīŻųó )üöżśóķ› óČżžŪ0éõąž(īāöńż(ę÷ē<ėšė/ Hķ ņL äĢÕ ē’ õłūūšŅļśņąå)š+Õ&ŻBģ-)ŻŃ ČģĶ -÷ēéżāßņ łžēÉž#ž÷?Ā"ćļ"éŚ ö4ć3Ń ÷"+ņé$’Óļ ō÷ęćAō Ņåųō’öóīśģųņŽżöÜ6žĒ)ųłźōņķ $łÅ&ģ.ō"ŚļÕ==Ėüī[žłŃ *' ā%ö÷Żčšļ)ņ&#śé!4āŸ#÷ģėÄ9&ēłēłžŁż-UąKäŹ9ÆčŁ ÷"ŖźŪ ( ÉīóÓóõ-Žö±ś×7š7óŁėĀųųš× ’Üēź7öÓ. %; ņóü“¹ģźėīĀųż’!Žė ż’Žęļ0ūõ ė&é¶Öī’üé šüÄ+ŹĖāāŁśÖå÷ūōßāķśöąü7ņ÷&ŚżšėšėQŁżü%įĶ/ü0¹’Ī%*ŹĢ±į³ņę½īēļūVšįł!Éŵö éī1Š ūõÕ ń#ēš0š8ź·ī’ų(&ķń’ 4šļÅ> Ż5Gį8’ķXł ł"łą2ė ö ų"ķŪōęūŲöł ō &ķųüėųżĪśļ%õžčõ’Īéó÷$ ī6ł’ ń ą*&īń ńźĖóÜł ā×ģõīńņ$ąļłžģźŻōģųūē ņ%éłē ę ź9ś$īų Żżšü(žķļżłŪżūüżųå!żńåųŹÖž÷ģļ 3ö’$žę÷åūļüąōć ’ęų Ūåõżę%ßéņųå÷öų÷ģļņ ž źń÷ ’źó*īśņ äžų ļéõśųō÷łū Ö’ļ Żņ ļóūļźėö üõłäŅö š ō ŽŹłéÜś’īņ÷õśėüÖžėģęūś žöų3žłų’ųģł&óõāü żōĻ öńĘń 'ē0śż%õ÷’ ż8åōöąŽ7ż÷ Ńń× ķ&ó õ$žā÷åĀįÓåõļąųōņŻžļöŚą śē6ī7  ū’ö1Łéī üš¬üųöżūųśūō Hį)żąė üū’ļūč&Ø žķõ%ō’ō ü÷üéą óžščśŪ"ļó’üķ ’;Å öüĪ,Žž’ ’üļ¹!ł°(B÷ćģ€äȼćųŪų"ūüü¾'ž9ž Śķ-żżźīļģć &µ+ÜŽŹ¶Žņš½õõčļĻćįł 5Ś ż0ėŌķļŌ* . F%,Ł ėŻō “÷ö÷ ¾:ŁōģŹēŲņėJĻ÷ß5* ÷ 5ēŗüŁ> >D&+ńŻ- ĪćīõĆ/#óėł uģįńĀ.÷ę“×ü5Ż öż&õ ńīšü"ū4 éżėś2 2īüÕł’&ćįŚŹČć¾ķś%õ Ü ļžéś ŻóŚžöō"<äéā'ųüźžēūŻ"č1śÜēöõ,÷Ńąś ńķ"+čö°ńąä Óźļī7ļšņšäļęŁß%’šųņ ’*ö,#äėō÷óńĻöüéÜ’ļ’īĻļżó ī""ō1ćš’ūč$ėņüłźńó&!ķą Ķ’’łęķ*"žūų čųõśćó ÷ōš3žŲźł³ź ēłčó1ńźī!ūōČ üÜ,žÕ'ęĻūéžōīüįńķõ-ńÖŠš&’’Ö$ ę ļÖóĖ +÷öš²ļņŅ#éī :ėēüīīóī8<ö8 óģöįä=łÓõ’ żÕņī! å!,ϼóĘšüģ’ćś+ć .į×č$ķāåōÕāĮę' ÓÕŻ%āüĪ!ėŁ’÷Ņžā ׳āųģ ÷ ńšóŽ$" ¹ė1šŌł ź ŚÓōŌįėž Łłóõß÷ļų5ń’ųÜ$ųüü Ųęöāµü , Bąü"æ"īņĻāā ‰äšļū żó÷żāś?ż%é łī÷é"ö­ö 3Żēóżź2Iäö2ōśéźįüś öźūļń2ōķ × $ē-鎹#ķ'žō÷ęé(ūó# Ś1šÄīē ą÷,ż× ßčūčÖłģŪ5Ū¼ų’ŹŌģ)öÓžįś &Ćōõöģž÷  žįī :įŪł!ś’&ėīćéóć;õ’ņ'čķ +śÜõöžõ ķū üōļõėąķģ,ųųõ’śäśķž. óżų ž’ųėįš ų ūŲŻć ūųųŻń&łüž÷óōī Łųē’ć,öėźīėļäŌżž"åōķõłąóŻõń  ¦źŽų"äėłē2ļ õūč ä!åōųå /ś’śõžś Łųö ’’šžõ 4č Īģ»ńņöśė& ĻéūüŽčŃų÷&ņäüŲéō*ųÖżčś$åęĶåėß!ė ūłņįźłóžę¼ä é’ōü*Ņėžļźę .üīłķė śųųē9įś÷7žśśżģöņÜć.öüÓ łųŽš1 ’ķąź  ž÷ņŽĻ ś$ü ė,ųöµĪ šžųLÖĪųÕżßļé%ļēłüō é 1Ų4+’ņż­Įź1łū= čŌėĪŅ!Ņ )śŻāūĢžßšģ $š ¬ī’üķ ó!żś Ū' !( öÅ,ä!š÷*šłžūŪāčõū%Žūö ĶŅ åšš.ųÖ’öŲļöōļłł÷9åŲķÜųž÷ õ#éłśś +ćķčŽ&šō /ćąęõó õ  ś.ōģō4żū&łļåż&ßäńšźßĄųĪćöžüężå4 ś(’śśõūń żążų  ńżÖžšąļōū ’öķé /ńōżļģō åłķģźó ' ÷č õ%Žėłųõ ų“śēæTåž ā#> Ī+¶ł2čź’üģĖ;  Z6 ńņćü’öšöć ń+ łó%-’=&ŻŲü žī÷§ąāā?łä4óļ’ķŚ)«ļĪķö$żž śA«åõļ.äęś<< ēõåėŪüężīįšŲüöŚąŚć ’ęą ÷' īöć üėģó< ’ó õōż"$ę’ī é#ęļ ķEō(术÷Ü× 49żMīūųģ'4åó'!’ķżņóźž2 ęɾż*÷ī Å&! üśŚ÷V ņ-žųüó- åū$ę&żžĘīĪ’ųöõū4.ūčõ3ńÆį-ųäó÷čķŚł÷żń 9&öģšīÓž Øü æ/ Šģź)ōžśķöļūłņćčłĖ Ł äēßśöžżŲžóīž÷ä’ śŻ Ō *ļōß,ż ųģžéš÷ģūöŻ.īģėų äēżīž’üą#Ńžūņēų åņ’śūöé’żųōžų÷5ō ņ ł žķńźėś3õńō÷üóóöüīżü$įéļöÖż2öģ&żōķöōšś ņ'8Īė“.ź ż" š J÷łŽ ööšśłüÓō!÷ģņóų!ŌņÖ, ÕŌż’öŻ0ņ÷įįī /ÉÓŪżŚ ŽéŽū0 øāś¾ę’ ’čļö-E ųWžōēś÷+ü’ī ł Ö ńéū %:į÷łą#ė+#ģöļüōźīčūų ļ čüCéŹ÷ Śł0ż)ü ė;ö%*3/łń*åŽņ śģ#Čņ%ž(Ä:ųųś ä%$0ł,ćŻ’ĒśŻū'ö ćźĆ’32 ÷Ā ą÷ ęė÷'÷ń.ÓčóĪ  ėõūć’ź’&ņ* éāåöś !Ü,ųž.ģÄņūššŁń%žųÕ ų åō+ę1’źéö÷’ģ ęūóķ üé÷ź<’’īāćŚ)ęž#ēäāōźē&"ō"TF÷©)ņ ųō? ēšż Ż" ŚĢā+ ?rĖ€łÜ4Ū ęłéĒ źó(Ńć ąöé ē+AĘłš@ņūļ&`#īäžņJüż×!łÕĮż īÓīé’āąū ąü*…¾ųåRŲéąķ Ę2Iīō ¦ 5 æśBų"3žń’F õļ ī" ōšżōī ÷Ńģ(ėĢńóę  ×üī ’ćźüÜ ’źģß÷ Ķ ź ä  ūŽģßź īéį(ķž’"  ųģ"õ’'ßłžÖ Ų*ō ĖÖ ļó %(óóöś(ė&łöūīĖėļōē’źüŠó1 ’éā  ō ė Ž ńüųé0 ķõśļõŪžöį+óż öÓöūļńōż’ūŪąŽżķļžņ%čńģóüÜķŪ! ę÷÷× #ļõļōéųūŁłöēņŽåųé ōųüżį ’ßīżū ććł īł"ł’ę ćü$ōéó Ūųł+ł Žš ēżš’Ļė) ēąäī ėüō ķšéźččś&/ń ³ Ó’įłåĖ@źÅėß źńKļöā0ż¼žįߎRÖś* æāßó 8 ĻńLŃš ņ #ö ōž’  / åųó„ü óHöĶéå%ćśż¶żę¾$ķįF»M?ź@ść½ąźź’ą $ųē±ķž$Ōģ!>:īĒėץ 3’4-%&»ķCŚ=ūŽ9śęŹ+ģcėĖ-=JÕ!Ėė4ōõķŚ#’IzGķōĪ*ųįµ0!šßšüõÅĻžē+&ķ āĆęļčÉ#^ĢōšĘÕ =į ś¬&LęŻe-ģT.ė' ŌņŁ ²ņöĄ3éč#Ż$ō '¬Õ’0čķ *żJ©ķ” ÷°Ī čę÷üšėa#`^ńŃéŅ AŅ]Īų #óD¼ē(¢ČŻ ö8ŹĘ  ü’1"ć 6(ģ Õ, ūō=ü$$×"!ČÜŽ( śĖ ē ąņīģī"éĢ9šÅįāā3 Ņ*’ žļģļå9ķüż#šéņ+Öū šżš"ģīļóÖģųÜžóüę×āćņūüüēŚĀ+ Śńźć#żžņū %äśĻźź9žśęćųŠ ćķ÷éŁųėśŚ÷ čĖ ķ’ żćļę"’łēč ņMKŌÜæŲ+ēŖčś@š ģć’ČšŽķåū2\éįņų žś<Ś×ßŅäóāōķēöļé"’ŚŻņółāāŽÜüź÷Łī5÷śīįēėÜ+ęėÖ䏜 łųżś/Ž)üÓķ’ś b ōūü%6(Ń’įüü’6æ44 ū żģ ßž6¾ó×ōA&J'Cč·3 ›­DõŠŻķQõ&$Č !Ļīó2å üIćņóÖé,ßŚĒ’čē Ī żķĢõĶśż!ū.÷ņ+4łŅ’ņ’óīż!ŽīūÖžģ ćš°ŅWź÷ūīõūęÓōžū,öģņõ šł"ōZŃóģāö’Ų%éåŽŲķ÷śŽłŃŲī×)ēūä*ķöŲÓčõāźėµ ųö>?’ž%ļ ģėŻžģōž å’ą’ėūļ'żųšżųś żļķ0(śóžėččīą Ž ć  Óūā( ęśžā ļ,óčÓż# ųĆżćņ õÖ ūé(ŽHāńš żūóó#ōēŻ"łųżėŻŚżä'žėéįžķ0é#, ņ#Ž’ćńž'ä ä÷ņš óõļ Žļōųó čń ų Żę ö÷ ļłźń Öī+ 58A5žŁåź ößńł ēūėūśżźöņųųćŽīūłĻO&ōąžņżż’ó ÷ååöŚ2$ž 1Ģó ųĖķ ņ䎌"ō<ÜüļčõõéėŽ! ŻÖŅ÷ל ó Žćęģź!&ż'Ų*ü.;ļó ÷ó ęóéī$ō >Ž%ųø.&Å÷äśłńī÷×ö öž#šÜüņėõüčżėāį’óŌ ńēļā÷ęõń7×įū!×ūč3éżļŲłńłłē ēłüž/’$łųņ+’ü’ äūūł ōŚĖŠųѱäīųõ “óļóöŻ ė*ōį 1)ś#Ā’ā3÷ Ūś"č Ķ÷śėä!#ņŌēīźģšų 5ö÷Ńż Ü;õĢķR FČĖć7üéGžöOē×!:ā ąģ8Ūżžķü ņśäīŁ8Łūü"ßż÷ÖĖJ Ūś1ćģ?/å \÷éč:'ćŽōīŹ“ß’ü“.×%Źōš"żż" čśīäē7ŽåäčńņžāčŚō¹Ż2+;ņĪ%ÕüŪóąóÕ׳ Łö9ą č Ä éō½ģź*]ńŌ¼éļę!ū 2"ö ńäö źČčŲžõ żś  žĪ:āš!śćķū  śŽńü’ŪōōŽźģ&ųćžā& ē÷śķ’Īśų ’ńį$äÖņõłżīį ēżķųūž ąź ŠłńŚē īŻ łžĶ/üū śä óēš õ   õśūūįż÷ ķė  ģźłć(üļć$3ę óóńķśņčŚīīżō"6ļ’ń ö’žöņöā*é$ł%’ą÷ļż2ųē"’üįģõéģ3ćśöżöźéčõ ö ō % ļūńń'ūģäķÖÖĒ ō ׌ī äūųęż č óćö+ķöŻ öõ Łķżųųūšżõļļīį'ĘōA ŗ+”ą'REa:L,ķOķK"|īŹóŽģ€ų ćķ b%õW§|Ü"śŒ.HHÜ,hXĆŌą2(IĒ.=Õ×ü~]Œčģ7Ķ&:ė’•÷VUϧ³i+åōLN+Śø3Ŗ ’ŽŹĮ­Ą|ĪAUó?(,X;Źć?ÓÜ’Eż€ųöčž×§Éå*MŚśīę+,œ‘OZ+ɀšÉǁEūƽHŌÄ ź!ŽŻ$0#óé Šē ųōüÜöž ģū ū)š÷#’žīš ž÷ņöņ18ś ēĢń ģß÷Ūē×ń  īń鎜ėé ėļīżį÷#ģžūżå@żčų’ļ÷ļžńū"śįųč ’&żćź ųēź€ $łžŌč%  Ńīņ#ūų÷÷ ?ėł# 'łśūõį žņł ōķÄõŌļŚöś åžņęźńŪĒ8ļ½ł ī< żņ šļī ā%(ü#**žģž"ÜŌ"Üśżöķķų’īüAČ÷ēŻć ÕūŅ ßĀģŹåņ#’ļõģæūŁŹ żļ ęõżö: ōēćńÕ’÷éłö;üģūųßū’ņų,žē ü7ńš ūłļ÷öęŠDÅ źTįŲ9€ŽŖ¹dł“³Eź;łżÆ€žŠTM”€ŪŃęU5]·Ę1-Oš%ü¼ šłųe į0˜ŚēŅķd—Œü#   µµ#ĒüŻ#-Z_oĶž+ Y³5 €µ Cš+÷ķ¬kDܒK„)ēĀÜńŌ© MŖŲĒęĮÖIŗńŖŃ`4ŅHnēWd¤ćA““ …+ŪļŁāž9Y€įģ€ž£·‰¦—ī÷Ģl€8¹¦lčžéó, üńäīēģšżųģū÷Łßė ł+ü ųżĪłēē’ž$÷Īęįū ńżüóžń’ Łūßģōšįīēżß.ÜšžżčīĶÉ éÕ÷,ź ļ šó.źž īó ģų(óčę /ö ’Śåžāų )čłžćļū  ū å ßēüćóšÜÜńćżś ēż4ķ;ēż|ņŽį%ŪK’Óīó(/%ŁP"óŖĆųļ$Ÿl÷īįŠ×ŲøCņIäćó ]0JŹ}1> ż±$Óą8ś¹ćXāńæ×ł&0–čśFī* ŲĻM9ćśżįw*6Ļ Ę’9UęččŲņüüä’ž š%$ńŻ­Žč Õų–Ü÷>+/éÜ܀ŚõØ4õļ0ģ]š„õŪÜżŻäöįņĪ/ÆųĆżöńU×, </ļ3Ńž ōŽśųģöüņ öżż÷,šŻģ  Ā Öė Ē*c Ūķ÷ūŠĢ:#Žż#BģŃ×2ī Ēč2õņ &Ö:?Į2Õßę’ī@!łę!Ō ÷õ<īūģć?’o/(žņ-’ŽŅįĀĻūéń0³ŠŻäāų%#üŃłPŃÖņķĒŽńōķķōóį!ą’śÕł īūŽģ/õ’#čöų. Ż śņ Łéõ óõų1Łų" ōė8ż )ł łŻž éōś  ł’!ęż 'ųń ūīž÷ż üģó’žń¾ļųŚļ ŪÓ ėõäŁļ īżćē/šééōłō ļūžŻóŒ"-ņĪüÖ Ļ žń%īśžųŚįżč"’’ž-ÖöČź žéęüŻ’ōņ÷ žšśö ž’źī%’ ÷ļ š"ņśłńĻł$9 ńć#é ļ*ļ:ēåĒŪõīŽž ż0%ööżļźśŻß%ĘüQż 'ä÷öźüöžłŁõćļ&œõĆŪž Éõ ńśńć÷ ’ńüöĖ÷ü4’ņī ōóĆ)ēź Ś6;ķ$ēī’łü ģžģęē%čųé Üńłćśü’Óśś ł!"ü’%ż’ļģó.ä)įŲéęäŪ÷īõą.Ö’ę0÷żó öī%ęüü÷Üō 'ūėļ&ņūčöśõłū4÷& ć šéÜó÷ß śčžōźš#ņ’ų"Šā"āūūĶž?Ž!ļÓļōūīś ļņéō# ņ *#1' ļįį’ ’ķąüš 5Ķ#ōžī óóūżŻē*žüī$’ąŃķųļĖ įķčņ—ń&ģųų(Ī×(2 ĄÕōģ.ųü" żīŌ üųüäōųōķņ įčĢš ,"Ų=Ų¼õü äūŅļąĢļ,īčõÉęē ē;žč ’¼ öŲ ’ųõōśŹŁõč®'P8ń:÷é2óīõ/ūĻĮ źž 4+;Ą%óļõ)ä ąĖå4(żüÕ,@äĄļö÷Ņ2ųŚ'ō!ßĶüńĆ)’äūņßĢ !Ó :>)Įßä’Ś1ąņ ļåAüŲĮ ;’'ė(¾ņ4G揜*ŠūļŻ·Śōńč’ņĆĮ%ć ŹŃš/ŲĻėł7ÓŅ 2ü×ÜōH&śźßĘŹTćģ U īņźĪ,·äŅ* *ļ Ńå&ž&ēFōĒŽĒ(ĘŠšĶVęB  ÷żļā āę±3Ķ-  ų,÷µ5(Hš;ćŽńūź/#śģń Ų*ęļžüHłģėõ׳ ŗō1ō÷ż¬ü$  ņõŲē÷&×ĆōµŽ $ņŻī-ģć(łūōżŅģ 4/ć%÷éņņ¾źė°= ¾Ėó÷4ģļ÷Jü³Ū ü *Ś«ĒÜšĪöŠåX?žD,ęĶ÷Ä õÖī+,ń&śż&ł¶1ūĻĪÄĻ äīč÷āėćž -ęńņśńĒ äŽõĪ $ņłćłóųēńūņ$$ ōņמų ł/ōģ.ńŻ<åśīūš54ų÷ńßó Ū-ūļ’ėóŪŌäöŻś!"óä¼CŁĪ/Ćš ōį!õŁš ųūń;ąåć1ŹīÉßÖ -ōśż  ā%Ż #źķīü+Čēżéź’FūėĶŚżą×łņżā*ńŁ*ų&ÖÓėēćūŃń$ėł’ čäž÷@ ńüóśÕ ś’ŻÕż&īźžŁ’ ū %żēēź 4ūŻŪš)óąčļå×ĪŪ(·żōß’ļ$&ž šę9ź "ŪśŽżóų÷óõįļč$ęėōžēĻł" öł ß*ģņäš ūķīŹłīBõ÷ų)ą źšąÕüōüīŚü )śü =ģŻ Žźž ¾ ć, ģėļś)’óš$ ī( ō#ĪJžū÷üŲ ÷ å’źńK !ūķ<ńóų ś ķåüāŁ#ęå×Ö ;Ö śī(Ļ»ū®: Ū+į&7˜Ģä$ßĖĪĖrāąńKē£*ŁG ÓÜŁ04/ąĆ Ó7æ<üź)/1ūŽ  žōßęAł ŠšųM 2@6ZSāĮ"“ õ:ō%ļē'ĀśĶŁ/8[ūūš üåņįāųāļŻ»×—“ŌōģÓļ ČłŖåŌ ų6ą-Ēøź ±žĪ ÖćóÄāžå1ßĒņūų*ö ( ćÜāŲ’āńł ų9į& * éß÷’'’ę(1ŲģÉ(łöõž& ņ 3ģ抿ę  ę ū@!ŲÓģēüĪłļńōšõĒŽŃö ł öęö ėēźūŌ’šŚ öŪ źīåóžįöžūģ ūŁęæé ä ėóī :ā’Öž’ßąāßCŲČųč!ņ-öóL3Żš@##éüźśöāā ’%łBŪ ŚįģŅļź’ņÓĆö(ŻåéÜģ5 Ō%Ń žčßžŲą’åń¼10ōŌųčłS/š-÷·ßž)ģÉāķVšåõš'!éū*Åį īŹŠķłšõ öĘžō%ōµéÄŽŁś' ųŲ* ń6ļ<é4)ö'6<ÕRŽÖŪ ’ąų ūü÷ūģņī’ń’Ī čōų!ś ėö’ģīļ äó’łõ åłłāūüźł üōņīłėüóėžń óė’ žļūļż ©ćī ž÷’ļń ūü śś å  ėžń%-ķļš ļüņüųń÷ųšņķ’ųõ’’1ŪŽŻČžę,ī÷1 õ÷ éó¼Oś½ųķīłŲū÷ū÷ģā ų %2šó=SŅ×ķĒåŅą*ģŚ9ą÷:ÜÜ 3ģ) Ķ2"Mīśö Ļ9õūąūó ś(I1Üģ2 ęś=į÷ē2"ŪŠ’ų  ō ×Ķ) = ŠIśżķ'śŲ  öüśÉšŃ-ų 4ęķŹō’?Üųķ÷ ’ćéńęöżēłžń÷ž żģ%ė ÷ēū3ČŠ×ó0õÅ&ō ų+ńšżųöąįÜžŹ’ķö üūņčö ąō/9ķÉõ(’ ž)ężēüüż#-$  Å;īõ żöžģīŠįę ŪņŚé0 ņęĶ’ćēõó (ē ÷Ļ ūÜö żāū źš’åūéž; äēö éū  ń*į×5ų/÷Źī1ū ķ ! ąß÷ļÓ śĪ'ōéöś æß"Łż0÷ć@ļÖü"ź įļš ļöģ©0# īē/ īžõ ō ’žüńč Ģļł#ūąĘļ #åņéčéū 6 ė ųįć š,2Å Ū,ęī ’ļ.Ē żéžżL% - R ģŅąķĆPęīł, 7( łÉķé’õņ ē#Čéäö.äßžėģūńöųī. üÅśłĆöß CŲņč +2ć-īłé¼õ( >7čĀšó ūšęś!.śµ"Žå  "Ūūåįšõõźķķ: "ßäĻ Źā 9äą źóź% āī¹Éīé $Ū’ėęóś ÜņŌóŁŻō ŠŪżżćų öų#ų!õŽ žī&Š =’ąīā%’śōŁ ā ōšõķ"įć,(ūčĘ ļśķ )ōüąņĪ ļ) Žīņ!šČ#īõÜż"č š’ĘõĀ ćŪč *ģĀü’É"łń«ž! ŪÜśŃóżü üšįā ę& żóäš  ņņēņņų čź.ōō;śōÓ žéķżšó+ ö,Łģ’ * įńńūóųēźÜ éõü’»żžŲéżķėōąüž ’÷ųńčåõś÷ äūļāčüēńš  ģĻüžóåūūšūōŻŃžļ ķčā!9īŽ0ųĻčßōś üŪŹńćīōóśņ åżśłębśŅ ō ņö5ž.Ś öżńļ».Žī īĖ+5ķ’ėģĆżį łūß ó"ūĘ’żüĻ;ž’ōńėõäūēųķŪįś.īļ!ķüüņ’’īēķčõżņļńžõéŪ÷/÷ē÷ü ßļ  ī Żū’ōś÷žō&  õ ##ēō:ī ą$šść Äėń÷łā ķ ļ"żŪ"ęåżóóķūśč źņ Łņų¹#čųžėäēžłķź+čć7ćģū !’ę ’Üīģńóžä üßĻüĆł+õūōüßņ* čęńĢ ž÷7Š ół 0ūē  šķōł"üśö÷łō"Ż÷ Ó,ņūö 9ūĄęśķļŌŽ#&ń‡éņų Ō(’[ł ąäłų3›ś× 3Ķłśź ö/ņÓ×’,ćē.Ķüó»±ßćīžr7Īõ ·śĒ×üŁū÷Öń 7¤2ųH3 ßéłéü ł ρżī½ź$ś ōOōÓĻńōŽBĀ £ų)ŅčüņÓū+ 7 źńįŃ4äŽ1é:óż%0(šģ½į ĖĘŖóåķåųķčē#óķėóļž’śćėń%ļļńüžžåõ-  ŽÜē ż ōųšōēņ  ńė"ńā­éģźśŻ"’ ż÷ ū łÉ ąų ÷0 ü-ųŠšžėŅÜöŁÉūķķŁüĶ1å öżų čõąļįÕś÷÷ą÷óķżżö÷ĄéŪ!üģżÓśī õ’ūåģśłś žł% 0üō õšńųūöĢé÷Żńšżüõž ģéąéśćģ’ńŽ % śÖūņžßž’&’ī' üģõ’!öż !ń ÷łļ¤ćźõūēóūē  čš’łõäą īķļßųćīć śōš÷ģ źūūä÷(šę÷&×hż ļ’ų’Ńü"’Žģ6ś/Óś Čļč÷õēźžß Żčņ4ŪÄ Bö>žž)ł’žź(’ģ) ņŠė üč Ū åü5-äņ ż÷čöÖŹßųūŃ&ģ9åņéóŲ.­ß ×ūó$ęŚŌÄ;ŲŁŹ!#ą žźęå5žņ÷é Ę+ ć  Ó7üšķ3ģē *"õ źä$óéõšżł%ćę’Õ1śõž’!ų’ū ÷šėōõė’ćóÖåŃ Ń żńĖūū’ėÜ ūīļśėś5ņęóļšį"õ’ōšųżė ź łž'ūūžūéźåźōŃūłęąéń&ö"ßž % ÕōżŪ žńéžöóžėś’ö żõŲīāē$ öłźć ß1 śõš Łś$żöśę÷  ļ)ņżīīėł÷ųļķī(ņ5!öéų üłóņõ&śüģėōéÜųńšņõūę@õ’ ×ń ’ķ üöüóüž śłģłŽłųŲķ’źóšö’!’ ÷ų  ’źōüł’šō 7š:(ü5ūęŌčž&łßžõ5ļą#Ļéń č4 żžõēŌ ūā ōīļö&ė ņ× %īō÷šĒäšńūė!#žééŻæńć$Ž÷’ńżń+łöõ÷& Ė#×ķćķ ņ"ś åŲ÷ ņų’ öĶÜł%ūéŻ)ó)’ō90ļśé#īżōččżęöīįüąŚūūźŪõōūÕŁ ųŠ į ŚŽõö’ņõĆ *żņśńąóę"4÷ żä)Ģłš%æčĪųū’žūüŁ.šÖ įõš’żāåśą /"įü’ēåå ,ķ'ś1%ü śŃķłūöō"+’śūšōŽūüŻčįśÕō’’łūņ óšō#ų9čńŠõņĪ žĮ$$÷åęÖõķ’õšąūš õ#ōķź  śĪ+ę =śōųįåöśśń ēķŌśü$öīõÜÜķöāėń äµ"õ öćĆöį)ż)čż5õ $ńł ļśķłų*šĀėżäņ 7+ż%#ń!Żė ń Āóō’ģ׳ÜöäšöļE äļś -åĶŪėšńņ  žé č ļļ( żńßńĖ$ ųīõ’@žÖžĘ ōžÖńäūčóńõņżöźĮ Ł īĀ Żāū ūłõ;ŁĒ’ųģ$ūąūšāś!źłĘčē÷ķų#č ŅŽķč ųóżŻüīłņåęėõ÷Õļ īó# 9žęÅēŁŽ’Óē& ü$ū äžśź žžž5ķśėüĻ’ōų Ź÷āźļ,1Ō’ł ņ’žšż āō-ā +õīéų!÷õäžÅžž !,šńżžI÷,óžū÷3īōöåDüł ź $éį ņķż Ėłś ėś÷ś śńčóņÕņ’ē“žśÖšļõōģļšįųÖö'ō(ū,ęõõė ķśżś üę’žĀų äĒó# č Ūüāö ēģšöGśķģ õįŌö éöŪžīģ÷ą’÷$łéū :įķüėõż÷ķķ !õüŻō’’āꞌ üæņżż#õĆåöś÷öÄķ"Łę ģ ń ÷õöļõŌū %ß ėŠ  ļł", ųöŁŚč’ ßķ:ūļū&Öōńäļź ųüō!ä8 ,ūńūķē żķö"ōéł&Žōźūõź’ųšęńģCų0$ō ų ēū$ś ÷Ņśę .żõö’īéÜ ėę!ģŽ×é %ųäńŹĪŁń īń ųņēž&čåŻ÷żėžōķēåéż,#’żķķłŌžźüõöüéā‹€d!ō3р€Œ€ó€öäßp¾€śé€żśl€€!Ē €ĪyLåj*W„&€ģ€ė ‽čęÕ!#‰€ī €ź€€É8ĆQC*‡€ [%«[ż€€Sw€Fąµ°@.±€t€~ŖOżŸæL €€'v€­Æģāęt€„€¾ŽĒ[ Ņg€ōoźj°,¦ųģŚ€a€Ś2€ż€¾j€‰€€æä»~%€į€€€Uą6õ:Õ üŁōķł×;ļų½$&ž&ōõSźõ Ü+ĪÖļÖ'"ŹćėŌ" ÕūĪ?ņ0ŚŹūڤŅŃąŹéüžŪHōÜ'ĮŁÓüż&ė.Ī'ų:ųü’ øćß2ĶĪš- čīźūżåßż×ÕLā/č# čēäĮ>óČśéč÷+YŠĪęÓŚōōÕśĮ@ų!šõąSŲöŲ±ķų9å <Ųź÷źGĘĶźöŌÉ5śÜ¼Iś’üž0ź÷Įw<Ž0 %÷ś3× ųöćüFŗä',ė$- Ąćéļėųöä÷īŅśEE&ÓłŪ"'3ŁŹööüó7ķŽÉé'Ū&æōööģłßÜ;!-ōÄż..ś>/ź {ē.,īżÖ",šå,!%Łó³ż4&ōłüšČēÓĒhšźßōŚ /ł ś š±Ś ī$Ūśłźäō īįąßĪššģżłņŅ’(ńēā īųūöéń#’ģ÷ö=ģ0ķįšņÜ ’ōäŁ"9č&ė$6śŲō(’ äųö5åžńźÜ"žęōšAŚõłßćöī-śšUčś?Ł)īå’½ē÷ ÷ć õś‹ąä žčö÷ ŽÜŠżūŅ’żŲżźūćŽķŻž¹čóó ē³"ńūąĻūÆęźRż ó#%ŁŪü·ó3 õē÷ģā"ģöūń ėņīŚžü·3ųąŌūĶ ęōŽä!Āžļų²2ś óźūŚįŪ ‚14żø Ż ųõŪÜóƧ ß,ūēīģĀc÷ėÄń÷ųņ.īž0ßš"ąĢM łūüįįģ - Žųėę) āśÕ öšę×Ī Ēō ā ż!ļę  ļīīō#7Ü Ż'C śüŠģ,·Ę2żö­-ßµķ×&ģęŁćėó!ųåą+ķŽ4ōüŁ*Ź ×č±/#&ģōöAņ’åŲÜšę (óćā0ų %å Ņł3Óņį żćę9ö/=öńł Ļ'łĻżöęĪčž!½/žźńļ÷7šęÜ×$ń!2,Sóū  Ōųģ šūķü Ł !( ’öōąż2õõóēļ ēž  Óń’īBĪóō1 śŁžųżÜ$ ķū"ė éę!ž)ļąåŹü ō$. óžóįš Żņī÷žźüÖ0 ö%!&&ė.’čęč-Ņ×õśŪõüšó$ ļ’Lņõ äģ-+ éöčõö)óųķ å įäĖłę#šė÷2 ņöõ[õŻÓ: ÅĆųŻā;7ūźź%: źóź×;ī&!ĻėźŁō+$ Õļ ŃÕ ’øčŅ!迊éöōåšõ×!*Ū0ų’7Ū ŹėOöß,Ōų!öÓéõ0ęŲ’ūż,M’čŲś!üŠ)ܵÓāš:ŲÖ÷Äą óžņš¦¾Éē?õēį2ģ6ę čüģźń&ł%ćõų ļC ō ļėäó’Ķćīīčó ĻŲöĻĄó ģ’ćż’ļžīäŻńŪüžśė0Ų 'ąś/šīü#ßżÓ!ķõÜę ēŻ(äėäž,ķč÷źĄłß»ķūŁįēūź Żģś ļžžåÜöųü Ü ŽķŚŚ& "ž ļ+Ļå' ü łłėńöõ!26īé3õī’źōĢõī#žūżõöč’ś  )$ż’ä·¹Ćśīå$ī Üž.EŚžž+Ń÷äłś"Ąą ,čŃņKż§Æ’ä1 "żē ė’ż ß6Īé’’õżĒńFńü(7īųųō÷Õóėõ5 ėŚėńéŹņųōģ'ĀYŁóé+ļéo%ōčż÷üüė +Ē¶Łłņ ššģ’æ ·÷7Ż’ųėōń-éņ%äēŚ ’ōź&) śņ  ź"źū7-ņ-× ,äęśåńč ęŚóšéīõ #óך÷Žß ń$HżčŻūūōņņķ ’įņ)ø6ųłį ēŅłä!’ņŹ'4ėčöūõā0/žčłž/AśĮ$&šķł÷)ś"åķėķöŚóš÷žžä-ĻŪų ’Ūļ÷ėŪÜž » ųöł?õņīöņ Īż3Ōä >ģš+ēļī O+,’')ĖśA ķ![ń’!ļļó+ šæ$4' ’“üēŖ×õ>Ł źŠŪāėU$č÷ #0+Öóōģ"%4Ī2ńä8ś)-Ąģéõ÷Č5"'(UėśŽöņŪ:«ü8ęņŃ Ūä öé!ņūŹō%ćī’ŽĢłÓCķB4óõ× Ż!’Üń÷üē’żŲęüīżüļų$Ń’#ūŲčżļó×’ųžųļūłŪóųāł Īšńś ż'*īė" üōōēē  (Ūōõźūų (üī ’é åż# Ūīžķźč żļįüę čžÜč ÷óś = ×óõ’żėžš öś ü åüųéÉ3*śż÷÷łš&$čϚ+ś%ńŲG ļćņ «åź&ļ!ŲžåßÜß Ļē=Śč$īēįLĮä č(%5öž÷( Ļüēšüā%3É(ā1$žÄß>ł×ČŻśÜåÕčł’ļ&óåčA$E "ōēłżOł5 ųŻć üq%óńęś Dü ­0ņ$ż!į Ų $1ų’;ūåųÆ’ -éõ³ę+1 čņėśļ×žīšš#" ų÷)^Õ?ńÓ Qāä!īŚ ōŹķŠóåćŚōīģīźß čܼŻ ÖŲ3 õ×ųžÜćųńųŃ šķ ÕĘļŻ¶2ųóŲšåöä÷ŃžåŻŹJżłūóųĒćņń&į·ģōĘõ& 3ėśĢīżņš"ńÜåšŁ3ļē"ėõ%ÜŽ ’ŁäēźüėŌŚ’ų ōŪÕš’Ż üćäß åéłżņļė -ä öł&åĖ £žūüšģšäė õš,żę÷ī ’öõšųżžäķ÷ōžé'šóöŠÜū÷śą žõ ž šŚž  īōŃö ōł÷ Bļļąę$(ęļłłšąņų÷"óõ ńžś  ü ł’éżöń÷ōķä (čųźū,ųóļłüęö’ śü  õ äņé’üī ūųž’šś õ öžžłēä óü üżūł ē%ż #ņöļäł’ųžōļ óż õ*öļņ*żó ) žįśżś   ÷ł żõłüż’ģł śś ż ĢŻž(ŪėžšŽō éõéōóēčóŚŪ-"ö ż āūõąāŪČēåłųķĀģš)ē.öŻö$ļī åŪźÕÜģĪŁ4 ś,å’ėģęĢ- šüłšü3īēēē²ųźē ąśżżāÖ"÷śßī¾žéĪ 8ż_ļöķ3×ōöó"ąĒųņČŻéō=īķž濣’ õĖėD:ņaŚģµ Š )éė·Ō­&ņōĻ.|ĀöCį§ōēų"Ķ"Ųłßéņļ&į,[ ĻėĒ(óŠü×Ļ÷ź ÄX²ČJõź÷ż% ēŻōŃ׿¼ķ¹žö®ŠīGŃźļ&ś% ’×ē7’ļ¤ m $ P¶ŽčTŗö/=Ļ ŻŁNäš‚ī½żį¾ ( I×:ŅŅ÷ß(ī”8ńē.ŽČŃčń)2Ų9ż%łė7éł×čń4ō. óō ńń/?÷ęÖłĢl:ßėŗ&ļīė3 ųąūĢūīśÜö Čšųš 6Ęž1ž÷ōŽģ®ģ÷ōū ų ČņūŪāņņ śŌ2³ó P2ÄüŠėņķüüöźšČĆ żÕ ß K ŁšŃØņädÓ×.×ŅDū ŪėėÜģåń4ķÜ - +ķÉ)Šōä łü"üųęõ’ķēśĒīųō#&üéõēŻ+īż Å1åą Ż'óÕ"ĢFóéēé(23"öģą-żGÄšŲ÷ö2ķ ÖšģÕ¶ŪżūÅŽźĮņ0üž!"72IćPĖ,#6.*3ų$žž !÷łćŅ÷ā-+ü×Āęėöų+ #é "×-©źÄķŻśķEÕ5,’ņMÉ%¾ńčłDźüź(Žł/ó0õåŲģ%Ž!Čė& ųåė&ļēü ś5ō.ī ķŁķšņęQźšż ā(åõ$) ģśžčģīüżüĀŲ:Ū)ßŃćęŅś>łÜĪ ēńįöžĢšĻž’Ęź ó÷±żĢ0śų óńś,5ĘĪōķų"ļ żł]ņüéöź×ßöüńšöķŪčöŲ ėćąų ($ŽĖ#ōŌķįķĻįųģČģśūīų7ńąÄšāł8#šÜ#üżä ļä-ūżāśŠ÷Ö3Ž0Õ×Ųī ĄŻéēŲó&ŲŌųÓū(.-"śā 5żāļųū Ģ 1 īš”,žņķćōąēįč.Ź·Ż)Ż’ś5 r2ļąćłō·;5,žė÷<Ō -āēöėń ūŁ' ū2’XėčōöŌźļėōńöēūÖīīāü*Ż/üźō$!śū  ć łžųģ Ź÷ž!  öŃõł*łä:Ž8 čüö ģóŽ ųšņņćöšźīų "ļÜ’ńĢ’"įäķ!) ēųóžź Ųōļ åžīżż0 ö÷į%å ßųĮ #ķčß!åéś÷ŁąūąļęŻ źž šĆ. äņßįĻ źž’źā÷ żźį$C äżįBī ž’īĮēļ ķīōõéžżü óŗģ’ņČņč ’ ķ ’Qė#ūÜį ÷’’žå.ųģą-’ žõūžžīļ4 éż3üńśń)$õ ī'ūņ ßēł×.÷šöł čėļļļžäüļą ōė2 ąż īüūšżš÷īīģ’żžŪņą öųõ 1ńļčų!ī )$ šķŻółč ö ęūłųķó#śł'õžžżü5 ööōņöī ū ųćéā üõåöōģåōš!’żū !ö ō(ģĀõźõīü÷üé ėūśņöżöķ  ł+ō õ÷åżśšōüśżŽ ŁŻ!ļōī³ń# éē Ö$żćįļŻ’’ś=źīńłļūÄų<ł;ņ7Ģéłüš’Ł×ūęųļ’ßßć0ÜņäīņŅć żŠ÷ź$ó5ėš×)-ū÷ēā śöų!’T:ź?żüäń  ōÓīżöŽ÷īäłęAŲā 'Ņ.ę Aåäń¼čųśÅś %ņ*åõÓóÉŲąŲõōņ ä賯ŌõÕżöó!!šüåźęįššĶÜ üū%ćńųÓå(ńļ č%Üśää ö(׿#öė÷šģąŪ1!Õßāč’ "æ¹ģéņ÷ ü śėÕ &ź÷źöź$ŌēŁ"ĶīßäčōŽļ" J čé÷ėģ1ń’ņåōķļ(ēōūńōŽĒ łģōåéŲä?ūšAķõĻóŹßš’ķŌńōł+ż’’õŻś ¾éų©żż÷ęķū Š÷ ŅÜ%żķŽŽ€łń ćųé įöńĒžžÆ&/$×ÉŽ× ņž÷÷Įžł?ńčfū1ėł%ķŲ š ó( ū '&&Ųäķų÷ńńī üżŚ]ńŚĘ3ŽMQ ō® ņŅ#ę3ŌßćžżÖ/óī ūł$’ 'ž)ę1äĢ/ßįų&.Ļäźåō čŚĒųōČ@Ķ’ßżō ūDžŁ.Żūšó!ēżG čź!“ō !ŻųĀõ ›$Óģ ōåå ŁĢ’åķ÷3é÷ų$ ü !ōųū÷Ņź()ļ0ńępźĆļą)ģ"Ł šäÆ’Ż-ķųQįŗ)żś ķ»ņą$ėōżó’ķ;÷ńŁ÷łÜ ł ī ųžõõāł ģł ''ü Ųü)Ųłžü -ü¾öņ üā÷ųóš õń!ö#õü% ļżóō łöź"#-’čóå÷åų÷ėü& Üż šõ Ų#ż÷ļūōčõąČ óōųīųūū+ ć į žńļ ļ"üÜżų’ō )īūę  žėü%'#ķś2ż÷ļČ×ųóÜO-ÖšÅåĀÅģ#÷śÓ’÷)#,•ź! $ų3ó¼+ėöģĀĢśųķĶĢÜĶéķžäīē_=ś7ó3wõą=Ķ3&(ó߀įüééõ ńū Ę’ą-’ć č’G*Ó ś©į!Ś ė’!X/÷Ÿ³ųŹÆõņXó86(ī ģåĪ1čö<ń]ē ÷ūūś*ūēŚ ōń $ńžŻāĪäö"īł ć *ńģźō Ėśżč ¾įš"ü8ŚćżÜžģüśųüś ż/  & ģńś ōößõśōåÕŌ& " ÷5ģ’ ūāłšś ęģå’×Ķļõö&ßō ŚóųķČ,ÄōžōĒöē! ļŠęš÷ ßņų÷éź’×üž ’āś7-ó ī1ķ’čģńą  ūéüń÷Ń+Ō"šć,ń ēšš ÷ė6ąźŁų ś $Ó Ķ šą’%-ą#!ßźōčłéÜįŌéÜ#3 ’ ’śī )ĶŻżļčō%#śTäćéö:’ģ ą!žŲńķ źč¾ķåī*ŚģņļĪ ź÷ ģļéĆī2äI"ń *źņŽķšī%ļė¾łīõėä %üäō, ÷Ū×ā ī żļ%Ó7š īģåRī.ż.¦ēŠżōō’ ę ńöńųļūžõųöėŲŃ$ Ųńõō2ōōīõ üžē Ųž ¹ ź-Ü źėō ßž"DĶżéįßßöļķųłüėū Ü3õŌEģ ķł ģłšåĢčņ ’šóń' ņ õå!( Ż1õžéś ēćö7 ģ $ņéęóā(ųäŅ(õ’įõų öäšŌĻ ėżįųŻż ņņż żųōū īęéß ÷1óćłõÜüżĖęķąöść ń ņ ÷öķ ņė ģž õūļź÷  ć śå-čėģü ó ńģ īżžčéęč*ķłģšų ’ēĘųõóóū #ž÷ņčł ¼ćģŻš‘ęźÖ÷»ļ÷7Ń:Ńžļ ėņéņöóŲü ę’õ0üōÕłõ’JŽē Ū$õś!ńBB±*äęŪ" łū 1ōā’7õ¶öś+ čņģŻ-žłż«ļ?°(,Ęžė ņ·ņ F ü"J3łōÜŁ÷ )ōćš ,čÕó ļ*žł+ęčÓ łõšäŪüB0Ę-Ž#ķćļļōīūń"÷ģņ ü × Ė"čķļśļ éüóō'ūŃńōłū ōųķä śžóż÷ åńūņ’ žü’ū ļóżčéö ļ ÷śų óņüżŠ ś ńŲ ’ż’łÜčמłöŚłü(÷ (ųņóÕö ōż é Ń öįćóżżŲ äłļ ź ņśļōē¼żBå €įŁŁś K—łźüé!»>ĖōŲAć÷ū(ŁüōFŅīūŅ żŲµāĻ·Żöļįü ū;§ŁĘ›;č*9ŽÜ <ūž»(ńųŗ=ō%ڤį‚šüA¼Āś+ €ļČÖ,ć¦Ü į ŃćyÖ&÷ąī'’č!µ .,×TDó,õėģ;Ō2«Äó"2žšēķ6 ēēæšŅ./õć½Õü;ŚC’żõķ5ņ $Žēįõņ õ׳üž ųśŌü ōÕłźö ’łś÷ėųķ%öé&ėņš&ļżū! ĒčÕ é įėÜżß'śåš ōūśņÜ'ņėŲ ņńõūłńū å  ēäł ß%ļłĢä ķōā’%ņēćõī žėć ń'” Õ÷ čżõŪé üąßżĘīć(ēęž 4ģéŁFĶ& +łŽž$!=<ŠōÖžļ±ęóóķÉ 1 ć šōņ=5ö ćōžó Ć’ū0żļ"ę¼" Ų:ŅŅüĒß2ņņģ łčę ŗŅõļ ōŪī4ł Ń Ś.ėĢł2ą č!įšÕóŃ. ļ)##õōöżŁśē÷ī%ī !&@ĶŃCŪöģć.ÜłŗīŁ9$ķŲųž!ßé śāü)źéēłüöųūżåšó Žō /ų ž ģ’õåķžēńõņłų é ׯł ’ś ūųćņEźöģ’õłżįįÜū żłü’żÕéóņõ’’ õņęśżų’Ö*ųäņšāö!łõ+ē ķńŃįņēń Ąīķż ūéīōŻėŠł śųę÷Ąģ 3(ččłīö ć5ÓūłÜĻ!+×īųüļŻ÷Åų żżž ėńźĻśÖ’ššź%9šśõņōņńå)ķōE-=ÕÖöžņ&8 ń=ŁńōDčęē éņģ× Ī’*Īįō’ų ņŃõ öõĻķń?óļåū+óÄåöńšęŁóŚŪčęé’ńźŗ )ō'1Ē ņxQ+ €Ų`Ćēó:čł0Ü>/ĆHõÖĪ/Ā(€Ģī ÓšeńĢ€Ę"G€^ĶĮ’ßĘ̲QPčł/¾ĶŗĢćŪ.ļ2öR€į€Ųyq€#DEQ½āĆ9żM€é€ßDZ ńĀ…RżŪ é‚ÕųĆ÷€āįAšŚo’€č6W½[æ dX~7¶92Ėq•ĮVÕh Ē’' ōńāGāŁń€`šl8ąɝųóŠ1’? ō¾ų @ō:’õŪ õžėķÜęÜ÷’J'ō’ķżųŪ÷Ü 0įīó]Žż#ė ęME Ķ üŽė`÷Ž÷ąć÷ÖńöU5óš ¬!žµģįŽęGĄ×ę ˆīńüŠļ’·žōėļłüŖŪ/ī*ž'ūźõUÜ#+żĖīąöŚ"ķÖ䯳ō  ē! ŁóŪ (#ś%ś ’ ųÜź öćK;, ßąķūśā>ŚŠõżüŌĖ*Ż š÷(ķ"äļé“ó: 3 ’óČčßõéī ČēŽFāųŻųłÓó/åė ó,ŁČ¼šū+ÕŃéń7 ńó»ņę ę óļāŹļ’ģöģ÷Iėė Ō+ Šēö Ö’+6ųÖō(ß&ģ&ŽžōžłĒ(Ä*öčŻé/½åüłśĪ Ł,ųÜ"+å(žźžĀ*óū÷8ū ó6’ö ēōéõFėõī ’ūčöī*ōōųź* Ų$Æ'äæ÷Óń åōH3* īćśłŪ÷ą ļ÷’ŲīÜõĻļŹ -ü*ś,Fķ&ŽĘźö Ņ棟ī% õ÷,ųū+Čßöż üŲš#'šŹ>%÷!ł×5ć *ųįü×ū öĢģŠņ7&&ģé"üÉžų"üīü ųćē#ź6õ*Õ ėÕŠŅ)Žč æõXȱś óöćśüš/*ó* įēžõłõå!÷żöųõõ śöčööūī śŌģ  śėģķ÷öņ4 Žē żīś$źōųźū’įūõ %ļ#łĻ×ēź’Üķō)#öūö ČńŪģüßČōż’įķ挜õóöłēłģī’ż-ĶOŁ öŠāń ņ-ęöł÷õ’ū&čČ÷Ūóó&ūāśü ūž÷ 70'ęšÕū×óė ōłńĪį )ąöéšāźēī¬- *ķļéēū ,ś żü Č2Ūēā ÷ė# īžŠų ą E É śäõ ē ĀģöŽå , öŻćĢž!žŚßéÜżŽ* żķŪēßū’ś,#īēłžįŹų÷ėźäÕ2ÜŲü*ū'ūĻčPÕ× ×ēżéčļ’ åŹšÜ' łóżŁł ü&žCś“ź žļ÷ńū ®žÖņ ų ž öÜ(źüä Ń ēą!šŠÅöķčėżšžņŅöµö> žé,āķėä5/0ż-śģ-čų=ņųģ6ŲćšūŻä ĶŚäžĶü ģēž#ööńźī/:÷»$ōżōČ·“éā@™9üšóõī'Ōī%ķć Ģż)ųö üŌčńć Ūļź0»ēŲ.š %Źń’ŲŻ č"ęęõ8ķžę&źļü"Ų1č ¾"óéčÖ'é÷āüā÷ńķ"āżŲ׿ć"ī;ī4ūšž×=’ģ'śöĘ ņ0ļč źšņģÕī śų×æėż Üżė#źńą ł7> ÷įdŽõ÷į÷ Cü*«ēšå$öż įęüõńźŁõ Ūéā#÷!ä÷ōéūė ó¾ß!Żńéäćī Üü õąģ ½ń ļ ķńźäŽö÷ģ’ģõÜńŃ  (ŃOģ  ņ÷+ņåõæźāĘ!ńżļŽ*ļó4ž×ńłęśģł*ė Ņé ś&ę@÷ßš?šį*éźMōöķåż Śģßåų «' ūEķ’Õć'ūņć ’ŲÕ:äüī)ń üä÷ųŁķļžųž Ń:ģ÷@äšč Ō,9ÖėčŲźśōBĖśÖŪŪ ņ=Kī҇! óÓķÅļNźģżūóęžģöĶŖŽÖ²1õŚźYĢ9 Z'" ÷čż#ņ ćÜō’žŚÕżė±ąäĖ2ŻžśÆ)ļß’ćś6ņŲøÜé)ū4ńŌÉģŗU’õćīø: üżģ'ćCŪ6ę ŅūN¶!·@į Č 1ā4åöõūāŚŌ. üń2Ōį1 ēņl—SłŠŪ'įž Ėį ņ,śļ ÷’źžĀć·ŻnĒ…ĒņÉź-õ ¼ÜČłšnCß2 źg•D,Ó?3ćEž¾<ėĀįž,õėö×Ęöö Äķ€Šūöśæ?«Å?å(" -ķśÕżéś(ė0śęŅŻßŪē;ü 6É0¾)3 ńå åėį»ꏿ\N7łŲō¶ņņ Ō"g¼ čäśōāć,ßĖ äń\¾!ā)0ģŌJ‚ ū&ąŅ!ż6Ū-½Ą:@ņ'ł¤Ģ\ųģ3ž!żīóBŅš3:ōĆ&ßĻĀõ<<åĀĒöąē\kŽć&ųEĻõ ß&āńÓŻž)Ķ !ļüŻ*žŚ üī/= ć ä »ļKåā 0*<=×<6õŲć‰2āōō š6Īń-=6łD>ŽąŻūóś’ōõ°æāķ?Źéž.Ī#¾ļK@ œ(ŅĖŲūīļķ46X$ ĪĪšäülčžü6Ō Óś³"%Ą(R9ó!~ųщF( &ćüd§“ųŠQļ éW¶ūūnłĄn›ĮŁĢ§ąŻ Zūš ±šK! @¾žēņźł÷ Æ,fõģ×>$'ł, =(Ō)3Ź7"łÓüųāų<«“ų įæŅČÄ'*ō÷×%óżé’Ć ę*;ū>(·"äüā1.ńéāķ÷ėŃ9‡é%÷čHõ ÜņG *śäšźżįDͼŽų0õ€®(ļśķó ņżŚõÓļöÉåąö ģéĄ-%ČŲųą!ś ·ī ÷žņīłīóś čŚÕõ!Łõä0 KÄżģ"µF>ōå żķķōÖņ Ž8Ōšļī=Ļ4öģóMąM»ōłė»/ ś+ä5) :ūĖ'Ę<ź5,ēü9-ģÓĮÖÉ Ł ¾,Ŗ"ĒÅśžµ*6›č)÷Ņü š óöżü8žš³ū!õHį ł02¹čB‡ń÷(u4ŅĀŹėńčöü&ÕŹÜęÅęŃž „Tįģ¶€74$ņ̼ø+Ō ŗå(āö Ņ ųūć’$ŹEŠīń’ö€ĖŠ DČ9(ĶšÅ Ó<ń’ ł$ß0&ł Ź[ć·ö¹'ōóążŪėįÓž? Yå’ąAŻŽÖą»%ńāļö' Ū±3įżOźÓņ.ŌīĘߎ÷ņŌžū¢ńųōü1įXNč0ŻōšC4Ļ ŻĘģ$ę0ó÷^éÓźĆĶó’ĶāĪ(īõÕó!ąi 6óĪųėĻŲŅŁõ-į7ļ¹'ŖĮö07毟óüśō'čŃóó-Ī&ņõ"ž,=βņ ŹŚS÷ĖĄƒõ'ńÖÅÜBéöõ„÷F»)Óģ哠.Õ£Åõū!šŽFæķ ó0Ūī" ļʀg(ņ:?RZōś ęź'įźóšßā÷"ųŽ *=°Ėūŗ2ą%ėź1į¼"ʘč² ō 4S.ų/ÜŪėŚć24ąĀņĮčEń Ó÷)ģ ÄA'&)ųŖ#ėĘŹ= Fśčō LDņņ.#ģ įHīšŚę÷ČŅ#®ćīŻµżÆäKõ&¼”&ĒfŽKÅŲ89ēņ+ž«ņžDĮėī®#“7,ĪŁ?¼Żņ8óÓś‹;åŠ÷י Ę3ōįüū’żż­Z1h½ŲŹŻ2ķĶŽ“·ķŹüŃõóų~īb¹öeV bšńę˜ö×ćl ½&ōݼö,3ūB9 ĀÆųįöĒķ’ם«.č>"-$S’'üų7ėž2·Ėöbó&.é59ū÷ęØż»Ų37”ņ½@’7±łļ$ŗėķ ēī钼ÄõįģĘ®ā(Ž’ ēŽgī¶$£Ł ó’ćŹķņł, ±µÕéäšÕÆBį/įŁå%ōēÅ×—ŽÆ)šĀC¤Ćżå ä,×ē6ŪėŌµAžīÜ Ō: ˜ŠĢÄŃ%ļōå1ÉŚK" '+Ėż8 "9XņźžļŌė’$ėžŁōNü%ó ßĖ“Ō,,’į$Cāņ  M)L³­éšōņ1Š)FÄä'ņ7 ńŽš°ĻóL÷Ņ%ĒŽlōü++EÕ¬%āč€NÓL=ä+R¾’D±ūĪⳐ¾Võ ڹžė±&Df īßFŅĒ oźÖ æµŲI0Ś€]ÓĄ©ąöŚōīūł7)ä&&ķŗģĶą) ĀvĒČ’ ³&ŚėėŲė(Ō+ ļ%ņė!!ü#ĖĢĻķ ÷ ÷#Ć=ķ ķÓŻšæ)ɬQA¦äń)ųc γ#ü$&čŽKōAÖŚ¹W.ōņ+ųĢxæ2ųŅ’Ė'Nōšūķ÷ś ņ3ņAųÜōLēQśßżīåG 2_79ųÕŅ( "å#ž÷ņņöHö ‚ )Qå>22ūdęśå½ö9ź““įrķć„&>é‡Ėå5$÷éń ķ: 8ŹóŗųŃČKÅņ *QĢø/)ČV ŽōGóDĀČ'*ėą"¶ Ī1ŹĒ}BĆ5ŲéķĪü%Źńµ=ŗź9RŚ~å…FŹ’Ā 9ķ!乎ÓÓČōŽ >’śżßńź4ŁńŅ"Ģß÷āĢņź2ūŻ÷%-7ļ-JĪõūݵBżŲ:+¾÷1É÷ó9Ńę81ĻĻLōģ .HŌųŪūeņłųģļäOa('Ļ7„2üķ%ń’äįüīų,­ Ż ĻįÕCåū2×ÜĘń#Ō¤^%»ßōųżÆŠ÷-Ō“99 7хé€ń÷#‚.æ bį’ēÜ} Ōõ!öžä$ó$^? Ōū’-ĮŽä›Ņż*Ūļé3ī䯣īYłēŲó 1ļ?×ńó&ļńÅųś0kSß ĢÅ”Ė/*ĻZ;Ū;Ņ-0ĒÜńXÉÖģÕ0ąéči,ä%1÷łbÆēęģ'(Õ:÷ Ī×Ū>ż— !ļ3Ąī4 &ųõö»%">ī; ÷źĮ× ņAóŌJš.×30™ł¼ ćäńńģąńN-5ż°ēŁéČžńčĄ ŲX5ś'åĖųŽŌ p Åų5ŠčÉõ ±1!Õ¼ŪBšØFńÆ'ö@ų>J]žŌ»ūF4ĮÜŲ2ūŻź8ś' ĻÓČłž—āŃ„¢ŹŹ&4„Ģ÷=*/ĮõŗŌ"%Ōjā“ļ½ļ+”ü)ę! ,<Ūįčå䯷ö/āåJ^ĒĖH ć’"žNļüīźöī; ę[ń’Ēś ݱłū3Ųš6ļą»č ü:łĘūaī ż ų·ņäŸäæ *5æ;ūļČÖćŅĖ!&ņŁ>ł/Ēł*<Ü-ĢĢ ŠĪŌįL' ĒÖ,ē÷!ģ'÷&·į„åń-óō-óĄ4åņš4š /ų ļĖį ¹& 8×į-×č)č&Ģķü@ż÷:ūų?'ļš *ėūåaėķ Åē`'ūéGžņ  ęåWą ĘėRG5ōģ±ę’27ĪE-óöų ϼö’į õ×üŪć1Ųāśö&]ļ«=õÆęą <ķ9÷:Įēü÷łēśĢ»'½ä$ ó×äüä*Āńķ’ė)­ķœūįXų’Ō?õŌ’Ś0ĢJ Õ"ݾ’żœõ÷ĶYūį/ŃOęÓP&ÓäōFėA'0’!!·õžż$ę6ÖÜšŪēäŻŃÜßöńłåėß8öėÜõšĒ<(žŌō"čę4 čŸņD &ĢŪō`8ä`lÖQkśFÄuŅ!ķ2 Žéłż ųłĮ̶˜(ńČ-ńüūÉķ·aśź%Žżé *ß:ŪŌšöļ7˱čįĢ ĪÉå-#óŅķļ÷4Ö°Ņ# üńö"ĢŲš4!½='ü=Ś×Ł5žźšł 2Tģö.ż-~žēĒśņĀćP“4Źź©«ÖŽv’ć’ĪH(ąĄä »'ķ8J %!©ļZūŪĆ÷äė=äõ/1’1’X ÄĖ+żśė9%ŁüśņĄĢžÜßčäĶŌń?W#š ņńšaå'ń§éöķŹōėņääØ5#óI#Čš6éė9¶ēģ Ō„*-&ōF ­ į×3% Ū3ŃĖąŠńśūéŁ-š īšQ-£×!šąÜ ;÷0ł-4ū.Ķ<āō/Õž“ććéĆ,35ü/åÖż7å"å%̈śwĻó,;3*-"ģļäŁī '÷ĖŽI,ŃĶŪśŪ"5üü’ ķÜäIŌž÷ūīčōīųī ŃõŁå.õA& ÷ŅÄį4é6ŹĻśūĖł"Ī÷³±3Ÿ'ŽįŃóž2 ć ó§ś“ęöźųōł$ŃBÜā,6źÕä!.Ōäµų—2÷¶Gž"ŁkŅ ÜFŽä÷½!ĄÖŽ:Śī¼õ0 cŚ'ŁĻ ŅB ŠĢįśēņČ#1ÜŌÅŌŌL:üö.øą *NĖ÷­ųןįÉ:åī2.Ųé ķūj5ŗųäķ ęŃĢ$ ńÜ8ūžŚżŽ±Ķ÷1ńįääģīī ż/ś­ćōµśOY’ ĪĢ4Ģø4æęŃóä÷Ųźé/Ś1ā¼É’šįõõ-ī’-śļ1å%ƒ µōń*ä÷Nõī6š×ą9žżĄźģ„ėå”É4æŌĖ%ćÕ0 üžēś(Ę(ä+ńķ$ųŲĻß*Č GėĆŪ$é¬ęźĢą > š"ł įJŻ$2/ģ³2ēōYÜČ" Š öŽŗĪóļ,ü+Ļ!õ:H)N6÷ż/1÷ļĢüėóēTćģ’Ü Ļäśæ,"Å2ņņ2ā&"č%Č­ŠóńĮÉ óŠįĢóŅ%%÷ņśŃ"ęöśVŚļ?žżéčųÅī!ė!ī®ŲšŅųųæžķX:€ŽēāŪō  ŲĻ0)‰ ÷[4’'łßĒ„#, ĖŚüłAķ‘Ńöóęžęö D/ ńę%ļ¾ćó/ąüģįīųńÓ$Aš#! šÅ'śŖ!Ł&īž+äē½ :ųū$# ūH:ē ÄćŲ×į6éģ$ņķ(ž‘Ųõ5ķÓAćæŃßķ~ŁŅéżęāķØń~üŁ­ķķ‚ ėėŃ ć®ńÉBņŲpņGå‡ģüē-`ĮCG€öŠČ%;KģrÕŃį¢ŁBtō\ŪōžĢõHŠ ,ē#į,ė;ßēķėŃ%)Ō-Sļåé1ųĖn݃%„Õž !#JÆŽ,< ±"*ę>ßøßĢĖWļ+öŅ ¶ éķę;Č@į­Ō÷Ķ/'Ė-ņ’*Ü$ Ī4~ū.ķūŪźę•" "éź’6<#%ņĀJŖÖ ’%Ø[½ż Uģ2źŠŠÆCųź *ĻŖ4ķõ Ė ųĪģžģ3ła¤Ų õÉTč‚ńä<©ģ€BŹķA=Ļ’ūß ėø8BĖ$ąõ7śõÓ<€@č“Vņ&÷ēęĶG É7% ćęöķ_›É,ž- Ż5Ņ8#Ęšč8édHĶĒó Ž Šį»(~Š ėn0 ččĄ9; Dōžėż'ÉöīAų’ł-ټņ’ī1é÷õ7Ółņņ÷üŽ·éī šV˵4ćį A3 źO Čėü÷Ć6’0’?¬°ģń)0#ņŁŅęrŃÜåŪ"ē$ŻÜ:$åĻ ź,ėķBļ Žčč# ō2żĘÉžÓQ)żŚ=!@$ģģž'éśčū ŠĆ"ūĶŁ ś.ūÉłD śé?Ń#Ī)zųū?żłą磳öśā-.ŌĻłė3śČņ9/ĄĶ›Ž×0żWšŹ"ā÷äÖÜņŖćµ`. ļõĆńóķŚĀ¢įšåõ÷ 6 ÷ö DK8ļŸ÷± ēØĄūŅ5ā$ģūšł¼ā-7'Ļ5óÖ·ēŪĄ÷¦ąĘ.% śŁ##1ųŅW "<)÷' čöAÜłÄ+9ųšŻ’F0 ½ īÜ%>.÷ĶäčĪ%ä,4õŽź:ÖÓÕśä?å Īł±]Ō<&rŅ’&h’IņöÆóżė#+/.1!(Ńōė šĢśŽķ·ū&ā-śFÄū·(j÷ć;ŚųŅÅęįE%Ź3Fŗķ#%ž·#5ĢĻū÷č> Ōö!5+ņ=į' ųó äī±4õ) " Ę»čā’£‹ņ­)įėóŽōōg™2ŪŁĻüłä"o$&׿ł0źÉŠaŻ §ŁŠ!EŽóTĖś?Łūŗ¼)ŹČ /!óżŲćż‘#,÷šUęäŻ-ļž<šč Öś²Ņū ƒc§Æ6¢čć€ų+]ÄPŚøōĆīÉęśŽ’»ō ¬~Ō\ŽŲž2żņŃŁĶÄßĒņ>ŗ“÷ņ&üé2’ōō“:2 ŌčÉõÓŽŻÕČŠųąų’$ Ļ×­* Į  Öį"ŠēŅą<åō2ų:ž"YC2Üõ±~Äüų 2«įEāļDõū<’–)VÉž ÉѤ ĻįŌś* õ ū!ōĄļńĒ«=ŽóĖś"Ūäūū%Ä’ŗņ+W÷ļöä÷ ŃśŁ"Ņ *żóŻUÕ% ū ü!KäžŌŅųÉ 5ęŚķńMoO!åźō6ņPū öįńüōa¬Ž1ÕÓśņķś½Ä5%䯚ūīéģŠ×Dńų^ēę^čוę!ž;¼GåŻć/eäŖßčŪ3‹%eäÅeŲ3Šłā "įŹ+ńóėėįłŁš1ŽūĶ åłŻÓō(AųÄŪåķAõķģį,24ģ„S>)ń¾§µņ*ųżŚCĶPęū6ÕÕ)£ķäł'Ē; įźŪøjĻ 38Ź ¾Ž¦ĢßģßļD3#ÖļŻ`ŚŁĻEŪp’Ź"3ļŪģšųĪ'¬Q#’!ö>/1śļśæ Į+ ōięÕÅ ¤}.Õ ģœŸ¶9 (ł[µA ’åŁĖé<Ć(깣4#āģ%ßĘóCū. óģ%ćJ1;]öš/ņ²°÷Æņ!ŁüĶéŲōm ą ¹Ūłć’āŪļ6ė2¼ĮÅšÓ-0į> ń3&ł &ž“2Āø×?ķļĒ;-:ķóńÖ±ü·‚+ķņźą/āłņ$(żėč!E“ Äķ~ŗāHč%ķøŲ ļ:.ó4=IļĀļ­ö%Eä÷ 0»3 ĻĆ«’$ß0ż"µŲÄūĶżīÕ¦ ŲŹ + !Ī0ŽMüŚ%ļŁ*,¬Ś(ü×&żōDŻõń:ųŻėĢ%ÕXųf 2Č  Ś€ĪÓB)÷žĢķKÕ2Ų ļłė$+ōŅś-ė½öńÖé¹Ų« ~Ėäż/Źå¹ē ś äā€=ōX±Ó*žŽ­Iö-bCрņųz2¹ąÓ$÷"Ȁ58üģ–ŠBŹ„ėę'' ĻįöŃ⠟«÷ßČ6Ž;Ę!Mīä™!åĖ’·žI+ēüćÕ<6+ō ÷ĘŽčī&.+ųī¤ēö5ūHjü‰ĮļÕ”žXē+äĪŪ<ō&öųĒÄ!B2?šųÕóó  "Ą.ńüų »üĶ"¼/÷!ž4 +/ĢŚčA"ūģ"ęIŃÅ·¾üńßōä÷Ļ€Ü×Ń ŠõŅ (Žß×!!įļ īāĪÆ\ķū&·7ē!ø«ŽēܹÜ#½ČųBųÓėÜßń'Ų6ü 0ųēµŠæõ)OÉ:B¾ģüüõ äG2óå3Ž÷+¶'Zßé湥šŌćš ćųĘ!·µŽ5źčåöļ9Ėčå8*CŽęóL.ćJÉ”7ŪųøÄ _õÜ &WaūOģ³ńöĄsӖ.ųA…ęīĻ*1ņ%Ė$ėm1+1Fń €4ćünó¾¢Ż»Ś1$ą8Ö“/īWĀģčĄ(аĪĖōģ(üųę×±Ép ‹Kļ§+8Ųģ 3B*čŅ «2iśÓÕ9čü éR35Ø6½įŪ, ėdĖĪüŚźęö©§æ$²¬õšūūĆŚū:›Aмłė4 =õż€ÜĄ÷ĒäšMļūČĢŻøęīŃģŅšåĶ ūė¾O¬ õ¶īöŽż*WM \ž8(ü.ņüŪĶä&éĒ é Æ¹ ėGHīčϼĀ4É;1žų÷.&ń'$āŅÜ»KÅīēÜŚ ķÜ0hS»÷źŻ%ć įßšÕīŽJ%Vīéąć¾ł'_ŲŚšģ:ń 4ūĻÖ ėB) AHļ?ķģÓ#Ąä< Ų+$ķł’DōC/č÷'ó÷µ%ž7ź*ōūG-:"+ś,Tūģį ž? +į#¬#<ūßē/ž½šåÖŗżdé:¶ÓŠ!-“@Y&õśéūČ7PšŌ±„šžÖ€ļ¼ŲšövRäć÷ĆčāŹė# <ģ¦ÄūÖ żž”Ņ\,ŃŹö#ÜE’īŽ+Ń%—Ųńōå¹%ę×óßįšåėæ=3<Ķž%(¾žņ÷üŪDŻų’ł0šńįꎜśö`įóą óö’>ā-ņ"ņųėō ,łłąķņ\Ė€$įńīć× ŹēżóōŻ -äęņé!4ųßõ0å÷ļ“ Õ DÕ2&ßŲŲJ’ŻńūČ0RÕ[/ō ęćŻ “!ä#€;ē'x@ ³ĒŪķ*ü ÷įŽīĘūĪÜā`šēTMąģN2C±ź ™Ģ³Čāv Sęä äķ’ÓĆ\¹öéö Ł×ыĮś$.6Įń“I"³ MŲ42Ö8jęBĪ/ 0ēŌŌó ÅæĒŻ]„ ā"žĪu8=äQnŻ"#DĢęž«§ ÷ūą$¼ßK)Ö ę6¹ #ļÜĄ6%Ö8Źźžżk€ż &į ¢FDäAžJ(ų žāq>’āĄŲń/&PżŽ½ńŽ-įN õ)×t°Śš.ā *śļ‘$ŚŅćś į’üóõ7É+K+» ó4uąBäŁLųÓõėļēį? Ē0’ä(&+"'"ē;;ų!ł ¤SFŻéŗņŚęÜąR%j•0ZÕFå_ęS.ķ>ēāL/³ąÉŲ"<į¹EKŠęßģ)¶°ģś üūŽ7:2įóļĪō÷šEįŃÕśßéĄ,'ÓümßšĶ!'¶Ż’źåö÷#&µ'ä®üŌa÷Ą:Ų3ų’÷9ģķŠ·ó÷ž!FćŻ÷śńņźįŖę(³Čßų"UłŠ@āēń 4ōž+26 -ÜóČė,)LŽ!7LŁ2 ;é-­ž÷AÅČõ Ѷ*E$Ū>’ŗsÕĢæ«ß!Ų&’ źżŚß Ä  ¬°ć:,īµå¢='d佞2š¬Ÿ!ś1C2ū.N'õ3&>×āńįĄąćŅņ4ä)$’¾å€ĀF×6”KåHš' ­ööŸż)©2AgŠŗš4ļš“,3õņØ’9Õ e āŗ)łß³äåÓŠ1ĀGž;ßJp«€C4ųģ:ŻŁś-äģ99ó@Śā"/”ēō] "ćķū 2ŻēūÖ8ęļī&ŅŚ÷ éĢ @ģüģ!Ū8ó 4` āŚÓģ!ü®ō üŲäų 0+®  /żć ę(ŪEPū32ž§ķżčÅÓś&ūõÕ¦&“@ˆģŲśł ü4ōĆņŠ(ļµņļźĪ€gÖėõś½”ś2Ą"ĀäĻ- Ü)LżČ×HŌéųōkł¾ÜŅė©'żóßßÓččžę÷ćĀ9üćŲ÷MÜĒĻ`äķ¦µł Hēėł)åĮŅUŚĢÖĪ’ Ģ Š+ó,¼ķžŃ=Ž/ūŅįģüųūė'’öņ(é0įźæF±H¢Ėź×ų]EV¦źėĻż"õZ’ņÜģ#³óįĻķČļūŻŽžó“#Ź7Źó ,ļ3'ö Õ~¦ššÕ¾>!0‚>Łŗ¾ż 4óŲ,żō2-õuß ×éė ī%<æīĀĆņd$$ē#(ŅQŻņ9įżÜžńĆņśÜ…½ É#ø'æ!0Ž”į05ļäŻŌĻ.WĆžś Ķ(ēłßB¢×ūå1Ÿ#"č ß«ėūŁJčŲŲųžŁĆ&-É 6’āī?Ń';*ėČ6½ 6īėē>,ų1’ē6QŲ’NE'"žŪ UįģóėśŹŖŚ9)ß(÷ķ“ÓżŪģFŚ/,ęįńŲĻH7ėŽæ-ķW ¾č¼ł×øķó4ŅÕŁęŽé&ĪšŽŌõŌ ģō ÜŹļ=:łķŌHēīū>ÄŌėĪ',7Åä÷Õ([ēę!ėļŠģ ł #  !ź ¶&É ļ, Ś*$š īė/ė¶üūķõĄó ļ¹ęņ2³Ģņõ$éŚ1Ė )HóÄ&óéń9źńäŽģō Ņž7ė^³żBłŅę$,õčŪ9żū žśļöŲ²ć]MD /ɶ Õ ƒŌ±×(ÅŃŃā33ŗ),Ī5¶ŗBAĖ ä÷ ŅōėAnMÜ45½Ä Ć5mė8ŁŖĻ2åSĻG =›Ń3¾ų!)K4&šõ Ī*¢&ĖÖņą{\ŻĪĪ7āŁēčöāęč÷ė×ߣŽįĪß)'#;¤©=ÅŃWIģęķŻö<2Z]!»õŅ)ó®B¬&Üžū7žåŌ'ųī!ęÓQłōÅĮčłüš#ż ņ Ēķ0æÕģō³ó"äĀūēņ Ē/!ĻåĆā ńĮŲ>Żėóļģ‘ä“÷; .AĖBńŽ ĻI3Ć<Ō‡§"äō,żOŽWXķšłūüĶ&äāģ ėļ#2Ś%'éžŌš<š6 "%ų’õÖŽ"’ĆųŠīŪķŃć×ół 8 ü DĄĢčŲīóļšĻ9HŃå%äóź6łę5%ęhęÓ ÷ĘģōŪē .dą’3Į÷Óįģ2÷5Q‶śüźÉ©ŗ¤ĖžśŽ(Õē įļüś"ųČłų%Ū¹äłŅ*2€"ŻēŽČ<õĮÄ#šŲƈćźÄĻüÕ< ļņ7 .ģĀ®ńŽ+õ7 łēĒõģś <šń² ā ś@ŌŽę7 ņõĀ"(÷3.&ö?ĖėśĘé(į Ż ½z± żķ&öżĀ™ *%.€żõž[%ą±š’łĒā:P†ļ%ś43*ÕhŚłćŁżō04›,4±0bTż§½!96+žā9Ł7ŖŽąĢW/šL1āąŃ÷×5ö łĒ$=žIźĄ%/ ! āüē`ŽżöĒāŅŲ°œ”Ą  ÖDĢé@EaMAé%s™,ʽLą„/ņūöóśÄŗhėĖįóqäÉ!<ßŗ¤'^f®ļņ_.ļčōŚ ū $ėŃ(ćē£ŚŹē-į¹°ÉA²EĆNDLS”0å(Ļ2%įč ®ńD5$ ŽĆKö³)TÄ÷ßĮ)"į06'ÉŪćNķęČź!1t"˾éE¼-õSZ;G’īü"ūŠ)0²Ö‹ēĶž 5ģ<ĖĒ ­Ŗō0žą2«1 ž³€šI}?ŚWdīü+śŗ'öŚÆgśöĄĖź½Ōåæį  Q2’ ō č2²ć÷1šī·ē(_’ åęćŲ4-īä÷NåčåśÕ,Ō8ÅåŽńRō € ŽįģŪÕ'Čöō=IĻŽ÷żéä×ćFõųęāš×ė>źÕŻĪ#͌ļ #Ó "‰$ŽĖ#į¤ö#«ķ8į—£dūO4ČęFÜ/&ßQĄņ'ģĽ>²Õāü?ļ=ŲĪżņ<'QÜ7ėķ:ä5qīåųĪa TīŁæ×/OÜAōŻō/ā+ŁĻĒł ęøģĪ5[ß'Ž-_ļ)ųĢę,įĀæķźU9Ö¼+ū¹Yƒ4ü( ųUĮ,8É3æ·ČłL2ś7¶ķó'$»CŹ*šé6 €č~źęe÷ó $޿¿§äÕ㯓0ū ä- 0 !øÕøZó<Īńó>ūĒeąŃżēŅąļŪ>8%>JļŲįė[°ŅäžgĮŚpÜ’1ų9ą(žĒ ī÷žų ÜA’Ņß9õåüŃJīČ#÷÷ZkŃń3öēIńL’ļĻū’óŪĻē!ǜåŚżŹżõ@m&0Sżóļ üĖö2ŪÜČ2źŃńõÅō’’Ö!÷;NŽōéW÷1ō8č Čš&ÜŃĻ€öč’å šŽĒōł ķ]©7ņ üīņBļQZ HŪłBXŸ×>)ņÓ2. ¼ōę>ęxŲ(ķŲšć +0ćå;=ÅńS)śųęGM Xł×Ė..ĆE$ż®9 ~ŹCŽĆ)›ż1’€0¼ā ķŌóąÅŲĄņ88œ(HµSōÉå Fü é $.B E ēŁäĀKž 'É;±ī>ÕėÉ-!Ż&ó;PšŪ#®öIŽ(ć®ü× Ŗą·C÷8ćł(, ĒjõæĢ4H Ū>Ķ肶Hįņū"!Aę;ĪÉŹHų¶üł īāäĒźšĆ>)ļāŽ’wÜ×Ē÷ó/8ļ ī(ųCąLŠõģ “ #éńŪ’Č’äųņń÷Eü7ä×Z1č’ "ĢļšśJšźœŅĖ6ą8č*ÓīŚ­żVµQĄīIĖāéųńŃįėŹ 'ŻIŌ7+Ö”żŻŚ<Ź!+½äžĮźŌQšī øé#ļ3aö73R,žėäĘŲāŽŁ&Šóžņ$B® c$ųųģ#KęĮ:ėŪŃ>ŅŻŌ0½‹5=CwšččCĪż Ķ'źŠŃ6/9€¾ü\óśī.õćįŌåÜėłĖŗ&żÉłVüž1 30!ØRžģ2×ČĀ=ńõ7~ü×$-åbķśėq’²C.T<ķ3\ńėńą’/²>ģł8ŁüĢ Ą5ˁŻSäģ EéšżŅĄöż;Łį1ź~;ńąėĆżkž,L$īoėģÕöōÖ9ź KųĒßéüŃōńĻäżžĶ ĶüņÖ -±]Āūü×ń'ǜäGūĀ ę&D;Šݳķ$÷é÷ģā7§HĢüæĒĶ4ćōłŅŁč śīĶ4ęČ?źJĢćü÷üć9öP% łŃūéÜõŠą÷ĪŽ6ī ęż +ńÜ ŃÖźņ%5Ł$õ £ā *ž4!h»ź×Sõ’žųŚ)Øł  Ē÷ ¾TŪ%Ęźü'GäźaąŃüĶEżQō įźźē(śUŽŖāÅ æö4#Ø53āÜāūÕŲÜłÅPõÕŁģ Ä/žä"aĀJ“ėų;"ėąā ļ°ąŚīÓ¤ģ «%¹Įédļąņł$ĖĖ ±EųĒ) ŽŲ "9č ³įI#÷’ŻįńƒćD ÖīĘäaęŅe"Ń4Ęū)¼Ķ ŽģFČ©ų/¹ 1œēI’ŌžöĒ=źÕż“1¬õ’į+jżŠčµł!ā÷ŻŌ" ŁóČ$įē%,ķŲ÷äóōÜū,łčŚēŚ ąÜ»ž?ÕéÉ?Š4Ēļķäģ9ļ9õč(÷ś —ŁĄø$ŁūQķ żīč%įžŌłóš&!ékõ8łÕ0åķ:@5ć&õż÷ńš&»ż$0 'čÜÖ" ¹ć·ćŁŽŹę±24€ cśĢŠćÓżõŻūņö÷Žćé'½®ö+!ņhšŻōÅÜ ģ?śžųĢ’# ōńĻźlļļĘą0 #5ń÷źXžSę‚#öVš6DŅ^.҉'‘ 3Ķ9ų•2ĪžķFĘ ćµč’ĻżŠ0.(HčēŪä;Ö: +!ü*#ā!Čæłģ ÷ļ:÷ģ č)PAG ē%U<Śźź=Ū"CĮŌżįĮē4Ū:śīžžĒöVC <*üŽõ ō’ę$'9.ōRŌńÜŠėėķ ųēŁŽ Õ6 ½#ÕĢ/ ¬Ī“šę.Aw¶Ų+ņÕė$;Ņī”('ŅĒ’Ö(Öļ>Ś0ū鎯 ēŃ Ś.;‰Ü Ó<ļOųšżģ=žP;ü(Ė/H²F2ĢŗĪ€FŲ¾#ģ%įßkÜ«źūå/č÷¶#Óų; ņ¬,>";/žćŚ"©éš&ņ:ż!6#õżų õņņż üŠIīīēÖņīŃāZó޲õP=ė £ó<$Ŧ0šł b- Ūą  ŗ©’Błųėīé5ÜżO¾ćC ć<@£“ åõJćšµüÖ· ćÕčŃšHūųźÄŲŹ-ģ&āĀŌŌžüļ RśėĒ ¶ÄEYæńę/7!Ų(ÅF®›5“į¶ń -’Ė’ØśŻõA3­÷Å ß*ńÕ=&ā!äĘ$Ü/Żł ś,-īĄČš$ć ’ł™óÄ NŻ(™²ŗō%/Ćń,+6żų“śīšŪ  ÉŖķ6ĪŪ0!Łėį’éZņŽłźżų[.ļ¹ŻæļTÉą»Ē×1.āÖ Ŗ÷éŽŌ%įāAR7Ā:ģŠ)€0Į(+ Öłé8öÅÕŚėķż ß×õ3ń%LŚ1Ł%źĆėŪ¶ųēXÉī(æ ų»ļ +BIäIėŅåé’õžĮÜ,@ÉQ*@¬ī ŁŁ‹é0±ó1„7¼ćµ€Ź4éōÓ?'ńŠhńŲ"įśīė$ćń9ž9Äūéę?(åbų+/Ö4ń&ėČćÖå!żļūŽæóŲ ŌV€Ī@šśŅŌė;ōńÓųļ:īį 'ÅÄ!#ńēĪD&āōÓ»ū<#Ōé’žž äū“ —šŅFGāžŹ9+õ³wąóŗź)āč’ü€čÅĻ×ōŌ3÷Å;3öŌ,‘ł%śÓćļÓłäIŽńĶŠ<šē)óßÜ.)šĒāÉ3ę !ĪIāķ€üĘåįžĖį=ō& ;"žÖ >īżÓŁł÷üųī(å›ŁßŠLž°µé×īņ ū((äłŪŠ’ē÷ļÓ5é ÕĀ,Eb Üž°× ßŅŽšŻéīcó ī ¾ "ŌÜū†ąOŌ9ż&ō9ÆĄĆAęļÄ÷ÖåÅć[•ģ¦ß½óAXŃ_÷ ßėķŽ» 5'ų)ūĀŽ@õūčń€,Čö-TĒ’õńKśĢģ ĶŽķżDŠ’  ć ųķóJ>L šŅÜÖüŅŁęęĀŁoätŪ=ņ óķ éŪą]ī3Ę„ą¼ļiŽ)éŻˆł*Č$Wą@Å)łõŃSÅ!õ±NūŪźĪL¾ńūļ .MĆĒĮÖ;‘Ņ ńķĘDī=× ż±9ÜōōńŻźŚõ, /ś%ĻĢ#ĀÜä_a8ēĆīĀҹ"žČįöČų'ņł™ö>,ōÓ Dļ³>¤äń„łīā-!³5Ü "Aą$Ķ ƒ3¤üŪŅļāÕéūó ŪLĘčį%q]ļéŠg6ĻŲ·¹rį6ż_Ēż.®Ń°āŻÖńŽīģžģ*āł" Ų~DĢāc² Śķżž+ŸßŹÓąāBŌ €~äćōÜ;iįĆóąą8ļ7ļ0; */õ’×Üšóķ ’ r äģŌ(&Ģ  åįĻ7!÷8NFāhMņÓęō*.$ėģÓ.žćĖłłøŪ9¹ąŻōĄ"óė.’ōT"ść6š#½ķłźtŁ"’ĀōJŪŻŌCõ%ņč,Bš#į½īäóś É&,ŻÜĖ#IēņĮ5Ōłóō0# »ó¤Bāš+ķ,Į5<½äļ ūģ*ŗłÄń’ģņõśżéźœöPcĢ1Évfķģ15_źģ€ųĆęōßJś5׳¼ņéÆ%g>ó%If÷ßYĻĪJ€„iÖ+ÖõqöļåÉ+ žÆ¼ŖüóŌ+×Ļč9īĀķ ¾~ųŪ¢Äō{éDϤņüBŠŁé2°:óäņžŲÖš²ņ¾Ē4ŒĢżŸķfńż+ÜJŚżŪŚź€ŗ ”R^ŠšN““łäÖ’Ņ ėü™ÄęæśźćŗHī&)+į%8@?$¬ü `×ĶćĢéĢ+"Ńō÷óźć° ęĮ“ćæ%ɟĻõųśćĀć•%ž $%'Ęõżß4 Aķé8Ģ'=ź!²Å-ˆ×ģMĀĀÜēõ5żģŲļęż÷’‹ą0#žČü Żą9ćķÖ–+ūūęŽ(ūõQčßŌä".ļŲ\č!Śų·ļ=ų+Ļ 56õĻė Öąlēó ,(ž ņļāżžĪÕó9'äĪŪ"6J ß'ō Žį śōā<ö*ĢęćŪõń%.5śģįä;ČŗĆā*$,+öĶ(ķōķļūųÖāīĶŽŪĄÖFčēČ 'ūFį"Ž2č0ł÷ŲķčņłŪąķŻüś³6!ö&ļø¼ ćõ,š Ņ,·:īŪōķ:Ķēæćńšēõäµ14ķ+é $ŌŁĀśēšžž¼#Ń ó ¾ų óģ žŠŁź āģš@ą×éŽÄ. üĢŽžŠčKäæż  ØšĻIĒ ł3ڶēó+ (ŗŌÖ"÷׌Ń;ČŹ<śśÜūźFżŌĄ(ōĶśzF ö-éĆäź)Ō’9é5)æ ńĪ#ņ’½’ż@)ĢõÓOööżłŖäŁć9śļü¬ōā÷ųą'šĖŽ#Ļ*6Šß ö& äßłÓŃ)Åūķ[ēŅŻļŸō'²'gųĖāĢ*÷åĻśĄÖéŗīŽFē$śöąüĶ©ń āŁźģ° āž“öÜō$8īŽūžŌ„ķźóÖO’¼„ūü×ņŠLĀųöŖæ¬8Oü6² ēÓLŪ’÷A÷ÓņążėūšśõµŌ&Ž’'Š(ÉĀ’ōĪDłMš 7ėś%ūö’ń!ÜbįJŅč >éā+P×%202=üųė6ų( ķ3å@öūÓūWųų,!Ė äŚćżäļÓšīļŃŚēķē÷,śéć -Öģ­# LüŗźéėĪŁ’Tœ®ö×/0Fč ö é?Ī®©*śčéÓų+å#šŻē(%ģü@éĶżę‚÷g P śųÖļ +×8Y)'6óé~ ūž’Ļģš#-öĒׯ*”Ųķ2āŻ”ĶļęõÜ%*ßžæV×Ŗ]9),&Īū. Õ ĘĘbü)%ėš’Ķå5Ńė-17Ņ,šD%+('ńņā«Č’ Ī„2Ųķ¤ D ÆśłüóÄĶ€ašÜ ś„ńŖ¾ąųĘ*D$ ńääß5ū0/NĻł [“-ś 9ńšDÕLŲŲä*üŌžŚå¾Ü45ĶM 1L2Rō½Ü@öūżó į,ßꌹēéóį9Źz*ś5»ĻÅ(Ųń*åi' ęģÓ&Ļąś,ü/ų Üāćä(ėęūūŹ-łēÜĀł ZŪŹ’ÕÕšŹ(łõz’KęŻ$CłČŚäÄ& Õw?ē ·4µFkņĘąģķę8ćĢĘýÖīKč ŹńW͹ĀĪō)+įŃ7’ Ō#ÄÖņG ŽOŃĶæöö8'·Ļź Öe!«Ńž/$ć)ę×SĪł)ū-µLõćĒż6ń÷€ --<Ś=¹ź0’#0öD2< ōÅ) 4’ÖŲģö'4(ä¬  źč3Ćų š¾ų$Óū)ŻĻĮšō;kęėų “ŃÉM Ūõ÷×å÷ēņŪÉģ0éłė+ńÕ1$%”å5.š#Ą öŁÖ1÷ąé>S+ö(ńOł&8/ŻĢą+$öŠŁ¹Åõ“Å5*ēąŚńŹ Ä` 'źėB ,$ūē%ū’'0Ÿįłā88ŌöćŗĶ^>ż"öźå+Õ» šÓßPß !<āŁßė¹<,÷ 2ąßĖ!żå)?Ų'RŁ÷Ģcś ÉÕįņż%āÉļóĀ#/ļW÷0żęłö0Ī.ŗ čߣiśöźš·)Īó^"ņšż%ä5ųłź0’z> Įü ”+UüÓžÅ(ŌŃGż×ĪÕō D4K Ł`ĪĖŌUÖć&õęŽÉ½Éݳųń3Ź &ņ 5śĪėŲōĻ&Ō.1łĪ ŲÄ/ łžļ Éó’Ņśę”Pōź "ńŒų3ŁÖGś.āŌ$(yīšé§ģųū’:c1é ŅōČ0ęĻü9 ;*½śäå’ŁŁ ?Ū3õę4)÷äó²ÉéßÄÕś2©‘źö³-ń=¾K¶ā÷EßĪÓÜĢćE;žļ! Õźę̧15éį4é+Č Ö/ńź„Ó¢7¼é ÷'-×ūēäĻŠ»żAÖžYÓ/žė9ŪÕė!Ļ ėĆI#źŁ*Łģ8!÷čĻ.­ņÆżæżEŠź!4¾7ÆÓµó¢6;ķšé>Ļķ1¢ń§į’óŁ>Õ8%oŠłąģKDĄęÜż ł³Ļ³Ń'Ļü ēņłA¢Źįöå5škĶ,įó»¾"ėĢ4ęŽ ŗ"ŚŲDõ ļßōķ7Āņżņó<’’ŸłóIž7ŽīÕ"#Č9ń+9ššŌźū3VąłÕŹźņū "Nōē"'ŚFõ:ņż1Ó’*Į\”,ļ)üK ėõ«ćJD)3ÓŠ1ß ĖQņ )ĻĖź4Õ*$'ū(.ŗīEŲžXģ²Ģą ‚Ā!ÖŁNJ¾ŻóÓŚŻ<åœ=æē’Idæ7HźKX <>č5óްNīį øäÜīĶæ( źŗŲĒšĻŻ5ń~&×0 Ó÷×&Ņä0üÉPššäńWēE¼ģf’’=Bą0 åų§% ?ĄĮń¬ŠVźĻóŃŃÓA€üš«-äźō FöĢš§üŌ*āŅģÜķ%ķ»čė"ģ €(0L*JŌ&łć#łüĒr#ÉךĆĮżóļō ÆłóēćīĆÕ'å²Ī2ąź1Ī58]ŸęķēŽ¾ā»éŠ1ĄA ü7&Õó,įH’ė ī:ń¼ ō ķī×8įßöļņłÕ’éĘ%#$śü!šćÜ0’¤PĖį4Ś)Ęå·30S Ļ"  €#bćėWSķRł=ä×ć» ģč ,ńć·ą‘ć¼7ą)'Ćņ¶R8›,ģÓ¤,\,' =ŃŻ"×>Ō ŠĢ?ļł2S”Ū/üĒįōŚśTÄL*ÕÖž ^ĘßäŠęōÜ č@.ūĀ_žņ’;ļļ R»ģ*±Ķ+ääłīķ¹īå šĘĆ,Ķ7ī ūK1!ŻŅÖÅ&īi VĖŚ(WæßOć#’“¢(YBŲ3¢üž+Qėžń’Kņ®¶6ŸJÜĮ,ĆńÕ7“āąė“ōåįÜÉo1õÅ»Ģīź0¶Żtļ4Łė°C4¦RŻūÉĢ —0ņēöŋņ4ōżš 6ĢÖĄ=6čō ćĆا,ēĘå¶XÜ$ąō)é9q ›“ī'Ņ;ĆķāźĒŌÜŠåõąéŲĄMŲ .=Ü֝0».3š¬µ)ö!!EÜ.īöóP!,ź<Ą&×ō5õŁ&(3ōóų"Å+3bÓēĒ® ėö¬ņ8Ø&2īķ3źĀ2$*ų(źź€ØTģęŽ_Üņ÷Š1Ī[ŗ č žĮÅõāõÉ ź&&/ł/ŗŗ ė Ūģa„4ÉĻęšųčbʦ TõńäŲõ įņ¬śĪĖśHBćOż×ž#&=5Ō;ōŹZ ŗŗŃ *wśä*%ēKńźŲ ”Xģźéåéąpæj(ŹAĶ3ū°ż=Ę&ČóĖ ļ€ņŃ:Žžę&0PźćL;ØĄåKŗų%ʼĖ9?“jg&ūŅüFŠ3ōāĖń*’ūŸ•$ī÷į|ų5$¤Xä"(ō ’óūéņśē3Œ$Z'öøć" ėÜ1D’6,ÕÄ’ĀŅ"žŹ+ū÷ėÜó $õÓ2§ų*ęņ%ß, ī Ż2Ę%=kšÅ. W™ĖyÕīēś8 ōŁēšüēA÷öÓȱ³€ŻāP ļÉIĢŪ2é”ŪC8õ)å$čų-ĪŽį"ŠęŠŲÕ*Öź0!,öģ!ź óŚü) Ć^æ#ܳŚ÷ć ōš żŌżįÖß_õ(:8äŲj57ėČĢ"ōß„Śä z1åćÖ³ĄŻßķē9ņč?6><’Ļ#Ż-ų÷æźŠŁūä„,<ļ ühĘķžū ēä¹ĪŽ»ķķŅé915ó Ś ųżźD%CCņŻæš^īGŠśųŻāRā*DŅīž¢üņ%ņP=„G»-±ĶÕ 7 ¤įōł-źßÓ"`ö 8"`Śē ėįą±³ō¢°YĒӌļēY)q )Ņ4 Ą# @ęžČ·ś Ö ļł-ą"žž' U0!5γąčZsż÷ż1Ģ?°Ī-ń$%OŁńļ įi Öō"ęń%ŗŻč ķ4ĻąŃN7 āóŅ9łĮėļÉQ-#øōżīÉłŻ«ŅŲ)¬īÓ× é2ööóĖĢ8ŚPö.ļ!ößē +āŠåī/ż%ė)åM.ēóŚ*ķņ¹ż · Ÿ÷Žć÷=śŽģėų Yńąéõ ŽōāßÄųŅ@\EóDļĄĄ`aęĀC$3ū9š ó ķņ™¾'ńõJųCńļóōhżēē+Öį$ ęē ööüė„ņś#ķ»żó' ±Ŗ Ōóņ’š%üŁõ&ųśĀęhūD+öüėĖ%üß'Ü@ ć ó"%>Źš ų"ż<PÖó9÷ö’üē>ęį)8ć¾šźĶńž"/U(ąųü6ļ[!ī÷6Š4ā!GõįŠ’!ĶõUęé+Ā"ź@ņ ČöK÷’Ńćõō.äķźŚ&ėźī(Ģß+óHö õ"Ūß«ٰŠ 5 ŃŌDł’RžÖŚU*ŚööÕF,ķGūžś!śžóÖæ*į€ōź®+ĪėŚŸčź¹åż.µ2Š#+ücÕ'ć0.Nńt Čū ä簌ņį.ż’/’Žś,“éŚ¼9ž’®ōŻźžüQļ5*=Ų'ĒŅß+ēĘč’NE*óżg¢?éW ńßč 67 Ćš 8_ēōā)ęüĻēŪżē€ē-’ęŻE ·ļ*1ėü Ž3±®ņŗźÄńŽŻį ōžQP÷źģłńēŲ'ļģ’é?ž śÜčSņ ą šīķūq“ ėGōĪūóėņeŃNÅ åāåvā÷5– 4øūšĶŁõ 3½ķ¼ģa÷ų¢&ßó‘K.ł€ž×²ŽšŌĮ!į$õēqIĮŪżMĒć%÷ß­ *’śżŹų`.95Š/Ķ"į īūķūąŃH2!ļÉß111>ńé Õ[ ¬Įśó'ó ŚXļ½Gųž"ē ÕµęßĀĪ%óßėH¶ĪÄ śųĖö$ÜĶš›ķģóģAUé !a6ļŃš÷3 ŻW$ķYżöæļ\žø éÜž’ā8Åz'öö+ńą ü¦#$šįĒłµ Ķ(ōēä’)Õņ0į -õõō÷éŪ’ōł!c®D Źß` Ņ Ųģ ŠÓį¼üī$%ČLÄę@ ķš4ļėō ī ū%,Dś'łŠį’9Ć֖S'ū)6LÓÕ; ø(I±6ž..ļFMi ņ3+ķY%ŚXžČ7ÖÖįčć)Ēč3'żfĻÜ’ŸłGīÕiÉ&ęõр šݤ@įŚļąöõņØ® ĘՂ9ūeåŻśīāļ± ż äłßž ·Żńų!žIä/Iģ·CÄ(’/žé2ņąįī š(ąŠÖ„ `"$ū$Ī’( ö)-ū@°/,ź÷Ü7ź įĘ+öGŁąĄ’šéš;\ĻģžW ąŁĘKZžµčįłüŪöōõīūüÖ,ķ× żÅ÷5ÆßÓåšÕ’ Hé8Æ*G ^®ķ²ĶĖ3#öüØż Ęä!ž`ŗ=į$u 2āBĪ÷Ēź5ĄõćģūŃēäš½õķų?OķŽ9"-]<Ų(Ō;ö ößÅ5ōūž Źį÷×3öĶńēęčšõ7żŪ¼š&ųCą- ÷źČÜį«°ŌŁĀĀŪ©Ų²%æŻŗ   ÓØ ūO%ģ/Č. ä ūĪūŁÅå 0į÷ōŲüŪļĖ&;ŁŲ#ąųē%Ėń'0¦ČāŁćüż„D!šåńėĖĢ÷ļĖĶżHϒҶäńśįĪ31ęšįģ<:ÓŹS ęšžöéš½ģč’& 2Ļ%1$ ÷’ ߏĶ+ Ėč ĖL2ó÷+܁9łĒŲ ņ_Ā ­D@•Ę< neøœŅ/źū¦żõĀ(Ę÷žĮūü$#½(ż_čĮēÖfĻņ1Ąóļū čĶõ%#ŲłŅ'ņ6%Ż ę¹żÓņč īŚżų8+õōėŠŁļ>éęā’<Õ%#¼Śä×’ŻbęõöŽŁĶžĢĶūĀŲūĒā ā·µś  čņ' -ūŪļĢņüö’ " EģŁŻ’’’Ö õ ņę.4ų5Ń'óįįėĄ÷Ēßūõź’łņīŌžŁ ÷ō÷ģł½G:š ū18"(ĖßĻżFč2ø?=Ģ-Ų÷F ō鏒ų÷Žü&ėIäõå(Ž6ø@ö3ōĮę" ī•Į÷-ś ß×<ā©Ś"9ēˆĄŠ±śCĢóĆ9Jć=Ķżūłā įŌžėō^Å¢²¼‘é)ćīįģ÷ÖĄńž¾Ćą(öõŅGńöŻĖŪ×'óļŪįą*ö ę!¹żĮŅ3ų ćāäšŲXt&ęøÄ:&€©ĢŪžå ½žÉČ Ż4ą'ńü ÷™7†ĮąöAįU¼#6$L-īŚ¬Ŗ‹Ä ŻūøŁõx}W’UHWĪ#ģ–D0ĮEóż„[Ÿ0ōŻņ€ž÷q:ėģēėķlI źłĢ,’/!X;5ȓÆ6’¦üǐĪņĮN¾®2™!?ŗ ęŸ Z³Xč0Ż*€šīż6Ÿ€<¼³€,EĒOņ%Ā ėā7 Ō" ÷@Ė“łźÓüųśüĀ $+ ć/Ņ«ó<$ĮńÜ6ź8 ķ"ņņ#ų˜!ėÜō-żC$AĀ–Ä/ @&Ūģ@»cž+č[Éīe ×'q÷ K×÷aŚõņÕł 8ē3äŕųꯚ ø6%1ßŚŌ¦ ѵ£'ęå0 N0éĶź’8Ņ ūõŹöśäŲŃĄ!ü?8!īé>ņ= öļ'ī;(¾> ńß Ai·ŁčļżĆķiŌĮ±ń|ĀāBūćĪ4Ī€ņa6!Ōäłū šśłŚÄēŚ(÷ØēłÕ`ĀjģōvŻ*eLŌpØųņ8®Ģ*XJĘD÷ūžåĻ–«Hįļ"Ż=*ę/¤Ūą·čXąŻ>9£€’6,Ą€żā1÷[³ õÉE@Ežéņ.G3SléņSź2"ęĒ’äĘę;ņ»šŃ’’š:ŠmÕŚĻ;-źQüĀ÷÷öŠ'ěļFÓRü<śģīę.Ė1Ē+÷Ź’ŹüŠĆė8ėĢĖ!Ŗ æ ųņ:@ø ˆ ¢óż÷Ó ’щ"Š3.'ģ÷¼3Ąń'ä$Š) łÜ7/1óś'Čö€Żļ€€ĢāLAgńüł*1ķē =ź#ż5ģ®9ęČß%T?ĶżųŖ7óÉ?^JņżZIü- /ļP-Ó;® õŲKūļąčżłž7’¬!ėķ ģżšōßžĒĶņ“ćŸ0 7Žõ* õÕ°ņ=’! 2ńł #±ē’ėæüń÷õļ’é2Ō+ßC€ćķčÕ¶C° ¾ŃĀ»ķą$õåęä-Z ēėĖśJõłožÖCõ!,Õė źź¹&ŪÕłÜ)üÓģģśSō¾Ų&ūž!)Õõ!Ńä¶ć$«māäå ݹĖGäėö"ń¼ō÷ž,!0’ĘōćūęĆ ģŪó#$ć¹ŽÓ »÷Ė Ś*œbņe-ņ+óņųÖęL‘#õåś/ŖĶž6 €ž<±ų¬š'ńä(/-ńÓ½@ÓÆżįö;žõAbŻā"0å÷öWķéöō÷³§#éõóĢcāi¼*6ģ ¾ é,ā"”ŻśŌDŚ’‰9ōłČ H®,©ę(² O/1āśž $ °7ŻŽņåėGäģ%ö[ūB×ó"Ęą+ģҟ+žōņ3äĻé‘P”šoóģøā’ ü õŲöśčŁõēļ2ę±ĻņšĀš!m (ņåŽą4¾ė“Ų ļóČ×Äņēśå '×4ÜėĶå÷Ÿ#~ž ņē) Ž8Sż77ūüõĻØļäšŃ>źéė ’Ļ2 ĆĖśŪ+åéū>MŃ"..ŁóG ²ŚĀ1Öū9żńÉēÓøÜ’žčś ÷Õ "žĶćHā9Āóķ.Ć-+æ Čų šżÓ'’÷ ÕPŽėb)OAÜéÅżĒßÅēY·±łąķČÓą,ó~½ >ć 1C°é%"5÷Ž5÷ŲÓčKQݵ ł3¬­+ ¬Mć÷Ożāėk¹ŠŌÕ2(&PŻėī,ŃałĄü8żż!öłĒ*GäöŅ Śæ!ą üŚŚóō®śI?ē1[+9%Š Ø4T~$ĮHń¹Ū¢ė į!¶åŌ&nŅ׹ü€ »ļxĘ’ųóŠóÜ÷½7ūūÜńüņī×qĢ4žģ ūßģź#ä)Ž.żāć3Ü8ĖīĶ)¬üī(–Žķ ż£'»L#ĖūėĶŻŠå2 JÜ2ĀĖÕžī2ÕjŠ"ŁÉ¢Åņžöłņ9iÖ ä0/łų=č²ĘX źĢĀ“ļ¢Ž,į łļé " ŸrŚŻö4éY% ä ,dō^ŽŃš?ĀīĆńßĻōå˜ų9øČ6=Ó% ×( źü³PūÕĒį>ļņģƀŅöÖUō%ęōÉ āīÄ*P’ åĒ,óøņŁŅ ÖHėØóö’ą¶ĘÕéė āüÉŻżīBö(ęķ&ą% 2 ł, łĘ!&ϽüŹ"ā éĖD!…"Åć&ōÄĪ÷ąõ$ÕŲ×Ņ#óÄ ģĪā.ų /ž ) ćļ ÉłĶłü*¹ęå ö’(żä6żY?V“óå8¾:įė"ł'įĘżjCł  AŚ9 6õŪ3WÄśā޳ŽŖģ’NĆå”ó>öö’Šć%2 å īńć?ÖĻž¾€g#X ś$Šš>µŗŅŅ(ŪāžĖóēüćüėöū8÷źŲćžż(äÅŃńõ²€#ųHņĀ!0hļ#Ń#!Ż­ļüÜī Ć *ŁŪ '©#äčéJņū÷ÓŪA;ģņą(&42ėųĪŁāKķ!Ę Kōe%ČÄcŌīŲŪåĢ/ŲóĮō¶+ĀĻ· ņN÷暼³ õÅźOģļ(902Ó&åéź éD ).¶/!×ĢĖ„æ šĢ&ūK7’ał Ģ ēō ÉGńżę=C āć™F’~ØŅōĘųÓńņē¼ņ$"łģ"Ģž»ųÜ?Śķ ž’Ņ Üóī½* >ÕĘĻ@ åCŽäŽéņ"ćČąŻæĪ ė= ĶäķIņÄź§Įš+IJ’ÖÖTń äŲŁéūūõČ.ėéĘĪ&Źį$ŌóķśüŠńćśé°3?šėǦ, š[ É™4"ģ&ż»č,žńåćņ%Üō8Ńõ ōŠīż×!Āū ąü"3×RšEüįŽ ¢7 0į&½ā÷ČųŻłéžšŅ™ü¦Ü6-1ėüŃśG=’ō¶[¹ńéŁįö»Ūį’ō¹Ś$Ō> ę÷/-ē÷ čßų źÉżŻ-*, Čėc,ŽÅCĖļ…,¾&īIę،żÜł.:ķś1ÕįóMūīc"ß6Łš3Ä 1Ų"žņ. +įø Äõ)ų-*ō±łßéź’ĪŻüÄB±ü*3) īÖč$ģb! ŽųĄ;?Ž,€ó-Tņś‚Ļąįų@CŲ1ėöü¼ńY&;čķŅõą€ś¼5ņķōõśķ÷$Éī)ņ6öąŽöŪĆŽUĀŽų×i ­ģĻŽ=/ōżĶ@a3ģéćøŲ56Õ ŗŚ5ī-<¾ķ9&Ńż"ū3ŠōņĀģjģ¹'Čķõüü»ņE"żä+ŲŁ' ö¤:ś üŽåõ-柁֞ä-Ą- ?ź.łtÜ!CęŪź A?(į (0ņąāö%é͹ĒącOź[Ņ"Ņöż9l ŠĄć%Łæ ’ ä3øŪŹčŅļ+īqłc2ųBSūU"śŽż¾Č ČVė-öėŖŁęĘ,žż×( &ēäČķLż÷ ķOŲ%- ä­$© ŁÅ|#³ĮŖVĢ9óLšī?/ģSĢ’“=h“ģšą<¢ś,ų¢=Ę߀28ųū·Uwcģ(Ņ,ååźčż+« ŗ^©žĮś6Å:÷# ęņÕĢ4óńž*Ŗ¾ī[ū¾5Ū=EõE§Ę “Ć-ҹ,[·Ø˜ž?Ń×Ö ”D’2īłäś7*Ł9åG ä # ÷ ŹķķžJźļ?łī÷ļ" ĒčńĘóö ļĖ@@ųÅ Āå¹1ė.ĘGžĢžł ]FĄė e²±ē“ļĀ"åūśGéģ ųä:”śś¾źśßųé%ūńńŌŁµž *÷é õ÷ÖŅõÖ ŻóśÕēøé…f(ōźāžŪ*Ö3÷Ē žų+/G!Ķ ¹66n*ČĻY>YŖõķHüĶĻ„&ÖĢŲ*¼īłĪ »ęąčžEü5 žĀ5÷(·ĶŲĻ€ŃĆJżAÓ~V÷ö4łēõ#% 3*²įĄ8 !ŌŅ{5 äyµåĒ,īg/-Ę.BżņĆKķ*äö=žį ;Ž Õóé×N(EÄOųé÷ź¶ęŌŌ’%>å1XŅžą7 ęī MA_’;£Óņ<ĢČ.ķņś×ł.© ĢļVńćīćĻQńcŻóžĀ$» ż=š< ģEą,ē ö &";ä ŖC*ķĮ+ā5ąūõ€ Õßü  Ńų/ß* +ĘĘ å?÷·ąšöŽō’įWś é÷Ņę'É".ł÷ńüščńņÜńūÖķģ"ņŹÕ*Ž ā×=Ūę ųäå5.ŌU÷éC(ūŠE;īāĒ0æ/žę ®Õį ä× óåķ'×5Ļ÷ä##å$ōÖOŽąśą"ļcHįl#É"$*ń9@Łß_ ÆFņ)’ źļČ2IĘüÅR˜õŚ Ž)?3ėä§GĢWLžųĄ5< øįõT5=t}ø2· čÉ/(F: ā'ŽõĘńŪéߢ>š7ęóÓ×"ÜĮFrß@ķżęÕūū "Ż9ó :ܾāŃė ļVėļ4 $+äćõźō9čŽĶĮwÄśó FąõäĒņē ÷:Ä ėŚ÷V ³»&é’5ŌOÓæą-ģ čIö’2īßåÜ) S½œČ&Ī7Ź;-.Ż4ģņµĮēČ÷Ā7¾Ń`6ą!ä½.ĆՂKĶģī©=#Oō'ÅĒńI‘’ÆĀEž * CŚ č—÷µ2į¦źÄü+55ķā !ź#č'Ņ$ė²Ž<øõŪŲ­?ģ²*āż¾9Ķ įŌėQõ'Ś&@é!· Ć5 Ä ņ £( óNŲėHź5:+-’Ič 7>åĀż?ē!ņ؃ Öąū&įÖÕ'é5ż Ļæ/ńDĪ诒źņMįßłĮļB7 CĶÉżĮ¼'Ūå÷ŁÖņéš&±īž$Īŗž µ’ŻÆ ĀDßĆ""žńäéŌ&ÉW9/ä1óüĀ®ż÷÷åĄÅ-(°åW-//)3čč÷ !ŹŁ2ł$S‚öoź&ēŽžĘņšöA #³õŸHņŽŚśä7  4୻݈ßņō īĪ6ŲĻż!äĻłĢU×å5ÓŠżüÜ®ÖōłĢōźDķ½­0ĖčŻņ ć īÓ,šŹĀõTüßęõ¶č,C—óōāLG Ķā.µŠń8ųĢŲQóŠź©Ś?Ż<=ū ēåŃY÷ÜćŅŹ*ęīĮ Dļ9&) « ņ'2# ēśSĻV4Äśnį Įü”Ÿ’óŠ6ģ¢äł"ŗÜłJ½žłķ¤õVéĘ0Šü螣 šĪßF F'ōūąś óČ5D#ż*2Ē÷ ©Ī[õ6ÜżļĮ*³" Ō0H ć7’÷/ ē ćf ė¬Õ÷ļŹ’šĖźGåD±ĖÄõ$ ¶śīhģ &Yī_ėŚ ōŅ/>ģšČ5ŽÅČē43'ņ]&įĻ9öo/»^·¶™šąö)Ś' Ā'Ō\ī#łÖĖ!–Āńßą&&×ßķF ö6Ų±ęóŪ$ē<ĄčŌ5 ĶŻ¼Bųłó źę3"9Ł€-̤śč ;’<¾čėÓüßóĘö2ä 6ėóObįģ)2/Õ Å>žū@LŌŁĪ=ģĘī"ņ9ńéüśõPé+"1ĮļĢ6Źž ųśÉö÷š48Ŗļ*õ1ö ęųŽÅ ŪZ×ļ×57éÓŃFĻūū ėß°čåü²’ęWü„.Ó €¼.š¹8Ō,Fģ ®ģóŽÖ%N'Ļ×÷5ō×iN1:„Įł7>Aū= Aą¾ąŁKŗč'łŅźÕįhĄ­ā¹.öWńWžēI¦ö!ī$Fž4-©õüņ ĪūѽāĒ+ *ģĘ ļ?§ć 0Ńכjęź¹YķHÉģ!ėźŻ9ĻŃųÓīńGÜ××’Ł8ŽŻū÷ųŽ=;ć!ōųe0ł/įŽżģė 23Ķž4ŅŚÄ;2:Śąo²į1 *–Ł&#źŚåĶłĒą!āŌ ¼ ŪšŽ÷čķ Ż#÷śńš6ą0’įÄ9õŠWe;ŌÜŽ÷ā_>ųNŌ žö@“S' ųą¢LņźųčųģŚ%¾Ń,Ē· “ įśõ0: óńč?ÜļaņÕŠÓķ:ŠIėģōģRż!÷æ žźµRE ūēģђ7¤ō-2ü裒 Óń~Ōö0Õž’:ē7žˆ?+FJ ļōźĮ( ÅōņūÕ`üŃß;æ&ģōā%Ü*ū®āŠ$ūśųéźH*ļĶ! VÕ˹=ŗ 2É× Ąõ ŽéõÖMļĒSīģę$Ä=i9Ž„DõGiLīE.*!* ņ0ą,ģÖ&÷éńóĘĘ±Ü å ÷»’üĄž÷²HŽŽ&ß$įÖĢĮŁ*ćŽ"(±D\;ö> 6ļÓś÷Ź”!*’įśšūėL f 8óē5\ŚīēŻ7.’ !ėßé/DźߎAöŌ łą &<łāĮ%ŻBā¼4śŁ#øļ¶üŽ ŲõēčŚēĪ÷(±Ę¾ś&×ßD&Šß3ó9' Ęį,=’Ę÷påŌĶōņ8Č Ń&!į6ü’ ’é 3õĀ"×Ī ōŻĒĖīōņ ć": ō %ŲKæ°ż%żśŪN²ōńÓ&¤š-ųų éĶ lš! ąņ åģ%ö"’ößāŁĪķåü&śāćßąéŅĄßAŽ é/*ģ!ä&å QīČżU6žņ³ŠūÜž śĢłß’éõß1ū1ÕźéįÜžŻŚ#āņā$į żčĖżŪįęęņžļ8>ę÷łöųŖŹžūŠ ŌŲ#ü/ÓöčęŪ2ĖöæĖ5$łų Ł" Ł.ūŌćōõk ’÷ā ūĆéļŚó8(ž/4 ė) ž īM4ųńéąßĢ å ö±½„÷ėūŌ d åÅČżĶ ÕųÕłļ÷Dą 3£%)6< *Ģé÷ÜĮµĒ®ß8ńĖ1%żE± Óå,ž:MżE /ģ¬ŌO )Ęęś8ü(ÖBhéłä÷ų$¦! å€ÉćāśéGę’&2ń¼ó)ĮāžŁüõĪ„Ś@Öš"źö*šńĖ™“™'īD#īźé<÷Vļę"Ų#äó Ēų³įéŻŃ’ ’ė.ń&ųžĖńčķžā# )8Š ÷,ö2ČŚī¼ĘÓŅįŪü%č!ß2SĖC Ų51Õ1¬ßō6 āō%įś/ļ?מå āŌ-1Ū ņ/;, ńä'ŌFŹ7 įĢł! 0Ü% śļB ĢNŠ(÷ Ż@ćÜ"į1-é1Ņ4Ņēü(å=ŁÜŻć /Aņ7Ü÷@* ²‰łš,ļ(å¬×ĻźąĮ3ćę'Óßģ 'ūždė8) 2<Ł$ńŚ(( JųÓć$čĻŻ«ūéąžźŲQ ²ļ+ńšŻóåš:ČŹą2Ōōė*łńÖü¼ćÉׯä9E #¬Õ éųÖĘ 6 śb<(8į;č óß&ü÷žū: Å1ńGļóę,Ä1*KG0ŅĀ-ėÉÓóGėß*ś7żŽÅąé©°!3諯ĪÕ-ščś ?ńAĒų•»L¹-=ōŲĀś¦ D"ČYüé1õQłNńōŚųźéł‘óźĖ# Čęģęį®YĒL=%)÷Ž©öT» 2śŹ&н»īģ Ę«.)ęū0%łūļ÷ģ©E öDģä Ży¹Ōóšėńś%īē ŠłĶ&Ū3ęõ”¶żó·<śå ~%µµ?ü/Dāī_čč üĀī·éÉŠćÕ'Z"ū#ä[+Ņ$Źź(ģ’’‘)×īÕ4©ł÷15 ąėę6ĄėöĘ'³Ł ł)¬įņō22fBŲØųć&ü©«ŅŌ÷ōś›ĢėźYė5Üņ÷ 5šĘ8"öÜōĻūāÓźßćŚē*2ń>ķ3):xū”ī é.Žą¦¹°žńźśaQÆŹ4“ŲŁ€»åIąJ¹ą(,śģß6Ä’OĻŹ īń4ėźī-^ś Ģϱņ²“ÕŖ ¼pļĢé€ #ęü !ąŲ­łŚĘP»ņÖ»ļčÕĢö#©āÓ»ū ėóąā³öI4Ó&>ėå'2 Ļ'łżęm$ÉŌļĻ3($ēęī-ż Ł łķń*(ųĪü4ų)!ŚūéõļĆ’%ęųņ!äė܀žšāŖōŲŁĆ Tž³ķń@õ*ź! š Ė &ēąŹ,C³ĶÜ`>äąĻķĶ% ūą"ó==Ļ(³!*ą,ńōüŌ-2ż2Có1Ό§ŸūõĒ—ö3šśī ōöĘķ ?%ÉŚĒśäsCüįŠÉFÆóūÜ bŚ&\?āŚ?°łņšĀŁ$ ן \÷:»4µčųŪ€ 1;ĖŌŠļ6Õ$¬3Fåłś¾šõ"×ūöŁē.ŚĄ*ŗä (Ī3Ń@Ō6\J¼e“ÅŹö.Ė㨠µAŪ¦ų?€÷ųöōÓÄłęEšŽÕG€ķ·*ĪBij «Č$Ņ€÷aFL×΃äd“ŽōFź}MżK'Ž$ńØ +/)ß0ķņõ€źź Æ½ūė6·NÆ(6Ŗ€Ō:vü€ŅŠė– ź¹ĶÓśZŲHĪĻ0(% €ņ€×ĖŌ$?ņ×’€9õŠÉ8""m¹ōLóō€}įóc€Dė‘’Ė$Ü>.N÷ä€ ‚Ū55MūEHō$@Ųį/ŲĻįŽŲī¦“ ) œĆåÜÕ "ś.ŹŗŁńŁ;"éģ’ĄßIķ@ó"€ĮōĖäźÜłŌø"Ī3’óü+ńę)°ōłēĆ*āUÖ ÕēTŁ·ā’ó2ļ:ĖĪł¦é8į4&(ŗī÷ųüń +ć Żč› Ļ;!ž½ Ą'é ĶÉȰ *ÜņÕE,Ā5é€8ü¾ś“ĪńßŗüZ9ķ%ŚĢ #ņ÷ūŗĆ3Ųņū"ŻŪŲ» Žéė łŻšųŃńńŃÜŌčžßüÆļŗŻ/ŃōęĶŚŻņ#¼śåēśÖŚśß5 éėčąõśśųōå)’<ś-ÉśńūšįŖłżż Ų óķ õ! īŪģūLń+’’åü> „č“čōō čõø#$lō ,Ū ß5 ÷ų÷ļŲžēżē+ü÷ńķłģJOŌč×8=ķüÓćŠįCĪ$×Óųóī9ī?Ė%ō å¾ÓŌ*UŚĄßŗź%ōõöŪ隥 ÷h?„’™Ūśśįź"S. ćælłźßöśāŪæĘē$D= Ż GźÜćč<üēõ3G B Łģ+ ēżā# ņgį’(Éß ĪŻÕ*žūéńõ€źöūt +;o, ēĒÉ~žµ£Ī?źžŚLś7xāöł($L'ü~ķē÷ėł“GLj ŚŻłß䓿 Ē Ś:?Ē ÷éÓšĘÓļ÷Ęłą@ źŌ<BJ’ ĶŻŠš2>'čõĶöA. Łģ.ž €ł'ÄÓףņcp1ö“?†0Ūüż'«õ ķß;ąŗöųļāŚļ3Ć1śD$) 9Kļū;Ļœ’ž.ą="ŽŹ+%šüįÓŚ0ØŽŻÉ Č»’Ż.±ģ* o“ ÜCŚĀKĪī9ųĖGžŻ0ĒM"ȵŌO’-äÓ(?ä Ń/6/½Ā°aó[Ą6(ž[.*ö<—JÉŌ5¶~>&īžüŽóę$ÓŲÉö1Ī ģ|~äÄR/ęŅōäó( ūŁņ3ģńū`ŹõŠćÖÅ->.œAø¾ģ ē87æēĒį"ĮŁčś#įóÅßų)õ" ó*šĖųŚcåä=ō@ĄįSµ€ė 3ų Ń ? ŻĶēćģń/ČŽż–żõ­é&õńā.ĄāāåJõżæ#ņ¦Ō ū%'+VäŪŠ;Bś0ھü!JĢō6Ķ+éłāįģ“Ü[üäöD C" +šńåū;Å'I0÷Ž=õ°%ö%ąŽżņ*ķ'üłŲŌ Ą<Ų 7Żö FĮĶ€/ķ?ČźÖ 0,:ŅÄōńŪRPÕlüĆ ;č•0ų@M·²!Ę!ęż'  ęģņÕłõķöMāŽ%ä$I"źĪĮŠLS$CÅĮ88§Ģ,ķGąHÓ%ńÖ¼G é1ž·½'żÄŌė,żšŪč8ģw!ąĖÖ0ō¢~®¤÷IJöHč )éĖs½śĖģĶōå÷6'NR&šęŽčŲŅ ó$óļÓ øż)" ŻģSÖ)küšĒū2ŹāÓĒ'ļš6ųņ:Ł^Ł& dāūķ~ļU1 ģ"čéd25õ%ķ%/1ōü-iN%)źPĪÆÄ+5 ¬Iõ¹ģ9ü# ·.s Į¹ü®Jų÷ Ź+ÖÖóŻĪåŚ+Żõ(ßā“"ó#ķĄ$ Š=/ÉŃ,ÉŌ:ń®Ć¼ļ±ąaĪĄ»šą)'L.ł"*ŪéVĖģ"Xß %ŽˆBŚÜōõ’żū īĖźĢĆšš$ 7ĀųÆ č½12öįŠ īłĻ,ŚüELżņėńżć)ēü čę ćŽÜüäųą²é= ģ šŠžŹ#żćųõąśŠ6.õŲųüóå) óļū÷ü÷ ÷ ś%ņŅūģ éź ϶’ųņżņń&ö+ŚÖ%D÷ Ļōķåé߯(öėŌūęū3&ŌģĶÖŁūś Łīż6n’Śż'ćäåĆų"šūņōō÷ņלēō’åö»'ų "ė >āōÆą1ŅėžĻöN æĖōó+3B¤Ėå'’µĀ"öćėé07 Ė4āūńłłš»ķĶóēj×āŃjÕćüÅĶåŅ;Ķģū łÓ¬ŪŪāk#ēĶæā6R*“Ąē ¦™@ + '÷ŽL][ūÖęąGĪ%ģ'ńČ,ćų4łēõ'Ąģ@/ÜĘŁņž×Ūėæāó#&ÜĪ–š × +Y«ōßžą< ęEéč&Å׳#;"ņ&EūČÖ÷åÕŌ æ%¶Ńģž,W%ÅŅ6€Ęłś€IGó'"ę?óaūā³Ģš ZźŽ7NĮ`Ń%ųĮčāŪ=óčģ,čןč)/8 :·ļB÷N"ÓæĄ~ēļšéčģś+ė )šÖż%Ö’ē.?š@ŚĖB0?Qć×ÖŌ4&ÅõSžčēĶ®ŗÓ5ęč6ę#ņÜAe4/Ėj ģÓž"öŁģå,÷ŻÉō ĘĒO*4ų(ōõO Eä»×Ē)ŗ©yü² š%ä HI'Ö ó6żBöūŲÜŁB ;ßė& DäģŪēŲAł@¶(§>ż# ĻŽååŲļČäĶ1. ć%[<­ōļ *ļ&S‘ń×0?KęŚŅ.ł÷4ÓīŁüó5FĢļÉČ!ÕäēĢÓ/ęć üPśA2ķņ.Īų)Jģś&¹ó"$@ęŲ Ć2:ößĮ†lŲ ļßiņųīōµQĒėҳžžæ‡)0ū’Ļ I=žūš“źü·ķt¹5*ä‡ZI3¹öé<å/Ü@X„Ū@ß &Žž*™īŸń ōXļĆŽŚJ@öŚš žÄ5łķIā˜ RK¶#0ś>9¼šą+|Ō6 !ūCŲé#śż-äÓ×ė¼åłé,ųŚ(H"ņÅ"ņē¹å%óä*˜ŅśīöšŲ&«ń’ė¾ņū+LūģĘDßųļłBį‘óīüüI׎K,é)ćÕ ­öGŠóĀ2÷žūē> Ś ÕēČāū/åͽĄé’."}ćŠ(ķ'±æ.ńõ$#;ėŪ ąż+ģźżN2į%ł÷=ŹąŻžė/PÖ70-Lšņäłäūé!!V˜Ņ Ź_ķ’óė āöåwņė ęõäąąäč ŗė2ĒžóńæśSō'åß HĶĪ*<īśźį+Žń%Ź#8³łźŗ6ąĪōR¼:ņ ą‹) ūźāė÷ „åŃ ä“öüä #ę;#ćėćoĪ"6Bņl ķĄżŪņų×ć UĢ(śĒF Ų ŸŠžüŲōé&)Ō&?śČ īč ’ĶćĻ-)āEõ;›ź ·LĀ9ą(!/'[¹š!ä!ļ åĒśė"čōćŌīĪęž?å¹ęĀŁé’Éęéł $%śé,×bųżŪģäÉ#'ąśįלįąåŚ"ü–ģ *Š)ęō)Ń·1% "óįń·Ž’źķó6ģüBó!½āĪ8ē)§2öśžAéCA;öIžĖŲēžāķęņĢŻ×ņń  ņĆ3čł÷.=ū’ķ% M$F8 Ö׎Ö/äąōŁ& Õ ļ, ōśÅž1Ų1 ŹūŠöĪÕü9 >r÷Ä(L6¹Ćä(Ų"2ōüe!Ņ飳 .ŗ—ņ•Xą× Żę¾ß“ģźó-Uę «’ü(×!¹ HŅŗ²éIõÜ2Ź×öĮźč9»ć€ė&÷Ė9&ĻųÄĒ ģõ 9š,ü'%4õ“ō /æ†ßŹēHśÓÓĄ3į*½¶,…1ź’Łļ’ōŖ)žą÷ŁķņɰiÕų&!Õó˜%Ų%üҫޮĶ/­ł/ä,Ū>n’]éōć !$,¶įē2.%LÜ-Ü©5ÕtTĖ/ģ0ėl ŪŪ3šž%ģõ<ēą!åõOźõģ*»āŲŲŚĪÉūŚĆ×Āšūéļ1D-ČSĢ„8=śųĆ2*®TĢųšķ ĒķķęīčŸÉēĻŲīĶj#ķ&,ļ#ó <ģ"ČĢø2Gó×ķōĶyāģóųųĶĶģü$(Eŗ­Ī ÖõżĖ šū'ń ĄšDłŽ¹g ŻX }ąūķā’ä3Ńŗž(ō+ķ&ā-čGęõ-üøŚ 1 ’4ĶGŲ æŅöžīM=ó#łįß’[-%Ļę+1ŻļõļĒŚŪźłÜś8%õõ¾böį ų&ιEŻśŻŹ4ņÕ­ J ē[Tęō/ļ =4ö.åéķŻļ3 ;$šīķEß Łęę×äō0é"ō1īAŪ’ų Ģų õ÷ģšų€*ģē*/ņ Ś÷ó °’éĘ6ŲōŽŌö ß0'&üŠĒōā’Ųń /ÅŁ ļ¾+ó ßųī'’žūżčĻįŠėķņŁķéūņć $ōōćž×żłķ 'é÷ņ!ąAčžÓß 4ēōöŪž üął-ćõ ü’īż1%$ ųų$Żī ņ;õū õźģ¶ł ßś§˜öĮĶŲĢĻßĢdŻĶE>Ņõä „ĒüÕč5üŌ·F:Ų :•Ł2 PńDֳќ/ēÉż@wī÷Ė"’XGą€$Ž*Öå)ŅĖų¤ éśæ²SV¶EAšĻś" »Į öBü>Ÿ@ŅÖŃ#Żšņ$ŽźßEķŠ! !ē+/Ö» "Jķ ąÉ÷:-°Ó’ ģé śąó’üb'÷öōé6NŁ +%š#(ÕŪ4ĘŠ ŹķåĒž īõś5£’ģ ā÷łļā ™ģēl \ŁćVėüĀļŃėÜ ż1žŌŻŽŪģōÕü Æ0%ņź0ļ÷¶×õH Éć’4ę°į  #D ēCūŅĒæ;ęŌXĶ“+ēéŁ÷½āó,óQžžŃ·åļ$åö÷óŠB=#į@+×ÄÓēžJļĢ= ńé ;õą×šš-Ą¾Ō·Äżµ Žøæ»#!ūĶ g ”&÷ź>§ÖŁÜ꯹otäł ÕąĻłŁ®ĘHļk*ĒųčwĆ(Č Žź EģIčOģČx.ÕCėü¬0’HČć'Ń$ŻŻåŲłžė"1źæŌ×ü/ŅŁ9·ééå¶£ ×Ł 'ņüšóaėp£ ń“’} 'FEŽ\6čņ ¦ąUČ'čęāļÕŁ  '’3Bš"÷¶óōųōL žõĶ3śåģ"Ō Ł¾Žśō ēĖöķų•ķ$śąņ(ģŲÖń'3ŠŅ׿żųśÄųŌķ)Ō ĢÜäÕīų õž 0ģūµé*ÉĶ źųÜä! ĶńĢ·ŚČÜÉŲŅT <'Õ.׳Ö#Łūó/+ōžę%!,€ųāīūń ķ4śłŃüū źä"Ż=0* 3"š-?Ņā¬īOŪ‚ėļŌ/ŃīžĘü•ŁǽüąEõZĻ79TJŚ!7Ņ‹ĶĘšźŁ 7 óē)( ß7ÓĪHŲŌ ¹ó÷ńāĻ7żó ¾ņī!ĖźI ‰ 7$ōśöńžaĘüööģśĪąéū#ī3 1÷čč!Ņ ¾5Ņ(ĄqēŽŪź8ńł“².Ч8 ÷õYļ ö.) ŁĶ:Łę4ń)ߏ~Ļ*54=æėķĻ3öŻŸ((ž¶ē0gÓĶéŪģēBtŃĄ×Ń2öŻū®Ś æėŻģ īĪ&Ō å ō=VB=®ū™ĮųɶÕ8²ōŌøČWKī½Ö,ßü×Ūģ×Ķ,łe:’“‰į¬gć ēŽ@ŻŚG²üóų1¤ē öūßå4Ū ģ¶łįłŻśļōĮ’5/Gõłœž :Ėś²+ī*ŚG¼FŹK!J  F$śčžŻ ķō¦ččČńēęöėżü+õEļ &÷éėūźėū üĒ"Ė!  ²ćåźų öė-ā0 ģķŠżź’ś ų,åäņž %!Å Łāņæķü $źē šŲ 1łļ*&“ņČJéÕ>&õ«ä ĮöŲśÓžīł; /üū‚’#üģćĻŃčöé7é0ęį’źū3šö#ŲųŚ9ź+LļāX,ł*Ō0 ņźęĪ)įņIģ)ŁŪå¾2ü čĻž’ń é'õ÷³×ü " ļóē 2ŌņŪßŅ7ļ“1,ųļ Ōž±%ė’ķų.!äż&ź ū0錎V .ÕėŚ×:ŠŖą% ö#š ń*Õįļēņü)ü$šįųäD+Lł’ų!ū" õķÜēŪćŲ% ń)2'¤Š ņ+ž”š@ŻŅĢ’+<ūÕā3ŽHį. ‹<ļ7ž”8%!ŌŻc"6ķšF.öó:7ö2U²I&1"žš·źøŪŹ1 ®²­IļśÆģ³ åĮbCĻźĒżĖ’ęłę9,:ß-ž+ Ēē 5ĘōķŌVśūW÷;&.Å/0Ā.ūEęĆ ·e)ŲFqĢā‚Ÿpō *ēüä ÷ģ#ų4Ōź €ū7ŗķöUņ)čÅ;õŒ äźóūü‹ūŹ<”löŠõ~4D%óāöö‹ļŌ’Ž3š?ßńC$ ° %«é¹§ ÖõāöäŚ É2ū ć-:4ļČ5+ž&ķWŌ\ŲÓĢȾ×’ąćÓ!Ö$ęµõž,öņLšéĀųpć!čģźˆĘŠ3 ī.*é"ęäŻ PĮIŽ N:žāæżåō #žņ/éū ī@.ćėķė²ō ī=ć¼ÜXö—$ĶÜ*ķĀŁBÜģĪł#="āē™ķå; @×Ę6³š”ĆīŚóéBĀIA×B%ĒåßģĪ%-žä>(Ó /č§ī (>»æóAĆCõOųūļ2ęī !÷É “ķŲĻćõ0Üżšł(×īF7ś é­ķRōī5łō1ö4É[4åźUżļųŌÜÖĻ9čFĒ>ß &.’ÜęmĶ+ŽHēžķēņė+Čå÷ģŪž PI¶½’ä VŃ’ĻŁæžņĪŃŁä_ąÜŠų,C+š 6ąF®*łłČš®ū<,4¤-¤1ND*åėč-×ń#)6I»¼ļ Ļ$ ž'ī&ĶŻŌßį’2]śĪ÷ŌčČļś÷ÖęJū"ĶāJķŪ#č óūŹ÷ć]³É)ś$ąų;ä!× üē{¾ó #S”3=ÉČųķ Õ3ó “Ļ)U.(āÉ1éęŹóŃ@žŻÓĶō ŌŚ0ąŚõé č’æ  ÕŠ9)»=ų€ęß ī.<)ųŹ5š32"¶f0Ü÷L ī±ó;śÕe'Õ/¦Ł żŃ.÷åÜ+ä Żóķßųøāæ"”ńųA (ėģē×?óHē#ŁĮéł’Kŗ«< Ų’yķ' ĪÖśV źYą¾üOLüļßžė))ļžē#!)ŽķF=ń’!ą ēóŲžĢ  ōõ ĻęļīŠõģ×#ūų÷ęū"ÓćōķåéńĪņņč ¼¦čļ0 ö–ŠöśÖŅ!½× '"-3&#Ž +ģćÕöåś8Õ½ė  ÷śĮó ž"żüž)Ö+ļč+å!ćÉó­’,Hźś"ńč5 ÕŃ-ļčRšČń¾@׹ ÷Ū ų"öJśæöŻ’ł śćéóüģ>4Ėė+ķš6žÄÅüć+1¼Żhē:ų¦÷‘ ōŻ@ń"Źż#>ņ8"ģTÄč 8É5žÜåšNÕ·1! >čÕśöüT?(«\Ś ćĢģ&éAņõÕŲ,ó¼0īÕÜżĢ,Žż'Ķ ģ$Ļ( 3 ģę/žšŖūŹõčźBä;ü– ŌFé +Ō" ³ō³ „ļ(ĒÖL"äH Łüś²öąEśįĀ)'õ3łĶ¬ß ūöīĪō<ĪŌŁč÷ėś÷Łćß÷ųäąį$Įķ ęĻžöžīT$ęėāŚšĖé1ČÕ<&ķŻ’»åóąūņķż÷ńśŚ$ė:²ļ#ģŲÜĖ’ų2!Ä0ÓėŲūėü5šßäģ(Ē&ń÷łńžšöų±Ł“%%6ńąßš&ģńäüõ+éåķGMä½'ķA=ą ēµ÷Ō&łłģ , łźé'ēŚšłśęąJ4ģö+ ;’ŲÅĖēčūSŁÄ/2I†÷õ»Õõ½Æü0Ńłģ'°ĶŁöČŻŻų÷׊čååņåęÜč *×/äņsųų%å" Ō8Ż (Ķ1 ü=õŠ>8ūźµšČCįę“ķóāåų£ī')æõģäöéūśėōÜāåäĘ Ų$'ęMŌŚ8Ģņ"čXĻćüÓō'ėģĮēŲEõŁŌł®B Ł/čÜ ųCģ1īč¦äļłņįłųēĒ(żŠé’& ģīĪ.õIč]’ é(×ģė><'1(äģ» 1Ū į8į ·ČF°7šD’ēÉįčIłß®žā¢ėĀē#KæÖ9ųUąłżØõ!ŚåĮN0:=0å>č*'öéēōD¾Å1ļūWüŃ'&ė !ÓßR*³æ’|õ$0>+/8 CHó棟> Ćó#+ĪŻ ēJ0ż/õÉĀGī ÉćļģŃĪäņ% ōAłĖöŪ&ķC8+ķõļŚXįņÆāŽ ¾_×&PśńĢßźŌ÷čńj üėż6ņšQÉą-€<¶0- ąŪ€DßQ9&“Fł3’ėõ-%ļ/ ēó1ž.I¾4ßҶź÷ö)*&āōäö ͼLÕō·$ī!÷õ£ę½7®Ī܀Y»ę'į)&ŁŅćāŖ¹÷€Ś- Bė!’7EGöņŻ#4į&OūĀśWÉą,ō ØÖóą:’źF9čWÕś:Ł*R&"ĢĘŚĮ’ŠKå)+Č @Ėķ?ĄÜ.).śņėŠµFĶģę'ĘĪśÕŁé ½ Ų7ųÜ:*ł[Ö4'ŻNæÜš-%ĻŅęōȕ=÷" øō é÷ŲßĻ /÷(ū µL$dżLcé£#"+īūųn _9ä>4öī éš^0āółŗ %.ś‚įģ=6¬ +FĆĶļ$čAVć ŚT'-GĶ™’Å#*źP 3?Ē$čõüū ģēó-! ŠŌ-G6ū[żœ/ī9/ųźłņŽć.ļ 0åź 7céšųĪķć ŹŌ& Éę"źXØ÷8ń÷:ó¼$Iö÷H*Ńņ Ä@ĘģÉ ŠÉī[ $Ūßśżžõöų?ēóŹčüBķńÜėł#Ā%ž’JC,2= ?3Ҧł!ėĖÕ ńēŃPūŻ'=čėA÷Ū ĘÖŚóńģ*ķ;óūĖåßś Ą)ļż"7üó>ßćż÷ōę-óŁ"#Ļ#Šģśé4ė"Üe˜åūų’Éą÷'š ŪŅŪņń ŲöÜÓ,–å³<öņńV“’ōеÜļŃ5ģžŲć/šūł$ü0öŪ Ń3Ūē'.bé!­ļ'Ć 7ĖóĻ Ń÷õĆį1+#DŽłŪ5Ū0śöäŽWĆķÄ%š¬ĆÓ©éó6!ć’'žč7ŌĆÖÖ× Z<ēøöłé(ķ,Ę6ŗāŒśž ģū2 é ŃÜ3÷*÷4·żśĖ/5% šįF€.ö ŽŪņ Apõ÷2¹°ć -+łņŌ3"č¾Ģ%óčŁĆ×ÖåÖ謟’ńe\Ā6*Öū":ėPģŽīįŻ.×Ė*Ųš ŁüČ£³äė;.ß­lŻ"ļ :Pō¢łļ.šńŪ¦ō»äõš+RėŽ ėļžK5ž;¶üüåĒŻķā&Ćł¼%ž!9’4ēŲļT ]%ķ’Ö 2 0ēŽ’2(Ä÷ö;žīŚ;ąĢźĒśå(0ėų4ņīōćą¶čé *ļć*ååłóšÅŲY"ŃŹÕń2ėó,.ņčū= /ź "Øėķ×Ü.4ļŹŪ× ˜ą]4įŚö2D§­ąķ¾"ļ2ŖŚŠ3Cź:\åų¼łū*äł’Õ€¢÷TÓQŅ ōŽČBąņ|Qžž‘ŃŻ1 #łåM÷WóÄQõ –Q§Ķ*ąŲŲuÜīŌķ ėüü ’BŲ3÷šŁ$™īć/ČČ$? ŁUŗöĆå;ćŁ6 8ŚV6ś å;ž>š*ļę(ų‘æŪŽ ĘēQ]ó=³’ū*ūöėņ® ŹĘļŲżéK!ö"PķŻŻö66Ī+ü8öńÄ@ę ’<ÖńĶÄó J/©Ņņō«"ūŻéÓ­ėėŅęüöÜ“4ĀīÄźøļāŽ4f0BļŌĪ÷żō E*č"Bķ8$ķöŽūė9%ś’ļöå²įō+ń*³ Īėšó'Ę 2;ś*ü÷ńĪŃčAüTö2ēīϼō­ <ļdV !īć>ÜŃÓ)D²ś-žē1NQĄ$ń1šŽIē¼€öęųØēīD(ć9ņŚōĶŌźQöģžŚōę'9Lõī4*āå+ Ģš'ēż#$šXéĮ,GöEĮE“ ~’,ćP,åöśŹ)āé†ā"fŌ³Iē*ĘC1Žś į'ŽŪāžēśźįüšĶčĆżŲ+żČXųĶ+ ŚīÕń&Ż’ ųšÉč ģļģģüłūA ķ"ńū µżēōŁ÷+ńóń"Ļōļüī ū &Uņ:D #ļ 1ż%  ąńśŻžł 4lź%ī’ģė1/*ļü"õń/ķńŁł4ėģü.Š śļēųž ųć’āīćļņčś’ķ"  ė÷ōå’ń%Śēź ź 7÷ ś$ žō äķī õ ńėXś żŗß’)-ųęęž Óõöżķü!÷ žļų’üīņńēōŪ "?ī ś"Õ 9ņ Ų¾ķź!ö  öłńāģžü ü ÉźļüżüšĶķł÷ųåä,ėš õ%Żķ*ó ń óčģėļŽ$ņąāõķŽŪīńžēģó)óūDįī*ņ ā"ćļ ėšńŻ’ š$łõžśŽńÅģóžäņÕAōļį ÓūŽ ų÷ō’ń’’śų÷ąļüäś’Üōś ćńęī üõīöõōčćīņēäōķēć óūūöčÕž’åęźłö%łöūķ÷¦å ų ōīüßńēļė÷ī2é āóŲåšņū $GÉq©ąŠ×6ĪJ“ģģļūŗAŽjäĘ^#HŪ6ˆß«(Ńč£śŌ8°ĖĶėņl;ćś ą$ŗŌ<ŲųćOÆéžŚĶāßÅź c1įdö-¼ų.Āī •Å£Ųļ—įŲ Ž ĢōūąŽÜ’źRž;/½„=å ę6āÉ~ņ K  ¶ ÜĶŹ:3ōüņ@ ]€ŻžBI/µõ¶Ćw ó=š©Ó‚ؤC Õæö/ł$æŽēßó9”¤5EłĄĒ½³ü/÷¤gŽ õćäß,ŖFüżū'ĢJ šż.Żóš Ź]Ū95­YŻ&* öä×ķüé†LūōæĒÜšŻŖ"WĖŗ-ĘŹ#~ŚYņąļÜÜö0łļC ĻļŲ²9¦ē¼KĻG3ž89Ę×Öš'éõ@ć  šõńßęęĘUšBN³‰„.ČöéD-(;śćų®š ŠŃŗ³€©(ōų¾Ź^©W—(ŒPų Ca¾2b-vX®ŗ’Ǿ¤3}éĒ ė_€äŻÕ5#jóū×ģµģŃÖÄ/ÕWĄ €ø};Üämg+Ł(ĮŁü č„€3&õ:ėÉźŠūąK7ņżĢ č8AĀ<1?TōÅÜP÷,÷āž Ŗ®÷ėąņ“’?ˆž¾ü՘˜Ń&šźJFV”U«°¬Ł<+J7Ģį3¦8;ܵń-4¼yéÓīG>£ĪŚŪ¶ĀK×v%]_Č9ģWh$ņFō!é æŚńÕA½×żƽŻŃ`ķ'ė>G¹įŻ3%ŗ€µKü³`EÕż äź™7ŚĘŌĮé1Óš¦yįUŗæćū]%Óę«:ļUü<²ģäS5éŃģēŽĆY".ž:2+ų:Æ(Ų£.T¦½ÓVČŲsÕtė 4Ųć ąß’71^ēŠõŪłę&ū ąĢįJW `ėŚō+ŹĢÄņ-Ļā ł€čßžö ¦nÕ$1ół ¶žä0§ųō+ĶÕā6’ū%Eīö5ó.įŪ’TŹéé4ž4¾ČAÉłńĒćś;ß"Ä ®] 5īśŻĢ~J łłæCļēń %ECöIœČŖ(zž"’ļū·k·µłł'Jö»īįČäIÓH <åģņ g’JߥČ-„äŃÓˆØą‡7Źļ".×#Ā>Æņó éī$ä®Üż’!āńķżČŽłĘ•Ī’. ģ ė3Nę׳ć0Īß’¦^ ķīā»HŪ"üŚ.ņ“nÜ©A¼%ėäÓ$ü8Ü=,Ī™$īHČŽß1'ńīī óYł-īBC;Õę'rŁŖ%ė9Ķ’,Ė:Bü +ō1ŚūöJ'Ę3ܶ÷ -ļējāēČśÖ[łD&¦ö#’ę84ļ+ųŚć5Ó+Ń*Ā(ūŁIńČ­Ž,9>ęSžå7MZZ5:Ü=÷”Ų÷ī¾9Ī% żęŁÕƒгK3+ Ö$ݹĮßūTÖ&ķ·9?Ų—äA­ö é€)0Åš/äg³ĻēÜ-V½Æ%ĖŚ ČņI!J¼ź«ä6&Ņń44!üŗ “ų0üäČŻ’óļѲŁīż|św;„Š‘Éė1×\§üųū, [ ä¢ä2‘ķā$,źĒŃÕļÄ/YńJ.1ų’((jüöźōģ]źū ß$ÓŃ*ף;8 NńĢ-B0ĶąY:ć’*ę’ū§&/ ą "ēĘū 9Rģ’åķŽéćĄŪŲQģ O Ī)ī ÅźāEåžĆūŌ$śÕ? #ļ ®žĖP!$Cē²ó&č|9ĀŽJā8Łūśöī% šį,ćķų@Õ±/ń ߌ -±łĄ*/ł3Ļ>N Ó½ģÓŅż éżäŻĆœ×ęą#Ÿ­UĄ 1³)CßRš)*ĮEżŻL`UĄ9ŅĒłĆ Ūjļ"Ģ€ņLP:ü¶½X1 =$«žL¶É Uóõ?ĶÅ^Ņś(ļ"ųŲ )K08ŚKņüߎ!)Š\%„ś /4žśś:Ć'ą”3ł!,čŽ* Ł»äżęĪ$ģVJ-ŚAČ»Ęć»ļqÄ ŗķčĀėŻ¼ĪģałBÕģP-HAģō,é"ß ę±ė"D^æ%ļŗŗųJ‚Øķ.T(Ń-6LŻ+9Õ¾ĢךƞōA3u>*čėĆ0uóČį ²¢Ķ Z>ńö4':ń ę‘%ń«žžA&>°Lõ1Fķż½4ŹõŪ FIg1Śä3—0ōöŠŅ<śżņß’ŪÕ 35 Ż!1ł%ņµėīŻęž“ņģzäõ½³ż²ś,^#,$’²é Ģ÷WCī'ųF?4Ś89͉ż4£ĒāÅš"čŲę÷“ū;õóžč°=’ĄŹ<66 +ķ1/łEų,łHõAĻ?ńJĶżg÷!ÖČ&õŁFńŲś:hFš;ͦ ŗ-1åżA"! ģ(×=«;€AĖ=ü;×2ēųüłŚĘēņ"ō¾ ķ²ŲA7v+’¹ńSĒŽ0Įģļ Ś#Ī=(Rö%ēŃÉūךįōŸ)ēS šŁō2«Ϲ0Ģ7īęęW³ ÖŖ÷žąź½)Žćžę’eīō G²ż8(·Æ0ÅõŠūŗ äŗšHšžāå+Ķ4ü‘Ųš¾S2¹;¬ēč'¼ĢfG Ÿó!ņń6ÜźŌų €5æ&ßüKø1ź*{.%Ÿ?9Ž!ÖC°½ŖņÓ -’Ö ? ’"%ŽŚōīŠßןŁ7ģāū×$ÓCåÖ")1 $źēģņ,D÷ļč-€>ņ;$@3€FÆgēĖāŹ3²ś?Ęł"ĀąśŁBū8ēj3 Ī/-š97C-*żÜ;¾ö -ŁÜ辿GŌ鹉Ū~č»į ¾ą4ŌąšŌģÜ÷čDĶõźČ¦ō†żóĶͽ½ÜÕē®°ŁąA+ū((ū.ß"% ī’°šE’1ŚÖw$OvH ¢ŹŲ>kŻķ² ·4Śõź2÷üV`£Ś©Ää€ķ0žÕ~źģ½0ŚRĪĪ ¤ę@Ū­ś:›(²ŲĻ÷BĪõD€źF(č5Ō.ÕŪūÕę Äń,!µ±É4Īģ4¹ńŃć* Ģć žōč_-1Ö ßG’t×ń ė¦0æÜȉīŻÅ4ŃÜ®LåĘõę  Śöҽ$()# õYŚF5”ĢÜS5ė†ę³ŹßėDģ#@ć¶„čšßŃ}€$¾€äN=­% 26(A Šā€)ģč•wÜ-“šæó\%ŪÖ;ķźĶ %,é ĀVŽŪž›&,¹%~FŹčŪ=.Ć––ĮŽ.Mīŗę ˜:=ūaK€€Ū!Ł€ĘćöŲųG ,ÅÜ4ų ¹ż(ē ^ł 1-¹½,Ąh,?›×GĘG1`,)7 Ī9ō’|ižé¶æš® ņ&'׫®Ó¾71Į„99ņūžÄ#żō9€ä,žģÓģĶßń›ā.ń,÷4ŚŁ)śRåŠö~K 5ßēļģ$Ö4TzD¦ 5<Źć żŃ2ĢŅB¢Żįō ŚÓ±ĮŠęü'iĪ’ģĖĪD/ ķŽ÷lĆŠŪŁāV Óń½ Kö½ų$ŌūLŽ ,;Ȳī?;,AGéųĘŖŠ9ųæ¹źńńŗ(ž*ņs'Ņįū≯ečÕģ Ūß4éģśāö¶)Ļ Ų',2¾ķń" Šę%.šå¬( ó&2ŁLĄęāüŃ'ūóķī,õ³Śž\Å(źōóüIß \ķ'å¶ėšćŃ5;ĪžĘęāų„÷ź ģŠņõČė’Ś £,šÖ°@Rō#½ł†× »&ā $Ó+ö78žż¹õż-čÓ4±ÓłźČī)ą ›Ūł.= ć7čń÷ƒÆüD4;ś÷ Ųļ6^ę8,śų &ņ<–]’żģcļĻ×_H˜×2ź/ąŗó- č@Åżć:€Č1Z\X7ÓŪ/ŹŁ÷@MēcĘĖŹŚę0Ü> ׯ"q Y/ń¦)ņ#§"±ŚŲ–9(ų‡ä0īā<ņŠiܞŪ×)›©€äĘŁ* ķÄO=;JĖö95×ü’,Oæ)ó+#"5Ē łęł0ǾüŚ-6ó(ßóÉ @Ų”Ś É€Ż-2ĄČ īčķߥjæüŹ& õŲ6 _<‹:ņņó49Ų )ZķžÕĶ„1īżų*F& æńŚ8/żž„Ä6ąÉ5Xļ Ź4,éļ ō# E Eē¼½śśŽ G=ū¼!žķ0 č5 Æņ<ÖE&ßSŽļŠĖŌ+ŌįŸÜG¼ī6!ž+²"ų&ĪIūź[¼“䣿ö•ģ½f ńÉ ®ŻšŽM=ńöńūāĒܲóą3(żČķĶ»‰ķ 3ćąž$R-Ļņųčć'Ć$Ų½hńźō2ŁęHDń<ņėČ1Ńą[  ģņ ł$ ÕĶē3į9ė+Q&׿aŅųĻ/öēŃĘ×NŹ įRõėŪ+WĮ8KØčę>-Žłž*ėE čīÖö<į)׎GÜźęńųüćÜ 7Pęŗ%HčÅ]€LĻ]<ć ŲŖéŻÕä r®ę:ŽėŚśĆ=Öāś>3-$ģ2±5ń+śū¼j*ž¼ę“4x źE8ķÖ/Ķü3ó·Ųą6 Öā> ņĀų ׹2>ĶŪÅų+ö0’ 8·åš+\³G 6Ėä&6ߌ^ĆŚĶAļ'öź1$śLż* Ļž³"Q³ā~»1ĪZA4!Iķ9'āéēČ:KŃ $*öąĒ’ Öģį÷BäĒ<åšÕ’ļ =ū$Żž"Dö+Ųęüćģ™ļÖ äŃ6éŪ×ö4Ļ1ĶģŲō õ¾!ĪāūE6KśEõĻß5ų WŗAōé,ćŌķłą %š!Bęķó*īś÷õä’D!óč[į Ōļ×öćūÓķ!ÕŅä ÕTé%ļóżŌ@+Aæųņ9ÓŪ÷4čéę Ī\ś'ąÕ{Ń< ¶éČČ"0 ’³å5¼ščÄ·%… ,É(ŅĀ"÷¬Ž–ōAG ź¤ģóė’®é$ēóÕÉć*¾ó œ”!“Ō¤×ÉI©ßΤ;Ąš Ś×Sś. ĒÜ’’3üÄFŗŲó%*I|< €¦ž īéß8ź×9 tKėR»V &Kļ  Äj’!ÆöųŽ /`Ÿōv)?tń|­,Ų9" *Ā+>Yƒ½č?éŌą µåK9Ģć±F č ÓÜō×Į?Ķž¦b Żc¬Ž³'ä>šÄēäŻ&N.C8Š>Óßģ;[ŚSĪÉććL54],)Õ$ŻžB±ŲŲ hćä’¹é)Ī0łÓ ķ33Nž4ü6ć ^»ī”E=ČęĢ [;ė‹5ŪÕÜ' 9ŽK J#¤/Ö#ęµ/ 6Īķ Źż ļ¤ÅüśęEāÖ/ĘNžī"īäłćRó@”ś –ѱ2ĻŅR»=ķ8ęüö€ņŻó—}B6ś#¹/ųöŲ*³!ąiłß÷žL÷Ā÷*÷ä$õ3ųõÄJ8dĘ  é逜üųšā6 Ž$śą0,h€'ūŅ q( ’łģłūŲų©»ķDŚ 4öHĮ Aż X 5Ń3ā ,~ńÓ=%öŚĶHņÖ@ė£ēV ņ„ŽC™śžņ6 āö<2łļūŹ ćhł½€±wø$Ųźöž(ŽO ÓĶI’™”?üÖ!¶¾ć@Ę€ŠÜõ¾0Zå =¾ Čö’Źģēøėü~Ų6į%µ7 +ąŠÓ]żņžŻ-Cį€ęE?ę EżČ2Üų°ż&Żļ¹¶įD5X6õ¢ @GĢłāå›ęyž&?Y !!J¼ōp3)—ŻŅü½ł×!ŪÕ/g)*HÖŅÅāŠĪżĶé$^ż@ö ß'’ē(€ś×ńÉ@ż©5ćū ź[źQéķL@³żż)3ķ’’ģ.ź4Ģ»šWÕžr Żå—æąÖ’× Ź)åĀ3ź 5Żć Č+ÉÄ•Ń5ZB/,F?Ż^ČÜ ā׎Ōęóż&Ńėą„KĒZ+éåg¤š1}“ЦQ=[Qȶ3=÷¤1ć ŻĖŹŪ¢ŻąŌ ņ2 ½ÉڐÕ).śŲU€źX¹h¶§-EōÖ:ńŻā¶żļ’Å7^9ę÷¾čĀöš=©$SF«,Ē KĮ‚æ×ėłŗÉŹż2<<Ó\r«¼ō’œX·ć6³īńT ’PźZį ū2„Żü ńüŅPJGėL Ś€ŚLŌ~"4„ļ·Ļļ·¾!Ŗ}ś8F+ś5Įų§ŠJ‹€Zę4K÷ų^Óę7ę­­óŲż~)”2'ĶŲ"¬S˜A¶!>)õ*¾<ńŻüčI)M*ē87;ćkź÷1ķž ģ#ēńēį§7Rį’ŽĆą ņ–QE?ņóī%½ó™Śļó’¾)ĻēéŻYÓ##~QåņŪ»æ]Ÿ< ;’ĘÖo ÷Ņ’1ĘĘÖģą2¶ ēhćKŁõž>÷AŽĖ!üäģ0,Ę:ŪAQżNź#Ėæ¤­Ģē¶ēŲų×·ÅöåK ņūźß==Ä„ņņŌfŠ÷“ŹłÕ,ė¼ą71ŸäŃÅéŚĶĀįę'ÖÜłņłž=.ŗ(Āä«9؈ö(öĒ&¾Ü.šēźĪ8HÄÆž*AC¢0¹Ź-ź.ļßģ+Ż.Ś5ųśÜ¶2¹f6 ń.!…8AķĻŠ'ó×!ōČõ’?īłĘAŠóåĢōņŚžÜė*čšZGåōōŖ é`l¶ńéą7]Õ“Ąé;Ū5¹4)ķJļč¼žć'(öĻ„‘ūöüÓVŃ£ūk)ćÜÓćü „üõ‡,ą ē^šē#Ē’Ł+'åņųäž ČļBĮ ++Ē-“7żõļEkēfģõŲ/ßÜ ’怿4ģL5ÖÖ<0 üŗ.žįż<ü:éW#ē:ņf/'Ā X>¶į1ųó85ķö'Ā7Łą š÷ńĢ9Õēņ š ܟÜ»4ž čwŲ ž’$č$Ę×2*ü5*ėń6BŽĢ*ęõ $B9"ѱÓ'ä¼ć¼öÄønüżééĒĆļŗ!ę³įęžˆœ膀.÷-°&šä4Õž-Ū䦿Ńę+śļ<ŽÓHÓC&Żū;¼÷!ćVˆM›0»€Ć<¤,É‚ Ę÷öą5"åÜ[äĆŽÄ* 87&óĄ½"J’ ŲųAē>ŁĘ3ń& i5H4ü> 6!’-4 Ö¬ .ąĖ źįÉ! dµŠ„ņOČŁäČ!ųÉŚćŌåźā“öÕCź īé€ņŻē[ēÅEÜŅ7įĶ ĀŲļß2ÉÓZlTŽĶęĆķŌ ō¬ž?O’ŁĘ`é_Gčšöt€äõą ś&ā,ņ!Aµā ÕGå?*īĒWO3.ņ—¦”ĄÓA€õ4ēęĖāė ņč‘€ģEŠÕų,"§łĆł½Č¾)˜įÉF Éß#8%ņÉū)äČ#€ąÜš"ģäŁ "Iāpń§ģ0 üßõ=*7Ē5Ógī*&;ڐ#Šņßnō@šõ0äųōć#äŹĆņ‘=æūIÕčĀé3ĶüĘōÖėUJ ć$ĀÖńÕåŚķ-ø€FjķhŻōå ĘŹē!ś«įß;xĖ"¬Ņŗį3ń€ļńń’³‘3UĆ»°×Ģē;µ,ć÷é Ü#ž×.:TaÅĀÕ9$ł÷eżŽųĖŽüŪé 6菎VÕ:žfmę“ōü ü2¦Ū­Ųīī ż€#ųšŠ›Ēģŗč0»ćŗž ćķŠė¢/į÷ĄD Æū%łóūšlpÉ? 2āėŠėéģĒsüŸŲ õąķÕŪןGŌß Å‡÷Č%# H×!0ŽAāŚżć½L ;ž¾žß óĪÕ¶Ł 7]Iī,Ęö÷T °õōO >,.°ā  ģćQīB%ųż#“ńė)(ē %5t4%Ķć^(ßä1ī &ģŠ^&õŅėē*ÖLÓģŃē+ń Ē] bDŁżĻĻ*’ŸŪŹŃ €,Ā(ćE×8·ųéĻēėŠĪ)÷>Ÿ ĪÕļ@DįT.ŠŻ1ŚæžŲńYū!(ż*ŅŪ¼ŚŃE x ĄųĀ )= T—ä:ŁQY@”ąÕ-åčŠQÄśÉĢ÷ćå½ĢūÜń66&šĆ+Ä8ė8%Ų .ļś­®1ŽóŽŽŽæUņ,3½"æČ,ĪĖIšŠŽFįī€ĶŚø éłōė@Ō, žHČc#“Ułł ŌŲNī“ßŅķ fŻ/·6ūĪ.9ŪJĒž‹”€ųń?"ĪīšĄęėÜÜ(ļ!KĮŠLĮŁń·÷ģhā óĖ&Ļõ÷ ļŁÜ²ŚźŸžćŪūZū=C%Ą€©* Ņėž Ća!æ<ō Lŗé–žŽķ źņ3źéųį×ü÷ Īü^@åāGžī6Ųü=4²ģ ä®FĆ !)KźŖ ś÷ļŻ 9ŲŌŚŠö=2Ś ņXÉ  # VĶŠž Õ1÷€Ā(ćĖ$żūŲ’ĶŁż5Ąń¾ĖQ&ßäRÕśAę,»ź(#÷ģ8n5ŗdꌧ²$ÕģÖ·³"ę9éöź Mķå6Ž ō(ųIČ&įģ&=Å+D¹!†łė÷ēü“PåŅóĻĒÜį*čA&ūp=d*$ Hö L0ęŖÜ%ęĢ\[ Ž5ūAöŚ5ųĄ@4ćj Ü%÷Ū ĶW‡ńŽ-ł°°6ąź)><ēį€hŽ%ÕMüŅÄü“0;ļ;ąŽ *ųÖūåĆę’ķ ń&ł·ęī³ņž¶ėĀūL2q÷ūŌ’ä+bTĮ95&÷,óś/Ä.Ł&€čÖe ®Bõpü ÜY`čŖÅö5į$Céļõ©  ĻŲ ųę"ĖŲJ+,zāScŽßłį,܀Žē+Ęi+āJóōšµŲĖ6•Ö7æŗłĄĀ ± !āēČżC ÜŁ÷ šš ś!6Ņö l;2ĖÅ+2 (śöGī ŌĢÓ ‹włżU¢a2/.1Ņ!%Qžę(éšųÜÖóńQ䳦H& Į”ėE9¤ŠśŗĘų½Õįś ›£ę÷ēź.åŚĄX7VŚŃīīčąĖĪŪŲčS0üųX„ųøłC$żł)ŪDß6 éB‹(:ŻAŻF6Xń|ōå܏ėĀąŠ÷Ą’”©$ šē˜ 9Ģ3ņ÷·ÅÜĮ¬ÜĘ4(ł»/ū!UCŹ4Ł2ĖQÄćŁl’ĀĘēŻHĢó[² ߏßō(óäīūĻŅū+ŪįNüEēĆŪź<¶2ģł’śĢāHēÄJę<ÄŪŁB¾’É ā¬ĢČčž(RBA10$%@ŤÄ%;Ÿńķ¹ å(?ĄėŅį5©KĪįķ?ÉÕķłÖ )é%8ö>Ž %Ŗ®(  ŲÄāÉŃź0ń+Óōń‘ üńņгŃšĄö7 ¬äēļŽ2 õPųūģæź!ķŻåĢĪ-jžCņæ ŪĪšŌŹ.(#ēõŃ ē€óĖF’źšž­®¾½Ū/é/ŻÄJ<=LĶģ/žķō57ĘģöōĪ*Ž!-ņó ’~1&ų¾5ųžV ŁčņĢąL9C{ČōāźÅģ3åŪhį9Ö;źĶē ,ūbä*żģöHmŽjŻ.!ƒ„6–ܛ 8Ź*ƒX2*änT¦|ŗ0Pw"~ÓÄ€ąŹ«‚D¢B;n.Üņ£NŚqr°āīü&ŁAżå¬.ž€ŅzøĻecI$Ń€ ŪO Ż€€]ŗ;”sā2uņd€Ø?ņ½€ A¢~=)ć~åėV©‡Į?HŌŻė¶€Kmjéü€ć#ÜšnMć1ć³Ü3ś×”ńń­>Uł_A-3ń 8"€šģ€NīļŚĖ' €Ķ¼üĒ5ō9Ź>Ć¢ĒżÜæĻĘÖŌņłĒU)ķ 9<ĖĄō×Ō żńä½·±Ł5Ķõ×ī>/6įCe C?ź.«¬Ķ2ŒüźŻęÄ?0ŃśF½ż?/N“BøÅ‚(Ū56ć€Żī°Źń;śķēāüÆÜ ;.ĶʱE Ģłå>Į59óÖįčY:ĶBįѧ°øøĶé}ļÆėXÕń" ĆĻŚXźŸĀœĪ÷ü…ŠCīĪē:OżÕ2±dPÕ?¹żūtüŌó&ŗ. )ī$išßźŽö=H〠ēéŅ>ģ;Ō&ĒńWņ0=õśRNō>*ęėĶńi!īųįĮŹäŠyŲnįĆų4.OŠĮēEŸź†2%«õ#&) Śæ-1 ŗ±ķ&lü €ĪßēŠæņ½ł$" jä "göTĒ–žĢĘą-żŗį³Ų<ń(ąßGÖėš23¤ĢģÓ­=CėŚī‹śõäÕÓ0!łĶ-łVdéń(,čņÜŲęņé,]ōG°ķŻ.ęĮłŲęĢā6šŻė˘ĘŃ%ҼżŻJżöś4 =+?tå»ųųš×’źŃQßīĻ8Ķ6OõŹäń åō ¹ėķŻäńĶĻ鯫ģ4Æ×ŖŽõŻī6³ŪÓŠ ×&·Ü™ż oWĪͶÓķęĖžō :Ķ÷Š·ąĖڦł@«Łf'^ž,šAęńįJų ļó“(©ń-ūµė©ēķE' ½¬"ńD źÅüCķD“;€čØŽÕŅ*`“õE ģ:˜÷:ņįĖŠ+®É·Ńģ2HaÉG;Ć÷śźūkx+ŗeÖK šn6ʱžĖņ×^Öļʏ'Čß2÷ē U“!äųŲ®3Źļt -%4Ó(¬­ü-C•J<1­Š§Ų%ģžķ8ļߎų!ŗĢ›ŁūåeĀć Ė1sČc’V‚ķćņ½ūöųFŌöZ-\£mčžāŃ Ż.*6ēżö)ūķāŃž"»ūĀ-ģĆŅLź»ļīł;:L(ąą:’ģä®ē=ČÖĖ8DžßŠ%×óÜīĀ'«śęÜß'¤ÄŽé!&ŁėÜ@WĮ ņ ėHÜ”ĶŲ÷:é\$ąļēEšé>Łņ^# ļõāĬī%ņÕMGĶ&€³€8Ä .l’ Į½#ß:#ĢßtÜū6$čß*öūÄ5„õõÜīõ£ōØī¼ĻCAŲąėü¤ī\įvŌ€0”+éŲہßńŃŽ+4Ö!ķöS?Ż€ß !ĄŁź6%\(Ęöó,F%ƒ~ȧ Fł,ąģū’ ¢ŲŠ+`ÓŅļęćN’õÖś&CףŚģć½ŁĮŗ ¦dūū›NįUž4ėįÉ­/śĆŌ³ōŅĄļ~0Ü 2Ä1.ÜÕ= (5ćŽļąĻžŚCTņ&GÜ*0%ó67ŗĖųų!ÉĘāøą ÷€õ÷[XåČŌŁB¦Žé÷6 ·2Oį«.ķŚ/Īŗ’ŠMJ¤K8ūłė"&߀ĘĶ+%É÷ń«ģ³Śżčņ>ī†g-śFū%ټ%½Ć ū÷įģé€ģŲ5#Ā2ļ#śJ&ń˜’i'ÓėßģŽĆ¾25¾ī÷+#°¶õ»ņā>ń0A7Fū·Ä»īćŽZŽō*ÕLZŹ5źšHöŠćÜG Āö ä““3ø@ĘģcååŖŚ»£ ?Ö÷ÜŖ3Ų‰·£ń#ÖE681Å ņü°Ö¶ó™š÷EņcśJV3įč2Ś$3żŃģ9ķX÷Gźś¾łüဠFĪĪ4 H"3-“”JŗG” ,ĢX+ūåįżIõŽ:•āÖ Ņüķ[µ’ĒlOÄ=’Yš}ņSõ’ņĻų¶QÉŗYā•j"/ĄĘčźÕ“āĆ»\Ė'ģ:9/~cAݲ'šźÜ*ŅĢ#ļ_Mäē(<&Ē’ĘüŃ:7ż'(N$’ ō/`ŅM Ńźäż:ߞ)Ü Ś0ū ›Ē€Læ%ū)=ģ ę+ōņ30į<Ūźķį(ć:k ÷'ōēśūĄ(Óžģ ɵ üś7% W÷$'źóż+6Ģ 3ą¾'Żõ õ $Õ=ń "Ē„ŲūH$髜õQĘĖ =:øöč ß? ź¾ŌīŠ3Ę:Ć2Q&%F ÄüÕćÜķā›—>aģčæEFÜ·"/ģ€Fõ«“dęšń€%lędēęĢ)įĶõYMääūsń ½ŻØ&ö AĪ–Sü3óšß6żÓ©gAīēĮ<,ĘīŅ|&ĶļĆ„°+āj‚%ss. NCąš€6SŅõ Šļ"īK·÷ė>½c~Öę¢ĀŌŲč1÷7^ā̽ ö8ų’½OŽŌ‰óŲÄ%ķÆ˜l9éEóżŠ%yŖŅ2īœ œ-ķ1²Ś3HUžĪY7īč;ްµūŅ.UĒ×Ö6æŃčø.:( ī1Ō¼7ŅĪfęX’1'Ŗų.ŃąŚ$ėńkKķŗŻė2 „łR×oćA Ō7Ćü1žŹ"ź3ć+3ķū0Ŗ ?*SAM:»½€ļō  ēśqU:¾;M8~)ŌńN]ł#ŗź˜ą&) >=‰”ćŅź˜Vą=:^V:  ’ļßµąÖ°éēÕ0/87T/:ė§łļ½ķPYņ ‚:ܲņĪĪŗøŽÖ^,’œ€;± &%@TĪĘÓÜ¢³»ŠüžĻ ćŚč ūĖY*ķčŁ'£8ē•ŁĄ."§ üZ" ²čŠō.ŃB¼'ńZ°ęüN\'äĮ 1žŚķ VĘ&’ĮōśżŗØMläĖŁŅ!2[ >ņĢAć'Ļ(PāžÉ Ł’åłæ)§©/ĘVŪ&öŽ.ž ”ĘóP3 äÕ20Ł6É Œå6Ī=³$˜Ż0įąü ĒČ*ī® Æäܾ,ūõśčöŌŚ>·ų•łŌc*gĶ”¼$NßŌųō*ĻÕī/B&5Ķ ź«?ŪŁ³Ē½ē&½²-Ÿ Į@ -ÆTÅńŽyŚ€üā8ē Až% 1„ģń ¢Č¹G2öŌ $² Iįž/öļĒÄ&¹ büż Ü£āÅć-śõ6/ üō¶9ģ_<)ü{žźßĢę ß­ ōŽ>Ęän( #!'߯i/ĶÕŅ–+»õ?O ĄÖ@U.՘µ $Dó<Ļ~xWžšR*hį(1Ūd'²Y&­$Ļė"‚ČūŻB¬ņ»?”Źś8žŚń*4LÉ:å/ÜGū[L¬ä1¼ń>ÕŚż8Ēó€?­(|÷ō.0ī(ąöūšļõd!A#]÷DõęäѐB%ūŗś!Ż©ÓH%óįuįÜŅąϚ !ĆģšKš%ųYG’¤;Qę ōĢ+F€ŚäĄeĻHdĆń®ģóģ ØæßfF$ī-ķ€ļQG9’]¶ .ń°fõń dHē*03»é›’å€ŲÕūĆ +$Źf1żŹ*ŒŃ ūĻ\O' ’ā“Ļ ī*Ö~¼¾ĻOōdā¦ĻU!¶/0Ł-čįĪó’?³r©@ 0,'œč24€÷å’āÜUĢ-ę¼Ķ%Īę±€ĢZŲ·ŽżŲ#Ń€Ō ß~ĆĄ*ō[żļžēÜźDżżoW7 äÕAPÉ#PWæ×Ö(€¾HŌąļHé} Óé &ź Ś%«w’¹Ršėy ³žāG+īĀŁżkЧńŹėüį Ģ:óü€8ÄļņčÄDT ʰ#eŠé/a] \ÓłķÉÜß·ūÉR !Żś"ćŌķšl)Ē-śĀņ’0üąÆK0/KŗÄōĆ#} īųŲ, ?Õ¾äÉł°÷óBĄīķłŪśŪēÕ<åõ€°Ēīqø čW¹źŹŽ=$ ųłĻč9+ ÉŪ @5'ÅÆōÕ+č»ĘāŻuā’õĢUéÕé˵śą 9,ęūŅŪĒ÷aĢųōŅūźŃž zöŲ÷?٧&‚üXŹ*šÕHJŌ&Ŗ®ūāčå9(® ēōN 'ĖÉŃŻS§÷śg½Xķ>d ó!ī)ĖTś±Ł ! ėjŪĪ+ōā*²PD“-–ėSä7ķģ+ ÓüźYčČćŗŹź:Æ $ žöĪ1Jčzķ šŹŽ7ōöųĄ¾õ)Ą×ļ­#Ū ;@7ßäž õńųšāł ÷ń'ź)HžŃ+ć ¶ķ./ ź€)$ä+’V#'·T¤ņCįŌéņųČ óōĖ*jüņ Xå÷ '#_ąūß2×÷€ś¬®.ė =.-ĆōŚóÓČÖ?œčĆ@ŲĮ#6į2ꢪPņłßÜĄėā¤sųģń(d×Óęšü׏IWęĪų6 ¶ äū;ūų'5ۈ#õ(ļÅ÷шŅ(švēŽäq l Ó 1>õ¤ELÜõIüĪ­¤÷č>Ž śŽ€ė$?© ‚ käļ×FĒĻŽÉŽĖ³Ää½ą 'ęČßd-ŻŁaÆė9"»•ĒϚOēŽ ;Fé-!÷ %;ŌļńÅR0ēĮ- 7-šVŃč)*Œ²ę€Ļąóź·Ė«~ öš1čQ†Ż’"8 €.Q ß8;īāŽüŖ¹?%ē71ī,µ-*®"iäč<ĖóõńųšŽgŚõkNŻš6Ž«ś+(1Ģ$e2ŅśżėMźļ€×Bó§)ō<ßōĮKJĪZĄ’Ž2X Ļ†Bõ÷eā  T* =€¢żΜ’ éSķ ÓõOīEUHÄÓéų)$Łfć@źļ4Žóö÷B’ŗ,äCMA Ł.hū½ŁüĮÖņ*34Ā<ōü$+ĢĮĶļūM*Æßęźł8b+ėRC’ ŁŁW0š=Ü3Dē'śˆ0īėżėj@śŁ0 a·ō6(sŁI1+…¾7g÷ž7"$/äāšō) f2ߊēšŗ-üÜG\Ϭ¹') 4a&ń7 tį ¾ ·ÕÉ-"żøćOÜG’Ź×ŻE“īf²ųöĶēĢ ŚŲ?õŃČćVų'##­¦šį óžŚ/ĢżŌ€ł’×®÷U\ē€ķ&ų<^ÓĄ]Ł ųŲ6Jå/śŃ„4ČųżćLä. ¾ņR4Õk):2 c:ž»@īłß ѲWņ÷Ń0&',Š(ż*’>ņ»ļßōūéĘĻć÷Źœ Ųó.äųdEÖ ®śŹóņĪåśNū."Ż×āõņ¾šćūŅPš’Åź@Ņ÷EŚõ<¶åī0?óįę[ø?%į"õ<ōŻŹõvżŠ\=ö5-ÓĶ’Jŗ¼Öś żā1dØFū¹\ŁĒų 5'Ī6Ż%köĶĶ ³ųź÷­ĖĒ8Ф!šė1õė@ĘćŹPį ?²ęrź ¹é7#'A ž·ķčĆźł:šē%ł Šgź¶'ŻńóÜ1ü.’Š óß ßåżM/“•įĒ&.€É×06Ź*ąį¼ĄĪ1ę-µŖ?ó Ü÷ Ūéé"ÓģŃ>+ĮūčÓFę$ķŚVļļ ü<ĪÓłĪŚÕF&@ ƖģŪż’óϽĻܬ5­¶ßäņŽ%Č@3Æķ¹ é"éėóiŌG+š ģčę:ø_÷$Déą ćųÓ³ŚŚŹ9ē"Z.=0Č+Ć!ÉSšĻĻęīÕZä8ŻęūO» 䁏"ęC3łžķ°ŚążćåŅ#ņ ķ8÷õÜ ł] Hę¬!Ą#¤¼ AõÅ&ŲŠ ō“*ŁŚXńö+ō§0¼šśŽę &śNļĪÅėG&ĖٽŹĖņ'ģļņÅń$Žõó ’ī0-:Ö’¹Ōß’Tų6Ģź8ūu ųĖĖŗž%ųČńęć#%\Ņžūų,!ŌēōŻźķ&ōų+1Ū"žĶłü #’>Ų .,ŌO%żŪü&ģæ!MXäøŚī—8ßń 3äŃį¬ķ%óϲöV“f IŁ5­%š ņ KģŚš²éēĖ–ä ŁŚ'³2ČKęčÄų3Ķ--¶ķ钁óÓ;ü×.4,č&’Ö1ĆD?"ų čsü5Ęķén’€åĀ© ~ņū8åé­ļ!ć¶<=Ļņ?§ää§”?Ś»1äÓα ĄŸWķ _C!%Åyč UӀėłdĒĆ0æŁÜŁ(ĶÓ"ÖĪAS©}“ų×5#ż2¼×Ć>šĒü!:L¾ÖūŪź: 5“®ĘC³0õč1ˆ=:üüšĒačį1Żł$^čĶŌł$Mw§d …łŪńŻ¢Ō÷,żŲO¼üóęēŌžź˜ ą»źžäŠ=ÖĪó©ü¤45Ń1ōE/HŹ .=@;÷pYšģJŻ÷1äÖėć!ŽiÜ4ŗōŁŽ×1ĆŪö3×¶ż,ōģQĀŖåä®#ŽŻuWŁóA ż)Ź Õī~ąŲSǬ×Pü8" E ØĖ²­3(õÉó%8õSēŠėrmܼ(€ĻüæeӀ],ēĢ€ ¶ī*ŚĢš*+Š÷5ĪŪ 2ėšZ €óŌóßż÷Ļ?G%żJß7×"ĪSKģŅǦčč1¾ō äĒÆ¶ÜEŹ)ö"ĖČ2ÅĄÉö,1ĘšōŽ’DöńēśÄ ÄČų< (č¬éńÜå É Śē<įē ķƧ¼ņö Æšŗ Żś(5ź2(Ž,äÜÕŪFÆ ēģŹH0'& čĖŹż×I1 ēEėÖś"š bē¼Ś,V³Ņķóųõü-Ū šŻ39ąż-?éāå5µĪ;č’ü/ĢśšÅż(¬į ŹŲGīč éĢ$=’ÜŃÆ?ū’ĒŹģ H/­ž°jiÅ ż ,»Ž0ø›õŻÜłč-OAŪ%,¾$=8XŚńZņ\āF"Š4Ū'SŹoXø-!Ѱ¢®ü4SÜ+Gļ×¼ åømģōšó9Éūžņ Łīü"“V ŃBō•9¼ 05"Ŗ) +öņH½ļAį0ņH¾+é¼üÉæģŽŻ¹»ū•ü»3(ņų»Į qūź(@żłĪ";ÓÄłģć39ņ:LŪå/‹Ė »?1/+ö.Ģ’"ŲŽĆńMlŃÅļÓŌĘłéę9ł"Ć„±ÉIā. 6Փ×TŁ”d×,łŹ×ę)ü%é1Ń)b0š53/Ńē4$ŽģĒæéķ#Üą4ŪŪĒ!šūŻ0$-üM@é8ņųc’+ńłąū±ANéG•"Aé ń$ܬž²Śń(ž:Påō-N?Ū%š”õ$€ķüģYę@ü['!āeŲ"Ū„ūÜ-ž,ä ą®š³^>-ō ZЧ1&ĻÕ äĆ1Æ©5ś÷-*æśżšŽ3*ųŻāźł ļ¼óņåāėÖMw.ģīLńŪ*šSC ™ĆÖ Ęų 66äŃśė'÷ĶēźķŻlĻÉ#ņ 39ėłI3õö:øīł[ł=7ģĀDö3V>ݾÕėÓŁĪ-ų0#; żØ’M6XĶ’ēÆׯōėńŲ4#ä/‰ĢŪ›(šŚõ/'Aó”Ģ 5K¬6)(=æ1Ģ(’/ŪC*Ķ1BŹłbņćEQ½rÜS#VÓ¶ !ąaõņ<Žéč@æ³ąK߁98 ! ŚÉFڵÕ3ōÕ!Ā(ÄōݽńKÅT/YO6!ä>óŪ6"É:#ßĪ® ęéŲóčęŒ76ćźšÆ pä,ĄąŽ3ŪŠ 8§×ü1:[5X?TĪŃ9āĻ ŻÖėŲfXĄÕŚ/ÉŸüšž*&ā×īÕ ą^å@ō"õ÷2€ėń-ģųŲźźžFEāųÅLĖ ­D õ°4½›š†ņÖŹÖ ō,ļ(%äŌ†¾®  DĶĢęÜäŹÅćŗG»ņ ‘É%óŁ ņ'É31hŁ×;"µÕ’é)Śņš ńūś š&. šÉŃ×WĶį üęņ¤/@,4äK…ņŪ0Ą#*ķĀżś¬ģ ėńC÷ķ ĄÕ$Ń>CÅäe 58§ųīūī$ /(ŅĖ3ÓRž€ŗŻ  ņü7ū°ćē?Ź(žč=šb+=ąöńė /24š= ’ńĆĪ$ńŠģŪ.×ō,ž»)ģ_ć?öü;K;ā6<ė2ē‚*ąŅ< å&M÷ļćŠė' Éó’Åų 7Ä+Ģ#€ž “ŁA÷#$€IÕųžĢõł2’óüę$’Ś±ØŠ,Ī™]} 'ģ/ĄŁ#„śśiŠģÜHA£*ł3ā/;‘e@Ž&ŃĪ?óąĢ6ŽüÕü›ąQ(®„Üø CŚļC*ŪAŚžöó?ĻŽŃ Öüõ’¹CłE·TųS~D+öėę>żŸü&2įĖšS."ƹŁēčų#ń2®żĄŁ ńäŠG*#(Gō7 ćäŚīįäŹ~ÖĢ’˜0ķģ#ߌ֧ć5ŗõž:ėśģÓ¼śķļBē(ź<“ąŅńŽ1öš½(ŻZ4Yņų€ņ ąe łĶż#ī4+ķ» ÷śńcŠśķł?&4m#ąę!źŃ÷ž?så=,GÕģ$."ń1 6 ²M  ”*š X@ūüIįóPšYä-? żˤ8’ī”Į¾`/źŲ56<ą 0Hę Ōš`Ėõ2É’w2ūTü+ Cæ]:Ż YéżMEōłl«4BD“5»¾QX iüϽµA½Łß ¾śß*]¤(š~Qü‚;ił¶Nļó²6t„›5ÄŁ Źö'ÓDK[¤§›ē2Ž*Ćæ¼·ćłŖī*üæĘH i®M9āt#yTšHč¹UXµ2ø”9¶lVĻŽR”vD-åæ/®Ģ~eݤEÖŃJR€ ¹*ė€J¤ŌH Ė#,$«!czv ļśūÉīŻž ³.å¶÷ż|ężÉėĒ’ßüźģā÷4šūߊwK5GśģŃĆē 蟬ņźūżüŗŗćō?ėėįDóč.#Õšżłü­Čž/32°żÖē×ģÆą%É åēųSüš6T N Šć1DūČäł<#.ī<š®ĒåėĢü%ĖōAĆÜA: ėłĮŸ9ŠŲ#ŹÜ»ń4Ō·ķŽ =ŁĖ'ń×½’1(3Ū0µžųßēš3€9<’•_ōŠ–ĪėåģŌ÷©ēĻR¼²E×]¬Š.ź„04é³/õ5!)1ڼ.Ż %Eüł ßĖńń×É+U#Oļד!ćF0Ä7VŃēäųGā%µ1ĢEØėŹ(Ķ ('FA/ =3žĖ8 Ś3 HG3ż4& ×6ēæĶ B1Łōż 6å(é.ņ""/ŹódtžØ×ńLź  %!Pųō$ šł½C§šõę!%ų)"¹×šW0ĪéæJ¬łÄ,= ׳ēŹ?¾ ž;ą"åŲÓį’ßÓń,ķŗśņĻ8Dćłįü·² ę ėĆČ+é»IÕHq'åõŹßå æ»Ŗ;cģūŠš %ū¶' Øž÷° Ź_Dž;$­5“=Ųčü4­śxŻ<ŻŲ»ĢCü’ Āä.ÄļmŌĖļĖ*ųź:,Śż4Mšõݼ3ŌĄV%@ŹĪ’Ģ«,żīP’!.8ÜōĶü/ųEŗ ŁŲÉ÷ńdŲ®žÉ1~į-źļŌ÷CŚ×’éå2Žóŗ·š@’+AńüšFæ°ūģ®'ć 3ļĢó5µóŁŪż/Ūę!’ņėĆūÅļśŽĻ(ųåōžŹWēŠæ.Ģ÷`ķÅ ū('ś5" ņżB8āą ŹČŃį' łŁ%ąŃ5×5ģ į"3 Ü-ĻĢ× -#°ćęģū_ļ!ņģŌzŲ.ę7-! ×Āń!éÜõ;ÄéųÆóņ%³ÆüUāßę;Ķö#ęŅįę*/ĆłöHW 4Ž*.š=D$Ä1ė×8ŅXß1SęńŃŁ< ‚ģ.ZłīŹŲłDüC żēüš'09&& %Śé:į!~ö#AķZ ¹ļą’ Ż’„ŗŚŹu" ų×ń:õŪÖįž5¼O2ł]ŚjūUŃŗįü“¬ōņ€\D¼õų¤ĘX;ҹŚģWń§żéµņ½TEÖśŖÅ\ųä5Öźū =:ų”ļč®Ü"ł9äÕņŸ"&źī6pŪ~|1Žb€ń½;żÜ7 āŠāŅC) ’ö#ł ’7’ž#ńįµü<šģų€l{Ŗfƒī(+öAŅ ßC÷ŃRĄ ąšŪčĶė* ī ­šņaö"åė1žCš§Ė//öĻ醓¦¢ŻęÖ¤O9ź0³Ą <=”Ģ …ļ÷€Ąžļ8לL"Ê 5]‚Ó-ņāĘMЬĻ?ätÜ>ŽģółŅMć©Ļ–ß%÷ŖĪ‘Žžąż2²Åó%ä…ē©ĶNÖP²ŅŃŌ†¤Ę?÷‘Ō·K&9ꁚ«čńžģ”)d)üŽĢÖ]šÅ9$ŪŠž’O ģóķŌ3éÅšģØšŖŻ;čėé&ņ=Ć¦Ųł]ķȱ9&żåŠOaźžų/Æłź£XéńÖńąĒÕķäé¾ӚįŠ”ķźĄŌKµ²DW2 -I7Ē6Ō¹ėāŠŁRķÄļ§ōÕĻ ē’Ų¦Õź ööģ ńĪ÷ä+8ćBčū­)®į ŻņŚB²ÅĖėŁź/ÉŌĖDĖäżóE ¾Yć¦ģäÖŻ_ąō“ģ »Å÷ŹžŻīćļE; «Aļė+Łū ,ŠōņéõęY.1%ģK«l·ęū ­(åśžę&ÖņĖ­Å-H3öqīŽ3)ÕŻ-’ĖĢ“A>¦ŗåļ¹¹ķŅńßÕįŚšįO9żóŚ×#\ąä ńā¼ķ"ēÜZč9ŲüõIU'ųąĪ’5 ”<Éē•įSö峊 e5»¢ ŲZé*Ąš<ź 3ėgńģ]G†’&I¹ļē­¦ČV«×ŠõĒ„ 3īū į­+čńŃį¬5 ’Éč€öČŲö2ßżģŽļ‰īśYˆŻcĮҽ€®"&Ģ-żĄēB CĆē>068Ū’±žŻSĆšób9ūøüsåĖ™÷9¤Ćčöv^AI³öõ]"÷[×Ü­ä+D'?LÆÜŚļݜ J¾SCG ļÖ ö§åÓõćńŖF’Ōż śĘõ(ģ2ō" €Xü=żšōž“šź%ē;©€åāBµ5ģķ2ŠÅ`Ą ĻšŪėcѦėéŪ’2<óšRŪĶēćØÖ¶³,EE+ę%īŹi‰"¾ Ā5×®”ß. R,řŗŃĢ'^ģŽö¦Ü3ėÓxō-ž‚Żhžf Żźź2ņ08ģ &łŚęäµ, ĢZĻp¶(5]8¼žJ[÷XņŪĶ Ż‚žå"Ė罂ŽS KęķÅįdz!J/š’4*’Ęó$ ŲóAńóEvŲĆöņĻ.ŪŃ?ļ€Y’śŗ.9ńÅ,źéé+ģĻŃē®mȽBå›×ē'üß©KņŽf0߂&÷łÕó&1* åõŻ ūo 31ŲS’3*šŽŻŸ+VÄź"/¬§Ó!¾ŌīļŲ„Q’Šé÷9>ź’ėŲČŲ3 õ(Z4ėZ÷ŲÅ+T²<ÜŽ"é[\)%Ė1éŠs+ņz^ź;K¬ū)IĄoöȵÅģ¢Ż>äõ'ŌRŅ Šų ę Ł-Wž3ż·Iųr½19&ō1 äó1żĒ1 ¾ó æ ,üĢGŅ8#RŪĖō’"?ßÓ*ōįżĆę(óņ éĀ€×öł5Ōõķ$€: Ņ9?¢2é×k0ü28Tč2ŠäšśÕ 2½LóóśŽOż*ųŽKĀÅ7éā!’öC.öß7ń9 h#įÖōöŹ™2ŠūśĶž,_č¬čŗźN!śææž"ŃųüųķĪŅĘ6!Ō26ÜĖÉėųß³ ż„ž(į¶ó żĄé6ĘčÅ2 &7Ė2ÜģåIų ćÄå’ØŁb_Ź-ÕĒóÅNUõ#žŻ :Ō7åœö ˜žŲ Ņ-łīdößņÕŌ÷å *īUō Š=@Ų Č÷+ 8Ó*)ĖģEćIšüϐJĘ*ņņÜąėŪ J8Ø  ģ:Ė+ŽCĻų1ó7īśą÷Ö!Ņpö9ČkÅČ #-Ģ łń%ł“ž(*ų%· ćóÜöšō•źÉ Ė .Fž¶ź"ų/.äżŒģŗŻUé! õēõ¾Ń,n÷é"ž ¹O0ģłūĪ JćP æēõ.Õ?ŖÕ ™Žö²ķbóČķI Īüłō¹&żāåį7ĒĘ~ļe7 ßĻčęŸ!WÖųüń6ģń÷3ģé!ź'¢„F`õŌŚö żųŌ. õų ś)Gģ3”Ķ © ó?ż&žĢ~"’@8ā ćEž;0I()būųōĻšl.4|”Ā>ßH•;Źŗ,60Š õŁć’ń;˹ā›ōėN-$ē- īFFSÄõuŪÜ# ¤Š€óßćō%łĶŁĢęįś8,€ä¾Ż.=ķQ ż8š×ø× Dö éxŪ’0” Ē)”': €P±źņłę÷®ė:1Ń’H ø)—䣮ŃīüNÉŃESgÜ#ż Š€Äˆ Ī Ē‚ĒÉ:Ö³Ś™śĶu|šłN°šO3&°×,Ä8Ą>źÉĆ÷”URėŅö ŁZä2Õ:’śīąZķ.(é*厚°Ä&õģ¼'ąä]Öy+0ف¹ÜŃńżĒXIĢ(;-Ŗ>صŗ ņƒÉ wöŸ<¹'Ūś C}I,Ģāöż%š5ŚP殌>°Żæ€ØLĀVŽļō<įć^õōļä‚P“ŗóüś0*-Żõ9īčŃśō9²J³,ĀūQó ü%·żĮł®Ś»GĄ*S%ŗ5'ļņīö$(ę"é=žÓ ł ąŗ` ó0ęf ŪPÅōŖ19ڇØ@4 åZ¹/$āõźś@µüćĀÅÓŃę²ķ>dså:ł Å€Ķ3żOLč!Ł3Ø+#&Ćœ 67³ÉĘŻÅė’ Ō¼:$#÷÷Žļūü> å5ōāčė)BéņćÜė&Ń’é)«õüKÕæ$¹ #ļ,ÖėŲ2 ī2ł,© £u ą¼Óšöå [ń÷ĄŹż<ŁŻ‘źēü eģĒ 93×Ņé śĪÄ@üÄüōßģ Ķž"Lō!9ņAī)1łŽ³źė|Lēīۀ⿪ż7/ē¶4"ߚü IöH>5 (« ū kŽ5J5 öćµŃŪéTž9L*ĖZ;@Ø@įr(ĮR&ķėߢė&1ī$<üHŠ{/õŪķęžõĢõ)˵?’(ķ7Ł öŚ)ȓź,įĢ"Ėą×Ģż¤@ ū?6"NäY ö Š&HŻé.āFu#ŪźMśÓڼõäĄO ÆPŹÉ"õ419Aō͹ĪčĪö%A9Š€++ŲÜŽš÷žSÜĄ“×ć Ö p-ö ʘčm„ ń.Ó’ń38’Ć3ė,]ó€ŁpŽŃ O+BMģ0‘£É•Ö#°ģ@·üļŗł^ŗ%-÷!"ā€āĢž S•ģk½"= öBų% ķģł˜Äų)ćŖ#ĆQ)æū āŠī®Ķ 4$ųź#i2G(üÉK-’ˆź"õł³øųŁ Ą)ÖĶĮĻéē4¶L J2éė°)ö’ÖŁ ĒÓ7öóšš"gkūļńéIöļ%ņ63ēŌĘ/ā3sä¬ńŻŌńļÜÖÜ#&ßš7īČĻ źįõŹq|@Š%SwĻķžV·1=ÓŁŻ%,PŌ’ K¶ NŠ_ņTü׌ī¾Ö é šŪ17Ō:ųŌ$šŌśJ•#JTŹŠžņ¶ßŠKč % ’~ēöµüĆźŽķŻĪOžö&%³+ēÜĘŹA3uŚŽĶ€!ļć € ŁöĀ !’÷¬&£Ź ¾šņģĒėŌ–[NõāņǹÓASćąę×NÕJRöD>Ā įƀš-dögAédLī7ŗżIF¬’ Ż! ąÕ¶īću„ģ'-ĪČé7žż:é­<ĻāÉH <­Wü#Ż0GģEģŪ É&a0ä-“ś%#$D‹M āUøÆ€U ’&J*–ö F×ż1 üņ-Ųä·(üžź:ŚģŪXų!5ķśKß"į Ź·ļęīž4ž¬"+V6Š(°H &½ń ×|GS='ģi÷ēÉ:ś"Ž ü)ĖīētĀę8'Bę9ē@ŌH`ß«öŻūÓ ŚEōčłč-Ź 5œŚü·TĻ4Q" ŲhU9óżŠē¹łļ’ąĮQų­ßąŸģǾ2@ä¶Ä?H!,„0TąžÜöŁ$å/ŗŚĻŁ(¼€‡ōµ>å¦9HģVŹ0/ż¾ ŲåĄįü+ļ$«GSńąFąļŚĶŽĘĆ&·X éF €īĆ,ĶŪųŻõ-2eM'Å"Šõ–¾0ŹŽóĻ•-(Čæ!īļŅ1Ēēß,ĄĮ :$¼©ß:”äSź1ļæ ĒŠKś;õ«#µ1ģøŽö!-ŁĘōūWżŪL Öi+ĄH“8ü>øN¢āž  Ļ2ų‘C 8Äį-³0óN.šńæćį÷ąG’õIGž:Üréćš ŻĮēŠ×ā?Üīõ°mü;łźųūć[)Tü?×eöčNź žŻÄėŗĄfäP²ć ¹µ€śn5Ŗ&šƒ,śģ~"ķŹļ*Ć­Üß –ü÷FPŻGwĢÅO‡z4 cPĀÓģ}ÖłQ ßĶMŽ=%’å-'ķä&õ ßŌo Q&ŲsX*ŸąŖ5pīäæ;Iī ,‚ą#üŲ4åĆņ½ĢSS÷Cß:!#1¬rQb  [ BĆ5'(YTā0ńAŲģGčXÜžĢ½ŽKTēź Ü23Ō ŪU?™ąĀ ų5ǽŠńŽ Ż+4ł:’ä &o. ŠõźZ©Ą>“’Ć×@ä ųA;ŃBÅé  vņ(ü‹'łņŻżš)ū’Ī:ŹßĘ ZęēŲµ/ś’4»ö~/?'ĻÜÄ“żžīīłūą@ ½ēõ‚ńŲ<¤ĮÜƈӊóoHóüźŽĶß((.€,/G-Ąłß€ŪŅÆĻ·ÓŠ*ßõLŅ·Ü3įļSōÜ1+€'0.&ō·ńčäIE½®ŚŌĀ,ō#Ó7üĶÜŃ$õ­į„)ł$MåŚŗĻ%Æā!N5+¼üyņ,ųčģž*×ĢŁūżš+Ė čėŹ½7į0?Óņė üK¢ł$g°Ļóćü Ō £ß@ź÷c ÖŚåāüĒ! ū²ķ$ņó 5čź!0ōń³&ąÖõėü!<»3!IżĒ'6ķ\XÜżPņų@¹ĒĄÖÕ. Ļ·]ŲńI!ģ"RžŸöķßš8īR"Ń»šĮ®šå88ų"Ā$)ø ä3ļ¤Ł>õ,> .ŽʽB=£ņėÉÖßžļŹMźĮ÷O:AīEEÅ.0čć …Ģšcn >,±Īē, ļéÜö(Æółī°ĪŌ®/Žóś;ž!’C’×ū2Ą€²¢V" õ;ī ś š¬×ŠīžūPܦ#+: įR3żęĪō÷2-ćń=7ÆóŃYóóŠ'@Ļ>#ųšäŲ Żćņ1ņÆ]* /6rSĆ) ų&šßJ. æ×­įóż.č/Ļܤ+OĄ½ö’ĖżłŹ&äīŅ Ć[7ĮĆ*ŹķõÖ÷'ēńÕśÅ3SBŌĶžh>š ÓēÆ&Ū2łųČóå͹.+J¹ń× ūĆ3~ŽŻģ¼ćĪŲ`üźõŖBßJŃŽÜMŚśVI¹FÅcł_ł#Ż Õżé ō„LćĆ)ū0ė ä4ėĒßÜēå ź<7”Ķī|ģßōiGTÄŅ­ł%­>$<Ų€äŹĘ­cÉūUāĒķGŅ4D‡Ys°ä1 ąĖģš¶„łŹ©12ōó )I­ŠįõYó® õ_)=łó×S ĮC䀦·[nš52Zė:ķÕ£€¼I@čĀļåķ¶ÅŚēŌ0!0 źéįŚõ"ā"7ף ūķ8)į¾Fś ł_›Ó’ņX/Ó¹ėS"ųGįš×Üż"ÅŅ4čHŲ•?ŅėóµķŻ;÷ČŲ×/įŅŁ÷×üĮ4)ļ»Ļ÷ōå^äīÓé÷üAÄŲźńłYš¹ģ °š (VžĻśśŲƱ‘ ļ/( #żČŅ0 E);źųBéć8üJ&ė”Š† L ,C2Ż Ūę#)ūĻ”.ÖķFĽžÄūZ/)‚ ’ķłšónėMłįĪž01½Ų< Ć öä€ ņ óÕÉ;čėšßėļŽšļĻé.€»øīĄ¹°čįqmßéC€HółĒ7į<¾ŁųBą.ÜÉż9éGfšĀ(ņ.)BVäł·£Ü@ö į.%ćĮBNŪŹ!;Ė06©óųžšļ‘ą€ÉušQōÓżR»+dNYƦ3Ńę9A­Ż½ų2×/P.Š(¼ŚY÷*TF]'ž);ŗÆū Ż<Äæ,•dūQ×#Š)›ńä5÷„Ōdž9‘ų G›?VąL¾ jʟļŖę¾$3w˜ŽĖ2Ģ ’Ž($'’ąš $õ×N>ņÓ"6õŅĶA7 éÄ% ^Å)'Ž&Ź2]+Š꿦čXõ'ĆŁ÷Ķļž:ūėČŲõQA żų Ę5Ōā÷’EĖ*ęļ“ņ)įųī ūśĄ>č7 Żē.ćæ:.āÜ:[Ū%R.0Y(ōńŹōÓę(+4śäČ8Ū8 ķüżŻŠ€ŪąäŻŚ&żō)VĻ UŽ’¶ąńę€84Ół.ēø#šŌÉõŻļ˜9 )0ōŠ­ż& -–ń0Ó(äĄ ĖŠž‚ĀśAP¼ģ Śä¶ś8–ĘRūĮć• ĻÕ7G“Ė×Č@Lķ)öĶóųÖ.\Ł ź ŌģÕ"Šä'öd’ź;(9ĒÉĻßŗ½»õ¾Ģ’ Ā»ųļņ !ń<åé/ū0JŻAöSę]ė?õ=Ģ#ķÕņß< Ę! iā÷[ō =oē˜ ŲūßŪįäėĀ׿óüņęĖüßŅž,(k’½×(ĘĄ) āįHį0”9ć7į ’&4·>įĻ2¦ĖČ"ź%»jF¶X Gčö?ųŪņ'–ąČ »ŹóA¼ōćõ ł"åņ'Ķ Ēҽ˜ĆŪ›ń9÷“›6ĀĻżÄ·ąļčäüE*ų8)éōö¶śģ1 ` Łė8č÷/—!ö6YĢ Ū³ “.å×ę)÷0µōų÷ ²ųåē@žŽóä čŸļė”ż7*"ģ. ć*ż›ńü/KāŌ!µķ aŁēł ÷ĪĻóöŌ±;éBÖßAūĄŲčC džüa? ō'ŻøźČŅ?×’  Šś’äź D YĢš“ŻÅå %īĒL=ņ)%Čźäč.Ś“Iē9IįäÓūõŽ67ģZ˹ĄWž³C§ńEEFĆŠ¦JĶ .JĢł@ڹŗ/³®ÅÖ& üóöćč€| ėžų{#ūĈ€6Åō1åóH[åė. ņLŚßąK?jĒĢ(eœØŻåKŻå9A%):ŌFå<Łźė9¦ŁĮĄā)=.Žį:6Č=’ī0ŖŹ7I÷åĆbķș.ž"øz܀ėś)©Ņę]żī.æēA4Ų¤!ū0ų» äØQī Ü!ӀŹŽ µæ)ķ,ŌŅO=©éF¬Óீā< ?ēŚ8Ž\Ńńś2ŁŽłĀü>é:ś )ū®Ī!ĖΦ6ĆņŠŻųõłĀ?Ę5äóc2ŅžčG)÷[;ńÅ/įgŽ]ÜÜÆ£d J/.ż VęēӁū4 įžį, "čŪ¼m#ś³įćøēēŠĻéģśÓA–ß <Ż'%ÜŲ½¾')BMÓŁāÄ&÷ķøPļūģū4œLŌų½3(±VŠ&×Y$$ėAÜ2óńŌł7Ļ”ķ(š+C®‰/@6’€ž>ōĻłŽ"Ęł HåāŚ/ō@¬óŻą!vēüÜŚō%ć!ćō:2#8ψÕöįr͹Ž!äēü¾ėŁÉö éČ×Üū):0+ĻĢŻšpē±°'ǟĮģģCOĮ9 ¤Į9Ņ_½ö/"ŪĒü;6Ī9×8Žž€ēöŽA[ĶłįɶÓųõÜś1Ńū›Ģ»16ćÕ oĻņ!?.Ū 6^å"8>āŚ Įå]ņ ŽÓ’`bŚłķ6šČΤūų ŁĪ-LÖ@; Tė×B5 õč 0»0Ųóņß ¤ č6Ś„9 ąYĢK€/’ī÷ļÅ4ł$ €C~žŌ 6é 3ģł īž2ž#éš¼,ķNś77Ż0Ł<ÓōŽįßēéżł# #ī"Ż,Ņ楥?ū³ ")Ė'3Å?-0Õņ Ü-ś B¼2ÜėC éö0Ż„žÖFńł³üń &÷į½ņŽį ė7"ŻøĻFüńå(ū##ÕńĀłč©ē ¾Ø’ńÅšõśėł Ļū§’¼ųĶĢļ,Béæī ?ĀœŃ0:ļŁ(ÖĶķæģŌøäū)ųļńXčńńŽŅĻĪęQŻJ0ūćKFżōEw¤ų¶Ģ[ą©čA÷Ó<7Ź/äMĢ'W7õįÓš'õ Ž6¦+žö ż : Ģ2:eĻ÷Ō%0 -Dē µÉŽŹ¹Ā%ÖŠŪĶ?ķć¦ņ~č§ßü/© Š“ŅöįŪ:L²“ÖD1 čÕņŽżA( Éü(¬OżŖŅš ä¾4ķŁ¾åĮų ~É9ŠŗéžņßĶ> .0źøĆŁ 4ī ž :Hó!Ūóž'å ×]ŲØĶA;;©œß5üś'9żŌžū9ÅÕ’Z ģb¹ @ÕĪ#čUæĮ,?0įń÷Ū’U8ōKēCŅFļ’ S÷0žūŚ ü57隊č.Śļ īEī Nü3$ŻóįŻģ- äGŹåBŲ.¾ūįø,€ž\®BŪ7ŁVÕ­£÷*ųŹ×MĶøšø÷)*Lö<ø·śöČ,GąŅō84Śüæ²×(+®)ōnü÷¦ŚADēŲ°āåęמ½4ĀÖĻ’üCž.Üćć+ŁŃš %Ä Ļć÷÷WĮ/õ'å€!ģÕ]:īśŃ »śLįŪāū#OQŠĻ4éņöķŠU'ć¼ūC('īOä8:*ä6 Kńbū!,ŖßŠõÉĮ¹€ļ(Nü5śéś ’śŅŪ*š8æ’qī1óś ,ė7Ś#L½?CŪĒ=šś!ż Ā«żóŹłĻ1 +Ńčė=ę_ė$ü  «ü;› īłēśņ/(üĖģó®ūŻ+ē¾WĢ./ĀF*’Żķ*Ē Yćų/°3 -Ų³<ś/Ż ,ėŽī€¶Īć.Č‚=Ļ‚ßWżöō 0ˆ×8€8d½ĶĄ1ūå$äY€æ+$+W ęŌ0=ī''ž™ ķĪųųö!Īäü<ęUą,$ Äā:HMõåłVĮ/²’ę ¼ó?’ģ9ē(Ükę¾ 2#ŲĻ(ō€£=ó$-ąB)Ų"<ŗs¾V }AĻ!šśĻ>ß-¦ §ó‘.µĆÅįüćzżšźćj¾4óNéŽ@šŪGłęæš0÷'ąåīI¼ąĆéCņ ĢÕ%ōųŌŲó¢cb÷Ó ųīč ėØEõ#~2 '8:Ż Ų€Ūé+5ńūå4×ŪC²ł«ūķ«9ŽŁ"ż0 āń;½ q=Jß 0+'(ŪXDż-®Z$möąFōÜŠ+&ęÆSÅA*ĖFę×Ä·Ž– Č699ń"ü;3Ż!Ęčós’”S@ŁG= ¼łéōņ( 0- ńę)żÓō¦ś”éō”óųÅÆįŁ3ć?žų ‰śģģį (ä!óÓŠ( Ā’ ;J%äŚēėÖ īžß4å/;ō½Ź(ņä:÷÷( ą×+ĀųąįĢēź$CĀĄŗŻ.µŗåżéIķÆ9= 7ņóśćś6ŃčąūŒD$=×ĆČŌÜµŲžÜ&[’źIJń ėČŅāŲÅ(šćžøNį+ūŲÕį0»Š€2"äÓ('ßÅ},½Ų£Ćēļ+ĶĶ…óJ¬I,?¾ß×~ų<Ć9Ś:ąŠ’B ®č’ü"ĶēXģ0ź>ū6=Ł$'“ŪĘ÷ų¢įä2Ļ9Ęę9ėąŗŻŗķ.įn•įö`ń+(;ü0BćæżR -# īĀüM)ß×7#ÖFL÷'*Ł%ä2¼ Ą=¬Ä9ū?éI*ę’L“ł’Ä- 1śĀėółjņųņ+ć)"Ćš×:&ūßł¼ē5K CFÜ%ąė°ĖÆ $(>Ć’Ż,óėüeų; &äŗ4­ķ’=å’šŽ 2ōžąń3žĘRÜöŌ BÕ’üķmšé6&Ż.ō÷ü"¬aŌ¹ßųÕ@źŲĪģBĄöI+:1 6Ķį×K3ķ·R1ņõ˜ŁśóW€÷śéź&8éó® ]ͧų™ņȜó`Ö,ŻųŹŻåB&±QŚ ēū Ėć#*¦ÉNčųų1×ß ßćFńć.$kééŵĘöķūUņäē@O­ćUŲA5~śŚZ»,ü&%įaåµäłW.‰Ōśā8ēĆ”$ŚÄ†ł$øemŽņ"éTµ@äļŃZ<üī0€]^ 3 W# ±NóŪ€~Ųķń/åŲ9±+Ńéc ēæ‚ŁŽ )očÕģżżå¾÷Ē2Æ!śŻ<=>Iņ#ĒŹ›v»’ö’K’cD'Bč)š%ū %:L)!ęņÅ>ŹNŗ#Šō?1Óž& Źö{ĒÓ)0ņŽĪö(ąÆŪĻÄQßķž×'KģŹÕ×1č ōuń&.Żā^-&5ąL­Łµ.śõ¹*óū:Ö.ą- 0żß? Ö^­cģńś+b&ūŚ"ł#”2Ģ 9żpõč -üڱ6Eė*é*~×ē iĀłūčĢwĶ īõĶŌRąģŪ°96ō(1"ą@( ģśźŻÆŌ™!Õéj8Ļšķ.öžHŻ÷ܾ,Īźģ±ęMė9„2ŁćäóÖö+ÓńJ’āZŌ°;hĆēāÓé¼\üö—źšī"ź,„3Ć÷fī(]īŚ>ó ,$éč“Ū(ųūåńJ* =!ŲłµŚśņ¹ņ1ĖŽÓ#÷0(0żF+*ūėżś÷Ļ?Ų$Įö·ĢWļżżeŠ ¾ÓNSܵaē;Ėć P»/ŲĻF- ź Žų½Ō`"”ėżć¾Ś÷6utč9 !óūł(ģPö!±F\ļ×Pń CķšćÕį“!ė<ź śń3¦Lć óßĮ· &€öė(Ā6õ·łļ¶Y@öĶģDĪ%ŃŽ%üąŪUķ.)ė㠟ģ ēźłĆüśģū¹óüÖ :ŅŅ Ųė 6ŁņĒQēģżš1.LQš ä5 īHå ņ3ų„' Ņö~ŃęÖō$ćķ żÖķ ķ’ī¢š Ūö” įOT%ę@ōłć5ėŃŻÜ,śc<Ō$QÄéōŻūÄ"Īå<÷ūŌūū5 &Īć’Ą/Léū#ŌŹ!#÷ā^ķū¼0õ2E¹jāĮ·Ź#ž,5Ņóä$ł<@ü ß=ųź0÷š«;łÜ(ēŪ­ūū‚éļ¹ŽŽ-1×é3ķ»“įHŌŪ^ĒÕš "ēÜóJö*1¾’ä+OćKį4yķ'ÄOēĪĖgż)¾łÉ!‡,ģJąŲ29,³ųŹŻ' k Ń°Łš”šÓUŪ4„Օ¬Ä„’›Źnö/O¬!!“,ŹóZĮLß ± šŖź×ąŻ¾£šźōčĖæÜBßŌ:ŁFV%Z> Ž£Ośø<"³ ¬<d­£€Ä:ÅF(UUėĆŃ%ÓŌ’‹’’ ģĖŗ0ūŠ&ųūś ™ öłī¬ŌuY @€MžóßĶ"łV©.'Ÿ'ÅüM$ OiŅų€ų×­hÓÕŅÅ §÷ĀćŲŗ€īĢ~w£“¾’Õ-¤ē>ŗŚėĮł(ņx#ąZÜŁĘ®Æ&ū&ę ? ŪļĪ ģņ ī%ļ>$Ū(ĪĢ­DāuQ ZĘL“žĒĶśų*¶²Āūń8ŽŅ4įh7&-qUłļJ›wŻ įé üł’8?50Dę\¾±ć$?¬ćC×@øsõ3ēŲźŃéūį6$ó *™5÷ņ2'ŚŲ«õńK^æķd µĀ¦8پ (-+łĮ֔T[Ł6ō#Ž ĢøīŖJŌłCöw:±gõ jä©’Ģ>¹Ŗ%C%e5ś¾*¹+ßōń&ĘŠūö,ļFń3DNčČø85 öŪ2QC§8ķŚß1sö*ŁÓÓŻń)B÷LÉŹŁÓÕÜĄĪ$ųąźĘøĀÜÉųNćīŸžõō€! łīŅżųč4žąĢļėūĀ8ĶīäN<ćĒ󿧏)¢ÓėżtōZż6żd7ļ1ōżZ.YšĒä½&ė@·Š4ąĶĪ·ÉVłų :,:  Åī ŸßŪ*,ŅYņ÷1NJåżāČÖū*ķ6ó^ 2Bõ15č®ņżÓ³Ķčöė÷4śŻ)Ž?$ž¤ØķÓżwš’%i:ü.1*”W &ĪÉH7äüBåóĆó^%&? ŻŌ·Éśž¶÷ćŻ--ĪŖ8­÷Ÿ3޵Ųį!€ĖÖ äJ›"ļ$ļėĒŌÖÕń2Ä).4ēŗėĆÉמ÷Č~²źŃČ.čźó Įļ,ąļĪų1C żÖķ÷×?ä>ūĖżÅĪ!› š˜ńĻėåś·ŽåžQ³Ūf,Ūķōį éł= ū!Č÷Æ*'!4ś1°Ś ß!€ē-ĖōæķķīÜĄ ’āÕ0AµŌź¾aŪ’ŽŸŠÕźģŖÖŹŹ×óč¤ 3śLÅŅŌŠŗóÓĢ< āYŌ‡Żź:SµĻż0eńZ öę+'THķ[ź'’ŁḎ–ōC"k'ņ5nõõI(Հ/1¤ĘÓņ6†`ń¶AņßĆ&÷Żą#B#ąjÖ× tŽŽ>,śöRź½īń*-RE+ö+5ķ<ŚÅ‘ÆĶŚÓńęR$½ß¶Ć9 š#M5÷ķ%ž÷ķ:’0墮Ķ9%ėŃŅóbń˜5Ä.$$Ų2ŽžECĖ7/Ļ źÆ42ę§ń-:Ž+30 A¤ł,żŅʵö Ü)ĖńĘÜķąž«š:œ6ģ¢Ć&™ŻĒõGģĢ“ĄžńÓ ńų<’,ūš’ āļ#ąXłć( åŲ<2G˜Č%ŚųWč²ēBś<ŻI ZģRū2ņߚåŲæč böC5 ų,Ū×ų£Ū’ݼ®öѕ ģ ó¬Äāo# O L6#Ņé'ē€ūüļ85ŠļīåeżćźźŌ„Čš€» 5Ź 1ķmX”®ļłšŚŠ'JĖņ õV#+ą]U(;) !ųļ m)«śīķ×EW½ü½ļ÷Avž†.d<Ō° !ēŪ!` )ā 8Ä,3ß/żļĆŪ źé$GĪ<ń®®‚ņ"½źāĒńy¬ „rLsĢ™"ÜK6@®&ēA€Dż&ß!õźķĢĪžėē}Śßī2ÄMµłšŅHšėŃł ĄŁ«ømėä8Cč! ż¤ō:Nߌ³‘iŸÖōł“z¶ŃćCJļMŽļ×$é'dź2żōI&‚+ę!ómT Né7ĻdłõĀčNuÄųŹä7Kž· Ž(F2.ŹŅõbX ģś×ŁæÖź„Ėķ5Ņ€ t-ŅĄ įčį # É:ŽĆü3É©Ģ)ę"j®‹.€É<Ń eŅŻ>ŅķK!W= ŅD€É}6Įč'įæ^źŚ^ģŪŁ%’°Č&όGÓ¢ŁgšÅ®1ś½¦Ū ¼ā’o48÷¶§Fóa2‹!1õ€ )O™Ć*ü ÷Ó(;9īśżŻå8 ¦I<Ö HóKéI6$ēŹ’»P“÷Sļ"č  Ł3A:Ō^9AKč9ęŲy›%ąŗ"1źŚ!2É(Ž.öoĒ€żļ ĖF—Ą(*MĒ÷ )ŻX×¢š 5ōŁūcķ€.Ÿ÷Ł<å+į#12ś×¾®{ēdūü ł ž6½Śõ·É(C*śĆŅż 1E”ć!²ŃhŁ"(Żęó×¶?ć ½/ó5#Ū=Cļ¤Ė$ +Ķ#Ö C)ÄPńī³c÷éćöß2 ū įųå-—žź$0’š ĮM'! äīü0Ē&’ż5ų6Įźē,;ęóöĒ×ģ~!ŚĶB³¼Ć]Vöaī„Ć 'm×BPŲŻ,żhĀØų4T5æóė_(’ÜÄ^h¾ !Nģ€ćY:ķT! ļ(SĻć0 Ō°żĪäóēDX>\æ42’ żą=ŽXĪ ņõ¬—å-ĘĄ–¬Ź$ņż.ĶŚ4’ĆŚTó÷Ž ĒŖĢ÷¶(Ā" ŅRśŗ1Ų<ĖÜö ܬVžä]Ī6ń9ØŽJ@˜1f …¼f ĻūÄJČ’ÄqPKų¦€łFūÜ ä¹€ %=@æō[·6~HUGEE.Ö#.ĘgSŁēļ·Ü$׿ Ǭö“ĶŁIˆ&šŸ3ń īÉZ©!żÖUŃq€1Š5łõcć‚»‹ cśDå ķæā$:žÜ÷~łY€@ K}ó,zc¼L*>€(€ü׫|C(ó÷É<ŅK==ÉT‘oGŻ Cń¦[*¾Ģž6üßžKŌśõ§÷&õ? „ģāį!’ĒöļĶ !eüJč&ŗŸ/ŅÖį#ķŌėO×õX¢ņæĪ–ś\<ę&MÄśŌŻķ-EĢ™ģą Äū=æ!øI’' Jģėŗ &Ål.Ļū*kģcŠéŅ©&ä!5óüę ±ź2ń<ĖÉAĖĀĪšNūŃeOAū8ŌGŠõ̉ß-žüѼOŖ€ß±0 żųą ?ćL$ž# ī ,€åģQA:1 ģżĶ­2ɼIć(Įį(óĢ1ßG2Šö&Z0°ķĘŃŠ  6÷Æ €gŗ0Ėß $Hźö8uāÄó!ē3ŗeå' ßļßĻ“7ū&ķóčõ Ż2sŁ÷/N¹œŽŪØ ’¾» ŽłģFŻĢę×»eγWķ±»ó.5Vżū„ÜōŒ¼5=ž’(*ōóźŗÅźŌļ@Ś:, ł"ąŅŠYŁŃ:õYųīś Ēųąy&ĖłļChPM±ż„*łō±ķČ=ż Ö6ÓK¶Ü%žĻńåĄå!ńåō ŅĢõČ0 ¦ŽV&Īėē+Ų(žėľ9Pń«<(BĢ(óQĄ’üŁu½ČŅöHō#H’ŅŹ#ZłaD€\’ ĘĒŁ£-ĘSē×åŽ&ÄŅ£.Ś3ę Żē!÷Bž BĒ Wa#÷#2Õ Ąó(Ęńę¬?Īˤ Ī3ŚņÓĮ ß@³ ŠĒÆÉ«CķåŖ÷.w'óÅÄČšóŗ ŲaŻĄéŃ41&óF4źę9ń »ĢC€ö0ĪņĒ‚×įž’€N łøā";-Ąœ %Öü$6ģÕc)Ī„ō¹"oló2ĆE0ß.Ö:!E!Ļ"÷6Ó)„\¼USó2ēĘ_IŖĆž7}Ż@«M€ž.Õ”1,~8ųźņ2Ė#˜ńżģ„ż^ٹN åź*ąĢęߜśīé»J½Ķ{Ÿ:€1 šS’+ē •&äń Śåč#”±ÜāėÄā‘ źó»£ż)p&åÓ2­źńcģÅ莒öA$K]-ÆŪįÖUśĢ0ļąŪՀ€ÉEŠģümÅĢ*.X`e~!)ēŖļŁ!ĖõT&ę¶#2ÕņŃŻŁńģĶ÷@ęģ„+æ4ßē Õłmļ3ŁÅĆä"ö6¼ęĮ`/ūįøźįōĀI£ĻüĘ@S›¾ęļć-¦ Ž~ōö$"Ø*Z&ėÓķüĄ"Ą õ¬ļÉĪÕ)(},ģėÉõĮź!#9^·:cį‘uę Å[$:“å ¼„0ōż ķŠÅa$’8Ķ.ä®CÜZ§ńÅ KŠĪ,õÓŽ*ė[ 1ō€JćØCŚ‹ŻČQ«žķä6öĘś$’ų’Ł)ÓöŪB0Õ&ΐ:¦žĖé#öW¶¢P÷ĘæĮÜ<)ũ緀č"ŲFqČżŹÖųļIxG ½/²ŲĶzŻP€ (ŅĻYĘócXīv)ÆØJ%-?&€ÖÖ!:ĮļŻ8ó. ­ńj›¼āūžP€ų:ębF ćH<o.ó…žĶ¼æ®ĀźM€ö1cĶļL;Tõ!ųś+! ˜éėČSŗųĒ’ę„ś·Ań 14ŪR»ā&ģ)*›Ŗä*Ų Č IVō‡ņķUożģĶ:Üłūīł3śŌłŻųž,N'€pŽłš5"!;öō"Ō+ß żóOŹHČ="¾röHŲś±ń ßī’²F¬!2 śļ  ČŽoÕö"#Ü ½1Ģ„ żę/' ōųīßāī1é5üåŪXźš»*č õŚWĄą÷Ļū0\éĻZ(µJ%¼- ÓåT=ūó$[œķ5>×"Ņōߊ1%1Nś»õĪ :z#/ńņÕ;ŲöÖ×Ē0)`£+ų,ݼõņµ #ć°®Ł=P–Ē@µ¼ćŠ1"ąāæ0ū$ōH5<ÕĮo¹OÕAÓļŻLõ/õ3ŽŹø“Āż,›’ä!žLc(&īĮ .ß"‘3Oż&h0ęŃŃĄ8é+Ņ’ L*ä÷“ž-ō)Bżų²Ó\ģć3'<,Īś†Ć ‡Nēįҵ)ų€ćśŚż)āę$Ńšõ!Ń&ō”÷²ĶæöĆčē$Lņ޶’ķŌ0é =&Ļ$1āBüęü±Ó¶ ‰ĒņœüÄU¦ł7Ńš÷å¶rģĶc„ĘöēąŪ*A"Ć3żR )ėéŚöźü¦ŖļøAIāćč čśā$ĆDņņ×ćŹŌ“ųłĆ0 fįIFć*?77č]äĮ2‘"B°ć½’”Ē+-łŅ̜ūIR$+нÅŅš’·NŌ÷Ü;K’åŪų))2óéö1BĆõÓÓźŻ1¹<Ø÷ĢŲųĢĻé,&Hµ ­39ł%ēŽįFų(^8Ėõ0Ā3ŅśžÆ×%č.,#ś3 0'×Ó żśśŻ(÷I¦ńFā’€ŪXü8ß°č–%ĮKļķūŲęéįłē ®Śå+]ž ęÓį ž€USÓ8łÓwś;oĶ”ń øŪüpøökŲ1“ ’Č@.;ÕŲF€‡J{ dĻĘķÄĢåź¼ĘŠĄĄ]ššĘ¼Ģ?9¤Ķ{Ÿ” ī2 \ęūf„ßż?†6ē łĢ$Āźķ'Ōö+Å6ĄģøbB6ŌīA4;»ńŗĒ^Ҳ·ŌįČ!¶æQõ3®÷Õ×ü Ld÷&ü’$6š5õµł±ß¼-ɰ¹+SŁ—Ņõ9¢!ģó雺žæ²šūūĖ1»%ēč÷L Ė»dÉĘŅDĪŹ ®> 2ĢŖĄĒĒEėģ×Öėė:šż0Ō+ē"ąČČCgīÖ Ł"¢äįŁ1ÖŻTĆģ!ū$4ģē½žīĪf;¼÷ļ¬Y«#¢,¶1:šķŠķ*ÜĘ434  B0įLņ÷¼§ ģF Y× ÓŚĶ\;ł±[-ō6ěå”9¾É%ā"!ŲŖ‡¹ś4޶#éĆŽŪ;€ęEŁ/ž0GÓ›āÕ6ĉ90›žū Fņ0Š%M¶ āÅāя°ā³Łźķ·ŚYY$!żŽ//)Ö0Żę¤­ēŠ81&õš+éÖ%e…!ņųD!KÉó<ē'ų¾¹3 “Ģ“0œ×*tćSÓŽXұźĆļ8;b  %ŪC#€5';=w'å µž6óü"WżĶ)BõöżŲh3Ćéb! ę'żŲäżśčģÄįĀ-¹1ŁŲHĀńtć  ü#P0€'>%;’²īœ*źčóóäļ°F<ĆėĖøeiēCŪ ™BŠ+ÜŚś€0ŁŻ€%<佊€›@ģł]$»ßŹŪU†Öź%,ł4"ŪĖĢ2õŲœ&ī÷žēČ_BWųó"WśÕ0 tõĶŪŁ'OH“ƽšö¹÷ČńI „,ĘīźŽ³IļĢé Ü!dū`ĻA€!³Gē+jV‡Ļ ą@įĪF­ū0ü!ė@ČŲæ)Ł<ĮߦÜÓę!8Ņ·NŚ’’$Į Ŗ’ 4üłéłŁżQ ļFÅ= ąļ Wö Į÷Ķõ«?ąöŚé$ŠīMÉžüæ?äēł&ė ŽõÕ7“ńōĆC,.šLāóa)0Ņ  čńÄ  Ū*ėäˆę5žō4­ŗß#’ķŹŃā öö÷0žQ»ßPŽū'Öź īFč¼F9Ę ń(ńBŲļ¾ńēšēé/;śÓ6Žē åö$Ģķ ŻČļeŻŽÕąģį«'5Źü×éŹ/Āėō <õŃ:ģK-GÕ“ŻŠ‚Ģ)'ƖŠūž0Ļ×į%õ=0“äk@†—8Ź#%ĪE „YåīĀćåB!źļŁIóŃĶ <Ł$P€?§!ņŅ€ĢĘĖÖŅÕŃößū 土g6@Ó¾„Ēē3Ćüž’+Ū6Čį’ Ö5ßžžμ€ŗļ‚ 02ó:øĘÕźŽĖͲ"ÄJ«y›MŻē0ņśėń#ź óšśĀ¾ņ쾓&7ē’ŻĶ» ŖÆų!›å-‡ŃW0ÕNļż&’:ż’ŁrööéqĖŹÖ<€łE$ĶO0–ķ,å÷<&ż!j•ŽėAž.źdšÕĘ<Ū_;;aüśĶžÓčŃģZß ėGĻĄ42Ā+Ć#.#MĻå.!ČŅK—H¦ųĢ€ØģķĒ( Bó*#÷ö= ÕŲ?ŹÖņ £ųČ+U}ˆėńēÕjJN$5“&ž„ČĮļŹūēE;' ņRŌ+łCń-Ś&ų0L ÷,Ņ ź «1+łŽ.ŠØŁ"öłÉ0Ų1SKåé Ü-ĒĶ åg ł¼ ?Ļ"ŁŪ%ÜųKPJó0É:ē7K3Ž’Ć3¹äˆ לżńŌŚ7šG'$0Ķ2ŠŚļž×ńĢÓ¤ü ŻQ¶U{Üļ?šAė³7ÓŠē]ū ·V- WĮ¦ŻĄ"Ó¬Ūќ0 źōņć>"ä=„5ļŚČ+Óųu:Ų8ü"ģĢŁė UŲQ=Ķ<g _óE?& Mł’$ōM’« /$=ūż ±¹ÜĢEü&čļ5ŖÅ)ĖśķĖGŻ(ü3:×ōĆņŹĻõļ~āzŌūČ<.!üŽG"4„ć,Ā÷½<ś} ‡bĄÉwżĖ5ŚéĪ8ĒūAÜѱņʽå»å¬[‘Īē6ćčČę&Fŗg!ł)ü'ź!}ž>)<Äß >©CFÄ×Q=ź€ģ@±JH<īVŪ “ šŚ’ĘÓ{ā8Óļ µšē¢/ŻĒ7ŅPĘ X ŹóäÜhhš$Ü,ꄤ;”:‡¢©& ŅėŗŗRŌÖ Œbļ@Ā8«O6. –ģ€ž[“ü äVöīÜśōQ°Tķ€šCī?@ĘPŪ«©õŲCHŠo cęÜņčm+Īߌó®ĪHHēķnž§õT %ųÜćÕĻ¢½Ķ@€RJ tņR"32—Ģ’3Ę÷ž»(1!ķRĶAŃÖŪm“@÷\Č/² ?. ÜĪčöxņąKŁ&E³łćö =ųżŠ°¹Śįį=³ µŽ5]‰,ń@õĶŽžc×ĘĖŻH8Fļ|̤¼76įżrįóˆåÄ#G%P)%ś+<9EĘ<¢5 ļ óĖöĶŽēĒÜĖ FųļF«õGą×¹SVś źųīļĶ Ų™ē³ĀśXž_  ōÖ 0ļķå é62Ś!ż›,ćńµ-žŅV),€5šó¹Ł3[]ƒAŸyüķC(ĀøŹ _ ķż½ģų$m9 ś=ę šLčG“źŌ/EÖóߏ’ >ćGīĻTa\čĘųä¢+`śė Ā!÷VøBņP7š¾»U6’m%=Y;a\Gį"Ć끖é&©üæßģ!SO͐Ź­ćQÉPŁH÷Ź€²Ųģ.€žśHĻ&ż7Ķ,DFŌ2,ųę!čĻųōęåĻąĮøÉēžKāęĘ 4%’čėēūļ’õ'÷ē4ńŽ)öō抿 įĄ*å»ęÖ  ŌśńŪQÕÓ÷éßŪ9žŹżć÷)Äōņ ųł(śįÕšåż"ōä9½#Fāī Yöö0 łÖõšżāę3źŚķņēćÕ"ėÜåéÜŌ éÕČ5Ī"Ļųć ķżėåŲć%§'(Õ Ļņ¹’āÓ%ęĒõż°ćė 3 ō'ļ ķčĻ#ū Ņéžģņ;50č&ū åõąÜ,õ1R52×ėīóå &’ģóāćł+Õä×ķņļ ÜæŌ,Ł’Mä ėźūęß޲ž:ņÄ1Ö>-.żšņŹėę īäć!ń !żžčš;*!ļPīģ; ÜńĪķ üłīł źßōźŻŻé)õ ÷āųŻ'1#=ø ī"ŽĘžž:3ßĻåé Ēś! ś’ėŁż’źż’’łūĀżŁšó ģÓłłņ¢ėõē žĘåśŽŚóC»–’ÅO ÷ Ģéłųåł&’VšŅ+ų:üżšų-āž7201üņĀųŠ*å üÜķģ ķÓ åī<žÓī8ą¾Ęį×ōĖĪßTč! -Ļīż)ūõń+ö»8ż»ŁŲ ģŃź#õł åŲį( žąĶü÷+łÅ¶7¦ź#»+?ģüÖė@ŪŚ+"ņķ+ę ūä *śĢ¹›ĻÉēčŪņ/ś"ĮķųVā#ā’ ó āę²ĖÓŅėž)&N ņķ-ā& Öö &żķŽßßš!#6ūõ"ž ŻŻ!ė ü¾$Ń!®öą ¼hŃ!ÖŻēÆéāąÕóQč'łžš÷ńę ž(ėņÉÕū÷ĶŪłŽšīōś *Č;īŅü ķ8 čž č’× ō čżłõĀ5č<üö²įęžņćńŽ,īõū ćśłēĆŚ)ö(%ŚńšžŠßńäšń ;žÓß!čŲśėõó  āī éßń ōń1ūåŠĪī'ņł@ Ņāä’#ķšÜ:Žį,ĖÕźēä!ņ' -ģļ'ųÖ6 ģ»ö- ģŁ'/÷ßē  &Ūńä +åųĢéĶ81ÖŠŪ"2öėšõ.1LI žŽŃ ņ)ē ģõ9į(34ūśōģķś’&’ł;ż?śŃóŽ /ņ#ųķē&Öēńņšž#’»ęśŚųß’ģ0%Ųō÷+ēŽņ;ėņ $Ż1’ #ŌčIżóžäč*źó $żN¾ļų ż,+C’÷÷ņAō÷1 Ē ęēį &12!öß 60>"ēųšå6łŪ é3ø×ī×óęņąūžē'ųĢŽņīdü-ŠĖĘ@łO!4Ļž ī(źŠ,ŁŖš ŽŚÕĖņüīÅźÖķė"$Õ łŅ$³åąūūŲ Ė,÷šŚó;ōń?žī’3ųåšųé8ŻĮß$ł¼&žļŃü<®#'=šõņ<Ō=ż"+õł&ÜDĪ“ ķģåßż7ł7ōłĀčŲ )łä ę8śņ*37ķęžęņś "9ėÕģ$ŹÕī÷Źļķ&ūż­õQņę%üāņņ!2śž żĶßŃÖżßć€õ0Õó+ńś’¹ąõ Ļ϶  JōģńĪ*ŲBųŌ+ Üūą<ż ÷ōł ąĪóżRżõéļŲ ł2éå½ėÜ0ūRĒ äGōņņŲ ģöń=Vö:żéä ė¹’`Ł7Źī ß" š4ķš6)č"—J#ń Ģ B=K’ōńŻ3īĖ·9ėłKļŃ&ßźėļÜųüÕšŅBįńųąņ. Ąģ*č&żßéšēõ%÷Ū CŅ»¦ēŁõ=ģ#ęEž õ*īüy=,ģõČō(ōä ¶ę ńęÖ#õ’ėŌž#)ō)Įńīšī ķē’öąŃ6łÓü<ńéūŚļ2Ļ »õņū öéģńüééą ķļą? šGņŃ’Ż#åłŠ ŚõāęŁńč6Żń  Ž­įŃķē×čóĖźŽāś%įŻ’Īśņ)ÕŪןѿ’Ėęł, 'Ü-BéōćßĢžĶļÉū éōōõćń’Źń=żÆß Ž(ūB óńé$Düķé!(ęŲ ńŅ5*śĆ¾źń)Ü. żāėéģūõ €%9õęķņćķņĶŁŻīĮ éł ńģ!?ņ<žūāżÜųĒ2ŻŲšä42ÜŲ )ēūß"óņ8##D/łeļąż!Łö)ąš÷Õģõ ęųä  & ŽŹž?.5ĻĢīśē8Ė+ń ēśśöžŌ `Ķ(ä ’łżļ1C%É"¬öłŪņ)ü% äķ $āšź"Ć"Ą’żōĢŪė! ļ¼ üéę ģ? óų«ėšĮ I’źćß’ģž ź'<Žšõ÷ßżüóķĮįŽš19Éā õŗčÕā >š$>!<Üū6ģī¹ę8ųē'(ŅūÅžäßę$żųŽö ?$ MćžōÕ,Óęčęóņö ēā$įZüéŽ"ö"×Ó5-7@ģÉźü,Ėčīé,ć 6M'š šōõ;ō )Óöł’ūė*ä(āöóčOń(ųĻÓ(0Š8ßóųģ ž šĢūłū+ ėü  įŪćńėāī ü’ņõ.ņEņŲGģų! öĘ#åčŻ$#÷Ėā ļēŽģōś72 ņü!čŌś<Ė3÷ŻÅ õ·(öäļĀ@:-ņķżžü +ęł÷/ķēÓųłüÜę.ŚąūĄüĢö ŌĀö ¼ ķķåó*+ėśŠ=!õē+ šłāžļóąŠōįūßņ & ūĖßö9÷ńśšäćņųīę ’žńć ²’łŚźüćåķ½śōå0ņ å żIō>0 ķūļäž7’ ń¹$äćšņQ# ķņż÷ōę’ 6+ķÓż ŌÖüš- ū÷Ōłņź ėŌÕįŃī' 抯ōęMūēįśåņ 0:ūųļó.ļ’Ō³ćÓę÷ō$łRżė€éóļ‚d½(ž: č6 ’éó Ļ#ņö,ų ż÷€ ńź#ĶĶīķō½Įé žŽŠ½2Šģ€÷Ł ó ß¾ö÷ąś @üųūcü ņÓ÷±óėOī+ÓQż˜ĻĄ²öįÕ ōō3õ®'ķ(Ę)éŃĶö$<"Ūł¾/å¼Ś¤ö&Ł#*/ žįéÖß@—ŪÕī;5śī1 “ē"Öå¬ų¾čŚąųé ’ é%,iŻ’!>䜌ķßßšó šŠĒėFč×%ķū.ļž2 ÕäžśŅ¾˜ŃūõDą J ŠĶI®6¶!ÕåMéų ķ÷ įčö**čŻ€ĻŚ’Ū;@ļ1 õāž ą;Ćüęüöļ%ū&&īĶ-ńå:æ öļī1ü#Ńõ ū  ŁÕßĶ÷Ū’Ž:Õ ąēķ°3čéŻ8"ė5?łüōņ3÷ŽųļėZ0ń į25ģ×ÜÕ)śČų7'ö'ōäö÷÷2ś'żčF-żĻį"Ś(Qź āßßķśŪ ėĆ=ÉŃāÜó.ų?üäźš1ÓäŪņóõ×ęąųūīė żV# é-ō ļąė¹#ŚŅŪ×<óüŻõ1ūłŹ’ņ!ž½DĖūß$ śÓ,Ō åķæÜ ųīžō$ųWīńäģńå9ü#ā3÷Źć.! Äū)ó $%ĪųŹłąŻ* 1ōķßą Žņ źł ęAīÖ÷õĢ÷ęłĘį ŁéŠDū,棒Üę(łó ļ õ ļļŠ/į+śēįłõį žĻ HÜüēęōŻåßāüŁūŌī C+ņńNß+ń?HĒ%įūńłēü'ÕÓķ3ķŃōōį2)#īŅõń éĀ&O· ŪōšÜĪŚF4ųūīÓ ĮEFėž# ,®śä/ó6' ¹ü!)óO ų\ī NįžQš)Ī÷õ#+łJ*!-śīųžŽēõščśÄžų Ęó7ģ õóŅŻŪń !+!ŲĪč$øįłó$ļ2 ń ć&ņÜ)ż ģ2÷?čCßųģģģ õžō [ģū ņīš"  Iß!ęŃšć%š ’µōģ¼ż ĪÖäŚžėŻ Ųļæīžüģ÷ÖųÜÕųåż" ÷*”äüū-0÷ģš;īą+Łā’ß ł×æķå5ž Ēņū>ź»#÷ ąž/żŻģÓłĖ"$*łč&')éī0;żųŌ÷śųš)Éü/"!ųéóö=ą?ō4Üöķąü’üéč ō5ĀŽ öõ$ ś õŪ Óźłźęėń ’ą< ß$óÜ×Ćžüų($:% ōćńōęā ųĢšŹó ž ÕšĪ¹&ÖčąžŲęé!ĻÜŪöŁŃ%ūŲķööļ &ś«Żś„ ' ō šĖėāž÷ ńž Ļõüųž,éåŚąų÷żļ4Ö*+&ėÖżć üöń(ŅÓėŚ?#&įķšņżžŚ ģįģėü® įģų’Śö7éMßEņŚĪāÖī;ėųč'-- Ž Ś īę/ōįžž÷%Ōļł-õļ>į(ö ł.Õó7żūšŃ9÷ļå*óŅ-r䯒źŃĘ ׳ūģœ$’F#"+ööę<īīżžåŃŽ’Šäā’ā÷šśFóīńī÷ęēåÕ Łī ņ įńŻüéŚā&śō łč$×÷ģūEņęļ ųö9 Īļūü,ü č "Õū0 16įóįü„ÅėųżõīßÅ×ōé÷ļööę÷ 3÷śåUX ü’Āņ ĘąŻ#ēŽ×ĖßóŪåĘ ūōŗ»_ģ÷¼Óā9’ųōļIā÷!äź¼īÜā %éņ'÷ū6Ļ®Ōü  "īüžß÷#ßź’õē°ŽŃō ,ē«’± š;.ķ*żź-ööččņ(åķ ūGķüęæŖ;ž ųĒ,żOöłµ] ś6Ū éź-\$Ģųńź!ć ė ś$Īß )ž\īó ļÕ$"Øšłų3Ņü¶ņ!ļäų&ĢĀųóöģŁõ„ ĆŁč šµćŠKĢ ’Ęņō.$šść ż÷śōŻćŲ"äÜūźÓĪóC 1ŚŪüÜįŽģśģęįŚī÷ß’ó³:ļėó&)ēĢņę)ó ņęńŖč śśź ā» ū"äź 3÷üå÷éĮÜźś0üćü žśņ!PEČäžēūĖĖüü÷žéžÕńčžGįłG'ķ(ž’ēõжś ÷Ł öĻń ż ęŌ)Ž;Ą üÜńģīŻń+5÷ Õś ļ*ęū ģ÷ņ'žę Čü źģŁšćŲüÖ?,Š;żóī#ī`Ö$ć5öĘļłčõ š ’Éž ÓĖÄī) óą˱čSęēę÷æ’·ćüŲ;ÓāŃŅ’ņ /éęń"ĶŪą5$ Įßė.( äÖ½żH4ńłš(źšŃļĒōźüśĶ.&łņō  8Õō$Dõ('ąšłļćīśķ+Oē óöļßńņŲĘ ęķ¶Śńū³Õņ-ķŠßłå÷óöÅīÜÜ*×Ųžžņ×ÅŁļó  õłOśöłŻćģ1ź*>ńš&Ü÷Š÷õūš !ė ā ķÜõūĀš8śūż÷šźõåśå Ļ ?ó ėŹŽĶ×é1ŠTn3ēžēū įį ß=½Cēøß:åćūļׯžń¢ČŽł ¾ųPī + ņ4X ü(ńé5¬ŻŅ*õ’śąćźŅÓžõšķŗĮĮĻćģķó6Ī÷!ā*šłźųéģ$ `łüBŽEįö šżŪ ,āĻšē1 żŚōĶóņ$žķäI!Č$éż(śōū1ćęū6ņž š'Õ , ×Ēķää* ńĢ łŲūė ŲŅźX<,ģ õß;ā+ 7$ģ°ē1īŻŻ-óó äēļüś!ūõ##ė¶Įż5Öżś ą’óäķ0ģ äłö¾Ü ’Öóóģ/üģ4óėīžüķ"ō%ģĢč ß5šī?÷ķź 6āśķń %N6āSĄĢåõ;»üŻņżģ+ū) ļūĮŌæÜćņöńóé'Ą’G(芿žć # õģ-ųńźłö,9ź śB=ńūĖČ9’ššū/ī ūßżėõų&!Lļ%$÷ńėź ’śą  äϧóĪ ĘžūG*żō$ŲŠčÜõś Ū$ūö#B"āżŗöÓ:ŻśĪŃĆ+&"DŲ%ÅU<äĘ1ž%'=żūżüūå÷ź»źŪ=Ź Ģ ø%ģ) ķ)6!éōŗ÷āæŌī ņūš$'Ś<ß&šēę>å#å*/ä542Gė%2ū’ćšóÜĻčęźĪņķµż)/ųę #°!8. ßęųüń.õ/ļč 4 łÜ"ūöGóŖļążųóäõųüźūŪJõé"#żéŁõõę  Ężī 1śąčī ÷śéóĖü÷ĒŽOŲü’ ĖĪ,źé$Īłńķū$ūŽ.ŲN =°½ĢŃļŗęńćęłūņ:#Ųõ &-Müīöø% čųé÷ šłŅ÷ 8Ö0 źļźüį:ćŻ*žż’<śĶś’ķ½ ūćźī, ꀣöń č/©ęų= 3üXł 6 $ļ-łķėććŅčźķ÷żó (Ų'Ń€-'*ūߌīŚüŻĄ÷åžżŪčęø"ŗŪ=ł āö% ōG аņĀ2-ǾģĘ3>±÷ņ!łšō  +ą2 &š*ņ ÷Öš’FžžąųĻ[K$õńź&Š,čÆŽų  Ś ’<čóā'Ź cųč  ś4,ÉÓYŁņĪI¹īįłÜŌė’1ķŚėų%ų¬ ņīÕĆśŻųćź!ÖćŹėš ūīėõūöę$źüļĶżöŃKöÄāĖķ÷é,éö÷ĻāĶėŪŲ)  H ēPÜ ßźÓ4ÓęéłāņŁńś6ńŅ) ’čÖ ;ęĻ ·éŻUÖģõóé+īćŽåä'äįŪ1÷čž2ēõß$įęėõą õ žß&¶’ćśjų åĢŠ$ōõ:õļé F\ö0łĖõėżįó 0Üļī+" łėĒį šū÷ ē øĢęŽ ķ½ņż:%ßę'ķĄōļ ?ŽŌėųåöž$÷õĒ/(ų'ģ'üė$÷¶ė#?×(ä ō (ńŲōųń80?śÄļ8ć’ņń»Iϳ  éõį śėŁšŚś",®ŖŹŅ,ū ż2#@Ś-, ōčśĶöŠÕ  é#üź’åÜÄłõāŁäó; ’ūū$Ó$ ćųŽųÜš/ó ųćčB śŻōčęų ś¹  ’5+ėüõ#ļÖł9ō÷ń ńĻ ńóņĆįŪ *ļ’õMśĪŃź ļūŹČ%œōž÷ ķē9łēņ/ų@śÓģ6ŪŌ« &čėźīŚ Ü*ž ų ÓĘśīÖ)Öę éŃÜļž"·ūöź*)żóį;č ėź÷éį īüųķšČśćąņŻŅåĪ$ńļ ōńäŌóįžßļ 62ź ņģ ųčöŻģ?%ī ųń7Ż-Ü+Ņč±&ŪöÓć $ļń-÷)Ś ś >śč Ü'Ā׎ē Żžņū÷×ō 7ć žż12žł楟$Hņäö Æ3ś’#/ ņīŪžółźä.åĒüŃ Ń!JüŚü% "åī ®ōõŚ÷6äÕųOIō’Īę -Ņč,Ų ėŗśĶ0ąö ųXÉüėŌģęŲĪĖł2žŻ */²ŪŽ!ŹŅļŃ Ģ$ß$Ö×,&$-Ėż#ūķźģšé ÕŁŃҽź®ūēżĒ5+ŁõæõÓė»Ü¼ś7 !üśāżŌåÖ½ ļĪßÜŹŌśäČżÖāEėŲ& ńßļ'ū śņĖŠųнŁśōĻĢś*Üż÷öżłS÷3õćā(’źīéųįéč.·*ĒéóĢņ)äµĪčģŚüŁęė*:.łāŲīū ńś źß $Ū ģūģū Ż+üäķī Ī"ŪüŪņć°üāšķ’ūŻī ŪŹ*3/Ž]ą-@åäŲ Sūććņ čFó-ß)õłéŁæżē ęōÖ÷č'ģļä¬ņśŽī óą(’ļŲüŻāżÅįö ĪīõKķé ńüźBżŲūŚéį÷ÜēĪéųĘ÷ė!’ļāą’ūųģģŁŽģčń ÓöŚõž#÷ū-6ų' ?ÖĪōĘ÷( ėģė*Ų 4ö ß÷é ö<’ė&Ó,"*$ "ą$śē łž3Rų żś ė  õ,ŚĻōó-ņ1ūŌõA%ćż’Ö!6÷ōóŚ ņĘ ņ ü!Ü6ąśŪžüņ  #łŁśłL"ī- ó€żQ&!Ė;9 &“"÷ežļįšü÷ńžŌś9łŽŲ ¢)ļś×ų#ā ķżģ õĪ܁ĻčéMčéćIŹĻHčśź±&)źü-Óņ ź#’ēõųé×ņ:śļ ’6ó<1 ņė¼  ļ?ō’ äłķŃ łźŁ½üĘąņ=-Ēāšū Ż£1'Š&%%įö(żżĻ ÷ōŅäņ)ę."Ź" ō;ņŽŲ4 żÖāõ Ć0ź=įō"ō.ėŻŠęņäķ2šŻß×żŲłÜ/ä śõ’Žōņčāżą·ž ļĻūłŪ÷ $!éE"#ĶŽŅōĒĢģį=&ņś )t öüųC óķēīōėńśś”ņ÷0’ øū/ķļąčŹłų’*ö ū ,+  żõ ŅńĪŲØ  ŚéśĢ łś!Ü.83%AÅćųī$üīš ī¬łīšųž"(Ś;żÓŚT(ėō*č1ņ!ąźŻļĒēHÓKä* ŗÖ9üūųąóåČI(ŽÖž /ųE²ŗ*źåś&žéīčé!ćńå&ž÷śåżŪ’į+śė!ķäöē*éńõśāēŚńų  öųŗ’ĖōÓ)ł½ŃńéźžÅĪ žņź ŽÄų÷: Mµ÷ēŽ4ėšļš łüāģėõķ õGÜ ńŻįĻ×’ėķß÷÷Ōü,üÓś÷"ųżõūūŲåĪ+4/Ł( )żÓĖć š Ó2"łäš ō ęõź× % (÷ä0ļ)šńßś 鏌Óėæķņ÷÷ąåļ)å ź ÷ 2ķžķŲóó0!óŚżõ ņĘæĢéŽ śč ģŃ MÜčģõēõ’źųśž"ŻćēģŁĘŃĖ2 ’öÜ1žŪ7żśąA # éķ &ī /Ć% ōłµÕšęüó5õ%Ōķ9ĀżäńÜģĄ&ąń ųśóšÕżĄńś'&źēįžśīõĻßųįäQ7ńŚķ 8ü("īł÷ė śČ!õ÷»²2ś»ŽļŚū öåįūł(ałņ öćŁĒŻDаšäź2ü# Łåłļ3¼Õ<Ć-\ā¼&żż³Ģ1ą:äŃ ģś6äŲśCū3@¦#üóĆ6ü¦čCÕ āńŹųG'ćaŚÜŌŅįßäč’ž ģł÷ŠŃßų ą įžŃ ćÓ$(*Ś īL,"ēźŅģśŹėK:(4ę%Žģūņł÷Ī ;)ęķģ7žõÉ ķåč"ńóö;÷ā'ųńåžū (ų0ģÅųéž" ņŪēļćõ4)ē ßĄŻŚEģ Õ ń>ĘĆÕ&ņ# ĻņŽļś 8šžęĮ łHžš’JŪ&ń§ółŲ  čŚĢÜėÓūŗŌĖ"ĘćļöĘIī7 Ŗéėן)ļō[źņõŲńž÷żžśę5¬«üģ %E"¶Kź 3Ūµ®įļ8:½,UyōČšüÕ’Ē%1õ ŽDõĪęķKŽ'śŲ*ÜĶŻčM~,Ü GÜßč|M¾•§"ęŻ üé÷ćD:÷į?ó ßŲčėēóųöĆīź žŽó)ńē%ų1Żķ’ Z®'0ßüó/ąĻ&2ī'ēėĪéóÖīųźźņĢū/ń&ņB>ō)āś žĶÓ3ėBĮ×÷Ū&ąč®+(Ż=Ö)5Ż =Õķąń&Š !×(Øēé+4!ļŅ1ģö®(×ó/Ž ŻĆŻ0$łä#ćÕą %ēģŲćś*Æķ M-J$ńųå×÷Ÿ÷ī$ ŽÓ’īėą;É’÷åéļ ų=Īł&ÉŹā-ż£õĶųæ$ 6īéžS śņAČŲūņ ć¼Ģę)ģļ)šüń ęŌŻ ŪĒ'ćÓ6" ŃŹļóĪłšėč#ćŅÕ Æ'/ öµ'ŲįāŁėH$ņ -ē ×ęĆKāćōĻōēļś )4Óé’Ųč)ĘćÖćś2 Ļ žöŻóļ īŅŚ#ó"õż1 ×ķŁó čĘķóĻ’-¼õŌĪåążź%!ŻÖĻåėņśģ,ß Ś%åķųöąļÄ<$īō ĶõÜįźć'óåä+Ų$.įŽKėõāåüŽFž××ÆĪŁļļŗ%×ēŪ’)!’ļ÷ķ’ųōüļįĮś ņ'ļūÄ<&55’ą&ėłņŁžćł ÷Õ ę"ÖźŠī(2 ūņ ų6Ė+Ū6åį=čżę Óż"ąĢņ ÷Ž"ÕŠĖįČ$ōĪ?ōä6 JŽõ$ ļåū3"#ąėźŅ÷!ßö’ IīŅŪ )Ą3.ł!×õßłĶąŁ12źŻż@'ę!ö,ųį&Žč Īō9ü' üŪģBŪżń’ź#ųéõąč šõFę Ó7åüó(ļģ*ŹÖ*ŁłĪ!ŽÓōų  ķöķėļ.ųū$Qó ÖŠ- 'čīż5ė žóįŽeōļżéśśę@ó9 (š å%%źõņŲė 3LĘś><ųū+å ĄņŠ"żŻńź Ģ# é ęóūÓß!ōżÓžóōÕ&¼÷ŠĻī !ļń’üė!?āń0%Ōō’ų; īÉėėįÜśżŌó ’äéąžć .Ņ÷ßēå÷ģļ)%ń²ņķłų÷Ś Żć ×ų8  ś łŽĪ-×éśŌóž2õՖķŽ1÷÷ūļćżó Öģī6Ū óéõ˜ö5ó$üŌ ķēė2÷÷æLŌ-ĮĀ*õóēõŲ/Ž"ĒÕÉ4ęüąāģŪ2 å-1 äŅīéÄ]6ėŃ$SÕóź1ļö÷)ń'žū/*ڳ ¾ō üÜ ŽłŚī± ļ Üń åõóöėäB6# Ī!.! ÷Ż+’ėČō98ŅšŠ ąĢG×Ū ķüēŽÜ łÜ,&Ņč&ų. >;!žī#Ōū3!’¤7ę&ą*é%įłž$&-Įéģį䣯 śŻż±Žī+šŹŚ¼0ųüåĮģ©š'ÜĘäRśD#ŹļāģĢõ×Ōņ č 'é ģŻ Ųżļ L*üŽÜ½(ķŲü łłļ’ńߎž7ļĀśļū 2 īó) ŹžģÜņ "żÜČ ĻōķļāJųŌč ģ«éO ×īHäś(掹  ęü9ń eļęöÓņä¼ķ%ļ(ĻūņśŌž½žä.*Õ0Öņ)Ńķųö÷ūåėżłļ’üō1čņ÷ åéćéŠ9-Žäōźņ#éźķŹśÕš;ä 'žõ5   Õųā ęŲłėļż ŪļźĮšĢĄēÖÖžž'ūģüüėé-%-öżūūŁ’ö’%Üa5ĪLšÓ’č¼źó”1ģåóžÜĮń*šāłJą žé ōāÕé]ź÷åļ)!śłüõ$ū āÖķķäY=żŽ÷ėŚ% «š õŪņŅż ųŲó)õˆļēūļä%ŻžŻśż&Iż ų2ņćóļõōīŪĪŽ×ńģ ©üų÷*ū&ģóņž*ōšöšęćū ü, ęśłļÖ#Bżł÷Ćaē1ēŚĖļģęeüž$Ö÷;׳Ü÷Ūīó ģ÷"įūņéņ& ż;õōŁ.šĒüōķףē­²ģć*åŻńķŽŲ Ļ õ术ś’ź ž’$銒­Ć &"šÜ.ūī&Ķčśį$’ź1ŹōŠųĶŁP.ųņ¤Ž­ńź,ü +ė=īé ņē(Śå#ėč Ł4śēü,ü ģ ö÷šõļģķ"üææó č Łēżėōłś@: b Ž Žö÷ ę+š Ī9+õńėņŁDż¾Ö߯ ķÖ ’' *šäų’øéó;ÖĢęž)-×įé $śAGé¶.÷żÕņóļ ļŁģė» ’ ń EŁÜ7¹Ż00ż#ņę»0öģžų1čČ(Ų(īźBUĀ’ ø ń*ō".!“Käó$ĒÓ&Ųē;§ß į¦ž÷āžėö<ų%ė 9)Ļ*4å7×ŻĪŚĪŲ ūßöņģß=:źD#łÉł ä ŚāÕH%;źÄ +öōė*įéē1 šūŖ%ūū5ēž>ó,,=ćŁūśÄĀųõōø®ÄžŁżSņ#ł ć,ģžSõŽ!žūįÆ+šäĄ Č÷ā żö«Ō\Śóņķ×ūō4@"ć.ąģś Ž(ēöŽÉēĆš'ŁĻ’ł/ėņ÷ń!ŚÕéö×čäūŃ=Óģėóä*ōžßSóóūõźéŽ"žųKćüó#Ü'ß-öŪ’ ö»ķłUį&Ōź!šŁŁ æčųļüŻ0ĒŲ+ż÷ź’+ųüöź+ąģķ óė!6 ķõś ģŻ éšŚ+Ä ė*žüōÕī#ßß#ūŃÜ'éŪśŽę/’  5׳åķ( ģ'āåŠżž ÷įó Ūļžćģ’4ėšźŃLźéīŻź3žõŁļåõÖČ÷īóķĢ Ģ,Ń1ī ėņćņ0'Ż’śėšĢłąńæ0ńõśAšõęÕņ÷ūā’2ėŚ!÷Źó Ł’ł*ū(ó,Ģ3$Ūģ ŁŚ;å(ļŲ(żü- źńó×ģ’Ī Ųö"ųéŚä»÷żł×Ż’źł 7ļōś Žżūōģ ā»&ęĪśõŠļ4ļöåŅžņīJŲ čüŽ9 /)ų 'ņóćļī¾×žö6śņś(žŪ ģćÅ2ćéŻńŃū#åēėū ž ź@üü:/ō Ķć9ę $ń ž&ŪĶīóęķĪ Ūõ#’ 2äīūń’ęū÷Ü* Éšį ²ģÜųł ņĮū ńų/!óī0ėå¾!żW"0%šįņ.!#ķžą! ÓMż)Ņ #ķD8÷ öžø-ßīøģ÷ž ÷ū5ø üņ33ÜÓ'ū@ęāÜōļ×ĪŃ&, ė5÷Śī÷łęģ>*ÓÜšŻó ēōū7 Å3Öą*ŃĪiĒŽł 0 'ć¦-łµ»K/5üÄößųł÷ ń¼ČüŽWįóō“ćÜĻ$#łöł'ųų)ņéå泎÷éó×öĢ4žÖöśņéŻÖźĢšėąėžįūüö÷’éšķėÉ1ā#,’äŃ’ÜįŪÜ.ÜęÜĻÉÓė&ķFXŁ„Öąī)é÷ŽļČ"ĻöŽżņńŃ÷ČīņņšĶ#õŻ ń’ß’ōöž śūļ+%Żūó Bä ļ'žīŲč#õ+ń’Ļ’Üń(9 »Āāś+ ųąõÜ+ļėģŪõ ł õŻžųÕÜōü”Éßó.ł’0 ķż"/óõżą)ēJ äüš/"Ł÷"Žóź"Ū"ßö Éļ"ćļīŠ ļ ß=ÆįÅķ`Ķ)ė×ģ Ģē,šķŽĪ%6ēū śż HŻ ?Ė< Õģ÷šāźųņšĘšć$óńå SÜŚó5Ęõų é?×Ķėų|ó7Č$ #ņ1$č÷ēņäĒń€ śčń źā0žåāéēEĢŠ=ļĀģąū 8 3<ļł/ćĖÓģ„ßĶČ9Ģ×ūŚģ·>Ģ©żčüÅĪ "ÉMóĄĄüųā*!·üżā$’įš /ņ. Š'ó éźåÖü_!ķų3ü: ąę 0ŻEóņ!ż 2#Ä ū5ņŪääń-×ü>ą7 "ÜȎŌö÷½Aņ ŠļųąŚūõčųŚļŗšKH į  ł6# īōģ@Ü"ųķ<śŻž’¼C0ųŠö÷äĻ’Õģ'Éć%’żĒ3Ń9l$$ė ļ*1×čč7õč äÜåēüóŌž*į0ÕĆÜėė,óćĖ4č#ūźńÕćå"ķ +ā$āż 7×ņÖ,īŪ椚åüēśĀóņźEäóėõį.žEķ’éŲüÓ DūńūŅÅ#ńżŗąų,)ŪėŽ5 ųŁķķ’ģä D+Ó å#Ū šŚ×?ž’Žć ߏé’Ė0 öńäīś 3%ČŻśšõŲåżīŌā %ėūš§żŹóņüžļ šņīAößļ ņŅīŚ$ż ņ0Óż éCŚ1ē'Žń ēķüįŚõEūēō$žčš6ķ%åżäß)ē ĖüņüÖ03ÖńįóÖŚ’ŚģėōÆüóŪčÕ’ŪééöżņåūōÖŪäś ’ä ż'é ĄüüåĻōÕŪåŻĘ’śłŗ čī'ųļ .ÅŻ óōÕļ<  ė¾ś6¼ Žā āäąū!Óéäó)ęķÜÜ ū/ŪųåŅ č źś śÄŌ6z&šėõ#C ēō=Žģįźäń śś śÕāūōč2ūżščé!Żöųõķš#öÕńŪęĻšõćŻē īb’'ķč1ėńšé$Č)’õ4 8č,/ė*čĪļLÕüļłąöšŪķš-$Fłä$'& ŅL&źń.’ŌśÓõõ!Ųū:)ä5 0 )ņéīĻųöÅĀ'ņīŽ?MŗŲ Üźī@ö÷Žįąļ;!*Ģ1ēć Üåōõōü! žšģčļĘźCÖāķ-=žņ źåęļ ÷Ł6’ čģ$śÉó"ņē.ė 'ü ÷÷(ļ.ūģģż Ōžž ģ’ūż5 &Łėöž6ļėĪ+’ł2ĪĄ÷ŪÖłżÖēźū’ōęż1Ē ä*óųōļ_ŧ!ž' :'$åģūė7ŻĖĻEū÷0öķł÷÷ść,õ÷āśĢģžēōś  Üā Å’&ķ7š 5÷ī’åĒ ÷ ę šč ė öÜū Ėų ×Ī ÷õ9 Aķā "ōłĻ24ŻČ OżłŠ.8 Łū,÷õćž ģŠ2ŽŠō÷Ųķē2Ł Śżåū2+ŻÕń!Xś'óę1%"żō, üŚ #õ/’ž2Öõ»ąŃō$óžåł üćųōš ż_ įóÜ ŌŪöķĄŽś÷čē&,5ó÷ųüH1Óū&äČ ŪŅłūįłöÖ.š÷ŪįÖė!/ó’ń#źõ óģē.ēņōņĪļų÷Łõ Ļ÷0Ńķųß’āä ųļ÷Ż÷ *āļį×ŌŚ*+,õ%å!ž÷ ōCėś× !#ŌŽżėŽ+ė6Ų+6ķ0ßåāgķ ćā( Ü ĖŃęļśśłöō($+Võü9ūņŃģŌ ŸļāĒõ ķæOŽęõ  ūŻõśüż,äÅõ$źäųŽā#ļ’ŗöžüżöÓ¬ńĻź ü+÷ŌōE+Gų Żłēēż÷ĄĢį1’ Éāų ė Łū䌿!#öŁķś ęęāłźčż ś#¼×š8/ Ł)Ļöü÷LČ8É Žóß Łöžļ6 ą-ĮÉ ņūį%šńņšĀ żĶü5óšĖ DŻ ¶Ś’įķüŲČmžäĖ&ż ęļÜŽ÷BōęÓļóųł$ų"“  ĻŻé!ū(ōźž éÓ"å'ōū >āüõūŚęėńĪųčóóśł O÷ģņź"; yķżÖśĪ $īļłķ/ģÓš5ų*’ŚāōųĻÓķ挟žśĒ÷āŻĘźźčę!żåéŪź WķĶėŪäźķĒ×÷šķ8õŲ'åüA ē .1# ŌŚč73.ž'į2 śöźśó¦ńėź7Š' ×*ÖŁ*ĻĀ; ęß’ż $ ųėõłņYóūŽ Ūäß ÷žīåń žE ś5ūśūå ÉY×ĶļŌųHąĻ(¼ĪÄżšėņ5Bźšłę%?KłČųńēÅåę0¼Ķ@³±é=/7¬ÄEŃŲķĮķMšŲ śķźĢųę$ŻĢŪ÷ŻćŻ>ż->ž2ŪļŽHżåĮü ßšżģŲć3ńÖ“åį\ūÕ±śŽČåé ä„īūŻMnž2š ōšīõŽķ*äÖ „Ēō(śÜ$ ,śŖ3 šŃŻżņŲ éõź» ś%Ųé ĻöęšÆźīŌÄČĪ%ėh.ųŃ'3ĄtéśĀ„ż¼÷—ęß+žöóż8ņšķÕ$Ų -ńéD’$ń Õ ŃļĖš ½ėŹŖ'&żźóŹ· łüżüėķłóĘ,ö$ų0!ņ9) >ęŽįō[öļ5žÖ łźģJįųįėń õŻ7“ė×6$ņÖ ןŃćķ(žĖłįķ/Üžū& ę×ń$į9Łż õźīįŌüA’ źéĶńõńųŲō5Žśģ°ÄŽ#šŪ ö.éłśüÜįÜ <ūžÜž"āäš Š÷%öś)īÕśŚķ€ųų’ņłĖ µļ  9¾ńÉé(ö ÓŹ ąś’ļū/Įē ×ļÉõē# 'žĪäšŃ #>š Ó  )ĒŽõłōŃĆßńčõŅćńąOĒėē-)-ڤē żįåõåÅŪ÷“ęĪ“/±Īš ēŠŪäHįÜ) Śė5ńŁŻšłīŹŌźģbėóū ęż  ßė?ļ/ā÷ųŃōŌōŹźā$ņ ėōēRC6ā"īńļ‹ÖG(Ö.ą :ā %ÜŌ#’ó É# ėšżßMćõįžŪ" #ßžš0#"ł&ū ā׿%’õĶ ;ßņŅ8éųēż-ųÄŲ×ņ ō÷=ßż÷ņāūłąžķVĆ ī ,C > öŌņ ]Ģ"ńõņ’ !Żć¦ę’Põ`Ų·Ń ąķśX6čéĄ+šM¾ČĶč@ŻųūĶ*ń įķÕģ$4ņÄįš&ß ćõ,ļžŁżŃ·ęßü åē&÷čķŲžE#Čē ÷'é/õ'ź#Ū* ęŻ ’/BĶõN ¶ :Ģęšųš"Ż ģņ3'ģļć*ĢśĖč@õšźčūńŃą»å¼"ūįįōē!!ņ $é;Ņāćģūö.Ģź1śāģõńņŻåßąć2 łē ūćūē ń1+žńļčó%Õ2ķ">ē÷ō"Š ōĆ%ų䜥 ģśņā õ$ž Éźõü ż ć( õóßéū ž/ģūę÷ńłĻ÷źģšåĢ# ś;ūÖ÷1/éšźŁŚ×ū÷Iīč'÷Žūū š×ĒēūĢ/0&ł-ńįõńŻłäė!÷Łč#ŹÜĢ %ģā Ą÷Ó0ź'Ć ü@ū ōč¾ŠńóļŹį.ē!!Žåķ ŪŖéģžF@×Ńķėģūēų ō"ņńį żļ ņ’ė×ģ"" ż9$öłŲó2ä’Ež&ģ.žÜļ’,žöóšÜ ;)6V)öŲæźü8ć āĒ;ńźŹ9żßš %üąšéščĒśą9ŚŚł/-öķŹøłÖŻńšżĪ1¹÷åżŅĘĪāć žŪ+ś)ś+’ßö ęŁ.ā=’öčļąŲ ėČŲś<Įüü ’ä5÷ņū’éļįńżūźŚā'żšīŻćüé?ÜMš×,Čģ=Źį ''ßķéĻŽ¹ņó ½ń ß*š óĢņņķ ź2čöłė8ģ('ęž£Ź ?ā÷É0 ķėōżķ ģöŚųłAńā 3éžõļĮ.łūć #7毿ļöĮ×=ć¾čļŲ:6Fę*ņ)ß/Šš’žźš÷ö-ÉŅćżäÄłżųŃį;šöńģō ą ’õ % õģėĢŪÜõ žß ą/ļŲųé$łśä½ #ŲŻŲŚŚć-Å(2å"žĀķÕū üN É÷óśüAćŃó(EĘŲ% ŠĘņ:’ä žö ģłł÷% ė’óC #ÖąäK9ī ł÷īzųüį* éNßēźĖżÖėźüń ×ų) īÖüæż­Ł )Żņ  ķē;ņōė0KŻ2ś¶æ ėŗFśćśžč&ļÓåņńõBµõĻÅžž 0ųŠłcßżå÷ö2ćŹų  ż ųō&%! Žł2öńņ #©hīĒłś!ø=š*Ļ9,Dńüć?ąäN $  KąńĪßķüź&!ąśķÜę ÷’ŁėÕžŪXÉļūŻLżīüłūŚģūź»ś%€üąšņžõ#׹!;õół$÷ė ŪņĆō Ėė ųõ ’*õņļ5"’ū’CS’ 4ō/éó€ŅŻ'ćńņ’äŻ8¹÷’ļ ī:öā#öīž+ūŁśŪē ;0ū šóåņż7ģ4Ų’ÖŻ’ģH“īŲųļäöžŁšųüų’ Žå ŪņĢŻųŲą Ūå ķī#ÜżžäņŚ$ īš%Ģł$öšQż,"źé9łą*Ń%åŚßĪ%ūł÷öÄčō÷ś$&š $Ėśłģ×ėóģŃūś:ł)óÜõĒNōńćŻ#’ļį/#5ęéė ĖĆ ’č’īŻłŻŪåīŚŁö !2$ę÷šķ )ė4łš7Ū-žüķē;÷ Ī ’õõ! śß š öŚÜTėņ’"ō/šųżźņīżČķŁšģ ü4@ūń ö#Ņ Āņć łų ŌŅž ÷õĀźŽéĢņ÷éÜåW"ī(ņõ öųēžąµ#õų$+% &8 Łū ėēē—čäęōņįˆ<å 5ń,ŁŽźKÓŠ@5@ éĒģĒ ##Üö%ś$śüBńēóĖ÷lĄįA ļźģŚóņóåמę#ļįņĘŁhRŪīī$2ģ(&ÕćźüĀ3īü'šZżżśų8 Ģ÷ļ īÕ«!č×Ģī/ ¾č&Ačäūöł!Ōī ±(ČßżCƹé ļ#ļ=Åė×õ—įģż’šČ#ö¢ę¶ßÜō+ķę¼ ŪźóŻśäŗ !īÄ’ åoźęśß1Ó;Ö’śļ?Ģčėżž!× ų)÷ōĖŁģ3÷źļ%ńā5ų%#óī %õ1ćŪ-ļē öŌ,ż ß åš "" ’.:åß(?č''ō/öÜÄöęŌēŽŹāśģ&ņF ’ā ü…@ķśÕ ŅęöżÕõ’"£āāĻÅéķō)!Ń)TżGõ%Ü žéØמūįĢŌ’ל6č$%ēŻŽćĪ# ĀŌĖųŚÕ0ēŻ.÷ģ: ļ:Ģī"ēŻ ŅžŠłĀåėż ź.ę ņ ó7īłūĆł åęŚ÷“ö÷ټėīöčĶōīā źĶž ļźH öīü8å żB 4īͼēüÕ¤ö±/ČśķŌ÷$x’ē€$„ž ½ "’Ė'Żļ® +óśŲõ÷’Õ"ż&įė3,»ūīöü$å1öśäžź2 ×ōŲ»- ü!ĶźŽé¶ üö Ž/õ÷ ’ńōÅģüE óė+’-׳ąÄü&ģ  Ū ÖÜŃ"Īļš,ņŅųŲāš@ņöõ÷7ü ų $(öó& ’ čźłņÄė!ūō(ī5¶āģÜüÕāą ÷ćśõų÷8»żōŪčŲ@ōķÜśöÓ*ÕŽē&ņź6D>&żäĢųžó °éć7#(į÷’łĪąēņ"ļ!ØĀāÖķüä(’&“Ū!,ōĆźęī  ōÆ-ł;/ŻāšōņŁö !U Ü&ō ų ŽŁāńkķģķēė÷ŅŁ)ŌģĶ%ŻN'ąś# āŲ-śüó$äāõĶšŪõ’#ćüŁ,Ī BķæÅŽ šżāūŲ-C0·łöśČ6² #īöć -/ą/ą”’ ńö(#!\×īń ķ÷' .÷W #ż>ŽßõŻÓž×&äŲķ/ØīNżź-&ųŁWž ĶÜ+8ČÜ-%ł ūČĮ*÷«Ē]üčóéł$Śż,59ģÄäžīóŻŹē#ńXD×ńźżżõéūö ÷-ųöóóŚą'ś.!ōä$ōäłó2 ÷ü$üń’ÜŪų& éóö@Ö óē;ų(ŠōõžĪ üöäćģ1óęčģźōō 'óżöÉHף —5ą× Ž’žśśīt žżõēņ&äóż öāčūńōųßā  źą÷%’źÜĪčµēšū’,±×Ė žųśõ Óż+īĪ ž.žżüūüõė’ÓŻ3ųßõśį0ü+ūÖ%Ē ēōĢöłõ÷Ł„ģ®ężāēāß3 Ņłč żūżÕöžßŲüš3Ė äāö÷Ółįņķī÷óļ°1šūų)1’ OóŽģ÷źš.&ćņ5Šņ Øīāģā%×ŲŽøŅčńł±EõųĄłś łČH,±:%ż Ų.4ųęģķ ?ö×čRšüļäDļż÷Źęéüōčķ3éÕōłą Õ)ū ōōüķ ä?Düä’ļÖūļ2Ńü8 į¾ÖęćųģźóüšI(Ūó+ģū<Ž5@¾6 īš9Öžé1×ōŠŚļ ō0ū"$ åęšü! '*ć¼ ę!ĖÓŅĢ.üŌÉż$%Żóżč’%ėõō¢õõ ńĘżłżńėÜī0ųĶŅŽŃÕóį ’¼Ņš$žā šŪT5¹ģīOśķCŌĆ/ņĖęąöōńŅā öćü;õ*̳żēbė$¬é7š÷ GŃéääżšß )ÄŠÅ ĻāüŚ8÷ź Ćąū½ā ó(8ģA,ś6ĀöŠōĖ %ū3gūäł<ŲēÕ Ļ£ļłÜé+%żąö)²?Żøš ūö»Ś’é"oŹéM Óą_SĪĻÄŚ9 ūĖÓ&čųąCRüJōłŠłļ4!KŌóżSåōķ’ą >śź 7ėź!D1į, ßē ŪÓÖ.'#+'üź ķ ŹįųŅüā?ĆŌōĮ9ŻÖžņPćéųõķėą!# ćŲK/öżČ Üļ0ö92šŻōńäū ōüŻŃŚāęYŁųėņŹ0.č÷ś’įŅė4ŅļĻź€’Å'$ņ ŁģßōĆ%ōģŻó#üčĻśēł>’2 ģśÖä ąó Ī$ąūMāźķ*żėõ+@āšž¢ģś ńćÓīįĖLę½įõ(ś’ł$ų*÷, -ģ žöų6 #Āī÷üōź-!ē øźŌ õ ņšŽ Ńł+śŲŽĒõ ģ&ź[(ō &żęō<żūź#ö Bį '3±#ūö*śŃ ßåüźęč ’ņŚšüŲõ%čõN/õ’Ė@üųųüłüäüÜßĖ×%øōśÄ žņ'’õõüźż$*$īŲĄĒĢī)ō ņ ęŁ ų9ž!3ģ ģÖłżóļųńšūēł"ążŻęķŪčä鿣žńäĶėģ čē ŗżēåõž$ā%Ģ'*÷óÓĶü śõķų ļ$ģ š’éĻžPŽé*1ńéäāÓ śē+3š ūóöī!’īēÕ÷Ö żÖĻņŃ' Ūį­ćį–ą ä ś9ž&ē ×ōōźūČčćīōėŽōł’&ęŹūžāżGč Ōń"ēל ö1łų8óŅć2ķäēłķ Ł1ģü?śśŪ!’ę éśó9ŗė ŽżćŁéģūŚÓŗ) 1Ņ÷5.õųłģ ķŻņ)īĻFõļŽ öõń;óż³ ń’ż Ē ņł÷é ņÉT ųė+į<āļ:(ī)Å ˜F ļ  ī?Ś 3ļŌåųŽł!ųĀ  MśO1ļė$ōēčŲÕ óŌåą×ņģ„üź#žüļģ%ģKņ¼ūŲŁč ļó’×ļžė ÷5ė鎯īįņĻŚ×ų Ѽ-ūÓŻō Æł-ļüßčļųū żĘźņ2Ś!ü,ēäüäóŅīéüLņéJ ėś/öŪ,%éÜ/įīüżåč’1ź ÖŽ ū ščū>  ÉŻł !'ńóźŁŲ$ń#ļĆ ß±Ś é’)įõJā$ķ÷ģõöņļĶū! + ń żōź ĪļŁōõóŌžšźęäēń ßŌ ž5".ž ņōŃ ēß.åīÕīöŹśśłÜģ1Iüįöä%āŽ÷ć“"©»8ßš)ē/üó3@*õ 6Ėķ40 ö ąś°Éī§Ē:ē×õē)BŁŌņ õęēļĪėī%’ĖÄóžćšž Łü3ÄėųčŹ#5÷&żė$ųŁõłõÓī5šŚDōēåē%ÓX÷ ść`Ž’’ŚüĢ Üķéķé¼ ń'žŁ'ļ×’ūāźšōé ’Śū  ŻŻķ įšē@ļļ÷ "’å!śģšōžńļśäņ/ŌŌżžųāé9 š÷łšęńÅėžöųüü Śä'ž.öóóö’ ąäņļ$Öü$óŪ öžŁčščöõß  žł÷łūž&%ī4ńžū:’÷ūķ åŲķęč7å "ųēéÄ!śō =ćł/üķ õŽ"ļĻā*ž ėνųĶ ļ āń įćš*žš/ē å īŁ*Ėלć÷ŚćžÉ'!žšąōī ß!ėų8Žģ0ą õēī3ł³ŽēśéGļēÜŌēōŻõDō֙Čķéź-’ųäńłŚ?ŻšÕśīś"ņžś%,Åé’žöń“üŌĻāÄŪ ĘŲ("Ø1L÷!!cÄČ/śš5 %å*šīźņļ8%ź €ČÜ žāC? *ūiļé ś¹ņ° ą-ė4ų8½hųL0ć Ż āįņ „ ųČżßš ēāĄ. öYŃųēęõ öūģāõÖž² &ōę ģ(ž(ļńż1"!ņśŅčžōäņ’HĒŻįéń`ö¶KMžÄ=żš+ņž)ć é 1$ēŽłŅ ķŽÓķó!/łī’*ķ ņåÕł1żĄ÷ėčŌūåį4)’å(ģįā%āŽžŚĒ õūļč &¼ēõ : ęęłīŚ éą5üņ)÷žļš! ćłó)ö*Ōųó’ģīä󞳌Ėńļ'ļ)'Ķå4ŃęõfńGŌž "-AĪß%’šüüń@žė2.»õźÜGüŁ* ( ńż%ł$ó ܀ōū’ öļļūūÜ 0īģöųÕüł Óåų ŲÖą ßč ä!śōōźõ " “õīļńī٧šüīīęó ūL<ä ńņéäóźā’ą .öl8żŚ ³­įć éqķ0%ąé ü’Ē!.5 ūųóńåÕäöÕńüęöźćōńń śóõ&!ēåń, ąóśTųäÓ3äś )éÖ-ī÷ŲźČōõ3B×’üŁ.ššäī ŪŻŅ×ķśłŅ ēüņ2óŻæ>×’׿ł(¶&¾9 óéęķ+".Ė łłģóŲ9žćö!ē8éČķóżš8 DõšĪŅ Wół Ć׳=’’=¼Žö!4;ųżQÜģ É1Ē «ė# ŻęłīßõäŹ.Gį!üóó’īźŲé1Ö ķŁōåóR"ļóōüņńŁ óōš$Š$ŅSś„#ļļĢŚ6ŻżŪŠūõ°&łņɾ ,ņ'ŅĶīäģ8HŪõłśėš/ōÜ?ūĪéĘÖ āö-$’)źģł± G2=­2čóéś¹ōę-ļÕÕļ’ĀĖTŪ'ŻģņĆėKķū7 Ż#łŪž;+ ųā Ś ā!Õō ØåÄžÅśę-¶ūõµ¼ ļč<Ü’ū Ģń’&A $+ÕGų5"Līīļ&9éĻ; ’įĄ&é(ź ’ü/*Õč€üżä(ōēŽ÷’óÉ3Ļüb°õś÷É ņū!"€`,)BųōęśæŲē @##ä  Ö äÖģ>Ä żęõåļ#öF3šźöĪYō- /ź."ēÜÕēŲśõ®ŅĻŁ/ ēōśĒI ĪłžšĢüŪīIųõ.*$įćżL33 ģģ> óÖ š$ąćÉ÷ö ßņ×ęŲŌ 5 īE é !ėžųŚ ž3.įąŚōŅåł,ķšĢņ:挜Žć&Üż ļž¹4 īŃėę ł ŗŚĪ9źö²ö ¾ KłćŁē1Śžęåł1:ŽÕ;÷žåņ’óä&Ż·ĶĢ0įóņéŃ%Źšēń±ßė!.#ńņ ūęÓä9ńaļ!žŽ,Ü1™ Ž(ųź üų %Ż ®NČßģŁ #Łõ ųš ųķ> Źū1ōņŚ ųķßö÷ūųōåźņĮöÜü$! Øę5µ,ĢÄ ņß8Ķņż:-č š%éńįšńķ’šłż÷Ėū"žķśēē*(= źēėź’Ż ŌčųŪ>ųżĘŻŪęŅDōóÅŻõśŠ5ż$Ņ  ā(ńŪ Ū#×ćT<ō øļē)čč( ē*ē ōŁÉÜä7 ōÕļ ń ÷ōß ö ŻēŹõ’õßäūęį’Ł ŪżŅß ü#ź ½ ’žš¼åėł’Ņęź÷Ņó õó &Ņ!ķņ4?ęßÜŪś.ūüį2 ĮćŃÜö:čżŲ÷įźŽĖł2`åōźĪšŗõųäüŪ éńč = łāń÷īÜ)óBŠÜ9öźŠ ć*.ż"0ēņ„ėāļ4AŲžF@)ŌÓėó éõ6 ūżĘBĶæģ(äų½ö’żēź÷+ ū½Ęš'Ź ł Œ ĘņæĘ(ż’öēśų#% ūļ)(įę1ź Ćńī’šü-ņļĀ ż šöļĻŚļūåčś’3ŻéŽūĘę 3 ą(óŚé’ ’ŪķńČ÷ż(½BĮķ+!ßŅą*żżę’Ł =Ķ"ų×Õė Įåóß,ś<Ś*ī>'äÜ ūō0 õōöģ üćż÷č&č×õ õóūžļūń õņä"Lé>8&ēÕóśč4ū÷š Š-ł"Īłżę±)ņöīž¦ųļäž 俬üĪ$ČŻ>ķõŚ -č.ż× åõą÷(ŪžŽė"ęīŁ"ųłēżū Ó’żųūöķż/čé) Uļž8ó#-JūūÅńłä! ć3ļšįŹšåęõ Ś$ų ß53źēö ńūüÉ7šļå­$ ,ōFī’ģų÷ńč*ģī?üč !1 ūū2"ćšņė(ü"÷ßõ³ żś/łū ’Ü.äńü ąßā$ "ś'ó ź ģüĪģųū ūįģźł’ōõę *óīŻī.ķ%éÆģš× āķķ÷ŽčĻ)š%ęū(Žä¼ńŪ’Üīß’čĖźÜå Žą7š ēėüš( ų$(- Ōé!ķŚlężü¶ ķŚč,ķŽ%Ūķ$ŌŌž ķļā’+ 9ź)ćūźÜåæ¶Ģ#ßÄ6ņ÷RūüŃņļßąéš'ć ł ł ļŽ’ńF šéŽųŚ&3å āĻ  Ūų<īöüŅ & A,śķHöOõ±øšņķ 83ńķäū&Ģķ*ėÕģ7µ žåņź&=)śÖÓ ’įžū÷(ÖŪ*ł äóŹż"õ¼īŠ  Ó)Ō ēčķ÷īŁēś €öā×ć aØĒßō3’ ŽĶūłĢ’°łę ßūš,ąā÷ ü’&™öķī Ņ ō å9ļģŅļšžāźžŹīś$)é ś’ōīĘ  ī# fč ī+3ńįüä; ńīü ģ*3. Ó9ś Ļ'łųģä!ÓGōūćū)@Ā ųóņ–Āōņ)üåŲ2ž #&įéś(ß ’ü å ģÕŠ÷żš&ņ !ī ą:žż’óóżšģ=óŚżųā#*÷žž! Ēųōå %½ī揜Ņųšłźöž !% śāōā śÕś %ķ Ķš+#õ' ŲšĒõ! ćö  äü č*ĶōĻ×’ ō"$ö0 Ķüń ģAōīśŹõ ģõų) šļōō"4łįģŗÕšć <(ę4$īņś-éōęē±ś źž*ūėłÕžśūū üōßųśų-$ ļüśäóÉĖŻ "#-śų_$'čė’ńłń(Äł÷!3 ŁŻ ’źé E įčóūŌćóćö×ķłžé×ń.ł54ź!ךŚ7)ü ēŻśÕ)Ć !īūę'Ńõ²źļóĘŅó)ū  Ł-ņś"CŽä Ć.ó õūåčėė÷¦*+Õā!ģĀų+ņŽäõ !.Čßą ėū§Ź !ąÓź ģ# ōÄČHÖėĒź śģ"šćĻęłŃÆ%Ō"žŃŠŠć&Ü$*żū+ńQĻŃö(žķž¢’+ ēōūļé ččģņ9 1.&­ÕŽ+*öį#9žļŲĪį>žŪõ "ö8šłģOžHöŅ /šū·Ūķ ņżā&ļųÜŲõķåĀ8ģŪžī÷ Ł AĻć$ėūįš1ōéł )ķ#žīĮ¶ü%Ż ī ’ņųĖś!āśēÜēģā7Ü%źśņźāē( ųÕóõ$źļķ=”öBō&`ķń÷:ä÷čŽćĀÖé71š4÷ņ üß×QĘ  » ×üóę8ÉŹųÓ’ć śā -%8 śųś čż8ܾ,/ė!ųÓ5ķŌņó '’,ąłŚåÓņķĘ×’É"žń%žżųFż(’ 딹 żšö’ Ż4Žö*, öö,ą! ÷ńū%įźķ÷ģåćńķ%$ę;ĆååģŽĻ÷’åÜēć÷ļžźłßöćś¾÷5.'ÖÕęūńšć ÅäŹī½ŅėŚųŠó å1ÓÓśĢćķ$ė*źåŅKēō  ųļŲóģĒė ńŌ) čłžRŹķ ÷ł Ų诟ķ1ßÕ ęńśę!ÖŪż öųõūóõåøåźķ,õ1÷ åčž äč ÷üüųž!ŃĻčķņģäēūżüųąžčśüśģó!ż5ū#čž<& ōļėę÷ öļ éōźōģ×ń)Äčšäę4,Ģć23"#õ"ęķ,!ÖöŁŠķ!NņļėüöCr7į9}éļ9ŠņšĘAõ!M’GāłŻ'"4÷ż Ų#ŌÉ0ĪŪā# 3ŅīŲ ŁäÖ4-śėÄóįé× (꥜!÷ü’ ß(öųęń: Mąń' &!īšŚāķś#Ó ķ cJžõÕ ×#Õ½ļ)č?Ēū Śśńóżķßė Iåßź'¦ž ÷õģ6ļōō’ óĀūśö õėüķģīŚņ<ąĻ$#ü5ėõŅ·÷įüź÷÷öāśė’ūĻōߎšü)åīÜõ-ö=Ō Sķ+Ņ ż2čq"Ćä-#ßłłWļüŅõż ’č ’‹ ’茣śś) 1ÜšBžŃē Ēóäŗżšęö4ÕšQ Ų9ėłė%Šą1’äūGé÷õ§÷ō ż!īż# ģļį ž] ģ½éŪŁā čķō#/ūōżļóź(Ī’ź#ö< Óūż Īķ#µōžŲ063é-žņļźķĖśŲ+ēōõ’ üż’ķ"žŁčó’ńéÕķäįü å'ńü÷*ńģõģĢł0 ēóéł#õ /÷š ĄĶõgļ' ÷ ūžÕń’’õżźśéõįś łäü×(Žņä÷Łņēį ÜųØśųž’Ž $ÖķŚęćėń4É$ļģā,Žģäžźł$ßõäXŅ$Ūų/åņųȾšüüņ %Üćņį"ŻōŚńģųā" üžĒä Ō! ’& ēķ 7żõźž! Öģ %*Ņł Üģ’4ūū üńõ9Ō#ģŚä š×łčüżė'Üēüčž’ų įךó 35÷üüśõłŃ2Ł,2±żŌĻāźīļö$ļ ėčŪł ×÷ķę'BśąłG +ć4ś /" żū5 ö õöń08ŪņżłÕÕ×’’õóź óõÜŚō%ė āę Ė#Ō )'Pņüäģ.ĢČó/6żļ’ źĖģóK"Ēü3.éņŪüļ2Ūę(ä×&õāą1ÜźōŌóŃ -łAłżšē$š ĄÖŚ šöč×$0śš*ݰāĄėß õū õ&¹č čņL3 ī%žłŚśāĶ 2õ™c(,Ģ"ś ż)ÜMÜ÷*żųõŪ ņ9 ļó 2śõņž# ņ÷ęćīäß·ż"›-ż6ēńŹ0.0 š÷Ü&ųōčéō*P÷¾$¾Éž«?8- ¼Ō)ĶõBš _Ćū=Ņīþ A3DųŪ©Ōó<  ćīņš ­ˆņ"ÉōŁé5ćóäń Ļ6÷ŚB ßīž(²ņņĖ# ōåģ³Ūģ Łģėś÷żńł6äńÕóÜ%ź÷HŌĪÜ#ńģBūŪB ä Ž üģß5Ó".,ó%,ŪAźŁęčņ6Ešķ’/ļõ „ģ-&ųž#š¹ā÷Ļ%ŻŅöŽŃĪ)Mū7žĖŌ ļ»é ż@ÄŁO³ų 9Š9ś>(łČ,YŽŁŻNåō)ÕąŌū ćō2 ¹SõZüŅģķ"¹)æ ’*'å#]žõ' žśĘūšēÕ(ČÅėE å Ā%6$ą &Ą0ņńō>§0»ö.ņ+ÜįĶ ś4’Üź$ź( :&ó1ööŚŪ-Ķ" śĄö äÖĖ/÷Č#źłÖõ'ö÷ łĻ!é*ų$ /š  JżŽōÄ":ų ėĢĪī*ś% šßō4éü1ģ-é")ŲķųĘł·`ąŽGžŃū÷āńĮēģļļÕī0÷’ ņõ+šį'æę%sč%ķ5ļńóū+ ł B Ź ÖJų Åģ!łé ü(üųé+Č7’Żßģ(2ß!ńōĖõ×ÓŃŹ ńą JŠśĻÜ0ÕłĮŚV ’#2÷Ų!īšŪķš õ 6÷ŁÖ½-åó°õžåō4ķ7æ:ąó*įßņē÷Ųü ģŽÉ*ž7ó/’ /ńķ'0ū ¹Ü÷źāšŹé8å $ó4öļ!×óś&Ņ6ļöč łŻ īļ. &ĀNļžš õ;ū  Ż ńłŁ įīīöźółż'õń’$ī*źčŻĄ,ėļīššōõžž ÜļŽķ+ü5Fžž3$Öć(ää žŻūäīŻ4ąå ņŠčī:& ū!ņ( ÉņŻ+ ćšš!ł Ē%åņšķóė#Ųū»ü Óæ č× ą%ńŪäėĒRó+Õłēśģū%äóībšķÓšćķŹļųāžą!żĖō ł!ń#Ł Ņ%ž!’!Ē’ŪķķéōąŠń\#:X#ž Ņ15łā<żļłŚĆ’!ēÉ+&DņŪģ;īŁ.&2ō#ŃŽū0/.ŚĻ.ķĘć8ę.ąŅ#Lßé#Čą(Š śĖč6ū3+öėóģ'EŅ ģ±Žė*žöŻ ēŻĘčēõ Ņß’“ć+äż’ č7Ņįļüī 2ō ģ&²ņāźßśåģ+Žķ!ÖžŚŚš4żåżÉ× ¼#żć  *ņŃ ųß“śčō<ėė÷ž@éķłā!åł’żķćś B åś¾ėņćüą)Ģūžō*Č ö?āŽ īŚįīÄéŽ%į’ū1eųĒēBżÜ,żóśß!äųõś ź  ó 4ōś0)Īłģ *žõę'ķ ¼ģ×" )#ĢÓųģģķųŻųč6ēńļ$(ö Øļ’ę’åĢłż)ž$ųėü1āīüķäģ÷ć /ś$äĻ".ņŚ1ćłķüņōß÷ģóö –ųöųŠ> āóūł2’ÉżŽ'ž1żŅķį ČŚłś!ē%ųę!ķń’öļšīŽ6Ų =Ū!?żćó6 !źä)ō#ķŽó×FŃŃ ņžń üšŻd$šõ=ķ $6(ąöźōļł×ļ ½ų4čé(ü½!žõ*ģčö'ū÷ķÜ3ėķ%ÓķC Ż Ó īõ±N ķŁż ńŅī 0ŌšōžóŚś»ĀĻł ūżßV$å ×ēĖōłļ/ņ6ļś#üĖĢé&#ė łŃ%ąż3šę! õ é%üõéėųĖč =įē-æž +ÉōóĖÖī&*YżśüōģųóĶó&į¹ņėćłå µö ßž))ęó  ,öāŁ"ķĒåķųž ö1Ó+ķäų åę!*ē3ü.óƹĢÅQåÉšćÕ'ś%Ģ!.õžüó’ęė. ŃėŻ!&÷äöö$ńō2Ż/' źÜö ĒśĮņüęņū ūłßķįĆś]&5Q!OõŪ(éłä0ĪH Mä Ż×ĒļäŪ 9ń ļö4ęā÷źķą ö®ØęįöėŪõóäö-1ö#3õ’šõMóāĻ6ŲŽ ĶŪźRDā÷;čÓēą¤ąóōżżĪż“ėųS#2ž-ā96 ōūņŅ“„Ż)åó&Ķć ūčüę &ńČGź9óõ9 æć+ēšŲėś! ED ūŚŻÖ LŽņžÜõŽū0A^!Ūę üņÕ½Ī9Ōž-É· Śą#Ó¹#ēėūć ­ŲÕė,łžōóŃ<õż÷*Ė8/īé,Śšī >åļ$ä*÷ż“ķģV:ŲļįĶž(;ĒĄ7ķīķ’Ē'Ü3ü! ž *ū0āąžÕóüĻÄ ’=)ŽAIõ ü%šū!ŃĖūŚĘåšųįAׯōäįź ī,ć&Ėņ’īŁüŅŻXģŁ ŌāŠöē źļé!%ń”'óĖģęŪ  OÖćBųė!åų½%čóĒž¾ŃęüöB$ž*EHĪŌ Łńņ-4ū!ī+éī:Kē$ ’ū @éėā*"Ę×ū ą8ųB!Ćė)¼ī(łā  ×į żķ ģōūļóńåęō ž,ģäćūååĶż ś2ęŃå źŁ÷üÜ é óķśŌóĖÅÜ!Üł)'?Ų$+īBųņīēųŲēõ Ł,ųcšŻūäAāž _¶µŚżäé×÷Ņ5 ūäśČšėüįāž.ŽõĖīłńR#äõą ¼3Ś ņ žŲŌ6&Ō?(@$åõŪ& é@6 üó² ŚMĢčŁļģ$ ąPųżĄ‰éÜųĀ ß-ąó¹Ńž’ā¼#Ö»ŖčłźŠīņP//įé!ÄøÖøŽćTūö)÷"ź žłł ’4üÜęY’÷ŪĖGżķ’į 0öģņ6ü6õ=äõ’%õ żŽĄķ/śųŠß(ęŻ<÷ õ- ÜśłāŠFģõēR ,Įķų&%0žż-óą÷čó?Éīļ‘äęŃłņ&ų6öū2õĮ'öųäü½Ō÷ėןįü ē¼ėߨŌķķöŪšŚö=üųęź6ÉõĪóūĀ’üčķįåC.īZ&śßłżūćā ŅåÕ"č’* GDäōųžŃ;@Żšżčų^Qų×9<0ųėĪĪżõ×ė·ņĶōŪ9ųĢ”&ż ķĄž šżŚäÖńõ$«ßŌīüõŁ'÷cń-čĘ Ął E ī’ķĶŁż0ü"óŻQ"Į" ŽŠżóżĻōģ*HģBĘ.Ķģ2ćŁĀøžœįÜ 5 ö$õŠĻ½į³źJŪ#ēąž( ŚÅ ķ5[ž’ķėõ’ö¬8üõś ±Ūźšń Č·Õ’ä$žßųĻ õ äė)õž",@’’ėČę,ĘāU²ŌśņßŪßā’å^ÓŽ'Ģ- Õ,šü0 Üļ>"šõņ莞ÖųŃēäō ¼ó’ńiŪŲ"<Ąź)ĻłńßČń1 õ÷Ņüń*ņā3 ī łŃżŽķĪļńŠ<āžć’ą9ś"ģõģ1 äō5–ĖņņžÓÕų)(H;+Śžõę#õńó¼Ń2Ž’Šō¶)+$¦Ū äõß äź ø+0*õąó !(0ŗķ żčõ"ĘĪ')åįŖ ņļ ÄŽŻ $/FūųĆ! ˜śń³Ē÷čŁÖēä*#ū2XĻēŸ ó1¹łĻĆ’.śŁÅĪ9ŻģęBHF'ž¶ ’*0’ēķ÷ ē°Ęö½ ¤ ÉńŚŖüõę %,ć+#źü ó?DDĪŌś)ł1ä šāŌ±ŪŠ7Żē ļżŽŪ ė-š/łŻ%łźŁ 4×čļō$)ćŲ[Ž&ż ģ =TŽ Ī:żŅ/ļąÄĖĪ7*<öõ÷ łę¼šĪčT=ģü÷÷ FųNŻ/ņ%čįéćö2(ąžõ'šÉĢķ3č üģ 4(Ų+ė6 C8ł ö1,ęFņķ÷B’Ś ßĢ šģ ?ŲņėŚņŚ3óĀB’Hį 4Õ’ ÷-Ģ"½#ł“čŌ¤å+ųē/æž:»ū3åÖ ’VČž#1Ŗ*Zć Ž20 õ5ŽĄėßóįėŅ Žcų ń.'ä­9šēķóĻüą9ŃO-ÅŻķÓ=ōĀšöłąĶ ŲØó Ķüüóš9ņ>ČčüDōųė$ó=óŗńņóÖöĘ!ŅAó$*Üćżī’ēń&×ßć0ļļė5ūÖšīżéūżÓé Š 65 ņ, öłž°żł8E ūĖąźæēß’>±ężšKšäķä ļŃ#ÜčćŃńÕß Ł½čē ö‰ä ų>1żęæé-ü'#Žłł62ń ōäü/ņ"G5üńīńč 8ż=$ā 裸!ķ÷%,Ó8ÉžįŽŠśŌóåóķ±(Eī 4Ōü’Żéé¾ķµ47õė.żČ &+ž$ę&Āżü0ģŁõ÷#ßąī įāżÓž%śķ$)%č &/ĒŻ#ćłńłū’&$é š÷öŁŠś źŪÖ!ė 0ņļåĘźįņż(Ę? ē ĆāųõÉŪĻįężę!ņł ė,$ūõÄĢüųõž śóé)’ĀāūšžļŚ!Ć· ūéõ ä ü’++öśōīęž ų*ćōī Aåń÷-ų6)ķ='Yųęųņē-@ź'-ģÉś…š"nÜ(üźŚė ,ńē’ü óīŠšåQńĖŪ"’ųšåŻąų/ŅėņĮģß5å€ųŪļģū Łņ5* łšėł0ęüõŁ!Īl O‚4óĀ‹#Ņf÷öžņŅ 9÷Ō#Üæ?$ņŲ éöÄäė;dłéÖHų0ÜĶĒłßē"äR/žĮńż31ź2ó ¹ž ?Ł×’żׯł %éžīųDāŃ , č( 'Ąė0) ž Žģæ%Īå"F ūÄŲ éō½÷$ē 8öų„ń+ ēī׬I&ŅīŪŻśüņ łū)öŲžń'ēüńĘų1÷"šņ/ņ÷š5ž’诟ļM ) āź$ĆīĻłžšū’Ģöź ųśįżÄļŲł!ņōĪ3ųėõ0źĒQóöōą čÖźęĮVęķŲśļ7%żźęėńÓó8čų19åń²Ų½ šśŁ öĮ6/0Ž ųÖÜšł’ó 4 ’8¼ķīČõŚ ń>÷ ó÷š* ā%#’ ū;ļŲć- Ż šó.Ż(Nēč’éīÖšüÖå »š6łģūö!÷å żųī!ĻŽ[ Ōņū<$žāģĮ"%†Ņ5!.(ń(ą  Ū&Üōķ ēČūšį 5ē,E2'³ Ż cŃ’ī:5ūū÷ ēRļīż’źķ-2čė Ķ öāHRķżŚ/ÖóżÜ!ś÷äŖ(ū:ż/õéųīwäųĮ’ā #9P²Ó01żōäßåæüĀm'\ī*,/ØŠJ1“&ņč’*OćšĻ2/$Ę6ź$¶Cž ēŚLź“āÜÓČūź÷ ųō '¢ę:ūę(µń'ÅÓåō’Żļ)Łš]īżž"÷PąśRóņ.āŃ  6"ł0ņŻ’3ż1"$, ¾ óŪķ£ō®!Ģ'Ļ7ķ(ņŅķ ü ōööųņ’ć,Ć>ś (ć%!ćģ’óąžŌ)ż  ¾Č ÷ꣿ!Śęµä[ęšćįßŪ’Ź#ćÉż’Ļį#5āąšęäįŚ/"'ÜĀė’;-Óå'ļłōč łÖłKū Üńōę "*ū ļńŻė,"Ģädģīīžä&'Q łN’ųŠ(õ+üÕīå õ'ģł99ńķņĻL¾„ ōęŪ© ēŠ³ģö(ė7ßČņ1ĒÖ ćņCä'ī÷& ņš ļŌÓGØščšōģ0ĖõćŁ>Ė5öżŽ $ Ś÷ģöÜ=×ę č’+šéłÄ2ś÷’Fśõ  ĪKā<’ō éćķżĶöü ŪņŃōŁųē“īńń%ėį9ģńŽėč# ä)īčßøšśüīå#ćųįņģōü žĆéčļģļü.öśł’ōżčóGčķśĒļ ė%ęė š į 7Ęö4éFće¦õī ,Åó"ā>ēīŻFūŪŽōėėė7ė%Ü ķż ¾ ėóĢŹ& čK÷7  × ų@(ńįį(žģŽ0ī4%÷É67%;3’åž'óęģčīž 2 Ōźń,=Vņśõ!ĖAžßżü&ļģĖÓW“!ß:÷ōšęųęÕš#Ģć +ŁąB)ż7’Ö Ļž ćÓõÄåšėįüĢ*ņŅäńéżķūÜó !Jüęź.ßķļ³Ū8 : 'Ōį%ß Š" ņž9ō-łņūåżR:å’ü’4ōśāųńšö,śč!ļü ēåõÅß/ģ7ķĶžū’ öĮ+āĶż+ßóŻ*üēęŌüžŽē Ię ęę÷ ż2ßūōŌ÷ģųȚ׊īÕżņ õļ į źżüüõóųėīéęŹ÷ķżį $ÄåĢä+Āā’łžóė¤ōē*ę# $čė0ńŚ#Ķ žöźń÷ ¾ĄŽą#ČŁJ(ŌBłęŻĶūäŹFś.ū÷­ģåģÆį"ĢĖóś÷õōįóē (Ü+ķõŲ)!%ī Ż÷ĢÉ;łó)!6×äŹTĻšģõ šÕ żšįįłĶ E÷ü’ Žēšņ ę)(ŅŚŲżįßė#'Ōėšļļ <Č$ņć+ķå.óĪöžųéŅÕĪōŁł/åāłżęķÜöŪD[*ä ōv0ųėŅĶń@ź6 żö ŠėéęŽģ!ŃŚŠģķüūūęūņĢ ņž)Ž" Īš!é+äē Ōłčł)’ļ%ūė0äó ü ßV÷öčü?īö×ķ'äFŌõķ#Ņüņ ęęī÷ōõś ū- ņåż'éüśöŽłūŻź żōš’×’ģąūąKäē ŻE āüųĆ×ä,ķłŸŃłŅ ęŪ$6 Ņųź$ ūąōß Éęć(#īńųüųń)Ś#ź(Ļ) מšē¹*’üšńęźų'žGéį Ұķł’Ž "÷ č-%Ńźį#żīžź*ŗ#ėėņ ß× ėµčõł:Ż ÷ę5Ž ŻŪżÄų8×: ļīé” šHŪŁ4)õ:ŽCį 4 ółŻ įŃõ1Ó Žéžī/ć‹ É ī&ū ŁļųŲŲ@/żŅĪż ÅÖ ł ģŃė ūųż-"æąŁŻ÷ūń '.½ŌóĪķčžž= Öé(žĆ MėŚļāłłźüõ1ńäŹńäņ3ļüź%6ĖŪ1ö÷ļ/Üūš Ų’­˜!śłÓžł  öÕę"ŽPųźåū’é%õ(,!ŚTĢ ¾ Š(šß ōķįö&ššųńį ĖŚ»üšģŻŲŹ18žźĪ Ž)ßÓ Ūż ŽŹŃė ÓÕ!ŽŁ%īįÜ5&ßüŌųļĢšėōė%Óč×éöéQŅōÜÜ. ö÷ĶŽ$Ę’ūč_ųÓńś łŃŅ ųńåŃ2ŃFšŃČśš äŠĪĶšōö$Rż!łł åš (ļąąńö¢ŽCłŁķ)ūńüÜ.8čćü ±Są+¾ģ `¼ī6öšÉļų1čłļūĖ/éżČŃŅ ó÷č!NlłūQŻåEō’ąBEš3+Ūū!ļķ$õūąäą ĮńŚŖÄĪ, éĶ >čųā-čóŪēąĀąŅČļųü)·éÅŪūż³ąķ ÆŠÜż éĶ.üł×ĖŲ< Ī½ŅšĪ(ōĄ;Ócģ3 ²üéńUM“Ī# ķ±ÕēĒ"÷/śĒŁŌśž ļŲīØēāŽž:ķÓÜå*ė³ōŹīčūłßÕéĀĪ #%ėDšąčģīįģÖ6¹üģ« čłÓūćśēQ1ŅčŁÖł ŪŚä»ōęåĀš³’ėļöķ¾ ģÓ=ŹĪåĒężČĘ5ų#ķĀé÷ė!é-ćŗ)ćōöõźš ä Łė  Īł÷ąšėŅķöńó± ōóķćšźēŻ’ +ż5åū!!÷üģī0äųĀę Żś"Ļ׿ŻöųÜčūģ- Ööåū#3żųĶÜŁöśų ēżźćžźĒŌ ó8ųöÜżéłź%ļćŃÜżō!ī&ō,āå,ężżčļŪŃö ćšĖīõčū åéžųĢåéž’ä“ģ ē1Ü5’žśĻĀæżéüŹŁõŽšōĻžźń.Ņ,7÷ ’õōüŻųųģčų# /żĢųŽå!Éčž×?ü&ūśõ3äķ9Õ2ć/ÅėŁõ Ī’ę%’š#źńüÕ Īö åH źļą³žü5 ł łļÄ+ļüåŽ*¼Õ$ŃŻń9&Ų"’čŪó äÉäōšŁ ī'Öü Ķš ! ż øŽ ė’é3čó« Ģ<Ōż ł”Ņ% ī;śé ā’C1階 =)Kŗ >ū,&ź6Ā;ąĻśč ŠõżĮąćµ &Õ>-óżų% ģ °š÷éģ÷õģó —+"õķ<ó Ń÷Ö ś 0Ųø.%š*&čŅóž ž7śģ¼ł5įĢļ÷Ķ*÷ķķó*č@ÕŅńŁĶBćū" ’ė’ę  1’čPģņ ÷žü÷ö!żŚ"ö&īšłłōž ÷'äBź’Üł!œü/ó3ńö ĻžÄęšųŌÜō.ūßōŅ÷":õąÓ#`źł Żģ īõńŚ ģŪšėųŲ #ėūŽAÖ.żłėāćų6÷©&īčļž >"ż×ņ’ 5ū ńė ųĶŽā9öJÉ:%&(ķśńŽQūń ²ķųĖžĒ ųéžųż óŻģÆš,źŻōöÖŠ ę)ļ11įžķųł 7* į×ß ė %ÜNĀš’ ė źŖ üąHņ óīķqū%35÷ ńÖšŽĒō3Ė(ōĄåü&-ęõ×õŅś!莟ėōéōćó ź65ę%žLĘ’ļĻķKŲx |Ž4ā,ā÷Ē׹ӊąķĻ čśŪ*źµśėß%³ńōÖ5*/öü¾ų'Ā &šżvæ!Ģ*0гķ—æ—)&  ą,§ķ8ź¼ū4ū¹ģē0 ž(9Üóīüś źųóßo!,šĪŚ_Ł )ś”Ż> Eć Ē&īų%ņ+2īŪģæž¤ś.ÅüÄ"%•āņų5Š«‘Óųų#Ńü4ū8Ōūī¼Ųį ä ģÜŠßźłļż(Ł čž.žū".Ūłģ=O+įĪļ ā!Ü ĻC4]ī )ń7µńž÷ēł+(Ē÷ū¹ōĖ3ģčĒ@’K'Ćń;µžžŻłŃčņļŻ äśāāē źė2ółSąģņPČś@ģČk= ’Ó& UūŻūųń+Cŗńõ?ō-ē: .ģ(źųßž ōųē³łÅźń& õķ&,8īšćķęÜ čńžō ņł Ō!ą ų ćõīĒ5ų"’ ņšķķÓ9óÖóń0š÷ų óĪ   łūļ"*Ż"ķŅļłųé9( ÓÖ ķū@Õź śēŌĀżčā,OķB āÖ įź÷Ż Ķēņõłų(Ųīõęō÷%(ęŁōõČŅ"Ė2žś =)ēł# ą6ÆöĆ’ņ ńĻ ö  łä+/’ō×ÓāõŽŻč:"õ BļķĢ ųöŃ 'Óā·ś!éBéü ņDż’Ś/Ó÷÷ ś Ōśücėęō ō Š Ī%ęÖōžėäó &ŪÉ ßüåżųī &į ķźō-$ē(,īõāńīśüļīūļėÜÖ1 čįūÖ%åżŪę4 īv1?ē  ū2óįć€ņżé 5+į"0 ōńéźų6 Š÷7ęĪ4óųŪŹÕå÷( ļ=ū'źÜ éÕ )ö!ŽņéčŲ Hń šźŪüģ2Ś÷· ’AŅęÓöļē ,ņ'»ÄÜģ0Ó#ń&ŃFĻČļ’÷ś +JŪóÅņ ķĘÓöä;0 ]ą­ )ų üŠ©ó ģŽ\÷ >é’ŽŚ!ń2ŠÜžųåöžį€ž1ö3óčšōū &üłķ`Bķ%Ė77ōć5 ó+'Éęŗ'ͽ?ł$ę Iņ åéŗńßš6-ģæ’Dļš!äķļźJ #ē #*,ōŌśļĪš$&ā#„)!!ńÆļĒ©ģĻ÷1Ņ«bļß3Vū1×P?,$ōׯł}į ĖżÕ!č(ŻŽT“%ĮĒī8 śžģ*ņļź.¹Nī„ų(ģäŖ#"ÓĶźßńĪ*ężź¹+Š0 ČĢßä£ ĪÕ:L ų!ä'/ė1śļŽ'ęŲKųKźņ2äś+óļõŌā *Ķ#åįāŲź-Š(ć ńĖ0ēā 鳎÷Ž5$½Ćå(2 śÓ7åóŗŪ;:-žė$ņ’ć’ß-#­éśī÷ōĶå ŲÓ2žśŃŲõģķ%ņ+ģļū,Ś~Żųų Ōįńå"ŲėõķÓ ę"ģõöēō ö I:Ķ)éź #ŪąÜä’2Õēś/©‘į˜ņ.'éóśųö"õŠļėłę>ź Ņąóßń9ęAū 2š/Q+Ž ģćųą3½EóņŽ&Õ ÷ Kßä*&ģ'ė,ŌšüŁšŅÖ’łüśŅõö+- ņö AAé‚éÓ 0ģ¼= āŽ[żźśŻļģXŠž²sūÕļź'= `ØX”ņ+€€Aéķļ±Äeał<- &!ßź¾BÆŻ;<’4ōæ.‚7ļöżåā'×Ī õ¢Nć ĢÖtŃ. Ż 4ŌŃ%UkĻö ųNŻ„šīŽżę&óÜ4\čk(#v×ėū“ŌČś+šOł’*4Oóęū žń٤½-’Ōåßēó%žݬ:Į]ĄŠźŻŠNC“3Ź;įōēż>‚„ā łėCCó÷¦Ü&ēń0īā!½ōéF ėd»ļ ?­Yų&ī!åļš¼05Ē 4ģ+²VÄ!ś 1æ1ń÷-ßŌćĢÉ5¶8ßÕń!ŹöĖ/īąĪČRė»źµ0šCK÷čn%Ÿė³ŃX[·}¹Ŗ?ן4;Ś-8 "Ļąø|ū!žpēćsu.€½ķś!鱞²2ńßOćį'Q­öąĶ©© *jóöéńė õ6%16%&%ČGõŲėéąŗ[Ųé /‹ėĖĻøÄ=õü Ņ’2°ņłZ€čš¶fć#ÓéŻ>3ö‡ ū!/!Źü&“čĮI 2šė-ל—ŅļŪ’'ü<0ß ¦ŠķåįĖŅĄęü ,Ź».$2æC)†#ÉÜä ÷żK7āņŚŃšč1>FéNčµęģ ;#ÉśüÕ4÷Ģśū3éĘÅŗB?ų?ęō(Ń1T QķÉ$Õ§īęųø “ä.)ā²Ó %lÄ” 9ļŗ=%’żšŁąjEO>ōiēī耣ģ ķZ/ķ#9É Y©÷ Š*ų³žDö #Õ ėŻ'RJ0ć£ŽĒ±"_Ūé¼Ļźmęž 7Ü!1ń؆ėʤ»ĮžU%æ$”¶?Müźš˜Ŗ’±čģń6¹]( ?0Ķ9Įl/żä¹­6š2ą€õš ū6÷fAšāć S)ßŅóńųŁŃ×Ā.ĪöĖ/Źņ ö².üÜtŹ| ķLžȗB ³3€°–ö ö» žą*ļ›bĆś 2fŗ((˜¾Öä!]y¾Ģä3ϬÖėśźĒdcĖŪ„Oś¦ į掯×Ģį 7押Ÿ€š?IĢ%Ś”ļjÄAę²÷'Bó(ÅŪĪŽę¹<šQĪMē"²>E§]«kóÓEEVä’ü?FyĄ÷éąņ5AļŃĄŻśžżŻµÜr¶ź óą¤ŲŁŚ° ü"Ōß;ćļŸūšÄ ė4dģŽ/ä„;ßÖś€ĶŠć'¦ķ ģĖ”67~"'ęćšīńgC%8)ś1Š]§®Ņ$ļķņŽĘ?śA'\Ž ÄĢeYßćņż×'+ōČ5ŚćĪümˆärē¦Žßæę“-i­QėvI÷eWŻöOÅūī31.ł×žö/ėL©ł .’€Ąė)&>ąj ŹīŪ,ŁĘ'ÉĶE"Āį:+ IĢŗĆöę߀įā/õ‹NÄÉQōöĶ@īń."1ÕÖTkķß;ݬ!Fö03Ŗź-5ŁÕ : 31ü@×jö>Ū«Gō¼LóM(I!'÷aÜ'ėśŁółŃĀNåķEČōBU,þ~«R¦ķ®ėÕ&FŹĢż¹$'«Ö”š Jīć Ģ;ÖÕJÖ&ą¾ģ4ģBÉŅO]'ż#_Ü ®7Š€ƒ…C€YOń""—ķN]ł4¼#·ćĻ쀓+ę( ü6īŪ0č² õ®“ 3(‚$ÖT+ļØĶŠ(ŠDĀNŁ9/Ż Ō°,ģ¼+ęEGi-p ųń R± ?ó |ŽžcłŁś;ĖŸź¶ŅgŲZ[żæ¼9÷›žŁ%#ēĖ"2÷± ŅTÓÜ>ģÜą§ņC_9š;ƒ¾Ūņ¼,īėMK— Yą­&ĻØŽÕAIŅįōöŻ įF RĖž&¹[^䒜ż$÷«+¬żų™IH’ķŽ;Ō<ąäå›äWõó<īŅÅ’Ł&źģ¦ Ń$ŹūP›5ų(TĀÄSEö9Ėīķ /ķT!ß÷ŁŚ#ĶMÖčÓ°Ā/Ł ź2:E.Xā*ćµ īōą€[pŽ*ŁŚ ś÷ĶÜÖåN&Į™Ó īśĻAżöĶŽņüģŪuŃJ˜×Ģ*åżŚ# śūšż[÷•ŹĖéš¹—ŻćŁ—Qä -PJMØŚīėĖŗąčŗM2Ų6żłćīģó/Ź\E~ 9>¬>ż¶ėÜō «Ą ķ Ö=Ķī,»>Rżé!óØöū +Ųdł’:²1×¼½ßåŠüRӃŠü6šß<ÉŅ2Aī,Å»ņĖ@ųS¼ÕĪł[݆OČī9.'÷LaŚ!,æ3‰ķǘ»IńH¶ląrŻŻ3EĆčę<%ķå'Ó>Ŗ›}ė²ļķŗ9~­ōüB$h¶+®#½+h¹ ļ'żįéöķÕ+ꎿkżŸ%Ą'½3ÄśtŻę±­ ė%åŽ3“9ų"Ū¾H\)¤šļž–,“CŻ€wS Kā8±ŗ· ļė‚§÷sć#ä!Č *ÖæŅģõ¢<äņŁĆų”łŸ’©×ßłų3ß4Āź€ė˜Ųż ßłļģżRypż%öńė=k Ó5Ł”8ąćņ?^ö-qSL„Ø&ü!ä< ķ¦ ?ż ł$€!1€#2ŹŽ\BÄ żŽĢbēēÜō€2`öFü€ä¼ÄÅžåH`ĘÆW²Ō>ŽĀ*.]ūĄóÕ餯 A`„"Ļ€żĀŅ€R4½ö=Ą`Ų?ź ĖÖŹAüņ×ø9üeTĶ@0@ØöC½ö‘Ē)Ģd¾sDį<łP dņä 7ÜųņQ°bÅūŠéņŒ½Då÷XvĶé}ĆIրŗž;śŁ57ĀĢ€½1ł7)G üīóļŁV(Xę9^fÓäDµķÄM4 &–šK—ŪÕ:IÉ8ū¦'„7µ€#ēńĖŲņėŽM[Üź6Bkg“ór,(śīö ³rå[&ʰ|„ōÜū§,YžŪńźī  VžJ+ć<飞Ņ!Uµ®/&(čąßÕĄ"&)&ņ F9ōŃś ÅžÅM½[ė,ļļŻ9±Š„šóĻ@¤č¼X Ł>ńė ž Ō õ×ņ„ńTóÅń»ŚŒ)ó"čß9Ž6€©–%“NŁėžWŗ åōä,:ē<äĀ6ĆĒŽLt ’Ü9ŹĖ0Ģ)1UGģ )Ś¢#߀‹@ĒįęņÓ¬$RQĄŒŌ÷źßēröļåą äg€éPģ“ōa ¼l€ĒĖéöߥ9ļ#žjc/YߣÜ~W/Q€Y'žRȝK’Ģ’#æ0„¬źšĆDŁųĪ(.ĒĀLĖ-šŖhвŽ@)ؚł’¦ą}џc?ģįśū ńźą€Žß‚Š!&ÓŅ(ą Ä s0¢€ōÅeĢü:ÉQ€ü;(æ €¾éLä2į*6ĒRµ*Žž%}ĆMüY!ļ*ŖÓ”éķ²@(šZķŻqĘA³ßÉS²ę¬Śī°2 å6šÕ%·éK×;ųŹŅ+=Lć& śÉÕb2¹ąē׃”Vƒņ$Ō*£Ż €65žEūīé ÖŅŠøZŠŲ$Š1·„;!(šš½Dø3¦’€ļ±K1馺äM»ĒEĄńŌ5ś¦©ī€×¾č:·zTąü9{Ŗßś†¬D*>Ć ü ’€ ]čó%FÉń'śĘ)Nēż - eH#(čźśIóóŲ-Ū·šŹķŠ)%ıęźė¶ĖńĢ@ņé• ÷ą’Ä€ö(\Qןó9Ćō U挂,ŃĆ1 ń5įįų€ņ¦÷>Ń­ćīĢĆģćŽR9bŃļ1`˜8W < ņš1ėIłŚ+·&Śš+÷ĄłĢå›;öę½å #ń ÷9µ åģ7’ĄE¤ā)8äł ²łeŠ(;&ٰźŠ+Ł āŪ:’IŲ‰¶'0šF’€« ļÆ5ĖčāYģŠń(,ķė üŻūĢkČõæā1J-*ā -+ēž, &¬0`żzņ$’ä%ś:óB8ö“ö°ß_ÉÉą(“¤'$)€Ŗ1ē [śė˜ū6é[+ŌŪö$Åćę!=¹ ĆīĒįWąŚźBµv»śP¾¶:Łī:7ĶūĄ-˜ķ¶˜äR.J70ąõÖł? 8Ń”iĄÜ;%\€€Į€tw9¼UęÆśĆŁz=“tÄņß.mT×ļ€Å ø¦Øńņä“NO<¬Ķł7:ŽōżŚä·(åM3Ü4QŠėä]ēĀÕ%żńió&ØgAõ2ļØ",5ŅņEćę9jS€jŃŽ÷čé?ÕęÕ!ģŗ=˜FįĒ÷·ž¾Ś(4ŅļģĆ"³Lä_1*Õ<%Ŗļ€K`/šÓ=Ģ Į³ :­7¢~!?ŅūŠūńüś˜ŚŚłĆ× \īÖéśČį0õ€Ö?鹊/~ą!¶G»4TsŸą×€L†[¤÷ÜŲ¾q9å5ČØ‰ŻPĪŪRŪā-ł= ÖB ÄŠę="āÜ® É?_€, ,=ś*’äłĻŠC"į’­ó.·œĀ.:Ĺ:ū6C,ŌAC_K¾Üžęäģ͟ßŗó"Įū ģ·żĒĖ)V §?Ą$°żŠłšӀōó0õÉ$1 üJ6õ­Ņ=EŸ ~² ųū XüśµžE:"6ŖBىG%ųwńāöū3į>Ž/ßņn j…žēDģ®5Ń žP>’Ż–č×!Ižöż2LŠćįō *ķjĄĆ7Åź1²=įŪ XŁżĢLÕ\ńL$ę@Ä] ÜN@ėä&Pģ$< ’œʈŹFŽįŻa#x½± óN:.XVŠ3+Õ#JĪģM±Š«ń7žŁyW ":€žóēB÷"*>¶7Š9 4ųõJŻBŚģ6ĀóųÖŻÓäüąją#s8%!ŽņØįÄŽ$ģŲß €źgāĪ=ÖćMݽé!ź //cšƒāČ0 å(I§æó]įü¹Åd!ääč0FųĪIrŻćĀ÷[Ķų%Ā ØJ6čź?C'ėļ\ėčɰ(Ū‹ŠõśŲ/+õœ0õLģ T*ÅĖŪé0ҼäŃś š$į :čÖ5”ėżü“)ōöå 0äOžŅ”A 'ŽōśfɛŠÄżéZś ¹®0ĢŻ!ČVIīńžÕĖīūźµß Ē\ ÕRK ĢŽĶ\Ū-KA.)ü/E5šĖėżš-ĄżĀ>OÕ=ŗPłšĖ%ö6ņ(&« Ÿµ®"ŽP9%kß %$ų;śģ.±OĒ#H’ÜÜĘLųļÓ ł ūfę(ūØ9ę6?U. ģ(ņ ŅŪÕōÓā€ö’60> éö:£6ü8ćo>xčMކκOŻń?לL@Ńą‚ źę÷żŸÓĢÖķį·ī1€ę;€ī ŹžGØńgóŻßŃ?·)ŃO-ń)6™6€ ūv’ŅŲÉį d'ę"ā0;į×1ł=²Üūć ņ ĖOń·ēc Ę8Ōłēu­ūó?ėÜųģ:Oo ł&'’ N÷ėĮXŅķčkĄā(ūĶßĪ8’īhóē˜ļĪž7!3ŅĪģ5ļ£+ēǾöŠś!Ц"Ņ%Kfŗ*ĘĄļ »^©šĀž(ž²ó×¹ä~ŽĮzŽf.&ō€Æ/č’ ±,ėšń]\äx–Ó!2Äąā č,ß.cU ÷Żķ8¬7!ŗ壷¾ęE`Ēšżūå å_*åųŽä# ÖʏĘćy!5A-–%K¼L0Æā»oŖKŽŲāWLL.öĀŖÖÉņĪŹ‹ŪāTTh»7ŁUóZlA$SļIŅ&?½"@­Č«98ßŪūö0ĘSžčęŗB’žŅ_ĢČūćŲš¼xēfčäKęĖŠķUē­Ż-sÆ$UķÄ4Q×÷ļŹē«Ķ%ž(ķŃŅ\ßöź×g`±©;Į.ŪOŗĮ“ĮśKöÄ &ū}Ć''Rmņ ’½©÷­Ōń²;TżĀĀÕ@ČQš?Äłō€ĪŹŌēh’ü2oééēēŚr?š)XėŁżåēžeŚ ÷" mŹ6!*5’’ą’ÕļM§i€-³G$3Ż=źb Ż6+š9÷‹ūįµü1žŖĒæY  Ōc€ å-ŪÉ<„Š® ķ £‰ś*';†€Üe² ģō¼ l\ā@PvõĄvņąūÓ5ń»Č³ēĆč!ķ™0ŃōŻ@ų$éóīł Ń ńQ»š½ōõó᯾/&É8(“ Vī€ß÷'ČŖĘ:$a„£łŚÉUŻēŹ Č5üń0īģ ŗ:OP³²ø! ģś÷«ī> Ć&ģҼ2(&¹ĪģŁ©ć§ūÓ%ÜOKļįĒäÜ6öź‘ń1!/);āó/pž9“Æ×@,1;?ōŌęÜąPÜ2²÷ź±Ä਷Ą"ģōSF)ŚJ£/÷,ö<’ķŁ €\!9ćHõ Ā !ŃC”ęš÷1Å-õ±Ļ×Ü,.*ć ō$ "ü!ĪüŃ­5ļ!&õ²=Éä4 åžū@ Ż,W#A÷hõŃ2¼°#Ōųoŗ€śĢ½9)3Žā Tł4©Õ ÕÅžņ÷€śŪÖ =5ūŠś‚8SMNčÖī-ļā3 ÷€Ī Z$ī¾ėŗŽl" ÷Cš+3ā»:įåÜ 5÷ #ńŁ4 Śöč;åī¹žę Wē*’’#3ÄĖ š2N9ńŪ'U÷kŠĶ÷žHÖ6×ćĪŃżÖyܬ9Ģ Ņ/Dėó¶Mżeaß#аŪōŜé ³Hężļå4ćüÉśØ«Č?A>*B½ š ;¾~ą*NS).ķN'Ŗ•ŪČŻÄG"Ł%Ę34Ż€äŪĀJCRńżßŽŅ+ ’¹Ž:"ÅAäõ+.ßļŠéf§SĘ)’ ×& 5>śX !Č£é3!žÓż$ū#§Nįń'ė © „ZķTü?žīĄć'õJ’8-\鳥}6”÷> õ`ųž'1 Mć6ķ?€īŁźŻĖÓ(öĶÓ?ņēķ’€ō3 :ņ x¾ń¶!|(ĢN¼ĄėĪļ2äĮŪŽĘ5"ų°J,ēĆ,æŁ6ą €ż!ČDßB>d,ūÓG©ĘE¦ĪyČFī[Q %üņ %$:č4“ļÜć¼Šś’ 0¢¹4 aUœR4ČŚŃ“ßĮ<Ąóäū–1ą©ē]ŽćŻĖĪ)ē+O€H®üW71ģO”mūg)+ļæ!- 1?ą¹ać ǹ]ęB-ŻÕŚß,ź)śyļ =Āņ:Šļ’ź«īT7A$ėK‰ąć4ęŃ  ą3ķŖ¹]$Śä_0Āŗ»Üŗø ¶\@$-ä/ĻVžńžL ńö·€ŅŠŪŚĄėzOåīŌĆ6Qō3‹×- 13™ ß (œž2ü!ø¶¶ßŌėč7ŠkōĻā&+"Éę=ŲõŠZį&©ē »$‰Ų1Ū§Ų €Ø’ąÖźkę+;_ćčś+E~B€*ų×"čFĢé÷īŪR…źUć«tāĮQä.ėÉžŽ3Iō¼É×8=śłYO%±GÖ6G7\ź7Ó×#¢%Ņmćģ’ļÓ°+IAĮäÜ _čē 7ā!ńø 3Ķžš†Q(döōGŲ¼ĪafÕrN€Ļ $ā.ÆåB+š^jŅś{#4Õ…Ļź>/ńŅž Gߍžöæžū“hėėŚń “?ÖUļžø½āÉĄ éŪŪAŹ žµļ)ęW¢~ ó1įęŚ5ü%1€ĻÅö‘Žś¾ć½uĒŚÄė.śė)ōņŪL@8¾õ2%ž,Ō½&Pń$¾› Y:ņū3Ē+č#örĄ@gŅį¬TōąŽJõõ,£ „ŌŅżå#žĒćō$ž0Æ»“ū¼ŠHÜž»ŌF«ąīūč_+“+ß÷Å -ÄĻÄĮ:%ČQXfūœŲķ#ē ŽßĶ$öÕĪöÖ²ĢģĶ5$žī8,ęī )4ģD«ķ Äų†šéōø ĻēÜ~ü«Bæ~3Š1ä6¦Ū€Ī#ąŌ[śŚąĖ»ķ.¹ūJå ļżŅ¹ŗēĶģ ŌĀļóį±7*žŅÜ ŅĆvóüF“5ćżBŃżĀńJĶ(ńĻļ&· 2Õż)ŁėHū)»5äUB› ‹Ķ¶Kč÷6ęŲęščĶWĻŠ§5ųłäō÷uJł0]ī<&÷<Æv€Ž łśā÷ä/ķ%Ćߣ½IŃÓŌ÷Ō­'š!iāä<8` ¬7åó¹=³#®·ÆÖć˜."¦Ü×’Ü }Ī7ū·m/ķIP€@÷%ś˜Ż_Y§ē7ź ķ©& śŠŠĘūfēö4ĄŻÖŪ@ |īĀ'ķ żNä ÓxüLńž€1½sņķģØ 9/1) G“嵊õč޼²= įžģõĶ/Ł€ēęžBćų2'.ß’"Ÿ#˜é8 Óü^įŁ2¹ī";™’“ 6鯳!åB¢Q÷śīGēĒäį!šŌĶ"4žć;É Ų€Ų»Dßü4,Āŗ$ ŻÜq‘ŪÉ1ļśģ'ąšģćä3i€dļ¶÷ą+Õć¬ Ų rūÅ#8 ŚŪŲļš9Ö æīå ī6PĢż-l”ņéõ>%Ž÷™’ģż<Éü«ÆÜų€ ~m€ėä·ūńJźŃČł:$÷üYSÕõ§TŁHMć/ā‰źĀ’ń"n`:±Š5ģ¶ 2"ĪŅ&Ū EŻŖńµ‹]¹ž“¶«ńįōļJQŁ5 IÕ§"2åAč3@üN5É%ē üŚüė®õŚź±óŃ>?żšłé!ć&:&““ÄĶ-€Āļõ¶ÄŽĒē’Cė?÷ŁņŠ:āčżäĒ$ęč@¹Ō öé†Üė€0gŚ ß!Ų€éŅ&ŁFÖēʀ`Ī“a,Ž öźX`ųśā?łß ū×K = ½Oā_’5G=~Żņ€'ć01šü6ż Õ(Ņ#”€ “k:#*K#׿Fī»źūš8#j/BŌ&ēPõØß€r§±ģŌ.W³Ģ #ó&Ļ*ė³ųŠ’ ćéIęŁÖ /źģ’Ļńż ÅĢöåģÜ1:ī| !wˆ9ė+’Å!Չļų9ē õÖø)1&%œ #ņ\ ž“ Ę%)JČ10śīāś×÷Õ0“×¼ *’ų€ņ7ļóäźä¶2¦Ź7!!Ź:»įģ÷Mź`>®ž§G"īō÷õČŽÕŻQ ć?Ž=B3Õõ6ńéV‰ć 3~ķ:‡ēÓꄎėĖę–Ūč ×äń)Åż4ć}Ȳćź"E*ī+) Éż#!ų+ž¼łUēóć?įūŽ„š*ś×2÷ųņPŪ"뤀ōōkĄŸHH%šōĖāš=é—üé’¾žč čųĖ7ĀĒβhź] ÕšÄŚųŲė-&ŽŌ ÕęĪå’W ķ« ¹ö“B<߀ēŃ$ČĒZ\ę;’õ+ŪśéŃóžv×óū--ē®Eüß}•Ä ē AĶł]8Ģ“śįŸ)_*€ÕGŖ@ĶųŽ*äłō- ö ځąĢėKäĶČūį*ĀĄL>ģäź3ē Yö€ÜŁ7 néŲE6ž8FōČŃ‡ŹśZųKę’źĢ#Ńł!ń)* šė€ėóŌ4żHįæ–PčœIʦ©ĆKµĀ é4&<Ņ#öīžėeÄc"Ž`ęĄĮ€ļ0īף.#Ylš·’’:ūZŪÓķ/ ó wVąO&ą»&D'UĪ^¢0~×čźóN’¾Q€Ļ# N.Z)%I5QĶė³ų¦µAœ÷7äWĢŌQ Ī€%­äBüČBœāÜ8Ņńėóp'Ųė¦ś čSž¶ö` Ł 4Qõ|ł0 Ē5yŠ’Žš ėmõ»޽éģSN¶%÷čńĻŽųįČżä(įøŻ=īŻĪŠ"ßĘūÄŌ>Ąš’Ē^ī` 4čq ō’ąFÜ",įß²ņįæCąĄēļ ė¹ēŁ"!! łÆ²Ģ8ÓV0č¢ óžē‚ŅķŃ:¶Dūš)źÕņ^“ćXū+ńķ_é“Ó=×* "ŪÉRŪö9ņīč°å°åRńłĖWU§sĶ žüFę›ļüļėŗ6ū®X„śł†ļīūēŠöBßo°£ķ—Ōż“¾+õ4ī)Lń3ķ0š»>Ū€ ¹ŠF/%€QĢ(ł»C •ļ²Būä”  ä+1ąģ)ߛņJ ą ßę+ņÆŲ»V·ėģ€? 5*,"ķ9żō-ĪQeÉ"Ų,ß×ļ84±!€x©SYbY?ĀüåŲQ²0ÓŚ®5?Õ<öĻöĄžįŚ™ļ°åęńŁ,®Ē)j€½Į)¹Ż&Ńh‚Ö;е‚*īL'k' Ų+Š= ģüńź<ņ2Ņ>Č5å&ēŲŁē BCå}śżAūĀ ĄßE¢÷é4,0Õ^§:Ų¾ēō€'÷ķŹš*³FoGčĶßć²Ė‘(ĒĖŽń éēŌ„ Ąß÷š[ų§"&½ņ,÷SōÓĮ4ĮĢę€(†MüļLé„čZ`¤TĮćĻDö: ŌŅģÅ6bʞē ²Ų²,GĢ(¦ūŠ÷ąą5ē)Öb+óęĖē7“;źāŠ9ļģī œ«0$āŪ7Ü';ÄHė‰Ļģ€GÖÕŲŅø €āPU0^f–ķ™.#ĄŠWĮąŃųL¾ üė$½,.^#źĪH)\$ŪF’ż¹īļŽśš€m4(×#/)ƒ1ŗŹ][½X=~M¶Īū8ŪP‹Õ#€`£öŠŽČžųī4#*ōśĶ”8 JÕŁ¾ßėŹžykĻODö’ģĒšą Ūń’ķÅįć:ųźóģŖóēéźū'=1Ż:$J"JC$āČ€öå÷E1ü†)÷„ Ē &Ļģ’-5™€Eä€÷ŸōåōŌŹ+X<Ü8Ū&(Ķ3č„K+Śüõ+ ü#ńó-7ŻŻżPöö #Ü1Źėņ%Õū$6Jį]/ 0‚ń?ģģōé)­ #Óė0‘čļ0>3ķ3ŻĆ9Ėźåæū½OķÅŲńDÄ?1Ō ĖōPT Ōņ9Ė‹Ēģ-ŗŠZēß"= Zvļ×lĀš€‘ąŅšl€¹9䧕V0. ÷Œļ@ś?ÖįņJ€ŚÕó`TÉ? .8I=H f dѾíé_#Ō^‰ĀSg=ė®Ū§ĘÓ€i<ŁąöĶüńŚ„P˒Ȱ“·.Ä Å÷i±jĆōó1,ZąėŲLėÕ’¾œVIĘ1āO*ŚõG©_ ŗ0½“Ń 撌ŚXkĶ~4Ą¹üį÷ļ߀ž#ś?µšd³)ÄĘā“T ¾ éŽÆ§Ņś%ķ€!äłß`ėŪĶ)īŽ4ólXPꓤā·tņåĻ*Ō?&čń|$Ņķ·'īĢŌ¦Ć­į·ł­č5ÆōSK[IÆŅĆĪķ6×9‚€öņ“ ÅD¹ŽūcÉĒ6Ī0ŹōīG3»ŅĶQöŹó%ĒŖ¬ĻĖ=ū’“Š$)ņķ ųßņ ²’Éäņ’%8į€šŽøŽāõć ܾņż%Ü÷6~(ķųčīĘEžČmάŌ-4D8°üį½'ČéŠōé /ųwŖ–Žó'7ꞁ²»+ė¬ō¦ÓŲō ,ń£L³5ņMĮč“F¾®Į& åĶŚŻ ńłāäkÕ_»_æģóČŪgF1 JM×ŅŌ+$‹ŗäĪ։ė¬ū&§G ĢŀćYņ•;Eø•G½nāKāžĢ£ØÕ €Rõ»(öō J6ŌTöń1I?ėćķ+äķł6č£Ā’Õ#8% ^ćÜöŪŲŠÉ:”"Źīq€ęĮü. ÓÉō'8(ń üßē ņL¼p3>ľ[ģŚJ²śłó0"e čÄ"Śü¢’ź·­~=V>»zń>2 /ćčźJė0Õł¼± Ż"ĪÆׄńŹĒč9ݵŸZ”5)ó'ų]¾ÓņĪ1õ¼ŖÓĻ"Ź(üĻ…ŪĘńȽ€š’Ąōöņұ¶Ž„3ēČ 8Ęīn/’ż¤ Na8Å ; ŚÉ ”ē§¹Ķdp> ׿@*8tĶ-œZ«ö ’åš„{:7Äéņģ?ė•dŚāĻ¢ÄĶßCŻFĀōĪĢL€Óļ0»D”˽łæHŚM[ĖėN±dęH !©%ČżC…žąŌœüÕ¹ī°źé:ń!üµĮX㮨ŁR÷Õ¼pEjŪÕĪ˳Ż× ,öŻåūkÓ¤-¾ū'ēE³&·9'3)y,ŪāSĀž5Öū-€Z=Œ-XużŖŪQĄó=Ź$Ž­Nōž8»qŪø FĀĘŽ&>'Ņ%6}5ėR=×1H=ļŁ§ČÖ)ū6H ųö+_ ŒūاÜAĶ­€žŗ€/ŽC čžĮæ¬Ķ"~Óåm%²1õ>¶-‹ńć¹Īķ¢’/  sN xVū'vĄ7Ŗ€(šĒ¾.öOĆ5C^*ļųß<MóøÄ,įĆį; ö =ø äRĶü6ÖĪ5 ŽōęßśnŚĶę« īļäĶ€µčĖ łęJÄ  D³3ńĪĒż_i×V’ū O„qK¢E`€ųļźųī Ųå*¤3FČäåa8* >$( ą»ō”ķöœJ×ÜńłĒ,€üE&ČŲÖ*ö4åeė1rīÄLFµĮŲąųĢŲšQŅčļ’īFŅłżZŠ-ŹĶįłüĀžRv.éŃc꫞4e ŚCūQŁN üĒŲŽN&āĪēĖ ūTꎜ3*¾ļ½Ż čńé9&-Ģō ’ž‚ķżƒ3¼Gp;Ū''ź°ūć5M]3ģÓ€0Mó ņé!õ?cĻźC;c×¶ !5 Ą"y6J/B±ōŚŅńōŚš āLÅā"åōś|śY'Ņ_ī0GIć0ę1Ē©¦ĶūóKŚŃHĆū}¬0"H܀å€Ō¦ö’÷æ~N„ĪéžÜՀ…MÉ­ū,Å®ŚŻ¬Å ŗŚņ²€ ź÷įĘ,)žĪĪŹ”6ZČ 2<öšņŚōj(ŁŗÓüĀ.€(Gb×ͼįQä@}«“©3R€PØJ4 ė’¶ —C’ĻōæūęüńA9ŌÓ€ņźüČ "1"ū^žš@> ļ#M æ&1+“ė3ͽŹēpėėĪö]Ō ņe=ŌõŸł.¦ń•Ś/͵X%.Ó q;)0“Ūūß~(8–"ź šŻ%śķŹņō<ė'Ŗ×"¬IĆ<ÜÆ’GŹHƀśõīõ¤m¤€ <Ŗ¶čŅ÷¢ėēHW.#XŠ=sēźģĖŲÜ•Cž2śīBSōĢ:Ö7×Ä2M!ŹT!ņ+ Ōų'ŗŁüńņāĖž–’ļāźr’ŲGĖŃŲļå [Üc%Zč:ŚŽ čä ÕčżźK—-ūӓ6Ļ€čŹą8ĢHłg®- °;jŲźČŅŌĶ Ųģ.:ą°55ūā®ų’ąå³ ߀%ǁåBŃō2$G’€9éļ%7 Źõ%źķņ!++?:qi "€Ž ŁH2qģ<:Ć[:R½ŹČ&ķöūöeZMCĢ ¹2ķ)'ž­­ÜŲŌ»,'įšīDƒ‹+Āšä9µīé(yÕ<*;’łä’¢'Ūšō.ī-.#äćC˜óĆźó豔é-$č.īā~õ)ęĮÄ”Ų1 = ŻĒ<ę¶0:’J3ĻAÉ˵ć4-×RšŚ *“$ų0:<»éĘ)彤 68’ņ8ŲßK ½ĀŠĘģ/ŹŁź×5Čó=ė¾Ü0 Ļņ«*°Vŗņ,ńŹŚ8 '48 ś8čūĀ÷ēé0óļōüźČ<Ō9éļšoʬõ0}@+BŁ'-Śå [łģ+ŅB1ž %ĖĪ/š4Ģ;ųĮö¤B_§ķ¹ņ¹/óŌܤŸēYōłæįA”) Ė4ņŹ4BQ× „ŸRĪ )×ĪR¶“Ž(ŲŚÖ>`ß/ßĻ+8įFś^7Å$÷ŅGÄ7ÓE¹ Øēž*īŪēIóźģÅoć"×TG%­ÄóūIŌ¹ßFųÆŪ8ņ ŻŽ¾„9ńģ$䳏*õ÷ÉžĄčC’ģ(Į8æ7/*čśņ ½$äßżé9äŪÆĒž6AµÕÄ/ŗ’šąćß ōņŁ:ݹ”ʬĮź4ü“9öķŪš(OT'ēŠśš/ķīŁ>>gbåó%ŁņŲū ūĮ÷Ģ4’_>“€ÜēPȹņ{Ŗ ļ€ŅES€€ĖukéA܀»I8€“āMŌxĘĪÖ;ĪśÓ”ķ{ł.¹õö€”"‚ ŗŗy'ā&÷‚äjēŚÕÜG9×čĘ~W^3#÷Öõm€‘ŠećM»cU10€I‡ŽéY“ŅP ÓćŻé××Ė쨈ō€€l³·XĮĪ)čŚu€.ŖÄģ#E±…ÖK˜ÜρH]®7ä(hJ€ņ6¦ģĒ@91ž¶«11Ą@ pó%ĄnŚčŽSŻF€čč2HŁ ź#+ĢÜ义r9ʾņߎ.„!Ū³+?;֚pŽėP1’7ÓšTˆĆt?¤)“õ_WŲ.Ņuåśµ¢sõÆF»2uRčŽņńhYI¹®/V˜"±1›įŪž^G¤€’ˆä>×(-®Żßī€¼ĒŚ×¶=PŚ8ö*1UĀ‘č3 „cļ]¦ 2É!;”ŪIšk{§]Iž¾©‚häüćÅŅšČķM€H³×ņ &ęŻ>Ē“0|×å»č>ā>ÕęÜQńōöiÕö0”`—Š ü—ņĪݵéģą*ŽJRÓ,Ŗ,ĶĆČßuģ;ŗ'G»"ę'4źČĶń‚F)ŲīHźšŃ ×#F0óī€õ¹ 1ę½Ļėć aųä,VūPĮ-ŁšŽ€Fń±õźŽ1æ?h ®ų1¤ČPīāķŽø±āŒßZ=śę9Ņ/żFō 4±öŗģą½›.ęŅĢżb”EÓ QŃ$!Mėł0ޜÜȖ3Üę ’ö:’ź¢^:ųąI’å 3ś10=ūó ’0#24M4ćŅŽ+>Ž@ųĆśéĪĻɰĀÖ@&Yū¢ųŌõŻęā7āö02D`åädŃ&üŃGä“ōä%œ2¤•bńĒŠ: 5&¶ķąßų'óė‡ÄD€ .œŪĀł³łĖÓÜ;.śūnŪ× ÄCņčÅTżéłĀā&Õ !/$ŪĢLū0*RéQĀéķHöå óvŽČÓūŽņ M4Åā©Ö>Mä8VóÉĢʟ(PłŃ ±°&ŠźŌ:$O­?ØuZü8C*å(ŅŻIÄ%ĮĻü¹äŠ®ųÖ^ĢGą*ååš-T,¾]ė„ę©+8Gļż Uņ‘ĢŹ 7éõ7„ē8u":å ļ÷2ĆŖT"ž0³ē^0ēģŠłK¶[żžŁ7KÓ7š¾ĮĀ<³9ė%J"”,Õńīš2ެ ˜>ü{ŗéTε3õļłC(ŲęV€Ö+Ä»ŪĖŅ ¶ł  čS²ŗĢ·ś ė §€ß‘#Å;ō-ÅøB*ŁęXĶõņ.ļ¬ō3$öī^'å­Å½­×~ó »ĖŌŠ\ä÷ł!HåÖķņ€%ń­Š¦Vč Å·1J’;ŖŁø!»=_śõžõŅ-²žüė€<įöåó²T¼š&ń¢ż#ńpöCźIÄ5Ā-|Lķ(8'¼¬õ7ō2O@ččźńāļD §µ×€H®ļź ‡SN,ŠįŻ÷ųÄē%-øõ1˜68 ź»Į¢ŌµŃ$[ ‹š4GATćŲåŌQö* ń׿łD0žŚ ū# :G3²Ć¹ĪSłĶM ŪBÄÓ* óĀńåāT•ųD»Į м•ž9łČ,ŁÜ2ü©gTP)č?Ż'ž 6į 4’Zū;į»ļ³¾ėĖ?ĄŽÓ 0}AłV ĶóĄ.ėü:bäõ® 0 L; µ^{ŠŌ æ "ø€Ų5ÕÓÜ[Mūs1ō½īøōī^=(Ė#9ąī%:M9Ē MšźĄšö" ÓųōĢ8%7².óń±.APÜIāŃÆüT É%æ/ī2"äŚDłĶčÉSļåØÄź Ģ=ūńÉ+#¹žłõČü £ 5¢źe2Ö’¾T€>Éż,ŌŪ6źM'³²][ę®#(-ų€ßĻZ ōCEć'’£ż&āb“;­-śĘÅ,ņ½ė@ 'ŅĻąÓ ½Ō å&īĖ® ?ŅpŒ€óäļ½>MńL Ē XńPXžĒšĖÜ Ž¶šżļ¼<łŃāŁŽ7ūč .+æõĖ#¾,ū#NÕ¶#ßē¹ā3ĻõāĪģómńįøŻĻŹ;=īÓ»ėŁįi ķH ®ļģ!D ¦‘6¬÷küFŽźåšõd"<Ė,į[Ė%įØ6ĢļæņŃō=Ō *®!ćذīĮĶķZ =āńć)Óüńćō<²1 Ń’½ėŚ%õ/ą1ėķH ēæé50ļīŌä”čŖūēūöīīķVŽ!ŲŪ3ø(.Ć!ŗ4ėē4TŽß\ß!ĆįH˜$ źą Mģž<ź¦ÉŁ bÖéĶP¬łē“ źÕ]ķä'%ą±Õ!P$ęÉēā(ćĄŅgŠūĢē­’-Ņē0ņ ļ j’Ü.ńõ Jø.7 kŻ=TØź×(ļŽxÕVAĪ€r&Ƚ"DņĪķł”Ģ€ē"¶ą’¼'į„ļ¶:ē!MC#ŃÖ°×;ź*ī2Ę[Ą‚ ž8÷ø¶GĪ(ŗ“Ü÷€ĒŅGĒ'Ō¶śH.Éŗ5į0)Րß6öÆ Ō±śT)0’ų5ć`ßGA’ž 5ÜM»:ūE Ų?­ŻŃٹū' ņśQšĢāØ%Ö7Ņ{äCŃ ³P5«ÉÜĀ·&7ų#ِ§åÜSĀ*o·/ČŁšĘ÷ČōÜģ‚"ńÕś /A+£ĶkG©*ŖčĶ@Į:6ūĀ[CÕĆ[&EņĮüźO©āźIĄ (A­ēšóü=@ōš-ö=Ę ŚŃšWõńٶBŸ…Ō$”Ķ8¼éSē?Eß?ńÖī4ØĢ;ķq%&€ĪĻą²ń³ś@&ķ B-* ā;™ĪATī"±ĆĘb÷āĆāėńŁG ž1Ą2#LČĀļ>Ŗ &ó÷ļ³>I,„̲įÜč+nÆö>¬ź&ÕĀł}[ńįĻēėš4 ¦é ī1óŌV/$5Ż6Č=ļŌ?Ņ" ¾ć߉ŗRÓŹū?įä7$ā­5ĆöāĄź©ģž,##Ä„¼üÓ#D™  ÅÆõĶ śõ} ńŪī‚ó+ Ąóķ-ūDźęę°#“HŽP3ńf?B,ĻI~ųjŚŁ¬M1ķÓź*°ö|ķŁ!ø(nö.ž0·ÕSV:Wė¤ĪÜрžՕĖŌųśņō•ĻŖõł&G_é—.×?Ąģ(+ņ@ĪVĢŚ‘³:žÕīįŻlćÖ ÆVŖß CæÓ+&® ²ąŌČ}Ń ź,Ż|09Śł˜¤Āś* õ2˜ČšÓJ_ė)čģÕTąL/€;Ģń”oqŻčS€¤< ć-Į0 ;%ęßäī ÷ź&J#§Ę8ĮŪ8÷Pæė _©éĖ,ųū ̤›#;•ŚgͱŲü:'@4ó’ēŲ)ļ-śĆń-6Ö’@9q$Żŗž€Ūšī~S &D6č=š ŖØŪßļ®§;Ū±ē.JēÕQ~Ō’7ĖUŽš9ÉEż<+<ĒÜß½¬å € `óņ=÷ę mŅĘĘ.õ”Ū O#ął‚ł!Ϛ ³Ķ;Q)YĀŽP”Ó ü+IOö’±ņ’“9ĖūB Ž„ł#ÜõĪM6¤€3ó™Īó&Ž"# Ü% ż,>ɲ å(Æ é÷ĖP7Ąū –Ļė_,å7ė)Į$–ŪüŚæCŲ’æV×ĶAłJž$ą’ āē×Óē€Äęęܧī8/2Ƽ*ƒEĒėģÄ=BīÉöóŖģF²ļå-°.ī鱛ēŌiõ7ģB×: "Ł*Ƥ™ €ÜĘČUüάÓń 6;žĘųģI. 5¾Ė2ķō"]ļŌ÷ā(ęÖ'ØķõżŲg54äWē—õęėż+DōŃē:ėŪ+ŒĆŗŲ6µė»Ńč-ā ’€ŅÜKųŠō ęĮ³$źĢšŹåēFöŗ./MįµvėF+K9$bnŁū+±łēÉåÉG(€ØēÖōåˆÜ˜ė©ņļH(]&īė'ÄE÷ųāķ¶5č’ #6ģųŽ)ž&łA¬ņžŪņó°ŗŽP0ĘČ=k-š³ńŪ5==±#µ¹½)$)"ę&¢’Źęެ%÷ŻŃ‘×Ķū$>ŖźĢā“ä¶śbāBÕę|'4tīšļńå ĶĪGs0ž2*7Hõ7ŻŹåńŽ(ćłóŽš„ļŸŁĖÄį2ųō= ¬ŽķüµēŁ3ģ *2±Ō Ż„ŻüĖĢč"/üč Õ4»õŹ·žēćČūQĀ×Bäū:īźa#6—ÜÖųĘ%' ’20ŁĄł5ś#Gī“=„ »Ž åŁLWĀæ;P¢‹·Ż?§¹õ€Šćļ׿#HĒŃšyģ·Œžcųń, zØöĻ’“QÆē7G.Tć‚RKM&·$”›į3(ćØXųJ/4©üŁśŽįŖŃ{£` 8ÅĢ×'ģŗx÷ÓóÉŁś.ń§éż!ʱčč*łōė ęåįj¦!Ž ļßč™ń“¶g§źŽĶRō-9T6š Ćū:ōÓķŁŻjĶņżPß ŗ(½źbĘ#÷ó°õ',&8šļéŅ­G cäéÜA“ÆĻZ;ÕŻ‡EœŪłŗūÜņµ0ä'ź«"ųŃń·źņ#Bņ¹éō0łŅKČ)²+%» pōĖ’Ÿ)æźłÖź¢³ŗ ÕäīķŚę9üJĖ쀭Ė¢ŽĒóį-źŹ’ m®ä æÖöŽģS1Ģļčé~*×å "DMĖ«ģ¦"ņ1ŠWr±ń)ź*E°T,Ńf2.öĀOq°Ś ŽŌ"J,7ķµP€€ņ޾2®ŽŠB”Aęæ‚²#IŌõiõ—"D3ų&UžH[“ČO½óÜ÷Ż8ć8ųL0E°qźłÜ ŅĖånś)“÷Īk{÷ūŃĪł%€ę-ŲŠ·ųźłøĒ-3ćAq1€ŻĶéĘź\ąē-‚ū»åīŽÆ•Ł <)ĪóÅ#æĶó'¤Ńš-чĮ;Ķ °ŹėTĪ*.ēėϵ³Lćé×ķÖ×BõߟW58Żöõ”€6ę'4š$)$ē÷ÖĆä¦6Ł!č„)§įŻŠ“æĘõē–y,é²ĄīĻ„d}1@Aķ©ÓīPÖ ŻļļīLBŁbŗ\ 6ė ŹæŃĒ?«ū (öą®$4~žéó §;ė±é™"(*éŌ#DÉ=ĖaŪķŃ82ŪįģéØYĪĄņĀQ\G1 ŅŪ²1Uø:ŹÖ€/Š,Ž €,¾õõF„ū—O“G܌#ˬ Ō *ź’åœżF’Āv÷;1ŃŅŽę(æÓĒX‹)ćÄBĒō ’šį}‡ ,»ųZEōÅ„żæ(ź“ō~lǵü³ęēŽĢ%™~’Ļ+8ų÷Ų+Œ+ ’ą0ģŲéķ‹2šŃrŹ”˜%$D'–ż\™€Ó !+±’ńę+ĪęĮļ €ÉcD %łä–”2G#7ą Ł":ģŁ¶Jž(2 GU«ķōżž=5ś€åģņćń1»ļ(5ćŌŲļO'Ö§Āæł HP%]£ėgķ4µZ ųü) öõüéķFAŌŃDę'žOgŻÜ Ķ'ä'ś˜*~ZŁ4’ ž%Ąäėįį’ßóĘ’ž ׀Ū34%čĪć…Ė><ß[Ō%ÅjČåäÜ9ēŚ(ź_ś Öį!Ųōčæ®Mßēž}½ c4O4~·/O i(7ķ’ •k²! ڹīć±åßģĘŻ4d Å!&īšėö4%š€_µ›Īē .؁⾓ܳŲįĶłŚ²ūņFŲ1ĮķC&ÓšģSźK'ņ‚ĒFHē‚’!3łš3ųż't īüm9¶ķĻ_b²ƒ(ę·t”&Ł›ųžÕCl¾ösÖ2ŲĮ¹ų.¬`Ņčä=Ļź%ųżŁĖų Źļ×<ō`śäõóńėąßYāĘ×5$ķ[;€£3&Rąģś^€śõ-÷U÷ĘŖ¹Öē«ōźĮ)ÖGŗżō~ąĀš!€ 2H 3+ļ€=%ņłŪ± 'Ž€ŗĘŻå;É> &ŚŚ;EĘ߯4ńōyŌž€€€Ø%ś El/A*&ėß0/äĻźõ# I/øjƒŗŹVOõŁÖĆ Pōæ.a0$ėX ¾€Ź:€š&Īŗ/ņÖ ¢!Ń*ń…V4SŁOžaŗcKG6Eü5čåę?%8ō€Ų#Ą¹4 ź žF£įę׿F( Āé¾ģļE&hX€żć:¾)T&?· ķŠDB0Ōęļ¶„ģłõFś©č2vŌ ōīć(Ą;Ł :Ėč_Fe ²ēūæ2’ä8韶É9#€TĪĻ\¶5ā)BŠ÷‹ųōĄäģąź ö\Ć@Č&źz‘|$Żī üėłüüd}ć>+ō’ńĄE:€ó炼ß+ !(¢3»éŌKļ%i ½ė±"ĖąÖÕõĄ{ģHßIT¼óŕÜ'9Óģ9 ƀ=ōŲ&jēÕ5ķ/ŹųČD(Ļ“B• 8ļöI¶ŌŚ6÷©6ž.éÖ")äÅė8åŚŽW"‘Ó»dC›ė: 7ןóÖ¹/-øm$'ęģąÉś4Ōé¢ń~¾ŻIć’«.ėīū÷@% ņ(ł€Ć"€šæ \—ļĀ9ń/uåUķŸŪHåÆ5öÖ4ŗ/Į?,¤šą ąß-ł ī*īÅģŗI ö%å Ī«€ĪążŚnŸPžĶī½÷Gå*ćĮānę6¶-1%']«%`,ū@Ģ÷öø’(łĒ0ÅĻŲw»ū Öćżč¹ŲČø ,É r8Å)\#KŻ3ڵ×9ń˽ éTå¾ ‚÷Ö¼ł÷ö~•äś( įēŻĪOłÉ“€ę(§Ę/<ŚĘóŶš>éuŁš·Ō½YĻøžI·•N¢¶:ōĆ?ģČD÷į#)€W)Q-ś–"nó0‡’ä`÷&#KŽūŁņÆ ÷ "ķĖ×¾šÜ­Ä*śhų)Ķ‚ ż0 €„Ÿę@yķį.Ē’xś Ś÷4) ņ8ŠĢŹ ÷ĶšŅ9 ßŌį»éĄēći“'ėŚŗĻņŌĘõŌ ĶĀOU ēEā÷ķPó/€ŠĄHņ;Wńźī•ŹAü?ß„ä-ē¤üń&­į é.HąõūĄ1.F)÷ę#ģńߣpāć(耼$D ŅĒļaß7€+^Bŗś÷M+ŃĢüSū0Ī«²®,$= ļ1rŗ1ėļŹ ęTæµ š)ų’Ō$ćō€Ą\@õĶųY+-ģŻŲ1'"c Šcų&åłć 5ŽĄź·ōÆécō,·*@õŹL)e$*©4ąųō¹Ā7óö„ŗ ä ŌÖöĻÕĪŲ8ī- UļN»ŽäąēŖÓ½ż[%Ōہܲ!ī$XBįų0č:Ņ*Ņāņø-‡eŪż„üĮų7y²¬„jŽe%įND—ˆģł|ŌĪb­LGųžń, ōJĢgżŹšÅ«Wńe$øź5€złŽ7]Īģ!ąŌż€Ņ»ųLߤĮ-łö I˜©Ųż¶7¹Ķć¾· f' ćČ Ćü0ģ„ÉĄTĒń’8ņ¾¬ €0Č ź-Ō9*?‚ŃÅåÆ%Įīčģ>ā'œŅā#!ō3Ēļ1 ēŪńOK¾ 4Ö rģŻ*+.\Ū€š)āą!õ!Łó 5ż’īōūĢį²¶į€[’å ŸūŠŁĒąĻŲųśėĒģNżģłÅėą ’ą üŻ*¶€$2źbē%śō‘Üė?žŲŅEń §Õåõųšē3Õ Ż@ųæĘ &ź»! .9Ļ’($ćĮķźļ0āÄÜč$  ōū  “ żļ/EÕFė8Ū ŠŹ)ŚŁ(ńóö÷ņŌŪh!ŁüūĖ`ż6 )ėüÉ ž°Õ3õÖą%AśņÕļłłJ®UŹ64é±Eś÷āõßÖū7¦Ā6śō>ĘīĒÉ:”i-ņę-–š !)Ķ ō:»żg+ö…ńa$! śāäJŹó ĖÅNĀņ!E(ņÜź°óķ)€ćߎ'ģb  üź2śīõ%ł ó8B0ņĘŹĮ#3ś HÅśĘ€©!%ĆNö’įŠŚĘ= Čåļ4& ŲęūĀ- %×@ßĪū"ÉǁWōĉﻩ¶ūåÄŹŃ”ä(ļSżĖÓķĢ“ˆ0GČ!²W#ģżŃ+Å2p÷’ūć<ϼ 鎚ü-FM_į Iü1ż1Y;% e@2é\Rö"ø½'śŪÕź½Z=.@/āL5HŅyŽÜŪį ōŽŚEÅsėöµČ,,fāF$öŽŪ¹Ū#³ā j±\Įīó öūēĆŽSø3éGĆŠŲHķ÷ąĒ§ ĪY4hķÄł„ķBSīļß³öį =śO6ī2ć5Bū¾ ā³Š×õ!)ŚŲ0 K¤Učł!Öå;’ĘŁū(ē€;4ćĪ 2ū®ĘĒ>@ś1Ō¼1 Y ­ą„Õ}ĖbØųģähõ€É’a&Ļ-`Ń &øHŃ1€¬–8C=õ›/ōķ ž,ķęV?æć?&ņ.·&S ģ•ßpö”ōC8©šĻĄ~r1ū ężē8ßę½f’²ņF³D›Ćż÷X% +(8ęńXĘĖ8Ņ:'śšä /OĻ×ē½ äóuµZŽ\Å3ų£xĶ<÷Ü^Åł2wK J’€Ń ÷āOV ŃMī*Ż){žzĮ ēś1 -$ŗŅō@łŚ€×ź•ēAł ’ aß“ŻY6%B›82ÕŹ&Nēņ*sÅęÓĮ)Aõ’“ļœ [¾¢Żļ½›ćŸ ‘µĖÉōKäšÜ>ÖĒ(!˜ŗ‰.ę 2IŪ€Ä:ößG–Ż@³Č žņ}>ė±Ē¬ÓłŌ€Żā©”įRV¶+§RAŌŅ„‹żĆJČ÷@ q±čŗ1ś&ńFŸ÷ÄĄf4?€æŪ0 čĖĶąįs\“7¢čōŅĄĢ׊Ō#¾łAY*ŃTśßż(Õ£ÜłµččÕ׌Ż5Ve*¼ŻŚq;!Y¹Õń&ŪÓĻŪæ÷&)Hćł)#¹2ÅL ł žļńŁŻāĀõT Ņ< G”ōŃźśŪŖöš2üé’ż»ŁĻżņŗķ%%Ō ž+8ž1Ņ÷­žcėøÜg„ĪR&…(²Ż€3ēG"į7"“ CźłéWVŖ!±ė8āāµį!Fī’Łø ”½+!ńĻ> įĆøŽ˾ʓĢŌ;źß¦’ē>Åpƹعõ+ź¼Ś9…üē€ÓūܬĄš4Ö’üŌ> V€šĖē*éŠ$ ÕÉšL¢Ķ3ųŌŲC+åłņ$ھĄćĀ2«Øö5āčŌųšćGöDTĶ%R<ģ7Vѽ)ņĢŗÉāÓīųį›0P±čó3Ī Į6ł\s%ž-öCų¾žōĀń'łõzāõś-ė,įčÕō^źėÓŁēˆB÷ŲŁžß1·ī’łōĒšÖ¬īÓĢ>š±÷ČāB āń½«š%œŚ+ŠČ. ż5ń”¼­[ Ń"ŲTÉ®ō“čj£NRĘIŅ8"ž=Ńćó€3ŗœįŠįΦ’ ƒÓĪ=;FŪ€?"ē Säī ^Ż”C’üŖž×yc3°-ńį§žžÅŒś»Š 7h6 č¬4įźĮöČ/89ր+›ć€€{(ś1bć±;šśźĶ€—ņ’į½>é$Üļ ūØÖ§OēGüć£r¦ÕiŌČ ½2¢źČs(©čżK>Ax$×Méļķņ·½žš 4éÓüł?ķ³ū )C׳¼ūń“¼ķGa¶C ĶIAõ5ždž’ö¦Ņ}±ž#į¬Ē]ō>ēÕęū<Lié8¼źžĒ ÷ö¹ī%B†’ęŚ)īA¤%EżDŅŹļJŁÜ<]1 4“ø_įH¤„ 5ÄĀj1=߯$ę5čā æ5Ąń~߅%+–-ęY0Åģīė3+.˜’² įQų Ō=ź0Š)Üž Ļó²ī¾ĮD!)ų®Ø2L0Ż ó- J;ī÷^ńų *"$ė¹žļĄ7ųÅ@ ŠÜ ’Žå¦čšīł4„;Ļ$3Āžęüښõ`ģXč ÖųĖęSüńäī:÷æ%Ķ6néĄ ÉGõüB*ś”ß}"ūęŌ—&ģlÓ ī×ģöł+ā¾,‘0żQ¼žŚSš·MĒD(nAį“Ż&$Ä=ÖÖįĘćģ'»œje ļÆ¬ŠŽŗĒüĪ Qķžųōō`"ü2ߏ ńŃ¢Ö¶ 0c Įąų% Ū #Ņ?#F2÷öĀĒZPķMģøÜäņYÜü@ōÖ½ŒÆ'ŃĶÓĀ;ŅŗP ÕĄ÷ęł”IæF„ź ņó ÜMSŲSŃĮ#ÕØĄī/ĘĮĮ†³šŠ0_-AE€ t.)Ęł<5Ž(­ ŗų -śŁ$ģZŁ_źW %6×õżAF8FŲ@i0ćRÉÜ Ńż:ģ§ž’āś#ģéŌ%Ī ß8+2#€7’ē*K®BĖņ Ū&ØXøöŖ¾ķ’ŁIņŅóę ĘŗŅł ņQĆūā[,>ļß½ ,õ'ūü0Šbžgģ’kÅóį!%0ÜļÜ&Łó*"k %ĶķŅīÕó ßBŖļ3Ōń3¹Cē’ükŲņ€5)Ü’O·Ńł4ØŃņŁÉŌIöžŃ5č f\×)ž¤ĄÆ8łą óÖįm|Ą Ęų"1āßóźēÖE·ļ>·ĮCć'²ć¾Į³ńķĒæ)$ł2ų€žÓœ³Ūžąęń=/øśšš &¹ųŻ(żś46#ķĮé"øŁō¦šó ³™éXåÅ{ę 8ŻŲķČ.ŠøēK&Τķڵ,8ē°ļćåÓ·Ņ"š×ܙу-(ó*źšöĮŠĆįņĪįWO2ń Ēčņū¬śóįśū7 ÖŁ×%ź"®1åÕĖ< ž“ī©üÖ¦p&½)V_ó5@šŃ,4ą č ^ŗņX7€½;ńņīćüŪß*µĀ¼×X”üüē×Õ²ŻĢ%ē2"+I”Öė–dņśæTó”3×Y­„É$µ7ų¼5CśÅ!¤³É۲ҦUā(p@$EMgŚć­ČG€ĒńĒä²W7żŖ€ź_ÆčKÅ“1³ī•0·l-¤ŠUųć¤Ū)¼o>^óVĖ–6¢ō̟ĶEńĆLÅż!Öøžōšéß¾Äż ¬ĒčėNą»šėD4€0\ķ üąĖ ņRAöŅŽÕłūķēóA0&Õ3ɧĖ2(6œC<'€QēżļÕ/¾–6/„sĒ ¼]Ō3<ż« Ņ6Ķęŗóčé åä÷4ŁńŌɱ”Ōįóīū,ü ÖPC[ģ+!¤ĪÅó×Ģ3@;-’Żńų/²c«BóTĄ^ēė(ŁądõłłÓņɵL|$HŚĆų’')ČČīķBdŚņ÷@“ Fū9ōÕ Aٽ¼ŻĢóź¹ ¶’„$ÜĖčāĶė0čź§ė żoĖēŽĮŠ4ö-5čęÓĻ÷Vū-k[E ėģ3įĶāėŪFŹõŸ>±ŹėķŠ0ÓŪź9`Įć„N SÓQłŪķČõż^Š€½N@ģ ūŹŪ=ī ą4; ^¹ē Ė5ė e”€E‚åRį>ę ÕāŹHDš*ĖūDPBŽ$æ0ź€Ś~ļ=><ć"B‹ā+ĶüŠ€['æ žøC²ė'ńÕÅk3ōÉL ‘ ōÆŲī×Ė!=ūĄŪńÓO¬šĮfŚĀŁÖæī-4%ų:½NP½CņąĆõ±÷'!ōŠR()¦#ā ÓĢŪܶo補Z«ŗ >(įĮŁžč.öóGdńĆķ¦ĀČŠ& #ģ# €­Ė=ņīėÅĶ2·ÅŪ /šÜ“(ŻėżÆƒĢŹĪķĢĀ4 Jõ ÅÕīøĘ› Ļ% 8öźŽŻŌĒŌ" 6Ę÷ҁ5*߅ü>·.łļ%ūrNšŽąŚŪKžß8 ¼źägā±-Ś4Ķ÷ŗäļ` DŅ©ŽGGÄIōŚųÓķņ%5“Ķķ=öXÜ®ņ’DŻąŖ·ļ÷ń¾ żĖń€;ÅĪūę’øęÉńüžń ŽC8Å-d 3ąźčHĢ'ŗį#üu!ū±üÆ/ÖŅģķł;ŚųęĮ.#$’+ŹõéĒ"šål žŌ-Į€Ē:€įī;Ē€€ńJęIÖ žéGŽÕ’&L@åŽŃš»ńś1×Ų5”Ę ß€3õ4"Žę+3Üźļ0Ž<+ ōī*ł½2æć*ųE/ńŹ£CGLÖņĶQ=ĘZü„ÖĶž»'mį×f8åŃž”ø9ōĪšBž’n°8wŚ@/]Ō¾Ķ4¦1 <ø$ŌźćD¬ ؓH¾³ĶĻšÖŹńQ€1ö?%ų.·”få÷cŻĮBS+ó?Ł» Ä5*ą Æ! !éæ"Āŗķü>”±¶Õž%^#Ö·IĘśFÓ?ģ×éšÓķ%6BģŪĒŅüēéisŻ;Æ ö"ų6ū=€łÜäåōśÄńĮ’š÷Ōm²õ m@:ĢĻŁÖ iśz§Ķl9ķōūė¢7Tv+ß39ösō.łšī÷ś½÷.©ŻGćŹ 0ņ>ą)æķļ)żģė¤BĀ@Äć !łĪĶ < Tķ«Ž`;Ž=Ō&E'>+ńL/$Ō«ŠŠJ“ą~# ßöKÜ7¼ŲęR€žˆŅÜ`ÓCėŁ@ć1ęÄĪP½ć±ū'“0ąėš<ĮŹ#uhāß=ćgĶéŹg¤č #)4.Ģ32BhĆ;,ų÷Ä=,1±ōGė»üŻ ~č 6 4ąhI šĒ.ן\€IóöÅģÕźąģ÷ćØĪVÅųŠ)ūw(Rś/ü €ī7€Ģu¶ŖÆŁĮłįĒėį™ "āżśršŁŲÅĆCļŽĶŲæģóńęü Æ“"Ü-Ęä&õ+1¬”ėøÜ āĄ&’×&|!Lņ .ėŁ™ļ×üż»“.¼; ‚ńųä÷å;ÕÓ@ V(/×ū4„įÅĘąŗ¼ÓÄ€‘ Uēń77#ō'šś$bēr*ū.÷I`«ō.( /SÓ ?µĮ>äÕķōLCē _)ßĪ uŚM$.'֍¤žĢõÉ Ų”=8/āßō½ÕĒĪ ÅōĮƀźąFĻ” =ŽŅ×cšŚˆ-890DöÉ ĢA:ćĪÕ°ŗRQ­A“Ļ£Ūóå̟€ś·ĢDäœ-ą—Éšć.?)KvÄ37Ü07ó9żŻ±ĖŁŅ\ECh0|Ź+ēźj€13łŠ“Gé¾ŻĖ„ĆŃĖ@»žĒä-MtF=ķ€ŁŲōø!%÷ąŪą5:Ģ2.ĪR×ģÜŲóįKDå¹ģW!ĆLŽbp~ė+½ā×WŲ€įģüéÓ JNų%ß»^>›)Üä •#¼ ‰å-ēį ģ]ž9.²Ģõó!Sź»7Ļ“0 įż¹  ŪéĆ߬тļ 1õ,ÉźżµÉIöūIØŽÉ ó4ż ĄSQe#ś&RģĘ& åģ¤čó'īŪčDÅČõõ/ ökDšŌ䄩µŚīź­¼¾Ī”ō­€ā óõęzLČśŪEA3a2`2µÜĢ!…ҳö:Q!I#Ć³źłłń+LR ē%Ą±I¾›Ó–:ĄŌ …bÜG˹Ū’Ķ nG~ļ€+.BhĢßó5OčóČķē8Ź™?R±ŻŗŽ~)ńŁ÷śœE/€®Ō2žgöBä*Pž€‰Cą ł8VĒūć7ĢŃ*ųŠõŃ( Ž öŠ\'įĪĘ<`C9 !€ŽĘŅ€4ė“;®ć³2kŽų†±>ŹäK‚pįŲ$Ż&_ŻņĮõ܀ļ<ķŖŖ=²- ;ŠI €­ž2@nÉmųńˆ€Ś'ēōī.®ĀīĘŚóÕÄĀ¢öŃŻ<N€ē&é©öņą*’Šō€åR%Ė*3×TNĘBBĢ"QuƲēŚ%ó܀0­Ž1ŪŌ0 ļ“į)­ŲÜśž ŁøS¶Zž¼EĆ- åŚŌē˜cŁڳ8/Ł:‘ ĀęĻS-'÷hü9śł½ń ¦GhSÄVłš„Rďåė–VūärŹžĒė7Ķ:€0¤g±ėøżq RĆ?ß6¼¼n¦OĄé©Ķƒ8,ä 3ĘČĒń'¶/&ĄøĒ7ĪęJė©`āśK—4=Ÿēū##ąĮ-XĮ='ųšŖõ @÷ż’Ą»ÉWłż,ĶéA±É/ęĀ"żÄÖėĘ%Ķ<ļG6÷īĀÜ(8?ÅN)^Ž'<ß ļ’Ś>ŹF:÷ąėcŽŽø2ņčÓĮĮ-c#,Ę +llüėņŌFÉ>&Į'×ĘģAöA+9d ,Š¢&éĢ.ģē Ÿ ąĻģ̓ӓĮ.üAķY“ˆõÜĢ čżR9ńXėŃĀŲæ+41#å93ŽŌ5$Õ.ćžG°äŻ%€Bżtį"WÉZ逑fP6śU;ÅP½ś£ėåÜęģš«ä.ZĄ86›³÷ńŲÜ"~0 Ģ!ļÜßāęĘ:ģźĶłiéŗ’ē[Ÿō³& Ā’żŠę÷ļą,€ąę”’Æ­!iÆó8å ’®B7€ßČŌ7āŲE&&Ö!Ö4Øīš¼ ‹żõŃ;BFķšŃ5øšå£ń‰¶µÓß öÓŹ"ķ$½µż!öÜżÓ? óÜåÕ£NĖŖZ—1÷Šøśź Ä׿÷÷×7Dó !ļÄ&×ļėSu€$äŻ9 PźöūnĒ Ģ3ĒOMūīNŃMź /·Ų1ź€÷éüĒ·.Ūē)ņū"³ W!¾VÓŠ’`’Ü Ó€…ķ Lūįäż§y*-źSŻ0ōg€~D}ō µ58Žņ9ō;R÷cŪśł’ēŲ÷]óįĘóFJ1Ņü4ß>¬šč1 ¢'<@ 1ŅŠäĪ $Œ¼åĘ*! ×ß T*" ½¤-ļāBČä¶u$BÉ: ĶUóõ¹ä¦Ć2įīŲåĘŠė"ÄõéÓÉÆ÷ūłéŃɼD ±ÜāżYįēŚŌĀ3Ę(ŽėģōŪ–“ ¼DÜ «ā'č 3*ĶŲā ņbņ “( ų)äąėuõå`ūĞ`€ŪņĪĶųÓķĘĄ ÉŃģ’ļWÜ@ŽCĶH€Żļ‘ŗČ"ūDü¤ąˆ*Ö ³޾ßėŃŠó®Śū¶$Ž55 ū€ĆÄß%,@$üŚ%Æ ;’ąĒĆćĮ±¼īDAšŚ#׀NŃ)™-õ¹ŹĒž%ŻńĪ/žŽó(KĀł•)öžė’և3óßAƒZ“ņß·ĢJ€Ék’CüłŅ aFõ`› P3ī„ąų6É{üöGA óݜä$ķeŗ½»A„īΰūžßéČŻøØŗ>ėóų§Čō >Cķ`ÜLJ)üńŹĶ%ļ2ę°ī\ō`e'&Ś&F°ĻųńUĀĀņ8ÄņłĘÕÅÓ ĶŚ:Ķ3ŅÅš O4ū# Źéłl!čČö4ūü ī#Ģą%öąāŲż!ż²0éń7ćķžń ²’ŖeD"ąčńłź(ȝFw GęÅń鳘ō$źŽÜ ±¼ÓÄ=åfü/ŲŃ#ŃVÄ^Õ@EzĆčóčćX ž¼QųUŪ#ģąŌØLŠ:õݤ·“ūMÓO’ÖŸ-Žlģ Ų÷6_[ģ½D!čńūģŁPģŌ#Ģö;čéĢõü°6Įę.éŹ;4ż;€vÄū*ŅÓÕ£² šČż,/: ¬Ēļ)"Õ¾TµūĘ¢$Ž÷½$4`#!*SQ6WŃ;Ē3§DØšįNŌr=(Ó °€€Hö;¹F=8±Ėyń(ļNģ ÓD')šŲų_Īć ¼Š·Ņłßi‡ņ×ü,ļĻ×ŅųPāWb¹Bc€Kœ6ŹÄ¾žŌ².Mń “%īMV!²~ Ē’'Ł‘učĆ'ŒéŠż€Qrq$H„€ń)Q$Č€ĘīÅ €±įŻvd2l€$ Ų6!ÉB-EõE»ņČīŅŽ€f+1*7/G2/Č»0Į ÖōźōŽćĮ-ĢC>+ö’¹¶ūWPFĘ6~æśßŌššĻ )ļ$!ČĪņĆęīå”%Üēņć<%Ļ”FIę÷ÅÜNąīę/³ŸęęHūŽš#P’£­ģü n Ł kÜ ,UÆŗļ³ĄÖŻ ;_ńÅ ōż%0&xĄ_éHś ÖÕ'ģöō>ł\)Ŗ*9łß%Wų,¬ų’ó *ūĪM,ģŽ%ęŪņ®ģ))×Éē'Ė7šõ4ĪĢŚP,’å!3čé0×-3/ś 41š!h ßĪP&Ņ:>I£ą0,« 5 Ņ,Ö!’ķ€Ał-Iņ3µ"4čŌ-īŠś’ēįž5CŪ× ć1ĮżĖ’ģķJž’Æö¦ų>čģ ü?ņ.Śé5óžÜć)¹,€¹¢õ/ģłóe"÷ē$½Ć×1Ż2ķ-ŻyOŖ,Üī~Ģ*-KĖöŲ3ń¶6&WA5-4ɦn ‡ALe! ¾öšœÆź€;eīčŪ é±"+4ż\ÉŗįļLųJ’¢£äP+ä'F\< č7Lē®L±±ņžĀŁś„göś¾DüąGĆ#R£ę¼PäĪēš¢āD€#Ļ>Ä¢²öq ?·cŅæÖCż*äõÜÜśjįčż ķ€/ųæ ć0M=&B¢W€&ĆÓ:÷»ĶQŌē“ōæ^7‚ĪĮČK? :pĶ€ó®JA§sW4ń9 ŹVPÖō#Ņ$#Y%€Œ³é ¾źń±0@P;0=’ŖóĮIlØĮ¢łéN$Å ą×ĖhÅŌDķßż.µ Rā·Łėüż«²Rņ=¬)śē©TŅE$ÕNCVŲ^wĄņĪßcD=€ŃšžSXē~ŠĆ¬ BĶ;»æDųų·D%.ÜĻā BĻéŪŲQlÓėv"īö(ÅófWJåłOH ’Ęśł ņB»³0Ą"»4ŽŌ#€Ķķ3ĪŠİŠŃĪHˆ-ź  %[#ß-ÅÓŗõT5²[VŽ&\4å~ł()ń ‚¼ī>,nĶŹł ī*޽ßĶLŸóYŚīī Ļķ9õ5ź9cVāa)F‚€HI:ō7²ō >0,ūžĖ(G24ę ÕĒPč2ÜķįŖ š’±¾)ÜĢ  " AĀ<¾ū„5ßśaÖ1ķÆ­śźĻśé0<ńāć·łõ;žķ®·ō1ī =¬# ļõ[CąĮ1Ģȹ:ź0ófÖ«ū”óŅĒ Õ³ēśT4Ķ€»1¶é1 ź<ĆÆŪŪŻ!ł&šx ŌŚÜEś *ŚŪĢ’ øšNŖūėB<(ā¶•÷öżüÖ+å ܳ/yų-a»ė+_-Š<ÖšE5ā@/ĘĻGļ^±"kACńUÄ ķ:Ÿ ¦éÉ~? ¼qūR/!ó€+!Ū?üŲńĶŹKDz $¼ šŲ÷śņšūømĶØ1ōĪqōĒųł6ŌWNDĻėēżļäQŲōö..lÖ ’ Óüų=S·æOäģīōņŪśĒŗĮÖ;”āžš½aG ‚%;ļćśī śŗbÅķÜ :ź(IĮęŃņP›²šč+ź6ģįžųHĪžżÅ5)ū÷žÜ%,żæĒģŗéķ€ŃĒŻ;ŠŌö·¢āŲ3±6ų ńõTśĻå1£ÓåC’“Ÿ­ŅŹŪ!3* ,čČüč%ęõ[wĖŪN˵T&ŌדöŽ­Ēų⮾‘^ź*š¬'ķ!†×½€5“Ŗ$Š÷äė<×) Ó$Ž&ćę>āōTĀSäŅÓ7ażęČ'‹4śõņņćż’ ź,.š »óĘćöń<Ūō9m ó!=n{_Éŗ#sČā-!"] 2 !¾Öå×éü×čį„ńŅļ>;?Ė 8óŚęŽ-rżę)@ŠÕųŠŌ, ¦©M Œ;ŌĢśń€D53įYÓÜÖ/>Ōą%2ģRŁć@£Ēj!”ā\śī9¹’=ĘµŅžŗåsķ2Īü'FėŅ6öKäõØų Īśé¾EɳĮ0śŹīBä€&āÉe SŲ ŚļÜ+¹+ļ€6; īŸ+K”ó›å *j¶ś8M‘¼ö E\ĻŠšāŻī>JĘ+,«°ū]ńōõŚe=’VŅҤē ß%9É/3$B±’:['eķŠ©9ź° ß¾Hüy)±+¬’¹øq6#(®9ėž#¦0³(śŽ Óīģ)ß²"¤Tś€ž6=š'Ż=.Ųķė ²Dś÷;|śš½č N€¶Ö¢®µē ą]_æ -#ÖÆśS¾%Čļė7ĪīÕ0 Eóp«¹ąžŹ*ŚB¬õŚģžĢ:Źūļõš Čįēš€F3¹_,ē@ĪģĆļ¾’×Śō’ĀϲųŃI1%īęĢ’½ż/! æł ńżōžÓōŁŚ2»ʱĢā€öóøī#ˆ&='“ūJō0ˆ5x’Ģ(+Ә ÷:–W #Ęæß/“±’Ó%ń±ź±~*é“·éźŪ“ Į÷ךüņŗ-ē¾ģ’ #²ģ³.ūĘĬI üļŲJčåÄķö'ļ?Kå×åōć2Ŗ×€WŽ]ō"›-<Ź4ż!ū’„ Š+ö`ń)÷ ō`±6Ä&3ņļĪ}ķ/ćNščĻAč,¬Ė£ņŲļžÓõįóżå$V5½¹'˜ ¾Ę\éč*øŁÉ=,ŸĒļBcŪ’.Q)Ŗ5QģŅ»ž“› Ż3«ĖęO’ś(AEįGĘVRąóS°’Ėå’M“¶ūčą@ś½[:®—cžz֦ݒśÅąĖĻ5ŲēN…żbÉßäpßŗ÷ÉrĖĮ7k8€ųšŲµüķ!Ą+.Ķ!ģŪł0Ä6Ń0źķ5D;fß÷šÕ’Ž}Į¶+ńé÷%(?ķŠ(SčåĶč8K +*Īńū.MżĆד`ü$«Ųݰżüü$ėJ,ĆĪ ÉüĄŁņ1Ó[ęW䌎š;ć&Ų`§^ŠæōóÄ»éĻŁ;Qīā®2ƒā?śą1ł@M\I­~}~öĢY’V×[aąŖ‹¦€°ł=Ę!&ĄŻā".гĻ5ßźŽųŲ9,ÕMøĖōķ$ķ”öв5ŚėS“ ģ²ŠąłT+’ę>¼Š " ó$$›żņ 8ĒfŠļÅÕ µÜw< žš ” ā〫͆\ō¾ł”£ė7ņą›Š’) Ķ!ōK?ųҟĢēHń½ü#\į+œÓ$ŃŻģŃڊ%@N3S=ū5Ćå ‹!”"¾ŅäėæFū-33Ž*ŗķõ€#ćÓܳõ€ĶźŹļ€ŚŲäųÜĻ—ģ>?·źē źH’īĶĪ;DėJ\¶€¾"KŠĪŅåpĘÕĮų85F÷ ōß­ģ- N/O#śįÓčr &ļœ%ŻŃ܋ #ÓPļ'āņ,ōńĆQ_)6¬Æįżč€WūĒĢ€ åæŃ 7ęÅżÆ1ńMŖĒæüō×Ļ¢ca“Āż!`üéŁA$Ń¢ēŅĒ;Rš$ĆüČļŹōĒŃČÓ1äuK÷ ä_Õż1ŗ*ø¹¹8Ņ`9”;:āüyģŲåźH@ĖÉŗžöģK ŃéžަÓ1ńįö9ó×ÜĄ1 1 öM.#ÄgGÕ£Ė 3֔6JģĢP1TIįŹ)ĘLņ"ūI2ą9šEė)€?,ĘĄĶŖóŹöń5#ąļ&Ō,-+Ćē ē1ąaųU9’.%;˜ć-Ķ3½œ ž-žė±Ųj7ó µčÖ¶-ē|5ÖÓŗęAŚ‚ƒ·ņĪę™ųåÅ"ˆfT’€Įł¾ū"½$(ė()ĀD;ä µ÷7ŗ&¬aåŹŁ=]ÓIČ@Ī»=ōÄõ”S1«7Źż¬óõž4ūņÆÜOÉō#·¬ėŪ!€µ›•N »LQo©¹l:ĆēŚœ4¾Ū¾Ō9ĘŪ9ķ‘ó&ߛĻ'!"š& @Žįš ų¤Ģ-IGźā¼é@öÓ}å #ģóūć9ŖK%Øļļ6€ł·4 ¾Bõ$Énō$ēČēŠ“Ń1¼œbV“ ^R©mŲžõČ3` ©ņ  Üęż ŚöOßR6ĻÅ&I;ÓčįsE'÷€:80üķ(ĘEū80)÷ę?ļ®#ČrC5u™€Æ­<#ĒEŽ00æųšj“ć Āš é¤ucOļ>(½6ēŚēSį›kīń Īś3Ü2BŲŚÖÕ>Aƒµ/Č2Ø'x 5Ü2 \«Ō) 3ŹÓń &™¦ī³½+’=ōŪ¼.Nāfš9fō;üčĻēž’ Žqøh€ķp,A ĻūÜŻī’ā ĀüĪÓĢJ4üLģń.Ā÷Ēō²žĖ#PÜÜńģߝ0(Mćü³'Q®6 ō¼É— \ōč$ē”*Ķ&ų,ėź3ąō½Q2Ž€öęź43^ Dś€Q5ī’ń5Õ N$Ą8AźlĪ/ń£ų€Ę1SŃ6·é÷±[å€óķꌒæCC’­×xįBų,2][()ß Jō»īC„¾ÜĆŁōSļ»ģż(ĖBēdɵł : ėIeķćā ÕĮ¶OĀķöž*Äģ°žßbćšėÖčĆńĶńóēö3­%k&ó&ŪżĮü*ī JÉ!śū% @?ē¾Oč½Dk1’€ĖU4ł‰SģGŅŁŪ'L%ćĶö ē kś-ŪA]ų?ū/ņ’'UKšó KĆå€ćŲ¼ĶO(ŲõżĻš[×O°ē÷ِ¾]K_śŹŁÓ'ęēŗ%ąGx żHŪóÖ% ˜S(¼Ų×·Õ?AÅüōŚõ#“ŌČĮɀ¹ŻA&M3C-“€ŃļØżļ%-ųÓ7ż*ØĻŪQīįßĆ]ĄµéųōeģC’õRJ2Āģ%Ć'¾ó€ėõTķķ[²2U³śūWāčIŲɀĢ(ō±÷eų-¼­:]+Oöū Ēś :ģ%čŃW#=; Üī`~åŻgųōģ€į×ÅU"ŁóE ū%0ėäY’3[å[ꦷ"¾’|Hš$¶żŠŪ)įĘźļŅ\šŽ­A8ŁÉņųųŻ9 “÷½"ä'‘ŽŽ.ó;5€žÄ9q5~ Åł !_±V3ä6¾Kü@P įųBŌŽ1И>&_fł<ļ@•Õ× ß·ÆŅ L6ćēęÜ眔5 žŽ æ;fÜ®’¢ś’ćß՞šĪķÕHĖųšŅ/_9-°Õņ0Į)äŹ?“$0½€×½$ī ÄžQä«4&ݹ3'ńMė$ćō±ģęØå&Dü”ų€‰!RųżSė'Iß)‹ĆøĢųļŚķɦ×Ų(*õö+Pō'žµ‹šFĒsÅP€AäņŅ‚OW7Į Č¤L?aéUNÄ`Ś$œ\ĢžGĖĢ[Ņņ éø4&K$ž©"oBõ~žg5śėSƒ €ś“.ĵņ¼€mŌ¾3€*ŻöSM¹¼gč(ēgÄ@-÷ Æ$äYŁÕŗIĢĒŠ3ŁĄõžÕÖ BŽōäĢ8OŽMŪ„(.Å0’仩4!LńLķöĻ׮璾ī­éiɀÆgE}ÓMŽķG'ŻÕĒąļ€óR‘Üņ¾Ŗņ€ĶéŃžēPģęźė1bÓĶ“¶xÓSļģĶ%Ąāß)1!fé°HB»śŅ%=AļŠE×čßłgęä‘XÅ!īń(ŁÓ&66·ŻĶ)&ņķ%ŻŁŌēe$Ś&HGS&Öż%ļļćńź­Ųē%œjäĮH™¶1Ś</7ģäžŪåĖÄk'±ó5ż«! !/ę€ÕōśĄ—ĮōTTܵŌŌxŠ$F,989?äå²¶,”#GąĪž¶@Ś ääėéūt /«,Ŗ ö܀#˜įŚĖĶĄ Ö9ūHżØĮĶĪķǦ*;KćÄ$ź ĪóŠ!oF Ä'*„Č:Hōü0UµĆž|ü¾/ŗ©(ķįĖÜäćł ßCä'ķŁłŽž?ęČūė»$_ ńV4ģŒŅ·Ņ4  0-NõüÜ0ÖÖćbÜ,£„čūįÅčHéFķ +/1Š(5·bÓ õÉ Īžä5Œā½5"Ņöß+$Ō5ĮĻUŌ$"#N!&ńü į'ņ Ć#õ“ńČĘ-öŌ”įœźÅ$Ź}6ōQž·Ģņ×é}÷Äb1ĘēžĄ;z>õČ$Ńė'Ś]ØMė>ŃäSśŽ11TsĆ+ īŲ?!łŃīIżĶū:1 Žźöé4żÖiī®ćZōĻ9/ ņčWŁ"ßéĶĆŖ ČÜ:ßßW}Küś³āŹ ¾ö/J™x7.šĖ š[ėh߯DņžßB=S°06€Ķųķ;¹p[ļ"Śöæu[Zœž!åēEŅJ5=5³Xć2Åš½ūūŸžDŚ &ī7]čŁ  @¹ė”įĒßīÖ>˜V5$lé.Ō$łŌöē"äōÄ÷¼7ņ?G)¾;?ßÄĘīĖ) ą¼+Öš ÷Ś4*ó&&Q8į2q£·Ķŗ4ŻžėżA¬ŗąY ˜ĒbØL¼·B©Õž÷ŅŠBšĢŁõą×ĮDųĢļ ĢńżÜ“ņä‹ć€I ¼8·ā20¬,‚šń›‘E€#s9 žB/Dß:å vJĶč@ūŚN'ŚßƝX$” 4÷:]Ģ 7 ų!åC TŠ”8 5mĒsź>ō„ ļQ ä•ÓČAžę@ ęł÷Į'xš.’œ€å+” ųŗēŃŚīūÉ ĀŻüÖ’ѽłÅ &Ń0ZĮŌģ8D߆L¹‚€÷Õ’€§%Ņ¢źņž)ŚĒ3uĶżŗ¹ŸŠĀÕł ǐīę:ŠžŹSģŅÉ ŪOŻ l >Ä ōī ĖĶź€«Ø€ļ³awĖäOM³Ö€WN9- ĀÕŽ:ńÅր¦Ķ$G õ,É4,×å €:D}TµĘĘŅ"ąö» ଠķ "5„¢7Åž&ÖÜź_ē!ēłÉéÓBqČ!'{%覜ķłģŌø мQ0¾\$ŁĮcā9Ōcš·ėĶß$!ÖüžøÕ Šßø4²įėH4ŏs€»ūą ī=ę×?wÆšLĻČÅ µĶPź0$D/0.š(S\HĪg?9ߌ 7CŲ8Ÿ÷ē€ĮQĖč3ŃÓčä@>Ą¾ "9<%ČåP¦š ĆčńFŌB<öOąļ›ßWųŹHÖ¾gĪ)@Æ 7düÜ"8Ųźģī¶Óū,‚D+ē*E}ķĶēZłŪ¾ąółš÷ ķ;E]óž^’䏭QūŽ9ī"#ōiM$ ~Õ¶ü(YųÉ(Ż@5ŠÉü÷õÜßė’Ł,¼ŲźńhäLŪ5ŖWXč Jī&ÓĘŃįō8™żŹī.MDD ēõĮ’ķbĖL ü$äŅ•ć äG-õ"ŃIFĪŻµ%įąE×<÷ęĒ6*$2Jęčnž"ŻŽĪŠ¶,±Ą+°,ÕĢĮč9%ģÜ( RĶņķźµ(*ė¹.äB˜š&;ÕĮ±óVü7ōEG³¶į&,²BGŌĖöŠ€Š341ąéē»gņōõė'›1Ņ?Œ@įžŠŒ˜ŪÉ, é/Ś:€)Š»;-śĪŁŁė½’Y'Ś@ųH5õ~ż,’ĘĪ)įöå%ÜĶź(ŅąāėĶł’3$÷!¼Śįž!÷øÕS] ł ½E\%Ź%ĀĀīDÓ  šĻE .€ł$śø+ ņ·Ņ+ Üį³Š-Õ¤Cö:ÆJQĖķļ1€Ł•ŪK Ų.­ķS"²(16ņŃÅ  Śģuī÷ 97*ņVčFä*"õO[>ī÷ļ āåĒT.åŅ“0”ūD 7Ü«Š4’Eś~Óżśų¼6ę€D ųłžA,į5Ś ¢FŁó¼°-.%£öęČē­Ö(Kģ&]1†€ ¬iä1BÖDŹŅ·ülģ/žź¹tįęŪ÷ķłvńž€æš@6 å–µĶAÕĖŗ€oż4– äćĄJķ}WŠ€‚Nøg"ßźļĢßāæø‚€Ć1Ä4JüķÄ咩å&Ž%Ü+'µīk^ĪģŪK[Ōi#“ńõXØņöŅåÉ÷Pķ˜ØćØ]R&ŗ¤å/wvBM½ĆŌ$€Ź€w*„ °ķ€‚FŻķ$®żĻŲYęH€Ņrū¤vQ €Y;ææßŃē#‚ų*€'€łÆ+5ŗĖwD ÷4©ĢN€æp ļ#hśAW£ņ'×CKģąģżą€ Źüźł&·Fóļ·„'ņ÷Ī[ƒa93Ę[ėciŒÓČ}H ŻēŽź~F‹÷ L Ńpś„-–€ē$¹)ēµĆqāźÕģAÉŗ6āō³ĻżĖ|ņģöy Y)Xņ±GYŃé Į“\Ü0Éŗ<Ø*žH©¾õģ9øX TĢO'6ŹŚMŲ³Ł/żEüĪķńūū[ē Ū®­ē²¼ķ ŠJ—OVųßAäü*84'Ü7ģ ąĢ€€&ĪJŸ±&Ę_.(ĒõS v6QŚą;dŪćēŁōŲÜåž0åy¦ßåÕA7ŅuOćėFźįńŌē#ņŲ€ÉĘc\Ā42šŻ#×čAGžŪšąX*ö)ū ż™ q>—ŅUĮĮģóŻ÷5-æŹLņEļB šē¾āP]ēĻ\¬Ēś#ŁęR-"ś£-ĻĆŗź€Öæ4’ ē :×®õļ Qų™Õ—EŽō8½.绚łĆŌę±PŖ†Ń-ČXČų*:$”éŠń÷7÷„ń jÆÜö\ÆķFšŻ­ōē#5ES÷Ł€²J i *€žåÓ¤­M壾ć[÷K—įņį öO»ž\ݦY€diŁå  š&A19J=ēĖ$$ß[ĶžŗęuāµĮKÄ ž ß)żēķ#KjK,Č$Ę+ņ8!člŗīś,ü=żļ7ĄÅi:ł ßūōłłē".ć'ś0)<ōļ>R³>ć÷Ó)ŗ<éģ"Ś÷]čף’ā33ņłŪļśL2YŃžĄN'čŖ¾ÓõĪĻ*“Ōė ,"ńźäĪeāE"õ!4ųōtó!ā5ś@ŅšŻÄ6 ŗÄ é—ķ5²+śīÅČłž¼ ėīāS.č¤4żĘł¤ćģ&Śó<Ö3ŁÄ K³żcčŁ4Ü Ņ'éąÓū€7—€Ö÷žNjÉ_¬”_0Oūė€1ÄģeXZ,°ēĖÅ*ä „<`3@4ųļ’ '"mÜ Õ õ(Ų^ŽĒ䔚ĆÖ€śļ%/Éļ 7ü·Ģ ų»ĻÖźj’eąC(žī÷¼Žøć¶öļ(ķ;ōīóÄßQz Æ½c#RĶ·K¤ö€ķ»Ń³KĖóū1%ō 0Djī:ĘŃ&­ÄÖ½žIŌU8ö&čå3Ēé:÷Š€É€P 58ōĶ»F½üÕW/°©iŸóJ-ē­ž3/p'ó©ÖKHū''$CÅ-’²÷õ7@Øā“ł,cBó÷ü:³ŽKĀōģß@Ā›Ń2żŃBÅ+õŃōŌ K0 āŻž,Żł ש7śå“čļ#[*ĆÓ!"ŗķ`ÉŃ×Ē"ģWŹĘ©ÅŻÅĶ>)óßgī ģC(Ä{ŽŚĶtŽöłō'ߊ)UCõ;¾ēeKO:÷;qĻ=(Ö_:CzY€āŁøŪ%/1ćW®ł;.īĮųŃFčāYĒõ_'gĀčĖ#’śP"“ōÓć›I8żęī’ĖMüÖėZ éąE(ćÆŌ™48ź/.– Ęń”š:O ŌõĪ-kŚ ¾×8BźOłüąAwŲīµōķW. Ģ?ß~żĆļ’@š”µ,ĪXŻŲ’2§`šļĀ’{q›:īų € )É)*‹Č?€ĪĢ[<Æū¾>ŪwĖŠź*×ö°€3“ ų1?¢(;8ŁR޾!ėŃéĒõżīŁ ŃßÅ\uéą%įåŲ5÷ß·ųv1Éŗł•óK\ž:!ić5,Ņ»¢ļŃŅFč9óC s’į_p¼ä._U+Vō41ĮäŗŪ:+’āéĶ òRܹ»»būį ?䔽>ɚØ ³ĶUī+>K×ÕfķÓ!ö(ę­Ļ8 Ė1|õūÜ]*Öć4„ū'ń ’²ŻŲ¹ ōŪįÖA2 Ÿ]ŁĀčč½¶0×%cī”ÓÉęšōļ“e žĘvĒĆVķµĖĘłēŪ·Ē-Ö8āŽÄ9c0«¶׳).óÆ;ųµėÓ?ްøõA¾±DŃ(Ó&ńĮĘźjČī¼Ā«'» '€„żčŲäkX¼ č±ėĄ/6–ĻźĖ ޤłźįV¾1õµö1ÓÄäķ€ģĀĖ ĆcHļäŠÖ93Ś€4äQ’ęēŁų<ū!æ ŪŽÕ÷.Ó2ŠŁõ.€=Ę$žŲ óGōīGŽ6E4Ŗõ"“Xēp( F šÄü€”ųź@ģCĢÖ*aŹ("ˆ7ēæ"å581½ÉmTžü-ęē’ģšKųćš”¼’šAGÆĘ '*} €ÖūłD~ĘĖO"¦ųÓźÅĪ\ü'¾cĖĮ© ČŽčSŠńNķįÖųóų!ÓātśT ¶,ļ1"āóįĪŽ¹)ŽćĢæ’Sä1å’æ äč/šķŁžķżGD2ķõóI4 H/ŪóÉMŁ(ęčöžē’šĶå’,ććįćī÷ŠøŽĶ 3ū°Š‹ŅųĢč ÄÜß Å+źś1ęüO10䮸(ō¢Ö·Ųм’łäŪöX·Ķ`qéŽæŻņ’03 6ŽÖ³©ż%öĶ7)ł0ĀäŌŲøÓč5Ņs=ėį0ś6"DŪgC óņÉd>,’š ¾ŠÄ2ėm1üīś°åļ s,Ģ|Ü…« #č_ßßqćŚī²ū0꒟ņģšĶöć5ūĮrN±øéCč!üQ.Ń ūBĻėäźPX$Rܼ é=ų¬£"ņ% ×į­ŲÜŠD !×Zė-~;Ś`īķĪĖ5č ”$%éæ"ß?_ ē –9ķÖKµ) ¼¹€ -üĘ+żŽhóß3;Ļ3 Iį ŸųB0ļ OÅ×ŗ å«ŹńåĘģöģ2ˆ?ģūź£Śį”ł0"€KŲ©«¢ė+=A"€įĪ™cūĶÕQ»äų7aĢ’ž÷¼Øń„ģ(ŚŪJ÷¤ę’ö?ŸōNŠ.ĮÕ’ź)čŖAˆ Ćżö(&ŗ×Óõ ūü-sLĖ ēPČAŪ #ķå.›čn-a)¹ 8 Puń['A}ōóæ’č EF:÷0ģšJ)įń°ž$'€®ķ ćĆ2@€ÖŚE’Aķć&™Ż¼¤ Ū˜ՂŪ÷ū%čķĀģź68sFå†bÕż©¾„ ØŪł6ŌņÆ×QŪ}č č)10Ū ęóźŻ ēÖMßė>Żóęō%Ö×ęĪĢō&ä°4"ūŚęŽ&"'½ŲłŻ§ ļ8ł£2Å»ą'ĪĻ:ŚI˶ćžSAr?ĶĀ÷Cńö8å·!Až(īy±<žšD óŲ·)Ėńį²ź3¹’īõp8’D“ŻńŲįŹ朎 óȵ-ĶD²Ó-īēšŻbä,DĮÖ¼ņōĆĮÆ%ōݹü$Ię9ģź Fģńģ&ūś hżįįü KŌ÷ø§Ģ®!ōš TźYļ)q;ĶūéøÄļęńÕŲÕ ©¾Ī¼( Ö26(żąĆ€ąŃ <Ö.ņM3'­Rp€’701(¼Déż¾ń(ż¼’ųńē8ņ2 Źē-#ĻGęŪ®ņŲ³ā!Ģ*Üė ßūĀ'Ü'˜õ>¢ ų£“Žź¼āļ$3KŅĒ’źkčņČŲČķģ#ż.õŁŻ2!5g |IóƶŃćėC'%“éV\$ōØ- ėĖą*ńÆŌMVõOĀf¹ŖģP¬Š<ŽńQĒ#\&ߔ²ÄóhuĒą_7šÅÜﬔŽųŽ„+Ŗ5éę üuĶÖ¦0‘±śą]b Ė÷£ĀŁŲÜĶ!@äÖµcåeó&ÓģÖ<ó}ą õ å/ś£ ÉZłż/DYė<@½ āĪY T‹,ÓžėZŲČåćĻł/ÉõÕŲ`ÉF%ķ]ż;Ėūų“DüčŽõłŽĢś±EøvÆ%D讎óßśžęō’AéĪf>$:õß=Óß 1Ų üÕćŠņļ’ŁņééJķz“1mśon.éÄI÷2 žēŌ[›{5õęĻÖ§’*(īŹČąč08ß.ČDś¶įÖ†żĪ[¹,żźęįRœ›žŁd žņĆk±ĖæaŽÖBÓšōź2F0Eōœb²0č’"ͳF(#W¶ĘęŲA0ß×åģYübąĻ”ą(×ę’æóõ*ž$óöCĘ Uīݳ­Æž07āęæHÕńÖF#ĆXLŽłŪŗŚ/˜¹źØ<īųž%õĢöŌßčFö+»5Šė)ÜA±¹¬4š_*ś|ė*£āMoóąų’Q8Õ9€ęĆŻŚ*Å Ņ,÷Iē¾ü+žK"„Ō”-‘ą4 $PĄŻ»ÜÓ1Õ7Ćǽ*ŻÉ"P„l]č 7ŌŠ€ŚYr4ņ™/…7ėJ5ŽjÖ-ÉKHłå¼:ķŻ"łĖ·"’ņ 3‘öTčĶĀŁ ŚÜ`ų$ ڽŠhŻqļĘ 3˜åĢōž§ųĪš“Ēūœ'ēóˆĻüڰŁķѦźsUėžļå ĶĶ< DgÄŽ֒Ég_:ōĶTÖaĮ i5_ķ_×(hiņ÷€¼D©įų¬Ußź€)Ö HÓZž±Cļ“Ś½m—„JóńĆø×.ā¼žč.ÖH_­Ą­u ­š? .;^ēĶ×Ķ!6ęńĖŪČšģæ'%÷Õžńą’UBOg'½Ō¾ ę¾°§Ć#ļÓÓ&4ŚčīF7źĀķH’Ķšųōߏė¢˜@÷čüčń#Ų+š*ÄB.Ē:D÷.äĖL’}1éä ķ³ł ‰ö żÉóiŁšrśŖ·7Ö*Eė×+ŸDœŃ ¶ā§«&Š„ļ̉.?LMŚ€łJ&žż™ZŲ"™ų:Łē9ł Öiõ2rēžUšÅKéČä žž²HPĢņ؁€"ź7PEMŁ£’ģįŗÖ&+R K3.OC Źć )˜G÷Ųõŗüō (Ī’źģĮńśż(*Ń3ū6?5€LščIĶīī – Żę׊Ó" ;č÷ĒķÖóÖ):±4·Ž'Æ'J¶ćņĄ-ųļ÷aų%AōŽūģ¼ĢēšÓB.Å K€.ĆÜžĆ0nŃé`ļ1śķ~꿝ž!8Üź Ņó C“ą?!Ó.Ōó,ĢĢ,äŲĖ ąé^¾ 0Aø€ė3Qū¼I$äžØM’6(ĪŲ'°sĶE4`Ļņļ<œNßó üµ³1ÜīģķKüė(˜E9jÕä_ū€^ījļē€œ@ĻģĖ’NŃ”€ā0ĖFĻś ½ŽųĻ6Ęß­8īfŗ( üćĢ9* 'J€Ź źÓ’"$ģĆŲŚä›ołŁŸåęS&¶į÷?ĶLžž·˜C ¬%ģē ×ćģW=­'öćØÕŽī-=R ņ³²HūJęPLėģ¬GźŚ„­ūųź”ß) IąŁ{Īä"īā$ęų ļćä ć))&6A½Ä%!0ńG,ĘÉį,óIVTĒ:č óOķE ŁéŻź¼™ū\įķÓüō®Ēķ0ŅĖÕū+‘Ģ/5śóė\9W )¶-ó¾Ńłł쮿( >œAĻ(Ó-!ų€ė½08÷ü­ÕsŪł »@€«: õ¶ m Ś?d§öŌÓ¼īä³ø3ŲäM:ōĆžīęžęš@åõŻ'FĪÅé±Ų?Ž äCĀ‘å?MńŅķÆĻó1F4į1DįÕŲ"Ęł£ĀXö&[0`ō µäōÜėüCƏģ Éģ½™ļėį·ĀńĪ©­’ÉŚ7®ĶŌ#$©M/:1äłĪĄżVšäӃųń€ČGģ Ęßm’Åi[- &Ā&L;ŹFŅQ X&”BūoSļšń œ/ŠC ī%Ėö/ķ%~÷ĄØ ģkü(¾÷1Ü+åמų%+ļšē˚Aē„nŅŌāŃŃüL“ģ° ŽEgS#īČä]ߙŽōåšEļÕ0š7ųźüŁ%āĮūųŽĄä’KŻ :ÉÕӀ ³ēFß.ˆ, ŲÅϵ ŗÕÅõ֑‘ČŖ¶±āŲ ™¬ )1ńC>€ė(7ūŽé„ōöiōä3Śū"ńß³;ņ®óÖąµŚAĖ1Aā!/ž¼ę'# čąSŗÕ¶(jæ_ačę’[²ó•ŹG1ĪŠ±3õ"Īīg<"Š7šÕ™Ć4ÖÜäžĆĞĶqń Sżź)3ödėµO*/ŪU%·Ģ'éķóęš ÅČ č ©MÕņÓ-;GöšņŲ׿Śéŗ)3I <ńŲĘ(ŲčįŌ@č ł"-LŻŖłÓö+!.Ī“‡ŖO’ĮĄ}ŌOņž¢š“$?ŻÓæR"ąÓżMqų¾ŸÕ»ĮŃÅA(Š€Ø mÅ@­7 kÕö©ZG"µ4"¹"»Ų°-sg Č2% "æŚĮ½¤Õ<…(Ń}šęTŅ€ļĒI ūPĒ#7ę(_9÷8Ł·!ĻSÆš MĘS@pm‘č@,š¼źE£ī ’PŃÖŌ G3QåńÕ)’÷1< ķ9 ĶšP.č’RačĖź TĒė(óĻ ńńO(Ä÷š«ĆÓŁ įŁųä?"*<Ģ•ż,KķZŚąÕQ.Ž0ŗĻ'7*Ėü÷åMó/2ÖųÓQčÕ9\+Õ6ŸÖ©‹Ē"¶»ęŌł Õ«EŁ%ķOō’JMw=ż’Ō¢£ß +Ŗ (€ä)+ńŅ’· ś× Ō>V0įōĀķHéŚ2Ģõ*Ž“ŹśéŃ’÷ļ9Āõ+öĻ’\ćń-:.œöæ§ńŅYūī€ČXųĶ* ŪīÖń %Ü ųšČč ėļėėüłśAķ"šś µüēōŁų,ńņ ņ"Ļóļżīś&Tń;C #ī 0ż$  įšłÜ’ł 4mź%ī’ķķ1/+īū"ōš/īšŁł4ģķż-Š ūīčųŸųā’ćļāļņčśī  źųōå’ń%Śęź ź 8ö ł$ žõ äķī õ ńėZśüŗŽ’).÷åę’ Óō÷žķü ÷ žļ÷üīóńčõÜ !?ī ś"Õ9ņپķė ų  öłņćģ’ü ū ČźķüžüšĪģł÷ųåå+ėņ õ&Żī*ó ņ ōéķėīŽ%šąćõķŽŪķšžęģō'óūEįķ,ņ ā ćļ ėńńŻž ļ$łö’łŻšÄķóżåņŌAōńą Óūß ÷õōńž’ūų÷Žļüåł’Żóś āņęī śöļööōčćīņęåõģéä óūū öźŌžžćęéłõ$łõūģö„ä ÷ óī üąšēļź÷ī2é įōŲęļņū ( ¦ęŲ™ņ“0ęĘÕŲĪ<1ļ7OĄõ@±š Ļīź>ØL/Ś cj’Ś÷Īä/)āąRS ķŽ)ŅįŖ$H“ßė÷ŽżāÖj€)Öü±Å)„$÷É„Š¹ÜŻ G¾ÖķķöŲfąTfńŸH’ģP×9ć×Ó®Żķ7ų]@)BŪP!fūMóµÓ*.ėźŪ0āüŪĶHė:¶@ õģõš£Ō8Ą6ö89żāćõDī':ųł·Ś’+$ݱśÆļ“Å3’ ŃŅčß*ōķ²õ%ö¦×ÕŪŁAT»īŠ&üßćń śļń ßŌć!čē%ĮóÉ’&Ė,ā ĒžĻHŲžēāšßĖü’üÖĶéõ “%(¼ć;į7üõś°?<öÜöó*;;`įłąČ ÓŽ’ģ!Ń6.ęčTöżÖkö š Hęš®4}ųA ą<÷żū ČĢ@źö' %'ĒÖŠäy'š (+Ų“ūŲ’ÉńėøģüL ßū+¬õ’ć 3#>Öæ° -#ž1 =ž-+ ‡źģ¾õ .u³37ę¶‚j8÷1Q(ā*łŗņ2ßœ%å(3æŠiŚÄ)' lųąō D’ēų®ø@?žīŹĻŌU×ĀEÄ$0öm*»ęŚø.ń3ėīßüå ņ Qöč–.ŁAÖ/’īä¾ćź/õUųøÜ ’ÜÜŖģó+ņ;ö+ ·Ć÷8 ąąķ/Ųģų% äŠ 3żAćĘHöĖżłäĆ©.…H8åTē.äķė"\*ķäõŃē÷óßŃžĒ. ł.ä Ż4ĒŻśÜé čś:8āFļŚóĪ÷)ąčī ņē{1 ų’īeōūßģņ3ć– “ffžö ļéŌīÄ:ŻłŲåöź/ϳčē*ŻÜ">1ŗÅ7äź Ū“÷ś ³ŠšĄ,V £ĪŠ//Öŗå ōĖėõĖBóēöē· ’  ö2!éĆū0“KS’4å6öķ± ĢZūēōõä½ź÷@ėõÅ'ż )äõEäĪæ÷ńėō(ń9*=dō“?żtó®Ąöńźńģė&÷×.Üüd`źń$Õ¼īXż$ń%>/Hä!ĶÓ01ł@ 0³ł2Ēż~ģǵ;ļl9ąķ<ėø9ößöü.ʧĮ*"ŅI > 0ōŅ'åāõķ·ųL&ęĆ5½ŹžŌéšŌåLųö «Rż"ń1 #ĆŻęÜPKŖ+ęķęņęõų²č$ķżĄK$ø ŲąóFÕ×&Ņ€ķ%ł šóōų'ģį -įę÷ ń"Ī8Oõ-©Į@ŠźųO(ā ų6šéüP&Mõ=źóŻĒōÓüÖĮÅłŃ>Ļ ”0ł)ķÉÉčĪžÅ(&üD $åŠÓń Įįćģā(’³AéŁĆc ßš4ĆķāĪü®­Īōß;(Ķż“Āę ¬ģ!,÷H’&±ĖY*ņ÷ö¹ øźēó’é,ÕęŪī;°Üå*,€åßTõž$źĻ-<Č+śŃ’AOé+ėZ =ł¤ćń?Ü ¶ģż’1Ęģņg Ö É)ö!éß=āIķ4 %éĒąčūDŽŃęæč*>‡ś>Žö’ä÷!įó1ė< Śń õī!Ņ #÷ōõą—ę³ŽęåīAå #+8%ōņ'’ķļÕ7éū÷)÷’ōŚ=éó ,.śüß%ü’%ś&ĖČ4/óćźN7Żāī÷ōą õ ’ū(+:*śöéHDōę“å ā÷ēśń϶Tś ąšÕļł!ā-śń ńŠÓć66ĀÉĀųåļĢó«A¢čųųŸź½‚čč0ō¤śäć#ė õ> ’ü üÓ4ü$Ųę"’óžüV+`ųöĶ$ G }Ż,B 43ąõüW<ē"ZģĶ$"éĪńš$äų ßÕļÓč6ę2+&CŻ#ź HÖęæ ÜŪÆ*ėĮųĻāö¹ś 4ŲŻ4ēß =+÷é$Õ鎻ū@ܱōī0ßé7ė:1ÄÜĻN ųéļīJóźPµå¾Ųõ÷¹ś3^€ĻčT4Ļ«Ņ6}<ųā,ņ’™0$ĶņĶ)’ŲšōŲeC9ā4QÄ£?āÆā($’(śčĖņĻ‹W.#÷)A''' +–ćū īƒéé¶öŽ#-NśęŁŁOĶ4łN³ęŹü1 ĶHėŁ’0Å ńņĄķņņżżüĖ× Åī2 + Ī“ÉķB ą<¶WgÓōė"Ó*ĆüF9ł÷"čõédž Ų č×ų0ž)$/ūō ķ÷ŪÆŠ2Id÷Čśžå < ßßķāŃń@ė>ē×/Ż ąlŹÜ žųģ5ź ŽĢ1ū D%*Ģ×ēŠūżąź4øśIķūéĆŲżō÷ūćįÕ :3šą’„)ŖųÕ3ķ>ĘM:µÜąćö#­Ļ ĢłÉÖöäéNQ4hó9ćŻ>¶äĄóŽ łō"ź&Ķē ;żŁDßFäė6¼Ł?¼źÕ×åčŌŗŚ$’%į:åČżCšYT $ ±÷O;PžĒńFA1Böņ éģŹ!×Źą¬ śĆ -ģ=ä<<(÷FĘćĘ;ćé;7d°@ź5!āłņõį×-ŠSł·å¹(łå <Ż µóžöį+ōŹö-ļöšĶų< I×-³"ž+ōOōńį DßU£Ęęüąę½łŚ ķ¶ŅŻß6öń2žÕūł(ēźųģ Ņäü Ł!ęhżßę;ÉėöšCäź’ķÕūžÄDźźŲŅ3’%ä 1!-JóšįÜĖĪĆ:÷ÕDü°üÅļŲ?ķĮēŹ÷Tµõ5Ó^ņō’ėćq:Ѿš²Ų÷Ń0EŚ& žųō;ŠÉė:ė׿·Ō éģ!">÷1ü $ēļķóÉśļ#’0ź÷¾Vļ’#ŻšóSJ®žjŌV„? ūī²÷€Ü#6FQeš'Ō‘÷’d t'-ą;}ŹĪń5+&IĪžń€ž1»Š.Ž0]ūŅ)äÆ*!ī|3&£ šÄfHŅī øæų}Kxh¾2!ńżl(€. ļן& ź& " ųŻMRč )ŗ04ĆĄ©ŻŠ>ĶØ$źÜĪ69JĶ!Óń3„F÷¾é¾ŚŲöž(3ĘŌŪŽ®$żü ;@ "ķéĮČ6;ō pĪü Hó%0 @õ( ģfžĶ/Ķąä>õŽ}IÓżĪąśń¬¬ųāį^ŚŪŻ6?édŻēł¾āčöå _(Ż6õÉрėĢĪūĆĘłhķÕ,śĻ ¤óŁö8ÜÜŽź ½ īžĻ8JĻ;÷xéīķ$ ź¾Ī‘ üć:裎±ĘÓō+Ļ-8’¶ė‡dņīč6D'.&)ŻšŌ<åżZ üAī!į-ųĢC«Qżźņ× Lõļ ńóøüŁ9DQöüĒĆŌłŅįķ’*Ņźł(īŁž#鵯Łūč9:-AÜāż· GūĖ"ģ-½#ļ#ß!(ßéĆņ!Źū±ķ ?ļōšŅū ŁlĢŪ)×ĻóéĀ@ā ;ī&ńķ)äéœA+č'’ĒįšŻüż8Ūś1įßÓŅ%ĪÓ×īķćÖKüū×* €ŻÓķ×7īÓō׳Gėåõų5ńlŪÉ0Ūöģßū.*ē˜īŲė×öä$?¾ńłż Ęīūś2 Ēń&ėģō Ö+ Ģò17éōąĆīņēF,õė<ŪōļćŃßā4 ČūÖ&óō ˜ä*Óūķ!)łŠņõŪ Ś!ß'*ė.5 Ž¶Ü ķļįŌüĶä(šÉ.3 žéŲŃĄųķM들&ņ„ć(JųäüéaĪõ*Ž/Ć( /čŪ?«¤ż?żó"+ŁĒ²½­ņāģ )7ö°ī& šE€ 2vŠč".ģ ŪŁCż ū1ųCß Ö --%9’B .4"ā÷žŅ]’-Ī&Ńķ÷IÕŃ öłó"ģķ0ץųš!ōļćźūóŚöĻ#Ÿ“ķč.4Īež"’ęÅ$Ęųśä ļśūńö62čą+4¹ß(Ż óššöņŁ’2üźåLõū\ņ ķž8+ü÷FųŅžćÕ6+å!żüń&Ņęō ÄŲ¼ńļ č)/é-¬ų-5ż.ēķG!ńÕżcžŻčļ ł Ņ +1ÕśBęć5Ū3 %Ōīöž&żżOśōąń«š’BŪīŗŻŲóšÕšāōÉżį "źĀõ1ķļü Iā Ęźė& 1#-ēüäV*"æĀ Ū#z#1’ÉīĶ-ĄÕ0éōÕö?%ģōŃ +-žhÕÕ3Jų"\ę -SĮ!G".Łõäō—ńó ĘEń( #&D·õ ²Ö.€;Ž’é+'męķ("% ?ž²ģó ūbßŲłæw6•š(ŸŪųSĶäšŪ+Õāöē:"%ėż÷źŠŌ/ŗž-Öåķõć¼’ÜXGńęōĘö;)JĆĶ:Įņg Ćśčį$r$ä'Ļ-łĮžū"ļ%?ė’ß44é,Č(ś!ŽńŚģ ~%ņä6öź46ŚÖµŗ ’ńÖė€,śŲéÜ Õżāį;'ńżūźÖżĖ€ł=’Čī-Żźėšś C&±źä< =gĖ­ ųüóąß S®ĖģDö* Üąū(81Łūā (Ōōģ-'čĀēĄ4į( śśē’ąCøę ąČšC­ō Ėēµåė÷ ęśńóīéÅGäśGęń-’ļę ÷Õēęō2ń}A6ŚAĢč Ā-ģ­ščö.L8 RÉ5Ŗ3ŃKüś$¤LźÜ/>1āó8÷īķå'ęķ2Dčīė--Pīß91óó6łŽ2 Æ3ōāīĢ’Ōļö<śķ6« F™-ćø@ę0#;%ä, Ō'į ŅBūėŹžYäÆööjęSāē’Łķ»ęš= źŻ])šā PĢīÖü×0łń<Ä!ßļķņāIē½ (ź%ń ×CĮF·ŗūš ļó ’+ü#æ ½ŻĘĪų æöÕ »ųAÖ(. ,āõżć0#'ļļ97»ŻŽ¶5 4ļ²ūč÷ž.ųéü$ż*+jų,#2łśżF“ą?ž öÉ ē’žąĶßžĢ Ł÷õ ē÷ż¢ņ-ē07õ÷.'ų%ūõėäōż(Öö5āīÉĪĻUn4ó(%7 ōūģČĪćDżė3žł=ę. ó:Ū‰Šłž*ÄŚå'Źä œ' >Ņ,Ž” *éźż-ÖŲēööķų å%1 äOĢ ņėõĘÜ+' õß{÷?Ųż÷ęŪ öüšū%šäŌšźŪł% ō *ż$ę  'Ō Ņ÷ą ś ōŪų~ķ ž$!-$öśģźśļF9%ōÜ×÷Ł ē ėäž"Ō ,ķüžš µ’żūó ū5ūõ£ė øńęņõų%PŁ ’>&Ņ)Gü3ö&5Ê@öĆķįō÷Gų}ŗ¬!č(’Żóģ&$ūó£ßI ß÷śóé!ōNęR( õ·ÄŁ -üč@%÷  % h? × ōāŹDńwĢ ¹ą¦Šūū Ń=^ 1łõJŁ!Aķ öæ;v2 7ė#lĻ ` ¼Æ–ƱēČü@4ŠŅŅżėŅ o®ł¢4n®įÖōėŃŽ*öŒŚYĪ+4Ęj~5³Ó@%ī ēźŪ÷ń+*3&å÷2üä7y ²Żšöģżš8ĪÉēč €ō5ĶĪ ąŲöž¤#  ,3ä0Oöį÷%AĢä'ģń  żģ( ōżų% ņ'ēķ?Ż£ż$@’ ōÉß(ēB)±AF/1ŌŌ~Ę+ øž& -ŃćŲūśįĄ(÷čęßó*£"Ņ0ŁņŽ“ÉŽVé%ČĀł¾čćó°Š ÖżĢĻ$ö`ŚQ÷ƽ۷ņńóĀŻÆÕCćŃ'# Ł=źĆėŚ/ šŪļ½<<ė½Ų<ķ³óĻ2'źŽī+ŌīWÓ Ņžąō£ŻŚ 9ėō ų3ßS’ŗå2ēŚćōĆ«ŗł§ķēī%„õ5ūVó ö½ÆūĘGń: å+ÅéßA; õ* /ąė$B ĘL¬(²`ٹÜ!cÕ.,ŹĮ®TܾŁL«Ó ēQöG(ĄÆX;öżŚŚ ×d–ńģÆ źŃēń.k0ó:”ąīĢ@øo6ė¾Hր(÷:ėсsOæø*4źgŹ%é!É2!õĶ»42ęT"ćM2įųüčä,ö'Ł&&ó@³ßĶ÷ ĻģāŹĢžü€ ?łŗÄP#ģ_PįM /ä"ÕĶ T".€ėįŽŠśŪ’=Ć$·P ŗŃ$ēL2%1OŌõŻ&Ķō(’rØ31÷Š! ¼žęāŲ’ŹŲ1Į ü-óāU(ńōy'ó[óį>1ū?Ö×” @Łå"ėA õ+ė č ē8ķą);öĮ 0įŽ)ļąÓßāÖ8ī÷',ś)ąū°Ń)Ž%öļŹåŲīšö9ģń¼ė ä/šįļ:*ģ(ļ<ū$ ÷85Į¬Ä&ēN1Žī0 ķÓāó Ć<™ń^čZū€0įPŽ,FåE~)K,5ņļ1ęėGõŻōÉ;Uźś–";PČq¶Ø9 Ž5)ųęg÷ŃĢægĮļō2Žö„:õŹą¦nŠåõŌ¹é QĪ+;ĖGå×ö²śÖ)-©ż$o9śŠłĢ䏣āQ éõŪśä`‡Aō!ńwæ )‘ž(üÕ£& ę×"ćČ]ń3#ķÕ_Ēęźę,ö'. ×!åŌ'ĶćĆż5ąGŖ"_ģćļß?³āźĻž( (-bUžó |ĢŌ-Ē›ü Ą›L  %·ć* Öź$4ßŲSā,5ĄĒļŁ€ßöż!ųŪŻ=Žēa%üŃJžĮŌHāĶ!Ižłł| äŪ/͟ų/-·“ą"($Ųų»ąĪ+ė>ęDĪ&UēŽłŅżO!ūüŃņš¬śļ5ŃU łż("ķ<Üķ÷,Ā/üłŅāĻ&šĒź,ąZŖĒķ ’ &¼É 0F÷ņšŅž Cß÷š+Įźų’ ×ūżųśū5#żvėŠ=öõõī /ēżķųź:ÜłÜāņźęšą¼F2öĶGźVõęņćŲ-¤3Rģ(õžīÅE-ųóC$ąT š!äźż2»óŁ'š"ž:#BņžęŖ»%ĢäūņŅĶ Ņ$Įó#)ÖĄ2ķė1ŁČķėė ¼Ļ) )åęū žņÕżēńŗóźč, ""äü ż';ķ"ėißÉģį: łØöķDz' Ū½ö*įśõż6ĻłūļģłÖšŻ )—ābļB~ėīĻś8l® ¾é4óļÅÉŻ ņęšĮäū6/©W’ 1ź$“ņöH  ‘ļ 4ž¾śŽįėīæüųłÉ¾AÕōöųįĆP/L.A3»Ś6ó,!ėüŁ'åāāó& $ėQ,į:5Ō īć#čęDcĶčōŹ+żŪŪūå Jö»,§āžłü/ 94éū į%ņßōé=ē4’ā’šģęššéūū Õ§°0ŌéÜé+%ēėų˜ąŌ„ķķ ż«<ł$Ųšā­wGöėź"x!'=ōō(&“ $ØØÆł]µģÜLłīĪé·O²"/égõĀĢ"ī3ļūå1×ēøBóÓUU¾ ß Ź¶čéģ!īū Ń&¤Aō BÄsŌ±žč'2¾.”Ą1' ¬( ÷Žöa Óü Õš§ÄŁŠŗģ.'ż)/FÜ#ńęĆ$Čfių#} üŻśŲ{óĶāł#īšõśŠ*¶1źŪ:®&. čķąś ĘļFėüJłļz;&·č**Ī«ö3ĶĒšūć5į­(.ō<ćČĢGŚĪ×ĢėF Ö ēņHĖ īĻįź 0ZĒńØŁ+1€(8ćߌŅAl"u ś8ĢäĢąŁŅEć²ćGĢų1¹žķł÷æ#ž$ŽPŲņ̳(²)Ģ’·Ė7ē ĘćšÓ ²/Įķę/ō’ū)'žž öĘšēö%Ķó'+Óŗüļ.=ŁgļųļiTĢMų“ž ,8Ą$šI4)šēµćś!Õ¾³ļ*Ų 9ģīļŽ+ü÷ō)Ō5ü·;ÜŻ.0ņ”Qąņ’3 üļ,źŅ 8 Ō÷Įė9 ēųøÉŪŻ//ę@ ąņā)ūąē9ī÷®čĒ śāšČ>.Ō$žXņžČ*1ņŽĪDĆ ’(5 ńūfoįūó ˆÉåźöžKģѹž[2żō į*ļø ēĄ÷@ѱēźėĪ!× ß;Ż€ŽŪ Żą+ł/śČŪgėŃ$0$š9īé5*,)÷īÕ į×#śŹŅ ÷źń /żŁmŃd܆² įŌą9ę% JŲ„Ešā’üT Äé~ €1 .ŲĘŽ½G>81ŵ+HŪü ~īĘ1*¶x.ūĢ;SRōĪŌB2¹÷ē8ń’é€ļŒæö&Ų׿ōėōŻļÜż×ó÷€üĒÓįą;éüņb-+˜ÉŁF’ŽöTĒ,0ēÜčBüĪłšņł'ńō¹šłčANĪķõšęē ;÷ 5A»Nč 0ļ ŗåÜ ŁēÓę)!ŃēSäńĆĒ 4#čµ'õūł' Łūł4äĆ(ę ; $üŽśįŹŁķė $(ß+<*üĻņķ Žóųāüõōź ķčāĘÓ#Óģßł ā’ĻłĖ ĢąėK#÷"ģĻ' ŁõóŁ&žķEĪŽ?įü’#ÉŻģäėU õÜĘ÷’$ÜžüņēŃńŌßšž«ź!GŌ/Śóśė<ĪŌ2õÄė%G čż#Ą§8Ļ'÷ŁžĶžE’Ņģ<Ģ)3Ōž’1ń ųF [ī/ö6ĪšŠ<÷ö)¼? CJ;ć Ųś¾öėļž(ļ÷å\/į ķ!½Ō÷īääąśļÖ+Ų°Qšō ĄĶūč ų(šėšłäš+Oõä Ķ’Õļ(ģõżL2 õŃ·ŻŚĖĄŪćķ#ūļé*5© ×."Ń#ļ Āżś)’!ōń4Ģß įņD>5’ ²$śL’ō;?ĘēĆH($F’(ķóēžZÉxŪ(ūÖõėō+9Ł÷)^&(šĶÖą7’ŌįFÖĮŚéCõä żRę÷ āė¼ÜŚĮž©‰!āN8õ*Éõōęż,ź)ā>ÜžK' 6÷įŲė÷µ+į!éÖ.ū-Äć/ķžļšsżäÓÓ!öó)ä÷"ō· ņ 3ąŲƍ(ńA+÷#ĪŁ6&ßķ’Dūą”­ń@ųńõ$ņš’~õ½ 3īļōø4ÅīóÜöķuźõź üAčūśä<)Åõū3?ł’’ÄAä$€ķļųöĶŲŁ&N*ĻųōłŁōóčŌ# éÆŪćRįüÖņü Ģ!÷šć·9*ģļZ!× ä 8īß.Ė&>ļ~+~ČŚ,ģņ)¹ĄÕŃ.āGĪī"- éī% ’źź D*Ėņ?īü%3õ&ŃÜĀę īöņü(õēķŽ øńļšż7üńēöü(ģŅ Ę1Ī'™żå*č’Ó#åŲŠž ’8ūäźōźN«Ģ)»łń Ī!ZąÖ _ķś1ū&ķśŹÉć¾)ūĪ ŻŅźŌąę åėčģāėł-Śķ$ā Ū pģŅņż×!É„!" ŪĒųśü R ń÷Ē×ī ’ł"’×äüź÷čņŁą5č EŁś 2ųžĖōĢ*2P®ŻŪé’ Ē"ļūŚ+ŁźüīÕē÷Į ó$× ŅčźÄß*¶ Š ÜJ*-%ģāśß*)1,’*łęį¹ģōŲ!ĀüŽÓč÷ĢŃ6ҧöįĀ«ŽģÄģ<É Ž’ń,Ņ ž„ ā€Ćóó.ł,%¦śŅĪ ,ŗĪ˜UņUzšžĮéżBü%Õ&łqĻ(˜VgI#,«ż%’)ų€ōńŲÓśŁõķ”śdŗ9ƒ=ē?DS÷Ž%ų§}8šĖ '© *ķY,e ų/;ń.~ńžŌ9Q·Iµī6C=Ģźńæń£ JwiÜķŃŖ9Ś.ĻŃļYÖžÓčŗõADź’żī½0AūIÅŽ÷ņėńó& U±4’õĖūöżóńČø"ēø a2GāÖ8Āį5ļIbÜļ.ņ0:& į\12 ś) $ÜÜē" ÷,ā%ŹØš.’×ō5ÓÖsĮ^x0õµ ß9õ**’ŽūM6Ź ĢS÷Õ×+’±’$ž'/šf=¼ó""=ż ńO ŻéńciÕ,šņ"÷ŁūÖćłś >żńńµł*ż!&żÅZ !Õ/÷#łŻ-/ļ~śøčšĀźī ģĀķܳÖ#(÷ė#ūĶü%£ śŪ'āē åŚ‚č&J#’F įŠŻ-ŹļōBļÖÕ! , ޾ä’ųʤ >šōų׃)Ē&/é CĒ%ÉÜŻc1ļõæGµńūó' ’-; ÄŁ.ģõ'4ńąŽżõ%ł÷ę(UōŠłćīÉÆ.öéśÖ’%–J š"ņ 4öżęā(öōŃŻ(Ÿ÷ē¹D æ'ēāŅžĶķ-DĒ Ūž]ć~ÜŚł.0ĶĀśĪāįÜ0WįŻŲŲķü ¾ ī5Ņ Y!Ž +’,’żĪąäŻ]ß7:ź>ų#üś.ļųę‰ ;ó’ŽŪä ³ß@ŁBļÓŃćč Rė. $ŠÜ„ ĢĘģF/óę’īĄ8ņ("ķņ½c2>.ŃńĢוø,eī +$ķ +$Ö ÷¼±ß?NKééßk6 Eó=ūI {ĒFō÷Ļ ’*ź60ŽĻćä$‹3śļžQ*Ń@Q<ģł )ŽšąžP žłüżäńNŃļ€żß‡ĪųŪčśćś§ 8ĆėķoĄŲßO@ńÕ:ńDČ](Š,!ėłÖÉ, Ē"ņØåRżžBõżČ 4üū)ų&0įņ®7ž™)īJä9ēżF ƒł› <`BąŽ0ż j&Įšēõ’ŠĻ;Ā4V1óśēשķõėCõÖŲ&ųfäJī%čRÕ4¹ ¹GTņ%ū'$ų’ÕÄ9~ ’$ü QēĢóŁĶ%NĄe'#ŅĄI*ęūĢłÉéó±DĆBŽŲ żU7gÜ’Ø’’ŗüĖä2"3½<ē@ļ*9öü Ŗ&vüŌŲģP),ÖĻ6œO<ĘĒķ %ąŪk"¤%4’q,ėżńŅūāÜżW\÷Ļ×ķĮD nŁ÷ÖQY:ų’3 ī×õļ#!’ƒ9åä/Ō ģåøåØ*4īĘū#*ł¼'"44ę ų. 5lX ēłž?cą€āµ ;Žū.0Ūf $ąķļ@å6`L-ćŲ¬ä4xćäĄčÖ>Ŗ łÕ2¾8ž"‘ž=ģž—#õ74*,āįčŁJ~Ļ„«łł•õ¾ĻĄŽƒÅćń“ģ™ 9)ٓ渇!Įd±ÓŅņķēĢܟ źų¦ł«ų¬ńėåöŠī­įĪĪÖ AöŌJ H×±9žż[ō—½^ŲĻ(µ'ŻüŃÉæ żJpŪ'Ķ!B­˜ŚÉo’J”.żęÕU×Ńńéńģ&=ė%ķ„cü€ļŹÕż$śķŲ÷TZ ĪžĮ>7DėōÓj0ėF¤;ś¾(Ö)5 4ß żŁźÕ8=ÄŻĻźāżŌ¼-üęēFøń#;Ó%źęŻ’ąRż–č÷’Ģ ŪĖūĀīĀ€’öĖüĘ >ą3ęäė;^ŽCÓ§¹Ä8"Ēōśā æēk+ģ—ĪńnĘ åj!·)>ĖÜĪķńŲµōæF1 Īżąo·ß×鱳īĶÕ$ēõŻčć‚¶¦ØČŠ!ėę$ß»!’ūÅģó(ĄBüO `§ ē ćŅ/#éŃäāė*ńšéČłõ&äę śķėõš1ŻA.īłåå·ö/’0ÆÅßņ%žŪÓłĶśöQ;÷\’Ēšó ėé ģÕšŚ.óžJ/"žté)Ī4!īõŪŠ²Ē·Ū-Šī%NņŽÓųū!ī OģĆŽĘ,ęyüłĆ߀ Īī枊Ž8¾ńј**@ļ *;óžźü+Ō'’ßą"“ßų , oY!P&Żæ&€°§üŃ$ ž(Õ; ÷ķģ)ōµž9°É\;³Ēķ960ėš Ł ß:$ ­ŃH<Żä$ Šö“é7ōńŁäŃ:hLŽńG$ļ2łńŻ$ö¶:Lģ#øĘū¶ńĀXĘż1 ¾Ѭ÷8“üō ŹŁ:÷=äāü ń 5ˆ³‚2![ ż4ųÖüź)ó#3E$ß@Bõ łĻ0ö7ķ7-ī.>Äģ" ŻüŚāŚ„ü.®é ģšų1Õ ’&SÜ×<ÉŃ,ē8ĆĆŁ8ĻēüóśĄłŚ²śŃ÷&:ńééåęė-ā#śéīę,Köć Į×õ M%&‚(ćŪ0 ,ųĘōš +„ĄŽ²5ś%ī‚Īģėœü³éćÓB׳&įśó3 °õé’å#Ō39ĢūųóüĶ^!! õü?,ā ¹ D=4łĪ3ÕŽ}ų1Ś€³ļń÷öįK$“Ū±!ķķ»17Ē¢ęą čÖ\ ļ$ÜŚ’&!õ#ó5ņ!€ųżœtÆ#ŲōQL¹! ł 饒$Påģ’% åÓ>.źGĆ$@V:é}ČŹU×ūņķēį' ėÖ(ēé ö 2,Īõ²EŸAš Ū-ŽČAŚČż,Ęł«Dż¼Ō<s&ā ųŠ’Ģļ“įŁ/ģŻ=ķ/łšĻA"22é»éŻ·šĄćé‚Ģ6ą$łąĆ& ęÖUŅę !ü żĄßåś™ģśLźū ’ņõīŻźāż¾ō_<*0’śƒčšī9¼Łšö%žÆU; Ę)żų€öŠS›->ϳP-ųģń÷ń»‡"ÉhšY'čĻ™ÅŲEõ1ķdč łŁč,4ėŅ)į* ó%ŠŠÕM,Qźó/šĄ0: āÕ¦įe慯ōłTõ$ĢĶ_TĢÕūžåłĒĄ2ŅHś*2,ŹI0+żĮü.bēńĒī1õÄüŪŻ,aM§ģ÷O×W.$ģóį½6¹Ą7BĮM Ķóųā9Š\IłVäXõʀĒćŌ#6ų(8²((õcĖó:óīŽ·1æ%ų#F>ū&;1$įąō:óō?)į'īFæSżśŃÓŲė¢&7’8īG8» é±Ļ©,Bį[ŽķüĶyNūż+ģśĢś ģ> *Ó׳śļŻ&Ę× īFń45ģ' ę%(żĄŠ$Pż*ķžó4 ÷Õōõł  +ÅöøņÅ,-ö’ā·ōŃ’.ŚśÓėųš$ö_(äė6Vū(!Eśśģ ā ā0ūĄžóÓ¦É ā Ō’&)+ķ ßņł-ņÉ’ŁųĖßĪėŚ'-'לü/ź=ēēķØ2ų5ä’ßßčē+ÖÜģ ņėÖ&śŪēŚéK!! >łŽLč©ī#śŁ2,ź[»Ż]7½ 0žģ<-äē Ē׹W"/¼¹Ąū÷āłł%4F!iõ'ķęāĻ;² ėūŽÕķ ×¼3ķļ'Ńģ-"į šö5é‚ /Żööļ ŠäįÕė ÷Õ÷Å #/ćż&ą=13 ź+üŁŻ/Õģū8­ĪĶõÜ;ü#4&Ģ7ĄÓļüĶżā·M+ćE>ųżd8ßĘ+(Ū$GčÓāDÄ&É5ėz»Ń ³šO_ŅčĘ éż÷śž%L® ĪĪ$ę˜*°g’ūģ«ž5 ņ1ó,ń- ĮŅ–5äé9 Šų‰’<šÆĄłĪŽ:19`Süó59ėģć †7č*Õö²Ė üüĮ8ABSčļńÉ-Gšöė ōN”ūÕĖ)¶ /š(Ųķ/" Ü"åüĘ óäģ+ßžÖé+ ńī½ĢŚŃŲ)žĶ 2ēäÜ¬ÕąļŠĶļė8Ó!Ą!ł!žłīÆåįŪųęųņģüżŻ 2 ļ<ļ÷>żē!÷÷VśėģÓīŲ>Ä%Ē2čĢśõż ė$üµp5· '÷āš,üōDōÜ%ćō€õźū’Öā”#ŲŽąóLŪ Ģń& ŚP4Š ķ÷ "½  ¤ēÖäó8Ń+£Śćśįż¢4Į%īĮŚē<OÖŽĶ5ć>ĖīīJķ é Ļā’ż%¦±õćpģźŹō.ÉD÷Ā ’o½@Õń½š1CSŌ1ś)ļεOžūė:2&Ż ĀēõčīśrŻ/’#ž ō× .ģ#ī.Ū÷N¾ē5Ō ^žśēĖ Ģ9Ģ£€ā Ę ąźńį×f+śŠ&.+’Éõ ųĆōć/Ośę’Š"ļC3śŚē+Wčõ"!(śčČļ/!8,hнĶóč~ėųōå’ śĖ1)’ö°źśüŸ"3A70ļ Ū"ń³Ą®Į $ćģ+šśą ŠWÉŽ@2 Mķ ŠĢ©2čłßT ł7 „ż »žEóŹśčę°āIėąGĘ’ėų“žé =å+éņ;5÷å逡17? );!ģĆ-Pś*’üDū ->’'Ńč7Ś óģüÕ#@ 2ńåķśBņęüš±!ģŌšĆč7ź'Ė#$Čbķ3õ »ČŠš žAįĻżž%ą+·(Ņā0ŽŽĢžāįõżź*ł@.ā Ī é„5 ń!Ż/”×ü77×’ śß%žÆG};÷ļėĻ7ä߯[æ‡Śę»ł' ÖĢ77Eź÷ž ×óŠĶŹųß¹ķ+dśśGž + žó#õ.½š’ūF0 -ŠĒ%›ķ#é&ÜP²žK ō1$ų ©UAŚĪ'ĆŁÆ÷/īīō02Ņ < ¬ćT’Ł_; 0=÷«Śūżėżī¹"K¼:ćĀč¬$õF+ĻÜČŗ)Yü½.BN0ß €3ŽŃŠKH® Ī#:éµEÕį¾-ęļču,¼Ī­ÅŚ'M5?ęŅ=ŻŌūŃ4:$å$“üŻņ5 $ ŗūČqų ņ5į'÷ß<”ŗnŻōšCŪøG ½J=)*ÕūÉćüšģŹĖ#äS×>õšÆ 0łż&)°6Oé× Ÿ“.ī 4×,ļ›Čœ&ķģ?/ČÉ$«0P„CTģēŪ­ūń'Ʊ źP$õčS÷ĶóFöÉīČā,AŌēó±Š æģį2>;R:ø·ī°ś’oąRÉéÉ×ōĢćÓŪ9ššŽZeę „Ė18čk«Oä #ž)ĢŌ% Ų’%/šł’%Żźī Ōśõ$MŻYŽē­äł5œ"ęIęĶŽšE źņōē &Üö ,Šć  !ź4ā $ŌOóS÷ļŅ ē ¼ģÖ0\*Ī6ßüŌнāa Ż÷]*®4ėP%ßī ¬ ßx×Ųą)![#ōēź Ć%ēŹ&!ōP<šŚ ÷«NĢŹDā_1ŹĘņ(Ł?»F š: jō)3Ā8ćę"%öķüå’üė łź.ó’÷"[ź"÷DžģÖ'Ī÷óęÜõ ē­ŪĒŠé1Fą Õéüėā DĘåŌ÷øć2'ī ü„’ź5Žų®Įłż%,²ōŅ ī/é)&Ūč%Öč’Ćå"įń<0š"°Śņ żļŲńū*å@éńŻźäŁĪVóeż 0ß<ž)ļ»šv÷¹ė čŅčÜźĪ#üņļćįģų×öéę¼ū* ō%ęć Ļ&@ .ŗĻ%ŹÖ©ÄššM>ę-ėć³Čõūå6„Üß’ÄŚēŹ ³ģ'JŅ1š#ķŖīęīÅ7!åģc•ą ÷Ņb (&!÷ŪģäĮīFڳķ3)B’»ūÄ;¹+śĮŚ;+ ō#Ā »ė š( ūõśAŠ>’ל įäåėśŪ č÷ł“łŪ2š•÷éJżŌ!Kčßę×'Uē -óõ§3śĶ×ŲŁ ņÄČņ Żó®źm×-ćüō;ć/.ēõ›"ē/ōĄļ/>åųģĢķę( éō×ćżö£ ńÜ#śēńG"-ūū;­ųĶī ņģ÷ķš&ł’ę2Źłł#ĢķšńŻó;šw#(ļN@ņßų°ūńÉŠģŌ÷- -śćčüżŹß'æ[ `É"ÅŲüģ ćĪ&ß’ś5 Qąż ō;ņé = ;E0 ā¤öóM Śō÷ķ Åēśéå ’NŻ$1Ū’ćāķööI»""ķŚĢĪķåżéÖ- ā*»Üé(żēŁ# !(Ł“ć%óć!4+ü(Ü×ę*$ķQ6žÅN#EäP/6 Š>Łśæ )ę KįßkæāY$Īūż)ŃŽę*Cā Ł÷!=ŗüįe  &āŅ'ÄŚkč÷™ÉH, ų3Ōņ)ō”ŲŚ/ķ䌜BÖ Āa86Oŗłį «É6 C÷ūÜ4ģ3į \ėųóå ŠŻä9čĘæĄüēū+0õ śį@ņ'·ų5éĪóõåĢÉüøõ Ķņ ēģ÷»ņ’ņ é@śė’üżdäĻ.'Yß ¹į*źÄ%$Ü008 Šżē Ș5Hä iżžłģī&Ż śFń7Ńž»9 ¾ł=Ųåö™Čö)%"Cō"ųŻćś&­ ĘŲĘ"ø\ė~ÖÆ1 7 ł"×ėÓ"8£1Pƒ*O×ŗ5÷° .*ņ>Ń €Ę Ł÷ģ(Čü"ū*ƒSņž!åģ4>ž%źčļČ&ėł;’żłĪČŚ£ü&öž"ž- ć©sé5éŚēĶĪŁ“0īā ";®ˆŽž)(X^CŽE `ÕŚėūžĘõ$ ę0Ļį[5ĀĢ'Ī3;čęĶ:’ *ēō2,āś7)Ē€Šźēt³ü÷Ü Ļ²× 8&Ļ*)Ö0­,ė²ūn€õ³įO9óųßń—B’źæė $?/'ø0źö«ĻżóDóßæŌ ņå5Īo¾ÖŅ$ź"Ō""Jü/C« »?åL/2µ0ÉÄ’^šė Õ6›4AāH8+3%# (ī&&YåŠtėńą1Ę ž,œ×¾3łäūü׿5Åö H;šž÷;ŚIü ĄĖZń¾%õćśl é ŗĀŲāŌż,Ģ70¼( * ’Fć%Õ/;;ńųĻżXŻD"ņįŗÜé0>­Sü—õ0ąĢ·÷Ķņõ"ŗdųęQēå!įš’0ķ=‚: ģ /&é’õÖ .ā!(’żīåčŲ(ź>($+Ųū õŃŃŅāŃ7¹ć ī$öæ#69”Ģ÷ ßžå¾>1ūŻģģėŌ÷Õ?F’;ū# ÷ęķļŪ éæÕāńĖ2"Ś®ŚŌ,ōķõņGęļ»ž'ē$öōP ųūŲŅ>żłü/ė·Żūß0Šä"Ō2ź ęóč¼öE 1%xńT,-ĪÓę –ļ$č ąBUųć,Ņ ć $ųćæāö"ĪÜSō!¹Čć3’ŅōµįņEõųļż#ČÕĄźTÖåWr#ģVÜĀ&J5óFŪĪp4  Čņ!ø:ī!ČS7åīšéėŅ(ą Żė +åäÅī Ł_CšĖķäüåŻ%Ü€'ҧćåÜĶI žŲß Õ-#Āė _*$ņ¾]28ŌĒŻĻL,ē ģõ ©ū,A 3é&ūżźXėǶ 9 ĒFóś+ēŻ>ąüå!,Ō;į?3šLōōĒę2Üń;śŻ#óOJ3čččĘL%. ŻńZō÷äÖ) ķĻüįāūŹŪōž į Ņę» ŻG+Ō všķūń&ųź ’”ńåķ 0īÕå,źÅŚńćéŗ ń<ÜBō$ą)ŲāĖ$ćņĪ ŁĢ%ßņå$É6ąLüā×ķ:]®ś ŲÓą _ ś įęųęŻJ(ŽŖ-įõOóóŌūŗė/ŚĒĪõ=ąP Bźš÷Ä7Ų  üÖCē÷ļKßžÕ Ś£ćÜĮŁīš¹DłAļ7 ż Ö+īKś+1ńA`ŪQ2šH-¾ĖŹü÷čśKō Ģ> ŌŚõĢ 6N%ĶI(öģ;"Ą9Õż¢ĖĖóē’蜣ł¾å ż$Šé3U ņ1Ļś÷ŹšÉ8åŅž6ļ@żņ "åł&ė$ćŚņż)īų ' Å֙IŽÉėš śŻėęCųĢ/ü Žä?Ś’%ī¼ééŚæ²ęŅ óčģMŚ? @Ū$+õĀé,õ,Ü" Šļ ö ļąå' ūX=õćŃõó/8ż-÷ņ_ö żŻÉņęö?°Č’±ūķē/éِWńį!’žąĖėėšōņ )éś\¬ ÷6×ŪéÅčėųėõģ4·ę,įļõīųü@ōńå-+ēīUńęöĮó8뻁;KŪ2ėČüčBŠśķ½±Õ!éÉōŃ3ÆśÜŲ1“Oē÷ūäņłÖhÅeų*ōQ’żņ ė #ńē * !ń/(Š9'åĻ<ćóĢ&  (ēŠŲžB Ż*s Ż’× łāöŽŁģ ?1Įæū āå¾ zźKä?äźŌ“¶a/7óLßūÉ»Ń(Óø ’§Õ%Ō#ņĀéܾćzöžč7 /ģ#ÅĪ?ō?9ķ×8ķń; 6=åżŃvōßŲŅ ł#ōē».'®&Ü#õŁ’<źę©ÕåL Ž÷ŪšDį÷žč%ŁÜEłŠśžģī!žüžĮ"-šI·Ų7  H%ųŅ ĖĻ,Ōö Ó03 Ļ„$÷ņ&$o Ä ?ųÖŃF,0%óķEčĒųö ššū īäččŚ:Õķį½ ;!öś%3  ź3öūé&>ŪųĶ,}1ÓUś4N¼Öž / äż8Mą<²ęīPŽ żĘŃńņ ޶S)ōäFļņōĻņūŲ™&ź)ŹģĶįJ Ėóų?ŸŚß6ö ļč£=ėīē2 OĘÖMŚQā (õÕõĆ0 æŻłÕłžŻ"æŁå:Ńäų>Yß«ēŽŻéĀÉ ³å×7 ™[ į?łųšį‚żIBļ'›®³Ü'>2¹ ź§Įš¶4 ɍļū X!Äłæ  ķCöį€Ē-ōš Wy­ó5ŲS&śŚĀ_ó:SĪm$‰%ä<ŃĄ(B*4īš©ź»/KķŲöĖŌ27ß>X™~C,×؃Ņń ī7`1"¾éÓ+žóKä ŃŪRį<ŗČßrōŽI=)ž3ēēS@D#¾ńĻķ"!äņÖJ? ä!ņń÷š(×Ėśņ žöüäāø#Äķ›Cź9ž6ļīļ6õŻÅ śņAęÖų 1?½$*ŲßżķH<*čģŖ™¦žžåóÆśåA5 Ÿłó3]•Ü*8Ū)å żö+,Ģłõ(õ "̳MÜ <Õ>ŁŃ:Ø]ų£ā1÷Ž1Jäū>/äśLŽž!ģüŻōķ÷BIŌųźP7¼żŁŌ+÷ čÖē½PŚ!žģ’ Ņų—ßü#ą?*Č "źż óKõ~ó.ķņöß+šŌļ#į*Ķõ=Ķńč!-čĢń3šōķ&šļĻĀŹ××S į ń ,ķń- ņ1Ļ FżÉQA2ųõż ļļžęN š åķĒ Öž= łśŃMīĢķōš’šÜ+ēVĆń0ōõųŲ # ś(čöä%ģčė!ō$LžōĶ.šźū8üŚŚN"a0KÄō>”@žæē&žŽ"2ū£ä:n4į!”Ļ:ÅćÖ–ńćÜīąš4Õį%ņßAĀCįŚ½: Ž u÷īćėŽÖK9ė8 Ųšģ¼ Ü/OčÜFó5ą²0#ó5ā+Gž*łūĻUųÅĘ÷üö1ĄüźŁ> }CÜčŻŅćĶ,õėŃA³ķŌ>ø™?ņÜÕ?Å +äąąż>ģ9ė3*7ūżłoŻŹėģXÖP&ją“ßĮH2ųöū4óī$(ūŠä’͜ϐō)»žõ;ßųŲŹ±ų.ÉNöÉųōłķŃ]÷ē§F ÉLV7ÉCü"üÄū  ó/ü?ĪSånŲŚīĀģŅöå ,óūÉŃūšżōÉV ÷=Ū('*`õžōųŠ0ļ=Öüäž’N²(;;ēQū2Qņ&óąčōĻ5öŚü,Ūå;¹óŠƒō"*`€žŻ-Ė'!žŁÕøäŅÖū(šūßä_‹ÕėŁšżåčū@@÷ĪBå*āĪŽĒ7ėč!ķķ żõ0ćł Ü4ś÷ÉrōĢź ŅüWźšė łÉ8öĪł4ĖÓgŠ÷(Ö?%Yūżė +XĘćģ½ėLPŪX’HKż4«ÕåI* ) 2*ņģņņ"1ÕźŃ’ ųģ4öŽ2ž(óCŃ’ļśķ0īīęW?!÷ŻńéąS*źšż<ėHeIńćłŪoŅGü4ćFŪ<7ļńźå”ž'øęóż1'=9Fī÷-łY. F=y%ĪōĻŠõ7ā"÷LÆ8“Ż22¾GQš5X!ŽŻąĶ#šõ;�÷ ’X/~/ō=ž -ī0äÄbVüÉķVæTōóµņŅŁS÷ĆT+.ęĶN ŁI- śčG!7)ż<Ę(ā>:ųŌ³Ńō &€Ėē²\÷>’÷Ō»ūšŹ ·ņµ ūŪūŸ%µ%0Łóż3įVß/AÖ€šī? ģ7EĖ)ųC ßśÕ!Ī(/­Õłū#J _ĘēŪÄÉ89%Ü#Ž]0ģaōīµ÷*!6Éłż ŚŹķ'žž·ČČQžóŌŽ!>D8æĄ#ż.ń ā’Å%źä*Ļßū÷%' Hńāõ(żļĒ9ļ#nśéōü ū%’¬Ōł;$E꬗Ō'ń®K:(ī25#Oę%Ćžķü(Rī"=ĻęŠ~EŃķ*)Ō'-ķ æć!ķ"żļb3,¾0 3=&Ś-ó#.ļ’ ¤:4±F»®•ŪüēUM'`*Į“= ų÷’{»~$Ż8#ń±ņĄsī7ś—į2āźčšģšł üźŻākĒį4šśˆŠ#ÕČø3žĀāĀóŁ÷Łā‘Ļę Fš{#ö- ńßÄō‚HF qżżAĪ»"!JFŻ Ļ  +¶ĄžB=Ć½Ķźš'„“.šyLPćłÅŪ9,-éž ōĄČHį ķ'ŅÖü ÜŹļīåŲĶžPŚ*ü“ ’ĄśāųęāIž; é­)Ī!ö E£Ė=ßWźÖć4C ÷ßå-Öķ Ż eĮ’ęī čś³ōšßŖźĢćö ąŅäūMåĖPŃ=ųęU%÷óÄĖB’$ą%(õ0ēłų"VÄŌāėåś.ÜŅBÜŚ'ųż9å ąÓųģ. œīõŽ )ŌąģėKČ-¾@ź ²Ń'łšūa¾Ųöļ#óĶŪ¤ĢüJ1-<ÄšąVųģāÉAŁ pī÷¹ņ ę”ČÖÆņõ = Óģ9 )ūä ½ģ*ųśŌżń%ėōüęµ !3īØ fśīģīż Öj Āžä ³"ü2Éņ=ä! ōŁKłUń'čä Äćł’š)żb’ģWŅŽ åõŹÜ$Īé ńlj ŅńUÅ,0æ17EāIŲōÓę®ÖŪ OØŽķ’ŚČ²ļjŁžüĪ’‚I’ÓėųŁ“@0ĪW¬»ņģńŠöI6'%ė)מ7h­ä3»f÷,Š« ŲK²ņā2ČšēØFڇ"ę>=’ėŪŁŃą¼’ćź"ĢžģĻžC²łżÅ7UÄ*“=ę"K §„*ś°Kžę%1 Nō:Sūõ˵ķ)żłLśł8Ū ėZ$M/”G?^JC€E«Ć+/ņOūĶžńķ¬ ąā?… ÷BĻśåżJ<Żžń÷&WNA7×Ó8 ń0GāŠżßÕ śļķ·ģ«üų  ūžBü­.A <ū$ (’!įÕōķ5 öĶžšćō1ŲŲ0åµ ųķóćöŖ!ū2Ėķ@ĀĖōų7j=Ž:śłßp³é,'’Źc@5KŁż¾ßåE%źōä˜[ !«-ąC£”$³ ˇńÓŻūó]';4(öą<ųõķ“ŌČ!/CbÉėØU,¾ 2M;č•’"GŠ‘£ĄŽ+ō%ų&õ)HD įķŚ2Ōśž"Ü“Źį1^Z%-[tļ÷ėsą/¶%÷Ūć¦ß€Łģ"ļįŗĘ(YĒņ’üęžāźčķ9‚¤øjDī­<$@ą)Ļłēįö^>Ķ|(Ķön-ŗi@IüćDł9ŃźĻGų2 ķmc§#"OP*ż©q*Īņīģż9īž*7#źO%ŠŁü čģūē×E,ĪÕ¤Į+$’/#Dߊ %ÉG¬óė’ż -øÖŹÜ߆ėē? !ć ü ųT20 %į?(āōäśį#’ žĆ<żö #1ßĘśą÷ å@"ą 'ŪĻšüó#ēĻā *3ōėęē Ą8%,Ø%Ćō×9ī9' źŻ!!Ųķ*Õ éēõų"K )ģŚłļóŻńµéģšśŁ$ļ* ÷4ņĮéUņI÷ēŠģßž#)ž!ęŻėO'"ņß-ė( ž TßĀū/F÷ø3ćėÖū1žėcóśīŪēķ;ōž]Z@ūü’ź ŠFž"źŠ³öśī'’ööŶ ļÅģSŻķ7 é Tć’ęäå žžė%"’ŻņśŠ=ńFĒóīwž6ņĢ:é!ąõ÷ļø9ŃČĘŹiÜņĖ äńóŻ Óąė!’ŗŹśl6 #ž bėĘų5ņ ’«,µÆķ;A żV 8Ż3¬›éŗĖ!¤ 4ļąõ+ׯß÷ūė·/oéćiź ?ę æ öCČä$’£FŪų·×ČĀ ė^5Ł/:ĒŽ5)Bē£0 ߥ³Ń®ķÕ üüŲÓĒėŁ/ŅM) ŃBźĖG$"‰kļCå¬ż ŠĶöģŻåįDĖ 7“ƒŌ1 ÓšßM50’ī/#7šéĒŠ= ēyšŻó4ρšņń•ßRĶb €!õōį&®+ŻĶį#i ųÖĘLT,jõŻķ9ÆŁ)ń°€)ņäÉĮ,½jFėBBé ę¾OśĪÖŻ½ļZü½øŗpŻ[°žśõ+‰÷ā45@ÉÖéŃÉD ņķS[ !ųĀŃž3C‚Żņä×ųčū=.śŠŁŲäęó$ Źģ āņ žś4÷ōõ '"žīą ņāõ÷āä%üīŻé ś:YżL ńļĮŖé ž’ō łńćėā:āņ$āņ;ķüßīĆæķ¾ł#īÕļņ’įżäųź śŲŪłóŪćÓ4õōŻųŽ+ž٬Ÿķ üČóIõõēČh)ń'ōæ#ĶōśüŻėĶ1OGõ1üD@-ÖĖŅżWęŻ? üN:>ęšE%ķÓĮįįĆö7ķ5.0"šu2ՁśŃåœ.¾ćū Ā880*åž& åX÷ٹęĮœźŃ0ćõī¤÷Üńü’<¹#nå$ѹø*ķ įEéį%Ö Āž$Wī4żßWō%/DłĶ°*6 䂔*Łæ×ō,b4 pŚ+¤żź šĪė<Łż#MPōļ ž#łé¶üķūÓ%čę ģÉś÷Ņ;’2 ß éĪŹźÄėĘéąÓķŻŌ" Ģ Ū  ±1'ö!Ē:Ņ÷ł’ūŚ! į7ė ū*- œĪŃāžżöĆMÄĮ¢ļś %čĢ×Č8ś7Aöōééčõ9ā©źG¼å,×>ńæõ’>Ó*TÓB× Ś#éĪ®1ŚOÅ*õāīŃ+ÓśOŁłßō2õķ9Ų ŽóīŁó Öņō:ńBų7Ł ­'łŃ9QŹ ž 9 ’ęĒŌ~š@".’"9€—Ķ:#"óŲᯩ%(ū óõP?V0&Ćę (!ZęŁ śŠ Ę·īś6×ßDćģFžó 7·ä¹óÕD0-5; ŗžN7ś ćŻ źeĶ#?üŅ",šźÜåń߀K(ī/:ūĒĻūŠ µõ’)^⹟Qö€IüżŹK4 |ķą(½$Cų+źÓ"ūĀ.õ)ķńTæŃļOōŠ;4ū} ,ėššėēŽ)’ 8LśöåŪń±  ŲĻéü’¾üōę$+"Včż$±ę×ļ#é=śóóŽ+ŚāŁŲō¾ŲĄĶū9ōLāčOŗżMõš#®"ö"$ŻŌĶ÷ Ęķ%Ó śń’ żīśéڈ3ŚéÕ /é/’0ŚĮķæżÖĢNĶpĪw. Ķ3ķķµŽ=ģéęąća ROĒ!ŃXćh °ļ䎲śü ’żnĖńė;2×Ü HŽī/×/ī.UF"„ŗ”č÷ŽPn ķšß-ą'ģśūĖ7öļžWÄ’>ū »üõņęųšˆMö·1[b ö-ū”šdq€5 26µ¶ųņ÷ūēµčžm8(ćłūķ 6Ņ īŠ%Iįņį½÷ €Ų4+ČĘ $ øÆ0åżø7$5?¤ Rü¾Ž&ģÜń Ų ¹Żė9×<·Č*Ģ#0© 7lEsķ6€·ßęž Ó¾øŚāī×c|ęśš 4č=3×!2Ąź"ŚŹāÖĪJä×ŪüÜŽG俏ŲŌī-!ŹćŚ’ĢŃó  ;,’ łŲ"Łw1ŻŽ.ĪźRą2Óļ6ņöBĒS<ą@łaņ$(%A)*-å@_;"ŪŹ’ūĘŸZ0ż5šī‡šŲ÷MßŽŪ³å÷źźŚōē¬ņōõÖį ŁłßZ7<£Ä"ūłā,<č/ó8óčCEŽ“1,Ę ōĆåI#ćįō-Sā;@ ąžE"` ĀŌÜ*Č%8)ŚAą ėó̾ ĶŽ÷óü! ś ÷Õų*V ĖŲ!Ēž :ļŌAŻi ×Įå¾ū)/?ģ (#>ŚĪ0åJ €0łŗōąõį.€ģ§·ó)ķ’ć%Ņžē2ł_ÜVŪ ä .4E£"AÕÓÜŌ÷öŠłĶ )ĮŁ!9éöŃ*å%Żļł ŠĶ’źEŅyćŃ*Ż!ż €ķž #žģ ŚŲ÷-ņ,žńł šĢāŅō ēžż-,÷÷ĪõŻČ-øņŪ / ’ł!ā÷’č+įŪ,)Ļ’œ -ō/‘D ^Ä6ņööēYĄędł ž ŚõDśšé!B1ĢöōĶ/! ą9ķĖļņ9"ŃŠŹĄÓćę'Ž–ā¶Ń04ŌŅ>=Dłŗģć]äl,é ’˜  ŪÓćŸń-Į*Ā’ $-čßµ÷A ńāį^ŃõÖš- ,ų.ė'éżšŹ@ŹŖō [Źź&Ē3pÜķ7õ(Vé׿#KäÄäčqōŃ ß=éZž!’/ó(öŽtĖÓėąXēPīeåŽĒōū!€Õūś *·JŹž¾ņ 52ņ õõa$ ·žĘ&ņ Źģżźņcīõ/ ĻŚłõ0żÓ7ŚŃ8÷Ä÷čö÷Üī2į<Ū<8ü.ōüŪ8T,ņąåė åžō’ōÓöūāķ śō+ń ¬ßąźĻ¾ėŲš"šöųāśłżŁēėÖą/ĖĄ×ü·"ęU÷'VF3ų’³ėż’7 ŌAĶāćżń#ÅŽå ł+5Hźõ"!ļ„ū ž öưµ8!Ųłēņ)ėōü,@÷O&ĢņѾßódõÆ»+ąĄųćżóņ(ā  ęēüĆĀų J0šŠ,Ųó%łēĶÜ Ū7ōšÜīĄļ*łä1č•üńėļ3ó¹7üų§ųėKźčÓ30 5!šćĻĆ /.āźÆņ 厽ś†#gūńśbõA%5ūŁ0Oē#ē² I8 öBĒŻ¦ē  ’'·Tņ,Ż;«īóź¶8ūņÓ/żŌūķōõ#Ąą¼(Ģ'ąßB++$ČńŁŲ#š/Źö¬·Lźāź>¬+(’Ž‹Ō%-6ó!’Üw+÷~Ģ’` ōŻāžłĢ ü;8$Bńņ­ÆEķ%ßČ å÷"ōėēž¾ÓFÕĀQŅ[÷ėéŪś¢ #ńšų€×’'Ā!Ń<Ų¹:õ̾!ō.Ś+ēšķŹ Ķ9Ł*T8"C ęŻCQ®.õ²ŚCŁźÓ/źó9 ø   Ķüģć6ų+¹ūŃł Æ!ėxEįĻ]é~÷Ģ>#ę YßMż/0čĪå%Śčß0žSÜķŒ%łÅ[žķhE;Ć2 ź›ż4œ*ŲÕ"ņn Ķ.»ńłõ$žŲJ żÄ:4 SźøŪ÷įŚŽŲ×( ÅśĶåÓ;Éלäķ ī%$„ žü±ŠÆńŁą÷$šäŪūŌé)ķ 8€5ļø7é *Y*×ņžŻ&é īä%ŃöåOžŁ+é Ņ;ž*Ü;ą$ūōļ9Ćń®+¹ ’`’äRī$āÜż ūõ)H+LŅÄ&Ś×x’ØGęjēĶ9óū: Ā¢œödÆ& 2 Ļ€ŌöŲžČ0ö%ųčDĪ4śāśóMą ÷Š+Ž;ķ Ļżé!ē %łūö ķćĢ Mé-ב01 žö,į ?*äīųįŽüÄAžęLėłšē(īŁJ’āō6ųōüīūųńģīļŲļĄ¢üĶ„  #Ų įöėö ^.ÓÜ;łĢēĢėõ8IŚŅ jē+’ß’ģ,ą'/>Xbśü ŠšśSŹūܱI¹÷łĪüŻŅż­īģō¹*Š>ūęÜ4Öü&"é<śžĘõöšžŅéė)ā>ń[ōŲÖ&O-ßśėōųA'åeŠ$ķäóÓųēŅć +ńČßą$³]ā’øšāžįēō3¾ż7ąųEżļé Ź#ų3āž\#Źņ4 čųć É%åų 0'ė&ńć*%>å1Ń÷: ö7ėüó »ŅäŠ2ā Xč’ūÉśå£ąM.4õQ#41łķķŠśülńBōŃł1ōē3Ē»ä½ ūų ļĘ 2ć(å÷żüņīūūŌźCśY Įéī9å.Cü_Ö#ķźķ4õÜÜę&ܹų¬ įõß½*ļüŪ¬÷ź ?õā·5+)ūß$ų+ę ŠÉ/Ųōš; .@śTżLŗ½󞻢7 õńĘMÜå5Ī÷ę Ė Bų cģ"ųEņ)śŁŃäŪÖ’ÜAÓ'ļ Ų°Ö ńž*^ņ.<>R8ü"( ļģ<é€'ŗā42éüŻžźī²×ķÖččņ.ī'łBš ÷ Ń-WŽ.č:÷ ćÕū'é„ÓVīé%’6ÖiŁ×Ó2ĒøMČ ū é'÷†  šŽ2Ņ<Žėīļć5ł×*żUóĻM0Iģ¤ /ģ ķĖÆ 'ķ ńžĖĄ1č¦\+ žķåŪżŚūēÖ“»)"ūļäóā§bōšŲG6ēč3ōżńZÖ³čEŻł+×=Ańš+} X’Ē+Ę(CÖ3Éå0=5 ±IöćÄ H:%Č<ģӟ ³žŚFįdģū(õÜ9ńūC;Ė2¤ģ€4#łŽ9-ÄȾ€żpģ 4Åķųü-»5MįīäĒLķšä=EÜü ĆšćĒ·ŃTż !¬ėŽ jż0L«.@q-ķ ¤äčė!ó:1 &×ü €1ųzĆś)¾żé-ņŻøüÄü*éwL¦'ȌŲęGü9łł'Éņ üVįēÕšŁ Tģiįļōö×Ū3½9źĘŃŲ¬ńöłā&ö §O% īźJE€ż¤%åćā¶õŪ“(ö2Åoż·÷^īī2FņüžB~ PÜ*śņ¤ą-ū¾ŃĆųŽžžŌ’: ķČ5-äŻ&ē.Ü#JĀ.óäĀć ^÷żż”+ ā!ł«į44Ē#Ū6L ųB@;Õō«’ļ&’,ūŹ7ļī-ł(¾2YĢ ÜmĆź’ąé /49H',šį5Ł÷JŚ,%#¾öÓ' ė£4wģśóŌE1»Üūį,7Ų ō $Ķ#ˆZĄX€ ē¶Ł ū+śņ¦ų u†æģŃõ3*ā“+įäšķņśłÉŃł;śK üU Rk*źŁó ٱą4õ3[ęÓDļųĻöJēō) EεÅ+6=$MŖõHó:ŗ÷Żāü’ŗ$ĘŁī?Šß×605&Ō#“ī7łÄ@hĄše0śžH0ļĆÅåäKŃ_ÉŹ ׹óL!ū ²Ń€>įOńŹĆķ“’ā#3!Øü3«Ō'ŹĀüė="'čįŚ>ŠG NĻ3!ī7% āĪÖ/źąģ! Ų’ąÜŚ"łŠö*xõūöéżł¾ė’ńåźÕöėĆü’ßōöģūė’ē%9EŹš Ķķ-ĢNż÷ÓóöĶųž+ł'ųćņū'łčßäłć łō(īīĄäī!Šź)Öé+ó’Éįńųė& Į B@śļ÷OŁü$üäąöć į ä3żė’š łīń\#ļö %ńŪ?Čłåāt?ŃZń&ÅŻė 5į÷łÉ; 2¼©ł-ė7ŌųųĪ"Ąż) ńū½Āųļą €ę-1ņųQßZßG öˆī?Ņ;%Ž€"õ8 ü÷č.<Ī×ō±ķ<ÜāąąģCNõŽĪń>žU/£*%,F? 4ūģ#oEžÄ#ūźń8‚ņTŻŚŽĒ€Õż ŪśŪ‹ó6ņåĖ™żŅ®4ęÆņńōõ²”$œ&˜Ż]VóōęšÄ󂹞ą ČÜ4,bŹ#īĻĻī#“āōś#÷äŽuķŗć -·5å1łÉčß“;CāUńŅ3’šņī÷ßQśE ’ĘT8ģé,ģŻčÓĄ¾6 Żęč*÷/ŁĻń’é5ĮŽfūłń ńÕ(ßźų1ņ÷ßń3F (_īĢ’D ļä .ļļ}Ś­©ž Śā(`÷ q 5Ä&ķMī±Ųā’÷ėōŚģ׿­Ī$~Ģ8=šåč,, ģ >č čé•7ėL>zĖ7šŠB2E“Ž,ł3“ąĶŗ{Ō Vīśö5H+ü¶ūē)+ŌŚŁ"õ«ŚÓ' ;!&‰“ļķ#žŹVó·č ›,ŚĘ®ś źä@üę›ŅÆÓ™-µ)ś6Vśé4"Ņ仾 ĄĀłX6õīÕåŽ)·>×ōT ģ 5Ę-łī!īćŠĪ-!· ŽHv1 łŠ2ģ÷ó/BÜ æšŹ17 ų/Üė&ńėõCįļü1ķ-ģŗŚ CķtŅėöę8ÓPÜŪ5ŗÕ "ČōżµĪ É@žķ’č,ś<ÅÜ ųńī üyMėģ‚Ōč:Cõ‚ų’õźą 3u@¬#7 ūō.ū@8żƒ„óŲä åBü?Uę=ų#ĀļĀęåļ4-!Gū°ķæüŅüĄß śéśäĮ äéžėꎰ6 Ė %Či-;1Cļ7Oöęį„ų īśź"’CģĶ,įŁššßö Ż-å ÷ß5ż$ķ«/žėńŪBöž ³ņ'ß8ś”’éž5D_ėÜśj!ōUģļśśä]RčėüĀÄ-× īąųBļC2õLāŠAōåčŁŪöå¹öź¤ē"Zž.Ū" ŁįÅčī8/šĖ ó×ŠĻŽÕń)€ÜŠ-@'$Śē Ž×4ū;.#ž5l0ŅŻł·Łķ% 3żÆ7ż ū.öšÖĪ%ąż)óś -üó-äĢР‡ ę ö÷»ęńŁÅ&żkżfå/ÖšūüśĀ-’ŁšGāę5Ūöģć °#£ Ä Šėė—üĶ6ģ÷ē,ūż?ĻI ņšͰįäž/׏źŚ5śßå2āÖįŪŻ Ü.&:Śī+óŪä¦.ųÓńņ+/ę3ö÷ŁŚ ęÕ äE& ‡°Qā3#ßččĪó¼ÆõŁAÓąžj± «/Hė:ĻśÓĢ ö’ČDEĻEļ· žŁéŪöäõą0žč- å!eĀ’’æų óŲ҇O78ź+;­2ŽAĶŠ 6!bµÕŅRWńü¼é-'ųāRĪöĻÜÜĪźō+ēć§ü’ļäh ą*ėčź ĖdĶżóķØ*-ńĪėåš3ł’įÖ Ę0ī ½*‹2žś.*įćįĶėļєq>śżŲÖ]ū«DöÜŚćĆń:$?ĻńĶļåŃū(%ćõę·K żŁē$ ķ:’Ņģųīō.ņ÷©žR Uå=%ż(LßõŃQūīß ×*’×9Ś(ø1ž×ķC8売½@¾ Ķ(÷ö+ ,CŽ$ł.ģ_΀Ƌ/ė³žFłķ%°±Mī·æ²:éņĒŌ ×źĖ›š#!¼šéåĄ|)-&Ą¾Źż42õ»÷„» .0óüśŠę®(¼BźĀ1)UŪÆÓE 2¾<ś %³ńŽģō”MĢūł ś,Ś¢), īņć@µ'/Üś€C9,<ģŌ3 #5Ö–ĒŁś ŃäŹ$ņSį%²ś,žõłŹŃ3.āūß-E-Ķ«:ļ ³#7¬ Õē?Ń÷¼¾'»H=äųłÜ÷"’ Ä,×õ9±3M1& .¶Qķ/łIāų« Ųö +łł$Õūšå žĶ+ą­’ͰE*ö«Ż 8įēżųDÅ ņč4ēåĀŅēõ%äė÷_öķŪĻŽö’ńR’æ+1IķņĻś¼ŽŲ4gó(Ó -Ģ8ū&žłļ±#ń>!Ķ>A&-Lõē2Ļ ųéKb»ĪX>Ś€³ž7»ŻßöĪ„Ķņ ÕEńvŚåŌ$®ĶšōRBĘõ ÄŅ÷:¶ōŻÓ’5ėž ›Ś ńøžėźC¾/ļĢßö'å÷śė'4ā’Ä Į·#ūTöäļõ)¤Óóźģ(dĄśM¹©!Óö$óŹ}&Ō…ėW eYüBųDĻ^Ģ,T=źĆ/`ąż½ Ł€žüųĶģš:Ž€<  øHüE8Źśžūצ]µĶŗčČBöńū ōöÖAŁó:$ūģø%7!Ź <.ž½ų"Tčņč÷ę$÷‡ ܰ: *ļ$. ßÕiļ,EļīĖī3ÉĻč& K*łĮ,ōŌõś#ī ,LžĖ×’ŲžŻē* -āµęģ©īžĪ%ķõŪģąŪGųķ`šö.”$5ßšęłņŌó Å: ęVĪå³Āłś'(ü ’Cłéęā÷ģ Ėóę!ę’ą2Ōš,< ć"ŠB=āéĀōü%õņįżĖēž!’šļźŁŽś÷ (ó¾õśīčį$½å 9źMŠ2ŁDīčŚóMü%ü šäķśŽ$Ń* "čųģ ł­é$’Öūšė8Õ ŪŹĻ Źę óļ ĻÜųÖ ńą#LōĻÓÜ3ö&Ó*0ļ  D.jį¶åū+§ųJ’įŅv9ß ±ńČö Ń(C÷( @%ŪÄČģęńŻölKėߌ6+Ō“ļ¹Ią;Ōū!=äd"T ’DrēųūŻńĆ„ ņ*"ž!ż5aīŗčõĒ - ķčī•H/+'Ųę(ė<ÆķŽé&Ļ÷?üąē Iē©F÷õƽÉ^ĘŅņ1ščöįŚ±éŚyē3·Ņ8üĄ ēOąŪ%śų5 ņą5ū ½’ÆąķżõļÜŽ¢&ō+)5ó ų ī ė’ kŹU1/Ł)ļ.Ś>#õ’Žąž'bü¼%Ń*õéśō8ė¾ĻļņķčĮ/š÷ēÕŌöÜŗ"śŲ ö ŚńŁöKü"ā(ńš %­šõ(+ ē,ų!+óß×ģ’Ł'ō*āž °_ÖüłŃēģBčżęųąÜ Ž'ŻMėJų #ŹĖ“é Ć 5ŠŃā(Ó.$*ć"ĘśīO5ģĒē¾ōż×ų&0šźĒĆÕóÅę)ņ&ļżüāī)½ ā!öģÜōŻąńóź­Ģķß.ōŅ>'Å Ļ –/Ź!ėÓņ µšüÕE!ųę ÕĖļ @ŚĶ ą3>'B?ūŁ5ģę¾·ćŃķ'œž9 Ī[šš&öĶ»ٵ&ōæ4ł:ŗ" ŪżāķŁDĘĘčUŚ%ęGó(ĻÕ*Ł«0į.Ń÷įū <¾ŻāiŻö Įõ:*÷Å įš€'šŚ& ź,æŪÕ`'Õ"’ ŹųžŗÖ©3„ŖŚ±ąńÅĻ2öĄ0õćS’Y¦é’°)Š”*5óM‰üÜŹäŻ~ÄkČdÜåŖĒ."÷8źĖēPó¾ØÅßé  *ÓA‘;Łģ!÷»éķżöÉ ü3õ'ų@ÓĪŻpÓ7ž>ÜČń2ŌįaŌō¢Ł(0Ŗ!£įō§ĄßżļŁķ“X輝2<ķéR5O°ĪāKåįå÷ Ķ© ń7ŃśÅ­ņ5ėśŃķŗæĶ¬ Ż$ÉBāéĆ%·ń! Õģ¼)„óĆ£ūō:õ”¹ēĪ’÷kŻōŪA$#Žņ½×,ųŌ}»įāÉū7×8ךh{3Ė&.ß¾M¶ņŲ&éR3ļ ®ŌŲ÷5 żŅč9śXī ö8)ź ā#ł+@ād÷įOš7ČułCŖģāžŹ Ōõņš*Bńų*§ó$Ż7<åCģ+öŹ#:łąķµēįŠ?įżņй(Cüļ5ŌžūÜ3TļäĒIŻ&õ'A¾UĶõ€4č¾Õ OĮä£ õ) 'äŌ»] €S0õź½ēŚZ!łėż> 3äZģ+å'Ż2ć” 'ßꑽę+€›žŃö<ķ+ō É)± /*ļķ1¼õŗżīŁåSYé\åž`öݳŌõųČ>ķÜóž ųŹļ%» 1÷’Ķóåšų)ēĆČąē Ļ'.Ź>ā0(1Óč łųūę!:Öż¹$ŽžF+čVåå÷×ū-/"ć'łł ś#$^' öģłņäŻ7#ü:DŻĄ ’ ŪĖćEĻHēā);õ—#ŗų8żö/ ½ ūžī#Sõ5’ąā!ń-ČķJ÷ÜžI1TÄ/Cśćå2 čōćčóŚŪž.*žĒÜ:lŚŪłĮŠł’6Ś 0ņąŗšŲń½Ø ėńś"ųūŗ ō%ń ļ8õųNŚćūųŚŹŌ.QÕńĄ8Äķ ä/ŃéEšVØóŚ HĄ×Ų ŁźäDéį3ā%Ę,źŲ(ķÖē %ķģ¹Ļ÷÷ļĶ("šÕ ø×ü(ņM’ļōüįü',F4óÓ:ęŅīóŌżęńüąęüÉ“äšÜaÓ’,1% ¾fņ;÷Qśæč’Šį曚ױé»ņŲ×É?°åžĖ %@ģzźKščč²ē ńÖ;ß3ŪŅöõÉ(ó'ąŁAĢļóÄū ĒŃņĘČIĖŪļŚ=Ö 27óÜžŲźćHģā.ę× <čć&Ü «śå59-%?ķZź ąŌ÷Ńģ»ć aąĻ)% ĘČÜóČłüėä- ·Ćö$Ä ūž÷ķĶõŌĶĪ:ė)źõ,µ&ąŅžŃ"Ļńśļę»ęHCF ž %³*ŁŪ“ņg!’½ąќŪ3;!»B KüwėĀŪ€ģ€Įó÷ īīē ļ¼č¤ą*×-ąŅ/ū9EÉ2üŲŁ€)ĆįĢ=2÷ ōIōē•*9dö ę ę7¼ä‘"Ļ4ąÉą³–4õéś÷éėTų*ü’ ~ä Bņų?Ż&Ż"ó¼DŅA 0 ž%ŲģIņĶę@łīĒ#'JŌ>Óėż„Žõ½šźSū Z– ŗ ^ć¼č"żĻö)=A ;Ģė»Ÿ[=™Ģ¼%ōGSōĻłĶÖķśņ:ķĢŻ2šAÕłų8ļ<Jōī-ķū’ęŲł?ģEź¾ £ī÷æ%¢((5 ųIŃÖÓ4®“(/¢ķłMē +ķ:”e^×7ļņ÷Äųd½$ łž÷#ž£E$(Ž7 źBĻū& ė"į¹­Č÷2Äν.fŅ,6ķÉę>Žā} #īō’˲ ĖĖų²+°óĘę˜śśCn׊·ęś0éĀŃ«@ņå²£ƒ «æļĻż5gūć łÜŗ& fżc<ė&šc"0ĻÓ%~ß ĖüĶŲBÓ ä'ę Pńķ$1ŠĒ÷“OīšĒę$­ ķ 8żöĒ Ü.ćņžŠ2žF¶ iA±+Šļā?cCüŲų9ÉžßļōžEάåŚņ&X×A0  7&ų!ßČźńn/8"ūžł’żßążū,Ų/9ū4 ŒĢ)1jāõļłö^ö Ś5ī/ų(ąśĒė ž$ł ’(©!Jčóżų(¾.łžSÕāÖŃ Üģ!Łō9·a( ߊź÷Ē+#ZĆåūļ2ó  üī’+üĢźåќ.åįÜ^ŅźöźņÖLčęÖž$>łē>3üé­üć5÷ŪAÕ ńŅžÜšĒß¹Īź8å ė5«7ߥ8ÓŁŚ ó.śHY Üź:Ļ*Õģ’öū1žä!XÕ*÷łQÅś ÷'Éģ!,ģÄę×L/½>ęĢÖ22ūŅ^*’Płö ņŌ±'śKēż×č/õģµ!׌=&ü×’ ÉÕ€łóūžķķå0uÓJšcåś²»šõ*!&ó°ģÖ2łõж)č?Łj >&Õóü:įćļŃå%> éSöÅ}ļöŠ>Ž÷ž:ƒ‚ęĶū×Ŗ,Į~ģ‚Ö¶ą²½õ€öЈE÷Ćgßī÷’p\Mę“ćśŲõ ±ČöŹŚ”Ē)Ģ~É½Ś šįŌü¢ļ“ńś€N ĖóÓ/śģ~čĒĖ ļ'¹īéÅĪ_ č 9!(&įķ÷¶7¦åõ×%ÜRÄļ\-7źõ:léŃĒń±€ÉmēõčžŅż˜ŽŚŁCü’É~!R›Ķ ŅųĢų?Żł Čā’žč;ŅÕéž÷  8ĮI’$žńAUō!ąF[$äŅ0ĪÜņ4óįü< g6&Eå#%ĒļĘ/å4$Łć’$ųØō#åųSÜķ)ńā ÖF( ėäš1ā  ćJ łłā›,ūÓ]ņ<üކ2ūįé- ą$J*ßäCÅŻ¢ńSąŹLśP¶*ī ÜõöśŽäÜķŠīā,ŪĒžąDåŃåķÜé’>H%ś ~-*% 5Dų&“Įäļ ³ų(óן-łęŪĻūŌśńŅ™ĀčäaÄČ)ŽłįūõWų¼čōžŻč+'ēżļĖžóĶĘ Š3 Õ żóé&ļźÓ$ Żņ’ļ1ć Ī.ćĮ>¬ū8F'ą’ķŽż“,)ŻŅ Üš×ēņI(Åå0 -~öĻĘēšÖ%*×±X¾)C=ä€6ń 6*D ÷‚øžYäńϤ$ ńOėķ--ģCCł@ 2 ²ģ^G[š×ļ"Åé+=żņńĻ7õ!ÄDö®$"Q»ņ!Nī.äO7žś5įÄķē?ūŲł’'į6×Fā"H€ĀåŪ¾!Ń>īć'»¶€µż öRįäPłÜÓģ.½ āŁ ;©Ü÷ ęųN;*ē%äFŁ"6ŲōõÄĻńĘćÜ!8ūłŠÜ/õ'źQę ’CÜEįä²ć2’üEčžÆœ$-ł!$#Żšńį!/ŚÓ ėč( ŗņ®ōēPGņóß&łõź ī!čŹdVŽō;ćWČ“ś:Póˁ(bį"Ń~÷ā 25+%Š &3śė̦ł$ÖÜż$"½YŪūµ æū’ģ ,õP›ŻQäÉ ×éÖ!ųŌ ŃCÕ\õīÕų€ ¹‹éņ=v ē UŃĪų` 5=į?ŅŚ÷Dę°õ%FGüšČę‚ €äŽļŻšPõś(ɳŠ6ä**²žžśūÉ üõó!Ż> ż¾ ėeėŲŠž÷_GćęY/5ßŅķ¼CźÅ B”"AźõŹ ]ąåŹęü·/DāöŠ%Ś-īÖ;ļoń9ĶõG½HĶ J*Ś ĘņāņźÓ­5Ņ÷ ųī6%+ļGęĪÜ ¹ßÜ óģ ÜHĘł(‘öSõ'CÖ~·sؽäŲÅć7ŌžĖŠ ĪK Ē Śė鎼’øćÄģ02łĻ ż x ś\ČÖ']ŻčšŹžŌ’öÜ?­ ļŚŲ<ēŚĀņķŪäĪŽfōŹ{¤ēé9D&ī’]Ö =e- 4ē*GŪÕ+LG¶ū+°ÆŹ8óMÕšķßK±Õ²"ą&č.śĻÓńŪą×% ėś“åģĢõīėā Ł0ą€ļÓÜĖŅ®Ļ4V½õĖčśż-ņÓšÅöܚż²²ĮDŅūW6ó Š#ļėėķ÷ł$Ōi&Ż $š@śUOõ÷ž5 žė"ÓĻPĶōńķōéĒŪ¬ń--ģģ¹Ę5Ę ń^5Ėū0S2čęþ%Óę*"%Ś žšĘńŲ øćģžŚ,Žó<ŌžÄ¶90šČóŽŚūŌ#ž-āāB#ėߣöN’äĒį%$ł  ;*ņż’óĪ ’źµüŃŲ³ėć'&$ąįįķ óļāżüł ģōŁķŅ4čö÷ż’4 ääźīćōč)ō óa "ėóųĀ/Ų8ōK&ī)½üÓśśū’ķą¾×ģõ"]öĆĢ Ę>ń%Ń'Åõ %ŃņM1™&õŸōżū±®!ņ€µ29’ķٽ ęČKėĻ &óꊜ¹-łēć-¦É įXĀö”š|"/ ö³/Ģż³gšß¤9ƒÓÉ2ŻÅ/Ī"łłžx¬īÉ"ė6bE×óśēęŪ(‚$Ō§ Ė ”ŚąŌ õļ8Äļ!%ŻÅ įÜåģć’ļńé<ßŗ ź1óŻMėĢ:(l]ńżĆĢū÷E ÷ &ŲĮĄ Ś2 -×Å$Ņ<ćņŻąń}÷J/K<Ų$¾łńļŃ*õŲē1 =šś%»åżę%JżżėæŪ.ńłóōšķēīū ūV ł4ÓųõÖ×+#5ćģ&ßó·@Öū Ēāø“.łļÜ%ūėģ.GÖ’óōÜńÓĶŁ]ąé8N@ēņ.ą½ć)ńö÷ Ń<ĪÆ'Ž ńģ’!“²« ! Ū,~ ņń÷įõųę!“+ń‚ł!ßįé5Ś(ćņ/Q Ē Åõüµ¾üN×ßčōūhīų& ’ü ō£ī×āŽē- ą%ŅŠŚ÷Ļ §¶å!1±ļö÷ńęŅĖ-ÜåÉ)Äßä)ÅķõöĪōžĖš¾/ śÉžžśųž°."ĘŪ* ńļŁ(ėF+“), Ŗę/4I4ĻŃ$Õ Õ)MŃ(^€Ł+LŌŌ¦@  Ō0Ü@DMÓ šÆééŌżņŗ7)üÖį/ęÓōķśõA(·šįüźÄ÷+ŗ?Į&VņF¾@ņŌM&ŗ’Ģ3żÓ)Żśšķ±ŁČŲ°æįmšżÅõĶ›ÅC×¼0Śū4$4įŅ 2õąłų"ü4ģ ’ŠąŻå&CĶū7=ך(¾ @éęE%ó$€PbÆ,]˳ųńāčęŃ£Ą61ä)ŌÓ,&0/śé<ŽÓ?+čĪģā Ģżī+BåĖÕäń2ŗł“5ūź 'óä-;āŲ‡ā€ģ=(0ęäļ9ń=Üż%õÓ®Óš%6Õ6’äŚķŇšV5ĄĪ ŗhīüƒ īßčž“Āü/]ܰÉ7$%åņķńß6&ģŃZ0×zńfóūūć?Ų7 źżź!é­×Ó=LņYžīāč ĮżÖ¹¹ÜG.'0=Såėå(0īų 1Ó>ėÕāēćų;5ż ūļ¼ńŲ%ļA€D Ž õó$•š/ļĖ.rW Čēw?ėq'ČĆ Łė«-Ź4(;Bģč’H*ÖÕį×Ų""ųC ŪÜ€Ķč*aņš‹’2Ž,żō& [ņ9åAłL ŅČ=Ös¶ō@ģńÉŚšėżY¹B?æ/į\ć[’2##,¼üEKī118Qō"łļ“23–'€äčė*=ś”J!4g63<ņżĖĶā@ŗÓFn$ź­SßÅm>±śX .Ųų- čŌž ÷ śł ōĻŁ: ß$-ņ5įײeśģč'śöŃĪż6tKųŅD% ęķė ĀžóĆĻ6ŅēėķóūČ7"'Si~ ż šī ßÓ'G¤9īG½Ł’ėĶŅFłR5*ę9ņ6ņšó>(ļģÅ3Ū,+/4?śéėņÖÕö+ö0¹Oö%ŌŃ'ćł’=ŌļŅæĶ' ćü$ųķ'ŪXĮ ä{žŪė 0’ŅæÕŪņß×;9C8Ā8ļóæ×¾¹×;!FÓłģBŻ-‘€"*PłŽd;įņĻčŠLüŹ[Dö,ą:·< Łø'×ō&ņĮśŠZąīõÖĒ#5,õ1źPW šžØ”Ō’Ö^Ū#\ķķ+"Ō 'ģćĄü1åJŖŽlŻŃ*:óĆČł‡@'Ķā“éōZģ *’錏 žÖųł1Ŗć»,3ą÷ü0);ÕÆų7~Ųķ\ń%ž DŃ8C#ęĖ‚vŁą A32ŹŽųžėž%2Į Ūé ĶYF\Hśļ¹JÕöķ1Ńõ æŽwķ)Ė Ź)ͼ‚_Éģå¾8%łž’ÜŅāJ/ö9&¬½×ģŻ 9żšßŲżĻųLŲĢbIõæ)»£ĪģąSž5/ŅÕ.;¦1ZRµu2ļÄ*Ę'2ńžóä&Õ_7ņžĘśżŅTõļķļÕā!Å’Ļó"ęęģäńüś/ßóüż%šÖ7 ĘŹŽ$*Ń+Åöįõßō÷ų÷Eö ßńąŠZņų½ųŻ ÷ļ7Ū Ö÷!Ģ ćśĒ ģKä–¹_ Ź Śėł>Ķ. Š÷4"žÆä9+šŪł;ō ņäc³ļ īń Ż B”śż»Ū%ļ'ī! *"7ł DŠŁõ .÷5ōüō(ćč(šhÓóāÕ./ŅŅ÷šóč¹ņžĘ阌Råaš ōĄįįÅöė-ÜŃ'õŠÄ2ń ą.8ł²0÷čģśŅ'5d!T"ų ūžŃīYĖ\ģ(ųŁÜż” Ūėį>źčåĪ Ēōb©ūŲģ½Ž.ųć.“ŌŌąŃą ź5'%ŠÖŁ=Š3&2 įÖŅ%żJ¾čOżļāō ŪųŅ», Ōī'÷©õĆŪŚåŗøįņå,+(ū¹õ .äżīōüéäó&śéĪ’ń$¼üį#ĶūģĻöśä÷¶)÷ū Ż*0öćł0ŲÉA"’ė’ķµ $ŅźŲž (R2)ūÅĻžžŪöŪõ(;"ūžŻå ś4źBÖ6Ūķēüå*Ž·ĀŪÜķ”T’ėł,ü`õćĮŌŲeł]ī ÷„¹¾ĖĖK Īʁ’ŻéķŲ$ČŪčü¼ÜÄnüžņĮÜōä4)š:Ä3ңȒžĮ±’į$ šČ抜#·åō^ŒDė€ żT50/į/Ų';ĀR1oŁ`ž²ō°b éĘń0.3/8÷ļ Ą&ōŚ žW(ū;ņ.(+»>öōČ)³Ōtöę¶AH!ŁŚųŁäŲ4±Ī)Č:ęO+GēÕŁk£ ą ų.UŗŪM#ü¬Äńā¶ėAåž*+źĘ@į/$Ä’ļ W"ńÓÖ÷üģ4åü)ˆé$Bś·Ķ…öźį­ć×ī€ķī¶É]äBĀ©ī$éņāėŪŠÖ#; ×ńāAč5ł_Ņåīł/1å$? īŽłŹ«Ü5¹ķ6ßŪ55 āįūūĶ™/ łĶĶōēߣł ļłźę0 ™9Bč-tćnččōÄ æū(ļ ögūĢ¢šńņģŁ%š ģśī/ 1ļĀÓLśĖŹśŚ›ĖIćČŪõ(Ūā%!ö’2Ļõäöc!ėœü1Ī/  ĆŲæ ģõ2&4ńŪÕ6ėŽėāōB=ž+ą,%#’śĒ?ŽŠļžūÖ%.2éĄ F/W Ł0ūž×ćĻų:īōęćźEąŪĪ b>Œ čŲ,éCYņŹ$p=čkģ­ž»ė ęź 1 āŻ%8ćų<čÖĻėÓ ' ąēõ$(öļæ6åł2łę +,ęüŽJ @®čłé Ö |Ķ÷éö§ !÷āęJłĄż#é@9ö7ńŪńįšė×5čśźĄäŪ%äłĪŁóüé-÷żĮ >2šņ+łĖ/ī+Ś *’ķ+łéōįO’ ļ-'ąŁ,$ąļ!*H§¦ķĻŽIŅ ļ6+#įŗäŅõŚeĒė$ł) Åą®$»=šÆ šž°,ŚöŲ쬗;iš-ö6ųÓŲ)O>¹;»Āų<Ē/ĖHž`ē$‚ä4’ 'S)éĀ8šÜĄ;č>ł/õ¦Ė|š­ž²Gn;š Äóęų Õ1ēÕó”žA*ėĮŠ-Éāŗ­8<źüAŻĶQ)X'9»–6Ś{šę8„$-£ź*7µÆ"-ų⯳ č~ūń–ó(7œėøńŚtį!ā(dģč×!ɊāĒ79~īŻų‚ęćµ)šp4šXÖW"HŻĆķ@±Bé# õ΃ü@ęś% łSŻŃ2Ā“āķćž÷€SÜÖ÷äLśå×ó‰Żęm¬Ę $^}©Ć™Ÿ, Ē,ßåėš®#Ŗ›ĀNļ żŒF&$"łŠe „%Żį¼żĻʵż‘7ī}=\÷ éīčDF«ōķ³lŠ+ė^V÷Mē7üż½B±Ī#š9łģŠ@é*6ń,õ0&ź^7īčąśąČśJ ę#ęøŽU DłÜžF4ųß¹"ŸŪćļē{ģ7 #ż)ŲöäŪĶ4BūĀVēļ,ąé ńŃęÕ+ ņó1žéģŖŻ GšĪĪšŖ  ŃPL4ś½ōņ’G,ė)(ßĖęģų3³éLūń÷C& ŗX×õ³źń żöDÅčę)źśŠš£żšū<1ź&õé%É:ØĀ’°(ģ ŁōĀÄ÷Q+&¶īń9³Ā1żĄ?öś#ń pš©>śÄ3ķėźĖł_€$óB”žüśž ±1&Õ#"ķµĢó".Õś ń42ļ¢<(ä,š¹^80 C×äEų#ņŲ3ą¬Ōßś7½€)ä:"@=ąŻ¢ ó:OžäįōN„Žūų'śĮ÷śbū6żó2Õ üéČÓĖ ēĒÅugē(ōÆņö9÷īZć÷ū č÷ Ś! ģģ+% ę -łōŌ!żźįGŅ 7õĶęś4 ąłżųę:ōä ńüüćĪęōöįäł÷śõ ōōśü1üųńūß ū /$5Pö(ń÷((’ įų*ēų ÄŽźņ-źėśö?ł' ö ’ŌéćĻŲēłłšķś>žö> üŽśāIįąųģēÆ Ü'öōųóŲż÷’ūķš÷õōņŲśćžŲį"’õüõ ćŲń )ź×K źĻõQ’ŅüīŚ%ńåšéüžóóė ņ ßõäź$"żģć÷ųšö5ģ Ś':  žŪ ļ䟌 įū ēõŅūī!źé£÷śR ųżķź/,öŁżŅė ģņ"<ėł$ūDĪŽ’ö÷õ’īó’å’źäō!Ņłś #śŽ÷ēöłė ń R+¹ ü@ö’ć æ’Ü’ü é÷ śŚż$ų ś ōĻńū ÕłųüāńŽ’źśōéüē’åņķķé ÷Åśū XüūĒłģüÓ7 åė÷ń ūō÷ćPāč3äžåśżķ óŹķįö2ā&’ā%ń ŻāŁńźģń’žšų’üüāü ō)  ņåł ūļ čķūłž ģöļūõģāōņ’ń  ųśē žēßüńßō ņ ł’Óēłå üó’å śüüźöźž īžżšī žų ō čżģźėüī  żńūų$šéäū 'ē žā š š žļō Ęžķ’ŚńéÜ!Śīüņłč ń$ššõĪīŻć ż²ž%×2(żÖĆūėöYŪ’ü äļ ÷ķ żżōīśżūźš "Žäēó ķųÓŹ¶üē#éś’ą’ó.5õžėćšś$õöŌņą š ś5žę’÷ ńį’õé óÕńōņ ł’½šõåīśųźÖį#šźė÷ōė÷ó šē"źżņęųüģ õķż÷ $óõśõļų ķ /’üŻūī’$Ż% ’÷ūć ļńėüŲē’÷ż šßķł3 ųė ’öōž śńĪ $ÄõėŁüķóķ÷Żė ļņ"šļūģö÷ļ’’ņ žčūśłĶõ čņ,ņ’ öźżäćęāŁą ŪžėżE(ćł Nąį åńā’,å,čźż’ō¾ ÷5 łó3°ü2źŻēF;äéźŃÖŁŽżäŲł× łš÷Ö$ õž’„ Č ¾ĻĪČö÷ś øś$?ś#ĶÕō’ öāį (ó ņ čś ōō!žåé+ūū ģ,ōÜāĀļ.'ėõŅóöüķ÷× ū1éJÜš."󞎹žżüāō’’ ų õšļóö ųöėó īóōżļņģó÷ ņņI÷ų īōéėüžś ōųł÷ ģóĒłēß īžßžīžė "Ałėę%ūé  ŻųśūģņņģüōĘģöņīō ó"ü!’ł=ūł Ź÷ ’į ā ÜōŃųūöīųųśčķšüś%ö Õśüčāįżžū’ į ō*ń#Ļ 4ććūņģģ ćü·ņ’>ńż÷ ęųŽÉ łÉłń’ūóž śļšśī÷łł$ņ %ķ ęīöūūõ»3’õö’ņė #æö ūõāģ üć % üš’$ūčńó SžńļŁō&żöśÕŻ ś Ūżū÷ē Śų’źéŁōó ÅėźŽżČ'6ņóż÷é$īžėūāĆ ŁžM©ėóå.Üõģ术õäė+Ł>Ųņ’ņ ųūłüü+ś ģåÖģæļĶĖłõżÉūóōćū,õåžółłęžĖŽćé ėä+ Üæ Ķ×ūä÷§3ņēų3ū0š ž&’üčōŠŚļ4ü ŅŲöõž üšģ'łåļ’č5ļčõöūżćņ9÷ļóųöÖŽĪĄšūüūčõåå÷üóīż įö ūKõüōüųł ėöą *Ļģųśłżķ ł ūśśŻG’ ü"ź ÷÷ńżō (ųųųāņģõķČš ž āīčļ ūėėÆžčżņž÷öų$õļąŁüĪļčśķž÷)ć  ÷Źśēäļüó ėŃåĪüšźė.ūóķ<ź0’ū 'žå.ūæ ą ć ’śč śåžõ čķū ģņśōē#ūöōš.ć.žóŻ #%Ģä!āŪ ų" ķė÷üõńżōģ ģ÷ėżüźž"įłéęćäēĆņ ł Ńš)ų ’Óōīå#÷ēō0 ł:ņö’ļó śšéģ÷ųńķ ńżżóż5óćčõ ł÷žżåšń÷ ō®śł÷Ļ ’ąōüÖÕėūįöčüžū ź÷õČ īķ éOźāō&ļųżčüü%ēņķūģžé÷żāžžńōōśżų&śīöūīöłü  ż äō’4 ńļäźż%ßķķöž÷śš÷ż ė ī÷ &ž üåłó 'ž÷ś÷īżż÷I×ćÜ!õ č śūńļŽżżü 6ų’õžäś ėķ’óš÷ ŻžžĶīöų1źė  ū Łū š ćņ×ėŪ ń źžõōś ĄžÓźģķļ  šó # żżü$ "ū’ āęŌ ßŌžōė &č ŁėŚüŹļ ó÷šņćóžŲ×ų:÷’ė⣒ īę’ųżžēšū  Żćßõųóėūņ öč śöžńßŪųŌüż)Śš=śńųßśł Ūężģįõ’ ķ  üń +ķź¼ńć(śīĀöńģņÓóųłōē#ų ķōėėņšüꯜö   śėõłń śįōżūö÷žŚŹJĄéāęķ łū ł 1.’2ćłīõąéPų Vęą’ +īŁāņ+å 'Õ™"Öš- żįśüżåŽģų éž!ß &Āģó!ę()ŠŃ źōÓ+üöį’ ŃšĘģ2õóńĒšČé<’ä1źēōūęāĆųū’×#ōł‘ĻółŹöÄš3 ęŹūś’ ęģõšų- ó!Õśōėč ńķ/ ó óżóńī ųõ)ÖŁń^ē’Ų$łüāźč,0ļ)ņ%ś ęķŻü2ł+ū ÓéJä’šļnņłÖņ’’ņ!?łļčūļ >60óō ’ūō½ė9 'ż "ęś’łźżäżūŌ.ųõäÜ !ć’ūŃ¢Z% éć6÷Żż å!ūóļļÕśöåżėķ żõåŌłļī ö ŌłźĮ įż ēų+÷üŚ  śįīõ!ūō’śšŻéōéńāļōłŠ ü#Ūä ž Ę ÷õ Fżąéž×Łōē)üšń īóī<’ųżśżłųźūżł ķÜ’TģśćėķųłÉŲīü śżśęų’'īļżš ųū ųöņģ üóī ģöįŽ üō’!ūöņäõ’ÜüęįāüģüMīśėēŁöė’ģķ öūęüüųõś’Śš ńņéćūž’ż į ėāųĖ ēźõüłżėšÓ’Õōęėß ŚŽöõļóž ī żģķųŪźłśś ņõļģéšń š* ÷šąŅ ōŃÜ8$Żīę ę÷šŌņ ćļäżóź üÅkōļŪŻśąūļńā =÷0ÖćaśūąļJ’Łčīķ$)ÖąÖńÖōēųćį³&ßóö’Ü ŗ ųčļöŅų ß3$’Ļżōļ żœė Ųčżųļōšļė 8 +ü"’įÖķÄÉ ūį$ ”Ö ķŪŹŻ+,"üļ@!öķéūńżē żčēžéć żåž "źćššż÷ü’žAŚķōųģ  śūōłģśüŪ’ż!źśžūų öš ßüņēü ż õ čōóķśåóżžÄž ņ;ń ųęöņśņ š#ü0ż&ņžõųźč ņōóüšłńųöś÷ņšłéģēļ ļ ńčģ$śų ļōč8ķöž #äņüė ūßūė éüüųż’ś÷ę Óū÷ųłóņõ Ūłöņóõņż ¼śųņņē’ ōśłöśõĀ0źü żńēGžķĢ Éķ ńęę ō źūöś ś ū×õźõ Ōūū’- žķļś÷ōńąņū ųö ņ ćčśż*ńųżęüŪ  ķü ū üķēē’ņ ł üēģ>źń÷æöżė’ ūļåōė’ū öé üķłģöįŽÜ=’ēėķæź Ļü ķņŻķ#ęüś ź#Ųķśļ"łżõöüżł Žüšėōżüüī’łŻ& 9 ķżÖ ńü ļõßżóõü'1’įö ß ō ś!ł ŪąėQĢćņßł!ųųžź7 ’į' ‘ģā’$Žłžéü õņģōōł’#ö÷ü åóåŁ!ćō ū.óōč öŌ#ķą÷ł ō å#üīÜ ÷D ų"ų ūķ“,+óōņīĻÕ%ļ&ęęņIōž üÖ ’õü ā’’ņśķüõšłģ ’Ś%( ś’üŲźźķž ėāžųóżśĖ "Žųčęģ õ(õė%żńųų  ś’źõųōöłģŻķśėćéńūüł  ā8ó÷ åźÖśęłü*Ö $ ÷ ū żėöõéžō#üõUļ’ūųńžéļ ēżšśł÷ä ļžżźē ż ń!ųšźņīņ÷ļ õšųśģį÷öžę*šå ׹ł źēńó šóęõžśżųžłŌņ÷śõłļōžó ÷ ÷éž ä éū÷ėłéņ’ Ņ Ł1(āõ ÷ $ ć#ļūś  žżųžń ßąöōčųššĘśūłõFīųõ$ ģž!÷Ūū( ’ ńī ū’ü ļūųōŌōóņü ńļżķųå&ī óēō łų’ęė’öūś *ó ’ļžżóż ųöś÷öūõč÷śāēń÷ē’ ł ēūüöė’Ų’ņõ žöķõū  öų $ėū ßśšÜūė ł"ńńļ’ $ ’ļåņ!ų ö#ŻćšĶéń śż×’ņ×ī šėß šźńżŌ"õļšÜÕß ōÅńéū÷ō ō.üŌģłĪPū!Źėśõ’å2% ōÕźīś¹× ę÷,ļģčūģ3ūüžń"’ōä6š$įÓżēå ÷ļī!) L"šśóä5Ņ«ń äÜśšÅęG,óķéÅó&ĢŻńąš ö!Ō&’öąķŚ1õó ėåē1īūōą’éśž1ļÜ#é»÷łś÷ģŪBšīž’łęł äö1įūäżū  žüīīśūūóį’’ųŅŻ *Łķ5&ūėŽßł õ:ūīēßśī5 ż1žč æī įėā’#ōżåńūéżžėōŃž³Ńłõ&žłģOļēćžõ.äģ$’+)8 ų%÷Ōš žśŁõŪåōöēų+Łöģ Üéš š?śJži¾Ōż+Īüņčęņõōēņüģ×ßęō!åéź7Ź$ ķ((ō źū0ūŻūŚĻ &ö0 Žį#łż8%ó ūģļ,.Öķōōūś ģöżöćküł.Ö+ żĪó Až7æś÷ėč 䣎’"ž į)į; śü4Ų ąõ žģ# ’¾ķŠOō"ōśūkéi6Śō! Ē Dņ#öß’× ś(ł')ßėśļDģžļćģ ōŌ ŚüŲóźųõĖńņŹģįŠ!åųōōē ä ķŻ##'óēöļŚ÷¶&üśōś) õ$õī <Ž&šõåū é&ņńõ÷ ’ž’żžöīģ’ķģž žņ÷šėīõü öųł čžõżõĀūżüōńģžé Īś ł÷ųö %÷ ÷ šī 1ōśõ’ūź’ü)żžź0żšōüśéöņ’ņų ōžé0žźūżžżķńéņ ö śśõūčŌąśĢł=’1ö ÷/õõ×õÕöźŌŻü)ćŁeą'½%(é÷$,ņ%žµ÷įųśćłó&䣣įĢĖķē’żÜīķżŻņ#óņźįīéó!Ä!3ńöóąčńöś".FŻ Ū žōŪźŪžéżä*īł  ę ÖÓ/¼žÅ9ü»ł:Vł üłW üōīłäīßń)č ’ų?šł#ļ*īü÷č+/é +źēäÖś ēõļķņõžų4!ūķź’ļöņčŚć÷ß0ė:* źēé 1żmŌöó Öó üöļļżŃė ļ ęęģóüļīęĆ@Ņéņķ äŅķõļńņ )üīĖ ēżöłÄŽęē1 Õ!Ļ,’„ęüó÷Ōåšģ -ō ū ż źņ(šśčņėģéśēČū!’ėüņńį³ żŌūūžóśßņ¬łę$ö!į’  õ)ęųė +ö žōžłå    ū  üö’ ÷ äžčļęų÷ż÷ųī’ūžžÜ čżķķń 4ź ńų÷;’Ė "’ ģīń1 łõų ó÷Ōåņų÷žäśżÓāåāõŪ ōöśõŁ’$ § ’ążēŪ ! ėóļ ÷ ęńńšēļ’żõ óżīüž 1ń‡šęü )łųŚņšė ·ėś+(õ ź ’źņ&$śōūņģ łć:%ž .õ’éōš’Ó ü÷ ńüłõē%ėŻ Źß%ž<äīÅö?Ó'.ōūžŁ÷ųē*, )?éśßī ū Cłā ćłåū6!ņéó“"øÜõÕ*é2 ÖŽÜŅų ,ĶļŻė3ŚĒÖ+' ū÷šÜ  ł÷ēŪö)ßšöōīėīāģó čśęźń)žėžõš$åąłżī2:’ÖŪC2Õüõ(šćėŻ ėķ &ąÓļśū0ųõīåņŖų&ųūū  žō%éļžĪīåÓÕłŃżšėüóūōĻÕ ńśßNėżéńę#ōĻ&õūŌśą  įģūöŠ įłšö +÷ŒĖÓóąó’6÷ß/žķéü’ß''÷'Ė ę#ń ā*Ļ>  śėėŽ×½’ ś įėśćĶł=ółźę GŁ "åÅŅõłėčß ę ņ"å  õģČ"5!ģÓūõņÓ#!Õ 1ņ’ ,*÷ž-ōŚō!4šūó$žļģ ż šģńńŻ÷’ūń!Ļž'ö"ōū÷÷1×ųČśģīģęšūłēążź é( öāčŃņśė + !'0 ęüÓ%ņ%Ļ óņņłž õņłžćŻ ÷ ņ’ł ż÷ ’ *į  ’īśņņööš÷ŻŻėžóöšą>÷ž)źŠņžŽżė’üõģźöūß Ų÷ēśžųūžļ/ößżżō ś%õēüžųśóūēJż ń×ļāūūųōŻ /ź  ńžĖ#õ śé6żė žäžŹHģūłūūóūūļ#* Ļ’óż÷ųūš’łųü ļķäö’č’Ł öčę’&ūūüō ī®öčņŽ žóśž ą÷ų öģööł*į$ (šÉ ūöŽ÷ģł āżŅ.ą*śāż žąó– 1åų ēö’ōėįL÷ Ūķńī’ųžžą ō ķč śöžō’ķŽ š ńŻÕį ź÷ä÷ū  ļńśžņżė ķ ųėō żųöłč ųõõūł ņų żóņ3ńžōÖ ēūōż÷ōū ļéü žł ÷łūäŌó żų÷šīä ’ ó óšż ÷÷’ł ÷ōžūł üūžķżšųżāūšč’ž ūšž’üō÷Żó #ļģāų ūń*#žóėļ äėūōōŲ ńüīė ó’&ņł ēś  śüųżČīł  J ūŽüėÉśķūōééöüųżżżżō§ō ŽŌöģöļśóžłŚ÷ī źķ ī.ōäōśžļ ģłéųÖüį’öųņśōųöüśēōįéģś’öēö%ž$ę& Ēž9 Ü+śś ėįįī÷ō÷ LčžäæŲVėüę=’żģųBóä5Ė÷č%ķķ»Żäó.äAś Īē'żH%ÖĻNėīšż× ; żįņ ŚĖ)ķ’å%ōųŁŻ+ļēŲ īōēīōÖĖÆ)Žēü<śņ - Ż ģóÜŽö,®ć’č.ųČĶśP Ńł’ļśėėž žīÖāš žļēīžķ’ ż÷Üłń ’õåžõ’ęūė ž ū łā03ūŻž"ęłäļ žé×’’šż&ē’ üłń šŽųå 4ōēūüżćį÷šōł źž õ÷śäł’č!š"ķōōšõęćōžÖ Śüžō ęīšŽ łūļ ł )ž)ģ÷÷ÓžāČķ×õÕšÜö ’śöüÅöDūīųļłč ķżż)é×1åūł ü’ūü’ķšżčļžżŻūųÉł"’’ēś  īźōūī ń& ęśéžĶšę(’#ģķł"ėīūš÷öūš ņÕ   óśōļī ėś öį÷ņéį  ę  åņÕģ ßž łż÷ķ׳žõü ų ,üē’ ķ łž"öųżüż0üūūīóü)Džß  śżéńĒńņņ ąē ū ÷÷Ō÷ęķ īķéī÷ķēņć  īÄś ķģ’ čłéīüöėżūōöó ųüéż&! źņźģŻļ ēūö!ōūļžēÜśüīōüßūõī ē ōÖšõĻe"ł*÷õżźī łė’ Ä%ū"šÖŽę Ž .Jń ķÕ č/# ¶;’żŲ’!Ģė!żė+ä÷  įéó"/ī öüłžėą ł’ū÷ž ÷öå+Õźģ!ģūŽą#ū- ’" ÜūÉśģ3Ż(' ŻżéDōūćŲńķ9øńźł+õųš šīłó#Óčüåźūńš  ’ąņģ éņü-Ų öń÷įżīą’ųöŽ- ėōóūīč óą"čśōē’į÷ęé’ īų9š Õ ŚōŹõÅõųóóģūńöųü’ķŽ’ üółż'Ū¾ųō(ņēł+ńõōźįńźķż÷ąŃĪĘ’żćš÷8óėłč÷ īņõ ’žõłķūżī ūšżņüļĒßū īó#šų! ’Ż÷÷įäģõ’’ &ā Ķīūū ōå żźš÷ ōū ųä÷ė’’ņē’ņśóóśņĄšļ ņłóÕóēļś  ėų ėé÷ ółšųīōßé óīŚéūłśōóžōķé×čõēŁļķüś īŪē*ųKōłõåźI2źóīżū’ķó įśß #ōć ’ž’ųāļŚåöŚÕūōżļ 7śśÅFŽ(öģ’óńļžź3ńŽ*’’ęōŅ’óÓģ' Ūōś·ÖõńŲüŻõž ! ’’ųĪÖ  ×)"čõ.ńĖēüö=uóąūčÖųżūóū’%ŁžÜ įōŁü ÷ēš üłś’ńņņ’ õčźžūžī’ęü ’Öółįöźā’śņÖąźō!śš üģžģ łūē ö śóč  üśŻć ų üņč  łŪöąõī3ž é÷ ÷ģõ ęų ų÷  ÷žžūśłūūüōõ’*čōńō÷ųūż ų Ž)ŅÕė ģ7 åšśŻ3$āšńJŃŠņ%ń öīīķ ū*ü1źģŖ$ē"é ü )/’ßöń&¼ ĶüõŪķčųś?÷žķ’  ęķż÷ųā+åŌāłź*’é"ŅéīĒ÷ē(ż÷śöŌ ,&ķ )2ŲŻD-ļ)&žśõ ·ą ö(ūī)ōźßō!Ž!śÓ7ž"#Ų2īŲæę źõŚ-ū ūō÷óōŪļó’óå <Ū’½#ńüĘż ż÷ä’!;Ö ężĶģ.ÜńšļŚ#9ūżįśė#žŲö# łźńķņīšņßŪŪŲõ-į ®÷×ķģ õ$ēéģĖRݹ īöō" ś ģėõ<ōóžöąćÜųüķäčC$į’źö/ś%āéżČśžų÷9żĖīåןöńüśö)÷" ćžŪ ’ž4ņīęõūčīķ’Ź;Ü€Ų ņż(ņłķšśōÄżö öģȞżäÜō0āóļį÷ģą&:Üžõę  š( üüżū %’śßš¼ąē/źß Ś'"ņüęįõŹŃīīŚ# ł3*󶮀ųY ō ų ō öÉų1šųxķ ōżéšå-÷ ēōēö÷ńķ’ģē õåłūūēąśūåŁķūśōš÷ćżę ß śł4łżńū,żēź ž äö#õ ö÷ä%į āńų ėų’ęöżóśłśšņ ×ßļÕ! Żūū ’åIöÓłŃ źćīģ ųēź4F’óHÕū 6ń)0½ Ķ)ēģķóūü4Ōėņõ ųķżžźüł ł ó’ōžå žō,ļöĒųūēķł żūéóūłéōźŪ%ķāųųžō ņśōßÄüżž åżė īā ś÷š ööéü÷’Ū÷öüĀöęž ūü5  ųīųąóćūśā# /’Ń’ėŁų ń óńćņ 0čķś÷üł Ž ńĖĶ0Žųģ’ÜŁ1ä)÷ל Ń84ėųķžÄÄŻ Ų źęū$ Ąū9õćßś÷©Ų=żāéļÖū7!’śö šõĀ÷õü4ūöāį ÷7źóōłż2õ #óąŹ Ę%(óĒģ.žżü4 łčķå ¢õ äęÕ7(Õ’łßż łčÜļČ*Żå óę¾śßē*ó F  é G éųłÜ Hčź÷ś'’üń÷łźų$õ Öų÷ś łśūę ÷3ęį’łą÷’öųšĢźōÖ .żłŲÜžößÕ śłķ÷ß 1ö$ū’żžģ żś÷śłł#" ō Żżüę ééśõŅųŹ ÷üüżü5ņģų ż-õüūėńōöö0ó'Żęńžž÷)Žęę-źé żļ#ę šśöUŲźöīāņ.ŌīņųīL üōéŪō "ģ »żÜś,ķĶ’ķÉėēń éś&ė üįöūų ’õ"ŚļÓżŁīž#łķšķžļś!ü÷ųŪ÷ņ÷:5śńŃõś5ż óźŌ āųōčąįļŌńņāżūö÷āŠÖŅłķź6ųāŪ čż$ćŃģō:ŚŗććOĀE,öóćśCŻėśģ¾ūōč : Łųõ ų ž!ŲĶ÷ļźų$óõŻöHčųšč ģ)üöūłīīś$ś£2ć#ńė÷óö ×õßų×ōŻ ō $ž.*żų= #ņÉł’ūŽ÷įōńŚŁō@.÷ķžńćŪņ ąžüė łžėŌžĘģüė2 ųšó5Ü1ŅŅłėń ó ž?ŌśÕÕö$ļķ4ū Tč$õö%#ńŪüš’"ļē čß#2ū)ńļüłCī &ņčż·Óėų<ē ąūł#śę'Åüźņó × Üų$ųšõ)šöööīī üģńēWēśĢß-öęöż!ūč"6Ē.»ł’ķżīŽęōųįķēžŁžż#ÖŚöA7ł Ūć’Ź9ņ åģń üŠėė +öŚś’ščń ’łśłļBé ā(üåņīõż ķōų żŲų < Ō ÷ņńōķųüžł Žķś&ńš öżßņūņö0čóé–.÷åļéś$š’>’8óśīóž ķźļųżź#č üåś.µśö ōģķńē< ļłż "éžńž*žś’cūžęū  źõ ėó  2łćķŽš ķīźżģ-÷ūōžėļ ķ Ü)ļ Ļ( üāüžņūšü×ūźżźśņłūģųŻ  Üõ żżęüé2ü ךņņÓöų žū 2õźō ü9ńėå ūäōöśööź łļūō’īķū źž żż %$å'śó õųčģä%ōččéõ ņā :ēé9čöķŽīņŚęšķū̼ź ōŻžę*ęꏣ üģ ńš ńüąķņüŹüé(Šõń ųź±6 Üąö ńń )$,( óöóÕžüÄąųųŲ ź öģėßļü÷öņ, !(ŪŌ%žāŲ óõ ×÷ūś$ūŁ’ āēūööżH łēśł ńÜńż !ģģ õõę é’"ń!ęüš ļļ óūBąłīžį!%Wś' čšģó õׯ÷ Ļąķõīų łš¾0ōųü ńž ōā õšķłōųņóī÷é ūŪīöņ5žłüö ļÜēÖčżōų ļźŲöüā ņżūęõŹę,ų/ ÷ļŚÖŃļł4ńłå øöīżś  ķļģņźéū"żüū’’ģŚüń- ’ģģēīź÷!ŁīżēńŪ(ķż óēšīšžķ(’ē/žžōśķżž"/śåõõ õłžē ’ė, ņžž)ųÕųś"ą łŻŖ) Éą 8 Ėņä öŪÜž īöį źłżģō ūõ īłå÷üūū õśųūõśóžöįęųķ ļśšķģÜüžžöüęõéų+ś éńž šüš üåļżõ’ļ źēżūŲųóń üöž  ’üżüŻłõÜ02óśū÷ . ų’Ż×ģśžņļ ś ż ļśłśźĻŚųńš,ž Žė ó(Ļõ÷ó×õ ūų ņž ēūóśžŲé.$Ż+ś !ōąöėü"čżÜ!óöėüõßõāżęÖ÷ķūż/Aū žīŪøöņęõśęķčõĪń'ßųū’ņėėūņ’+õ* /Ųµę#+ń0īģõõ'β0 1öŌ$čśš0čżęćęń6 ’ńóĘū?óQ śę`G÷ģķżę0żō«Ń3÷Ķ÷Ń ßžś<ŹžŠłīåļäÆźéēūŽ ą’ōŃ éKÕżŪŲū'ä åGÆŚąž4į:9ęÕżĀ.Żł×żź2ö!ŚŪē' š×ōMåų5ÖāŁūē×õéŃąāüŚ X ļ šųÕ6®84.įĀŃöõŽżĘ āłįź6)üā &Ńņš8 ×Ū#įüĢ2ģD’ ēÓ*ėčÜ!×āČåćżāŁčŽķ *č,>!Dž  ŚņõÜļóå×ō"æņŃėįāHųļąķßä"  2’ é6éö 6ųčĆ ’$ž ųī’Õå!ų’żūż ü÷ #6żńżéńļ$)ūćö×:% ęöõé ņ'ŃŪ4óę$ōźŌ×Ō1 źąśčūśū ÷ü ;ųš ź įśłķśžÕń ×ųõēśŠģ  ółęėžģÓMāģņž’8Šž÷Śńģüõųģ’ų$ęłūęē4ōī$čēńééś ģł īō)įń ģēÖļ  Óéųōž ÷źž-÷ż ’öłē:Ū ;äõ ėßūńä5÷ ÷)ōöįū ū ņüćŽ÷ķż’āóćžžó öųņņś õ’ žö śąõåłžį  ßõ óšļö÷żū’  ļż ņīķžüļūķ śäóėł"ł’ūś÷šÜłļ’ž÷ļ ļśžļ’ żžžūśųń ’šōüóš ż žāēļāõ ’ō ģ’ń ć)śŲöł4ņś×Ōéž åąóõä é % ķŽūāīżėž ÷ą"’õžEž%’õķ śōėśźńōõāķöü’+ėõōłż"ēžćįł÷ķżłżųīł čīśż’üļõų’śų ņ÷śöļķüšüē ö ,Śõń’žōōł š āļ šó żū  š " ūüūūŽüśśžšäźśåóśõį ’ģšä ģ ’óżļųų’ķĀ ś$ų#ļó%ōŻ śłō 6żļī "õōļōńü%ł ūā÷’ū!łö$óńņęžśņõćłÕśņ ųńž ś ŻŽłūīõž÷ēīJŪśęūūń ķńąžżł"Ļł 'łüńł!żģųōš šėõėųŻą įš-ļü ü źėōńęüūņó÷žäėŚ óŹļū’ļ!öŽśŚ,šķįėåż ūłųõļŚŽęä’:ųēõ WžäŽ 1 Gīé)öėāūć'ßõó õķģŽŲžŲ ÷ųõģ óöłų÷åŁ+!ō! āėžū³ž+Łę ĀķŪõģKŲĶųžö' śłśįķ Ł ÷’Īåź$ņ'-šŲŁŚéęśč ģ ÷ń ! ōÉUč ż$Ś +’·ööĀ’ ųļöž3śą, &Č’ ßņł żü(÷ć¾ +ōéüåŽ$!* 'c  ģåŲ ÷ł ųųūš*ī!ŚšūŠüśļ" ß²õņ¾ņ ē] āé ļčéśž ÷ äļņ’ į÷łŲĻąėāį F/3Ųń'Gģ įŠ(šėó3ĆŌų: ėēūŪ’¶ūķö(C9ÕĖ’ éęūūģŚė’ųŻ’:öäžģōżūõķéŖś’%ņž%ėłöūßųģÜõų!÷’śĢŪłē’ī ŃÖÖć÷ź÷Q,9Ńõ’ ß ©éķöŻņėžņ éĶź÷īļļń,;ė !ķ ī;įåś’ Óē÷čśį /&Žś ł÷įšńŲłīüśéÕųÓéö*üń% ŻWēÜņ'ęō@å*æŌģ)ī#é ēžēśßų’š"čWśąķ ÷žģŌą=/Žū4Ī åŪŠśųżźžé @ Ż×Ņßėūóīėą;éė ńSń*Żųī%żŽ:Ž)õųć ļAŻżģ%ņ’¹ė’4ņ÷ģņ÷ńó ī÷ŁÖ#ģ ėŻü"ķÓńŲ ēŽś č, 5ūU2%šėŃ%Ś#ņōś(ā &ą’ źś8ä <&ßēä÷ żķ?ļ Ż.÷ųõ#ī8žå įōōó“åĪõ6&ōļä'óāżļźūļńõöä’Żüōåõöüżüõ .śóūū’’īóļ*łö  +ōłłéūķėņöģóē žśžżņķģöļ ßćš&óžę ōū  ēžųčōń’ō×ķ ņņķ÷įśüäōųćį äżößūöēśżō÷ūäöłŁśżżģśįōż éõńģ óāÖė (EĶ ( ä,ć&īńŃö÷öśå&õöźē%ų č’žüāļķäŻ&ūłč÷÷ś  " &ļž  "$šīīļ ęõ$ū’ž(Ūėśķ'ķ ü Ū)( ųüāūäüņ& ķåķėņöīÖÄņü Õ5ϹĖMÓ«ś1ģßżš šāėš-üäųüż ųõå ń #  ūīīū ń÷ł īéķįė×ųžų*žŅīļžūēéī ī łŅ žļ óõīółł’ü÷éÖśńūךńõ ųśęŻųõ÷ģ¼īü’ęķęńõš ēŪöķóīņóéŚ ń÷źé+ń÷ņ ćīżų ś)żöōÕūā ęźžüīūč žļžōųöäć ü ’÷š ’žņ. õ ųļżš *żłķūé ņ/šī õöīüńų ł źżłāń ūī  óļõŠ ų öņåįöž ó ōń śüš ėśöļó!ü’ååłéšäų ķōõėöū%śžóų ū  ÷ņöóźžļ’õżö ļöūłłųķöņüöį0 ō  ģ÷÷łåó/’ó ōųš÷ū ųśüłōöö’łż% Šżłö īśś ńšėżęéü ö üźģū ūżś’ųöūü ķśžż/įŻéĪłåüPś’ šńč žä;½’)õō’ ö÷āŻ.ī ē $üż ŁŁų$ åń<śüõUŌ Öü$"Óž +ĖüņüäéåūńīžŅéåķłę*śžŹüŪńöķĢę!×-’ó ų ź( ėęņćČČī9 śłó’Ńž5.źŻD  üö' öįōą<ķč5ō<ņė÷ęŪņģ·Ćņ ōū4ž#ąćś9śČ ųŲčóśųų’ü ļłų łņ šöę õ$ ūļū  ōšō 6 ńßó!żśųõī# šÅųöź  öņėųßóõ"š śžšš’łōĢõęöņóŻćõ’ą ö÷ üņłżųžéā$!ó"Łöāųśõź üüśžä éöÜČśŲŃ ņńžńą īēßō ūū’ żü÷ūé šžļ’ź ģżęļ’ėł÷äž,ēų į ūöł ó ūū’óžę÷ üōõ żšīöī Łó’ $ūū ų÷ūģö õ ō &’ čšöż’ 3 ó ü’’ģ Öüūłń,čžā’ūļ’žć÷ō(ą ļóŁģ,Lōśų#šĶÅÓNŽżŪĒF-Jž÷ž½ēyųŌĖūą y.YźĢä&-$÷źŃ·(ć’E!' ’ØŻöķĶžšóōż<™"ķś;Łā3›øõņŪGśūų`FęņGŪüūŃŚČą ‘.ł!#öę|IĮģ4žŽ÷žQéüę #ė<)%ÕįĻ ėaŌCć» €öė Ņć6ķÜż "ō2żČžļšķÄ łśżŚšŪ#ł)5śóēķā ūļāŠßśŻūF:”łéģłłöüĢüłÕĆźķīīžšņźųż žä śŚ #š’'żõčūęįüģ ŁśŹ × Üåöņ /ü "%Ų)ųģļå)’ūķ  ę%5ļ+äõųÜōŲ’źŚīåńńųĄŚŲę’ū ėž åļ! żųūųż ęž ū ķö’Żć" ēąc äłżż ņŒėķžŚ 5āē ßōēż  öü(÷ūż’ėŅö#śõ’ õėŁüūåŪūõöģūööųķŽųüś īļ õż żī×ō ē+ž ×Ųłōcé ūłüä'ąčģö"ł+ėž  ! ļ+óź&óų&LīłŻ )ģżŽ ōśļ   ąõŽ€ū÷č÷å’źö ęéüķūŪų$ ž÷’÷Óśėéö Ł -ņ'ōų ž é łŪą _Ćöņģå’åčż)ņ ņÜ šź%"öŻ ōśīżūćž0%óöī öōōĖ’ įč ś ć ō÷Žģõ$žžēäž$ó Ģ, ÷ĶėņĢ&ųĢŲņ ėšŁ *"ś ś! āō%%÷īō óųž·) Ćāėśęł"ēģõģėōūéģīį÷éöę Ö)žśüĻāņż,ē ńł Ōü×ńßžļ<BęŃōī*ė ć ÷ä ćłśŽżūē÷ż’īźēņ(į2üūžčŽ÷"ķŠ"ųęßåÉ#¼Ķ÷žš Č7!žżéėō'źīā  ółā"ņĪČū)ģ4ķæöŽņ;ś  ī×ųż) *ö#ļ’0šż1ćį&ģ łöŁķŅ< öė ßćD $ģżŽņų9"ėüźōžå6&üĀ’ģóļĢžźXGč(ńī ×ģĶĘūÜ’’éŌīöCßö ę*&ēķõł&Č,ęšłī , ć$Ų:ė3äėļüżž'ą õ Öü ś÷Éü ē6’ļśīū¬ąī’č KüłęÖš$ō0öGūżķ%öżļ× õ,’ŽĘ’ņķīŹā'˜ń õõ#T’Ń-ų2 üö!ģķ>Š śžžµķڧ>ūŚõ  ż÷ž łCŠ *śüćōŪųōś ź(īļž@Oāēéõ’Õśņ&<ż7€ķäÆ"äķÓ’Ķß×Īļ+ž9š÷+9ķ )·- \¶[ĒčĒē(õ åßģėŌÓ2ź3ŪčÕŌ&€ÓÕßņ~ńŲ ÷"·éūÆÕ  ¶(‡óī06é`öųŃéķļ *8$#Éģ9ųżłł5ŁÕŌøŽŅ &ĻßĆżŃöź'ķāŻįżüéÕüā÷ų ƼńōąļļŚŁł/ūŠõŻįūļóķžīęž#ėH ō żęšļžū:öļ'šü#-óŻ€CåÜÓ9ŽčćŁ šū ÷ņü śż ö ż)’ś(é!Kūõė ž7Äąėøžé óŠļņõ(4&ģūłśDžļųīŹåųŁūśėBąN ·śÕŻ &ŻźßŚśéÕ.3é :ģåļī%äąķćöłóīģóżõńō# ē#ó śŚņļńöõ ž ?õ’ģöćšžėöåńęģėČż’ų óŌäž’ŠśļōśčŚąųėźQėōķĻń’ŲĢüŽ ż ūųI żļļĻņŹż õō ļöü å÷üī ’ Žōīų÷š ü"āą( ’ņ ļŲ"ūž čūśįņ õš äžßöõ ’ėółüņųāéą^’üóšåó’ėöö’ņśšŁōų ’ńöų’łÖžęöłĀ¼ żņåńš(  ųéū ģžō(ę÷Ūé /ō ķמü÷’ ŲņÖūāś Ś ą; ę '÷õü!äņ/ļśīż üś’óņšŻöżŻ!ļ ąłĪ&  ’ōćõūĻ ó!’ćü÷Ųų ņīž śó ū(Śśó õ ųóļņ ōę čÜū %ģśÄ’ęķŁŽčõņģōćü=õĶ/óś<żūłšāŚēžņē  ķŚ’ ūA3!ģśē ųń ēžõżŻBūö’üÖģī&,öīšę żōń’ö  ķ÷ž żģ÷čź ŃśÕóžóüüńā ńńłö ųļüęü ų’  śü ōżćóļšļ ōÜł ļüž  ķż ąī ł ņéžļžü÷ś’ōņūłųüłžķõń äļē Žóżęóüé ń%łńśöŻī ļšX’ ņņžöž&1Ōččõ ŪöŌ0ōśśįņõ˳ēīÜęEćū źYÖõ ļėū\Ż(öńÓņ ĒōŁōųŠ» ,į ąŪö óä +ęń0é ūńé5* ź6ōIē÷+0÷( KņŅGĢŠ  ŹįA3ŚūšĘŪä9óÖÉ"/¶Ž ÷&4ėż:öQŁ÷,ųß ūŁ äIŚųčõłļę Īż’ßśóäżżżś" ķö ł’ū'ųóų÷Ōõüų÷ĘėśÖüĻóžūĻ éó üę5ųų ż ēžų śņšżļśź@üų śųųłū’č&žß÷žņśūņ#üńÓī žü’  ż ķōž ' ń ķķ)žś ģĪž÷žõņ ń äõŻōżń÷ł ž åńųöųžüžß’ō$ķńļ $å  ščż $ł)  ī ųÖśčćä+%ģżöź%ł#Üżņ ÷śśļųü ÷ēųóōłžģéäņōżżéļżåū!ń čļéōż!’ķ  ž+ä’ ’@ņõ ō 5ńłļżłųĒż’÷ źŁāÓź éŻßŻ ēūČ#Åģ 2@隯ńķ žķ’įųģ"ö üšž%+õę’÷żęčāņéėåū ėßćĶč9łūł-ķņłĒ" ķ±ö’Üéõ3Ķ!&÷ńõėų"ś ¹éū)’ųõ’ö8śńś 8ü 4łöśłųīŁ5ē;žį /ūųžņ’÷ ųßą,’żßńųūüöīóĀķ õ Eżüś éšūÜ  å&ŌüłųčĪ üīöę לåĻžåčņ ¼č’ź?ōåõ &ķóÉóź Ō ÜŠ Śöųų’śęčžó’åōīųųöžÜōņö <ģ<ķćęļ4ōčņś %õ$÷ųłŚ$Īé¶ÜżõéĶ0¹%;Ń)T!óõ śśö 4 :/ ¼)”’ÜĄäõś°Üūīģ’ņŹ*ÅįÜ4%źģ%č Žæķ" Łāšõ_õ÷ł ū$ ŹA<ólŁ÷÷éņüēž- µą"õ5uŗõļ*Į+ż4ž!ĻĢ(ģ>ē)Ʊ+ÕŽÖśźā ż:ōźįlDÓģAĢ ł6õ  $ģéü  ųž(ūõ÷ö  ėóµ Õė' ć óß!łŪę ņõ’)öō !ŌųC  ąžĢäź Ōųį īŪā$<% ś óö’ķó’ä#å "4öéŪłüśżšōķ ČÜōßõä Č ļš0īŁ!"’#óĢēōž7ģÜ0üūŪū ų# äżßŽ , ńę  Ā  ūõķłńüõ źŅÜžüųōüłéłżśżķŅżļłųīżń šźõõÕžĪ öéüäž öķ ż õü öļśÓōõīē'ŁśĘ0 ōČ  ü ū ōł ŃēÖ: ųļęōš÷ü  śķŁ9ōī ųņŠŽįā×Ęń"’ģņö’ņéžųč’Öżźä÷’āż÷0ōģ įūÕ Śž÷åÕšūßžžč’śī!ü ų’Nē%żģ/ļŪüś÷ķ’ģčĄ#ļžńś ł÷Ųł #Śźūś÷Óź óų õķŠļŻē$ ūĖśł’żAõųņ× ųīżģ&Üż ó 6łģż Ļ"ūėžŗņŲųööåüįžöā+öņ'äÜ čņ ō ®Uū%ŅųŚžŪź'ųÆ$CĒ "3,Ļō ¾#ń Ā×ŌųBõ,žķżĖäßį:ŅåP5(ŻżŃłśßŻ (-/ń-ż+7Ż GļÜ÷Ś&"żøKčū0ä8ŻÓō’0Ź×꜌=Ģ#šąč)>6ź6(ņ½DŁéėš)æ@ ,åä;å6§ōŪ LéĶģ=õł üüė’ó÷ū’÷å/ąōō ļśĻćžģ ņüžż®łęÖśģńéś  ä÷ōżķōööŻžółéų ģ’ō’żłķ   óśž ó3*ń ü÷ōł ’ Żśüų ūķążļ ņū .%ņčéą÷īõó÷  žģ’żēšżõö ’šņėīöņėō÷öõńō ņųėģ ÷ųņšĢß Žī ł ńžų ōżäńčóņ óö’ėōņļ żüč %ūķ÷ėõ÷ļ’õéõŪķõļļ’ųūč!ü÷ č’ļźōųóóļ ųķ ųņė ņī#ģō’żū %ųłžéėāŹźéčųļūīöł-šõöōČ”śüśśŻŲķ’ń’,ēŲßč  šż÷ē-ė! Š źėü’ ó&ń įóē č*ļÉ ēėūė.½üłū2żöļÕžüģ*üņ÷čė’ Ī÷% ķö"÷’ ’Éķļ"ųåž÷ų “ū+ė' āįōūšóōłżŲņ/$Śß$ŅńłśöųņóŲ'ń żń ā#÷ śņ÷ęüč'óōž( ļź ęė ōż’īŽäéųōūå ž+ ö’åü’×õŽ!ōė ńķ$’ģł6! ėźĶ¦öļöēĖńųīÓõģ ŲøžūŃįāųū ēŻé( Żų&āźŪó:óé9ü+ŚÜų šüÓ!ćüFæ üóīś2čżÅŽč öŽū ÷čšķūó ó%ķś łėŪŪžö  īŚńĶ ėņ śžśå$ż įū0ņ ųō śķčįōōŻų' śłšżńóō żŪč äģėüł÷ńķ żåńŪłü5ņ’Ūźłīōęņśö’’öūōųžõ,=’ū ń% ś × Žżųćóīėśąź’ķššųüāē üöįō2óļł÷šźų ņėķ ńéÅöõūōöÕ>Ńüå ģź ļéųņ÷ļż7ēüŪüł÷Ł%.žé&ņīž é÷Śåāų ńžõ ųż>' ½’'ńüė0ć1 ,žģķ äŅ÷ģųéåļęŅł čóčńōś䌞ž Üä&é ł÷Ēļ% ėā("Ś $õéźģóņėEśš ōń"ķłģõž:ńūīū0)ć$ģÄ!ā+(éüęÖżĶēāDļ¾ü$% ń÷ óāņų"Üń źŻõķ(ź &ųöŌŁĻ éōńŚīÅü )ążčķų%öżü^ńĶ ė ėźń ķ0åŽßä ×½ńčŅŃõī;+/Ē9Ų šķįļĖ õų/"ČżŃ ļéß" ’ ’šŪō!,Ģ1Ė÷Żōūžłłö$Üūś ōéÜö ģ ėóōņéģüäįĪčżó%čDč 4 żųüž-ņõł2 žč ü Ź Ķģ łü ļ ā Ō$Ż žīńļłŪĢŁł ņé éüÜķņ śė% #ń'&łļžę÷’ö5ž#&ōžėŗń÷Ę)ūŽ%ćéčī(ä>ķ/ ŁÜ1=Ōč9łē“ ēČŅōś3+ūČåF.#ą6łā ¼Ż*Š/ź ø Ķ'9ÖģÓõśõEĢó×¼ūÓ ų~żMļ’h¼$ņŻšö$īŚźĻ1üäģ$śż÷Ēņ ĢŽ’@Öó&ü ’,ÕęīŚóĪĒłėš ż"’Cėž āųŻė ńŃÉįōŃł óāÓńüć’Žõåü ī’ł-ś' ķąīž×ćü×)Ų' ćŌźÜõłHß$ æéēŠŚą"Śä÷Ü"÷ųī++÷ ķBIūąņįģ żõó1łšõųõõßė åé%=ĒĖ%ś Ōę óšü4ńåöīźė,ęåķśģ#ĖęęWųöęó"ß$čļ¼äŲAĶłŪō,ń į įĻ’ ńžäł śķųņ""čś ś %ųļł  ż’ōõż’*ń Üžćķ ųū ņžł õ÷ö é÷ ņ łł ÷ ō# ’üļķ÷ē5 ņņīžõ’ ÷ł#ōņ" ł ņųż łźų ō)ž żš ż öī÷ūņŲž  ųģ  ū( Łžõżéć üóįķ łīāóü€ź,āż" å óūšųś"ģ4ųųÜŃļö ģ  ’²:ż8śļ.ęš žõé ½å ,ä$#īźį¦öą āīč÷Qóį ę ö,å šāžü’ó’Ńöš" ]īė÷ūéźēõå’ ’žåŌķ’Śū č%ūēų"³éŠ źł& ėķłģąõ6ģ/üų÷ćš ūå÷õąś} Ō ą īüų++³ę "6ł&ņ Ņéłžš ōž ųĻ÷’ ųįēīžž=ōł=ž óčż ’Šė’ "ūłņå½+ß÷ļų"ß’ļ"ł įēģ żóń ćńń ņūīķ#Ń ć ą )ęžįęäó’’üłķūõē% ōš$ õź÷óšūąōā ń"!Ģ łźąńåī* -&ōšCĪłģėĖųö*įšŻöžŁõ4īļ ÷ū?5 åģ÷0÷żõß žł<" ūę÷ū-,ņ×"ā$äį¹Ečō ÷óéĀżąöüžēą$ Ž*éėĪķņöN06łČ ėŁ łŲäģųī×ń’(äóē īņęė ģ,÷īóüå Kóń+Ū4ū żļ5ł ųū  ļü&óõ<žīåųėęšö$ ÷÷žąÜŃāéöżźłõóś2 .Ł)ńģ÷  ļż ÷&ąäĶż žēźüčž" #īāų õ é ęē÷óńöó óźżļŲģ'$éūž ųćč ļē ó žķ#ż"óŚ ē’żžō%įųśóųāä$łģü÷ ģŃõóöŠķ’żFŪ&ļå’ Üņńõóż’ōż’žł ÷Cšžäž÷łłźłū  ō&ż’ūūī× õ"µöāčüīņŲäžūżńć š ł ęńüśŁö ßń łž" Łóļ=’ ’šŻéöå’÷#ōļöŁęóż ėō÷óņ ņåģėļ#šą éóš !%äżńīü ś ’š’ųķńųī óė’éųäš ų ל - ’üīö’š’óģųžŠėśšõü Łķž žųųżūūį’ķóü% łņųžžłņ üü"ųõčīéīōżōóżł #ī÷ųžåęģžõūłŽīā !ł$#ļųĢéBņóõźÜéßž&Ł·-ńņļņ$ õż Ł,÷Ŗ4Āąźāłē.Ųöē ķųžKŚ&9 ä Ūõéöėšśöõ÷É÷Ü3ł4/’!ń ß Ų&-īō ąęņ÷ŁéšöÜļł źā ų& G4ė:#åóö6?õ ół0śčéų ū %õöĪźū !Ōįļ36ķ Ē  ņ ö ųō żōōōūļżł’į¹ĘÜłęņö įéążßź =äŌō ō ųū óžņųśŚ$ś5äųąķņśņÓéķģ ÷ü üö3Šćņ%)ŲŪń÷ł ßé &źö ßūÜÅēģą6äŪłćśAīģĻĒ+éÕóŹ č%śģżī$ Ņ÷čńóŲģļ łōéļüłČóōĶ@āćó õ7óÅĆņ’ō ņļ0Ćī(#ÕÕÕąÓ÷ņ ÷£"śõC Ēó$ ļśŁüöļü&Ą’äņõ)0ģ(ĘLä Ųõö7żō*Ź4ŠĶĶöļłĶ ų×ģģų ėčóįžī0ķįōīŪGüķ÷ŲGłšųVĆ, ō  öŌōšą""č!Ś ŌńżļžĖū łŌć$"ē1ö’ņ ļżķā $ žų ģē åķüł ōÕńŻüģūųžśęå Ś÷÷’÷»ēćł*źŠŪł’Č Cīūģöä% ½Oō4įķń#ęŪķöłōżūč÷ ĘÓżęį $Ų$×  iń9 ļžÖć)ŃśĖūņÉ$ś Ūõ÷ń ūżąēüļĻóķ   īē üüݾś ūõł éč’ęę ķśó’*ń&ų-!ż’ęčęóüņķś+śņšōEļ÷ģń$öķżļńōŻžŁūŁźó.0õėžųÜūēśń ' ēõ #’ ×Ėźū  ÷Ž 5ęꌜļ÷3 ’żęć ķā üŪ ž÷ ņÜä ģ%ļöüźü’÷ń äļżHõō śMęēA)Ł ī"śÜŠ ųüžõ ųńł äŻļłŻńīCółųģżĪ÷ā žł"śóžõ  źų!źņńę÷ō’č)(ļó7Ļü ź2ī&ūłĘ ’ū&"Ż$"3ļ $ ńąßūūįūģś’öåś õģą! ółśūńüž’ "źöżõėż ßźžõĶōŻų ņń  ōų šśü ÷÷ ōōįżüüķ’ōģī žšżģž śūżõž$śžńęłüśņéš’ūłėöōōłų śōšē’ ķź3ļä ó ź÷óół źóöż’ąīęūķ’Ėžą"öų’óų„ō"šõÕķé- óįŻŠŗā ęćßõ!Ōśāņł*Õ1EłŚļ 'ūü!ėŪåüćüżłäöł%ö  Żū żōųēūę$öüżłīķ8 ü49 ćģėŻŅżė¾łŁüčłü5ąųöęńūnļ łėłē īŌÕžóöž’ōč óü&č ūļ ’óóķ ×ūżŻūžż’ū- ś<ėųņ Ął)üÉéķö’ō2žéėžō žõł ßżčņūå’čē÷ęėōżų%ńåėąÜśüõäüÕ ōź ąö ö÷õŪź/ųóŻżĢū÷ūé÷ķżö Õöśö" š×Ž 6ē$ż ūē’ śśķņ žĶö ’łõż ļü ž 1-ėÜéŻ"÷źśļ%łū  ’ųń>ž(öš żžł&üć . ėÅÓę üė öšļųņļ¾ē’é õņ <ų+üõūųóüŻāó×ŗņ7÷*ųüéą ż éūÅļõį0& 1 äłßä ųõėüųńŻķźėŽ’Ü"ģżŪ&ģū ćļōžüż ó'ųūņüņ čāżņīčņėó-*åķ 8 ęļĒāšėöž.÷īŸŻßóśśļżó3ī ÷üšć’ÉóŪ÷ õė0÷ēĖī ń śķų# õūūėÜ!ūņņŲ Š ąąWųųóž Ś÷ż ė-ņ1Śüš柏ķÓż=ż÷ļūłųąžŁ öÄ łIä$ņ  ī÷-ÜÅåżč 3ל 4šŚü÷ŹÄõÕ ć łöüź=ķ+Ęö Ż #’äļÉŻå ųéÓŖŃ ūü"ūįśćļįņ*×ߎ’@å ķŻńźåōŚżńŌ3"Ičż7łüź ģśø äÖįēė śų  ķ'šņō÷ ų! ū÷'šņöž’#%"ū ķöģ÷D-čž öś’Ėūćą"ņģ&  7 *ūćõķ õņ* ķ ćū7ņųł»!-ūŽģåś*ž÷ųųüčž ļéļ(’ė Ž÷žąńčż ž* ó’žćų ģę'ķā é1ģ $!ė9 śóģśūńē4 żģōóīŻś ’ ėĶķó8 śõģ’üå ÷ē üö’ęļ ĪŃĶž÷Õž ž ś,żč;4. õ°ėųęóö!«šõóöŽ īāūäš ęņüńĒū6’’*×Äę÷ū'åūŽ  śõśĪšä īźŁ ķō÷ ’źżö Īń( įś žóõå÷%Źöé Ųö÷āĖźå'öźśłā<ļųą!šųę,ī ’ī’ģ  żōō÷éė’ś ’śöć īąõžūóü÷ćī ūūųń’üš 6ūįś .žö'ņüłūč ųņļ’īū#A÷Żčßś źö łķłīūĢčö čļ õš öūõīŻłäö ę üäéļńŽńżž(öżńńōżŽ üį $żšéūģ łč  īā ķ ļ õ(%€ņ4ŁĻ×ķ&ķ.üé’’śöÜķÜ žōģäžóōüśŪ&ÅÉ!å÷Óā $öö-ūöżńė×’żäłĪčīēķ×ęõ ÜÓā .Óō'+ōēå śźÓÅīÕĻÜū ķ·(óüŲįä% ×ūņķõ ļ ēäįĢć #ņŲčō!åń$śŪõ>ŚėšŚüžģģ1ģ’åÜźć· 5 &ß «÷Ąčüž>õłłą ś< ģ ž*śł öŻ$ł÷źņü"ź&ąń Ļīō!/ķŽ ēēė+ļ ŠčŻ ĘĻ Ć>Ą ĪŪÉā źūł3Üūūė Ū $ # éõž ü,öüÕ÷ ä ’ćó Ķūłżóś śĻÖå»ļžż-å’Įå’õ! !żēŠśü×Ōę7üžž łķ žŚŻéõėł ł' ū’!ėöóä÷ćłńņģķ ¾õ łÜõüżūłŚĪ ń į įéķū ńģ"5åņĢžčéśóō  #÷ź-īéõ1öéŽū żŚŪėēźšńź ęõó śŽ=ė’ėž¼)ż¼+-ņüčĪéę 4ų īõģīņü’ ׿Šé%÷ó ęū óę. źū7żė’  ūś Óīõ÷ąüē č’ /˜ńńŲ%ūéĀ ó7ź"ė7ü õņ' čŚ&āčė2OĻ ļłč:ęłÜ!öIķęŚü.å(ūš ś ųåę(ķ Ķ !ąqŽ ÜB·Čłļ!1ōģäīūąĒå’Ķ 7Ń ņß%ųģš ųųßåęźĪĘ÷Ń$ö A ÷ä*ŅēäŅ# įöž č ;²ņī ē@ šź¹éĢģ%ė '>įŁēž!ń ŁŽ.Žč%ū+žŽÖōöä#!ÉõŻ ō 6+ü:īżŹęšīŪ$ź%ėżöųńłųśöś0 üžłīżüt%ūśę éģłąä$łź<żÖ%,’ ōöČÜšōčśķļļN õõźóōōė ’’ļżęāżö’ĄžŌ ż¼Żūšźēõż üčöņ  šå3äžģ  ļčōĖŃüļŚśö łł ģÉ-ź ō š ū÷ēųćč ü÷äńżųüöŅĪõśłżōųźśś’’ņč÷ķ Šīėīōõõģ$żÕ ś/óžŌņżūėśüšķ óļ1ö ŌšõģóÖ1ų÷ łģßń(ā šéĖēęśüé ē śüčī ņężčųśģ$÷ļżå ö×īžųģū÷ł #*ėéõšōö+ ’ń. åŅ ’åūĶÖķłžūÕžŠļ+-öćé(ģę ņżüäŲēõ!ßęš’&šśš żōמüš śõßöžķé’’Ö ųśćāö2ķŪńęņł żģŅõōšäńłć÷ńčó ’ķ üēłėńń ęńż  ń  C żųęÜ’śśń$ō ūåźõšĮ Łńéä+Ń "żāõćŽ Ē÷ģ ųķłśč ņ >÷śü÷"ź79#’ ļūéęįķłóóšųßē ü ’ņżžč÷"Ō ś+ūšź$ ź’2śżĖŻē łłÓžĪ’#ōņ ī (īłüŹ !ūųńņ (łłńóŠųšęŚżšī óåłļšüģśżčģšęå(Ś"š õżßēžłĢąįš ōń õ #*Ž $ .+@šóüņŪł ļÜŁē 3’!ų÷"ūšźųÄü'%ó ļ÷ģ(’üą'ļųļąüõąö?OŲčä ų(óšŪūųóśģž!ŽŻćśūšģÜļųń-"łź# ųžéńį ū ż ēŠżģŅūžžńūéŻņ õó ń$īļē žž čžūī čōļēō’ݽķ ļ÷ž ś%  ų  Īłż ēĪüīī÷šśó ś÷ Ō õļŲźōČųāżōé’ ßöōįū’ōĆłüśžż÷å ļļś÷śŁ  üėõī ģź’ōōžżģō óÜśüż’ōó7åūś+ć ń. ņā÷ś ßźīōõóžų ÕõąŚśūłžóę’ ō ÷"üåśēööėłŅōīś óūžńüäżóžōōōņł*õ üŲ =ń’š2 žžį$ +ūōō ūéäęüžõõöłŻņ#śų ųę åä!'žÜčē šżöõöüźÅōś’ģ÷ŽžżõģŪÜ4ń©ņüD2šįå ļńé  ż æńšŌ 'ž ļ śé’äēź õųć÷Ōż÷!óéłżĮóų 4ģē ąī÷ ļ R%#ōõ ś÷üå#ōźōžķčųäėėžÕ;żŁÕćś ģóŻóCÓ!ņ ģüöé ćžņ Ł ż š8%ó)ļčķš!Õś#įžģū  źģ ųäü/Ōļ üļōłų į  4Óč  " óŲė&ūõ&䣚 õ ’Żų%ķū’ š%ķžõščūüŅõāōņēłźŪ , K š łäóžöųé(ØüŽ &łæõ ö įŃ’÷ū ńłāå÷Ż÷åæßīņõż»ß8Fžė Č’õ Ż1ś ųóŚööõłå"÷ńīūü%@ öŪōߣüŽłžīŌõÕćźüėńĆÜķąQņźõļėł+öī Łō łžō,%(čļ$ ęŽģ ó <ī’ōśß×  õšņ ķ łš ēļźOźžšņļ ĻėņłßÕź śžé’śīÜūĢö ūų ģČłśņ ģķ>1ßśšžõ)éö’"ĘAŪūł ķÓīłö’ļÄ'ŪįåŁÜÓēčļ)ņ4Ö. öJļĻ÷ÅēÖō$óäóżóś r ’ā÷"óźū ņēī¾ö²%üņ öķå<ź%ÖĮį¹Öł5õ īįšöß āé óūģ įłDžż)ū ĪB+ō$Fū# 'ņ×Ó ī éłžęŻĖž"ū÷÷ó/ā ­įččćóīŲčāōÄŁš$č’#āłžįÖž÷óś4ēśßé ':ĢŽó»õą õ®Š čßē ę×=÷ö š =ūHüŅŽ ćĄ¹ōüģģå÷å%č@õ!ī ģūłŻöü ķ&(×5ż×2ļōšōŻėćõķ!)ž 0żī:üżģéõī!’ų ažšāŚŲųÕÜ÷śūūė(ōń ė ÷Ęąčóó’ŻśķGä ēźåų ńõļÕ,Š’ĖīōńżśžńšśŁä&ū ,ņų9ųśõ üŪŌöÕūŅéę Ü’čåŖź “üüóńŹŲ0ōå"ŃõŪ%, 7üźėöóR’ŚųÄé&Ēõłņū ņżąćĶ嚎ōéāā,õ’łõī źüčł’ óóń'ėß&’ źąłé ÷Żģ÷öźž ļģć ü#ė?ōłš’ąåōāś÷ųöłö’šŪ ńßļń#ģ š ’ī ÓŻč&’śõš ūčļīšłū’łż łžīšä’śō÷žóõėōńķ Š’õęż("łė ’Ųńł é ö śüž’/ ÷öēźķ ņĶ ģÖü÷’īń$* üķß ū ’# /ä ōüžłŁ ( śīü’ šėźęłžūīžłīõ īöęä ņīś÷ų2 Ń$ųżśóųżžżė ō÷ ēüīžåō ū’÷åż’ž šū$ūłåś  ņ’ź’Ü’’ųėūö Ć éžóż ųåš żśų żī ö ōł’öÆż÷ ŽņŪ’ éōļę ń ņśņół  äóń"'żžģ ę’ čģÉ óžö’Żü’ ų åēūžķōńõūüŌéśńųč÷üė’üĖž÷Bū š$"óņ0.ūÜ÷ õ %żŲļóū’åłŌūE.Öżß3ųążŪ óõōĶ #Ųõõ+÷ęųō ōāāņ å+ż"ā‰ĒN¢ć Š čŽ ŃåöŠ9#B źśģ60ųÖźéšūėÉüüēģūēüüöšš  ģ7Öų 6łķHō"āšųS żōś żģą#į!ūķŚļóž"üĖōė?÷+Ä ’!!Ü÷å’ņüģųųŻ ŚM#Ś ćń!éŅćūäļć,žŁŅä\čņÓöļüó)Xš÷Į’ ę)ž,ģņĢ2Ōä śžž!ńÖõ8źōū üÜ÷ņģžļū’ ę5żó"¾÷óńšćśūų6!ĢĖ(ßģ%ßõü ūūž ś’öÕó łĄō§Bčųõ Ō޵/ģłłÕźßšFtą=ŠķYū!Łś8ģēģįÉń$ū×ö5ŗŗĖłßżčö÷;ń1Mą ń æ=õF9(ŪĻūÓüģĄŚņAžš żī(ŻŪ÷ņ;ģ Īģ-ēéą0ę2 ŻżßņÓń źė€Ēśä õāŽīõÉźY:× "ēćÕ’޽Ē ÕųóĢ=2FŅE,2Ö`ż÷1ŚäķµÄ0!%(*ó łųżźÖīōóõūóó’åś č ń+ ī šķ "÷ń’2#śōßüńł÷ ōū÷   ąōõół’ļÓņ Žęż$÷śõń’śżžžėš ģžķų śćöłōūöē ž ÷į8čōõį ÷žåüå’÷  éņłģżżō÷ķńī’ķ!5įųīõ óń÷ö !0éļē 3ļ÷ņ źćž ł žķ»ęėōīKżś µūŲēåé,ō ü BāīŌ# čūżųźīūüżüźł śōųūßšäčõ÷ņļšõöģūž ņ'ćóķīžLęÜ!Óšśü÷Ä)ų=ųÜ äóüéż& ńčÄšįåü7Ż £$ö’ė'÷ę!&Ļö"ēļ÷é#éæąÜę-śüõčįå’śčą1׳ŽĻ6ģš’å?ųõął Ž÷+" Ģųųļī įłņģõśŁņņš×īüņ-ė ķč,%īžż’5£. łŽīņ÷ōߟ ŗŃ3’üõ’·ņ$ć!@ŽÕC Ł-6 čŁĻ ķńāęśµ&'öśćąó'Ź÷źē  ć&īŠ4įēŚ÷’Õł$įé÷ŲŻź#ß Üńéąõ5ÓĶ üē .(öģöč öŠł7ÕéćńąĢįķ×ųäżčĪ.ö śłūŅ"ńĪļ4Ž0ōżāšķ ’Ūó(żŌ( .üż÷$ōOņ>āķžš!āėÕ ’żś3āńųĖ- ńäčō ćżśźõü šŻęó2õųīļżō !ü ēūōź Żūļ- ęźņ š÷ēēē źżņßūĆūźė÷I$é’Ūž±ūÜ žŅśēż’ōķ"’åōćņćå ē"ļ ±ūŪĪųņ  š įū÷śč ü÷’üöó żūäłßężłžńńŲś ļõ0ö’õå!ūĪÕ*Čģś#ōśšó0’ ųÓõš  ōųŠŽś ß%õ!ģī įłžīB čč:šĶŌä²"=@Ģ ŽŲĶįČł  ž üģ šä÷åö» żÜż"äŹ źž ųä!×čāÅų ßą¹čöń Śē; ōō1żłüīĢŻōÆVé čĀ  š7·ä±éŹłīļŃ Ńßč ūB 0Ńå&üü"ół  ēöü÷śń*×3,šžé"Ūķęöšā×ńł=ę,ö) żų  ū’õöø ūō’ öż ģžļ ŠåāŽžöł Ś’ā į×+ö ņż’ö’żōś čųłūųš÷÷’Ųśõž üų ß -ū’ńļ ß īĢäųżóųśü2źęž-óŹ%ž Üėńöö źó+óźü ßųś Dłš č’Ųļéņ*óåšūżų öשčōć/łīš¼åžśōšęó åūļī#š"ū  ķJÖ öōš÷ąųõÕŪė# ō3ķłō43żō Šņ/ų ńå %š ÷ų!¹×ūō ōüł"ÕÜ %į3ēāö * īč’Ä(å ,õēÜ’ó*ęģŪē÷÷žōžŽśśś'ļ ųäźäūńōļł&ńŁ+żčų2šč’’õņ2 ćī āńžūäüņ’źå÷A ŃÄ Ū/óö+žõõżśę ųžūē Ķų ļō’ ’ó ŪÜęąļāūīėōĻńāč ŲšóŽščÜž Ę÷Ōźśéź’Ųóõõųū é÷ģżü šéõ÷čģ ś āüģō Õµē (’ łųī šųšūłē  "ńžńżńöė ó łłųłō÷ žżćõśüčÖ ēĢżģ ķ źś÷’ ņ ģ ’ō #ōņļļ!õ ģ ņö éüķōņü ōöö õņ ūöż/śųźņüūģöäņ!ņłųśžėķń ōņ÷ņśł*ż’öźūć÷žčļśņ ö éū ėł(įżģņ&żž’ėüżķ#ę’łžēśł÷žüż÷ōńü  ’čī ėł  Ūņžśķ.÷õ’łśóņįčš åźš÷   łōųßåōłåüm  ÓÖļńśŃą Ņī$ņ#!üóŽ$*śü8<ß½ōīń,µķżÕ × * ÖõóśŌ šāŲ&õ żļÉūū óķ2öķąēųęīģ "õųā #5"żÖ÷ś$ūļ#é·š)÷LŪėņÕęÕėŃŹŚēäōģßģžŲ÷»īĖ:#%üėśßśąéśś׎ųµņķóń7żżń@ ÖćōÖ!(õ"ģõØ(ŲŠ ŽHīļģžŠśäćįŚ ' Š(.śėčļ.į óž4ó5ķż’ó ! Ž÷Żé-(ļō ś%ķ ó3õłh$ų$ōüöž: ŚĪų:źżņķ“ ;÷į,Ė+ļķźėģäŲīģēõ*ö!ü÷ņ!ł žŽćžę*-łļź÷ł,ēę ń?’ žśöó ź.ńężZ×ļų ųžżŪčśźąŹóś.éūś ć ’čŪśūćįć6 ś&żōóäõ-ļżįė)ķī’õžč ¹īņßģ ć%ļś  NžŠ¼źå7>üäēūēéäų.įģ %'ćóõöö š ēū.ģ !ļū Ųāą$Ū(śåäŚ öšņ.ń ļßīļżŻŽņõčóČśńōśżņńśłõõ.ķŚ$ ņ$Oęč!ń óż ķ( łąö*ę 'ćóģėõū’0Ķć%"ōŠOõßÓ,žńžūßõś%ė ,ń’ćéüżōķł%ųä ņöń īćŹė!ś÷ßžīéöęŻ ÜźåŽ ģ+é4õłäśīōįž!ļļ ż ą ÓōšųŪö óüģķÉąī&šłųžŚ+ó# 6<ķšé7ļöÜŽäłśśą<šåęžūõśåōüóčļń(šĶśżó ś ! š ģśó,Ńģõüžłć*’ĶÉ!óßśņųž'īŌų’%Üņ%ö%ēF×ēłßü!üß0čÄä ł ę ęōß) ščGüščß Ļč åźż ö%!øŽŁ+ļģą&šė. ńķīūõ 2ģžŁŚż6ģŽĶ" 31Ūōļć ūõż šüńłłüó ßęāų)ŹŽšņ ūšööeń׳Éżļ䊎*Ø0ų ŽžźŲć-ū9Ųś ü7E÷śå* Źų’ęūīćüļžšü żōõÜüóķņéņłüń ųņ’ęų-ū7üźūžąē÷łõłģńšżøč üņõż’ęčščżą#ž$ žõž ł åļöļžņóÖół ś0šģŻłņ’ ņņ ōõł ó żóģŽńŌŻćŽō’čōęŲųś óīõ;łPõ?ųłÄŁŁōö8Ŗ1’ōł"Ž źēŪÕ ,Ǽ1$ ® Ļ',śüēö,śĻ>$ß&ą%% ’ ųüćÜöö ū÷¼ęØż"Ø’-/X"ßīż÷›öīžāōč&ö4ė)*ėÉ÷ö ŽŚ”śó-;,ž0 éó .:ĬēÕF Ń9ų ,VūōĒļöp!7& ųååöļ "žėÜõ łöłīģēö +’ōź,ŲÄś(öųćóąõ’(ļ’Ņ,ź+ Ē ²5Ö ņą śżćüäõęģ ōŗ¼ōäę#§ó’ķĶųäłī÷żęņš ü ŚńżÖŚņÜŚ½ķ 0Ųņ$ ģė Ś2ųųü&’2Ģ ė!š@ õ ł ¶łžÜ üżō÷ķśšī õ üūą ķżöö ’žóūóü ł ół÷’ó"ļžü÷Ų2łąüóŻ ų’śŚ0öŽ ųżśź’ßżš-Łū Žł ī ųŽ ÷ņ(ķęąčūī+ųēļū$ūūžõõõ÷ż š šżüņś šāÜ ćäśš Ųõē ēÓłķéņłžźģü<Ąö÷æ)ßų,Ž Bļ+#ņś0,ó3žŻIżļšņ÷ .!÷žBéįł æī’ż·ķęÓūčź'ÉFķéģåļ= 6ś üņĮśó+ķ6ŗĘ÷ö ś ćųÓ@IųźųEōG ŪśĖ0ā1 ß(’ö ī×üśöō(žŚ4ńšģ¶)čūąė ųéÉ ļčĪą(žń é"üžüęü ėä÷ū õļüż# ÷ õłļ #żé÷Ņ$ł  ō.üŪń"śūłžņś  é *0śåžśž Żż$åś)Ōćī’śņŁ+ż õŁżų Üżņ&żģĻų ļ+Ģä š"ģžõźÖż šźżžōōę äųCö š×ęÕ@R÷=ź!éūÅņ/öQšśćé.õó(ā’Tāś*éÓ%Źš åł&° ėśžŁęś7 źĶ åå)åŁęīīĻ"ßĖ  ÷Ś8Ø( @ !ö ōö¾é+ óĢź)ńīüŌ*/ņē ņłöłŪ÷śņūōņ'Ļóųēķ ąÜ’¶ę*ļ2 óÖģśśś ń ó÷źāöė’Łüųóśķē"& *ų’ū&źłõņó× Ų 3&ū śćż $šóž.ņū¼ļł#ž óü*ś ōźóīäéüżśģ ėžōöńźōēūō÷õĒåżīų ÷Śįč’ūś ö  ļ ÷ō ī ż åļ #śųó š Š ųü÷ņģ!’ųł ēōē żäł÷Ņ Ōńž 'Éģõžņ÷ź(ąžššł ū/ī!õ-˜Ī ōžü 1÷õżŽćż å C śüÖ+öŻ % % ÷Öō$īūåż)(ūīņļ%#Jųųńōńėśū’õī(öŲūźž÷ÖåķŽ÷łėāē äłēĄśķéęźņK Õ ē’ś*żū%ł×ŲÓń Ūāöż÷ö !Ó$Ć’ĻēéŲōßüłŁåóśź ś»ž č@ &!ż %÷ äüß÷ŻōĖįö óōßųŽņäš ąųžš÷ģķģāšł:ø÷Ų !ōś āūķōīļōńśņ8 õ$ ä łūģėō'÷ ņ Ų óöń żł#ßźżõāčüģ! õ ßč+ęķ óī÷õ’ó÷šö÷ ōņóōīšõü šń ,)ū%śźččóŪõöņ õ ß÷ ģłŻ’ źŁ’ä÷ž +įŁężöźē čß śš÷ ąäųö źū'ėśōłīę ćīńóč ų’ūżķ <$żżģź DŲ÷ņężė ćä žīßõż ųīłüŻģ Żźüł&żūūūźźīōōžļöņöżüśņöóžö2Öē  ūóļų öšŚ óéķ’’÷7õ ń2 ųń žņ Ö źīö÷śžŪū¾õó#ģļ’ć é ėžśżū’ūżņłÕžüš%õ%’ņ’šHAļ žžÓźöģ ōėńüžżļń  &ķōź , öó %ż Üśųīóšżėųźķōūłīüóąöéķóśą ćó' )ńūéŽć üõž#ģßóśżäōż, $ųł ’Ó ÷ēżć $õłŌß3ēŅ čųńķ4ćņ, #ß'ģūóń Śü üźū× łš ’÷ ūķāżüŽż Ļüģ žė ļš'e&ļž.’< ēŃž łõéųŁ¹Éą&ļ6 %„Łīóä-<Ś#!ę-;óī8Ķ÷õ*#%Łśõņ»źüģžūߎ%ģėóa ŻĪ åĮ’śóŃÉ e*/*üÖŠ’Ż#Źīņōž?žżā ßĪ>ūĻé’ćŻõĢžšū×&ńŚĆ,’ ü)ĘÖ*åįöžŖÖżĪīŽ5Ö ś ńō śśūü ų żć!5%!3Ōčö źžāņē ÷ńŹóūžū%ķ& ūłAņßęī!śöųīõ ÷ŠŪ’ģüž Å@ō ģōņ ō§ žī ńéķłõÜ)Üūń) ł. Ķ:ī&ń Įģé!ļó2 žß!ž!%ńųāųņųąūžļ)ś )ō Ō9ōģļžü źŌüōÜéņ VŅź.ū Ääģž äŻÖžÜķžąŌ’ óč’D'Ņļ ’ūžžųęō+é 2óß īĖ+ ź IÜEžō½ źŽā÷śś ķ2:äū čśųž6ņ'ōßųģŠŠāų!å ū/ÕŲĀĪųč!źżģž'’ ī"Ź ’$īĮō ŗūCžÕ/ ;07 =ćüčž '#KŪ½ēņXć )8(äĘõĒøŲ™ ß ŲāĀõ żåŃžģBņńłų/īŲź2Ņī5ļåąŹśįN¼÷ö51ō#üNłĻåęŠņī3곀Ž ūįģźåā2,!čī ŽöŌģÖć3 Żł& żÜÆ'ģÕžöų909ś ĘīāÕ*Ö¾ēÜĻ Ų÷±źŪ77Ńī ęL-IĪOę§Żę@L5*ßõ+ģųżō×õÓ(÷öš×čē#ś;ŹŚ°÷ėĢ ¹¶ū¹¤Oīõė-šź ļ ś”óöĘźņļ-ńūüļŠĄądI ĆĘėļŹ 'śŚ2(ŠŠē&č9÷Ņõü“łīĢÓķģ&Ś$Ų÷ęöō ģ÷0&āõššĄÄĘBŅĖłöÜöūi!ŻōćżĶå+€āööÕņž Ł€ä)ŻžŖÓSėóö;1õŲóēé,īķöŲųQÄŲ08ćņ ;ģ čģŃŻć4č8Ōōū ł 0ļé1ķį“ōĻ0īøÖéę¶ī ūö/ņå÷÷łž,’õ .īÓČćÖõįŪRūž+ėč ż Öł ė’4(4  Eóę4āėŅõšäŃā!šß ę ĖŽģńńŠ7ó¼Ó¾žōķ+üéņł ć ×Ļč*Öąāõ1Ń !ųW ż7äķōł ļĖį³ė2čĄģA_Ģų÷.ē"’źżŃļž9ųį>ļū ń ī÷ ķ'ųĮ×9üšß.ŗć"źUŠ·6īŹūźż%ł=2ś>éJąó> ēhĶÜŽ-’Ś °BÅģ ć:,E"ģÖAÅžūÄ×éGļ£ļ$ŗöšõå%/Ģī’ķĪļuéłā’Ž.ńóč ųó ō öM ÷Lųķģäå*1ĪĖęś$ .dŪ~żśõ ÓŪt$ć ēēŗ=óņä ń ę1 tŌ"Šõ ģS@÷>śāWÜŗŃüī0åœļüžč ļ ŠżäŲųĢĪśłŲķ’éŹģ¶6ļßöÕ JņÓ ąņ Łń¾³įæ&Śō$ šį 1ūl¬éźž3’Eōł-$+”ņO š)ŪŅäśāłūūöݶ“ŪĮ ĻɔĀüĻėó1źūuŻŅē÷×óńķ6Ø÷’ī#IĢä ŪæIśņŹ-ł·:ęłķņęü¾;våģ(:ż%ųON&ļ÷³Ą’Wśõ;JōļęÜšųļļ¹ź5Śč0Ņ-ĘĢżPE ź4ņŌ źü€żņĪ&ö ēWś 0žņŻč8å×čŅńž$š£ć)óCūŌåü׹,÷ū*żĻåŅųėžę ē Ø- Ńķ(­ėÜ#'ķżĮ7i Źé’ Ų&åŚę!īõńD$!+š2ŚŌõ Ń H!!ū(õ Ł%'"ō ū¼ż××ōščś×"ęėå7ÉūšI, ł5čÖķ’’D’ņŌNĀōņŪßüž’7č% ņżŪšöÓįūüõ’LüM'O†é÷łÜį œ ,ųżķä“Ū*$įūū÷t.¾ŲGżįŲ +śŠSł:åÕų¹łśąĆó ŖóSōĪśß7ķņęĻšśö *1ε<čĢ)Ķó ļĄŪÓUŅŃü½ļ5ö&6_Ūć?KķĆźéńō8äę[ķŹŻ÷>ÖÕ!éĀĪż%ēėąFŠÜ ė(õŪöżų5yčŻö»æ6 Gņü(Śō óß >ęņ ķ%"/ ę’ÕŽG.ŗųļ ’åDåߌĢ3 ķš Źļ¶äČŅ-ó?.óŚó"ąŪģG!łÕ ’­ęóĶ ,Ś2+Üó ė% ńžX“ōµ%"4Žł X< ŃŽŻē ×Ćż’ūüĶzŪį ×4%ÖÖŪż6ļ’ %(Ł"÷ 0ŁQł(Ģżļäšļ8 ļ"ģļųź2ŃEū!Kčõ (- ŚŲöÄä\!,š×+ $š Æ )Ų×.äźģ!ęÓńH2Ęūčō%O¬(1TÜŪ4 ĪąõśĻ"Ō4ļE­É<ž0QŻDŌŗ*Qņ’ Žµ]ś'"7ėé-³.*Żńī,ę žėč%óē’ -Ćģąę :÷µÜž·ņ"ś +÷’KA öō¾=ŽåĻč ąŲįļŠųÓE!ö ÷óź€-'üR üõ¶żĢ*Ŗæ)VØÉĪ Śśļʫ׿,M--ØøĒ8.Eą7õ.ą &õ ģÖśÖ;ײ?6 &ļķ#Ó&ÓÜģŲAß Gõłģśõ3ū*õżš°ž §ģŻū3Ėžó%Ģū!ßąōšPīŌ÷ī1¬-ĶŲ(8ó(/X,īŲ ¹õ­ ĻŻ é×ĀįōÆńĪõéŪ+#" Ż~ŻS'ĮĪ·Üäé Ņ·1ńāÓō%Éę';žŗ€ēńīF-'Q:ēēäöŃŚ'÷Ņķóõ9Ķ é ŽõuäPäüĀüö€÷Ž/’Ģśõ @„ŹüÜņ! 'öŲšįC8ęģG,ō°*!1ęÅöž’*CC@D>õÖÓćÜ&Ēņ°śŁJŠi’ŻķŌ ų$ģļŌTŻõ :’Ś śż<äżśīŽū+įóUõ€łĮN·üąĄ”ūé+QėTą>)<šż=Ķ‚īSæņD#ŽPÓņ#+éŽÜŁüį5éėģķō.L/õ0 @¹ēõŁżēŻĢ#J õ½÷łā»Cūm“KĆéŅ ß&!Ģ"Ā"( 1ųĶČüK7äšöŪ 4ä źēņó'0ōēļ"÷ōüļāó>ā!Ō óę#łšį*ąō]žõę!Š7ū6­ųŚ9ōžó”6ż (Ó) wpŲŗŁūóč!ģśĖĻ÷ ęķÖžł1ÕžÕdłÕüų0ę!Bäś:Ä Ųšüéł%(Y° ź÷Ģõł¹ģū’ ņ%!4źĒĶķāCä!łĶ³÷ ĄŚO’ļ ä#üżŽž€Ó­ććõē>Ęßė:åī ū¶ Ü<ĄŠÖĄqé"×õ"Ē“źž6įē Į5žĪųŅļéDÜÜ±ŌłĻēäĆH6)0õ#ÓńØõźéäŲē5ł¾2Ė*ķū÷/?¾HC÷Õ/?7ŗūŠ3Ēēū.J÷ć"ųŹ/L÷Įžōī,ē\%Ė‘õMķ»ģÓ,Ó-ģÅ źüö Č=RōķÅ/ ŠM źž"å %néėŲ²Č Ž*ÅĶńņį ōĢéüń"īAžīńŹTD©ė-ÖT)ėĶ~ņā^A Vęšœļ%<ÓژēĒĒķ=Ż'ķ§ Ö ść¶śĀż½D$>ó­ųD‹Ė čD&;§śō'W­ķõ]ź.Õ7āóź-Ąö÷öó< śÉÅ/)Šå$¼Ņś÷ä 'ļ ž čåķģź„žīś×ēąŁāŖę:ÜĀš/ŲÜ,ņ Æģūś Ģ&ü:źč©7;łč7ļłĶÉ(»6 ł’ū/2ĀīĢģæ6öķīżŸĶā¼Ē į×ÉŪģµćöų -ķ±¢’)ēįķž&/šōF*õ<ų4×öü“ĶŲćwį’ö#?‹āćOęćī Q+ųž&ĮēÓįż¾ ›L÷ŽJĆż% ź9źĒ¾ ą ńŠ ÓįüśįÓt ņS#Ļ9ļóĆ6F- Ęā0čÜEĄż°Šåņøó!õ  šģńó,ņ$ ŅīłłĀ÷"<āļ P5šÖmųģų±ōbų)ąĘPčēń Ö å:į.)<ķĪßżż /¶ ęūł īńś;("éu%ūćO5ŁŌŲ™ł9ś ¦1K2ł $õō>uķņį’ó !!-×ø'óÜ-3åB2Óķõ)‘#ĶśĢö*Nż¬6*@āHåć ßó ½ÄŁüī<-ĒÓżēÅßĻ=Üķņģ7ņ’%!’żā> äŻųŅŚžĀ’īžåüś9Ž$Ēź .įķī0ןĖõ41hģķ ōŽßā ęļāŽŻłĖüÉēÜõŠgņ$ŽÖńķ$@ éš÷$<ķļ3’ļćż.āåžķĶĀF8ņłųī2ü5īµźēŠ$ćść×6Ņ'ž;’åä£ńž,ķ rNś3&5&!CóńäłŃ.˜łĪCŽö#EŠśū#ŽÕčNā·åĀż ēGōžė$€§ö Õö $'B,ųæ;Bé-ĆųųķĻūü² %Ķń éäź';ģÜŠŚźKšūŽłūŪ Ė¼ė'ó”7$Ęź É'é9ó1¶×Ó_õ 5ĻÄ*čŠĒ-ļŠõśč’ń^ŲU¢Ē/y2īńĶėŲżųęż"ė½õčł*īćĻŚŚ<ÖŻź!ņHź äÄ +)ļėä÷üźŌ )%Łę C)ó&%ćī ęę ū"ü%öžė8ē1Ņż ? /)öęąēŲ*źźœŁÜ/Äż ŻÜĪ' å$’ $ų7ŹßŲ 'ęŁ,õ’Ś <"÷īćąĘż*!ŁĖ÷ģü!öā6éį8™é70)n.08-šõJż&üõ(š/ Żé(ö×ī’Ż -šĖ$żŲī>Õѓń«ĶR0ćõöö'łX$ŅDŌ&Ęą'%HŃNė7'½Š°_4ß$ĘĢŻ!ž1ŻĖÄA~Ö÷µĮCš+Ąń ż¬"Ž3$ēźŌéé'õ%ųēĶ&ż"9"āŠ;!ī÷ßŃŚUȹ=©8žĮŪä&(Ūč jĄ ėĖ"ńÓėSļā'Čõ)Łé4FšŌś2Ė ļķūė2š į’Ę Ē.Ōõū-=¦ź )µź Ūäł <÷ī ł5/Ö(A1ģŽ—¼üįž4üꊞ,łųźÖ Ć@Ś'%ĄöYŻéÓĖ!ōūüŲüŲ!ņAĻź>ėūė%ēŪĘóöĖ×ĀĆ š,9Žß1ć÷öéįÖéŽÕššÖŻ1Ēśō &? šéŁńŗ\ÄšÄKé½»÷ķ ģłū’-ļē’+¹»fŚźRå1PŽĖßąöōŹŁļ%Ų ’ĶĮżßµū’Ż2ŅŽ&ūŲ6Łųöü!AćäąļķņžžL÷ Ķ Ļ.ēĖłŹķī÷’ķžó%ō=Öī. ėž÷®ŃȚTĘŲķšūÜč CՉ1¼āĆņčüųęś4ß²eŲ’ 02ÕBļ%Ī×āŲŁŁńJż'ćÖįÆa ąŠōŠØ’ś%XŠĪF*ōü˜ ¼ēā2Ų.Ūčńźž 2åėć5Ķä żāŌŻ&ņ÷)óąŪŁöü¹ųöŃÓžüķ-ł6āCÜš(--><ōŻČ A é8ēi3ņ’ ń)āņčåą <ŁīČ× ķå0ź÷é&!Żö:ųĖ«€’æüļÓóß "¾%šą%ē"ūńĘ Ąö# 6ģĒŽģ Ć30 ·Āķ 6żśöŌܩӐ2ė'õ*Ć7ÖĮ°!ī?źłć&ą%DÜ +JģīšĒöģÄõķņēÕ =Ā,Öäžūäł×Ģńæā ńč1īŹĢtšŻ Ģ)5īBĒéžņ÷Ń4ĄŁOÖčūĮīžł,/ė ÷CÕŌļ üśš>R9#.»éć’;+żÅ& 6łķüļčŌēēčRéĻņH1ł¹#˶ų’óÕōų ģāēP ÷ķ9čķ#ć ū!ZįėņųöäĪ ąķčłęā*Ó,Ų¢Ķ Ūą/Ņ#äų)3÷ļ¾å!æK'õŠśłü×ńōė$č6ŪŽŌŻĶüżśŽ ā$ęģųŲPźö*ųģŃ華-ęžŲ)ŌĢčę3ę6’¾!$öYó ’>ī÷¼ ’:ņäŽķ8ÆåźŚPŪśīå īŹX ½ē!A«1ŻźJźÖŃUŽ4ń!(öä üŃżņ>!į#å#öåó÷üņīÕøäīęĻŅģ2Ł3µöŚēĀ 6äļÓóĖDūßśš'ćēūL ¼ę+öłõõ’! ² éīēšż÷éį&!Eēó$Ģś€ģÕóńņ÷%ņŻ ī!$’?ÆćMŁSåŠī.ķä !ųŻīäĀöמ= Å’ē%ņįūŁõŻ$Ą!Ż/ėą$ +! ś'żźę ųŸē’2>ļķ÷č&õćüź× öö÷š ÅŻŚžÆüżŪŻŻ×õī1żä įūį!¬÷÷Ļį/-÷ļ ńč Öņ.6Š,į<Óģö "ųĖōļŹķ,Eč„ć Ä)޳ēéĶłB ł@öå¾0é#Óõõ31Ō‰OļŹŗč!*ś,+žé)RŠ& ēXé éź>¢ H- ų!4ĖŌ;(³Ķ£łŗ:(ä łPż?.1üŃĀÉżŪžĄ7$ŻołŻą#ĀG4Åéł+ÖöŚ,ŌÜÅ"ś@¼$š×' ū<厚ĀŻ$äK;ŗ.öō8ń.,ģ ŹūÖó9ćŻS÷É“×ćś¹å&Ę/ÖĮå8ė1"šž ńŪ ųśžīó׎0™ņ¼ęŹż FćĆć5āōē+ć6ö}×å ¼; 6ą’<"å#ņ×?ć ū čųõüū20śśęŗź6ČĖżį=÷ūŅüŚš5ö9÷RžßĄ3ö%>ņÕćĪ€0ŽŁPž ;M Z#­ ČÕį÷¶Üź/#;.įõč-ķćć óųŁ ų$ĀÖ.ō!éä£#5üöżūŖīÆ:ēŚō÷ģŻ÷ż*’ÖŠŚęÉåÄČ-šė" ±”<źĻ÷ÄŃżõóé$ŃÆ5%.öö žŗ*%ģČ Ģī"5æ#DüĻųśīÖ%ĖūĆ'įŁćķ7=ī34|ąĘåüÜ ŁĖöų &ž @żć æā!×õNņæ;ŠĢśXéńēAäö½ä 7(»Ķ#öĀųųüŻļŚćÉŖŲ ŪDC ī:>śßWģQćé7½ū×é#%õģÜŚTĆ$T5öČč-ĖČśņźń0ē O ńāRł7šč'¬LŃ0ō$ō÷ Ć%ē"×:#čē!īD@Ųų’#Ļé -ųųŪėŗ öÜķüē)žąö Üūż +ĀŹŽÓńųĪ<č į’å ķ Žćü(NķķężõHąų(ß “(ćŁÓżüßņšōÖŽģß ĻHfśĖ_’ó$Ōæž 'śŠUÜõŚś1óÖć8śÓ³*ģ2ō>ĢŹöаÜ>óÓ)ž^÷ , /KĘ!L ÷Ū+ų%ųŚÅüŪ- ō÷ OģŽ . ŠÉŌĶß;óNߣąöŠī¼ę$2ĖIę”–ŪžżłBĢ) ŗ ę®ćŃé.łŁ Ó/ģŌ#Ł÷ā8×B ( ēų¹āŲ)é!é’ēü"õw0 ŻķüŽ. ö ī.ųū8 R -!U 6ģ#īłų@Ėē$×óąö4ń žĻāęū*#ļcŃ:/¶ļgö‡ūłß/œūĮó\śŪ%ŗQ0’ €ųāGė40× ŖžFėÕģŚö_+įä0 °ģųßņżōŃK¾ī'“ź õźīõū!Rłå>źQļÓ+ī µä~ -÷ōķJ- ńėŌóśņõ6×čśŪõÄó!č”ó$ ū÷åŚėńģ#ć&æčłż d+ø/B·ŃŃHž)ņšż&ŁĒē4D)’ēąķ ž#Õļćr÷āąģę é÷ōÜł-ķ&īöŽ×<÷>€(ā,ļÖå(ŗčķ!AÄõū5.)6/Ź$ļźłģõõģņ äē åūŽīé^’īćöFéīĖŽŚ@Jå ÷žŚśŽųĆ÷żä’kūŸū· -ņģ:ņž üĖžéų"Ųż"Ļß="ūY1īēźæōč ŁŌš¾,’#ģϹ’Ōżē:ĶŌ׎ź"8ļężĪ9Õ&ĶśŅ!N ÷®5Śł(Xų-öśå@!ōüŽÜ=Mķæžņ#°6d&+ß́%źķÖϽ¾ 3(ž’üć[Ż-Ž÷. ļöFī 9łåīūżŹš|ē Żkį ,ķŚļė'ūÓą é+ńē įõĶĄL&ÜŚźąöģņāŃ *»éÓ3ŁęÓå2Žüį'ČÓīēOÕ<ņĪLäHĻ ņ÷-–źŌ½ēśåę*ī"׿ Y÷ī4Łū4 ŹĮŲĖä2Ŗ#óü¾98&ųMŚ) Jė-Äéūą’Ķę'Ūč< ļ[’ģ;ō Æ*ōóśļ7īI±Ķäņ ķś/©ö"ŪWOėŪŲ×ė÷Ļ÷ĢóA³: Ģ,%üÕč#1·@ ±źG+/k īĄ-éõ ōĪ Xóļ×/6ńßų7©(螤)śŽė9(ž²"ūä!}Śėõõ˜żūż?!ł Ś’ŁŖÕ<"õ4$'åżWŃóŠ6ܟģ ēÆż/' ĀžżņĆ«!ąśźéö Äż!ļļ³"ķ-ם 4ū’&¤ōĄūCŅ’!LęÓ@ōÅČŚųłō9Ū®ź½v>šŪąēÖ 5źźÕ’óČé’śąCūļĢöņóÅćüŌģ+ē×ŅńŁś@éČ@õD3éĄ8 łėJŲp“čļł ’éÜĻŹ“F/ęk’šÅ į “ ņō)!ŻŽé]ü’9īķłż’ē±"@”ĀŅ Ÿ#īÜ#ÄūŚ:šł’Īå÷×ĢóüĘė %Ńé®ęÜų§łŻ'ņD, Ūo 7ė.ęėäŲPęł%"½ŻŽķųš÷ “Ę$·Š󿜌1(ķ:å=īÖ÷5Žć2ōŚóA°'ĶŌŽó š#šĄ>»$õ%"$½łå A+#åŌH% ¢(°+A!7č0ųš"Ś ĻĖš×ŪĆ“.ćŪņ°YÜŗń²üüŹ4POōŅå'‘  ż½×ĮŹ "7ć¹õ×$!ōĶ ķßJÖš!*žBļĘńøłÜ ņ Fš{Nįą3ņąń0Ļ<¬ą朐ų·ł)<®ł?.öŻZü42žž]ĢĶL..„å3MäņøĶåģŁ“ß8 ÷$\Öņüüń™ąŗńųž7É 5ų ¶ C޼ ßü(>įĘ ž÷źčĶ€ńå>śłFēō"ēĶÜł­Ėõ4/B;Ą<-(2V$ ÖčļÖśÜßėī$Ł%ó”ūŽāįö~7Õźź&Qį’F&ų!85 Uäęųåč ūī5ü ö- ķō<&ē įÄśYļ2ŲMĶ÷¦*}QśÖ£(ŅćÖĒś°Īš%žŹ-š(æėüĮCĄŲ0śēśū¾Ü&:ķļÅ ćšéļųĻ’āā3ĖūęŠĪaż’ė-Uļöž3ó*&Éø Ņ1ąļģõĢÄķ$Ń×ū÷ó>ČižīåžłĶö ø= į< :ćä!Ōś(Ģ’ž ŚMMóŁ×Ö$ Ō×ę%+Ūą0Į#:ŃŁāęŌ&ź ė3+4 <Šź ēXĶŪÜ@ōšåČń¼-įšš/µ ųėĢ óM#ćīńų,æ¶ ’E ½åāüŽā)QžĒļóćŠī€ !BßĀčżŅ<()GŃŲ÷„Ļó÷ć,]ņ× ĒņēžķõžĪ öčŽÕAōŪ÷ ¼ŲķłŲź æė(ż‘żōšÖīń8G;ö¶Õé÷»Ł1üų ŽBń Ö\Üęßł,öīĀŗ’źęÉÉ2_ķż/:-Ü(ó®ū é8%$. óßÖš’ū^:ųüļäŪ#4łąŗ ŅAķĪ õ Ł=ż'ą÷łż ҳÅ$§Ü•Ņ ō©ģĆó(óņĒŌAĆĻ éŽųµF,Eī2޵TĖ芿FŁāF!"4ė Måé ( 'ė„:ĻHåÉC¢ž3įšŲą!ā’)ķÉ÷ūA)ēžŲń-żŚĻ«&ōų€p Ų’ö³/3ŗēųæ@5šE- "%Żų=ĻóńÆQ Ļą™ś>ŽĒŽ!čŁĮ óÆÖåÓć+÷-#ęųŪÖó&”$޹(üöJU~+čQś?HÜŃē3Üōüćš Lž Śēķ')ń’$øé™@ó’$(ķõ)÷ō ēžF 7šłčų"łé=õ;ģęųś'ć īIņāĻšņćŗµ!ę'¼ö$ę PŻŖÖ'Ąš ’īų?;’ÓėäŃHśŅÓÉUéü*żšå2»6"½ä%’*Ćģ%īĢęō žēĖüDåØš$ēš.ēÅĒŲę÷ļ ×ńą6 2Pāä›ßŲļä+йrōņ(ļ&åŽ -žż ĒA=ÕHŻķJļŚü$H÷"źśüÖęŠ!AųūńPŪźŒģł2=\ŻiĖ×Öåé5ąźĢüGšÖķĖ'ķŌ>ūėł%ś;-Ž‘ēōęYÕ¾ēčõ0ģęÓOŻźē1®ļĮ)ŌÜ$ūöĆKĮö%«ėķ×ć"ņėŲńß÷ą&Ößķ9ä½ĻČś€ŽŽµćņ!š Ę'ĢŽ4’ś Õź<÷#ęéłō JāņŁ3 ¾Ūóó¹įČ”ēŹåõāŚžč(śņ7ŻKÕźųō źū.ęŽėśž³Léųõö„žŹń$# ó6ņłĪģ õѼX*óĪćž ) (ńé źÄ„AäßüŁīļ Ļįśā8 #āĻõķ!ōÜŠž ’źģųõäö õŃ ļW0ČVäĆč[[$ Śéō.éc÷ĪQš1ĢÜGßćņ-łĒõ×ĶķŚ’$( %&ų ęēĮN?I"#ūæŽł'„Bߏūķó·×9śöDžų.04¾ē »&ēį”,ź¹ü÷āåŌīÓüÖ4“śšļœč,õ%ļłēżČ=+6ųīÜŚļéćOīåõ×ę©×į ńŗĻŽśūJ³4ąē×ņÆó»āž×īųųž¬FŪüóžO¬ž!2šęŪ®äŽ~Iß (ÖŃ !ręĒSī÷Øś9ü¹›E,X źõäāķÖ’\Į*BūŚŠ³ü0Ęą-M64!óÉ’ åéŚęöŸI|Š.ŻØ LĶŠś×T#šģ!ŌÄöÜę¤ų*ūļ¼@'Ź Ē÷ö E īų(źöņAü&ģ=¹Ūóķ#ŃÕ ļł²ĀņĘńžŪöģŚčü Ļč šé%3ŪÓźĻ$ę&Ć&Łóīšū6ū’ ź!+ąģźśį¦é(éäē*šó݇ž×EōS tųģłĀŪūźĻß öŻ&:ržŖ}äū ĖĪ';€ė žäUķßź})"$Dü%š ęBģ2ņEÄį óAÓ) Ōł"źŹēę®$ß7’’ēšŃ¾н’žāÕ,ĖąśėÖīĀŠń";:= ÷/#ÓļŗšŲōåéäūķäńŁ(ī,ģ#ž°¼ń<Ó;Ķč/M »éń4ö*ķę"’n8éĪįóGé"̰K'žõöŻ÷’ū ü7 óļ%š5>žÓŠįļÓA ZBåØõõ€'É.- Ž÷“ł æ ŲŚFąē$ō& ńģėłŌå2ģšÉ½-żļÉš’Å ĀųįÜōėžŪų#č» éßś’ńüęÕš'J’ķ8īīū ółņņģńš#ņš ą×½ėŻŠņ$’ęõõ&łDžń/YćŲ ä’*ł|Ś#öķė āŚšéųåŻ!åņ ūŌ6óåģńłėź)ōéčģ åīŲŽöõź×ķŃžøUøśŹOŪźā-6Üņå ³Tßč ńĘŹž% šćēÖūį#Ņ ŚāīńóÓç̌ķ$4 ų,0µ<šöēķäń.ŌŹīŽP»M3!Kā3L/ųš &ļAąßä’ £ßīOŅķćņāņšŽ&+ļ& ××&ųåĒ ī A 'F6ĶĻĪ`%æź'čęļ#ķ  Üįņ9Ś÷ÜŹ PéøōCķŪ ŚžńĖŚ 3ķ? ńüõŚü÷5ł Õ!ŃK ł;ßöŌģģĻōüß§)ų äßśšśÓ’śµ ż› "’6üž*ōāčūCö„čū’&-¶E*»čøÜŲųŠ.*äŪÕņŠ”¹ū,ö÷Ųž÷ļ ģłS‡Óļļ! Fšžż ī!<ėüÉćņśōö,ł6õņr€ÖÜ÷łB ąś-żš‚ģŹ3īČņG9ĒżM&¹æų¶ ųü7ū(1)ł’5ģńō&%Šę;š-üķąļųł -É,.šIڤÜ’@Ö!żžūLńżņÓßÜæū”ĢĶńķń=÷Ę#åū ō¤K-Ü< żó ó.)ÖŲŲŅć÷ō–?čF?±ģüś' ŻķŲ6ÜĻ>ō$źżšŃśįžš^ ēöÕĶė;čłē2aĪ öś"B4ģPÖ*% ŹŌó. ÷Ž>õAßś1Ńęż4šę ÖĀßŁÖ Ąč-Ć Õž éˆī÷! 5ĢńÆYŲż%ė +ēńOų&& ü?ÜÖDķøöś(ūņ0ęøēSĖÖŚßčņ« ¾Ń!ŻóēJł$żśøÅmļ¼ üįīöKśīÆŲķ·ÖĢó*2üļ­ģę-KŃ6õ)į0Ø õéÓł>÷?õ쬷Š78ųœ÷„„ó"C$APڹś±dńļń߀,» bĀ'ą2{:ƒĪ®Ü¶fÅß8,Żś3śX}āź=ŻĒÖ1ßėŠŻ†ŗ²ė I(LQžõŹ!"Ņ ’śZečż½Rč|ńŹĖ å€äų¹Čō-X<ŁÓŁL k®āQBų%Ļ7Ū€ ;²ū ū€+,ī'6Yėīģß%ū_jŖüBŲ6±’·“lӀīč~€ŲE3ģėC&§,Ó“(8ś/šŻ9µćĻ žČŁ$Ō±ųą2-ėķŠiTßĢįŁ^ Ū×ß+F$y+Ž!õćƒĻ,Īóßŗ×ńÅÖ4ŻāŪ07%ćFž żōI² śŠQõOåīØ Ö_ū’?ŚR3,8e!ć)śžčń !õļé C łJJū/,ßžīÆ23&Ōę*óé7h> ā ĢĖEŠÖŻŚżÖāH[-c÷qM+ ”÷- ¼”[§ńżś! ėė ėųÓäßīģ ųŻ'ļž4,ŅŽžćāųśEŻÓõū6żźłĆųżŽ)CśĪ6Ū^ķķ÷ųē01' ā öśéŻ%ÖęÖĻčķŠĘūĶĄš»ūš2ąßČ'&’,Śę±ķžē)Õś÷ēä·čäķćéĀź®ż'§&éIųüż1śļČ’;’&’  0ś!ćŁĶÅś)żžöŹįéŚ ^ ąė6-ģKó Ą÷Ó’ŚŠ1ü5ąŽˆ6ģģśŁ6 ėīTų¶Ż%'ļĻ Ūį@ń“õ.įõŽĄĢ Ī*ÖŚõ ė0 óF>39ĀĻžóØŪמóļō 'ģł%ōZݱļÅ &$° åć&éŪåļįī(łńæōß’üéŽ ź ž((üFśó/ųŹ6ŒżēVó/ čߣ÷­Ž¾Ž Żūm;ēńēūēždŻż0ÖJśö śļ]źėŻč ōłåīŁįā+ņčśā· ų:ĻŠ’Ąü9'łßčĪ÷0žŠ÷! ’ķż“ņ€ņų ž%Śū šśŻQįį߯īļ#ē7śėų¹ėž!’ļ ėģēöżäö 7Cā+ūļü ū ņCHžŪė ōŲ&žēą?ī;÷ä.¬øģī žü±šž7¶č ą<ęā ,™Ļüōžļ)ĀÖāų*ŻšŌü迊ō1ūēö)šÅ;śĆĒbGęü Śęś"ęĻŲń į ž’Š©ŃŪ3ėåčĆśłńĢŠ$ ń&$4&łĘłĆš ŚĻŻAéšŗ;ż©ŲÕ’Ū'ķüšņ$” Ć ņÉÓ@ęéüćė įąå½ŗ½ō&įźüšÓ4( ą^]ŃŖĢ%×ūĆÜō -Ų:č6ų?ŃĘ/ .Āé3Łßō)Õ©’Źł “õ;QźļųFÖČ’ 0 &ņ(ŁÖń' %ć=TFķĄó œé/ ß ŪHģ*Ó"æĪÜź{čķ.ŌÓžõžīų9įĀżžŃļ!Ž)óŌŁ łŠ%ó%÷æī Ņ6,ŚßåFśÕź)' ÷ņń™ūPóQüēńĶė!žń"ü:ķų&łŃž '2ł-ēųīŃÕ%'[•Bõņ å.“Žōķ ×ķŃ ?täōłöÉā° (80čšāęį=7=łĻēó» Ś%Ū3öCåųUėF ēšĶś¹źżåķčīśĖ’šć ž‡ĮčõB@‘ū ęėś$ė)žūé /ĮÜ=ÜĻķ5 E×%ę ĶÖįüåL1 t/#CŲćĖ!Žųø-ܶń Ģż ŲÕīŚ1$ĆėõŻ&Ė$$,°ęįōŃ Óėž>$óÖ .žY“+Ś1ųčłķśĀ!ōģó ūÕęÜ%é÷źī*!ó1é¢ßöä’įRī-äŌ­ÉܦÄÖīķ ņGSųĘÅø č)BGĘÜßė¾śū%ō ŹóLų ÷ ÷õč™ Füłé,š ėŪŁ"ā·čŗ ėKō` ėݲ%’³'¼Ź9ŅŽ:śéūņ’?1$į#='.EUĻęėŁ,čśōņä=óĄ4eõćī ćé&ßšī)ŲŲų ^ō¾,ż×üęö9łéģ#é5ć ē"Gž1Ī*' ’«ęųżä)ņD!Ū- ŁŻķčŽń ÉD ūŽ’>Ō ķ+ūŠ2ėāū" Żćżł Äčļ1õū£į)Rš3ö’ūŽ’"ó×ē ö.ē.?ó+" öéšę*ćöäž+  ÷Ąćö źł÷%åéę4ģ×.%ćžóö Ōāōćäółłņ4Lē3ä-&ęĻśą'õŅÜń ęÕįįųAŹČŻų"ć!Õ8%=ń=!Īķ üÅR éõź×ÉüņÜ$Ńł!!’/Ś Ō#$š½ üg6ūĢę'"śźÖ'ź3ķ& ßė Eķ3č“ēŌč÷&ŖóśĀ¼ "šī4 ŃŃ[#õü7!Š#÷ū*/õąöŹ+·óŃ’'ūč71*ś ÉĘėÄģśAļā 8*Ņ üā<żŗķĮ 1ž25ćņB ’żóÜiDćć BĻŁkÕÕÄżÉņ§ōžģ½į_¼/Ż" !īäÓ%÷ ø> Sćõ-»šųŠś6ųų'—Åå’¢ļč+13-;Ńį'Ū?/@J+®ęōēŸī #7ŹÖų öėģĶÄźąąĪ.Ć*1ÓŅÉŻä¼ķĘČåßūČ0Öüéģ€6ķ ¼Ņ€śż(ķµŸčŽåÖR5õ¢ļ³õ/#C0 ļ 0äé5+B ,‰Łķėģt2žū^.YĢŁ*Hč> ż6ģę/ģ,ō%ÕŻ%ŅŅOķįÜĮ,Pēū ŽŠśźÖE8ĆĒśŚ .’ōżū=ä ÷ĘŌ$öõ )$°Ķ/'#1ÜPß®įņ÷ś Žéļö’ąķĖ2%ų I Ä O¶śé ōō?ž Pź÷#Ū ńįö 0ŌÖ+×QĶ8Õ;ĻGóö\7ÜĪ('"ć5'ń½žĢC‡C«Ū%łö×.Ńęx &żÖöžßčē¤ ū?=æē"šųņ Ā ĻŻ6õ/µ4 ŲÕžÜ ÄķÕ!Ķėīś ļ/"‚ķö ½õ,Ķc'%1 U.bńĻĢęŁŪM0ż+!)Žēų'Ųéō"-īųš"!ā$ńÜĪśEę&Ń”Ķ$š*ī4é ¾ūŽÅćć·¾åžń'Óņ!-ŠŁčĻ|“FņÅōąüł:õšć=ćė+×ĪžøāY-Ń'å*ńķ ŹÄņ4÷ßóéąą īųŚįąPå-!¬ +)łFźļĆ6$Ž”¼ Ž9;#_Ļ!ÓÖÄäźC޶ö)²ä¹,6īüóäęRČ÷ĖźŽŻżģ’Ł, 9śūķģōņš2ļ·AÉ®7żÖ Ź×åłŗKó9ꎣņģ,ČĪ Ķń3ä6E;ōóēLéę  į~źŖņ Åīē§l!ż®2\5Ūõ&Žö½üÉĄ­Ÿ;š8åīå.ņ*šā 0ć(ē ģžūčöź%ī€Üó0Eż ķäō,%įŽC·^ūŌA>8łī@å,ļ ß)ōēä"śčĶė žķ ŁŅ #šš:łš õĶÖź$(Ė]ńĶĶłĢ>WŃ×Ęļńćä×īÕń8šĶEŚīH)Ē÷ żąß@Šųž’Ē9*ś~¼ń©éõĢģ% ł FįBŁęĮćŽĻū×7ÅīČłéāßłļė÷%ł0-Żö>å ąCĖ8Ō(Ō*Į’ÖÄ÷ł¹óź%'TźåŹAķę¼ģćžėń¶ŅB$°ŹŅXÅŲöųŁö1$0īżŪö„5žĘšóå9 ėüÜ:’āąņ!Ź õśJńŌ’ģ0 "×ōųR1ÕėĘ öŚŅĀÜņż%Žš!&&ėżŚJ÷’ õõéߊ’óŗ(åįŗ® žÜėōźųĖŹÕņģČś >×"ļĘJų -é*ėI÷įęņUšųµ•ēś)ŽŌłŽŚ"Ećóż«H ś"ąõŽ;ŠD08åŹü' ćįōŖPĖĄ'ņé< ŪńÓߢ’ūō+8+æ ,3HŚZŌó÷ćēó%éž„ ųžĶ  $šå"ņ Āń(żŪ4Ą.ę ū ö#QųćŲī SęŚļ7LõņBOŲóź3”3ć*īĮŪAą&–\ēļóåė¹ 3B" 3łjćöĆĪ*Ģ÷H=·žūņÜ’õŠĖøéļņņ#…Żæćń'¹„&ßĀņ'ńūķKļü 1’įń żFCŌÕ%ŠB+å’-$č,IE*č}*éOś"õó2' ĮŌ"äæźH#Č;Äńė7)õ½ģ# 1ö+ė2ēųń€ ķ1$Æåć®Ų>­ ō żčŪōģ'€7éž%ķ$ÜÜ7Ó¹ūĆļī.ō ĪāŽ‹”ŁšžńķßĘēKĮó4‡Üģéųō0 &’żū éń〠āüéōä ÓĪ$ś8Ż Ņć½ū08ņ ’:čęĪóō$’LĮÄņ ž4ł E°%-ĀŲ:ū ʰ-öćķŃńśDģķŠBĆ'āĒķļß,īūśŪŻē(G )ZõėéäŲg±&³č*š ž(Ņ&ų?ŪōżŠ Ų\ųę’Żņ*FÉÄś!ųåĻķŚ< öݲßPęą*-żž“×ę-9'8 -ą+öõż éŪčųł³Ż&" )ō’BóAĀ0ć/ņŒÖõōĄ11¾"Ūö—ć÷ż ņā¹ŁÓō.ēÜ5!ļ7iß) ż1Ü.' ½Ņ+Ą]š Ś4 üē!Éń§*.r¶Ī÷&Rķäߊ?ūĢ?ō=4ĢāÖļųļ'ą łÜ_ń+'čÖåīWõćūŹĢ’ڇī’äņüęĄ?'ēś, Āńļ¼Ełé7 Ń ;åÜEČŅ> ¼ö ÅW6ņģéśč­ģŁ# ŁéŪ(ą6Фļ+ ģłłyÅ!ųĻ×ōęōūćóščÉ? ķ8’č"šå-ó'"š+%ā Ā"B„Əµę-,hķļī2BŠūóäžļA·©öŗō*ŃĪąäōéÜ’ć(HKśöŗł­8õ+ęŽķ“DźäńŻß< ŚõŹéŌ2ż(å®ŪõMī4äĢ45öä“Ķų"ą.0ä:āŸćņ!-Ć żæ!üŁ)óĀų÷ōģK-Żō&łåń*ėė+¶*õ ń—ć’7ōėåß ÷ŁPČ. 1ļ!(¶łé µÓÉMńją7 0 '»ŁāÉįĪ< üńš2A›ŖšĻ!Ō*Žūö)ėćmųgØRć&žūūBśł¹Čb ?žÜńżĘé裠ųÕ¦õ Ķ ü¦ÜęLģ0#ö)ž5 0Ų&•ś'`Īž šÓ% ł×žõ#ź)ßü1ōµńŽä"¼ ")ū ) ļŖåŁė!ÖĶå;į%33×¢ōāJ ģ,ņ) żżŻÜź'õä’>żéļŲė6ÓłæÜäŪ  ŅŁķÕÓą߯łļāōłżāūā'×’ģč÷"(üüõė÷€  ųžų üūžį%ż!;$ß õ(÷*ąÓFėü’źõ ūżŲźėś* čłśAōōŪ8äć õż óÜĢūęŲųõ #öżõŪ!ģ0 öé ŃÅõś Öūóå^āō ī;ń"„Aųß99 ;ŁŅČÜēć#-#.Éņļ £ŚźéŠó9,Šź²žł # Żń\ū8’Į»HFė5źČ ÷’žī%:łžčė äQDę»ūį ÕIī1šģō+ūłģżĒ’ąŻ“&ņ ¬-×ō'÷ žŌA­į`9ć×ķļł’ū"Ż ¹üć&ˆ9ź÷Ó ¾ž äż0¦ęŪķō¦Äāė÷Óņø'9ļ A’Õķ"Ō öüĢōćÜūŲ÷ōāõŹ:·ŠóߤHKó*ŁŠŠčOĄņUåķéųü=Ų ÓżŁÜūżßüģłŲāōģ?ń’žģõŚ įč&#­Ū'Ż ß ūšEŽ$’źźŅŻęūõŪ䚏īå; éŁļŠżńń)Ū¹Ā÷ĒÖīś- =3’ 91 å 5m¬%Ńėąį?ęŹüīĪ.Ņ¢#üīłų!ĖŪėDņž®ü Ųõ&øķŠüģ<ūń"&åńö<ŖĶĻī īģēßźē=ļ'ņ’ņ-ē®Ū35 ųįŃēŲųõŻü’ ėČż©Æöč0(ū’wŲ½ /ć!Š#ć ć⻵ŲŪī ņŻ'(/ę掿 +³ć$¶^Óųč%U1ĒõŁśę×%š&óį ' Ü²ŻŽJųłßūŌäēŅüÅę’3öēzČ\ę!Ńōüķ14Ä=śėī ņ!-Ī1€õŲ'ż ģyRęæų9³ā-ęņ8MüäĖŁMģ=ģÕŖßĄu!° Āīįŗš"šõÜÉįŲĄGī9ż®ų E5# ōīDÜ×’óßŲ÷ßüń%¾ö0īš0y†Ń-śšśķ££ŁįĄĪ/ļ<ģęŲś·óś6šDčģßō&” ÷ ż ) üųģšü±ēģō& ĪóĀ+õŁēū¤łūó$Ūģśdģ°NūõŖżż’ō †ś!łįą,ąĒ#ō1åźĖö1ŪłÉęū 6ō žżõ€HōŽUų צ×ēęĖ)ŚĪé !ķüå3Š5Žōó¼ä Żł¼ŚēöżÅ ģė(ņļĖķŲöķōØźķųšéžŁģÅĢą!ÜĄį%žéźńÕī¦ā :żėĶē ,ņŠų,B&:ģü šą*ĪĪŌ6ķ(ĄŸŅC žäąüś3ęÄų?FūĄ'ćń&ŅHć°üłżļŚŽÅÓ¼Ś įó ÜąėÄüĒÆÕ&Ļģ×ųų”GCޱŪ×.ģņļļå÷ZæR-āäūįAõÕ+ĖčN'Ż)éŽī÷óžķ[õ’=ēŽ’õÅ PdåģļG䚦Óģ;öÕ«öÅ«0 #źūūń!65īÜ+#$õžķ  Ö ėĒßēćö’+'ŪFü *śŁ’3+öüÅį' H6 łüÜźéĆń, óŚż éńöīõēąłó/HWõģÓōĘīń ęŌżąöü »0łŚÖ$÷$ÖŲā-ķüśŻ1/ ’ęžš%Ōöėö ÷īüįüZśmH!śģ šóå īŅ.Ņü³ä'$*čõ˜ā/Kä éōÉ -LēŠęś×ŻäõŠ*(į÷ėüą ņ·ēżńÉńüÜųśČåÖĘĶåÅś5Ż5 ą0ķó!ŅĻ ōśÜ9hųž° ļęŗŠ ŽŠ¾Ē(7Į5ąŽ±‹üä¹Óń!žųūäģĪOņ³üPŽ&ĢŌåä$3ļŻ)ē #vÄ ģ% Ņ?/' Fā1žķĀŹ'ńņĻö.$'ÆŠõōęńµ<襳ü Ņķ'ņū-1”"Gę oŽ?Ē!ņ¶Õē<ģõūó#nŽ!Ć÷|õļŠä, āž'Łņé!Bų!čł N(źoÓÜ÷]*&īģó1āč$Ņ*Ų!čćęõėčźāö ¾å Ēķ; č@į9Ś÷÷ŻŻŅG-źņÕ*1ßšéÜ8 ’ńČżÕżUöö2 žņ*śįń’炸ńÜ G1ąóčļ āķžÜźÕ)ĄģöéĒėėļ 7Ģüä’ģ!ļāėōł$Įß8Ł Į6õŌń" įŲ ēĖģJūä\×"Ī%ķų0óźū -ųĆśłõłņöŽøČųłõóåŁI&Ųōśč+ü[Å9ŪüņķŽģäčõó¾’Žųé"łŚžĢ ųJõ2ē¤ŌöÓOīŽō0Ü$å=ßś#ōģ0é¤Ė śšį ōĢ;ź4Čåž&īßķłY€Čé įGńŪš×ńRĮˆÄ!éŽö)’§’ĀńżcŻā!7®NżóĪīūŲ\(!ņTǁ³25)-īėŌūXż&Ājä@  ĢҵÉ:śłį9ńńō>ßõk÷ÅüäōĶJƒöUåčķßżŹŻē.öĮĖōž¶d’KÓŻš HĢĢŁžź %Åõ €ü •پĻ(õ#&ļŻė ŁFCRżĢ/Ü $" :2ļJļĢóķ0īņ #%öõąŲÉßõÓų Ęė! ŚõėEóßĀ’G#ōģ1ķ$!&×*šńōćģßµėōĖį71ś ,īēż, Ū ĢģōõŁéö5Ś)ķø( ¬ “] üįøäüĀŻōļĶéüģžõ ¶ ėūō+ ¹ßāÅFEÖńŁ2;¹.±ėÜ÷R%*Sąü%ßėä÷'ž ;/ķōßéźž^ņ "&õ)źčó2ÄÕµķ0žŁ*×ŗŅ÷ė(Ļ ·ÅFļśŌłéńf* üł#ņ8ųńV ūF üŽ÷łŪT·ł 'ģäŻ2ģ ū4’¹Üķö;jźŻ_“ć#ļ* ¼ö'õæ‘ (óöōŽÉ-ß%<1&$įæ1ó’ŻŃĘéą- ÕšńūSéó]5Ļ÷’į.’š,-;)°įšÕ8ń×ŪęĖäö ćž$ėłēŅą żä  üńęؚKó+Ķåę& ä$čåćść'(;9ö9ö½#š!ō½&üź4ž唎šÜ8NŸ²ī† Ą½śåÕÖģ’Äē ¼³@ūīĀčŌń/ęŠ!.ļĪ%“ļ$P²*Ūć4>E9į õ1²  ēFę+ßųē »śćEžCś£ģ÷ļż¾ķ$ŲųĢĻ@Ļ$Ų÷ņ*żńŚ”Ś.ųųłąļ'ęŁč&ė5 ķÆ¾ī²äĶ»÷)ĘŁ»nŃæéĆõIŸ ś:Ō+čāå ų%!ČšÓ='ߊŻłp öŲ@%ö“5L ī$EŸ Ć ė ÷Ļż!ŲčõåÕ@4µņö+ E#ę+īWļ1Ī ¾4žÓĒļÓ*ķµ  µłģč6ņåŹéāŹ3-/^ģ1ßߥą1#ź§äü±ä2ķ)ńēŖóóˈž'éų "0åžüĪšĻ’’Čß÷ŪŻÜ!āė ļä¹ų#ļēæ ÷’ž× ’)¢ĪhĘŻŽ„ÓšĀŁ £8Ś Óźņķ ’Aūą)ņŌšš,÷éą00ń3įĢéŅė&Ā 3 Č:ÓÕ:ļ÷Åä±a°ĮīóĮłą:å}Ö+,Ųé’'/F6äįüżē žżżķźŌśŚĮH÷Fļ Hįé =¹<Ł#ģ"$ąJM)€šÉ±ßąüģ;5³åÉŽ',¾ŽŪ+ńKŪį €,4ķĮ.č6³ļ»Żņó·ž5+āļņąćöŌõ ŁĮč<Ż,»ōŚš×ėų€Ōąń Küź!ūīĘķ·ˆÄŲÓ*Ŗüh·Ē &ŅŌUāńõģßģ9ėłĢź Ąļ&Żė“0žŗü ±īņŽ-éś'ū’ ź ü *śü»ĶµŪŁõ²źśCĻ-)ŪüśŃč@ éÜņŽśęŚśåϲ(źŁų ōöīų Éóźź÷@ģ³Aüļņ#ū¤Mū1ų) ž-7ć0ØķśŹż S ÜņTęśÜŃŚ# R ŃGįžī™čŗēÕ!ŪĪ"ņŻōéĀ$ź·Ō!ü ęåö0ĖóĀņļśńō$ü¹Š ē +Ś#0ėšDšĮĻłŪ'Ą/źōļĀU+»ŽąļCēÓą1łõģŪ!ķļ õ7ęéčūÕźĪåł7ļGĖäŪ&å żŽźś (żą0$ē7¬čåś³ĪĒłäč7ŗł&ÉżĢ:é÷ū 1ś±K įęąĀ> Ā9ść y ¾>ėBVĢóģņū÷3"īHƒŌĒē ųņūų Č*žŗ#ķž8-ĮÜŹ&M³ĘžŹ÷¬å*ņ’,Ēäß!Öf& ßń[S^č(¶ĒąD.1ā&Ó)ż€-j 4ēõ5ūžÉéē<'Æ( ėßķ üŽķ Ļžą \š”„'÷ ąņŽ5Īö× Īå!3ś:’ż7Ūwę±ģ&+ß$Ęā’ łō !Ńēöņ%)Ć«Tķõ×#Ķč)¦%%é7ž ź& õüĶśĶ®- @Æ  Čā!š29ŁF<(2Ńüś $ ēöōń ōē0:ą+ó ;*łŪśźą ÷÷ćŪ »ōŽ ūŠHŽėŠ1*ēė;óų¾˜6 ż³(ŲīöŲģ€Ōēå :ߎ÷÷×a ÷Ūg=ź6ŠM$-®•8§š²ĘŚŻśżūģE/Ķ źļ^0öŻAųčżĪü5ā6ĖĮ#ś[µīęŃ0EČ ė’Āģ÷$ōĖ'šōüśĖńūökŃīņQžńņŹ*Ńēļ7ūųśŃõå@ōš$ 'Ó䯫ō AßŌ“Æśų>ιźļõ‡!Üę ÖĻ/ĖĮ/ą õ; ü źīūĢłł-šźFņ(.'Ā:ź/%Žč9ö²ļļG+LR%ÕÜÓ!ōJ3^ń8¤ūĶX˜Óšā ĖÖę Ż1lŲŌŠĄ·I-óļę4Āūīīöčī!ä$$ “*éųōĆø,ņ-(½Ļłó(žįś"!ćåÜ ōĪņķ$ÓöśŹĀö ČŚ¬łŌT™6Ó" ų]×ą× ļŠ’ęD©JÖ5īĀ$&Ö Ö+'óÕ ė ŃNčŃęRåžM4֝ ķśŪń·īŅŌļd8w©>Ü·R¶4ż˜ ä)DŅĘóŁĻ-*ę?ł%ūŪŽŠD'1O–!œ0#Śė ٸ̾W÷(Į³’ę·éī-ü÷ŁĶčÄņ6ÜĀčįŠę))¼äļĶāüQųNųŃ ŽéģĢęūh(Īšćµõż #ōėõōčŠŪ7"žōüÖąYŁģĄ:īüņėAŹ)ė÷ö#$4ś %ķ+XHĮ$>łńą ŽĻš‰ć(\ćēąõšęßäŪ÷ÓōóÜįŁ Łżīō#1Ė,2ńķ÷ł&ł2ķ!ĘߥßĮōŗĶõ>ź€ź;)ÕżŽ$ė/*(õ@’CŁż"'+öČĒü %E-$õÖüćķ¹Šż(öÕśĄė:łŃ'Ęž”żß ŽĘIćĻ ō?öžöÉ 3ŪÜ!(õ¢æ’ÓóčżÖ/ĻäÕ0 \ ä7łī_ÖŌŹłöęŁø G®$łć0šģųš*5įų(&1ī7É÷Ķ÷#ą š3RįóķęŲŚó¢!Ļ ¹² ųģ’ąPéõŽä÷į ėüB4æ&Č.įų’$ēŌ’*AČżĮćįŹņ9äC-Ēś„č§ŲŲņ=ģ-Åõ)õ0Ė'ā ų Ęe”ŠŅCś"źÖž×żõųļ»ČS×ļōńOĘ!: ß5)Īģ7*ā. Å9 ńæł"Æķš!×ī£ėčĪõų@É#į ŲĮCžš ,š+%āōŗūž"X ōo8£÷ėó¹*¶õņŒł59Łüńšę(Ē÷Ųö“:÷05ģīŽū¾ō Ęķžż™¶/æµŚģĮ"ō%į$ńų Jżņ ß(#‚šŻ)Rß=*!*å³ŻśĪ ųßĒ5ó¼łÓöķģ%’6ßłžƒ*'ź ŁēÕ:ņčšā‚/*Ł Ųõó ōö å$> éþP" !īüé+öńśąøO&ĶŃ ö§Šé:8õ÷ꌿīūą!å -öņ謳¦į'ćĘųäć MÄž÷E üģ<'Pü)õ¼įÕ/Ģ Įųóüō( “ķū.å&’Ņįżõ- 8ä¾GĶńź¢éöÕę0śB*żŲĻ,ļöććšā÷ ś!ś!ŅŠcĢĖå9äÖ5%ķŹķęū Ō0Ūź × ņŗ/O'ČźāÓß9Č%ó ó詁ōųźēėą.ń@)§'Sŗó$ē7ųžćļę/83äY ąÓõŲŹ é’Ī' Ęäõb¹åöīž*¢# VÖų; 2OM0Ōó8į$ !Üŗ&=™üž’"­Į©ÖóÜŲ æ čéśōīÜ÷åLR3«/Čļģ"Y3ćŽ³łPķ)åģż·%šÖ³ģŖŠõ !)ļĘéąłĒä0¶ Łe¤%š¼’;CR9: 3« Č2öõģcLŚōĘeŁß7ų2ÕÕ ×õʤ&K-4<½-ŽĢYżĮrĻń 0öšųźšŲŪņIĶēH!å;Ż0Śē ē!F(’ īšöé#ŠŚćÖ×÷÷Ī3"Éź°żĢī įļÜś#īļ(śSųp)’žó€$w ŲóąļĢōšÖ² ÷łJŃ汯ąŚ3ūż*ųĆķłŌIN=šćģ¹ł-†µė+ŲÉ^ļū)1Ļ5ČŲ5÷ĘōFūå  šŃūyßīĖćš?“ęķF €Ź’ū) 8ŅŃ'ņZÖN®1±Śī÷¦ēęī ÖōHü÷ķĪ– Q!3ĒCŁ ŁŠŲ÷ė'>ž Żż*Į1ś#įųōū>üüŲ,Öō#Ü/ż«Ś#ėńėźč 8Ł#‘į(ņķ$¾’čÓŖ™ *ņĄŚöPŲąśŁZFϲ%ć/3žćģ"4@įč.ņõ4š żõ%’ļ’*Ć$Ųå< ¦ņٹÖR éūÄß čķŃ(Ł÷Łęüš1 ūų’#ėŖłķķųŃ7čŚB@ £Żżó ® Ų÷ųļ5 ’žē9ÆŸF?ĆŠ&ŅP×4śčöÅĢ]ÖŃ·öśō ½+/(HÆaŻDŅó 1CĢĮéż?(Ͳ’é üŌņYų$Œ:ō’ōéāk“ßīüģßōĘ% ³0Ł7ĒĘ*Q9įOóÖēī;ēØķ®(³(±ēNõ@tÜŃF·0ŁīHóä!¹Žņ?V ;4 Šóń ŻóŠĪ(źßß3ŅčD2A}™€.Ś@ßDā0ł#–ē5Į@G޶’Ó2÷õĪóéG&×» š,&žLųõó!õÕDĢ śÜ×Āü#ļä āīć¶ó!ČZņ6¶Ü éłóż-ÄŚāóŽć Öų#EźźåĒŲč"2;ēĘĖų żńąÓ5øņ/Žš,W„p5]žś“ć¦ųܖŌŚ¼Šųžå’ėī%HóĻ’ <%š ņŃÉ9:1$¤ oÉ Ś^ÜŸ-õŪėõ6łæń·óŻ ’-!"øÅŁ)ļóå@ńō&ņ4ģī J"ü=-÷łł0Bžģ éÓą ō#ō/ōųø Ģ’2(0ąŌéĮŲļżÆšōżE× ×ż6Łėėģćężß!ėõŃźōž4šę éõ( ż ’ ÷żņ$ćĘ« ł6'*ßēčćõ$@ÓńV<żÉóĒżčg?Ų Å*įģ*'ŌŚŁś! +ųė TÖóé;Ū  ųŅņč ÄĮßśüöŃĻjü¹L 3¹āéžčõčŪē@óė'R0ĆųŚ[ā÷ų³?ł÷× ęĮłX#)#äš.†·É’žķÖČ+$ęcÓ Ļ®%)A 3</Kųļ˜ģ$źłö/'¹õį07Łné'ä żēū-ņŪĖą'Qęųģ.Ń“-“’öś*óÓö½ĘŒųĶF+ä ųē ,ÕÉ ööłąK!Źį ĶŲ36ąÖß4é ’ĘŚ ē’ąIöł ŲūÓ0"§Ļć ń²¼/ķūNćņĄ-Ż H M*ūÉÅŻ6÷łŃģóĒ ģü# YÄäÕŃóōó å4Pē’ ×ÄY'Ż-źĢ+šļö,ÓĖßęĆół÷’ī ņ!äĢńīCŽŁäŌĻ  ŁĒ~Čķśó Ö-’ä"ö ü ±#»ČBĻåī&ż,ī/Nņī, öŻÜ ĪEó"!ٹ%ėē ¾Õ ćßłÅōē׿į²ņż9+ Ż4Ģ šśēæŻł×6ķ(į“żķęń!#ä&ąÖ”ĄŠ/.Jż›ī1Ņ/Žž8ģ’Põųģ¼Ųž*ņ ƒ; <Ī $ įĻå7=+c#”×Čߎø3¹ÉP…”Ī q Ģčź /ü4ēĶūšī Õ. /ī$żēźµéŪ’āĻŽ ū*ėŁŁÖž1śåįūŽ)Øļ 嬽üćūņßŗųH: ļ"čł.ąńā ūķõüķĒ7ńß<ĘŪAėķįķīŁ!*žī1ł(ō’kś Ņķ!"ÖHłåąóśLžįõ ņ Ó D0śŚŁšÕćłń -ÜĶń õž3®ł÷rŅņ|¶*ę;ü >ļ.ń~ŻöżŠ–ēÉ£®āįĮ6'Ģ%Żś7īõ,ćŲõ¢’ĒLļėŖ:' ķE źńdķ )śē Xöé Š’ō)«ė2&čéėņźü‚ ūą,Öūм Ž$õJŠD13łąé)Օņ0Ėå2 4u"ćņ é«’Ķģ–F34ńŁą% Čńč+ćŲŚ»µž''Ŗ%ļļłÕčAŲ Ć7ļī!7ÉļŹ%łž]óÓÖ2Üļžńń ĀŻą4Õ-:śÓ'c¹ņÖ<ź Õ’öż ōÅE±!ö0Ś6†ŅŃåéńł»µ’.(÷ō ł)QŲ÷ y@ ßūU(ęÜŲ 'õb»š(Č’7Jóż÷łóŪ%)ēõĪŁóķŻśŌUĶżžł0ļ!žĢ,ž'źę-ł»łõ4ć/Ż Ōł®ēē3¬FÕł¤Ż*1<8 āēĆż> ęčų B(€łął'#ēųÉ9¶0'ō&żė )Ŗ óöł!Ś+ī×łŌŽóśģśŲ’ó@"żVæć÷ž4ź¹/ךģ Ü)éÆ ĢņžŽÕ¦ńé-X¢W&åż6ŁźāōåÓżżī ŽłßĻ0žėļ÷ßź¬Ųžžµ1Ż>I×6äüį"IūŽĪ"ż üīė÷=čōéš+5."&·MĻä\&ɽŹėŪĪöüW1+ÜżI ­ß¶ 2éóā ’čś,Ół%ÆA7ķŁāøō 5ŪDšć­ĪżĀD, +éP(÷ųĢ劮ōÖūų’©ņ ėśī% ņ óÖŻ)H×&Žž%½æéŲē³ģū<&eŌ5Xęķ1$ Č?Śų 6!ĒńB(ü,Ńüå¼ĀÓ×öųą<‰ēÕ+Vēą¼’żĻĶž ~äI#ĘśłźżÉ¢ņ ŗČ@ŚÉ’Õé/³!€ØoK?ńV<ä ź5śŚ8ęžēSņ˜ĻĆĄøÉÉ/µJ xĄż×+ņõ2PŽ29®ō"N ļ¾žū=éå\P8É ¾ž.ö(åŽźŻĆĶ#ēóČŲćĮÜŻž źž+5č3aõć"¬ ģI') {:Ü䯞Ūå\''õ5&$LÖō" $¶"H꿯šüēC’ Ņ0Ō;FœüÕŗ-ß$Ō*óąįõ /ś÷3:@ßM½ŲGĶłų_ŹöĄŃƎ ’-ß 0ćč ēęėĖJ"śķM#ē%ō垝3ĻSFŠżō+éż=Ų–E*!ęž ēē1īéåūņ,éņņG PŪÅ1-:śŲÜ' “ż3N! äčĢļū÷]Į+5’4(õÖĖļé= ?ń źŻł śįĻÜļ&õ# ķżś šīUėĘīįśéܹ߁ŸĘŽöćÓū× óš ę*Ų ż"ōż%éĶķ½É«>ęÜēžļRžęśųåžē#ēŁ ųķ&ć- €Ś×ü–ĄÓčĪ’ßč żćō,ś9×Ų)ńŪõ-ęüśæųż1÷PG# üŽÄÓš#)łūū)źŚÅčĪŅųWė ł ³ŚÓŲłų <ĒI$.H#ē$øsĆā½ūĻ%)öņ#ü äĀ÷ ŽåĘ"#(=š¶ «š3 Oŗõ #D ś÷(ó÷$Ā6(ŽķŪ# śš.×Ōīš Ö ×Į÷ ō ³ĻYę° +섬’ŽČUš ėéAļR3ćcÆcąĒė¾šļ°:¬č*»JŚāą×Xą"* ģšY ³źIžKņ.ӁE!ŅD ģ-'Eü<Ōę3’5žļ ī”Fśķ:ŪU)!,š¤ļķ"ń:ĄÉņŠ&1łIÓüäH/¾ %Śę×ÜŁg.ä^ ģ2™+Ćś(!ßü’ H+"ßDßģ6ŽÖ1%Ķ. 62ö)E ö.Võū ī×ę)„õ*ė·yæ éżįźšę+ųH½Žēõģ)#ĪŃ“į’R+¼"2öŪ9’ÜžöÄ-ē)!0§¹öžģž!ŌžžåÅ’÷ķų:æ#’ ė3Śė Éńõ)’ņŪ0ē~Ś 2É,Ųl“ęAŚŚ20ęG7ŻźŁ÷’õŲ 'žß Ź/żÉńėõ÷†Oō ±’#ļ'ü “$üūŲÕĄńęf/č$÷ßßõćš9ļžłOMTó2öųł'ēŲĢ2Ēé¶ņUźŃį!žģł3żņŲĶI& ļŁńł1-ģ»’ųŪ!ąā5śģ-Ö@ŽõžņŻļSŽāļ:éž8ļĒņäĶ+1öŠõķģŪC¹’ą3ĶćĮ śŸęZžų Ē®óJöŽ%ÖęE÷ö9 ļś,óźė ņĻķ å+ łŃ į1ÜēīįÕ .#ŠÓÉ/ēąŚŽ ė>ć·+åüŁŚōóŪū’)åøĀE#+ 6öąŌŹ ž»ĆŻįŚ ė(%Rģīų×õAį ä™ü åŃE ÉÕįśīĢ Įč(’ &üö.Ā åś/ÉŅ!Ņż äžTėŻ’żūäļ2ķōüū’©æŲ&ūōęž2'Éäś5ó ć»#õŁöń(ąąó¾’ņ¶ķēōüÓ$>䌒öū@13ļ ę"NŃńŽ"éÄŚ×1 Ż:Čüüśēėž/>ź<е G'ńŪāś ÷Qę źĶRĘŻ@ņdõéNŌ),õŲżåūėŻą&”ž€µ āńŻ1  1—ē éÉāoząģķ% żXhē)ĆĀł ī õ źÜć.Ū L+,ā é Ó±×-l,ū§Ų1’rē@ čö/ĘČ.O:Ļ$ā2¼ēü4ļP“ÜŚā™°ß’E æĻ·éč0ßłöĶķ„Qėō&Źń&øńG#’&€% 'ųłŽčźłÄś#ż&łśĒöü’-žµŠO3ŚšNźė*±+ļ Į ×»ūéIąążß„ż# ‹€ Ų ī&ĄŚņ×9÷÷śBŃģŽ0ś"ź=)' ėą’,ćźōEć¶éĘ öŪķß3š*Ń ńhē,õ ß%%!åļžćæOüł7ó·āś˜ "O# æü¶Rļ%¢ ó©-KčūŁ0) Üōį’ķ÷"āó67֝ļėrŅŖ;ūņöĢóŚõæģŃ÷ļłóĘó <$ž,é•ö0%'łö»ŲE,ĻčwĻŃ!ŌĘ5ł’śłĢŪ'ń’5*L3õŻ3=ī”ļÖ9 śęĒūH)ćģęĶž2Xōńõńøé#ó Šų l 5¾¾Ņ$óĪž5ų ą ^ėCńŻłĘ čŌBҶüWę ėÓŅĆżœį"$+SN÷ą3’ū8ģź īā ÅąµÜŁ!żŲ!HŻō,4ź  łöŌ-śÜF0śż­ ŁŻö\ļ÷,ĪŌ,Æ:Ūbśė> $)ķ’ķ=+)4ķ÷'ū"ßļ Öąēž0(B'ņ8 Ā)Š’ķ!:÷^ęąąĄöŽĆٰķv, ńMś5õč- æ’ ŁŌę’IŪųä+P@ū±ĪĆ³Ų dśåń1(1 ’ Ļš@/ķóŠ85; čŚų ĪéŠöŲ2Ēū3ń Ųą>E7 üś#2*€,ąÖūŅKé)ĢšK&Ó² .ßä7ćĪü (čģßüķ ų*=¢'÷ Öõ ŁįŻõ¼č$óõśŅčų ¾śPēņżĮŪ(Ģ ńƒŠēģéēļČ%· Ó&ļBģåĄņ2öļ?"-ęuĶK  ų ä łōč3F(#/µ‚ųééųēÖņų ÖõcDŪŃ"ē2×ō ŪŽėĢß#Ś=:€ŚrÅĶڱ- üóÖ³4[ų  ŗ#Žņéžłcņö:ė°ē"čģå<5³æļÖ.ĶŲB ż üżż'ŁŠžŽŅĀóßŲßāļĒżÄ[’ö×öŻ'ü’T#=ē’’$÷Źä&śÅ¢ūģ’čĀ#ČĒī],ܧ! įJJŅā*žŗīōeśų/§"-čņ ģ¾éžß%ą»üšššÜ©ķÉńAå>łłÖŁį K·å2FõO ¾ ū6ž½ĻŚ D½ 5ļžćņöčŻ%Łßßę Īź&/ų+Į&5ŗßčߎš5’%łķ'BźÖĻ’ś×-±ģŽń“Čł­ü'ó× ą,ŁįóŅü»īĢŁÅ(" ’½ńģ^[äŗäß),ė >?)4Ņ% ßü!ķŌŃńł Ā ēü ó ’1ÖßZ’Āß'šłż°÷ė"äŚļėę&īa÷ÖS¦’žé¾ÖųŲśē#āīćŅÓüžż!ėī&ö£źĖŽćń8=åŗŌķ0šņž å\'ņśņńŲ0ōæ@äų% ż5āõä3#ÜĒš ŲźĮīžīųD/śĶž Č'ńįńŠīšń„½$ō»įü4óĘź’šóźé%ןī2 × ń0ō"Żē6ēłüŅÓõ”ŽĄū7Łę" å98äėü!’ēŁĒ)ł»š" ąłźū÷ŹßŪŪģéŃįA HåłF-ÕėŽśTīųõčāēōBõ*Ö?ąāģ÷õ®,÷,Š !žõų ³! –Fł%,÷ų AU¹EĻ›ś$«$Ö=õĢļ#ėµ&(ݧ&ŽĖéČ. ŪŃņČNĶūļķĄ Ó3=ūęD¢ĶZų+±ė ģų"Ł żģÅ< ŅQ÷Eģ5  (ĆĖÉå ÷ęĀ ō ģ ßé±TWÉ÷ė ““ńłņüĀÜńć’ ¹ßķ ·% ō īØåEF1 N&ņčŚ× „S%į ŽķõńģėŅ!ź€įīšń.Ž,1āž 0*ßČõ* –>ĘĶ“į $§€ *Kņż ńģ ×+Fö’ĖAūĪöźŁ²Ó ćĪ&ģöČś+üõŸōč¦Õć½ā1׌õ: é$'Üįż@.“1Rģ÷€$…äĢÕKŸ’ )#šĻ„+żč-#ćŁ%źūö÷łŁAża¼ Ėš·ééęåż&ųŠ«BĖĮé2šśĄ÷Ė$ą¤7īøC& »Š£Żé#›Ķįūūü6ēŚńčėņņźŚóÕ0ēÅ$Kģėžśķ\DēĄ¬:&źRŅēU )X÷ęEųėėõ1  łä3Č!Ōķ’0°K0ŠśćńīdÖ ż ÷ĖW6ĄŽ)Ś" õū+ŌÓ ē"ķĒ4āž;"ģąī"÷éźā©:ėŽšŪūÕÕō&Ń2ų÷ģöŠėźČĻ3æģ  N’FŚ$žČļBĄčż1łÉł4’źüŪUÆŅņƒ Ų6%ųņ4*'Ū Ś#žķ4ݲšŅóžüØŻ $÷ėöēėęī- ¼_Üč$ߺͳäņ'(ł”ńūė 0]éL Äųėåļņ³ĪžŅ1’¹üQ,ū³ęčČāĪī06ZÕ ś$ųč-šäēŗžÓÜōųŽóõčģį(ZÕń : ęĪ#ćÉM` »éŪńļ}Õ āżń+0żņ÷öč8™'ų,ÕĶÕÉÖęÆüšõż8ĻŪŲźĢ6½)7ž#*/é āöAń/'™č7Üč½Ų;ūĮų¶ÓÓćŅķÄ€!4õÆ÷žŻņØŁ²³!ß$D=öņķ;Ń@żėĶųĶ#0äĢū/žśŚ÷9ļåķźŻš;ųń²ŚHóüš½A ķ5ī'%į•Ü łd;¼GŅĘāĶ;„ÜõõėĆÓīŁ Üł=ßųéć¾’:ŁMI¹ķįIń‘ļC”Ųóš×@å,ÕļÕĒķ’Ųā½F÷K"ģ»łKŻåźĻD).ę1Ü"ńė’įĀ÷“„Żįłéų.ĘņÉåńū õŲŅAķŻäVéÕų]Éū ’2<ł+čūį9ź'?’ł# ēÄļ öę$äś@Ń,ńūŻ@ ļł Xć7Ńń%"äŻ5É< ķ ŗEóÄÜ^ö$Qėėą žļ2ųéĖõÓžŻ æÓ-fß Żö+äĪĒč/ %ż7Ś1öčÅšōŁüļł&īŽģ1 ó:Ä"5.$0<4&ņ ėļ!# ŲŌąĶźß½ź[ŹÜīŽļŪŲöłÖÕõ ųLśź!„źÕų½Š’3ń ęÅ.N*čĪīņ÷(ĀEå”:ą&=Č Ó öÓD<Ķ9Żöłēäļ&śKåóŅä"ŲøQųÕūū Õń<üīŌnņ )RŽ&©õ8Ā ķ>ŹäšŗüŚ  ģ=~žEüć£8$ś' €žÅ\üÜāēךŽ&Ūó÷1ķ±éīžBÜÕą%Ā ż±ÉÅ_9ŃĆę÷Ų0Š-Ćž>ņ1' )Đż śé²ńĘŗ•čŠüE ÷Œ%ß 1EŸŲµ&$ÖśĪž}$äT3ōKč čĻń9Ņõė<Īī*ŅĶ8(+üĮVĄņīxĶ_©Õ[A+ żĆJ/÷ āPū’ō]ī¾%6ÄbÅ+ą’ćö ż÷(+ū*ĘāćēżćõśźĮü )  õ Ģõ&($ÖōāĶ J8b äĢ>EłŃłźšöÜŃ ōŚīž°SßłõŌėöH8 ąæA4ŽÖž6õM ļźūÖF%ŌéōÜī,;05śÉEV%+Üē ųģģčå*ńJÜäÜé#ž÷ŃłāZłĆ$E@1üBŃŲ š ų. ŠüR (ŽüļŪIŹī÷ēŌčķ ś½V AņŃJ ĒCłŽčżųķŅÖ ß3ÅĶüŅ'³ö źżēxęūāBŠęģł'V Šļģćžēņ’¾ĶóÉ’®Ūė@/åā H*ōł*óÉļ Ū" 1ü37õł O 0Īü;źīŌ’āŅī6*’*õüm÷ąėWüżĻ:’ŚčČG"ŻŽFÜėīģņŌ1ō’ųŽģ23ł1ćŲ5źŲ’č9šž, 2¼čįŸŃģµ>ł-0!÷é< ŚóŪģνāŗōśęņ¼ź *}Ż=×ķ éåģ’ļ.Zīč!ō ŅJ(öµÉü®ģ-4,!Ūe÷Ŗ /.6ŅČķŪ@?"Š€y·3AŌ7!Ģ!Ö Ģ’#2 Ōć A°ų<Ó5åó#;ŻŃķłÉ ØóöĘ+ßčÕ.żŗ4>"MęšRā÷ųżäŌŚ-ŲéłēŃc7ėĪ',NõOįFäųäėŃéńŻPņŌ%Ńļ“bę€ņĻ&ZC,Š ×qäh52Ī .Q7łńųģū¾Ļ’:-ĒāĶńåęŚKłKCüZŅķä.Ų/µŲõī ń"ä* ]źōųßQźļܕ)˜üHN±āYńń¶šÖōĘļ.Ų½ė)%%ų Š—ĶPkŃÉĢāļĪ÷D Ūė7Ł øœf߯ł÷ Ēāż’ōŠžöč ŲŌĖ-³ģ×ÕģßńāĆĮųŅīŽķćōÅöź’GėGśč°Ņ÷ļ Į⻐@×$-()ļ= šé²×ń\*ė÷č2Šżė3ö # ļ$Ž-…&3ī`ĘŽ(4ŌńŁķ3 A÷żÓÅėMŠĶņĄą/× >Õ 0 ėr āūČ.ŲUAöÜkķĖēåĶŌŅA"ł÷ļęįł'×XĆˆŠżčŒņ'&ꏟż¾)łŽ-*č.ōH %ō#ß2žŒüYļ÷#7; é$ČkŠźĪü;ė;!Ųģ!ä%%ĢõóÄēŻ &%žą`÷$;ėēCöōųż 9ÖĻö.ś,%$Ų›ģEŽÜģŻ«/+óĢ2-&*÷ōēøŖŁ @ŽųźB+ą¶",łź ŪFą‚ķ< ßšī× ß4ę$Éź ļŠł ć?Üėč'ėÕÄü1?€ąś ł Ż Žō ~ģž-EĘę 'øäį+ž"Ü,Šö4Ę»¾Ō,÷éčūÜFżö¬1pēżõ0į'*č1Nń¦FÖŪ õżó!Ś- Ų*öī ’2ƽ ä åō 2żŁ ņ隻ŒkqߌĒEyD ŽćźĻÕó=ģ õōŠł'`1IŒŚČūķ·ķü ō*ęļū(Üė’Ż,üī&žłŁå²1ń÷ąš '#šŌż ÉēźĻŲ÷śJöÉ’ķā 5÷Įõ(!ŠćāūŚŃĒķ’ęååü"ų ĒüNąŃĒ!ķNŠųŒ#銙6"é2NšÉģ"żdÅüķ!ā<3( øĘåKī¾āž ū ³ūīįņ=-ÓķM#ń?łb<ąśóńõłēēmŽ *ė59$]ė)ī āö üG"ąōõļĀ$ ł Béž ļļäĆįēÜ ģÖn'żśŁ½é÷ Čääņ×õļžėł- źšČ÷#ļ ćŻóŲõčģšĶDĘö.š\!²¶ -Ų @ßž$ĻćźėĶ)!4¢ü;&ę,į)Õ  Üö Ü;Žź9źźü ęś"č$#’Ü2×ģéęņ `äś÷łŌÅ ē6ś$ļĶ+ d]¬āćėń³ö&«ńŗ’ļOׯåDåż*²õžŪ:Id’Ū3żAC8ņōęüļ1IśĶüžąÓ¶LŚž/æŠŁŪö"Ś$ ščĮČņÜ2É$Öģ"ļĢąž+)8ļ ÷ ųß6ڤ+ö朎2Śé¼ŪõßÓÕöś'×ģ¾äļÖ! Y’ō(ÕõęÆŅźč€Éæō¾ö 'uč.ŹøēĆ#¼č! )éćļ ŲŁ šß ?š2 Ūźųńā++õ,'Ł»ōåēč5%U}/ÅܕóĢåöųßĶĪŻ0%Ūß)Ļź÷Ė8ąó½.ż3Łń»¢śåńėÜéŽąŌł < ēäŹåģßś ś×ņµ‘=1 ć ü,óßß ē5'%1ź!# Į Ų$¹ŁęÖź<ČAéńW5C/ųµĀćūžŽ!&ŅAņŚž$’ .łü ū8 äüŗśåļ ÷4ż-óĪŖóšAöņć>y¼ä4ŽÓ(8ėļŁ0ŌĻMĀĀÕ-t$’;ūž”!ž%ū Ł ¼ć³“É1ēõ½šļö #6 Ūū-1ąļ1ćÉŚłß',ł@6ÜśŚŻåĀšö&Śū Ś 4$Ę#Ā€Źšä¶ņ6Ö A®üńČŽūķģ×ō$č3Ć18īöįł@ŻXć #2Öųńįīōą$äßåū"Ę/ō$Ö+ BE€Č®’Ōļżę¾åųĮę­«ŻÆØā;éö Õćß Ī ņ+Ę ļĖĒėŚ÷EŻęŻš’śGćžśŹ Ź ßļ(ĻĄ£ė /ż¼=žŠī¶2 į¹Öן 2īåé82÷ą¦É BŅYõ+ Ā <µ ×ń2’ś ņę ĻŽĖŪŠ ųįśėļÖ÷ ōJóÕåóÖ $ū÷Č(Ņ,ī HĪņ¹Géī"!÷=õ5Ō&Ćæ0žĒ@ü’ŅĻģōĻ\­Ķ1¼³·čŪ śR÷2j ļEб(ś1("ųś·öÕŌŪėčž*Ū# üł'ŅéēoĻ0Eś7ā& #&ŲöŲäA Bą½1łÉšįūęźį+öL×F«ż, 6Õū š³RÓ2ÄįB ć÷¼l üńß1ķÜģŠĆŃ,šČźų)Ō ü1īŗ!Ō@šāŃƜ½Ž(ū ńčõśÉå' ŽžÉ-žć€2ŅįŽć łŪ äŲ ź źõŠŽ÷ń õųõõ. $ģ4ėöūźŌNŠ āĒÓųųÖźö$לŁ.+(ŚüōńŽ&ōŌčž'0ŌäčFßćļöėĪŽīAĘńÜ"ŽFōēéŲ×å&ņ$,«4 śŻ€*¾ēķž"’÷ęå! ż*üÓé’bąŻŠD0.Ļ1ćśóõņņÕžžŠ±Œ:X÷Ų>īOīŚ šC ŲŻżĖä(żóšł,šŠ Üśč ż¶6ŲčłCźŽ0Ü$ņĘ% *÷P6ż³ŲŌź“Äīł߯×-  ( ’ĒŅŠ$E!Žł=ņ¾åēSėņŠ\ß2Åģŗ(iāż÷āåūņšŽę¼ņכĆķ&Åöļ&I Ū€›õß8šĆŚõRĮ :ōŲń.Š’ńųŚ-Ü'C " _ݧįŻļĆ*ÓŻ<.Ķž¾óŁ÷÷.ęć $?XAĆäńžSbōķ“*¶ŽT"RŌ;é’õÓĖ& Ž+1  ŃŌūV$(Čķū2’śųīįųŽ,õņ$/ńģüāOŁ'1ź 0 öö'į¹Ż’ϚīŁų#żģ¹1Ē*÷öīå§ūÄ"Č/ė;ó Óī" 7Äśż Źę3ē$ųLÓ 2 ńōHŠōäX4'¼Ėą#ö¦DŻāū,8ąG2ūéŖāųųüSįs#½ (€ 9!óśG½»ŅŁģ 8ųÅ)õī żśē ų³&²Śģ W ŽüŹB!óŹ#’Jčü!(÷ē0łą ų¹čź Ö+6ś+LĀ÷ų ,æDķ!DõōNŻ`U,ųŻ$'ßŪęūž0Yŗķž,#Ļ?÷-üŹ6# ł óįśĻ&M05ėóō ųäüü’%ųQó!ÖõųIŠś Ę÷?%ßł'1öŁū×µ#Ńō&ł1ūł·3ė¼ėāāFņ$18ūZÜŅēļėŪū÷!ŅĒ+äēī łŽŻķóAćą»'· śķE" 8’"€öö½šłž7Ü.ҐæļE%מĢ(õćžaōńĀõżÉ? é'ā !3Ā×ŗ ī-Ł<ōÓéĆļš$ ŽäUHŻÖ,%ÜĀĀ šų-ü3ÓIŹ]×».9’ žźū;ż/ Q«īčŲ6$ß[>ćæ%>øRŚļū¦ĮÖG1Ų ׊9Ē&ĢĶ,żó’5ėāś’ąÓÓMą ķēŃē¹0ų=)ó¶ż0öĀÅ(śŠsšÖźöŚ'LM!>2ó¾ń –źĄ  š%ÅĖćž6%÷ųśł ,5ź óų0 łžń*ōéŲ/3ūŗ.ÖUł!ė %Ėųā@ åć(¼ä#ü)ć±ņė:¬õ&Č āŠż“ĻŽž *ž5/ī+ K&Śčż/Žä,\ķ'äćŅźŚåÖ#Š ņ@žĄ&ķöżĀČ ÷hߎ"½óĖÕä' ö2÷ז*ī*Ń0/!Ūß¾ų÷-üöģŻē’,čÅēų#äččņūĮ"*, ļūā’ßū$÷÷ś $É1) ,ö O ŅgņHū>ōŽ čM6"'ÕŻĪų5ō5/0 ąń.ĢęŃ  5ź $÷ͽ±  ó&ŁņŪż1 żźŪĘ!?įÓĶśį%Č14/ >ÉśéÉĢķĮćZéŲ  źÉĮįłš,* 5\ #’Xó :ü0 ūĮźæų šćāķŻÄ,įģÉ(żüėźöńüČĮõļļÜpŃŁ2ß ķ łćā“Täął9'Čų±üśŽłā?Ę œ)?Ö5 9ńšŃĪ(Ł ·vŽÕ0žÜčč"ė2É+#š9™3+ ģÉ0ūą9ģüō/ēŪ 'Ų’żõžśžÄūÖ¾āšP»ūŲāČÅĆ&1鯫ŽØūśėßš<3ų ćKśŖ % ļē ņ)8½/ĀŻ ·"Čķ ±·ō“ õüÖ0ņ>Ņ#3^€įķ’ūĘ/ż’$’ū’ #²ŻŲĢ óäļ©īęę,7ó°Ł8ü+&ńżĢMó õŅ÷ėāĪļÄü ×ü3ū)śēŹ4ҹżøųõą4)ī2$ļĢęŌ łÄnÜÕ čćŅ%ż*ÖH Ģ&ܜĀū øK’’įöÜõäĶļį 'ķ’ośE’óĘūżēÓ97ĆĻ.å8ß ö3ם­Õūųó@ēÄęłŖčDŽżŁÓī÷ Ųźņżü?NUń)Õī \éöÕų Ü!ųžłīÉłķŅ“·äČģŌŹ śčłŌüīķ40DŲE€Ć 11»ü=ÉŁŌ1WP Ių ńöūżŃöŠõ öįžüšōēĪŪ@äéÜēģ7 ,ą;ś×ŽÓ*?#B,öäõIĖšÄüéų.ęż&iŲĒAöņ‹9õ+īģķĀ/1TśōėćĢļśÜńśæ ģĘČģŸńŻHøŪ Ōģ Ęąī¹Ņ5ĘÄĢĄēīiö׎#öā@ł%ķé1Ź$ä)ÜõŃ#ę ė(źżCų8ńÓéĘ<Ļįļćź³ÅäųķŃÖףśĶ(ęśēł ,ŅńżÅńüŲ.ųķ ¼ń0ś½æģ  FŁŽØŁĒš)Ģ !ē 4ś'÷Ć ļ*ŚŗęļžåĢęöŲ 0ŪS ŃĪų1éĶ× śŃ’“Śłüė żüIå '½źŁŅū!ļ4żóęMK$õłČńųķćŻ.€"Ü-śģ-ŁÓ“ ē/Ąčż#Ł÷ł÷ēęź ģ’Ū$ņöT×õ>+D ĢźŌØO(Ķ1Ųäėī.Ś7ų;ģŌė–ņģ7äAµü ėåż.į÷)HÉóõó,f<žćėųö)įż/ćģį»ńöū ē Õé!5č÷Ų ,ä%łéŲ'ńėŅ’óŁÕ O/ėż öf$įŠß¤'ų ļśóŽž¶#ėūVÓųō 0ó1ś­Š]2%>,)_ Ą/ŖŃ ĮļŽÜī;žÄäĆńņāļśæ 2 \ÜO °ž“$ś, é,ē)Hķā(_źåÓūš ÖĪD"ō ńļCSšī Ž_ļ’÷Pņ÷Ź“ļ,ļöĢķąčģĆŽé>ė×-ŚĮ ™ļ!4"å! ÷åūųīįü1ņ'Cóŗņą2įįńµCóōŽ&Ņł­ĪŠ» ōuņļ?ö*.žåüF"÷%8Ņ$2åõ ÖÅ$ń#üśæļG!ŽÅ4ōŌėć6ó @CÜę^Č5ßäćļ*²K""Kå'G.5ä,ų';(±ęʟĜżōųéųż¹ŻŚ(õūš ŚöĢńóžĖĻ ’ł"ā®łÄģõŠNå+ėÓŻéÜ@!$ö÷ ųLóšę ēäź/ŪÜ!·!^/äŪ* µż ūŅ€÷%±)āóŃō%ćššC7š@ńüöü1,:ėņ9ėLļ3üčņŅõėü*óēęņ·!ś8€Z2į’Ž¼öOŽZ¦ 4’ÆĻū ēśšF’²Žį¦ó-ÓQ¾/ū3ńĢĻ’ć õīĶÓ>żĆ/ /6ńßÜēėō"óSMŽ+!ęõäöŌžś A"„ł6÷#=čćŃķę ČēFŻ·ā1BĶ$Ų +Ńϲ:Ū éŪæHé ńī8šó óéĪüŅĮ!Ė„=»ŠÅņŚ0ĒčėķņĮ£ēü ü /'čc½üö,ł7<õ†Ćėōµõõķ2Ż,!ö *:×»±õß$ōSā&°¹āųī*ęõ éÜõš¤ö®š īūÖõŁāšč0ݱģś.»ūēõ $ØĒ Ņ ĪįńÉėĒ.'ŗī + ’$$N/ōż’C8üåņī ģ4 !<åćņÓÓŃ=čhč'öšÕJīšŃŗ=÷źņ7ß+ę VēFęųM ččJÄ3ļĖ:õż-ļģłÉ’žLģ ōŽ3[ Łå() Ö)ī8Öōīī!+’ńéšŌāÕĄ¤€#$ Dž:Gń3Dęå *ÖM ņųģ (ü<ķė(-÷0ŗ'7+DąężāĢźģó’Ļ#%ņé!ī"ęęŚ!9ż+ęČ'Łō (Ģņ ßķ Õ8 A< ū’å’·ä8&$C“ņ Ņ[Šžäų8÷;¹×ńĖćņ ėÕž9āÖņ"ęõāŪčŻį'ųÓ¾ *÷å,MŃ1č*7-Ē5@žį 5 łł-/Ś×å&ć÷źłÕ-?=ėGļõ@’į÷Ī’ųśŃ ēŽÖ×Ńü6ÜłąųŅæīÖÖ+$9ä÷ėDÕźäųš üQéÕōŚ+ū©’<;ņĄįĖčßīģKąL īšÓ&ō97ēļŌĆ 'ɓӚįģÅń#õśś®ŲŻõK¢ģįż1Fö_ź pį<é#ķśK&ž,źĢī­Ņ’6 ŪßāÓöZ ī)éĀ6 žī+’Śģc"ĆŲśūę@=ö3%)æ*:ōĢč#Ń£“Ńń®īåõķ; )(*Ńš 3Ņšżā4ēóžśķĮé=1ķķŅ ųįūĶķö(é0ćį$óęŪéśå å:*é ėįš£JÉŹŲ Čų !ų=ģ>ūū³Ę7$ęšż ēœ¹«ėĪ'ą/«ĶõIĮĒ=ćŅ ėßä ä &šęÕ#ߊ*:ńč Ü'¼ Ör:)ūŽD’ć ŽR 2Čš*’±ī’!RÕ!ģ0ņłI÷. ēĒČļ$§Ł$ńļąūīųāēżÜć,śļģÖāēčč.ö’’ź+óŽd÷AńąŁńķN¾0ņ’ג äū’H°1ķķū®Dä÷ŃĖTģĘ ŽšŅI»0¹ü.ńÅÕAįÓķč Cšś%Ņ÷ Š&Ģł M ćöÖóęņżļš(éü@’;$&Ū ń1ŁĮÜÆē=KīūĮśŲždR»”ń śń¾ŌÆČ-ŪÄęčĒķü泣ņāÅ#俌š":"QÉ$#:õ@‡õ.&åCįų÷łÖ9ķųå äėłóóž(ųūÕ!);õóżĘžŹōŅšÕÜ0~óŪ ūæ2›ńÓö8Ņ ’Ę * Ļ+šüOüųä ĄģŽ'å3ĻVēõķ_‚ךõü.ö÷$öżÆ*Lņ žŽ 3ųåŻ÷śÜāĶŚŗ°&÷'3šåīĻHż‘ČĮŲ üĪĢ 0Ö8:ķ릒šßó"š"äņŪźŽł&Ņć 5>#žļ÷39ū ä 0”Ņē&ņ(6ŻīĄ ßšüüÓ"óńD8:ōĀ ß’¼õõ|£Å$1×üčH ћ(Ä’ģž@üłāóC#6ęóņ>ķCļÄåżóŪ,žą ūžĪčŅćšŪõżūף¢ąģV)Ńä߀(āź Ēp€ģ7É ąē åśCŠ6ülR?/Ś åźōī.rę3 %'»åÓ¼šņNMņąś°"d} Å -źĀÖ8) ś²Ų )ד1äĢ 0ņÜĒģGĶ ŚĖ0ÖĮź ÄGįŹß4 śķ ó źĖ,#² Ä 2īÕš öę$%2āõģłü+įBX ōüŅ6ģ%ö"śŁ;-é¤žŹłķńŚ9 ķ,? ģžÉķŠSģ§&(īž¦śōģŃŻą7 Ø ’%ł ßÕīłķŁęīūĪś ķüĀņś¼,ł #ŹH©ŠžqŚ ÷õ(3ņUD&*ĮżČÜįłö3Ōņó( Ķ×2ų ć1ż4\łw6ަęĶ’ó߬ņŪī åŅ:Mkį/h 2˜.ä!åŃ’ņįįŸŽŚ¹Ņ(šŲ#ęšĻÜ?).$1ńM8J6×AćąĮöHĄŌ]āĘüüBāļ Žö°ćł+Š-ÉĆ š±žDüźJīĶŲŁßžÖżķ× ņ$üÜ*8Ä@ - 9SåEŅū!ųä2Łõö’ģ #5Č’ųŲ8y¼4ū6%OžMք$ ś„(ėįü×īĖFŅ7æß*WŽļūņ5ńųÄäé5Œółź’ —ĶøMQēß%ņ›Ōč½2@źžę+ō³NĪė łžĀķIö-!47&äDąŽĻĖ ōŠäėĘĪb) ½ćǰĢßóŻźžįŽ;Ųų<ōĘ'čūóėßĒ6BćNłīŲ÷°’öüóE£ÉD&÷óŲ-0* ūļ Ł!:āģĪ÷Ū0ų ż'<Ū.HėÄņŁ dķü64øČ)uŪņ,Łż¶*ļģÉßŲö¹ģ ÖĞéźäɘś šŪī5·–Ō2ĪŽ’;Ī@Öœ*Ļ“1-dh:rw­"=Č 49ĖW€ĒņDėµŽż 6 ż8Ņ G¼;€ē©K4ĢĢ)—27Ä*óā這™ÜéµßgļĆBŌ [ •ŗ £J/ræü€=5 B8¤ķ€ŗķŲĻŖÅĢęQ¶‘„øļ¶2Kūղéć %Ō"¬®Ž\Öµš?N;½;ć%€Ģ'ķ€M>ųņÖÜēÕņ÷Ė<~€ŽS€’ƃjžĄdŅ7?Ž€™ū‹o3Ź\š’€ų€ÖbĪ;_œü®‚˜N<ĖM€ aÅ«H øŖJ€€ĮļZģØē€t^€{ͽ]G]šē ž¾­šåŁ?€€ūšĆ 9Wū,Į €?N‘ßhØ¢Č`¤&EōKB6UĄ’$ģą/Q'T!ŃAßĪß…ęŅ.ƒ€’EՖ1Lä= éī 'yõg8m×­żä!L!äÄO6å€:&4•fł•ąŹ¾ĆcŽóõ€ē’Ę6€/쯬ƒ€óŻ[öī\ŅŹl®1ąš”éø€‚ń£ S€:K/ĒæŹg€c'7Ü€Ņ€šÜxę˜~!€č €Ź»:»˜€®ņĮąühENż.ÖJ=+›śA'ƈYż €ē ‡aÅÉŻVśų€<~,¦$ā€Ć€óP!žą€'( XÓoæUß*›Įėłgé"ʳ$-ÉJµ±€µW£ŹĻåĆDO¼ź²€k äŻõ€ '<ĆķŪ9ŠBŖ¤)Ą{Ļ€¬€®ęśiÓA€‡×ĬüN?󆬀ø€čwģĘŻšAØR2а€ ®Ś€žWW€€(„ €€Ż™ĮęCų#DMM)óSJ¤(Ż&ŌĻp¹Š#ųņ°³Ž“ÜAóՐž€7€S”Šl9#Ā€öO€ę€ņ€… 8ó€Rb®*®zS>ŠĀńĖр€æĢŠF€ ĄĄ)&ĢMĀĪ倀żzŠŽÜij€逺€üż€°p€ŸLqDæpˆ}uŃŚA8€‚ĢšßĻ?Ļæ€JSēż€dé"ōA\ĆŽVŌCż¦€"$Šąć.AƒhYQ⻀BHāS’˜Bo5ķ0€aŖA~W€ķšŪ6;õ€€Ųķ>7éU["Œ0’,#N¦€ųų÷Ń`¶#€÷M}K÷÷Ą÷8Œ€ž¬€€Åķ€Čрćü6€:~Dź…䏀Q2£ė€0€ŃĒ•c@€żmł €ü€ķ€ €ČX:‹“€—O€”Y6R»}+™-žļ:¼–€U“BA=€ Ó€+€/\hƘ| Äję#=£ÅØ'ŽöƟ€÷€'`ė;€x¶€Ø©’ńŁāz€žkI~2€T\>”}ÕĮbē!šbåo{€AĮĶ~€PCńXØkr?BČCM6Ļ9Öx$Rŗóć€NŠ€9a€{ SŖÜ€Ņö€£ ;ēM|°€ą+ä“€€ƒ¦„8Ū“Õ  ,D’!Q‡•Æł€ėJ€µw€€Ō _€;$ŚĀžīĻ臀€×ė ¬"ÓĀś”õ €$$€ µ2‘€¬>€śg€„逃żų&ŪĀ©€„ļ®Éäƒ*ĀŽ€%öÉŖ¢€ņƹNͶ+€h4 &Ų€öÓņō€0›ī÷6˜ ų8×Ņš€+t°XKż €2€“§e€ €PkOĄQ€DҊ€9ކĄtĒ6מ¶)“QĪN³b= €€ÜąŚŻ¼OnĮ‘81ŲĄ5¹aD€ź.€Å€¶°(­9‡@ܹzb;€€€d qBV€œŒ€įn0śO[8ÕŒ:]Rüņq$€ä€€zGų€®–«ūĀ(źAŐāĢxe5®Ļ„Ā£_€2[ ö:Ÿ2śįĖ“}GĒŲ'|_ €( DµÅķžŠAśšķl§Ć€ĻųÉŌĒ=¼€7o€)h>ĒĪKRźF€R 7Ÿ‰B09#†Øh€pÅ-6M0/ŗ_ģ·9ā>nK¦?“G}[Ż€÷€:vayÕŪūCßœlŹ Yņę)W€Ł%%äu*먓@Zp€}!¶€ö •€hń#÷»¬Ē€ PvCŽ›®ņżøķŸFģŽō+€§Śƒ¢r܀;åÉń€żd\€sīegņ€Ä( ūc*B-5Q†xž€€GĻ 6ģĀ/k쁀\{ śÓo'–!I’;ŠåŠ€l»·€ø€€Å0mž£°5÷+9æŲ*6ź䀞7Ē6€£YH]ę4¶‰9mŹZł€Ž(ø+ąśūGĆnр威 >(@:õ‹JśTWæ–ģ€{%¦@NA»üy«€,<€€¶×ŸĢ€N¼ų€å”j‡ć€€ ź²9€w(€°ž6BM€½s ™ŲQL)Ķ1}a„^Ką÷ĄOĘH€(¦€PžNø €€Ó€ā''5čł0¼Ł¾Dc~~³€Čźkƒ€KNWs€ÕźN0äū÷kžؕ†€€“ü;«€¹Ō  *Ķŗ Š-€£Y€AĖC„źÜą€šæ€ą¹:€ŹIŸ‡śÆ³€€€q'€ €B1€ųhł€€d¶RĪl€“€MŌóŽ“|ćļā“’[¦_ų86_€³P.ČĆM€/j€®€ÕÓRZõ M…Ĥ3&ņ€ą€~Ē€€ā·śPž€ämo|1€V“‘€Žę€2ĘĻĮ²³ĪLąp®QCÄńõ\æ€,=ŽÅ€˜,ĀM–ƒĻĮ=€ś›Ļ€}"˜oŌĪŽĖŪŁ ĀŁŪj€€č×2r‘²Ü*€£ŅßČ3b€€å,Ąž6# ~ęW¾$Ü÷g:ļL$ÆŁ€Æ€€gEōō‰śų‚Ŗ€Oƒ€€¦=€ ķÜJi!ŽW¹ņ€€Ūć"ōļČŻ5Ųa²•%ŗ뱓€œC倏€j¦#Aõ żĒ»€tū’¾²€G€äåB\€x ‹^€ž€€0€}£Ņū€])ŚśĮ+N„ā{¬¼~:€€’ī;ųS©X—޲MšTöĒ!›C„3S1”ŪŪ£ģI0–ž4×CŪ7¢oH S€€%€œRnĻŽ0¼¾Ö *9å€ņ1¾ €šøī/€^3¾€ā)ÜdĖ€žļEYÖI-¤€`Æāf€ųP\ŖEü€ųo€ĒėӾĀųTŃŚÅ²€­å0ž[(†ćLńhA9õLõ€ņVIHŁÓ€ZW4@cJp5®S5EŁųXų€ż€śų¼ŻŸŲEć€ė€%€I_€|Tł`÷Ņõ€d€“€ćGPn›Ļ†5•õŪŻčóĒ÷diU\ߞ'Cz'Ū”Ńū“Cr-%€R€€&րĆõd¤Eō¹A½«ż€Ķņʼn"šĒ:ß$€Lō€Ę€ŅķNbl×A`·ø€Nž‰XGčv€ŖĘ€°ē€c7 €€ź_ĢCi€§Ę”Q€÷R”<~ų«€Äóģ{9€‘7«% Ą7OpÜÜ ½Ń·p‰€61¹÷¹zŚ€€ !€€ę€ģ+AŪø† ėŽżī^Ŗ=SŃž€Ó€Ś)€hą||€¾€ś²Ń(įĮ"£€ä€W®€AA—ś’āČž€€ČĆ ­€ĪvÜ%œ~”©;ęĄ-ą±Ä–‚2Ń~ļO=G½"Ƅł ųg§ĪY·I#րšżŲ¦€ūAē  ]ä€óŒ«U(ä«ĀM¾€ā6 U”ŲGo)Ēx~;^€p€Ē³šEč` ź˜*·śŁPV]ēĒ€ĆN'#”ĆĻE1€€€tšģ„€ļ9͘«-Ča€ą€ĀIX©éÓk.ļgĻ.ż€"€Ė_īĮēא°4ɅĻzų“nėKēö'Ųō€0ę’¹«8 .6Ėf§Ć!š€›-”€Ģ¬‚™×ŒQ_Óä ģ łtŪå€'TWրHÖ%€RćšśštŅ?#Ąäąk‚ü@€˜X0°źD÷1«LœU%ü-­€£Ī(рi§L€<†,I±€•æVÉæ*s½rUŹ2Tćį”7Y*RŸaš€¢ü2ē”čöS:nŹĒ€^Ÿ¾€`7˜€ō×ó–ā§€€Ād€‰!g ¬Õ"å€40}-ŗ¾Čŗ€$€€é€?ąŌ²É–į²€€Ć¦‡iY2Ż[ś7E‡\±€Ķ€ ŹŽ•uü7Ľ€ūA€D}rn­ŗM_Œ€¬j€ö”€x[s8;×’ÓČĆ +]Ƴ€<ŻŻā€€F’Ģ}¢(ķ)v±€Ē€ńm}€€%ZæŁ`¹Óę­1«ėՃīå Ņ+ž]ŗ&€)y"÷Ÿ^2é4¾Ē€e½ČŒ€5ŃŪ®š–ŹIhـޫ¾żšóz¼ ×—ā,4żŅ·ŃP„€“/śR,&>Ų€ÅR5ąéUœŲiC€ė4 õ9¾?B\Z7õr„ĮC„÷€ØŖčł5B !€źÄ€ĮŲż©€šģ{ó€nRCœåLÅGŽB1ś€I€ę3¹€ Ó5 ",˜ŒĆŹ:ń¢½ŹćˆA[ó€ä å};I€JKfÕ„4ćū€ŌŸó>0ėc‡ü]€=ė¹µŖ€ćʀߧć(抚æ€m8źS€Ž€ī¬ßĒĘ‚Śę~Q?te—Ņ€wśĒl'؄½W‡4›Q.õ€“vFÖ8DTųköĘ8ā܀Õ€“ń~aĶn-‘{‹vÕõR€–ōĪķą~!aw€RźAˆä¼v]0ąM€€Ę%€€p]ųCļe¾XP©˜€€Ļ€„ū€/€N€eĻ€F²}€-āր >č×Ƒ‹°+® w€į€*ūEŚA^€- Ź”Ū~€ł‰®ŸÜ9šŠ ĆJ*Ž™ō8‡ŚĘ/e²éŠĻ2?„ÉsOŁׄ€ū?½m²ųķæ¶źtUćE]ÅŲÖ"€€w`ķ fI€ėw\\2”)ÄšBøf€ßś(€€:$f®¾%įūL€\~ÅÆų!W ķś»Ÿž&€§¦Š7ū[N€8Ŗy€¶xG&׀ā Ū!G& Ųą’4€€ö,ė€Ī<‘ŖD’.©€é€}s?å¦Ü€%~] ¼ €÷˜€}öæNbŹö€½!}ńĮ€e€‚~yļīČķT]‹€€@{$øb€/IĄķ®˜€’ʀ’¢ęT›€€}€÷ÖfĪ+„øš'Dė¼ū1 ļķ²ł±€Ӏ¶€|€-ūōai螀€”y§Ó-}’›hāɀ’ u€ Õ/€1€rżJ¢x¶€Ē…D€šĶ€Ē7·€F^ż­Pn‹'€K‰ €Ź:x€„F°·e Ē“D€,©«~Łą.u€y4ž9 ‡€F€ųķqņ<¢-ŃČ ¹j¤Ė€Q7œ€żŻZRŽŠI~mF€<‘Öš€€D’U;€(Ś ˜W1A€¶k“ķĀš /ąŠ€üU€dĶeA‡Y€”ræ€W‚L€Ō€ Ćķ;*€Æ{ÜÓŁ€ĆY·É;]å €Ł€ĀĮ9āŁGÕµ±O¦ē¹_€Ø€RŪ¶€H/ČA āœŌ’-U€Q™6€ž€€Ó€L |õĖ䀞$P G€H&Cļ R5ņBх†ųŒKZ{ģ<ųčlT!8(yäŌõ3“/n­EĻ€Mŀe9€eY²=€€G8–üĀĢj?<ļŽ&mg¶ õҜ‰€|3g¼=V-€ ņ€Č8Ķ€®”;RØ±Ė å€üĶ:€ē¢ś4C!Īą½ńæXŠXė¶/€ƒž1›SSķü,$%.ē€]4,ģ€h¼€_A§ ~Sƒ€“Mß­#MŲ€'RD×4Ļ€f/Ł€R%€éĖHÕŪ €&ńņ°v€Žõ\¾Ž;XģŖd€ ”¾ą¹ü%…ŒŒŻ±¤€™¤Š%€„}¼ū;j>čý< "+n(°ŖüŻ7½ņ·ņ/¦»BĪ·ģÅÉå3lÖ³Ŗ€ ƹcė5É7>€€>ū¾ÆH.H€ßk€ėģø³€€g؀€ §ÉxÉ€‚b6€“ŃT„€y9€ÓØ£Ņ €1æsö‚€€ØŅ>k-'SL*€õŃī$›{é €ņ1ąA,Ŗ€ŃŠF"+N€ķ ÷/Æ€ æ}ņń†;½õŌµŁ^€K€€‚t€€y ¼Ēę€b€8¦/€ē€š€6®Ó@ö.ŗ³~_rŖī€>PŲ?Ź^"(č€U3€ś“€¾Ź–’Ś€€®hH^¾ī…4,+i€ ļ^»#œŁ€AP‰-{€<²ė(Õģ@éå6‘€Äё-V @i–eŌPʼ…®Ü8ŖąQŌ€ś 6Cų ÓTÄ(?€ŗÖį,”]j€€d†,ĻõĄāķ6¬€ =!6{ęnØÓżw€˜%e€Ģ€öńÉb;ģĢBŽvn><Č€MCDōĮ^X޽ę¹ē&Rī÷7ī2ᐅÜŲÜöŁ‹+ŗž€®õóH€ÉÖ¦ģGfĪL"Ü~’»+7ʾ%€hņõ€¾Č€Ę)(zõ¶€oFY€Ų€€MzV€?¢€O“Z€iė’€ß[ÄL€Ÿ¶īU€Ø'U+Ē‘^€Ó>¾ Öt‡€ß€€g×€ŚŚ ó§~QxĀÉØł²ķņuó쁐!QJš€m˜#6üS€€É%€\=ś‘·şmŖI’H¹€€Ł(€HųG™ ’€5'dŗ®€€#Ā݀± ©Ķ €ŗ µe‡ŗĶ€šņÖ¾KĄ€a€£ßóVk@®ŗ‚āĮ*Óxń»KóÅ€–€ł€€‚.€ū€/D€CL=˜ĀhÓ—»õ~ė€Ņ€č?€ĶH€™|4 ÖwSĻčD«’&M¼€æP€³øķÖ{ųåRрLnX€€†N©cp«ŁĆ=R&kX€løŽ€ŸāwX”,,… Ļ䵗&qB[€¢:€ADƵ¼j7Żõže›ūķDĘvĪųCł£(DĆłgųé|CŌ“AÜt6€÷|Z@P0»“šÉ€Ū€€Ż€%tB„¦]€€dĂī耷'­€+¹Bó¶š8S€+L%»/:€->WD†ū€]“¶ -aQĶa3³%€WY€€åŪąÓŅńä"€©±ŚĢ Į™ā ė„ś€ļ^ä¼Éē'Ų~ÉŖ;ŲĮĒķĻ:ä<²Ic€B²€ąż€vŽvqånŪ€ ćļ)é…€|źņĻĄµ“ QģU¾•¼€Å Ō7ēMŗ<Ź·Į¬Zä€D€ķ€)Ź?ŅSŹn€Ńæ“x€׀8mU£ˆMÓX %€€°F’oI€ćć_ö¢egG €€ųėļkn0LĖ—^Ś- ᳂¼€ś€¤pö*EŚĒ€0“ŃČ ’ŅŅv‹€ēŌØ€Tń€€Ņ3ę éŪžĀšÓĶÅ/Ӏ€¬dp€>€féPü&,ā7Ōp²ĖÆ.L€1qšUu>U€łK šźč€}pzĮŽotXnć}„€Ü 1R€®Ž3+sg €W€ ó€Ą#€ų›†‡›€ É:ö€|Ņ7·«€ŪŌ/œāˆ€)Ē )8±]ß?)€÷b)pŅĪ6€÷÷Ķ€hµž°Ć¼?Šß—”Ąjš}eĆm€€5ģĘŻ¢A†(ėN‚–Žčļ·Ö×ÜäžaA& €怷õć_į ČĒ3r¾ŻIż€€”÷?Y€?=Ē–›ų€ŗń £Ū‚CO€ś€,£(Ķ[ŗ €~ģ,€žŖ<)U@RŪ„ŗ½€€ćUø“Ł,,œü€„Hn€x€MŁ9€€šWŹ\~€)<£NŽÓåF¬€®D<Ē€„j솀q’Żéé€ć@±Ē€vļ €Ü·Įn€× ķŽć»€ĒS‰¦Ń€€~Ŗh€Œ¾€#ą€©S€¤˜ AŻ\’{įmņFeµŪ€2†€€Ł€j€įŃČģ:„®@ Z€b’€­€RK€Dś{Ī%L€“€d‘ė€C½0'Ņ ½Ÿ+™Ŗ5€ŪČ€ķ× ŗ[Ķ€šń™€¹€Żą™ūł…- Y›ļ?€€ó\nint main(void) {\ni#if defined(LWS_WITH_SECURE_STREAMS_PROXY_API)\n return 0;\n #else\n fail\n #endif\n return 0;\n}\n" HAS_LWS_WITH_SECURE_STREAMS_PROXY_API) if (HAS_LWS_WITH_SECURE_STREAMS_PROXY_API OR LWS_WITH_SECURE_STREAMS_PROXY_API) add_compile_options(-DLWS_SS_USE_SSPC) add_executable(${SAMP}-client main-client.c avs.c) if (websockets_shared) target_link_libraries(${SAMP}-client websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP}-client websockets_shared) else() target_link_libraries(${SAMP}-client websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() endif() libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-avs/avs.c000066400000000000000000000243611476025525100307160ustar00rootroot00000000000000/* * lws-minimal-secure-streams-avs * * Written in 2019-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This sends a canned WAV and received (and discards) the mp3 response. * However it rate-limits the response reception to manage a small ringbuffer * using ss / h2 flow control apis, reflecting consumption at 64kbps and only * and 8KB buffer, indtended to model optimizing rx buffering on mp3 playback * on a constrained device. */ #include #include #include #include #if !defined(WIN32) #include #endif #include #include extern int interrupted, bad; static struct lws_ss_handle *hss_avs_event, *hss_avs_sync; static uint8_t *wav; static size_t wav_len; typedef struct ss_avs_event { struct lws_ss_handle *ss; void *opaque_data; /* ... application specific state ... */ struct lejp_ctx jctx; } ss_avs_event_t; typedef struct ss_avs_metadata { struct lws_ss_handle *ss; void *opaque_data; /* ... application specific state ... */ struct lejp_ctx jctx; size_t pos; /* * We simulate a ringbuffer that is used up by a sul at 64Kbit/sec * rate, and managed at the same rate using tx credit */ lws_sorted_usec_list_t sul; uint8_t buf[256 * 1024]; /* to test rate-limiting, set to 8 * 1024 */ int head; int tail; char filled; } ss_avs_metadata_t; static const char *metadata = "{" "\"event\": {" "\"header\": {" "\"namespace\": \"SpeechRecognizer\"," "\"name\": \"Recognize\"," "\"messageId\": \"message-123\"," "\"dialogRequestId\": \"dialog-request-321\"" "}," "\"payload\": {" "\"profile\":" "\"CLOSE_TALK\"," "\"format\":" "\"AUDIO_L16_RATE_16000_CHANNELS_1\"" "}" "}" "}"; /* * avs metadata */ static void use_buffer_50ms(lws_sorted_usec_list_t *sul) { ss_avs_metadata_t *m = lws_container_of(sul, ss_avs_metadata_t, sul); struct lws_context *context = (struct lws_context *)m->opaque_data; size_t n; int e; /* * Use up 50ms-worth (8KB / 20) == 401 bytes of buffered data */ /* remaining data in buffer */ n = ((size_t)(m->head - m->tail) % sizeof(m->buf)); lwsl_info("%s: avail %d\n", __func__, (int)n); if (n < 401) lwsl_err("%s: underrun\n", __func__); m->tail = ((size_t)m->tail + 401) % sizeof(m->buf); n = ((size_t)(m->head - m->tail) % sizeof(m->buf)); e = lws_ss_get_est_peer_tx_credit(m->ss); lwsl_info("%s: avail after: %d, curr est %d\n", __func__, (int)n, e); if (n < (sizeof(m->buf) * 2) / 3 && e < (int)(sizeof(m->buf) - 1 - n)) { lwsl_info("%s: requesting additional %d\n", __func__, (int)sizeof(m->buf) - 1 - e - (int)n); lws_ss_add_peer_tx_credit(m->ss, (int32_t)((int)sizeof(m->buf) - 1 - e - (int)n)); } lws_sul_schedule(context, 0, &m->sul, use_buffer_50ms, 50 * LWS_US_PER_MS); } static lws_ss_state_return_t ss_avs_metadata_rx(void *userobj, const uint8_t *buf, size_t len, int flags) { ss_avs_metadata_t *m = (ss_avs_metadata_t *)userobj; struct lws_context *context = (struct lws_context *)m->opaque_data; size_t n, n1; lwsl_notice("%s: rideshare %s, len %d, flags 0x%x\n", __func__, lws_ss_rideshare(m->ss), (int)len, flags); #if 0 lwsl_hexdump_warn(buf, len); #endif n = sizeof(m->buf) - ((size_t)(m->head - m->tail) % sizeof(m->buf)); lwsl_info("%s: len %d, buf h %d, t %d, space %d\n", __func__, (int)len, (int)m->head, (int)m->tail, (int)n); lws_ss_get_est_peer_tx_credit(m->ss); if (len > n) { lwsl_err("%s: bad len: len %d, n %d\n", __func__, (int)len, (int)n); assert(0); return 1; } if (m->head < m->tail) /* |****h-------t**| */ memcpy(&m->buf[m->head], buf, len); else { /* |---t*****h-----| */ n1 = sizeof(m->buf) - (size_t)m->head; if (len < n1) n1 = len; memcpy(&m->buf[m->head], buf, n1); if (n1 != len) memcpy(m->buf, buf, len - n1); } m->head = (((size_t)m->head) + len) % sizeof(m->buf); lws_sul_schedule(context, 0, &m->sul, use_buffer_50ms, 50 * LWS_US_PER_MS); return 0; } static lws_ss_state_return_t ss_avs_metadata_tx(void *userobj, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len, int *flags) { ss_avs_metadata_t *m = (ss_avs_metadata_t *)userobj; //struct lws_context *context = (struct lws_context *)m->opaque_data; size_t tot; if ((long)m->pos < 0) { *len = 0; lwsl_debug("%s: skip tx\n", __func__); return 1; } // lwsl_notice("%s: rideshare '%s'\n", __func__, lws_ss_rideshare(m->ss)); if (!strcmp(lws_ss_rideshare(m->ss), "avs_audio")) { /* audio rideshare */ if (!m->pos) *flags |= LWSSS_FLAG_SOM; if (*len > wav_len - m->pos) *len = wav_len - m->pos; memcpy(buf, wav + m->pos, *len); m->pos += *len; if (m->pos == wav_len) { *flags |= LWSSS_FLAG_EOM; lwsl_info("%s: tx done\n", __func__); m->pos = (size_t)-1l; /* ban subsequent until new stream */ } else return lws_ss_request_tx(m->ss); lwsl_hexdump_info(buf, *len); return 0; } /* metadata part */ tot = strlen(metadata); if (!m->pos) *flags |= LWSSS_FLAG_SOM; if (*len > tot - m->pos) *len = tot - m->pos; memcpy(buf, metadata + m->pos, *len); m->pos += *len; if (m->pos == tot) { *flags |= LWSSS_FLAG_EOM; m->pos = 0; /* for next time */ return lws_ss_request_tx(m->ss); } lwsl_hexdump_info(buf, *len); return 0; } static lws_ss_state_return_t ss_avs_metadata_state(void *userobj, void *sh, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { ss_avs_metadata_t *m = (ss_avs_metadata_t *)userobj; // struct lws_context *context = (struct lws_context *)m->opaque_data; lwsl_user("%s: %s, ord 0x%x\n", __func__, lws_ss_state_name((int)state), (unsigned int)ack); switch (state) { case LWSSSCS_CREATING: lwsl_user("%s: CREATING\n", __func__); m->pos = 0; return lws_ss_client_connect(m->ss); case LWSSSCS_CONNECTING: break; case LWSSSCS_CONNECTED: return lws_ss_request_tx(m->ss); case LWSSSCS_ALL_RETRIES_FAILED: /* for this demo app, we want to exit on fail to connect */ case LWSSSCS_DISCONNECTED: /* for this demo app, we want to exit after complete flow */ lws_sul_cancel(&m->sul); interrupted = 1; break; case LWSSSCS_DESTROYING: lws_sul_cancel(&m->sul); break; default: break; } return 0; } /* * avs event */ static lws_ss_state_return_t ss_avs_event_rx(void *userobj, const uint8_t *buf, size_t len, int flags) { #if !defined(LWS_WITH_NO_LOGS) ss_avs_event_t *m = (ss_avs_event_t *)userobj; // struct lws_context *context = (struct lws_context *)m->opaque_data; lwsl_notice("%s: rideshare %s, len %d, flags 0x%x\n", __func__, lws_ss_rideshare(m->ss), (int)len, flags); #endif // lwsl_hexdump_warn(buf, len); bad = 0; /* for this demo, receiving something here == success */ return 0; } static lws_ss_state_return_t ss_avs_event_tx(void *userobj, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len, int *flags) { #if !defined(LWS_WITH_NO_LOGS) ss_avs_event_t *m = (ss_avs_event_t *)userobj; lwsl_notice("%s: rideshare %s\n", __func__, lws_ss_rideshare(m->ss)); #endif return 1; /* don't transmit anything */ } static lws_ss_state_return_t ss_avs_event_state(void *userobj, void *sh, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { ss_avs_event_t *m = (ss_avs_event_t *)userobj; struct lws_context *context = (struct lws_context *)m->opaque_data; lws_ss_info_t ssi; lwsl_user("%s: %s, ord 0x%x\n", __func__, lws_ss_state_name((int)state), (unsigned int)ack); switch (state) { case LWSSSCS_CREATING: case LWSSSCS_CONNECTING: break; case LWSSSCS_CONNECTED: if (hss_avs_sync) break; lwsl_notice("%s: starting the second avs stream\n", __func__); /* * When we have established the event stream, we must POST * on another stream within 10s */ memset(&ssi, 0, sizeof(ssi)); ssi.handle_offset = offsetof(ss_avs_metadata_t, ss); ssi.opaque_user_data_offset = offsetof(ss_avs_metadata_t, opaque_data); ssi.rx = ss_avs_metadata_rx; ssi.tx = ss_avs_metadata_tx; ssi.state = ss_avs_metadata_state; ssi.user_alloc = sizeof(ss_avs_metadata_t); ssi.streamtype = "avs_metadata"; /* * We want to allow the other side to fill our buffer, but no * more. But it's a bit tricky when the payload is inside * framing like multipart MIME and contains other parts */ /* uncomment to test rate-limiting, doesn't work with AVS servers */ // ssi.manual_initial_tx_credit = // sizeof(((ss_avs_metadata_t *)0)->buf) / 2; if (lws_ss_create(context, 0, &ssi, context, &hss_avs_sync, NULL, NULL)) { lwsl_err("%s: failed to create avs metadata secstream\n", __func__); } break; case LWSSSCS_ALL_RETRIES_FAILED: /* for this demo app, we want to exit on fail to connect */ interrupted = 1; break; case LWSSSCS_DISCONNECTED: break; case LWSSSCS_DESTROYING: lwsl_notice("%s: DESTROYING\n", __func__); if (wav) { free(wav); wav = NULL; } break; default: break; } return 0; } int avs_example_start(struct lws_context *context) { lws_ss_info_t ssi; struct stat stat; int fd; if (hss_avs_event) return 0; fd = open("./year.wav", O_RDONLY); if (fd < 0) { lwsl_err("%s: failed to open wav file\n", __func__); return 1; } if (fstat(fd, &stat) < 0) { lwsl_err("%s: failed to stat wav file\n", __func__); goto bail; } wav_len = (size_t)stat.st_size; wav = malloc(wav_len); if (!wav) { lwsl_err("%s: failed to alloc wav buffer", __func__); goto bail; } if (read(fd, wav, #if defined(WIN32) (unsigned int) #endif wav_len) != (int)wav_len) { lwsl_err("%s: failed to read wav\n", __func__); goto bail; } close(fd); lwsl_user("%s: Starting AVS stream\n", __func__); /* AVS wants us to establish the long poll event stream first */ memset(&ssi, 0, sizeof(ssi)); ssi.handle_offset = offsetof(ss_avs_event_t, ss); ssi.opaque_user_data_offset = offsetof(ss_avs_event_t, opaque_data); ssi.rx = ss_avs_event_rx; ssi.tx = ss_avs_event_tx; ssi.state = ss_avs_event_state; ssi.user_alloc = sizeof(ss_avs_event_t); ssi.streamtype = "avs_event"; if (lws_ss_create(context, 0, &ssi, context, &hss_avs_event, NULL, NULL)) { lwsl_err("%s: failed to create avs event secure stream\n", __func__); free(wav); wav = NULL; return 1; } return 0; bail: close(fd); return 1; } libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-avs/main-client.c000066400000000000000000000066451476025525100323320ustar00rootroot00000000000000/* * lws-minimal-secure-streams-avs * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include #include #include extern int avs_example_start(struct lws_context *context); int interrupted, bad = 1; static lws_state_notify_link_t nl; static const char *canned_root_token_payload = "grant_type=refresh_token" "&refresh_token=Atzr|IwEBIJedGXjDqsU_vMxykqOMg" "SHfYe3CPcedueWEMWSDMaDnEmiW8RlR1Kns7Cb4B-TOSnqp7ifVsY4BMY2B8tpHfO39XP" "zfu9HapGjTR458IyHX44FE71pWJkGZ79uVBpljP4sazJuk8XS3Oe_yLnm_DIO6fU1nU3Y" "0flYmsOiOAQE_gRk_pdlmEtHnpMA-9rLw3mkY5L89Ty9kUygBsiFaYatouROhbsTn8-jW" "k1zZLUDpT6ICtBXSnrCIg0pUbZevPFhTwdXd6eX-u4rq0W-XaDvPWFO7au-iPb4Zk5eZE" "iX6sissYrtNmuEXc2uHu7MnQO1hHCaTdIO2CANVumf-PHSD8xseamyh04sLV5JgFzY45S" "KvKMajiUZuLkMokOx86rjC2Hdkx5DO7G-dbG1ufBDG-N79pFMSs7Ck5pc283IdLoJkCQc" "AGvTX8o8I29QqkcGou-9TKhOJmpX8As94T61ok0UqqEKPJ7RhfQHHYdCtsdwxgvfVr9qI" "xL_hDCcTho8opCVX-6QhJHl6SQFlTw13" "&client_id=" "amzn1.application-oa2-client.4823334c434b4190a2b5a42c07938a2d"; static int app_system_state_nf(lws_state_manager_t *mgr, lws_state_notify_link_t *link, int current, int target) { struct lws_context *context = lws_system_context_from_system_mgr(mgr); lws_system_blob_t *ab = lws_system_get_blob(context, LWS_SYSBLOB_TYPE_AUTH, 1 /* AUTH_IDX_ROOT */); size_t size; /* * For the things we care about, let's notice if we are trying to get * past them when we haven't solved them yet, and make the system * state wait while we trigger the dependent action. */ switch (target) { case LWS_SYSTATE_REGISTERED: size = lws_system_blob_get_size(ab); if (size) break; /* let's register our canned root token so auth can use it */ lws_system_blob_direct_set(ab, (const uint8_t *)canned_root_token_payload, strlen(canned_root_token_payload)); break; case LWS_SYSTATE_OPERATIONAL: if (current == LWS_SYSTATE_OPERATIONAL) avs_example_start(context); break; case LWS_SYSTATE_POLICY_INVALID: /* * This is a NOP since we used direct set... but in a real * system this could easily change to be done on the heap, then * this would be important */ lws_system_blob_destroy(lws_system_get_blob(context, LWS_SYSBLOB_TYPE_AUTH, 1 /* AUTH_IDX_ROOT */)); break; } return 0; } static void sigint_handler(int sig) { interrupted = 1; } static lws_state_notify_link_t * const app_notifier_list[] = { &nl, NULL }; int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; int n = 0; signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ lws_cmdline_option_handle_builtin(argc, argv, &info); lwsl_user("LWS secure streams - AVS test client [-d]\n"); info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.fd_limit_per_thread = 1 + 6 + 1; info.protocols = lws_sspc_protocols; info.port = CONTEXT_PORT_NO_LISTEN; /* integrate us with lws system state management when context created */ nl.name = "app"; nl.notify_cb = app_system_state_nf; info.register_notifier_list = app_notifier_list; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } /* the event loop */ while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); lwsl_user("Completed: %s\n", bad ? "failed" : "OK"); return bad; } libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-avs/main.c000066400000000000000000000333361476025525100310530ustar00rootroot00000000000000/* * lws-minimal-secure-streams-avs * * Written in 2019-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include #include #include extern int avs_example_start(struct lws_context *context); int interrupted, bad = 1; static lws_state_notify_link_t nl; static const char * const default_ss_policy = "{" "\"release\":" "\"01234567\"," "\"product\":" "\"myproduct\"," "\"schema-version\":" "1," // "\"via-socks5\":" "\"127.0.0.1:1080\"," "\"retry\": [" /* named backoff / retry strategies */ "{\"default\": {" "\"backoff\": [" "1000," "2000," "3000," "5000," "10000" "]," "\"conceal\":" "5," "\"jitterpc\":" "20," "\"svalidping\":" "60," "\"svalidhup\":" "64" "}}" "]," "\"certs\": [" /* named individual certificates in BASE64 DER */ "{\"digicert_global_root_g2\": \"" /* api.amazon.com 2038-01 */ "MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh" "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3" "d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH" "MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT" "MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j" "b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG" "9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI" "2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx" "1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ" "q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz" "tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ" "vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP" "BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV" "5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY" "1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4" "NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG" "Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91" "8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe" "pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl" "MrY=" "\"}," "{\"digicert_global_ca_g2\": \"" /* api.amazon.com 2028-08 */ "MIIEizCCA3OgAwIBAgIQDI7gyQ1qiRWIBAYe4kH5rzANBgkqhkiG9w0BAQsFADBh" "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3" "d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH" "MjAeFw0xMzA4MDExMjAwMDBaFw0yODA4MDExMjAwMDBaMEQxCzAJBgNVBAYTAlVT" "MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxHjAcBgNVBAMTFURpZ2lDZXJ0IEdsb2Jh" "bCBDQSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANNIfL7zBYZd" "W9UvhU5L4IatFaxhz1uvPmoKR/uadpFgC4przc/cV35gmAvkVNlW7SHMArZagV+X" "au4CLyMnuG3UsOcGAngLH1ypmTb+u6wbBfpXzYEQQGfWMItYNdSWYb7QjHqXnxr5" "IuYUL6nG6AEfq/gmD6yOTSwyOR2Bm40cZbIc22GoiS9g5+vCShjEbyrpEJIJ7RfR" "ACvmfe8EiRROM6GyD5eHn7OgzS+8LOy4g2gxPR/VSpAQGQuBldYpdlH5NnbQtwl6" "OErXb4y/E3w57bqukPyV93t4CTZedJMeJfD/1K2uaGvG/w/VNfFVbkhJ+Pi474j4" "8V4Rd6rfArMCAwEAAaOCAVowggFWMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0P" "AQH/BAQDAgGGMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29j" "c3AuZGlnaWNlcnQuY29tMHsGA1UdHwR0MHIwN6A1oDOGMWh0dHA6Ly9jcmw0LmRp" "Z2ljZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RHMi5jcmwwN6A1oDOGMWh0dHA6" "Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RHMi5jcmwwPQYD" "VR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LmRpZ2lj" "ZXJ0LmNvbS9DUFMwHQYDVR0OBBYEFCRuKy3QapJRUSVpAaqaR6aJ50AgMB8GA1Ud" "IwQYMBaAFE4iVCAYlebjbuYP+vq5Eu0GF485MA0GCSqGSIb3DQEBCwUAA4IBAQAL" "OYSR+ZfrqoGvhOlaOJL84mxZvzbIRacxAxHhBsCsMsdaVSnaT0AC9aHesO3ewPj2" "dZ12uYf+QYB6z13jAMZbAuabeGLJ3LhimnftiQjXS8X9Q9ViIyfEBFltcT8jW+rZ" "8uckJ2/0lYDblizkVIvP6hnZf1WZUXoOLRg9eFhSvGNoVwvdRLNXSmDmyHBwW4co" "atc7TlJFGa8kBpJIERqLrqwYElesA8u49L3KJg6nwd3jM+/AVTANlVlOnAM2BvjA" "jxSZnE0qnsHhfTuvcqdFuhOWKU4Z0BqYBvQ3lBetoxi6PrABDJXWKTUgNX31EGDk" "92hiHuwZ4STyhxGs6QiA" "\"}," "{\"starfield_services_root_ca\": \"" "MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx" "EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT" "HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs" "ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5" "MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD" "VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy" "ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy" "dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI" "hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p" "OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2" "8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K" "Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe" "hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk" "6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw" "DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q" "AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI" "bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB" "ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z" "qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd" "iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn" "0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN" "sSi6" "\"}," "{\"starfield_class_2_ca\": \"" "MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl" "MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp" "U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw" "NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE" "ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp" "ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3" "DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf" "8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN" "+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0" "X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa" "K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA" "1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G" "A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR" "zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0" "YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD" "bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w" "DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3" "L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D" "eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl" "xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp" "VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY" "WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=" "\"}" "]," "\"trust_stores\": [" /* named cert chains */ "{" /* chain for alexa.na.gateway.devices.a2z.com */ "\"name\": \"avs_via_starfield\"," "\"stack\": [" "\"starfield_class_2_ca\"," "\"starfield_services_root_ca\"" "]" "}," "{" /* chain for api.amazon.com */ "\"name\": \"api_amazon_com\"," "\"stack\": [" "\"digicert_global_ca_g2\"," "\"digicert_global_root_g2\"" "]" "}" "]," "\"auth\": [" /* available auth type bindings */ "{" "\"name\":" "\"lwa\"," "\"streamtype\":" "\"api_amazon_com_lwa\"," "\"blob\":" "0" "}" "]," "\"s\": [" /* the supported stream types */ "{\"api_amazon_com_lwa\": {" "\"endpoint\":" "\"api.amazon.com\"," "\"port\":" "443," "\"protocol\":" "\"h1\"," "\"http_method\":" "\"POST\"," "\"http_url\":" "\"auth/o2/token\"," "\"opportunistic\":" "true," "\"tls\":" "true," "\"h2q_oflow_txcr\":" "true," "\"http_www_form_urlencoded\":" "true," "\"http_no_content_length\":" "true," "\"retry\":" "\"default\"," "\"tls_trust_store\":" "\"api_amazon_com\"" "}}," "{\"avs_event\": {" "\"endpoint\":" "\"alexa.na.gateway.devices.a2z.com\"," "\"port\":" "443," "\"protocol\":" "\"h2\"," "\"http_method\":" "\"GET\"," "\"http_url\":" "\"v20160207/directives\"," "\"h2q_oflow_txcr\":" "true," "\"http_auth_header\":" "\"authorization:\"," "\"http_auth_preamble\":" "\"Bearer \"," "\"use_auth\":" "\"lwa\"," "\"nailed_up\":" "true," "\"long_poll\":" "true," "\"retry\":" "\"default\"," "\"tls\":" "true," "\"tls_trust_store\":" "\"avs_via_starfield\"" "}}," "{\"avs_metadata\": {" "\"endpoint\":" "\"alexa.na.gateway.devices.a2z.com\"," "\"port\":" "443," "\"protocol\":" "\"h2\"," "\"http_method\":" "\"POST\"," "\"http_url\":" "\"v20160207/events\"," "\"http_no_content_length\":" "true," "\"h2q_oflow_txcr\":" "true," "\"use_auth\":" "\"lwa\"," "\"http_auth_header\":" "\"authorization:\"," "\"http_auth_preamble\":" "\"Bearer \"," "\"http_multipart_name\":" "\"metadata\"," "\"http_mime_content_type\":" "\"application/json; charset=UTF-8\"," #if 1 "\"http_multipart_ss_in\":" "true," #endif "\"rideshare\":" "\"avs_audio\"," "\"retry\":" "\"default\"," "\"tls\":" "true," "\"tls_trust_store\":" "\"avs_via_starfield\"" "}}," "{\"avs_audio\": {" "\"endpoint\":" "\"alexa.na.gateway.devices.a2z.com\"," "\"port\":" "443," "\"protocol\":" "\"h2\"," "\"http_method\":" "\"POST\"," "\"http_url\":" "\"v20160207/events\"," "\"http_no_content_length\":" "true," "\"tls\":" "true," "\"h2q_oflow_txcr\":" "true," #if 1 "\"http_multipart_ss_in\":" "true," #endif "\"use_auth\":" "\"lwa\"," "\"http_auth_header\":" "\"authorization:\"," "\"http_auth_preamble\":" "\"Bearer \"," "\"http_multipart_name\":" "\"audio\"," "\"http_mime_content_type\":" "\"application/octet-stream\"," "\"retry\":" "\"default\"," "\"tls_trust_store\":" "\"avs_via_starfield\"" "}}" "]" "}" ; static const char *canned_root_token_payload = "grant_type=refresh_token" "&refresh_token=Atzr|IwEBIJedGXjDqsU_vMxykqOMg" "SHfYe3CPcedueWEMWSDMaDnEmiW8RlR1Kns7Cb4B-TOSnqp7ifVsY4BMY2B8tpHfO39XP" "zfu9HapGjTR458IyHX44FE71pWJkGZ79uVBpljP4sazJuk8XS3Oe_yLnm_DIO6fU1nU3Y" "0flYmsOiOAQE_gRk_pdlmEtHnpMA-9rLw3mkY5L89Ty9kUygBsiFaYatouROhbsTn8-jW" "k1zZLUDpT6ICtBXSnrCIg0pUbZevPFhTwdXd6eX-u4rq0W-XaDvPWFO7au-iPb4Zk5eZE" "iX6sissYrtNmuEXc2uHu7MnQO1hHCaTdIO2CANVumf-PHSD8xseamyh04sLV5JgFzY45S" "KvKMajiUZuLkMokOx86rjC2Hdkx5DO7G-dbG1ufBDG-N79pFMSs7Ck5pc283IdLoJkCQc" "AGvTX8o8I29QqkcGou-9TKhOJmpX8As94T61ok0UqqEKPJ7RhfQHHYdCtsdwxgvfVr9qI" "xL_hDCcTho8opCVX-6QhJHl6SQFlTw13" "&client_id=" "amzn1.application-oa2-client.4823334c434b4190a2b5a42c07938a2d"; static int app_system_state_nf(lws_state_manager_t *mgr, lws_state_notify_link_t *link, int current, int target) { struct lws_context *context = lws_system_context_from_system_mgr(mgr); lws_system_blob_t *ab = lws_system_get_blob(context, LWS_SYSBLOB_TYPE_AUTH, 1 /* AUTH_IDX_ROOT */); size_t size; /* * For the things we care about, let's notice if we are trying to get * past them when we haven't solved them yet, and make the system * state wait while we trigger the dependent action. */ switch (target) { case LWS_SYSTATE_REGISTERED: size = lws_system_blob_get_size(ab); if (size) break; /* let's register our canned root token so auth can use it */ lws_system_blob_direct_set(ab, (const uint8_t *)canned_root_token_payload, strlen(canned_root_token_payload)); break; case LWS_SYSTATE_OPERATIONAL: if (current == LWS_SYSTATE_OPERATIONAL) avs_example_start(context); break; case LWS_SYSTATE_POLICY_INVALID: /* * This is a NOP since we used direct set... but in a real * system this could easily change to be done on the heap, then * this would be important */ lws_system_blob_destroy(lws_system_get_blob(context, LWS_SYSBLOB_TYPE_AUTH, 1 /* AUTH_IDX_ROOT */)); break; } return 0; } static void sigint_handler(int sig) { interrupted = 1; } static lws_state_notify_link_t * const app_notifier_list[] = { &nl, NULL }; int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; int n = 0; signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ lws_cmdline_option_handle_builtin(argc, argv, &info); lwsl_user("LWS secure streams - AVS test [-d]\n"); info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.fd_limit_per_thread = 1 + 6 + 1; info.pss_policies_json = default_ss_policy; info.port = CONTEXT_PORT_NO_LISTEN; #if defined(LWS_SS_USE_SSPC) { const char *p; /* connect to ssproxy via UDS by default, else via * tcp connection to this port */ if ((p = lws_cmdline_option(argc, argv, "-p"))) info.ss_proxy_port = atoi(p); /* UDS "proxy.ss.lws" in abstract namespace, else this socket * path; when -p given this can specify the network interface * to bind to */ if ((p = lws_cmdline_option(argc, argv, "-i"))) info.ss_proxy_bind = p; /* if -p given, -a specifies the proxy address to connect to */ if ((p = lws_cmdline_option(argc, argv, "-a"))) info.ss_proxy_address = p; } #endif /* integrate us with lws system state management when context created */ nl.name = "app"; nl.notify_cb = app_system_state_nf; info.register_notifier_list = app_notifier_list; puts(default_ss_policy); context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } /* the event loop */ while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); lwsl_user("Completed: %s\n", bad ? "failed" : "OK"); return bad; } libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-avs/year.wav000066400000000000000000002225221476025525100314370ustar00rootroot00000000000000RIFFJ%WAVEfmt €>}data&%m’žž’’’ ’’’’’’’’’’’’’’’’’’’’’’’’’’’’’ ’ ’ ’’’’’ ’ ’’’’’’žž ’’’’’’’’’ ’ ’’’’’’’’’’’ ’ ’ ’’’’’ ’ ’’’’’’’’’’’’’’’’’’’’ ’’’%’#’)’3’.’;’*’6’5’3’5’-’3’*’.’%’&’-’0’3’)’%’"’’’’’’’’’’’’’ ’’’’’’’’’’’’’’’’’!’"’)’"’&’#’1’*’/’4’.’1’<’7’6’0’.’.’&’.’&’,’,’*’#’!’&’$’*’(’0’*’7’4’8’D’>’<’=’<’4’6’5’@’A’>’<’F’B’F’B’I’J’K’F’H’K’M’K’N’X’X’Y’O’Y’T’W’X’O’V’P’I’S’R’Q’U’K’U’P’U’L’S’Y’V’[’[’_’_’_’Y’]’V’]’Q’Y’O’V’U’R’V’]’a’f’c’a’b’Y’j’m’j’m’d’l’s’r’q’p’z’{’y’’m’x’u’r’w’l’j’j’g’o’h’o’n’u’w’u’u’r’~’t’q’|’y’…’y’x’u’’ƒ’‰’„’‘’”’›’’™’ ’š’’’Œ’ˆ’’”’”’—’™’¤’£’«’®’Ŗ’®’±’µ’±’ŗ’¾’Ź’Ć’Ē’Å’Ī’Š’Ļ’Ó’Ė’Ī’Ī’Ń’Ź’Ī’Č’Ī’Ģ’Ī’Ļ’Ļ’Õ’Ņ’Ī’Ų’Ī’Ō’Ł’Ū’Ü’ą’ß’Ł’ā’Ž’ą’Ü’ß’Ū’Ų’Ū’Ž’ß’ā’Ż’ß’ß’į’ā’×’ā’Ż’ā’į’Ł’ć’Ū’ß’Ž’ē’ā’ļ’ą’ć’į’ģ’ķ’÷’ś’ž’ž’    $# !(($"!&'!!"(#%,-/,2,32%3,/29/8215535/7==DEDD>?EDHC><;D@<7AAIGODHNQURTRWU^YaRbZie_hbknkmiuqnyr{‚…‰ˆ‘—Š‘•š›šŸš˜™“œ•“™”Œ’˜–—’••“”ž–™™”—Ž‘“”—Ÿ•›“œ—£§°¬²²­²·µ¼ĄĀŗĄĒ¼ĆĀĒæĮĮĆŹĀÓŃŅĻÓĪÖÜŪŪßŲŌÜÓŌŁŲŌŻŽįćŪßąęįįćŽįŻįŁćßēåååīķķźńāńńņōöōööż÷õōźżņż’žžłōłųńóńó÷śóöņõńłóśśü’     #%'*$ "!#!,$%$"%,#)++*.+..134/+47841-9,))28.23/135.%( ##&31175;246<76<?AB?><@II?ED@@AGGEAC>=9?FBC?88790660667CCAHNJAH=<E<=<C?A;=>;?:ALLRWQNRHLIVOJELCLJIMO[S_abfgejgkiiibd`bbd[Z^UYUVUNWOTUZRRIK@DEMEEDCE;><>@?@:ACI=EBI?ICIKQPLUQYSTXXVWW\\WZ]SSRUQLOGLIAD<@;;038@9::753-0*'*%&#*.(')+!!!#!,%&)%#%"""!+"&!#%*&(-1/3;47110&&!               žõųžööłüöüų÷ņóõüśūū      żżüūłųńóķķōēķēķęīåčīŁąÖŚĪŹÉĮü¼æ¼ŗÅ¾½¼¼¶¾½¾æ¾Ŗ¶©«­«Æ«®²±¬±±Æ®Æ°®·°ŗ···“³³Æ¬¤¦¤¢¢¦Ŗ³Ŗ¬ ¢ ¤¢¤Ÿš£”—š–•‘”–Ž–””•–˜›—––•”’Ž‹‡†ƒ€w{lsuop{vzzuu{yvusowflbhZY_WQUVUVQNMMRRQZQNRLXOQQRSPRMUPTPMNPVXTXQU\T\YTMPRMINFC<@D:?7FDA==:3-//+$ !     ’’ū’ü’’’ų’ń’ō’ń’ś’ä’ė’å’ć’Ų’Õ’Ż’Ń’Ó’Ģ’Ų’Š’Ī’Ī’Ų’Ž’Ķ’Š’Ī’Ņ’Ź’É’Č’Ē’Ź’Ē’Č’Ļ’Ä’Ī’Ć’Į’»’¹’»’¼’µ’²’¶’“’½’“’Ą’Ć’Į’Ä’¾’»’“’“’³’²’¶’­’”’”’”’¤’œ’›’š’™’“’’Š’Š’Œ’„’…’€’‰’‚’‡’‡’Œ’Œ’•’’’‘’‰’’‚’‚’€’z’y’~’s’v’r’u’|’t’p’m’l’u’u’z’w’r’o’w’u’’~’u’r’x’y’{’q’q’o’o’s’j’j’k’^’V’P’S’O’L’N’X’V’W’\’b’g’c’o’g’b’^’c’X’L’P’J’I’L’Q’L’K’O’M’J’G’K’J’H’G’E’@’D’<’<’5’.’4’(’(’(’%’!’’!’’ ’’’ ’’’’’’’’’ ’ ’ ’’’ ’’’’’’’śžśžśžōžōžķžōžųžųžķžśžńžōžéžėžćžŻžäžąžčžŻžŽž×žįžāžćžßžŪžÕžŁžŌžĻžÖžÖžŌžŅžŚžŲžßžŲžŻžßžåžÜžąžąžßžäžŲžßžŚžŁžĻžÉžĆžĘžÅžĘžĀž¾žŗžĀžøžĮžøž¾žøž“žµž±ž³ž±ž°ž¤ž°ž„ž«žØž­ž±ž©žÆž®ž°ž±ž¦ž§žŖž«ž¢ž„ž§ž£ž¦ž§ž¦ž¦ž©ž„ž«ž¢ž”žŖžžžØž”ž”ž”žžžœž’ž“ž—žž‘ž”žŽž‹ž’ž˜žŽž‘ž™ž˜ž’ž•žŽž•žŒž‘ž„ž‹ž…žƒžž‡žžˆžž„ž|ž‡žžˆž‹žž‡ž†žƒž€žžž€žyžwž{ž„ž|ž€žtžqžvžržožjžpžgžožkžmžcžjžlžgžlždžmžužqžržlžpžgžmžjžažcž\žVžQžFžLžIžSžSžPž\žRž[žUž^žMžZžTž_žXž\ž[ž]ž`žVž[žVžVž[žaž`žcžZž\žXžažYžZžUžaž_ž_žbžažažežkžnžcžhždžhžfžeždžTžTžVžYžVžWžTžYž\žQž`žZžZž\ž^ždž\žbžWžZž\žcžYžVžNž\žMžUžOžRžOžTžMžJžMžOžLžLžPžLžPžPžRžHžQžRžVžWžTžZžVž^žgžgž`žažXž^žažbžgžkžažnžjžjžjžbžožkžkžtžnžožlžpžgžqžbžmžhžežgžežgžlžkžfž_ž_ž^žjžcžižežežfžfžkžgžgžažjžYžažZždž\ž^žXž]žbžbžhždžižhžqžhžhždžež`ž[žVžTžZžVžLžFžMžTžSžXžYžXž]ž]ž_žVžQžNžSžSžSžJžLžGžFžKžMžVžMžQžLžKžLžMžQžQžWž^žZždž`žbžhž`žbž`ž\ž_ž_ždždžkžgžvžsžzžyžyžwžožlžožjžnžožlžgždžhždžižfžužsžwžxžsž{žzžž|ž‚ž€ž€žxžxž~ž}ž~ž}ž‚žxžžwžvžpžužxž{žžzž€žŒž‘žž”ž—ž›ž˜ž”žžž–ž™žœž›ž¢ž›žž”ž˜žŽžšž”ž’ž–žž˜ž•ž’ž“žœž•žœž–ž•ž˜žœž ž¢žØž„ž„žØž§ž°žÆžøžµž“ž°žøž²žµž»žæžµžæž¹ž»ž¾žĆžĆž»žÄžĒžÄžĖžĖž¾žĆžĆž½žĀž“ž¼ž¹ž»ž½ž¾žĀžÅžĆžĘžĆžĆžĢžŌžŌžŌžŲž×žŻžŌžÕžŪžŪžåžŽžÓžŚžŃžŃžĖžĢžĻžĖžŅžŠžĻžŌžÕžŪžąžąžāžéžäžāžāžąžęžćžčžÜžąžŌžÕžŲžÖžŌžŚžāžćžėžźžģžųžūžłžūžžžžžżžłžūžüžłž’’’’’’’’’’’’’’’’’’’’!’’’’’ ’’’’’’"’(’ ’"’)’(’-’$’.’(’$’,’'’)’ ’'’#’,’)’-’1’6’;’?’F’U’S’O’K’T’M’X’K’V’X’R’V’U’[’Y’U’\’_’W’^’\’e’_’^’^’c’a’i’j’i’r’h’q’k’i’l’n’j’k’w’u’r’r’s’t’u’{’}’v’s’}’~’‚’’ƒ’’†’ƒ’ƒ’’‹’…’ˆ’‰’’”’‹’‰’—’Ž’“’š’£’”’ž’˜’—’„’°’«’±’Ø’©’®’±’«’Æ’©’¹’¬’·’±’·’¹’¹’ø’Ę’Č’Ę’Ķ’Č’Ź’Č’Ķ’Š’Ķ’Ę’Ģ’Ę’Ī’Ō’×’Ų’Ū’Ž’Ü’ß’Ž’Ū’Ś’ą’Õ’Ż’Ö’Ž’Ż’Ż’į’é’č’ē’č’é’ņ’ń’ź’ė’ó’ļ’÷’ś’’’ $$('2=:IHCAFHKGJLIOMGK=ECFEHDHHQIZHZNOUJ[STQZ__`]b\gd_`elqpux~†~‹Œ‘”Ž’•““”˜”šœŸž¦„Ÿ„§¦­®¶±ø²¾Įŗ¹¾¶²±Æ·ø½¹æÄÉĆŃĻŅ×ÓŚŌŅĢĢĖĻĮĆæĄÉ¹ĄæŹŹĢĶŃÓŅŁÖęåįģēēéčäļņńņķ÷ööų’šūū üż       -'+'-/+)#+%+1-+!&$!)(++(&,',,,/7172,/,..+)+2,011;20/0(,507545B?<FACC9LOQVT][f]eba`_lg^bfnohonlnimptruqspfmjnnjggrmrvyqllgplnpoyty|}x‚…‹~ŠŠ‘‰ˆ‹ˆ}ƒ€‘“’‹‰†€…ˆ}ЋދƒŒ~…y‡€†’›’š—•›–š £§«¬±±¬“²Æ­²±°°„­§­²©·°¶±­ØŖÆµµ¶æ°·øæ·¼¹ŗ½¶Ŗ¤¦­¬®¤§©Æ®¬„±±«Ŗ¬®®®¬®¬Ø„¤Æ£­¦¦±«®«©«²£­®²¤¢ž¢¦Ŗ©­³²®·¼»Äŗµ²·µ“³°°­·¬­¶Ŗµ»³“°Æ¬°µ·»¼»½ŗø©±¬®Æ«®Ŗ””¢Ÿ£Ÿ¦«¬µ²ø²ŗøÄĄĄ½¹¼¾ŗø¹·»»“ĀøĀĆĆČÄĆĆĀĄÄ½ø¶¶³³ØÆ««°®®·°¹¾·¹²ŗøĀÉĀČĆÉĪĖĀĘƻĹÄĀŠČĖŃŹÓŅŠĢÉŹČĮĘŗĮ·¼“²Ŗ¦®”©„®©Æ±©¤Ŗ©Ø£„£”¦§³®¦¦°²®©§Ŗ¬ŖØ«Ø§£šœ›Ÿ¢šš•˜˜—–˜žŸ„𨄢¢„™£–¢—š™Ž‹‘˜’’š™›–ž›”œ™•˜››œŸ–“žŸ£œ›™¦œ¢™¦°Ė†ļ…QŹ•;œ_š_~U6×/õŪńäü ={“xėr‘p=^q}É„HjŚ“mžÓĪ,vA#’.N%ą uż£‘ŖxTr•z-$_܏GUqDCŸČ‹†ĢūÆ—cY¦Ž•,8”Ań0ļĄ‡•™®±ßށ$Ī) ep÷š»N lųQ“]pÅf‰ 芩MŖ’’Õ’ķ’­’ø’ó’Ś’~¬pŒ#-!£Gg¶č*<ą•¬”€ŒĮŹå9‘š[ųĄč4Z?IbL,< «|«³9FXnvkœ½ŒŽØqIr‡żĖķö 䳕dzTŠ’·’ ShIŲ’}’a’¾’=€’…’ż’;ŗ’&’=’U’u’BŖ’v’n’a’Ļ’ å’æ’Hśpį’Ś’">k…_8]ŽPį’’±’^ŅęĢ{š’ é’½’ž’™’ cHź’ń’móq b€‘•€Eļaż@y~•²č?.ń³ž’Yō_Ō’ˆ’~’c’’²ž„ž•žåž”’0Ü’cž6żiż;žUž ž-žķżõüżJ’fžŻüžøg.Öžbżü ü:żsžž„żżVža D>’`žÓż@ž ’Ū’-s’ŒžšżężÖżŠżRžāž3’I’Ģ’uõ»Ÿ:žĀčĻŖ”²QvV½Īe.CRć4llŬ(‹ŗ®āĢWh撝’ä’"å’Å’Ę’į’¬’u’a’H’ķžcž9žāż„żžü?ünū„śĖśĪś•ś’ś¶śŅśŽśFśśĘłāłqśÕśūĘü«żĀżRżPżż5żĆüYü`üŗüśü±żbž’ź’±L”/ĪģÜ,”KŖĘ`āś'¶ T`Ÿķśļ–Jō’²’r’Ų’QUl€½Ėצ^~Œcµ<łóX‹ć_ˆ_XWS>£§’€žŁżšż{żŽüÄū‡śnłšų1ųō÷tųćųYł>ś¢ś»ś~ś­łłųų±ųZłśIūūfū„ūūūū*ū‰ūüCż’Ś&ܰܗɒk’ Z8ƒ+x“5Eļ’A0ŠŲ²é€—Ā«#’Už‹žŚžģž©žDž&žIžńž[ż.õ¼J˜_ÜÖ;„d]'F.Ņ’Ą’™”ĮK†Z’2ž©żHżWüHū}śéł%ł`ųß÷Ŗ÷Ż÷TųųQłśWś¶łéų]ųū÷ū÷ü÷mų>łŠłśUśśŠś„ś ūmū„ūMüŸżŻ’`bį·Ŗ×’G’’8’óžćžļ‘ąų¼ēšxl4ĖN Ž2’‰ž°žüž’žBžYžŗžz’•ķõoŽü•'I’9’Å’(€ßꃞ’’’N’m’x’Õ’WŽ„ ÷žÓżĄüÕūņśDśÄłł[ųń÷Ł÷ųsųł‡ł¦ł‹łZł=łł„ųĪ÷÷źöĘ÷¼ųRł„łśFśźł.śbūeüüüøžōęÖ·K=ēž‡žĻ’‘’°żżS’Lmóö÷•Ɔ+œė”%ˆ³„”]’’æžćżLżżüü,żžD’ä{m#Ķž6’’T’@’l’E8OÄÖ’Y’ųžežžīżRžśž’A€|’(žÜü×ūŚś¾ł>ųE÷÷÷¼÷čų"ś’ś,śĒłałŖųŖ÷NöBõõsõ©ö ų=łÜłŁłåł’ł ś$śƒś.ūÓü”’:XGY}Pˆ¤’N’Nž§üČü’AĢÄ|8Å'Fdd dµX©Ø§¹’­žGżäū ü„żD’é’¹vCįŅ”†’5ž-ž0’Ž’Ź’k’ƒ’Ū’Ü’Ć’Ó’„’ńžž÷żržĖžÓž—žžŸžŖžŖžŒžNžėż7ż©ü^üģūfūīśčś"ū>ūūćūĻūUūĖś¦śsś2ś–łÜų‘ų_ųż÷ ų’ųłXłUłžłśˆśŌś ū2ūOūwū0ü‡ż’×’ō’ą’hĶ,[ µŃjAø†ķ0²Ś:pīŻłāfø’^’“’)‹p“’Œ’Ó’Xz[’’)’I’n’U’’ÄžÓž9’Ņ’M7ķ’ą’;›ÖńĻ“gJå’“’’}ž\žXžžžż/ż×ücüöūØūlūdūJū.ūūčśµś9śŚłĆł[łĻųbų4ų:ų/ųõ÷ą÷ė÷5ųfųŠųł”łķłWśęś÷ū.żŻżŻżšż¬ž”’ż’ „Y²›’3ŃC³Ō<ų-öSāHƒ… )Šõ’Ę’‹’h’u’’‰’’Éž¾žĶžūžāžŸžzž†žšž…’ą’ß’®’¹’ą’ W€U+?t~{X­’’€’1’ėž·žœžˆžKžž½żiżż“ücüżū…ū+ūūŽśkśśŌłĪł”łSł?ł!łĀų`ųEųųÓųŽųĮųŪų{łJśĒśJūLüMżœżŒż žX’č’~’i’h¦5ģaĒ$Rˆ +œCæķ@q“ćßu¹ĀŌAµ’ł’6 ’¼žĖžh’'’]ž™ž ’µ’ßžĆžŌ’xÕ’E’Ć’zI–’Ī’¾ōŽ”OŒ5ىyRÓ’ø’ę’Ļ’x’>’D’’“žžĶżyżžüqüüąūŲū’ūūŗśvś/śął†ł:łŌų‰ų ųĪ÷ł÷^ų ł¾ų»ųVł[śūĢūüü÷ż$žž^’Ŗ¤į6 V Õ1ŸOÓÓm‡ĮczA-1=–Ü>Šż’hD„’>’œ’Ä’c’i’pLĶ·ŗ’¾oRz,ØI1µ ßŖń|šĘ(˜’€’e’żžÆž‰ž*žØż#żńüĀü›ü|üüüüü˜ū{ūū"ūBś[śyśśžłµł%śAś3śtśŁś8ū™ūµūBüƒż“ž’’¼’“/éķ}°VŽsČųņ“Ć ĪŠAME™RKĘ„S |Ė9ĶŹįdŒ$ fAŌé;C+čī~ęßsįµH1!»A"#ԁr^8蒚’[’ģžž?žśż żtżNż8ż5żHżżwü@üūūxūńśņś‰śĖł2łvłbśCśµłtł€ś‡ū§ūyū<üž]’h’¹’ėéq„4ē˜õé»~,ŗ—‘Ā×­r>¶ˆ$Fs Ż©®uņŽõR¬c3Œ!F1H B¬­ö„Qā#„ZaωĮ,Ķ üLxū°8‚1’Mžaż—ż°żƒżöüŠūüŖü}üüū!ūūū»śśŃł'łśųĘų$ł-ł,łZłĀł<ū*üQüż@’AˆœOĄuĖė’‚Ł˜AžœķhšīÜmĄ1É`ĶüF\Ch„U#īM@‹–퐂4l _4„Lg =0ŽYŗ'ķ»§ibD02]&Ē’[’*’R’ņžžÉż)žūżĶü!üiü/üJūØś×śĆśÕłCł^ł”łł4łRłÜł-śFśĖś"üĻż’ 4·āK‘<Ė·ŸRøN5b2żf“„‰Ą›÷Š,ŒÅŸ¼~Üöėä)go”¶­©­³{1ßs>P7'Rq‚”Ūė¬UöžR“”’b’ņž®ž™žNžžžż>ž8žĒż¹ż¦ż:żŚü@ü—ū2ūąś>śzłTłĄłŌłøłüł˜ś?ūūūżĻž. Č0[wS Ŗ¹ĀźŒ­g¢_Vh„³”¬ÓÄ[6ÖN[ź ŪŅI&:öŌŽvĪˆ"2s*¢Ió²[;T€kaŸ æ†L’ZŽHœ›’K’’ž¼žqž(ž/žyžŽž{žCžžąż‘ż8ż«üü­ū8ū‹śśś`ś8ś.śmśū±ūdüźż¼’”L°EøE™®D¦d^žcQłL?ž:”hҳ`³Q©śŻĀ2ą!$Š?¾Ÿˆ2lÖk¦ĢHµ¹”)ÉÅłĀ„ī-å†g1”Ś_ņ(l’’ž±žWžģż§ż„żŹżäż¾ż¬żŌż”żMżżóüŽü ü•ūūŸśqś{śbśGśeś½ś)ūčūż”žģ’f9ĶłųĒĢäMV¢«ĪB£¦ē{žųIJ<I1Éžwd¼ÖµÓaŻģr%ˆuoŪ4Ż3.[»XL!ŌÓļļ®lˆ×¾"‰b 2`ą’`’}ž×żƒż?żłüµü°üŅüķü żBż`żż•üšüÆüüYūśśŲśŠśƒśkś­śĖśņśwūü=żßžõ’ƒm­£”­j°ęmˆ¬ y–ĪT­ŠŽģńęåłšołg0qŃ›-aM•A]hž|Qó_|Ævš›×Ō…Ą'ŚéĒ'}˜Ęæ’’Óž5žWżęüåü üü8üļüŚüŠüvüŚü²üüZūRū#ūDśÆłēłśśšśųł5ł_łæś½ü‹’Ŗ›{|/Nj!Eƒ֒ķ$eaYA•½ļÕYsM~ōį¬ƒŸP–Śüė[õQŅ2ų0„é÷ć»d“?ƒZ¦Ż’žģż3żńüļüIż¾ż žįż„ż ż9üYūÄś¹ś…śWś€śńśūžūügū•śŽł^ł-ł³łOśūgū_üVž*ōF" õ<d7öåš’ūžx’7+Ƭ§:ĀįVŖMńČ‹ޭŲŌ(¦’BŃNq“żƒń·]¶—ĖIĢóĮ÷r\•’ʞ׿īż_žųžŪž ’’ŻžÅż ż­ü°ū3ū„śśśÆś£ūņūÄüzżńü½ū3ūńś–łųx÷D÷*÷Jų<ł ūYü²üü-żpž‘žT’uėVĮw={Æ‘Ī’«ż¶żM’e¾’u’ų”~Ł¢Ŗ~3‘Ŗ /sļæ3p’˜žA’zxtkŸūfŠ2ćž ,Ż»-—"å<’žŅżnżżšżŗž’%’`ž+žČż żütūOūAūūūŹūŪūū¾ś†ś*ś5łųč÷÷öŲöC÷ų’ų-śūPū›ūöūźüMżŒž®«A=׋ޖ’e’žŒüż²’MæIæPŽę³!nZ‚!”ó ĪC@y’Čžo’hŅ=z2)~^?RžA$ķ6HŠō’’ ’žXżMżqż8żvżSžŻž"ž®üü2üēūQūųśčśńśæś–śyśśĖł8ł³ųēųÓų\ų„÷P÷8÷Ģö÷“÷\ųäųļłóśBūŌūżež÷ĘöF™–D’¹ž,žūüÓüˆž©œ’9ž§žB’§’ČM†Ölł±nFči Æ’č’LĖ’©žžkžŽż‡żņżŖ’h†¶Ćŗ×_Čr¤’Į’ßžž”üČū ūüzüzü’żnžüü!üÅś śqłUłółśłŁłö÷łŁ÷ų÷©÷?÷üö\ö.ö-öömöG÷÷ł{śÖśŠśüüżgōāĒC)Ł’W’ąžņż-ügüdžĖ’U’±żvü­ü¤ż6’­]Aš]’>Ŗ³}c£ģš’›žcż–ü“üéüųü¢üłükž®&0Ā,k|ż·2uP’»žSžpžIüūˆś$ūYüXżzž†ž­žžńüü—ūĢśiś„łżł,śģłpłų,÷{ö¤ö\÷¤÷o÷C÷Fö’õńō²ōvõÅõ8ö÷jłRū­ūüµü žäiōõ0e’žåžW’TżĪś|ūvž'’¹żøüØü‰żžł’ŃŠļYÕØ U ²’lžŽü’ś[śSū[żzžFž]żŃżd’É]¬¤ą+p¤’šü“ūłūÖükż+ż”üĶūū–ūęü"žŒž$ž ž]žŗžBžųüUūął"łmłŃł‡ł ųu÷÷öäö…÷ä÷f÷iöŽõöØöĪö)öĒõńõCö=÷&ł1ū üĪśēłyūŃģµ7”’ž]żD’;’’śOś“ż* ’#żOüUüüü“’Ė®BźkōV|[>ł’¶’÷’;’5żŲłÉ÷głUüz’b©’¬ż)üĻżĮõÜć²+1ęü¼śyłnśĆüמ%’»żĆū\śūUż|ž’ńdÉ’žĄśŽųkų™ł×śWūƒś±ų÷#ökö<÷ō÷ƒų‹ų“ųJų÷÷f÷±õCōéō’ö‡ųåłĘūküĻś?łƒś¼.?Ń’zo’ŠžHĻ ’Īś‚ślž«e’źż~żŠż•żē’Ö0Øz…GiR$x\¦’łž’žžżś€ųgł0ü¢ž>†ž%üöūōžįoĖŽaČĻŚ¤žIūśłś2üāżšžöżgüüjübż@’źQ=j‘’żńś+śŚśĘū+ü©ū]ś²ų÷ƒ÷ß÷Óųś˜śś"śXś_łL÷”õŒõ˜õ<ö¶÷Słołµų1ųųŗųkś:ófĆö’Įž4BĄvžqü‹žč’ˆžĢü}üŠżRž—%%Õ=H£KĘĶÖ¼žĢż!ż›üIūśśł+ū¾üž¬žEżĖū’ūpżW’ ū ć›#Ķ`’*žÕü‡üóżńžÅžCż ü¹ūŒż(k~¢~/£~MVXžSżķü€ż1žÆżüĪśŠś›ś'ūģū’ū'śNł‚ł—ł}łłoųC÷›öÜöÄ÷Rųėų\ų×÷Ž÷^ųłfśQüĒ×ó„ ’S’W’†#śŽžFüUż“žņžļž’oeęµŪæ¦*ūɬjužJżļż’=’ÜżCüĀūĘūSüįüKżĘü)ü¹ż1põ/ĪæŪ]”ŒęÉJ’ܞƞD’b’ĶžČž‡’€‰BŌppś—H1’n’P’ ’µž”żüÖūūƒū¦ūŪūmūåśŁśŗś×śųśśÜłłųLłuś˜ū¦ūū[śdłģųŽųtł5ū.żo¶ųĪ)ńż÷žĆ Öųoŗż#ž–’ŃeŽ`8œR{i«›p¼,ˆ ’_ž’Gų/Ąžpż›üjüĢüiżwżäüżužž’ōYł1.!Zr>¬š MRŚīaˆSĻ‚\ŗ€e„*"ÉyJžV—„ą’b’śžŠž*ž„żłüLüDüü¶ü—üRü¤ūūūל‡śˆś×śķśśæśū)ūŠśōłļł śnśśśüžĶĖVcĻ*ē ś­žg’„N‘p+½’Ŗķ§ghēNē~’Č÷3ä’õž¬žńž’ż’Ń’üžOžœžŠ’ė +q» ]²É°ńÉØu’ķ’P’øżL6„ĢL”®x<ń‹‚š’­žŪżmż•żSžšžšżźūūYū^ü•żž›żüÅū}ū#ünż1žžżBż¬üŸüÉüżtżžµžÉžĆż5ü=ü’žŪKtr"ó’³s4.ׁĖÜ –¹Ą\1.^Üū‚®“Œ¹7§€ Ō$2›ē­SW¶>BéŽĘ§{<\l;d¤=’ø”o†n]É’>ūä‰1ę±S{čAŒ ˆ=ĢP˜’’ž–žžž˜ž&žŲż*ž’ą’#c’’:’ī’ßqqóI÷’qˋГ„ź(^ØŌqmöŖ&ß’ė’[I3ŠŃѝ©’8yŪ'-Ł›ąCtŖÅ\źŚ \ƒ„Ć‘ćy‚šŸw61X\DQŠžury‚Œ›”™˜|s@,+3M_kRGY|„}”½o[L<$ äµīRQc+P'>“1 Ćœ`F]f†9&ø“œ æĀāĘę·Ķä 8 ķŖsJ/.%įÖļńłś!8^~—· “²ŌÖČÆ„šŽž°Å­¦²Ū%=Pl“¦Ē“¹»é"ģÅ¢­ĶźŪŗ”Ž™°©“‰Ž¶×ņēÄ–‡‰”„{Q)łŽŹČŁū)7:;Pi‰š›ƒkSVTI6&ųų5P`v–—£«¤›¦®³Š`- żö ūźŠĒŹ×ėķķåŲŻÜÅ­ŠlTBPCFGa`z‚”³Ęė /896QSfjnqyˆž¶ÅøŅäūžõčŁ×ŁĖ“—~rqnssktŖ¶¬•ƒs~}w`I3'"+)18KVaqw‰©®™rXA@6ūģŅČÉĄĶĢäéęŌÖŻā÷śõå׿ŗ°¾°¦”œŽ…{vdgjˆ«ÅÉÉ““Ęā #/8@85-&'1BDLG;<8=C?;72231/! ūźāßߎŁŃĪÅĀĄÕŠÓĘĻŅŁāėóņåÜÜŲŁČĻÅČĒæ“Ŗ¤§­ŗ¹«—€ttfW= śüūöėåéóėŽĶÖŌģóśńčł 'DY_`jov~€’¤¶¾ĶĶ»®““ĢĶÖÉ»®Ÿœ˜–œ–Š{mdaZclodhZmq\h]Q=B;8#  #3*26ELU\aSFM;7&ļįĶĶ·µø³©žœ“ƒ‡‘œ˜€jnuŠ•œ‘™š¢„²½Ķįąéä÷'    ūöķķéąŁŪŚÜŠĢĻŹĀ³¤’Œƒ~~mSL7EJ[ec_^p›Ŗ·ĮĆĀŗ½ĄĀĪŃĢŗ®”“‡††~wzfnnedJE5* š’Ż’É’“’²’µ’¼’Č’Ä’É’Ą’½’æ’Ä’Ų’ē’ž’  !#!,;FIPSX^en~pi``VM=. ų’ū’ż’ó’ģ’é’Ž’Ż’ć’Ż’Ś’å’Ž’Ž’Ī’Ķ’µ’§’ž’š’›’Ž’›’§’°’»’Ē’Ń’Ē’Č’Ķ’Ģ’Ó’Ī’Ó’Ķ’Į’¶’ø’»’Į’Ø’’‡’Ž’™’˜’©’§’„’£’©’§’«’Ø’Ÿ’’‰’‹’’Ž’‘’…’w’j’q’k’z’}’†’ˆ’Š’Œ’’‰’’‹’’’„’ˆ’r’p’d’e’Z’b’g’h’a’S’Q’A’K’G’M’N’S’O’I’I’A’<’7’6’7’1’5’1’*’#’(’.’,’0’5’.’2’-’7’5’@’2’-’$’&’%’"’'’'’’'’’!’’’-’)’0’4’.’3’&’,’&’’’ ’’’’’’’žžžłžžžõžńžōžłž’žž’żž’žüžöžīžåžŁžÖžŲžĪžČžČž»ž½žÅžĒžĻžĻžŲžįžęžźžśžüžüž’ūž’ūž’ūžģžóžåžŽžŻžąžŻžŪžŻžäž×žÜžŃžĪžŃžŠžŌžĢžŪžŹžŠžĘžÉžĢžÅžĄž¼žæž°ž³ž¬žÆž­žØž©žŖž¦ž›ž—ž•ž’ž“ž™ž”žŠž…ž‡ž…ž†ž…ž|žž|žvžužkžsžrž}žžwžižhž^žWžXžZž`ž^žYžXžYžXž[ž_ž^ž^žcžcž[ž^žZžUžHžLžPžMžLžLžIžHžDžJžIžMžSžRžTžOžPžMžNžGžMžCžEžEžHžCž@ž7ž3ž0ž6ž4ž4ž3ž3ž2ž-ž<ž5ž9ž4ž+ž1ž*ž+ž&ž0ž.ž0ž0ž4ž;ž2ž9ž8ž:ž1ž=ž8žAž7žDž9žEž=ž7ž<ž+ž-ž*ž3ž2ž1ž$ž#žžžžžžžž ž ž žžžžž ž žžžžžśżņżźżäżķżćżāżążężčżģżčżóżųżžžžžžžžžžžżżöżģżįż×żŁżÓżÕżŲżŲżÜżążŁżŽżÜżążēżķżņżņżóżóżńżķżōżéżężŁżÜżŅżÖżÕż×żÜż×żįżŃżĪżŃżĶżŃżŃżÓżĪżĖżĻżŠżŚżĻżÜżŃżŃżÉżÖżŌżŲżŌżÕżÕżĻżÓżĖżÉżĢżĆżĢżĶżÉżÓżĒż¼żæżĄż¾żĒżĒżĖżÉż¾żČżÅżĘżÅżĘżĘżĆż¹ż±ż«ż”ż§żœż¢ż•ż˜ż’ż‹ż“żżœż£ż®żÆż®ż¶ż¼żĀżČżÄżĄżĀżÄż»żĮż·żŗż¶ż½ż½żĄż»ż·żŗż¾żĄżĶżĒżĖżĢżŅżŅżŪżŻżįżążŪżŌżŠżŠżŅżÓżÓżÕżĪżŠżÕżÖżŌżŽżŁżŻżÓż×żĻżĻżŹżŁżŽż×żŻżŲżĻżĻżÄżČżĒżÉżČżÉżÉżŠżČżÉżĘżČżĀżĖżÄżŃżĀżŠżÅżŃżŹżÕżŻżŁż×żÓżŃżĖżŹżŃżĶżŠżĻżÕżŲżÜżŃżŌżÖżŪżŻżÜżåżŻżčżążēżėżīżšżężåżŻż×żŲżŁżŲżŅżŚżŽżÖżŚżćżįżźżążéżēżóżśżōżōżšżōżņżõżöżšżżż÷żżżłżžžžžžž žžžžžžžž ž žžžžžśżžõżśżżżłżśżūżžūżžżšż÷żóż÷żüżöżöżóż÷żōżńżķżšżēżėżķżåżćżčżźżļżżż’żžž žžžžžžžž&ž"ž"žžžžžžžžžžžžžžž ž ž&žž$ž#žžžžž)ž*ž'ž,ž)ž,ž(ž0ž4ž5ž<žAž=žIžHžHžGžIžNžJžKžPžOžQžOž^žPžPžOžMžCžOžGžJžKžJžGžGžVžWžMžMžGžFžJž@žDž?žEž?žDžFžEžFžHžNžKžSžNžOžMžPžMžQžLžRžRžNžQžVž]ž]žjžožnžižužnžsžwžsžožsžsžsžržqžnžržlžyžuž€ž…žˆž‰žžŒžž–ž•ž™ž“ž”žžŠž…ž†žƒž‰ž€ž†ž‰žŽž˜ž–ž™ž ž žØž©ž£ž”žØž§žŖž¢ž ž¤ž„ž¬ž¦ž­ž®žØž«ž±ž¼ž¾žĖžĖžĒžĪžĢžĮžĢžĖžÕžÓžŃžŽž×žąžŚžąžŁžŲžŁžŽžŁžŁžÕžŚžŚžŻžęžēžéžšžōžųžīž÷žüž’śž÷ž’üžżžóžļžōžšžóžļž’ūž’’’’’ ’’ ’’’’’’’’’%’!’-’/’3’4’-’6’9’E’A’L’N’M’J’J’F’H’E’H’J’K’K’M’P’]’]’]’Z’V’S’F’S’N’Q’T’R’[’T’V’U’W’R’V’U’X’g’\’d’b’e’b’W’_’a’e’g’f’i’r’r’n’o’j’l’y’s’y’v’t’}’y’ƒ’…’Š’’Ž’”’Ž’Š’—’•’~’Ÿ’Ć’«’’Œ’›’y’‰’½’®’­’«’Ō’Ē’±’¹’“’¾’Æ’¾’Č’É’»’®’æ’¶’¶’ø’Ć’Ų’Š’Ģ’Ź’Õ’Ś’Ė’Ź’Ä’Ö’×’Ņ’Ō’×’ä’Ī’Ū’į’ć’Ž’ķ’ö’ų’ō’ū’õ’ū’ū’##%",(&)%*'-+')1*448353.7<=<=>F<@@ECL>Q?Q9K9H7T9BKYZZoRz< %ī’Ībo¬ž¦Aµu±hV¾€˜‰ØØŸr®q½ŽĒ•“ø—±Ā|øŃ„­¹¬‡Ó›Ż‡J+ś_œj7EÕAUžžü’IśÜ"6!-#=&Cްó$‹¾ŗ’䃒Q £zFĒŪt6€fg OĮĆŕó ŹM..²<qø„ķHwt<8°LÜß‘ŸĮb7 ßē1+OI=<ė’!<>Ļ+użų-0Mˆbmx‚-GN3x1h\d®”„sO@.h(l¢ķM0˜ a;ƒ¬8Ļōæ\#i…é•~vc›v”jϕު‘œq]©tæ˜_Å™¼Äa ¶Ē4ć‹ßÄ4Mpßæ¬³M7\—²š ’u Ęŗ;&š’ƒßž=sq›’Ŗė:żž>lż"ׄ’w·Åq’>S”’ĪžEZ’…“0’æ„Ģ’Nń—žĪČž˜üĢAtö’E#y=Ąé­’QĮź#=üų‹¤Ö½’ÉŽž÷ Ö’h’ŗ‹č’‹A’kŚX›˜Ī1¾¶’ČĮx(?:ÄČ„õ’­| ¤ Ǝ’ęO’w’f“ ]ÄäžJUżō4įū·ž®ėayY=f咜EN®ņiŸożiØx’^³U”-9ž0ZÄ›üµ`¶žĄ"‡ż8m’ ½F(ł& WĀVĪ’’ū§€ž÷C×$:«·ūt–0GbXŒž`Ŗ”ūhco[ūŸĒÓūbl(łčéž8š[’ÆĪrU’BŻgå’lĪüæK”,ńü3Vü•v*?ūl’ėśÆyEŽż/Yb/¦ż¹NōTŸÖ žČķĮķŠžŠN’ōŁžRüö†J2ß’ Vżx"žįŁż`ū5ēpÉüōŚv’鞢x ׳#óqžązū­’šÜžŻų«OżķR üC )žŲ’$G09ū) źüLņżģ0żģżżŌHżG’ žüOŽēž’6żŚ’ŠŌÆūK śū}’²q›mū±Ź’ØWMFśŌ ńūė‘]ż‡óüv‡Ō’’%­žRœü’Ėü ®ž8’b[’U£žż³ƒW’}õŁBŖÖž[į?ż]Ņ.ū·Ęž ż( –ū*„¤ūž?˜ž†’.¾øųÓō¬ü‰¹’gŒżażśż‹j’°a’ü_é}žÖ@ū@cŌżjĖżģ4šüŁ1śa]D>ž$ü‘ &žEżhĢĻž üS .ś2żˆ ńüģū'ž ±ų;fqüū¼’öżlh„üĢķŅü7’Ń żś üIPžųzlłüūtÕØś?GośÖ®ž=HśĒ½ż ’ż?ljśčܘłžl—)ū³•’ÕžĪśæˆśŗÄū• „ōn^lż8ž Üž’‚g‹ł ųśŻGż ‡öE¤Åęöš °ż¢śŸżcb“<žėāž2ĮUĄż3ėUž­ūWŻZöČ@r÷ĢEū“ĄPż-Čü-@¾żÄśL¤žū’˜žaƒ’©ł'ÉZų–ūq”’žyqżāųšQ{ź’įžxPüŽĪ’†žžTq4öõšżŚžūūź…ļķųÄŖž9ūłÓž,ż2žŪžÆž£hżŸüo½¤’(ż®×ü° Ęų‚āœ÷Ģ[žü¦,Y…žvŁż—”žčéüĖžkžsœū—@Ńūr’˜ž¹*{ž˜ś" ÷_Ė“‚’ż1¾łżŽžĶÄłµĄž;Éś'Rū&<ßō „4żżžū‘D“ö,ÅL^ūŁ<˜’Oų« č’UżµüCŲżC[ž¹żIųśīū4žI:ž_]’ž†Ųų1˜!ūņ,’Š’ż\Ūž]ś>’’aü ćÕ‰ūW¾üž’G„śp_ż•{žż§ūiž-žżžīų ’€šēś¤ żÅ<łM’’ęcüŁ÷'[±žØśrž’ųžVś“½Æśļū{ †śüū}„õ ]üśõžiNūpł†v’üółÄ’øAū H?õq<’‰łć+’VžŸ„śl’l<žļś»r;’œś¦ XżWžvż<|üĻ’ žmä`śĢgü@…‘łĄ­’‰ų#žŪEž°ūy»’æuö‹$łāĄü½ū郞–ü°’Qž{Øü§rūsz’×’„üĶ’9ž>ł‚ śsųŌü„’łū0”ś„čPśó+uż’įžTūk’S’±:žĻü©õö/Jdś\żü#’§ūĶžļł<÷rīDū“ś“ž‰ü˜~ūVŗüdżŚ łµšż*łłĮ’ū’+śįVżG’ł~üŽü„źąõČń…ü¢ūõ“łĶ’č’꿊›ųt’ ü1˜ū&1ū”ū_’’-ūAČ’ˆŚż°ł!œž|ž’żōžŽ’ūżü½’¢ūŹž—üŌž8śŪūģżÖł©ž!æžāųxń”żżóžJbżQžŌž ’bGüī’Ö’JžīūĶżćž“žŸżžššżƒżśX¾śžü;žą‹’ś.¹žwÉśńüJŽńü#łŻ żś’’ž‰ž8„ü’a’yü3żĖ’÷^\ł”§ūŹü”1žŸł³’ĖłJżīüųū÷żd’ß!ū†ūE’Ģ̚ł„üJq£ų9ž›5’ałpPżmż~żmžiż>Żł„`ž¢żŗś×żaūu’a’źž§ü2 ūø’‹’\ųöŽįż=ūæżŠ’śtż²žL’G$üĶü’uīż³ü7žŻ0žŗūØ’¦ž^’Ržrż<žīŁżqūšžÓ–žcū}ž„žsżéüÕ’‡ńųīałüŖżŁż°»żŚüˆ’—ż$ž5’žĮż”’Š’ōü ż:’P’„üŗžpž’į’dżĘü³”ūźżŽžė’ŖžBżfž(ž’’ żWžJ’ÆżŹük’µ’fž‚żéżžó’Ež@üÓ’ē’Ąż8ü“žŹž9‹żTż’ĻžfžĢüÖž„žŒ’Ęü3żu’e’°ż‰ž/rżĪżÄżsžyžC’6ž¼ż%žu’ųžYż ’’˜żžēž[žFž‹ž/’ž_’Ōżbž ’qžc’Lż„żóž%’ģżž¾żB’(’-żęż€’N’Ūüużi’K’_žÉżüż ’ŁžĮżŒž5}žĀüSž0žŖžcž4žėžÓžSžĮżl’=’Źż’¹’’Kž€’śžež¹žŲžW’žhžńżc’U’€żźżäžjžĖżśü»žżž—żķüdž—’ęügżhž”žž]žPž3žy’­ž‚üEž·’œžÉżėż-’óž0ž­žX’m’x’ž†ż¾’s’ž5ž|’ī’~ž’„’;’2’]’›ždž‚ž„žÅžåż¹ž’āž>žž ’žżž£žśżvž¬žŲż4ž¢žžlżÜż5žż“żxž½ż[žcžŠżžśż"ž1ž^žJž$ž©żž„ž žžžžŽžBžžŠž’ž:žšżVžŪž¦žPžųžZ’’·žDž”’8’”žjžK’Ÿ’!’P’m’„’«’A’’Ļ’Y£’„’{¼4?Ī÷²ćę: N§¹9ģL:`iu’.’’Żž.žŠž¬žožHžČż²żŸż9żæüaü‡üŁūüüŌūüŠüü’ś0ūŁūīśŌśéūŌūįś_ūÖū”ūĢūqūŅū.ūŽūkūöūcü4üšū©ū8ūKū±ū`ūūĒś2ū7ūūlū¬ż³ž-’i–č«7|¬ž½FDśhŗä š"o54šĀk#Öš„(,ÉĄ”~t¹”~EJ`ƼÉ;xØ £¬Ī¶_\!Ą\”$SŚč䣒’;’Ŗžįż ż•ü•ü¼üėüż9üēū-üüxūūUūīśŁłŲłāśūś·łDśVś„ł?łĆł(łdųčųŃłś¶łŖłÆłołØłĮłńł“śkūŚū^üĶż’’Œż¼wą£*sāpšc&÷’o_™ę±Ø?..5÷iiyhž\©™ē·kƒé’„’ĆsŻI”ķŌåē0ĢĒDŽß”O9ĖŸœ‹ć€‚ś—\)ȲõėžcO²’6’“žžŃż;ž+žTżü‘ūū1ū ūŻū0üüķū.ü-ü,ūŽłkųČų<łł±ł€śeśTłł‡łéłäł,łöųčųńų>ų‘ų™ś üóż_’óØVłĢ™/ ŻŲķ6ØÓy·÷“žm’ž“swŻŚ•&,äF[ų®h ¼’>’ƒ’Ū’g’ž’¹ÅqS„Š}ĻĢr™ŒŅ•z*,*Ē’uĀBĢsĶmu·#%ž•¤–]4X¹$Ž|¦“’V’’®’M’ęž9ž§ü\üŅüńüŠü2żŌżżvż­ż^ż]üTū¢śWśścś śśöś~ū§śkśŖśćśeś·ł/śˆśłųŁ÷łū<ūēūŹżę’Š.¦öXµķIĄœØ6)Õżµ¹HAķKśĮ“łjČ­…TāģB†>L¶k“H<+ßū”śÓ ĀŹ ¬õÕׄ—ź@šĖkj‰fŽÜĆÓ0GHÄŒs<ożĒż©V‰…¶B<’A’a’U’K’’’ž žNż[żÓżĘżŠż&žŻżżöżµž+žüüZü»ū¶ś1śƒśūsśŁłś&ś•łćłķś ūśmłūł?śśJłłµłśŅślū˜ż‰u©0ćkŚÄ“Ó°)—N\ĶŌ2"FZe¬ėlą’ņLµ`Óģ`RjU9 É’#}ß>³Ü•L›#øˆwól-e‡˜ĒĶĖ4-ü*MœY¹o¼ČĄöųą.į`3ē™8kiÉ7·s›—Nč’j’Ūžāž ’ ’Ķž‰ž;žżż'ž|ž™žśż]żųüvü™ūäśõśūuś¶łŲłŒśś¼łķłlśfś5śQś~śæś÷łŽų³ųßłyśÜś²ūeż=rÓ#‹&-²k®ĆÅ÷EŌu×&“ogɬõŅ‹|–©+ņ“sŒH0Į£r\å’·’ü’”˜`ßܳƒ©$kD®’Üėßi›2ę<Ä¾Ėœ5ņr6q/ę“ŃÓVŲĀTŁ*p\ĖõŒ/"«Ś’Z’,’’H’@’(’V’ž’’~žŲż żoühüóüĻü¢ünüźūxūÆūźūPūöś ūū¶śūüūūNūūū˜ś śåłKś$ūēū%üäü[ž\’2iŻ!f”>ˆFg “¼$¢’\EÉė!{&6CāŻć[xŃγuĄpŽń8Č{Oć’ ’“’*ćvvt=6i<éց?ĘŌ¬ŅĆžޚŖŃś¾‚Ī7NvöÜYIŹ7ŠAb˜99øD«4„’A’P’ž’œ’y’k’^’’“žnžž„żĆżžćżųüEü’ūsś°łėłKśļł0śfūéūTūWūÓū*ū*śŠśjūūPūYūūÅū_üż'ż“ż‹žn‹@y×h&&H_UŻ"Ū^čH¾Š(Ņ€ Ų1æG¤Ļ<ö= kkwŻ’iqóćCķž‘ą5ÓXéQ”“ĮK3‰ińX¤YØ|_t±üŒĻū]v[,:מ•Ł÷ԘCŪ’€’ƒ’Ļ’ņ’ą’o’’’ž4’’wž†żĻüŠüŒü–ü~ünüüqū“ś“ś4ūSūåśaś[ś‹śłś“ūyü°ü{üüVūŹś2ūoū(ū\ūNüœüßūü\żž~ž.Ē7Lc› ,ä×[–%g€Bs§¼Xõż¶ĮĖČsŽ= Õ”&“ß Ć’×’½’’Ą’<{„-&3‰“)žśŁÜ—ćåü ŅČ_0O“ÕpJ“Oœaī›JćPMŲ7ÉfÄģ?g¶ ?æ’1’·žƒžžėž’’”žFž5žž}żżżĀü<üüsüYü»ū+ūŃś±ś†ś½ś¾śśbł{łś“śÖūĖü€ü;ūźś|ūūūźū’ū#ūĖśŃśGūhüfż‘ż×ż`’¼:“'`]śĶķwĆ’Ŗ“ÉĪ#&aą¹šģ6Ągķ9wX¼Ć3:bĄ’n’~’z’c’f’€’Ż’NŁUhųcp¬Ö<€‘ꔁْ÷’Å’~’ó’Ó4óæ“Ēžž^ą%B‡«hś’\”¹xīĮQ ž’Ā’b’5’’ūžF’U’Šž$žžEžUžRžž”żąüœü ü‰ūżśś(śģł‚śPūØūSūČśśDłłĢłrśū\ūtūPūwūāūČūOūūõś•śmśšśĄūnüŁüęüAżµžČ …@½°T½Ķ²#_T*ęŗ­ ß¹!"8ØĆ*…  —e£!^’ĘžØžéžóžĀžėžL’£’ķ’I›fõ’£’ ’Ę’8ĘVÖ±ĻAD7ū’S¦š—¼ "ެ¦%fyp6ב²Ćmół€Õ’T’’øž©ž£ž¤žšž‘žž˜żvżwżżŠü3ü8ü©ü¶ü[üĪūHūŸśLśZś’śMśołgų)ųłąłIś@śśŁłŖłś/ūęū†ū@ś łÕų3ł@śĻūūü<żģü¾ü9ż,ž'’ä’WלĪ넾ąÓ;ŗŌĢļGž“Æ”|ī’&xL¢źaš‰Ž°’s’P’’Ķžvž8žžgž’°’ž’æ’‚’«’÷’K7\ņäI9&”’ ’E’Š’-€·ĢóN9<pMLĖ=N Ø7Ņ‘: Ō’å’撃’’wž×żcżpż¦żżMż~ż­ż@żŁü¢ü@üØūūŌś¢śĻś4ūkū#ūŠśDś¼łŒų÷÷‚ųXłŻłrś0ū…ū-ūūģś¬śÖś£śIśśČś~ūGūūü‹żhż"ż×żJ’eĀdŚ˜²×ŁehĻų™_¬ä¬pß•ź+ö –]žZå’ŗ’œ’’žVž;žž"ž0žWžužņž‘’FOV#ę’²’Ē’}OY/Ņ Œ’—’Ž’IÜh—¢¶·•‘ƒ¬cŠdōgė’õ’’’¤žEžåż™ż…żqżHż6ż$żńü§ügüü‰ūŚśzś[ś¢ś#ū‰ū}ūżśśś—ł,łł½ųgųÓųīł…ś»śūYūūĒśŠśū-ū…ūiū ū˜ūČüž«ž’±’v5§źe€²Óęę~į’Ö—Ļ=PõŽh®’:ä•7屐\¾ć’É’’’Įžž¢žæžĘžńž(’q’’Ģ’SßĖPż’Ń’Ž’l’Ÿ’š’ˆ<‚7Ī7¬’­’ł’_ŅHŹÜžA/=T†Å@1Æ £Vś’Č’,ņ’µ’h’󞍞ž ż‡żŖżĪżŲżīżäż–żż•üAüģūūSū#ū ūūÕś}ś9ś0ś;śVśŪśhū“ūCūūūŪśäś'ū\ūŃūgüż]żfżwż>żīüėüżlżĆż8žŪžK’¹’ż’Wс Gķ4Ū„¢Ąõ30#ę®|b”ķßdķ¦g#Ź’š’Š’l’>’žžŅžĪžŚžõža’ą’ ī’š’*_!‘nāAĀdUœĶ {ää  į_„Ö©IŃg”1¾’p’h’s’’t’V’;’õž™žDžž*žžŅż¼żĄżŒżżiüŪūoūcū~ūŠū3üpü(ü—ūūÅślśXśŒśłś7ūmū·ūFü¶üŽüŃü×ü·ü‚ü\ü›ü*ż”żž<žwžƒžŽžvž|žŠžĖžłž%’m’ė’fĘū"‰2³ŹŻöÉLŪ‰Q_šž«½ø“¾×āĢžkrlFų~$ä’Ø’o’:’[’Å’ų’-£ź•ŽÜ/˜Æ«u)éēC› / łęŪęõŃ•HČZŁ’_’i’Ć’5†«–l’»žEž7žIžQž]žkžCžŌż_żżĻü°ü¾üķü5żvżlżNżżÄüwüOüCümü¹üżSż}żƒżcż?ż0ż"żKżżśżDž‚žŽž(’Q’d’N’Z’G’7’K’›’į’Dq“Ł<Mm…ƒ}`eMH;ŲĶĻŠĘŲξŖ®ž«µĀĘŲżŻŹ»¢˜¦æÜü/^UQl’­ÅŲćŁŃĮÉģ%-5=(śÕ®— ø»øU’®x_bf’Ļ ×oŚ’V’’%’h’Ÿ’±’”’T’ ’ŗždž,žžūżž:žyžŗžĘž£žVžžņżóżšżžżž$ž*ž4ž5ž žžģżž3ž…žĒžŽžÓžŖžož_ž†žæž’_’£’ć’AV> 1X‡»ŃĮ·¶Ņęü@H;/÷šōHo~O£G9f˜Éėņ·q8į’Ü’m¬ćßĮ™c?3^–³ŅöīŠŖ±ÜV‚™°Ŗ—ŽdZp ŁčŲ²”zmpqf`B)ņƧŖ¼Ģ©r0ū’Ź’©’®’±’­’ƒ’Z’G’1’#’’čžćžŻžŻž×žĀžĢžæž«žŒžŸžŪž’’$’’’’’’B’h’…’’µ’ķ’ä’Ņ’į’ķ’õ’W‘¤¦±ŗęåĢ±Ø­ÅŌŚ’õģįŚ×¤hCN…æŁįēÕØ}^T?44Rn‚s“’’’’Ū’?•ŅäɓxZč’Ś’ OÆØ¤_jt“æVq7śē÷ķ=LNn‚}OźźR€—m+öŁŁŃ¾µ··šał’’’  !5 Ü’³’­’™’‰’‚’’¬’¹’„’ ’œ’Ŗ’“’x’m’Š’¶’¹’½’Ń’$E7,Qjo…¦ĀоĆāõļóī óēĖąįēė*+(ż¢kVkfy ¶§uetyP+ +4U†t‚x\+ü’4m”£„}mXK^|Ó'o–ž€4ō¶›ÆĢŚ:Y]aSRE?074ķŽćÜąÕ¾Ø™˜yQ?A0 Vg:#, #ż’ī’ģ’Ń’¼’’’’£’Ō’ņ’6©Ž|eX#:g˜Ććüɑƒˆ«Ż)A%łÄ”›¬“Ņ.5 ūКœš¤¦¶Õķž’Ś¢e> L}˜·Ģ×ĪØvK5@SdĘÕĀĄĆ“{BT|®ńTqiM$÷Į‰•Ī’'!ņāŪĕz²ĪćŃÉ¢sCó’ó’+Fos=ü’Ł’„’’«’Ų’>gpjmCł’Ź’ä’ż’r­§…|]EMc›Ģźēü<;śæÅʕdvžÉė6'į”vw„…}ž“«„§›fNRF,=CUosfp]^Ne_BHp–tWc„gLQu‡sl|˜ØÆ¦²Ē®vZfqSNp|†zzeYahL>Yyut‘•}N(#÷’ż’ #;K;%%ž’ü’ū’ō’ ÷’ķ’é’ż’ō’ą’ā’ņ’ %I`qpT2## (-H[bUF7Dgy“ŸŸ™xV+-4(Lj†d]kZ2 "5$ś’ź’ē’Ē’¹’µ’Ę’Ņ’ź’ ų’ó’Ų’Ä’¾’Ą’Ó’';j‚‚WMSP'9\`fixV)+6!ł’,<(ś’õ’Ń’‰’`’`’’Æ’Œ’”’“’ź’š’Ē’«’˜’’’y’`’h’‹’Ą’É’²’²’Ō’Ź’…’Z’u’¤’˜’›’»’ź’ģ’Ż’Ō’×’Ó’Ś’Ļ’É’Š’ż’ š’ä’ņ’#ś’#%÷’č’ą’ė’÷’ ?R* *)(EQ7 ö’Ś’Ü’ż’ł’ó’*& ’’ė’Ō’Ą’“’Ń’Ó’Ę’Ą’į’ų’ģ’Ł’į’ē’ń’Ņ’Ģ’Ą’æ’Ą’æ’Ą’Ł’ó’ģ’č’Ė’Ė’Ż’ß’Ś’Ü’å’ģ’å’Ž’×’é’÷’ė’Ż’į’ź’ć’Ē’Ļ’ŗ’Ø’¤’ø’Ē’Š’Ń’Ģ’Ā’­’²’³’®’Ÿ’¢’”’y’i’n’o’\’b’’„’’ž’µ’®’˜’•’Œ’‡’{’m’m’~’’†’r’r’ˆ’–’’n’m’{’’}’~’’Ø’¶’­’«’¾’»’”’„’…’•’Ø’•’§’¼’Õ’Ä’¶’®’µ’ø’Į’¶’¾’Ó’ō’ š’Į’¶’Ŗ’Ŗ’¢’š’„’²’Ć’Ģ’Ą’Ų’ā’Ž’æ’µ’°’©’”’Ÿ’Š’š’’‡’w’u’|’•’”’Æ’±’§’¶’Ŗ’˜’†’’‘’…’Ž’¢’»’Ķ’Č’Ē’Ī’Ć’¶’ ’¦’Ŗ’®’§’¤’”’”’–’§’³’ŗ’¼’¹’ŗ’­’©’¢’ ’Ÿ’¤’š’•’ž’™’Š’q’c’Z’j’V’K’L’`’l’d’\’e’i’f’F’V’V’j’_’S’P’R’Q’5’,’$’<’5’$’0’:’V’I’:’7’K’T’F’D’<’@’=’2’?’L’J’P’G’S’Y’Q’[’M’B’B’B’B’:’9’K’j’|’’š’‘’’’x’c’c’n’„’’w’}’‰’‘’Š’v’w’s’k’`’[’]’W’@’O’L’b’f’‡’˜’•’‰’€’h’W’6’:’@’<’B’N’a’`’^’e’\’L’>’-’ ’’3’X’i’i’’‹’Ž’‰’p’d’J’<’2’2’*’4’F’E’K’M’g’\’D’0’#’’’$’4’N’]’z’{’h’Q’;’*’ ’ųžżžłžõžõž’’’.’:’4’)’$’’żžņžóžóžöžžž’(’’’’ ’šžöž÷ž’žž ’’’ ’’!’*’’ ’ ’’’’’+’:’E’S’S’O’F’:’)’%’"’0’0’J’]’o’y’q’W’B’,’&’'’6’E’?’K’J’Y’n’ƒ’‹’‡’z’T’A’!’’’’’+’A’M’f’p’p’R’I’<’(’’’’’’’+’0’5’C’B’D’B’@’C’9’3’(’$’!’&’#’'’*’5’=’<’@’;’=’+’'’$’3’0’/’3’7’<’@’B’@’J’O’L’N’J’S’J’H’C’=’<’:’6’#’’ ’ ’’’’’’’#’’’’ūžöžōžśž’’’ ’’’’’’’’żž’ž ’’ ’’6’7’H’W’]’[’N’A’M’I’8’7’:’9’=’D’M’^’b’`’`’R’H’C’>’B’A’S’V’_’Z’]’Z’]’c’^’V’H’K’C’B’E’C’J’J’R’Z’W’M’N’M’J’A’?’=’D’I’V’]’`’\’X’X’b’a’_’^’X’V’N’O’N’L’R’i’f’i’l’i’t’l’g’g’j’q’r’s’z’p’s’l’h’`’S’?’)’(’'’$’5’J’N’[’T’^’U’N’N’A’>’8’.’3’5’-’'’$’,’%’2’1’8’9’?’;’1’/’3’-’3’3’=’@’D’B’H’S’`’b’a’]’b’]’a’g’k’`’V’U’R’\’_’o’w’‹’’‰’‹’‘’’Ž’‹’‡’ƒ’€’’|’|’}’‚’Œ’–’ ’§’’›’–’‡’„’}’’€’ˆ’’Œ’’“’™’œ’Ø’©’ø’½’»’ø’­’Æ’¤’œ’¢’¤’Į’Ė’Ž’Ł’į’Ó’Ņ’Ć’©’¢’•’¦’­’¾’¹’Ā’Ć’Ä’Į’½’ø’Ą’æ’Ź’Ć’µ’ž’ž’‡’–’“’ž’±’ŗ’Ź’×’Ī’Ļ’·’³’£’’§’’¦’¢’ž’’—’œ’˜’”’Ÿ’©’­’¶’½’æ’Į’Į’»’ø’«’¬’¢’®’’”’‹’‚’~’„’’¤’²’Ā’Ė’Ģ’Ō’Ļ’Ė’Ī’É’æ’Æ’¢’–’ƒ’’~’ˆ’’’”’§’¼’Č’Ó’Ō’Ļ’Ć’µ’±’ ’ž’’’’š’„’æ’Ī’Ų’é’ņ’ś’ž’ņ’ų’ę’Ł’Ī’Ķ’Õ’Ō’Ō’Ķ’É’Ē’Č’Ż’ī’ü’  ł’ė’ė’į’ß’Ü’į’ä’ė’ģ’ų’%$$*" õ’é’ā’ć’į’ā’č’ī’ż’  ū’š’ę’Ż’ę’Ł’å’ä’ö’ł’ü’ü’ó’ē’ę’ź’÷’ī’ō’õ’÷’  ž’÷’’’ś’ś’ž’ ż’&%   !&-@;D@OTXRKJKGEK<GCLNM[fknbYZ]jmmqimm`rjumpfcgomklgwƒ~znzx~~v{ttotsqkjjhggknmcnqpi_aVZZfZ_`jjmniuhiejc`ehpyxpxrzyrvv}z}}~†„€Š‚}upsu„‡z~„‡‚†…”ŒˆŒŠ––Ø¦Æ³ø³½Ė¾¹¬²Æ·²¶µ¼ĄĘĶĶČÅĆ;ŠÉŹĒ»³­µ¾·Į¼ÅĮĖĢĆĀĮƼøŗµ°“³øĀĄ»ÅææĆĄÄĶĪŠĒŹÅĆ»Įæ¾ÅŠŌÉĮĢČĢŠŃĻĆĒĆĖÉĶĄæ¾¶Ä¹ÄÅÅČĆÅĢĢĻĪĒŹĻĪĢÉĒĻŠĻŚŠ×ÖŚŲĪ׌ÖŃŃŌĖĢŹĒÄĒĒČČĀÄĆÅÉČÅĽ¾Ć½Å¶ĘĆĘƼĆĘĻĻÖŻčåńłóōģļīźīīęļęäśķūüžņųńõźęąÜŪįąąįāāŚŻäąįęŁŪŅŅÉĻŠÅŹĻĶŃŃŚ×įŚŪßįźęééąēćāŪéāåććēéßåąéåįźėēēčēŽŻÖĢĢŌĖææ·ĆÄĘŹŠŅŹĒŅÜŌŁŚŪŻÜęßāćßéąęęęėīńł÷õńöūöóīõōóóēāźļģöõģķźļäīéģåīõķėéßąćźćźźęąéāā×ĶÓŅĒÓĪĘĖĘĄĘ¼Ć»¼³µĮĘĖÄŹČĶÓĻĪÅŅĒĖÓÓŁŅĢŅÕŻāäāąŪŁÖÕŠČĘÅĘĄĪŠĪĢ׏ÉÉĻĖŃĖĢŃŠĪĘÉĒŅÄČ“¼¶¹µ“³·ŗĄÄÉÉČČÄĘæø¼øŗ³¾¶ŗŗÄæÅĢĖǽĀĆĻĒĀÄÅČæ½»ø“²µ°øĄ¶¼®ŗ·ø¹·Æ³±¶ŗ»³²­©„„¦¬«š ™„𨠣¢  ¤ ¢”¦£„©¢£ž”›¤š›‘’’‰Š‰‡„„y|uw{}}tooorvmrjpootrtfdegojnlhabhde]b[a[``fecbi]a[lqhokjkrzqogcleg`WXU^V]W\[d_c_imjilsjvjpiiqntlkhghhbd\\[^b[UZR[LG>HB=763333-33504&-))  "!! "    ž’ž’ż’ü’ł’ś’ü’ł’ś’ó’ō’ņ’ņ’ķ’ņ’ķ’ź’é’é’ģ’ā’ā’ē’č’Ż’ä’å’ę’ä’å’ķ’ó’ź’ī’į’ē’ė’ā’č’ė’ó’ō’š’ņ’ķ’÷’č’ķ’ī’ļ’ę’ć’é’ą’Ž’Ł’Ś’Ļ’Ö’Ö’Ī’Ļ’Ź’Ķ’É’Ņ’Ń’Ņ’Ņ’Ä’Ķ’Ķ’Š’Ń’Ī’Å’Č’Ē’Ć’Ķ’Ę’Ń’Ų’Ī’Ē’Ņ’Ī’Å’Ē’Ä’Ę’Ć’Ē’Į’Ä’Ź’Ā’Ē’Ź’Ź’É’É’Ā’Ä’æ’ø’¼’³’·’¹’ŗ’¾’“’“’³’ø’¼’¾’ø’“’ø’“’½’æ’æ’Ć’¶’Ć’³’æ’¹’±’ø’Ŗ’²’µ’æ’¶’ø’¶’¶’µ’µ’ø’«’Ø’§’Ŗ’¦’­’¬’©’®’¤’œ’ ’¤’Ÿ’ ’›’™’—’’’’’’…’‰’†’„’†’Œ’’Ž’’’ˆ’’’’˜’“’”’Œ’—’–’’’”’„’’Ž’’’’Ÿ’“’“’’’—’’œ’”’’ˆ’’’Œ’‘’‰’‘’Š’’Š’’~’’|’y’}’w’{’v’v’q’n’q’m’n’b’b’_’f’e’e’k’g’h’l’c’e’d’]’g’b’d’`’]’b’k’a’j’h’r’o’s’q’s’k’m’g’f’g’k’e’i’m’c’_’\’]’[’X’S’T’I’N’H’P’E’M’I’J’L’P’M’M’F’E’L’L’N’H’H’B’@’@’D’F’E’K’D’C’9’E’G’C’M’H’Q’L’K’I’J’M’G’T’P’F’@’D’C’H’=’G’B’N’M’F’J’M’J’C’?’A’G’A’K’J’L’M’W’V’O’J’N’L’O’S’O’E’E’E’H’D’H’E’<’<’=’=’C’@’C’>’F’D’G’<’G’>’=’8’;’?’B’;’=’A’7’<’3’2’3’3’2’6’.’,’.’-’*’.’-’7’/’0’/’:’6’6’/’>’6’6’5’.’,’+’,’$’$’%’'’/’,’2’)’8’1’/’3’0’3’/’,’,’*’+’+’*’-’(’*’'’(’&’1’;’:’>’:’;’<’A’>’=’A’E’>’?’3’<’=’:’1’3’-’*’5’1’)’"’’’’’$’)’$’)’ ’&’(’&’"’%’"’'’(’+’'’*’)’-’&’)’$’'’0’"’#’(’-’)’'’%’ ’)’!’%’&’&’&’"’(’)’(’*’*’(’)’.’7’5’:’/’4’3’4’-’-’3’5’4’6’2’6’3’7’-’-’)’'’'’'’$’’"’’’ ’’’’(’+’,’&’*’"’*’*’$’(’&’$’#’’,’$’’’’"’"’!’%’,’&’,’)’&’&’'’%’’%’’’%’’#’"’#’)’(’&’"’’’!’’’’$’’’’’’’$’’#’’!’’’’’ ’ ’ ’’ ’’’’’’’’’’’"’’ ’’’"’!’/’/’-’5’3’5’=’;’:’5’4’<’A’:’9’<’=’7’?’?’B’7’:’3’9’>’1’;’A’>’8’<’8’>’4’3’0’.’*’&’&’,’+’’’’"’%’+’'’’$’!’&’'’’!’$’'’,’%’'’-’$’+’5’2’;’D’H’O’R’J’V’S’O’Z’W’^’V’d’e’i’c’o’j’r’r’s’}’v’|’p’~’w’s’p’t’m’i’m’a’k’m’l’e’e’]’]’O’P’J’=’:’*’1’,’'’’’’ ’’žžóžōžńž÷žśžžžżž ’’’’ ’ ’’’$’,’1’1’+’4’A’?’K’P’Z’_’j’t’€’‰’Ž’”’®’¶’½’Ī’×’Ś’ą’ä’ė’ö’ž’ %#./,%:553.0%#ž’ü’ī’Ō’Č’¦’“’q’C’"’ūž×žÆžž]ž0ž žõżÖżĀż²ż²ż¢ż¬ż«ż¶ż¼żĢżÕżāżģżžž9žQžpž†ž¤žĄžķž ’4’T’z’¤’Ē’ć’ %N_€•®¼ĶŪÜčó  !;DKWcmo~„“š§©®­Æ­£›‚p]D(ą«s5ü’­’s’'’āž’žOžž½żƒż=żżĄü€üQü0üüōūōūēūÜūÜūģūü9ü_ü’üĘü żlżøżžožµžłžE’ƒ’Ń’ Do‡„Äō #7Rr›µŁéų ź×·“mIłÕĮ½Ļßģ2h”¾ķ&KJD:ė·†L!ā¶vN!ā’“’‰’m’P’&’’Ņžœž_ž6žüżĘż†żHżżąü±ü‘ü|üküaüSühü‰ü·üįü’ü'żbż«żļż#žGž]žcžpž‰žŗžąž.’q’ ’Ä’ nĮLÄšŻ®z@õ¤n"ī­’ŗŻe“ GŻB°©ŽpR¾bŹ‚Q* ģŒ}‚†[-Ł’Œ’C’’Œžž}żōüsüģūpūłśŒśJś1śś śłł=ś˜śūˆūü’ü!żĄżJžŁž^’ „?—åZ„¶·¹Ć·±—ƒN;(߯¹æµ‹ysˆ‹‰…˜ĀŲā ^•øŽ R–ø½¶¦œŒ{?ē S ŖTː=ū’»’“’j’A’’½žyžHžžĪżrżżČüüDüłū¾ū”ūoūPū.ū.ū8ūXūpūŒū®ūŃūü±üĒż·ž’X’=Dū1Ķ÷ŻīŠSķ»LÜšé™h—ī<”$…¢åb©s97*ɼŗ°£÷e‹hŽ$ĄSꊤ9ŅxŚ’Æ’Ø’a’’³žržžŸż ż`ü¤ūßśNśĢłOłÓųœų~ų¬ųCłųł•ś@ū)ü.ż3žD’™äÄļ-®É…‹×„Fė×"=Œ J~ õė¬H&Że*Eƒ¾6¹VÄ‹’CUĀ^ņgń~*¼sE;# ģŠ¶a©’0’€ž¾żż<üfū·ś0ś¤ł łųpų‘ųÄų“ųłģł%ū2üfżņžaKZdŚš#,›É3Źśų2ś’ ’Q’v’ž’gµbh/ī^¦Z+’—éYĒsI‡čCŸ&Ź;³#hLžĶ~ķB±5Č„lcdqš±Må’’žżīūēś¶ł®ųÖ÷)÷Øöžöc÷ŖųŠłśū3żx’™ö‡¬Oƒ]Wx˜’Šžˆž›žšž,’¼’œĖóćwÜ;–—łƒ gœä’zźVšęŽ€Š<> ·jŁq©~ÖZ‘Āŗ(‹ĀĖ’·ž{ż(üīśś+ł_ų½÷•÷Ž÷Ą÷!ųłdśÓū@żĪž˜ļ°ŠŸ.ēo-§¦ŽČ;g’ČžĒž’’k’Tp9ŪØˆõ„“"ØŠ¼Į w’ņMÕ«`gC˜ ²GŌ_(Ó¦£āE«ŗĒøM½ūźžŠżŹü¼ū†śwł·ųAųŽ÷‹÷­÷·ųšśüĄü“żŁ’bÓBØ=“ūzęŲ’!’ž¢ż!žćžw’,CLXfE‰D?jņ³†ę|ūj·’ę’| ČšŠ?x*¬‡ØÅ‰)ū<ÖJgrßa³£_ŽoųTMH’€žžżŁü5üŗūžūŸū¦ūHūÜśś¤śū†ūeüˆżśž,ŪŻščaA¼s³”P’[žēż¹ż±żūżž«’’HBń·īe„ŻšģĪģ’J’’’åž³žĢžL’ž’y²)|ĮüAF īųōžBy¢†X °f‰’˜žŹż7żŠü—ūßśśRśüłøłhłiłeś%ü«ż,ž’č$t×0a=ānc–ä’’½žēżšü“üNż&žīžś’EZƒŽŽś™¦¹©nĢ3Ÿ9ą’f’A’Ī’‰[œ’G’°’ż’§’6’’!’/’€’ė’'e$-ę &“Ö™ł'U°’ėž÷ż ż­ü’üMżDż7ż¬żOžÉžŌž›žCžĄżOż³üü;ūäś$üRžĪ’ė’Hīń$•©üA®G ’nżķü’ü üzü,żŒž æT˜_Õųēw“Ų/’ˆž‡ž×žC’{’{’®’MčÕ±’Š’ū’ä’@Tuß9g¾"¾G¶ŽŠ’…žWżaü‹ū¬ś)ś śółŲł!śœśŗśĄśKūCüżŻż¶ž¼’¹į6V¦½DhWß|’žÄżśübü~ü1żž’4pÓ5HŽ)ī’ß„„Ā@® –’X’U’Ž’°’`’æžcžJž'žÅżjżDżzżž®žn’¹oCčźŸC¦ČÜ’łžHž¶żwżrżkż”ż!žĆž2’Š’Ö’ģ’Š’Ž’’`ž«ż ż~üóūfūūūBūéūżĖ’™:”Eż0Ėų›öžcžĶżż™üóüĄżŖžž’šŽj#“Ąˆ0Ļvė[+4 ßĻč×+=’Jžäż”ż:ż”ülüŪüÄżąžż’Ö£ “O7Æ÷<‹²¬’¤žüżƒż;żżŚü¹üü{ü3üäūˆū8ū±śÓłłŽųˆų|ł±ś½üU’“Įņū÷ŽkFń’¾ż:üÄśśHłļłūķü»ž5‰ē’Į#uœjtĮ-?f$Ēü³’Už¦üvūsśŽł©ł©łhś®ūż;’²½Ž  å;×+}’üžæž±žõžI’u’—’¹’×’×’¶’’’öžłž#’A’i’µ’ |Ó܌ó’P’“žŹżÉüĄūęś]ś*ś;ś±śˆūĶütžŗ Å8‡x’cžŸżZżdż¤ż žĮž‰’b{­„cźt’’Œ’T’M’h’§’„ÕńĒZŲ’9’˜žåżJżčüÖü"ż§ż‰žj’<į„B:ģ_ĄEķ’ BˆxÅØRŹ L’lžż½üūūnūū ūūū°ś–ś]śśĢłŚł»śżę’·* dĄŅ’šżżĒüfüŲū‡ūüsżśžš’[Ä>|Mä²Ś&hŒø ’eC’–ž­ż@üĻś’ł!śäśģū¶üUżžE’ž‚‘؄x^ge ė?ƒt?ėOY’cžÆż§żĢżążēżž×žČ’² ßĢźÜGĻ’Å’%W,Ć’^’ ’ÜžežóżQżķü¹üŅü żżTż“żž#žõż»żxżżpż@żżżŽżmž;’Ü’å’Ē’Ź’ś’ę’l’‰ž­ż<ż@ż|ż»żųżž]ž½ž)’Z’;’īžøž—ž˜ž¼žņže’į’[چ‰zFÉUä’Ā’Ė’Ķ’Å’ģ’!÷;6ŗ–—¬†¤ü7E#𹣜ˆE»’B’ßž…ž<žĢżCżšüķūcūūśŃśś/śĘłłƒłĶł|śŹū½ż ĘR¦’‘@bäžpżż…ż]žµžAžkżŻü żjżwżśüwüYü żYžÓ’ÓcÉOį5ś2CU…é-2ūŹkŃ’!’‚ž žŃżīż[žłž’’WhMķ’Ø’Q’źž”žŒžŁž1’n’X’üž”ž/žļż¤żż€üüńūBüŻü_żĘżž\ž“ž’u’š’¢’”’¹’ hž·³Ÿz`fK; ī’ź’ż’(oÆČĄ”†> ē’Ē’³’Æ’Æ’£’·’¶’°’œ’M’Ūž„ž2žžžńżÅżdż żÖüØüŽü9üąū ūØūüÓü˜żžYžtž}ž£žåž’’ńžĪžŠž ’c’«’Ļ’»’¤’•’’†’ ’ŗ’Ē’ę’6d•µÓßÉ„sOEMbnlSC+0#Ś’™’w’n’|’w’_’6’’įžĘž“ž¤ž‡žužbžcžnžhžmžežZžDž0ž'žž,ž$ž'ž1ž@ž<ž2ž(žžžž!ž%ž)ž5žLžuž žĖžčž’#’[’œ’Ö’BqšÖš÷åŌμŖŽ{hi_[NQLGG?>@<31% ī’É’”’o’?’’ĢžŒžOž žłżßżĀżŗż«ż²żĮżÖżäżżżž6ž_žžšž¬žĪžŁžšžņžļžīžģžżžėžćžŁžąžŁžĢž±žœž‘ž„ž®žŠžąžķž’’’&’&’!’,’D’g’M’g’\’Š’Ź’Ō’ń’':\š™ĶĶėJQN97ćı…kWF9ö’Ķ’£’|’\’9’’Łž»žž˜žžrž`žbžaž}žŒž“ž¹žÖžļž’’*’G’g’‰’–’²’Š’ō’+;=W`gaM7,#ģ’Ž’Ó’Ė’Ó’Ļ’½’®’˜’†’w’g’d’a’]’`’g’u’—’®’Į’Č’¾’Ī’Ų’Ü’ā’ä’č’õ’’’ *8=DIYVYa``H4( ’’ģ’ą’Õ’į’Ž’Ń’Ć’°’•’Ž’|’t’l’r’ƒ’”’¬’½’Ń’ä’÷’÷’š’ß’Ō’ŗ’±’˜’’’›’Ÿ’°’²’Ķ’Ų’ī’ō’’’*2(.*:;@?@HHbW`ir‚’‚}sl[E5& ū’ļ’ģ’č’č’ē’Ž’Ó’ŗ’¬’’–’’’|’r’v’n’q’t’|’‰’—’²’½’Õ’å’ž’ %' $#3@MX\YYYfhotz‚ˆŽ|iM7ź’å’ß’Ü’ē’÷’ 39GDBA-+&"'-3,DAUaniihgkmlibf^bd^RNHE?951;CALV]^qoˆˆ’™¦²ĀŹÉŵ»¹“”„njgfXQFHWgrxysmzyrm][XQU]RK;;?ECDESeo‰‘©Ø±³Æ­Ø ž‘Œ€Šƒƒ~w{~Œ“©·ĖÖäīīõėčąß׎ŪååģšģõņźßŪŠÅ®xnaSTNQEHJRUbZVOLPPSQOV]`cbamoƒ…”Š–„Ŗ¬«§«­¾ĒŪąÜóõüżüśõūśžõņńķóņü ż*ųīįßɬ«žš•‘‚}|ƒxy‘Š’‘‘ˆŒ˜œ¬®·ŗĆ×įž ūłīķė÷īōōü$)(*-)(* ü%#&"02<AC32óšćŻŹŹ¾ÅæĮ½»»¾¼ĆÉĀÅĖĀĻĖŻÕÓŌŁźąēéņļö’’ūū’  % #)$0#.3269:81!żüžųõźńī÷ü’śöéčÜćÕׯ×ęåīéłõ#   õāźģīīóõööō’ś !ū÷õ÷ōųõūłüķīźīķąēéćčņņņśīėŻčćäŚŚįŻŽŻ×ŲŁčäćīźļķéėćåŅŠÕĻÕĶ×Ūćģéų÷óāćÖĪŅŪÜŽēģńéźęźÜ诟åķėēåļėēäčåįäģßåÜŚŅĖŹĄ»¾æµ°„§¤¦„Ø” ”„˜¤”¤©¶Æ“Æ·³Ŗ©Ø Ø®°Ŗ¶“ŗÅÉĒĻÉŹĢ׏ӏĻĪÉĀŌĶĖĀȽĮĮĄæ¼æĆ½¾øĄ½³­§Æ–—’‰‡†…}ƒu}s{{‡‹‹†Œ¤«¶»¼¾ĒÅÅĢŹÉææĄÉijµ ¦žžž–’Š…‡qgbihcddh]b^igh_^[_[d`ngpnxyr{qonlekakiiZedc_`gWXWXTKZd\OGMMNJ[P?<QRUOOWTONVYKO^cieulinbfj`^\_bT[XOQV\RDFC8,2.-)! !"!,)'0+73;<=97-$  ū’÷’ś’ł’ü’ų’ż’’’ż’   š’ļ’’’ö’ļ’š’ņ’ł’é’ä’é’ō’ķ’ķ’ķ’õ’å’ä’ä’ė’ń’Ü’Ū’Ō’Ś’Ź’Ģ’Ķ’Č’æ’¶’Ę’Ā’Å’Ę’Ā’Ą’Ą’Ē’Ģ’Ļ’×’Ņ’Ē’Ę’Č’É’Ļ’Ē’Ó’Ģ’Ņ’Ī’Ū’Ł’Ż’Ž’×’Ü’Ļ’Ö’Ī’Ł’Š’×’Ö’Ņ’Ķ’Ā’Ē’Ä’Å’É’Ļ’Ź’Ķ’Ņ’Č’Ģ’É’Ć’½’¼’¶’¶’­’¶’«’¦’Ø’Ÿ’„’¢’™’¢’—’˜’’…’‰’}’~’v’€’|’…’|’~’~’{’{’…’y’€’}’€’ƒ’‰’‹’‰’ˆ’’’„’Œ’‹’‘’’’„’‰’’Š’ˆ’‹’’Š’‘’‘’˜’˜’’’‘’”’ž’œ’›’ ’“’’’’•’œ’—’¦’’Ž’‹’—’‘’‘’‹’Š’„’†’‹’“’Š’‘’ˆ’€’}’€’{’y’q’k’n’f’k’m’h’l’n’z’l’r’l’t’j’u’k’l’h’e’p’l’u’p’w’k’k’m’k’q’l’m’m’j’p’u’r’{’x’|’k’i’p’w’k’l’k’n’w’o’q’d’e’^’V’U’V’]’Z’U’Q’T’T’U’L’P’I’E’J’H’W’N’M’L’K’G’G’D’G’O’Q’P’K’P’P’V’X’X’T’Z’Y’X’T’S’R’U’F’F’A’E’B’E’C’9’A’9’4’@’5’4’2’'’,’%’"’’’$’’’’’’!’’)’%’*’#’$’'’"’+’’,’(’+’-’.’5’-’0’*’)’0’1’)’0’2’.’1’-’)’(’&’)’+’%’&’'’$’&’/’'’/’$’&’’’’’’’ ’’’ ’’ ’’’’’’’’#’’'’)’1’7’.’:’=’<’:’0’<’2’9’;’>’9’=’9’?’C’>’H’<’C’G’J’L’Y’R’W’G’J’A’=’<’B’8’8’-’1’3’3’6’+’2’-’$’!’+’3’5’5’-’1’,’5’+’6’3’9’/’7’6’3’2’5’0’6’=’5’6’<’;’8’8’=’?’7’:’4’9’.’3’&’/’-’.’0’4’5’/’0’3’4’:’B’F’K’F’N’M’L’I’M’X’P’P’N’O’M’I’K’H’R’I’P’R’[’L’R’J’S’R’E’H’2’P’+’2’#’5’’%’’’’’’’*’"’*’’1’'’4’$’3’"’*’’(’’&’’ ’%’’'’)’-’2’>’8’O’8’O’F’_’P’Q’I’J’P’:’K’8’H’5’8’6’5’6’6’2’;’/’A’-’C’=’K’L’G’X’D’]’L’i’K’w’:’”’y’"’>’;Ć’’’·ži’˜’Ä’O’’&’*’k’J’X’’ ’’i’5’ ’ļž ’@’’"’ ’’’#’<’’’šž/’K’/’ėžņž;’`’\’ūžžžC’M’G’C’2’O’B’Y’`’k’B’I’l’U’g’A’V’W’b’M’g’Z’)’X’l’t’(’-’8’Q’g’0’O’Q’/’9’K’s’g’’ ’i’j’{’>’ ’M’p’‚’’.’^’l’q’U’_’O’j’U’t’s’V’B’J’u’n’G’’T’‡’c’?’>’r’l’H’`’U’^’8’]’‰’\’2’9’b’z’c’,’3’7’T’–’0’p’£’c’<’ ’Ł’®’‚’ ’d’Į’’C’K’쒘’Q’9’€’®’Š’t’‚’n’‰’Œ’m’‰’’‡’`’V’g’’p’@’b’„’X’’Q’p’…’4’/’[’]’i’3’h’=’~’<’€’K’Q’X’A’z’F’S’4’_’d’W’X’j’g’j’J’X’p’’D’V’]’…’z’@’{’‡’|’Œ’n’®’Š’€’Š’…’Ļ’z’“’~’®’£’Ė’Ö’“’Ÿ’‘’Ż’¬’Ÿ’­’ž’·’­’™’¦’”’¼’’‹’¢’‹’“’’t’§’Ž’”’K’t’¦’•’—’y’—’“’ž’Œ’•’Æ’Æ’~’«’¬’æ’œ’”’®’§’Ņ’—’Ž’š’Č’Ö’w’„’¬’æ’Ė’u’Æ’Ÿ’É’°’Š’µ’™’²’{’Į’„’Š’‹’—’¬’Œ’y’•’­’©’‡’‘’·’Ø’’’Ń’É’Ÿ’˜’‡’ž’ŗ’§’x’¬’ų’‹’•’€’Ä’¹’«’’’ø’®’®’Ī’Ą’²’„’ą’é’Ļ’ž’ź’»’Ū’ø’æ’Ü’«’ą’Ž’Š’Ä’Ņ’ē’Õ’Ć’ė’ č’æ’į’õ’ļ’ź’ī’é’š’ń’Ē’Ļ’Ö’Ą’Ū’ü’ä’Ä’Æ’ķ’ß’Ö’¼’ž’š’Ō’·’ź’õ’Ņ’Ī’Ē’Ū’Ś’É’ļ’ß’å’ę’Ž’Ö’ć’õ’ļ’Ī’ą’ļ’ņ’Ś’Ś’ Ź’ņ’æ’ń’é’Ņ’ģ’ļ’ō’¼’ä’Ģ’Õ’ą’ā’ Q ö’8# /%9+,&1 /GGP" )I#ž’5Kģ’ <9ā’Ó’=ń’ī’  ō’/õ’ **)?5!E)$*1!!ž’/ń’é’ē’č’Ņ’Ļ’ę’ü’Š’Ž’ń’ ķ’Ķ’ß’Ü’ņ’ü’õ’&-;705tP>Br{^yV™wšvm›Ÿ›x™‘»Ž›¦Å¦Ŗ”Łæ¢½ČΔͻĻĢĀεŌßϾĘÖŻ¶·ĘĪ—€yV<PSĪ’š’õ’钟’t’’^’“’)’’ ’)’’ŌžŃžćžäžČž“ž¬žÅžĖž–ž•žŲžŠžŌžŠžģž×žīž’/’’ ’P’{’x’O’’’”’Į’²’Ā’ę’Ö’Õ’ō’@^jiuš×ŁķPwš§ę.Q‘éčł'x––®čé’ö!! ä²£i@śĘ—Rļ°rĖZņ’Ÿ’[’.’’ÄžXžöżļżüżĆż-żÖüńü żÉürütüĄü¶ütü'ü\ü£üü6ü3üƒü”ürüüvüÓüōüÕüōüżżżhż ž@žUžž«žĄž÷ž¤Š’m¢Œļz×5_7]*är.ļ¬&R,MĶŸŹ„?XAŠƒmÆBć®ķ5Ē <«µšŪtoŃŃ£Bl‘r@^UļĄŃŲ3ń’ó’¾’•’7’l’ģž˜ž#žłż@žŌżÆż/żżéü®ü“üiüüüūVū‘ū}ū©ū_ūõś3ū*ū;ūLūÆū“ü6żüżūüœž^’ž:ż%ž–~J’’ĆÅvZ=š/»±^›‰$čF:‰‚k]=pģ0u   °1¦,!‡•¦@M~Å܃Ėø*™‘C}“”|HŃ’ę”_§Ŗs ĄWŪ’Ō’æ’p’&’ŽžSžž£żwż ż ż˜ü+üĖū{ū¤ūūįś˜ś’śĮś;ś*śśåł&ś(ś{ü}üźśĄł£ś|’@’±üDūUžč’™ż5’YĻJ-¶Ht(t *Φ„o$ #ĒŃ™żp‚.Ą¤…&;*Ö’’˜’’芒7’Š’µ’É’› „3BŽžxžį–­Ó«©#‰hŗŚl/ēĻ’5’‘’Ŗ’$’žmżrżżÄü‘üąūŠūźśƒśƒśśśśŸłūų4ł•łŌśėūdś·ł0łķüŌžż?ūbü L"ž)ž™“øŻ’‹wc@śtšč± ū“„±Ų• Ä”­ÅĖĻóRĻGŻĢ•‡©¾’ži’Ä’Q’TżæżĘ’ž’`žOżˆžæ’z’L’¾’z_£aIń•‰f½gśˆ7%įĘŅ3;īEŚ’²’×’’āżŽżśüż›üü.ū‹ś<śńł±łsłłźųˆų9ų½ųÅųŚśzśÓłKų|łæż ž"üsś[żYŒ’µżS’wcJ½ßü0q€6šĮ; #Žs< fPUÉn6­ų» L,’’Ņ’|’}žbż+žvžÕżż]żāž¬žpż9żdž˜’E’\’²’5twiH§µx>śĪOĆÕ"æRTd‰”cĒ’{’ēž‘ż‘ż«üĶüģūū^śkłbłłł“ų’÷R÷^÷j÷ņ÷÷łŌłņųß÷)÷Įū’żkü5śeūžž“’Öżcž<}»Ģ[%Kó—‘oįƒ ō ¬gäm ū=fŹlļ/8;tŽ!_’c’}’żžźż«ż¦ż†żŻżżĪż§żżżåżĒżžŠžo’×’ īĻSēŹķč\ÄZ)% äĀ›Xa¶+ Ķ1’’ŅžŠż‹żļü½ü¼ūąśRś$śł½ųÓ÷ś÷ś÷ ÷Ī÷Šö;÷3ö÷źötųźłŅų=ųēö„śĆż×żPū)ūļżpA’’ž%ńg!ÅŲ”ŁŽ vī @ A3Ŗ {ja”†ń­ĆžżPf’˜žEžqž7žžżØüMü_üõüBżįüÄüōüżż£żMž’i’«’é’q īxė %…£o6/H[·ęLī³;™ų’@’®ž·żŽż}üüQū÷ś’łcł ł)ų”ų»÷Ō÷ötöwö}÷zöČõ„õ©öh÷÷®łtłŹł(÷ĶųUż|’nżĆśģüø‡Č’ß{kØl>7†Ŗa Ī 4• ¾ Š {Ūāł2ś7ø™$¦Š’”’żžÖż żšüģżOż&ü\ūüü®ü!żĘüIżküóügžD’‘’b’Õ’iō·Dģ~LŲ[¹pDžń\†”…Žf’žž.żœü%üüĪś®śsł4łłņ÷‡ųŸ÷\ų€öæöö%÷ņöö•öFö6÷÷źö.łĆū÷śkł÷_üUČü7ü\–u§Žć0åVkŁT[![ WšPC Į §¦ƒ0ĶĄøŻZ5Ä’©žīżˆżüÅü4üµüLüåūÖūūĢū?üż€żcż[żŽż‡ž°’·įn}Žü4įś i“ T$ žĮ"yĘ {ō’’=’ž3ż<ü‚ūłūēśośÄłKł·ųgų÷^÷1ų”÷p÷Œõjõ•ö‚÷¢öĻõö5÷{÷‡öųÅū^ü“łzöś¬£āż­ś’-_Vs-„ “l¦k Ņ Ś¼H x b#rn’Ö`äcą’$Ļ’Ģżļüżżaü¹ū¼ūöū&ü'ü'ū–ūĆūMżĆż¢żzżĒż ’ž’;ĻčŁ Ž^œ4rɕВ>…ŗ†ŒæŹų1±÷’„’óžĢžŸżŽüĀūūdūˆśÆł4ł)ųŌų‰÷÷÷&÷ęö%öūõėõ ÷Ūõ—öUõG÷ƒöK÷÷»łü›śČųI÷Tż×äü²ü'¼øW9ĶĒ‰ć e€ö³ U@, s ¬æ³PĒśiĢń’ńžņ’3”žœüåū1ü(üü§ūū ü®ūūcū²ūĆżÆż§żnżśżāžŸ’śīCčēŒm³S—:N¦vn…ŗŅ4"ųh›’§’m’Šž;żDü*ū ūOūźśĻł_ųØ÷˜÷æ÷t÷?÷†ö5ö˜õ<õqöxöTöźõ{õ‡ö÷f÷U÷¹ś¼ūķś¤÷Yųœžć«ū®żĄC]„ę›ČOt5  TŽ  ž3l Ó Ł±Z8ŗKePÓžOžü’˜’DżqūłśüĖūÓū”ś"ūˆū śū"ūĪücżżąü­żßž“’š’žčOŽķ¬qQšs“‡•±o(Ū\Œk‰ū<Ę’’‚žśżĪüüSūÜś.śł!łžų’÷Ø÷nö÷†ö»öŚõMõöö^öoõöõ@ö÷÷Ęöś#üåś@ų÷…ż ϟü]ü\—?@Y¢ŹRN ā ,K×f Į› Ä \wiśęŽ+€ž“żīžŸ’ŸżūGśśśvūšūėś«śsū‡śĶśKū¤üż[ż`żöżA’ø’;SŖZ 0¹2Ä®„£>3²¢6ćēwŽåĒ£’,’ćžLž}żü£ūļś0śÕł±łāų ų2÷i÷4÷ööööö˜õöĪö ööåõg÷Æ÷ų8ūįū ūcųüų-’ēäżˆż6łĒē]ĶÜü% Č 7Ą  !„4 ˆ ­S”YY{™Ćż…ż¾ž:žü~śCśÉś®śJśųś=ū ś<ś@ūūū—üĄüĆż’*’’u’[¤g–Ć’¼PZ&įF‹ß‹ŃŠĪ\Ņ+"„gŲ’O’·ž]žŽż żÓūėś+ś°łģł=łĻųg÷Ąö’ö†÷©öĄöõÆõŅõ ög÷Źö‹ö„õ«öļ÷Īų>ų°ū2ü0üēųGłw’/½żžįmĻī-ŸH Ķ ˜JøÆ °øĻ + M æĆŲ’ż¢üžūżĆüįśĖłżł śGūµū‚ūźś7śü¶ü£żśżhž˜’ŗ’Bų.4ŌM@1|qŁĢąļÅNĒ,Ēxö#žó_*’’«ž5žŃżEżü—ūÕś„ł¶łpłmłhų†÷W÷*÷a÷ķöRöłõ¬öŖö·÷ęöėö³öłö)ų¾ų|łöų-ū©üŪüčśčśäžģ‘3’`’DŖÓ ū×k`ß Ÿ 0 * MÄŗą ĖeŹć³4E¦’}żĀüÅżżżQü§ś@ś•śAū.ūōśįū‚ü_üŲū¾ū¼żĢ’±,Č’¢~½<JŖß@gź"ķŠ!*7 UÜÅYģxx5’ž˜żóüIż³ürūś’ł{łHł‡łłiųĆ÷éööw÷Ŗ÷ƒ÷‰÷ęõ÷F÷ŠųĆų,ųaų$ųéų•śńż#žvü?łŹū ūšV’ržźG"ZtL m td9 — eźrĖ hŃ ŽūÖÅīžJżeżūżŠżüūūĄśuūcūü–ü%ü“üµü[żČž¤’ćłó‹±Ļ[¶U{ģĖŁ,Œ#2qž„Įšé\$äģ+Ļžžż™ż'ż żüjūÅśnś£łēłĢłqłsų$ų4ųlų ÷÷X÷š÷4ų|÷Ÿ÷¾÷ŚųĪų=łÜų¦łśóüž%ż«ūżś…’„\»ƒŁ“žŹł?ƒĄ z 8 aZyj ³7Bc ÖŅģČGÅ|S’‰żżžżBüēśeū5ū9ūiūąūżæüü(żJžĶž’2õ’NˆĪ¼ę …ę$³@-ą'R¶;=c’žBĆ-’/ž\ż.żĪü©üüGūŠśŅłøłśQśļłłø÷4ų#łzų”ųśöŸ÷^ųf÷śųĻ÷»ųź÷8ųØł8ś»ś5ü×üÕü£ūOū`*—Ż’ŽżĻ®µą”¹Ä“  .fą_ Č–Ų„ ¦=TE"¼’ń’žyż…żėżžżŚūūSśĢśżś›ūü!ümü@üDżAžs’Ē’</³’Œ¤žffhn3Ó=‡įżYnē‹ŖIŽĒ÷’™ž±żĄżwż"ż|ü»ū#ūqś6ś€śŽśHś©łxł ł4łPł-ł=ł©ųųFų^ųxų|ųSł-ł·ųnųžųšśäśŗüØżążüRūØž} ɐєYŅæ¢_–  c źĀŖŹøxĀĮūÕf=Ėž:żĆüåü®üÖūū-ū;ū|śūśéū’üįżrżėżž¼’~{N‹›łfß÷ąŲdŸ"ķMB³ź8ā¾¶Į/¹oe’ž›ż—żbżŹü1ü˜ūXūĆśGś½ś’śÆśķł‡łmłAłQłNłŽųų¬ųxų®ų~÷Ū÷ĆųÄłłeųnųĖłśęśžż‚žgž ūŚū!Iī\ł)žFōU š½ e ń  •ēÅ¢‘ A:tžŪĖ’_’£ž,ż(üŒūüū«ūVūĢśŅś†śėś:ūhüžż'žŖžhž’uēņ£#~‰e8BĄjH’høņČTÆÓėƒ•„†˜XŠ,’JžÕżDżwżż¹üü—ūnūūCśœśńś„ūŃś(łŲųŹųÆł–ł6łŖųė÷V÷÷9ų…ų“ų½÷k÷pų°ųkłZłaś°üīżźżĀüKü%’$ʱČKt:} ” Ŗ ß‹ } ˜ō™ęø·Ģ*9’žEž ż…ūīśAūœūCūēśū/ūąśĶśüįż¤žÕžŁžCž;”#I\Š~%Ź„¦k=Ŗ,zUĒża·ĀPlj‘mžµżFżżńüłü¹ü üCū»śś°ś—śŚśśüłłł<ł0łbł¼ų•ųų2ų÷÷^÷Ž÷Ē÷]ų®÷'ųėųvł¤ł.łś¹ū€žq’÷ž>żŗż„§lĄ>lŸj „łQ: ßŌ(!E¾éF?_’Š’{’ž²żDż&żüįū‹ūĆūĻūżūKüśü żżTżLž›’Ją«Ė•‹ÄƬ9`+ōŌC8&µ8ķa8ź¤ąÆÕA,óĪ’1’£’ć’T’ųżż½üŖüPü3üžūśūQū¼śśAś·ś¹ś/śAł:łŖłJśZłŖųšų˜ų[ųHųłł•ų÷e÷Åųś8śŸł­łīł·śNūłż“īož§ü”ž –…L¼Élīk.§~×·å_›¬t®Ė;NA’’’ķž½ż_żžžæżgż7ż*żńüżĶž~’|’$’āž!Ö-*F"kRżō7óńŠNĀĶ`7ƒ‰J)ęōŗČĮŚ;„‰ŹžSžćžB’|ž™żżīü¬üWü2üŹūĻūūĘūYūHśśJśtśÅśūƒś'łē÷“ų²łłł­łšų<ų*÷Ÿ÷ėų+ś3łųųOł“śpśrś#ūīżW’ńž¢żŠżw’±Śq¾|t'“X”Łh§±‚k 6|ēE‰h}’’A’…’,’Äžŗžńž ž3žŻžī’ÚQ:o!“³ŖŁĻƒ±¼(«­1—Ö÷Čģų C§e%ᤓ/'Įž3žČž+’„žźżdżTżFż?żż¾üüQüRüüĄūHūčśūū‚ū»ś.śüųMł@ł±łŠłĢųÓųŹ÷ų ų‹ų„ųƒųĢ÷.ų@łUśFś”łdūāżc’,žˆüż=5i „ĪtNĘ€ˆ¢fuėČÖBbœ,DSd·ś’Ń’ä’»’Ū’·’,’.’—’…,¾dÜ䩎Å5j»wŁųr©XŒÓ?Č‚ńī~U’Ķą“)sūl$­Ļ$,’ ’x’Ŗ’·žžÕż*ž?žž“ż8ż}üüDü\ü ü†ūWūūfśśgśuśTśFł×ų—ųÉų£ųŽųÕų›ų%ų<÷©÷dųųųVųnų‹łjśDś9śøüD’‘’7żŒü4’õ¶x9^ Ō j^ Ć6d$[Ģ’e •z:tˆ0,GÄ׳’U’~’qhŃl̵óõo襞tø#ĖxßGčĶ Žļ EøÕ˜¤»zŠæż[Sķ“¢’x’˜’Ø’:’ŹžMž(žÄż”żŒżEżčü”ü•üÜūmū~ū|ūeūќȜ²śśśšł—łłł‘ł*łŖųłułńųYųlų¾ųŅų£ų«ųāłółüś”śEü ž ’†žāüž%LTQIrŪ}G€>Q[3@¬±ÕæÕz<Ɯ|ĶL›‚’ļ’÷ĄÕYƊW “+š&Hj®<łģŪ!y@ėY„ĶĶŸĮg¦uątXĖ2ēš32Žj§’}’ˆ’{’’”ž)ž÷żĶż¬ż‚żXż°ü@üüüüłūpūIūčśŖśŚśóśūÉśAśĄł*ś=śšśEś]ś‰łł×ų”łbś3śįł.ł&łÜųhś_ūuüüŠüž’Vžčżø’go}BÜ æ!" ź,Ģ?Jű‡]”‘”½µōζ=K„\&[Œ%‡aŠ/•…r,6pžxH÷)ĀŪ£Ÿ®Å"ĆŽQŠ!åHē‹FN 9|,hїFß’W’Ńž’’ÉžNž&ž;ž%žßż‰ż=żżżCż9żēü‰üüŻū‘ūÕū/ügü6ū{śś^śūūūśŒł–łśõłłöųÖų łqłLł™ų:łßśBüŅü)żžGž†ż ž@Ā9+¢];Ā"ņÕHVķµŽŲŚloßŖZŲ›<>„» ,V8Ļ ¬’%i*ŒAEŀøbĖžcŽō*8{j=[³’Łž¼ MuZķ½l~ż\ ģ’’’÷’Ć’H’+’,’ ’ÖžžqžNžvž†žgžķżFżĘü¹ü$ż;ż™üü]ūNū-ū»ūĆūĪś;ś7ś³śōłÆł ś=śĘł¬łŽł}łśų łvł“łĖłłxłmś@üüżžż’Ö’Šžü’'°N/ĖŖvL0ké£ANj$IąüDÓ-ŌMfĢףēIs8½n8k›ŁäńžĮŸv’ć=”zō†øˆD¢4Ø-;uäÕŚ½ĆOƬž M<, Ņ·*GÅņ’‘’‡’Ā’ &®’óžbž ždž±žåžOžtżürü¬üāü‘ü;üŹūŖūZūčśRś=ś.śhś¹śėś’śwłłZłßśEū"ū¢śś|śZśŪśńś:ū6śVūŪżŪš’¾żVžl[ptĮO\BRpXŸžż”M˜A—Šy£]”Į>R'Aƒßq’?’µ0Ö¹e’’ŗ’»CćTß’ż’+.m’²•²µóø…h»šyĮŗKSę=o¢dļDd’u!œ“Gžn®’q’m’«’§’6’žžMžõż‹żmż5ż³üøüĢüöü7üwūĪśśś`ūhū5ūĮśŻś3ś7śvś'ū:ūūūŻśnūÉūEüŹū×ū6ü}ü\üuü¹üAż³žĆ[Ś’s’Š?€:ē/ˆ¶÷n¤sĆŪšoń^*ō®į‘#%šõ’k’ń’ų‘t¼ź’h’|’!²ÕŌ›n)o X>¹4Į=-¢ĄX+—§³·VńEćC~·*L ŌĀ]§’+’ųžL’•’­’øž’ż„ü„üėü„żUżĘüüŽūéūŹūü»ū’ūośĖśwūbüŃūąśėśBūxūŠūüäü”ü§ūoūxūüuü†ż$žŅž…žAžŲžwĘ”6ŗOƹ+vŁ‘©į/V{Ę‘•_Œ~žh˜ņ7#č…M;…l&Ą’Ō’ž’d› .½6ż~|,J”ćödG™NÅXܼ½ųVшłKūvcć¢Y’}’u’m’’’‹ž4žSżĪüäülżĀż6ż¤üHüZü!ü}üŽüŒüü üüŗü üUüŻū8ü"ż.żfżJż@ż—üŅüAż<ž_žžWżüü§żž”ž.ū)/›žŒ’(č)¹$…ėµū ±½Ö¼NŠ–k’(•=0?Œ;¹É}fB„ ¬PRzsjˆÉ0ÉüŲ~u‡ Š\ˆcŹź„ęÅ“ŪĮ{9AK4Ć’ž;ž ž-žž’ż·ü#üüü-ütüƒüčūSū&ūBūeūūĢūgūŽū„ūü®ū*üfütüTüĆü‹ż’ż˜ż—żGž­žÉ’ÖB0š’e£u“ļ锊ĄéHr¬PK/5yJ~*įåxā®qAņ6®+$=ƒd`ŽŁåįŅ™Aš6 _Æ®ĄTZ𓔁oļ„ąU«UĶpN¼ XŻdæ’•’»’ É’Ŗ’’D’āž’’łžģž’žžēžuž0žĶżśżūżžōż6žŪżœż²żžež_žTžNžQž^ž¼žÆžõžŗž¾ž~ž“žŁž’ąžĶž~ž]ž…žŖžāž’"’’_’£’¦’Į’{˜į¤ˆ¹%”©wXhażóņÖ.jœwŸÖ/B#³¼åÅ„o:łÖĪČvŌå͊J’’½’S’źž”ž@žśżmżõüĶüłüżįü`üļū³ūéū üDü>üVü5üśūūūVü“üųü@ż„żężžKžhž×ž’Z’„’Õ’ES‘ēEi÷`‘ųĀŠǤC—=ij­oč’Ģ’Ó’³’…’ ’_j’垎žF’œ’¼’±’j’’ĖžåžR’„’“’ƒ’w’ž’č’ $DvĀ‘»!jkz7×pĄFbh‡U‚“ė;–?}žö÷Źåśµ8‘’-’4’[’}’§’Ņ’K’¢ž;žtž§žćž ’āžžOž<žž žž&žśżž1ž6žüżŃżĻżĢżžŒžæž³ž…žžšžµž ’<’s’Z’o’}’¾’¹’·’ˆ’˜’Ē’ä’ ā’æ’m’;’i’ė’\h¾’Ī’ d‡£”lWcÆ“eU¶hObŸŽ8t“e_^X/.9YkŽ„bOI^[½|yg@ÕQŹ’v’\’R’’™žōż¢żYżLżżęüpü[ütüüüüŽühüwü‚üż†żĘżżżŲż@žjž«žīž6’V’H’•’ō’ccgü[y:%BXs—ĆĪj’õU!ōα‚`QM2ń’ō’ü’ķ’²’p’^’t’”’§’’v’]’?’Z’Ž’Õ’ß’Ę’”’£’Ė’ '/IS]Tz›‹æłé½Ģ&@_zFY³żäĆčļš„eew†,§2&ś’Å’m’ōž\ž&žžžöżœżżÜüŠüźüÕüŅüÉüæü—üÖü ż3ż6ż.ż‚żžøž’B’,’/’’Š’uwaglcm¢²³–Ä ɕœČš#HMłŗ„ĢćŁ¢kR>,’’ć’ø’Ÿ’¬’Ć’Č’­’Ø’°’Ų’ū’;;<Kk˜®¼“ŗÄø˜zoeF8:#ś’Ż’ę’÷’-GidNFržŠÅÅ£™°Õˆų’…“bP"Ć’”’Į’ļ’ņ’„’’°ž˜ž›žSžžžżmżMżkż{żæż«żPż$ż|żžQž~ž°ž’8’J’]’›’«’Œ’u’Ŗ’ +ķ’‹’j’x’ ’É’O1ņ’ī’-šŅŁęõ *ö׊é×¹xN:CKO%ē’ō’ -618TzRlp„_Y[L#š’×’Ī’ī’Ö’³’‡’€’e’l’’’½’Ķ’Č’Ä’µ’Ģ’ņ’ł’   ū’Ae†€‰–Ā؏ø ӻؑƒ‡sP“’?’’Ųžž2ž ž÷żģżŌżÆżhż&żż+żUż€ż|ż€żyż•żŽżĘż=ž°žÕžŗž»ž½žųžD’~’”’ ’‘’s’‰’Ó’ž’ē’ö’Lfnl†©Õ7/’č)]nF āģż 󶉄•”†bLRs}‰U4=x‘waJō’J#æ’k’m’„’p’2’’!’ķžŃžßž’7’"’łž-’š’ø’h’R’Ā’ń’Š’Å’'d€ogÅōµQi¬ÜŤ„UŻ’ń’ä’–’īžtž<žžįżĶż»żŸżiżAżłüčüżVżdżzżœżŗż¾żĶżž‰ž,’„’”’{’€’©’ū’#OR`A5L†’b_€“¾§”’Źų$) Ė«³č ¾‡`TV`we=8B) Jx‹cRE_}Āµ|>'Wt\ Ž’Ļ’Ė’Ģ’Ī’±’s’D’"’7’Z’s’S’$’’&’m’™’’’z’z’•’Å’ö’Č’Ļ’97)!Ü–žHŒąĆ¶”ąŲ›ū’ō’O…v’ ’żž³žQž ž÷żŪżƒż‚żżÅżhżųü€üÉü.żzżlżcż@żUż¼żJžØž’j’Ÿ’£’Å’eīæĀa1#AHöŃ=·w“įķß϶¬ēł²›øĘ„ œ—rnsˆvV6Cexn?: C…€A(56+8$Ö’Ķ’Ó’»’œ’k’ƒ’’„’’r’{’¦’Ą’ā’ļ’!ALŽŁåt@ ęŗŸhYšĆĄ¶Üļ…¶’k’Õ’*ä’’L’įžJžŅżążļż2žÓż_ż7ż^żżŗü¶ü!żCż]żhżzż…ż˜ż¾ż÷żŃž£’Ā’“’†’ś’ß˜(ÖąNŻÉ? 6$ ś’%Ýū<I¶u‚ć šØkM„¼³xbe`Wd|nRhŸ»‘irbu„Ö£Bž’ų’W¹æKB{sGœ’S=C6Č’£’©’·’^’ūž±ž`žłżÅżŪżž ž©żżĄü·üåü ż$żNżżżęü0ż­żSžõž]’t’V’n’Ä’k,¢b įe·×ÉxFV/žū ńӑ‹² &ü‘HX¦ēļēØbCr“Ē—u^sp‰‚ ĘŠĻé×±ŪK¦ØjK³ Ą|{Vu®Ń¢.ÖŲH}EǃZ1ż’Ö’_’Łžž¹ż§żŲżżóü¢üüüÄūüŲūĖū„ūtūÅūütüüZüsüŃüŪüż†žŽ’“’®’6 '›Vƒ1M‘ ¹f&ĖĆF›cSŽ—‘ū žĖąĻ”X[†„›²Į6 -lĆŲŽ¢‰iµĪŠā Łŗ¹Ÿ3ȧ½$:ķ4ąMm@KZi„Œ(ߘ¶]Ą’†’5’·ž)ž2žžœżėüåüÖüpü>ü]ü[üÖūóū üūūµūüEü<üŠü–żŖżNż ż»żž<žž1’Ó’Ø’ŗ’F¾Xü>|/°”ų$Į¤=9а_ˆgß‹ex&‹ŅvNgpm†”}</y Åd{žģqiWFŒ$‡*® ¤Ģ |„»•'<^>fcUgPhIÖ6©’s’É’™’ĄžžµżQż…ż‘żĄżÜü\üYüĆüšüĘü”ügüXüfüż8żżüülü%ż–żĒżXż¾üĢü–ż†žŅžĮžbž#ž(ž«žz’ É’÷’NKGüț–Ćš^ŌwŪŒ.e?B‘Ó²ė’"¾’7'æ’Ÿ’ļ’£Öv wāƒŗŹ‰š»“½źFéož¦ą®~eT+ĻŠIĢGżžlŒ’“Ņe¶ćˆę’|’u’“’n’Įž“ż5ż’üōż“ž³žšżfü³ūÉū żžtžķüķūėś—ūüžÄż„übū@ūŪū¼ü_żČüĖüzüķüżōżž†ż/żNž’\’¹žŒžž‡ži’T~Œ’¼žžŹžœ’P"æšo’O’ͤ]łÄÜ\‹’śPEƒ²Ņó¹ćVž³™4¶‚ŽVаBą&6RwĀĘļüDc”|ņ¼&YÜŗ^æ£&Ż÷pKz¶›3£˜ž–c撞’Ł’½’łžžlż­żkžīž¬žŻż’ü•üāüŽżžÉżIż–üjü·üĪüżaürüäū_ü{ü“üüÆūøū<ū}ū§ū|ü_üHüZūĆś)śŒū–ü#ż‘üÅū‘ūJū%üTüVżćüßüQüXż(’³Ė’’r’”Pkó÷æŽ2JāČ')Åš    ĆO÷O}ģŪhĄÜ’GC…Ö|’óž[’¤B‘é5…’õ’ Ö]&Ā$IOĮįß<¬Č  õųĮŗœa£le~pI{x˜’Żž žĄž†’c’¦žXżīü5ż5žYžžżKüöūķūzü»üpüNūķśŚśÜśĢśūŌū°ū ūלšśNūZū)ürü®üjü±ū5ū;üŠżŚž=žiżżœü`ż$žK6Ü’7žž«žĀ’“Ή§’,’m’[‹˜ KĘ’¾’¾’7ĢĘjL4é=2ä{ódO‰dų])é»D¤žNŅŻĮÓ“Hśi_²’fe<O(‡’~ł%`‚@ ø&i"ä+B»™3uy0śŒŠ—Ō7!’ßžĻž’x’Y’Tžńü§üåüĄżńżž5ż¶üü#üLüż4żäüÕū…ūqūnūüüOüĄśŒś?śłśæśeūµūū ś»ł$ūÜūģūźś®ū³ūōū’ū°üŻż”żyż‡ż)’œ’ŗ’£’ą’ŸæZ¹‘ūóó}"L  Ż.cŽ&Ž’včėՒ–§ē»UŌnaŃ*ü“Zœi00Ć4(›@,Af•uČF2i|VÆigšŸ„ZK3=QK5ę Ș0 é’Ņ’³’D’ńžŒžržõż!žŖżĪż\żoż£ürühüIüYüüdü«ūWū7ūÓū”ūüüüżśūżū”üü‡ü¢ü%żż©üOüĪü:žžéżaż ž9ż¬ż ž6’l’’ńž…žņžŸ’’j’Ó’a’’U’į’<”±=Q·’…’Ų’½×g’>’’u’d’‘’Ø’R’^’’ž“’q’•’t’ę’<>^ŠW‘^ś§;ˆĢd„¾¦uBÉéčpžŽęi<³Æ‘“šgŠFĆ9yā•DĻ„¼y–ų’±’’c’’Z’Āžļżyż_ż7żż’üöüšüfüüöūŹūēū®ūŽūpūAū÷śÆśēś³ś>ū‘ūĢū¢ū<ū9ūeū–ū9üüpüŪū:ūü`üåüįü¹üäüLüżüŅżž,žüż÷ż>žźżęžžÜžnžcž,’ĆžŖ’žžG’bž¶ž)’Ē’f’ž›ž½žJ’é’—0>’B’^+H®‚Õ˜õMBsRļV°× ;#z§TĘ„ĢALgɆōŅK(T})‰cöējā®Ń,ŒfņõڵzgP'ī_Ū’c’L’s’Ž’R’©žćż€ż?żyż…ż–ż żµüUüōūłū”ū/ü:ü*üŽūū)ūūū1ū©ūĶūqū„ś5ś£śŸūČū/ülüüŽūŽūŽü1żzż…żĒż:žŃżNžYžAž žüżÉž!’q’®’c’&’ ’æ’XŠXĶ’’’w’8’Ļ’Ę’’%ž.žcż žaż!’ErĆžöüMž’Ų’”’J®Ņžš’lEM®É‹}µ¬ČZT}#ŁLŚH d’¾’ŽōoĘ„}’½ž²»ž^°.—¦ĪŌĻ„qŪ™Ąa ļG0näĢUŸé·åĻ«’q’t’Ó’k’·ž¼ż7żżĪü§üŚü™ü=üéūü^ü2ü÷ūĖūńūŲū üŠū÷ūēūžūāūūūü(üęūqūÆūįūQü…üīūXū”ś¦ś‰śˆūĶū…ū_śžłśSś9ś>śZū÷śrśkłßś$ūFūčśŲū}üūūÕühžž‚’’-’BjöŽõu‘D­Ŗ¬ÖwŖIMYĄ e,EŲ.ŲE›s⤒ ’óž’ņžĖž£žLžēżĘżCžužNžž>ž£ž ¼¾šē¦I=CM“4ŠˆĘŹ€)ĘŅæą5ƒ‡45¼Ē’żžGž2ž.ž:ž±żDż¢ü_ü?ü„ü¢ü[ü.ü3ü}ü'üQüCüuüćūüü=ü“ūćūżūNūuūCūĘū”ūü­ūūƒū¼ū\ūĻūgüTüõū‚ūnü\üü¹ūiüYüü?ütüĶü®üĄü|üSżŒżčż„żZž'ž/žĮżīżž[’Ķ…A“–-ó¾OvMlƒĆD°‘ruæ.˜łē)ą«āŌMŁ’µ’4’0’ ’W’’Ēžjžåž’*’{’¹’?Q ÆcAš’š™KžĄŅĄ­Ė{’AķBbV3£y„’7’’ž*’¤ž-žƒżĀż*żrż ü!ż€ż®ü“ū׿xžœü«ūƒüožŁūü‹ürż’ūĆśķś9ü żū&ūū=żĮūdś‚ū¤śŪżÖś”ś%żĆū¾ümł”üżŠūyüÖüżņü»ü?żķż+żĖž ž<žB’’x’š’ĮH’E£P!,“ÉM”ˆ‘ź”X8ā <° é Źäg5†ļś×Æ£²¾s¦ąĘĄL…“WSF'‡ēIӍ@[£ŒHyó"9ś~„1¢…IÆ6Žå\'m Ż·|žo’wž cž_’^ś{Z’ĶüNūˆżĮõųżuż|’ŻśBžĢüpū’pż5ūõüźžŅżł«żĒ0ł‹ž;żb’7śr’ÉśÄü°žAtųL’2lū9ž–ż{žæžņü€ü’ƒœüīżS²’Ēż¤ž žĻE-’Ūl5’õ].§’¹’c2&’d’”’ń}Kc!Ń<š²zŽž„źDóš6(£¬ó±{øäŸg‘lį¾¢^ė°7³‰;ńĀ ŪH:ĶĻ+(ĒĮ¬’BfCø‹ž¶ĪżĆžKkēś";üMn’ßū/šü³üžüż“ž ž¬żżżŻż“žƒż{žżŃżżĘž ż—cśß üężyž/üWų?JüW$ż{~žśśŅūB8üćß’qü›’Ēż’’PćžP’­Ż˜ż„ž’@ ėžż”:’ģ&žā捾MÆ’Åõżey’ę’Ć’›ä’g’“åž¬Żž;…ß¹žōa@!3<‘c6]¶eįō7t…ßh²r;VCŲ Ó:8S¬ŅrĒDuŸć£źw>–—2’d£’Ń*›‡’ĢEŗž3’ŅĢiƒ\†üß”ūöIełzÓü°ł5’÷ūÕ-ż’ōžBż&’ŖžDž’Äü°¢śj­ū|žš.śe@ü Dü„ž™(’˜żüwž’ÄžŠ’” ’.tž£Ęü/Śżžå’NTž)žī„šž×JŽ+’ź’Xķ’åż  ’^’³3’,’¹Bžīž--žhÜż°ńž+iž „ž’ße’óŠ’ōz’PĆDŠśIź÷…F…ē’!u±ž„£1ž°ąßĮŅŲ¢ ‘ ²%g‡žYl{’Ÿ£ČZż”-Vž¾æ’Q‹’—²žŃž|w’Ę’³Xü¦[ž±’œ’Ģ<ż(@Wėž°žčyž’’Į’Ät’¶žJõ1žVŁü:·ü>V~žÉĆ’Ś>ž¶Õżßī’CÄžż}ž[Iž*’qN˜’V’3+žÅŠżÓ ži’X•Łżęż¼Ö’Łż×,ä’ž§ßž[’8P’tŃü ’ż2‹’`7žYĀ’Ła~kžÅ^aŻ$iEž…ʇÄč…’õ°čV…»e^‹Ī’`s‰{@A”’ĀRł’’*’™ĘyŪžt’¹Ąś’| v’¶ÓżcyĖžŖłżpĮłż/ū€0ž‘’Ūśžø’Š^²ž ’ųžž|’'w·ś†żŠožFzż9Œžš@’@xś.&üożń-žų¬ž‘żęĻć’Įü |’’¾Āž…2ŃüCēžA#qżE£’ńŅ’N’x”żæżeĶż×Pü>3ž§JŸž€Ł’ĮņüŌļżK@±ż^UžÅžå†’מacyžW„ż ²ünr’¤üł³žš2"Ūž­š’Ķ’?E½§ń’Īžī’/üžŠU’8’|™}żŸŪż’ £ž:źž5ĀÜ’¾„xū”Xžģ¶[’2z¬śŗKżnżrcöžŪvžųż’€żń£üBńUłļ “üÄžÖhłöõ'ż’ćĻeż–’ģł„dł ūśŚōąĆ’kż?ģžŅ.ų„¦ü](śeøüy Żž¶¶žįEüuńü<ĻØż;ˆż„ÆėżK Bž¢üźmż‘’ŪžŽäż`żąČ’ß’Bż^ žT°¤žWŖ’2éż4H}’’U’rģž’žƒeü=÷ž8 ž²§łĄŹ{ł41żöžÕūI_wśSQž4Æł„ō9ž‚ü8 )ū/ūż>łøSż®’¤ęo’sU’ĀGŞƻžž. mūųż&Ÿū5Ž“’ŖbõH>’8Įü¹ķžÄ łŃż¦ń’–’K>’Į¶žīæś#ĪžĢ’ß’vŲ’ ł2ü&Ų’ŲžC’fž’Ł’½’Dēż—žPöł%©_ž“ž©Eūœż›Ģž…<ū<˜Yž°½ūł”õX²żšž8ك|ūX#.ūÉžŚ¬ųXŠ’[”üךū“„’¾ ūŌ‡ż½ž“ ž*‚ū;’"ž@g’<’’mżÅ’×’ā½ż*RŹßž”’yžH6¤žQXžhūż¾ž`Ÿā’`üéĶžuõ’×’Ųż` )ž©eK^lī†fq†Už²P’ _’č’ ~)žŒמKn’Ąגğćžs øżŪóżI=’Qņ‡žB§’5’Ā’ē$ü½Z’qžiŁ’±’dž1žŪJžŲOü>’Ų¤ž’•żėż@ü’gżÓÄžüżļüsŹhüŽ’ü©żOž¦YžĮ’Õ’łžŁü(–ś‘0—ž2ü„Uüś“KÕūV’å×ü¦’ƒžņśJ풜žTżÆéŌłoĄž_ėūuŅż’€QżżłżČ’ ’^ž^žŪ’VżDó~ż¤žd’lņ’/’ķ)žˆČ’‹žż’ٱyž”åų1žäźxž=ܛó‘čĒ1ß’’pī K%>–o“fĀ’ŃZ©)Ā’$U–s’G?žā’ŌĖ’¾žÕ’O&’õ’½’žŽĻžīžwżf’’ģż’’żā§ūF’mžØż1ż×ü ’ ülž2žŁžüÉ’qżÜü÷ż±žJž[żQžĄżž‹’×ü'ž ’ ’Čż-ž¹’‡žhžŃžōż&žČż²žV’ä’’Ŗżāž)žQ’j’ņž”žś’’÷ž¶’’’ž’žā’Q’[’:O’’ŗ’i’“’Ä’ŗ’Ń’‚d’ P’4’Ž’fé’Q•½’ą’Ć’ŗ’/­q€ĄÖNćeoP¹¹¹—4˜(±Ö0– ¦?U·ŠlGŲiµSÖīö9’e’ĻžDž¦ž¾žģž‘ž1žžŹżcż?żż3ż‹żnż.żVžEżÅüNü:ü8üünż:ż˜üĘü×üiüĀüņüŸüyüųüäü׿™żēżāüŅüßüü:ż‰żž[ż„żżÕżkż„żsż…żėż÷ż3’b’’™žzžžĒž’K’Š’’’’ :^zūŤµœmb …õŌü“v–öźńŠÄNŌĮkż’ź’Ž’ļ’ń’<OŻ’é’-ž’¢’Ń’%<˜•­ć™Ļ9ī5A (mŌ½šŪ“ŸŖżŠ“sl€ōlN›’’īž£ž’ż=ż6ż żWż+żķü®ü“üüŅū7üüüĆū üÜū›ūrūYūūųśńśū’śGūšś ū˜śū ūųśūVūJūū„ūāś,ūgū(üüWü-żXż9ż:żÄż žæžl’f\īŠÕšVv2Õ¾­ÆŽr¹jSõפ”]āLUg3)˜’4’’Ųž†ž”ž’s’“’ē’į’“’ ’w’›’ļ’‚ŹŠ2EhĶ“Īćƒ=M¹`ä¬Ń¹w¹¬×ØÄÕ”Ń2'ČxJĄ¤šlHa’Øž€žjžž|ż•ż}ż¤ż6żżzüłū ūū‚ūįūÅū5ūū/ś¬łdłēł:śźłßłHś„ś*śįłdśpśŠśiśQūÄūHüżūwūü”ū®ūū żDžüžŁž‘žļž_’}’w„ ŚüJb‡v¹g’FS’|¶ e ģŖ5š’1To'ļ’d’מ{žŅž’Ę’Ń’ŗ’’f’2’K’’Ś’ę’ō’U®jr5š€Ō!˶}ŽHjLIźWSå“’”¬8 i“‘ėŹZ" ’7’žž’Ęž.ž»żzż$žčż§żŽü€üųū·ū üüćū{ūūTśNśEśśkłõłjśś śÅł™łęųbł>śōśńśÄś{śQśäśüś4ūEūSūü”ż<’ä’FAü’ŚQ…Ć…”ĒÉŖųłĮ’ ‡¢ßĶ#OŹÄū¼Æ¶vź’) ü’‡’Żž’“’8?ō’ą’ø’dvmG8Yž³œ—ŪŻŲŃŠżX¼óxKŹ«I¼üÅßE'¹(žb=zž Š’–’Ó’Ź’[’£žGžūż8ž·ż/ż°ü½ü ü üüÅü÷ūūū‡śśŁłvś#śśIśĖścśņł/śśś$śbśāśūkū±ūcūBūūü żŖž’c’\’­’ Į‘DČī:āąI|Ę 3I¤ķżļbŽ ˆeB!øE/Xš3ö’Ä’Õ’'€ž5ą’Ī’|”oP#u—Gź’Ę’o&É  zNÕŅG‚j#„}„ēåŪėFĄź.2ÆĄź8Õrŗwæ’ä’¤’$’^žšżæż˜ż…ż4żłü¹üóü£ü®üģū_ūśœśWū’ūūRśtś#ś+śŁłūwū³ūĖś-ū…ūü ūnūŠū¶ū$ü—ū^ü8żėžI’}’ē’³Ćå$šß}XļŸ+Ō*’žy“ _܃˜b6üœå£ä žÓĢ·yZ@=EJj ŠV$ :ށP"Ę’Å’²’ž’ō’ś’?…hE4Žn–éĄ³fŌCÓ7iļö”•ū_Y3ļĻKüI§Ž£©Ā’~’žž_ž+žIžéżfżżżRżż†ü7üRüFü“ū ū4ü|üĀū×śÅśÕśöśeūüüįū'ü7ü4üFüĄüöü ż4ż–ż»ż~ż5ż4żÉżĶž³’.¬N’Ūw©ņ¦¾Mg¶dźb»ŹūŠČū(ধĄå ®¤—~95epZGfJ=#)GdT;0õ’ģ’; µŽcŒ&ė…2“ܹÜ' tD–ōŠ0XŌ5ō¹ž“m…ōĀo]›gś’|’,’ÆžežXžUžž§ż^żż"żŠżgż§üGü˜ü‰üümüšü{ü¾ūüuü¾üąüżżŚü;żŅżdžcž{žLžžž·žūžģžµžĄžŚžüž&’H’n’—’Œ’Æ’-¶īä-s|®Qń8k@^„Ÿc†ŃĮlCN?ņßøo;(+ ąŚĖ’„|‰`Cdfsm„™¤‹’±ą?^¼‡:‡Ć ˜‡?DOZ0( a”»m&  Su’^łzZyµ›«’g’I’X’P’F’£ž.žæżńżõżžĻżGżźüŃü$żŚüåü”üČüEü=üüAż™ż&ż¬ü½üÄżHžžæż­ż7żIżžq’ó’Õ’3’’Z’å’Wd”­@łƒBµDpüŚ‚¤×ģ‘ōo”©aG ÷«`H²#„Ŗ¼ńAi:ŅSD†ŻĘ’QK`…¦¼³—©żwŠ@ɐÜ1•ä6ņ)ŻCµØ°Ü¼M4GLżåar³~uĪ }ī’Ū’Ń’ó’(Ē’”’O’ŗ’Ś’ƒ’’8’’’"’i’•’•ž ž3žÓžŠžÆžYž;žõż®ż˜żężžkžDžżż‚ž{žlžöżmžźž’’’W’’žĄžĀžb’Ī’Ž’÷’ē’ą’’ø’Seeė,Ī’1kVi+Ig}˜øÄwM]'\WŻŠ·ŖÆÉŅĄæ£™“øŃŅĆ›M(:öÖÅŗŽXCKB2 Ū’u’9’īžčžŗžęžŲžœžīż¢żŖżØż ž.žSžéżžžlžqžēžŅž¦žęž”’Ķ’H’’’A’,’±’Ż’ü’ˆ’r’h’¬’”’’M’?’w’…’š’’²’s•{%-'j› ) ‘‚Ąü’ģ(łĢļõ֓²Õ’÷²{xŖĖäŻĖ±»ļ =d˜€^c¤¢Å¾˜iˆ“Ŗšk[QT[Q?Yg)Ė©§”‘ĢĖ}7-8"G_J ?3LPä’ź’ ņ’å’Ė’ę’Ķ’Ņ’Ę’ś’ņ’Å’„’Ō’Ņ’Ć’Ā’ģ’Õ’°’§’ę’Ū’É’®’“’¹’Ņ’ś’õ’Ų’É’œ’Ł’é’ Ó’Ą’œ’†’ˆ’Š’ż’©’’‘’°’Į’Ų’Ļ’’{’Ń’ä’ü’Ž’6|®“[YĒ)14ūöd‡Ÿt[q®ĖŹŗØ¢Å@ĶŠ}¬ČåĒ„YOh”YęŅāķ܈)Ņ’¤’°’£’r’ ’Ęžfžž@ž\žIžŚżäżāżžŌżžžšżŅżöż>žƒžĘž ž“žÆž’*’ø’Ā’ ^eåč„Óńۣڶźg–^įžœ“Ŗéa,¢Z¶±lIÆ„±ļĄr=EuÄžå®{c–„ˆ›š‰YG3.IšÕĻ~ƒ“®ŽūķÖŪźõęÉÆÉ×åč乏ć 9R ÄĀķŽÓķۚ}}j]A)ē’ł’Ö’Ÿ’w’R’ ’’ķžŅžtž^žž’ż žžōżĪżŽżŻżążķż žüżężźż žYžØž×žšž’7’c’’ļ’Eu½6d€€†‹¤¦ÖÜĒ’‡‡n_R5#  īĶ·­Ŗ®¼Äø²¶½ŌŲÜŚāåźßŪ͹ž„§”•qa@ ņ’ī’Š’­’˜’“’l’X’>’/’’ēžģžļž’’:’L’V’4’.’\’’¢’Į’ä’ ö’ ?ftƒ«¬ĄĘÅ“¾³™¦¹Ą„‘TF_ty«¹f/D(!=(ž’ü’č’×’Æ’„’×’Ō’ø’’’’6’ ’ ’’’Žžµž’žlžožlžjžažažIžGžwž™žˆž”ž¶žæžŌž ’]’o’’˜’Ė’ā’Ork~–³ź*PQcYPRanqhDA7/üŪČ©—Ž‹kN. ż’ī’ć’Ō’Ų’Ē’³’£’£’Ø’„’°’Ä’¶’¢’ž’­’»’Ė’Ī’Õ’Ł’Ą’Ę’Ä’Ń’Ć’ŗ’æ’¾’Ī’Ń’Ć’É’¾’»’ŗ’Į’Ź’Ń’Ļ’Ń’Ļ’Ņ’Š’Å’Ó’Ē’Å’Ā’Ä’É’É’É’Å’Ö’Ń’Ē’Ņ’Ņ’Ś’Ń’Ų’Ž’Õ’Ģ’Ū’ä’ę’ī’ó’ó’ļ’/+81&"$,$2"*03$( ž’ž’ ,*+?B.'94&-6 $ ų’ņ’ó’ģ’ą’Ō’Ķ’Ā’°’²’Ą’»’Ø’²’“’š’ ’’’~’‡’|’z’„’Œ’w’y’q’|’z’ˆ’—’“’—’ ’Ŗ’ž’Ŗ’Ŗ’Ŗ’¢’¦’Æ’»’»’µ’²’ø’æ’Ė’Ö’Ł’ā’ī’ņ’’’ņ’ü’ü’ž’ū’ "%388;D77,>05-'&%’’÷’ķ’č’ß’Ś’Ē’Č’Å’Ē’Į’æ’¹’µ’°’®’¦’©’©’«’¤’³’¶’³’½’Č’Ē’Ü’å’ō’ń’ņ’ü’ū’ł’ż’ö’ų’ō’ż’š’ī’ń’ę’ę’š’ō’č’ķ’į’č’Ł’×’Ū’Ł’×’É’×’Č’Ć’½’Å’®’²’²’³’µ’¶’§’£’”’”’£’¢’¢’¤’›’’‘’•’™’¤’¦’­’±’Æ’ø’ø’»’ŗ’“’“’ø’»’¶’µ’²’³’Æ’¾’¼’½’¹’¶’“’Æ’¼’Ą’æ’É’Ī’Ź’Ų’Ō’Ś’Ż’Ü’ē’ņ’ņ’÷’ė’÷’ż’    ł’ų’ė’ä’č’Ū’Ū’Ł’Ü’Ń’Ō’Ī’Ņ’Ó’Ó’Ų’Š’Ń’Ļ’Ń’×’Ż’Ū’ģ’å’é’ę’ę’ń’ī’ļ’  ÷’÷’ö’ü’ū’ž’ž’ö’õ’ņ’é’ė’į’ß’Ó’ß’ć’ß’ß’ā’Ł’Ō’Ī’Č’Č’É’Ģ’Ā’“’ŗ’±’Ŗ’¢’¢’„’˜’ž’„’š’•’”’—’š’“’˜’‚’~’t’’l’u’}’ƒ’‚’•’ ’®’«’¼’Ę’Ń’Ņ’į’ē’ļ’÷’ū’$,0599KESVekgqeb`aSKM</(4" ö’ö’ń’é’ō’ē’å’Ł’Ž’Ó’Ģ’Å’Ķ’Ć’Ņ’Ņ’Ä’³’¶’ø’±’©’±’³’³’¬’¢’Ø’«’§’Ø’Æ’æ’Å’Č’Č’Ź’Ś’Ś’å’ä’š’ķ’ō’ū’ 3,FJJD=SMQISGG=KQDJES'NN1 0Iž’7%"ū’ž’ś’Ļ’+ē’»’¶’ą’Ń’Ø’ī’’’ē’°’ß’é’Ś’Ģ’Ī’’Ö’ę’ž’ ’į’EÕ’Ÿ’MÅ’ē’>1¾’ł’ü’D'=3XA*ż’;DW\DM’„’Īü’+Aą’µ­’M›’=D m’¢Ÿ’¾’"tP’ZS’#påž§+ŗ’ž’ß’Ü’6[*’ˆpŅžu¼z’Æ’ē’DŌž8"\m’Ų’³“’ł’÷’Ņ’÷’­G’ć’’r’’’÷’=Ņ’zW’3’ŃŠ’8’Ķ’*’K§’D’Ćų’˜’Ēž”Ęž£’rżž1é’*’å‚’ą’Ņ#’›^’U(’9’­’Ż’ 8žQ=’'©’ ’­’%6žµŲ’Ō’q’Cʁ’ ’Ø@’ˆ’“aš’Bž‘ž¢’­ū’ģŠżø©žę’ńž,jžx‰’vé’wžE~’:’Óæ’nn’e’Āy’’Ś’†L’³žo3’ƒ’×0’gB™’ĒžÜÕ’ˆżĶ¢’ÆžSQŲž%ü?ČžģżIŹgž¦ż½]ż“Ö0žh’Rž?’ūžāž@R’’H·’s’|"Äž±’“Z’–’Š’’=YĢ’’ų’%žG5Śž0’ųąžĀž{›Ł’VžV’öžŅ-ÅžÓ ’ō’Ä’$öåż³䒁’ŲžĮ%AżGÖü’hłžhżŠ ż¹’ąržrż+™½żö’pAżNmӇżvtļżW’Åķfü×NČS’³qŚžĖ=’É’ ’w]ż¢²ž!ƒ’Žž×ž^¼žnž,²žū’Ń’ļžŖ’š’­\’Hž[¦žA’ĖÖ’{’ēž|’žI’Ńž'ź’ÕžŠ’6’«„ż­¤’xļżė^lžtŠż#ŗźž»’ˆ’nŪžŹ’!’&’„öž žAfžŪłüˆµ’>’T żč™’P’’8CÕž5žZń’ž¬žR ”žzž#ĘRż»žø˜žIžaŸčžžßPŪxüž/n”žÖžĶ- ’æ’‡<ž6bž×'Ą’ž”³’Ēż«l’įž.’½+’’ˆü3‚wž—žX¤żĀžA’‚’#żP’·‘•ü­žé’m>’{ž^’—ž ’+FtŲüh’fŠEü ž&ż·ż¦ŽüZž\rž…8ū{€$™’¬śü|śżżČ`’/žŪpžżżjéž,éžĻˆžó’7˜ü­՞מŒĢ¤’ž?Ūżm’Ć8’č,ż'wżIüżŽ¢’.’½’„’5Åž“Źś$åž’Vū ŗüüSž@˜žŪPžAXą’”žÆ’\’UžvLEüSL!żm’ż©!’FĪž<żKū5%ž¬’fż˜’E£žq’(łžĄ€žó’f’õ*žæu’ēžQ’Š’”žIw’KÄž åż6Nčż.‘’°’• ’Īež*žńß<’ż³oū2ü¶ž•fDkżĪ²]sżģžŽžFžŁpµžižd"ŖüOkž°ßfžM’Ļ’e`ü ’YxAüžņŽžAžūžINÉžNž’I`’0üø÷’µżJ’Å3’Łż’Jžžč§’„śŹ,ž9’ ’¤D1žü’žBžIū›9°ū_Ā’7v”’Už–mž[ˆ’„%žn@WžszüŻ’/ķ’’4lž²—ž—£žŲóžęž^ž4÷żt>’.’ÖžAØ’‡’F’‚wšüqżÓ@žfžd’³Åž’÷‚’õ’ŹžM’uI›—üJB¤ž’pōbž)ķÅ’W’ϧ’iž*’ī’Xš’mŠŹČż­žŁå’ßżOLŹžéžč’!J’Rüƒł’ü<ž“1ˆ’°’Öż’ņ’ėžvžc ’V’…O’t’Č’®ž‰5žrĪśżžŒfčż¶’&V’š3’=žKW™ž|žÕĆB’Sü¤ÅĶĆżu’ę’ž’’ľ’’9’~’¬Ū’Cy’ė±žĄ’ć’\’柒&’­’Kū’@žJ’ ™’—žpžQīżžš’_–žżGÜ3ośžžń~üü3A-’²żƒ’²z²żIžvęćž’ Ā’GūžČō’d’[’¾ĀJžæ’j=]’m’ģ’Łv"-žėŒ“’!’ńåžĮž¬’šž&ˆ›8’K’÷’=ž“žƒ’JžœŗKžž’“0‘†ž„’‹A’żM†é’Õ’ó’ŗ÷žĒæm’/’’é&Äž¶’N/*’’ŠĆÅžµžĶčĮ’K’¼Ö©’’?’h§Sśžā’AŽ&ž‹łvP’8±ži±õž)’U’ĻX’P’Į’¾üHl~žĀ’ ’µ’ˆž§ĶÜ’ržeį’' U@’t’C’2’ś6%’“/„’ĪY’­:„’Õ’LŃČ’É’c’Į’³V~’Gž’R ’ćĶ5ü’0ņd#žĆ’dŻ’Å’’aP’š’1 Æ=Š£’’Vå’nĶ’ib ‡į’¤N½’1<”–d’9)’Šél’kjü’9UĀ6µ’b3]J’“ž-g;’±žĶÖų’’V&ēž;«’2¹C’J’eu’ķ’°b>Tc2cŪ’į’Góē’@’ ’Č’&`ŗ’įaü’ĖŻ’‡cł’’—’©•-’ŗ’ž’ö’ķž"UƒÖžŹ’bŚõ’#Fƒ+’qhbź’¼’21Ćó’’Vė±ü’y9<9V’ł’{ō’‚’¬.ŁŲ’drא†)ō’šĢ’6SēÆ[’!ĄÉ£’Ÿ’µņū’g’ĖU’Ū’żśž’O’m0z’õā– ›’Œ5Gā’>j˜ō’S޵’Z’Lœ:ūjį’HB’ba šŅń’ņ’«™’r°rSü’0¾Ŗ’’’läĪ>=>ś’?©’ Ņ劒’’4Y'±’&4’Pśąž1„Tż’’†e’O1ģ’¦D5`‚ķwFPb|]µ „’ō’yä­ŲŁ#’ß’FyųŌ#\f‘ ķA.[ą’ę’_YŻ\c‡„)å’p’jYĻāźé’®’ż’bŲ’›Äc{7Xć’5²ÆnT” =J_)‰Ā}f¤ å’}h†dU[ż’0ab,J–ƒō’;, TOH[8 &€Ōš[z€ B z¤S`ht0•˜lUO:ś’L–‹e„ƒkN"mt^a)BLŲ’3QtVrŽƒy$UWĘEó’g•ß’Aq.ł’,5Y^ ^‘0i–ĮK JEt/$Io5ń’v¼@ä’DX9KQQa(:kņ’[f! ND+%iEPˆ\J–w70N?/TDFÅ’ģ’?Ī’ē’g€ņ’ö’3;Ś’£’Ņ’ž’Ä’¶’ õ’Ž’¾’’’(ģ’7lÖ’ų’/">dś’ó’’’ó’Ł’Vse.f`;O,13JWoC ł’é’é’"1"ņ’č’ę’«’¦’å’’’ ö’Ā’¢’Ž’Ŗ’Ū’Ģ’±’ā’ō’Ś’“’‘’˜’ž’£’Ē’&'Ä’Ė’³’–’–’Ņ’ é’©’©’³’Ä’ß’ų’ć’”’~’†’Ÿ’‘’Ė’ ä’Ż’Ć’›’ˆ’‘’™’Ń’ų’ļ’õ’Ó’Ń’’’v’z’ ’Ī’Ń’ģ’Ģ’¶’¢’ž’¢’Ń’ł’ń’Ś’Š’Ø’‚’”’Ź’Ż’ī’ņ’Ū’Ć’µ’“’…’ ’²’Õ’Ü’³’ ’„’„’­’Ę’ß’Ģ’¶’Ŗ’’U’E’I’t’ø’¶’°’Š’»’ ’•’Š’‹’š’æ’Š’ķ’ś’Š’°’‡’l’r’u’’Ÿ’Ŗ’Š’Ā’É’§’’„’–’˜’©’µ’¶’»’›’u’^’M’J’W’d’w’|’œ’y’h’^’h’Z’i’Š’„’»’„’¦’ƒ’p’p’_’’’­’’Æ’½’˜’~’w’x’…’’’•’·’Ģ’Ē’Ŗ’˜’˜’€’p’n’Œ’–’™’™’«’“’„’‘’š’”’“’Ÿ’ŗ’·’’ ’™’‰’ƒ’ƒ’’£’£’„’”’±’”’”’{’„’w’r’‘’©’­’–’—’’’f’r’g’k’’’‹’œ’…’|’l’r’[’P’X’_’w’}’…’™’¤’…’W’_’T’G’L’b’k’i’Z’P’R’_’[’F’V’l’’Ž’Ž’’s’b’d’G’L’Z’o’k’t’‚’|’h’[’d’o’o’z’’š’–’’‰’k’R’=’:’X’q’u’o’~’m’T’M’J’W’a’|’~’’Œ’f’V’Z’Q’V’L’V’p’‰’’’l’f’K’W’u’u’‹’y’„’ƒ’o’K’>’@’?’6’W’o’w’p’t’k’W’L’H’V’d’o’q’p’\’S’:’'’’’"’0’N’[’x’~’h’Y’N’<’P’]’j’o’}’’Y’G’’’!’!’=’k’s’s’h’f’P’7’4’-’J’]’o’p’w’p’V’L’C’C’Q’r’‘’š’‰’ˆ’m’R’N’C’H’F’g’„’|’‡’‡’’‡’t’†’•’Ž’Ž’’ƒ’k’E’A’4’)’=’^’‚’”’‰’ ’”’’o’Q’M’N’^’j’s’c’Z’@’A’?’;’E’\’p’–’ž’‡’}’^’\’L’S’I’Q’e’v’…’Š’|’z’q’w’m’y’‚’‰’Œ’„’’’t’X’Z’_’r’|’’‰’™’‘’…’p’[’e’h’‚’{’|’r’n’_’D’7’)’’*’@’\’j’a’Q’V’P’;’5’,’A’Z’a’j’c’b’]’B’A’T’Z’Z’s’•’”’‚’}’m’i’f’a’i’j’‚’’’‡’ˆ’n’e’X’g’f’ƒ’’ƒ’…’†’x’]’M’J’I’O’k’~’w’x’€’n’k’^’e’Z’j’y’“’Ÿ’’’›’‘’’’l’e’ˆ’‘’‘’’‡’€’t’z’l’b’l’}’ƒ’‹’’‹’„’ƒ’’‰’”’œ’š’œ’§’£’Š’u’y’„’ƒ’‚’Š’˜’œ’‡’Œ’ƒ’…’i’r’q’’€’‚’s’x’r’j’\’^’p’{’’‰’•’‹’Š’„’’x’l’h’l’u’~’~’x’|’„’ˆ’’z’‰’”’„’Ÿ’£’Ŗ’”’›’Ž’–’›’–’Ž’›’–’’o’s’’Ž’’Œ’›’–’«’§’’‰’„’’’¦’”’™’™’š’˜’Ÿ’‰’†’Œ’¤’²’“’³’µ’®’ž’Æ’­’Æ’Ø’¶’Č’×’Ć’¦’«’Ą’Ä’“’®’Æ’Ć’Ģ’ŗ’Ę’É’æ’Į’Į’Ü’Ž’Õ’Ź’Ö’Ś’ß’Ä’É’Ń’Ż’ā’į’č’é’ń’ę’ć’Ż’Ė’Ä’Ē’Ó’ä’į’Ó’Ō’ß’Ś’Č’É’Ģ’Ö’Ž’š’š’ę’ß’Ų’Ę’×’Ė’Å’Ī’ą’ź’ä’ę’Ü’Ö’É’Ń’Ņ’Ü’×’ä’õ’ó’ō’ł’š’ń’ų’’’ö’ō’÷’ū’ł’ķ’ą’ń’ļ’ķ’õ’ó’ś’÷’é’é’Ū’ź’ī’ļ’ó’ś’ļ’ö’÷’ł’ö’ł’ö’ń’ć’å’ė’š’š’ī’č’ļ’   )-"# ó’ō’ų’ )  ž’&+2ž’ö’ ,!ū’ü’ &%#,/0 036BZ^PPM<5).8A6BKXUJSK\g_X\P;A;7FT^ZQTcaH8EECLLOMH52-#.4=E?OMFE@BIPSYFK5/2B-DFT`SFEJQWM]bb[V[VXPVQGDUdspz~znP^X[`ztsswohYVjflkyskgdRM`iie_daZ`_\_lobkelmkbnnshiecVZUYbcl~‚Šquztm^kYX\WUb]gglluwlqtyxjf`UJ`gptnmsutzvƒpwpkfbdacrŠ–œ“¦¢™„€cX_^^ly€rs‚…‡€zphldaU\]Riour€ƒ„Žvwyqnktzoq{}wtbsw||~…twqt{rfzy€…„smt|zs…Ž|އˆ“’…Š€|‹Œ“™…‚‹Šˆ‘†Š–’‰„†xt‚ˆ~}€~zuuxuq{zmtrynflt}ƒ‹“ށŒ‘ŽŠ™Œ”†–—™”˜š•—›œ™“”˜‹˜Š—Œˆ‡‡ƒŠ€‘†Šxyunm|{x}ˆˆ‹ƒ‚ˆƒ‚…“—–™ž‘“—–’™™¢™‡‰Š€„ˆ†‡…„‹ŽŽŠˆŒ„…ˆ†{€…€qmwyy}€}z„Œ‰”}€‚Š›“–Œ™’™Ž•–™˜”™ž ›””‘‰Œ‘†‡„„Žˆ„ƒ†„“‘Š“•ˆ‹•£’™––…{p~qu†|‹Žƒ‹‡prohnnzibamfinvmqsp{{y{}}}zxyutu{vywxnrhWbaddolnkakb]\XXSLOTRUcYkrrfd^b[YXPYNNRQaOIJRWX`QWQU_Xomeb]bU]Y[fdiVOK<I=EJJAHDBOVRRWYRMZOA>:=5.3910=AJEA?;8:A9:?@H<DFDKJ@@B@?2-6<7263:CKTUUYO8967)*$-' $'.49-8'2),+,'*%1.976>7A;?KLRKOB>>;939;9>?>H=4677- !   /#&*00=:41+(& ü’ś’ł’  ž’ņ’ü’ī’’’ž’ "    # ’’ų’ū’ō’ų’÷’ņ’ē’é’ć’ć’ź’ź’÷’ų’ś’ī’ö’š’ų’÷’ų’ń’ä’ó’ķ’ę’ģ’š’Ü’Ż’ä’ģ’ī’õ’ņ’ō’ķ’ń’ł’ę’ņ’ź’š’ī’ó’ł’ó’ł’š’é’ģ’č’ķ’é’ę’ņ’ķ’ē’ģ’ī’å’ą’ą’ć’Ž’Ń’Ż’Ž’Ł’Ś’Ņ’Õ’Ó’Õ’Ź’Ą’Ź’Å’Ę’Ä’Ā’Ą’Ä’Ī’Ż’Ł’ā’Ü’Ō’Ļ’Ī’Ī’Ē’Ė’Ō’Ģ’Ė’¾’Į’Ć’Į’¼’ø’Ć’Ą’É’Ż’Ś’Õ’Ź’Ę’É’Š’Ļ’Ó’Ż’Ś’Ł’Ņ’Ź’Ī’Ļ’½’“’­’³’Į’¾’¼’½’Ļ’Å’Ę’Ņ’Ń’Ö’Ę’Å’Č’Å’¾’Ę’ø’Ć’¹’¼’Ī’Ģ’Ģ’Ā’¶’¾’¼’¹’¹’Į’Ę’¶’Æ’«’°’ŗ’·’°’Æ’²’ŗ’¹’æ’Ń’Ē’ŗ’±’°’Æ’¦’®’®’Ŗ’Æ’³’Ą’»’Į’æ’¼’¼’æ’²’¹’¹’ŗ’µ’·’“’«’²’Ø’ž’¦’¬’ø’®’°’µ’±’©’°’¦’Ŗ’Ÿ’›’–’…’‘’Š’‡’‡’’†’|’ˆ’’‹’–’œ’”’”’¤’–’™’’›’˜’¢’¤’„’­’’£’”’Ø’¤’š’©’£’ ’”’”’Ž’’ˆ’Œ’’„’‡’„’„’Œ’’‰’‡’†’Ž’’“’Š’‡’„’Š’Š’‰’‹’‚’†’z’Œ’Ž’‹’‡’‘’š’ ’Ÿ’œ’’›’£’‘’“’›’Ÿ’˜’•’”’Ÿ’ ’“’™’š’™’œ’™’“’Š’’’Š’’š’Ž’’’Œ’‘’’‹’’Œ’’‹’„’€’{’x’q’libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-binance/000077500000000000000000000000001476025525100305615ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-binance/CMakeLists.txt000066400000000000000000000015311476025525100333210ustar00rootroot00000000000000project(lws-minimal-secure-streams-binance C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckIncludeFile) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-secure-streams-binance) set(SRCS main.c) set(requirements 1) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) require_lws_config(LWS_WITHOUT_EXTENSIONS 0 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-binance/README.md000066400000000000000000000050161476025525100320420ustar00rootroot00000000000000# lws minimal secure streams binance This is a Secure Streams version of minimal-ws-client-binance. "policy.json" contains all the information about endpoints, protocols and connection validation, tagged by streamtype name. The example tries to load it from the cwd, it lives in ./minimal-examples/secure-streams/minimal-secure-streams-binance dir, so either run it from there, or copy the policy.json to your cwd. It's also possible to put the policy json in the code as a string and pass that at context creation time. The secure stream object represents a nailed-up connection that outlives any single socket connection, and can manage reconnections / retries according to the policy to keep the connection nailed up automatically. Secure Streams provides the same simplified communication api without any protocol dependencies. ## build Lws must have been built with `LWS_ROLE_WS=1`, `LWS_WITH_SECURE_STREAMS=1`, and `LWS_WITHOUT_EXTENSIONS=0` ``` $ cmake . && make ``` ## Commandline Options Option|Meaning ---|--- -d|Set logging verbosity ## usage ``` $ ./bin/lws-minimal-ws-client-binance [2021/08/15 06:42:40:8409] U: LWS minimal Secure Streams binance client [2021/08/15 06:42:40:8410] N: LWS: 4.2.99-v4.2.0-156-g8f352f65e8, NET CLI SRV H1 H2 WS SS-JSON-POL SSPROX ConMon FLTINJ IPV6-on [2021/08/15 06:42:40:8410] N: ++ [495958|wsi|0|pipe] (1) [2021/08/15 06:42:40:8411] N: ++ [495958|vh|0|netlink] (1) [2021/08/15 06:42:40:8433] N: ++ [495958|vh|1|digicert||-1] (2) [2021/08/15 06:42:40:8471] N: ++ [495958|wsiSScli|0|binance] (1) [2021/08/15 06:42:40:8471] N: [495958|wsiSScli|0|binance]: lws_ss_check_next_state_ss: (unset) -> LWSSSCS_CREATING [2021/08/15 06:42:40:8472] N: [495958|wsiSScli|0|binance]: lws_ss_check_next_state_ss: LWSSSCS_CREATING -> LWSSSCS_CONNECTING [2021/08/15 06:42:40:8472] N: ++ [495958|wsicli|0|WS/h1/fstream.binance.com/([495958|wsiSScli|0|binance])] (1) [2021/08/15 06:42:41:8802] N: [495958|wsiSScli|0|binance]: lws_ss_check_next_state_ss: LWSSSCS_CONNECTING -> LWSSSCS_CONNECTED [2021/08/15 06:42:42:8803] N: sul_hz_cb: price: min: 4669185Ā¢, max: 4672159Ā¢, avg: 4670061Ā¢, (53 prices/s) [2021/08/15 06:42:42:8803] N: sul_hz_cb: elatency: min: 131ms, max: 292ms, avg: 154ms, (53 msg/s) [2021/08/15 06:42:43:8803] N: sul_hz_cb: price: min: 4669646Ā¢, max: 4672159Ā¢, avg: 4669953Ā¢, (34 prices/s) [2021/08/15 06:42:43:8803] N: sul_hz_cb: elatency: min: 130ms, max: 149ms, avg: 133ms, (34 msg/s) [2021/08/15 06:42:44:8804] N: sul_hz_cb: price: min: 4669455Ā¢, max: 4672159Ā¢, avg: 4669904Ā¢, (26 prices/s) ... ``` libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-binance/main.c000066400000000000000000000147461476025525100316650ustar00rootroot00000000000000/* * lws-minimal-secure-streams-binance * * Written in 2010-2021 by Andy Green * Kutoga * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a Secure Streams implementation of a client that connects * to binance ws server efficiently. * * Build lws with -DLWS_WITH_SECURE_STREAMS=1 -DLWS_WITHOUT_EXTENSIONS=0 * * "policy.json" contains all the information about endpoints, protocols and * connection validation, tagged by streamtype name. * * The example tries to load it from the cwd, it lives * in ./minimal-examples/secure-streams/minimal-secure-streams-binance dir, so * either run it from there, or copy the policy.json to your cwd. It's also * possible to put the policy json in the code as a string and pass that at * context creation time. */ #include #include #include #include static int interrupted; typedef struct range { uint64_t sum; uint64_t lowest; uint64_t highest; unsigned int samples; } range_t; typedef struct binance { struct lws_ss_handle *ss; void *opaque_data; lws_sorted_usec_list_t sul_hz; /* 1hz summary dump */ range_t e_lat_range; range_t price_range; } binance_t; /****** Part 1 / 3: application data processing */ static void range_reset(range_t *r) { r->sum = r->highest = 0; r->lowest = 999999999999ull; r->samples = 0; } static uint64_t get_us_timeofday(void) { struct timeval tv; gettimeofday(&tv, NULL); return (uint64_t)((lws_usec_t)tv.tv_sec * LWS_US_PER_SEC) + (uint64_t)tv.tv_usec; } static uint64_t pennies(const char *s) { uint64_t price = (uint64_t)atoll(s) * 100; s = strchr(s, '.'); if (s && isdigit(s[1]) && isdigit(s[2])) price = price + (uint64_t)((10 * (s[1] - '0')) + (s[2] - '0')); return price; } static void sul_hz_cb(lws_sorted_usec_list_t *sul) { binance_t *bin = lws_container_of(sul, binance_t, sul_hz); /* * We are called once a second to dump statistics on the connection */ lws_sul_schedule(lws_ss_get_context(bin->ss), 0, &bin->sul_hz, sul_hz_cb, LWS_US_PER_SEC); if (bin->price_range.samples) lwsl_notice("%s: price: min: %lluĀ¢, max: %lluĀ¢, avg: %lluĀ¢, " "(%d prices/s)\n", __func__, (unsigned long long)bin->price_range.lowest, (unsigned long long)bin->price_range.highest, (unsigned long long)(bin->price_range.sum / bin->price_range.samples), bin->price_range.samples); if (bin->e_lat_range.samples) lwsl_notice("%s: elatency: min: %llums, max: %llums, " "avg: %llums, (%d msg/s)\n", __func__, (unsigned long long)bin->e_lat_range.lowest / 1000, (unsigned long long)bin->e_lat_range.highest / 1000, (unsigned long long)(bin->e_lat_range.sum / bin->e_lat_range.samples) / 1000, bin->e_lat_range.samples); range_reset(&bin->e_lat_range); range_reset(&bin->price_range); } /****** Part 2 / 3: communication */ static lws_ss_state_return_t binance_rx(void *userobj, const uint8_t *in, size_t len, int flags) { binance_t *bin = (binance_t *)userobj; uint64_t latency_us, now_us; char numbuf[16]; uint64_t price; const char *p; size_t alen; now_us = (uint64_t)get_us_timeofday(); p = lws_json_simple_find((const char *)in, len, "\"depthUpdate\"", &alen); if (!p) return LWSSSSRET_OK; p = lws_json_simple_find((const char *)in, len, "\"E\":", &alen); if (!p) { lwsl_err("%s: no E JSON\n", __func__); return LWSSSSRET_OK; } lws_strnncpy(numbuf, p, alen, sizeof(numbuf)); latency_us = now_us - ((uint64_t)atoll(numbuf) * LWS_US_PER_MS); if (latency_us < bin->e_lat_range.lowest) bin->e_lat_range.lowest = latency_us; if (latency_us > bin->e_lat_range.highest) bin->e_lat_range.highest = latency_us; bin->e_lat_range.sum += latency_us; bin->e_lat_range.samples++; p = lws_json_simple_find((const char *)in, len, "\"a\":[[\"", &alen); if (!p) return LWSSSSRET_OK; lws_strnncpy(numbuf, p, alen, sizeof(numbuf)); price = pennies(numbuf); if (price < bin->price_range.lowest) bin->price_range.lowest = price; if (price > bin->price_range.highest) bin->price_range.highest = price; bin->price_range.sum += price; bin->price_range.samples++; return LWSSSSRET_OK; } static lws_ss_state_return_t binance_state(void *userobj, void *h_src, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { binance_t *bin = (binance_t *)userobj; lwsl_ss_info(bin->ss, "%s (%d), ord 0x%x", lws_ss_state_name((int)state), state, (unsigned int)ack); switch (state) { case LWSSSCS_CONNECTED: lws_sul_schedule(lws_ss_get_context(bin->ss), 0, &bin->sul_hz, sul_hz_cb, LWS_US_PER_SEC); range_reset(&bin->e_lat_range); range_reset(&bin->price_range); return LWSSSSRET_OK; case LWSSSCS_DISCONNECTED: lws_sul_cancel(&bin->sul_hz); break; default: break; } return LWSSSSRET_OK; } static const lws_ss_info_t ssi_binance = { .handle_offset = offsetof(binance_t, ss), .opaque_user_data_offset = offsetof(binance_t, opaque_data), .rx = binance_rx, .state = binance_state, .user_alloc = sizeof(binance_t), .streamtype = "binance", /* bind to corresponding policy */ }; /****** Part 3 / 3: init and event loop */ static const struct lws_extension extensions[] = { { "permessage-deflate", lws_extension_callback_pm_deflate, "permessage-deflate" "; client_no_context_takeover" "; client_max_window_bits" }, { NULL, NULL, NULL /* terminator */ } }; static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *cx; int n = 0; signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); lws_cmdline_option_handle_builtin(argc, argv, &info); lwsl_user("LWS minimal Secure Streams binance client\n"); info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_EXPLICIT_VHOSTS; info.port = CONTEXT_PORT_NO_LISTEN; /* we do not run any server */ info.fd_limit_per_thread = 1 + 1 + 1; info.extensions = extensions; info.pss_policies_json = "policy.json"; /* literal JSON, or path */ cx = lws_create_context(&info); if (!cx) { lwsl_err("lws init failed\n"); return 1; } if (lws_ss_create(cx, 0, &ssi_binance, NULL, NULL, NULL, NULL)) { lwsl_cx_err(cx, "failed to create secure stream"); interrupted = 1; } while (n >= 0 && !interrupted) n = lws_service(cx, 0); lws_context_destroy(cx); lwsl_user("Completed\n"); return 0; } libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-binance/policy.json000066400000000000000000000037051476025525100327600ustar00rootroot00000000000000{ "release": "01234567", "product": "myproduct", "schema-version": 1, "retry": [{ "default": { "backoff": [1000, 2000, 3000, 4000, 5000], "conceal": 65535, "jitterpc": 20, "svalidping": 30, "svalidhup": 35 } }], "certs": [{ "digicert_global_root": "MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQkCAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=" } ], "trust_stores": [{ "name": "digicert", "stack": ["digicert_global_root"] } ], "s": [ { "binance": { "endpoint": "fstream.binance.com", "port": 443, "protocol": "ws", "http_url": "/stream?streams=btcusdt@depth@0ms/btcusdt@bookTicker/btcusdt@aggTrade", "nailed_up": true, "ws_prioritize_reads": true, "tls": true, "tls_trust_store": "digicert", "retry": "default" } } ] } libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-blob/000077500000000000000000000000001476025525100301005ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-blob/CMakeLists.txt000066400000000000000000000110071476025525100326370ustar00rootroot00000000000000project(lws-minimal-secure-streams-blob C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-secure-streams-blob) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS 1 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY 0 requirements) require_lws_config(LWS_WITH_SYS_STATE 1 requirements) require_lws_config(LWS_WITH_GENCRYPTO 1 requirements) if (requirements) add_executable(${SAMP} minimal-secure-streams.c) find_program(VALGRIND "valgrind") if (LWS_CTEST_INTERNET_AVAILABLE AND NOT WIN32) # # When running in CI, wait for a lease on the resources # before starting this test, so the server does not get # thousands of simultaneous tls connection attempts # # sai-resource holds the lease on the resources until # the time given in seconds or the sai-resource instance # exits, whichever happens first # # If running under Sai, creates a lock test called "res_sspcmin" # sai_resource(warmcat_conns 1 40 sspcminblob) # # simple test not via proxy # if (VALGRIND) message("testing via valgrind") add_test(NAME ssblob-warmcat COMMAND ${VALGRIND} --tool=memcheck --leak-check=yes --num-callers=20 $) else() add_test(NAME ssblob-warmcat COMMAND lws-minimal-secure-streams) endif() set_tests_properties(ssblob-warmcat PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/secure-streams/minimal-secure-streams TIMEOUT 40) if (DEFINED ENV{SAI_OVN}) set_tests_properties(ssblob-warmcat PROPERTIES FIXTURES_REQUIRED "res_sspcmin") endif() if (HAS_LWS_WITH_SECURE_STREAMS_PROXY_API OR LWS_WITH_SECURE_STREAMS_PROXY_API) # # Define test dep to bring up and take down the test # proxy # if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") # uds abstract namespace for linux set(CTEST_SOCKET_PATH "@ctest-ssblobproxy-$ENV{SAI_PROJECT}-$ENV{SAI_OVN}") else() # filesystem socket for others set(CTEST_SOCKET_PATH "/tmp/ctest-ssblobproxy-$ENV{SAI_PROJECT}-$ENV{SAI_OVN}") endif() add_test(NAME st_ssblobproxy COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background.sh ssblobproxy $ -i ${CTEST_SOCKET_PATH} ) set_tests_properties(st_ssblobproxy PROPERTIES WORKING_DIRECTORY . FIXTURES_SETUP ssblobproxy TIMEOUT 800) add_test(NAME ki_ssblobproxy COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background-kill.sh ssblobproxy $ -i ${CTEST_SOCKET_PATH}) set_tests_properties(ki_ssblobproxy PROPERTIES FIXTURES_CLEANUP ssblobproxy) # # the client part that will connect to the proxy # if (VALGRIND) message("testing via valgrind") add_test(NAME sspcblob-minimal COMMAND ${VALGRIND} --tool=memcheck --leak-check=yes --num-callers=20 $ -i +${CTEST_SOCKET_PATH}) else() add_test(NAME sspcblob-minimal COMMAND lws-minimal-secure-streams-client -i +${CTEST_SOCKET_PATH}) endif() set(fixlist "ssblobproxy") if (DEFINED ENV{SAI_OVN}) list(APPEND fixlist "res_ssblobproxy") endif() set_tests_properties(sspcblob-minimal PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/secure-streams/minimal-secure-streams FIXTURES_REQUIRED "${fixlist}" TIMEOUT 40) endif() endif() if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\ni#if defined(LWS_WITH_SECURE_STREAMS_PROXY_API)\n return 0;\n #else\n fail\n #endif\n return 0;\n}\n" HAS_LWS_WITH_SECURE_STREAMS_PROXY_API) if (HAS_LWS_WITH_SECURE_STREAMS_PROXY_API OR LWS_WITH_SECURE_STREAMS_PROXY_API) add_compile_options(-DLWS_SS_USE_SSPC) add_executable(${SAMP}-client minimal-secure-streams.c) if (websockets_shared) target_link_libraries(${SAMP}-client websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP}-client websockets_shared) else() target_link_libraries(${SAMP}-client websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() endif() libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-blob/README.md000066400000000000000000000062541476025525100313660ustar00rootroot00000000000000# lws minimal secure streams The application goes to https://warmcat.com and reads index.html there. It does it using Secure Streams... the main code in minimal-secure-streams.c just sets up the context and opens a secure stream of type "mintest". The handler for state changes and payloads for "mintest" is in ss-myss.c The information about how a "mintest" stream should connect and the protocol it uses is kept separated in policy-database.c ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -f| Force connecting to the wrong endpoint to check backoff retry flow -p| Run as proxy server for clients to connect to over unix domain socket --force-portal|Force the SS Captive Portal Detection to feel it's behind a portal --force-no-internet|Force the SS Captive Portal Detection to feel it can't reach the internet --blob|Download a 50MiB blob from warmact.com, using flow control at the proxy ``` [2019/08/12 07:16:11:0045] USR: LWS minimal secure streams [-d] [-f] [2019/08/12 07:16:12:6102] USR: myss_state: LWSSSCS_CREATING, ord 0x0 [2019/08/12 07:16:12:6107] USR: myss_state: LWSSSCS_POLL, ord 0x0 [2019/08/12 07:16:12:6117] N: lws_ss_client_connect: connecting h1get warmcat.com / [2019/08/12 07:16:12:6118] USR: myss_state: LWSSSCS_CONNECTING, ord 0x0 [2019/08/12 07:16:13:4171] USR: myss_state: LWSSSCS_CONNECTED, ord 0x0 [2019/08/12 07:16:13:4222] USR: myss_rx: len 1024, flags: 1 [2019/08/12 07:16:13:4243] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4244] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4244] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4245] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4246] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4247] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4252] USR: myss_rx: len 1015, flags: 0 [2019/08/12 07:16:13:4264] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4265] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4266] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4267] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4268] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4268] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4269] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4270] USR: myss_rx: len 1015, flags: 0 [2019/08/12 07:16:13:4278] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4279] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4280] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4281] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4282] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4283] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4283] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4284] USR: myss_rx: len 1015, flags: 0 [2019/08/12 07:16:13:4287] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4288] USR: myss_rx: len 947, flags: 0 [2019/08/12 07:16:13:4293] USR: myss_rx: len 0, flags: 2 [2019/08/12 07:16:13:4399] USR: myss_state: LWSSSCS_DISCONNECTED, ord 0x0 [2019/08/12 07:16:13:4761] USR: myss_state: LWSSSCS_DESTROYING, ord 0x0 [2019/08/12 07:16:13:4781] USR: Completed: OK ``` minimal-secure-streams.c000066400000000000000000000435321476025525100345620ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-blob/* * lws-minimal-secure-streams * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * * This demonstrates a minimal http client using secure streams api. * * It visits https://warmcat.com/ and receives the html page there. * * This example is built two different ways from the same source... one includes * the policy everything needed to fulfil the stream directly. The other -client * variant has no policy itself and some other minor init changes, and connects * to the -proxy example to actually get the connection done. * * In the -client build case, the example does not even init the tls libraries * since the proxy part will take care of all that. */ #include #include #include // #define FORCE_OS_TRUST_STORE /* * uncomment to force network traffic through 127.0.0.1:1080 * * On your local machine, you can run a SOCKS5 proxy like this * * $ ssh -N -D 0.0.0.0:1080 localhost -v * * If enabled, this also fetches a remote policy that also * specifies that all traffic should go through the remote * proxy. */ // #define VIA_LOCALHOST_SOCKS static int interrupted, bad = 1, force_cpd_fail_portal, force_cpd_fail_no_internet, test_respmap, test_blob, test_ots; static unsigned int timeout_ms = 3000; static lws_state_notify_link_t nl; /* * If the -proxy app is fulfilling our connection, then we don't need to have * the policy in the client. * * When we build with LWS_SS_USE_SSPC, the apis hook up to a proxy process over * a Unix Domain Socket. To test that, you need to separately run the * ./lws-minimal-secure-streams-proxy test app on the same machine. */ #if !defined(LWS_SS_USE_SSPC) static const char * const default_ss_policy = "{" "\"release\":" "\"01234567\"," "\"product\":" "\"myproduct\"," "\"schema-version\":" "1," #if defined(VIA_LOCALHOST_SOCKS) "\"via-socks5\":" "\"127.0.0.1:1080\"," #endif "\"retry\": [" /* named backoff / retry strategies */ "{\"default\": {" "\"backoff\": [" "1000," "2000," "3000," "5000," "10000" "]," "\"conceal\":" "5," "\"jitterpc\":" "20," "\"svalidping\":" "30," "\"svalidhup\":" "35" "}}" "]," "\"certs\": [" /* named individual certificates in BASE64 DER */ /* * Let's Encrypt certs for warmcat.com / libwebsockets.org * * We fetch the real policy from there using SS and switch to * using that. */ #if !defined(FORCE_OS_TRUST_STORE) "{\"isrg_root_x1\": \"" "MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw" "TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh" "cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4" "WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu" "ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY" "MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc" "h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+" "0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U" "A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW" "T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH" "B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC" "B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv" "KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn" "OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn" "jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw" "qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI" "rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV" "HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq" "hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL" "ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ" "3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK" "NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5" "ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur" "TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC" "jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc" "oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq" "4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA" "mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d" "emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=" "\"}" #endif "]," "\"trust_stores\": [" /* named cert chains */ #if !defined(FORCE_OS_TRUST_STORE) "{" "\"name\": \"le_via_isrg\"," "\"stack\": [" "\"isrg_root_x1\"" "]" "}" #endif "]," "\"s\": [" /* * "fetch_policy" decides from where the real policy * will be fetched, if present. Otherwise the initial * policy is treated as the whole, hardcoded, policy. */ "{\"fetch_policy\": {" "\"endpoint\":" "\"warmcat.com\"," "\"port\":" "443," "\"protocol\":" "\"h1\"," "\"http_method\":" "\"GET\"," #if defined(VIA_LOCALHOST_SOCKS) "\"http_url\":" "\"policy/minimal-proxy-socks.json\"," #else "\"http_url\":" "\"policy/minimal-proxy-v4.2-v2.json\"," #endif "\"tls\":" "true," "\"opportunistic\":" "true," #if !defined(FORCE_OS_TRUST_STORE) "\"tls_trust_store\":" "\"le_via_isrg\"," #endif "\"retry\":" "\"default\"" "}},{" /* * "captive_portal_detect" describes * what to do in order to check if the path to * the Internet is being interrupted by a * captive portal. If there's a larger policy * fetched from elsewhere, it should also include * this since it needs to be done at least after * every DHCP acquisition */ "\"captive_portal_detect\": {" "\"endpoint\": \"connectivitycheck.android.com\"," "\"http_url\": \"generate_204\"," "\"port\": 80," "\"protocol\": \"h1\"," "\"http_method\": \"GET\"," "\"opportunistic\": true," "\"http_expect\": 204," "\"http_fail_redirect\": true" "}}" "]}" ; #endif typedef struct myss { struct lws_ss_handle *ss; void *opaque_data; /* ... application specific state ... */ lws_sorted_usec_list_t sul; size_t amt; struct lws_genhash_ctx hash_ctx; } myss_t; #if !defined(LWS_SS_USE_SSPC) static const char *canned_root_token_payload = "grant_type=refresh_token" "&refresh_token=Atzr|IwEBIJedGXjDqsU_vMxykqOMg" "SHfYe3CPcedueWEMWSDMaDnEmiW8RlR1Kns7Cb4B-TOSnqp7ifVsY4BMY2B8tpHfO39XP" "zfu9HapGjTR458IyHX44FE71pWJkGZ79uVBpljP4sazJuk8XS3Oe_yLnm_DIO6fU1nU3Y" "0flYmsOiOAQE_gRk_pdlmEtHnpMA-9rLw3mkY5L89Ty9kUygBsiFaYatouROhbsTn8-jW" "k1zZLUDpT6ICtBXSnrCIg0pUbZevPFhTwdXd6eX-u4rq0W-XaDvPWFO7au-iPb4Zk5eZE" "iX6sissYrtNmuEXc2uHu7MnQO1hHCaTdIO2CANVumf-PHSD8xseamyh04sLV5JgFzY45S" "KvKMajiUZuLkMokOx86rjC2Hdkx5DO7G-dbG1ufBDG-N79pFMSs7Ck5pc283IdLoJkCQc" "AGvTX8o8I29QqkcGou-9TKhOJmpX8As94T61ok0UqqEKPJ7RhfQHHYdCtsdwxgvfVr9qI" "xL_hDCcTho8opCVX-6QhJHl6SQFlTw13" "&client_id=" "amzn1.application-oa2-client.4823334c434b4190a2b5a42c07938a2d"; #endif /* secure streams payload interface */ static const uint8_t expected_blob_hash[] = { 0xed, 0x57, 0x20, 0xc1, 0x68, 0x30, 0x81, 0x0e, 0x58, 0x29, 0xdf, 0xb9, 0xb6, 0x6c, 0x96, 0xb2, 0xe2, 0x4e, 0xfc, 0x4f, 0x93, 0xaa, 0x5e, 0x38, 0xc7, 0xff, 0x41, 0x50, 0xd3, 0x1c, 0xfb, 0xbf }; static lws_ss_state_return_t myss_rx(void *userobj, const uint8_t *buf, size_t len, int flags) { myss_t *m = (myss_t *)userobj; const char *md_srv = "not set", *md_test = "not set"; size_t md_srv_len = 7, md_test_len = 7; if (flags & LWSSS_FLAG_PERF_JSON) return LWSSSSRET_OK; if (test_blob) { if (flags & LWSSS_FLAG_SOM) { if (lws_genhash_init(&m->hash_ctx, LWS_GENHASH_TYPE_SHA256)) lwsl_err("%s: hash init failed\n", __func__); m->amt = 0; } if (lws_genhash_update(&m->hash_ctx, buf, len)) lwsl_err("%s: hash failed\n", __func__); if ((m->amt + len) / 102400 != (m->amt / 102400)) { lwsl_user("%s: blob test: rx %uKiB\n", __func__, (unsigned int)((m->amt + len) / 1024)); /* * Let's make it hard for client to keep up with onward * server, delay 50ms after every 100K received, so we * are forcing the flow control action at the proxy */ usleep(50000); } m->amt += len; if (flags & LWSSS_FLAG_EOM) { uint8_t digest[32]; lws_genhash_destroy(&m->hash_ctx, digest); if (!memcmp(expected_blob_hash, digest, 32)) { lwsl_user("%s: SHA256 match\n", __func__); bad = 0; } interrupted = 1; } return LWSSSSRET_OK; } lws_ss_get_metadata(m->ss, "srv", (const void **)&md_srv, &md_srv_len); lws_ss_get_metadata(m->ss, "test", (const void **)&md_test, &md_test_len); lwsl_user("%s: len %d, flags: %d, srv: %.*s, test: %.*s\n", __func__, (int)len, flags, (int)md_srv_len, md_srv, (int)md_test_len, md_test); lwsl_hexdump_info(buf, len); /* * If we received the whole message, for our example it means * we are done. */ if (flags & LWSSS_FLAG_EOM) { bad = 0; interrupted = 1; } return LWSSSSRET_OK; } static lws_ss_state_return_t myss_tx(void *userobj, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len, int *flags) { //myss_t *m = (myss_t *)userobj; /* in this example, we don't send stuff */ return LWSSSSRET_TX_DONT_SEND; } static lws_ss_state_return_t myss_state(void *userobj, void *sh, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { myss_t *m = (myss_t *)userobj; lwsl_user("%s: %s (%d), ord 0x%x\n", __func__, lws_ss_state_name((int)state), state, (unsigned int)ack); switch (state) { case LWSSSCS_CREATING: return lws_ss_client_connect(m->ss); case LWSSSCS_CONNECTING: lws_ss_start_timeout(m->ss, timeout_ms); if (!test_blob) { if (lws_ss_set_metadata(m->ss, "uptag", "myuptag123", 10)) /* can fail, eg due to OOM, retry later if so */ return LWSSSSRET_DISCONNECT_ME; if (lws_ss_set_metadata(m->ss, "ctype", "myctype", 7)) /* can fail, eg due to OOM, retry later if so */ return LWSSSSRET_DISCONNECT_ME; } break; case LWSSSCS_ALL_RETRIES_FAILED: /* if we're out of retries, we want to close the app and FAIL */ interrupted = 1; bad = 2; break; case LWSSSCS_QOS_ACK_REMOTE: lwsl_notice("%s: LWSSSCS_QOS_ACK_REMOTE\n", __func__); break; case LWSSSCS_TIMEOUT: lwsl_notice("%s: LWSSSCS_TIMEOUT\n", __func__); /* if we're out of time */ interrupted = 1; bad = 3; break; case LWSSSCS_USER_BASE: lwsl_notice("%s: LWSSSCS_USER_BASE\n", __func__); break; default: break; } return LWSSSSRET_OK; } static int app_system_state_nf(lws_state_manager_t *mgr, lws_state_notify_link_t *link, int current, int target) { struct lws_context *context = lws_system_context_from_system_mgr(mgr); #if !defined(LWS_SS_USE_SSPC) lws_system_blob_t *ab = lws_system_get_blob(context, LWS_SYSBLOB_TYPE_AUTH, 1 /* AUTH_IDX_ROOT */); size_t size; #endif /* * For the things we care about, let's notice if we are trying to get * past them when we haven't solved them yet, and make the system * state wait while we trigger the dependent action. */ switch (target) { #if !defined(LWS_SS_USE_SSPC) /* * The proxy takes responsibility for this stuff if we get things * done through that */ case LWS_SYSTATE_INITIALIZED: /* overlay on the hardcoded policy */ case LWS_SYSTATE_POLICY_VALID: /* overlay on the loaded policy */ if (target != current) break; if (force_cpd_fail_portal) /* this makes it look like we're behind a captive portal * because the overriden address does a redirect */ lws_ss_policy_overlay(context, "{\"s\": [{\"captive_portal_detect\": {" "\"endpoint\": \"google.com\"," "\"http_url\": \"/\"," "\"port\": 80" "}}]}"); if (force_cpd_fail_no_internet) /* this looks like no internet, because the overridden * port doesn't have anything that will connect to us */ lws_ss_policy_overlay(context, "{\"s\": [{\"captive_portal_detect\": {" "\"endpoint\": \"warmcat.com\"," "\"http_url\": \"/\"," "\"port\": 999" "}}]}"); break; case LWS_SYSTATE_REGISTERED: size = lws_system_blob_get_size(ab); if (size) break; /* let's register our canned root token so auth can use it */ lws_system_blob_direct_set(ab, (const uint8_t *)canned_root_token_payload, strlen(canned_root_token_payload)); break; #endif case LWS_SYSTATE_OPERATIONAL: if (current == LWS_SYSTATE_OPERATIONAL) { lws_ss_info_t ssi; /* We're making an outgoing secure stream ourselves */ memset(&ssi, 0, sizeof(ssi)); ssi.handle_offset = offsetof(myss_t, ss); ssi.opaque_user_data_offset = offsetof(myss_t, opaque_data); ssi.rx = myss_rx; ssi.tx = myss_tx; ssi.state = myss_state; ssi.user_alloc = sizeof(myss_t); ssi.streamtype = test_ots ? "mintest-ots" : (test_blob ? "bulkproxflow" : (test_respmap ? "respmap" : "mintest")); if (lws_ss_create(context, 0, &ssi, NULL, NULL, NULL, NULL)) { lwsl_err("%s: failed to create secure stream\n", __func__); return -1; } } break; } return 0; } static lws_state_notify_link_t * const app_notifier_list[] = { &nl, NULL }; #if defined(LWS_WITH_SYS_METRICS) static int my_metric_report(lws_metric_pub_t *mp) { lws_metric_bucket_t *sub = mp->u.hist.head; char buf[192]; do { if (lws_metrics_format(mp, &sub, buf, sizeof(buf))) lwsl_user("%s: %s\n", __func__, buf); } while ((mp->flags & LWSMTFL_REPORT_HIST) && sub); /* 0 = leave metric to accumulate, 1 = reset the metric */ return 1; } static const lws_system_ops_t system_ops = { .metric_report = my_metric_report, }; #endif static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; int n = 0, expected = 0; const char *p; signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); lws_cmdline_option_handle_builtin(argc, argv, &info); lwsl_user("LWS secure streams test client [-d]\n"); /* these options are mutually exclusive if given */ if (lws_cmdline_option(argc, argv, "--force-portal")) force_cpd_fail_portal = 1; if (lws_cmdline_option(argc, argv, "--force-no-internet")) force_cpd_fail_no_internet = 1; if (lws_cmdline_option(argc, argv, "--respmap")) test_respmap = 1; if (lws_cmdline_option(argc, argv, "--ots")) /* * Use a streamtype that relies on the OS trust store for * validation */ test_ots = 1; if ((p = lws_cmdline_option(argc, argv, "--timeout_ms"))) timeout_ms = (unsigned int)atoi(p); if (lws_cmdline_option(argc, argv, "--blob")) { test_blob = 1; if (timeout_ms == 3000) /* * Don't use default 3s, we're going to be a lot * slower */ timeout_ms = 60000; } info.fd_limit_per_thread = 1 + 6 + 1; info.port = CONTEXT_PORT_NO_LISTEN; #if defined(LWS_SS_USE_SSPC) info.protocols = lws_sspc_protocols; { const char *p; /* connect to ssproxy via UDS by default, else via * tcp connection to this port */ if ((p = lws_cmdline_option(argc, argv, "-p"))) info.ss_proxy_port = (uint16_t)atoi(p); /* UDS "proxy.ss.lws" in abstract namespace, else this socket * path; when -p given this can specify the network interface * to bind to */ if ((p = lws_cmdline_option(argc, argv, "-i"))) info.ss_proxy_bind = p; /* if -p given, -a specifies the proxy address to connect to */ if ((p = lws_cmdline_option(argc, argv, "-a"))) info.ss_proxy_address = p; } #else info.pss_policies_json = default_ss_policy; info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_H2_JUST_FIX_WINDOW_UPDATE_OVERFLOW | LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; #endif #if defined(LWS_WITH_MBEDTLS) /* uncomment to force mbedtls to load a system trust store like * openssl does * * info.mbedtls_client_preload_filepath = * "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem"; */ #endif /* integrate us with lws system state management when context created */ nl.name = "app"; nl.notify_cb = app_system_state_nf; info.register_notifier_list = app_notifier_list; #if defined(LWS_WITH_SYS_METRICS) info.system_ops = &system_ops; info.metrics_prefix = "ssmex"; #endif /* create the context */ context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); goto bail; } #if !defined(LWS_SS_USE_SSPC) /* * If we're being a proxied client, the proxy does all this */ /* * Set the related lws_system blobs * * ...direct_set() sets a pointer, so the thing pointed to has to have * a suitable lifetime, eg, something that already exists on the heap or * a const string in .rodata like this */ lws_system_blob_direct_set(lws_system_get_blob(context, LWS_SYSBLOB_TYPE_DEVICE_SERIAL, 0), (const uint8_t *)"SN12345678", 10); lws_system_blob_direct_set(lws_system_get_blob(context, LWS_SYSBLOB_TYPE_DEVICE_FW_VERSION, 0), (const uint8_t *)"v0.01", 5); /* * ..._heap_append() appends to a buflist kind of arrangement on heap, * just one block is fine, otherwise it will concatenate the fragments * in the order they were appended (and take care of freeing them at * context destroy time). ..._heap_empty() is also available to remove * everything that was already allocated. * * Here we use _heap_append() just so it's tested as well as direct set. */ lws_system_blob_heap_append(lws_system_get_blob(context, LWS_SYSBLOB_TYPE_DEVICE_TYPE, 0), (const uint8_t *)"spacerocket", 11); #endif /* the event loop */ while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); bail: if ((p = lws_cmdline_option(argc, argv, "--expected-exit"))) expected = atoi(p); if (bad == expected) { lwsl_user("Completed: OK (seen expected %d)\n", expected); return 0; } else lwsl_err("Completed: failed: exit %d, expected %d\n", bad, expected); return 1; } libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-client-tx/000077500000000000000000000000001476025525100310715ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-client-tx/CMakeLists.txt000066400000000000000000000050571476025525100336400ustar00rootroot00000000000000project(lws-minimal-secure-streams-client-tx C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-secure-streams-client-tx) set(SRCS minimal-secure-streams-client-tx.c) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS 1 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS_PROXY_API 1 requirements) require_lws_config(LWS_WITH_SYS_STATE 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) add_compile_options(-DLWS_SS_USE_SSPC) find_program(VALGRIND "valgrind") if (LWS_CTEST_INTERNET_AVAILABLE AND NOT WIN32) # # Define test dep to bring up and take down the test # proxy # if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") # uds abstract namespace for linux set(CTEST_SOCKET_PATH "@ctest-sspctx-$ENV{SAI_PROJECT}-$ENV{SAI_OVN}") else() # filesystem socket for others set(CTEST_SOCKET_PATH "/tmp/ctest-sspctx-$ENV{SAI_PROJECT}-$ENV{SAI_OVN}") endif() add_test(NAME st_ssproxyctx COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background.sh ssproxyctx $ -i ${CTEST_SOCKET_PATH} ) set_tests_properties(st_ssproxyctx PROPERTIES WORKING_DIRECTORY . FIXTURES_SETUP ssproxyctx TIMEOUT 800) add_test(NAME ki_ssproxyctx COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background-kill.sh ssproxyctx $ -i ${CTEST_SOCKET_PATH}) set_tests_properties(ki_ssproxyctx PROPERTIES FIXTURES_CLEANUP ssproxyctx) # # the client part that will connect to the proxy # if (VALGRIND) message("testing via valgrind") add_test(NAME sspc-minimaltx COMMAND ${VALGRIND} --tool=memcheck --leak-check=yes --num-callers=20 $ -i +${CTEST_SOCKET_PATH}) else() add_test(NAME sspc-minimaltx COMMAND lws-minimal-secure-streams-client-tx -i +${CTEST_SOCKET_PATH}) endif() set_tests_properties(sspc-minimaltx PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/secure-streams/minimal-secure-streams-client-tx FIXTURES_REQUIRED "ssproxyctx" TIMEOUT 40) endif() if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-client-tx/README.md000066400000000000000000000032001476025525100323430ustar00rootroot00000000000000# lws minimal secure streams client tx The application connects to the secure stream proxy, and opens a streamtype "spam"... this is a websocket connection to libwebsockets.org. It then issues 100 x ws messages at 20Hz and exits. ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -f| Force connecting to the wrong endpoint to check backoff retry flow -p| Run as proxy server for clients to connect to over unix domain socket ``` [2021/02/19 11:25:20:1396] U: LWS secure streams client TX [-d] [2021/02/19 11:25:20:1756] N: LWS: 4.1.99-v4.1.0-280-ga329c51485, loglevel 1031 [2021/02/19 11:25:20:1761] N: NET CLI SRV H1 H2 WS SS-JSON-POL SSPROX IPV6-on [2021/02/19 11:25:20:2055] N: ++ [1100944|wsi|0|pipe] (1) [2021/02/19 11:25:20:2133] N: ++ [1100944|vh|0|netlink] (1) [2021/02/19 11:25:20:3647] N: ++ [1100944|vh|1|default] (2) [2021/02/19 11:25:20:8590] N: ++ [1100944|SSPcli|0|spam] (1) [2021/02/19 11:25:20:8810] N: ++ [1100944|wsiSSPcli|0|RAW/raw-skt/+@proxy.ss.lws/([1100944|SSPcli|0|spam])] (1) [2021/02/19 11:25:20:9103] N: lws_sspc_sul_retry_cb: [1100944|wsiSSPcli|0|RAW/raw-skt/+@proxy.ss.lws/([1100944|SSPcli|0|spam|default])] [2021/02/19 11:25:20:9795] U: myss_state: LWSSSCS_CREATING, ord 0x0 [2021/02/19 11:25:20:9869] U: myss_state: LWSSSCS_CONNECTING, ord 0x0 [2021/02/19 11:25:21:0791] U: myss_state: LWSSSCS_CONNECTED, ord 0x0 [2021/02/19 11:25:21:1444] U: myss_tx: sending pkt 1 [2021/02/19 11:25:21:1945] U: myss_tx: sending pkt 2 [2021/02/19 11:25:21:2459] U: myss_tx: sending pkt 3 [2021/02/19 11:25:21:2971] U: myss_tx: sending pkt 4 ... ``` minimal-secure-streams-client-tx.c000066400000000000000000000112111476025525100374450ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-client-tx/* * lws-minimal-secure-streams-tx * * Written in 2010-2021 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * * This demonstrates proxied mass tx from secure streams, this example is a * client that has no policy of its own, but gets stuff done via the ss proxy. * * It opens a websocket stream and fires 100 x small 80-byte payloads on it * at 20Hz (50ms) */ #define LWS_SS_USE_SSPC #include #include #include #define PKT_SIZE 80 #define RATE_US 50000 static int interrupted, bad = 1, reads = 100; typedef struct myss { struct lws_ss_handle *ss; void *opaque_data; /* ... application specific state ... */ lws_sorted_usec_list_t sul; int count; char due; } myss_t; /* secure streams payload interface */ static lws_ss_state_return_t myss_rx(void *userobj, const uint8_t *buf, size_t len, int flags) { /* this example isn't interested in rx */ return LWSSSSRET_OK; } static void txcb(struct lws_sorted_usec_list *sul) { myss_t *m = lws_container_of(sul, myss_t, sul); /* * We want to do 100 of these ws messages, and then exit, so we can run * this as a pass / fail test. */ if (m->count == reads) { interrupted = 1; bad = 0; } else { m->due = 1; lws_ss_request_tx(m->ss); } lws_sul_schedule(lws_ss_get_context(m->ss), 0, &m->sul, txcb, RATE_US); } static lws_ss_state_return_t myss_tx(void *userobj, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len, int *flags) { myss_t *m = (myss_t *)userobj; if (!m->due) return LWSSSSRET_TX_DONT_SEND; m->due = 0; if (lws_get_random(lws_ss_get_context(m->ss), buf, PKT_SIZE) != PKT_SIZE) return LWSSSSRET_TX_DONT_SEND; *len = PKT_SIZE; *flags = LWSSS_FLAG_SOM | LWSSS_FLAG_EOM; m->count++; lws_sul_schedule(lws_ss_get_context(m->ss), 0, &m->sul, txcb, RATE_US); lwsl_user("%s: sending pkt %d\n", __func__, m->count); return LWSSSSRET_OK; } static lws_ss_state_return_t myss_state(void *userobj, void *sh, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { myss_t *m = (myss_t *)userobj; struct lws_context *context = lws_ss_get_context(m->ss); lwsl_user("%s: %s, ord 0x%x\n", __func__, lws_ss_state_name((int)state), (unsigned int)ack); switch (state) { case LWSSSCS_CREATING: return lws_ss_client_connect(m->ss); case LWSSSCS_CONNECTED: lws_sul_schedule(context, 0, &m->sul, txcb, RATE_US); break; case LWSSSCS_DISCONNECTED: lws_sul_cancel(&m->sul); break; case LWSSSCS_ALL_RETRIES_FAILED: /* if we're out of retries, we want to close the app and FAIL */ interrupted = 1; break; default: break; } return 0; } static void sigint_handler(int sig) { interrupted = 1; } static const lws_ss_info_t ssi = { .handle_offset = offsetof(myss_t, ss), .opaque_user_data_offset = offsetof(myss_t, opaque_data), .rx = myss_rx, .tx = myss_tx, .state = myss_state, .user_alloc = sizeof(myss_t), .streamtype = "spam" }; int main(int argc, const char **argv) { int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; struct lws_context_creation_info info; struct lws_context *context; const char *p; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); if ((p = lws_cmdline_option(argc, argv, "-c"))) reads = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS secure streams client TX [-d]\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.fd_limit_per_thread = 1 + 6 + 1; info.port = CONTEXT_PORT_NO_LISTEN; info.protocols = lws_sspc_protocols; { const char *p; /* connect to ssproxy via UDS by default, else via * tcp connection to this port */ if ((p = lws_cmdline_option(argc, argv, "-p"))) info.ss_proxy_port = (uint16_t)atoi(p); /* UDS "proxy.ss.lws" in abstract namespace, else this socket * path; when -p given this can specify the network interface * to bind to */ if ((p = lws_cmdline_option(argc, argv, "-i"))) info.ss_proxy_bind = p; /* if -p given, -a specifies the proxy address to connect to */ if ((p = lws_cmdline_option(argc, argv, "-a"))) info.ss_proxy_address = p; } context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); goto bail1; } if (lws_ss_create(context, 0, &ssi, NULL, NULL, NULL, NULL)) { lwsl_err("%s: create secure stream failed\n", __func__); goto bail; } /* the event loop */ while (n >= 0 && !interrupted) n = lws_service(context, 0); bail: lws_context_destroy(context); bail1: lwsl_user("Completed: %s\n", bad ? "failed" : "OK"); return bad; } libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-cpp/000077500000000000000000000000001476025525100277445ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-cpp/CMakeLists.txt000066400000000000000000000035511476025525100325100ustar00rootroot00000000000000project(lws-minimal-secure-streams-cpp CXX) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-secure-streams-cpp) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) require_lws_config(LWS_WITH_MBEDTLS 0 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS 1 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS_CPP 1 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY 0 requirements) if (requirements) add_executable(${SAMP} main.cxx) if (LWS_CTEST_INTERNET_AVAILABLE) add_test(NAME sscpp-warmcat COMMAND lws-minimal-secure-streams-cpp) set_tests_properties(sscpp-warmcat PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/secure-streams/minimal-secure-streams-cpp TIMEOUT 20) endif() if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\ni#if defined(LWS_WITH_SECURE_STREAMS_PROXY_API)\n return 0;\n #else\n fail\n #endif\n return 0;\n}\n" HAS_LWS_WITH_SECURE_STREAMS_PROXY_API) if (HAS_LWS_WITH_SECURE_STREAMS_PROXY_API OR LWS_WITH_SECURE_STREAMS_PROXY_API) add_compile_options(-DLWS_SS_USE_SSPC) add_executable(${SAMP}-client main.cxx) if (websockets_shared) target_link_libraries(${SAMP}-client websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP}-client websockets_shared) else() target_link_libraries(${SAMP}-client websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() endif() libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-cpp/main.cxx000066400000000000000000000044101476025525100314130ustar00rootroot00000000000000/* * lws-minimal-secure-streams-cpp * * Written in 2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal http client using secure streams C++ api to * fetch files over https to the local filesystem */ #include #include #include static int interrupted, bad = 1, concurrent = 1, completed; static int lss_completion(lss *lss, lws_ss_constate_t state, void *arg) { lssFile *lf = (lssFile *)lss; if (state == LWSSSCS_QOS_ACK_REMOTE) { lwsl_notice("%s: %s: len %llu, done OK %dms\n", __func__, lf->path.c_str(), (unsigned long long)lf->rxlen, (int)((lws_now_usecs() - lf->us_start) / 1000)); } else lwsl_notice("%s: %s: failed\n", __func__, lf->path.c_str()); if (++completed == concurrent) { interrupted = 1; bad = 0; } return 0; } static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); lws_cmdline_option_handle_builtin(argc, argv, &info); if ((p = lws_cmdline_option(argc, argv, "-c"))) concurrent = atoi(p); if (concurrent > 12) concurrent = 12; lwsl_user("LWS secure streams cpp test client " "[-d] [-c]\n"); info.fd_limit_per_thread = 1 + 12 + 1; info.port = CONTEXT_PORT_NO_LISTEN; info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; /* create the context */ context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } try { for (int n = 0; n < concurrent; n++) { std::string url, filepath; url = "https://warmcat.com/test-"; url += ('a' + n); url += ".bin"; filepath = "/tmp/test-"; filepath += ('a' + n); filepath += ".bin"; new lssFile(context, url, filepath, lss_completion, 0); } } catch (std::exception &e) { lwsl_err("%s: failed to create ss: %s\n", __func__, e.what()); interrupted = 1; } /* the event loop */ while (!interrupted && lws_service(context, 0) >= 0) ; lws_context_destroy(context); lwsl_user("Completed: %s\n", bad ? "failed" : "OK"); return bad; } libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-hugeurl/000077500000000000000000000000001476025525100306355ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-hugeurl/CMakeLists.txt000066400000000000000000000107751476025525100334070ustar00rootroot00000000000000project(lws-minimal-secure-streams-hugeurl C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-secure-streams-hugeurl) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS 1 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY 0 requirements) require_lws_config(LWS_WITH_SYS_STATE 1 requirements) if (requirements) add_executable(${SAMP} minimal-secure-streams.c) find_program(VALGRIND "valgrind") if (LWS_CTEST_INTERNET_AVAILABLE AND NOT WIN32) # # When running in CI, wait for a lease on the resources # before starting this test, so the server does not get # thousands of simultaneous tls connection attempts # # sai-resource holds the lease on the resources until # the time given in seconds or the sai-resource instance # exits, whichever happens first # # If running under Sai, creates a lock test called "res_sspcmin_hurl" # sai_resource(warmcat_conns 1 40 sspcmin_hurl) # # simple test not via proxy # if (VALGRIND) message("testing via valgrind") add_test(NAME ss-warmcat-hurl COMMAND ${VALGRIND} --tool=memcheck --leak-check=yes --num-callers=20 $) else() add_test(NAME ss-warmcat-hurl COMMAND lws-minimal-secure-streams-hugeurl) endif() set_tests_properties(ss-warmcat-hurl PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/secure-streams/minimal-secure-streams TIMEOUT 20) if (DEFINED ENV{SAI_OVN}) set_tests_properties(ss-warmcat-hurl PROPERTIES FIXTURES_REQUIRED "res_sspcmin_hurl") endif() if (HAS_LWS_WITH_SECURE_STREAMS_PROXY_API OR LWS_WITH_SECURE_STREAMS_PROXY_API) # # Define test dep to bring up and take down the test # proxy # if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") # uds abstract namespace for linux set(CTEST_SOCKET_PATH "@ctest-ssp-hurl-$ENV{SAI_PROJECT}-$ENV{SAI_OVN}") else() # filesystem socket for others set(CTEST_SOCKET_PATH "/tmp/ctest-ssp-hurl-$ENV{SAI_PROJECT}-$ENV{SAI_OVN}") endif() add_test(NAME st_ssproxy-hurl COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background.sh ssproxy-hurl $ -i ${CTEST_SOCKET_PATH} ) set_tests_properties(st_ssproxy-hurl PROPERTIES WORKING_DIRECTORY . FIXTURES_SETUP ssproxy-hurl TIMEOUT 800) add_test(NAME ki_ssproxy-hurl COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background-kill.sh ssproxy-hurl $ -i ${CTEST_SOCKET_PATH}) set_tests_properties(ki_ssproxy-hurl PROPERTIES FIXTURES_CLEANUP ssproxy-hurl) # # the client part that will connect to the proxy # if (VALGRIND) message("testing via valgrind") add_test(NAME sspc-minimal-hurl COMMAND ${VALGRIND} --tool=memcheck --leak-check=yes --num-callers=20 $ -i +${CTEST_SOCKET_PATH}) else() add_test(NAME sspc-minimal-hurl COMMAND lws-minimal-secure-streams-client -i +${CTEST_SOCKET_PATH}) endif() set(fixlist "ssproxy-hurl") if (DEFINED ENV{SAI_OVN}) list(APPEND fixlist "res_ssproxy-hurl") endif() set_tests_properties(sspc-minimal-hurl PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/secure-streams/minimal-secure-streams FIXTURES_REQUIRED "${fixlist}" TIMEOUT 40) endif() endif() if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\ni#if defined(LWS_WITH_SECURE_STREAMS_PROXY_API)\n return 0;\n #else\n fail\n #endif\n return 0;\n}\n" HAS_LWS_WITH_SECURE_STREAMS_PROXY_API) if (HAS_LWS_WITH_SECURE_STREAMS_PROXY_API OR LWS_WITH_SECURE_STREAMS_PROXY_API) add_compile_options(-DLWS_SS_USE_SSPC) add_executable(${SAMP}-client minimal-secure-streams.c) if (websockets_shared) target_link_libraries(${SAMP}-client websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP}-client websockets_shared) else() target_link_libraries(${SAMP}-client websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() endif() libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-hugeurl/README.md000066400000000000000000000121361476025525100321170ustar00rootroot00000000000000# lws minimal secure streams hugeurl This application sends a huge url to httpbin.org, by default 4000 bytes in a urlarg ?x=xxxxxx..., where the argument is a random string in hex. Notice that httpbin.org has its own limit for urlsize, of 4094 bytes for the entire URL. ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -h |Default 4000 --h1|Force http/1.1 instead of default h2 ``` [2021/03/02 16:38:00:2662] U: LWS secure streams hugeurl test client [-d][-h ] [2021/03/02 16:38:00:2662] U: main: huge argument size: 4000 bytes [2021/03/02 16:38:00:2662] N: LWS: 4.1.99-v4.1.0-294-g85c1fe07a7, loglevel 1031 [2021/03/02 16:38:00:2662] N: NET CLI SRV H1 H2 WS SS-JSON-POL SSPROX IPV6-on [2021/03/02 16:38:00:2663] N: ++ [1903157|wsi|0|pipe] (1) [2021/03/02 16:38:00:2663] N: ++ [1903157|vh|0|netlink] (1) [2021/03/02 16:38:00:2677] N: ++ [1903157|vh|1|_ss_default||-1] (2) [2021/03/02 16:38:00:2736] N: ++ [1903157|vh|2|arca1||-1] (3) [2021/03/02 16:38:00:2798] N: ++ [1903157|wsiSScli|0|captive_portal_detect] (1) [2021/03/02 16:38:00:2798] N: lws_ss_check_next_state: [1903157|wsiSScli|0|captive_portal_detect]: (unset) -> LWSSSCS_CREATING [2021/03/02 16:38:00:2798] N: lws_ss_check_next_state: [1903157|wsiSScli|0|captive_portal_detect]: LWSSSCS_CREATING -> LWSSSCS_POLL [2021/03/02 16:38:00:2800] N: lws_ss_check_next_state: [1903157|wsiSScli|0|captive_portal_detect]: LWSSSCS_POLL -> LWSSSCS_CONNECTING [2021/03/02 16:38:00:2801] N: ++ [1903157|wsicli|0|GET/h1/connectivitycheck.android.com/([1903157|wsiSScli|0|captive_portal_det] (1) [2021/03/02 16:38:00:3227] W: lws_metrics_hist_bump_priv_tagged: 'ss="captive_portal_detect",http_resp="204"' [2021/03/02 16:38:00:3227] N: lws_ss_check_next_state: [1903157|wsiSScli|0|captive_portal_detect|204]: LWSSSCS_CONNECTING -> LWSSSCS_CONNECTED [2021/03/02 16:38:00:3227] N: lws_ss_check_next_state: [1903157|wsiSScli|0|captive_portal_detect|204]: LWSSSCS_CONNECTED -> LWSSSCS_QOS_ACK_REMOTE [2021/03/02 16:38:00:3227] N: lws_system_cpd_set: setting CPD result OK [2021/03/02 16:38:00:3227] N: lws_ss_check_next_state: [1903157|wsiSScli|0|captive_portal_detect|204]: LWSSSCS_QOS_ACK_REMOTE -> LWSSSCS_DISCONNECTED [2021/03/02 16:38:00:3228] N: lws_ss_check_next_state: [1903157|wsiSScli|0|captive_portal_detect|204]: LWSSSCS_DISCONNECTED -> LWSSSCS_DESTROYING [2021/03/02 16:38:00:3228] N: -- [1903157|wsiSScli|0|captive_portal_detect|204] (0) 42.928ms [2021/03/02 16:38:00:3231] N: -- [1903157|wsicli|0|GET/h1/connectivitycheck.android.com/([1903157|wsiSScli|0|captive_portal_det] (0) 42.994ms [2021/03/02 16:38:00:3853] N: ++ [1903157|wsiSScli|1|httpbin_anything] (1) [2021/03/02 16:38:00:3854] N: lws_ss_check_next_state: [1903157|wsiSScli|1|httpbin_anything]: (unset) -> LWSSSCS_CREATING [2021/03/02 16:38:00:3854] U: myss_state: LWSSSCS_CREATING (1), ord 0x0 [2021/03/02 16:38:00:3855] N: lws_ss_check_next_state: [1903157|wsiSScli|1|httpbin_anything]: LWSSSCS_CREATING -> LWSSSCS_CONNECTING [2021/03/02 16:38:00:3855] U: myss_state: LWSSSCS_CONNECTING (6), ord 0x0 [2021/03/02 16:38:00:3855] N: ++ [1903157|wsicli|1|GET/h1/httpbin.org/([1903157|wsiSScli|1|httpbin_anything])] (1) [2021/03/02 16:38:00:6855] N: ++ [1903157|mux|0|h2_sid1_(1903157|wsicli|1)] (1) [2021/03/02 16:38:00:6857] N: secstream_h1: [1903157|wsiSScli|1|httpbin_anything] no handle / tx [2021/03/02 16:38:00:7904] W: lws_metrics_hist_bump_priv_tagged: 'ss="httpbin_anything",http_resp="200"' [2021/03/02 16:38:00:7904] N: lws_ss_check_next_state: [1903157|wsiSScli|1|httpbin_anything|200]: LWSSSCS_CONNECTING -> LWSSSCS_CONNECTED [2021/03/02 16:38:00:7904] U: myss_state: LWSSSCS_CONNECTED (5), ord 0x0 [2021/03/02 16:38:00:7907] U: myss_rx: return hugeurl len 4000 matches OK [2021/03/02 16:38:00:7907] N: lws_ss_check_next_state: [1903157|wsiSScli|1|httpbin_anything|200]: LWSSSCS_CONNECTED -> LWSSSCS_QOS_ACK_REMOTE [2021/03/02 16:38:00:7907] U: myss_state: LWSSSCS_QOS_ACK_REMOTE (10), ord 0x0 [2021/03/02 16:38:00:7908] N: myss_state: LWSSSCS_QOS_ACK_REMOTE [2021/03/02 16:38:00:7908] N: -- [1903157|wsi|0|pipe] (0) 524.500ms [2021/03/02 16:38:00:7908] N: -- [1903157|mux|0|h2_sid1_(1903157|wsicli|1)] (0) 105.284ms [2021/03/02 16:38:00:7912] N: -- [1903157|vh|2|arca1||-1] (2) 517.621ms [2021/03/02 16:38:00:7912] N: -- [1903157|wsicli|1|GET/h1/httpbin.org/([1903157|wsiSScli|1|httpbin_anything|arca1|h2|h2])] (0) 405.690ms [2021/03/02 16:38:00:7912] N: -- [1903157|vh|0|netlink] (1) 524.918ms [2021/03/02 16:38:00:7913] N: lws_ss_check_next_state: [1903157|wsiSScli|1|httpbin_anything|200]: LWSSSCS_QOS_ACK_REMOTE -> LWSSSCS_DISCONNECTED [2021/03/02 16:38:00:7913] U: myss_state: LWSSSCS_DISCONNECTED (2), ord 0x0 [2021/03/02 16:38:00:7913] N: lws_ss_check_next_state: [1903157|wsiSScli|1|httpbin_anything|200]: LWSSSCS_DISCONNECTED -> LWSSSCS_DESTROYING [2021/03/02 16:38:00:7913] U: myss_state: LWSSSCS_DESTROYING (7), ord 0x0 [2021/03/02 16:38:00:7913] N: -- [1903157|wsiSScli|1|httpbin_anything|200] (0) 405.986ms [2021/03/02 16:38:00:7925] N: -- [1903157|vh|1|_ss_default||-1] (0) 524.844ms [2021/03/02 16:38:00:7926] U: Completed: OK ``` minimal-secure-streams.c000066400000000000000000000263111476025525100353130ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-hugeurl/* * lws-minimal-secure-streams-hugeurl * * Written in 2010-2021 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * * This checks huge url operations via httpbin.org */ #include #include #include static unsigned int timeout_ms = 3000; static int interrupted, bad = 1, h1; static lws_state_notify_link_t nl; static size_t hugeurl_size = 4000; static char *hugeurl, *check; #if !defined(LWS_SS_USE_SSPC) static const char * const default_ss_policy = "{" "\"release\":" "\"01234567\"," "\"product\":" "\"myproduct\"," "\"schema-version\":" "1," #if defined(VIA_LOCALHOST_SOCKS) "\"via-socks5\":" "\"127.0.0.1:1080\"," #endif "\"retry\": [" /* named backoff / retry strategies */ "{\"default\": {" "\"backoff\": [" "1000," "2000," "3000," "5000," "10000" "]," "\"conceal\":" "5," "\"jitterpc\":" "20," "\"svalidping\":" "30," "\"svalidhup\":" "35" "}}" "]," "\"certs\": [" /* named individual certificates in BASE64 DER */ /* * Let's Encrypt certs for warmcat.com / libwebsockets.org * * We fetch the real policy from there using SS and switch to * using that. */ "{\"amazon_root_ca_1\": \"" "MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0" "BAQsFADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQ" "QDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExN" "zAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcG" "A1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggE" "PADCCAQoCggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrA" "IthtOgQ3pOsqTQNroBvo3bSMgHFzZM9O6II8c+6zf1tRn4SWiw3te5djgdY" "Z6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQgLKm+a/sRxmPUDgH" "3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0" "tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyz" "iKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIq" "g0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYw" "HQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwU" "AA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9r" "bxenDIU5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/m" "sv0tadQ1wUsN+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96L" "XFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bld" "ZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8o" "b2xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5" "\"}" "]," "\"trust_stores\": [" /* named cert chains */ "{" "\"name\": \"arca1\"," "\"stack\": [" "\"amazon_root_ca_1\"" "]" "}" "]," "\"s\": [{" "\"httpbin_anything_h1\": {" "\"endpoint\":" "\"httpbin.org\"," "\"port\":" "443," "\"protocol\":" "\"h1\"," "\"http_method\":" "\"GET\"," "\"http_url\":" "\"anything?x=${hugearg}\"," "\"nghttp2_quirk_end_stream\":" "true," "\"h2q_oflow_txcr\":" "true," "\"metadata\": [{" "\"hugearg\":" "\"\"" "}]," "\"tls\":" "true," "\"opportunistic\":" "true," "\"retry\":" "\"default\"," "\"tls_trust_store\":" "\"arca1\"" "}},{" "\"httpbin_anything_h2\": {" "\"endpoint\":" "\"httpbin.org\"," "\"port\":" "443," "\"protocol\":" "\"h2\"," "\"http_method\":" "\"GET\"," "\"http_url\":" "\"anything?x=${hugearg}\"," "\"nghttp2_quirk_end_stream\":" "true," "\"h2q_oflow_txcr\":" "true," "\"metadata\": [{" "\"hugearg\":" "\"\"" "}]," "\"tls\":" "true," "\"opportunistic\":" "true," "\"retry\":" "\"default\"," "\"tls_trust_store\":" "\"arca1\"" "}},{" /* * "captive_portal_detect" describes * what to do in order to check if the path to * the Internet is being interrupted by a * captive portal. If there's a larger policy * fetched from elsewhere, it should also include * this since it needs to be done at least after * every DHCP acquisition */ "\"captive_portal_detect\": {" "\"endpoint\": \"connectivitycheck.android.com\"," "\"http_url\": \"generate_204\"," "\"port\": 80," "\"protocol\": \"h1\"," "\"http_method\": \"GET\"," "\"opportunistic\": true," "\"http_expect\": 204," "\"http_fail_redirect\": true" "}}" "]}" ; #endif typedef struct myss { struct lws_ss_handle *ss; void *opaque_data; /* ... application specific state ... */ lws_sorted_usec_list_t sul; struct lejp_ctx ctx; size_t comp; char started; } myss_t; static const char * const lejp_tokens[] = { "url" }; /* * Parse the "url" member of the JSON, and collect the part after the first '=' * into the prepared buffer "check". */ static signed char lws_httpbin_json_cb(struct lejp_ctx *ctx, char reason) { myss_t *m = (myss_t *)ctx->user; const char *p = ctx->buf; size_t l = ctx->npos; if (!(reason & LEJP_FLAG_CB_IS_VALUE)) return 0; if (ctx->path_match - 1) return 0; if (!m->started) while (l--) if (*p++ == '=') { m->started = 1; break; } if (!m->started) return 0; if (m->comp + l > hugeurl_size) { lwsl_err("%s: returned url string too large %u, %u\n", __func__, (unsigned int)m->comp, (unsigned int)l); return -1; } memcpy(check + m->comp, p, l); m->comp += l; return 0; } /* secure streams payload interface */ static lws_ss_state_return_t myss_rx(void *userobj, const uint8_t *buf, size_t len, int flags) { myss_t *m = (myss_t *)userobj; if (flags & LWSSS_FLAG_SOM) lejp_construct(&m->ctx, lws_httpbin_json_cb, m, lejp_tokens, LWS_ARRAY_SIZE(lejp_tokens)); if (len) { int pr = lejp_parse(&m->ctx, buf, (int)len); if (pr != LEJP_CONTINUE && pr < 0) { lwsl_err("%s: parse failed line %u: %d: %s\n", __func__, (unsigned int)m->ctx.line, pr, lejp_error_to_string(pr)); return LWSSSSRET_DESTROY_ME; } } if (flags & LWSSS_FLAG_EOM) { interrupted = 1; /* confirm that what we collected is the expected size */ if (m->comp != hugeurl_size) { lwsl_err("%s: wrong urlarg size recovered %d %d\n", __func__, (int)m->comp, (int)hugeurl_size); return LWSSSSRET_OK; } /* confirm what we sent is the same as what we collected */ if (memcmp(hugeurl, check, hugeurl_size)) { lwsl_err("%s: huge url content mismatch\n", __func__); return LWSSSSRET_OK; } lwsl_user("%s: return hugeurl len %u matches OK\n", __func__, (unsigned int)hugeurl_size); bad = 0; } return LWSSSSRET_OK; } static lws_ss_state_return_t myss_state(void *userobj, void *sh, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { myss_t *m = (myss_t *)userobj; lwsl_user("%s: %s (%d), ord 0x%x\n", __func__, lws_ss_state_name((int)state), state, (unsigned int)ack); switch (state) { case LWSSSCS_CREATING: lws_ss_start_timeout(m->ss, timeout_ms); /* let's make the hugeurl part */ hugeurl = malloc(hugeurl_size + 1); if (!hugeurl) { lwsl_err("OOM\n"); return LWSSSSRET_DESTROY_ME; } check = malloc(hugeurl_size + 1); if (!check) { lwsl_err("OOM\n"); free(hugeurl); hugeurl = NULL; return LWSSSSRET_DESTROY_ME; } /* Create the big, random, urlarg */ lws_hex_random(lws_ss_get_context(m->ss), hugeurl, hugeurl_size + 1); if (lws_ss_set_metadata(m->ss, "hugearg", hugeurl, hugeurl_size)) return LWSSSSRET_DISCONNECT_ME; return lws_ss_client_connect(m->ss); case LWSSSCS_ALL_RETRIES_FAILED: /* if we're out of retries, we want to close the app and FAIL */ interrupted = 1; break; case LWSSSCS_QOS_ACK_REMOTE: lwsl_notice("%s: LWSSSCS_QOS_ACK_REMOTE\n", __func__); break; case LWSSSCS_TIMEOUT: lwsl_notice("%s: LWSSSCS_TIMEOUT\n", __func__); break; case LWSSSCS_USER_BASE: lwsl_notice("%s: LWSSSCS_USER_BASE\n", __func__); break; default: break; } return LWSSSSRET_OK; } static lws_ss_info_t ssi = { .handle_offset = offsetof(myss_t, ss), .opaque_user_data_offset = offsetof(myss_t, opaque_data), .rx = myss_rx, .state = myss_state, .user_alloc = sizeof(myss_t), .streamtype = "httpbin_anything_h2" }; static int app_system_state_nf(lws_state_manager_t *mgr, lws_state_notify_link_t *link, int current, int target) { struct lws_context *context = lws_system_context_from_system_mgr(mgr); /* * For the things we care about, let's notice if we are trying to get * past them when we haven't solved them yet, and make the system * state wait while we trigger the dependent action. */ if (target != LWS_SYSTATE_OPERATIONAL) return 0; if (current != LWS_SYSTATE_OPERATIONAL) return 0; if (h1) ssi.streamtype = "httpbin_anything_h1"; if (!lws_ss_create(context, 0, &ssi, NULL, NULL, NULL, NULL)) return 0; lwsl_err("%s: failed to create secure stream\n", __func__); return -1; } static lws_state_notify_link_t * const app_notifier_list[] = { &nl, NULL }; static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0; signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); lws_cmdline_option_handle_builtin(argc, argv, &info); lwsl_user("LWS secure streams hugeurl test client [-d][-h ]\n"); info.fd_limit_per_thread = 1 + 6 + 1; info.port = CONTEXT_PORT_NO_LISTEN; #if defined(LWS_SS_USE_SSPC) info.protocols = lws_sspc_protocols; /* connect to ssproxy via UDS by default, else via * tcp connection to this port */ if ((p = lws_cmdline_option(argc, argv, "-p"))) info.ss_proxy_port = (uint16_t)atoi(p); /* UDS "proxy.ss.lws" in abstract namespace, else this socket * path; when -p given this can specify the network interface * to bind to */ if ((p = lws_cmdline_option(argc, argv, "-i"))) info.ss_proxy_bind = p; /* if -p given, -a specifies the proxy address to connect to */ if ((p = lws_cmdline_option(argc, argv, "-a"))) info.ss_proxy_address = p; #else info.pss_policies_json = default_ss_policy; info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_H2_JUST_FIX_WINDOW_UPDATE_OVERFLOW | LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; #endif if (lws_cmdline_option(argc, argv, "--h1")) h1 = 1; if ((p = lws_cmdline_option(argc, argv, "-h"))) hugeurl_size = (size_t)atol(p); if (hugeurl_size < 1 || hugeurl_size > 16384) { lwsl_err("%s: -h should be between 1 and 16384\n", __func__); return 1; } lwsl_user("%s: huge argument size: %u bytes\n", __func__, (unsigned int)hugeurl_size); info.pt_serv_buf_size = (unsigned int)((hugeurl_size * 2) + 2048); info.max_http_header_data = (unsigned short)(hugeurl_size + 2048); /* integrate us with lws system state management when context created */ nl.name = "app"; nl.notify_cb = app_system_state_nf; info.register_notifier_list = app_notifier_list; /* create the context */ context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } /* the event loop */ while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); if (hugeurl) free(hugeurl); if (check) free(check); lwsl_user("Completed: %s\n", bad ? "failed" : "OK"); return bad; } libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-metadata/000077500000000000000000000000001476025525100307425ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-metadata/CMakeLists.txt000066400000000000000000000030511476025525100335010ustar00rootroot00000000000000project(lws-minimal-secure-streams-metadata C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-secure-streams-metadata) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS 1 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY 0 requirements) require_lws_config(LWS_WITH_SYS_STATE 1 requirements) if (requirements) add_executable(${SAMP} minimal-secure-streams.c) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\ni#if defined(LWS_WITH_SECURE_STREAMS_PROXY_API)\n return 0;\n #else\n fail\n #endif\n return 0;\n}\n" HAS_LWS_WITH_SECURE_STREAMS_PROXY_API) if (HAS_LWS_WITH_SECURE_STREAMS_PROXY_API OR LWS_WITH_SECURE_STREAMS_PROXY_API) add_compile_options(-DLWS_SS_USE_SSPC) add_executable(${SAMP}-client minimal-secure-streams.c) if (websockets_shared) target_link_libraries(${SAMP}-client websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP}-client websockets_shared) else() target_link_libraries(${SAMP}-client websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() endif() libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-metadata/README.md000066400000000000000000000061351476025525100322260ustar00rootroot00000000000000# lws minimal secure streams The application goes to https://warmcat.com and reads index.html there. It does it using Secure Streams... the main code in minimal-secure-streams.c just sets up the context and opens a secure stream of type "mintest". The handler for state changes and payloads for "mintest" is in ss-myss.c The information about how a "mintest" stream should connect and the protocol it uses is kept separated in policy-database.c ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -f| Force connecting to the wrong endpoint to check backoff retry flow -p| Run as proxy server for clients to connect to over unix domain socket --force-portal|Force the SS Captive Portal Detection to feel it's behind a portal --force-no-internet|Force the SS Captive Portal Detection to feel it can't reach the internet ``` [2019/08/12 07:16:11:0045] USR: LWS minimal secure streams [-d] [-f] [2019/08/12 07:16:12:6102] USR: myss_state: LWSSSCS_CREATING, ord 0x0 [2019/08/12 07:16:12:6107] USR: myss_state: LWSSSCS_POLL, ord 0x0 [2019/08/12 07:16:12:6117] N: lws_ss_client_connect: connecting h1get warmcat.com / [2019/08/12 07:16:12:6118] USR: myss_state: LWSSSCS_CONNECTING, ord 0x0 [2019/08/12 07:16:13:4171] USR: myss_state: LWSSSCS_CONNECTED, ord 0x0 [2019/08/12 07:16:13:4222] USR: myss_rx: len 1024, flags: 1 [2019/08/12 07:16:13:4243] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4244] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4244] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4245] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4246] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4247] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4252] USR: myss_rx: len 1015, flags: 0 [2019/08/12 07:16:13:4264] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4265] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4266] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4267] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4268] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4268] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4269] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4270] USR: myss_rx: len 1015, flags: 0 [2019/08/12 07:16:13:4278] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4279] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4280] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4281] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4282] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4283] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4283] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4284] USR: myss_rx: len 1015, flags: 0 [2019/08/12 07:16:13:4287] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4288] USR: myss_rx: len 947, flags: 0 [2019/08/12 07:16:13:4293] USR: myss_rx: len 0, flags: 2 [2019/08/12 07:16:13:4399] USR: myss_state: LWSSSCS_DISCONNECTED, ord 0x0 [2019/08/12 07:16:13:4761] USR: myss_state: LWSSSCS_DESTROYING, ord 0x0 [2019/08/12 07:16:13:4781] USR: Completed: OK ``` minimal-secure-streams.c000066400000000000000000000231631476025525100354220ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-metadata/* * lws-minimal-secure-streams-metadata * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * * This demonstrates a minimal http client using secure streams api. * * It visits https://warmcat.com/ and receives the html page there. * * This example is built two different ways from the same source... one includes * the policy everything needed to fulfil the stream directly. The other -client * variant has no policy itself and some other minor init changes, and connects * to the -proxy example to actually get the connection done. * * In the -client build case, the example does not even init the tls libraries * since the proxy part will take care of all that. */ #include #include #include /* * uncomment to force network traffic through 127.0.0.1:1080 * * On your local machine, you can run a SOCKS5 proxy like this * * $ ssh -N -D 0.0.0.0:1080 localhost -v * * If enabled, this also fetches a remote policy that also * specifies that all traffic should go through the remote * proxy. */ // #define VIA_LOCALHOST_SOCKS static int interrupted, bad = 1, force_cpd_fail_portal, force_cpd_fail_no_internet; static lws_state_notify_link_t nl; static const char *server_name_or_url = "warmcat.com"; /* * If the -proxy app is fulfilling our connection, then we don't need to have * the policy in the client. * * When we build with LWS_SS_USE_SSPC, the apis hook up to a proxy process over * a Unix Domain Socket. To test that, you need to separately run the * ./lws-minimal-secure-streams-proxy test app on the same machine. */ #if !defined(LWS_SS_USE_SSPC) static const char * const default_ss_policy = "{" "\"release\":" "\"01234567\"," "\"product\":" "\"myproduct\"," "\"schema-version\":" "1," #if defined(VIA_LOCALHOST_SOCKS) "\"via-socks5\":" "\"127.0.0.1:1080\"," #endif "\"retry\": [" /* named backoff / retry strategies */ "{\"default\": {" "\"backoff\": [" "1000," "2000," "3000," "5000," "10000" "]," "\"conceal\":" "5," "\"jitterpc\":" "20," "\"svalidping\":" "30," "\"svalidhup\":" "35" "}}" "]," "\"certs\": [" /* named individual certificates in BASE64 DER */ /* * Let's Encrypt certs for warmcat.com / libwebsockets.org * * We fetch the real policy from there using SS and switch to * using that. */ "{\"isrg_root_x1\": \"" "MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw" "TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh" "cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4" "WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu" "ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY" "MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc" "h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+" "0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U" "A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW" "T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH" "B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC" "B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv" "KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn" "OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn" "jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw" "qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI" "rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV" "HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq" "hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL" "ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ" "3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK" "NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5" "ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur" "TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC" "jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc" "oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq" "4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA" "mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d" "emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=" "\"}" "]," "\"trust_stores\": [" /* named cert chains */ "{" "\"name\": \"le_via_isrg\"," "\"stack\": [" "\"isrg_root_x1\"" "]" "}" "]," "\"s\": [" "{\"mintest\": {" "\"endpoint\":" "\"${servername}\"," "\"port\":" "443," "\"protocol\":" "\"h1\"," "\"http_method\":" "\"GET\"," "\"http_url\":" "\"\"," "\"tls\":" "true," "\"opportunistic\":" "true," "\"retry\":" "\"default\"," "\"tls_trust_store\":" "\"le_via_isrg\"," "\"metadata\": [" "{\"servername\": \"\"}" "]" "}}" "]}" ; #endif typedef struct myss { struct lws_ss_handle *ss; void *opaque_data; /* ... application specific state ... */ lws_sorted_usec_list_t sul; } myss_t; /* secure streams payload interface */ static lws_ss_state_return_t myss_rx(void *userobj, const uint8_t *buf, size_t len, int flags) { // myss_t *m = (myss_t *)userobj; lwsl_user("%s: len %d, flags: %d\n", __func__, (int)len, flags); lwsl_hexdump_info(buf, len); /* * If we received the whole message, for our example it means * we are done. */ if (flags & LWSSS_FLAG_EOM) { bad = 0; interrupted = 1; } return 0; } static lws_ss_state_return_t myss_tx(void *userobj, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len, int *flags) { //myss_t *m = (myss_t *)userobj; return 0; } static lws_ss_state_return_t myss_state(void *userobj, void *sh, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { myss_t *m = (myss_t *)userobj; lwsl_user("%s: %s, ord 0x%x\n", __func__, lws_ss_state_name((int)state), (unsigned int)ack); switch (state) { case LWSSSCS_CREATING: lwsl_notice("%s: CREATING: setting servername metadata to %s\n", __func__, server_name_or_url); if (lws_ss_set_metadata(m->ss, "servername", server_name_or_url, strlen(server_name_or_url))) return LWSSSSRET_DISCONNECT_ME; return lws_ss_client_connect(m->ss); case LWSSSCS_ALL_RETRIES_FAILED: /* if we're out of retries, we want to close the app and FAIL */ interrupted = 1; break; case LWSSSCS_QOS_ACK_REMOTE: lwsl_notice("%s: LWSSSCS_QOS_ACK_REMOTE\n", __func__); break; default: break; } return 0; } static int app_system_state_nf(lws_state_manager_t *mgr, lws_state_notify_link_t *link, int current, int target) { struct lws_context *context = lws_system_context_from_system_mgr(mgr); /* * For the things we care about, let's notice if we are trying to get * past them when we haven't solved them yet, and make the system * state wait while we trigger the dependent action. */ switch (target) { case LWS_SYSTATE_OPERATIONAL: if (current == LWS_SYSTATE_OPERATIONAL) { lws_ss_info_t ssi; /* We're making an outgoing secure stream ourselves */ memset(&ssi, 0, sizeof(ssi)); ssi.handle_offset = offsetof(myss_t, ss); ssi.opaque_user_data_offset = offsetof(myss_t, opaque_data); ssi.rx = myss_rx; ssi.tx = myss_tx; ssi.state = myss_state; ssi.user_alloc = sizeof(myss_t); ssi.streamtype = "mintest"; if (lws_ss_create(context, 0, &ssi, NULL, NULL, NULL, NULL)) { lwsl_err("%s: failed to create secure stream\n", __func__); return -1; } } break; } return 0; } static lws_state_notify_link_t * const app_notifier_list[] = { &nl, NULL }; static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0; signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); lws_cmdline_option_handle_builtin(argc, argv, &info); lwsl_user("LWS secure streams test client [-d]\n"); /* these options are mutually exclusive if given */ if (lws_cmdline_option(argc, argv, "--force-portal")) force_cpd_fail_portal = 1; if (lws_cmdline_option(argc, argv, "--force-no-internet")) force_cpd_fail_no_internet = 1; info.fd_limit_per_thread = 1 + 6 + 1; info.port = CONTEXT_PORT_NO_LISTEN; #if defined(LWS_SS_USE_SSPC) info.protocols = lws_sspc_protocols; /* connect to ssproxy via UDS by default, else via * tcp connection to this port */ if ((p = lws_cmdline_option(argc, argv, "-p"))) info.ss_proxy_port = (uint16_t)atoi(p); /* UDS "proxy.ss.lws" in abstract namespace, else this socket * path; when -p given this can specify the network interface * to bind to */ if ((p = lws_cmdline_option(argc, argv, "-i"))) info.ss_proxy_bind = p; /* if -p given, -a specifies the proxy address to connect to */ if ((p = lws_cmdline_option(argc, argv, "-a"))) info.ss_proxy_address = p; #else info.pss_policies_json = default_ss_policy; info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; #endif if ((p = lws_cmdline_option(argc, argv, "-u"))) server_name_or_url = p; /* integrate us with lws system state management when context created */ nl.name = "app"; nl.notify_cb = app_system_state_nf; info.register_notifier_list = app_notifier_list; /* create the context */ context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } /* the event loop */ while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); lwsl_user("Completed: %s\n", bad ? "failed" : "OK"); return bad; } libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-metrics-proxy/000077500000000000000000000000001476025525100320075ustar00rootroot00000000000000metrics-proxy-policy.json000066400000000000000000000177411476025525100367570ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-metrics-proxy{ "release":"01234567", "product":"myproduct", "schema-version":1, "retry": [{ "default": { "backoff": [1000,2000,3000,5000,10000], "conceal":5, "jitterpc":20, "svalidping":300, "svalidhup":310 }}], "certs": [{ "isrg_root_x1": "MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAwTzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygch77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6UA5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sWT8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyHB5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UCB5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUvKBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWnOlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTnjh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbwqHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CIrU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkqhkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZLubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KKNFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7UrTkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdCjNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVcoyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPAmRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57demyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc="}, {"self_localhost": "MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuWaICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXarjr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrowYNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuAxbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9PwtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjvxQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKkujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYAAOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6GgmnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIXe2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE="},{"self_localhost_key": "MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8fqokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5AKqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMTG+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXglxBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvsesnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqwzFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVzmgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCwau9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN7740QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFHPgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXjW7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuRnaVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr62ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDCR1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMpY+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaChBVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCEfXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQx1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHIUlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RMOMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/AaJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6Sme/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+IG4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iKTncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMrZiw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3ENqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrsfBrpEY1IATtPq1taBZZogRqI3rOkkPk=" }], "trust_stores": [ {"name": "le_via_isrg", "stack": ["isrg_root_x1"] } ], "s": [ { "mintest": { "endpoint":"warmcat.com", "port":443, "protocol":"h2", "http_method":"GET", "http_url":"index.html", "tls":true, "retry":"default", "tls_trust_store":"le_via_isrg" }},{ "forscraper": { "server":true, "port":19090, "protocol":"h1", "metadata": [{ "mime": "Content-Type:", "method": "", "path": "" } ] }},{ "forclients": { "server":true, "port":19091, "protocol":"h1", "metadata": [{ "mime": "Content-Type:", "method": "", "path": "" }], "tls":true, "ws_subprotocol":"lws-metrics-proxy", "server_cert":"self_localhost", "server_key":"self_localhost_key" }} ] } libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-perf/000077500000000000000000000000001476025525100301165ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-perf/CMakeLists.txt000066400000000000000000000107371476025525100326660ustar00rootroot00000000000000project(lws-minimal-secure-streams-perf C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-secure-streams-perf) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS 1 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY 0 requirements) require_lws_config(LWS_WITH_SYS_STATE 1 requirements) if (requirements) add_executable(${SAMP} minimal-secure-streams.c) find_program(VALGRIND "valgrind") if (LWS_CTEST_INTERNET_AVAILABLE AND NOT WIN32) # # When running in CI, wait for a lease on the resources # before starting this test, so the server does not get # thousands of simultaneous tls connection attempts # # sai-resource holds the lease on the resources until # the time given in seconds or the sai-resource instance # exits, whichever happens first # # If running under Sai, creates a lock test called "res_sspcmin" # sai_resource(warmcat_conns 1 40 ssperfpcmin) # # simple test not via proxy # if (VALGRIND) message("testing via valgrind") add_test(NAME ssperf-warmcat COMMAND ${VALGRIND} --tool=memcheck --leak-check=yes --num-callers=20 $) else() add_test(NAME ssperf-warmcat COMMAND lws-minimal-secure-streams-perf) endif() set_tests_properties(ssperf-warmcat PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/secure-streams/minimal-secure-streams TIMEOUT 40) if (DEFINED ENV{SAI_OVN}) set_tests_properties(ssperf-warmcat PROPERTIES FIXTURES_REQUIRED "res_ssperfpcmin") endif() if (HAS_LWS_WITH_SECURE_STREAMS_PROXY_API OR LWS_WITH_SECURE_STREAMS_PROXY_API) # # Define test dep to bring up and take down the test # proxy # if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") # uds abstract namespace for linux set(CTEST_SOCKET_PATH "@ctest-ssperfp-$ENV{SAI_PROJECT}-$ENV{SAI_OVN}") else() # filesystem socket for others set(CTEST_SOCKET_PATH "/tmp/ctest-ssperfp-$ENV{SAI_PROJECT}-$ENV{SAI_OVN}") endif() add_test(NAME st_ssperfproxy COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background.sh ssperfproxy $ -i ${CTEST_SOCKET_PATH} ) set_tests_properties(st_ssperfproxy PROPERTIES WORKING_DIRECTORY . FIXTURES_SETUP ssperfproxy TIMEOUT 800) add_test(NAME ki_ssperfproxy COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background-kill.sh ssperfproxy $ -i ${CTEST_SOCKET_PATH}) set_tests_properties(ki_ssperfproxy PROPERTIES FIXTURES_CLEANUP ssperfproxy) # # the client part that will connect to the proxy # if (VALGRIND) message("testing via valgrind") add_test(NAME ssperfpc-minimal COMMAND ${VALGRIND} --tool=memcheck --leak-check=yes --num-callers=20 $ -i +${CTEST_SOCKET_PATH}) else() add_test(NAME ssperfpc-minimal COMMAND lws-minimal-secure-streams-perf-client -i +${CTEST_SOCKET_PATH}) endif() set(fixlist "ssperfproxy") if (DEFINED ENV{SAI_OVN}) list(APPEND fixlist "res_ssperfproxy") endif() set_tests_properties(ssperfpc-minimal PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/secure-streams/minimal-secure-streams-perf FIXTURES_REQUIRED "${fixlist}" TIMEOUT 40) endif() endif() if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\ni#if defined(LWS_WITH_SECURE_STREAMS_PROXY_API)\n return 0;\n #else\n fail\n #endif\n return 0;\n}\n" HAS_LWS_WITH_SECURE_STREAMS_PROXY_API) if (HAS_LWS_WITH_SECURE_STREAMS_PROXY_API OR LWS_WITH_SECURE_STREAMS_PROXY_API) add_compile_options(-DLWS_SS_USE_SSPC) add_executable(${SAMP}-client minimal-secure-streams.c) if (websockets_shared) target_link_libraries(${SAMP}-client websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP}-client websockets_shared) else() target_link_libraries(${SAMP}-client websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() endif() libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-perf/README.md000066400000000000000000000163141476025525100314020ustar00rootroot00000000000000# lws minimal secure streams perf The application goes to https://warmcat.com and reads index.html there. The streamtype used is marked with a "perf": true policy, it returns additional rx payload marked with the `LWSSS_FLAG_PERF_JSON` flag containing a JSON rundown of the connection performance. This builds both lws-minimal-secure-streams-perf that connects directly, and lws-minimal-secure-streams-perf-client that connects via the proxy, giving the same results. ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 ``` [2021/03/31 15:29:46:5162] U: LWS secure streams test client [-d] [2021/03/31 15:29:46:5625] N: LWS: 4.1.99-v4.2-rc1-50-g8b5acf835c, loglevel 1031 [2021/03/31 15:29:46:5629] N: NET CLI SRV H1 H2 WS SS-JSON-POL SSPROX ConMon IPV6-on [2021/03/31 15:29:46:5829] N: ++ [795209|wsi|0|pipe] (1) [2021/03/31 15:29:46:5892] N: ++ [795209|vh|0|netlink] (1) [2021/03/31 15:29:46:5983] N: ++ [795209|vh|1|default||-1] (2) [2021/03/31 15:29:46:7638] N: ++ [795209|SSPcli|0|mintest] (1) [2021/03/31 15:29:46:7957] N: ++ [795209|wsiSSPcli|0|RAW/raw-skt/+@proxy.ss.lws/([795209|SSPcli|0|mintest])] (1) [2021/03/31 15:29:46:8335] N: -- [795209|wsiSSPcli|0|RAW/raw-skt/+@proxy.ss.lws/([795209|SSPcli|0|mintest])] (0) 35.608ms [2021/03/31 15:29:47:9096] N: ++ [795209|wsiSSPcli|1|RAW/raw-skt/+@proxy.ss.lws/([795209|SSPcli|0|mintest])] (1) [2021/03/31 15:29:47:9103] N: -- [795209|wsiSSPcli|1|RAW/raw-skt/+@proxy.ss.lws/([795209|SSPcli|0|mintest])] (0) 215μs [2021/03/31 15:29:48:9117] N: ++ [795209|wsiSSPcli|2|RAW/raw-skt/+@proxy.ss.lws/([795209|SSPcli|0|mintest])] (1) [2021/03/31 15:29:48:9339] N: lws_sspc_sul_retry_cb: [795209|wsiSSPcli|2|RAW/raw-skt/+@proxy.ss.lws/([795209|SSPcli|0|mintest])] [2021/03/31 15:29:48:9625] N: lws_ss_check_next_state: [795209|SSPcli|0|mintest]: (unset) -> LWSSSCS_CREATING [2021/03/31 15:29:48:9633] U: myss_state: LWSSSCS_CREATING (1), ord 0x0 [2021/03/31 15:29:48:9728] N: lws_ss_check_next_state: [795209|SSPcli|0|mintest]: LWSSSCS_CREATING -> LWSSSCS_CONNECTING [2021/03/31 15:29:48:9731] U: myss_state: LWSSSCS_CONNECTING (6), ord 0x0 [2021/03/31 15:29:49:0670] N: lws_ss_deserialize_parse: RX METADATA test [2021/03/31 15:29:49:0696] N: lws_ss_check_next_state: [795209|SSPcli|0|mintest]: LWSSSCS_CONNECTING -> LWSSSCS_CONNECTED [2021/03/31 15:29:49:0698] U: myss_state: LWSSSCS_CONNECTED (5), ord 0x0 [2021/03/31 15:29:49:0716] N: lws_ss_deserialize_parse: RX METADATA srv [2021/03/31 15:29:49:0882] U: myss_rx: len 1380, flags: 1, srv: lwsws, test: hello [2021/03/31 15:29:49:0907] U: myss_rx: len 140, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0926] U: {"peer":"46.105.127.147","dns_us":536,"sockconn_us":30183,"tls_us":29343,"txn_resp_us":25990,"dns":["2001:41d0:2:ee93::1","46.105.127.147"]} [2021/03/31 15:29:49:0937] U: myss_rx: len 1380, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0938] U: myss_rx: len 140, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0940] U: myss_rx: len 829, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0942] U: myss_rx: len 691, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0943] U: myss_rx: len 1380, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0944] U: myss_rx: len 140, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0945] U: myss_rx: len 1380, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0947] U: myss_rx: len 140, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0948] U: myss_rx: len 292, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0950] U: myss_rx: len 291, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0951] U: myss_rx: len 1380, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0952] U: myss_rx: len 140, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0953] U: myss_rx: len 1380, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0955] U: myss_rx: len 140, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0956] U: myss_rx: len 692, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0957] U: myss_rx: len 828, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0958] U: myss_rx: len 1380, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0960] U: myss_rx: len 140, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0961] U: myss_rx: len 1380, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0962] U: myss_rx: len 140, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0963] U: myss_rx: len 155, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0965] U: myss_rx: len 428, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0966] U: myss_rx: len 1380, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0967] U: myss_rx: len 140, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0968] U: myss_rx: len 1380, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0969] U: myss_rx: len 140, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0970] U: myss_rx: len 555, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0972] U: myss_rx: len 965, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0973] U: myss_rx: len 1380, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0975] U: myss_rx: len 140, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0976] U: myss_rx: len 1380, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0977] U: myss_rx: len 140, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0978] U: myss_rx: len 18, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0979] U: myss_rx: len 565, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0980] U: myss_rx: len 1380, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0981] U: myss_rx: len 140, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0982] U: myss_rx: len 1380, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0983] U: myss_rx: len 140, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0984] U: myss_rx: len 418, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0985] U: myss_rx: len 44, flags: 0, srv: lwsws, test: hello [2021/03/31 15:29:49:0989] U: myss_rx: len 0, flags: 2, srv: lwsws, test: hello [2021/03/31 15:29:49:0994] N: lws_ss_check_next_state: [795209|SSPcli|0|mintest]: LWSSSCS_CONNECTED -> LWSSSCS_QOS_ACK_REMOTE [2021/03/31 15:29:49:0995] U: myss_state: LWSSSCS_QOS_ACK_REMOTE (10), ord 0x0 [2021/03/31 15:29:49:0998] N: myss_state: LWSSSCS_QOS_ACK_REMOTE [2021/03/31 15:29:49:1008] N: lws_ss_check_next_state: [795209|SSPcli|0|mintest]: LWSSSCS_QOS_ACK_REMOTE -> LWSSSCS_DISCONNECTED [2021/03/31 15:29:49:1010] U: myss_state: LWSSSCS_DISCONNECTED (2), ord 0x0 [2021/03/31 15:29:49:1106] N: -- [795209|wsi|0|pipe] (0) 2.527s [2021/03/31 15:29:49:1169] N: -- [795209|vh|1|default||-1] (1) 2.518s [2021/03/31 15:29:49:1172] N: -- [795209|wsiSSPcli|2|RAW/raw-skt/+@proxy.ss.lws/([795209|SSPcli|0|mintest])] (0) 205.495ms [2021/03/31 15:29:49:1174] N: -- [795209|vh|0|netlink] (0) 2.528s [2021/03/31 15:29:49:1203] N: lws_ss_check_next_state: [795209|SSPcli|0|mintest]: LWSSSCS_DISCONNECTED -> LWSSSCS_DESTROYING [2021/03/31 15:29:49:1206] U: myss_state: LWSSSCS_DESTROYING (7), ord 0x0 [2021/03/31 15:29:49:1210] N: -- [795209|SSPcli|0|mintest] (0) 2.357s [2021/03/31 15:29:49:1292] U: Completed: OK (seen expected 0) ``` minimal-secure-streams.c000066400000000000000000000402771476025525100346030ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-perf/* * lws-minimal-secure-streams * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * * This demonstrates a minimal http client using secure streams api. * * It visits https://warmcat.com/ and receives the html page there. * * This example is built two different ways from the same source... one includes * the policy everything needed to fulfil the stream directly. The other -client * variant has no policy itself and some other minor init changes, and connects * to the -proxy example to actually get the connection done. * * In the -client build case, the example does not even init the tls libraries * since the proxy part will take care of all that. */ #include #include #include /* * uncomment to force network traffic through 127.0.0.1:1080 * * On your local machine, you can run a SOCKS5 proxy like this * * $ ssh -N -D 0.0.0.0:1080 localhost -v * * If enabled, this also fetches a remote policy that also * specifies that all traffic should go through the remote * proxy. */ // #define VIA_LOCALHOST_SOCKS static int interrupted, bad = 1, force_cpd_fail_portal, force_cpd_fail_no_internet, test_respmap; static const char *streamtype = "mintest"; static unsigned int timeout_ms = 3000; static lws_state_notify_link_t nl; /* * If the -proxy app is fulfilling our connection, then we don't need to have * the policy in the client. * * When we build with LWS_SS_USE_SSPC, the apis hook up to a proxy process over * a Unix Domain Socket. To test that, you need to separately run the * ./lws-minimal-secure-streams-proxy test app on the same machine. */ #if !defined(LWS_SS_USE_SSPC) static const char * const default_ss_policy = "{" "\"release\":" "\"01234567\"," "\"product\":" "\"myproduct\"," "\"schema-version\":" "1," #if defined(VIA_LOCALHOST_SOCKS) "\"via-socks5\":" "\"127.0.0.1:1080\"," #endif "\"retry\": [" /* named backoff / retry strategies */ "{\"default\": {" "\"backoff\": [" "1000," "2000," "3000," "5000," "10000" "]," "\"conceal\":" "5," "\"jitterpc\":" "20," "\"svalidping\":" "30," "\"svalidhup\":" "35" "}}" "]," "\"certs\": [" /* named individual certificates in BASE64 DER */ /* * Let's Encrypt certs for warmcat.com / libwebsockets.org * * We fetch the real policy from there using SS and switch to * using that. */ "{\"isrg_root_x1\": \"" "MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw" "TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh" "cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4" "WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu" "ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY" "MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc" "h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+" "0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U" "A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW" "T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH" "B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC" "B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv" "KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn" "OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn" "jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw" "qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI" "rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV" "HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq" "hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL" "ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ" "3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK" "NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5" "ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur" "TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC" "jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc" "oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq" "4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA" "mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d" "emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=" "\"}" "]," "\"trust_stores\": [" /* named cert chains */ "{" "\"name\": \"le_via_isrg\"," "\"stack\": [" "\"isrg_root_x1\"" "]" "}" "]," "\"s\": [" /* * "fetch_policy" decides from where the real policy * will be fetched, if present. Otherwise the initial * policy is treated as the whole, hardcoded, policy. */ "{\"fetch_policy\": {" "\"endpoint\":" "\"warmcat.com\"," "\"port\":" "443," "\"protocol\":" "\"h1\"," "\"http_method\":" "\"GET\"," #if defined(VIA_LOCALHOST_SOCKS) "\"http_url\":" "\"policy/minimal-proxy-socks.json\"," #else "\"http_url\":" "\"policy/minimal-proxy-v4.2-v2.json\"," #endif "\"tls\":" "true," "\"opportunistic\":" "true," "\"retry\":" "\"default\"," "\"tls_trust_store\":" "\"le_via_isrg\"" "}},{" /* * "captive_portal_detect" describes * what to do in order to check if the path to * the Internet is being interrupted by a * captive portal. If there's a larger policy * fetched from elsewhere, it should also include * this since it needs to be done at least after * every DHCP acquisition */ "\"captive_portal_detect\": {" "\"endpoint\": \"connectivitycheck.android.com\"," "\"http_url\": \"generate_204\"," "\"port\": 80," "\"protocol\": \"h1\"," "\"http_method\": \"GET\"," "\"opportunistic\": true," "\"http_expect\": 204," "\"http_fail_redirect\": true" "}}" "]}" ; #endif typedef struct myss { struct lws_ss_handle *ss; void *opaque_data; /* ... application specific state ... */ lws_sorted_usec_list_t sul; } myss_t; #if !defined(LWS_SS_USE_SSPC) static const char *canned_root_token_payload = "grant_type=refresh_token" "&refresh_token=Atzr|IwEBIJedGXjDqsU_vMxykqOMg" "SHfYe3CPcedueWEMWSDMaDnEmiW8RlR1Kns7Cb4B-TOSnqp7ifVsY4BMY2B8tpHfO39XP" "zfu9HapGjTR458IyHX44FE71pWJkGZ79uVBpljP4sazJuk8XS3Oe_yLnm_DIO6fU1nU3Y" "0flYmsOiOAQE_gRk_pdlmEtHnpMA-9rLw3mkY5L89Ty9kUygBsiFaYatouROhbsTn8-jW" "k1zZLUDpT6ICtBXSnrCIg0pUbZevPFhTwdXd6eX-u4rq0W-XaDvPWFO7au-iPb4Zk5eZE" "iX6sissYrtNmuEXc2uHu7MnQO1hHCaTdIO2CANVumf-PHSD8xseamyh04sLV5JgFzY45S" "KvKMajiUZuLkMokOx86rjC2Hdkx5DO7G-dbG1ufBDG-N79pFMSs7Ck5pc283IdLoJkCQc" "AGvTX8o8I29QqkcGou-9TKhOJmpX8As94T61ok0UqqEKPJ7RhfQHHYdCtsdwxgvfVr9qI" "xL_hDCcTho8opCVX-6QhJHl6SQFlTw13" "&client_id=" "amzn1.application-oa2-client.4823334c434b4190a2b5a42c07938a2d"; #endif /* secure streams payload interface */ static lws_ss_state_return_t myss_rx(void *userobj, const uint8_t *buf, size_t len, int flags) { myss_t *m = (myss_t *)userobj; const char *md_srv = "not set", *md_test = "not set"; size_t md_srv_len = 7, md_test_len = 7; if (flags & LWSSS_FLAG_PERF_JSON) { lwsl_user("%.*s\n", (int)len, (const char *)buf); return LWSSSSRET_OK; } lws_ss_get_metadata(m->ss, "srv", (const void **)&md_srv, &md_srv_len); lws_ss_get_metadata(m->ss, "test", (const void **)&md_test, &md_test_len); lwsl_user("%s: len %d, flags: %d, srv: %.*s, test: %.*s\n", __func__, (int)len, flags, (int)md_srv_len, md_srv, (int)md_test_len, md_test); lwsl_hexdump_info(buf, len); /* * If we received the whole message, for our example it means * we are done. */ if (flags & LWSSS_FLAG_EOM) { bad = 0; interrupted = 1; } return LWSSSSRET_OK; } static lws_ss_state_return_t myss_tx(void *userobj, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len, int *flags) { //myss_t *m = (myss_t *)userobj; /* in this example, we don't send stuff */ return LWSSSSRET_TX_DONT_SEND; } static lws_ss_state_return_t myss_state(void *userobj, void *sh, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { myss_t *m = (myss_t *)userobj; lwsl_user("%s: %s (%d), ord 0x%x\n", __func__, lws_ss_state_name((int)state), state, (unsigned int)ack); switch (state) { case LWSSSCS_CREATING: return lws_ss_client_connect(m->ss); case LWSSSCS_CONNECTING: lws_ss_start_timeout(m->ss, timeout_ms); if (lws_ss_set_metadata(m->ss, "uptag", "myuptag123", 10)) /* can fail, eg due to OOM, retry later if so */ return LWSSSSRET_DISCONNECT_ME; if (lws_ss_set_metadata(m->ss, "ctype", "myctype", 7)) /* can fail, eg due to OOM, retry later if so */ return LWSSSSRET_DISCONNECT_ME; break; case LWSSSCS_ALL_RETRIES_FAILED: /* if we're out of retries, we want to close the app and FAIL */ interrupted = 1; bad = 2; break; case LWSSSCS_QOS_ACK_REMOTE: lwsl_notice("%s: LWSSSCS_QOS_ACK_REMOTE\n", __func__); break; case LWSSSCS_TIMEOUT: lwsl_notice("%s: LWSSSCS_TIMEOUT\n", __func__); /* if we're out of time */ interrupted = 1; bad = 3; break; case LWSSSCS_USER_BASE: lwsl_notice("%s: LWSSSCS_USER_BASE\n", __func__); break; default: break; } return LWSSSSRET_OK; } static int app_system_state_nf(lws_state_manager_t *mgr, lws_state_notify_link_t *link, int current, int target) { struct lws_context *context = lws_system_context_from_system_mgr(mgr); #if !defined(LWS_SS_USE_SSPC) lws_system_blob_t *ab = lws_system_get_blob(context, LWS_SYSBLOB_TYPE_AUTH, 1 /* AUTH_IDX_ROOT */); size_t size; #endif /* * For the things we care about, let's notice if we are trying to get * past them when we haven't solved them yet, and make the system * state wait while we trigger the dependent action. */ switch (target) { #if !defined(LWS_SS_USE_SSPC) /* * The proxy takes responsibility for this stuff if we get things * done through that */ case LWS_SYSTATE_INITIALIZED: /* overlay on the hardcoded policy */ case LWS_SYSTATE_POLICY_VALID: /* overlay on the loaded policy */ if (target != current) break; if (force_cpd_fail_portal) /* this makes it look like we're behind a captive portal * because the overriden address does a redirect */ lws_ss_policy_overlay(context, "{\"s\": [{\"captive_portal_detect\": {" "\"endpoint\": \"google.com\"," "\"http_url\": \"/\"," "\"port\": 80" "}}]}"); if (force_cpd_fail_no_internet) /* this looks like no internet, because the overridden * port doesn't have anything that will connect to us */ lws_ss_policy_overlay(context, "{\"s\": [{\"captive_portal_detect\": {" "\"endpoint\": \"warmcat.com\"," "\"http_url\": \"/\"," "\"port\": 999" "}}]}"); break; case LWS_SYSTATE_REGISTERED: size = lws_system_blob_get_size(ab); if (size) break; /* let's register our canned root token so auth can use it */ lws_system_blob_direct_set(ab, (const uint8_t *)canned_root_token_payload, strlen(canned_root_token_payload)); break; #endif case LWS_SYSTATE_OPERATIONAL: if (current == LWS_SYSTATE_OPERATIONAL) { lws_ss_info_t ssi; /* We're making an outgoing secure stream ourselves */ memset(&ssi, 0, sizeof(ssi)); ssi.handle_offset = offsetof(myss_t, ss); ssi.opaque_user_data_offset = offsetof(myss_t, opaque_data); ssi.rx = myss_rx; ssi.tx = myss_tx; ssi.state = myss_state; ssi.user_alloc = sizeof(myss_t); ssi.streamtype = test_respmap ? "respmap" : streamtype; if (lws_ss_create(context, 0, &ssi, NULL, NULL, NULL, NULL)) { lwsl_err("%s: failed to create secure stream\n", __func__); return -1; } } break; } return 0; } static lws_state_notify_link_t * const app_notifier_list[] = { &nl, NULL }; #if defined(LWS_WITH_SYS_METRICS) static int my_metric_report(lws_metric_pub_t *mp) { lws_metric_bucket_t *sub = mp->u.hist.head; char buf[192]; do { if (lws_metrics_format(mp, &sub, buf, sizeof(buf))) lwsl_user("%s: %s\n", __func__, buf); } while ((mp->flags & LWSMTFL_REPORT_HIST) && sub); /* 0 = leave metric to accumulate, 1 = reset the metric */ return 1; } static const lws_system_ops_t system_ops = { .metric_report = my_metric_report, }; #endif static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; int n = 0, expected = 0; const char *p; signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); lws_cmdline_option_handle_builtin(argc, argv, &info); lwsl_user("LWS secure streams test client PERF [-d]\n"); /* these options are mutually exclusive if given */ if (lws_cmdline_option(argc, argv, "--force-portal")) force_cpd_fail_portal = 1; if (lws_cmdline_option(argc, argv, "--force-no-internet")) force_cpd_fail_no_internet = 1; if (lws_cmdline_option(argc, argv, "--respmap")) test_respmap = 1; if (lws_cmdline_option(argc, argv, "--test404")) streamtype = "mintest404"; if (lws_cmdline_option(argc, argv, "--test404red")) streamtype = "mintest404red"; if (lws_cmdline_option(argc, argv, "--test404redref")) streamtype = "mintest404redref"; if ((p = lws_cmdline_option(argc, argv, "--timeout_ms"))) timeout_ms = (unsigned int)atoi(p); info.fd_limit_per_thread = 1 + 6 + 1; info.port = CONTEXT_PORT_NO_LISTEN; #if defined(LWS_SS_USE_SSPC) info.protocols = lws_sspc_protocols; { const char *p; /* connect to ssproxy via UDS by default, else via * tcp connection to this port */ if ((p = lws_cmdline_option(argc, argv, "-p"))) info.ss_proxy_port = (uint16_t)atoi(p); /* UDS "proxy.ss.lws" in abstract namespace, else this socket * path; when -p given this can specify the network interface * to bind to */ if ((p = lws_cmdline_option(argc, argv, "-i"))) info.ss_proxy_bind = p; /* if -p given, -a specifies the proxy address to connect to */ if ((p = lws_cmdline_option(argc, argv, "-a"))) info.ss_proxy_address = p; } #else info.pss_policies_json = default_ss_policy; info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_H2_JUST_FIX_WINDOW_UPDATE_OVERFLOW | LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; #endif /* integrate us with lws system state management when context created */ nl.name = "app"; nl.notify_cb = app_system_state_nf; info.register_notifier_list = app_notifier_list; #if defined(LWS_WITH_SYS_METRICS) info.system_ops = &system_ops; info.metrics_prefix = "ssmex"; #endif /* create the context */ context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); goto bail; } #if !defined(LWS_SS_USE_SSPC) /* * If we're being a proxied client, the proxy does all this */ /* * Set the related lws_system blobs * * ...direct_set() sets a pointer, so the thing pointed to has to have * a suitable lifetime, eg, something that already exists on the heap or * a const string in .rodata like this */ lws_system_blob_direct_set(lws_system_get_blob(context, LWS_SYSBLOB_TYPE_DEVICE_SERIAL, 0), (const uint8_t *)"SN12345678", 10); lws_system_blob_direct_set(lws_system_get_blob(context, LWS_SYSBLOB_TYPE_DEVICE_FW_VERSION, 0), (const uint8_t *)"v0.01", 5); /* * ..._heap_append() appends to a buflist kind of arrangement on heap, * just one block is fine, otherwise it will concatenate the fragments * in the order they were appended (and take care of freeing them at * context destroy time). ..._heap_empty() is also available to remove * everything that was already allocated. * * Here we use _heap_append() just so it's tested as well as direct set. */ lws_system_blob_heap_append(lws_system_get_blob(context, LWS_SYSBLOB_TYPE_DEVICE_TYPE, 0), (const uint8_t *)"spacerocket", 11); #endif /* the event loop */ while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); bail: if ((p = lws_cmdline_option(argc, argv, "--expected-exit"))) expected = atoi(p); if (bad == expected) { lwsl_user("Completed: OK (seen expected %d)\n", expected); return 0; } else lwsl_err("Completed: failed: exit %d, expected %d\n", bad, expected); return 1; } libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-policy2c/000077500000000000000000000000001476025525100307065ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-policy2c/CMakeLists.txt000066400000000000000000000016711476025525100334530ustar00rootroot00000000000000project(lws-minimal-secure-streams-policy2c C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-secure-streams-policy2c) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_ROLE_H2 1 requirements) require_lws_config(LWS_ROLE_MQTT 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS 1 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY 0 requirements) if (requirements) add_executable(${SAMP} minimal-secure-streams.c) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-policy2c/README.md000066400000000000000000000025651476025525100321750ustar00rootroot00000000000000# lws minimal secure streams policy2c This application parses a JSON policy passed on stdin and emits the equivalent of it in C structs ready for compilation. This is useful in the case your platform doesn't use a dynamic JSON policy and is space-constrained, you can still form and maintain the policy in JSON, but with this utility convert it into compileable C. **Notice** this depends on LWS_ROLE_H1, LWS_ROLE_H2, LWS_ROLE_WS and LWS_ROLE_MQTT build of lws, since it has to be able to work with any kind of policy content. ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 ``` $ cat mypolicy.json | lws-minimal-secure-streams-policy2c (on stdout) static const uint32_t _rbo_bo_0[] = { 1000, 2000, 3000, 5000, 10000, }; static const lws_retry_bo_t _rbo_0 = { .retry_ms_table = _rbo_bo_0, .retry_ms_table_count = 5, .conceal_count = 5, .secs_since_valid_ping = 30, .secs_since_valid_hangup = 35, .jitter_percent = 20, }; static const uint8_t _ss_der_amazon_root_ca_1[] = { /* 0x 0 */ 0x30, 0x82, 0x03, 0x41, 0x30, 0x82, 0x02, 0x29, /* 0x 8 */ 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x13, 0x06, /* 0x 10 */ 0x6C, 0x9F, 0xCF, 0x99, 0xBF, 0x8C, 0x0A, 0x39, /* 0x 18 */ 0xE2, 0xF0, 0x78, 0x8A, 0x43, 0xE6, 0x96, 0x36, /* 0x 20 */ 0x5B, 0xCA, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, ... ``` minimal-secure-streams.c000066400000000000000000000413161476025525100353660ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-policy2c/* * lws-minimal-secure-streams-policy2c * * Written in 2010-2021 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * * This reads policy JSON on stdin and emits it as compileable * C structs. * * It's useful if your platform is too space-constrained for a * JSON policy and needs to build a static policy in C via * LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY... this way you can * still create and maintain the JSON policy but implement it directly * as C structs in your code. */ #include #include #include #include #include static int interrupted, bad = 1; static void sigint_handler(int sig) { interrupted = 1; } struct aggstr { struct aggstr *next; const char *orig; size_t offset; }; static struct aggstr *rbomap, /* retry / backoff object map */ *trustmap, /* trust store map */ *certmap; /* x.509 cert map */ static size_t last_offset; static const char * purify_csymbol(const char *in, char *temp, size_t templen) { const char *otemp = temp; assert (strlen(in) < templen); while (*in) { if ((*in >= 'a' && *in <= 'z') || (*in >= 'A' && *in <= 'Z') || (*in >= '0' && *in <= '9')) *temp++ = *in; else *temp++ = '_'; in++; } *temp = '\0'; return otemp; } int main(int argc, const char **argv) { const lws_ss_policy_t *pol, *lastpol = NULL; struct lws_context_creation_info info; size_t json_size = 0, est = 0; struct lws_context *context; const lws_ss_auth_t *auth; char prev[128], curr[128]; int unique_rbo = 0, m, n; char buf[64], buf1[64]; lws_ss_metadata_t *md; struct aggstr *a, *a1; signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); lws_cmdline_option_handle_builtin(argc, argv, &info); lwsl_user("LWS secure streams policy2c [-d]\n"); info.fd_limit_per_thread = 1 + 6 + 1; info.port = CONTEXT_PORT_NO_LISTEN; info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; /* create the context */ context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } lws_ss_policy_parse_begin(context, 0); printf("/*\n * Autogenerated from the following JSON policy\n */\n\n#if 0\n"); do { int m, n = (int)read(0, buf, sizeof(buf)); if (n < 1) break; m = lws_ss_policy_parse(context, (uint8_t *)buf, (size_t)n); printf("%.*s", n, buf); json_size += (unsigned int)n; if (m < 0 && m != LEJP_CONTINUE) { lwsl_err("%s: policy parse failed... lws has WITH_ROLEs" "for what's in the JSON?\n", __func__); goto bail; } } while (1); printf("\n\n Original JSON size: %zu\n#endif\n\n", json_size); lwsl_notice("%s: parsed JSON\n", __func__); /* * Well, this is fun, isn't it... we have parsed the JSON into in-memory * policy objects, and it has set the context policy pointer to the head * of those but has not set the new policy (which would free the x.509). * * We want to walk the streamtype list first discovering unique objects * and strings referenced there and emitting them compactly as C data, * and then second to emit the streamtype linked-list referring to those * objects. * * For const strings, we aggregate them and avoid generating extra * pointers by encoding the reference as &_lws_ss_staticpol_str[xxx] * where xxx is the fixed offset in the aggregated monster-string. When * doing that, we keep a map of original pointers to offsets. * * Although we want to minimize memory used by the emitted C, we don't * have to sweat memory during this conversion since it's happening on a * PC */ pol = lws_ss_policy_get(context); while (pol) { /* * Walk the metadata list gathering strings and issuing the * C struct */ md = pol->metadata; if (md) { int idx = 0; printf("\nstatic const lws_ss_metadata_t "); prev[0] = '\0'; md = pol->metadata; while (md) { est += sizeof(lws_ss_metadata_t); lws_snprintf(curr, sizeof(curr), "_md_%s_%s", purify_csymbol(pol->streamtype, buf, sizeof(buf)), purify_csymbol(md->name, buf1, sizeof(buf1))); printf("%s = {\n", curr); if (prev[0]) printf("\t.next = (void *)&%s, \n", prev); printf("\t.name = \"%s\",\n", (const char *)md->name); if (md->value__may_own_heap) { printf("\t.value__may_own_heap = (void *)\"%s\",\n", (const char *)md->value__may_own_heap); printf("\t.value_length = 0x%x,\n", (unsigned int)strlen( (const char *)md->value__may_own_heap)); } printf("\t.length = %d,\n", idx++); // md->length); printf("\t.value_is_http_token = 0x%x,\n", (unsigned int)md->value_is_http_token); printf("}"); if (md->next) printf(",\n"); lws_strncpy(prev, curr, sizeof(prev)); md = md->next; } printf(";\n\n"); } /* * Create unique retry policies... have we seen this guy? */ if (pol->retry_bo) { a = rbomap; while (a) { if (a->orig == (const char *)pol->retry_bo) break; a = a->next; } if (!a) { /* We haven't seen it before and need to create it */ a = malloc(sizeof(*a)); if (!a) goto bail; a->next = rbomap; a->offset = (unsigned int)unique_rbo++; a->orig = (const char *)pol->retry_bo; rbomap = a; printf("static const uint32_t _rbo_bo_%zu[] = {\n", a->offset); for (n = 0; n < pol->retry_bo->retry_ms_table_count; n++) printf(" %u, ", (unsigned int) pol->retry_bo->retry_ms_table[n]); est += sizeof(uint32_t) * pol->retry_bo->retry_ms_table_count; printf("\n};\nstatic const " "lws_retry_bo_t _rbo_%zu = {\n", a->offset); printf("\t.retry_ms_table = _rbo_bo_%zu,\n", a->offset); printf("\t.retry_ms_table_count = %u,\n", pol->retry_bo->retry_ms_table_count); printf("\t.conceal_count = %u,\n", pol->retry_bo->conceal_count); printf("\t.secs_since_valid_ping = %u,\n", pol->retry_bo->secs_since_valid_ping); printf("\t.secs_since_valid_hangup = %u,\n", pol->retry_bo->secs_since_valid_hangup); printf("\t.jitter_percent = %u,\n", pol->retry_bo->jitter_percent); printf("};\n"); est += sizeof(lws_retry_bo_t); } } /* * How about his trust store, it's new to us? */ if (pol->trust.store) { a = trustmap; while (a) { if (a->orig == (const char *)pol->trust.store) break; a = a->next; } if (!a) { /* it's new to us... */ a = malloc(sizeof(*a)); if (!a) goto bail; a->next = trustmap; a->offset = 0; /* don't care, just track seen */ a->orig = (const char *)pol->trust.store; trustmap = a; /* * Have a look through his x.509 stack... * any that're new to us? */ for (n = 0; n < pol->trust.store->count; n++) { if (!pol->trust.store->ssx509[n]) continue; a1 = certmap; while (a1) { if (a1->orig == (const char *)pol->trust.store->ssx509[n]) break; a1 = a1->next; } if (!a1) { /* * This x.509 cert is new to us... * let's capture the DER */ a1 = malloc(sizeof(*a1)); if (!a1) goto bail; a1->next = certmap; a1->offset = 0; /* don't care, just track seen */ a1->orig = (const char *)pol->trust.store->ssx509[n]; certmap = a1; printf("static const uint8_t _ss_der_%s[] = {\n", purify_csymbol(pol->trust.store->ssx509[n]->vhost_name, buf, sizeof(buf))); for (m = 0; m < (int)pol->trust.store->ssx509[n]->ca_der_len; m++) { if ((m & 7) == 0) printf("\t/* 0x%3x */ ", m); printf("0x%02X, ", pol->trust.store->ssx509[n]->ca_der[m]); if ((m & 7) == 7) printf("\n"); } printf("\n};\nstatic const lws_ss_x509_t _ss_x509_%s = {\n", purify_csymbol(pol->trust.store->ssx509[n]->vhost_name, buf, sizeof(buf))); printf("\t.vhost_name = \"%s\",\n", pol->trust.store->ssx509[n]->vhost_name); printf("\t.ca_der = _ss_der_%s,\n", purify_csymbol(pol->trust.store->ssx509[n]->vhost_name, buf, sizeof(buf))); printf("\t.ca_der_len = %zu,\n", pol->trust.store->ssx509[n]->ca_der_len); printf("};\n"); est += sizeof(lws_ss_x509_t) + pol->trust.store->ssx509[n]->ca_der_len; } } printf("static const lws_ss_trust_store_t _ss_ts_%s = {\n", purify_csymbol(pol->trust.store->name, buf, sizeof(buf))); printf("\t.name = \"%s\",\n", pol->trust.store->name); printf("\t.count = %d,\n", pol->trust.store->count); printf("\t.ssx509 = {\n"); for (n = pol->trust.store->count - 1; n >= 0 ; n--) printf("\t\t&_ss_x509_%s,\n", pol->trust.store->ssx509[n]->vhost_name); printf("\t}\n};\n"); est += sizeof(lws_ss_trust_store_t); } } pol = pol->next; } /* dump any streamtype's http resp map */ pol = lws_ss_policy_get(context); m = 0; while (pol) { lws_snprintf(curr, sizeof(curr), "_ssp_%s", purify_csymbol(pol->streamtype, buf, sizeof(buf))); /* if relevant, dump http resp map */ switch (pol->protocol) { case LWSSSP_H1: case LWSSSP_H2: case LWSSSP_WS: if (!pol->u.http.count_respmap) break; if (!m) printf("\nstatic const lws_ss_http_respmap_t "); else printf(",\n"); m++; printf("%s_http_respmap[] = {\n", curr); for (n = 0; n < pol->u.http.count_respmap; n++) { printf("\t{ %d, 0x%x },\n", pol->u.http.respmap[n].resp, pol->u.http.respmap[n].state); est += sizeof(lws_ss_http_respmap_t); } printf("}"); break; } pol = pol->next; } if (m) printf(";\n"); /* * The auth map */ auth = lws_ss_auth_get(context); if (auth) printf("\nstatic const lws_ss_auth_t "); prev[0] = '\0'; while (auth) { lws_snprintf(curr, sizeof(curr), "_ssau_%s", purify_csymbol(auth->name, buf, sizeof(buf))); printf("%s = {\n", curr); if (prev[0]) printf("\t.next = (void *)&%s,\n", prev); printf("\t.name = \"%s\",\n", auth->name); printf("\t.type= \"%s\",\n", auth->type); printf("\t.streamtype = \"%s\",\n", auth->streamtype); printf("\t.blob_index = %d,\n", auth->blob_index); printf("}"); if (auth->next) printf(","); else printf(";"); printf("\n"); lws_strncpy(prev, curr, sizeof(prev)); auth = auth->next; } if (lws_ss_auth_get(context)) printf("\n"); /* * The streamtypes */ pol = lws_ss_policy_get(context); printf("\nstatic const lws_ss_policy_t "); prev[0] = '\0'; while (pol) { est += sizeof(*pol); lws_snprintf(curr, sizeof(curr), "_ssp_%s", purify_csymbol(pol->streamtype, buf, sizeof(buf))); printf("%s = {\n", curr); if (prev[0]) printf("\t.next = (void *)&%s,\n", prev); printf("\t.streamtype = \"%s\",\n", pol->streamtype); if (pol->endpoint) printf("\t.endpoint = \"%s\",\n", pol->endpoint); if (pol->rideshare_streamtype) printf("\t.rideshare_streamtype = \"%s\",\n", pol->rideshare_streamtype); if (pol->payload_fmt) printf("\t.payload_fmt = \"%s\",\n", pol->payload_fmt); if (pol->socks5_proxy) printf("\t.socks5_proxy = \"%s\",\n", pol->socks5_proxy); if (pol->auth) printf("\t.auth = &_ssau_%s,\n", purify_csymbol(pol->auth->name, buf, sizeof(buf))); { lws_ss_metadata_t *nv = pol->metadata, *last = NULL; while (nv) { last = nv; nv = nv->next; } if (pol->metadata) printf("\t.metadata = (void *)&_md_%s_%s,\n", purify_csymbol(pol->streamtype, buf, sizeof(buf)), purify_csymbol(last->name, buf1, sizeof(buf1))); } switch (pol->protocol) { case LWSSSP_H1: case LWSSSP_H2: case LWSSSP_WS: printf("\t.u = {\n\t\t.http = {\n"); if (pol->u.http.method) printf("\t\t\t.method = \"%s\",\n", pol->u.http.method); if (pol->u.http.url) printf("\t\t\t.url = \"%s\",\n", pol->u.http.url); if (pol->u.http.multipart_name) printf("\t\t\t.multipart_name = \"%s\",\n", pol->u.http.multipart_name); if (pol->u.http.multipart_filename) printf("\t\t\t.multipart_filename = \"%s\",\n", pol->u.http.multipart_filename); if (pol->u.http.multipart_content_type) printf("\t\t\t.multipart_content_type = \"%s\",\n", pol->u.http.multipart_content_type); if (pol->u.http.auth_preamble) printf("\t\t\t.auth_preamble = \"%s\",\n", pol->u.http.auth_preamble); if (pol->u.http.respmap) { printf("\t\t\t.respmap = (void *)&%s_http_respmap,\n", curr); printf("\t\t\t.count_respmap = %d,\n", pol->u.http.count_respmap); } if (pol->u.http.blob_header[0]) { printf("\t\t\t.blob_header = {\n"); for (n = 0; n < (int)LWS_ARRAY_SIZE(pol->u.http.blob_header); n++) if (pol->u.http.blob_header[n]) printf("\t\t\t\t\"%s\",\n", pol->u.http.blob_header[n]); printf("\t\t\t},\n"); } if (pol->protocol == LWSSSP_WS) { printf("\t\t\t.u = {\n\t\t\t\t.ws = {\n"); if (pol->u.http.u.ws.subprotocol) printf("\t\t\t\t\t.subprotocol = \"%s\",\n", pol->u.http.u.ws.subprotocol); printf("\t\t\t\t\t.binary = %u\n", pol->u.http.u.ws.binary); printf("\t\t\t\t}\n\t\t\t},\n"); } if (pol->u.http.resp_expect) printf("\t\t\t.resp_expect = %u,\n", pol->u.http.resp_expect); if (pol->u.http.fail_redirect) printf("\t\t\t.fail_redirect = %u,\n", pol->u.http.fail_redirect); printf("\t\t}\n\t},\n"); break; case LWSSSP_MQTT: printf("\t.u = {\n\t\t.mqtt = {\n"); if (pol->u.mqtt.topic) printf("\t\t\t.topic = \"%s\",\n", pol->u.mqtt.topic); if (pol->u.mqtt.subscribe) printf("\t\t\t.subscribe = \"%s\",\n", pol->u.mqtt.subscribe); if (pol->u.mqtt.will_topic) printf("\t\t\t.will_topic = \"%s\",\n", pol->u.mqtt.will_topic); if (pol->u.mqtt.will_message) printf("\t\t\t.will_message = \"%s\",\n", pol->u.mqtt.will_message); if (pol->u.mqtt.will_qos) printf("\t\t\t.will_qos = %u,\n", pol->u.mqtt.will_qos); if (pol->u.mqtt.will_retain) printf("\t\t\t.will_retain = %u,\n", pol->u.mqtt.will_retain); if (pol->u.mqtt.birth_topic) printf("\t\t\t.birth_topic = \"%s\",\n", pol->u.mqtt.birth_topic); if (pol->u.mqtt.birth_message) printf("\t\t\t.birth_message = \"%s\",\n", pol->u.mqtt.birth_message); if (pol->u.mqtt.birth_qos) printf("\t\t\t.birth_qos = %u,\n", pol->u.mqtt.birth_qos); if (pol->u.mqtt.birth_retain) printf("\t\t\t.birth_retain = %u,\n", pol->u.mqtt.birth_retain); if (pol->u.mqtt.keep_alive) printf("\t\t\t.keep_alive = %u,\n", pol->u.mqtt.keep_alive); if (pol->u.mqtt.qos) printf("\t\t\t.qos = %u,\n", pol->u.mqtt.qos); if (pol->u.mqtt.clean_start) printf("\t\t\t.clean_start = %u,\n", pol->u.mqtt.clean_start); if (pol->u.mqtt.aws_iot) printf("\t\t\t.aws_iot = %u,\n", pol->u.mqtt.aws_iot); if (pol->u.mqtt.retain) printf("\t\t\t.retain = %u,\n", pol->u.mqtt.retain); printf("\t\t}\n\t},\n"); break; default: lwsl_err("%s: unknown ss protocol index %d\n", __func__, pol->protocol); goto bail; } #if 0 const lws_ss_trust_store_t *trust_store; /**< CA certs needed for conn validation, only set between policy parsing and vhost creation */ #endif if (pol->retry_bo) { a = rbomap; while (a) { if (a->orig == (const char *)pol->retry_bo) break; a = a->next; } if (!a) goto bail; printf("\t.retry_bo = &_rbo_%zu,\n", a->offset); } if (pol->timeout_ms) printf("\t.timeout_ms = %u,\n", pol->timeout_ms); if (pol->flags) printf("\t.flags = 0x%x,\n", pol->flags); if (pol->flags) printf("\t.priority = 0x%x,\n", (unsigned int)pol->priority); if (pol->port) printf("\t.port = %u,\n", pol->port); if (pol->metadata_count) printf("\t.metadata_count = %u,\n", pol->metadata_count); printf("\t.protocol = %u,\n", pol->protocol); if (pol->client_cert) printf("\t.client_cert = %u,\n", pol->client_cert); if (pol->trust.store) printf("\t.trust = {.store = &_ss_ts_%s},\n", purify_csymbol(pol->trust.store->name, buf, sizeof(buf))); #if defined(LWS_WITH_SECURE_STREAMS_AUTH_SIGV4) if (pol->aws_region) printf("\t.aws_region= \"%s\",\n", pol->aws_region); if (pol->aws_service) printf("\t.aws_service= \"%s\",\n", pol->aws_service); #endif printf("}"); if (pol->next) printf(",\n"); lws_strncpy(prev, curr, sizeof(prev)); lastpol = pol; pol = pol->next; } printf(";\n"); if (lastpol) printf("#define _ss_static_policy_entry _ssp_%s\n", purify_csymbol(lastpol->streamtype, buf, sizeof(buf))); est += last_offset; printf("/* estimated footprint %zu (when sizeof void * = %zu) */\n", est, sizeof(void *)); lws_ss_policy_parse_abandon(context); bad = 0; bail: lws_context_destroy(context); lwsl_user("Completed: %s\n", bad ? "failed" : "OK"); return bad; } libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-post/000077500000000000000000000000001476025525100301475ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-post/CMakeLists.txt000066400000000000000000000042121476025525100327060ustar00rootroot00000000000000project(lws-minimal-secure-streams-post C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-secure-streams-post) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS 1 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY 0 requirements) require_lws_config(LWS_WITH_SYS_STATE 1 requirements) if (requirements) add_executable(${SAMP} minimal-secure-streams-post.c) find_program(VALGRIND "valgrind") if (LWS_CTEST_INTERNET_AVAILABLE AND DISABLE_IT_DUE_TO_JIG_ROT) if (VALGRIND) add_test(NAME sspost-warmcat COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background.sh post_hcm_srv ${VALGRIND} --tool=memcheck $ ) else() add_test(NAME sspost-warmcat COMMAND lws-minimal-secure-streams-post) endif() set_tests_properties(sspost-warmcat PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/secure-streams/minimal-secure-streams-post TIMEOUT 20) endif() if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\ni#if defined(LWS_WITH_SECURE_STREAMS_PROXY_API)\n return 0;\n #else\n fail\n #endif\n return 0;\n}\n" HAS_LWS_WITH_SECURE_STREAMS_PROXY_API) if (HAS_LWS_WITH_SECURE_STREAMS_PROXY_API OR LWS_WITH_SECURE_STREAMS_PROXY_API) add_compile_options(-DLWS_SS_USE_SSPC) add_executable(${SAMP}-client minimal-secure-streams-post.c) if (websockets_shared) target_link_libraries(${SAMP}-client websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP}-client websockets_shared) else() target_link_libraries(${SAMP}-client websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() endif() libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-post/README.md000066400000000000000000000061351476025525100314330ustar00rootroot00000000000000# lws minimal secure streams The application goes to https://warmcat.com and reads index.html there. It does it using Secure Streams... the main code in minimal-secure-streams.c just sets up the context and opens a secure stream of type "mintest". The handler for state changes and payloads for "mintest" is in ss-myss.c The information about how a "mintest" stream should connect and the protocol it uses is kept separated in policy-database.c ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -f| Force connecting to the wrong endpoint to check backoff retry flow -p| Run as proxy server for clients to connect to over unix domain socket --force-portal|Force the SS Captive Portal Detection to feel it's behind a portal --force-no-internet|Force the SS Captive Portal Detection to feel it can't reach the internet ``` [2019/08/12 07:16:11:0045] USR: LWS minimal secure streams [-d] [-f] [2019/08/12 07:16:12:6102] USR: myss_state: LWSSSCS_CREATING, ord 0x0 [2019/08/12 07:16:12:6107] USR: myss_state: LWSSSCS_POLL, ord 0x0 [2019/08/12 07:16:12:6117] N: lws_ss_client_connect: connecting h1get warmcat.com / [2019/08/12 07:16:12:6118] USR: myss_state: LWSSSCS_CONNECTING, ord 0x0 [2019/08/12 07:16:13:4171] USR: myss_state: LWSSSCS_CONNECTED, ord 0x0 [2019/08/12 07:16:13:4222] USR: myss_rx: len 1024, flags: 1 [2019/08/12 07:16:13:4243] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4244] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4244] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4245] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4246] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4247] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4252] USR: myss_rx: len 1015, flags: 0 [2019/08/12 07:16:13:4264] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4265] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4266] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4267] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4268] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4268] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4269] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4270] USR: myss_rx: len 1015, flags: 0 [2019/08/12 07:16:13:4278] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4279] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4280] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4281] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4282] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4283] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4283] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4284] USR: myss_rx: len 1015, flags: 0 [2019/08/12 07:16:13:4287] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4288] USR: myss_rx: len 947, flags: 0 [2019/08/12 07:16:13:4293] USR: myss_rx: len 0, flags: 2 [2019/08/12 07:16:13:4399] USR: myss_state: LWSSSCS_DISCONNECTED, ord 0x0 [2019/08/12 07:16:13:4761] USR: myss_state: LWSSSCS_DESTROYING, ord 0x0 [2019/08/12 07:16:13:4781] USR: Completed: OK ``` minimal-secure-streams-post.c000066400000000000000000000477321476025525100356220ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-post/* * lws-minimal-secure-streams-post * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * * This demonstrates a minimal http client using secure streams api. * * It visits https://warmcat.com/ and receives the html page there. * * This example is built two different ways from the same source... one includes * the policy everything needed to fulfil the stream directly. The other -client * variant has no policy itself and some other minor init changes, and connects * to the -proxy example to actually get the connection done. * * In the -client build case, the example does not even init the tls libraries * since the proxy part will take care of all that. */ #include #include #include #include /* * uncomment to force network traffic through 127.0.0.1:1080 * * On your local machine, you can run a SOCKS5 proxy like this * * $ ssh -N -D 0.0.0.0:1080 localhost -v * * If enabled, this also fetches a remote policy that also * specifies that all traffic should go through the remote * proxy. */ // #define VIA_LOCALHOST_SOCKS static int interrupted, bad = 1, force_cpd_fail_portal, force_cpd_fail_no_internet; static unsigned int timeout_ms = 3000; static lws_state_notify_link_t nl; static const char * const postbody = "--boundary\r\n" "Content-Disposition: form-data; name=\"text\"\r\n" "\r\n" "value1\r\n" "--boundary\r\n" "Content-Disposition: form-data; " "name=\"field2\"; filename=\"example.txt\"\r\n" "\r\n" "value2\r\n" "00-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "01-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "02-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "03-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "04-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "05-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "06-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "07-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "08-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "09-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "0a-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "0b-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "0c-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "0d-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "0e-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "0f-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "10-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "11-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "12-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "13-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "14-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "15-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "16-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "17-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "18-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "19-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "1a-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "1b-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "1c-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "1d-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "1e-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "1f-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "20-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "21-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "22-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "23-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "24-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "25-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "26-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "27-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "28-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "29-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "2a-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "2b-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "2c-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "2d-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "2e-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "2f-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "30-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "31-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "32-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "33-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "34-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "35-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "36-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "37-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "38-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "39-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "3a-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "3b-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "3c-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "3d-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "3e-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "3f-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "40-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "41-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "42-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "43-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "44-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "45-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "46-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "47-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "48-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "49-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "4a-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "4b-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "4c-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "4d-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "4e-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "4f-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\r\n" "--boundary--\r\n"; /* * If the -proxy app is fulfilling our connection, then we don't need to have * the policy in the client. * * When we build with LWS_SS_USE_SSPC, the apis hook up to a proxy process over * a Unix Domain Socket. To test that, you need to separately run the * ./lws-minimal-secure-streams-proxy test app on the same machine. */ #if !defined(LWS_SS_USE_SSPC) static const char * const default_ss_policy = "{" "\"release\":" "\"01234567\"," "\"product\":" "\"myproduct\"," "\"schema-version\":" "1," #if defined(VIA_LOCALHOST_SOCKS) "\"via-socks5\":" "\"127.0.0.1:1080\"," #endif "\"retry\": [" /* named backoff / retry strategies */ "{\"default\": {" "\"backoff\": [" "1000," "2000," "3000," "5000," "10000" "]," "\"conceal\":" "5," "\"jitterpc\":" "20," "\"svalidping\":" "30," "\"svalidhup\":" "35" "}}" "]," "\"certs\": [" /* named individual certificates in BASE64 DER */ /* * Let's Encrypt certs for warmcat.com / libwebsockets.org * * We fetch the real policy from there using SS and switch to * using that. */ "{\"isrg_root_x1\": \"" "MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw" "TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh" "cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4" "WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu" "ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY" "MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc" "h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+" "0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U" "A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW" "T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH" "B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC" "B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv" "KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn" "OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn" "jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw" "qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI" "rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV" "HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq" "hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL" "ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ" "3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK" "NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5" "ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur" "TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC" "jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc" "oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq" "4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA" "mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d" "emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=" "\"}" "]," "\"trust_stores\": [" /* named cert chains */ "{" "\"name\": \"le_via_isrg\"," "\"stack\": [" "\"isrg_root_x1\"" "]" "}" "]," "\"s\": [" /* * "fetch_policy" decides from where the real policy * will be fetched, if present. Otherwise the initial * policy is treated as the whole, hardcoded, policy. */ "{\"fetch_policy\": {" "\"endpoint\":" "\"warmcat.com\"," "\"port\":" "443," "\"protocol\":" "\"h1\"," "\"http_method\":" "\"GET\"," #if defined(VIA_LOCALHOST_SOCKS) "\"http_url\":" "\"policy/minimal-proxy-socks.json\"," #else "\"http_url\":" "\"policy/minimal-proxy.json\"," #endif "\"tls\":" "true," "\"opportunistic\":" "true," "\"retry\":" "\"default\"," "\"tls_trust_store\":" "\"le_via_isrg\"" "}},{" /* * "captive_portal_detect" describes * what to do in order to check if the path to * the Internet is being interrupted by a * captive portal. If there's a larger policy * fetched from elsewhere, it should also include * this since it needs to be done at least after * every DHCP acquisition */ "\"captive_portal_detect\": {" "\"endpoint\": \"connectivitycheck.android.com\"," "\"http_url\": \"generate_204\"," "\"port\": 80," "\"protocol\": \"h1\"," "\"http_method\": \"GET\"," "\"opportunistic\": true," "\"http_expect\": 204," "\"http_fail_redirect\": true" "}}" "]}" ; #endif typedef struct myss { struct lws_ss_handle *ss; void *opaque_data; /* ... application specific state ... */ lws_sorted_usec_list_t sul; size_t pos; size_t len; } myss_t; #if !defined(LWS_SS_USE_SSPC) static const char *canned_root_token_payload = "grant_type=refresh_token" "&refresh_token=Atzr|IwEBIJedGXjDqsU_vMxykqOMg" "SHfYe3CPcedueWEMWSDMaDnEmiW8RlR1Kns7Cb4B-TOSnqp7ifVsY4BMY2B8tpHfO39XP" "zfu9HapGjTR458IyHX44FE71pWJkGZ79uVBpljP4sazJuk8XS3Oe_yLnm_DIO6fU1nU3Y" "0flYmsOiOAQE_gRk_pdlmEtHnpMA-9rLw3mkY5L89Ty9kUygBsiFaYatouROhbsTn8-jW" "k1zZLUDpT6ICtBXSnrCIg0pUbZevPFhTwdXd6eX-u4rq0W-XaDvPWFO7au-iPb4Zk5eZE" "iX6sissYrtNmuEXc2uHu7MnQO1hHCaTdIO2CANVumf-PHSD8xseamyh04sLV5JgFzY45S" "KvKMajiUZuLkMokOx86rjC2Hdkx5DO7G-dbG1ufBDG-N79pFMSs7Ck5pc283IdLoJkCQc" "AGvTX8o8I29QqkcGou-9TKhOJmpX8As94T61ok0UqqEKPJ7RhfQHHYdCtsdwxgvfVr9qI" "xL_hDCcTho8opCVX-6QhJHl6SQFlTw13" "&client_id=" "amzn1.application-oa2-client.4823334c434b4190a2b5a42c07938a2d"; #endif /* secure streams payload interface */ static lws_ss_state_return_t myss_rx(void *userobj, const uint8_t *buf, size_t len, int flags) { // myss_t *m = (myss_t *)userobj; lwsl_user("%s: len %d, flags: %d\n", __func__, (int)len, flags); lwsl_hexdump_info(buf, len); /* * If we received the whole message, for our example it means * we are done. */ if (flags & LWSSS_FLAG_EOM) { bad = 0; interrupted = 1; } return 0; } static lws_ss_state_return_t myss_tx(void *userobj, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len, int *flags) { myss_t *m = (myss_t *)userobj; if (m->pos == m->len) return LWSSSSRET_TX_DONT_SEND; if (m->len - m->pos < *len) *len = m->len - m->pos; *flags = 0; if (!m->pos) *flags |= LWSSS_FLAG_SOM; memcpy(buf, postbody + m->pos, *len); m->pos += *len; if (m->pos == m->len) *flags |= LWSSS_FLAG_EOM; lwsl_notice("%s: write %d flags %d\n", __func__, (int)*len, (int)*flags); if (m->pos != m->len) return lws_ss_request_tx(m->ss); return 0; } static lws_ss_state_return_t myss_state(void *userobj, void *sh, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { myss_t *m = (myss_t *)userobj; lwsl_user("%s: h %p, %s, ord 0x%x\n", __func__, m->ss, lws_ss_state_name((int)state), (unsigned int)ack); switch (state) { case LWSSSCS_CREATING: /* * CREATING is only coming after we have asked the upstream * proxy to create the stream and it has been allowed. */ if (lws_ss_set_metadata(m->ss, "ctype", "multipart/form-data;boundary=\"boundary\"", 39)) return LWSSSSRET_DISCONNECT_ME; /* provide a hint about the payload size */ m->pos = 0; m->len = strlen(postbody); return lws_ss_request_tx_len(m->ss, (unsigned long)strlen(postbody)); case LWSSSCS_CONNECTED: return lws_ss_request_tx(m->ss); case LWSSSCS_ALL_RETRIES_FAILED: /* if we're out of retries, we want to close the app and FAIL */ interrupted = 1; break; case LWSSSCS_QOS_ACK_REMOTE: lwsl_notice("%s: LWSSSCS_QOS_ACK_REMOTE\n", __func__); break; case LWSSSCS_TIMEOUT: lwsl_notice("%s: LWSSSCS_TIMEOUT\n", __func__); break; default: break; } return 0; } static int app_system_state_nf(lws_state_manager_t *mgr, lws_state_notify_link_t *link, int current, int target) { struct lws_context *context = lws_system_context_from_system_mgr(mgr); #if !defined(LWS_SS_USE_SSPC) lws_system_blob_t *ab = lws_system_get_blob(context, LWS_SYSBLOB_TYPE_AUTH, 1 /* AUTH_IDX_ROOT */); size_t size; #endif /* * For the things we care about, let's notice if we are trying to get * past them when we haven't solved them yet, and make the system * state wait while we trigger the dependent action. */ switch (target) { #if !defined(LWS_SS_USE_SSPC) case LWS_SYSTATE_REGISTERED: size = lws_system_blob_get_size(ab); if (size) break; /* let's register our canned root token so auth can use it */ lws_system_blob_direct_set(ab, (const uint8_t *)canned_root_token_payload, strlen(canned_root_token_payload)); break; #endif case LWS_SYSTATE_OPERATIONAL: if (current == LWS_SYSTATE_OPERATIONAL) { lws_ss_info_t ssi; /* We're making an outgoing secure stream ourselves */ memset(&ssi, 0, sizeof(ssi)); ssi.handle_offset = offsetof(myss_t, ss); ssi.opaque_user_data_offset = offsetof(myss_t, opaque_data); ssi.rx = myss_rx; ssi.tx = myss_tx; ssi.state = myss_state; ssi.user_alloc = sizeof(myss_t); ssi.streamtype = "minpost"; if (lws_ss_create(context, 0, &ssi, NULL, NULL, NULL, NULL)) { lwsl_err("%s: failed to create secure stream\n", __func__); return -1; } } break; } return 0; } static lws_state_notify_link_t * const app_notifier_list[] = { &nl, NULL }; static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0; signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); lws_cmdline_option_handle_builtin(argc, argv, &info); lwsl_user("LWS secure streams test client [-d]\n"); /* these options are mutually exclusive if given */ if (lws_cmdline_option(argc, argv, "--force-portal")) force_cpd_fail_portal = 1; if (lws_cmdline_option(argc, argv, "--force-no-internet")) force_cpd_fail_no_internet = 1; if ((p = lws_cmdline_option(argc, argv, "--timeout_ms"))) timeout_ms = (unsigned int)atoi(p); info.fd_limit_per_thread = 1 + 6 + 1; info.port = CONTEXT_PORT_NO_LISTEN; #if defined(LWS_SS_USE_SSPC) info.protocols = lws_sspc_protocols; { const char *p; /* connect to ssproxy via UDS by default, else via * tcp connection to this port */ if ((p = lws_cmdline_option(argc, argv, "-p"))) info.ss_proxy_port = (uint16_t)atoi(p); /* UDS "proxy.ss.lws" in abstract namespace, else this socket * path; when -p given this can specify the network interface * to bind to */ if ((p = lws_cmdline_option(argc, argv, "-i"))) info.ss_proxy_bind = p; /* if -p given, -a specifies the proxy address to connect to */ if ((p = lws_cmdline_option(argc, argv, "-a"))) info.ss_proxy_address = p; } #else info.pss_policies_json = default_ss_policy; info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; #endif /* integrate us with lws system state management when context created */ nl.name = "app"; nl.notify_cb = app_system_state_nf; info.register_notifier_list = app_notifier_list; /* create the context */ context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } #if !defined(LWS_SS_USE_SSPC) /* * If we're being a proxied client, the proxy does all this */ /* * Set the related lws_system blobs * * ...direct_set() sets a pointer, so the thing pointed to has to have * a suitable lifetime, eg, something that already exists on the heap or * a const string in .rodata like this */ lws_system_blob_direct_set(lws_system_get_blob(context, LWS_SYSBLOB_TYPE_DEVICE_SERIAL, 0), (const uint8_t *)"SN12345678", 10); lws_system_blob_direct_set(lws_system_get_blob(context, LWS_SYSBLOB_TYPE_DEVICE_FW_VERSION, 0), (const uint8_t *)"v0.01", 5); /* * ..._heap_append() appends to a buflist kind of arrangement on heap, * just one block is fine, otherwise it will concatenate the fragments * in the order they were appended (and take care of freeing them at * context destroy time). ..._heap_empty() is also available to remove * everything that was already allocated. * * Here we use _heap_append() just so it's tested as well as direct set. */ lws_system_blob_heap_append(lws_system_get_blob(context, LWS_SYSBLOB_TYPE_DEVICE_TYPE, 0), (const uint8_t *)"spacerocket", 11); #endif /* the event loop */ while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); lwsl_user("Completed: %s\n", bad ? "failed" : "OK"); return bad; } libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-proxy/000077500000000000000000000000001476025525100303435ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-proxy/CMakeLists.txt000066400000000000000000000017151476025525100331070ustar00rootroot00000000000000project(lws-minimal-secure-streams-proxy C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-secure-streams-proxy) set(SRCS main.c) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS 1 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS_PROXY_API 1 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY 0 requirements) require_lws_config(LWS_WITH_SYS_STATE 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-proxy/README.md000066400000000000000000000026751476025525100316340ustar00rootroot00000000000000# lws minimal secure streams proxy Operates as a secure streams proxy, by default on a listening unix domain socket "proxy.ss.lws" in the Linux abstract namespace. Give -p to have it listen on a specific tcp port instead. ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -f| Force connecting to the wrong endpoint to check backoff retry flow -p |If not given, proxy listens on a Unix Domain Socket, if given listen on specified tcp port -i |Optionally specify the UDS path (no -p) or network interface to bind to (if -p also given) ``` [2020/02/26 15:41:27:5768] U: LWS secure streams Proxy [-d] [2020/02/26 15:41:27:5770] N: lws_ss_policy_set: 2.064KiB, pad 70%: hardcoded [2020/02/26 15:41:27:5771] N: lws_tls_client_create_vhost_context: using mem client CA cert 1391 [2020/02/26 15:41:27:8681] N: lws_ss_policy_set: 4.512KiB, pad 15%: updated [2020/02/26 15:41:27:8682] N: lws_tls_client_create_vhost_context: using mem client CA cert 837 [2020/02/26 15:41:27:8683] N: lws_tls_client_create_vhost_context: using mem client CA cert 1043 [2020/02/26 15:41:27:8684] N: lws_tls_client_create_vhost_context: using mem client CA cert 1167 [2020/02/26 15:41:27:8684] N: lws_tls_client_create_vhost_context: using mem client CA cert 1391 [2020/02/26 15:41:28:4226] N: ss_api_amazon_auth_rx: acquired 567-byte api.amazon.com auth token, exp 3600s ``` libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-proxy/main.c000066400000000000000000000233061476025525100314370ustar00rootroot00000000000000/* * lws-minimal-secure-streams-proxy * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * * This is the proxy part for examples built to use it to connect to... it has * the policy and the core SS function, but it doesn't contain any of the user * code "business logic"... that's in the clients. * * The proxy side has the policy and performs the onward connection proxying * fulfilment. The clients state the streamtype name they want and ask for the * client to do the connection part. * * Rideshare information is being parsed out at the proxy side; the SSS RX part * also brings with it rideshare names. * * Metadata is passed back over SSS from the client in the TX messages for the * proxy to use per the policy. */ #include #include #include #if defined(__APPLE__) || defined(__linux__) #include #include #endif static int interrupted, bad = 1, port = 0 /* unix domain socket */; static const char *ibind = NULL; /* default to unix domain skt "proxy.ss.lws" */ static lws_state_notify_link_t nl; static struct lws_context *context; /* * We just define enough policy so it can fetch the latest one securely */ static const char * const default_ss_policy = "{" "\"release\":" "\"01234567\"," "\"product\":" "\"myproduct\"," "\"schema-version\":" "1," "\"retry\": [" /* named backoff / retry strategies */ "{\"default\": {" "\"backoff\": [" "1000," "2000," "3000," "5000," "10000" "]," "\"conceal\":" "5," "\"jitterpc\":" "20," "\"svalidping\":" "30," "\"svalidhup\":" "35" "}}" "]," "\"certs\": [" /* named individual certificates in BASE64 DER */ /* * Let's Encrypt certs for warmcat.com / libwebsockets.org * * We fetch the real policy from there using SS and switch to * using that. */ "{\"isrg_root_x1\": \"" "MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw" "TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh" "cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4" "WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu" "ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY" "MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc" "h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+" "0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U" "A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW" "T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH" "B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC" "B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv" "KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn" "OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn" "jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw" "qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI" "rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV" "HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq" "hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL" "ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ" "3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK" "NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5" "ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur" "TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC" "jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc" "oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq" "4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA" "mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d" "emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=" "\"}" "]," "\"trust_stores\": [" /* named cert chains */ "{" "\"name\": \"le_via_isrg\"," "\"stack\": [" "\"isrg_root_x1\"" "]" "}" "]," "\"s\": [{" "\"captive_portal_detect\": {" "\"endpoint\": \"connectivitycheck.android.com\"," "\"http_url\": \"generate_204\"," "\"port\": 80," "\"protocol\": \"h1\"," "\"http_method\": \"GET\"," "\"opportunistic\": true," "\"http_expect\": 204," "\"http_fail_redirect\": true" "}," "\"fetch_policy\": {" "\"endpoint\":" "\"warmcat.com\"," "\"port\":" "443," "\"protocol\":" "\"h1\"," "\"http_method\":" "\"GET\"," "\"http_url\":" "\"policy/minimal-proxy-v4.2-v2.json\"," "\"tls\":" "true," "\"opportunistic\":" "true," "\"retry\":" "\"default\"," "\"tls_trust_store\":" "\"le_via_isrg\"" "}}" "}" ; static const char *canned_root_token_payload = "grant_type=refresh_token" "&refresh_token=Atzr|IwEBIJedGXjDqsU_vMxykqOMg" "SHfYe3CPcedueWEMWSDMaDnEmiW8RlR1Kns7Cb4B-TOSnqp7ifVsY4BMY2B8tpHfO39XP" "zfu9HapGjTR458IyHX44FE71pWJkGZ79uVBpljP4sazJuk8XS3Oe_yLnm_DIO6fU1nU3Y" "0flYmsOiOAQE_gRk_pdlmEtHnpMA-9rLw3mkY5L89Ty9kUygBsiFaYatouROhbsTn8-jW" "k1zZLUDpT6ICtBXSnrCIg0pUbZevPFhTwdXd6eX-u4rq0W-XaDvPWFO7au-iPb4Zk5eZE" "iX6sissYrtNmuEXc2uHu7MnQO1hHCaTdIO2CANVumf-PHSD8xseamyh04sLV5JgFzY45S" "KvKMajiUZuLkMokOx86rjC2Hdkx5DO7G-dbG1ufBDG-N79pFMSs7Ck5pc283IdLoJkCQc" "AGvTX8o8I29QqkcGou-9TKhOJmpX8As94T61ok0UqqEKPJ7RhfQHHYdCtsdwxgvfVr9qI" "xL_hDCcTho8opCVX-6QhJHl6SQFlTw13" "&client_id=" "amzn1.application-oa2-client.4823334c434b4190a2b5a42c07938a2d"; #if defined(LWS_WITH_SECURE_STREAMS_AUTH_SIGV4) static char *aws_keyid = NULL, *aws_key = NULL; #endif static int app_system_state_nf(lws_state_manager_t *mgr, lws_state_notify_link_t *link, int current, int target) { struct lws_context *context = lws_system_context_from_system_mgr(mgr); lws_system_blob_t *ab = lws_system_get_blob(context, LWS_SYSBLOB_TYPE_AUTH, 1 /* AUTH_IDX_ROOT */); size_t size; /* * For the things we care about, let's notice if we are trying to get * past them when we haven't solved them yet, and make the system * state wait while we trigger the dependent action. */ switch (target) { case LWS_SYSTATE_REGISTERED: size = lws_system_blob_get_size(ab); if (size) break; /* let's register our canned root token so auth can use it */ lws_system_blob_direct_set(ab, (const uint8_t *)canned_root_token_payload, strlen(canned_root_token_payload)); break; case LWS_SYSTATE_OPERATIONAL: if (current == LWS_SYSTATE_OPERATIONAL) { #if defined(LWS_WITH_SECURE_STREAMS_AUTH_SIGV4) if (lws_aws_filesystem_credentials_helper( "~/.aws/credentials", "aws_access_key_id", "aws_secret_access_key", &aws_keyid, &aws_key)) return -1; lws_ss_sigv4_set_aws_key(context, 0, aws_keyid, aws_key); #endif /* * At this point we have DHCP, ntp, system auth token * and we can reasonably create the proxy */ if (lws_ss_proxy_create(context, ibind, port)) { lwsl_err("%s: failed to create ss proxy\n", __func__); return -1; } } break; case LWS_SYSTATE_POLICY_INVALID: /* * This is a NOP since we used direct set... but in a real * system this could easily change to be done on the heap, then * this would be important */ lws_system_blob_destroy(lws_system_get_blob(context, LWS_SYSBLOB_TYPE_AUTH, 1 /* AUTH_IDX_ROOT */)); break; } return 0; } static lws_state_notify_link_t * const app_notifier_list[] = { &nl, NULL }; #if defined(LWS_WITH_SYS_METRICS) static int my_metric_report(lws_metric_pub_t *mp) { lws_metric_bucket_t *sub = mp->u.hist.head; char buf[192]; do { if (lws_metrics_format(mp, &sub, buf, sizeof(buf))) lwsl_user("%s: %s\n", __func__, buf); } while ((mp->flags & LWSMTFL_REPORT_HIST) && sub); /* 0 = leave metric to accumulate, 1 = reset the metric */ return 1; } static const lws_system_ops_t system_ops = { .metric_report = my_metric_report, }; #endif static void sigint_handler(int sig) { lwsl_notice("%s\n", __func__); interrupted = 1; lws_cancel_service(context); } int main(int argc, const char **argv) { struct lws_context_creation_info info; const char *p; int n = 0; memset(&info, 0, sizeof info); lws_cmdline_option_handle_builtin(argc, argv, &info); signal(SIGINT, sigint_handler); /* connect to ssproxy via UDS by default, else via tcp with this port */ if ((p = lws_cmdline_option(argc, argv, "-p"))) port = atoi(p); /* UDS "proxy.ss.lws" in abstract namespace, else this socket path; * when -p given this can specify the network interface to bind to */ if ((p = lws_cmdline_option(argc, argv, "-i"))) ibind = p; lwsl_user("LWS secure streams Proxy [-d]\n"); info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_H2_JUST_FIX_WINDOW_UPDATE_OVERFLOW | LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.fd_limit_per_thread = 1 + 26 + 1; info.pss_policies_json = default_ss_policy; info.port = CONTEXT_PORT_NO_LISTEN; /* integrate us with lws system state management when context created */ nl.name = "app"; nl.notify_cb = app_system_state_nf; info.register_notifier_list = app_notifier_list; info.pt_serv_buf_size = (unsigned int)((6144 * 2) + 2048); info.max_http_header_data = (unsigned short)(6144 + 2048); #if defined(LWS_WITH_SYS_METRICS) info.system_ops = &system_ops; info.metrics_prefix = "ssproxy"; #endif context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } /* the event loop */ do { n = lws_service(context, 0); } while (n >= 0 && !interrupted); bad = 0; #if defined(LWS_WITH_SECURE_STREAMS_AUTH_SIGV4) if (aws_keyid) free(aws_keyid); if (aws_key) free(aws_key); #endif lws_context_destroy(context); lwsl_user("Completed: %s\n", bad ? "failed" : "OK"); return bad; } libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-seq/000077500000000000000000000000001476025525100277525ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-seq/CMakeLists.txt000066400000000000000000000016261476025525100325170ustar00rootroot00000000000000project(lws-minimal-secure-streams-seq C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-secure-streams-seq) set(SRCS minimal-secure-streams.c) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) require_lws_config(LWS_WITH_SEQUENCER 1 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS 1 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-seq/README.md000066400000000000000000000062311476025525100312330ustar00rootroot00000000000000# lws minimal sequre streams seq The application goes to https://warmcat.com and reads index.html there. It does it using Secure Streams... the main code in minimal-secure-streams.c just sets up the context and opens a secure stream of type "mintest". The handler for state changes and payloads for "mintest" is in ss-myss.c The information about how a "mintest" stream should connect and the protocol it uses is kept separated in policy-database.c ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -f| Force connecting to the wrong endpoint to check backoff retry flow ``` $ ./lws-minimal-secure-streams-seq [2018/03/04 14:43:20:8562] USER: LWS minimal http client [2018/03/04 14:43:20:8571] NOTICE: Creating Vhost 'default' port -1, 1 protocols, IPv6 on [2018/03/04 14:43:20:8616] NOTICE: created client ssl context for default [2018/03/04 14:43:20:8617] NOTICE: lws_client_connect_2: 0x1814dc0: address warmcat.com [2018/03/04 14:43:21:1496] NOTICE: lws_client_connect_2: 0x1814dc0: address warmcat.com [2018/03/04 14:43:22:0154] NOTICE: lws_client_interpret_server_handshake: incoming content length 26520 [2018/03/04 14:43:22:0154] NOTICE: lws_client_interpret_server_handshake: client connection up [2018/03/04 14:43:22:0169] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0169] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0169] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0169] USER: RECEIVE_CLIENT_HTTP_READ: read 1015 [2018/03/04 14:43:22:0174] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0174] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0174] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0174] USER: RECEIVE_CLIENT_HTTP_READ: read 1015 [2018/03/04 14:43:22:0179] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0179] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0179] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:0179] USER: RECEIVE_CLIENT_HTTP_READ: read 1015 [2018/03/04 14:43:22:3010] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3010] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3010] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3010] USER: RECEIVE_CLIENT_HTTP_READ: read 1015 [2018/03/04 14:43:22:3015] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3015] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3015] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3015] USER: RECEIVE_CLIENT_HTTP_READ: read 1015 [2018/03/04 14:43:22:3020] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3020] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3020] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3020] USER: RECEIVE_CLIENT_HTTP_READ: read 1015 [2018/03/04 14:43:22:3022] USER: RECEIVE_CLIENT_HTTP_READ: read 1024 [2018/03/04 14:43:22:3022] USER: RECEIVE_CLIENT_HTTP_READ: read 974 [2018/03/04 14:43:22:3022] NOTICE: lws_http_client_read: transaction completed says -1 [2018/03/04 14:43:23:3042] USER: Completed ``` minimal-secure-streams.c000066400000000000000000000265621476025525100344400ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-seq/* * lws-minimal-secure-streams-seq * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * * This demonstrates the a minimal http client using secure streams api. * * It visits https://warmcat.com/ and receives the html page there. * * This is the "secure streams" api equivalent of minimal-http-client... * it shows how to use a sequencer to make it easy to build more complex * schemes on top of this example. * * The layering looks like this * * lifetime * * ------ app ------ process * ---- sequencer ---- process * --- secure stream --- process * ------- wsi ------- connection * * see minimal-secure-streams for a similar example without the sequencer. */ #include #include #include static int interrupted, bad = 1, flag_conn_fail, flag_h1post; static const char * const default_ss_policy = "{" "\"release\":" "\"01234567\"," "\"product\":" "\"myproduct\"," "\"schema-version\":" "1," "\"retry\": [" /* named backoff / retry strategies */ "{\"default\": {" "\"backoff\": [" "1000," "2000," "3000," "5000," "10000" "]," "\"conceal\":" "5," "\"jitterpc\":" "20," "\"svalidping\":" "300," "\"svalidhup\":" "310" "}}" "]," "\"certs\": [" /* named individual certificates in BASE64 DER */ /* * Need to be in order from root cert... notice sometimes as * with Let's Encrypt there are multiple possible validation * paths, all the pieces for one validation path must be * given, excluding the server cert itself. Let's Encrypt * intermediate is signed by their ISRG Root CA but also is * cross-signed by an IdenTrust intermediate that's widely * deployed in browsers. We use the ISRG path because that * way we can skip the extra IdenTrust root cert. */ "{\"isrg_root_x1\": \"" "MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw" "TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh" "cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4" "WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu" "ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY" "MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc" "h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+" "0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U" "A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW" "T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH" "B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC" "B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv" "KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn" "OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn" "jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw" "qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI" "rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV" "HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq" "hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL" "ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ" "3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK" "NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5" "ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur" "TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC" "jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc" "oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq" "4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA" "mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d" "emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=" "\"}" "]," "\"trust_stores\": [" /* named cert chains */ "{" "\"name\": \"le_via_isrg\"," "\"stack\": [" "\"isrg_root_x1\"" "]" "}" "]," "\"s\": [" /* the supported stream types */ "{\"mintest\": {" "\"endpoint\":" "\"warmcat.com\"," "\"port\":" "443," "\"protocol\":" "\"h1\"," "\"http_method\":" "\"GET\"," "\"http_url\":" "\"index.html\"," "\"plugins\":" "[]," "\"tls\":" "true," "\"opportunistic\":" "true," "\"retry\":" "\"default\"," "\"tls_trust_store\":" "\"le_via_isrg\"" "}}," "{\"mintest-fail\": {" "\"endpoint\":" "\"warmcat.com\"," "\"port\":" "22," "\"protocol\":" "\"h1\"," "\"http_method\":" "\"GET\"," "\"http_url\":" "\"index.html\"," "\"plugins\":" "[]," "\"tls\":" "true," "\"opportunistic\":" "true," "\"retry\":" "\"default\"," "\"tls_trust_store\":" "\"le_via_isrg\"" "}}," "{\"minpost\": {" "\"endpoint\":" "\"warmcat.com\"," "\"port\":" "443," "\"protocol\":" "\"h1\"," "\"http_method\":" "\"POST\"," "\"http_url\":" "\"testserver/formtest\"," "\"plugins\":" "[]," "\"tls\":" "true," "\"opportunistic\":" "true," "\"retry\":" "\"default\"," "\"tls_trust_store\":" "\"le_via_isrg\"" "}}" "]" "}" ; typedef struct myss { struct lws_ss_handle *ss; void *opaque_data; /* ... application specific state ... */ } myss_t; /* secure streams payload interface */ static lws_ss_state_return_t myss_rx(void *userobj, const uint8_t *buf, size_t len, int flags) { // myss_t *m = (myss_t *)userobj; lwsl_user("%s: len %d, flags: %d\n", __func__, (int)len, flags); lwsl_hexdump_info(buf, len); /* * If we received the whole message, we let the sequencer know it * was a success */ if (flags & LWSSS_FLAG_EOM) { bad = 0; interrupted = 1; } return 0; } static lws_ss_state_return_t myss_tx(void *userobj, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len, int *flags) { // myss_t *m = (myss_t *)userobj; /* in this example, we don't send any payload */ return 0; } static lws_ss_state_return_t myss_state(void *userobj, void *sh, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { myss_t *m = (myss_t *)userobj; lwsl_user("%s: %s, ord 0x%x\n", __func__, lws_ss_state_name(state), (unsigned int)ack); switch (state) { case LWSSSCS_CREATING: return lws_ss_request_tx(m->ss); case LWSSSCS_ALL_RETRIES_FAILED: /* if we're out of retries, we want to close the app and FAIL */ interrupted = 1; break; default: break; } return 0; } typedef enum { SEQ_IDLE, SEQ_TRY_CONNECT, SEQ_RECONNECT_WAIT, SEQ_CONNECTED, } myseq_state_t; typedef struct myseq { struct lws_ss_handle *ss; myseq_state_t state; int http_resp; uint16_t try; } myseq_t; /* * This defines the sequence of things the test app does. */ static lws_seq_cb_return_t min_sec_str_sequencer_cb(struct lws_sequencer *seq, void *user, int event, void *v, void *a) { struct myseq *s = (struct myseq *)user; lws_ss_info_t ssi; switch ((int)event) { /* these messages are created just by virtue of being a sequencer */ case LWSSEQ_CREATED: /* our sequencer just got started */ s->state = SEQ_IDLE; lwsl_notice("%s: LWSSEQ_CREATED\n", __func__); /* We're making an outgoing secure stream ourselves */ memset(&ssi, 0, sizeof(ssi)); ssi.handle_offset = offsetof(myss_t, ss); ssi.opaque_user_data_offset = offsetof(myss_t, opaque_data); ssi.rx = myss_rx; ssi.tx = myss_tx; ssi.state = myss_state; ssi.user_alloc = sizeof(myss_t); /* requested to fail (to check backoff)? */ if (flag_conn_fail) ssi.streamtype = "mintest-fail"; else /* request to check h1 POST */ if (flag_h1post) ssi.streamtype = "minpost"; else /* default to h1 GET */ ssi.streamtype = "mintest"; if (lws_ss_create(lws_seq_get_context(seq), 0, &ssi, NULL, &s->ss, seq, NULL)) { lwsl_err("%s: failed to create secure stream\n", __func__); return LWSSEQ_RET_DESTROY; } break; case LWSSEQ_DESTROYED: lwsl_notice("%s: LWSSEQ_DESTROYED\n", __func__); break; case LWSSEQ_TIMED_OUT: /* current step timed out */ if (s->state == SEQ_RECONNECT_WAIT) return lws_ss_request_tx(s->ss); break; /* * These messages are created because we have a secure stream that was * bound to this sequencer at creation time. It copies its state * events to us as its sequencer parent. v is the lws_ss_handle_t * */ case LWSSEQ_SS_STATE_BASE + LWSSSCS_CREATING: lwsl_info("%s: seq LWSSSCS_CREATING\n", __func__); return lws_ss_request_tx(s->ss); case LWSSEQ_SS_STATE_BASE + LWSSSCS_DISCONNECTED: lwsl_info("%s: seq LWSSSCS_DISCONNECTED\n", __func__); break; case LWSSEQ_SS_STATE_BASE + LWSSSCS_UNREACHABLE: lwsl_info("%s: seq LWSSSCS_UNREACHABLE\n", __func__); break; case LWSSEQ_SS_STATE_BASE + LWSSSCS_AUTH_FAILED: lwsl_info("%s: seq LWSSSCS_AUTH_FAILED\n", __func__); break; case LWSSEQ_SS_STATE_BASE + LWSSSCS_CONNECTED: lwsl_info("%s: seq LWSSSCS_CONNECTED\n", __func__); break; case LWSSEQ_SS_STATE_BASE + LWSSSCS_CONNECTING: lwsl_info("%s: seq LWSSSCS_CONNECTING\n", __func__); break; case LWSSEQ_SS_STATE_BASE + LWSSSCS_DESTROYING: lwsl_info("%s: seq LWSSSCS_DESTROYING\n", __func__); break; case LWSSEQ_SS_STATE_BASE + LWSSSCS_POLL: /* somebody called lws_ss_poll() on the stream */ lwsl_info("%s: seq LWSSSCS_POLL\n", __func__); break; case LWSSEQ_SS_STATE_BASE + LWSSSCS_ALL_RETRIES_FAILED: lwsl_info("%s: seq LWSSSCS_ALL_RETRIES_FAILED\n", __func__); interrupted = 1; break; case LWSSEQ_SS_STATE_BASE + LWSSSCS_QOS_ACK_REMOTE: lwsl_info("%s: seq LWSSSCS_QOS_ACK_REMOTE\n", __func__); break; case LWSSEQ_SS_STATE_BASE + LWSSSCS_QOS_ACK_LOCAL: lwsl_info("%s: seq LWSSSCS_QOS_ACK_LOCAL\n", __func__); break; /* * This is the message we send from the ss handler to inform the * sequencer we had the payload properly */ case LWSSEQ_USER_BASE: bad = 0; interrupted = 1; break; default: break; } return LWSSEQ_RET_CONTINUE; } static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; struct lws_context_creation_info info; struct lws_context *context; lws_seq_info_t i; const char *p; myseq_t *ms; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal secure streams [-d][-f][--h1post]\n"); flag_conn_fail = !!lws_cmdline_option(argc, argv, "-f"); flag_h1post = !!lws_cmdline_option(argc, argv, "--h1post"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.fd_limit_per_thread = 1 + 1 + 1; info.pss_policies_json = default_ss_policy; info.port = CONTEXT_PORT_NO_LISTEN; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } /* * Create the sequencer that performs the steps of the test action * from inside the event loop. */ memset(&i, 0, sizeof(i)); i.context = context; i.user_size = sizeof(myseq_t); i.puser = (void **)&ms; i.cb = min_sec_str_sequencer_cb; i.name = "min-sec-stream-seq"; if (!lws_seq_create(&i)) { lwsl_err("%s: failed to create sequencer\n", __func__); goto bail; } /* the event loop */ while (n >= 0 && !interrupted) n = lws_service(context, 0); bail: lws_context_destroy(context); lwsl_user("Completed: %s\n", bad ? "failed" : "OK"); return bad; } libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-server-raw/000077500000000000000000000000001476025525100312575ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-server-raw/CMakeLists.txt000066400000000000000000000016311476025525100340200ustar00rootroot00000000000000project(lws-minimal-secure-streams-server-raw C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-secure-streams-server-raw) set(SRCS main.c ss-server.c) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) require_lws_config(LWS_WITH_SYS_SMD 1 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS 1 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-server-raw/README.md000066400000000000000000000042461476025525100325440ustar00rootroot00000000000000# lws minimal secure streams server raw The application sets up a raw tcp server on localhost:7681 It does it using Secure Streams... information about how the server should operate is held in JSON policy in main.c Connecting to the server using `echo "hello" | nc --no-shutdown 127.0.0.1 7681` will send "hello" which is hexdumped to console by the rx function, then will receive an incrementing message at 100ms intervals. Note there are two incomaptible versions of netcat around, this is from Fedora's nmap-ncat, the --no-shutdown is needed to stop it hanging up itself after it has sent its stdin. ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 ``` [2020/07/28 10:25:54:6747] U: LWS Secure Streams Server Raw [2020/07/28 10:25:54:7194] N: LWS: 4.0.99-v4.0.0-247-g58be599aa, loglevel 1031 [2020/07/28 10:25:54:7198] N: NET CLI SRV H1 H2 WS MQTT SS-JSON-POL SSPROX ASYNC_DNS IPv6-absent [2020/07/28 10:25:54:9376] N: lws_adopt_descriptor_vhost2: wsi 0x5317d30, vhost system ss_handle (nil) [2020/07/28 10:25:54:9442] N: lws_adopt_descriptor_vhost2: wsi 0x53182c0, vhost system ss_handle (nil) [2020/07/28 10:25:54:9920] N: smd_cb: creating server stream [2020/07/28 10:25:54:9963] N: lws_ss_create: created server myrawserver [2020/07/28 10:26:00:1065] N: secstream_raw: RAW_ADOPT [2020/07/28 10:26:00:1068] N: lws_adopt_descriptor_vhost2: wsi 0x531a6b0, vhost myrawserver ss_handle 0x5319ac0 [2020/07/28 10:26:00:1088] U: myss_raw_state: 0x531aad0 LWSSSCS_CREATING, ord 0x0 [2020/07/28 10:26:00:1094] U: myss_raw_state: 0x531aad0 LWSSSCS_CONNECTING, ord 0x0 [2020/07/28 10:26:00:1096] U: myss_raw_state: 0x531aad0 LWSSSCS_CONNECTED, ord 0x0 [2020/07/28 10:26:00:1172] U: myss_raw_rx: len 6, flags: 0 [2020/07/28 10:26:02:8516] U: myss_raw_state: 0x531aad0 LWSSSCS_DISCONNECTED, ord 0x0 [2020/07/28 10:26:02:8545] U: myss_raw_state: 0x531aad0 LWSSSCS_DESTROYING, ord 0x0 ^C[2020/07/28 10:26:04:9608] U: myss_raw_state: 0x5319ac0 LWSSSCS_DESTROYING, ord 0x0 [2020/07/28 10:26:04:9723] U: Completed: OK ``` ``` $ echo "hello" | nc --no-shutdown 127.0.0.1 7681 hello from raw 0 hello from raw 1 hello from raw 2 ... ``` libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-server-raw/main.c000066400000000000000000000043561476025525100323570ustar00rootroot00000000000000/* * lws-minimal-secure-streams-server * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include #include #include extern const lws_ss_info_t ssi_client, ssi_server; static struct lws_context *context; int interrupted, bad = 1; static const char * const default_ss_policy = "{" "\"release\":" "\"01234567\"," "\"product\":" "\"myproduct\"," "\"schema-version\":" "1," "\"s\": [" /* * This streamtype represents a raw server listening on :7681, * without tls */ "{\"myrawserver\": {" /* if given, "endpoint" is network if to bind to */ "\"server\":" "true," "\"port\":" "7681," "\"protocol\":" "\"raw\"" "}}" "]" "}" ; static int smd_cb(void *opaque, lws_smd_class_t c, lws_usec_t ts, void *buf, size_t len) { if ((c & LWSSMDCL_SYSTEM_STATE) && !lws_json_simple_strcmp(buf, len, "\"state\":", "OPERATIONAL")) { /* create the secure streams */ lwsl_notice("%s: creating server stream\n", __func__); if (lws_ss_create(context, 0, &ssi_server, NULL, NULL, NULL, NULL)) { lwsl_err("%s: failed to create secure stream\n", __func__); return -1; } } return 0; } static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; int n = 0; signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ lws_cmdline_option_handle_builtin(argc, argv, &info); lwsl_user("LWS Secure Streams Server Raw\n"); info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.fd_limit_per_thread = 1 + 6 + 1; info.pss_policies_json = default_ss_policy; info.port = CONTEXT_PORT_NO_LISTEN; info.early_smd_cb = smd_cb; info.early_smd_class_filter = LWSSMDCL_SYSTEM_STATE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } /* the event loop */ while (n >= 0 && !interrupted) n = lws_service(context, 0); bad = 0; lws_context_destroy(context); lwsl_user("Completed: %s\n", bad ? "failed" : "OK"); return bad; } libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-server-raw/ss-server.c000066400000000000000000000046001476025525100333540ustar00rootroot00000000000000/* * lws-minimal-secure-streams-server * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include #include extern int interrupted, bad; typedef struct myss { struct lws_ss_handle *ss; void *opaque_data; /* ... application specific state ... */ lws_sorted_usec_list_t sul; int count; char upgraded; } myss_srv_t; /* * This is the Secure Streams Server RX and TX */ static lws_ss_state_return_t myss_raw_rx(void *userobj, const uint8_t *buf, size_t len, int flags) { // myss_srv_t *m = (myss_srv_t *)userobj; lwsl_user("%s: len %d, flags: %d\n", __func__, (int)len, flags); lwsl_hexdump_info(buf, len); /* * If we received the whole message, for our example it means * we are done. */ if (flags & LWSSS_FLAG_EOM) { bad = 0; interrupted = 1; } return 0; } /* this is the callback that mediates sending the incrementing number */ static void spam_sul_cb(struct lws_sorted_usec_list *sul) { myss_srv_t *m = lws_container_of(sul, myss_srv_t, sul); if (!lws_ss_request_tx(m->ss)) lws_sul_schedule(lws_ss_get_context(m->ss), 0, &m->sul, spam_sul_cb, 100 * LWS_US_PER_MS); } static lws_ss_state_return_t myss_raw_tx(void *userobj, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len, int *flags) { myss_srv_t *m = (myss_srv_t *)userobj; *flags = LWSSS_FLAG_SOM | LWSSS_FLAG_EOM; *len = (unsigned int)lws_snprintf((char *)buf, *len, "hello from raw %d\n", m->count++); lws_sul_schedule(lws_ss_get_context(m->ss), 0, &m->sul, spam_sul_cb, 100 * LWS_US_PER_MS); return 0; } static lws_ss_state_return_t myss_raw_state(void *userobj, void *sh, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { myss_srv_t *m = (myss_srv_t *)userobj; lwsl_user("%s: %p %s, ord 0x%x\n", __func__, m->ss, lws_ss_state_name((int)state), (unsigned int)ack); switch (state) { case LWSSSCS_DISCONNECTED: lws_sul_cancel(&m->sul); break; case LWSSSCS_CONNECTED: return lws_ss_request_tx(m->ss); default: break; } return 0; } const lws_ss_info_t ssi_server = { .handle_offset = offsetof(myss_srv_t, ss), .opaque_user_data_offset = offsetof(myss_srv_t, opaque_data), .streamtype = "myrawserver", .rx = myss_raw_rx, .tx = myss_raw_tx, .state = myss_raw_state, .user_alloc = sizeof(myss_srv_t), }; libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-server/000077500000000000000000000000001476025525100304705ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-server/CMakeLists.txt000066400000000000000000000017201476025525100332300ustar00rootroot00000000000000project(lws-minimal-secure-streams-server C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-secure-streams-server) set(SRCS main.c ss-client.c ss-server.c) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) require_lws_config(LWS_WITH_SYS_SMD 1 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS 1 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-server/README.md000066400000000000000000000104241476025525100317500ustar00rootroot00000000000000# lws minimal secure streams server The application sets up a tls + ws server on https://localhost:7681 It does it using Secure Streams... information about how the server should operate is held in JSON policy in main.c Visiting the server in a modern browser will fetch some html + JS, the JS will create a ws link back to the server and the server will spam an incrementing number that is displayed in the browser every 100ms. The app also has a SS client that works, but it's disabled by default since we're interested in server. ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 ``` [2020/07/27 10:51:04:8994] U: LWS Secure Streams Server [2020/07/27 10:51:04:9440] N: LWS: 4.0.99-v4.0.0-245-ge6eb4417a, loglevel 1031 [2020/07/27 10:51:04:9444] N: NET CLI SRV H1 H2 WS MQTT SS-JSON-POL SSPROX ASYNC_DNS IPv6-absent [2020/07/27 10:51:05:1685] N: lws_adopt_descriptor_vhost2: wsi 0x5317d30, vhost system ss_handle (nil) [2020/07/27 10:51:05:1753] N: lws_adopt_descriptor_vhost2: wsi 0x53182c0, vhost system ss_handle (nil) [2020/07/27 10:51:05:2129] N: lws_ss_policy_parser_cb: server 'self_localhost' keep 52 0x5318cc0 [2020/07/27 10:51:05:2134] N: lws_ss_policy_parser_cb: server 'self_localhost_key' keep 53 0x5318cf8 [2020/07/27 10:51:05:2192] N: lws_ss_policy_ref_trust_store: le_via_isrg trust store initial 'isrg_root_x1' [2020/07/27 10:51:05:7804] N: smd_cb: creating server stream [2020/07/27 10:51:05:7851] N: Vhost 'myserver' using TLS mode [2020/07/27 10:51:05:8660] N: SSL ECDH curve 'prime256v1' [2020/07/27 10:51:06:1035] N: vhost myserver: cert expiry: 729599d [2020/07/27 10:51:06:1039] N: lws_ss_create: created server myserver [2020/07/27 10:51:11:8650] N: lws_adopt_descriptor_vhost2: wsi 0x5b046e0, vhost myserver ss_handle 0x56e2be0 [2020/07/27 10:51:11:8672] U: myss_srv_state: 0x5b52f60 LWSSSCS_CREATING, ord 0x0 [2020/07/27 10:51:11:8693] U: myss_srv_state: 0x5b52f60 LWSSSCS_CONNECTING, ord 0x0 [2020/07/27 10:51:11:8696] U: myss_srv_state: 0x5b52f60 LWSSSCS_CONNECTED, ord 0x0 [2020/07/27 10:51:11:9743] U: myss_srv_state: 0x5ba2bd0 LWSSSCS_CREATING, ord 0x0 [2020/07/27 10:51:11:9747] U: myss_srv_state: 0x5ba2bd0 LWSSSCS_CONNECTING, ord 0x0 [2020/07/27 10:51:11:9747] U: myss_srv_state: 0x5ba2bd0 LWSSSCS_CONNECTED, ord 0x0 [2020/07/27 10:51:12:0192] U: myss_srv_state: 0x5bad0a0 LWSSSCS_CREATING, ord 0x0 [2020/07/27 10:51:12:0193] U: myss_srv_state: 0x5bad0a0 LWSSSCS_CONNECTING, ord 0x0 [2020/07/27 10:51:12:0194] U: myss_srv_state: 0x5bad0a0 LWSSSCS_CONNECTED, ord 0x0 [2020/07/27 10:51:12:0306] N: secstream_h1: LWS_CALLBACK_HTTP [2020/07/27 10:51:12:0329] U: myss_srv_state: 0x5bad0a0 LWSSSCS_SERVER_TXN, ord 0x0 [2020/07/27 10:51:12:0481] N: lws_h2_ws_handshake: Server SS 0x5ba2bd0 .wsi 0x5ba27b0 switching to ws protocol [2020/07/27 10:51:12:0484] U: myss_srv_state: 0x5ba2bd0 LWSSSCS_SERVER_UPGRADE, ord 0x0 [2020/07/27 10:51:12:0541] U: myss_srv_state: 0x5ba2bd0 LWSSSCS_CONNECTED, ord 0x0 [2020/07/27 10:51:12:1222] U: myss_srv_state: 0x5bd1100 LWSSSCS_CREATING, ord 0x0 [2020/07/27 10:51:12:1222] U: myss_srv_state: 0x5bd1100 LWSSSCS_CONNECTING, ord 0x0 [2020/07/27 10:51:12:1223] U: myss_srv_state: 0x5bd1100 LWSSSCS_CONNECTED, ord 0x0 [2020/07/27 10:51:12:1242] N: lws_h2_ws_handshake: Server SS 0x5bd1100 .wsi 0x5bd0ce0 switching to ws protocol [2020/07/27 10:51:12:1243] U: myss_srv_state: 0x5bd1100 LWSSSCS_SERVER_UPGRADE, ord 0x0 [2020/07/27 10:51:12:1246] U: myss_srv_state: 0x5bd1100 LWSSSCS_CONNECTED, ord 0x0 ^C[2020/07/27 10:51:15:2809] U: myss_srv_state: 0x5bad0a0 LWSSSCS_DISCONNECTED, ord 0x0 [2020/07/27 10:51:15:2838] U: myss_srv_state: 0x5bad0a0 LWSSSCS_DESTROYING, ord 0x0 [2020/07/27 10:51:15:2938] U: myss_srv_state: 0x5ba2bd0 LWSSSCS_DISCONNECTED, ord 0x0 [2020/07/27 10:51:15:2946] U: myss_srv_state: 0x5ba2bd0 LWSSSCS_DESTROYING, ord 0x0 [2020/07/27 10:51:15:2952] U: myss_srv_state: 0x5bd1100 LWSSSCS_DISCONNECTED, ord 0x0 [2020/07/27 10:51:15:2953] U: myss_srv_state: 0x5bd1100 LWSSSCS_DESTROYING, ord 0x0 [2020/07/27 10:51:15:2960] U: myss_srv_state: 0x5b52f60 LWSSSCS_DISCONNECTED, ord 0x0 [2020/07/27 10:51:15:2961] U: myss_srv_state: 0x5b52f60 LWSSSCS_DESTROYING, ord 0x0 [2020/07/27 10:51:15:3042] U: myss_srv_state: 0x56e2be0 LWSSSCS_DESTROYING, ord 0x0 [2020/07/27 10:51:15:3378] U: Completed: OK ``` libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-server/main.c000066400000000000000000000275661476025525100316000ustar00rootroot00000000000000/* * lws-minimal-secure-streams-server * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include #include #include extern const lws_ss_info_t ssi_client, ssi_server; static struct lws_context *context; int interrupted, bad = 1, multipart; static const char * const default_ss_policy = "{" "\"release\":" "\"01234567\"," "\"product\":" "\"myproduct\"," "\"schema-version\":" "1," "\"retry\": [" /* named backoff / retry strategies */ "{\"default\": {" "\"backoff\": [" "1000," "2000," "3000," "5000," "10000" "]," "\"conceal\":" "5," "\"jitterpc\":" "20," "\"svalidping\":" "300," "\"svalidhup\":" "310" "}}" "]," "\"certs\": [" /* named individual certificates in BASE64 DER */ /* * Need to be in order from root cert... notice sometimes as * with Let's Encrypt there are multiple possible validation * paths, all the pieces for one validation path must be * given, excluding the server cert itself. Let's Encrypt * intermediate is signed by their ISRG Root CA but also is * cross-signed by an IdenTrust intermediate that's widely * deployed in browsers. We use the ISRG path because that * way we can skip the extra IdenTrust root cert. */ "{\"isrg_root_x1\": \"" "MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw" "TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh" "cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4" "WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu" "ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY" "MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc" "h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+" "0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U" "A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW" "T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH" "B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC" "B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv" "KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn" "OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn" "jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw" "qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI" "rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV" "HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq" "hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL" "ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ" "3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK" "NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5" "ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur" "TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC" "jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc" "oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq" "4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA" "mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d" "emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=" "\"}," /* * a selfsigned cert for localhost for 100 years */ "{\"self_localhost\": \"" "MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD" "VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb" "MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx" "HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3" "WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl" "d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0" "cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA" "aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW" "aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8" "Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek" "LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH" "KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6" "jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ" "Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz" "TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK" "Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0" "nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo" "GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p" "sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU" "9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar" "jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow" "YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA" "xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P" "wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34" "H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv" "xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk" "ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g" "1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA" "AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg" "mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s" "8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX" "e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE=" "\"}," /* * the private key for above */ "{\"self_localhost_key\": \"" "MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ" "PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK" "nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ" "toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU" "0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT" "J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS" "Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN" "uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9" "fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn" "zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au" "ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB" "QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f" "qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+" "vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9" "fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A" "Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT" "G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/" "HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8" "YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl" "xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs" "esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw" "zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz" "mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw" "au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77" "40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5" "YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH" "PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj" "W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR" "naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6" "2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m" "39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79" "J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC" "R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp" "Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh" "BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE" "fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ" "x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI" "UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM" "OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L" "65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A" "aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5" "SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S" "me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I" "G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK" "TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY" "56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2" "gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr" "Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E" "NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs" "fBrpEY1IATtPq1taBZZogRqI3rOkkPk=" "\"}" "]," "\"trust_stores\": [" /* named cert chains */ "{" "\"name\": \"le_via_isrg\"," "\"stack\": [" "\"isrg_root_x1\"" "]" "}" "]," "\"s\": [" /* * Client streamtypes */ "{\"mintest\": {" "\"endpoint\":" "\"warmcat.com\"," "\"port\":" "443," "\"protocol\":" "\"h2\"," "\"http_method\":" "\"GET\"," "\"http_url\":" "\"index.html\"," "\"tls\":" "true," "\"retry\":" "\"default\"," "\"tls_trust_store\":" "\"le_via_isrg\"" "}}," /* * This streamtype represents an h2 server listening on :7681, * using a 100-y self-signed tls cert */ "{\"myserver\": {" /* if given, "endpoint" is network if to bind to */ "\"server\":" "true," "\"port\":" "7681," "\"protocol\":" "\"h1\"," "\"metadata\": [{" "\"mime\": \"Content-Type:\"," "\"method\": \"\"," "\"path\": \"\"" "}]," "\"tls\":" "true," /* * A ws server is an http server, if you give a * ws_subprotocol here it's understood we also serve * that ove ws or wss according to tls */ "\"ws_subprotocol\":" "\"mywsprotocol\"," "\"server_cert\":" "\"self_localhost\"," "\"server_key\":" "\"self_localhost_key\"" "}}," "]" "}" ; static int smd_cb(void *opaque, lws_smd_class_t c, lws_usec_t ts, void *buf, size_t len) { if ((c & LWSSMDCL_SYSTEM_STATE) && !lws_json_simple_strcmp(buf, len, "\"state\":", "OPERATIONAL")) { /* create the secure streams */ lwsl_notice("%s: creating server stream\n", __func__); if (lws_ss_create(context, 0, &ssi_server, NULL, NULL, NULL, NULL)) { lwsl_err("%s: failed to create secure stream\n", __func__); bad = 1; interrupted = 1; lws_cancel_service(context); return -1; } #if 0 lwsl_notice("%s: creating client stream\n", __func__); if (lws_ss_create(context, 0, &ssi_client, NULL, NULL, NULL, NULL)) { lwsl_err("%s: failed to create secure stream\n", __func__); return -1; } #endif } return 0; } static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; int n = 0; signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ lws_cmdline_option_handle_builtin(argc, argv, &info); if (lws_cmdline_option(argc, argv, "-m")) multipart = 1; lwsl_user("LWS Secure Streams Server\n"); info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.fd_limit_per_thread = 1 + 6 + 1; info.pss_policies_json = default_ss_policy; info.port = CONTEXT_PORT_NO_LISTEN; info.early_smd_cb = smd_cb; info.early_smd_class_filter = LWSSMDCL_SYSTEM_STATE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } /* the event loop */ while (n >= 0 && !interrupted) n = lws_service(context, 0); bad = 0; lws_context_destroy(context); lwsl_user("Completed: %s\n", bad ? "failed" : "OK"); return bad; } libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-server/ss-client.c000066400000000000000000000035161476025525100325420ustar00rootroot00000000000000/* * lws-minimal-secure-streams-server * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include extern int interrupted, bad; typedef struct myss { struct lws_ss_handle *ss; void *opaque_data; /* ... application specific state ... */ lws_sorted_usec_list_t sul; int count; } myss_t; /* secure streams payload interface */ static lws_ss_state_return_t myss_rx(void *userobj, const uint8_t *buf, size_t len, int flags) { // myss_t *m = (myss_t *)userobj; lwsl_user("%s: len %d, flags: %d\n", __func__, (int)len, flags); lwsl_hexdump_info(buf, len); /* * If we received the whole message, for our example it means * we are done. */ if (flags & LWSSS_FLAG_EOM) { bad = 0; interrupted = 1; } return 0; } static lws_ss_state_return_t myss_tx(void *userobj, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len, int *flags) { //myss_t *m = (myss_t *)userobj; return LWSSSSRET_TX_DONT_SEND; /* don't want to write */ } static lws_ss_state_return_t myss_state(void *userobj, void *sh, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { myss_t *m = (myss_t *)userobj; lwsl_user("%s: %p %s, ord 0x%x\n", __func__, m->ss, lws_ss_state_name((int)state), (unsigned int)ack); switch (state) { case LWSSSCS_CREATING: return lws_ss_request_tx(m->ss); break; case LWSSSCS_ALL_RETRIES_FAILED: /* if we're out of retries, we want to close the app and FAIL */ interrupted = 1; break; default: break; } return 0; } const lws_ss_info_t ssi_client = { .handle_offset = offsetof(myss_t, ss), .opaque_user_data_offset = offsetof(myss_t, opaque_data), .streamtype = "mintest", .rx = myss_rx, .tx = myss_tx, .state = myss_state, .user_alloc = sizeof(myss_t), }; libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-server/ss-server.c000066400000000000000000000135021476025525100325660ustar00rootroot00000000000000/* * lws-minimal-secure-streams-server * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include #include extern int interrupted, bad, multipart; static const char *html = /* normally we serve this... */ "" "Hello from the web server
    " "
    " "", *multipart_html = /* * If you use -m commandline switch we send this instead, as * multipart/form-data */ "--aBoundaryString\r\n" "Content-Disposition: form-data; name=\"myFile\"; filename=\"xxx.txt\"\r\n" "Content-Type: text/plain\r\n" "\r\n" "The file contents\r\n" "--aBoundaryString\r\n" "Content-Disposition: form-data; name=\"myField\"\r\n" "\r\n" "(data)\r\n" "--aBoundaryString--\r\n"; typedef struct myss { struct lws_ss_handle *ss; void *opaque_data; /* ... application specific state ... */ lws_sorted_usec_list_t sul; int count; char upgraded; } myss_srv_t; /* * This is the Secure Streams Server RX and TX for HTTP(S) */ static lws_ss_state_return_t myss_srv_rx(void *userobj, const uint8_t *buf, size_t len, int flags) { // myss_srv_t *m = (myss_srv_t *)userobj; lwsl_user("%s: len %d, flags: %d\n", __func__, (int)len, flags); lwsl_hexdump_info(buf, len); /* * If we received the whole message, for our example it means * we are done. */ if (flags & LWSSS_FLAG_EOM) { bad = 0; interrupted = 1; } return 0; } static lws_ss_state_return_t myss_srv_tx(void *userobj, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len, int *flags) { myss_srv_t *m = (myss_srv_t *)userobj; const char *send = html; if (m->upgraded) return LWSSSSRET_TX_DONT_SEND; if (multipart) send = multipart_html; *flags = LWSSS_FLAG_SOM | LWSSS_FLAG_EOM; lws_strncpy((char *)buf, send, *len); *len = strlen(send); return 0; } /* * This is the Secure Streams Server RX and TX for WS(S)... when we get a * state that the underlying connection upgraded protocol, we switch the stream * rx and tx handlers to here. */ static lws_ss_state_return_t myss_ws_rx(void *userobj, const uint8_t *buf, size_t len, int flags) { // myss_srv_t *m = (myss_srv_t *)userobj; lwsl_user("%s: len %d, flags: %d\n", __func__, (int)len, flags); lwsl_hexdump_info(buf, len); /* * If we received the whole message, for our example it means * we are done. */ if (flags & LWSSS_FLAG_EOM) { bad = 0; interrupted = 1; } return 0; } /* this is the callback that mediates sending the incrementing number */ static void spam_sul_cb(struct lws_sorted_usec_list *sul) { myss_srv_t *m = lws_container_of(sul, myss_srv_t, sul); if (!lws_ss_request_tx(m->ss)) lws_sul_schedule(lws_ss_get_context(m->ss), 0, &m->sul, spam_sul_cb, 100 * LWS_US_PER_MS); } static lws_ss_state_return_t myss_ws_tx(void *userobj, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len, int *flags) { myss_srv_t *m = (myss_srv_t *)userobj; *flags = LWSSS_FLAG_SOM | LWSSS_FLAG_EOM; *len = (unsigned int)lws_snprintf((char *)buf, *len, "hello from ws %d", m->count++); lws_sul_schedule(lws_ss_get_context(m->ss), 0, &m->sul, spam_sul_cb, 100 * LWS_US_PER_MS); return 0; } static lws_ss_state_return_t myss_srv_state(void *userobj, void *sh, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { myss_srv_t *m = (myss_srv_t *)userobj; lwsl_user("%s: %p %s, ord 0x%x\n", __func__, m->ss, lws_ss_state_name((int)state), (unsigned int)ack); switch (state) { case LWSSSCS_DISCONNECTED: lws_sul_cancel(&m->sul); break; case LWSSSCS_CREATING: return lws_ss_request_tx(m->ss); case LWSSSCS_ALL_RETRIES_FAILED: /* if we're out of retries, we want to close the app and FAIL */ interrupted = 1; break; case LWSSSCS_SERVER_TXN: /* * The underlying protocol started a transaction, let's * describe how we want to complete it. We can defer this until * later, eg, after we have consumed any rx that's coming with * the client's transaction initiation phase, but in this * example we know what we want to do already. * * We do want to ack the transaction... */ lws_ss_server_ack(m->ss, 0); /* * ... it's going to be either text/html or multipart ... */ if (multipart) { if (lws_ss_set_metadata(m->ss, "mime", "multipart/form-data; boundary=aBoundaryString", 45)) return LWSSSSRET_DISCONNECT_ME; } else if (lws_ss_set_metadata(m->ss, "mime", "text/html", 9)) return LWSSSSRET_DISCONNECT_ME; /* * ...it's going to be whatever size it is (and request tx) */ return lws_ss_request_tx_len(m->ss, (unsigned long) (multipart ? strlen(multipart_html) : strlen(html))); case LWSSSCS_SERVER_UPGRADE: /* * This is sent when the underlying protocol has experienced * an upgrade, eg, http->ws... it's a one-way upgrade on this * stream, change the handlers to deal with the kind of * messages we send on ws */ m->upgraded = 1; lws_ss_change_handlers(m->ss, myss_ws_rx, myss_ws_tx, NULL); return lws_ss_request_tx(m->ss); /* we want to start sending numbers */ default: break; } return 0; } const lws_ss_info_t ssi_server = { .handle_offset = offsetof(myss_srv_t, ss), .opaque_user_data_offset = offsetof(myss_srv_t, opaque_data), .streamtype = "myserver", .rx = myss_srv_rx, .tx = myss_srv_tx, .state = myss_srv_state, .user_alloc = sizeof(myss_srv_t), }; libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-sigv4/000077500000000000000000000000001476025525100302165ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-sigv4/CMakeLists.txt000066400000000000000000000065131476025525100327630ustar00rootroot00000000000000project(lws-minimal-secure-streams-sigv4 C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-secure-streams-sigv4) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS 1 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS_AUTH_SIGV4 1 requirements) if (requirements) add_executable(${SAMP} ss-s3-main.c ss-s3-ss.c) find_program(VALGRIND "valgrind") if (LWS_CTEST_INTERNET_AVAILABLE AND NOT WIN32 AND 0) if (VALGRIND) message("testing via valgrind") add_test(NAME ss-sigv4 COMMAND ${VALGRIND} --tool=memcheck --leak-check=yes --num-callers=20 $) else() add_test(NAME ss-sigv4 COMMAND lws-minimal-secure-streams-sigv4) endif() set_tests_properties(ss-sigv4 PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/secure-streams/minimal-secure-streams-sigv4 TIMEOUT 20) if (HAS_LWS_WITH_SECURE_STREAMS_PROXY_API OR LWS_WITH_SECURE_STREAMS_PROXY_API) # # Define test dep to bring up and take down the test # proxy # if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") # uds abstract namespace for linux set(CTEST_SOCKET_PATH "@ctest-sspsigv4-$ENV{SAI_PROJECT}-$ENV{SAI_OVN}") else() # filesystem socket for others set(CTEST_SOCKET_PATH "/tmp/ctest-sspsigv4-$ENV{SAI_PROJECT}-$ENV{SAI_OVN}") endif() add_test(NAME st_ssproxysigv4 COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background.sh ssproxysigv4 $ -i ${CTEST_SOCKET_PATH} ) set_tests_properties(st_ssproxysigv4 PROPERTIES WORKING_DIRECTORY . FIXTURES_SETUP ssproxysigv4 TIMEOUT 800) add_test(NAME ki_ssproxysigv4 COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background-kill.sh ssproxysigv4 $ -i ${CTEST_SOCKET_PATH}) set_tests_properties(ki_ssproxysigv4 PROPERTIES FIXTURES_CLEANUP ssproxysigv4) # # the client part that will connect to the proxy # if (VALGRIND) message("testing via valgrind") add_test(NAME sspc-sigv4 COMMAND ${VALGRIND} --tool=memcheck --leak-check=yes --num-callers=20 $ -i +${CTEST_SOCKET_PATH}) else() add_test(NAME sspc-sigv4 COMMAND lws-minimal-secure-streams-sigv4-client -i +${CTEST_SOCKET_PATH}) endif() set_tests_properties(sspc-sigv4 PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/secure-streams/minimal-secure-streams-sigv4 FIXTURES_REQUIRED "ssproxysigv4" TIMEOUT 40) endif() endif() if (websockets_shared) target_link_libraries(${SAMP} websockets_shared) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets) endif() if (LWS_WITH_SECURE_STREAMS_PROXY_API) add_compile_options(-DLWS_SS_USE_SSPC) add_executable(${SAMP}-client ss-s3-main.c ss-s3-ss.c) if (websockets_shared) target_link_libraries(${SAMP}-client websockets_shared) add_dependencies(${SAMP}-client websockets_shared) else() target_link_libraries(${SAMP}-client websockets) endif() endif() endif() libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-sigv4/README.md000066400000000000000000000031031476025525100314720ustar00rootroot00000000000000# lws minimal secure streams sigv4 The application put a test file to AWS S3, using sigv4 auth. It does it using Secure Streams... the streamtype is "s3PutObj", along with main are in ss-s3-main.c The handler for state changes and payloads for "s3PutObj" is in ss-s3-ss.c ## metadata "aws_region" and "aws_service" are configured through metadata. Also, at least "x-amz-content-sha256:" and ""x-amz-date:" headers need to be in metadata. ## credentials credentials are read from ~/.aws/credentials, make sure you have valid keyid and key. One need to call lws_ss_sigv4_set_aws_key() to plug in aws credentials into Secure Streams and the index need to be match of the "blob_index" in entry of "auth" the policy. In addition, you need to change the S3 bucket name to your own, as bucket name is unique globally in S3. ## build ``` $ cmake . && make ``` ## usage ``` [2020/12/19 15:25:06:9763] U: LWS minimal secure streams sigv4 [2020/12/19 15:25:07:0768] U: ss_s3_state: LWSSSCS_CREATING, ord 0x0 [2020/12/19 15:25:07:0769] U: ss_s3_state: LWSSSCS_POLL, ord 0x0 [2020/12/19 15:25:07:0770] U: ss_s3_state: LWSSSCS_CONNECTING, ord 0x0 [2020/12/19 15:25:07:2317] U: SS / TX Payload [2020/12/19 15:25:07:2317] U: SS / TX Payload Total = 1024, Pos = 0 [2020/12/19 15:25:07:3267] U: ss_s3_state: LWSSSCS_CONNECTED, ord 0x0 [2020/12/19 15:25:07:3267] U: ss_s3_state: LWSSSCS_QOS_ACK_REMOTE, ord 0x0 [2020/12/19 15:25:07:3267] U: ss_s3_state: LWSSSCS_DISCONNECTED, ord 0x0 [2020/12/19 15:25:07:3268] U: ss_s3_state: LWSSSCS_DESTROYING, ord 0x0 [2020/12/19 15:25:07:3269] U: Completed: OK ``` libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-sigv4/policy.json000066400000000000000000000110261476025525100324100ustar00rootroot00000000000000{"release":"01234567","product":"myproduct","schema-version":1,"retry": [{"default": {"backoff": [100,200,300,500,1000],"conceal":5,"jitterpc":20,"svalidping":30,"svalidhup":35}}],"certs": [{"amazon_root_ca_1": "MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5"},{"starfield_services_root_ca": "MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkdiEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6"},{"baltimore_cybertrust_root": "MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp"}],"trust_stores": [{"name": "s3-root-cert","stack": ["baltimore_cybertrust_root","amazon_root_ca_1","starfield_services_root_ca"]}],"auth": [{"name": "sigv4_br","type": "sigv4","blob": 0}],"s": [{"s3PutObj": {"endpoint":"${s3bucket}.s3.amazonaws.com","port":443,"protocol":"h1","http_method":"PUT","http_url":"${s3Obj}","http_no_content_length": false,"tls":true,"tls_trust_store":"s3-root-cert","opportunistic":true,"retry":"default","use_auth":"sigv4_br","aws_region":"region","aws_service":"service","metadata": [{"region": ""},{"service": ""},{"s3bucket": ""},{"s3Obj": ""},{"ctype": "content-type:"},{"xcsha256": "x-amz-content-sha256:"},{"xdate": "x-amz-date:"},{"xacl": "x-amz-acl:"}]}}]}libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-sigv4/ss-s3-main.c000066400000000000000000000235031476025525100322570ustar00rootroot00000000000000/* * S3 Put Object via Secure Streams minimal sigv4 example * * Written in 2010-2021 by Andy Green * Amit Pachore * securestreams-dev@amazon.com * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include #include #include #include #include "ss-s3-put.h" #if defined(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY) #include "static_policy.h" #endif int interrupted, bad = 1; static lws_state_notify_link_t nl; extern const lws_ss_info_t s3_ssi; #if !defined(LWS_SS_USE_SSPC) #if !defined(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY) static const char * const default_ss_policy = "{" "\"release\":" "\"01234567\"," "\"product\":" "\"myproduct\"," "\"schema-version\":" "1," "\"retry\": [" /* named backoff / retry strategies */ "{\"default\": {" "\"backoff\": [" "100," "200," "300," "500," "1000" "]," "\"conceal\":" "5," "\"jitterpc\":" "20," "\"svalidping\":" "30," "\"svalidhup\":" "35" "}}" "]," "\"certs\": [" /* named individual certificates in BASE64 DER */ "{\"amazon_root_ca_1\": \"" "MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFA" "DA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b2" "4gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAk" "GA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg" "Q0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXjca9Hg" "FB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM9O6II8" "c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHr" "QgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5" "SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6" "pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg" "0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0" "OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUAA4IBAQCY8jda" "QZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PMCCjjmCXPI" "6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbv" "Xy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtP" "HRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJi" "oaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5W" "TP468SQvvG5" "\"}," "{\"starfield_services_root_ca\": \"" "MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx" "EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT" "HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs" "ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5" "MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD" "VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy" "ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy" "dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI" "hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p" "OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2" "8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K" "Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe" "hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk" "6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw" "DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q" "AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI" "bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB" "ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z" "qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd" "iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn" "0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN" "sSi6" "\"}," "{\"baltimore_cybertrust_root\": \"" /* LE X3 signed by ISRG X1 root */ "MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ" "RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD" "VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX" "DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y" "ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy" "VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr" "mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr" "IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK" "mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu" "XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy" "dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye" "jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1" "BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3" "DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92" "9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx" "jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0" "Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz" "ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS" "R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp" "\"}" "]," "\"trust_stores\": [" /* named cert chains */ "{" "\"name\": \"s3-root-cert\"," "\"stack\": [" "\"baltimore_cybertrust_root\"," "\"amazon_root_ca_1\"," "\"starfield_services_root_ca\"" "]" "}" "]," "\"auth\": [" /* named cert chains */ "{" "\"name\": \"sigv4_br\"," "\"type\": \"sigv4\"," "\"blob\": 0" "}" "]," "\"s\": [" "{\"s3PutObj\": {" "\"endpoint\":" "\"${s3bucket}.s3.amazonaws.com\"," "\"port\":" "443," "\"protocol\":" "\"h1\"," "\"http_method\":" "\"PUT\"," "\"http_url\":" "\"${s3Obj}\"," "\"http_no_content_length\": false," "\"tls\":" "true," "\"tls_trust_store\":" "\"s3-root-cert\"," "\"opportunistic\":" "true," "\"retry\":" "\"default\"," "\"use_auth\":" "\"sigv4_br\"," "\"aws_region\":" "\"region\"," "\"aws_service\":" "\"service\"," "\"metadata\": [" "{\"region\": \"\"}," "{\"service\": \"\"}," "{\"s3bucket\": \"\"}," "{\"s3Obj\": \"\"}," "{\"ctype\": \"content-type:\"}," "{\"xcsha256\": \"x-amz-content-sha256:\"}," "{\"xdate\": \"x-amz-date:\"}," "{\"xacl\": \"x-amz-acl:\"}" "]" "}}" "]" "}" ; #endif static char *aws_keyid, *aws_key; #endif static int app_system_state_nf(lws_state_manager_t *mgr, lws_state_notify_link_t *link, int current, int target) { struct lws_context *context = lws_system_context_from_system_mgr(mgr); struct lws_ss_handle *h; switch (target) { case LWS_SYSTATE_REGISTERED: break; case LWS_SYSTATE_OPERATIONAL: if (current != LWS_SYSTATE_OPERATIONAL) break; #if !defined(LWS_SS_USE_SSPC) if (lws_aws_filesystem_credentials_helper( "~/.aws/credentials", "aws_access_key_id", "aws_secret_access_key", &aws_keyid, &aws_key)) return -1; lws_ss_sigv4_set_aws_key(context, 0, aws_keyid, aws_key); #endif if (lws_ss_create(context, 0, &s3_ssi, NULL, &h, NULL, NULL)) { lwsl_err("%s: failed to create secure stream\n", __func__); return -1; } break; } return 0; } static lws_state_notify_link_t * const app_notifier_list[] = { &nl, NULL }; static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { int logs = LLL_USER | LLL_ERR | LLL_WARN /* | LLL_NOTICE */ ; struct lws_context_creation_info info; struct lws_context *context; int n = 0; signal(SIGINT, sigint_handler); lws_set_log_level(logs, NULL); memset(&info, 0, sizeof info); lws_cmdline_option_handle_builtin(argc, argv, &info); lwsl_user("LWS minimal secure streams sigv4 \n"); info.fd_limit_per_thread = 1 + 6 + 1; info.port = CONTEXT_PORT_NO_LISTEN; #if defined(LWS_SS_USE_SSPC) info.protocols = lws_sspc_protocols; { const char *p; /* connect to ssproxy via UDS by default, else via * tcp connection to this port */ if ((p = lws_cmdline_option(argc, argv, "-p"))) info.ss_proxy_port = (uint16_t)atoi(p); /* UDS "proxy.ss.lws" in abstract namespace, else this socket * path; when -p given this can specify the network interface * to bind to */ if ((p = lws_cmdline_option(argc, argv, "-i"))) info.ss_proxy_bind = p; /* if -p given, -a specifies the proxy address to connect to */ if ((p = lws_cmdline_option(argc, argv, "-a"))) info.ss_proxy_address = p; } #else #if defined(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY) info.pss_policies = &_ss_static_policy_entry; #else info.pss_policies_json = default_ss_policy; #endif info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; #endif /* integrate us with lws system state management when context created */ nl.name = "app"; nl.notify_cb = app_system_state_nf; info.register_notifier_list = app_notifier_list; /* create the context */ context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } lws_system_blob_heap_append(lws_system_get_blob(context, LWS_SYSBLOB_TYPE_DEVICE_TYPE, 0), (const uint8_t *)"beerfountain", 12); /* the event loop */ while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); #if !defined(LWS_SS_USE_SSPC) if (aws_key) free(aws_key); if (aws_keyid) free(aws_keyid); #endif lwsl_user("Completed: %s\n", bad ? "failed" : "OK"); return bad; } libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-sigv4/ss-s3-put.h000066400000000000000000000007611476025525100321510ustar00rootroot00000000000000/* * S3 Put Object via Secure Streams minimal sigv4 example * * Written in 2010-2020 by Andy Green * Amit Pachore * securestreams-dev@amazon.com * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ typedef struct ss_s3_put { struct lws_ss_handle *ss; void *opaque_data; /* ... application specific state ... */ size_t total; size_t pos; uint8_t *buf; } ss_s3_put_t; libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-sigv4/ss-s3-ss.c000066400000000000000000000137511476025525100317640ustar00rootroot00000000000000/* * S3 Put Object via Secure Streams minimal siv4 example * * Written in 2010-2020 by Andy Green * Amit Pachore * securestreams-dev@amazon.com * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #include #include #include "ss-s3-put.h" extern int interrupted, bad; static lws_ss_state_return_t ss_s3_rx(void *userobj, const uint8_t *buf, size_t len, int flags) { // ss_s3_put_t *m = (ss_s3_put_t *)userobj; if (flags & LWSSS_FLAG_EOM) { bad = 0; interrupted = 1; /* this example wants to exit after rx */ return LWSSSSRET_DESTROY_ME; } lwsl_user("%s: len %d, flags: %d\n", __func__, (int)len, flags); lwsl_hexdump_err(buf, len); return LWSSSSRET_OK; } static lws_ss_state_return_t ss_s3_tx(void *userobj, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len, int *flags) { ss_s3_put_t *m = (ss_s3_put_t *)userobj; if (!m->pos) *flags |= LWSSS_FLAG_SOM; lwsl_user("%s: Send... total: %ld, pos: %ld\n", __func__, (long)m->total, (long)m->pos); if (*len > m->total - m->pos) *len = m->total - m->pos; if (!*len) return LWSSSSRET_TX_DONT_SEND; memcpy(buf, m->buf + m->pos, *len); m->pos += *len; if (m->pos == m->total) { *flags |= LWSSS_FLAG_EOM; // m->pos = 0; /* we only want to send once */ } else return lws_ss_request_tx(m->ss); return LWSSSSRET_OK; } static const char *awsService = "s3", *awsRegion = "us-west-2", *s3bucketName = "sstest2020", #if 1 *s3ObjName = "SSs3upload2.txt"; #else /* test huge string sigv4 hashing works */ *s3ObjName = "SSs3uploadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2.txt"; #endif static char timestamp[32], payload_hash[65]; static uint8_t jpl[1 * 1024]; static void create_payload(uint8_t *buf, size_t s) { int i; for (i = 0; i < (int)s; i++) buf[i] = (uint8_t)('a' + i % 16); } static void set_time(char *t) { /*20150830T123600Z*/ time_t ti = time(NULL); #if defined(LWS_HAVE_GMTIME_R) struct tm tmp; struct tm *tm = gmtime_r(&ti, &tmp); #else struct tm *tm = gmtime(&ti); #endif assert(tm); strftime(t, 20, "%Y%m%dT%H%M%SZ", tm); } static void bin2hex(uint8_t *in, size_t len, char *out) { static const char *hex = "0123456789abcdef"; size_t n; for (n = 0; n < len; n++) { *out++ = hex[(in[n] >> 4) & 0xf]; *out++ = hex[in[n] & 15]; } *out = '\0'; } static void sigv4_sha256hash_payload(uint8_t *payload, size_t len, char *hash) { struct lws_genhash_ctx hash_ctx; uint8_t hash_bin[32]; if (lws_genhash_init(&hash_ctx, LWS_GENHASH_TYPE_SHA256) || /* * If there is no payload, you must provide the hash of an * empty string... */ lws_genhash_update(&hash_ctx, payload ? (void *)payload : (void *)"", payload ? len : 0u) || lws_genhash_destroy(&hash_ctx, hash_bin)) { lws_genhash_destroy(&hash_ctx, NULL); lwsl_err("%s lws_genhash failed\n", __func__); return; } bin2hex(hash_bin, 32, hash); } static lws_ss_state_return_t ss_s3_state(void *userobj, void *sh, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { ss_s3_put_t *m = (ss_s3_put_t *)userobj; lwsl_user("%s: %s %s, ord 0x%x\n", __func__, lws_ss_tag(m->ss), lws_ss_state_name((int)state), (unsigned int)ack); switch (state) { case LWSSSCS_CREATING: create_payload(jpl, sizeof(jpl)); m->buf = (uint8_t *)jpl; m->total = sizeof(jpl); sigv4_sha256hash_payload(m->buf, m->total, payload_hash); memset(timestamp, 0, sizeof(timestamp)); set_time(timestamp); if (lws_ss_set_metadata(m->ss, "s3bucket", s3bucketName, strlen(s3bucketName)) || lws_ss_set_metadata(m->ss, "s3Obj", s3ObjName, strlen(s3ObjName)) || lws_ss_set_metadata(m->ss, "ctype", "text/plain", strlen("text/plain")) || lws_ss_set_metadata(m->ss, "region", awsRegion, strlen(awsRegion)) || lws_ss_set_metadata(m->ss, "service", awsService, strlen(awsService)) || lws_ss_set_metadata(m->ss, "xacl", "bucket-owner-full-control", strlen("bucket-owner-full-control")) || lws_ss_set_metadata(m->ss, "xcsha256", payload_hash, strlen(payload_hash)) || lws_ss_set_metadata(m->ss, "xdate", timestamp, strlen(timestamp))) return LWSSSSRET_DESTROY_ME; return lws_ss_request_tx_len(m->ss, m->total); case LWSSSCS_CONNECTED: return lws_ss_request_tx(m->ss); case LWSSSCS_DISCONNECTED: return LWSSSSRET_DESTROY_ME; case LWSSSCS_ALL_RETRIES_FAILED: /* if we're out of retries, we want to close the app and FAIL */ bad = 1; return LWSSSSRET_DESTROY_ME; case LWSSSCS_QOS_ACK_REMOTE: bad = 0; break; case LWSSSCS_QOS_NACK_REMOTE: bad = 1; break; case LWSSSCS_DESTROYING: interrupted = 1; break; default: break; } return 0; } const lws_ss_info_t s3_ssi = { .handle_offset = offsetof(ss_s3_put_t, ss), .opaque_user_data_offset = offsetof(ss_s3_put_t, opaque_data), .rx = ss_s3_rx, .tx = ss_s3_tx, .state = ss_s3_state, .user_alloc = sizeof(ss_s3_put_t), .streamtype = "s3PutObj" }; libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-sigv4/static_policy.h000066400000000000000000000713611476025525100332450ustar00rootroot00000000000000/* * Autogenerated from the following JSON policy */ #if 0 {"release":"01234567","product":"myproduct","schema-version":1,"retry": [{"default": {"backoff": [100,200,300,500,1000],"conceal":5,"jitterpc":20,"svalidping":30,"svalidhup":35}}],"certs": [{"amazon_root_ca_1": "MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5"},{"starfield_services_root_ca": "MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkdiEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6"},{"baltimore_cybertrust_root": "MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp"}],"trust_stores": [{"name": "s3-root-cert","stack": ["baltimore_cybertrust_root","amazon_root_ca_1","starfield_services_root_ca"]}],"auth": [{"name": "sigv4_br","type": "sigv4","blob": 0}],"s": [{"s3PutObj": {"endpoint":"${s3bucket}.s3.amazonaws.com","port":443,"protocol":"h1","http_method":"PUT","http_url":"${s3Obj}","http_no_content_length": false,"tls":true,"tls_trust_store":"s3-root-cert","opportunistic":true,"retry":"default","use_auth":"sigv4_br","aws_region":"region","aws_service":"service","metadata": [{"region": ""},{"service": ""},{"s3bucket": ""},{"s3Obj": ""},{"ctype": "content-type:"},{"xcsha256": "x-amz-content-sha256:"},{"xdate": "x-amz-date:"},{"xacl": "x-amz-acl:"}]}}]} Original JSON size: 4630 #endif static const lws_ss_metadata_t _md_s3PutObj_xacl = { .name = "xacl", .value__may_own_heap = (void *)"x-amz-acl:", .value_length = 0xa, .length = 0, .value_is_http_token = 0xff, }, _md_s3PutObj_xdate = { .next = (void *)&_md_s3PutObj_xacl, .name = "xdate", .value__may_own_heap = (void *)"x-amz-date:", .value_length = 0xb, .length = 1, .value_is_http_token = 0xff, }, _md_s3PutObj_xcsha256 = { .next = (void *)&_md_s3PutObj_xdate, .name = "xcsha256", .value__may_own_heap = (void *)"x-amz-content-sha256:", .value_length = 0x15, .length = 2, .value_is_http_token = 0xff, }, _md_s3PutObj_ctype = { .next = (void *)&_md_s3PutObj_xcsha256, .name = "ctype", .value__may_own_heap = (void *)"content-type:", .value_length = 0xd, .length = 3, .value_is_http_token = 0x1c, }, _md_s3PutObj_s3Obj = { .next = (void *)&_md_s3PutObj_ctype, .name = "s3Obj", .value__may_own_heap = (void *)"", .value_length = 0x0, .length = 4, .value_is_http_token = 0x0, }, _md_s3PutObj_s3bucket = { .next = (void *)&_md_s3PutObj_s3Obj, .name = "s3bucket", .value__may_own_heap = (void *)"", .value_length = 0x0, .length = 5, .value_is_http_token = 0x0, }, _md_s3PutObj_service = { .next = (void *)&_md_s3PutObj_s3bucket, .name = "service", .value__may_own_heap = (void *)"", .value_length = 0x0, .length = 6, .value_is_http_token = 0x0, }, _md_s3PutObj_region = { .next = (void *)&_md_s3PutObj_service, .name = "region", .value__may_own_heap = (void *)"", .value_length = 0x0, .length = 7, .value_is_http_token = 0x0, }; static const uint32_t _rbo_bo_0[] = { 100, 200, 300, 500, 1000, }; static const lws_retry_bo_t _rbo_0 = { .retry_ms_table = _rbo_bo_0, .retry_ms_table_count = 5, .conceal_count = 5, .secs_since_valid_ping = 30, .secs_since_valid_hangup = 35, .jitter_percent = 20, }; static const uint8_t _ss_der_baltimore_cybertrust_root[] = { /* 0x 0 */ 0x30, 0x82, 0x03, 0x77, 0x30, 0x82, 0x02, 0x5F, /* 0x 8 */ 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x04, 0x02, /* 0x 10 */ 0x00, 0x00, 0xB9, 0x30, 0x0D, 0x06, 0x09, 0x2A, /* 0x 18 */ 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, /* 0x 20 */ 0x05, 0x00, 0x30, 0x5A, 0x31, 0x0B, 0x30, 0x09, /* 0x 28 */ 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x49, /* 0x 30 */ 0x45, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, /* 0x 38 */ 0x04, 0x0A, 0x13, 0x09, 0x42, 0x61, 0x6C, 0x74, /* 0x 40 */ 0x69, 0x6D, 0x6F, 0x72, 0x65, 0x31, 0x13, 0x30, /* 0x 48 */ 0x11, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x0A, /* 0x 50 */ 0x43, 0x79, 0x62, 0x65, 0x72, 0x54, 0x72, 0x75, /* 0x 58 */ 0x73, 0x74, 0x31, 0x22, 0x30, 0x20, 0x06, 0x03, /* 0x 60 */ 0x55, 0x04, 0x03, 0x13, 0x19, 0x42, 0x61, 0x6C, /* 0x 68 */ 0x74, 0x69, 0x6D, 0x6F, 0x72, 0x65, 0x20, 0x43, /* 0x 70 */ 0x79, 0x62, 0x65, 0x72, 0x54, 0x72, 0x75, 0x73, /* 0x 78 */ 0x74, 0x20, 0x52, 0x6F, 0x6F, 0x74, 0x30, 0x1E, /* 0x 80 */ 0x17, 0x0D, 0x30, 0x30, 0x30, 0x35, 0x31, 0x32, /* 0x 88 */ 0x31, 0x38, 0x34, 0x36, 0x30, 0x30, 0x5A, 0x17, /* 0x 90 */ 0x0D, 0x32, 0x35, 0x30, 0x35, 0x31, 0x32, 0x32, /* 0x 98 */ 0x33, 0x35, 0x39, 0x30, 0x30, 0x5A, 0x30, 0x5A, /* 0x a0 */ 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, /* 0x a8 */ 0x06, 0x13, 0x02, 0x49, 0x45, 0x31, 0x12, 0x30, /* 0x b0 */ 0x10, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x09, /* 0x b8 */ 0x42, 0x61, 0x6C, 0x74, 0x69, 0x6D, 0x6F, 0x72, /* 0x c0 */ 0x65, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, /* 0x c8 */ 0x04, 0x0B, 0x13, 0x0A, 0x43, 0x79, 0x62, 0x65, /* 0x d0 */ 0x72, 0x54, 0x72, 0x75, 0x73, 0x74, 0x31, 0x22, /* 0x d8 */ 0x30, 0x20, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, /* 0x e0 */ 0x19, 0x42, 0x61, 0x6C, 0x74, 0x69, 0x6D, 0x6F, /* 0x e8 */ 0x72, 0x65, 0x20, 0x43, 0x79, 0x62, 0x65, 0x72, /* 0x f0 */ 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x52, 0x6F, /* 0x f8 */ 0x6F, 0x74, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0D, /* 0x100 */ 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, /* 0x108 */ 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, /* 0x110 */ 0x0F, 0x00, 0x30, 0x82, 0x01, 0x0A, 0x02, 0x82, /* 0x118 */ 0x01, 0x01, 0x00, 0xA3, 0x04, 0xBB, 0x22, 0xAB, /* 0x120 */ 0x98, 0x3D, 0x57, 0xE8, 0x26, 0x72, 0x9A, 0xB5, /* 0x128 */ 0x79, 0xD4, 0x29, 0xE2, 0xE1, 0xE8, 0x95, 0x80, /* 0x130 */ 0xB1, 0xB0, 0xE3, 0x5B, 0x8E, 0x2B, 0x29, 0x9A, /* 0x138 */ 0x64, 0xDF, 0xA1, 0x5D, 0xED, 0xB0, 0x09, 0x05, /* 0x140 */ 0x6D, 0xDB, 0x28, 0x2E, 0xCE, 0x62, 0xA2, 0x62, /* 0x148 */ 0xFE, 0xB4, 0x88, 0xDA, 0x12, 0xEB, 0x38, 0xEB, /* 0x150 */ 0x21, 0x9D, 0xC0, 0x41, 0x2B, 0x01, 0x52, 0x7B, /* 0x158 */ 0x88, 0x77, 0xD3, 0x1C, 0x8F, 0xC7, 0xBA, 0xB9, /* 0x160 */ 0x88, 0xB5, 0x6A, 0x09, 0xE7, 0x73, 0xE8, 0x11, /* 0x168 */ 0x40, 0xA7, 0xD1, 0xCC, 0xCA, 0x62, 0x8D, 0x2D, /* 0x170 */ 0xE5, 0x8F, 0x0B, 0xA6, 0x50, 0xD2, 0xA8, 0x50, /* 0x178 */ 0xC3, 0x28, 0xEA, 0xF5, 0xAB, 0x25, 0x87, 0x8A, /* 0x180 */ 0x9A, 0x96, 0x1C, 0xA9, 0x67, 0xB8, 0x3F, 0x0C, /* 0x188 */ 0xD5, 0xF7, 0xF9, 0x52, 0x13, 0x2F, 0xC2, 0x1B, /* 0x190 */ 0xD5, 0x70, 0x70, 0xF0, 0x8F, 0xC0, 0x12, 0xCA, /* 0x198 */ 0x06, 0xCB, 0x9A, 0xE1, 0xD9, 0xCA, 0x33, 0x7A, /* 0x1a0 */ 0x77, 0xD6, 0xF8, 0xEC, 0xB9, 0xF1, 0x68, 0x44, /* 0x1a8 */ 0x42, 0x48, 0x13, 0xD2, 0xC0, 0xC2, 0xA4, 0xAE, /* 0x1b0 */ 0x5E, 0x60, 0xFE, 0xB6, 0xA6, 0x05, 0xFC, 0xB4, /* 0x1b8 */ 0xDD, 0x07, 0x59, 0x02, 0xD4, 0x59, 0x18, 0x98, /* 0x1c0 */ 0x63, 0xF5, 0xA5, 0x63, 0xE0, 0x90, 0x0C, 0x7D, /* 0x1c8 */ 0x5D, 0xB2, 0x06, 0x7A, 0xF3, 0x85, 0xEA, 0xEB, /* 0x1d0 */ 0xD4, 0x03, 0xAE, 0x5E, 0x84, 0x3E, 0x5F, 0xFF, /* 0x1d8 */ 0x15, 0xED, 0x69, 0xBC, 0xF9, 0x39, 0x36, 0x72, /* 0x1e0 */ 0x75, 0xCF, 0x77, 0x52, 0x4D, 0xF3, 0xC9, 0x90, /* 0x1e8 */ 0x2C, 0xB9, 0x3D, 0xE5, 0xC9, 0x23, 0x53, 0x3F, /* 0x1f0 */ 0x1F, 0x24, 0x98, 0x21, 0x5C, 0x07, 0x99, 0x29, /* 0x1f8 */ 0xBD, 0xC6, 0x3A, 0xEC, 0xE7, 0x6E, 0x86, 0x3A, /* 0x200 */ 0x6B, 0x97, 0x74, 0x63, 0x33, 0xBD, 0x68, 0x18, /* 0x208 */ 0x31, 0xF0, 0x78, 0x8D, 0x76, 0xBF, 0xFC, 0x9E, /* 0x210 */ 0x8E, 0x5D, 0x2A, 0x86, 0xA7, 0x4D, 0x90, 0xDC, /* 0x218 */ 0x27, 0x1A, 0x39, 0x02, 0x03, 0x01, 0x00, 0x01, /* 0x220 */ 0xA3, 0x45, 0x30, 0x43, 0x30, 0x1D, 0x06, 0x03, /* 0x228 */ 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0xE5, /* 0x230 */ 0x9D, 0x59, 0x30, 0x82, 0x47, 0x58, 0xCC, 0xAC, /* 0x238 */ 0xFA, 0x08, 0x54, 0x36, 0x86, 0x7B, 0x3A, 0xB5, /* 0x240 */ 0x04, 0x4D, 0xF0, 0x30, 0x12, 0x06, 0x03, 0x55, /* 0x248 */ 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x08, 0x30, /* 0x250 */ 0x06, 0x01, 0x01, 0xFF, 0x02, 0x01, 0x03, 0x30, /* 0x258 */ 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, /* 0x260 */ 0xFF, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, /* 0x268 */ 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, /* 0x270 */ 0x0D, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, /* 0x278 */ 0x01, 0x01, 0x00, 0x85, 0x0C, 0x5D, 0x8E, 0xE4, /* 0x280 */ 0x6F, 0x51, 0x68, 0x42, 0x05, 0xA0, 0xDD, 0xBB, /* 0x288 */ 0x4F, 0x27, 0x25, 0x84, 0x03, 0xBD, 0xF7, 0x64, /* 0x290 */ 0xFD, 0x2D, 0xD7, 0x30, 0xE3, 0xA4, 0x10, 0x17, /* 0x298 */ 0xEB, 0xDA, 0x29, 0x29, 0xB6, 0x79, 0x3F, 0x76, /* 0x2a0 */ 0xF6, 0x19, 0x13, 0x23, 0xB8, 0x10, 0x0A, 0xF9, /* 0x2a8 */ 0x58, 0xA4, 0xD4, 0x61, 0x70, 0xBD, 0x04, 0x61, /* 0x2b0 */ 0x6A, 0x12, 0x8A, 0x17, 0xD5, 0x0A, 0xBD, 0xC5, /* 0x2b8 */ 0xBC, 0x30, 0x7C, 0xD6, 0xE9, 0x0C, 0x25, 0x8D, /* 0x2c0 */ 0x86, 0x40, 0x4F, 0xEC, 0xCC, 0xA3, 0x7E, 0x38, /* 0x2c8 */ 0xC6, 0x37, 0x11, 0x4F, 0xED, 0xDD, 0x68, 0x31, /* 0x2d0 */ 0x8E, 0x4C, 0xD2, 0xB3, 0x01, 0x74, 0xEE, 0xBE, /* 0x2d8 */ 0x75, 0x5E, 0x07, 0x48, 0x1A, 0x7F, 0x70, 0xFF, /* 0x2e0 */ 0x16, 0x5C, 0x84, 0xC0, 0x79, 0x85, 0xB8, 0x05, /* 0x2e8 */ 0xFD, 0x7F, 0xBE, 0x65, 0x11, 0xA3, 0x0F, 0xC0, /* 0x2f0 */ 0x02, 0xB4, 0xF8, 0x52, 0x37, 0x39, 0x04, 0xD5, /* 0x2f8 */ 0xA9, 0x31, 0x7A, 0x18, 0xBF, 0xA0, 0x2A, 0xF4, /* 0x300 */ 0x12, 0x99, 0xF7, 0xA3, 0x45, 0x82, 0xE3, 0x3C, /* 0x308 */ 0x5E, 0xF5, 0x9D, 0x9E, 0xB5, 0xC8, 0x9E, 0x7C, /* 0x310 */ 0x2E, 0xC8, 0xA4, 0x9E, 0x4E, 0x08, 0x14, 0x4B, /* 0x318 */ 0x6D, 0xFD, 0x70, 0x6D, 0x6B, 0x1A, 0x63, 0xBD, /* 0x320 */ 0x64, 0xE6, 0x1F, 0xB7, 0xCE, 0xF0, 0xF2, 0x9F, /* 0x328 */ 0x2E, 0xBB, 0x1B, 0xB7, 0xF2, 0x50, 0x88, 0x73, /* 0x330 */ 0x92, 0xC2, 0xE2, 0xE3, 0x16, 0x8D, 0x9A, 0x32, /* 0x338 */ 0x02, 0xAB, 0x8E, 0x18, 0xDD, 0xE9, 0x10, 0x11, /* 0x340 */ 0xEE, 0x7E, 0x35, 0xAB, 0x90, 0xAF, 0x3E, 0x30, /* 0x348 */ 0x94, 0x7A, 0xD0, 0x33, 0x3D, 0xA7, 0x65, 0x0F, /* 0x350 */ 0xF5, 0xFC, 0x8E, 0x9E, 0x62, 0xCF, 0x47, 0x44, /* 0x358 */ 0x2C, 0x01, 0x5D, 0xBB, 0x1D, 0xB5, 0x32, 0xD2, /* 0x360 */ 0x47, 0xD2, 0x38, 0x2E, 0xD0, 0xFE, 0x81, 0xDC, /* 0x368 */ 0x32, 0x6A, 0x1E, 0xB5, 0xEE, 0x3C, 0xD5, 0xFC, /* 0x370 */ 0xE7, 0x81, 0x1D, 0x19, 0xC3, 0x24, 0x42, 0xEA, /* 0x378 */ 0x63, 0x39, 0xA9, }; static const lws_ss_x509_t _ss_x509_baltimore_cybertrust_root = { .vhost_name = "baltimore_cybertrust_root", .ca_der = _ss_der_baltimore_cybertrust_root, .ca_der_len = 891, }; static const uint8_t _ss_der_amazon_root_ca_1[] = { /* 0x 0 */ 0x30, 0x82, 0x03, 0x41, 0x30, 0x82, 0x02, 0x29, /* 0x 8 */ 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x13, 0x06, /* 0x 10 */ 0x6C, 0x9F, 0xCF, 0x99, 0xBF, 0x8C, 0x0A, 0x39, /* 0x 18 */ 0xE2, 0xF0, 0x78, 0x8A, 0x43, 0xE6, 0x96, 0x36, /* 0x 20 */ 0x5B, 0xCA, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, /* 0x 28 */ 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0B, 0x05, /* 0x 30 */ 0x00, 0x30, 0x39, 0x31, 0x0B, 0x30, 0x09, 0x06, /* 0x 38 */ 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, /* 0x 40 */ 0x31, 0x0F, 0x30, 0x0D, 0x06, 0x03, 0x55, 0x04, /* 0x 48 */ 0x0A, 0x13, 0x06, 0x41, 0x6D, 0x61, 0x7A, 0x6F, /* 0x 50 */ 0x6E, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, /* 0x 58 */ 0x04, 0x03, 0x13, 0x10, 0x41, 0x6D, 0x61, 0x7A, /* 0x 60 */ 0x6F, 0x6E, 0x20, 0x52, 0x6F, 0x6F, 0x74, 0x20, /* 0x 68 */ 0x43, 0x41, 0x20, 0x31, 0x30, 0x1E, 0x17, 0x0D, /* 0x 70 */ 0x31, 0x35, 0x30, 0x35, 0x32, 0x36, 0x30, 0x30, /* 0x 78 */ 0x30, 0x30, 0x30, 0x30, 0x5A, 0x17, 0x0D, 0x33, /* 0x 80 */ 0x38, 0x30, 0x31, 0x31, 0x37, 0x30, 0x30, 0x30, /* 0x 88 */ 0x30, 0x30, 0x30, 0x5A, 0x30, 0x39, 0x31, 0x0B, /* 0x 90 */ 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, /* 0x 98 */ 0x02, 0x55, 0x53, 0x31, 0x0F, 0x30, 0x0D, 0x06, /* 0x a0 */ 0x03, 0x55, 0x04, 0x0A, 0x13, 0x06, 0x41, 0x6D, /* 0x a8 */ 0x61, 0x7A, 0x6F, 0x6E, 0x31, 0x19, 0x30, 0x17, /* 0x b0 */ 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x10, 0x41, /* 0x b8 */ 0x6D, 0x61, 0x7A, 0x6F, 0x6E, 0x20, 0x52, 0x6F, /* 0x c0 */ 0x6F, 0x74, 0x20, 0x43, 0x41, 0x20, 0x31, 0x30, /* 0x c8 */ 0x82, 0x01, 0x22, 0x30, 0x0D, 0x06, 0x09, 0x2A, /* 0x d0 */ 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, /* 0x d8 */ 0x05, 0x00, 0x03, 0x82, 0x01, 0x0F, 0x00, 0x30, /* 0x e0 */ 0x82, 0x01, 0x0A, 0x02, 0x82, 0x01, 0x01, 0x00, /* 0x e8 */ 0xB2, 0x78, 0x80, 0x71, 0xCA, 0x78, 0xD5, 0xE3, /* 0x f0 */ 0x71, 0xAF, 0x47, 0x80, 0x50, 0x74, 0x7D, 0x6E, /* 0x f8 */ 0xD8, 0xD7, 0x88, 0x76, 0xF4, 0x99, 0x68, 0xF7, /* 0x100 */ 0x58, 0x21, 0x60, 0xF9, 0x74, 0x84, 0x01, 0x2F, /* 0x108 */ 0xAC, 0x02, 0x2D, 0x86, 0xD3, 0xA0, 0x43, 0x7A, /* 0x110 */ 0x4E, 0xB2, 0xA4, 0xD0, 0x36, 0xBA, 0x01, 0xBE, /* 0x118 */ 0x8D, 0xDB, 0x48, 0xC8, 0x07, 0x17, 0x36, 0x4C, /* 0x120 */ 0xF4, 0xEE, 0x88, 0x23, 0xC7, 0x3E, 0xEB, 0x37, /* 0x128 */ 0xF5, 0xB5, 0x19, 0xF8, 0x49, 0x68, 0xB0, 0xDE, /* 0x130 */ 0xD7, 0xB9, 0x76, 0x38, 0x1D, 0x61, 0x9E, 0xA4, /* 0x138 */ 0xFE, 0x82, 0x36, 0xA5, 0xE5, 0x4A, 0x56, 0xE4, /* 0x140 */ 0x45, 0xE1, 0xF9, 0xFD, 0xB4, 0x16, 0xFA, 0x74, /* 0x148 */ 0xDA, 0x9C, 0x9B, 0x35, 0x39, 0x2F, 0xFA, 0xB0, /* 0x150 */ 0x20, 0x50, 0x06, 0x6C, 0x7A, 0xD0, 0x80, 0xB2, /* 0x158 */ 0xA6, 0xF9, 0xAF, 0xEC, 0x47, 0x19, 0x8F, 0x50, /* 0x160 */ 0x38, 0x07, 0xDC, 0xA2, 0x87, 0x39, 0x58, 0xF8, /* 0x168 */ 0xBA, 0xD5, 0xA9, 0xF9, 0x48, 0x67, 0x30, 0x96, /* 0x170 */ 0xEE, 0x94, 0x78, 0x5E, 0x6F, 0x89, 0xA3, 0x51, /* 0x178 */ 0xC0, 0x30, 0x86, 0x66, 0xA1, 0x45, 0x66, 0xBA, /* 0x180 */ 0x54, 0xEB, 0xA3, 0xC3, 0x91, 0xF9, 0x48, 0xDC, /* 0x188 */ 0xFF, 0xD1, 0xE8, 0x30, 0x2D, 0x7D, 0x2D, 0x74, /* 0x190 */ 0x70, 0x35, 0xD7, 0x88, 0x24, 0xF7, 0x9E, 0xC4, /* 0x198 */ 0x59, 0x6E, 0xBB, 0x73, 0x87, 0x17, 0xF2, 0x32, /* 0x1a0 */ 0x46, 0x28, 0xB8, 0x43, 0xFA, 0xB7, 0x1D, 0xAA, /* 0x1a8 */ 0xCA, 0xB4, 0xF2, 0x9F, 0x24, 0x0E, 0x2D, 0x4B, /* 0x1b0 */ 0xF7, 0x71, 0x5C, 0x5E, 0x69, 0xFF, 0xEA, 0x95, /* 0x1b8 */ 0x02, 0xCB, 0x38, 0x8A, 0xAE, 0x50, 0x38, 0x6F, /* 0x1c0 */ 0xDB, 0xFB, 0x2D, 0x62, 0x1B, 0xC5, 0xC7, 0x1E, /* 0x1c8 */ 0x54, 0xE1, 0x77, 0xE0, 0x67, 0xC8, 0x0F, 0x9C, /* 0x1d0 */ 0x87, 0x23, 0xD6, 0x3F, 0x40, 0x20, 0x7F, 0x20, /* 0x1d8 */ 0x80, 0xC4, 0x80, 0x4C, 0x3E, 0x3B, 0x24, 0x26, /* 0x1e0 */ 0x8E, 0x04, 0xAE, 0x6C, 0x9A, 0xC8, 0xAA, 0x0D, /* 0x1e8 */ 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x42, 0x30, /* 0x1f0 */ 0x40, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x1D, 0x13, /* 0x1f8 */ 0x01, 0x01, 0xFF, 0x04, 0x05, 0x30, 0x03, 0x01, /* 0x200 */ 0x01, 0xFF, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, /* 0x208 */ 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, /* 0x210 */ 0x01, 0x86, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, /* 0x218 */ 0x0E, 0x04, 0x16, 0x04, 0x14, 0x84, 0x18, 0xCC, /* 0x220 */ 0x85, 0x34, 0xEC, 0xBC, 0x0C, 0x94, 0x94, 0x2E, /* 0x228 */ 0x08, 0x59, 0x9C, 0xC7, 0xB2, 0x10, 0x4E, 0x0A, /* 0x230 */ 0x08, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, /* 0x238 */ 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0B, 0x05, 0x00, /* 0x240 */ 0x03, 0x82, 0x01, 0x01, 0x00, 0x98, 0xF2, 0x37, /* 0x248 */ 0x5A, 0x41, 0x90, 0xA1, 0x1A, 0xC5, 0x76, 0x51, /* 0x250 */ 0x28, 0x20, 0x36, 0x23, 0x0E, 0xAE, 0xE6, 0x28, /* 0x258 */ 0xBB, 0xAA, 0xF8, 0x94, 0xAE, 0x48, 0xA4, 0x30, /* 0x260 */ 0x7F, 0x1B, 0xFC, 0x24, 0x8D, 0x4B, 0xB4, 0xC8, /* 0x268 */ 0xA1, 0x97, 0xF6, 0xB6, 0xF1, 0x7A, 0x70, 0xC8, /* 0x270 */ 0x53, 0x93, 0xCC, 0x08, 0x28, 0xE3, 0x98, 0x25, /* 0x278 */ 0xCF, 0x23, 0xA4, 0xF9, 0xDE, 0x21, 0xD3, 0x7C, /* 0x280 */ 0x85, 0x09, 0xAD, 0x4E, 0x9A, 0x75, 0x3A, 0xC2, /* 0x288 */ 0x0B, 0x6A, 0x89, 0x78, 0x76, 0x44, 0x47, 0x18, /* 0x290 */ 0x65, 0x6C, 0x8D, 0x41, 0x8E, 0x3B, 0x7F, 0x9A, /* 0x298 */ 0xCB, 0xF4, 0xB5, 0xA7, 0x50, 0xD7, 0x05, 0x2C, /* 0x2a0 */ 0x37, 0xE8, 0x03, 0x4B, 0xAD, 0xE9, 0x61, 0xA0, /* 0x2a8 */ 0x02, 0x6E, 0xF5, 0xF2, 0xF0, 0xC5, 0xB2, 0xED, /* 0x2b0 */ 0x5B, 0xB7, 0xDC, 0xFA, 0x94, 0x5C, 0x77, 0x9E, /* 0x2b8 */ 0x13, 0xA5, 0x7F, 0x52, 0xAD, 0x95, 0xF2, 0xF8, /* 0x2c0 */ 0x93, 0x3B, 0xDE, 0x8B, 0x5C, 0x5B, 0xCA, 0x5A, /* 0x2c8 */ 0x52, 0x5B, 0x60, 0xAF, 0x14, 0xF7, 0x4B, 0xEF, /* 0x2d0 */ 0xA3, 0xFB, 0x9F, 0x40, 0x95, 0x6D, 0x31, 0x54, /* 0x2d8 */ 0xFC, 0x42, 0xD3, 0xC7, 0x46, 0x1F, 0x23, 0xAD, /* 0x2e0 */ 0xD9, 0x0F, 0x48, 0x70, 0x9A, 0xD9, 0x75, 0x78, /* 0x2e8 */ 0x71, 0xD1, 0x72, 0x43, 0x34, 0x75, 0x6E, 0x57, /* 0x2f0 */ 0x59, 0xC2, 0x02, 0x5C, 0x26, 0x60, 0x29, 0xCF, /* 0x2f8 */ 0x23, 0x19, 0x16, 0x8E, 0x88, 0x43, 0xA5, 0xD4, /* 0x300 */ 0xE4, 0xCB, 0x08, 0xFB, 0x23, 0x11, 0x43, 0xE8, /* 0x308 */ 0x43, 0x29, 0x72, 0x62, 0xA1, 0xA9, 0x5D, 0x5E, /* 0x310 */ 0x08, 0xD4, 0x90, 0xAE, 0xB8, 0xD8, 0xCE, 0x14, /* 0x318 */ 0xC2, 0xD0, 0x55, 0xF2, 0x86, 0xF6, 0xC4, 0x93, /* 0x320 */ 0x43, 0x77, 0x66, 0x61, 0xC0, 0xB9, 0xE8, 0x41, /* 0x328 */ 0xD7, 0x97, 0x78, 0x60, 0x03, 0x6E, 0x4A, 0x72, /* 0x330 */ 0xAE, 0xA5, 0xD1, 0x7D, 0xBA, 0x10, 0x9E, 0x86, /* 0x338 */ 0x6C, 0x1B, 0x8A, 0xB9, 0x59, 0x33, 0xF8, 0xEB, /* 0x340 */ 0xC4, 0x90, 0xBE, 0xF1, 0xB9, }; static const lws_ss_x509_t _ss_x509_amazon_root_ca_1 = { .vhost_name = "amazon_root_ca_1", .ca_der = _ss_der_amazon_root_ca_1, .ca_der_len = 837, }; static const uint8_t _ss_der_starfield_services_root_ca[] = { /* 0x 0 */ 0x30, 0x82, 0x03, 0xEF, 0x30, 0x82, 0x02, 0xD7, /* 0x 8 */ 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x00, /* 0x 10 */ 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, /* 0x 18 */ 0xF7, 0x0D, 0x01, 0x01, 0x0B, 0x05, 0x00, 0x30, /* 0x 20 */ 0x81, 0x98, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, /* 0x 28 */ 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, /* 0x 30 */ 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x04, 0x08, /* 0x 38 */ 0x13, 0x07, 0x41, 0x72, 0x69, 0x7A, 0x6F, 0x6E, /* 0x 40 */ 0x61, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, /* 0x 48 */ 0x04, 0x07, 0x13, 0x0A, 0x53, 0x63, 0x6F, 0x74, /* 0x 50 */ 0x74, 0x73, 0x64, 0x61, 0x6C, 0x65, 0x31, 0x25, /* 0x 58 */ 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, /* 0x 60 */ 0x1C, 0x53, 0x74, 0x61, 0x72, 0x66, 0x69, 0x65, /* 0x 68 */ 0x6C, 0x64, 0x20, 0x54, 0x65, 0x63, 0x68, 0x6E, /* 0x 70 */ 0x6F, 0x6C, 0x6F, 0x67, 0x69, 0x65, 0x73, 0x2C, /* 0x 78 */ 0x20, 0x49, 0x6E, 0x63, 0x2E, 0x31, 0x3B, 0x30, /* 0x 80 */ 0x39, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x32, /* 0x 88 */ 0x53, 0x74, 0x61, 0x72, 0x66, 0x69, 0x65, 0x6C, /* 0x 90 */ 0x64, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, /* 0x 98 */ 0x65, 0x73, 0x20, 0x52, 0x6F, 0x6F, 0x74, 0x20, /* 0x a0 */ 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, /* 0x a8 */ 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, /* 0x b0 */ 0x6F, 0x72, 0x69, 0x74, 0x79, 0x20, 0x2D, 0x20, /* 0x b8 */ 0x47, 0x32, 0x30, 0x1E, 0x17, 0x0D, 0x30, 0x39, /* 0x c0 */ 0x30, 0x39, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, /* 0x c8 */ 0x30, 0x30, 0x5A, 0x17, 0x0D, 0x33, 0x37, 0x31, /* 0x d0 */ 0x32, 0x33, 0x31, 0x32, 0x33, 0x35, 0x39, 0x35, /* 0x d8 */ 0x39, 0x5A, 0x30, 0x81, 0x98, 0x31, 0x0B, 0x30, /* 0x e0 */ 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, /* 0x e8 */ 0x55, 0x53, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, /* 0x f0 */ 0x55, 0x04, 0x08, 0x13, 0x07, 0x41, 0x72, 0x69, /* 0x f8 */ 0x7A, 0x6F, 0x6E, 0x61, 0x31, 0x13, 0x30, 0x11, /* 0x100 */ 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x0A, 0x53, /* 0x108 */ 0x63, 0x6F, 0x74, 0x74, 0x73, 0x64, 0x61, 0x6C, /* 0x110 */ 0x65, 0x31, 0x25, 0x30, 0x23, 0x06, 0x03, 0x55, /* 0x118 */ 0x04, 0x0A, 0x13, 0x1C, 0x53, 0x74, 0x61, 0x72, /* 0x120 */ 0x66, 0x69, 0x65, 0x6C, 0x64, 0x20, 0x54, 0x65, /* 0x128 */ 0x63, 0x68, 0x6E, 0x6F, 0x6C, 0x6F, 0x67, 0x69, /* 0x130 */ 0x65, 0x73, 0x2C, 0x20, 0x49, 0x6E, 0x63, 0x2E, /* 0x138 */ 0x31, 0x3B, 0x30, 0x39, 0x06, 0x03, 0x55, 0x04, /* 0x140 */ 0x03, 0x13, 0x32, 0x53, 0x74, 0x61, 0x72, 0x66, /* 0x148 */ 0x69, 0x65, 0x6C, 0x64, 0x20, 0x53, 0x65, 0x72, /* 0x150 */ 0x76, 0x69, 0x63, 0x65, 0x73, 0x20, 0x52, 0x6F, /* 0x158 */ 0x6F, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, /* 0x160 */ 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, /* 0x168 */ 0x75, 0x74, 0x68, 0x6F, 0x72, 0x69, 0x74, 0x79, /* 0x170 */ 0x20, 0x2D, 0x20, 0x47, 0x32, 0x30, 0x82, 0x01, /* 0x178 */ 0x22, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, /* 0x180 */ 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, /* 0x188 */ 0x03, 0x82, 0x01, 0x0F, 0x00, 0x30, 0x82, 0x01, /* 0x190 */ 0x0A, 0x02, 0x82, 0x01, 0x01, 0x00, 0xD5, 0x0C, /* 0x198 */ 0x3A, 0xC4, 0x2A, 0xF9, 0x4E, 0xE2, 0xF5, 0xBE, /* 0x1a0 */ 0x19, 0x97, 0x5F, 0x8E, 0x88, 0x53, 0xB1, 0x1F, /* 0x1a8 */ 0x3F, 0xCB, 0xCF, 0x9F, 0x20, 0x13, 0x6D, 0x29, /* 0x1b0 */ 0x3A, 0xC8, 0x0F, 0x7D, 0x3C, 0xF7, 0x6B, 0x76, /* 0x1b8 */ 0x38, 0x63, 0xD9, 0x36, 0x60, 0xA8, 0x9B, 0x5E, /* 0x1c0 */ 0x5C, 0x00, 0x80, 0xB2, 0x2F, 0x59, 0x7F, 0xF6, /* 0x1c8 */ 0x87, 0xF9, 0x25, 0x43, 0x86, 0xE7, 0x69, 0x1B, /* 0x1d0 */ 0x52, 0x9A, 0x90, 0xE1, 0x71, 0xE3, 0xD8, 0x2D, /* 0x1d8 */ 0x0D, 0x4E, 0x6F, 0xF6, 0xC8, 0x49, 0xD9, 0xB6, /* 0x1e0 */ 0xF3, 0x1A, 0x56, 0xAE, 0x2B, 0xB6, 0x74, 0x14, /* 0x1e8 */ 0xEB, 0xCF, 0xFB, 0x26, 0xE3, 0x1A, 0xBA, 0x1D, /* 0x1f0 */ 0x96, 0x2E, 0x6A, 0x3B, 0x58, 0x94, 0x89, 0x47, /* 0x1f8 */ 0x56, 0xFF, 0x25, 0xA0, 0x93, 0x70, 0x53, 0x83, /* 0x200 */ 0xDA, 0x84, 0x74, 0x14, 0xC3, 0x67, 0x9E, 0x04, /* 0x208 */ 0x68, 0x3A, 0xDF, 0x8E, 0x40, 0x5A, 0x1D, 0x4A, /* 0x210 */ 0x4E, 0xCF, 0x43, 0x91, 0x3B, 0xE7, 0x56, 0xD6, /* 0x218 */ 0x00, 0x70, 0xCB, 0x52, 0xEE, 0x7B, 0x7D, 0xAE, /* 0x220 */ 0x3A, 0xE7, 0xBC, 0x31, 0xF9, 0x45, 0xF6, 0xC2, /* 0x228 */ 0x60, 0xCF, 0x13, 0x59, 0x02, 0x2B, 0x80, 0xCC, /* 0x230 */ 0x34, 0x47, 0xDF, 0xB9, 0xDE, 0x90, 0x65, 0x6D, /* 0x238 */ 0x02, 0xCF, 0x2C, 0x91, 0xA6, 0xA6, 0xE7, 0xDE, /* 0x240 */ 0x85, 0x18, 0x49, 0x7C, 0x66, 0x4E, 0xA3, 0x3A, /* 0x248 */ 0x6D, 0xA9, 0xB5, 0xEE, 0x34, 0x2E, 0xBA, 0x0D, /* 0x250 */ 0x03, 0xB8, 0x33, 0xDF, 0x47, 0xEB, 0xB1, 0x6B, /* 0x258 */ 0x8D, 0x25, 0xD9, 0x9B, 0xCE, 0x81, 0xD1, 0x45, /* 0x260 */ 0x46, 0x32, 0x96, 0x70, 0x87, 0xDE, 0x02, 0x0E, /* 0x268 */ 0x49, 0x43, 0x85, 0xB6, 0x6C, 0x73, 0xBB, 0x64, /* 0x270 */ 0xEA, 0x61, 0x41, 0xAC, 0xC9, 0xD4, 0x54, 0xDF, /* 0x278 */ 0x87, 0x2F, 0xC7, 0x22, 0xB2, 0x26, 0xCC, 0x9F, /* 0x280 */ 0x59, 0x54, 0x68, 0x9F, 0xFC, 0xBE, 0x2A, 0x2F, /* 0x288 */ 0xC4, 0x55, 0x1C, 0x75, 0x40, 0x60, 0x17, 0x85, /* 0x290 */ 0x02, 0x55, 0x39, 0x8B, 0x7F, 0x05, 0x02, 0x03, /* 0x298 */ 0x01, 0x00, 0x01, 0xA3, 0x42, 0x30, 0x40, 0x30, /* 0x2a0 */ 0x0F, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, /* 0x2a8 */ 0xFF, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xFF, /* 0x2b0 */ 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, /* 0x2b8 */ 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, /* 0x2c0 */ 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, /* 0x2c8 */ 0x16, 0x04, 0x14, 0x9C, 0x5F, 0x00, 0xDF, 0xAA, /* 0x2d0 */ 0x01, 0xD7, 0x30, 0x2B, 0x38, 0x88, 0xA2, 0xB8, /* 0x2d8 */ 0x6D, 0x4A, 0x9C, 0xF2, 0x11, 0x91, 0x83, 0x30, /* 0x2e0 */ 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, /* 0x2e8 */ 0x0D, 0x01, 0x01, 0x0B, 0x05, 0x00, 0x03, 0x82, /* 0x2f0 */ 0x01, 0x01, 0x00, 0x4B, 0x36, 0xA6, 0x84, 0x77, /* 0x2f8 */ 0x69, 0xDD, 0x3B, 0x19, 0x9F, 0x67, 0x23, 0x08, /* 0x300 */ 0x6F, 0x0E, 0x61, 0xC9, 0xFD, 0x84, 0xDC, 0x5F, /* 0x308 */ 0xD8, 0x36, 0x81, 0xCD, 0xD8, 0x1B, 0x41, 0x2D, /* 0x310 */ 0x9F, 0x60, 0xDD, 0xC7, 0x1A, 0x68, 0xD9, 0xD1, /* 0x318 */ 0x6E, 0x86, 0xE1, 0x88, 0x23, 0xCF, 0x13, 0xDE, /* 0x320 */ 0x43, 0xCF, 0xE2, 0x34, 0xB3, 0x04, 0x9D, 0x1F, /* 0x328 */ 0x29, 0xD5, 0xBF, 0xF8, 0x5E, 0xC8, 0xD5, 0xC1, /* 0x330 */ 0xBD, 0xEE, 0x92, 0x6F, 0x32, 0x74, 0xF2, 0x91, /* 0x338 */ 0x82, 0x2F, 0xBD, 0x82, 0x42, 0x7A, 0xAD, 0x2A, /* 0x340 */ 0xB7, 0x20, 0x7D, 0x4D, 0xBC, 0x7A, 0x55, 0x12, /* 0x348 */ 0xC2, 0x15, 0xEA, 0xBD, 0xF7, 0x6A, 0x95, 0x2E, /* 0x350 */ 0x6C, 0x74, 0x9F, 0xCF, 0x1C, 0xB4, 0xF2, 0xC5, /* 0x358 */ 0x01, 0xA3, 0x85, 0xD0, 0x72, 0x3E, 0xAD, 0x73, /* 0x360 */ 0xAB, 0x0B, 0x9B, 0x75, 0x0C, 0x6D, 0x45, 0xB7, /* 0x368 */ 0x8E, 0x94, 0xAC, 0x96, 0x37, 0xB5, 0xA0, 0xD0, /* 0x370 */ 0x8F, 0x15, 0x47, 0x0E, 0xE3, 0xE8, 0x83, 0xDD, /* 0x378 */ 0x8F, 0xFD, 0xEF, 0x41, 0x01, 0x77, 0xCC, 0x27, /* 0x380 */ 0xA9, 0x62, 0x85, 0x33, 0xF2, 0x37, 0x08, 0xEF, /* 0x388 */ 0x71, 0xCF, 0x77, 0x06, 0xDE, 0xC8, 0x19, 0x1D, /* 0x390 */ 0x88, 0x40, 0xCF, 0x7D, 0x46, 0x1D, 0xFF, 0x1E, /* 0x398 */ 0xC7, 0xE1, 0xCE, 0xFF, 0x23, 0xDB, 0xC6, 0xFA, /* 0x3a0 */ 0x8D, 0x55, 0x4E, 0xA9, 0x02, 0xE7, 0x47, 0x11, /* 0x3a8 */ 0x46, 0x3E, 0xF4, 0xFD, 0xBD, 0x7B, 0x29, 0x26, /* 0x3b0 */ 0xBB, 0xA9, 0x61, 0x62, 0x37, 0x28, 0xB6, 0x2D, /* 0x3b8 */ 0x2A, 0xF6, 0x10, 0x86, 0x64, 0xC9, 0x70, 0xA7, /* 0x3c0 */ 0xD2, 0xAD, 0xB7, 0x29, 0x70, 0x79, 0xEA, 0x3C, /* 0x3c8 */ 0xDA, 0x63, 0x25, 0x9F, 0xFD, 0x68, 0xB7, 0x30, /* 0x3d0 */ 0xEC, 0x70, 0xFB, 0x75, 0x8A, 0xB7, 0x6D, 0x60, /* 0x3d8 */ 0x67, 0xB2, 0x1E, 0xC8, 0xB9, 0xE9, 0xD8, 0xA8, /* 0x3e0 */ 0x6F, 0x02, 0x8B, 0x67, 0x0D, 0x4D, 0x26, 0x57, /* 0x3e8 */ 0x71, 0xDA, 0x20, 0xFC, 0xC1, 0x4A, 0x50, 0x8D, /* 0x3f0 */ 0xB1, 0x28, 0xBA, }; static const lws_ss_x509_t _ss_x509_starfield_services_root_ca = { .vhost_name = "starfield_services_root_ca", .ca_der = _ss_der_starfield_services_root_ca, .ca_der_len = 1011, }; static const lws_ss_trust_store_t _ss_ts_s3_root_cert = { .name = "s3-root-cert", .count = 3, .ssx509 = { &_ss_x509_starfield_services_root_ca, &_ss_x509_amazon_root_ca_1, &_ss_x509_baltimore_cybertrust_root, } }; static const lws_ss_auth_t _ssau_sigv4_br = { .name = "sigv4_br", .type= "sigv4", .streamtype = "(null)", .blob_index = 0, }; static const lws_ss_policy_t _ssp_s3PutObj = { .streamtype = "s3PutObj", .endpoint = "${s3bucket}.s3.amazonaws.com", .auth = &_ssau_sigv4_br, .metadata = (void *)&_md_s3PutObj_region, .u = { .http = { .method = "PUT", .url = "${s3Obj}", } }, .retry_bo = &_rbo_0, .flags = 0x11, .priority = 0x0, .port = 443, .metadata_count = 8, .protocol = 0, .trust = {.store = &_ss_ts_s3_root_cert}, .aws_region= "region", .aws_service= "service", }; #define _ss_static_policy_entry _ssp_s3PutObj /* estimated footprint 3559 (when sizeof void * = 8) */ libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-smd/000077500000000000000000000000001476025525100277455ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-smd/CMakeLists.txt000066400000000000000000000172701476025525100325140ustar00rootroot00000000000000project(lws-minimal-secure-streams-smd C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS 1 requirements) require_lws_config(LWS_WITH_SYS_SMD 1 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY 0 requirements) require_lws_config(LWS_WITH_SYS_STATE 1 requirements) require_lws_config(LWS_WITH_SYS_FAULT_INJECTION 1 has_fault_injection) if (requirements) add_executable(${PROJECT_NAME} minimal-secure-streams-smd.c) find_program(VALGRIND "valgrind") if (LWS_CTEST_INTERNET_AVAILABLE AND NOT WIN32) if (VALGRIND) add_test(NAME ss-smd COMMAND ${VALGRIND} --tool=memcheck --leak-check=yes --num-callers=20 $) else() add_test(NAME ss-smd COMMAND lws-minimal-secure-streams-smd) endif() set_tests_properties(ss-smd PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/secure-streams/minimal-secure-streams-smd TIMEOUT 10) if (has_fault_injection) if (VALGRIND) add_test(NAME ss-smd-fi1 COMMAND ${VALGRIND} --tool=memcheck --leak-check=yes --num-callers=20 $ --fault-injection "ss/ss_create_smd" --expected-exit 1) add_test(NAME ss-smd-fi2 COMMAND ${VALGRIND} --tool=memcheck --leak-check=yes --num-callers=20 $ --fault-injection "ss/ss_create_smd_1" --expected-exit 1) add_test(NAME ss-smd-fi3 COMMAND ${VALGRIND} --tool=memcheck --leak-check=yes --num-callers=20 $ --fault-injection "ss/ss_create_smd_2" --expected-exit 1) else() add_test(NAME ss-smd-fi1 COMMAND lws-minimal-secure-streams-smd --fault-injection "ss/ss_create_smd" --expected-exit 1) add_test(NAME ss-smd-fi2 COMMAND lws-minimal-secure-streams-smd --fault-injection "ss/ss_create_smd_1" --expected-exit 1) add_test(NAME ss-smd-fi3 COMMAND lws-minimal-secure-streams-smd --fault-injection "ss/ss_create_smd_2" --expected-exit 1) endif() set_tests_properties(ss-smd-fi1 ss-smd-fi2 ss-smd-fi3 PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/secure-streams/minimal-secure-streams-smd TIMEOUT 5) endif() endif() if (websockets_shared) target_link_libraries(${PROJECT_NAME} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${PROJECT_NAME} websockets_shared) else() target_link_libraries(${PROJECT_NAME} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\ni#if defined(LWS_WITH_SECURE_STREAMS_PROXY_API)\n return 0;\n #else\n fail\n #endif\n return 0;\n}\n" HAS_LWS_WITH_SECURE_STREAMS_PROXY_API) if (HAS_LWS_WITH_SECURE_STREAMS_PROXY_API OR LWS_WITH_SECURE_STREAMS_PROXY_API) add_compile_options(-DLWS_SS_USE_SSPC) add_executable(${PROJECT_NAME}-client minimal-secure-streams-smd.c multi.c) if (websockets_shared) target_link_libraries(${PROJECT_NAME}-client websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${PROJECT_NAME}-client websockets_shared) else() target_link_libraries(${PROJECT_NAME}-client websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() # # Define test dep to bring up and take down the test # proxy # if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") # uds abstract namespace for linux set(CTEST_SOCKET_PATH "@ctest-sspsmd_sspc-$ENV{SAI_PROJECT}-$ENV{SAI_OVN}") else() # filesystem socket for others set(CTEST_SOCKET_PATH "/tmp/ctest-sspsmd_sspc-$ENV{SAI_PROJECT}-$ENV{SAI_OVN}") endif() add_test(NAME st_ssprxsmd_sspc COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background.sh ssproxysmd_sspc $ -i ${CTEST_SOCKET_PATH} -d1039) set_tests_properties(st_ssprxsmd_sspc PROPERTIES WORKING_DIRECTORY . FIXTURES_SETUP ssproxysmd_sspc TIMEOUT 800) add_test(NAME ki_ssprxsmd_sspc COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background-kill.sh ssproxysmd_sspc $ -i ${CTEST_SOCKET_PATH} -d1039) set_tests_properties(ki_ssprxsmd_sspc PROPERTIES FIXTURES_CLEANUP ssproxysmd_sspc) # # the client part that will connect to the proxy # if (VALGRIND) message("testing via valgrind") add_test(NAME sspcsmd_sspc COMMAND ${VALGRIND} --tool=memcheck --leak-check=yes --num-callers=20 $ -i +${CTEST_SOCKET_PATH}) else() add_test(NAME sspcsmd_sspc COMMAND lws-minimal-secure-streams-smd-client -i +${CTEST_SOCKET_PATH}) endif() set_tests_properties(sspcsmd_sspc PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/secure-streams/minimal-secure-streams-smd FIXTURES_REQUIRED "ssproxysmd_sspc" TIMEOUT 80) # # Define test dep to bring up and take down the test # proxy # if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") # uds abstract namespace for linux set(CTEST_SOCKET_PATH "@ctest-mul-sspsmd_sspc-$ENV{SAI_PROJECT}-$ENV{SAI_OVN}") else() # filesystem socket for others set(CTEST_SOCKET_PATH "/tmp/ctest-mul-sspsmd_sspc-$ENV{SAI_PROJECT}-$ENV{SAI_OVN}") endif() add_test(NAME st_mulssprxsmd_sspc COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background.sh mulssproxysmd_sspc $ -i ${CTEST_SOCKET_PATH} -d1039) set_tests_properties(st_mulssprxsmd_sspc PROPERTIES WORKING_DIRECTORY . FIXTURES_SETUP mulssproxysmd_sspc TIMEOUT 800) add_test(NAME ki_mulssprxsmd_sspc COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background-kill.sh mulssproxysmd_sspc $ -i ${CTEST_SOCKET_PATH} -d1039) set_tests_properties(ki_mulssprxsmd_sspc PROPERTIES FIXTURES_CLEANUP mulssproxysmd_sspc) # # multi tests for the client part that will connect to the proxy # if (VALGRIND) message("testing via valgrind") add_test(NAME mulsspcsmd_sspc COMMAND ${VALGRIND} --tool=memcheck --leak-check=yes --num-callers=20 $ -i +${CTEST_SOCKET_PATH} --multi -d1039) else() add_test(NAME mulsspcsmd_sspc COMMAND lws-minimal-secure-streams-smd-client -i +${CTEST_SOCKET_PATH} --multi -d1039) endif() set_tests_properties(mulsspcsmd_sspc PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/secure-streams/minimal-secure-streams-smd FIXTURES_REQUIRED "mulssproxysmd_sspc" TIMEOUT 80) endif() endif() libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-smd/README.md000066400000000000000000000135561476025525100312360ustar00rootroot00000000000000# lws minimal secure streams SMD This application creates a Secure Stream link to LWS SMD, System Message Distribution. The SS is able to receive system messages matching a specified class filter, and issue system messages also using SS payload semantics. Both a direct api lws_smd participant and an SS based one are instantiated. They both filter on system messages. When the Secure Stream is created, it asks to send using normal the SS api. In the SS tx callback, it prepares a header and then send a NETWORK class message. Numbers of messages received each way and sent is compared after 2s and the test exits with a success or a fail. ### Building and testing Build with -DLWS_WITH_SECURE_STREAMS=1 -DLWS_WITH_SECURE_STREAMS_PROXY_API=1 -DLWS_WITH_MINIMAL_EXAMPLES=1 The run ./bin/lws-minimal-secure-streams-smd alone (local SS and direct SMD tests) and after run ./bin/lws-minimal-secure-streams-proxy in one console and ./bin-lws-minimal-secure-streams-smd-client in the other (SS proxy tests) ### What's going on in the -client test The -client build version contains the test logic as usual, but outsources the policy and smd_ server part to the Secure Streams Proxy. - start lws-minimal-secure-streams-proxy first - start lws-minimal-secure-streams-smd-client 1) When the client starts, we waits to hear the client state is OPERATIONAL in a direct smd participant callback. When it is, he creates a Secure Stream of streamtype "_lws_smd", creating a local SS handle. 2) The SS creation request is proxied to the SS proxy process over Unix Domain Sockets. There it creates a Secure Stream object proxyside, and registers as an SMD participant... this smd-related behaviour is tied to the special streamtype name "_lws_smd". The SMD registration uses a class mask passed to the proxy in the tx credit field of the serialization. 3) SMD messages that pass the class mask filter are proxied back to the client over the connection. 4) SMD messages created at the client are passed to the proxy and added to the proxy's SMD queue, if the same connection's class mask accepts the message then it will be proxied back to the client same as other messages. The minimal example produces a variety of messages on the SS link, including CPD detect trigger. The SS link is set up to only accept messages of classes LWSSMDCL_SYSTEM_STATE and LWSSMDCL_NETWORK, INTERACTION type messages are not accepted. ### multi via proxy If the -client version is run with `--multi`, it spawns four worker processes which send and confirm SMD messages between each other via the SS proxy. ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 --multi|Fork four worker processes that send and check messages to each other over sspc proxy ``` $ ./bin/lws-minimal-secure-streams-smd -d 1151 [2020/06/18 21:44:54:5148] U: LWS Secure Streams SMD test client [-d] [2020/06/18 21:44:54:5601] I: Initial logging level 1151 [2020/06/18 21:44:54:5605] I: Libwebsockets version: 4.0.99-v4.0.0-174-ga8a2eb954 v4.0.0-174-ga8a2eb954 [2020/06/18 21:44:54:5607] I: IPV6 not compiled in ... [2020/06/18 21:44:54:7906] D: _lws_state_transition: system: changed 11 'AUTH2' -> 12 'OPERATIONAL' [2020/06/18 21:44:54:7906] D: _realloc: size 81: lws_smd_msg_alloc [2020/06/18 21:44:54:7907] I: lws_cancel_service [2020/06/18 21:44:54:7912] I: lws_state_transition_steps: CONTEXT_CREATED -> OPERATIONAL [2020/06/18 21:44:54:7919] N: myss_tx: sending SS smd [2020/06/18 21:44:54:7940] D: _realloc: size 84: lws_smd_msg_alloc [2020/06/18 21:44:54:7944] I: lws_cancel_service [2020/06/18 21:44:54:7966] D: direct_smd_cb: class: 0x2, ts: 3139600721554 [2020/06/18 21:44:54:7972] D: [2020/06/18 21:44:54:7990] D: 0000: 7B 22 73 74 61 74 65 22 3A 22 49 4E 49 54 49 41 {"state":"INITIA [2020/06/18 21:44:54:7998] D: 0010: 4C 49 5A 45 44 22 7D LIZED"} [2020/06/18 21:44:54:8001] D: [2020/06/18 21:44:54:8016] I: myss_rx: len 39, flags: 3 [2020/06/18 21:44:54:8018] I: [2020/06/18 21:44:54:8021] I: 0000: 00 00 00 00 00 00 00 02 00 00 02 DA FE C9 26 92 ..............&. [2020/06/18 21:44:54:8022] I: 0010: 7B 22 73 74 61 74 65 22 3A 22 49 4E 49 54 49 41 {"state":"INITIA [2020/06/18 21:44:54:8023] I: 0020: 4C 49 5A 45 44 22 7D LIZED"} [2020/06/18 21:44:54:8023] I: [2020/06/18 21:44:54:8029] D: direct_smd_cb: class: 0x2, ts: 3139600724243 [2020/06/18 21:44:54:8029] D: [2020/06/18 21:44:54:8030] D: 0000: 7B 22 73 74 61 74 65 22 3A 22 49 46 41 43 45 5F {"state":"IFACE_ [2020/06/18 21:44:54:8031] D: 0010: 43 4F 4C 44 50 4C 55 47 22 7D COLDPLUG"} [2020/06/18 21:44:54:8032] D: ... [2020/06/18 21:44:54:8112] D: direct_smd_cb: class: 0x4, ts: 3139600732952 [2020/06/18 21:44:54:8112] D: [2020/06/18 21:44:54:8114] D: 0000: 7B 22 73 6F 6D 74 68 69 6E 67 22 3A 22 6E 6F 74 {"somthing":"not [2020/06/18 21:44:54:8115] D: 0010: 73 65 65 6E 62 79 73 73 72 78 22 7D seenbyssrx"} [2020/06/18 21:44:54:8115] D: [2020/06/18 21:44:57:5823] I: 11 12 1 [2020/06/18 21:44:57:5838] I: lws_context_destroy: ctx 0x4f61db0 [2020/06/18 21:44:57:5849] D: _lws_state_transition: system: changed 12 'OPERATIONAL' -> 13 'POLICY_INVALID' [2020/06/18 21:44:57:5851] D: _realloc: size 84: lws_smd_msg_alloc [2020/06/18 21:44:57:5853] I: lws_cancel_service [2020/06/18 21:44:57:5871] I: lws_destroy_event_pipe [2020/06/18 21:44:57:5906] I: lws_pt_destroy: pt destroyed [2020/06/18 21:44:57:5913] I: lws_context_destroy2: ctx 0x4f61db0 [2020/06/18 21:44:57:5936] D: lwsac_free: head (nil) [2020/06/18 21:44:57:5947] D: 0x455970: post vh listl [2020/06/18 21:44:57:5950] D: 0x455970: post pdl [2020/06/18 21:44:57:5961] D: 0x455970: baggage [2020/06/18 21:44:57:5968] D: 0x455970: post dc2 [2020/06/18 21:44:57:6010] D: lws_context_destroy3: ctx 0x4f61db0 freed [2020/06/18 21:44:57:6014] U: Completed: OK ```minimal-secure-streams-smd.c000066400000000000000000000232301476025525100352010ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-smd/* * lws-minimal-secure-streams-smd * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * * This demonstrates a minimal http client using secure streams to access the * SMD api. */ #include #include #include static int interrupted, bad = 1, count_p1, count_p2, count_tx, expected = 0; static unsigned int how_many_msg = 100, usec_interval = 1000; static lws_sorted_usec_list_t sul_timeout; /* * If the -proxy app is fulfilling our connection, then we don't need to have * the policy in the client. * * When we build with LWS_SS_USE_SSPC, the apis hook up to a proxy process over * a Unix Domain Socket. To test that, you need to separately run the * ./lws-minimal-secure-streams-proxy test app on the same machine. */ #if !defined(LWS_SS_USE_SSPC) static const char * const default_ss_policy = "{" "\"schema-version\":1," "\"s\": [" "{" /* * "captive_portal_detect" describes * what to do in order to check if the path to * the Internet is being interrupted by a * captive portal. If there's a larger policy * fetched from elsewhere, it should also include * this since it needs to be done at least after * every DHCP acquisition */ "\"captive_portal_detect\": {" "\"endpoint\": \"connectivitycheck.android.com\"," "\"http_url\": \"generate_204\"," "\"port\": 80," "\"protocol\": \"h1\"," "\"http_method\": \"GET\"," "\"opportunistic\": true," "\"http_expect\": 204," "\"http_fail_redirect\": true" "}" "}" "]" "}" ; #endif typedef struct myss { struct lws_ss_handle *ss; void *opaque_data; /* ... application specific state ... */ lws_sorted_usec_list_t sul; char alternate; } myss_t; /* secure streams payload interface */ static lws_ss_state_return_t myss_rx(void *userobj, const uint8_t *buf, size_t len, int flags) { /* * Call the helper to translate into a real smd message and forward to * this context / process smd participants... except us, since we * definitely already received it */ if (lws_smd_ss_rx_forward(userobj, buf, len)) lwsl_warn("%s: forward failed\n", __func__); count_p1++; return LWSSSSRET_OK; } static void sul_tx_periodic_cb(lws_sorted_usec_list_t *sul) { myss_t *m = lws_container_of(sul, myss_t, sul); lwsl_info("%s: requesting TX\n", __func__); if (lws_ss_request_tx(m->ss)) lwsl_info("%s: req failed\n", __func__); } static lws_ss_state_return_t myss_tx(void *userobj, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len, int *flags) { myss_t *m = (myss_t *)userobj; lwsl_info("%s: sending SS smd\n", __func__); /* * The SS RX isn't going to see INTERACTION messages, because its class * filter doesn't accept INTERACTION class messages. The direct * participant we also set up for the test will see them though. * * Let's alternate between sending NETWORK class smd messages and * INTERACTION so we can test both rx paths */ m->alternate++; if (m->alternate == 4) { /* * after a few, let's request a CPD check */ if (lws_smd_ss_msg_printf(lws_ss_tag(m->ss), buf, len, LWSSMDCL_NETWORK, "{\"trigger\": \"cpdcheck\", " "\"src\":\"SS-test\"}")) return LWSSSSRET_TX_DONT_SEND; } else if (lws_smd_ss_msg_printf(lws_ss_tag(m->ss), buf, len, (m->alternate & 1) ? LWSSMDCL_NETWORK : LWSSMDCL_INTERACTION, (m->alternate & 1) ? "{\"class\":\"NETWORK\",\"x\":%d}" : "{\"class\":\"INTERACTION\",\"x\":%d}", count_tx)) return LWSSSSRET_TX_DONT_SEND; *flags = LWSSS_FLAG_SOM | LWSSS_FLAG_EOM; count_tx++; lws_sul_schedule(lws_ss_get_context(m->ss), 0, &m->sul, sul_tx_periodic_cb, usec_interval); return LWSSSSRET_OK; } static lws_ss_state_return_t myss_state(void *userobj, void *h_src, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { myss_t *m = (myss_t *)userobj; lwsl_notice("%s: %s: %s (%d), ord 0x%x\n", __func__, lws_ss_tag(m->ss), lws_ss_state_name((int)state), state, (unsigned int)ack); if (state == LWSSSCS_DESTROYING) { lws_sul_cancel(&m->sul); return LWSSSSRET_OK; } if (state == LWSSSCS_CONNECTED) { lwsl_notice("%s: CONNECTED\n", __func__); lws_sul_schedule(lws_ss_get_context(m->ss), 0, &m->sul, sul_tx_periodic_cb, 1); return LWSSSSRET_OK; } return LWSSSSRET_OK; } static const lws_ss_info_t ssi_lws_smd = { .handle_offset = offsetof(myss_t, ss), .opaque_user_data_offset = offsetof(myss_t, opaque_data), .rx = myss_rx, .tx = myss_tx, .state = myss_state, .user_alloc = sizeof(myss_t), .streamtype = LWS_SMD_STREAMTYPENAME, .manual_initial_tx_credit = LWSSMDCL_SYSTEM_STATE | LWSSMDCL_METRICS | LWSSMDCL_NETWORK, }; /* for comparison, this is a non-SS lws_smd participant */ static int direct_smd_cb(void *opaque, lws_smd_class_t _class, lws_usec_t timestamp, void *buf, size_t len) { struct lws_context **pctx = (struct lws_context **)opaque; // lwsl_notice("%s: class: 0x%x, ts: %llu\n", __func__, _class, // (unsigned long long)timestamp); // lwsl_hexdump_notice(buf, len); count_p2++; if (_class != LWSSMDCL_SYSTEM_STATE) return 0; if (!lws_json_simple_strcmp(buf, len, "\"state\":", "OPERATIONAL")) { #if !defined(LWS_SS_USE_SSPC) /* * Let's trigger a CPD check, just as a test. SS can't see it * anyway since it doesn't listen for NETWORK but the direct / * local participant will see it and the result * * This process doesn't run the smd / captive portal action * when it's a client of the SS proxy. SMD has to be passed * via the SS _lws_smd proxied connection in that case. */ (void)lws_smd_msg_printf(*pctx, LWSSMDCL_NETWORK, "{\"trigger\": \"cpdcheck\", \"src\":\"direct-test\"}"); #endif /* * Create the SS link to lws_smd... notice in ssi_lws_smd * above, we tell this link to use a class filter that excludes * NETWORK messages. */ if (lws_ss_create(*pctx, 0, &ssi_lws_smd, NULL, NULL, NULL, NULL)) { lwsl_err("%s: failed to create secure stream\n", __func__); interrupted = 1; lws_cancel_service(*pctx); return -1; } } return 0; } static void sul_timeout_cb(lws_sorted_usec_list_t *sul) { lwsl_notice("%s: test finishing\n", __func__); interrupted = 1; } static void sigint_handler(int sig) { interrupted = 1; } extern int smd_ss_multi_test(int argc, const char **argv); int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); #if defined(LWS_SS_USE_SSPC) if (lws_cmdline_option(argc, argv, "--multi")) return smd_ss_multi_test(argc, argv); #endif lws_cmdline_option_handle_builtin(argc, argv, &info); if ((p = lws_cmdline_option(argc, argv, "--count"))) how_many_msg = (unsigned int)atol(p); if ((p = lws_cmdline_option(argc, argv, "--interval"))) usec_interval = (unsigned int)atol(p); lwsl_user("LWS Secure Streams SMD test client [-d]: " "%u msgs at %uus interval\n", how_many_msg, usec_interval); info.fd_limit_per_thread = 1 + 6 + 1; info.port = CONTEXT_PORT_NO_LISTEN; #if !defined(LWS_SS_USE_SSPC) info.pss_policies_json = default_ss_policy; #else info.protocols = lws_sspc_protocols; { /* connect to ssproxy via UDS by default, else via * tcp connection to this port */ if ((p = lws_cmdline_option(argc, argv, "-p"))) info.ss_proxy_port = (uint16_t)atoi(p); /* UDS "proxy.ss.lws" in abstract namespace, else this socket * path; when -p given this can specify the network interface * to bind to */ if ((p = lws_cmdline_option(argc, argv, "-i"))) info.ss_proxy_bind = p; /* if -p given, -a specifies the proxy address to connect to */ if ((p = lws_cmdline_option(argc, argv, "-a"))) info.ss_proxy_address = p; } #endif info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.early_smd_cb = direct_smd_cb; info.early_smd_class_filter = 0xffffffff; info.early_smd_opaque = &context; /* create the context */ context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } #if defined(LWS_SS_USE_SSPC) if (!lws_create_vhost(context, &info)) { lwsl_err("%s: failed to create default vhost\n", __func__); goto bail; } #endif /* set up the test timeout */ lws_sul_schedule(context, 0, &sul_timeout, sul_timeout_cb, (how_many_msg * (usec_interval + 50000)) + LWS_US_PER_SEC); /* the event loop */ while (lws_service(context, 0) >= 0 && !interrupted) ; /* compare what happened with what we expect */ #if defined(LWS_SS_USE_SSPC) /* if SSPC * * - the SS _lws_smd link does not enable INTERACTION class, so doesn't * see these messages (count_p1 is half count_tx) * * - the direct smd participant sees local state, but it doesn't send * any local CPD request, since as a client it doesn't do CPD * directly (count_p2 -= 1 compared to non-SSPC) * * - one CPD trigger is sent on the proxied SS link (countp1 += 1) */ if (count_p1 >= 6 && count_p2 >= 11 && count_tx >= 12) #else /* if not SSPC, then we can see direct smd activity */ if (count_p1 >= 2 && count_p2 >= 15 && count_tx >= 5) #endif bad = 0; lwsl_notice("%d %d %d\n", count_p1, count_p2, count_tx); #if defined(LWS_SS_USE_SSPC) bail: #endif lws_context_destroy(context); if ((p = lws_cmdline_option(argc, argv, "--expected-exit"))) expected = atoi(p); if (bad == expected) { lwsl_user("Completed: OK (seen expected %d)\n", expected); return 0; } lwsl_err("Completed: failed: exit %d, expected %d\n", bad, expected); return 1; } libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-smd/multi.c000066400000000000000000000260071476025525100312500ustar00rootroot00000000000000/* * lws-minimal-secure-streams-smd * * Written in 2010-2021 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * * This demonstrates a minimal http client using secure streams to access the * SMD api. This file is only built when LWS_SS_USE_SSPC defined. * * This is an alternative test implementation selected by --multi at runtime, * it's in its own file to stop muddying up the main test sources. It's only * available when built with SSPC / produces -client executable. * * We will fork several times, the original thread and the forks hook up to * the proxy with smd SS, each fork waits a second for everyone to have joined, * and then each fork (NOT the original process) sends a bunch of user messages * that all the forks should receive, having been distributed by SMD and the * ss proxy. * * The participants check they received all the messages expected from everyone * and then send a final message indicating success and exits. The original * fork is watching for these to arrive before the timeout, if so it's a PASS. */ #include #include #include static int bad = 1, interrupted; /* number of forks */ #define FORKS 4 /* number of messages each will send, eg, 4 forks 64 message == 256 messages */ #define MSGCOUNT 64 typedef struct myss { struct lws_ss_handle *ss; void *opaque_data; /* ... application specific state ... */ uint64_t seen_mask[FORKS]; int seen_msgs[FORKS]; lws_sorted_usec_list_t sul; int count; char seen_all; char send_seen_all; char starting; } myss_t; /* secure streams payload interface */ static lws_ss_state_return_t multi_myss_rx(void *userobj, const uint8_t *buf, size_t len, int flags) { myss_t *m = (myss_t *)userobj; const char *p; int fk, t, n; size_t al; /* ignore our and other forks announcing their result */ if (lws_json_simple_find((const char *)buf, len, "\"seen_all\":", &al)) return LWSSSSRET_OK; /* * otherwise once we saw the expected messages, any other messages * coming in this class are wrong */ if (m->seen_all) { lwsl_err("%s: unexpected extra messages\n", __func__); return LWSSSSRET_DESTROY_ME; } p = lws_json_simple_find((const char *)buf, len, "\"fork\":", &al); if (!p) return LWSSSSRET_DESTROY_ME; fk = atoi(p); if (fk < 1 || fk > FORKS) return LWSSSSRET_DESTROY_ME; p = lws_json_simple_find((const char *)buf, len, "\"test\":", &al); if (!p) return LWSSSSRET_DESTROY_ME; t = atoi(p); if (t < 0 || t >= MSGCOUNT) return LWSSSSRET_DESTROY_ME; m->seen_mask[fk - 1] |= 1ull << t; m->seen_msgs[fk - 1]++; /* keep an eye on dupes */ /* Have we seen a full set of messages from everyone? */ for (n = 0; n < FORKS; n++) { if (m->seen_msgs[n] != (int)MSGCOUNT) return LWSSSSRET_OK; if (m->seen_mask[n] != 0xffffffffffffffffull) return LWSSSSRET_OK; } /* * Oh... so we have finished collecting messages */ lwsl_user("%s: test thread %d: %s received all messages\n", __func__, (int)(intptr_t)lws_context_user(lws_ss_get_context(m->ss)), lws_ss_tag(m->ss)); m->seen_all = m->send_seen_all = 1; /* * Prepare to inform the original process we saw everything * from everyone OK */ lws_ss_request_tx(m->ss); return LWSSSSRET_OK; } static void sul_multi_tx_periodic_cb(lws_sorted_usec_list_t *sul) { myss_t *m = lws_container_of(sul, myss_t, sul); if (!m->send_seen_all && m->seen_all) { lws_ss_destroy(&m->ss); return; } m->starting = 1; if (m->count < MSGCOUNT || m->send_seen_all) lws_ss_request_tx(m->ss); } static lws_ss_state_return_t multi_myss_tx(void *userobj, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len, int *flags) { myss_t *m = (myss_t *)userobj; /* * We want to send exactly MSGCOUNT user class smd messages */ if (!m->starting || (m->count == MSGCOUNT && !m->send_seen_all)) return LWSSSSRET_TX_DONT_SEND; // lwsl_notice("%s: sending SS smd\n", __func__); lws_ser_wu64be(buf, 1 << LWSSMDCL_USER_BASE_BITNUM); lws_ser_wu64be(buf + 8, 0); /* valgrind notices uninitialized if left */ if (m->send_seen_all) { *len = LWS_SMD_SS_RX_HEADER_LEN + (unsigned int) lws_snprintf((char *)buf + LWS_SMD_SS_RX_HEADER_LEN, *len, "{\"class\":\"user\",\"fork\": %d,\"seen_all\":true}", (int)(intptr_t)lws_context_user(lws_ss_get_context(m->ss))); m->send_seen_all = 0; lwsl_info("%s: test thread %d: sent summary message\n", __func__, (int)(intptr_t)lws_context_user(lws_ss_get_context(m->ss))); } else *len = LWS_SMD_SS_RX_HEADER_LEN + (unsigned int) lws_snprintf((char *)buf + LWS_SMD_SS_RX_HEADER_LEN, *len, "{\"class\":\"user\",\"fork\": %d,\"test\":%u}", (int)(intptr_t)lws_context_user(lws_ss_get_context(m->ss)), m->count++); *flags = LWSSS_FLAG_SOM | LWSSS_FLAG_EOM; lws_sul_schedule(lws_ss_get_context(m->ss), 0, &m->sul, sul_multi_tx_periodic_cb, 25 * LWS_US_PER_MS); return LWSSSSRET_OK; } static lws_ss_state_return_t multi_myss_state(void *userobj, void *h_src, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { myss_t *m = (myss_t *)userobj; int n; lwsl_notice("%s: %s: %s (%d), ord 0x%x\n", __func__, lws_ss_tag(m->ss), lws_ss_state_name((int)state), state, (unsigned int)ack); switch (state) { case LWSSSCS_DESTROYING: lws_sul_cancel(&m->sul); interrupted = 1; return 0; case LWSSSCS_CONNECTED: lwsl_notice("%s: CONNECTED: test fork %d\n", __func__, (int)(intptr_t)lws_context_user(lws_ss_get_context(m->ss))); /* * Because in this test everybody is watching and counting * everybody else's messages from different forks, we have to * hold off starting sending for 2s so all forks can join the * proxy first and not miss anything */ lws_sul_schedule(lws_ss_get_context(m->ss), 0, &m->sul, sul_multi_tx_periodic_cb, 2 * LWS_US_PER_SEC); m->starting = 0; return 0; case LWSSSCS_DISCONNECTED: for (n = 0; n < FORKS; n++) lwsl_notice("%s: testfork %d: peer %d: seen_msg = %d, " "seen make = 0x%llx\n", __func__, (int)(intptr_t)lws_context_user(lws_ss_get_context(m->ss)), n, m->seen_msgs[n], (unsigned long long)m->seen_mask[n]); break; default: break; } return 0; } static const lws_ss_info_t ssi_multi_lws_smd = { .handle_offset = offsetof(myss_t, ss), .opaque_user_data_offset = offsetof(myss_t, opaque_data), .rx = multi_myss_rx, .tx = multi_myss_tx, .state = multi_myss_state, .user_alloc = sizeof(myss_t), .streamtype = LWS_SMD_STREAMTYPENAME, .manual_initial_tx_credit = 1 << LWSSMDCL_USER_BASE_BITNUM, }; static lws_ss_state_return_t multi_myss_rx_monitor(void *userobj, const uint8_t *buf, size_t len, int flags) { myss_t *m = (myss_t *)userobj; const char *p; size_t al; int fk, n; /* ignore our and other forks announcing their result */ if (!lws_json_simple_find((const char *)buf, len, "\"seen_all\":", &al)) return LWSSSSRET_OK; p = lws_json_simple_find((const char *)buf, len, "\"fork\":", &al); if (!p) return LWSSSSRET_DESTROY_ME; fk = atoi(p); if (fk < 1 || fk > FORKS) return LWSSSSRET_DESTROY_ME; if (m->seen_msgs[fk - 1]) /* expected only once ... dupe */ return LWSSSSRET_DESTROY_ME; m->seen_msgs[fk - 1] = 1; for (n = 0; n < FORKS; n++) if (!m->seen_msgs[n]) return LWSSSSRET_OK; /* the test has succeeded */ bad = 0; interrupted = 1; return LWSSSSRET_OK; } static const lws_ss_info_t ssi_multi_lws_smd_monitor = { .handle_offset = offsetof(myss_t, ss), .opaque_user_data_offset = offsetof(myss_t, opaque_data), .rx = multi_myss_rx_monitor, // .state = multi_myss_state_monitor, .user_alloc = sizeof(myss_t), .streamtype = LWS_SMD_STREAMTYPENAME, .manual_initial_tx_credit = 1 << LWSSMDCL_USER_BASE_BITNUM, }; /* for comparison, this is a non-SS lws_smd participant */ static int direct_smd_cb(void *opaque, lws_smd_class_t _class, lws_usec_t timestamp, void *buf, size_t len) { struct lws_context **pctx = (struct lws_context **)opaque; if (_class != LWSSMDCL_SYSTEM_STATE) return 0; if (!lws_json_simple_strcmp(buf, len, "\"state\":", "OPERATIONAL")) { /* * Create the SSPC link to lws_smd... notice in ssi_lws_smd * above, we tell this link to use the user class filter. * * If context->user is zero, we are the original process * monitoring the progress of the others, otherwise we are * 1 .. FORKS and producing / checking the smd messages */ lwsl_info("%s: starting ss for test fork %d\n", __func__, (int)(intptr_t)lws_context_user(*pctx)); if (lws_ss_create(*pctx, 0, lws_context_user(*pctx) ? &ssi_multi_lws_smd /* forked process send / check */: &ssi_multi_lws_smd_monitor /* original monitors */, NULL, NULL, NULL, NULL)) { lwsl_err("%s: failed to create secure stream\n", __func__); return -1; } } return 0; } static void sul_timeout_cb(lws_sorted_usec_list_t *sul) { interrupted = 1; } int smd_ss_multi_test(int argc, const char **argv) { struct lws_context_creation_info info; lws_sorted_usec_list_t sul_timeout; struct lws_context *context; pid_t pid; int n; lwsl_user("LWS Secure Streams SMD MULTI test client [-d]\n"); for (n = 0; n < FORKS; n++) { pid = fork(); if (!pid) /* forked child */ { break; } lwsl_notice("%s: forked test process %u\n", __func__, pid); } if (n == FORKS) /* the original process */ n = -1; /* so original ends up with context.user as 0 below */ memset(&info, 0, sizeof info); memset(&sul_timeout, 0, sizeof sul_timeout); lws_cmdline_option_handle_builtin(argc, argv, &info); { const char *p; /* connect to ssproxy via UDS by default, else via * tcp connection to this port */ if ((p = lws_cmdline_option(argc, argv, "-p"))) info.ss_proxy_port = (uint16_t)atoi(p); /* UDS "proxy.ss.lws" in abstract namespace, else this socket * path; when -p given this can specify the network interface * to bind to */ if ((p = lws_cmdline_option(argc, argv, "-i"))) info.ss_proxy_bind = p; /* if -p given, -a specifies the proxy address to connect to */ if ((p = lws_cmdline_option(argc, argv, "-a"))) info.ss_proxy_address = p; } info.fd_limit_per_thread = 1 + 6 + 1; info.port = CONTEXT_PORT_NO_LISTEN; info.protocols = lws_sspc_protocols; info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.early_smd_cb = direct_smd_cb; info.early_smd_class_filter = 0xffffffff; info.early_smd_opaque = &context; info.user = (void *)(intptr_t)(n + 1); /* create the context */ context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } if (!lws_create_vhost(context, &info)) { lwsl_err("%s: failed to create default vhost\n", __func__); goto bail; } /* set up the test timeout */ lws_sul_schedule(context, 0, &sul_timeout, sul_timeout_cb, 10 * LWS_US_PER_SEC); /* the event loop */ while (lws_service(context, 0) >= 0 && !interrupted) ; bail: lws_context_destroy(context); if (n == -1) lwsl_user("%s: finished %s\n", __func__, bad ? "FAIL" : "PASS"); return bad; } libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-staticpolicy/000077500000000000000000000000001476025525100316715ustar00rootroot00000000000000CMakeLists.txt000066400000000000000000000015411476025525100343530ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-staticpolicyproject(lws-minimal-secure-streams-staticpolicy C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-secure-streams-staticpolicy) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS 1 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY 1 requirements) if (requirements) add_executable(${SAMP} minimal-secure-streams.c) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-staticpolicy/README.md000066400000000000000000000056011476025525100331520ustar00rootroot00000000000000# lws minimal secure streams static policy The application goes to https://warmcat.com and reads index.html there. It does it using a static Secure Streams policy generated from JSON by policy2c example. ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 ``` $ ./lws-minimal-secure-streams-staticpolicy [2020/03/26 15:49:12:6640] U: LWS secure streams static policy test client [-d] [2020/03/26 15:49:12:7067] N: lws_create_context: using ss proxy bind '(null)', port 0, ads '(null)' [2020/03/26 15:49:12:7567] N: lws_tls_client_create_vhost_context: using mem client CA cert 914 [2020/03/26 15:49:12:7597] N: lws_tls_client_create_vhost_context: using mem client CA cert 1011 [2020/03/26 15:49:12:7603] N: lws_tls_client_create_vhost_context: using mem client CA cert 1425 [2020/03/26 15:49:12:7605] N: lws_tls_client_create_vhost_context: using mem client CA cert 1011 [2020/03/26 15:49:12:9713] N: lws_system_cpd_set: setting CPD result OK [2020/03/26 15:49:13:9625] N: ss_api_amazon_auth_rx: acquired 588-byte api.amazon.com auth token, exp 3600s [2020/03/26 15:49:13:9747] U: myss_state: LWSSSCS_CREATING, ord 0x0 [2020/03/26 15:49:13:9774] U: myss_state: LWSSSCS_CONNECTING, ord 0x0 [2020/03/26 15:49:14:1897] U: myss_state: LWSSSCS_CONNECTED, ord 0x0 [2020/03/26 15:49:14:1926] U: myss_rx: len 1520, flags: 1 [2020/03/26 15:49:14:1945] U: myss_rx: len 1520, flags: 0 [2020/03/26 15:49:14:1946] U: myss_rx: len 1520, flags: 0 [2020/03/26 15:49:14:1947] U: myss_rx: len 1520, flags: 0 [2020/03/26 15:49:14:1948] U: myss_rx: len 1520, flags: 0 [2020/03/26 15:49:14:1949] U: myss_rx: len 583, flags: 0 [2020/03/26 15:49:14:2087] U: myss_rx: len 1520, flags: 0 [2020/03/26 15:49:14:2089] U: myss_rx: len 1520, flags: 0 [2020/03/26 15:49:14:2090] U: myss_rx: len 1520, flags: 0 [2020/03/26 15:49:14:2091] U: myss_rx: len 1520, flags: 0 [2020/03/26 15:49:14:2092] U: myss_rx: len 1520, flags: 0 [2020/03/26 15:49:14:2093] U: myss_rx: len 583, flags: 0 [2020/03/26 15:49:14:2109] U: myss_rx: len 1520, flags: 0 [2020/03/26 15:49:14:2110] U: myss_rx: len 1520, flags: 0 [2020/03/26 15:49:14:2111] U: myss_rx: len 1520, flags: 0 [2020/03/26 15:49:14:2112] U: myss_rx: len 1520, flags: 0 [2020/03/26 15:49:14:2113] U: myss_rx: len 1520, flags: 0 [2020/03/26 15:49:14:2114] U: myss_rx: len 583, flags: 0 [2020/03/26 15:49:14:2135] U: myss_rx: len 1520, flags: 0 [2020/03/26 15:49:14:2136] U: myss_rx: len 1358, flags: 0 [2020/03/26 15:49:14:2136] U: myss_rx: len 0, flags: 2 [2020/03/26 15:49:14:2138] U: myss_state: LWSSSCS_QOS_ACK_REMOTE, ord 0x0 [2020/03/26 15:49:14:2139] N: myss_state: LWSSSCS_QOS_ACK_REMOTE [2020/03/26 15:49:14:2170] U: myss_state: LWSSSCS_DISCONNECTED, ord 0x0 [2020/03/26 15:49:14:2192] U: myss_state: LWSSSCS_DESTROYING, ord 0x0 [2020/03/26 15:49:14:2265] E: lws_context_destroy3 [2020/03/26 15:49:14:2282] U: Completed: OK ``` minimal-secure-streams.c000066400000000000000000000175221476025525100363530ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-staticpolicy/* * lws-minimal-secure-streams-staticpolicy * * Written in 2010-2021 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * * This demonstrates a minimal http client using secure streams api. * * It visits https://warmcat.com/ and receives the html page there. * * This example is built two different ways from the same source... one includes * the policy everything needed to fulfil the stream directly. The other -client * variant has no policy itself and some other minor init changes, and connects * to the -proxy example to actually get the connection done. * * In the -client build case, the example does not even init the tls libraries * since the proxy part will take care of all that. */ #include #include #include static int interrupted, bad = 1, force_cpd_fail_portal, force_cpd_fail_no_internet; static lws_state_notify_link_t nl; /* * This is example builds with a static policy autogenerated from a JSON * policy... */ #include "static-policy.h" typedef struct myss { struct lws_ss_handle *ss; void *opaque_data; /* ... application specific state ... */ lws_sorted_usec_list_t sul; } myss_t; static const char *canned_root_token_payload = "grant_type=refresh_token" "&refresh_token=Atzr|IwEBIJedGXjDqsU_vMxykqOMg" "SHfYe3CPcedueWEMWSDMaDnEmiW8RlR1Kns7Cb4B-TOSnqp7ifVsY4BMY2B8tpHfO39XP" "zfu9HapGjTR458IyHX44FE71pWJkGZ79uVBpljP4sazJuk8XS3Oe_yLnm_DIO6fU1nU3Y" "0flYmsOiOAQE_gRk_pdlmEtHnpMA-9rLw3mkY5L89Ty9kUygBsiFaYatouROhbsTn8-jW" "k1zZLUDpT6ICtBXSnrCIg0pUbZevPFhTwdXd6eX-u4rq0W-XaDvPWFO7au-iPb4Zk5eZE" "iX6sissYrtNmuEXc2uHu7MnQO1hHCaTdIO2CANVumf-PHSD8xseamyh04sLV5JgFzY45S" "KvKMajiUZuLkMokOx86rjC2Hdkx5DO7G-dbG1ufBDG-N79pFMSs7Ck5pc283IdLoJkCQc" "AGvTX8o8I29QqkcGou-9TKhOJmpX8As94T61ok0UqqEKPJ7RhfQHHYdCtsdwxgvfVr9qI" "xL_hDCcTho8opCVX-6QhJHl6SQFlTw13" "&client_id=" "amzn1.application-oa2-client.4823334c434b4190a2b5a42c07938a2d"; /* secure streams payload interface */ static int myss_rx(void *userobj, const uint8_t *buf, size_t len, int flags) { // myss_t *m = (myss_t *)userobj; lwsl_user("%s: len %d, flags: %d\n", __func__, (int)len, flags); lwsl_hexdump_info(buf, len); /* * If we received the whole message, for our example it means * we are done. */ if (flags & LWSSS_FLAG_EOM) { bad = 0; interrupted = 1; } return 0; } static int myss_tx(void *userobj, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len, int *flags) { //myss_t *m = (myss_t *)userobj; return 0; } static int myss_state(void *userobj, void *sh, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { myss_t *m = (myss_t *)userobj; lwsl_user("%s: %s, ord 0x%x\n", __func__, lws_ss_state_name(state), (unsigned int)ack); switch (state) { case LWSSSCS_CREATING: if (lws_ss_set_metadata(m->ss, "uptag", "myuptag123", 10)) lwsl_err("%s set metadata uptag failed\n", __func__); if (lws_ss_set_metadata(m->ss, "ctype", "myctype", 7)) lwsl_err("%s set metadata ctype failed\n", __func__); return lws_ss_client_connect(m->ss); case LWSSSCS_ALL_RETRIES_FAILED: /* if we're out of retries, we want to close the app and FAIL */ interrupted = 1; break; case LWSSSCS_QOS_ACK_REMOTE: lwsl_notice("%s: LWSSSCS_QOS_ACK_REMOTE\n", __func__); break; default: break; } return 0; } static int app_system_state_nf(lws_state_manager_t *mgr, lws_state_notify_link_t *link, int current, int target) { struct lws_context *context = lws_system_context_from_system_mgr(mgr); lws_system_blob_t *ab = lws_system_get_blob(context, LWS_SYSBLOB_TYPE_AUTH, 1 /* AUTH_IDX_ROOT */); size_t size; /* * For the things we care about, let's notice if we are trying to get * past them when we haven't solved them yet, and make the system * state wait while we trigger the dependent action. */ switch (target) { case LWS_SYSTATE_REGISTERED: size = lws_system_blob_get_size(ab); if (size) break; /* let's register our canned root token so auth can use it */ lws_system_blob_direct_set(ab, (const uint8_t *)canned_root_token_payload, strlen(canned_root_token_payload)); break; case LWS_SYSTATE_OPERATIONAL: if (current == LWS_SYSTATE_OPERATIONAL) { lws_ss_info_t ssi; /* We're making an outgoing secure stream ourselves */ memset(&ssi, 0, sizeof(ssi)); ssi.handle_offset = offsetof(myss_t, ss); ssi.opaque_user_data_offset = offsetof(myss_t, opaque_data); ssi.rx = myss_rx; ssi.tx = myss_tx; ssi.state = myss_state; ssi.user_alloc = sizeof(myss_t); ssi.streamtype = "mintest"; if (lws_ss_create(context, 0, &ssi, NULL, NULL, NULL, NULL)) { lwsl_err("%s: failed to create secure stream\n", __func__); return -1; } } break; } return 0; } static lws_state_notify_link_t * const app_notifier_list[] = { &nl, NULL }; static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; int n = 0; signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); lws_cmdline_option_handle_builtin(argc, argv, &info); lwsl_user("LWS secure streams static policy test client [-d]\n"); /* these options are mutually exclusive if given */ if (lws_cmdline_option(argc, argv, "--force-portal")) force_cpd_fail_portal = 1; if (lws_cmdline_option(argc, argv, "--force-no-internet")) force_cpd_fail_no_internet = 1; info.fd_limit_per_thread = 1 + 6 + 1; info.port = CONTEXT_PORT_NO_LISTEN; #if defined(LWS_SS_USE_SSPC) info.protocols = lws_sspc_protocols; { const char *p; /* connect to ssproxy via UDS by default, else via * tcp connection to this port */ if ((p = lws_cmdline_option(argc, argv, "-p"))) info.ss_proxy_port = atoi(p); /* UDS "proxy.ss.lws" in abstract namespace, else this socket * path; when -p given this can specify the network interface * to bind to */ if ((p = lws_cmdline_option(argc, argv, "-i"))) info.ss_proxy_bind = p; /* if -p given, -a specifies the proxy address to connect to */ if ((p = lws_cmdline_option(argc, argv, "-a"))) info.ss_proxy_address = p; } #else info.pss_policies = &_ss_static_policy_entry; info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; #endif /* integrate us with lws system state management when context created */ nl.name = "app"; nl.notify_cb = app_system_state_nf; info.register_notifier_list = app_notifier_list; /* create the context */ context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } /* * Set the related lws_system blobs * * ...direct_set() sets a pointer, so the thing pointed to has to have * a suitable lifetime, eg, something that already exists on the heap or * a const string in .rodata like this */ lws_system_blob_direct_set(lws_system_get_blob(context, LWS_SYSBLOB_TYPE_DEVICE_SERIAL, 0), (const uint8_t *)"SN12345678", 10); lws_system_blob_direct_set(lws_system_get_blob(context, LWS_SYSBLOB_TYPE_DEVICE_FW_VERSION, 0), (const uint8_t *)"v0.01", 5); /* * ..._heap_append() appends to a buflist kind of arrangement on heap, * just one block is fine, otherwise it will concatenate the fragments * in the order they were appended (and take care of freeing them at * context destroy time). ..._heap_empty() is also available to remove * everything that was already allocated. * * Here we use _heap_append() just so it's tested as well as direct set. */ lws_system_blob_heap_append(lws_system_get_blob(context, LWS_SYSBLOB_TYPE_DEVICE_TYPE, 0), (const uint8_t *)"spacerocket", 11); /* the event loop */ while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); lwsl_user("Completed: %s\n", bad ? "failed" : "OK"); return bad; } static-policy.h000066400000000000000000002424341476025525100345600ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-staticpolicy/* * Autogenerated from the following JSON policy */ #if 0 { "release": "01234567", "product": "myproduct", "schema-version": 1, "retry": [{ "default": { "backoff": [1000, 2000, 3000, 5000, 10000], "conceal": 5, "jitterpc": 20, "svalidping": 30, "svalidhup": 35 } }], "certs": [{ "isrg_root_x1": "MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAwTzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygch77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6UA5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sWT8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyHB5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UCB5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUvKBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWnOlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTnjh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbwqHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CIrU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkqhkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZLubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KKNFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7UrTkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdCjNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVcoyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPAmRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57demyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=" }, { "LEX3_isrg_root_x1": "MIIFjTCCA3WgAwIBAgIRANOxciY0IzLc9AUoUSrsnGowDQYJKoZIhvcNAQELBQAwTzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTYxMDA2MTU0MzU1WhcNMjExMDA2MTU0MzU1WjBKMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3MgRW5jcnlwdDEjMCEGA1UEAxMaTGV0J3MgRW5jcnlwdCBBdXRob3JpdHkgWDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCc0wzwWuUuR7dyXTeDs2hjMOrXNSYZJeG9vjXxcJIvt7hLQQWrqZ41CFjssSrEaIcLo+N15Obzp2JxunmBYB/XkZqf89B4Z3HIaQ6Vkc/+5pnpYDxIzH7KTXcSJJ1HG1rrueweNwAcnKx7pwXqzkrrvUHlNpi5y/1tPJZo3yMqQpAMhnRnyH+lmrhSYRQTP2XpgofL2/oOVvaGifOFP5eGr7DcGu9rDZUWfcQroGWymQQ2dYBrrErzG5BJeC+ilk8qICUpBMZ0wNAxzY8xOJUWuqgzuEPxsR/DMH+ieTETPS02+OP88jNquTkxxa/EjQ0dZBYzqvqEKbbUC8DYfcOTAgMBAAGjggFnMIIBYzAOBgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIBADBUBgNVHSAETTBLMAgGBmeBDAECATA/BgsrBgEEAYLfEwEBATAwMC4GCCsGAQUFBwIBFiJodHRwOi8vY3BzLnJvb3QteDEubGV0c2VuY3J5cHQub3JnMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTAzBgNVHR8ELDAqMCigJqAkhiJodHRwOi8vY3JsLnJvb3QteDEubGV0c2VuY3J5cHQub3JnMHIGCCsGAQUFBwEBBGYwZDAwBggrBgEFBQcwAYYkaHR0cDovL29jc3Aucm9vdC14MS5sZXRzZW5jcnlwdC5vcmcvMDAGCCsGAQUFBzAChiRodHRwOi8vY2VydC5yb290LXgxLmxldHNlbmNyeXB0Lm9yZy8wHwYDVR0jBBgwFoAUebRZ5nu25eQBc4AIiMgaWPbpm24wDQYJKoZIhvcNAQELBQADggIBABnPdSA0LTqmRf/Q1eaM2jLonG4bQdEnqOJQ8nCqxOeTRrToEKtwT++36gTSlBGxA/5dut82jJQ2jxN8RI8L9QFXrWi4xXnA2EqA10yjHiR6H9cj6MFiOnb5In1eWsRMUM2v3e9tNsCAgBukPHAg1lQh07rvFKm/Bz9BCjaxorALINUfZ9DD64j2igLIxle2DPxW8dI/F2loHMjXZjqG8RkqZUdoxtID5+90FgsGIfkMpqgRS05f4zPbCEHqCXl1eO5HyELTgcVlLXXQDgAWnRzut1hFJeczY1tjQQno6f6s+nMydLN26WuU4s3UYvOuOsUxRlJu7TSRHqDC3lSE5XggVkzdaPkuKGQbGpny+01/47hfXXNB7HntWNZ6N2Vwp7G6OfY+YQrZwIaQmhrIqJZuigsrbe3W+gdn5ykE9+Ky0VgVUsfxo52mwFYs1JKY2PGDuWx8M6DlS6qQkvHaRUo0FMd8TsSlbF0/v965qGFKhSDeQoMpYnwcmQilRh/0ayLThlHLN81gSkJjVrPI0Y8xCVPB4twb1PFUd2fPM3sA1tJ83sZ5v8vgFv2yofKRPB0t6JzUA81mSqM3kxl5e+IZwhYAyO0OTg3/fs8HqGTNKd9BqoUwSRBzp06JMg5brUCGwbCUDI0mxadJ3Bz4WxR6fyNpBK2yAinWEsikxqEt" }, { "amazon_root_ca_1": "MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5" }, { "digicert_global_root_g2": "MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTflMrY=" }, { "digicert_global_ca_g2": "MIIEizCCA3OgAwIBAgIQDI7gyQ1qiRWIBAYe4kH5rzANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0yODA4MDExMjAwMDBaMEQxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxHjAcBgNVBAMTFURpZ2lDZXJ0IEdsb2JhbCBDQSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANNIfL7zBYZdW9UvhU5L4IatFaxhz1uvPmoKR/uadpFgC4przc/cV35gmAvkVNlW7SHMArZagV+Xau4CLyMnuG3UsOcGAngLH1ypmTb+u6wbBfpXzYEQQGfWMItYNdSWYb7QjHqXnxr5IuYUL6nG6AEfq/gmD6yOTSwyOR2Bm40cZbIc22GoiS9g5+vCShjEbyrpEJIJ7RfRACvmfe8EiRROM6GyD5eHn7OgzS+8LOy4g2gxPR/VSpAQGQuBldYpdlH5NnbQtwl6OErXb4y/E3w57bqukPyV93t4CTZedJMeJfD/1K2uaGvG/w/VNfFVbkhJ+Pi474j48V4Rd6rfArMCAwEAAaOCAVowggFWMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgGGMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMHsGA1UdHwR0MHIwN6A1oDOGMWh0dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RHMi5jcmwwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RHMi5jcmwwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwHQYDVR0OBBYEFCRuKy3QapJRUSVpAaqaR6aJ50AgMB8GA1UdIwQYMBaAFE4iVCAYlebjbuYP+vq5Eu0GF485MA0GCSqGSIb3DQEBCwUAA4IBAQALOYSR+ZfrqoGvhOlaOJL84mxZvzbIRacxAxHhBsCsMsdaVSnaT0AC9aHesO3ewPj2dZ12uYf+QYB6z13jAMZbAuabeGLJ3LhimnftiQjXS8X9Q9ViIyfEBFltcT8jW+rZ8uckJ2/0lYDblizkVIvP6hnZf1WZUXoOLRg9eFhSvGNoVwvdRLNXSmDmyHBwW4coatc7TlJFGa8kBpJIERqLrqwYElesA8u49L3KJg6nwd3jM+/AVTANlVlOnAM2BvjAjxSZnE0qnsHhfTuvcqdFuhOWKU4Z0BqYBvQ3lBetoxi6PrABDJXWKTUgNX31EGDk92hiHuwZ4STyhxGs6QiA" }, { "starfield_services_root_ca": "MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkdiEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6" }, { "starfield_class_2_ca": "MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJlxy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=" }], "trust_stores": [{ "name": "le_via_isrg", "stack": ["isrg_root_x1", "LEX3_isrg_root_x1"] }, { "name": "api_amazon_com", "stack": ["digicert_global_ca_g2", "digicert_global_root_g2"] }, { "name": "avs_via_starfield", "stack": ["starfield_class_2_ca", "starfield_services_root_ca"] }, { "name": "mqtt_amz_iot", "stack": ["amazon_root_ca_1", "starfield_class_2_ca", "starfield_services_root_ca"] }], "s": [{ "api_amazon_com_auth": { "endpoint": "api.amazon.com", "port": 443, "protocol": "h1", "http_method": "POST", "http_url": "auth/o2/token", "plugins": [], "opportunistic": true, "tls": true, "h2q_oflow_txcr": true, "http_www_form_urlencoded": true, "http_no_content_length": true, "retry": "default", "tls_trust_store": "api_amazon_com" } }, { "avs_event": { "endpoint": "alexa.na.gateway.devices.a2z.com", "port": 443, "protocol": "h2", "http_method": "GET", "http_url": "v20160207/directives", "h2q_oflow_txcr": true, "http_auth_header": "authorization:", "http_auth_preamble": "Bearer ", "http_no_content_length": true, "nailed_up": true, "long_poll": true, "retry": "default", "plugins": [], "tls": true, "tls_trust_store": "avs_via_starfield" } }, { "avs_metadata": { "endpoint": "alexa.na.gateway.devices.a2z.com", "port": 443, "protocol": "h2", "http_method": "POST", "http_url": "v20160207/events", "opportunistic": true, "h2q_oflow_txcr": true, "http_auth_header": "authorization:", "http_auth_preamble": "Bearer ", "http_multipart_name": "metadata", "http_mime_content_type": "application/json; charset=UTF-8", "http_no_content_length": true, "rideshare": "avs_audio", "retry": "default", "plugins": [], "tls": true, "tls_trust_store": "avs_via_starfield" } }, { "avs_audio": { "endpoint": "alexa.na.gateway.devices.a2z.com", "port": 443, "protocol": "h2", "http_method": "POST", "http_url": "v20160207/events", "plugins": [], "tls": true, "h2q_oflow_txcr": true, "http_auth_header": "authorization:", "http_auth_preamble": "Bearer ", "http_multipart_name": "audio", "http_mime_content_type": "application/octet-stream", "http_no_content_length": true, "retry": "default", "tls_trust_store": "avs_via_starfield" } }, { "mintest": { "endpoint": "warmcat.com", "port": 443, "protocol": "h1", "http_method": "GET", "http_url": "index.html?uptag=${uptag}", "http_dsn_header": "x-dsn:", "http_fwv_header": "x-fw-version:", "http_devtype_header": "x-devtype:", "metadata": [{ "uptag": "X-Upload-Tag:" }, { "ctype": "Content-Type:" }, { "xctype": "X-Content-Type:" }], "plugins": [], "tls": true, "opportunistic": true, "retry": "default", "tls_trust_store": "le_via_isrg" } }, { "h2longpolltest": { "endpoint": "warmcat.com", "port": 443, "protocol": "h2", "http_method": "GET", "http_url": "index.html", "plugins": [], "tls": true, "nailed_up": true, "long_poll": true, "retry": "default", "tls_trust_store": "le_via_isrg" } }, { "mintest-fail": { "endpoint": "warmcat.com", "port": 22, "protocol": "h1", "http_method": "GET", "http_url": "index.html", "plugins": [], "tls": true, "opportunistic": true, "retry": "default", "tls_trust_store": "le_via_isrg" } }, { "minpost": { "endpoint": "warmcat.com", "port": 443, "protocol": "h1", "http_method": "POST", "http_url": "testserver/formtest", "plugins": [], "tls": true, "opportunistic": true, "retry": "default", "tls_trust_store": "le_via_isrg" } }, { "mqtt_test": { "endpoint": "a1ygonr3im5cv2-ats.iot.us-west-2.amazonaws.com", "port": 443, "tls": true, "client_cert": 0, "tls_trust_store": "mqtt_amz_iot", "protocol": "mqtt", "mqtt_topic": "test/topic0", "mqtt_subscribe": "test/topic0", "mqtt_qos": 0, "retry": "default" } }, { "mqtt_test1": { "endpoint": "a1ygonr3im5cv2-ats.iot.us-west-2.amazonaws.com", "port": 443, "tls": true, "client_cert": 0, "tls_trust_store": "mqtt_amz_iot", "protocol": "mqtt", "mqtt_topic": "test/topic1", "mqtt_subscribe": "test/topic1", "mqtt_qos": 1, "retry": "default" } }, { "captive_portal_detect": { "endpoint": "connectivitycheck.android.com", "port": 80, "protocol": "h1", "http_method": "GET", "http_url": "generate_204", "opportunistic": true, "http_expect": 204, "http_fail_redirect": true } } ] } Original JSON size: 15493 #endif static const uint32_t _rbo_bo_0[] = { 1000, 2000, 3000, 5000, 10000, }; static const lws_retry_bo_t _rbo_0 = { .retry_ms_table = _rbo_bo_0, .retry_ms_table_count = 5, .conceal_count = 5, .secs_since_valid_ping = 30, .secs_since_valid_hangup = 35, .jitter_percent = 20, }; static const uint8_t _ss_der_amazon_root_ca_1[] = { /* 0x 0 */ 0x30, 0x82, 0x03, 0x41, 0x30, 0x82, 0x02, 0x29, /* 0x 8 */ 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x13, 0x06, /* 0x 10 */ 0x6C, 0x9F, 0xCF, 0x99, 0xBF, 0x8C, 0x0A, 0x39, /* 0x 18 */ 0xE2, 0xF0, 0x78, 0x8A, 0x43, 0xE6, 0x96, 0x36, /* 0x 20 */ 0x5B, 0xCA, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, /* 0x 28 */ 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0B, 0x05, /* 0x 30 */ 0x00, 0x30, 0x39, 0x31, 0x0B, 0x30, 0x09, 0x06, /* 0x 38 */ 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, /* 0x 40 */ 0x31, 0x0F, 0x30, 0x0D, 0x06, 0x03, 0x55, 0x04, /* 0x 48 */ 0x0A, 0x13, 0x06, 0x41, 0x6D, 0x61, 0x7A, 0x6F, /* 0x 50 */ 0x6E, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, /* 0x 58 */ 0x04, 0x03, 0x13, 0x10, 0x41, 0x6D, 0x61, 0x7A, /* 0x 60 */ 0x6F, 0x6E, 0x20, 0x52, 0x6F, 0x6F, 0x74, 0x20, /* 0x 68 */ 0x43, 0x41, 0x20, 0x31, 0x30, 0x1E, 0x17, 0x0D, /* 0x 70 */ 0x31, 0x35, 0x30, 0x35, 0x32, 0x36, 0x30, 0x30, /* 0x 78 */ 0x30, 0x30, 0x30, 0x30, 0x5A, 0x17, 0x0D, 0x33, /* 0x 80 */ 0x38, 0x30, 0x31, 0x31, 0x37, 0x30, 0x30, 0x30, /* 0x 88 */ 0x30, 0x30, 0x30, 0x5A, 0x30, 0x39, 0x31, 0x0B, /* 0x 90 */ 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, /* 0x 98 */ 0x02, 0x55, 0x53, 0x31, 0x0F, 0x30, 0x0D, 0x06, /* 0x a0 */ 0x03, 0x55, 0x04, 0x0A, 0x13, 0x06, 0x41, 0x6D, /* 0x a8 */ 0x61, 0x7A, 0x6F, 0x6E, 0x31, 0x19, 0x30, 0x17, /* 0x b0 */ 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x10, 0x41, /* 0x b8 */ 0x6D, 0x61, 0x7A, 0x6F, 0x6E, 0x20, 0x52, 0x6F, /* 0x c0 */ 0x6F, 0x74, 0x20, 0x43, 0x41, 0x20, 0x31, 0x30, /* 0x c8 */ 0x82, 0x01, 0x22, 0x30, 0x0D, 0x06, 0x09, 0x2A, /* 0x d0 */ 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, /* 0x d8 */ 0x05, 0x00, 0x03, 0x82, 0x01, 0x0F, 0x00, 0x30, /* 0x e0 */ 0x82, 0x01, 0x0A, 0x02, 0x82, 0x01, 0x01, 0x00, /* 0x e8 */ 0xB2, 0x78, 0x80, 0x71, 0xCA, 0x78, 0xD5, 0xE3, /* 0x f0 */ 0x71, 0xAF, 0x47, 0x80, 0x50, 0x74, 0x7D, 0x6E, /* 0x f8 */ 0xD8, 0xD7, 0x88, 0x76, 0xF4, 0x99, 0x68, 0xF7, /* 0x100 */ 0x58, 0x21, 0x60, 0xF9, 0x74, 0x84, 0x01, 0x2F, /* 0x108 */ 0xAC, 0x02, 0x2D, 0x86, 0xD3, 0xA0, 0x43, 0x7A, /* 0x110 */ 0x4E, 0xB2, 0xA4, 0xD0, 0x36, 0xBA, 0x01, 0xBE, /* 0x118 */ 0x8D, 0xDB, 0x48, 0xC8, 0x07, 0x17, 0x36, 0x4C, /* 0x120 */ 0xF4, 0xEE, 0x88, 0x23, 0xC7, 0x3E, 0xEB, 0x37, /* 0x128 */ 0xF5, 0xB5, 0x19, 0xF8, 0x49, 0x68, 0xB0, 0xDE, /* 0x130 */ 0xD7, 0xB9, 0x76, 0x38, 0x1D, 0x61, 0x9E, 0xA4, /* 0x138 */ 0xFE, 0x82, 0x36, 0xA5, 0xE5, 0x4A, 0x56, 0xE4, /* 0x140 */ 0x45, 0xE1, 0xF9, 0xFD, 0xB4, 0x16, 0xFA, 0x74, /* 0x148 */ 0xDA, 0x9C, 0x9B, 0x35, 0x39, 0x2F, 0xFA, 0xB0, /* 0x150 */ 0x20, 0x50, 0x06, 0x6C, 0x7A, 0xD0, 0x80, 0xB2, /* 0x158 */ 0xA6, 0xF9, 0xAF, 0xEC, 0x47, 0x19, 0x8F, 0x50, /* 0x160 */ 0x38, 0x07, 0xDC, 0xA2, 0x87, 0x39, 0x58, 0xF8, /* 0x168 */ 0xBA, 0xD5, 0xA9, 0xF9, 0x48, 0x67, 0x30, 0x96, /* 0x170 */ 0xEE, 0x94, 0x78, 0x5E, 0x6F, 0x89, 0xA3, 0x51, /* 0x178 */ 0xC0, 0x30, 0x86, 0x66, 0xA1, 0x45, 0x66, 0xBA, /* 0x180 */ 0x54, 0xEB, 0xA3, 0xC3, 0x91, 0xF9, 0x48, 0xDC, /* 0x188 */ 0xFF, 0xD1, 0xE8, 0x30, 0x2D, 0x7D, 0x2D, 0x74, /* 0x190 */ 0x70, 0x35, 0xD7, 0x88, 0x24, 0xF7, 0x9E, 0xC4, /* 0x198 */ 0x59, 0x6E, 0xBB, 0x73, 0x87, 0x17, 0xF2, 0x32, /* 0x1a0 */ 0x46, 0x28, 0xB8, 0x43, 0xFA, 0xB7, 0x1D, 0xAA, /* 0x1a8 */ 0xCA, 0xB4, 0xF2, 0x9F, 0x24, 0x0E, 0x2D, 0x4B, /* 0x1b0 */ 0xF7, 0x71, 0x5C, 0x5E, 0x69, 0xFF, 0xEA, 0x95, /* 0x1b8 */ 0x02, 0xCB, 0x38, 0x8A, 0xAE, 0x50, 0x38, 0x6F, /* 0x1c0 */ 0xDB, 0xFB, 0x2D, 0x62, 0x1B, 0xC5, 0xC7, 0x1E, /* 0x1c8 */ 0x54, 0xE1, 0x77, 0xE0, 0x67, 0xC8, 0x0F, 0x9C, /* 0x1d0 */ 0x87, 0x23, 0xD6, 0x3F, 0x40, 0x20, 0x7F, 0x20, /* 0x1d8 */ 0x80, 0xC4, 0x80, 0x4C, 0x3E, 0x3B, 0x24, 0x26, /* 0x1e0 */ 0x8E, 0x04, 0xAE, 0x6C, 0x9A, 0xC8, 0xAA, 0x0D, /* 0x1e8 */ 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x42, 0x30, /* 0x1f0 */ 0x40, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x1D, 0x13, /* 0x1f8 */ 0x01, 0x01, 0xFF, 0x04, 0x05, 0x30, 0x03, 0x01, /* 0x200 */ 0x01, 0xFF, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, /* 0x208 */ 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, /* 0x210 */ 0x01, 0x86, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, /* 0x218 */ 0x0E, 0x04, 0x16, 0x04, 0x14, 0x84, 0x18, 0xCC, /* 0x220 */ 0x85, 0x34, 0xEC, 0xBC, 0x0C, 0x94, 0x94, 0x2E, /* 0x228 */ 0x08, 0x59, 0x9C, 0xC7, 0xB2, 0x10, 0x4E, 0x0A, /* 0x230 */ 0x08, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, /* 0x238 */ 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0B, 0x05, 0x00, /* 0x240 */ 0x03, 0x82, 0x01, 0x01, 0x00, 0x98, 0xF2, 0x37, /* 0x248 */ 0x5A, 0x41, 0x90, 0xA1, 0x1A, 0xC5, 0x76, 0x51, /* 0x250 */ 0x28, 0x20, 0x36, 0x23, 0x0E, 0xAE, 0xE6, 0x28, /* 0x258 */ 0xBB, 0xAA, 0xF8, 0x94, 0xAE, 0x48, 0xA4, 0x30, /* 0x260 */ 0x7F, 0x1B, 0xFC, 0x24, 0x8D, 0x4B, 0xB4, 0xC8, /* 0x268 */ 0xA1, 0x97, 0xF6, 0xB6, 0xF1, 0x7A, 0x70, 0xC8, /* 0x270 */ 0x53, 0x93, 0xCC, 0x08, 0x28, 0xE3, 0x98, 0x25, /* 0x278 */ 0xCF, 0x23, 0xA4, 0xF9, 0xDE, 0x21, 0xD3, 0x7C, /* 0x280 */ 0x85, 0x09, 0xAD, 0x4E, 0x9A, 0x75, 0x3A, 0xC2, /* 0x288 */ 0x0B, 0x6A, 0x89, 0x78, 0x76, 0x44, 0x47, 0x18, /* 0x290 */ 0x65, 0x6C, 0x8D, 0x41, 0x8E, 0x3B, 0x7F, 0x9A, /* 0x298 */ 0xCB, 0xF4, 0xB5, 0xA7, 0x50, 0xD7, 0x05, 0x2C, /* 0x2a0 */ 0x37, 0xE8, 0x03, 0x4B, 0xAD, 0xE9, 0x61, 0xA0, /* 0x2a8 */ 0x02, 0x6E, 0xF5, 0xF2, 0xF0, 0xC5, 0xB2, 0xED, /* 0x2b0 */ 0x5B, 0xB7, 0xDC, 0xFA, 0x94, 0x5C, 0x77, 0x9E, /* 0x2b8 */ 0x13, 0xA5, 0x7F, 0x52, 0xAD, 0x95, 0xF2, 0xF8, /* 0x2c0 */ 0x93, 0x3B, 0xDE, 0x8B, 0x5C, 0x5B, 0xCA, 0x5A, /* 0x2c8 */ 0x52, 0x5B, 0x60, 0xAF, 0x14, 0xF7, 0x4B, 0xEF, /* 0x2d0 */ 0xA3, 0xFB, 0x9F, 0x40, 0x95, 0x6D, 0x31, 0x54, /* 0x2d8 */ 0xFC, 0x42, 0xD3, 0xC7, 0x46, 0x1F, 0x23, 0xAD, /* 0x2e0 */ 0xD9, 0x0F, 0x48, 0x70, 0x9A, 0xD9, 0x75, 0x78, /* 0x2e8 */ 0x71, 0xD1, 0x72, 0x43, 0x34, 0x75, 0x6E, 0x57, /* 0x2f0 */ 0x59, 0xC2, 0x02, 0x5C, 0x26, 0x60, 0x29, 0xCF, /* 0x2f8 */ 0x23, 0x19, 0x16, 0x8E, 0x88, 0x43, 0xA5, 0xD4, /* 0x300 */ 0xE4, 0xCB, 0x08, 0xFB, 0x23, 0x11, 0x43, 0xE8, /* 0x308 */ 0x43, 0x29, 0x72, 0x62, 0xA1, 0xA9, 0x5D, 0x5E, /* 0x310 */ 0x08, 0xD4, 0x90, 0xAE, 0xB8, 0xD8, 0xCE, 0x14, /* 0x318 */ 0xC2, 0xD0, 0x55, 0xF2, 0x86, 0xF6, 0xC4, 0x93, /* 0x320 */ 0x43, 0x77, 0x66, 0x61, 0xC0, 0xB9, 0xE8, 0x41, /* 0x328 */ 0xD7, 0x97, 0x78, 0x60, 0x03, 0x6E, 0x4A, 0x72, /* 0x330 */ 0xAE, 0xA5, 0xD1, 0x7D, 0xBA, 0x10, 0x9E, 0x86, /* 0x338 */ 0x6C, 0x1B, 0x8A, 0xB9, 0x59, 0x33, 0xF8, 0xEB, /* 0x340 */ 0xC4, 0x90, 0xBE, 0xF1, 0xB9, }; static const lws_ss_x509_t _ss_x509_amazon_root_ca_1 = { .vhost_name = "amazon_root_ca_1", .ca_der = _ss_der_amazon_root_ca_1, .ca_der_len = 837, }; static const uint8_t _ss_der_starfield_class_2_ca[] = { /* 0x 0 */ 0x30, 0x82, 0x04, 0x0F, 0x30, 0x82, 0x02, 0xF7, /* 0x 8 */ 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x00, /* 0x 10 */ 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, /* 0x 18 */ 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, /* 0x 20 */ 0x68, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, /* 0x 28 */ 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x25, /* 0x 30 */ 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, /* 0x 38 */ 0x1C, 0x53, 0x74, 0x61, 0x72, 0x66, 0x69, 0x65, /* 0x 40 */ 0x6C, 0x64, 0x20, 0x54, 0x65, 0x63, 0x68, 0x6E, /* 0x 48 */ 0x6F, 0x6C, 0x6F, 0x67, 0x69, 0x65, 0x73, 0x2C, /* 0x 50 */ 0x20, 0x49, 0x6E, 0x63, 0x2E, 0x31, 0x32, 0x30, /* 0x 58 */ 0x30, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x29, /* 0x 60 */ 0x53, 0x74, 0x61, 0x72, 0x66, 0x69, 0x65, 0x6C, /* 0x 68 */ 0x64, 0x20, 0x43, 0x6C, 0x61, 0x73, 0x73, 0x20, /* 0x 70 */ 0x32, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, /* 0x 78 */ 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, /* 0x 80 */ 0x41, 0x75, 0x74, 0x68, 0x6F, 0x72, 0x69, 0x74, /* 0x 88 */ 0x79, 0x30, 0x1E, 0x17, 0x0D, 0x30, 0x34, 0x30, /* 0x 90 */ 0x36, 0x32, 0x39, 0x31, 0x37, 0x33, 0x39, 0x31, /* 0x 98 */ 0x36, 0x5A, 0x17, 0x0D, 0x33, 0x34, 0x30, 0x36, /* 0x a0 */ 0x32, 0x39, 0x31, 0x37, 0x33, 0x39, 0x31, 0x36, /* 0x a8 */ 0x5A, 0x30, 0x68, 0x31, 0x0B, 0x30, 0x09, 0x06, /* 0x b0 */ 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, /* 0x b8 */ 0x31, 0x25, 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, /* 0x c0 */ 0x0A, 0x13, 0x1C, 0x53, 0x74, 0x61, 0x72, 0x66, /* 0x c8 */ 0x69, 0x65, 0x6C, 0x64, 0x20, 0x54, 0x65, 0x63, /* 0x d0 */ 0x68, 0x6E, 0x6F, 0x6C, 0x6F, 0x67, 0x69, 0x65, /* 0x d8 */ 0x73, 0x2C, 0x20, 0x49, 0x6E, 0x63, 0x2E, 0x31, /* 0x e0 */ 0x32, 0x30, 0x30, 0x06, 0x03, 0x55, 0x04, 0x0B, /* 0x e8 */ 0x13, 0x29, 0x53, 0x74, 0x61, 0x72, 0x66, 0x69, /* 0x f0 */ 0x65, 0x6C, 0x64, 0x20, 0x43, 0x6C, 0x61, 0x73, /* 0x f8 */ 0x73, 0x20, 0x32, 0x20, 0x43, 0x65, 0x72, 0x74, /* 0x100 */ 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, /* 0x108 */ 0x6E, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6F, 0x72, /* 0x110 */ 0x69, 0x74, 0x79, 0x30, 0x82, 0x01, 0x20, 0x30, /* 0x118 */ 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, /* 0x120 */ 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, /* 0x128 */ 0x01, 0x0D, 0x00, 0x30, 0x82, 0x01, 0x08, 0x02, /* 0x130 */ 0x82, 0x01, 0x01, 0x00, 0xB7, 0x32, 0xC8, 0xFE, /* 0x138 */ 0xE9, 0x71, 0xA6, 0x04, 0x85, 0xAD, 0x0C, 0x11, /* 0x140 */ 0x64, 0xDF, 0xCE, 0x4D, 0xEF, 0xC8, 0x03, 0x18, /* 0x148 */ 0x87, 0x3F, 0xA1, 0xAB, 0xFB, 0x3C, 0xA6, 0x9F, /* 0x150 */ 0xF0, 0xC3, 0xA1, 0xDA, 0xD4, 0xD8, 0x6E, 0x2B, /* 0x158 */ 0x53, 0x90, 0xFB, 0x24, 0xA4, 0x3E, 0x84, 0xF0, /* 0x160 */ 0x9E, 0xE8, 0x5F, 0xEC, 0xE5, 0x27, 0x44, 0xF5, /* 0x168 */ 0x28, 0xA6, 0x3F, 0x7B, 0xDE, 0xE0, 0x2A, 0xF0, /* 0x170 */ 0xC8, 0xAF, 0x53, 0x2F, 0x9E, 0xCA, 0x05, 0x01, /* 0x178 */ 0x93, 0x1E, 0x8F, 0x66, 0x1C, 0x39, 0xA7, 0x4D, /* 0x180 */ 0xFA, 0x5A, 0xB6, 0x73, 0x04, 0x25, 0x66, 0xEB, /* 0x188 */ 0x77, 0x7F, 0xE7, 0x59, 0xC6, 0x4A, 0x99, 0x25, /* 0x190 */ 0x14, 0x54, 0xEB, 0x26, 0xC7, 0xF3, 0x7F, 0x19, /* 0x198 */ 0xD5, 0x30, 0x70, 0x8F, 0xAF, 0xB0, 0x46, 0x2A, /* 0x1a0 */ 0xFF, 0xAD, 0xEB, 0x29, 0xED, 0xD7, 0x9F, 0xAA, /* 0x1a8 */ 0x04, 0x87, 0xA3, 0xD4, 0xF9, 0x89, 0xA5, 0x34, /* 0x1b0 */ 0x5F, 0xDB, 0x43, 0x91, 0x82, 0x36, 0xD9, 0x66, /* 0x1b8 */ 0x3C, 0xB1, 0xB8, 0xB9, 0x82, 0xFD, 0x9C, 0x3A, /* 0x1c0 */ 0x3E, 0x10, 0xC8, 0x3B, 0xEF, 0x06, 0x65, 0x66, /* 0x1c8 */ 0x7A, 0x9B, 0x19, 0x18, 0x3D, 0xFF, 0x71, 0x51, /* 0x1d0 */ 0x3C, 0x30, 0x2E, 0x5F, 0xBE, 0x3D, 0x77, 0x73, /* 0x1d8 */ 0xB2, 0x5D, 0x06, 0x6C, 0xC3, 0x23, 0x56, 0x9A, /* 0x1e0 */ 0x2B, 0x85, 0x26, 0x92, 0x1C, 0xA7, 0x02, 0xB3, /* 0x1e8 */ 0xE4, 0x3F, 0x0D, 0xAF, 0x08, 0x79, 0x82, 0xB8, /* 0x1f0 */ 0x36, 0x3D, 0xEA, 0x9C, 0xD3, 0x35, 0xB3, 0xBC, /* 0x1f8 */ 0x69, 0xCA, 0xF5, 0xCC, 0x9D, 0xE8, 0xFD, 0x64, /* 0x200 */ 0x8D, 0x17, 0x80, 0x33, 0x6E, 0x5E, 0x4A, 0x5D, /* 0x208 */ 0x99, 0xC9, 0x1E, 0x87, 0xB4, 0x9D, 0x1A, 0xC0, /* 0x210 */ 0xD5, 0x6E, 0x13, 0x35, 0x23, 0x5E, 0xDF, 0x9B, /* 0x218 */ 0x5F, 0x3D, 0xEF, 0xD6, 0xF7, 0x76, 0xC2, 0xEA, /* 0x220 */ 0x3E, 0xBB, 0x78, 0x0D, 0x1C, 0x42, 0x67, 0x6B, /* 0x228 */ 0x04, 0xD8, 0xF8, 0xD6, 0xDA, 0x6F, 0x8B, 0xF2, /* 0x230 */ 0x44, 0xA0, 0x01, 0xAB, 0x02, 0x01, 0x03, 0xA3, /* 0x238 */ 0x81, 0xC5, 0x30, 0x81, 0xC2, 0x30, 0x1D, 0x06, /* 0x240 */ 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, /* 0x248 */ 0xBF, 0x5F, 0xB7, 0xD1, 0xCE, 0xDD, 0x1F, 0x86, /* 0x250 */ 0xF4, 0x5B, 0x55, 0xAC, 0xDC, 0xD7, 0x10, 0xC2, /* 0x258 */ 0x0E, 0xA9, 0x88, 0xE7, 0x30, 0x81, 0x92, 0x06, /* 0x260 */ 0x03, 0x55, 0x1D, 0x23, 0x04, 0x81, 0x8A, 0x30, /* 0x268 */ 0x81, 0x87, 0x80, 0x14, 0xBF, 0x5F, 0xB7, 0xD1, /* 0x270 */ 0xCE, 0xDD, 0x1F, 0x86, 0xF4, 0x5B, 0x55, 0xAC, /* 0x278 */ 0xDC, 0xD7, 0x10, 0xC2, 0x0E, 0xA9, 0x88, 0xE7, /* 0x280 */ 0xA1, 0x6C, 0xA4, 0x6A, 0x30, 0x68, 0x31, 0x0B, /* 0x288 */ 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, /* 0x290 */ 0x02, 0x55, 0x53, 0x31, 0x25, 0x30, 0x23, 0x06, /* 0x298 */ 0x03, 0x55, 0x04, 0x0A, 0x13, 0x1C, 0x53, 0x74, /* 0x2a0 */ 0x61, 0x72, 0x66, 0x69, 0x65, 0x6C, 0x64, 0x20, /* 0x2a8 */ 0x54, 0x65, 0x63, 0x68, 0x6E, 0x6F, 0x6C, 0x6F, /* 0x2b0 */ 0x67, 0x69, 0x65, 0x73, 0x2C, 0x20, 0x49, 0x6E, /* 0x2b8 */ 0x63, 0x2E, 0x31, 0x32, 0x30, 0x30, 0x06, 0x03, /* 0x2c0 */ 0x55, 0x04, 0x0B, 0x13, 0x29, 0x53, 0x74, 0x61, /* 0x2c8 */ 0x72, 0x66, 0x69, 0x65, 0x6C, 0x64, 0x20, 0x43, /* 0x2d0 */ 0x6C, 0x61, 0x73, 0x73, 0x20, 0x32, 0x20, 0x43, /* 0x2d8 */ 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, /* 0x2e0 */ 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x41, 0x75, 0x74, /* 0x2e8 */ 0x68, 0x6F, 0x72, 0x69, 0x74, 0x79, 0x82, 0x01, /* 0x2f0 */ 0x00, 0x30, 0x0C, 0x06, 0x03, 0x55, 0x1D, 0x13, /* 0x2f8 */ 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xFF, 0x30, /* 0x300 */ 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, /* 0x308 */ 0x0D, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, /* 0x310 */ 0x01, 0x01, 0x00, 0x05, 0x9D, 0x3F, 0x88, 0x9D, /* 0x318 */ 0xD1, 0xC9, 0x1A, 0x55, 0xA1, 0xAC, 0x69, 0xF3, /* 0x320 */ 0xF3, 0x59, 0xDA, 0x9B, 0x01, 0x87, 0x1A, 0x4F, /* 0x328 */ 0x57, 0xA9, 0xA1, 0x79, 0x09, 0x2A, 0xDB, 0xF7, /* 0x330 */ 0x2F, 0xB2, 0x1E, 0xCC, 0xC7, 0x5E, 0x6A, 0xD8, /* 0x338 */ 0x83, 0x87, 0xA1, 0x97, 0xEF, 0x49, 0x35, 0x3E, /* 0x340 */ 0x77, 0x06, 0x41, 0x58, 0x62, 0xBF, 0x8E, 0x58, /* 0x348 */ 0xB8, 0x0A, 0x67, 0x3F, 0xEC, 0xB3, 0xDD, 0x21, /* 0x350 */ 0x66, 0x1F, 0xC9, 0x54, 0xFA, 0x72, 0xCC, 0x3D, /* 0x358 */ 0x4C, 0x40, 0xD8, 0x81, 0xAF, 0x77, 0x9E, 0x83, /* 0x360 */ 0x7A, 0xBB, 0xA2, 0xC7, 0xF5, 0x34, 0x17, 0x8E, /* 0x368 */ 0xD9, 0x11, 0x40, 0xF4, 0xFC, 0x2C, 0x2A, 0x4D, /* 0x370 */ 0x15, 0x7F, 0xA7, 0x62, 0x5D, 0x2E, 0x25, 0xD3, /* 0x378 */ 0x00, 0x0B, 0x20, 0x1A, 0x1D, 0x68, 0xF9, 0x17, /* 0x380 */ 0xB8, 0xF4, 0xBD, 0x8B, 0xED, 0x28, 0x59, 0xDD, /* 0x388 */ 0x4D, 0x16, 0x8B, 0x17, 0x83, 0xC8, 0xB2, 0x65, /* 0x390 */ 0xC7, 0x2D, 0x7A, 0xA5, 0xAA, 0xBC, 0x53, 0x86, /* 0x398 */ 0x6D, 0xDD, 0x57, 0xA4, 0xCA, 0xF8, 0x20, 0x41, /* 0x3a0 */ 0x0B, 0x68, 0xF0, 0xF4, 0xFB, 0x74, 0xBE, 0x56, /* 0x3a8 */ 0x5D, 0x7A, 0x79, 0xF5, 0xF9, 0x1D, 0x85, 0xE3, /* 0x3b0 */ 0x2D, 0x95, 0xBE, 0xF5, 0x71, 0x90, 0x43, 0xCC, /* 0x3b8 */ 0x8D, 0x1F, 0x9A, 0x00, 0x0A, 0x87, 0x29, 0xE9, /* 0x3c0 */ 0x55, 0x22, 0x58, 0x00, 0x23, 0xEA, 0xE3, 0x12, /* 0x3c8 */ 0x43, 0x29, 0x5B, 0x47, 0x08, 0xDD, 0x8C, 0x41, /* 0x3d0 */ 0x6A, 0x65, 0x06, 0xA8, 0xE5, 0x21, 0xAA, 0x41, /* 0x3d8 */ 0xB4, 0x95, 0x21, 0x95, 0xB9, 0x7D, 0xD1, 0x34, /* 0x3e0 */ 0xAB, 0x13, 0xD6, 0xAD, 0xBC, 0xDC, 0xE2, 0x3D, /* 0x3e8 */ 0x39, 0xCD, 0xBD, 0x3E, 0x75, 0x70, 0xA1, 0x18, /* 0x3f0 */ 0x59, 0x03, 0xC9, 0x22, 0xB4, 0x8F, 0x9C, 0xD5, /* 0x3f8 */ 0x5E, 0x2A, 0xD7, 0xA5, 0xB6, 0xD4, 0x0A, 0x6D, /* 0x400 */ 0xF8, 0xB7, 0x40, 0x11, 0x46, 0x9A, 0x1F, 0x79, /* 0x408 */ 0x0E, 0x62, 0xBF, 0x0F, 0x97, 0xEC, 0xE0, 0x2F, /* 0x410 */ 0x1F, 0x17, 0x94, }; static const lws_ss_x509_t _ss_x509_starfield_class_2_ca = { .vhost_name = "starfield_class_2_ca", .ca_der = _ss_der_starfield_class_2_ca, .ca_der_len = 1043, }; static const uint8_t _ss_der_starfield_services_root_ca[] = { /* 0x 0 */ 0x30, 0x82, 0x03, 0xEF, 0x30, 0x82, 0x02, 0xD7, /* 0x 8 */ 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x00, /* 0x 10 */ 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, /* 0x 18 */ 0xF7, 0x0D, 0x01, 0x01, 0x0B, 0x05, 0x00, 0x30, /* 0x 20 */ 0x81, 0x98, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, /* 0x 28 */ 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, /* 0x 30 */ 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x04, 0x08, /* 0x 38 */ 0x13, 0x07, 0x41, 0x72, 0x69, 0x7A, 0x6F, 0x6E, /* 0x 40 */ 0x61, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, /* 0x 48 */ 0x04, 0x07, 0x13, 0x0A, 0x53, 0x63, 0x6F, 0x74, /* 0x 50 */ 0x74, 0x73, 0x64, 0x61, 0x6C, 0x65, 0x31, 0x25, /* 0x 58 */ 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, /* 0x 60 */ 0x1C, 0x53, 0x74, 0x61, 0x72, 0x66, 0x69, 0x65, /* 0x 68 */ 0x6C, 0x64, 0x20, 0x54, 0x65, 0x63, 0x68, 0x6E, /* 0x 70 */ 0x6F, 0x6C, 0x6F, 0x67, 0x69, 0x65, 0x73, 0x2C, /* 0x 78 */ 0x20, 0x49, 0x6E, 0x63, 0x2E, 0x31, 0x3B, 0x30, /* 0x 80 */ 0x39, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x32, /* 0x 88 */ 0x53, 0x74, 0x61, 0x72, 0x66, 0x69, 0x65, 0x6C, /* 0x 90 */ 0x64, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, /* 0x 98 */ 0x65, 0x73, 0x20, 0x52, 0x6F, 0x6F, 0x74, 0x20, /* 0x a0 */ 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, /* 0x a8 */ 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, /* 0x b0 */ 0x6F, 0x72, 0x69, 0x74, 0x79, 0x20, 0x2D, 0x20, /* 0x b8 */ 0x47, 0x32, 0x30, 0x1E, 0x17, 0x0D, 0x30, 0x39, /* 0x c0 */ 0x30, 0x39, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, /* 0x c8 */ 0x30, 0x30, 0x5A, 0x17, 0x0D, 0x33, 0x37, 0x31, /* 0x d0 */ 0x32, 0x33, 0x31, 0x32, 0x33, 0x35, 0x39, 0x35, /* 0x d8 */ 0x39, 0x5A, 0x30, 0x81, 0x98, 0x31, 0x0B, 0x30, /* 0x e0 */ 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, /* 0x e8 */ 0x55, 0x53, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, /* 0x f0 */ 0x55, 0x04, 0x08, 0x13, 0x07, 0x41, 0x72, 0x69, /* 0x f8 */ 0x7A, 0x6F, 0x6E, 0x61, 0x31, 0x13, 0x30, 0x11, /* 0x100 */ 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x0A, 0x53, /* 0x108 */ 0x63, 0x6F, 0x74, 0x74, 0x73, 0x64, 0x61, 0x6C, /* 0x110 */ 0x65, 0x31, 0x25, 0x30, 0x23, 0x06, 0x03, 0x55, /* 0x118 */ 0x04, 0x0A, 0x13, 0x1C, 0x53, 0x74, 0x61, 0x72, /* 0x120 */ 0x66, 0x69, 0x65, 0x6C, 0x64, 0x20, 0x54, 0x65, /* 0x128 */ 0x63, 0x68, 0x6E, 0x6F, 0x6C, 0x6F, 0x67, 0x69, /* 0x130 */ 0x65, 0x73, 0x2C, 0x20, 0x49, 0x6E, 0x63, 0x2E, /* 0x138 */ 0x31, 0x3B, 0x30, 0x39, 0x06, 0x03, 0x55, 0x04, /* 0x140 */ 0x03, 0x13, 0x32, 0x53, 0x74, 0x61, 0x72, 0x66, /* 0x148 */ 0x69, 0x65, 0x6C, 0x64, 0x20, 0x53, 0x65, 0x72, /* 0x150 */ 0x76, 0x69, 0x63, 0x65, 0x73, 0x20, 0x52, 0x6F, /* 0x158 */ 0x6F, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, /* 0x160 */ 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, /* 0x168 */ 0x75, 0x74, 0x68, 0x6F, 0x72, 0x69, 0x74, 0x79, /* 0x170 */ 0x20, 0x2D, 0x20, 0x47, 0x32, 0x30, 0x82, 0x01, /* 0x178 */ 0x22, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, /* 0x180 */ 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, /* 0x188 */ 0x03, 0x82, 0x01, 0x0F, 0x00, 0x30, 0x82, 0x01, /* 0x190 */ 0x0A, 0x02, 0x82, 0x01, 0x01, 0x00, 0xD5, 0x0C, /* 0x198 */ 0x3A, 0xC4, 0x2A, 0xF9, 0x4E, 0xE2, 0xF5, 0xBE, /* 0x1a0 */ 0x19, 0x97, 0x5F, 0x8E, 0x88, 0x53, 0xB1, 0x1F, /* 0x1a8 */ 0x3F, 0xCB, 0xCF, 0x9F, 0x20, 0x13, 0x6D, 0x29, /* 0x1b0 */ 0x3A, 0xC8, 0x0F, 0x7D, 0x3C, 0xF7, 0x6B, 0x76, /* 0x1b8 */ 0x38, 0x63, 0xD9, 0x36, 0x60, 0xA8, 0x9B, 0x5E, /* 0x1c0 */ 0x5C, 0x00, 0x80, 0xB2, 0x2F, 0x59, 0x7F, 0xF6, /* 0x1c8 */ 0x87, 0xF9, 0x25, 0x43, 0x86, 0xE7, 0x69, 0x1B, /* 0x1d0 */ 0x52, 0x9A, 0x90, 0xE1, 0x71, 0xE3, 0xD8, 0x2D, /* 0x1d8 */ 0x0D, 0x4E, 0x6F, 0xF6, 0xC8, 0x49, 0xD9, 0xB6, /* 0x1e0 */ 0xF3, 0x1A, 0x56, 0xAE, 0x2B, 0xB6, 0x74, 0x14, /* 0x1e8 */ 0xEB, 0xCF, 0xFB, 0x26, 0xE3, 0x1A, 0xBA, 0x1D, /* 0x1f0 */ 0x96, 0x2E, 0x6A, 0x3B, 0x58, 0x94, 0x89, 0x47, /* 0x1f8 */ 0x56, 0xFF, 0x25, 0xA0, 0x93, 0x70, 0x53, 0x83, /* 0x200 */ 0xDA, 0x84, 0x74, 0x14, 0xC3, 0x67, 0x9E, 0x04, /* 0x208 */ 0x68, 0x3A, 0xDF, 0x8E, 0x40, 0x5A, 0x1D, 0x4A, /* 0x210 */ 0x4E, 0xCF, 0x43, 0x91, 0x3B, 0xE7, 0x56, 0xD6, /* 0x218 */ 0x00, 0x70, 0xCB, 0x52, 0xEE, 0x7B, 0x7D, 0xAE, /* 0x220 */ 0x3A, 0xE7, 0xBC, 0x31, 0xF9, 0x45, 0xF6, 0xC2, /* 0x228 */ 0x60, 0xCF, 0x13, 0x59, 0x02, 0x2B, 0x80, 0xCC, /* 0x230 */ 0x34, 0x47, 0xDF, 0xB9, 0xDE, 0x90, 0x65, 0x6D, /* 0x238 */ 0x02, 0xCF, 0x2C, 0x91, 0xA6, 0xA6, 0xE7, 0xDE, /* 0x240 */ 0x85, 0x18, 0x49, 0x7C, 0x66, 0x4E, 0xA3, 0x3A, /* 0x248 */ 0x6D, 0xA9, 0xB5, 0xEE, 0x34, 0x2E, 0xBA, 0x0D, /* 0x250 */ 0x03, 0xB8, 0x33, 0xDF, 0x47, 0xEB, 0xB1, 0x6B, /* 0x258 */ 0x8D, 0x25, 0xD9, 0x9B, 0xCE, 0x81, 0xD1, 0x45, /* 0x260 */ 0x46, 0x32, 0x96, 0x70, 0x87, 0xDE, 0x02, 0x0E, /* 0x268 */ 0x49, 0x43, 0x85, 0xB6, 0x6C, 0x73, 0xBB, 0x64, /* 0x270 */ 0xEA, 0x61, 0x41, 0xAC, 0xC9, 0xD4, 0x54, 0xDF, /* 0x278 */ 0x87, 0x2F, 0xC7, 0x22, 0xB2, 0x26, 0xCC, 0x9F, /* 0x280 */ 0x59, 0x54, 0x68, 0x9F, 0xFC, 0xBE, 0x2A, 0x2F, /* 0x288 */ 0xC4, 0x55, 0x1C, 0x75, 0x40, 0x60, 0x17, 0x85, /* 0x290 */ 0x02, 0x55, 0x39, 0x8B, 0x7F, 0x05, 0x02, 0x03, /* 0x298 */ 0x01, 0x00, 0x01, 0xA3, 0x42, 0x30, 0x40, 0x30, /* 0x2a0 */ 0x0F, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, /* 0x2a8 */ 0xFF, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xFF, /* 0x2b0 */ 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, /* 0x2b8 */ 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, /* 0x2c0 */ 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, /* 0x2c8 */ 0x16, 0x04, 0x14, 0x9C, 0x5F, 0x00, 0xDF, 0xAA, /* 0x2d0 */ 0x01, 0xD7, 0x30, 0x2B, 0x38, 0x88, 0xA2, 0xB8, /* 0x2d8 */ 0x6D, 0x4A, 0x9C, 0xF2, 0x11, 0x91, 0x83, 0x30, /* 0x2e0 */ 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, /* 0x2e8 */ 0x0D, 0x01, 0x01, 0x0B, 0x05, 0x00, 0x03, 0x82, /* 0x2f0 */ 0x01, 0x01, 0x00, 0x4B, 0x36, 0xA6, 0x84, 0x77, /* 0x2f8 */ 0x69, 0xDD, 0x3B, 0x19, 0x9F, 0x67, 0x23, 0x08, /* 0x300 */ 0x6F, 0x0E, 0x61, 0xC9, 0xFD, 0x84, 0xDC, 0x5F, /* 0x308 */ 0xD8, 0x36, 0x81, 0xCD, 0xD8, 0x1B, 0x41, 0x2D, /* 0x310 */ 0x9F, 0x60, 0xDD, 0xC7, 0x1A, 0x68, 0xD9, 0xD1, /* 0x318 */ 0x6E, 0x86, 0xE1, 0x88, 0x23, 0xCF, 0x13, 0xDE, /* 0x320 */ 0x43, 0xCF, 0xE2, 0x34, 0xB3, 0x04, 0x9D, 0x1F, /* 0x328 */ 0x29, 0xD5, 0xBF, 0xF8, 0x5E, 0xC8, 0xD5, 0xC1, /* 0x330 */ 0xBD, 0xEE, 0x92, 0x6F, 0x32, 0x74, 0xF2, 0x91, /* 0x338 */ 0x82, 0x2F, 0xBD, 0x82, 0x42, 0x7A, 0xAD, 0x2A, /* 0x340 */ 0xB7, 0x20, 0x7D, 0x4D, 0xBC, 0x7A, 0x55, 0x12, /* 0x348 */ 0xC2, 0x15, 0xEA, 0xBD, 0xF7, 0x6A, 0x95, 0x2E, /* 0x350 */ 0x6C, 0x74, 0x9F, 0xCF, 0x1C, 0xB4, 0xF2, 0xC5, /* 0x358 */ 0x01, 0xA3, 0x85, 0xD0, 0x72, 0x3E, 0xAD, 0x73, /* 0x360 */ 0xAB, 0x0B, 0x9B, 0x75, 0x0C, 0x6D, 0x45, 0xB7, /* 0x368 */ 0x8E, 0x94, 0xAC, 0x96, 0x37, 0xB5, 0xA0, 0xD0, /* 0x370 */ 0x8F, 0x15, 0x47, 0x0E, 0xE3, 0xE8, 0x83, 0xDD, /* 0x378 */ 0x8F, 0xFD, 0xEF, 0x41, 0x01, 0x77, 0xCC, 0x27, /* 0x380 */ 0xA9, 0x62, 0x85, 0x33, 0xF2, 0x37, 0x08, 0xEF, /* 0x388 */ 0x71, 0xCF, 0x77, 0x06, 0xDE, 0xC8, 0x19, 0x1D, /* 0x390 */ 0x88, 0x40, 0xCF, 0x7D, 0x46, 0x1D, 0xFF, 0x1E, /* 0x398 */ 0xC7, 0xE1, 0xCE, 0xFF, 0x23, 0xDB, 0xC6, 0xFA, /* 0x3a0 */ 0x8D, 0x55, 0x4E, 0xA9, 0x02, 0xE7, 0x47, 0x11, /* 0x3a8 */ 0x46, 0x3E, 0xF4, 0xFD, 0xBD, 0x7B, 0x29, 0x26, /* 0x3b0 */ 0xBB, 0xA9, 0x61, 0x62, 0x37, 0x28, 0xB6, 0x2D, /* 0x3b8 */ 0x2A, 0xF6, 0x10, 0x86, 0x64, 0xC9, 0x70, 0xA7, /* 0x3c0 */ 0xD2, 0xAD, 0xB7, 0x29, 0x70, 0x79, 0xEA, 0x3C, /* 0x3c8 */ 0xDA, 0x63, 0x25, 0x9F, 0xFD, 0x68, 0xB7, 0x30, /* 0x3d0 */ 0xEC, 0x70, 0xFB, 0x75, 0x8A, 0xB7, 0x6D, 0x60, /* 0x3d8 */ 0x67, 0xB2, 0x1E, 0xC8, 0xB9, 0xE9, 0xD8, 0xA8, /* 0x3e0 */ 0x6F, 0x02, 0x8B, 0x67, 0x0D, 0x4D, 0x26, 0x57, /* 0x3e8 */ 0x71, 0xDA, 0x20, 0xFC, 0xC1, 0x4A, 0x50, 0x8D, /* 0x3f0 */ 0xB1, 0x28, 0xBA, }; static const lws_ss_x509_t _ss_x509_starfield_services_root_ca = { .vhost_name = "starfield_services_root_ca", .ca_der = _ss_der_starfield_services_root_ca, .ca_der_len = 1011, }; static const lws_ss_trust_store_t _ss_ts_mqtt_amz_iot = { .name = "mqtt_amz_iot", .ssx509 = { &_ss_x509_starfield_services_root_ca, &_ss_x509_starfield_class_2_ca, &_ss_x509_amazon_root_ca_1, } }; static const uint8_t _ss_der_isrg_root_x1[] = { /* 0x 0 */ 0x30, 0x82, 0x05, 0x6B, 0x30, 0x82, 0x03, 0x53, /* 0x 8 */ 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x11, 0x00, /* 0x 10 */ 0x82, 0x10, 0xCF, 0xB0, 0xD2, 0x40, 0xE3, 0x59, /* 0x 18 */ 0x44, 0x63, 0xE0, 0xBB, 0x63, 0x82, 0x8B, 0x00, /* 0x 20 */ 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, /* 0x 28 */ 0xF7, 0x0D, 0x01, 0x01, 0x0B, 0x05, 0x00, 0x30, /* 0x 30 */ 0x4F, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, /* 0x 38 */ 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x29, /* 0x 40 */ 0x30, 0x27, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, /* 0x 48 */ 0x20, 0x49, 0x6E, 0x74, 0x65, 0x72, 0x6E, 0x65, /* 0x 50 */ 0x74, 0x20, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, /* 0x 58 */ 0x74, 0x79, 0x20, 0x52, 0x65, 0x73, 0x65, 0x61, /* 0x 60 */ 0x72, 0x63, 0x68, 0x20, 0x47, 0x72, 0x6F, 0x75, /* 0x 68 */ 0x70, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, /* 0x 70 */ 0x04, 0x03, 0x13, 0x0C, 0x49, 0x53, 0x52, 0x47, /* 0x 78 */ 0x20, 0x52, 0x6F, 0x6F, 0x74, 0x20, 0x58, 0x31, /* 0x 80 */ 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x35, 0x30, 0x36, /* 0x 88 */ 0x30, 0x34, 0x31, 0x31, 0x30, 0x34, 0x33, 0x38, /* 0x 90 */ 0x5A, 0x17, 0x0D, 0x33, 0x35, 0x30, 0x36, 0x30, /* 0x 98 */ 0x34, 0x31, 0x31, 0x30, 0x34, 0x33, 0x38, 0x5A, /* 0x a0 */ 0x30, 0x4F, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, /* 0x a8 */ 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, /* 0x b0 */ 0x29, 0x30, 0x27, 0x06, 0x03, 0x55, 0x04, 0x0A, /* 0x b8 */ 0x13, 0x20, 0x49, 0x6E, 0x74, 0x65, 0x72, 0x6E, /* 0x c0 */ 0x65, 0x74, 0x20, 0x53, 0x65, 0x63, 0x75, 0x72, /* 0x c8 */ 0x69, 0x74, 0x79, 0x20, 0x52, 0x65, 0x73, 0x65, /* 0x d0 */ 0x61, 0x72, 0x63, 0x68, 0x20, 0x47, 0x72, 0x6F, /* 0x d8 */ 0x75, 0x70, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, /* 0x e0 */ 0x55, 0x04, 0x03, 0x13, 0x0C, 0x49, 0x53, 0x52, /* 0x e8 */ 0x47, 0x20, 0x52, 0x6F, 0x6F, 0x74, 0x20, 0x58, /* 0x f0 */ 0x31, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0D, 0x06, /* 0x f8 */ 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, /* 0x100 */ 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0F, /* 0x108 */ 0x00, 0x30, 0x82, 0x02, 0x0A, 0x02, 0x82, 0x02, /* 0x110 */ 0x01, 0x00, 0xAD, 0xE8, 0x24, 0x73, 0xF4, 0x14, /* 0x118 */ 0x37, 0xF3, 0x9B, 0x9E, 0x2B, 0x57, 0x28, 0x1C, /* 0x120 */ 0x87, 0xBE, 0xDC, 0xB7, 0xDF, 0x38, 0x90, 0x8C, /* 0x128 */ 0x6E, 0x3C, 0xE6, 0x57, 0xA0, 0x78, 0xF7, 0x75, /* 0x130 */ 0xC2, 0xA2, 0xFE, 0xF5, 0x6A, 0x6E, 0xF6, 0x00, /* 0x138 */ 0x4F, 0x28, 0xDB, 0xDE, 0x68, 0x86, 0x6C, 0x44, /* 0x140 */ 0x93, 0xB6, 0xB1, 0x63, 0xFD, 0x14, 0x12, 0x6B, /* 0x148 */ 0xBF, 0x1F, 0xD2, 0xEA, 0x31, 0x9B, 0x21, 0x7E, /* 0x150 */ 0xD1, 0x33, 0x3C, 0xBA, 0x48, 0xF5, 0xDD, 0x79, /* 0x158 */ 0xDF, 0xB3, 0xB8, 0xFF, 0x12, 0xF1, 0x21, 0x9A, /* 0x160 */ 0x4B, 0xC1, 0x8A, 0x86, 0x71, 0x69, 0x4A, 0x66, /* 0x168 */ 0x66, 0x6C, 0x8F, 0x7E, 0x3C, 0x70, 0xBF, 0xAD, /* 0x170 */ 0x29, 0x22, 0x06, 0xF3, 0xE4, 0xC0, 0xE6, 0x80, /* 0x178 */ 0xAE, 0xE2, 0x4B, 0x8F, 0xB7, 0x99, 0x7E, 0x94, /* 0x180 */ 0x03, 0x9F, 0xD3, 0x47, 0x97, 0x7C, 0x99, 0x48, /* 0x188 */ 0x23, 0x53, 0xE8, 0x38, 0xAE, 0x4F, 0x0A, 0x6F, /* 0x190 */ 0x83, 0x2E, 0xD1, 0x49, 0x57, 0x8C, 0x80, 0x74, /* 0x198 */ 0xB6, 0xDA, 0x2F, 0xD0, 0x38, 0x8D, 0x7B, 0x03, /* 0x1a0 */ 0x70, 0x21, 0x1B, 0x75, 0xF2, 0x30, 0x3C, 0xFA, /* 0x1a8 */ 0x8F, 0xAE, 0xDD, 0xDA, 0x63, 0xAB, 0xEB, 0x16, /* 0x1b0 */ 0x4F, 0xC2, 0x8E, 0x11, 0x4B, 0x7E, 0xCF, 0x0B, /* 0x1b8 */ 0xE8, 0xFF, 0xB5, 0x77, 0x2E, 0xF4, 0xB2, 0x7B, /* 0x1c0 */ 0x4A, 0xE0, 0x4C, 0x12, 0x25, 0x0C, 0x70, 0x8D, /* 0x1c8 */ 0x03, 0x29, 0xA0, 0xE1, 0x53, 0x24, 0xEC, 0x13, /* 0x1d0 */ 0xD9, 0xEE, 0x19, 0xBF, 0x10, 0xB3, 0x4A, 0x8C, /* 0x1d8 */ 0x3F, 0x89, 0xA3, 0x61, 0x51, 0xDE, 0xAC, 0x87, /* 0x1e0 */ 0x07, 0x94, 0xF4, 0x63, 0x71, 0xEC, 0x2E, 0xE2, /* 0x1e8 */ 0x6F, 0x5B, 0x98, 0x81, 0xE1, 0x89, 0x5C, 0x34, /* 0x1f0 */ 0x79, 0x6C, 0x76, 0xEF, 0x3B, 0x90, 0x62, 0x79, /* 0x1f8 */ 0xE6, 0xDB, 0xA4, 0x9A, 0x2F, 0x26, 0xC5, 0xD0, /* 0x200 */ 0x10, 0xE1, 0x0E, 0xDE, 0xD9, 0x10, 0x8E, 0x16, /* 0x208 */ 0xFB, 0xB7, 0xF7, 0xA8, 0xF7, 0xC7, 0xE5, 0x02, /* 0x210 */ 0x07, 0x98, 0x8F, 0x36, 0x08, 0x95, 0xE7, 0xE2, /* 0x218 */ 0x37, 0x96, 0x0D, 0x36, 0x75, 0x9E, 0xFB, 0x0E, /* 0x220 */ 0x72, 0xB1, 0x1D, 0x9B, 0xBC, 0x03, 0xF9, 0x49, /* 0x228 */ 0x05, 0xD8, 0x81, 0xDD, 0x05, 0xB4, 0x2A, 0xD6, /* 0x230 */ 0x41, 0xE9, 0xAC, 0x01, 0x76, 0x95, 0x0A, 0x0F, /* 0x238 */ 0xD8, 0xDF, 0xD5, 0xBD, 0x12, 0x1F, 0x35, 0x2F, /* 0x240 */ 0x28, 0x17, 0x6C, 0xD2, 0x98, 0xC1, 0xA8, 0x09, /* 0x248 */ 0x64, 0x77, 0x6E, 0x47, 0x37, 0xBA, 0xCE, 0xAC, /* 0x250 */ 0x59, 0x5E, 0x68, 0x9D, 0x7F, 0x72, 0xD6, 0x89, /* 0x258 */ 0xC5, 0x06, 0x41, 0x29, 0x3E, 0x59, 0x3E, 0xDD, /* 0x260 */ 0x26, 0xF5, 0x24, 0xC9, 0x11, 0xA7, 0x5A, 0xA3, /* 0x268 */ 0x4C, 0x40, 0x1F, 0x46, 0xA1, 0x99, 0xB5, 0xA7, /* 0x270 */ 0x3A, 0x51, 0x6E, 0x86, 0x3B, 0x9E, 0x7D, 0x72, /* 0x278 */ 0xA7, 0x12, 0x05, 0x78, 0x59, 0xED, 0x3E, 0x51, /* 0x280 */ 0x78, 0x15, 0x0B, 0x03, 0x8F, 0x8D, 0xD0, 0x2F, /* 0x288 */ 0x05, 0xB2, 0x3E, 0x7B, 0x4A, 0x1C, 0x4B, 0x73, /* 0x290 */ 0x05, 0x12, 0xFC, 0xC6, 0xEA, 0xE0, 0x50, 0x13, /* 0x298 */ 0x7C, 0x43, 0x93, 0x74, 0xB3, 0xCA, 0x74, 0xE7, /* 0x2a0 */ 0x8E, 0x1F, 0x01, 0x08, 0xD0, 0x30, 0xD4, 0x5B, /* 0x2a8 */ 0x71, 0x36, 0xB4, 0x07, 0xBA, 0xC1, 0x30, 0x30, /* 0x2b0 */ 0x5C, 0x48, 0xB7, 0x82, 0x3B, 0x98, 0xA6, 0x7D, /* 0x2b8 */ 0x60, 0x8A, 0xA2, 0xA3, 0x29, 0x82, 0xCC, 0xBA, /* 0x2c0 */ 0xBD, 0x83, 0x04, 0x1B, 0xA2, 0x83, 0x03, 0x41, /* 0x2c8 */ 0xA1, 0xD6, 0x05, 0xF1, 0x1B, 0xC2, 0xB6, 0xF0, /* 0x2d0 */ 0xA8, 0x7C, 0x86, 0x3B, 0x46, 0xA8, 0x48, 0x2A, /* 0x2d8 */ 0x88, 0xDC, 0x76, 0x9A, 0x76, 0xBF, 0x1F, 0x6A, /* 0x2e0 */ 0xA5, 0x3D, 0x19, 0x8F, 0xEB, 0x38, 0xF3, 0x64, /* 0x2e8 */ 0xDE, 0xC8, 0x2B, 0x0D, 0x0A, 0x28, 0xFF, 0xF7, /* 0x2f0 */ 0xDB, 0xE2, 0x15, 0x42, 0xD4, 0x22, 0xD0, 0x27, /* 0x2f8 */ 0x5D, 0xE1, 0x79, 0xFE, 0x18, 0xE7, 0x70, 0x88, /* 0x300 */ 0xAD, 0x4E, 0xE6, 0xD9, 0x8B, 0x3A, 0xC6, 0xDD, /* 0x308 */ 0x27, 0x51, 0x6E, 0xFF, 0xBC, 0x64, 0xF5, 0x33, /* 0x310 */ 0x43, 0x4F, 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, /* 0x318 */ 0x42, 0x30, 0x40, 0x30, 0x0E, 0x06, 0x03, 0x55, /* 0x320 */ 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, /* 0x328 */ 0x02, 0x01, 0x06, 0x30, 0x0F, 0x06, 0x03, 0x55, /* 0x330 */ 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x05, 0x30, /* 0x338 */ 0x03, 0x01, 0x01, 0xFF, 0x30, 0x1D, 0x06, 0x03, /* 0x340 */ 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0x79, /* 0x348 */ 0xB4, 0x59, 0xE6, 0x7B, 0xB6, 0xE5, 0xE4, 0x01, /* 0x350 */ 0x73, 0x80, 0x08, 0x88, 0xC8, 0x1A, 0x58, 0xF6, /* 0x358 */ 0xE9, 0x9B, 0x6E, 0x30, 0x0D, 0x06, 0x09, 0x2A, /* 0x360 */ 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0B, /* 0x368 */ 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x55, /* 0x370 */ 0x1F, 0x58, 0xA9, 0xBC, 0xB2, 0xA8, 0x50, 0xD0, /* 0x378 */ 0x0C, 0xB1, 0xD8, 0x1A, 0x69, 0x20, 0x27, 0x29, /* 0x380 */ 0x08, 0xAC, 0x61, 0x75, 0x5C, 0x8A, 0x6E, 0xF8, /* 0x388 */ 0x82, 0xE5, 0x69, 0x2F, 0xD5, 0xF6, 0x56, 0x4B, /* 0x390 */ 0xB9, 0xB8, 0x73, 0x10, 0x59, 0xD3, 0x21, 0x97, /* 0x398 */ 0x7E, 0xE7, 0x4C, 0x71, 0xFB, 0xB2, 0xD2, 0x60, /* 0x3a0 */ 0xAD, 0x39, 0xA8, 0x0B, 0xEA, 0x17, 0x21, 0x56, /* 0x3a8 */ 0x85, 0xF1, 0x50, 0x0E, 0x59, 0xEB, 0xCE, 0xE0, /* 0x3b0 */ 0x59, 0xE9, 0xBA, 0xC9, 0x15, 0xEF, 0x86, 0x9D, /* 0x3b8 */ 0x8F, 0x84, 0x80, 0xF6, 0xE4, 0xE9, 0x91, 0x90, /* 0x3c0 */ 0xDC, 0x17, 0x9B, 0x62, 0x1B, 0x45, 0xF0, 0x66, /* 0x3c8 */ 0x95, 0xD2, 0x7C, 0x6F, 0xC2, 0xEA, 0x3B, 0xEF, /* 0x3d0 */ 0x1F, 0xCF, 0xCB, 0xD6, 0xAE, 0x27, 0xF1, 0xA9, /* 0x3d8 */ 0xB0, 0xC8, 0xAE, 0xFD, 0x7D, 0x7E, 0x9A, 0xFA, /* 0x3e0 */ 0x22, 0x04, 0xEB, 0xFF, 0xD9, 0x7F, 0xEA, 0x91, /* 0x3e8 */ 0x2B, 0x22, 0xB1, 0x17, 0x0E, 0x8F, 0xF2, 0x8A, /* 0x3f0 */ 0x34, 0x5B, 0x58, 0xD8, 0xFC, 0x01, 0xC9, 0x54, /* 0x3f8 */ 0xB9, 0xB8, 0x26, 0xCC, 0x8A, 0x88, 0x33, 0x89, /* 0x400 */ 0x4C, 0x2D, 0x84, 0x3C, 0x82, 0xDF, 0xEE, 0x96, /* 0x408 */ 0x57, 0x05, 0xBA, 0x2C, 0xBB, 0xF7, 0xC4, 0xB7, /* 0x410 */ 0xC7, 0x4E, 0x3B, 0x82, 0xBE, 0x31, 0xC8, 0x22, /* 0x418 */ 0x73, 0x73, 0x92, 0xD1, 0xC2, 0x80, 0xA4, 0x39, /* 0x420 */ 0x39, 0x10, 0x33, 0x23, 0x82, 0x4C, 0x3C, 0x9F, /* 0x428 */ 0x86, 0xB2, 0x55, 0x98, 0x1D, 0xBE, 0x29, 0x86, /* 0x430 */ 0x8C, 0x22, 0x9B, 0x9E, 0xE2, 0x6B, 0x3B, 0x57, /* 0x438 */ 0x3A, 0x82, 0x70, 0x4D, 0xDC, 0x09, 0xC7, 0x89, /* 0x440 */ 0xCB, 0x0A, 0x07, 0x4D, 0x6C, 0xE8, 0x5D, 0x8E, /* 0x448 */ 0xC9, 0xEF, 0xCE, 0xAB, 0xC7, 0xBB, 0xB5, 0x2B, /* 0x450 */ 0x4E, 0x45, 0xD6, 0x4A, 0xD0, 0x26, 0xCC, 0xE5, /* 0x458 */ 0x72, 0xCA, 0x08, 0x6A, 0xA5, 0x95, 0xE3, 0x15, /* 0x460 */ 0xA1, 0xF7, 0xA4, 0xED, 0xC9, 0x2C, 0x5F, 0xA5, /* 0x468 */ 0xFB, 0xFF, 0xAC, 0x28, 0x02, 0x2E, 0xBE, 0xD7, /* 0x470 */ 0x7B, 0xBB, 0xE3, 0x71, 0x7B, 0x90, 0x16, 0xD3, /* 0x478 */ 0x07, 0x5E, 0x46, 0x53, 0x7C, 0x37, 0x07, 0x42, /* 0x480 */ 0x8C, 0xD3, 0xC4, 0x96, 0x9C, 0xD5, 0x99, 0xB5, /* 0x488 */ 0x2A, 0xE0, 0x95, 0x1A, 0x80, 0x48, 0xAE, 0x4C, /* 0x490 */ 0x39, 0x07, 0xCE, 0xCC, 0x47, 0xA4, 0x52, 0x95, /* 0x498 */ 0x2B, 0xBA, 0xB8, 0xFB, 0xAD, 0xD2, 0x33, 0x53, /* 0x4a0 */ 0x7D, 0xE5, 0x1D, 0x4D, 0x6D, 0xD5, 0xA1, 0xB1, /* 0x4a8 */ 0xC7, 0x42, 0x6F, 0xE6, 0x40, 0x27, 0x35, 0x5C, /* 0x4b0 */ 0xA3, 0x28, 0xB7, 0x07, 0x8D, 0xE7, 0x8D, 0x33, /* 0x4b8 */ 0x90, 0xE7, 0x23, 0x9F, 0xFB, 0x50, 0x9C, 0x79, /* 0x4c0 */ 0x6C, 0x46, 0xD5, 0xB4, 0x15, 0xB3, 0x96, 0x6E, /* 0x4c8 */ 0x7E, 0x9B, 0x0C, 0x96, 0x3A, 0xB8, 0x52, 0x2D, /* 0x4d0 */ 0x3F, 0xD6, 0x5B, 0xE1, 0xFB, 0x08, 0xC2, 0x84, /* 0x4d8 */ 0xFE, 0x24, 0xA8, 0xA3, 0x89, 0xDA, 0xAC, 0x6A, /* 0x4e0 */ 0xE1, 0x18, 0x2A, 0xB1, 0xA8, 0x43, 0x61, 0x5B, /* 0x4e8 */ 0xD3, 0x1F, 0xDC, 0x3B, 0x8D, 0x76, 0xF2, 0x2D, /* 0x4f0 */ 0xE8, 0x8D, 0x75, 0xDF, 0x17, 0x33, 0x6C, 0x3D, /* 0x4f8 */ 0x53, 0xFB, 0x7B, 0xCB, 0x41, 0x5F, 0xFF, 0xDC, /* 0x500 */ 0xA2, 0xD0, 0x61, 0x38, 0xE1, 0x96, 0xB8, 0xAC, /* 0x508 */ 0x5D, 0x8B, 0x37, 0xD7, 0x75, 0xD5, 0x33, 0xC0, /* 0x510 */ 0x99, 0x11, 0xAE, 0x9D, 0x41, 0xC1, 0x72, 0x75, /* 0x518 */ 0x84, 0xBE, 0x02, 0x41, 0x42, 0x5F, 0x67, 0x24, /* 0x520 */ 0x48, 0x94, 0xD1, 0x9B, 0x27, 0xBE, 0x07, 0x3F, /* 0x528 */ 0xB9, 0xB8, 0x4F, 0x81, 0x74, 0x51, 0xE1, 0x7A, /* 0x530 */ 0xB7, 0xED, 0x9D, 0x23, 0xE2, 0xBE, 0xE0, 0xD5, /* 0x538 */ 0x28, 0x04, 0x13, 0x3C, 0x31, 0x03, 0x9E, 0xDD, /* 0x540 */ 0x7A, 0x6C, 0x8F, 0xC6, 0x07, 0x18, 0xC6, 0x7F, /* 0x548 */ 0xDE, 0x47, 0x8E, 0x3F, 0x28, 0x9E, 0x04, 0x06, /* 0x550 */ 0xCF, 0xA5, 0x54, 0x34, 0x77, 0xBD, 0xEC, 0x89, /* 0x558 */ 0x9B, 0xE9, 0x17, 0x43, 0xDF, 0x5B, 0xDB, 0x5F, /* 0x560 */ 0xFE, 0x8E, 0x1E, 0x57, 0xA2, 0xCD, 0x40, 0x9D, /* 0x568 */ 0x7E, 0x62, 0x22, 0xDA, 0xDE, 0x18, 0x27, }; static const lws_ss_x509_t _ss_x509_isrg_root_x1 = { .vhost_name = "isrg_root_x1", .ca_der = _ss_der_isrg_root_x1, .ca_der_len = 1391, }; static const uint8_t _ss_der_LEX3_isrg_root_x1[] = { /* 0x 0 */ 0x30, 0x82, 0x05, 0x8D, 0x30, 0x82, 0x03, 0x75, /* 0x 8 */ 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x11, 0x00, /* 0x 10 */ 0xD3, 0xB1, 0x72, 0x26, 0x34, 0x23, 0x32, 0xDC, /* 0x 18 */ 0xF4, 0x05, 0x28, 0x51, 0x2A, 0xEC, 0x9C, 0x6A, /* 0x 20 */ 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, /* 0x 28 */ 0xF7, 0x0D, 0x01, 0x01, 0x0B, 0x05, 0x00, 0x30, /* 0x 30 */ 0x4F, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, /* 0x 38 */ 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x29, /* 0x 40 */ 0x30, 0x27, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, /* 0x 48 */ 0x20, 0x49, 0x6E, 0x74, 0x65, 0x72, 0x6E, 0x65, /* 0x 50 */ 0x74, 0x20, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, /* 0x 58 */ 0x74, 0x79, 0x20, 0x52, 0x65, 0x73, 0x65, 0x61, /* 0x 60 */ 0x72, 0x63, 0x68, 0x20, 0x47, 0x72, 0x6F, 0x75, /* 0x 68 */ 0x70, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, /* 0x 70 */ 0x04, 0x03, 0x13, 0x0C, 0x49, 0x53, 0x52, 0x47, /* 0x 78 */ 0x20, 0x52, 0x6F, 0x6F, 0x74, 0x20, 0x58, 0x31, /* 0x 80 */ 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x36, 0x31, 0x30, /* 0x 88 */ 0x30, 0x36, 0x31, 0x35, 0x34, 0x33, 0x35, 0x35, /* 0x 90 */ 0x5A, 0x17, 0x0D, 0x32, 0x31, 0x31, 0x30, 0x30, /* 0x 98 */ 0x36, 0x31, 0x35, 0x34, 0x33, 0x35, 0x35, 0x5A, /* 0x a0 */ 0x30, 0x4A, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, /* 0x a8 */ 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, /* 0x b0 */ 0x16, 0x30, 0x14, 0x06, 0x03, 0x55, 0x04, 0x0A, /* 0x b8 */ 0x13, 0x0D, 0x4C, 0x65, 0x74, 0x27, 0x73, 0x20, /* 0x c0 */ 0x45, 0x6E, 0x63, 0x72, 0x79, 0x70, 0x74, 0x31, /* 0x c8 */ 0x23, 0x30, 0x21, 0x06, 0x03, 0x55, 0x04, 0x03, /* 0x d0 */ 0x13, 0x1A, 0x4C, 0x65, 0x74, 0x27, 0x73, 0x20, /* 0x d8 */ 0x45, 0x6E, 0x63, 0x72, 0x79, 0x70, 0x74, 0x20, /* 0x e0 */ 0x41, 0x75, 0x74, 0x68, 0x6F, 0x72, 0x69, 0x74, /* 0x e8 */ 0x79, 0x20, 0x58, 0x33, 0x30, 0x82, 0x01, 0x22, /* 0x f0 */ 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, /* 0x f8 */ 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, /* 0x100 */ 0x82, 0x01, 0x0F, 0x00, 0x30, 0x82, 0x01, 0x0A, /* 0x108 */ 0x02, 0x82, 0x01, 0x01, 0x00, 0x9C, 0xD3, 0x0C, /* 0x110 */ 0xF0, 0x5A, 0xE5, 0x2E, 0x47, 0xB7, 0x72, 0x5D, /* 0x118 */ 0x37, 0x83, 0xB3, 0x68, 0x63, 0x30, 0xEA, 0xD7, /* 0x120 */ 0x35, 0x26, 0x19, 0x25, 0xE1, 0xBD, 0xBE, 0x35, /* 0x128 */ 0xF1, 0x70, 0x92, 0x2F, 0xB7, 0xB8, 0x4B, 0x41, /* 0x130 */ 0x05, 0xAB, 0xA9, 0x9E, 0x35, 0x08, 0x58, 0xEC, /* 0x138 */ 0xB1, 0x2A, 0xC4, 0x68, 0x87, 0x0B, 0xA3, 0xE3, /* 0x140 */ 0x75, 0xE4, 0xE6, 0xF3, 0xA7, 0x62, 0x71, 0xBA, /* 0x148 */ 0x79, 0x81, 0x60, 0x1F, 0xD7, 0x91, 0x9A, 0x9F, /* 0x150 */ 0xF3, 0xD0, 0x78, 0x67, 0x71, 0xC8, 0x69, 0x0E, /* 0x158 */ 0x95, 0x91, 0xCF, 0xFE, 0xE6, 0x99, 0xE9, 0x60, /* 0x160 */ 0x3C, 0x48, 0xCC, 0x7E, 0xCA, 0x4D, 0x77, 0x12, /* 0x168 */ 0x24, 0x9D, 0x47, 0x1B, 0x5A, 0xEB, 0xB9, 0xEC, /* 0x170 */ 0x1E, 0x37, 0x00, 0x1C, 0x9C, 0xAC, 0x7B, 0xA7, /* 0x178 */ 0x05, 0xEA, 0xCE, 0x4A, 0xEB, 0xBD, 0x41, 0xE5, /* 0x180 */ 0x36, 0x98, 0xB9, 0xCB, 0xFD, 0x6D, 0x3C, 0x96, /* 0x188 */ 0x68, 0xDF, 0x23, 0x2A, 0x42, 0x90, 0x0C, 0x86, /* 0x190 */ 0x74, 0x67, 0xC8, 0x7F, 0xA5, 0x9A, 0xB8, 0x52, /* 0x198 */ 0x61, 0x14, 0x13, 0x3F, 0x65, 0xE9, 0x82, 0x87, /* 0x1a0 */ 0xCB, 0xDB, 0xFA, 0x0E, 0x56, 0xF6, 0x86, 0x89, /* 0x1a8 */ 0xF3, 0x85, 0x3F, 0x97, 0x86, 0xAF, 0xB0, 0xDC, /* 0x1b0 */ 0x1A, 0xEF, 0x6B, 0x0D, 0x95, 0x16, 0x7D, 0xC4, /* 0x1b8 */ 0x2B, 0xA0, 0x65, 0xB2, 0x99, 0x04, 0x36, 0x75, /* 0x1c0 */ 0x80, 0x6B, 0xAC, 0x4A, 0xF3, 0x1B, 0x90, 0x49, /* 0x1c8 */ 0x78, 0x2F, 0xA2, 0x96, 0x4F, 0x2A, 0x20, 0x25, /* 0x1d0 */ 0x29, 0x04, 0xC6, 0x74, 0xC0, 0xD0, 0x31, 0xCD, /* 0x1d8 */ 0x8F, 0x31, 0x38, 0x95, 0x16, 0xBA, 0xA8, 0x33, /* 0x1e0 */ 0xB8, 0x43, 0xF1, 0xB1, 0x1F, 0xC3, 0x30, 0x7F, /* 0x1e8 */ 0xA2, 0x79, 0x31, 0x13, 0x3D, 0x2D, 0x36, 0xF8, /* 0x1f0 */ 0xE3, 0xFC, 0xF2, 0x33, 0x6A, 0xB9, 0x39, 0x31, /* 0x1f8 */ 0xC5, 0xAF, 0xC4, 0x8D, 0x0D, 0x1D, 0x64, 0x16, /* 0x200 */ 0x33, 0xAA, 0xFA, 0x84, 0x29, 0xB6, 0xD4, 0x0B, /* 0x208 */ 0xC0, 0xD8, 0x7D, 0xC3, 0x93, 0x02, 0x03, 0x01, /* 0x210 */ 0x00, 0x01, 0xA3, 0x82, 0x01, 0x67, 0x30, 0x82, /* 0x218 */ 0x01, 0x63, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, /* 0x220 */ 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, /* 0x228 */ 0x01, 0x86, 0x30, 0x12, 0x06, 0x03, 0x55, 0x1D, /* 0x230 */ 0x13, 0x01, 0x01, 0xFF, 0x04, 0x08, 0x30, 0x06, /* 0x238 */ 0x01, 0x01, 0xFF, 0x02, 0x01, 0x00, 0x30, 0x54, /* 0x240 */ 0x06, 0x03, 0x55, 0x1D, 0x20, 0x04, 0x4D, 0x30, /* 0x248 */ 0x4B, 0x30, 0x08, 0x06, 0x06, 0x67, 0x81, 0x0C, /* 0x250 */ 0x01, 0x02, 0x01, 0x30, 0x3F, 0x06, 0x0B, 0x2B, /* 0x258 */ 0x06, 0x01, 0x04, 0x01, 0x82, 0xDF, 0x13, 0x01, /* 0x260 */ 0x01, 0x01, 0x30, 0x30, 0x30, 0x2E, 0x06, 0x08, /* 0x268 */ 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x01, /* 0x270 */ 0x16, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, /* 0x278 */ 0x2F, 0x63, 0x70, 0x73, 0x2E, 0x72, 0x6F, 0x6F, /* 0x280 */ 0x74, 0x2D, 0x78, 0x31, 0x2E, 0x6C, 0x65, 0x74, /* 0x288 */ 0x73, 0x65, 0x6E, 0x63, 0x72, 0x79, 0x70, 0x74, /* 0x290 */ 0x2E, 0x6F, 0x72, 0x67, 0x30, 0x1D, 0x06, 0x03, /* 0x298 */ 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0xA8, /* 0x2a0 */ 0x4A, 0x6A, 0x63, 0x04, 0x7D, 0xDD, 0xBA, 0xE6, /* 0x2a8 */ 0xD1, 0x39, 0xB7, 0xA6, 0x45, 0x65, 0xEF, 0xF3, /* 0x2b0 */ 0xA8, 0xEC, 0xA1, 0x30, 0x33, 0x06, 0x03, 0x55, /* 0x2b8 */ 0x1D, 0x1F, 0x04, 0x2C, 0x30, 0x2A, 0x30, 0x28, /* 0x2c0 */ 0xA0, 0x26, 0xA0, 0x24, 0x86, 0x22, 0x68, 0x74, /* 0x2c8 */ 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x63, 0x72, 0x6C, /* 0x2d0 */ 0x2E, 0x72, 0x6F, 0x6F, 0x74, 0x2D, 0x78, 0x31, /* 0x2d8 */ 0x2E, 0x6C, 0x65, 0x74, 0x73, 0x65, 0x6E, 0x63, /* 0x2e0 */ 0x72, 0x79, 0x70, 0x74, 0x2E, 0x6F, 0x72, 0x67, /* 0x2e8 */ 0x30, 0x72, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, /* 0x2f0 */ 0x05, 0x07, 0x01, 0x01, 0x04, 0x66, 0x30, 0x64, /* 0x2f8 */ 0x30, 0x30, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, /* 0x300 */ 0x05, 0x07, 0x30, 0x01, 0x86, 0x24, 0x68, 0x74, /* 0x308 */ 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x6F, 0x63, 0x73, /* 0x310 */ 0x70, 0x2E, 0x72, 0x6F, 0x6F, 0x74, 0x2D, 0x78, /* 0x318 */ 0x31, 0x2E, 0x6C, 0x65, 0x74, 0x73, 0x65, 0x6E, /* 0x320 */ 0x63, 0x72, 0x79, 0x70, 0x74, 0x2E, 0x6F, 0x72, /* 0x328 */ 0x67, 0x2F, 0x30, 0x30, 0x06, 0x08, 0x2B, 0x06, /* 0x330 */ 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0x24, /* 0x338 */ 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x63, /* 0x340 */ 0x65, 0x72, 0x74, 0x2E, 0x72, 0x6F, 0x6F, 0x74, /* 0x348 */ 0x2D, 0x78, 0x31, 0x2E, 0x6C, 0x65, 0x74, 0x73, /* 0x350 */ 0x65, 0x6E, 0x63, 0x72, 0x79, 0x70, 0x74, 0x2E, /* 0x358 */ 0x6F, 0x72, 0x67, 0x2F, 0x30, 0x1F, 0x06, 0x03, /* 0x360 */ 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, /* 0x368 */ 0x14, 0x79, 0xB4, 0x59, 0xE6, 0x7B, 0xB6, 0xE5, /* 0x370 */ 0xE4, 0x01, 0x73, 0x80, 0x08, 0x88, 0xC8, 0x1A, /* 0x378 */ 0x58, 0xF6, 0xE9, 0x9B, 0x6E, 0x30, 0x0D, 0x06, /* 0x380 */ 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, /* 0x388 */ 0x01, 0x0B, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, /* 0x390 */ 0x00, 0x19, 0xCF, 0x75, 0x20, 0x34, 0x2D, 0x3A, /* 0x398 */ 0xA6, 0x45, 0xFF, 0xD0, 0xD5, 0xE6, 0x8C, 0xDA, /* 0x3a0 */ 0x32, 0xE8, 0x9C, 0x6E, 0x1B, 0x41, 0xD1, 0x27, /* 0x3a8 */ 0xA8, 0xE2, 0x50, 0xF2, 0x70, 0xAA, 0xC4, 0xE7, /* 0x3b0 */ 0x93, 0x46, 0xB4, 0xE8, 0x10, 0xAB, 0x70, 0x4F, /* 0x3b8 */ 0xEF, 0xB7, 0xEA, 0x04, 0xD2, 0x94, 0x11, 0xB1, /* 0x3c0 */ 0x03, 0xFE, 0x5D, 0xBA, 0xDF, 0x36, 0x8C, 0x94, /* 0x3c8 */ 0x36, 0x8F, 0x13, 0x7C, 0x44, 0x8F, 0x0B, 0xF5, /* 0x3d0 */ 0x01, 0x57, 0xAD, 0x68, 0xB8, 0xC5, 0x79, 0xC0, /* 0x3d8 */ 0xD8, 0x4A, 0x80, 0xD7, 0x4C, 0xA3, 0x1E, 0x24, /* 0x3e0 */ 0x7A, 0x1F, 0xD7, 0x23, 0xE8, 0xC1, 0x62, 0x3A, /* 0x3e8 */ 0x76, 0xF9, 0x22, 0x7D, 0x5E, 0x5A, 0xC4, 0x4C, /* 0x3f0 */ 0x50, 0xCD, 0xAF, 0xDD, 0xEF, 0x6D, 0x36, 0xC0, /* 0x3f8 */ 0x80, 0x80, 0x1B, 0xA4, 0x3C, 0x70, 0x20, 0xD6, /* 0x400 */ 0x54, 0x21, 0xD3, 0xBA, 0xEF, 0x14, 0xA9, 0xBF, /* 0x408 */ 0x07, 0x3F, 0x41, 0x0A, 0x36, 0xB1, 0xA2, 0xB0, /* 0x410 */ 0x0B, 0x20, 0xD5, 0x1F, 0x67, 0xD0, 0xC3, 0xEB, /* 0x418 */ 0x88, 0xF6, 0x8A, 0x02, 0xC8, 0xC6, 0x57, 0xB6, /* 0x420 */ 0x0C, 0xFC, 0x56, 0xF1, 0xD2, 0x3F, 0x17, 0x69, /* 0x428 */ 0x68, 0x1C, 0xC8, 0xD7, 0x66, 0x3A, 0x86, 0xF1, /* 0x430 */ 0x19, 0x2A, 0x65, 0x47, 0x68, 0xC6, 0xD2, 0x03, /* 0x438 */ 0xE7, 0xEF, 0x74, 0x16, 0x0B, 0x06, 0x21, 0xF9, /* 0x440 */ 0x0C, 0xA6, 0xA8, 0x11, 0x4B, 0x4E, 0x5F, 0xE3, /* 0x448 */ 0x33, 0xDB, 0x08, 0x41, 0xEA, 0x09, 0x79, 0x75, /* 0x450 */ 0x78, 0xEE, 0x47, 0xC8, 0x42, 0xD3, 0x81, 0xC5, /* 0x458 */ 0x65, 0x2D, 0x75, 0xD0, 0x0E, 0x00, 0x16, 0x9D, /* 0x460 */ 0x1C, 0xEE, 0xB7, 0x58, 0x45, 0x25, 0xE7, 0x33, /* 0x468 */ 0x63, 0x5B, 0x63, 0x41, 0x09, 0xE8, 0xE9, 0xFE, /* 0x470 */ 0xAC, 0xFA, 0x73, 0x32, 0x74, 0xB3, 0x76, 0xE9, /* 0x478 */ 0x6B, 0x94, 0xE2, 0xCD, 0xD4, 0x62, 0xF3, 0xAE, /* 0x480 */ 0x3A, 0xC5, 0x31, 0x46, 0x52, 0x6E, 0xED, 0x34, /* 0x488 */ 0x91, 0x1E, 0xA0, 0xC2, 0xDE, 0x54, 0x84, 0xE5, /* 0x490 */ 0x78, 0x20, 0x56, 0x4C, 0xDD, 0x68, 0xF9, 0x2E, /* 0x498 */ 0x28, 0x64, 0x1B, 0x1A, 0x99, 0xF2, 0xFB, 0x4D, /* 0x4a0 */ 0x7F, 0xE3, 0xB8, 0x5F, 0x5D, 0x73, 0x41, 0xEC, /* 0x4a8 */ 0x79, 0xED, 0x58, 0xD6, 0x7A, 0x37, 0x65, 0x70, /* 0x4b0 */ 0xA7, 0xB1, 0xBA, 0x39, 0xF6, 0x3E, 0x61, 0x0A, /* 0x4b8 */ 0xD9, 0xC0, 0x86, 0x90, 0x9A, 0x1A, 0xC8, 0xA8, /* 0x4c0 */ 0x96, 0x6E, 0x8A, 0x0B, 0x2B, 0x6D, 0xED, 0xD6, /* 0x4c8 */ 0xFA, 0x07, 0x67, 0xE7, 0x29, 0x04, 0xF7, 0xE2, /* 0x4d0 */ 0xB2, 0xD1, 0x58, 0x15, 0x52, 0xC7, 0xF1, 0xA3, /* 0x4d8 */ 0x9D, 0xA6, 0xC0, 0x56, 0x2C, 0xD4, 0x92, 0x98, /* 0x4e0 */ 0xD8, 0xF1, 0x83, 0xB9, 0x6C, 0x7C, 0x33, 0xA0, /* 0x4e8 */ 0xE5, 0x4B, 0xAA, 0x90, 0x92, 0xF1, 0xDA, 0x45, /* 0x4f0 */ 0x4A, 0x34, 0x14, 0xC7, 0x7C, 0x4E, 0xC4, 0xA5, /* 0x4f8 */ 0x6C, 0x5D, 0x3F, 0xBF, 0xDE, 0xB9, 0xA8, 0x61, /* 0x500 */ 0x4A, 0x85, 0x20, 0xDE, 0x42, 0x83, 0x29, 0x62, /* 0x508 */ 0x7C, 0x1C, 0x99, 0x08, 0xA5, 0x46, 0x1F, 0xF4, /* 0x510 */ 0x6B, 0x22, 0xD3, 0x86, 0x51, 0xCB, 0x37, 0xCD, /* 0x518 */ 0x60, 0x4A, 0x42, 0x63, 0x56, 0xB3, 0xC8, 0xD1, /* 0x520 */ 0x8F, 0x31, 0x09, 0x53, 0xC1, 0xE2, 0xDC, 0x1B, /* 0x528 */ 0xD4, 0xF1, 0x54, 0x77, 0x67, 0xCF, 0x33, 0x7B, /* 0x530 */ 0x00, 0xD6, 0xD2, 0x7C, 0xDE, 0xC6, 0x79, 0xBF, /* 0x538 */ 0xCB, 0xE0, 0x16, 0xFD, 0xB2, 0xA1, 0xF2, 0x91, /* 0x540 */ 0x3C, 0x1D, 0x2D, 0xE8, 0x9C, 0xD4, 0x03, 0xCD, /* 0x548 */ 0x66, 0x4A, 0xA3, 0x37, 0x93, 0x19, 0x79, 0x7B, /* 0x550 */ 0xE2, 0x19, 0xC2, 0x16, 0x00, 0xC8, 0xED, 0x0E, /* 0x558 */ 0x4E, 0x0D, 0xFF, 0x7E, 0xCF, 0x07, 0xA8, 0x64, /* 0x560 */ 0xCD, 0x29, 0xDF, 0x41, 0xAA, 0x85, 0x30, 0x49, /* 0x568 */ 0x10, 0x73, 0xA7, 0x4E, 0x89, 0x32, 0x0E, 0x5B, /* 0x570 */ 0xAD, 0x40, 0x86, 0xC1, 0xB0, 0x94, 0x0C, 0x8D, /* 0x578 */ 0x26, 0xC5, 0xA7, 0x49, 0xDC, 0x1C, 0xF8, 0x5B, /* 0x580 */ 0x14, 0x7A, 0x7F, 0x23, 0x69, 0x04, 0xAD, 0xB2, /* 0x588 */ 0x02, 0x29, 0xD6, 0x12, 0xC8, 0xA4, 0xC6, 0xA1, /* 0x590 */ 0x2D, }; static const lws_ss_x509_t _ss_x509_LEX3_isrg_root_x1 = { .vhost_name = "LEX3_isrg_root_x1", .ca_der = _ss_der_LEX3_isrg_root_x1, .ca_der_len = 1425, }; static const lws_ss_trust_store_t _ss_ts_le_via_isrg = { .name = "le_via_isrg", .ssx509 = { &_ss_x509_LEX3_isrg_root_x1, &_ss_x509_isrg_root_x1, } }; static const lws_ss_metadata_t _md_mintest_xctype = { .name = "xctype", .value__may_own_heap = (void *)"X-Content-Type:", .length = 0, }, _md_mintest_ctype = { .next = (void *)&_md_mintest_xctype, .name = "ctype", .value__may_own_heap = (void *)"Content-Type:", .length = 1, }, _md_mintest_uptag = { .next = (void *)&_md_mintest_ctype, .name = "uptag", .value__may_own_heap = (void *)"X-Upload-Tag:", .length = 2, }; static const lws_ss_trust_store_t _ss_ts_avs_via_starfield = { .name = "avs_via_starfield", .ssx509 = { &_ss_x509_starfield_services_root_ca, &_ss_x509_starfield_class_2_ca, } }; static const uint8_t _ss_der_digicert_global_ca_g2[] = { /* 0x 0 */ 0x30, 0x82, 0x04, 0x8B, 0x30, 0x82, 0x03, 0x73, /* 0x 8 */ 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x0C, /* 0x 10 */ 0x8E, 0xE0, 0xC9, 0x0D, 0x6A, 0x89, 0x15, 0x88, /* 0x 18 */ 0x04, 0x06, 0x1E, 0xE2, 0x41, 0xF9, 0xAF, 0x30, /* 0x 20 */ 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, /* 0x 28 */ 0x0D, 0x01, 0x01, 0x0B, 0x05, 0x00, 0x30, 0x61, /* 0x 30 */ 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, /* 0x 38 */ 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x15, 0x30, /* 0x 40 */ 0x13, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x0C, /* 0x 48 */ 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, /* 0x 50 */ 0x20, 0x49, 0x6E, 0x63, 0x31, 0x19, 0x30, 0x17, /* 0x 58 */ 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x10, 0x77, /* 0x 60 */ 0x77, 0x77, 0x2E, 0x64, 0x69, 0x67, 0x69, 0x63, /* 0x 68 */ 0x65, 0x72, 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x31, /* 0x 70 */ 0x20, 0x30, 0x1E, 0x06, 0x03, 0x55, 0x04, 0x03, /* 0x 78 */ 0x13, 0x17, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, /* 0x 80 */ 0x72, 0x74, 0x20, 0x47, 0x6C, 0x6F, 0x62, 0x61, /* 0x 88 */ 0x6C, 0x20, 0x52, 0x6F, 0x6F, 0x74, 0x20, 0x47, /* 0x 90 */ 0x32, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x33, 0x30, /* 0x 98 */ 0x38, 0x30, 0x31, 0x31, 0x32, 0x30, 0x30, 0x30, /* 0x a0 */ 0x30, 0x5A, 0x17, 0x0D, 0x32, 0x38, 0x30, 0x38, /* 0x a8 */ 0x30, 0x31, 0x31, 0x32, 0x30, 0x30, 0x30, 0x30, /* 0x b0 */ 0x5A, 0x30, 0x44, 0x31, 0x0B, 0x30, 0x09, 0x06, /* 0x b8 */ 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, /* 0x c0 */ 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, /* 0x c8 */ 0x0A, 0x13, 0x0C, 0x44, 0x69, 0x67, 0x69, 0x43, /* 0x d0 */ 0x65, 0x72, 0x74, 0x20, 0x49, 0x6E, 0x63, 0x31, /* 0x d8 */ 0x1E, 0x30, 0x1C, 0x06, 0x03, 0x55, 0x04, 0x03, /* 0x e0 */ 0x13, 0x15, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, /* 0x e8 */ 0x72, 0x74, 0x20, 0x47, 0x6C, 0x6F, 0x62, 0x61, /* 0x f0 */ 0x6C, 0x20, 0x43, 0x41, 0x20, 0x47, 0x32, 0x30, /* 0x f8 */ 0x82, 0x01, 0x22, 0x30, 0x0D, 0x06, 0x09, 0x2A, /* 0x100 */ 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, /* 0x108 */ 0x05, 0x00, 0x03, 0x82, 0x01, 0x0F, 0x00, 0x30, /* 0x110 */ 0x82, 0x01, 0x0A, 0x02, 0x82, 0x01, 0x01, 0x00, /* 0x118 */ 0xD3, 0x48, 0x7C, 0xBE, 0xF3, 0x05, 0x86, 0x5D, /* 0x120 */ 0x5B, 0xD5, 0x2F, 0x85, 0x4E, 0x4B, 0xE0, 0x86, /* 0x128 */ 0xAD, 0x15, 0xAC, 0x61, 0xCF, 0x5B, 0xAF, 0x3E, /* 0x130 */ 0x6A, 0x0A, 0x47, 0xFB, 0x9A, 0x76, 0x91, 0x60, /* 0x138 */ 0x0B, 0x8A, 0x6B, 0xCD, 0xCF, 0xDC, 0x57, 0x7E, /* 0x140 */ 0x60, 0x98, 0x0B, 0xE4, 0x54, 0xD9, 0x56, 0xED, /* 0x148 */ 0x21, 0xCC, 0x02, 0xB6, 0x5A, 0x81, 0x5F, 0x97, /* 0x150 */ 0x6A, 0xEE, 0x02, 0x2F, 0x23, 0x27, 0xB8, 0x6D, /* 0x158 */ 0xD4, 0xB0, 0xE7, 0x06, 0x02, 0x78, 0x0B, 0x1F, /* 0x160 */ 0x5C, 0xA9, 0x99, 0x36, 0xFE, 0xBB, 0xAC, 0x1B, /* 0x168 */ 0x05, 0xFA, 0x57, 0xCD, 0x81, 0x10, 0x40, 0x67, /* 0x170 */ 0xD6, 0x30, 0x8B, 0x58, 0x35, 0xD4, 0x96, 0x61, /* 0x178 */ 0xBE, 0xD0, 0x8C, 0x7A, 0x97, 0x9F, 0x1A, 0xF9, /* 0x180 */ 0x22, 0xE6, 0x14, 0x2F, 0xA9, 0xC6, 0xE8, 0x01, /* 0x188 */ 0x1F, 0xAB, 0xF8, 0x26, 0x0F, 0xAC, 0x8E, 0x4D, /* 0x190 */ 0x2C, 0x32, 0x39, 0x1D, 0x81, 0x9B, 0x8D, 0x1C, /* 0x198 */ 0x65, 0xB2, 0x1C, 0xDB, 0x61, 0xA8, 0x89, 0x2F, /* 0x1a0 */ 0x60, 0xE7, 0xEB, 0xC2, 0x4A, 0x18, 0xC4, 0x6F, /* 0x1a8 */ 0x2A, 0xE9, 0x10, 0x92, 0x09, 0xED, 0x17, 0xD1, /* 0x1b0 */ 0x00, 0x2B, 0xE6, 0x7D, 0xEF, 0x04, 0x89, 0x14, /* 0x1b8 */ 0x4E, 0x33, 0xA1, 0xB2, 0x0F, 0x97, 0x87, 0x9F, /* 0x1c0 */ 0xB3, 0xA0, 0xCD, 0x2F, 0xBC, 0x2C, 0xEC, 0xB8, /* 0x1c8 */ 0x83, 0x68, 0x31, 0x3D, 0x1F, 0xD5, 0x4A, 0x90, /* 0x1d0 */ 0x10, 0x19, 0x0B, 0x81, 0x95, 0xD6, 0x29, 0x76, /* 0x1d8 */ 0x51, 0xF9, 0x36, 0x76, 0xD0, 0xB7, 0x09, 0x7A, /* 0x1e0 */ 0x38, 0x4A, 0xD7, 0x6F, 0x8C, 0xBF, 0x13, 0x7C, /* 0x1e8 */ 0x39, 0xED, 0xBA, 0xAE, 0x90, 0xFC, 0x95, 0xF7, /* 0x1f0 */ 0x7B, 0x78, 0x09, 0x36, 0x5E, 0x74, 0x93, 0x1E, /* 0x1f8 */ 0x25, 0xF0, 0xFF, 0xD4, 0xAD, 0xAE, 0x68, 0x6B, /* 0x200 */ 0xC6, 0xFF, 0x0F, 0xD5, 0x35, 0xF1, 0x55, 0x6E, /* 0x208 */ 0x48, 0x49, 0xF8, 0xF8, 0xB8, 0xEF, 0x88, 0xF8, /* 0x210 */ 0xF1, 0x5E, 0x11, 0x77, 0xAA, 0xDF, 0x02, 0xB3, /* 0x218 */ 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x82, 0x01, /* 0x220 */ 0x5A, 0x30, 0x82, 0x01, 0x56, 0x30, 0x12, 0x06, /* 0x228 */ 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, /* 0x230 */ 0x08, 0x30, 0x06, 0x01, 0x01, 0xFF, 0x02, 0x01, /* 0x238 */ 0x00, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, /* 0x240 */ 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x01, /* 0x248 */ 0x86, 0x30, 0x34, 0x06, 0x08, 0x2B, 0x06, 0x01, /* 0x250 */ 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 0x28, 0x30, /* 0x258 */ 0x26, 0x30, 0x24, 0x06, 0x08, 0x2B, 0x06, 0x01, /* 0x260 */ 0x05, 0x05, 0x07, 0x30, 0x01, 0x86, 0x18, 0x68, /* 0x268 */ 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x6F, 0x63, /* 0x270 */ 0x73, 0x70, 0x2E, 0x64, 0x69, 0x67, 0x69, 0x63, /* 0x278 */ 0x65, 0x72, 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x30, /* 0x280 */ 0x7B, 0x06, 0x03, 0x55, 0x1D, 0x1F, 0x04, 0x74, /* 0x288 */ 0x30, 0x72, 0x30, 0x37, 0xA0, 0x35, 0xA0, 0x33, /* 0x290 */ 0x86, 0x31, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, /* 0x298 */ 0x2F, 0x63, 0x72, 0x6C, 0x34, 0x2E, 0x64, 0x69, /* 0x2a0 */ 0x67, 0x69, 0x63, 0x65, 0x72, 0x74, 0x2E, 0x63, /* 0x2a8 */ 0x6F, 0x6D, 0x2F, 0x44, 0x69, 0x67, 0x69, 0x43, /* 0x2b0 */ 0x65, 0x72, 0x74, 0x47, 0x6C, 0x6F, 0x62, 0x61, /* 0x2b8 */ 0x6C, 0x52, 0x6F, 0x6F, 0x74, 0x47, 0x32, 0x2E, /* 0x2c0 */ 0x63, 0x72, 0x6C, 0x30, 0x37, 0xA0, 0x35, 0xA0, /* 0x2c8 */ 0x33, 0x86, 0x31, 0x68, 0x74, 0x74, 0x70, 0x3A, /* 0x2d0 */ 0x2F, 0x2F, 0x63, 0x72, 0x6C, 0x33, 0x2E, 0x64, /* 0x2d8 */ 0x69, 0x67, 0x69, 0x63, 0x65, 0x72, 0x74, 0x2E, /* 0x2e0 */ 0x63, 0x6F, 0x6D, 0x2F, 0x44, 0x69, 0x67, 0x69, /* 0x2e8 */ 0x43, 0x65, 0x72, 0x74, 0x47, 0x6C, 0x6F, 0x62, /* 0x2f0 */ 0x61, 0x6C, 0x52, 0x6F, 0x6F, 0x74, 0x47, 0x32, /* 0x2f8 */ 0x2E, 0x63, 0x72, 0x6C, 0x30, 0x3D, 0x06, 0x03, /* 0x300 */ 0x55, 0x1D, 0x20, 0x04, 0x36, 0x30, 0x34, 0x30, /* 0x308 */ 0x32, 0x06, 0x04, 0x55, 0x1D, 0x20, 0x00, 0x30, /* 0x310 */ 0x2A, 0x30, 0x28, 0x06, 0x08, 0x2B, 0x06, 0x01, /* 0x318 */ 0x05, 0x05, 0x07, 0x02, 0x01, 0x16, 0x1C, 0x68, /* 0x320 */ 0x74, 0x74, 0x70, 0x73, 0x3A, 0x2F, 0x2F, 0x77, /* 0x328 */ 0x77, 0x77, 0x2E, 0x64, 0x69, 0x67, 0x69, 0x63, /* 0x330 */ 0x65, 0x72, 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, /* 0x338 */ 0x43, 0x50, 0x53, 0x30, 0x1D, 0x06, 0x03, 0x55, /* 0x340 */ 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0x24, 0x6E, /* 0x348 */ 0x2B, 0x2D, 0xD0, 0x6A, 0x92, 0x51, 0x51, 0x25, /* 0x350 */ 0x69, 0x01, 0xAA, 0x9A, 0x47, 0xA6, 0x89, 0xE7, /* 0x358 */ 0x40, 0x20, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, /* 0x360 */ 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x4E, /* 0x368 */ 0x22, 0x54, 0x20, 0x18, 0x95, 0xE6, 0xE3, 0x6E, /* 0x370 */ 0xE6, 0x0F, 0xFA, 0xFA, 0xB9, 0x12, 0xED, 0x06, /* 0x378 */ 0x17, 0x8F, 0x39, 0x30, 0x0D, 0x06, 0x09, 0x2A, /* 0x380 */ 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0B, /* 0x388 */ 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x0B, /* 0x390 */ 0x39, 0x84, 0x91, 0xF9, 0x97, 0xEB, 0xAA, 0x81, /* 0x398 */ 0xAF, 0x84, 0xE9, 0x5A, 0x38, 0x92, 0xFC, 0xE2, /* 0x3a0 */ 0x6C, 0x59, 0xBF, 0x36, 0xC8, 0x45, 0xA7, 0x31, /* 0x3a8 */ 0x03, 0x11, 0xE1, 0x06, 0xC0, 0xAC, 0x32, 0xC7, /* 0x3b0 */ 0x5A, 0x55, 0x29, 0xDA, 0x4F, 0x40, 0x02, 0xF5, /* 0x3b8 */ 0xA1, 0xDE, 0xB0, 0xED, 0xDE, 0xC0, 0xF8, 0xF6, /* 0x3c0 */ 0x75, 0x9D, 0x76, 0xB9, 0x87, 0xFE, 0x41, 0x80, /* 0x3c8 */ 0x7A, 0xCF, 0x5D, 0xE3, 0x00, 0xC6, 0x5B, 0x02, /* 0x3d0 */ 0xE6, 0x9B, 0x78, 0x62, 0xC9, 0xDC, 0xB8, 0x62, /* 0x3d8 */ 0x9A, 0x77, 0xED, 0x89, 0x08, 0xD7, 0x4B, 0xC5, /* 0x3e0 */ 0xFD, 0x43, 0xD5, 0x62, 0x23, 0x27, 0xC4, 0x04, /* 0x3e8 */ 0x59, 0x6D, 0x71, 0x3F, 0x23, 0x5B, 0xEA, 0xD9, /* 0x3f0 */ 0xF2, 0xE7, 0x24, 0x27, 0x6F, 0xF4, 0x95, 0x80, /* 0x3f8 */ 0xDB, 0x96, 0x2C, 0xE4, 0x54, 0x8B, 0xCF, 0xEA, /* 0x400 */ 0x19, 0xD9, 0x7F, 0x55, 0x99, 0x51, 0x7A, 0x0E, /* 0x408 */ 0x2D, 0x18, 0x3D, 0x78, 0x58, 0x52, 0xBC, 0x63, /* 0x410 */ 0x68, 0x57, 0x0B, 0xDD, 0x44, 0xB3, 0x57, 0x4A, /* 0x418 */ 0x60, 0xE6, 0xC8, 0x70, 0x70, 0x5B, 0x87, 0x28, /* 0x420 */ 0x6A, 0xD7, 0x3B, 0x4E, 0x52, 0x45, 0x19, 0xAF, /* 0x428 */ 0x24, 0x06, 0x92, 0x48, 0x11, 0x1A, 0x8B, 0xAE, /* 0x430 */ 0xAC, 0x18, 0x12, 0x57, 0xAC, 0x03, 0xCB, 0xB8, /* 0x438 */ 0xF4, 0xBD, 0xCA, 0x26, 0x0E, 0xA7, 0xC1, 0xDD, /* 0x440 */ 0xE3, 0x33, 0xEF, 0xC0, 0x55, 0x30, 0x0D, 0x95, /* 0x448 */ 0x59, 0x4E, 0x9C, 0x03, 0x36, 0x06, 0xF8, 0xC0, /* 0x450 */ 0x8F, 0x14, 0x99, 0x9C, 0x4D, 0x2A, 0x9E, 0xC1, /* 0x458 */ 0xE1, 0x7D, 0x3B, 0xAF, 0x72, 0xA7, 0x45, 0xBA, /* 0x460 */ 0x13, 0x96, 0x29, 0x4E, 0x19, 0xD0, 0x1A, 0x98, /* 0x468 */ 0x06, 0xF4, 0x37, 0x94, 0x17, 0xAD, 0xA3, 0x18, /* 0x470 */ 0xBA, 0x3E, 0xB0, 0x01, 0x0C, 0x95, 0xD6, 0x29, /* 0x478 */ 0x35, 0x20, 0x35, 0x7D, 0xF5, 0x10, 0x60, 0xE4, /* 0x480 */ 0xF7, 0x68, 0x62, 0x1E, 0xEC, 0x19, 0xE1, 0x24, /* 0x488 */ 0xF2, 0x87, 0x11, 0xAC, 0xE9, 0x08, 0x80, }; static const lws_ss_x509_t _ss_x509_digicert_global_ca_g2 = { .vhost_name = "digicert_global_ca_g2", .ca_der = _ss_der_digicert_global_ca_g2, .ca_der_len = 1167, }; static const uint8_t _ss_der_digicert_global_root_g2[] = { /* 0x 0 */ 0x30, 0x82, 0x03, 0x8E, 0x30, 0x82, 0x02, 0x76, /* 0x 8 */ 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x03, /* 0x 10 */ 0x3A, 0xF1, 0xE6, 0xA7, 0x11, 0xA9, 0xA0, 0xBB, /* 0x 18 */ 0x28, 0x64, 0xB1, 0x1D, 0x09, 0xFA, 0xE5, 0x30, /* 0x 20 */ 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, /* 0x 28 */ 0x0D, 0x01, 0x01, 0x0B, 0x05, 0x00, 0x30, 0x61, /* 0x 30 */ 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, /* 0x 38 */ 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x15, 0x30, /* 0x 40 */ 0x13, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x0C, /* 0x 48 */ 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, /* 0x 50 */ 0x20, 0x49, 0x6E, 0x63, 0x31, 0x19, 0x30, 0x17, /* 0x 58 */ 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x10, 0x77, /* 0x 60 */ 0x77, 0x77, 0x2E, 0x64, 0x69, 0x67, 0x69, 0x63, /* 0x 68 */ 0x65, 0x72, 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x31, /* 0x 70 */ 0x20, 0x30, 0x1E, 0x06, 0x03, 0x55, 0x04, 0x03, /* 0x 78 */ 0x13, 0x17, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, /* 0x 80 */ 0x72, 0x74, 0x20, 0x47, 0x6C, 0x6F, 0x62, 0x61, /* 0x 88 */ 0x6C, 0x20, 0x52, 0x6F, 0x6F, 0x74, 0x20, 0x47, /* 0x 90 */ 0x32, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x33, 0x30, /* 0x 98 */ 0x38, 0x30, 0x31, 0x31, 0x32, 0x30, 0x30, 0x30, /* 0x a0 */ 0x30, 0x5A, 0x17, 0x0D, 0x33, 0x38, 0x30, 0x31, /* 0x a8 */ 0x31, 0x35, 0x31, 0x32, 0x30, 0x30, 0x30, 0x30, /* 0x b0 */ 0x5A, 0x30, 0x61, 0x31, 0x0B, 0x30, 0x09, 0x06, /* 0x b8 */ 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, /* 0x c0 */ 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, /* 0x c8 */ 0x0A, 0x13, 0x0C, 0x44, 0x69, 0x67, 0x69, 0x43, /* 0x d0 */ 0x65, 0x72, 0x74, 0x20, 0x49, 0x6E, 0x63, 0x31, /* 0x d8 */ 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0B, /* 0x e0 */ 0x13, 0x10, 0x77, 0x77, 0x77, 0x2E, 0x64, 0x69, /* 0x e8 */ 0x67, 0x69, 0x63, 0x65, 0x72, 0x74, 0x2E, 0x63, /* 0x f0 */ 0x6F, 0x6D, 0x31, 0x20, 0x30, 0x1E, 0x06, 0x03, /* 0x f8 */ 0x55, 0x04, 0x03, 0x13, 0x17, 0x44, 0x69, 0x67, /* 0x100 */ 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x47, 0x6C, /* 0x108 */ 0x6F, 0x62, 0x61, 0x6C, 0x20, 0x52, 0x6F, 0x6F, /* 0x110 */ 0x74, 0x20, 0x47, 0x32, 0x30, 0x82, 0x01, 0x22, /* 0x118 */ 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, /* 0x120 */ 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, /* 0x128 */ 0x82, 0x01, 0x0F, 0x00, 0x30, 0x82, 0x01, 0x0A, /* 0x130 */ 0x02, 0x82, 0x01, 0x01, 0x00, 0xBB, 0x37, 0xCD, /* 0x138 */ 0x34, 0xDC, 0x7B, 0x6B, 0xC9, 0xB2, 0x68, 0x90, /* 0x140 */ 0xAD, 0x4A, 0x75, 0xFF, 0x46, 0xBA, 0x21, 0x0A, /* 0x148 */ 0x08, 0x8D, 0xF5, 0x19, 0x54, 0xC9, 0xFB, 0x88, /* 0x150 */ 0xDB, 0xF3, 0xAE, 0xF2, 0x3A, 0x89, 0x91, 0x3C, /* 0x158 */ 0x7A, 0xE6, 0xAB, 0x06, 0x1A, 0x6B, 0xCF, 0xAC, /* 0x160 */ 0x2D, 0xE8, 0x5E, 0x09, 0x24, 0x44, 0xBA, 0x62, /* 0x168 */ 0x9A, 0x7E, 0xD6, 0xA3, 0xA8, 0x7E, 0xE0, 0x54, /* 0x170 */ 0x75, 0x20, 0x05, 0xAC, 0x50, 0xB7, 0x9C, 0x63, /* 0x178 */ 0x1A, 0x6C, 0x30, 0xDC, 0xDA, 0x1F, 0x19, 0xB1, /* 0x180 */ 0xD7, 0x1E, 0xDE, 0xFD, 0xD7, 0xE0, 0xCB, 0x94, /* 0x188 */ 0x83, 0x37, 0xAE, 0xEC, 0x1F, 0x43, 0x4E, 0xDD, /* 0x190 */ 0x7B, 0x2C, 0xD2, 0xBD, 0x2E, 0xA5, 0x2F, 0xE4, /* 0x198 */ 0xA9, 0xB8, 0xAD, 0x3A, 0xD4, 0x99, 0xA4, 0xB6, /* 0x1a0 */ 0x25, 0xE9, 0x9B, 0x6B, 0x00, 0x60, 0x92, 0x60, /* 0x1a8 */ 0xFF, 0x4F, 0x21, 0x49, 0x18, 0xF7, 0x67, 0x90, /* 0x1b0 */ 0xAB, 0x61, 0x06, 0x9C, 0x8F, 0xF2, 0xBA, 0xE9, /* 0x1b8 */ 0xB4, 0xE9, 0x92, 0x32, 0x6B, 0xB5, 0xF3, 0x57, /* 0x1c0 */ 0xE8, 0x5D, 0x1B, 0xCD, 0x8C, 0x1D, 0xAB, 0x95, /* 0x1c8 */ 0x04, 0x95, 0x49, 0xF3, 0x35, 0x2D, 0x96, 0xE3, /* 0x1d0 */ 0x49, 0x6D, 0xDD, 0x77, 0xE3, 0xFB, 0x49, 0x4B, /* 0x1d8 */ 0xB4, 0xAC, 0x55, 0x07, 0xA9, 0x8F, 0x95, 0xB3, /* 0x1e0 */ 0xB4, 0x23, 0xBB, 0x4C, 0x6D, 0x45, 0xF0, 0xF6, /* 0x1e8 */ 0xA9, 0xB2, 0x95, 0x30, 0xB4, 0xFD, 0x4C, 0x55, /* 0x1f0 */ 0x8C, 0x27, 0x4A, 0x57, 0x14, 0x7C, 0x82, 0x9D, /* 0x1f8 */ 0xCD, 0x73, 0x92, 0xD3, 0x16, 0x4A, 0x06, 0x0C, /* 0x200 */ 0x8C, 0x50, 0xD1, 0x8F, 0x1E, 0x09, 0xBE, 0x17, /* 0x208 */ 0xA1, 0xE6, 0x21, 0xCA, 0xFD, 0x83, 0xE5, 0x10, /* 0x210 */ 0xBC, 0x83, 0xA5, 0x0A, 0xC4, 0x67, 0x28, 0xF6, /* 0x218 */ 0x73, 0x14, 0x14, 0x3D, 0x46, 0x76, 0xC3, 0x87, /* 0x220 */ 0x14, 0x89, 0x21, 0x34, 0x4D, 0xAF, 0x0F, 0x45, /* 0x228 */ 0x0C, 0xA6, 0x49, 0xA1, 0xBA, 0xBB, 0x9C, 0xC5, /* 0x230 */ 0xB1, 0x33, 0x83, 0x29, 0x85, 0x02, 0x03, 0x01, /* 0x238 */ 0x00, 0x01, 0xA3, 0x42, 0x30, 0x40, 0x30, 0x0F, /* 0x240 */ 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, /* 0x248 */ 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xFF, 0x30, /* 0x250 */ 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, /* 0x258 */ 0xFF, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, /* 0x260 */ 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, /* 0x268 */ 0x04, 0x14, 0x4E, 0x22, 0x54, 0x20, 0x18, 0x95, /* 0x270 */ 0xE6, 0xE3, 0x6E, 0xE6, 0x0F, 0xFA, 0xFA, 0xB9, /* 0x278 */ 0x12, 0xED, 0x06, 0x17, 0x8F, 0x39, 0x30, 0x0D, /* 0x280 */ 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, /* 0x288 */ 0x01, 0x01, 0x0B, 0x05, 0x00, 0x03, 0x82, 0x01, /* 0x290 */ 0x01, 0x00, 0x60, 0x67, 0x28, 0x94, 0x6F, 0x0E, /* 0x298 */ 0x48, 0x63, 0xEB, 0x31, 0xDD, 0xEA, 0x67, 0x18, /* 0x2a0 */ 0xD5, 0x89, 0x7D, 0x3C, 0xC5, 0x8B, 0x4A, 0x7F, /* 0x2a8 */ 0xE9, 0xBE, 0xDB, 0x2B, 0x17, 0xDF, 0xB0, 0x5F, /* 0x2b0 */ 0x73, 0x77, 0x2A, 0x32, 0x13, 0x39, 0x81, 0x67, /* 0x2b8 */ 0x42, 0x84, 0x23, 0xF2, 0x45, 0x67, 0x35, 0xEC, /* 0x2c0 */ 0x88, 0xBF, 0xF8, 0x8F, 0xB0, 0x61, 0x0C, 0x34, /* 0x2c8 */ 0xA4, 0xAE, 0x20, 0x4C, 0x84, 0xC6, 0xDB, 0xF8, /* 0x2d0 */ 0x35, 0xE1, 0x76, 0xD9, 0xDF, 0xA6, 0x42, 0xBB, /* 0x2d8 */ 0xC7, 0x44, 0x08, 0x86, 0x7F, 0x36, 0x74, 0x24, /* 0x2e0 */ 0x5A, 0xDA, 0x6C, 0x0D, 0x14, 0x59, 0x35, 0xBD, /* 0x2e8 */ 0xF2, 0x49, 0xDD, 0xB6, 0x1F, 0xC9, 0xB3, 0x0D, /* 0x2f0 */ 0x47, 0x2A, 0x3D, 0x99, 0x2F, 0xBB, 0x5C, 0xBB, /* 0x2f8 */ 0xB5, 0xD4, 0x20, 0xE1, 0x99, 0x5F, 0x53, 0x46, /* 0x300 */ 0x15, 0xDB, 0x68, 0x9B, 0xF0, 0xF3, 0x30, 0xD5, /* 0x308 */ 0x3E, 0x31, 0xE2, 0x8D, 0x84, 0x9E, 0xE3, 0x8A, /* 0x310 */ 0xDA, 0xDA, 0x96, 0x3E, 0x35, 0x13, 0xA5, 0x5F, /* 0x318 */ 0xF0, 0xF9, 0x70, 0x50, 0x70, 0x47, 0x41, 0x11, /* 0x320 */ 0x57, 0x19, 0x4E, 0xC0, 0x8F, 0xAE, 0x06, 0xC4, /* 0x328 */ 0x95, 0x13, 0x17, 0x2F, 0x1B, 0x25, 0x9F, 0x75, /* 0x330 */ 0xF2, 0xB1, 0x8E, 0x99, 0xA1, 0x6F, 0x13, 0xB1, /* 0x338 */ 0x41, 0x71, 0xFE, 0x88, 0x2A, 0xC8, 0x4F, 0x10, /* 0x340 */ 0x20, 0x55, 0xD7, 0xF3, 0x14, 0x45, 0xE5, 0xE0, /* 0x348 */ 0x44, 0xF4, 0xEA, 0x87, 0x95, 0x32, 0x93, 0x0E, /* 0x350 */ 0xFE, 0x53, 0x46, 0xFA, 0x2C, 0x9D, 0xFF, 0x8B, /* 0x358 */ 0x22, 0xB9, 0x4B, 0xD9, 0x09, 0x45, 0xA4, 0xDE, /* 0x360 */ 0xA4, 0xB8, 0x9A, 0x58, 0xDD, 0x1B, 0x7D, 0x52, /* 0x368 */ 0x9F, 0x8E, 0x59, 0x43, 0x88, 0x81, 0xA4, 0x9E, /* 0x370 */ 0x26, 0xD5, 0x6F, 0xAD, 0xDD, 0x0D, 0xC6, 0x37, /* 0x378 */ 0x7D, 0xED, 0x03, 0x92, 0x1B, 0xE5, 0x77, 0x5F, /* 0x380 */ 0x76, 0xEE, 0x3C, 0x8D, 0xC4, 0x5D, 0x56, 0x5B, /* 0x388 */ 0xA2, 0xD9, 0x66, 0x6E, 0xB3, 0x35, 0x37, 0xE5, /* 0x390 */ 0x32, 0xB6, }; static const lws_ss_x509_t _ss_x509_digicert_global_root_g2 = { .vhost_name = "digicert_global_root_g2", .ca_der = _ss_der_digicert_global_root_g2, .ca_der_len = 914, }; static const lws_ss_trust_store_t _ss_ts_api_amazon_com = { .name = "api_amazon_com", .ssx509 = { &_ss_x509_digicert_global_root_g2, &_ss_x509_digicert_global_ca_g2, } }; static const lws_ss_policy_t _ssp_captive_portal_detect = { .streamtype = "captive_portal_detect", .endpoint = "connectivitycheck.android.com", .u = { .http = { .method = "GET", .url = "generate_204", .resp_expect = 204, .fail_redirect = 1, } }, .flags = 0x1, .port = 80, .protocol = 0, }, _ssp_mqtt_test1 = { .next = (void *)&_ssp_captive_portal_detect, .streamtype = "mqtt_test1", .endpoint = "a1ygonr3im5cv2-ats.iot.us-west-2.amazonaws.com", .u = { .mqtt = { .topic = "test/topic1", .subscribe = "test/topic1", .qos = 1, } }, .retry_bo = &_rbo_0, .flags = 0x10, .port = 443, .protocol = 3, .client_cert = 1, .trust = {.store = &_ss_ts_mqtt_amz_iot}, }, _ssp_mqtt_test = { .next = (void *)&_ssp_mqtt_test1, .streamtype = "mqtt_test", .endpoint = "a1ygonr3im5cv2-ats.iot.us-west-2.amazonaws.com", .u = { .mqtt = { .topic = "test/topic0", .subscribe = "test/topic0", } }, .retry_bo = &_rbo_0, .flags = 0x10, .port = 443, .protocol = 3, .client_cert = 1, .trust = {.store = &_ss_ts_mqtt_amz_iot}, }, _ssp_minpost = { .next = (void *)&_ssp_mqtt_test, .streamtype = "minpost", .endpoint = "warmcat.com", .u = { .http = { .method = "POST", .url = "testserver/formtest", } }, .retry_bo = &_rbo_0, .flags = 0x11, .port = 443, .protocol = 0, .trust = {.store = &_ss_ts_le_via_isrg}, }, _ssp_mintest_fail = { .next = (void *)&_ssp_minpost, .streamtype = "mintest-fail", .endpoint = "warmcat.com", .u = { .http = { .method = "GET", .url = "index.html", } }, .retry_bo = &_rbo_0, .flags = 0x11, .port = 22, .protocol = 0, .trust = {.store = &_ss_ts_le_via_isrg}, }, _ssp_h2longpolltest = { .next = (void *)&_ssp_mintest_fail, .streamtype = "h2longpolltest", .endpoint = "warmcat.com", .u = { .http = { .method = "GET", .url = "index.html", } }, .retry_bo = &_rbo_0, .flags = 0x32, .port = 443, .protocol = 1, .trust = {.store = &_ss_ts_le_via_isrg}, }, _ssp_mintest = { .next = (void *)&_ssp_h2longpolltest, .streamtype = "mintest", .endpoint = "warmcat.com", .metadata = (void *)&_md_mintest_uptag, .u = { .http = { .method = "GET", .url = "index.html?uptag=${uptag}", } }, .retry_bo = &_rbo_0, .flags = 0x11, .port = 443, .metadata_count = 3, .protocol = 0, .trust = {.store = &_ss_ts_le_via_isrg}, }, _ssp_avs_audio = { .next = (void *)&_ssp_mintest, .streamtype = "avs_audio", .endpoint = "alexa.na.gateway.devices.a2z.com", .u = { .http = { .method = "POST", .url = "v20160207/events", .multipart_name = "audio", .multipart_content_type = "application/octet-stream", .auth_preamble = "Bearer ", .blob_header = { "authorization:", }, } }, .retry_bo = &_rbo_0, .flags = 0xa90, .port = 443, .protocol = 1, .trust = {.store = &_ss_ts_avs_via_starfield}, }, _ssp_avs_metadata = { .next = (void *)&_ssp_avs_audio, .streamtype = "avs_metadata", .endpoint = "alexa.na.gateway.devices.a2z.com", .rideshare_streamtype = "avs_audio", .u = { .http = { .method = "POST", .url = "v20160207/events", .multipart_name = "metadata", .multipart_content_type = "application/json; charset=UTF-8", .auth_preamble = "Bearer ", .blob_header = { "authorization:", }, } }, .retry_bo = &_rbo_0, .flags = 0xa91, .port = 443, .protocol = 1, .trust = {.store = &_ss_ts_avs_via_starfield}, }, _ssp_avs_event = { .next = (void *)&_ssp_avs_metadata, .streamtype = "avs_event", .endpoint = "alexa.na.gateway.devices.a2z.com", .u = { .http = { .method = "GET", .url = "v20160207/directives", .auth_preamble = "Bearer ", .blob_header = { "authorization:", }, } }, .retry_bo = &_rbo_0, .flags = 0x2b2, .port = 443, .protocol = 1, .trust = {.store = &_ss_ts_avs_via_starfield}, }, _ssp_api_amazon_com_auth = { .next = (void *)&_ssp_avs_event, .streamtype = "api_amazon_com_auth", .endpoint = "api.amazon.com", .u = { .http = { .method = "POST", .url = "auth/o2/token", } }, .retry_bo = &_rbo_0, .flags = 0x1291, .port = 443, .protocol = 0, .trust = {.store = &_ss_ts_api_amazon_com}, }; #define _ss_static_policy_entry _ssp_api_amazon_com_auth /* estimated footprint 10720 (when sizeof void * = 8) */ static-policy.json000066400000000000000000000362051476025525100352770ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-staticpolicy{ "release": "01234567", "product": "myproduct", "schema-version": 1, "retry": [{ "default": { "backoff": [1000, 2000, 3000, 5000, 10000], "conceal": 5, "jitterpc": 20, "svalidping": 30, "svalidhup": 35 } }], "certs": [{ "isrg_root_x1": "MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAwTzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygch77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6UA5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sWT8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyHB5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UCB5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUvKBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWnOlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTnjh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbwqHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CIrU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkqhkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZLubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KKNFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7UrTkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdCjNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVcoyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPAmRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57demyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=" }, { "LEX3_isrg_root_x1": "MIIFjTCCA3WgAwIBAgIRANOxciY0IzLc9AUoUSrsnGowDQYJKoZIhvcNAQELBQAwTzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTYxMDA2MTU0MzU1WhcNMjExMDA2MTU0MzU1WjBKMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3MgRW5jcnlwdDEjMCEGA1UEAxMaTGV0J3MgRW5jcnlwdCBBdXRob3JpdHkgWDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCc0wzwWuUuR7dyXTeDs2hjMOrXNSYZJeG9vjXxcJIvt7hLQQWrqZ41CFjssSrEaIcLo+N15Obzp2JxunmBYB/XkZqf89B4Z3HIaQ6Vkc/+5pnpYDxIzH7KTXcSJJ1HG1rrueweNwAcnKx7pwXqzkrrvUHlNpi5y/1tPJZo3yMqQpAMhnRnyH+lmrhSYRQTP2XpgofL2/oOVvaGifOFP5eGr7DcGu9rDZUWfcQroGWymQQ2dYBrrErzG5BJeC+ilk8qICUpBMZ0wNAxzY8xOJUWuqgzuEPxsR/DMH+ieTETPS02+OP88jNquTkxxa/EjQ0dZBYzqvqEKbbUC8DYfcOTAgMBAAGjggFnMIIBYzAOBgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIBADBUBgNVHSAETTBLMAgGBmeBDAECATA/BgsrBgEEAYLfEwEBATAwMC4GCCsGAQUFBwIBFiJodHRwOi8vY3BzLnJvb3QteDEubGV0c2VuY3J5cHQub3JnMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTAzBgNVHR8ELDAqMCigJqAkhiJodHRwOi8vY3JsLnJvb3QteDEubGV0c2VuY3J5cHQub3JnMHIGCCsGAQUFBwEBBGYwZDAwBggrBgEFBQcwAYYkaHR0cDovL29jc3Aucm9vdC14MS5sZXRzZW5jcnlwdC5vcmcvMDAGCCsGAQUFBzAChiRodHRwOi8vY2VydC5yb290LXgxLmxldHNlbmNyeXB0Lm9yZy8wHwYDVR0jBBgwFoAUebRZ5nu25eQBc4AIiMgaWPbpm24wDQYJKoZIhvcNAQELBQADggIBABnPdSA0LTqmRf/Q1eaM2jLonG4bQdEnqOJQ8nCqxOeTRrToEKtwT++36gTSlBGxA/5dut82jJQ2jxN8RI8L9QFXrWi4xXnA2EqA10yjHiR6H9cj6MFiOnb5In1eWsRMUM2v3e9tNsCAgBukPHAg1lQh07rvFKm/Bz9BCjaxorALINUfZ9DD64j2igLIxle2DPxW8dI/F2loHMjXZjqG8RkqZUdoxtID5+90FgsGIfkMpqgRS05f4zPbCEHqCXl1eO5HyELTgcVlLXXQDgAWnRzut1hFJeczY1tjQQno6f6s+nMydLN26WuU4s3UYvOuOsUxRlJu7TSRHqDC3lSE5XggVkzdaPkuKGQbGpny+01/47hfXXNB7HntWNZ6N2Vwp7G6OfY+YQrZwIaQmhrIqJZuigsrbe3W+gdn5ykE9+Ky0VgVUsfxo52mwFYs1JKY2PGDuWx8M6DlS6qQkvHaRUo0FMd8TsSlbF0/v965qGFKhSDeQoMpYnwcmQilRh/0ayLThlHLN81gSkJjVrPI0Y8xCVPB4twb1PFUd2fPM3sA1tJ83sZ5v8vgFv2yofKRPB0t6JzUA81mSqM3kxl5e+IZwhYAyO0OTg3/fs8HqGTNKd9BqoUwSRBzp06JMg5brUCGwbCUDI0mxadJ3Bz4WxR6fyNpBK2yAinWEsikxqEt" }, { "amazon_root_ca_1": "MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5" }, { "digicert_global_root_g2": "MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTflMrY=" }, { "digicert_global_ca_g2": "MIIEizCCA3OgAwIBAgIQDI7gyQ1qiRWIBAYe4kH5rzANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0yODA4MDExMjAwMDBaMEQxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxHjAcBgNVBAMTFURpZ2lDZXJ0IEdsb2JhbCBDQSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANNIfL7zBYZdW9UvhU5L4IatFaxhz1uvPmoKR/uadpFgC4przc/cV35gmAvkVNlW7SHMArZagV+Xau4CLyMnuG3UsOcGAngLH1ypmTb+u6wbBfpXzYEQQGfWMItYNdSWYb7QjHqXnxr5IuYUL6nG6AEfq/gmD6yOTSwyOR2Bm40cZbIc22GoiS9g5+vCShjEbyrpEJIJ7RfRACvmfe8EiRROM6GyD5eHn7OgzS+8LOy4g2gxPR/VSpAQGQuBldYpdlH5NnbQtwl6OErXb4y/E3w57bqukPyV93t4CTZedJMeJfD/1K2uaGvG/w/VNfFVbkhJ+Pi474j48V4Rd6rfArMCAwEAAaOCAVowggFWMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgGGMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMHsGA1UdHwR0MHIwN6A1oDOGMWh0dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RHMi5jcmwwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RHMi5jcmwwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwHQYDVR0OBBYEFCRuKy3QapJRUSVpAaqaR6aJ50AgMB8GA1UdIwQYMBaAFE4iVCAYlebjbuYP+vq5Eu0GF485MA0GCSqGSIb3DQEBCwUAA4IBAQALOYSR+ZfrqoGvhOlaOJL84mxZvzbIRacxAxHhBsCsMsdaVSnaT0AC9aHesO3ewPj2dZ12uYf+QYB6z13jAMZbAuabeGLJ3LhimnftiQjXS8X9Q9ViIyfEBFltcT8jW+rZ8uckJ2/0lYDblizkVIvP6hnZf1WZUXoOLRg9eFhSvGNoVwvdRLNXSmDmyHBwW4coatc7TlJFGa8kBpJIERqLrqwYElesA8u49L3KJg6nwd3jM+/AVTANlVlOnAM2BvjAjxSZnE0qnsHhfTuvcqdFuhOWKU4Z0BqYBvQ3lBetoxi6PrABDJXWKTUgNX31EGDk92hiHuwZ4STyhxGs6QiA" }, { "starfield_services_root_ca": "MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkdiEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6" }, { "starfield_class_2_ca": "MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJlxy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=" }], "trust_stores": [{ "name": "le_via_isrg", "stack": ["isrg_root_x1", "LEX3_isrg_root_x1"] }, { "name": "api_amazon_com", "stack": ["digicert_global_ca_g2", "digicert_global_root_g2"] }, { "name": "avs_via_starfield", "stack": ["starfield_class_2_ca", "starfield_services_root_ca"] }, { "name": "mqtt_amz_iot", "stack": ["amazon_root_ca_1", "starfield_class_2_ca", "starfield_services_root_ca"] }], "s": [{ "api_amazon_com_auth": { "endpoint": "api.amazon.com", "port": 443, "protocol": "h1", "http_method": "POST", "http_url": "auth/o2/token", "plugins": [], "opportunistic": true, "tls": true, "h2q_oflow_txcr": true, "http_www_form_urlencoded": true, "http_no_content_length": true, "retry": "default", "tls_trust_store": "api_amazon_com" } }, { "avs_event": { "endpoint": "alexa.na.gateway.devices.a2z.com", "port": 443, "protocol": "h2", "http_method": "GET", "http_url": "v20160207/directives", "h2q_oflow_txcr": true, "http_auth_header": "authorization:", "http_auth_preamble": "Bearer ", "http_no_content_length": true, "nailed_up": true, "long_poll": true, "retry": "default", "plugins": [], "tls": true, "tls_trust_store": "avs_via_starfield" } }, { "avs_metadata": { "endpoint": "alexa.na.gateway.devices.a2z.com", "port": 443, "protocol": "h2", "http_method": "POST", "http_url": "v20160207/events", "opportunistic": true, "h2q_oflow_txcr": true, "http_auth_header": "authorization:", "http_auth_preamble": "Bearer ", "http_multipart_name": "metadata", "http_mime_content_type": "application/json; charset=UTF-8", "http_no_content_length": true, "rideshare": "avs_audio", "retry": "default", "plugins": [], "tls": true, "tls_trust_store": "avs_via_starfield" } }, { "avs_audio": { "endpoint": "alexa.na.gateway.devices.a2z.com", "port": 443, "protocol": "h2", "http_method": "POST", "http_url": "v20160207/events", "plugins": [], "tls": true, "h2q_oflow_txcr": true, "http_auth_header": "authorization:", "http_auth_preamble": "Bearer ", "http_multipart_name": "audio", "http_mime_content_type": "application/octet-stream", "http_no_content_length": true, "retry": "default", "tls_trust_store": "avs_via_starfield" } }, { "mintest": { "endpoint": "warmcat.com", "port": 443, "protocol": "h1", "http_method": "GET", "http_url": "index.html?uptag=${uptag}", "http_dsn_header": "x-dsn:", "http_fwv_header": "x-fw-version:", "http_devtype_header": "x-devtype:", "metadata": [{ "uptag": "X-Upload-Tag:" }, { "ctype": "Content-Type:" }, { "xctype": "X-Content-Type:" }], "plugins": [], "tls": true, "opportunistic": true, "retry": "default", "tls_trust_store": "le_via_isrg" } }, { "h2longpolltest": { "endpoint": "warmcat.com", "port": 443, "protocol": "h2", "http_method": "GET", "http_url": "index.html", "plugins": [], "tls": true, "nailed_up": true, "long_poll": true, "retry": "default", "tls_trust_store": "le_via_isrg" } }, { "mintest-fail": { "endpoint": "warmcat.com", "port": 22, "protocol": "h1", "http_method": "GET", "http_url": "index.html", "plugins": [], "tls": true, "opportunistic": true, "retry": "default", "tls_trust_store": "le_via_isrg" } }, { "minpost": { "endpoint": "warmcat.com", "port": 443, "protocol": "h1", "http_method": "POST", "http_url": "testserver/formtest", "plugins": [], "tls": true, "opportunistic": true, "retry": "default", "tls_trust_store": "le_via_isrg" } }, { "mqtt_test": { "endpoint": "a1ygonr3im5cv2-ats.iot.us-west-2.amazonaws.com", "port": 443, "tls": true, "client_cert": 0, "tls_trust_store": "mqtt_amz_iot", "protocol": "mqtt", "mqtt_topic": "test/topic0", "mqtt_subscribe": "test/topic0", "mqtt_qos": 0, "retry": "default" } }, { "mqtt_test1": { "endpoint": "a1ygonr3im5cv2-ats.iot.us-west-2.amazonaws.com", "port": 443, "tls": true, "client_cert": 0, "tls_trust_store": "mqtt_amz_iot", "protocol": "mqtt", "mqtt_topic": "test/topic1", "mqtt_subscribe": "test/topic1", "mqtt_qos": 1, "retry": "default" } }, { "captive_portal_detect": { "endpoint": "connectivitycheck.android.com", "port": 80, "protocol": "h1", "http_method": "GET", "http_url": "generate_204", "opportunistic": true, "http_expect": 204, "http_fail_redirect": true } } ] } libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-stress/000077500000000000000000000000001476025525100305055ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-stress/CMakeLists.txt000066400000000000000000000111261476025525100332460ustar00rootroot00000000000000project(lws-minimal-secure-streams-stress C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-secure-streams-stress) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS 1 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY 0 requirements) require_lws_config(LWS_WITH_SYS_STATE 1 requirements) if (NOT WIN32) if (requirements) add_executable(${SAMP} minimal-secure-streams.c) find_program(VALGRIND "valgrind") if (LWS_CTEST_INTERNET_AVAILABLE AND NOT WIN32) # # When running in CI, wait for a lease on the resources # before starting this test, so the server does not get # thousands of simultaneous tls connection attempts # # sai-resource holds the lease on the resources until # the time given in seconds or the sai-resource instance # exits, whichever happens first # # If running under Sai, creates a lock test called "res_sspcmin" # sai_resource(warmcat_conns 1 40 sspcmin) # # simple test not via proxy # if (VALGRIND) message("testing via valgrind") add_test(NAME ssstress-warmcat COMMAND ${VALGRIND} --tool=memcheck --leak-check=yes --num-callers=20 $ -c 4 --budget 5) else() add_test(NAME ssstress-warmcat COMMAND lws-minimal-secure-streams-stress -c 4 --budget 5) endif() set_tests_properties(ssstress-warmcat PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/secure-streams/minimal-secure-streams-stress TIMEOUT 60) if (DEFINED ENV{SAI_OVN}) set_tests_properties(ssstress-warmcat PROPERTIES FIXTURES_REQUIRED "res_sspcmin") endif() if (HAS_LWS_WITH_SECURE_STREAMS_PROXY_API OR LWS_WITH_SECURE_STREAMS_PROXY_API) # # Define test dep to bring up and take down the test # proxy # if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") # uds abstract namespace for linux set(CTEST_SOCKET_PATH "@ctest-sspstress-$ENV{SAI_PROJECT}-$ENV{SAI_OVN}") else() # filesystem socket for others set(CTEST_SOCKET_PATH "/tmp/ctest-sspstress-$ENV{SAI_PROJECT}-$ENV{SAI_OVN}") endif() add_test(NAME st_ssstressproxy COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background.sh ssstressproxy $ -i ${CTEST_SOCKET_PATH} ) set_tests_properties(st_ssstressproxy PROPERTIES WORKING_DIRECTORY . FIXTURES_SETUP ssstressproxy TIMEOUT 800) add_test(NAME ki_ssstressproxy COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background-kill.sh ssstressproxy $ -i ${CTEST_SOCKET_PATH}) set_tests_properties(ki_ssstressproxy PROPERTIES FIXTURES_CLEANUP ssstressproxy) # # the client part that will connect to the proxy # if (VALGRIND) message("testing via valgrind") add_test(NAME sspc-minimalstress COMMAND ${VALGRIND} --tool=memcheck --leak-check=yes --num-callers=20 $ -i +${CTEST_SOCKET_PATH} -c 4 --budget 5) else() add_test(NAME sspc-minimalstress COMMAND lws-minimal-secure-streams-stress-client -i +${CTEST_SOCKET_PATH} -c 4 --budget 5) endif() set(fixlist "ssstressproxy") if (DEFINED ENV{SAI_OVN}) list(APPEND fixlist "res_ssproxy") endif() set_tests_properties(sspc-minimalstress PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/secure-streams/minimal-secure-streams-stress FIXTURES_REQUIRED "${fixlist}" TIMEOUT 40) endif() endif() if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\ni#if defined(LWS_WITH_SECURE_STREAMS_PROXY_API)\n return 0;\n #else\n fail\n #endif\n return 0;\n}\n" HAS_LWS_WITH_SECURE_STREAMS_PROXY_API) if (HAS_LWS_WITH_SECURE_STREAMS_PROXY_API OR LWS_WITH_SECURE_STREAMS_PROXY_API) add_compile_options(-DLWS_SS_USE_SSPC) add_executable(${SAMP}-client minimal-secure-streams.c) if (websockets_shared) target_link_libraries(${SAMP}-client websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP}-client websockets_shared) else() target_link_libraries(${SAMP}-client websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() endif() endif() libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-stress/README.md000066400000000000000000000012671476025525100317720ustar00rootroot00000000000000# lws minimal secure streams stress This is the same as minimal-secure-streams, except you can have it perform concurrent SS connections and a budget of sequential connections. It basically forks as many times as `-c ` and each fork does `--budget ` SS connections one after the other. ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15| -c |Fork this many times on init| --budget |Each fork sequentially does this many SS connections (default 1)| --pass-limit |By default the pass limit is the budget, but if doing fault injection you can set a lower limit here| minimal-secure-streams.c000066400000000000000000000515421476025525100351670ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-stress/* * lws-minimal-secure-streams * * Written in 2010-2021 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * * This demonstrates a minimal http client using secure streams api. * * It visits https://warmcat.com/ and receives the html page there. * * This example is built two different ways from the same source... one includes * the policy everything needed to fulfil the stream directly. The other -client * variant has no policy itself and some other minor init changes, and connects * to the -proxy example to actually get the connection done. * * In the -client build case, the example does not even init the tls libraries * since the proxy part will take care of all that. */ #include #include #include // #define FORCE_OS_TRUST_STORE /* * uncomment to force network traffic through 127.0.0.1:1080 * * On your local machine, you can run a SOCKS5 proxy like this * * $ ssh -N -D 0.0.0.0:1080 localhost -v * * If enabled, this also fetches a remote policy that also * specifies that all traffic should go through the remote * proxy. */ // #define VIA_LOCALHOST_SOCKS static int interrupted, bad = 1, force_cpd_fail_portal, force_cpd_fail_no_internet, test_respmap, test_ots, budget = 1, predicted_good = 1, good, orig_budget; static unsigned int timeout_ms = 8000; static lws_state_notify_link_t nl; struct lws_context *context; static lws_sorted_usec_list_t sul_timeout; /* for each process to complete */ /* * If the -proxy app is fulfilling our connection, then we don't need to have * the policy in the client. * * When we build with LWS_SS_USE_SSPC, the apis hook up to a proxy process over * a Unix Domain Socket. To test that, you need to separately run the * ./lws-minimal-secure-streams-proxy test app on the same machine. */ #if !defined(LWS_SS_USE_SSPC) static const char * const default_ss_policy = "{" "\"release\":" "\"01234567\"," "\"product\":" "\"myproduct\"," "\"schema-version\":" "1," #if defined(VIA_LOCALHOST_SOCKS) "\"via-socks5\":" "\"127.0.0.1:1080\"," #endif "\"retry\": [" /* named backoff / retry strategies */ "{\"default\": {" "\"backoff\": [" "1000," "2000," "3000," "5000," "10000" "]," "\"conceal\":" "5," "\"jitterpc\":" "20," "\"svalidping\":" "30," "\"svalidhup\":" "35" "}}" "]," "\"certs\": [" /* named individual certificates in BASE64 DER */ /* * Let's Encrypt certs for warmcat.com / libwebsockets.org * * We fetch the real policy from there using SS and switch to * using that. */ #if !defined(FORCE_OS_TRUST_STORE) "{\"isrg_root_x1\": \"" "MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw" "TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh" "cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4" "WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu" "ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY" "MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc" "h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+" "0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U" "A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW" "T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH" "B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC" "B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv" "KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn" "OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn" "jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw" "qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI" "rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV" "HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq" "hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL" "ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ" "3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK" "NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5" "ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur" "TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC" "jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc" "oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq" "4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA" "mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d" "emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=" "\"}" #endif "]," "\"trust_stores\": [" /* named cert chains */ #if !defined(FORCE_OS_TRUST_STORE) "{" "\"name\": \"le_via_isrg\"," "\"stack\": [" "\"isrg_root_x1\"" "]" "}" #endif "]," "\"s\": [" #if !defined(LWS_WITH_SS_DIRECT_PROTOCOL_STR) /* * "fetch_policy" decides from where the real policy * will be fetched, if present. Otherwise the initial * policy is treated as the whole, hardcoded, policy. */ "{\"fetch_policy\": {" "\"endpoint\":" "\"warmcat.com\"," "\"port\":" "443," "\"protocol\":" "\"h1\"," "\"http_method\":" "\"GET\"," #if defined(VIA_LOCALHOST_SOCKS) "\"http_url\":" "\"policy/minimal-proxy-socks.json\"," #else "\"http_url\":" "\"policy/minimal-proxy-v4.2-v2.json\"," #endif "\"tls\":" "true," "\"opportunistic\":" "true," #if !defined(FORCE_OS_TRUST_STORE) "\"tls_trust_store\":" "\"le_via_isrg\"," #endif "\"retry\":" "\"default\"" #else "{\"mintest\": {" "\"endpoint\": \"warmcat.com\"," "\"port\": 443," "\"protocol\": \"h1\"," "\"http_method\": \"GET\"," "\"http_url\": \"index.html?uptag=${uptag}\"," "\"metadata\": [{" " \"uptag\": \"X-Upload-Tag:\"" "}, {" " \"xctype\": \"X-Content-Type:\"" "}]," "\"tls\": true," "\"opportunistic\": true," "\"retry\": \"default\"," "\"timeout_ms\": 2000," "\"direct_proto_str\": true," "\"tls_trust_store\": \"le_via_isrg\"" #endif "}},{" /* * "captive_portal_detect" describes * what to do in order to check if the path to * the Internet is being interrupted by a * captive portal. If there's a larger policy * fetched from elsewhere, it should also include * this since it needs to be done at least after * every DHCP acquisition */ "\"captive_portal_detect\": {" "\"endpoint\": \"connectivitycheck.android.com\"," "\"http_url\": \"generate_204\"," "\"port\": 80," "\"protocol\": \"h1\"," "\"http_method\": \"GET\"," "\"opportunistic\": true," "\"http_expect\": 204," "\"http_fail_redirect\": true" "}}" "]}" ; #endif typedef struct myss { struct lws_ss_handle *ss; void *opaque_data; /* ... application specific state ... */ lws_sorted_usec_list_t sul; size_t amt; struct lws_genhash_ctx hash_ctx; } myss_t; static int create_ss(struct lws_context *cx); #if !defined(LWS_SS_USE_SSPC) static const char *canned_root_token_payload = "grant_type=refresh_token" "&refresh_token=Atzr|IwEBIJedGXjDqsU_vMxykqOMg" "SHfYe3CPcedueWEMWSDMaDnEmiW8RlR1Kns7Cb4B-TOSnqp7ifVsY4BMY2B8tpHfO39XP" "zfu9HapGjTR458IyHX44FE71pWJkGZ79uVBpljP4sazJuk8XS3Oe_yLnm_DIO6fU1nU3Y" "0flYmsOiOAQE_gRk_pdlmEtHnpMA-9rLw3mkY5L89Ty9kUygBsiFaYatouROhbsTn8-jW" "k1zZLUDpT6ICtBXSnrCIg0pUbZevPFhTwdXd6eX-u4rq0W-XaDvPWFO7au-iPb4Zk5eZE" "iX6sissYrtNmuEXc2uHu7MnQO1hHCaTdIO2CANVumf-PHSD8xseamyh04sLV5JgFzY45S" "KvKMajiUZuLkMokOx86rjC2Hdkx5DO7G-dbG1ufBDG-N79pFMSs7Ck5pc283IdLoJkCQc" "AGvTX8o8I29QqkcGou-9TKhOJmpX8As94T61ok0UqqEKPJ7RhfQHHYdCtsdwxgvfVr9qI" "xL_hDCcTho8opCVX-6QhJHl6SQFlTw13" "&client_id=" "amzn1.application-oa2-client.4823334c434b4190a2b5a42c07938a2d"; #endif static void process_timeout(lws_sorted_usec_list_t *sul) { lwsl_err("%s: process timed out\n", __func__); exit(1); } /* secure streams payload interface */ static lws_ss_state_return_t myss_rx(void *userobj, const uint8_t *buf, size_t len, int flags) { if (flags & LWSSS_FLAG_PERF_JSON) return LWSSSSRET_OK; #if !defined(LWS_WITH_SS_DIRECT_PROTOCOL_STR) myss_t *m = (myss_t *)userobj; const char *md_srv = "not set", *md_test = "not set"; size_t md_srv_len = 7, md_test_len = 7; lws_ss_get_metadata(m->ss, "srv", (const void **)&md_srv, &md_srv_len); lws_ss_get_metadata(m->ss, "test", (const void **)&md_test, &md_test_len); lwsl_ss_user(m->ss, "len %d, flags: %d, srv: %.*s, test: %.*s", (int)len, flags, (int)md_srv_len, md_srv, (int)md_test_len, md_test); lwsl_hexdump_ss_info(m->ss, buf, len); #endif /* * If we received the whole message, for our example it means * we are done. */ if (flags & LWSSS_FLAG_EOM) { bad = 0; } return LWSSSSRET_OK; } static lws_ss_state_return_t myss_tx(void *userobj, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len, int *flags) { //myss_t *m = (myss_t *)userobj; /* in this example, we don't send stuff */ return LWSSSSRET_TX_DONT_SEND; } static lws_ss_state_return_t myss_state(void *userobj, void *sh, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { myss_t *m = (myss_t *)userobj; #if defined(LWS_WITH_SS_DIRECT_PROTOCOL_STR) const char *md_test = "not set"; size_t md_test_len = 7; int i; static const char * imd_test_keys[8] = { "server:", "content-security-policy:", "strict-transport-security:", "test-custom-header:", "x-xss-protection:", "x-content-type-options:", "x-frame-options:", "x-non-exist:", }; #endif lwsl_ss_user(m->ss, "%s (%d), ord 0x%x", lws_ss_state_name((int)state), state, (unsigned int)ack); switch (state) { case LWSSSCS_CREATING: return lws_ss_client_connect(m->ss); case LWSSSCS_CONNECTING: lws_ss_start_timeout(m->ss, timeout_ms); if (lws_ss_set_metadata(m->ss, "uptag", "myuptag123", 10)) /* can fail, eg due to OOM, retry later if so */ return LWSSSSRET_DISCONNECT_ME; #if !defined(LWS_WITH_SS_DIRECT_PROTOCOL_STR) if (lws_ss_set_metadata(m->ss, "ctype", "myctype", 7)) /* can fail, eg due to OOM, retry later if so */ return LWSSSSRET_DISCONNECT_ME; #else if (lws_ss_set_metadata(m->ss, "X-Test-Type1:", "myctype1", 8)) /* can fail, eg due to OOM, retry later if so */ return LWSSSSRET_DISCONNECT_ME; if (lws_ss_set_metadata(m->ss, "X-Test-Type2:", "myctype2", 8)) /* can fail, eg due to OOM, retry later if so */ return LWSSSSRET_DISCONNECT_ME; if (lws_ss_set_metadata(m->ss, "Content-Type:", "myctype", 7)) /* can fail, eg due to OOM, retry later if so */ return LWSSSSRET_DISCONNECT_ME; #endif break; case LWSSSCS_ALL_RETRIES_FAILED: /* if we're out of retries, we want to close the app and FAIL */ interrupted = 1; bad = 2; break; case LWSSSCS_CONNECTED: #if defined(LWS_WITH_SS_DIRECT_PROTOCOL_STR) lwsl_cx_user(context, "get direct metadata"); for (i = 0; i < 8; i++) { md_test = "not set"; lws_ss_get_metadata(m->ss, imd_test_keys[i], (const void **)&md_test, &md_test_len); lwsl_ss_user(m->ss, " test key:[%s], got [%s]", imd_test_keys[i], md_test); } #endif break; case LWSSSCS_QOS_ACK_REMOTE: /* transaction assertively succeeded */ lwsl_ss_notice(m->ss, "LWSSSCS_QOS_ACK_REMOTE"); good++; break; /* disconnected will move us on */ case LWSSSCS_QOS_NACK_REMOTE: /* transaction assertively failed */ lwsl_ss_notice(m->ss, "LWSSSCS_QOS_NACK_REMOTE"); break; /* disconnected will move us on */ case LWSSSCS_DISCONNECTED: /* attempt is over */ if (budget) create_ss(context); else interrupted = 1; return LWSSSSRET_DESTROY_ME; case LWSSSCS_TIMEOUT: lwsl_ss_notice(m->ss, "LWSSSCS_TIMEOUT"); bad = 3; if (budget) create_ss(context); else interrupted = 1; return LWSSSSRET_DESTROY_ME; case LWSSSCS_USER_BASE: lwsl_ss_notice(m->ss, "LWSSSCS_USER_BASE"); break; default: break; } return LWSSSSRET_OK; } #if defined(LWS_WITH_SECURE_STREAMS_BUFFER_DUMP) static void myss_headers_dump(void *userobj, const uint8_t *buf, size_t len, int done) { lwsl_cx_user(context, "%lu done: %s", len, done ? "true" : "false"); lwsl_hexdump_err(buf, len); } #endif static int create_ss(struct lws_context *cx) { lws_ss_info_t ssi; budget--; lwsl_cx_notice(cx, "starting"); /* We're making an outgoing secure stream ourselves */ memset(&ssi, 0, sizeof(ssi)); ssi.handle_offset = offsetof(myss_t, ss); ssi.opaque_user_data_offset = offsetof(myss_t, opaque_data); ssi.rx = myss_rx; ssi.tx = myss_tx; ssi.state = myss_state; #if defined(LWS_WITH_SECURE_STREAMS_BUFFER_DUMP) ssi.dump = myss_headers_dump; #endif ssi.user_alloc = sizeof(myss_t); ssi.streamtype = test_ots ? "mintest-ots" : (test_respmap ? "respmap" : "mintest"); if (lws_ss_create(cx, 0, &ssi, NULL, NULL, NULL, NULL)) { lwsl_cx_err(context, "failed to create ss"); return -1; } lwsl_cx_notice(cx, "started"); return 0; } static int app_system_state_nf(lws_state_manager_t *mgr, lws_state_notify_link_t *link, int current, int target) { struct lws_context *cx = lws_system_context_from_system_mgr(mgr); #if !defined(LWS_SS_USE_SSPC) lws_system_blob_t *ab = lws_system_get_blob(context, LWS_SYSBLOB_TYPE_AUTH, 1 /* AUTH_IDX_ROOT */); size_t size; #endif /* * For the things we care about, let's notice if we are trying to get * past them when we haven't solved them yet, and make the system * state wait while we trigger the dependent action. */ switch (target) { #if !defined(LWS_SS_USE_SSPC) /* * The proxy takes responsibility for this stuff if we get things * done through that */ case LWS_SYSTATE_INITIALIZED: /* overlay on the hardcoded policy */ case LWS_SYSTATE_POLICY_VALID: /* overlay on the loaded policy */ if (target != current) break; if (force_cpd_fail_portal) /* this makes it look like we're behind a captive portal * because the overriden address does a redirect */ lws_ss_policy_overlay(context, "{\"s\": [{\"captive_portal_detect\": {" "\"endpoint\": \"google.com\"," "\"http_url\": \"/\"," "\"port\": 80" "}}]}"); if (force_cpd_fail_no_internet) /* this looks like no internet, because the overridden * port doesn't have anything that will connect to us */ lws_ss_policy_overlay(context, "{\"s\": [{\"captive_portal_detect\": {" "\"endpoint\": \"warmcat.com\"," "\"http_url\": \"/\"," "\"port\": 999" "}}]}"); break; case LWS_SYSTATE_REGISTERED: size = lws_system_blob_get_size(ab); if (size) break; /* let's register our canned root token so auth can use it */ lws_system_blob_direct_set(ab, (const uint8_t *)canned_root_token_payload, strlen(canned_root_token_payload)); break; #endif case LWS_SYSTATE_OPERATIONAL: if (current == LWS_SYSTATE_OPERATIONAL) { create_ss(cx); } break; } return 0; } static lws_state_notify_link_t * const app_notifier_list[] = { &nl, NULL }; #if defined(LWS_WITH_SYS_METRICS) static int my_metric_report(lws_metric_pub_t *mp) { lws_metric_bucket_t *sub = mp->u.hist.head; char buf[192]; do { if (lws_metrics_format(mp, &sub, buf, sizeof(buf))) lwsl_cx_user(context, "%s: %s\n", __func__, buf); } while ((mp->flags & LWSMTFL_REPORT_HIST) && sub); /* 0 = leave metric to accumulate, 1 = reset the metric */ return 1; } static const lws_system_ops_t system_ops = { .metric_report = my_metric_report, }; #endif static void sigint_handler(int sig) { interrupted = 1; } static lws_log_cx_t my_log_cx = { .lll_flags = LLLF_LOG_CONTEXT_AWARE | LLL_ERR | LLL_WARN | LLL_NOTICE | LLL_USER, .refcount_cb = lws_log_use_cx_file, .u.emit_cx = lws_log_emit_cx_file, }; int main(int argc, const char **argv) { struct lws_context_creation_info info; int n = 0, expected = 0, concurrent = 1; char cxname[16], logpath[128]; const char *p; signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); lws_cmdline_option_handle_builtin(argc, argv, &info); if ((p = lws_cmdline_option(argc, argv, "-c"))) concurrent = atoi(p); if (concurrent < 0 || concurrent > 100) return 1; if ((p = lws_cmdline_option(argc, argv, "-d"))) my_log_cx.lll_flags = (uint32_t)(LLLF_LOG_CONTEXT_AWARE | atoi(p)); lws_strncpy(cxname, "ctx0", sizeof(cxname)); for (n = 0; n < concurrent - 1; n++) { if (fork()) { #if defined(WIN32) Sleep(1); #else usleep(1000); #endif lws_snprintf(cxname, sizeof(cxname), "ctx%d", n + 1); break; } } /* * Arrange that each process's context logs to a different file */ info.log_cx = &my_log_cx; info.vhost_name = cxname; lws_snprintf(logpath, sizeof(logpath), "/tmp/%s.log", cxname); my_log_cx.opaque = (void *)logpath; lwsl_user("LWS secure streams test client [-d]\n"); /* these options are mutually exclusive if given */ if (lws_cmdline_option(argc, argv, "--force-portal")) force_cpd_fail_portal = 1; if (lws_cmdline_option(argc, argv, "--force-no-internet")) force_cpd_fail_no_internet = 1; if (lws_cmdline_option(argc, argv, "--respmap")) test_respmap = 1; if (lws_cmdline_option(argc, argv, "--ots")) /* * Use a streamtype that relies on the OS trust store for * validation */ test_ots = 1; if ((p = lws_cmdline_option(argc, argv, "--timeout_ms"))) timeout_ms = (unsigned int)atoi(p); if ((p = lws_cmdline_option(argc, argv, "--budget"))) budget = atoi(p); predicted_good = budget; orig_budget = budget; if ((p = lws_cmdline_option(argc, argv, "--pass-limit"))) predicted_good = atoi(p); info.fd_limit_per_thread = 1 + 26 + 1; info.port = CONTEXT_PORT_NO_LISTEN; #if defined(LWS_SS_USE_SSPC) info.protocols = lws_sspc_protocols; { const char *p; /* connect to ssproxy via UDS by default, else via * tcp connection to this port */ if ((p = lws_cmdline_option(argc, argv, "-p"))) info.ss_proxy_port = (uint16_t)atoi(p); /* UDS "proxy.ss.lws" in abstract namespace, else this socket * path; when -p given this can specify the network interface * to bind to */ if ((p = lws_cmdline_option(argc, argv, "-i"))) info.ss_proxy_bind = p; /* if -p given, -a specifies the proxy address to connect to */ if ((p = lws_cmdline_option(argc, argv, "-a"))) info.ss_proxy_address = p; } #else info.pss_policies_json = default_ss_policy; info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_H2_JUST_FIX_WINDOW_UPDATE_OVERFLOW | LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; #endif #if defined(LWS_WITH_MBEDTLS) /* uncomment to force mbedtls to load a system trust store like * openssl does * * info.mbedtls_client_preload_filepath = * "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem"; */ #endif /* integrate us with lws system state management when context created */ nl.name = "app"; nl.notify_cb = app_system_state_nf; info.register_notifier_list = app_notifier_list; #if defined(LWS_WITH_SYS_METRICS) info.system_ops = &system_ops; info.metrics_prefix = "ssmex"; #endif /* create the context */ context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); goto bail; } /* timeout for each forked process */ lws_sul_schedule(context, 0, &sul_timeout, process_timeout, (lws_usec_t)((lws_usec_t)budget * (lws_usec_t)timeout_ms * LWS_US_PER_MS)); #if !defined(LWS_SS_USE_SSPC) /* * If we're being a proxied client, the proxy does all this */ /* * Set the related lws_system blobs * * ...direct_set() sets a pointer, so the thing pointed to has to have * a suitable lifetime, eg, something that already exists on the heap or * a const string in .rodata like this */ lws_system_blob_direct_set(lws_system_get_blob(context, LWS_SYSBLOB_TYPE_DEVICE_SERIAL, 0), (const uint8_t *)"SN12345678", 10); lws_system_blob_direct_set(lws_system_get_blob(context, LWS_SYSBLOB_TYPE_DEVICE_FW_VERSION, 0), (const uint8_t *)"v0.01", 5); /* * ..._heap_append() appends to a buflist kind of arrangement on heap, * just one block is fine, otherwise it will concatenate the fragments * in the order they were appended (and take care of freeing them at * context destroy time). ..._heap_empty() is also available to remove * everything that was already allocated. * * Here we use _heap_append() just so it's tested as well as direct set. */ lws_system_blob_heap_append(lws_system_get_blob(context, LWS_SYSBLOB_TYPE_DEVICE_TYPE, 0), (const uint8_t *)"spacerocket", 11); #endif /* the event loop */ n = 0; while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_sul_cancel(&sul_timeout); lws_context_destroy(context); bail: lwsl_user(" good: %d / %d budget, pass limit %d\n", good, orig_budget, predicted_good); if (good < predicted_good) bad = 1; if ((p = lws_cmdline_option(argc, argv, "--expected-exit"))) expected = atoi(p); if (bad == expected) { lwsl_user("Completed: OK (seen expected %d)\n", expected); return 0; } else lwsl_err("Completed: failed: exit %d, expected %d\n", bad, expected); return 1; } libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-testsfail/000077500000000000000000000000001476025525100311605ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-testsfail/CMakeLists.txt000066400000000000000000000073241476025525100337260ustar00rootroot00000000000000project(lws-minimal-secure-streams-testsfail C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-secure-streams-testsfail) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS 1 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY 0 requirements) require_lws_config(LWS_WITH_SYS_STATE 1 requirements) if (requirements) add_executable(${SAMP} minimal-secure-streams-testsfail.c) find_program(VALGRIND "valgrind") if (LWS_CTEST_INTERNET_AVAILABLE AND NOT WIN32) if (VALGRIND) add_test(NAME ss-tf COMMAND ${VALGRIND} --tool=memcheck --leak-check=yes --num-callers=20 $) else() add_test(NAME ss-tf COMMAND lws-minimal-secure-streams-testsfail) endif() set_tests_properties(ss-tf PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/secure-streams/minimal-secure-streams-testsfail TIMEOUT 440) if (HAS_LWS_WITH_SECURE_STREAMS_PROXY_API OR LWS_WITH_SECURE_STREAMS_PROXY_API) # # Define test dep to bring up and take down the test # proxy # if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") # uds abstract namespace for linux set(CTEST_SOCKET_PATH "@ctest-ssptf-$ENV{SAI_PROJECT}-$ENV{SAI_OVN}") else() # filesystem socket for others set(CTEST_SOCKET_PATH "/tmp/ctest-ssptf-$ENV{SAI_PROJECT}-$ENV{SAI_OVN}") endif() add_test(NAME st_sstfproxy COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background.sh sstfproxy $ -i ${CTEST_SOCKET_PATH} -d1039) set_tests_properties(st_sstfproxy PROPERTIES WORKING_DIRECTORY . FIXTURES_SETUP sstfproxy TIMEOUT 800) add_test(NAME ki_sstfproxy COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background-kill.sh sstfproxy $ -i ${CTEST_SOCKET_PATH}) set_tests_properties(ki_sstfproxy PROPERTIES FIXTURES_CLEANUP sstfproxy) # # the client part that will connect to the proxy # if (VALGRIND) add_test(NAME sspc-minimaltf COMMAND ${VALGRIND} --tool=memcheck --leak-check=yes --num-callers=20 $ -i +${CTEST_SOCKET_PATH} -d1039) else() add_test(NAME sspc-minimaltf COMMAND lws-minimal-secure-streams-testsfail-client -i +${CTEST_SOCKET_PATH} -d1039) endif() set_tests_properties(sspc-minimaltf PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/secure-streams/minimal-secure-streams-testsfail FIXTURES_REQUIRED "sstfproxy" TIMEOUT 440) endif() endif() if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\ni#if defined(LWS_WITH_SECURE_STREAMS_PROXY_API)\n return 0;\n #else\n fail\n #endif\n return 0;\n}\n" HAS_LWS_WITH_SECURE_STREAMS_PROXY_API) if (HAS_LWS_WITH_SECURE_STREAMS_PROXY_API OR LWS_WITH_SECURE_STREAMS_PROXY_API) add_compile_options(-DLWS_SS_USE_SSPC) add_executable(${SAMP}-client minimal-secure-streams-testsfail.c) if (websockets_shared) target_link_libraries(${SAMP}-client websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP}-client websockets_shared) else() target_link_libraries(${SAMP}-client websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() endif() libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-testsfail/README.md000066400000000000000000000004721476025525100324420ustar00rootroot00000000000000# lws minimal secure streams The application runs some bulk and failure path tests on Secure Streams ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 --amount | Set the amount of bulk data expected, eg, --amount 23456 minimal-secure-streams-testsfail.c000066400000000000000000000636171476025525100376440ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-testsfail/* * lws-minimal-secure-streams * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * * This demonstrates various kinds of successful and failed connection * situations in order to confirm the correct states are coming. * * You can control how much bulk data is requested from the peer using * --amount xxx, the default without that is 12345 bytes. */ #include #include #include static int interrupted, tests, tests_pass, tests_fail; static lws_sorted_usec_list_t sul_next_test; static lws_state_notify_link_t nl; struct lws_context *context; size_t amount = 12345; static void tests_start_next(lws_sorted_usec_list_t *sul); /* * If the -proxy app is fulfilling our connection, then we don't need to have * the policy in the client. * * When we build with LWS_SS_USE_SSPC, the apis hook up to a proxy process over * a Unix Domain Socket. To test that, you need to separately run the * ./lws-minimal-secure-streams-proxy test app on the same machine. */ #if !defined(LWS_SS_USE_SSPC) static const char * const default_ss_policy = "{" "\"release\":" "\"01234567\"," "\"product\":" "\"myproduct\"," "\"schema-version\":" "1," #if defined(VIA_LOCALHOST_SOCKS) "\"via-socks5\":" "\"127.0.0.1:1080\"," #endif "\"retry\": [" /* named backoff / retry strategies */ "{\"default\": {" "\"backoff\": [ 1000, 1000, 1000, 1000" "]," "\"conceal\":" "4," "\"jitterpc\":" "20," "\"svalidping\":" "30," "\"svalidhup\":" "35" "}}" "]," "\"certs\": [" /* named individual certificates in BASE64 DER */ /* * Let's Encrypt certs for warmcat.com / libwebsockets.org * * We fetch the real policy from there using SS and switch to * using that. */ "{\"isrg_root_x1\": \"" "MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw" "TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh" "cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4" "WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu" "ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY" "MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc" "h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+" "0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U" "A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW" "T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH" "B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC" "B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv" "KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn" "OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn" "jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw" "qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI" "rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV" "HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq" "hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL" "ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ" "3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK" "NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5" "ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur" "TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC" "jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc" "oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq" "4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA" "mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d" "emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=" "\"},{" "\"digicert_global_root_g2\": \"MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7K" "GSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMR" "GlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDE" "xdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxM" "TUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxG" "TAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb" "2JhbCBSb290IEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNN" "Nx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpim" "n7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kq" "bitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauVB" "JVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdz" "XOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FD" "KZJobq7nMWxM4MphQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/" "wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNA" "QELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQ" "oQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98" "kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8" "PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgR" "PTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3f" "e0Dkhvld1927jyNxF1WW6LZZm6zNTflMrY=\"" "}, {" "\"digicert_global_ca_g2\": \"MIIEizCCA3OgAwIBAgIQDI7gyQ1" "qiRWIBAYe4kH5rzANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQGEwJVUzEVMBMGA1U" "EChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgY" "DVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0" "yODA4MDExMjAwMDBaMEQxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCB" "JbmMxHjAcBgNVBAMTFURpZ2lDZXJ0IEdsb2JhbCBDQSBHMjCCASIwDQYJKoZIhvc" "NAQEBBQADggEPADCCAQoCggEBANNIfL7zBYZdW9UvhU5L4IatFaxhz1uvPmoKR/u" "adpFgC4przc/cV35gmAvkVNlW7SHMArZagV+Xau4CLyMnuG3UsOcGAngLH1ypmTb" "+u6wbBfpXzYEQQGfWMItYNdSWYb7QjHqXnxr5IuYUL6nG6AEfq/gmD6yOTSwyOR2" "Bm40cZbIc22GoiS9g5+vCShjEbyrpEJIJ7RfRACvmfe8EiRROM6GyD5eHn7OgzS+" "8LOy4g2gxPR/VSpAQGQuBldYpdlH5NnbQtwl6OErXb4y/E3w57bqukPyV93t4CTZ" "edJMeJfD/1K2uaGvG/w/VNfFVbkhJ+Pi474j48V4Rd6rfArMCAwEAAaOCAVowggF" "WMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgGGMDQGCCsGAQUFBwE" "BBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMHsGA1U" "dHwR0MHIwN6A1oDOGMWh0dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEd" "sb2JhbFJvb3RHMi5jcmwwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9" "EaWdpQ2VydEdsb2JhbFJvb3RHMi5jcmwwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAY" "IKwYBBQUHAgEWHGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwHQYDVR0OBBY" "EFCRuKy3QapJRUSVpAaqaR6aJ50AgMB8GA1UdIwQYMBaAFE4iVCAYlebjbuYP+vq" "5Eu0GF485MA0GCSqGSIb3DQEBCwUAA4IBAQALOYSR+ZfrqoGvhOlaOJL84mxZvzb" "IRacxAxHhBsCsMsdaVSnaT0AC9aHesO3ewPj2dZ12uYf+QYB6z13jAMZbAuabeGL" "J3LhimnftiQjXS8X9Q9ViIyfEBFltcT8jW+rZ8uckJ2/0lYDblizkVIvP6hnZf1W" "ZUXoOLRg9eFhSvGNoVwvdRLNXSmDmyHBwW4coatc7TlJFGa8kBpJIERqLrqwYEle" "sA8u49L3KJg6nwd3jM+/AVTANlVlOnAM2BvjAjxSZnE0qnsHhfTuvcqdFuhOWKU4" "Z0BqYBvQ3lBetoxi6PrABDJXWKTUgNX31EGDk92hiHuwZ4STyhxGs6QiA\"" "}," "{\"amazon_root_ca_1\": \"MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikP" "mljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1" "hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFo" "XDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjE" "ZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggE" "PADCCAQoCggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtO" "gQ3pOsqTQNroBvo3bSMgHFzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peV" "KVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+Uh" "nMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4c" "X8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34Gf" "ID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAU" "wAwEB/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7I" "QTgoIMA0GCSqGSIb3DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5" "IpDB/G/wkjUu0yKGX9rbxenDIU5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZ" "ERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2" "V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR" "1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob" "2xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5\"}" "]," "\"trust_stores\": [" /* named cert chains */ "{" "\"name\": \"api_amazon_com\"," "\"stack\": [\"digicert_global_ca_g2\", \"digicert_global_root_g2\"]" "}, { \"name\": \"arca1\", \"stack\": [\"amazon_root_ca_1\"]}," "{" "\"name\": \"le_via_isrg\"," "\"stack\": [" "\"isrg_root_x1\"" "]" "}" "]," "\"s\": [" "{\"api_amazon_com_auth\": {" "\"endpoint\": \"api.amazon.com\"," "\"port\": 443," "\"protocol\": \"h1\"," "\"http_method\": \"POST\"," "\"http_url\": \"auth/o2/token\"," "\"plugins\": []," "\"opportunistic\": true," "\"tls\": true," "\"h2q_oflow_txcr\": true," "\"http_www_form_urlencoded\": true," "\"http_no_content_length\": true," "\"retry\": \"default\"," "\"tls_trust_store\": \"api_amazon_com\"" "}},{" /* * Just get a 200 from httpbin.org * on h1:80, h1:443 and h2:443 * * sanity check that we're working at all */ "\"t_h1\": {" "\"endpoint\": \"httpbin.org\"," "\"port\": 80," "\"protocol\": \"h1\"," "\"http_method\": \"GET\"," "\"http_url\": \"/status/200\"," "\"opportunistic\": true," "\"retry\": \"default\"" "}},{" "\"t_h1_tls\": {" "\"endpoint\": \"httpbin.org\"," "\"port\": 443," "\"protocol\": \"h1\"," "\"http_method\": \"GET\"," "\"http_url\": \"/status/200\"," "\"tls\": true," "\"opportunistic\": true," "\"retry\": \"default\"," "\"tls_trust_store\": \"arca1\"" "}},{" "\"t_h2_tls\": {" "\"endpoint\": \"httpbin.org\"," "\"port\": 443," "\"protocol\": \"h2\"," "\"http_method\": \"GET\"," "\"http_url\": \"/status/200\"," "\"tls\": true," "\"nghttp2_quirk_end_stream\": true," "\"h2q_oflow_txcr\": true," "\"opportunistic\": true," "\"retry\": \"default\"," "\"tls_trust_store\": \"arca1\"" "}},{" /* * 10s delayed response from httpbin.org * on h1:80, h1:443 and h2:443 * * used to trigger timeout testing */ "\"d_h1\": {" "\"endpoint\": \"httpbin.org\"," "\"port\": 80," "\"protocol\": \"h1\"," "\"http_method\": \"GET\"," "\"http_url\": \"/delay/10\"," "\"opportunistic\": true," "\"retry\": \"default\"" "}},{" "\"d_h1_tls\": {" "\"endpoint\": \"httpbin.org\"," "\"port\": 443," "\"protocol\": \"h1\"," "\"http_method\": \"GET\"," "\"http_url\": \"/delay/10\"," "\"tls\": true," "\"opportunistic\": true," "\"retry\": \"default\"," "\"tls_trust_store\": \"arca1\"" "}},{" "\"d_h2_tls\": {" "\"endpoint\": \"httpbin.org\"," "\"port\": 443," "\"protocol\": \"h2\"," "\"http_method\": \"GET\"," "\"http_url\": \"/delay/10\"," "\"tls\": true," "\"nghttp2_quirk_end_stream\": true," "\"h2q_oflow_txcr\": true," "\"opportunistic\": true," "\"retry\": \"default\"," "\"tls_trust_store\": \"arca1\"" "}},{" /* * get NXDOMAIN for bogus.nope * on h1:80, h1:443 and h2:443 * * Triggers unreachable and eventually all_retries_failed */ "\"nxd_h1\": {" "\"endpoint\": \"bogus.nope\"," "\"port\": 80," "\"protocol\": \"h1\"," "\"http_method\": \"GET\"," "\"http_url\": \"/status/200\"," "\"opportunistic\": true," "\"retry\": \"default\"" "}},{" "\"nxd_h1_tls\": {" "\"endpoint\": \"bogus.nope\"," "\"port\": 443," "\"protocol\": \"h1\"," "\"http_method\": \"GET\"," "\"http_url\": \"/status/200\"," "\"tls\": true," "\"opportunistic\": true," "\"retry\": \"default\"," "\"tls_trust_store\": \"arca1\"" "}},{" "\"nxd_h2_tls\": {" "\"endpoint\": \"bogus.nope\"," "\"port\": 443," "\"protocol\": \"h2\"," "\"http_method\": \"GET\"," "\"http_url\": \"/status/200\"," "\"tls\": true," "\"nghttp2_quirk_end_stream\": true," "\"h2q_oflow_txcr\": true," "\"opportunistic\": true," "\"retry\": \"default\"," "\"tls_trust_store\": \"arca1\"" "}},{" /* * bulk payload transfer from httpbin.org * on h1:80, h1:443 and h2:443 * * Sanity check larger payload */ "\"bulk_h1\": {" "\"endpoint\": \"httpbin.org\"," "\"port\": 80," "\"protocol\": \"h1\"," "\"http_method\": \"GET\"," "\"http_url\": \"range/${amount}\"," "\"metadata\": [{" "\"amount\": \"\"" "}]," "\"opportunistic\": true," "\"retry\": \"default\"" "}},{" "\"bulk_h1_tls\": {" "\"endpoint\": \"httpbin.org\"," "\"port\": 443," "\"protocol\": \"h1\"," "\"http_method\": \"GET\"," "\"http_url\": \"range/${amount}\"," "\"metadata\": [{" "\"amount\": \"\"" "}]," "\"tls\": true," "\"opportunistic\": true," "\"retry\": \"default\"," "\"tls_trust_store\": \"arca1\"" "}},{" "\"bulk_h2_tls\": {" "\"endpoint\": \"httpbin.org\"," "\"port\": 443," "\"protocol\": \"h2\"," "\"http_method\": \"GET\"," "\"http_url\": \"range/${amount}\"," "\"metadata\": [{" "\"amount\": \"\"" "}]," "\"tls\": true," "\"nghttp2_quirk_end_stream\": true," "\"h2q_oflow_txcr\": true," "\"opportunistic\": true," "\"retry\": \"default\"," "\"tls_trust_store\": \"arca1\"" "}},{" /* * Various kinds of tls failure * * hostname.badcert.warmcat.com: serves valid cert but for * warmcat.com * * warmcat.com:446: serves valid but expired cert * * I don't have an easy way to make the test for "not valid yet" * cert without root * * invalidca.badcert.warmcat.com: selfsigned cert for that * hostname */ "\"badcert_hostname\": {" "\"endpoint\": \"hostname.badcert.warmcat.com\"," "\"port\": 443," "\"protocol\": \"h1\"," "\"http_method\": \"GET\"," "\"http_url\": \"/\"," "\"tls\": true," "\"opportunistic\": true," "\"retry\": \"default\"," "\"tls_trust_store\": \"le_via_isrg\"" "}},{" "\"badcert_expired\": {" "\"endpoint\": \"warmcat.com\"," "\"port\": 446," "\"protocol\": \"h1\"," "\"http_method\": \"GET\"," "\"http_url\": \"/\"," "\"tls\": true," "\"opportunistic\": true," "\"retry\": \"default\"," "\"tls_trust_store\": \"le_via_isrg\"" "}},{" "\"badcert_selfsigned\": {" "\"endpoint\": \"invalidca.badcert.warmcat.com\"," "\"port\": 443," "\"protocol\": \"h1\"," "\"http_method\": \"GET\"," "\"http_url\": \"/\"," "\"tls\": true," "\"nghttp2_quirk_end_stream\": true," "\"h2q_oflow_txcr\": true," "\"opportunistic\": true," "\"retry\": \"default\"," "\"tls_trust_store\": \"le_via_isrg\"" "}}" "]}" ; #endif /* * This is the sequence of test streams we are going to create, the ss timeout, * and a description of what we want to see to understand the test passed, or * failed. If the test hits destruction without making a explicit pass or fail * decision before, that's a fail. Or, depending on what state we put in * .must_see, we can count a state like UNREACHABLE as a pass. */ struct tests_seq { const char *name; const char *streamtype; uint64_t timeout_us; lws_ss_constate_t must_see; unsigned int mask_unexpected; size_t eom_pass; } tests_seq[] = { /* * We just get a 200 from httpbin.org as a sanity check first */ { "h1:80 just get 200", "t_h1", 5 * LWS_US_PER_SEC, LWSSSCS_QOS_ACK_REMOTE, (1 << LWSSSCS_TIMEOUT) | (1 << LWSSSCS_QOS_NACK_REMOTE) | (1 << LWSSSCS_ALL_RETRIES_FAILED), 0 }, { "h1:443 just get 200", "t_h1_tls", 5 * LWS_US_PER_SEC, LWSSSCS_QOS_ACK_REMOTE, (1 << LWSSSCS_TIMEOUT) | (1 << LWSSSCS_QOS_NACK_REMOTE) | (1 << LWSSSCS_ALL_RETRIES_FAILED), 0 }, { "h2:443 just get 200", "t_h2_tls", 5 * LWS_US_PER_SEC, LWSSSCS_QOS_ACK_REMOTE, (1 << LWSSSCS_TIMEOUT) | (1 << LWSSSCS_QOS_NACK_REMOTE) | (1 << LWSSSCS_ALL_RETRIES_FAILED), 0 }, /* * We arranged that the server will delay 10s before sending the * response, but set our ss timeout for 5s. So we expect to see * our timeout and not an ACK / 200. */ { "h1:80 timeout after connection", "d_h1", 5 * LWS_US_PER_SEC, LWSSSCS_TIMEOUT, (1 << LWSSSCS_QOS_ACK_REMOTE) | (1 << LWSSSCS_QOS_NACK_REMOTE) | (1 << LWSSSCS_ALL_RETRIES_FAILED), 0 }, { "h1:443 timeout after connection", "d_h1_tls", 5 * LWS_US_PER_SEC, LWSSSCS_TIMEOUT, (1 << LWSSSCS_QOS_ACK_REMOTE) | (1 << LWSSSCS_QOS_NACK_REMOTE) | (1 << LWSSSCS_ALL_RETRIES_FAILED), 0 }, { "h2:443 timeout after connection", "d_h2_tls", 5 * LWS_US_PER_SEC, LWSSSCS_TIMEOUT, (1 << LWSSSCS_QOS_ACK_REMOTE) | (1 << LWSSSCS_QOS_NACK_REMOTE) | (1 << LWSSSCS_ALL_RETRIES_FAILED), 0 }, /* * We are talking to a nonexistant dns address "bogus.nope". We expect * in each case to hear that is unreachable, before any ss timeout. */ { "h1:80 NXDOMAIN", "nxd_h1", 65 * LWS_US_PER_SEC, LWSSSCS_UNREACHABLE, (1 << LWSSSCS_QOS_ACK_REMOTE) | (1 << LWSSSCS_QOS_NACK_REMOTE) | (1 << LWSSSCS_TIMEOUT) | (1 << LWSSSCS_ALL_RETRIES_FAILED), 0 }, { "h1:443 NXDOMAIN", "nxd_h1_tls", 35 * LWS_US_PER_SEC, LWSSSCS_UNREACHABLE, (1 << LWSSSCS_QOS_ACK_REMOTE) | (1 << LWSSSCS_QOS_NACK_REMOTE) | (1 << LWSSSCS_TIMEOUT) | (1 << LWSSSCS_ALL_RETRIES_FAILED), 0 }, { "h2:443 NXDOMAIN", "nxd_h2_tls", 35 * LWS_US_PER_SEC, LWSSSCS_UNREACHABLE, (1 << LWSSSCS_QOS_ACK_REMOTE) | (1 << LWSSSCS_QOS_NACK_REMOTE) | (1 << LWSSSCS_TIMEOUT) | (1 << LWSSSCS_ALL_RETRIES_FAILED), 0 }, /* * We are talking to a nonexistant dns address "bogus.nope". We expect * that if we stick around longer, retries will also end up all failing. * We might see the timeout depending on blocking getaddrinfo * behaviour. */ { "h1:80 NXDOMAIN exhaust retries", "nxd_h1", 65 * LWS_US_PER_SEC, LWSSSCS_ALL_RETRIES_FAILED, (1 << LWSSSCS_QOS_ACK_REMOTE) | (1 << LWSSSCS_QOS_NACK_REMOTE), 0 }, { "h1:443 NXDOMAIN exhaust retries", "nxd_h1_tls", 65 * LWS_US_PER_SEC, LWSSSCS_ALL_RETRIES_FAILED, (1 << LWSSSCS_QOS_ACK_REMOTE) | (1 << LWSSSCS_QOS_NACK_REMOTE), 0 }, { "h2:443 NXDOMAIN exhaust retries", "nxd_h2_tls", 65 * LWS_US_PER_SEC, LWSSSCS_ALL_RETRIES_FAILED, (1 << LWSSSCS_QOS_ACK_REMOTE) | (1 << LWSSSCS_QOS_NACK_REMOTE), 0 }, /* * Let's request some bulk data from httpbin.org */ { "h1:80 read bulk", "bulk_h1", 5 * LWS_US_PER_SEC, LWSSSCS_QOS_ACK_REMOTE, (1 << LWSSSCS_TIMEOUT) | (1 << LWSSSCS_QOS_NACK_REMOTE) | (1 << LWSSSCS_ALL_RETRIES_FAILED), 12345 }, { "h1:443 read bulk", "bulk_h1_tls", 5 * LWS_US_PER_SEC, LWSSSCS_QOS_ACK_REMOTE, (1 << LWSSSCS_TIMEOUT) | (1 << LWSSSCS_QOS_NACK_REMOTE) | (1 << LWSSSCS_ALL_RETRIES_FAILED), 12345 }, { "h2:443 read bulk", "bulk_h2_tls", 5 * LWS_US_PER_SEC, LWSSSCS_QOS_ACK_REMOTE, (1 << LWSSSCS_TIMEOUT) | (1 << LWSSSCS_QOS_NACK_REMOTE) | (1 << LWSSSCS_ALL_RETRIES_FAILED), 12345 }, /* * Let's fail at the tls negotiation various ways */ { "h1:badcert_hostname", "badcert_hostname", 6 * LWS_US_PER_SEC, LWSSSCS_ALL_RETRIES_FAILED, (1 << LWSSSCS_QOS_NACK_REMOTE), 0 }, { "h1:badcert_expired", "badcert_expired", 6 * LWS_US_PER_SEC, LWSSSCS_ALL_RETRIES_FAILED, (1 << LWSSSCS_QOS_NACK_REMOTE), 0 }, { "h1:badcert_selfsigned", "badcert_selfsigned", 6 * LWS_US_PER_SEC, LWSSSCS_ALL_RETRIES_FAILED, (1 << LWSSSCS_QOS_NACK_REMOTE), 0 }, }; typedef struct myss { struct lws_ss_handle *ss; void *opaque_data; size_t rx_seen; char result_reported; } myss_t; /* secure streams payload interface */ static lws_ss_state_return_t myss_rx(void *userobj, const uint8_t *buf, size_t len, int flags) { myss_t *m = (myss_t *)userobj; m->rx_seen += len; if (flags & LWSSS_FLAG_EOM) lwsl_notice("%s: %s len %d, fl %d, received %u bytes\n", __func__, lws_ss_tag(m->ss), (int)len, flags, (unsigned int)m->rx_seen); return 0; } static lws_ss_state_return_t myss_tx(void *userobj, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len, int *flags) { //myss_t *m = (myss_t *)userobj; /* in this example, we don't send stuff */ return LWSSSSRET_TX_DONT_SEND; } static lws_ss_state_return_t myss_state(void *userobj, void *sh, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { myss_t *m = (myss_t *)userobj; struct tests_seq *curr_test = ( struct tests_seq *)m->opaque_data; char buf[8]; size_t sl; lwsl_info("%s: %s: %s (%d), ord 0x%x\n", __func__, lws_ss_tag(m->ss), lws_ss_state_name((int)state), state, (unsigned int)ack); if (curr_test->mask_unexpected & (1u << state)) { /* * We have definitively failed on an unexpected state received */ lwsl_warn("%s: failing on unexpected state %s\n", __func__, lws_ss_state_name((int)state)); fail: m->result_reported = 1; tests_fail++; /* we'll start the next test next time around the event loop */ lws_sul_schedule(context, 0, &sul_next_test, tests_start_next, 1); return LWSSSSRET_OK; } if (state == curr_test->must_see) { if (curr_test->eom_pass != m->rx_seen) { lwsl_notice("%s: failing on rx %d, expected %d\n", __func__, (int)m->rx_seen, (int)curr_test->eom_pass); goto fail; } lwsl_warn("%s: saw expected state %s\n", __func__, lws_ss_state_name((int)state)); m->result_reported = 1; tests_pass++; /* we'll start the next test next time around the event loop */ lws_sul_schedule(context, 0, &sul_next_test, tests_start_next, 1); return LWSSSSRET_OK; } switch (state) { case LWSSSCS_CREATING: lws_ss_start_timeout(m->ss, (unsigned int)(curr_test->timeout_us / LWS_US_PER_MS)); if (curr_test->eom_pass) { sl = (size_t)lws_snprintf(buf, sizeof(buf), "%u", (unsigned int)curr_test->eom_pass); if (lws_ss_set_metadata(m->ss, "amount", buf, sl)) return LWSSSSRET_DISCONNECT_ME; } return lws_ss_client_connect(m->ss); case LWSSSCS_DESTROYING: if (!m->result_reported) { lwsl_user("%s: failing on unexpected destruction\n", __func__); tests_fail++; /* we'll start the next test next time around the event loop */ lws_sul_schedule(context, 0, &sul_next_test, tests_start_next, 1); } break; default: break; } return LWSSSSRET_OK; } static void tests_start_next(lws_sorted_usec_list_t *sul) { struct tests_seq *ts; lws_ss_info_t ssi; static struct lws_ss_handle *h; /* destroy the old one */ if (h) { lwsl_info("%s: destroying previous stream\n", __func__); lws_ss_destroy(&h); } if ((unsigned int)tests >= LWS_ARRAY_SIZE(tests_seq)) { lwsl_notice("Completed all tests\n"); interrupted = 1; return; } ts = &tests_seq[tests++]; /* Create the next test stream */ memset(&ssi, 0, sizeof(ssi)); ssi.handle_offset = offsetof(myss_t, ss); ssi.opaque_user_data_offset = offsetof(myss_t, opaque_data); ssi.rx = myss_rx; ssi.tx = myss_tx; ssi.state = myss_state; ssi.user_alloc = sizeof(myss_t); ssi.streamtype = ts->streamtype; lwsl_user("%s: %d: %s\n", __func__, tests, ts->name); if (lws_ss_create(context, 0, &ssi, ts, &h, NULL, NULL)) { lwsl_err("%s: failed to create secure stream\n", __func__); tests_fail++; interrupted = 1; return; } } static int app_system_state_nf(lws_state_manager_t *mgr, lws_state_notify_link_t *link, int current, int target) { switch (target) { case LWS_SYSTATE_OPERATIONAL: if (current == LWS_SYSTATE_OPERATIONAL) /* we'll start the next test next time around the event loop */ lws_sul_schedule(context, 0, &sul_next_test, tests_start_next, 1); break; } return 0; } static lws_state_notify_link_t * const app_notifier_list[] = { &nl, NULL }; #if defined(LWS_WITH_SYS_METRICS) static int my_metric_report(lws_metric_pub_t *mp) { lws_metric_bucket_t *sub = mp->u.hist.head; char buf[192]; do { if (lws_metrics_format(mp, &sub, buf, sizeof(buf))) lwsl_user("%s: %s\n", __func__, buf); } while ((mp->flags & LWSMTFL_REPORT_HIST) && sub); /* 0 = leave metric to accumulate, 1 = reset the metric */ return 1; } static const lws_system_ops_t system_ops = { .metric_report = my_metric_report, }; #endif static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; const char *pp; signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); lws_cmdline_option_handle_builtin(argc, argv, &info); if ((pp = lws_cmdline_option(argc, argv, "--amount"))) amount = (size_t)atoi(pp); /* set the expected payload for the bulk-related tests to amount */ tests_seq[12].eom_pass = tests_seq[13].eom_pass = tests_seq[14].eom_pass = amount; #if !defined(LWS_SS_USE_SSPC) // puts(default_ss_policy); #endif lwsl_user("LWS secure streams error path tests [-d]\n"); info.fd_limit_per_thread = 1 + 16 + 1; info.port = CONTEXT_PORT_NO_LISTEN; #if defined(LWS_SS_USE_SSPC) info.protocols = lws_sspc_protocols; { const char *p; /* connect to ssproxy via UDS by default, else via * tcp connection to this port */ if ((p = lws_cmdline_option(argc, argv, "-p"))) info.ss_proxy_port = (uint16_t)atoi(p); /* UDS "proxy.ss.lws" in abstract namespace, else this socket * path; when -p given this can specify the network interface * to bind to */ if ((p = lws_cmdline_option(argc, argv, "-i"))) info.ss_proxy_bind = p; /* if -p given, -a specifies the proxy address to connect to */ if ((p = lws_cmdline_option(argc, argv, "-a"))) info.ss_proxy_address = p; } #else info.pss_policies_json = default_ss_policy; info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_H2_JUST_FIX_WINDOW_UPDATE_OVERFLOW | LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; #endif /* integrate us with lws system state management when context created */ nl.name = "app"; nl.notify_cb = app_system_state_nf; info.register_notifier_list = app_notifier_list; #if defined(LWS_WITH_SYS_METRICS) info.system_ops = &system_ops; #if defined(LWS_WITH_SECURE_STREAMS_PROXY_API) info.metrics_prefix = "ssmex"; #endif #endif /* create the context */ context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } /* the event loop */ do { } while(lws_service(context, 0) >= 0 && !interrupted); lws_context_destroy(context); lwsl_user("Completed: %s (pass %d, fail %d)\n", tests_pass == tests && !tests_fail ? "OK" : "failed", tests_pass, tests_fail); return !(tests_pass == tests && !tests_fail); } libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-threads/000077500000000000000000000000001476025525100306145ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-threads/CMakeLists.txt000066400000000000000000000116261476025525100333620ustar00rootroot00000000000000project(lws-minimal-secure-streams-threads C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(requirements 1) require_pthreads(requirements) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS 1 requirements) require_lws_config(LWS_WITH_SYS_SMD 1 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY 0 requirements) require_lws_config(LWS_WITH_SYS_STATE 1 requirements) if (requirements AND NOT WIN32) # win32 has problems with pthreads.h and timespec struct redef add_executable(${PROJECT_NAME} minimal-secure-streams-threads.c) find_program(VALGRIND "valgrind") if (LWS_CTEST_INTERNET_AVAILABLE AND NOT WIN32) if (VALGRIND) add_test(NAME ss-threads COMMAND ${VALGRIND} --tool=memcheck --leak-check=yes --num-callers=20 $) else() add_test(NAME ss-threads COMMAND lws-minimal-secure-streams-threads) endif() set_tests_properties(ss-threads PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/secure-streams/minimal-secure-streams-threads TIMEOUT 10) endif() if (websockets_shared) target_link_libraries(${PROJECT_NAME} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${PROJECT_NAME} websockets_shared) else() target_link_libraries(${PROJECT_NAME} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\ni#if defined(LWS_WITH_SECURE_STREAMS_PROXY_API)\n return 0;\n #else\n fail\n #endif\n return 0;\n}\n" HAS_LWS_WITH_SECURE_STREAMS_PROXY_API) if (HAS_LWS_WITH_SECURE_STREAMS_PROXY_API OR LWS_WITH_SECURE_STREAMS_PROXY_API) add_compile_options(-DLWS_SS_USE_SSPC) add_executable(${PROJECT_NAME}-client minimal-secure-streams-threads.c) if (websockets_shared) target_link_libraries(${PROJECT_NAME}-client websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${PROJECT_NAME}-client websockets_shared) else() target_link_libraries(${PROJECT_NAME}-client websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() # # Define test dep to bring up and take down the test # proxy # if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") # uds abstract namespace for linux set(CTEST_SOCKET_PATH "@ctest-sspthreads_sspc-$ENV{SAI_PROJECT}-$ENV{SAI_OVN}") else() # filesystem socket for others set(CTEST_SOCKET_PATH "/tmp/ctest-sspthreads_sspc-$ENV{SAI_PROJECT}-$ENV{SAI_OVN}") endif() add_test(NAME st_ssprxthreads_sspc COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background.sh ssproxythreads_sspc $ -i ${CTEST_SOCKET_PATH} -d1039) set_tests_properties(st_ssprxthreads_sspc PROPERTIES WORKING_DIRECTORY . FIXTURES_SETUP ssproxythreads_sspc TIMEOUT 800) add_test(NAME ki_ssprxthreads_sspc COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background-kill.sh ssproxythreads_sspc $ -i ${CTEST_SOCKET_PATH} -d1039) set_tests_properties(ki_ssprxthreads_sspc PROPERTIES FIXTURES_CLEANUP ssproxythreads_sspc) # # the client part that will connect to the proxy # if (VALGRIND) message("testing via valgrind") add_test(NAME sspcthreads_sspc COMMAND ${VALGRIND} --tool=memcheck --leak-check=yes --num-callers=20 $ -i +${CTEST_SOCKET_PATH}) else() add_test(NAME sspcthreads_sspc COMMAND lws-minimal-secure-streams-threads-client -i +${CTEST_SOCKET_PATH}) endif() set_tests_properties(sspcthreads_sspc PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/secure-streams/minimal-secure-streams-threads FIXTURES_REQUIRED "ssproxythreads_sspc" TIMEOUT 80) # # Define test dep to bring up and take down the test # proxy # if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") # uds abstract namespace for linux set(CTEST_SOCKET_PATH "@ctest-mul-sspthreads_sspc-$ENV{SAI_PROJECT}-$ENV{SAI_OVN}") else() # filesystem socket for others set(CTEST_SOCKET_PATH "/tmp/ctest-mul-sspthreads_sspc-$ENV{SAI_PROJECT}-$ENV{SAI_OVN}") endif() add_test(NAME st_mulssprxthreads_sspc COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background.sh mulssproxythreads_sspc $ -i ${CTEST_SOCKET_PATH} -d1039) set_tests_properties(st_mulssprxthreads_sspc PROPERTIES WORKING_DIRECTORY . FIXTURES_SETUP mulssproxythreads_sspc TIMEOUT 800) add_test(NAME ki_mulssprxthreads_sspc COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background-kill.sh mulssproxythreads_sspc $ -i ${CTEST_SOCKET_PATH} -d1039) set_tests_properties(ki_mulssprxthreads_sspc PROPERTIES FIXTURES_CLEANUP mulssproxythreads_sspc) endif() endif() libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-threads/README.md000066400000000000000000000012201476025525100320660ustar00rootroot00000000000000# lws minimal secure streams threads This application creates a thread and calls `lws_cancel_service()` at 10Hz. It creates a Secure Stream and checks that it is getting the `LWSSSCS_EVENT_WAIT_CANCELLED` state for each `lws_cancel_service()`. It also demonstrates how to protect a shared data area between the thread(s) and the lws event loop thread to put data there that describes what the thread wants the service loop to do. It exits after 3s with a 0 return code if the SS saw the expected amount of messages. ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 minimal-secure-streams-threads.c000066400000000000000000000157101476025525100367230ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams-threads/* * lws-minimal-secure-streams-threads * * Written in 2010-2021 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * * This demonstrates how other threads can wake the lws event loop and ask it * to do things via lws_cancel_service(), notifying Secure Streams using the * LWSSSCS_EVENT_WAIT_CANCELLED state callback. * * Because of what we're testing, we don't actually connect the SS just create * it and wait for the states we are testing for to come at 10Hz. * * We run the test for 3s and check we got an appropriate amount of wakes * to call it a success. * * You can use the same pattern to have any amount of shared data protected by * the mutex, containing whatever the other threads want the lws event loop * thread to do for them. */ #include #include #include #include /* * Define this to cause an ss api access from a foreign thread, it will * assert. This is for testing lws, don't do this in your code. */ // #define DO_ILLEGAL_API_THREAD static int interrupted, bad = 1, finished; static lws_sorted_usec_list_t sul_timeout; static struct lws_context *context; static pthread_t pthread_spam; static int wakes, started_thread; #if defined(DO_ILLEGAL_API_THREAD) static struct lws_ss_handle *ss; /* only needed for DO_ILLEGAL_API_THREAD */ #endif /* the data shared between the spam thread and the lws event loop */ static pthread_mutex_t lock_shared; static int shared_counter; #if !defined(LWS_SS_USE_SSPC) static const char * const default_ss_policy = "{" "\"schema-version\":1," "\"s\": [" "{" "\"mintest\": {" "\"endpoint\": \"connectivitycheck.android.com\"," "\"http_url\": \"generate_204\"," "\"port\": 80," "\"protocol\": \"h1\"," "\"http_method\": \"GET\"," "\"opportunistic\": true," "\"http_expect\": 204," "\"http_fail_redirect\": true" "}" "}" "]" "}" ; #endif typedef struct myss { struct lws_ss_handle *ss; void *opaque_data; /* ... application specific state ... */ } myss_t; static void * thread_spam(void *d) { do { pthread_mutex_lock(&lock_shared); /* --------- shared lock { */ /* * prepare the shared data area to indicate whatever it is that * we want doing on the main event loop. In this case, we just * bump a counter, but it can be any amount of data prepared, * eg, whole info struct for a connection we want. */ shared_counter++; lwsl_notice("%s: cancelling wait from spam thread: %d\n", __func__, shared_counter); lws_cancel_service(context); #if defined(DO_ILLEGAL_API_THREAD) /* * ILLEGAL... * We cannot call any other lws api from a foreign thread */ if (ss) lws_ss_request_tx(ss); #endif pthread_mutex_unlock(&lock_shared); /* } shared lock ------- */ usleep(100000); /* wait 100ms and signal main thread again */ } while (!finished); pthread_exit(NULL); return NULL; } static lws_ss_state_return_t myss_state(void *userobj, void *h_src, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { // myss_t *m = (myss_t *)userobj; void *retval; switch (state) { case LWSSSCS_CREATING: if (pthread_create(&pthread_spam, NULL, thread_spam, NULL)) { lwsl_err("thread creation failed\n"); return LWSSSSRET_DESTROY_ME; } started_thread = 1; break; case LWSSSCS_DESTROYING: finished = 1; if (started_thread) pthread_join(pthread_spam, &retval); break; case LWSSSCS_EVENT_WAIT_CANCELLED: pthread_mutex_lock(&lock_shared); /* --------- shared lock { */ lwsl_notice("%s: LWSSSCS_EVENT_WAIT_CANCELLED: %d, shared: %d\n", __func__, ++wakes, shared_counter); pthread_mutex_unlock(&lock_shared); /* } shared lock ------- */ break; default: break; } return LWSSSSRET_OK; } static const lws_ss_info_t ssi_lws_threads = { .handle_offset = offsetof(myss_t, ss), .opaque_user_data_offset = offsetof(myss_t, opaque_data), /* we don't actually do any rx or tx in this test */ .state = myss_state, .user_alloc = sizeof(myss_t), .streamtype = "mintest", .manual_initial_tx_credit = 0, }; static void sul_timeout_cb(lws_sorted_usec_list_t *sul) { lwsl_notice("%s: test finishing\n", __func__); interrupted = 1; } static void sigint_handler(int sig) { interrupted = 1; } static int system_notify_cb(lws_state_manager_t *mgr, lws_state_notify_link_t *link, int current, int target) { if (current != LWS_SYSTATE_OPERATIONAL || target != LWS_SYSTATE_OPERATIONAL) return 0; /* the test SS.. not going to connect it, just see if the cancel_service * messages are coming */ if (lws_ss_create(context, 0, &ssi_lws_threads, NULL, #if defined(DO_ILLEGAL_API_THREAD) &ss, #else NULL, #endif NULL, NULL)) { lwsl_err("%s: failed to create secure stream\n", __func__); return -1; } /* set up the test timeout */ lws_sul_schedule(context, 0, &sul_timeout, sul_timeout_cb, 3 * LWS_US_PER_SEC); return 0; } int main(int argc, const char **argv) { lws_state_notify_link_t notifier = { { NULL, NULL, NULL}, system_notify_cb, "app" }; lws_state_notify_link_t *na[] = { ¬ifier, NULL }; struct lws_context_creation_info info; signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); lws_cmdline_option_handle_builtin(argc, argv, &info); lwsl_user("LWS Secure Streams threads test client [-d]\n"); info.fd_limit_per_thread = 1 + 6 + 1; info.port = CONTEXT_PORT_NO_LISTEN; #if !defined(LWS_SS_USE_SSPC) info.pss_policies_json = default_ss_policy; #else info.protocols = lws_sspc_protocols; { const char *p; /* connect to ssproxy via UDS by default, else via * tcp connection to this port */ if ((p = lws_cmdline_option(argc, argv, "-p"))) info.ss_proxy_port = (uint16_t)atoi(p); /* UDS "proxy.ss.lws" in abstract namespace, else this socket * path; when -p given this can specify the network interface * to bind to */ if ((p = lws_cmdline_option(argc, argv, "-i"))) info.ss_proxy_bind = p; /* if -p given, -a specifies the proxy address to connect to */ if ((p = lws_cmdline_option(argc, argv, "-a"))) info.ss_proxy_address = p; } #endif info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.register_notifier_list = na; /* create the context */ context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } #if defined(LWS_SS_USE_SSPC) if (!lws_create_vhost(context, &info)) { lwsl_err("%s: failed to create default vhost\n", __func__); goto bail; } #endif /* the event loop */ while (lws_service(context, 0) >= 0 && !interrupted) ; /* compare what happened with what we expect */ if (wakes > 10) /* OSX can do the usleep thread slower than 100ms */ bad = 0; lwsl_notice("wakes %d\n", wakes); #if defined(LWS_SS_USE_SSPC) bail: #endif lws_sul_cancel(&sul_timeout); lws_context_destroy(context); lwsl_user("Completed: %s\n", bad ? "failed" : "OK"); return bad; } libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams/000077500000000000000000000000001476025525100271645ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams/CMakeLists.txt000066400000000000000000000127021476025525100317260ustar00rootroot00000000000000project(lws-minimal-secure-streams C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-secure-streams) set(requirements 1) require_lws_config(LWS_ROLE_H1 1 requirements) require_lws_config(LWS_WITHOUT_CLIENT 0 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS 1 requirements) require_lws_config(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY 0 requirements) require_lws_config(LWS_WITH_SYS_STATE 1 requirements) require_lws_config(LWS_WITH_SYS_FAULT_INJECTION 1 has_fault_injection) if (requirements) add_executable(${SAMP} minimal-secure-streams.c) find_program(VALGRIND "valgrind") if (LWS_CTEST_INTERNET_AVAILABLE AND NOT WIN32) # # When running in CI, wait for a lease on the resources # before starting this test, so the server does not get # thousands of simultaneous tls connection attempts # # sai-resource holds the lease on the resources until # the time given in seconds or the sai-resource instance # exits, whichever happens first # # If running under Sai, creates a lock test called "res_sspcmin" # sai_resource(warmcat_conns 1 40 sspcmin) # # simple test not via proxy # if (VALGRIND) message("testing via valgrind") add_test(NAME ss-warmcat COMMAND ${VALGRIND} --tool=memcheck --leak-check=yes --num-callers=20 $) else() add_test(NAME ss-warmcat COMMAND lws-minimal-secure-streams) endif() set_tests_properties(ss-warmcat PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/secure-streams/minimal-secure-streams TIMEOUT 40) if (DEFINED ENV{SAI_OVN}) set_tests_properties(ss-warmcat PROPERTIES FIXTURES_REQUIRED "res_sspcmin") endif() if (has_fault_injection) if (VALGRIND) add_test(NAME ss-warmcat-fi1 COMMAND ${VALGRIND} --tool=memcheck --leak-check=yes --num-callers=20 $ --fault-injection "ss/ss_create_destroy_me" --expected-exit 1) add_test(NAME ss-warmcat-fi2 COMMAND ${VALGRIND} --tool=memcheck --leak-check=yes --num-callers=20 $ --fault-injection "ss/ss_no_streamtype_policy" --expected-exit 1) else() add_test(NAME ss-warmcat-fi1 COMMAND lws-minimal-secure-streams --fault-injection "ss/ss_create_destroy_me" --expected-exit 1) add_test(NAME ss-warmcat-fi2 COMMAND lws-minimal-secure-streams --fault-injection "ss/ss_no_streamtype_policy" --expected-exit 1) endif() set_tests_properties(ss-warmcat-fi1 ss-warmcat-fi2 PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/secure-streams/minimal-secure-streams TIMEOUT 5) endif() if (HAS_LWS_WITH_SECURE_STREAMS_PROXY_API OR LWS_WITH_SECURE_STREAMS_PROXY_API) # # Define test dep to bring up and take down the test # proxy # if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") # uds abstract namespace for linux set(CTEST_SOCKET_PATH "@ctest-ssp-$ENV{SAI_PROJECT}-$ENV{SAI_OVN}") else() # filesystem socket for others set(CTEST_SOCKET_PATH "/tmp/ctest-ssp-$ENV{SAI_PROJECT}-$ENV{SAI_OVN}") endif() add_test(NAME st_ssproxy COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background.sh ssproxy $ -i ${CTEST_SOCKET_PATH} ) set_tests_properties(st_ssproxy PROPERTIES WORKING_DIRECTORY . FIXTURES_SETUP ssproxy TIMEOUT 800) add_test(NAME ki_ssproxy COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background-kill.sh ssproxy $ -i ${CTEST_SOCKET_PATH}) set_tests_properties(ki_ssproxy PROPERTIES FIXTURES_CLEANUP ssproxy) # # the client part that will connect to the proxy # if (VALGRIND) message("testing via valgrind") add_test(NAME sspc-minimal COMMAND ${VALGRIND} --tool=memcheck --leak-check=yes --num-callers=20 $ -i +${CTEST_SOCKET_PATH}) else() add_test(NAME sspc-minimal COMMAND lws-minimal-secure-streams-client -i +${CTEST_SOCKET_PATH}) endif() set(fixlist "ssproxy") if (DEFINED ENV{SAI_OVN}) list(APPEND fixlist "res_ssproxy") endif() set_tests_properties(sspc-minimal PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/secure-streams/minimal-secure-streams FIXTURES_REQUIRED "${fixlist}" TIMEOUT 40) endif() endif() if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\ni#if defined(LWS_WITH_SECURE_STREAMS_PROXY_API)\n return 0;\n #else\n fail\n #endif\n return 0;\n}\n" HAS_LWS_WITH_SECURE_STREAMS_PROXY_API) if (HAS_LWS_WITH_SECURE_STREAMS_PROXY_API OR LWS_WITH_SECURE_STREAMS_PROXY_API) add_compile_options(-DLWS_SS_USE_SSPC) add_executable(${SAMP}-client minimal-secure-streams.c) if (websockets_shared) target_link_libraries(${SAMP}-client websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP}-client websockets_shared) else() target_link_libraries(${SAMP}-client websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() endif() libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams/README.md000066400000000000000000000062541476025525100304520ustar00rootroot00000000000000# lws minimal secure streams The application goes to https://warmcat.com and reads index.html there. It does it using Secure Streams... the main code in minimal-secure-streams.c just sets up the context and opens a secure stream of type "mintest". The handler for state changes and payloads for "mintest" is in ss-myss.c The information about how a "mintest" stream should connect and the protocol it uses is kept separated in policy-database.c ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -f| Force connecting to the wrong endpoint to check backoff retry flow -p| Run as proxy server for clients to connect to over unix domain socket --force-portal|Force the SS Captive Portal Detection to feel it's behind a portal --force-no-internet|Force the SS Captive Portal Detection to feel it can't reach the internet --blob|Download a 50MiB blob from warmact.com, using flow control at the proxy ``` [2019/08/12 07:16:11:0045] USR: LWS minimal secure streams [-d] [-f] [2019/08/12 07:16:12:6102] USR: myss_state: LWSSSCS_CREATING, ord 0x0 [2019/08/12 07:16:12:6107] USR: myss_state: LWSSSCS_POLL, ord 0x0 [2019/08/12 07:16:12:6117] N: lws_ss_client_connect: connecting h1get warmcat.com / [2019/08/12 07:16:12:6118] USR: myss_state: LWSSSCS_CONNECTING, ord 0x0 [2019/08/12 07:16:13:4171] USR: myss_state: LWSSSCS_CONNECTED, ord 0x0 [2019/08/12 07:16:13:4222] USR: myss_rx: len 1024, flags: 1 [2019/08/12 07:16:13:4243] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4244] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4244] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4245] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4246] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4247] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4252] USR: myss_rx: len 1015, flags: 0 [2019/08/12 07:16:13:4264] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4265] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4266] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4267] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4268] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4268] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4269] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4270] USR: myss_rx: len 1015, flags: 0 [2019/08/12 07:16:13:4278] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4279] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4280] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4281] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4282] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4283] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4283] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4284] USR: myss_rx: len 1015, flags: 0 [2019/08/12 07:16:13:4287] USR: myss_rx: len 1024, flags: 0 [2019/08/12 07:16:13:4288] USR: myss_rx: len 947, flags: 0 [2019/08/12 07:16:13:4293] USR: myss_rx: len 0, flags: 2 [2019/08/12 07:16:13:4399] USR: myss_state: LWSSSCS_DISCONNECTED, ord 0x0 [2019/08/12 07:16:13:4761] USR: myss_state: LWSSSCS_DESTROYING, ord 0x0 [2019/08/12 07:16:13:4781] USR: Completed: OK ``` libwebsockets-4.3.5/minimal-examples/secure-streams/minimal-secure-streams/minimal-secure-streams.c000066400000000000000000000515271476025525100337300ustar00rootroot00000000000000/* * lws-minimal-secure-streams * * Written in 2010-2021 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * * This demonstrates a minimal http client using secure streams api. * * It visits https://warmcat.com/ and receives the html page there. * * This example is built two different ways from the same source... one includes * the policy everything needed to fulfil the stream directly. The other -client * variant has no policy itself and some other minor init changes, and connects * to the -proxy example to actually get the connection done. * * In the -client build case, the example does not even init the tls libraries * since the proxy part will take care of all that. */ #include #include #include // #define FORCE_OS_TRUST_STORE /* * uncomment to force network traffic through 127.0.0.1:1080 * * On your local machine, you can run a SOCKS5 proxy like this * * $ ssh -N -D 0.0.0.0:1080 localhost -v * * If enabled, this also fetches a remote policy that also * specifies that all traffic should go through the remote * proxy. */ // #define VIA_LOCALHOST_SOCKS static int interrupted, bad = 1, force_cpd_fail_portal, force_cpd_fail_no_internet, test_respmap, test_ots, test_local; static unsigned int timeout_ms = 3000; static lws_state_notify_link_t nl; /* * If the -proxy app is fulfilling our connection, then we don't need to have * the policy in the client. * * When we build with LWS_SS_USE_SSPC, the apis hook up to a proxy process over * a Unix Domain Socket. To test that, you need to separately run the * ./lws-minimal-secure-streams-proxy test app on the same machine. */ #if !defined(LWS_SS_USE_SSPC) static const char * const default_ss_policy = "{" "\"release\":" "\"01234567\"," "\"product\":" "\"myproduct\"," "\"schema-version\":" "1," #if defined(VIA_LOCALHOST_SOCKS) "\"via-socks5\":" "\"127.0.0.1:1080\"," #endif "\"retry\": [" /* named backoff / retry strategies */ "{\"default\": {" "\"backoff\": [" "1000," "2000," "3000," "5000," "10000" "]," "\"conceal\":" "5," "\"jitterpc\":" "20," "\"svalidping\":" "30," "\"svalidhup\":" "35" "}}" "]," "\"certs\": [" /* named individual certificates in BASE64 DER */ /* * Let's Encrypt certs for warmcat.com / libwebsockets.org * * We fetch the real policy from there using SS and switch to * using that. */ #if !defined(FORCE_OS_TRUST_STORE) "{\"isrg_root_x1\": \"" "MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw" "TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh" "cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4" "WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu" "ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY" "MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc" "h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+" "0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U" "A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW" "T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH" "B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC" "B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv" "KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn" "OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn" "jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw" "qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI" "rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV" "HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq" "hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL" "ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ" "3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK" "NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5" "ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur" "TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC" "jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc" "oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq" "4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA" "mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d" "emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=" "\"}" #endif "]," "\"trust_stores\": [" /* named cert chains */ #if !defined(FORCE_OS_TRUST_STORE) "{" "\"name\": \"le_via_isrg\"," "\"stack\": [" "\"isrg_root_x1\"" "]" "}" #endif "]," "\"s\": [" #if !defined(LWS_WITH_SS_DIRECT_PROTOCOL_STR) /* * "fetch_policy" decides from where the real policy * will be fetched, if present. Otherwise the initial * policy is treated as the whole, hardcoded, policy. */ "{\"fetch_policy\": {" "\"endpoint\":" "\"warmcat.com\"," "\"port\":" "443," "\"protocol\":" "\"h1\"," "\"http_method\":" "\"GET\"," #if defined(VIA_LOCALHOST_SOCKS) "\"http_url\":" "\"policy/minimal-proxy-socks.json\"," #else "\"http_url\":" "\"policy/minimal-proxy-v4.2-v2.json\"," #endif "\"tls\":" "true," "\"opportunistic\":" "true," #if !defined(FORCE_OS_TRUST_STORE) "\"tls_trust_store\":" "\"le_via_isrg\"," #endif "\"retry\":" "\"default\"" #else "{\"mintest\": {" "\"endpoint\": \"warmcat.com\"," "\"port\": 443," "\"protocol\": \"h1\"," "\"http_method\": \"GET\"," "\"http_url\": \"index.html?uptag=${uptag}\"," "\"metadata\": [{" " \"uptag\": \"X-Upload-Tag:\"" "}, {" " \"xctype\": \"X-Content-Type:\"" "}]," "\"tls\": true," "\"opportunistic\": true," "\"retry\": \"default\"," "\"timeout_ms\": 2000," "\"direct_proto_str\": true," "\"tls_trust_store\": \"le_via_dst\"" "}}," "{\"mintest_local\": {" "\"endpoint\": \"localhost\"," "\"port\": 8000," "\"protocol\": \"h1\"," "\"http_method\": \"GET\"," "\"tls\": false," "\"opportunistic\": true," "\"retry\": \"default\"," "\"timeout_ms\": 2000," "\"direct_proto_str\": true" #endif "}},{" /* * "captive_portal_detect" describes * what to do in order to check if the path to * the Internet is being interrupted by a * captive portal. If there's a larger policy * fetched from elsewhere, it should also include * this since it needs to be done at least after * every DHCP acquisition */ "\"captive_portal_detect\": {" "\"endpoint\": \"connectivitycheck.android.com\"," "\"http_url\": \"generate_204\"," "\"port\": 80," "\"protocol\": \"h1\"," "\"http_method\": \"GET\"," "\"opportunistic\": true," "\"http_expect\": 204," "\"http_fail_redirect\": true" "}}" "]}" ; #endif typedef struct myss { struct lws_ss_handle *ss; void *opaque_data; /* ... application specific state ... */ lws_sorted_usec_list_t sul; size_t amt; struct lws_genhash_ctx hash_ctx; } myss_t; #if !defined(LWS_SS_USE_SSPC) static const char *canned_root_token_payload = "grant_type=refresh_token" "&refresh_token=Atzr|IwEBIJedGXjDqsU_vMxykqOMg" "SHfYe3CPcedueWEMWSDMaDnEmiW8RlR1Kns7Cb4B-TOSnqp7ifVsY4BMY2B8tpHfO39XP" "zfu9HapGjTR458IyHX44FE71pWJkGZ79uVBpljP4sazJuk8XS3Oe_yLnm_DIO6fU1nU3Y" "0flYmsOiOAQE_gRk_pdlmEtHnpMA-9rLw3mkY5L89Ty9kUygBsiFaYatouROhbsTn8-jW" "k1zZLUDpT6ICtBXSnrCIg0pUbZevPFhTwdXd6eX-u4rq0W-XaDvPWFO7au-iPb4Zk5eZE" "iX6sissYrtNmuEXc2uHu7MnQO1hHCaTdIO2CANVumf-PHSD8xseamyh04sLV5JgFzY45S" "KvKMajiUZuLkMokOx86rjC2Hdkx5DO7G-dbG1ufBDG-N79pFMSs7Ck5pc283IdLoJkCQc" "AGvTX8o8I29QqkcGou-9TKhOJmpX8As94T61ok0UqqEKPJ7RhfQHHYdCtsdwxgvfVr9qI" "xL_hDCcTho8opCVX-6QhJHl6SQFlTw13" "&client_id=" "amzn1.application-oa2-client.4823334c434b4190a2b5a42c07938a2d"; #endif /* secure streams payload interface */ static lws_ss_state_return_t myss_rx(void *userobj, const uint8_t *buf, size_t len, int flags) { if (flags & LWSSS_FLAG_PERF_JSON) return LWSSSSRET_OK; #if !defined(LWS_WITH_SS_DIRECT_PROTOCOL_STR) myss_t *m = (myss_t *)userobj; const char *md_srv = "not set", *md_test = "not set"; size_t md_srv_len = 7, md_test_len = 7; lws_ss_get_metadata(m->ss, "srv", (const void **)&md_srv, &md_srv_len); lws_ss_get_metadata(m->ss, "test", (const void **)&md_test, &md_test_len); lwsl_user("%s: len %d, flags: %d, srv: %.*s, test: %.*s\n", __func__, (int)len, flags, (int)md_srv_len, md_srv, (int)md_test_len, md_test); lwsl_hexdump_info(buf, len); #endif /* * If we received the whole message, for our example it means * we are done. */ if (flags & LWSSS_FLAG_EOM) { bad = 0; interrupted = 1; } return LWSSSSRET_OK; } static lws_ss_state_return_t myss_tx(void *userobj, lws_ss_tx_ordinal_t ord, uint8_t *buf, size_t *len, int *flags) { //myss_t *m = (myss_t *)userobj; /* in this example, we don't send stuff */ return LWSSSSRET_TX_DONT_SEND; } #if defined(LWS_WITH_SS_DIRECT_PROTOCOL_STR) static const char * long_token_str = "{xxx:AWlKJMMISWJBQpAFqU0UqKNsnSY5usx2YtjOZJUQALNtapRxu/9VJqMk5IFVhxrNvMTj+RCGN6B5OlUK80lbbC8fAmQi7SoFB8DHN9UCRHkENriC62FjMNiBVfgkjMWx+60GioZy4bI2kCcyisd2CujQuSVllUmQFXhVq291cJhFfcKR4c3CUCuhouUfK2e1BY5InDMnzUXozOh+vhjJSeBIfp4HRUAgMpV7FXlHy8D5tgbmPbHs9X81MEsHTcERd3pG10B5fu1PzH+dJbr5F2WTK+VFWZI99B89ijEZWsPg447IK3F+0HHGseZfpRjKw2bY94id/TmncTxS0cqchDJlYg+Jt33U4HkUPqLdRiGIfJb6wSATx4S9ZKUumeJAgXpC6ytlUeqPpxzgnD7Tle5CDVb+eVzRk2FJfjiZdjbYxXhWYntPusLP/PGrorkqLw0ZKw+OJ+fhbkwF+0SCUelWEc8WPtfxCDAIdEQ7X5P4vUlBNEfuHprgHbZry680syFetY2q3ZtCmWemLHhqdDGu4lFgcQPCbb9b8eOE8oAbUQPm9AeV84RXSLevBG44JST/W2JuYguOk8SFlsRkfHb3dvxfB15Lg+mtH0tGRoumSMT0CFJL4ClTiKdpJo1LPgEd2/f13GcukEWirjqDRxpepJYWaVAMbxbaPBNfRHw9S8Fn8qU9/9eAxmbEqOopep5I/Zd99CT2PdE0Qyami1p05/BEc5dgvjg3SNDmAc/8kWC0AcvoSfApXI1TaVzbNh68b79h6IaIvXXorY5274u0lVB357JIRiYo29QbJgNn4bDbIr5ScM8GnFHQdKy29/TZoq4zbGMPX2X2t41vXRVeoZteu7vNWsMQD6eIomVq9qFWnoEEaR30woGF+8ZSIEu9JH5LKVZVFx46lipnjE8CDt5qrYCjwiGIswdLLMmIltxRmDt4aefTFpre7lhgUChv7ndJARvsn8rvtg2Hg1qKyfCAHa/LBblM29cRjLFqp7tWLJO7N27SWiqEhai6pmSmSYzqoPL+rnLS69rkdIuUwkA==}{yyy:jG8akvr66AXK+W1KSUyGIN3Yk4WNRLSIZHWTu8rsvQAuKwv9a/ZxrxIa+R1xW7cwmPSgINcJ4Jo7kGK9n7aDnsSDt3uMSHsu2iNg+UtIaJcO0XO6fPaLmOPLpOIU5AfG9HnbWUjeniNRrUGN8+26JH/9EB1h/X++Ow61CCHm8mKrgR1lXsKuNyqDYIrjoI3KCCVKZkdWygyFAXQ6l0sr+pUyNpv6H5w1xlC8dtI88091b/njuRlHsnoCa1zRtgqH0L4igLNu0zzOkH/ATsVS3Pyn4nsoRiGVFgzJZ0e2jT2McmDTxNeEHcafQSxeN7pztDFHT3ukUU9QFFtFDdzlug==}{vvv:VGbzgaVrLrJ+92ACJ0TEtQ==}{eeee:QURQVG9rZW6FbmNyeXB0aW6uS2v5}{sssss:mG+}"; #endif static lws_ss_state_return_t myss_state(void *userobj, void *sh, lws_ss_constate_t state, lws_ss_tx_ordinal_t ack) { myss_t *m = (myss_t *)userobj; #if defined(LWS_WITH_SS_DIRECT_PROTOCOL_STR) const char *md_test = "not set"; size_t md_test_len = 7; int i; static const char * imd_test_keys[8] = { "server:", "content-security-policy:", "strict-transport-security:", "test-custom-header:", "x-xss-protection:", "x-content-type-options:", "x-frame-options:", "x-non-exist:", }; #endif lwsl_user("%s: %s (%d), ord 0x%x\n", __func__, lws_ss_state_name((int)state), state, (unsigned int)ack); switch (state) { case LWSSSCS_CREATING: return lws_ss_client_connect(m->ss); case LWSSSCS_CONNECTING: lws_ss_start_timeout(m->ss, timeout_ms); if (lws_ss_set_metadata(m->ss, "uptag", "myuptag123", 10)) /* can fail, eg due to OOM, retry later if so */ return LWSSSSRET_DISCONNECT_ME; #if !defined(LWS_WITH_SS_DIRECT_PROTOCOL_STR) if (lws_ss_set_metadata(m->ss, "ctype", "myctype", 7)) /* can fail, eg due to OOM, retry later if so */ return LWSSSSRET_DISCONNECT_ME; #else if (lws_ss_set_metadata(m->ss, "X-Test-Type1:", "myctype1", 8)) /* can fail, eg due to OOM, retry later if so */ return LWSSSSRET_DISCONNECT_ME; if (lws_ss_set_metadata(m->ss, "X-Test-Type2:", "myctype2", 8)) /* can fail, eg due to OOM, retry later if so */ return LWSSSSRET_DISCONNECT_ME; if (lws_ss_set_metadata(m->ss, "Content-Type:", "myctype", 7)) /* can fail, eg due to OOM, retry later if so */ return LWSSSSRET_DISCONNECT_ME; if (lws_ss_set_metadata(m->ss, "X-ADP-Authentication-Token:", long_token_str, strlen(long_token_str))) /* can fail, eg due to OOM, retry later if so */ return LWSSSSRET_DISCONNECT_ME; #endif break; case LWSSSCS_ALL_RETRIES_FAILED: /* if we're out of retries, we want to close the app and FAIL */ interrupted = 1; bad = 2; break; case LWSSSCS_CONNECTED: #if defined(LWS_WITH_SS_DIRECT_PROTOCOL_STR) lwsl_user("%s: get direct metadata\n", __func__); for (i = 0; i < 8; i++) { md_test = "not set"; lws_ss_get_metadata(m->ss, imd_test_keys[i], (const void **)&md_test, &md_test_len); lwsl_user("%s test key:[%s], got [%s]\n", __func__, imd_test_keys[i], md_test); } #endif break; case LWSSSCS_QOS_ACK_REMOTE: lwsl_notice("%s: LWSSSCS_QOS_ACK_REMOTE\n", __func__); break; case LWSSSCS_TIMEOUT: lwsl_notice("%s: LWSSSCS_TIMEOUT\n", __func__); /* if we're out of time */ interrupted = 1; bad = 3; break; case LWSSSCS_USER_BASE: lwsl_notice("%s: LWSSSCS_USER_BASE\n", __func__); break; default: break; } return LWSSSSRET_OK; } #if defined(LWS_WITH_SECURE_STREAMS_BUFFER_DUMP) static void myss_headers_dump(void *userobj, const uint8_t *buf, size_t len, int done) { lwsl_user("%s: %lu done: %s\n", __func__, len, done?"true":"false"); lwsl_hexdump_err(buf, len); } #endif static int app_system_state_nf(lws_state_manager_t *mgr, lws_state_notify_link_t *link, int current, int target) { struct lws_context *context = lws_system_context_from_system_mgr(mgr); #if !defined(LWS_SS_USE_SSPC) lws_system_blob_t *ab = lws_system_get_blob(context, LWS_SYSBLOB_TYPE_AUTH, 1 /* AUTH_IDX_ROOT */); size_t size; #endif /* * For the things we care about, let's notice if we are trying to get * past them when we haven't solved them yet, and make the system * state wait while we trigger the dependent action. */ switch (target) { #if !defined(LWS_SS_USE_SSPC) /* * The proxy takes responsibility for this stuff if we get things * done through that */ case LWS_SYSTATE_INITIALIZED: /* overlay on the hardcoded policy */ case LWS_SYSTATE_POLICY_VALID: /* overlay on the loaded policy */ if (target != current) break; if (force_cpd_fail_portal) /* this makes it look like we're behind a captive portal * because the overriden address does a redirect */ lws_ss_policy_overlay(context, "{\"s\": [{\"captive_portal_detect\": {" "\"endpoint\": \"google.com\"," "\"http_url\": \"/\"," "\"port\": 80" "}}]}"); if (force_cpd_fail_no_internet) /* this looks like no internet, because the overridden * port doesn't have anything that will connect to us */ lws_ss_policy_overlay(context, "{\"s\": [{\"captive_portal_detect\": {" "\"endpoint\": \"warmcat.com\"," "\"http_url\": \"/\"," "\"port\": 999" "}}]}"); break; case LWS_SYSTATE_REGISTERED: size = lws_system_blob_get_size(ab); if (size) break; /* let's register our canned root token so auth can use it */ lws_system_blob_direct_set(ab, (const uint8_t *)canned_root_token_payload, strlen(canned_root_token_payload)); break; #endif case LWS_SYSTATE_OPERATIONAL: if (current == LWS_SYSTATE_OPERATIONAL) { lws_ss_info_t ssi; /* We're making an outgoing secure stream ourselves */ memset(&ssi, 0, sizeof(ssi)); ssi.handle_offset = offsetof(myss_t, ss); ssi.opaque_user_data_offset = offsetof(myss_t, opaque_data); ssi.rx = myss_rx; ssi.tx = myss_tx; ssi.state = myss_state; #if defined(LWS_WITH_SECURE_STREAMS_BUFFER_DUMP) ssi.dump = myss_headers_dump; #endif ssi.user_alloc = sizeof(myss_t); ssi.streamtype = test_ots ? "mintest-ots" : (test_respmap ? "respmap" : (test_local ? "mintest_local" : "mintest")); if (lws_ss_create(context, 0, &ssi, NULL, NULL, NULL, NULL)) { lwsl_err("%s: failed to create secure stream\n", __func__); interrupted = 1; lws_cancel_service(context); return -1; } } break; } return 0; } static lws_state_notify_link_t * const app_notifier_list[] = { &nl, NULL }; #if defined(LWS_WITH_SYS_METRICS) static int my_metric_report(lws_metric_pub_t *mp) { lws_metric_bucket_t *sub = mp->u.hist.head; char buf[192]; do { if (lws_metrics_format(mp, &sub, buf, sizeof(buf))) lwsl_user("%s: %s\n", __func__, buf); } while ((mp->flags & LWSMTFL_REPORT_HIST) && sub); /* 0 = leave metric to accumulate, 1 = reset the metric */ return 1; } static const lws_system_ops_t system_ops = { .metric_report = my_metric_report, }; #endif static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; int n = 0, expected = 0; const char *p; signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); lws_cmdline_option_handle_builtin(argc, argv, &info); //lws_set_log_level(LLL_USER | LLL_ERR | LLL_DEBUG | LLL_NOTICE | LLL_INFO, NULL); lwsl_user("LWS secure streams test client [-d]\n"); /* these options are mutually exclusive if given */ if (lws_cmdline_option(argc, argv, "--force-portal")) force_cpd_fail_portal = 1; if (lws_cmdline_option(argc, argv, "--force-no-internet")) force_cpd_fail_no_internet = 1; if (lws_cmdline_option(argc, argv, "--respmap")) test_respmap = 1; if (lws_cmdline_option(argc, argv, "--ots")) /* * Use a streamtype that relies on the OS trust store for * validation */ test_ots = 1; if (lws_cmdline_option(argc, argv, "--local")) test_local = 1; if ((p = lws_cmdline_option(argc, argv, "--timeout_ms"))) timeout_ms = (unsigned int)atoi(p); info.fd_limit_per_thread = 1 + 6 + 1; info.port = CONTEXT_PORT_NO_LISTEN; #if defined(LWS_SS_USE_SSPC) info.protocols = lws_sspc_protocols; { const char *p; /* connect to ssproxy via UDS by default, else via * tcp connection to this port */ if ((p = lws_cmdline_option(argc, argv, "-p"))) info.ss_proxy_port = (uint16_t)atoi(p); /* UDS "proxy.ss.lws" in abstract namespace, else this socket * path; when -p given this can specify the network interface * to bind to */ if ((p = lws_cmdline_option(argc, argv, "-i"))) info.ss_proxy_bind = p; /* if -p given, -a specifies the proxy address to connect to */ if ((p = lws_cmdline_option(argc, argv, "-a"))) info.ss_proxy_address = p; } #else info.pss_policies_json = default_ss_policy; info.options = LWS_SERVER_OPTION_EXPLICIT_VHOSTS | LWS_SERVER_OPTION_H2_JUST_FIX_WINDOW_UPDATE_OVERFLOW | LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; #endif #if defined(LWS_WITH_MBEDTLS) /* uncomment to force mbedtls to load a system trust store like * openssl does * * info.mbedtls_client_preload_filepath = * "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem"; */ #endif /* integrate us with lws system state management when context created */ nl.name = "app"; nl.notify_cb = app_system_state_nf; info.register_notifier_list = app_notifier_list; #if defined(LWS_WITH_SYS_METRICS) info.system_ops = &system_ops; info.metrics_prefix = "ssmex"; #endif /* create the context */ context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); goto bail; } #if !defined(LWS_SS_USE_SSPC) /* * If we're being a proxied client, the proxy does all this */ /* * Set the related lws_system blobs * * ...direct_set() sets a pointer, so the thing pointed to has to have * a suitable lifetime, eg, something that already exists on the heap or * a const string in .rodata like this */ lws_system_blob_direct_set(lws_system_get_blob(context, LWS_SYSBLOB_TYPE_DEVICE_SERIAL, 0), (const uint8_t *)"SN12345678", 10); lws_system_blob_direct_set(lws_system_get_blob(context, LWS_SYSBLOB_TYPE_DEVICE_FW_VERSION, 0), (const uint8_t *)"v0.01", 5); /* * ..._heap_append() appends to a buflist kind of arrangement on heap, * just one block is fine, otherwise it will concatenate the fragments * in the order they were appended (and take care of freeing them at * context destroy time). ..._heap_empty() is also available to remove * everything that was already allocated. * * Here we use _heap_append() just so it's tested as well as direct set. */ lws_system_blob_heap_append(lws_system_get_blob(context, LWS_SYSBLOB_TYPE_DEVICE_TYPE, 0), (const uint8_t *)"spacerocket", 11); #endif /* the event loop */ while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); bail: if ((p = lws_cmdline_option(argc, argv, "--expected-exit"))) expected = atoi(p); if (bad == expected) { lwsl_user("Completed: OK (seen expected %d)\n", expected); return 0; } else lwsl_err("Completed: failed: exit %d, expected %d\n", bad, expected); return 1; } libwebsockets-4.3.5/minimal-examples/ws-client/000077500000000000000000000000001476025525100215415ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-client/README.md000066400000000000000000000013511476025525100230200ustar00rootroot00000000000000|name|demonstrates| ---|--- minimal-ws-client|Simple client that connects to libwebsockets.org dumb increment protocol and demonstrates retry and backoff minimal-ws-client-echo|Simple client that connects to a ws server and echos anything the server sends minimal-ws-client-ping|Ws ping test client minimal-ws-client-pmd-bulk|Client that sends bulk multifragment data to the minimal-ws-server-pmd-bulk example minimal-ws-client-rx|Connects to the dumb-increment-protocol wss server at https://libwebsockets.org and demonstrates receiving ws data minimal-ws-client-spam|Spams ws connections in parallel to a server for stability testing minimal-ws-client-tx|Connects to the minimal-ws-broker example as a publisher, demonstrating sending ws data libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-binance/000077500000000000000000000000001476025525100264675ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-binance/CMakeLists.txt000066400000000000000000000014241476025525100312300ustar00rootroot00000000000000project(lws-minimal-ws-client-binance C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckIncludeFile) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-ws-client-binance) set(SRCS main.c) set(requirements 1) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) require_lws_config(LWS_WITHOUT_EXTENSIONS 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-binance/README.md000066400000000000000000000070071476025525100277520ustar00rootroot00000000000000# lws minimal ws client binance This connects to the binance ws server and monitors transactions with an eye on low latency. Latency seems to be associated with server-side coalescing at tls layer, and the coalescing at server side seems somewhat correlated to number of transactions per second, which seems to cause increased packet sizes from the server as a reaction. The relationship is more complex probably according to what actually happens at the server backend, but it seems to be broadly related reliably. Typically when showing low latency at ~70msg/s, the messages on the wire are eg, ~70 byte packets containing small tls records 10:14:40.682293 IP ec2-54-249-113-172.ap-northeast-1.compute.amazonaws.com.https > constance.42952: Flags [P.], seq 50846:50927, ack 1, win 11, options [nop,nop,TS val 366445630 ecr 3893437035], length 81 under pressure from increased messages per second, the tls records increase above 2KB 08:06:02.825160 IP ec2-54-249-113-172.ap-northeast-1.compute.amazonaws.com.https > constance.42688: Flags [.], seq 512319:513643, ack 1, win 11, options [nop,nop,TS val 3990208942 ecr 3885719233], length 1324 08:06:02.825290 IP constance.42688 > ec2-54-249-113-172.ap-northeast-1.compute.amazonaws.com.https: Flags [.], ack 513643, win 14248, options [nop,nop,TS val 3885719479 ecr 3990208942], length 0 08:06:02.891646 IP ec2-54-249-113-172.ap-northeast-1.compute.amazonaws.com.https > constance.42688: Flags [.], seq 513643:516291, ack 1, win 11, options [nop,nop,TS val 3990209006 ecr 3885719296], length 2648 The larger the packets, the longer the first item in the packet had to wait before it was sent, and a tls record cannot be authenticated until all of it has been received. The example circumvents this somewhat by using `permessage_deflate`, which reduces the packet size before tls by applying compression, making even coalesced packets smaller, and a new option for adjusting how lws manages conflicting requirements to clear pending rx and allow interleaved tx, `LCCSCF_PRIORITIZE_READS` that causes the stream to prioritize handling any pending rx, not just pending at ssl layer, in one event loop trip. ## build Lws must have been built with `LWS_ROLE_WS=1` and `LWS_WITHOUT_EXTENSIONS=0` ``` $ cmake . && make ``` ## Commandline Options Option|Meaning ---|--- -d|Set logging verbosity ## usage ``` $ ./bin/lws-minimal-ws-client-binance [2020/08/23 10:22:49:3003] U: LWS minimal binance client [2020/08/23 10:22:49:3005] N: LWS: 4.0.99-v4.1.0-rc2-4-g3cf133aef, loglevel 1031 [2020/08/23 10:22:49:3005] N: NET CLI SRV H1 H2 WS MQTT SS-JSON-POL SSPROX ASYNC_DNS IPv6-absent [2020/08/23 10:22:50:8243] N: checking client ext permessage-deflate [2020/08/23 10:22:50:8244] N: instantiating client ext permessage-deflate [2020/08/23 10:22:50:8244] U: callback_minimal: established [2020/08/23 10:22:51:8244] N: sul_hz_cb: price: min: 1160284Ā¢, max: 1163794Ā¢, avg: 1160516Ā¢, (150 prices/s) [2020/08/23 10:22:51:8245] N: sul_hz_cb: elatency: min: 112ms, max: 547ms, avg: 259ms, (155 msg/s) [2020/08/23 10:22:52:8244] N: sul_hz_cb: price: min: 1160287Ā¢, max: 1178845Ā¢, avg: 1160897Ā¢, (112 prices/s) [2020/08/23 10:22:52:8245] N: sul_hz_cb: elatency: min: 111ms, max: 226ms, avg: 152ms, (134 msg/s) [2020/08/23 10:22:53:8247] N: sul_hz_cb: price: min: 1160287Ā¢, max: 1168005Ā¢, avg: 1160806Ā¢, (86 prices/s) [2020/08/23 10:22:53:8248] N: sul_hz_cb: elatency: min: 112ms, max: 476ms, avg: 287ms, (101 msg/s) [2020/08/23 10:22:54:8247] N: sul_hz_cb: price: min: 1160284Ā¢, max: 1162780Ā¢, avg: 1160698Ā¢, (71 prices/s) ... ``` libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-binance/main.c000066400000000000000000000252421476025525100275640ustar00rootroot00000000000000/* * lws-minimal-ws-client-binance * * Written in 2010-2020 by Andy Green * Kutoga * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a ws client that connects to binance ws server efficiently */ #include #include #include #include typedef struct range { uint64_t sum; uint64_t lowest; uint64_t highest; unsigned int samples; } range_t; /* * This represents your object that "contains" the client connection and has * the client connection bound to it */ static struct my_conn { lws_sorted_usec_list_t sul; /* schedule connection retry */ lws_sorted_usec_list_t sul_hz; /* 1hz summary */ range_t e_lat_range; range_t price_range; struct lws *wsi; /* related wsi if any */ uint16_t retry_count; /* count of consequetive retries */ } mco; static struct lws_context *context; static int interrupted; #if defined(LWS_WITH_MBEDTLS) || defined(USE_WOLFSSL) /* * OpenSSL uses the system trust store. mbedTLS / WolfSSL have to be told which * CA to trust explicitly. */ static const char * const ca_pem_digicert_global_root = "-----BEGIN CERTIFICATE-----\n" "MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\n" "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n" "d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\n" "QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\n" "MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n" "b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\n" "9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\n" "CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\n" "nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\n" "43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\n" "T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\n" "gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\n" "BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\n" "TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\n" "DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\n" "hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\n" "06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\n" "PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\n" "YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\n" "CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\n" "-----END CERTIFICATE-----\n"; #endif /* * The retry and backoff policy we want to use for our client connections */ static const uint32_t backoff_ms[] = { 1000, 2000, 3000, 4000, 5000 }; static const lws_retry_bo_t retry = { .retry_ms_table = backoff_ms, .retry_ms_table_count = LWS_ARRAY_SIZE(backoff_ms), .conceal_count = LWS_ARRAY_SIZE(backoff_ms), .secs_since_valid_ping = 400, /* force PINGs after secs idle */ .secs_since_valid_hangup = 400, /* hangup after secs idle */ .jitter_percent = 0, }; /* * If we don't enable permessage-deflate ws extension, during times when there * are many ws messages per second the server coalesces them inside a smaller * number of larger ssl records, for >100 mps typically >2048 records. * * This is a problem, because the coalesced record cannot be send nor decrypted * until the last part of the record is received, meaning additional latency * for the earlier members of the coalesced record that have just been sitting * there waiting for the last one to go out and be decrypted. * * permessage-deflate reduces the data size before the tls layer, for >100mps * reducing the colesced records to ~1.2KB. */ static const struct lws_extension extensions[] = { { "permessage-deflate", lws_extension_callback_pm_deflate, "permessage-deflate" "; client_no_context_takeover" "; client_max_window_bits" }, { NULL, NULL, NULL /* terminator */ } }; /* * Scheduled sul callback that starts the connection attempt */ static void connect_client(lws_sorted_usec_list_t *sul) { struct my_conn *mco = lws_container_of(sul, struct my_conn, sul); struct lws_client_connect_info i; memset(&i, 0, sizeof(i)); i.context = context; i.port = 443; i.address = "fstream.binance.com"; i.path = "/stream?" "streams=btcusdt@depth@0ms/btcusdt@bookTicker/btcusdt@aggTrade"; i.host = i.address; i.origin = i.address; i.ssl_connection = LCCSCF_USE_SSL | LCCSCF_PRIORITIZE_READS; i.protocol = NULL; i.local_protocol_name = "lws-minimal-client"; i.pwsi = &mco->wsi; i.retry_and_idle_policy = &retry; i.userdata = mco; if (!lws_client_connect_via_info(&i)) /* * Failed... schedule a retry... we can't use the _retry_wsi() * convenience wrapper api here because no valid wsi at this * point. */ if (lws_retry_sul_schedule(context, 0, sul, &retry, connect_client, &mco->retry_count)) { lwsl_err("%s: connection attempts exhausted\n", __func__); interrupted = 1; } } static void range_reset(range_t *r) { r->sum = r->highest = 0; r->lowest = 999999999999ull; r->samples = 0; } static uint64_t get_us_timeofday(void) { struct timeval tv; gettimeofday(&tv, NULL); return (uint64_t)((lws_usec_t)tv.tv_sec * LWS_US_PER_SEC) + (uint64_t)tv.tv_usec; } static void sul_hz_cb(lws_sorted_usec_list_t *sul) { struct my_conn *mco = lws_container_of(sul, struct my_conn, sul_hz); /* * We are called once a second to dump statistics on the connection */ lws_sul_schedule(lws_get_context(mco->wsi), 0, &mco->sul_hz, sul_hz_cb, LWS_US_PER_SEC); if (mco->price_range.samples) lwsl_notice("%s: price: min: %lluĀ¢, max: %lluĀ¢, avg: %lluĀ¢, " "(%d prices/s)\n", __func__, (unsigned long long)mco->price_range.lowest, (unsigned long long)mco->price_range.highest, (unsigned long long)(mco->price_range.sum / mco->price_range.samples), mco->price_range.samples); if (mco->e_lat_range.samples) lwsl_notice("%s: elatency: min: %llums, max: %llums, " "avg: %llums, (%d msg/s)\n", __func__, (unsigned long long)mco->e_lat_range.lowest / 1000, (unsigned long long)mco->e_lat_range.highest / 1000, (unsigned long long)(mco->e_lat_range.sum / mco->e_lat_range.samples) / 1000, mco->e_lat_range.samples); range_reset(&mco->e_lat_range); range_reset(&mco->price_range); } static uint64_t pennies(const char *s) { uint64_t price = (uint64_t)atoll(s) * 100; s = strchr(s, '.'); if (s && isdigit(s[1]) && isdigit(s[2])) price = price + (uint64_t)((10 * (s[1] - '0')) + (s[2] - '0')); return price; } static int callback_minimal(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct my_conn *mco = (struct my_conn *)user; uint64_t latency_us, now_us; uint64_t price; char numbuf[16]; const char *p; size_t alen; switch (reason) { case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); goto do_retry; break; case LWS_CALLBACK_CLIENT_RECEIVE: /* * The messages are a few 100 bytes of JSON each */ // lwsl_hexdump_notice(in, len); now_us = (uint64_t)get_us_timeofday(); p = lws_json_simple_find((const char *)in, len, "\"depthUpdate\"", &alen); /* * Only the JSON with depthUpdate init has the numbers we care * about as well */ if (!p) break; p = lws_json_simple_find((const char *)in, len, "\"E\":", &alen); if (!p) { lwsl_err("%s: no E JSON\n", __func__); break; } lws_strnncpy(numbuf, p, alen, sizeof(numbuf)); latency_us = now_us - ((uint64_t)atoll(numbuf) * LWS_US_PER_MS); if (latency_us < mco->e_lat_range.lowest) mco->e_lat_range.lowest = latency_us; if (latency_us > mco->e_lat_range.highest) mco->e_lat_range.highest = latency_us; mco->e_lat_range.sum += latency_us; mco->e_lat_range.samples++; p = lws_json_simple_find((const char *)in, len, "\"a\":[[\"", &alen); if (p) { lws_strnncpy(numbuf, p, alen, sizeof(numbuf)); price = pennies(numbuf); if (price < mco->price_range.lowest) mco->price_range.lowest = price; if (price > mco->price_range.highest) mco->price_range.highest = price; mco->price_range.sum += price; mco->price_range.samples++; } break; case LWS_CALLBACK_CLIENT_ESTABLISHED: lwsl_user("%s: established\n", __func__); lws_sul_schedule(lws_get_context(wsi), 0, &mco->sul_hz, sul_hz_cb, LWS_US_PER_SEC); mco->wsi = wsi; range_reset(&mco->e_lat_range); range_reset(&mco->price_range); break; case LWS_CALLBACK_CLIENT_CLOSED: lws_sul_cancel(&mco->sul_hz); goto do_retry; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); do_retry: /* * retry the connection to keep it nailed up * * For this example, we try to conceal any problem for one set of * backoff retries and then exit the app. * * If you set retry.conceal_count to be larger than the number of * elements in the backoff table, it will never give up and keep * retrying at the last backoff delay plus the random jitter amount. */ if (lws_retry_sul_schedule_retry_wsi(wsi, &mco->sul, connect_client, &mco->retry_count)) { lwsl_err("%s: connection attempts exhausted\n", __func__); interrupted = 1; } return 0; } static const struct lws_protocols protocols[] = { { "lws-minimal-client", callback_minimal, 0, 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; int n = 0; signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); lws_cmdline_option_handle_builtin(argc, argv, &info); lwsl_user("LWS minimal binance client\n"); info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.port = CONTEXT_PORT_NO_LISTEN; /* we do not run any server */ info.protocols = protocols; info.fd_limit_per_thread = 1 + 1 + 1; info.extensions = extensions; #if defined(LWS_WITH_MBEDTLS) || defined(USE_WOLFSSL) /* * OpenSSL uses the system trust store. mbedTLS / WolfSSL have to be * told which CA to trust explicitly. */ info.client_ssl_ca_mem = ca_pem_digicert_global_root; info.client_ssl_ca_mem_len = (unsigned int)strlen(ca_pem_digicert_global_root); #endif context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } /* schedule the first client connection attempt to happen immediately */ lws_sul_schedule(context, 0, &mco.sul, connect_client, 1); while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); lwsl_user("Completed\n"); return 0; } libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-echo/000077500000000000000000000000001476025525100260065ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-echo/CMakeLists.txt000066400000000000000000000014061476025525100305470ustar00rootroot00000000000000project(lws-minimal-ws-client-echo C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-ws-client-echo) set(SRCS minimal-ws-client-echo.c) set(requirements 1) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) require_lws_config(LWS_WITHOUT_EXTENSIONS 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-echo/README.md000066400000000000000000000023471476025525100272730ustar00rootroot00000000000000# lws minimal ws client + permessage-deflate echo This example opens a ws client connection to localhost:7681 and echoes back anything that comes from the server. You can use it for testing lws against Autobahn. ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -p port|Port to connect to -u url|URL path part to connect to -o|Finish after one connection --ssl|Open client connection with ssl -i |Bind the client connection to interface iface ``` $ ./lws-minimal-ws-client-echo [2018/04/22 20:03:50:2343] USER: LWS minimal ws client echo + permessage-deflate + multifragment bulk message [2018/04/22 20:03:50:2344] USER: lws-minimal-ws-client-echo [-n (no exts)] [-u url] [-o (once)] [2018/04/22 20:03:50:2344] USER: options 0 [2018/04/22 20:03:50:2345] NOTICE: Creating Vhost 'default' (serving disabled), 1 protocols, IPv6 off [2018/04/22 20:03:51:2356] USER: connecting to localhost:9001//runCase?case=362&agent=libwebsockets [2018/04/22 20:03:51:2385] NOTICE: checking client ext permessage-deflate [2018/04/22 20:03:51:2386] NOTICE: instantiating client ext permessage-deflate [2018/04/22 20:03:51:2386] USER: LWS_CALLBACK_CLIENT_ESTABLISHED ... ``` libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-echo/minimal-ws-client-echo.c000066400000000000000000000106651476025525100324270ustar00rootroot00000000000000/* * lws-minimal-ws-client-echo * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a ws client that echoes back what it was sent, in a * way compatible with autobahn -m fuzzingserver */ #include #include #include #define LWS_PLUGIN_STATIC #include "protocol_lws_minimal_client_echo.c" static struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_MINIMAL_CLIENT_ECHO, LWS_PROTOCOL_LIST_TERM }; static struct lws_context *context; static int interrupted, port = 7681, options = 0; static const char *url = "/", *ads = "localhost", *iface = NULL; /* pass pointers to shared vars to the protocol */ static const struct lws_protocol_vhost_options pvo_iface = { NULL, NULL, "iface", /* pvo name */ (void *)&iface /* pvo value */ }; static const struct lws_protocol_vhost_options pvo_ads = { &pvo_iface, NULL, "ads", /* pvo name */ (void *)&ads /* pvo value */ }; static const struct lws_protocol_vhost_options pvo_url = { &pvo_ads, NULL, "url", /* pvo name */ (void *)&url /* pvo value */ }; static const struct lws_protocol_vhost_options pvo_options = { &pvo_url, NULL, "options", /* pvo name */ (void *)&options /* pvo value */ }; static const struct lws_protocol_vhost_options pvo_port = { &pvo_options, NULL, "port", /* pvo name */ (void *)&port /* pvo value */ }; static const struct lws_protocol_vhost_options pvo_interrupted = { &pvo_port, NULL, "interrupted", /* pvo name */ (void *)&interrupted /* pvo value */ }; static const struct lws_protocol_vhost_options pvo = { NULL, /* "next" pvo linked-list */ &pvo_interrupted, /* "child" pvo linked-list */ "lws-minimal-client-echo", /* protocol name we belong to on this vhost */ "" /* ignored */ }; static const struct lws_extension extensions[] = { { "permessage-deflate", lws_extension_callback_pm_deflate, "permessage-deflate" "; client_no_context_takeover" "; client_max_window_bits" }, { NULL, NULL, NULL /* terminator */ } }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; const char *p; int n, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws client echo + permessage-deflate + multifragment bulk message\n"); lwsl_user(" lws-minimal-ws-client-echo [-n (no exts)] [-u url] [-p port] [-o (once)]\n"); if ((p = lws_cmdline_option(argc, argv, "-u"))) url = p; if ((p = lws_cmdline_option(argc, argv, "-p"))) port = atoi(p); if (lws_cmdline_option(argc, argv, "-o")) options |= 1; if (lws_cmdline_option(argc, argv, "--ssl")) options |= 2; if ((p = lws_cmdline_option(argc, argv, "-s"))) ads = p; if ((p = lws_cmdline_option(argc, argv, "-i"))) iface = p; lwsl_user("options %d, ads %s\n", options, ads); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = CONTEXT_PORT_NO_LISTEN; info.protocols = protocols; info.pvo = &pvo; if (!lws_cmdline_option(argc, argv, "-n")) info.extensions = extensions; info.pt_serv_buf_size = 32 * 1024; info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT | LWS_SERVER_OPTION_VALIDATE_UTF8; /* * since we know this lws context is only ever going to be used with * one client wsis / fds / sockets at a time, let lws know it doesn't * have to use the default allocations for fd tables up to ulimit -n. * It will just allocate for 1 internal and 1 (+ 1 http2 nwsi) that we * will use. */ info.fd_limit_per_thread = 1 + 1 + 1; if (lws_cmdline_option(argc, argv, "--libuv")) info.options |= LWS_SERVER_OPTION_LIBUV; else signal(SIGINT, sigint_handler); context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (!lws_service(context, 0) && !interrupted) ; lws_context_destroy(context); n = (options & 1) ? interrupted != 2 : interrupted == 3; lwsl_user("Completed %d %s\n", interrupted, !n ? "OK" : "failed"); return n; } protocol_lws_minimal_client_echo.c000066400000000000000000000160321476025525100346650ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-echo/* * ws protocol handler plugin for "lws-minimal-client-echo" * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The protocol shows how to send and receive bulk messages over a ws connection * that optionally may have the permessage-deflate extension negotiated on it. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include #define RING_DEPTH 1024 /* one of these created for each message */ struct msg { void *payload; /* is malloc'd */ size_t len; char binary; char first; char final; }; struct per_session_data__minimal_client_echo { struct lws_ring *ring; uint32_t tail; char flow_controlled; uint8_t completed:1; uint8_t write_consume_pending:1; }; struct vhd_minimal_client_echo { struct lws_context *context; struct lws_vhost *vhost; struct lws *client_wsi; lws_sorted_usec_list_t sul; int *interrupted; int *options; const char **url; const char **ads; const char **iface; int *port; }; static void sul_connect_attempt(struct lws_sorted_usec_list *sul) { struct vhd_minimal_client_echo *vhd = lws_container_of(sul, struct vhd_minimal_client_echo, sul); struct lws_client_connect_info i; char host[128]; lws_snprintf(host, sizeof(host), "%s:%u", *vhd->ads, *vhd->port); memset(&i, 0, sizeof(i)); i.context = vhd->context; i.port = *vhd->port; i.address = *vhd->ads; i.path = *vhd->url; i.host = host; i.origin = host; i.ssl_connection = 0; if ((*vhd->options) & 2) i.ssl_connection |= LCCSCF_USE_SSL; i.vhost = vhd->vhost; i.iface = *vhd->iface; //i.protocol = ; i.pwsi = &vhd->client_wsi; lwsl_user("connecting to %s:%d/%s\n", i.address, i.port, i.path); if (!lws_client_connect_via_info(&i)) lws_sul_schedule(vhd->context, 0, &vhd->sul, sul_connect_attempt, 10 * LWS_US_PER_SEC); } static void __minimal_destroy_message(void *_msg) { struct msg *msg = _msg; free(msg->payload); msg->payload = NULL; msg->len = 0; } static int callback_minimal_client_echo(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__minimal_client_echo *pss = (struct per_session_data__minimal_client_echo *)user; struct vhd_minimal_client_echo *vhd = (struct vhd_minimal_client_echo *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); const struct msg *pmsg; struct msg amsg; int n, m, flags; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct vhd_minimal_client_echo)); if (!vhd) return -1; vhd->context = lws_get_context(wsi); vhd->vhost = lws_get_vhost(wsi); /* get the pointer to "interrupted" we were passed in pvo */ vhd->interrupted = (int *)lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "interrupted")->value; vhd->port = (int *)lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "port")->value; vhd->options = (int *)lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "options")->value; vhd->ads = (const char **)lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "ads")->value; vhd->url = (const char **)lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "url")->value; vhd->iface = (const char **)lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "iface")->value; sul_connect_attempt(&vhd->sul); break; case LWS_CALLBACK_PROTOCOL_DESTROY: lws_sul_cancel(&vhd->sul); break; case LWS_CALLBACK_CLIENT_ESTABLISHED: lwsl_user("LWS_CALLBACK_CLIENT_ESTABLISHED\n"); pss->ring = lws_ring_create(sizeof(struct msg), RING_DEPTH, __minimal_destroy_message); if (!pss->ring) return 1; pss->tail = 0; break; case LWS_CALLBACK_CLIENT_WRITEABLE: lwsl_user("LWS_CALLBACK_CLIENT_WRITEABLE\n"); if (pss->write_consume_pending) { /* perform the deferred fifo consume */ lws_ring_consume_single_tail(pss->ring, &pss->tail, 1); pss->write_consume_pending = 0; } pmsg = lws_ring_get_element(pss->ring, &pss->tail); if (!pmsg) { lwsl_user(" (nothing in ring)\n"); break; } flags = lws_write_ws_flags( pmsg->binary ? LWS_WRITE_BINARY : LWS_WRITE_TEXT, pmsg->first, pmsg->final); /* notice we allowed for LWS_PRE in the payload already */ m = lws_write(wsi, ((unsigned char *)pmsg->payload) + LWS_PRE, pmsg->len, (enum lws_write_protocol)flags); if (m < (int)pmsg->len) { lwsl_err("ERROR %d writing to ws socket\n", m); return -1; } lwsl_user(" wrote %d: flags: 0x%x first: %d final %d\n", m, flags, pmsg->first, pmsg->final); if ((*vhd->options & 1) && pmsg && pmsg->final) pss->completed = 1; /* * Workaround deferred deflate in pmd extension by only * consuming the fifo entry when we are certain it has been * fully deflated at the next WRITABLE callback. You only need * this if you're using pmd. */ pss->write_consume_pending = 1; lws_callback_on_writable(wsi); if (pss->flow_controlled && (int)lws_ring_get_count_free_elements(pss->ring) > RING_DEPTH - 5) { lws_rx_flow_control(wsi, 1); pss->flow_controlled = 0; } break; case LWS_CALLBACK_CLIENT_RECEIVE: lwsl_user("LWS_CALLBACK_CLIENT_RECEIVE: %4d (rpp %5d, first %d, last %d, bin %d)\n", (int)len, (int)lws_remaining_packet_payload(wsi), lws_is_first_fragment(wsi), lws_is_final_fragment(wsi), lws_frame_is_binary(wsi)); // lwsl_hexdump_notice(in, len); amsg.first = (char)lws_is_first_fragment(wsi); amsg.final = (char)lws_is_final_fragment(wsi); amsg.binary = (char)lws_frame_is_binary(wsi); n = (int)lws_ring_get_count_free_elements(pss->ring); if (!n) { lwsl_user("dropping!\n"); break; } amsg.len = len; /* notice we over-allocate by LWS_PRE */ amsg.payload = malloc(LWS_PRE + len); if (!amsg.payload) { lwsl_user("OOM: dropping\n"); break; } memcpy((char *)amsg.payload + LWS_PRE, in, len); if (!lws_ring_insert(pss->ring, &amsg, 1)) { __minimal_destroy_message(&amsg); lwsl_user("dropping!\n"); break; } lws_callback_on_writable(wsi); if (!pss->flow_controlled && n < 3) { pss->flow_controlled = 1; lws_rx_flow_control(wsi, 0); } break; case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); vhd->client_wsi = NULL; if (!*vhd->interrupted) *vhd->interrupted = 3; lws_cancel_service(lws_get_context(wsi)); break; case LWS_CALLBACK_CLIENT_CLOSED: lwsl_user("LWS_CALLBACK_CLIENT_CLOSED\n"); lws_ring_destroy(pss->ring); vhd->client_wsi = NULL; if (!*vhd->interrupted) *vhd->interrupted = 1 + pss->completed; lws_cancel_service(lws_get_context(wsi)); break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_MINIMAL_CLIENT_ECHO \ { \ "lws-minimal-client-echo", \ callback_minimal_client_echo, \ sizeof(struct per_session_data__minimal_client_echo), \ 1024, \ 0, NULL, 0 \ } libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-ping/000077500000000000000000000000001476025525100260255ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-ping/CMakeLists.txt000066400000000000000000000014431476025525100305670ustar00rootroot00000000000000project(lws-minimal-ws-client-ping C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckIncludeFile) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-ws-client-ping) set(SRCS minimal-ws-client-ping.c) set(requirements 1) require_pthreads(requirements) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${PTHREAD_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${PTHREAD_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-ping/README.md000066400000000000000000000167341476025525100273170ustar00rootroot00000000000000# lws minimal ws client PING This connects to libwebsockets.org using the lws-mirror-protocol. It sets a validity regime of testing validity with PING every 3s and failing if it didn't get the PONG back within 10s. ## build ``` $ cmake . && make ``` ## Commandline Options Option|Meaning ---|--- -d|Set logging verbosity (you want 1039 to see the validity ping / pong) --server|Use a specific server instead of libwebsockets.org, eg `--server localhost`. Implies LCCSCF_ALLOW_SELFSIGNED --port|Use a specific port instead of 443, eg `--port 7681` --protocol|Use a specific ws subprotocol rather than lws-mirror-protocol, eg, `--protocol myprotocol` ## usage Just run it, wait for the connect and then there will be PINGs sent at 5s intervals. ``` $ ./lws-minimal-ws-client-ping -d1039 [2020/03/18 13:13:47:1114] U: LWS minimal ws client PING [2020/03/18 13:13:47:1503] I: Initial logging level 1039 [2020/03/18 13:13:47:1507] I: Libwebsockets version: 4.0.99 v4.0.0-20-gc6165f868 [2020/03/18 13:13:47:1508] I: IPV6 not compiled in [2020/03/18 13:13:47:1512] I: LWS_DEF_HEADER_LEN : 4096 [2020/03/18 13:13:47:1514] I: LWS_MAX_SMP : 1 [2020/03/18 13:13:47:1519] I: sizeof (*info) : 720 [2020/03/18 13:13:47:1520] I: SYSTEM_RANDOM_FILEPATH: '/dev/urandom' [2020/03/18 13:13:47:1522] I: HTTP2 support : available [2020/03/18 13:13:47:1552] N: lws_create_context: using ss proxy bind '(null)', port 0, ads '(null)' [2020/03/18 13:13:47:1557] I: context created [2020/03/18 13:13:47:1575] I: Using event loop: poll [2020/03/18 13:13:47:1583] I: Default ALPN advertisment: h2,http/1.1 [2020/03/18 13:13:47:1585] I: default timeout (secs): 20 [2020/03/18 13:13:47:1614] I: Threads: 1 each 5 fds [2020/03/18 13:13:47:1623] I: mem: context: 8152 B (4056 ctx + (1 thr x 4096)) [2020/03/18 13:13:47:1625] I: mem: http hdr size: (4096 + 976), max count 5 [2020/03/18 13:13:47:1629] I: mem: pollfd map: 40 B [2020/03/18 13:13:47:1633] I: mem: platform fd map: 40 B [2020/03/18 13:13:47:1692] I: Compiled with OpenSSL support [2020/03/18 13:13:47:1695] I: Doing SSL library init [2020/03/18 13:13:47:3103] I: canonical_hostname = constance [2020/03/18 13:13:47:3140] I: Creating Vhost 'default' (serving disabled), 4 protocols, IPv6 off [2020/03/18 13:13:47:4072] I: lws_tls_client_create_vhost_context: vh default: created new client ctx 0 [2020/03/18 13:13:47:7468] I: created client ssl context for default [2020/03/18 13:13:47:7482] I: Creating Vhost 'default' (serving disabled), 4 protocols, IPv6 off [2020/03/18 13:13:47:7490] I: lws_tls_client_create_vhost_context: vh default: reusing client ctx 0: use 2 [2020/03/18 13:13:47:7491] I: created client ssl context for default [2020/03/18 13:13:47:7494] I: mem: per-conn: 792 bytes + protocol rx buf [2020/03/18 13:13:47:7497] I: lws_plat_drop_app_privileges: not changing group [2020/03/18 13:13:47:7499] I: lws_plat_drop_app_privileges: not changing user [2020/03/18 13:13:47:7512] I: lws_cancel_service [2020/03/18 13:13:47:7568] I: lws_state_notify_protocol_init: LWS_SYSTATE_CPD_PRE_TIME [2020/03/18 13:13:47:7577] N: lws_ss_create: unknown stream type captive_portal_detect [2020/03/18 13:13:47:7580] I: lws_ss_sys_cpd: Create stream failed (policy?) [2020/03/18 13:13:47:7582] I: lws_state_notify_protocol_init: LWS_SYSTATE_CPD_PRE_TIME [2020/03/18 13:13:47:7582] N: lws_ss_create: unknown stream type captive_portal_detect [2020/03/18 13:13:47:7583] I: lws_ss_sys_cpd: Create stream failed (policy?) [2020/03/18 13:13:47:7585] I: lws_state_notify_protocol_init: doing protocol init on POLICY_VALID [2020/03/18 13:13:47:7588] I: lws_protocol_init [2020/03/18 13:13:47:7623] I: lws_state_transition_steps: CONTEXT_CREATED -> OPERATIONAL [2020/03/18 13:13:47:7628] N: connect_cb: connecting [2020/03/18 13:13:47:7656] I: lws_client_connect_via_info: role binding to h1 [2020/03/18 13:13:47:7662] I: lws_client_connect_via_info: protocol binding to lws-ping-test [2020/03/18 13:13:47:7699] I: lws_client_connect_via_info: wsi 0x5669090: h1 lws-ping-test entry [2020/03/18 13:13:47:7720] I: lws_header_table_attach: wsi 0x5669090: ah (nil) (tsi 0, count = 0) in [2020/03/18 13:13:47:7729] I: _lws_create_ah: created ah 0x5669620 (size 4096): pool length 1 [2020/03/18 13:13:47:7735] I: lws_header_table_attach: did attach wsi 0x5669090: ah 0x5669620: count 1 (on exit) [2020/03/18 13:13:47:7780] I: lws_client_connect_2_dnsreq: 0x5669090: lookup libwebsockets.org:443 [2020/03/18 13:13:47:8784] I: lws_getaddrinfo46: getaddrinfo 'libwebsockets.org' says 0 [2020/03/18 13:13:47:8804] I: lws_client_connect_3_connect: libwebsockets.org ipv4 46.105.127.147 [2020/03/18 13:13:47:9176] I: lws_client_connect_3_connect: getsockopt check: conn OK [2020/03/18 13:13:47:9179] I: lws_client_connect_3_connect: Connection started 0x5682cc0 [2020/03/18 13:13:47:9197] I: lws_client_connect_4_established: wsi 0x5669090: h1 lws-ping-test client created own conn (raw 0) vh defaultm st 0x202 [2020/03/18 13:13:47:9418] I: h1 client conn using alpn list 'http/1.1' [2020/03/18 13:13:48:4523] I: lws_role_call_alpn_negotiated: 'http/1.1' [2020/03/18 13:13:48:4531] I: client connect OK [2020/03/18 13:13:48:4543] I: lws_openssl_describe_cipher: wsi 0x5669090: TLS_AES_256_GCM_SHA384, TLS_AES_256_GCM_SHA384, 256 bits, TLSv1.3 [2020/03/18 13:13:48:4717] I: lws_client_socket_service: HANDSHAKE2: 0x5669090: sending headers (wsistate 0x10000204), w sock 5 [2020/03/18 13:13:48:4992] I: lws_buflist_aware_read: wsi 0x5669090: lws_client_socket_service: ssl_capable_read -4 [2020/03/18 13:13:48:5005] I: lws_buflist_aware_read: wsi 0x5669090: lws_client_socket_service: ssl_capable_read 174 [2020/03/18 13:13:48:5166] I: __lws_header_table_detach: wsi 0x5669090: ah 0x5669620 (tsi=0, count = 1) [2020/03/18 13:13:48:5171] I: __lws_header_table_detach: nobody usable waiting [2020/03/18 13:13:48:5175] I: _lws_destroy_ah: freed ah 0x5669620 : pool length 0 [2020/03/18 13:13:48:5180] I: __lws_header_table_detach: wsi 0x5669090: ah 0x5669620 (tsi=0, count = 0) [2020/03/18 13:13:48:5197] I: _lws_validity_confirmed_role: wsi 0x5669090: setting validity timer 3s (hup 0) [2020/03/18 13:13:48:5208] U: callback_minimal_broker: established [2020/03/18 13:13:51:5218] I: lws_validity_cb: wsi 0x5669090: scheduling validity check [2020/03/18 13:13:51:5325] I: rops_handle_POLLOUT_ws: issuing ping on wsi 0x5669090: ws lws-ping-test h2: 0 [2020/03/18 13:13:51:5504] I: lws_issue_raw: ssl_capable_write (6) says 6 [2020/03/18 13:13:51:5809] I: lws_ws_client_rx_sm: client 0x5669090 received pong [2020/03/18 13:13:51:5819] I: _lws_validity_confirmed_role: wsi 0x5669090: setting validity timer 3s (hup 0) [2020/03/18 13:13:51:5831] I: Client doing pong callback [2020/03/18 13:13:54:5821] I: lws_validity_cb: wsi 0x5669090: scheduling validity check [2020/03/18 13:13:54:5825] I: rops_handle_POLLOUT_ws: issuing ping on wsi 0x5669090: ws lws-ping-test h2: 0 [2020/03/18 13:13:54:5833] I: lws_issue_raw: ssl_capable_write (6) says 6 [2020/03/18 13:13:54:6258] I: lws_ws_client_rx_sm: client 0x5669090 received pong [2020/03/18 13:13:54:6261] I: _lws_validity_confirmed_role: wsi 0x5669090: setting validity timer 3s (hup 0) [2020/03/18 13:13:54:6263] I: Client doing pong callback [2020/03/18 13:13:57:6263] I: lws_validity_cb: wsi 0x5669090: scheduling validity check [2020/03/18 13:13:57:6267] I: rops_handle_POLLOUT_ws: issuing ping on wsi 0x5669090: ws lws-ping-test h2: 0 [2020/03/18 13:13:57:6275] I: lws_issue_raw: ssl_capable_write (6) says 6 [2020/03/18 13:13:58:0034] I: lws_ws_client_rx_sm: client 0x5669090 received pong ... ``` libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-ping/libwebsockets.org.cer000066400000000000000000000036241476025525100321530ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ 0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ 3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-ping/minimal-ws-client-ping.c000066400000000000000000000076571476025525100324740ustar00rootroot00000000000000/* * lws-minimal-ws-client-ping * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates keeping a ws connection validated by the lws validity * timer stuff without having to do anything in the code. Use debug logging * -d1039 to see lws doing the pings / pongs in the background. */ #include #include #include #if defined(WIN32) #define HAVE_STRUCT_TIMESPEC #if defined(pid_t) #undef pid_t #endif #endif #include static struct lws_context *context; static struct lws *client_wsi; static int interrupted, port = 443, ssl_connection = LCCSCF_USE_SSL; static const char *server_address = "libwebsockets.org", *pro = "lws-mirror-protocol"; static lws_sorted_usec_list_t sul; static const lws_retry_bo_t retry = { .secs_since_valid_ping = 3, .secs_since_valid_hangup = 10, }; static void connect_cb(lws_sorted_usec_list_t *_sul) { struct lws_client_connect_info i; lwsl_notice("%s: connecting\n", __func__); memset(&i, 0, sizeof(i)); i.context = context; i.port = port; i.address = server_address; i.path = "/"; i.host = i.address; i.origin = i.address; i.ssl_connection = ssl_connection; i.protocol = pro; i.alpn = "h2;http/1.1"; i.local_protocol_name = "lws-ping-test"; i.pwsi = &client_wsi; i.retry_and_idle_policy = &retry; if (!lws_client_connect_via_info(&i)) lws_sul_schedule(context, 0, _sul, connect_cb, 5 * LWS_USEC_PER_SEC); } static int callback_minimal_pingtest(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { switch (reason) { case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); lws_sul_schedule(context, 0, &sul, connect_cb, 5 * LWS_USEC_PER_SEC); break; case LWS_CALLBACK_CLIENT_ESTABLISHED: lwsl_user("%s: established\n", __func__); break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static const struct lws_protocols protocols[] = { { "lws-ping-test", callback_minimal_pingtest, 0, 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws client PING\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.port = CONTEXT_PORT_NO_LISTEN; /* we do not run any server */ info.protocols = protocols; #if defined(LWS_WITH_MBEDTLS) || defined(USE_WOLFSSL) /* * OpenSSL uses the system trust store. mbedTLS has to be told which * CA to trust explicitly. */ info.client_ssl_ca_filepath = "./libwebsockets.org.cer"; #endif if ((p = lws_cmdline_option(argc, argv, "--protocol"))) pro = p; if ((p = lws_cmdline_option(argc, argv, "--server"))) { server_address = p; pro = "lws-minimal"; ssl_connection |= LCCSCF_ALLOW_SELFSIGNED; } if ((p = lws_cmdline_option(argc, argv, "--port"))) port = atoi(p); info.fd_limit_per_thread = 1 + 1 + 1; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } lws_sul_schedule(context, 0, &sul, connect_cb, 100); while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); lwsl_user("Completed\n"); return 0; } libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-pmd-bulk/000077500000000000000000000000001476025525100266035ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-pmd-bulk/CMakeLists.txt000066400000000000000000000014231476025525100313430ustar00rootroot00000000000000project(lws-minimal-ws-client-pmd-bulk C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-ws-client-pmd-bulk) set(SRCS minimal-ws-client-pmd-bulk.c) set(requirements 1) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) #require_lws_config(LWS_WITHOUT_EXTENSIONS 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-pmd-bulk/README.md000066400000000000000000000302331476025525100300630ustar00rootroot00000000000000# lws minimal ws client + permessage-deflate for bulk traffic This example opens a client connection to localhost:7681 where it expects to find minimal-ws-server-pmd-bulk running. It sends and receives a large, multifragment message, and then exits. ## build ``` $ cmake . && make ``` ## usage Both the server and client side must use the same options - `-n` disable permessage-deflate extension - `-c` send compressible text instead of uncompressible binary data ``` $ ./lws-minimal-ws-client-pmd-bulk [2018/04/05 12:08:58:9120] USER: LWS minimal ws client + permessage-deflate + multifragment bulk message [2018/04/05 12:08:58:9120] USER: ./lws-minimal-ws-client-pmd-bulk [-n (no exts)] [-c (compressible)] [2018/04/05 12:08:58:9120] NOTICE: Creating Vhost 'default' (serving disabled), 2 protocols, IPv6 on [2018/04/05 12:08:59:9139] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9139] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9139] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9139] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9139] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9140] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9140] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9140] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9140] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9140] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9140] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9141] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9141] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9141] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9142] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9142] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9142] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9142] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9142] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9142] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9143] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9143] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9143] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9143] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9143] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9143] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9144] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9144] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9144] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9144] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9144] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9144] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9145] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9145] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9145] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9145] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9146] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9146] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9146] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9146] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9146] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9146] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9147] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9147] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9147] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9147] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9147] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9148] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9148] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9148] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9148] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9148] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9148] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9149] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9149] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9149] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9149] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9149] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9149] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9150] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9150] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9150] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9150] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9150] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9150] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9151] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9151] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9151] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9151] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9152] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9152] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9152] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9152] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9152] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9152] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9153] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9153] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9153] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9153] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9153] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9153] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9154] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9154] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9154] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9154] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9154] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9154] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9155] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9155] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9155] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9155] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9155] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9155] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9156] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9156] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9156] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9156] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9157] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9157] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9157] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9157] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9157] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9158] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9158] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9158] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9158] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9158] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9158] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9159] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9159] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9159] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9159] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9159] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9159] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9160] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9160] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9160] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9160] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9160] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9160] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9161] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9161] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9161] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9161] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9161] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9161] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9162] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9162] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9162] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9162] USER: LWS_CALLBACK_CLIENT_RECEIVE: 1024 (rpp 0, last 0) [2018/04/05 12:08:59:9162] USER: LWS_CALLBACK_CLIENT_RECEIVE: 580 (rpp 0, last 1) [2018/04/05 12:08:59:9180] USER: Completed OK ``` Visit http://localhost:7681 in your browser One or another kind of bulk ws transfer is made to the browser. The ws connection is made via permessage-deflate extension. minimal-ws-client-pmd-bulk.c000066400000000000000000000072561476025525100337440ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-pmd-bulk/* * lws-minimal-ws-client-pmd-bulk * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a ws client that sends bulk data in multiple * ws fragments, in a way compatible with per-message deflate. * * It shows how to send huge messages without needing a lot of memory. * * Build and start the minimal-examples/ws-server/minmal-ws-server-pmd-bulk * example first. Running this sends a large message to the server and * exits. * * If you give both sides the -n commandline option, it disables permessage- * deflate compression extension. */ #include #include #include #define LWS_PLUGIN_STATIC #include "protocol_lws_minimal_pmd_bulk.c" static struct lws_protocols protocols[] = { { "http", lws_callback_http_dummy, 0, 0, 0, NULL, 0 }, LWS_PLUGIN_PROTOCOL_MINIMAL_PMD_BULK, LWS_PROTOCOL_LIST_TERM }; static int interrupted, options; /* pass pointers to shared vars to the protocol */ static const struct lws_protocol_vhost_options pvo_options = { NULL, NULL, "options", /* pvo name */ (void *)&options /* pvo value */ }; static const struct lws_protocol_vhost_options pvo_interrupted = { &pvo_options, NULL, "interrupted", /* pvo name */ (void *)&interrupted /* pvo value */ }; static const struct lws_protocol_vhost_options pvo = { NULL, /* "next" pvo linked-list */ &pvo_interrupted, /* "child" pvo linked-list */ "lws-minimal-pmd-bulk", /* protocol name we belong to on this vhost */ "" /* ignored */ }; static const struct lws_extension extensions[] = { { "permessage-deflate", lws_extension_callback_pm_deflate, "permessage-deflate" "; client_no_context_takeover" "; client_max_window_bits" }, { NULL, NULL, NULL /* terminator */ } }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws client + permessage-deflate + multifragment bulk message\n"); lwsl_user(" needs minimal-ws-server-pmd-bulk running to communicate with\n"); lwsl_user(" %s [-n (no exts)] [-c (compressible)]\n", argv[0]); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = CONTEXT_PORT_NO_LISTEN; info.protocols = protocols; info.pvo = &pvo; if (!lws_cmdline_option(argc, argv, "-n")) info.extensions = extensions; info.pt_serv_buf_size = 32 * 1024; if (lws_cmdline_option(argc, argv, "-c")) options |= 1; /* * since we know this lws context is only ever going to be used with * one client wsis / fds / sockets at a time, let lws know it doesn't * have to use the default allocations for fd tables up to ulimit -n. * It will just allocate for 1 internal and 1 (+ 1 http2 nwsi) that we * will use. */ info.fd_limit_per_thread = 1 + 1 + 1; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); lwsl_user("Completed %s\n", interrupted == 2 ? "OK" : "failed"); return interrupted != 2; } protocol_lws_minimal_pmd_bulk.c000066400000000000000000000171761476025525100350150ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-pmd-bulk/* * ws protocol handler plugin for "lws-minimal-pmd-bulk" * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The protocol shows how to send and receive bulk messages over a ws connection * that optionally may have the permessage-deflate extension negotiated on it. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include /* * We will produce a large ws message either from this text repeated many times, * or from 0x40 + a 6-bit pseudorandom number */ static const char * const redundant_string = "No one would have believed in the last years of the nineteenth " "century that this world was being watched keenly and closely by " "intelligences greater than man's and yet as mortal as his own; that as " "men busied themselves about their various concerns they were " "scrutinised and studied, perhaps almost as narrowly as a man with a " "microscope might scrutinise the transient creatures that swarm and " "multiply in a drop of water. With infinite complacency men went to " "and fro over this globe about their little affairs, serene in their " "assurance of their empire over matter. It is possible that the " "infusoria under the microscope do the same. No one gave a thought to " "the older worlds of space as sources of human danger, or thought of " "them only to dismiss the idea of life upon them as impossible or " "improbable. It is curious to recall some of the mental habits of " "those departed days. At most terrestrial men fancied there might be " "other men upon Mars, perhaps inferior to themselves and ready to " "welcome a missionary enterprise. Yet across the gulf of space, minds " "that are to our minds as ours are to those of the beasts that perish, " "intellects vast and cool and unsympathetic, regarded this earth with " "envious eyes, and slowly and surely drew their plans against us. And " "early in the twentieth century came the great disillusionment. " ; /* this reflects the length of the string above */ #define REPEAT_STRING_LEN 1337 /* this is the total size of the ws message we will send */ #define MESSAGE_SIZE (100 * REPEAT_STRING_LEN) /* this is how much we will send each time the connection is writable */ #define MESSAGE_CHUNK_SIZE (1 * 1024) /* one of these is created for each client connecting to us */ struct per_session_data__minimal_pmd_bulk { int position_tx, position_rx; uint64_t rng_rx, rng_tx; }; struct vhd_minimal_pmd_bulk { struct lws_context *context; struct lws_vhost *vhost; struct lws *client_wsi; lws_sorted_usec_list_t sul; int *interrupted; int *options; }; static uint64_t rng(uint64_t *r) { *r ^= *r << 21; *r ^= *r >> 35; *r ^= *r << 4; return *r; } static void sul_connect_attempt(struct lws_sorted_usec_list *sul) { struct vhd_minimal_pmd_bulk *vhd = lws_container_of(sul, struct vhd_minimal_pmd_bulk, sul); struct lws_client_connect_info i; memset(&i, 0, sizeof(i)); i.context = vhd->context; i.port = 7681; i.address = "localhost"; i.path = "/"; i.host = i.address; i.origin = i.address; i.ssl_connection = 0; i.vhost = vhd->vhost; i.protocol = "lws-minimal-pmd-bulk"; i.pwsi = &vhd->client_wsi; if (!lws_client_connect_via_info(&i)) lws_sul_schedule(vhd->context, 0, &vhd->sul, sul_connect_attempt, 10 * LWS_US_PER_SEC); } static int callback_minimal_pmd_bulk(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__minimal_pmd_bulk *pss = (struct per_session_data__minimal_pmd_bulk *)user; struct vhd_minimal_pmd_bulk *vhd = (struct vhd_minimal_pmd_bulk *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); uint8_t buf[LWS_PRE + MESSAGE_CHUNK_SIZE], *start = &buf[LWS_PRE], *p; int n, m, flags; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct vhd_minimal_pmd_bulk)); if (!vhd) return -1; vhd->context = lws_get_context(wsi); vhd->vhost = lws_get_vhost(wsi); /* get the pointer to "interrupted" we were passed in pvo */ vhd->interrupted = (int *)lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "interrupted")->value; vhd->options = (int *)lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "options")->value; sul_connect_attempt(&vhd->sul); break; case LWS_CALLBACK_PROTOCOL_DESTROY: lws_sul_cancel(&vhd->sul); break; case LWS_CALLBACK_CLIENT_ESTABLISHED: pss->rng_tx = 4; pss->rng_rx = 4; lws_callback_on_writable(wsi); break; case LWS_CALLBACK_CLIENT_WRITEABLE: /* * when we connect, we will send the server a message */ if (pss->position_tx == MESSAGE_SIZE) break; /* fill up one chunk's worth of message content */ p = start; n = MESSAGE_CHUNK_SIZE; if (n > MESSAGE_SIZE - pss->position_tx) n = MESSAGE_SIZE - pss->position_tx; flags = lws_write_ws_flags(LWS_WRITE_BINARY, !pss->position_tx, pss->position_tx + n == MESSAGE_SIZE); /* * select between producing compressible repeated text, * or uncompressible PRNG output */ if (*vhd->options & 1) { while (n) { size_t s; m = pss->position_tx % REPEAT_STRING_LEN; s = (unsigned int)(REPEAT_STRING_LEN - m); if (s > (size_t)n) s = (unsigned int)n; memcpy(p, &redundant_string[m], s); pss->position_tx += (int)s; p += s; n -= (int)s; } } else { pss->position_tx += n; while (n--) *p++ = (uint8_t)rng(&pss->rng_tx); } n = lws_ptr_diff(p, start); m = lws_write(wsi, start, (unsigned int)n, (enum lws_write_protocol)flags); if (m < n) { lwsl_err("ERROR %d writing ws\n", m); return -1; } if (pss->position_tx != MESSAGE_SIZE) /* if more to do... */ lws_callback_on_writable(wsi); else /* if we sent and received everything */ if (pss->position_rx == MESSAGE_SIZE) *vhd->interrupted = 2; break; case LWS_CALLBACK_CLIENT_RECEIVE: /* * When we connect, the server will send us a message too */ lwsl_user("LWS_CALLBACK_CLIENT_RECEIVE: %4d (rpp %5d, last %d)\n", (int)len, (int)lws_remaining_packet_payload(wsi), lws_is_final_fragment(wsi)); if (*vhd->options & 1) { while (len) { size_t s; m = pss->position_rx % REPEAT_STRING_LEN; s = (unsigned int)(REPEAT_STRING_LEN - m); if (s > len) s = len; if (memcmp(in, &redundant_string[m], s)) { lwsl_user("echo'd data doesn't match\n"); return -1; } pss->position_rx += (int)s; in = ((unsigned char *)in) + s; len -= s; } } else { p = (uint8_t *)in; pss->position_rx += (int)len; while (len--) if (*p++ != (uint8_t)rng(&pss->rng_rx)) { lwsl_user("echo'd data doesn't match\n"); return -1; } } /* if we sent and received everything */ if (pss->position_rx == MESSAGE_SIZE && pss->position_tx == MESSAGE_SIZE) *vhd->interrupted = 2; break; case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); vhd->client_wsi = NULL; lws_sul_schedule(vhd->context, 0, &vhd->sul, sul_connect_attempt, LWS_US_PER_SEC); break; case LWS_CALLBACK_CLIENT_CLOSED: vhd->client_wsi = NULL; lws_sul_schedule(vhd->context, 0, &vhd->sul, sul_connect_attempt, LWS_US_PER_SEC); break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_MINIMAL_PMD_BULK \ { \ "lws-minimal-pmd-bulk", \ callback_minimal_pmd_bulk, \ sizeof(struct per_session_data__minimal_pmd_bulk), \ 4096, \ 0, NULL, 0 \ } libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-rx/000077500000000000000000000000001476025525100255215ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-rx/CMakeLists.txt000066400000000000000000000017561476025525100302720ustar00rootroot00000000000000project(lws-minimal-ws-client-rx C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-ws-client-rx) set(SRCS minimal-ws-client.c) set(requirements 1) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (LWS_CTEST_INTERNET_AVAILABLE) add_test(NAME ws-client-rx-warmcat COMMAND lws-minimal-ws-client-rx -t) set_tests_properties(ws-client-rx-warmcat PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/ws-client/minimal-ws-client-rx TIMEOUT 20) endif() if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-rx/README.md000066400000000000000000000024471476025525100270070ustar00rootroot00000000000000# lws minimal ws client rx ## build ``` $ cmake . && make ``` ## usage The application goes to https://libwebsockets.org and makes a wss connection using the dumb-increment-protocol. It shows the incrementing number it is being sent over ws as it arrives. This example only receives things to keep it simple. See minimal-ws-client-tx for code related to sending things. Of course rx and tx are supported in the same protocol. ``` ./lws-minimal-ws-client-rx [2018/03/14 11:57:24:0689] USER: LWS minimal ws client rx [2018/03/14 11:57:24:0705] NOTICE: Creating Vhost 'default' port -1, 1 protocols, IPv6 off [2018/03/14 11:57:24:0710] NOTICE: created client ssl context for default [2018/03/14 11:57:24:0788] NOTICE: lws_client_connect_2: 0x15b8310: address libwebsockets.org [2018/03/14 11:57:24:7643] NOTICE: lws_client_connect_2: 0x15b8310: address libwebsockets.org [2018/03/14 11:57:26:9191] USER: RX: 0 [2018/03/14 11:57:26:9318] USER: RX: 1 [2018/03/14 11:57:27:2182] USER: RX: 2 [2018/03/14 11:57:27:2336] USER: RX: 3 [2018/03/14 11:57:27:2838] USER: RX: 4 [2018/03/14 11:57:27:5173] USER: RX: 5 [2018/03/14 11:57:27:5352] USER: RX: 6 [2018/03/14 11:57:27:5854] USER: RX: 7 [2018/03/14 11:57:27:8156] USER: RX: 8 [2018/03/14 11:57:27:8359] USER: RX: 9 ^C[2018/03/14 11:57:27:9884] USER: Completed ``` libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-rx/libwebsockets.org.cer000066400000000000000000000036241476025525100316470ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ 0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ 3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-rx/minimal-ws-client.c000066400000000000000000000074731476025525100312310ustar00rootroot00000000000000/* * lws-minimal-ws-client * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the a minimal ws client using lws. * * It connects to https://libwebsockets.org/ and makes a * wss connection to the dumb-increment protocol there. While * connected, it prints the numbers it is being sent by * dumb-increment protocol. */ #include #include #include static int interrupted, rx_seen, test; static struct lws *client_wsi; static int callback_dumb_increment(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { switch (reason) { /* because we are protocols[0] ... */ case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); client_wsi = NULL; break; case LWS_CALLBACK_CLIENT_ESTABLISHED: lwsl_user("%s: established\n", __func__); break; case LWS_CALLBACK_CLIENT_RECEIVE: lwsl_user("RX: %s\n", (const char *)in); rx_seen++; if (test && rx_seen == 10) interrupted = 1; break; case LWS_CALLBACK_CLIENT_CLOSED: client_wsi = NULL; break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static const struct lws_protocols protocols[] = { { "dumb-increment-protocol", callback_dumb_increment, 0, 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_client_connect_info i; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, lws * must have been configured with -DCMAKE_BUILD_TYPE=DEBUG * instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); test = !!lws_cmdline_option(argc, argv, "-t"); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws client rx [-d ] [--h2] [-t (test)]\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.port = CONTEXT_PORT_NO_LISTEN; /* we do not run any server */ info.protocols = protocols; info.timeout_secs = 10; info.connect_timeout_secs = 30; #if defined(LWS_WITH_MBEDTLS) || defined(USE_WOLFSSL) /* * OpenSSL uses the system trust store. mbedTLS has to be told which * CA to trust explicitly. */ info.client_ssl_ca_filepath = "./libwebsockets.org.cer"; #endif /* * since we know this lws context is only ever going to be used with * one client wsis / fds / sockets at a time, let lws know it doesn't * have to use the default allocations for fd tables up to ulimit -n. * It will just allocate for 1 internal and 1 (+ 1 http2 nwsi) that we * will use. */ info.fd_limit_per_thread = 1 + 1 + 1; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } memset(&i, 0, sizeof i); /* otherwise uninitialized garbage */ i.context = context; i.port = 443; i.address = "libwebsockets.org"; i.path = "/"; i.host = i.address; i.origin = i.address; i.ssl_connection = LCCSCF_USE_SSL; i.protocol = protocols[0].name; /* "dumb-increment-protocol" */ i.pwsi = &client_wsi; if (lws_cmdline_option(argc, argv, "--h2")) i.alpn = "h2"; lws_client_connect_via_info(&i); while (n >= 0 && client_wsi && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); lwsl_user("Completed %s\n", rx_seen > 10 ? "OK" : "Failed"); return rx_seen > 10; } libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-spam-tx-rx/000077500000000000000000000000001476025525100271105ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-spam-tx-rx/CMakeLists.txt000066400000000000000000000013551476025525100316540ustar00rootroot00000000000000project(lws-minimal-ws-client-spam-tx-rx C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckIncludeFile) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-ws-client-spam-tx-rx) set(SRCS minimal-ws-client.c) set(requirements 1) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-spam-tx-rx/libwebsockets.org.cer000066400000000000000000000036241476025525100332360ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ 0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ 3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-spam-tx-rx/minimal-ws-client.c000066400000000000000000000124631476025525100326130ustar00rootroot00000000000000#include #include #include #if defined(WIN32) #define HAVE_STRUCT_TIMESPEC #if defined(pid_t) #undef pid_t #endif #endif static int nclients = 11; unsigned char msg[LWS_PRE+128]; static int message_delay = 500000; // microseconds static int connection_delay = 100000; // microseconds static struct lws_context *context; static const char *server_address = "localhost", *pro = "lws-minimal"; static int interrupted = 0, port = 7681, ssl_connection = 0; static int connect_client() { struct lws_client_connect_info i; memset(&i, 0, sizeof(i)); i.context = context; i.port = port; i.address = server_address; i.path = "/"; i.host = i.address; i.origin = i.address; i.ssl_connection = ssl_connection; i.protocol = pro; i.local_protocol_name = pro; //usleep(connection_delay); lwsl_notice("%s: connection %s:%d\n", __func__, i.address, i.port); if (!lws_client_connect_via_info(&i)) return 1; return 0; } static int callback(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { int m= 0, n = 0; short r; #if defined(_DEBUG) && !defined(LWS_WITH_NO_LOGS) size_t remain; int first = 0, final = 0; #endif //lwsl_notice("callback called with reason %d\n", reason); switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: for (n = 0; n < nclients; n++) connect_client(); break; case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); if(--nclients == 0) interrupted = 1; break; /* --- client callbacks --- */ case LWS_CALLBACK_CLIENT_ESTABLISHED: lws_callback_on_writable(wsi); lwsl_user("%s: established connection, wsi = %p\n", __func__, wsi); break; case LWS_CALLBACK_CLIENT_CLOSED: lwsl_user("%s: CLOSED\n", __func__); if(--nclients == 0) interrupted = 1; break; case LWS_CALLBACK_CLIENT_WRITEABLE: m = lws_write(wsi, msg + LWS_PRE, 128, LWS_WRITE_TEXT); if (m < 128) { lwsl_err("sending message failed: %d < %d\n", m, n); return -1; } /* * Schedule the timer after minimum message delay plus the * random number of centiseconds. */ if (lws_get_random(lws_get_context(wsi), &r, 2) == 2) { n = message_delay + 10000*(r % 100); lwsl_debug("set timer on %d usecs\n", n); lws_set_timer_usecs(wsi, n); } break; case LWS_CALLBACK_TIMER: // Let the main loop know we want to send another message to the // server lws_callback_on_writable(wsi); break; case LWS_CALLBACK_CLIENT_RECEIVE: #if defined(_DEBUG) && !defined(LWS_WITH_NO_LOGS) first = lws_is_first_fragment(wsi); final = lws_is_final_fragment(wsi); remain = lws_remaining_packet_payload(wsi); lwsl_debug("LWS_CALLBACK_RECEIVE: len = %lu, first = %d, " "final = %d, remains = %lu\n", (unsigned long)len, first, final, (unsigned long)remain); #endif break; case LWS_CALLBACK_WS_PEER_INITIATED_CLOSE: lwsl_notice("server initiated connection close: len = %lu, " "in = %s\n", (unsigned long)len, (char*)in); return 0; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static const struct lws_protocols protocols[] = { { "spam-rx-tx", callback, 4096, 4096, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; #ifndef WIN32 srandom((unsigned int)time(0)); #endif memset(msg, 'x', sizeof(msg)); signal(SIGINT, sigint_handler); if (lws_cmdline_option(argc, argv, "-d")) logs |= LLL_INFO | LLL_DEBUG; lws_set_log_level(logs, NULL); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.port = CONTEXT_PORT_NO_LISTEN; /* we do not run any server */ info.protocols = protocols; #if defined(LWS_WITH_MBEDTLS) || defined(USE_WOLFSSL) /* * OpenSSL uses the system trust store. mbedTLS has to be told which * CA to trust explicitly. */ info.client_ssl_ca_filepath = "./libwebsockets.org.cer"; #endif if ((p = lws_cmdline_option(argc, argv, "-h"))) { server_address = p; } if ((p = lws_cmdline_option(argc, argv, "-s"))) { ssl_connection |= LCCSCF_USE_SSL | LCCSCF_ALLOW_SELFSIGNED | LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK; } if ((p = lws_cmdline_option(argc, argv, "-p"))) { port = atoi(p); if (port > 65535 || port < 0) return 1; } if ((p = lws_cmdline_option(argc, argv, "-n"))) { n = atoi(p); if (n < 1) n = 1; if (n > LWS_MAX_SMP) n = LWS_MAX_SMP; if (n < nclients) nclients = n; lwsl_notice("Start test clients: %d\n", nclients); } if ((p = lws_cmdline_option(argc, argv, "-c"))) { connection_delay = atoi(p); lwsl_notice("Connection delay: %d\n", connection_delay); } if ((p = lws_cmdline_option(argc, argv, "-m"))) { message_delay = atoi(p); lwsl_notice("Message delay: %d\n", connection_delay); } info.fd_limit_per_thread = (unsigned int)(1 + nclients + 1); context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lwsl_notice("%s: exiting service loop. n = %d, interrupted = %d\n", __func__, n, interrupted); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-spam/000077500000000000000000000000001476025525100260305ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-spam/CMakeLists.txt000066400000000000000000000060551476025525100305760ustar00rootroot00000000000000project(lws-minimal-ws-client-spam C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckIncludeFile) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-ws-client-spam) set(SRCS minimal-ws-client-spam.c) set(requirements 1) require_pthreads(requirements) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) require_lws_config(LWS_WITH_TLS 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) find_program(VALGRIND "valgrind") # # instantiate the server per sai builder instance, they are running in the same # machine context in parallel so they can tread on each other otherwise # set(PORT_WCS_SRV "7620") if ("$ENV{SAI_INSTANCE_IDX}" STREQUAL "0") set(PORT_WCS_SRV 7621) endif() if ("$ENV{SAI_INSTANCE_IDX}" STREQUAL "1") set(PORT_WCS_SRV 7622) endif() if ("$ENV{SAI_INSTANCE_IDX}" STREQUAL "2") set(PORT_WCS_SRV 7623) endif() if ("$ENV{SAI_INSTANCE_IDX}" STREQUAL "3") set(PORT_WCS_SRV 7624) endif() # hack if (WIN32) else() if (LWS_WITH_SERVER) if (WIN32) add_test(NAME st_wcs_srv COMMAND cmd.exe /c start /b $ -s --port ${PORT_WCS_SRV}) add_test(NAME ki_wcs_srv COMMAND taskkill /F /IM $ /T) else() if (VALGRIND) add_test(NAME st_wcs_srv COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background.sh wcs_srv ${VALGRIND} --tool=memcheck $ -r ${CMAKE_SOURCE_DIR}/destdir/usr/local/share/libwebsockets-test-server/ -s --port ${PORT_WCS_SRV} ) add_test(NAME ki_wcs_srv COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background-kill.sh wcs_srv ${VALGRIND} $ --port ${PORT_WCS_SRV}) else() add_test(NAME st_wcs_srv COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background.sh wcs_srv $ -r ${CMAKE_SOURCE_DIR}/destdir/usr/local/share/libwebsockets-test-server/ -s --port ${PORT_WCS_SRV} ) add_test(NAME ki_wcs_srv COMMAND ${CMAKE_SOURCE_DIR}/scripts/ctest-background-kill.sh wcs_srv $ --port ${PORT_WCS_SRV}) endif() endif() set_tests_properties(st_wcs_srv PROPERTIES WORKING_DIRECTORY . FIXTURES_SETUP wcs_srv TIMEOUT 800) set_tests_properties(ki_wcs_srv PROPERTIES FIXTURES_CLEANUP wcs_srv) add_test(NAME ws-client-spam COMMAND lws-minimal-ws-client-spam --server localhost --port ${PORT_WCS_SRV} -l 32 -c 3) set_tests_properties(ws-client-spam PROPERTIES WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/minimal-examples/ws-client/minimal-ws-client-spam FIXTURES_REQUIRED "wcs_srv" TIMEOUT 40) endif() endif() if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${PTHREAD_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${PTHREAD_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-spam/README.md000066400000000000000000000043461476025525100273160ustar00rootroot00000000000000# lws minimal ws client SPAM This connects to libwebsockets.org using the lws-mirror-protocol. By default is has 10 concurrent connections and connects 100 times. ## build ``` $ cmake . && make ``` ## Commandline Options Option|Meaning ---|--- -d|Set logging verbosity --server|Use a specific server instead of libwebsockets.org, eg `--server localhost`. Implies LCCSCF_ALLOW_SELFSIGNED --port|Use a specific port instead of 443, eg `--port 7681` -c|Amount of concurrent connections -l|Test limit (total number of connections to make) ## usage Just run it, it will repeatedly connect and reconnect to libwebsockets.org until it hits the test limit. You can also direct it to use the lws test server in tls mode by running that with `libwebsockets-test-server -s` and running this using, eg ``` $ ./lws-minimal-ws-client-spam -c 20 -l 200 --server localhost --port 7681 ``` ``` $ ./lws-minimal-ws-client-spam [2018/11/15 09:53:19:9639] USER: LWS minimal ws client SPAM [2018/11/15 09:53:19:9647] NOTICE: Creating Vhost 'default' (serving disabled), 1 protocols, IPv6 off [2018/11/15 09:53:19:9695] NOTICE: created client ssl context for default [2018/11/15 09:53:21:0976] USER: callback_minimal_spam: established (try 10, est 0, closed 0, err 0) [2018/11/15 09:53:21:1041] USER: callback_minimal_spam: established (try 10, est 1, closed 0, err 0) [2018/11/15 09:53:21:1089] USER: callback_minimal_spam: established (try 10, est 2, closed 0, err 0) [2018/11/15 09:53:21:1132] USER: callback_minimal_spam: established (try 10, est 3, closed 0, err 0) [2018/11/15 09:53:21:1166] USER: callback_minimal_spam: established (try 10, est 4, closed 0, err 0) [2018/11/15 09:53:21:1531] USER: callback_minimal_spam: established (try 10, est 5, closed 0, err 0) [2018/11/15 09:53:21:1563] USER: callback_minimal_spam: established (try 10, est 6, closed 0, err 0) [2018/11/15 09:53:21:1589] USER: callback_minimal_spam: established (try 10, est 7, closed 0, err 0) [2018/11/15 09:53:21:1616] USER: callback_minimal_spam: established (try 10, est 8, closed 0, err 0) [2018/11/15 09:53:21:1671] USER: callback_minimal_spam: established (try 10, est 9, closed 0, err 0) [2018/11/15 09:53:21:3778] USER: callback_minimal_spam: reopening (try 11, est 10, closed 1, err 0) ... ``` libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-spam/libwebsockets.org.cer000066400000000000000000000036241476025525100321560ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ 0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ 3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-spam/minimal-ws-client-spam.c000066400000000000000000000152631476025525100324720ustar00rootroot00000000000000/* * lws-minimal-ws-client-spam * * Written in 2010-2021 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a ws client that makes continuous mass ws connections * asynchronously */ #include #include #include #if defined(WIN32) #define HAVE_STRUCT_TIMESPEC #if defined(pid_t) #undef pid_t #endif #endif #include enum { CLIENT_IDLE, CLIENT_CONNECTING, CLIENT_AWAITING_SEND, }; struct client { struct lws *wsi; int index; int state; }; static struct lws_context *context; static struct client clients[200]; static int interrupted, port = 443, ssl_connection = LCCSCF_USE_SSL; static const char *server_address = "libwebsockets.org", *pro = "lws-mirror-protocol"; static int concurrent = 3, conn, tries, est, errors, closed, sent, limit = 15; struct pss { int conn; }; static int connect_client(int idx) { struct lws_client_connect_info i; if (tries == limit) { lwsl_user("Reached limit... finishing\n"); return 0; } memset(&i, 0, sizeof(i)); i.context = context; i.port = port; i.address = server_address; i.path = "/"; i.host = i.address; i.origin = i.address; i.ssl_connection = ssl_connection; i.protocol = pro; i.local_protocol_name = pro; i.pwsi = &clients[idx].wsi; clients[idx].state = CLIENT_CONNECTING; tries++; lwsl_notice("%s: connection %s:%d\n", __func__, i.address, i.port); if (!lws_client_connect_via_info(&i)) { clients[idx].wsi = NULL; clients[idx].state = CLIENT_IDLE; return 1; } return 0; } static int callback_minimal_spam(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct pss *pss = (struct pss *)user; uint8_t ping[LWS_PRE + 125]; int n, m; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: for (n = 0; n < concurrent; n++) { clients[n].index = n; connect_client(n); } break; case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: errors++; lwsl_err("CLIENT_CONNECTION_ERROR: %s (try %d, est %d, closed %d, err %d)\n", in ? (char *)in : "(null)", tries, est, closed, errors); for (n = 0; n < concurrent; n++) { if (clients[n].wsi == wsi) { clients[n].wsi = NULL; clients[n].state = CLIENT_IDLE; connect_client(n); break; } } if (tries == closed + errors) { interrupted = 1; lws_cancel_service(lws_get_context(wsi)); } break; /* --- client callbacks --- */ case LWS_CALLBACK_CLIENT_ESTABLISHED: lwsl_user("%s: established (try %d, est %d, closed %d, err %d)\n", __func__, tries, est, closed, errors); est++; pss->conn = conn++; lws_callback_on_writable(wsi); break; case LWS_CALLBACK_CLIENT_CLOSED: closed++; if (tries == closed + errors) { interrupted = 1; lws_cancel_service(lws_get_context(wsi)); } if (tries == limit) { lwsl_user("%s: leaving CLOSED (try %d, est %d, sent %d, closed %d, err %d)\n", __func__, tries, est, sent, closed, errors); break; } for (n = 0; n < concurrent; n++) { if (clients[n].wsi == wsi) { connect_client(n); lwsl_user("%s: reopening (try %d, est %d, closed %d, err %d)\n", __func__, tries, est, closed, errors); break; } } if (n == concurrent) lwsl_user("CLOSED: can't find client wsi\n"); break; case LWS_CALLBACK_CLIENT_WRITEABLE: n = lws_snprintf((char *)ping + LWS_PRE, sizeof(ping) - LWS_PRE, "hello %d", pss->conn); m = lws_write(wsi, ping + LWS_PRE, (unsigned int)n, LWS_WRITE_TEXT); if (m < n) { lwsl_err("sending ping failed: %d\n", m); return -1; } lws_set_timeout(wsi, PENDING_TIMEOUT_USER_OK, LWS_TO_KILL_ASYNC); break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static const struct lws_protocols protocols[] = { { "lws-spam-test", callback_minimal_spam, sizeof(struct pss), 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; static struct lws_protocol_vhost_options pvo = { NULL, /* "next" pvo linked-list */ NULL, /* "child" pvo linked-list */ "lws-spam-test", /* protocol name we belong to on this vhost */ "OK" /* ignored */ }; static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws client SPAM\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.port = CONTEXT_PORT_NO_LISTEN; /* we do not run any server */ info.protocols = protocols; info.pvo = &pvo; #if defined(LWS_WITH_MBEDTLS) || defined(USE_WOLFSSL) /* * OpenSSL uses the system trust store. mbedTLS has to be told which * CA to trust explicitly. */ info.client_ssl_ca_filepath = "./libwebsockets.org.cer"; #endif if ((p = lws_cmdline_option(argc, argv, "--server"))) { server_address = p; ssl_connection |= LCCSCF_ALLOW_SELFSIGNED; } if ((p = lws_cmdline_option(argc, argv, "--port"))) port = atoi(p); if ((p = lws_cmdline_option(argc, argv, "-l"))) limit = atoi(p); if ((p = lws_cmdline_option(argc, argv, "-c"))) concurrent = atoi(p); if (lws_cmdline_option(argc, argv, "-n")) { ssl_connection = 0; info.options = 0; } if (concurrent < 0 || concurrent > (int)LWS_ARRAY_SIZE(clients)) { lwsl_err("%s: -c %d larger than max concurrency %d\n", __func__, concurrent, (int)LWS_ARRAY_SIZE(clients)); return 1; } /* * since we know this lws context is only ever going to be used with * one client wsis / fds / sockets at a time, let lws know it doesn't * have to use the default allocations for fd tables up to ulimit -n. * It will just allocate for 1 internal and n (+ 1 http2 nwsi) that we * will use. */ info.fd_limit_per_thread = (unsigned int)(1 + concurrent + 1); context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lwsl_notice("%s: exiting service loop\n", __func__); lws_context_destroy(context); if (tries == limit && closed == tries) { lwsl_user("Completed\n"); return 0; } lwsl_err("Failed\n"); return 1; } libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-tx/000077500000000000000000000000001476025525100255235ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-tx/CMakeLists.txt000066400000000000000000000014311476025525100302620ustar00rootroot00000000000000project(lws-minimal-ws-client-tx C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckIncludeFile) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-ws-client-tx) set(SRCS minimal-ws-client.c) set(requirements 1) require_pthreads(requirements) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${PTHREAD_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${PTHREAD_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif()libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-tx/README.md000066400000000000000000000020311476025525100267760ustar00rootroot00000000000000# lws minimal ws client tx This demonstrates a ws "publisher" to go with the minimal-ws-broker example. Two threads are spawned that produce messages to be sent to the broker, via a local ringbuffer. Locking is provided to make ringbuffer access threadsafe. When a nailed-up client connection to the broker is established, the ringbuffer is sent to the broker, which distributes the events to all connected clients. ## build ``` $ cmake . && make ``` ## usage This example connects to ws-server/minimal-ws-broker, so you need to build and run that in another terminal. ``` $ ./lws-minimal-ws-client-tx [2018/03/16 16:04:33:5774] USER: LWS minimal ws client tx [2018/03/16 16:04:33:5774] USER: Run minimal-ws-broker and browse to that [2018/03/16 16:04:33:5774] NOTICE: Creating Vhost 'default' port -1, 1 protocols, IPv6 off [2018/03/16 16:04:34:5794] USER: callback_minimal_broker: established ``` If you open a browser on http://localhost:7681 , you will see the subscribed messages from the threads in this app via the broker app. libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client-tx/minimal-ws-client.c000066400000000000000000000210251476025525100312200ustar00rootroot00000000000000/* * lws-minimal-ws-client-tx * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a ws "publisher" to go with the minimal-ws-broker * example. * * Two threads are spawned that produce messages to be sent to the broker, * via a local ringbuffer. Locking is provided to make ringbuffer access * threadsafe. * * When a nailed-up client connection to the broker is established, the * ringbuffer is sent to the broker, which distributes the events to all * connected clients. */ #include #include #include #if defined(WIN32) #define HAVE_STRUCT_TIMESPEC #if defined(pid_t) #undef pid_t #endif #endif #include static int interrupted; /* one of these created for each message */ struct msg { void *payload; /* is malloc'd */ size_t len; }; struct per_vhost_data__minimal { struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; pthread_t pthread_spam[2]; lws_sorted_usec_list_t sul; pthread_mutex_t lock_ring; /* serialize access to the ring buffer */ struct lws_ring *ring; /* ringbuffer holding unsent messages */ uint32_t tail; struct lws_client_connect_info i; struct lws *client_wsi; int counter; char finished; char established; }; #if defined(WIN32) static void usleep(unsigned long l) { Sleep(l / 1000); } #endif static void __minimal_destroy_message(void *_msg) { struct msg *msg = _msg; free(msg->payload); msg->payload = NULL; msg->len = 0; } static void * thread_spam(void *d) { struct per_vhost_data__minimal *vhd = (struct per_vhost_data__minimal *)d; struct msg amsg; int len = 128, index = 1, n, whoami = 0; for (n = 0; n < (int)LWS_ARRAY_SIZE(vhd->pthread_spam); n++) if (pthread_equal(pthread_self(), vhd->pthread_spam[n])) whoami = n + 1; do { /* don't generate output if client not connected */ if (!vhd->established) goto wait; pthread_mutex_lock(&vhd->lock_ring); /* --------- ring lock { */ /* only create if space in ringbuffer */ n = (int)lws_ring_get_count_free_elements(vhd->ring); if (!n) { lwsl_user("dropping!\n"); goto wait_unlock; } amsg.payload = malloc((unsigned int)(LWS_PRE + len)); if (!amsg.payload) { lwsl_user("OOM: dropping\n"); goto wait_unlock; } n = lws_snprintf((char *)amsg.payload + LWS_PRE, (unsigned int)len, "tid: %d, msg: %d", whoami, index++); amsg.len = (unsigned int)n; n = (int)lws_ring_insert(vhd->ring, &amsg, 1); if (n != 1) { __minimal_destroy_message(&amsg); lwsl_user("dropping!\n"); } else /* * This will cause a LWS_CALLBACK_EVENT_WAIT_CANCELLED * in the lws service thread context. */ lws_cancel_service(vhd->context); wait_unlock: pthread_mutex_unlock(&vhd->lock_ring); /* } ring lock ------- */ wait: usleep(100000); } while (!vhd->finished); lwsl_notice("thread_spam %d exiting\n", whoami); pthread_exit(NULL); return NULL; } static void sul_connect_attempt(struct lws_sorted_usec_list *sul) { struct per_vhost_data__minimal *vhd = lws_container_of(sul, struct per_vhost_data__minimal, sul); vhd->i.context = vhd->context; vhd->i.port = 7681; vhd->i.address = "localhost"; vhd->i.path = "/publisher"; vhd->i.host = vhd->i.address; vhd->i.origin = vhd->i.address; vhd->i.ssl_connection = 0; vhd->i.protocol = "lws-minimal-broker"; vhd->i.pwsi = &vhd->client_wsi; if (!lws_client_connect_via_info(&vhd->i)) lws_sul_schedule(vhd->context, 0, &vhd->sul, sul_connect_attempt, 10 * LWS_US_PER_SEC); } static int callback_minimal_broker(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_vhost_data__minimal *vhd = (struct per_vhost_data__minimal *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); const struct msg *pmsg; void *retval; int n, m, r = 0; switch (reason) { /* --- protocol lifecycle callbacks --- */ case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__minimal)); vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); vhd->ring = lws_ring_create(sizeof(struct msg), 8, __minimal_destroy_message); if (!vhd->ring) return 1; pthread_mutex_init(&vhd->lock_ring, NULL); /* start the content-creating threads */ for (n = 0; n < (int)LWS_ARRAY_SIZE(vhd->pthread_spam); n++) if (pthread_create(&vhd->pthread_spam[n], NULL, thread_spam, vhd)) { lwsl_err("thread creation failed\n"); r = 1; goto init_fail; } sul_connect_attempt(&vhd->sul); break; case LWS_CALLBACK_PROTOCOL_DESTROY: init_fail: vhd->finished = 1; for (n = 0; n < (int)LWS_ARRAY_SIZE(vhd->pthread_spam); n++) pthread_join(vhd->pthread_spam[n], &retval); if (vhd->ring) lws_ring_destroy(vhd->ring); lws_sul_cancel(&vhd->sul); pthread_mutex_destroy(&vhd->lock_ring); return r; case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); vhd->client_wsi = NULL; lws_sul_schedule(vhd->context, 0, &vhd->sul, sul_connect_attempt, LWS_US_PER_SEC); break; /* --- client callbacks --- */ case LWS_CALLBACK_CLIENT_ESTABLISHED: lwsl_user("%s: established\n", __func__); vhd->established = 1; break; case LWS_CALLBACK_CLIENT_WRITEABLE: pthread_mutex_lock(&vhd->lock_ring); /* --------- ring lock { */ pmsg = lws_ring_get_element(vhd->ring, &vhd->tail); if (!pmsg) goto skip; /* notice we allowed for LWS_PRE in the payload already */ m = lws_write(wsi, ((unsigned char *)pmsg->payload) + LWS_PRE, pmsg->len, LWS_WRITE_TEXT); if (m < (int)pmsg->len) { pthread_mutex_unlock(&vhd->lock_ring); /* } ring lock */ lwsl_err("ERROR %d writing to ws socket\n", m); return -1; } lws_ring_consume_single_tail(vhd->ring, &vhd->tail, 1); /* more to do for us? */ if (lws_ring_get_element(vhd->ring, &vhd->tail)) /* come back as soon as we can write more */ lws_callback_on_writable(wsi); skip: pthread_mutex_unlock(&vhd->lock_ring); /* } ring lock ------- */ break; case LWS_CALLBACK_CLIENT_CLOSED: vhd->client_wsi = NULL; vhd->established = 0; lws_sul_schedule(vhd->context, 0, &vhd->sul, sul_connect_attempt, LWS_US_PER_SEC); break; case LWS_CALLBACK_EVENT_WAIT_CANCELLED: /* * When the "spam" threads add a message to the ringbuffer, * they create this event in the lws service thread context * using lws_cancel_service(). * * We respond by scheduling a writable callback for the * connected client, if any. */ if (vhd && vhd->client_wsi && vhd->established) lws_callback_on_writable(vhd->client_wsi); break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static const struct lws_protocols protocols[] = { { "lws-minimal-broker", callback_minimal_broker, 0, 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws client tx\n"); lwsl_user(" Run minimal-ws-broker and browse to that\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = CONTEXT_PORT_NO_LISTEN; /* we do not run any server */ info.protocols = protocols; /* * since we know this lws context is only ever going to be used with * one client wsis / fds / sockets at a time, let lws know it doesn't * have to use the default allocations for fd tables up to ulimit -n. * It will just allocate for 1 internal and 1 (+ 1 http2 nwsi) that we * will use. */ info.fd_limit_per_thread = 1 + 1 + 1; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); lwsl_user("Completed\n"); return 0; } libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client/000077500000000000000000000000001476025525100250725ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client/CMakeLists.txt000066400000000000000000000013341476025525100276330ustar00rootroot00000000000000project(lws-minimal-ws-client-ping C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckIncludeFile) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-ws-client) set(SRCS minimal-ws-client.c) set(requirements 1) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client/README.md000066400000000000000000000030141476025525100263470ustar00rootroot00000000000000# lws minimal ws client This connects to libwebsockets.org using the dumb-increment-protocol. It demonstrates how to use the connection retry and backoff stuff in lws. ## build ``` $ cmake . && make ``` ## Commandline Options Option|Meaning ---|--- -d|Set logging verbosity -s|Use a specific server instead of libwebsockets.org, eg `--server localhost`. Implies LCCSCF_ALLOW_SELFSIGNED -p|Use a specific port instead of 443, eg `--port 7681` -j|Allow selfsigned tls cert -k|Allow insecure certs -m|Skip server hostname check -n|Skip tls usage -e|Allow expired certs --protocol|Use a specific ws subprotocol rather than dumb-increment-protocol, eg, `--protocol myprotocol` ## usage Just run it, it will connect to libwebsockets.org and spew incrementing numbers sent by the server at 20Hz ``` $ ./lws-minimal-ws-client [2020/01/22 05:38:47:3409] U: LWS minimal ws client [2020/01/22 05:38:47:4456] N: Loading client CA for verification ./libwebsockets.org.cer [2020/01/22 05:38:48:1649] U: callback_minimal: established [2020/01/22 05:38:48:1739] N: [2020/01/22 05:38:48:1763] N: 0000: 30 0 [2020/01/22 05:38:48:1765] N: ... ``` To test against the lws test server instead of libwebsockets.org, run the test server as ``` $ libwebsockets-test-server -s ``` and run this test app with ``` $ ./lws-minimal-ws-client -s localhost -p 7681 -j ``` You can kill and restart the server to confirm the client connection is re- established if done within the backoff period. libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client/libwebsockets.org.cer000066400000000000000000000036241476025525100312200ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ 0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ 3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/ws-client/minimal-ws-client/minimal-ws-client.c000066400000000000000000000125531476025525100305750ustar00rootroot00000000000000/* * lws-minimal-ws-client * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a ws client that connects by default to libwebsockets.org * dumb increment ws server. */ #include #include #include /* * This represents your object that "contains" the client connection and has * the client connection bound to it */ static struct my_conn { lws_sorted_usec_list_t sul; /* schedule connection retry */ struct lws *wsi; /* related wsi if any */ uint16_t retry_count; /* count of consequetive retries */ } mco; static struct lws_context *context; static int interrupted, port = 443, ssl_connection = LCCSCF_USE_SSL; static const char *server_address = "libwebsockets.org", *pro = "dumb-increment-protocol"; /* * The retry and backoff policy we want to use for our client connections */ static const uint32_t backoff_ms[] = { 1000, 2000, 3000, 4000, 5000 }; static const lws_retry_bo_t retry = { .retry_ms_table = backoff_ms, .retry_ms_table_count = LWS_ARRAY_SIZE(backoff_ms), .conceal_count = LWS_ARRAY_SIZE(backoff_ms), .secs_since_valid_ping = 3, /* force PINGs after secs idle */ .secs_since_valid_hangup = 10, /* hangup after secs idle */ .jitter_percent = 20, }; /* * Scheduled sul callback that starts the connection attempt */ static void connect_client(lws_sorted_usec_list_t *sul) { struct my_conn *mco = lws_container_of(sul, struct my_conn, sul); struct lws_client_connect_info i; memset(&i, 0, sizeof(i)); i.context = context; i.port = port; i.address = server_address; i.path = "/"; i.host = i.address; i.origin = i.address; i.ssl_connection = ssl_connection; i.protocol = pro; i.local_protocol_name = "lws-minimal-client"; i.pwsi = &mco->wsi; i.retry_and_idle_policy = &retry; i.userdata = mco; if (!lws_client_connect_via_info(&i)) /* * Failed... schedule a retry... we can't use the _retry_wsi() * convenience wrapper api here because no valid wsi at this * point. */ if (lws_retry_sul_schedule(context, 0, sul, &retry, connect_client, &mco->retry_count)) { lwsl_err("%s: connection attempts exhausted\n", __func__); interrupted = 1; } } static int callback_minimal(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct my_conn *mco = (struct my_conn *)user; switch (reason) { case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); goto do_retry; break; case LWS_CALLBACK_CLIENT_RECEIVE: lwsl_hexdump_notice(in, len); break; case LWS_CALLBACK_CLIENT_ESTABLISHED: lwsl_user("%s: established\n", __func__); break; case LWS_CALLBACK_CLIENT_CLOSED: goto do_retry; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); do_retry: /* * retry the connection to keep it nailed up * * For this example, we try to conceal any problem for one set of * backoff retries and then exit the app. * * If you set retry.conceal_count to be larger than the number of * elements in the backoff table, it will never give up and keep * retrying at the last backoff delay plus the random jitter amount. */ if (lws_retry_sul_schedule_retry_wsi(wsi, &mco->sul, connect_client, &mco->retry_count)) { lwsl_err("%s: connection attempts exhausted\n", __func__); interrupted = 1; } return 0; } static const struct lws_protocols protocols[] = { { "lws-minimal-client", callback_minimal, 0, 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; static void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; const char *p; int n = 0; signal(SIGINT, sigint_handler); memset(&info, 0, sizeof info); lws_cmdline_option_handle_builtin(argc, argv, &info); lwsl_user("LWS minimal ws client\n"); info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.port = CONTEXT_PORT_NO_LISTEN; /* we do not run any server */ info.protocols = protocols; #if defined(LWS_WITH_MBEDTLS) || defined(USE_WOLFSSL) /* * OpenSSL uses the system trust store. mbedTLS has to be told which * CA to trust explicitly. */ info.client_ssl_ca_filepath = "./libwebsockets.org.cer"; #endif if ((p = lws_cmdline_option(argc, argv, "--protocol"))) pro = p; if ((p = lws_cmdline_option(argc, argv, "-s"))) server_address = p; if ((p = lws_cmdline_option(argc, argv, "-p"))) port = atoi(p); if (lws_cmdline_option(argc, argv, "-n")) ssl_connection &= ~LCCSCF_USE_SSL; if (lws_cmdline_option(argc, argv, "-j")) ssl_connection |= LCCSCF_ALLOW_SELFSIGNED; if (lws_cmdline_option(argc, argv, "-k")) ssl_connection |= LCCSCF_ALLOW_INSECURE; if (lws_cmdline_option(argc, argv, "-m")) ssl_connection |= LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK; if (lws_cmdline_option(argc, argv, "-e")) ssl_connection |= LCCSCF_ALLOW_EXPIRED; info.fd_limit_per_thread = 1 + 1 + 1; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } /* schedule the first client connection attempt to happen immediately */ lws_sul_schedule(context, 0, &mco.sul, connect_client, 1); while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); lwsl_user("Completed\n"); return 0; } libwebsockets-4.3.5/minimal-examples/ws-server/000077500000000000000000000000001476025525100215715ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/README.md000066400000000000000000000016421476025525100230530ustar00rootroot00000000000000|Example|Demonstrates| ---|--- minimal-ws-broker|Simple ws server with a publish / broker / subscribe architecture minimal-ws-server-echo|Simple ws server that listens and echos back anything clients send minimal-ws-server-pmd-bulk|Simple ws server showing how to pass bulk data with permessage-deflate minimal-ws-server-pmd-corner|Corner-case tests for permessage-deflate minimal-ws-server-pmd|Simple ws server with permessage-deflate support minimal-ws-server-ring|Like minimal-ws-server but holds the chat in a multi-tail ringbuffer minimal-ws-server-threadpool|Demonstrates how to use a worker thread pool with lws minimal-ws-server-threads-smp|SMP ws server where data is produced by different threads with multiple lws service threads too minimal-ws-server-threads|Simple ws server where data is produced by different threads minimal-ws-server|Serves an index.html over http that opens a ws shared chat client in a browser libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-broker/000077500000000000000000000000001476025525100251305ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-broker/CMakeLists.txt000066400000000000000000000012741476025525100276740ustar00rootroot00000000000000project(lws-minimal-ws-broker C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-ws-broker) set(SRCS minimal-ws-broker.c) set(requirements 1) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif()libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-broker/README.md000066400000000000000000000012421476025525100264060ustar00rootroot00000000000000# lws minimal ws broker ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-ws-broker [2018/03/15 12:23:12:1559] USER: LWS minimal ws broker | visit http://localhost:7681 [2018/03/15 12:23:12:1560] NOTICE: Creating Vhost 'default' port 7681, 2 protocols, IPv6 off ``` Visit http://localhost:7681 on multiple browser windows The page opens a subscribe mode ws connection back to the broker, and a publisher mode ws connection back to the broker. The textarea shows the data from the subscription connection. If you type text is in the text box and press send, the text is passed to the broker on the publisher ws connection and sent to all subscribers. libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-broker/minimal-ws-broker.c000066400000000000000000000051411476025525100306340ustar00rootroot00000000000000/* * lws-minimal-ws-broker * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws, * with an added publish / broker / subscribe ws server. * * To keep it simple, it serves stuff in the subdirectory "./mount-origin" of * the directory it was started in. * You can change that by changing mount.origin. */ #include #include #include #define LWS_PLUGIN_STATIC #include "protocol_lws_minimal.c" static struct lws_protocols protocols[] = { { "http", lws_callback_http_dummy, 0, 0, 0, NULL, 0 }, LWS_PLUGIN_PROTOCOL_MINIMAL, LWS_PROTOCOL_LIST_TERM }; static int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws broker | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.protocols = protocols; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-broker/mount-origin/000077500000000000000000000000001476025525100275575ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-broker/mount-origin/example.js000066400000000000000000000033771476025525100315620ustar00rootroot00000000000000 function get_appropriate_ws_url(extra_url) { var pcol; var u = document.URL; /* * We open the websocket encrypted if this page came on an * https:// url itself, otherwise unencrypted */ if (u.substring(0, 5) === "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) === "http") u = u.substr(7); } u = u.split("/"); /* + "/xxx" bit is for IE10 workaround */ return pcol + u[0] + "/" + extra_url; } function new_ws(urlpath, protocol) { return new WebSocket(urlpath, protocol); } document.addEventListener("DOMContentLoaded", function() { var subscriber_ws = new_ws(get_appropriate_ws_url(""), "lws-minimal-broker"); try { subscriber_ws.onopen = function() { document.getElementById("b").disabled = 0; }; subscriber_ws.onmessage =function got_packet(msg) { document.getElementById("r").value = document.getElementById("r").value + msg.data + "\n"; document.getElementById("r").scrollTop = document.getElementById("r").scrollHeight; }; subscriber_ws.onclose = function(){ document.getElementById("b").disabled = 1; }; } catch(exception) { alert("

    Error " + exception); } var publisher_ws = new_ws(get_appropriate_ws_url("/publisher"), "lws-minimal-broker"); try { publisher_ws.onopen = function() { document.getElementById("m").disabled = 0; }; publisher_ws.onmessage =function got_packet(msg) { }; publisher_ws.onclose = function(){ document.getElementById("m").disabled = 1; }; } catch(exception) { alert("

    Error " + exception); } function sendmsg() { publisher_ws.send(document.getElementById("m").value); document.getElementById("m").value = ""; } document.getElementById("b").addEventListener("click", sendmsg); }, false); libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-broker/mount-origin/favicon.ico000066400000000000000000000025761476025525100317120ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-broker/mount-origin/index.html000066400000000000000000000012651476025525100315600ustar00rootroot00000000000000
    LWS chat minimal ws broker example.
    This page opens two separate ws connections...
    A subscriber ws connection fills this textarea
    with data it receives from the broker...



    ... and a publisher ws connection sends the string
    in the box below to the broker when you press Send.
    libwebsockets.org-logo.svg000066400000000000000000000226061476025525100346130ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-broker/mount-origin image/svg+xml libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-broker/mount-origin/strict-csp.svg000066400000000000000000000302361476025525100323770ustar00rootroot00000000000000 libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-broker/protocol_lws_minimal.c000066400000000000000000000131451476025525100315340ustar00rootroot00000000000000/* * ws protocol handler plugin for "lws-minimal-broker" * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This implements a minimal "broker", for systems that look like this * * [ publisher ws client ] <-> [ ws server broker ws server ] <-> [ ws client subscriber ] * * The "publisher" role is to add data to the broker. * * The "subscriber" role is to hear about all data added to the system. * * The "broker" role is to manage incoming data from publishers and pass it out * to subscribers. * * Any number of publishers and subscribers are supported. * * This example implements a single ws server, using one ws protocol, that treats ws * connections as being in publisher or subscriber mode according to the URL the ws * connection was made to. ws connections to "/publisher" URL are understood to be * publishing data and to any other URL, subscribing. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include /* one of these created for each message */ struct msg { void *payload; /* is malloc'd */ size_t len; }; /* one of these is created for each client connecting to us */ struct per_session_data__minimal { struct per_session_data__minimal *pss_list; struct lws *wsi; uint32_t tail; char publishing; /* nonzero: peer is publishing to us */ }; /* one of these is created for each vhost our protocol is used with */ struct per_vhost_data__minimal { struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; struct per_session_data__minimal *pss_list; /* linked-list of live pss*/ struct lws_ring *ring; /* ringbuffer holding unsent messages */ }; /* destroys the message when everyone has had a copy of it */ static void __minimal_destroy_message(void *_msg) { struct msg *msg = _msg; free(msg->payload); msg->payload = NULL; msg->len = 0; } static int callback_minimal(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__minimal *pss = (struct per_session_data__minimal *)user; struct per_vhost_data__minimal *vhd = (struct per_vhost_data__minimal *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); const struct msg *pmsg; struct msg amsg; char buf[32]; int n, m; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__minimal)); vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); vhd->ring = lws_ring_create(sizeof(struct msg), 8, __minimal_destroy_message); if (!vhd->ring) return 1; break; case LWS_CALLBACK_PROTOCOL_DESTROY: lws_ring_destroy(vhd->ring); break; case LWS_CALLBACK_ESTABLISHED: pss->tail = lws_ring_get_oldest_tail(vhd->ring); pss->wsi = wsi; if (lws_hdr_copy(wsi, buf, sizeof(buf), WSI_TOKEN_GET_URI) > 0) pss->publishing = !strcmp(buf, "/publisher"); if (!pss->publishing) /* add subscribers to the list of live pss held in the vhd */ lws_ll_fwd_insert(pss, pss_list, vhd->pss_list); break; case LWS_CALLBACK_CLOSED: /* remove our closing pss from the list of live pss */ lws_ll_fwd_remove(struct per_session_data__minimal, pss_list, pss, vhd->pss_list); break; case LWS_CALLBACK_SERVER_WRITEABLE: if (pss->publishing) break; pmsg = lws_ring_get_element(vhd->ring, &pss->tail); if (!pmsg) break; /* notice we allowed for LWS_PRE in the payload already */ m = lws_write(wsi, ((unsigned char *)pmsg->payload) + LWS_PRE, pmsg->len, LWS_WRITE_TEXT); if (m < (int)pmsg->len) { lwsl_err("ERROR %d writing to ws socket\n", m); return -1; } lws_ring_consume_and_update_oldest_tail( vhd->ring, /* lws_ring object */ struct per_session_data__minimal, /* type of objects with tails */ &pss->tail, /* tail of guy doing the consuming */ 1, /* number of payload objects being consumed */ vhd->pss_list, /* head of list of objects with tails */ tail, /* member name of tail in objects with tails */ pss_list /* member name of next object in objects with tails */ ); /* more to do? */ if (lws_ring_get_element(vhd->ring, &pss->tail)) /* come back as soon as we can write more */ lws_callback_on_writable(pss->wsi); break; case LWS_CALLBACK_RECEIVE: if (!pss->publishing) break; /* * For test, our policy is ignore publishing when there are * no subscribers connected. */ if (!vhd->pss_list) break; n = (int)lws_ring_get_count_free_elements(vhd->ring); if (!n) { lwsl_user("dropping!\n"); break; } amsg.len = len; /* notice we over-allocate by LWS_PRE */ amsg.payload = malloc(LWS_PRE + len); if (!amsg.payload) { lwsl_user("OOM: dropping\n"); break; } memcpy((char *)amsg.payload + LWS_PRE, in, len); if (!lws_ring_insert(vhd->ring, &amsg, 1)) { __minimal_destroy_message(&amsg); lwsl_user("dropping 2!\n"); break; } /* * let every subscriber know we want to write something * on them as soon as they are ready */ lws_start_foreach_llp(struct per_session_data__minimal **, ppss, vhd->pss_list) { if (!(*ppss)->publishing) lws_callback_on_writable((*ppss)->wsi); } lws_end_foreach_llp(ppss, pss_list); break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_MINIMAL \ { \ "lws-minimal-broker", \ callback_minimal, \ sizeof(struct per_session_data__minimal), \ 128, \ 0, NULL, 0 \ } libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-raw-proxy/000077500000000000000000000000001476025525100256145ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-raw-proxy/CMakeLists.txt000066400000000000000000000013701476025525100303550ustar00rootroot00000000000000project(lws-minimal-ws-raw-proxy C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-ws-raw-proxy) set(SRCS minimal-ws-raw-proxy.c) set(requirements 1) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) require_lws_config(LWS_WITH_CLIENT 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif()libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-raw-proxy/README.md000066400000000000000000000036701476025525100271010ustar00rootroot00000000000000# lws minimal ws - raw proxy This demonstrates how to use a proxy connection object to bind together two or more connections in a proxy. This particular example has a ws server that creates an onward "raw" client connection to 127.0.0.1:1234. You can make a suitable "raw server" with ``` $ nc -l 127.0.0.1 1234 ``` ## build ``` $ cmake . && make ``` ## Commandline Options Option|Meaning ---|--- -d|Set logging verbosity ## usage ``` $ ./lws-minimal-ws-raw-proxy [2021/03/04 21:14:45:0540] U: LWS minimal ws-raw proxy | visit http://localhost:7681 (-s = use TLS / https) [2021/03/04 21:14:45:0898] N: LWS: 4.1.99-v4.1.0-294-g2776b4ce65, loglevel 1031 [2021/03/04 21:14:45:0902] N: NET CLI SRV H1 H2 WS SS-JSON-POL SSPROX IPV6-on [2021/03/04 21:14:45:1146] N: ++ [3224086|wsi|0|pipe] (1) [2021/03/04 21:14:45:1203] N: ++ [3224086|vh|0|netlink] (1) [2021/03/04 21:14:45:1284] N: ++ [3224086|vh|1|localhost||7681] (2) [2021/03/04 21:14:45:1401] N: lws_socket_bind: nowsi: source ads :: [2021/03/04 21:14:45:1425] N: ++ [3224086|wsi|1|listen|localhost||7681] (2) [2021/03/04 21:14:46:1164] N: ++ [3224086|wsisrv|0|adopted] (1) [2021/03/04 21:14:46:2771] N: ++ [3224086|wsisrv|1|adopted] (2) [2021/03/04 21:14:46:3159] N: ++ [3224086|wsicli|0|RAW/raw-skt/127.0.0.1] (1) [2021/03/04 21:14:46:3451] N: ++ [3224086|wsisrv|2|adopted] (3) ``` Visit http://localhost:7681 in a browser... it loads JS that opens a ws connection to the proxy's ws server side. That causes the proxy to open a raw client connection to 127.0.0.1:1234, and forward anything you type in the browser to the raw server, and anything typed in the raw server (you must press enter on netcat to get it sent) is proxied back to the browser. The proxy can handle many ws connections each with their individual onward raw client connections, so you could open multiple browser windows. But you will need a better "raw server" than netcat, which is restricted to just the one peer at a time. libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-raw-proxy/localhost-100y.cert000066400000000000000000000040721476025525100311550ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-raw-proxy/localhost-100y.key000066400000000000000000000063101476025525100310050ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-raw-proxy/minimal-ws-raw-proxy.c000066400000000000000000000272501476025525100320110ustar00rootroot00000000000000/* * lws-minimal-ws-raw-proxy * * Written in 2010-2021 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a ws (server) -> raw (client) proxy, it's a ws server * that accepts connections, creates an onward client connection to some other * no-protocol server, eg, nc -l 127.0.0.1 1234 * * The idea is to show the general approach for making async proxies using lws * that are robust and valgrind-clean. * * There's no vhd or pss on either side. Instead when the ws server gets an * incoming connection and negotiates the ws link, he creates an object * representing the proxied connection, it is not destroyed automatically when * any particular wsi is closed, instead the last wsi that is part of the * proxied connection destroys it when he is closed. */ #include #include #include #include /* one of these created for each pending message that is to be forwarded */ typedef struct proxy_msg { lws_dll2_t list; size_t len; /* * the packet content is overallocated here, if p is a pointer to * this struct, you can get a pointer to the message contents by * ((uint8_t)&p[1]) + LWS_PRE. * * Notice we additionally take care to overallocate LWS_PRE before the * actual message data, so we can simplify sending it. */ } proxy_msg_t; /* * One of these is created when a inbound ws connection joins, it represents * the proxy action provoked by that. */ typedef struct proxy_conn { struct lws *wsi_ws; /* wsi for the inbound ws conn */ struct lws *wsi_raw; /* wsi for the outbound raw conn */ lws_dll2_owner_t pending_msg_to_ws; lws_dll2_owner_t pending_msg_to_raw; } proxy_conn_t; static int proxy_ws_raw_msg_destroy(struct lws_dll2 *d, void *user) { proxy_msg_t *msg = lws_container_of(d, proxy_msg_t, list); lws_dll2_remove(d); free(msg); return 0; } /* * First the ws server side */ static int callback_proxy_ws_server(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { proxy_conn_t *pc = (proxy_conn_t *)lws_get_opaque_user_data(wsi); struct lws_client_connect_info i; proxy_msg_t *msg; uint8_t *data; int m, a; switch (reason) { case LWS_CALLBACK_ESTABLISHED: /* so let's create the proxy connection object */ pc = malloc(sizeof(*pc)); memset(pc, 0, sizeof(*pc)); /* mark this accepted ws connection with the proxy conn obj */ lws_set_opaque_user_data(wsi, pc); /* tell the proxy conn object that we are the ws side of it */ pc->wsi_ws = wsi; /* * For this example proxy, our job is to create a new, onward, * raw client connection to proxy stuff on to */ memset(&i, 0, sizeof(i)); i.method = "RAW"; i.context = lws_get_context(wsi); i.port = 1234; i.address = "127.0.0.1"; i.ssl_connection = 0; i.local_protocol_name = "lws-ws-raw-raw"; /* also mark the onward, raw client conn with the proxy_conn */ i.opaque_user_data = pc; /* if it succeeds, set the wsi into the proxy_conn */ i.pwsi = &pc->wsi_raw; if (!lws_client_connect_via_info(&i)) { lwsl_warn("%s: onward connection failed\n", __func__); return -1; /* hang up on the ws client, triggering * _CLOSE flow */ } break; case LWS_CALLBACK_CLOSED: /* * Clean up any pending messages to us that are never going * to get delivered now, we are in the middle of closing */ lws_dll2_foreach_safe(&pc->pending_msg_to_ws, NULL, proxy_ws_raw_msg_destroy); /* * Remove our pointer from the proxy_conn... we are about to * be destroyed. */ pc->wsi_ws = NULL; lws_set_opaque_user_data(wsi, NULL); if (!pc->wsi_raw) { /* * The onward raw conn either never got started or is * already closed... then we are the last guy still * holding on to the proxy_conn... and we're going away * so let's destroy it */ free(pc); break; } /* * Onward conn still alive... * does he have stuff left to deliver? */ if (pc->pending_msg_to_raw.count) { /* * Yes, let him get on with trying to send * the remaining pieces... but put a time limit * on how hard he will try now the ws part is * disappearing... give him 3s */ lws_set_timeout(pc->wsi_raw, PENDING_TIMEOUT_KILLED_BY_PROXY_CLIENT_CLOSE, 3); break; } /* * Onward raw client conn doesn't have anything left * to do, let's close him right after this, he will take care to * destroy the proxy_conn when he goes down after he sees we * have already been closed */ lws_wsi_close(pc->wsi_raw, LWS_TO_KILL_ASYNC); break; case LWS_CALLBACK_SERVER_WRITEABLE: if (!pc || !pc->pending_msg_to_ws.count) break; msg = lws_container_of(pc->pending_msg_to_ws.head, proxy_msg_t, list); data = (uint8_t *)&msg[1] + LWS_PRE; /* notice we allowed for LWS_PRE in the payload already */ m = lws_write(wsi, data, msg->len, LWS_WRITE_TEXT); a = (int)msg->len; lws_dll2_remove(&msg->list); free(msg); if (m < a) { lwsl_err("ERROR %d writing to ws\n", m); return -1; } /* * If more to do... */ if (pc->pending_msg_to_ws.count) lws_callback_on_writable(wsi); break; case LWS_CALLBACK_RECEIVE: if (!pc || !pc->wsi_raw) break; /* notice we over-allocate by LWS_PRE + rx len */ msg = (proxy_msg_t *)malloc(sizeof(*msg) + LWS_PRE + len); data = (uint8_t *)&msg[1] + LWS_PRE; if (!msg) { lwsl_user("OOM: dropping\n"); break; } memset(msg, 0, sizeof(*msg)); msg->len = len; memcpy(data, in, len); /* add us on to the list of packets to send to the onward conn */ lws_dll2_add_tail(&msg->list, &pc->pending_msg_to_raw); /* ask to send on the onward proxy client conn */ lws_callback_on_writable(pc->wsi_raw); break; default: break; } return 0; } /* * Then the onward, raw client side */ static int callback_proxy_raw_client(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { proxy_conn_t *pc = (proxy_conn_t *)lws_get_opaque_user_data(wsi); proxy_msg_t *msg; uint8_t *data; int m, a; switch (reason) { case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_warn("%s: onward raw connection failed\n", __func__); pc->wsi_raw = NULL; break; case LWS_CALLBACK_RAW_ADOPT: lwsl_user("LWS_CALLBACK_RAW_ADOPT\n"); pc->wsi_raw = wsi; lws_callback_on_writable(wsi); break; case LWS_CALLBACK_RAW_CLOSE: lwsl_user("LWS_CALLBACK_RAW_CLOSE\n"); /* * Clean up any pending messages to us that are never going * to get delivered now, we are in the middle of closing */ lws_dll2_foreach_safe(&pc->pending_msg_to_raw, NULL, proxy_ws_raw_msg_destroy); /* * Remove our pointer from the proxy_conn... we are about to * be destroyed. */ pc->wsi_raw = NULL; lws_set_opaque_user_data(wsi, NULL); if (!pc->wsi_ws) { /* * The original ws conn is already closed... then we are * the last guy still holding on to the proxy_conn... * and we're going away, so let's destroy it */ free(pc); break; } /* * Original ws conn still alive... * does he have stuff left to deliver? */ if (pc->pending_msg_to_ws.count) { /* * Yes, let him get on with trying to send * the remaining pieces... but put a time limit * on how hard he will try now the raw part is * disappearing... give him 3s */ lws_set_timeout(pc->wsi_ws, PENDING_TIMEOUT_KILLED_BY_PROXY_CLIENT_CLOSE, 3); break; } /* * Original ws client conn doesn't have anything left * to do, let's close him right after this, he will take care to * destroy the proxy_conn when he goes down after he sees we * have already been closed */ lws_wsi_close(pc->wsi_ws, LWS_TO_KILL_ASYNC); break; case LWS_CALLBACK_RAW_RX: lwsl_user("LWS_CALLBACK_RAW_RX (%d)\n", (int)len); if (!pc || !pc->wsi_ws) break; /* notice we over-allocate by LWS_PRE + rx len */ msg = (proxy_msg_t *)malloc(sizeof(*msg) + LWS_PRE + len); data = (uint8_t *)&msg[1] + LWS_PRE; if (!msg) { lwsl_user("OOM: dropping\n"); break; } memset(msg, 0, sizeof(*msg)); msg->len = len; memcpy(data, in, len); /* add us on to the list of packets to send to the onward conn */ lws_dll2_add_tail(&msg->list, &pc->pending_msg_to_ws); /* ask to send on the onward proxy client conn */ lws_callback_on_writable(pc->wsi_ws); break; case LWS_CALLBACK_RAW_WRITEABLE: lwsl_user("LWS_CALLBACK_RAW_WRITEABLE\n"); if (!pc || !pc->pending_msg_to_raw.count) break; msg = lws_container_of(pc->pending_msg_to_raw.head, proxy_msg_t, list); data = (uint8_t *)&msg[1] + LWS_PRE; /* notice we allowed for LWS_PRE in the payload already */ m = lws_write(wsi, data, msg->len, LWS_WRITE_TEXT); a = (int)msg->len; lws_dll2_remove(&msg->list); free(msg); if (m < a) { lwsl_err("ERROR %d writing to raw\n", m); return -1; } /* * If more to do... */ if (pc->pending_msg_to_raw.count) lws_callback_on_writable(wsi); break; default: break; } return 0; } static struct lws_protocols protocols[] = { { "http", lws_callback_http_dummy, 0, 0, 0, NULL, 0 }, { "lws-ws-raw-ws", callback_proxy_ws_server, 0, 1024, 0, NULL, 0 }, { "lws-ws-raw-raw", callback_proxy_raw_client, 0, 1024, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; static const lws_retry_bo_t retry = { .secs_since_valid_ping = 3, .secs_since_valid_hangup = 10, }; static int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws-raw proxy | visit http://localhost:7681 (-s = use TLS / https)\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.protocols = protocols; info.vhost_name = "localhost"; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; #if defined(LWS_WITH_TLS) if (lws_cmdline_option(argc, argv, "-s")) { lwsl_user("Server using TLS\n"); info.options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; } #endif if (lws_cmdline_option(argc, argv, "-h")) info.options |= LWS_SERVER_OPTION_VHOST_UPG_STRICT_HOST_CHECK; if (lws_cmdline_option(argc, argv, "-v")) info.retry_and_idle_policy = &retry; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-raw-proxy/mount-origin/000077500000000000000000000000001476025525100302435ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-raw-proxy/mount-origin/example.js000066400000000000000000000026271476025525100322430ustar00rootroot00000000000000 function get_appropriate_ws_url(extra_url) { var pcol; var u = document.URL; /* * We open the websocket encrypted if this page came on an * https:// url itself, otherwise unencrypted */ if (u.substring(0, 5) === "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) === "http") u = u.substr(7); } u = u.split("/"); /* + "/xxx" bit is for IE10 workaround */ return pcol + u[0] + "/" + extra_url; } function new_ws(urlpath, protocol) { return new WebSocket(urlpath, protocol); } document.addEventListener("DOMContentLoaded", function() { var ws = new_ws(get_appropriate_ws_url(""), "lws-ws-raw-ws"); try { ws.onopen = function() { document.getElementById("m").disabled = 0; document.getElementById("b").disabled = 0; }; ws.onmessage =function got_packet(msg) { document.getElementById("r").value = document.getElementById("r").value + msg.data + "\n"; document.getElementById("r").scrollTop = document.getElementById("r").scrollHeight; }; ws.onclose = function(){ document.getElementById("m").disabled = 1; document.getElementById("b").disabled = 1; }; } catch(exception) { alert("

    Error " + exception); } function sendmsg() { ws.send(document.getElementById("m").value); document.getElementById("m").value = ""; } document.getElementById("b").addEventListener("click", sendmsg); }, false); libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-raw-proxy/mount-origin/favicon.ico000066400000000000000000000025761476025525100323760ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-raw-proxy/mount-origin/index.html000066400000000000000000000007311476025525100322410ustar00rootroot00000000000000
    LWS chat minimal ws server example.
    Chat is sent to all browsers open on this page.


    libwebsockets.org-logo.svg000066400000000000000000000226061476025525100352770ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-raw-proxy/mount-origin image/svg+xml libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-raw-proxy/mount-origin/strict-csp.svg000066400000000000000000000302361476025525100330630ustar00rootroot00000000000000 libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-echo/000077500000000000000000000000001476025525100260665ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-echo/CMakeLists.txt000066400000000000000000000014061476025525100306270ustar00rootroot00000000000000project(lws-minimal-ws-server-echo C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-ws-server-echo) set(SRCS minimal-ws-server-echo.c) set(requirements 1) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) require_lws_config(LWS_WITHOUT_EXTENSIONS 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-echo/README.md000066400000000000000000000013511476025525100273450ustar00rootroot00000000000000# lws minimal ws server + permessage-deflate echo This example serves no-protocl-name ws on localhost:7681 and echoes back anything that comes from the client. You can use it for testing lws against Autobahn (use the -p option to tell it to listen on 9001 for that) ## build ``` $ cmake . && make ``` ## usage Commandline option|Meaning ---|--- -d |Debug verbosity in decimal, eg, -d15 -p port|Port to connect to -u url|URL path part to connect to -o|Finish after one connection ``` $ ./lws-minimal-ws-server-echo [2018/04/24 10:29:34:6212] USER: LWS minimal ws server echo + permessage-deflate + multifragment bulk message [2018/04/24 10:29:34:6213] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 off ... ``` libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-echo/minimal-ws-server-echo.c000066400000000000000000000060711476025525100325330ustar00rootroot00000000000000/* * lws-minimal-ws-server-echo * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a ws server that echoes back what it was sent, in a way * compatible with autobahn -m fuzzingclient */ #include #include #include #define LWS_PLUGIN_STATIC #include "protocol_lws_minimal_server_echo.c" static struct lws_protocols protocols[] = { LWS_PLUGIN_PROTOCOL_MINIMAL_SERVER_ECHO, LWS_PROTOCOL_LIST_TERM }; static int interrupted, port = 7681, options; /* pass pointers to shared vars to the protocol */ static const struct lws_protocol_vhost_options pvo_options = { NULL, NULL, "options", /* pvo name */ (void *)&options /* pvo value */ }; static const struct lws_protocol_vhost_options pvo_interrupted = { &pvo_options, NULL, "interrupted", /* pvo name */ (void *)&interrupted /* pvo value */ }; static const struct lws_protocol_vhost_options pvo = { NULL, /* "next" pvo linked-list */ &pvo_interrupted, /* "child" pvo linked-list */ "lws-minimal-server-echo", /* protocol name we belong to on this vhost */ "" /* ignored */ }; static const struct lws_extension extensions[] = { { "permessage-deflate", lws_extension_callback_pm_deflate, "permessage-deflate" "; client_no_context_takeover" "; client_max_window_bits" }, { NULL, NULL, NULL /* terminator */ } }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws client echo + permessage-deflate + multifragment bulk message\n"); lwsl_user(" lws-minimal-ws-client-echo [-n (no exts)] [-p port] [-o (once)]\n"); if ((p = lws_cmdline_option(argc, argv, "-p"))) port = atoi(p); if (lws_cmdline_option(argc, argv, "-o")) options |= 1; memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = port; info.protocols = protocols; info.pvo = &pvo; if (!lws_cmdline_option(argc, argv, "-n")) info.extensions = extensions; info.pt_serv_buf_size = 32 * 1024; info.options = LWS_SERVER_OPTION_VALIDATE_UTF8 | LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); lwsl_user("Completed %s\n", interrupted == 2 ? "OK" : "failed"); return interrupted != 2; } protocol_lws_minimal_server_echo.c000066400000000000000000000131141476025525100347730ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-echo/* * ws protocol handler plugin for "lws-minimal-server-echo" * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The protocol shows how to send and receive bulk messages over a ws connection * that optionally may have the permessage-deflate extension negotiated on it. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include #define RING_DEPTH 4096 /* one of these created for each message */ struct msg { void *payload; /* is malloc'd */ size_t len; char binary; char first; char final; }; struct per_session_data__minimal_server_echo { struct lws_ring *ring; uint32_t msglen; uint32_t tail; uint8_t completed:1; uint8_t flow_controlled:1; uint8_t write_consume_pending:1; }; struct vhd_minimal_server_echo { struct lws_context *context; struct lws_vhost *vhost; int *interrupted; int *options; }; static void __minimal_destroy_message(void *_msg) { struct msg *msg = _msg; free(msg->payload); msg->payload = NULL; msg->len = 0; } #include static int callback_minimal_server_echo(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__minimal_server_echo *pss = (struct per_session_data__minimal_server_echo *)user; struct vhd_minimal_server_echo *vhd = (struct vhd_minimal_server_echo *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); const struct msg *pmsg; struct msg amsg; int m, n, flags; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct vhd_minimal_server_echo)); if (!vhd) return -1; vhd->context = lws_get_context(wsi); vhd->vhost = lws_get_vhost(wsi); /* get the pointers we were passed in pvo */ vhd->interrupted = (int *)lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "interrupted")->value; vhd->options = (int *)lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "options")->value; break; case LWS_CALLBACK_ESTABLISHED: /* generate a block of output before travis times us out */ lwsl_warn("LWS_CALLBACK_ESTABLISHED\n"); pss->ring = lws_ring_create(sizeof(struct msg), RING_DEPTH, __minimal_destroy_message); if (!pss->ring) return 1; pss->tail = 0; break; case LWS_CALLBACK_SERVER_WRITEABLE: lwsl_user("LWS_CALLBACK_SERVER_WRITEABLE\n"); if (pss->write_consume_pending) { /* perform the deferred fifo consume */ lws_ring_consume_single_tail(pss->ring, &pss->tail, 1); pss->write_consume_pending = 0; } pmsg = lws_ring_get_element(pss->ring, &pss->tail); if (!pmsg) { lwsl_user(" (nothing in ring)\n"); break; } flags = lws_write_ws_flags( pmsg->binary ? LWS_WRITE_BINARY : LWS_WRITE_TEXT, pmsg->first, pmsg->final); /* notice we allowed for LWS_PRE in the payload already */ m = lws_write(wsi, ((unsigned char *)pmsg->payload) + LWS_PRE, pmsg->len, (enum lws_write_protocol)flags); if (m < (int)pmsg->len) { lwsl_err("ERROR %d writing to ws socket\n", m); return -1; } lwsl_user(" wrote %d: flags: 0x%x first: %d final %d\n", m, flags, pmsg->first, pmsg->final); /* * Workaround deferred deflate in pmd extension by only * consuming the fifo entry when we are certain it has been * fully deflated at the next WRITABLE callback. You only need * this if you're using pmd. */ pss->write_consume_pending = 1; lws_callback_on_writable(wsi); if (pss->flow_controlled && (int)lws_ring_get_count_free_elements(pss->ring) > RING_DEPTH - 5) { lws_rx_flow_control(wsi, 1); pss->flow_controlled = 0; } if ((*vhd->options & 1) && pmsg && pmsg->final) pss->completed = 1; break; case LWS_CALLBACK_RECEIVE: lwsl_user("LWS_CALLBACK_RECEIVE: %4d (rpp %5d, first %d, " "last %d, bin %d, msglen %d (+ %d = %d))\n", (int)len, (int)lws_remaining_packet_payload(wsi), lws_is_first_fragment(wsi), lws_is_final_fragment(wsi), lws_frame_is_binary(wsi), pss->msglen, (int)len, (int)pss->msglen + (int)len); if (len) { ; //puts((const char *)in); //lwsl_hexdump_notice(in, len); } amsg.first = (char)lws_is_first_fragment(wsi); amsg.final = (char)lws_is_final_fragment(wsi); amsg.binary = (char)lws_frame_is_binary(wsi); n = (int)lws_ring_get_count_free_elements(pss->ring); if (!n) { lwsl_user("dropping!\n"); break; } if (amsg.final) pss->msglen = 0; else pss->msglen += (uint32_t)len; amsg.len = len; /* notice we over-allocate by LWS_PRE */ amsg.payload = malloc(LWS_PRE + len); if (!amsg.payload) { lwsl_user("OOM: dropping\n"); break; } memcpy((char *)amsg.payload + LWS_PRE, in, len); if (!lws_ring_insert(pss->ring, &amsg, 1)) { __minimal_destroy_message(&amsg); lwsl_user("dropping!\n"); break; } lws_callback_on_writable(wsi); if (n < 3 && !pss->flow_controlled) { pss->flow_controlled = 1; lws_rx_flow_control(wsi, 0); } break; case LWS_CALLBACK_CLOSED: lwsl_user("LWS_CALLBACK_CLOSED\n"); lws_ring_destroy(pss->ring); if (*vhd->options & 1) { if (!*vhd->interrupted) *vhd->interrupted = 1 + pss->completed; lws_cancel_service(lws_get_context(wsi)); } break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_MINIMAL_SERVER_ECHO \ { \ "lws-minimal-server-echo", \ callback_minimal_server_echo, \ sizeof(struct per_session_data__minimal_server_echo), \ 1024, \ 0, NULL, 0 \ } libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd-bulk/000077500000000000000000000000001476025525100266635ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd-bulk/CMakeLists.txt000066400000000000000000000014231476025525100314230ustar00rootroot00000000000000project(lws-minimal-ws-server-pmd-bulk C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-ws-server-pmd-bulk) set(SRCS minimal-ws-server-pmd-bulk.c) set(requirements 1) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) #require_lws_config(LWS_WITHOUT_EXTENSIONS 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd-bulk/README.md000066400000000000000000000007671476025525100301540ustar00rootroot00000000000000# lws minimal ws server + permessage-deflate for bulk traffic ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-ws-server-pmd-bulk [2018/03/04 09:30:02:7986] USER: LWS minimal ws server | visit http://localhost:7681 [2018/03/04 09:30:02:7986] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 on ``` Visit http://localhost:7681 in your browser One or another kind of bulk ws transfer is made to the browser. The ws connection is made via permessage-deflate extension. minimal-ws-server-pmd-bulk.c000066400000000000000000000076651476025525100340600ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd-bulk/* * lws-minimal-ws-server * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws. * * To keep it simple, it serves stuff in the subdirectory "./mount-origin" of * the directory it was started in. * You can change that by changing mount.origin. */ #include #include #include #define LWS_PLUGIN_STATIC #include "protocol_lws_minimal_pmd_bulk.c" static struct lws_protocols protocols[] = { { "http", lws_callback_http_dummy, 0, 0, 0, NULL, 0 }, LWS_PLUGIN_PROTOCOL_MINIMAL_PMD_BULK, LWS_PROTOCOL_LIST_TERM }; static int interrupted, options; /* pass pointers to shared vars to the protocol */ static const struct lws_protocol_vhost_options pvo_options = { NULL, NULL, "options", /* pvo name */ (void *)&options /* pvo value */ }; static const struct lws_protocol_vhost_options pvo_interrupted = { &pvo_options, NULL, "interrupted", /* pvo name */ (void *)&interrupted /* pvo value */ }; static const struct lws_protocol_vhost_options pvo = { NULL, /* "next" pvo linked-list */ &pvo_interrupted, /* "child" pvo linked-list */ "lws-minimal-pmd-bulk", /* protocol name we belong to on this vhost */ "" /* ignored */ }; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; static const struct lws_extension extensions[] = { { "permessage-deflate", lws_extension_callback_pm_deflate, "permessage-deflate" "; client_no_context_takeover" "; client_max_window_bits" }, { NULL, NULL, NULL /* terminator */ } }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws server + permessage-deflate | visit http://localhost:7681\n"); lwsl_user(" %s [-n (no exts)] [-c (compressible)] [-b (blob)]\n", argv[0]); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.protocols = protocols; info.pvo = &pvo; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; if (!lws_cmdline_option(argc, argv, "-n")) info.extensions = extensions; if (lws_cmdline_option(argc, argv, "-c")) options |= 1; /* send compressible text */ if (lws_cmdline_option(argc, argv, "-b")) options |= 2; /* send in one giant blob */ info.pt_serv_buf_size = 32 * 1024; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd-bulk/mount-origin/000077500000000000000000000000001476025525100313125ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd-bulk/mount-origin/example.js000066400000000000000000000026331476025525100333070ustar00rootroot00000000000000 function get_appropriate_ws_url(extra_url) { var pcol; var u = document.URL; /* * We open the websocket encrypted if this page came on an * https:// url itself, otherwise unencrypted */ if (u.substring(0, 5) === "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) === "http") u = u.substr(7); } u = u.split("/"); /* + "/xxx" bit is for IE10 workaround */ return pcol + u[0] + "/" + extra_url; } function new_ws(urlpath, protocol) { return new WebSocket(urlpath, protocol); } document.addEventListener("DOMContentLoaded", function() { var ws = new_ws(get_appropriate_ws_url(""), "lws-minimal-pmd-bulk"); try { ws.onopen = function() { document.getElementById("r").disabled = 0; document.getElementById("status").textContent = "ws open "+ ws.extensions; }; ws.onmessage = function got_packet(msg) { console.log("Received ws message len " + msg.data.size); document.getElementById("r").value = document.getElementById("r").value + "\nReceived: " + msg.data.size + " bytes\n"; document.getElementById("r").scrollTop = document.getElementById("r").scrollHeight; /* echo it back */ ws.send(msg.data); }; ws.onclose = function(){ document.getElementById("r").disabled = 1; document.getElementById("status").textContent = "ws closed"; }; } catch(exception) { alert("

    Error " + exception); } }, false); libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd-bulk/mount-origin/favicon.ico000066400000000000000000000025761476025525100334450ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd-bulk/mount-origin/index.html000066400000000000000000000010031476025525100333010ustar00rootroot00000000000000
    LWS bulk transfer example
    .
    A large ws message is sent to all browsers open on this page.
    The browser js echoes the large ws message back to the server.

    Ws closed


    libwebsockets.org-logo.svg000066400000000000000000000226061476025525100363460ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd-bulk/mount-origin image/svg+xml strict-csp.svg000066400000000000000000000302361476025525100340530ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd-bulk/mount-origin protocol_lws_minimal_pmd_bulk.c000066400000000000000000000155551476025525100350740ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd-bulk/* * ws protocol handler plugin for "lws-minimal-pmd-bulk" * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The protocol shows how to send and receive bulk messages over a ws connection * that optionally may have the permessage-deflate extension negotiated on it. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include /* * We will produce a large ws message either from this text repeated many times, * or from 0x40 + a 6-bit pseudorandom number */ static const char * const redundant_string = "No one would have believed in the last years of the nineteenth " "century that this world was being watched keenly and closely by " "intelligences greater than man's and yet as mortal as his own; that as " "men busied themselves about their various concerns they were " "scrutinised and studied, perhaps almost as narrowly as a man with a " "microscope might scrutinise the transient creatures that swarm and " "multiply in a drop of water. With infinite complacency men went to " "and fro over this globe about their little affairs, serene in their " "assurance of their empire over matter. It is possible that the " "infusoria under the microscope do the same. No one gave a thought to " "the older worlds of space as sources of human danger, or thought of " "them only to dismiss the idea of life upon them as impossible or " "improbable. It is curious to recall some of the mental habits of " "those departed days. At most terrestrial men fancied there might be " "other men upon Mars, perhaps inferior to themselves and ready to " "welcome a missionary enterprise. Yet across the gulf of space, minds " "that are to our minds as ours are to those of the beasts that perish, " "intellects vast and cool and unsympathetic, regarded this earth with " "envious eyes, and slowly and surely drew their plans against us. And " "early in the twentieth century came the great disillusionment. " ; /* this reflects the length of the string above */ #define REPEAT_STRING_LEN 1337 /* this is the total size of the ws message we will send */ #define MESSAGE_SIZE (100 * REPEAT_STRING_LEN) /* this is how much we will send each time the connection is writable */ #define MESSAGE_CHUNK_SIZE (1 * 1024) /* one of these is created for each client connecting to us */ struct per_session_data__minimal_pmd_bulk { int position_tx, position_rx; uint64_t rng_rx, rng_tx; }; struct vhd_minimal_pmd_bulk { int *interrupted; /* * b0 = 1: test compressible text, = 0: test uncompressible binary * b1 = 1: send as a single blob, = 0: send as fragments */ int *options; }; static uint64_t rng(uint64_t *r) { *r ^= *r << 21; *r ^= *r >> 35; *r ^= *r << 4; return *r; } static int callback_minimal_pmd_bulk(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__minimal_pmd_bulk *pss = (struct per_session_data__minimal_pmd_bulk *)user; struct vhd_minimal_pmd_bulk *vhd = (struct vhd_minimal_pmd_bulk *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); uint8_t buf[LWS_PRE + MESSAGE_SIZE], *start = &buf[LWS_PRE], *p; int n, m, flags, olen, amount; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct vhd_minimal_pmd_bulk)); if (!vhd) return -1; /* get the pointer to "interrupted" we were passed in pvo */ vhd->interrupted = (int *)lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "interrupted")->value; vhd->options = (int *)lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "options")->value; break; case LWS_CALLBACK_ESTABLISHED: pss->rng_tx = 4; pss->rng_rx = 4; lws_callback_on_writable(wsi); break; case LWS_CALLBACK_SERVER_WRITEABLE: if (pss->position_tx == MESSAGE_SIZE) break; amount = MESSAGE_CHUNK_SIZE; if ((*vhd->options) & 2) { amount = MESSAGE_SIZE; lwsl_user("(writing as one blob of %d)\n", amount); } /* fill up one chunk's worth of message content */ p = start; n = amount; if (n > MESSAGE_SIZE - pss->position_tx) n = MESSAGE_SIZE - pss->position_tx; flags = lws_write_ws_flags(LWS_WRITE_BINARY, !pss->position_tx, pss->position_tx + n == MESSAGE_SIZE); /* * select between producing compressible repeated text, * or uncompressible PRNG output */ if (*vhd->options & 1) { while (n) { size_t s; m = pss->position_tx % REPEAT_STRING_LEN; s = (unsigned int)(REPEAT_STRING_LEN - m); if (s > (size_t)n) s = (unsigned int)n; memcpy(p, &redundant_string[m], s); pss->position_tx += (int)s; p += s; n -= (int)s; } } else { pss->position_tx += n; while (n--) *p++ = (uint8_t)rng(&pss->rng_tx); } n = lws_ptr_diff(p, start); m = lws_write(wsi, start, (unsigned int)n, (enum lws_write_protocol)flags); lwsl_user("LWS_CALLBACK_SERVER_WRITEABLE: wrote %d\n", n); if (m < n) { lwsl_err("ERROR %d / %d writing ws\n", m, n); return -1; } if (pss->position_tx != MESSAGE_SIZE) /* if more to do... */ lws_callback_on_writable(wsi); break; case LWS_CALLBACK_RECEIVE: lwsl_user("LWS_CALLBACK_RECEIVE: %4d (pss->pos=%d, rpp %5d, last %d)\n", (int)len, (int)pss->position_rx, (int)lws_remaining_packet_payload(wsi), lws_is_final_fragment(wsi)); olen = (int)len; if (*vhd->options & 1) { while (len) { size_t s; m = pss->position_rx % REPEAT_STRING_LEN; s = (unsigned int)(REPEAT_STRING_LEN - m); if (s > len) s = len; if (memcmp(in, &redundant_string[m], s)) { lwsl_user("echo'd data doesn't match\n"); return -1; } pss->position_rx += (int)s; in = ((char *)in) + s; len -= s; } } else { p = (uint8_t *)in; pss->position_rx += (int)len; while (len--) { if (*p++ != (uint8_t)rng(&pss->rng_rx)) { lwsl_user("echo'd data doesn't match: 0x%02X 0x%02X (%d)\n", *(p - 1), (int)(0x40 + (pss->rng_rx & 0x3f)), (int)((pss->position_rx - olen) + olen - (int)len)); lwsl_hexdump_notice(in, (unsigned int)olen); return -1; } } if (pss->position_rx == MESSAGE_SIZE) pss->position_rx = 0; } break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_MINIMAL_PMD_BULK \ { \ "lws-minimal-pmd-bulk", \ callback_minimal_pmd_bulk, \ sizeof(struct per_session_data__minimal_pmd_bulk), \ 4096, \ 0, NULL, 0 \ } libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd-corner/000077500000000000000000000000001476025525100272165ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd-corner/CMakeLists.txt000066400000000000000000000014301476025525100317540ustar00rootroot00000000000000project(lws-minimal-ws-server-pmd-corner C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-ws-server-pmd-corner) set(SRCS minimal-ws-server-pmd-corner.c) set(requirements 1) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) require_lws_config(LWS_WITHOUT_EXTENSIONS 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd-corner/README.md000066400000000000000000000011111476025525100304670ustar00rootroot00000000000000# lws minimal ws server + permessage-deflate corner case tests ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-ws-server-pmd-corner [2018/11/21 16:47:49:0171] USER: LWS minimal ws server + permessage-deflate Corner Cases | visit http://localhost:7681 [2018/11/21 16:47:49:0172] NOTICE: Creating Vhost 'default' port 7681, 2 protocols, IPv6 off ``` Visit http://localhost:7681 5 ws connections are made via permessage-deflate extension. When the ws connection is established, various amounts of data are sent resulting in ciphertext packets of a known size. minimal-ws-server-pmd-corner.c000066400000000000000000000055431476025525100347370ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd-corner/* * lws-minimal-ws-server * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws. * * To keep it simple, it serves stuff in the subdirectory "./mount-origin" of * the directory it was started in. * You can change that by changing mount.origin. */ #include #include #include #define LWS_PLUGIN_STATIC #include "protocol_lws_minimal.c" static struct lws_protocols protocols[] = { { "http", lws_callback_http_dummy, 0, 0, 0, NULL, 0 }, LWS_PLUGIN_PROTOCOL_MINIMAL, LWS_PROTOCOL_LIST_TERM }; static int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; static const struct lws_extension extensions[] = { { "permessage-deflate", lws_extension_callback_pm_deflate, "permessage-deflate" "; client_no_context_takeover" "; client_max_window_bits" }, { NULL, NULL, NULL /* terminator */ } }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws server + permessage-deflate Corner Cases | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.protocols = protocols; info.extensions = extensions; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd-corner/mount-origin/000077500000000000000000000000001476025525100316455ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd-corner/mount-origin/example.js000066400000000000000000000035421476025525100336420ustar00rootroot00000000000000 function get_appropriate_ws_url(extra_url) { var pcol; var u = document.URL; /* * We open the websocket encrypted if this page came on an * https:// url itself, otherwise unencrypted */ if (u.substring(0, 5) === "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) === "http") u = u.substr(7); } u = u.split("/"); /* + "/xxx" bit is for IE10 workaround */ return pcol + u[0] + "/" + extra_url; } function new_ws(urlpath, protocol) { return new WebSocket(urlpath, protocol); } var ws = new Array(); function conn(n) { ws[n] = new_ws(get_appropriate_ws_url("/" + (n + 1)), "lws-minimal"); ws[n].n = n; try { ws[n].onopen = function() { document.getElementById("r").disabled = 0; document.getElementById("status").textContent = document.getElementById("status").textContent + " " + "ws open "+ ws[n].extensions; }; ws[n].onmessage = function got_packet(msg) { if (typeof msg.data !== "string") { //console.log(msg.data); document.getElementById("r").value = document.getElementById("r").value + ws[n].n + " " + "blob uncompressed length " + msg.data.size + "\n"; } else document.getElementById("r").value = document.getElementById("r").value + msg.data + "\n"; document.getElementById("r").scrollTop = document.getElementById("r").scrollHeight; }; ws[n].onclose = function(){ document.getElementById("r").disabled = 1; document.getElementById("status").textContent = "ws closed"; }; } catch(exception) { alert("

    Error " + exception); } } window.addEventListener("load", function() { var n; /* * we make 5 individual connections. Because if we don't, by default pmd * will reuse its dictionary to make subsequent tests very short. */ for (n = 0; n < 5; n++) conn(n); console.log("load"); }, false); libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd-corner/mount-origin/favicon.ico000066400000000000000000000025761476025525100340000ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd-corner/mount-origin/index.html000066400000000000000000000007741476025525100336520ustar00rootroot00000000000000
    LWS pmd corner case test.
    A ws link is made back to the server and results shown here.
    It should show four binary blobs of increasing size.

    Ws closed

    libwebsockets.org-logo.svg000066400000000000000000000226061476025525100367010ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd-corner/mount-origin image/svg+xml strict-csp.svg000066400000000000000000000302361476025525100344060ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd-corner/mount-origin libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd-corner/protocol_lws_minimal.c000066400000000000000000000230461476025525100336230ustar00rootroot00000000000000/* * ws protocol handler plugin for "lws-minimal" * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This version holds a single message at a time, which may be lost if a new * message comes. See the minimal-ws-server-ring sample for the same thing * but using an lws_ring ringbuffer to hold up to 8 messages at a time. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include /* * This came from... * * cat /dev/urandom | hexdump -C -n 1024 | tr -s ' ' | cut -d' ' -f 2-17 | head -n-1 | sed "s/\ /, 0x/g" | sed "s/^/0x/g" | sed "s/\$/,/g" * * ...then the length tuned by hand to get the ciphertext sizes that we want to * confirm are OK. * * We can only pass in a maximum of one compression buffer of input at a time, * which is 1024 by default. */ unsigned char uncompressible[] = { 0xfe, 0xcc, 0x47, 0xcb, 0x10, 0xf4, 0x3c, 0x85, 0x8e, 0xd4, 0xe2, 0xf6, 0xd1, 0xd1, 0xdb, 0x64, 0x94, 0x50, 0xf6, 0x14, 0x25, 0x03, 0x09, 0x3a, 0xb1, 0x47, 0x86, 0xa8, 0x3c, 0x4f, 0x3b, 0x98, 0x7b, 0x3e, 0x67, 0x3e, 0x22, 0xc5, 0x4c, 0x45, 0xf4, 0xf7, 0xb5, 0x79, 0xc0, 0x26, 0x6e, 0x5c, 0xf4, 0x10, 0x04, 0xa9, 0x3c, 0x4f, 0xed, 0xc5, 0x3d, 0xd4, 0x9f, 0x9f, 0xa3, 0xdb, 0x29, 0xeb, 0x1e, 0xe1, 0x52, 0xab, 0xb5, 0x75, 0x25, 0x86, 0x86, 0x02, 0x2c, 0x9d, 0x9c, 0x86, 0x46, 0x92, 0xe9, 0x04, 0xd8, 0x2c, 0x7d, 0x8a, 0x56, 0xe1, 0xe1, 0xb6, 0x84, 0x4d, 0x17, 0x30, 0x01, 0x60, 0xa6, 0xf4, 0xba, 0xc9, 0x5a, 0x29, 0xe3, 0x05, 0xe1, 0xb4, 0x0b, 0x23, 0x74, 0x93, 0x25, 0x76, 0xce, 0x15, 0xe4, 0x82, 0x9f, 0xbf, 0xe8, 0x6a, 0x4a, 0xc5, 0xc2, 0x22, 0x91, 0x80, 0xb5, 0xd7, 0xb3, 0xce, 0x70, 0x0e, 0xf7, 0xbb, 0x2f, 0xc5, 0x83, 0x39, 0x86, 0xe5, 0x3e, 0xb7, 0x83, 0x87, 0xc2, 0xeb, 0xc8, 0xed, 0x59, 0x26, 0xc1, 0xe6, 0x80, 0x17, 0x3c, 0x29, 0x53, 0x4c, 0x1c, 0x3f, 0x54, 0xbe, 0x34, 0x26, 0x72, 0xed, 0x38, 0x10, 0xd1, 0x37, 0x07, 0x2d, 0x12, 0x31, 0x9b, 0xc5, 0x92, 0x09, 0x13, 0x5d, 0x8e, 0xef, 0xdb, 0x52, 0x7f, 0x7d, 0x6f, 0x62, 0x1e, 0x17, 0xd2, 0xf9, 0x72, 0x74, 0xc7, 0xd6, 0x1f, 0x8b, 0x9c, 0x4c, 0x26, 0xd2, 0x6f, 0x7c, 0x33, 0x06, 0xee, 0xc2, 0xa3, 0x41, 0x43, 0x4f, 0x40, 0x2a, 0x9c, 0xb3, 0x4a, 0xb1, 0x88, 0x4e, 0x6f, 0xf2, 0xb7, 0x38, 0xde, 0x87, 0x0d, 0xdc, 0x15, 0x6a, 0x36, 0x6b, 0xf3, 0x6c, 0x61, 0xf5, 0x24, 0x8e, 0xb6, 0xcc, 0x8a, 0x3a, 0xa0, 0xb4, 0x9b, 0xae, 0x85, 0x87, 0x75, 0xf5, 0xbd, 0x50, 0x1f, 0xb5, 0x0c, 0xdb, 0x6c, 0x68, 0x59, 0xef, 0x37, 0x5a, 0x2a, 0x85, 0xf0, 0xce, 0x4d, 0x58, 0xa1, 0xa5, 0xde, 0x73, 0x9b, 0x1a, 0x3d, 0x8a, 0x00, 0xba, 0x2f, 0xe2, 0xda, 0xad, 0x3c, 0x63, 0x8a, 0x33, 0x39, 0xc4, 0x07, 0x29, 0x1d, 0xa7, 0x40, 0x3b, 0xa4, 0xa6, 0xae, 0xee, 0x37, 0x08, 0x83, 0xd1, 0x72, 0x66, 0x3d, 0x43, 0xe3, 0x7a, 0x48, 0xfc, 0xf8, 0xd4, 0xe3, 0xab, 0xd0, 0xe9, 0xb1, 0xf4, 0x4d, 0x3c, 0x6b, 0x58, 0xde, 0x3c, 0x91, 0x0d, 0x3e, 0xec, 0x35, 0x6d, 0x53, 0xe6, 0xb6, 0x4b, 0xc0, 0x80, 0x18, 0xab, 0x96, 0x7f, 0x05, 0xd7, 0xd4, 0x81, 0x0f, 0x92, 0x2b, 0xaf, 0x72, 0x59, 0xc2, 0x14, 0xca, 0x62, 0x82, 0xac, 0xe3, 0x17, 0x43, 0x61, 0x4d, 0x1e, 0xfc, 0x72, 0xaf, 0xfc, 0x55, 0x2a, 0x2b, 0xb6, 0x8e, 0x6e, 0xe6, 0x86, 0xeb, 0xcc, 0x26, 0x6c, 0xdf, 0xac, 0x02, 0x58, 0xa1, 0x5d, 0x1b, 0x07, 0xe2, 0x5d, 0x50, 0xb9, 0xbf, 0x2e, 0x1f, 0x49, 0x39, 0xe6, 0x7f, 0x2f, 0x0e, 0x9d, 0x09, 0x42, 0xc7, 0xa1, 0xcc, 0xeb, 0x5b, 0x06, 0x1c, 0x11, 0x9f, 0xea, 0xc1, 0x96, 0x82, 0xa9, 0x30, 0x6a, 0xda, 0x98, 0x87, 0x43, 0xfd, 0x25, 0xe7, 0x27, 0x53, 0x9a, 0xb3, 0x2f, 0x19, 0xa9, 0x1a, 0xf4, 0xd6, 0xf3, 0x9e, 0xba, 0x9a, 0x91, 0x52, 0x8f, 0x20, 0x6b, 0x4c, 0x3a, 0x2a, 0x3d, 0xa0, 0xff, 0x8d, 0x61, 0x04, 0xee, 0x26, 0x55, 0xdd, 0xd7, 0x67, 0xe4, 0x84, 0x0d, 0xf1, 0x5d, 0xc7, 0xeb, 0xb3, 0x8c, 0x67, 0xa2, 0xc8, 0x1f, 0x53, 0x02, 0xc4, 0x8c, 0x89, 0xd5, 0x51, 0xc8, 0x8b, 0xb7, 0xc8, 0x11, 0xbe, 0x0e, 0xc2, 0xb1, 0x00, 0x35, 0x81, 0x96, 0xac, 0x90, 0x9c, 0xbc, 0x09, 0x82, 0x75, 0xc3, 0xe7, 0x66, 0x4e, 0x68, 0xdc, 0xa1, 0xf0, 0xd0, 0x2d, 0x49, 0x3b, 0x47, 0xba, 0x19, 0xc8, 0x9b, 0x90, 0x12, 0xc0, 0xdf, 0xda, 0x32, 0x0f, 0x79, 0x6d, 0x1a, 0x5f, 0x92, 0x51, 0x70, 0xfc, 0xca, 0x08, 0xd4, 0x7f, 0x1a, 0x56, 0x04, 0x99, 0x33, 0x89, 0x3d, 0x6f, 0x89, 0x10, 0x25, 0x81, 0xe2, 0xbd, 0x06, 0xd6, 0xaa, 0x02, 0x8e, 0x4c, 0xa3, 0x60, 0xfd, 0xaf, 0x9c, 0x81, 0x75, 0xaf, 0x2f, 0xe1, 0x72, 0xe0, 0x6e, 0x15, 0xdd, 0xbb, 0x92, 0xd1, 0xbe, 0x8e, 0x9b, 0xfb, 0x82, 0xb9, 0x47, 0x6f, 0x02, 0x28, 0x2a, 0x67, 0x50, 0xed, 0x24, 0x9b, 0x4d, 0x69, 0xd7, 0xa9, 0x66, 0x3e, 0x14, 0x4b, 0x00, 0x2a, 0xe4, 0x3d, 0x63, 0xb2, 0x10, 0xd4, 0x05, 0x9d, 0xe3, 0xde, 0xce, 0xd8, 0x04, 0x41, 0x03, 0xb5, 0xda, 0xb0, 0x6f, 0xca, 0x63, 0x64, 0x04, 0xff, 0x07, 0x58, 0x5f, 0x96, 0xf7, 0x6c, 0xb7, 0x67, 0x05, 0xd6, 0x85, 0xf2, 0x1e, 0xc1, 0xdc, 0x76, 0x12, 0x50, 0x83, 0x78, 0xa2, 0x51, 0x94, 0xe1, 0x2e, 0xb8, 0x97, 0x5b, 0x08, 0x81, 0xac, 0x59, 0x43, 0xe9, 0x01, 0x09, 0xa2, 0xed, 0x10, 0x4f, 0xb1, 0x5b, 0xb8, 0x67, 0xe8, 0x61, 0x8d, 0xc8, 0xd9, 0xc3, 0x5f, 0x65, 0xd7, 0xaa, 0x30, 0x0e, 0xc9, 0x43, 0x98, 0x1d, 0xf1, 0xa5, 0x28, 0xd5, 0xa1, 0x6b, 0x8f, 0x89, 0x76, 0x97, 0xa1, 0x3e, 0x6f, 0x39, 0xf4, 0xb9, 0x6b, 0xa7, 0xfe, 0x58, 0x24, 0xcd, 0x75, 0xa8, 0xec, 0x9e, 0x1c, 0x8e, 0x02, 0x2a, 0xce, 0xe9, 0x0a, 0x24, 0x31, 0x89, 0x5a, 0xd5, 0xdd, 0x70, 0x8e, 0x5f, 0xee, 0xc1, 0x34, 0xf8, 0xe2, 0x8a, 0xca, 0xf1, 0xf2, 0x71, 0x4c, 0x31, 0x56, 0xeb, 0x03, 0xf9, 0x6c, 0x0d, 0xa9, 0x65, 0x6e, 0x88, 0x4f, 0x8e, 0x80, 0x69, 0xd7, 0xd4, 0x63, 0x45, 0x9c, 0xab, 0x8c, 0x3d, 0x08, 0x8b, 0xd9, 0x97, 0xdc, 0x88, 0x59, 0x19, 0x2d, 0xb2, 0x84, 0xf4, 0x78, 0x3e, 0xce, 0x80, 0xba, 0xeb, 0x34, 0x5a, 0x9e, 0x8e, 0x98, 0xc4, 0x45, 0x9d, 0x59, 0xb2, 0x7e, 0xc1, 0x7e, 0x5b, 0x89, 0xd0, 0x02, 0xcb, 0xa4, 0xf1, 0xf2, 0xa7, 0x3a, 0x05, 0xc3, 0x7d, 0x43, 0x64, 0x7f, 0xf0, 0xc1, 0xf8, 0x71, 0x3b, 0x38, 0x39, 0xc7, 0x1b, 0xf4, 0x2f, 0x5a, 0x5c, 0x43, 0x1b, 0xe3, 0x93, 0xe8, 0x79, 0xe8, 0x35, 0x63, 0x34, 0x7e, 0x25, 0x41, 0x6f, 0x08, 0xce, 0x6f, 0x95, 0x2a, 0xc2, 0xdc, 0x65, 0xe2, 0xa5, 0xc0, 0xfd, 0xf1, 0x78, 0x32, 0x23, 0x09, 0x75, 0x99, 0x12, 0x7a, 0x83, 0xfd, 0xae, 0x1e, 0xb2, 0xe9, 0x12, 0x5c, 0x3d, 0x03, 0x68, 0x12, 0x1e, 0xe3, 0x8f, 0xff, 0x47, 0xe3, 0xb4, 0x7e, 0x9b, 0x7e, 0x60, 0x2e, 0xf4, 0x06, 0xba, 0x10, 0x08, 0x6b, 0xf9, 0x25, 0x59, 0xf3, 0x61, 0x13, 0x2b, 0xd1, 0x2f, 0x04, 0x5f, 0xd6, 0xd3, 0x42, 0xf6, 0x21, 0x57, 0xf6, 0xd3, 0xb3, 0xec, 0xec, 0x07, 0x33, 0xbf, 0x69, 0x04, 0xec, 0x88, 0x8d, 0x06, 0x2b, 0xfa, 0xee, 0xb2, 0x7b, 0x41, 0x2a, 0x49, 0x0f, 0x30, 0x52, 0x41, 0x29, 0x70, 0xd0, 0xf6, 0xb6, 0xbf, 0x27, 0x1a, 0x56, 0x9a, 0x4b, 0x2a, 0x67, 0xfb, 0xc8, 0x16, 0x46, 0x59, 0xc7, 0xf5, 0x5f, 0x20, 0x10, 0x25, 0x6c, 0x1e, 0x36, 0x20, 0x0c, 0x3e, 0x7e, 0x15, 0x6c, 0xa2, 0xbd, 0x22, 0xc4, 0x3d, 0xc9, 0x74, 0x56, 0xab, 0x31, 0x92, 0xb8, 0x9f, 0xa1, 0x05, 0x2e, 0xc4, 0xdb, 0x32, 0x91, 0xcb, 0x0f, 0x4a, 0x73, 0x7f, 0xe1, 0xe6, 0x65, 0x2e, 0x5e, 0xa6, 0xaf, 0xae, 0xa9, 0x04, 0x14, 0x83, 0xef, 0x19, 0x70, 0x5e, 0xcb, 0xf5, 0x87, 0xcc, 0x45, 0xf7, 0x60, 0xd7, 0x9d, 0x1e, 0x2e, /* 1012 */ /* up to here, this generates a 1022-byte single packet of compressed * data that is well-formed and produces 1012 bytes of plaintext. * * The compressed packet ends * * 03F0: 70 5E CB F5 87 CC 45 F7 60 D7 9D 1E 2E 00 */ 0x54, /* 1013 */ /* up to here, this generates a 1023-byte single packet of compressed * data that is well-formed and produces 1013 bytes of plaintext. * * The compressed packet ends * * 03F0: 70 5E CB F5 87 CC 45 F7 60 D7 9D 1E 2E 54 00 */ 0x83, /* 1014 */ /* up to here, a 1023-byte + 3-byte (1 byte payload) packet * of uncompressed length 1014 */ 0x09, 0x99, 0xf9, 0x71, 0x9f, 0x15, 0x49, 0xda, 0xa8, 0x99, /* 1024 */ /* up to here, a 1023-byte (1020 payload) + 3-byte (1 payload) packet * of uncompressed length 1019 */ 0xf5, 0xe6, 0xa1, 0x71, 0x64, 0x9a, 0x95, 0xed, }; /* generates ciphertext: 1022 1023 1023 + 3 1023 + 3 */ static int corner_lengths[] = { /* bytes plaintext, ciphertext */ 1012, /* 1019 */ 1013, /* 1020 */ 1014, /* 1021 */ 1019, /* 1021 */ 1024, /* 1021*/ }; /* one of these is created for each client connecting to us */ struct per_session_data__minimal { int which; int last; /* 0 no test, else test number in corner_lengths[] + 1 */ }; static int callback_minimal(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__minimal *pss = (struct per_session_data__minimal *)user; unsigned char buf[LWS_PRE + 2048]; int m; switch (reason) { case LWS_CALLBACK_ESTABLISHED: if (lws_hdr_copy(wsi, (char *)buf, sizeof(buf), WSI_TOKEN_GET_URI) < 0) return -1; pss->last = atoi((char *)buf + 1); if (pss->last > (int)LWS_ARRAY_SIZE(corner_lengths)) pss->last = 0; lws_callback_on_writable(wsi); break; case LWS_CALLBACK_SERVER_WRITEABLE: if (!pss->last) break; lwsl_err("%s: writable %d, %d\n", __func__, pss->last, corner_lengths[pss->last - 1]); memcpy(buf + LWS_PRE, uncompressible, (unsigned int)corner_lengths[pss->last - 1]); /* notice we allowed for LWS_PRE in the payload already */ m = lws_write(wsi, buf + LWS_PRE, (unsigned int)corner_lengths[pss->last - 1], LWS_WRITE_BINARY); if (m < corner_lengths[pss->last - 1]) { lwsl_err("ERROR %d writing to ws socket\n", m); return -1; } pss->last = 0; break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_MINIMAL \ { \ "lws-minimal", \ callback_minimal, \ sizeof(struct per_session_data__minimal), \ 2048, \ 0, NULL, 0 \ } libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd/000077500000000000000000000000001476025525100257305ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd/CMakeLists.txt000066400000000000000000000014031476025525100304660ustar00rootroot00000000000000project(lws-minimal-ws-server-pmd C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-ws-server-pmd) set(SRCS minimal-ws-server-pmd.c) set(requirements 1) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) require_lws_config(LWS_WITHOUT_EXTENSIONS 0 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd/README.md000066400000000000000000000010651476025525100272110ustar00rootroot00000000000000# lws minimal ws server + permessage-deflate ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-ws-server [2018/03/04 09:30:02:7986] USER: LWS minimal ws server | visit http://localhost:7681 [2018/03/04 09:30:02:7986] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 on ``` Visit http://localhost:7681 on multiple browser windows Text you type in any browser window is sent to all of them. For simplicity of this example, only one line of text is cached at the server. The ws connection is made via permessage-deflate extension. libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd/minimal-ws-server-pmd.c000066400000000000000000000055261476025525100322430ustar00rootroot00000000000000/* * lws-minimal-ws-server * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws. * * To keep it simple, it serves stuff in the subdirectory "./mount-origin" of * the directory it was started in. * You can change that by changing mount.origin. */ #include #include #include #define LWS_PLUGIN_STATIC #include "protocol_lws_minimal.c" static struct lws_protocols protocols[] = { { "http", lws_callback_http_dummy, 0, 0, 0, NULL, 0 }, LWS_PLUGIN_PROTOCOL_MINIMAL, LWS_PROTOCOL_LIST_TERM }; static int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; static const struct lws_extension extensions[] = { { "permessage-deflate", lws_extension_callback_pm_deflate, "permessage-deflate" "; client_no_context_takeover" "; client_max_window_bits" }, { NULL, NULL, NULL /* terminator */ } }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws server + permessage-deflate | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.protocols = protocols; info.extensions = extensions; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd/mount-origin/000077500000000000000000000000001476025525100303575ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd/mount-origin/example.js000066400000000000000000000030411476025525100323460ustar00rootroot00000000000000 function get_appropriate_ws_url(extra_url) { var pcol; var u = document.URL; /* * We open the websocket encrypted if this page came on an * https:// url itself, otherwise unencrypted */ if (u.substring(0, 5) === "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) === "http") u = u.substr(7); } u = u.split("/"); /* + "/xxx" bit is for IE10 workaround */ return pcol + u[0] + "/" + extra_url; } function new_ws(urlpath, protocol) { return new WebSocket(urlpath, protocol); } document.addEventListener("DOMContentLoaded", function() { var ws = new_ws(get_appropriate_ws_url(""), "lws-minimal"); try { ws.onopen = function() { document.getElementById("m").disabled = 0; document.getElementById("b").disabled = 0; document.getElementById("status").textContent = "ws open "+ ws.extensions; }; ws.onmessage =function got_packet(msg) { document.getElementById("r").value = document.getElementById("r").value + msg.data + "\n"; document.getElementById("r").scrollTop = document.getElementById("r").scrollHeight; }; ws.onclose = function(){ document.getElementById("m").disabled = 1; document.getElementById("b").disabled = 1; document.getElementById("status").textContent = "ws closed"; }; } catch(exception) { alert("

    Error " + exception); } function sendmsg() { ws.send(document.getElementById("m").value); document.getElementById("m").value = ""; } document.getElementById("b").addEventListener("click", sendmsg); }, false); libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd/mount-origin/favicon.ico000066400000000000000000000025761476025525100325120ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd/mount-origin/index.html000066400000000000000000000010061476025525100323510ustar00rootroot00000000000000
    LWS chat minimal ws server example.
    Chat is sent to all browsers open on this page.

    Ws closed


    libwebsockets.org-logo.svg000066400000000000000000000226061476025525100354130ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd/mount-origin image/svg+xml libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd/mount-origin/strict-csp.svg000066400000000000000000000302361476025525100331770ustar00rootroot00000000000000 libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-pmd/protocol_lws_minimal.c000066400000000000000000000075451476025525100323430ustar00rootroot00000000000000/* * ws protocol handler plugin for "lws-minimal" * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This version holds a single message at a time, which may be lost if a new * message comes. See the minimal-ws-server-ring sample for the same thing * but using an lws_ring ringbuffer to hold up to 8 messages at a time. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include /* one of these created for each message */ struct msg { void *payload; /* is malloc'd */ size_t len; }; /* one of these is created for each client connecting to us */ struct per_session_data__minimal { struct per_session_data__minimal *pss_list; struct lws *wsi; int last; /* the last message number we sent */ }; /* one of these is created for each vhost our protocol is used with */ struct per_vhost_data__minimal { struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; struct per_session_data__minimal *pss_list; /* linked-list of live pss*/ struct msg amsg; /* the one pending message... */ int current; /* the current message number we are caching */ }; /* destroys the message when everyone has had a copy of it */ static void __minimal_destroy_message(void *_msg) { struct msg *msg = _msg; free(msg->payload); msg->payload = NULL; msg->len = 0; } static int callback_minimal(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__minimal *pss = (struct per_session_data__minimal *)user; struct per_vhost_data__minimal *vhd = (struct per_vhost_data__minimal *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); int m; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__minimal)); vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); break; case LWS_CALLBACK_ESTABLISHED: /* add ourselves to the list of live pss held in the vhd */ pss->pss_list = vhd->pss_list; vhd->pss_list = pss; pss->wsi = wsi; pss->last = vhd->current; break; case LWS_CALLBACK_CLOSED: /* remove our closing pss from the list of live pss */ lws_start_foreach_llp(struct per_session_data__minimal **, ppss, vhd->pss_list) { if (*ppss == pss) { *ppss = pss->pss_list; break; } } lws_end_foreach_llp(ppss, pss_list); break; case LWS_CALLBACK_SERVER_WRITEABLE: if (!vhd->amsg.payload) break; if (pss->last == vhd->current) break; /* notice we allowed for LWS_PRE in the payload already */ m = lws_write(wsi, ((unsigned char *)vhd->amsg.payload) + LWS_PRE, vhd->amsg.len, LWS_WRITE_TEXT); if (m < (int)vhd->amsg.len) { lwsl_err("ERROR %d writing to ws socket\n", m); return -1; } pss->last = vhd->current; break; case LWS_CALLBACK_RECEIVE: if (vhd->amsg.payload) __minimal_destroy_message(&vhd->amsg); vhd->amsg.len = len; /* notice we over-allocate by LWS_PRE */ vhd->amsg.payload = malloc(LWS_PRE + len); if (!vhd->amsg.payload) { lwsl_user("OOM: dropping\n"); break; } memcpy((char *)vhd->amsg.payload + LWS_PRE, in, len); vhd->current++; /* * let everybody know we want to write something on them * as soon as they are ready */ lws_start_foreach_llp(struct per_session_data__minimal **, ppss, vhd->pss_list) { lws_callback_on_writable((*ppss)->wsi); } lws_end_foreach_llp(ppss, pss_list); break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_MINIMAL \ { \ "lws-minimal", \ callback_minimal, \ sizeof(struct per_session_data__minimal), \ 128, \ 0, NULL, 0 \ } libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-ring/000077500000000000000000000000001476025525100261075ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-ring/CMakeLists.txt000066400000000000000000000013141476025525100306460ustar00rootroot00000000000000project(lws-minimal-ws-server-ring C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-ws-server-ring) set(SRCS minimal-ws-server-ring.c) set(requirements 1) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-ring/README.md000066400000000000000000000011321476025525100273630ustar00rootroot00000000000000# lws minimal ws server (lws_ring) ## build ``` $ cmake . && make ``` ## usage ``` $ ./lws-minimal-ws-server [2018/03/04 09:30:02:7986] USER: LWS minimal ws server (lws_ring) | visit http://localhost:7681 [2018/03/04 09:30:02:7986] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 on ``` Visit http://localhost:7681 on multiple browser windows Text you type in any browser window is sent to all of them. A ringbuffer holds up to 8 lines of text. This also demonstrates how the ringbuffer can take action against lagging or disconnected clients that cause the ringbuffer to fill. libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-ring/minimal-ws-server-ring.c000066400000000000000000000051561476025525100326000ustar00rootroot00000000000000/* * lws-minimal-ws-server * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws, * with an added websocket chat server using a ringbuffer. * * To keep it simple, it serves stuff in the subdirectory "./mount-origin" of * the directory it was started in. * You can change that by changing mount.origin. */ #include #include #include #define LWS_PLUGIN_STATIC #include "protocol_lws_minimal.c" static struct lws_protocols protocols[] = { { "http", lws_callback_http_dummy, 0, 0, 0, NULL, 0 }, LWS_PLUGIN_PROTOCOL_MINIMAL, LWS_PROTOCOL_LIST_TERM }; static int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws server (lws_ring) | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.protocols = protocols; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-ring/mount-origin/000077500000000000000000000000001476025525100305365ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-ring/mount-origin/example.js000066400000000000000000000026221476025525100325310ustar00rootroot00000000000000function get_appropriate_ws_url(extra_url) { var pcol; var u = document.URL; /* * We open the websocket encrypted if this page came on an * https:// url itself, otherwise unencrypted */ if (u.substring(0, 5) === "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) === "http") u = u.substr(7); } u = u.split("/"); /* + "/xxx" bit is for IE10 workaround */ return pcol + u[0] + "/" + extra_url; } function new_ws(urlpath, protocol) { return new WebSocket(urlpath, protocol); } document.addEventListener("DOMContentLoaded", function() { var ws = new_ws(get_appropriate_ws_url(""), "lws-minimal"); try { ws.onopen = function() { document.getElementById("m").disabled = 0; document.getElementById("b").disabled = 0; }; ws.onmessage =function got_packet(msg) { document.getElementById("r").value = document.getElementById("r").value + msg.data + "\n"; document.getElementById("r").scrollTop = document.getElementById("r").scrollHeight; }; ws.onclose = function(){ document.getElementById("m").disabled = 1; document.getElementById("b").disabled = 1; }; } catch(exception) { alert("

    Error " + exception); } function sendmsg() { ws.send(document.getElementById("m").value); document.getElementById("m").value = ""; } document.getElementById("b").addEventListener("click", sendmsg); }, false); libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-ring/mount-origin/favicon.ico000066400000000000000000000025761476025525100326710ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-ring/mount-origin/index.html000066400000000000000000000007321476025525100325350ustar00rootroot00000000000000
    LWS chat minimal ws server example.
    Chat is sent to all browsers open on this page.


    libwebsockets.org-logo.svg000066400000000000000000000226061476025525100355720ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-ring/mount-origin image/svg+xml libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-ring/mount-origin/strict-csp.svg000066400000000000000000000302361476025525100333560ustar00rootroot00000000000000 libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-ring/protocol_lws_minimal.c000066400000000000000000000165211476025525100325140ustar00rootroot00000000000000/* * ws protocol handler plugin for "lws-minimal" * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This version uses an lws_ring ringbuffer to cache up to 8 messages at a time, * so it's not so easy to lose messages. * * This also demonstrates how to "cull", ie, kill, connections that can't * keep up for some reason. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include /* one of these created for each message */ struct msg { void *payload; /* is malloc'd */ size_t len; }; /* one of these is created for each client connecting to us */ struct per_session_data__minimal { struct per_session_data__minimal *pss_list; struct lws *wsi; uint32_t tail; unsigned int culled:1; }; /* one of these is created for each vhost our protocol is used with */ struct per_vhost_data__minimal { struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; struct per_session_data__minimal *pss_list; /* linked-list of live pss*/ struct lws_ring *ring; /* ringbuffer holding unsent messages */ }; static void cull_lagging_clients(struct per_vhost_data__minimal *vhd) { uint32_t oldest_tail = lws_ring_get_oldest_tail(vhd->ring); struct per_session_data__minimal *old_pss = NULL; int most = 0, before = (int)lws_ring_get_count_waiting_elements(vhd->ring, &oldest_tail), m; /* * At least one guy with the oldest tail has lagged too far, filling * the ringbuffer with stuff waiting for them, while new stuff is * coming in, and they must close, freeing up ringbuffer entries. */ lws_start_foreach_llp_safe(struct per_session_data__minimal **, ppss, vhd->pss_list, pss_list) { if ((*ppss)->tail == oldest_tail) { old_pss = *ppss; lwsl_user("Killing lagging client %p\n", (*ppss)->wsi); lws_set_timeout((*ppss)->wsi, PENDING_TIMEOUT_LAGGING, /* * we may kill the wsi we came in on, * so the actual close is deferred */ LWS_TO_KILL_ASYNC); /* * We might try to write something before we get a * chance to close. But this pss is now detached * from the ring buffer. Mark this pss as culled so we * don't try to do anything more with it. */ (*ppss)->culled = 1; /* * Because we can't kill it synchronously, but we * know it's closing momentarily and don't want its * participation any more, remove its pss from the * vhd pss list early. (This is safe to repeat * uselessly later in the close flow). * * Notice this changes *ppss! */ lws_ll_fwd_remove(struct per_session_data__minimal, pss_list, (*ppss), vhd->pss_list); /* use the changed *ppss so we won't skip anything */ continue; } else { /* * so this guy is a survivor of the cull. Let's track * what is the largest number of pending ring elements * for any survivor. */ m = (int)lws_ring_get_count_waiting_elements(vhd->ring, &((*ppss)->tail)); if (m > most) most = m; } } lws_end_foreach_llp_safe(ppss); /* it would mean we lost track of oldest... but Coverity insists */ if (!old_pss) return; /* * Let's recover (ie, free up) all the ring slots between the * original oldest's last one and the "worst" survivor. */ lws_ring_consume_and_update_oldest_tail(vhd->ring, struct per_session_data__minimal, &old_pss->tail, (size_t)(before - most), vhd->pss_list, tail, pss_list); lwsl_user("%s: shrunk ring from %d to %d\n", __func__, before, most); } /* destroys the message when everyone has had a copy of it */ static void __minimal_destroy_message(void *_msg) { struct msg *msg = _msg; free(msg->payload); msg->payload = NULL; msg->len = 0; } static int callback_minimal(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__minimal *pss = (struct per_session_data__minimal *)user; struct per_vhost_data__minimal *vhd = (struct per_vhost_data__minimal *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); const struct msg *pmsg; struct msg amsg; int n, m; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__minimal)); vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); vhd->ring = lws_ring_create(sizeof(struct msg), 8, __minimal_destroy_message); if (!vhd->ring) return 1; break; case LWS_CALLBACK_PROTOCOL_DESTROY: lws_ring_destroy(vhd->ring); break; case LWS_CALLBACK_ESTABLISHED: /* add ourselves to the list of live pss held in the vhd */ lwsl_user("LWS_CALLBACK_ESTABLISHED: wsi %p\n", wsi); lws_ll_fwd_insert(pss, pss_list, vhd->pss_list); pss->tail = lws_ring_get_oldest_tail(vhd->ring); pss->wsi = wsi; break; case LWS_CALLBACK_CLOSED: lwsl_user("LWS_CALLBACK_CLOSED: wsi %p\n", wsi); /* remove our closing pss from the list of live pss */ lws_ll_fwd_remove(struct per_session_data__minimal, pss_list, pss, vhd->pss_list); break; case LWS_CALLBACK_SERVER_WRITEABLE: if (pss->culled) break; pmsg = lws_ring_get_element(vhd->ring, &pss->tail); if (!pmsg) break; /* notice we allowed for LWS_PRE in the payload already */ m = lws_write(wsi, ((unsigned char *)pmsg->payload) + LWS_PRE, pmsg->len, LWS_WRITE_TEXT); if (m < (int)pmsg->len) { lwsl_err("ERROR %d writing to ws socket\n", m); return -1; } lws_ring_consume_and_update_oldest_tail( vhd->ring, /* lws_ring object */ struct per_session_data__minimal, /* type of objects with tails */ &pss->tail, /* tail of guy doing the consuming */ 1, /* number of payload objects being consumed */ vhd->pss_list, /* head of list of objects with tails */ tail, /* member name of tail in objects with tails */ pss_list /* member name of next object in objects with tails */ ); /* more to do for us? */ if (lws_ring_get_element(vhd->ring, &pss->tail)) /* come back as soon as we can write more */ lws_callback_on_writable(pss->wsi); break; case LWS_CALLBACK_RECEIVE: n = (int)lws_ring_get_count_free_elements(vhd->ring); if (!n) { /* forcibly make space */ cull_lagging_clients(vhd); n = (int)lws_ring_get_count_free_elements(vhd->ring); } if (!n) break; lwsl_user("LWS_CALLBACK_RECEIVE: free space %d\n", n); amsg.len = len; /* notice we over-allocate by LWS_PRE... */ amsg.payload = malloc(LWS_PRE + len); if (!amsg.payload) { lwsl_user("OOM: dropping\n"); break; } /* ...and we copy the payload in at +LWS_PRE */ memcpy((char *)amsg.payload + LWS_PRE, in, len); if (!lws_ring_insert(vhd->ring, &amsg, 1)) { __minimal_destroy_message(&amsg); lwsl_user("dropping!\n"); break; } /* * let everybody know we want to write something on them * as soon as they are ready */ lws_start_foreach_llp(struct per_session_data__minimal **, ppss, vhd->pss_list) { lws_callback_on_writable((*ppss)->wsi); } lws_end_foreach_llp(ppss, pss_list); break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_MINIMAL \ { \ "lws-minimal", \ callback_minimal, \ sizeof(struct per_session_data__minimal), \ 0, \ 0, NULL, 0 \ } libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threadpool/000077500000000000000000000000001476025525100273115ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threadpool/CMakeLists.txt000066400000000000000000000015541476025525100320560ustar00rootroot00000000000000project(lws-minimal-ws-server-threadpool C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckIncludeFile) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-ws-server-threadpool) set(SRCS minimal-ws-server-threadpool.c) set(requirements 1) require_pthreads(requirements) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) require_lws_config(LWS_WITH_THREADPOOL 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${PTHREAD_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${PTHREAD_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threadpool/README.md000066400000000000000000000011731476025525100305720ustar00rootroot00000000000000# lws minimal ws server (threadpool) ## build ``` $ cmake . && make ``` Pthreads is required on your system. This demonstrates how to cleanly assign tasks bound to a wsi to a thread pool, with a queue if the pool is occupied. It creates a threadpool with 3 worker threads and a maxiumum queue size of 4. The web page at http://localhost:7681 then starts up 8 x ws connections. ## usage ``` $ ./lws-minimal-ws-server-threadpool [2018/03/13 13:09:52:2208] USER: LWS minimal ws server + threadpool | visit http://localhost:7681 [2018/03/13 13:09:52:2365] NOTICE: Creating Vhost 'default' port 7681, 2 protocols, IPv6 off ``` minimal-ws-server-threadpool.c000066400000000000000000000073301476025525100351210ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threadpool/* * lws-minimal-ws-server=threadpool * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal ws server that can cooperate with * other threads cleanly. Two other threads are started, which fill * a ringbuffer with strings at 10Hz. * * The actual work and thread spawning etc are done in the protocol * implementation in protocol_lws_minimal.c. * * To keep it simple, it serves stuff in the subdirectory "./mount-origin" of * the directory it was started in. * You can change that by changing mount.origin. */ #include #include #include #if defined(WIN32) #define HAVE_STRUCT_TIMESPEC #if defined(pid_t) #undef pid_t #endif #endif #include #define LWS_PLUGIN_STATIC #include "protocol_lws_minimal_threadpool.c" static struct lws_protocols protocols[] = { { "http", lws_callback_http_dummy, 0, 0, 0, NULL, 0 }, LWS_PLUGIN_PROTOCOL_MINIMAL, LWS_PROTOCOL_LIST_TERM }; static int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; /* * This demonstrates how to pass a pointer into a specific protocol handler * running on a specific vhost. In this case, it's our default vhost and * we pass the pvo named "config" with the value a const char * "myconfig". * * This is the preferred way to pass configuration into a specific vhost + * protocol instance. */ static const struct lws_protocol_vhost_options pvo_ops = { NULL, NULL, "config", /* pvo name */ (void *)"myconfig" /* pvo value */ }; static const struct lws_protocol_vhost_options pvo = { NULL, /* "next" pvo linked-list */ &pvo_ops, /* "child" pvo linked-list */ "lws-minimal", /* protocol name we belong to on this vhost */ "" /* ignored */ }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws server + threadpool | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.protocols = protocols; info.pvo = &pvo; /* per-vhost options */ info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } /* start the threads that create content */ while (!interrupted) if (lws_service(context, 0)) interrupted = 1; lws_context_destroy(context); lwsl_user("%s: exiting cleanly...\n", __func__); return 0; } libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threadpool/mount-origin/000077500000000000000000000000001476025525100317405ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threadpool/mount-origin/example.js000066400000000000000000000027621476025525100337400ustar00rootroot00000000000000var head = 0, tail = 0, ring = new Array(); function get_appropriate_ws_url(extra_url) { var pcol; var u = document.URL; /* * We open the websocket encrypted if this page came on an * https:// url itself, otherwise unencrypted */ if (u.substring(0, 5) === "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) === "http") u = u.substr(7); } u = u.split("/"); /* + "/xxx" bit is for IE10 workaround */ return pcol + u[0] + "/" + extra_url; } function new_ws(urlpath, protocol) { return new WebSocket(urlpath, protocol); } document.addEventListener("DOMContentLoaded", function() { var n, wsa = new Array, alive = 0; for (n = 0; n < 8; n++) { var ws = new_ws(get_appropriate_ws_url(""), "lws-minimal"); wsa.push(ws); try { ws.onopen = function() { document.getElementById("r").disabled = 0; alive++; }; ws.onmessage = function got_packet(msg) { var n, s = ""; ring[head] = msg.data + "\n"; head = (head + 1) % 50; if (tail === head) tail = (tail + 1) % 50; n = tail; do { s = s + ring[n]; n = (n + 1) % 50; } while (n !== head); document.getElementById("r").value = s; document.getElementById("r").scrollTop = document.getElementById("r").scrollHeight; }; ws.onclose = function(){ alive--; if (alive === 0) document.getElementById("r").disabled = 1; }; } catch(exception) { alert("

    Error " + exception); } } }, false); libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threadpool/mount-origin/favicon.ico000066400000000000000000000025761476025525100340730ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threadpool/mount-origin/index.html000066400000000000000000000011171476025525100337350ustar00rootroot00000000000000
    Minimal ws server threadpool example.
    8 x ws connections are opened back to the example server.
    There are three threads in the pool to service them, the
    remainder are queued until a thread in the pool is free.

    The textarea show the last 50 lines received.


    libwebsockets.org-logo.svg000066400000000000000000000226061476025525100367740ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threadpool/mount-origin image/svg+xml strict-csp.svg000066400000000000000000000302361476025525100345010ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threadpool/mount-origin protocol_lws_minimal_threadpool.c000066400000000000000000000210031476025525100360470ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threadpool/* * ws protocol handler plugin for "lws-minimal" demonstrating lws threadpool * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The main reason some things are as they are is that the task lifecycle may * be unrelated to the wsi lifecycle that queued that task. * * Consider the task may call an external library and run for 30s without * "checking in" to see if it should stop. The wsi that started the task may * have closed at any time before the 30s are up, with the browser window * closing or whatever. * * So data shared between the asynchronous task and the wsi must have its * lifecycle determined by the task, not the wsi. That means a separate struct * that can be freed by the task. * * In the case the wsi outlives the task, the tasks do not get destroyed until * the service thread has called lws_threadpool_task_status() on the completed * task. So there is no danger of the shared task private data getting randomly * freed. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include struct per_vhost_data__minimal { struct lws_threadpool *tp; struct lws_context *context; lws_sorted_usec_list_t sul; const char *config; }; struct task_data { char result[64]; uint64_t pos, end; }; #if defined(WIN32) static void usleep(unsigned long l) { Sleep(l / 1000); } #endif /* * Create the private data for the task * * Notice we hand over responsibility for the cleanup and freeing of the * allocated task_data to the threadpool, because the wsi it was originally * bound to may close while the thread is still running. So we allocate * something discrete for the task private data that can be definitively owned * and freed by the threadpool, not the wsi... the pss won't do, as it only * exists for the lifecycle of the wsi connection. * * When the task is created, we also tell it how to destroy the private data * by giving it args.cleanup as cleanup_task_private_data() defined below. */ static struct task_data * create_task_private_data(void) { struct task_data *priv = malloc(sizeof(*priv)); return priv; } /* * Destroy the private data for the task * * Notice the wsi the task was originally bound to may be long gone, in the * case we are destroying the lws context and the thread was doing something * for a long time without checking in. */ static void cleanup_task_private_data(struct lws *wsi, void *user) { struct task_data *priv = (struct task_data *)user; free(priv); } /* * This runs in its own thread, from the threadpool. * * The implementation behind this in lws uses pthreads, but no pthreadisms are * required in the user code. * * The example counts to 10M, "checking in" to see if it should stop after every * 100K and pausing to sync with the service thread to send a ws message every * 1M. It resumes after the service thread determines the wsi is writable and * the LWS_CALLBACK_SERVER_WRITEABLE indicates the task thread can continue by * calling lws_threadpool_task_sync(). */ static enum lws_threadpool_task_return task_function(void *user, enum lws_threadpool_task_status s) { struct task_data *priv = (struct task_data *)user; int budget = 100 * 1000; if (priv->pos == priv->end) return LWS_TP_RETURN_FINISHED; /* * Preferably replace this with ~100ms of your real task, so it * can "check in" at short intervals to see if it has been asked to * stop. * * You can just run tasks atomically here with the thread dedicated * to it, but it will cause odd delays while shutting down etc and * the task will run to completion even if the wsi that started it * has since closed. */ while (budget--) priv->pos++; usleep(100000); if (!(priv->pos % (1000 * 1000))) { lws_snprintf(priv->result + LWS_PRE, sizeof(priv->result) - LWS_PRE, "pos %llu", (unsigned long long)priv->pos); return LWS_TP_RETURN_SYNC; } return LWS_TP_RETURN_CHECKING_IN; } static void sul_tp_dump(struct lws_sorted_usec_list *sul) { struct per_vhost_data__minimal *vhd = lws_container_of(sul, struct per_vhost_data__minimal, sul); /* * in debug mode, dump the threadpool stat to the logs once * a second */ lws_threadpool_dump(vhd->tp); lws_sul_schedule(vhd->context, 0, &vhd->sul, sul_tp_dump, LWS_US_PER_SEC); } static int callback_minimal(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_vhost_data__minimal *vhd = (struct per_vhost_data__minimal *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); const struct lws_protocol_vhost_options *pvo; struct lws_threadpool_create_args cargs; struct lws_threadpool_task_args args; struct lws_threadpool_task *task; struct task_data *priv; int n, m, r = 0; char name[32]; void *_user; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: /* create our per-vhost struct */ vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__minimal)); if (!vhd) return 1; vhd->context = lws_get_context(wsi); /* recover the pointer to the globals struct */ pvo = lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "config"); if (!pvo || !pvo->value) { lwsl_err("%s: Can't find \"config\" pvo\n", __func__); return 1; } vhd->config = pvo->value; memset(&cargs, 0, sizeof(cargs)); cargs.max_queue_depth = 8; cargs.threads = 3; vhd->tp = lws_threadpool_create(lws_get_context(wsi), &cargs, "%s", lws_get_vhost_name(lws_get_vhost(wsi))); if (!vhd->tp) return 1; lws_sul_schedule(vhd->context, 0, &vhd->sul, sul_tp_dump, LWS_US_PER_SEC); break; case LWS_CALLBACK_PROTOCOL_DESTROY: lws_threadpool_finish(vhd->tp); lws_threadpool_destroy(vhd->tp); lws_sul_cancel(&vhd->sul); break; case LWS_CALLBACK_ESTABLISHED: memset(&args, 0, sizeof(args)); priv = args.user = create_task_private_data(); if (!args.user) return 1; priv->pos = 0; priv->end = 10 * 1000 * 1000; /* queue the task... the task takes on responsibility for * destroying args.user. pss->priv just has a copy of it */ args.wsi = wsi; args.task = task_function; args.cleanup = cleanup_task_private_data; lws_get_peer_simple(wsi, name, sizeof(name)); if (!lws_threadpool_enqueue(vhd->tp, &args, "ws %s", name)) { lwsl_user("%s: Couldn't enqueue task\n", __func__); cleanup_task_private_data(wsi, priv); return 1; } lws_set_timeout(wsi, PENDING_TIMEOUT_THREADPOOL, 30); /* * so the asynchronous worker will let us know the next step * by causing LWS_CALLBACK_SERVER_WRITEABLE */ break; case LWS_CALLBACK_CLOSED: break; case LWS_CALLBACK_WS_SERVER_DROP_PROTOCOL: lwsl_debug("LWS_CALLBACK_WS_SERVER_DROP_PROTOCOL: %p\n", wsi); lws_threadpool_dequeue_task(lws_threadpool_get_task_wsi(wsi)); break; case LWS_CALLBACK_SERVER_WRITEABLE: /* * even completed tasks wait in a queue until we call the * below on them. Then they may destroy themselves and their * args.user data (by calling the cleanup callback). * * If you need to get things from the still-valid private task * data, copy it here before calling * lws_threadpool_task_status() that may free the task and the * private task data. */ task = lws_threadpool_get_task_wsi(wsi); if (!task) break; n = (int)lws_threadpool_task_status(task, &_user); lwsl_debug("%s: LWS_CALLBACK_SERVER_WRITEABLE: status %d\n", __func__, n); switch(n) { case LWS_TP_STATUS_FINISHED: case LWS_TP_STATUS_STOPPED: case LWS_TP_STATUS_QUEUED: case LWS_TP_STATUS_RUNNING: case LWS_TP_STATUS_STOPPING: return 0; case LWS_TP_STATUS_SYNCING: /* the task has paused for us to do something */ break; default: return -1; } priv = (struct task_data *)_user; lws_set_timeout(wsi, PENDING_TIMEOUT_THREADPOOL_TASK, 5); n = (int)strlen(priv->result + LWS_PRE); m = lws_write(wsi, (unsigned char *)priv->result + LWS_PRE, (unsigned int)n, LWS_WRITE_TEXT); if (m < n) { lwsl_err("ERROR %d writing to ws socket\n", m); lws_threadpool_task_sync(task, 1); return -1; } /* * service thread has done whatever it wanted to do with the * data the task produced: if it's waiting to do more it can * continue now. */ lws_threadpool_task_sync(task, 0); break; default: break; } return r; } #define LWS_PLUGIN_PROTOCOL_MINIMAL \ { \ "lws-minimal", \ callback_minimal, \ 0, \ 128, \ 0, NULL, 0 \ } libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads-foreign-libuv-smp/000077500000000000000000000000001476025525100321455ustar00rootroot00000000000000CMakeLists.txt000066400000000000000000000027421476025525100346330ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads-foreign-libuv-smpproject(lws-minimal-ws-server-threads-foreign-libuv-smp C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckIncludeFile) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-ws-server-threads-foreign-smp) set(SRCS minimal-ws-server.c) set(requirements 1) require_pthreads(requirements) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) require_lws_config(LWS_WITH_TLS 1 requirements) require_lws_config(LWS_WITH_LIBUV 1 requirements) CHECK_C_SOURCE_COMPILES("#include \nint main(void) {\n#if defined(LWS_WITH_LIBUV)\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" LWS_WITH_LIBUV) if (NOT LWS_WITH_LIBUV) set(requirements 0) endif() if (requirements) add_executable(${SAMP} ${SRCS}) find_path(LIBUV_INCLUDE_DIRS NAMES uv.h) find_library(LIBUV_LIBRARIES NAMES uv) message("libuv include dir: ${LIBUV_INCLUDE_DIRS}") message("libuv libraries: ${LIBUV_LIBRARIES}") include_directories("${LIBUV_INCLUDE_DIRS}") set(extralibs ${extralibs} ${LIBUV_LIBRARIES}) message("Extra libs: ${extralibs}") if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${extralibs} ${PTHREAD_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${extralibs} ${PTHREAD_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads-foreign-libuv-smp/README.md000066400000000000000000000025051476025525100334260ustar00rootroot00000000000000# lws minimal ws server (threads) + SMP This demonstrates both independent threads creating content as in the -threads example, multiple service threads as in the http-server-smp example (but with ws), and using the foreign libuv loop. ## build You must first build libwebsockets itself with cmake `-DLWS_MAX_SMP=8` or some other number greater than one, as well as `-DLWS_WITH_LIBUV=1` ``` $ cmake . && make ``` Pthreads is required on your system. ## usage ``` $ ./lws-minimal-ws-server-threads-smp [2019/01/28 06:59:17:4217] USER: LWS minimal ws server + threads + smp | visit http://localhost:7681 [2019/01/28 06:59:17:4219] NOTICE: Service threads: 2 [2019/01/28 06:59:17:4220] NOTICE: LWS_CALLBACK_EVENT_WAIT_CANCELLED in svc tid 0x7fec48af8700 [2019/01/28 06:59:17:4220] NOTICE: LWS_CALLBACK_EVENT_WAIT_CANCELLED in svc tid 0x7fec48af8700 ... ``` Visit http://localhost:7681 on multiple browser windows. You may need to open 4 before the second service thread is used (check "svc tid" in the browser output). Two lws service threads are started. Two separate asynchronous threads generate strings and add them to a ringbuffer, signalling all lws service threads to send new entries to all the browser windows. This demonstrates how to safely manage asynchronously generated content and hook it up to the lws service threads. minimal-ws-server.c000066400000000000000000000126321476025525100356170ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads-foreign-libuv-smp/* * lws-minimal-ws-server-threads-foreign-smp * * Written in 2010-2020 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal ws server that can cooperate with * other threads cleanly. Two other threads are started, which fill * a ringbuffer with strings at 10Hz. * * The actual work and thread spawning etc are done in the protocol * implementation in protocol_lws_minimal.c. * * To keep it simple, it serves stuff in the subdirectory "./mount-origin" of * the directory it was started in. * You can change that by changing mount.origin. */ #include #include #include #if defined(WIN32) #define HAVE_STRUCT_TIMESPEC #if defined(pid_t) #undef pid_t #endif #endif #include #include #define COUNT_THREADS 5 #define LWS_PLUGIN_STATIC #include "protocol_lws_minimal.c" static struct lws_protocols protocols[] = { { "http", lws_callback_http_dummy, 0, 0, 0, NULL, 0 }, LWS_PLUGIN_PROTOCOL_MINIMAL, LWS_PROTOCOL_LIST_TERM }; static struct lws_context *context; static int interrupted; static uv_loop_t loop[COUNT_THREADS]; static uv_signal_t *s, signal_outer[COUNT_THREADS]; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; /* * This demonstrates how to pass a pointer into a specific protocol handler * running on a specific vhost. In this case, it's our default vhost and * we pass the pvo named "config" with the value a const char * "myconfig". * * This is the preferred way to pass configuration into a specific vhost + * protocol instance. */ static const struct lws_protocol_vhost_options pvo_ops = { NULL, NULL, "config", /* pvo name */ (void *)"myconfig" /* pvo value */ }; static const struct lws_protocol_vhost_options pvo = { NULL, /* "next" pvo linked-list */ &pvo_ops, /* "child" pvo linked-list */ "lws-minimal", /* protocol name we belong to on this vhost */ "" /* ignored */ }; void *thread_service(void *threadid) { /* * This is a foreign thread context for each event loop... lws doesn't * know about it, except that it's getting called into from the event * lib bound to each of these. * * When closing, at the point we have detached everything related to * lws from the loop and destroyed the context we can as the "foreign * app" take care of stopping the foreign loop and cloing this thread. * * The call to lws_service_tsi just starts the related event loop */ while (lws_service_tsi(context, 0, (int)(lws_intptr_t)threadid) >= 0 && !interrupted) lwsl_notice("%s\n", __func__); lwsl_info("%s: thr %d: exiting\n", __func__, (int)(lws_intptr_t)threadid); pthread_exit(NULL); return NULL; } static void signal_cb(uv_signal_t *watcher, int signum) { int n; n = (int)(watcher - signal_outer); lwsl_notice("%s: thr %d: signal %d caught\n", __func__, n, watcher->signum); uv_signal_stop(watcher); uv_close((uv_handle_t *)&signal_outer[n], NULL); if (!interrupted) { interrupted = 1; lws_context_destroy(context); } } int main(int argc, const char **argv) { int n, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; pthread_t pthread_service[COUNT_THREADS]; struct lws_context_creation_info info; void *foreign_loops[COUNT_THREADS]; int actual_threads; const char *p; void *retval; if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws server + threads + smp | visit http://localhost:7681\n"); for (n = 0; n < COUNT_THREADS; n++) { uv_loop_init(&loop[n]); s = &signal_outer[n]; uv_signal_init(&loop[n], s); uv_signal_start(s, signal_cb, SIGINT); foreign_loops[n] = &loop[n]; } memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.pcontext = &context; info.protocols = protocols; info.pvo = &pvo; /* per-vhost options */ info.foreign_loops = foreign_loops; info.count_threads = COUNT_THREADS; info.options = LWS_SERVER_OPTION_LIBUV | LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } actual_threads = lws_get_count_threads(context); lwsl_notice(" Service threads: %d\n", actual_threads); /* start all the service threads */ for (n = 0; n < actual_threads; n++) if (pthread_create(&pthread_service[n], NULL, thread_service, (void *)(lws_intptr_t)n)) lwsl_err("Failed to start service thread\n"); /* wait for all the service threads to exit */ while ((--n) >= 0) pthread_join(pthread_service[n], &retval); lws_context_destroy(context); for (n = 0; n < COUNT_THREADS; n++) { int m; m = uv_loop_close(&loop[n]); if (m) lwsl_notice("%s: uv_close_loop %d: %d\n", __func__, n, m); } return 0; } mount-origin/000077500000000000000000000000001476025525100345155ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads-foreign-libuv-smpexample.js000066400000000000000000000025211476025525100365060ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads-foreign-libuv-smp/mount-originvar head = 0, tail = 0, ring = new Array(); function get_appropriate_ws_url(extra_url) { var pcol; var u = document.URL; /* * We open the websocket encrypted if this page came on an * https:// url itself, otherwise unencrypted */ if (u.substring(0, 5) === "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) === "http") u = u.substr(7); } u = u.split("/"); /* + "/xxx" bit is for IE10 workaround */ return pcol + u[0] + "/" + extra_url; } function new_ws(urlpath, protocol) { return new WebSocket(urlpath, protocol); } document.addEventListener("DOMContentLoaded", function() { var ws = new_ws(get_appropriate_ws_url(""), "lws-minimal"); try { ws.onopen = function() { document.getElementById("r").disabled = 0; }; ws.onmessage =function got_packet(msg) { var n, s = ""; ring[head] = msg.data + "\n"; head = (head + 1) % 50; if (tail === head) tail = (tail + 1) % 50; n = tail; do { s = s + ring[n]; n = (n + 1) % 50; } while (n !== head); document.getElementById("r").value = s; document.getElementById("r").scrollTop = document.getElementById("r").scrollHeight; }; ws.onclose = function(){ document.getElementById("r").disabled = 1; }; } catch(exception) { alert("

    Error " + exception); } }, false); favicon.ico000066400000000000000000000025761476025525100366500ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads-foreign-libuv-smp/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’index.html000066400000000000000000000007521476025525100365160ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads-foreign-libuv-smp/mount-origin
    Minimal ws server threads SMP example.
    Strings generated by server threads are sent to all browsers open on this page.
    The textarea show the last 50 lines received.


    libwebsockets.org-logo.svg000066400000000000000000000226061476025525100416300ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads-foreign-libuv-smp/mount-origin image/svg+xml strict-csp.svg000066400000000000000000000302361476025525100373350ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads-foreign-libuv-smp/mount-origin protocol_lws_minimal.c000066400000000000000000000201321476025525100364640ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads-foreign-libuv-smp/* * ws protocol handler plugin for "lws-minimal" demonstrating multithread * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include #include /* one of these created for each message in the ringbuffer */ struct msg { void *payload; /* is malloc'd */ size_t len; }; /* * One of these is created for each client connecting to us. * * It is ONLY read or written from the lws service thread context. */ struct per_session_data__minimal { struct per_session_data__minimal *pss_list; struct lws *wsi; uint32_t tail; }; /* * One of these is created for each vhost our protocol is used with, that * means it is a shared resource between the SMP threads and must be locked. */ struct per_vhost_data__minimal { struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; struct per_session_data__minimal *pss_list; /* linked-list of live pss*/ pthread_t pthread_spam[2]; pthread_mutex_t lock_ring; /* serialize access to the ring buffer */ struct lws_ring *ring; /* {lock_ring} ringbuffer holding unsent content */ const char *config; char finished; }; #if defined(WIN32) static void usleep(unsigned long l) { Sleep(l / 1000); } #endif /* * This runs under both lws service and "spam threads" contexts. * Access is serialized by vhd->lock_ring. */ static void __minimal_destroy_message(void *_msg) { struct msg *msg = _msg; free(msg->payload); msg->payload = NULL; msg->len = 0; } /* * This runs under the "spam thread" thread context only. * * We spawn two threads that generate messages with this. * */ static void * thread_spam(void *d) { struct per_vhost_data__minimal *vhd = (struct per_vhost_data__minimal *)d; struct msg amsg; int len = 128, index = 1, n, whoami = 0; for (n = 0; n < (int)LWS_ARRAY_SIZE(vhd->pthread_spam); n++) if (pthread_equal(pthread_self(), vhd->pthread_spam[n])) whoami = n + 1; do { pthread_mutex_lock(&vhd->lock_ring); /* --------- ring lock { */ /* don't generate output if nobody connected */ if (!vhd->pss_list) goto wait_unlock; /* only create if space in ringbuffer */ n = (int)lws_ring_get_count_free_elements(vhd->ring); if (!n) { // lwsl_user("dropping!\n"); goto wait_unlock; } amsg.payload = malloc((unsigned int)(LWS_PRE + len)); if (!amsg.payload) { lwsl_user("OOM: dropping\n"); goto wait_unlock; } n = lws_snprintf((char *)amsg.payload + LWS_PRE, (unsigned int)len, "%s: spam tid: %d, msg: %d", vhd->config, whoami, index++); amsg.len = (unsigned int)n; n = (int)lws_ring_insert(vhd->ring, &amsg, 1); if (n != 1) { __minimal_destroy_message(&amsg); // lwsl_user("dropping!\n"); } else /* * This will cause a LWS_CALLBACK_EVENT_WAIT_CANCELLED * in the lws service thread context. */ lws_cancel_service(vhd->context); wait_unlock: pthread_mutex_unlock(&vhd->lock_ring); /* } ring lock ------- */ usleep(100000); } while (!vhd->finished); lwsl_notice("thread_spam %d exiting\n", whoami); pthread_exit(NULL); return NULL; } /* this runs under the lws service thread context only */ static int callback_minimal(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__minimal *pss = (struct per_session_data__minimal *)user; struct per_vhost_data__minimal *vhd = (struct per_vhost_data__minimal *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); const struct lws_protocol_vhost_options *pvo; const struct msg *pmsg; char temp[LWS_PRE + 256]; void *retval; int n, m, r = 0; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: /* create our per-vhost struct */ vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__minimal)); if (!vhd) return 1; pthread_mutex_init(&vhd->lock_ring, NULL); /* recover the pointer to the globals struct */ pvo = lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "config"); if (!pvo || !pvo->value) { lwsl_err("%s: Can't find \"config\" pvo\n", __func__); return 1; } vhd->config = pvo->value; vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); vhd->ring = lws_ring_create(sizeof(struct msg), 8, __minimal_destroy_message); if (!vhd->ring) { lwsl_err("%s: failed to create ring\n", __func__); return 1; } /* start the content-creating threads */ for (n = 0; n < (int)LWS_ARRAY_SIZE(vhd->pthread_spam); n++) if (pthread_create(&vhd->pthread_spam[n], NULL, thread_spam, vhd)) { lwsl_err("thread creation failed\n"); r = 1; goto init_fail; } break; case LWS_CALLBACK_PROTOCOL_DESTROY: init_fail: vhd->finished = 1; for (n = 0; n < (int)LWS_ARRAY_SIZE(vhd->pthread_spam); n++) pthread_join(vhd->pthread_spam[n], &retval); if (vhd->ring) lws_ring_destroy(vhd->ring); pthread_mutex_destroy(&vhd->lock_ring); break; case LWS_CALLBACK_ESTABLISHED: /* add ourselves to the list of live pss held in the vhd */ pthread_mutex_lock(&vhd->lock_ring); lws_ll_fwd_insert(pss, pss_list, vhd->pss_list); pss->tail = lws_ring_get_oldest_tail(vhd->ring); pss->wsi = wsi; pthread_mutex_unlock(&vhd->lock_ring); break; case LWS_CALLBACK_CLOSED: /* doesn't reference ring */ pthread_mutex_lock(&vhd->lock_ring); /* remove our closing pss from the list of live pss */ lws_ll_fwd_remove(struct per_session_data__minimal, pss_list, pss, vhd->pss_list); pthread_mutex_unlock(&vhd->lock_ring); break; case LWS_CALLBACK_SERVER_WRITEABLE: pthread_mutex_lock(&vhd->lock_ring); /* --------- ring lock { */ pmsg = lws_ring_get_element(vhd->ring, &pss->tail); if (!pmsg) { pthread_mutex_unlock(&vhd->lock_ring); /* } ring lock ------- */ break; } assert(pmsg->payload); n = lws_snprintf(temp + LWS_PRE, sizeof(temp) - LWS_PRE, "svc, %s", (char *)pmsg->payload + LWS_PRE); /* notice we allowed for LWS_PRE in the payload already */ m = lws_write(wsi, (unsigned char *)temp + LWS_PRE, (unsigned int)n, LWS_WRITE_TEXT); if (m < n) { pthread_mutex_unlock(&vhd->lock_ring); /* } ring lock ------- */ lwsl_err("ERROR %d writing to ws socket\n", m); return -1; } lws_ring_consume_and_update_oldest_tail( vhd->ring, /* lws_ring object */ struct per_session_data__minimal, /* type of objects with tails */ &pss->tail, /* tail of guy doing the consuming */ 1, /* number of payload objects being consumed */ vhd->pss_list, /* head of list of objects with tails */ tail, /* member name of tail in objects with tails */ pss_list /* member name of next object in objects with tails */ ); /* more to do? */ if (lws_ring_get_element(vhd->ring, &pss->tail)) /* come back as soon as we can write more */ lws_callback_on_writable(pss->wsi); pthread_mutex_unlock(&vhd->lock_ring); /* } ring lock ------- */ break; case LWS_CALLBACK_RECEIVE: break; case LWS_CALLBACK_EVENT_WAIT_CANCELLED: // lwsl_notice("EVENT_WAIT_CANCELLED tsi %d\n", lws_wsi_tsi(wsi)); if (!vhd) break; /* * When the "spam" threads add a message to the ringbuffer, * they create this event in the lws service thread context * using lws_cancel_service(). * * We respond by scheduling a writable callback for all * connected clients. */ pthread_mutex_lock(&vhd->lock_ring); /* --------- ring lock { */ lws_start_foreach_llp(struct per_session_data__minimal **, ppss, vhd->pss_list) { if (lws_wsi_tsi((*ppss)->wsi) == lws_wsi_tsi(wsi)) lws_callback_on_writable((*ppss)->wsi); } lws_end_foreach_llp(ppss, pss_list); pthread_mutex_unlock(&vhd->lock_ring); /* } ring lock ------- */ break; default: break; } return r; } #define LWS_PLUGIN_PROTOCOL_MINIMAL \ { \ "lws-minimal", \ callback_minimal, \ sizeof(struct per_session_data__minimal), \ 128, \ 0, NULL, 0 \ } libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads-smp/000077500000000000000000000000001476025525100273775ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads-smp/CMakeLists.txt000066400000000000000000000015421476025525100321410ustar00rootroot00000000000000project(lws-minimal-ws-server-threads-smp C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckIncludeFile) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-ws-server-threads-smp) set(SRCS minimal-ws-server.c) set(requirements 1) require_pthreads(requirements) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) require_lws_config(LWS_WITH_SYS_STATE 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${PTHREAD_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${PTHREAD_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads-smp/README.md000066400000000000000000000024071476025525100306610ustar00rootroot00000000000000# lws minimal ws server (threads) + SMP This demonstrates both independent threads creating content as in the -threads example, and multiple service threads as in the http-server-smp example (but with ws). ## build You must first build libwebsockets itself with cmake `-DLWS_MAX_SMP=8` or some other number greater than one. ``` $ cmake . && make ``` Pthreads is required on your system. ## usage ``` $ ./lws-minimal-ws-server-threads-smp [2019/01/28 06:59:17:4217] USER: LWS minimal ws server + threads + smp | visit http://localhost:7681 [2019/01/28 06:59:17:4219] NOTICE: Service threads: 2 [2019/01/28 06:59:17:4220] NOTICE: LWS_CALLBACK_EVENT_WAIT_CANCELLED in svc tid 0x7fec48af8700 [2019/01/28 06:59:17:4220] NOTICE: LWS_CALLBACK_EVENT_WAIT_CANCELLED in svc tid 0x7fec48af8700 ... ``` Visit http://localhost:7681 on multiple browser windows. You may need to open 4 before the second service thread is used (check "svc tid" in the browser output). Two lws service threads are started. Two separate asynchronous threads generate strings and add them to a ringbuffer, signalling all lws service threads to send new entries to all the browser windows. This demonstrates how to safely manage asynchronously generated content and hook it up to the lws service threads. libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads-smp/minimal-ws-server.c000066400000000000000000000112221476025525100331220ustar00rootroot00000000000000/* * lws-minimal-ws-server * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal ws server that can cooperate with * other threads cleanly. Two other threads are started, which fill * a ringbuffer with strings at 10Hz. * * The actual work and thread spawning etc are done in the protocol * implementation in protocol_lws_minimal.c. * * To keep it simple, it serves stuff in the subdirectory "./mount-origin" of * the directory it was started in. * You can change that by changing mount.origin. */ #include #include #include #if defined(WIN32) #define HAVE_STRUCT_TIMESPEC #if defined(pid_t) #undef pid_t #endif #endif #include #define LWS_PLUGIN_STATIC #include "protocol_lws_minimal.c" #define COUNT_THREADS 2 static struct lws_protocols protocols[] = { { "http", lws_callback_http_dummy, 0, 0, 0, NULL, 0 }, LWS_PLUGIN_PROTOCOL_MINIMAL, LWS_PROTOCOL_LIST_TERM }; static struct lws_context *context; static int interrupted, started; static pthread_t pthread_service[COUNT_THREADS]; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; /* * This demonstrates how to pass a pointer into a specific protocol handler * running on a specific vhost. In this case, it's our default vhost and * we pass the pvo named "config" with the value a const char * "myconfig". * * This is the preferred way to pass configuration into a specific vhost + * protocol instance. */ static const struct lws_protocol_vhost_options pvo_ops = { NULL, NULL, "config", /* pvo name */ (void *)"myconfig" /* pvo value */ }; static const struct lws_protocol_vhost_options pvo = { NULL, /* "next" pvo linked-list */ &pvo_ops, /* "child" pvo linked-list */ "lws-minimal", /* protocol name we belong to on this vhost */ "" /* ignored */ }; void *thread_service(void *threadid) { while (lws_service_tsi(context, 1000, (int)(lws_intptr_t)threadid) >= 0 && !interrupted) ; pthread_exit(NULL); return NULL; } static int system_notify_cb(lws_state_manager_t *mgr, lws_state_notify_link_t *link, int current, int target) { struct lws_context *context = mgr->parent; void *retval; if (current != target) return 0; switch (current) { case LWS_SYSTATE_OPERATIONAL: lwsl_notice(" Service threads: %d\n", lws_get_count_threads(context)); /* start all the service threads */ for (started = 1; started < lws_get_count_threads(context); started++) if (pthread_create(&pthread_service[started], NULL, thread_service, (void *)(lws_intptr_t)started)) lwsl_err("Failed to start service thread\n"); break; case LWS_SYSTATE_CONTEXT_DESTROYING: /* wait for all the service threads to exit */ while ((--started) >= 1) pthread_join(pthread_service[started], &retval); break; } return 0; } lws_state_notify_link_t notifier = { { NULL, NULL, NULL }, system_notify_cb, "app" }; lws_state_notify_link_t *na[] = { ¬ifier, NULL }; void sigint_handler(int sig) { interrupted = 1; lws_cancel_service(context); } int main(int argc, const char **argv) { int logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE; struct lws_context_creation_info info; const char *p; int n = 0; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws server + threads + smp | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.protocols = protocols; info.pvo = &pvo; /* per-vhost options */ info.count_threads = COUNT_THREADS; info.register_notifier_list = na; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads-smp/mount-origin/000077500000000000000000000000001476025525100320265ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads-smp/mount-origin/example.js000066400000000000000000000025211476025525100340170ustar00rootroot00000000000000var head = 0, tail = 0, ring = new Array(); function get_appropriate_ws_url(extra_url) { var pcol; var u = document.URL; /* * We open the websocket encrypted if this page came on an * https:// url itself, otherwise unencrypted */ if (u.substring(0, 5) === "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) === "http") u = u.substr(7); } u = u.split("/"); /* + "/xxx" bit is for IE10 workaround */ return pcol + u[0] + "/" + extra_url; } function new_ws(urlpath, protocol) { return new WebSocket(urlpath, protocol); } document.addEventListener("DOMContentLoaded", function() { var ws = new_ws(get_appropriate_ws_url(""), "lws-minimal"); try { ws.onopen = function() { document.getElementById("r").disabled = 0; }; ws.onmessage =function got_packet(msg) { var n, s = ""; ring[head] = msg.data + "\n"; head = (head + 1) % 50; if (tail === head) tail = (tail + 1) % 50; n = tail; do { s = s + ring[n]; n = (n + 1) % 50; } while (n !== head); document.getElementById("r").value = s; document.getElementById("r").scrollTop = document.getElementById("r").scrollHeight; }; ws.onclose = function(){ document.getElementById("r").disabled = 1; }; } catch(exception) { alert("

    Error " + exception); } }, false); favicon.ico000066400000000000000000000025761476025525100341020ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads-smp/mount-originh( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads-smp/mount-origin/index.html000066400000000000000000000007521476025525100340270ustar00rootroot00000000000000
    Minimal ws server threads SMP example.
    Strings generated by server threads are sent to all browsers open on this page.
    The textarea show the last 50 lines received.


    libwebsockets.org-logo.svg000066400000000000000000000226061476025525100370620ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads-smp/mount-origin image/svg+xml strict-csp.svg000066400000000000000000000302361476025525100345670ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads-smp/mount-origin libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads-smp/protocol_lws_minimal.c000066400000000000000000000171041476025525100340020ustar00rootroot00000000000000/* * ws protocol handler plugin for "lws-minimal" demonstrating multithread * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include /* one of these created for each message in the ringbuffer */ struct msg { void *payload; /* is malloc'd */ size_t len; }; /* * One of these is created for each client connecting to us. * * It is ONLY read or written from the lws service thread context. */ struct per_session_data__minimal { struct per_session_data__minimal *pss_list; struct lws *wsi; uint32_t tail; }; /* one of these is created for each vhost our protocol is used with */ struct per_vhost_data__minimal { struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; struct per_session_data__minimal *pss_list; /* linked-list of live pss*/ pthread_t pthread_spam[2]; pthread_mutex_t lock_ring; /* serialize access to the ring buffer */ struct lws_ring *ring; /* {lock_ring} ringbuffer holding unsent content */ const char *config; char finished; }; #if defined(WIN32) static void usleep(unsigned long l) { Sleep(l / 1000); } #endif /* * This runs under both lws service and "spam threads" contexts. * Access is serialized by vhd->lock_ring. */ static void __minimal_destroy_message(void *_msg) { struct msg *msg = _msg; free(msg->payload); msg->payload = NULL; msg->len = 0; } /* * This runs under the "spam thread" thread context only. * * We spawn two threads that generate messages with this. * */ static void * thread_spam(void *d) { struct per_vhost_data__minimal *vhd = (struct per_vhost_data__minimal *)d; struct msg amsg; int len = 128, index = 1, n, whoami = 0; for (n = 0; n < (int)LWS_ARRAY_SIZE(vhd->pthread_spam); n++) if (pthread_equal(pthread_self(), vhd->pthread_spam[n])) whoami = n + 1; do { /* don't generate output if nobody connected */ if (!vhd->pss_list) goto wait; pthread_mutex_lock(&vhd->lock_ring); /* --------- ring lock { */ /* only create if space in ringbuffer */ n = (int)lws_ring_get_count_free_elements(vhd->ring); if (!n) { lwsl_user("dropping!\n"); goto wait_unlock; } amsg.payload = malloc((unsigned int)(LWS_PRE + len)); if (!amsg.payload) { lwsl_user("OOM: dropping\n"); goto wait_unlock; } n = lws_snprintf((char *)amsg.payload + LWS_PRE, (unsigned int)len, "%s: spam tid: %d, msg: %d", vhd->config, whoami, index++); amsg.len = (unsigned int)n; n = (int)lws_ring_insert(vhd->ring, &amsg, 1); if (n != 1) { __minimal_destroy_message(&amsg); lwsl_user("dropping!\n"); } else /* * This will cause a LWS_CALLBACK_EVENT_WAIT_CANCELLED * in the lws service thread context. */ lws_cancel_service(vhd->context); wait_unlock: pthread_mutex_unlock(&vhd->lock_ring); /* } ring lock ------- */ wait: usleep(100000); } while (!vhd->finished); lwsl_notice("thread_spam %d exiting\n", whoami); pthread_exit(NULL); return NULL; } /* this runs under the lws service thread context only */ static int callback_minimal(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__minimal *pss = (struct per_session_data__minimal *)user; struct per_vhost_data__minimal *vhd = (struct per_vhost_data__minimal *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); const struct lws_protocol_vhost_options *pvo; const struct msg *pmsg; char temp[LWS_PRE + 256]; void *retval; int n, m, r = 0; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: /* create our per-vhost struct */ vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__minimal)); if (!vhd) return 1; pthread_mutex_init(&vhd->lock_ring, NULL); /* recover the pointer to the globals struct */ pvo = lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "config"); if (!pvo || !pvo->value) { lwsl_err("%s: Can't find \"config\" pvo\n", __func__); return 1; } vhd->config = pvo->value; vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); vhd->ring = lws_ring_create(sizeof(struct msg), 8, __minimal_destroy_message); if (!vhd->ring) { lwsl_err("%s: failed to create ring\n", __func__); return 1; } /* start the content-creating threads */ for (n = 0; n < (int)LWS_ARRAY_SIZE(vhd->pthread_spam); n++) if (pthread_create(&vhd->pthread_spam[n], NULL, thread_spam, vhd)) { lwsl_err("thread creation failed\n"); r = 1; goto init_fail; } break; case LWS_CALLBACK_PROTOCOL_DESTROY: init_fail: vhd->finished = 1; for (n = 0; n < (int)LWS_ARRAY_SIZE(vhd->pthread_spam); n++) pthread_join(vhd->pthread_spam[n], &retval); if (vhd->ring) lws_ring_destroy(vhd->ring); pthread_mutex_destroy(&vhd->lock_ring); break; case LWS_CALLBACK_ESTABLISHED: /* add ourselves to the list of live pss held in the vhd */ lws_ll_fwd_insert(pss, pss_list, vhd->pss_list); pss->tail = lws_ring_get_oldest_tail(vhd->ring); pss->wsi = wsi; break; case LWS_CALLBACK_CLOSED: /* remove our closing pss from the list of live pss */ lws_ll_fwd_remove(struct per_session_data__minimal, pss_list, pss, vhd->pss_list); break; case LWS_CALLBACK_SERVER_WRITEABLE: pthread_mutex_lock(&vhd->lock_ring); /* --------- ring lock { */ pmsg = lws_ring_get_element(vhd->ring, &pss->tail); if (!pmsg) { pthread_mutex_unlock(&vhd->lock_ring); /* } ring lock ------- */ break; } n = lws_snprintf(temp + LWS_PRE, sizeof(temp) - LWS_PRE, "svc, %s", (char *)pmsg->payload + LWS_PRE); /* notice we allowed for LWS_PRE in the payload already */ m = lws_write(wsi, (unsigned char *)temp + LWS_PRE, (unsigned int)n, LWS_WRITE_TEXT); if (m < n) { pthread_mutex_unlock(&vhd->lock_ring); /* } ring lock ------- */ lwsl_err("ERROR %d writing to ws socket\n", m); return -1; } lws_ring_consume_and_update_oldest_tail( vhd->ring, /* lws_ring object */ struct per_session_data__minimal, /* type of objects with tails */ &pss->tail, /* tail of guy doing the consuming */ 1, /* number of payload objects being consumed */ vhd->pss_list, /* head of list of objects with tails */ tail, /* member name of tail in objects with tails */ pss_list /* member name of next object in objects with tails */ ); /* more to do? */ if (lws_ring_get_element(vhd->ring, &pss->tail)) /* come back as soon as we can write more */ lws_callback_on_writable(pss->wsi); pthread_mutex_unlock(&vhd->lock_ring); /* } ring lock ------- */ break; case LWS_CALLBACK_RECEIVE: break; case LWS_CALLBACK_EVENT_WAIT_CANCELLED: lwsl_notice("LWS_CALLBACK_EVENT_WAIT_CANCELLED in svc\n"); if (!vhd) break; /* * When the "spam" threads add a message to the ringbuffer, * they create this event in the lws service thread context * using lws_cancel_service(). * * We respond by scheduling a writable callback for all * connected clients. */ lws_start_foreach_llp(struct per_session_data__minimal **, ppss, vhd->pss_list) { lws_callback_on_writable((*ppss)->wsi); } lws_end_foreach_llp(ppss, pss_list); break; default: break; } return r; } #define LWS_PLUGIN_PROTOCOL_MINIMAL \ { \ "lws-minimal", \ callback_minimal, \ sizeof(struct per_session_data__minimal), \ 128, \ 0, NULL, 0 \ } libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads/000077500000000000000000000000001476025525100266025ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads/CMakeLists.txt000066400000000000000000000015141476025525100313430ustar00rootroot00000000000000project(lws-minimal-ws-server-threads C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckIncludeFile) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-ws-server-threads) set(SRCS minimal-ws-server.c) set(requirements 1) if (WIN32) set(requirements 0) endif() require_pthreads(requirements) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${PTHREAD_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${PTHREAD_LIB} ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads/README.md000066400000000000000000000012241476025525100300600ustar00rootroot00000000000000# lws minimal ws server (threads) ## build ``` $ cmake . && make ``` Pthreads is required on your system. ## usage ``` $ ./lws-minimal-ws-server-threads [2018/03/13 13:09:52:2208] USER: LWS minimal ws server + threads | visit http://localhost:7681 [2018/03/13 13:09:52:2365] NOTICE: Creating Vhost 'default' port 7681, 2 protocols, IPv6 off ``` Visit http://localhost:7681 on multiple browser windows Two asynchronous threads generate strings and add them to a ringbuffer, signalling lws to send new entries to all the browser windows. This demonstrates how to safely manage asynchronously generated content and hook it up to the lws service thread. libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads/minimal-ws-server.c000066400000000000000000000072141476025525100323330ustar00rootroot00000000000000/* * lws-minimal-ws-server * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates a minimal ws server that can cooperate with * other threads cleanly. Two other threads are started, which fill * a ringbuffer with strings at 10Hz. * * The actual work and thread spawning etc are done in the protocol * implementation in protocol_lws_minimal.c. * * To keep it simple, it serves stuff in the subdirectory "./mount-origin" of * the directory it was started in. * You can change that by changing mount.origin. */ #include #include #include #if defined(WIN32) #define HAVE_STRUCT_TIMESPEC #if defined(pid_t) #undef pid_t #endif #endif #include #define LWS_PLUGIN_STATIC #include "protocol_lws_minimal.c" static struct lws_protocols protocols[] = { { "http", lws_callback_http_dummy, 0, 0, 0, NULL, 0 }, LWS_PLUGIN_PROTOCOL_MINIMAL, LWS_PROTOCOL_LIST_TERM }; static int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; /* * This demonstrates how to pass a pointer into a specific protocol handler * running on a specific vhost. In this case, it's our default vhost and * we pass the pvo named "config" with the value a const char * "myconfig". * * This is the preferred way to pass configuration into a specific vhost + * protocol instance. */ static const struct lws_protocol_vhost_options pvo_ops = { NULL, NULL, "config", /* pvo name */ (void *)"myconfig" /* pvo value */ }; static const struct lws_protocol_vhost_options pvo = { NULL, /* "next" pvo linked-list */ &pvo_ops, /* "child" pvo linked-list */ "lws-minimal", /* protocol name we belong to on this vhost */ "" /* ignored */ }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws server + threads | visit http://localhost:7681\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.protocols = protocols; info.pvo = &pvo; /* per-vhost options */ info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } /* start the threads that create content */ while (!interrupted) if (lws_service(context, 0)) interrupted = 1; lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads/mount-origin/000077500000000000000000000000001476025525100312315ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads/mount-origin/example.js000066400000000000000000000025211476025525100332220ustar00rootroot00000000000000var head = 0, tail = 0, ring = new Array(); function get_appropriate_ws_url(extra_url) { var pcol; var u = document.URL; /* * We open the websocket encrypted if this page came on an * https:// url itself, otherwise unencrypted */ if (u.substring(0, 5) === "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) === "http") u = u.substr(7); } u = u.split("/"); /* + "/xxx" bit is for IE10 workaround */ return pcol + u[0] + "/" + extra_url; } function new_ws(urlpath, protocol) { return new WebSocket(urlpath, protocol); } document.addEventListener("DOMContentLoaded", function() { var ws = new_ws(get_appropriate_ws_url(""), "lws-minimal"); try { ws.onopen = function() { document.getElementById("r").disabled = 0; }; ws.onmessage =function got_packet(msg) { var n, s = ""; ring[head] = msg.data + "\n"; head = (head + 1) % 50; if (tail === head) tail = (tail + 1) % 50; n = tail; do { s = s + ring[n]; n = (n + 1) % 50; } while (n !== head); document.getElementById("r").value = s; document.getElementById("r").scrollTop = document.getElementById("r").scrollHeight; }; ws.onclose = function(){ document.getElementById("r").disabled = 1; }; } catch(exception) { alert("

    Error " + exception); } }, false); libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads/mount-origin/favicon.ico000066400000000000000000000025761476025525100333640ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads/mount-origin/index.html000066400000000000000000000007521476025525100332320ustar00rootroot00000000000000

    Minimal ws server threads example.
    Strings generated by server threads are sent to all browsers open on this page.
    The textarea show the last 50 lines received.


    libwebsockets.org-logo.svg000066400000000000000000000226061476025525100362650ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads/mount-origin image/svg+xml libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads/mount-origin/strict-csp.svg000066400000000000000000000302361476025525100340510ustar00rootroot00000000000000 libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-threads/protocol_lws_minimal.c000066400000000000000000000166341476025525100332140ustar00rootroot00000000000000/* * ws protocol handler plugin for "lws-minimal" demonstrating multithread * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include /* one of these created for each message in the ringbuffer */ struct msg { void *payload; /* is malloc'd */ size_t len; }; /* * One of these is created for each client connecting to us. * * It is ONLY read or written from the lws service thread context. */ struct per_session_data__minimal { struct per_session_data__minimal *pss_list; struct lws *wsi; uint32_t tail; }; /* one of these is created for each vhost our protocol is used with */ struct per_vhost_data__minimal { struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; struct per_session_data__minimal *pss_list; /* linked-list of live pss*/ pthread_t pthread_spam[2]; pthread_mutex_t lock_ring; /* serialize access to the ring buffer */ struct lws_ring *ring; /* {lock_ring} ringbuffer holding unsent content */ const char *config; char finished; }; #if defined(WIN32) static void usleep(unsigned long l) { Sleep(l / 1000); } #endif /* * This runs under both lws service and "spam threads" contexts. * Access is serialized by vhd->lock_ring. */ static void __minimal_destroy_message(void *_msg) { struct msg *msg = _msg; free(msg->payload); msg->payload = NULL; msg->len = 0; } /* * This runs under the "spam thread" thread context only. * * We spawn two threads that generate messages with this. * */ static void * thread_spam(void *d) { struct per_vhost_data__minimal *vhd = (struct per_vhost_data__minimal *)d; struct msg amsg; int len = 128, index = 1, n, whoami = 0; for (n = 0; n < (int)LWS_ARRAY_SIZE(vhd->pthread_spam); n++) if (pthread_equal(pthread_self(), vhd->pthread_spam[n])) whoami = n + 1; do { /* don't generate output if nobody connected */ if (!vhd->pss_list) goto wait; pthread_mutex_lock(&vhd->lock_ring); /* --------- ring lock { */ /* only create if space in ringbuffer */ n = (int)lws_ring_get_count_free_elements(vhd->ring); if (!n) { lwsl_user("dropping!\n"); goto wait_unlock; } amsg.payload = malloc((unsigned int)(LWS_PRE + len)); if (!amsg.payload) { lwsl_user("OOM: dropping\n"); goto wait_unlock; } n = lws_snprintf((char *)amsg.payload + LWS_PRE, (unsigned int)len, "%s: tid: %d, msg: %d", vhd->config, whoami, index++); amsg.len = (unsigned int)n; n = (int)lws_ring_insert(vhd->ring, &amsg, 1); if (n != 1) { __minimal_destroy_message(&amsg); lwsl_user("dropping!\n"); } else /* * This will cause a LWS_CALLBACK_EVENT_WAIT_CANCELLED * in the lws service thread context. */ lws_cancel_service(vhd->context); wait_unlock: pthread_mutex_unlock(&vhd->lock_ring); /* } ring lock ------- */ wait: usleep(100000); } while (!vhd->finished); lwsl_notice("thread_spam %d exiting\n", whoami); pthread_exit(NULL); return NULL; } /* this runs under the lws service thread context only */ static int callback_minimal(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__minimal *pss = (struct per_session_data__minimal *)user; struct per_vhost_data__minimal *vhd = (struct per_vhost_data__minimal *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); const struct lws_protocol_vhost_options *pvo; const struct msg *pmsg; void *retval; int n, m, r = 0; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: /* create our per-vhost struct */ vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__minimal)); if (!vhd) return 1; pthread_mutex_init(&vhd->lock_ring, NULL); /* recover the pointer to the globals struct */ pvo = lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "config"); if (!pvo || !pvo->value) { lwsl_err("%s: Can't find \"config\" pvo\n", __func__); return 1; } vhd->config = pvo->value; vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); vhd->ring = lws_ring_create(sizeof(struct msg), 8, __minimal_destroy_message); if (!vhd->ring) { lwsl_err("%s: failed to create ring\n", __func__); return 1; } /* start the content-creating threads */ for (n = 0; n < (int)LWS_ARRAY_SIZE(vhd->pthread_spam); n++) if (pthread_create(&vhd->pthread_spam[n], NULL, thread_spam, vhd)) { lwsl_err("thread creation failed\n"); r = 1; goto init_fail; } break; case LWS_CALLBACK_PROTOCOL_DESTROY: init_fail: vhd->finished = 1; for (n = 0; n < (int)LWS_ARRAY_SIZE(vhd->pthread_spam); n++) if (vhd->pthread_spam[n]) pthread_join(vhd->pthread_spam[n], &retval); if (vhd->ring) lws_ring_destroy(vhd->ring); pthread_mutex_destroy(&vhd->lock_ring); break; case LWS_CALLBACK_ESTABLISHED: /* add ourselves to the list of live pss held in the vhd */ lws_ll_fwd_insert(pss, pss_list, vhd->pss_list); pss->tail = lws_ring_get_oldest_tail(vhd->ring); pss->wsi = wsi; break; case LWS_CALLBACK_CLOSED: /* remove our closing pss from the list of live pss */ lws_ll_fwd_remove(struct per_session_data__minimal, pss_list, pss, vhd->pss_list); break; case LWS_CALLBACK_SERVER_WRITEABLE: pthread_mutex_lock(&vhd->lock_ring); /* --------- ring lock { */ pmsg = lws_ring_get_element(vhd->ring, &pss->tail); if (!pmsg) { pthread_mutex_unlock(&vhd->lock_ring); /* } ring lock ------- */ break; } /* notice we allowed for LWS_PRE in the payload already */ m = lws_write(wsi, ((unsigned char *)pmsg->payload) + LWS_PRE, pmsg->len, LWS_WRITE_TEXT); if (m < (int)pmsg->len) { pthread_mutex_unlock(&vhd->lock_ring); /* } ring lock ------- */ lwsl_err("ERROR %d writing to ws socket\n", m); return -1; } lws_ring_consume_and_update_oldest_tail( vhd->ring, /* lws_ring object */ struct per_session_data__minimal, /* type of objects with tails */ &pss->tail, /* tail of guy doing the consuming */ 1, /* number of payload objects being consumed */ vhd->pss_list, /* head of list of objects with tails */ tail, /* member name of tail in objects with tails */ pss_list /* member name of next object in objects with tails */ ); /* more to do? */ if (lws_ring_get_element(vhd->ring, &pss->tail)) /* come back as soon as we can write more */ lws_callback_on_writable(pss->wsi); pthread_mutex_unlock(&vhd->lock_ring); /* } ring lock ------- */ break; case LWS_CALLBACK_RECEIVE: break; case LWS_CALLBACK_EVENT_WAIT_CANCELLED: if (!vhd) break; /* * When the "spam" threads add a message to the ringbuffer, * they create this event in the lws service thread context * using lws_cancel_service(). * * We respond by scheduling a writable callback for all * connected clients. */ lws_start_foreach_llp(struct per_session_data__minimal **, ppss, vhd->pss_list) { lws_callback_on_writable((*ppss)->wsi); } lws_end_foreach_llp(ppss, pss_list); break; default: break; } return r; } #define LWS_PLUGIN_PROTOCOL_MINIMAL \ { \ "lws-minimal", \ callback_minimal, \ sizeof(struct per_session_data__minimal), \ 128, \ 0, NULL, 0 \ } libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-timer/000077500000000000000000000000001476025525100262705ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-timer/CMakeLists.txt000066400000000000000000000013111476025525100310240ustar00rootroot00000000000000project(lws-minimal-ws-server-timer C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-ws-server-timer) set(SRCS minimal-ws-server.c) set(requirements 1) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif() libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-timer/README.md000066400000000000000000000017271476025525100275560ustar00rootroot00000000000000# lws minimal ws server timer This is designed to confirm long term stability of ws timers on a particular platform. ## build ``` $ cmake . && make ``` ## Commandline Options Option|Meaning ---|--- -d|Set logging verbosity -s|Serve using TLS selfsigned cert (ie, connect to it with https://...) -h|Strict Host: header checking against vhost name (localhost) and port -v|Connection validity use 3s / 10s instead of default 5m / 5m10s ## usage ``` $ ./lws-minimal-ws-server-timer [2018/03/04 09:30:02:7986] USER: LWS minimal ws server | visit http://localhost:7681 [2018/03/04 09:30:02:7986] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 on ``` Visit http://localhost:7681 and the browser will connect back to the test server, you'll see ESTABLISHED logged. That triggers a TIMER event at 20s intervals which sets the wsi timeout to 60s. It should just stay like that forever doing the TIMER events at 20s intervals and not sending any traffic either way. libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-timer/localhost-100y.cert000066400000000000000000000040721476025525100316310ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-timer/localhost-100y.key000066400000000000000000000063101476025525100314610ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-timer/minimal-ws-server.c000066400000000000000000000073431476025525100320240ustar00rootroot00000000000000/* * lws-minimal-ws-server-timer * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws, * with an added websocket chat server. * * To keep it simple, it serves stuff in the subdirectory "./mount-origin" of * the directory it was started in. * You can change that by changing mount.origin. */ #include #include #include static int callback_protocol(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { switch (reason) { case LWS_CALLBACK_ESTABLISHED: lwsl_user("LWS_CALLBACK_ESTABLISHED\n"); lws_set_timer_usecs(wsi, 20 * LWS_USEC_PER_SEC); lws_set_timeout(wsi, 1, 60); break; case LWS_CALLBACK_TIMER: lwsl_user("LWS_CALLBACK_TIMER\n"); lws_set_timer_usecs(wsi, 20 * LWS_USEC_PER_SEC); lws_set_timeout(wsi, 1, 60); break; case LWS_CALLBACK_CLOSED: lwsl_user("LWS_CALLBACK_CLOSED\n"); break; default: break; } return 0; } static struct lws_protocols protocols[] = { { "http", lws_callback_http_dummy, 0, 0, 0, NULL, 0 }, { "timer", callback_protocol, 0, 0, 0, NULL, 0 }, LWS_PROTOCOL_LIST_TERM }; static const lws_retry_bo_t retry = { .secs_since_valid_ping = 3, .secs_since_valid_hangup = 10, }; static int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws server | visit http://localhost:7681 (-s = use TLS / https)\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.protocols = protocols; info.vhost_name = "localhost"; info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; #if defined(LWS_WITH_TLS) if (lws_cmdline_option(argc, argv, "-s")) { lwsl_user("Server using TLS\n"); info.options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; } #endif if (lws_cmdline_option(argc, argv, "-h")) info.options |= LWS_SERVER_OPTION_VHOST_UPG_STRICT_HOST_CHECK; if (lws_cmdline_option(argc, argv, "-v")) info.retry_and_idle_policy = &retry; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-timer/mount-origin/000077500000000000000000000000001476025525100307175ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-timer/mount-origin/example.js000066400000000000000000000026071476025525100327150ustar00rootroot00000000000000 function get_appropriate_ws_url(extra_url) { var pcol; var u = document.URL; /* * We open the websocket encrypted if this page came on an * https:// url itself, otherwise unencrypted */ if (u.substring(0, 5) === "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) === "http") u = u.substr(7); } u = u.split("/"); /* + "/xxx" bit is for IE10 workaround */ return pcol + u[0] + "/" + extra_url; } function new_ws(urlpath, protocol) { return new WebSocket(urlpath, protocol); } document.addEventListener("DOMContentLoaded", function() { var ws = new_ws(get_appropriate_ws_url(""), "timer"); try { ws.onopen = function() { document.getElementById("m").disabled = 0; document.getElementById("b").disabled = 0; }; ws.onmessage =function got_packet(msg) { document.getElementById("r").value = document.getElementById("r").value + msg.data + "\n"; document.getElementById("r").scrollTop = document.getElementById("r").scrollHeight; }; ws.onclose = function(){ document.getElementById("m").disabled = 1; document.getElementById("b").disabled = 1; }; } catch(exception) { alert("

    Error " + exception); } function sendmsg() { ws.send(document.getElementById("m").value); document.getElementById("m").value = ""; } document.getElementById("b").addEventListener("click", sendmsg); }, false); libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-timer/mount-origin/favicon.ico000066400000000000000000000025761476025525100330520ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-timer/mount-origin/index.html000066400000000000000000000007511476025525100327170ustar00rootroot00000000000000
    LWS wsi timer minimal ws server timer example.
    This opens a ws connection back to the server and just sits there setting the timer to fire every 20s, which resets the wsi timeout for 60s each timer. It should just stay like that forever. libwebsockets.org-logo.svg000066400000000000000000000226061476025525100357530ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-timer/mount-origin image/svg+xml libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server-timer/mount-origin/strict-csp.svg000066400000000000000000000302361476025525100335370ustar00rootroot00000000000000 libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server/000077500000000000000000000000001476025525100251525ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server/CMakeLists.txt000066400000000000000000000012741476025525100277160ustar00rootroot00000000000000project(lws-minimal-ws-server C) cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) list(APPEND CMAKE_MODULE_PATH ${LWS_CMAKE_DIR}) include(CheckCSourceCompiles) include(LwsCheckRequirements) set(SAMP lws-minimal-ws-server) set(SRCS minimal-ws-server.c) set(requirements 1) require_lws_config(LWS_ROLE_WS 1 requirements) require_lws_config(LWS_WITH_SERVER 1 requirements) if (requirements) add_executable(${SAMP} ${SRCS}) if (websockets_shared) target_link_libraries(${SAMP} websockets_shared ${LIBWEBSOCKETS_DEP_LIBS}) add_dependencies(${SAMP} websockets_shared) else() target_link_libraries(${SAMP} websockets ${LIBWEBSOCKETS_DEP_LIBS}) endif() endif()libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server/README.md000066400000000000000000000013761476025525100264400ustar00rootroot00000000000000# lws minimal ws server ## build ``` $ cmake . && make ``` ## Commandline Options Option|Meaning ---|--- -d|Set logging verbosity -s|Serve using TLS selfsigned cert (ie, connect to it with https://...) -h|Strict Host: header checking against vhost name (localhost) and port -v|Connection validity use 3s / 10s instead of default 5m / 5m10s ## usage ``` $ ./lws-minimal-ws-server [2018/03/04 09:30:02:7986] USER: LWS minimal ws server | visit http://localhost:7681 [2018/03/04 09:30:02:7986] NOTICE: Creating Vhost 'default' port 7681, 1 protocols, IPv6 on ``` Visit http://localhost:7681 on multiple browser windows Text you type in any browser window is sent to all of them. For simplicity of this example, only one line of text is cached at the server. libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server/localhost-100y.cert000066400000000000000000000040721476025525100305130ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIF5jCCA86gAwIBAgIJANq50IuwPFKgMA0GCSqGSIb3DQEBCwUAMIGGMQswCQYD VQQGEwJHQjEQMA4GA1UECAwHRXJld2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEb MBkGA1UECgwSbGlid2Vic29ja2V0cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3Qx HzAdBgkqhkiG9w0BCQEWEG5vbmVAaW52YWxpZC5vcmcwIBcNMTgwMzIwMDQxNjA3 WhgPMjExODAyMjQwNDE2MDdaMIGGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRXJl d2hvbjETMBEGA1UEBwwKQWxsIGFyb3VuZDEbMBkGA1UECgwSbGlid2Vic29ja2V0 cy10ZXN0MRIwEAYDVQQDDAlsb2NhbGhvc3QxHzAdBgkqhkiG9w0BCQEWEG5vbmVA aW52YWxpZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjYtuW aICCY0tJPubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8 Di3DAmHKnSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTek LWcfI5ZZtoGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnH KT/m6DSU0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6 jzhNyMBTJ1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQ Ujy5N8pSNp7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAz TK4l2pHNuC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBK Izv9cgi9fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0 nPN1IMSnzXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzo GMTvP/AuehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9p sNcjTMaBQLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABo1MwUTAdBgNVHQ4EFgQU 9mYU23tW2zsomkKTAXarjr2vjuswHwYDVR0jBBgwFoAU9mYU23tW2zsomkKTAXar jr2vjuswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEANjIBMrow YNCbhAJdP7dhlhT2RUFRdeRUJD0IxrH/hkvb6myHHnK8nOYezFPjUlmRKUgNEDuA xbnXZzPdCRNV9V2mShbXvCyiDY7WCQE2Bn44z26O0uWVk+7DNNLH9BnkwUtOnM9P wtmD9phWexm4q2GnTsiL6Ul6cy0QlTJWKVLEUQQ6yda582e23J1AXqtqFcpfoE34 H3afEiGy882b+ZBiwkeV+oq6XVF8sFyr9zYrv9CvWTYlkpTQfLTZSsgPdEHYVcjv xQ2D+XyDR0aRLRlvxUa9dHGFHLICG34Juq5Ai6lM1EsoD8HSsJpMcmrH7MWw2cKk ujC3rMdFTtte83wF1uuF4FjUC72+SmcQN7A386BC/nk2TTsJawTDzqwOu/VdZv2g 1WpTHlumlClZeP+G/jkSyDwqNnTu1aodDmUa4xZodfhP1HWPwUKFcq8oQr148QYA AOlbUOJQU7QwRWd1VbnwhDtQWXC92A2w1n/xkZSR1BM/NUSDhkBSUU1WjMbWg6Gg mnIZLRerQCu1Oozr87rOQqQakPkyt8BUSNK3K42j2qcfhAONdRl8Hq8Qs5pupy+s 8sdCGDlwR3JNCMv6u48OK87F4mcIxhkSefFJUFII25pCGN5WtE4p5l+9cnO1GrIX e2Hl/7M0c/lbZ4FvXgARlex2rkgS0Ka06HE= -----END CERTIFICATE----- libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server/localhost-100y.key000066400000000000000000000063101476025525100303430ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjYtuWaICCY0tJ PubxpIgIL+WWmz/fmK8IQr11Wtee6/IUyUlo5I602mq1qcLhT/kmpoR8Di3DAmHK nSWdPWtn1BtXLErLlUiHgZDrZWInmEBjKM1DZf+CvNGZ+EzPgBv5nTekLWcfI5ZZ toGuIP1Dl/IkNDw8zFz4cpiMe/BFGemyxdHhLrKHSm8Eo+nT734tItnHKT/m6DSU 0xlZ13d6ehLRm7/+Nx47M3XMTRH5qKP/7TTE2s0U6+M0tsGI2zpRi+m6jzhNyMBT J1u58qAe3ZW5/+YAiuZYAB6n5bhUp4oFuB5wYbcBywVR8ujInpF8buWQUjy5N8pS Np7szdYsnLJpvAd0sibrNPjC0FQCNrpNjgJmIK3+mKk4kXX7ZTwefoAzTK4l2pHN uC53QVc/EF++GBLAxmvCDq9ZpMIYi7OmzkkAKKC9Ue6Ef217LFQCFIBKIzv9cgi9 fwPMLhrKleoVRNsecBsCP569WgJXhUnwf2lon4fEZr3+vRuc9shfqnV0nPN1IMSn zXCast7I2fiuRXdIz96KjlGQpP4XfNVA+RGL7aMnWOFIaVrKWLzAtgzoGMTvP/Au ehKXncBJhYtW0ltTioVx+5yTYSAZWl+IssmXjefxJqYi2/7QWmv1QC9psNcjTMaB QLN03T1Qelbs7Y27sxdEnNUth4kI+wIDAQABAoICAFWe8MQZb37k2gdAV3Y6aq8f qokKQqbCNLd3giGFwYkezHXoJfg6Di7oZxNcKyw35LFEghkgtQqErQqo35VPIoH+ vXUpWOjnCmM4muFA9/cX6mYMc8TmJsg0ewLdBCOZVw+wPABlaqz+0UOiSMMftpk9 fz9JwGd8ERyBsT+tk3Qi6D0vPZVsC1KqxxL/cwIFd3Hf2ZBtJXe0KBn1pktWht5A Kqx9mld2Ovl7NjgiC1Fx9r+fZw/iOabFFwQA4dr+R8mEMK/7bd4VXfQ1o/QGGbMT G+ulFrsiDyP+rBIAaGC0i7gDjLAIBQeDhP409ZhswIEc/GBtODU372a2CQK/u4Q/ HBQvuBtKFNkGUooLgCCbFxzgNUGc83GB/6IwbEM7R5uXqsFiE71LpmroDyjKTlQ8 YZkpIcLNVLw0usoGYHFm2rvCyEVlfsE3Ub8cFyTFk50SeOcF2QL2xzKmmbZEpXgl xBHR0hjgon0IKJDGfor4bHO7Nt+1Ece8u2oTEKvpz5aIn44OeC5mApRGy83/0bvs esnWjDE/bGpoT8qFuy+0urDEPNId44XcJm1IRIlG56ErxC3l0s11wrIpTmXXckqw zFR9s2z7f0zjeyxqZg4NTPI7wkM3M8BXlvp2GTBIeoxrWB4V3YArwu8QF80QBgVz mgHl24nTg00UH1OjZsABAoIBAQDOxftSDbSqGytcWqPYP3SZHAWDA0O4ACEM+eCw au9ASutl0IDlNDMJ8nC2ph25BMe5hHDWp2cGQJog7pZ/3qQogQho2gUniKDifN77 40QdykllTzTVROqmP8+efreIvqlzHmuqaGfGs5oTkZaWj5su+B+bT+9rIwZcwfs5 YRINhQRx17qa++xh5mfE25c+M9fiIBTiNSo4lTxWMBShnK8xrGaMEmN7W0qTMbFH PgQz5FcxRjCCqwHilwNBeLDTp/ZECEB7y34khVh531mBE2mNzSVIQcGZP1I/DvXj W7UUNdgFwii/GW+6M0uUDy23UVQpbFzcV8o1C2nZc4Fb4zwBAoIBAQDKSJkFwwuR naVJS6WxOKjX8MCu9/cKPnwBv2mmI2jgGxHTw5sr3ahmF5eTb8Zo19BowytN+tr6 2ZFoIBA9Ubc9esEAU8l3fggdfM82cuR9sGcfQVoCh8tMg6BP8IBLOmbSUhN3PG2m 39I802u0fFNVQCJKhx1m1MFFLOu7lVcDS9JN+oYVPb6MDfBLm5jOiPuYkFZ4gH79 J7gXI0/YKhaJ7yXthYVkdrSF6Eooer4RZgma62Dd1VNzSq3JBo6rYjF7Lvd+RwDC R1thHrmf/IXplxpNVkoMVxtzbrrbgnC25QmvRYc0rlS/kvM4yQhMH3eA7IycDZMp Y+0xm7I7jTT7AoIBAGKzKIMDXdCxBWKhNYJ8z7hiItNl1IZZMW2TPUiY0rl6yaCh BVXjM9W0r07QPnHZsUiByqb743adkbTUjmxdJzjaVtxN7ZXwZvOVrY7I7fPWYnCE fXCr4+IVpZI/ZHZWpGX6CGSgT6EOjCZ5IUufIvEpqVSmtF8MqfXO9o9uIYLokrWQ x1dBl5UnuTLDqw8bChq7O5y6yfuWaOWvL7nxI8NvSsfj4y635gIa/0dFeBYZEfHI UlGdNVomwXwYEzgE/c19ruIowX7HU/NgxMWTMZhpazlxgesXybel+YNcfDQ4e3RM OMz3ZFiaMaJsGGNf4++d9TmMgk4Ns6oDs6Tb9AECggEBAJYzd+SOYo26iBu3nw3L 65uEeh6xou8pXH0Tu4gQrPQTRZZ/nT3iNgOwqu1gRuxcq7TOjt41UdqIKO8vN7/A aJavCpaKoIMowy/aGCbvAvjNPpU3unU8jdl/t08EXs79S5IKPcgAx87sTTi7KDN5 SYt4tr2uPEe53NTXuSatilG5QCyExIELOuzWAMKzg7CAiIlNS9foWeLyVkBgCQ6S me/L8ta+mUDy37K6vC34jh9vK9yrwF6X44ItRoOJafCaVfGI+175q/eWcqTX4q+I G4tKls4sL4mgOJLq+ra50aYMxbcuommctPMXU6CrrYyQpPTHMNVDQy2ttFdsq9iK TncCggEBAMmt/8yvPflS+xv3kg/ZBvR9JB1In2n3rUCYYD47ReKFqJ03Vmq5C9nY 56s9w7OUO8perBXlJYmKZQhO4293lvxZD2Iq4NcZbVSCMoHAUzhzY3brdgtSIxa2 gGveGAezZ38qKIU26dkz7deECY4vrsRkwhpTW0LGVCpjcQoaKvymAoCmAs8V2oMr Ziw1YQ9uOUoWwOqm1wZqmVcOXvPIS2gWAs3fQlWjH9hkcQTMsUaXQDOD0aqkSY3E NqOvbCV1/oUpRi3076khCoAXI1bKSn/AvR3KDP14B5toHI/F5OTSEiGhhHesgRrs fBrpEY1IATtPq1taBZZogRqI3rOkkPk= -----END PRIVATE KEY----- libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server/minimal-ws-server.c000066400000000000000000000067031476025525100307050ustar00rootroot00000000000000/* * lws-minimal-ws-server * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This demonstrates the most minimal http server you can make with lws, * with an added websocket chat server. * * To keep it simple, it serves stuff in the subdirectory "./mount-origin" of * the directory it was started in. * You can change that by changing mount.origin. */ #include #include #include #define LWS_PLUGIN_STATIC #include "protocol_lws_minimal.c" static struct lws_protocols protocols[] = { { "http", lws_callback_http_dummy, 0, 0, 0, NULL, 0}, LWS_PLUGIN_PROTOCOL_MINIMAL, LWS_PROTOCOL_LIST_TERM }; static const lws_retry_bo_t retry = { .secs_since_valid_ping = 3, .secs_since_valid_hangup = 10, }; static int interrupted; static const struct lws_http_mount mount = { /* .mount_next */ NULL, /* linked-list "next" */ /* .mountpoint */ "/", /* mountpoint URL */ /* .origin */ "./mount-origin", /* serve from dir */ /* .def */ "index.html", /* default filename */ /* .protocol */ NULL, /* .cgienv */ NULL, /* .extra_mimetypes */ NULL, /* .interpret */ NULL, /* .cgi_timeout */ 0, /* .cache_max_age */ 0, /* .auth_mask */ 0, /* .cache_reusable */ 0, /* .cache_revalidate */ 0, /* .cache_intermediaries */ 0, /* .origin_protocol */ LWSMPRO_FILE, /* files in a dir */ /* .mountpoint_len */ 1, /* char count */ /* .basic_auth_login_file */ NULL, }; #if defined(LWS_WITH_PLUGINS) /* if plugins enabled, only protocols explicitly named in pvo bind to vhost */ static struct lws_protocol_vhost_options pvo = { NULL, NULL, "lws-minimal", "" }; #endif void sigint_handler(int sig) { interrupted = 1; } int main(int argc, const char **argv) { struct lws_context_creation_info info; struct lws_context *context; const char *p; int n = 0, logs = LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE /* for LLL_ verbosity above NOTICE to be built into lws, * lws must have been configured and built with * -DCMAKE_BUILD_TYPE=DEBUG instead of =RELEASE */ /* | LLL_INFO */ /* | LLL_PARSER */ /* | LLL_HEADER */ /* | LLL_EXT */ /* | LLL_CLIENT */ /* | LLL_LATENCY */ /* | LLL_DEBUG */; signal(SIGINT, sigint_handler); if ((p = lws_cmdline_option(argc, argv, "-d"))) logs = atoi(p); lws_set_log_level(logs, NULL); lwsl_user("LWS minimal ws server | visit http://localhost:7681 (-s = use TLS / https)\n"); memset(&info, 0, sizeof info); /* otherwise uninitialized garbage */ info.port = 7681; info.mounts = &mount; info.protocols = protocols; info.vhost_name = "localhost"; #if defined(LWS_WITH_PLUGINS) info.pvo = &pvo; #endif info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; #if defined(LWS_WITH_TLS) if (lws_cmdline_option(argc, argv, "-s")) { lwsl_user("Server using TLS\n"); info.options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; info.ssl_cert_filepath = "localhost-100y.cert"; info.ssl_private_key_filepath = "localhost-100y.key"; } #endif if (lws_cmdline_option(argc, argv, "-h")) info.options |= LWS_SERVER_OPTION_VHOST_UPG_STRICT_HOST_CHECK; if (lws_cmdline_option(argc, argv, "-v")) info.retry_and_idle_policy = &retry; context = lws_create_context(&info); if (!context) { lwsl_err("lws init failed\n"); return 1; } while (n >= 0 && !interrupted) n = lws_service(context, 0); lws_context_destroy(context); return 0; } libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server/mount-origin/000077500000000000000000000000001476025525100276015ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server/mount-origin/example.js000066400000000000000000000026251476025525100315770ustar00rootroot00000000000000 function get_appropriate_ws_url(extra_url) { var pcol; var u = document.URL; /* * We open the websocket encrypted if this page came on an * https:// url itself, otherwise unencrypted */ if (u.substring(0, 5) === "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) === "http") u = u.substr(7); } u = u.split("/"); /* + "/xxx" bit is for IE10 workaround */ return pcol + u[0] + "/" + extra_url; } function new_ws(urlpath, protocol) { return new WebSocket(urlpath, protocol); } document.addEventListener("DOMContentLoaded", function() { var ws = new_ws(get_appropriate_ws_url(""), "lws-minimal"); try { ws.onopen = function() { document.getElementById("m").disabled = 0; document.getElementById("b").disabled = 0; }; ws.onmessage =function got_packet(msg) { document.getElementById("r").value = document.getElementById("r").value + msg.data + "\n"; document.getElementById("r").scrollTop = document.getElementById("r").scrollHeight; }; ws.onclose = function(){ document.getElementById("m").disabled = 1; document.getElementById("b").disabled = 1; }; } catch(exception) { alert("

    Error " + exception); } function sendmsg() { ws.send(document.getElementById("m").value); document.getElementById("m").value = ""; } document.getElementById("b").addEventListener("click", sendmsg); }, false); libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server/mount-origin/favicon.ico000066400000000000000000000025761476025525100317340ustar00rootroot00000000000000h( ±w’°zXgÕškožmĢPŻ›Łė°`²ėŠsŖ’   ’’’’’’ÄGÄGÄG’’ÄGÄGÄG’’ÄGÄGÄG’’’’libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server/mount-origin/index.html000066400000000000000000000007311476025525100315770ustar00rootroot00000000000000
    LWS chat minimal ws server example.
    Chat is sent to all browsers open on this page.


    libwebsockets.org-logo.svg000066400000000000000000000226061476025525100346350ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server/mount-origin image/svg+xml libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server/mount-origin/strict-csp.svg000066400000000000000000000302361476025525100324210ustar00rootroot00000000000000 libwebsockets-4.3.5/minimal-examples/ws-server/minimal-ws-server/protocol_lws_minimal.c000066400000000000000000000073531476025525100315620ustar00rootroot00000000000000/* * ws protocol handler plugin for "lws-minimal" * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * This version holds a single message at a time, which may be lost if a new * message comes. See the minimal-ws-server-ring sample for the same thing * but using an lws_ring ringbuffer to hold up to 8 messages at a time. */ #if !defined (LWS_PLUGIN_STATIC) #define LWS_DLL #define LWS_INTERNAL #include #endif #include /* one of these created for each message */ struct msg { void *payload; /* is malloc'd */ size_t len; }; /* one of these is created for each client connecting to us */ struct per_session_data__minimal { struct per_session_data__minimal *pss_list; struct lws *wsi; int last; /* the last message number we sent */ }; /* one of these is created for each vhost our protocol is used with */ struct per_vhost_data__minimal { struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; struct per_session_data__minimal *pss_list; /* linked-list of live pss*/ struct msg amsg; /* the one pending message... */ int current; /* the current message number we are caching */ }; /* destroys the message when everyone has had a copy of it */ static void __minimal_destroy_message(void *_msg) { struct msg *msg = _msg; free(msg->payload); msg->payload = NULL; msg->len = 0; } static int callback_minimal(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__minimal *pss = (struct per_session_data__minimal *)user; struct per_vhost_data__minimal *vhd = (struct per_vhost_data__minimal *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); int m; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__minimal)); vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); break; case LWS_CALLBACK_ESTABLISHED: /* add ourselves to the list of live pss held in the vhd */ lws_ll_fwd_insert(pss, pss_list, vhd->pss_list); pss->wsi = wsi; pss->last = vhd->current; break; case LWS_CALLBACK_CLOSED: /* remove our closing pss from the list of live pss */ lws_ll_fwd_remove(struct per_session_data__minimal, pss_list, pss, vhd->pss_list); break; case LWS_CALLBACK_SERVER_WRITEABLE: if (!vhd->amsg.payload) break; if (pss->last == vhd->current) break; /* notice we allowed for LWS_PRE in the payload already */ m = lws_write(wsi, ((unsigned char *)vhd->amsg.payload) + LWS_PRE, vhd->amsg.len, LWS_WRITE_TEXT); if (m < (int)vhd->amsg.len) { lwsl_err("ERROR %d writing to ws\n", m); return -1; } pss->last = vhd->current; break; case LWS_CALLBACK_RECEIVE: if (vhd->amsg.payload) __minimal_destroy_message(&vhd->amsg); vhd->amsg.len = len; /* notice we over-allocate by LWS_PRE */ vhd->amsg.payload = malloc(LWS_PRE + len); if (!vhd->amsg.payload) { lwsl_user("OOM: dropping\n"); break; } memcpy((char *)vhd->amsg.payload + LWS_PRE, in, len); vhd->current++; /* * let everybody know we want to write something on them * as soon as they are ready */ lws_start_foreach_llp(struct per_session_data__minimal **, ppss, vhd->pss_list) { lws_callback_on_writable((*ppss)->wsi); } lws_end_foreach_llp(ppss, pss_list); break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_MINIMAL \ { \ "lws-minimal", \ callback_minimal, \ sizeof(struct per_session_data__minimal), \ 128, \ 0, NULL, 0 \ } libwebsockets-4.3.5/plugin-standalone/000077500000000000000000000000001476025525100200165ustar00rootroot00000000000000libwebsockets-4.3.5/plugin-standalone/CMakeLists.txt000066400000000000000000000045301476025525100225600ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8.12) find_package(libwebsockets CONFIG REQUIRED) if(NOT DEFINED CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type") endif() # This shows one way to build a standalone plugin # outside of lws itself project(lws-protocol-plugin-example C) set(PACKAGE "lws-protocol-plugin-example") set(CPACK_PACKAGE_NAME "${PACKAGE}") set(CPACK_PACKAGE_VERSION "0.1") set(CPACK_PACKAGE_VENDOR "andy@warmcat.com") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PACKAGE} ${PACKAGE_VERSION}") set(SOVERSION "1") set(VERSION "0.1") set(PLUGIN_NAME "protocol_example_standalone") # space-separated list of sources set(PLUGIN_SRCS protocol_example_standalone.c) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake/") message(STATUS "CMAKE_TOOLCHAIN_FILE='${CMAKE_TOOLCHAIN_FILE}'") # Try to find the current Git hash. find_package(Git) if(GIT_EXECUTABLE) execute_process( WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" COMMAND "${GIT_EXECUTABLE}" describe OUTPUT_VARIABLE GIT_HASH OUTPUT_STRIP_TRAILING_WHITESPACE ) execute_process( WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" COMMAND "whoami" OUTPUT_VARIABLE GIT_USER OUTPUT_STRIP_TRAILING_WHITESPACE ) execute_process( WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" COMMAND "hostname" OUTPUT_VARIABLE GIT_HOST OUTPUT_STRIP_TRAILING_WHITESPACE ) string(REGEX REPLACE "([^\\])[\\]([^\\])" "\\1\\\\\\\\\\2" GIT_USER ${GIT_USER}) set(LWS_BUILD_HASH ${GIT_USER}@${GIT_HOST}-${GIT_HASH}) message("Git commit hash: ${LWS_BUILD_HASH}") endif() set(CMAKE_C_FLAGS "-fPIC ${CMAKE_C_FLAGS}") source_group("Headers Private" FILES ${PLUGIN_HDR}) source_group("Sources" FILES ${PLUGIN_SRCS}) add_library(${PLUGIN_NAME} SHARED ${PLUGIN_SRCS} ${PLUGIN_HDR}) target_compile_definitions(${PLUGIN_NAME} PRIVATE LWS_BUILDING_SHARED) target_link_libraries(${PLUGIN_NAME} -lwebsockets ${LIBWEBSOCKETS_DEP_LIBS}) # Set test app specific defines. set_property(TARGET ${PLUGIN_NAME} PROPERTY COMPILE_DEFINITIONS INSTALL_DATADIR="${CMAKE_INSTALL_PREFIX}/plugins" ) list(APPEND PLUGINS_LIST ${PLUGIN_NAME}) install(TARGETS ${PLUGINS_LIST} PERMISSIONS OWNER_WRITE OWNER_EXECUTE GROUP_EXECUTE WORLD_EXECUTE OWNER_READ GROUP_READ WORLD_READ DESTINATION share/libwebsockets-test-server/plugins COMPONENT plugins) libwebsockets-4.3.5/plugin-standalone/protocol_example_standalone.c000066400000000000000000000075361476025525100257610ustar00rootroot00000000000000/* * ws protocol handler plugin for "dumb increment" * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * These test plugins are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. * * This is a copy of dumb_increment adapted slightly to serve as the * "example-standalone-protocol", to show how to build protocol plugins * outside the library easily. */ #if !defined (LWS_PLUGIN_STATIC) #if !defined(LWS_DLL) #define LWS_DLL #endif #if !defined(LWS_INTERNAL) #define LWS_INTERNAL #endif #include #endif #include struct per_vhost_data__dumb_increment { uv_timer_t timeout_watcher; struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; }; struct per_session_data__dumb_increment { int number; }; static void uv_timeout_cb_dumb_increment(uv_timer_t *w #if UV_VERSION_MAJOR == 0 , int status #endif ) { struct per_vhost_data__dumb_increment *vhd = lws_container_of(w, struct per_vhost_data__dumb_increment, timeout_watcher); lws_callback_on_writable_all_protocol_vhost(vhd->vhost, vhd->protocol); } static int callback_dumb_increment(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__dumb_increment *pss = (struct per_session_data__dumb_increment *)user; struct per_vhost_data__dumb_increment *vhd = (struct per_vhost_data__dumb_increment *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); unsigned char buf[LWS_PRE + 512]; unsigned char *p = &buf[LWS_PRE]; int n, m; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__dumb_increment)); vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); uv_timer_init(lws_uv_getloop(vhd->context, 0), &vhd->timeout_watcher); uv_timer_start(&vhd->timeout_watcher, uv_timeout_cb_dumb_increment, 50, 50); break; case LWS_CALLBACK_PROTOCOL_DESTROY: if (!vhd) break; uv_timer_stop(&vhd->timeout_watcher); break; case LWS_CALLBACK_ESTABLISHED: pss->number = 0; break; case LWS_CALLBACK_SERVER_WRITEABLE: n = sprintf((char *)p, "%d", pss->number++); m = lws_write(wsi, p, n, LWS_WRITE_TEXT); if (m < n) { lwsl_err("ERROR %d writing to di socket\n", n); return -1; } break; case LWS_CALLBACK_RECEIVE: if (len < 6) break; if (strcmp((const char *)in, "reset\n") == 0) pss->number = 0; if (strcmp((const char *)in, "closeme\n") == 0) { lwsl_notice("dumb_inc: closing as requested\n"); lws_close_reason(wsi, LWS_CLOSE_STATUS_GOINGAWAY, (unsigned char *)"seeya", 5); return -1; } break; default: break; } return 0; } static const struct lws_protocols protocols[] = { { "example-standalone-protocol", callback_dumb_increment, sizeof(struct per_session_data__dumb_increment), 10, /* rx buf size must be >= permessage-deflate rx size */ }, }; LWS_VISIBLE const lws_plugin_protocol_t protocol_example_standalone = { .hdr = { "standalone", "lws_protocol_plugin", LWS_BUILD_HASH, LWS_PLUGIN_API_MAGIC }, .protocols = protocols, .count_protocols = LWS_ARRAY_SIZE(protocols), .extensions = NULL, .count_extensions = 0, }; libwebsockets-4.3.5/plugins/000077500000000000000000000000001476025525100160535ustar00rootroot00000000000000libwebsockets-4.3.5/plugins/CMakeLists.txt000066400000000000000000000167201476025525100206210ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2021 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # include_directories(.) if (DEFINED LIB_LIST_AT_END) link_libraries(${LIB_LIST_AT_END}) endif() if ((LWS_WITH_PLUGINS AND LWS_WITH_SHARED) OR LWS_WITH_PLUGINS_BUILTIN) # # Either build the plugins as separate dynamic libs (LWS_WITH_PLUGINS) # or build into the main lws library (LWS_WITH_PLUGINS_BUILTIN) # macro(create_plugin PLUGIN_NAME PLUGIN_INCLUDE MAIN_SRC S2 S3) if (NOT LWS_WITH_PLUGINS_BUILTIN) set(PLUGIN_SRCS ${MAIN_SRC}) if ("${S2}" STREQUAL "") else() list(APPEND PLUGIN_SRCS ${S2}) endif() if ("${S3}" STREQUAL "") else() list(APPEND PLUGIN_SRCS ${S3}) endif() if (WIN32) list(APPEND PLUGIN_SRCS ${WIN32_HELPERS_PATH}/getopt.c ${WIN32_HELPERS_PATH}/getopt_long.c ${WIN32_HELPERS_PATH}/gettimeofday.c ) list(APPEND PLUGIN_HDR ${WIN32_HELPERS_PATH}/getopt.h ${WIN32_HELPERS_PATH}/gettimeofday.h ) endif(WIN32) source_group("Headers Private" FILES ${PLUGIN_HDR}) source_group("Sources" FILES ${PLUGIN_SRCS}) add_library(${PLUGIN_NAME} SHARED ${PLUGIN_SRCS} ${PLUGIN_HDR}) target_link_libraries(${PLUGIN_NAME} websockets_shared) add_dependencies(${PLUGIN_NAME} websockets_shared) # doesn't work inside macro :-O # target_compile_definitions(${PLUGIN_NAME} PRIVATE LWS_BUILDING_SHARED) target_include_directories(${PLUGIN_NAME} PRIVATE ${PLUGIN_INCLUDE} ${LWS_LIB_BUILD_INC_PATHS}) set_property(TARGET ${PLUGIN_NAME} PROPERTY COMPILE_DEFINITIONS INSTALL_DATADIR="${CMAKE_INSTALL_PREFIX}/plugins" ) set(CMAKE_POSITION_INDEPENDENT_CODE ON) list(APPEND PLUGINS_LIST ${PLUGIN_NAME}) else() # let's just build the things into the lib message("Building in plugin ${PLUGIN_NAME}") if ("${PLUGIN_INCLUDE}" STREQUAL "") else() list(APPEND LWS_LIB_BUILD_INC_PATHS ../plugins/${PLUGIN_INCLUDE}) endif() if ("${MAIN_SRC}" STREQUAL "") else() foreach(A ${MAIN_SRC}) list(APPEND SOURCES ../plugins/${A}) endforeach() endif() if ("${S2}" STREQUAL "") else() foreach(A ${S2}) list(APPEND SOURCES ../plugins/${A}) endforeach() endif() if ("${S3}" STREQUAL "") else() foreach(A ${S3}) list(APPEND SOURCES ../plugins/${A}) endforeach() endif() endif(NOT LWS_WITH_PLUGINS_BUILTIN) endmacro() if (LWS_ROLE_WS) create_plugin(protocol_dumb_increment "" "protocol_dumb_increment.c" "" "") if (NOT LWS_WITH_PLUGINS_BUILTIN) target_compile_definitions(protocol_dumb_increment PRIVATE LWS_BUILDING_SHARED) endif() create_plugin(protocol_lws_mirror "" "protocol_lws_mirror.c" "" "") if (NOT LWS_WITH_PLUGINS_BUILTIN) target_compile_definitions(protocol_lws_mirror PRIVATE LWS_BUILDING_SHARED) endif() create_plugin(protocol_lws_status "" "protocol_lws_status.c" "" "") if (NOT LWS_WITH_PLUGINS_BUILTIN) target_compile_definitions(protocol_lws_status PRIVATE LWS_BUILDING_SHARED) endif() if (NOT WIN32) create_plugin(protocol_lws_raw_test "" "protocol_lws_raw_test.c" "" "") if (NOT LWS_WITH_PLUGINS_BUILTIN) target_compile_definitions(protocol_lws_raw_test PRIVATE LWS_BUILDING_SHARED) endif() if (UNIX AND LWS_HAVE_PTHREAD_H) create_plugin(protocol_deaddrop "" "deaddrop/protocol_lws_deaddrop.c" "" "") if (NOT LWS_WITH_PLUGINS_BUILTIN) target_compile_definitions(protocol_deaddrop PRIVATE LWS_BUILDING_SHARED) endif() endif() endif() if (LWS_WITH_SYS_METRICS) create_plugin(protocol_lws_openmetrics_export "" "protocol_lws_openmetrics_export.c" "" "") if (NOT LWS_WITH_PLUGINS_BUILTIN) target_compile_definitions(protocol_lws_openmetrics_export PRIVATE LWS_BUILDING_SHARED) endif() endif() if (NOT LWS_WITHOUT_CLIENT) create_plugin(protocol_client_loopback_test "" "protocol_client_loopback_test.c" "" "") if (NOT LWS_WITH_PLUGINS_BUILTIN) target_compile_definitions(protocol_client_loopback_test PRIVATE LWS_BUILDING_SHARED) endif() endif() endif(LWS_ROLE_WS) create_plugin(protocol_post_demo "" "protocol_post_demo.c" "" "") if (NOT LWS_WITH_PLUGINS_BUILTIN) target_compile_definitions(protocol_post_demo PRIVATE LWS_BUILDING_SHARED) endif() if (LWS_ROLE_RAW_PROXY) create_plugin(protocol_lws_raw_proxy "" "raw-proxy/protocol_lws_raw_proxy.c" "" "") if (NOT LWS_WITH_PLUGINS_BUILTIN) target_compile_definitions(protocol_lws_raw_proxy PRIVATE LWS_BUILDING_SHARED) endif() endif() if (LWS_WITH_FTS) create_plugin(protocol_fulltext_demo "" "protocol_fulltext_demo.c" "" "") if (NOT LWS_WITH_PLUGINS_BUILTIN) target_compile_definitions(protocol_fulltext_demo PRIVATE LWS_BUILDING_SHARED) endif() endif() if (LWS_WITH_SSL) create_plugin(protocol_lws_ssh_base "ssh-base/include" "ssh-base/sshd.c;ssh-base/telnet.c;ssh-base/kex-25519.c" "ssh-base/crypto/chacha.c;ssh-base/crypto/ed25519.c;ssh-base/crypto/fe25519.c;ssh-base/crypto/ge25519.c;ssh-base/crypto/poly1305.c;ssh-base/crypto/sc25519.c;ssh-base/crypto/smult_curve25519_ref.c" "") if (NOT LWS_WITH_PLUGINS_BUILTIN) target_compile_definitions(protocol_lws_ssh_base PRIVATE LWS_BUILDING_SHARED) endif() create_plugin(protocol_lws_sshd_demo "ssh-base/include" "protocol_lws_sshd_demo.c" "" "") if (NOT LWS_WITH_PLUGINS_BUILTIN) target_compile_definitions(protocol_lws_sshd_demo PRIVATE LWS_BUILDING_SHARED) endif() include_directories("${PROJECT_SOURCE_DIR}/plugins/ssh-base/include") endif() if (LWS_WITH_ACME) create_plugin(protocol_lws_acme_client "" "acme-client/protocol_lws_acme_client.c" "" "") if (NOT LWS_WITH_PLUGINS_BUILTIN) target_compile_definitions(protocol_lws_acme_client PRIVATE LWS_BUILDING_SHARED) endif() endif() endif((LWS_WITH_PLUGINS AND LWS_WITH_SHARED) OR LWS_WITH_PLUGINS_BUILTIN) # plugins if (LWS_WITH_PLUGINS AND NOT LWS_WITH_PLUGINS_BUILTIN) install(TARGETS ${PLUGINS_LIST} PERMISSIONS OWNER_WRITE OWNER_EXECUTE GROUP_EXECUTE WORLD_EXECUTE OWNER_READ GROUP_READ WORLD_READ DESTINATION share/libwebsockets-test-server/plugins COMPONENT plugins) if (NOT WIN32) install(FILES deaddrop/assets/index.html;deaddrop/assets/deaddrop.js;deaddrop/assets/deaddrop.css;deaddrop/assets/drop.svg DESTINATION share/libwebsockets-test-server/deaddrop COMPONENT plugins) endif() endif() export_to_parent_intermediate() libwebsockets-4.3.5/plugins/acme-client/000077500000000000000000000000001476025525100202345ustar00rootroot00000000000000libwebsockets-4.3.5/plugins/acme-client/protocol_lws_acme_client.c000066400000000000000000001153211476025525100254540ustar00rootroot00000000000000/* * libwebsockets ACME client protocol plugin * * Copyright (C) 2010 - 2022 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * This implementation follows draft 7 of the IETF standard, and falls back * to whatever differences exist for Boulder's tls-sni-01 challenge. * tls-sni-02 is also supported. */ #if !defined (LWS_PLUGIN_STATIC) #if !defined(LWS_DLL) #define LWS_DLL #endif #if !defined(LWS_INTERNAL) #define LWS_INTERNAL #endif #include #endif #include #include #include #include typedef enum { ACME_STATE_DIRECTORY, /* get the directory JSON using GET + parse */ ACME_STATE_NEW_NONCE, /* get the replay nonce */ ACME_STATE_NEW_ACCOUNT, /* register a new RSA key + email combo */ ACME_STATE_NEW_ORDER, /* start the process to request a cert */ ACME_STATE_AUTHZ, /* */ ACME_STATE_START_CHALL, /* notify server ready for one challenge */ ACME_STATE_POLLING, /* he should be trying our challenge */ ACME_STATE_POLLING_CSR, /* sent CSR, checking result */ ACME_STATE_DOWNLOAD_CERT, ACME_STATE_FINISHED } lws_acme_state; struct acme_connection { char buf[4096]; char replay_nonce[64]; char chall_token[64]; char challenge_uri[256]; char detail[64]; char status[16]; char key_auth[256]; char http01_mountpoint[256]; struct lws_http_mount mount; char urls[6][100]; /* directory contents */ char active_url[100]; char authz_url[100]; char order_url[100]; char finalize_url[100]; char cert_url[100]; char acct_id[100]; char *kid; lws_acme_state state; struct lws_client_connect_info i; struct lejp_ctx jctx; struct lws_context_creation_info ci; struct lws_vhost *vhost; struct lws *cwsi; const char *real_vh_name; const char *real_vh_iface; char *alloc_privkey_pem; char *dest; int pos; int len; int resp; int cpos; int real_vh_port; int goes_around; size_t len_privkey_pem; unsigned int yes; unsigned int use:1; unsigned int is_sni_02:1; }; struct per_vhost_data__lws_acme_client { struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; /* * the vhd is allocated for every vhost using the plugin. * But ac is only allocated when we are doing the server auth. */ struct acme_connection *ac; struct lws_jwk jwk; struct lws_genrsa_ctx rsactx; char *pvo_data; char *pvop[LWS_TLS_TOTAL_COUNT]; const char *pvop_active[LWS_TLS_TOTAL_COUNT]; int count_live_pss; char *dest; int pos; int len; int fd_updated_cert; /* these are opened while we have root... */ int fd_updated_key; /* ...if nonempty next startup will replace old */ }; static int callback_chall_http01(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct lws_vhost *vhost = lws_get_vhost(wsi); struct acme_connection *ac = lws_vhost_user(vhost); uint8_t buf[LWS_PRE + 2048], *start = &buf[LWS_PRE], *p = start, *end = &buf[sizeof(buf) - 1]; int n; switch (reason) { case LWS_CALLBACK_HTTP: lwsl_wsi_notice(wsi, "CA connection received, key_auth %s", ac->key_auth); if (lws_add_http_header_status(wsi, HTTP_STATUS_OK, &p, end)) { lwsl_wsi_warn(wsi, "add status failed"); return -1; } if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE, (unsigned char *)"text/plain", 10, &p, end)) { lwsl_wsi_warn(wsi, "add content_type failed"); return -1; } n = (int)strlen(ac->key_auth); if (lws_add_http_header_content_length(wsi, (lws_filepos_t)n, &p, end)) { lwsl_wsi_warn(wsi, "add content_length failed"); return -1; } if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_DISPOSITION, (unsigned char *)"attachment", 10, &p, end)) { lwsl_wsi_warn(wsi, "add content_dispo failed"); return -1; } if (lws_finalize_write_http_header(wsi, start, &p, end)) { lwsl_wsi_warn(wsi, "finalize http header failed"); return -1; } lws_callback_on_writable(wsi); return 0; case LWS_CALLBACK_HTTP_WRITEABLE: p += lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), "%s", ac->key_auth); // lwsl_notice("%s: len %d\n", __func__, lws_ptr_diff(p, start)); if (lws_write(wsi, (uint8_t *)start, lws_ptr_diff_size_t(p, start), LWS_WRITE_HTTP_FINAL) != lws_ptr_diff(p, start)) { lwsl_wsi_err(wsi, "_write content failed"); return 1; } if (lws_http_transaction_completed(wsi)) return -1; return 0; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static const struct lws_protocols chall_http01_protocols[] = { { "http", callback_chall_http01, 0, 0, 0, NULL, 0 }, { NULL, NULL, 0, 0, 0, NULL, 0 } }; static int jws_create_packet(struct lws_jwe *jwe, const char *payload, size_t len, const char *nonce, const char *url, const char *kid, char *out, size_t out_len, struct lws_context *context) { char *buf, *start, *p, *end, *p1, *end1; struct lws_jws jws; int n, m; lws_jws_init(&jws, &jwe->jwk, context); /* * This buffer is local to the function, the actual output is prepared * into out. Only the plaintext protected header * (which contains the public key, 512 bytes for 4096b) goes in * here temporarily. */ n = LWS_PRE + 2048; buf = malloc((unsigned int)n); if (!buf) { lwsl_warn("%s: malloc %d failed\n", __func__, n); return -1; } p = start = buf + LWS_PRE; end = buf + n - LWS_PRE - 1; /* * temporary JWS protected header plaintext */ if (!jwe->jose.alg || !jwe->jose.alg->alg) goto bail; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "{\"alg\":\"RS256\""); if (kid) p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), ",\"kid\":\"%s\"", kid); else { p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), ",\"jwk\":"); m = lws_ptr_diff(end, p); n = lws_jwk_export(&jwe->jwk, 0, p, &m); if (n < 0) { lwsl_notice("failed to export jwk\n"); goto bail; } p += n; } p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), ",\"url\":\"%s\"", url); p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), ",\"nonce\":\"%s\"}", nonce); /* * prepare the signed outer JSON with all the parts in */ p1 = out; end1 = out + out_len - 1; p1 += lws_snprintf(p1, lws_ptr_diff_size_t(end1, p1), "{\"protected\":\""); jws.map_b64.buf[LJWS_JOSE] = p1; n = lws_jws_base64_enc(start, lws_ptr_diff_size_t(p, start), p1, lws_ptr_diff_size_t(end1, p1)); if (n < 0) { lwsl_notice("%s: failed to encode protected\n", __func__); goto bail; } jws.map_b64.len[LJWS_JOSE] = (uint32_t)n; p1 += n; p1 += lws_snprintf(p1, lws_ptr_diff_size_t(end1, p1), "\",\"payload\":\""); jws.map_b64.buf[LJWS_PYLD] = p1; n = lws_jws_base64_enc(payload, len, p1, lws_ptr_diff_size_t(end1, p1)); if (n < 0) { lwsl_notice("%s: failed to encode payload\n", __func__); goto bail; } jws.map_b64.len[LJWS_PYLD] = (uint32_t)n; p1 += n; p1 += lws_snprintf(p1, lws_ptr_diff_size_t(end1, p1), "\",\"signature\":\""); /* * taking the b64 protected header and the b64 payload, sign them * and place the signature into the packet */ n = lws_jws_sign_from_b64(&jwe->jose, &jws, p1, lws_ptr_diff_size_t(end1, p1)); if (n < 0) { lwsl_notice("sig gen failed\n"); goto bail; } jws.map_b64.buf[LJWS_SIG] = p1; jws.map_b64.len[LJWS_SIG] = (uint32_t)n; p1 += n; p1 += lws_snprintf(p1, lws_ptr_diff_size_t(end1, p1), "\"}"); free(buf); return lws_ptr_diff(p1, out); bail: lws_jws_destroy(&jws); free(buf); return -1; } static int callback_acme_client(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len); #define LWS_PLUGIN_PROTOCOL_LWS_ACME_CLIENT \ { \ "lws-acme-client", \ callback_acme_client, \ 0, \ 512, \ 0, NULL, 0 \ } /* directory JSON parsing */ static const char * const jdir_tok[] = { "keyChange", "meta.termsOfService", "newAccount", "newNonce", "newOrder", "revokeCert", }; enum enum_jdir_tok { JAD_KEY_CHANGE_URL, JAD_TOS_URL, JAD_NEW_ACCOUNT_URL, JAD_NEW_NONCE_URL, JAD_NEW_ORDER_URL, JAD_REVOKE_CERT_URL, }; static signed char cb_dir(struct lejp_ctx *ctx, char reason) { struct per_vhost_data__lws_acme_client *s = (struct per_vhost_data__lws_acme_client *)ctx->user; if (reason == LEJPCB_VAL_STR_START && ctx->path_match) { s->pos = 0; s->len = sizeof(s->ac->urls[0]) - 1; s->dest = s->ac->urls[ctx->path_match - 1]; return 0; } if (!(reason & LEJP_FLAG_CB_IS_VALUE) || !ctx->path_match) return 0; if (s->pos + ctx->npos > s->len) { lwsl_notice("url too long\n"); return -1; } memcpy(s->dest + s->pos, ctx->buf, ctx->npos); s->pos += ctx->npos; s->dest[s->pos] = '\0'; return 0; } /* order JSON parsing */ static const char * const jorder_tok[] = { "status", "expires", "identifiers[].type", "identifiers[].value", "authorizations", "finalize", "certificate" }; enum enum_jorder_tok { JAO_STATUS, JAO_EXPIRES, JAO_IDENTIFIERS_TYPE, JAO_IDENTIFIERS_VALUE, JAO_AUTHORIZATIONS, JAO_FINALIZE, JAO_CERT }; static signed char cb_order(struct lejp_ctx *ctx, char reason) { struct acme_connection *s = (struct acme_connection *)ctx->user; if (reason == LEJPCB_CONSTRUCTED) s->authz_url[0] = '\0'; if (!(reason & LEJP_FLAG_CB_IS_VALUE) || !ctx->path_match) return 0; switch (ctx->path_match - 1) { case JAO_STATUS: lws_strncpy(s->status, ctx->buf, sizeof(s->status)); break; case JAO_EXPIRES: break; case JAO_IDENTIFIERS_TYPE: break; case JAO_IDENTIFIERS_VALUE: break; case JAO_AUTHORIZATIONS: lws_snprintf(s->authz_url, sizeof(s->authz_url), "%s", ctx->buf); break; case JAO_FINALIZE: lws_snprintf(s->finalize_url, sizeof(s->finalize_url), "%s", ctx->buf); break; case JAO_CERT: lws_snprintf(s->cert_url, sizeof(s->cert_url), "%s", ctx->buf); break; } return 0; } /* authz JSON parsing */ static const char * const jauthz_tok[] = { "identifier.type", "identifier.value", "status", "expires", "challenges[].type", "challenges[].status", "challenges[].url", "challenges[].token", "detail" }; enum enum_jauthz_tok { JAAZ_ID_TYPE, JAAZ_ID_VALUE, JAAZ_STATUS, JAAZ_EXPIRES, JAAZ_CHALLENGES_TYPE, JAAZ_CHALLENGES_STATUS, JAAZ_CHALLENGES_URL, JAAZ_CHALLENGES_TOKEN, JAAZ_DETAIL, }; static signed char cb_authz(struct lejp_ctx *ctx, char reason) { struct acme_connection *s = (struct acme_connection *)ctx->user; if (reason == LEJPCB_CONSTRUCTED) { s->yes = 0; s->use = 0; s->chall_token[0] = '\0'; } if (!(reason & LEJP_FLAG_CB_IS_VALUE) || !ctx->path_match) return 0; switch (ctx->path_match - 1) { case JAAZ_ID_TYPE: break; case JAAZ_ID_VALUE: break; case JAAZ_STATUS: break; case JAAZ_EXPIRES: break; case JAAZ_DETAIL: lws_snprintf(s->detail, sizeof(s->detail), "%s", ctx->buf); break; case JAAZ_CHALLENGES_TYPE: lwsl_notice("JAAZ_CHALLENGES_TYPE: %s\n", ctx->buf); s->use = !strcmp(ctx->buf, "http-01"); break; case JAAZ_CHALLENGES_STATUS: lws_strncpy(s->status, ctx->buf, sizeof(s->status)); break; case JAAZ_CHALLENGES_URL: lwsl_notice("JAAZ_CHALLENGES_URL: %s %d\n", ctx->buf, s->use); if (s->use) { lws_strncpy(s->challenge_uri, ctx->buf, sizeof(s->challenge_uri)); s->yes = s->yes | 2; } break; case JAAZ_CHALLENGES_TOKEN: lwsl_notice("JAAZ_CHALLENGES_TOKEN: %s %d\n", ctx->buf, s->use); if (s->use) { lws_strncpy(s->chall_token, ctx->buf, sizeof(s->chall_token)); s->yes = s->yes | 1; } break; } return 0; } /* challenge accepted JSON parsing */ static const char * const jchac_tok[] = { "type", "status", "uri", "token", "error.detail" }; enum enum_jchac_tok { JCAC_TYPE, JCAC_STATUS, JCAC_URI, JCAC_TOKEN, JCAC_DETAIL, }; static signed char cb_chac(struct lejp_ctx *ctx, char reason) { struct acme_connection *s = (struct acme_connection *)ctx->user; if (reason == LEJPCB_CONSTRUCTED) { s->yes = 0; s->use = 0; } if (!(reason & LEJP_FLAG_CB_IS_VALUE) || !ctx->path_match) return 0; switch (ctx->path_match - 1) { case JCAC_TYPE: if (strcmp(ctx->buf, "http-01")) return 1; break; case JCAC_STATUS: lws_strncpy(s->status, ctx->buf, sizeof(s->status)); break; case JCAC_URI: s->yes = s->yes | 2; break; case JCAC_TOKEN: lws_strncpy(s->chall_token, ctx->buf, sizeof(s->chall_token)); s->yes = s->yes | 1; break; case JCAC_DETAIL: lws_snprintf(s->detail, sizeof(s->detail), "%s", ctx->buf); break; } return 0; } static int lws_acme_report_status(struct lws_vhost *v, int state, const char *json) { lws_callback_vhost_protocols_vhost(v, LWS_CALLBACK_VHOST_CERT_UPDATE, (void *)json, (unsigned int)state); return 0; } /* * Notice: trashes i and url */ static struct lws * lws_acme_client_connect(struct lws_context *context, struct lws_vhost *vh, struct lws **pwsi, struct lws_client_connect_info *i, char *url, const char *method) { const char *prot, *p; char path[200], _url[256]; struct lws *wsi; memset(i, 0, sizeof(*i)); i->port = 443; lws_strncpy(_url, url, sizeof(_url)); if (lws_parse_uri(_url, &prot, &i->address, &i->port, &p)) { lwsl_err("unable to parse uri %s\n", url); return NULL; } /* add back the leading / on path */ path[0] = '/'; lws_strncpy(path + 1, p, sizeof(path) - 1); i->path = path; i->context = context; i->vhost = vh; i->ssl_connection = LCCSCF_USE_SSL; i->host = i->address; i->origin = i->address; i->method = method; i->pwsi = pwsi; i->protocol = "lws-acme-client"; wsi = lws_client_connect_via_info(i); if (!wsi) { lws_snprintf(path, sizeof(path) - 1, "Unable to connect to %s", url); lwsl_notice("%s: %s\n", __func__, path); lws_acme_report_status(vh, LWS_CUS_FAILED, path); } return wsi; } static void lws_acme_finished(struct per_vhost_data__lws_acme_client *vhd) { lwsl_notice("%s\n", __func__); if (vhd->ac) { if (vhd->ac->vhost) lws_vhost_destroy(vhd->ac->vhost); if (vhd->ac->alloc_privkey_pem) free(vhd->ac->alloc_privkey_pem); free(vhd->ac); } lws_genrsa_destroy(&vhd->rsactx); lws_jwk_destroy(&vhd->jwk); vhd->ac = NULL; #if defined(LWS_WITH_ESP32) lws_esp32.acme = 0; /* enable scanning */ #endif } static const char * const pvo_names[] = { "country", "state", "locality", "organization", "common-name", "subject-alt-name", "email", "directory-url", "auth-path", "cert-path", "key-path", }; static int lws_acme_load_create_auth_keys(struct per_vhost_data__lws_acme_client *vhd, int bits) { int n; if (!lws_jwk_load(&vhd->jwk, vhd->pvop[LWS_TLS_SET_AUTH_PATH], NULL, NULL)) return 0; vhd->jwk.kty = LWS_GENCRYPTO_KTY_RSA; lwsl_notice("Generating ACME %d-bit keypair... " "will take a little while\n", bits); n = lws_genrsa_new_keypair(vhd->context, &vhd->rsactx, LGRSAM_PKCS1_1_5, vhd->jwk.e, bits); if (n) { lwsl_vhost_warn(vhd->vhost, "failed to create keypair"); return 1; } lwsl_notice("...keypair generated\n"); if (lws_jwk_save(&vhd->jwk, vhd->pvop[LWS_TLS_SET_AUTH_PATH])) { lwsl_vhost_warn(vhd->vhost, "unable to save %s", vhd->pvop[LWS_TLS_SET_AUTH_PATH]); return 1; } return 0; } static int lws_acme_start_acquisition(struct per_vhost_data__lws_acme_client *vhd, struct lws_vhost *v) { char buf[128]; /* ...and we were given enough info to do the update? */ if (!vhd->pvop[LWS_TLS_REQ_ELEMENT_COMMON_NAME]) return -1; /* * ...well... we should try to do something about it then... */ lwsl_vhost_notice(vhd->vhost, "ACME cert needs creating / updating: " "vhost %s", lws_get_vhost_name(vhd->vhost)); vhd->ac = malloc(sizeof(*vhd->ac)); memset(vhd->ac, 0, sizeof(*vhd->ac)); /* * So if we don't have it, the first job is get the directory. * * If we already have the directory, jump straight into trying * to register our key. * * We always try to register the keys... if it's not the first * time, we will get a JSON body in the (legal, nonfatal) * response like this * * { * "type": "urn:acme:error:malformed", * "detail": "Registration key is already in use", * "status": 409 * } */ if (!vhd->ac->urls[0][0]) { vhd->ac->state = ACME_STATE_DIRECTORY; lws_snprintf(buf, sizeof(buf) - 1, "%s", vhd->pvop_active[LWS_TLS_SET_DIR_URL]); } else { vhd->ac->state = ACME_STATE_NEW_ACCOUNT; lws_snprintf(buf, sizeof(buf) - 1, "%s", vhd->ac->urls[JAD_NEW_ACCOUNT_URL]); } vhd->ac->real_vh_port = lws_get_vhost_port(vhd->vhost); vhd->ac->real_vh_name = lws_get_vhost_name(vhd->vhost); vhd->ac->real_vh_iface = lws_get_vhost_iface(vhd->vhost); lws_acme_report_status(vhd->vhost, LWS_CUS_STARTING, NULL); #if defined(LWS_WITH_ESP32) lws_acme_report_status(vhd->vhost, LWS_CUS_CREATE_KEYS, "Generating keys, please wait"); if (lws_acme_load_create_auth_keys(vhd, 2048)) goto bail; lws_acme_report_status(vhd->vhost, LWS_CUS_CREATE_KEYS, "Auth keys created"); #endif if (lws_acme_client_connect(vhd->context, vhd->vhost, &vhd->ac->cwsi, &vhd->ac->i, buf, "GET")) return 0; #if defined(LWS_WITH_ESP32) bail: #endif free(vhd->ac); vhd->ac = NULL; return 1; } static int callback_acme_client(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_vhost_data__lws_acme_client *vhd = (struct per_vhost_data__lws_acme_client *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); char buf[LWS_PRE + 2536], *start = buf + LWS_PRE, *p = start, *end = buf + sizeof(buf) - 1, digest[32], *failreason = NULL; const struct lws_protocol_vhost_options *pvo; struct lws_acme_cert_aging_args *caa; struct acme_connection *ac = NULL; unsigned char **pp, *pend; const char *content_type; struct lws_jwe jwe; struct lws *cwsi; int n, m; if (vhd) ac = vhd->ac; lws_jwe_init(&jwe, lws_get_context(wsi)); switch ((int)reason) { case LWS_CALLBACK_PROTOCOL_INIT: if (vhd) return 0; vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__lws_acme_client)); if (!vhd) return -1; vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); /* compute how much we need to hold all the pvo payloads */ m = 0; pvo = (const struct lws_protocol_vhost_options *)in; while (pvo) { m += (int)strlen(pvo->value) + 1; pvo = pvo->next; } p = vhd->pvo_data = malloc((unsigned int)m); if (!p) return -1; pvo = (const struct lws_protocol_vhost_options *)in; while (pvo) { start = p; n = (int)strlen(pvo->value) + 1; memcpy(start, pvo->value, (unsigned int)n); p += n; for (m = 0; m < (int)LWS_ARRAY_SIZE(pvo_names); m++) if (!strcmp(pvo->name, pvo_names[m])) vhd->pvop[m] = start; pvo = pvo->next; } n = 0; for (m = 0; m < (int)LWS_ARRAY_SIZE(pvo_names); m++) { if (!vhd->pvop[m] && m >= LWS_TLS_REQ_ELEMENT_COMMON_NAME && m != LWS_TLS_REQ_ELEMENT_SUBJECT_ALT_NAME) { lwsl_notice("%s: require pvo '%s'\n", __func__, pvo_names[m]); n |= 1; } else { if (vhd->pvop[m]) lwsl_info(" %s: %s\n", pvo_names[m], vhd->pvop[m]); } } if (n) { free(vhd->pvo_data); vhd->pvo_data = NULL; return -1; } #if !defined(LWS_WITH_ESP32) /* * load (or create) the registration keypair while we * still have root */ if (lws_acme_load_create_auth_keys(vhd, 4096)) return 1; /* * in case we do an update, open the update files while we * still have root */ lws_snprintf(buf, sizeof(buf) - 1, "%s.upd", vhd->pvop[LWS_TLS_SET_CERT_PATH]); vhd->fd_updated_cert = lws_open(buf, LWS_O_WRONLY | LWS_O_CREAT | LWS_O_TRUNC /*do not replace \n to \r\n on Windows */ #ifdef WIN32 | O_BINARY #endif , 0600); if (vhd->fd_updated_cert < 0) { lwsl_err("unable to create update cert file %s\n", buf); return -1; } lws_snprintf(buf, sizeof(buf) - 1, "%s.upd", vhd->pvop[LWS_TLS_SET_KEY_PATH]); vhd->fd_updated_key = lws_open(buf, LWS_O_WRONLY | LWS_O_CREAT | /*do not replace \n to \r\n on Windows */ #ifdef WIN32 O_BINARY | #endif LWS_O_TRUNC, 0600); if (vhd->fd_updated_key < 0) { lwsl_vhost_err(vhd->vhost, "unable to create update key file %s", buf); return -1; } #endif break; case LWS_CALLBACK_PROTOCOL_DESTROY: if (vhd && vhd->pvo_data) { free(vhd->pvo_data); vhd->pvo_data = NULL; } if (vhd) lws_acme_finished(vhd); break; case LWS_CALLBACK_VHOST_CERT_AGING: if (!vhd) break; caa = (struct lws_acme_cert_aging_args *)in; /* * Somebody is telling us about a cert some vhost is using. * * First see if the cert is getting close enough to expiry that * we *want* to do something about it. */ if ((int)(ssize_t)len > 14) break; /* * ...is this a vhost we were configured on? */ if (vhd->vhost != caa->vh) return 1; for (n = 0; n < (int)LWS_ARRAY_SIZE(vhd->pvop);n++) if (caa->element_overrides[n]) vhd->pvop_active[n] = caa->element_overrides[n]; else vhd->pvop_active[n] = vhd->pvop[n]; lwsl_notice("starting acme acquisition on %s: %s\n", lws_get_vhost_name(caa->vh), vhd->pvop_active[LWS_TLS_SET_DIR_URL]); lws_acme_start_acquisition(vhd, caa->vh); break; /* * Client */ case LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP: if (!ac) break; ac->resp = (int)lws_http_client_http_response(wsi); /* we get a new nonce each time */ if (lws_hdr_total_length(wsi, WSI_TOKEN_REPLAY_NONCE) && lws_hdr_copy(wsi, ac->replay_nonce, sizeof(ac->replay_nonce), WSI_TOKEN_REPLAY_NONCE) < 0) { lwsl_vhost_warn(vhd->vhost, "nonce too large"); goto failed; } switch (ac->state) { case ACME_STATE_DIRECTORY: lejp_construct(&ac->jctx, cb_dir, vhd, jdir_tok, LWS_ARRAY_SIZE(jdir_tok)); break; case ACME_STATE_NEW_NONCE: /* * we try to register our keys next. * It's OK if it ends up they're already registered, * this eliminates any gaps where we stored the key * but registration did not complete for some reason... */ ac->state = ACME_STATE_NEW_ACCOUNT; lws_acme_report_status(vhd->vhost, LWS_CUS_REG, NULL); strcpy(buf, ac->urls[JAD_NEW_ACCOUNT_URL]); cwsi = lws_acme_client_connect(vhd->context, vhd->vhost, &ac->cwsi, &ac->i, buf, "POST"); if (!cwsi) { lwsl_vhost_warn(vhd->vhost, "failed to connect to acme"); goto failed; } return -1; case ACME_STATE_NEW_ACCOUNT: if (!lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_LOCATION)) { lwsl_vhost_warn(vhd->vhost, "no Location"); goto failed; } if (lws_hdr_copy(wsi, ac->acct_id, sizeof(ac->acct_id), WSI_TOKEN_HTTP_LOCATION) < 0) { lwsl_vhost_warn(vhd->vhost, "Location too large"); goto failed; } ac->kid = ac->acct_id; lwsl_vhost_notice(vhd->vhost, "Location: %s", ac->acct_id); break; case ACME_STATE_NEW_ORDER: if (lws_hdr_copy(wsi, ac->order_url, sizeof(ac->order_url), WSI_TOKEN_HTTP_LOCATION) < 0) { lwsl_vhost_warn(vhd->vhost, "missing cert location"); goto failed; } lejp_construct(&ac->jctx, cb_order, ac, jorder_tok, LWS_ARRAY_SIZE(jorder_tok)); break; case ACME_STATE_AUTHZ: lejp_construct(&ac->jctx, cb_authz, ac, jauthz_tok, LWS_ARRAY_SIZE(jauthz_tok)); break; case ACME_STATE_START_CHALL: lejp_construct(&ac->jctx, cb_chac, ac, jchac_tok, LWS_ARRAY_SIZE(jchac_tok)); break; case ACME_STATE_POLLING: case ACME_STATE_POLLING_CSR: lejp_construct(&ac->jctx, cb_order, ac, jorder_tok, LWS_ARRAY_SIZE(jorder_tok)); break; case ACME_STATE_DOWNLOAD_CERT: ac->cpos = 0; break; default: break; } break; case LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER: if (!ac) break; switch (ac->state) { case ACME_STATE_DIRECTORY: case ACME_STATE_NEW_NONCE: break; case ACME_STATE_NEW_ACCOUNT: p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "{" "\"termsOfServiceAgreed\":true" ",\"contact\": [\"mailto:%s\"]}", vhd->pvop_active[LWS_TLS_REQ_ELEMENT_EMAIL]); strcpy(ac->active_url, ac->urls[JAD_NEW_ACCOUNT_URL]); pkt_add_hdrs: if (lws_gencrypto_jwe_alg_to_definition("RSA1_5", &jwe.jose.alg)) { ac->len = 0; lwsl_notice("%s: no RSA1_5\n", __func__); goto failed; } jwe.jwk = vhd->jwk; ac->len = jws_create_packet(&jwe, start, lws_ptr_diff_size_t(p, start), ac->replay_nonce, ac->active_url, ac->kid, &ac->buf[LWS_PRE], sizeof(ac->buf) - LWS_PRE, lws_get_context(wsi)); if (ac->len < 0) { ac->len = 0; lwsl_notice("jws_create_packet failed\n"); goto failed; } pp = (unsigned char **)in; pend = (*pp) + len; ac->pos = 0; content_type = "application/jose+json"; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE, (uint8_t *)content_type, 21, pp, pend)) { lwsl_vhost_warn(vhd->vhost, "could not add content type"); goto failed; } n = sprintf(buf, "%d", ac->len); if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH, (uint8_t *)buf, n, pp, pend)) { lwsl_vhost_warn(vhd->vhost, "could not add content length"); goto failed; } lws_client_http_body_pending(wsi, 1); lws_callback_on_writable(wsi); break; case ACME_STATE_NEW_ORDER: p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "{" "\"identifiers\":[{" "\"type\":\"dns\"," "\"value\":\"%s\"" "}]" "}", vhd->pvop_active[LWS_TLS_REQ_ELEMENT_COMMON_NAME]); strcpy(ac->active_url, ac->urls[JAD_NEW_ORDER_URL]); goto pkt_add_hdrs; case ACME_STATE_AUTHZ: strcpy(ac->active_url, ac->authz_url); goto pkt_add_hdrs; case ACME_STATE_START_CHALL: p = start; end = &buf[sizeof(buf) - 1]; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "{}"); strcpy(ac->active_url, ac->challenge_uri); goto pkt_add_hdrs; case ACME_STATE_POLLING: strcpy(ac->active_url, ac->order_url); goto pkt_add_hdrs; case ACME_STATE_POLLING_CSR: if (ac->goes_around) { strcpy(ac->active_url, ac->order_url); goto pkt_add_hdrs; } lwsl_vhost_notice(vhd->vhost, "Generating ACME CSR... may take a little while"); p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "{\"csr\":\""); n = lws_tls_acme_sni_csr_create(vhd->context, &vhd->pvop_active[0], (uint8_t *)p, lws_ptr_diff_size_t(end, p), &ac->alloc_privkey_pem, &ac->len_privkey_pem); if (n < 0) { lwsl_vhost_warn(vhd->vhost, "CSR generation failed"); goto failed; } p += n; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "\"}"); strcpy(ac->active_url, ac->finalize_url); goto pkt_add_hdrs; case ACME_STATE_DOWNLOAD_CERT: strcpy(ac->active_url, ac->cert_url); goto pkt_add_hdrs; break; default: break; } break; case LWS_CALLBACK_CLIENT_HTTP_WRITEABLE: if (!ac) break; if (ac->pos == ac->len) break; ac->buf[LWS_PRE + ac->len] = '\0'; if (lws_write(wsi, (uint8_t *)ac->buf + LWS_PRE, (size_t)ac->len, LWS_WRITE_HTTP_FINAL) < 0) return -1; ac->pos = ac->len; lws_client_http_body_pending(wsi, 0); break; /* chunked content */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ: if (!ac) return -1; switch (ac->state) { case ACME_STATE_POLLING_CSR: case ACME_STATE_POLLING: case ACME_STATE_START_CHALL: case ACME_STATE_AUTHZ: case ACME_STATE_NEW_ORDER: case ACME_STATE_DIRECTORY: m = lejp_parse(&ac->jctx, (uint8_t *)in, (int)len); if (m < 0 && m != LEJP_CONTINUE) { lwsl_notice("lejp parse failed %d\n", m); goto failed; } break; case ACME_STATE_NEW_ACCOUNT: break; case ACME_STATE_DOWNLOAD_CERT: /* * It should be the DER cert... * ACME 2.0 can send certs chain with 3 certs, store only first bytes */ if ((unsigned int)ac->cpos + len > sizeof(ac->buf)) len = sizeof(ac->buf) - (unsigned int)ac->cpos; if (len) { memcpy(&ac->buf[ac->cpos], in, len); ac->cpos += (int)len; } break; default: break; } break; /* unchunked content */ case LWS_CALLBACK_RECEIVE_CLIENT_HTTP: if (!ac) return -1; switch (ac->state) { default: { char buffer[2048 + LWS_PRE]; char *px = buffer + LWS_PRE; int lenx = sizeof(buffer) - LWS_PRE; if (lws_http_client_read(wsi, &px, &lenx) < 0) return -1; } break; } break; case LWS_CALLBACK_COMPLETED_CLIENT_HTTP: if (!ac) return -1; switch (ac->state) { case ACME_STATE_DIRECTORY: lejp_destruct(&ac->jctx); /* check dir validity */ for (n = 0; n < 6; n++) lwsl_notice(" %d: %s\n", n, ac->urls[n]); ac->state = ACME_STATE_NEW_NONCE; strcpy(buf, ac->urls[JAD_NEW_NONCE_URL]); cwsi = lws_acme_client_connect(vhd->context, vhd->vhost, &ac->cwsi, &ac->i, buf, "GET"); if (!cwsi) { lwsl_notice("%s: failed to connect to acme\n", __func__); goto failed; } return -1; /* close the completed client connection */ case ACME_STATE_NEW_ACCOUNT: if ((ac->resp >= 200 && ac->resp < 299) || ac->resp == 409) { /* * Our account already existed, or exists now. * */ ac->state = ACME_STATE_NEW_ORDER; strcpy(buf, ac->urls[JAD_NEW_ORDER_URL]); cwsi = lws_acme_client_connect(vhd->context, vhd->vhost, &ac->cwsi, &ac->i, buf, "POST"); if (!cwsi) lwsl_notice("%s: failed to connect\n", __func__); /* close the completed client connection */ return -1; } else { lwsl_notice("newAccount replied %d\n", ac->resp); goto failed; } return -1; /* close the completed client connection */ case ACME_STATE_NEW_ORDER: lejp_destruct(&ac->jctx); if (!ac->authz_url[0]) { lwsl_notice("no authz\n"); goto failed; } /* * Move on to requesting a cert auth. */ ac->state = ACME_STATE_AUTHZ; lws_acme_report_status(vhd->vhost, LWS_CUS_AUTH, NULL); strcpy(buf, ac->authz_url); cwsi = lws_acme_client_connect(vhd->context, vhd->vhost, &ac->cwsi, &ac->i, buf, "POST"); if (!cwsi) lwsl_notice("%s: failed to connect\n", __func__); return -1; /* close the completed client connection */ case ACME_STATE_AUTHZ: lejp_destruct(&ac->jctx); if (ac->resp / 100 == 4) { lws_snprintf(buf, sizeof(buf), "Auth failed: %s", ac->detail); failreason = buf; lwsl_vhost_warn(vhd->vhost, "auth failed"); goto failed; } lwsl_vhost_info(vhd->vhost, "chall: %s (%d)\n", ac->chall_token, ac->resp); if (!ac->chall_token[0]) { lwsl_vhost_warn(vhd->vhost, "no challenge"); goto failed; } ac->state = ACME_STATE_START_CHALL; lws_acme_report_status(vhd->vhost, LWS_CUS_CHALLENGE, NULL); memset(&ac->ci, 0, sizeof(ac->ci)); /* compute the key authorization */ p = ac->key_auth; end = p + sizeof(ac->key_auth) - 1; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "%s.", ac->chall_token); lws_jwk_rfc7638_fingerprint(&vhd->jwk, digest); n = lws_jws_base64_enc(digest, 32, p, lws_ptr_diff_size_t(end, p)); if (n < 0) goto failed; lwsl_vhost_notice(vhd->vhost, "key_auth: '%s'", ac->key_auth); lws_snprintf(ac->http01_mountpoint, sizeof(ac->http01_mountpoint), "/.well-known/acme-challenge/%s", ac->chall_token); memset(&ac->mount, 0, sizeof (struct lws_http_mount)); ac->mount.protocol = "http"; ac->mount.mountpoint = ac->http01_mountpoint; ac->mount.mountpoint_len = (unsigned char) strlen(ac->http01_mountpoint); ac->mount.origin_protocol = LWSMPRO_CALLBACK; ac->ci.mounts = &ac->mount; /* listen on the same port as the vhost that triggered us */ ac->ci.port = 80; /* make ourselves protocols[0] for the new vhost */ ac->ci.protocols = chall_http01_protocols; /* * vhost .user points to the ac associated with the * temporary vhost */ ac->ci.user = ac; ac->vhost = lws_create_vhost(lws_get_context(wsi), &ac->ci); if (!ac->vhost) goto failed; lwsl_vhost_notice(vhd->vhost, "challenge_uri %s", ac->challenge_uri); /* * The challenge-specific vhost is up... let the ACME * server know we are ready to roll... */ ac->goes_around = 0; cwsi = lws_acme_client_connect(vhd->context, vhd->vhost, &ac->cwsi, &ac->i, ac->challenge_uri, "POST"); if (!cwsi) { lwsl_vhost_warn(vhd->vhost, "Connect failed"); goto failed; } return -1; /* close the completed client connection */ case ACME_STATE_START_CHALL: lwsl_vhost_notice(vhd->vhost, "COMPLETED start chall: %s", ac->challenge_uri); poll_again: ac->state = ACME_STATE_POLLING; lws_acme_report_status(vhd->vhost, LWS_CUS_CHALLENGE, NULL); if (ac->goes_around++ == 200) { lwsl_notice("%s: too many chall retries\n", __func__); goto failed; } strcpy(buf, ac->order_url); cwsi = lws_acme_client_connect(vhd->context, vhd->vhost, &ac->cwsi, &ac->i, buf, "POST"); if (!cwsi) { lwsl_vhost_warn(vhd->vhost, "failed to connect to acme"); goto failed; } return -1; /* close the completed client connection */ case ACME_STATE_POLLING: if (ac->resp == 202 && strcmp(ac->status, "invalid") && strcmp(ac->status, "valid")) goto poll_again; if (!strcmp(ac->status, "pending")) goto poll_again; if (!strcmp(ac->status, "invalid")) { lwsl_vhost_warn(vhd->vhost, "Challenge failed"); lws_snprintf(buf, sizeof(buf), "Challenge Invalid: %s", ac->detail); failreason = buf; goto failed; } lwsl_vhost_notice(vhd->vhost, "ACME challenge passed"); /* * The challenge was validated... so delete the * temp vhost now its job is done */ if (ac->vhost) lws_vhost_destroy(ac->vhost); ac->vhost = NULL; /* * now our JWK is accepted as authorized to make * requests for the domain, next move is create the * CSR signed with the JWK, and send it to the ACME * server to request the actual certs. */ ac->state = ACME_STATE_POLLING_CSR; lws_acme_report_status(vhd->vhost, LWS_CUS_REQ, NULL); ac->goes_around = 0; strcpy(buf, ac->finalize_url); cwsi = lws_acme_client_connect(vhd->context, vhd->vhost, &ac->cwsi, &ac->i, buf, "POST"); if (!cwsi) { lwsl_vhost_warn(vhd->vhost, "Failed to connect to acme"); goto failed; } return -1; /* close the completed client connection */ case ACME_STATE_POLLING_CSR: if (ac->resp < 200 || ac->resp > 202) { lwsl_notice("CSR poll failed on resp %d\n", ac->resp); goto failed; } if (ac->resp != 200 || ac->cert_url[0] == '\0') { if (ac->goes_around++ == 200) { lwsl_vhost_warn(vhd->vhost, "Too many retries"); goto failed; } strcpy(buf, ac->order_url); cwsi = lws_acme_client_connect(vhd->context, vhd->vhost, &ac->cwsi, &ac->i, buf, "POST"); if (!cwsi) { lwsl_vhost_warn(vhd->vhost, "Failed to connect to acme"); goto failed; } /* close the completed client connection */ return -1; } ac->state = ACME_STATE_DOWNLOAD_CERT; strcpy(buf, ac->cert_url); cwsi = lws_acme_client_connect(vhd->context, vhd->vhost, &ac->cwsi, &ac->i, buf, "POST"); if (!cwsi) { lwsl_vhost_warn(vhd->vhost, "Failed to connect to acme"); goto failed; } return -1; case ACME_STATE_DOWNLOAD_CERT: if (ac->resp != 200) { lwsl_vhost_warn(vhd->vhost, "Download cert failed on resp %d", ac->resp); goto failed; } lwsl_vhost_notice(vhd->vhost, "The cert was sent.."); lws_acme_report_status(vhd->vhost, LWS_CUS_ISSUE, NULL); /* * That means we have the issued cert in * ac->buf, length in ac->cpos; and the key in * ac->alloc_privkey_pem, length in * ac->len_privkey_pem. * ACME 2.0 can send certs chain with 3 certs, we need save only first */ { char *end_cert = strstr(ac->buf, "END CERTIFICATE-----"); if (end_cert) { ac->cpos = (int)(lws_ptr_diff_size_t(end_cert, ac->buf) + sizeof("END CERTIFICATE-----") - 1); } else { ac->cpos = 0; lwsl_vhost_err(vhd->vhost, "Unable to find ACME cert!"); goto failed; } } n = lws_plat_write_cert(vhd->vhost, 0, vhd->fd_updated_cert, ac->buf, (size_t)ac->cpos); if (n) { lwsl_vhost_err(vhd->vhost, "unable to write ACME cert! %d", n); goto failed; } /* * don't close it... we may update the certs * again */ if (lws_plat_write_cert(vhd->vhost, 1, vhd->fd_updated_key, ac->alloc_privkey_pem, ac->len_privkey_pem)) { lwsl_vhost_err(vhd->vhost, "unable to write ACME key!"); goto failed; } /* * we have written the persistent copies */ lwsl_vhost_notice(vhd->vhost, "Updated certs written for %s " "to %s.upd and %s.upd", vhd->pvop_active[LWS_TLS_REQ_ELEMENT_COMMON_NAME], vhd->pvop_active[LWS_TLS_SET_CERT_PATH], vhd->pvop_active[LWS_TLS_SET_KEY_PATH]); /* notify lws there was a cert update */ if (lws_tls_cert_updated(vhd->context, vhd->pvop_active[LWS_TLS_SET_CERT_PATH], vhd->pvop_active[LWS_TLS_SET_KEY_PATH], ac->buf, (size_t)ac->cpos, ac->alloc_privkey_pem, ac->len_privkey_pem)) { lwsl_vhost_warn(vhd->vhost, "problem setting certs"); } lws_acme_finished(vhd); lws_acme_report_status(vhd->vhost, LWS_CUS_SUCCESS, NULL); return -1; default: break; } break; case LWS_CALLBACK_USER + 0xac33: if (!vhd) break; cwsi = lws_acme_client_connect(vhd->context, vhd->vhost, &ac->cwsi, &ac->i, ac->challenge_uri, "GET"); if (!cwsi) { lwsl_vhost_warn(vhd->vhost, "Failed to connect"); goto failed; } break; default: break; } return 0; failed: lwsl_vhost_warn(vhd->vhost, "Failed out"); lws_acme_report_status(vhd->vhost, LWS_CUS_FAILED, failreason); lws_acme_finished(vhd); return -1; } #if !defined (LWS_PLUGIN_STATIC) LWS_VISIBLE const struct lws_protocols lws_acme_client_protocols[] = { LWS_PLUGIN_PROTOCOL_LWS_ACME_CLIENT }; LWS_VISIBLE const lws_plugin_protocol_t protocol_lws_acme_client = { .hdr = { "acme client", "lws_protocol_plugin", LWS_BUILD_HASH, LWS_PLUGIN_API_MAGIC }, .protocols = lws_acme_client_protocols, .count_protocols = LWS_ARRAY_SIZE(lws_acme_client_protocols), .extensions = NULL, .count_extensions = 0, }; #endif libwebsockets-4.3.5/plugins/deaddrop/000077500000000000000000000000001476025525100176355ustar00rootroot00000000000000libwebsockets-4.3.5/plugins/deaddrop/README.md000066400000000000000000000055461476025525100211260ustar00rootroot00000000000000# Deaddrop: File upload and sharing plugin ## Building the plugin Just configure lws with `cmake .. -DLWS_WITH_PLUGINS=1` and build lws as normal. ## Configurable settings |pvo name|value meaning| |---|---| |upload-dir|A writeable directory where uploaded files will go| |max-size|Maximum individual file size in bytes| |basic-auth|Path to basic auth credential file so wss can also be protected| ## Required mounts To use deaddrop meaningfully, all the mounts and the ws protocol must be protected by basic auth. And to use basic auth securely, the connection must be protected from snooping by tls. 1) Set the basic-auth pvo to require valid credentials as described above 2) Protect your basic fileserving mount by the same basic auth file... this is used to serve index.html, the css etc. 3) Add a callback mount into "lws-deaddrop" protocol at "upload"... so if your URL for deaddrop is "/tools/share", this would be at "/tools/share/upload". It must also be protected by the basic auth file. 4) Add a fileserving mount at the url "get" (continuing the example above, it would be "/tools/share/get" whose origin matches the "upload-dir" pvo value you selected. This mount needs any additional mimtype mappings since it's where the uploaded files are shared from. ## Using with C See ./minimal-examples/http-server/minimal-example-http-server-deaddrop for how to use the plugin directly with C. ## Using with lwsws / lejp-conf As a plugin, you can configure the mounts and pvos per-vhost easily in JSON. All the snippets here The mountpoints would look something like this (added to vhost/mounts) ``` { "mountpoint": "/tools/share", "origin": "file:///var/www/deaddrop", "default": "index.html", "basic-auth": "/var/www/ba" }, { "mountpoint": "/tools/share/upload", "origin": "callback://lws-deaddrop", "basic-auth": "/var/www/ba" }, { "mountpoint": "/tools/share/get", "origin": "file:///var/cache/deaddrop-uploads", "basic-auth": "/var/www/ba", "extra-mimetypes": { ".bin": "application/octet-stream", ".ttf": "application/x-font-truetype", ".otf": "application/font-sfnt", ".zip": "application/zip", ".webm": "video/webm", ".romfs": "application/octet-stream", ".pdf": "application/pdf", ".odt": "application/vnd.oasis.opendocument.text", ".tgz": "application/x-gzip", ".tar.gz": "application/x-gzip" } } ``` This enables the plugin on the vhost, configures the pvos, and makes the wss serving also depend on having a valid basic auth credential. ``` "ws-protocols": [{ "lws-deaddrop": { "status": "ok", "upload-dir": "/var/cache/deaddrop-uploads", "max-size": "52428800", "basic-auth": "/var/www/ba" } }], ``` libwebsockets-4.3.5/plugins/deaddrop/assets/000077500000000000000000000000001476025525100211375ustar00rootroot00000000000000libwebsockets-4.3.5/plugins/deaddrop/assets/deaddrop.css000066400000000000000000000127351476025525100234430ustar00rootroot00000000000000.td { padding: 8px } .h1 { } .dd-fileinfo { font-size: 8pt; } table td { display: table-cell; vertical-align: top; background-color: rgba(247, 247, 232, 0.6); text-align: center } table { border: 2px solid #ccc; padding: 4px; border-radius: 12px; transition: background-color 0.5s ease; } table.nb { border: 0px; border-radius: 0px; transition: opacity 0.5s; } table.noconn { background-color: #ddd; } div { transition: opacity 0.5s; } div.da { padding-left: 20px; padding-right:20px; } div.trot { animation: scale 0.5s linear infinite; } div.uplbox { padding-bottom: 8px; } div.disa { opacity: 0.2; } td.ogn { text-align:left; font-size: 8pt; padding-left: 4px; padding-right: 4px;} td.dow { text-align:left; font-size: 9pt; padding-left: 4px; padding-right: 4px;} td.r { text-align: right; } td.err { color: red; font-weight: bold; } td.vm { display: table-cell; vertical-align: middle; padding-top: 12px; padding-bottom: 12px; } h3 { font-size: 12pt; margin-bottom: 6px; } span { font-size: 9pt; } a { font-size: 9pt; } input.ubtn { font-size: 16pt; margin-top: 4px; text-align: center } img.working { display: inline-block; float:left; background: url("data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKICAgICB3aWR0aD0iMjRweCIgaGVpZ2h0PSIzMHB4IiB2aWV3Qm94PSIwIDAgMjQgMzAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDUwIDUwOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CiAgICA8cmVjdCB4PSIwIiB5PSIxMCIgd2lkdGg9IjQiIGhlaWdodD0iMTAiIGZpbGw9IiMzMzMiIG9wYWNpdHk9IjAuMiI+CiAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9Im9wYWNpdHkiIGF0dHJpYnV0ZVR5cGU9IlhNTCIgdmFsdWVzPSIwLjI7IDE7IC4yIiBiZWdpbj0iMHMiIGR1cj0iMC42cyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIC8+CiAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImhlaWdodCIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjEwOyAyMDsgMTAiIGJlZ2luPSIwcyIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ieSIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjEwOyA1OyAxMCIgYmVnaW49IjBzIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogICAgPC9yZWN0PgogICAgPHJlY3QgeD0iOCIgeT0iMTAiIHdpZHRoPSI0IiBoZWlnaHQ9IjEwIiBmaWxsPSIjMzMzIiAgb3BhY2l0eT0iMC4yIj4KICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ib3BhY2l0eSIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjAuMjsgMTsgLjIiIGJlZ2luPSIwLjE1cyIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iaGVpZ2h0IiBhdHRyaWJ1dGVUeXBlPSJYTUwiIHZhbHVlcz0iMTA7IDIwOyAxMCIgYmVnaW49IjAuMTVzIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogICAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJ5IiBhdHRyaWJ1dGVUeXBlPSJYTUwiIHZhbHVlcz0iMTA7IDU7IDEwIiBiZWdpbj0iMC4xNXMiIGR1cj0iMC42cyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIC8+CiAgICA8L3JlY3Q+CiAgICA8cmVjdCB4PSIxNiIgeT0iMTAiIHdpZHRoPSI0IiBoZWlnaHQ9IjEwIiBmaWxsPSIjMzMzIiAgb3BhY2l0eT0iMC4yIj4KICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ib3BhY2l0eSIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjAuMjsgMTsgLjIiIGJlZ2luPSIwLjNzIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogICAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJoZWlnaHQiIGF0dHJpYnV0ZVR5cGU9IlhNTCIgdmFsdWVzPSIxMDsgMjA7IDEwIiBiZWdpbj0iMC4zcyIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ieSIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjEwOyA1OyAxMCIgYmVnaW49IjAuM3MiIGR1cj0iMC42cyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIC8+CiAgICA8L3JlY3Q+Cjwvc3ZnPg=="); width:0px; height:0px; cursor:pointer; padding:0.6em 1em; background-repeat: no-repeat; vertical-align:middle; color: rgba(0, 0, 0, 0); } img.delbtn { display: inline-block; float:left; background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzNC4yMTcxMzMgMzQuMTQ0MjQ5IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KCTxkZWZzPgoJCTxyYWRpYWxHcmFkaWVudCBpZD0iYSIgY3g9IjEzNTguNSIgY3k9Ijk3Ny43MiIgcj0iNC4xMTYiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS41MDM1IDAgMCAyLjQ5NDQgLTI1NzcuNCAtMTgyMy44KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCQk8c3RvcCBzdG9wLWNvbG9yPSIjZmZmIiBvZmZzZXQ9IjAiLz4KCQkJPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZiIgc3RvcC1vcGFjaXR5PSIwIiBvZmZzZXQ9IjEiLz4KCQk8L3JhZGlhbEdyYWRpZW50PgoJCTxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjEzNjYuMyIgeDI9IjEzNDQuOCIgeTE9Ijk3OC4xOSIgeTI9Ijk1OC43MyIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgtMjE3NCAtMTA3Ni4xKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCQk8c3RvcCBzdG9wLWNvbG9yPSIjOWM5NzlkIiBvZmZzZXQ9IjAiLz4KCQkJPHN0b3Agc3RvcC1jb2xvcj0iI2Y0ZmVmMyIgc3RvcC1vcGFjaXR5PSIuNzQwMTYiIG9mZnNldD0iMSIvPgoJCTwvbGluZWFyR3JhZGllbnQ+Cgk8L2RlZnM+Cgk8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4MzQuMjkgMTIzLjc1KSI+CgkJPGcgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj4KCQkJPGNpcmNsZSBjeD0iLTgxNy4yMiIgY3k9Ii0xMDYuNjgiIHI9IjE2LjA5IiBmaWxsPSJ1cmwoI2IpIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS45NjUiLz4KCQkJPHBhdGggZD0ibS04MjUuNjctMTE0LjcxYzE3LjMzIDE3LjMzIDE3IDE2Ljk5OSAxNyAxNi45OTkiIGZpbGw9IiNmNTUiIHN0cm9rZT0iI2EwMCIgc3Ryb2tlLXdpZHRoPSIxLjY2NSIvPgoJCQk8cGF0aCBkPSJtLTgwOC45Ni0xMTQuNjFjLTE3LjMzIDE3LjMzLTE3IDE2Ljk5OS0xNyAxNi45OTkiIGZpbGw9IiNmNTUiIHN0cm9rZT0iI2EwMCIgc3Ryb2tlLXdpZHRoPSIxLjY2NSIvPgoJCTwvZz4KCQk8ZWxsaXBzZSB0cmFuc2Zvcm09InJvdGF0ZSg1NS44ODUpIiBjeD0iLTUzNC45NiIgY3k9IjYxNS4wNyIgcng9IjYuMTg4MyIgcnk9IjEwLjI2NyIgZmlsbD0idXJsKCNhKSIvPgoJPC9nPgo8L3N2Zz4="); width:0px; height:0px; cursor:pointer; padding:0.45em; background-repeat: no-repeat; vertical-align:middle; color: rgba(0, 0, 0, 0); } @keyframes scale { 50% { opacity: 0.5; transform:scale(1.1) rotate(2deg); } } libwebsockets-4.3.5/plugins/deaddrop/assets/deaddrop.js000066400000000000000000000144501476025525100232630ustar00rootroot00000000000000(function() { var server_max_size = 0, ws; function san(s) { if (!s) return ""; return s.replace(/&/g, "&"). replace(/\/g, ">"). replace(/\"/g, """). replace(/%/g, "%"); } function lws_urlencode(s) { return encodeURI(s).replace(/@/g, "%40"); } function trim(num) { var s = num.toString(); if (!s.indexOf(".")) return s; while (s.length && s[s.length - 1] === "0") s = s.substring(0, s.length - 1); if (s[s.length - 1] === ".") s = s.substring(0, s.length - 1); return s; } function humanize(n) { if (n < 1024) return n + "B"; if (n < 1024 * 1024) return trim((n / 1024).toFixed(2)) + "KiB"; if (n < 1024 * 1024 * 1024) return trim((n / (1024 * 1024)).toFixed(2)) + "MiB"; return trim((n / (1024 * 1024 * 1024)).toFixed(2)) + "GiB"; } function da_enter(e) { var da = document.getElementById("da"); e.preventDefault(); da.classList.add("trot"); } function da_leave(e) { var da = document.getElementById("da"); e.preventDefault(); da.classList.remove("trot"); } function da_over(e) { var da = document.getElementById("da"); e.preventDefault(); da.classList.add("trot"); } function clear_errors() { var n, t = document.getElementById("ongoing"); for (n = 0; n < t.rows.length; n++) if (t.rows[n].cells[0].classList.contains("err")) t.deleteRow(n); } function do_upload(file) { var formData = new FormData(); var t = document.getElementById("ongoing"); formData.append("file", file); var row = t.insertRow(0), c1 = row.insertCell(0), c2 = row.insertCell(1), c3 = row.insertCell(2); c1.classList.add("ogn"); c1.classList.add("r"); if (file.size > server_max_size) { c1.innerHTML = "Too Large"; c1.classList.add("err"); } else c1.innerHTML = ""; c2.classList.add("ogn"); c2.classList.add("r"); c2.innerHTML = humanize(file.size); c3.classList.add("ogn"); c3.innerHTML = file.name; if (file.size > server_max_size) return; fetch("upload/" + lws_urlencode(file.name), { method: "POST", body: formData }) .then((e) => { /* this just means we got a response code */ var us = e.url.split("/"), ul = us[us.length - 1], n; for (n = 0; n < t.rows.length; n++) if (ul === lws_urlencode( t.rows[n].cells[2].textContent)) { if (e.ok === true) { t.deleteRow(n); } else { t.rows[n].cells[0].textContent = "Failed " + san(e.status.toString()); t.rows[n].cells[0]. classList.add("err"); } break; } }) .catch((e) => { var us = e.url.split("/"), ul = us[us.length - 1], n; for (n = 0; n < t.rows.length; n++) if (ul === lws_urlencode( t.rows[n].cells[2].textContent)) { t.rows[n].cells[0] = "FAIL"; break; } }); } function da_drop(e) { var da = document.getElementById("da"); e.preventDefault(); da.classList.remove("trot"); clear_errors(); ([...e.dataTransfer.files]).forEach(do_upload); } function upl_button(e) { var fi = document.getElementById("file"); clear_errors(); e.preventDefault(); ([...fi.files]).forEach(do_upload); } function body_drop(e) { e.preventDefault(); } function inp() { var fi = document.getElementById("file"), upl = document.getElementById("upl"); console.log("inp"); upl.disabled = !fi.files.length; } function delfile(e) { e.stopPropagation(); e.preventDefault(); ws.send("{\"del\":\"" + decodeURI(e.target.getAttribute("file")) + "\"}"); } function get_appropriate_ws_url(extra_url) { var pcol; var u = document.URL; /* * We open the websocket encrypted if this page came on an * https:// url itself, otherwise unencrypted */ if (u.substring(0, 5) === "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) === "http") u = u.substr(7); } u = u.split("/"); /* + "/xxx" bit is for IE10 workaround */ return pcol + u[0] + "/" + extra_url; } function new_ws(urlpath, protocol) { return new WebSocket(urlpath, protocol); } document.addEventListener("DOMContentLoaded", function() { var da = document.getElementById("da"), fi = document.getElementById("file"), upl = document.getElementById("upl"); da.addEventListener("dragenter", da_enter, false); da.addEventListener("dragleave", da_leave, false); da.addEventListener("dragover", da_over, false); da.addEventListener("drop", da_drop, false); upl.addEventListener("click", upl_button, false); fi.addEventListener("change", inp, false); window.addEventListener("dragover", body_drop, false); window.addEventListener("drop", body_drop, false); ws = new_ws(get_appropriate_ws_url(""), "lws-deaddrop"); try { ws.onopen = function() { var dd = document.getElementById("ddrop"), da = document.getElementById("da"); dd.classList.remove("noconn"); da.classList.remove("disa"); }; ws.onmessage = function got_packet(msg) { var j = JSON.parse(msg.data), s = "", n, t = document.getElementById("dd-list"); server_max_size = j.max_size; document.getElementById("size").innerHTML = "Server maximum file size " + humanize(j.max_size); s += ""; for (n = 0; n < j.files.length; n++) { var date = new Date(j.files[n].mtime * 1000); s += ""; } s += "
    " + humanize(j.files[n].size) + "" + date.toDateString() + " " + date.toLocaleTimeString() + ""; if (j.files[n].yours === 1) s += ""; else s += " "; s += "" + san(j.files[n].name) + "
    "; t.innerHTML = s; for (n = 0; n < j.files.length; n++) { var d = document.getElementById("d" + n); if (d) d.addEventListener("click", delfile, false); } }; ws.onclose = function() { var dd = document.getElementById("ddrop"), da = document.getElementById("da"); dd.classList.add("noconn"); da.classList.add("disa"); }; } catch(exception) { alert("

    Error " + exception); } }); }()); libwebsockets-4.3.5/plugins/deaddrop/assets/drop.svg000066400000000000000000000463171476025525100226370ustar00rootroot00000000000000 libwebsockets-4.3.5/plugins/deaddrop/assets/index.html000066400000000000000000000017351476025525100231420ustar00rootroot00000000000000

    LWS Deaddrop

    ...or select files to upload:



    libwebsockets-4.3.5/plugins/deaddrop/protocol_lws_deaddrop.c000066400000000000000000000413751476025525100244030ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2020 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #if !defined (LWS_PLUGIN_STATIC) #if !defined(LWS_DLL) #define LWS_DLL #endif #if !defined(LWS_INTERNAL) #define LWS_INTERNAL #endif #include #endif #include #include #include #include #include #include #ifdef WIN32 #include #endif #include #include struct dir_entry { lws_list_ptr next; /* sorted by mtime */ char user[32]; unsigned long long size; time_t mtime; }; /* filename follows */ #define lp_to_dir_entry(p, _n) lws_list_ptr_container(p, struct dir_entry, _n) struct pss_deaddrop; struct vhd_deaddrop { struct lws_context *context; struct lws_vhost *vh; const struct lws_protocols *protocol; struct pss_deaddrop *pss_head; const char *upload_dir; struct lwsac *lwsac_head; struct dir_entry *dire_head; int filelist_version; unsigned long long max_size; }; struct pss_deaddrop { struct lws_spa *spa; struct vhd_deaddrop *vhd; struct lws *wsi; char result[LWS_PRE + LWS_RECOMMENDED_MIN_HEADER_SPACE]; char filename[256]; char user[32]; unsigned long long file_length; lws_filefd_type fd; int response_code; struct pss_deaddrop *pss_list; struct lwsac *lwsac_head; struct dir_entry *dire; int filelist_version; uint8_t completed:1; uint8_t sent_headers:1; uint8_t sent_body:1; uint8_t first:1; }; static const char * const param_names[] = { "text", "send", "file", "upload", }; enum enum_param_names { EPN_TEXT, EPN_SEND, EPN_FILE, EPN_UPLOAD, }; static int de_mtime_sort(lws_list_ptr a, lws_list_ptr b) { struct dir_entry *p1 = lp_to_dir_entry(a, next), *p2 = lp_to_dir_entry(b, next); return (int)(p2->mtime - p1->mtime); } static void start_sending_dir(struct pss_deaddrop *pss) { if (pss->vhd->lwsac_head) lwsac_reference(pss->vhd->lwsac_head); pss->lwsac_head = pss->vhd->lwsac_head; pss->dire = pss->vhd->dire_head; pss->filelist_version = pss->vhd->filelist_version; pss->first = 1; } static int scan_upload_dir(struct vhd_deaddrop *vhd) { char filepath[256], subdir[3][128], *p; struct lwsac *lwsac_head = NULL; lws_list_ptr sorted_head = NULL; int i, sp = 0, found = 0; struct dir_entry *dire; struct dirent *de; size_t initial, m; struct stat s; DIR *dir[3]; initial = strlen(vhd->upload_dir) + 1; lws_strncpy(subdir[sp], vhd->upload_dir, sizeof(subdir[sp])); dir[sp] = opendir(vhd->upload_dir); if (!dir[sp]) { lwsl_err("%s: Unable to walk upload dir '%s'\n", __func__, vhd->upload_dir); return -1; } do { de = readdir(dir[sp]); if (!de) { closedir(dir[sp]); #if !defined(__COVERITY__) if (!sp) #endif break; #if !defined(__COVERITY__) sp--; continue; #endif } p = filepath; for (i = 0; i <= sp; i++) p += lws_snprintf(p, lws_ptr_diff_size_t((filepath + sizeof(filepath)), p), "%s/", subdir[i]); lws_snprintf(p, lws_ptr_diff_size_t((filepath + sizeof(filepath)), p), "%s", de->d_name); /* ignore temp files */ if (de->d_name[strlen(de->d_name) - 1] == '~') continue; #if defined(__COVERITY__) s.st_size = 0; s.st_mtime = 0; #else /* coverity[toctou] */ if (stat(filepath, &s)) continue; if (S_ISDIR(s.st_mode)) { if (!strcmp(de->d_name, ".") || !strcmp(de->d_name, "..")) continue; sp++; if (sp == LWS_ARRAY_SIZE(dir)) { lwsl_err("%s: Skipping too-deep subdir %s\n", __func__, filepath); sp--; continue; } lws_strncpy(subdir[sp], de->d_name, sizeof(subdir[sp])); dir[sp] = opendir(filepath); if (!dir[sp]) { lwsl_err("%s: Unable to open subdir '%s'\n", __func__, filepath); goto bail; } continue; } #endif m = strlen(filepath + initial) + 1; dire = lwsac_use(&lwsac_head, sizeof(*dire) + m, 0); if (!dire) { lwsac_free(&lwsac_head); goto bail; } dire->next = NULL; dire->size = (unsigned long long)s.st_size; dire->mtime = s.st_mtime; dire->user[0] = '\0'; #if !defined(__COVERITY__) if (sp) lws_strncpy(dire->user, subdir[1], sizeof(dire->user)); #endif found++; memcpy(&dire[1], filepath + initial, m); lws_list_ptr_insert(&sorted_head, &dire->next, de_mtime_sort); } while (1); /* the old lwsac continues to live while someone else is consuming it */ if (vhd->lwsac_head) lwsac_detach(&vhd->lwsac_head); /* we replace it with the fresh one */ vhd->lwsac_head = lwsac_head; if (sorted_head) vhd->dire_head = lp_to_dir_entry(sorted_head, next); else vhd->dire_head = NULL; vhd->filelist_version++; lwsl_info("%s: found %d\n", __func__, found); lws_start_foreach_llp(struct pss_deaddrop **, ppss, vhd->pss_head) { start_sending_dir(*ppss); lws_callback_on_writable((*ppss)->wsi); } lws_end_foreach_llp(ppss, pss_list); return 0; bail: while (sp >= 0) closedir(dir[sp--]); return -1; } static int file_upload_cb(void *data, const char *name, const char *filename, char *buf, int _len, enum lws_spa_fileupload_states state) { struct pss_deaddrop *pss = (struct pss_deaddrop *)data; char filename2[256]; size_t len = (size_t)_len; int n; (void)n; switch (state) { case LWS_UFS_OPEN: lws_urldecode(filename2, filename, sizeof(filename2) - 1); lws_filename_purify_inplace(filename2); if (pss->user[0]) { lws_filename_purify_inplace(pss->user); lws_snprintf(pss->filename, sizeof(pss->filename), "%s/%s", pss->vhd->upload_dir, pss->user); if (mkdir(pss->filename #if !defined(WIN32) , 0700 #endif ) < 0) lwsl_debug("%s: mkdir failed\n", __func__); lws_snprintf(pss->filename, sizeof(pss->filename), "%s/%s/%s~", pss->vhd->upload_dir, pss->user, filename2); } else lws_snprintf(pss->filename, sizeof(pss->filename), "%s/%s~", pss->vhd->upload_dir, filename2); lwsl_notice("%s: filename '%s'\n", __func__, pss->filename); pss->fd = (lws_filefd_type)(long long)lws_open(pss->filename, O_CREAT | O_TRUNC | O_RDWR, 0600); if (pss->fd == LWS_INVALID_FILE) { pss->response_code = HTTP_STATUS_INTERNAL_SERVER_ERROR; lwsl_err("%s: unable to open %s (errno %d)\n", __func__, pss->filename, errno); return -1; } break; case LWS_UFS_FINAL_CONTENT: case LWS_UFS_CONTENT: if (len) { pss->file_length += (unsigned int)len; /* if the file length is too big, drop it */ if (pss->file_length > pss->vhd->max_size) { pss->response_code = HTTP_STATUS_REQ_ENTITY_TOO_LARGE; close((int)(lws_intptr_t)pss->fd); pss->fd = LWS_INVALID_FILE; unlink(pss->filename); return -1; } if (pss->fd != LWS_INVALID_FILE) { n = (int)write((int)(lws_intptr_t)pss->fd, buf, (unsigned int)len); lwsl_debug("%s: write %d says %d\n", __func__, (int)len, n); lws_set_timeout(pss->wsi, PENDING_TIMEOUT_HTTP_CONTENT, 30); } } if (state == LWS_UFS_CONTENT) break; if (pss->fd != LWS_INVALID_FILE) close((int)(lws_intptr_t)pss->fd); /* the temp filename without the ~ */ lws_strncpy(filename2, pss->filename, sizeof(filename2)); filename2[strlen(filename2) - 1] = '\0'; if (rename(pss->filename, filename2) < 0) lwsl_err("%s: unable to rename\n", __func__); pss->fd = LWS_INVALID_FILE; pss->response_code = HTTP_STATUS_OK; scan_upload_dir(pss->vhd); break; case LWS_UFS_CLOSE: break; } return 0; } /* * returns length in bytes */ static int format_result(struct pss_deaddrop *pss) { unsigned char *p, *start, *end; p = (unsigned char *)pss->result + LWS_PRE; start = p; end = p + sizeof(pss->result) - LWS_PRE - 1; p += lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), "" "" ""); p += lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), ""); return (int)lws_ptr_diff(p, start); } static int callback_deaddrop(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct vhd_deaddrop *vhd = (struct vhd_deaddrop *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); struct pss_deaddrop *pss = (struct pss_deaddrop *)user; uint8_t buf[LWS_PRE + LWS_RECOMMENDED_MIN_HEADER_SPACE], *start = &buf[LWS_PRE], *p = start, *end = &buf[sizeof(buf) - 1]; char fname[256], *wp; const char *cp; int n, m, was; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: /* per vhost */ lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct vhd_deaddrop)); vhd = (struct vhd_deaddrop *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); if (!vhd) return 0; vhd->context = lws_get_context(wsi); vhd->vh = lws_get_vhost(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->max_size = 20 * 1024 * 1024; /* default without pvo */ if (!lws_pvo_get_str(in, "max-size", &cp)) vhd->max_size = (unsigned long long)atoll(cp); if (lws_pvo_get_str(in, "upload-dir", &vhd->upload_dir)) { lwsl_warn("%s: requires 'upload-dir' pvo\n", __func__); return 0; } scan_upload_dir(vhd); lwsl_notice(" deaddrop: vh %s, upload dir %s, max size %llu\n", lws_get_vhost_name(vhd->vh), vhd->upload_dir, vhd->max_size); break; case LWS_CALLBACK_PROTOCOL_DESTROY: if (vhd) lwsac_free(&vhd->lwsac_head); break; /* WS-related */ case LWS_CALLBACK_ESTABLISHED: pss->vhd = vhd; pss->wsi = wsi; /* add ourselves to the list of live pss held in the vhd */ pss->pss_list = vhd->pss_head; vhd->pss_head = pss; m = lws_hdr_copy(wsi, pss->user, sizeof(pss->user), WSI_TOKEN_HTTP_AUTHORIZATION); if (m > 0) lwsl_info("%s: basic auth user: %s\n", __func__, pss->user); else pss->user[0] = '\0'; start_sending_dir(pss); lws_callback_on_writable(wsi); return 0; case LWS_CALLBACK_CLOSED: if (pss->lwsac_head) lwsac_unreference(&pss->lwsac_head); /* remove our closing pss from the list of live pss */ lws_start_foreach_llp(struct pss_deaddrop **, ppss, vhd->pss_head) { if (*ppss == pss) { *ppss = pss->pss_list; break; } } lws_end_foreach_llp(ppss, pss_list); return 0; case LWS_CALLBACK_RECEIVE: /* we get this kind of thing {"del":"agreen/no-entry.svg"} */ if (!pss || len < 10) break; if (strncmp((const char *)in, "{\"del\":\"", 8)) break; cp = strchr((const char *)in, '/'); if (cp) { n = (int)(((void *)cp - in)) - 8; if ((int)strlen(pss->user) != n || memcmp(pss->user, ((const char *)in) + 8, (unsigned int)n)) { lwsl_notice("%s: del: auth mismatch " " '%s' '%s' (%d)\n", __func__, pss->user, ((const char *)in) + 8, n); break; } } lws_strncpy(fname, ((const char *)in) + 8, sizeof(fname)); lws_filename_purify_inplace(fname); wp = strchr((const char *)fname, '\"'); if (wp) *wp = '\0'; lws_snprintf((char *)buf, sizeof(buf), "%s/%s", vhd->upload_dir, fname); lwsl_notice("%s: del: path %s\n", __func__, (const char *)buf); if (unlink((const char *)buf) < 0) lwsl_err("%s: unlink %s failed\n", __func__, (const char *)buf); scan_upload_dir(vhd); break; case LWS_CALLBACK_SERVER_WRITEABLE: if (pss->lwsac_head && !pss->dire) return 0; was = 0; if (pss->first) { p += lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), "{\"max_size\":%llu, \"files\": [", vhd->max_size); was = 1; } m = 5; while (m-- && pss->dire) { p += lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), "%c{\"name\":\"%s\", " "\"size\":%llu," "\"mtime\":%llu," "\"yours\":%d}", pss->first ? ' ' : ',', (const char *)&pss->dire[1], pss->dire->size, (unsigned long long)pss->dire->mtime, !strcmp(pss->user, pss->dire->user) && pss->user[0]); pss->first = 0; pss->dire = lp_to_dir_entry(pss->dire->next, next); } if (!pss->dire) { p += lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), "]}"); if (pss->lwsac_head) { lwsac_unreference(&pss->lwsac_head); pss->lwsac_head = NULL; } } n = lws_write(wsi, start, lws_ptr_diff_size_t(p, start), (enum lws_write_protocol)lws_write_ws_flags(LWS_WRITE_TEXT, was, !pss->dire)); if (n < 0) { lwsl_notice("%s: ws write failed\n", __func__); return 1; } if (pss->dire) { lws_callback_on_writable(wsi); return 0; } /* ie, we finished */ if (pss->filelist_version != pss->vhd->filelist_version) { lwsl_info("%s: restart send\n", __func__); /* what we just sent is already out of date */ start_sending_dir(pss); lws_callback_on_writable(wsi); } return 0; /* POST-related */ case LWS_CALLBACK_HTTP_BODY: /* create the POST argument parser if not already existing */ if (!pss->spa) { pss->vhd = vhd; pss->wsi = wsi; pss->spa = lws_spa_create(wsi, param_names, LWS_ARRAY_SIZE(param_names), 1024, file_upload_cb, pss); if (!pss->spa) return -1; pss->filename[0] = '\0'; pss->file_length = 0; /* catchall */ pss->response_code = HTTP_STATUS_SERVICE_UNAVAILABLE; m = lws_hdr_copy(wsi, pss->user, sizeof(pss->user), WSI_TOKEN_HTTP_AUTHORIZATION); if (m > 0) lwsl_info("basic auth user: %s\n", pss->user); else pss->user[0] = '\0'; } /* let it parse the POST data */ if (lws_spa_process(pss->spa, in, (int)len)) { lwsl_notice("spa saw a problem\n"); /* some problem happened */ lws_spa_finalize(pss->spa); pss->completed = 1; lws_callback_on_writable(wsi); } break; case LWS_CALLBACK_HTTP_BODY_COMPLETION: /* call to inform no more payload data coming */ lws_spa_finalize(pss->spa); pss->completed = 1; lws_callback_on_writable(wsi); break; case LWS_CALLBACK_HTTP_WRITEABLE: if (!pss->completed) break; p = (unsigned char *)pss->result + LWS_PRE; start = p; end = p + sizeof(pss->result) - LWS_PRE - 1; if (!pss->sent_headers) { n = format_result(pss); if (lws_add_http_header_status(wsi, (unsigned int)pss->response_code, &p, end)) goto bail; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE, (unsigned char *)"text/html", 9, &p, end)) goto bail; if (lws_add_http_header_content_length(wsi, (lws_filepos_t)n, &p, end)) goto bail; if (lws_finalize_http_header(wsi, &p, end)) goto bail; /* first send the headers ... */ n = lws_write(wsi, start, lws_ptr_diff_size_t(p, start), LWS_WRITE_HTTP_HEADERS | LWS_WRITE_H2_STREAM_END); if (n < 0) goto bail; pss->sent_headers = 1; lws_callback_on_writable(wsi); break; } if (!pss->sent_body) { n = format_result(pss); n = lws_write(wsi, (unsigned char *)start, (unsigned int)n, LWS_WRITE_HTTP_FINAL); pss->sent_body = 1; if (n < 0) { lwsl_err("%s: writing body failed\n", __func__); return 1; } goto try_to_reuse; } break; case LWS_CALLBACK_HTTP_DROP_PROTOCOL: /* called when our wsi user_space is going to be destroyed */ if (pss->spa) { lws_spa_destroy(pss->spa); pss->spa = NULL; } break; default: break; } return 0; bail: return 1; try_to_reuse: if (lws_http_transaction_completed(wsi)) return -1; return 0; } #define LWS_PLUGIN_PROTOCOL_DEADDROP \ { \ "lws-deaddrop", \ callback_deaddrop, \ sizeof(struct pss_deaddrop), \ 1024, \ 0, NULL, 0 \ } #if !defined (LWS_PLUGIN_STATIC) LWS_VISIBLE const struct lws_protocols deaddrop_protocols[] = { LWS_PLUGIN_PROTOCOL_DEADDROP }; LWS_VISIBLE const lws_plugin_protocol_t deaddrop = { .hdr = { "deaddrop", "lws_protocol_plugin", LWS_BUILD_HASH, LWS_PLUGIN_API_MAGIC }, .protocols = deaddrop_protocols, .count_protocols = LWS_ARRAY_SIZE(deaddrop_protocols), .extensions = NULL, .count_extensions = 0, }; #endif libwebsockets-4.3.5/plugins/lwsws-logo.png000066400000000000000000000120641476025525100207010ustar00rootroot00000000000000‰PNG  IHDR–&&Ėb—sBIT|dˆ pHYsÕÕ/!•ÜtEXtSoftwarewww.inkscape.org›ī<±IDATxœķ\yPTWöžhhvpAÖl#Q‰J4Fqˆ–Ė˜ŸL&ĘčD%ĘÉbÜfƒA`L5.!˜q‰KEKœv+ŒDĀ*¢€";Żl6Żßļg?ŗé††qfŠÆźVŃēŽwĻ]¾wĻ¹ēŽ‡ ‚d€’Ćš+abbbÆłŪLKn`šoߜüƀ¤‰‰‰ @ņø3€’M kż3ćE ÷ļßGQQąķķ 3³~W9 ‰ęęf(•JX[[ĆÜܼ_õõŪŠÕŚŚŠ;v`Üøq˜9s&†ÜÜÜžRŁkØT*ØÕj€R©|Ģ­é?“··ćŠ”CX²d ęĶ›‡×^{ ?’üóo£œäģ#ØÕjĘĘĘŅĀĀ‚8wī\œIII}­ŹDĆ'mbxP^“¶öŒ‘&&Ąˆ€µµ(Ŗ®®Ę‚ šš ©TŠĖ—/£°°VVVX¶lrrrąććÓe•*• ēϟǜ9s •J –¹pįŚŚŚŒ«WÆĀÄÄööö;v, !‘H T*Q^^Ž   ¤„„ĮĻĻšņņBmm-īܹƒ3fĄÅÅ_|ńllląźź ”••aņäÉ=ƒĒ€ööv¤„„!$$¦¦¦]–+++Ƙ1c°gĻųūū£°°K—.…J„ĀĀ… qōčQŲŲŲōU³$š]”a‡ē“O€;ž˜33`õj &°“ ˜Į††IīŻ»‡ŲŲXŲŲŲ@"‘ķI“!¶D"Ahh(222ąččˆööv(•J¤§§C"‘ĄŚŚ·oßʈ#PUUOOOܼy...ØÆÆGcc#ʏ/Ö7lŲ0Lœ8łłłČĖĖėv²ž@••• Łm¹––“¶¶¢  §NĀŪoæ ‰D•J…¢¢"ŌÕÕu̇Z œ:ģŪģ QQQįƇ#//^^^ÜĘ’xxx <<‡ĀĢ™3ńĖ/戞¤)5¤zķ5T2™`ŗĆˆĄK/u_†ŻłX••äžżdTyźŁŌŌ‘wó&9{6ijJ¾ōY[K„RÉ„K—ŠĀĀ‚/¼šoß¾Ż#æI©Tņųńć|šąA—eŽ;ʬ¬,’d^^‹ŠŠH’÷īŻccc# «««™žžĪ¦¦&Ö>lWZZ«««yėÖ-ŽøqƒMūRPPĄŸ~ś‰$yéŅ%£~ąćʃxüųq*•J£e•J%‹‹‹łŁgŸŃŻŻ]œ—Y³fQ.—“*łÕW¤­-9lyś“n ™›KŽæoL•>Ł±ČšpŅŅ’ōö&½¼ČĶ›ÉÖ֎2dh()‘Ė—“••Œ§T*;ajjŹåĖ—³±±±GaŒX¹¹¹Fėł5P©TĢČČč—ŗū½!I8p€¶¶¶ā|ą®]»H„’£GI$$$ą»ļ¾CQQ,--įģģŒŠŠP„‡‡?rĢ)>>[¶lB”e¾¾¾ˆX“ųōSa^Ķ́€šš˜“¬['˜»qć€?¢£gŸz¦œ]­X›7“yż:)—“—.‘ė×ė2[­&cbH3322’ljbII e2™Ī[€Ææž:›››»|»z²b½ņŹ+ š@m¼õÖ[Ą3gĪčåżįąäɓõägĻž%īŻ»—$™ššŹ”C‡Š«­¹¹¹Ųž;w2//Oü-‘H“ņ­­­“²²"nŪ¶MGĻsĻ='>—‘‘A„RÉŋė‘&½õÖ[ūߓ«½½ß|ó uꓱ±į‰'ØŖ®&gĪę,:Z0‰ØÕäūļ“›6‘eeĀ*uį‚Ą…˜˜®Tö¾śŖP™\N&' žŌ’H<ØŻņ_’Ģe@YQ!fåēēsĀ„ :“H$|żõשP( Ŗ|Tb;vŒųĪ;ļčå¹ŗŗR*•źéŽŗu+033“$9vģXš˜˜šĄlkk£Z­fYY?łäŃWŌž°«WƊu%''‹ņ9sęččńņņ"ZZZ²­­ūöķė’T˜œœl°’ʈ„V«yīÜ96LT{÷īķšuÓÓIwwrĀņĪķ Ÿś£ČµkÉģl²¦FąĀźÕu²WÄŚµ‹41!33Éŗ:rėVrĒĮ”#R8!Ųg{{rŠ į­)++‹“&MŅé §§' Ŗ|Tbݾ}›¦#/..ęĆ8 uņęϟOkkk>xš€UUU¢sŪ~÷»ß‰ż9Øõ¢ķŲ±C”<˜ķķķ$ÉęęfJ$`pp0IrƌbŁ-[¶P”P°¶¶–©©©Ü°aC—›cÄ*))įčŃ£uĘÜĪĪŽqqqŗÓŅ ɒķ#CBČ  ²ØH˜€|óĶ®†¤ÄŖ®&.$Ē#üQ×ü©TäŁ³¤‹ éę&,•æ’=9x0¹}»ŽƒŸššŖ³#ńšš`~~¾A•J,’tssć!Ct&ęšįĆōņņāŠ”CłŽ{ļé”÷ššąŌ©SI’åååĄÅ‹w©Ÿ$ß’}±?oj vXX˜Ī„jvÆŁŁŁ¢ģķ·ß&Iśųųˆ²²²²nõiƱņóóéįį!Ö=hŠ īßæ_·üåˤLFŽE¾ń†ą ?ż“@( ČśzaµZ¶Œ9’¼v­«f‰Ä2~V8d ,_ÜøŃ‘wå °f ŠŽ.8aaĄĒ³g;v| ÄŗČd2899U×W˜2e jjjPRR"Ź’““įéé OOO$''‹ņššܾ}S¦L899ĮŃŃ.\Šyސ rrrtDÄĶĢĢčCJJ ˆN»ö³Śųųų_Ż_cÉdX°`AĒ%€’Xµ J…¹‹‰6l~ųA˜Ó;w𰁀JlŽ \¾,lŅʍ3ŖÆg‡ŠC‡Ē޶¶ĄóĻׯ))Ą’%@K‹5K(«!bD°u«ŠŠĒ€   @ff¦(KJJ‚L&ƒ··7®^½Š£Ė×®]Š1٦¦¦X³f  fΜ‰ŅŅRƒ:žzź)H$Ājˆ• ¹\Ž#Fą‰'ž¤¦¦0L,ķŻé¦M›•Jõˆ½×‡©©©ŲVÜŗ,[&źćŠPįļæžX¹ųī;į4„¶Ėł¹sĄGÓ§œ¢7·\]ƒ/X §¦hnņņVk`o/lMW­ŚŚQ^9~čKh&ī‡‡Ä®ØØ@QQ‚ƒƒ‚ęęf‘tŁŁŁ s6ųī»ļbƌ())Į¤I“ÄŠ‚6ģķķįėė @øTYY‰¤¤$€››<<<čÆXīīīāéĆŗuėĕ$¢££1mŚ4Üŗu«ļ¢ģwīĒoGÓ¦uČ­¬€Å‹…ł»pxłeaõ:qųŪ߄¼¢w×fƌĪ‘¬¬&ļÜ Œ%(‹Ž4ppL”ŸŸįĪõ3`aa!’G3į”””˜:u*ˆę0++Kg²ĄĀĀ xłå—Q]]ēž{’ūßõōt6‡ß’=ą‰'žĄ“O> (//GII‰H,ķgœqęĢńh ŅÓÓØc®ūāų;9ēĻ“&éųé'`Å a±˜:ųö[ąĢa;Å錔ĒÄR«ÕĀŻ„‰#G„eqżzhƆ A¶ćĒuW®Aƒ‚į·% Ćßß?žų£x^éęꆑ#GĀĻĻāÄ]»v O=õ”Į:>Œ½{÷B*•bóęĶxļ½÷tŹh“äʍHKK̘1Ó§OóRSSQXX ĆLkŠ~ų¢¬ŗŗsēĪEqqń£ ÄC茿··“QX¼ų"p÷®ąĀ|õ•š{ūvT’Ž­AFK—••įŲ±cŲøq#Žxć ümēNäXZ Ģ65ģóĮƒ€`ś¾żVtŲ»ķÜo€)S¦@.—#??III  ܌ Ajj*är9 tŅkÖ¬Abb"lll°}ūvŃgtIróęMŌŌŌ¢ź“&M‚­­-ĮÜj|:Cŗ¼¼¼––†­[·Āä”ÓŲŲˆØØØG:®HgéęMg5ķ ©ƒƒƒĮ2½ 7ųūūóīŻ»śėėÉU«„ é_žB¶“ˆY999\“h‘xĘ(•J)“ÉøbÅ ęååбcmß¾–––z‘`šššŅŹŹŠ~ų”ŃAŅ@.—3..ŽŪ¶mć¶mŪ˚šƒeūŠX„„„Ą?żéOĄŸžYĢKOOó¤R©xĖ”;ØÕjŚŁŁńÉ'ŸŌ‘k5dČąŹ•+ż]»véäM™2„Ēz4cnˆ<ʈUZZŹššpśūūÓßߟ¬ŖŖ2Ŗ[ƒ¬¬,Ž9’ęęębPW;9;;3!!”ócŻ«¾¾^ Ü >œ«WÆęŠ+čää¤S¹­­-wļŽĶ––ŖÕź^§®ŠWÄ"…#œńćĒėKŪŚŚhmmM???t[‡*•ŠÖÖ֜0a‚ŽüŻwßÕ—ųųx1/##C'ļĶNQ놆½~޽{W“ævÅR©TT(”Ėå”ĖåljjźńUļ””½Ø½©©)e2}||D¢…„„t¾^Ōżķ†ŹŹJŌ××ĆÖÖ{öģA`` rss†7Šq…BØØ(¤§§ĆŽŽŽPU]B*•ā•W^ĮĉEŸ¢?„Ó§Ocīܹ:zĢĶĶ1yņd|’ż÷ˆŒŒŌ{®©©Iļ¦ėéÓ§ŃÜܬēčwö™“ö€€ŲŁŁ”±±Ql6vļŽO?żįįįšõõESS>’üs1–õĢ3Ļō¾ÓźźźpćĘ ńc‘ž¢²²ŃŃŃ(((e666ˆŒŒÄüłóįččˆC‡į’ųŠ‹‹QVVÖż„HvZ±ĘŒCwww^æ~trrāŖU«˜””¤c»%yzz2==]ļé͊ĮU«Vé%ĶJ¶{÷nąīŻ»õꈊŠ"~öŁg:ņĀĀB<˜+W®äž={xšąAFFFŅŅŅ’666ĢĖĖÓ)_UU%žAśśśźé ū\ZZ*ŹÕjµx(m(YYY‰—;£»«ŗŗš/¾ų¢Žoük“……£££¹oß>N˜06l`vv6]\\čīīŽłŹøC{{{FGGóģŁ³|ę™gŹŗŗ:¦„„ŃÕÕµĻČÕłb]{{;Ļž=Ū#bu•RRRH g”€īķ  @o‘žžĪ±cĒźÕéēē'ÖŪŽŽŽĄČČH½<ĶFĮÕÕUGŽŠŠĄÅ‹‹_3i§ńćĒ355µĖžwE¬¦¦&.Y²Ä _ōkҶmŪxļŽ=†„„0<<œńńńLLL¤££##"":›WćÄjllä¦M›(“ÉčėėK~žłē¢”˜˜Ųgä5j³²²ÄFŖÕj644ōÉē_mmm¼té’Į7»„„…—.]źROii)SRRxåŹkĢ@EE‹‹‹Y__Ɨ§P(X\\,~jÖr¹œ * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * These test plugins are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. */ #if !defined(LWS_DLL) #define LWS_DLL #endif #if !defined(LWS_INTERNAL) #define LWS_INTERNAL #endif #include #include struct per_session_data__client_loopback_test { struct lws *wsi; }; /* * This is a bit fiddly... * * 0) If you want the wss:// test to work, make sure the vhost is marked with * enable-client-ssl if using lwsws, or call lws_init_vhost_client_ssl() on * the vhost if you're doing it by hand. * * 1) enable the protocol on a vhost * * "ws-protocols": [{ * "client-loopback-test": { * "status": "ok" * }, ... * * the vhost should listen on 80 (ws://) or 443 (wss://) * * 2) mount the http part of the test one level down on the same vhost, eg * { * "mountpoint": "/c", * "origin": "callback://client-loopback-test" * } * * 3) Use a browser to visit the mountpoint with a URI attached for looping * back, eg, if testing on localhost * * http://localhost/c/ws://localhost * https://localhost/c/wss://localhost * * 4) The HTTP part of this test protocol will try to do the requested * ws client connection, to the same test protocol on the same * server. */ static int callback_client_loopback_test(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct lws_client_connect_info i; struct per_session_data__client_loopback_test *pss = (struct per_session_data__client_loopback_test *)user; const char *p = (const char *)in; char buf[100]; int n; switch (reason) { /* HTTP part */ case LWS_CALLBACK_HTTP: if (len < 10) return -1; p++; while (*p && *p != '/') p++; if (!*p) { lws_return_http_status(wsi, 400, "Arg needs to be in format ws://xxx or wss://xxx"); return -1; } p++; memset(&i, 0, sizeof(i)); i.context = lws_get_context(wsi); // stacked /// get resolved to / if (strncmp(p, "ws:/", 4) == 0) { i.ssl_connection = 0; i.port = 80; p += 4; } else if (strncmp(p, "wss:/", 5) == 0) { i.port = 443; i.ssl_connection = 1; p += 5; } else { sprintf(buf, "Arg %s is not in format ws://xxx or wss://xxx\n", p); lws_return_http_status(wsi, 400, buf); return -1; } i.address = p; i.path = ""; i.host = p; i.origin = p; i.ietf_version_or_minus_one = -1; i.protocol = "client-loopback-test"; pss->wsi = lws_client_connect_via_info(&i); if (!pss->wsi) lws_return_http_status(wsi, 401, "client-loopback-test: connect failed\n"); else { lwsl_notice("client connection to %s:%d with ssl: %d started\n", i.address, i.port, i.ssl_connection); lws_return_http_status(wsi, 200, "OK"); } /* either way, close the triggering http link */ return -1; case LWS_CALLBACK_CLOSED_HTTP: lwsl_notice("Http part closed\n"); break; /* server part */ case LWS_CALLBACK_ESTABLISHED: lwsl_notice("server part: LWS_CALLBACK_ESTABLISHED\n"); strcpy(buf + LWS_PRE, "Made it"); n = lws_write(wsi, (unsigned char *)buf + LWS_PRE, 7, LWS_WRITE_TEXT); if (n < 7) return -1; break; /* client part */ case LWS_CALLBACK_CLIENT_ESTABLISHED: lwsl_notice("Client connection established\n"); break; case LWS_CALLBACK_CLIENT_RECEIVE: lws_strncpy(buf, in, sizeof(buf)); lwsl_notice("Client connection received %ld from server '%s'\n", (long)len, buf); /* OK we are done with the client connection */ return -1; default: break; } return 0; } LWS_VISIBLE const struct lws_protocols client_loopback_test_protocols[] = { { "client-loopback-test", callback_client_loopback_test, sizeof(struct per_session_data__client_loopback_test), 1024, /* rx buf size must be >= permessage-deflate rx size */ 0, NULL, 0 }, }; LWS_VISIBLE const lws_plugin_protocol_t client_loopback_test = { .hdr = { "client loopback test", "lws_protocol_plugin", LWS_BUILD_HASH, LWS_PLUGIN_API_MAGIC }, .protocols = client_loopback_test_protocols, .count_protocols = LWS_ARRAY_SIZE(client_loopback_test_protocols), .extensions = NULL, .count_extensions = 0, }; libwebsockets-4.3.5/plugins/protocol_dumb_increment.c000066400000000000000000000071021476025525100231330ustar00rootroot00000000000000/* * ws protocol handler plugin for "dumb increment" * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * These test plugins are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. */ #if !defined (LWS_PLUGIN_STATIC) #if !defined(LWS_DLL) #define LWS_DLL #endif #if !defined(LWS_INTERNAL) #define LWS_INTERNAL #endif #include #endif #include #define DUMB_PERIOD_US 50000 struct pss__dumb_increment { int number; }; struct vhd__dumb_increment { const unsigned int *options; }; static int callback_dumb_increment(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct pss__dumb_increment *pss = (struct pss__dumb_increment *)user; struct vhd__dumb_increment *vhd = (struct vhd__dumb_increment *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); uint8_t buf[LWS_PRE + 20], *p = &buf[LWS_PRE]; const struct lws_protocol_vhost_options *opt; int n, m; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct vhd__dumb_increment)); if (!vhd) return 0; if ((opt = lws_pvo_search( (const struct lws_protocol_vhost_options *)in, "options"))) vhd->options = (unsigned int *)opt->value; break; case LWS_CALLBACK_ESTABLISHED: pss->number = 0; if (!vhd->options || !((*vhd->options) & 1)) lws_set_timer_usecs(wsi, DUMB_PERIOD_US); break; case LWS_CALLBACK_SERVER_WRITEABLE: n = lws_snprintf((char *)p, sizeof(buf) - LWS_PRE, "%d", pss->number++); m = lws_write(wsi, p, (unsigned int)n, LWS_WRITE_TEXT); if (m < n) { lwsl_err("ERROR %d writing to di socket\n", n); return -1; } break; case LWS_CALLBACK_RECEIVE: if (len < 6) break; if (strncmp((const char *)in, "reset\n", 6) == 0) pss->number = 0; if (strncmp((const char *)in, "closeme\n", 8) == 0) { lwsl_notice("dumb_inc: closing as requested\n"); lws_close_reason(wsi, LWS_CLOSE_STATUS_GOINGAWAY, (unsigned char *)"seeya", 5); return -1; } break; case LWS_CALLBACK_TIMER: if (!vhd->options || !((*vhd->options) & 1)) { lws_callback_on_writable_all_protocol_vhost( lws_get_vhost(wsi), lws_get_protocol(wsi)); lws_set_timer_usecs(wsi, DUMB_PERIOD_US); } break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_DUMB_INCREMENT \ { \ "dumb-increment-protocol", \ callback_dumb_increment, \ sizeof(struct pss__dumb_increment), \ 10, /* rx buf size must be >= permessage-deflate rx size */ \ 0, NULL, 0 \ } #if !defined (LWS_PLUGIN_STATIC) LWS_VISIBLE const struct lws_protocols dumb_increment_protocols[] = { LWS_PLUGIN_PROTOCOL_DUMB_INCREMENT }; LWS_VISIBLE const lws_plugin_protocol_t dumb_increment = { .hdr = { "dumb increment", "lws_protocol_plugin", LWS_BUILD_HASH, LWS_PLUGIN_API_MAGIC }, .protocols = dumb_increment_protocols, .count_protocols = LWS_ARRAY_SIZE(dumb_increment_protocols), .extensions = NULL, .count_extensions = 0, }; #endif libwebsockets-4.3.5/plugins/protocol_fulltext_demo.c000066400000000000000000000153221476025525100230160ustar00rootroot00000000000000/* * ws protocol handler plugin for "fulltext demo" * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * These test plugins are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. */ #if !defined (LWS_PLUGIN_STATIC) #if !defined(LWS_DLL) #define LWS_DLL #endif #if !defined(LWS_INTERNAL) #define LWS_INTERNAL #endif #include #endif #include #include #include #include #include #ifdef WIN32 #include #endif #include struct vhd_fts_demo { const char *indexpath; }; struct pss_fts_demo { struct lwsac *result; struct lws_fts_result_autocomplete *ac; struct lws_fts_result_filepath *fp; uint32_t *li; int done; uint8_t first:1; uint8_t ac_done:1; uint8_t fp_init_done:1; }; static int callback_fts(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct vhd_fts_demo *vhd = (struct vhd_fts_demo *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); struct pss_fts_demo *pss = (struct pss_fts_demo *)user; uint8_t buf[LWS_PRE + 2048], *start = &buf[LWS_PRE], *p = start, *end = &buf[sizeof(buf) - 1]; struct lws_fts_search_params params; const char *ccp = (const char *)in; struct lws_fts_result *result; struct lws_fts_file *jtf; int n; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi),sizeof(struct vhd_fts_demo)); if (!vhd) return 0; if (lws_pvo_get_str(in, "indexpath", (const char **)&vhd->indexpath)) return 1; return 0; case LWS_CALLBACK_HTTP: pss->first = 1; pss->ac_done = 0; /* * we have a "subdirectory" selecting the task * * /a/ = autocomplete * /r/ = results */ if (strncmp(ccp, "/a/", 3) && strncmp(ccp, "/r/", 3)) goto reply_404; memset(¶ms, 0, sizeof(params)); params.needle = ccp + 3; if (*(ccp + 1) == 'a') params.flags = LWSFTS_F_QUERY_AUTOCOMPLETE; if (*(ccp + 1) == 'r') params.flags = LWSFTS_F_QUERY_FILES | LWSFTS_F_QUERY_FILE_LINES | LWSFTS_F_QUERY_QUOTE_LINE; params.max_autocomplete = 10; params.max_files = 10; jtf = lws_fts_open(vhd->indexpath); if (!jtf) { lwsl_err("unable to open %s\n", vhd->indexpath); /* we'll inform the client in the JSON */ goto reply_200; } result = lws_fts_search(jtf, ¶ms); lws_fts_close(jtf); if (result) { pss->result = params.results_head; pss->ac = result->autocomplete_head; pss->fp = result->filepath_head; } /* NULL result will be told in the json as "indexed": 0 */ reply_200: if (lws_add_http_common_headers(wsi, HTTP_STATUS_OK, "text/html", LWS_ILLEGAL_HTTP_CONTENT_LEN, &p, end)) return 1; if (lws_finalize_write_http_header(wsi, start, &p, end)) return 1; lws_callback_on_writable(wsi); return 0; reply_404: if (lws_add_http_common_headers(wsi, HTTP_STATUS_NOT_FOUND, "text/html", LWS_ILLEGAL_HTTP_CONTENT_LEN, &p, end)) return 1; if (lws_finalize_write_http_header(wsi, start, &p, end)) return 1; return lws_http_transaction_completed(wsi); case LWS_CALLBACK_CLOSED_HTTP: if (pss && pss->result) lwsac_free(&pss->result); break; case LWS_CALLBACK_HTTP_WRITEABLE: if (!pss) break; n = LWS_WRITE_HTTP; if (pss->first) p += lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), "{\"indexed\": %d, \"ac\": [", !!pss->result); while (pss->ac && lws_ptr_diff(end, p) > 256) { p += lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), "%c{\"ac\": \"%s\",\"matches\": %d," "\"agg\": %d, \"elided\": %d}", pss->first ? ' ' : ',', (char *)(pss->ac + 1), pss->ac->instances, pss->ac->agg_instances, pss->ac->elided); pss->first = 0; pss->ac = pss->ac->next; } if (!pss->ac_done && !pss->ac && pss->fp) { pss->ac_done = 1; p += lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), "], \"fp\": ["); } while (pss->fp && lws_ptr_diff_size_t(end, p) > 256) { if (!pss->fp_init_done) { p += lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), "%c{\"path\": \"%s\",\"matches\": %d," "\"origlines\": %d," "\"hits\": [", pss->first ? ' ' : ',', ((char *)(pss->fp + 1)) + pss->fp->matches_length, pss->fp->matches, pss->fp->lines_in_file); pss->li = ((uint32_t *)(pss->fp + 1)); pss->done = 0; pss->fp_init_done = 1; pss->first = 0; } else { while (pss->done < pss->fp->matches && lws_ptr_diff(end, p) > 256) { p += lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), "%c\n{\"l\":%d,\"o\":%d," "\"s\":\"%s\"}", !pss->done ? ' ' : ',', pss->li[0], pss->li[1], *((const char **)&pss->li[2])); pss->li += 2 + (sizeof(const char *) / sizeof(uint32_t)); pss->done++; } if (pss->done == pss->fp->matches) { *p++ = ']'; pss->fp_init_done = 0; pss->fp = pss->fp->next; if (!pss->fp) *p++ = '}'; } } } if (!pss->ac && !pss->fp) { n = LWS_WRITE_HTTP_FINAL; p += lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), "]}"); } if (lws_write(wsi, (uint8_t *)start, lws_ptr_diff_size_t(p, start), (enum lws_write_protocol)n) != lws_ptr_diff(p, start)) return 1; if (n == LWS_WRITE_HTTP_FINAL) { if (pss->result) lwsac_free(&pss->result); if (lws_http_transaction_completed(wsi)) return -1; } else lws_callback_on_writable(wsi); return 0; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } #define LWS_PLUGIN_PROTOCOL_FULLTEXT_DEMO \ { \ "lws-test-fts", \ callback_fts, \ sizeof(struct pss_fts_demo), \ 0, \ 0, NULL, 0 \ } #if !defined (LWS_PLUGIN_STATIC) LWS_VISIBLE const struct lws_protocols fulltext_demo_protocols[] = { LWS_PLUGIN_PROTOCOL_FULLTEXT_DEMO }; LWS_VISIBLE const lws_plugin_protocol_t fulltext_demo = { .hdr = { "fulltext demo", "lws_protocol_plugin", LWS_BUILD_HASH, LWS_PLUGIN_API_MAGIC }, .protocols = fulltext_demo_protocols, .count_protocols = LWS_ARRAY_SIZE(fulltext_demo_protocols), .extensions = NULL, .count_extensions = 0, }; #endif libwebsockets-4.3.5/plugins/protocol_lws_mirror.c000066400000000000000000000333621476025525100223460ustar00rootroot00000000000000/* * libwebsockets-test-server - libwebsockets test implementation * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * The test apps are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. * * Notice that the lws_pthread... locking apis are all zero-footprint * NOPs in the case LWS_MAX_SMP == 1, which is the default. When lws * is built for multiple service threads though, they resolve to their * pthreads equivalents. */ #if !defined (LWS_PLUGIN_STATIC) #if !defined(LWS_DLL) #define LWS_DLL #endif #if !defined(LWS_INTERNAL) #define LWS_INTERNAL #endif #include #endif #include #include #define QUEUELEN 32 /* queue free space below this, rx flow is disabled */ #define RXFLOW_MIN (4) /* queue free space above this, rx flow is enabled */ #define RXFLOW_MAX ((2 * QUEUELEN) / 3) #define MAX_MIRROR_INSTANCES 3 struct mirror_instance; struct per_session_data__lws_mirror { struct lws *wsi; struct mirror_instance *mi; struct per_session_data__lws_mirror *same_mi_pss_list; uint32_t tail; }; /* this is the element in the ring */ struct a_message { void *payload; size_t len; }; struct mirror_instance { struct mirror_instance *next; lws_pthread_mutex(lock) /* protects all mirror instance data */ struct per_session_data__lws_mirror *same_mi_pss_list; /**< must hold the the per_vhost_data__lws_mirror.lock as well * to change mi list membership */ struct lws_ring *ring; int messages_allocated; char name[30]; char rx_enabled; }; struct per_vhost_data__lws_mirror { lws_pthread_mutex(lock) /* protects mi_list membership changes */ struct mirror_instance *mi_list; }; /* enable or disable rx from all connections to this mirror instance */ static void __mirror_rxflow_instance(struct mirror_instance *mi, int enable) { lws_start_foreach_ll(struct per_session_data__lws_mirror *, pss, mi->same_mi_pss_list) { lws_rx_flow_control(pss->wsi, enable); } lws_end_foreach_ll(pss, same_mi_pss_list); mi->rx_enabled = (char)enable; } /* * Find out which connection to this mirror instance has the longest number * of still unread elements in the ringbuffer and update the lws_ring "oldest * tail" with it. Elements behind the "oldest tail" are freed and recycled for * new head content. Elements after the "oldest tail" are still waiting to be * read by somebody. * * If the oldest tail moved on from before, check if it created enough space * in the queue to re-enable RX flow control for the mirror instance. * * Mark connections that are at the oldest tail as being on a 3s timeout to * transmit something, otherwise the connection will be closed. Without this, * a choked or nonresponsive connection can block the FIFO from freeing up any * new space for new data. * * You can skip calling this if on your connection, before processing, the tail * was not equal to the current worst, ie, if the tail you will work on is != * lws_ring_get_oldest_tail(ring) then no need to call this when the tail * has changed; it wasn't the oldest so it won't change the oldest. * * Returns 0 if oldest unchanged or 1 if oldest changed from this call. */ static int __mirror_update_worst_tail(struct mirror_instance *mi) { uint32_t wai, worst = 0, worst_tail = 0, oldest; struct per_session_data__lws_mirror *worst_pss = NULL; oldest = lws_ring_get_oldest_tail(mi->ring); lws_start_foreach_ll(struct per_session_data__lws_mirror *, pss, mi->same_mi_pss_list) { wai = (uint32_t)lws_ring_get_count_waiting_elements(mi->ring, &pss->tail); if (wai >= worst) { worst = wai; worst_tail = pss->tail; worst_pss = pss; } } lws_end_foreach_ll(pss, same_mi_pss_list); if (!worst_pss) return 0; lws_ring_update_oldest_tail(mi->ring, worst_tail); if (oldest == lws_ring_get_oldest_tail(mi->ring)) return 0; /* * The oldest tail did move on. Check if we should re-enable rx flow * for the mirror instance since we made some space now. */ if (!mi->rx_enabled && /* rx is disabled */ lws_ring_get_count_free_elements(mi->ring) >= RXFLOW_MAX) /* there is enough space, let's re-enable rx for our instance */ __mirror_rxflow_instance(mi, 1); /* if nothing in queue, no timeout needed */ if (!worst) return 1; /* * The guy(s) with the oldest tail block the ringbuffer from recycling * the FIFO entries he has not read yet. Don't allow those guys to * block the FIFO operation for very long. */ lws_start_foreach_ll(struct per_session_data__lws_mirror *, pss, mi->same_mi_pss_list) { if (pss->tail == worst_tail) /* * Our policy is if you are the slowest connection, * you had better transmit something to help with that * within 3s, or we will hang up on you to stop you * blocking the FIFO for everyone else. */ lws_set_timeout(pss->wsi, PENDING_TIMEOUT_USER_REASON_BASE, 3); } lws_end_foreach_ll(pss, same_mi_pss_list); return 1; } static void __mirror_callback_all_in_mi_on_writable(struct mirror_instance *mi) { /* ask for WRITABLE callback for every wsi on this mi */ lws_start_foreach_ll(struct per_session_data__lws_mirror *, pss, mi->same_mi_pss_list) { lws_callback_on_writable(pss->wsi); } lws_end_foreach_ll(pss, same_mi_pss_list); } static void __mirror_destroy_message(void *_msg) { struct a_message *msg = _msg; free(msg->payload); msg->payload = NULL; msg->len = 0; } static int callback_lws_mirror(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__lws_mirror *pss = (struct per_session_data__lws_mirror *)user; struct per_vhost_data__lws_mirror *v = (struct per_vhost_data__lws_mirror *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); char name[300], update_worst, sent_something, *pn = name; struct mirror_instance *mi = NULL; const struct a_message *msg; struct a_message amsg; uint32_t oldest_tail; int n, count_mi = 0; switch (reason) { case LWS_CALLBACK_ESTABLISHED: lwsl_info("%s: LWS_CALLBACK_ESTABLISHED\n", __func__); if (!v) { lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__lws_mirror)); v = (struct per_vhost_data__lws_mirror *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); lws_pthread_mutex_init(&v->lock); } /* * mirror instance name... defaults to "", but if URL includes * "?mirror=xxx", will be "xxx" */ if (lws_get_urlarg_by_name_safe(wsi, "mirror", name, sizeof(name) - 1) < 0) { lwsl_debug("get urlarg failed\n"); name[0] = '\0'; } //lwsl_notice("%s: mirror name '%s'\n", __func__, pn); /* is there already a mirror instance of this name? */ lws_pthread_mutex_lock(&v->lock); /* vhost lock { */ lws_start_foreach_ll(struct mirror_instance *, mi1, v->mi_list) { count_mi++; if (!strcmp(pn, mi1->name)) { /* yes... we will join it */ mi = mi1; break; } } lws_end_foreach_ll(mi1, next); if (!mi) { /* no existing mirror instance for name */ if (count_mi == MAX_MIRROR_INSTANCES) { lws_pthread_mutex_unlock(&v->lock); /* } vh lock */ return -1; } /* create one with this name, and join it */ mi = malloc(sizeof(*mi)); if (!mi) goto bail1; memset(mi, 0, sizeof(*mi)); mi->ring = lws_ring_create(sizeof(struct a_message), QUEUELEN, __mirror_destroy_message); if (!mi->ring) { free(mi); goto bail1; } mi->next = v->mi_list; v->mi_list = mi; lws_snprintf(mi->name, sizeof(mi->name) - 1, "%s", pn); mi->rx_enabled = 1; lws_pthread_mutex_init(&mi->lock); lwsl_notice("Created new mi %p '%s'\n", mi, pn); } /* add our pss to list of guys bound to this mi */ lws_ll_fwd_insert(pss, same_mi_pss_list, mi->same_mi_pss_list); /* init the pss */ pss->mi = mi; pss->tail = lws_ring_get_oldest_tail(mi->ring); pss->wsi = wsi; lws_pthread_mutex_unlock(&v->lock); /* } vhost lock */ break; bail1: lws_pthread_mutex_unlock(&v->lock); /* } vhost lock */ return 1; case LWS_CALLBACK_CLOSED: /* detach our pss from the mirror instance */ mi = pss->mi; if (!mi) break; lws_pthread_mutex_lock(&v->lock); /* vhost lock { */ /* remove our closing pss from its mirror instance list */ lws_ll_fwd_remove(struct per_session_data__lws_mirror, same_mi_pss_list, pss, mi->same_mi_pss_list); pss->mi = NULL; if (mi->same_mi_pss_list) { /* * Still other pss using the mirror instance. The pss * going away may have had the oldest tail, reconfirm * using the remaining pss what is the current oldest * tail. If the oldest tail moves on, this call also * will re-enable rx flow control when appropriate. */ lws_pthread_mutex_lock(&mi->lock); /* mi lock { */ __mirror_update_worst_tail(mi); lws_pthread_mutex_unlock(&mi->lock); /* } mi lock */ lws_pthread_mutex_unlock(&v->lock); /* } vhost lock */ break; } /* No more pss using the mirror instance... delete mi */ lws_start_foreach_llp(struct mirror_instance **, pmi, v->mi_list) { if (*pmi == mi) { *pmi = (*pmi)->next; lws_ring_destroy(mi->ring); lws_pthread_mutex_destroy(&mi->lock); free(mi); break; } } lws_end_foreach_llp(pmi, next); lws_pthread_mutex_unlock(&v->lock); /* } vhost lock */ break; case LWS_CALLBACK_CONFIRM_EXTENSION_OKAY: return 1; /* disallow compression */ case LWS_CALLBACK_PROTOCOL_INIT: /* per vhost */ if (!v) { lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__lws_mirror)); v = (struct per_vhost_data__lws_mirror *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); if (!v) return 0; lws_pthread_mutex_init(&v->lock); } break; case LWS_CALLBACK_PROTOCOL_DESTROY: lws_pthread_mutex_destroy(&v->lock); break; case LWS_CALLBACK_SERVER_WRITEABLE: lws_pthread_mutex_lock(&pss->mi->lock); /* instance lock { */ oldest_tail = lws_ring_get_oldest_tail(pss->mi->ring); update_worst = oldest_tail == pss->tail; sent_something = 0; do { msg = lws_ring_get_element(pss->mi->ring, &pss->tail); if (!msg) break; if (!msg->payload) { lwsl_err("%s: NULL payload: worst = %d," " pss->tail = %d\n", __func__, oldest_tail, pss->tail); if (lws_ring_consume(pss->mi->ring, &pss->tail, NULL, 1)) continue; break; } n = lws_write(wsi, (unsigned char *)msg->payload + LWS_PRE, msg->len, LWS_WRITE_TEXT); if (n < 0) { lwsl_info("%s: WRITEABLE: %d\n", __func__, n); goto bail2; } sent_something = 1; lws_ring_consume(pss->mi->ring, &pss->tail, NULL, 1); } while (!lws_send_pipe_choked(wsi)); /* if any left for us to send, ask for writeable again */ if (lws_ring_get_count_waiting_elements(pss->mi->ring, &pss->tail)) lws_callback_on_writable(wsi); if (!sent_something || !update_worst) goto done1; /* * We are no longer holding the oldest tail (since we sent * something. So free us of the timeout related to hogging the * oldest tail. */ lws_set_timeout(pss->wsi, NO_PENDING_TIMEOUT, 0); /* * If we were originally at the oldest fifo position of * all the tails, now we used some up we may have * changed the oldest fifo position and made some space. */ __mirror_update_worst_tail(pss->mi); done1: lws_pthread_mutex_unlock(&pss->mi->lock); /* } instance lock */ break; bail2: lws_pthread_mutex_unlock(&pss->mi->lock); /* } instance lock */ return -1; case LWS_CALLBACK_RECEIVE: lws_pthread_mutex_lock(&pss->mi->lock); /* mi lock { */ n = (int)lws_ring_get_count_free_elements(pss->mi->ring); if (!n) { lwsl_notice("dropping!\n"); if (pss->mi->rx_enabled) __mirror_rxflow_instance(pss->mi, 0); goto req_writable; } amsg.payload = malloc(LWS_PRE + len); amsg.len = len; if (!amsg.payload) { lwsl_notice("OOM: dropping\n"); goto done2; } memcpy((char *)amsg.payload + LWS_PRE, in, len); if (!lws_ring_insert(pss->mi->ring, &amsg, 1)) { __mirror_destroy_message(&amsg); lwsl_notice("dropping!\n"); if (pss->mi->rx_enabled) __mirror_rxflow_instance(pss->mi, 0); goto req_writable; } if (pss->mi->rx_enabled && lws_ring_get_count_free_elements(pss->mi->ring) < RXFLOW_MIN) __mirror_rxflow_instance(pss->mi, 0); req_writable: __mirror_callback_all_in_mi_on_writable(pss->mi); done2: lws_pthread_mutex_unlock(&pss->mi->lock); /* } mi lock */ break; case LWS_CALLBACK_EVENT_WAIT_CANCELLED: lwsl_info("LWS_CALLBACK_EVENT_WAIT_CANCELLED\n"); break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_MIRROR { \ "lws-mirror-protocol", \ callback_lws_mirror, \ sizeof(struct per_session_data__lws_mirror), \ 4096, /* rx buf size must be >= permessage-deflate rx size */ \ 0, NULL, 0 \ } #if !defined (LWS_PLUGIN_STATIC) LWS_VISIBLE const struct lws_protocols lws_mirror_protocols[] = { LWS_PLUGIN_PROTOCOL_MIRROR }; LWS_VISIBLE const lws_plugin_protocol_t lws_mirror = { .hdr = { "lws mirror", "lws_protocol_plugin", LWS_BUILD_HASH, LWS_PLUGIN_API_MAGIC }, .protocols = lws_mirror_protocols, .count_protocols = LWS_ARRAY_SIZE(lws_mirror_protocols), .extensions = NULL, .count_extensions = 0, }; #endif libwebsockets-4.3.5/plugins/protocol_lws_openmetrics_export.c000066400000000000000000000755771476025525100250030ustar00rootroot00000000000000/* * libwebsockets-test-server - libwebsockets test implementation * * Written in 2010-2021 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * The test apps are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. * * Scrapeable, proxiable OpenMetrics metrics (compatible with Prometheus) * * https://tools.ietf.org/html/draft-richih-opsawg-openmetrics-00 * * This plugin provides four protocols related to openmetrics handling: * * 1) "lws-openmetrics" direct http listener so scraper can directly get metrics * * 2) "lws-openmetrics-prox-agg" metrics proxy server that scraper can connect * to locally to proxy through to connected remote clients at 3) * * 3) "lws-openmetrics-prox-server" metrics proxy server that remote clients can * connect to, providing a path where scrapers at 2) can get metrics from * clients connected us * * 4) "lws-openmetrics-prox-client" nailed-up metrics proxy client that tries to * keep up a connection to the server at 3), allowing to scraper to reach * clients that have no reachable way to serve. * * These are provided like this to maximize flexibility in being able to add * openmetrics serving, proxying, or client->proxy to existing lws code. * * Openmetrics supports a "metric" at the top of its report that describes the * source aka "target metadata". * * Since we want to enable collection from devices that are not externally * reachable, we must provide a reachable server that the clients can attach to * and have their stats aggregated and then read by Prometheus or whatever. * Openmetrics says that it wants to present the aggregated stats in a flat * summary with only the aggregator's "target metadata" and contributor targets * getting their data tagged with the source * * "The above discussion is in the context of individual exposers. An * exposition from a general purpose monitoring system may contain * metrics from many individual targets, and thus may expose multiple * target info Metrics. The metrics may already have had target * metadata added to them as labels as part of ingestion. The metric * names MUST NOT be varied based on target metadata. For example it * would be incorrect for all metrics to end up being prefixed with * staging_ even if they all originated from targets in a staging * environment)." */ #if !defined (LWS_PLUGIN_STATIC) #if !defined(LWS_DLL) #define LWS_DLL #endif #if !defined(LWS_INTERNAL) #define LWS_INTERNAL #endif #include #endif #include #include #include #include #if !defined(WIN32) #include #endif #include struct vhd { struct lws_context *cx; struct lws_vhost *vhost; char ws_server_uri[128]; char metrics_proxy_path[128]; char ba_secret[128]; const char *proxy_side_bind_name; /**< name used to bind the two halves of the proxy together, must be * the same name given in a pvo for both "lws-openmetrics-prox-agg" * (the side local to the scraper) and "lws-openmetrics-prox-server" * (the side the clients connect to) */ char sanity[8]; lws_dll2_owner_t clients; lws_sorted_usec_list_t sul; /* schedule connection retry */ struct vhd *bind_partner_vhd; struct lws *wsi; /* related wsi if any */ uint16_t retry_count; /* count of consequetive retries */ }; struct pss { lws_dll2_t list; char proxy_path[64]; struct lwsac *ac; /* the translated metrics, one ac per line */ struct lwsac *walk; /* iterator for ac when writing */ size_t tot; /* content-length computation */ struct lws *wsi; uint8_t greet:1; /* set if client needs to send proxy path */ uint8_t trigger:1; /* we want to ask the client to dump */ }; #if defined(LWS_WITH_CLIENT) static const uint32_t backoff_ms[] = { 1000, 2000, 3000, 4000, 5000 }; static const lws_retry_bo_t retry = { .retry_ms_table = backoff_ms, .retry_ms_table_count = LWS_ARRAY_SIZE(backoff_ms), .conceal_count = LWS_ARRAY_SIZE(backoff_ms), .secs_since_valid_ping = 400, /* force PINGs after secs idle */ .secs_since_valid_hangup = 400, /* hangup after secs idle */ .jitter_percent = 0, }; static void omc_connect_client(lws_sorted_usec_list_t *sul) { struct vhd *vhd = lws_container_of(sul, struct vhd, sul); struct lws_client_connect_info i; const char *prot; char url[128]; memset(&i, 0, sizeof(i)); lwsl_notice("%s: %s %s %s\n", __func__, vhd->ws_server_uri, vhd->metrics_proxy_path, vhd->ba_secret); lws_strncpy(url, vhd->ws_server_uri, sizeof(url)); if (lws_parse_uri(url, &prot, &i.address, &i.port, &i.path)) { lwsl_err("%s: unable to parse uri %s\n", __func__, vhd->ws_server_uri); return; } i.context = vhd->cx; i.origin = i.address; i.host = i.address; i.ssl_connection = LCCSCF_USE_SSL; i.protocol = "lws-openmetrics-prox-server"; /* public subprot */ i.local_protocol_name = "lws-openmetrics-prox-client"; i.pwsi = &vhd->wsi; i.retry_and_idle_policy = &retry; i.userdata = vhd; i.vhost = vhd->vhost; lwsl_notice("%s: %s %u %s\n", __func__, i.address, i.port, i.path); if (lws_client_connect_via_info(&i)) return; /* * Failed... schedule a retry... we can't use the _retry_wsi() * convenience wrapper api here because no valid wsi at this * point. */ if (!lws_retry_sul_schedule(vhd->cx, 0, sul, &retry, omc_connect_client, &vhd->retry_count)) return; vhd->retry_count = 0; lws_retry_sul_schedule(vhd->cx, 0, sul, &retry, omc_connect_client, &vhd->retry_count); } #endif static void openmetrics_san(char *nm, size_t nl) { size_t m; /* Openmetrics has a very restricted token charset */ for (m = 0; m < nl; m++) if ((nm[m] < 'A' || nm[m] > 'Z') && (nm[m] < 'a' || nm[m] > 'z') && (nm[m] < '0' || nm[m] > '9') && nm[m] != '_') nm[m] = '_'; } static int lws_metrics_om_format_agg(lws_metric_pub_t *pub, const char *nm, lws_usec_t now, int gng, char *buf, size_t len) { const char *_gng = gng ? "_nogo" : "_go"; char *end = buf + len - 1, *obuf = buf; if (pub->flags & LWSMTFL_REPORT_ONLY_GO) _gng = ""; if (!(pub->flags & LWSMTFL_REPORT_MEAN)) { /* only the sum is meaningful */ if (pub->flags & LWSMTFL_REPORT_DUTY_WALLCLOCK_US) { buf += lws_snprintf(buf, lws_ptr_diff_size_t(end, buf), "%s_count %u\n" "%s_us_sum %llu\n" "%s_created %lu.%06u\n", nm, (unsigned int)pub->u.agg.count[gng], nm, (unsigned long long)pub->u.agg.sum[gng], nm, (unsigned long)(pub->us_first / 1000000), (unsigned int)(pub->us_first % 1000000)); return lws_ptr_diff(buf, obuf); } /* it's a monotonic ordinal, like total tx */ buf += lws_snprintf(buf, lws_ptr_diff_size_t(end, buf), "%s%s_count %u\n" "%s%s_sum %llu\n", nm, _gng, (unsigned int)pub->u.agg.count[gng], nm, _gng, (unsigned long long)pub->u.agg.sum[gng]); } else buf += lws_snprintf(buf, lws_ptr_diff_size_t(end, buf), "%s%s_count %u\n" "%s%s_mean %llu\n", nm, _gng, (unsigned int)pub->u.agg.count[gng], nm, _gng, (unsigned long long) (pub->u.agg.count[gng] ? pub->u.agg.sum[gng] / pub->u.agg.count[gng] : 0)); return lws_ptr_diff(buf, obuf); } static int lws_metrics_om_ac_stash(struct pss *pss, const char *buf, size_t len) { char *q; q = lwsac_use(&pss->ac, LWS_PRE + len + 2, LWS_PRE + len + 2); if (!q) { lwsac_free(&pss->ac); return -1; } q[LWS_PRE] = (char)((len >> 8) & 0xff); q[LWS_PRE + 1] = (char)(len & 0xff); memcpy(q + LWS_PRE + 2, buf, len); pss->tot += len; return 0; } /* * We have to do the ac listing at this level, because there can be too large * a number to metrics tags to iterate that can fit in a reasonable buffer. */ static int lws_metrics_om_format(struct pss *pss, lws_metric_pub_t *pub, const char *nm) { char buf[1200], *p = buf, *end = buf + sizeof(buf) - 1, tmp[512]; lws_usec_t t = lws_now_usecs(); if (pub->flags & LWSMTFL_REPORT_HIST) { lws_metric_bucket_t *buck = pub->u.hist.head; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "%s_count %llu\n", nm, (unsigned long long) pub->u.hist.total_count); while (buck) { lws_strncpy(tmp, lws_metric_bucket_name(buck), sizeof(tmp)); p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "%s{%s} %llu\n", nm, tmp, (unsigned long long)buck->count); lws_metrics_om_ac_stash(pss, buf, lws_ptr_diff_size_t(p, buf)); p = buf; buck = buck->next; } goto happy; } if (!pub->u.agg.count[METRES_GO] && !pub->u.agg.count[METRES_NOGO]) return 0; if (pub->u.agg.count[METRES_GO]) p += lws_metrics_om_format_agg(pub, nm, t, METRES_GO, p, lws_ptr_diff_size_t(end, p)); if (!(pub->flags & LWSMTFL_REPORT_ONLY_GO) && pub->u.agg.count[METRES_NOGO]) p += lws_metrics_om_format_agg(pub, nm, t, METRES_NOGO, p, lws_ptr_diff_size_t(end, p)); if (pub->flags & LWSMTFL_REPORT_MEAN) p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "%s_min %llu\n" "%s_max %llu\n", nm, (unsigned long long)pub->u.agg.min, nm, (unsigned long long)pub->u.agg.max); happy: return lws_metrics_om_ac_stash(pss, buf, lws_ptr_diff_size_t(p, buf)); } static int append_om_metric(lws_metric_pub_t *pub, void *user) { struct pss *pss = (struct pss *)user; char nm[64]; size_t nl; /* * Convert lws_metrics to openmetrics metrics data, stashing into an * lwsac without backfill. Since it's not backfilling, use areas are in * linear sequence simplifying walking them. Limiting the lwsac alloc * to less than a typical mtu means we can write one per write * efficiently */ lws_strncpy(nm, pub->name, sizeof(nm)); nl = strlen(nm); openmetrics_san(nm, nl); return lws_metrics_om_format(pss, pub, nm); } #if defined(__linux__) static int grabfile(const char *fi, char *buf, size_t len) { int n, fd = lws_open(fi, LWS_O_RDONLY); buf[0] = '\0'; if (fd < 0) return -1; n = (int)read(fd, buf, len - 1); close(fd); if (n < 0) { buf[0] = '\0'; return -1; } buf[n] = '\0'; if (n > 0 && buf[n - 1] == '\n') buf[--n] = '\0'; return n; } #endif /* * Let's pregenerate the output into an lwsac all at once and * then spool it back to the peer afterwards * * - there's not going to be that much of it (a few kB) * - we then know the content-length for the headers * - it's stretchy to arbitrary numbers of metrics * - lwsac block list provides the per-metric structure to * hold the data in a way we can walk to write it simply */ int ome_prepare(struct lws_context *ctx, struct pss *pss) { char buf[1224], *start = buf + LWS_PRE, *p = start, *end = buf + sizeof(buf) - 1; char hn[64]; pss->tot = 0; /* * Target metadata */ hn[0] = '\0'; gethostname(hn, sizeof(hn) - 1); p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "# TYPE target info\n" "# HELP target Target metadata\n" "target_info{hostname=\"%s\"", hn); #if defined(__linux__) if (grabfile("/proc/self/cmdline", hn, sizeof(hn))) p += lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), ",cmdline=\"%s\"", hn); #endif p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "} 1\n"); if (lws_metrics_om_ac_stash(pss, (const char *)buf + LWS_PRE, lws_ptr_diff_size_t(p, buf + LWS_PRE))) return 1; /* lws version */ p = start; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "# TYPE lws_info info\n" "# HELP lws_info Version of lws producing this\n" "lws_info{version=\"%s\"} 1\n", LWS_BUILD_HASH); if (lws_metrics_om_ac_stash(pss, (const char *)buf + LWS_PRE, lws_ptr_diff_size_t(p, buf + LWS_PRE))) return 1; /* system scalars */ #if defined(__linux__) if (grabfile("/proc/loadavg", hn, sizeof(hn))) { char *sp = strchr(hn, ' '); if (sp) { p = start; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "load_1m %.*s\n", lws_ptr_diff(sp, hn), hn); if (lws_metrics_om_ac_stash(pss, (char *)buf + LWS_PRE, lws_ptr_diff_size_t(p, start))) return 1; } } #endif if (lws_metrics_foreach(ctx, pss, append_om_metric)) return 1; p = start; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "# EOF\n"); if (lws_metrics_om_ac_stash(pss, (char *)buf + LWS_PRE, lws_ptr_diff_size_t(p, buf + LWS_PRE))) return 1; pss->walk = pss->ac; return 0; } #if defined(LWS_WITH_SERVER) /* 1) direct http export for scraper */ static int callback_lws_openmetrics_export(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { unsigned char buf[1224], *start = buf + LWS_PRE, *p = start, *end = buf + sizeof(buf) - 1, *ip; struct lws_context *cx = lws_get_context(wsi); struct pss *pss = (struct pss *)user; unsigned int m, wm; switch (reason) { case LWS_CALLBACK_HTTP: ome_prepare(cx, pss); p = start; if (lws_add_http_common_headers(wsi, HTTP_STATUS_OK, "application/openmetrics-text; " "version=1.0.0; charset=utf-8", pss->tot, &p, end) || lws_finalize_write_http_header(wsi, start, &p, end)) return 1; lws_callback_on_writable(wsi); return 0; case LWS_CALLBACK_CLOSED_HTTP: lwsac_free(&pss->ac); break; case LWS_CALLBACK_HTTP_WRITEABLE: if (!pss->walk) return 0; do { ip = (uint8_t *)pss->walk + lwsac_sizeof(pss->walk == pss->ac) + LWS_PRE; m = (unsigned int)((ip[0] << 8) | ip[1]); /* coverity */ if (m > lwsac_get_tail_pos(pss->walk) - lwsac_sizeof(pss->walk == pss->ac)) return -1; if (lws_ptr_diff_size_t(end, p) < m) break; memcpy(p, ip + 2, m); p += m; pss->walk = lwsac_get_next(pss->walk); } while (pss->walk); if (!lws_ptr_diff_size_t(p, start)) { lwsl_err("%s: stuck\n", __func__); return -1; } wm = pss->walk ? LWS_WRITE_HTTP : LWS_WRITE_HTTP_FINAL; if (lws_write(wsi, start, lws_ptr_diff_size_t(p, start), (enum lws_write_protocol)wm) < 0) return 1; if (!pss->walk) { if (lws_http_transaction_completed(wsi)) return -1; } else lws_callback_on_writable(wsi); return 0; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } static struct pss * omc_lws_om_get_other_side_pss_client(struct vhd *vhd, struct pss *pss) { /* * Search through our partner's clients list looking for one with the * same proxy path */ lws_start_foreach_dll(struct lws_dll2 *, d, vhd->bind_partner_vhd->clients.head) { struct pss *apss = lws_container_of(d, struct pss, list); if (!strcmp(pss->proxy_path, apss->proxy_path)) return apss; } lws_end_foreach_dll(d); return NULL; } /* 2) "lws-openmetrics-prox-agg": http server export via proxy to connected clients */ static int callback_lws_openmetrics_prox_agg(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { unsigned char buf[1224], *start = buf + LWS_PRE, *p = start, *end = buf + sizeof(buf) - 1, *ip; struct vhd *vhd = (struct vhd *)lws_protocol_vh_priv_get( lws_get_vhost(wsi), lws_get_protocol(wsi)); struct lws_context *cx = lws_get_context(wsi); struct pss *pss = (struct pss *)user, *partner_pss; unsigned int m, wm; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: lwsl_notice("%s: PROTOCOL_INIT on %s\n", __func__, lws_vh_tag(lws_get_vhost(wsi))); /* * We get told what to do when we are bound to the vhost */ vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct vhd)); if (!vhd) { lwsl_err("%s: vhd alloc failed\n", __func__); return 0; } vhd->cx = cx; /* * Try to bind to the counterpart server in the proxy, binding * to the right one by having a common bind name set in a pvo. * We don't know who will get instantiated last, so both parts * try to bind if not already bound */ if (!lws_pvo_get_str(in, "proxy-side-bind-name", &vhd->proxy_side_bind_name)) { /* * Attempt to find the vhd that belongs to a vhost * that has instantiated protocol * "lws-openmetrics-prox-server", and has set pvo * "proxy-side-bind-name" on it to whatever our * vhd->proxy_side_bind_name was also set to. * * If found, inform the two sides of the same proxy * what their partner vhd is */ lws_strncpy(vhd->sanity, "isagg", sizeof(vhd->sanity)); vhd->bind_partner_vhd = lws_vhd_find_by_pvo(cx, "lws-openmetrics-prox-server", "proxy-side-bind-name", vhd->proxy_side_bind_name); if (vhd->bind_partner_vhd) { assert(!strcmp(vhd->bind_partner_vhd->sanity, "isws")); lwsl_notice("%s: proxy binding OK\n", __func__); vhd->bind_partner_vhd->bind_partner_vhd = vhd; } } else { lwsl_warn("%s: proxy-side-bind-name required\n", __func__); return 0; } break; case LWS_CALLBACK_PROTOCOL_DESTROY: if (vhd) lws_sul_cancel(&vhd->sul); break; case LWS_CALLBACK_HTTP: /* * The scraper has connected to us, the local side of the proxy, * we need to match what it wants to */ if (!vhd->bind_partner_vhd) return 0; lws_strnncpy(pss->proxy_path, (const char *)in, len, sizeof(pss->proxy_path)); if (pss->list.owner) { lwsl_warn("%s: double HTTP?\n", __func__); return 0; } pss->wsi = wsi; lws_start_foreach_dll(struct lws_dll2 *, d, vhd->bind_partner_vhd->clients.head) { struct pss *apss = lws_container_of(d, struct pss, list); if (!strcmp((const char *)in, apss->proxy_path)) { apss->trigger = 1; lws_callback_on_writable(apss->wsi); /* let's add him on the http server vhd list */ lws_dll2_add_tail(&pss->list, &vhd->clients); return 0; } } lws_end_foreach_dll(d); return 0; case LWS_CALLBACK_CLOSED_HTTP: lwsac_free(&pss->ac); lws_dll2_remove(&pss->list); break; case LWS_CALLBACK_HTTP_WRITEABLE: if (!pss->walk) return 0; /* locate the wss side if it's still around */ partner_pss = omc_lws_om_get_other_side_pss_client(vhd, pss); if (!partner_pss) return -1; do { ip = (uint8_t *)pss->walk + lwsac_sizeof(pss->walk == partner_pss->ac) + LWS_PRE; m = (unsigned int)((ip[0] << 8) | ip[1]); /* coverity */ if (m > lwsac_get_tail_pos(pss->walk) - lwsac_sizeof(pss->walk == partner_pss->ac)) return -1; if (lws_ptr_diff_size_t(end, p) < m) break; memcpy(p, ip + 2, m); p += m; pss->walk = lwsac_get_next(pss->walk); } while (pss->walk); if (!lws_ptr_diff_size_t(p, start)) { lwsl_err("%s: stuck\n", __func__); return -1; } wm = pss->walk ? LWS_WRITE_HTTP : LWS_WRITE_HTTP_FINAL; if (lws_write(wsi, start, lws_ptr_diff_size_t(p, start), (enum lws_write_protocol)wm) < 0) return 1; if (!pss->walk) { lwsl_info("%s: whole msg proxied to scraper\n", __func__); lws_dll2_remove(&pss->list); lwsac_free(&partner_pss->ac); // if (lws_http_transaction_completed(wsi)) return -1; } else lws_callback_on_writable(wsi); return 0; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } /* 3) "lws-openmetrics-prox-server": ws server side of metrics proxy, for * ws clients to connect to */ static int callback_lws_openmetrics_prox_server(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { unsigned char buf[1224], *start = buf + LWS_PRE, *p = start, *end = buf + sizeof(buf) - 1; struct vhd *vhd = (struct vhd *)lws_protocol_vh_priv_get( lws_get_vhost(wsi), lws_get_protocol(wsi)); struct lws_context *cx = lws_get_context(wsi); struct pss *pss = (struct pss *)user, *partner_pss; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: /* * We get told what to do when we are bound to the vhost */ lwsl_notice("%s: PROTOCOL_INIT on %s\n", __func__, lws_vh_tag(lws_get_vhost(wsi))); vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct vhd)); if (!vhd) { lwsl_err("%s: vhd alloc failed\n", __func__); return 0; } vhd->cx = cx; /* * Try to bind to the counterpart server in the proxy, binding * to the right one by having a common bind name set in a pvo. * We don't know who will get instantiated last, so both parts * try to bind if not already bound */ if (!lws_pvo_get_str(in, "proxy-side-bind-name", &vhd->proxy_side_bind_name)) { /* * Attempt to find the vhd that belongs to a vhost * that has instantiated protocol * "lws-openmetrics-prox-server", and has set pvo * "proxy-side-bind-name" on it to whatever our * vhd->proxy_side_bind_name was also set to. * * If found, inform the two sides of the same proxy * what their partner vhd is */ lws_strncpy(vhd->sanity, "isws", sizeof(vhd->sanity)); vhd->bind_partner_vhd = lws_vhd_find_by_pvo(cx, "lws-openmetrics-prox-agg", "proxy-side-bind-name", vhd->proxy_side_bind_name); if (vhd->bind_partner_vhd) { assert(!strcmp(vhd->bind_partner_vhd->sanity, "isagg")); lwsl_notice("%s: proxy binding OK\n", __func__); vhd->bind_partner_vhd->bind_partner_vhd = vhd; } } else { lwsl_warn("%s: proxy-side-bind-name required\n", __func__); return 0; } break; case LWS_CALLBACK_PROTOCOL_DESTROY: break; case LWS_CALLBACK_ESTABLISHED: /* * a client has joined... we need to add his pss to our list * of live, joined clients */ /* mark us as waiting for the reference name from the client */ pss->greet = 1; pss->wsi = wsi; lws_validity_confirmed(wsi); return 0; case LWS_CALLBACK_CLOSED: /* * a client has parted */ lws_dll2_remove(&pss->list); lwsl_warn("%s: client %s left (%u)\n", __func__, pss->proxy_path, (unsigned int)vhd->clients.count); lwsac_free(&pss->ac); /* let's kill the scraper connection accordingly, if still up */ partner_pss = omc_lws_om_get_other_side_pss_client(vhd, pss); if (partner_pss) lws_wsi_close(partner_pss->wsi, LWS_TO_KILL_ASYNC); break; case LWS_CALLBACK_RECEIVE: if (pss->greet) { pss->greet = 0; lws_strnncpy(pss->proxy_path, (const char *)in, len, sizeof(pss->proxy_path)); lws_validity_confirmed(wsi); lwsl_notice("%s: received greet '%s'\n", __func__, pss->proxy_path); /* * we need to add his pss to our list of configured, * live, joined clients */ lws_dll2_add_tail(&pss->list, &vhd->clients); return 0; } /* * He's sending us his results... let's collect chunks into the * pss lwsac before worrying about anything else */ if (lws_is_first_fragment(wsi)) pss->tot = 0; lws_metrics_om_ac_stash(pss, (const char *)in, len); if (lws_is_final_fragment(wsi)) { struct pss *partner_pss; lwsl_info("%s: ws side received complete msg\n", __func__); /* the lwsac is complete */ pss->walk = pss->ac; partner_pss = omc_lws_om_get_other_side_pss_client(vhd, pss); if (!partner_pss) { lwsl_notice("%s: no partner A\n", __func__); return -1; } /* indicate to scraper side we want to issue now */ p = start; if (lws_add_http_common_headers(partner_pss->wsi, HTTP_STATUS_OK, "application/openmetrics-text; " "version=1.0.0; charset=utf-8", pss->tot, &p, end) || lws_finalize_write_http_header(partner_pss->wsi, start, &p, end)) return -1; /* indicate to scraper side we want to issue now */ partner_pss->walk = pss->ac; partner_pss->trigger = 1; lws_callback_on_writable(partner_pss->wsi); } return 0; case LWS_CALLBACK_SERVER_WRITEABLE: if (!pss->trigger) return 0; pss->trigger = 0; partner_pss = omc_lws_om_get_other_side_pss_client(vhd, pss); if (!partner_pss) { lwsl_err("%s: no partner\n", __func__); return 0; } lwsl_info("%s: sending trigger to client\n", __func__); *start = 'x'; if (lws_write(wsi, start, 1, (enum lws_write_protocol)LWS_WRITE_TEXT) < 0) return 1; lws_validity_confirmed(wsi); return 0; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } #endif #if defined(LWS_WITH_CLIENT) && defined(LWS_ROLE_WS) /* 4) ws client that keeps wss connection up to metrics proxy ws server */ static int callback_lws_openmetrics_prox_client(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { unsigned char buf[1224], *start = buf + LWS_PRE, *p = start, *end = buf + sizeof(buf) - 1, *ip; struct vhd *vhd = (struct vhd *)lws_protocol_vh_priv_get( lws_get_vhost(wsi), lws_get_protocol(wsi)); struct lws_context *cx = lws_get_context(wsi); struct pss *pss = (struct pss *)user; unsigned int m, wm; const char *cp; char first; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: lwsl_notice("%s: PROTOCOL_INIT on %s\n", __func__, lws_vh_tag(lws_get_vhost(wsi))); /* * We get told what to do when we are bound to the vhost */ vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct vhd)); if (!vhd) return 0; vhd->cx = cx; vhd->vhost = lws_get_vhost(wsi); /* the proxy server uri */ if (lws_pvo_get_str(in, "ws-server-uri", &cp) || !cp) { lwsl_warn("%s: ws-server-uri pvo required\n", __func__); return 0; } lws_strncpy(vhd->ws_server_uri, cp, sizeof(vhd->ws_server_uri)); /* how we should be referenced at the proxy */ if (lws_pvo_get_str(in, "metrics-proxy-path", &cp)) { lwsl_err("%s: metrics-proxy-path pvo required\n", __func__); return 1; } lws_strncpy(vhd->metrics_proxy_path, cp, sizeof(vhd->metrics_proxy_path)); /* the shared secret to authenticate us as allowed to join */ if (lws_pvo_get_str(in, "ba-secret", &cp)) { lwsl_err("%s: ba-secret pvo required\n", __func__); return 1; } lws_strncpy(vhd->ba_secret, cp, sizeof(vhd->ba_secret)); lwsl_notice("%s: scheduling connect %s %s %s\n", __func__, vhd->ws_server_uri, vhd->metrics_proxy_path, vhd->ba_secret); lws_validity_confirmed(wsi); lws_sul_schedule(cx, 0, &vhd->sul, omc_connect_client, 1); break; case LWS_CALLBACK_PROTOCOL_DESTROY: if (vhd) lws_sul_cancel(&vhd->sul); break; case LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER: { unsigned char **pp = (unsigned char **)in, *pend = (*pp) + len; char b[128]; /* authorize ourselves to the metrics proxy using basic auth */ if (lws_http_basic_auth_gen("metricsclient", vhd->ba_secret, b, sizeof(b))) break; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_AUTHORIZATION, (unsigned char *)b, (int)strlen(b), pp, pend)) return -1; break; } case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); goto do_retry; case LWS_CALLBACK_CLIENT_ESTABLISHED: lwsl_warn("%s: connected to ws metrics agg server\n", __func__); pss->greet = 1; lws_callback_on_writable(wsi); lws_validity_confirmed(wsi); return 0; case LWS_CALLBACK_CLIENT_CLOSED: lwsl_notice("%s: client closed\n", __func__); lwsac_free(&pss->ac); goto do_retry; case LWS_CALLBACK_CLIENT_RECEIVE: /* * Proxy serverside sends us something to trigger us to create * our metrics message and send it back over the ws link */ ome_prepare(cx, pss); pss->walk = pss->ac; lws_callback_on_writable(wsi); lwsl_info("%s: dump requested\n", __func__); break; case LWS_CALLBACK_CLIENT_WRITEABLE: if (pss->greet) { /* * At first after establishing the we link, we send a * message indicating to the metrics proxy how we * should be referred to by the scraper to particularly * select to talk to us */ lwsl_info("%s: sending greet '%s'\n", __func__, vhd->metrics_proxy_path); lws_strncpy((char *)start, vhd->metrics_proxy_path, sizeof(buf) - LWS_PRE); if (lws_write(wsi, start, strlen(vhd->metrics_proxy_path), LWS_WRITE_TEXT) < 0) return 1; lws_validity_confirmed(wsi); pss->greet = 0; return 0; } if (!pss->walk) return 0; /* * We send the metrics dump in a single logical ws message, * using ws fragmentation to split it around 1 mtu boundary * and keep coming back until it's finished */ first = pss->walk == pss->ac; do { ip = (uint8_t *)pss->walk + lwsac_sizeof(pss->walk == pss->ac) + LWS_PRE; m = (unsigned int)((ip[0] << 8) | ip[1]); /* coverity */ if (m > lwsac_get_tail_pos(pss->walk) - lwsac_sizeof(pss->walk == pss->ac)) { lwsl_err("%s: size blow\n", __func__); return -1; } if (lws_ptr_diff_size_t(end, p) < m) break; memcpy(p, ip + 2, m); p += m; pss->walk = lwsac_get_next(pss->walk); } while (pss->walk); if (!lws_ptr_diff_size_t(p, start)) { lwsl_err("%s: stuck\n", __func__); return -1; } wm = (unsigned int)lws_write_ws_flags(LWS_WRITE_TEXT, first, !pss->walk); if (lws_write(wsi, start, lws_ptr_diff_size_t(p, start), (enum lws_write_protocol)wm) < 0) { lwsl_notice("%s: write fail\n", __func__); return 1; } lws_validity_confirmed(wsi); lwsl_info("%s: forwarded %d\n", __func__, lws_ptr_diff(p, start)); if (!pss->walk) { lwsl_info("%s: dump send completed\n", __func__); lwsac_free(&pss->ac); } else lws_callback_on_writable(wsi); return 0; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); do_retry: if (!lws_retry_sul_schedule(cx, 0, &vhd->sul, &retry, omc_connect_client, &vhd->retry_count)) return 0; vhd->retry_count = 0; lws_retry_sul_schedule(cx, 0, &vhd->sul, &retry, omc_connect_client, &vhd->retry_count); return 0; } #endif LWS_VISIBLE const struct lws_protocols lws_openmetrics_export_protocols[] = { #if defined(LWS_WITH_SERVER) { /* for scraper directly: http export on listen socket */ "lws-openmetrics", callback_lws_openmetrics_export, sizeof(struct pss), 1024, 0, NULL, 0 }, { /* for scraper via ws proxy: http export on listen socket */ "lws-openmetrics-prox-agg", callback_lws_openmetrics_prox_agg, sizeof(struct pss), 1024, 0, NULL, 0 }, { /* metrics proxy server side: ws server for clients to connect to */ "lws-openmetrics-prox-server", callback_lws_openmetrics_prox_server, sizeof(struct pss), 1024, 0, NULL, 0 }, #endif #if defined(LWS_WITH_CLIENT) && defined(LWS_ROLE_WS) { /* client to metrics proxy: ws client to connect to metrics proxy*/ "lws-openmetrics-prox-client", callback_lws_openmetrics_prox_client, sizeof(struct pss), 1024, 0, NULL, 0 }, #endif }; LWS_VISIBLE const lws_plugin_protocol_t lws_openmetrics_export = { .hdr = { "lws OpenMetrics export", "lws_protocol_plugin", LWS_BUILD_HASH, LWS_PLUGIN_API_MAGIC }, .protocols = lws_openmetrics_export_protocols, .count_protocols = LWS_ARRAY_SIZE(lws_openmetrics_export_protocols), }; libwebsockets-4.3.5/plugins/protocol_lws_raw_test.c000066400000000000000000000172101476025525100226560ustar00rootroot00000000000000/* * ws protocol handler plugin for testing raw file and raw socket * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * These test plugins are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. * * This plugin test both raw file descriptors and raw socket descriptors. It * can test both or just one depending on how you configure it. libwebsockets- * test-server-v2.0 is set up to test both. * * RAW File Descriptor Testing * =========================== * * Enable on a vhost like this * * "protocol-lws-raw-test": { * "status": "ok", * "fifo-path": "/tmp/lws-test-raw" * }, * * Then you can feed it data through the FIFO like this * * $ sudo sh -c "echo hello > /tmp/lws-test-raw" * * This plugin simply prints the data. But it does it through the lws event * loop / service poll. * * * RAW Socket Descriptor Testing * ============================= * * 1) You must give the vhost the option flag * LWS_SERVER_OPTION_FALLBACK_TO_APPLY_LISTEN_ACCEPT_CONFIG * * 2) Enable on a vhost like this * * "protocol-lws-raw-test": { * "status": "ok", * "raw": "1" * }, * * The "raw" pvo marks this protocol as being used for RAW connections. * * 3) Run libwebsockets-test-server-v2.0 and connect to it by telnet, eg * * telnet 127.0.0.1 7681 * * type something that isn't a valid HTTP method and enter, before the * connection times out. The connection will switch to RAW mode using this * protocol, and pass the unused rx as a raw RX callback. * * The test protocol echos back what was typed on telnet to telnet. */ #if !defined (LWS_PLUGIN_STATIC) #if !defined(LWS_DLL) #define LWS_DLL #endif #if !defined(LWS_INTERNAL) #define LWS_INTERNAL #endif #include #endif #include #include #include struct per_vhost_data__raw_test { struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; char fifo_path[100]; int fifo; char zero_length_read; }; struct per_session_data__raw_test { int number; unsigned char buf[128]; int len; }; static int callback_raw_test(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__raw_test *pss = (struct per_session_data__raw_test *)user; struct per_vhost_data__raw_test *vhd = (struct per_vhost_data__raw_test *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); lws_sock_file_fd_type u; (void)pss; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__raw_test)); if (!vhd) return 0; vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); { const struct lws_protocol_vhost_options *pvo = (const struct lws_protocol_vhost_options *)in; while (pvo) { if (!strcmp(pvo->name, "fifo-path")) lws_strncpy(vhd->fifo_path, pvo->value, sizeof(vhd->fifo_path)); pvo = pvo->next; } if (vhd->fifo_path[0] == '\0') { lwsl_warn("%s: Missing pvo \"fifo-path\", " "raw file fd testing disabled\n", __func__); break; } } unlink(vhd->fifo_path); if (mkfifo(vhd->fifo_path, 0666)) { lwsl_err("mkfifo failed\n"); return 1; } vhd->fifo = lws_open(vhd->fifo_path, O_NONBLOCK | O_RDONLY); if (vhd->fifo == -1) { lwsl_err("opening fifo failed\n"); unlink(vhd->fifo_path); return 1; } lwsl_notice("FIFO %s created\n", vhd->fifo_path); u.filefd = vhd->fifo; if (!lws_adopt_descriptor_vhost(vhd->vhost, LWS_ADOPT_RAW_FILE_DESC, u, "protocol-lws-raw-test", NULL)) { lwsl_err("Failed to adopt fifo descriptor\n"); close(vhd->fifo); unlink(vhd->fifo_path); return 1; } break; case LWS_CALLBACK_PROTOCOL_DESTROY: if (!vhd) break; if (vhd->fifo >= 0) { close(vhd->fifo); unlink(vhd->fifo_path); } break; /* * Callbacks related to Raw file descriptor testing */ case LWS_CALLBACK_RAW_ADOPT_FILE: lwsl_notice("LWS_CALLBACK_RAW_ADOPT_FILE\n"); break; case LWS_CALLBACK_RAW_RX_FILE: lwsl_notice("LWS_CALLBACK_RAW_RX_FILE\n"); { char buf[256]; int n; n = (int)read(vhd->fifo, buf, sizeof(buf) - 1); if (n < 0) { lwsl_err("FIFO read failed\n"); return 1; } /* * When nobody opened the other side of the FIFO, the * FIFO fd acts well and only signals POLLIN when * somebody opened and wrote to it. * * But if the other side of the FIFO closed it, we will * see an endless POLLIN and 0 available to read. * * The only way to handle it is to reopen the FIFO our * side and wait for a new peer. This is a quirk of * FIFOs not of LWS. */ if (n == 0) { /* peer closed - reopen in close processing */ vhd->zero_length_read = 1; return 1; } buf[n] = '\0'; lwsl_info("read %d\n", n); puts(buf); } break; case LWS_CALLBACK_RAW_CLOSE_FILE: lwsl_notice("LWS_CALLBACK_RAW_CLOSE_FILE\n"); if (vhd->zero_length_read) { vhd->zero_length_read = 0; close(vhd->fifo); /* the wsi that adopted the fifo file is closing... * reopen the fifo and readopt */ vhd->fifo = lws_open(vhd->fifo_path, O_NONBLOCK | O_RDONLY); if (vhd->fifo == -1) { lwsl_err("opening fifo failed\n"); return 1; } lwsl_notice("FIFO %s reopened\n", vhd->fifo_path); u.filefd = vhd->fifo; if (!lws_adopt_descriptor_vhost(vhd->vhost, 0, u, "protocol-lws-raw-test", NULL)) { lwsl_err("Failed to adopt fifo descriptor\n"); close(vhd->fifo); return 1; } } break; case LWS_CALLBACK_RAW_WRITEABLE_FILE: lwsl_notice("LWS_CALLBACK_RAW_WRITEABLE_FILE\n"); break; /* * Callbacks related to Raw socket descriptor testing */ case LWS_CALLBACK_RAW_ADOPT: lwsl_notice("LWS_CALLBACK_RAW_ADOPT\n"); break; case LWS_CALLBACK_RAW_RX: lwsl_notice("LWS_CALLBACK_RAW_RX %ld\n", (long)len); if (len > sizeof(pss->buf)) len = sizeof(pss->buf); memcpy(pss->buf, in, len); pss->len = (int)len; lws_callback_on_writable(wsi); break; case LWS_CALLBACK_RAW_CLOSE: lwsl_notice("LWS_CALLBACK_RAW_CLOSE\n"); break; case LWS_CALLBACK_RAW_WRITEABLE: lwsl_notice("LWS_CALLBACK_RAW_WRITEABLE\n"); lws_write(wsi, pss->buf, (size_t)pss->len, LWS_WRITE_HTTP); break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_RAW_TEST \ { \ "protocol-lws-raw-test", \ callback_raw_test, \ sizeof(struct per_session_data__raw_test), \ 1024, /* rx buf size must be >= permessage-deflate rx size */ 0, NULL, 0\ } #if !defined (LWS_PLUGIN_STATIC) LWS_VISIBLE const struct lws_protocols lws_raw_test_protocols[] = { LWS_PLUGIN_PROTOCOL_RAW_TEST }; LWS_VISIBLE const lws_plugin_protocol_t lws_raw_test = { .hdr = { "lws raw test", "lws_protocol_plugin", LWS_BUILD_HASH, LWS_PLUGIN_API_MAGIC }, .protocols = lws_raw_test_protocols, .count_protocols = LWS_ARRAY_SIZE(lws_raw_test_protocols), .extensions = NULL, .count_extensions = 0, }; #endif libwebsockets-4.3.5/plugins/protocol_lws_sshd_demo.c000066400000000000000000000265241476025525100230030ustar00rootroot00000000000000/* * ws protocol handler plugin for sshd demo * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * These test plugins are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. */ #if !defined (LWS_PLUGIN_STATIC) #if !defined(LWS_DLL) #define LWS_DLL #endif #if !defined(LWS_INTERNAL) #define LWS_INTERNAL #endif #include #endif #include #include #include #include #include #define TEST_SERVER_KEY_PATH "/etc/lws-test-sshd-server-key" struct per_vhost_data__lws_sshd_demo { const struct lws_protocols *ssh_base_protocol; int privileged_fd; }; /* * This is a copy of the lws ssh test public key, you can find it in * /usr[/local]/share/libwebsockets-test-server/lws-ssh-test-keys.pub * and the matching private key there too in .../lws-ssh-test-keys * * If the vhost with this protocol is using localhost:2222, you can test with * the matching private key like this: * * ssh -p 2222 -i /usr/local/share/libwebsockets-test-server/lws-ssh-test-keys anyuser@127.0.0.1 * * These keys are distributed for testing! Don't use them on a real system * unless you want anyone with a copy of lws to access it. */ static const char *authorized_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCnWiP+c+kSD6Lk+C6NA9KruApa45sbt" "94/dxT0bCITlAA/+PBk6mR1lwWgXYozOMdrHrqx34piqDyXnc4HabqCaOm/FrYhkCPL8z" "a26PMYqteSosuwKv//5iT6ZWhNnsMwExBwtV6MIq0MxAeWqxRnYNWpNM8iN6sFzkdG/YF" "dyHrIBTgwzM77NLCMl6GEkJErRCFppC2SwYxGa3BRrgUwX3LkV8HpMIaYHFo1Qgj7Scqm" "HwS2R75SOqi2aOWDpKjznARg9JgzDWSQi4seBMV2oL0BTwJANSDf+p0sQLsaKGJhpVpBQ" "yS2wUeyuGyytupWzEluQrajMZq52iotcogv5BfeulfTTFbJP4kuHOsSP0lsQ2lpMDQANS" "HEvXxzHJLDLXM9gXJzwJ+ZiRt6R+bfmP1nfN3MiWtxcIbBanWwQK6xTCKBe4wPaKta5EU" "6wsLPeakOIVzoeaOu/HsbtPZlwX0Mu/oUFcfKyKAhlkU15MOAIEfUPo8Yh52bWMlIlpZa" "4xWbLMGw3GrsrPPdcsAauyqvY4/NjjWQbWhP1SuUfvv5709PIiOUjVKK2HUwmR1ouch6X" "MQGXfMR1h1Wjvc+bkNs17gCIrQnFilAZLC3Sm3Opiz/4LO99Hw448G0RM2vQn0mJE46w" "Eu/B10U6Jf4Efojhh1dk85BD1LTIb+N3Q== ssh-test-key@lws"; enum states { SSH_TEST_GREET, SSH_TEST_PRESSED, SSH_TEST_DONE, }; static const char * const strings[] = { /* SSH_TEST_GREET */ "Thanks for logging to lws sshd server demo.\n\r" "\n\r" "This demo is very simple, it waits for you to press\n\r" "a key, and acknowledges it. Then press another key\n\r" "and it will exit. But actually that demos the basic\n\r" "sshd functions underneath. You can use the ops struct\n\r" "members to add a pty / shell or whatever you want.\n\r" "\n\r" "Press a key...\n\r", /* SSH_TEST_PRESSED */ "Thanks for pressing a key. Press another to exit.\n\r", /* SSH_TEST_DONE */ "Bye!\n\r" }; struct sshd_instance_priv { struct lws *wsi; enum states state; const char *ptr; int pos; int len; }; static void enter_state(struct sshd_instance_priv *priv, enum states state) { priv->state = state; priv->ptr = strings[state]; priv->pos = 0; priv->len = (int)strlen(priv->ptr); lws_callback_on_writable(priv->wsi); } /* ops: channel lifecycle */ static int ssh_ops_channel_create(struct lws *wsi, void **_priv) { struct sshd_instance_priv *priv; priv = malloc(sizeof(struct sshd_instance_priv)); *_priv = priv; if (!priv) return 1; memset(priv, 0, sizeof(*priv)); priv->wsi = wsi; return 0; } static int ssh_ops_channel_destroy(void *_priv) { struct sshd_instance_priv *priv = _priv; free(priv); return 0; } /* ops: IO */ static int ssh_ops_tx_waiting(void *_priv) { struct sshd_instance_priv *priv = _priv; if (priv->state == SSH_TEST_DONE && priv->pos == priv->len) return -1; /* exit */ if (priv->pos != priv->len) return LWS_STDOUT; return 0; } static size_t ssh_ops_tx(void *_priv, int stdch, uint8_t *buf, size_t len) { struct sshd_instance_priv *priv = _priv; size_t chunk = len; if (stdch != LWS_STDOUT) return 0; if ((size_t)(priv->len - priv->pos) < chunk) chunk = (size_t)(priv->len - priv->pos); if (!chunk) return 0; memcpy(buf, priv->ptr + priv->pos, chunk); priv->pos += (int)chunk; if (priv->state == SSH_TEST_DONE && priv->pos == priv->len) { /* * we are sending the last thing we want to send * before exiting. Make it ask again at ssh_ops_tx_waiting() * and we will exit then, after this has been sent */ lws_callback_on_writable(priv->wsi); } return chunk; } static int ssh_ops_rx(void *_priv, struct lws *wsi, const uint8_t *buf, uint32_t len) { struct sshd_instance_priv *priv = _priv; if (priv->state < SSH_TEST_DONE) enter_state(priv, priv->state + 1); else return -1; return 0; } /* ops: storage for the (autogenerated) persistent server key */ static size_t ssh_ops_get_server_key(struct lws *wsi, uint8_t *buf, size_t len) { struct per_vhost_data__lws_sshd_demo *vhd = (struct per_vhost_data__lws_sshd_demo *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); int n; if (lseek(vhd->privileged_fd, 0, SEEK_SET) < 0) return 0; n = (int)read(vhd->privileged_fd, buf, (unsigned int)len); if (n < 0) { lwsl_err("%s: read failed: %d\n", __func__, n); n = 0; } return (size_t)n; } static size_t ssh_ops_set_server_key(struct lws *wsi, uint8_t *buf, size_t len) { struct per_vhost_data__lws_sshd_demo *vhd = (struct per_vhost_data__lws_sshd_demo *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); int n; n = (int)write(vhd->privileged_fd, buf, (unsigned int)len); if (n < 0) { lwsl_err("%s: read failed: %d\n", __func__, errno); n = 0; } return (size_t)n; } /* ops: auth */ static int ssh_ops_is_pubkey_authorized(const char *username, const char *type, const uint8_t *peer, int peer_len) { char *aps, *p, *ps; int n = (int)strlen(type), alen = 2048, ret = 2, len; size_t s = 0; lwsl_info("%s: checking pubkey for %s\n", __func__, username); s = strlen(authorized_key) + 1; aps = malloc(s); if (!aps) { lwsl_notice("OOM 1\n"); goto bail_p1; } memcpy(aps, authorized_key, s); /* we only understand RSA */ if (strcmp(type, "ssh-rsa")) { lwsl_notice("type is not ssh-rsa\n"); goto bail_p1; } p = aps; if (strncmp(p, type, (unsigned int)n)) { lwsl_notice("lead-in string does not match %s\n", type); goto bail_p1; } p += n; if (*p != ' ') { lwsl_notice("missing space at end of lead-in\n"); goto bail_p1; } p++; ps = malloc((unsigned int)alen); if (!ps) { lwsl_notice("OOM 2\n"); free(aps); goto bail; } len = lws_b64_decode_string(p, ps, alen); free(aps); if (len < 0) { lwsl_notice("key too big\n"); goto bail; } if (peer_len > len) { lwsl_notice("peer_len %d bigger than decoded len %d\n", peer_len, len); goto bail; } /* * once we are past that, it's the same name * EN that the peer sends us */ if (memcmp(peer, ps, (unsigned int)peer_len)) { lwsl_info("%s: factors mismatch, rejecting key\n", __func__); goto bail; } lwsl_info("pubkey authorized\n"); ret = 0; bail: free(ps); return ret; bail_p1: if (aps) free(aps); return 1; } static int ssh_ops_shell(void *_priv, struct lws *wsi, lws_ssh_finish_exec finish, void *finish_handle) { struct sshd_instance_priv *priv = _priv; /* for this demo, we don't open a real shell */ enter_state(priv, SSH_TEST_GREET); return 0; } /* ops: banner */ static size_t ssh_ops_banner(char *buf, size_t max_len, char *lang, size_t max_lang_len) { int n = lws_snprintf(buf, max_len, "\n" " |\\---/| lws-ssh Test Server\n" " | o_o | SSH Terminal Server\n" " \\_^_/ Copyright (C) 2017 Crash Barrier Ltd\n\n"); lws_snprintf(lang, max_lang_len, "en/US"); return (size_t)n; } static void ssh_ops_disconnect_reason(uint32_t reason, const char *desc, const char *desc_lang) { lwsl_notice("DISCONNECT reason 0x%X, %s (lang %s)\n", reason, desc, desc_lang); } static const struct lws_ssh_ops ssh_ops = { .channel_create = ssh_ops_channel_create, .channel_destroy = ssh_ops_channel_destroy, .tx_waiting = ssh_ops_tx_waiting, .tx = ssh_ops_tx, .rx = ssh_ops_rx, .get_server_key = ssh_ops_get_server_key, .set_server_key = ssh_ops_set_server_key, .set_env = NULL, .pty_req = NULL, .child_process_io = NULL, .child_process_terminated = NULL, .exec = NULL, .shell = ssh_ops_shell, .is_pubkey_authorized = ssh_ops_is_pubkey_authorized, .banner = ssh_ops_banner, .disconnect_reason = ssh_ops_disconnect_reason, .server_string = "SSH-2.0-Libwebsockets", .api_version = 2, }; static int callback_lws_sshd_demo(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_vhost_data__lws_sshd_demo *vhd = (struct per_vhost_data__lws_sshd_demo *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__lws_sshd_demo)); if (!vhd) return 0; /* * During this we still have the privs / caps we were started * with. So open an fd on the server key, either just for read * or for creat / trunc if doesn't exist. This allows us to * deal with it down /etc/.. when just after this we will lose * the privileges needed to read / write /etc/... */ vhd->privileged_fd = lws_open(TEST_SERVER_KEY_PATH, O_RDONLY); if (vhd->privileged_fd == -1) vhd->privileged_fd = lws_open(TEST_SERVER_KEY_PATH, O_CREAT | O_TRUNC | O_RDWR, 0600); if (vhd->privileged_fd == -1) { lwsl_warn("%s: Can't open %s\n", __func__, TEST_SERVER_KEY_PATH); return 0; } break; case LWS_CALLBACK_PROTOCOL_DESTROY: if (vhd) close(vhd->privileged_fd); break; case LWS_CALLBACK_VHOST_CERT_AGING: break; case LWS_CALLBACK_EVENT_WAIT_CANCELLED: break; default: if (!vhd->ssh_base_protocol) { vhd->ssh_base_protocol = lws_vhost_name_to_protocol( lws_get_vhost(wsi), "lws-ssh-base"); if (vhd->ssh_base_protocol) user = lws_adjust_protocol_psds(wsi, vhd->ssh_base_protocol->per_session_data_size); } if (vhd->ssh_base_protocol) return vhd->ssh_base_protocol->callback(wsi, reason, user, in, len); else lwsl_notice("can't find lws-ssh-base\n"); break; } return 0; } #define LWS_PLUGIN_PROTOCOL_LWS_SSHD_DEMO \ { \ "lws-sshd-demo", \ callback_lws_sshd_demo, \ 0, \ 1024, /* rx buf size must be >= permessage-deflate rx size */ \ 0, (void *)&ssh_ops, 0 \ } #if !defined (LWS_PLUGIN_STATIC) LWS_VISIBLE const struct lws_protocols lws_sshd_demo_protocols[] = { LWS_PLUGIN_PROTOCOL_LWS_SSHD_DEMO }; LWS_VISIBLE const lws_plugin_protocol_t lws_sshd_demo = { .hdr = { "lws sshd demo", "lws_protocol_plugin", LWS_BUILD_HASH, LWS_PLUGIN_API_MAGIC }, .protocols = lws_sshd_demo_protocols, .count_protocols = LWS_ARRAY_SIZE(lws_sshd_demo_protocols), .extensions = NULL, .count_extensions = 0, }; #endif libwebsockets-4.3.5/plugins/protocol_lws_status.c000066400000000000000000000151301476025525100223500ustar00rootroot00000000000000/* * libwebsockets-test-server - libwebsockets test implementation * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * The test apps are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. */ #if !defined (LWS_PLUGIN_STATIC) #if !defined(LWS_DLL) #define LWS_DLL #endif #if !defined(LWS_INTERNAL) #define LWS_INTERNAL #endif #include #endif #include #include #ifdef WIN32 #include #include #endif typedef enum { WALK_NONE, WALK_INITIAL, WALK_LIST, WALK_FINAL } e_walk; struct per_session_data__lws_status { struct per_session_data__lws_status *next; struct lws *wsi; time_t time_est; char user_agent[256]; e_walk walk; struct per_session_data__lws_status *walk_next; unsigned char subsequent:1; unsigned char changed_partway:1; unsigned char wss_over_h2:1; }; struct per_vhost_data__lws_status { struct per_session_data__lws_status *live_pss_list; struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; int count_live_pss; }; static void trigger_resend(struct per_vhost_data__lws_status *vhd) { lws_start_foreach_ll(struct per_session_data__lws_status *, pss, vhd->live_pss_list) { if (pss->walk == WALK_NONE) { pss->subsequent = 0; pss->walk_next = vhd->live_pss_list; pss->walk = WALK_INITIAL; } else pss->changed_partway = 1; } lws_end_foreach_ll(pss, next); lws_callback_on_writable_all_protocol(vhd->context, vhd->protocol); } /* lws-status protocol */ int callback_lws_status(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__lws_status *pss = (struct per_session_data__lws_status *)user; struct per_vhost_data__lws_status *vhd = (struct per_vhost_data__lws_status *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); char buf[LWS_PRE + 384], ip[24], *start = buf + LWS_PRE - 1, *p = start, *end = buf + sizeof(buf) - 1; int n, m; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__lws_status)); if (!vhd) { lwsl_notice("%s: PROTOCOL_INIT failed\n", __func__); return 0; } vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); break; case LWS_CALLBACK_ESTABLISHED: /* * This shows how to stage sending a single ws message in * multiple fragments. In this case, it lets us trade off * memory needed to make the data vs time to send it. */ vhd->count_live_pss++; pss->next = vhd->live_pss_list; vhd->live_pss_list = pss; pss->wss_over_h2 = !!len; time(&pss->time_est); pss->wsi = wsi; #if defined(LWS_WITH_HTTP_UNCOMMON_HEADERS) if (lws_hdr_copy(wsi, pss->user_agent, sizeof(pss->user_agent), WSI_TOKEN_HTTP_USER_AGENT) < 0) /* too big */ #endif strcpy(pss->user_agent, "unknown"); trigger_resend(vhd); break; case LWS_CALLBACK_SERVER_WRITEABLE: switch (pss->walk) { case WALK_INITIAL: n = LWS_WRITE_TEXT | LWS_WRITE_NO_FIN; p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "{ \"version\":\"%s\"," " \"wss_over_h2\":\"%d\"," " \"hostname\":\"%s\"," " \"wsi\":\"%d\", \"conns\":[", lws_get_library_version(), pss->wss_over_h2, lws_canonical_hostname(vhd->context), vhd->count_live_pss); pss->walk = WALK_LIST; pss->walk_next = vhd->live_pss_list; break; case WALK_LIST: n = LWS_WRITE_CONTINUATION | LWS_WRITE_NO_FIN; if (!pss->walk_next) goto walk_final; if (pss->subsequent) *p++ = ','; pss->subsequent = 1; m = 0; lws_start_foreach_ll(struct per_session_data__lws_status *, pss2, vhd->live_pss_list) { if (pss2 == pss->walk_next) { m = 1; break; } } lws_end_foreach_ll(pss2, next); if (!m) { /* our next guy went away */ pss->walk = WALK_FINAL; pss->changed_partway = 1; break; } strcpy(ip, "unknown"); lws_get_peer_simple(pss->walk_next->wsi, ip, sizeof(ip)); p += lws_snprintf(p, lws_ptr_diff_size_t(end, p), "{\"peer\":\"%s\",\"time\":\"%ld\"," "\"ua\":\"%s\"}", ip, (unsigned long)pss->walk_next->time_est, pss->walk_next->user_agent); pss->walk_next = pss->walk_next->next; if (!pss->walk_next) pss->walk = WALK_FINAL; break; case WALK_FINAL: walk_final: n = LWS_WRITE_CONTINUATION; p += lws_snprintf(p, 4, "]}"); if (pss->changed_partway) { pss->changed_partway = 0; pss->subsequent = 0; pss->walk_next = vhd->live_pss_list; pss->walk = WALK_INITIAL; } else pss->walk = WALK_NONE; break; default: return 0; } m = lws_write(wsi, (unsigned char *)start, lws_ptr_diff_size_t(p, start), (unsigned int)n); if (m < 0) { lwsl_err("ERROR %d writing to di socket\n", m); return -1; } if (pss->walk != WALK_NONE) lws_callback_on_writable(wsi); break; case LWS_CALLBACK_RECEIVE: lwsl_notice("pmd test: RX len %d\n", (int)len); break; case LWS_CALLBACK_CLOSED: // lwsl_debug("****** LWS_CALLBACK_CLOSED\n"); lws_start_foreach_llp(struct per_session_data__lws_status **, ppss, vhd->live_pss_list) { if (*ppss == pss) { *ppss = pss->next; break; } } lws_end_foreach_llp(ppss, next); trigger_resend(vhd); break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_LWS_STATUS \ { \ "lws-status", \ callback_lws_status, \ sizeof(struct per_session_data__lws_status), \ 512, /* rx buf size must be >= permessage-deflate rx size */ \ 0, NULL, 0 \ } #if !defined (LWS_PLUGIN_STATIC) LWS_VISIBLE const struct lws_protocols lws_status_protocols[] = { LWS_PLUGIN_PROTOCOL_LWS_STATUS }; LWS_VISIBLE const lws_plugin_protocol_t lws_status = { .hdr = { "lws status", "lws_protocol_plugin", LWS_BUILD_HASH, LWS_PLUGIN_API_MAGIC }, .protocols = lws_status_protocols, .count_protocols = LWS_ARRAY_SIZE(lws_status_protocols), .extensions = NULL, .count_extensions = 0, }; #endif libwebsockets-4.3.5/plugins/protocol_post_demo.c000066400000000000000000000163071476025525100221400ustar00rootroot00000000000000/* * ws protocol handler plugin for "POST demo" * * Written in 2010-2019 by Andy Green * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * These test plugins are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. */ #if !defined (LWS_PLUGIN_STATIC) #if !defined(LWS_DLL) #define LWS_DLL #endif #if !defined(LWS_INTERNAL) #define LWS_INTERNAL #endif #include #endif #include #include #include #include #include #ifdef WIN32 #include #endif #include struct per_session_data__post_demo { struct lws_spa *spa; char result[LWS_PRE + LWS_RECOMMENDED_MIN_HEADER_SPACE]; char filename[64]; long file_length; #if !defined(LWS_WITH_ESP32) lws_filefd_type fd; #endif uint8_t completed:1; uint8_t sent_headers:1; uint8_t sent_body:1; }; static const char * const param_names[] = { "text", "send", "file", "upload", }; enum enum_param_names { EPN_TEXT, EPN_SEND, EPN_FILE, EPN_UPLOAD, }; static int file_upload_cb(void *data, const char *name, const char *filename, char *buf, int len, enum lws_spa_fileupload_states state) { struct per_session_data__post_demo *pss = (struct per_session_data__post_demo *)data; #if !defined(LWS_WITH_ESP32) int n; (void)n; #endif switch (state) { case LWS_UFS_OPEN: lws_strncpy(pss->filename, filename, sizeof(pss->filename)); /* we get the original filename in @filename arg, but for * simple demo use a fixed name so we don't have to deal with * attacks */ #if !defined(LWS_WITH_ESP32) pss->fd = (lws_filefd_type)(lws_intptr_t)lws_open("/tmp/post-file", O_CREAT | O_TRUNC | O_RDWR, 0600); #endif break; case LWS_UFS_FINAL_CONTENT: case LWS_UFS_CONTENT: if (len) { pss->file_length += len; /* if the file length is too big, drop it */ if (pss->file_length > 100000) return 1; #if !defined(LWS_WITH_ESP32) n = (int)write((int)(lws_intptr_t)pss->fd, buf, (unsigned int)len); lwsl_info("%s: write %d says %d\n", __func__, len, n); #else lwsl_notice("%s: Received chunk size %d\n", __func__, len); #endif } if (state == LWS_UFS_CONTENT) break; #if !defined(LWS_WITH_ESP32) close((int)(lws_intptr_t)pss->fd); pss->fd = LWS_INVALID_FILE; #endif break; case LWS_UFS_CLOSE: break; } return 0; } /* * returns length in bytes */ static int format_result(struct per_session_data__post_demo *pss) { unsigned char *p, *start, *end; int n; p = (unsigned char *)pss->result + LWS_PRE; start = p; end = p + sizeof(pss->result) - LWS_PRE - 1; if (!pss->spa) { p += lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), "pss->spa already NULL"); goto bail; } p += lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), "" "" "LWS Server Status" "

    Form results (after urldecoding)

    " ""); for (n = 0; n < (int)LWS_ARRAY_SIZE(param_names); n++) { if (!lws_spa_get_string(pss->spa, n)) p += lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), "", param_names[n]); else p += lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), "", param_names[n], lws_spa_get_length(pss->spa, n), lws_spa_get_string(pss->spa, n)); } p += lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), "
    NameLengthValue
    %s0" "NULL
    %s%d" "%s

    filename: %s, " "length %ld", pss->filename, pss->file_length); p += lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), ""); bail: return (int)lws_ptr_diff(p, start); } static int callback_post_demo(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__post_demo *pss = (struct per_session_data__post_demo *)user; unsigned char *p, *start, *end; int n; switch (reason) { case LWS_CALLBACK_HTTP_BODY: /* create the POST argument parser if not already existing */ if (!pss->spa) { pss->spa = lws_spa_create(wsi, param_names, LWS_ARRAY_SIZE(param_names), 1024, file_upload_cb, pss); if (!pss->spa) return -1; pss->filename[0] = '\0'; pss->file_length = 0; } /* let it parse the POST data */ if (lws_spa_process(pss->spa, in, (int)len)) return -1; break; case LWS_CALLBACK_HTTP_BODY_COMPLETION: lwsl_debug("LWS_CALLBACK_HTTP_BODY_COMPLETION: %s\n", lws_wsi_tag(wsi)); /* call to inform no more payload data coming */ lws_spa_finalize(pss->spa); pss->completed = 1; lws_callback_on_writable(wsi); break; case LWS_CALLBACK_HTTP_WRITEABLE: if (!pss->completed) break; p = (unsigned char *)pss->result + LWS_PRE; start = p; end = p + sizeof(pss->result) - LWS_PRE - 1; if (!pss->sent_headers) { n = format_result(pss); if (lws_add_http_header_status(wsi, HTTP_STATUS_OK, &p, end)) goto bail; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE, (unsigned char *)"text/html", 9, &p, end)) goto bail; if (lws_add_http_header_content_length(wsi, (unsigned int)n, &p, end)) goto bail; if (lws_finalize_http_header(wsi, &p, end)) goto bail; /* first send the headers ... */ n = lws_write(wsi, start, lws_ptr_diff_size_t(p, start), LWS_WRITE_HTTP_HEADERS); if (n < 0) goto bail; pss->sent_headers = 1; lws_callback_on_writable(wsi); break; } if (!pss->sent_body) { n = format_result(pss); n = lws_write(wsi, (unsigned char *)start, (unsigned int)n, LWS_WRITE_HTTP_FINAL); pss->sent_body = 1; if (n < 0) return 1; goto try_to_reuse; } break; case LWS_CALLBACK_HTTP_DROP_PROTOCOL: /* called when our wsi user_space is going to be destroyed */ if (pss->spa) { lws_spa_destroy(pss->spa); pss->spa = NULL; } break; default: break; } return 0; bail: return 1; try_to_reuse: if (lws_http_transaction_completed(wsi)) return -1; return 0; } #define LWS_PLUGIN_PROTOCOL_POST_DEMO \ { \ "protocol-post-demo", \ callback_post_demo, \ sizeof(struct per_session_data__post_demo), \ 1024, \ 0, NULL, 0 \ } #if !defined (LWS_PLUGIN_STATIC) LWS_VISIBLE const struct lws_protocols post_demo_protocols[] = { LWS_PLUGIN_PROTOCOL_POST_DEMO }; LWS_VISIBLE const lws_plugin_protocol_t post_demo = { .hdr = { "post demo", "lws_protocol_plugin", LWS_BUILD_HASH, LWS_PLUGIN_API_MAGIC }, .protocols = post_demo_protocols, .count_protocols = LWS_ARRAY_SIZE(post_demo_protocols), .extensions = NULL, .count_extensions = 0, }; #endif libwebsockets-4.3.5/plugins/raw-proxy/000077500000000000000000000000001476025525100200235ustar00rootroot00000000000000libwebsockets-4.3.5/plugins/raw-proxy/README.md000066400000000000000000000034211476025525100213020ustar00rootroot00000000000000# raw-proxy plugin ## Enabling for build ``` $ cmake .. -DLWS_ROLE_RAW_PROXY=1 ``` ## configuration pvo |pvo|value meaning| |---|---| |onward|The onward proxy destination, in the form `ipv4:addr[:port]`| ## Note for vhost selection Notice that since it proxies the packets "raw", there's no SNI or Host: header to resolve amongst multiple vhosts on the same listen port. So the vhost you associate with this protocol must be alone on its own port. It's also possible to apply this or other role + protocols as a fallback after http[s] processing rejected the first packet from an incoming connection. See `./READMEs/README-http-fallback.md` ## Note for packet size For throughput, since often one side is localhost that can handle larger packets easily, you should create the context used with this plugin with ``` info.pt_serv_buf_size = 8192; ``` lwsws already does this. ## Using with C See the minimal example `./minimal-example/raw/minimal-raw-proxy` for a working example of a vhost that accepts connections and then proxies them using this plugin. The example is almost all boilerplate for setting up the context and the pvo. ## Using with lwsws For a usage where the plugin "owns" the whole vhost, you should enable the plugin protocol on the vhost as usual, and specify the "onward" pvo with: ``` "ws-protocols": [{ "raw-proxy": { "status": "ok", "onward": "ipv4:remote.address.com:port" } }], ``` and then define the vhost with: ``` "apply-listen-accept": "1", "listen-accept-role": "raw-proxy", "listen-accept-protocol": "raw-proxy" ``` which tells it to apply the role and protocol as soon as a connection is accepted on the vhost. libwebsockets-4.3.5/plugins/raw-proxy/protocol_lws_raw_proxy.c000066400000000000000000000351311476025525100250320ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #if !defined (LWS_PLUGIN_STATIC) #if !defined(LWS_DLL) #define LWS_DLL #endif #if !defined(LWS_INTERNAL) #define LWS_INTERNAL #endif #include #endif #include #include #include #define RING_DEPTH 8 struct packet { void *payload; uint32_t len; uint32_t ticket; }; enum { ACC, ONW }; /* * Because both sides of the connection want to share this, we allocate it * during accepted adoption and both sides have a pss that is just a wrapper * pointing to this. * * The last one of the accepted side and the onward side to close frees it. * This removes any chance of one side or the other having an invalidated * pointer to the pss. */ struct conn { struct lws *wsi[2]; /* rings containing unsent rx from accepted and onward sides */ struct lws_ring *r[2]; uint32_t t[2]; /* ring tail */ uint32_t ticket_next; uint32_t ticket_retired; char rx_enabled[2]; char closed[2]; char established[2]; }; struct raw_pss { struct conn *conn; }; /* one of these is created for each vhost our protocol is used with */ struct raw_vhd { char addr[128]; uint16_t port; char ipv6; }; static void __destroy_packet(void *_pkt) { struct packet *pkt = _pkt; free(pkt->payload); pkt->payload = NULL; pkt->len = 0; } static void destroy_conn(struct raw_vhd *vhd, struct raw_pss *pss) { struct conn *conn = pss->conn; if (conn->r[ACC]) lws_ring_destroy(conn->r[ACC]); if (conn->r[ONW]) lws_ring_destroy(conn->r[ONW]); pss->conn = NULL; free(conn); } static int connect_client(struct raw_vhd *vhd, struct raw_pss *pss) { struct lws_client_connect_info i; char host[128]; struct lws *cwsi; lws_snprintf(host, sizeof(host), "%s:%u", vhd->addr, vhd->port); memset(&i, 0, sizeof(i)); i.method = "RAW"; i.context = lws_get_context(pss->conn->wsi[ACC]); i.port = vhd->port; i.address = vhd->addr; i.host = host; i.origin = host; i.ssl_connection = 0; i.vhost = lws_get_vhost(pss->conn->wsi[ACC]); i.local_protocol_name = "raw-proxy"; i.protocol = "raw-proxy"; i.path = "/"; /* * The "onward" client wsi has its own pss but shares the "conn" * created when the inbound connection was accepted. We need to stash * the address of the shared conn and apply it to the client psss * when the client connection completes. */ i.opaque_user_data = pss->conn; i.pwsi = &pss->conn->wsi[ONW]; lwsl_info("%s: onward: %s:%d%s\n", __func__, i.address, i.port, i.path); cwsi = lws_client_connect_via_info(&i); if (!cwsi) lwsl_err("%s: client connect failed early\n", __func__); return !cwsi; } static int flow_control(struct conn *conn, int side, int enable) { if (conn->closed[side] || enable == conn->rx_enabled[side] || !conn->established[side]) return 0; if (lws_rx_flow_control(conn->wsi[side], enable)) return 1; conn->rx_enabled[side] = (char)enable; lwsl_info("%s: %s side: %s\n", __func__, side ? "ONW" : "ACC", enable ? "rx enabled" : "rx flow controlled"); return 0; } static int callback_raw_proxy(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct raw_pss *pss = (struct raw_pss *)user; struct raw_vhd *vhd = (struct raw_vhd *)lws_protocol_vh_priv_get( lws_get_vhost(wsi), lws_get_protocol(wsi)); const struct packet *ppkt; struct conn *conn = NULL; struct lws_tokenize ts; lws_tokenize_elem e; struct packet pkt; const char *cp; int n; if (pss) conn = pss->conn; switch (reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct raw_vhd)); if (!vhd) return 0; if (lws_pvo_get_str(in, "onward", &cp)) { lwsl_warn("%s: vh %s: pvo 'onward' required\n", __func__, lws_get_vhost_name(lws_get_vhost(wsi))); return 0; } lws_tokenize_init(&ts, cp, LWS_TOKENIZE_F_DOT_NONTERM | LWS_TOKENIZE_F_MINUS_NONTERM | LWS_TOKENIZE_F_NO_FLOATS); ts.len = strlen(cp); if (lws_tokenize(&ts) != LWS_TOKZE_TOKEN) goto bad_onward; if (!strncmp(ts.token, "ipv6", ts.token_len)) vhd->ipv6 = 1; else if (strncmp(ts.token, "ipv4", ts.token_len)) goto bad_onward; /* then the colon */ if (lws_tokenize(&ts) != LWS_TOKZE_DELIMITER) goto bad_onward; e = lws_tokenize(&ts); if (!vhd->ipv6) { if (e != LWS_TOKZE_TOKEN || ts.token_len + 1 >= (int)sizeof(vhd->addr)) goto bad_onward; lws_strncpy(vhd->addr, ts.token, ts.token_len + 1); e = lws_tokenize(&ts); if (e == LWS_TOKZE_DELIMITER) { /* there should be a port then */ e = lws_tokenize(&ts); if (e != LWS_TOKZE_INTEGER) goto bad_onward; vhd->port = (uint16_t)atoi(ts.token); e = lws_tokenize(&ts); } if (e != LWS_TOKZE_ENDED) goto bad_onward; } else lws_strncpy(vhd->addr, ts.token, sizeof(vhd->addr)); lwsl_notice("%s: vh %s: onward %s:%s:%d\n", __func__, lws_get_vhost_name(lws_get_vhost(wsi)), vhd->ipv6 ? "ipv6": "ipv4", vhd->addr, vhd->port); break; bad_onward: lwsl_err("%s: onward pvo format must be ipv4:addr[:port] " " or ipv6:addr, not '%s'\n", __func__, cp); return -1; case LWS_CALLBACK_PROTOCOL_DESTROY: break; /* callbacks related to client "onward side" */ case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: lwsl_err("CLIENT_CONNECTION_ERROR: %s\n", in ? (char *)in : "(null)"); break; case LWS_CALLBACK_RAW_PROXY_CLI_ADOPT: lwsl_debug("%s: %p: LWS_CALLBACK_RAW_CLI_ADOPT: pss %p\n", __func__, wsi, pss); if (conn || !pss) break; conn = pss->conn = lws_get_opaque_user_data(wsi); if (!conn) break; conn->established[ONW] = 1; /* they start enabled */ conn->rx_enabled[ACC] = 1; conn->rx_enabled[ONW] = 1; /* he disabled his rx while waiting for use to be established */ flow_control(conn, ACC, 1); lws_callback_on_writable(wsi); lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); break; case LWS_CALLBACK_RAW_PROXY_CLI_CLOSE: lwsl_debug("LWS_CALLBACK_RAW_PROXY_CLI_CLOSE\n"); if (!conn) break; conn->closed[ONW] = 1; if (conn->closed[ACC]) destroy_conn(vhd, pss); break; case LWS_CALLBACK_RAW_PROXY_CLI_RX: lwsl_debug("LWS_CALLBACK_RAW_PROXY_CLI_RX: %d\n", (int)len); if (!conn) return 0; if (!pss || !conn->wsi[ACC] || conn->closed[ACC]) { lwsl_info(" pss %p, wsi[ACC] %p, closed[ACC] %d\n", pss, conn->wsi[ACC], conn->closed[ACC]); return -1; } pkt.payload = malloc(len); if (!pkt.payload) { lwsl_notice("OOM: dropping\n"); return -1; } pkt.len = (uint32_t)len; pkt.ticket = conn->ticket_next++; memcpy(pkt.payload, in, len); if (!lws_ring_insert(conn->r[ONW], &pkt, 1)) { __destroy_packet(&pkt); lwsl_notice("dropping!\n"); return -1; } lwsl_debug("After onward RX: acc free: %d...\n", (int)lws_ring_get_count_free_elements(conn->r[ONW])); if (conn->rx_enabled[ONW] && lws_ring_get_count_free_elements(conn->r[ONW]) < 2) flow_control(conn, ONW, 0); if (!conn->closed[ACC]) lws_callback_on_writable(conn->wsi[ACC]); break; case LWS_CALLBACK_RAW_PROXY_CLI_WRITEABLE: lwsl_debug("LWS_CALLBACK_RAW_PROXY_CLI_WRITEABLE\n"); if (!conn) break; ppkt = lws_ring_get_element(conn->r[ACC], &conn->t[ACC]); if (!ppkt) { lwsl_info("%s: CLI_WRITABLE had nothing in acc ring\n", __func__); break; } if (ppkt->ticket != conn->ticket_retired + 1) { lwsl_info("%s: acc ring has %d but next %d\n", __func__, ppkt->ticket, conn->ticket_retired + 1); lws_callback_on_writable(conn->wsi[ACC]); break; } n = lws_write(wsi, ppkt->payload, ppkt->len, LWS_WRITE_RAW); if (n < 0) { lwsl_info("%s: WRITEABLE: %d\n", __func__, n); return -1; } conn->ticket_retired = ppkt->ticket; lws_ring_consume(conn->r[ACC], &conn->t[ACC], NULL, 1); lws_ring_update_oldest_tail(conn->r[ACC], conn->t[ACC]); lwsl_debug("acc free: %d...\n", (int)lws_ring_get_count_free_elements(conn->r[ACC])); if (!conn->rx_enabled[ACC] && lws_ring_get_count_free_elements(conn->r[ACC]) > 2) flow_control(conn, ACC, 1); ppkt = lws_ring_get_element(conn->r[ACC], &conn->t[ACC]); lwsl_debug("%s: CLI_WRITABLE: next acc pkt %p idx %d vs %d\n", __func__, ppkt, ppkt ? ppkt->ticket : 0, conn->ticket_retired + 1); if (ppkt && ppkt->ticket == conn->ticket_retired + 1) lws_callback_on_writable(wsi); else { /* * defer checking for accepted side closing until we * sent everything in the ring to onward */ if (conn->closed[ACC]) /* * there is never going to be any more... but * we may have some tx still in tx buflist / * partial */ return lws_raw_transaction_completed(wsi); if (lws_ring_get_element(conn->r[ONW], &conn->t[ONW])) lws_callback_on_writable(conn->wsi[ACC]); } break; /* callbacks related to raw socket descriptor "accepted side" */ case LWS_CALLBACK_RAW_PROXY_SRV_ADOPT: lwsl_debug("LWS_CALLBACK_RAW_SRV_ADOPT\n"); if (!pss) return -1; conn = pss->conn = malloc(sizeof(struct conn)); if (!pss->conn) return -1; memset(conn, 0, sizeof(*conn)); conn->wsi[ACC] = wsi; conn->ticket_next = 1; conn->r[ACC] = lws_ring_create(sizeof(struct packet), RING_DEPTH, __destroy_packet); if (!conn->r[ACC]) { lwsl_err("%s: OOM\n", __func__); return -1; } conn->r[ONW] = lws_ring_create(sizeof(struct packet), RING_DEPTH, __destroy_packet); if (!conn->r[ONW]) { lws_ring_destroy(conn->r[ACC]); conn->r[ACC] = NULL; lwsl_err("%s: OOM\n", __func__); return -1; } conn->established[ACC] = 1; /* disable any rx until the client side is up */ flow_control(conn, ACC, 0); lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); /* try to create the onward client connection */ connect_client(vhd, pss); break; case LWS_CALLBACK_RAW_PROXY_SRV_CLOSE: lwsl_debug("LWS_CALLBACK_RAW_PROXY_SRV_CLOSE:\n"); if (!conn) break; conn->closed[ACC] = 1; if (conn->closed[ONW]) destroy_conn(vhd, pss); break; case LWS_CALLBACK_RAW_PROXY_SRV_RX: lwsl_debug("LWS_CALLBACK_RAW_PROXY_SRV_RX: rx %d\n", (int)len); if (!conn || !conn->wsi[ONW]) { lwsl_err("%s: LWS_CALLBACK_RAW_PROXY_SRV_RX: " "conn->wsi[ONW] NULL\n", __func__); return -1; } if (conn->closed[ONW]) { lwsl_info(" closed[ONW] %d\n", conn->closed[ONW]); return -1; } if (!len) return 0; pkt.payload = malloc(len); if (!pkt.payload) { lwsl_notice("OOM: dropping\n"); return -1; } pkt.len = (uint32_t)len; pkt.ticket = conn->ticket_next++; memcpy(pkt.payload, in, len); if (!lws_ring_insert(conn->r[ACC], &pkt, 1)) { __destroy_packet(&pkt); lwsl_notice("dropping!\n"); return -1; } lwsl_debug("After acc RX: acc free: %d...\n", (int)lws_ring_get_count_free_elements(conn->r[ACC])); if (conn->rx_enabled[ACC] && lws_ring_get_count_free_elements(conn->r[ACC]) <= 2) flow_control(conn, ACC, 0); if (conn->established[ONW] && !conn->closed[ONW]) lws_callback_on_writable(conn->wsi[ONW]); break; case LWS_CALLBACK_RAW_PROXY_SRV_WRITEABLE: lwsl_debug("LWS_CALLBACK_RAW_PROXY_SRV_WRITEABLE\n"); if (!conn || !conn->established[ONW] || conn->closed[ONW]) break; ppkt = lws_ring_get_element(conn->r[ONW], &conn->t[ONW]); if (!ppkt) { lwsl_info("%s: SRV_WRITABLE nothing in onw ring\n", __func__); break; } if (ppkt->ticket != conn->ticket_retired + 1) { lwsl_info("%s: onw ring has %d but next %d\n", __func__, ppkt->ticket, conn->ticket_retired + 1); lws_callback_on_writable(conn->wsi[ONW]); break; } n = lws_write(wsi, ppkt->payload, ppkt->len, LWS_WRITE_RAW); if (n < 0) { lwsl_info("%s: WRITEABLE: %d\n", __func__, n); return -1; } conn->ticket_retired = ppkt->ticket; lws_ring_consume(conn->r[ONW], &conn->t[ONW], NULL, 1); lws_ring_update_oldest_tail(conn->r[ONW], conn->t[ONW]); lwsl_debug("onward free: %d... waiting %d\n", (int)lws_ring_get_count_free_elements(conn->r[ONW]), (int)lws_ring_get_count_waiting_elements(conn->r[ONW], &conn->t[ONW])); if (!conn->rx_enabled[ONW] && lws_ring_get_count_free_elements(conn->r[ONW]) > 2) flow_control(conn, ONW, 1); ppkt = lws_ring_get_element(conn->r[ONW], &conn->t[ONW]); lwsl_debug("%s: SRV_WRITABLE: next onw pkt %p idx %d vs %d\n", __func__, ppkt, ppkt ? ppkt->ticket : 0, conn->ticket_retired + 1); if (ppkt && ppkt->ticket == conn->ticket_retired + 1) lws_callback_on_writable(wsi); else { /* * defer checking for onward side closing until we * sent everything in the ring to accepted side */ if (conn->closed[ONW]) /* * there is never going to be any more... but * we may have some tx still in tx buflist / * partial */ return lws_raw_transaction_completed(wsi); if (lws_ring_get_element(conn->r[ACC], &conn->t[ACC])) lws_callback_on_writable(conn->wsi[ONW]); } break; default: break; } return lws_callback_http_dummy(wsi, reason, user, in, len); } #define LWS_PLUGIN_PROTOCOL_RAW_PROXY { \ "raw-proxy", \ callback_raw_proxy, \ sizeof(struct raw_pss), \ 8192, \ 8192, NULL, 0 \ } #if !defined (LWS_PLUGIN_STATIC) LWS_VISIBLE const struct lws_protocols lws_raw_proxy_protocols[] = { LWS_PLUGIN_PROTOCOL_RAW_PROXY }; LWS_VISIBLE const lws_plugin_protocol_t lws_raw_proxy = { .hdr = { "raw proxy", "lws_protocol_plugin", LWS_BUILD_HASH, LWS_PLUGIN_API_MAGIC }, .protocols = lws_raw_proxy_protocols, .count_protocols = LWS_ARRAY_SIZE(lws_raw_proxy_protocols), .extensions = NULL, .count_extensions = 0, }; #endif libwebsockets-4.3.5/plugins/server-status.css000066400000000000000000000104041476025525100214130ustar00rootroot00000000000000 span.title { font-size:18pt; font-family: Arial; font-weight:normal; text-align:center; color:#000000; } span.mount { font-size:10pt; font-family: Arial; font-weight:normal; text-align:center; color:#000000; } span.mountname { font-size:14pt; font-family: Arial; font-weight:bold; text-align:center; color:#404010; } span.n { font-size:12pt; font-family: Arial; font-weight:normal; text-align:center; color:#808020; } span.sn { font-size:12pt; font-family: Arial; font-weight:bold; text-align:center; color:#808020; } span.v { font-size:12pt; font-family: Arial; font-weight:bold; text-align:center; color:#202020; } span.m1 { font-size:12pt; font-family: Arial; font-weight:bold; text-align:center; color:#202020; } span.m2 { font-size:12pt; font-family: Arial; font-weight:normal; text-align:center; color:#202020; } .browser { font-size:12pt; font-family: Arial; font-weight:normal; text-align:center; color:#ffff00; vertical-align:middle; text-align:center; background:#d0b070; padding:12px; -webkit-border-radius:10px; border-radius:10px;} .group2 { vertical-align:middle; text-align:center; background:#f0f0e0; padding:12px; -webkit-border-radius:10px; border-radius:10px; } .explain { vertical-align:middle; text-align:center; background:#f0f0c0; padding:12px; -webkit-border-radius:10px; border-radius:10px; color:#404000; padding:3px; } td.wsstatus { vertical-align:middle; width:200px; height:50px; text-align:center; background:#f0f0c0; padding:6px; -webkit-border-radius:8px; border-radius:8px; color:#404000; } .tdform { vertical-align:middle; width:200px; height:50px; text-align:center; background:#f0f0d0; padding:6px; -webkit-border-radius:8px; margin:10px; border-radius:8px; border: 1px solid black; border-collapse: collapse;font-size:18pt; font-family: Arial; font-weight:normal; text-align:center; color:#000000; color:#404000; } td.l { vertical-align:middle; text-align:center; background:#d0d0b0; padding:3px; -webkit-border-radius:3px; border-radius:3px; } td.bigger { font-size:120%; } div.bgw { background:white } div.conninfo { border: solid 2px #e0d040; padding: 4px; width: 500px; height:350px; overflow: auto; } span.f12 { font-size:12pt } .content { vertical-align:top; text-align:center; background:#fffff0; padding:12px; -webkit-border-radius:10px; border-radius:10px; } .canvas { vertical-align:top; text-align:center; background:#efefd0; padding:12px; -webkit-border-radius:10px; border-radius:10px; } .tabs { position: relative; min-height: 750px; /* This part sucks */ clear: both; margin: 25px 0; } .tab { float: left; } .tab label { background: #eee; padding: 10px; border: 1px solid #ccc; margin-left: -1px; position: relative; left: 1px; } .tab [type=radio] { display: none; } .content { position: absolute; top: 28px; left: 0; background: white; right: 0; bottom: 0; padding: 20px; border: 1px solid #ccc; } [type=radio]:checked ~ label { background: white; border-bottom: 1px solid white; z-index: 2; } [type=radio]:checked ~ label ~ .content { z-index: 1; } td.wsstatus { vertical-align:middle; width:200px; height:50px; text-align:center; background:#f0f0c0; padding:6px; -webkit-border-radius:8px; border-radius:8px; color:#404000; } td.l { vertical-align:middle; text-align:center; background:#d0d0b0; padding:3px; -webkit-border-radius:3px; border-radius:3px; } td.dl { vertical-align:middle; text-align:center; background:#c0c0c0; padding:3px; -webkit-border-radius:3px; border-radius:3px; } td.c { vertical-align:middle; text-align:center; background:#c0c0a0; padding:3px; -webkit-border-radius:3px; border-radius:3px; } td.c0 { vertical-align:middle; text-align:center; background:#b0b090; padding:3px; -webkit-border-radius:3px; border-radius:3px; } td.dc0 { vertical-align:middle; text-align:center; background:#a0a0a0; padding:3px; -webkit-border-radius:3px; border-radius:3px; } td.c1 { vertical-align:middle; text-align:center; background:#c0c0c0; padding:3px; -webkit-border-radius:3px; border-radius:3px; } td.t { vertical-align:middle; text-align:center; background:#e0e0c0; padding:3px; -webkit-border-radius:3px; border-radius:3px; } libwebsockets-4.3.5/plugins/ssh-base/000077500000000000000000000000001476025525100175605ustar00rootroot00000000000000libwebsockets-4.3.5/plugins/ssh-base/crypto/000077500000000000000000000000001476025525100211005ustar00rootroot00000000000000libwebsockets-4.3.5/plugins/ssh-base/crypto/chacha.c000066400000000000000000000232411476025525100224550ustar00rootroot00000000000000/* chacha-merged.c version 20080118 D. J. Bernstein Public domain. */ #include #include "lws-ssh.h" #include #include struct chacha_ctx { u_int input[16]; }; #define CHACHA_MINKEYLEN 16 #define CHACHA_NONCELEN 8 #define CHACHA_CTRLEN 8 #define CHACHA_STATELEN (CHACHA_NONCELEN+CHACHA_CTRLEN) #define CHACHA_BLOCKLEN 64 typedef unsigned char u8; typedef unsigned int u32; typedef struct chacha_ctx chacha_ctx; #define U8C(v) (v##U) #define U32C(v) (v##U) #define U8V(v) ((u8)((v) & U8C(0xFF))) #define U32V(v) ((u32)(v) & U32C(0xFFFFFFFF)) #define ROTL32(v, n) \ (U32V((v) << (n)) | ((v) >> (32 - (n)))) #define U8TO32_LITTLE(p) \ (((u32)((p)[0]) ) | \ ((u32)((p)[1]) << 8) | \ ((u32)((p)[2]) << 16) | \ ((u32)((p)[3]) << 24)) #define U32TO8_LITTLE(p, v) \ do { \ (p)[0] = U8V((v) ); \ (p)[1] = U8V((v) >> 8); \ (p)[2] = U8V((v) >> 16); \ (p)[3] = U8V((v) >> 24); \ } while (0) #define ROTATE(v,c) (ROTL32(v,c)) #define XOR(v,w) ((v) ^ (w)) #define PLUS(v,w) (U32V((v) + (w))) #define PLUSONE(v) (PLUS((v),1)) #define QUARTERROUND(a,b,c,d) \ a = PLUS(a,b); d = ROTATE(XOR(d,a),16); \ c = PLUS(c,d); b = ROTATE(XOR(b,c),12); \ a = PLUS(a,b); d = ROTATE(XOR(d,a), 8); \ c = PLUS(c,d); b = ROTATE(XOR(b,c), 7); static const char sigma[16] = "expand 32-byte k"; static const char tau[16] = "expand 16-byte k"; void chacha_keysetup(chacha_ctx *x,const u8 *k,u32 kbits) { const char *constants; x->input[4] = U8TO32_LITTLE(k + 0); x->input[5] = U8TO32_LITTLE(k + 4); x->input[6] = U8TO32_LITTLE(k + 8); x->input[7] = U8TO32_LITTLE(k + 12); if (kbits == 256) { /* recommended */ k += 16; constants = sigma; } else { /* kbits == 128 */ constants = tau; } x->input[8] = U8TO32_LITTLE(k + 0); x->input[9] = U8TO32_LITTLE(k + 4); x->input[10] = U8TO32_LITTLE(k + 8); x->input[11] = U8TO32_LITTLE(k + 12); x->input[0] = U8TO32_LITTLE(constants + 0); x->input[1] = U8TO32_LITTLE(constants + 4); x->input[2] = U8TO32_LITTLE(constants + 8); x->input[3] = U8TO32_LITTLE(constants + 12); } void chacha_ivsetup(chacha_ctx *x, const u8 *iv, const u8 *counter) { x->input[12] = counter == NULL ? 0 : U8TO32_LITTLE(counter + 0); x->input[13] = counter == NULL ? 0 : U8TO32_LITTLE(counter + 4); x->input[14] = U8TO32_LITTLE(iv + 0); x->input[15] = U8TO32_LITTLE(iv + 4); } void chacha_encrypt_bytes(chacha_ctx *x,const u8 *m,u8 *c,u32 bytes) { u32 x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15; u32 j0, j1, j2, j3, j4, j5, j6, j7, j8, j9, j10, j11, j12, j13, j14, j15; u8 *ctarget = NULL; u8 tmp[64]; u_int i; if (!bytes) return; j0 = x->input[0]; j1 = x->input[1]; j2 = x->input[2]; j3 = x->input[3]; j4 = x->input[4]; j5 = x->input[5]; j6 = x->input[6]; j7 = x->input[7]; j8 = x->input[8]; j9 = x->input[9]; j10 = x->input[10]; j11 = x->input[11]; j12 = x->input[12]; j13 = x->input[13]; j14 = x->input[14]; j15 = x->input[15]; for (;;) { if (bytes < 64) { for (i = 0;i < bytes;++i) tmp[i] = m[i]; m = tmp; ctarget = c; c = tmp; } x0 = j0; x1 = j1; x2 = j2; x3 = j3; x4 = j4; x5 = j5; x6 = j6; x7 = j7; x8 = j8; x9 = j9; x10 = j10; x11 = j11; x12 = j12; x13 = j13; x14 = j14; x15 = j15; for (i = 20;i > 0;i -= 2) { QUARTERROUND( x0, x4, x8,x12) QUARTERROUND( x1, x5, x9,x13) QUARTERROUND( x2, x6,x10,x14) QUARTERROUND( x3, x7,x11,x15) QUARTERROUND( x0, x5,x10,x15) QUARTERROUND( x1, x6,x11,x12) QUARTERROUND( x2, x7, x8,x13) QUARTERROUND( x3, x4, x9,x14) } x0 = PLUS(x0,j0); x1 = PLUS(x1,j1); x2 = PLUS(x2,j2); x3 = PLUS(x3,j3); x4 = PLUS(x4,j4); x5 = PLUS(x5,j5); x6 = PLUS(x6,j6); x7 = PLUS(x7,j7); x8 = PLUS(x8,j8); x9 = PLUS(x9,j9); x10 = PLUS(x10,j10); x11 = PLUS(x11,j11); x12 = PLUS(x12,j12); x13 = PLUS(x13,j13); x14 = PLUS(x14,j14); x15 = PLUS(x15,j15); x0 = XOR(x0,U8TO32_LITTLE(m + 0)); x1 = XOR(x1,U8TO32_LITTLE(m + 4)); x2 = XOR(x2,U8TO32_LITTLE(m + 8)); x3 = XOR(x3,U8TO32_LITTLE(m + 12)); x4 = XOR(x4,U8TO32_LITTLE(m + 16)); x5 = XOR(x5,U8TO32_LITTLE(m + 20)); x6 = XOR(x6,U8TO32_LITTLE(m + 24)); x7 = XOR(x7,U8TO32_LITTLE(m + 28)); x8 = XOR(x8,U8TO32_LITTLE(m + 32)); x9 = XOR(x9,U8TO32_LITTLE(m + 36)); x10 = XOR(x10,U8TO32_LITTLE(m + 40)); x11 = XOR(x11,U8TO32_LITTLE(m + 44)); x12 = XOR(x12,U8TO32_LITTLE(m + 48)); x13 = XOR(x13,U8TO32_LITTLE(m + 52)); x14 = XOR(x14,U8TO32_LITTLE(m + 56)); x15 = XOR(x15,U8TO32_LITTLE(m + 60)); j12 = PLUSONE(j12); if (!j12) j13 = PLUSONE(j13); /* stopping at 2^70 bytes per nonce is user's responsibility */ U32TO8_LITTLE(c + 0,x0); U32TO8_LITTLE(c + 4,x1); U32TO8_LITTLE(c + 8,x2); U32TO8_LITTLE(c + 12,x3); U32TO8_LITTLE(c + 16,x4); U32TO8_LITTLE(c + 20,x5); U32TO8_LITTLE(c + 24,x6); U32TO8_LITTLE(c + 28,x7); U32TO8_LITTLE(c + 32,x8); U32TO8_LITTLE(c + 36,x9); U32TO8_LITTLE(c + 40,x10); U32TO8_LITTLE(c + 44,x11); U32TO8_LITTLE(c + 48,x12); U32TO8_LITTLE(c + 52,x13); U32TO8_LITTLE(c + 56,x14); U32TO8_LITTLE(c + 60,x15); if (bytes <= 64) { if (bytes < 64) { for (i = 0;i < bytes;++i) ctarget[i] = c[i]; } x->input[12] = j12; x->input[13] = j13; return; } bytes -= 64; c += 64; m += 64; } } struct lws_cipher_chacha { struct chacha_ctx ccctx[2]; }; #define K_1(_keys) &((struct lws_cipher_chacha *)_keys->cipher)->ccctx[0] #define K_2(_keys) &((struct lws_cipher_chacha *)_keys->cipher)->ccctx[1] int lws_chacha_activate(struct lws_ssh_keys *keys) { if (keys->cipher) { free(keys->cipher); keys->cipher = NULL; } keys->cipher = malloc(sizeof(struct lws_cipher_chacha)); if (!keys->cipher) return 1; memset(keys->cipher, 0, sizeof(struct lws_cipher_chacha)); /* uses 2 x 256-bit keys, so 512 bits (64 bytes) needed */ chacha_keysetup(K_2(keys), keys->key[SSH_KEYIDX_ENC], 256); chacha_keysetup(K_1(keys), &keys->key[SSH_KEYIDX_ENC][32], 256); keys->valid = 1; keys->full_length = 1; keys->padding_alignment = 8; // CHACHA_BLOCKLEN; keys->MAC_length = POLY1305_TAGLEN; return 0; } void lws_chacha_destroy(struct lws_ssh_keys *keys) { if (keys->cipher) { free(keys->cipher); keys->cipher = NULL; } } uint32_t lws_chachapoly_get_length(struct lws_ssh_keys *keys, uint32_t seq, const uint8_t *in4) { uint8_t buf[4], seqbuf[8]; /* * When receiving a packet, the length must be decrypted first. When 4 * bytes of ciphertext length have been received, they may be decrypted * using the K_1 key, a nonce consisting of the packet sequence number * encoded as a uint64 under the usual SSH wire encoding and a zero * block counter to obtain the plaintext length. */ POKE_U64(seqbuf, seq); chacha_ivsetup(K_1(keys), seqbuf, NULL); chacha_encrypt_bytes(K_1(keys), in4, buf, 4); return PEEK_U32(buf); } /* * chachapoly_crypt() operates as following: * En/decrypt with header key 'aadlen' bytes from 'src', storing result * to 'dest'. The ciphertext here is treated as additional authenticated * data for MAC calculation. * En/decrypt 'len' bytes at offset 'aadlen' from 'src' to 'dest'. Use * POLY1305_TAGLEN bytes at offset 'len'+'aadlen' as the authentication * tag. This tag is written on encryption and verified on decryption. */ int chachapoly_crypt(struct lws_ssh_keys *keys, u_int seqnr, u_char *dest, const u_char *src, u_int len, u_int aadlen, u_int authlen, int do_encrypt) { u_char seqbuf[8]; const u_char one[8] = { 1, 0, 0, 0, 0, 0, 0, 0 }; /* NB little-endian */ u_char expected_tag[POLY1305_TAGLEN], poly_key[POLY1305_KEYLEN]; int r = 1; /* * Run ChaCha20 once to generate the Poly1305 key. The IV is the * packet sequence number. */ memset(poly_key, 0, sizeof(poly_key)); POKE_U64(seqbuf, seqnr); chacha_ivsetup(K_2(keys), seqbuf, NULL); chacha_encrypt_bytes(K_2(keys), poly_key, poly_key, sizeof(poly_key)); /* If decrypting, check tag before anything else */ if (!do_encrypt) { const u_char *tag = src + aadlen + len; poly1305_auth(expected_tag, src, aadlen + len, poly_key); if (lws_timingsafe_bcmp(expected_tag, tag, POLY1305_TAGLEN)) { r = 2; goto out; } } /* Crypt additional data */ if (aadlen) { chacha_ivsetup(K_1(keys), seqbuf, NULL); chacha_encrypt_bytes(K_1(keys), src, dest, aadlen); } /* Set Chacha's block counter to 1 */ chacha_ivsetup(K_2(keys), seqbuf, one); chacha_encrypt_bytes(K_2(keys), src + aadlen, dest + aadlen, len); /* If encrypting, calculate and append tag */ if (do_encrypt) { poly1305_auth(dest + aadlen + len, dest, aadlen + len, poly_key); } r = 0; out: lws_explicit_bzero(expected_tag, sizeof(expected_tag)); lws_explicit_bzero(seqbuf, sizeof(seqbuf)); lws_explicit_bzero(poly_key, sizeof(poly_key)); return r; } int lws_chacha_decrypt(struct lws_ssh_keys *keys, uint32_t seq, const uint8_t *ct, uint32_t len, uint8_t *pt) { return chachapoly_crypt(keys, seq, pt, ct, len - POLY1305_TAGLEN - 4, 4, POLY1305_TAGLEN, 0); } int lws_chacha_encrypt(struct lws_ssh_keys *keys, uint32_t seq, const uint8_t *ct, uint32_t len, uint8_t *pt) { return chachapoly_crypt(keys, seq, pt, ct, len - 4, 4, 0, 1); } libwebsockets-4.3.5/plugins/ssh-base/crypto/ed25519.c000066400000000000000000000102251476025525100222420ustar00rootroot00000000000000/* $OpenBSD: ed25519.c,v 1.3 2013/12/09 11:03:45 markus Exp $ */ /* * Public Domain, Authors: Daniel J. Bernstein, Niels Duif, Tanja Lange, * Peter Schwabe, Bo-Yin Yang. * Copied from supercop-20130419/crypto_sign/ed25519/ref/ed25519.c * * Modified to use lws genhash by Andy Green */ #include #include #include "ge25519.h" int crypto_hash_sha512(uint8_t *hash64, const uint8_t *data, size_t len) { struct lws_genhash_ctx ctx; int ret; if (lws_genhash_init(&ctx, LWS_GENHASH_TYPE_SHA512)) { lwsl_notice("Failed to init SHA512\n"); return 0; } ret = lws_genhash_update(&ctx, data, len); if (lws_genhash_destroy(&ctx, hash64)) lwsl_notice("genhash destroy failed\n"); return ret ? 0 : 64; } static void get_hram(unsigned char *hram, const unsigned char *sm, const unsigned char *pk, unsigned char *playground, size_t smlen) { unsigned long long i; for (i = 0; i < 32; ++i) playground[i] = sm[i]; for (i = 32; i < 64; ++i) playground[i] = pk[i-32]; for (i = 64; i < smlen; ++i) playground[i] = sm[i]; crypto_hash_sha512(hram, playground, smlen); } int crypto_sign_ed25519_keypair( struct lws_context *context, unsigned char *pk, unsigned char *sk ) { sc25519 scsk; ge25519 gepk; unsigned char extsk[64]; int i; lws_get_random(context, sk, 32); crypto_hash_sha512(extsk, sk, 32); extsk[0] &= 248; extsk[31] &= 127; extsk[31] |= 64; sc25519_from32bytes(&scsk,extsk); ge25519_scalarmult_base(&gepk, &scsk); ge25519_pack(pk, &gepk); for(i=0;i<32;i++) sk[32 + i] = pk[i]; return 0; } int crypto_sign_ed25519( unsigned char *sm, unsigned long long *smlen, const unsigned char *m, size_t mlen, const unsigned char *sk ) { sc25519 sck, scs, scsk; ge25519 ger; unsigned char r[32]; unsigned char s[32]; unsigned char extsk[64]; unsigned long long i; unsigned char hmg[crypto_hash_sha512_BYTES]; unsigned char hram[crypto_hash_sha512_BYTES]; crypto_hash_sha512(extsk, sk, 32); extsk[0] &= 248; extsk[31] &= 127; extsk[31] |= 64; *smlen = mlen+64; for(i=0;i> 8)) - 1); } int crypto_sign_ed25519_open( unsigned char *m,unsigned long long *mlen, const unsigned char *sm,unsigned long long smlen, const unsigned char *pk ) { unsigned int i; int ret; unsigned char t2[32]; ge25519 get1, get2; sc25519 schram, scs; unsigned char hram[crypto_hash_sha512_BYTES]; *mlen = (unsigned long long) -1; if (smlen < 64) { lwsl_notice("a\n"); return -1; } if (ge25519_unpackneg_vartime(&get1, pk)) { lwsl_notice("b\n"); return -1; } get_hram(hram,sm,pk,m, (size_t)smlen); sc25519_from64bytes(&schram, hram); sc25519_from32bytes(&scs, sm+32); ge25519_double_scalarmult_vartime(&get2, &get1, &schram, &ge25519_base, &scs); ge25519_pack(t2, &get2); ret = crypto_verify_32(sm, t2); lwsl_notice("vf says %d\n", ret); if (!ret) { for(i=0;i>= 31; /* 1: yes; 0: no */ return x; } static uint32_t ge(uint32_t a,uint32_t b) /* 16-bit inputs */ { unsigned int x = a; x -= (unsigned int) b; /* 0..65535: yes; 4294901761..4294967295: no */ x >>= 31; /* 0: yes; 1: no */ x ^= 1; /* 1: yes; 0: no */ return x; } static uint32_t times19(uint32_t a) { return (a << 4) + (a << 1) + a; } static uint32_t times38(uint32_t a) { return (a << 5) + (a << 2) + (a << 1); } static void fe_reduce_add_sub(fe25519 *r) { uint32_t t; int i,rep; for(rep=0;rep<4;rep++) { t = r->v[31] >> 7; r->v[31] &= 127; t = times19(t); r->v[0] += t; for(i=0;i<31;i++) { t = r->v[i] >> 8; r->v[i+1] += t; r->v[i] &= 255; } } } static void reduce_mul(fe25519 *r) { uint32_t t; int i,rep; for(rep=0;rep<2;rep++) { t = r->v[31] >> 7; r->v[31] &= 127; t = times19(t); r->v[0] += t; for(i=0;i<31;i++) { t = r->v[i] >> 8; r->v[i+1] += t; r->v[i] &= 255; } } } /* reduction modulo 2^255-19 */ void fe25519_freeze(fe25519 *r) { int i; uint32_t m = fe_equal(r->v[31],127); for(i=30;i>0;i--) m &= fe_equal(r->v[i],255); m &= ge(r->v[0],237); m = (uint32_t)-(int32_t)m; r->v[31] -= m&127; for(i=30;i>0;i--) r->v[i] -= m&255; r->v[0] -= m&237; } void fe25519_unpack(fe25519 *r, const unsigned char x[32]) { int i; for(i=0;i<32;i++) r->v[i] = x[i]; r->v[31] &= 127; } /* Assumes input x being reduced below 2^255 */ void fe25519_pack(unsigned char r[32], const fe25519 *x) { int i; fe25519 y = *x; fe25519_freeze(&y); for(i=0;i<32;i++) r[i] = (unsigned char)y.v[i]; } int fe25519_iszero(const fe25519 *x) { int i; int r; fe25519 t = *x; fe25519_freeze(&t); r = (int)fe_equal(t.v[0],0); for(i=1;i<32;i++) r &= (int)fe_equal(t.v[i],0); return r; } int fe25519_iseq_vartime(const fe25519 *x, const fe25519 *y) { int i; fe25519 t1 = *x; fe25519 t2 = *y; fe25519_freeze(&t1); fe25519_freeze(&t2); for(i=0;i<32;i++) if(t1.v[i] != t2.v[i]) return 0; return 1; } void fe25519_cmov(fe25519 *r, const fe25519 *x, unsigned char b) { int i; uint32_t mask = b; mask = (uint32_t)-(int32_t)mask; for(i=0;i<32;i++) r->v[i] ^= mask & (x->v[i] ^ r->v[i]); } unsigned char fe25519_getparity(const fe25519 *x) { fe25519 t = *x; fe25519_freeze(&t); return (unsigned char)(t.v[0] & 1); } void fe25519_setone(fe25519 *r) { int i; r->v[0] = 1; for(i=1;i<32;i++) r->v[i]=0; } void fe25519_setzero(fe25519 *r) { int i; for(i=0;i<32;i++) r->v[i]=0; } void fe25519_neg(fe25519 *r, const fe25519 *x) { fe25519 t; int i; for(i=0;i<32;i++) t.v[i]=x->v[i]; fe25519_setzero(r); fe25519_sub(r, r, &t); } void fe25519_add(fe25519 *r, const fe25519 *x, const fe25519 *y) { int i; for(i=0;i<32;i++) r->v[i] = x->v[i] + y->v[i]; fe_reduce_add_sub(r); } void fe25519_sub(fe25519 *r, const fe25519 *x, const fe25519 *y) { int i; uint32_t t[32]; t[0] = x->v[0] + 0x1da; t[31] = x->v[31] + 0xfe; for(i=1;i<31;i++) t[i] = x->v[i] + 0x1fe; for(i=0;i<32;i++) r->v[i] = t[i] - y->v[i]; fe_reduce_add_sub(r); } void fe25519_mul(fe25519 *r, const fe25519 *x, const fe25519 *y) { int i,j; uint32_t t[63]; for(i=0;i<63;i++)t[i] = 0; for(i=0;i<32;i++) for(j=0;j<32;j++) t[i+j] += x->v[i] * y->v[j]; for(i=32;i<63;i++) r->v[i-32] = t[i-32] + times38(t[i]); r->v[31] = t[31]; /* result now in r[0]...r[31] */ reduce_mul(r); } void fe25519_square(fe25519 *r, const fe25519 *x) { fe25519_mul(r, x, x); } void fe25519_invert(fe25519 *r, const fe25519 *x) { fe25519 z2; fe25519 z9; fe25519 z11; fe25519 z2_5_0; fe25519 z2_10_0; fe25519 z2_20_0; fe25519 z2_50_0; fe25519 z2_100_0; fe25519 t0; fe25519 t1; int i; /* 2 */ fe25519_square(&z2,x); /* 4 */ fe25519_square(&t1,&z2); /* 8 */ fe25519_square(&t0,&t1); /* 9 */ fe25519_mul(&z9,&t0,x); /* 11 */ fe25519_mul(&z11,&z9,&z2); /* 22 */ fe25519_square(&t0,&z11); /* 2^5 - 2^0 = 31 */ fe25519_mul(&z2_5_0,&t0,&z9); /* 2^6 - 2^1 */ fe25519_square(&t0,&z2_5_0); /* 2^7 - 2^2 */ fe25519_square(&t1,&t0); /* 2^8 - 2^3 */ fe25519_square(&t0,&t1); /* 2^9 - 2^4 */ fe25519_square(&t1,&t0); /* 2^10 - 2^5 */ fe25519_square(&t0,&t1); /* 2^10 - 2^0 */ fe25519_mul(&z2_10_0,&t0,&z2_5_0); /* 2^11 - 2^1 */ fe25519_square(&t0,&z2_10_0); /* 2^12 - 2^2 */ fe25519_square(&t1,&t0); /* 2^20 - 2^10 */ for (i = 2;i < 10;i += 2) { fe25519_square(&t0,&t1); fe25519_square(&t1,&t0); } /* 2^20 - 2^0 */ fe25519_mul(&z2_20_0,&t1,&z2_10_0); /* 2^21 - 2^1 */ fe25519_square(&t0,&z2_20_0); /* 2^22 - 2^2 */ fe25519_square(&t1,&t0); /* 2^40 - 2^20 */ for (i = 2;i < 20;i += 2) { fe25519_square(&t0,&t1); fe25519_square(&t1,&t0); } /* 2^40 - 2^0 */ fe25519_mul(&t0,&t1,&z2_20_0); /* 2^41 - 2^1 */ fe25519_square(&t1,&t0); /* 2^42 - 2^2 */ fe25519_square(&t0,&t1); /* 2^50 - 2^10 */ for (i = 2;i < 10;i += 2) { fe25519_square(&t1,&t0); fe25519_square(&t0,&t1); } /* 2^50 - 2^0 */ fe25519_mul(&z2_50_0,&t0,&z2_10_0); /* 2^51 - 2^1 */ fe25519_square(&t0,&z2_50_0); /* 2^52 - 2^2 */ fe25519_square(&t1,&t0); /* 2^100 - 2^50 */ for (i = 2;i < 50;i += 2) { fe25519_square(&t0,&t1); fe25519_square(&t1,&t0); } /* 2^100 - 2^0 */ fe25519_mul(&z2_100_0,&t1,&z2_50_0); /* 2^101 - 2^1 */ fe25519_square(&t1,&z2_100_0); /* 2^102 - 2^2 */ fe25519_square(&t0,&t1); /* 2^200 - 2^100 */ for (i = 2;i < 100;i += 2) { fe25519_square(&t1,&t0); fe25519_square(&t0,&t1); } /* 2^200 - 2^0 */ fe25519_mul(&t1,&t0,&z2_100_0); /* 2^201 - 2^1 */ fe25519_square(&t0,&t1); /* 2^202 - 2^2 */ fe25519_square(&t1,&t0); /* 2^250 - 2^50 */ for (i = 2;i < 50;i += 2) { fe25519_square(&t0,&t1); fe25519_square(&t1,&t0); } /* 2^250 - 2^0 */ fe25519_mul(&t0,&t1,&z2_50_0); /* 2^251 - 2^1 */ fe25519_square(&t1,&t0); /* 2^252 - 2^2 */ fe25519_square(&t0,&t1); /* 2^253 - 2^3 */ fe25519_square(&t1,&t0); /* 2^254 - 2^4 */ fe25519_square(&t0,&t1); /* 2^255 - 2^5 */ fe25519_square(&t1,&t0); /* 2^255 - 21 */ fe25519_mul(r,&t1,&z11); } void fe25519_pow2523(fe25519 *r, const fe25519 *x) { fe25519 z2; fe25519 z9; fe25519 z11; fe25519 z2_5_0; fe25519 z2_10_0; fe25519 z2_20_0; fe25519 z2_50_0; fe25519 z2_100_0; fe25519 t; int i; /* 2 */ fe25519_square(&z2,x); /* 4 */ fe25519_square(&t,&z2); /* 8 */ fe25519_square(&t,&t); /* 9 */ fe25519_mul(&z9,&t,x); /* 11 */ fe25519_mul(&z11,&z9,&z2); /* 22 */ fe25519_square(&t,&z11); /* 2^5 - 2^0 = 31 */ fe25519_mul(&z2_5_0,&t,&z9); /* 2^6 - 2^1 */ fe25519_square(&t,&z2_5_0); /* 2^10 - 2^5 */ for (i = 1;i < 5;i++) { fe25519_square(&t,&t); } /* 2^10 - 2^0 */ fe25519_mul(&z2_10_0,&t,&z2_5_0); /* 2^11 - 2^1 */ fe25519_square(&t,&z2_10_0); /* 2^20 - 2^10 */ for (i = 1;i < 10;i++) { fe25519_square(&t,&t); } /* 2^20 - 2^0 */ fe25519_mul(&z2_20_0,&t,&z2_10_0); /* 2^21 - 2^1 */ fe25519_square(&t,&z2_20_0); /* 2^40 - 2^20 */ for (i = 1;i < 20;i++) { fe25519_square(&t,&t); } /* 2^40 - 2^0 */ fe25519_mul(&t,&t,&z2_20_0); /* 2^41 - 2^1 */ fe25519_square(&t,&t); /* 2^50 - 2^10 */ for (i = 1;i < 10;i++) { fe25519_square(&t,&t); } /* 2^50 - 2^0 */ fe25519_mul(&z2_50_0,&t,&z2_10_0); /* 2^51 - 2^1 */ fe25519_square(&t,&z2_50_0); /* 2^100 - 2^50 */ for (i = 1;i < 50;i++) { fe25519_square(&t,&t); } /* 2^100 - 2^0 */ fe25519_mul(&z2_100_0,&t,&z2_50_0); /* 2^101 - 2^1 */ fe25519_square(&t,&z2_100_0); /* 2^200 - 2^100 */ for (i = 1;i < 100;i++) { fe25519_square(&t,&t); } /* 2^200 - 2^0 */ fe25519_mul(&t,&t,&z2_100_0); /* 2^201 - 2^1 */ fe25519_square(&t,&t); /* 2^250 - 2^50 */ for (i = 1;i < 50;i++) { fe25519_square(&t,&t); } /* 2^250 - 2^0 */ fe25519_mul(&t,&t,&z2_50_0); /* 2^251 - 2^1 */ fe25519_square(&t,&t); /* 2^252 - 2^2 */ fe25519_square(&t,&t); /* 2^252 - 3 */ fe25519_mul(r,&t,x); } libwebsockets-4.3.5/plugins/ssh-base/crypto/fe25519.h000066400000000000000000000044341476025525100222560ustar00rootroot00000000000000/* $OpenBSD: fe25519.h,v 1.3 2013/12/09 11:03:45 markus Exp $ */ /* * Public Domain, Authors: Daniel J. Bernstein, Niels Duif, Tanja Lange, * Peter Schwabe, Bo-Yin Yang. * Copied from supercop-20130419/crypto_sign/ed25519/ref/fe25519.h */ #ifndef FE25519_H #define FE25519_H #define fe25519 crypto_sign_ed25519_ref_fe25519 #define fe25519_freeze crypto_sign_ed25519_ref_fe25519_freeze #define fe25519_unpack crypto_sign_ed25519_ref_fe25519_unpack #define fe25519_pack crypto_sign_ed25519_ref_fe25519_pack #define fe25519_iszero crypto_sign_ed25519_ref_fe25519_iszero #define fe25519_iseq_vartime crypto_sign_ed25519_ref_fe25519_iseq_vartime #define fe25519_cmov crypto_sign_ed25519_ref_fe25519_cmov #define fe25519_setone crypto_sign_ed25519_ref_fe25519_setone #define fe25519_setzero crypto_sign_ed25519_ref_fe25519_setzero #define fe25519_neg crypto_sign_ed25519_ref_fe25519_neg #define fe25519_getparity crypto_sign_ed25519_ref_fe25519_getparity #define fe25519_add crypto_sign_ed25519_ref_fe25519_add #define fe25519_sub crypto_sign_ed25519_ref_fe25519_sub #define fe25519_mul crypto_sign_ed25519_ref_fe25519_mul #define fe25519_square crypto_sign_ed25519_ref_fe25519_square #define fe25519_invert crypto_sign_ed25519_ref_fe25519_invert #define fe25519_pow2523 crypto_sign_ed25519_ref_fe25519_pow2523 typedef struct { uint32_t v[32]; } fe25519; void fe25519_freeze(fe25519 *r); void fe25519_unpack(fe25519 *r, const unsigned char x[32]); void fe25519_pack(unsigned char r[32], const fe25519 *x); int fe25519_iszero(const fe25519 *x); int fe25519_iseq_vartime(const fe25519 *x, const fe25519 *y); void fe25519_cmov(fe25519 *r, const fe25519 *x, unsigned char b); void fe25519_setone(fe25519 *r); void fe25519_setzero(fe25519 *r); void fe25519_neg(fe25519 *r, const fe25519 *x); unsigned char fe25519_getparity(const fe25519 *x); void fe25519_add(fe25519 *r, const fe25519 *x, const fe25519 *y); void fe25519_sub(fe25519 *r, const fe25519 *x, const fe25519 *y); void fe25519_mul(fe25519 *r, const fe25519 *x, const fe25519 *y); void fe25519_square(fe25519 *r, const fe25519 *x); void fe25519_invert(fe25519 *r, const fe25519 *x); void fe25519_pow2523(fe25519 *r, const fe25519 *x); #endif libwebsockets-4.3.5/plugins/ssh-base/crypto/ge25519.c000066400000000000000000000262471476025525100222600ustar00rootroot00000000000000/* $OpenBSD: ge25519.c,v 1.3 2013/12/09 11:03:45 markus Exp $ */ /* * Public Domain, Authors: Daniel J. Bernstein, Niels Duif, Tanja Lange, * Peter Schwabe, Bo-Yin Yang. * Copied from supercop-20130419/crypto_sign/ed25519/ref/ge25519.c */ #include #include "fe25519.h" #include "sc25519.h" #include "ge25519.h" /* * Arithmetic on the twisted Edwards curve -x^2 + y^2 = 1 + dx^2y^2 * with d = -(121665/121666) = 37095705934669439343138083508754565189542113879843219016388785533085940283555 * Base point: (15112221349535400772501151409588531511454012693041857206046113283949847762202,46316835694926478169428394003475163141307993866256225615783033603165251855960); */ /* d */ static const fe25519 ge25519_ecd = {{0xA3, 0x78, 0x59, 0x13, 0xCA, 0x4D, 0xEB, 0x75, 0xAB, 0xD8, 0x41, 0x41, 0x4D, 0x0A, 0x70, 0x00, 0x98, 0xE8, 0x79, 0x77, 0x79, 0x40, 0xC7, 0x8C, 0x73, 0xFE, 0x6F, 0x2B, 0xEE, 0x6C, 0x03, 0x52}}; /* 2*d */ static const fe25519 ge25519_ec2d = {{0x59, 0xF1, 0xB2, 0x26, 0x94, 0x9B, 0xD6, 0xEB, 0x56, 0xB1, 0x83, 0x82, 0x9A, 0x14, 0xE0, 0x00, 0x30, 0xD1, 0xF3, 0xEE, 0xF2, 0x80, 0x8E, 0x19, 0xE7, 0xFC, 0xDF, 0x56, 0xDC, 0xD9, 0x06, 0x24}}; /* sqrt(-1) */ static const fe25519 ge25519_sqrtm1 = {{0xB0, 0xA0, 0x0E, 0x4A, 0x27, 0x1B, 0xEE, 0xC4, 0x78, 0xE4, 0x2F, 0xAD, 0x06, 0x18, 0x43, 0x2F, 0xA7, 0xD7, 0xFB, 0x3D, 0x99, 0x00, 0x4D, 0x2B, 0x0B, 0xDF, 0xC1, 0x4F, 0x80, 0x24, 0x83, 0x2B}}; #define ge25519_p3 ge25519 typedef struct { fe25519 x; fe25519 z; fe25519 y; fe25519 t; } ge25519_p1p1; typedef struct { fe25519 x; fe25519 y; fe25519 z; } ge25519_p2; typedef struct { fe25519 x; fe25519 y; } ge25519_aff; /* Packed coordinates of the base point */ const ge25519 ge25519_base = {{{0x1A, 0xD5, 0x25, 0x8F, 0x60, 0x2D, 0x56, 0xC9, 0xB2, 0xA7, 0x25, 0x95, 0x60, 0xC7, 0x2C, 0x69, 0x5C, 0xDC, 0xD6, 0xFD, 0x31, 0xE2, 0xA4, 0xC0, 0xFE, 0x53, 0x6E, 0xCD, 0xD3, 0x36, 0x69, 0x21}}, {{0x58, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0xA3, 0xDD, 0xB7, 0xA5, 0xB3, 0x8A, 0xDE, 0x6D, 0xF5, 0x52, 0x51, 0x77, 0x80, 0x9F, 0xF0, 0x20, 0x7D, 0xE3, 0xAB, 0x64, 0x8E, 0x4E, 0xEA, 0x66, 0x65, 0x76, 0x8B, 0xD7, 0x0F, 0x5F, 0x87, 0x67}}}; /* Multiples of the base point in affine representation */ static const ge25519_aff ge25519_base_multiples_affine[425] = { #include "ge25519_base.data" }; static void p1p1_to_p2(ge25519_p2 *r, const ge25519_p1p1 *p) { fe25519_mul(&r->x, &p->x, &p->t); fe25519_mul(&r->y, &p->y, &p->z); fe25519_mul(&r->z, &p->z, &p->t); } static void p1p1_to_p3(ge25519_p3 *r, const ge25519_p1p1 *p) { p1p1_to_p2((ge25519_p2 *)r, p); fe25519_mul(&r->t, &p->x, &p->y); } static void ge25519_mixadd2(ge25519_p3 *r, const ge25519_aff *q) { fe25519 a,b,t1,t2,c,d,e,f,g,h,qt; fe25519_mul(&qt, &q->x, &q->y); fe25519_sub(&a, &r->y, &r->x); /* A = (Y1-X1)*(Y2-X2) */ fe25519_add(&b, &r->y, &r->x); /* B = (Y1+X1)*(Y2+X2) */ fe25519_sub(&t1, &q->y, &q->x); fe25519_add(&t2, &q->y, &q->x); fe25519_mul(&a, &a, &t1); fe25519_mul(&b, &b, &t2); fe25519_sub(&e, &b, &a); /* E = B-A */ fe25519_add(&h, &b, &a); /* H = B+A */ fe25519_mul(&c, &r->t, &qt); /* C = T1*k*T2 */ fe25519_mul(&c, &c, &ge25519_ec2d); fe25519_add(&d, &r->z, &r->z); /* D = Z1*2 */ fe25519_sub(&f, &d, &c); /* F = D-C */ fe25519_add(&g, &d, &c); /* G = D+C */ fe25519_mul(&r->x, &e, &f); fe25519_mul(&r->y, &h, &g); fe25519_mul(&r->z, &g, &f); fe25519_mul(&r->t, &e, &h); } static void add_p1p1(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_p3 *q) { fe25519 a, b, c, d, t; fe25519_sub(&a, &p->y, &p->x); /* A = (Y1-X1)*(Y2-X2) */ fe25519_sub(&t, &q->y, &q->x); fe25519_mul(&a, &a, &t); fe25519_add(&b, &p->x, &p->y); /* B = (Y1+X1)*(Y2+X2) */ fe25519_add(&t, &q->x, &q->y); fe25519_mul(&b, &b, &t); fe25519_mul(&c, &p->t, &q->t); /* C = T1*k*T2 */ fe25519_mul(&c, &c, &ge25519_ec2d); fe25519_mul(&d, &p->z, &q->z); /* D = Z1*2*Z2 */ fe25519_add(&d, &d, &d); fe25519_sub(&r->x, &b, &a); /* E = B-A */ fe25519_sub(&r->t, &d, &c); /* F = D-C */ fe25519_add(&r->z, &d, &c); /* G = D+C */ fe25519_add(&r->y, &b, &a); /* H = B+A */ } /* See http://www.hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html#doubling-dbl-2008-hwcd */ static void dbl_p1p1(ge25519_p1p1 *r, const ge25519_p2 *p) { fe25519 a,b,c,d; fe25519_square(&a, &p->x); fe25519_square(&b, &p->y); fe25519_square(&c, &p->z); fe25519_add(&c, &c, &c); fe25519_neg(&d, &a); fe25519_add(&r->x, &p->x, &p->y); fe25519_square(&r->x, &r->x); fe25519_sub(&r->x, &r->x, &a); fe25519_sub(&r->x, &r->x, &b); fe25519_add(&r->z, &d, &b); fe25519_sub(&r->t, &r->z, &c); fe25519_sub(&r->y, &d, &b); } /* Constant-time version of: if(b) r = p */ static void cmov_aff(ge25519_aff *r, const ge25519_aff *p, unsigned char b) { fe25519_cmov(&r->x, &p->x, b); fe25519_cmov(&r->y, &p->y, b); } static unsigned char ge_equal(signed char b,signed char c) { unsigned char ub = (unsigned char)b; unsigned char uc = (unsigned char)c; unsigned char x = ub ^ uc; /* 0: yes; 1..255: no */ uint32_t y = x; /* 0: yes; 1..255: no */ y -= 1; /* 4294967295: yes; 0..254: no */ y >>= 31; /* 1: yes; 0: no */ return (unsigned char)y; } static unsigned char negative(signed char b) { unsigned long long x = (unsigned long long)b; /* 18446744073709551361..18446744073709551615: yes; 0..255: no */ x >>= 63; /* 1: yes; 0: no */ return (unsigned char)x; } static void choose_t(ge25519_aff *t, unsigned long long pos, signed char b) { /* constant time */ fe25519 v; *t = ge25519_base_multiples_affine[5*pos+0]; cmov_aff(t, &ge25519_base_multiples_affine[5*pos+1],ge_equal(b,1) | ge_equal(b,-1)); cmov_aff(t, &ge25519_base_multiples_affine[5*pos+2],ge_equal(b,2) | ge_equal(b,-2)); cmov_aff(t, &ge25519_base_multiples_affine[5*pos+3],ge_equal(b,3) | ge_equal(b,-3)); cmov_aff(t, &ge25519_base_multiples_affine[5*pos+4],ge_equal(b,-4)); fe25519_neg(&v, &t->x); fe25519_cmov(&t->x, &v, negative(b)); } static void setneutral(ge25519 *r) { fe25519_setzero(&r->x); fe25519_setone(&r->y); fe25519_setone(&r->z); fe25519_setzero(&r->t); } /* ******************************************************************** * EXPORTED FUNCTIONS ******************************************************************** */ /* return 0 on success, -1 otherwise */ int ge25519_unpackneg_vartime(ge25519_p3 *r, const unsigned char p[32]) { unsigned char par; fe25519 t, chk, num, den, den2, den4, den6; fe25519_setone(&r->z); par = p[31] >> 7; fe25519_unpack(&r->y, p); fe25519_square(&num, &r->y); /* x = y^2 */ fe25519_mul(&den, &num, &ge25519_ecd); /* den = dy^2 */ fe25519_sub(&num, &num, &r->z); /* x = y^2-1 */ fe25519_add(&den, &r->z, &den); /* den = dy^2+1 */ /* Computation of sqrt(num/den) */ /* 1.: computation of num^((p-5)/8)*den^((7p-35)/8) = (num*den^7)^((p-5)/8) */ fe25519_square(&den2, &den); fe25519_square(&den4, &den2); fe25519_mul(&den6, &den4, &den2); fe25519_mul(&t, &den6, &num); fe25519_mul(&t, &t, &den); fe25519_pow2523(&t, &t); /* 2. computation of r->x = t * num * den^3 */ fe25519_mul(&t, &t, &num); fe25519_mul(&t, &t, &den); fe25519_mul(&t, &t, &den); fe25519_mul(&r->x, &t, &den); /* 3. Check whether sqrt computation gave correct result, multiply by sqrt(-1) if not: */ fe25519_square(&chk, &r->x); fe25519_mul(&chk, &chk, &den); if (!fe25519_iseq_vartime(&chk, &num)) fe25519_mul(&r->x, &r->x, &ge25519_sqrtm1); /* 4. Now we have one of the two square roots, except if input was not a square */ fe25519_square(&chk, &r->x); fe25519_mul(&chk, &chk, &den); if (!fe25519_iseq_vartime(&chk, &num)) return -1; /* 5. Choose the desired square root according to parity: */ if(fe25519_getparity(&r->x) != (1-par)) fe25519_neg(&r->x, &r->x); fe25519_mul(&r->t, &r->x, &r->y); return 0; } void ge25519_pack(unsigned char r[32], const ge25519_p3 *p) { fe25519 tx, ty, zi; fe25519_invert(&zi, &p->z); fe25519_mul(&tx, &p->x, &zi); fe25519_mul(&ty, &p->y, &zi); fe25519_pack(r, &ty); r[31] ^= (unsigned char)(fe25519_getparity(&tx) << 7); } int ge25519_isneutral_vartime(const ge25519_p3 *p) { int ret = 1; if(!fe25519_iszero(&p->x)) ret = 0; if(!fe25519_iseq_vartime(&p->y, &p->z)) ret = 0; return ret; } /* computes [s1]p1 + [s2]p2 */ void ge25519_double_scalarmult_vartime(ge25519_p3 *r, const ge25519_p3 *p1, const sc25519 *s1, const ge25519_p3 *p2, const sc25519 *s2) { ge25519_p1p1 tp1p1; ge25519_p3 pre[16]; unsigned char b[127]; int i; /* precomputation s2 s1 */ setneutral(pre); /* 00 00 */ pre[1] = *p1; /* 00 01 */ dbl_p1p1(&tp1p1,(ge25519_p2 *)p1); p1p1_to_p3( &pre[2], &tp1p1); /* 00 10 */ add_p1p1(&tp1p1,&pre[1], &pre[2]); p1p1_to_p3( &pre[3], &tp1p1); /* 00 11 */ pre[4] = *p2; /* 01 00 */ add_p1p1(&tp1p1,&pre[1], &pre[4]); p1p1_to_p3( &pre[5], &tp1p1); /* 01 01 */ add_p1p1(&tp1p1,&pre[2], &pre[4]); p1p1_to_p3( &pre[6], &tp1p1); /* 01 10 */ add_p1p1(&tp1p1,&pre[3], &pre[4]); p1p1_to_p3( &pre[7], &tp1p1); /* 01 11 */ dbl_p1p1(&tp1p1,(ge25519_p2 *)p2); p1p1_to_p3( &pre[8], &tp1p1); /* 10 00 */ add_p1p1(&tp1p1,&pre[1], &pre[8]); p1p1_to_p3( &pre[9], &tp1p1); /* 10 01 */ dbl_p1p1(&tp1p1,(ge25519_p2 *)&pre[5]); p1p1_to_p3(&pre[10], &tp1p1); /* 10 10 */ add_p1p1(&tp1p1,&pre[3], &pre[8]); p1p1_to_p3(&pre[11], &tp1p1); /* 10 11 */ add_p1p1(&tp1p1,&pre[4], &pre[8]); p1p1_to_p3(&pre[12], &tp1p1); /* 11 00 */ add_p1p1(&tp1p1,&pre[1],&pre[12]); p1p1_to_p3(&pre[13], &tp1p1); /* 11 01 */ add_p1p1(&tp1p1,&pre[2],&pre[12]); p1p1_to_p3(&pre[14], &tp1p1); /* 11 10 */ add_p1p1(&tp1p1,&pre[3],&pre[12]); p1p1_to_p3(&pre[15], &tp1p1); /* 11 11 */ sc25519_2interleave2(b,s1,s2); /* scalar multiplication */ *r = pre[b[126]]; for(i=125;i>=0;i--) { dbl_p1p1(&tp1p1, (ge25519_p2 *)r); p1p1_to_p2((ge25519_p2 *) r, &tp1p1); dbl_p1p1(&tp1p1, (ge25519_p2 *)r); if(b[i]!=0) { p1p1_to_p3(r, &tp1p1); add_p1p1(&tp1p1, r, &pre[b[i]]); } if(i != 0) p1p1_to_p2((ge25519_p2 *)r, &tp1p1); else p1p1_to_p3(r, &tp1p1); } } void ge25519_scalarmult_base(ge25519_p3 *r, const sc25519 *s) { signed char b[85]; int i; ge25519_aff t; sc25519_window3(b,s); choose_t((ge25519_aff *)r, 0, b[0]); fe25519_setone(&r->z); fe25519_mul(&r->t, &r->x, &r->y); for(i=1;i<85;i++) { choose_t(&t, (unsigned long long) i, b[i]); ge25519_mixadd2(r, &t); } } libwebsockets-4.3.5/plugins/ssh-base/crypto/ge25519.h000066400000000000000000000025501476025525100222540ustar00rootroot00000000000000/* $OpenBSD: ge25519.h,v 1.4 2015/02/16 18:26:26 miod Exp $ */ /* * Public Domain, Authors: Daniel J. Bernstein, Niels Duif, Tanja Lange, * Peter Schwabe, Bo-Yin Yang. * Copied from supercop-20130419/crypto_sign/ed25519/ref/ge25519.h */ #ifndef GE25519_H #define GE25519_H #include "fe25519.h" #include "sc25519.h" #define ge25519 crypto_sign_ed25519_ref_ge25519 #define ge25519_base crypto_sign_ed25519_ref_ge25519_base #define ge25519_unpackneg_vartime crypto_sign_ed25519_ref_unpackneg_vartime #define ge25519_pack crypto_sign_ed25519_ref_pack #define ge25519_isneutral_vartime crypto_sign_ed25519_ref_isneutral_vartime #define ge25519_double_scalarmult_vartime crypto_sign_ed25519_ref_double_scalarmult_vartime #define ge25519_scalarmult_base crypto_sign_ed25519_ref_scalarmult_base typedef struct { fe25519 x; fe25519 y; fe25519 z; fe25519 t; } ge25519; extern const ge25519 ge25519_base; int ge25519_unpackneg_vartime(ge25519 *r, const unsigned char p[32]); void ge25519_pack(unsigned char r[32], const ge25519 *p); int ge25519_isneutral_vartime(const ge25519 *p); void ge25519_double_scalarmult_vartime(ge25519 *r, const ge25519 *p1, const sc25519 *s1, const ge25519 *p2, const sc25519 *s2); void ge25519_scalarmult_base(ge25519 *r, const sc25519 *s); #endif libwebsockets-4.3.5/plugins/ssh-base/crypto/ge25519_base.data000066400000000000000000005111601476025525100237320ustar00rootroot00000000000000/* $OpenBSD: ge25519_base.data,v 1.3 2013/12/09 11:03:45 markus Exp $ */ /* * Public Domain, Authors: Daniel J. Bernstein, Niels Duif, Tanja Lange, * Peter Schwabe, Bo-Yin Yang. * Copied from supercop-20130419/crypto_sign/ed25519/ref/ge25519_base.data */ {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x1a, 0xd5, 0x25, 0x8f, 0x60, 0x2d, 0x56, 0xc9, 0xb2, 0xa7, 0x25, 0x95, 0x60, 0xc7, 0x2c, 0x69, 0x5c, 0xdc, 0xd6, 0xfd, 0x31, 0xe2, 0xa4, 0xc0, 0xfe, 0x53, 0x6e, 0xcd, 0xd3, 0x36, 0x69, 0x21}} , {{0x58, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66}}}, {{{0x0e, 0xce, 0x43, 0x28, 0x4e, 0xa1, 0xc5, 0x83, 0x5f, 0xa4, 0xd7, 0x15, 0x45, 0x8e, 0x0d, 0x08, 0xac, 0xe7, 0x33, 0x18, 0x7d, 0x3b, 0x04, 0x3d, 0x6c, 0x04, 0x5a, 0x9f, 0x4c, 0x38, 0xab, 0x36}} , {{0xc9, 0xa3, 0xf8, 0x6a, 0xae, 0x46, 0x5f, 0x0e, 0x56, 0x51, 0x38, 0x64, 0x51, 0x0f, 0x39, 0x97, 0x56, 0x1f, 0xa2, 0xc9, 0xe8, 0x5e, 0xa2, 0x1d, 0xc2, 0x29, 0x23, 0x09, 0xf3, 0xcd, 0x60, 0x22}}}, {{{0x5c, 0xe2, 0xf8, 0xd3, 0x5f, 0x48, 0x62, 0xac, 0x86, 0x48, 0x62, 0x81, 0x19, 0x98, 0x43, 0x63, 0x3a, 0xc8, 0xda, 0x3e, 0x74, 0xae, 0xf4, 0x1f, 0x49, 0x8f, 0x92, 0x22, 0x4a, 0x9c, 0xae, 0x67}} , {{0xd4, 0xb4, 0xf5, 0x78, 0x48, 0x68, 0xc3, 0x02, 0x04, 0x03, 0x24, 0x67, 0x17, 0xec, 0x16, 0x9f, 0xf7, 0x9e, 0x26, 0x60, 0x8e, 0xa1, 0x26, 0xa1, 0xab, 0x69, 0xee, 0x77, 0xd1, 0xb1, 0x67, 0x12}}}, {{{0x70, 0xf8, 0xc9, 0xc4, 0x57, 0xa6, 0x3a, 0x49, 0x47, 0x15, 0xce, 0x93, 0xc1, 0x9e, 0x73, 0x1a, 0xf9, 0x20, 0x35, 0x7a, 0xb8, 0xd4, 0x25, 0x83, 0x46, 0xf1, 0xcf, 0x56, 0xdb, 0xa8, 0x3d, 0x20}} , {{0x2f, 0x11, 0x32, 0xca, 0x61, 0xab, 0x38, 0xdf, 0xf0, 0x0f, 0x2f, 0xea, 0x32, 0x28, 0xf2, 0x4c, 0x6c, 0x71, 0xd5, 0x80, 0x85, 0xb8, 0x0e, 0x47, 0xe1, 0x95, 0x15, 0xcb, 0x27, 0xe8, 0xd0, 0x47}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xc8, 0x84, 0xa5, 0x08, 0xbc, 0xfd, 0x87, 0x3b, 0x99, 0x8b, 0x69, 0x80, 0x7b, 0xc6, 0x3a, 0xeb, 0x93, 0xcf, 0x4e, 0xf8, 0x5c, 0x2d, 0x86, 0x42, 0xb6, 0x71, 0xd7, 0x97, 0x5f, 0xe1, 0x42, 0x67}} , {{0xb4, 0xb9, 0x37, 0xfc, 0xa9, 0x5b, 0x2f, 0x1e, 0x93, 0xe4, 0x1e, 0x62, 0xfc, 0x3c, 0x78, 0x81, 0x8f, 0xf3, 0x8a, 0x66, 0x09, 0x6f, 0xad, 0x6e, 0x79, 0x73, 0xe5, 0xc9, 0x00, 0x06, 0xd3, 0x21}}}, {{{0xf8, 0xf9, 0x28, 0x6c, 0x6d, 0x59, 0xb2, 0x59, 0x74, 0x23, 0xbf, 0xe7, 0x33, 0x8d, 0x57, 0x09, 0x91, 0x9c, 0x24, 0x08, 0x15, 0x2b, 0xe2, 0xb8, 0xee, 0x3a, 0xe5, 0x27, 0x06, 0x86, 0xa4, 0x23}} , {{0xeb, 0x27, 0x67, 0xc1, 0x37, 0xab, 0x7a, 0xd8, 0x27, 0x9c, 0x07, 0x8e, 0xff, 0x11, 0x6a, 0xb0, 0x78, 0x6e, 0xad, 0x3a, 0x2e, 0x0f, 0x98, 0x9f, 0x72, 0xc3, 0x7f, 0x82, 0xf2, 0x96, 0x96, 0x70}}}, {{{0x81, 0x6b, 0x88, 0xe8, 0x1e, 0xc7, 0x77, 0x96, 0x0e, 0xa1, 0xa9, 0x52, 0xe0, 0xd8, 0x0e, 0x61, 0x9e, 0x79, 0x2d, 0x95, 0x9c, 0x8d, 0x96, 0xe0, 0x06, 0x40, 0x5d, 0x87, 0x28, 0x5f, 0x98, 0x70}} , {{0xf1, 0x79, 0x7b, 0xed, 0x4f, 0x44, 0xb2, 0xe7, 0x08, 0x0d, 0xc2, 0x08, 0x12, 0xd2, 0x9f, 0xdf, 0xcd, 0x93, 0x20, 0x8a, 0xcf, 0x33, 0xca, 0x6d, 0x89, 0xb9, 0x77, 0xc8, 0x93, 0x1b, 0x4e, 0x60}}}, {{{0x26, 0x4f, 0x7e, 0x97, 0xf6, 0x40, 0xdd, 0x4f, 0xfc, 0x52, 0x78, 0xf9, 0x90, 0x31, 0x03, 0xe6, 0x7d, 0x56, 0x39, 0x0b, 0x1d, 0x56, 0x82, 0x85, 0xf9, 0x1a, 0x42, 0x17, 0x69, 0x6c, 0xcf, 0x39}} , {{0x69, 0xd2, 0x06, 0x3a, 0x4f, 0x39, 0x2d, 0xf9, 0x38, 0x40, 0x8c, 0x4c, 0xe7, 0x05, 0x12, 0xb4, 0x78, 0x8b, 0xf8, 0xc0, 0xec, 0x93, 0xde, 0x7a, 0x6b, 0xce, 0x2c, 0xe1, 0x0e, 0xa9, 0x34, 0x44}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x0b, 0xa4, 0x3c, 0xb0, 0x0f, 0x7a, 0x51, 0xf1, 0x78, 0xd6, 0xd9, 0x6a, 0xfd, 0x46, 0xe8, 0xb8, 0xa8, 0x79, 0x1d, 0x87, 0xf9, 0x90, 0xf2, 0x9c, 0x13, 0x29, 0xf8, 0x0b, 0x20, 0x64, 0xfa, 0x05}} , {{0x26, 0x09, 0xda, 0x17, 0xaf, 0x95, 0xd6, 0xfb, 0x6a, 0x19, 0x0d, 0x6e, 0x5e, 0x12, 0xf1, 0x99, 0x4c, 0xaa, 0xa8, 0x6f, 0x79, 0x86, 0xf4, 0x72, 0x28, 0x00, 0x26, 0xf9, 0xea, 0x9e, 0x19, 0x3d}}}, {{{0x87, 0xdd, 0xcf, 0xf0, 0x5b, 0x49, 0xa2, 0x5d, 0x40, 0x7a, 0x23, 0x26, 0xa4, 0x7a, 0x83, 0x8a, 0xb7, 0x8b, 0xd2, 0x1a, 0xbf, 0xea, 0x02, 0x24, 0x08, 0x5f, 0x7b, 0xa9, 0xb1, 0xbe, 0x9d, 0x37}} , {{0xfc, 0x86, 0x4b, 0x08, 0xee, 0xe7, 0xa0, 0xfd, 0x21, 0x45, 0x09, 0x34, 0xc1, 0x61, 0x32, 0x23, 0xfc, 0x9b, 0x55, 0x48, 0x53, 0x99, 0xf7, 0x63, 0xd0, 0x99, 0xce, 0x01, 0xe0, 0x9f, 0xeb, 0x28}}}, {{{0x47, 0xfc, 0xab, 0x5a, 0x17, 0xf0, 0x85, 0x56, 0x3a, 0x30, 0x86, 0x20, 0x28, 0x4b, 0x8e, 0x44, 0x74, 0x3a, 0x6e, 0x02, 0xf1, 0x32, 0x8f, 0x9f, 0x3f, 0x08, 0x35, 0xe9, 0xca, 0x16, 0x5f, 0x6e}} , {{0x1c, 0x59, 0x1c, 0x65, 0x5d, 0x34, 0xa4, 0x09, 0xcd, 0x13, 0x9c, 0x70, 0x7d, 0xb1, 0x2a, 0xc5, 0x88, 0xaf, 0x0b, 0x60, 0xc7, 0x9f, 0x34, 0x8d, 0xd6, 0xb7, 0x7f, 0xea, 0x78, 0x65, 0x8d, 0x77}}}, {{{0x56, 0xa5, 0xc2, 0x0c, 0xdd, 0xbc, 0xb8, 0x20, 0x6d, 0x57, 0x61, 0xb5, 0xfb, 0x78, 0xb5, 0xd4, 0x49, 0x54, 0x90, 0x26, 0xc1, 0xcb, 0xe9, 0xe6, 0xbf, 0xec, 0x1d, 0x4e, 0xed, 0x07, 0x7e, 0x5e}} , {{0xc7, 0xf6, 0x6c, 0x56, 0x31, 0x20, 0x14, 0x0e, 0xa8, 0xd9, 0x27, 0xc1, 0x9a, 0x3d, 0x1b, 0x7d, 0x0e, 0x26, 0xd3, 0x81, 0xaa, 0xeb, 0xf5, 0x6b, 0x79, 0x02, 0xf1, 0x51, 0x5c, 0x75, 0x55, 0x0f}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x0a, 0x34, 0xcd, 0x82, 0x3c, 0x33, 0x09, 0x54, 0xd2, 0x61, 0x39, 0x30, 0x9b, 0xfd, 0xef, 0x21, 0x26, 0xd4, 0x70, 0xfa, 0xee, 0xf9, 0x31, 0x33, 0x73, 0x84, 0xd0, 0xb3, 0x81, 0xbf, 0xec, 0x2e}} , {{0xe8, 0x93, 0x8b, 0x00, 0x64, 0xf7, 0x9c, 0xb8, 0x74, 0xe0, 0xe6, 0x49, 0x48, 0x4d, 0x4d, 0x48, 0xb6, 0x19, 0xa1, 0x40, 0xb7, 0xd9, 0x32, 0x41, 0x7c, 0x82, 0x37, 0xa1, 0x2d, 0xdc, 0xd2, 0x54}}}, {{{0x68, 0x2b, 0x4a, 0x5b, 0xd5, 0xc7, 0x51, 0x91, 0x1d, 0xe1, 0x2a, 0x4b, 0xc4, 0x47, 0xf1, 0xbc, 0x7a, 0xb3, 0xcb, 0xc8, 0xb6, 0x7c, 0xac, 0x90, 0x05, 0xfd, 0xf3, 0xf9, 0x52, 0x3a, 0x11, 0x6b}} , {{0x3d, 0xc1, 0x27, 0xf3, 0x59, 0x43, 0x95, 0x90, 0xc5, 0x96, 0x79, 0xf5, 0xf4, 0x95, 0x65, 0x29, 0x06, 0x9c, 0x51, 0x05, 0x18, 0xda, 0xb8, 0x2e, 0x79, 0x7e, 0x69, 0x59, 0x71, 0x01, 0xeb, 0x1a}}}, {{{0x15, 0x06, 0x49, 0xb6, 0x8a, 0x3c, 0xea, 0x2f, 0x34, 0x20, 0x14, 0xc3, 0xaa, 0xd6, 0xaf, 0x2c, 0x3e, 0xbd, 0x65, 0x20, 0xe2, 0x4d, 0x4b, 0x3b, 0xeb, 0x9f, 0x4a, 0xc3, 0xad, 0xa4, 0x3b, 0x60}} , {{0xbc, 0x58, 0xe6, 0xc0, 0x95, 0x2a, 0x2a, 0x81, 0x9a, 0x7a, 0xf3, 0xd2, 0x06, 0xbe, 0x48, 0xbc, 0x0c, 0xc5, 0x46, 0xe0, 0x6a, 0xd4, 0xac, 0x0f, 0xd9, 0xcc, 0x82, 0x34, 0x2c, 0xaf, 0xdb, 0x1f}}}, {{{0xf7, 0x17, 0x13, 0xbd, 0xfb, 0xbc, 0xd2, 0xec, 0x45, 0xb3, 0x15, 0x31, 0xe9, 0xaf, 0x82, 0x84, 0x3d, 0x28, 0xc6, 0xfc, 0x11, 0xf5, 0x41, 0xb5, 0x8b, 0xd3, 0x12, 0x76, 0x52, 0xe7, 0x1a, 0x3c}} , {{0x4e, 0x36, 0x11, 0x07, 0xa2, 0x15, 0x20, 0x51, 0xc4, 0x2a, 0xc3, 0x62, 0x8b, 0x5e, 0x7f, 0xa6, 0x0f, 0xf9, 0x45, 0x85, 0x6c, 0x11, 0x86, 0xb7, 0x7e, 0xe5, 0xd7, 0xf9, 0xc3, 0x91, 0x1c, 0x05}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xea, 0xd6, 0xde, 0x29, 0x3a, 0x00, 0xb9, 0x02, 0x59, 0xcb, 0x26, 0xc4, 0xba, 0x99, 0xb1, 0x97, 0x2f, 0x8e, 0x00, 0x92, 0x26, 0x4f, 0x52, 0xeb, 0x47, 0x1b, 0x89, 0x8b, 0x24, 0xc0, 0x13, 0x7d}} , {{0xd5, 0x20, 0x5b, 0x80, 0xa6, 0x80, 0x20, 0x95, 0xc3, 0xe9, 0x9f, 0x8e, 0x87, 0x9e, 0x1e, 0x9e, 0x7a, 0xc7, 0xcc, 0x75, 0x6c, 0xa5, 0xf1, 0x91, 0x1a, 0xa8, 0x01, 0x2c, 0xab, 0x76, 0xa9, 0x59}}}, {{{0xde, 0xc9, 0xb1, 0x31, 0x10, 0x16, 0xaa, 0x35, 0x14, 0x6a, 0xd4, 0xb5, 0x34, 0x82, 0x71, 0xd2, 0x4a, 0x5d, 0x9a, 0x1f, 0x53, 0x26, 0x3c, 0xe5, 0x8e, 0x8d, 0x33, 0x7f, 0xff, 0xa9, 0xd5, 0x17}} , {{0x89, 0xaf, 0xf6, 0xa4, 0x64, 0xd5, 0x10, 0xe0, 0x1d, 0xad, 0xef, 0x44, 0xbd, 0xda, 0x83, 0xac, 0x7a, 0xa8, 0xf0, 0x1c, 0x07, 0xf9, 0xc3, 0x43, 0x6c, 0x3f, 0xb7, 0xd3, 0x87, 0x22, 0x02, 0x73}}}, {{{0x64, 0x1d, 0x49, 0x13, 0x2f, 0x71, 0xec, 0x69, 0x87, 0xd0, 0x42, 0xee, 0x13, 0xec, 0xe3, 0xed, 0x56, 0x7b, 0xbf, 0xbd, 0x8c, 0x2f, 0x7d, 0x7b, 0x9d, 0x28, 0xec, 0x8e, 0x76, 0x2f, 0x6f, 0x08}} , {{0x22, 0xf5, 0x5f, 0x4d, 0x15, 0xef, 0xfc, 0x4e, 0x57, 0x03, 0x36, 0x89, 0xf0, 0xeb, 0x5b, 0x91, 0xd6, 0xe2, 0xca, 0x01, 0xa5, 0xee, 0x52, 0xec, 0xa0, 0x3c, 0x8f, 0x33, 0x90, 0x5a, 0x94, 0x72}}}, {{{0x8a, 0x4b, 0xe7, 0x38, 0xbc, 0xda, 0xc2, 0xb0, 0x85, 0xe1, 0x4a, 0xfe, 0x2d, 0x44, 0x84, 0xcb, 0x20, 0x6b, 0x2d, 0xbf, 0x11, 0x9c, 0xd7, 0xbe, 0xd3, 0x3e, 0x5f, 0xbf, 0x68, 0xbc, 0xa8, 0x07}} , {{0x01, 0x89, 0x28, 0x22, 0x6a, 0x78, 0xaa, 0x29, 0x03, 0xc8, 0x74, 0x95, 0x03, 0x3e, 0xdc, 0xbd, 0x07, 0x13, 0xa8, 0xa2, 0x20, 0x2d, 0xb3, 0x18, 0x70, 0x42, 0xfd, 0x7a, 0xc4, 0xd7, 0x49, 0x72}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x02, 0xff, 0x32, 0x2b, 0x5c, 0x93, 0x54, 0x32, 0xe8, 0x57, 0x54, 0x1a, 0x8b, 0x33, 0x60, 0x65, 0xd3, 0x67, 0xa4, 0xc1, 0x26, 0xc4, 0xa4, 0x34, 0x1f, 0x9b, 0xa7, 0xa9, 0xf4, 0xd9, 0x4f, 0x5b}} , {{0x46, 0x8d, 0xb0, 0x33, 0x54, 0x26, 0x5b, 0x68, 0xdf, 0xbb, 0xc5, 0xec, 0xc2, 0xf9, 0x3c, 0x5a, 0x37, 0xc1, 0x8e, 0x27, 0x47, 0xaa, 0x49, 0x5a, 0xf8, 0xfb, 0x68, 0x04, 0x23, 0xd1, 0xeb, 0x40}}}, {{{0x65, 0xa5, 0x11, 0x84, 0x8a, 0x67, 0x9d, 0x9e, 0xd1, 0x44, 0x68, 0x7a, 0x34, 0xe1, 0x9f, 0xa3, 0x54, 0xcd, 0x07, 0xca, 0x79, 0x1f, 0x54, 0x2f, 0x13, 0x70, 0x4e, 0xee, 0xa2, 0xfa, 0xe7, 0x5d}} , {{0x36, 0xec, 0x54, 0xf8, 0xce, 0xe4, 0x85, 0xdf, 0xf6, 0x6f, 0x1d, 0x90, 0x08, 0xbc, 0xe8, 0xc0, 0x92, 0x2d, 0x43, 0x6b, 0x92, 0xa9, 0x8e, 0xab, 0x0a, 0x2e, 0x1c, 0x1e, 0x64, 0x23, 0x9f, 0x2c}}}, {{{0xa7, 0xd6, 0x2e, 0xd5, 0xcc, 0xd4, 0xcb, 0x5a, 0x3b, 0xa7, 0xf9, 0x46, 0x03, 0x1d, 0xad, 0x2b, 0x34, 0x31, 0x90, 0x00, 0x46, 0x08, 0x82, 0x14, 0xc4, 0xe0, 0x9c, 0xf0, 0xe3, 0x55, 0x43, 0x31}} , {{0x60, 0xd6, 0xdd, 0x78, 0xe6, 0xd4, 0x22, 0x42, 0x1f, 0x00, 0xf9, 0xb1, 0x6a, 0x63, 0xe2, 0x92, 0x59, 0xd1, 0x1a, 0xb7, 0x00, 0x54, 0x29, 0xc9, 0xc1, 0xf6, 0x6f, 0x7a, 0xc5, 0x3c, 0x5f, 0x65}}}, {{{0x27, 0x4f, 0xd0, 0x72, 0xb1, 0x11, 0x14, 0x27, 0x15, 0x94, 0x48, 0x81, 0x7e, 0x74, 0xd8, 0x32, 0xd5, 0xd1, 0x11, 0x28, 0x60, 0x63, 0x36, 0x32, 0x37, 0xb5, 0x13, 0x1c, 0xa0, 0x37, 0xe3, 0x74}} , {{0xf1, 0x25, 0x4e, 0x11, 0x96, 0x67, 0xe6, 0x1c, 0xc2, 0xb2, 0x53, 0xe2, 0xda, 0x85, 0xee, 0xb2, 0x9f, 0x59, 0xf3, 0xba, 0xbd, 0xfa, 0xcf, 0x6e, 0xf9, 0xda, 0xa4, 0xb3, 0x02, 0x8f, 0x64, 0x08}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x34, 0x94, 0xf2, 0x64, 0x54, 0x47, 0x37, 0x07, 0x40, 0x8a, 0x20, 0xba, 0x4a, 0x55, 0xd7, 0x3f, 0x47, 0xba, 0x25, 0x23, 0x14, 0xb0, 0x2c, 0xe8, 0x55, 0xa8, 0xa6, 0xef, 0x51, 0xbd, 0x6f, 0x6a}} , {{0x71, 0xd6, 0x16, 0x76, 0xb2, 0x06, 0xea, 0x79, 0xf5, 0xc4, 0xc3, 0x52, 0x7e, 0x61, 0xd1, 0xe1, 0xad, 0x70, 0x78, 0x1d, 0x16, 0x11, 0xf8, 0x7c, 0x2b, 0xfc, 0x55, 0x9f, 0x52, 0xf8, 0xf5, 0x16}}}, {{{0x34, 0x96, 0x9a, 0xf6, 0xc5, 0xe0, 0x14, 0x03, 0x24, 0x0e, 0x4c, 0xad, 0x9e, 0x9a, 0x70, 0x23, 0x96, 0xb2, 0xf1, 0x2e, 0x9d, 0xc3, 0x32, 0x9b, 0x54, 0xa5, 0x73, 0xde, 0x88, 0xb1, 0x3e, 0x24}} , {{0xf6, 0xe2, 0x4c, 0x1f, 0x5b, 0xb2, 0xaf, 0x82, 0xa5, 0xcf, 0x81, 0x10, 0x04, 0xef, 0xdb, 0xa2, 0xcc, 0x24, 0xb2, 0x7e, 0x0b, 0x7a, 0xeb, 0x01, 0xd8, 0x52, 0xf4, 0x51, 0x89, 0x29, 0x79, 0x37}}}, {{{0x74, 0xde, 0x12, 0xf3, 0x68, 0xb7, 0x66, 0xc3, 0xee, 0x68, 0xdc, 0x81, 0xb5, 0x55, 0x99, 0xab, 0xd9, 0x28, 0x63, 0x6d, 0x8b, 0x40, 0x69, 0x75, 0x6c, 0xcd, 0x5c, 0x2a, 0x7e, 0x32, 0x7b, 0x29}} , {{0x02, 0xcc, 0x22, 0x74, 0x4d, 0x19, 0x07, 0xc0, 0xda, 0xb5, 0x76, 0x51, 0x2a, 0xaa, 0xa6, 0x0a, 0x5f, 0x26, 0xd4, 0xbc, 0xaf, 0x48, 0x88, 0x7f, 0x02, 0xbc, 0xf2, 0xe1, 0xcf, 0xe9, 0xdd, 0x15}}}, {{{0xed, 0xb5, 0x9a, 0x8c, 0x9a, 0xdd, 0x27, 0xf4, 0x7f, 0x47, 0xd9, 0x52, 0xa7, 0xcd, 0x65, 0xa5, 0x31, 0x22, 0xed, 0xa6, 0x63, 0x5b, 0x80, 0x4a, 0xad, 0x4d, 0xed, 0xbf, 0xee, 0x49, 0xb3, 0x06}} , {{0xf8, 0x64, 0x8b, 0x60, 0x90, 0xe9, 0xde, 0x44, 0x77, 0xb9, 0x07, 0x36, 0x32, 0xc2, 0x50, 0xf5, 0x65, 0xdf, 0x48, 0x4c, 0x37, 0xaa, 0x68, 0xab, 0x9a, 0x1f, 0x3e, 0xff, 0x89, 0x92, 0xa0, 0x07}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x7d, 0x4f, 0x9c, 0x19, 0xc0, 0x4a, 0x31, 0xec, 0xf9, 0xaa, 0xeb, 0xb2, 0x16, 0x9c, 0xa3, 0x66, 0x5f, 0xd1, 0xd4, 0xed, 0xb8, 0x92, 0x1c, 0xab, 0xda, 0xea, 0xd9, 0x57, 0xdf, 0x4c, 0x2a, 0x48}} , {{0x4b, 0xb0, 0x4e, 0x6e, 0x11, 0x3b, 0x51, 0xbd, 0x6a, 0xfd, 0xe4, 0x25, 0xa5, 0x5f, 0x11, 0x3f, 0x98, 0x92, 0x51, 0x14, 0xc6, 0x5f, 0x3c, 0x0b, 0xa8, 0xf7, 0xc2, 0x81, 0x43, 0xde, 0x91, 0x73}}}, {{{0x3c, 0x8f, 0x9f, 0x33, 0x2a, 0x1f, 0x43, 0x33, 0x8f, 0x68, 0xff, 0x1f, 0x3d, 0x73, 0x6b, 0xbf, 0x68, 0xcc, 0x7d, 0x13, 0x6c, 0x24, 0x4b, 0xcc, 0x4d, 0x24, 0x0d, 0xfe, 0xde, 0x86, 0xad, 0x3b}} , {{0x79, 0x51, 0x81, 0x01, 0xdc, 0x73, 0x53, 0xe0, 0x6e, 0x9b, 0xea, 0x68, 0x3f, 0x5c, 0x14, 0x84, 0x53, 0x8d, 0x4b, 0xc0, 0x9f, 0x9f, 0x89, 0x2b, 0x8c, 0xba, 0x86, 0xfa, 0xf2, 0xcd, 0xe3, 0x2d}}}, {{{0x06, 0xf9, 0x29, 0x5a, 0xdb, 0x3d, 0x84, 0x52, 0xab, 0xcc, 0x6b, 0x60, 0x9d, 0xb7, 0x4a, 0x0e, 0x36, 0x63, 0x91, 0xad, 0xa0, 0x95, 0xb0, 0x97, 0x89, 0x4e, 0xcf, 0x7d, 0x3c, 0xe5, 0x7c, 0x28}} , {{0x2e, 0x69, 0x98, 0xfd, 0xc6, 0xbd, 0xcc, 0xca, 0xdf, 0x9a, 0x44, 0x7e, 0x9d, 0xca, 0x89, 0x6d, 0xbf, 0x27, 0xc2, 0xf8, 0xcd, 0x46, 0x00, 0x2b, 0xb5, 0x58, 0x4e, 0xb7, 0x89, 0x09, 0xe9, 0x2d}}}, {{{0x54, 0xbe, 0x75, 0xcb, 0x05, 0xb0, 0x54, 0xb7, 0xe7, 0x26, 0x86, 0x4a, 0xfc, 0x19, 0xcf, 0x27, 0x46, 0xd4, 0x22, 0x96, 0x5a, 0x11, 0xe8, 0xd5, 0x1b, 0xed, 0x71, 0xc5, 0x5d, 0xc8, 0xaf, 0x45}} , {{0x40, 0x7b, 0x77, 0x57, 0x49, 0x9e, 0x80, 0x39, 0x23, 0xee, 0x81, 0x0b, 0x22, 0xcf, 0xdb, 0x7a, 0x2f, 0x14, 0xb8, 0x57, 0x8f, 0xa1, 0x39, 0x1e, 0x77, 0xfc, 0x0b, 0xa6, 0xbf, 0x8a, 0x0c, 0x6c}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x77, 0x3a, 0xd4, 0xd8, 0x27, 0xcf, 0xe8, 0xa1, 0x72, 0x9d, 0xca, 0xdd, 0x0d, 0x96, 0xda, 0x79, 0xed, 0x56, 0x42, 0x15, 0x60, 0xc7, 0x1c, 0x6b, 0x26, 0x30, 0xf6, 0x6a, 0x95, 0x67, 0xf3, 0x0a}} , {{0xc5, 0x08, 0xa4, 0x2b, 0x2f, 0xbd, 0x31, 0x81, 0x2a, 0xa6, 0xb6, 0xe4, 0x00, 0x91, 0xda, 0x3d, 0xb2, 0xb0, 0x96, 0xce, 0x8a, 0xd2, 0x8d, 0x70, 0xb3, 0xd3, 0x34, 0x01, 0x90, 0x8d, 0x10, 0x21}}}, {{{0x33, 0x0d, 0xe7, 0xba, 0x4f, 0x07, 0xdf, 0x8d, 0xea, 0x7d, 0xa0, 0xc5, 0xd6, 0xb1, 0xb0, 0xe5, 0x57, 0x1b, 0x5b, 0xf5, 0x45, 0x13, 0x14, 0x64, 0x5a, 0xeb, 0x5c, 0xfc, 0x54, 0x01, 0x76, 0x2b}} , {{0x02, 0x0c, 0xc2, 0xaf, 0x96, 0x36, 0xfe, 0x4a, 0xe2, 0x54, 0x20, 0x6a, 0xeb, 0xb2, 0x9f, 0x62, 0xd7, 0xce, 0xa2, 0x3f, 0x20, 0x11, 0x34, 0x37, 0xe0, 0x42, 0xed, 0x6f, 0xf9, 0x1a, 0xc8, 0x7d}}}, {{{0xd8, 0xb9, 0x11, 0xe8, 0x36, 0x3f, 0x42, 0xc1, 0xca, 0xdc, 0xd3, 0xf1, 0xc8, 0x23, 0x3d, 0x4f, 0x51, 0x7b, 0x9d, 0x8d, 0xd8, 0xe4, 0xa0, 0xaa, 0xf3, 0x04, 0xd6, 0x11, 0x93, 0xc8, 0x35, 0x45}} , {{0x61, 0x36, 0xd6, 0x08, 0x90, 0xbf, 0xa7, 0x7a, 0x97, 0x6c, 0x0f, 0x84, 0xd5, 0x33, 0x2d, 0x37, 0xc9, 0x6a, 0x80, 0x90, 0x3d, 0x0a, 0xa2, 0xaa, 0xe1, 0xb8, 0x84, 0xba, 0x61, 0x36, 0xdd, 0x69}}}, {{{0x6b, 0xdb, 0x5b, 0x9c, 0xc6, 0x92, 0xbc, 0x23, 0xaf, 0xc5, 0xb8, 0x75, 0xf8, 0x42, 0xfa, 0xd6, 0xb6, 0x84, 0x94, 0x63, 0x98, 0x93, 0x48, 0x78, 0x38, 0xcd, 0xbb, 0x18, 0x34, 0xc3, 0xdb, 0x67}} , {{0x96, 0xf3, 0x3a, 0x09, 0x56, 0xb0, 0x6f, 0x7c, 0x51, 0x1e, 0x1b, 0x39, 0x48, 0xea, 0xc9, 0x0c, 0x25, 0xa2, 0x7a, 0xca, 0xe7, 0x92, 0xfc, 0x59, 0x30, 0xa3, 0x89, 0x85, 0xdf, 0x6f, 0x43, 0x38}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x79, 0x84, 0x44, 0x19, 0xbd, 0xe9, 0x54, 0xc4, 0xc0, 0x6e, 0x2a, 0xa8, 0xa8, 0x9b, 0x43, 0xd5, 0x71, 0x22, 0x5f, 0xdc, 0x01, 0xfa, 0xdf, 0xb3, 0xb8, 0x47, 0x4b, 0x0a, 0xa5, 0x44, 0xea, 0x29}} , {{0x05, 0x90, 0x50, 0xaf, 0x63, 0x5f, 0x9d, 0x9e, 0xe1, 0x9d, 0x38, 0x97, 0x1f, 0x6c, 0xac, 0x30, 0x46, 0xb2, 0x6a, 0x19, 0xd1, 0x4b, 0xdb, 0xbb, 0x8c, 0xda, 0x2e, 0xab, 0xc8, 0x5a, 0x77, 0x6c}}}, {{{0x2b, 0xbe, 0xaf, 0xa1, 0x6d, 0x2f, 0x0b, 0xb1, 0x8f, 0xe3, 0xe0, 0x38, 0xcd, 0x0b, 0x41, 0x1b, 0x4a, 0x15, 0x07, 0xf3, 0x6f, 0xdc, 0xb8, 0xe9, 0xde, 0xb2, 0xa3, 0x40, 0x01, 0xa6, 0x45, 0x1e}} , {{0x76, 0x0a, 0xda, 0x8d, 0x2c, 0x07, 0x3f, 0x89, 0x7d, 0x04, 0xad, 0x43, 0x50, 0x6e, 0xd2, 0x47, 0xcb, 0x8a, 0xe6, 0x85, 0x1a, 0x24, 0xf3, 0xd2, 0x60, 0xfd, 0xdf, 0x73, 0xa4, 0x0d, 0x73, 0x0e}}}, {{{0xfd, 0x67, 0x6b, 0x71, 0x9b, 0x81, 0x53, 0x39, 0x39, 0xf4, 0xb8, 0xd5, 0xc3, 0x30, 0x9b, 0x3b, 0x7c, 0xa3, 0xf0, 0xd0, 0x84, 0x21, 0xd6, 0xbf, 0xb7, 0x4c, 0x87, 0x13, 0x45, 0x2d, 0xa7, 0x55}} , {{0x5d, 0x04, 0xb3, 0x40, 0x28, 0x95, 0x2d, 0x30, 0x83, 0xec, 0x5e, 0xe4, 0xff, 0x75, 0xfe, 0x79, 0x26, 0x9d, 0x1d, 0x36, 0xcd, 0x0a, 0x15, 0xd2, 0x24, 0x14, 0x77, 0x71, 0xd7, 0x8a, 0x1b, 0x04}}}, {{{0x5d, 0x93, 0xc9, 0xbe, 0xaa, 0x90, 0xcd, 0x9b, 0xfb, 0x73, 0x7e, 0xb0, 0x64, 0x98, 0x57, 0x44, 0x42, 0x41, 0xb1, 0xaf, 0xea, 0xc1, 0xc3, 0x22, 0xff, 0x60, 0x46, 0xcb, 0x61, 0x81, 0x70, 0x61}} , {{0x0d, 0x82, 0xb9, 0xfe, 0x21, 0xcd, 0xc4, 0xf5, 0x98, 0x0c, 0x4e, 0x72, 0xee, 0x87, 0x49, 0xf8, 0xa1, 0x95, 0xdf, 0x8f, 0x2d, 0xbd, 0x21, 0x06, 0x7c, 0x15, 0xe8, 0x12, 0x6d, 0x93, 0xd6, 0x38}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x91, 0xf7, 0x51, 0xd9, 0xef, 0x7d, 0x42, 0x01, 0x13, 0xe9, 0xb8, 0x7f, 0xa6, 0x49, 0x17, 0x64, 0x21, 0x80, 0x83, 0x2c, 0x63, 0x4c, 0x60, 0x09, 0x59, 0x91, 0x92, 0x77, 0x39, 0x51, 0xf4, 0x48}} , {{0x60, 0xd5, 0x22, 0x83, 0x08, 0x2f, 0xff, 0x99, 0x3e, 0x69, 0x6d, 0x88, 0xda, 0xe7, 0x5b, 0x52, 0x26, 0x31, 0x2a, 0xe5, 0x89, 0xde, 0x68, 0x90, 0xb6, 0x22, 0x5a, 0xbd, 0xd3, 0x85, 0x53, 0x31}}}, {{{0xd8, 0xce, 0xdc, 0xf9, 0x3c, 0x4b, 0xa2, 0x1d, 0x2c, 0x2f, 0x36, 0xbe, 0x7a, 0xfc, 0xcd, 0xbc, 0xdc, 0xf9, 0x30, 0xbd, 0xff, 0x05, 0xc7, 0xe4, 0x8e, 0x17, 0x62, 0xf8, 0x4d, 0xa0, 0x56, 0x79}} , {{0x82, 0xe7, 0xf6, 0xba, 0x53, 0x84, 0x0a, 0xa3, 0x34, 0xff, 0x3c, 0xa3, 0x6a, 0xa1, 0x37, 0xea, 0xdd, 0xb6, 0x95, 0xb3, 0x78, 0x19, 0x76, 0x1e, 0x55, 0x2f, 0x77, 0x2e, 0x7f, 0xc1, 0xea, 0x5e}}}, {{{0x83, 0xe1, 0x6e, 0xa9, 0x07, 0x33, 0x3e, 0x83, 0xff, 0xcb, 0x1c, 0x9f, 0xb1, 0xa3, 0xb4, 0xc9, 0xe1, 0x07, 0x97, 0xff, 0xf8, 0x23, 0x8f, 0xce, 0x40, 0xfd, 0x2e, 0x5e, 0xdb, 0x16, 0x43, 0x2d}} , {{0xba, 0x38, 0x02, 0xf7, 0x81, 0x43, 0x83, 0xa3, 0x20, 0x4f, 0x01, 0x3b, 0x8a, 0x04, 0x38, 0x31, 0xc6, 0x0f, 0xc8, 0xdf, 0xd7, 0xfa, 0x2f, 0x88, 0x3f, 0xfc, 0x0c, 0x76, 0xc4, 0xa6, 0x45, 0x72}}}, {{{0xbb, 0x0c, 0xbc, 0x6a, 0xa4, 0x97, 0x17, 0x93, 0x2d, 0x6f, 0xde, 0x72, 0x10, 0x1c, 0x08, 0x2c, 0x0f, 0x80, 0x32, 0x68, 0x27, 0xd4, 0xab, 0xdd, 0xc5, 0x58, 0x61, 0x13, 0x6d, 0x11, 0x1e, 0x4d}} , {{0x1a, 0xb9, 0xc9, 0x10, 0xfb, 0x1e, 0x4e, 0xf4, 0x84, 0x4b, 0x8a, 0x5e, 0x7b, 0x4b, 0xe8, 0x43, 0x8c, 0x8f, 0x00, 0xb5, 0x54, 0x13, 0xc5, 0x5c, 0xb6, 0x35, 0x4e, 0x9d, 0xe4, 0x5b, 0x41, 0x6d}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x15, 0x7d, 0x12, 0x48, 0x82, 0x14, 0x42, 0xcd, 0x32, 0xd4, 0x4b, 0xc1, 0x72, 0x61, 0x2a, 0x8c, 0xec, 0xe2, 0xf8, 0x24, 0x45, 0x94, 0xe3, 0xbe, 0xdd, 0x67, 0xa8, 0x77, 0x5a, 0xae, 0x5b, 0x4b}} , {{0xcb, 0x77, 0x9a, 0x20, 0xde, 0xb8, 0x23, 0xd9, 0xa0, 0x0f, 0x8c, 0x7b, 0xa5, 0xcb, 0xae, 0xb6, 0xec, 0x42, 0x67, 0x0e, 0x58, 0xa4, 0x75, 0x98, 0x21, 0x71, 0x84, 0xb3, 0xe0, 0x76, 0x94, 0x73}}}, {{{0xdf, 0xfc, 0x69, 0x28, 0x23, 0x3f, 0x5b, 0xf8, 0x3b, 0x24, 0x37, 0xf3, 0x1d, 0xd5, 0x22, 0x6b, 0xd0, 0x98, 0xa8, 0x6c, 0xcf, 0xff, 0x06, 0xe1, 0x13, 0xdf, 0xb9, 0xc1, 0x0c, 0xa9, 0xbf, 0x33}} , {{0xd9, 0x81, 0xda, 0xb2, 0x4f, 0x82, 0x9d, 0x43, 0x81, 0x09, 0xf1, 0xd2, 0x01, 0xef, 0xac, 0xf4, 0x2d, 0x7d, 0x01, 0x09, 0xf1, 0xff, 0xa5, 0x9f, 0xe5, 0xca, 0x27, 0x63, 0xdb, 0x20, 0xb1, 0x53}}}, {{{0x67, 0x02, 0xe8, 0xad, 0xa9, 0x34, 0xd4, 0xf0, 0x15, 0x81, 0xaa, 0xc7, 0x4d, 0x87, 0x94, 0xea, 0x75, 0xe7, 0x4c, 0x94, 0x04, 0x0e, 0x69, 0x87, 0xe7, 0x51, 0x91, 0x10, 0x03, 0xc7, 0xbe, 0x56}} , {{0x32, 0xfb, 0x86, 0xec, 0x33, 0x6b, 0x2e, 0x51, 0x2b, 0xc8, 0xfa, 0x6c, 0x70, 0x47, 0x7e, 0xce, 0x05, 0x0c, 0x71, 0xf3, 0xb4, 0x56, 0xa6, 0xdc, 0xcc, 0x78, 0x07, 0x75, 0xd0, 0xdd, 0xb2, 0x6a}}}, {{{0xc6, 0xef, 0xb9, 0xc0, 0x2b, 0x22, 0x08, 0x1e, 0x71, 0x70, 0xb3, 0x35, 0x9c, 0x7a, 0x01, 0x92, 0x44, 0x9a, 0xf6, 0xb0, 0x58, 0x95, 0xc1, 0x9b, 0x02, 0xed, 0x2d, 0x7c, 0x34, 0x29, 0x49, 0x44}} , {{0x45, 0x62, 0x1d, 0x2e, 0xff, 0x2a, 0x1c, 0x21, 0xa4, 0x25, 0x7b, 0x0d, 0x8c, 0x15, 0x39, 0xfc, 0x8f, 0x7c, 0xa5, 0x7d, 0x1e, 0x25, 0xa3, 0x45, 0xd6, 0xab, 0xbd, 0xcb, 0xc5, 0x5e, 0x78, 0x77}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xd0, 0xd3, 0x42, 0xed, 0x1d, 0x00, 0x3c, 0x15, 0x2c, 0x9c, 0x77, 0x81, 0xd2, 0x73, 0xd1, 0x06, 0xd5, 0xc4, 0x7f, 0x94, 0xbb, 0x92, 0x2d, 0x2c, 0x4b, 0x45, 0x4b, 0xe9, 0x2a, 0x89, 0x6b, 0x2b}} , {{0xd2, 0x0c, 0x88, 0xc5, 0x48, 0x4d, 0xea, 0x0d, 0x4a, 0xc9, 0x52, 0x6a, 0x61, 0x79, 0xe9, 0x76, 0xf3, 0x85, 0x52, 0x5c, 0x1b, 0x2c, 0xe1, 0xd6, 0xc4, 0x0f, 0x18, 0x0e, 0x4e, 0xf6, 0x1c, 0x7f}}}, {{{0xb4, 0x04, 0x2e, 0x42, 0xcb, 0x1f, 0x2b, 0x11, 0x51, 0x7b, 0x08, 0xac, 0xaa, 0x3e, 0x9e, 0x52, 0x60, 0xb7, 0xc2, 0x61, 0x57, 0x8c, 0x84, 0xd5, 0x18, 0xa6, 0x19, 0xfc, 0xb7, 0x75, 0x91, 0x1b}} , {{0xe8, 0x68, 0xca, 0x44, 0xc8, 0x38, 0x38, 0xcc, 0x53, 0x0a, 0x32, 0x35, 0xcc, 0x52, 0xcb, 0x0e, 0xf7, 0xc5, 0xe7, 0xec, 0x3d, 0x85, 0xcc, 0x58, 0xe2, 0x17, 0x47, 0xff, 0x9f, 0xa5, 0x30, 0x17}}}, {{{0xe3, 0xae, 0xc8, 0xc1, 0x71, 0x75, 0x31, 0x00, 0x37, 0x41, 0x5c, 0x0e, 0x39, 0xda, 0x73, 0xa0, 0xc7, 0x97, 0x36, 0x6c, 0x5b, 0xf2, 0xee, 0x64, 0x0a, 0x3d, 0x89, 0x1e, 0x1d, 0x49, 0x8c, 0x37}} , {{0x4c, 0xe6, 0xb0, 0xc1, 0xa5, 0x2a, 0x82, 0x09, 0x08, 0xad, 0x79, 0x9c, 0x56, 0xf6, 0xf9, 0xc1, 0xd7, 0x7c, 0x39, 0x7f, 0x93, 0xca, 0x11, 0x55, 0xbf, 0x07, 0x1b, 0x82, 0x29, 0x69, 0x95, 0x5c}}}, {{{0x87, 0xee, 0xa6, 0x56, 0x9e, 0xc2, 0x9a, 0x56, 0x24, 0x42, 0x85, 0x4d, 0x98, 0x31, 0x1e, 0x60, 0x4d, 0x87, 0x85, 0x04, 0xae, 0x46, 0x12, 0xf9, 0x8e, 0x7f, 0xe4, 0x7f, 0xf6, 0x1c, 0x37, 0x01}} , {{0x73, 0x4c, 0xb6, 0xc5, 0xc4, 0xe9, 0x6c, 0x85, 0x48, 0x4a, 0x5a, 0xac, 0xd9, 0x1f, 0x43, 0xf8, 0x62, 0x5b, 0xee, 0x98, 0x2a, 0x33, 0x8e, 0x79, 0xce, 0x61, 0x06, 0x35, 0xd8, 0xd7, 0xca, 0x71}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x72, 0xd3, 0xae, 0xa6, 0xca, 0x8f, 0xcd, 0xcc, 0x78, 0x8e, 0x19, 0x4d, 0xa7, 0xd2, 0x27, 0xe9, 0xa4, 0x3c, 0x16, 0x5b, 0x84, 0x80, 0xf9, 0xd0, 0xcc, 0x6a, 0x1e, 0xca, 0x1e, 0x67, 0xbd, 0x63}} , {{0x7b, 0x6e, 0x2a, 0xd2, 0x87, 0x48, 0xff, 0xa1, 0xca, 0xe9, 0x15, 0x85, 0xdc, 0xdb, 0x2c, 0x39, 0x12, 0x91, 0xa9, 0x20, 0xaa, 0x4f, 0x29, 0xf4, 0x15, 0x7a, 0xd2, 0xf5, 0x32, 0xcc, 0x60, 0x04}}}, {{{0xe5, 0x10, 0x47, 0x3b, 0xfa, 0x90, 0xfc, 0x30, 0xb5, 0xea, 0x6f, 0x56, 0x8f, 0xfb, 0x0e, 0xa7, 0x3b, 0xc8, 0xb2, 0xff, 0x02, 0x7a, 0x33, 0x94, 0x93, 0x2a, 0x03, 0xe0, 0x96, 0x3a, 0x6c, 0x0f}} , {{0x5a, 0x63, 0x67, 0xe1, 0x9b, 0x47, 0x78, 0x9f, 0x38, 0x79, 0xac, 0x97, 0x66, 0x1d, 0x5e, 0x51, 0xee, 0x24, 0x42, 0xe8, 0x58, 0x4b, 0x8a, 0x03, 0x75, 0x86, 0x37, 0x86, 0xe2, 0x97, 0x4e, 0x3d}}}, {{{0x3f, 0x75, 0x8e, 0xb4, 0xff, 0xd8, 0xdd, 0xd6, 0x37, 0x57, 0x9d, 0x6d, 0x3b, 0xbd, 0xd5, 0x60, 0x88, 0x65, 0x9a, 0xb9, 0x4a, 0x68, 0x84, 0xa2, 0x67, 0xdd, 0x17, 0x25, 0x97, 0x04, 0x8b, 0x5e}} , {{0xbb, 0x40, 0x5e, 0xbc, 0x16, 0x92, 0x05, 0xc4, 0xc0, 0x4e, 0x72, 0x90, 0x0e, 0xab, 0xcf, 0x8a, 0xed, 0xef, 0xb9, 0x2d, 0x3b, 0xf8, 0x43, 0x5b, 0xba, 0x2d, 0xeb, 0x2f, 0x52, 0xd2, 0xd1, 0x5a}}}, {{{0x40, 0xb4, 0xab, 0xe6, 0xad, 0x9f, 0x46, 0x69, 0x4a, 0xb3, 0x8e, 0xaa, 0xea, 0x9c, 0x8a, 0x20, 0x16, 0x5d, 0x8c, 0x13, 0xbd, 0xf6, 0x1d, 0xc5, 0x24, 0xbd, 0x90, 0x2a, 0x1c, 0xc7, 0x13, 0x3b}} , {{0x54, 0xdc, 0x16, 0x0d, 0x18, 0xbe, 0x35, 0x64, 0x61, 0x52, 0x02, 0x80, 0xaf, 0x05, 0xf7, 0xa6, 0x42, 0xd3, 0x8f, 0x2e, 0x79, 0x26, 0xa8, 0xbb, 0xb2, 0x17, 0x48, 0xb2, 0x7a, 0x0a, 0x89, 0x14}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x20, 0xa8, 0x88, 0xe3, 0x91, 0xc0, 0x6e, 0xbb, 0x8a, 0x27, 0x82, 0x51, 0x83, 0xb2, 0x28, 0xa9, 0x83, 0xeb, 0xa6, 0xa9, 0x4d, 0x17, 0x59, 0x22, 0x54, 0x00, 0x50, 0x45, 0xcb, 0x48, 0x4b, 0x18}} , {{0x33, 0x7c, 0xe7, 0x26, 0xba, 0x4d, 0x32, 0xfe, 0x53, 0xf4, 0xfa, 0x83, 0xe3, 0xa5, 0x79, 0x66, 0x73, 0xef, 0x80, 0x23, 0x68, 0xc2, 0x60, 0xdd, 0xa9, 0x33, 0xdc, 0x03, 0x7a, 0xe0, 0xe0, 0x3e}}}, {{{0x34, 0x5c, 0x13, 0xfb, 0xc0, 0xe3, 0x78, 0x2b, 0x54, 0x58, 0x22, 0x9b, 0x76, 0x81, 0x7f, 0x93, 0x9c, 0x25, 0x3c, 0xd2, 0xe9, 0x96, 0x21, 0x26, 0x08, 0xf5, 0xed, 0x95, 0x11, 0xae, 0x04, 0x5a}} , {{0xb9, 0xe8, 0xc5, 0x12, 0x97, 0x1f, 0x83, 0xfe, 0x3e, 0x94, 0x99, 0xd4, 0x2d, 0xf9, 0x52, 0x59, 0x5c, 0x82, 0xa6, 0xf0, 0x75, 0x7e, 0xe8, 0xec, 0xcc, 0xac, 0x18, 0x21, 0x09, 0x67, 0x66, 0x67}}}, {{{0xb3, 0x40, 0x29, 0xd1, 0xcb, 0x1b, 0x08, 0x9e, 0x9c, 0xb7, 0x53, 0xb9, 0x3b, 0x71, 0x08, 0x95, 0x12, 0x1a, 0x58, 0xaf, 0x7e, 0x82, 0x52, 0x43, 0x4f, 0x11, 0x39, 0xf4, 0x93, 0x1a, 0x26, 0x05}} , {{0x6e, 0x44, 0xa3, 0xf9, 0x64, 0xaf, 0xe7, 0x6d, 0x7d, 0xdf, 0x1e, 0xac, 0x04, 0xea, 0x3b, 0x5f, 0x9b, 0xe8, 0x24, 0x9d, 0x0e, 0xe5, 0x2e, 0x3e, 0xdf, 0xa9, 0xf7, 0xd4, 0x50, 0x71, 0xf0, 0x78}}}, {{{0x3e, 0xa8, 0x38, 0xc2, 0x57, 0x56, 0x42, 0x9a, 0xb1, 0xe2, 0xf8, 0x45, 0xaa, 0x11, 0x48, 0x5f, 0x17, 0xc4, 0x54, 0x27, 0xdc, 0x5d, 0xaa, 0xdd, 0x41, 0xbc, 0xdf, 0x81, 0xb9, 0x53, 0xee, 0x52}} , {{0xc3, 0xf1, 0xa7, 0x6d, 0xb3, 0x5f, 0x92, 0x6f, 0xcc, 0x91, 0xb8, 0x95, 0x05, 0xdf, 0x3c, 0x64, 0x57, 0x39, 0x61, 0x51, 0xad, 0x8c, 0x38, 0x7b, 0xc8, 0xde, 0x00, 0x34, 0xbe, 0xa1, 0xb0, 0x7e}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x25, 0x24, 0x1d, 0x8a, 0x67, 0x20, 0xee, 0x42, 0xeb, 0x38, 0xed, 0x0b, 0x8b, 0xcd, 0x46, 0x9d, 0x5e, 0x6b, 0x1e, 0x24, 0x9d, 0x12, 0x05, 0x1a, 0xcc, 0x05, 0x4e, 0x92, 0x38, 0xe1, 0x1f, 0x50}} , {{0x4e, 0xee, 0x1c, 0x91, 0xe6, 0x11, 0xbd, 0x8e, 0x55, 0x1a, 0x18, 0x75, 0x66, 0xaf, 0x4d, 0x7b, 0x0f, 0xae, 0x6d, 0x85, 0xca, 0x82, 0x58, 0x21, 0x9c, 0x18, 0xe0, 0xed, 0xec, 0x22, 0x80, 0x2f}}}, {{{0x68, 0x3b, 0x0a, 0x39, 0x1d, 0x6a, 0x15, 0x57, 0xfc, 0xf0, 0x63, 0x54, 0xdb, 0x39, 0xdb, 0xe8, 0x5c, 0x64, 0xff, 0xa0, 0x09, 0x4f, 0x3b, 0xb7, 0x32, 0x60, 0x99, 0x94, 0xfd, 0x94, 0x82, 0x2d}} , {{0x24, 0xf6, 0x5a, 0x44, 0xf1, 0x55, 0x2c, 0xdb, 0xea, 0x7c, 0x84, 0x7c, 0x01, 0xac, 0xe3, 0xfd, 0xc9, 0x27, 0xc1, 0x5a, 0xb9, 0xde, 0x4f, 0x5a, 0x90, 0xdd, 0xc6, 0x67, 0xaa, 0x6f, 0x8a, 0x3a}}}, {{{0x78, 0x52, 0x87, 0xc9, 0x97, 0x63, 0xb1, 0xdd, 0x54, 0x5f, 0xc1, 0xf8, 0xf1, 0x06, 0xa6, 0xa8, 0xa3, 0x88, 0x82, 0xd4, 0xcb, 0xa6, 0x19, 0xdd, 0xd1, 0x11, 0x87, 0x08, 0x17, 0x4c, 0x37, 0x2a}} , {{0xa1, 0x0c, 0xf3, 0x08, 0x43, 0xd9, 0x24, 0x1e, 0x83, 0xa7, 0xdf, 0x91, 0xca, 0xbd, 0x69, 0x47, 0x8d, 0x1b, 0xe2, 0xb9, 0x4e, 0xb5, 0xe1, 0x76, 0xb3, 0x1c, 0x93, 0x03, 0xce, 0x5f, 0xb3, 0x5a}}}, {{{0x1d, 0xda, 0xe4, 0x61, 0x03, 0x50, 0xa9, 0x8b, 0x68, 0x18, 0xef, 0xb2, 0x1c, 0x84, 0x3b, 0xa2, 0x44, 0x95, 0xa3, 0x04, 0x3b, 0xd6, 0x99, 0x00, 0xaf, 0x76, 0x42, 0x67, 0x02, 0x7d, 0x85, 0x56}} , {{0xce, 0x72, 0x0e, 0x29, 0x84, 0xb2, 0x7d, 0xd2, 0x45, 0xbe, 0x57, 0x06, 0xed, 0x7f, 0xcf, 0xed, 0xcd, 0xef, 0x19, 0xd6, 0xbc, 0x15, 0x79, 0x64, 0xd2, 0x18, 0xe3, 0x20, 0x67, 0x3a, 0x54, 0x0b}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x52, 0xfd, 0x04, 0xc5, 0xfb, 0x99, 0xe7, 0xe8, 0xfb, 0x8c, 0xe1, 0x42, 0x03, 0xef, 0x9d, 0xd9, 0x9e, 0x4d, 0xf7, 0x80, 0xcf, 0x2e, 0xcc, 0x9b, 0x45, 0xc9, 0x7b, 0x7a, 0xbc, 0x37, 0xa8, 0x52}} , {{0x96, 0x11, 0x41, 0x8a, 0x47, 0x91, 0xfe, 0xb6, 0xda, 0x7a, 0x54, 0x63, 0xd1, 0x14, 0x35, 0x05, 0x86, 0x8c, 0xa9, 0x36, 0x3f, 0xf2, 0x85, 0x54, 0x4e, 0x92, 0xd8, 0x85, 0x01, 0x46, 0xd6, 0x50}}}, {{{0x53, 0xcd, 0xf3, 0x86, 0x40, 0xe6, 0x39, 0x42, 0x95, 0xd6, 0xcb, 0x45, 0x1a, 0x20, 0xc8, 0x45, 0x4b, 0x32, 0x69, 0x04, 0xb1, 0xaf, 0x20, 0x46, 0xc7, 0x6b, 0x23, 0x5b, 0x69, 0xee, 0x30, 0x3f}} , {{0x70, 0x83, 0x47, 0xc0, 0xdb, 0x55, 0x08, 0xa8, 0x7b, 0x18, 0x6d, 0xf5, 0x04, 0x5a, 0x20, 0x0c, 0x4a, 0x8c, 0x60, 0xae, 0xae, 0x0f, 0x64, 0x55, 0x55, 0x2e, 0xd5, 0x1d, 0x53, 0x31, 0x42, 0x41}}}, {{{0xca, 0xfc, 0x88, 0x6b, 0x96, 0x78, 0x0a, 0x8b, 0x83, 0xdc, 0xbc, 0xaf, 0x40, 0xb6, 0x8d, 0x7f, 0xef, 0xb4, 0xd1, 0x3f, 0xcc, 0xa2, 0x74, 0xc9, 0xc2, 0x92, 0x55, 0x00, 0xab, 0xdb, 0xbf, 0x4f}} , {{0x93, 0x1c, 0x06, 0x2d, 0x66, 0x65, 0x02, 0xa4, 0x97, 0x18, 0xfd, 0x00, 0xe7, 0xab, 0x03, 0xec, 0xce, 0xc1, 0xbf, 0x37, 0xf8, 0x13, 0x53, 0xa5, 0xe5, 0x0c, 0x3a, 0xa8, 0x55, 0xb9, 0xff, 0x68}}}, {{{0xe4, 0xe6, 0x6d, 0x30, 0x7d, 0x30, 0x35, 0xc2, 0x78, 0x87, 0xf9, 0xfc, 0x6b, 0x5a, 0xc3, 0xb7, 0x65, 0xd8, 0x2e, 0xc7, 0xa5, 0x0c, 0xc6, 0xdc, 0x12, 0xaa, 0xd6, 0x4f, 0xc5, 0x38, 0xbc, 0x0e}} , {{0xe2, 0x3c, 0x76, 0x86, 0x38, 0xf2, 0x7b, 0x2c, 0x16, 0x78, 0x8d, 0xf5, 0xa4, 0x15, 0xda, 0xdb, 0x26, 0x85, 0xa0, 0x56, 0xdd, 0x1d, 0xe3, 0xb3, 0xfd, 0x40, 0xef, 0xf2, 0xd9, 0xa1, 0xb3, 0x04}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xdb, 0x49, 0x0e, 0xe6, 0x58, 0x10, 0x7a, 0x52, 0xda, 0xb5, 0x7d, 0x37, 0x6a, 0x3e, 0xa1, 0x78, 0xce, 0xc7, 0x1c, 0x24, 0x23, 0xdb, 0x7d, 0xfb, 0x8c, 0x8d, 0xdc, 0x30, 0x67, 0x69, 0x75, 0x3b}} , {{0xa9, 0xea, 0x6d, 0x16, 0x16, 0x60, 0xf4, 0x60, 0x87, 0x19, 0x44, 0x8c, 0x4a, 0x8b, 0x3e, 0xfb, 0x16, 0x00, 0x00, 0x54, 0xa6, 0x9e, 0x9f, 0xef, 0xcf, 0xd9, 0xd2, 0x4c, 0x74, 0x31, 0xd0, 0x34}}}, {{{0xa4, 0xeb, 0x04, 0xa4, 0x8c, 0x8f, 0x71, 0x27, 0x95, 0x85, 0x5d, 0x55, 0x4b, 0xb1, 0x26, 0x26, 0xc8, 0xae, 0x6a, 0x7d, 0xa2, 0x21, 0xca, 0xce, 0x38, 0xab, 0x0f, 0xd0, 0xd5, 0x2b, 0x6b, 0x00}} , {{0xe5, 0x67, 0x0c, 0xf1, 0x3a, 0x9a, 0xea, 0x09, 0x39, 0xef, 0xd1, 0x30, 0xbc, 0x33, 0xba, 0xb1, 0x6a, 0xc5, 0x27, 0x08, 0x7f, 0x54, 0x80, 0x3d, 0xab, 0xf6, 0x15, 0x7a, 0xc2, 0x40, 0x73, 0x72}}}, {{{0x84, 0x56, 0x82, 0xb6, 0x12, 0x70, 0x7f, 0xf7, 0xf0, 0xbd, 0x5b, 0xa9, 0xd5, 0xc5, 0x5f, 0x59, 0xbf, 0x7f, 0xb3, 0x55, 0x22, 0x02, 0xc9, 0x44, 0x55, 0x87, 0x8f, 0x96, 0x98, 0x64, 0x6d, 0x15}} , {{0xb0, 0x8b, 0xaa, 0x1e, 0xec, 0xc7, 0xa5, 0x8f, 0x1f, 0x92, 0x04, 0xc6, 0x05, 0xf6, 0xdf, 0xa1, 0xcc, 0x1f, 0x81, 0xf5, 0x0e, 0x9c, 0x57, 0xdc, 0xe3, 0xbb, 0x06, 0x87, 0x1e, 0xfe, 0x23, 0x6c}}}, {{{0xd8, 0x2b, 0x5b, 0x16, 0xea, 0x20, 0xf1, 0xd3, 0x68, 0x8f, 0xae, 0x5b, 0xd0, 0xa9, 0x1a, 0x19, 0xa8, 0x36, 0xfb, 0x2b, 0x57, 0x88, 0x7d, 0x90, 0xd5, 0xa6, 0xf3, 0xdc, 0x38, 0x89, 0x4e, 0x1f}} , {{0xcc, 0x19, 0xda, 0x9b, 0x3b, 0x43, 0x48, 0x21, 0x2e, 0x23, 0x4d, 0x3d, 0xae, 0xf8, 0x8c, 0xfc, 0xdd, 0xa6, 0x74, 0x37, 0x65, 0xca, 0xee, 0x1a, 0x19, 0x8e, 0x9f, 0x64, 0x6f, 0x0c, 0x8b, 0x5a}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x25, 0xb9, 0xc2, 0xf0, 0x72, 0xb8, 0x15, 0x16, 0xcc, 0x8d, 0x3c, 0x6f, 0x25, 0xed, 0xf4, 0x46, 0x2e, 0x0c, 0x60, 0x0f, 0xe2, 0x84, 0x34, 0x55, 0x89, 0x59, 0x34, 0x1b, 0xf5, 0x8d, 0xfe, 0x08}} , {{0xf8, 0xab, 0x93, 0xbc, 0x44, 0xba, 0x1b, 0x75, 0x4b, 0x49, 0x6f, 0xd0, 0x54, 0x2e, 0x63, 0xba, 0xb5, 0xea, 0xed, 0x32, 0x14, 0xc9, 0x94, 0xd8, 0xc5, 0xce, 0xf4, 0x10, 0x68, 0xe0, 0x38, 0x27}}}, {{{0x74, 0x1c, 0x14, 0x9b, 0xd4, 0x64, 0x61, 0x71, 0x5a, 0xb6, 0x21, 0x33, 0x4f, 0xf7, 0x8e, 0xba, 0xa5, 0x48, 0x9a, 0xc7, 0xfa, 0x9a, 0xf0, 0xb4, 0x62, 0xad, 0xf2, 0x5e, 0xcc, 0x03, 0x24, 0x1a}} , {{0xf5, 0x76, 0xfd, 0xe4, 0xaf, 0xb9, 0x03, 0x59, 0xce, 0x63, 0xd2, 0x3b, 0x1f, 0xcd, 0x21, 0x0c, 0xad, 0x44, 0xa5, 0x97, 0xac, 0x80, 0x11, 0x02, 0x9b, 0x0c, 0xe5, 0x8b, 0xcd, 0xfb, 0x79, 0x77}}}, {{{0x15, 0xbe, 0x9a, 0x0d, 0xba, 0x38, 0x72, 0x20, 0x8a, 0xf5, 0xbe, 0x59, 0x93, 0x79, 0xb7, 0xf6, 0x6a, 0x0c, 0x38, 0x27, 0x1a, 0x60, 0xf4, 0x86, 0x3b, 0xab, 0x5a, 0x00, 0xa0, 0xce, 0x21, 0x7d}} , {{0x6c, 0xba, 0x14, 0xc5, 0xea, 0x12, 0x9e, 0x2e, 0x82, 0x63, 0xce, 0x9b, 0x4a, 0xe7, 0x1d, 0xec, 0xf1, 0x2e, 0x51, 0x1c, 0xf4, 0xd0, 0x69, 0x15, 0x42, 0x9d, 0xa3, 0x3f, 0x0e, 0xbf, 0xe9, 0x5c}}}, {{{0xe4, 0x0d, 0xf4, 0xbd, 0xee, 0x31, 0x10, 0xed, 0xcb, 0x12, 0x86, 0xad, 0xd4, 0x2f, 0x90, 0x37, 0x32, 0xc3, 0x0b, 0x73, 0xec, 0x97, 0x85, 0xa4, 0x01, 0x1c, 0x76, 0x35, 0xfe, 0x75, 0xdd, 0x71}} , {{0x11, 0xa4, 0x88, 0x9f, 0x3e, 0x53, 0x69, 0x3b, 0x1b, 0xe0, 0xf7, 0xba, 0x9b, 0xad, 0x4e, 0x81, 0x5f, 0xb5, 0x5c, 0xae, 0xbe, 0x67, 0x86, 0x37, 0x34, 0x8e, 0x07, 0x32, 0x45, 0x4a, 0x67, 0x39}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x90, 0x70, 0x58, 0x20, 0x03, 0x1e, 0x67, 0xb2, 0xc8, 0x9b, 0x58, 0xc5, 0xb1, 0xeb, 0x2d, 0x4a, 0xde, 0x82, 0x8c, 0xf2, 0xd2, 0x14, 0xb8, 0x70, 0x61, 0x4e, 0x73, 0xd6, 0x0b, 0x6b, 0x0d, 0x30}} , {{0x81, 0xfc, 0x55, 0x5c, 0xbf, 0xa7, 0xc4, 0xbd, 0xe2, 0xf0, 0x4b, 0x8f, 0xe9, 0x7d, 0x99, 0xfa, 0xd3, 0xab, 0xbc, 0xc7, 0x83, 0x2b, 0x04, 0x7f, 0x0c, 0x19, 0x43, 0x03, 0x3d, 0x07, 0xca, 0x40}}}, {{{0xf9, 0xc8, 0xbe, 0x8c, 0x16, 0x81, 0x39, 0x96, 0xf6, 0x17, 0x58, 0xc8, 0x30, 0x58, 0xfb, 0xc2, 0x03, 0x45, 0xd2, 0x52, 0x76, 0xe0, 0x6a, 0x26, 0x28, 0x5c, 0x88, 0x59, 0x6a, 0x5a, 0x54, 0x42}} , {{0x07, 0xb5, 0x2e, 0x2c, 0x67, 0x15, 0x9b, 0xfb, 0x83, 0x69, 0x1e, 0x0f, 0xda, 0xd6, 0x29, 0xb1, 0x60, 0xe0, 0xb2, 0xba, 0x69, 0xa2, 0x9e, 0xbd, 0xbd, 0xe0, 0x1c, 0xbd, 0xcd, 0x06, 0x64, 0x70}}}, {{{0x41, 0xfa, 0x8c, 0xe1, 0x89, 0x8f, 0x27, 0xc8, 0x25, 0x8f, 0x6f, 0x5f, 0x55, 0xf8, 0xde, 0x95, 0x6d, 0x2f, 0x75, 0x16, 0x2b, 0x4e, 0x44, 0xfd, 0x86, 0x6e, 0xe9, 0x70, 0x39, 0x76, 0x97, 0x7e}} , {{0x17, 0x62, 0x6b, 0x14, 0xa1, 0x7c, 0xd0, 0x79, 0x6e, 0xd8, 0x8a, 0xa5, 0x6d, 0x8c, 0x93, 0xd2, 0x3f, 0xec, 0x44, 0x8d, 0x6e, 0x91, 0x01, 0x8c, 0x8f, 0xee, 0x01, 0x8f, 0xc0, 0xb4, 0x85, 0x0e}}}, {{{0x02, 0x3a, 0x70, 0x41, 0xe4, 0x11, 0x57, 0x23, 0xac, 0xe6, 0xfc, 0x54, 0x7e, 0xcd, 0xd7, 0x22, 0xcb, 0x76, 0x9f, 0x20, 0xce, 0xa0, 0x73, 0x76, 0x51, 0x3b, 0xa4, 0xf8, 0xe3, 0x62, 0x12, 0x6c}} , {{0x7f, 0x00, 0x9c, 0x26, 0x0d, 0x6f, 0x48, 0x7f, 0x3a, 0x01, 0xed, 0xc5, 0x96, 0xb0, 0x1f, 0x4f, 0xa8, 0x02, 0x62, 0x27, 0x8a, 0x50, 0x8d, 0x9a, 0x8b, 0x52, 0x0f, 0x1e, 0xcf, 0x41, 0x38, 0x19}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xf5, 0x6c, 0xd4, 0x2f, 0x0f, 0x69, 0x0f, 0x87, 0x3f, 0x61, 0x65, 0x1e, 0x35, 0x34, 0x85, 0xba, 0x02, 0x30, 0xac, 0x25, 0x3d, 0xe2, 0x62, 0xf1, 0xcc, 0xe9, 0x1b, 0xc2, 0xef, 0x6a, 0x42, 0x57}} , {{0x34, 0x1f, 0x2e, 0xac, 0xd1, 0xc7, 0x04, 0x52, 0x32, 0x66, 0xb2, 0x33, 0x73, 0x21, 0x34, 0x54, 0xf7, 0x71, 0xed, 0x06, 0xb0, 0xff, 0xa6, 0x59, 0x6f, 0x8a, 0x4e, 0xfb, 0x02, 0xb0, 0x45, 0x6b}}}, {{{0xf5, 0x48, 0x0b, 0x03, 0xc5, 0x22, 0x7d, 0x80, 0x08, 0x53, 0xfe, 0x32, 0xb1, 0xa1, 0x8a, 0x74, 0x6f, 0xbd, 0x3f, 0x85, 0xf4, 0xcf, 0xf5, 0x60, 0xaf, 0x41, 0x7e, 0x3e, 0x46, 0xa3, 0x5a, 0x20}} , {{0xaa, 0x35, 0x87, 0x44, 0x63, 0x66, 0x97, 0xf8, 0x6e, 0x55, 0x0c, 0x04, 0x3e, 0x35, 0x50, 0xbf, 0x93, 0x69, 0xd2, 0x8b, 0x05, 0x55, 0x99, 0xbe, 0xe2, 0x53, 0x61, 0xec, 0xe8, 0x08, 0x0b, 0x32}}}, {{{0xb3, 0x10, 0x45, 0x02, 0x69, 0x59, 0x2e, 0x97, 0xd9, 0x64, 0xf8, 0xdb, 0x25, 0x80, 0xdc, 0xc4, 0xd5, 0x62, 0x3c, 0xed, 0x65, 0x91, 0xad, 0xd1, 0x57, 0x81, 0x94, 0xaa, 0xa1, 0x29, 0xfc, 0x68}} , {{0xdd, 0xb5, 0x7d, 0xab, 0x5a, 0x21, 0x41, 0x53, 0xbb, 0x17, 0x79, 0x0d, 0xd1, 0xa8, 0x0c, 0x0c, 0x20, 0x88, 0x09, 0xe9, 0x84, 0xe8, 0x25, 0x11, 0x67, 0x7a, 0x8b, 0x1a, 0xe4, 0x5d, 0xe1, 0x5d}}}, {{{0x37, 0xea, 0xfe, 0x65, 0x3b, 0x25, 0xe8, 0xe1, 0xc2, 0xc5, 0x02, 0xa4, 0xbe, 0x98, 0x0a, 0x2b, 0x61, 0xc1, 0x9b, 0xe2, 0xd5, 0x92, 0xe6, 0x9e, 0x7d, 0x1f, 0xca, 0x43, 0x88, 0x8b, 0x2c, 0x59}} , {{0xe0, 0xb5, 0x00, 0x1d, 0x2a, 0x6f, 0xaf, 0x79, 0x86, 0x2f, 0xa6, 0x5a, 0x93, 0xd1, 0xfe, 0xae, 0x3a, 0xee, 0xdb, 0x7c, 0x61, 0xbe, 0x7c, 0x01, 0xf9, 0xfe, 0x52, 0xdc, 0xd8, 0x52, 0xa3, 0x42}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x22, 0xaf, 0x13, 0x37, 0xbd, 0x37, 0x71, 0xac, 0x04, 0x46, 0x63, 0xac, 0xa4, 0x77, 0xed, 0x25, 0x38, 0xe0, 0x15, 0xa8, 0x64, 0x00, 0x0d, 0xce, 0x51, 0x01, 0xa9, 0xbc, 0x0f, 0x03, 0x1c, 0x04}} , {{0x89, 0xf9, 0x80, 0x07, 0xcf, 0x3f, 0xb3, 0xe9, 0xe7, 0x45, 0x44, 0x3d, 0x2a, 0x7c, 0xe9, 0xe4, 0x16, 0x5c, 0x5e, 0x65, 0x1c, 0xc7, 0x7d, 0xc6, 0x7a, 0xfb, 0x43, 0xee, 0x25, 0x76, 0x46, 0x72}}}, {{{0x02, 0xa2, 0xed, 0xf4, 0x8f, 0x6b, 0x0b, 0x3e, 0xeb, 0x35, 0x1a, 0xd5, 0x7e, 0xdb, 0x78, 0x00, 0x96, 0x8a, 0xa0, 0xb4, 0xcf, 0x60, 0x4b, 0xd4, 0xd5, 0xf9, 0x2d, 0xbf, 0x88, 0xbd, 0x22, 0x62}} , {{0x13, 0x53, 0xe4, 0x82, 0x57, 0xfa, 0x1e, 0x8f, 0x06, 0x2b, 0x90, 0xba, 0x08, 0xb6, 0x10, 0x54, 0x4f, 0x7c, 0x1b, 0x26, 0xed, 0xda, 0x6b, 0xdd, 0x25, 0xd0, 0x4e, 0xea, 0x42, 0xbb, 0x25, 0x03}}}, {{{0x51, 0x16, 0x50, 0x7c, 0xd5, 0x5d, 0xf6, 0x99, 0xe8, 0x77, 0x72, 0x4e, 0xfa, 0x62, 0xcb, 0x76, 0x75, 0x0c, 0xe2, 0x71, 0x98, 0x92, 0xd5, 0xfa, 0x45, 0xdf, 0x5c, 0x6f, 0x1e, 0x9e, 0x28, 0x69}} , {{0x0d, 0xac, 0x66, 0x6d, 0xc3, 0x8b, 0xba, 0x16, 0xb5, 0xe2, 0xa0, 0x0d, 0x0c, 0xbd, 0xa4, 0x8e, 0x18, 0x6c, 0xf2, 0xdc, 0xf9, 0xdc, 0x4a, 0x86, 0x25, 0x95, 0x14, 0xcb, 0xd8, 0x1a, 0x04, 0x0f}}}, {{{0x97, 0xa5, 0xdb, 0x8b, 0x2d, 0xaa, 0x42, 0x11, 0x09, 0xf2, 0x93, 0xbb, 0xd9, 0x06, 0x84, 0x4e, 0x11, 0xa8, 0xa0, 0x25, 0x2b, 0xa6, 0x5f, 0xae, 0xc4, 0xb4, 0x4c, 0xc8, 0xab, 0xc7, 0x3b, 0x02}} , {{0xee, 0xc9, 0x29, 0x0f, 0xdf, 0x11, 0x85, 0xed, 0xce, 0x0d, 0x62, 0x2c, 0x8f, 0x4b, 0xf9, 0x04, 0xe9, 0x06, 0x72, 0x1d, 0x37, 0x20, 0x50, 0xc9, 0x14, 0xeb, 0xec, 0x39, 0xa7, 0x97, 0x2b, 0x4d}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x69, 0xd1, 0x39, 0xbd, 0xfb, 0x33, 0xbe, 0xc4, 0xf0, 0x5c, 0xef, 0xf0, 0x56, 0x68, 0xfc, 0x97, 0x47, 0xc8, 0x72, 0xb6, 0x53, 0xa4, 0x0a, 0x98, 0xa5, 0xb4, 0x37, 0x71, 0xcf, 0x66, 0x50, 0x6d}} , {{0x17, 0xa4, 0x19, 0x52, 0x11, 0x47, 0xb3, 0x5c, 0x5b, 0xa9, 0x2e, 0x22, 0xb4, 0x00, 0x52, 0xf9, 0x57, 0x18, 0xb8, 0xbe, 0x5a, 0xe3, 0xab, 0x83, 0xc8, 0x87, 0x0a, 0x2a, 0xd8, 0x8c, 0xbb, 0x54}}}, {{{0xa9, 0x62, 0x93, 0x85, 0xbe, 0xe8, 0x73, 0x4a, 0x0e, 0xb0, 0xb5, 0x2d, 0x94, 0x50, 0xaa, 0xd3, 0xb2, 0xea, 0x9d, 0x62, 0x76, 0x3b, 0x07, 0x34, 0x4e, 0x2d, 0x70, 0xc8, 0x9a, 0x15, 0x66, 0x6b}} , {{0xc5, 0x96, 0xca, 0xc8, 0x22, 0x1a, 0xee, 0x5f, 0xe7, 0x31, 0x60, 0x22, 0x83, 0x08, 0x63, 0xce, 0xb9, 0x32, 0x44, 0x58, 0x5d, 0x3a, 0x9b, 0xe4, 0x04, 0xd5, 0xef, 0x38, 0xef, 0x4b, 0xdd, 0x19}}}, {{{0x4d, 0xc2, 0x17, 0x75, 0xa1, 0x68, 0xcd, 0xc3, 0xc6, 0x03, 0x44, 0xe3, 0x78, 0x09, 0x91, 0x47, 0x3f, 0x0f, 0xe4, 0x92, 0x58, 0xfa, 0x7d, 0x1f, 0x20, 0x94, 0x58, 0x5e, 0xbc, 0x19, 0x02, 0x6f}} , {{0x20, 0xd6, 0xd8, 0x91, 0x54, 0xa7, 0xf3, 0x20, 0x4b, 0x34, 0x06, 0xfa, 0x30, 0xc8, 0x6f, 0x14, 0x10, 0x65, 0x74, 0x13, 0x4e, 0xf0, 0x69, 0x26, 0xce, 0xcf, 0x90, 0xf4, 0xd0, 0xc5, 0xc8, 0x64}}}, {{{0x26, 0xa2, 0x50, 0x02, 0x24, 0x72, 0xf1, 0xf0, 0x4e, 0x2d, 0x93, 0xd5, 0x08, 0xe7, 0xae, 0x38, 0xf7, 0x18, 0xa5, 0x32, 0x34, 0xc2, 0xf0, 0xa6, 0xec, 0xb9, 0x61, 0x7b, 0x64, 0x99, 0xac, 0x71}} , {{0x25, 0xcf, 0x74, 0x55, 0x1b, 0xaa, 0xa9, 0x38, 0x41, 0x40, 0xd5, 0x95, 0x95, 0xab, 0x1c, 0x5e, 0xbc, 0x41, 0x7e, 0x14, 0x30, 0xbe, 0x13, 0x89, 0xf4, 0xe5, 0xeb, 0x28, 0xc0, 0xc2, 0x96, 0x3a}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x2b, 0x77, 0x45, 0xec, 0x67, 0x76, 0x32, 0x4c, 0xb9, 0xdf, 0x25, 0x32, 0x6b, 0xcb, 0xe7, 0x14, 0x61, 0x43, 0xee, 0xba, 0x9b, 0x71, 0xef, 0xd2, 0x48, 0x65, 0xbb, 0x1b, 0x8a, 0x13, 0x1b, 0x22}} , {{0x84, 0xad, 0x0c, 0x18, 0x38, 0x5a, 0xba, 0xd0, 0x98, 0x59, 0xbf, 0x37, 0xb0, 0x4f, 0x97, 0x60, 0x20, 0xb3, 0x9b, 0x97, 0xf6, 0x08, 0x6c, 0xa4, 0xff, 0xfb, 0xb7, 0xfa, 0x95, 0xb2, 0x51, 0x79}}}, {{{0x28, 0x5c, 0x3f, 0xdb, 0x6b, 0x18, 0x3b, 0x5c, 0xd1, 0x04, 0x28, 0xde, 0x85, 0x52, 0x31, 0xb5, 0xbb, 0xf6, 0xa9, 0xed, 0xbe, 0x28, 0x4f, 0xb3, 0x7e, 0x05, 0x6a, 0xdb, 0x95, 0x0d, 0x1b, 0x1c}} , {{0xd5, 0xc5, 0xc3, 0x9a, 0x0a, 0xd0, 0x31, 0x3e, 0x07, 0x36, 0x8e, 0xc0, 0x8a, 0x62, 0xb1, 0xca, 0xd6, 0x0e, 0x1e, 0x9d, 0xef, 0xab, 0x98, 0x4d, 0xbb, 0x6c, 0x05, 0xe0, 0xe4, 0x5d, 0xbd, 0x57}}}, {{{0xcc, 0x21, 0x27, 0xce, 0xfd, 0xa9, 0x94, 0x8e, 0xe1, 0xab, 0x49, 0xe0, 0x46, 0x26, 0xa1, 0xa8, 0x8c, 0xa1, 0x99, 0x1d, 0xb4, 0x27, 0x6d, 0x2d, 0xc8, 0x39, 0x30, 0x5e, 0x37, 0x52, 0xc4, 0x6e}} , {{0xa9, 0x85, 0xf4, 0xe7, 0xb0, 0x15, 0x33, 0x84, 0x1b, 0x14, 0x1a, 0x02, 0xd9, 0x3b, 0xad, 0x0f, 0x43, 0x6c, 0xea, 0x3e, 0x0f, 0x7e, 0xda, 0xdd, 0x6b, 0x4c, 0x7f, 0x6e, 0xd4, 0x6b, 0xbf, 0x0f}}}, {{{0x47, 0x9f, 0x7c, 0x56, 0x7c, 0x43, 0x91, 0x1c, 0xbb, 0x4e, 0x72, 0x3e, 0x64, 0xab, 0xa0, 0xa0, 0xdf, 0xb4, 0xd8, 0x87, 0x3a, 0xbd, 0xa8, 0x48, 0xc9, 0xb8, 0xef, 0x2e, 0xad, 0x6f, 0x84, 0x4f}} , {{0x2d, 0x2d, 0xf0, 0x1b, 0x7e, 0x2a, 0x6c, 0xf8, 0xa9, 0x6a, 0xe1, 0xf0, 0x99, 0xa1, 0x67, 0x9a, 0xd4, 0x13, 0xca, 0xca, 0xba, 0x27, 0x92, 0xaa, 0xa1, 0x5d, 0x50, 0xde, 0xcc, 0x40, 0x26, 0x0a}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x9f, 0x3e, 0xf2, 0xb2, 0x90, 0xce, 0xdb, 0x64, 0x3e, 0x03, 0xdd, 0x37, 0x36, 0x54, 0x70, 0x76, 0x24, 0xb5, 0x69, 0x03, 0xfc, 0xa0, 0x2b, 0x74, 0xb2, 0x05, 0x0e, 0xcc, 0xd8, 0x1f, 0x6a, 0x1f}} , {{0x19, 0x5e, 0x60, 0x69, 0x58, 0x86, 0xa0, 0x31, 0xbd, 0x32, 0xe9, 0x2c, 0x5c, 0xd2, 0x85, 0xba, 0x40, 0x64, 0xa8, 0x74, 0xf8, 0x0e, 0x1c, 0xb3, 0xa9, 0x69, 0xe8, 0x1e, 0x40, 0x64, 0x99, 0x77}}}, {{{0x6c, 0x32, 0x4f, 0xfd, 0xbb, 0x5c, 0xbb, 0x8d, 0x64, 0x66, 0x4a, 0x71, 0x1f, 0x79, 0xa3, 0xad, 0x8d, 0xf9, 0xd4, 0xec, 0xcf, 0x67, 0x70, 0xfa, 0x05, 0x4a, 0x0f, 0x6e, 0xaf, 0x87, 0x0a, 0x6f}} , {{0xc6, 0x36, 0x6e, 0x6c, 0x8c, 0x24, 0x09, 0x60, 0xbe, 0x26, 0xd2, 0x4c, 0x5e, 0x17, 0xca, 0x5f, 0x1d, 0xcc, 0x87, 0xe8, 0x42, 0x6a, 0xcb, 0xcb, 0x7d, 0x92, 0x05, 0x35, 0x81, 0x13, 0x60, 0x6b}}}, {{{0xf4, 0x15, 0xcd, 0x0f, 0x0a, 0xaf, 0x4e, 0x6b, 0x51, 0xfd, 0x14, 0xc4, 0x2e, 0x13, 0x86, 0x74, 0x44, 0xcb, 0x66, 0x6b, 0xb6, 0x9d, 0x74, 0x56, 0x32, 0xac, 0x8d, 0x8e, 0x8c, 0x8c, 0x8c, 0x39}} , {{0xca, 0x59, 0x74, 0x1a, 0x11, 0xef, 0x6d, 0xf7, 0x39, 0x5c, 0x3b, 0x1f, 0xfa, 0xe3, 0x40, 0x41, 0x23, 0x9e, 0xf6, 0xd1, 0x21, 0xa2, 0xbf, 0xad, 0x65, 0x42, 0x6b, 0x59, 0x8a, 0xe8, 0xc5, 0x7f}}}, {{{0x64, 0x05, 0x7a, 0x84, 0x4a, 0x13, 0xc3, 0xf6, 0xb0, 0x6e, 0x9a, 0x6b, 0x53, 0x6b, 0x32, 0xda, 0xd9, 0x74, 0x75, 0xc4, 0xba, 0x64, 0x3d, 0x3b, 0x08, 0xdd, 0x10, 0x46, 0xef, 0xc7, 0x90, 0x1f}} , {{0x7b, 0x2f, 0x3a, 0xce, 0xc8, 0xa1, 0x79, 0x3c, 0x30, 0x12, 0x44, 0x28, 0xf6, 0xbc, 0xff, 0xfd, 0xf4, 0xc0, 0x97, 0xb0, 0xcc, 0xc3, 0x13, 0x7a, 0xb9, 0x9a, 0x16, 0xe4, 0xcb, 0x4c, 0x34, 0x63}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x07, 0x4e, 0xd3, 0x2d, 0x09, 0x33, 0x0e, 0xd2, 0x0d, 0xbe, 0x3e, 0xe7, 0xe4, 0xaa, 0xb7, 0x00, 0x8b, 0xe8, 0xad, 0xaa, 0x7a, 0x8d, 0x34, 0x28, 0xa9, 0x81, 0x94, 0xc5, 0xe7, 0x42, 0xac, 0x47}} , {{0x24, 0x89, 0x7a, 0x8f, 0xb5, 0x9b, 0xf0, 0xc2, 0x03, 0x64, 0xd0, 0x1e, 0xf5, 0xa4, 0xb2, 0xf3, 0x74, 0xe9, 0x1a, 0x16, 0xfd, 0xcb, 0x15, 0xea, 0xeb, 0x10, 0x6c, 0x35, 0xd1, 0xc1, 0xa6, 0x28}}}, {{{0xcc, 0xd5, 0x39, 0xfc, 0xa5, 0xa4, 0xad, 0x32, 0x15, 0xce, 0x19, 0xe8, 0x34, 0x2b, 0x1c, 0x60, 0x91, 0xfc, 0x05, 0xa9, 0xb3, 0xdc, 0x80, 0x29, 0xc4, 0x20, 0x79, 0x06, 0x39, 0xc0, 0xe2, 0x22}} , {{0xbb, 0xa8, 0xe1, 0x89, 0x70, 0x57, 0x18, 0x54, 0x3c, 0xf6, 0x0d, 0x82, 0x12, 0x05, 0x87, 0x96, 0x06, 0x39, 0xe3, 0xf8, 0xb3, 0x95, 0xe5, 0xd7, 0x26, 0xbf, 0x09, 0x5a, 0x94, 0xf9, 0x1c, 0x63}}}, {{{0x2b, 0x8c, 0x2d, 0x9a, 0x8b, 0x84, 0xf2, 0x56, 0xfb, 0xad, 0x2e, 0x7f, 0xb7, 0xfc, 0x30, 0xe1, 0x35, 0x89, 0xba, 0x4d, 0xa8, 0x6d, 0xce, 0x8c, 0x8b, 0x30, 0xe0, 0xda, 0x29, 0x18, 0x11, 0x17}} , {{0x19, 0xa6, 0x5a, 0x65, 0x93, 0xc3, 0xb5, 0x31, 0x22, 0x4f, 0xf3, 0xf6, 0x0f, 0xeb, 0x28, 0xc3, 0x7c, 0xeb, 0xce, 0x86, 0xec, 0x67, 0x76, 0x6e, 0x35, 0x45, 0x7b, 0xd8, 0x6b, 0x92, 0x01, 0x65}}}, {{{0x3d, 0xd5, 0x9a, 0x64, 0x73, 0x36, 0xb1, 0xd6, 0x86, 0x98, 0x42, 0x3f, 0x8a, 0xf1, 0xc7, 0xf5, 0x42, 0xa8, 0x9c, 0x52, 0xa8, 0xdc, 0xf9, 0x24, 0x3f, 0x4a, 0xa1, 0xa4, 0x5b, 0xe8, 0x62, 0x1a}} , {{0xc5, 0xbd, 0xc8, 0x14, 0xd5, 0x0d, 0xeb, 0xe1, 0xa5, 0xe6, 0x83, 0x11, 0x09, 0x00, 0x1d, 0x55, 0x83, 0x51, 0x7e, 0x75, 0x00, 0x81, 0xb9, 0xcb, 0xd8, 0xc5, 0xe5, 0xa1, 0xd9, 0x17, 0x6d, 0x1f}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xea, 0xf9, 0xe4, 0xe9, 0xe1, 0x52, 0x3f, 0x51, 0x19, 0x0d, 0xdd, 0xd9, 0x9d, 0x93, 0x31, 0x87, 0x23, 0x09, 0xd5, 0x83, 0xeb, 0x92, 0x09, 0x76, 0x6e, 0xe3, 0xf8, 0xc0, 0xa2, 0x66, 0xb5, 0x36}} , {{0x3a, 0xbb, 0x39, 0xed, 0x32, 0x02, 0xe7, 0x43, 0x7a, 0x38, 0x14, 0x84, 0xe3, 0x44, 0xd2, 0x5e, 0x94, 0xdd, 0x78, 0x89, 0x55, 0x4c, 0x73, 0x9e, 0xe1, 0xe4, 0x3e, 0x43, 0xd0, 0x4a, 0xde, 0x1b}}}, {{{0xb2, 0xe7, 0x8f, 0xe3, 0xa3, 0xc5, 0xcb, 0x72, 0xee, 0x79, 0x41, 0xf8, 0xdf, 0xee, 0x65, 0xc5, 0x45, 0x77, 0x27, 0x3c, 0xbd, 0x58, 0xd3, 0x75, 0xe2, 0x04, 0x4b, 0xbb, 0x65, 0xf3, 0xc8, 0x0f}} , {{0x24, 0x7b, 0x93, 0x34, 0xb5, 0xe2, 0x74, 0x48, 0xcd, 0xa0, 0x0b, 0x92, 0x97, 0x66, 0x39, 0xf4, 0xb0, 0xe2, 0x5d, 0x39, 0x6a, 0x5b, 0x45, 0x17, 0x78, 0x1e, 0xdb, 0x91, 0x81, 0x1c, 0xf9, 0x16}}}, {{{0x16, 0xdf, 0xd1, 0x5a, 0xd5, 0xe9, 0x4e, 0x58, 0x95, 0x93, 0x5f, 0x51, 0x09, 0xc3, 0x2a, 0xc9, 0xd4, 0x55, 0x48, 0x79, 0xa4, 0xa3, 0xb2, 0xc3, 0x62, 0xaa, 0x8c, 0xe8, 0xad, 0x47, 0x39, 0x1b}} , {{0x46, 0xda, 0x9e, 0x51, 0x3a, 0xe6, 0xd1, 0xa6, 0xbb, 0x4d, 0x7b, 0x08, 0xbe, 0x8c, 0xd5, 0xf3, 0x3f, 0xfd, 0xf7, 0x44, 0x80, 0x2d, 0x53, 0x4b, 0xd0, 0x87, 0x68, 0xc1, 0xb5, 0xd8, 0xf7, 0x07}}}, {{{0xf4, 0x10, 0x46, 0xbe, 0xb7, 0xd2, 0xd1, 0xce, 0x5e, 0x76, 0xa2, 0xd7, 0x03, 0xdc, 0xe4, 0x81, 0x5a, 0xf6, 0x3c, 0xde, 0xae, 0x7a, 0x9d, 0x21, 0x34, 0xa5, 0xf6, 0xa9, 0x73, 0xe2, 0x8d, 0x60}} , {{0xfa, 0x44, 0x71, 0xf6, 0x41, 0xd8, 0xc6, 0x58, 0x13, 0x37, 0xeb, 0x84, 0x0f, 0x96, 0xc7, 0xdc, 0xc8, 0xa9, 0x7a, 0x83, 0xb2, 0x2f, 0x31, 0xb1, 0x1a, 0xd8, 0x98, 0x3f, 0x11, 0xd0, 0x31, 0x3b}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x81, 0xd5, 0x34, 0x16, 0x01, 0xa3, 0x93, 0xea, 0x52, 0x94, 0xec, 0x93, 0xb7, 0x81, 0x11, 0x2d, 0x58, 0xf9, 0xb5, 0x0a, 0xaa, 0x4f, 0xf6, 0x2e, 0x3f, 0x36, 0xbf, 0x33, 0x5a, 0xe7, 0xd1, 0x08}} , {{0x1a, 0xcf, 0x42, 0xae, 0xcc, 0xb5, 0x77, 0x39, 0xc4, 0x5b, 0x5b, 0xd0, 0x26, 0x59, 0x27, 0xd0, 0x55, 0x71, 0x12, 0x9d, 0x88, 0x3d, 0x9c, 0xea, 0x41, 0x6a, 0xf0, 0x50, 0x93, 0x93, 0xdd, 0x47}}}, {{{0x6f, 0xc9, 0x51, 0x6d, 0x1c, 0xaa, 0xf5, 0xa5, 0x90, 0x3f, 0x14, 0xe2, 0x6e, 0x8e, 0x64, 0xfd, 0xac, 0xe0, 0x4e, 0x22, 0xe5, 0xc1, 0xbc, 0x29, 0x0a, 0x6a, 0x9e, 0xa1, 0x60, 0xcb, 0x2f, 0x0b}} , {{0xdc, 0x39, 0x32, 0xf3, 0xa1, 0x44, 0xe9, 0xc5, 0xc3, 0x78, 0xfb, 0x95, 0x47, 0x34, 0x35, 0x34, 0xe8, 0x25, 0xde, 0x93, 0xc6, 0xb4, 0x76, 0x6d, 0x86, 0x13, 0xc6, 0xe9, 0x68, 0xb5, 0x01, 0x63}}}, {{{0x1f, 0x9a, 0x52, 0x64, 0x97, 0xd9, 0x1c, 0x08, 0x51, 0x6f, 0x26, 0x9d, 0xaa, 0x93, 0x33, 0x43, 0xfa, 0x77, 0xe9, 0x62, 0x9b, 0x5d, 0x18, 0x75, 0xeb, 0x78, 0xf7, 0x87, 0x8f, 0x41, 0xb4, 0x4d}} , {{0x13, 0xa8, 0x82, 0x3e, 0xe9, 0x13, 0xad, 0xeb, 0x01, 0xca, 0xcf, 0xda, 0xcd, 0xf7, 0x6c, 0xc7, 0x7a, 0xdc, 0x1e, 0x6e, 0xc8, 0x4e, 0x55, 0x62, 0x80, 0xea, 0x78, 0x0c, 0x86, 0xb9, 0x40, 0x51}}}, {{{0x27, 0xae, 0xd3, 0x0d, 0x4c, 0x8f, 0x34, 0xea, 0x7d, 0x3c, 0xe5, 0x8a, 0xcf, 0x5b, 0x92, 0xd8, 0x30, 0x16, 0xb4, 0xa3, 0x75, 0xff, 0xeb, 0x27, 0xc8, 0x5c, 0x6c, 0xc2, 0xee, 0x6c, 0x21, 0x0b}} , {{0xc3, 0xba, 0x12, 0x53, 0x2a, 0xaa, 0x77, 0xad, 0x19, 0x78, 0x55, 0x8a, 0x2e, 0x60, 0x87, 0xc2, 0x6e, 0x91, 0x38, 0x91, 0x3f, 0x7a, 0xc5, 0x24, 0x8f, 0x51, 0xc5, 0xde, 0xb0, 0x53, 0x30, 0x56}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x02, 0xfe, 0x54, 0x12, 0x18, 0xca, 0x7d, 0xa5, 0x68, 0x43, 0xa3, 0x6d, 0x14, 0x2a, 0x6a, 0xa5, 0x8e, 0x32, 0xe7, 0x63, 0x4f, 0xe3, 0xc6, 0x44, 0x3e, 0xab, 0x63, 0xca, 0x17, 0x86, 0x74, 0x3f}} , {{0x1e, 0x64, 0xc1, 0x7d, 0x52, 0xdc, 0x13, 0x5a, 0xa1, 0x9c, 0x4e, 0xee, 0x99, 0x28, 0xbb, 0x4c, 0xee, 0xac, 0xa9, 0x1b, 0x89, 0xa2, 0x38, 0x39, 0x7b, 0xc4, 0x0f, 0x42, 0xe6, 0x89, 0xed, 0x0f}}}, {{{0xf3, 0x3c, 0x8c, 0x80, 0x83, 0x10, 0x8a, 0x37, 0x50, 0x9c, 0xb4, 0xdf, 0x3f, 0x8c, 0xf7, 0x23, 0x07, 0xd6, 0xff, 0xa0, 0x82, 0x6c, 0x75, 0x3b, 0xe4, 0xb5, 0xbb, 0xe4, 0xe6, 0x50, 0xf0, 0x08}} , {{0x62, 0xee, 0x75, 0x48, 0x92, 0x33, 0xf2, 0xf4, 0xad, 0x15, 0x7a, 0xa1, 0x01, 0x46, 0xa9, 0x32, 0x06, 0x88, 0xb6, 0x36, 0x47, 0x35, 0xb9, 0xb4, 0x42, 0x85, 0x76, 0xf0, 0x48, 0x00, 0x90, 0x38}}}, {{{0x51, 0x15, 0x9d, 0xc3, 0x95, 0xd1, 0x39, 0xbb, 0x64, 0x9d, 0x15, 0x81, 0xc1, 0x68, 0xd0, 0xb6, 0xa4, 0x2c, 0x7d, 0x5e, 0x02, 0x39, 0x00, 0xe0, 0x3b, 0xa4, 0xcc, 0xca, 0x1d, 0x81, 0x24, 0x10}} , {{0xe7, 0x29, 0xf9, 0x37, 0xd9, 0x46, 0x5a, 0xcd, 0x70, 0xfe, 0x4d, 0x5b, 0xbf, 0xa5, 0xcf, 0x91, 0xf4, 0xef, 0xee, 0x8a, 0x29, 0xd0, 0xe7, 0xc4, 0x25, 0x92, 0x8a, 0xff, 0x36, 0xfc, 0xe4, 0x49}}}, {{{0xbd, 0x00, 0xb9, 0x04, 0x7d, 0x35, 0xfc, 0xeb, 0xd0, 0x0b, 0x05, 0x32, 0x52, 0x7a, 0x89, 0x24, 0x75, 0x50, 0xe1, 0x63, 0x02, 0x82, 0x8e, 0xe7, 0x85, 0x0c, 0xf2, 0x56, 0x44, 0x37, 0x83, 0x25}} , {{0x8f, 0xa1, 0xce, 0xcb, 0x60, 0xda, 0x12, 0x02, 0x1e, 0x29, 0x39, 0x2a, 0x03, 0xb7, 0xeb, 0x77, 0x40, 0xea, 0xc9, 0x2b, 0x2c, 0xd5, 0x7d, 0x7e, 0x2c, 0xc7, 0x5a, 0xfd, 0xff, 0xc4, 0xd1, 0x62}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x1d, 0x88, 0x98, 0x5b, 0x4e, 0xfc, 0x41, 0x24, 0x05, 0xe6, 0x50, 0x2b, 0xae, 0x96, 0x51, 0xd9, 0x6b, 0x72, 0xb2, 0x33, 0x42, 0x98, 0x68, 0xbb, 0x10, 0x5a, 0x7a, 0x8c, 0x9d, 0x07, 0xb4, 0x05}} , {{0x2f, 0x61, 0x9f, 0xd7, 0xa8, 0x3f, 0x83, 0x8c, 0x10, 0x69, 0x90, 0xe6, 0xcf, 0xd2, 0x63, 0xa3, 0xe4, 0x54, 0x7e, 0xe5, 0x69, 0x13, 0x1c, 0x90, 0x57, 0xaa, 0xe9, 0x53, 0x22, 0x43, 0x29, 0x23}}}, {{{0xe5, 0x1c, 0xf8, 0x0a, 0xfd, 0x2d, 0x7e, 0xf5, 0xf5, 0x70, 0x7d, 0x41, 0x6b, 0x11, 0xfe, 0xbe, 0x99, 0xd1, 0x55, 0x29, 0x31, 0xbf, 0xc0, 0x97, 0x6c, 0xd5, 0x35, 0xcc, 0x5e, 0x8b, 0xd9, 0x69}} , {{0x8e, 0x4e, 0x9f, 0x25, 0xf8, 0x81, 0x54, 0x2d, 0x0e, 0xd5, 0x54, 0x81, 0x9b, 0xa6, 0x92, 0xce, 0x4b, 0xe9, 0x8f, 0x24, 0x3b, 0xca, 0xe0, 0x44, 0xab, 0x36, 0xfe, 0xfb, 0x87, 0xd4, 0x26, 0x3e}}}, {{{0x0f, 0x93, 0x9c, 0x11, 0xe7, 0xdb, 0xf1, 0xf0, 0x85, 0x43, 0x28, 0x15, 0x37, 0xdd, 0xde, 0x27, 0xdf, 0xad, 0x3e, 0x49, 0x4f, 0xe0, 0x5b, 0xf6, 0x80, 0x59, 0x15, 0x3c, 0x85, 0xb7, 0x3e, 0x12}} , {{0xf5, 0xff, 0xcc, 0xf0, 0xb4, 0x12, 0x03, 0x5f, 0xc9, 0x84, 0xcb, 0x1d, 0x17, 0xe0, 0xbc, 0xcc, 0x03, 0x62, 0xa9, 0x8b, 0x94, 0xa6, 0xaa, 0x18, 0xcb, 0x27, 0x8d, 0x49, 0xa6, 0x17, 0x15, 0x07}}}, {{{0xd9, 0xb6, 0xd4, 0x9d, 0xd4, 0x6a, 0xaf, 0x70, 0x07, 0x2c, 0x10, 0x9e, 0xbd, 0x11, 0xad, 0xe4, 0x26, 0x33, 0x70, 0x92, 0x78, 0x1c, 0x74, 0x9f, 0x75, 0x60, 0x56, 0xf4, 0x39, 0xa8, 0xa8, 0x62}} , {{0x3b, 0xbf, 0x55, 0x35, 0x61, 0x8b, 0x44, 0x97, 0xe8, 0x3a, 0x55, 0xc1, 0xc8, 0x3b, 0xfd, 0x95, 0x29, 0x11, 0x60, 0x96, 0x1e, 0xcb, 0x11, 0x9d, 0xc2, 0x03, 0x8a, 0x1b, 0xc6, 0xd6, 0x45, 0x3d}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x7e, 0x0e, 0x50, 0xb2, 0xcc, 0x0d, 0x6b, 0xa6, 0x71, 0x5b, 0x42, 0xed, 0xbd, 0xaf, 0xac, 0xf0, 0xfc, 0x12, 0xa2, 0x3f, 0x4e, 0xda, 0xe8, 0x11, 0xf3, 0x23, 0xe1, 0x04, 0x62, 0x03, 0x1c, 0x4e}} , {{0xc8, 0xb1, 0x1b, 0x6f, 0x73, 0x61, 0x3d, 0x27, 0x0d, 0x7d, 0x7a, 0x25, 0x5f, 0x73, 0x0e, 0x2f, 0x93, 0xf6, 0x24, 0xd8, 0x4f, 0x90, 0xac, 0xa2, 0x62, 0x0a, 0xf0, 0x61, 0xd9, 0x08, 0x59, 0x6a}}}, {{{0x6f, 0x2d, 0x55, 0xf8, 0x2f, 0x8e, 0xf0, 0x18, 0x3b, 0xea, 0xdd, 0x26, 0x72, 0xd1, 0xf5, 0xfe, 0xe5, 0xb8, 0xe6, 0xd3, 0x10, 0x48, 0x46, 0x49, 0x3a, 0x9f, 0x5e, 0x45, 0x6b, 0x90, 0xe8, 0x7f}} , {{0xd3, 0x76, 0x69, 0x33, 0x7b, 0xb9, 0x40, 0x70, 0xee, 0xa6, 0x29, 0x6b, 0xdd, 0xd0, 0x5d, 0x8d, 0xc1, 0x3e, 0x4a, 0xea, 0x37, 0xb1, 0x03, 0x02, 0x03, 0x35, 0xf1, 0x28, 0x9d, 0xff, 0x00, 0x13}}}, {{{0x7a, 0xdb, 0x12, 0xd2, 0x8a, 0x82, 0x03, 0x1b, 0x1e, 0xaf, 0xf9, 0x4b, 0x9c, 0xbe, 0xae, 0x7c, 0xe4, 0x94, 0x2a, 0x23, 0xb3, 0x62, 0x86, 0xe7, 0xfd, 0x23, 0xaa, 0x99, 0xbd, 0x2b, 0x11, 0x6c}} , {{0x8d, 0xa6, 0xd5, 0xac, 0x9d, 0xcc, 0x68, 0x75, 0x7f, 0xc3, 0x4d, 0x4b, 0xdd, 0x6c, 0xbb, 0x11, 0x5a, 0x60, 0xe5, 0xbd, 0x7d, 0x27, 0x8b, 0xda, 0xb4, 0x95, 0xf6, 0x03, 0x27, 0xa4, 0x92, 0x3f}}}, {{{0x22, 0xd6, 0xb5, 0x17, 0x84, 0xbf, 0x12, 0xcc, 0x23, 0x14, 0x4a, 0xdf, 0x14, 0x31, 0xbc, 0xa1, 0xac, 0x6e, 0xab, 0xfa, 0x57, 0x11, 0x53, 0xb3, 0x27, 0xe6, 0xf9, 0x47, 0x33, 0x44, 0x34, 0x1e}} , {{0x79, 0xfc, 0xa6, 0xb4, 0x0b, 0x35, 0x20, 0xc9, 0x4d, 0x22, 0x84, 0xc4, 0xa9, 0x20, 0xec, 0x89, 0x94, 0xba, 0x66, 0x56, 0x48, 0xb9, 0x87, 0x7f, 0xca, 0x1e, 0x06, 0xed, 0xa5, 0x55, 0x59, 0x29}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x56, 0xe1, 0xf5, 0xf1, 0xd5, 0xab, 0xa8, 0x2b, 0xae, 0x89, 0xf3, 0xcf, 0x56, 0x9f, 0xf2, 0x4b, 0x31, 0xbc, 0x18, 0xa9, 0x06, 0x5b, 0xbe, 0xb4, 0x61, 0xf8, 0xb2, 0x06, 0x9c, 0x81, 0xab, 0x4c}} , {{0x1f, 0x68, 0x76, 0x01, 0x16, 0x38, 0x2b, 0x0f, 0x77, 0x97, 0x92, 0x67, 0x4e, 0x86, 0x6a, 0x8b, 0xe5, 0xe8, 0x0c, 0xf7, 0x36, 0x39, 0xb5, 0x33, 0xe6, 0xcf, 0x5e, 0xbd, 0x18, 0xfb, 0x10, 0x1f}}}, {{{0x83, 0xf0, 0x0d, 0x63, 0xef, 0x53, 0x6b, 0xb5, 0x6b, 0xf9, 0x83, 0xcf, 0xde, 0x04, 0x22, 0x9b, 0x2c, 0x0a, 0xe0, 0xa5, 0xd8, 0xc7, 0x9c, 0xa5, 0xa3, 0xf6, 0x6f, 0xcf, 0x90, 0x6b, 0x68, 0x7c}} , {{0x33, 0x15, 0xd7, 0x7f, 0x1a, 0xd5, 0x21, 0x58, 0xc4, 0x18, 0xa5, 0xf0, 0xcc, 0x73, 0xa8, 0xfd, 0xfa, 0x18, 0xd1, 0x03, 0x91, 0x8d, 0x52, 0xd2, 0xa3, 0xa4, 0xd3, 0xb1, 0xea, 0x1d, 0x0f, 0x00}}}, {{{0xcc, 0x48, 0x83, 0x90, 0xe5, 0xfd, 0x3f, 0x84, 0xaa, 0xf9, 0x8b, 0x82, 0x59, 0x24, 0x34, 0x68, 0x4f, 0x1c, 0x23, 0xd9, 0xcc, 0x71, 0xe1, 0x7f, 0x8c, 0xaf, 0xf1, 0xee, 0x00, 0xb6, 0xa0, 0x77}} , {{0xf5, 0x1a, 0x61, 0xf7, 0x37, 0x9d, 0x00, 0xf4, 0xf2, 0x69, 0x6f, 0x4b, 0x01, 0x85, 0x19, 0x45, 0x4d, 0x7f, 0x02, 0x7c, 0x6a, 0x05, 0x47, 0x6c, 0x1f, 0x81, 0x20, 0xd4, 0xe8, 0x50, 0x27, 0x72}}}, {{{0x2c, 0x3a, 0xe5, 0xad, 0xf4, 0xdd, 0x2d, 0xf7, 0x5c, 0x44, 0xb5, 0x5b, 0x21, 0xa3, 0x89, 0x5f, 0x96, 0x45, 0xca, 0x4d, 0xa4, 0x21, 0x99, 0x70, 0xda, 0xc4, 0xc4, 0xa0, 0xe5, 0xf4, 0xec, 0x0a}} , {{0x07, 0x68, 0x21, 0x65, 0xe9, 0x08, 0xa0, 0x0b, 0x6a, 0x4a, 0xba, 0xb5, 0x80, 0xaf, 0xd0, 0x1b, 0xc5, 0xf5, 0x4b, 0x73, 0x50, 0x60, 0x2d, 0x71, 0x69, 0x61, 0x0e, 0xc0, 0x20, 0x40, 0x30, 0x19}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xd0, 0x75, 0x57, 0x3b, 0xeb, 0x5c, 0x14, 0x56, 0x50, 0xc9, 0x4f, 0xb8, 0xb8, 0x1e, 0xa3, 0xf4, 0xab, 0xf5, 0xa9, 0x20, 0x15, 0x94, 0x82, 0xda, 0x96, 0x1c, 0x9b, 0x59, 0x8c, 0xff, 0xf4, 0x51}} , {{0xc1, 0x3a, 0x86, 0xd7, 0xb0, 0x06, 0x84, 0x7f, 0x1b, 0xbd, 0xd4, 0x07, 0x78, 0x80, 0x2e, 0xb1, 0xb4, 0xee, 0x52, 0x38, 0xee, 0x9a, 0xf9, 0xf6, 0xf3, 0x41, 0x6e, 0xd4, 0x88, 0x95, 0xac, 0x35}}}, {{{0x41, 0x97, 0xbf, 0x71, 0x6a, 0x9b, 0x72, 0xec, 0xf3, 0xf8, 0x6b, 0xe6, 0x0e, 0x6c, 0x69, 0xa5, 0x2f, 0x68, 0x52, 0xd8, 0x61, 0x81, 0xc0, 0x63, 0x3f, 0xa6, 0x3c, 0x13, 0x90, 0xe6, 0x8d, 0x56}} , {{0xe8, 0x39, 0x30, 0x77, 0x23, 0xb1, 0xfd, 0x1b, 0x3d, 0x3e, 0x74, 0x4d, 0x7f, 0xae, 0x5b, 0x3a, 0xb4, 0x65, 0x0e, 0x3a, 0x43, 0xdc, 0xdc, 0x41, 0x47, 0xe6, 0xe8, 0x92, 0x09, 0x22, 0x48, 0x4c}}}, {{{0x85, 0x57, 0x9f, 0xb5, 0xc8, 0x06, 0xb2, 0x9f, 0x47, 0x3f, 0xf0, 0xfa, 0xe6, 0xa9, 0xb1, 0x9b, 0x6f, 0x96, 0x7d, 0xf9, 0xa4, 0x65, 0x09, 0x75, 0x32, 0xa6, 0x6c, 0x7f, 0x47, 0x4b, 0x2f, 0x4f}} , {{0x34, 0xe9, 0x59, 0x93, 0x9d, 0x26, 0x80, 0x54, 0xf2, 0xcc, 0x3c, 0xc2, 0x25, 0x85, 0xe3, 0x6a, 0xc1, 0x62, 0x04, 0xa7, 0x08, 0x32, 0x6d, 0xa1, 0x39, 0x84, 0x8a, 0x3b, 0x87, 0x5f, 0x11, 0x13}}}, {{{0xda, 0x03, 0x34, 0x66, 0xc4, 0x0c, 0x73, 0x6e, 0xbc, 0x24, 0xb5, 0xf9, 0x70, 0x81, 0x52, 0xe9, 0xf4, 0x7c, 0x23, 0xdd, 0x9f, 0xb8, 0x46, 0xef, 0x1d, 0x22, 0x55, 0x7d, 0x71, 0xc4, 0x42, 0x33}} , {{0xc5, 0x37, 0x69, 0x5b, 0xa8, 0xc6, 0x9d, 0xa4, 0xfc, 0x61, 0x6e, 0x68, 0x46, 0xea, 0xd7, 0x1c, 0x67, 0xd2, 0x7d, 0xfa, 0xf1, 0xcc, 0x54, 0x8d, 0x36, 0x35, 0xc9, 0x00, 0xdf, 0x6c, 0x67, 0x50}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x9a, 0x4d, 0x42, 0x29, 0x5d, 0xa4, 0x6b, 0x6f, 0xa8, 0x8a, 0x4d, 0x91, 0x7b, 0xd2, 0xdf, 0x36, 0xef, 0x01, 0x22, 0xc5, 0xcc, 0x8d, 0xeb, 0x58, 0x3d, 0xb3, 0x50, 0xfc, 0x8b, 0x97, 0x96, 0x33}} , {{0x93, 0x33, 0x07, 0xc8, 0x4a, 0xca, 0xd0, 0xb1, 0xab, 0xbd, 0xdd, 0xa7, 0x7c, 0xac, 0x3e, 0x45, 0xcb, 0xcc, 0x07, 0x91, 0xbf, 0x35, 0x9d, 0xcb, 0x7d, 0x12, 0x3c, 0x11, 0x59, 0x13, 0xcf, 0x5c}}}, {{{0x45, 0xb8, 0x41, 0xd7, 0xab, 0x07, 0x15, 0x00, 0x8e, 0xce, 0xdf, 0xb2, 0x43, 0x5c, 0x01, 0xdc, 0xf4, 0x01, 0x51, 0x95, 0x10, 0x5a, 0xf6, 0x24, 0x24, 0xa0, 0x19, 0x3a, 0x09, 0x2a, 0xaa, 0x3f}} , {{0xdc, 0x8e, 0xeb, 0xc6, 0xbf, 0xdd, 0x11, 0x7b, 0xe7, 0x47, 0xe6, 0xce, 0xe7, 0xb6, 0xc5, 0xe8, 0x8a, 0xdc, 0x4b, 0x57, 0x15, 0x3b, 0x66, 0xca, 0x89, 0xa3, 0xfd, 0xac, 0x0d, 0xe1, 0x1d, 0x7a}}}, {{{0x89, 0xef, 0xbf, 0x03, 0x75, 0xd0, 0x29, 0x50, 0xcb, 0x7d, 0xd6, 0xbe, 0xad, 0x5f, 0x7b, 0x00, 0x32, 0xaa, 0x98, 0xed, 0x3f, 0x8f, 0x92, 0xcb, 0x81, 0x56, 0x01, 0x63, 0x64, 0xa3, 0x38, 0x39}} , {{0x8b, 0xa4, 0xd6, 0x50, 0xb4, 0xaa, 0x5d, 0x64, 0x64, 0x76, 0x2e, 0xa1, 0xa6, 0xb3, 0xb8, 0x7c, 0x7a, 0x56, 0xf5, 0x5c, 0x4e, 0x84, 0x5c, 0xfb, 0xdd, 0xca, 0x48, 0x8b, 0x48, 0xb9, 0xba, 0x34}}}, {{{0xc5, 0xe3, 0xe8, 0xae, 0x17, 0x27, 0xe3, 0x64, 0x60, 0x71, 0x47, 0x29, 0x02, 0x0f, 0x92, 0x5d, 0x10, 0x93, 0xc8, 0x0e, 0xa1, 0xed, 0xba, 0xa9, 0x96, 0x1c, 0xc5, 0x76, 0x30, 0xcd, 0xf9, 0x30}} , {{0x95, 0xb0, 0xbd, 0x8c, 0xbc, 0xa7, 0x4f, 0x7e, 0xfd, 0x4e, 0x3a, 0xbf, 0x5f, 0x04, 0x79, 0x80, 0x2b, 0x5a, 0x9f, 0x4f, 0x68, 0x21, 0x19, 0x71, 0xc6, 0x20, 0x01, 0x42, 0xaa, 0xdf, 0xae, 0x2c}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x90, 0x6e, 0x7e, 0x4b, 0x71, 0x93, 0xc0, 0x72, 0xed, 0xeb, 0x71, 0x24, 0x97, 0x26, 0x9c, 0xfe, 0xcb, 0x3e, 0x59, 0x19, 0xa8, 0x0f, 0x75, 0x7d, 0xbe, 0x18, 0xe6, 0x96, 0x1e, 0x95, 0x70, 0x60}} , {{0x89, 0x66, 0x3e, 0x1d, 0x4c, 0x5f, 0xfe, 0xc0, 0x04, 0x43, 0xd6, 0x44, 0x19, 0xb5, 0xad, 0xc7, 0x22, 0xdc, 0x71, 0x28, 0x64, 0xde, 0x41, 0x38, 0x27, 0x8f, 0x2c, 0x6b, 0x08, 0xb8, 0xb8, 0x7b}}}, {{{0x3d, 0x70, 0x27, 0x9d, 0xd9, 0xaf, 0xb1, 0x27, 0xaf, 0xe3, 0x5d, 0x1e, 0x3a, 0x30, 0x54, 0x61, 0x60, 0xe8, 0xc3, 0x26, 0x3a, 0xbc, 0x7e, 0xf5, 0x81, 0xdd, 0x64, 0x01, 0x04, 0xeb, 0xc0, 0x1e}} , {{0xda, 0x2c, 0xa4, 0xd1, 0xa1, 0xc3, 0x5c, 0x6e, 0x32, 0x07, 0x1f, 0xb8, 0x0e, 0x19, 0x9e, 0x99, 0x29, 0x33, 0x9a, 0xae, 0x7a, 0xed, 0x68, 0x42, 0x69, 0x7c, 0x07, 0xb3, 0x38, 0x2c, 0xf6, 0x3d}}}, {{{0x64, 0xaa, 0xb5, 0x88, 0x79, 0x65, 0x38, 0x8c, 0x94, 0xd6, 0x62, 0x37, 0x7d, 0x64, 0xcd, 0x3a, 0xeb, 0xff, 0xe8, 0x81, 0x09, 0xc7, 0x6a, 0x50, 0x09, 0x0d, 0x28, 0x03, 0x0d, 0x9a, 0x93, 0x0a}} , {{0x42, 0xa3, 0xf1, 0xc5, 0xb4, 0x0f, 0xd8, 0xc8, 0x8d, 0x15, 0x31, 0xbd, 0xf8, 0x07, 0x8b, 0xcd, 0x08, 0x8a, 0xfb, 0x18, 0x07, 0xfe, 0x8e, 0x52, 0x86, 0xef, 0xbe, 0xec, 0x49, 0x52, 0x99, 0x08}}}, {{{0x0f, 0xa9, 0xd5, 0x01, 0xaa, 0x48, 0x4f, 0x28, 0x66, 0x32, 0x1a, 0xba, 0x7c, 0xea, 0x11, 0x80, 0x17, 0x18, 0x9b, 0x56, 0x88, 0x25, 0x06, 0x69, 0x12, 0x2c, 0xea, 0x56, 0x69, 0x41, 0x24, 0x19}} , {{0xde, 0x21, 0xf0, 0xda, 0x8a, 0xfb, 0xb1, 0xb8, 0xcd, 0xc8, 0x6a, 0x82, 0x19, 0x73, 0xdb, 0xc7, 0xcf, 0x88, 0xeb, 0x96, 0xee, 0x6f, 0xfb, 0x06, 0xd2, 0xcd, 0x7d, 0x7b, 0x12, 0x28, 0x8e, 0x0c}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x93, 0x44, 0x97, 0xce, 0x28, 0xff, 0x3a, 0x40, 0xc4, 0xf5, 0xf6, 0x9b, 0xf4, 0x6b, 0x07, 0x84, 0xfb, 0x98, 0xd8, 0xec, 0x8c, 0x03, 0x57, 0xec, 0x49, 0xed, 0x63, 0xb6, 0xaa, 0xff, 0x98, 0x28}} , {{0x3d, 0x16, 0x35, 0xf3, 0x46, 0xbc, 0xb3, 0xf4, 0xc6, 0xb6, 0x4f, 0xfa, 0xf4, 0xa0, 0x13, 0xe6, 0x57, 0x45, 0x93, 0xb9, 0xbc, 0xd6, 0x59, 0xe7, 0x77, 0x94, 0x6c, 0xab, 0x96, 0x3b, 0x4f, 0x09}}}, {{{0x5a, 0xf7, 0x6b, 0x01, 0x12, 0x4f, 0x51, 0xc1, 0x70, 0x84, 0x94, 0x47, 0xb2, 0x01, 0x6c, 0x71, 0xd7, 0xcc, 0x17, 0x66, 0x0f, 0x59, 0x5d, 0x5d, 0x10, 0x01, 0x57, 0x11, 0xf5, 0xdd, 0xe2, 0x34}} , {{0x26, 0xd9, 0x1f, 0x5c, 0x58, 0xac, 0x8b, 0x03, 0xd2, 0xc3, 0x85, 0x0f, 0x3a, 0xc3, 0x7f, 0x6d, 0x8e, 0x86, 0xcd, 0x52, 0x74, 0x8f, 0x55, 0x77, 0x17, 0xb7, 0x8e, 0xb7, 0x88, 0xea, 0xda, 0x1b}}}, {{{0xb6, 0xea, 0x0e, 0x40, 0x93, 0x20, 0x79, 0x35, 0x6a, 0x61, 0x84, 0x5a, 0x07, 0x6d, 0xf9, 0x77, 0x6f, 0xed, 0x69, 0x1c, 0x0d, 0x25, 0x76, 0xcc, 0xf0, 0xdb, 0xbb, 0xc5, 0xad, 0xe2, 0x26, 0x57}} , {{0xcf, 0xe8, 0x0e, 0x6b, 0x96, 0x7d, 0xed, 0x27, 0xd1, 0x3c, 0xa9, 0xd9, 0x50, 0xa9, 0x98, 0x84, 0x5e, 0x86, 0xef, 0xd6, 0xf0, 0xf8, 0x0e, 0x89, 0x05, 0x2f, 0xd9, 0x5f, 0x15, 0x5f, 0x73, 0x79}}}, {{{0xc8, 0x5c, 0x16, 0xfe, 0xed, 0x9f, 0x26, 0x56, 0xf6, 0x4b, 0x9f, 0xa7, 0x0a, 0x85, 0xfe, 0xa5, 0x8c, 0x87, 0xdd, 0x98, 0xce, 0x4e, 0xc3, 0x58, 0x55, 0xb2, 0x7b, 0x3d, 0xd8, 0x6b, 0xb5, 0x4c}} , {{0x65, 0x38, 0xa0, 0x15, 0xfa, 0xa7, 0xb4, 0x8f, 0xeb, 0xc4, 0x86, 0x9b, 0x30, 0xa5, 0x5e, 0x4d, 0xea, 0x8a, 0x9a, 0x9f, 0x1a, 0xd8, 0x5b, 0x53, 0x14, 0x19, 0x25, 0x63, 0xb4, 0x6f, 0x1f, 0x5d}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xac, 0x8f, 0xbc, 0x1e, 0x7d, 0x8b, 0x5a, 0x0b, 0x8d, 0xaf, 0x76, 0x2e, 0x71, 0xe3, 0x3b, 0x6f, 0x53, 0x2f, 0x3e, 0x90, 0x95, 0xd4, 0x35, 0x14, 0x4f, 0x8c, 0x3c, 0xce, 0x57, 0x1c, 0x76, 0x49}} , {{0xa8, 0x50, 0xe1, 0x61, 0x6b, 0x57, 0x35, 0xeb, 0x44, 0x0b, 0x0c, 0x6e, 0xf9, 0x25, 0x80, 0x74, 0xf2, 0x8f, 0x6f, 0x7a, 0x3e, 0x7f, 0x2d, 0xf3, 0x4e, 0x09, 0x65, 0x10, 0x5e, 0x03, 0x25, 0x32}}}, {{{0xa9, 0x60, 0xdc, 0x0f, 0x64, 0xe5, 0x1d, 0xe2, 0x8d, 0x4f, 0x79, 0x2f, 0x0e, 0x24, 0x02, 0x00, 0x05, 0x77, 0x43, 0x25, 0x3d, 0x6a, 0xc7, 0xb7, 0xbf, 0x04, 0x08, 0x65, 0xf4, 0x39, 0x4b, 0x65}} , {{0x96, 0x19, 0x12, 0x6b, 0x6a, 0xb7, 0xe3, 0xdc, 0x45, 0x9b, 0xdb, 0xb4, 0xa8, 0xae, 0xdc, 0xa8, 0x14, 0x44, 0x65, 0x62, 0xce, 0x34, 0x9a, 0x84, 0x18, 0x12, 0x01, 0xf1, 0xe2, 0x7b, 0xce, 0x50}}}, {{{0x41, 0x21, 0x30, 0x53, 0x1b, 0x47, 0x01, 0xb7, 0x18, 0xd8, 0x82, 0x57, 0xbd, 0xa3, 0x60, 0xf0, 0x32, 0xf6, 0x5b, 0xf0, 0x30, 0x88, 0x91, 0x59, 0xfd, 0x90, 0xa2, 0xb9, 0x55, 0x93, 0x21, 0x34}} , {{0x97, 0x67, 0x9e, 0xeb, 0x6a, 0xf9, 0x6e, 0xd6, 0x73, 0xe8, 0x6b, 0x29, 0xec, 0x63, 0x82, 0x00, 0xa8, 0x99, 0x1c, 0x1d, 0x30, 0xc8, 0x90, 0x52, 0x90, 0xb6, 0x6a, 0x80, 0x4e, 0xff, 0x4b, 0x51}}}, {{{0x0f, 0x7d, 0x63, 0x8c, 0x6e, 0x5c, 0xde, 0x30, 0xdf, 0x65, 0xfa, 0x2e, 0xb0, 0xa3, 0x25, 0x05, 0x54, 0xbd, 0x25, 0xba, 0x06, 0xae, 0xdf, 0x8b, 0xd9, 0x1b, 0xea, 0x38, 0xb3, 0x05, 0x16, 0x09}} , {{0xc7, 0x8c, 0xbf, 0x64, 0x28, 0xad, 0xf8, 0xa5, 0x5a, 0x6f, 0xc9, 0xba, 0xd5, 0x7f, 0xd5, 0xd6, 0xbd, 0x66, 0x2f, 0x3d, 0xaa, 0x54, 0xf6, 0xba, 0x32, 0x22, 0x9a, 0x1e, 0x52, 0x05, 0xf4, 0x1d}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xaa, 0x1f, 0xbb, 0xeb, 0xfe, 0xe4, 0x87, 0xfc, 0xb1, 0x2c, 0xb7, 0x88, 0xf4, 0xc6, 0xb9, 0xf5, 0x24, 0x46, 0xf2, 0xa5, 0x9f, 0x8f, 0x8a, 0x93, 0x70, 0x69, 0xd4, 0x56, 0xec, 0xfd, 0x06, 0x46}} , {{0x4e, 0x66, 0xcf, 0x4e, 0x34, 0xce, 0x0c, 0xd9, 0xa6, 0x50, 0xd6, 0x5e, 0x95, 0xaf, 0xe9, 0x58, 0xfa, 0xee, 0x9b, 0xb8, 0xa5, 0x0f, 0x35, 0xe0, 0x43, 0x82, 0x6d, 0x65, 0xe6, 0xd9, 0x00, 0x0f}}}, {{{0x7b, 0x75, 0x3a, 0xfc, 0x64, 0xd3, 0x29, 0x7e, 0xdd, 0x49, 0x9a, 0x59, 0x53, 0xbf, 0xb4, 0xa7, 0x52, 0xb3, 0x05, 0xab, 0xc3, 0xaf, 0x16, 0x1a, 0x85, 0x42, 0x32, 0xa2, 0x86, 0xfa, 0x39, 0x43}} , {{0x0e, 0x4b, 0xa3, 0x63, 0x8a, 0xfe, 0xa5, 0x58, 0xf1, 0x13, 0xbd, 0x9d, 0xaa, 0x7f, 0x76, 0x40, 0x70, 0x81, 0x10, 0x75, 0x99, 0xbb, 0xbe, 0x0b, 0x16, 0xe9, 0xba, 0x62, 0x34, 0xcc, 0x07, 0x6d}}}, {{{0xc3, 0xf1, 0xc6, 0x93, 0x65, 0xee, 0x0b, 0xbc, 0xea, 0x14, 0xf0, 0xc1, 0xf8, 0x84, 0x89, 0xc2, 0xc9, 0xd7, 0xea, 0x34, 0xca, 0xa7, 0xc4, 0x99, 0xd5, 0x50, 0x69, 0xcb, 0xd6, 0x21, 0x63, 0x7c}} , {{0x99, 0xeb, 0x7c, 0x31, 0x73, 0x64, 0x67, 0x7f, 0x0c, 0x66, 0xaa, 0x8c, 0x69, 0x91, 0xe2, 0x26, 0xd3, 0x23, 0xe2, 0x76, 0x5d, 0x32, 0x52, 0xdf, 0x5d, 0xc5, 0x8f, 0xb7, 0x7c, 0x84, 0xb3, 0x70}}}, {{{0xeb, 0x01, 0xc7, 0x36, 0x97, 0x4e, 0xb6, 0xab, 0x5f, 0x0d, 0x2c, 0xba, 0x67, 0x64, 0x55, 0xde, 0xbc, 0xff, 0xa6, 0xec, 0x04, 0xd3, 0x8d, 0x39, 0x56, 0x5e, 0xee, 0xf8, 0xe4, 0x2e, 0x33, 0x62}} , {{0x65, 0xef, 0xb8, 0x9f, 0xc8, 0x4b, 0xa7, 0xfd, 0x21, 0x49, 0x9b, 0x92, 0x35, 0x82, 0xd6, 0x0a, 0x9b, 0xf2, 0x79, 0xf1, 0x47, 0x2f, 0x6a, 0x7e, 0x9f, 0xcf, 0x18, 0x02, 0x3c, 0xfb, 0x1b, 0x3e}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x2f, 0x8b, 0xc8, 0x40, 0x51, 0xd1, 0xac, 0x1a, 0x0b, 0xe4, 0xa9, 0xa2, 0x42, 0x21, 0x19, 0x2f, 0x7b, 0x97, 0xbf, 0xf7, 0x57, 0x6d, 0x3f, 0x3d, 0x4f, 0x0f, 0xe2, 0xb2, 0x81, 0x00, 0x9e, 0x7b}} , {{0x8c, 0x85, 0x2b, 0xc4, 0xfc, 0xf1, 0xab, 0xe8, 0x79, 0x22, 0xc4, 0x84, 0x17, 0x3a, 0xfa, 0x86, 0xa6, 0x7d, 0xf9, 0xf3, 0x6f, 0x03, 0x57, 0x20, 0x4d, 0x79, 0xf9, 0x6e, 0x71, 0x54, 0x38, 0x09}}}, {{{0x40, 0x29, 0x74, 0xa8, 0x2f, 0x5e, 0xf9, 0x79, 0xa4, 0xf3, 0x3e, 0xb9, 0xfd, 0x33, 0x31, 0xac, 0x9a, 0x69, 0x88, 0x1e, 0x77, 0x21, 0x2d, 0xf3, 0x91, 0x52, 0x26, 0x15, 0xb2, 0xa6, 0xcf, 0x7e}} , {{0xc6, 0x20, 0x47, 0x6c, 0xa4, 0x7d, 0xcb, 0x63, 0xea, 0x5b, 0x03, 0xdf, 0x3e, 0x88, 0x81, 0x6d, 0xce, 0x07, 0x42, 0x18, 0x60, 0x7e, 0x7b, 0x55, 0xfe, 0x6a, 0xf3, 0xda, 0x5c, 0x8b, 0x95, 0x10}}}, {{{0x62, 0xe4, 0x0d, 0x03, 0xb4, 0xd7, 0xcd, 0xfa, 0xbd, 0x46, 0xdf, 0x93, 0x71, 0x10, 0x2c, 0xa8, 0x3b, 0xb6, 0x09, 0x05, 0x70, 0x84, 0x43, 0x29, 0xa8, 0x59, 0xf5, 0x8e, 0x10, 0xe4, 0xd7, 0x20}} , {{0x57, 0x82, 0x1c, 0xab, 0xbf, 0x62, 0x70, 0xe8, 0xc4, 0xcf, 0xf0, 0x28, 0x6e, 0x16, 0x3c, 0x08, 0x78, 0x89, 0x85, 0x46, 0x0f, 0xf6, 0x7f, 0xcf, 0xcb, 0x7e, 0xb8, 0x25, 0xe9, 0x5a, 0xfa, 0x03}}}, {{{0xfb, 0x95, 0x92, 0x63, 0x50, 0xfc, 0x62, 0xf0, 0xa4, 0x5e, 0x8c, 0x18, 0xc2, 0x17, 0x24, 0xb7, 0x78, 0xc2, 0xa9, 0xe7, 0x6a, 0x32, 0xd6, 0x29, 0x85, 0xaf, 0xcb, 0x8d, 0x91, 0x13, 0xda, 0x6b}} , {{0x36, 0x0a, 0xc2, 0xb6, 0x4b, 0xa5, 0x5d, 0x07, 0x17, 0x41, 0x31, 0x5f, 0x62, 0x46, 0xf8, 0x92, 0xf9, 0x66, 0x48, 0x73, 0xa6, 0x97, 0x0d, 0x7d, 0x88, 0xee, 0x62, 0xb1, 0x03, 0xa8, 0x3f, 0x2c}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x4a, 0xb1, 0x70, 0x8a, 0xa9, 0xe8, 0x63, 0x79, 0x00, 0xe2, 0x25, 0x16, 0xca, 0x4b, 0x0f, 0xa4, 0x66, 0xad, 0x19, 0x9f, 0x88, 0x67, 0x0c, 0x8b, 0xc2, 0x4a, 0x5b, 0x2b, 0x6d, 0x95, 0xaf, 0x19}} , {{0x8b, 0x9d, 0xb6, 0xcc, 0x60, 0xb4, 0x72, 0x4f, 0x17, 0x69, 0x5a, 0x4a, 0x68, 0x34, 0xab, 0xa1, 0x45, 0x32, 0x3c, 0x83, 0x87, 0x72, 0x30, 0x54, 0x77, 0x68, 0xae, 0xfb, 0xb5, 0x8b, 0x22, 0x5e}}}, {{{0xf1, 0xb9, 0x87, 0x35, 0xc5, 0xbb, 0xb9, 0xcf, 0xf5, 0xd6, 0xcd, 0xd5, 0x0c, 0x7c, 0x0e, 0xe6, 0x90, 0x34, 0xfb, 0x51, 0x42, 0x1e, 0x6d, 0xac, 0x9a, 0x46, 0xc4, 0x97, 0x29, 0x32, 0xbf, 0x45}} , {{0x66, 0x9e, 0xc6, 0x24, 0xc0, 0xed, 0xa5, 0x5d, 0x88, 0xd4, 0xf0, 0x73, 0x97, 0x7b, 0xea, 0x7f, 0x42, 0xff, 0x21, 0xa0, 0x9b, 0x2f, 0x9a, 0xfd, 0x53, 0x57, 0x07, 0x84, 0x48, 0x88, 0x9d, 0x52}}}, {{{0xc6, 0x96, 0x48, 0x34, 0x2a, 0x06, 0xaf, 0x94, 0x3d, 0xf4, 0x1a, 0xcf, 0xf2, 0xc0, 0x21, 0xc2, 0x42, 0x5e, 0xc8, 0x2f, 0x35, 0xa2, 0x3e, 0x29, 0xfa, 0x0c, 0x84, 0xe5, 0x89, 0x72, 0x7c, 0x06}} , {{0x32, 0x65, 0x03, 0xe5, 0x89, 0xa6, 0x6e, 0xb3, 0x5b, 0x8e, 0xca, 0xeb, 0xfe, 0x22, 0x56, 0x8b, 0x5d, 0x14, 0x4b, 0x4d, 0xf9, 0xbe, 0xb5, 0xf5, 0xe6, 0x5c, 0x7b, 0x8b, 0xf4, 0x13, 0x11, 0x34}}}, {{{0x07, 0xc6, 0x22, 0x15, 0xe2, 0x9c, 0x60, 0xa2, 0x19, 0xd9, 0x27, 0xae, 0x37, 0x4e, 0xa6, 0xc9, 0x80, 0xa6, 0x91, 0x8f, 0x12, 0x49, 0xe5, 0x00, 0x18, 0x47, 0xd1, 0xd7, 0x28, 0x22, 0x63, 0x39}} , {{0xe8, 0xe2, 0x00, 0x7e, 0xf2, 0x9e, 0x1e, 0x99, 0x39, 0x95, 0x04, 0xbd, 0x1e, 0x67, 0x7b, 0xb2, 0x26, 0xac, 0xe6, 0xaa, 0xe2, 0x46, 0xd5, 0xe4, 0xe8, 0x86, 0xbd, 0xab, 0x7c, 0x55, 0x59, 0x6f}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x24, 0x64, 0x6e, 0x9b, 0x35, 0x71, 0x78, 0xce, 0x33, 0x03, 0x21, 0x33, 0x36, 0xf1, 0x73, 0x9b, 0xb9, 0x15, 0x8b, 0x2c, 0x69, 0xcf, 0x4d, 0xed, 0x4f, 0x4d, 0x57, 0x14, 0x13, 0x82, 0xa4, 0x4d}} , {{0x65, 0x6e, 0x0a, 0xa4, 0x59, 0x07, 0x17, 0xf2, 0x6b, 0x4a, 0x1f, 0x6e, 0xf6, 0xb5, 0xbc, 0x62, 0xe4, 0xb6, 0xda, 0xa2, 0x93, 0xbc, 0x29, 0x05, 0xd2, 0xd2, 0x73, 0x46, 0x03, 0x16, 0x40, 0x31}}}, {{{0x4c, 0x73, 0x6d, 0x15, 0xbd, 0xa1, 0x4d, 0x5c, 0x13, 0x0b, 0x24, 0x06, 0x98, 0x78, 0x1c, 0x5b, 0xeb, 0x1f, 0x18, 0x54, 0x43, 0xd9, 0x55, 0x66, 0xda, 0x29, 0x21, 0xe8, 0xb8, 0x3c, 0x42, 0x22}} , {{0xb4, 0xcd, 0x08, 0x6f, 0x15, 0x23, 0x1a, 0x0b, 0x22, 0xed, 0xd1, 0xf1, 0xa7, 0xc7, 0x73, 0x45, 0xf3, 0x9e, 0xce, 0x76, 0xb7, 0xf6, 0x39, 0xb6, 0x8e, 0x79, 0xbe, 0xe9, 0x9b, 0xcf, 0x7d, 0x62}}}, {{{0x92, 0x5b, 0xfc, 0x72, 0xfd, 0xba, 0xf1, 0xfd, 0xa6, 0x7c, 0x95, 0xe3, 0x61, 0x3f, 0xe9, 0x03, 0xd4, 0x2b, 0xd4, 0x20, 0xd9, 0xdb, 0x4d, 0x32, 0x3e, 0xf5, 0x11, 0x64, 0xe3, 0xb4, 0xbe, 0x32}} , {{0x86, 0x17, 0x90, 0xe7, 0xc9, 0x1f, 0x10, 0xa5, 0x6a, 0x2d, 0x39, 0xd0, 0x3b, 0xc4, 0xa6, 0xe9, 0x59, 0x13, 0xda, 0x1a, 0xe6, 0xa0, 0xb9, 0x3c, 0x50, 0xb8, 0x40, 0x7c, 0x15, 0x36, 0x5a, 0x42}}}, {{{0xb4, 0x0b, 0x32, 0xab, 0xdc, 0x04, 0x51, 0x55, 0x21, 0x1e, 0x0b, 0x75, 0x99, 0x89, 0x73, 0x35, 0x3a, 0x91, 0x2b, 0xfe, 0xe7, 0x49, 0xea, 0x76, 0xc1, 0xf9, 0x46, 0xb9, 0x53, 0x02, 0x23, 0x04}} , {{0xfc, 0x5a, 0x1e, 0x1d, 0x74, 0x58, 0x95, 0xa6, 0x8f, 0x7b, 0x97, 0x3e, 0x17, 0x3b, 0x79, 0x2d, 0xa6, 0x57, 0xef, 0x45, 0x02, 0x0b, 0x4d, 0x6e, 0x9e, 0x93, 0x8d, 0x2f, 0xd9, 0x9d, 0xdb, 0x04}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xc0, 0xd7, 0x56, 0x97, 0x58, 0x91, 0xde, 0x09, 0x4f, 0x9f, 0xbe, 0x63, 0xb0, 0x83, 0x86, 0x43, 0x5d, 0xbc, 0xe0, 0xf3, 0xc0, 0x75, 0xbf, 0x8b, 0x8e, 0xaa, 0xf7, 0x8b, 0x64, 0x6e, 0xb0, 0x63}} , {{0x16, 0xae, 0x8b, 0xe0, 0x9b, 0x24, 0x68, 0x5c, 0x44, 0xc2, 0xd0, 0x08, 0xb7, 0x7b, 0x62, 0xfd, 0x7f, 0xd8, 0xd4, 0xb7, 0x50, 0xfd, 0x2c, 0x1b, 0xbf, 0x41, 0x95, 0xd9, 0x8e, 0xd8, 0x17, 0x1b}}}, {{{0x86, 0x55, 0x37, 0x8e, 0xc3, 0x38, 0x48, 0x14, 0xb5, 0x97, 0xd2, 0xa7, 0x54, 0x45, 0xf1, 0x35, 0x44, 0x38, 0x9e, 0xf1, 0x1b, 0xb6, 0x34, 0x00, 0x3c, 0x96, 0xee, 0x29, 0x00, 0xea, 0x2c, 0x0b}} , {{0xea, 0xda, 0x99, 0x9e, 0x19, 0x83, 0x66, 0x6d, 0xe9, 0x76, 0x87, 0x50, 0xd1, 0xfd, 0x3c, 0x60, 0x87, 0xc6, 0x41, 0xd9, 0x8e, 0xdb, 0x5e, 0xde, 0xaa, 0x9a, 0xd3, 0x28, 0xda, 0x95, 0xea, 0x47}}}, {{{0xd0, 0x80, 0xba, 0x19, 0xae, 0x1d, 0xa9, 0x79, 0xf6, 0x3f, 0xac, 0x5d, 0x6f, 0x96, 0x1f, 0x2a, 0xce, 0x29, 0xb2, 0xff, 0x37, 0xf1, 0x94, 0x8f, 0x0c, 0xb5, 0x28, 0xba, 0x9a, 0x21, 0xf6, 0x66}} , {{0x02, 0xfb, 0x54, 0xb8, 0x05, 0xf3, 0x81, 0x52, 0x69, 0x34, 0x46, 0x9d, 0x86, 0x76, 0x8f, 0xd7, 0xf8, 0x6a, 0x66, 0xff, 0xe6, 0xa7, 0x90, 0xf7, 0x5e, 0xcd, 0x6a, 0x9b, 0x55, 0xfc, 0x9d, 0x48}}}, {{{0xbd, 0xaa, 0x13, 0xe6, 0xcd, 0x45, 0x4a, 0xa4, 0x59, 0x0a, 0x64, 0xb1, 0x98, 0xd6, 0x34, 0x13, 0x04, 0xe6, 0x97, 0x94, 0x06, 0xcb, 0xd4, 0x4e, 0xbb, 0x96, 0xcd, 0xd1, 0x57, 0xd1, 0xe3, 0x06}} , {{0x7a, 0x6c, 0x45, 0x27, 0xc4, 0x93, 0x7f, 0x7d, 0x7c, 0x62, 0x50, 0x38, 0x3a, 0x6b, 0xb5, 0x88, 0xc6, 0xd9, 0xf1, 0x78, 0x19, 0xb9, 0x39, 0x93, 0x3d, 0xc9, 0xe0, 0x9c, 0x3c, 0xce, 0xf5, 0x72}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x24, 0xea, 0x23, 0x7d, 0x56, 0x2c, 0xe2, 0x59, 0x0e, 0x85, 0x60, 0x04, 0x88, 0x5a, 0x74, 0x1e, 0x4b, 0xef, 0x13, 0xda, 0x4c, 0xff, 0x83, 0x45, 0x85, 0x3f, 0x08, 0x95, 0x2c, 0x20, 0x13, 0x1f}} , {{0x48, 0x5f, 0x27, 0x90, 0x5c, 0x02, 0x42, 0xad, 0x78, 0x47, 0x5c, 0xb5, 0x7e, 0x08, 0x85, 0x00, 0xfa, 0x7f, 0xfd, 0xfd, 0xe7, 0x09, 0x11, 0xf2, 0x7e, 0x1b, 0x38, 0x6c, 0x35, 0x6d, 0x33, 0x66}}}, {{{0x93, 0x03, 0x36, 0x81, 0xac, 0xe4, 0x20, 0x09, 0x35, 0x4c, 0x45, 0xb2, 0x1e, 0x4c, 0x14, 0x21, 0xe6, 0xe9, 0x8a, 0x7b, 0x8d, 0xfe, 0x1e, 0xc6, 0x3e, 0xc1, 0x35, 0xfa, 0xe7, 0x70, 0x4e, 0x1d}} , {{0x61, 0x2e, 0xc2, 0xdd, 0x95, 0x57, 0xd1, 0xab, 0x80, 0xe8, 0x63, 0x17, 0xb5, 0x48, 0xe4, 0x8a, 0x11, 0x9e, 0x72, 0xbe, 0x85, 0x8d, 0x51, 0x0a, 0xf2, 0x9f, 0xe0, 0x1c, 0xa9, 0x07, 0x28, 0x7b}}}, {{{0xbb, 0x71, 0x14, 0x5e, 0x26, 0x8c, 0x3d, 0xc8, 0xe9, 0x7c, 0xd3, 0xd6, 0xd1, 0x2f, 0x07, 0x6d, 0xe6, 0xdf, 0xfb, 0x79, 0xd6, 0x99, 0x59, 0x96, 0x48, 0x40, 0x0f, 0x3a, 0x7b, 0xb2, 0xa0, 0x72}} , {{0x4e, 0x3b, 0x69, 0xc8, 0x43, 0x75, 0x51, 0x6c, 0x79, 0x56, 0xe4, 0xcb, 0xf7, 0xa6, 0x51, 0xc2, 0x2c, 0x42, 0x0b, 0xd4, 0x82, 0x20, 0x1c, 0x01, 0x08, 0x66, 0xd7, 0xbf, 0x04, 0x56, 0xfc, 0x02}}}, {{{0x24, 0xe8, 0xb7, 0x60, 0xae, 0x47, 0x80, 0xfc, 0xe5, 0x23, 0xe7, 0xc2, 0xc9, 0x85, 0xe6, 0x98, 0xa0, 0x29, 0x4e, 0xe1, 0x84, 0x39, 0x2d, 0x95, 0x2c, 0xf3, 0x45, 0x3c, 0xff, 0xaf, 0x27, 0x4c}} , {{0x6b, 0xa6, 0xf5, 0x4b, 0x11, 0xbd, 0xba, 0x5b, 0x9e, 0xc4, 0xa4, 0x51, 0x1e, 0xbe, 0xd0, 0x90, 0x3a, 0x9c, 0xc2, 0x26, 0xb6, 0x1e, 0xf1, 0x95, 0x7d, 0xc8, 0x6d, 0x52, 0xe6, 0x99, 0x2c, 0x5f}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x85, 0xe0, 0x24, 0x32, 0xb4, 0xd1, 0xef, 0xfc, 0x69, 0xa2, 0xbf, 0x8f, 0x72, 0x2c, 0x95, 0xf6, 0xe4, 0x6e, 0x7d, 0x90, 0xf7, 0x57, 0x81, 0xa0, 0xf7, 0xda, 0xef, 0x33, 0x07, 0xe3, 0x6b, 0x78}} , {{0x36, 0x27, 0x3e, 0xc6, 0x12, 0x07, 0xab, 0x4e, 0xbe, 0x69, 0x9d, 0xb3, 0xbe, 0x08, 0x7c, 0x2a, 0x47, 0x08, 0xfd, 0xd4, 0xcd, 0x0e, 0x27, 0x34, 0x5b, 0x98, 0x34, 0x2f, 0x77, 0x5f, 0x3a, 0x65}}}, {{{0x13, 0xaa, 0x2e, 0x4c, 0xf0, 0x22, 0xb8, 0x6c, 0xb3, 0x19, 0x4d, 0xeb, 0x6b, 0xd0, 0xa4, 0xc6, 0x9c, 0xdd, 0xc8, 0x5b, 0x81, 0x57, 0x89, 0xdf, 0x33, 0xa9, 0x68, 0x49, 0x80, 0xe4, 0xfe, 0x21}} , {{0x00, 0x17, 0x90, 0x30, 0xe9, 0xd3, 0x60, 0x30, 0x31, 0xc2, 0x72, 0x89, 0x7a, 0x36, 0xa5, 0xbd, 0x39, 0x83, 0x85, 0x50, 0xa1, 0x5d, 0x6c, 0x41, 0x1d, 0xb5, 0x2c, 0x07, 0x40, 0x77, 0x0b, 0x50}}}, {{{0x64, 0x34, 0xec, 0xc0, 0x9e, 0x44, 0x41, 0xaf, 0xa0, 0x36, 0x05, 0x6d, 0xea, 0x30, 0x25, 0x46, 0x35, 0x24, 0x9d, 0x86, 0xbd, 0x95, 0xf1, 0x6a, 0x46, 0xd7, 0x94, 0x54, 0xf9, 0x3b, 0xbd, 0x5d}} , {{0x77, 0x5b, 0xe2, 0x37, 0xc7, 0xe1, 0x7c, 0x13, 0x8c, 0x9f, 0x7b, 0x7b, 0x2a, 0xce, 0x42, 0xa3, 0xb9, 0x2a, 0x99, 0xa8, 0xc0, 0xd8, 0x3c, 0x86, 0xb0, 0xfb, 0xe9, 0x76, 0x77, 0xf7, 0xf5, 0x56}}}, {{{0xdf, 0xb3, 0x46, 0x11, 0x6e, 0x13, 0xb7, 0x28, 0x4e, 0x56, 0xdd, 0xf1, 0xac, 0xad, 0x58, 0xc3, 0xf8, 0x88, 0x94, 0x5e, 0x06, 0x98, 0xa1, 0xe4, 0x6a, 0xfb, 0x0a, 0x49, 0x5d, 0x8a, 0xfe, 0x77}} , {{0x46, 0x02, 0xf5, 0xa5, 0xaf, 0xc5, 0x75, 0x6d, 0xba, 0x45, 0x35, 0x0a, 0xfe, 0xc9, 0xac, 0x22, 0x91, 0x8d, 0x21, 0x95, 0x33, 0x03, 0xc0, 0x8a, 0x16, 0xf3, 0x39, 0xe0, 0x01, 0x0f, 0x53, 0x3c}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x34, 0x75, 0x37, 0x1f, 0x34, 0x4e, 0xa9, 0x1d, 0x68, 0x67, 0xf8, 0x49, 0x98, 0x96, 0xfc, 0x4c, 0x65, 0x97, 0xf7, 0x02, 0x4a, 0x52, 0x6c, 0x01, 0xbd, 0x48, 0xbb, 0x1b, 0xed, 0xa4, 0xe2, 0x53}} , {{0x59, 0xd5, 0x9b, 0x5a, 0xa2, 0x90, 0xd3, 0xb8, 0x37, 0x4c, 0x55, 0x82, 0x28, 0x08, 0x0f, 0x7f, 0xaa, 0x81, 0x65, 0xe0, 0x0c, 0x52, 0xc9, 0xa3, 0x32, 0x27, 0x64, 0xda, 0xfd, 0x34, 0x23, 0x5a}}}, {{{0xb5, 0xb0, 0x0c, 0x4d, 0xb3, 0x7b, 0x23, 0xc8, 0x1f, 0x8a, 0x39, 0x66, 0xe6, 0xba, 0x4c, 0x10, 0x37, 0xca, 0x9c, 0x7c, 0x05, 0x9e, 0xff, 0xc0, 0xf8, 0x8e, 0xb1, 0x8f, 0x6f, 0x67, 0x18, 0x26}} , {{0x4b, 0x41, 0x13, 0x54, 0x23, 0x1a, 0xa4, 0x4e, 0xa9, 0x8b, 0x1e, 0x4b, 0xfc, 0x15, 0x24, 0xbb, 0x7e, 0xcb, 0xb6, 0x1e, 0x1b, 0xf5, 0xf2, 0xc8, 0x56, 0xec, 0x32, 0xa2, 0x60, 0x5b, 0xa0, 0x2a}}}, {{{0xa4, 0x29, 0x47, 0x86, 0x2e, 0x92, 0x4f, 0x11, 0x4f, 0xf3, 0xb2, 0x5c, 0xd5, 0x3e, 0xa6, 0xb9, 0xc8, 0xe2, 0x33, 0x11, 0x1f, 0x01, 0x8f, 0xb0, 0x9b, 0xc7, 0xa5, 0xff, 0x83, 0x0f, 0x1e, 0x28}} , {{0x1d, 0x29, 0x7a, 0xa1, 0xec, 0x8e, 0xb5, 0xad, 0xea, 0x02, 0x68, 0x60, 0x74, 0x29, 0x1c, 0xa5, 0xcf, 0xc8, 0x3b, 0x7d, 0x8b, 0x2b, 0x7c, 0xad, 0xa4, 0x40, 0x17, 0x51, 0x59, 0x7c, 0x2e, 0x5d}}}, {{{0x0a, 0x6c, 0x4f, 0xbc, 0x3e, 0x32, 0xe7, 0x4a, 0x1a, 0x13, 0xc1, 0x49, 0x38, 0xbf, 0xf7, 0xc2, 0xd3, 0x8f, 0x6b, 0xad, 0x52, 0xf7, 0xcf, 0xbc, 0x27, 0xcb, 0x40, 0x67, 0x76, 0xcd, 0x6d, 0x56}} , {{0xe5, 0xb0, 0x27, 0xad, 0xbe, 0x9b, 0xf2, 0xb5, 0x63, 0xde, 0x3a, 0x23, 0x95, 0xb7, 0x0a, 0x7e, 0xf3, 0x9e, 0x45, 0x6f, 0x19, 0x39, 0x75, 0x8f, 0x39, 0x3d, 0x0f, 0xc0, 0x9f, 0xf1, 0xe9, 0x51}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x88, 0xaa, 0x14, 0x24, 0x86, 0x94, 0x11, 0x12, 0x3e, 0x1a, 0xb5, 0xcc, 0xbb, 0xe0, 0x9c, 0xd5, 0x9c, 0x6d, 0xba, 0x58, 0x72, 0x8d, 0xfb, 0x22, 0x7b, 0x9f, 0x7c, 0x94, 0x30, 0xb3, 0x51, 0x21}} , {{0xf6, 0x74, 0x3d, 0xf2, 0xaf, 0xd0, 0x1e, 0x03, 0x7c, 0x23, 0x6b, 0xc9, 0xfc, 0x25, 0x70, 0x90, 0xdc, 0x9a, 0xa4, 0xfb, 0x49, 0xfc, 0x3d, 0x0a, 0x35, 0x38, 0x6f, 0xe4, 0x7e, 0x50, 0x01, 0x2a}}}, {{{0xd6, 0xe3, 0x96, 0x61, 0x3a, 0xfd, 0xef, 0x9b, 0x1f, 0x90, 0xa4, 0x24, 0x14, 0x5b, 0xc8, 0xde, 0x50, 0xb1, 0x1d, 0xaf, 0xe8, 0x55, 0x8a, 0x87, 0x0d, 0xfe, 0xaa, 0x3b, 0x82, 0x2c, 0x8d, 0x7b}} , {{0x85, 0x0c, 0xaf, 0xf8, 0x83, 0x44, 0x49, 0xd9, 0x45, 0xcf, 0xf7, 0x48, 0xd9, 0x53, 0xb4, 0xf1, 0x65, 0xa0, 0xe1, 0xc3, 0xb3, 0x15, 0xed, 0x89, 0x9b, 0x4f, 0x62, 0xb3, 0x57, 0xa5, 0x45, 0x1c}}}, {{{0x8f, 0x12, 0xea, 0xaf, 0xd1, 0x1f, 0x79, 0x10, 0x0b, 0xf6, 0xa3, 0x7b, 0xea, 0xac, 0x8b, 0x57, 0x32, 0x62, 0xe7, 0x06, 0x12, 0x51, 0xa0, 0x3b, 0x43, 0x5e, 0xa4, 0x20, 0x78, 0x31, 0xce, 0x0d}} , {{0x84, 0x7c, 0xc2, 0xa6, 0x91, 0x23, 0xce, 0xbd, 0xdc, 0xf9, 0xce, 0xd5, 0x75, 0x30, 0x22, 0xe6, 0xf9, 0x43, 0x62, 0x0d, 0xf7, 0x75, 0x9d, 0x7f, 0x8c, 0xff, 0x7d, 0xe4, 0x72, 0xac, 0x9f, 0x1c}}}, {{{0x88, 0xc1, 0x99, 0xd0, 0x3c, 0x1c, 0x5d, 0xb4, 0xef, 0x13, 0x0f, 0x90, 0xb9, 0x36, 0x2f, 0x95, 0x95, 0xc6, 0xdc, 0xde, 0x0a, 0x51, 0xe2, 0x8d, 0xf3, 0xbc, 0x51, 0xec, 0xdf, 0xb1, 0xa2, 0x5f}} , {{0x2e, 0x68, 0xa1, 0x23, 0x7d, 0x9b, 0x40, 0x69, 0x85, 0x7b, 0x42, 0xbf, 0x90, 0x4b, 0xd6, 0x40, 0x2f, 0xd7, 0x52, 0x52, 0xb2, 0x21, 0xde, 0x64, 0xbd, 0x88, 0xc3, 0x6d, 0xa5, 0xfa, 0x81, 0x3f}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xfb, 0xfd, 0x47, 0x7b, 0x8a, 0x66, 0x9e, 0x79, 0x2e, 0x64, 0x82, 0xef, 0xf7, 0x21, 0xec, 0xf6, 0xd8, 0x86, 0x09, 0x31, 0x7c, 0xdd, 0x03, 0x6a, 0x58, 0xa0, 0x77, 0xb7, 0x9b, 0x8c, 0x87, 0x1f}} , {{0x55, 0x47, 0xe4, 0xa8, 0x3d, 0x55, 0x21, 0x34, 0xab, 0x1d, 0xae, 0xe0, 0xf4, 0xea, 0xdb, 0xc5, 0xb9, 0x58, 0xbf, 0xc4, 0x2a, 0x89, 0x31, 0x1a, 0xf4, 0x2d, 0xe1, 0xca, 0x37, 0x99, 0x47, 0x59}}}, {{{0xc7, 0xca, 0x63, 0xc1, 0x49, 0xa9, 0x35, 0x45, 0x55, 0x7e, 0xda, 0x64, 0x32, 0x07, 0x50, 0xf7, 0x32, 0xac, 0xde, 0x75, 0x58, 0x9b, 0x11, 0xb2, 0x3a, 0x1f, 0xf5, 0xf7, 0x79, 0x04, 0xe6, 0x08}} , {{0x46, 0xfa, 0x22, 0x4b, 0xfa, 0xe1, 0xfe, 0x96, 0xfc, 0x67, 0xba, 0x67, 0x97, 0xc4, 0xe7, 0x1b, 0x86, 0x90, 0x5f, 0xee, 0xf4, 0x5b, 0x11, 0xb2, 0xcd, 0xad, 0xee, 0xc2, 0x48, 0x6c, 0x2b, 0x1b}}}, {{{0xe3, 0x39, 0x62, 0xb4, 0x4f, 0x31, 0x04, 0xc9, 0xda, 0xd5, 0x73, 0x51, 0x57, 0xc5, 0xb8, 0xf3, 0xa3, 0x43, 0x70, 0xe4, 0x61, 0x81, 0x84, 0xe2, 0xbb, 0xbf, 0x4f, 0x9e, 0xa4, 0x5e, 0x74, 0x06}} , {{0x29, 0xac, 0xff, 0x27, 0xe0, 0x59, 0xbe, 0x39, 0x9c, 0x0d, 0x83, 0xd7, 0x10, 0x0b, 0x15, 0xb7, 0xe1, 0xc2, 0x2c, 0x30, 0x73, 0x80, 0x3a, 0x7d, 0x5d, 0xab, 0x58, 0x6b, 0xc1, 0xf0, 0xf4, 0x22}}}, {{{0xfe, 0x7f, 0xfb, 0x35, 0x7d, 0xc6, 0x01, 0x23, 0x28, 0xc4, 0x02, 0xac, 0x1f, 0x42, 0xb4, 0x9d, 0xfc, 0x00, 0x94, 0xa5, 0xee, 0xca, 0xda, 0x97, 0x09, 0x41, 0x77, 0x87, 0x5d, 0x7b, 0x87, 0x78}} , {{0xf5, 0xfb, 0x90, 0x2d, 0x81, 0x19, 0x9e, 0x2f, 0x6d, 0x85, 0x88, 0x8c, 0x40, 0x5c, 0x77, 0x41, 0x4d, 0x01, 0x19, 0x76, 0x60, 0xe8, 0x4c, 0x48, 0xe4, 0x33, 0x83, 0x32, 0x6c, 0xb4, 0x41, 0x03}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xff, 0x10, 0xc2, 0x09, 0x4f, 0x6e, 0xf4, 0xd2, 0xdf, 0x7e, 0xca, 0x7b, 0x1c, 0x1d, 0xba, 0xa3, 0xb6, 0xda, 0x67, 0x33, 0xd4, 0x87, 0x36, 0x4b, 0x11, 0x20, 0x05, 0xa6, 0x29, 0xc1, 0x87, 0x17}} , {{0xf6, 0x96, 0xca, 0x2f, 0xda, 0x38, 0xa7, 0x1b, 0xfc, 0xca, 0x7d, 0xfe, 0x08, 0x89, 0xe2, 0x47, 0x2b, 0x6a, 0x5d, 0x4b, 0xfa, 0xa1, 0xb4, 0xde, 0xb6, 0xc2, 0x31, 0x51, 0xf5, 0xe0, 0xa4, 0x0b}}}, {{{0x5c, 0xe5, 0xc6, 0x04, 0x8e, 0x2b, 0x57, 0xbe, 0x38, 0x85, 0x23, 0xcb, 0xb7, 0xbe, 0x4f, 0xa9, 0xd3, 0x6e, 0x12, 0xaa, 0xd5, 0xb2, 0x2e, 0x93, 0x29, 0x9a, 0x4a, 0x88, 0x18, 0x43, 0xf5, 0x01}} , {{0x50, 0xfc, 0xdb, 0xa2, 0x59, 0x21, 0x8d, 0xbd, 0x7e, 0x33, 0xae, 0x2f, 0x87, 0x1a, 0xd0, 0x97, 0xc7, 0x0d, 0x4d, 0x63, 0x01, 0xef, 0x05, 0x84, 0xec, 0x40, 0xdd, 0xa8, 0x0a, 0x4f, 0x70, 0x0b}}}, {{{0x41, 0x69, 0x01, 0x67, 0x5c, 0xd3, 0x8a, 0xc5, 0xcf, 0x3f, 0xd1, 0x57, 0xd1, 0x67, 0x3e, 0x01, 0x39, 0xb5, 0xcb, 0x81, 0x56, 0x96, 0x26, 0xb6, 0xc2, 0xe7, 0x5c, 0xfb, 0x63, 0x97, 0x58, 0x06}} , {{0x0c, 0x0e, 0xf3, 0xba, 0xf0, 0xe5, 0xba, 0xb2, 0x57, 0x77, 0xc6, 0x20, 0x9b, 0x89, 0x24, 0xbe, 0xf2, 0x9c, 0x8a, 0xba, 0x69, 0xc1, 0xf1, 0xb0, 0x4f, 0x2a, 0x05, 0x9a, 0xee, 0x10, 0x7e, 0x36}}}, {{{0x3f, 0x26, 0xe9, 0x40, 0xe9, 0x03, 0xad, 0x06, 0x69, 0x91, 0xe0, 0xd1, 0x89, 0x60, 0x84, 0x79, 0xde, 0x27, 0x6d, 0xe6, 0x76, 0xbd, 0xea, 0xe6, 0xae, 0x48, 0xc3, 0x67, 0xc0, 0x57, 0xcd, 0x2f}} , {{0x7f, 0xc1, 0xdc, 0xb9, 0xc7, 0xbc, 0x86, 0x3d, 0x55, 0x4b, 0x28, 0x7a, 0xfb, 0x4d, 0xc7, 0xf8, 0xbc, 0x67, 0x2a, 0x60, 0x4d, 0x8f, 0x07, 0x0b, 0x1a, 0x17, 0xbf, 0xfa, 0xac, 0xa7, 0x3d, 0x1a}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x91, 0x3f, 0xed, 0x5e, 0x18, 0x78, 0x3f, 0x23, 0x2c, 0x0d, 0x8c, 0x44, 0x00, 0xe8, 0xfb, 0xe9, 0x8e, 0xd6, 0xd1, 0x36, 0x58, 0x57, 0x9e, 0xae, 0x4b, 0x5c, 0x0b, 0x07, 0xbc, 0x6b, 0x55, 0x2b}} , {{0x6f, 0x4d, 0x17, 0xd7, 0xe1, 0x84, 0xd9, 0x78, 0xb1, 0x90, 0xfd, 0x2e, 0xb3, 0xb5, 0x19, 0x3f, 0x1b, 0xfa, 0xc0, 0x68, 0xb3, 0xdd, 0x00, 0x2e, 0x89, 0xbd, 0x7e, 0x80, 0x32, 0x13, 0xa0, 0x7b}}}, {{{0x1a, 0x6f, 0x40, 0xaf, 0x44, 0x44, 0xb0, 0x43, 0x8f, 0x0d, 0xd0, 0x1e, 0xc4, 0x0b, 0x19, 0x5d, 0x8e, 0xfe, 0xc1, 0xf3, 0xc5, 0x5c, 0x91, 0xf8, 0x04, 0x4e, 0xbe, 0x90, 0xb4, 0x47, 0x5c, 0x3f}} , {{0xb0, 0x3b, 0x2c, 0xf3, 0xfe, 0x32, 0x71, 0x07, 0x3f, 0xaa, 0xba, 0x45, 0x60, 0xa8, 0x8d, 0xea, 0x54, 0xcb, 0x39, 0x10, 0xb4, 0xf2, 0x8b, 0xd2, 0x14, 0x82, 0x42, 0x07, 0x8e, 0xe9, 0x7c, 0x53}}}, {{{0xb0, 0xae, 0xc1, 0x8d, 0xc9, 0x8f, 0xb9, 0x7a, 0x77, 0xef, 0xba, 0x79, 0xa0, 0x3c, 0xa8, 0xf5, 0x6a, 0xe2, 0x3f, 0x5d, 0x00, 0xe3, 0x4b, 0x45, 0x24, 0x7b, 0x43, 0x78, 0x55, 0x1d, 0x2b, 0x1e}} , {{0x01, 0xb8, 0xd6, 0x16, 0x67, 0xa0, 0x15, 0xb9, 0xe1, 0x58, 0xa4, 0xa7, 0x31, 0x37, 0x77, 0x2f, 0x8b, 0x12, 0x9f, 0xf4, 0x3f, 0xc7, 0x36, 0x66, 0xd2, 0xa8, 0x56, 0xf7, 0x7f, 0x74, 0xc6, 0x41}}}, {{{0x5d, 0xf8, 0xb4, 0xa8, 0x30, 0xdd, 0xcc, 0x38, 0xa5, 0xd3, 0xca, 0xd8, 0xd1, 0xf8, 0xb2, 0x31, 0x91, 0xd4, 0x72, 0x05, 0x57, 0x4a, 0x3b, 0x82, 0x4a, 0xc6, 0x68, 0x20, 0xe2, 0x18, 0x41, 0x61}} , {{0x19, 0xd4, 0x8d, 0x47, 0x29, 0x12, 0x65, 0xb0, 0x11, 0x78, 0x47, 0xb5, 0xcb, 0xa3, 0xa5, 0xfa, 0x05, 0x85, 0x54, 0xa9, 0x33, 0x97, 0x8d, 0x2b, 0xc2, 0xfe, 0x99, 0x35, 0x28, 0xe5, 0xeb, 0x63}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xb1, 0x3f, 0x3f, 0xef, 0xd8, 0xf4, 0xfc, 0xb3, 0xa0, 0x60, 0x50, 0x06, 0x2b, 0x29, 0x52, 0x70, 0x15, 0x0b, 0x24, 0x24, 0xf8, 0x5f, 0x79, 0x18, 0xcc, 0xff, 0x89, 0x99, 0x84, 0xa1, 0xae, 0x13}} , {{0x44, 0x1f, 0xb8, 0xc2, 0x01, 0xc1, 0x30, 0x19, 0x55, 0x05, 0x60, 0x10, 0xa4, 0x6c, 0x2d, 0x67, 0x70, 0xe5, 0x25, 0x1b, 0xf2, 0xbf, 0xdd, 0xfb, 0x70, 0x2b, 0xa1, 0x8c, 0x9c, 0x94, 0x84, 0x08}}}, {{{0xe7, 0xc4, 0x43, 0x4d, 0xc9, 0x2b, 0x69, 0x5d, 0x1d, 0x3c, 0xaf, 0xbb, 0x43, 0x38, 0x4e, 0x98, 0x3d, 0xed, 0x0d, 0x21, 0x03, 0xfd, 0xf0, 0x99, 0x47, 0x04, 0xb0, 0x98, 0x69, 0x55, 0x72, 0x0f}} , {{0x5e, 0xdf, 0x15, 0x53, 0x3b, 0x86, 0x80, 0xb0, 0xf1, 0x70, 0x68, 0x8f, 0x66, 0x7c, 0x0e, 0x49, 0x1a, 0xd8, 0x6b, 0xfe, 0x4e, 0xef, 0xca, 0x47, 0xd4, 0x03, 0xc1, 0x37, 0x50, 0x9c, 0xc1, 0x16}}}, {{{0xcd, 0x24, 0xc6, 0x3e, 0x0c, 0x82, 0x9b, 0x91, 0x2b, 0x61, 0x4a, 0xb2, 0x0f, 0x88, 0x55, 0x5f, 0x5a, 0x57, 0xff, 0xe5, 0x74, 0x0b, 0x13, 0x43, 0x00, 0xd8, 0x6b, 0xcf, 0xd2, 0x15, 0x03, 0x2c}} , {{0xdc, 0xff, 0x15, 0x61, 0x2f, 0x4a, 0x2f, 0x62, 0xf2, 0x04, 0x2f, 0xb5, 0x0c, 0xb7, 0x1e, 0x3f, 0x74, 0x1a, 0x0f, 0xd7, 0xea, 0xcd, 0xd9, 0x7d, 0xf6, 0x12, 0x0e, 0x2f, 0xdb, 0x5a, 0x3b, 0x16}}}, {{{0x1b, 0x37, 0x47, 0xe3, 0xf5, 0x9e, 0xea, 0x2c, 0x2a, 0xe7, 0x82, 0x36, 0xf4, 0x1f, 0x81, 0x47, 0x92, 0x4b, 0x69, 0x0e, 0x11, 0x8c, 0x5d, 0x53, 0x5b, 0x81, 0x27, 0x08, 0xbc, 0xa0, 0xae, 0x25}} , {{0x69, 0x32, 0xa1, 0x05, 0x11, 0x42, 0x00, 0xd2, 0x59, 0xac, 0x4d, 0x62, 0x8b, 0x13, 0xe2, 0x50, 0x5d, 0xa0, 0x9d, 0x9b, 0xfd, 0xbb, 0x12, 0x41, 0x75, 0x41, 0x9e, 0xcc, 0xdc, 0xc7, 0xdc, 0x5d}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xd9, 0xe3, 0x38, 0x06, 0x46, 0x70, 0x82, 0x5e, 0x28, 0x49, 0x79, 0xff, 0x25, 0xd2, 0x4e, 0x29, 0x8d, 0x06, 0xb0, 0x23, 0xae, 0x9b, 0x66, 0xe4, 0x7d, 0xc0, 0x70, 0x91, 0xa3, 0xfc, 0xec, 0x4e}} , {{0x62, 0x12, 0x37, 0x6a, 0x30, 0xf6, 0x1e, 0xfb, 0x14, 0x5c, 0x0d, 0x0e, 0xb7, 0x81, 0x6a, 0xe7, 0x08, 0x05, 0xac, 0xaa, 0x38, 0x46, 0xe2, 0x73, 0xea, 0x4b, 0x07, 0x81, 0x43, 0x7c, 0x9e, 0x5e}}}, {{{0xfc, 0xf9, 0x21, 0x4f, 0x2e, 0x76, 0x9b, 0x1f, 0x28, 0x60, 0x77, 0x43, 0x32, 0x9d, 0xbe, 0x17, 0x30, 0x2a, 0xc6, 0x18, 0x92, 0x66, 0x62, 0x30, 0x98, 0x40, 0x11, 0xa6, 0x7f, 0x18, 0x84, 0x28}} , {{0x3f, 0xab, 0xd3, 0xf4, 0x8a, 0x76, 0xa1, 0x3c, 0xca, 0x2d, 0x49, 0xc3, 0xea, 0x08, 0x0b, 0x85, 0x17, 0x2a, 0xc3, 0x6c, 0x08, 0xfd, 0x57, 0x9f, 0x3d, 0x5f, 0xdf, 0x67, 0x68, 0x42, 0x00, 0x32}}}, {{{0x51, 0x60, 0x1b, 0x06, 0x4f, 0x8a, 0x21, 0xba, 0x38, 0xa8, 0xba, 0xd6, 0x40, 0xf6, 0xe9, 0x9b, 0x76, 0x4d, 0x56, 0x21, 0x5b, 0x0a, 0x9b, 0x2e, 0x4f, 0x3d, 0x81, 0x32, 0x08, 0x9f, 0x97, 0x5b}} , {{0xe5, 0x44, 0xec, 0x06, 0x9d, 0x90, 0x79, 0x9f, 0xd3, 0xe0, 0x79, 0xaf, 0x8f, 0x10, 0xfd, 0xdd, 0x04, 0xae, 0x27, 0x97, 0x46, 0x33, 0x79, 0xea, 0xb8, 0x4e, 0xca, 0x5a, 0x59, 0x57, 0xe1, 0x0e}}}, {{{0x1a, 0xda, 0xf3, 0xa5, 0x41, 0x43, 0x28, 0xfc, 0x7e, 0xe7, 0x71, 0xea, 0xc6, 0x3b, 0x59, 0xcc, 0x2e, 0xd3, 0x40, 0xec, 0xb3, 0x13, 0x6f, 0x44, 0xcd, 0x13, 0xb2, 0x37, 0xf2, 0x6e, 0xd9, 0x1c}} , {{0xe3, 0xdb, 0x60, 0xcd, 0x5c, 0x4a, 0x18, 0x0f, 0xef, 0x73, 0x36, 0x71, 0x8c, 0xf6, 0x11, 0xb4, 0xd8, 0xce, 0x17, 0x5e, 0x4f, 0x26, 0x77, 0x97, 0x5f, 0xcb, 0xef, 0x91, 0xeb, 0x6a, 0x62, 0x7a}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x18, 0x4a, 0xa2, 0x97, 0x08, 0x81, 0x2d, 0x83, 0xc4, 0xcc, 0xf0, 0x83, 0x7e, 0xec, 0x0d, 0x95, 0x4c, 0x5b, 0xfb, 0xfa, 0x98, 0x80, 0x4a, 0x66, 0x56, 0x0c, 0x51, 0xb3, 0xf2, 0x04, 0x5d, 0x27}} , {{0x3b, 0xb9, 0xb8, 0x06, 0x5a, 0x2e, 0xfe, 0xc3, 0x82, 0x37, 0x9c, 0xa3, 0x11, 0x1f, 0x9c, 0xa6, 0xda, 0x63, 0x48, 0x9b, 0xad, 0xde, 0x2d, 0xa6, 0xbc, 0x6e, 0x32, 0xda, 0x27, 0x65, 0xdd, 0x57}}}, {{{0x84, 0x4f, 0x37, 0x31, 0x7d, 0x2e, 0xbc, 0xad, 0x87, 0x07, 0x2a, 0x6b, 0x37, 0xfc, 0x5f, 0xeb, 0x4e, 0x75, 0x35, 0xa6, 0xde, 0xab, 0x0a, 0x19, 0x3a, 0xb7, 0xb1, 0xef, 0x92, 0x6a, 0x3b, 0x3c}} , {{0x3b, 0xb2, 0x94, 0x6d, 0x39, 0x60, 0xac, 0xee, 0xe7, 0x81, 0x1a, 0x3b, 0x76, 0x87, 0x5c, 0x05, 0x94, 0x2a, 0x45, 0xb9, 0x80, 0xe9, 0x22, 0xb1, 0x07, 0xcb, 0x40, 0x9e, 0x70, 0x49, 0x6d, 0x12}}}, {{{0xfd, 0x18, 0x78, 0x84, 0xa8, 0x4c, 0x7d, 0x6e, 0x59, 0xa6, 0xe5, 0x74, 0xf1, 0x19, 0xa6, 0x84, 0x2e, 0x51, 0xc1, 0x29, 0x13, 0xf2, 0x14, 0x6b, 0x5d, 0x53, 0x51, 0xf7, 0xef, 0xbf, 0x01, 0x22}} , {{0xa4, 0x4b, 0x62, 0x4c, 0xe6, 0xfd, 0x72, 0x07, 0xf2, 0x81, 0xfc, 0xf2, 0xbd, 0x12, 0x7c, 0x68, 0x76, 0x2a, 0xba, 0xf5, 0x65, 0xb1, 0x1f, 0x17, 0x0a, 0x38, 0xb0, 0xbf, 0xc0, 0xf8, 0xf4, 0x2a}}}, {{{0x55, 0x60, 0x55, 0x5b, 0xe4, 0x1d, 0x71, 0x4c, 0x9d, 0x5b, 0x9f, 0x70, 0xa6, 0x85, 0x9a, 0x2c, 0xa0, 0xe2, 0x32, 0x48, 0xce, 0x9e, 0x2a, 0xa5, 0x07, 0x3b, 0xc7, 0x6c, 0x86, 0x77, 0xde, 0x3c}} , {{0xf7, 0x18, 0x7a, 0x96, 0x7e, 0x43, 0x57, 0xa9, 0x55, 0xfc, 0x4e, 0xb6, 0x72, 0x00, 0xf2, 0xe4, 0xd7, 0x52, 0xd3, 0xd3, 0xb6, 0x85, 0xf6, 0x71, 0xc7, 0x44, 0x3f, 0x7f, 0xd7, 0xb3, 0xf2, 0x79}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x46, 0xca, 0xa7, 0x55, 0x7b, 0x79, 0xf3, 0xca, 0x5a, 0x65, 0xf6, 0xed, 0x50, 0x14, 0x7b, 0xe4, 0xc4, 0x2a, 0x65, 0x9e, 0xe2, 0xf9, 0xca, 0xa7, 0x22, 0x26, 0x53, 0xcb, 0x21, 0x5b, 0xa7, 0x31}} , {{0x90, 0xd7, 0xc5, 0x26, 0x08, 0xbd, 0xb0, 0x53, 0x63, 0x58, 0xc3, 0x31, 0x5e, 0x75, 0x46, 0x15, 0x91, 0xa6, 0xf8, 0x2f, 0x1a, 0x08, 0x65, 0x88, 0x2f, 0x98, 0x04, 0xf1, 0x7c, 0x6e, 0x00, 0x77}}}, {{{0x81, 0x21, 0x61, 0x09, 0xf6, 0x4e, 0xf1, 0x92, 0xee, 0x63, 0x61, 0x73, 0x87, 0xc7, 0x54, 0x0e, 0x42, 0x4b, 0xc9, 0x47, 0xd1, 0xb8, 0x7e, 0x91, 0x75, 0x37, 0x99, 0x28, 0xb8, 0xdd, 0x7f, 0x50}} , {{0x89, 0x8f, 0xc0, 0xbe, 0x5d, 0xd6, 0x9f, 0xa0, 0xf0, 0x9d, 0x81, 0xce, 0x3a, 0x7b, 0x98, 0x58, 0xbb, 0xd7, 0x78, 0xc8, 0x3f, 0x13, 0xf1, 0x74, 0x19, 0xdf, 0xf8, 0x98, 0x89, 0x5d, 0xfa, 0x5f}}}, {{{0x9e, 0x35, 0x85, 0x94, 0x47, 0x1f, 0x90, 0x15, 0x26, 0xd0, 0x84, 0xed, 0x8a, 0x80, 0xf7, 0x63, 0x42, 0x86, 0x27, 0xd7, 0xf4, 0x75, 0x58, 0xdc, 0x9c, 0xc0, 0x22, 0x7e, 0x20, 0x35, 0xfd, 0x1f}} , {{0x68, 0x0e, 0x6f, 0x97, 0xba, 0x70, 0xbb, 0xa3, 0x0e, 0xe5, 0x0b, 0x12, 0xf4, 0xa2, 0xdc, 0x47, 0xf8, 0xe6, 0xd0, 0x23, 0x6c, 0x33, 0xa8, 0x99, 0x46, 0x6e, 0x0f, 0x44, 0xba, 0x76, 0x48, 0x0f}}}, {{{0xa3, 0x2a, 0x61, 0x37, 0xe2, 0x59, 0x12, 0x0e, 0x27, 0xba, 0x64, 0x43, 0xae, 0xc0, 0x42, 0x69, 0x79, 0xa4, 0x1e, 0x29, 0x8b, 0x15, 0xeb, 0xf8, 0xaf, 0xd4, 0xa2, 0x68, 0x33, 0xb5, 0x7a, 0x24}} , {{0x2c, 0x19, 0x33, 0xdd, 0x1b, 0xab, 0xec, 0x01, 0xb0, 0x23, 0xf8, 0x42, 0x2b, 0x06, 0x88, 0xea, 0x3d, 0x2d, 0x00, 0x2a, 0x78, 0x45, 0x4d, 0x38, 0xed, 0x2e, 0x2e, 0x44, 0x49, 0xed, 0xcb, 0x33}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xa0, 0x68, 0xe8, 0x41, 0x8f, 0x91, 0xf8, 0x11, 0x13, 0x90, 0x2e, 0xa7, 0xab, 0x30, 0xef, 0xad, 0xa0, 0x61, 0x00, 0x88, 0xef, 0xdb, 0xce, 0x5b, 0x5c, 0xbb, 0x62, 0xc8, 0x56, 0xf9, 0x00, 0x73}} , {{0x3f, 0x60, 0xc1, 0x82, 0x2d, 0xa3, 0x28, 0x58, 0x24, 0x9e, 0x9f, 0xe3, 0x70, 0xcc, 0x09, 0x4e, 0x1a, 0x3f, 0x11, 0x11, 0x15, 0x07, 0x3c, 0xa4, 0x41, 0xe0, 0x65, 0xa3, 0x0a, 0x41, 0x6d, 0x11}}}, {{{0x31, 0x40, 0x01, 0x52, 0x56, 0x94, 0x5b, 0x28, 0x8a, 0xaa, 0x52, 0xee, 0xd8, 0x0a, 0x05, 0x8d, 0xcd, 0xb5, 0xaa, 0x2e, 0x38, 0xaa, 0xb7, 0x87, 0xf7, 0x2b, 0xfb, 0x04, 0xcb, 0x84, 0x3d, 0x54}} , {{0x20, 0xef, 0x59, 0xde, 0xa4, 0x2b, 0x93, 0x6e, 0x2e, 0xec, 0x42, 0x9a, 0xd4, 0x2d, 0xf4, 0x46, 0x58, 0x27, 0x2b, 0x18, 0x8f, 0x83, 0x3d, 0x69, 0x9e, 0xd4, 0x3e, 0xb6, 0xc5, 0xfd, 0x58, 0x03}}}, {{{0x33, 0x89, 0xc9, 0x63, 0x62, 0x1c, 0x17, 0xb4, 0x60, 0xc4, 0x26, 0x68, 0x09, 0xc3, 0x2e, 0x37, 0x0f, 0x7b, 0xb4, 0x9c, 0xb6, 0xf9, 0xfb, 0xd4, 0x51, 0x78, 0xc8, 0x63, 0xea, 0x77, 0x47, 0x07}} , {{0x32, 0xb4, 0x18, 0x47, 0x79, 0xcb, 0xd4, 0x5a, 0x07, 0x14, 0x0f, 0xa0, 0xd5, 0xac, 0xd0, 0x41, 0x40, 0xab, 0x61, 0x23, 0xe5, 0x2a, 0x2a, 0x6f, 0xf7, 0xa8, 0xd4, 0x76, 0xef, 0xe7, 0x45, 0x6c}}}, {{{0xa1, 0x5e, 0x60, 0x4f, 0xfb, 0xe1, 0x70, 0x6a, 0x1f, 0x55, 0x4f, 0x09, 0xb4, 0x95, 0x33, 0x36, 0xc6, 0x81, 0x01, 0x18, 0x06, 0x25, 0x27, 0xa4, 0xb4, 0x24, 0xa4, 0x86, 0x03, 0x4c, 0xac, 0x02}} , {{0x77, 0x38, 0xde, 0xd7, 0x60, 0x48, 0x07, 0xf0, 0x74, 0xa8, 0xff, 0x54, 0xe5, 0x30, 0x43, 0xff, 0x77, 0xfb, 0x21, 0x07, 0xff, 0xb2, 0x07, 0x6b, 0xe4, 0xe5, 0x30, 0xfc, 0x19, 0x6c, 0xa3, 0x01}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x13, 0xc5, 0x2c, 0xac, 0xd3, 0x83, 0x82, 0x7c, 0x29, 0xf7, 0x05, 0xa5, 0x00, 0xb6, 0x1f, 0x86, 0x55, 0xf4, 0xd6, 0x2f, 0x0c, 0x99, 0xd0, 0x65, 0x9b, 0x6b, 0x46, 0x0d, 0x43, 0xf8, 0x16, 0x28}} , {{0x1e, 0x7f, 0xb4, 0x74, 0x7e, 0xb1, 0x89, 0x4f, 0x18, 0x5a, 0xab, 0x64, 0x06, 0xdf, 0x45, 0x87, 0xe0, 0x6a, 0xc6, 0xf0, 0x0e, 0xc9, 0x24, 0x35, 0x38, 0xea, 0x30, 0x54, 0xb4, 0xc4, 0x52, 0x54}}}, {{{0xe9, 0x9f, 0xdc, 0x3f, 0xc1, 0x89, 0x44, 0x74, 0x27, 0xe4, 0xc1, 0x90, 0xff, 0x4a, 0xa7, 0x3c, 0xee, 0xcd, 0xf4, 0x1d, 0x25, 0x94, 0x7f, 0x63, 0x16, 0x48, 0xbc, 0x64, 0xfe, 0x95, 0xc4, 0x0c}} , {{0x8b, 0x19, 0x75, 0x6e, 0x03, 0x06, 0x5e, 0x6a, 0x6f, 0x1a, 0x8c, 0xe3, 0xd3, 0x28, 0xf2, 0xe0, 0xb9, 0x7a, 0x43, 0x69, 0xe6, 0xd3, 0xc0, 0xfe, 0x7e, 0x97, 0xab, 0x6c, 0x7b, 0x8e, 0x13, 0x42}}}, {{{0xd4, 0xca, 0x70, 0x3d, 0xab, 0xfb, 0x5f, 0x5e, 0x00, 0x0c, 0xcc, 0x77, 0x22, 0xf8, 0x78, 0x55, 0xae, 0x62, 0x35, 0xfb, 0x9a, 0xc6, 0x03, 0xe4, 0x0c, 0xee, 0xab, 0xc7, 0xc0, 0x89, 0x87, 0x54}} , {{0x32, 0xad, 0xae, 0x85, 0x58, 0x43, 0xb8, 0xb1, 0xe6, 0x3e, 0x00, 0x9c, 0x78, 0x88, 0x56, 0xdb, 0x9c, 0xfc, 0x79, 0xf6, 0xf9, 0x41, 0x5f, 0xb7, 0xbc, 0x11, 0xf9, 0x20, 0x36, 0x1c, 0x53, 0x2b}}}, {{{0x5a, 0x20, 0x5b, 0xa1, 0xa5, 0x44, 0x91, 0x24, 0x02, 0x63, 0x12, 0x64, 0xb8, 0x55, 0xf6, 0xde, 0x2c, 0xdb, 0x47, 0xb8, 0xc6, 0x0a, 0xc3, 0x00, 0x78, 0x93, 0xd8, 0xf5, 0xf5, 0x18, 0x28, 0x0a}} , {{0xd6, 0x1b, 0x9a, 0x6c, 0xe5, 0x46, 0xea, 0x70, 0x96, 0x8d, 0x4e, 0x2a, 0x52, 0x21, 0x26, 0x4b, 0xb1, 0xbb, 0x0f, 0x7c, 0xa9, 0x9b, 0x04, 0xbb, 0x51, 0x08, 0xf1, 0x9a, 0xa4, 0x76, 0x7c, 0x18}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xfa, 0x94, 0xf7, 0x40, 0xd0, 0xd7, 0xeb, 0xa9, 0x82, 0x36, 0xd5, 0x15, 0xb9, 0x33, 0x7a, 0xbf, 0x8a, 0xf2, 0x63, 0xaa, 0x37, 0xf5, 0x59, 0xac, 0xbd, 0xbb, 0x32, 0x36, 0xbe, 0x73, 0x99, 0x38}} , {{0x2c, 0xb3, 0xda, 0x7a, 0xd8, 0x3d, 0x99, 0xca, 0xd2, 0xf4, 0xda, 0x99, 0x8e, 0x4f, 0x98, 0xb7, 0xf4, 0xae, 0x3e, 0x9f, 0x8e, 0x35, 0x60, 0xa4, 0x33, 0x75, 0xa4, 0x04, 0x93, 0xb1, 0x6b, 0x4d}}}, {{{0x97, 0x9d, 0xa8, 0xcd, 0x97, 0x7b, 0x9d, 0xb9, 0xe7, 0xa5, 0xef, 0xfd, 0xa8, 0x42, 0x6b, 0xc3, 0x62, 0x64, 0x7d, 0xa5, 0x1b, 0xc9, 0x9e, 0xd2, 0x45, 0xb9, 0xee, 0x03, 0xb0, 0xbf, 0xc0, 0x68}} , {{0xed, 0xb7, 0x84, 0x2c, 0xf6, 0xd3, 0xa1, 0x6b, 0x24, 0x6d, 0x87, 0x56, 0x97, 0x59, 0x79, 0x62, 0x9f, 0xac, 0xed, 0xf3, 0xc9, 0x89, 0x21, 0x2e, 0x04, 0xb3, 0xcc, 0x2f, 0xbe, 0xd6, 0x0a, 0x4b}}}, {{{0x39, 0x61, 0x05, 0xed, 0x25, 0x89, 0x8b, 0x5d, 0x1b, 0xcb, 0x0c, 0x55, 0xf4, 0x6a, 0x00, 0x8a, 0x46, 0xe8, 0x1e, 0xc6, 0x83, 0xc8, 0x5a, 0x76, 0xdb, 0xcc, 0x19, 0x7a, 0xcc, 0x67, 0x46, 0x0b}} , {{0x53, 0xcf, 0xc2, 0xa1, 0xad, 0x6a, 0xf3, 0xcd, 0x8f, 0xc9, 0xde, 0x1c, 0xf8, 0x6c, 0x8f, 0xf8, 0x76, 0x42, 0xe7, 0xfe, 0xb2, 0x72, 0x21, 0x0a, 0x66, 0x74, 0x8f, 0xb7, 0xeb, 0xe4, 0x6f, 0x01}}}, {{{0x22, 0x8c, 0x6b, 0xbe, 0xfc, 0x4d, 0x70, 0x62, 0x6e, 0x52, 0x77, 0x99, 0x88, 0x7e, 0x7b, 0x57, 0x7a, 0x0d, 0xfe, 0xdc, 0x72, 0x92, 0xf1, 0x68, 0x1d, 0x97, 0xd7, 0x7c, 0x8d, 0x53, 0x10, 0x37}} , {{0x53, 0x88, 0x77, 0x02, 0xca, 0x27, 0xa8, 0xe5, 0x45, 0xe2, 0xa8, 0x48, 0x2a, 0xab, 0x18, 0xca, 0xea, 0x2d, 0x2a, 0x54, 0x17, 0x37, 0x32, 0x09, 0xdc, 0xe0, 0x4a, 0xb7, 0x7d, 0x82, 0x10, 0x7d}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x8a, 0x64, 0x1e, 0x14, 0x0a, 0x57, 0xd4, 0xda, 0x5c, 0x96, 0x9b, 0x01, 0x4c, 0x67, 0xbf, 0x8b, 0x30, 0xfe, 0x08, 0xdb, 0x0d, 0xd5, 0xa8, 0xd7, 0x09, 0x11, 0x85, 0xa2, 0xd3, 0x45, 0xfb, 0x7e}} , {{0xda, 0x8c, 0xc2, 0xd0, 0xac, 0x18, 0xe8, 0x52, 0x36, 0xd4, 0x21, 0xa3, 0xdd, 0x57, 0x22, 0x79, 0xb7, 0xf8, 0x71, 0x9d, 0xc6, 0x91, 0x70, 0x86, 0x56, 0xbf, 0xa1, 0x11, 0x8b, 0x19, 0xe1, 0x0f}}}, {{{0x18, 0x32, 0x98, 0x2c, 0x8f, 0x91, 0xae, 0x12, 0xf0, 0x8c, 0xea, 0xf3, 0x3c, 0xb9, 0x5d, 0xe4, 0x69, 0xed, 0xb2, 0x47, 0x18, 0xbd, 0xce, 0x16, 0x52, 0x5c, 0x23, 0xe2, 0xa5, 0x25, 0x52, 0x5d}} , {{0xb9, 0xb1, 0xe7, 0x5d, 0x4e, 0xbc, 0xee, 0xbb, 0x40, 0x81, 0x77, 0x82, 0x19, 0xab, 0xb5, 0xc6, 0xee, 0xab, 0x5b, 0x6b, 0x63, 0x92, 0x8a, 0x34, 0x8d, 0xcd, 0xee, 0x4f, 0x49, 0xe5, 0xc9, 0x7e}}}, {{{0x21, 0xac, 0x8b, 0x22, 0xcd, 0xc3, 0x9a, 0xe9, 0x5e, 0x78, 0xbd, 0xde, 0xba, 0xad, 0xab, 0xbf, 0x75, 0x41, 0x09, 0xc5, 0x58, 0xa4, 0x7d, 0x92, 0xb0, 0x7f, 0xf2, 0xa1, 0xd1, 0xc0, 0xb3, 0x6d}} , {{0x62, 0x4f, 0xd0, 0x75, 0x77, 0xba, 0x76, 0x77, 0xd7, 0xb8, 0xd8, 0x92, 0x6f, 0x98, 0x34, 0x3d, 0xd6, 0x4e, 0x1c, 0x0f, 0xf0, 0x8f, 0x2e, 0xf1, 0xb3, 0xbd, 0xb1, 0xb9, 0xec, 0x99, 0xb4, 0x07}}}, {{{0x60, 0x57, 0x2e, 0x9a, 0x72, 0x1d, 0x6b, 0x6e, 0x58, 0x33, 0x24, 0x8c, 0x48, 0x39, 0x46, 0x8e, 0x89, 0x6a, 0x88, 0x51, 0x23, 0x62, 0xb5, 0x32, 0x09, 0x36, 0xe3, 0x57, 0xf5, 0x98, 0xde, 0x6f}} , {{0x8b, 0x2c, 0x00, 0x48, 0x4a, 0xf9, 0x5b, 0x87, 0x69, 0x52, 0xe5, 0x5b, 0xd1, 0xb1, 0xe5, 0x25, 0x25, 0xe0, 0x9c, 0xc2, 0x13, 0x44, 0xe8, 0xb9, 0x0a, 0x70, 0xad, 0xbd, 0x0f, 0x51, 0x94, 0x69}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xa2, 0xdc, 0xab, 0xa9, 0x25, 0x2d, 0xac, 0x5f, 0x03, 0x33, 0x08, 0xe7, 0x7e, 0xfe, 0x95, 0x36, 0x3c, 0x5b, 0x3a, 0xd3, 0x05, 0x82, 0x1c, 0x95, 0x2d, 0xd8, 0x77, 0x7e, 0x02, 0xd9, 0x5b, 0x70}} , {{0xc2, 0xfe, 0x1b, 0x0c, 0x67, 0xcd, 0xd6, 0xe0, 0x51, 0x8e, 0x2c, 0xe0, 0x79, 0x88, 0xf0, 0xcf, 0x41, 0x4a, 0xad, 0x23, 0xd4, 0x46, 0xca, 0x94, 0xa1, 0xc3, 0xeb, 0x28, 0x06, 0xfa, 0x17, 0x14}}}, {{{0x7b, 0xaa, 0x70, 0x0a, 0x4b, 0xfb, 0xf5, 0xbf, 0x80, 0xc5, 0xcf, 0x08, 0x7a, 0xdd, 0xa1, 0xf4, 0x9d, 0x54, 0x50, 0x53, 0x23, 0x77, 0x23, 0xf5, 0x34, 0xa5, 0x22, 0xd1, 0x0d, 0x96, 0x2e, 0x47}} , {{0xcc, 0xb7, 0x32, 0x89, 0x57, 0xd0, 0x98, 0x75, 0xe4, 0x37, 0x99, 0xa9, 0xe8, 0xba, 0xed, 0xba, 0xeb, 0xc7, 0x4f, 0x15, 0x76, 0x07, 0x0c, 0x4c, 0xef, 0x9f, 0x52, 0xfc, 0x04, 0x5d, 0x58, 0x10}}}, {{{0xce, 0x82, 0xf0, 0x8f, 0x79, 0x02, 0xa8, 0xd1, 0xda, 0x14, 0x09, 0x48, 0xee, 0x8a, 0x40, 0x98, 0x76, 0x60, 0x54, 0x5a, 0xde, 0x03, 0x24, 0xf5, 0xe6, 0x2f, 0xe1, 0x03, 0xbf, 0x68, 0x82, 0x7f}} , {{0x64, 0xe9, 0x28, 0xc7, 0xa4, 0xcf, 0x2a, 0xf9, 0x90, 0x64, 0x72, 0x2c, 0x8b, 0xeb, 0xec, 0xa0, 0xf2, 0x7d, 0x35, 0xb5, 0x90, 0x4d, 0x7f, 0x5b, 0x4a, 0x49, 0xe4, 0xb8, 0x3b, 0xc8, 0xa1, 0x2f}}}, {{{0x8b, 0xc5, 0xcc, 0x3d, 0x69, 0xa6, 0xa1, 0x18, 0x44, 0xbc, 0x4d, 0x77, 0x37, 0xc7, 0x86, 0xec, 0x0c, 0xc9, 0xd6, 0x44, 0xa9, 0x23, 0x27, 0xb9, 0x03, 0x34, 0xa7, 0x0a, 0xd5, 0xc7, 0x34, 0x37}} , {{0xf9, 0x7e, 0x3e, 0x66, 0xee, 0xf9, 0x99, 0x28, 0xff, 0xad, 0x11, 0xd8, 0xe2, 0x66, 0xc5, 0xcd, 0x0f, 0x0d, 0x0b, 0x6a, 0xfc, 0x7c, 0x24, 0xa8, 0x4f, 0xa8, 0x5e, 0x80, 0x45, 0x8b, 0x6c, 0x41}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xef, 0x1e, 0xec, 0xf7, 0x8d, 0x77, 0xf2, 0xea, 0xdb, 0x60, 0x03, 0x21, 0xc0, 0xff, 0x5e, 0x67, 0xc3, 0x71, 0x0b, 0x21, 0xb4, 0x41, 0xa0, 0x68, 0x38, 0xc6, 0x01, 0xa3, 0xd3, 0x51, 0x3c, 0x3c}} , {{0x92, 0xf8, 0xd6, 0x4b, 0xef, 0x42, 0x13, 0xb2, 0x4a, 0xc4, 0x2e, 0x72, 0x3f, 0xc9, 0x11, 0xbd, 0x74, 0x02, 0x0e, 0xf5, 0x13, 0x9d, 0x83, 0x1a, 0x1b, 0xd5, 0x54, 0xde, 0xc4, 0x1e, 0x16, 0x6c}}}, {{{0x27, 0x52, 0xe4, 0x63, 0xaa, 0x94, 0xe6, 0xc3, 0x28, 0x9c, 0xc6, 0x56, 0xac, 0xfa, 0xb6, 0xbd, 0xe2, 0xcc, 0x76, 0xc6, 0x27, 0x27, 0xa2, 0x8e, 0x78, 0x2b, 0x84, 0x72, 0x10, 0xbd, 0x4e, 0x2a}} , {{0xea, 0xa7, 0x23, 0xef, 0x04, 0x61, 0x80, 0x50, 0xc9, 0x6e, 0xa5, 0x96, 0xd1, 0xd1, 0xc8, 0xc3, 0x18, 0xd7, 0x2d, 0xfd, 0x26, 0xbd, 0xcb, 0x7b, 0x92, 0x51, 0x0e, 0x4a, 0x65, 0x57, 0xb8, 0x49}}}, {{{0xab, 0x55, 0x36, 0xc3, 0xec, 0x63, 0x55, 0x11, 0x55, 0xf6, 0xa5, 0xc7, 0x01, 0x5f, 0xfe, 0x79, 0xd8, 0x0a, 0xf7, 0x03, 0xd8, 0x98, 0x99, 0xf5, 0xd0, 0x00, 0x54, 0x6b, 0x66, 0x28, 0xf5, 0x25}} , {{0x7a, 0x8d, 0xa1, 0x5d, 0x70, 0x5d, 0x51, 0x27, 0xee, 0x30, 0x65, 0x56, 0x95, 0x46, 0xde, 0xbd, 0x03, 0x75, 0xb4, 0x57, 0x59, 0x89, 0xeb, 0x02, 0x9e, 0xcc, 0x89, 0x19, 0xa7, 0xcb, 0x17, 0x67}}}, {{{0x6a, 0xeb, 0xfc, 0x9a, 0x9a, 0x10, 0xce, 0xdb, 0x3a, 0x1c, 0x3c, 0x6a, 0x9d, 0xea, 0x46, 0xbc, 0x45, 0x49, 0xac, 0xe3, 0x41, 0x12, 0x7c, 0xf0, 0xf7, 0x4f, 0xf9, 0xf7, 0xff, 0x2c, 0x89, 0x04}} , {{0x30, 0x31, 0x54, 0x1a, 0x46, 0xca, 0xe6, 0xc6, 0xcb, 0xe2, 0xc3, 0xc1, 0x8b, 0x75, 0x81, 0xbe, 0xee, 0xf8, 0xa3, 0x11, 0x1c, 0x25, 0xa3, 0xa7, 0x35, 0x51, 0x55, 0xe2, 0x25, 0xaa, 0xe2, 0x3a}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xb4, 0x48, 0x10, 0x9f, 0x8a, 0x09, 0x76, 0xfa, 0xf0, 0x7a, 0xb0, 0x70, 0xf7, 0x83, 0x80, 0x52, 0x84, 0x2b, 0x26, 0xa2, 0xc4, 0x5d, 0x4f, 0xba, 0xb1, 0xc8, 0x40, 0x0d, 0x78, 0x97, 0xc4, 0x60}} , {{0xd4, 0xb1, 0x6c, 0x08, 0xc7, 0x40, 0x38, 0x73, 0x5f, 0x0b, 0xf3, 0x76, 0x5d, 0xb2, 0xa5, 0x2f, 0x57, 0x57, 0x07, 0xed, 0x08, 0xa2, 0x6c, 0x4f, 0x08, 0x02, 0xb5, 0x0e, 0xee, 0x44, 0xfa, 0x22}}}, {{{0x0f, 0x00, 0x3f, 0xa6, 0x04, 0x19, 0x56, 0x65, 0x31, 0x7f, 0x8b, 0xeb, 0x0d, 0xe1, 0x47, 0x89, 0x97, 0x16, 0x53, 0xfa, 0x81, 0xa7, 0xaa, 0xb2, 0xbf, 0x67, 0xeb, 0x72, 0x60, 0x81, 0x0d, 0x48}} , {{0x7e, 0x13, 0x33, 0xcd, 0xa8, 0x84, 0x56, 0x1e, 0x67, 0xaf, 0x6b, 0x43, 0xac, 0x17, 0xaf, 0x16, 0xc0, 0x52, 0x99, 0x49, 0x5b, 0x87, 0x73, 0x7e, 0xb5, 0x43, 0xda, 0x6b, 0x1d, 0x0f, 0x2d, 0x55}}}, {{{0xe9, 0x58, 0x1f, 0xff, 0x84, 0x3f, 0x93, 0x1c, 0xcb, 0xe1, 0x30, 0x69, 0xa5, 0x75, 0x19, 0x7e, 0x14, 0x5f, 0xf8, 0xfc, 0x09, 0xdd, 0xa8, 0x78, 0x9d, 0xca, 0x59, 0x8b, 0xd1, 0x30, 0x01, 0x13}} , {{0xff, 0x76, 0x03, 0xc5, 0x4b, 0x89, 0x99, 0x70, 0x00, 0x59, 0x70, 0x9c, 0xd5, 0xd9, 0x11, 0x89, 0x5a, 0x46, 0xfe, 0xef, 0xdc, 0xd9, 0x55, 0x2b, 0x45, 0xa7, 0xb0, 0x2d, 0xfb, 0x24, 0xc2, 0x29}}}, {{{0x38, 0x06, 0xf8, 0x0b, 0xac, 0x82, 0xc4, 0x97, 0x2b, 0x90, 0xe0, 0xf7, 0xa8, 0xab, 0x6c, 0x08, 0x80, 0x66, 0x90, 0x46, 0xf7, 0x26, 0x2d, 0xf8, 0xf1, 0xc4, 0x6b, 0x4a, 0x82, 0x98, 0x8e, 0x37}} , {{0x8e, 0xb4, 0xee, 0xb8, 0xd4, 0x3f, 0xb2, 0x1b, 0xe0, 0x0a, 0x3d, 0x75, 0x34, 0x28, 0xa2, 0x8e, 0xc4, 0x92, 0x7b, 0xfe, 0x60, 0x6e, 0x6d, 0xb8, 0x31, 0x1d, 0x62, 0x0d, 0x78, 0x14, 0x42, 0x11}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x5e, 0xa8, 0xd8, 0x04, 0x9b, 0x73, 0xc9, 0xc9, 0xdc, 0x0d, 0x73, 0xbf, 0x0a, 0x0a, 0x73, 0xff, 0x18, 0x1f, 0x9c, 0x51, 0xaa, 0xc6, 0xf1, 0x83, 0x25, 0xfd, 0xab, 0xa3, 0x11, 0xd3, 0x01, 0x24}} , {{0x4d, 0xe3, 0x7e, 0x38, 0x62, 0x5e, 0x64, 0xbb, 0x2b, 0x53, 0xb5, 0x03, 0x68, 0xc4, 0xf2, 0x2b, 0x5a, 0x03, 0x32, 0x99, 0x4a, 0x41, 0x9a, 0xe1, 0x1a, 0xae, 0x8c, 0x48, 0xf3, 0x24, 0x32, 0x65}}}, {{{0xe8, 0xdd, 0xad, 0x3a, 0x8c, 0xea, 0xf4, 0xb3, 0xb2, 0xe5, 0x73, 0xf2, 0xed, 0x8b, 0xbf, 0xed, 0xb1, 0x0c, 0x0c, 0xfb, 0x2b, 0xf1, 0x01, 0x48, 0xe8, 0x26, 0x03, 0x8e, 0x27, 0x4d, 0x96, 0x72}} , {{0xc8, 0x09, 0x3b, 0x60, 0xc9, 0x26, 0x4d, 0x7c, 0xf2, 0x9c, 0xd4, 0xa1, 0x3b, 0x26, 0xc2, 0x04, 0x33, 0x44, 0x76, 0x3c, 0x02, 0xbb, 0x11, 0x42, 0x0c, 0x22, 0xb7, 0xc6, 0xe1, 0xac, 0xb4, 0x0e}}}, {{{0x6f, 0x85, 0xe7, 0xef, 0xde, 0x67, 0x30, 0xfc, 0xbf, 0x5a, 0xe0, 0x7b, 0x7a, 0x2a, 0x54, 0x6b, 0x5d, 0x62, 0x85, 0xa1, 0xf8, 0x16, 0x88, 0xec, 0x61, 0xb9, 0x96, 0xb5, 0xef, 0x2d, 0x43, 0x4d}} , {{0x7c, 0x31, 0x33, 0xcc, 0xe4, 0xcf, 0x6c, 0xff, 0x80, 0x47, 0x77, 0xd1, 0xd8, 0xe9, 0x69, 0x97, 0x98, 0x7f, 0x20, 0x57, 0x1d, 0x1d, 0x4f, 0x08, 0x27, 0xc8, 0x35, 0x57, 0x40, 0xc6, 0x21, 0x0c}}}, {{{0xd2, 0x8e, 0x9b, 0xfa, 0x42, 0x8e, 0xdf, 0x8f, 0xc7, 0x86, 0xf9, 0xa4, 0xca, 0x70, 0x00, 0x9d, 0x21, 0xbf, 0xec, 0x57, 0x62, 0x30, 0x58, 0x8c, 0x0d, 0x35, 0xdb, 0x5d, 0x8b, 0x6a, 0xa0, 0x5a}} , {{0xc1, 0x58, 0x7c, 0x0d, 0x20, 0xdd, 0x11, 0x26, 0x5f, 0x89, 0x3b, 0x97, 0x58, 0xf8, 0x8b, 0xe3, 0xdf, 0x32, 0xe2, 0xfc, 0xd8, 0x67, 0xf2, 0xa5, 0x37, 0x1e, 0x6d, 0xec, 0x7c, 0x27, 0x20, 0x79}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xd0, 0xe9, 0xc0, 0xfa, 0x95, 0x45, 0x23, 0x96, 0xf1, 0x2c, 0x79, 0x25, 0x14, 0xce, 0x40, 0x14, 0x44, 0x2c, 0x36, 0x50, 0xd9, 0x63, 0x56, 0xb7, 0x56, 0x3b, 0x9e, 0xa7, 0xef, 0x89, 0xbb, 0x0e}} , {{0xce, 0x7f, 0xdc, 0x0a, 0xcc, 0x82, 0x1c, 0x0a, 0x78, 0x71, 0xe8, 0x74, 0x8d, 0x01, 0x30, 0x0f, 0xa7, 0x11, 0x4c, 0xdf, 0x38, 0xd7, 0xa7, 0x0d, 0xf8, 0x48, 0x52, 0x00, 0x80, 0x7b, 0x5f, 0x0e}}}, {{{0x25, 0x83, 0xe6, 0x94, 0x7b, 0x81, 0xb2, 0x91, 0xae, 0x0e, 0x05, 0xc9, 0xa3, 0x68, 0x2d, 0xd9, 0x88, 0x25, 0x19, 0x2a, 0x61, 0x61, 0x21, 0x97, 0x15, 0xa1, 0x35, 0xa5, 0x46, 0xc8, 0xa2, 0x0e}} , {{0x1b, 0x03, 0x0d, 0x8b, 0x5a, 0x1b, 0x97, 0x4b, 0xf2, 0x16, 0x31, 0x3d, 0x1f, 0x33, 0xa0, 0x50, 0x3a, 0x18, 0xbe, 0x13, 0xa1, 0x76, 0xc1, 0xba, 0x1b, 0xf1, 0x05, 0x7b, 0x33, 0xa8, 0x82, 0x3b}}}, {{{0xba, 0x36, 0x7b, 0x6d, 0xa9, 0xea, 0x14, 0x12, 0xc5, 0xfa, 0x91, 0x00, 0xba, 0x9b, 0x99, 0xcc, 0x56, 0x02, 0xe9, 0xa0, 0x26, 0x40, 0x66, 0x8c, 0xc4, 0xf8, 0x85, 0x33, 0x68, 0xe7, 0x03, 0x20}} , {{0x50, 0x5b, 0xff, 0xa9, 0xb2, 0xf1, 0xf1, 0x78, 0xcf, 0x14, 0xa4, 0xa9, 0xfc, 0x09, 0x46, 0x94, 0x54, 0x65, 0x0d, 0x9c, 0x5f, 0x72, 0x21, 0xe2, 0x97, 0xa5, 0x2d, 0x81, 0xce, 0x4a, 0x5f, 0x79}}}, {{{0x3d, 0x5f, 0x5c, 0xd2, 0xbc, 0x7d, 0x77, 0x0e, 0x2a, 0x6d, 0x22, 0x45, 0x84, 0x06, 0xc4, 0xdd, 0xc6, 0xa6, 0xc6, 0xd7, 0x49, 0xad, 0x6d, 0x87, 0x91, 0x0e, 0x3a, 0x67, 0x1d, 0x2c, 0x1d, 0x56}} , {{0xfe, 0x7a, 0x74, 0xcf, 0xd4, 0xd2, 0xe5, 0x19, 0xde, 0xd0, 0xdb, 0x70, 0x23, 0x69, 0xe6, 0x6d, 0xec, 0xec, 0xcc, 0x09, 0x33, 0x6a, 0x77, 0xdc, 0x6b, 0x22, 0x76, 0x5d, 0x92, 0x09, 0xac, 0x2d}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x23, 0x15, 0x17, 0xeb, 0xd3, 0xdb, 0x12, 0x5e, 0x01, 0xf0, 0x91, 0xab, 0x2c, 0x41, 0xce, 0xac, 0xed, 0x1b, 0x4b, 0x2d, 0xbc, 0xdb, 0x17, 0x66, 0x89, 0x46, 0xad, 0x4b, 0x1e, 0x6f, 0x0b, 0x14}} , {{0x11, 0xce, 0xbf, 0xb6, 0x77, 0x2d, 0x48, 0x22, 0x18, 0x4f, 0xa3, 0x5d, 0x4a, 0xb0, 0x70, 0x12, 0x3e, 0x54, 0xd7, 0xd8, 0x0e, 0x2b, 0x27, 0xdc, 0x53, 0xff, 0xca, 0x8c, 0x59, 0xb3, 0x4e, 0x44}}}, {{{0x07, 0x76, 0x61, 0x0f, 0x66, 0xb2, 0x21, 0x39, 0x7e, 0xc0, 0xec, 0x45, 0x28, 0x82, 0xa1, 0x29, 0x32, 0x44, 0x35, 0x13, 0x5e, 0x61, 0x5e, 0x54, 0xcb, 0x7c, 0xef, 0xf6, 0x41, 0xcf, 0x9f, 0x0a}} , {{0xdd, 0xf9, 0xda, 0x84, 0xc3, 0xe6, 0x8a, 0x9f, 0x24, 0xd2, 0x96, 0x5d, 0x39, 0x6f, 0x58, 0x8c, 0xc1, 0x56, 0x93, 0xab, 0xb5, 0x79, 0x3b, 0xd2, 0xa8, 0x73, 0x16, 0xed, 0xfa, 0xb4, 0x2f, 0x73}}}, {{{0x8b, 0xb1, 0x95, 0xe5, 0x92, 0x50, 0x35, 0x11, 0x76, 0xac, 0xf4, 0x4d, 0x24, 0xc3, 0x32, 0xe6, 0xeb, 0xfe, 0x2c, 0x87, 0xc4, 0xf1, 0x56, 0xc4, 0x75, 0x24, 0x7a, 0x56, 0x85, 0x5a, 0x3a, 0x13}} , {{0x0d, 0x16, 0xac, 0x3c, 0x4a, 0x58, 0x86, 0x3a, 0x46, 0x7f, 0x6c, 0xa3, 0x52, 0x6e, 0x37, 0xe4, 0x96, 0x9c, 0xe9, 0x5c, 0x66, 0x41, 0x67, 0xe4, 0xfb, 0x79, 0x0c, 0x05, 0xf6, 0x64, 0xd5, 0x7c}}}, {{{0x28, 0xc1, 0xe1, 0x54, 0x73, 0xf2, 0xbf, 0x76, 0x74, 0x19, 0x19, 0x1b, 0xe4, 0xb9, 0xa8, 0x46, 0x65, 0x73, 0xf3, 0x77, 0x9b, 0x29, 0x74, 0x5b, 0xc6, 0x89, 0x6c, 0x2c, 0x7c, 0xf8, 0xb3, 0x0f}} , {{0xf7, 0xd5, 0xe9, 0x74, 0x5d, 0xb8, 0x25, 0x16, 0xb5, 0x30, 0xbc, 0x84, 0xc5, 0xf0, 0xad, 0xca, 0x12, 0x28, 0xbc, 0x9d, 0xd4, 0xfa, 0x82, 0xe6, 0xe3, 0xbf, 0xa2, 0x15, 0x2c, 0xd4, 0x34, 0x10}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x61, 0xb1, 0x46, 0xba, 0x0e, 0x31, 0xa5, 0x67, 0x6c, 0x7f, 0xd6, 0xd9, 0x27, 0x85, 0x0f, 0x79, 0x14, 0xc8, 0x6c, 0x2f, 0x5f, 0x5b, 0x9c, 0x35, 0x3d, 0x38, 0x86, 0x77, 0x65, 0x55, 0x6a, 0x7b}} , {{0xd3, 0xb0, 0x3a, 0x66, 0x60, 0x1b, 0x43, 0xf1, 0x26, 0x58, 0x99, 0x09, 0x8f, 0x2d, 0xa3, 0x14, 0x71, 0x85, 0xdb, 0xed, 0xf6, 0x26, 0xd5, 0x61, 0x9a, 0x73, 0xac, 0x0e, 0xea, 0xac, 0xb7, 0x0c}}}, {{{0x5e, 0xf4, 0xe5, 0x17, 0x0e, 0x10, 0x9f, 0xe7, 0x43, 0x5f, 0x67, 0x5c, 0xac, 0x4b, 0xe5, 0x14, 0x41, 0xd2, 0xbf, 0x48, 0xf5, 0x14, 0xb0, 0x71, 0xc6, 0x61, 0xc1, 0xb2, 0x70, 0x58, 0xd2, 0x5a}} , {{0x2d, 0xba, 0x16, 0x07, 0x92, 0x94, 0xdc, 0xbd, 0x50, 0x2b, 0xc9, 0x7f, 0x42, 0x00, 0xba, 0x61, 0xed, 0xf8, 0x43, 0xed, 0xf5, 0xf9, 0x40, 0x60, 0xb2, 0xb0, 0x82, 0xcb, 0xed, 0x75, 0xc7, 0x65}}}, {{{0x80, 0xba, 0x0d, 0x09, 0x40, 0xa7, 0x39, 0xa6, 0x67, 0x34, 0x7e, 0x66, 0xbe, 0x56, 0xfb, 0x53, 0x78, 0xc4, 0x46, 0xe8, 0xed, 0x68, 0x6c, 0x7f, 0xce, 0xe8, 0x9f, 0xce, 0xa2, 0x64, 0x58, 0x53}} , {{0xe8, 0xc1, 0xa9, 0xc2, 0x7b, 0x59, 0x21, 0x33, 0xe2, 0x43, 0x73, 0x2b, 0xac, 0x2d, 0xc1, 0x89, 0x3b, 0x15, 0xe2, 0xd5, 0xc0, 0x97, 0x8a, 0xfd, 0x6f, 0x36, 0x33, 0xb7, 0xb9, 0xc3, 0x88, 0x09}}}, {{{0xd0, 0xb6, 0x56, 0x30, 0x5c, 0xae, 0xb3, 0x75, 0x44, 0xa4, 0x83, 0x51, 0x6e, 0x01, 0x65, 0xef, 0x45, 0x76, 0xe6, 0xf5, 0xa2, 0x0d, 0xd4, 0x16, 0x3b, 0x58, 0x2f, 0xf2, 0x2f, 0x36, 0x18, 0x3f}} , {{0xfd, 0x2f, 0xe0, 0x9b, 0x1e, 0x8c, 0xc5, 0x18, 0xa9, 0xca, 0xd4, 0x2b, 0x35, 0xb6, 0x95, 0x0a, 0x9f, 0x7e, 0xfb, 0xc4, 0xef, 0x88, 0x7b, 0x23, 0x43, 0xec, 0x2f, 0x0d, 0x0f, 0x7a, 0xfc, 0x5c}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x8d, 0xd2, 0xda, 0xc7, 0x44, 0xd6, 0x7a, 0xdb, 0x26, 0x7d, 0x1d, 0xb8, 0xe1, 0xde, 0x9d, 0x7a, 0x7d, 0x17, 0x7e, 0x1c, 0x37, 0x04, 0x8d, 0x2d, 0x7c, 0x5e, 0x18, 0x38, 0x1e, 0xaf, 0xc7, 0x1b}} , {{0x33, 0x48, 0x31, 0x00, 0x59, 0xf6, 0xf2, 0xca, 0x0f, 0x27, 0x1b, 0x63, 0x12, 0x7e, 0x02, 0x1d, 0x49, 0xc0, 0x5d, 0x79, 0x87, 0xef, 0x5e, 0x7a, 0x2f, 0x1f, 0x66, 0x55, 0xd8, 0x09, 0xd9, 0x61}}}, {{{0x54, 0x83, 0x02, 0x18, 0x82, 0x93, 0x99, 0x07, 0xd0, 0xa7, 0xda, 0xd8, 0x75, 0x89, 0xfa, 0xf2, 0xd9, 0xa3, 0xb8, 0x6b, 0x5a, 0x35, 0x28, 0xd2, 0x6b, 0x59, 0xc2, 0xf8, 0x45, 0xe2, 0xbc, 0x06}} , {{0x65, 0xc0, 0xa3, 0x88, 0x51, 0x95, 0xfc, 0x96, 0x94, 0x78, 0xe8, 0x0d, 0x8b, 0x41, 0xc9, 0xc2, 0x58, 0x48, 0x75, 0x10, 0x2f, 0xcd, 0x2a, 0xc9, 0xa0, 0x6d, 0x0f, 0xdd, 0x9c, 0x98, 0x26, 0x3d}}}, {{{0x2f, 0x66, 0x29, 0x1b, 0x04, 0x89, 0xbd, 0x7e, 0xee, 0x6e, 0xdd, 0xb7, 0x0e, 0xef, 0xb0, 0x0c, 0xb4, 0xfc, 0x7f, 0xc2, 0xc9, 0x3a, 0x3c, 0x64, 0xef, 0x45, 0x44, 0xaf, 0x8a, 0x90, 0x65, 0x76}} , {{0xa1, 0x4c, 0x70, 0x4b, 0x0e, 0xa0, 0x83, 0x70, 0x13, 0xa4, 0xaf, 0xb8, 0x38, 0x19, 0x22, 0x65, 0x09, 0xb4, 0x02, 0x4f, 0x06, 0xf8, 0x17, 0xce, 0x46, 0x45, 0xda, 0x50, 0x7c, 0x8a, 0xd1, 0x4e}}}, {{{0xf7, 0xd4, 0x16, 0x6c, 0x4e, 0x95, 0x9d, 0x5d, 0x0f, 0x91, 0x2b, 0x52, 0xfe, 0x5c, 0x34, 0xe5, 0x30, 0xe6, 0xa4, 0x3b, 0xf3, 0xf3, 0x34, 0x08, 0xa9, 0x4a, 0xa0, 0xb5, 0x6e, 0xb3, 0x09, 0x0a}} , {{0x26, 0xd9, 0x5e, 0xa3, 0x0f, 0xeb, 0xa2, 0xf3, 0x20, 0x3b, 0x37, 0xd4, 0xe4, 0x9e, 0xce, 0x06, 0x3d, 0x53, 0xed, 0xae, 0x2b, 0xeb, 0xb6, 0x24, 0x0a, 0x11, 0xa3, 0x0f, 0xd6, 0x7f, 0xa4, 0x3a}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xdb, 0x9f, 0x2c, 0xfc, 0xd6, 0xb2, 0x1e, 0x2e, 0x52, 0x7a, 0x06, 0x87, 0x2d, 0x86, 0x72, 0x2b, 0x6d, 0x90, 0x77, 0x46, 0x43, 0xb5, 0x7a, 0xf8, 0x60, 0x7d, 0x91, 0x60, 0x5b, 0x9d, 0x9e, 0x07}} , {{0x97, 0x87, 0xc7, 0x04, 0x1c, 0x38, 0x01, 0x39, 0x58, 0xc7, 0x85, 0xa3, 0xfc, 0x64, 0x00, 0x64, 0x25, 0xa2, 0xbf, 0x50, 0x94, 0xca, 0x26, 0x31, 0x45, 0x0a, 0x24, 0xd2, 0x51, 0x29, 0x51, 0x16}}}, {{{0x4d, 0x4a, 0xd7, 0x98, 0x71, 0x57, 0xac, 0x7d, 0x8b, 0x37, 0xbd, 0x63, 0xff, 0x87, 0xb1, 0x49, 0x95, 0x20, 0x7c, 0xcf, 0x7c, 0x59, 0xc4, 0x91, 0x9c, 0xef, 0xd0, 0xdb, 0x60, 0x09, 0x9d, 0x46}} , {{0xcb, 0x78, 0x94, 0x90, 0xe4, 0x45, 0xb3, 0xf6, 0xd9, 0xf6, 0x57, 0x74, 0xd5, 0xf8, 0x83, 0x4f, 0x39, 0xc9, 0xbd, 0x88, 0xc2, 0x57, 0x21, 0x1f, 0x24, 0x32, 0x68, 0xf8, 0xc7, 0x21, 0x5f, 0x0b}}}, {{{0x2a, 0x36, 0x68, 0xfc, 0x5f, 0xb6, 0x4f, 0xa5, 0xe3, 0x9d, 0x24, 0x2f, 0xc0, 0x93, 0x61, 0xcf, 0xf8, 0x0a, 0xed, 0xe1, 0xdb, 0x27, 0xec, 0x0e, 0x14, 0x32, 0x5f, 0x8e, 0xa1, 0x62, 0x41, 0x16}} , {{0x95, 0x21, 0x01, 0xce, 0x95, 0x5b, 0x0e, 0x57, 0xc7, 0xb9, 0x62, 0xb5, 0x28, 0xca, 0x11, 0xec, 0xb4, 0x46, 0x06, 0x73, 0x26, 0xff, 0xfb, 0x66, 0x7d, 0xee, 0x5f, 0xb2, 0x56, 0xfd, 0x2a, 0x08}}}, {{{0x92, 0x67, 0x77, 0x56, 0xa1, 0xff, 0xc4, 0xc5, 0x95, 0xf0, 0xe3, 0x3a, 0x0a, 0xca, 0x94, 0x4d, 0x9e, 0x7e, 0x3d, 0xb9, 0x6e, 0xb6, 0xb0, 0xce, 0xa4, 0x30, 0x89, 0x99, 0xe9, 0xad, 0x11, 0x59}} , {{0xf6, 0x48, 0x95, 0xa1, 0x6f, 0x5f, 0xb7, 0xa5, 0xbb, 0x30, 0x00, 0x1c, 0xd2, 0x8a, 0xd6, 0x25, 0x26, 0x1b, 0xb2, 0x0d, 0x37, 0x6a, 0x05, 0xf4, 0x9d, 0x3e, 0x17, 0x2a, 0x43, 0xd2, 0x3a, 0x06}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x32, 0x99, 0x93, 0xd1, 0x9a, 0x72, 0xf3, 0xa9, 0x16, 0xbd, 0xb4, 0x4c, 0xdd, 0xf9, 0xd4, 0xb2, 0x64, 0x9a, 0xd3, 0x05, 0xe4, 0xa3, 0x73, 0x1c, 0xcb, 0x7e, 0x57, 0x67, 0xff, 0x04, 0xb3, 0x10}} , {{0xb9, 0x4b, 0xa4, 0xad, 0xd0, 0x6d, 0x61, 0x23, 0xb4, 0xaf, 0x34, 0xa9, 0xaa, 0x65, 0xec, 0xd9, 0x69, 0xe3, 0x85, 0xcd, 0xcc, 0xe7, 0xb0, 0x9b, 0x41, 0xc1, 0x1c, 0xf9, 0xa0, 0xfa, 0xb7, 0x13}}}, {{{0x04, 0xfd, 0x88, 0x3c, 0x0c, 0xd0, 0x09, 0x52, 0x51, 0x4f, 0x06, 0x19, 0xcc, 0xc3, 0xbb, 0xde, 0x80, 0xc5, 0x33, 0xbc, 0xf9, 0xf3, 0x17, 0x36, 0xdd, 0xc6, 0xde, 0xe8, 0x9b, 0x5d, 0x79, 0x1b}} , {{0x65, 0x0a, 0xbe, 0x51, 0x57, 0xad, 0x50, 0x79, 0x08, 0x71, 0x9b, 0x07, 0x95, 0x8f, 0xfb, 0xae, 0x4b, 0x38, 0xba, 0xcf, 0x53, 0x2a, 0x86, 0x1e, 0xc0, 0x50, 0x5c, 0x67, 0x1b, 0xf6, 0x87, 0x6c}}}, {{{0x4f, 0x00, 0xb2, 0x66, 0x55, 0xed, 0x4a, 0xed, 0x8d, 0xe1, 0x66, 0x18, 0xb2, 0x14, 0x74, 0x8d, 0xfd, 0x1a, 0x36, 0x0f, 0x26, 0x5c, 0x8b, 0x89, 0xf3, 0xab, 0xf2, 0xf3, 0x24, 0x67, 0xfd, 0x70}} , {{0xfd, 0x4e, 0x2a, 0xc1, 0x3a, 0xca, 0x8f, 0x00, 0xd8, 0xec, 0x74, 0x67, 0xef, 0x61, 0xe0, 0x28, 0xd0, 0x96, 0xf4, 0x48, 0xde, 0x81, 0xe3, 0xef, 0xdc, 0xaa, 0x7d, 0xf3, 0xb6, 0x55, 0xa6, 0x65}}}, {{{0xeb, 0xcb, 0xc5, 0x70, 0x91, 0x31, 0x10, 0x93, 0x0d, 0xc8, 0xd0, 0xef, 0x62, 0xe8, 0x6f, 0x82, 0xe3, 0x69, 0x3d, 0x91, 0x7f, 0x31, 0xe1, 0x26, 0x35, 0x3c, 0x4a, 0x2f, 0xab, 0xc4, 0x9a, 0x5e}} , {{0xab, 0x1b, 0xb5, 0xe5, 0x2b, 0xc3, 0x0e, 0x29, 0xb0, 0xd0, 0x73, 0xe6, 0x4f, 0x64, 0xf2, 0xbc, 0xe4, 0xe4, 0xe1, 0x9a, 0x52, 0x33, 0x2f, 0xbd, 0xcc, 0x03, 0xee, 0x8a, 0xfa, 0x00, 0x5f, 0x50}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xf6, 0xdb, 0x0d, 0x22, 0x3d, 0xb5, 0x14, 0x75, 0x31, 0xf0, 0x81, 0xe2, 0xb9, 0x37, 0xa2, 0xa9, 0x84, 0x11, 0x9a, 0x07, 0xb5, 0x53, 0x89, 0x78, 0xa9, 0x30, 0x27, 0xa1, 0xf1, 0x4e, 0x5c, 0x2e}} , {{0x8b, 0x00, 0x54, 0xfb, 0x4d, 0xdc, 0xcb, 0x17, 0x35, 0x40, 0xff, 0xb7, 0x8c, 0xfe, 0x4a, 0xe4, 0x4e, 0x99, 0x4e, 0xa8, 0x74, 0x54, 0x5d, 0x5c, 0x96, 0xa3, 0x12, 0x55, 0x36, 0x31, 0x17, 0x5c}}}, {{{0xce, 0x24, 0xef, 0x7b, 0x86, 0xf2, 0x0f, 0x77, 0xe8, 0x5c, 0x7d, 0x87, 0x38, 0x2d, 0xef, 0xaf, 0xf2, 0x8c, 0x72, 0x2e, 0xeb, 0xb6, 0x55, 0x4b, 0x6e, 0xf1, 0x4e, 0x8a, 0x0e, 0x9a, 0x6c, 0x4c}} , {{0x25, 0xea, 0x86, 0xc2, 0xd1, 0x4f, 0xb7, 0x3e, 0xa8, 0x5c, 0x8d, 0x66, 0x81, 0x25, 0xed, 0xc5, 0x4c, 0x05, 0xb9, 0xd8, 0xd6, 0x70, 0xbe, 0x73, 0x82, 0xe8, 0xa1, 0xe5, 0x1e, 0x71, 0xd5, 0x26}}}, {{{0x4e, 0x6d, 0xc3, 0xa7, 0x4f, 0x22, 0x45, 0x26, 0xa2, 0x7e, 0x16, 0xf7, 0xf7, 0x63, 0xdc, 0x86, 0x01, 0x2a, 0x71, 0x38, 0x5c, 0x33, 0xc3, 0xce, 0x30, 0xff, 0xf9, 0x2c, 0x91, 0x71, 0x8a, 0x72}} , {{0x8c, 0x44, 0x09, 0x28, 0xd5, 0x23, 0xc9, 0x8f, 0xf3, 0x84, 0x45, 0xc6, 0x9a, 0x5e, 0xff, 0xd2, 0xc7, 0x57, 0x93, 0xa3, 0xc1, 0x69, 0xdd, 0x62, 0x0f, 0xda, 0x5c, 0x30, 0x59, 0x5d, 0xe9, 0x4c}}}, {{{0x92, 0x7e, 0x50, 0x27, 0x72, 0xd7, 0x0c, 0xd6, 0x69, 0x96, 0x81, 0x35, 0x84, 0x94, 0x35, 0x8b, 0x6c, 0xaa, 0x62, 0x86, 0x6e, 0x1c, 0x15, 0xf3, 0x6c, 0xb3, 0xff, 0x65, 0x1b, 0xa2, 0x9b, 0x59}} , {{0xe2, 0xa9, 0x65, 0x88, 0xc4, 0x50, 0xfa, 0xbb, 0x3b, 0x6e, 0x5f, 0x44, 0x01, 0xca, 0x97, 0xd4, 0xdd, 0xf6, 0xcd, 0x3f, 0x3f, 0xe5, 0x97, 0x67, 0x2b, 0x8c, 0x66, 0x0f, 0x35, 0x9b, 0xf5, 0x07}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xf1, 0x59, 0x27, 0xd8, 0xdb, 0x5a, 0x11, 0x5e, 0x82, 0xf3, 0x38, 0xff, 0x1c, 0xed, 0xfe, 0x3f, 0x64, 0x54, 0x3f, 0x7f, 0xd1, 0x81, 0xed, 0xef, 0x65, 0xc5, 0xcb, 0xfd, 0xe1, 0x80, 0xcd, 0x11}} , {{0xe0, 0xdb, 0x22, 0x28, 0xe6, 0xff, 0x61, 0x9d, 0x41, 0x14, 0x2d, 0x3b, 0x26, 0x22, 0xdf, 0xf1, 0x34, 0x81, 0xe9, 0x45, 0xee, 0x0f, 0x98, 0x8b, 0xa6, 0x3f, 0xef, 0xf7, 0x43, 0x19, 0xf1, 0x43}}}, {{{0xee, 0xf3, 0x00, 0xa1, 0x50, 0xde, 0xc0, 0xb6, 0x01, 0xe3, 0x8c, 0x3c, 0x4d, 0x31, 0xd2, 0xb0, 0x58, 0xcd, 0xed, 0x10, 0x4a, 0x7a, 0xef, 0x80, 0xa9, 0x19, 0x32, 0xf3, 0xd8, 0x33, 0x8c, 0x06}} , {{0xcb, 0x7d, 0x4f, 0xff, 0x30, 0xd8, 0x12, 0x3b, 0x39, 0x1c, 0x06, 0xf9, 0x4c, 0x34, 0x35, 0x71, 0xb5, 0x16, 0x94, 0x67, 0xdf, 0xee, 0x11, 0xde, 0xa4, 0x1d, 0x88, 0x93, 0x35, 0xa9, 0x32, 0x10}}}, {{{0xe9, 0xc3, 0xbc, 0x7b, 0x5c, 0xfc, 0xb2, 0xf9, 0xc9, 0x2f, 0xe5, 0xba, 0x3a, 0x0b, 0xab, 0x64, 0x38, 0x6f, 0x5b, 0x4b, 0x93, 0xda, 0x64, 0xec, 0x4d, 0x3d, 0xa0, 0xf5, 0xbb, 0xba, 0x47, 0x48}} , {{0x60, 0xbc, 0x45, 0x1f, 0x23, 0xa2, 0x3b, 0x70, 0x76, 0xe6, 0x97, 0x99, 0x4f, 0x77, 0x54, 0x67, 0x30, 0x9a, 0xe7, 0x66, 0xd6, 0xcd, 0x2e, 0x51, 0x24, 0x2c, 0x42, 0x4a, 0x11, 0xfe, 0x6f, 0x7e}}}, {{{0x87, 0xc0, 0xb1, 0xf0, 0xa3, 0x6f, 0x0c, 0x93, 0xa9, 0x0a, 0x72, 0xef, 0x5c, 0xbe, 0x65, 0x35, 0xa7, 0x6a, 0x4e, 0x2c, 0xbf, 0x21, 0x23, 0xe8, 0x2f, 0x97, 0xc7, 0x3e, 0xc8, 0x17, 0xac, 0x1e}} , {{0x7b, 0xef, 0x21, 0xe5, 0x40, 0xcc, 0x1e, 0xdc, 0xd6, 0xbd, 0x97, 0x7a, 0x7c, 0x75, 0x86, 0x7a, 0x25, 0x5a, 0x6e, 0x7c, 0xe5, 0x51, 0x3c, 0x1b, 0x5b, 0x82, 0x9a, 0x07, 0x60, 0xa1, 0x19, 0x04}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x96, 0x88, 0xa6, 0xab, 0x8f, 0xe3, 0x3a, 0x49, 0xf8, 0xfe, 0x34, 0xe7, 0x6a, 0xb2, 0xfe, 0x40, 0x26, 0x74, 0x57, 0x4c, 0xf6, 0xd4, 0x99, 0xce, 0x5d, 0x7b, 0x2f, 0x67, 0xd6, 0x5a, 0xe4, 0x4e}} , {{0x5c, 0x82, 0xb3, 0xbd, 0x55, 0x25, 0xf6, 0x6a, 0x93, 0xa4, 0x02, 0xc6, 0x7d, 0x5c, 0xb1, 0x2b, 0x5b, 0xff, 0xfb, 0x56, 0xf8, 0x01, 0x41, 0x90, 0xc6, 0xb6, 0xac, 0x4f, 0xfe, 0xa7, 0x41, 0x70}}}, {{{0xdb, 0xfa, 0x9b, 0x2c, 0xd4, 0x23, 0x67, 0x2c, 0x8a, 0x63, 0x6c, 0x07, 0x26, 0x48, 0x4f, 0xc2, 0x03, 0xd2, 0x53, 0x20, 0x28, 0xed, 0x65, 0x71, 0x47, 0xa9, 0x16, 0x16, 0x12, 0xbc, 0x28, 0x33}} , {{0x39, 0xc0, 0xfa, 0xfa, 0xcd, 0x33, 0x43, 0xc7, 0x97, 0x76, 0x9b, 0x93, 0x91, 0x72, 0xeb, 0xc5, 0x18, 0x67, 0x4c, 0x11, 0xf0, 0xf4, 0xe5, 0x73, 0xb2, 0x5c, 0x1b, 0xc2, 0x26, 0x3f, 0xbf, 0x2b}}}, {{{0x86, 0xe6, 0x8c, 0x1d, 0xdf, 0xca, 0xfc, 0xd5, 0xf8, 0x3a, 0xc3, 0x44, 0x72, 0xe6, 0x78, 0x9d, 0x2b, 0x97, 0xf8, 0x28, 0x45, 0xb4, 0x20, 0xc9, 0x2a, 0x8c, 0x67, 0xaa, 0x11, 0xc5, 0x5b, 0x2f}} , {{0x17, 0x0f, 0x86, 0x52, 0xd7, 0x9d, 0xc3, 0x44, 0x51, 0x76, 0x32, 0x65, 0xb4, 0x37, 0x81, 0x99, 0x46, 0x37, 0x62, 0xed, 0xcf, 0x64, 0x9d, 0x72, 0x40, 0x7a, 0x4c, 0x0b, 0x76, 0x2a, 0xfb, 0x56}}}, {{{0x33, 0xa7, 0x90, 0x7c, 0xc3, 0x6f, 0x17, 0xa5, 0xa0, 0x67, 0x72, 0x17, 0xea, 0x7e, 0x63, 0x14, 0x83, 0xde, 0xc1, 0x71, 0x2d, 0x41, 0x32, 0x7a, 0xf3, 0xd1, 0x2b, 0xd8, 0x2a, 0xa6, 0x46, 0x36}} , {{0xac, 0xcc, 0x6b, 0x7c, 0xf9, 0xb8, 0x8b, 0x08, 0x5c, 0xd0, 0x7d, 0x8f, 0x73, 0xea, 0x20, 0xda, 0x86, 0xca, 0x00, 0xc7, 0xad, 0x73, 0x4d, 0xe9, 0xe8, 0xa9, 0xda, 0x1f, 0x03, 0x06, 0xdd, 0x24}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x9c, 0xb2, 0x61, 0x0a, 0x98, 0x2a, 0xa5, 0xd7, 0xee, 0xa9, 0xac, 0x65, 0xcb, 0x0a, 0x1e, 0xe2, 0xbe, 0xdc, 0x85, 0x59, 0x0f, 0x9c, 0xa6, 0x57, 0x34, 0xa5, 0x87, 0xeb, 0x7b, 0x1e, 0x0c, 0x3c}} , {{0x2f, 0xbd, 0x84, 0x63, 0x0d, 0xb5, 0xa0, 0xf0, 0x4b, 0x9e, 0x93, 0xc6, 0x34, 0x9a, 0x34, 0xff, 0x73, 0x19, 0x2f, 0x6e, 0x54, 0x45, 0x2c, 0x92, 0x31, 0x76, 0x34, 0xf1, 0xb2, 0x26, 0xe8, 0x74}}}, {{{0x0a, 0x67, 0x90, 0x6d, 0x0c, 0x4c, 0xcc, 0xc0, 0xe6, 0xbd, 0xa7, 0x5e, 0x55, 0x8c, 0xcd, 0x58, 0x9b, 0x11, 0xa2, 0xbb, 0x4b, 0xb1, 0x43, 0x04, 0x3c, 0x55, 0xed, 0x23, 0xfe, 0xcd, 0xb1, 0x53}} , {{0x05, 0xfb, 0x75, 0xf5, 0x01, 0xaf, 0x38, 0x72, 0x58, 0xfc, 0x04, 0x29, 0x34, 0x7a, 0x67, 0xa2, 0x08, 0x50, 0x6e, 0xd0, 0x2b, 0x73, 0xd5, 0xb8, 0xe4, 0x30, 0x96, 0xad, 0x45, 0xdf, 0xa6, 0x5c}}}, {{{0x0d, 0x88, 0x1a, 0x90, 0x7e, 0xdc, 0xd8, 0xfe, 0xc1, 0x2f, 0x5d, 0x67, 0xee, 0x67, 0x2f, 0xed, 0x6f, 0x55, 0x43, 0x5f, 0x87, 0x14, 0x35, 0x42, 0xd3, 0x75, 0xae, 0xd5, 0xd3, 0x85, 0x1a, 0x76}} , {{0x87, 0xc8, 0xa0, 0x6e, 0xe1, 0xb0, 0xad, 0x6a, 0x4a, 0x34, 0x71, 0xed, 0x7c, 0xd6, 0x44, 0x03, 0x65, 0x4a, 0x5c, 0x5c, 0x04, 0xf5, 0x24, 0x3f, 0xb0, 0x16, 0x5e, 0x8c, 0xb2, 0xd2, 0xc5, 0x20}}}, {{{0x98, 0x83, 0xc2, 0x37, 0xa0, 0x41, 0xa8, 0x48, 0x5c, 0x5f, 0xbf, 0xc8, 0xfa, 0x24, 0xe0, 0x59, 0x2c, 0xbd, 0xf6, 0x81, 0x7e, 0x88, 0xe6, 0xca, 0x04, 0xd8, 0x5d, 0x60, 0xbb, 0x74, 0xa7, 0x0b}} , {{0x21, 0x13, 0x91, 0xbf, 0x77, 0x7a, 0x33, 0xbc, 0xe9, 0x07, 0x39, 0x0a, 0xdd, 0x7d, 0x06, 0x10, 0x9a, 0xee, 0x47, 0x73, 0x1b, 0x15, 0x5a, 0xfb, 0xcd, 0x4d, 0xd0, 0xd2, 0x3a, 0x01, 0xba, 0x54}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x48, 0xd5, 0x39, 0x4a, 0x0b, 0x20, 0x6a, 0x43, 0xa0, 0x07, 0x82, 0x5e, 0x49, 0x7c, 0xc9, 0x47, 0xf1, 0x7c, 0x37, 0xb9, 0x23, 0xef, 0x6b, 0x46, 0x45, 0x8c, 0x45, 0x76, 0xdf, 0x14, 0x6b, 0x6e}} , {{0x42, 0xc9, 0xca, 0x29, 0x4c, 0x76, 0x37, 0xda, 0x8a, 0x2d, 0x7c, 0x3a, 0x58, 0xf2, 0x03, 0xb4, 0xb5, 0xb9, 0x1a, 0x13, 0x2d, 0xde, 0x5f, 0x6b, 0x9d, 0xba, 0x52, 0xc9, 0x5d, 0xb3, 0xf3, 0x30}}}, {{{0x4c, 0x6f, 0xfe, 0x6b, 0x0c, 0x62, 0xd7, 0x48, 0x71, 0xef, 0xb1, 0x85, 0x79, 0xc0, 0xed, 0x24, 0xb1, 0x08, 0x93, 0x76, 0x8e, 0xf7, 0x38, 0x8e, 0xeb, 0xfe, 0x80, 0x40, 0xaf, 0x90, 0x64, 0x49}} , {{0x4a, 0x88, 0xda, 0xc1, 0x98, 0x44, 0x3c, 0x53, 0x4e, 0xdb, 0x4b, 0xb9, 0x12, 0x5f, 0xcd, 0x08, 0x04, 0xef, 0x75, 0xe7, 0xb1, 0x3a, 0xe5, 0x07, 0xfa, 0xca, 0x65, 0x7b, 0x72, 0x10, 0x64, 0x7f}}}, {{{0x3d, 0x81, 0xf0, 0xeb, 0x16, 0xfd, 0x58, 0x33, 0x8d, 0x7c, 0x1a, 0xfb, 0x20, 0x2c, 0x8a, 0xee, 0x90, 0xbb, 0x33, 0x6d, 0x45, 0xe9, 0x8e, 0x99, 0x85, 0xe1, 0x08, 0x1f, 0xc5, 0xf1, 0xb5, 0x46}} , {{0xe4, 0xe7, 0x43, 0x4b, 0xa0, 0x3f, 0x2b, 0x06, 0xba, 0x17, 0xae, 0x3d, 0xe6, 0xce, 0xbd, 0xb8, 0xed, 0x74, 0x11, 0x35, 0xec, 0x96, 0xfe, 0x31, 0xe3, 0x0e, 0x7a, 0x4e, 0xc9, 0x1d, 0xcb, 0x20}}}, {{{0xe0, 0x67, 0xe9, 0x7b, 0xdb, 0x96, 0x5c, 0xb0, 0x32, 0xd0, 0x59, 0x31, 0x90, 0xdc, 0x92, 0x97, 0xac, 0x09, 0x38, 0x31, 0x0f, 0x7e, 0xd6, 0x5d, 0xd0, 0x06, 0xb6, 0x1f, 0xea, 0xf0, 0x5b, 0x07}} , {{0x81, 0x9f, 0xc7, 0xde, 0x6b, 0x41, 0x22, 0x35, 0x14, 0x67, 0x77, 0x3e, 0x90, 0x81, 0xb0, 0xd9, 0x85, 0x4c, 0xca, 0x9b, 0x3f, 0x04, 0x59, 0xd6, 0xaa, 0x17, 0xc3, 0x88, 0x34, 0x37, 0xba, 0x43}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x4c, 0xb6, 0x69, 0xc8, 0x81, 0x95, 0x94, 0x33, 0x92, 0x34, 0xe9, 0x3c, 0x84, 0x0d, 0x3d, 0x5a, 0x37, 0x9c, 0x22, 0xa0, 0xaa, 0x65, 0xce, 0xb4, 0xc2, 0x2d, 0x66, 0x67, 0x02, 0xff, 0x74, 0x10}} , {{0x22, 0xb0, 0xd5, 0xe6, 0xc7, 0xef, 0xb1, 0xa7, 0x13, 0xda, 0x60, 0xb4, 0x80, 0xc1, 0x42, 0x7d, 0x10, 0x70, 0x97, 0x04, 0x4d, 0xda, 0x23, 0x89, 0xc2, 0x0e, 0x68, 0xcb, 0xde, 0xe0, 0x9b, 0x29}}}, {{{0x33, 0xfe, 0x42, 0x2a, 0x36, 0x2b, 0x2e, 0x36, 0x64, 0x5c, 0x8b, 0xcc, 0x81, 0x6a, 0x15, 0x08, 0xa1, 0x27, 0xe8, 0x57, 0xe5, 0x78, 0x8e, 0xf2, 0x58, 0x19, 0x12, 0x42, 0xae, 0xc4, 0x63, 0x3e}} , {{0x78, 0x96, 0x9c, 0xa7, 0xca, 0x80, 0xae, 0x02, 0x85, 0xb1, 0x7c, 0x04, 0x5c, 0xc1, 0x5b, 0x26, 0xc1, 0xba, 0xed, 0xa5, 0x59, 0x70, 0x85, 0x8c, 0x8c, 0xe8, 0x87, 0xac, 0x6a, 0x28, 0x99, 0x35}}}, {{{0x9f, 0x04, 0x08, 0x28, 0xbe, 0x87, 0xda, 0x80, 0x28, 0x38, 0xde, 0x9f, 0xcd, 0xe4, 0xe3, 0x62, 0xfb, 0x2e, 0x46, 0x8d, 0x01, 0xb3, 0x06, 0x51, 0xd4, 0x19, 0x3b, 0x11, 0xfa, 0xe2, 0xad, 0x1e}} , {{0xa0, 0x20, 0x99, 0x69, 0x0a, 0xae, 0xa3, 0x70, 0x4e, 0x64, 0x80, 0xb7, 0x85, 0x9c, 0x87, 0x54, 0x43, 0x43, 0x55, 0x80, 0x6d, 0x8d, 0x7c, 0xa9, 0x64, 0xca, 0x6c, 0x2e, 0x21, 0xd8, 0xc8, 0x6c}}}, {{{0x91, 0x4a, 0x07, 0xad, 0x08, 0x75, 0xc1, 0x4f, 0xa4, 0xb2, 0xc3, 0x6f, 0x46, 0x3e, 0xb1, 0xce, 0x52, 0xab, 0x67, 0x09, 0x54, 0x48, 0x6b, 0x6c, 0xd7, 0x1d, 0x71, 0x76, 0xcb, 0xff, 0xdd, 0x31}} , {{0x36, 0x88, 0xfa, 0xfd, 0xf0, 0x36, 0x6f, 0x07, 0x74, 0x88, 0x50, 0xd0, 0x95, 0x38, 0x4a, 0x48, 0x2e, 0x07, 0x64, 0x97, 0x11, 0x76, 0x01, 0x1a, 0x27, 0x4d, 0x8e, 0x25, 0x9a, 0x9b, 0x1c, 0x22}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xbe, 0x57, 0xbd, 0x0e, 0x0f, 0xac, 0x5e, 0x76, 0xa3, 0x71, 0xad, 0x2b, 0x10, 0x45, 0x02, 0xec, 0x59, 0xd5, 0x5d, 0xa9, 0x44, 0xcc, 0x25, 0x4c, 0xb3, 0x3c, 0x5b, 0x69, 0x07, 0x55, 0x26, 0x6b}} , {{0x30, 0x6b, 0xd4, 0xa7, 0x51, 0x29, 0xe3, 0xf9, 0x7a, 0x75, 0x2a, 0x82, 0x2f, 0xd6, 0x1d, 0x99, 0x2b, 0x80, 0xd5, 0x67, 0x1e, 0x15, 0x9d, 0xca, 0xfd, 0xeb, 0xac, 0x97, 0x35, 0x09, 0x7f, 0x3f}}}, {{{0x35, 0x0d, 0x34, 0x0a, 0xb8, 0x67, 0x56, 0x29, 0x20, 0xf3, 0x19, 0x5f, 0xe2, 0x83, 0x42, 0x73, 0x53, 0xa8, 0xc5, 0x02, 0x19, 0x33, 0xb4, 0x64, 0xbd, 0xc3, 0x87, 0x8c, 0xd7, 0x76, 0xed, 0x25}} , {{0x47, 0x39, 0x37, 0x76, 0x0d, 0x1d, 0x0c, 0xf5, 0x5a, 0x6d, 0x43, 0x88, 0x99, 0x15, 0xb4, 0x52, 0x0f, 0x2a, 0xb3, 0xb0, 0x3f, 0xa6, 0xb3, 0x26, 0xb3, 0xc7, 0x45, 0xf5, 0x92, 0x5f, 0x9b, 0x17}}}, {{{0x9d, 0x23, 0xbd, 0x15, 0xfe, 0x52, 0x52, 0x15, 0x26, 0x79, 0x86, 0xba, 0x06, 0x56, 0x66, 0xbb, 0x8c, 0x2e, 0x10, 0x11, 0xd5, 0x4a, 0x18, 0x52, 0xda, 0x84, 0x44, 0xf0, 0x3e, 0xe9, 0x8c, 0x35}} , {{0xad, 0xa0, 0x41, 0xec, 0xc8, 0x4d, 0xb9, 0xd2, 0x6e, 0x96, 0x4e, 0x5b, 0xc5, 0xc2, 0xa0, 0x1b, 0xcf, 0x0c, 0xbf, 0x17, 0x66, 0x57, 0xc1, 0x17, 0x90, 0x45, 0x71, 0xc2, 0xe1, 0x24, 0xeb, 0x27}}}, {{{0x2c, 0xb9, 0x42, 0xa4, 0xaf, 0x3b, 0x42, 0x0e, 0xc2, 0x0f, 0xf2, 0xea, 0x83, 0xaf, 0x9a, 0x13, 0x17, 0xb0, 0xbd, 0x89, 0x17, 0xe3, 0x72, 0xcb, 0x0e, 0x76, 0x7e, 0x41, 0x63, 0x04, 0x88, 0x71}} , {{0x75, 0x78, 0x38, 0x86, 0x57, 0xdd, 0x9f, 0xee, 0x54, 0x70, 0x65, 0xbf, 0xf1, 0x2c, 0xe0, 0x39, 0x0d, 0xe3, 0x89, 0xfd, 0x8e, 0x93, 0x4f, 0x43, 0xdc, 0xd5, 0x5b, 0xde, 0xf9, 0x98, 0xe5, 0x7b}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xe7, 0x3b, 0x65, 0x11, 0xdf, 0xb2, 0xf2, 0x63, 0x94, 0x12, 0x6f, 0x5c, 0x9e, 0x77, 0xc1, 0xb6, 0xd8, 0xab, 0x58, 0x7a, 0x1d, 0x95, 0x73, 0xdd, 0xe7, 0xe3, 0x6f, 0xf2, 0x03, 0x1d, 0xdb, 0x76}} , {{0xae, 0x06, 0x4e, 0x2c, 0x52, 0x1b, 0xbc, 0x5a, 0x5a, 0xa5, 0xbe, 0x27, 0xbd, 0xeb, 0xe1, 0x14, 0x17, 0x68, 0x26, 0x07, 0x03, 0xd1, 0x18, 0x0b, 0xdf, 0xf1, 0x06, 0x5c, 0xa6, 0x1b, 0xb9, 0x24}}}, {{{0xc5, 0x66, 0x80, 0x13, 0x0e, 0x48, 0x8c, 0x87, 0x31, 0x84, 0xb4, 0x60, 0xed, 0xc5, 0xec, 0xb6, 0xc5, 0x05, 0x33, 0x5f, 0x2f, 0x7d, 0x40, 0xb6, 0x32, 0x1d, 0x38, 0x74, 0x1b, 0xf1, 0x09, 0x3d}} , {{0xd4, 0x69, 0x82, 0xbc, 0x8d, 0xf8, 0x34, 0x36, 0x75, 0x55, 0x18, 0x55, 0x58, 0x3c, 0x79, 0xaf, 0x26, 0x80, 0xab, 0x9b, 0x95, 0x00, 0xf1, 0xcb, 0xda, 0xc1, 0x9f, 0xf6, 0x2f, 0xa2, 0xf4, 0x45}}}, {{{0x17, 0xbe, 0xeb, 0x85, 0xed, 0x9e, 0xcd, 0x56, 0xf5, 0x17, 0x45, 0x42, 0xb4, 0x1f, 0x44, 0x4c, 0x05, 0x74, 0x15, 0x47, 0x00, 0xc6, 0x6a, 0x3d, 0x24, 0x09, 0x0d, 0x58, 0xb1, 0x42, 0xd7, 0x04}} , {{0x8d, 0xbd, 0xa3, 0xc4, 0x06, 0x9b, 0x1f, 0x90, 0x58, 0x60, 0x74, 0xb2, 0x00, 0x3b, 0x3c, 0xd2, 0xda, 0x82, 0xbb, 0x10, 0x90, 0x69, 0x92, 0xa9, 0xb4, 0x30, 0x81, 0xe3, 0x7c, 0xa8, 0x89, 0x45}}}, {{{0x3f, 0xdc, 0x05, 0xcb, 0x41, 0x3c, 0xc8, 0x23, 0x04, 0x2c, 0x38, 0x99, 0xe3, 0x68, 0x55, 0xf9, 0xd3, 0x32, 0xc7, 0xbf, 0xfa, 0xd4, 0x1b, 0x5d, 0xde, 0xdc, 0x10, 0x42, 0xc0, 0x42, 0xd9, 0x75}} , {{0x2d, 0xab, 0x35, 0x4e, 0x87, 0xc4, 0x65, 0x97, 0x67, 0x24, 0xa4, 0x47, 0xad, 0x3f, 0x8e, 0xf3, 0xcb, 0x31, 0x17, 0x77, 0xc5, 0xe2, 0xd7, 0x8f, 0x3c, 0xc1, 0xcd, 0x56, 0x48, 0xc1, 0x6c, 0x69}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x14, 0xae, 0x5f, 0x88, 0x7b, 0xa5, 0x90, 0xdf, 0x10, 0xb2, 0x8b, 0x5e, 0x24, 0x17, 0xc3, 0xa3, 0xd4, 0x0f, 0x92, 0x61, 0x1a, 0x19, 0x5a, 0xad, 0x76, 0xbd, 0xd8, 0x1c, 0xdd, 0xe0, 0x12, 0x6d}} , {{0x8e, 0xbd, 0x70, 0x8f, 0x02, 0xa3, 0x24, 0x4d, 0x5a, 0x67, 0xc4, 0xda, 0xf7, 0x20, 0x0f, 0x81, 0x5b, 0x7a, 0x05, 0x24, 0x67, 0x83, 0x0b, 0x2a, 0x80, 0xe7, 0xfd, 0x74, 0x4b, 0x9e, 0x5c, 0x0d}}}, {{{0x94, 0xd5, 0x5f, 0x1f, 0xa2, 0xfb, 0xeb, 0xe1, 0x07, 0x34, 0xf8, 0x20, 0xad, 0x81, 0x30, 0x06, 0x2d, 0xa1, 0x81, 0x95, 0x36, 0xcf, 0x11, 0x0b, 0xaf, 0xc1, 0x2b, 0x9a, 0x6c, 0x55, 0xc1, 0x16}} , {{0x36, 0x4f, 0xf1, 0x5e, 0x74, 0x35, 0x13, 0x28, 0xd7, 0x11, 0xcf, 0xb8, 0xde, 0x93, 0xb3, 0x05, 0xb8, 0xb5, 0x73, 0xe9, 0xeb, 0xad, 0x19, 0x1e, 0x89, 0x0f, 0x8b, 0x15, 0xd5, 0x8c, 0xe3, 0x23}}}, {{{0x33, 0x79, 0xe7, 0x18, 0xe6, 0x0f, 0x57, 0x93, 0x15, 0xa0, 0xa7, 0xaa, 0xc4, 0xbf, 0x4f, 0x30, 0x74, 0x95, 0x5e, 0x69, 0x4a, 0x5b, 0x45, 0xe4, 0x00, 0xeb, 0x23, 0x74, 0x4c, 0xdf, 0x6b, 0x45}} , {{0x97, 0x29, 0x6c, 0xc4, 0x42, 0x0b, 0xdd, 0xc0, 0x29, 0x5c, 0x9b, 0x34, 0x97, 0xd0, 0xc7, 0x79, 0x80, 0x63, 0x74, 0xe4, 0x8e, 0x37, 0xb0, 0x2b, 0x7c, 0xe8, 0x68, 0x6c, 0xc3, 0x82, 0x97, 0x57}}}, {{{0x22, 0xbe, 0x83, 0xb6, 0x4b, 0x80, 0x6b, 0x43, 0x24, 0x5e, 0xef, 0x99, 0x9b, 0xa8, 0xfc, 0x25, 0x8d, 0x3b, 0x03, 0x94, 0x2b, 0x3e, 0xe7, 0x95, 0x76, 0x9b, 0xcc, 0x15, 0xdb, 0x32, 0xe6, 0x66}} , {{0x84, 0xf0, 0x4a, 0x13, 0xa6, 0xd6, 0xfa, 0x93, 0x46, 0x07, 0xf6, 0x7e, 0x5c, 0x6d, 0x5e, 0xf6, 0xa6, 0xe7, 0x48, 0xf0, 0x06, 0xea, 0xff, 0x90, 0xc1, 0xcc, 0x4c, 0x19, 0x9c, 0x3c, 0x4e, 0x53}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x2a, 0x50, 0xe3, 0x07, 0x15, 0x59, 0xf2, 0x8b, 0x81, 0xf2, 0xf3, 0xd3, 0x6c, 0x99, 0x8c, 0x70, 0x67, 0xec, 0xcc, 0xee, 0x9e, 0x59, 0x45, 0x59, 0x7d, 0x47, 0x75, 0x69, 0xf5, 0x24, 0x93, 0x5d}} , {{0x6a, 0x4f, 0x1b, 0xbe, 0x6b, 0x30, 0xcf, 0x75, 0x46, 0xe3, 0x7b, 0x9d, 0xfc, 0xcd, 0xd8, 0x5c, 0x1f, 0xb4, 0xc8, 0xe2, 0x24, 0xec, 0x1a, 0x28, 0x05, 0x32, 0x57, 0xfd, 0x3c, 0x5a, 0x98, 0x10}}}, {{{0xa3, 0xdb, 0xf7, 0x30, 0xd8, 0xc2, 0x9a, 0xe1, 0xd3, 0xce, 0x22, 0xe5, 0x80, 0x1e, 0xd9, 0xe4, 0x1f, 0xab, 0xc0, 0x71, 0x1a, 0x86, 0x0e, 0x27, 0x99, 0x5b, 0xfa, 0x76, 0x99, 0xb0, 0x08, 0x3c}} , {{0x2a, 0x93, 0xd2, 0x85, 0x1b, 0x6a, 0x5d, 0xa6, 0xee, 0xd1, 0xd1, 0x33, 0xbd, 0x6a, 0x36, 0x73, 0x37, 0x3a, 0x44, 0xb4, 0xec, 0xa9, 0x7a, 0xde, 0x83, 0x40, 0xd7, 0xdf, 0x28, 0xba, 0xa2, 0x30}}}, {{{0xd3, 0xb5, 0x6d, 0x05, 0x3f, 0x9f, 0xf3, 0x15, 0x8d, 0x7c, 0xca, 0xc9, 0xfc, 0x8a, 0x7c, 0x94, 0xb0, 0x63, 0x36, 0x9b, 0x78, 0xd1, 0x91, 0x1f, 0x93, 0xd8, 0x57, 0x43, 0xde, 0x76, 0xa3, 0x43}} , {{0x9b, 0x35, 0xe2, 0xa9, 0x3d, 0x32, 0x1e, 0xbb, 0x16, 0x28, 0x70, 0xe9, 0x45, 0x2f, 0x8f, 0x70, 0x7f, 0x08, 0x7e, 0x53, 0xc4, 0x7a, 0xbf, 0xf7, 0xe1, 0xa4, 0x6a, 0xd8, 0xac, 0x64, 0x1b, 0x11}}}, {{{0xb2, 0xeb, 0x47, 0x46, 0x18, 0x3e, 0x1f, 0x99, 0x0c, 0xcc, 0xf1, 0x2c, 0xe0, 0xe7, 0x8f, 0xe0, 0x01, 0x7e, 0x65, 0xb8, 0x0c, 0xd0, 0xfb, 0xc8, 0xb9, 0x90, 0x98, 0x33, 0x61, 0x3b, 0xd8, 0x27}} , {{0xa0, 0xbe, 0x72, 0x3a, 0x50, 0x4b, 0x74, 0xab, 0x01, 0xc8, 0x93, 0xc5, 0xe4, 0xc7, 0x08, 0x6c, 0xb4, 0xca, 0xee, 0xeb, 0x8e, 0xd7, 0x4e, 0x26, 0xc6, 0x1d, 0xe2, 0x71, 0xaf, 0x89, 0xa0, 0x2a}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x98, 0x0b, 0xe4, 0xde, 0xdb, 0xa8, 0xfa, 0x82, 0x74, 0x06, 0x52, 0x6d, 0x08, 0x52, 0x8a, 0xff, 0x62, 0xc5, 0x6a, 0x44, 0x0f, 0x51, 0x8c, 0x1f, 0x6e, 0xb6, 0xc6, 0x2c, 0x81, 0xd3, 0x76, 0x46}} , {{0xf4, 0x29, 0x74, 0x2e, 0x80, 0xa7, 0x1a, 0x8f, 0xf6, 0xbd, 0xd6, 0x8e, 0xbf, 0xc1, 0x95, 0x2a, 0xeb, 0xa0, 0x7f, 0x45, 0xa0, 0x50, 0x14, 0x05, 0xb1, 0x57, 0x4c, 0x74, 0xb7, 0xe2, 0x89, 0x7d}}}, {{{0x07, 0xee, 0xa7, 0xad, 0xb7, 0x09, 0x0b, 0x49, 0x4e, 0xbf, 0xca, 0xe5, 0x21, 0xe6, 0xe6, 0xaf, 0xd5, 0x67, 0xf3, 0xce, 0x7e, 0x7c, 0x93, 0x7b, 0x5a, 0x10, 0x12, 0x0e, 0x6c, 0x06, 0x11, 0x75}} , {{0xd5, 0xfc, 0x86, 0xa3, 0x3b, 0xa3, 0x3e, 0x0a, 0xfb, 0x0b, 0xf7, 0x36, 0xb1, 0x5b, 0xda, 0x70, 0xb7, 0x00, 0xa7, 0xda, 0x88, 0x8f, 0x84, 0xa8, 0xbc, 0x1c, 0x39, 0xb8, 0x65, 0xf3, 0x4d, 0x60}}}, {{{0x96, 0x9d, 0x31, 0xf4, 0xa2, 0xbe, 0x81, 0xb9, 0xa5, 0x59, 0x9e, 0xba, 0x07, 0xbe, 0x74, 0x58, 0xd8, 0xeb, 0xc5, 0x9f, 0x3d, 0xd1, 0xf4, 0xae, 0xce, 0x53, 0xdf, 0x4f, 0xc7, 0x2a, 0x89, 0x4d}} , {{0x29, 0xd8, 0xf2, 0xaa, 0xe9, 0x0e, 0xf7, 0x2e, 0x5f, 0x9d, 0x8a, 0x5b, 0x09, 0xed, 0xc9, 0x24, 0x22, 0xf4, 0x0f, 0x25, 0x8f, 0x1c, 0x84, 0x6e, 0x34, 0x14, 0x6c, 0xea, 0xb3, 0x86, 0x5d, 0x04}}}, {{{0x07, 0x98, 0x61, 0xe8, 0x6a, 0xd2, 0x81, 0x49, 0x25, 0xd5, 0x5b, 0x18, 0xc7, 0x35, 0x52, 0x51, 0xa4, 0x46, 0xad, 0x18, 0x0d, 0xc9, 0x5f, 0x18, 0x91, 0x3b, 0xb4, 0xc0, 0x60, 0x59, 0x8d, 0x66}} , {{0x03, 0x1b, 0x79, 0x53, 0x6e, 0x24, 0xae, 0x57, 0xd9, 0x58, 0x09, 0x85, 0x48, 0xa2, 0xd3, 0xb5, 0xe2, 0x4d, 0x11, 0x82, 0xe6, 0x86, 0x3c, 0xe9, 0xb1, 0x00, 0x19, 0xc2, 0x57, 0xf7, 0x66, 0x7a}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x0f, 0xe3, 0x89, 0x03, 0xd7, 0x22, 0x95, 0x9f, 0xca, 0xb4, 0x8d, 0x9e, 0x6d, 0x97, 0xff, 0x8d, 0x21, 0x59, 0x07, 0xef, 0x03, 0x2d, 0x5e, 0xf8, 0x44, 0x46, 0xe7, 0x85, 0x80, 0xc5, 0x89, 0x50}} , {{0x8b, 0xd8, 0x53, 0x86, 0x24, 0x86, 0x29, 0x52, 0x01, 0xfa, 0x20, 0xc3, 0x4e, 0x95, 0xcb, 0xad, 0x7b, 0x34, 0x94, 0x30, 0xb7, 0x7a, 0xfa, 0x96, 0x41, 0x60, 0x2b, 0xcb, 0x59, 0xb9, 0xca, 0x50}}}, {{{0xc2, 0x5b, 0x9b, 0x78, 0x23, 0x1b, 0x3a, 0x88, 0x94, 0x5f, 0x0a, 0x9b, 0x98, 0x2b, 0x6e, 0x53, 0x11, 0xf6, 0xff, 0xc6, 0x7d, 0x42, 0xcc, 0x02, 0x80, 0x40, 0x0d, 0x1e, 0xfb, 0xaf, 0x61, 0x07}} , {{0xb0, 0xe6, 0x2f, 0x81, 0x70, 0xa1, 0x2e, 0x39, 0x04, 0x7c, 0xc4, 0x2c, 0x87, 0x45, 0x4a, 0x5b, 0x69, 0x97, 0xac, 0x6d, 0x2c, 0x10, 0x42, 0x7c, 0x3b, 0x15, 0x70, 0x60, 0x0e, 0x11, 0x6d, 0x3a}}}, {{{0x9b, 0x18, 0x80, 0x5e, 0xdb, 0x05, 0xbd, 0xc6, 0xb7, 0x3c, 0xc2, 0x40, 0x4d, 0x5d, 0xce, 0x97, 0x8a, 0x34, 0x15, 0xab, 0x28, 0x5d, 0x10, 0xf0, 0x37, 0x0c, 0xcc, 0x16, 0xfa, 0x1f, 0x33, 0x0d}} , {{0x19, 0xf9, 0x35, 0xaa, 0x59, 0x1a, 0x0c, 0x5c, 0x06, 0xfc, 0x6a, 0x0b, 0x97, 0x53, 0x36, 0xfc, 0x2a, 0xa5, 0x5a, 0x9b, 0x30, 0xef, 0x23, 0xaf, 0x39, 0x5d, 0x9a, 0x6b, 0x75, 0x57, 0x48, 0x0b}}}, {{{0x26, 0xdc, 0x76, 0x3b, 0xfc, 0xf9, 0x9c, 0x3f, 0x89, 0x0b, 0x62, 0x53, 0xaf, 0x83, 0x01, 0x2e, 0xbc, 0x6a, 0xc6, 0x03, 0x0d, 0x75, 0x2a, 0x0d, 0xe6, 0x94, 0x54, 0xcf, 0xb3, 0xe5, 0x96, 0x25}} , {{0xfe, 0x82, 0xb1, 0x74, 0x31, 0x8a, 0xa7, 0x6f, 0x56, 0xbd, 0x8d, 0xf4, 0xe0, 0x94, 0x51, 0x59, 0xde, 0x2c, 0x5a, 0xf4, 0x84, 0x6b, 0x4a, 0x88, 0x93, 0xc0, 0x0c, 0x9a, 0xac, 0xa7, 0xa0, 0x68}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x25, 0x0d, 0xd6, 0xc7, 0x23, 0x47, 0x10, 0xad, 0xc7, 0x08, 0x5c, 0x87, 0x87, 0x93, 0x98, 0x18, 0xb8, 0xd3, 0x9c, 0xac, 0x5a, 0x3d, 0xc5, 0x75, 0xf8, 0x49, 0x32, 0x14, 0xcc, 0x51, 0x96, 0x24}} , {{0x65, 0x9c, 0x5d, 0xf0, 0x37, 0x04, 0xf0, 0x34, 0x69, 0x2a, 0xf0, 0xa5, 0x64, 0xca, 0xde, 0x2b, 0x5b, 0x15, 0x10, 0xd2, 0xab, 0x06, 0xdd, 0xc4, 0xb0, 0xb6, 0x5b, 0xc1, 0x17, 0xdf, 0x8f, 0x02}}}, {{{0xbd, 0x59, 0x3d, 0xbf, 0x5c, 0x31, 0x44, 0x2c, 0x32, 0x94, 0x04, 0x60, 0x84, 0x0f, 0xad, 0x00, 0xb6, 0x8f, 0xc9, 0x1d, 0xcc, 0x5c, 0xa2, 0x49, 0x0e, 0x50, 0x91, 0x08, 0x9a, 0x43, 0x55, 0x05}} , {{0x5d, 0x93, 0x55, 0xdf, 0x9b, 0x12, 0x19, 0xec, 0x93, 0x85, 0x42, 0x9e, 0x66, 0x0f, 0x9d, 0xaf, 0x99, 0xaf, 0x26, 0x89, 0xbc, 0x61, 0xfd, 0xff, 0xce, 0x4b, 0xf4, 0x33, 0x95, 0xc9, 0x35, 0x58}}}, {{{0x12, 0x55, 0xf9, 0xda, 0xcb, 0x44, 0xa7, 0xdc, 0x57, 0xe2, 0xf9, 0x9a, 0xe6, 0x07, 0x23, 0x60, 0x54, 0xa7, 0x39, 0xa5, 0x9b, 0x84, 0x56, 0x6e, 0xaa, 0x8b, 0x8f, 0xb0, 0x2c, 0x87, 0xaf, 0x67}} , {{0x00, 0xa9, 0x4c, 0xb2, 0x12, 0xf8, 0x32, 0xa8, 0x7a, 0x00, 0x4b, 0x49, 0x32, 0xba, 0x1f, 0x5d, 0x44, 0x8e, 0x44, 0x7a, 0xdc, 0x11, 0xfb, 0x39, 0x08, 0x57, 0x87, 0xa5, 0x12, 0x42, 0x93, 0x0e}}}, {{{0x17, 0xb4, 0xae, 0x72, 0x59, 0xd0, 0xaa, 0xa8, 0x16, 0x8b, 0x63, 0x11, 0xb3, 0x43, 0x04, 0xda, 0x0c, 0xa8, 0xb7, 0x68, 0xdd, 0x4e, 0x54, 0xe7, 0xaf, 0x5d, 0x5d, 0x05, 0x76, 0x36, 0xec, 0x0d}} , {{0x6d, 0x7c, 0x82, 0x32, 0x38, 0x55, 0x57, 0x74, 0x5b, 0x7d, 0xc3, 0xc4, 0xfb, 0x06, 0x29, 0xf0, 0x13, 0x55, 0x54, 0xc6, 0xa7, 0xdc, 0x4c, 0x9f, 0x98, 0x49, 0x20, 0xa8, 0xc3, 0x8d, 0xfa, 0x48}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x87, 0x47, 0x9d, 0xe9, 0x25, 0xd5, 0xe3, 0x47, 0x78, 0xdf, 0x85, 0xa7, 0x85, 0x5e, 0x7a, 0x4c, 0x5f, 0x79, 0x1a, 0xf3, 0xa2, 0xb2, 0x28, 0xa0, 0x9c, 0xdd, 0x30, 0x40, 0xd4, 0x38, 0xbd, 0x28}} , {{0xfc, 0xbb, 0xd5, 0x78, 0x6d, 0x1d, 0xd4, 0x99, 0xb4, 0xaa, 0x44, 0x44, 0x7a, 0x1b, 0xd8, 0xfe, 0xb4, 0x99, 0xb9, 0xcc, 0xe7, 0xc4, 0xd3, 0x3a, 0x73, 0x83, 0x41, 0x5c, 0x40, 0xd7, 0x2d, 0x55}}}, {{{0x26, 0xe1, 0x7b, 0x5f, 0xe5, 0xdc, 0x3f, 0x7d, 0xa1, 0xa7, 0x26, 0x44, 0x22, 0x23, 0xc0, 0x8f, 0x7d, 0xf1, 0xb5, 0x11, 0x47, 0x7b, 0x19, 0xd4, 0x75, 0x6f, 0x1e, 0xa5, 0x27, 0xfe, 0xc8, 0x0e}} , {{0xd3, 0x11, 0x3d, 0xab, 0xef, 0x2c, 0xed, 0xb1, 0x3d, 0x7c, 0x32, 0x81, 0x6b, 0xfe, 0xf8, 0x1c, 0x3c, 0x7b, 0xc0, 0x61, 0xdf, 0xb8, 0x75, 0x76, 0x7f, 0xaa, 0xd8, 0x93, 0xaf, 0x3d, 0xe8, 0x3d}}}, {{{0xfd, 0x5b, 0x4e, 0x8d, 0xb6, 0x7e, 0x82, 0x9b, 0xef, 0xce, 0x04, 0x69, 0x51, 0x52, 0xff, 0xef, 0xa0, 0x52, 0xb5, 0x79, 0x17, 0x5e, 0x2f, 0xde, 0xd6, 0x3c, 0x2d, 0xa0, 0x43, 0xb4, 0x0b, 0x19}} , {{0xc0, 0x61, 0x48, 0x48, 0x17, 0xf4, 0x9e, 0x18, 0x51, 0x2d, 0xea, 0x2f, 0xf2, 0xf2, 0xe0, 0xa3, 0x14, 0xb7, 0x8b, 0x3a, 0x30, 0xf5, 0x81, 0xc1, 0x5d, 0x71, 0x39, 0x62, 0x55, 0x1f, 0x60, 0x5a}}}, {{{0xe5, 0x89, 0x8a, 0x76, 0x6c, 0xdb, 0x4d, 0x0a, 0x5b, 0x72, 0x9d, 0x59, 0x6e, 0x63, 0x63, 0x18, 0x7c, 0xe3, 0xfa, 0xe2, 0xdb, 0xa1, 0x8d, 0xf4, 0xa5, 0xd7, 0x16, 0xb2, 0xd0, 0xb3, 0x3f, 0x39}} , {{0xce, 0x60, 0x09, 0x6c, 0xf5, 0x76, 0x17, 0x24, 0x80, 0x3a, 0x96, 0xc7, 0x94, 0x2e, 0xf7, 0x6b, 0xef, 0xb5, 0x05, 0x96, 0xef, 0xd3, 0x7b, 0x51, 0xda, 0x05, 0x44, 0x67, 0xbc, 0x07, 0x21, 0x4e}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xe9, 0x73, 0x6f, 0x21, 0xb9, 0xde, 0x22, 0x7d, 0xeb, 0x97, 0x31, 0x10, 0xa3, 0xea, 0xe1, 0xc6, 0x37, 0xeb, 0x8f, 0x43, 0x58, 0xde, 0x41, 0x64, 0x0e, 0x3e, 0x07, 0x99, 0x3d, 0xf1, 0xdf, 0x1e}} , {{0xf8, 0xad, 0x43, 0xc2, 0x17, 0x06, 0xe2, 0xe4, 0xa9, 0x86, 0xcd, 0x18, 0xd7, 0x78, 0xc8, 0x74, 0x66, 0xd2, 0x09, 0x18, 0xa5, 0xf1, 0xca, 0xa6, 0x62, 0x92, 0xc1, 0xcb, 0x00, 0xeb, 0x42, 0x2e}}}, {{{0x7b, 0x34, 0x24, 0x4c, 0xcf, 0x38, 0xe5, 0x6c, 0x0a, 0x01, 0x2c, 0x22, 0x0b, 0x24, 0x38, 0xad, 0x24, 0x7e, 0x19, 0xf0, 0x6c, 0xf9, 0x31, 0xf4, 0x35, 0x11, 0xf6, 0x46, 0x33, 0x3a, 0x23, 0x59}} , {{0x20, 0x0b, 0xa1, 0x08, 0x19, 0xad, 0x39, 0x54, 0xea, 0x3e, 0x23, 0x09, 0xb6, 0xe2, 0xd2, 0xbc, 0x4d, 0xfc, 0x9c, 0xf0, 0x13, 0x16, 0x22, 0x3f, 0xb9, 0xd2, 0x11, 0x86, 0x90, 0x55, 0xce, 0x3c}}}, {{{0xc4, 0x0b, 0x4b, 0x62, 0x99, 0x37, 0x84, 0x3f, 0x74, 0xa2, 0xf9, 0xce, 0xe2, 0x0b, 0x0f, 0x2a, 0x3d, 0xa3, 0xe3, 0xdb, 0x5a, 0x9d, 0x93, 0xcc, 0xa5, 0xef, 0x82, 0x91, 0x1d, 0xe6, 0x6c, 0x68}} , {{0xa3, 0x64, 0x17, 0x9b, 0x8b, 0xc8, 0x3a, 0x61, 0xe6, 0x9d, 0xc6, 0xed, 0x7b, 0x03, 0x52, 0x26, 0x9d, 0x3a, 0xb3, 0x13, 0xcc, 0x8a, 0xfd, 0x2c, 0x1a, 0x1d, 0xed, 0x13, 0xd0, 0x55, 0x57, 0x0e}}}, {{{0x1a, 0xea, 0xbf, 0xfd, 0x4a, 0x3c, 0x8e, 0xec, 0x29, 0x7e, 0x77, 0x77, 0x12, 0x99, 0xd7, 0x84, 0xf9, 0x55, 0x7f, 0xf1, 0x8b, 0xb4, 0xd2, 0x95, 0xa3, 0x8d, 0xf0, 0x8a, 0xa7, 0xeb, 0x82, 0x4b}} , {{0x2c, 0x28, 0xf4, 0x3a, 0xf6, 0xde, 0x0a, 0xe0, 0x41, 0x44, 0x23, 0xf8, 0x3f, 0x03, 0x64, 0x9f, 0xc3, 0x55, 0x4c, 0xc6, 0xc1, 0x94, 0x1c, 0x24, 0x5d, 0x5f, 0x92, 0x45, 0x96, 0x57, 0x37, 0x14}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xc1, 0xcd, 0x90, 0x66, 0xb9, 0x76, 0xa0, 0x5b, 0xa5, 0x85, 0x75, 0x23, 0xf9, 0x89, 0xa5, 0x82, 0xb2, 0x6f, 0xb1, 0xeb, 0xc4, 0x69, 0x6f, 0x18, 0x5a, 0xed, 0x94, 0x3d, 0x9d, 0xd9, 0x2c, 0x1a}} , {{0x35, 0xb0, 0xe6, 0x73, 0x06, 0xb7, 0x37, 0xe0, 0xf8, 0xb0, 0x22, 0xe8, 0xd2, 0xed, 0x0b, 0xef, 0xe6, 0xc6, 0x5a, 0x99, 0x9e, 0x1a, 0x9f, 0x04, 0x97, 0xe4, 0x4d, 0x0b, 0xbe, 0xba, 0x44, 0x40}}}, {{{0xc1, 0x56, 0x96, 0x91, 0x5f, 0x1f, 0xbb, 0x54, 0x6f, 0x88, 0x89, 0x0a, 0xb2, 0xd6, 0x41, 0x42, 0x6a, 0x82, 0xee, 0x14, 0xaa, 0x76, 0x30, 0x65, 0x0f, 0x67, 0x39, 0xa6, 0x51, 0x7c, 0x49, 0x24}} , {{0x35, 0xa3, 0x78, 0xd1, 0x11, 0x0f, 0x75, 0xd3, 0x70, 0x46, 0xdb, 0x20, 0x51, 0xcb, 0x92, 0x80, 0x54, 0x10, 0x74, 0x36, 0x86, 0xa9, 0xd7, 0xa3, 0x08, 0x78, 0xf1, 0x01, 0x29, 0xf8, 0x80, 0x3b}}}, {{{0xdb, 0xa7, 0x9d, 0x9d, 0xbf, 0xa0, 0xcc, 0xed, 0x53, 0xa2, 0xa2, 0x19, 0x39, 0x48, 0x83, 0x19, 0x37, 0x58, 0xd1, 0x04, 0x28, 0x40, 0xf7, 0x8a, 0xc2, 0x08, 0xb7, 0xa5, 0x42, 0xcf, 0x53, 0x4c}} , {{0xa7, 0xbb, 0xf6, 0x8e, 0xad, 0xdd, 0xf7, 0x90, 0xdd, 0x5f, 0x93, 0x89, 0xae, 0x04, 0x37, 0xe6, 0x9a, 0xb7, 0xe8, 0xc0, 0xdf, 0x16, 0x2a, 0xbf, 0xc4, 0x3a, 0x3c, 0x41, 0xd5, 0x89, 0x72, 0x5a}}}, {{{0x1f, 0x96, 0xff, 0x34, 0x2c, 0x13, 0x21, 0xcb, 0x0a, 0x89, 0x85, 0xbe, 0xb3, 0x70, 0x9e, 0x1e, 0xde, 0x97, 0xaf, 0x96, 0x30, 0xf7, 0x48, 0x89, 0x40, 0x8d, 0x07, 0xf1, 0x25, 0xf0, 0x30, 0x58}} , {{0x1e, 0xd4, 0x93, 0x57, 0xe2, 0x17, 0xe7, 0x9d, 0xab, 0x3c, 0x55, 0x03, 0x82, 0x2f, 0x2b, 0xdb, 0x56, 0x1e, 0x30, 0x2e, 0x24, 0x47, 0x6e, 0xe6, 0xff, 0x33, 0x24, 0x2c, 0x75, 0x51, 0xd4, 0x67}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0x2b, 0x06, 0xd9, 0xa1, 0x5d, 0xe1, 0xf4, 0xd1, 0x1e, 0x3c, 0x9a, 0xc6, 0x29, 0x2b, 0x13, 0x13, 0x78, 0xc0, 0xd8, 0x16, 0x17, 0x2d, 0x9e, 0xa9, 0xc9, 0x79, 0x57, 0xab, 0x24, 0x91, 0x92, 0x19}} , {{0x69, 0xfb, 0xa1, 0x9c, 0xa6, 0x75, 0x49, 0x7d, 0x60, 0x73, 0x40, 0x42, 0xc4, 0x13, 0x0a, 0x95, 0x79, 0x1e, 0x04, 0x83, 0x94, 0x99, 0x9b, 0x1e, 0x0c, 0xe8, 0x1f, 0x54, 0xef, 0xcb, 0xc0, 0x52}}}, {{{0x14, 0x89, 0x73, 0xa1, 0x37, 0x87, 0x6a, 0x7a, 0xcf, 0x1d, 0xd9, 0x2e, 0x1a, 0x67, 0xed, 0x74, 0xc0, 0xf0, 0x9c, 0x33, 0xdd, 0xdf, 0x08, 0xbf, 0x7b, 0xd1, 0x66, 0xda, 0xe6, 0xc9, 0x49, 0x08}} , {{0xe9, 0xdd, 0x5e, 0x55, 0xb0, 0x0a, 0xde, 0x21, 0x4c, 0x5a, 0x2e, 0xd4, 0x80, 0x3a, 0x57, 0x92, 0x7a, 0xf1, 0xc4, 0x2c, 0x40, 0xaf, 0x2f, 0xc9, 0x92, 0x03, 0xe5, 0x5a, 0xbc, 0xdc, 0xf4, 0x09}}}, {{{0xf3, 0xe1, 0x2b, 0x7c, 0x05, 0x86, 0x80, 0x93, 0x4a, 0xad, 0xb4, 0x8f, 0x7e, 0x99, 0x0c, 0xfd, 0xcd, 0xef, 0xd1, 0xff, 0x2c, 0x69, 0x34, 0x13, 0x41, 0x64, 0xcf, 0x3b, 0xd0, 0x90, 0x09, 0x1e}} , {{0x9d, 0x45, 0xd6, 0x80, 0xe6, 0x45, 0xaa, 0xf4, 0x15, 0xaa, 0x5c, 0x34, 0x87, 0x99, 0xa2, 0x8c, 0x26, 0x84, 0x62, 0x7d, 0xb6, 0x29, 0xc0, 0x52, 0xea, 0xf5, 0x81, 0x18, 0x0f, 0x35, 0xa9, 0x0e}}}, {{{0xe7, 0x20, 0x72, 0x7c, 0x6d, 0x94, 0x5f, 0x52, 0x44, 0x54, 0xe3, 0xf1, 0xb2, 0xb0, 0x36, 0x46, 0x0f, 0xae, 0x92, 0xe8, 0x70, 0x9d, 0x6e, 0x79, 0xb1, 0xad, 0x37, 0xa9, 0x5f, 0xc0, 0xde, 0x03}} , {{0x15, 0x55, 0x37, 0xc6, 0x1c, 0x27, 0x1c, 0x6d, 0x14, 0x4f, 0xca, 0xa4, 0xc4, 0x88, 0x25, 0x46, 0x39, 0xfc, 0x5a, 0xe5, 0xfe, 0x29, 0x11, 0x69, 0xf5, 0x72, 0x84, 0x4d, 0x78, 0x9f, 0x94, 0x15}}}, {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}, {{{0xec, 0xd3, 0xff, 0x57, 0x0b, 0xb0, 0xb2, 0xdc, 0xf8, 0x4f, 0xe2, 0x12, 0xd5, 0x36, 0xbe, 0x6b, 0x09, 0x43, 0x6d, 0xa3, 0x4d, 0x90, 0x2d, 0xb8, 0x74, 0xe8, 0x71, 0x45, 0x19, 0x8b, 0x0c, 0x6a}} , {{0xb8, 0x42, 0x1c, 0x03, 0xad, 0x2c, 0x03, 0x8e, 0xac, 0xd7, 0x98, 0x29, 0x13, 0xc6, 0x02, 0x29, 0xb5, 0xd4, 0xe7, 0xcf, 0xcc, 0x8b, 0x83, 0xec, 0x35, 0xc7, 0x9c, 0x74, 0xb7, 0xad, 0x85, 0x5f}}}, {{{0x78, 0x84, 0xe1, 0x56, 0x45, 0x69, 0x68, 0x5a, 0x4f, 0xb8, 0xb1, 0x29, 0xff, 0x33, 0x03, 0x31, 0xb7, 0xcb, 0x96, 0x25, 0xe6, 0xe6, 0x41, 0x98, 0x1a, 0xbb, 0x03, 0x56, 0xf2, 0xb2, 0x91, 0x34}} , {{0x2c, 0x6c, 0xf7, 0x66, 0xa4, 0x62, 0x6b, 0x39, 0xb3, 0xba, 0x65, 0xd3, 0x1c, 0xf8, 0x11, 0xaa, 0xbe, 0xdc, 0x80, 0x59, 0x87, 0xf5, 0x7b, 0xe5, 0xe3, 0xb3, 0x3e, 0x39, 0xda, 0xbe, 0x88, 0x09}}}, {{{0x8b, 0xf1, 0xa0, 0xf5, 0xdc, 0x29, 0xb4, 0xe2, 0x07, 0xc6, 0x7a, 0x00, 0xd0, 0x89, 0x17, 0x51, 0xd4, 0xbb, 0xd4, 0x22, 0xea, 0x7e, 0x7d, 0x7c, 0x24, 0xea, 0xf2, 0xe8, 0x22, 0x12, 0x95, 0x06}} , {{0xda, 0x7c, 0xa4, 0x0c, 0xf4, 0xba, 0x6e, 0xe1, 0x89, 0xb5, 0x59, 0xca, 0xf1, 0xc0, 0x29, 0x36, 0x09, 0x44, 0xe2, 0x7f, 0xd1, 0x63, 0x15, 0x99, 0xea, 0x25, 0xcf, 0x0c, 0x9d, 0xc0, 0x44, 0x6f}}}, {{{0x1d, 0x86, 0x4e, 0xcf, 0xf7, 0x37, 0x10, 0x25, 0x8f, 0x12, 0xfb, 0x19, 0xfb, 0xe0, 0xed, 0x10, 0xc8, 0xe2, 0xf5, 0x75, 0xb1, 0x33, 0xc0, 0x96, 0x0d, 0xfb, 0x15, 0x6c, 0x0d, 0x07, 0x5f, 0x05}} , {{0x69, 0x3e, 0x47, 0x97, 0x2c, 0xaf, 0x52, 0x7c, 0x78, 0x83, 0xad, 0x1b, 0x39, 0x82, 0x2f, 0x02, 0x6f, 0x47, 0xdb, 0x2a, 0xb0, 0xe1, 0x91, 0x99, 0x55, 0xb8, 0x99, 0x3a, 0xa0, 0x44, 0x11, 0x51}}} libwebsockets-4.3.5/plugins/ssh-base/crypto/poly1305.c000066400000000000000000000111561476025525100225440ustar00rootroot00000000000000/* * Public Domain poly1305 from Andrew Moon * poly1305-donna-unrolled.c from https://github.com/floodyberry/poly1305-donna */ /* $OpenBSD: poly1305.c,v 1.3 2013/12/19 22:57:13 djm Exp $ */ #include #include "lws-ssh.h" #define mul32x32_64(a,b) ((uint64_t)(a) * (b)) #define U8TO32_LE(p) \ (((uint32_t)((p)[0])) | \ ((uint32_t)((p)[1]) << 8) | \ ((uint32_t)((p)[2]) << 16) | \ ((uint32_t)((p)[3]) << 24)) #define U32TO8_LE(p, v) \ do { \ (p)[0] = (uint8_t)((v)); \ (p)[1] = (uint8_t)((v) >> 8); \ (p)[2] = (uint8_t)((v) >> 16); \ (p)[3] = (uint8_t)((v) >> 24); \ } while (0) void poly1305_auth(unsigned char out[POLY1305_TAGLEN], const unsigned char *m, size_t inlen, const unsigned char key[POLY1305_KEYLEN]) { uint32_t t0,t1,t2,t3; uint32_t h0,h1,h2,h3,h4; uint32_t r0,r1,r2,r3,r4; uint32_t s1,s2,s3,s4; uint32_t b, nb; size_t j; uint64_t t[5]; uint64_t f0,f1,f2,f3; uint32_t g0,g1,g2,g3,g4; uint64_t c; unsigned char mp[16]; /* clamp key */ t0 = U8TO32_LE(key + 0); t1 = U8TO32_LE(key + 4); t2 = U8TO32_LE(key + 8); t3 = U8TO32_LE(key + 12); /* precompute multipliers */ r0 = t0 & 0x3ffffff; t0 >>= 26; t0 |= t1 << 6; r1 = t0 & 0x3ffff03; t1 >>= 20; t1 |= t2 << 12; r2 = t1 & 0x3ffc0ff; t2 >>= 14; t2 |= t3 << 18; r3 = t2 & 0x3f03fff; t3 >>= 8; r4 = t3 & 0x00fffff; s1 = r1 * 5; s2 = r2 * 5; s3 = r3 * 5; s4 = r4 * 5; /* init state */ h0 = 0; h1 = 0; h2 = 0; h3 = 0; h4 = 0; /* full blocks */ if (inlen < 16) goto poly1305_donna_atmost15bytes; poly1305_donna_16bytes: m += 16; inlen -= 16; t0 = U8TO32_LE(m - 16); t1 = U8TO32_LE(m - 12); t2 = U8TO32_LE(m - 8); t3 = U8TO32_LE(m - 4); h0 += t0 & 0x3ffffff; h1 += (uint32_t)(((((uint64_t)t1 << 32) | t0) >> 26) & 0x3ffffff); h2 += (uint32_t)(((((uint64_t)t2 << 32) | t1) >> 20) & 0x3ffffff); h3 += (uint32_t)(((((uint64_t)t3 << 32) | t2) >> 14) & 0x3ffffff); h4 += (uint32_t)((t3 >> 8) | (1 << 24)); poly1305_donna_mul: t[0] = mul32x32_64(h0,r0) + mul32x32_64(h1,s4) + mul32x32_64(h2,s3) + mul32x32_64(h3,s2) + mul32x32_64(h4,s1); t[1] = mul32x32_64(h0,r1) + mul32x32_64(h1,r0) + mul32x32_64(h2,s4) + mul32x32_64(h3,s3) + mul32x32_64(h4,s2); t[2] = mul32x32_64(h0,r2) + mul32x32_64(h1,r1) + mul32x32_64(h2,r0) + mul32x32_64(h3,s4) + mul32x32_64(h4,s3); t[3] = mul32x32_64(h0,r3) + mul32x32_64(h1,r2) + mul32x32_64(h2,r1) + mul32x32_64(h3,r0) + mul32x32_64(h4,s4); t[4] = mul32x32_64(h0,r4) + mul32x32_64(h1,r3) + mul32x32_64(h2,r2) + mul32x32_64(h3,r1) + mul32x32_64(h4,r0); h0 = (uint32_t)t[0] & 0x3ffffff; c = (t[0] >> 26); t[1] += c; h1 = (uint32_t)t[1] & 0x3ffffff; b = (uint32_t)(t[1] >> 26); t[2] += b; h2 = (uint32_t)t[2] & 0x3ffffff; b = (uint32_t)(t[2] >> 26); t[3] += b; h3 = (uint32_t)t[3] & 0x3ffffff; b = (uint32_t)(t[3] >> 26); t[4] += b; h4 = (uint32_t)t[4] & 0x3ffffff; b = (uint32_t)(t[4] >> 26); h0 += b * 5; if (inlen >= 16) goto poly1305_donna_16bytes; /* final bytes */ poly1305_donna_atmost15bytes: if (!inlen) goto poly1305_donna_finish; for (j = 0; j < inlen; j++) mp[j] = m[j]; mp[j++] = 1; for (; j < 16; j++) mp[j] = 0; inlen = 0; t0 = U8TO32_LE(mp + 0); t1 = U8TO32_LE(mp + 4); t2 = U8TO32_LE(mp + 8); t3 = U8TO32_LE(mp + 12); h0 += t0 & 0x3ffffff; h1 += (uint32_t)(((((uint64_t)t1 << 32) | t0) >> 26) & 0x3ffffff); h2 += (uint32_t)(((((uint64_t)t2 << 32) | t1) >> 20) & 0x3ffffff); h3 += (uint32_t)(((((uint64_t)t3 << 32) | t2) >> 14) & 0x3ffffff); h4 += (uint32_t)(t3 >> 8); goto poly1305_donna_mul; poly1305_donna_finish: b = h0 >> 26; h0 = h0 & 0x3ffffff; h1 += b; b = h1 >> 26; h1 = h1 & 0x3ffffff; h2 += b; b = h2 >> 26; h2 = h2 & 0x3ffffff; h3 += b; b = h3 >> 26; h3 = h3 & 0x3ffffff; h4 += b; b = h4 >> 26; h4 = h4 & 0x3ffffff; h0 += b * 5; b = h0 >> 26; h0 = h0 & 0x3ffffff; h1 += b; g0 = h0 + 5; b = g0 >> 26; g0 &= 0x3ffffff; g1 = h1 + b; b = g1 >> 26; g1 &= 0x3ffffff; g2 = h2 + b; b = g2 >> 26; g2 &= 0x3ffffff; g3 = h3 + b; b = g3 >> 26; g3 &= 0x3ffffff; g4 = h4 + b - (1 << 26); b = (g4 >> 31) - 1; nb = ~b; h0 = (h0 & nb) | (g0 & b); h1 = (h1 & nb) | (g1 & b); h2 = (h2 & nb) | (g2 & b); h3 = (h3 & nb) | (g3 & b); h4 = (h4 & nb) | (g4 & b); f0 = ((h0 ) | (h1 << 26)) + (uint64_t)U8TO32_LE(&key[16]); f1 = ((h1 >> 6) | (h2 << 20)) + (uint64_t)U8TO32_LE(&key[20]); f2 = ((h2 >> 12) | (h3 << 14)) + (uint64_t)U8TO32_LE(&key[24]); f3 = ((h3 >> 18) | (h4 << 8)) + (uint64_t)U8TO32_LE(&key[28]); U32TO8_LE(&out[ 0], f0); f1 += (f0 >> 32); U32TO8_LE(&out[ 4], f1); f2 += (f1 >> 32); U32TO8_LE(&out[ 8], f2); f3 += (f2 >> 32); U32TO8_LE(&out[12], f3); } libwebsockets-4.3.5/plugins/ssh-base/crypto/sc25519.c000066400000000000000000000173441476025525100222700ustar00rootroot00000000000000/* $OpenBSD: sc25519.c,v 1.3 2013/12/09 11:03:45 markus Exp $ */ /* * Public Domain, Authors: Daniel J. Bernstein, Niels Duif, Tanja Lange, * Peter Schwabe, Bo-Yin Yang. * Copied from supercop-20130419/crypto_sign/ed25519/ref/sc25519.c */ #include #include "sc25519.h" /*Arithmetic modulo the group order m = 2^252 + 27742317777372353535851937790883648493 = 7237005577332262213973186563042994240857116359379907606001950938285454250989 */ static const uint32_t m[32] = {0xED, 0xD3, 0xF5, 0x5C, 0x1A, 0x63, 0x12, 0x58, 0xD6, 0x9C, 0xF7, 0xA2, 0xDE, 0xF9, 0xDE, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10}; static const uint32_t mu[33] = {0x1B, 0x13, 0x2C, 0x0A, 0xA3, 0xE5, 0x9C, 0xED, 0xA7, 0x29, 0x63, 0x08, 0x5D, 0x21, 0x06, 0x21, 0xEB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F}; static uint32_t lt(uint32_t a,uint32_t b) /* 16-bit inputs */ { unsigned int x = a; x -= (unsigned int) b; /* 0..65535: no; 4294901761..4294967295: yes */ x >>= 31; /* 0: no; 1: yes */ return x; } /* Reduce coefficients of r before calling sc_reduce_add_sub */ static void sc_reduce_add_sub(sc25519 *r) { uint32_t pb = 0; uint32_t b; uint32_t mask; int i; unsigned char t[32]; for(i=0;i<32;i++) { pb += m[i]; b = lt(r->v[i],pb); t[i] = (unsigned char)(r->v[i]-pb+(b<<8)); pb = b; } mask = b - 1; for(i=0;i<32;i++) r->v[i] ^= mask & (r->v[i] ^ t[i]); } /* Reduce coefficients of x before calling barrett_reduce */ static void barrett_reduce(sc25519 *r, const uint32_t x[64]) { /* See HAC, Alg. 14.42 */ int i,j; uint32_t q2[66]; uint32_t *q3 = q2 + 33; uint32_t r1[33]; uint32_t r2[33]; uint32_t carry; uint32_t pb = 0; uint32_t b; for (i = 0;i < 66;++i) q2[i] = 0; for (i = 0;i < 33;++i) r2[i] = 0; for(i=0;i<33;i++) for(j=0;j<33;j++) if(i+j >= 31) q2[i+j] += mu[i]*x[j+31]; carry = q2[31] >> 8; q2[32] += carry; carry = q2[32] >> 8; q2[33] += carry; for(i=0;i<33;i++)r1[i] = x[i]; for(i=0;i<32;i++) for(j=0;j<33;j++) if(i+j < 33) r2[i+j] += m[i]*q3[j]; for(i=0;i<32;i++) { carry = r2[i] >> 8; r2[i+1] += carry; r2[i] &= 0xff; } for(i=0;i<32;i++) { pb += r2[i]; b = lt(r1[i],pb); r->v[i] = r1[i]-pb+(b<<8); pb = b; } /* XXX: Can it really happen that r<0?, See HAC, Alg 14.42, Step 3 * If so: Handle it here! */ sc_reduce_add_sub(r); sc_reduce_add_sub(r); } void sc25519_from32bytes(sc25519 *r, const unsigned char x[32]) { int i; uint32_t t[64]; for(i=0;i<32;i++) t[i] = x[i]; for(i=32;i<64;++i) t[i] = 0; barrett_reduce(r, t); } void shortsc25519_from16bytes(shortsc25519 *r, const unsigned char x[16]) { int i; for(i=0;i<16;i++) r->v[i] = x[i]; } void sc25519_from64bytes(sc25519 *r, const unsigned char x[64]) { int i; uint32_t t[64]; for(i=0;i<64;i++) t[i] = x[i]; barrett_reduce(r, t); } void sc25519_from_shortsc(sc25519 *r, const shortsc25519 *x) { int i; for(i=0;i<16;i++) r->v[i] = x->v[i]; for(i=0;i<16;i++) r->v[16+i] = 0; } void sc25519_to32bytes(unsigned char r[32], const sc25519 *x) { int i; for(i=0;i<32;i++) r[i] = (unsigned char)x->v[i]; } int sc25519_iszero_vartime(const sc25519 *x) { int i; for(i=0;i<32;i++) if(x->v[i] != 0) return 0; return 1; } int sc25519_isshort_vartime(const sc25519 *x) { int i; for(i=31;i>15;i--) if(x->v[i] != 0) return 0; return 1; } int sc25519_lt_vartime(const sc25519 *x, const sc25519 *y) { int i; for(i=31;i>=0;i--) { if(x->v[i] < y->v[i]) return 1; if(x->v[i] > y->v[i]) return 0; } return 0; } void sc25519_add(sc25519 *r, const sc25519 *x, const sc25519 *y) { int i, carry; for(i=0;i<32;i++) r->v[i] = x->v[i] + y->v[i]; for(i=0;i<31;i++) { carry = (int)r->v[i] >> 8; r->v[i+1] += (uint32_t)carry; r->v[i] &= 0xff; } sc_reduce_add_sub(r); } void sc25519_sub_nored(sc25519 *r, const sc25519 *x, const sc25519 *y) { uint32_t b = 0; int i; for(i=0;i<32;i++) { uint32_t t = x->v[i] - y->v[i] - b; r->v[i] = t & 255; b = (t >> 8) & 1; } } void sc25519_mul(sc25519 *r, const sc25519 *x, const sc25519 *y) { int i,j,carry; uint32_t t[64]; for(i=0;i<64;i++)t[i] = 0; for(i=0;i<32;i++) for(j=0;j<32;j++) t[i+j] += x->v[i] * y->v[j]; /* Reduce coefficients */ for(i=0;i<63;i++) { carry = (int)t[i] >> 8; t[i+1] += (uint32_t)carry; t[i] &= 0xff; } barrett_reduce(r, t); } void sc25519_mul_shortsc(sc25519 *r, const sc25519 *x, const shortsc25519 *y) { sc25519 t; sc25519_from_shortsc(&t, y); sc25519_mul(r, x, &t); } void sc25519_window3(signed char r[85], const sc25519 *s) { char carry; int i; for(i=0;i<10;i++) { r[8*i+0] = s->v[3*i+0] & 7; r[8*i+1] = (s->v[3*i+0] >> 3) & 7; r[8*i+2] = (s->v[3*i+0] >> 6) & 7; r[8*i+2] = (signed char)(r[8*i+2] ^ (int)((s->v[3*i+1] << 2) & 7)); r[8*i+3] = (s->v[3*i+1] >> 1) & 7; r[8*i+4] = (s->v[3*i+1] >> 4) & 7; r[8*i+5] = (s->v[3*i+1] >> 7) & 7; r[8*i+5] = (signed char)(r[8*i+5] ^ (int)((s->v[3*i+2] << 1) & 7)); r[8*i+6] = (s->v[3*i+2] >> 2) & 7; r[8*i+7] = (s->v[3*i+2] >> 5) & 7; } r[8*i+0] = s->v[3*i+0] & 7; r[8*i+1] = (s->v[3*i+0] >> 3) & 7; r[8*i+2] = (s->v[3*i+0] >> 6) & 7; r[8*i+2] = (signed char)(r[8*i+2] ^ (int)((s->v[3*i+1] << 2) & 7)); r[8*i+3] = (s->v[3*i+1] >> 1) & 7; r[8*i+4] = (s->v[3*i+1] >> 4) & 7; /* Making it signed */ carry = 0; for(i=0;i<84;i++) { r[i] = (signed char)(r[i] + carry); r[i+1] = (signed char)(r[i + 1] + (r[i] >> 3)); r[i] &= 7; carry = (char)(r[i] >> 2); r[i] = (signed char)(r[i] - (carry<<3)); } r[84] = (signed char)(r[84] + (signed char)carry); } void sc25519_window5(signed char r[51], const sc25519 *s) { char carry; int i; for(i=0;i<6;i++) { r[8*i+0] = s->v[5*i+0] & 31; r[8*i+1] = (s->v[5*i+0] >> 5) & 31; r[8*i+1] = (signed char)(r[8*i+1] ^ (int)((s->v[5*i+1] << 3) & 31)); r[8*i+2] = (s->v[5*i+1] >> 2) & 31; r[8*i+3] = (s->v[5*i+1] >> 7) & 31; r[8*i+3] = (signed char)(r[8*i+3] ^ (int)((s->v[5*i+2] << 1) & 31)); r[8*i+4] = (s->v[5*i+2] >> 4) & 31; r[8*i+4] = (signed char)(r[8*i+4] ^ (int)((s->v[5*i+3] << 4) & 31)); r[8*i+5] = (s->v[5*i+3] >> 1) & 31; r[8*i+6] = (s->v[5*i+3] >> 6) & 31; r[8*i+6] = (signed char)(r[8*i+6] ^ (int)((s->v[5*i+4] << 2) & 31)); r[8*i+7] = (s->v[5*i+4] >> 3) & 31; } r[8*i+0] = s->v[5*i+0] & 31; r[8*i+1] = (s->v[5*i+0] >> 5) & 31; r[8*i+1] = (signed char)(r[8*i+1] ^ (int)((s->v[5*i+1] << 3) & 31)); r[8*i+2] = (s->v[5*i+1] >> 2) & 31; /* Making it signed */ carry = 0; for(i=0;i<50;i++) { r[i] = (signed char)(r[i] + (signed char)carry); r[i+1] = (signed char)(r[i + 1] + (r[i] >> 5)); r[i] &= 31; carry = (char)(r[i] >> 4); r[i] = (signed char)(r[i] - (carry<<5)); } r[50] = (signed char)(r[50] + carry); } void sc25519_2interleave2(unsigned char r[127], const sc25519 *s1, const sc25519 *s2) { int i; for(i=0;i<31;i++) { r[4*i] = (unsigned char)(( s1->v[i] & 3) ^ (( s2->v[i] & 3) << 2)); r[4*i+1] = (unsigned char)(((s1->v[i] >> 2) & 3) ^ (((s2->v[i] >> 2) & 3) << 2)); r[4*i+2] = (unsigned char)(((s1->v[i] >> 4) & 3) ^ (((s2->v[i] >> 4) & 3) << 2)); r[4*i+3] = (unsigned char)(((s1->v[i] >> 6) & 3) ^ (((s2->v[i] >> 6) & 3) << 2)); } r[124] = (unsigned char)(( s1->v[31] & 3) ^ (( s2->v[31] & 3) << 2)); r[125] = (unsigned char)(((s1->v[31] >> 2) & 3) ^ (((s2->v[31] >> 2) & 3) << 2)); r[126] = (unsigned char)(((s1->v[31] >> 4) & 3) ^ (((s2->v[31] >> 4) & 3) << 2)); } libwebsockets-4.3.5/plugins/ssh-base/crypto/sc25519.h000066400000000000000000000054501476025525100222700ustar00rootroot00000000000000/* $OpenBSD: sc25519.h,v 1.3 2013/12/09 11:03:45 markus Exp $ */ /* * Public Domain, Authors: Daniel J. Bernstein, Niels Duif, Tanja Lange, * Peter Schwabe, Bo-Yin Yang. * Copied from supercop-20130419/crypto_sign/ed25519/ref/sc25519.h */ #ifndef SC25519_H #define SC25519_H #define sc25519 crypto_sign_ed25519_ref_sc25519 #define shortsc25519 crypto_sign_ed25519_ref_shortsc25519 #define sc25519_from32bytes crypto_sign_ed25519_ref_sc25519_from32bytes #define shortsc25519_from16bytes crypto_sign_ed25519_ref_shortsc25519_from16bytes #define sc25519_from64bytes crypto_sign_ed25519_ref_sc25519_from64bytes #define sc25519_from_shortsc crypto_sign_ed25519_ref_sc25519_from_shortsc #define sc25519_to32bytes crypto_sign_ed25519_ref_sc25519_to32bytes #define sc25519_iszero_vartime crypto_sign_ed25519_ref_sc25519_iszero_vartime #define sc25519_isshort_vartime crypto_sign_ed25519_ref_sc25519_isshort_vartime #define sc25519_lt_vartime crypto_sign_ed25519_ref_sc25519_lt_vartime #define sc25519_add crypto_sign_ed25519_ref_sc25519_add #define sc25519_sub_nored crypto_sign_ed25519_ref_sc25519_sub_nored #define sc25519_mul crypto_sign_ed25519_ref_sc25519_mul #define sc25519_mul_shortsc crypto_sign_ed25519_ref_sc25519_mul_shortsc #define sc25519_window3 crypto_sign_ed25519_ref_sc25519_window3 #define sc25519_window5 crypto_sign_ed25519_ref_sc25519_window5 #define sc25519_2interleave2 crypto_sign_ed25519_ref_sc25519_2interleave2 typedef struct { uint32_t v[32]; } sc25519; typedef struct { uint32_t v[16]; } shortsc25519; void sc25519_from32bytes(sc25519 *r, const unsigned char x[32]); void shortsc25519_from16bytes(shortsc25519 *r, const unsigned char x[16]); void sc25519_from64bytes(sc25519 *r, const unsigned char x[64]); void sc25519_from_shortsc(sc25519 *r, const shortsc25519 *x); void sc25519_to32bytes(unsigned char r[32], const sc25519 *x); int sc25519_iszero_vartime(const sc25519 *x); int sc25519_isshort_vartime(const sc25519 *x); int sc25519_lt_vartime(const sc25519 *x, const sc25519 *y); void sc25519_add(sc25519 *r, const sc25519 *x, const sc25519 *y); void sc25519_sub_nored(sc25519 *r, const sc25519 *x, const sc25519 *y); void sc25519_mul(sc25519 *r, const sc25519 *x, const sc25519 *y); void sc25519_mul_shortsc(sc25519 *r, const sc25519 *x, const shortsc25519 *y); /* Convert s into a representation of the form \sum_{i=0}^{84}r[i]2^3 * with r[i] in {-4,...,3} */ void sc25519_window3(signed char r[85], const sc25519 *s); /* Convert s into a representation of the form \sum_{i=0}^{50}r[i]2^5 * with r[i] in {-16,...,15} */ void sc25519_window5(signed char r[51], const sc25519 *s); void sc25519_2interleave2(unsigned char r[127], const sc25519 *s1, const sc25519 *s2); #endif libwebsockets-4.3.5/plugins/ssh-base/crypto/smult_curve25519_ref.c000066400000000000000000000153361476025525100250660ustar00rootroot00000000000000/* $OpenBSD: smult_curve25519_ref.c,v 1.2 2013/11/02 22:02:14 markus Exp $ */ /* version 20081011 Matthew Dempsky Public domain. Derived from public domain code by D. J. Bernstein. */ static void add(unsigned int out[32],const unsigned int a[32],const unsigned int b[32]) { unsigned int j; unsigned int u; u = 0; for (j = 0;j < 31;++j) { u += a[j] + b[j]; out[j] = u & 255; u >>= 8; } u += a[31] + b[31]; out[31] = u; } static void sub(unsigned int out[32],const unsigned int a[32],const unsigned int b[32]) { unsigned int j; unsigned int u; u = 218; for (j = 0;j < 31;++j) { u += a[j] + 65280 - b[j]; out[j] = u & 255; u >>= 8; } u += a[31] - b[31]; out[31] = u; } static void squeeze(unsigned int a[32]) { unsigned int j; unsigned int u; u = 0; for (j = 0;j < 31;++j) { u += a[j]; a[j] = u & 255; u >>= 8; } u += a[31]; a[31] = u & 127; u = 19 * (u >> 7); for (j = 0;j < 31;++j) { u += a[j]; a[j] = u & 255; u >>= 8; } u += a[31]; a[31] = u; } static const unsigned int minusp[32] = { 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 } ; static void freeze(unsigned int a[32]) { unsigned int aorig[32]; unsigned int j; unsigned int negative; for (j = 0;j < 32;++j) aorig[j] = a[j]; add(a,a,minusp); negative = (unsigned int)-(int)((a[31] >> 7) & 1); for (j = 0;j < 32;++j) a[j] ^= negative & (aorig[j] ^ a[j]); } static void mult(unsigned int out[32],const unsigned int a[32],const unsigned int b[32]) { unsigned int i; for (i = 0;i < 32;++i) { unsigned int j; unsigned int u; u = 0; for (j = 0;j <= i;++j) u += a[j] * b[i - j]; for (j = i + 1;j < 32;++j) u += 38 * a[j] * b[i + 32 - j]; out[i] = u; } squeeze(out); } static void mult121665(unsigned int out[32],const unsigned int a[32]) { unsigned int j; unsigned int u; u = 0; for (j = 0;j < 31;++j) { u += 121665 * a[j]; out[j] = u & 255; u >>= 8; } u += 121665 * a[31]; out[31] = u & 127; u = 19 * (u >> 7); for (j = 0;j < 31;++j) { u += out[j]; out[j] = u & 255; u >>= 8; } u += out[j]; out[j] = u; } static void square(unsigned int out[32],const unsigned int a[32]) { unsigned int i; unsigned int j; unsigned int u; for (i = 0;i < 32;++i) { u = 0; for (j = 0;j < i - j;++j) u += a[j] * a[i - j]; for (j = i + 1;j < i + 32 - j;++j) if (i + 32 - j < 32 && j < 32) u += 38 * a[j] * a[i + 32 - j]; u *= 2; if ((i & 1) == 0) { u += a[i / 2] * a[i / 2]; u += 38 * a[i / 2 + 16] * a[i / 2 + 16]; } out[i] = u; } squeeze(out); } static void smc_select(unsigned int p[64],unsigned int q[64],const unsigned int r[64],const unsigned int s[64],unsigned int b) { unsigned int j; unsigned int t; unsigned int bminus1; bminus1 = b - 1; for (j = 0;j < 64;++j) { t = bminus1 & (r[j] ^ s[j]); p[j] = s[j] ^ t; q[j] = r[j] ^ t; } } static void mainloop(unsigned int work[64],const unsigned char e[32]) { unsigned int xzm1[64]; unsigned int xzm[64]; unsigned int xzmb[64]; unsigned int xzm1b[64]; unsigned int xznb[64]; unsigned int xzn1b[64]; unsigned int a0[64]; unsigned int a1[64]; unsigned int b0[64]; unsigned int b1[64]; unsigned int c1[64]; unsigned int r[32]; unsigned int s[32]; unsigned int t[32]; unsigned int u[32]; unsigned int j; unsigned int b; int pos; for (j = 0;j < 32;++j) xzm1[j] = work[j]; xzm1[32] = 1; for (j = 33;j < 64;++j) xzm1[j] = 0; xzm[0] = 1; for (j = 1;j < 64;++j) xzm[j] = 0; for (pos = 254;pos >= 0;--pos) { b = (unsigned int)(e[pos / 8] >> (pos & 7)); b &= 1; smc_select(xzmb,xzm1b,xzm,xzm1,b); add(a0,xzmb,xzmb + 32); sub(a0 + 32,xzmb,xzmb + 32); add(a1,xzm1b,xzm1b + 32); sub(a1 + 32,xzm1b,xzm1b + 32); square(b0,a0); square(b0 + 32,a0 + 32); mult(b1,a1,a0 + 32); mult(b1 + 32,a1 + 32,a0); add(c1,b1,b1 + 32); sub(c1 + 32,b1,b1 + 32); square(r,c1 + 32); sub(s,b0,b0 + 32); mult121665(t,s); add(u,t,b0); mult(xznb,b0,b0 + 32); mult(xznb + 32,s,u); square(xzn1b,c1); mult(xzn1b + 32,r,work); smc_select(xzm,xzm1,xznb,xzn1b,b); } for (j = 0;j < 64;++j) work[j] = xzm[j]; } static void recip(unsigned int out[32],const unsigned int z[32]) { unsigned int z2[32]; unsigned int z9[32]; unsigned int z11[32]; unsigned int z2_5_0[32]; unsigned int z2_10_0[32]; unsigned int z2_20_0[32]; unsigned int z2_50_0[32]; unsigned int z2_100_0[32]; unsigned int t0[32]; unsigned int t1[32]; int i; /* 2 */ square(z2,z); /* 4 */ square(t1,z2); /* 8 */ square(t0,t1); /* 9 */ mult(z9,t0,z); /* 11 */ mult(z11,z9,z2); /* 22 */ square(t0,z11); /* 2^5 - 2^0 = 31 */ mult(z2_5_0,t0,z9); /* 2^6 - 2^1 */ square(t0,z2_5_0); /* 2^7 - 2^2 */ square(t1,t0); /* 2^8 - 2^3 */ square(t0,t1); /* 2^9 - 2^4 */ square(t1,t0); /* 2^10 - 2^5 */ square(t0,t1); /* 2^10 - 2^0 */ mult(z2_10_0,t0,z2_5_0); /* 2^11 - 2^1 */ square(t0,z2_10_0); /* 2^12 - 2^2 */ square(t1,t0); /* 2^20 - 2^10 */ for (i = 2;i < 10;i += 2) { square(t0,t1); square(t1,t0); } /* 2^20 - 2^0 */ mult(z2_20_0,t1,z2_10_0); /* 2^21 - 2^1 */ square(t0,z2_20_0); /* 2^22 - 2^2 */ square(t1,t0); /* 2^40 - 2^20 */ for (i = 2;i < 20;i += 2) { square(t0,t1); square(t1,t0); } /* 2^40 - 2^0 */ mult(t0,t1,z2_20_0); /* 2^41 - 2^1 */ square(t1,t0); /* 2^42 - 2^2 */ square(t0,t1); /* 2^50 - 2^10 */ for (i = 2;i < 10;i += 2) { square(t1,t0); square(t0,t1); } /* 2^50 - 2^0 */ mult(z2_50_0,t0,z2_10_0); /* 2^51 - 2^1 */ square(t0,z2_50_0); /* 2^52 - 2^2 */ square(t1,t0); /* 2^100 - 2^50 */ for (i = 2;i < 50;i += 2) { square(t0,t1); square(t1,t0); } /* 2^100 - 2^0 */ mult(z2_100_0,t1,z2_50_0); /* 2^101 - 2^1 */ square(t1,z2_100_0); /* 2^102 - 2^2 */ square(t0,t1); /* 2^200 - 2^100 */ for (i = 2;i < 100;i += 2) { square(t1,t0); square(t0,t1); } /* 2^200 - 2^0 */ mult(t1,t0,z2_100_0); /* 2^201 - 2^1 */ square(t0,t1); /* 2^202 - 2^2 */ square(t1,t0); /* 2^250 - 2^50 */ for (i = 2;i < 50;i += 2) { square(t0,t1); square(t1,t0); } /* 2^250 - 2^0 */ mult(t0,t1,z2_50_0); /* 2^251 - 2^1 */ square(t1,t0); /* 2^252 - 2^2 */ square(t0,t1); /* 2^253 - 2^3 */ square(t1,t0); /* 2^254 - 2^4 */ square(t0,t1); /* 2^255 - 2^5 */ square(t1,t0); /* 2^255 - 21 */ mult(out,t1,z11); } int crypto_scalarmult_curve25519(unsigned char *q, const unsigned char *n, const unsigned char *p) { unsigned int work[96]; unsigned char e[32]; unsigned int i; for (i = 0;i < 32;++i) e[i] = n[i]; e[0] &= 248; e[31] &= 127; e[31] |= 64; for (i = 0;i < 32;++i) work[i] = p[i]; mainloop(work,e); recip(work + 32,work + 32); mult(work + 64,work,work + 32); freeze(work + 64); for (i = 0;i < 32;++i) q[i] = (unsigned char)work[64 + i]; return 0; } libwebsockets-4.3.5/plugins/ssh-base/include/000077500000000000000000000000001476025525100212035ustar00rootroot00000000000000libwebsockets-4.3.5/plugins/ssh-base/include/lws-plugin-ssh.h000066400000000000000000000342041476025525100242530ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #if !defined(__LWS_PLUGIN_SSH_H__) #define __LWS_PLUGIN_SSH_H__ #define LWS_CALLBACK_SSH_UART_SET_RXFLOW (LWS_CALLBACK_USER + 800) #define LWS_SSH_OPS_VERSION 2 struct lws_ssh_pty { char term[16]; char *modes; uint32_t width_ch; uint32_t height_ch; uint32_t width_px; uint32_t height_px; uint32_t modes_len; }; #define SSHMO_TTY_OP_END 0 /* Indicates end of options. */ #define SSHMO_VINTR 1 /* Interrupt character; 255 if none. Similarly * for the other characters. Not all of these * characters are supported on all systems. */ #define SSHMO_VQUIT 2 /* The quit character (sends SIGQUIT signal on * POSIX systems). */ #define SSHMO_VERASE 3 /* Erase the character to left of the cursor. */ #define SSHMO_VKILL 4 /* Kill the current input line. */ #define SSHMO_VEOF 5 /* End-of-file character (sends EOF from the * terminal). */ #define SSHMO_VEOL 6 /* End-of-line character in addition to * carriage return and/or linefeed. */ #define SSHMO_VEOL2 7 /* Additional end-of-line character. */ #define SSHMO_VSTART 8 /* Continues paused output (normally * control-Q). */ #define SSHMO_VSTOP 9 /* Pauses output (normally control-S). */ #define SSHMO_VSUSP 10 /* Suspends the current program. */ #define SSHMO_VDSUSP 11 /* Another suspend character. */ #define SSHMO_VREPRINT 12 /* Reprints the current input line. */ #define SSHMO_VWERASE 13 /* Erases a word left of cursor. */ #define SSHMO_VLNEXT 14 /* Enter the next character typed literally, * even if it is a special character */ #define SSHMO_VFLUSH 15 /* Character to flush output. */ #define SSHMO_VSWTCH 16 /* Switch to a different shell layer. */ #define SSHMO_VSTATUS 17 /* Prints system status line (load, command, * pid, etc). */ #define SSHMO_VDISCARD 18 /* Toggles the flushing of terminal output. */ #define SSHMO_IGNPAR 30 /* The ignore parity flag. The parameter * SHOULD be 0 if this flag is FALSE, * and 1 if it is TRUE. */ #define SSHMO_PARMRK 31 /* Mark parity and framing errors. */ #define SSHMO_INPCK 32 /* Enable checking of parity errors. */ #define SSHMO_ISTRIP 33 /* Strip 8th bit off characters. */ #define SSHMO_INLCR 34 /* Map NL into CR on input. */ #define SSHMO_IGNCR 35 /* Ignore CR on input. */ #define SSHMO_ICRNL 36 /* Map CR to NL on input. */ #define SSHMO_IUCLC 37 /* Translate uppercase characters to lowercase. */ #define SSHMO_IXON 38 /* Enable output flow control. */ #define SSHMO_IXANY 39 /* Any char will restart after stop. */ #define SSHMO_IXOFF 40 /* Enable input flow control. */ #define SSHMO_IMAXBEL 41 /* Ring bell on input queue full. */ #define SSHMO_ISIG 50 /* Enable signals INTR, QUIT, [D]SUSP. */ #define SSHMO_ICANON 51 /* Canonicalize input lines. */ #define SSHMO_XCASE 52 /* Enable input and output of uppercase * characters by preceding their lowercase * equivalents with "\". */ #define SSHMO_ECHO 53 /* Enable echoing. */ #define SSHMO_ECHOE 54 /* Visually erase chars. */ #define SSHMO_ECHOK 55 /* Kill character discards current line. */ #define SSHMO_ECHONL 56 /* Echo NL even if ECHO is off. */ #define SSHMO_NOFLSH 57 /* Don't flush after interrupt. */ #define SSHMO_TOSTOP 58 /* Stop background jobs from output. */ #define SSHMO_IEXTEN 59 /* Enable extensions. */ #define SSHMO_ECHOCTL 60 /* Echo control characters as ^(Char). */ #define SSHMO_ECHOKE 61 /* Visual erase for line kill. */ #define SSHMO_PENDIN 62 /* Retype pending input. */ #define SSHMO_OPOST 70 /* Enable output processing. */ #define SSHMO_OLCUC 71 /* Convert lowercase to uppercase. */ #define SSHMO_ONLCR 72 /* Map NL to CR-NL. */ #define SSHMO_OCRNL 73 /* Translate carriage return to newline (out). */ #define SSHMO_ONOCR 74 /* Translate newline to CR-newline (out). */ #define SSHMO_ONLRET 75 /* Newline performs a carriage return (out). */ #define SSHMO_CS7 90 /* 7 bit mode. */ #define SSHMO_CS8 91 /* 8 bit mode. */ #define SSHMO_PARENB 92 /* Parity enable. */ #define SSHMO_PARODD 93 /* Odd parity, else even. */ #define SSHMO_TTY_OP_ISPEED 128 /* Specifies the input baud rate in * bits per second. */ #define SSHMO_TTY_OP_OSPEED 129 /* Specifies the output baud rate in * bits per second. */ /*! \defgroup ssh-base plugin: lws-ssh-base * \ingroup Protocols-and-Plugins * * ##Plugin lws-ssh-base * * This is the interface to customize the ssh server per-vhost. A pointer * to your struct lws_ssh_ops with the members initialized is passed in using * pvo when you create the vhost. The pvo is attached to the protocol name * * - "lws-ssh-base" - the ssh serving part * * - "lws-telnetd-base" - the telnet serving part * * This way you can have different instances of ssh servers wired up to * different IO and server keys per-vhost. * * See also ./READMEs/README-plugin-sshd-base.md */ ///@{ typedef void (*lws_ssh_finish_exec)(void *handle, int retcode); struct lws_ssh_ops { /** * channel_create() - Channel created * * \param wsi: raw wsi representing this connection * \param priv: pointer to void * you can allocate and attach to the * channel * * Called when new channel created, *priv should be set to any * allocation your implementation needs * * You probably want to save the wsi inside your priv struct. Calling * lws_callback_on_writable() on this wsi causes your ssh server * instance to call .tx_waiting() next time you can write something * to the client. */ int (*channel_create)(struct lws *wsi, void **priv); /** * channel_destroy() - Channel is being destroyed * * \param priv: void * you set when channel was created (or NULL) * * Called when channel destroyed, priv should be freed if you allocated * into it. */ int (*channel_destroy)(void *priv); /** * rx() - receive payload from peer * * \param priv: void * you set when this channel was created * \param wsi: struct lws * for the ssh connection * \param buf: pointer to start of received data * \param len: bytes of received data available at buf * * len bytes of payload from the peer arrived and is available at buf */ int (*rx)(void *priv, struct lws *wsi, const uint8_t *buf, uint32_t len); /** * tx_waiting() - report if data waiting to transmit on the channel * * \param priv: void * you set when this channel was created * * returns a bitmask of LWS_STDOUT and LWS_STDERR, with the bits set * if they have tx waiting to send, else 0 if nothing to send * * You should use one of the lws_callback_on_writable() family to * trigger the ssh protocol to ask if you have any tx waiting. * * Returning -1 from here will close the tcp connection to the client. */ int (*tx_waiting)(void *priv); /** * tx() - provide data to send on the channel * * \param priv: void * you set when this channel was created * \param stdch: LWS_STDOUT or LWS_STDERR * \param buf: start of the buffer to copy the transmit data into * \param len: max length of the buffer in bytes * * copy and consume up to len bytes into *buf, * return the actual copied count. * * You should use one of the lws_callback_on_writable() family to * trigger the ssh protocol to ask if you have any tx waiting. If you * do you will get calls here to fetch it, for each of LWS_STDOUT or * LWS_STDERR that were reported to be waiting by tx_waiting(). */ size_t (*tx)(void *priv, int stdch, uint8_t *buf, size_t len); /** * get_server_key() - retreive the secret keypair for this server * * \param wsi: the wsi representing the connection to the client * \param buf: start of the buffer to copy the keypair into * \param len: length of the buffer in bytes * * load the server key into buf, max len len. Returns length of buf * set to key, or 0 if no key or other error. If there is no key, * the error isn't fatal... the plugin will generate a random key and * store it using *get_server_key() for subsequent times. */ size_t (*get_server_key)(struct lws *wsi, uint8_t *buf, size_t len); /** * set_server_key() - store the secret keypair of this server * * \param wsi: the wsi representing the connection to the client * \param buf: start of the buffer containing the keypair * \param len: length of the keypair in bytes * * store the server key in buf, length len, to nonvolatile stg. * Return length stored, 0 for fail. */ size_t (*set_server_key)(struct lws *wsi, uint8_t *buf, size_t len); /** * set_env() - Set environment variable * * \param priv: void * you set when this channel was created * \param name: env var name * \param value: value to set env var to * * Client requested to set environment var. Return nonzero to fail. */ int (*set_env)(void *priv, const char *name, const char *value); /** * exec() - spawn command and wire up stdin/out/err to ssh channel * * \param priv: void * you set when this channel was created * \param wsi: the struct lws the connection belongs to * \param command: string containing path to app and arguments * \param finish: function to call to indicate the exec finished * \param finish_handle: opaque handle identifying this exec for use with \p finish * * Client requested to exec something. Return nonzero to fail. */ int (*exec)(void *priv, struct lws *wsi, const char *command, lws_ssh_finish_exec finish, void *finish_handle); /** * shell() - Spawn shell that is appropriate for user * * \param priv: void * you set when this channel was created * \param wsi: the struct lws the connection belongs to * \param finish: function to call to indicate the exec finished * \param finish_handle: opaque handle identifying this exec for use with \p finish * * Spawn the appropriate shell for this user. Return 0 for OK * or nonzero to fail. */ int (*shell)(void *priv, struct lws *wsi, lws_ssh_finish_exec finish, void *finish_handle); /** * pty_req() - Create a Pseudo-TTY as described in pty * * \param priv: void * you set when this channel was created * \param pty: pointer to struct describing the desired pty * * Client requested a pty. Return nonzero to fail. */ int (*pty_req)(void *priv, struct lws_ssh_pty *pty); /** * child_process_io() - Child process has IO * * \param priv: void * you set when this channel was created * \param wsi: the struct lws the connection belongs to * \param args: information related to the cgi IO events * * Child process has IO */ int (*child_process_io)(void *priv, struct lws *wsi, struct lws_cgi_args *args); /** * child_process_io() - Child process has terminated * * \param priv: void * you set when this channel was created * \param wsi: the struct lws the connection belongs to * * Child process has terminated */ int (*child_process_terminated)(void *priv, struct lws *wsi); /** * disconnect_reason() - Optional notification why connection is lost * * \param reason: one of the SSH_DISCONNECT_ constants * \param desc: UTF-8 description of reason * \param desc_lang: RFC3066 language for description * * The remote peer may tell us why it's going to disconnect. Handling * this is optional. */ void (*disconnect_reason)(uint32_t reason, const char *desc, const char *desc_lang); /** * is_pubkey_authorized() - check if auth pubkey is valid for user * * \param username: username the key attempted to authenticate * \param type: "ssh-rsa" * \param peer: start of Public key peer used to authenticate * \param peer_len: length of Public key at peer * * We confirmed the client has the private key for this public key... * but is that keypair something authorized for this username on this * server? 0 = OK, 1 = fail * * Normally this checks for a copy of the same public key stored * somewhere out of band, it's the same procedure as openssh does * when looking in ~/.ssh/authorized_keys */ int (*is_pubkey_authorized)(const char *username, const char *type, const uint8_t *peer, int peer_len); /** * banner() - copy the connection banner to buffer * * \param buf: start of the buffer to copy to * \param max_len: maximum number of bytes the buffer can hold * \param lang: start of the buffer to copy language descriptor to * \param max_lang_len: maximum number of bytes lang can hold * * Copy the text banner to be returned to client on connect, * before auth, into buf. The text should be in UTF-8. * if none wanted then leave .banner as NULL. * * lang should have a RFC3066 language descriptor like "en/US" * copied to it. * * Returns the number of bytes copies to buf. */ size_t (*banner)(char *buf, size_t max_len, char *lang, size_t max_lang_len); /** * SSH version string sent to client (required) * By convention a string like "SSH-2.0-Libwebsockets" */ const char *server_string; /** * set to the API version you support (current is in * LWS_SSH_OPS_VERSION) You should set it to an integer like 1, * that reflects the latest api at the time your code was written. If * the ops api_version is not equal to the LWS_SSH_OPS_VERSION of the * plugin, it will error out at runtime. */ char api_version; }; ///@} #endif libwebsockets-4.3.5/plugins/ssh-base/include/lws-plugin-sshd-static-build-includes.h000066400000000000000000000010621476025525100306010ustar00rootroot00000000000000/* * If you are including the plugin into your code using static build, you * can simplify it by just including this file, which will include all the * related code in one step without you having to get involved in the detail. */ #define LWS_PLUGIN_STATIC #include "../crypto/chacha.c" #include "../crypto/ed25519.c" #include "../crypto/fe25519.c" #include "../crypto/ge25519.c" #include "../crypto/poly1305.c" #include "../crypto/sc25519.c" #include "../crypto/smult_curve25519_ref.c" #include "../kex-25519.c" #include "../sshd.c" #include "../telnet.c" libwebsockets-4.3.5/plugins/ssh-base/include/lws-ssh.h000066400000000000000000000373151476025525100227650ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #if !defined(__LWS_SSH_H__) #define __LWS_SSH_H__ #if defined(LWS_HAVE_SYS_TYPES_H) #include #endif #if defined(LWS_WITH_MBEDTLS) #include "mbedtls/sha1.h" #include "mbedtls/sha256.h" #include "mbedtls/sha512.h" #include "mbedtls/rsa.h" #endif #include "lws-plugin-ssh.h" #define LWS_SIZE_EC25519 32 #define LWS_SIZE_EC25519_PUBKEY 32 #define LWS_SIZE_EC25519_PRIKEY 64 #define LWS_SIZE_SHA256 32 #define LWS_SIZE_SHA512 64 #define LWS_SIZE_AES256_KEY 32 #define LWS_SIZE_AES256_IV 12 #define LWS_SIZE_AES256_MAC 16 #define LWS_SIZE_AES256_BLOCK 16 #define LWS_SIZE_CHACHA256_KEY (2 * 32) #define POLY1305_TAGLEN 16 #define POLY1305_KEYLEN 32 #define crypto_hash_sha512_BYTES 64U #define PEEK_U64(p) \ (((uint64_t)(((const uint8_t *)(p))[0]) << 56) | \ ((uint64_t)(((const uint8_t *)(p))[1]) << 48) | \ ((uint64_t)(((const uint8_t *)(p))[2]) << 40) | \ ((uint64_t)(((const uint8_t *)(p))[3]) << 32) | \ ((uint64_t)(((const uint8_t *)(p))[4]) << 24) | \ ((uint64_t)(((const uint8_t *)(p))[5]) << 16) | \ ((uint64_t)(((const uint8_t *)(p))[6]) << 8) | \ (uint64_t)(((const uint8_t *)(p))[7])) #define PEEK_U32(p) \ (((uint32_t)(((const uint8_t *)(p))[0]) << 24) | \ ((uint32_t)(((const uint8_t *)(p))[1]) << 16) | \ ((uint32_t)(((const uint8_t *)(p))[2]) << 8) | \ (uint32_t)(((const uint8_t *)(p))[3])) #define PEEK_U16(p) \ (((uint16_t)(((const uint8_t *)(p))[0]) << 8) | \ (uint16_t)(((const uint8_t *)(p))[1])) #define POKE_U64(p, v) \ do { \ const uint64_t __v = (v); \ ((uint8_t *)(p))[0] = (uint8_t)((__v >> 56) & 0xff); \ ((uint8_t *)(p))[1] = (uint8_t)((__v >> 48) & 0xff); \ ((uint8_t *)(p))[2] = (uint8_t)((__v >> 40) & 0xff); \ ((uint8_t *)(p))[3] = (uint8_t)((__v >> 32) & 0xff); \ ((uint8_t *)(p))[4] = (uint8_t)((__v >> 24) & 0xff); \ ((uint8_t *)(p))[5] = (uint8_t)((__v >> 16) & 0xff); \ ((uint8_t *)(p))[6] = (uint8_t)((__v >> 8) & 0xff); \ ((uint8_t *)(p))[7] = (uint8_t)(__v & 0xff); \ } while (0) #define POKE_U32(p, v) \ do { \ const uint32_t __v = (v); \ ((uint8_t *)(p))[0] = (uint8_t)((__v >> 24) & 0xff); \ ((uint8_t *)(p))[1] = (uint8_t)((__v >> 16) & 0xff); \ ((uint8_t *)(p))[2] = (uint8_t)((__v >> 8) & 0xff); \ ((uint8_t *)(p))[3] = (uint8_t)(__v & 0xff); \ } while (0) #define POKE_U16(p, v) \ do { \ const uint16_t __v = (v); \ ((uint8_t *)(p))[0] = (__v >> 8) & 0xff; \ ((uint8_t *)(p))[1] = __v & 0xff; \ } while (0) enum { SSH_MSG_DISCONNECT = 1, SSH_MSG_IGNORE = 2, SSH_MSG_UNIMPLEMENTED = 3, SSH_MSG_DEBUG = 4, SSH_MSG_SERVICE_REQUEST = 5, SSH_MSG_SERVICE_ACCEPT = 6, SSH_MSG_KEXINIT = 20, SSH_MSG_NEWKEYS = 21, /* 30 .. 49: KEX messages specific to KEX protocol */ SSH_MSG_KEX_ECDH_INIT = 30, SSH_MSG_KEX_ECDH_REPLY = 31, /* 50... userauth */ SSH_MSG_USERAUTH_REQUEST = 50, SSH_MSG_USERAUTH_FAILURE = 51, SSH_MSG_USERAUTH_SUCCESS = 52, SSH_MSG_USERAUTH_BANNER = 53, /* 60... publickey */ SSH_MSG_USERAUTH_PK_OK = 60, /* 80... connection */ SSH_MSG_GLOBAL_REQUEST = 80, SSH_MSG_REQUEST_SUCCESS = 81, SSH_MSG_REQUEST_FAILURE = 82, SSH_MSG_CHANNEL_OPEN = 90, SSH_MSG_CHANNEL_OPEN_CONFIRMATION = 91, SSH_MSG_CHANNEL_OPEN_FAILURE = 92, SSH_MSG_CHANNEL_WINDOW_ADJUST = 93, SSH_MSG_CHANNEL_DATA = 94, SSH_MSG_CHANNEL_EXTENDED_DATA = 95, SSH_MSG_CHANNEL_EOF = 96, SSH_MSG_CHANNEL_CLOSE = 97, SSH_MSG_CHANNEL_REQUEST = 98, SSH_MSG_CHANNEL_SUCCESS = 99, SSH_MSG_CHANNEL_FAILURE = 100, SSH_EXTENDED_DATA_STDERR = 1, SSH_CH_TYPE_SESSION = 1, SSH_CH_TYPE_SCP = 2, SSH_CH_TYPE_SFTP = 3, SSH_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECT = 1, SSH_DISCONNECT_PROTOCOL_ERROR = 2, SSH_DISCONNECT_KEY_EXCHANGE_FAILED = 3, SSH_DISCONNECT_RESERVED = 4, SSH_DISCONNECT_MAC_ERROR = 5, SSH_DISCONNECT_COMPRESSION_ERROR = 6, SSH_DISCONNECT_SERVICE_NOT_AVAILABLE = 7, SSH_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED = 8, SSH_DISCONNECT_HOST_KEY_NOT_VERIFIABLE = 9, SSH_DISCONNECT_CONNECTION_LOST = 10, SSH_DISCONNECT_BY_APPLICATION = 11, SSH_DISCONNECT_TOO_MANY_CONNECTIONS = 12, SSH_DISCONNECT_AUTH_CANCELLED_BY_USER = 13, SSH_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE = 14, SSH_DISCONNECT_ILLEGAL_USER_NAME = 15, SSH_OPEN_ADMINISTRATIVELY_PROHIBITED = 1, SSH_OPEN_CONNECT_FAILED = 2, SSH_OPEN_UNKNOWN_CHANNEL_TYPE = 3, SSH_OPEN_RESOURCE_SHORTAGE = 4, KEX_STATE_EXPECTING_CLIENT_OFFER = 0, KEX_STATE_REPLIED_TO_OFFER, KEX_STATE_CRYPTO_INITIALIZED, SSH_KEYIDX_IV = 0, SSH_KEYIDX_ENC, SSH_KEYIDX_INTEG, /* things we may write on the connection */ SSH_WT_NONE = 0, SSH_WT_VERSION, SSH_WT_OFFER, SSH_WT_OFFER_REPLY, SSH_WT_SEND_NEWKEYS, SSH_WT_UA_ACCEPT, SSH_WT_UA_FAILURE, SSH_WT_UA_BANNER, SSH_WT_UA_PK_OK, SSH_WT_UA_SUCCESS, SSH_WT_CH_OPEN_CONF, SSH_WT_CH_FAILURE, SSH_WT_CHRQ_SUCC, SSH_WT_CHRQ_FAILURE, SSH_WT_SCP_ACK_OKAY, SSH_WT_SCP_ACK_ERROR, SSH_WT_CH_CLOSE, SSH_WT_CH_EOF, SSH_WT_WINDOW_ADJUST, SSH_WT_EXIT_STATUS, /* RX parser states */ SSH_INITIALIZE_TRANSIENT = 0, SSHS_IDSTRING, SSHS_IDSTRING_CR, SSHS_MSG_LEN, SSHS_MSG_PADDING, SSHS_MSG_ID, SSH_KEX_STATE_COOKIE, SSH_KEX_NL_KEX_ALGS_LEN, SSH_KEX_NL_KEX_ALGS, SSH_KEX_NL_SHK_ALGS_LEN, SSH_KEX_NL_SHK_ALGS, SSH_KEX_NL_EACTS_ALGS_LEN, SSH_KEX_NL_EACTS_ALGS, SSH_KEX_NL_EASTC_ALGS_LEN, SSH_KEX_NL_EASTC_ALGS, SSH_KEX_NL_MACTS_ALGS_LEN, SSH_KEX_NL_MACTS_ALGS, SSH_KEX_NL_MASTC_ALGS_LEN, SSH_KEX_NL_MASTC_ALGS, SSH_KEX_NL_CACTS_ALGS_LEN, SSH_KEX_NL_CACTS_ALGS, SSH_KEX_NL_CASTC_ALGS_LEN, SSH_KEX_NL_CASTC_ALGS, SSH_KEX_NL_LCTS_ALGS_LEN, SSH_KEX_NL_LCTS_ALGS, SSH_KEX_NL_LSTC_ALGS_LEN, SSH_KEX_NL_LSTC_ALGS, SSH_KEX_FIRST_PKT, SSH_KEX_RESERVED, SSH_KEX_STATE_ECDH_KEYLEN, SSH_KEX_STATE_ECDH_Q_C, SSHS_MSG_EAT_PADDING, SSH_KEX_STATE_SKIP, SSHS_GET_STRING_LEN, SSHS_GET_STRING, SSHS_GET_STRING_LEN_ALLOC, SSHS_GET_STRING_ALLOC, SSHS_DO_SERVICE_REQUEST, SSHS_DO_UAR_SVC, SSHS_DO_UAR_PUBLICKEY, SSHS_NVC_DO_UAR_CHECK_PUBLICKEY, SSHS_DO_UAR_SIG_PRESENT, SSHS_NVC_DO_UAR_ALG, SSHS_NVC_DO_UAR_PUBKEY_BLOB, SSHS_NVC_DO_UAR_SIG, SSHS_GET_U32, SSHS_NVC_CHOPEN_TYPE, SSHS_NVC_CHOPEN_SENDER_CH, SSHS_NVC_CHOPEN_WINSIZE, SSHS_NVC_CHOPEN_PKTSIZE, SSHS_NVC_CHRQ_RECIP, SSHS_NVC_CHRQ_TYPE, SSHS_CHRQ_WANT_REPLY, SSHS_NVC_CHRQ_TERM, SSHS_NVC_CHRQ_TW, SSHS_NVC_CHRQ_TH, SSHS_NVC_CHRQ_TWP, SSHS_NVC_CHRQ_THP, SSHS_NVC_CHRQ_MODES, SSHS_NVC_CHRQ_ENV_NAME, SSHS_NVC_CHRQ_ENV_VALUE, SSHS_NVC_CHRQ_EXEC_CMD, SSHS_NVC_CHRQ_SUBSYSTEM, SSHS_NVC_CHRQ_WNDCHANGE_TW, SSHS_NVC_CHRQ_WNDCHANGE_TH, SSHS_NVC_CHRQ_WNDCHANGE_TWP, SSHS_NVC_CHRQ_WNDCHANGE_THP, SSHS_NVC_CH_EOF, SSHS_NVC_CH_CLOSE, SSHS_NVC_CD_RECIP, SSHS_NVC_CD_DATA, SSHS_NVC_CD_DATA_ALLOC, SSHS_NVC_WA_RECIP, SSHS_NVC_WA_ADD, SSHS_NVC_DISCONNECT_REASON, SSHS_NVC_DISCONNECT_DESC, SSHS_NVC_DISCONNECT_LANG, SSHS_SCP_COLLECTSTR = 0, SSHS_SCP_PAYLOADIN = 1, /* from https://tools.ietf.org/html/draft-ietf-secsh-filexfer-13 */ SECSH_FILEXFER_VERSION = 6, /* sftp packet types */ SSH_FXP_INIT = 1, SSH_FXP_VERSION = 2, SSH_FXP_OPEN = 3, SSH_FXP_CLOSE = 4, SSH_FXP_READ = 5, SSH_FXP_WRITE = 6, SSH_FXP_LSTAT = 7, SSH_FXP_FSTAT = 8, SSH_FXP_SETSTAT = 9, SSH_FXP_FSETSTAT = 10, SSH_FXP_OPENDIR = 11, SSH_FXP_READDIR = 12, SSH_FXP_REMOVE = 13, SSH_FXP_MKDIR = 14, SSH_FXP_RMDIR = 15, SSH_FXP_REALPATH = 16, SSH_FXP_STAT = 17, SSH_FXP_RENAME = 18, SSH_FXP_READLINK = 19, SSH_FXP_LINK = 21, SSH_FXP_BLOCK = 22, SSH_FXP_UNBLOCK = 23, SSH_FXP_STATUS = 101, SSH_FXP_HANDLE = 102, SSH_FXP_DATA = 103, SSH_FXP_NAME = 104, SSH_FXP_ATTRS = 105, SSH_FXP_EXTENDED = 200, SSH_FXP_EXTENDED_REPLY = 201, /* sftp return codes */ SSH_FX_OK = 0, SSH_FX_EOF = 1, SSH_FX_NO_SUCH_FILE = 2, SSH_FX_PERMISSION_DENIED = 3, SSH_FX_FAILURE = 4, SSH_FX_BAD_MESSAGE = 5, SSH_FX_NO_CONNECTION = 6, SSH_FX_CONNECTION_LOST = 7, SSH_FX_OP_UNSUPPORTED = 8, SSH_FX_INVALID_HANDLE = 9, SSH_FX_NO_SUCH_PATH = 10, SSH_FX_FILE_ALREADY_EXISTS = 11, SSH_FX_WRITE_PROTECT = 12, SSH_FX_NO_MEDIA = 13, SSH_FX_NO_SPACE_ON_FILESYSTEM = 14, SSH_FX_QUOTA_EXCEEDED = 15, SSH_FX_UNKNOWN_PRINCIPAL = 16, SSH_FX_LOCK_CONFLICT = 17, SSH_FX_DIR_NOT_EMPTY = 18, SSH_FX_NOT_A_DIRECTORY = 19, SSH_FX_INVALID_FILENAME = 20, SSH_FX_LINK_LOOP = 21, SSH_FX_CANNOT_DELETE = 22, SSH_FX_INVALID_PARAMETER = 23, SSH_FX_FILE_IS_A_DIRECTORY = 24, SSH_FX_BYTE_RANGE_LOCK_CONFLICT = 25, SSH_FX_BYTE_RANGE_LOCK_REFUSED = 26, SSH_FX_DELETE_PENDING = 27, SSH_FX_FILE_CORRUPT = 28, SSH_FX_OWNER_INVALID = 29, SSH_FX_GROUP_INVALID = 30, SSH_FX_NO_MATCHING_BYTE_RANGE_LOCK = 31, SSH_PENDING_TIMEOUT_CONNECT_TO_SUCCESSFUL_AUTH = PENDING_TIMEOUT_USER_REASON_BASE + 0, SSH_AUTH_STATE_NO_AUTH = 0, SSH_AUTH_STATE_GAVE_AUTH_IGNORE_REQS = 1, }; #define LWS_SSH_INITIAL_WINDOW 16384 struct lws_ssh_userauth { struct lws_genhash_ctx hash_ctx; char *username; char *service; char *alg; uint8_t *pubkey; uint32_t pubkey_len; uint8_t *sig; uint32_t sig_len; char sig_present; }; struct lws_ssh_keys { /* 3 == SSH_KEYIDX_IV (len=4), SSH_KEYIDX_ENC, SSH_KEYIDX_INTEG */ uint8_t key[3][LWS_SIZE_CHACHA256_KEY]; /* opaque allocation made when cipher activated */ void *cipher; uint8_t MAC_length; uint8_t padding_alignment; /* block size */ uint8_t valid:1; uint8_t full_length:1; }; struct lws_kex { uint8_t kex_r[256]; uint8_t Q_C[LWS_SIZE_EC25519]; /* client eph public key aka 'e' */ uint8_t eph_pri_key[LWS_SIZE_EC25519]; /* server eph private key */ uint8_t Q_S[LWS_SIZE_EC25519]; /* server ephemeral public key */ uint8_t kex_cookie[16]; uint8_t *I_C; /* malloc'd copy of client KEXINIT payload */ uint8_t *I_S; /* malloc'd copy of server KEXINIT payload */ uint32_t I_C_payload_len; uint32_t I_C_alloc_len; uint32_t I_S_payload_len; uint32_t kex_r_len; uint8_t match_bitfield; uint8_t newkeys; /* which sides newkeys have been applied */ struct lws_ssh_keys keys_next_cts; struct lws_ssh_keys keys_next_stc; }; struct lws_subprotocol_scp { char fp[128]; uint64_t len; uint32_t attr; char cmd; char ips; }; typedef union { struct lws_subprotocol_scp scp; } lws_subprotocol; struct per_session_data__sshd; struct lws_ssh_channel { struct lws_ssh_channel *next; struct per_session_data__sshd *pss; lws_subprotocol *sub; /* NULL, or allocated subprotocol state */ void *priv; /* owned by user code */ int type; uint32_t server_ch; uint32_t sender_ch; int32_t window; int32_t peer_window_est; uint32_t max_pkt; uint32_t spawn_pid; int retcode; uint8_t scheduled_close:1; uint8_t sent_close:1; uint8_t received_close:1; }; struct per_vhost_data__sshd; struct per_session_data__sshd { struct per_session_data__sshd *next; struct per_vhost_data__sshd *vhd; struct lws *wsi; struct lws_kex *kex; char *disconnect_desc; uint8_t K[LWS_SIZE_EC25519]; /* shared secret */ uint8_t session_id[LWS_SIZE_SHA256]; /* H from first working KEX */ char name[64]; char last_auth_req_username[32]; char last_auth_req_service[32]; struct lws_ssh_keys active_keys_cts; struct lws_ssh_keys active_keys_stc; struct lws_ssh_userauth *ua; struct lws_ssh_channel *ch_list; struct lws_ssh_channel *ch_temp; uint8_t *last_alloc; union { struct lws_ssh_pty pty; char aux[64]; } args; uint32_t ssh_sequence_ctr_cts; uint32_t ssh_sequence_ctr_stc; uint64_t payload_bytes_cts; uint64_t payload_bytes_stc; uint32_t disconnect_reason; char V_C[64]; /* Client version String */ uint8_t packet_assembly[2048]; uint32_t pa_pos; uint32_t msg_len; uint32_t pos; uint32_t len; uint32_t ctr; uint32_t npos; uint32_t reason; uint32_t channel_doing_spawn; int next_ch_num; uint8_t K_S[LWS_SIZE_EC25519]; /* server public key */ uint32_t copy_to_I_C:1; uint32_t okayed_userauth:1; uint32_t sent_banner:1; uint32_t seen_auth_req_before:1; uint32_t serviced_stderr_last:1; uint32_t kex_state; uint32_t chrq_server_port; uint32_t ch_recip; uint32_t count_auth_attempts; char parser_state; char state_after_string; char first_coming; uint8_t rq_want_reply; uint8_t ssh_auth_state; uint8_t msg_id; uint8_t msg_padding; uint8_t write_task[8]; struct lws_ssh_channel *write_channel[8]; uint8_t wt_head, wt_tail; }; struct per_vhost_data__sshd { struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; struct per_session_data__sshd *live_pss_list; const struct lws_ssh_ops *ops; }; struct host_keys { uint8_t *data; uint32_t len; }; extern struct host_keys host_keys[]; extern int crypto_scalarmult_curve25519(unsigned char *q, const unsigned char *n, const unsigned char *p); extern int ed25519_key_parse(uint8_t *p, size_t len, char *type, size_t type_len, uint8_t *pub, uint8_t *pri); extern int kex_ecdh(struct per_session_data__sshd *pss, uint8_t *result, uint32_t *plen); extern uint32_t lws_g32(uint8_t **p); extern uint32_t lws_p32(uint8_t *p, uint32_t v); extern int lws_timingsafe_bcmp(const void *a, const void *b, uint32_t len); extern const char *lws_V_S; extern int lws_chacha_activate(struct lws_ssh_keys *keys); extern void lws_chacha_destroy(struct lws_ssh_keys *keys); extern uint32_t lws_chachapoly_get_length(struct lws_ssh_keys *keys, uint32_t seq, const uint8_t *in4); extern void poly1305_auth(u_char out[POLY1305_TAGLEN], const u_char *m, size_t inlen, const u_char key[POLY1305_KEYLEN]); extern int lws_chacha_decrypt(struct lws_ssh_keys *keys, uint32_t seq, const uint8_t *ct, uint32_t len, uint8_t *pt); extern int lws_chacha_encrypt(struct lws_ssh_keys *keys, uint32_t seq, const uint8_t *ct, uint32_t len, uint8_t *pt); extern void lws_pad_set_length(struct per_session_data__sshd *pss, void *start, uint8_t **p, struct lws_ssh_keys *keys); extern size_t get_gen_server_key_25519(struct per_session_data__sshd *pss, uint8_t *b, size_t len); extern int crypto_sign_ed25519(unsigned char *sm, unsigned long long *smlen, const unsigned char *m, size_t mlen, const unsigned char *sk); extern int crypto_sign_ed25519_keypair(struct lws_context *context, uint8_t *pk, uint8_t *sk); #endif libwebsockets-4.3.5/plugins/ssh-base/kex-25519.c000066400000000000000000000345551476025525100212120ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "libwebsockets.h" #include "lws-ssh.h" #include /* * ssh-keygen -t ed25519 * head -n-1 srv-key-25519 | tail -n +2 | base64 -d | hexdump -C */ static void lws_sized_blob(uint8_t **p, void *blob, uint32_t len) { lws_p32((*p), len); *p += 4; memcpy(*p, blob, len); *p += len; } static const char key_leadin[] = "openssh-key-v1\x00\x00\x00\x00\x04none" "\x00\x00\x00\x04none\x00" "\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x33" "\x00\x00\x00\x0bssh-ed25519\x00\x00\x00\x20", key_sep[] = "\x00\x00\x00\x90\xb1\x4f\xa7\x28" "\xb1\x4f\xa7\x28\x00\x00\x00\x0bssh-ed25519" "\x00\x00\x00\x20", key_privl[] = "\x00\x00\x00\x40", key_trail[] = "\x00\x00\x00\x0cself-gen@cbl\x01"; static size_t lws_gen_server_key_ed25519(struct lws_context *context, uint8_t *buf256, size_t max_len) { uint8_t *p = buf256 + sizeof(key_leadin) - 1; if (max_len < sizeof(key_leadin) - 1 + 32 + sizeof(key_sep) - 1 + 32 + sizeof(key_privl) - 1 + 64 + sizeof(key_trail) - 1) return 0; memcpy(buf256, key_leadin, sizeof(key_leadin) - 1); crypto_sign_ed25519_keypair(context, p, p + 32 + sizeof(key_sep) - 1 + 32 + sizeof(key_privl) - 1); memcpy(p + 32 + sizeof(key_sep) - 1, p, 32); p += 32; memcpy(p, key_sep, sizeof(key_sep) - 1); p += sizeof(key_sep) - 1 + 32; memcpy(p, key_privl, sizeof(key_privl) - 1); p += sizeof(key_privl) - 1 + 64; memcpy(p, key_trail, sizeof(key_trail) - 1); p += sizeof(key_trail) - 1; lwsl_notice("%s: Generated key len %ld\n", __func__, (long)(p - buf256)); return (size_t)(p - buf256); } static int lws_mpint_rfc4251(uint8_t *dest, const uint8_t *src, int bytes, int uns) { uint8_t *odest = dest; while (!*src && bytes > 1) { src++; bytes--; } if (!*src) { *dest++ = 0; *dest++ = 0; *dest++ = 0; *dest++ = 0; return 4; } if (uns && (*src) & 0x80) bytes++; *dest++ = (uint8_t)(bytes >> 24); *dest++ = (uint8_t)(bytes >> 16); *dest++ = (uint8_t)(bytes >> 8); *dest++ = (uint8_t)(bytes); if (uns && (*src) & 0x80) { *dest++ = 0; bytes--; } while (bytes--) *dest++ = *src++; return lws_ptr_diff(dest, odest); } int ed25519_key_parse(uint8_t *p, size_t len, char *type, size_t type_len, uint8_t *pub, uint8_t *pri) { uint32_t l, publ, m; uint8_t *op = p; if (len < 180) return 1; if (memcmp(p, "openssh-key-v1", 14)) return 2; p += 15; l = lws_g32(&p); /* ciphername */ if (l != 4 || memcmp(p, "none", 4)) return 3; p += l; l = lws_g32(&p); /* kdfname */ if (l != 4 || memcmp(p, "none", 4)) return 4; p += l; l = lws_g32(&p); /* kdfoptions */ if (l) return 5; l = lws_g32(&p); /* number of keys */ if (l != 1) return 6; publ = lws_g32(&p); /* length of pubkey block */ if ((size_t)((uint32_t)(p - op) + publ) >= len) return 7; l = lws_g32(&p); /* key type length */ if (l > 31) return 8; m = l; if (m >= type_len) m = (uint32_t)type_len -1 ; lws_strncpy(type, (const char *)p, m + 1); p += l; l = lws_g32(&p); /* pub key length */ if (l != 32) return 10; p += l; publ = lws_g32(&p); /* length of private key block */ if ((size_t)((uint32_t)(p - op) + publ) != len) return 11; l = lws_g32(&p); /* checkint 1 */ if (lws_g32(&p) != l) /* must match checkint 2 */ return 12; l = lws_g32(&p); /* key type length */ p += l; l = lws_g32(&p); /* public key part length */ if (l != LWS_SIZE_EC25519_PUBKEY) return 15; if (pub) memcpy(pub, p, LWS_SIZE_EC25519_PUBKEY); p += l; l = lws_g32(&p); /* private key part length */ if (l != LWS_SIZE_EC25519_PRIKEY) return 16; if (pri) memcpy(pri, p, LWS_SIZE_EC25519_PRIKEY); return 0; } static int _genhash_update_len(struct lws_genhash_ctx *ctx, const void *input, size_t ilen) { uint32_t be; lws_p32((uint8_t *)&be, (uint32_t)ilen); if (lws_genhash_update(ctx, (uint8_t *)&be, 4)) return 1; if (lws_genhash_update(ctx, input, ilen)) return 1; return 0; } static int kex_ecdh_dv(uint8_t *dest, int dest_len, const uint8_t *kbi, int kbi_len, const uint8_t *H, char c, const uint8_t *session_id) { uint8_t pool[LWS_SIZE_SHA256]; struct lws_genhash_ctx ctx; int n = 0, m; /* * Key data MUST be taken from the beginning of the hash output. * As many bytes as needed are taken from the beginning of the hash * value. * * If the key length needed is longer than the output of the HASH, * the key is extended by computing HASH of the concatenation of K * and H and the entire key so far, and appending the resulting * bytes (as many as HASH generates) to the key. This process is * repeated until enough key material is available; the key is taken * from the beginning of this value. In other words: * * K1 = HASH(K || H || X || session_id) (X is e.g., "A") * K2 = HASH(K || H || K1) * K3 = HASH(K || H || K1 || K2) * ... * key = K1 || K2 || K3 || ... */ while (n < dest_len) { if (lws_genhash_init(&ctx, LWS_GENHASH_TYPE_SHA256)) return 1; if (lws_genhash_update(&ctx, kbi, (unsigned int)kbi_len)) goto hash_failed; if (lws_genhash_update(&ctx, H, LWS_SIZE_SHA256)) goto hash_failed; if (!n) { if (lws_genhash_update(&ctx, (void *)&c, 1)) goto hash_failed; if (lws_genhash_update(&ctx, session_id, LWS_SIZE_EC25519)) goto hash_failed; } else if (lws_genhash_update(&ctx, pool, LWS_SIZE_EC25519)) goto hash_failed; lws_genhash_destroy(&ctx, pool); m = LWS_SIZE_EC25519; if (m > (dest_len - n)) m = dest_len - n; memcpy(dest, pool, (unsigned int)m); n += m; dest += m; } return 0; hash_failed: lws_genhash_destroy(&ctx, NULL); return 1; } static const unsigned char basepoint[32] = { 9 }; size_t get_gen_server_key_25519(struct per_session_data__sshd *pss, uint8_t *b, size_t len) { size_t s, mylen; mylen = pss->vhd->ops->get_server_key(pss->wsi, b, len); if (mylen) return mylen; /* create one then */ lwsl_notice("Generating server hostkey\n"); s = lws_gen_server_key_ed25519(pss->vhd->context, b, len); lwsl_notice(" gen key len %ld\n", (long)s); if (!s) return 0; /* set the key */ if (!pss->vhd->ops->set_server_key(pss->wsi, b, s)) return 0; /* new key stored OK */ return s; } int kex_ecdh(struct per_session_data__sshd *pss, uint8_t *reply, uint32_t *plen) { uint8_t pri_key[64], temp[64], payload_sig[64 + 32], a, *lp, kbi[64]; struct lws_kex *kex = pss->kex; struct lws_genhash_ctx ctx; unsigned long long smlen; uint8_t *p = reply + 5; uint32_t be, kbi_len; uint8_t servkey[256]; char keyt[33]; int r, c; r = (int)get_gen_server_key_25519(pss, servkey, (int)sizeof(servkey)); if (!r) { lwsl_err("%s: Failed to get or gen server key\n", __func__); return 1; } r = ed25519_key_parse(servkey, (unsigned int)r, keyt, sizeof(keyt), pss->K_S /* public key */, pri_key); if (r) { lwsl_notice("%s: server key parse failed: %d\n", __func__, r); return 1; } keyt[32] = '\0'; lwsl_info("Server key type: %s\n", keyt); /* * 1) Generate ephemeral key pair [ eph_pri_key | kex->Q_S ] * 2) Compute shared secret. * 3) Generate and sign exchange hash. * * 1) A 32 bytes private key should be generated for each new * connection, using a secure PRNG. The following actions * must be done on the private key: * * mysecret[0] &= 248; * mysecret[31] &= 127; * mysecret[31] |= 64; */ lws_get_random(pss->vhd->context, kex->eph_pri_key, LWS_SIZE_EC25519); kex->eph_pri_key[0] &= 248; kex->eph_pri_key[31] &= 127; kex->eph_pri_key[31] |= 64; /* * 2) The public key is calculated using the cryptographic scalar * multiplication: * * const unsigned char privkey[32]; * unsigned char pubkey[32]; * * crypto_scalarmult (pubkey, privkey, basepoint); */ crypto_scalarmult_curve25519(kex->Q_S, kex->eph_pri_key, basepoint); a = 0; for (r = 0; r < (int)sizeof(kex->Q_S); r++) a |= kex->Q_S[r]; if (!a) { lwsl_notice("all zero pubkey\n"); return SSH_DISCONNECT_KEY_EXCHANGE_FAILED; } /* * The shared secret, k, is defined in SSH specifications to be a big * integer. This number is calculated using the following procedure: * * X is the 32 bytes point obtained by the scalar multiplication of * the other side's public key and the local private key scalar. */ crypto_scalarmult_curve25519(pss->K, kex->eph_pri_key, kex->Q_C); /* * The whole 32 bytes of the number X are then converted into a big * integer k. This conversion follows the network byte order. This * step differs from RFC5656. */ kbi_len = (uint32_t)lws_mpint_rfc4251(kbi, pss->K, LWS_SIZE_EC25519, 1); /* * The exchange hash H is computed as the hash of the concatenation of * the following: * * string V_C, the client's identification string (CR and LF * excluded) * string V_S, the server's identification string (CR and LF * excluded) * string I_C, the payload of the client's SSH_MSG_KEXINIT * string I_S, the payload of the server's SSH_MSG_KEXINIT * string K_S, the host key * mpint Q_C, exchange value sent by the client * mpint Q_S, exchange value sent by the server * mpint K, the shared secret * * However there are a lot of unwritten details in the hash * definition... */ if (lws_genhash_init(&ctx, LWS_GENHASH_TYPE_SHA256)) { lwsl_notice("genhash init failed\n"); return 1; } if (_genhash_update_len(&ctx, pss->V_C, strlen(pss->V_C))) goto hash_probs; if (_genhash_update_len(&ctx, pss->vhd->ops->server_string, /* aka V_S */ strlen(pss->vhd->ops->server_string))) goto hash_probs; if (_genhash_update_len(&ctx, kex->I_C, kex->I_C_payload_len)) goto hash_probs; if (_genhash_update_len(&ctx, kex->I_S, kex->I_S_payload_len)) goto hash_probs; /* * K_S (host public key) * * sum of name + key lengths and headers * name length: name * key length: key * ---> */ lws_p32((uint8_t *)&be, (uint32_t)(8 + (int)strlen(keyt) + LWS_SIZE_EC25519)); if (lws_genhash_update(&ctx, (void *)&be, 4)) goto hash_probs; if (_genhash_update_len(&ctx, keyt, strlen(keyt))) goto hash_probs; if (_genhash_update_len(&ctx, pss->K_S, LWS_SIZE_EC25519)) goto hash_probs; /* <---- */ if (_genhash_update_len(&ctx, kex->Q_C, LWS_SIZE_EC25519)) goto hash_probs; if (_genhash_update_len(&ctx, kex->Q_S, LWS_SIZE_EC25519)) goto hash_probs; if (lws_genhash_update(&ctx, kbi, kbi_len)) goto hash_probs; if (lws_genhash_destroy(&ctx, temp)) goto hash_probs; /* * Sign the 32-byte SHA256 "exchange hash" in temp * The signature is itself 64 bytes */ smlen = LWS_SIZE_EC25519 + 64; if (crypto_sign_ed25519(payload_sig, &smlen, temp, LWS_SIZE_EC25519, pri_key)) return 1; #if 0 l = LWS_SIZE_EC25519; n = crypto_sign_ed25519_open(temp, &l, payload_sig, smlen, pss->K_S); lwsl_notice("own sig sanity check says %d\n", n); #endif /* sig [64] and payload [32] concatenated in payload_sig * * The server then responds with the following * * uint32 packet length (exl self + mac) * byte padding len * byte SSH_MSG_KEX_ECDH_REPLY * string server public host key and certificates (K_S) * string Q_S (exchange value sent by the server) * string signature of H * padding */ *p++ = SSH_MSG_KEX_ECDH_REPLY; /* server public host key and certificates (K_S) */ lp = p; p +=4; lws_sized_blob(&p, keyt, (uint32_t)strlen(keyt)); lws_sized_blob(&p, pss->K_S, LWS_SIZE_EC25519); lws_p32(lp, (uint32_t)(lws_ptr_diff(p, lp) - 4)); /* Q_S (exchange value sent by the server) */ lws_sized_blob(&p, kex->Q_S, LWS_SIZE_EC25519); /* signature of H */ lp = p; p +=4; lws_sized_blob(&p, keyt, (uint32_t)strlen(keyt)); lws_sized_blob(&p, payload_sig, 64); lws_p32(lp, (uint32_t)(lws_ptr_diff(p, lp) - 4)); /* end of message */ lws_pad_set_length(pss, reply, &p, &pss->active_keys_stc); *plen = (uint32_t)lws_ptr_diff(p, reply); if (!pss->active_keys_stc.valid) memcpy(pss->session_id, temp, LWS_SIZE_EC25519); /* RFC4253 7.2: * * The key exchange produces two values: a shared secret K, * and an exchange hash H. Encryption and authentication * keys are derived from these. The exchange hash H from the * first key exchange is additionally used as the session * identifier, which is a unique identifier for this connection. * It is used by authentication methods as a part of the data * that is signed as a proof of possession of a private key. * Once computed, the session identifier is not changed, * even if keys are later re-exchanged. * * The hash alg used in the KEX must be used for key derivation. * * 1) Initial IV client to server: * * HASH(K || H || "A" || session_id) * * (Here K is encoded as mpint and "A" as byte and session_id * as raw data. "A" means the single character A, ASCII 65). * * */ for (c = 0; c < 3; c++) { kex_ecdh_dv(kex->keys_next_cts.key[c], LWS_SIZE_CHACHA256_KEY, kbi, (int)kbi_len, temp, (char)('A' + (c * 2)), pss->session_id); kex_ecdh_dv(kex->keys_next_stc.key[c], LWS_SIZE_CHACHA256_KEY, kbi, (int)kbi_len, temp, (char)('B' + (c * 2)), pss->session_id); } lws_explicit_bzero(temp, sizeof(temp)); return 0; hash_probs: lws_genhash_destroy(&ctx, NULL); return 1; } libwebsockets-4.3.5/plugins/ssh-base/sshd.c000066400000000000000000001770051476025525100206770ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "libwebsockets.h" #include "lws-ssh.h" #include #include void *sshd_zalloc(size_t s) { void *p = malloc(s); if (p) memset(p, 0, s); return p; } uint32_t lws_g32(uint8_t **p) { uint32_t v = 0; v = (v << 8) | *((*p)++); v = (v << 8) | *((*p)++); v = (v << 8) | *((*p)++); v = (v << 8) | *((*p)++); return v; } uint32_t lws_p32(uint8_t *p, uint32_t v) { *p++ = (uint8_t)(v >> 24); *p++ = (uint8_t)(v >> 16); *p++ = (uint8_t)(v >> 8); *p++ = (uint8_t)v; return v; } int lws_cstr(uint8_t **p, const char *s, uint32_t max) { uint32_t n = (uint32_t)strlen(s); if (n > max) return 1; lws_p32(*p, n); *p += 4; strcpy((char *)(*p), s); *p += n; return 0; } int lws_buf(uint8_t **p, void *s, uint32_t len) { lws_p32(*p, len); *p += 4; memcpy((char *)(*p), s, len); *p += len; return 0; } void write_task(struct per_session_data__sshd *pss, struct lws_ssh_channel *ch, int task) { pss->write_task[pss->wt_head] = (uint8_t)task; pss->write_channel[pss->wt_head] = ch; pss->wt_head = (pss->wt_head + 1) & 7; lws_callback_on_writable(pss->wsi); } void write_task_insert(struct per_session_data__sshd *pss, struct lws_ssh_channel *ch, int task) { pss->wt_tail = (pss->wt_tail - 1) & 7; pss->write_task[pss->wt_tail] = (uint8_t)task; pss->write_channel[pss->wt_tail] = ch; lws_callback_on_writable(pss->wsi); } void lws_pad_set_length(struct per_session_data__sshd *pss, void *start, uint8_t **p, struct lws_ssh_keys *keys) { uint32_t len = (uint32_t)lws_ptr_diff(*p, start); uint8_t padc = 4, *bs = start; if (keys->full_length) len -= 4; if ((len + padc) & (uint32_t)(keys->padding_alignment - 1)) padc = (uint8_t)((uint8_t)padc + (uint8_t)(keys->padding_alignment - ((len + padc) & (uint32_t)(keys->padding_alignment - 1)))); bs[4] = padc; len += padc; if (!keys->valid) /* no crypto = pad with 00 */ while (padc--) *((*p)++) = 0; else { /* crypto active = pad with random */ lws_get_random(pss->vhd->context, *p, padc); (*p) += padc; } if (keys->full_length) len += 4; lws_p32(start, len - 4); } static uint32_t offer(struct per_session_data__sshd *pss, uint8_t *p, uint32_t len, int first, int *payload_len) { uint8_t *op = p, *lp, *end = p + len - 1; int n, padc = 4, keylen; char keyt[32]; uint8_t keybuf[256]; keylen = (int)get_gen_server_key_25519(pss, keybuf, (int)sizeof(keybuf)); if (!keylen) { lwsl_notice("get_gen_server_key failed\n"); return 1; } lwsl_info("keylen %d\n", keylen); n = ed25519_key_parse(keybuf, (unsigned int)keylen, keyt, sizeof(keyt), NULL, NULL); if (n) { lwsl_notice("unable to parse server key: %d\n", n); return 1; } /* * byte SSH_MSG_KEXINIT * byte[16] cookie (random bytes) * name-list kex_algorithms * name-list server_host_key_algorithms * name-list encryption_algorithms_client_to_server * name-list encryption_algorithms_server_to_client * name-list mac_algorithms_client_to_server * name-list mac_algorithms_server_to_client * name-list compression_algorithms_client_to_server * name-list compression_algorithms_server_to_client * name-list langua->es_client_to_server * name-list langua->es_server_to_client * boolean first_kex_packet_follows * uint32 0 (reserved for future extension) */ p += 5; /* msg len + padding */ *p++ = SSH_MSG_KEXINIT; lws_get_random(pss->vhd->context, p, 16); p += 16; /* KEX algorithms */ lp = p; p += 4; n = lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), "curve25519-sha256@libssh.org"); p += lws_p32(lp, (uint32_t)n); /* Server Host Key Algorithms */ lp = p; p += 4; n = lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), "%s", keyt); p += lws_p32(lp, (uint32_t)n); /* Encryption Algorithms: C -> S */ lp = p; p += 4; // n = lws_snprintf((char *)p, end - p, "aes256-gcm@openssh.com"); n = lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), "chacha20-poly1305@openssh.com"); p += lws_p32(lp, (uint32_t)n); /* Encryption Algorithms: S -> C */ lp = p; p += 4; // n = lws_snprintf((char *)p, end - p, "aes256-gcm@openssh.com"); n = lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), "chacha20-poly1305@openssh.com"); p += lws_p32(lp, (uint32_t)n); /* MAC Algorithms: C -> S */ lp = p; p += 4; /* bogus: chacha20 does not use MACs, but 'none' is not offered */ n = lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), "hmac-sha2-256"); p += lws_p32(lp, (uint32_t)n); /* MAC Algorithms: S -> C */ lp = p; p += 4; /* bogus: chacha20 does not use MACs, but 'none' is not offered */ n = lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), "hmac-sha2-256"); p += lws_p32(lp, (uint32_t)n); /* Compression Algorithms: C -> S */ lp = p; p += 4; n = lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), "none"); p += lws_p32(lp, (uint32_t)n); /* Compression Algorithms: S -> C */ lp = p; p += 4; n = lws_snprintf((char *)p, lws_ptr_diff_size_t(end, p), "none"); p += lws_p32(lp, (uint32_t)n); if (p - op < 13 + padc + 8) return 0; /* Languages: C -> S */ *p++ = 0; *p++ = 0; *p++ = 0; *p++ = 0; /* Languages: S -> C */ *p++ = 0; *p++ = 0; *p++ = 0; *p++ = 0; /* First KEX packet coming */ *p++ = !!first; /* Reserved */ *p++ = 0; *p++ = 0; *p++ = 0; *p++ = 0; len = (uint32_t)lws_ptr_diff(p, op); if (payload_len) /* starts at buf + 5 and excludes padding */ *payload_len = (int)(len - 5); /* we must give at least 4 bytes of 00 padding */ if (((int)len + padc) & 7) padc += 8 - (((int)len + padc) & 7); op[4] = (uint8_t)padc; len += (uint32_t)padc; while (padc--) *p++ = 0; /* recorded length does not include the uint32_t len itself */ lws_p32(op, len - 4); return len; } static int handle_name(struct per_session_data__sshd *pss) { struct lws_kex *kex = pss->kex; char keyt[32]; uint8_t keybuf[256]; int n = 0, len; switch (pss->parser_state) { case SSH_KEX_NL_KEX_ALGS: if (!strcmp(pss->name, "curve25519-sha256@libssh.org")) kex->match_bitfield |= 1; break; case SSH_KEX_NL_SHK_ALGS: len = (int)get_gen_server_key_25519(pss, keybuf, (int)sizeof(keybuf)); if (!len) break; if (ed25519_key_parse(keybuf, (unsigned int)len, keyt, sizeof(keyt), NULL, NULL)) { lwsl_err("Unable to parse host key %d\n", n); } else { if (!strcmp(pss->name, keyt)) { kex->match_bitfield |= 2; break; } } break; case SSH_KEX_NL_EACTS_ALGS: if (!strcmp(pss->name, "chacha20-poly1305@openssh.com")) kex->match_bitfield |= 4; break; case SSH_KEX_NL_EASTC_ALGS: if (!strcmp(pss->name, "chacha20-poly1305@openssh.com")) kex->match_bitfield |= 8; break; case SSH_KEX_NL_MACTS_ALGS: if (!strcmp(pss->name, "hmac-sha2-256")) kex->match_bitfield |= 16; break; case SSH_KEX_NL_MASTC_ALGS: if (!strcmp(pss->name, "hmac-sha2-256")) kex->match_bitfield |= 32; break; case SSH_KEX_NL_CACTS_ALGS: if (!strcmp(pss->name, "none")) kex->match_bitfield |= 64; break; case SSH_KEX_NL_CASTC_ALGS: if (!strcmp(pss->name, "none")) kex->match_bitfield |= 128; break; case SSH_KEX_NL_LCTS_ALGS: case SSH_KEX_NL_LSTC_ALGS: break; default: break; } return 0; } static int lws_kex_create(struct per_session_data__sshd *pss) { pss->kex = sshd_zalloc(sizeof(struct lws_kex)); lwsl_info("%s\n", __func__); return !pss->kex; } static void lws_kex_destroy(struct per_session_data__sshd *pss) { if (!pss->kex) return; lwsl_info("Destroying KEX\n"); if (pss->kex->I_C) { free(pss->kex->I_C); pss->kex->I_C = NULL; } if (pss->kex->I_S) { free(pss->kex->I_S); pss->kex->I_S = NULL; } lws_explicit_bzero(pss->kex, sizeof(*pss->kex)); free(pss->kex); pss->kex = NULL; } static void ssh_free(void *p) { if (!p) return; lwsl_debug("%s: FREE %p\n", __func__, p); free(p); } #define ssh_free_set_NULL(x) if (x) { ssh_free(x); (x) = NULL; } static void lws_ua_destroy(struct per_session_data__sshd *pss) { if (!pss->ua) return; lwsl_info("%s\n", __func__); if (pss->ua->username) ssh_free(pss->ua->username); if (pss->ua->service) ssh_free(pss->ua->service); if (pss->ua->alg) ssh_free(pss->ua->alg); if (pss->ua->pubkey) ssh_free(pss->ua->pubkey); if (pss->ua->sig) { lws_explicit_bzero(pss->ua->sig, pss->ua->sig_len); ssh_free(pss->ua->sig); } lws_explicit_bzero(pss->ua, sizeof(*pss->ua)); free(pss->ua); pss->ua = NULL; } static int rsa_hash_alg_from_ident(const char *ident) { if (strcmp(ident, "ssh-rsa") == 0 || strcmp(ident, "ssh-rsa-cert-v01@openssh.com") == 0) return LWS_GENHASH_TYPE_SHA1; if (strcmp(ident, "rsa-sha2-256") == 0) return LWS_GENHASH_TYPE_SHA256; if (strcmp(ident, "rsa-sha2-512") == 0) return LWS_GENHASH_TYPE_SHA512; return -1; } static void state_get_string_alloc(struct per_session_data__sshd *pss, int next) { pss->parser_state = SSHS_GET_STRING_LEN_ALLOC; pss->state_after_string = (char)next; } static void state_get_string(struct per_session_data__sshd *pss, int next) { pss->parser_state = SSHS_GET_STRING_LEN; pss->state_after_string = (char)next; } static void state_get_u32(struct per_session_data__sshd *pss, int next) { pss->parser_state = SSHS_GET_U32; pss->state_after_string = (char)next; } static struct lws_ssh_channel * ssh_get_server_ch(struct per_session_data__sshd *pss, uint32_t chi) { struct lws_ssh_channel *ch = pss->ch_list; while (ch) { if (ch->server_ch == chi) return ch; ch = ch->next; } return NULL; } #if 0 static struct lws_ssh_channel * ssh_get_peer_ch(struct per_session_data__sshd *pss, uint32_t chi) { struct lws_ssh_channel *ch = pss->ch_list; while (ch) { if (ch->sender_ch == chi) return ch; ch = ch->next; } return NULL; } #endif static void ssh_destroy_channel(struct per_session_data__sshd *pss, struct lws_ssh_channel *ch) { lws_start_foreach_llp(struct lws_ssh_channel **, ppch, pss->ch_list) { if (*ppch == ch) { lwsl_info("Deleting ch %p\n", ch); if (pss->vhd && pss->vhd->ops && pss->vhd->ops->channel_destroy) pss->vhd->ops->channel_destroy(ch->priv); *ppch = ch->next; if (ch->sub) free(ch->sub); free(ch); return; } } lws_end_foreach_llp(ppch, next); lwsl_notice("Failed to delete ch\n"); } static void lws_ssh_exec_finish(void *finish_handle, int retcode) { struct lws_ssh_channel *ch = (struct lws_ssh_channel *)finish_handle; struct per_session_data__sshd *pss = ch->pss; ch->retcode = retcode; write_task(pss, ch, SSH_WT_EXIT_STATUS); ch->scheduled_close = 1; write_task(pss, ch, SSH_WT_CH_CLOSE); } static int lws_ssh_parse_plaintext(struct per_session_data__sshd *pss, uint8_t *p, size_t len) { struct lws_gencrypto_keyelem e[LWS_GENCRYPTO_RSA_KEYEL_COUNT]; struct lws_genrsa_ctx ctx; struct lws_ssh_channel *ch; struct lws_subprotocol_scp *scp; uint8_t *pp, *ps, hash[64]; #if !defined(MBEDTLS_VERSION_NUMBER) || MBEDTLS_VERSION_NUMBER < 0x03000000 uint8_t *otmp = NULL; #endif uint32_t m; int n; while (len --) { again: switch(pss->parser_state) { case SSH_INITIALIZE_TRANSIENT: pss->parser_state = SSHS_IDSTRING; pss->ctr = 0; pss->copy_to_I_C = 0; /* fallthru */ case SSHS_IDSTRING: if (*p == 0x0d) { pss->V_C[pss->npos] = '\0'; pss->npos = 0; lwsl_info("peer id: %s\n", pss->V_C); p++; pss->parser_state = SSHS_IDSTRING_CR; break; } if (pss->npos < sizeof(pss->V_C) - 1) pss->V_C[pss->npos++] = (char)*p; p++; break; case SSHS_IDSTRING_CR: if (*p++ != 0x0a) { lwsl_notice("mangled id string\n"); return 1; } pss->ssh_sequence_ctr_cts = 0; pss->parser_state = SSHS_MSG_LEN; break; case SSHS_MSG_LEN: pss->msg_len = (pss->msg_len << 8) | *p++; if (++pss->ctr != 4) break; if (pss->active_keys_cts.valid) { uint8_t b[4]; POKE_U32(b, (uint32_t)pss->msg_len); pss->msg_len = lws_chachapoly_get_length( &pss->active_keys_cts, pss->ssh_sequence_ctr_cts, b); } else pss->ssh_sequence_ctr_cts++; lwsl_info("msg len %d\n", pss->msg_len); pss->parser_state = SSHS_MSG_PADDING; pss->ctr = 0; pss->pos = 4; if (pss->msg_len < 2 + 4) { lwsl_notice("illegal msg size\n"); goto bail; } break; case SSHS_MSG_PADDING: pss->msg_padding = *p++; pss->parser_state = SSHS_MSG_ID; break; case SSHS_MSG_ID: pss->msg_id = *p++; pss->ctr = 0; switch (pss->msg_id) { case SSH_MSG_DISCONNECT: /* * byte SSH_MSG_DISCONNECT * uint32 reason code * string description in ISO-10646 * UTF-8 encoding [RFC3629] * string language tag [RFC3066] */ lwsl_notice("SSH_MSG_DISCONNECT\n"); state_get_u32(pss, SSHS_NVC_DISCONNECT_REASON); break; case SSH_MSG_IGNORE: lwsl_notice("SSH_MSG_IGNORE\n"); break; case SSH_MSG_UNIMPLEMENTED: lwsl_notice("SSH_MSG_UNIMPLEMENTED\n"); break; case SSH_MSG_DEBUG: lwsl_notice("SSH_MSG_DEBUG\n"); break; case SSH_MSG_SERVICE_REQUEST: lwsl_info("SSH_MSG_SERVICE_REQUEST\n"); /* payload is a string */ state_get_string(pss, SSHS_DO_SERVICE_REQUEST); break; case SSH_MSG_SERVICE_ACCEPT: lwsl_notice("SSH_MSG_ACCEPT\n"); break; case SSH_MSG_KEXINIT: if (pss->kex_state != KEX_STATE_EXPECTING_CLIENT_OFFER) { pss->parser_state = SSH_KEX_STATE_SKIP; break; } if (!pss->kex) { lwsl_notice("%s: SSH_MSG_KEXINIT: NULL pss->kex\n", __func__); goto bail; } pss->parser_state = SSH_KEX_STATE_COOKIE; pss->kex->I_C_payload_len = 0; pss->kex->I_C_alloc_len = pss->msg_len; pss->kex->I_C = sshd_zalloc(pss->kex->I_C_alloc_len); if (!pss->kex->I_C) { lwsl_notice("OOM 3\n"); goto bail; } pss->kex->I_C[pss->kex->I_C_payload_len++] = pss->msg_id; pss->copy_to_I_C = 1; break; case SSH_MSG_KEX_ECDH_INIT: pss->parser_state = SSH_KEX_STATE_ECDH_KEYLEN; break; case SSH_MSG_NEWKEYS: if (pss->kex_state != KEX_STATE_REPLIED_TO_OFFER && pss->kex_state != KEX_STATE_CRYPTO_INITIALIZED) { lwsl_notice("unexpected newkeys\n"); goto bail; } /* * it means we should now use the keys we * agreed on */ lwsl_info("Activating CTS keys\n"); pss->active_keys_cts = pss->kex->keys_next_cts; if (lws_chacha_activate(&pss->active_keys_cts)) goto bail; pss->kex->newkeys |= 2; if (pss->kex->newkeys == 3) lws_kex_destroy(pss); if (pss->msg_padding) { pss->copy_to_I_C = 0; pss->parser_state = SSHS_MSG_EAT_PADDING; break; } else { pss->parser_state = SSHS_MSG_LEN; } break; case SSH_MSG_USERAUTH_REQUEST: /* * byte SSH_MSG_USERAUTH_REQUEST * string user name in UTF-8 * encoding [RFC3629] * string service name in US-ASCII * string "publickey" * boolean FALSE * string public key alg * string public key blob */ lwsl_info("SSH_MSG_USERAUTH_REQUEST\n"); if (pss->ua) { lwsl_notice("pss->ua overwrite\n"); goto bail; } pss->ua = sshd_zalloc(sizeof(*pss->ua)); if (!pss->ua) goto bail; state_get_string_alloc(pss, SSHS_DO_UAR_SVC); /* username is destroyed with userauth struct */ if (!pss->sent_banner) { if (pss->vhd->ops->banner) write_task(pss, NULL, SSH_WT_UA_BANNER); pss->sent_banner = 1; } break; case SSH_MSG_USERAUTH_FAILURE: goto bail; case SSH_MSG_USERAUTH_SUCCESS: goto bail; case SSH_MSG_USERAUTH_BANNER: goto bail; case SSH_MSG_CHANNEL_OPEN: state_get_string(pss, SSHS_NVC_CHOPEN_TYPE); break; case SSH_MSG_CHANNEL_REQUEST: /* RFC4254 * * byte SSH_MSG_CHANNEL_REQUEST * uint32 recipient channel * string "pty-req" * boolean want_reply * string TERM environment variable value * (e.g., vt100) * uint32 terminal width, characters * (e.g., 80) * uint32 terminal height, rows (e.g., 24) * uint32 terminal width, px (e.g., 640) * uint32 terminal height, px (e.g., 480) * string encoded terminal modes */ state_get_u32(pss, SSHS_NVC_CHRQ_RECIP); break; case SSH_MSG_CHANNEL_EOF: /* RFC4254 * When a party will no longer send more data * to a channel, it SHOULD send * SSH_MSG_CHANNEL_EOF. * * byte SSH_MSG_CHANNEL_EOF * uint32 recipient channel */ state_get_u32(pss, SSHS_NVC_CH_EOF); break; case SSH_MSG_CHANNEL_CLOSE: /* RFC4254 * * byte SSH_MSG_CHANNEL_CLOSE * uint32 recipient channel * * This message does not consume window space * and can be sent even if no window space is * available. * * It is RECOMMENDED that all data sent before * this message be delivered to the actual * destination, if possible. */ state_get_u32(pss, SSHS_NVC_CH_CLOSE); break; case SSH_MSG_CHANNEL_DATA: /* RFC4254 * * byte SSH_MSG_CHANNEL_DATA * uint32 recipient channel * string data */ state_get_u32(pss, SSHS_NVC_CD_RECIP); break; case SSH_MSG_CHANNEL_WINDOW_ADJUST: /* RFC452 * * byte SSH_MSG_CHANNEL_WINDOW_ADJUST * uint32 recipient channel * uint32 bytes to add */ if (!pss->ch_list) goto bail; state_get_u32(pss, SSHS_NVC_WA_RECIP); break; default: lwsl_notice("unk msg_id %d\n", pss->msg_id); goto bail; } break; case SSH_KEX_STATE_COOKIE: if (pss->msg_len < 16 + 1 + 1 + (10 * 4) + 5) { lwsl_notice("sanity: kex length failed\n"); goto bail; } pss->kex->kex_cookie[pss->ctr++] = *p++; if (pss->ctr != sizeof(pss->kex->kex_cookie)) break; pss->parser_state = SSH_KEX_NL_KEX_ALGS_LEN; pss->ctr = 0; break; case SSH_KEX_NL_KEX_ALGS_LEN: case SSH_KEX_NL_SHK_ALGS_LEN: case SSH_KEX_NL_EACTS_ALGS_LEN: case SSH_KEX_NL_EASTC_ALGS_LEN: case SSH_KEX_NL_MACTS_ALGS_LEN: case SSH_KEX_NL_MASTC_ALGS_LEN: case SSH_KEX_NL_CACTS_ALGS_LEN: case SSH_KEX_NL_CASTC_ALGS_LEN: case SSH_KEX_NL_LCTS_ALGS_LEN: case SSH_KEX_NL_LSTC_ALGS_LEN: case SSH_KEX_STATE_ECDH_KEYLEN: pss->len = (pss->len << 8) | *p++; if (++pss->ctr != 4) break; switch (pss->parser_state) { case SSH_KEX_STATE_ECDH_KEYLEN: pss->parser_state = SSH_KEX_STATE_ECDH_Q_C; break; default: pss->parser_state++; if (pss->len == 0) pss->parser_state++; break; } pss->ctr = 0; pss->npos = 0; if (pss->msg_len - pss->pos < pss->len) { lwsl_notice("sanity: length %d - %d < %d\n", pss->msg_len, pss->pos, pss->len); goto bail; } break; case SSH_KEX_NL_KEX_ALGS: case SSH_KEX_NL_SHK_ALGS: case SSH_KEX_NL_EACTS_ALGS: case SSH_KEX_NL_EASTC_ALGS: case SSH_KEX_NL_MACTS_ALGS: case SSH_KEX_NL_MASTC_ALGS: case SSH_KEX_NL_CACTS_ALGS: case SSH_KEX_NL_CASTC_ALGS: case SSH_KEX_NL_LCTS_ALGS: case SSH_KEX_NL_LSTC_ALGS: if (*p != ',') { if (pss->npos < sizeof(pss->name) - 1) pss->name[pss->npos++] = (char)*p; } else { pss->name[pss->npos] = '\0'; pss->npos = 0; handle_name(pss); } p++; if (!--pss->len) { pss->name[pss->npos] = '\0'; if (pss->npos) handle_name(pss); pss->parser_state++; break; } break; case SSH_KEX_FIRST_PKT: pss->first_coming = !!*p++; pss->parser_state = SSH_KEX_RESERVED; break; case SSH_KEX_RESERVED: pss->len = (pss->len << 8) | *p++; if (++pss->ctr != 4) break; pss->ctr = 0; if (pss->msg_padding) { pss->copy_to_I_C = 0; pss->parser_state = SSHS_MSG_EAT_PADDING; break; } pss->parser_state = SSHS_MSG_LEN; break; case SSH_KEX_STATE_ECDH_Q_C: if (pss->len != 32) { lwsl_notice("wrong key len\n"); goto bail; } pss->kex->Q_C[pss->ctr++] = *p++; if (pss->ctr != 32) break; lwsl_info("Q_C parsed\n"); pss->parser_state = SSHS_MSG_EAT_PADDING; break; case SSH_KEX_STATE_SKIP: if (pss->pos - 4 < pss->msg_len) { p++; break; } lwsl_debug("skip done pos %d, msg_len %d len=%ld, \n", pss->pos, pss->msg_len, (long)len); pss->parser_state = SSHS_MSG_LEN; pss->ctr = 0; break; case SSHS_MSG_EAT_PADDING: p++; if (--pss->msg_padding) break; if (pss->msg_len + 4 != pss->pos) { lwsl_notice("sanity: kex end mismatch %d %d\n", pss->pos, pss->msg_len); goto bail; } switch (pss->msg_id) { case SSH_MSG_KEX_ECDH_INIT: if (pss->kex->match_bitfield != 0xff) { lwsl_notice("unable to negotiate\n"); goto bail; } if (kex_ecdh(pss, pss->kex->kex_r, &pss->kex->kex_r_len)) { lwsl_notice("hex_ecdh failed\n"); goto bail; } write_task(pss, NULL, SSH_WT_OFFER_REPLY); break; } pss->parser_state = SSHS_MSG_LEN; pss->ctr = 0; break; case SSHS_GET_STRING_LEN: pss->npos = 0; pss->len = (pss->len << 8) | *p++; if (++pss->ctr != 4) break; pss->ctr = 0; pss->parser_state = SSHS_GET_STRING; break; case SSHS_GET_STRING: if (pss->npos >= sizeof(pss->name) - 1) { lwsl_notice("non-alloc string too big\n"); goto bail; } pss->name[pss->npos++] = (char)*p++; if (pss->npos != pss->len) break; pss->name[pss->npos] = '\0'; pss->parser_state = pss->state_after_string; goto again; case SSHS_GET_STRING_LEN_ALLOC: pss->npos = 0; pss->len = (pss->len << 8) | *p++; if (++pss->ctr != 4) break; pss->ctr = 0; pss->last_alloc = sshd_zalloc(pss->len + 1); lwsl_debug("SSHS_GET_STRING_LEN_ALLOC: %p, state %d\n", pss->last_alloc, pss->state_after_string); if (!pss->last_alloc) { lwsl_notice("alloc string too big\n"); goto bail; } pss->parser_state = SSHS_GET_STRING_ALLOC; break; case SSHS_GET_STRING_ALLOC: if (pss->npos >= pss->len) goto bail; pss->last_alloc[pss->npos++] = *p++; if (pss->npos != pss->len) break; pss->last_alloc[pss->npos] = '\0'; pss->parser_state = pss->state_after_string; goto again; /* * User Authentication */ case SSHS_DO_SERVICE_REQUEST: pss->okayed_userauth = 1; pss->parser_state = SSHS_MSG_EAT_PADDING; /* * this only 'accepts' that we can negotiate auth for * this service, not accepts the auth */ write_task(pss, NULL, SSH_WT_UA_ACCEPT); break; case SSHS_DO_UAR_SVC: pss->ua->username = (char *)pss->last_alloc; pss->last_alloc = NULL; /* it was adopted */ state_get_string_alloc(pss, SSHS_DO_UAR_PUBLICKEY); /* destroyed with UA struct */ break; case SSHS_DO_UAR_PUBLICKEY: pss->ua->service = (char *)pss->last_alloc; pss->last_alloc = NULL; /* it was adopted */ /* Sect 5, RFC4252 * * The 'user name' and 'service name' are repeated in * every new authentication attempt, and MAY change. * * The server implementation MUST carefully check them * in every message, and MUST flush any accumulated * authentication states if they change. If it is * unable to flush an authentication state, it MUST * disconnect if the 'user name' or 'service name' * changes. */ if (pss->seen_auth_req_before && ( strcmp(pss->ua->username, pss->last_auth_req_username) || strcmp(pss->ua->service, pss->last_auth_req_service))) { lwsl_notice("username / svc changed\n"); goto bail; } pss->seen_auth_req_before = 1; lws_strncpy(pss->last_auth_req_username, pss->ua->username, sizeof(pss->last_auth_req_username)); lws_strncpy(pss->last_auth_req_service, pss->ua->service, sizeof(pss->last_auth_req_service)); if (strcmp(pss->ua->service, "ssh-connection")) goto ua_fail; state_get_string(pss, SSHS_NVC_DO_UAR_CHECK_PUBLICKEY); break; case SSHS_NVC_DO_UAR_CHECK_PUBLICKEY: if (!strcmp(pss->name, "none")) { /* we must fail it */ lwsl_info("got 'none' req, refusing\n"); goto ua_fail; } if (strcmp(pss->name, "publickey")) { lwsl_notice("expected 'publickey' got '%s'\n", pss->name); goto ua_fail; } pss->parser_state = SSHS_DO_UAR_SIG_PRESENT; break; case SSHS_DO_UAR_SIG_PRESENT: lwsl_info("SSHS_DO_UAR_SIG_PRESENT\n"); pss->ua->sig_present = (char)*p++; state_get_string_alloc(pss, SSHS_NVC_DO_UAR_ALG); /* destroyed with UA struct */ break; case SSHS_NVC_DO_UAR_ALG: pss->ua->alg = (char *)pss->last_alloc; pss->last_alloc = NULL; /* it was adopted */ if (rsa_hash_alg_from_ident(pss->ua->alg) < 0) { lwsl_notice("unknown alg\n"); goto ua_fail; } state_get_string_alloc(pss, SSHS_NVC_DO_UAR_PUBKEY_BLOB); /* destroyed with UA struct */ break; case SSHS_NVC_DO_UAR_PUBKEY_BLOB: pss->ua->pubkey = pss->last_alloc; pss->last_alloc = NULL; /* it was adopted */ pss->ua->pubkey_len = pss->npos; /* * RFC4253 * * ssh-rsa * * The structure inside the blob is * * mpint e * mpint n * * Let's see if this key is authorized */ n = 1; if (pss->vhd->ops && pss->vhd->ops->is_pubkey_authorized) n = pss->vhd->ops->is_pubkey_authorized( pss->ua->username, pss->ua->alg, pss->ua->pubkey, (int)pss->ua->pubkey_len); if (n) { lwsl_info("rejecting peer pubkey\n"); goto ua_fail; } if (pss->ua->sig_present) { state_get_string_alloc(pss, SSHS_NVC_DO_UAR_SIG); /* destroyed with UA struct */ break; } /* * This key is at least one we would be prepared * to accept if he really has it... since no sig * client should resend everything with a sig * appended. OK it and delete this initial UA */ write_task(pss, NULL, SSH_WT_UA_PK_OK); pss->parser_state = SSHS_MSG_EAT_PADDING; break; case SSHS_NVC_DO_UAR_SIG: /* * Now the pubkey is coming with a sig */ /* Sect 5.1 RFC4252 * * SSH_MSG_USERAUTH_SUCCESS MUST be sent only once. * When SSH_MSG_USERAUTH_SUCCESS has been sent, any * further authentication requests received after that * SHOULD be silently ignored. */ if (pss->ssh_auth_state == SSH_AUTH_STATE_GAVE_AUTH_IGNORE_REQS) { lwsl_info("Silently ignoring auth req after accepted\n"); goto ua_fail_silently; } lwsl_info("SSHS_DO_UAR_SIG\n"); pss->ua->sig = pss->last_alloc; pss->last_alloc = NULL; /* it was adopted */ pss->ua->sig_len = pss->npos; pss->parser_state = SSHS_MSG_EAT_PADDING; /* * RFC 4252 p9 * * The value of 'signature' is a signature with * the private host key of the following data, in * this order: * * string session identifier * byte SSH_MSG_USERAUTH_REQUEST * string user name * string service name * string "publickey" * boolean TRUE * string public key algorithm name * string public key to be used for auth * * We reproduce the signature plaintext and the * hash, and then decrypt the incoming signed block. * What comes out is some ASN1, in there is the * hash decrypted. We find it and confirm it * matches the hash we computed ourselves. * * First step is generate the sig plaintext */ n = 4 + 32 + 1 + 4 + (int)strlen(pss->ua->username) + 4 + (int)strlen(pss->ua->service) + 4 + 9 + 1 + 4 + (int)strlen(pss->ua->alg) + 4 + (int)pss->ua->pubkey_len; ps = sshd_zalloc((unsigned int)n); if (!ps) { lwsl_notice("OOM 4\n"); goto ua_fail; } pp = ps; lws_buf(&pp, pss->session_id, 32); *pp++ = SSH_MSG_USERAUTH_REQUEST; lws_cstr(&pp, pss->ua->username, 64); lws_cstr(&pp, pss->ua->service, 64); lws_cstr(&pp, "publickey", 64); *pp++ = 1; lws_cstr(&pp, pss->ua->alg, 64); lws_buf(&pp, pss->ua->pubkey, pss->ua->pubkey_len); /* Next hash the plaintext */ if (lws_genhash_init(&pss->ua->hash_ctx, (enum lws_genhash_types)rsa_hash_alg_from_ident(pss->ua->alg))) { lwsl_notice("genhash init failed\n"); free(ps); goto ua_fail; } if (lws_genhash_update(&pss->ua->hash_ctx, ps, lws_ptr_diff_size_t(pp, ps))) { lwsl_notice("genhash update failed\n"); free(ps); goto ua_fail; } lws_genhash_destroy(&pss->ua->hash_ctx, hash); free(ps); /* * Prepare the RSA decryption context: load in * the E and N factors */ memset(e, 0, sizeof(e)); pp = pss->ua->pubkey; m = lws_g32(&pp); pp += m; m = lws_g32(&pp); e[LWS_GENCRYPTO_RSA_KEYEL_E].buf = pp; e[LWS_GENCRYPTO_RSA_KEYEL_E].len = m; pp += m; m = lws_g32(&pp); e[LWS_GENCRYPTO_RSA_KEYEL_N].buf = pp; e[LWS_GENCRYPTO_RSA_KEYEL_N].len = m; if (lws_genrsa_create(&ctx, e, pss->vhd->context, LGRSAM_PKCS1_1_5, LWS_GENHASH_TYPE_UNKNOWN)) goto ua_fail; /* * point to the encrypted signature payload we * were sent */ pp = pss->ua->sig; m = lws_g32(&pp); pp += m; m = lws_g32(&pp); #if !defined(MBEDTLS_VERSION_NUMBER) || MBEDTLS_VERSION_NUMBER < 0x03000000 /* * decrypt it, resulting in an error, or some ASN1 * including the decrypted signature */ otmp = sshd_zalloc(m); if (!otmp) /* ua_fail1 frees bn_e, bn_n and rsa */ goto ua_fail1; n = lws_genrsa_public_decrypt(&ctx, pp, m, otmp, m); if (n > 0) { /* the decrypted sig is in ASN1 format */ m = 0; while ((int)m < n) { /* sig payload */ if (otmp[m] == 0x04 && otmp[m + 1] == lws_genhash_size( pss->ua->hash_ctx.type)) { m = (uint32_t)memcmp(&otmp[m + 2], hash, (unsigned int)lws_genhash_size(pss->ua->hash_ctx.type)); break; } /* go into these */ if (otmp[m] == 0x30) { m += 2; continue; } /* otherwise skip payloads */ m += (uint32_t)(otmp[m + 1] + 2); } } free(otmp); #else ctx.ctx->MBEDTLS_PRIVATE(len) = m; n = lws_genrsa_hash_sig_verify(&ctx, hash, (enum lws_genhash_types)rsa_hash_alg_from_ident(pss->ua->alg), pp, m) == 0 ? 1 : 0; #endif lws_genrsa_destroy(&ctx); /* * if no good, m is nonzero and inform peer */ if (n <= 0) { lwsl_notice("hash sig verify fail: %d\n", m); goto ua_fail; } /* if it checks out, inform peer */ lwsl_info("sig check OK\n"); /* Sect 5.1 RFC4252 * * SSH_MSG_USERAUTH_SUCCESS MUST be sent only once. * When SSH_MSG_USERAUTH_SUCCESS has been sent, any * further authentication requests received after that * SHOULD be silently ignored. */ pss->ssh_auth_state = SSH_AUTH_STATE_GAVE_AUTH_IGNORE_REQS; write_task(pss, NULL, SSH_WT_UA_SUCCESS); lws_ua_destroy(pss); break; /* * Channels */ case SSHS_GET_U32: pss->len = (pss->len << 8) | *p++; if (++pss->ctr != 4) break; pss->ctr = 0; pss->parser_state = pss->state_after_string; goto again; /* * Channel: Disconnect */ case SSHS_NVC_DISCONNECT_REASON: pss->disconnect_reason = pss->len; state_get_string_alloc(pss, SSHS_NVC_DISCONNECT_DESC); break; case SSHS_NVC_DISCONNECT_DESC: pss->disconnect_desc = (char *)pss->last_alloc; pss->last_alloc = NULL; /* it was adopted */ state_get_string(pss, SSHS_NVC_DISCONNECT_LANG); break; case SSHS_NVC_DISCONNECT_LANG: lwsl_notice("SSHS_NVC_DISCONNECT_LANG\n"); if (pss->vhd->ops && pss->vhd->ops->disconnect_reason) pss->vhd->ops->disconnect_reason( pss->disconnect_reason, pss->disconnect_desc, pss->name); ssh_free_set_NULL(pss->last_alloc); break; /* * Channel: Open */ case SSHS_NVC_CHOPEN_TYPE: /* channel open */ if (strcmp(pss->name, "session")) { lwsl_notice("Failing on not session\n"); pss->reason = 3; goto ch_fail; } lwsl_info("SSHS_NVC_CHOPEN_TYPE: creating session\n"); pss->ch_temp = sshd_zalloc(sizeof(*pss->ch_temp)); if (!pss->ch_temp) return -1; pss->ch_temp->type = SSH_CH_TYPE_SESSION; pss->ch_temp->pss = pss; state_get_u32(pss, SSHS_NVC_CHOPEN_SENDER_CH); break; case SSHS_NVC_CHOPEN_SENDER_CH: pss->ch_temp->sender_ch = pss->len; state_get_u32(pss, SSHS_NVC_CHOPEN_WINSIZE); break; case SSHS_NVC_CHOPEN_WINSIZE: lwsl_info("Initial window set to %d\n", pss->len); pss->ch_temp->window = (int32_t)pss->len; state_get_u32(pss, SSHS_NVC_CHOPEN_PKTSIZE); break; case SSHS_NVC_CHOPEN_PKTSIZE: pss->ch_temp->max_pkt = pss->len; pss->ch_temp->peer_window_est = LWS_SSH_INITIAL_WINDOW; pss->ch_temp->server_ch = (uint32_t)pss->next_ch_num++; /* * add us to channel list... leave as ch_temp * as write task needs it and will NULL down */ lwsl_info("creating new session ch\n"); pss->ch_temp->next = pss->ch_list; pss->ch_list = pss->ch_temp; if (pss->vhd->ops && pss->vhd->ops->channel_create) pss->vhd->ops->channel_create(pss->wsi, &pss->ch_temp->priv); write_task(pss, pss->ch_temp, SSH_WT_CH_OPEN_CONF); pss->parser_state = SSHS_MSG_EAT_PADDING; break; /* * SSH_MSG_CHANNEL_REQUEST */ case SSHS_NVC_CHRQ_RECIP: pss->ch_recip = pss->len; state_get_string(pss, SSHS_NVC_CHRQ_TYPE); break; case SSHS_NVC_CHRQ_TYPE: pss->parser_state = SSHS_CHRQ_WANT_REPLY; break; case SSHS_CHRQ_WANT_REPLY: pss->rq_want_reply = *p++; lwsl_info("SSHS_CHRQ_WANT_REPLY: %s, wantrep: %d\n", pss->name, pss->rq_want_reply); pss->ch_temp = ssh_get_server_ch(pss, pss->ch_recip); /* after this they differ by the request */ /* * a PTY for a shell */ if (!strcmp(pss->name, "pty-req")) { state_get_string(pss, SSHS_NVC_CHRQ_TERM); break; } /* * a shell */ if (!strcmp(pss->name, "shell")) { pss->channel_doing_spawn = pss->ch_temp->server_ch; if (pss->vhd->ops && pss->vhd->ops->shell && !pss->vhd->ops->shell(pss->ch_temp->priv, pss->wsi, lws_ssh_exec_finish, pss->ch_temp)) { if (pss->rq_want_reply) write_task_insert(pss, pss->ch_temp, SSH_WT_CHRQ_SUCC); pss->parser_state = SSHS_MSG_EAT_PADDING; break; } goto chrq_fail; } /* * env vars to be set in the shell */ if (!strcmp(pss->name, "env")) { state_get_string(pss, SSHS_NVC_CHRQ_ENV_NAME); break; } /* * exec something */ if (!strcmp(pss->name, "exec")) { state_get_string_alloc(pss, SSHS_NVC_CHRQ_EXEC_CMD); break; } /* * spawn a subsystem */ if (!strcmp(pss->name, "subsystem")) { lwsl_notice("subsystem\n"); state_get_string_alloc(pss, SSHS_NVC_CHRQ_SUBSYSTEM); break; } if (!strcmp(pss->name, "window-change")) { lwsl_info("%s: window-change\n", __func__); state_get_u32(pss, SSHS_NVC_CHRQ_WNDCHANGE_TW); break; } if (pss->rq_want_reply) goto chrq_fail; pss->parser_state = SSH_KEX_STATE_SKIP; break; /* CHRQ pty-req */ case SSHS_NVC_CHRQ_TERM: memcpy(pss->args.pty.term, pss->name, sizeof(pss->args.pty.term) - 1); state_get_u32(pss, SSHS_NVC_CHRQ_TW); break; case SSHS_NVC_CHRQ_TW: pss->args.pty.width_ch = pss->len; state_get_u32(pss, SSHS_NVC_CHRQ_TH); break; case SSHS_NVC_CHRQ_TH: pss->args.pty.height_ch = pss->len; state_get_u32(pss, SSHS_NVC_CHRQ_TWP); break; case SSHS_NVC_CHRQ_TWP: pss->args.pty.width_px = pss->len; state_get_u32(pss, SSHS_NVC_CHRQ_THP); break; case SSHS_NVC_CHRQ_THP: pss->args.pty.height_px = pss->len; state_get_string_alloc(pss, SSHS_NVC_CHRQ_MODES); break; case SSHS_NVC_CHRQ_MODES: /* modes is a stream of byte-pairs, not a string */ pss->args.pty.modes = (char *)pss->last_alloc; pss->last_alloc = NULL; /* it was adopted */ pss->args.pty.modes_len = pss->npos; n = 0; if (pss->vhd->ops && pss->vhd->ops->pty_req) n = pss->vhd->ops->pty_req(pss->ch_temp->priv, &pss->args.pty); ssh_free_set_NULL(pss->args.pty.modes); if (n) goto chrq_fail; if (pss->rq_want_reply) write_task(pss, pss->ch_temp, SSH_WT_CHRQ_SUCC); pss->parser_state = SSHS_MSG_EAT_PADDING; break; /* CHRQ env */ case SSHS_NVC_CHRQ_ENV_NAME: strcpy(pss->args.aux, pss->name); state_get_string(pss, SSHS_NVC_CHRQ_ENV_VALUE); break; case SSHS_NVC_CHRQ_ENV_VALUE: if (pss->vhd->ops && pss->vhd->ops->set_env) if (pss->vhd->ops->set_env(pss->ch_temp->priv, pss->args.aux, pss->name)) goto chrq_fail; pss->parser_state = SSHS_MSG_EAT_PADDING; break; /* CHRQ exec */ case SSHS_NVC_CHRQ_EXEC_CMD: /* * byte SSH_MSG_CHANNEL_REQUEST * uint32 recipient channel * string "exec" * boolean want reply * string command * * This message will request that the server start the * execution of the given command. The 'command' string * may contain a path. Normal precautions MUST be taken * to prevent the execution of unauthorized commands. * * scp sends "scp -t /path/..." */ lwsl_info("exec cmd: %s %02X\n", pss->last_alloc, *p); pss->channel_doing_spawn = pss->ch_temp->server_ch; if (pss->vhd->ops && pss->vhd->ops->exec && !pss->vhd->ops->exec(pss->ch_temp->priv, pss->wsi, (const char *)pss->last_alloc, lws_ssh_exec_finish, pss->ch_temp)) { ssh_free_set_NULL(pss->last_alloc); if (pss->rq_want_reply) write_task_insert(pss, pss->ch_temp, SSH_WT_CHRQ_SUCC); pss->parser_state = SSHS_MSG_EAT_PADDING; break; } /* * even if he doesn't want to exec it, we know how to * fake scp */ /* we only alloc "exec" of scp for scp destination */ n = 1; if (pss->last_alloc[0] != 's' || pss->last_alloc[1] != 'c' || pss->last_alloc[2] != 'p' || pss->last_alloc[3] != ' ') /* disallow it */ n = 0; ssh_free_set_NULL(pss->last_alloc); if (!n) goto chrq_fail; /* our channel speaks SCP protocol now */ scp = sshd_zalloc(sizeof(*scp)); if (!scp) return -1; pss->ch_temp->type = SSH_CH_TYPE_SCP; pss->ch_temp->sub = (lws_subprotocol *)scp; scp->ips = SSHS_SCP_COLLECTSTR; if (pss->rq_want_reply) write_task(pss, pss->ch_temp, SSH_WT_CHRQ_SUCC); /* we start the scp protocol first by sending an ACK */ write_task(pss, pss->ch_temp, SSH_WT_SCP_ACK_OKAY); pss->parser_state = SSHS_MSG_EAT_PADDING; break; case SSHS_NVC_CHRQ_SUBSYSTEM: lwsl_notice("subsystem: %s", pss->last_alloc); n = 0; #if 0 if (!strcmp(pss->name, "sftp")) { lwsl_notice("SFTP session\n"); pss->ch_temp->type = SSH_CH_TYPE_SFTP; n = 1; } #endif ssh_free_set_NULL(pss->last_alloc); // if (!n) goto ch_fail; #if 0 if (pss->rq_want_reply) write_task(pss, ssh_get_server_ch(pss, pss->ch_recip), SSH_WT_CHRQ_SUCC); pss->parser_state = SSHS_MSG_EAT_PADDING; break; #endif /* CHRQ window-change */ case SSHS_NVC_CHRQ_WNDCHANGE_TW: pss->args.pty.width_ch = pss->len; state_get_u32(pss, SSHS_NVC_CHRQ_WNDCHANGE_TH); break; case SSHS_NVC_CHRQ_WNDCHANGE_TH: pss->args.pty.height_ch = pss->len; state_get_u32(pss, SSHS_NVC_CHRQ_WNDCHANGE_TWP); break; case SSHS_NVC_CHRQ_WNDCHANGE_TWP: pss->args.pty.width_px = pss->len; state_get_u32(pss, SSHS_NVC_CHRQ_WNDCHANGE_THP); break; case SSHS_NVC_CHRQ_WNDCHANGE_THP: pss->args.pty.height_px = pss->len; pss->args.pty.term[0] = 0; pss->args.pty.modes = NULL; pss->args.pty.modes_len = 0; n = 0; if (pss->vhd->ops && pss->vhd->ops->pty_req) n = pss->vhd->ops->pty_req(pss->ch_temp->priv, &pss->args.pty); if (n) goto chrq_fail; pss->parser_state = SSHS_MSG_EAT_PADDING; break; /* SSH_MSG_CHANNEL_DATA */ case SSHS_NVC_CD_RECIP: pss->ch_recip = pss->len; ch = ssh_get_server_ch(pss, pss->ch_recip); ch->peer_window_est -= (int32_t)pss->msg_len; if (pss->msg_len < sizeof(pss->name)) state_get_string(pss, SSHS_NVC_CD_DATA); else state_get_string_alloc(pss, SSHS_NVC_CD_DATA_ALLOC); break; case SSHS_NVC_CD_DATA_ALLOC: case SSHS_NVC_CD_DATA: /* * Actual protocol incoming payload */ if (pss->parser_state == SSHS_NVC_CD_DATA_ALLOC) pp = pss->last_alloc; else pp = (uint8_t *)pss->name; lwsl_info("SSHS_NVC_CD_DATA\n"); ch = ssh_get_server_ch(pss, pss->ch_recip); switch (ch->type) { case SSH_CH_TYPE_SCP: scp = &ch->sub->scp; switch (scp->ips) { case SSHS_SCP_COLLECTSTR: /* gather the ascii-coded headers */ for (n = 0; n < (int)pss->npos; n++) lwsl_notice("0x%02X %c\n", pp[n], pp[n]); /* Header triggers the transfer? */ if (pp[0] == 'C' && pp[pss->npos - 1] == '\x0a') { while (*pp != ' ' && *pp != '\x0a') pp++; if (*pp++ != ' ') { write_task(pss, ch, SSH_WT_SCP_ACK_ERROR); pss->parser_state = SSHS_MSG_EAT_PADDING; break; } scp->len = (uint64_t)atoll((const char *)pp); lwsl_notice("scp payload %llu expected\n", (unsigned long long)scp->len); scp->ips = SSHS_SCP_PAYLOADIN; } /* ack it */ write_task(pss, pss->ch_temp, SSH_WT_SCP_ACK_OKAY); break; case SSHS_SCP_PAYLOADIN: /* the scp file payload */ if (pss->vhd->ops) pss->vhd->ops->rx(ch->priv, pss->wsi, pp, pss->npos); if (scp->len >= pss->npos) scp->len -= pss->npos; else scp->len = 0; if (!scp->len) { lwsl_notice("scp txfer completed\n"); scp->ips = SSHS_SCP_COLLECTSTR; break; } break; } break; default: /* scp payload */ if (pss->vhd->ops) pss->vhd->ops->rx(ch->priv, pss->wsi, pp, pss->npos); break; } if (pss->parser_state == SSHS_NVC_CD_DATA_ALLOC) ssh_free_set_NULL(pss->last_alloc); if (ch->peer_window_est < 32768) { write_task(pss, ch, SSH_WT_WINDOW_ADJUST); ch->peer_window_est += 32768; lwsl_info("extra peer WINDOW_ADJUST (~ %d)\n", ch->peer_window_est); } pss->parser_state = SSHS_MSG_EAT_PADDING; break; case SSHS_NVC_WA_RECIP: pss->ch_recip = pss->len; state_get_u32(pss, SSHS_NVC_WA_ADD); break; case SSHS_NVC_WA_ADD: ch = ssh_get_server_ch(pss, pss->ch_recip); if (ch) { ch->window += (int32_t)pss->len; lwsl_notice("got additional window %d (now %d)\n", pss->len, ch->window); } pss->parser_state = SSHS_MSG_EAT_PADDING; break; /* * channel close */ case SSHS_NVC_CH_EOF: /* * No explicit response is sent to this * message. However, the application may send * EOF to whatever is at the other end of the * channel. Note that the channel remains open * after this message, and more data may still * be sent in the other direction. This message * does not consume window space and can be sent * even if no window space is available. */ lwsl_notice("SSH_MSG_CHANNEL_EOF: %d\n", pss->ch_recip); ch = ssh_get_server_ch(pss, pss->ch_recip); if (!ch) { lwsl_notice("unknown ch %d\n", pss->ch_recip); return -1; } if (!ch->scheduled_close) { lwsl_notice("scheduling CLOSE\n"); ch->scheduled_close = 1; write_task(pss, ch, SSH_WT_CH_CLOSE); } pss->parser_state = SSHS_MSG_EAT_PADDING; break; case SSHS_NVC_CH_CLOSE: /* * When either party wishes to terminate the * channel, it sends SSH_MSG_CHANNEL_CLOSE. * Upon receiving this message, a party MUST * send back an SSH_MSG_CHANNEL_CLOSE unless it * has already sent this message for the * channel. The channel is considered closed * for a party when it has both sent and * received SSH_MSG_CHANNEL_CLOSE, and the * party may then reuse the channel number. * A party MAY send SSH_MSG_CHANNEL_CLOSE * without having sent or received * SSH_MSG_CHANNEL_EOF. */ lwsl_notice("SSH_MSG_CHANNEL_CLOSE ch %d\n", pss->ch_recip); ch = ssh_get_server_ch(pss, pss->ch_recip); if (!ch) goto bail; pss->parser_state = SSHS_MSG_EAT_PADDING; if (ch->sent_close) { /* * This is acking our sent close... * we can destroy the channel with no * further communication. */ ssh_destroy_channel(pss, ch); break; } ch->received_close = 1; ch->scheduled_close = 1; write_task(pss, ch, SSH_WT_CH_CLOSE); break; default: break; chrq_fail: lwsl_notice("chrq_fail\n"); write_task(pss, pss->ch_temp, SSH_WT_CHRQ_FAILURE); pss->parser_state = SSH_KEX_STATE_SKIP; break; ch_fail: if (pss->ch_temp) { free(pss->ch_temp); pss->ch_temp = NULL; } write_task(pss, pss->ch_temp, SSH_WT_CH_FAILURE); pss->parser_state = SSH_KEX_STATE_SKIP; break; #if !defined(MBEDTLS_VERSION_NUMBER) || MBEDTLS_VERSION_NUMBER < 0x03000000 ua_fail1: #endif lws_genrsa_destroy(&ctx); ua_fail: write_task(pss, NULL, SSH_WT_UA_FAILURE); ua_fail_silently: lws_ua_destroy(pss); /* Sect 4, RFC4252 * * Additionally, the implementation SHOULD limit the * number of failed authentication attempts a client * may perform in a single session (the RECOMMENDED * limit is 20 attempts). If the threshold is * exceeded, the server SHOULD disconnect. */ if (pss->count_auth_attempts++ > 20) goto bail; pss->parser_state = SSH_KEX_STATE_SKIP; break; } pss->pos++; } return 0; bail: lws_kex_destroy(pss); lws_ua_destroy(pss); return SSH_DISCONNECT_KEY_EXCHANGE_FAILED; } static int parse(struct per_session_data__sshd *pss, uint8_t *p, size_t len) { while (len--) { if (pss->copy_to_I_C && pss->kex->I_C_payload_len < pss->kex->I_C_alloc_len && pss->parser_state != SSHS_MSG_EAT_PADDING) pss->kex->I_C[pss->kex->I_C_payload_len++] = *p; if (pss->active_keys_cts.valid && pss->parser_state == SSHS_MSG_LEN) /* take a copy for full decrypt */ pss->packet_assembly[pss->pa_pos++] = *p; if (pss->active_keys_cts.valid && pss->parser_state == SSHS_MSG_PADDING && pss->msg_len) { /* we are going to have to decrypt it */ uint32_t cp, l = pss->msg_len + 4 + pss->active_keys_cts.MAC_length; uint8_t pt[2048]; len++; cp = (uint32_t)len; if (cp > l - pss->pa_pos) cp = l - pss->pa_pos; if (cp > sizeof(pss->packet_assembly) - pss->pa_pos) { lwsl_err("Packet is too big to decrypt\n"); goto bail; } if (pss->msg_len < 2 + 4) { lwsl_err("packet too small\n"); goto bail; } memcpy(&pss->packet_assembly[pss->pa_pos], p, cp); pss->pa_pos += cp; len -= cp; p += cp; if (pss->pa_pos != l) return 0; /* decrypt it */ cp = (uint32_t)lws_chacha_decrypt(&pss->active_keys_cts, pss->ssh_sequence_ctr_cts++, pss->packet_assembly, pss->pa_pos, pt); if (cp) { lwsl_notice("Decryption failed: %d\n", cp); goto bail; } if (lws_ssh_parse_plaintext(pss, pt + 4, pss->msg_len)) goto bail; pss->pa_pos = 0; pss->ctr = 0; continue; } if (lws_ssh_parse_plaintext(pss, p, 1)) goto bail; p++; } return 0; bail: lws_kex_destroy(pss); lws_ua_destroy(pss); return SSH_DISCONNECT_KEY_EXCHANGE_FAILED; } static uint32_t pad_and_encrypt(uint8_t *dest, void *ps, uint8_t *pp, struct per_session_data__sshd *pss, int skip_pad) { uint32_t n; if (!skip_pad) lws_pad_set_length(pss, ps, &pp, &pss->active_keys_stc); n = (uint32_t)lws_ptr_diff(pp, ps); if (!pss->active_keys_stc.valid) { memcpy(dest, ps, n); return n; } lws_chacha_encrypt(&pss->active_keys_stc, pss->ssh_sequence_ctr_stc, ps, n, dest); n += pss->active_keys_stc.MAC_length; return n; } static int lws_callback_raw_sshd(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__sshd *pss = (struct per_session_data__sshd *)user, **p; struct per_vhost_data__sshd *vhd = NULL; uint8_t buf[LWS_PRE + 1024], *pp, *ps = &buf[LWS_PRE + 512], *ps1 = NULL; const struct lws_protocol_vhost_options *pvo; const struct lws_protocols *prot; struct lws_ssh_channel *ch; char lang[10] = ""; int n, m, o; /* * Because we are an abstract protocol plugin, we will get called by * wsi that actually bind to a plugin "on top of us" that calls thru * to our callback. * * Under those circumstances, we can't simply get a pointer to our own * protocol from the wsi. If there's a pss already, we can get it from * there, but the first time for each connection we have to look it up. */ if (pss && pss->vhd) vhd = (struct per_vhost_data__sshd *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), pss->vhd->protocol); else if (lws_get_vhost(wsi)) vhd = (struct per_vhost_data__sshd *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_vhost_name_to_protocol( lws_get_vhost(wsi), "lws-ssh-base")); switch ((int)reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__sshd)); if (!vhd) return 0; vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); pvo = (const struct lws_protocol_vhost_options *)in; while (pvo) { /* * the user code passes the ops struct address to us * using a pvo (per-vhost option) */ if (!strcmp(pvo->name, "ops")) vhd->ops = (const struct lws_ssh_ops *)pvo->value; /* * the user code is telling us to get the ops struct * from another protocol's protocol.user pointer */ if (!strcmp(pvo->name, "ops-from")) { prot = lws_vhost_name_to_protocol(vhd->vhost, pvo->value); if (prot) vhd->ops = (const struct lws_ssh_ops *)prot->user; else lwsl_err("%s: can't find protocol %s\n", __func__, pvo->value); } pvo = pvo->next; } if (!vhd->ops) { lwsl_warn("ssh pvo \"ops\" is mandatory\n"); return 0; } /* * The user code ops api_version has to be current */ if (vhd->ops->api_version != LWS_SSH_OPS_VERSION) { lwsl_err("FATAL ops is api_version v%d but code is v%d\n", vhd->ops->api_version, LWS_SSH_OPS_VERSION); return 1; } break; case LWS_CALLBACK_RAW_ADOPT: lwsl_info("LWS_CALLBACK_RAW_ADOPT\n"); if (!vhd || !pss) return -1; pss->next = vhd->live_pss_list; vhd->live_pss_list = pss; pss->parser_state = SSH_INITIALIZE_TRANSIENT; pss->wsi = wsi; pss->vhd = vhd; pss->kex_state = KEX_STATE_EXPECTING_CLIENT_OFFER; pss->active_keys_cts.padding_alignment = 8; pss->active_keys_stc.padding_alignment = 8; if (lws_kex_create(pss)) return -1; write_task(pss, NULL, SSH_WT_VERSION); /* sect 4 RFC4252 * * The server SHOULD have a timeout for authentication and * disconnect if the authentication has not been accepted * within the timeout period. * * The RECOMMENDED timeout period is 10 minutes. */ lws_set_timeout(wsi, (enum pending_timeout) SSH_PENDING_TIMEOUT_CONNECT_TO_SUCCESSFUL_AUTH, 10 * 60); break; case LWS_CALLBACK_RAW_CLOSE: if (!pss) return -1; lwsl_info("LWS_CALLBACK_RAW_CLOSE\n"); lws_kex_destroy(pss); lws_ua_destroy(pss); ssh_free_set_NULL(pss->last_alloc); while (pss->ch_list) ssh_destroy_channel(pss, pss->ch_list); lws_chacha_destroy(&pss->active_keys_cts); lws_chacha_destroy(&pss->active_keys_stc); p = &vhd->live_pss_list; while (*p) { if ((*p) == pss) { *p = pss->next; continue; } p = &((*p)->next); } break; case LWS_CALLBACK_RAW_RX: if (!pss) return -1; if (parse(pss, in, len)) return -1; break; case LWS_CALLBACK_RAW_WRITEABLE: if (!pss) break; n = 0; o = pss->write_task[pss->wt_tail]; ch = pss->write_channel[pss->wt_tail]; if (pss->wt_head == pss->wt_tail) o = SSH_WT_NONE; switch (o) { case SSH_WT_VERSION: if (!pss->vhd) break; n = lws_snprintf((char *)buf + LWS_PRE, sizeof(buf) - LWS_PRE - 1, "%s\r\n", pss->vhd->ops->server_string); write_task(pss, NULL, SSH_WT_OFFER); break; case SSH_WT_OFFER: if (!pss->vhd) break; m = 0; n = (int)offer(pss, buf + LWS_PRE, sizeof(buf) - LWS_PRE, 0, &m); if (n == 0) { lwsl_notice("Too small\n"); return -1; } if (!pss->kex) { lwsl_notice("%s: SSH_WT_OFFER: pss->kex is NULL\n", __func__); return -1; } /* we need a copy of it to generate the hash later */ if (pss->kex->I_S) free(pss->kex->I_S); pss->kex->I_S = sshd_zalloc((unsigned int)m); if (!pss->kex->I_S) { lwsl_notice("OOM 5: %d\n", m); return -1; } /* without length + padcount part */ memcpy(pss->kex->I_S, buf + LWS_PRE + 5, (unsigned int)m); pss->kex->I_S_payload_len = (uint32_t)m; /* without padding */ break; case SSH_WT_OFFER_REPLY: memcpy(ps, pss->kex->kex_r, pss->kex->kex_r_len); n = (int)pad_and_encrypt(&buf[LWS_PRE], ps, ps + pss->kex->kex_r_len, pss, 1); pss->kex_state = KEX_STATE_REPLIED_TO_OFFER; /* afterwards, must do newkeys */ write_task(pss, NULL, SSH_WT_SEND_NEWKEYS); break; case SSH_WT_SEND_NEWKEYS: pp = ps + 5; *pp++ = SSH_MSG_NEWKEYS; goto pac; case SSH_WT_UA_ACCEPT: /* * If the server supports the service (and permits * the client to use it), it MUST respond with the * following: * * byte SSH_MSG_SERVICE_ACCEPT * string service name */ pp = ps + 5; *pp++ = SSH_MSG_SERVICE_ACCEPT; lws_p32(pp, pss->npos); pp += 4; strcpy((char *)pp, pss->name); pp += pss->npos; goto pac; case SSH_WT_UA_FAILURE: pp = ps + 5; *pp++ = SSH_MSG_USERAUTH_FAILURE; lws_p32(pp, 9); pp += 4; strcpy((char *)pp, "publickey"); pp += 9; *pp++ = 0; goto pac; case SSH_WT_UA_BANNER: pp = ps + 5; *pp++ = SSH_MSG_USERAUTH_BANNER; if (pss->vhd && pss->vhd->ops->banner) n = (int)pss->vhd->ops->banner((char *)&buf[650], 150 - 1, lang, (int)sizeof(lang)); lws_p32(pp, (uint32_t)n); pp += 4; strcpy((char *)pp, (char *)&buf[650]); pp += n; if (lws_cstr(&pp, lang, sizeof(lang))) goto bail; goto pac; case SSH_WT_UA_PK_OK: /* * The server MUST respond to this message with * either SSH_MSG_USERAUTH_FAILURE or with the * following: * * byte SSH_MSG_USERAUTH_PK_OK * string public key alg name from the request * string public key blob from the request */ n = 74 + (int)pss->ua->pubkey_len; if (n > (int)sizeof(buf) - LWS_PRE) { lwsl_notice("pubkey too large\n"); goto bail; } ps1 = sshd_zalloc((unsigned int)n); if (!ps1) goto bail; ps = ps1; pp = ps1 + 5; *pp++ = SSH_MSG_USERAUTH_PK_OK; if (lws_cstr(&pp, pss->ua->alg, 64)) { free(ps1); goto bail; } lws_p32(pp, pss->ua->pubkey_len); pp += 4; memcpy(pp, pss->ua->pubkey, pss->ua->pubkey_len); pp += pss->ua->pubkey_len; /* we no longer need the UA now we judged it */ lws_ua_destroy(pss); goto pac; case SSH_WT_UA_SUCCESS: pp = ps + 5; *pp++ = SSH_MSG_USERAUTH_SUCCESS; /* end SSH_PENDING_TIMEOUT_CONNECT_TO_SUCCESSFUL_AUTH */ lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); goto pac; case SSH_WT_CH_OPEN_CONF: pp = ps + 5; *pp++ = SSH_MSG_CHANNEL_OPEN_CONFIRMATION; lws_p32(pp, pss->ch_temp->sender_ch); pp += 4; lws_p32(pp, pss->ch_temp->server_ch); pp += 4; /* tx initial window size towards us */ lws_p32(pp, LWS_SSH_INITIAL_WINDOW); pp += 4; /* maximum packet size towards us */ lws_p32(pp, 800); pp += 4; lwsl_info("SSH_WT_CH_OPEN_CONF\n"); /* it's on the linked-list */ pss->ch_temp = NULL; goto pac; case SSH_WT_CH_FAILURE: pp = ps + 5; *pp++ = SSH_MSG_CHANNEL_OPEN_FAILURE; lws_p32(pp, ch->sender_ch); pp += 4; lws_p32(pp, ch->server_ch); pp += 4; lws_cstr(&pp, "reason", 64); lws_cstr(&pp, "en/US", 64); lwsl_info("SSH_WT_CH_FAILURE\n"); goto pac; case SSH_WT_CHRQ_SUCC: pp = ps + 5; *pp++ = SSH_MSG_CHANNEL_SUCCESS; lws_p32(pp, ch->sender_ch); lwsl_info("SSH_WT_CHRQ_SUCC\n"); pp += 4; goto pac; case SSH_WT_CHRQ_FAILURE: pp = ps + 5; *pp++ = SSH_MSG_CHANNEL_FAILURE; lws_p32(pp, ch->sender_ch); pp += 4; lwsl_info("SSH_WT_CHRQ_FAILURE\n"); goto pac; case SSH_WT_CH_CLOSE: pp = ps + 5; *pp++ = SSH_MSG_CHANNEL_CLOSE; lws_p32(pp, ch->sender_ch); lwsl_info("SSH_WT_CH_CLOSE\n"); pp += 4; goto pac; case SSH_WT_CH_EOF: pp = ps + 5; *pp++ = SSH_MSG_CHANNEL_EOF; lws_p32(pp, ch->sender_ch); lwsl_info("SSH_WT_CH_EOF\n"); pp += 4; goto pac; case SSH_WT_SCP_ACK_ERROR: case SSH_WT_SCP_ACK_OKAY: pp = ps + 5; *pp++ = SSH_MSG_CHANNEL_DATA; /* ps + 6 */ lws_p32(pp, ch->sender_ch); pp += 4; lws_p32(pp, 1); pp += 4; if (o == SSH_WT_SCP_ACK_ERROR) *pp++ = 2; else *pp++ = 0; lwsl_info("SSH_WT_SCP_ACK_OKAY\n"); goto pac; case SSH_WT_WINDOW_ADJUST: pp = ps + 5; *pp++ = SSH_MSG_CHANNEL_WINDOW_ADJUST; /* ps + 6 */ lws_p32(pp, ch->sender_ch); pp += 4; lws_p32(pp, 32768); pp += 4; lwsl_info("send SSH_MSG_CHANNEL_WINDOW_ADJUST\n"); goto pac; case SSH_WT_EXIT_STATUS: pp = ps + 5; *pp++ = SSH_MSG_CHANNEL_REQUEST; lws_p32(pp, ch->sender_ch); pp += 4; lws_p32(pp, 11); pp += 4; strcpy((char *)pp, "exit-status"); pp += 11; *pp++ = 0; lws_p32(pp, (uint32_t)ch->retcode); pp += 4; lwsl_info("send SSH_MSG_CHANNEL_EXIT_STATUS\n"); goto pac; case SSH_WT_NONE: default: /* sending payload */ ch = ssh_get_server_ch(pss, 0); /* have a channel up to send on? */ if (!ch) break; if (!pss->vhd || !pss->vhd->ops) break; n = pss->vhd->ops->tx_waiting(ch->priv); if (n < 0) return -1; if (!n) /* nothing to send */ break; if (n == (LWS_STDOUT | LWS_STDERR)) { /* pick one using round-robin */ if (pss->serviced_stderr_last) n = LWS_STDOUT; else n = LWS_STDERR; } pss->serviced_stderr_last = !!(n & LWS_STDERR); /* stdout or stderr */ pp = ps + 5; if (n == LWS_STDOUT) *pp++ = SSH_MSG_CHANNEL_DATA; else *pp++ = SSH_MSG_CHANNEL_EXTENDED_DATA; /* ps + 6 */ lws_p32(pp, pss->ch_list->sender_ch); m = 14; if (n == LWS_STDERR) { pp += 4; /* data type code... 1 for stderr payload */ lws_p32(pp, SSH_EXTENDED_DATA_STDERR); m = 18; } /* also skip another strlen u32 at + 10 / +14 */ pp += 8; /* ps + 14 / + 18 */ pp += pss->vhd->ops->tx(ch->priv, n, pp, lws_ptr_diff_size_t( &buf[sizeof(buf) - 1], pp)); lws_p32(ps + m - 4, (uint32_t)lws_ptr_diff(pp, (ps + m))); if (pss->vhd->ops->tx_waiting(ch->priv) > 0) lws_callback_on_writable(wsi); ch->window -= lws_ptr_diff(pp, ps) - m; //lwsl_debug("our send window: %d\n", ch->window); /* fallthru */ pac: if (!pss->vhd) break; n = (int)pad_and_encrypt(&buf[LWS_PRE], ps, pp, pss, 0); break; bail: lws_ua_destroy(pss); lws_kex_destroy(pss); return 1; } if (n > 0) { m = lws_write(wsi, (unsigned char *)buf + LWS_PRE, (unsigned int)n, LWS_WRITE_HTTP); switch(o) { case SSH_WT_SEND_NEWKEYS: lwsl_info("Activating STC keys\n"); pss->active_keys_stc = pss->kex->keys_next_stc; lws_chacha_activate(&pss->active_keys_stc); pss->kex_state = KEX_STATE_CRYPTO_INITIALIZED; pss->kex->newkeys |= 1; if (pss->kex->newkeys == 3) lws_kex_destroy(pss); break; case SSH_WT_UA_PK_OK: free(ps1); break; case SSH_WT_CH_CLOSE: if (ch->received_close) { /* * We are sending this at the behest of * the remote peer... * we can destroy the channel with no * further communication. */ ssh_destroy_channel(pss, ch); break; } ch->sent_close = 1; break; } if (m < 0) { lwsl_err("ERR %d from write\n", m); goto bail; } if (o != SSH_WT_VERSION) pss->ssh_sequence_ctr_stc++; if (o != SSH_WT_NONE) pss->wt_tail = (pss->wt_tail + 1) & 7; } else if (o == SSH_WT_UA_PK_OK) /* free it either way */ free(ps1); ch = ssh_get_server_ch(pss, 0); if (pss->wt_head != pss->wt_tail || (ch && ch->priv && pss->vhd && pss->vhd->ops->tx_waiting(ch->priv))) lws_callback_on_writable(wsi); break; case LWS_CALLBACK_SSH_UART_SET_RXFLOW: /* * this is sent to set rxflow state on any connections that * sink on a particular sink. The sink index affected is in len * * More than one protocol may sink to the same uart, and the * protocol may select the sink itself, eg, in the URL used * to set up the connection. */ lwsl_notice("sshd LWS_CALLBACK_SSH_UART_SET_RXFLOW: wsi %p, %d\n", wsi, (int)len & 1); lws_rx_flow_control(wsi, len & 1); break; case LWS_CALLBACK_CGI: if (!pss) break; if (pss->vhd && pss->vhd->ops && pss->vhd->ops->child_process_io && pss->vhd->ops->child_process_io(pss->ch_temp->priv, pss->wsi, (struct lws_cgi_args *)in)) return -1; break; case LWS_CALLBACK_CGI_PROCESS_ATTACH: if (!pss) break; ch = ssh_get_server_ch(pss, pss->channel_doing_spawn); if (ch) { ch->spawn_pid = (uint32_t)len; /* child process PID */ lwsl_notice("associated PID %d to ch %d\n", (int)len, pss->channel_doing_spawn); } break; case LWS_CALLBACK_CGI_TERMINATED: if (!pss) break; if (pss->vhd && pss->vhd->ops && pss->vhd->ops->child_process_terminated) pss->vhd->ops->child_process_terminated(pss->ch_temp->priv, pss->wsi); /* * we have the child PID in len... we need to match it to a * channel that is on the wsi */ ch = pss->ch_list; while (ch) { if (ch->spawn_pid == len) { lwsl_notice("starting close of ch with PID %d\n", (int)len); ch->scheduled_close = 1; write_task(pss, ch, SSH_WT_CH_CLOSE); break; } ch = ch->next; } break; default: break; } return 0; } #define LWS_PLUGIN_PROTOCOL_LWS_RAW_SSHD { \ "lws-ssh-base", \ lws_callback_raw_sshd, \ sizeof(struct per_session_data__sshd), \ 1024, 0, NULL, 900 \ } LWS_VISIBLE const struct lws_protocols lws_ssh_base_protocols[] = { LWS_PLUGIN_PROTOCOL_LWS_RAW_SSHD, { NULL, NULL, 0, 0, 0, NULL, 0 } /* terminator */ }; #if !defined (LWS_PLUGIN_STATIC) LWS_VISIBLE const lws_plugin_protocol_t lws_ssh_base = { .hdr = { "ssh base", "lws_protocol_plugin", LWS_BUILD_HASH, LWS_PLUGIN_API_MAGIC }, .protocols = lws_ssh_base_protocols, .count_protocols = LWS_ARRAY_SIZE(lws_ssh_base_protocols), .extensions = NULL, .count_extensions = 0, }; #endif libwebsockets-4.3.5/plugins/ssh-base/telnet.c000066400000000000000000000145361476025525100212300ustar00rootroot00000000000000/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2019 Andy Green * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "libwebsockets.h" #include "lws-ssh.h" #include struct per_vhost_data__telnet { struct lws_context *context; struct lws_vhost *vhost; const struct lws_protocols *protocol; struct per_session_data__telnet *live_pss_list; const struct lws_ssh_ops *ops; }; struct per_session_data__telnet { struct per_session_data__telnet *next; struct per_vhost_data__telnet *vhd; uint32_t rx_tail; void *priv; uint32_t initial:1; char state; uint8_t cmd; }; enum { LTS_BINARY_XMIT, LTS_ECHO, LTS_SUPPRESS_GA, LTSC_SUBOPT_END = 240, LTSC_BREAK = 243, LTSC_SUBOPT_START = 250, LTSC_WILL = 251, LTSC_WONT, LTSC_DO, LTSC_DONT, LTSC_IAC, LTST_WAIT_IAC = 0, LTST_GOT_IAC, LTST_WAIT_OPT, }; static int telnet_ld(struct per_session_data__telnet *pss, uint8_t c) { switch (pss->state) { case LTST_WAIT_IAC: if (c == LTSC_IAC) { pss->state = LTST_GOT_IAC; return 0; } return 1; case LTST_GOT_IAC: pss->state = LTST_WAIT_IAC; switch (c) { case LTSC_BREAK: return 0; case LTSC_WILL: case LTSC_WONT: case LTSC_DO: case LTSC_DONT: pss->cmd = c; pss->state = LTST_WAIT_OPT; return 0; case LTSC_IAC: return 1; /* double IAC */ } return 0; /* ignore unknown */ case LTST_WAIT_OPT: lwsl_notice(" tld: cmd %d: opt %d\n", pss->cmd, c); pss->state = LTST_WAIT_IAC; return 0; } return 0; } static uint8_t init[] = { LTSC_IAC, LTSC_WILL, 3, LTSC_IAC, LTSC_WILL, 1, LTSC_IAC, LTSC_DONT, 1, LTSC_IAC, LTSC_DO, 0 }; static int lws_callback_raw_telnet(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { struct per_session_data__telnet *pss = (struct per_session_data__telnet *)user, **p; struct per_vhost_data__telnet *vhd = (struct per_vhost_data__telnet *) lws_protocol_vh_priv_get(lws_get_vhost(wsi), lws_get_protocol(wsi)); const struct lws_protocol_vhost_options *pvo = (const struct lws_protocol_vhost_options *)in; int n, m; uint8_t buf[LWS_PRE + 800], *pu = in; switch ((int)reason) { case LWS_CALLBACK_PROTOCOL_INIT: vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi), lws_get_protocol(wsi), sizeof(struct per_vhost_data__telnet)); vhd->context = lws_get_context(wsi); vhd->protocol = lws_get_protocol(wsi); vhd->vhost = lws_get_vhost(wsi); while (pvo) { if (!strcmp(pvo->name, "ops")) vhd->ops = (const struct lws_ssh_ops *)pvo->value; pvo = pvo->next; } if (!vhd->ops) { lwsl_err("telnet pvo \"ops\" is mandatory\n"); return -1; } break; case LWS_CALLBACK_RAW_ADOPT: pss->next = vhd->live_pss_list; vhd->live_pss_list = pss; pss->vhd = vhd; pss->state = LTST_WAIT_IAC; pss->initial = 0; if (vhd->ops->channel_create) vhd->ops->channel_create(wsi, &pss->priv); lws_callback_on_writable(wsi); break; case LWS_CALLBACK_RAW_CLOSE: p = &vhd->live_pss_list; while (*p) { if ((*p) == pss) { if (vhd->ops->channel_destroy) vhd->ops->channel_destroy(pss->priv); *p = pss->next; continue; } p = &((*p)->next); } break; case LWS_CALLBACK_RAW_RX: n = 0; /* this stuff is coming in telnet line discipline, we * have to strip IACs and process IAC repeats */ while (len--) { if (telnet_ld(pss, *pu)) buf[n++] = *pu++; else pu++; if (n > 100 || !len) pss->vhd->ops->rx(pss->priv, wsi, buf, (uint32_t)n); } break; case LWS_CALLBACK_RAW_WRITEABLE: n = 0; if (!pss->initial) { memcpy(buf + LWS_PRE, init, sizeof(init)); n = sizeof(init); pss->initial = 1; } else { /* bring any waiting tx into second half of buffer * restrict how much we can send to 1/4 of the buffer, * because we have to apply telnet line discipline... * in the worst case of all 0xff, doubling the size */ pu = buf + LWS_PRE + 400; m = (int)pss->vhd->ops->tx(pss->priv, LWS_STDOUT, pu, (size_t)((int)sizeof(buf) - LWS_PRE - n - 401) / 2); /* * apply telnet line discipline and copy into place * in output buffer */ while (m--) { if (*pu == 0xff) buf[LWS_PRE + n++] = 0xff; buf[LWS_PRE + n++] = *pu++; } } if (n > 0) { m = lws_write(wsi, (unsigned char *)buf + LWS_PRE, (unsigned int)n, LWS_WRITE_HTTP); if (m < 0) { lwsl_err("ERROR %d writing to di socket\n", m); return -1; } } if (vhd->ops->tx_waiting(&pss->priv)) lws_callback_on_writable(wsi); break; case LWS_CALLBACK_SSH_UART_SET_RXFLOW: /* * this is sent to set rxflow state on any connections that * sink on a particular uart. The uart index affected is in len * * More than one protocol may sink to the same uart, and the * protocol may select the uart itself, eg, in the URL used * to set up the connection. */ lws_rx_flow_control(wsi, len & 1); break; default: break; } return 0; } const struct lws_protocols protocols_telnet[] = { { "lws-telnetd-base", lws_callback_raw_telnet, sizeof(struct per_session_data__telnet), 1024, 0, NULL, 900 }, { NULL, NULL, 0, 0, 0, NULL, 0 } /* terminator */ }; libwebsockets-4.3.5/scripts/000077500000000000000000000000001476025525100160615ustar00rootroot00000000000000libwebsockets-4.3.5/scripts/ahrefs-topsites.sh000077500000000000000000000003341476025525100215400ustar00rootroot00000000000000#!/bin/bash wget -O- https://ahrefs.com/blog/most-visited-websites/ | grep most-visited-websites-us | \ sed -E 's/class="column-2">/|/g' | tr '|' '\n' | \ sed 's/<.*//g' | grep -v Domain | grep -v Josh | sort | uniq libwebsockets-4.3.5/scripts/attack.sh000077500000000000000000000526171476025525100177020ustar00rootroot00000000000000#!/bin/bash # # attack the test server and try to make it fall over # # Requires the library to have been built with # # cmake .. -DCMAKE_BUILD_TYPE=DEBUG -DLWS_WITH_MINIMAL_EXAMPLES=1 # # run it from the build dir echo echo "----------------------------------------------" echo "------- tests: lws attack.sh" echo SERVER=127.0.0.1 PORT=7681 LOG=/tmp/lwslog A=`which libwebsockets-test-server` INSTALLED=`dirname $A` SHAREDIR=$INSTALLED/../share/libwebsockets-test-server CORPUS=$SHAREDIR/test.html LWS_NC=./bin/lws-minimal-raw-netcat CPID= LEN=0 function check { kill -0 $CPID if [ $? -ne 0 ] ; then echo "(killed it) *******" exit 1 fi #dd if=$LOG bs=1 skip=$LEN 2>/dev/null if [ "$1" = "default" ] ; then diff /tmp/lwscap $CORPUS > /dev/null if [ $? -ne 0 ] ; then echo "FAIL: got something other than $CORPUS back" exit 1 fi fi if [ "$1" = "defaultplusforbidden" ] ; then cat $CORPUS > /tmp/plusforb echo -e -n "HTTP/1.0 403 Forbidden\x0d\x0acontent-type: text/html\x0d\x0acontent-length: 173\x0d\x0a\x0d\x0a

    403

    " >> /tmp/plusforb diff /tmp/lwscap /tmp/plusforb > /dev/null if [ $? -ne 0 ] ; then cat $CORPUS > /tmp/plusforb echo -e -n "HTTP/1.1 403 Forbidden\x0d\x0acontent-type: text/html\x0d\x0acontent-length: 173\x0d\x0a\x0d\x0a

    403

    " >> /tmp/plusforb diff /tmp/lwscap /tmp/plusforb > /dev/null if [ $? -ne 0 ] ; then echo "FAIL: got something other than $CORPUS + forbidden back" tail -n 10 /tmp/lwscap tail -n 100 $LOG exit 1 fi fi fi if [ "$1" = "forbidden" ] ; then if [ -z "`grep '

    403

    ' /tmp/lwscap`" ] ; then echo "FAIL: should have told forbidden (test server has no dirs)" exit 1 fi fi if [ "$1" = "notfound" ] ; then if [ -z "`grep '

    404

    ' /tmp/lwscap`" ] ; then echo "FAIL: should have told not found" exit 1 fi fi if [ "$1" = "rejected" ] ; then if [ -z "`grep '

    404

    ' /tmp/lwscap`" ] ; then echo "FAIL: should have told forbidden (test server has no dirs)" exit 1 fi fi if [ "$1" = "media" ] ; then if [ -z "`grep '

    404

    ' /tmp/lwscap`" ] ; then echo "FAIL: should have told unknown media type" exit 1 fi fi if [ "$1" == "0" ] ; then a="`dd if=$LOG bs=1 skip=$LEN 2>/dev/null |grep "get\ \ =" | tr -s ' ' | cut -d' ' -f4-`" if [ "$a" != "$2" ] ; then echo "URL path '$a' not $2" exit 1 fi fi if [ "$1" == "1" ] ; then a="`dd if=$LOG bs=1 skip=$LEN 2>/dev/null |grep URI\ Arg\ 1\: | tr -s ' ' | cut -d' ' -f7-`" if [ "$a" != "$2" ] ; then echo "Arg 1 '$a' not $2" exit 1 fi fi if [ "$1" == "2" ] ; then a="`dd if=$LOG bs=1 skip=$LEN 2>/dev/null |grep URI\ Arg\ 2\: | tr -s ' ' | cut -d' ' -f7-`" if [ "$a" != "$2" ] ; then echo "Arg 2 '$a' not $2" exit 1 fi fi if [ "$1" == "3" ] ; then a="`dd if=$LOG bs=1 skip=$LEN 2>/dev/null |grep URI\ Arg\ 3\: | tr -s ' ' | cut -d' ' -f7-`" if [ "$a" != "$2" ] ; then echo "Arg 3 '$a' not $2" exit 1 fi fi if [ -z "$1" ] ; then LEN=`stat $LOG -c %s` fi } rm -rf $LOG killall libwebsockets-test-server 2>/dev/null libwebsockets-test-server -d15 2>> $LOG >/dev/null & CPID=$! echo "Started server on PID $CPID" while [ -z "`grep ort\ 7681 $LOG`" ] ; do sleep 0.5s done check echo echo "---- /cgi-bin/settingsjs?UPDATE_SETTINGS=1&Root_Channels_1_Channel_name_http_post=%3F&Root_Channels_1_Channel_location_http_post=%3F" rm -f /tmp/lwscap echo -n -e "GET /cgi-bin/settingsjs?UPDATE_SETTINGS=1&Root_Channels_1_Channel_name_http_post=%3F&Root_Channels_1_Channel_location_http_post=%3F HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null | sed '1,/^\r$/d'> /tmp/lwscap cat /tmp/lwscap check 1 "UPDATE_SETTINGS=1" check 2 "Root_Channels_1_Channel_name_http_post=?" check 3 "Root_Channels_1_Channel_location_http_post=?" check echo echo "---- ? processing (/cgi-bin/settings.js?key1=value1)" rm -f /tmp/lwscap echo -n -e "GET /cgi-bin/settings.js?key1=value1 HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null | sed '1,/^\r$/d'> /tmp/lwscap check 1 "key1=value1" check echo echo "---- ? processing (/t%3dest?key1%3d2=value1)" rm -f /tmp/lwscap echo -n -e "GET /t%3dest?key1%3d2=value1 HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null | sed '1,/^\r$/d'> /tmp/lwscap check 0 "/t=est" check 1 "key1_2=value1" check echo echo "---- ? processing (%2f%2e%2e%2f%2e./xxtest.html?arg=1)" rm -f /tmp/lwscap echo -n -e "GET %2f%2e%2e%2f%2e./xxtest.html?arg=1 HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null | sed '1,/^\r$/d'> /tmp/lwscap check 1 "arg=1" check echo echo "---- ? processing (%2f%2e%2e%2f%2e./xxtest.html?arg=/../.)" rm -f /tmp/lwscap echo -n -e "GET %2f%2e%2e%2f%2e./xxtest.html?arg=/../. HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null | sed '1,/^\r$/d'> /tmp/lwscap check 1 "arg=/../." check echo echo "---- spam enough crap to not be GET" echo "not GET" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null > /tmp/lwscap check echo echo "---- spam more than the name buffer of crap" dd if=/dev/urandom bs=1 count=80 2>/dev/null | $LWS_NC --server $SERVER --port $PORT 2>/dev/null > /tmp/lwscap check echo echo "---- spam 10MB of crap" dd if=/dev/urandom bs=1 count=655360 | $LWS_NC --server $SERVER --port $PORT 2>/dev/null > /tmp/lwscap check echo echo "---- malformed URI" echo "GET nonsense................................................................................................................" \ | $LWS_NC --server $SERVER --port $PORT 2>/dev/null > /tmp/lwscap check echo echo "---- missing URI" echo -n -e "GET HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null >/tmp/lwscap check echo echo "---- repeated method" echo -n -e "GET blah HTTP/1.0\x0d\x0aGET blah HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null >/tmp/lwscap check echo echo "---- crazy header name part" echo -n -e "GET blah HTTP/1.0\x0d\x0a................................................................................................................" \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ | $LWS_NC --server $SERVER --port $PORT 2>/dev/null check echo echo "---- excessive uri content" echo -n -e "GET ................................................................................................................" \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ "......................................................................................................................." \ | $LWS_NC --server $SERVER --port $PORT 2>/dev/null check echo echo "---- good request but http payload coming too (test.html served then forbidden)" echo -n -e "GET /test.html HTTP/1.1\x0d\x0a\x0d\x0aILLEGAL-PAYLOAD........................................" \ | $LWS_NC --server $SERVER --port $PORT 2>/dev/null | sed '1,/^\r$/d'> /tmp/lwscap check defaultplusforbidden check echo echo "---- nonexistent file" rm -f /tmp/lwscap echo -n -e "GET /nope HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null | sed '1,/^\r$/d'> /tmp/lwscap cat /tmp/lwscap check notfound check echo echo "---- relative uri path" rm -f /tmp/lwscap echo -n -e "GET nope HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null | sed '1,/^\r$/d'> /tmp/lwscap check forbidden check echo echo "---- directory attack 1 (/../../../../etc/passwd should be /etc/passswd)" rm -f /tmp/lwscap echo -n -e "GET /../../../../etc/passwd HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null | sed '1,/^\r$/d'> /tmp/lwscap check notfound check echo echo "---- directory attack 2 (/../ should be /)" rm -f /tmp/lwscap echo -e -n "GET /../ HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null | sed '1,/^\r$/d'> /tmp/lwscap check default check echo echo "---- directory attack 3 (/./ should be /)" rm -f /tmp/lwscap echo -e -n "GET /./ HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null | sed '1,/^\r$/d'> /tmp/lwscap check default check echo echo "---- directory attack 4 (/blah/.. should be /)" rm -f /tmp/lwscap echo -e -n "GET /blah/.. HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null | sed '1,/^\r$/d'> /tmp/lwscap check default check echo echo "---- directory attack 5 (/blah/../ should be /)" rm -f /tmp/lwscap echo -e -n "GET /blah/../ HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null | sed '1,/^\r$/d'> /tmp/lwscap check default check echo echo "---- directory attack 6 (/blah/../. should be /)" rm -f /tmp/lwscap echo -e -n "GET /blah/../. HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null | sed '1,/^\r$/d'> /tmp/lwscap check default check echo echo "---- directory attack 7 (/%2e%2e%2f../../../etc/passwd should be /etc/passswd)" rm -f /tmp/lwscap echo -e -n "GET /%2e%2e%2f../../../etc/passwd HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null | sed '1,/^\r$/d'> /tmp/lwscap check notfound check echo echo "---- directory attack 8 (%2f%2e%2e%2f%2e./.%2e/.%2e%2fetc/passwd should be /etc/passswd)" rm -f /tmp/lwscap echo -e -n "GET %2f%2e%2e%2f%2e./.%2e/.%2e%2fetc/passwd HTTP/1.0\x0d\x0a\x0d\x0a" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null | sed '1,/^\r$/d'> /tmp/lwscap check notfound check echo echo "---- http/1.1 pipelining" rm -f /tmp/lwscap wget -O/tmp/lwsdump http://localhost:7681/test.html http://localhost:7681/test.html http://localhost:7681/test.html http://localhost:7681/test.html http://localhost:7681/test.html http://localhost:7681/test.html http://localhost:7681/test.html http://localhost:7681/test.html 2>&1 | grep "Downloaded: 8 files" > /tmp/lwscap good=`cat $CORPUS $CORPUS $CORPUS $CORPUS $CORPUS $CORPUS $CORPUS $CORPUS | md5sum | cut -d' ' -f1` if [ "$good" != "`md5sum /tmp/lwsdump | cut -d' ' -f 1`" ] ; then echo "FAIL: mismatched content good=$good received=`md5sum /tmp/lwsdump`" exit 1 fi echo echo "---- mass testing uri variations" rm -f /tmp/results for i in \ /..../ \ /.../. \ /...// \ /.../a \ /.../w \ "/.../?" \ /.../% \ /../.. \ /.././ \ /../.a \ /../.w \ /../.. \ /../.% \ /..//. \ /../// \ /..//a \ /..//w \ "/..//?" \ /..//% \ /../a. \ /../a/ \ /../aa \ /../aw \ /../a? \ /../a% \ /../w. \ /../w/ \ /../wa \ /../ww \ /../w? \ /../w% \ /../?. \ /../?/ \ /../?a \ /../?w \ /../?? \ /../?% \ /../%. \ /../%/ \ /../%a \ /../%w \ /../%? \ /../%% \ /./... \ /./../ \ /./..a \ /./..w \ /./..? \ /./..% \ /.//.. \ /.a../ \ /.a/.. \ /.w../ \ /.w/.. \ /.?../ \ /../.. \ /.%../ \ /.%/.. \ //.... \ //.../ \ //...a \ //...w \ //...? \ //...% \ //../. \ //..// \ //../a \ //../w \ //../? \ //../% \ //..a. \ //..a/ \ //..aa \ //..aw \ //..a? \ //..a% \ //..w. \ //..w/ \ //..wa \ //..ww \ //..w? \ //..w% \ //..?. \ //..?/ \ //..?a \ //..?w \ //..?? \ //..?% \ //..%. \ //..%/ \ //..%a \ //..%w \ //..%? \ //..%% \ //./.. \ ///... \ ///../ \ ///..a \ ///..w \ ///..? \ ///..% \ ////.. \ //a../ \ //a/.. \ //w../ \ //w/.. \ //?../ \ //?/.. \ //%../ \ //%/.. \ /a.../ \ /a../. \ /a..// \ /a../a \ /a../w \ /a../? \ /a../% \ /a./.. \ /a/... \ /a/../ \ /a/..a \ /a/..w \ /a/..? \ /a/..% \ /a//.. \ /aa../ \ /aa/.. \ /aw../ \ /aw/.. \ /a?../ \ /a?/.. \ /a%../ \ /a%/.. \ /w.../ \ /w../. \ /w..// \ /w../a \ /w../w \ /w../? \ /w../% \ /w./.. \ /w/... \ /w/../ \ /w/..a \ /w/..w \ /w/..? \ /w/..% \ /w//.. \ /wa../ \ /wa/.. \ /ww../ \ /ww/.. \ /w?../ \ /w?/.. \ /w%../ \ /w%/.. \ /?.../ \ /?../. \ /?..// \ /?../a \ /?../w \ /?../? \ /?../% \ /?./.. \ /?/... \ /?/../ \ /?/..a \ /?/..w \ /?/..? \ /?/..% \ /?//.. \ /?a../ \ /?a/.. \ /?w../ \ /?w/.. \ /??../ \ /??/.. \ /?%../ \ /?%/.. \ /%.../ \ /%../. \ /%..// \ /%../a \ /%../w \ /%../? \ /%../% \ /%./.. \ /%/... \ /%/../ \ /%/..a \ /%/..w \ /%/..? \ /%/..% \ /%//.. \ /%a../ \ /%a/.. \ /%w../ \ /%w/.. \ /%?../ \ /%?/.. \ /%%../ \ /%%/.. \ /a/w/../a \ /path/to/dir/../other/dir \ ; do LEN=`stat $LOG -c %s` rm -f /tmp/lwscap1 echo -n -e "GET $i HTTP/1.0\r\n\r\n" | $LWS_NC --server $SERVER --port $PORT 2>/dev/null > /tmp/lwscap1 R=`cat /tmp/lwscap1| head -n 1 | cut -d' ' -f 2` #cat $LOG #echo ==== $R if [ "$R" != "403" ]; then U=`dd if=$LOG bs=1 skip=$LEN 2>/dev/null| grep "Method:" | tr -s ' ' | cut -d"'" -f4` #dd if=$LOG bs=1 skip=$LEN 2>/dev/null echo "- \"$i\" -> $R \"$U\"" >>/tmp/results else echo "- \"$i\" -> $R" >>/tmp/results fi done cat </tmp/lwsresult1 - "/..../" -> 404 "/..../" - "/.../." -> 404 "/.../" - "/...//" -> 404 "/.../" - "/.../a" -> 404 "/.../a" - "/.../w" -> 404 "/.../w" - "/.../?" -> 404 "/.../" - "/.../%" -> 403 - "/../.." -> 200 "/" - "/.././" -> 200 "/" - "/../.a" -> 404 "/.a" - "/../.w" -> 404 "/.w" - "/../.." -> 200 "/" - "/../.%" -> 403 - "/..//." -> 200 "/" - "/..///" -> 200 "/" - "/..//a" -> 404 "/a" - "/..//w" -> 404 "/w" - "/..//?" -> 200 "/" - "/..//%" -> 403 - "/../a." -> 404 "/a." - "/../a/" -> 404 "/a/" - "/../aa" -> 404 "/aa" - "/../aw" -> 404 "/aw" - "/../a?" -> 404 "/a" - "/../a%" -> 403 - "/../w." -> 404 "/w." - "/../w/" -> 404 "/w/" - "/../wa" -> 404 "/wa" - "/../ww" -> 404 "/ww" - "/../w?" -> 404 "/w" - "/../w%" -> 403 - "/../?." -> 200 "/" - "/../?/" -> 200 "/" - "/../?a" -> 200 "/" - "/../?w" -> 200 "/" - "/../??" -> 200 "/" - "/../?%" -> 403 - "/../%." -> 403 - "/../%/" -> 403 - "/../%a" -> 403 - "/../%w" -> 403 - "/../%?" -> 403 - "/../%%" -> 403 - "/./..." -> 404 "/..." - "/./../" -> 200 "/" - "/./..a" -> 404 "/..a" - "/./..w" -> 404 "/..w" - "/./..?" -> 200 "/" - "/./..%" -> 403 - "/.//.." -> 200 "/" - "/.a../" -> 404 "/.a../" - "/.a/.." -> 200 "/" - "/.w../" -> 404 "/.w../" - "/.w/.." -> 200 "/" - "/.?../" -> 404 "/." - "/../.." -> 200 "/" - "/.%../" -> 403 - "/.%/.." -> 403 - "//...." -> 404 "/...." - "//.../" -> 404 "/.../" - "//...a" -> 404 "/...a" - "//...w" -> 404 "/...w" - "//...?" -> 404 "/..." - "//...%" -> 403 - "//../." -> 200 "/" - "//..//" -> 200 "/" - "//../a" -> 404 "/a" - "//../w" -> 404 "/w" - "//../?" -> 200 "/" - "//../%" -> 403 - "//..a." -> 404 "/..a." - "//..a/" -> 404 "/..a/" - "//..aa" -> 404 "/..aa" - "//..aw" -> 404 "/..aw" - "//..a?" -> 404 "/..a" - "//..a%" -> 403 - "//..w." -> 404 "/..w." - "//..w/" -> 404 "/..w/" - "//..wa" -> 404 "/..wa" - "//..ww" -> 404 "/..ww" - "//..w?" -> 404 "/..w" - "//..w%" -> 403 - "//..?." -> 200 "/" - "//..?/" -> 200 "/" - "//..?a" -> 404 "/a" - "//..?w" -> 404 "/w" - "//..??" -> 200 "/" - "//..?%" -> 403 - "//..%." -> 403 - "//..%/" -> 403 - "//..%a" -> 403 - "//..%w" -> 403 - "//..%?" -> 403 - "//..%%" -> 403 - "//./.." -> 200 "/" - "///..." -> 404 "/..." - "///../" -> 200 "/" - "///..a" -> 404 "/..a" - "///..w" -> 404 "/..w" - "///..?" -> 200 "/" - "///..%" -> 403 - "////.." -> 200 "/" - "//a../" -> 404 "/a../" - "//a/.." -> 200 "/" - "//w../" -> 404 "/w../" - "//w/.." -> 200 "/" - "//?../" -> 200 "/" - "//?/.." -> 200 "/" - "//%../" -> 403 - "//%/.." -> 403 - "/a.../" -> 404 "/a.../" - "/a../." -> 404 "/a../" - "/a..//" -> 404 "/a../" - "/a../a" -> 404 "/a../a" - "/a../w" -> 404 "/a../w" - "/a../?" -> 404 "/a../" - "/a../%" -> 403 - "/a./.." -> 200 "/" - "/a/..." -> 404 "/a/..." - "/a/../" -> 200 "/" - "/a/..a" -> 404 "/a/..a" - "/a/..w" -> 404 "/a/..w" - "/a/..?" -> 200 "/" - "/a/..%" -> 403 - "/a//.." -> 200 "/" - "/aa../" -> 404 "/aa../" - "/aa/.." -> 200 "/" - "/aw../" -> 404 "/aw../" - "/aw/.." -> 200 "/" - "/a?../" -> 404 "/a" - "/a?/.." -> 404 "/a" - "/a%../" -> 403 - "/a%/.." -> 403 - "/w.../" -> 404 "/w.../" - "/w../." -> 404 "/w../" - "/w..//" -> 404 "/w../" - "/w../a" -> 404 "/w../a" - "/w../w" -> 404 "/w../w" - "/w../?" -> 404 "/w../" - "/w../%" -> 403 - "/w./.." -> 200 "/" - "/w/..." -> 404 "/w/..." - "/w/../" -> 200 "/" - "/w/..a" -> 404 "/w/..a" - "/w/..w" -> 404 "/w/..w" - "/w/..?" -> 200 "/" - "/w/..%" -> 403 - "/w//.." -> 200 "/" - "/wa../" -> 404 "/wa../" - "/wa/.." -> 200 "/" - "/ww../" -> 404 "/ww../" - "/ww/.." -> 200 "/" - "/w?../" -> 404 "/w" - "/w?/.." -> 404 "/w" - "/w%../" -> 403 - "/w%/.." -> 403 - "/?.../" -> 200 "/" - "/?../." -> 200 "/" - "/?..//" -> 200 "/" - "/?../a" -> 200 "/" - "/?../w" -> 200 "/" - "/?../?" -> 200 "/" - "/?../%" -> 403 - "/?./.." -> 200 "/" - "/?/..." -> 200 "/" - "/?/../" -> 200 "/" - "/?/..a" -> 200 "/" - "/?/..w" -> 200 "/" - "/?/..?" -> 200 "/" - "/?/..%" -> 403 - "/?//.." -> 200 "/" - "/?a../" -> 200 "/" - "/?a/.." -> 200 "/" - "/?w../" -> 200 "/" - "/?w/.." -> 200 "/" - "/??../" -> 200 "/" - "/??/.." -> 200 "/" - "/?%../" -> 403 - "/?%/.." -> 403 - "/%.../" -> 403 - "/%../." -> 403 - "/%..//" -> 403 - "/%../a" -> 403 - "/%../w" -> 403 - "/%../?" -> 403 - "/%../%" -> 403 - "/%./.." -> 403 - "/%/..." -> 403 - "/%/../" -> 403 - "/%/..a" -> 403 - "/%/..w" -> 403 - "/%/..?" -> 403 - "/%/..%" -> 403 - "/%//.." -> 403 - "/%a../" -> 403 - "/%a/.." -> 403 - "/%w../" -> 403 - "/%w/.." -> 403 - "/%?../" -> 403 - "/%?/.." -> 403 - "/%%../" -> 403 - "/%%/.." -> 403 - "/a/w/../a" -> 404 "/a/a" - "/path/to/dir/../other/dir" -> 404 "/path/to/other/dir" EOF if [ "`md5sum /tmp/results | cut -d' ' -f 1`" != "`md5sum /tmp/lwsresult1 | cut -d' ' -f1`" ] ; then echo "Differences..." diff -urN /tmp/lwsresult1 /tmp/results cat /tmp/lwscap1 ls -l /tmp/results cat /tmp/results # this is currently broken on travis # exit 1 else echo "OK" fi echo echo "--- survived OK ---" kill -2 $CPID exit 0 # coverage... # run the test client against mirror for one period and exit killall libwebsockets-test-server 2>/dev/null libwebsockets-test-server -s 2>> $LOG & CPID=$! sleep 1s libwebsockets-test-client 127.0.0.1 -s -O # https://github.com/curl/curl/issues/1587 curl -v -F text=hello -F send=SEND -F upload=@../README.md https://127.0.0.1:7681/formtest -k kill -2 $CPID exit 0 libwebsockets-4.3.5/scripts/autobahn-test-client.sh000077500000000000000000000046671476025525100224670ustar00rootroot00000000000000#!/bin/bash # # Requires pip install autobahntestsuite # # you should run this from ./build, after building with # cmake .. -DLWS_WITH_MINIMAL_EXAMPLES=1 # # It will use the minimal echo client and server to run # autobahn ws tests as both client and server. echo echo "----------------------------------------------" echo "------- tests: autobahn as client" echo set -u PARALLEL=1 N=1 OS=`uname` CLIE=bin/lws-minimal-ws-client-echo SERV=bin/lws-minimal-ws-server-echo RESULT=0 which wstest 2>/dev/null if [ $? -ne 0 ]; then echo "wstest is not installed" exit 8 fi killall wstest 2>/dev/null # # 2.10 / 2.11: There is no requirement to handle multiple PING / PONG # in flight in RFC6455. lws doesn't waste memory on it # since it is useless. # # 12.3.1 / 12.3.2 # 12.4.* / 12.5.*: Autobahn has been broken for these tests since Aug 2017 # https://github.com/crossbario/autobahn-testsuite/issues/71 cat << EOF >fuzzingserver.json { "url": "ws://127.0.0.1:9001", "outdir": "./reports/clients", "cases": ["*"], "exclude-cases": [ "2.10", "2.11", "12.3.1", "12.3.2", "12.4.*", "12.5.*"], "exclude-agent-cases": {} } EOF PYTHONHASHSEED=0 wstest -m fuzzingserver & Q=$! sleep 2s ps -p $Q > /dev/null if [ $? -ne 0 ] ; then echo "Problem with autobahn wstest install" exit 9 fi # 1) lws-as-client tests first ok=1 while [ $ok -eq 1 ] ; do $CLIE -s 127.0.0.1 -p 9001 -u "/runCase?case=$N&agent=libwebsockets" -d3 if [ $? -ne 0 ]; then ok=0 fi N=$(( $N + 1 )) done # generate the report in ./reports # $CLIE -s 127.0.0.1 -p 9001 -u "/updateReports?agent=libwebsockets" -o -d3 sleep 2s killall wstest sleep 1s # this squashes the results into single lines like # # "9.8.4": { "behavior": "OK", "behaviorClose": "OK", "duration": 1312, "remoteCloseCode": 1000, "reportfile": "libwebsockets_case_9_8_4.json" cat reports/clients/index.json | tr '\n' '!' | sed "s|\},\!|\n|g" | tr '!' ' ' | tr -s ' ' > /tmp/ji echo -n "AUTOBAHN SERVER / LWS CLIENT: Total tests: " `cat /tmp/ji | wc -l` " : " R="`cat /tmp/ji | grep -v '"behavior": "OK"' | grep -v '"behavior": "NON-STRICT"' | grep -v '"behavior": "INFORMATIONAL"' | wc -l`" if [ "$R" == "0" ] ; then echo "All pass" else RESULT=1 echo -n "$R FAIL : " cat /tmp/ji | grep -v '"behavior": "OK"' | grep -v '"behavior": "NON-STRICT"' | grep -v '"behavior": "INFORMATIONAL"' | cut -d\" -f2 | tr '\n' ',' echo fi echo $RESULT exit $RESULT libwebsockets-4.3.5/scripts/autobahn-test-server.sh000077500000000000000000000043651476025525100225120ustar00rootroot00000000000000#!/bin/bash # # Requires pip install autobahntestsuite # # you should run this from ./build, after building with # cmake .. -DLWS_WITH_MINIMAL_EXAMPLES=1 # # It will use the minimal echo client and server to run # autobahn ws tests as both client and server. set -u PARALLEL=2 N=1 OS=`uname` CLIE=bin/lws-minimal-ws-client-echo SERV=bin/lws-minimal-ws-server-echo RESULT=0 which wstest 2>/dev/null if [ $? -ne 0 ]; then echo "wstest is not installed" exit 8 fi killall wstest 2>/dev/null # # 2.10 / 2.11: There is no requirement to handle multiple PING / PONG # in flight on a single connection in RFC6455. lws doesn't # waste memory on supporting it since it is useless. cat << EOF >fuzzingclient.json { "outdir": "./reports/servers", "servers": [ { "url": "ws://127.0.0.1:9001" } ], "cases": [ "*" ], "exclude-cases": ["2.10", "2.11" ], "exclude-agent-cases": {} } EOF echo echo "----------------------------------------------" echo "------- tests: autobahn as server" echo $SERV -p 9001 -d3 & wstest -m fuzzingclient R=$? echo "Autobahn client exit $R" killall lws-minimal-ws-server-echo sleep 1s # repeat the client results R=`cat /tmp/ji | grep -v '"behavior": "OK"' | grep -v '"behavior": "NON-STRICT"' | grep -v '"behavior": "INFORMATIONAL"' | wc -l` echo -n "AUTOBAHN SERVER / LWS CLIENT: Total tests: " `cat /tmp/ji | wc -l` " : " if [ "$R" == "0" ] ;then echo "All pass" else RESULT=1 echo -n "$R FAIL : " cat /tmp/ji | grep -v '"behavior": "OK"' | grep -v '"behavior": "NON-STRICT"' | grep -v '"behavior": "INFORMATIONAL"' | cut -d\" -f2 | tr '\n' ',' echo fi # and then the server results cat reports/servers/index.json | tr '\n' '!' | sed "s|\},\!|\n|g" | tr '!' ' ' | tr -s ' ' > /tmp/jis R=`cat /tmp/jis | grep -v '"behavior": "OK"' | grep -v '"behavior": "NON-STRICT"' | grep -v '"behavior": "INFORMATIONAL"' | wc -l` echo -n "AUTOBAHN CLIENT / LWS SERVER: Total tests: " `cat /tmp/jis | wc -l` " : " if [ "$R" == "0" ] ;then echo "All pass" else RESULT=$(( $RESULT + 2 )) echo -n "$R FAIL : " cat /tmp/jis | grep -v '"behavior": "OK"' | grep -v '"behavior": "NON-STRICT"' | grep -v '"behavior": "INFORMATIONAL"' | cut -d\" -f2 | tr '\n' ',' echo fi echo $RESULT exit $RESULT libwebsockets-4.3.5/scripts/build-gcov.sh000077500000000000000000000002171476025525100204530ustar00rootroot00000000000000#!/bin/sh cmake .. -DLWS_WITH_GCOV=1 && \ make clean && \ rm -f `find . -name "*.gcno" -o -name "*.gcda"` && \ make -j16 && sudo make install libwebsockets-4.3.5/scripts/client-ca/000077500000000000000000000000001476025525100177205ustar00rootroot00000000000000libwebsockets-4.3.5/scripts/client-ca/certindex.txt000066400000000000000000000000001476025525100224340ustar00rootroot00000000000000libwebsockets-4.3.5/scripts/client-ca/create-ca.sh000077500000000000000000000002551476025525100221050ustar00rootroot00000000000000#!/bin/sh openssl genrsa -out ca.key 2048 && \ printf "\\n\\n\\n\\n\\n\\n\\n" | \ openssl req -config tmp.cnf -x509 -new -nodes -key ca.key -sha256 -days 1024 -out ca.pem libwebsockets-4.3.5/scripts/client-ca/create-client-cert.sh000077500000000000000000000007121476025525100237310ustar00rootroot00000000000000#!/bin/sh if [ -z "$1" ] ; then echo "Usage $0 " exit 1 fi mkdir -p certs openssl genrsa -out $1.key 4096 && \ printf "\\n\\n\\n\\n\\n$1\\n\\n1234\\n\\n" | \ openssl req -config tmp.cnf -new -key $1.key -out $1.csr && \ openssl ca -config tmp.cnf \ -keyfile ca.key \ -cert ca.pem \ -extensions usr_cert \ -days 375 \ -notext \ -md sha256 \ -in $1.csr \ -out $1.pem && \ openssl pkcs12 -export -in $1.pem -inkey $1.key -out $1.p12 libwebsockets-4.3.5/scripts/client-ca/create-server-cert.sh000077500000000000000000000006231476025525100237620ustar00rootroot00000000000000#!/bin/sh if [ -z "$1" ] ; then echo "Usage $0 " exit 1 fi mkdir -p certs openssl genrsa -out $1.key 4096 && \ printf "\\n\\n\\n\\n\\nlocalhost\\n\\n1234\\n\\n" | \ openssl req -config tmp.cnf -new -key $1.key -out $1.csr && \ openssl ca -config tmp.cnf \ -keyfile ca.key \ -cert ca.pem \ -extensions server_cert \ -days 375 \ -notext \ -md sha256 \ -in $1.csr \ -out $1.pem libwebsockets-4.3.5/scripts/client-ca/serial000066400000000000000000000000071476025525100211170ustar00rootroot00000000000000100003 libwebsockets-4.3.5/scripts/client-ca/tmp.cnf000066400000000000000000000040211476025525100212050ustar00rootroot00000000000000# # OpenSSL configuration file. # # Establish working directory. dir = . [ ca ] default_ca = CA_default [ CA_default ] serial = $dir/serial database = $dir/certindex.txt new_certs_dir = $dir/certs certificate = $dir/cacert.pem private_key = $dir/private/cakey.pem default_days = 365 default_md = sha256 preserve = no email_in_dn = no nameopt = default_ca certopt = default_ca policy = policy_match [ policy_match ] countryName = match stateOrProvinceName = match organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional [ usr_cert ] [ server_cert ] [ req ] default_bits = 4096 # Size of keys default_keyfile = key.pem # name of generated keys default_md = sha256 # message digest algorithm string_mask = nombstr # permitted characters distinguished_name = req_distinguished_name req_extensions = v3_req [ req_distinguished_name ] # Variable name Prompt string #------------------------- ---------------------------------- 0.organizationName = Organization Name (company) organizationalUnitName = Organizational Unit Name (department, division) emailAddress = Email Address emailAddress_max = 40 localityName = Locality Name (city, district) stateOrProvinceName = State or Province Name (full name) countryName = Country Name (2 letter code) countryName_min = 2 countryName_max = 2 commonName = Common Name (hostname, IP, or your name) commonName_max = 64 # Default values for the above, for consistency and less typing. # Variable name Value #------------------------ ------------------------------ 0.organizationName_default = libwebsockets-test localityName_default = Xiaobitan stateOrProvinceName_default = Taipei countryName_default = TW emailAddress = none@invalid [ v3_ca ] basicConstraints = CA:TRUE subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer:always [ v3_req ] basicConstraints = CA:FALSE subjectKeyIdentifier = hash libwebsockets-4.3.5/scripts/ctest-background-kill.sh000077500000000000000000000021341476025525100226100ustar00rootroot00000000000000#!/bin/bash # # $SAI_INSTANCE_IDX - which instance of sai, 0+ # $1 - background fixture name, unique within test space, like "multipostlocalsrv" # $2 - executable # $3+ - args echo "$0 $1 $2 $3 $4" J=`basename $2`.$1.$SAI_INSTANCE_IDX PI=`cat /tmp/sai-ctest-$J` # # We expect our background process to initially still be around # kill -0 $PI GONESKI=$? echo "Background task $PI: $J" if [ $GONESKI -eq 1 ] ; then echo "Background Process $PI unexpectedly dead already, their log" cat /tmp/ctest-background-$J exit 1 fi echo "Trying SIGTERM..." kill $PI # # 100ms intervals, 100 = 10s # need to allow time for valgrind case # BUDGET=100 while [ $BUDGET -ne 0 ] ; do sleep 0.1 kill -0 $PI 2>&1 if [ $? -eq 1 ] ; then echo "Went down OK" exit 0 fi BUDGET=$(( $BUDGET - 1 )) done echo "Trying SIGKILL..." kill -9 $PI # # 100ms intervals, 100 = 10s # need to allow time for valgrind case # BUDGET=20 while [ $BUDGET -ne 0 ] ; do sleep 0.1 kill -0 $PI 2>&1 if [ $? -eq 1 ] ; then echo "Went down OK after SIGKILL" exit 0 fi BUDGET=$(( $BUDGET - 1 )) done echo "Couldn't kill it" exit 1 libwebsockets-4.3.5/scripts/ctest-background.sh000077500000000000000000000010621476025525100216560ustar00rootroot00000000000000#!/bin/bash # # $SAI_INSTANCE_IDX - which instance of sai, 0+ # $1 - background fixture name, unique within test space, like "multipostlocalserver" # $2 - executable # $3+ - args J=`basename $2`.$1.$SAI_INSTANCE_IDX $2 $3 $4 $5 $6 $7 $8 $9 2>/tmp/ctest-background-$J 1>/dev/null 0 /tmp/sai-ctest-$J # really we want to loop until the listen port is up # on, eg, rpi it can be blocked at sd card and slow to start # due to parallel tests and disc cache flush if [ ! -z "`echo $2 | grep valgrind`" ] ; then sleep 5 else sleep 1 fi exit 0 libwebsockets-4.3.5/scripts/dox-extra.css000066400000000000000000000000741476025525100205070ustar00rootroot00000000000000code { text-color: #000000; background-color: #f0f0a0; } libwebsockets-4.3.5/scripts/esp32.mk000066400000000000000000000120501476025525100173440ustar00rootroot00000000000000# # LWS-style images are composed like this # # [ OTA or Factory standard xpressif image ] # [ 32-b LE len ] [ ROMFS ] # [ 32-b LE len ] [ Image information JSON ] # SHELL=/bin/bash # check genromfs is available GENROMFS := $(shell command -v genromfs 2> /dev/null) # check xxd is available XXD := $(shell command -v xxd 2> /dev/null) ESPPORT ?= $(CONFIG_ESPTOOLPY_PORT) LWS_BUILD_PATH=$(PROJECT_PATH)/build jbi=$(LWS_BUILD_PATH)/json-buildinfo FAC=$(CONFIG_LWS_IS_FACTORY_APPLICATION) ifeq ($(FAC),) FAC=0 endif export FAC $(LWS_BUILD_PATH)/pack.img: $(APP_BIN) if [ -z "$(GENROMFS)" ]; then \ echo "ERROR: genromfs is unavailable, please install or compile genromfs" ; \ exit 1 ; \ fi; \ if [ -z "$(XXD)" ]; then \ echo "ERROR: xxd is unavailable, please install or compile xxd (usually provided by vim package)" ; \ exit 1 ; \ fi; \ GNUSTAT=stat ;\ if [ `which gstat 2>/dev/null` ] ; then GNUSTAT=gstat ; fi ;\ genromfs -f $(LWS_BUILD_PATH)/romfs.img -d $(PROJECT_PATH)/romfs-files ; \ RLEN=$$($$GNUSTAT -c %s $(LWS_BUILD_PATH)/romfs.img) ;\ LEN=$$($$GNUSTAT -c %s $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin) ;\ printf " Original length: 0x%06x (%8d)\n" $$LEN $$LEN ; \ printf %02x $$(( $$RLEN % 256 )) | xxd -r -p >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\ printf %02x $$(( ( $$RLEN / 256 ) % 256 )) | xxd -r -p >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\ printf %02x $$(( ( $$RLEN / 65536 ) % 256 )) | xxd -r -p >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\ printf %02x $$(( ( $$RLEN / 16777216 ) % 256 )) | xxd -r -p >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\ cat $(LWS_BUILD_PATH)/romfs.img >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ; \ LEN=$$($$GNUSTAT -c %s $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin) ;\ UNIXTIME=$$(date +%s | tr -d '\n') ; \ echo -n -e "{\r\n \"schema\": \"lws1\",\r\n \"model\": \"$(CONFIG_LWS_MODEL_NAME)\",\r\n \"builder\": \"" > $(jbi) ;\ hostname | tr -d '\n' >> $(jbi) ;\ echo -n -e "\",\r\n \"app\": \"" >> $(jbi) ;\ echo -n $(PROJECT_NAME) >> $(jbi) ;\ echo -n -e "\",\r\n \"user\": \"" >> $(jbi) ;\ whoami | tr -d '\n' >>$(jbi) ;\ echo -n -e "\",\r\n \"git\": \"" >> $(jbi) ;\ git describe --dirty --always | tr -d '\n' >> $(jbi) ;\ echo -n -e "\",\r\n \"date\": \"" >> $(jbi) ;\ date | tr -d '\n' >> $(jbi) ;\ echo -n -e "\",\r\n \"unixtime\": \"" >> $(jbi) ;\ echo -n $$UNIXTIME >> $(jbi) ;\ echo -n -e "\",\r\n \"file\": \""$(PROJECT_NAME)-$$UNIXTIME.bin >> $(jbi) ;\ echo -n -e "\",\r\n \"factory\": \"$(FAC)" >> $(jbi) ;\ echo -n -e "\"\r\n}" >> $(jbi) ;\ JLEN=$$($$GNUSTAT -c %s $(jbi)) ;\ printf %02x $$(( $$JLEN % 256 )) | xxd -r -p >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\ printf %02x $$(( ( $$JLEN / 256 ) % 256 )) | xxd -r -p >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\ printf %02x $$(( ( $$JLEN / 65536 ) % 256 )) | xxd -r -p >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\ printf %02x $$(( ( $$JLEN / 16777216 ) % 256 )) | xxd -r -p >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\ cat $(jbi) >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\ cp $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin $(LWS_BUILD_PATH)/pack.img ;\ LEN=$$($$GNUSTAT -c %s $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin) ;\ cp $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin $(LWS_BUILD_PATH)/$(PROJECT_NAME)-$$UNIXTIME.bin ;\ printf " After ROMFS + Build info: 0x%06x (%8d)\n" $$LEN $$LEN .PHONY: manifest manifest: ifeq ($F,) echo "Usage make F= A= manifest" exit 1 endif ifeq ($A,) echo "Usage make F= A= manifest" exit 1 endif echo -n -e "{\r\n\"app\": " > build/manifest.json cat $(A)/build/json-buildinfo >> build/manifest.json echo -n -e ", \"factory\": " >> build/manifest.json cat $(F)/build/json-buildinfo >> build/manifest.json echo -n -e "\r\n}\r\n" >> build/manifest.json all: $(LWS_BUILD_PATH)/pack.img flash: $(LWS_BUILD_PATH)/pack.img lws_flash_ota: $(LWS_BUILD_PATH)/pack.img $(IDF_PATH)/components/esptool_py/esptool/esptool.py \ --chip esp32 \ --port $(ESPPORT) \ --baud $(CONFIG_ESPTOOLPY_BAUD) \ write_flash 0x120000 $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin lws_erase_ota: $(IDF_PATH)/components/esptool_py/esptool/esptool.py \ --chip esp32 \ --port $(ESPPORT) \ --baud $(CONFIG_ESPTOOLPY_BAUD) \ erase_region 0x120000 0x2e0000 export A export F .PHONY: upload upload: manifest ifeq ($F,) echo "Usage make F= A= manifest" exit 1 endif ifeq ($A,) echo "Usage make F= A= manifest" exit 1 endif UPL=$(CONFIG_LWS_OTA_SERVER_UPLOAD_USER)@$(CONFIG_LWS_OTA_SERVER_FQDN):$(CONFIG_LWS_OTA_SERVER_UPLOAD_PATH)/$(CONFIG_LWS_OTA_SERVER_BASE_URL)/$(CONFIG_LWS_MODEL_NAME)/ ;\ AFILE=$(A)/build/$$(cat $$A/build/json-buildinfo | grep -- \"file\"\: |cut -d' ' -f3 |cut -d'"' -f2) ;\ echo " Uploading $$AFILE to " $$UPL ;\ scp $$AFILE $$UPL ;\ FFILE=$(F)/build/$$(cat $$F/build/json-buildinfo | grep -- \"file\"\: |cut -d' ' -f3 |cut -d'"' -f2) ;\ echo " Uploading $$FFILE" ;\ scp $$FFILE $$UPL ;\ echo " Uploading manifest" ;\ scp build/manifest.json $$UPL libwebsockets-4.3.5/scripts/gcov.sh000077500000000000000000000001261476025525100173550ustar00rootroot00000000000000#!/bin/sh gcov `find . -name *.c.gcno | grep -v test-apps` -b | sed "/\.h.\$/,/^$/d" libwebsockets-4.3.5/scripts/h2load-smp.sh000077500000000000000000000016571476025525100203770ustar00rootroot00000000000000#!/bin/bash # # run from the build dir echo echo "----------------------------------------------" echo "------- tests: h2load SMP" echo PW=`pwd` cd ../minimal-examples/http-server/minimal-http-server-smp $PW/bin/lws-minimal-http-server-smp -s & R=$! sleep 0.5s # check h1 with various loads h2load -n 10000 -c 1 --h1 https://127.0.0.1:7681 if [ $? -ne 0 ] ; then Q=$? kill $R wait $R exit $Q fi h2load -n 10000 -c 10 --h1 https://127.0.0.1:7681 if [ $? -ne 0 ] ; then Q=$? kill $R wait $R exit $Q fi h2load -n 100000 -c 100 --h1 https://127.0.0.1:7681 if [ $? -ne 0 ] ; then Q=$? kill $R wait $R exit $Q fi # check h2 with various loads h2load -n 10000 -c 1 https://127.0.0.1:7681 if [ $? -ne 0 ] ; then Q=$? kill $R wait $R exit $Q fi h2load -n 10000 -c 10 https://127.0.0.1:7681 if [ $? -ne 0 ] ; then Q=$? kill $R wait $R exit $Q fi h2load -n 100000 -c 100 https://127.0.0.1:7681 Q=$? kill $R wait $R exit $Q libwebsockets-4.3.5/scripts/h2load.sh000077500000000000000000000016501476025525100175730ustar00rootroot00000000000000#!/bin/bash # # run from the build dir echo echo "----------------------------------------------" echo "------- tests: h2load" echo PW=`pwd` cd ../minimal-examples/http-server/minimal-http-server-tls $PW/bin/lws-minimal-http-server-tls & R=$! sleep 0.5s # check h1 with various loads h2load -n 10000 -c 1 --h1 https://127.0.0.1:7681 if [ $? -ne 0 ] ; then Q=$? kill $R wait $R exit $Q fi h2load -n 10000 -c 10 --h1 https://127.0.0.1:7681 if [ $? -ne 0 ] ; then Q=$? kill $R wait $R exit $Q fi h2load -n 100000 -c 100 --h1 https://127.0.0.1:7681 if [ $? -ne 0 ] ; then Q=$? kill $R wait $R exit $Q fi # check h2 with various loads h2load -n 10000 -c 1 https://127.0.0.1:7681 if [ $? -ne 0 ] ; then Q=$? kill $R wait $R exit $Q fi h2load -n 10000 -c 10 https://127.0.0.1:7681 if [ $? -ne 0 ] ; then Q=$? kill $R wait $R exit $Q fi h2load -n 100000 -c 100 https://127.0.0.1:7681 Q=$? kill $R wait $R exit $Q libwebsockets-4.3.5/scripts/h2spec.sh000077500000000000000000000013701476025525100176050ustar00rootroot00000000000000#!/bin/bash # # run from the build subdir # echo echo "----------------------------------------------" echo "------- tests: h2spec" echo if [ ! -e h2spec ] ; then wget https://github.com/summerwind/h2spec/releases/download/v2.1.0/h2spec_linux_amd64.tar.gz &&\ tar xf h2spec_linux_amd64.tar.gz if [ ! -e h2spec ] ; then echo "Couldn't get h2spec" exit 1 fi fi cd ../minimal-examples/http-server/minimal-http-server-tls ../../../build/bin/lws-minimal-http-server-tls& sleep 1s P=$! ../../../build/h2spec -h 127.0.0.1 -p 7681 -t -k -S > /tmp/hlog kill $P 2>/dev/null wait $P 2>/dev/null if [ ! -z "`cat /tmp/hlog | grep "Failures:"`" ] ; then cat /tmp/hlog | sed '/Failures:/,$!d' exit 1 fi cat /tmp/hlog | sed '/Finished\ in/,$!d' exit 0 libwebsockets-4.3.5/scripts/mozilla-trust-gen.sh000077500000000000000000000143041476025525100220170ustar00rootroot00000000000000#!/bin/bash # This script fetches the current list of trusted CAs blessed by Mozilla # for web tls validation, and processes it into two outputs # # - ./trust/webroot/* consisting of ./_trust/webroot/der a static, serveable set # of trusted DER certs, with symlinks in ./_trust/webroot/by-skid and # ./_trust/webroot/by-iss allowing serving the DER matching a given # SubjectKeyIdentifier or Issuer + serial combination (suitably encoded) # # - ./_trust/blob-XXXX.bin a single blob containing indexes and DER CA certs # # - ./_trust/trust_blob.h a C uint8_t array formatted copy of blob-XXXX.bin # The trust blob layout is currently # # 54 42 4c 42 Magic "TBLB" # 00 01 MSB-first trust blob layout version # XX XX MSB-first count of certificates # XX XX XX XX MSB-first trust blob generation unix time # XX XX XX XX MSB-first offset of cert length table (MSB-first 16-bit length-per-cert) # XX XX XX XX MSB-first offset of SKID length table (8-bit length-per-cert) # XX XX XX XX MSB-first offset of SKID table # XX XX XX XX MSB-first total blob length # # XX .. XX DER certs (start at +0x1c) # XX .. XX DER cert length table (MSB-first 16-bit per cert) # XX .. XX SKID length table (8-bit per cert) # XX .. XX SKID table (variable per cert) # echo "Mozilla trust bundle for TLS validation processing Andy Green " echo rm -rf _trust mkdir _trust wget -O _trust/trusted.txt "https://ccadb-public.secure.force.com/mozilla/IncludedRootsPEMTxt?TrustBitsInclude=Websites" #cp ~/Downloads/IncludedRootsPEM.txt _trust/trusted.txt if [ $? -ne 0 ]; then echo "Failed to get current website trust bundle" exit 1 fi mkdir -p _trust/webroot/by-skid _trust/webroot/by-iss _trust/webroot/der echo 0 > _trust/ofs echo 0 > _trust/count echo 0 > _trust/skidtab GT=`date +%s` BN=_trust/blob-$GT.bin cat _trust/trusted.txt | while read _line ; do line=`echo -n $_line | sed 's/\r$//g'` if [ "$line" == "-----BEGIN CERTIFICATE-----" ] ; then echo $line > _trust/single else echo $line >> _trust/single if [ "$line" == "-----END CERTIFICATE-----" ] ; then openssl x509 -in _trust/single -text -noout > _trust/c1 if [ $? -ne 0 ] ; then echo "FAILED" exit 1 fi ISS=`cat _trust/c1 | grep Issuer: | sed "s/.*://g" | sed "s/^\ *//g"` SER=`cat _trust/c1 | grep "Serial Number:" | sed "s/.*://g" | sed "s/^\ *//g" | sed "s/\ .*//g"` if [ -z "$SER" ] ; then SER=`cat _trust/c1 | sed -e "1,/.*Serial Number:/ d" | head -n 1 | sed "s/^\ *//g" | sed "s/\ .*//g"` fi SKID=`cat _trust/c1 | sed -e '1,/.*X509v3 Subject Key Identifier:/ d' | sed -n '/Signature.*/q;p' | \ grep ':' | grep -v ': ' | grep -v ':$' | grep -v U | grep -v k | grep -v T | grep -v "i" | \ grep -v "S" | grep -v "V" | sed "s/^\ *//g"` SKID_NO_COLONS=`echo -n $SKID | sed "s/://g"` na=`cat _trust/c1 | grep "Not\ After\ :" | sed "s/.*\ :\ //g"` ct=`date +%s` ts=`date --date="$na" +%s` life_days=`echo -n "$(( ( $ts - $ct ) / 86400 ))"` echo "$life_days $safe" >> _trust/life if [ $life_days -lt 1095 ] ; then echo "$life_days $safe" >> _trust/life_lt_3y fi echo "issuer=\"$ISS\", serial=\"${SER^^}\", skid=\"${SKID_NO_COLONS^^}\", life_days=\"${life_days}\"" issname=`echo -n "$ISS"_"$SER" | tr -cd '[a-zA-Z0-9]_'` skidname=`echo -n "$SKID_NO_COLONS" | tr -cd '[a-zA-Z0-9]_'` safe=$issname"_"$skidname cat _trust/single | grep -v -- '---' | base64 -d > _trust/webroot/der/$safe cd _trust/webroot/by-skid ln -sf ../der/$safe $SKID_NO_COLONS cd ../../.. cd _trust/webroot/by-iss ln -sf ../der/$safe $issname cd ../../.. DERSIZ=`cat _trust/single | grep -v -- '---' | base64 -d | wc -c | cut -d' ' -f1` cat _trust/single | grep -v -- '---' | base64 -d | hexdump -C | tr -s ' ' | sed 's/\ $//g' | \ cut -d' ' -f 2-17 | cut -d'|' -f1 | grep -v 000 | sed "s/\ //g" | sed ':a;N;$!ba;s/\n//g' | xxd -r -p >> _trust/_ders printf "%04x" $DERSIZ | xxd -r -p >> _trust/_derlens echo $SKID if [ ! -z "$SKID" ] ; then echo -n "$SKID_NO_COLONS" | xxd -r -p >> _trust/_skid fi SKIDSIZ=`echo -n $SKID_NO_COLONS | xxd -r -p | wc -c | cut -d' ' -f1` printf "%02x" $SKIDSIZ | xxd -r -p >> _trust/_skidlens OFS=`cat _trust/ofs` echo -n $(( $OFS + $DERSIZ )) > _trust/ofs COUNT=`cat _trust/count` echo -n $(( $COUNT +1 )) > _trust/count ST=`cat _trust/skidtab` echo -n $(( $ST + ( `echo -n $skidname | wc -c | cut -d' ' -f1` / 2 ) )) > _trust/skidtab rm -f _trust/single fi fi done COUNT=`cat _trust/count` OFS=`cat _trust/ofs` ST=`cat _trust/skidtab` # everything in the layout framing is MSB-first # magic echo -n "TBLB" > $BN # blob layout version echo -n 0001 | xxd -r -p >> $BN # number of certs in the blob printf "%04x" $COUNT | xxd -r -p >> $BN # unix time blob was created printf "%08x" $GT | xxd -r -p >> $BN POS=28 POS=$(( $POS + `cat _trust/_ders | wc -c | cut -d' ' -f1` )) # blob offset of start of cert length table printf "%08x" $POS | xxd -r -p >> $BN POS=$(( $POS + `cat _trust/_derlens | wc -c | cut -d' ' -f1` )) # blob offset of start of SKID length table printf "%08x" $POS | xxd -r -p >> $BN POS=$(( $POS + `cat _trust/_skidlens | wc -c | cut -d' ' -f1` )) # blob offset of start of SKID table printf "%08x" $POS | xxd -r -p >> $BN POS=$(( $POS + `cat _trust/_skid | wc -c | cut -d' ' -f1` )) # blob total length printf "%08x" $POS | xxd -r -p >> $BN # the DER table, start at +0x1c cat _trust/_ders >> $BN # the DER length table cat _trust/_derlens >> $BN # the SKID length table cat _trust/_skidlens >> $BN # the SKID table cat _trust/_skid >> $BN # produce a C-friendly version of the blob cat $BN | hexdump -v -C | tr -s ' ' | sed 's/\ $//g' | \ cut -d' ' -f 2-17 | cut -d'|' -f1 | grep -v 000 | sed "s/\ /,\ 0x/g" | sed "s/^/0x/g" | \ sed 's/\, 0x$//g' | sed 's/$/,/g' >> _trust/trust_blob.h echo echo "$COUNT CA certs, $POS byte blob" echo echo "CAs expiring in less than 3 years (days left):" sort -h _trust/life_lt_3y rm -f _trust/count _trust/_idx _trust/_idx_skid _trust/ofs _trust/_skid _trust/skidtab _trust/life _trust/life_lt_3y _trust/c1 _trust/single _trust/_derlens _trust/_ders _trust/_skid _trust/_skidlens exit 0 libwebsockets-4.3.5/scripts/test-dbus-proxy.sh000077500000000000000000000007221476025525100215120ustar00rootroot00000000000000#!/bin/sh echo "Starting $0" bin/lws-minimal-dbus-ws-proxy 2> /tmp/dbuss& echo " server starting" sleep 1s PID_PROX=$! echo " client starting" bin/lws-minimal-dbus-ws-proxy-testclient -x 10 2> /tmp/dbusc R=$? kill -2 $PID_PROX if [ $R -ne 0 ] ; then echo "$0 FAILED" cat /tmp/dbuss cat /tmp/dbusc exit 1 fi if [ -z "`cat /tmp/dbusc | grep 'rx: 9, tx: 9'`" ] ; then echo "$0 FAILED" cat /tmp/dbuss cat /tmp/dbusc exit 1 fi echo "$0 PASSED" exit 0 libwebsockets-4.3.5/scripts/travis_control.sh000077500000000000000000000034451476025525100214760ustar00rootroot00000000000000#!/bin/bash if [ "$COVERITY_SCAN_BRANCH" != 1 -a "$TRAVIS_OS_NAME" = "osx" ]; then if [ "$LWS_METHOD" != "mbedtls" -a "$LWS_METHOD" != "ss+mbedtls" ] ; then mkdir build && cd build && cmake -DOPENSSL_ROOT_DIR="/usr/local/opt/openssl" $CMAKE_ARGS .. && cmake --build . fi else if [ "$COVERITY_SCAN_BRANCH" != 1 -a "$TRAVIS_OS_NAME" = "linux" ]; then mkdir build && cd build && if [ "$LWS_METHOD" = "lwsws" ] ; then cmake -DLWS_OPENSSL_LIBRARIES="/usr/local/lib/libssl.so;/usr/local/lib/libcrypto.so" \ -DLWS_OPENSSL_INCLUDE_DIRS="/usr/local/include/openssl" $CMAKE_ARGS .. && cmake --build . && sudo make install && ../minimal-examples/selftests.sh && ../scripts/h2spec.sh && ../scripts/attack.sh && ../scripts/h2load.sh && ../scripts/autobahn-test-server.sh && ../scripts/autobahn-test-client.sh else if [ "$LWS_METHOD" = "lwsws2" ] ; then cmake -DLWS_OPENSSL_LIBRARIES="/usr/local/lib/libssl.so;/usr/local/lib/libcrypto.so" \ -DLWS_OPENSSL_INCLUDE_DIRS="/usr/local/include/openssl" $CMAKE_ARGS .. && cmake --build . && sudo make install && ../scripts/autobahn-test-server.sh else if [ "$LWS_METHOD" = "smp" ] ; then cmake -DLWS_OPENSSL_LIBRARIES="/usr/local/lib/libssl.so;/usr/local/lib/libcrypto.so" \ -DLWS_OPENSSL_INCLUDE_DIRS="/usr/local/include/openssl" $CMAKE_ARGS .. && cmake --build . && ../scripts/h2load-smp.sh else if [ "$LWS_METHOD" = "mbedtls" -o "$LWS_METHOD" = "ss+mbedtls" ] ; then cmake $CMAKE_ARGS .. && cmake --build . && sudo make install && ../minimal-examples/selftests.sh && ../scripts/h2spec.sh && ../scripts/h2load.sh && ../scripts/attack.sh else cmake $CMAKE_ARGS .. && cmake --build . fi fi fi fi fi fi libwebsockets-4.3.5/scripts/travis_install.sh000077500000000000000000000035441476025525100214640ustar00rootroot00000000000000#!/bin/bash if [ "$COVERITY_SCAN_BRANCH" == 1 ]; then exit; fi if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get update -qq if [ "$LWS_METHOD" == "lwsws" -o "$LWS_METHOD" == "lwsws2" ]; then sudo apt-get install -y -qq realpath libjemalloc1 libev4 libuv-dev libdbus-1-dev valgrind mosquitto sudo apt-get remove python-six sudo pip install "six>=1.9" sudo pip install "Twisted==16.0.0" sudo pip install "pyopenssl>=0.14" sudo pip install autobahntestsuite wget https://libwebsockets.org/openssl-1.1.0-trusty.tar.bz2 -O/tmp/openssl.tar.bz2 cd / sudo tar xf /tmp/openssl.tar.bz2 sudo ldconfig sudo update-ca-certificates fi if [ "$LWS_METHOD" == "mbedtls" -o "$LWS_METHOD" == "ss+mbedtls" ]; then sudo apt-get install -y -qq realpath libjemalloc1 libev4 libuv-dev valgrind wget https://libwebsockets.org/openssl-1.1.0-trusty.tar.bz2 -O/tmp/openssl.tar.bz2 cd / sudo tar xf /tmp/openssl.tar.bz2 sudo ldconfig sudo update-ca-certificates fi if [ "$LWS_METHOD" == "smp" ]; then sudo apt-get install -y -qq realpath libjemalloc1 libev4 wget https://libwebsockets.org/openssl-1.1.0-trusty.tar.bz2 -O/tmp/openssl.tar.bz2 cd / sudo tar xf /tmp/openssl.tar.bz2 sudo ldconfig sudo update-ca-certificates fi if [ "$LWS_METHOD" == "libev" ]; then sudo apt-get install -y -qq libev-dev; fi if [ "$LWS_METHOD" == "libuv" -o "$LWS_METHOD" == "lwsws" -o "$LWS_METHOD" == "lwsws2" ]; then sudo apt-get install -y -qq libuv-dev; #libuv1 libuv1-dev; fi fi if [ "$TRAVIS_OS_NAME" == "osx" ]; then if [ "$LWS_METHOD" == "lwsws" -o "$LWS_METHOD" == "lwsws2" ]; then brew update; brew install dbus; fi if [ "$LWS_METHOD" == "libev" ]; then brew update; brew install libev; fi if [ "$LWS_METHOD" == "libuv" -o "$LWS_METHOD" == "lwsws" -o "$LWS_METHOD" == "lwsws2" ]; then brew update; brew install libuv; fi fi libwebsockets-4.3.5/test-apps/000077500000000000000000000000001476025525100163125ustar00rootroot00000000000000libwebsockets-4.3.5/test-apps/1.png000066400000000000000000000122011476025525100171540ustar00rootroot00000000000000‰PNG  IHDR0?Ō,–sBIT|dˆ pHYs==¬r.tEXtSoftwarewww.inkscape.org›ī<žIDATxœķyXTåŪĒæ3Ćģ0²‚ (š»"†øįŠ`—-fõŗd¾iRZYZYżZ“²2—Ź–7õu'3Ķ]\qW$1P@Łdd€ŁX‡łż1yf 8Ī sĪĄł\×uī3Ļń|‰ę|Ļs?Ļs?,000t4ĘčDµ ČpėßcgßSØÅ¾pÓ(ž `+EZ¬Ā ŠĶ Z„…\XyFńS¼Øc·\6Š;ŲN‘kł@ŠQÜĄZŠ“XĖ dFńĒŽ¢H‹5Ü0¼É¹5śS ÅZ¾°äßc€9ŌI±ŠŻ ˆĆā`Õ",d€mFńrC)Ņb ߃l |1i±–šÄnĘR!ÄMÄ®T±Gģi08lŖ000008&Œ00000Xc įDµŗĮb± •vƒ·'¼<;C„RC­©ĘŻ»¹••S-Ąß߁ V«QXXhöµ\.D\RR…BńX÷g ¤ŅĆß!ĪčŅY— EŠe5HĻV@^YGµ<‡ 7!œÅ<øJ`±Xąó8 ¹PiźP„ØÅŻ\9źźµTK5 ‘±˜oѵår%u6Vd9”½=Ę¢kßsyłE6Vd‚zH±ą_BlĢ8ųvõ6ŁFVVŽó’šŪęxœædg…džüóO 2pņäIŒ?Žģk„R)īܹCÄÆ¼ņ 6mŚōX÷o3įqėšąTgøˆ”ˆzķN_£÷dœšžB ė+D?~<øuā@ČgAā̆XȆ¦F‡J…wrėp1EƒCg•Č-¬§Z¶Łxøņ°hN0¦GwCÆ.&Ū46źōūOaõo™Øoh“³JógĮ+£įäŌz–U«mÄõ›Å8pü6īJAq©ŅN Ÿ·NĮŠå–ĶšüīꔦX‘å ģŠU+޶čŚė7Ņig |>ļ½»‹ā^ŸĻkµ­—§ž™6%%e”Õ“™Œœ‘žĖŅ<}/eč_ ą‹÷߈Ī/ą‹õēŃ@”ł18>»¶ńQ‘&?W*UhlŌ”S'ņ‹×™³—ģ!Ö“™Lq˜8~jŌ~,Y³ŗ­nE N^}Ī }C;75µōI/óĢ$?ÄÆ‡‡E:ÆÓ%e5Pi ą³įŪE6[ßęŌ%ś¼é>"!Ÿ¾3£‡KńŌĖńPŖj©–ŌaH½•‰źź³ŚVUѧ—čäÄ1iHĄ–māā„kŠüū{ńł<õbdä0̘‹ —’©L+ŚĢ@¢#ŽĒ=üī"Ä?™ł!mu;›"“7`C|då PW7¢®^æ.\ō äcźxŗqˆ¶Ćū ńŃO,_'kå_¤†QĆ<±kŻ0’yäišÅ† ü~ø• C NĄē ¬æ;ž›ģ‡Ä«eTČm•ˆ©‘šQ •Z?FćäĆæo'Œ —āµŁC0t€/ŃvLDžŚ4_ÜFėžČą1ĖP]mޘSžżm¬Ę:^š³·Ņ³Ø–ńŲ,{g!É<”JęĢ[‚„皵­­­CZz&ŅŅ3ńÓ/ۚ}Ži阎 n٤s1‘‡šŻĖr¦ö¦ø¬Ÿn0żu³±yEW<3^Bœ[ō’;Vžņ€V©,>_V ×( tądf½“„*e󱛚Z-Ī%•į\żĢ²rä„y@CC#īåUą^^žw >|s>}g4X,½YŽ€÷^k›?čĀ¬"Ø5L/‰*¤ŻšöāyD\[[‡3ߥŁsW(TåX“É:殇N§’B§“„ŗ/.-DVžįaę,bcrä#ĘOģ̲ł½Š3А³½’RŽ‹Æ˜4GG§>_sq!_ŗ0^Å©b ;q f‘ĢWÆż•1Ē¤M $6ņ Æø;ŅīõD<W—ʶøŻ©«×aC¼œt.DŚśµ=įqŁx}V7hu˜ū^2Ŗkcŗ«„ü“åö'’]œłų`‘éQ†Ž€ĻĒóĻÅqQq)Ö®ßH”"ĒÄęā&©Ą“żõ³nf÷EjV?שĀŪśv”qéF5)ör§Ļ’šŲØ®št7¬7ųæų{ČČ~¼BŽŹāŽA«5¤_œÖSpĢŌŲńps3ԙܶc/1XĪ`>6’fM~ņ(œ8 €Ō¬~„ķ'å•ä·łŚ:śŒ¼ü¬”’ö{5B( ļ~%7,Žņō#|…ŠčHL4yYĮž½GZhÉŠ67c“0ī<üŒĆni”€<-¶ ¤"%døNlŒęIÄ9j\O« P‘żŁõ×-RL‘ŗFē!ćvv+­Z¦Āak1qxßŗūR³ āŃ©ƞøjĖ[RFæ)¾CŁ4żC;A,2¤ÓN\tĢ5Öpžj)~¢—#ī3ĘŠVtńź OO"N½™A”Ēʦ1ą"<:é U(ܐ‘ŠB™/īŽļA“i/i¬™±†ü©¼J‹ók(Tc 4HBŠoŻ©¢H u”ČTČ/4üŽ={x“Қ”£Ų§„gR¤Äń±©›ĆɤqŠ6źÜ»4‰8yȖ·¤„gĘK0i„aŚīŗķrŌÕÓc%ŗŌ—\¼7ĻsŸvĆĆY”iٵ˜¼ ŸVu°$Īä?©RMĮ}{SYEž’é,ęŃĪ@ölYBšrÜĖ>ف“ŪvPd9Ÿ}ü:*+]查į3ųėą);(j‰„\QÕN ÄĖĖ Ó¦M³ė=mf Ę©©ŒœPä—ų±ŗZŒó7"1.ģ$}Ŗ‹ĪņD°ņK=¶¾¤»1ņ*-Öļć›Må“*_.ĪäˆZÓ1 DSM^qļ,¦ĻBχLŠ`V»Æ×ļoc%Ö3mź8³Ś•Rn Īb)VkL÷Ņż|½`ņ³‡”Ź =Ćńj€Ł ›ˆńųGĀå‰Ķ>Oø<‘0±COC,TC]MĻ26ą&į“ų¹PĄĘ>Œ įš9••=głOŖiē«Ļ[¢é^&öķŪgv{WWWĢž=ŪŖ{ŚÄ@ÄB5F >KÄĘ髇½8ß,~ ąÕ jč)87Õ··;B> 1£\3Ź•xqi!TzōDjjɆĮē±”©īx&"’ ʅ鹟7{˜™¢ >[ضĞC§ĶJa]æAż”٦)+±Hh²]yyäņJø»»ŚC–ÕdffāĶ7ß4»}pp0= dBųqxśœsmēRF6k“vÆņKüįļ@ßc”«dÜ«EĢBCĪY(`”«§üxˆķŒ)#]šoŃWĎvĮ¾uŻ0q~ią!Ŗ&)+±Š©CˆPŠt,ˆ~ņŃŹųvS÷ĆOÖ;L9w•šœ² &ŪķŽs»÷‚»»+‚»#(HŖßdD‡ ²‡TŚc“¹Ęé«ó7"[LM§¶bG‹EŸĮgcźźuøwæŽųIˮʼnĖjüśGbć 0vn*•†‡ņøįbĢF·…ŠœūwÓ§F—=éģNĪs+”ķćAĶ`=M{ ŽŽž-“Ō#—W")łģŒßĻV®Ć¦-»ŪRžCaµ°X:L~ņ(›J_=äŲeĆzŸĪÅŲ3ÅŚŪSBā55ę,'ļéüÖ,z,VSŖČ=ī¾ōgjk¤Ż †^TŖDuMū+cĻ`¹y÷IqP ”!ķ«_O‡ž®ž†‡éĒó>Ćūs¾4Ł–Ć!§Rb"įśmĒģ ī?­Äõō ź­ļžöīĮ‡æłÅŌ>Øīß®zõpĮ™+ōŪ-±­16;ŁōY§Ć@=ŁwsQ_ß.W’ų ’R+ȁ±ŗb¼xœE*øI*LžHÄäUю^Öä@"yаi},*H½MŽs„O°¤…–헐@xøRX·a0¢®®Łws‰8lčŅĘR ęc½XQšdHh2¼=J¬•@yE䮆›„śriY hµ†±„I£¼)TC £†KIńŁĖy¦2tX’’N%ŽÅ"!ž L”ĒÅŖ–Oēb źuˆ|ń3’3†“zMh@¶}6Ąf7":ā6˜k ŹØn²ˆ°‘sŖk“HĖR _/}½ŸžĪč,AZVĒ©‰õüS}ˆc­¶'ĪŻ„P Ł·?3_zšˆgLŸŠ3g/SØČ1±ź•9&ņ1“ŖŗVˆmGfāļŒĮ­žģ:öŹ« ĪŽœĘņņ ūƬœ«¾÷%¾1»ćģ‡쉱†ÕƗ’ hWĀ„zN'^DY™a}ĶŒé±\uĪŠ« Äųį&y 45¢VZėŃ6rHÓy'„'jd9Éæon=fśÄŹ'ÅsŸ“"XźÜBėö‹|óŃx°X†Ķ¾V’̼U24§”A‹m; «¶9Ö÷ 1°Ī`ŸW‹Ø”†š6G/N6ūŚ#£‰cg‘ £m„5=ńõrBģhĆC9§°YyōX¬–•«ĀŁ«eDĢubcēŚpˆ„ķ»œGܜ0LBÄ×oćĄńŪ*b 3ß®łȉ8rD6¬_É Ø?ČŲ!§į,2ԁ2^ćń(Ž^œLģ8^‹ĻcaĒ×~ ’łāŠkć¦w¾üFƒ2Cśŗį†7+÷n —śÉĖūoDbż ĆKLc£K>M€ŽćR ōD”PāÓkIē^x~*N'ÄcDÄPROö!Ņnxöéčfē;*÷׌śYłĮČ.2ūZ¹ĀI·Ā0¼Ÿ>½;ņ »ĪR)v„W?÷Į“ é+™¼«6ŅkŖhņĶ lŽ“‹W¦ņŗŃ£}rp<>ųö&ö/Dmy@7–¾ŚażŻ1ģij+¦šƒPĄETdŽ~u8ĘDó×Ėæ:…ÄK¹Ō3“øy“PgF-,H8u™ĢĘG¶fóÖ?€Eq/ēś÷ űƒ[‘““[éY(-•Ļē£Oļ čßl¶ć½`µ61£—ĢO_=äČÅhĀ@ī%’~Æ·„rlJO) æś£Hր² -u8sŠ/„šž"b?@_öä–¢JEƒBXMˆūĻuųz 1i¤a*o@71v­ G„¢iYU()«ŸĒA æ”=$`±šóā~ }Ÿs®.†ģÕ5 ØoŠĀU"€ŸłĖ¬ÓéšÉźD|õĆŠ”šĻŖO^2»ķœJc mÄņæ›ĶF܂Y¤^G@€?ü[¼®¬¬;ćé_jæ-±Č@śŻ„“k.[b ‡/LĮēÆ}DÄ1#ŃĘ@|&<łčAgy•³?(‰Ėōܐ¦¶®Oæv ŪV‡į™I~¤Ļ\%\D īlņ: ˆź‰]óM~Nbž­ē¦‹K•˜æōžøc'U ķN‡÷–…cĒńž»q>ØÕ^FEE¶l߃õ?l†¬ŒŚJÉIIIP(ōSōSRÆ4”F£ĮéÓ§‰øØØØ•Ö¦±Č@ŒV× qīzóź»āFęŹ|įė„«š2ā0¾ŽŗŌ9vGSӈ‡ųĻ2Éč1u·%Ŗk“x6ī2¦MšÅ’y!>ŠlvóÜīCҳXż[f³™\tęFZ ¶’™Š_·’ „о3śŠK*’šcѵårzķ;“|= ‹–|AÄEŎ_.'ńģ$ž½ļ.ž˜ųśō”¬¬œņŠJΟϠ šŠŲņōąčč@yy9ŁŁŁ¾V„R¤óņņ())éŌżeé… paH }ū8ā RRTRCnAIi%h‹k˧ĒĪN‰·§g<ÜQ(ØģpŅØ(«ØįjI5ē3“ŌŌ֋-µC8iŌ8;«Ķŗö攆†F++2ŸaCƒ‰ž=Õ¬k’·e'™Y9VVdB²äOu ~ś™Ģ)(¼ĀĮCń|üéfŠļf…B¾łęʎ ĄO?żÄŒ3:|m`` ēĪÓĒ?ü0ėׯļŌż»Ģ@Tpłgpu‚éĀŽ_»źNÖ!|ä1€,‚ż/įé^‚F]…›KΚJ*Ŗ4—ør.#ˆĆ'GóC\$Ł~bĖī0Ž,]ʽ³2t°«Éœ††Fā×ņŻO9¼ńq µu Ż¬ŅĄ#óĒņŽĖ³±·o旵¾¾§sپūŸl:In~i7)ģ€O_ĆŪ£ż? „RAųhoüū;ńŚĪv“:Ó8iT×4еRĀFł6ŹgŸÄšā•u©Ńüdl GµšMßeĘōI&?/--£””wwį‹×¾ø#Ż!OŅt™Ģ™h8¾#–½ÕUw{»zž|Ļ×Ü8$•i‹ÖSUm^×DWs×L6Æ ĒŽN!8ßŲy…U”UŌįØVā×WƒR©ĖłłˆtŽt;ƒ“FÅKOOeŹ„@īxh3„eÕbKź5$œI”²²ŖC¹WÆJ§•hoogŅ<¾ŻĖg¾įš‘_©hś¹ŌjB2yŅxęŻĶ”#ĒŐ,)ŗĢ@fGŽūƐHÉźŖ»Y—­ļo¾‚+^”WjØ©Uįß7Ÿ”ĮéÜ>u>žZ}ī„‘§x~ÉXõĪ"*6Mäx6½3^`Y9¼ņ~2’ūń"Å%µśóŽj;ʍōāžYžģ’„P ¹ķqū'$$ēSV®£±·WąēNdx >8–°Q†īÄ©A|»~·ŻæAŅ-‘1SWPYٱ1§¬K—»Xe<°p9g’RŖŃiV<ż˜ĄųpC«Ļ{#]b ƃ!d š\Ō$xó‹®ø›õÉ-ōį„÷3ł™«s9Ÿ®^Å]3öčĻ-}`#/ųˆ¤ŗ²ŌJ>\=•Q7ŠöŸrXštųģW¾‹5 ž»ŗØyv©éQ™Ž£ZĶī‰ÖĒ9¹ł¼½īŁ&V7O7ø¹©Īēé4HhźUŁĆ­įÖ¾›x95ZūziŪČģ~¢§ĄĒĖ0Ø’ßĶHNėÜ![å‰ēwQ_o÷øīŲŁÉd„Ü=OOCÉ _lÕ–Ėt«’eĶŗģķtĒ ©žÓp„XX˜µŗF%’’Ö~gć|jj„1č'œ¶šŌKĻ[’q±XąŁ”²(2½/Oį&™™Æ`+#ÄŖ £Œ d·ŃtźŲcsÆīxD(€ iÕRė0Q‘q|±f¹>NHĀė뉨Hˆ»«ŠČ²r*DR".s -•Ź75ŚāJÉH77A\ZV.’ė2bĶnŻŚį|ggĖ×HYĶ@‚čV 7cl {…źh^³3;Ž’ŚZwīzģķź čŸĖŹÅ’eŃŪ°SźÖS$¦…0kɇ’Ŗƒåę"ü•––׉¤D\ŠÆ '9ø8;HĪ@¶|¶L0åø-V¼ų‰g/vƒ"ółĒ ”øųŚ5®¶’øoæ’¹µ››pAZY1___ęĪŪ­÷“šwM%§CVž!.Ƅƒ§ą–¦‰s&JŪ@nMC{D7ĄNŁ€›K™ąsķUwÖ}ńGÖ®_$©ņ%®.ĀHyEļ4ŠJįŠ{ēö+‹ĮĢé£:”÷śŗļŗX‰å̽ż–åeēä‹n .ĪN‚ø¼Āt+ŻßÆ”!ķOŽÉ/øLR²ķÕ³V3ćńŲ£­?=j0iaą¬Ń‹±SÖćéÖö؁Ʊš±×Ÿaźø_ųń@d7*»6.NĀ_iE_}Ž-÷2qPى¤DFjŌÖ _ŖT*Óć—ŃQ3Xūź³ķ~×毶³xÉ «i³„¬¬,¶mŪÖį||šA‹īiqÖ@¤Ń$¤Ż&ŹÉģ< k› Ö::Ąō0Ų.Ż:wķ¢QWGTdßļŸĀżĖ×RVįtķ »Ŗj”aØ”TTö>qŅ ʅ„Ā[üŲźafŠ‹ŁŅŁBµ-¾ūao‡ŗ°NœŹlĖ.+g'É¼+WŠŠj‹ńņņ0ł¹ŌHIIįÉ'Ÿģp~hhØ4 äÖp)€n¬ćĄÉÖ9‰tŻZM»DĪ™(]I¾LŌcčcc| ņĻ&zŹ>ęL>€B”«=e?ŪŽYŹm|DCƒų3}ŹZtY9kģ{„h[ŽIĻ@žys©Ęū܋ėl¦œ{Y¹°ĖJ£1Ż żÕ–ųjĖxyy<ˆ@Ż~ Ē>ž¦ī*y¬b ĘŻWOµŻ5{žŌ4Ę=–¼jØÖ+%jjU\ø$,‘˜¦+NųŃ×÷0%ģW¶­{WŻ×-޲hīV>žęīn׌’’2aßæ«³=…Śžńź }¼„-Ā’ŅŽ÷ß@Ę4-[ żśł“‘©C«-&^[Lüń߸޲4ań+³B”«Ռ©ī«fvō³ōīā°’×0®zEpī©Ÿ‹¤FHi™°2ČÆw–3hčvČÉ/„²Ŗē•±—1ŒĢK‚8$8P!=‹[ c†Į#a1<³Št®]‹qĢØIpBÜ­·Ķ滽Ó8‘4œ›†'0|šyśē’•+nM¬ …oWC»²ļXHjÄĆŲ@Ī„I{7?™ī%ķ|µµuØTŗĒ_HH ø‚l‹[ Q-J“ø8éJŗ›śēÖāeŲÖ˚lß?U·¬% g‹ńõ”nmdö\†{ćķičĀ:+ˆŒ55µ¤ĻŠĒćĀF 6–’é8–ˆ„IĘƒ~6\¦(3g€ ötæīTbj õõ†„™‘żDT#‘qÜŃLӉ2½–ćæ%菝4Ü.Zv¶†E]XżūĄMC ń’Wąų5fé ‚ ’Š+•ŗUéė··T©¬®@ohVeU=‰©%ŒŖ«÷38Ą…ėCŻHLķ=5±žpĒõśćśśö8/¢)²ķ»Xę?p§>žwļķģ‹3±€M¦],zāEMŅ ¢TVƆš[rū’6ķ‚+F/ź¶Üåė-܅°ąŠ—HJ„lŁ)$|üĮ޳ʰP¦EV9~Qr%LdÄgļžĆÖ×Ģ»7śš«ĪeZc‘?ü÷‡ŠģYß \©~kø”F–­1Zøą%#ĒO$%B6’%ˆŻHh KŁ=…Ö>?Eó[ šĘä·J™ÖŌÕÕ³įKĆŖm;;;Ö½ł¢~`]¦c˜m ź¦ÕäĶģ<Üńkwåŗ8A¤ N©öóĶ'zŹ>}œžķOję v®č>R3ʈū„P«ģ•|łv8Nšž]Ī#fį8ęÜ2DŸ8ĖöŻ6:ĶO¦Ėł×[qł²”aŅÄq¼æīey@½˜m ÓĘźžĶģźÄ‹ŽĪƆ½BĄöŗ±Ō5|ńś œŒ¶µŻ¼c–ˆŠZóō«æÓŠ`L{£'_æ7”U¹wS8ØÄĖé,Ļ<>‰u« 惆†F–½+ɅŖ2Ņ ¤¤”—Væ-8wßngoģf&F„ Z²Ķäī;gw—DÉcv{Ķų”ŸšiØ6­-ų30a„.Žž OüĖ\%ŻĖŠ t>łēsÜ<ź”ž\Ö‹5Ÿ<,¢ŖÖ?]ħ[2xų^Cæīģ)ż9łż žż×i¶ķΦŗFXpp`'–’ł:ʍōbüāVLķGÓ'ń×?O`j„°’zÕk?³’H†8Ā:HĢā™Ōt @ģϧHN‘7>²6Ÿ~ž5””A,yHnäˆaģśžsŅÓ³8“”J~~jµšė‡aŌČį(•¶÷‚ÕUXÅ@vi;Æ-v6Hó^"IĢUc]® Ģ ö£?‘SąKa‘ Ü\Ź1äį#ōū€®ģÉW¬įj™k;ß(1?_? 3'¦ņ tfÓ;į—Ō’˜z•¼Ā*Ōv83l° …®¼Œ? —ņ¤3ųœžĖ\.§²ŖŽŚŗz<Üńļļ†š¹±±‘ßŲĻkļj曤ƚčpīĀā2Ł@ŗˆU/¬E©T³d Õ@PP@›×^įĖĶŅ/µß•˜e 7†čvlĘłńüóQC5Q:⨮ęÖ›ÆżCiÆŗóą³Æ²ēčĶ×Ģƒźšī|ōŽĒ]3…µ½<ÜTDŒécņ:…&…ł°éū,“Ÿ‹³“Aķ÷Mēę—ņČņų~ϹnR%ÓhlldåŖ×Ųµ{?Ļü-† į7µŪŹ(*ŗŹg·°ī½O)(·Rr||<%%ŗ)ś'OšØbŪģŻ»Wēät~›X³ Äxń`e58Ńłļ8•Łąē«‹ēL„ׄQNźšTT9ņåQüżß1äųŠ-§]*«ź¹;ę(soõcŁā!LķRŁŗo·™¤“Žų8„ÕL.)s*1ß$šŃĘß(-“nŃÄܼ"N&¤›uķmٵ“ŗ‘ć'YŗĢP.'×öĖåģ;Ęžøcōėėìۦ0h?żūłāą B«-&ėbńĒēäÉ3TUKć’³˜˜³ÆĶĪĪfśōéŻ_tz˜qĘxjš±ZXŪöµŸß·M€AM„£źź:½ p°Į6Ęam%_‹@ælĘŻpš!ųzińń*ĀÅ©G‡jjUhKÜÉ)šåčļ#Ł?ŽāR«uY½ Š„F±/o­/oI_Gn‰čKĄ'śöq¤¾¾‘’²ZĪ](åTR1Ii-8œ Äœ8s¾ČQmĻ <ÜquvĄĶU³“ƒ¾L{yE-¹„œ9[@Įå.Ł’40^Āž*°²+nŌÅ$Ć[œ;ŒA‹„¼ ,k:ī¶“+ef;āł€¼> 1«²ēėÜÜŌĪ…b‘‘ķGF¶4Öqt%¹UlŲ&żŅUÕuœ;/×°’‘‘2ņt³ DFFFFĘ,d‘‘‘‘‘1 ¹š‹ŒŒŒ-Rģ[„™“Ü;Ü'†KéIRHk®cĒhY‚² ųR !V åDņ\ąc1„XŅń·@'ź-H­‰sć°ĶŽćeū%Ą­b ±2™güŁ ’; @c‡uIEND®B`‚libwebsockets-4.3.5/test-apps/3.png000066400000000000000000000120631476025525100171640ustar00rootroot00000000000000‰PNG  IHDR0?Ō,–sBIT|dˆ pHYs==¬r.tEXtSoftwarewww.inkscape.org›ī<°IDATxœķ{\TežĒßĢA+/yńY^ ~ÖÖZż4+w³(«µÕŹ­­Ķī[™µīnæ²_Yé–ej„hyMM21¼€ ·A†ūż2ūĒąĢp˜8gą¼_/_Æó=óœ9TĪē<Ļó}¾™īĘ4 ‡Ų" 8Ń|ģ¼#¢gx8nĻ>I‹SxsÅį ,«ų H$-ĪpÓĻҌ±š‰XbœäYP¤XÅ×+Åć$wz«ųYąq‘“8Ć)`B‹soĆEŠā,oKš5Ąń¤8Åē Ämń։-ĀAęk­āåĄ‘“8Ć; 5/’gy·E\/† µū‹!ÄIܱ§!ć&xˆ-@FFFFĘ=‘ DFFFFĘ!d‘‘‘‘‘q/±ČČČČH …BAxx‚ūŲ›ŠŠJ*«Ŗ9{6}a‘ŲņĢ„……”Ńhج¬$''Ēīk•J%ę8??Ÿ²²²vŻ_6nČ °Gäҧw)*eÅe:ņō¤e„b(ń[žOOzhńŃ©š÷Ó P(P«<ńÖ*©ØŖ£“¬–³™źźŖjŽZ5:Ś”k‹ å45]¬Čq¢‡ $aÖ4‡®żĻ†­deēŗX‘kˆĪ¢?ÜMBü „ōėk³¾°ˆ}?&óž‡ėŁ÷cr'+ņå—_2zōh¾’ž{¦OŸn÷µįįįœ>}Śß’ż¬Y³¦]÷ļ0Q)įāąė qĀΟ;źN®aüp-ć®Õ¦b`؊€žhÕ ü|<Ši=ØŖ1RRÖČéĢ:ö§TńĶžr2sźÅ–m7½üĖY¼`+wĢ:ȐA¶ßRšš$’ɦļĒšĘū Ō7xv²J ĢĶ»/ĪĀĖ«ķQÖĘĘ&ŽĻcóöÓ|°.…¼‚ņNRŲ~h6+–;–59źĪž/p±"Ē9<šWWüÉ”kM“œØÕ*žüóC,N¼µZÕfŪ Ą^Ü6g&łł…¢ˆŲt˜Le2€Ł“¤o y Ł“Æšö¢dd“†¹3żxkYÖ|UĀćÆPUÓŌ9"$!ī>|m5½üŪ~øzx?2Š`Æüė:Im¼µŹ+š˜z)cF„0fDO=Ė«’ų‘—Vķ£”AŚ’&2ŅA£V³ī“w˜kóóņņ ššŒōčį+8ækρΐ'i:Ģ@fO²ß2–¼ÕQw/O¼=€kkøž¾Ljj„3¼`Ķm3±~ÕJ¼<…Ćœļ͘!ę¶Ób"ųzĶ\nŗk­¤{"£¦-£ŗŗĪ®¶Łæ]ģ`5Īq÷‚„œHK[F»YöÄCó(/Æ`ĮĀ%$ķŲ{YŪŚŚ:RÓΐšv†ž{ķeŸwG:Ä@†„ČžĀsń±šę§q7דWŲĄó« m~ę«óąĆżømŗŸłÜā»{ņāæ/Jj(K­Ŗēß+ŽCée1ĶߏfžSZī}YūšZ%{“£Ł›Ż™2ķ&ż¼Įl MœĖ*ę\V1’’y yl Ļ?1…BĄõ“"xņįI¬Xyłƒ@*œNĻ„²Jī%‰EDxžōčBs\[[ĒÜy°gļO"Ŗr/:dˆuļĆŲ<²c=¤åĪ”W6q×Ņҳ,3ofĘJ'{ `Ł›øj e¢ņ§”(ę>ś˜MópwŒFxį­=$>żąü҇bź­kå*™īNā¢ł‚ ó7V¾'›G;éIhīfåAź9ÓqģHš÷mżw¢®ŽČźõĮ¹Įįmgnt&*eĻßfŽ=¹ļɇخ‘ŽĘŽąŸżĢ¦¤SęŲ×GĶӋmOŒŹto4j5ææ=Įēę°rÕ"*rO\n ~0±¹Īēń 8Ö<,Ŗō‚Ē»śnāqąhµ ź)%5 qæŲÓ² č’ÖĒq2#¤+ŗ>³ĘFĖPā]s®ÅÓS.ø #äę„éXźL®żō+ód¹Œżøü7kęDšjžc>–n1č:ĆXE%¬¦Ś:éĢÜū»]‚ųż’ĉ¤¤óÉś­„ĶŪ-‹£{é]؈Šd¤Hü,a‘č _}×JK™¶p¹X›„uäŅg]åeP«Qā ł ")¢ōjdźøTs|žBGR#Śø¢ė±īė‚xV\”HJd¤JlĢXóqö…\NžŹQūāŅǹ§Üdµu͉³pĢźß„WēžK .cŲ` >u^Ł4Ć£3Ńy[“ģŲ?LD5ā°ļP– ¾fˆ;ī3&ÓQō źM``/s|ģųIÕø7.5˜&“(.ƒ“ē!Gg³“é*ĆXó,槆ŅFöżR%¢ ёĀ2%'N÷o„e×%__AvN©9¾jPÆ6ZĖt7 ˆSÓΈ¤Äżq©X›Ć÷Épi.s›ÕŠ’ų.sŪt?fL²¤ķ¾ż‰ŗzi¬D®_IĖčžć’™JĢĒĆģ*‹"Ó=č ܤ1+Ėž ¶2B\š:oe Ū­Ņ©“~‚Ä;LĒĆ¢ ¼dJ«–šŻÄOńåÓW-MĒĪŌšŚé¬īį+ģ eēöI‰ø\ȵō@”JOü|ŌJŖŪøB¦»ąē'\³U^Q)’×2lŲ0¾śź+»ŪėtĪÆ‘r™Dō3­@愵ģüjėąŅšY1°ś WݹćńņT¬äɅ½øļÖs"@jF-3eKŖ–ŸŠ@Ź+[nķŻ=()¦dśčT’3 -¤·Ę²ē>%õŌ…NPä8{öaJJ®\ćjó·»ųzĖ Øuüü„ Ņ*ŗˆ1gΜN½§Ė ÄzhźäyČηĕհļ(ÜŠœų0{’“ äš( †Wąéa*én”“‘UŸx}M‘¤Ź—ųśœ•UŽķ?įīTU Kķū褷ˆrFܻڽ¶jS+qž97ß`W»œÜŃ ÄG'¬ĘPYe{ž24¤/Q‘mg0č/’vŅżj€¹ —ˆõüGŅĮĖ?O:h1ėĒ€Nk2)āé~­ļ…”Õx0śj ÓĘzóķŽŠNTve|¼…RUÓ= ¤¾EE•R¼½Md¤E}½0å^©TŚl—?×_~ŗĶļZ’łf.Zę2mΐĶʍķnļļļĻ=÷ÜćŌ=]b :-Le‰·Ū('³u?¼žØéX£‚ø1°YŗuīŚD«V?ŗų)¾lŁ]Ī]KsØØ’FO¤¦VųĖ VÕSUŻżLÄ[+ü{°.Ä(Žśē·—=Ģlq!G:[Ø¶Ę¦ovŚ5„uäØų)³-‡¬t޶‡y‹ŠŠ1JčŁÓæ3d9Ķ™3gxģ±Ēģn% ¹q¼ÉĄ4×±7åņ6©ēLĆZaĶ»DĪž$]9y®–ų‡,cĪZ‚~^D„ŖH˜źĆģɾ4}%aŖ/ßīĻMdŃ$©Ø®OŃik»„h5Ā’Śå4g^\ßeŖńžå¹UnSν¢R8d„Õjl¶ū|Ć7|¾įzöō'rą"#ĆMūLĖųq×u†TÉć±¾Św“õ”©¤ƒš‡ę9ž„ɰčeKµ^)QWoäÜoĀNjF-PÉ{_3uŒŽ«Bń÷5 ‹Ü0AĒ}süy’ĖßÖ¹”Uߦ|uÕüZiŻuéŻS8Ī]VŽ5Ō2ĪӲҷo`›ķ †’ %$ž€»ęŽ"H3N'Ē+¦śW—°5|u‰mVs#Į½aäUĪŽ]v’\ɂåĀ<äĒēKc±Zy "ćĪ$¼æeŲ!· œź÷Łæ^¦cÉĢśMG GHĄéČØhčgeąĻ.„§ŲnėŁb3>Žœ²ŻVźlŚYĪ‘“®jźž¤&,XIvžøŖsśā!ƒrŲõ“ōvģh¬ ätF÷4QŪdœĶ¤¾¾„Ņōų‹Œ Wćt$¾EioSIw[üZ¬[q÷²&›w ' [ÖĒƒc§ĀńÕQŅ^?Š Ų‹^–!¬S²ČXQWWOĘŁLsėæ™(ˆļ»}'Qįy"©é< xż™é(–;Žų—üV)s9 ¬żĢ²jŪÓӓUo>gžX—±‡ Dݼšü[÷ŪķwVm}¼aЦT‡y‘0ÕRÕó|N=éYŅX¬–žĢžCCͱҫ‘ĻV®Ā[Ūµ×B$.Ėģ›ć#ĒóŲ¼ŻMÓüd:œææõ/Ģq줱¬^õ¢<”Ž6ėG›ž—Ų֎½­ū-{…€ū c©U >}-oåÆożw„m\Ńł<ńņ<šš,o⣯=Ėļ¾yY¹w[ؔŅŠkO=ĖŖ3ĶqS“‘%Ļ'Ir”ŖŒ4(++ēł+ēīüżĶģLZϤ˜1‚žģ%"Āūó»[gu–DÉćpĶś”Ÿž ķČ5”Aņ ˜Š¼ŪjĀdxōļŽ*é\†DØłą…`&ްø§ŽŠĄ«H+UōšńA|øa÷ß±Ó|nÖŌR¶,åéæßÉĘķc©­֋ź\ÄŅ?nbģš ĘŻśRgKn7Z’øŲžōĒ L‹Ž_/åvČG˜$.œAµ°’~8ŹÉ3ņĘG®ęƏæ **‚ʼn÷šĻ Ͷ-sž|6'ŅŅ)(Š£V«¹zč`F Ї‡ųŁ–RĮ%²õ@ėķZ滿¹“—HŚ9GÕø–«ĀÕ$½F®¾ĀāFššŒųłx2l°šńýĶū€©ģÉ’.Ė”“B…°Zų×ū ék`ĘdK*oD=ėŽ~›’2©é”äś£V500¬€čA9(FŒF”}‹ų-_:9Öē=Šžb%Õ5 Ō74āļ§!4ŲOOį/³Ńhä¹7vóŹ»?ФŌ~^}īn»Ū.(© ¤ƒXžģėxxxøh¾ ×FDDX«×ńŁz闦ļH2k#M» ^ĀłöGxįAK?I:¢Q+øq¢ĻŪJ¹ēé\v”ę†4µuJn}š Ö¾ń·Ķ8$ųĢ߯’˜Q§m^§P‰sŠu[b:C¦]č¼UD„µ=6WPĪKæaĖŪ?—ŒŒ-ŒF#O.…mŪwóԟ™0žŗ6{ÅÅ„|ōÉV½ū!śBq+%'''SVV@JŠ*¶mPUUÅĪ–ŠÜÜöo됁X/¬®…½GŚ’GĻ@ŽB‚LńģIšŚĒŽØé|ŖjšųģŪ2žś=¹ziĻTרų]āęÜ˜Ģ’…[˜0ņ ­O ¤e„ņĘū —erI™£©ł|ņå1ŽūäŹ+¤›(—_Lʱó][dÖ¾3‡¤²x‰e˜37O/¢×°{ĻOģŽó}ū2ó¦© Jpß T*%C ŁrI>ü+))'Ø©•Ę’³ÄÄD‡ÆĶÉÉ!..Ī©ū+€vO3NĶŪ‚ĆĘ]ŽŻü¦ 0 ŲtÜŠŠī…óµVq20¦•¶W$€µ'‹-ćŠŌŌ6pś¬“ddd„Čé22222!ˆŒŒŒŒŒCČ"####ćrįw¤Ų!¶i9¹·øS !ĪŅ• ¤V®£}“,AY|&†Š2‘<x_ !. ¼Eü5ąŽ»slœ‹{Ž>XēĢ—7Š%ÄÅd!Ģųsž …Ō“õł¦fIEND®B`‚libwebsockets-4.3.5/test-apps/4.png000066400000000000000000000120631476025525100171650ustar00rootroot00000000000000‰PNG  IHDR0?Ō,–sBIT|dˆ pHYs==¬r.tEXtSoftwarewww.inkscape.org›ī<°IDATxœķy\TåžĒß30Ģ Č"(‚.-.¹aø›ęõ²ķZŻĢŹ{³([ģfå­[7Ū7³n÷Ž~eæ²Ņʲl1µÜ·ČŌTPe1PA†}X‡¹ ĢĢĮ†™sFĪūõāõ:ߙēĢłČČłœēū<Ļ÷Q ##ÓŻ˜ ō[„dG›Žż€·DŌā ÆGlāŪ€DŅāŽĄ\±E8É^ ×&¾I‹+Åüoi¦š±HZ\å)ą 54],KŒ‹Ü ŠB›ų)ą!±ÄøĄq`l‹×ކŠ ÅU^7k€łāIq‰ĻˆĒā ¬[„“ĢVŁÄKQ"iq…·ˆHI‹«¼Ż"¦ˆ!Ä hķābqOģiČxJ±ČČČČČx&²ČČČČČ8…l 22222Nį-¶©”P(ˆŽīKxļPĀB{RYYE•”š“'s(,*[ž…ØØ(4 UUUäēē;|®J„"&&ĘŸ={–ņņņ]_6nH’(?ÄųŃ«§•’’ņ:Ī֐žU޾“Nly¼¼L„šÓÕPƒBjŸ|µõT|(+×p2'ˆŗz/±„:„ÆVN§vźÜb}&7+ržĮƒbIž5Ł©s?[»Ü¼7+rqż£Yų—[INŗŠˆ>½ķ¶),*fē®TŽū` ;w„v±B!_~ł%#GŽয়~bŚ“iŸ͉',ń]wŻÅŹ•+;tżN3œ’ü}aź=°å×Īŗ’{HŖeĢåZā¢|ˆō!؇Zµ‚?%:­C‰Ņr#'rźŲ}ŠĄwŪ+ČÉÆ[¶Ć„ś°h~<7ĶźĖ žžvŪ46šHż]Ļ7?šŚ{Ō74v±J+wßöo?÷ŽŽmk08ĪśMyõœ9ē×E ;ĪC÷ĪfŁRēfĶĒøŸ“ŁēܬČy†ĢKĖvźÜ‡Ņ%g jµżķ^„܁ZķÓfŪ°Š®Ÿ3“³g‹D7±é4™4Āl³ĒIß@ž~w(³'“só‰P1|°†¹3xcI/V~UŹC/ĆP#ŽÖ’§öįƒ—GŲö†R© ax‘į¾¼ųŸć]¤Ī>¾ŚśvĶ̽”QĆ 5¬€ĒļßÅK’Jäłćih‡÷dC£V³ść·˜6u¼Ż÷+**il4Ń£‡šĮkėö=]!OŅtšĢg=¾v",~£³®$Ž^ žzc—Š0åĪjj„“^°åś‘¬Y‘€·—BšŗÉg‹jØ44 Q+‰č„E©4·łytžt;‚ƶžgŁĘ¤±9\{ĒĶTT¶m˜2īćšŃ Ŗ«kj[VVŃÉjĒŪŪĖ®y|½~#®ś’Ż{~ÅŠōļR«}ˆėĶ„ńc˜{S2»öģC²¤č4™•h=ī ¢ #Ƴ®ę^ õ ¼³¦„ĀāŖŖ©«7ŁKÅ X5×Lö'4Țs;TĖ“ CYśfaŸ(Ē„²śĶ1óČ+0šü;ĒųģūӔ–[Spµ£‡sćĢH¶żR$†Ü6I¼ęNėEe•ټ½‰Š(cbB.÷Üž+£†YS"“sųz宾åĻ’ī‰Œ˜¼„źjĒƜņž8ßÉj\ćÖłr4=SlfÉ#÷ Ģ£¢¢’ł ³qóŽ ŚÖÖ֑–žAZz’žļŖ ŽļŽtЁ\ q}…Æ%‡×?錫¹Ÿ3E <óŽż›ØæNÉĖśpż“Ėk‹n ę¹’ž—T*Kķ£äæĖF ņ¶Ž@×’TĄ¼GR)«øp즦ÖȎŌ"v¤JĻ<2³C,ꊊ äTn§rƒų’χņ÷wņĢ#[Q4yå”qŁq“å8ļtĒŽg‰ØĘsqėķÜK WŪl]sō$¶ł^BzĄ˜ĖÜyEń2@#ˆgKc6ĶŠĮ=ŠłZÓi›w{ęšWŲłK” ¾lō¦XˈGưž„††XāĆGމØĘ³q«$3›@I9ˆüB8i“AøXŅX·%[ó§ś2#;3ˆØĘŹąøA|ōD™HJÄćl”yłÖļg`iÆ”éZbcū ā“ō ‘”x>n5[sų)ŒMĆ?ڬųO²_-Ą£ø~Z3ĘY§ķ¾ł±žŗzi ŌFGčqz7€“ĢīSėO×µ 6ļˆm£µLwdŻ7¹ķÖė,ńܛ®aėv; ŲdŚÄ„Gę¤ńX¦³V×ĀŖą·cm’¬žŠm Äzr+,Dčæ…ÅŅXõ½vƒpšžŪćERŅõ Ž?Ļ”DėZ{ö÷•\ ńٲm7EEÖõ5soJnwչ̅ød ¶7’­ūĮąĄŽĘFįJõé ÖYžFāpaI„œqŠ›Yó]ž ¾óĘhā£żZi}ń P˜xåÉM–‡€×žseė'Čt[Œ¬śŌŗjŪĖĖ‹Æ?mX—q § Dݓ𼙠»?÷›¶~¾0ѧTG„y“<ÉzSĪĪÆ'3Wõ–2s*ŁžK‘%Vy+łty¾ŚÖ˳\ ¤Ģ’•ŁWY³8ĪśMDT$#e^}ć]Ο×[āńćFóΊēäõą“Li¾ł7óc҇v[÷ ĻKc©}|ņr$¾ėÆoĶŅŚøé‘~§ŃfPfäåA|ńöŲ Ź½ŪĆG%žd€Žņųż»X±lƒ%nlT°ų™é˜LŠ6Ī’éĪ”—WšĢ²å‚×nžÓ5lŁø†q‰£P(.üæŻ—®›ÕU%Óż5Ū›~fdu Ś“¾RĀŲ!ę8y<šŖ³Jŗ–A1jŽ6œ+‡YݳPߥKļKgO€żGJų`mwŻdĶėΚĪĮo§ńÄ«GX·)ŸŚ:į$€¾į¾<ś×Œ̘ėÄ­˜źZMSǟāįæīerbŽą½„/NaŪžhQt9JŹ‚Ō9P `ćχ8–!o|än>ųč āćcX”r‡åµ”Cóć·‘ĒŃōLĪ+D­Vsé%6ō”JĻ{Ąź,Üb ö“Ž®5~Ųm5ę½DŅO9«Ę½ ŒV³ńŻ( (*1ŅŲh"ĄĻ‹!Ō$ õµģę²'^’OY„ aµ åˆč­eĘėTޘ¾:Væ™@iy=i™eœ-ŖAķćEl”ŽĮżP(Ģåe"{kłć¬tŹ%g’²œĀó:ŖkTŌ7( Ø!2¼//įŌ7“ ž~m/¾-żnķKOßźpŪł„•²tKŸz„RIŹĀy‚^GLL11Q­žWTŢk¤_jæ3qŹ@.3ļ*،3ņż.xökœ4N:¢Q+˜~eūƒĪś2#·?QĄę½Ņܐ¦¶®‘ėīŁĆŖ×FsżŒHĮ{*GŲ_`§PĄųQ”¬ž6Ļīūb ó­'&ŖķZcgĪłq÷£É|»Y÷q“ÉÄcK_äĒMŪxüo)ŒMø¢Ķ^FII~¼–o@a‘ø•’SSS)/7OŃ?xŠNŪ60 lٲÅt|›X§ Ävń`u-ģ8ŠńĻ8”ł…fŽgƒ—?rFM×cØiäÓļĖłĒæ )(”ĘŌŻÖØ®1rCŹ^ęL`ń‚Œ‚RŁśø@zV9ƽ—qĮL.)s(­79„w?AE„t@Ϝ-įąįģöŚ”X/­}göHcŃāē-qĮĻ/—³mū>¶mßGļ^”̼zżśEŽ; z})y§ HŻ’;„¦VJSRRœ>7??Ÿ©S§ŗt}ŠįåoÓĘ@LÓ¶ąE%°n«sæz,ō 774txAį<`•Mœ Œj„m»DGØ}™–Ń>„{ģŸÆ’ŗzśr#… ģżŻĄ¶T„n+‘ž°Č&ιėĆ[¦įŖÄ^Dõń„WO F£‰ņŹzNœŖąPz)éY.-8œl“†¦ Ąvg>H£n _d=jš×Õą_‹Ī·ŽR¦½ŹąĆ™B?Ž£š|§ŒŒ…ķ’ö€Ē:ćBĢ1ą’Æ†Š ÅU^7÷ŠŚh+eflāŪy|āTdó/ī¹ø½ Å"'果|i¬ćčLĪÖ°j]nū E¦¦Ö›'=øĪŒL7@žN ####㲁ČČČČČ8…l 22222N!~‘‘‘ńDź€Ķb‹p’–«Žw7‹!ÄU.&©¤5×Ń1Z– ¬>Cˆh9‘ü šžBÜ@E‹ųk õ$ƒŽĪk£ńĢģƒķœłr`ŗXBÜLnӏĒń?ßćåõž‚IEND®B`‚libwebsockets-4.3.5/test-apps/5.png000066400000000000000000000117721476025525100171740ustar00rootroot00000000000000‰PNG  IHDR0?Ō,–sBIT|dˆ pHYs==¬r.tEXtSoftwarewww.inkscape.org›ī<wIDATxœķyXTeßĒ?3Ćl ‹ (˜¶øä†!©¹” uŁjõVV>eŃ^O›ÕSO¶/–õŌSoé[fZY¦•¹”¹ä™š * Ę"ȀģŪ0ļ3sp€qfąœó¹.®ėüfīĆł²Ģłžūwß÷ļV ##ÓӘō[„ d›ż€wEŌāoģ⛁ĻDŅā>Ąl±EøČN Ē.¾I‹;Äņ³“Š ų\$-īņ,°×.¾x[$-īrPd Ķω%Ę ƒb\«×ĆÄć&o4ė€9āIq‹Æˆ×ā,[„‹Ü,µ‹ē£EŅāļ"4-$’wyÆU\*† wŠ!ÄM¼±§!ć%(Å ####ćČ"####㲁ČČČČČø„Ųdddd¤†B” :ŗ?į}C ķMeeUÕ5=šMQq‰Ųņ¬DEE”Ó騪Ŗ"//ĻésÕj5111Öø°°ņņņ³ŗ¾l =Q~ Šń£Ooµ’Ņņz ŠjIĻ*ĒXV/¶<+*•’ =~ : Z _½šŹźzN—×q4ŪH}ƒIl©Nį«7a04ŗtn‰QCS“ĀÊ\gČą$Ϙäҹ_®ü‰œÜ|+ņ ±£™÷›HNšBDæ¾Ū—°ķ·T>^²‚mæ„v±B!ß|ó £FąēŸfźŌ©NŸĶ‘#G¬ńwÜĮāÅ‹Ļźśf 5œśü}aņݰéĪŗ’gˆ¦gģ…zb£4 ˆŌŌK…^« ĄO‰AƤŗÖLY¹‰#Łõlß[Ķ[*ČĪk[¶Ó„jøN×ĶčĻąžŪ45™IżĖČźŸóyóć ›ŗX„»nÅ{/ĪĄĒ§ż,«ÉŌЬŁp„O–ļ„ądE)<{ŗ'ƒóvÜŠ±#§sōøŸ‡¹ĪˆaCxuĮĆ.»g_ŗä D«ÕšÄ?ļįž”ŪŠj5ķ¶ įźYÓ),,Ż@Ä¦Ó dāH‹yĢ/}yś®Pf^ŅĮ4B͈!:fO`įć}Xüm½z’źZńn“ΐ<¹K^MH`ū „RAüˆ"Ć}y忇»Hc|õźĶ,½”ŃĆ#=<‚'ļKäÕ’üĘK‹¶Ń(¢łÉx:­–åŸæĖŌɉßÆØØ¤©ÉLÆ^ĀÆ_·ģč y’¦Ó dęxŪń•ą‘…u%qšQ)øóŚ .¤ćŅŪ³©­3‹-É!W_ɊEńų؄é³ ‹k©¬nD§UŃGRiióĖŽ“bHu_½šēÄÄqŃ\yŪ **ėĖŌcŲ0ƒššZ§Śž>-^¢Ź”y|·f=Ÿ.ż†ķ;ž ŗłēŅj5ÄŒę’ı̾.™ßvģC²¤č4™‘`; ƒ¢ #·³®ęYŠŒ¼æ¢”¢’FŖjšØo0ŁGĶąZ®˜äOhŹŚvÜ0=ĻĢ ež;Eķ|Gq˜06”åļŒ˜Gn~5/½ˆ/>J¢"z1!>š»oÅčįÖ¶“bųnńl.»q©¤{"#'M”¦FÕqC ÷oßNVć7ĶyŒƒé™bĖ8kōyTTT2gī#¬ßøõŒ¶uuõ¤„g–žĮ.=濞H§Čy ¶æšµ¤DxkYg\Ķó7ņüūŽo¢ž%Kōćź©Ö×īæ)˜?<%©T–V£äĆ#QŪ„ÖüœĻ-¦rŗā̱›Ś:[S‹Łš*=óČ„åĶTT5qćcydęŲnf~¾J¦'Jg€ąń»sī[Īv׎f?°Ė”yx;f3¼°p )O­¼žŲ= „õ6ˆ¤JFź¤Ģ»E0`žęŪÉęq–tЁ$7÷s ķ˜å8q:žüćuŌ7˜y…QšŚ čöØ»Zɽ·ÄZćF“™ŪŸŲMM­wLwu•>żƒÕėmƒ’ž~ZžŗßńĄØLĻF§ÕrżµÉÖ8æą$o/śDDEŽ‰Ē $(.n®óy ö7§EÕ>0-ŽÓWūjqX°tRɓū¬µĘ’»ā‡²Īn·ņĄ3ė0™l©Äg]ˆJ%\rEņT‚‚lu&—.ūÖ:X.ć<’dMæ|šĒ÷gŚ ŗO  ¤Lų4_W/ńŪ®‰Äy\!"ówk6ŲG…†ˆæ(RDE2R$i†°HōŹo×¶ŃR¦=J&Ž µĘĒOT±'­TDE]Ļņļ„‹õfLŽI‰ŒTILc=Ī=‘Ļ”ĆY"Ŗń^Ž6m÷ĻŌ7Hc%zt„pŚjz³®˜āT»¼ü“¢ˆŸAXW¬ŖŚq/=2¢/q±1ßkįdŃ)Ņy_ 0Oį1±’XæóĢ÷×ļ“Č„£Į ·‹Q)!( ķ"wz’Qēė˜4ʗ·Vv”²ŽńóžI«»łźó¶h½—‰Fķ\ŃB™īOCƒš”J­V;l—œ4•×_~ŖŻļµā«5Ģ÷øĒ“¹Cnn.«V­rŗ}`` ·Žz«[×ōˆō0a¤-Žą œĢOŪįõ,Ē: L k¤[ē®]ōZIüIšąĻ÷›+øń±<*«„Ń©­†V£¤ŗ¦ē™ˆÆ^xS°/Ä(~0ˆ††ŽSX'ņ¤]‰`õ›œJaķŁ'ž”ŁÖ)+ƒÆŽa»’’RŒĘ2‚ƒ»B–Ūdddšąƒ:Ż>..N2-Žb `ėŲŗ÷Ģ6iĒ,i­Øę]"gŽ—®:VGŅ='¬±^§ _Ø1‘’'ś1󚋾’<џUļōē²»rh’€‡T¶JYō>=Ņ@ōŗÖcAŅ3g^<æŪTć}ś¹E^Sν²J˜²ŅėuŪ}µņ¾ZłĮĮÄ8‡ŲŲhĖ~ ćĒ?ö¢®*y<ņßkŸ¾Ś¶ÆķŌŌśšę1žäK`ŽĖ¶j½R¢¾Į̱æ…7œ“¬: Š¾.eāh«EčoI‹LgąöY|üM™ƒļÖµ”W s’žŠŅXäŲ•ō>µ—Wō¼ßŒcZ÷@śö m£„£±ŒTc©»’ąĘŁWŹŅŒŪ“ć Kż«„ÆZXg76ŽFHlŠ!›’ØbĪ|į<ä‡n‘ĘbµŠJa䜈žYĪ<ŗæ-퐲‚šŚīWĘ^Ę5²sžı¢ÅŅ p»2rō³3šgēĀ“s·UµĒLJ„=ān½ķ2«7U°'½–‹Ī³tĻØ%*\Mnø7Ŗc'„OWƒśóė.éķ–ŲŁŲȑ,é¬Ó‘Ÿ¬£Ł444¢V[n±±Ńā ņbÜī$µ*Māēk)éīč+ Õư·—5Y³Y8hŲŗ>–ģ?,L£'ķõĮ !„ŁRX‡e‘±£¾¾¬£ŁÖxĢčį‚„dœĒ}q£4ÉØ!ŠW™—ČÉö6‚Ä/—‘–YŽÉdXŗ|B_ÕˆĆ„qтxĖĪĒ ez,»’Üo=6ųź¹8~d;­eŚĀ­Vxoøh°-ž÷ģī`–ސXśo˱RiY•¾x;*Ä£¦Õ"Ā& LØ©5‘–YĪŠĮ–z?£ü8?.€“ĢžSėś+Ļ·›LMlÜzTD52RdÕźõÜ|ÓUÖxöuWšė ŲdŚÅ­Gę¤D¬ÓYkź`éZųóPū_Ė×A‰]XoNc……ż·ØD«¾Wž$$¼ļ֞³ʐøP.M°­ޱū„äJ˜ČˆĻ¦ĶŪ)..±Ę³ÆKīpչ̙øe ö7’_wCµ;Bšš„+Õ§ÅŪjdy #„SE³ó„1ÓgŹ‚ųök£‰‹ök£u÷A”€×Ÿ™ŠBa[œ÷ęå§J™3il4±ō ŪŖm•JÅ¢·ž³¬Ė8‡Ė¢m^MŽĀOŪ?w­][?_˜ą…SŖ#Ā|Hžh»)Ļk 3G‹Õ2³+Łņ{±5Vū(łāķx|õŻ»œGʜ1̜2Čļ9PĄš ^:ĶO¦ÓycįGœ:e“ʉćĒšž¢åõ³Ąe¹t”åęßĀŗ³xŠūi»mÆš¾4–V£`Łk‘ųźlæ¾k„µqÓ£/’E“Ż ĢØ ƒųś½qg”{w„F-žd€³åÉūY“`ŗ5nj2óČóė%¹PUF”—Wšü‚·ÆŻpżlZæ‚ń £=Łb¢ūsĶU3ŗJ¢äq¹æfÓĻĢ…¬m·m±RĀø”–8łxą W•t-ƒc“|ņB8·¹g‘±‘W?‘ÖTŃŻJY²2›;®³åugL gļ÷Syź¬ŚG]½p@’p_»ó\Ę fģUāVLu½NĶäľs“„łėłÆüĀęŁās’”¹G©opάג҇C=oJvg³ä³Æ‰‹‹įž”Ū¬Æ :„ußĘńć¹LĻääÉ"“Z-ēŸ7ˆįĆĪC©ō¾¬ĪĀ#ņӎ¶ŪµÅŚķ6iŁK$ż˜«j<˹ŃZÖE~Q#Å„&ššĢų©:HKü0_ė~ `){ņ?ēqŗR…°Z‘ņÆ=DōÕsł%¶©¼1ż ,'ž²ņŅ2OSX\‹V£b@”!P(,åe"ūźł»P:ƒĻĒ€¢SUŌŌ6ŅŠh"0@Gdx*•šĆl6›yīĶͼņŽo")užWŸŪßq£fꔍ– ¤“˜’ģė(•JRęŻ"čuÄÄDÕęyÅÅ%|±buWH”,.ȅ±–][pÅ@~ü ^øŪ'—Žč“ ¦]Üń ³ń“‰[ŸŹgćNinHSWßÄUwļ`é›cøśņHĮ{jFövxžB‰£CYž}®Ć÷ÅĄą«!&ŖżÜtĮÉ īzģ¾ßx¤‹TÉtĢf3OĢ…u6óä?SQ»½ŒŅŅÓ|śłJ½·„"»™\bššJy¹eŠžŽ½ŖŲ¶Cuu5›6m²ĘłłgæM¬Kbæx°¦¶ī9ūļ±/ņŠ "ĢĻÆ}抚®§ŗ¶‰/~,ē_’)"æHSwŪ¢¦ÖÄ5);™5-‚Gęb܈”ʶKˆ§g•óęĒgĢä’2ūŅ łü›ż|ōłŸTTJ·hbA”޽ū]+ ^bŌzX{ģŽ“Ęż¼dó ¼æ\Īę-»Ų¼e}ū„2ż²‰œsN$į}ĆŠhŌeäžČ'u÷_ģŻ{Ś:iüŸ„¤¤ø|n^^“'Ovėś.Čītø«ł§øŌ¹é»­1›įŽąœpKÜ(ņ}ųŽ ųlµžAŃĀ‚} öĮĻWN£¤¾ĮŒ±ÜD~Q#;’Ŗfsj5eŽU"}ՆDõó„Oo&“™ņŹŽ«`_zéYŅXpųĮ§°ö—L{éš7hš×bšÕXĖ“WU7PPTĮĮĆE’f°5‹—ŰxY÷Xk‘™MFf¶Ų2:…Ā“Å,łLĀ[¦J— dćļž¹ø£ Å";Ɓģæ?f걀0 ē œ÷ėåėuž3ß3ēQä|Ī÷ł>ĻóU ##Ó˰Lśˆķ… dāPĖqš†˜ĪøĮ+ĄAūfą‘|q ?`žŲNøČ. ĒĮ¾Éw8„õļŅJąC‘|q—ǁ}ö%Ąk"łā.ŠģǁūEņÅŽۜ{)‚/īņ °¤åX,Ļ·ų”€ų,~Ąj±p‘łĄ*{0N$_Üį „¢’DņÅ]Žlc—‹įˆŠ;±ƒÄpÄM|q¦!ć#(Åv@FFFFĘ7‘DFFFFĘ%d‘‘‘‘‘q ?±‘‘‘‘ …“i żĆėKeeUÕ5?žMQq‰ŲīŁˆŽŽF§ÓPUUE^^^§ÆU«ÕÄÄÄŲģĀĀBŹĖĖ»tY@z!C¢@æ¾:4j%„åõՒ‘U޹¬^l÷lØTJBƒõ4u( “žz5•Õõœ-Æćx¶™ś†&±]ķžz-ƒÖ„kKĢ47[<ģ‘ė VGņģJ—®żļZ#9¹j{äb‡˜Xōē›HNŗ‚ČżŽ)*.aūOi¼ó޶’”ÖĶ łģ³Ļ;v,ß’=3fĢčōµ&“‰£GŚģŪo杕+Wvéž^Īüž0ż.Ųü‹·īäāGź™p‰žŲh ƒ£4÷Q”×*0(1č•T×Z(+oāhv=;öUóõÖ ²óÄv»Ó„iX¼ Žfdؐ@§cš›-¤żfęĖļóyłc446w³—vī¼y,o>=?掣¬MMĶģ=XĄśGywõ> NWt“‡]ēž»ē°|™kYó±cīįųÉÓöČuF¬åłå®ł³wæNr¢Õjxčow³8åV“ZM‡cĆĆB¹nī, ‹E±ńš€Lc€9“¤/ ŽƜÉŠT3zøŽy³Œ¼ŗ“+?/ćžēOS]+ރ¶3$OĄ{/Œ#4Øć_ „RAüčP¢"üyīßGŗÉ;ēųėÕē°ĪRʍŠdÜØH¾'‘ē’łϬŲN£ˆā'ć[č“ZVų3¦':ż¼¢¢’ęf }ś_¼~Üŗ³;ܓ4^9“ģĒ×L%ÆzėNāą§RpĒõĮ\2TĒå·eS['š‚#×͌b͊xüT Įy‹ ‹k©¬nD§UŁORióĆNé¼év½š'˜ĘŌ‰&®¹u •ub»Ōk8pHGMāü³g„“»ćē§r*_¬OåżUŸ±cē/T×ŌÖYJģ“'0ļ†d~ڹG —%…×dv‚żxH †c¹Žŗ›g)27ņ֚RŠJ©Ŗi¦¾ĮBT?5Ćk¹zZ aĮ*ŪŲ‰#õ<¶(ŒeÆušā0eB«_Ÿ Üüjžyė0’żęeåöœN«büČ®ŸŖŸ‹Åp·C®~—‡OSYe]£ńóSه)ń&īŗe,ćFEŚĘNKˆį‹•óøźĘU’ž‰Œ™¶”ššĪ­9åž~ĘĖŽøĒM "9”įŚśŽ˜,}ąnxTTT²`įR7m;gl]]=éĒHĻ8Ęæž³źœĻ{#^ Cģ@ṤDxå#oÜĶó7ņä[Ī¢%ļ-Ąu3Œ¶s‹o į钜‘T(K«QņŸåcP;„ÖŸĻüŅ8[qīŚMm]ŪŅŠŁ–&=ńČĪUJøŹaėšCĒį€ĆĻ%“LøŲ“wCuūČIidӌŽƒæ=œ¶i‡oÖtøĆöŸsöÅĆ|qŸ1oŃ/¼/aa”6ūĄĮĆ"zćŪxT@FYE “Ÿ„¼"8ž»}LO cݜlŸšĻ6±ż×j½±3<Ö(°=+’'āQXTInžżļ}ĮŠFĖō6$°Ó3މä‰ļćQq‡ļÓ u-sƒCÅRHйn†‘™“ģi»Æh¦¾A•č¦HaŚjF/YQ«U“˜Ėj:øB¦·`4 k¶**«DņijŒ1‚Ļ?’¼Óć ÷k¤<& 1¬č­8 Čę_ ®Zkvf'Ą[ŸzźĪŽĒO„ :BĶC C¹ķŚ`["@zV³åJŖ–1@ų#­Ø’Ęā~wSvV˜’`ŠHN@Ö¾æDrÜKŸųˆō#§ŗĮ#׳ĒćE”•©Ī;nż7|ń•øaF£šž•=D@ĀĆƙ;wn·ŽÓcāš:|r ķvU lßW“$>Ģ™$m¹8N‡yēØ”Ö–īŽ˜Ļ6±ā#3/®,‘Tū€Ąį ¤Ŗŗw Hu°ā>Ą BĻVfNÕ©q/¬ųŅĖžøĻÜ«;×F?/ßOt 0ų ģŖjē³ōØČžÄÅĘ8ż¬•ÓEgČ8œŁį˜žŒĒÄqż#u×¹Ÿ§ī² Čå楠· ‹Q)!ŲŲžŪ”^§dģE:¦÷ē›m®mŖć-ü…?Ņź^}Žm÷2ŃØĻ’v,Ó;hh¾T©ÕĪ÷&INšĮ‹Ļ>Ņįw­łd= -õ˜o›Ėŗuė:=>((ˆ[n¹Å­{zD@ z˜2ĘnotŅN껚ā½Öc¦ƒõŅķs×!z­‚¤)$M ä«-Üų`•ÕҘ‰ŌÖ C«QR]ÓūDÄ_/|(86b” Æžė›sfĪ8•'-TŪćĖÆ;ĀŚ»_ß ŽtLې•Įß¹O%%„˜Ķe„„u‡[nsģŲ1ī»ļ¾N‹‹“†€\o°®ulŪwī˜ōÖ°VtĖ.‘s&IW@ŸØ#én{ĢYÆS0 Ģ˜( ÉS˜39–¦Æ$O dŻė¹źĪš% !•mBV½_ƽ®ķZōä±§×ō˜n¼>ī3ķÜ+«„!+½^ētÜ'kæę“µ_DģąAÄƚ¬ūLOü„K»ĆUÉćq _mßß~h*uü¹e'y2,zÖŽ­WJŌ7X8ń»š“žUTńö§„Lg`݊(‚­o\WL4pŪÜ Žł¬ĢÉ·u/å•ĀŲ ĮbsĻxHu…¾!Ā8wyEļū7qNŪH’ža팓b6—‘f.#mĻoÜ8ļY@Zp;9^”°öæjÅYųŖ• k#}aōīŽ]¶üRłeĀ<äūēK£X­¢R8Ł;Ū™›ŚĆł§+Ø©ķymģe\#;ēw;Ų$Ž#=·g c†Ć|!<¼ĄłXU›iR"ģwėm—łrs{3j¹ōBėō÷Ā!Z¢#Ōäˆū :qJųv5lH ?ī–Žn‰ŽĘQ@ŽfI§NGF|²ŽgÓŠŠˆZm}üÅƚÄuȇq{’Ō¦5I€æµ„»³?Ę6/þŽÖdżaźbŪžXbpąˆ0ŒvQœ±‘=—”ƒC ¶‡°ŽČ"ć@}}Ydzmöųq£KÉt÷čÖ$c‡CiD~\"'_8Ū6Šß.#=³œ¦&ūĀŅĢ)żEōF¦L4 ģ­»rœ”éµģłõ€ķŲąÆē²ų1Œ–i·BX}įŅav{Ń3°ē<-‡ĒĄŖX•JkUśŹõīx!5mŠ›%PSŪDzf9#†Yūż ‰ą¢8#陽§'ÖƹČvÜŌŌ̦mĒEōFFЬū2•›oŗÖfĻ»įj~Üź¤€M¦CÜzeNJĖĪZS«¾…_wügõ(qhėĖa¬šP”ž•H£ź{ķwĀEĀ{né=ūa  ćņ{õšĪ=§$×ĀDF|6oŁAq±½¾fŽ Éē­:—9·Äńį’ćØīϐMĶĀJõ+ćķ=²|„ŃĀTŃģ|idś¬ł:W`ßv½‰8S@;£{ ¼ųŲ  ūf_/’[~«”9—ĘĘ&V}lÆŚV©T¬xå ŪĀŗLēpY@“-Õä­|·£ó×~ė06Ą¦ų`JudøÉSķå“y dęH£X-3»’­?ŪlµŸ’_‹Ē_ß³Ūy¤,Ϝ+†Śģ½ XæŃGÓüd¼ĪKÆ¾Ķ™3f›8iĮe£ģźYdnäłw„•*ŗē`)ļ­ĶęöģqŻŁS#Ų÷Õ yé ė6ęQW/Lįσw\Ąų‘!Løö‡īv¹Ėčuj¦'Ęš×;&2-Aæ^öÜlŁ™-Žc$eįLź;Ń õ‡ż>&o|äiŽūąSāābXœr«ķÜČĆŁšÕœ<™Ė”ŒLNŸ.B«ÕrхC5ņB”Jß{Įņļv¶?®=¾ŻaÖ½D2Nøźg¹Ą¤%õķhņ‹).m¢¹Ł‚1@ň”ZāGśŪökŪ“’YšĒŁJ 4ĀjCŹß÷Ł_ĻĢÉöTޘVæOYyé™g),®E«Q18ŚĄš!F k{™Øžz~/”Īāóɟļ„čL5µ446dŌaD„ž2[,žxy Ͻł“HžvžēŸø©Óc”UŹā%–=ž"J„’”E󳎘˜hbb¢Ū½®øø„×HæÕ¾7qI@.‰µī*؊+ņĶOšŌ]v;i’tD§Upåeē_t6Ÿmā–GņŁ“KšŅŌÕ7sķ];Yõņx®›%ų,ČØ&aL_§×)8.ŒÕ_å:ż\ žb¢;ŽMœ®ąĪæę«MG»É+™ž€Åbį”eϱaćž[ ć/ķp–QZz–÷?\ˊ7ߣØXÜNÉiii”—[Sō÷ķsŅŶŖ««Ł¼y³ĶĪĻļś6±. ˆcń`MlŪŪõļŲ ņŠ 2ÜjĻ™/|ąŠ7ŻOum3SĪß’YD~‘4RwŪ£¦¶‰?¤ģbī•‘,Y8”‰£CQ*Ļķ¶’‘UĪĖļ;'“KŹģO/äĆĻšö‡æRQ)ݦ‰…„ģ;pŅ„kKĢŅŚwfĻ^=‹—Ųg¶ł¾Ÿ½“eėn¶lŻM’~aĢŗj*ƒEŃ?FŁ\Fī©|Ņöüƾ}‡Ø­“Ę’³””—ÆĶĖĖcśōénŻ_ty™qĘˆiټøÖżčŚĶƚƒ"¬Ē].(œ¬r°Ó€qķŒ=/¦H5ć/Ö3Ō¤!<ď°?üč4Jź,˜Ė›Č/jd×oÕlI«¦¬Āc-Ņß;ŲįĄiO}y["Āu\‘Ščžōė«£©ÉByeGOT°?£ŒŒ,· g©öd`«+_¤Óś1(*ˆ >: ŒZ ž[›öŖź Š*8t¤ˆ¢3^™šĒög‡¼q#/søPxʲ)†3nņ (–“÷Š;,afß9Ų7>ņś,Ą׆M?{ęęĪv.‹ģ¼²ó¤QĒįM ŠjYµNś­=jė9z\Z‰ 222Bät—DFFFFĘ%d‘‘‘‘‘q ßO‘‘éŌ›ÄvĀEŚ.īmž$†#īŅ“¤ V®cēhŪ‚²ųX G<@ŪDņą1ńmģ/€.ō[ f'ēĘć›ŃǜłrąJ±ń093ž|†’r„‰<"IEND®B`‚libwebsockets-4.3.5/test-apps/7.png000066400000000000000000000116771476025525100172020ustar00rootroot00000000000000‰PNG  IHDR0?Ō,–sBIT|dˆ pHYs==¬r.tEXtSoftwarewww.inkscape.org›ī<°ųÖ¶Ąę\q‰\ģp”Ą°…i'œäilģeF0ä‹+ü tHeČWł¢•`Žø‰; G\Äg/Ė“@šNˆ€Į)ˆ€Į)ųL;@ lƒĆbbōļ„GXØ \4jøøvME5{n›ŃŃыŀĘĘF”••9|¬@ @ll¬Õ®¬¬„J„źŌłŁó“ xŒ>Ń~čė‡ž=Ä øØUéP”Š"·@eŽi÷¬šx\„Ią'"P.‡ĆHȃT"@ƒF‡zU3®)”Ó™vÕ!¤d2‘SĒÖ(Õ0™ĢnöČyōCŚ“ńNūżÖ=(.)w³Gī!¾ ž·i©jDFģŽQTóqā¤߬ ĉ“R{H租~ĀšįĆĤI“>6&&WÆ^µŚĻ<ó 222:už.”øyš—Ÿ’ŃUgr‰ƒ%5P‚ųh!⢄ ąA"ā@īĒ…LĀ…FkFŹˆ«E:œŹÖą×cj•é™vŪaB…X8'3§õF’>žvǘLfdż„ÄöƒåXõMō“‡½¤˜’Ōp|ńž4šłķGYFĪ]¬ĄŽżWńķ–lTT©=äaēyłłéX±Ģ¹Ŗłųa/āZa•›=rž”ƒ`åŠWœ:öÜł\Ö ˆHdĘk扅éJˆDķ uXØĻP”²’Ļø€0M— Čøań€éÉģ7ē‡bśæöE 0t€³¦Ź±ziOdü\‡—WVA£eīFėi#°ī£ ¶;ŽĖå qh¢Ā„ųš?W<ä}¤A‡āXf)#†DbĐH¼žb Vžū$>Xsŏą]ˆEflŁx“&6Śż\­ęĀdā €>Ó=rĢ·ÅčB™žLm?8X¼ŗ«ĪÄ |Ļ>„}Ř0·Śfö„lyxJ2×$‚ĻćŠö›Ķ@eµ Ä"."{JĄåZĘ:Ķž'ŻĪ •°üÕń7:ž-ź†f¦]ņ.\ŹCS“Ö”±õõģ™%ņłöÅć—žXæ!§NK i²<ȈDfÄ÷ŃaLгfÖćäi" ]& ӒØķ>Q@ßh Ƥ«Īę^JÖfÖBQc@c“ :½Q=č'ĀćżijŽ=X‚·„bŁēŠvžGf;*[>E’r >X{ßļ*EŠ Į‰E<ŒŒG§FįčļÕLøŪ.I|‹ —«ŠŠhÉŃšł\DG`lb ž›=#†DZĒŽOŠÅ/³p’X=6~)ššĖ9•ÜøŁÅŽøĘ“s–ąRn>Óntš„ÆÖŠÄC­ębμģ;p{4¢¹™ƒœ\rrEųņ« OŗÉZŗD@īŒā{Ó÷„¦Ÿnꊳ¹ŸŠj–Ƶõ—q±nEž$·ī[ųd0Ž’ź&«BY"!_­MhĒĮr<żjźÕ·ēn“ĶFĻŖĘń,ö‰ä*­āƒ ׋kq½ø’’C6Ž|i,–æ:ŽE,'$Ēāµ’±ā³ćL¹Ü!WóĖŃØ!³$¦ˆŃć•E5V»¹™ƒYOEįŲq2³p”.Yb;ū0ߊģŲ†“¼u£ O,)C~1u3ó“r15„ƒü‰‡Y:æ?śÅQÉņß²k0kŃovÅĆŪ1›÷VCś»iū—<Ÿ„°2†¼"°ōō„łŖĻBˆxt’.“ĖæÅ@ĪuĖvŹP Š~ń×”ӛ±6SIŪ×7¦żµ' øxįéx«m0š1÷µ³hŅzG¹«³|¹žlßG%’żżDxca ƒ؊XdĘcRkŹ+ųųlM0ƒy'n 9pļ­>Ÿ € ·Ā¢>09ŃŻgcŽÓē›hvX0{–Ō¤MŒ@h0µŽą’2ÆćrAēy+‹ŽŚ £‘ %>1c x<Ņp@ē45‚‚ØŖ ›¬Ér‚ćøż'6õ^€+Ē|!Ÿ ū„± ¦Žž4߬cOžćoÄŠģo¾/dĘ(¾Q‡ū©ÅQ”!2$ŽÅ G6’:^ ¶õgy# ķįv± ŪHĖgŻåaP"¦—Å–VŚ_µźi|.ʍ µŚ…„8—SĖ GžgĖ/—hö“‰ yB`+)IėvI©—Æ8×!Ą×qėķœĒī·yuĶ„kĄ…Ź FŻķĪ32Ē ¾bš}„Õ4ƒ@&„ĀiNyēšW8ń{1;»æ7¾gŒŠUō 3 4”Š \øHÄĆYÜ* IC,"µ*ąr!P¦®Ż Ęt—0ÖSiŌ{z”õFœųSÓĪhĻ1 ž>ætµž!O˜£Rр’2źūī×'„Aol#.Ž^‰˜“KÄYÜ* ¶āp0 hÉeī=MķOķE1O’cJ2U¶ūłF%tzv¬D‰¤—­ęśHņ¼5E„uÖķøč ‡Ś¢|ƒą zž²ø˜=”ކ[K‡Rmd’oŌö¾ß€ō™–ķA @LPÄ®^j“:Ö›VR«ž/äińQ{V ų hvI9;fFž¦“œš<ČżDPÖ5µsĮWĖé¢nčƒ ĀĻ?’ģšx™Ģõ5RnŲĖ ōläš@³ŻśiIĄŚŻuꮇĻć :\€×ę…`īCAÖB€œ‚fL]PĀŖ>Xr?śÆTŻČŽä¾§©«§÷eņ“ Y' [×/¦•·ÅŅw6!ēJ©00³gĻvéœn™;Œ²mĆW-ģ9|¼Č²-G;ŲŪē®]$"RĒś#u¬?vUć‰%ehаc&¢m¦ †Hȅ¦É÷DD*”ßl1²…Õ_ī‚^ßń ±“¬¦Ć1L³ż×Ć…°ĪæģoڧuČJ&µķÖŌš Tņģ×O^^^zé%‡Ē'$$°C@&'ZD°ä:Žgß>&ēŗ%¬ŻĖbOOfƀ\¾ŽŒŌ穘³DĢAD(±QB¤óĆō1žøÕōićü±ķóŽø~1L,А†V!+™„ļ“"·Ī±O@Žz?³Ūtć}ó5^Óν”‘. ‰ż ÷‡­rü°UŽą`#āćtˆ×YŽ’¬Aā(–†O<Œ[²G¶į«ēŪMن¶ŅĘĄzf:½×oč¬_9Ķ8p¦_’X‹“ōRL˜[Œ:5uS¾o“ sg2č1…Ŗū÷—±§G—'éLļŖŖRw5ĮuZĻ@zõjØTņuV‚Ķ™x÷żPd¬gǵĪ\ĒŅ’Ŗ{į«öŚHx`h?WĻĪ G’hĜeō:䗟fĒb5użbø#Ņ7Ū™Ēō¦.ņņ*5š“ŻÆ=Į9ŠŠéįĶų8ņ·į,.?žDP­—šö<ąõ9öĒņZå1SS€s̾zŪi¶Vć\®÷Üiiirg¢Ć(©`öńz)żÕœżūųćČoģ{[bWc+ W Ų³N‡Ą<ׄŠė9,å÷ńTZŚĘåHj«Ö$~RKKw{_ņVĆŽŽÖdĒQzҰu,&øp„Žfߕą{]Fūʅ $ˆ a]!B°A§ć ąUÖ=rDķÅRĒq]@\hM2|Š‹‘§(.§Ļ6‚äĢ/HŹÉWĮh¤.†)c{1č 3ŒC³)¶?ą³œż“zŲ“IMø7Ń7;6øŠK!¬šĄ=ż){ĮĄŁŖōÄ޵ls¹–Ué;\ń‚9šZ-"4±ą!¦IkDN¾ ƒś[š=ö‰öĆ] rääūNO¬Ē¼Ėŗm4špąų5½!°‘mŪåxźIŖŻĶ¬™*9꛳BWpé‘95…Ŗ¤jj6ģž¼Üž×–½@MƒXoc……ŠõWQƎUß[÷Ü Ł/Īö÷a Hń¤X«}śl)ėZ˜˜ēšQ)Ŗ«©¤ģ¬™õ®:'܎Kb{ó?rŠhŪŪ‚ŃD/ēœHõČņ6’†ŅKE‹ŹŁQĶ‘łk Ķžūh büŚŻ}ąp€ßšŽM}ųŖ’Ųi‹@šy 6l¦ -x<`ͧ•ÖÄ:Į1œŃ­Õä-ģ9åų±»mĘśI±÷8ėsD†ń‘6Žŗ)–é‘_ĢŽ'˜ü¢ū½Śj ų\lž,RI÷nē‘>g$¦ß××jŸ»Xū½“ĢŠå|²:7oR×DJ²k×T’„z'pZ@& ·Üü[ŲŪ‰½=§Øw…ŽĘ 9ŲōQ¤bźĒ—¹›]/nzõŸĮd“”>0?~1ś¶vļö ˜/č,Ææ˜‚5+¦Zm“ÉŒÅĖ÷ĮLī„6P©øX¾"”¶ļńĒźqx_1’“4v:ĒĘčńČC¾“Oģ§“č¶7żü  ݦ•* ė0zÅN,śÄYO`Śøpdļœ„7>¹ˆmūĖŠ¬£ō—bɳż0rp0F=ÄlĒTGˆ˜˜‹Wžń6yXöį!=]Čc’>o tōĀ€}‡Īćr^Y{ä{¬ū. :,LWZ÷ ¤ÅŽ%(,ąR®UU<ˆDfÜug3† ւė}ĻW]†[dĻé¶ĒµÅīS”€“¼K$÷ŗ³Žø—~1"ģū:å Ŗk0™Ģūń0ØÆ‰ƒ„Ö÷–¶'’³“ õ ,h„ÕŠōœCd/ ¦Œ”Jyc{˰åóDŌ©ōČÉÆGeµ"!qŃ2 č#‡˜Ķ@T/ nT²'ł\ųū"(n6¢Ik€Ž`D \ŒØp9x<śÕl6›ńĪŖ£ųš‹“ yź8+ßyŅį±sźˆ€tĖŽ— ¤/PŅf±±zÄʶ×¬®ęasf@›ŸūN ČĄxĖ[[pF@vŽ{޲S“Ł# b“ļķ8鬬7böå8p¦±Ć±LЬ3į”ēNcĆŖ‘xxJķ³@¹IĆzŲ=ŽĆRF„bĖĪ»Ÿ3L*DltūÕUjĢ_ņ+vøź!ÆŻ³xmYöī—įõæ×`t¢¦ŻYFm-ė7`ĶĮPT3Ūk.++ *•%¤–m§‹m;h4>|Ųj——wž5±N}÷¶‹›šćē:’œĻŹ@d˜Åžž |ō3ŽxÖ„Ķ»TųĒæ(W°£t·-š“F<’~3&Gbń¼¾=4\nŪ],s TXõMŽm•\lę|N%6žt_oüźö6M¬Ø¬Eö…B§Ž­Q²ė½3gĻå`įā¬vy…÷·Ė9zL†£ĒdčÕӀ©÷7ąŽ;ōļe€Ph†RÉCI©Yg%ČĪCŪĢŽN°éééN[VV†‰'ŗt~§äl.0’ÖßNu­cå»­1›gŽī·Ų†ļĆ/¼_ļ¶KŠ7Fˆ°`>Bƒłš“r r”ӛ”TQ®0ąĢ_ĶŅŠŗńzŪö—aŪž2„‡‰q_RODGHѳ‡F£Ŗ=®^Wć|nr Ų‘ ürżŲ}(bųĖ„ū‹ “ ­mŚ5zT(ŌøtEÅMvĪ[“±é26aŚ ·—_„¼ü"¦Żč*«ųX÷éøėN ȁ߯sr{o.dŠ¢2=ŠŹŲ±Ž£+©Ph±aū[{h› øz]… ©' ‚S!‚S!‚SųęūN ‚·£p€i'œ¤urļ8€Ē™pÄUŗ“€4`W­£c“®aÓŲĢ„#n u!y€o˜pÄ Ø[ŁæčDæÖ “³o$¼3ś`S«ÉQ˜Ģ˜'ī„ų֗×ń_QRdŠsø«IEND®B`‚libwebsockets-4.3.5/test-apps/8.png000066400000000000000000000117751476025525100172020ustar00rootroot00000000000000‰PNG  IHDR0?Ō,–sBIT|dˆ pHYs==¬r.tEXtSoftwarewww.inkscape.org›ī<zIDATxœķyXTeūĒ?3Ćl ‹ ā `Śā’†øf¹@]¶Zż2+ß²([ģĶŹź­7Ūwė­·~eæ²ŅʲlQ“Ģ%—ČŌTp0@Adßē÷ĒĄĢp˜8gą|®Ėė:÷™ē̹9ßóÜĻ}ߏ™īĘ$ ‡ŲNø@&p éŲxKD_Üį5`æĶ4ß |"–3īąĢŪ ŁdŪŁWa"łā°ü]šé|*’/īņ$°ĒξxC$_Üå ĄĪ~x@$_Üį0¶Å¹×”"ųā.Æ ›ŽuĄ\ń\q‹/ˆ÷ā¬Ū ™,·³£DņÅŽB( Z Q$_Üåķv0Y G<€Ž(†#nā3 /A)¶22222މ, 22222.! ˆŒŒŒŒŒKųˆķ€ŒŒŒŒŌP(} ļJXhOŹĖ+ØØ¬āčŃ, ‹ÄvĻJTčt–ćŠ ČĶužZµ¢£möɓPZھūĖŅ åĒĄh?zõŌ”Q+).­%栚ōĢRL%µb»gE„R¤ĒĻ !0@‡B”@«Qį«WS^YĖ™ŅŽf™Ø­kŪU§šÕk1“.][d*£±Ńģa\gš ž$͘äҵ_¬ZKvNž‡=ņ 1ŒĢ’ĒM$%^JDŸŽĒ±õ·T>ųh%[Kķd…|ż5Œi9žłg˜:ÕłkF8|Ųfß~;,[Ö¾ūw˜€hŌpśš÷…)wĮĘ?:źNž!n؞1é‰‰ŅŠ?RCPz­‚?%½’Źj3%„ ĪŖeŪžJ~Ų\FVnŲn;MH †sc¹nF_ šw8¦±ŃLź_&¾ū9W?8B]}c'{ićĪ›Gņö³3šńi;ŹŚŠŠČīżł¬Y˜Wģ!’TY'yŲ~ø{&K»–53ā^Ž?åa\gųŠĮ¼øäA—®Ż½7]r¢ÕjxäŸw³ łV“ZM›cĆBCøzÖtNž,]@ĦĆdā‹xĢ'}yüĪPfŽ÷k{P„šįƒuĢžĄė‹z±ģ›xń•Õā=h!iJ>zi!m’b(• ↇīĖ ’=ŌIŽ9ĘWÆ>§x€e–2jX£†Ešč½ ¼ųŸßxnéVźE?ļB§Õ²āÓ·˜:%Įįēeeå46šéŃCųāõėęķįž¤é0™9Īv|åXųzGŻI|T īø6ˆ‹ź˜|[Õ5Ņ /Ųsõ“HV.ĆG„œ7›įda5å•õč“J"zéQ*-c~Ł.7Żöą«WóōC“˜8Öȕ·®¤¬¼Fl—ŗ ū”ŖŖŚ©±gĪHg–čć£r(ß®Iįćå_³mūT6ż½“Z 1ŒŒOĆģė’ųmū.1\–& 3āmĒ"a`É騻y–S=ļ¬,¦ ØžŠŖFjėĢDöR3Øæ–+&ł¤²Ž;TĻóCYüfAß(ʄ²āĶ1ńČÉ«ä¹wņŏ'()µ…ątZ£‡sķōH6ż^(†»mŇģ;xŠņ Ė’؈Lˆ3r×-#5,Ā:vR|4ß.›Ķå7.—ōLdĤETU9·ę”ó÷éöĘ=nšū0Ņ3Äv£Ż,zčnx”••3wŽBR6l9klMM-iéGHK?Ā»ļ-?ėóīH‡Čłż!¦Æš\b¼öYGÜĶóäÖóō;Ž¢ž%-éĆÕS¬ēÜĢ³ļ–T(K«QņŽ’ØķĀ@k~ĪcĪC©œ);{ķ¦ŗ¦-©…lI•žxd7YÅ ¾¾‘cŁÅĖ.ę’¾ÜĆć÷Oąé‡&¢PXÄrņøh¹gKŽ8ūA gäQQ)Ļ’Ä"ŚŲ—ļ›gµkjj™}ó½l޲SDƼ‹©±Ÿ}˜›";ö!-o¦¬¢‘Ī%#Ūö0óóU2=įė'Ģ¢;q^[Ģvēž"fß·Ó”xx;f3<óśf’ūIpžį»ć ėiÉ+©“<Ž`ĮüÕ7Ž—Å£tˆ€$5ͳó!ķ˜å8a8:Nžń:jė̼³Ņ$87ŠŲöug¢Q+¹gNŒÕ®o0sŪ#»ØŖöŽtWWy÷ć?ų.Ŷųļļ§å±ŽFeŗ7:­–ėÆM²Śył§xcé‡"zäx\@‚ą’¦>Ÿū3a_SXTķ—Åyśnā±}o•Ą –NIMŅ”>„Ūź žwå1f¶³BČK¹ļ‰u44ŲB‰7Īŗ•Jnø #䊤©ŁśL.’ģėb¹Œóxü7kś%ąÓ“Ƽ/Ć& ŠuĀXE%Ā·łšZé¬ÜzQ`šÅqqģæKX³ŽVb īāH=’‘"‰3„M¢W}óS+#eŚĀćb/ö3ęĻŗŹĖ ^'L‹=q²^$O„Ø}”LjµŸØ`wZ±ˆu>+¾= °gL‰É©’?Śzœs"ƒ‡2EōĘ{ńčć\„„Ėķ¶®9pöŁż\BzĄ˜ =yGń2P'°—F6ĶŠĮ=0ųŚĀi¶ygM‡;lż=[`_8Č÷“é(z…õ$44ÄjļŪPDo¼ Hü0‹H—ĀĮć[G’¶é*a¬›“lńSә¶žY)¢76Ēģ‡Ļˆä‰xœ,(''×ö÷>o@H£eŗżū÷ŲiéGDņÄūńØ€Ų‹Ćϩм–¹Ī®ā?± $Å\=5€ićli»o~j¢¶N•čĘaŚjz7Y{ŃVõ¼ļH5/-“N•pµĄĪɓĘĢØ³9‘g›ØÕ*ü“˜JŖŚøB¦» ¬Ł*+ÆÉĻ2d|óóć (‘ņ˜€D÷±T 7c/ ’€šZh®Ł™ļ|å©;w<>*Qįj™ĀmWYŅ2k˜>?GR}°ü„?Ҳ i,īw6%g„)™~ädÕĒ )Ē­±č©ĻH;t¢wm¢×*HœąOā¾ßTʍēR^)™HuP0“%•UŻOD|õ‡‚}#F©šś»?žõ0sĉ\él”Śßż°Ń©Öī½ā§Ģ¶ Y|õĒc2•Ųn¹Ķ‘#p’żĪ•ˆ€\g°¬ulŁsö˜“c–°VTÓ.‘3ĒIW@«!ńn[ĢYÆSŠ'Ō‡čH Iż˜9ޟ¦¦Æ$Mōgõ›}¹üĪl% !å-BV½O·½®åZōä‰gWv™n¼?µŌkڹ—WCVz½Īįø/WżĄ—«~ 88˜žżˆ‰1Zö7šø1w†«’Ē#b¾Śŗ·õŠTŹųGÓ"OŅx˜’¼­[Ɣح3sģoį'-³ØążÆŠ™8ŹĄź„‘ś[Ā"—Ž5pŪ¬@>ųŗÄĮ·u.„åĀŲææĮ‡BS×xHµ‡žĮĀ8wiY÷ū7qLĖHļŽ”­Œ“`2•j*!u×_Ü8ūJY@šp;9^”°ōæjĘQųŖ™uvk#į=aųyīŽ]6żQĮÜÅĀ<äęH£X­¬\8éŃ=Ū™ūŚĀy§ŹØŖīzmģe\#+ūoÓß(Ž#]·g #C;r<:×ńXU‹uĢÄŲ-īÖŪ.óŻĘ2v§Wsńł–éļł“D…«ÉÉ÷Auģ„šķjŠ~Ż)½Ż;{9œ):ńÉ<šE]]=jµåńc×!/ĘķHb‹Ö$~¾––īŽž“xöö¶&k6  [öĒƒ}‡„a“ bZŁuŲ?„ [ė, 2vŌÖ֑y4Ėj5L°±”Œóø/ n“&9zK#ņćŁyĀŁFP€ųķ2Ņ2Jih°-,M›Š[DoÄaĀX£ĄŽ¼#Ūń@™nĖ®?÷Y ¾z.‰ŃĘh™Öp+„Ž.d³ē?»Ī‘„78–’Ūr¬TZŖŅ—­qĒ ńØjQDŲ(„€ŖźŅ2J2ČŅļg@”Đ–Ń}zb]åÖ憆F6l9*¢72Rdõw)Ü|ÓUV{öuWšėfl2māÖ+sbÖtÖŖXžüy°ķ?+ÖA‘]ƒXoc……õ· HUᮙ  dūģ‡186”Éń¶źįķ»NH®…‰ŒųlÜ“ĀB[}Ķģė’ĪYu.s6n ˆżĆ’×]Péϐ ĀJõĖāl=²¼ųįĀTѬkÖ{išŸL‡óŹėļsś“Éj'ŒĶ;KŸ•ŌہĖ2y¤åįßĢŗv¼č­ŻfŪ+¼/Œ„Õ(ųģ„H|u¶¾•?Ik榇ž’‹F»E™‘ńÕŪcĻj÷īZüd€öņč½ ,]2Żj76šYųtŠ$ Ue¤AiiO/yCpī†ėÆ`cŹJĘŏĢd›‰6ö嚫ft–‹’ĒåłšżC?#2ŪŃmŚT ©`ģ‹4ī{ÅUO:—AŃZ>|&œK†ŁŌ³ĄTĻ‹J+Utמb>Z•Åķףāŗ3&†³ēū©<öŹ~VÆĻ„¦V˜Š7ܗ‡ļ8ŃCƒs•øSAÆS3%!šļˤxaüzń æ°i{–8Ž9Iņ¼iŌ:Ń å—½<"o|äi>śä+bc£Y|«õÜŠ!ƒY÷ż'?žĆō N*@«ÕrĮł6ō|”Jļ{Įź(<" k··>®5~Śfę½DŅ¹źg9ĻØ%åż(ņ ź),n ±ŃL€ŸŠ!µÄ õµī–¶'’³(—3åh„Õ‚äķ&¢·žićm©¼Ń} ¬x3Ž’Ņ:Ņ2Īp²°­FE’(ƒ PXŚĖDöÖó÷Ié,>’ż> NWPU]O]}:"ĆP©„æĢf³™§^ŻÄ o’&’§ĪóāS79=vnI¹, Äā'_F©T’<Ž`ÖEttT«×ńłJé·ŚļH\‹b,» 6技üų P?¢§Ćė Hʊļs~._ ŃQmǦóO•qēĆ?šż†Ćä•LWĄl6óČāX·~ž3™±q·9Ė(.>Ćǟ®béŪQP(n§äŌT(mŹŠß栉m[TVĀʍ6;Ļ…]b]ūāĮŖŲ²»żß±÷ä@D˜Åž9^śÄo:ŸŹźF>’±”ż§€¼i¤ī¶FUu×$ļ`Öe,œ7±ĆCP*ĻŽķ6“žYŹ«9+“KŹģM;ɧ_ļćżO’¤¬\ŗMóO³gßq—®-2Ikߙ]»ÓX°š9«—ļżķr6mŽÉ¦Ķ;éŻ+”é—O¤_æHĀ{‡”ŃØ1™JČ9‘GꮿسēÕ5Ņų–œģśµ¹¹0eŠ{÷Wķ^fœ:¢›¶/,†ÕæŗvóĖĒBæpĖq}}» ēĖķģT`T+cω1BĶč õ 4j ö!4Ų?_:’Ś:3¦Ņņ źŁńW%›R+))óX‹ō·€vvpŹS_Ž’š0—Ę÷"Ŗ/½zźhh0SZ^ĒįceģM/!=Ó­‚Ći@Š=ŲģŹé“>ō‹ $°‡ƒ†-_µM{Eełe8T@Įé™ūöēG:āFĢAąüēöCEšÅ]^6÷ Ū+efkm¦łfĄK^Ÿ…ø4Łš»gnīhēB±ČŹ­#+WuI~A5ĖWKæµGuM=‡J+1AFFFˆœN ####ć²€ČČČČČø„, 22222.!7~‘‘‘ńFj b;į"-÷¶7ˆįˆ»t%©¤•ėč-[PVŸ‹įˆh™Iž| †# ¬…ż-ŠŽ~ ’ĮäąÜh¼3ś`Ÿ3_ \&–#žE‘0ćĻkųÕśÆ*#%“IEND®B`‚libwebsockets-4.3.5/test-apps/CMakeLists.txt000066400000000000000000000175061476025525100210630ustar00rootroot00000000000000# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2020 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # # # Test applications # set(TEST_APP_LIST) if ((LWS_ROLE_H1 OR LWS_ROLE_H2)) # # Helper function for adding a test app. # macro(create_test_app TEST_NAME MAIN_SRC S2 S3 S4 S5 S6) set(TEST_SRCS ${MAIN_SRC}) set(TEST_HDR) if ("${S2}" STREQUAL "") else() list(APPEND TEST_SRCS ${S2}) endif() if ("${S3}" STREQUAL "") else() list(APPEND TEST_SRCS ${S3}) endif() if ("${S4}" STREQUAL "") else() list(APPEND TEST_SRCS ${S4}) endif() if ("${S5}" STREQUAL "") else() list(APPEND TEST_SRCS ${S5}) endif() if ("${S6}" STREQUAL "") else() list(APPEND TEST_SRCS ${S6}) endif() if (WIN32) list(APPEND TEST_SRCS ${WIN32_HELPERS_PATH}/getopt.c ${WIN32_HELPERS_PATH}/getopt_long.c ${WIN32_HELPERS_PATH}/gettimeofday.c ) list(APPEND TEST_HDR ${WIN32_HELPERS_PATH}/getopt.h ${WIN32_HELPERS_PATH}/gettimeofday.h ) endif(WIN32) source_group("Headers Private" FILES ${TEST_HDR}) source_group("Sources" FILES ${TEST_SRCS}) add_executable(${TEST_NAME} ${TEST_SRCS} ${TEST_HDR}) foreach(libpath ${LWS_DEP_LIB_PATHS}) target_link_directories(${TEST_NAME} ${libpath}) endforeach() if (LWS_LINK_TESTAPPS_DYNAMIC) if (NOT LWS_WITH_SHARED) message(FATAL_ERROR "Build of the shared library is disabled. LWS_LINK_TESTAPPS_DYNAMIC must be combined with LWS_WITH_SHARED.") endif() target_link_libraries(${TEST_NAME} websockets_shared) add_dependencies(${TEST_NAME} websockets_shared) else() if (NOT LWS_WITH_STATIC) message(FATAL_ERROR "Build of the static library is disabled. Disabled LWS_LINK_TESTAPPS_DYNAMIC must be combined with LWS_WITH_STATIC.") endif() target_link_libraries(${TEST_NAME} websockets) add_dependencies(${TEST_NAME} websockets) if (UNIX AND LWS_WITH_SSL AND NOT LWS_WITH_MBEDTLS) target_link_libraries(${TEST_NAME} ${CMAKE_DL_LIBS}) endif() endif() if (LWS_LIB_INCLUDES) target_include_directories(${TEST_NAME} PRIVATE "${LWS_LIB_INCLUDES}" ${LWS_LIB_BUILD_INC_PATHS}) else() target_include_directories(${TEST_NAME} PRIVATE ${LWS_LIB_BUILD_INC_PATHS}) endif() target_compile_options(${TEST_NAME} PRIVATE ${LWS_PTHR_FLAGS}) if (LWS_WITH_HTTP_STREAM_COMPRESSION) target_link_libraries(${TEST_NAME} z) endif() # Set test app specific defines. set_property(TARGET ${TEST_NAME} PROPERTY COMPILE_DEFINITIONS INSTALL_DATADIR="${CMAKE_INSTALL_PREFIX}/share" ) # Prefix the binary names with libwebsockets. set_target_properties(${TEST_NAME} PROPERTIES OUTPUT_NAME libwebsockets-${TEST_NAME}) target_link_libraries(${TEST_NAME} ${LIB_LIST_AT_END}) # Add to the list of tests. list(APPEND TEST_APP_LIST ${TEST_NAME}) endmacro() if (NOT LWS_WITHOUT_SERVER) # # test-server # if (NOT LWS_WITHOUT_TEST_SERVER) create_test_app(test-server "test-server.c" "" "" "" "" "") target_compile_definitions(test-server PRIVATE LWS_BUILDING_SHARED) if (LWS_WITH_CGI AND (LWS_WITH_PLUGINS OR LWS_WITH_PLUGINS_BUILTIN) AND LWS_WITH_TLS) create_test_app(test-sshd "test-sshd.c" "" "" "" "" "") target_include_directories(test-sshd PRIVATE "${PROJECT_SOURCE_DIR}/plugins/ssh-base/include") target_compile_definitions(test-sshd PRIVATE LWS_BUILDING_SHARED) endif() endif() # # test-server-extpoll # if (NOT LWS_WITHOUT_TEST_SERVER_EXTPOLL AND NOT WIN32) create_test_app(test-server-extpoll "test-server.c" "" "" "" "" "") target_compile_definitions(test-server-extpoll PRIVATE LWS_BUILDING_SHARED) # Set defines for this executable only. set_property( TARGET test-server-extpoll PROPERTY COMPILE_DEFINITIONS INSTALL_DATADIR="${CMAKE_INSTALL_PREFIX}/share" ) # We need to link against winsock code. if (WIN32) target_link_libraries(test-server-extpoll ws2_32.lib) endif(WIN32) endif() if (LWS_WITH_LEJP) create_test_app( test-lejp "test-lejp.c" "" "" "" "" "") target_compile_definitions(test-lejp PRIVATE LWS_BUILDING_STATIC) endif() if (LWS_WITH_CBOR) create_test_app( test-lecp "test-lecp.c" "" "" "" "" "") target_compile_definitions(test-lecp PRIVATE LWS_BUILDING_STATIC) endif() # Data files for running the test server. list(APPEND TEST_SERVER_DATA "${PROJECT_SOURCE_DIR}/test-apps/favicon.ico" "${PROJECT_SOURCE_DIR}/test-apps/leaf.jpg" "${PROJECT_SOURCE_DIR}/test-apps/candide.zip" "${PROJECT_SOURCE_DIR}/test-apps/candide-uncompressed.zip" "${PROJECT_SOURCE_DIR}/test-apps/libwebsockets.org-logo.svg" "${PROJECT_SOURCE_DIR}/test-apps/http2.png" "${PROJECT_SOURCE_DIR}/test-apps/wss-over-h2.png" "${PROJECT_SOURCE_DIR}/test-apps/lws-common.js" "${PROJECT_SOURCE_DIR}/test-apps/test.html" "${PROJECT_SOURCE_DIR}/test-apps/test.css" "${PROJECT_SOURCE_DIR}/test-apps/test.js") add_custom_command(TARGET test-server POST_BUILD COMMAND "${CMAKE_COMMAND}" -E make_directory "$/../share/libwebsockets-test-server") # Copy the file needed to run the server so that the test apps can # reach them from their default output location foreach (TEST_FILE ${TEST_SERVER_DATA}) if (EXISTS ${TEST_FILE}) add_custom_command(TARGET test-server POST_BUILD COMMAND "${CMAKE_COMMAND}" -E copy "${TEST_FILE}" "$/../share/libwebsockets-test-server" VERBATIM) endif() endforeach() endif(NOT LWS_WITHOUT_SERVER) if (NOT LWS_WITHOUT_CLIENT) # # test-client # if (NOT LWS_WITHOUT_TEST_CLIENT) create_test_app(test-client "test-client.c" "" "" "" "" "") endif() endif(NOT LWS_WITHOUT_CLIENT) endif((LWS_ROLE_H1 OR LWS_ROLE_H2)) # Install test apps. install(TARGETS ${TEST_APP_LIST} RUNTIME DESTINATION ${LWS_INSTALL_EXAMPLES_DIR} COMPONENT examples) set(CPACK_COMPONENT_EXAMPLES_DISPLAY_NAME "Example files") # Programs shared files used by the test-server if (NOT LWS_WITHOUT_SERVER) install(FILES ${TEST_SERVER_DATA} DESTINATION share/libwebsockets-test-server COMPONENT examples) install(FILES "${PROJECT_SOURCE_DIR}/test-apps/private/index.html" DESTINATION share/libwebsockets-test-server/private COMPONENT examples) if (LWS_WITH_CGI) set(CGI_TEST_SCRIPT "${PROJECT_SOURCE_DIR}/test-apps/lws-cgi-test.sh") install(FILES ${CGI_TEST_SCRIPT} PERMISSIONS OWNER_EXECUTE GROUP_EXECUTE WORLD_EXECUTE OWNER_READ GROUP_READ WORLD_READ DESTINATION share/libwebsockets-test-server COMPONENT examples) endif() endif() if (NOT LWS_WITHOUT_TEST_SERVER AND NOT LWS_WITHOUT_SERVER) install(FILES lws-ssh-test-keys;lws-ssh-test-keys.pub DESTINATION share/libwebsockets-test-server COMPONENT examples) endif() libwebsockets-4.3.5/test-apps/android/000077500000000000000000000000001476025525100177325ustar00rootroot00000000000000libwebsockets-4.3.5/test-apps/android/README000066400000000000000000000035451476025525100206210ustar00rootroot00000000000000/* * libwebsockets Android client - libwebsockets test application for Android * * Copyright (C) 2016 Alexander Bruines * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * The test apps are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. */ This directory contains an Android Studio (2.1.1) project that builds libwebsockets (+ openssl + zlib) and an Android application that is able to connect to the 'dumb-increment-protocol' of the libwebsockets test server. Building the native libraries requires the Android NDK which can be installed using the SDK manager. The app/src/main/jni/NativeLibs.mk is fully integraded with Gradle but will only work on Linux and requires the following applications to be available in addition to the NDK: awk cmake egrep git tar wget makedepend (makedepend can be installed from (Debian) xutils-dev) To build the project: - Open an 'existing project' with Android Studio and select this directory. (answer yes/ok to the question to integrate with Gradle). - Open the file app/src/main/jni/Application.mk and make sure NDK_ROOT is set correctly and that APP_PLATFORM is set to the appropriate API level. - Build the project with CTRL+F9 (open the gradle console to follow the build progress). - Install APK to device and run. - Connect to libwebsockets test server. libwebsockets-4.3.5/test-apps/android/app/000077500000000000000000000000001476025525100205125ustar00rootroot00000000000000libwebsockets-4.3.5/test-apps/android/app/app.iml000066400000000000000000000223171476025525100220020ustar00rootroot00000000000000 libwebsockets-4.3.5/test-apps/android/app/build.gradle000066400000000000000000000022021476025525100227650ustar00rootroot00000000000000apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0.3" defaultConfig { applicationId "org.libwebsockets.client" minSdkVersion 17 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } sourceSets { main { jni.srcDirs = [] } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.3.0' } task buildNativeLibs(type: Exec, description: "compile the native libraries") { commandLine 'make', '-f', 'NativeLibs.mk', '-C', 'src/main/jni', 'all' } task cleanNativeLibs(type: Exec, description: "clean the native libraries source tree") { commandLine 'make', '-f', 'NativeLibs.mk', '-C', 'src/main/jni', 'clean-ndk' } tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn buildNativeLibs } clean.dependsOn 'cleanNativeLibs' libwebsockets-4.3.5/test-apps/android/app/src/000077500000000000000000000000001476025525100213015ustar00rootroot00000000000000libwebsockets-4.3.5/test-apps/android/app/src/main/000077500000000000000000000000001476025525100222255ustar00rootroot00000000000000libwebsockets-4.3.5/test-apps/android/app/src/main/AndroidManifest.xml000066400000000000000000000017771476025525100260320ustar00rootroot00000000000000 libwebsockets-4.3.5/test-apps/android/app/src/main/java/000077500000000000000000000000001476025525100231465ustar00rootroot00000000000000libwebsockets-4.3.5/test-apps/android/app/src/main/java/org/000077500000000000000000000000001476025525100237355ustar00rootroot00000000000000libwebsockets-4.3.5/test-apps/android/app/src/main/java/org/libwebsockets/000077500000000000000000000000001476025525100265755ustar00rootroot00000000000000libwebsockets-4.3.5/test-apps/android/app/src/main/java/org/libwebsockets/client/000077500000000000000000000000001476025525100300535ustar00rootroot00000000000000libwebsockets-4.3.5/test-apps/android/app/src/main/java/org/libwebsockets/client/LwsService.java000066400000000000000000000076121476025525100330120ustar00rootroot00000000000000/* * LwsService.java - libwebsockets test service for Android * * Copyright (C) 2016 Alexander Bruines * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * The test apps are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. */ package org.libwebsockets.client; import android.os.Message; import android.os.RemoteException; import android.util.Log; public class LwsService extends ThreadService { /** * Commands that can be send to this service */ public final static int MSG_SET_CONNECTION_PARAMETERS = 1; /** * Messages that may be send to output Messenger * Clients should handle these messages. **/ public final static int MSG_DUMB_INCREMENT_PROTOCOL_COUNTER = 1; public final static int MSG_LWS_CALLBACK_CLIENT_CONNECTION_ERROR = 2; public final static int MSG_LWS_CALLBACK_CLIENT_ESTABLISHED = 3; public static class ConnectionParameters { String serverAddress; int serverPort; ConnectionParameters( String serverAddress, int serverPort ){ this.serverAddress = serverAddress; this.serverPort = serverPort; } } /** * Handle incoming messages from clients of this service */ @Override public void handleInputMessage(Message msg) { Message m; switch(msg.what) { case MSG_SET_CONNECTION_PARAMETERS: { LwsService.ConnectionParameters parameters = (ConnectionParameters) msg.obj; setConnectionParameters( parameters.serverAddress, parameters.serverPort ); break; } default: super.handleInputMessage(msg); break; } } /** * The run() function for the thread. * For this test we implement a very long lived task * that sends many messages back to the client. * **/ public void workerThreadRun() { initLws(); connectLws(); while(true) { // service the websockets serviceLws(); // Check if we must quit or suspend synchronized (mThreadLock){ while(mMustSuspend) { // We are asked to suspend the thread try { mThreadLock.wait(); } catch (InterruptedException e) {} } if(mMustQuit) { // The signal to quit was given break; } } // Throttle the loop so that it iterates once every 50ms try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } } exitLws(); } /** Load the native libwebsockets code */ static { try { System.loadLibrary("lwsservice"); } catch(UnsatisfiedLinkError ule) { Log.e("LwsService", "Warning: Could not load native library: " + ule.getMessage()); } } public native boolean initLws(); public native void exitLws(); public native void serviceLws(); public native void setConnectionParameters(String serverAddress, int serverPort); public native boolean connectLws(); } libwebsockets-4.3.5/test-apps/android/app/src/main/java/org/libwebsockets/client/MainActivity.java000066400000000000000000000213441476025525100333230ustar00rootroot00000000000000/* * MainActivity.java - libwebsockets test service for Android * * Copyright (C) 2016 Alexander Bruines * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * The test apps are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. */ package org.libwebsockets.client; import android.content.ComponentName; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.ServiceConnection; import android.os.IBinder; import android.os.Message; import android.os.Messenger; import android.os.RemoteException; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.inputmethod.InputMethodManager; import android.view.View; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends AppCompatActivity implements LwsService.OutputInterface { /** This is the Messenger that handles output from the Service */ private Messenger mMessenger = null; /** The Messenger for sending commands to the Service */ private Messenger mService = null; private ServiceConnection mServiceConnection = null; private boolean mThreadIsRunning = false; private boolean mThreadIsSuspended = false; private TextView tvCounter; private EditText etServer; private EditText etPort; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Get the layout items tvCounter = (TextView) findViewById(R.id.textView_counter); etServer = (EditText) findViewById(R.id.editText_serverLocation); etPort = (EditText) findViewById(R.id.editText_portNumber); // Create the Messenger for handling output from the service mMessenger = new Messenger(new LwsService.OutputHandler(this)); // Restore state from the Bundle when restarting due to a device change. if(savedInstanceState!=null) { mThreadIsRunning = savedInstanceState.getBoolean("mThreadIsRunning"); } mServiceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { mService = new Messenger(service); try { // Set the output messenger by starting the thread Message msg = Message.obtain(null, LwsService.MSG_SET_OUTPUT_HANDLER, 0, 0); msg.replyTo = mMessenger; mService.send(msg); if(mThreadIsRunning){ // If the thread is already running at this point it means // that the application was restarted after a device change. // This implies that the thread was suspended by the onStop method. msg = Message.obtain(null, LwsService.MSG_THREAD_RESUME, 0, 0); mService.send(msg); mThreadIsSuspended = false; } } catch(RemoteException e) { e.printStackTrace(); } } @Override public void onServiceDisconnected(ComponentName name) { Log.e("MainActivity","onServiceDisconnected !"); mService = null; } }; if(savedInstanceState==null){ startService(new Intent(getBaseContext(), LwsService.class)); } } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putBoolean("mThreadIsRunning", mThreadIsRunning); } @Override protected void onStart() { super.onStart(); bindService(new Intent(getBaseContext(), LwsService.class), mServiceConnection, Context.BIND_AUTO_CREATE); } @Override protected void onStop() { super.onStop(); if(mThreadIsRunning) { if (!mThreadIsSuspended) { try { mService.send(Message.obtain(null, LwsService.MSG_THREAD_SUSPEND, 0, 0)); } catch (RemoteException e) { e.printStackTrace(); } mThreadIsSuspended = true; } } unbindService(mServiceConnection); } @Override protected void onDestroy() { super.onDestroy(); if(isFinishing()){ stopService(new Intent(getBaseContext(), LwsService.class)); } } /** Implement the interface to receive output from the LwsService */ @Override public void handleOutputMessage(Message message) { switch(message.what) { case LwsService.MSG_DUMB_INCREMENT_PROTOCOL_COUNTER: tvCounter.setText((String)message.obj); break; case LwsService.MSG_LWS_CALLBACK_CLIENT_CONNECTION_ERROR: connectErrorListener(); break; case LwsService.MSG_LWS_CALLBACK_CLIENT_ESTABLISHED: break; case LwsService.MSG_THREAD_STARTED: // The thread was started mThreadIsRunning = true; mThreadIsSuspended = false; break; case LwsService.MSG_THREAD_STOPPED: // The thread was stopped mThreadIsRunning = false; mThreadIsSuspended = false; break; case LwsService.MSG_THREAD_SUSPENDED: // The thread is suspended mThreadIsRunning = true; mThreadIsSuspended = true; break; case LwsService.MSG_THREAD_RESUMED: // the thread was resumed mThreadIsRunning = true; mThreadIsSuspended = false; break; default: break; } } private void connectErrorListener(){ try { Message msg; if(mThreadIsRunning) { msg = Message.obtain(null, LwsService.MSG_THREAD_STOP); mService.send(msg); } AlertDialog.Builder adb = new AlertDialog.Builder(this); adb.setTitle("Error"); adb.setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }); adb.setMessage("Could not connect to the server."); adb.show(); } catch (RemoteException e){} } /** * Start/Stop Button Handler */ public void clickStart(View v) { if(!mThreadIsRunning) { View view = this.getCurrentFocus(); if (view != null) { InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getWindowToken(), 0); } mThreadIsRunning = true; mThreadIsSuspended = false; try { Message msg = Message.obtain(null, LwsService.MSG_SET_CONNECTION_PARAMETERS, 0, 0); int port = 0; if(!etPort.getText().toString().equals("")) // prevent NumberformatException port = Integer.parseInt(etPort.getText().toString()); LwsService.ConnectionParameters parameters = new LwsService.ConnectionParameters( etServer.getText().toString(), port ); msg.obj = parameters; mService.send(msg); msg = Message.obtain(null, LwsService.MSG_THREAD_START, 0, 0); mService.send(msg); } catch(RemoteException e) { e.printStackTrace(); } } else { try { mService.send(Message.obtain(null, LwsService.MSG_THREAD_STOP, 0, 0)); } catch(RemoteException e) { e.printStackTrace(); } mThreadIsRunning = false; mThreadIsSuspended = false; } } } libwebsockets-4.3.5/test-apps/android/app/src/main/java/org/libwebsockets/client/ThreadService.java000066400000000000000000000244071476025525100334550ustar00rootroot00000000000000/* * ThreadService.java - libwebsockets test service for Android * * Copyright (C) 2016 Alexander Bruines * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * The test apps are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. */ package org.libwebsockets.client; import android.app.Service; import android.content.Intent; import android.os.Handler; import android.os.IBinder; import android.os.Message; import android.os.Messenger; import android.os.RemoteException; import android.util.Log; import java.lang.ref.WeakReference; public abstract class ThreadService extends Service { /** Messages that can be send to the Service: **/ public final static int MSG_SET_OUTPUT_HANDLER = 1001; public final static int MSG_THREAD_START = 1002; public final static int MSG_THREAD_STOP = 1003; public final static int MSG_THREAD_SUSPEND = 1004; public final static int MSG_THREAD_RESUME = 1005; /** * Messages that may be send from the Service * (Clients should handle these messages) **/ public final static int MSG_THREAD_STARTED = 2001; public final static int MSG_THREAD_STOPPED = 2002; public final static int MSG_THREAD_SUSPENDED = 2003; public final static int MSG_THREAD_RESUMED = 2004; /** Data accessed by both worker thread and the UI-thread must be synchronized **/ public final Object mThreadLock = new Object();; public volatile boolean mMustQuit; public volatile boolean mWorkThreadIsRunning; public volatile boolean mMustSuspend; /** Handler for incoming messages **/ public static class InputHandler extends Handler { private final WeakReference mService; InputHandler(ThreadService service) { mService = new WeakReference(service); } @Override public void handleMessage(Message msg) { ThreadService service = mService.get(); if(service != null) { service.handleInputMessage(msg); } } } /** * Interface and Handler for outgoing messages to clients of this service. * (Must be implemented by the client.) */ public interface OutputInterface { void handleOutputMessage(Message message); } public static class OutputHandler extends Handler { // Notice that we do NOT use a WeakReference here // (If we did the service would lose mOutputMessenger the moment // that garbage collection is performed by the Java VM) private final OutputInterface mInterface; OutputHandler(OutputInterface object) { mInterface = object; } @Override public void handleMessage(Message msg) { mInterface.handleOutputMessage(msg); } } /** The Messengers used to communicate with the clients of this service **/ public final Messenger mInputMessenger = new Messenger(new InputHandler(this)); public Messenger mOutputMessenger; /** The worker thread and its runnable **/ public static class WorkerThreadRunnable implements Runnable { private final WeakReference mService; WorkerThreadRunnable(ThreadService service){ mService = new WeakReference(service); } @Override public void run() { ThreadService service = mService.get(); if(service != null) { service.mWorkThreadIsRunning = true; service.workerThreadRun(); service.mWorkThreadIsRunning = false; } } } public Thread mWorkerThread; /** Handle incoming messages from the client **/ public void handleInputMessage(Message msg) { try { Message m; switch(msg.what) { case MSG_SET_OUTPUT_HANDLER: // set the output messenger then // send a message indicating the thread status mOutputMessenger = msg.replyTo; break; case MSG_THREAD_START: try { // reset thread vars synchronized (mThreadLock) { // thread allready running? if(!mWorkThreadIsRunning){ // no, start it mMustQuit = false; mMustSuspend = false; mWorkerThread = new Thread(new WorkerThreadRunnable(this)); mWorkerThread.start(); } else { // yes, resume it mMustQuit = false; mMustSuspend = false; mThreadLock.notifyAll(); } } } catch(NullPointerException e) { e.printStackTrace(); } if(mOutputMessenger != null) { m = Message.obtain(null, MSG_THREAD_STARTED, 0, 0); mOutputMessenger.send(m); } break; case MSG_THREAD_STOP: try { synchronized(mThreadLock) { if(mWorkThreadIsRunning) { mMustQuit = true; mMustSuspend = false; mThreadLock.notifyAll(); } } mWorkerThread.join(); } catch(InterruptedException e) { Log.e("ThreadService","handleInputMessage join() interrupted"); } if(mOutputMessenger != null) { m = Message.obtain(null, MSG_THREAD_STOPPED, 0, 0); mOutputMessenger.send(m); } break; case MSG_THREAD_SUSPEND: synchronized (mThreadLock) { if(mWorkThreadIsRunning) { mMustSuspend = true; } } if(mOutputMessenger != null) { m = Message.obtain(null, MSG_THREAD_SUSPENDED, 0, 0); mOutputMessenger.send(m); } break; case MSG_THREAD_RESUME: synchronized (mThreadLock) { if(mWorkThreadIsRunning) { mMustSuspend = false; mThreadLock.notifyAll(); } } if(mOutputMessenger != null) { m = Message.obtain(null, MSG_THREAD_RESUMED, 0, 0); mOutputMessenger.send(m); } break; default: break; } } catch(RemoteException e) { e.printStackTrace(); } } /** * This can be called from the JNI functions to send output messages to the client */ public void sendMessage(int msg, Object obj){ Message m = Message.obtain(null, msg, 0, 0); m.obj = obj; try { mOutputMessenger.send(m); } catch(RemoteException e) { e.printStackTrace(); } } /** The run() function for the worker thread **/ public abstract void workerThreadRun(); /** * Called when the service is being created. * ie. When the first client calls bindService() or startService(). **/ @Override public void onCreate() { super.onCreate(); // initialize variables mWorkThreadIsRunning = false; mMustQuit = false; mOutputMessenger = null; mWorkerThread = null; } /** * Called when the first client is binding to the service with bindService() * * If the service was started with bindService() it will automatically stop when the last * client unbinds from the service. If you want the service to continue running even if it * is not bound to anything then start the service with startService() before * calling bindService(). In this case stopService() must be called after unbinding * to stop the service. */ @Override public IBinder onBind(Intent intent) { return mInputMessenger.getBinder(); } /** Called if the service is started with startService(). */ @Override public int onStartCommand(Intent intent, int flags, int startId) { return START_STICKY; } /** Called when the first client is binds to the service with bindService() */ @Override public void onRebind(Intent intent) {} /** Called when all clients have unbound with unbindService() */ @Override public boolean onUnbind(Intent intent) { //mOutputMessenger = null; return false; // do not allow to rebind. } /** Called when the service is no longer used and is being destroyed */ @Override public void onDestroy() { super.onDestroy(); try { if(mWorkThreadIsRunning){ synchronized(mThreadLock) { mMustQuit = true; mMustSuspend = false; mThreadLock.notifyAll(); } mWorkerThread.join(); } } catch(NullPointerException | InterruptedException e) { e.printStackTrace(); } } } libwebsockets-4.3.5/test-apps/android/app/src/main/jni/000077500000000000000000000000001476025525100230055ustar00rootroot00000000000000libwebsockets-4.3.5/test-apps/android/app/src/main/jni/Android.mk000066400000000000000000000017131476025525100247200ustar00rootroot00000000000000# get current directory LOCAL_PATH := $(call my-dir) # libz.a # include $(CLEAR_VARS) LOCAL_MODULE := libz LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/lib/libz.a include $(PREBUILT_STATIC_LIBRARY) # libssl.a # include $(CLEAR_VARS) LOCAL_MODULE := libssl LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/lib/libssl.a include $(PREBUILT_STATIC_LIBRARY) # libcrypto.a # include $(CLEAR_VARS) LOCAL_MODULE := libcrypto LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/lib/libcrypto.a include $(PREBUILT_STATIC_LIBRARY) # libwebsockets.a # include $(CLEAR_VARS) LOCAL_MODULE := libwebsockets LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/lib/libwebsockets.a include $(PREBUILT_STATIC_LIBRARY) # liblwsservice.so # include $(CLEAR_VARS) LOCAL_DISABLE_FATAL_LINKER_WARNINGS := true LOCAL_MODULE := lwsservice LOCAL_SRC_FILES := LwsService.cpp LOCAL_C_INCLUDES := $(LOCAL_PATH) $(TARGET_ARCH_ABI)/include LOCAL_STATIC_LIBRARIES := websockets z ssl crypto LOCAL_LDLIBS := -llog include $(BUILD_SHARED_LIBRARY) libwebsockets-4.3.5/test-apps/android/app/src/main/jni/Application.mk000066400000000000000000000027761476025525100256150ustar00rootroot00000000000000# # Zlib, OpenSSL and libwebsockets will be downloaded automatically unless you place # their source .tar.gz files in the jni directory... # # The location of the NDK # NDK_ROOT := /opt/Android/Sdk/ndk-bundle # Update these to the latest versions before building # ZLIB_VERSION := 1.2.8 OPENSSL_VERSION := 1.0.2h # This will be executed as 'git clone $(LIBWEBSOCKETS_GIT_URL)' # LIBWEBSOCKETS_GIT_URL := --branch master https://github.com/warmcat/libwebsockets.git # # Note: If you build for API level 21 or higher in APP_PLATFORM, # the resulting application will only run on API 21+ devices. # Even if minSdkVersion has been set to a lower level! # This is the result of API changes for the native signal() function. # The recommended solution is to build two packages, one for API 17+ and the other for API 21+ devices. # http://stackoverflow.com/questions/28740315/android-ndk-getting-java-lang-unsatisfiedlinkerror-dlopen-failed-cannot-loca # # Note: If you change the API level the JNI code must be rebuild completely. # (Run 'make clean' from the app/src/main/jni directory.) # APP_PLATFORM := android-23 # Builds for armeabi armeabi-v7a x86 mips arm64-v8a x86_64 mips64 # #APP_ABI := all # The same as above. # #APP_ABI := armeabi armeabi-v7a x86 mips arm64-v8a x86_64 mips64 # Good enough for most current devices + x86 AVD # APP_ABI := armeabi-v7a x86 # Enable (GNU) c++11 extentions APP_CPPFLAGS += -std=gnu++11 # Use the GNU standard template library APP_STL := gnustl_shared libwebsockets-4.3.5/test-apps/android/app/src/main/jni/LwsService.cpp000066400000000000000000000204571476025525100256070ustar00rootroot00000000000000/* * LwsService.cpp - libwebsockets test service for Android * * Copyright (C) 2016 Alexander Bruines * * This file is made available under the Creative Commons CC0 1.0 * Universal Public Domain Dedication. * * The person who associated a work with this deed has dedicated * the work to the public domain by waiving all of his or her rights * to the work worldwide under copyright law, including all related * and neighboring rights, to the extent allowed by law. You can copy, * modify, distribute and perform the work, even for commercial purposes, * all without asking permission. * * The test apps are intended to be adapted for use in your code, which * may be proprietary. So unlike the library itself, they are licensed * Public Domain. */ #include #include #include #define printf(...) __android_log_print(ANDROID_LOG_VERBOSE, "LwsService", ##__VA_ARGS__) ///////////////////////////////////////////////////////// // Code executed when loading the dynamic link library // ///////////////////////////////////////////////////////// // The Java class the native functions shall be part of #define JNIREG_CLASS "org/libwebsockets/client/LwsService" JavaVM* gJvm = NULL; JNIEnv* gEnv = 0; JNIEXPORT jboolean JNICALL jni_initLws(JNIEnv *env, jobject obj); JNIEXPORT void JNICALL jni_exitLws(JNIEnv *env, jobject obj); JNIEXPORT void JNICALL jni_serviceLws(JNIEnv *env, jobject obj); JNIEXPORT void JNICALL jni_setConnectionParameters(JNIEnv *env, jobject obj, jstring serverAddress, jint serverPort); JNIEXPORT jboolean JNICALL jni_connectLws(JNIEnv *env, jobject obj); static JNINativeMethod gMethods[] = { { "initLws", "()Z", (void*)jni_initLws }, { "exitLws", "()V", (void*)jni_exitLws }, { "serviceLws", "()V", (void*)jni_serviceLws }, { "setConnectionParameters", "(Ljava/lang/String;I)V", (void*)jni_setConnectionParameters }, { "connectLws", "()Z", (void*)jni_connectLws }, }; static int registerNativeMethods(JNIEnv* env, const char* className, JNINativeMethod* gMethods, int numMethods) { jclass cls; cls = env->FindClass(className); if(cls == NULL) { return JNI_FALSE; } if (env->RegisterNatives(cls, gMethods, numMethods) < 0) { return JNI_FALSE; } return JNI_TRUE; } static int registerNatives(JNIEnv* env) { if(!registerNativeMethods(env, JNIREG_CLASS, gMethods, sizeof(gMethods) / sizeof(gMethods[0]))) { return JNI_FALSE; } return JNI_TRUE; } JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void * reserved) { jint result = -1; gJvm = vm; if(vm->GetEnv((void**)&gEnv, JNI_VERSION_1_6) != JNI_OK) goto bail; if(vm->AttachCurrentThread(&gEnv, NULL) < 0) goto bail; if(registerNatives(gEnv) != JNI_TRUE) goto bail; result = JNI_VERSION_1_6; bail: return result; } JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *vm, void *reserved) { gJvm = NULL; } //////////////////////////////////////////////////// // JNI functions to export: // //////////////////////////////////////////////////// static jclass gLwsServiceCls; static jobject gLwsServiceObj; static jmethodID sendMessageId; static const int MSG_DUMB_INCREMENT_PROTOCOL_COUNTER = 1; static const int MSG_LWS_CALLBACK_CLIENT_CONNECTION_ERROR = 2; static const int MSG_LWS_CALLBACK_CLIENT_ESTABLISHED = 3; #define BUFFER_SIZE 4096 static struct lws_context *context = NULL; static struct lws_context_creation_info info; static struct lws *wsi = NULL; // prevents sending messages after jni_exitLws had been called static int isExit = 0; enum websocket_protocols { PROTOCOL_DUMB_INCREMENT = 0, PROTOCOL_COUNT }; struct per_session_data { ;// no data }; static int callback( struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len ); static struct lws_protocols protocols[] = { { "dumb-increment-protocol", callback, sizeof( struct per_session_data ), BUFFER_SIZE, }, { NULL, NULL, 0, 0 } // end of list }; static const struct lws_extension exts[] = { { "deflate-frame", lws_extension_callback_pm_deflate, "deflate_frame" }, { NULL, NULL, NULL } }; static int port = 0; static int use_ssl = 0; static int use_ssl_client = 0; static char address[8192]; static char ca_cert[8192]; static char client_cert[8192]; static char client_cert_key[8192]; static int deny_deflate = 0; static int deny_mux = 0; // Logging function for libwebsockets static void emit_log(int level, const char *msg) { printf("%s", msg); } JNIEXPORT jboolean JNICALL jni_initLws(JNIEnv *env, jobject obj) { if(context) return JNI_TRUE; // Attach the java virtual machine to this thread gJvm->AttachCurrentThread(&gEnv, NULL); // Set java global references to the class and object jclass cls = env->GetObjectClass(obj); gLwsServiceCls = (jclass) env->NewGlobalRef(cls); gLwsServiceObj = env->NewGlobalRef(obj); // Get the sendMessage method from the LwsService class (inherited from class ThreadService) sendMessageId = gEnv->GetMethodID(gLwsServiceCls, "sendMessage", "(ILjava/lang/Object;)V"); memset(&info, 0, sizeof(info)); info.port = CONTEXT_PORT_NO_LISTEN; info.protocols = protocols; #if !defined(LWS_WITHOUT_EXTENSIONS) info.extensions = exts; #endif info.gid = -1; info.uid = -1; lws_set_log_level( LLL_NOTICE | LLL_INFO | LLL_ERR | LLL_WARN | LLL_CLIENT, emit_log ); context = lws_create_context(&info); if( context == NULL ){ emit_log(LLL_ERR, "Creating libwebsocket context failed"); return JNI_FALSE; } isExit = 0; return JNI_TRUE; } // Send a message to the client of the service // (must call jni_initLws() first) static inline void sendMessage(int id, jobject obj) { if(!isExit) gEnv->CallVoidMethod(gLwsServiceObj, sendMessageId, id, obj); } JNIEXPORT void JNICALL jni_exitLws(JNIEnv *env, jobject obj) { if(context){ isExit = 1; lws_context_destroy(context); context = NULL; env->DeleteGlobalRef(gLwsServiceObj); env->DeleteGlobalRef(gLwsServiceCls); } } static int callback( struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len ) { switch(reason){ case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: sendMessage(MSG_LWS_CALLBACK_CLIENT_CONNECTION_ERROR, NULL); break; case LWS_CALLBACK_CLIENT_ESTABLISHED: sendMessage(MSG_LWS_CALLBACK_CLIENT_ESTABLISHED, NULL); break; case LWS_CALLBACK_CLIENT_RECEIVE: ((char *)in)[len] = '\0'; sendMessage(MSG_DUMB_INCREMENT_PROTOCOL_COUNTER, gEnv->NewStringUTF((const char*)in)); break; case LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED: if ((strcmp((const char*)in, "deflate-stream") == 0) && deny_deflate) { emit_log(LLL_ERR, "websocket: denied deflate-stream extension"); return 1; } if ((strcmp((const char*)in, "deflate-frame") == 0) && deny_deflate) { emit_log(LLL_ERR, "websocket: denied deflate-frame extension"); return 1; } if ((strcmp((const char*)in, "x-google-mux") == 0) && deny_mux) { emit_log(LLL_ERR, "websocket: denied x-google-mux extension"); return 1; } break; default: break; } return 0; } JNIEXPORT void JNICALL jni_serviceLws(JNIEnv *env, jobject obj) { if(context){ lws_service( context, 0 ); } } JNIEXPORT void JNICALL jni_setConnectionParameters( JNIEnv *env, jobject obj, jstring serverAddress, jint serverPort ) { address[0] = 0; port = serverPort; use_ssl = 0; use_ssl_client = 0; snprintf(address, sizeof(address), "%s", env->GetStringUTFChars(serverAddress, 0)); } JNIEXPORT jboolean JNICALL jni_connectLws(JNIEnv *env, jobject obj) { struct lws_client_connect_info info_ws; memset(&info_ws, 0, sizeof(info_ws)); info_ws.port = port; info_ws.address = address; info_ws.path = "/"; info_ws.context = context; info_ws.ssl_connection = use_ssl; info_ws.host = address; info_ws.origin = address; info_ws.ietf_version_or_minus_one = -1; info_ws.client_exts = exts; info_ws.protocol = protocols[PROTOCOL_DUMB_INCREMENT].name; // connect wsi = lws_client_connect_via_info(&info_ws); if(wsi == NULL ){ // Error emit_log(LLL_ERR, "Protocol failed to connect."); return JNI_FALSE; } return JNI_TRUE; } libwebsockets-4.3.5/test-apps/android/app/src/main/jni/NativeLibs.mk000066400000000000000000001530031476025525100254000ustar00rootroot00000000000000# # GNU Make makefile for building static libraries for use with the Android NDK # Copyright (C) 2016, Alexander Bruines # # This file is made available under the Creative Commons CC0 1.0 # Universal Public Domain Dedication. # # The person who associated a work with this deed has dedicated # the work to the public domain by waiving all of his or her rights # to the work worldwide under copyright law, including all related # and neighboring rights, to the extent allowed by law. You can copy, # modify, distribute and perform the work, even for commercial purposes, # all without asking permission. # # The test apps are intended to be adapted for use in your code, which # may be proprietary. So unlike the library itself, they are licensed # Public Domain. # # # This makefile is fully intergrated with this Android Studio project and # it will be called automaticaly when you build the project with Gradle. # # The source packages for the libraries will be automaticaly downloaded. # Alternativly you can provide your own sources by placing the following # files in the 'jni' directory: # # zlib-1.2.8.tar.gz # openssl-1.0.2g.tar.gz # libwebsockets.tar.gz # # This makefile was tested with the latest NDK/SDK and Android Studio at the # time of this writing. As these software packages evolve changes to this # makefile may be needed or it may become obselete... # # This makefile was made for use in Linux but you may be able to edit it # and make it work under Windows. # # At least on Debian, building openssl requires package xutils-dev # for makedepend. Ofcourse the standard development packages must also be # installed, but xutils-dev is not that obvious in this case... # # Makedepend will most likely print a lot of warnings during the 'make depend' # stage of building openssl. In this case these warnings can be safely ignored. # # Include Application.mk but do not complain if it is not found # ifeq ($(MAKE_NO_INCLUDES),) -include Application.mk endif # Location of the NDK. # ifeq ($(NDK_ROOT),) NDK_ROOT := /opt/Android/SDK/ndk-bundle endif # Select the ABIs to compile for # NDK_APP_ABI = $(APP_ABI) ifeq ($(NDK_APP_ABI),) # Set to 'all' if APP_ABI is undefined NDK_APP_ABI = all endif ifeq ($(NDK_APP_ABI),all) # Translate 'all' to the individual targets NDK_APP_ABI = armeabi armeabi-v7a arm64-v8a mips mips64 x86 x86_64 else # Use the targets from APP_ABI NDK_APP_ABI = $(APP_ABI) endif # Select the Android platform to compile for # ifeq ($(APP_PLATFORM),) # use a level that supports all specified ABIs if none was specified APP_PLATFORM = android-21 endif NDK_MAKE_TOOLCHAIN := $(NDK_ROOT)/build/tools/make_standalone_toolchain.py # # The source packages we want/need # Zlib and openssl should be defined in Application.mk, libwebsockets is # cloned from github # ifeq ($(ZLIB_VERSION),) ZLIB_VERSION := 1.2.8 endif ifeq ($(OPENSSL_VERSION),) OPENSSL_VERSION := 1.0.2g endif ifeq ($(ZLIB_TGZ_SOURCE),) ZLIB_TGZ_SOURCE := zlib-$(ZLIB_VERSION).tar.gz endif ifeq ($(OPENSSL_TGZ_SOURCE),) OPENSSL_TGZ_SOURCE := openssl-$(OPENSSL_VERSION).tar.gz endif LIBWEBSOCKETS_TGZ_SOURCE := libwebsockets.tar.gz # The names of the directories in the source tgz files ZLIB_DIR := $(basename $(basename $(ZLIB_TGZ_SOURCE))) OPENSSL_DIR := $(basename $(basename $(OPENSSL_TGZ_SOURCE))) LIBWEBSOCKETS_DIR := $(basename $(basename $(LIBWEBSOCKETS_TGZ_SOURCE))) # The URLs used to fetch the source tgz files ZLIB_TGZ_URL := http://prdownloads.sourceforge.net/libpng/$(ZLIB_TGZ_SOURCE) OPENSSL_TGZ_URL := https://openssl.org/source/$(OPENSSL_TGZ_SOURCE) ifeq ($(LIBWEBSOCKETS_GIT_URL),) LIBWEBSOCKETS_GIT_URL := https://github.com/warmcat/libwebsockets.git endif # These values are the same as the values for $TARGET_ARCH_ABI in Android.mk # This way 'make $TARGET_ARCH_ABI' builds libraries for that ABI. # This is also the name for the directory where the libraries are installed to. # TARGET_X86 := x86 TARGET_X86_64 := x86_64 TARGET_ARM := armeabi TARGET_ARM_V7A := armeabi-v7a TARGET_ARM_V7A_HARD := armeabi-v7a-hard TARGET_ARM64_V8A := arm64-v8a TARGET_MIPS := mips TARGET_MIPS64 := mips64 # The Android NDK API version to build the libraries with. # # android-9 ... android-19 support arm mips and x86 # android-21 and higher also support arm64 mips64 and x86_64 # # These should be set to the same value as APP_PLATFORM (Application.mk) # # http://developer.android.com/ndk/guides/stable_apis.html # # If you change these or APP_PLATFORM you must do a 'make clean' # # Note: # libraries compiled for android-21 and upwards are incompatible with devices below that version! # http://stackoverflow.com/questions/28740315/android-ndk-getting-java-lang-unsatisfiedlinkerror-dlopen-failed-cannot-loca # TARGET_X86_NDK_API := $(subst android-,,$(APP_PLATFORM)) TARGET_X86_64_NDK_API := $(subst android-,,$(APP_PLATFORM)) TARGET_ARM_NDK_API := $(subst android-,,$(APP_PLATFORM)) TARGET_ARM_V7A_NDK_API := $(subst android-,,$(APP_PLATFORM)) TARGET_ARM_V7A_HARD_NDK_API := $(subst android-,,$(APP_PLATFORM)) TARGET_ARM64_V8A_NDK_API := $(subst android-,,$(APP_PLATFORM)) TARGET_MIPS_NDK_API := $(subst android-,,$(APP_PLATFORM)) TARGET_MIPS64_NDK_API := $(subst android-,,$(APP_PLATFORM)) # The configure arguments to pass to the OpenSSL Configure script # (--prefix and --openssldir are added automaticaly). # (note: use no-asm on x86 and x86_64 to generate fully position independent code) # # x86 TARGET_X86_OPENSSL_CONFIG_TARGET := android-x86 TARGET_X86_OPENSSL_CONFIG := no-asm no-shared no-idea no-mdc2 no-rc5 no-zlib no-zlib-dynamic enable-tlsext no-ssl2 no-ssl3 enable-ec enable-ecdh enable-ecp # x86_64 TARGET_X86_64_OPENSSL_CONFIG_TARGET := linux-x86_64 TARGET_X86_64_OPENSSL_CONFIG := no-asm no-shared no-idea no-mdc2 no-rc5 no-zlib no-zlib-dynamic enable-tlsext no-ssl2 no-ssl3 enable-ec enable-ecdh enable-ecp enable-ec_nistp_64_gcc_128 # armeabi TARGET_ARM_OPENSSL_CONFIG_TARGET := android TARGET_ARM_OPENSSL_CONFIG := no-shared no-idea no-mdc2 no-rc5 no-zlib no-zlib-dynamic enable-tlsext no-ssl2 no-ssl3 enable-ec enable-ecdh enable-ecp # armeabi-v7a TARGET_ARM_V7A_OPENSSL_CONFIG_TARGET := android-armv7 TARGET_ARM_V7A_OPENSSL_CONFIG := no-shared no-idea no-mdc2 no-rc5 no-zlib no-zlib-dynamic enable-tlsext no-ssl2 no-ssl3 enable-ec enable-ecdh enable-ecp # armeabi-v7a-hard TARGET_ARM_V7A_HARD_OPENSSL_CONFIG_TARGET := android-armv7 TARGET_ARM_V7A_HARD_OPENSSL_CONFIG := no-shared no-idea no-mdc2 no-rc5 no-zlib no-zlib-dynamic enable-tlsext no-ssl2 no-ssl3 enable-ec enable-ecdh enable-ecp # arm64-v8a TARGET_ARM64_V8A_OPENSSL_CONFIG_TARGET := android TARGET_ARM64_V8A_OPENSSL_CONFIG := no-shared no-idea no-mdc2 no-rc5 no-zlib no-zlib-dynamic enable-tlsext no-ssl2 no-ssl3 enable-ec enable-ecdh enable-ecp # mips TARGET_MIPS_OPENSSL_CONFIG_TARGET := android-mips TARGET_MIPS_OPENSSL_CONFIG := no-shared no-idea no-mdc2 no-rc5 no-zlib no-zlib-dynamic enable-tlsext no-ssl2 no-ssl3 enable-ec enable-ecdh enable-ecp # mips64 TARGET_MIPS64_OPENSSL_CONFIG_TARGET := android TARGET_MIPS64_OPENSSL_CONFIG := no-shared no-idea no-mdc2 no-rc5 no-zlib no-zlib-dynamic enable-tlsext no-ssl2 no-ssl3 enable-ec enable-ecdh enable-ecp # The cmake configuration options for libwebsockets per target ABI, # --prefix and openssl library/header paths are set automaticaly and # the location of zlib should be picked up by CMake # x86 TARGET_X86_LWS_OPTIONS = \ -DCMAKE_C_COMPILER=$(shell pwd)/$(TOOLCHAIN_X86)/bin/$(TOOLCHAIN_X86_PREFIX)-gcc \ -DCMAKE_AR=$(shell pwd)/$(TOOLCHAIN_X86)/bin/$(TOOLCHAIN_X86_PREFIX)-ar \ -DCMAKE_RANLIB=$(shell pwd)/$(TOOLCHAIN_X86)/bin/$(TOOLCHAIN_X86_PREFIX)-ranlib \ -DCMAKE_C_FLAGS="$$CFLAGS" \ -DLWS_WITH_SHARED=OFF \ -DLWS_WITH_STATIC=ON \ -DLWS_WITHOUT_DAEMONIZE=ON \ -DLWS_WITHOUT_TESTAPPS=ON \ -DLWS_IPV6=OFF \ -DLWS_WITH_BUNDLED_ZLIB=OFF \ -DLWS_WITH_SSL=ON \ -DLWS_WITH_HTTP2=ON \ -DCMAKE_BUILD_TYPE=Release # x86_64 TARGET_X86_64_LWS_OPTIONS = \ -DCMAKE_C_COMPILER=$(shell pwd)/$(TOOLCHAIN_X86_64)/bin/$(TOOLCHAIN_X86_64_PREFIX)-gcc \ -DCMAKE_AR=$(shell pwd)/$(TOOLCHAIN_X86_64)/bin/$(TOOLCHAIN_X86_64_PREFIX)-ar \ -DCMAKE_RANLIB=$(shell pwd)/$(TOOLCHAIN_X86_64)/bin/$(TOOLCHAIN_X86_64_PREFIX)-ranlib \ -DCMAKE_C_FLAGS="$$CFLAGS" \ -DLWS_WITH_SHARED=OFF \ -DLWS_WITH_STATIC=ON \ -DLWS_WITHOUT_DAEMONIZE=ON \ -DLWS_WITHOUT_TESTAPPS=ON \ -DLWS_IPV6=OFF \ -DLWS_WITH_BUNDLED_ZLIB=OFF \ -DLWS_WITH_SSL=ON \ -DLWS_WITH_HTTP2=ON \ -DCMAKE_BUILD_TYPE=Release # armeabi TARGET_ARM_LWS_OPTIONS = \ -DCMAKE_C_COMPILER=$(shell pwd)/$(TOOLCHAIN_ARM)/bin/$(TOOLCHAIN_ARM_PREFIX)-gcc \ -DCMAKE_AR=$(shell pwd)/$(TOOLCHAIN_ARM)/bin/$(TOOLCHAIN_ARM_PREFIX)-ar \ -DCMAKE_RANLIB=$(shell pwd)/$(TOOLCHAIN_ARM)/bin/$(TOOLCHAIN_ARM_PREFIX)-ranlib \ -DCMAKE_C_FLAGS="$$CFLAGS" \ -DLWS_WITH_SHARED=OFF \ -DLWS_WITH_STATIC=ON \ -DLWS_WITHOUT_DAEMONIZE=ON \ -DLWS_WITHOUT_TESTAPPS=ON \ -DLWS_IPV6=OFF \ -DLWS_WITH_BUNDLED_ZLIB=OFF \ -DLWS_WITH_SSL=ON \ -DLWS_WITH_HTTP2=ON \ -DCMAKE_BUILD_TYPE=Release # armeabi-v7a TARGET_ARM_V7A_LWS_OPTIONS = \ -DCMAKE_C_COMPILER=$(shell pwd)/$(TOOLCHAIN_ARM_V7A)/bin/$(TOOLCHAIN_ARM_V7A_PREFIX)-gcc \ -DCMAKE_AR=$(shell pwd)/$(TOOLCHAIN_ARM_V7A)/bin/$(TOOLCHAIN_ARM_V7A_PREFIX)-ar \ -DCMAKE_RANLIB=$(shell pwd)/$(TOOLCHAIN_ARM_V7A)/bin/$(TOOLCHAIN_ARM_V7A_PREFIX)-ranlib \ -DCMAKE_C_FLAGS="$$CFLAGS" \ -DLWS_WITH_SHARED=OFF \ -DLWS_WITH_STATIC=ON \ -DLWS_WITHOUT_DAEMONIZE=ON \ -DLWS_WITHOUT_TESTAPPS=ON \ -DLWS_IPV6=OFF \ -DLWS_WITH_BUNDLED_ZLIB=OFF \ -DLWS_WITH_SSL=ON \ -DLWS_WITH_HTTP2=ON \ -DCMAKE_BUILD_TYPE=Release # armeabi-v7a-hard TARGET_ARM_V7A_HARD_LWS_OPTIONS = \ -DCMAKE_C_COMPILER=$(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)/bin/$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-gcc \ -DCMAKE_AR=$(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)/bin/$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-ar \ -DCMAKE_RANLIB=$(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)/bin/$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-ranlib \ -DCMAKE_C_FLAGS="$$CFLAGS" \ -DLWS_WITH_SHARED=OFF \ -DLWS_WITH_STATIC=ON \ -DLWS_WITHOUT_DAEMONIZE=ON \ -DLWS_WITHOUT_TESTAPPS=ON \ -DLWS_IPV6=OFF \ -DLWS_WITH_BUNDLED_ZLIB=OFF \ -DLWS_WITH_SSL=ON \ -DLWS_WITH_HTTP2=ON \ -DCMAKE_BUILD_TYPE=Release # arm64-v8a TARGET_ARM64_V8A_LWS_OPTIONS = \ -DCMAKE_C_COMPILER=$(shell pwd)/$(TOOLCHAIN_ARM64_V8A)/bin/$(TOOLCHAIN_ARM64_V8A_PREFIX)-gcc \ -DCMAKE_AR=$(shell pwd)/$(TOOLCHAIN_ARM64_V8A)/bin/$(TOOLCHAIN_ARM64_V8A_PREFIX)-ar \ -DCMAKE_RANLIB=$(shell pwd)/$(TOOLCHAIN_ARM64_V8A)/bin/$(TOOLCHAIN_ARM64_V8A_PREFIX)-ranlib \ -DCMAKE_C_FLAGS="$$CFLAGS" \ -DLWS_WITH_SHARED=OFF \ -DLWS_WITH_STATIC=ON \ -DLWS_WITHOUT_DAEMONIZE=ON \ -DLWS_WITHOUT_TESTAPPS=ON \ -DLWS_IPV6=OFF \ -DLWS_WITH_BUNDLED_ZLIB=OFF \ -DLWS_WITH_SSL=ON \ -DLWS_WITH_HTTP2=ON \ -DCMAKE_BUILD_TYPE=Release # mips TARGET_MIPS_LWS_OPTIONS = \ -DCMAKE_C_COMPILER=$(shell pwd)/$(TOOLCHAIN_MIPS)/bin/$(TOOLCHAIN_MIPS_PREFIX)-gcc \ -DCMAKE_AR=$(shell pwd)/$(TOOLCHAIN_MIPS)/bin/$(TOOLCHAIN_MIPS_PREFIX)-ar \ -DCMAKE_RANLIB=$(shell pwd)/$(TOOLCHAIN_MIPS)/bin/$(TOOLCHAIN_MIPS_PREFIX)-ranlib \ -DCMAKE_C_FLAGS="$$CFLAGS" \ -DLWS_WITH_SHARED=OFF \ -DLWS_WITH_STATIC=ON \ -DLWS_WITHOUT_DAEMONIZE=ON \ -DLWS_WITHOUT_TESTAPPS=ON \ -DLWS_IPV6=OFF \ -DLWS_WITH_BUNDLED_ZLIB=OFF \ -DLWS_WITH_SSL=ON \ -DLWS_WITH_HTTP2=ON \ -DCMAKE_BUILD_TYPE=Release # mips64 TARGET_MIPS64_LWS_OPTIONS = \ -DCMAKE_C_COMPILER=$(shell pwd)/$(TOOLCHAIN_MIPS64)/bin/$(TOOLCHAIN_MIPS64_PREFIX)-gcc \ -DCMAKE_AR=$(shell pwd)/$(TOOLCHAIN_MIPS64)/bin/$(TOOLCHAIN_MIPS64_PREFIX)-ar \ -DCMAKE_RANLIB=$(shell pwd)/$(TOOLCHAIN_MIPS64)/bin/$(TOOLCHAIN_MIPS64_PREFIX)-ranlib \ -DCMAKE_C_FLAGS="$$CFLAGS" \ -DLWS_WITH_SHARED=OFF \ -DLWS_WITH_STATIC=ON \ -DLWS_WITHOUT_DAEMONIZE=ON \ -DLWS_WITHOUT_TESTAPPS=ON \ -DLWS_IPV6=OFF \ -DLWS_WITH_BUNDLED_ZLIB=OFF \ -DLWS_WITH_SSL=ON \ -DLWS_WITH_HTTP2=ON \ -DCMAKE_BUILD_TYPE=Release # # Toolchain configuration # # The directory names for the different toolchains TOOLCHAIN_X86 := toolchains/x86 TOOLCHAIN_X86_64 := toolchains/x86_64 TOOLCHAIN_ARM := toolchains/arm TOOLCHAIN_ARM_V7A := toolchains/arm-v7a TOOLCHAIN_ARM_V7A_HARD := toolchains/arm-v7a-hard TOOLCHAIN_ARM64_V8A := toolchains/arm64-v8a TOOLCHAIN_MIPS := toolchains/mips TOOLCHAIN_MIPS64 := toolchains/mips64 # Use APP_STL to determine what STL to use. # ifeq ($(APP_STL),stlport_static) TOOLCHAIN_STL := stlport else ifeq ($(APP_STL),stlport_shared) TOOLCHAIN_STL := stlport else ifeq ($(APP_STL),gnustl_static) TOOLCHAIN_STL := gnustl else ifeq ($(APP_STL),gnustl_shared) TOOLCHAIN_STL := gnustl else ifeq ($(APP_STL),c++_static) TOOLCHAIN_STL := libc++ else ifeq ($(APP_STL),c++_shared) TOOLCHAIN_STL := libc++ endif # The settings to use for the individual toolchains: # x86 TOOLCHAIN_X86_API := $(TARGET_X86_NDK_API) TOOLCHAIN_X86_PREFIX := i686-linux-android TOOLCHAIN_X86_FLAGS := -march=i686 -msse3 -mstackrealign -mfpmath=sse TOOLCHAIN_X86_LINK := TOOLCHAIN_X86_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_X86)/sysroot/usr/include TOOLCHAIN_X86_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_X86)/sysroot/usr/lib # x86_64 TOOLCHAIN_X86_64_API := $(TARGET_X86_64_NDK_API) TOOLCHAIN_X86_64_PREFIX := x86_64-linux-android TOOLCHAIN_X86_64_FLAGS := TOOLCHAIN_X86_64_LINK := TOOLCHAIN_X86_64_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_X86_64)/sysroot/usr/include TOOLCHAIN_X86_64_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_X86_64)/sysroot/usr/lib # arm TOOLCHAIN_ARM_API := $(TARGET_ARM_NDK_API) TOOLCHAIN_ARM_PREFIX := arm-linux-androideabi TOOLCHAIN_ARM_FLAGS := -mthumb TOOLCHAIN_ARM_LINK := TOOLCHAIN_ARM_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_ARM)/sysroot/usr/include TOOLCHAIN_ARM_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_ARM)/sysroot/usr/lib # arm-v7a TOOLCHAIN_ARM_V7A_API := $(TARGET_ARM_V7A_NDK_API) TOOLCHAIN_ARM_V7A_PREFIX := arm-linux-androideabi TOOLCHAIN_ARM_V7A_FLAGS := -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 TOOLCHAIN_ARM_V7A_LINK := -march=armv7-a -Wl,--fix-cortex-a8 TOOLCHAIN_ARM_V7A_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_ARM_V7A)/sysroot/usr/include TOOLCHAIN_ARM_V7A_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_ARM_V7A)/sysroot/usr/lib # arm-v7a-hard TOOLCHAIN_ARM_V7A_HARD_API := $(TARGET_ARM_V7A_HARD_NDK_API) TOOLCHAIN_ARM_V7A_HARD_PREFIX := arm-linux-androideabi TOOLCHAIN_ARM_V7A_HARD_FLAGS := -march=armv7-a -mfpu=vfpv3-d16 -mhard-float -mfloat-abi=hard -D_NDK_MATH_NO_SOFTFP=1 TOOLCHAIN_ARM_V7A_HARD_LINK := -march=armv7-a -Wl,--fix-cortex-a8 -Wl,--no-warn-mismatch -lm_hard TOOLCHAIN_ARM_V7A_HARD_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)/sysroot/usr/include TOOLCHAIN_ARM_V7A_HARD_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)/sysroot/usr/lib # arm64-v8a TOOLCHAIN_ARM64_V8A_API := $(TARGET_ARM64_V8A_NDK_API) TOOLCHAIN_ARM64_V8A_PREFIX := aarch64-linux-android TOOLCHAIN_ARM64_V8A_FLAGS := TOOLCHAIN_ARM64_V8A_LINK := TOOLCHAIN_ARM64_V8A_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_ARM64_V8A)/sysroot/usr/include TOOLCHAIN_ARM64_V8A_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_ARM64_V8A)/sysroot/usr/lib # mips TOOLCHAIN_MIPS_API := $(TARGET_MIPS_NDK_API) TOOLCHAIN_MIPS_PREFIX := mipsel-linux-android TOOLCHAIN_MIPS_FLAGS := TOOLCHAIN_MIPS_LINK := TOOLCHAIN_MIPS_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_MIPS)/sysroot/usr/include TOOLCHAIN_MIPS_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_MIPS)/sysroot/usr/lib # mips64 TOOLCHAIN_MIPS64_API := $(TARGET_MIPS64_NDK_API) TOOLCHAIN_MIPS64_PREFIX := mips64el-linux-android TOOLCHAIN_MIPS64_FLAGS := TOOLCHAIN_MIPS64_LINK := TOOLCHAIN_MIPS64_PLATFORM_HEADERS := $(shell pwd)/$(TOOLCHAIN_MIPS64)/sysroot/usr/include TOOLCHAIN_MIPS64_PLATFORM_LIBS := $(shell pwd)/$(TOOLCHAIN_MIPS64)/sysroot/usr/lib # Environment variables to set while compiling for each ABI # x86 TOOLCHAIN_X86_ENV = \ ANDROID_DEV="$(shell pwd)/$(TOOLCHAIN_X86)/bin" \ CC=$(TOOLCHAIN_X86_PREFIX)-gcc \ CXX=$(TOOLCHAIN_X86_PREFIX)-g++ \ LINK=$(TOOLCHAIN_X86_PREFIX)-g++ \ LD=$(TOOLCHAIN_X86_PREFIX)-ld \ AR=$(TOOLCHAIN_X86_PREFIX)-ar \ RANLIB=$(TOOLCHAIN_X86_PREFIX)-ranlib \ STRIP=$(TOOLCHAIN_X86_PREFIX)-strip \ ARCH_FLAGS="$(TOOLCHAIN_X86_FLAGS)" \ ARCH_LINK="$(TOOLCHAIN_X86_LINK)" \ CPPFLAGS="-I. $(TOOLCHAIN_X86_FLAGS) -I$(TOOLCHAIN_X86_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \ CXXFLAGS="-I. $(TOOLCHAIN_X86_FLAGS) -I$(TOOLCHAIN_X86_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions" \ CFLAGS="-I. $(TOOLCHAIN_X86_FLAGS) -I$(TOOLCHAIN_X86_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \ LDFLAGS="$(TOOLCHAIN_X86_LINK)" \ PATH="$(shell pwd)/$(TOOLCHAIN_X86)/bin:$$PATH" # x86_64 TOOLCHAIN_X86_64_ENV = \ ANDROID_DEV="$(shell pwd)/$(TOOLCHAIN_X86_64)/bin" \ CC=$(TOOLCHAIN_X86_64_PREFIX)-gcc \ CXX=$(TOOLCHAIN_X86_64_PREFIX)-g++ \ LINK=$(TOOLCHAIN_X86_64_PREFIX)-g++ \ LD=$(TOOLCHAIN_X86_64_PREFIX)-ld \ AR=$(TOOLCHAIN_X86_64_PREFIX)-ar \ RANLIB=$(TOOLCHAIN_X86_64_PREFIX)-ranlib \ STRIP=$(TOOLCHAIN_X86_64_PREFIX)-strip \ ARCH_FLAGS="$(TOOLCHAIN_X86_64_FLAGS)" \ ARCH_LINK="$(TOOLCHAIN_X86_64_LINK)" \ CPPFLAGS="-I. $(TOOLCHAIN_X86_64_FLAGS) -I$(TOOLCHAIN_X86_64_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \ CXXFLAGS="-I. $(TOOLCHAIN_X86_64_FLAGS) -I$(TOOLCHAIN_X86_64_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions" \ CFLAGS="-I. $(TOOLCHAIN_X86_64_FLAGS) -I$(TOOLCHAIN_X86_64_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \ LDFLAGS="$(TOOLCHAIN_X86_64_LINK)" \ PATH="$(shell pwd)/$(TOOLCHAIN_X86_64)/bin:$$PATH" # arm TOOLCHAIN_ARM_ENV = \ ANDROID_DEV="$(shell pwd)/$(TOOLCHAIN_ARM)/bin" \ CC=$(TOOLCHAIN_ARM_PREFIX)-gcc \ CXX=$(TOOLCHAIN_ARM_PREFIX)-g++ \ LINK=$(TOOLCHAIN_ARM_PREFIX)-g++ \ LD=$(TOOLCHAIN_ARM_PREFIX)-ld \ AR=$(TOOLCHAIN_ARM_PREFIX)-ar \ RANLIB=$(TOOLCHAIN_ARM_PREFIX)-ranlib \ STRIP=$(TOOLCHAIN_ARM_PREFIX)-strip \ ARCH_FLAGS="$(TOOLCHAIN_ARM_FLAGS)" \ ARCH_LINK="$(TOOLCHAIN_ARM_LINK)" \ CPPFLAGS="-I. $(TOOLCHAIN_ARM_FLAGS) -I$(TOOLCHAIN_ARM_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \ CXXFLAGS="-I. $(TOOLCHAIN_ARM_FLAGS) -I$(TOOLCHAIN_ARM_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions" \ CFLAGS="-I. $(TOOLCHAIN_ARM_FLAGS) -I$(TOOLCHAIN_ARM_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \ LDFLAGS="$(TOOLCHAIN_ARM_LINK)" \ PATH="$(shell pwd)/$(TOOLCHAIN_ARM)/bin:$$PATH" # arm-v7a TOOLCHAIN_ARM_V7A_ENV = \ ANDROID_DEV="$(shell pwd)/$(TOOLCHAIN_ARM_V7A)/bin" \ CC=$(TOOLCHAIN_ARM_V7A_PREFIX)-gcc \ CXX=$(TOOLCHAIN_ARM_V7A_PREFIX)-g++ \ LINK=$(TOOLCHAIN_ARM_V7A_PREFIX)-g++ \ LD=$(TOOLCHAIN_ARM_V7A_PREFIX)-ld \ AR=$(TOOLCHAIN_ARM_V7A_PREFIX)-ar \ RANLIB=$(TOOLCHAIN_ARM_V7A_PREFIX)-ranlib \ STRIP=$(TOOLCHAIN_ARM_V7A_PREFIX)-strip \ ARCH_FLAGS="$(TOOLCHAIN_ARM_V7A_FLAGS)" \ ARCH_LINK="$(TOOLCHAIN_ARM_V7A_LINK)" \ CPPFLAGS="-I. $(TOOLCHAIN_ARM_V7A_FLAGS) -I$(TOOLCHAIN_ARM_V7A_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \ CXXFLAGS="-I. $(TOOLCHAIN_ARM_V7A_FLAGS) -I$(TOOLCHAIN_ARM_V7A_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions" \ CFLAGS="-I. $(TOOLCHAIN_ARM_V7A_FLAGS) -I$(TOOLCHAIN_ARM_V7A_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \ LDFLAGS="$(TOOLCHAIN_ARM_V7A_LINK)" \ PATH="$(shell pwd)/$(TOOLCHAIN_ARM_V7A)/bin:$$PATH" # arm-v7a-hard TOOLCHAIN_ARM_V7A_HARD_ENV = \ ANDROID_DEV="$(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)/bin" \ CC=$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-gcc \ CXX=$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-g++ \ LINK=$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-g++ \ LD=$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-ld \ AR=$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-ar \ RANLIB=$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-ranlib \ STRIP=$(TOOLCHAIN_ARM_V7A_HARD_PREFIX)-strip \ ARCH_FLAGS="$(TOOLCHAIN_ARM_V7A_HARD_FLAGS)" \ ARCH_LINK="$(TOOLCHAIN_ARM_V7A_HARD_LINK)" \ CPPFLAGS="-I. $(TOOLCHAIN_ARM_V7A_HARD_FLAGS) -I$(TOOLCHAIN_ARM_V7A_HARD_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \ CXXFLAGS="-I. $(TOOLCHAIN_ARM_V7A_HARD_FLAGS) -I$(TOOLCHAIN_ARM_V7A_HARD_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions" \ CFLAGS="-I. $(TOOLCHAIN_ARM_V7A_HARD_FLAGS) -I$(TOOLCHAIN_ARM_V7A_HARD_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \ LDFLAGS="$(TOOLCHAIN_ARM_V7A_HARD_LINK)" \ PATH="$(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD)/bin:$$PATH" # arm64-v8a TOOLCHAIN_ARM64_V8A_ENV = \ ANDROID_DEV="$(shell pwd)/$(TOOLCHAIN_ARM64_V8A)/bin" \ CC=$(TOOLCHAIN_ARM64_V8A_PREFIX)-gcc \ CXX=$(TOOLCHAIN_ARM64_V8A_PREFIX)-g++ \ LINK=$(TOOLCHAIN_ARM64_V8A_PREFIX)-g++ \ LD=$(TOOLCHAIN_ARM64_V8A_PREFIX)-ld \ AR=$(TOOLCHAIN_ARM64_V8A_PREFIX)-ar \ RANLIB=$(TOOLCHAIN_ARM64_V8A_PREFIX)-ranlib \ STRIP=$(TOOLCHAIN_ARM64_V8A_PREFIX)-strip \ ARCH_FLAGS="$(TOOLCHAIN_ARM64_V8A_FLAGS)" \ ARCH_LINK="$(TOOLCHAIN_ARM64_V8A_LINK)" \ CPPFLAGS="-I. $(TOOLCHAIN_ARM64_V8A_FLAGS) -I$(TOOLCHAIN_ARM64_V8A_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \ CXXFLAGS="-I. $(TOOLCHAIN_ARM64_V8A_FLAGS) -I$(TOOLCHAIN_ARM64_V8A_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions" \ CFLAGS="-I. $(TOOLCHAIN_ARM64_V8A_FLAGS) -I$(TOOLCHAIN_ARM64_V8A_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \ LDFLAGS="$(TOOLCHAIN_ARM64_V8A_LINK)" \ PATH="$(shell pwd)/$(TOOLCHAIN_ARM64_V8A)/bin:$$PATH" # mips TOOLCHAIN_MIPS_ENV = \ ANDROID_DEV="$(shell pwd)/$(TOOLCHAIN_MIPS)/bin" \ CC=$(TOOLCHAIN_MIPS_PREFIX)-gcc \ CXX=$(TOOLCHAIN_MIPS_PREFIX)-g++ \ LINK=$(TOOLCHAIN_MIPS_PREFIX)-g++ \ LD=$(TOOLCHAIN_MIPS_PREFIX)-ld \ AR=$(TOOLCHAIN_MIPS_PREFIX)-ar \ RANLIB=$(TOOLCHAIN_MIPS_PREFIX)-ranlib \ STRIP=$(TOOLCHAIN_MIPS_PREFIX)-strip \ ARCH_FLAGS="$(TOOLCHAIN_MIPS_FLAGS)" \ ARCH_LINK="$(TOOLCHAIN_MIPS_LINK)" \ CPPFLAGS="-I. $(TOOLCHAIN_MIPS_FLAGS) -I$(TOOLCHAIN_MIPS_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \ CXXFLAGS="-I. $(TOOLCHAIN_MIPS_FLAGS) -I$(TOOLCHAIN_MIPS_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions" \ CFLAGS="-I. $(TOOLCHAIN_MIPS_FLAGS) -I$(TOOLCHAIN_MIPS_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \ LDFLAGS="$(TOOLCHAIN_MIPS_LINK)" \ PATH="$(shell pwd)/$(TOOLCHAIN_MIPS)/bin:$$PATH" # mips64 TOOLCHAIN_MIPS64_ENV = \ ANDROID_DEV="$(shell pwd)/$(TOOLCHAIN_MIPS64)/bin" \ CC=$(TOOLCHAIN_MIPS64_PREFIX)-gcc \ CXX=$(TOOLCHAIN_MIPS64_PREFIX)-g++ \ LINK=$(TOOLCHAIN_MIPS64_PREFIX)-g++ \ LD=$(TOOLCHAIN_MIPS64_PREFIX)-ld \ AR=$(TOOLCHAIN_MIPS64_PREFIX)-ar \ RANLIB=$(TOOLCHAIN_MIPS64_PREFIX)-ranlib \ STRIP=$(TOOLCHAIN_MIPS64_PREFIX)-strip \ ARCH_FLAGS="$(TOOLCHAIN_MIPS64_FLAGS)" \ ARCH_LINK="$(TOOLCHAIN_MIPS64_LINK)" \ CPPFLAGS="-I. $(TOOLCHAIN_MIPS64_FLAGS) -I$(TOOLCHAIN_MIPS64_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \ CXXFLAGS="-I. $(TOOLCHAIN_MIPS64_FLAGS) -I$(TOOLCHAIN_MIPS64_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions" \ CFLAGS="-I. $(TOOLCHAIN_MIPS64_FLAGS) -I$(TOOLCHAIN_MIPS64_PLATFORM_HEADERS) -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" \ LDFLAGS="$(TOOLCHAIN_MIPS64_LINK)" \ PATH="$(shell pwd)/$(TOOLCHAIN_MIPS64)/bin:$$PATH" # # All the external tools we use in this Makefile # AWK := awk CD := cd CMAKE := cmake ECHO := echo EGREP := egrep GIT := git LN := ln MKDIR := mkdir RM := rm SORT := sort TAR := tar WGET := wget # # End of user configurable options. # .PHONY: \ all \ all-x86 \ all-x86_64 \ all-armeabi \ all-armeabi-v7a \ all-armeabi-v7a-hard \ all-arm64-v8a \ all-mips \ all-mips64 \ common \ sources \ toolchains \ toolchain-x86 \ toolchain-x86_64 \ toolchain-armeabi \ toolchain-armeabi-v7a \ toolchain-armeabi-v7a-hard \ toolchain-arm64-v8a \ toolchain-mips \ toolchain-mips64 \ zlib \ zlib-x86 \ zlib-x86_64 \ zlib-armeabi \ zlib-armeabi-v7a \ zlib-armeabi-v7a-hard \ zlib-arm64-v8a \ zlib-mips \ zlib-mips64 \ openssl \ openssl-x86 \ openssl-x86_64 \ openssl-armeabi \ openssl-armeabi-v7a \ openssl-armeabi-v7a-hard \ openssl-arm64-v8a \ openssl-mips \ openssl-mips64 \ libwebsockets \ libwebsockets-x86 \ libwebsockets-x86_64 \ libwebsockets-armeabi \ libwebsockets-armeabi-v7a \ libwebsockets-armeabi-v7a-hard \ libwebsockets-arm64-v8a \ libwebsockets-mips \ libwebsockets-mips64 \ clean-ndk \ clean \ dist-clean \ clean-targets \ clean-target-x86 \ clean-target-x86_64 \ clean-target-armeabi \ clean-target-armeabi-v7a \ clean-target-armeabi-v7a-hard \ clean-target-arm64-v8a \ clean-target-mips \ clean-target-mips64 \ clean-sources \ clean-source-zlib \ clean-source-openssl \ clean-source-libwebsockets \ clean-toolchains \ clean-toolchain-x86 \ clean-toolchain-x86_64 \ clean-toolchain-armeabi \ clean-toolchain-armeabi-v7a \ clean-toolchain-armeabi-v7a-hard \ clean-toolchain-arm64-v8a \ clean-toolchain-mips \ clean-toolchain-mips64 \ list-targets # Default rule: build the libraries for all ABIs defined in NDK_APP_ABI then run ndk-build all: $(NDK_APP_ABI) $(NDK_ROOT)/ndk-build clean $(NDK_ROOT)/ndk-build # Libraries may also be build per ABI all-x86: $(TARGET_X86) all-x86_64: $(TARGET_X86_64) all-armeabi: $(TARGET_ARM) all-armeabi-v7a: $(TARGET_ARM_V7A) all-armeabi-v7a-hard: $(TARGET_ARM_V7A_HARD) all-arm64-v8a: $(TARGET_ARM64_V8A) all-mips: $(TARGET_MIPS) all-mips64: $(TARGET_MIPS64) # Common rule all targets depend on common: ../jniLibs # These rules are called from Android.mk when executing ndk-build $(TARGET_X86): common zlib-x86 openssl-x86 libwebsockets-x86 $(TARGET_X86_64): common zlib-x86_64 openssl-x86_64 libwebsockets-x86_64 $(TARGET_ARM): common zlib-armeabi openssl-armeabi libwebsockets-armeabi $(TARGET_ARM_V7A): common zlib-armeabi-v7a openssl-armeabi-v7a libwebsockets-armeabi-v7a $(TARGET_ARM_V7A_HARD): common zlib-armeabi-v7a-hard openssl-armeabi-v7a-hard libwebsockets-armeabi-v7a-hard $(TARGET_ARM64_V8A): common zlib-arm64-v8a openssl-arm64-v8a libwebsockets-arm64-v8a $(TARGET_MIPS): common zlib-mips openssl-mips libwebsockets-mips $(TARGET_MIPS64): common zlib-mips64 openssl-mips64 libwebsockets-mips64 # # A rule to ensure ../jniLibs points to ../libs # (ndk-build creates ../libs but Gradle looks for ../jniLibs) # ../libs: $(MKDIR) ../libs ../jniLibs: ../libs $(CD) .. && $(LN) -s libs jniLibs # # Some rules to download the sources # sources: $(ZLIB_TGZ_SOURCE) $(OPENSSL_TGZ_SOURCE) $(LIBWEBSOCKETS_TGZ_SOURCE) $(ZLIB_TGZ_SOURCE): $(WGET) -q $(ZLIB_TGZ_URL) $(OPENSSL_TGZ_SOURCE): $(WGET) -q $(OPENSSL_TGZ_URL) $(LIBWEBSOCKETS_TGZ_SOURCE): if [ -d $(LIBWEBSOCKETS_DIR) ]; then $(RM) -fr $(LIBWEBSOCKETS_DIR); fi $(GIT) clone $(LIBWEBSOCKETS_GIT_URL) $(TAR) caf $(LIBWEBSOCKETS_TGZ_SOURCE) $(LIBWEBSOCKETS_DIR) $(RM) -fR $(LIBWEBSOCKETS_DIR) # # Some rules to install the required toolchains # toolchains: \ toolchain-x86 \ toolchain-x86_64 \ toolchain-armeabi \ toolchain-armeabi-v7a \ toolchain-armeabi-v7a-hard \ toolchain-arm64-v8a \ toolchain-mips \ toolchain-mips64 toolchain-x86: $(TOOLCHAIN_X86) toolchain-x86_64: $(TOOLCHAIN_X86_64) toolchain-armeabi: $(TOOLCHAIN_ARM) toolchain-armeabi-v7a: $(TOOLCHAIN_ARM_V7A) toolchain-armeabi-v7a-hard: $(TOOLCHAIN_ARM_V7A_HARD) toolchain-arm64-v8a: $(TOOLCHAIN_ARM64_V8A) toolchain-mips: $(TOOLCHAIN_MIPS) toolchain-mips64: $(TOOLCHAIN_MIPS64) $(TOOLCHAIN_X86): ifneq ($(TOOLCHAIN_STL),) $(NDK_MAKE_TOOLCHAIN) \ --stl $(TOOLCHAIN_STL) \ --api $(TOOLCHAIN_X86_API) \ --arch x86 \ --install-dir $(shell pwd)/$(TOOLCHAIN_X86) else $(NDK_MAKE_TOOLCHAIN) \ --api $(TOOLCHAIN_X86_API) \ --arch x86 \ --install-dir $(shell pwd)/$(TOOLCHAIN_X86) endif $(TOOLCHAIN_X86_64): ifneq ($(TOOLCHAIN_STL),) $(NDK_MAKE_TOOLCHAIN) \ --stl $(TOOLCHAIN_STL) \ --api $(TOOLCHAIN_X86_64_API) \ --arch x86_64 \ --install-dir $(shell pwd)/$(TOOLCHAIN_X86_64) else $(NDK_MAKE_TOOLCHAIN) \ --api $(TOOLCHAIN_X86_64_API) \ --arch x86_64 \ --install-dir $(shell pwd)/$(TOOLCHAIN_X86_64) endif $(TOOLCHAIN_ARM): ifneq ($(TOOLCHAIN_STL),) $(NDK_MAKE_TOOLCHAIN) \ --stl $(TOOLCHAIN_STL) \ --api $(TOOLCHAIN_ARM_API) \ --arch arm \ --install-dir $(shell pwd)/$(TOOLCHAIN_ARM) else $(NDK_MAKE_TOOLCHAIN) \ --api $(TOOLCHAIN_ARM_API) \ --arch arm \ --install-dir $(shell pwd)/$(TOOLCHAIN_ARM) endif $(TOOLCHAIN_ARM_V7A): ifneq ($(TOOLCHAIN_STL),) $(NDK_MAKE_TOOLCHAIN) \ --stl $(TOOLCHAIN_STL) \ --api $(TOOLCHAIN_ARM_V7A_API) \ --arch arm \ --install-dir $(shell pwd)/$(TOOLCHAIN_ARM_V7A) else $(NDK_MAKE_TOOLCHAIN) \ --api $(TOOLCHAIN_ARM_V7A_API) \ --arch arm \ --install-dir $(shell pwd)/$(TOOLCHAIN_ARM_V7A) endif $(TOOLCHAIN_ARM_V7A_HARD): ifneq ($(TOOLCHAIN_STL),) $(NDK_MAKE_TOOLCHAIN) \ --stl $(TOOLCHAIN_STL) \ --api $(TOOLCHAIN_ARM_V7A_HARD_API) \ --arch arm \ --install-dir $(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD) else $(NDK_MAKE_TOOLCHAIN) \ --api $(TOOLCHAIN_ARM_V7A_HARD_API) \ --arch arm \ --install-dir $(shell pwd)/$(TOOLCHAIN_ARM_V7A_HARD) endif $(TOOLCHAIN_ARM64_V8A): ifneq ($(TOOLCHAIN_STL),) $(NDK_MAKE_TOOLCHAIN) \ --stl $(TOOLCHAIN_STL) \ --api $(TOOLCHAIN_ARM64_V8A_API) \ --arch arm64 \ --install-dir $(shell pwd)/$(TOOLCHAIN_ARM64_V8A) else $(NDK_MAKE_TOOLCHAIN) \ --api $(TOOLCHAIN_ARM64_V8A_API) \ --arch arm64 \ --install-dir $(shell pwd)/$(TOOLCHAIN_ARM64_V8A) endif $(TOOLCHAIN_MIPS): ifneq ($(TOOLCHAIN_STL),) $(NDK_MAKE_TOOLCHAIN) \ --stl $(TOOLCHAIN_STL) \ --api $(TOOLCHAIN_MIPS_API) \ --arch mips \ --install-dir $(shell pwd)/$(TOOLCHAIN_MIPS) else $(NDK_MAKE_TOOLCHAIN) \ --api $(TOOLCHAIN_MIPS_API) \ --arch mips \ --install-dir $(shell pwd)/$(TOOLCHAIN_MIPS) endif $(TOOLCHAIN_MIPS64): ifneq ($(TOOLCHAIN_STL),) $(NDK_MAKE_TOOLCHAIN) \ --stl $(TOOLCHAIN_STL) \ --api $(TOOLCHAIN_MIPS64_API) \ --arch mips64 \ --install-dir $(shell pwd)/$(TOOLCHAIN_MIPS64) else $(NDK_MAKE_TOOLCHAIN) \ --api $(TOOLCHAIN_MIPS64_API) \ --arch mips64 \ --install-dir $(shell pwd)/$(TOOLCHAIN_MIPS64) endif # # Rules to build zlib # zlib: \ zlib-x86 \ zlib-x86_64 \ zlib-armeabi \ zlib-armeabi-v7a \ zlib-armeabi-v7a-hard \ zlib-arm64-v8a \ zlib-mips \ zlib-mips64 zlib-x86: $(TARGET_X86)/lib/libz.a zlib-x86_64: $(TARGET_X86_64)/lib/libz.a zlib-armeabi: $(TARGET_ARM)/lib/libz.a zlib-armeabi-v7a: $(TARGET_ARM_V7A)/lib/libz.a zlib-armeabi-v7a-hard: $(TARGET_ARM_V7A_HARD)/lib/libz.a zlib-arm64-v8a: $(TARGET_ARM64_V8A)/lib/libz.a zlib-mips: $(TARGET_MIPS)/lib/libz.a zlib-mips64: $(TARGET_MIPS64)/lib/libz.a # Extracting/configuring sources $(TARGET_X86)/src/$(ZLIB_DIR): $(ZLIB_TGZ_SOURCE) $(TOOLCHAIN_X86) -$(MKDIR) -p $(TARGET_X86)/src $(TAR) xf $(ZLIB_TGZ_SOURCE) -C $(TARGET_X86)/src $(CD) $(TARGET_X86)/src/$(ZLIB_DIR) && $(TOOLCHAIN_X86_ENV) \ ./configure --static --prefix=$(shell pwd)/$(TARGET_X86) $(TARGET_X86_64)/src/$(ZLIB_DIR): $(ZLIB_TGZ_SOURCE) $(TOOLCHAIN_X86_64) -$(MKDIR) -p $(TARGET_X86_64)/src $(TAR) xf $(ZLIB_TGZ_SOURCE) -C $(TARGET_X86_64)/src $(CD) $(TARGET_X86_64)/src/$(ZLIB_DIR) && $(TOOLCHAIN_X86_64_ENV) \ ./configure --static --prefix=$(shell pwd)/$(TARGET_X86_64) $(TARGET_ARM)/src/$(ZLIB_DIR): $(ZLIB_TGZ_SOURCE) $(TOOLCHAIN_ARM) -$(MKDIR) -p $(TARGET_ARM)/src $(TAR) xf $(ZLIB_TGZ_SOURCE) -C $(TARGET_ARM)/src $(CD) $(TARGET_ARM)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_ENV) \ ./configure --static --prefix=$(shell pwd)/$(TARGET_ARM) $(TARGET_ARM_V7A)/src/$(ZLIB_DIR): $(ZLIB_TGZ_SOURCE) $(TOOLCHAIN_ARM_V7A) -$(MKDIR) -p $(TARGET_ARM_V7A)/src $(TAR) xf $(ZLIB_TGZ_SOURCE) -C $(TARGET_ARM_V7A)/src $(CD) $(TARGET_ARM_V7A)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_V7A_ENV) \ ./configure --static --prefix=$(shell pwd)/$(TARGET_ARM_V7A) $(TARGET_ARM_V7A_HARD)/src/$(ZLIB_DIR): $(ZLIB_TGZ_SOURCE) $(TOOLCHAIN_ARM_V7A_HARD) -$(MKDIR) -p $(TARGET_ARM_V7A_HARD)/src $(TAR) xf $(ZLIB_TGZ_SOURCE) -C $(TARGET_ARM_V7A_HARD)/src $(CD) $(TARGET_ARM_V7A_HARD)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_V7A_HARD_ENV) \ ./configure --static --prefix=$(shell pwd)/$(TARGET_ARM_V7A_HARD) $(TARGET_ARM64_V8A)/src/$(ZLIB_DIR): $(ZLIB_TGZ_SOURCE) $(TOOLCHAIN_ARM64_V8A) -$(MKDIR) -p $(TARGET_ARM64_V8A)/src $(TAR) xf $(ZLIB_TGZ_SOURCE) -C $(TARGET_ARM64_V8A)/src $(CD) $(TARGET_ARM64_V8A)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM64_V8A_ENV) \ ./configure --static --prefix=$(shell pwd)/$(TARGET_ARM64_V8A) $(TARGET_MIPS)/src/$(ZLIB_DIR): $(ZLIB_TGZ_SOURCE) $(TOOLCHAIN_MIPS) -$(MKDIR) -p $(TARGET_MIPS)/src $(TAR) xf $(ZLIB_TGZ_SOURCE) -C $(TARGET_MIPS)/src $(CD) $(TARGET_MIPS)/src/$(ZLIB_DIR) && $(TOOLCHAIN_MIPS_ENV) \ ./configure --static --prefix=$(shell pwd)/$(TARGET_MIPS) $(TARGET_MIPS64)/src/$(ZLIB_DIR): $(ZLIB_TGZ_SOURCE) $(TOOLCHAIN_MIPS64) -$(MKDIR) -p $(TARGET_MIPS64)/src $(TAR) xf $(ZLIB_TGZ_SOURCE) -C $(TARGET_MIPS64)/src $(CD) $(TARGET_MIPS64)/src/$(ZLIB_DIR) && $(TOOLCHAIN_MIPS64_ENV) \ ./configure --static --prefix=$(shell pwd)/$(TARGET_MIPS64) # Build/install library $(TARGET_X86)/lib/libz.a: $(TARGET_X86)/src/$(ZLIB_DIR) $(CD) $(TARGET_X86)/src/$(ZLIB_DIR) && $(TOOLCHAIN_X86_ENV) $(MAKE) libz.a $(CD) $(TARGET_X86)/src/$(ZLIB_DIR) && $(TOOLCHAIN_X86_ENV) $(MAKE) install $(TARGET_X86_64)/lib/libz.a: $(TARGET_X86_64)/src/$(ZLIB_DIR) $(CD) $(TARGET_X86_64)/src/$(ZLIB_DIR) && $(TOOLCHAIN_X86_64_ENV) $(MAKE) libz.a $(CD) $(TARGET_X86_64)/src/$(ZLIB_DIR) && $(TOOLCHAIN_X86_64_ENV) $(MAKE) install $(TARGET_ARM)/lib/libz.a: $(TARGET_ARM)/src/$(ZLIB_DIR) $(CD) $(TARGET_ARM)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_ENV) $(MAKE) libz.a $(CD) $(TARGET_ARM)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_ENV) $(MAKE) install $(TARGET_ARM_V7A)/lib/libz.a: $(TARGET_ARM_V7A)/src/$(ZLIB_DIR) $(CD) $(TARGET_ARM_V7A)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_V7A_ENV) $(MAKE) libz.a $(CD) $(TARGET_ARM_V7A)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_V7A_ENV) $(MAKE) install $(TARGET_ARM_V7A_HARD)/lib/libz.a: $(TARGET_ARM_V7A_HARD)/src/$(ZLIB_DIR) $(CD) $(TARGET_ARM_V7A_HARD)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_V7A_HARD_ENV) $(MAKE) libz.a $(CD) $(TARGET_ARM_V7A_HARD)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM_V7A_HARD_ENV) $(MAKE) install $(TARGET_ARM64_V8A)/lib/libz.a: $(TARGET_ARM64_V8A)/src/$(ZLIB_DIR) $(CD) $(TARGET_ARM64_V8A)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM64_V8A_ENV) $(MAKE) libz.a $(CD) $(TARGET_ARM64_V8A)/src/$(ZLIB_DIR) && $(TOOLCHAIN_ARM64_V8A_ENV) $(MAKE) install $(TARGET_MIPS)/lib/libz.a: $(TARGET_MIPS)/src/$(ZLIB_DIR) $(CD) $(TARGET_MIPS)/src/$(ZLIB_DIR) && $(TOOLCHAIN_MIPS_ENV) $(MAKE) libz.a $(CD) $(TARGET_MIPS)/src/$(ZLIB_DIR) && $(TOOLCHAIN_MIPS_ENV) $(MAKE) install $(TARGET_MIPS64)/lib/libz.a: $(TARGET_MIPS64)/src/$(ZLIB_DIR) $(CD) $(TARGET_MIPS64)/src/$(ZLIB_DIR) && $(TOOLCHAIN_MIPS64_ENV) $(MAKE) libz.a $(CD) $(TARGET_MIPS64)/src/$(ZLIB_DIR) && $(TOOLCHAIN_MIPS64_ENV) $(MAKE) install # # Rules to build OpenSSL # openssl: \ openssl-x86 \ openssl-x86_64 \ openssl-armeabi \ openssl-armeabi-v7a \ openssl-armeabi-v7a-hard \ openssl-arm64-v8a \ openssl-mips \ openssl-mips64 openssl-x86: $(TARGET_X86)/lib/libssl.a openssl-x86_64: $(TARGET_X86_64)/lib/libssl.a openssl-armeabi: $(TARGET_ARM)/lib/libssl.a openssl-armeabi-v7a: $(TARGET_ARM_V7A)/lib/libssl.a openssl-armeabi-v7a-hard: $(TARGET_ARM_V7A_HARD)/lib/libssl.a openssl-arm64-v8a: $(TARGET_ARM64_V8A)/lib/libssl.a openssl-mips: $(TARGET_MIPS)/lib/libssl.a openssl-mips64: $(TARGET_MIPS64)/lib/libssl.a # Extracting/configuring sources $(TARGET_X86)/src/$(OPENSSL_DIR): $(OPENSSL_TGZ_SOURCE) $(TOOLCHAIN_X86) -$(MKDIR) -p $(TARGET_X86)/src $(TAR) xf $(OPENSSL_TGZ_SOURCE) -C $(TARGET_X86)/src $(CD) $(TARGET_X86)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_X86_ENV) \ ./Configure $(TARGET_X86_OPENSSL_CONFIG_TARGET) \ --prefix=$(shell pwd)/$(TARGET_X86) \ --openssldir=$(shell pwd)/$(TARGET_X86)/lib/ssl \ $(TARGET_X86_OPENSSL_CONFIG) $(TARGET_X86_64)/src/$(OPENSSL_DIR): $(OPENSSL_TGZ_SOURCE) $(TOOLCHAIN_X86_64) -$(MKDIR) -p $(TARGET_X86_64)/src $(TAR) xf $(OPENSSL_TGZ_SOURCE) -C $(TARGET_X86_64)/src $(CD) $(TARGET_X86_64)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_X86_64_ENV) \ ./Configure $(TARGET_X86_64_OPENSSL_CONFIG_TARGET) \ --prefix=$(shell pwd)/$(TARGET_X86_64) \ --openssldir=$(shell pwd)/$(TARGET_X86_64)/lib/ssl \ $(TARGET_X86_64_OPENSSL_CONFIG) $(TARGET_ARM)/src/$(OPENSSL_DIR): $(OPENSSL_TGZ_SOURCE) $(TOOLCHAIN_ARM) -$(MKDIR) -p $(TARGET_ARM)/src $(TAR) xf $(OPENSSL_TGZ_SOURCE) -C $(TARGET_ARM)/src $(CD) $(TARGET_ARM)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_ENV) \ ./Configure $(TARGET_ARM_OPENSSL_CONFIG_TARGET) \ --prefix=$(shell pwd)/$(TARGET_ARM) \ --openssldir=$(shell pwd)/$(TARGET_ARM)/lib/ssl \ $(TARGET_ARM_OPENSSL_CONFIG) $(TARGET_ARM_V7A)/src/$(OPENSSL_DIR): $(OPENSSL_TGZ_SOURCE) $(TOOLCHAIN_ARM_V7A) -$(MKDIR) -p $(TARGET_ARM_V7A)/src $(TAR) xf $(OPENSSL_TGZ_SOURCE) -C $(TARGET_ARM_V7A)/src $(CD) $(TARGET_ARM_V7A)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_V7A_ENV) \ ./Configure $(TARGET_ARM_V7A_OPENSSL_CONFIG_TARGET) \ --prefix=$(shell pwd)/$(TARGET_ARM_V7A) \ --openssldir=$(shell pwd)/$(TARGET_ARM_V7A)/lib/ssl \ $(TARGET_ARM_V7A_OPENSSL_CONFIG) $(TARGET_ARM_V7A_HARD)/src/$(OPENSSL_DIR): $(OPENSSL_TGZ_SOURCE) $(TOOLCHAIN_ARM_V7A_HARD) -$(MKDIR) -p $(TARGET_ARM_V7A_HARD)/src $(TAR) xf $(OPENSSL_TGZ_SOURCE) -C $(TARGET_ARM_V7A_HARD)/src $(CD) $(TARGET_ARM_V7A_HARD)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_V7A_HARD_ENV) \ ./Configure $(TARGET_ARM_V7A_HARD_OPENSSL_CONFIG_TARGET) \ --prefix=$(shell pwd)/$(TARGET_ARM_V7A_HARD) \ --openssldir=$(shell pwd)/$(TARGET_ARM_V7A_HARD)/lib/ssl \ $(TARGET_ARM_V7A_HARD_OPENSSL_CONFIG) $(TARGET_ARM64_V8A)/src/$(OPENSSL_DIR): $(OPENSSL_TGZ_SOURCE) $(TOOLCHAIN_ARM64_V8A) -$(MKDIR) -p $(TARGET_ARM64_V8A)/src $(TAR) xf $(OPENSSL_TGZ_SOURCE) -C $(TARGET_ARM64_V8A)/src $(CD) $(TARGET_ARM64_V8A)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM64_V8A_ENV) \ ./Configure $(TARGET_ARM64_V8A_OPENSSL_CONFIG_TARGET) \ --prefix=$(shell pwd)/$(TARGET_ARM64_V8A) \ --openssldir=$(shell pwd)/$(TARGET_ARM64_V8A)/lib/ssl \ $(TARGET_ARM64_V8A_OPENSSL_CONFIG) $(TARGET_MIPS)/src/$(OPENSSL_DIR): $(OPENSSL_TGZ_SOURCE) $(TOOLCHAIN_MIPS) -$(MKDIR) -p $(TARGET_MIPS)/src $(TAR) xf $(OPENSSL_TGZ_SOURCE) -C $(TARGET_MIPS)/src $(CD) $(TARGET_MIPS)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_MIPS_ENV) \ ./Configure $(TARGET_MIPS_OPENSSL_CONFIG_TARGET) \ --prefix=$(shell pwd)/$(TARGET_MIPS) \ --openssldir=$(shell pwd)/$(TARGET_MIPS)/lib/ssl \ $(TARGET_MIPS_OPENSSL_CONFIG) $(TARGET_MIPS64)/src/$(OPENSSL_DIR): $(OPENSSL_TGZ_SOURCE) $(TOOLCHAIN_MIPS64) -$(MKDIR) -p $(TARGET_MIPS64)/src $(TAR) xf $(OPENSSL_TGZ_SOURCE) -C $(TARGET_MIPS64)/src $(CD) $(TARGET_MIPS64)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_MIPS64_ENV) \ ./Configure $(TARGET_MIPS64_OPENSSL_CONFIG_TARGET) \ --prefix=$(shell pwd)/$(TARGET_MIPS64) \ --openssldir=$(shell pwd)/$(TARGET_MIPS64)/lib/ssl \ $(TARGET_MIPS64_OPENSSL_CONFIG) # Build/install library $(TARGET_X86)/lib/libssl.a: $(TARGET_X86)/src/$(OPENSSL_DIR) $(CD) $(TARGET_X86)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_X86_ENV) $(MAKE) depend $(CD) $(TARGET_X86)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_X86_ENV) $(MAKE) build_libs $(CD) $(TARGET_X86)/src/$(OPENSSL_DIR) && $(ECHO) '#!/bin/sh\n\nfalse\n' > apps/openssl $(CD) $(TARGET_X86)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_X86_ENV) $(MAKE) install_sw $(TARGET_X86_64)/lib/libssl.a: $(TARGET_X86_64)/src/$(OPENSSL_DIR) $(CD) $(TARGET_X86_64)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_X86_64_ENV) $(MAKE) depend $(CD) $(TARGET_X86_64)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_X86_64_ENV) $(MAKE) build_libs $(CD) $(TARGET_X86_64)/src/$(OPENSSL_DIR) && $(ECHO) '#!/bin/sh\n\nfalse\n' > apps/openssl $(CD) $(TARGET_X86_64)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_X86_64_ENV) $(MAKE) install_sw $(TARGET_ARM)/lib/libssl.a: $(TARGET_ARM)/src/$(OPENSSL_DIR) $(CD) $(TARGET_ARM)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_ENV) $(MAKE) depend $(CD) $(TARGET_ARM)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_ENV) $(MAKE) build_libs $(CD) $(TARGET_ARM)/src/$(OPENSSL_DIR) && $(ECHO) '#!/bin/sh\n\nfalse\n' > apps/openssl $(CD) $(TARGET_ARM)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_ENV) $(MAKE) install_sw $(TARGET_ARM_V7A)/lib/libssl.a: $(TARGET_ARM_V7A)/src/$(OPENSSL_DIR) $(CD) $(TARGET_ARM_V7A)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_V7A_ENV) $(MAKE) depend $(CD) $(TARGET_ARM_V7A)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_V7A_ENV) $(MAKE) build_libs $(CD) $(TARGET_ARM_V7A)/src/$(OPENSSL_DIR) && $(ECHO) '#!/bin/sh\n\nfalse\n' > apps/openssl $(CD) $(TARGET_ARM_V7A)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_V7A_ENV) $(MAKE) install_sw $(TARGET_ARM_V7A_HARD)/lib/libssl.a: $(TARGET_ARM_V7A_HARD)/src/$(OPENSSL_DIR) $(CD) $(TARGET_ARM_V7A_HARD)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_V7A_HARD_ENV) $(MAKE) depend $(CD) $(TARGET_ARM_V7A_HARD)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_V7A_HARD_ENV) $(MAKE) build_libs $(CD) $(TARGET_ARM_V7A_HARD)/src/$(OPENSSL_DIR) && $(ECHO) '#!/bin/sh\n\nfalse\n' > apps/openssl $(CD) $(TARGET_ARM_V7A_HARD)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM_V7A_HARD_ENV) $(MAKE) install_sw $(TARGET_ARM64_V8A)/lib/libssl.a: $(TARGET_ARM64_V8A)/src/$(OPENSSL_DIR) $(CD) $(TARGET_ARM64_V8A)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM64_V8A_ENV) $(MAKE) depend $(CD) $(TARGET_ARM64_V8A)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM64_V8A_ENV) $(MAKE) build_libs $(CD) $(TARGET_ARM64_V8A)/src/$(OPENSSL_DIR) && $(ECHO) '#!/bin/sh\n\nfalse\n' > apps/openssl $(CD) $(TARGET_ARM64_V8A)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_ARM64_V8A_ENV) $(MAKE) install_sw $(TARGET_MIPS)/lib/libssl.a: $(TARGET_MIPS)/src/$(OPENSSL_DIR) $(CD) $(TARGET_MIPS)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_MIPS_ENV) $(MAKE) depend $(CD) $(TARGET_MIPS)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_MIPS_ENV) $(MAKE) build_libs $(CD) $(TARGET_MIPS)/src/$(OPENSSL_DIR) && $(ECHO) '#!/bin/sh\n\nfalse\n' > apps/openssl $(CD) $(TARGET_MIPS)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_MIPS_ENV) $(MAKE) install_sw $(TARGET_MIPS64)/lib/libssl.a: $(TARGET_MIPS64)/src/$(OPENSSL_DIR) $(CD) $(TARGET_MIPS64)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_MIPS64_ENV) $(MAKE) depend $(CD) $(TARGET_MIPS64)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_MIPS64_ENV) $(MAKE) build_libs $(CD) $(TARGET_MIPS64)/src/$(OPENSSL_DIR) && $(ECHO) '#!/bin/sh\n\nfalse\n' > apps/openssl $(CD) $(TARGET_MIPS64)/src/$(OPENSSL_DIR) && $(TOOLCHAIN_MIPS64_ENV) $(MAKE) install_sw # # Rules to build libwebsockets # libwebsockets: \ libwebsockets-x86 \ libwebsockets-x86_64 \ libwebsockets-armeabi \ libwebsockets-armeabi-v7a \ libwebsockets-armeabi-v7a-hard \ libwebsockets-arm64-v8a \ libwebsockets-mips \ libwebsockets-mips64 \ libwebsockets-x86: $(TARGET_X86)/lib/libwebsockets.a libwebsockets-x86_64: $(TARGET_X86_64)/lib/libwebsockets.a libwebsockets-armeabi: $(TARGET_ARM)/lib/libwebsockets.a libwebsockets-armeabi-v7a: $(TARGET_ARM_V7A)/lib/libwebsockets.a libwebsockets-armeabi-v7a-hard: $(TARGET_ARM_V7A_HARD)/lib/libwebsockets.a libwebsockets-arm64-v8a: $(TARGET_ARM64_V8A)/lib/libwebsockets.a libwebsockets-mips: $(TARGET_MIPS)/lib/libwebsockets.a libwebsockets-mips64: $(TARGET_MIPS64)/lib/libwebsockets.a # Extracting/configuring sources $(TARGET_X86)/src/$(LIBWEBSOCKETS_DIR): $(LIBWEBSOCKETS_TGZ_SOURCE) $(TOOLCHAIN_X86) $(TARGET_X86)/lib/libssl.a $(TARGET_X86)/lib/libz.a -$(MKDIR) -p $(TARGET_X86)/src $(TAR) xf $(LIBWEBSOCKETS_TGZ_SOURCE) -C $(TARGET_X86)/src -$(MKDIR) -p $(TARGET_X86)/src/$(LIBWEBSOCKETS_DIR)/build $(CD) $(TARGET_X86)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_X86_ENV) \ $(CMAKE) $(TARGET_X86_LWS_OPTIONS) \ -DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(TARGET_X86) \ -DLWS_OPENSSL_LIBRARIES="$(shell pwd)/$(TARGET_X86)/lib/libssl.a;$(shell pwd)/$(TARGET_X86)/lib/libcrypto.a" \ -DLWS_OPENSSL_INCLUDE_DIRS="$(shell pwd)/$(TARGET_X86)/include" \ .. $(TARGET_X86_64)/src/$(LIBWEBSOCKETS_DIR): $(LIBWEBSOCKETS_TGZ_SOURCE) $(TOOLCHAIN_X86_64) $(TARGET_X86_64)/lib/libssl.a $(TARGET_X86_64)/lib/libz.a -$(MKDIR) -p $(TARGET_X86_64)/src $(TAR) xf $(LIBWEBSOCKETS_TGZ_SOURCE) -C $(TARGET_X86_64)/src -$(MKDIR) -p $(TARGET_X86_64)/src/$(LIBWEBSOCKETS_DIR)/build $(CD) $(TARGET_X86_64)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_X86_64_ENV) \ $(CMAKE) $(TARGET_X86_64_LWS_OPTIONS) \ -DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(TARGET_X86_64) \ -DLWS_OPENSSL_LIBRARIES="$(shell pwd)/$(TARGET_X86_64)/lib/libssl.a;$(shell pwd)/$(TARGET_X86_64)/lib/libcrypto.a" \ -DLWS_OPENSSL_INCLUDE_DIRS="$(shell pwd)/$(TARGET_X86_64)/include" \ .. $(TARGET_ARM)/src/$(LIBWEBSOCKETS_DIR): $(LIBWEBSOCKETS_TGZ_SOURCE) $(TOOLCHAIN_ARM) $(TARGET_ARM)/lib/libssl.a $(TARGET_ARM)/lib/libz.a -$(MKDIR) -p $(TARGET_ARM)/src $(TAR) xf $(LIBWEBSOCKETS_TGZ_SOURCE) -C $(TARGET_ARM)/src -$(MKDIR) -p $(TARGET_ARM)/src/$(LIBWEBSOCKETS_DIR)/build $(CD) $(TARGET_ARM)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_ENV) \ $(CMAKE) $(TARGET_ARM_LWS_OPTIONS) \ -DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(TARGET_ARM) \ -DLWS_OPENSSL_LIBRARIES="$(shell pwd)/$(TARGET_ARM)/lib/libssl.a;$(shell pwd)/$(TARGET_ARM)/lib/libcrypto.a" \ -DLWS_OPENSSL_INCLUDE_DIRS="$(shell pwd)/$(TARGET_ARM)/include" \ .. $(TARGET_ARM_V7A)/src/$(LIBWEBSOCKETS_DIR): $(LIBWEBSOCKETS_TGZ_SOURCE) $(TOOLCHAIN_ARM_V7A) $(TARGET_ARM_V7A)/lib/libssl.a $(TARGET_ARM_V7A)/lib/libz.a -$(MKDIR) -p $(TARGET_ARM_V7A)/src $(TAR) xf $(LIBWEBSOCKETS_TGZ_SOURCE) -C $(TARGET_ARM_V7A)/src -$(MKDIR) -p $(TARGET_ARM_V7A)/src/$(LIBWEBSOCKETS_DIR)/build $(CD) $(TARGET_ARM_V7A)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_V7A_ENV) \ $(CMAKE) $(TARGET_ARM_V7A_LWS_OPTIONS) \ -DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(TARGET_ARM_V7A) \ -DLWS_OPENSSL_LIBRARIES="$(shell pwd)/$(TARGET_ARM_V7A)/lib/libssl.a;$(shell pwd)/$(TARGET_ARM_V7A)/lib/libcrypto.a" \ -DLWS_OPENSSL_INCLUDE_DIRS="$(shell pwd)/$(TARGET_ARM_V7A)/include" \ .. $(TARGET_ARM_V7A_HARD)/src/$(LIBWEBSOCKETS_DIR): $(LIBWEBSOCKETS_TGZ_SOURCE) $(TOOLCHAIN_ARM_V7A_HARD) $(TARGET_ARM_V7A_HARD)/lib/libssl.a $(TARGET_ARM_V7A_HARD)/lib/libz.a -$(MKDIR) -p $(TARGET_ARM_V7A_HARD)/src $(TAR) xf $(LIBWEBSOCKETS_TGZ_SOURCE) -C $(TARGET_ARM_V7A_HARD)/src -$(MKDIR) -p $(TARGET_ARM_V7A_HARD)/src/$(LIBWEBSOCKETS_DIR)/build $(CD) $(TARGET_ARM_V7A_HARD)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_V7A_HARD_ENV) \ $(CMAKE) $(TARGET_ARM_V7A_HARD_LWS_OPTIONS) \ -DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(TARGET_ARM_V7A_HARD) \ -DLWS_OPENSSL_LIBRARIES="$(shell pwd)/$(TARGET_ARM_V7A_HARD)/lib/libssl.a;$(shell pwd)/$(TARGET_ARM_V7A_HARD)/lib/libcrypto.a" \ -DLWS_OPENSSL_INCLUDE_DIRS="$(shell pwd)/$(TARGET_ARM_V7A_HARD)/include" \ .. $(TARGET_ARM64_V8A)/src/$(LIBWEBSOCKETS_DIR): $(LIBWEBSOCKETS_TGZ_SOURCE) $(TOOLCHAIN_ARM64_V8A) $(TARGET_ARM64_V8A)/lib/libssl.a $(TARGET_ARM64_V8A)/lib/libz.a -$(MKDIR) -p $(TARGET_ARM64_V8A)/src $(TAR) xf $(LIBWEBSOCKETS_TGZ_SOURCE) -C $(TARGET_ARM64_V8A)/src -$(MKDIR) -p $(TARGET_ARM64_V8A)/src/$(LIBWEBSOCKETS_DIR)/build $(CD) $(TARGET_ARM64_V8A)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM64_V8A_ENV) \ $(CMAKE) $(TARGET_ARM64_V8A_LWS_OPTIONS) \ -DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(TARGET_ARM64_V8A) \ -DLWS_OPENSSL_LIBRARIES="$(shell pwd)/$(TARGET_ARM64_V8A)/lib/libssl.a;$(shell pwd)/$(TARGET_ARM64_V8A)/lib/libcrypto.a" \ -DLWS_OPENSSL_INCLUDE_DIRS="$(shell pwd)/$(TARGET_ARM64_V8A)/include" \ .. $(TARGET_MIPS)/src/$(LIBWEBSOCKETS_DIR): $(LIBWEBSOCKETS_TGZ_SOURCE) $(TOOLCHAIN_MIPS) $(TARGET_MIPS)/lib/libssl.a $(TARGET_MIPS)/lib/libz.a -$(MKDIR) -p $(TARGET_MIPS)/src $(TAR) xf $(LIBWEBSOCKETS_TGZ_SOURCE) -C $(TARGET_MIPS)/src -$(MKDIR) -p $(TARGET_MIPS)/src/$(LIBWEBSOCKETS_DIR)/build $(CD) $(TARGET_MIPS)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_MIPS_ENV) \ $(CMAKE) $(TARGET_MIPS_LWS_OPTIONS) \ -DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(TARGET_MIPS) \ -DLWS_OPENSSL_LIBRARIES="$(shell pwd)/$(TARGET_MIPS)/lib/libssl.a;$(shell pwd)/$(TARGET_MIPS)/lib/libcrypto.a" \ -DLWS_OPENSSL_INCLUDE_DIRS="$(shell pwd)/$(TARGET_MIPS)/include" \ .. $(TARGET_MIPS64)/src/$(LIBWEBSOCKETS_DIR): $(LIBWEBSOCKETS_TGZ_SOURCE) $(TOOLCHAIN_MIPS64) $(TARGET_MIPS64)/lib/libssl.a $(TARGET_MIPS64)/lib/libz.a -$(MKDIR) -p $(TARGET_MIPS64)/src $(TAR) xf $(LIBWEBSOCKETS_TGZ_SOURCE) -C $(TARGET_MIPS64)/src -$(MKDIR) -p $(TARGET_MIPS64)/src/$(LIBWEBSOCKETS_DIR)/build $(CD) $(TARGET_MIPS64)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_MIPS64_ENV) \ $(CMAKE) $(TARGET_MIPS64_LWS_OPTIONS) \ -DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(TARGET_MIPS64) \ -DLWS_OPENSSL_LIBRARIES="$(shell pwd)/$(TARGET_MIPS64)/lib/libssl.a;$(shell pwd)/$(TARGET_MIPS64)/lib/libcrypto.a" \ -DLWS_OPENSSL_INCLUDE_DIRS="$(shell pwd)/$(TARGET_MIPS64)/include" \ .. # Build/install library $(TARGET_X86)/lib/libwebsockets.a: $(TARGET_X86)/src/$(LIBWEBSOCKETS_DIR) $(CD) $(TARGET_X86)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_X86_ENV) $(MAKE) $(CD) $(TARGET_X86)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_X86_ENV) $(MAKE) install $(TARGET_X86_64)/lib/libwebsockets.a: $(TARGET_X86_64)/src/$(LIBWEBSOCKETS_DIR) $(CD) $(TARGET_X86_64)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_X86_64_ENV) $(MAKE) $(CD) $(TARGET_X86_64)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_X86_64_ENV) $(MAKE) install $(TARGET_ARM)/lib/libwebsockets.a: $(TARGET_ARM)/src/$(LIBWEBSOCKETS_DIR) $(CD) $(TARGET_ARM)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_ENV) $(MAKE) $(CD) $(TARGET_ARM)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_ENV) $(MAKE) install $(TARGET_ARM_V7A)/lib/libwebsockets.a: $(TARGET_ARM_V7A)/src/$(LIBWEBSOCKETS_DIR) $(CD) $(TARGET_ARM_V7A)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_V7A_ENV) $(MAKE) $(CD) $(TARGET_ARM_V7A)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_V7A_ENV) $(MAKE) install $(TARGET_ARM_V7A_HARD)/lib/libwebsockets.a: $(TARGET_ARM_V7A_HARD)/src/$(LIBWEBSOCKETS_DIR) $(CD) $(TARGET_ARM_V7A_HARD)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_V7A_HARD_ENV) $(MAKE) $(CD) $(TARGET_ARM_V7A_HARD)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM_V7A_HARD_ENV) $(MAKE) install $(TARGET_ARM64_V8A)/lib/libwebsockets.a: $(TARGET_ARM64_V8A)/src/$(LIBWEBSOCKETS_DIR) $(CD) $(TARGET_ARM64_V8A)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM64_V8A_ENV) $(MAKE) $(CD) $(TARGET_ARM64_V8A)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_ARM64_V8A_ENV) $(MAKE) install $(TARGET_MIPS)/lib/libwebsockets.a: $(TARGET_MIPS)/src/$(LIBWEBSOCKETS_DIR) $(CD) $(TARGET_MIPS)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_MIPS_ENV) $(MAKE) $(CD) $(TARGET_MIPS)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_MIPS_ENV) $(MAKE) install $(TARGET_MIPS64)/lib/libwebsockets.a: $(TARGET_MIPS64)/src/$(LIBWEBSOCKETS_DIR) $(CD) $(TARGET_MIPS64)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_MIPS64_ENV) $(MAKE) $(CD) $(TARGET_MIPS64)/src/$(LIBWEBSOCKETS_DIR)/build && $(TOOLCHAIN_MIPS64_ENV) $(MAKE) install # # Some rules for housekeeping # clean-ndk: $(NDK_ROOT)/ndk-build clean clean: clean-targets clean-toolchains dist-clean: clean clean-sources clean-targets: \ clean-target-x86 \ clean-target-x86_64 \ clean-target-armeabi \ clean-target-armeabi-v7a \ clean-target-armeabi-v7a-hard \ clean-target-arm64-v8a \ clean-target-mips \ clean-target-mips64 clean-target-x86: -$(RM) -fr $(TARGET_X86) clean-target-x86_64: -$(RM) -fr $(TARGET_X86_64) clean-target-armeabi: -$(RM) -fr $(TARGET_ARM) clean-target-armeabi-v7a: -$(RM) -fr $(TARGET_ARM_V7A) clean-target-armeabi-v7a-hard: -$(RM) -fr $(TARGET_ARM_V7A_HARD) clean-target-arm64-v8a: -$(RM) -fr $(TARGET_ARM64_V8A) clean-target-mips: -$(RM) -fr $(TARGET_MIPS) clean-target-mips64: -$(RM) -fr $(TARGET_MIPS64) clean-sources: \ clean-source-zlib \ clean-source-openssl \ clean-source-libwebsockets clean-source-zlib: -$(RM) $(ZLIB_TGZ_SOURCE) clean-source-openssl: -$(RM) $(OPENSSL_TGZ_SOURCE) clean-source-libwebsockets: -$(RM) $(LIBWEBSOCKETS_TGZ_SOURCE) clean-toolchains: \ clean-toolchain-x86 \ clean-toolchain-x86_64 \ clean-toolchain-armeabi \ clean-toolchain-armeabi-v7a \ clean-toolchain-armeabi-v7a-hard \ clean-toolchain-arm64-v8a \ clean-toolchain-mips \ clean-toolchain-mips64 -$(RM) -fr toolchains clean-toolchain-x86: -$(RM) -fr $(TOOLCHAIN_X86) clean-toolchain-x86_64: -$(RM) -fr $(TOOLCHAIN_X86_64) clean-toolchain-armeabi: -$(RM) -fr $(TOOLCHAIN_ARM) clean-toolchain-armeabi-v7a: -$(RM) -fr $(TOOLCHAIN_ARM_V7A) clean-toolchain-armeabi-v7a-hard: -$(RM) -fr $(TOOLCHAIN_ARM_V7A_HARD) clean-toolchain-arm64-v8a: -$(RM) -fr $(TOOLCHAIN_ARM64_V8A) clean-toolchain-mips: -$(RM) -fr $(TOOLCHAIN_MIPS) clean-toolchain-mips64: -$(RM) -fr $(TOOLCHAIN_MIPS64) # 'make list-targets' prints a list of all targets. # Thanks to: http://stackoverflow.com/questions/4219255/how-do-you-get-the-list-of-targets-in-a-makefile # Modified to allow us to include files in this Makefile. list-targets: MAKE_NO_INCLUDES := 1 export MAKE_NO_INCLUDES list-targets: @$(MAKE) -s list-targets-no-includes list-targets-no-includes: @$(MAKE) -pRrq -f $(lastword $(MAKEFILE_LIST)) : 2>/dev/null | $(AWK) -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | $(SORT) | $(EGREP) -v -e '^[^[:alnum:]]' -e '^$@$$' libwebsockets-4.3.5/test-apps/android/app/src/main/libs/000077500000000000000000000000001476025525100231565ustar00rootroot00000000000000libwebsockets-4.3.5/test-apps/android/app/src/main/libs/placeholder000066400000000000000000000000001476025525100253510ustar00rootroot00000000000000libwebsockets-4.3.5/test-apps/android/app/src/main/res/000077500000000000000000000000001476025525100230165ustar00rootroot00000000000000libwebsockets-4.3.5/test-apps/android/app/src/main/res/drawable/000077500000000000000000000000001476025525100245775ustar00rootroot00000000000000libwebsockets-4.3.5/test-apps/android/app/src/main/res/drawable/warmcat.png000066400000000000000000000155651476025525100267570ustar00rootroot00000000000000‰PNG  IHDR;CćŚ¢ßsBIT|dˆ pHYs..ż'tEXtSoftwarewww.inkscape.org›ī<ņIDATxœķwøVÅńĒ?CGP@„Ä`C‘ÄJŌÄü,A± ±Å.APŒ »(v£‰(Įc[4ģM¢Ų±ƒA@š Čüž˜=¼{÷=ē-÷^nįī÷yĪóžwgū9gvwvfVT•ˆˆˆˆµj»5Čģ""""³‹ˆˆhˆĢ.""¢A 2»ˆˆˆČģ""""³‹ˆˆhhRŪ("Ņ8č“>žSÕÆjµbuR”ŠE¤pp<°U@^ Üœ­ŖĖjøjõužŁ9Fwp\‘Ø’WÕik¼RõõAfw%łŒn0Ų|ü8æFkQoP§gv"Ņxč.UÕß»8 ®;Ŗź§U(³'ŠSUĒW6ˆˆˆŗ‡ŗ>³;‚|F7øIDZ‹ČĄÕĄm˜ģ®5°}Ė\Ų¼ŠyDDDŌ1”ĘģDī@D«łz‘‘…h™ÖXœˆ1Ć/£€fŽžMiMˆˆhH(Uõä   šój,ū‡Ą ˆģźōŒ8iĢx]`W`‘ū ŠŌŻĻ>©Ę:FDD¬%(Ł©®Dä0ą~`Ć*–ŁŲÉŻw^Dd/T§¤Ä•Œ<öÅTQöqa‹€35=Ÿ5 i\ ŖƒŚo€m€ūTõæ^x_ąHąmU½»«[ķ‘ßyA3TõŚŚŖĻš†ˆüČ z@U_Æ­śD”U­ł †*ØwMUŲ*Œ 4åś8ĘÅŁ8Ų°:ź†½ÄƒĖLÓŚ«›“ń.üŲ üx>¶VžA5^Ą¶Įóy»¶ė“†Ū{WŠŽj°ģ=~ÉUŪ}QŸ®ź³ iģģ>ü¹Ą‹Ø®H«:‘¦Ą.¤36ĆŪÕI^ĢĒ€Ų¦Ą]"²/p“ŗ· "¢ąłąÖź'"@ÕwcE!r ššąAą_Ą4DĢL§z%p‰Ņ “įm›‹¢‹0eį44Įf~ĻV”ö5£€ 0@DDD-”:TOFæOÉ«š0"æČL©:œÜģLų";yaO)柈Ü\zukŖŗDUhÖ,7""¢FPµe¬Hąt/äq`°pfåš7DöEõłŌn׊b†bmß›Łīź‚ž Ü¢ŖodÄß8 č‰ –Ͱöƀ·€7€Uõ»”“½1K›ī@ą;WļIXßQ¤®}]]»¹kĢRē-ąQUż{ķīœEī9(p½VÜ Ś8Õµµ¶q7 xøAēN§4oÉ*"AæUÕ9޶1ö}öĆ¾É 0Åūy®¬7€ńÅś&„Ģ6Ų÷ŚŲ˜åź}—Ŗę­ÄDd Ģj¶Ŗž)"{æÄ¬ž:?Jź "]€s1‘ŲśĄėX’?$"—[bßÅ{åŌØā\ćm2ŒÓ@8Æp•£=_B^7›‹ötāø]0Żŗ“Ķ ’YU!&µ°A\ēīēŸyy½l¤{-hs'¶G@{(Hū@@ļ“R§9św6˜5 ŅåmP'+RņX ü*„/*įł*Š!H× S*’¾@š%Ą…a½]ś€1ĄŖé'i27(0Mƒłż,Žīś2«¼¹Ą‘A™„ō›»ų½)ķ›łm%¾).ķ*`²×–•Ą°”4½ż3Lƒb„ū’{nŻ\¼]±-ÉkƜŒ – ģS©o»JĢžī1§ć2āŒuōv%ä7ÖĖo¹z»MĄ™E^Čäŗ®*m¢ę™ŻRlwy@ņ1[ż© ŻåA{óhĆŚģ ķ 6hģŃöOéĖ„Ąē)įƒ|Cf·¼Č3Zž|”.}Ļ”g; cģSØČ4Cf2žäCI{W†ix®@“ū’˜°#Ż÷ĄÉAŚš)ĘÜfa«€Ż«ĄģŽ Ā`Ģb¦¦•„—Ģģ°Įi.Ż?ö.¼90„; ƒŁ}‹ĶøÆ6r“ 0ćfä˜čĆ@kGoœäžĒRj‘Ł-š˜S/ü…ĒvTāč‹äµ›Āb/æ£R:{x‰üŚzÄģņ>BGߊ½ ģę…ļ“õföLJ_ōt“nAųx/]`z@ ¬ēč{‹=Ś" sf§Ų(¾+°°;05 öŅŠ ś¢ƌGm½šŸéV`˶u°%е} °„—~p@’SRßÄŃ;bƒŠŘöAĻ ź2 H׋ŠLtŠ›ķ5 Ž >š{Ļ _J?÷ ®˜ā½?ÓżkŹūµp)ppļłP—ß@³ś„Žž>ŅŽ^]nĶČū4G’„ōųe^µĀģę{Ģ©‘>SaŒBc…§ęŖ{hłōUXčåua?'偧]×TŖCjgf×*#ß{\œė½°䘠ātŚÜ“0$Ÿ±œźč'ż3ČĖóWķ”vŒ ā öhiĢnļ ż}¹™ģ ķ-Ż_‚t£Sā¼Ä9Ē£…³Ÿ[J|Ž!³»ų:hŪA)é® Ņż%%Ī{Aœ=z…~ĪØ_+*Īl_ÄŪ„”öh÷ .æ³3čķ±™›=¼pŸŁm™‘6łNņ~GļčåQ)fWÕŻŲE«ļTWyįŸGcŻO›P]žšƒČĄSŲĀ5&Ók‰šfžy%Ōķ·9P×ń™šŠM&ŗß-’5„Æxqz‰ČśŲj]vöҁĶüß¼ū“ęĄ8Ÿ\Ų¬„i|,QÕ AŲŲLĘ/cSw’ß ī0`¦ˆ|įŹæXD~œRNĻąš§šGÓ҈HlcĄĒ-)éKĮ@lc lš:PÓ½ę„õķį÷±ėēuƒ8[—[÷>}äķŽ1öł"ņ‚ˆŒ‘#Ä6ĖAW÷›ŗĮ¤Ŗs±ŲFBˆeoHCņŽ˜‘÷,l@©4ŖŖTœc`"āv°eÉŻŲĖ<ŪQ͇H/léå+ p"ĶP“–LUÆv;“—©ß6%“”¶‘e &Sŗö1ŲŪŻ7v£āGń¶Ūµ ¹]lŸŁĶVÕ÷½’Ż‚ü»»«BFįćĖ0@UUDę{Į[SUõ]¹ {W|tqW`øˆLĄfL‹=ōZ=#„.³ƒ’I[7'ē<Š ²e`2łĢ;,;ĮĪ%äWģ9da ¦ŃĀ kƒ½É;1MDØźĖÅ2sƒĆ&īo”wöKģ¹n–B›„nš–‚ä½(tÄĀL ]”zBU™Ż©ŲˆŻ˜ąl\ēbžäv/˜ŅüĘM Wł9ŲĆ9Ū†æ‘ęØž9-¹Ŗ^įŽ„UlCm#“ń±ū„‡³¦Ż1Ē `£ß$lɱ °±ˆüŒŠ 3TÄĀ˜Ą¼>+@k“Ž*ųæz¤VSI-·ū`Œ,TµŲSDOŌ”ęė#Hļ˰̯‚ß‚-ʵ; ߒóŠóCąŸ"²Oʌ}6¹ē¦Ī“5«OP™ś ŖD¤&—Ü “ѵ¢uʈȖZqe––ßJYˆ=ŪBļlņģē„Š •1 ė’öāt(TĒ¢ØŹ^UQ8Ha„“µ½­n‡¦Hš-fx2ŗł Ū;ŚU^ų*…Ó‹Čn$[nwO%ä5-³›U ßD({gŽŪ]KŹ|Żū?ĪÅŁ×£æōˉuI®ŪĖlšĢ®sgĖ€¾ hY Ļõ°tdīM/Ī#ķ‚”|īā\ęŃĀM“£Klo(³;›|łßKĄŗAŗ›‚8'Uāż Ulņ6 2Ņ5Į–Ń'Sq#%SŽ–’G"’<<ƒŽČ{wņĀW«žČ;y–©»Ć¬U™˜l"0o‹Ķ𲧚"›a3‹dŚŗŲÕ·\~ēaj°ŃöVD†ØĮÄ“ś€"²OčĪŽ8ŅżżŸOSÕļ©h#¹3¹5Q\~ū0 §Ō› œŁ½FÅQ÷H§ōšŁZDnu !™y'K «ś[Ŗś­£w‘~®ĶØźbµåÕ„ääPq&÷jē"²zė”{ āųiB%ļ+ÅD+«!"ėŠČ‰©-Ģa>6øųņØŻ€GGœ¬ś‘õŅ2‘=Dä”R8#M5Ét2¹Õ³ZU]©ŖŖź)õhKiH¾µć2čaļįąćóLšŒū=ÅyqZ™łå£22õ‚Aތģ-MÓ«ƒM>óā}«°WF~üxŖp~ĒwņźŪĢN±—h£€žØŁL%e'ųmF›żõ?)ōÉmø&ˆ·›‰œŽ¹oś#¶1’ŠwšŅ¦Ķģ[¦Ż-«CŚ^śŸ»°éŲō°—{8fķ§{ŲK×Ssšés1åéqäō²’k|Šęä+Q‡}xwb¦ŠsĀ>#[Ļ®+&³ņiOā;ČWšŽÉžOÅ6fFįķȦ<§WČļĖy˜¬pœo”k’#Ų9-ƒ1«ŽpWż; …—®¦ļ6§ģėѶ"·Ūzt@ŪSQ`x@+efלÜL{4ެ³lYJNm§TOņŌÅsšØžN”B…<ś µ]«Bł0¼ĆņæIyųõ‰Ł½„}°Ó±%łEŲ¬M1%ĶC3ŹÜ:„½ ©Øß4"%Ī]łµšŹ-å*Äģ>ÅfYiŹžy‰e.ziwĀ×ÅŅ~€gmā„ߏ|‹‡šš¤)dAыüeā#@SGļBŽ)½RźŪæ@ü×¼x K,ćĀ ’^ķ‡)å_āŃĆģā’DnŠx§Ÿé„)Źģ\¼ŸxĻb96 ˜ėžĆV8г¬*ūŪ®2ƒĖgP#=ęō¦B[…ö ļyįŖž M‘ü†xiņ˜łścžU˜ŻXL‡č*Źcf?+Rn8‹­-Lé“2dˆ˜‚õóŲOē3»;15Ž,«£wSRņ.Čģ\œžä,)ü~ŗ9,%2;·»kū'Ų’}īŪ!7óŪ¼2¼©śO³õö(rėś‰˜ģ-<g*°;ŖSKČó Lqó,ToŠ; {°i­ŖĒeŠ2Š’a†É7\Ķp2–ŽĄ—ŖZ«īåEd]lY¶ 6S™ ĢTՕeęÓ Ū TąM1āāwĘģUŪaźL`ŗŖ–t¶ˆŲ¹&«ØjŚ®`”ōØčąCu²Å5ŁŪ¼i1ꙘjPµ|˜N³3֟-12SUóԃ*‘wGrŽ>.÷Ż(³¬õČŁŅ¶T“[—…źsŽ™@U1nką`šĮaÓł ˆģźĢ"yŽŠČ ņ·Īa-r^ئŖšBm×@U—`£’»UĢē;²õĪŅāO#§_X™ņfQIu —~6łŖ8k Ŗ:Ÿ`Ŗšó_€ķ®‰¼«Ō×eā<Œo¼PFkź(E«Ģ‘˜O§‘[v‚ <' Rü\ ŪE•BYk˜]DDC†ˆ ‘‹D¤›ˆ4Ćf"2‚œÕŌ•ĶĶk#śA˜ZĄEØŽ‰.ćkŹ’x›ĪĖsqJh]?ū6""¢4tĀT>ʵc»Āgc2ĮŖśZfź"Øže¬Õ%ˆģœ€źu^ų-˜Lč*²šODöĮsVY"āĢ."bķĄ}˜\nLVÜS©™„9¢Ķ²«- ÕĘģœņd7L˜ż °TUWa2‰ėņØ^ ‡¹>ĄĪ«ńŅrŠ®ZĶ#""źœ šĻīŖvTi ("ū‹Č5"ņ/lüL_l>0[Dī‘lc|Ջ0 v„¢ÖyŃj”_󈈈††J1;é)"Ćt£ĪĮ “}““&ŲVśÉĄ#"2<33Õ!˜~Ī4L·¦„¹pZ]²*æADī‘Nī~“S(]y<ƒÖ4É«šźvØS *ļbłI­c%ÜU å”)"’‘–)įĶE$t-Ujł›ˆČI"r…ˆœ"v&HZ¼§Ć{YODK‹Q f'f§ś2fsXŒŃ,ʘ×Åt؞jT»£ŗ Ŗ—”S„2ā®mčCĪŪĘK˜P·š`³ē4ōÄw« S(Ķ>rkLÆ. 㨄?·*b,=“Āī˜S†É·G. ł?LMgsĢŖfS²U‘üØĘWčł6x”%³s§]‰Ł±•‚fä|†] "MTõÜrŹ,ļwdвΜ]‘Ų,«OŪøŲOUońh]±SĘŽĘNnZŒ9%ŒéN}“Q՗œāė±ĄŸUu±{f©źNłųLiuŒŖ&®Ÿ¾Ē,’27ĆĶßÄ̾ęjĘĪŲ¾-p·ŖĪ;ķ«p”ˆōĆŌ‰æÄ<ˆŁł ¶ŹPĢ,n™£5rķķ…væŖŖˆl ōÅ,Q~½/€"²'&0o‚ ģ›bv®/ æE䗘ĀtźlĪĶžŽĒ,eīUÕ¼AĄÅ¹ųµzŽOEddV›=, ņź‰YĀ<§Ŗ/ø°Ž˜OĆĻ1-‰QŲ·ŁS ~XUßqq×wį1/Ö/bļĀĆ^cĪ&—Pæ:rgvWP:£S*:GųˆäoVTŖś¬Ŗžšq®Ī²ź8ĪljDä>ąģćæ3„JŠŪ0ś3>æČ…ĻĘ̹¦`Zü­0»G0W`gąī›‰HSl–ß ›Å‘Ć\œ=1Wģ8Æ.Oa~ņ~Š£ūž‡ĻÅĪÜxĆy½Xąźó„«SAĖ ģP–æag9tŽ;ZLą} 60$瑸&BŠ1ž¹)en‡1“W0ћ‚roqķ:҉v*Ąy~ys$; øSDŽI©’ŽĄr <<—h2Ā»o‰=ļ€óEäz¾ęD÷B¬–aĻ`Ŗū³ˆēān„½7—c&gÓ=yæZcŒ*y®q”jW†½iĒÕ=‰üu1łĒüe]7Vʶ­&.*a[‹u}čźī'a˟–ćJ ĻwV¹ū6®’“£ė¶žćī·IīŻ’¦˜iQsŒY\\ļņ˜‰žńŅl<āīWŗū;€c¼xļį|¹#<Śæq¾ żūśā1ģ¼Õä’xŒI·Ćf˜ÉIXŻ{Ü3<_‚ēUs“C·`³Ā}O½šEø³&°‰C2H¬|ķĀū/{izO§Ō’הräh.ž²šsŖ©ĄŽŽ’®ž}1ęŻ*ȧ)&9Ł{vŻ]>ž1#“ļ$GÕöū_īUĪ2¶/g‚ ±cāžź…]*"až Ķ9gkśŒˆ•ŗķõź(¶>WÕ伇·śBĶŁŻ~™ķåAUWˆČóß;ÕģIlv÷’ŖŖ˜Ļ»"ņ¼—4ĶóīĪTtĶś ōĶ„¾Ąf!o„Õ«ü³ž‡1śŁ˜ė÷¹`ęh"2›ż9M?‘°<Ń4č("jnIż?—ļ*yóĀņŗ—EW`ó ŅŹ›ęÕ©*X‰{ęŖŗ@D“;ā]õ¼'‹Čļ°Ł÷Ū#ōM;'kE3Ī?Ē“'NœAŌ+”ĆģB¦ńDĀčÄ õ»`Ę‘)˜Ē‹B ļtÖ|‡Ķ‘ŸØjź!k)ŽŗŠHs÷÷ čYę˱QŽĒ³Ų‹=MUēŠŁ'NĪłēĢiAæ"uzcxļø’;SŃqfV–‘/ )„ķ°%rr?›Łt‘õŻĒß“Ė}…)®®ņĖ< 8SU’ķäŽæāoLwKļ­ÉgäS0łdæ"uh+"}Tuµ-±ˆ“Ōņ4Į6XŽvŽ%Zc"‹vxmu“3±£6‰Č!ŲÖ *ō‹Ŗ~$"³DdŠDU}†^/P³ 3 "1$ø’=Tõ4'Eķšsužu ±×Øźw"ņWąI§†°łU>Ś8u‘ÕŪĻbV.əĻb²Įä܏±ŲNūŲNīzŲłĮį)]w‹H{löŠ„lēćE` ˆŒseo UÕTļ¼ĄžnvÕ[‰«ŖKEd,&O¼ [‚qŒ/-—0Ē»2?Å6IZg`N$} vŒnL`æ@DÖńčc‡Ż†ĶŒZ[iąUĒ1œ3±SŻ®Ę6ˆzb›:į€Uß—¹ņNĄm@…mU;Sbp¼ˆĢĄd™Åp;&v\F}ź ŹaD’ĮäB ’åĻ˜`89:ī騶9š ²Qč<'"•=„©.ćVr‡ń܂ón”Ŗƒ0żĒeŲ9‰eäLō’’#\ŝnJīD«‰˜·ą±ī’}ĄÅÉLYm·³¶;S·H–’ÆįAØź«óYąź9•Ü dc2<¼’ÉLüZlPŻcŻ1¹X.Ćä–-€m4g‰s4ĘøÄˆJܬOĘf>®uķMʼĄÅŪۘ†Éłp’Ļʖųƒs‘¾ē†Ž‰~Œ &°›¬£ĄžĮś.n;씸¬¶†÷˰%÷eŲ wÆŖžāhÓÉ·L8ŪŒŲ cäÉfĘ×xĻb+€{3źT·QŽ€Bn“įeLxŻ“±ųƒńŅ$ Ɣ‹5yĶŗ—ŠĘz³AQ  }1YQ/l ŗ­–ėÓÓIė€-‹æĀTŹĶg(ĮA>ķ1

    ŠDā8ņį»b„ģK—B¾§„ŲŻE°š±ČĮśWœk:‡Žķæ³ōØć…J®Ę;°Ćø?^kdĀg7Ŗč/o Ģ™Rs…ĻŻ÷®fĪŅźFŚåvää1ĪjdśrĶźEbńI+y,Zģtķ^ĘåVā Ų£‘T‰8bO„d «wŖ]ČŪ’eI.:`wÆ#ń†æ ŗ$ŖķüE#)įŚŒ²j„$Š6tn=H®n-K;ée¼“ĶE8cćœõ"£œŅ1īAwlń\Ī«$žQ'8l€}«…Öeøpöv3I$Ń bźÆäiFZ—cĪäžÓ‰&RŒ' ń^¦g¼:\«i°sŒśā»o ų7ģ×—÷‹:”ĘaņĮĆf¼¼F%-źRĆw>؃F‚ŅĀ;˜“Ė+ˆ™¾mńqÜg¶kļgšļZ–ī;ķ2Ķ Óœ±]Ļ€9č p{^mČÓ±ĪxOž /RIŪŁ$’ĢXœØ=½+¤ų‰ńößrŁŹ—:ƒĘ7ŗąmlW]!Ÿ3O©jŚ–±<7··°V<¹ē ĄīN+ļ°æŒ|VśG>-źĻš÷Įī|ϳH„\MČ^’Jõ)Ś+C–­K#õĖįĮ嚏€#¶ųą7Ć:”Į®ßøYīĒvĒ®·5Ó_xkĀ~ ¹²iõń_‰ņ‹#ĆóE½ˆčsϵk3ØĪ£Iųwāæźņ]x³P’„[@B%Rœ½ĀžŸ(ķķõÆHšŻĘ‹ ų£OѦŅ/n“€Ū¦o³0VO]Ż3ō5æ1Ÿ9ÓÜIįŻ*ėTŌ|:ķ4»P ĄsĮ÷®'Ćī­õ=CÅ7­m”<›VĢ)K…ø<£6ʧWƒZ½—ĆžŽ=25‚G†ā`[8g黎†¹9u] Ąumn ‰ŃWk‘ź ø9=oR“VŠg²Õu1 Łޱ¬¤9AŌqÓüó\u÷ŠõY“ĖmFÓÖ ¢Ā\Ɯ̾„Žx¼cst™ž.|IųcšL?мEāk=SÄh¢6Ҙ’ūŠä ēšü©ųńū_üBų—<nžĖ ųUcņšŁ$mīzēpąž½tĘIoCāŻFņf3ĪóĻ"9aĻLš¢÷Ą1-øÉčEj‘Œ¤@™”“3¶LöØćņD„ $2=i=59å.„“Š[v{R[[fóKĪīj9ĪiKذ…"tmĄÆ½,6§Ź^KpqJR3sfŗ:®ÖF8ÆEf%‘~MĄµ$]މ}zäAn݃W¼x[ö{ńf¶ś%­˜“®Ą7$Ø=z‰JČč§ļ_‡_³G…¾ŚĮ&æ}i­ų¹˜2Z °Łæ ś'U𶱩}žēX›M²Ńžأ„į•WŒ:W ZØļ„M³ĖšwÄņX‹żG>j;ƒ•#lvą×‰|jń¾”Ŗų[Gš\FŽŅßķh®nIķč8¢Ģ{nu'µgĆ6^7w¶ńGäŹKšXŒŠÓš‡€ģ."ųŅĒÚŪXß}›L‡ī~ķB•ņ+ēĖi_łż+åoü=ńʈŗf»Øųbż4ūä1’}ńé[ĘżHq¾ē#u§Żx^Y„¼¶6ó66;kæŠU®\ÜF¦däŖżįļZ©“Ėbæˆ"¾‰-ŸX»’ę#(ņc`0„r1\–«ćŪ™a»š¦‰ö•¾eę”¶N8cU{ģ\bzēĮļ xÉ>jO­$¶šŠ\G*łĄŒœ“ł×Ö:Ę«šėGš„čę õ8‚›É#'29ńģF(»FŖ,łsLųÕ“ńµķ#O{­<+67Ļ”īkΜų­¢éŒŚgÄĖu¦Ųj°'Ś_2€źß‰ÆŚĻų!—ķˆŸ ¾%x‡ö`ų™«“ąæ8m¦_ŻŪŻm@s…-Ō{اn†œŚXž„$Ó$Óg½7jlšAᇨö ×Óæ †²gXbo)$€A®”Ž:„o›ēKéĶA¹<ŅŅ«.}ė{ĀČńŖ ‰‰ĻB?­1RS™]޽č5ƒč\G@Šń– Óń«°Ēē&֐DyĮ#‘EŽŠfÕ»"¢C½vž¼õÆŠų%ļ큩~Ŷ'ƒ<{qÆÜY|3Ö[ū/ÄvģÄ£Fģ¾ŽūOĶōȧJ£„®ŗŻ}śpgśCųoÄZ”¤iŗ†•©[_h7öÉ{§ĢŽ^'ĄnųžXõ®o\U•šźÜ ÜuęW§gf[ŌłŪć'ĀŪųjćM’łtéT5՜źa•lLćł²ŗnƒuz.µqś}כ¦jŃ“a„d”¹Čį†}x®=™œ£sł‡’‚–žĪ_>"Üų×LŃ1cćFņÉļŪłk3DŁ…Ū“AČ5×JZõ)™óFŃØņ²3Īą* !Ufęī0}j#>h©GfMõ>»ųg¬kzV‚Ž#Ō--n¬b”ˆ‰\« r=N+ŅüYį­ UšŖ\ŚĢŅ £ņžäkĻśž•ÉYŁčkJ×1ō]" ’ A¦jŚ™ķŁŲf.C8öā¼ßĶv>'’-oOY“łmA…Y8ĘҊ3—1¤Ņ±õĒĀˆWZŽ™ik©-Å­ŽŃ 1œ} õ™ŚķeÄļÜpOZ÷c†¢;½×Pŗ‘#S&F9äשŁĮØŚBņĪ “UĖ®‡)Ąųš .dŽśÅ”23aÕøČ£HÓ>Éx5,—Œ»ÓŌ’isj«é:S‹½–GyW,ąžÕē~(²¹¹i"µĻ'Ս#;ĀŌm•ļŗž™¤ĒuiwiiöiUH}Ū­ņ™ž,›F_ۘԮŖó²²“³~µóÜBŚv·ī¹¾E²¾„"=Ɨ“õkE¹>\ ŽČN6ēu½å²˜X°R#Ø­[R—āHg9ŸOZõ­+òZųzmBŚķ%‡>YAÖ¼Žāńę`cņ„œŽµ¬eØ:-Ģŗ”Hm¤°ryv­įĶONÕ5 ˆ‡ļcrbmä«j„={"Ź;ŪhŻŌ“Čēüń\¾ÆijK&ŹdÖRVƆ,§ŌäšQ&N tMa3¬°JK€psҤ„•ü=uƒ­A%“ŅŽ>aڽҒĚD­#_\8.å“cAµ»œ†›ć]#Z¹N”m$†#xć#„pzļ…t[+łäŃ#X—qŚĄ`œÓæ@7|*ŗ¤ĖgŖNn \ķŖēŽ“ļbµ²‘øRp¢‹Šę’…§kĶQ4ō(7šæZµć™žĶ’N„2É(?t <Ēū9£Žą%øW=0:šŹ¶Ń5÷†Hµ;ū$¬ŽCĘN§Öš¹ŗ0u %-"(±PĄžīj¤ĖuķIį3ŚĒ}*I'ŗ¶’ŒaTņHąŌ©X #‰®%i¤cƒéŌד¹å ŲåG­'!\æā JėM:sŚAę[;.9+Įžø­«{rĒn!żēŽ$Ņfޱ%Ę©¤²škŠH%†F>œW#g¢J nŁĪW”¤o‹rŚN7BąlĒJĒ:rBÉņoläsAŖŸs­ū=—öDó²ä®2j­¢4s]“o±PšxĒŒ—sC¬½ūŒR=ÉOž3“ć¾+Ėn^ ZĄĻēäōŖ@ŠŃ"ø…‚|Ņ„<«z{Ö|ėάąZÜܞßJgDdzM„ =Üń³łO^E=ōį§ł—?cVµĘ7ž—jÕYltF}Ž͐źķØ®ä' “tĄ>•č:ŠĒ%Ŗ]Ų€&e;ŌÉ£HÉģ|­ń—Åzŏƒ5‰5IΤĪ`ŒØ;FģŽ~Ÿ~mjėuŖX¼QLÉrʑ¹ŻŽµÉYž³×æcO,ų‹ń{ĆZkK¤Yļ`. ‚6õ„)<ž8ÆÖƊ?³­Ļ†®Æt-Z nŽßäóŃ1Čqź+ĀÅGVĻōĻčå„YgҧSIVrØžvKļŠLłāßĆü2м1ćŁ.ķµŸ Ż»¬Ėžņєž£Õ½šóĘv½ =•ĀÜ\9śŒz׏4IŠŖ„·SŃäF‚FH²TŒņ:W1ć\ųÆĆߣ±ČÉ©[īk7W ä~głŅŒ˜V Ž‡Įš˜ųĖšƒY¶ń&•a©é—°\Ćö¹“ĖęØĖØö=ÅHŸšPŁĀ÷Ą_ >~ўŗ“Öüā[ 5#ošŅņh|đ;aņŸFõƳęLü÷ˆų¶6e€£V-¬UOg~Ļ•µ÷»/śŽš…Ķķ°ßlĮÜgżÓé\ļ…t¶ÕfµŌB|ŁxÕNÉWÜż’esģļ|šg‹¾Ż_„Ō9Žķ•fį‡āk„šoģŃąÆ‰Ÿžų'Äŗ|šh—>6Ómuø|ā‘]Ų¼Į^6ĮNk²žčĪuōhūļž ]’”ųmšCÄ£āēģßkyšēĮ2é/6³`#il!ž3Ąž#,¤g {׹Ój·ŚMäVZøÓ§bvol‰eOCš×A)]hĘ>ž#ā8“‡)ć±m:Ńn2·tōvóV=S@Õg¾g·ŒÜŹNŠIµŌ®¢›–Üž•ĆSCś Rč”]Ē(ŔŌķ`ś“G* PB¶ĄėÉ®vĻHąou~ÓØéé Æ5©o`ք?µÆ|7Ō>$ųzļ4{IŁ/~hq–ĄėÖ°<ĢD)Óæ 7;ĆÄü©•Ņ[ņ zsXŹ=O?›R[8㲓€F akņiYt1»«r„±ŸjŗhĘ®!Åh}©š·Fųać m7Äŗ40Üj6š*Ż[MĪĘīp{_F7Ćļ ^m4˜ķåuÉ`q§+¶Ēf²‰Ÿš÷ᦵަŅ×Kw°UÜn3ĮRz¦+źæü!šśYAyc ÷pÆĪdēŽĀ¶…äńŁō›µĻ9ūvWČņ› ąÖ֊ _E°PĦkŖģ|®30ęm\éüY¢Ė5•ŽæĶ””pkä_éVėcx²dU.øåO„i%”ņ˜™Żžg ź°Ė" dÉ ŒcڽBVøµĄaµ†@ļ\•®~ņGĢ^>š]ޟ}5äH7%‰=Mlü¾¾“ńMŒVė»ĢGFSŹž1ƒł×ŸR6gļYMU<,mŠōČõ ?†¾"ń¦­äŚ^B« ĘyÉž_•zę—z“}•¢1Oeu•X7B{có­iD謯ŒÆxkĢņõĀ@ė‚H­}µūXüQšļ†ü}ūKųĀŹßUżž¼,÷0“8Żu,ńGĢŠ©Ā•ŒæØ9é’+²’mŁŸńžiC”Õ©ˆvR“Wų¦Ōc’“5ņŌüƋĘxóā‚jZ6£*XźŗĘ”ŖÉö—Ż,©$¬PÜ€Ėł ½ć "÷E֖e,m¦,CƒŸóšĪ¤n}ĘYCŲS§E}˜„÷+ėū Ż|7š§ķwšÓ\ų«E„čŗÓ\é:„w0_3ĀDBAÓ!±‚}OÖ¼öųż|)ūžŅzUļĆx$Ó>xĪśżģm%Vū$S ЁōÅ%Fń~GÄf|M‰Āqf “ö5©µ~œŃr—Ž•¾óÅo“½Jė[šž—n!ŽK‡Q"–ĮŒ‚å_c|:š¢.–ž[‰u—#sd—Ļlżjć Ņq9‡“VGĪæ“G„ŅmZKŁÆ^ćXd/0q†:¾Õóo„uŁoā <BĄķdņķłŌMXōšņŗ‹=ʾ[޵Ę_ZāD*­·w§A\s™ķSŽ…id)£Pq“ō"¼łį^J]r@ĢęĶ;£«ÓP# “ Ļ«5š]± É禪4D°‰œ$÷ŗÆ‡® ŗf·®čW¦RÉ%ŪĄź¼ žµF/;R’īćT¾Ōõ›ł¤2Ļuy;M<Ķżē‘‰$żj']ģyóŹésūNU͵śŪµÅ]4p𓀁Čģk¦°€ŖĀ\`ść„g6ˆ&u¶‘:Č«Œś]%¼nķRU³ßŠčßN‘¾ 3£FģH#Jä,ōgŅäŌ-Dš9ȼr¼ō®˜­Bœlu¶qĪcVe˜Å>HŻ£xćnHĘkH­K4“Ū9"·{n+Ѿėž ų^ž3æ‡įnā-wT…Ü1REmĄ’}Ēo’_”J'‰›įe_:1|­«_±ś'ūC’ĮP|{ū@~Ļ7¢šeæĀŲļģņ³=„ߜ÷p€Š>Älr:ćŠü„ŠÖÓI³‡N“żÕ¬JAģ+¦R¹ł…>aųW Z…¹Ī¬Üå'æd½ü[:x'óe ”ūq^sń‹^X™¤ōGŽį” ÷”äĀ¹å¹śeF橜SškĆńoĀŁõĖäŗŹ,ī06 #‚_ųŸĆhš¾ÆįąZ+E–Kg Ł#ÆįXԧќ96hźW©F[ĘĒÅŽ—ū#YÖ4ęY#†ŽéĀoźT±#šÆ­th/¦±qYI$R†Ā+Ė«${õńŌéÆ~VÖʓÜKĘ,£ŠĒÖ“ĒŌo“¤Žgó¤`Ģ£!FŅyōéYÓg—‰Å.‡omįŻ Ā]ÄĶå>”)¤Wž˜­žxj“/Ÿp 2©ĒJģQ¾Ē‘*ėsą›ļx—≼UāÉ}m›ŁSküŸ cŒõ«ZųY„Ćk²'ŠO¹OśŅDTåcޱ©ūx­Ībūąü‘ųmµ­W“Ōį‹ Œą²’²1śW;£Ļs¦]­Œīcš,?”FõÅ(»Üģ§_”ķŚ7ˆ#•ćŠfT^»³ĻÓŚ “T.Ÿ0ĒÆZɳÖĆĢæ„'ŚŲ6iŗ¤›K5 ‚0y¤ztiö,ŖˆVسŠ’I ģ‚+jVKöW p£9Ē5Ÿ„BīUÕ–ÜdŠ ’Ščw±e$ķSÜUI˜ÜyJ”³Šu å؊āŹ—fxPöēµ`kÖ=ę£5Ā[[B2ÄōÉ< Ž”O';ŻšOŞ>ŽÓZ—įüYįK¶Q‹N»hÖąØłKģqŸC_Ø kOųVŅoiÖüwø7‰ ąŽw޽Óč|ż(ӅIUŠJRµßWmÆéŠü€ż²?gż+öqųĮįŸų?+į׋^M¶ćīŲ]*ī*žĢ;zƒ\f‰©ZÜĄ#vīqҰ­K£=ü5[<ńYŻŪij„ćmŹ{©õÉųśćX»Ó­õ?“OØyF#-¹Õ`ošÆ:q;GE¾{‚’Ę࣯ ö­{Øī`(@(Œ2ج]ŚÉóK„I,¬ķ‡889QĘ‘č:|A”`ų9ś× ć/®·fo4­ÖZ¬JTycåsī?ZĘ%ū3'DŌ.¬Ņ =aR°»AćŽ2+ø¼›%¼ņē›°dJ©÷#„UŗJ/y­ŚŻ_ZĀ—P]:!+†ĄĻ’^ŗ»xw}Żø÷§cš¬t6įŽ[Ų/4™‰X® ’ߔΠ)ćėŠüē–ęźsxbfžĖR“ŗky2øo½ĮĒläWU5©ó9¢åZ|$Ö-ußĮ¤Ż]¼šĢęUx#ŒĻüę¾ š‰§ŅÆ-ķą¹’Ó2yąkŁ •«FķÅģĻÓ?|JŅ|=”ŪVņ7†įrx×½«Iø“×į¶Ō[Ow&ä ŠōRGē9”›œ{Ÿ’µgĄ ų®óT½›J°ŗšF-ź ŽkFĻPĄqĶ~oxgAńĀO¶ƒā cŪ3 !ŗ‘8'å9éœb²å³>ļ#©ķ0é³ōįGŒ5-BņÓJ’CpŒ:ēī⾑ń/ŚtĻ j7d–źķ¢)H¹y¤?uPw$ńZō=ܰџ%ĮGž|zų%ū>|’„“O·Ņ“oݤš…¾óēŲKåļX„„AČĻ_—¬Ś}“6l!A·č+ͬڕ™ćšĒįsJ?YĀJšę”}y[WōvŗņhšļŪ `¹ųgąė-)5Ń©J<×|#fXć×­~wčztāö(ā\\.G%½v`uŗ?‘¾”’’…zõķéR>…Ń5Ņ”˜NĖmvŲ0ćüō®ĘŽåµ‹„udõb5īRZÉøˆŲō’†~%’„oÄwŗvµœšō^Y×- ö>Ż}¤x/Kń®n“›ˆ.先ÄĄīæJķ¦}-£XO„iOh żŅØ ĄwØtkæ&īPźĪU¹ę·±ćÕfÅģÆu(t`Øž/­B3ĒĢ}{ 6R¹±™n£OŻ“Ž}}Ŗż¬ķ HߎFh9e±µg«ĮzئD®Ņy8­!j¬åĀ;҃–r'¶µŻ$HŠŖ Ē=«¦HncµÄcrŽžŌÓ±™‘©Y ™Œ‰‡SžV¹)psVBĒęSļ@–Ž,ÕŅuÓõ ŽrGL꤆EŪ#£sƒČ ™15»T]>–@U‡ķ\• ÜįmĮsŪƒ¦Ń¼?ö£hn„ī[ļƒ€§ßڳ|Yąib֒Oķ+]BĶ×;# €sÜõ föik¦©/Ą«ŲWŸų£U“Rø’Ā8‚EømŻüXō ŅņÆx[S{IšÜ42 kÉ,¼=ØÉØ%üdī$8nōœM,už;µŃtŸ ˆļŅKySj”žO’Ŗ¾_óēŸQxYöZdm,O?ZĶĘĀŖO·ŁWN˜ž”Ķ>+ˉ+±—xTŻéĶe ‘#,™ĒēQėVw Mij¦ł&K~4Ȓ¹ēÓł¶R°x¶s‚øē9¬{ėYu Å#£©Ļ 4ł™›GImj¶&Q†[<Ö·V¶÷-“īā“|Ē©ėķ-o/`ŒY6/Ā"‘ÜśšŠ–{½ī-õKQē!(|Ć÷ZšĄįnĻk/ŁŌ©.‡œēzn—ń&ÄŽ [·‘吪NĘŽ“PBå4µ]bõa†{xĢ–Ūö²©Ęļ^{’ F—e¬O¤É{1•ŌĢž`åA=3ż)ņō@•i5Y®@É[ķĄr8®VńœļX'Ł»œŽÕ€ĪSU¾ŗŗm%xÕy·Ø÷Æ<»Õ[L‘į’ź8ęf'ƒ’>‚Æ#¾“ńjv+`B¬D4ŠHwĶs2ŪZEū«™ń †ēó=i3r•śXŲ@ŅBĖ2©É!pҼ®īčO0›Ģ/éÅb+:˜ę†8DŅ7Ģ 'å5Ė]Ūź3 †kHį8#+ŌsB™×4™e‰U÷›@+ҹKOµiOYČĄó“µ²Dė×Pź&śģyƜķ$œżk{ķ«©f`9õŹ“zÅķ2;™®–ņ9`#Šķķ“ĶUD‹nb‘óˆŌńłšĻ™Šęī•k=Ō‘_2y ķ*CķMŌfR‚īĘŻ$7 vīĒAWtc¹…|'­éŖņß>łKŸ-±—°¬ŻOįźŁź3kѹ‚ņäį€}Ėõ#±«ćĆ&?9Öķ®9Ćū¤sŠVl—’ŲÅ?˜Ę8ՍFŠ·c”K˫˅ó†-ŁV'Œ{ÖęŸö{+–yfu ’Ž>Ł®Påg[¦jÜ1œ`õ5©§Ķ]7˜\Cød÷³ēŌMž'¾gŅÖą”cŠŽ£µpZtéö…%ĮĆ į{֝Aæmt‘Ū¤‘( @ŚAę±5]VüŪĶē;ŗvĘ+~bd=ŗ·[¢VPńŒõīk^ĘŠ4@Ŗ˜^ēśÖs—C+„¤–ÓøiX÷?ģż+nśq.Kɐ?Ü|Œį¦•-°ayŻŽjm(‰ƒĘJ<‰Éģ+Df陷7loe„ÆÜäqMg3“łą •O¼8ä÷¬$t%YTVY Œ’:RĮ M#ȒyĮ€P…sT©doN'”xoᦣāY×÷me„%”7AėĘ¾·š‡ĆķA“{³†łęLA,Ōņ18®‡£N63Ś×ÄŽµÖ“–Ó4•{‰ļ#ä˜ńĘO88ō­ |=øŸK“VŌēŠ;—ę$] Äg5äJ£“Ō턬$šä­®®J¤g'Ž=ė×ž hķesnÓK< 0q§ÖŗhRl®{8ų›Ę’čog`ń%Ė0*ĢŲ$Zė~žĶ_ž9ź6ŃhŚléRK¶āöT+ ŽćyöÆn- „3öą/ģżšsąUōqŚi:Wž&_(‰īnuŖ:¼ˆxČõƬµĻŪ‹mÄüM„Ż-³œ|F'@ć>•Ņ•ŽIHMūoĒV7V^”wįß ļv“grØžųĒwźk·š·…<5į«XWEW×uę ÜHyÜAĘFā}éĀē,åŠ÷ĒįŪOĆ}Ø]łärķ{}ć øČĻ ķYś§Š&ń6™”ĶöĚ;xß+§–ƒ ČėĒs]NĘG›xÆSšļ†õ›94 ›ĶCSUNÅå_ß·µNž$‡SMkÅZ„Ę„d铽»`üĄ‘ļ[”¤y®µØiš”Æia#Ūiøb2ŲrO« W–E}cį›[ė YQ¼óK»p‹$÷­éŖ©œ>»ā{ ¼¾)ńN£„[i†2į®e÷cŖ…źzWēĘ?ų(äšnµį†Ś@GŽnŽBĢŹxż×å]pCSņļ[ńŸ‰¼Yw{©xĆVŸ^Õ§™„f”ä ż}8®}FA ‹zģ^Š; ÜŹ¤–ÄÆę:yøuā©FtQhó².Ų|Éē¼WyįæjŚĀ›{]'P{ĘŪ²8£ÜH'b†aHū§ą×쯢ŁĮ©ń6āśŚüĢŅElģw"Ń€ē„~„ų'įµµļ‡5Y|?q”čĮhē‘vW8‡9ā¹*ČŽ0č,ŠlŚĆSfyR×ārX†įÉč3Ś»{M×4ė{[ŻK[³”~Ó_žų‹Sѯ汿жˁ$ ?Žćµ\eØ(!źž ¾×4ķBėĆļ¶ ń4{^P~sß9§s²+CµųĮń–īßYø“šļ†ķÓƓB®|²DIŒ~5ĘüńĻ‚üSć7šīÆ$1]ÜĀćĖ›å'#ń#?ʚ} ¹ųŸįģś?ˆõ=&b™ŅIdĘsĮśW°m•Õ•‚°Q“œā¤™vG²Żč’ŲŗöŖĖmäģk6N+Īķ¢¶×ājIÄü„±ÜWžĒšŖŗ™¹X‚ÓĆv–¾z ;`ņGŸw— eĪ1ŠćŌWXė”ÓN]ĻŹųMō/jZJĀ!’)] ą“‚3Y)‘Yf8fĀšpE`wS–‡Ö_õKoéz§ĀOjE‘½Ö—„ÜAUū ö¬ «ļųo^Ó¼Q <ډō+Ō–)\•pČłcשØnĢŚ(žłæbOz/ķū,xā~­Z_ųšĀÉlõČ#᣸@åzŒOч„}IąKūY·¼u“åk9-KP>¾Õm-„WņćĻÜ|:ńĪ»ąĖµĶÄ3ÄBI#'#h>ėZ/[5”ÉĖ vc“ c¦*«īY' sĒzīƒčp²7—vāHEėĻzŁ|¦”Š®aŪ5bRAĀ5lHĘi®<Å9cžQĆ”r¢*4y'=}ĶEµä`¬ĒŽ:õ­’*%d·ņf"£ÆFć‘[ )1H6ž"»Y4uCsögžÉū`]üųĪß5k«+]'[™oō®ˆā¹_õž1Ić”5żČü9¾šĘ™£xfD@ÕXė:T xŠVɑ¼[„sŌŚēT"zŌ€hmui”c·÷w§•¦¶48Æ,.uw³n#žŃgĻŽB9Sś×–„J7?–ßų8sö(}ZŪ¶7Ć-[Fæ)aāV‰2b”Ż»/ūX(OLė_ɜūŒ‹kwŠąrŃõe>ž•(+5ē’\§«ü%ńeĘØŻxgTÕQ4kĘÖ)yɎqł õŪ߉^—9·}ĄŪ·ļüĐ{ Š”–åEYŻRhś½¦«§i4Ó偬gUT ąFł5āž5¼š¢ų³VøŃmćÓćøŪ/‘ŗŻĻāk t5»±CHÖʑ­XjחźH<Ÿ³Žr0ēóÆ³ķ„—6±\ „Ū¢Y³ŁéĀZ#šhõæK2Ē›óŪ¹#šī|a¬Śéšc¬®X Ą·R;ÖÜĒ#GƒEØÉ}'Žu‹;‘”õŲŁj¬åv(Ybły_¼irėq³¤ų“Gį»;NĶ鄍½v“^Gį?yž šßUÓÕÖ6 9Įc€|՗}X<)÷6·“H¹DEŒ…lކ¼»Z·øšf»sˆµ Ż’y f0GéŅ‚„#Å5Ÿ^źŚŽ$—mŗ6oµjO ]_ Ō"™Ł3ÓiŲČåõ»I4ŁžĻ*•9ļYK4LUW OOjBO[Ē©4Ņ2 fēi«ŠłģL‘nRҜV£g\ž3Õ4Kac‹;€7~éõ®kP¼–éX¢,ūŽ}Ł"})–-’źe#•éĶuwšńŚĒ=Ō‰ęI‚#';‡cQ7гmO˼“FŠD9U­Vµ*{HQ‘ĮS“Ķ@ĢO 4sr³ĢRGÜŃłJٵÕcš å|Ķß+JEA”džžY0üŒ/zö]7ĀRź>»¾dW‰[ęōęƒSŹ|%h·qßjBöWŠHŃ21ūÄ޽kµ…!¼µžu™įGF4>Ø$j”ŠÓÆzgˆīR=8Ü,IUĘ̚ ’źbYIyg ŠÜ1•É!”ņœÖžāéž{+™e•P€Y ļ@āY—Y±[ūm=[¶cq=…u—²jŚn™s§Ś(¹ŽYV@pbĄĮƒ¢/CŒ½Š„ŗBÓ—9ōŖVU­œĢfApTpM\ecxČĪŌ4ˆŅ{Ū›%–lõ•Č[ėQ[‚›\JaĖ Ń'r›o¾öųŹĮՏ#Žŗ3LR":䀱ŃŪ騈Œ?j­ÅœbHafoLu4=Üčŗ®”¬—!÷c•#”®W]TŃī.%Ś&RŲO-9zÓņ*›čXŃ®Öx²źźXdē·Ö·äe°ū4qFķ¹…ĄĻ4Ž˜lWŌ.¾ĖwREµ Ąō5ÉmZK;HÅ\†Ītö ŃFå;żFi…Ź@Ī‘°į{Sü+a”ʙėųƒYXĘ+‰>ÄIm‡×Ö”–óY6&ŽIe6ģrT?WĶŠŚ1čŠK¤ŻDŅ4ŠŒ8Ēj¹oŖ­ŗ%”² ¶9ōØ7§ 3Ąæj«[m+Ą^ŌtŲ¼ū‹Ėż“Gŗ0ÆĪ’ B¾+Ö„ÓģÉ6ˆY¦ĒŌ~†økHś<‡<^*žĪJ+ęģ}?į[¤š?‰< s ^]éaukx÷Fū lÄv5ū¢Įā)>#XÅ©iö÷Ś=ĪÅUŪ“#°č}Æ­x•Ū?Ō†°˜xaéé+/D¬xķC KąˆWß |C¤Ik œŠź)°a<śvćn?:üĻæŅ'ų7ń÷ZšÄ7ģžæźZrĮpł£ćÓęTÜżÆ‡Ņ«‚o3ź›Q/īa™Š¦ģŚž3“žO„GæV•†\YĮ©é׌mĀĄ¶÷4rLļčkŒńĒÄ/ŠÖ¾ šĆ]SāgŒµÆ‡Lé=ž‘y|^ŚŁT”W°ĪkĶcČĒexzīÆ'NJQŗ½¤®“]šMźyŅų—ķ2…ĒŁ$ĘŻ§9ÆgšoĆÉüIu§\CĒrsš0Ż„‘u1Š'Õ_ <-}ą ÆųZSs=”Œ.CܛÉä'·z½ćĻ =†·¦I>Ÿ*L“ bb­Ŗr¬¤r#5čSŠ9%˜.k3ö³įķ5„~Ņ_°÷Ężö†žĻӾɤ^ų~kłµÕ­Łc”ÖPŲäH®M1~>ųā}ą/…¼K¬ų5üCąII³‹^¶ˆ¼–.@ Uć=Å‡īŸ‚ų-Ćįģó9 Ÿ.„JnŸDœ£)8®žļ2ŠōGĮé«ė_õkT—U”ŚJŪlīŌķgĻU"½/ĆZ’ö›2 _äuÆ3śæ Q^ĒŖ5ØcĘ’/Zź“šJ·*3ޱLõc-7·ÖcšwÄŻkNń«Ķ£k֞H“!}JqŒŽ z×ģĖć-;įŽ§ćļų“P²ĄśµĢVņpŒAĄ óœgó§Źpb õ>QŠÓū1~²āŽGUsŻw~˜®…J2 ĄoۜūW;]=«ŲHóoŒoēkŃ|=šīŁ”’źÕ.&•ƒF¬:šŗHåÆ$ՏHŠü cø‘>£ØųZģ°ŽI­‰ūĖÜ~ļŚ·OŒtļč?ü?Ŗ}²h-,nµD1ʬĢē+ŒGłę½:0lłlŠi¶“?Rl’eŚ’įĆIqšžĆāvž-ÖdŌ|7z®$B3“A&$Ü=}«Œā&‘cØ&ć ;^š© ·Ö¬dµ9ōĖ€§§c^”hŲüŸ`qug 5DåfŗÆTn^hžÖŠ&²¹Ž2%ČõęśæĆķcIŽMVÖŽ{‹lyxSéšrŠ–7]ĻCų}®iš‘xfó\°‚’M¬wÉ*ä*AlwĒņæÄÆ iö:ńU–!žÄ]No³ģ9IbF?3PŃĒR¾¶>|ų„ąĶ;ĄŽ;±Mi.4}JÕoā øx‰l掵ŪųNęĢƝo$عSƒŒ×-H®‡Vo›CÅśWÖĻ(ånAōƇNoėz|śkŸ6I•F8Ś}«Ķ«sö¾Ę~å@ė>3階§ŚkH@KˆČćØŸJģ~ͧźšq‹O$ł0ÆŹ }½Ŗ”ŽKÄźž!ßźV~–ŅĪŚźēQœ¬VšĀ…¤™ĻEP9ÆÓŪāʍš+ž š[ąv‰¤˜üWćkK{JÖŁ•e“.æh¹i@ēqbž9=+¾“µŁųߋ9Dó–aiėžÕNR_܂”„ņŃ}čžn#×ļ|āM Q²³-“«0n5`}kō›Åh¾7š½¶­§ĒNš-ŅĒ×Ė$r?Jä”µŌżµh“<»Óī4ßĮO¦Ż„ÜĒD9ü{üwāŽ¹ūX~Ģžń†k„-ׅo-õ?"Ōåѐmäņ†ėUJ³Šiu’‡> Œøuc1˜Ll] _Õ6ÆóŃ~'Ź’jPjzWƒ|gfĮ£ūµŹ~𠓁łWÜ õūŪZx‡C¹·3‰TÉ“Œ”ś~©IX÷jU”bäŗOūXŁÜč’m¬oJ=ŻĘŸԌ6† @#ńƃ,^KOźØD‘¬ŪFßO_ēXTgŚdĻŚaįQu=ab,ˆü笛”i$“*»sŠąŖ}-8écžÕ–W,Ćf;×%veyÜ,j”æZꔭ”Ō—A-®ą„ĆƒÅu°;JŖ‘§šŸxÓŁš—Žyōó-õŗ.ųŚX‡\gœž¼ŠŁJ]ˆ×–©ĮĶ'%ēL-Ā•' w­ŪH@ ®9üéĮź:›ŃGdHcśV¼` ē5ÓOc¦06m¦Ų <µ“ā¶µ“Äŗeö™'Ł%Sћ'?\×LY±”a< ŠĪučäuuČ;s×Ņŗi¢œN‘®#>RĄŽß.\ē€kcķŗshĀ1 XM’łł|¼tśę»©œõ"rĮŽyÄ øƒž+^;$Xš7]ĢzœU6qT£„é– N ĻŁeŲJ“Č$v®+ĘśķĪ“>§¤4WZÜHÉå0Į™yć?ZērŌó«R»±ō‡üZų™/ÅKŁÖ+ Y%ń™6ŸizĮVŲĆ‘Ż_ ćōÆYżægĻžĪß4:K»§5õ»ŽXĪ$pČldsšŹ­Gk®‡å˜®&Įบž])„Z¼.£Ž×Õ}ßՙųŪe<7¾*¾dM­5ߖĄŒt8āæV¾xWƶŗ%­½šyåņĘõcŖGZł\^+–W<ŸsĘp§Öēƒ|P±²Š|S}§iöŪmŁ]ƒ‘Ķa6¹k¤Y«Ļ¹n+ŃĖżč)3črĢŹUppØß¼Ńį÷Ž;Ō|Oć½Āŗe¬²Ż]Ī>xoóŠż:ų{šŖ /NŌ3ųTxÆĄ±Ü4±Į{‘ĘŅäž!žkō[Į?¶ļ†<1šēŶŸ ž |4ŗšIi-­līåņ&@A_øTäpM[§mOÉ8ļ ŠĢy!øÓÓEŽ÷?9ōŁ<|ój:‡ƒ|?n%žI$µ†2‘ĘY‰Śøģ3ŠłæćĆ kOöGµÓ_%ŅT'|gū„jó+Ņ]o āŸ4lw5W¼±Ifr·„}}¤ģ“lČŪ¶¶G<Šõ(ČńU$ģĻg³¼ŌµŲ-ōÓ3NØTvÅ}AšĖ殩šå£šĒm :DŠS9ł£ć’Õ^„#ČĢrØN./©ōgˆü'ŒōÉ/“{ˆÆģn!–R‡q؊ü’ų§šoQ†×RмG¦BtŁHx®ĒśČ0N ·ł§/SĶĖźŖöLÅż—“SMųÆcįMhĻ%£ĘĢ/$k®x#ŠćØÆčŸö1ų'„xŪÅZļÄ?xD'ƒ|9*&%ü{RźõA/p EǶH=*[?"ńĖ‹§—äuŖŠ•¦×,}[¶Ÿ+æ‘üķĮf’lŪ_ڇöøO†žńdŚ×Ām[8ū5ަTł®¬>ž ŪžœqĮÉüÜÓ$ó × W•^w‘éų'•UĖų{ FŖ“Üy÷¼½ķ|ÕģĻ”mēw€ōx#®‘ÖdDfˆŸ˜šłæĄŗr”<šH‘ĆqĪ=kŠĖ֗?~’ųžlöšķJ?śT٧ć4Tŗq”‰#`T ܜZ].ūUŃol`a,«#„?ģ’qŸ§Z÷)=ęjņ>‹į巈„}¢öK„AX M}•ū)i:'†tézֈn¼Ag0ŽYYšĘ6ū­lĶuFGƒŠgÓ1Ži—ÜŲŁł{īøä×0žūѝIēŒÖšg“P֖8#‰CĘw¢Õ4ctźń¾8éVrĖsNāĮ”·ˆ«+ŖŒā±%Ó,µ;¤ŽÕ¾ŹŅ™cĘ~“ĪyDäum5¼5Ŗ[Łź·Č6ĻŽlö?{|Š[Ē& 72ƒĮĪx ęœVÄVöj²°ĻOz–{»«;øī!rpqœR%E"¦±«É«ŻÜ]KĮ'¢ā¼Ķ|(ŗ¦Ø!3­µ»1 Ϝ/¹®Ø­EĢŽ²jš}”ÖĘī!jē(Tq'½_Ó¼3-ŠD·e£›vF8­R±œęYž_*S-÷IZȼ±Šāą\;ŗĪqžx8ö¬ē¹ĖQÜÆ•ŒL"ŽUy˜ī*N+ŖņD‘ĘCɔø'& &dŠ\f‘^_/9<©¬Ė}J鄳\†—ø=±Hm¤‹ö»é4ڹēŖŌWÆöµ‰#F0r;PI­&§ *¤‚1ÜōŖmkP?ŁĀoUgČ=p3@†ƒØĖq6˜Ó!‹c+ų×qt Ģ1Z½°nÅØ¾UÓ­Ö+q³Ž;{VŸt<šī̼ó‘Īh1–ēc³†øYā}ŖüRĮ(9Œ–ČČĶ›“ė‹g Jó“Gtö«ĚN É ÜĒĀuĘhĖėłī-öG+µŗŒ`•‹¢ų’m?R_$`0 ƒõ^.»]rĘg’+C{ø¾ń©lā¼ĻHŅ5“óļmąx õ ”ĶåÓRźņŠßŚĒ>\0|r„sŸŅ½™a-ĆĮ5½ŲH÷mģ8čA '±ę½ŻÅڼ*Tn<`}ŚŹÓ¦±Ó& q(YW¹ É+˜^"ų‡Ąövv)m†#ĪŅ~“žÕ®/œ<²HķœI8 ÕDō]in Ófŗ•ź+Ą5=NK‹ÉĘ!ą€ ‰«Ė©Ū<7ęm,=ŖŸöl6sż¶Aę89ēŠį¾!ßéŚÖ‡s¤„²»ä¹b9ć •ńģ¶bd`DJÄ6 }Ņ;R–ĄO§ {i×ķmøveēmW‡M·ø½•ķHYYøĮ叽`O¦i×6·©k©¤Ø²qۚōÉõ(tĶiĢgɌ žx ™+ž;+Oā$¬PM-¶w«“ųÕ[‹Y£UG³ŗ·Ąß½€Ų÷ ŽF7MśķžKĆ vŗ&‡įɘŻéŚrC09,ą·v鮚&Ę.»ŖßhW {c ;™•p‹ÓžH¬ŸjW#A$Lārņż[Ž®#E‚]&īS{corRĄ§Ö¢’ēKæ½e·ˆ½Ägļ2°śV‚:‹mVā;xtš¦BIĖc…śŌwŸ ļoŻDļaœĒ"m>üśŠ.šŽ³kq6“ynœ¬Zw¼dc­B÷km!ib’XĪŠpMC€Ņ9Ż{Wšģv²N¦hnW®īs_#ų‡Äój:Į¹±HĢ|…|ē'8üŖy:Ę=bš×ˆąa§[^C²q ˆ8sļĶuŗĀÅs¢NųP‹™78掕œ¶åŽ=¶Šg=ņy$ Ą”ß5ĘŽųšŅD­g\u^„{V%( £kH…/eWF,¹ż+¢×u˜µH-“J€Ē|ē,ß|ēü)(•,įYķ–;˜d™'ĢĻoJāō{ %ūl6zpFćØ''5›¬å”‡O„&ģkLą/๕8CĒĻnõKLҌö²‹Ųq(r3Œ vؔbģ\oXźĶ4Q›YŚµČźBiŹŠŻ”yķÜG+Y—ķiAœŖ”cž[޵õ¹ķlā/ glwļYrźfŁČĪ$ø‰g[§=*…¦ŒD®-“l®rvŒn=Ķ\c`;+ '··ū»cqĮsÉ5Œśƒ-ć[øiēØč*ÄŃ=ą¶T”g ƒXr^‹=ā&IzŽzśźe±*6fžŸz×¬Æø_^ų­HoĒĶ"·i¦„I38۟JøŹĀq)¼ĢK Źzńž+®Ń“č$·‘ݰFI=óķD¦gÉ­Œ «É"½EŽ=øČłūVMćČsrī~bW²”¬mJ7Ń’čś Ę«¾hD¬7laé^Żšėįu½żŅMØCw·~Ł`åW=G½y˜Ŗé+µ *ĒÓ#Ą°i¶·6š#ø_õnŪņö,½ėe#q§YE-Ńūj®ˆ0ƽ|õZ·zn6G/ā{Ėė°i¬žŹŅE)™Ėß?ēµyÅnjml˹ød…roāµĆŠoS6ßCĀ|%ѵ­7@ų£ĘH‰ęŒHänŽż«®-ϱųķń/ć‡Ä‰ŚÓųƒÄżĻ©²8¤"8Ē”;ōÆ7r»ł“cwlčŒla*ÆbŒŽdv¶ół Ļņ¤-“īéšmŲĘSīYXßr†ln•`[KŹcÆ­D„ŃJ]ˆąŃjž,8*Ąązu¬ˆ- `bŚH'<:Ō¶MĘ t,3ŸJŻx#䘯¶ß(å«bŅŚ2!Y\ŻEĮiTd+Ų¦RĻÆ>~ĻśĒ‹¬aŌüKh~“å%Ō¤Äßē_|=ų}ąĻŪĮcą]"{½ZÖ{wóČąteģ+)K”²VŠõŲtÅ æ"æÖµ8dmщv¦z\õ#Ģj^+ń.ø—³¶:G„į•¶ŗÆ†°3ķĶgĖ}Ķ Ž=i<3©Oe”]m»”ˆŚV9Ļ'׊ź>ŗoļu&Ōā\ƒnētmĻēŪõ¬*E-ćNēĒ:¬—q˜4;Ys€zūU‘¤ų“JŅSÄ­eŸNø·k½R|°‘Wē g$éß5k(4n Ó7 JI1–ąž¤ÓäeŲ£ć„Óhwŗ]܌•mČ2»³“Ǧk×<ą]&Īm7ķ6ŠåŽrŖ@ģüWįoč15Ę©¢Ūd“‰ämĻoå^im£x{KÓµ§‚Ę#5ĘŁa” ‘ŪņžTĪx÷ˆ®.“ėIµFŅŅöŻš]~Rzą×…ųJ]7Zńʝ©3ū6x®”ļ„cŹbyŌ-ĶT»P|YšÜ³ėškZuŪG  3n,1Ō­yæ‚t{ūMfī{¹šņr<¶*śmŖ‰7Šé’mōµ¶†ÜO#0 Ļü#ø5õ>™ąM#ǟµ/]j·)46Ļ%²@ ’‹õ¬ęģ“‘ų÷āß Eį—m5a’™±É<א\¦ł%1gČü*čŌŗMuÓOIcšąd‰ “ė_”Ÿ³_įÕü;?†µkol˜-ØUX6 ō®®fLiŸ]ĀĆ|gų•jȞxH›+éŽ9¬jj8Ē”ņķįöW9±·IꏿqóF€`0?|G™ŠČ®®¹ĪåäÄč‰Ń隬žŌ“’éO/öĶ«WŚBē‘ōė_Z|L²‹Ä‰gńgL²ŌIŌ­”P[rG0\#·9”£„>§éoüöŹ—ą'ķqšOĘ7ÖPų/Ęó}Š8¤˜Ę¶ŅŖŒ?„—\‘_Ł6½„¦™Ø;یBĄ<,Fy5œÓܾsŚ>ų–¶“Eæna˜É=sڼćö ųu}®ų&MƉ ńv?Ūlš?½4;H’#ź¤dcÜ×4Ž¢lž’ą§4o„W↠Š×į’Ś[¶‰ °ŌĘ|Ųóޤäāæ"ļ`šĪźhŽBčĒå¢}(¤ō0ŖģRŽh¢VŽūœ6;T™Ć2†ų×dN9y’C¤5ÜRN*#m'5}l±ņXqŌ¤gd4ag3öǧ4×¹ä*–ÜÅnobٌ¾Z°cߞõ¢‹o „ĘąG\öśTO±Ń©õWģ]ūNė±Wķ'š·ć·‡Æ6iĖy™¬BŁÜŁHą9r;€Iō"æŅ÷Ą1о%xWCń§…/¬õ/ėöj6ĄĮ£pŹ€GäģEeQ7ö6°kvdrJŸųĪŲ?„üMa%ŗ• 5“äe] čŹĮXpyŽM›_ķū8xĒöMż¦Ō™\ČĀŌ®Y, –ģ«Źü żk·Ņ­õ@TeĪźŹO”­9u<×ć÷Ć«æ|8ŌļmVkOJ‘.¢AlØ?1įļ_x¶sNu [h”‚GÉ1ÆĢ[?6G­pו–§ģ¾ e\ā0Qŗäü¬Ÿžc”ų…£Śés6™xā(å =œ•ŒsėČÆÕŸŁ›ö y~x`ųßEh¼o§Ī–Ś\Ć+æ,†B’‚’žž5ZØ’AieMū²}OTų„ üLżµ¾,é¾6ńŠų{ĄņÅbšJ=”nÉBRŪåfļ“ģ+ņöšųA⿆ŸCńŌ:óéL=NŲ’# Ūø„g‘Śø&®īÕų{ 4!€ZŁ7ŸüĶÆ‹.!¼Óāš#ĘQė×é^„iā›;łą»²ąa؂>»Ś)Dé,īŅęę(¢$–m£šłwāßÄH-~$Zx9ұŹgĮ;É÷‡ėMµ±åc«ØFģĪw[{P!NŠ7§—éķōÆŌĻXˆ<+ᔉ¬ŅPŹ9$äēśS‰ņ˜¬^¶:RŌeńqŃ^/ōqh&óprß1Ļå^µy”ŚŽ[Ęŗ¹0é&EYń“g­wÓg:ķ»œ·Š¼g.‡įŪ߅^ī¼ņMņ<ŅF7^‘ū žŌ:'€„×’g’ŗ޹šY¹Gqq-§LŻŲŹø<ŠŃ»žä“Ę啨Qv©-Wų–«ńVō=oö³’‚O|ųß ų’Ę^šoü":ž“ēé7Z|”¬žćžYĻPĶņå} %Ÿ®µæųŪÅümeu¢|Cе³æ“øŒ£³)Ą|”€ĶqW ­t|ļƒ*W̱1Ėqr½HhūéßĻU÷kéÓ¼C4ź…ß–UĄĒį], EOzóe×Ōćd[ŌtĶ;ĚRiĶ¢ÜĘ­¾ŻķßŌ7Q^7āŸ’b|š\4ˌ‚ĒšĪS0®Ž9¼×!‰$sZ—ĢÖŗpŗ!–<ķVõ5ĪŁįb*?ĀėŪ8µ½ÕmÖžß »źŲāŗéüEugā"¦I`2Č>]¹éŸĀ·¤yU*XūKƾ Śn‡āūO!V{hZM‡ļ£'ōŖ> š*k^%·²’7•‰¢ÉŚKAēŠõ(3ÄÅcS¹÷ÆĀ’Ś+öų3Æ“¾ų‡¬żƒĖ6ņiz¼wh?ŗV7'i¢¾ō‡öņš×Äæ_x7ö…ųeā‹©”{T»³Hę¶fe $)&Z#»Źxć½H;č"ųƒį= V)ftŻé§u¶×õ÷ Ž|4šOĆ/Š:>—­_Żj’.Śm6ļ"bK*ą˜ uöÆNų™ĄÉRĘēąļÄ/ˆ3ŹEī©n•qü%†G>„žN=¹Ā“e4źpšĆMb{iōčÓŚAÜ(•Lo źB䁑ōõėÅxwln,g·kØŸy–ŽR¤-Ą£tl{TJ‘Óķ5Ōłʖw‘źöšŽ¤Ķ4M—1Īŗ?/Ņ·4Ódaќ⸪FĒ©‚i“wŠiq^ĀńĶTƒųבų«Ć±iWPźĄ²Ć‚E„WHō?Nɱ lt<ŌēÖ4ÓīķÕRę&eČÜEKū|#ń_Äj>²‚;K8[™n[l(Éo «-‘ō8Ģz£…©^[E7÷§?ńßģćūxcŚ–©&‹ćļN,¬ōü‰<©Yzķä·^1ĒZüų£ńgƾ!ZųŖžękPø˜ŽG";MĶŹD:¤S­¦‡ÉšŒ«<Ó¬„¤é’?ó=oāO€ü=mö}j÷JA,é™6p„Ø?–Mw^ ńV™g`š9‘<¢»qĘqIÜż^żŪψ4ńc®#šÖąü›[#šęō½^ĒKńmßĮÆh·śŃń„2iZLVƒäYŻpLƒźAϽLbĪLe5ģ›––>Dųog®x2’ÅüfóEāæ _=©ó2Œ’PsŪĒ’^¾Æżœ“}fĆö“ų ą««‰tŸ x£ÄVŚeś“ņ#įßmYZ„)ŹĪ֒t’ł°ķĘ”1Ó#ićĶĪŁœ Ē=+ĻØéj[o”­¼ŒP·įҼ“Uy’éåŽ|¦9éҹš:ą‹ö²A$Ŗ›%čHźk±µ•#†03ėB,īōŪ÷ŗĘģdE]”Ič+ĖõĶ-T»–Ī6ÄīXƒü9ō¦õŗ[¤B„¹`}kR U1‘ŒqŠ żž¦­°óX°±¬ƒiXą÷­¢¬”Nž ­cŒĀ©łˆļXzå“ģ!žŻT"œ6ćĪ+Z{ˆvåHŽKL 5nė}±6S ®˜ĪĮs:ŽīčĢĀŚXz«ńK|×)ahaaĆ3rk¢D×C^ŹD‚C©­&’V,ŠäńļZó]Õ OE\1vĻLčPE„8\ć:Ņ<ÜB6|9wć xóĮŸžkųƒį‰ZėKæˆå)]z22ü¤ ‘޽öĻż«>1~ÕŽštŸßĆ6ž†ī!ŸHµhU•Ą [s[ÅqUØŅq]OŹx‡€š¬ēŸTūNIEłI5gŽ×vķv~Kźv÷v±%Ā\ŖüāD;€äÕś#šŸć z%½Ÿö|j~H·ó ÉĘ1ŸLūׅ[ķ-Ģ?ˆrŊš”ŗ>0†óĆŚ[ųĀ{k9“y,Ņcåb8Ķ|gćĻź77PAkesu=Ă5Œ€Mz˜Z±² 1£e}ō/ģך½t/éæ|g¢K©iS4× ³%#‚2{zwƳōoŽ^ńõ„ŻÆ€µ]Fē¾s²€6pNÕķŅ…‘óĘ`«WQODcüQųCˆü;‰,Æķc¼@Z7Uł”ŽŖG½|…ö«­:o±xÕOĶŲ)ÕZžīIƒ†*‹ŻꇬčöŠ*ė“5¶šHófEÉ@N3ŠżRų}’”šĒÄ«?ųĻĮŸµW†üEšĪźŻfŌ-d†9nC$Ęl(åx8aĶrJ)Ÿšx„™ÖČhGNq“¶ŸÆłŸ žŲŸ ~ü&šgÄķ'CÓ-µfšżŸö{źjCE1l®gčkšbĪńÖhŽĘ钮@­µO Åy˜Ø$϶š?ˆ+ę˜Z•kéĖĖošmƖ‡a¤ųƒ\Ó¤øHŻn`#qĒāk§ŸÅVVInśŒÉ÷ ʽ{WŸcś¦‡Yc¬iśƒ¬ÖQŗlõĶ_‹P»€¾×¤ņ¹ ō£+ž¤j\ŚĒ²µĻ×?S^zŖÖŗµŃt!wœJ o} ‰dåU9ĻojŗŠQc §‘ĶiLĶ®‡Mk O€s]UŒöŚ-†”q%šŽÅ$ +tĆ Õ;}X_Cą[ ]é"»Ō49Ö+I®ŚIįa‘Žx_NÕ÷÷ģįūPčŸõć‹m/u}ģłOk»ÉlpGćĪ+hŌ8>£}RųŻńŹOŒš„w†D·Ė“Ę'ÓÖ¾*øXÓS›Č@ŠĻœ Īuģ> •X鬹aµ±ņśŠé,ąßr‘‡\Ü8Zåg\£cĘ.mįšö½ā+}<½æŚåŻpˆĒc¦qŚ“ģāņāŹŽzō ĘHжÄ3#ó×ņŖž"µX'Žé÷XÉaėQ-‡MtmL2Į {Õ׌2ł’¦”³Ž†~½¢’jŲŻŪĘŅG#/īŁ…»W#„jŗĻ‚m4čuFÓ®,žŃÜĘąØb|Ć·ē]qØpU„sļ??[2ŃŻžŠ’<šWX“·ų#&•ŖüCµĪżŠļˆ)ąä˜®[ÅšTŚÓǟ5?ƒ—ś·„|+kw “ø¼Óa’;”nF )ĪёĒqXTÅ8§×CēsžĆę“”ly”d¤½WéÜü…æš5ŸŚe¼±icŌ ’|äŹĒ«ń]–‘b‚Ä#3}„ŻĒ¼^{³ļ)ął4> ż°oŚ?‹~°Gib‹H„(^v–9®3Ćr‹;UÕ¤Œ„ŠŽ{×±‚ƒåL’=<~ożhÄE½”?ōÜB+{[GQÕ,·AhķŸ-æ„ū~”ŻIŽCl>Ļ%Ā”ĒĪM{“ć”ųUdz/ü-о Ńķ×CM9“éŚęp~µśū8Śj)²×¼s%¼Ń]ÜE WĮߤ€÷uE*'Ń:nqmŖ=ģ®’Cø2Ø\mś×¦Ś[@ß¾xч§µicĘŖĻ>ńMŚéó·ķbpéķK£Ē-ķŖ‰×Ėp3ĒzÕ;œģē5w M;ļžę !d9 ģ+" ęf€Ń°9\š£Ī‹ĆW ®jbĖ[·†å7īRć&ŗ_Ė}įŻFĀ mšWL§}åš %+›t25¢ŻĘĮ;±Ž”_ŲÜÜF.2ß0ČĒ4Œe.Å5Wm‰9  År–„qo~övöĖöu÷„ņO¦+¦ Ģߊõj®É؈”Ņm“lL£$rO?dEāKŻBīž+¬£Āž\Kƒ™ļ[9"&;GW½Õ• 6Cną©«š½„ŚEs5Ŗyė嶜ķĘMdŻĢ*±kŪŻ]Ģ1Ģņn§LW¶čńߌł>v#Ć’½)čW=¶”j¢ ¢YHĖ(x׌xĪÖŪMcŸzĮń™n6·„"&2³×ķė ģc‘ˆP{õSk¦Ēe»ķ!ļO—†yā;Ē‚²ÅhäKv5KCžāŽĄ°]„ūō4ó2OšŅW‘#S+ņOCZqjNp$‘”c©č('™œę”y¾w,wnķķY71ÉĮ…H4Ž“Õä³¶Xīa$1 y8®·M[W™C«õĮ E«ūkYćh¤aß!ĻJęī<:m|¹ıĖ'Ķ@ś]īŌ’ –wŠtv Ź%·PsĶŠ‘ܼÆ$"£)隩{&©lŠż…ŠĮ»œAƒV:­ņŚ;r.xųĻŠŌk®[FfŠÖ9‘œr8 JēūFk©$„‚‹Ų½UcžÉ½ŗ Ŗy–³ OjXƒPÓ“)vŪypNW9æ¤Ggg“EPĘ ņ(+œŲńt³ÅįÉZÜ™w’‡%Wč+Ć|:.5ĖGæ¶bNüu Š+¶wŚ~—Œ*ŲC“·N9a{‰"ø@°Nr(58’č֒ŁÜ›hc)łČĮ?Zł;[ÓR&1ʁ%ƒ“*ĪQ`sćNŅ9of†q–_—#ń犔Œ]ļY•Č äµ˜õ­ņC,ēĪVē­!ÕWSkKy×Ƀv܃ŸĪžå§xSBšĄ9™CÅČl9©ēÓ“MWEžŅóO‰(Š«©ūǜf‚e-–/m’Śå”„*D¬Tƒü8­Ż+W’ŅÕabHIźC~bÕōö€«ŁŻn%RĘøiīƊв4FäŒįŗńžEĄŹ²ńźwč‘«Ź  <ļ[÷2XŚr€<:ž1ŠŻ+ Qģ^¶’6C2 gœz×S¤āĢG$ņ qĀ©n)™4sšŠŚÜĮ$1™Cyü«†Ō/9ʓ<7süĀP>\z}h4†ē5¬čZEå»ŚÉ$°ČA,ēĒÓó‡‹ķ šĶ£éś}µŽsœŒ/åXó0hõƒ:OÄūŻ6÷K’ŹņŹ1$€( 0ģü95»ń[\:V›u ŁÉ½ŒļŹ N?„5H¤ī|ŸŠśŹKif“H‹ŒžĻj.pšEĢ-nźrCŒc”—R oŲÅz#•] Ča‘ĆŽ ¾–žĖP†hžh•¾aßź?Z‚¤ģz%—‰,g*'UĖ1Z+k Č“pl¶Kp2}éņ³S³²¶%D‘‰żä9Į«Z=ģEšGŁŪ=(øy®#ަ’‘†Ur:{ŠćÆ¢’āń&ó =ø¤gPį¼C5ŃlĄóTcÆZÕšŽ»&šŠXj ŗÅ‰s‘ÉϽ¤t¶»¶[Q“ø‘āĪÕPHĒ>•Õ6½jŅ Iä&O›ęĪZ±“6ŒzrŻŖŻ.@npy­5¹Ā2BUūTŽÄ’ėi¦X\(ŒŻ]ķܑ‚>lWŽj“Žė;HĶ 6x<持 µ¶¹ÓščU‰ąćµo¢[_“ęņѤP˜B>ōŸsqQ‹hįPąśɆK”/™ę³`aW°ę€5$՞(KHY{ć­eÅ«é׌>y ČĪp1L Wzœ9”o8qõ®fīŚįņŃĢșģ;Ņ”Ó[kt\³ķ=½M‚ŹJŁķz™-£w+H ŒžH5”„E–ِ*ć<’¬DŃ_Ræ†Ń†åvÉÉ¢ŪWņC"øN7Zc1ēŌ­X;©żįnA=+Ź’āeŸĶ‘GM½‡į\՝·7£n}š›Ć÷×÷˧Kq•“I¼ĪżcŪß5ö$ŸĀ²,6ó¤»×?hW0#’®kē1r»g³Fö žŚž×K$ņ0$;¼ŪÄ^5Gws<rp>aó·`;W-ČŽŚXńO|M×uh,Žo9Qw;I?•|ö²jחWF{©„žrNpq^ö•‘Sō7ög’‚}üHų“5ŸŠ¾"E‚¼öāC-āģiīu>ÕśŻąļƒŽųU¢iŚGĮ-ĻLÕDB 5yÉĪŁūŹŻ‡µz1‰Ė;įco‡žĻwāoģÆėrFVXäq&['©ĮĶgé¶>'ń fśžÖ=3Dv1ĒkæXÉž•ÓN',Ž“ų2ÓÚb'‡4čćfō†a÷2y Ö¼Z'‡­tóØj³ŚźŚ“ ę[źĻ<ūc„ncĶÜĒū?ü&Ō5‹‹Ø“[ų'ĆŚÅ…b™ūŹqōķŽ²o5½oX‹J𦚶z6ūD¬¼æŲzS<0-›VÕ-µ}e(W܃×1Y÷Éā(Æf½»]*…An3ōĒ>“ņėżCWšĘīŪCAu-²rĪŲÜæSÜ×Ͼ/|7ų_„&³ā­F8üVˆY­#LžĆŪÆ5ŃJ ~I|{ż“>(üZøm'Cń֏į՘¹,΃²N•ń%ÕåÕču}<·×o!vvą“ō®čĘĀ‘rŅHĮ¹ČćUģ%œ‘Ūš£Š®ļĻåØ#³Tķę«ćŸØk9œäŠūc;ĄFõĒj‘fp…ƒ~ļަ*ģžt6$ŻČI-ש«ØWełI­9PŌ®kĮh×p@ČĻz铽Y§25¹`£@č=kjqOsŻ>|ńGÄ_Ć„i¶8[¬Ņ”¹ėĻ~+ōCįÆģĒ ųGXŃō;;¼_āiV8ńgū¤Ļ5ŒźXŻÅ%”ķž8š®¹įÖ]7Y²›GD-'ٚ=ø?ģJ¹įk-^āĢ&™au –T\],xņAļŸŅ¹ł™Ž×Äņx;Āzdö3µĪæ{*†ūL’±ż6JņĶ:ŲźZ]ž Śœ6vĄo‰Jœæ·„>f·*.Ē āH,mÖŚélŠ^ļ9?}½æĀŖé-åĆ^ź†į÷gåæµDäuBm<ųļĀÓhšŁŻÕӓóņ>•£ą’KāO _čz¬‘Ū91W<*Ÿ½Ž™5ōµ"–Ē…·'Š<;¤Ųkl’1yd§1“s׌ń†kŻNXŅI5E>D^\cs(<ʹd͹Ž×|EcÕa’ŚMŪH~ Ō’¼ÆŽÅįØōfŗ67ņ˜ķļɎ޽ź =į|Ž)ų_Æ[x+Ę>$Į"NŅĢxY‡Eēµa~Ń^8×.ƅ¼žŒŁ£®ļ³’ ^1‘ÜÓ°XöŁ–ėLŃt}gÅצė@ŠlmĢĘYF3ĒŻQõĶvšŸķ”£WMÓü1e··2¬mŗL±»Ū#šmė”¤Ü`ńæÄy5{ ift’xp?…|óāøķu])ŠĘóJä©ē֑ĶģĻ  Ž™'ŚļDzm¢°Yu}k诀žŃü]©jwvz”—RXĀ'ņg<š}Ŗć#HŞ©ć][QŌZā.Ę `8FF-“ē‘T~ųÖ’JńEØż®äŻ@č>Ońüiøé”Ŗ‚>„‡[Ó¼\ņi^!‚'…¹FŁ’Ž:ū×Ģæ¼WuąĖŪ/$S :VgŽDˆfĆÓ¦?ĻzĪʑŠŲł×^ų›q©ų~ēH“µė&ՒR‡•'æŅ¼«M‡YŠÆ/um:š2ó#°øīM8­Jv>ĄYīüsšćĀž!Šć”źqDÉvv' ņč8ü+Ā×ÅķeØß {ˆ'ö22eoĘ®1±„ڱęö7ž$_j÷±Ia;E–WžøbOÆ5ö6“į]KūkCm>źŻœĶ‚N/«0ē:Œ_t}oā.›”M§5¾”+щ>V*#ņķ]ƒ©i1ģ Hģ9xņHęg„ĒMųG拹‡¾)Ōtż+L½Ō€‰“ ©ŽOŸ„~xč2Ūė¾9gÓąš;[Ū§™äe .H'ÆnMfōa~Ēeń_Ņü«j÷BŹŹMŽ )<ž\Ѿ,’Ā)u”Ei<XĪ|²@ĄōĮż*čO)ńĒķ5š×Ä×[W™ę]źO“&ć““óņ°ėōƕe‰īvĖ ŁčŠŖqcØĶ’©ˆŪŗ Wås¼w½?įߊ¦šæˆ¢æŽłģķ™rØękŖ;©ÕF„䯄Ź]ÄѦĘĻĄē’­]ŚJY\²ŖžJ™DW±“u¢Ųėš†™ØÆŸkqFĄō'n}³ŠüĆń§…ukz¶•ŖY}Žā+‡Ŗ'ŹcÉŚF=«•£HHä–G!”-2Gõ÷Ąéwśn­šĆZžKXõ}Œ“›Ä’BąōēłR7‡cŹ|]c©xc\]CL/¤ųCŌhŻ vø9ü:žū’ąžß“Ż—ķ…ū!|8ń÷ö‚ÜųæIµžĪ× w̱ʘRXuĄo£ÕK—‘§¹©ö.‡Ø3[²Ł"īY`žÕö;_Zźl:µ¼I:…'c ‚Įš$WDó½’ż,~.x7ā7ĻOKŪõ“[š¼ÆZ‚ŪöÜ扟éö“Ü[ź1Åo©ŁĶ%¶” yS!*Ƒȕ-G=Hž}YCHŒ"vĆÆłÅU—;™SēĆq^Ģćrõ…Ē•Ø ļä¶+›žāc3Œ©‹æØ ž[L˜(pœsRģHe°ēėZ@#&_·XęĖ1cꬖć Įą·Z®SŖœ‡ÜHf“{I6m”n\ŽMc_šnGķƏ| ā/ŲĻĒ7?cń…7^ų^Iī{»6bL`p„€ćŒ0žķLbŚq_Վ„Ļé’S€_+^mą®¤røÆ-Öģ>ÓęY’cŚwFO­yµMć.‡Į¼9o¦x®?¶hW8¶Ō|„ĮdaĻęzśūWĀ’“—ĀĻüTųk®ųbĪŽŪūrĆĢžŽI×--»J܎æst°¦ć›āŸĆcįēÄ?ųv÷Nš×MIYģ؟–DÉäWš\FŠ•Hoq]Ōe{6rT]ĢÅc‘e 9Čć?ZU‰„;Ż[$ąs]9Jr—ŠEYĖžƒµ9—i>Q;HėŽEjO7BkwŲŹ’ĻŠ`u§Ļ#~š"ż:Š8»•ć’h® 2a!ż}©­;y͵0Į€Ī:š i›üŠŖĘљ}ĻS_£ŸšJļŚ#PżæiŻA“»M?Ā^"œ5Ó „+e’,åü¤ĮóQŹwSŌžü¾xŽóÄQŪx­µ}:ךākgćģ‚šŲoį p@ōÆ¢ŒQCŅ ūB>ŁŖ× HXé‹.Ü[ŲÉoŒ³“¹ó­$”qĪÆēŪž ½ūĻń§į—†’jŅĶużÜčŽ&Šhųū1oŻÜ+6•sĻlH=+¢ł‘üOŹ5]1īō«ū9Vö L2ŖprzńĪŗŸ‡¾,Ō|7«­ »- Äl—1–’X„ŽŽ•°œĪÆKѼß[ėv¦›iCĒ'µ{shŚģėuut儘ŚOØ5”¢/i©ÄųīŚ÷ƖˆoŅX.  öā“įW5ļ‡śģ:ģ šX¤”-Ģa2²BxŚ@ō§e3ō‹Ań©»¶b{+€p~īyēŽ½ kōŠ,CĒŌWL‡£c­k2e…IČ8n+¼¶ŠšM8B–Č£”|r «$㯠¼ŅRęÖ)Ė8CÖø™|Upņ¼(UłwÖčG6Ÿ—²ÜŲŖ¤9ˁԊÜ{4ņā»±…7(ä±äŠO„Éqpc@P°;¹5wÄ÷W[³uēļp“ęõōÓŪGk¹œ²})-mšķĘNhö ō÷(ĮŠ)ėW“„#ΚPw¹?ć@… Ē¾ņ6x„¤äcnA5ƒā}>mBžįf€ŚŹņ8Ū„6ĻPøŃš'%ēd+–ēŠŃ›ėĀą†ĻėLØīR×Y$f‹  ʍIww–S„'#éHŃĢŁ ĮI;6ę °s^‹įxōĶOG†;{=·;BāE*IϽL¹ać->Ń5YfŠ…ü·Ļ@@õük*ņļūrŽŅX%…„ą?xS(åµ]>(;H¾p%JŽÕ$6,Ö°;Ęk–Čķ@Z|ń2nFŽŖĄc= lkz\“ZĒ}œD#õ¤#„$24SGęädzU붊ŚÅž 1vqĄ?J¹šņIµ z .|„Ӗ $ffŪ—€>ø?„zo‹¼k{lńGf­ke"œ„)Ēš Œ{žs„źnø’Y&R¤änķSŻÉq Ė%“FūĖ“ĆPh£b#«ŽÉg4w™ä_”'ōę¹}KLß.٭䓹b•Ę((Ö³»h’ I',>éÉéļZ—šdR°H‚\JĄ;ÕD鉛wążJŌ[ėśCø¹„00n“ަ½kĄŽ ½Ō4ėuńL0ZެmŸ› ņƒĻҵęGDcs\ńZÉzckpp:ןx’KķkĢÕ«ŗü¢5ą††ąĪNĒUЉuKfŠRÅ3ŽG½z"ŪŚjŚlŠĒ»k&޼óYJ6&ÅšéµŃ(„’>6|Ć%Ŗļ„ü-tš]ķŒó˜¦ø%Idjē#„I¤#Ōąuæ_ųCV·¶•›ęq†ĪķĄ÷Č®ē[ŗxlln-ö³± yéKCh£–[Ė»‹†b§`?8#„-ݳ:Ēq·åSGjNhӛRX5W™62ŗĘsV4ę·’Ģwm<õć5hµ¹ÜŲų‚EŒŗLc‘Xa}Edėž7æøŠ[[+··‘_ļ’)htĮ:ˆ/īŠ æ,Ø$1ļV4iā·½ö›<ĄŠ°»sÖ³žĘń‰»ńÄz•Ÿ†f†Ń^MFFXęˆVˆć#łžB¼CĮžŗŌµv²šīœ…ŹÉ3F€ `bsŌ׋Ž––GöĒŃ3ƒ½¤q9¼­æ³]ÖŅ—ßx–|Uįm7ÄÖĀĖZ·[äC… pPB:w¬}ēxZūO±Ei“‹f gŖ0ć žąĪGö¼r®i&ŗ|xCöžƒNš„ēĆ]+į‹é÷vf+NfūĢ?ˆcœ÷•󒈝<`÷—z™7s—ł³š#±ģå¹G³“ŸVpļĆöš¬z(Ö4ó_Äd²~ŅØĻB8ģxöÆ>øŠZÖķ™f_øEJ'ŗ•¢]±×Æ“żN93yn­;Ÿé_|U»ÖēųĮŖėŸf[jZ¤IgęǰąœTAj|Wć=•/4zåõõ׆īgŃɌŽĀ›J·N+õ³ą…Ō!ų}įm^;ŒÉä¬r@O0žx­éĄł˜īdš>µŠü5”išOöµÄé-ō ķŒcr^ Æųź?ĻŖü6Š®.mīyy”§<§5ŪŠĆTrzžić ‡~%ĆŽ;WnX­•Ė©ŚéÓ$žõī:ēĆŪ]VŅ;ķ1­–åć#»&FA«GŠR—^‡ÕŸæm_|'š<~'K{Ŗü5iR&Ō 'ķšß‘,yĪōRŪķÅ~TĮk~|0±ųĶū1žÕ_~ é?,öųqr|MšĆO2H&PŅF#’ž`ĮżZõ? é/ ˆńŸImäHėĒ’Ø×«AŸ1˜Ī×=Š]1kvQ_-®¤–óLź#cņqŲõÆÆæh‚k¬Į>>ų÷I“†]{Ā §q*¦[)Y£˜1q¾3ß”śŅ‘ł_g5p50R¤ž:šƒóRRN’ŸŖGćļÅ]µ_…Šk֊[PŅõ1+[©łšĻøąžuÉų2ī)ćUŻm™äõ5ĒR'č8¶‘ģšvåČēŚÆĀ.©Ēqfn-™ó’¹½Ė1©hĢ߈¾EŠm‘bŒ\FČ  uÆ+Õ¾3\|µßšļ[K?ł³Ęv›waƒĻКĪU,}ö]N5įČõLųSĘ·Ž*æµ»ńUö±{®^ź7fćP¾ž]ņ1<““õĢč7ˆ.ķœ"ͱÖDśƒœž•Į:Ÿc…ĀFœT ¬–‡čV­ĆńOĆ^}ģVĖ*¢Ć2Æ m…yˆ|}į‰ä’3ĮÕyĄŖŒQ֕“f‡o“­G^šÅƉõ6Óō)oa†āļnļ²£6ŅÄz ×ķÆĮĻŁ_Ąæ ¾=ü<ųāy|5ÆčÖóÄt«Ł‘Lb)×aH ƒĮ·„u?ńӍkåX(įč/ć©Ęż­oĶ6~^’ĮgžZ|.ż¹¼ ń_Ā> mĀ^$²‹HŌ/"‘|‹ėÄĖ,ø!‚į9ė·ß'ę}nś ČmÆ.o%Óͳ‰¬ībm²Y8;•ćn ƒĪiJV;¼ĒĻĆXyWw’R‹łJI~>ė×iߌć‡ģõyšļāĘWńƁļāŽÉćū q:!ó&sd…É<ēæZüŽų·”źŽ ×õ ėÖ’ŪŽŪH¬½²‡•ż+ÕŌū_83-ČUl6YHT››Kk“–‹¢²JĖAš&æq=¬bŪ@5ŃĮ+Ė"ɏ˜8® Œż~ƒŗ&Õåo°˜˜•ó‚G吟$,…]ǹ„+‘’*iĖåŹXņĮö®Ŗ!?ŁćfŪ‚Ēī*#.ęˆļō[YÖÄjĀĘ<€}½(³—QÓ.$“Š5»Qø+Ckm„yIÜŁćėN@ŹąU‰Å|¶gWį©­a¼Œ^Ānm—ļ&qø}k£7p“ģ-Ō¢äŒį¼6ŌŌ¹o3‰>UV_ˆ™¦³ø&)‘qÕC[ņ#)#ššŪł“ ‘ˆaŠžõčmd²bi°č§…'­Uˆ-¼s+[ı'] UŪė?µ[£ĒņÜ(ŹūÖ“öŠåÅĄˆŹœ7Ø®š;„eĪŅ~B·Œ­£"qź^KØI9«š^«Hl֗<ÜD–ßRhł“lČQ€=sÖØų“PŠĻĀ÷֓ g†å£„—PÅX°éɃŠ{Ÿ7ŽVMžó’ųżœ>|jų‡ńJżØ4 ž­*ŪĶ‚iīLĀģe!Ą³Ļ\Wš]ü#š_ĆÆųēJųuq5’€mµ‰’±®–/lå<0{ÓöQI3ńZ™Ö1ēup­~įS‹Nßnīśõŗ¶-ęSų×w¦^xCP²½š+iŒi,+‘µ˜sČÆ•~ųūJ×+ŠžÉi™0Ź8WÉ›éŒńU#£Vnœ¬{/ķqńŽ=ögoü.×tKŸÜ^i&°—;­?ˆ‘€sĻCč}ėógöCų’©ü(ń—‡±?īš"øĀœČÖØĖsĀōGÓå”ķŚžłėZWvČ^9$@§9Ē|Šåczp=KĆsż¶Ż‰ źŠCdąp§ü+ĪMȋPø2…gó€§¶xż+īn޲ŹōHŠ@TĒoZź¬u wSå¼ĒŹNE+ō"¢¹ó׋®× ߙ–ĮČ÷üqZŲĪQ±‹į™e†ŽŽÜń*ąż+ —R·…ĆøŽ$čKõ4Õ÷0”{ ¾Ö“Ćn®·h=W‘YŚo‹ōėi¾Ļ<ѳ³…VĻ$śVń™Ē\ƒāĶŽ—ć ›=^sr²Ę-®CŽĄõÅy‚¼kā/^YY½½Ü¶,<‚ŃTݽˆÆBSä3 J÷>«ƒĘŚ=¾™m­Kéļ°8]߅w’>6x‹Āž8Óķ|7§ßėš#‚5Ö’!īä ^½Ÿ1ˆ©k¦~µžČ?³Ļ†~%üHŌ|[ˆ­ü-šśźÓķ:”ė/üzø?ź—<+O'°'­yĒķßūYü&šŒīžžĢš>um“Ōµč' Ī9yŗäūÖó’ŠŌüÖ9†#ÄĖéÆŻS4ߟEēÓOϧä[E{Ø]ź7¬^ņźC,’HŁ$ŸS\ö½„DĻ„sĒŹkĆÆ#öČÓI%Ų熆é¾@ĶÓ޵Mmb¶3|Ģ„ø®hīsÕÜųöбÓļ”}Em Žiœ·‹lĮó-&tuS•aڼŚ8™wećīęØę›čiųpł:˜—$0Ļn•źz•Ō:ąƒķJPmÜĒ8 Č«±'‡nN‚žŁœ Ąä'’Z»ÄÖVę·ž A^8ÅsS€¾Ž7økrķd0#¾*+€e£yįz[£1÷:Ķ–“4–P¾ĢėėļŠóéWsłģsž˜4ĢZf†ØŚ[‚ZE™ĮĮē„mE­ģs¤7%U!нRČ’č`čŽŌ“‹‹XjęUv±£śVĘ„ØjZTÆs$¢h°?uŽ3뚾A(Ųæį’ZĪnR’ ¾ vojņź·WĶǘ]œ°ł3ĻćC‘æ‡n¤¾³½–H pvšM{Ż„µŒzeŗßińļL0ēęõ›Dæ7Ÿ¼[ųĘōÆ*Ÿķ6ŒÖ!EĪFŚFr:#ó`Œ³~ų’xńQŹ»vĒ•G ĻēA™ŸåĒ9ßåųō©ķ ÆG¹qĻū&€ļMŲąż 1ĻŻö«VWsĀZxPĒs$$R† ĪNŹkNĘŅ[°cIĆ`g$õ V!mē¢`ćpķ[×4ūėŁ“·)vīI὿ϭhųN]2āŽv’'ą ¤ųÖ}ĆC †ff焸Y˜ü¦²ŁĶPŸĢó± *¹8ęƒ9-Mk VeŽ+[SšmµÄIy$‚Īsź(cÜᮓ+[Y„°ßeĮĘĆŽŗ-+ ČdMźŅ)ĮSÜzŠ#²žHą…g1Ę cų…a‡³•ū.;`Šē%P ps@&XHķŻ@‘"ÜÄóŒb¹ Cˆ· uo0p*§Š Nw[³ū>Ÿ8®öF{׏ž"šę”uq%ŃP‹w Ų-ųP óĶRŹĶCÄń®vŪ»šåģŪģģPĪσŒ7G„Dā4?Tžę{VžĻ —# eøc\Å­Ö³n±™ˆK“9!zVEĘ7=oŸo„Qé·Ö‡·ĢVČ?‡ē[Zߎn­męŸM&El•rT`PL”cĪüEŖĻā+õ-.Ō[ĢęMå|ŽbśVü0Ņ-¬w²Ć F"DŽ8Ē”8v= cG¼ņ-&··Žįŗ ל|FšT·bŌ ø‰ŽGĢćŖā8¦sß“Įe~VöĘŽČP9'Ö½‹[š~wäCåĀdWó9ĒćZ–‘ĆMKÄ~ – l“ň,#xˆŒä‘ļ^35ūh:õ߇¼K;Ų"<›†L¬øéĒoJŹKXį»…'„‚ņr$Ä X[KMńĆ*‰ē č~“„°(ŲńĶJBš½ĪónqųW āØ`æ0µŌ`‘ŒpÅ`\QOH¼>ŒÉ”ζ̓½Bņߍv6:õ¶£¤\EØYXÜĪ<Æ.0\qžG<Š[‡cęĻxŠxĪi.o–Žģ¢ ĄĻ_ŌU‰7×^%ńMēüKLJpĀl„qĘ=iI‹’Ę·‡5vÖ|/S·[?³ ˆļé]§¤XŽ]-…€óB…@sÉjĆ%lm&•šFˆL„>8śW›ųŪSxEøŃŻžÜą‡ÖėČE]ęžü„£–`X[ õÆhƒĆ,£˜«ł|Q01ōŪ;«Ū×¶ævuˆü®7/ø®ŪRҬNA²\vŪŽ•Ķ)ö2”O<‡Ć€Ėv’HÄģŽ§©'ҹ{­8Į8†W.ćœćīūV|ÅĮhliN4šÉ,’ķc¹[=*¦­xžß Ųø]ųĻ҃HīeĮŖŽÉt²< ēļdu5×YÉpeŽąÉ˜Łzf‚ī­”³ØĮ±ܱ6Ā7ĶpvģÖņ“/:¹SŌš[ރ"Õꔇze¦£­ah—×7w³„i¼„ĆF —.†¬³Ąó:ģ.ŁēfŅŁ%‘CI`œd¹AE]CģjĘq3ߎµN .ÕfĄE.8;s“@’éńĒp.wI»JŸģ“‚6w“›°#‰B4FE@G~¦F–Gó7ș ‘ڲnąVā~a°ŸĢÖĖXļµāP Žõ s7ыn&&Iyłˆā±ģ-šņķQK3³lSŽ•.H„ĖK„[Į<é+fpüœs]>‡įĆŖŻ,[›żŁĀFyojąÄŌŅĒeō>ĻšV•”xGĆķʕt“Gīiś£ž‡?•?Ä’ü?ˆRĪH pæ*—åˆā¼eĢĻZ’ōŹä<›Wń‰k}m©ź;dՁ1Ęs÷ź3ųV6­ćļ A¦_k>*ֆ™iŹ"7cŠwéBCó öˆż¼Ģ«uįχ0ŲN<±—QƔ:Aå«ņ§Å^/×üYŖ\ź:ö©yŖK8>išRēžq^v܆Žj[Ÿ‘DnQq·ŠVlžb *ęfģjÜĀOR'g*L‹†Č4Ü£¾×br8āƒ'>ıĘå]2¹S‘ĒZ°»Ž29ļšĮībö'1ļ;@›ö\ ƒqjq•Œ ¶V… ܬÄĄ­ż?Jš`ĪĒÉN»[Ö«œiŲōÆ xJē[ŗ“·Ņa÷®žXDBĆw¦GJūæĄ?²mÜs“¾6—ū'}·š±R\ŗqĪMsTŽŗgŪ>ųw&‘ąŃqįm2ĻLŃmåņfø‰7ŒŒŽųś †Łn¼8÷rųjö[½niAK†~aocŲ äēW±ŗź?¼4:‡ö@¼€B v3±”ā}^=vÖźĒĀV—z{?› ”# q\Ō6 į‹HeÕu$¾¼u3yHŸź½Tų®YĖ”Ómžmć=õ­i,mV”»É„õč?y§‡_DŠKk8’Õ‘ž­{ī]›„k3\ńLŽū;L¶Ø9=zÕxóS:©¢Ū5żģTɌścŠtØ^gdbzЇįAy«Ö`S£ŽĀѐ?…ČĄl×ÉžĢķ¤ųĪ}#C¾–śö9Ł-ŻQN§Ś ˱é6~ ń%‹Mizf¹¹@@Č9qŅ šU³čZ؇ÄI=ż¬näy– ō…Z•ĢœO ųÅ”jš“¤Ś}½Ēö[14Rą®?Łī+™ų9ń^o„·Zķ¹ž÷O]…|׌‘0#”=Ąō«Amؾkz]ÜŚŽ½.Ŗiš’sņ¬¤ä°śäW«ü6šU–±ćkķjźī3e҇ĘūšÕK@”¬wš—‰ē“ų‰œ7wB‚¦ćnķøą~ƒłWńO_k:Ųę‘n"bņ4}ö4ÜHCŌ~Aą­vÄÉyoØYßĮ‘…ÉUFÓŠõÆ?ցiā{A}= Ń’uYøĒš ćŸĀƒŚ¤žšÖ™į éŗĶ¾‘ c#Ϭ{³g ńŽü×Å<į=voŚĆ¦i·Q3ÄŖ3™;;žØ ń_ YŪZB.n Üćē…{·ĀĻXĮād‹_WŌ¬³¤DķĒ±ÅŽU±OÄ^EÖćń•Õ¤o<3™Qödķ÷õ®Ļ^ń…•Ę€o“©<ʘīe#?×)¶LbĻ-¼ųƒŖéļo§JŸč×dD­' õĻå^­į]2 ±½˜:;ćiĒ#=ė“4ž$ųV×ė–±ė·)ŖiWs/ĢŹ8ōƛ3ž÷Ɛi7=‰…s“( gŪÖ¾½·/eH×ø­›ūćœ31n|ĖūFxU®ōsāĖ;iļ5 wføŻ ”ö„qMf|Oz¦Ū WƒÓ§²Õõ{ WB“ČŌaøŠT~ź ŸŹ é§3ķO‹ö֞*šī‡ńŹõ ū`·ī°ąpŚ{s_Įæl„żœ’i½GįG/|1ń‰K¤gŪ7€awöłƒüiĮ«Ł1•ĻģÆV°ū.øĘŠ™¬Š‡†\}ō<‚ćüėŽ¾ų®ŚxļōĘ`這ž*ęk”w*|nųqmćÆŽŚEoö;n¬% †G’÷ü+’ĮTdŁ~üG»ųÕ¤iŗt>ńeɵæŽ"Xźqä8aŪ~ ®xé!4~*ŻŁ&’ÕL>ėqŌW;<ņn8ž•ŪLꔣź/mu4L£c® aŽØŻČ«ĶibՈąEX•7ļēę•bEŚ€dd÷Ķn„…ĢWÉV*šYX)u=ĒjI›Ah^\y©¹wóa^ßš懌’f__ ><ųķģ5-Pļ|¼“ZXŪŠn••õ6¦¦7ĮŒŽż”>ų恵dÕ<#ā]6+ø%Qƒ»ånølž¹«Æ¼¶óą`K<ń§=H®DlŁ“7|LmīįežŽPå7STõź(lč§#ū’‚?žÕ6擟ĮWąĻŒµ™¬õ6H“łD“-Ž”ƒ čż·£ßė_џ’_x“Ā!Õ ’i…“jŽDŚė4|#цü+’®ēDesŲ­lć‘^sµ[̃żž:T>"Ń<;ńĆz߃|S£C«x_\“—MŌ-„MÉ*:•!‡ćż{W—AŸē]’9ż’¼Eū/~Ńž5šĘ˜ŠéVNg¶ž/’COr|‰±Ł€;Hõæ6äGW·»>_˜ˆBķėƒźiÅŻÕųgUžyH_9.:*ö&¾”š#”ZčśÓČ»s‚vž&›ˆŒæŠ–÷śl7QÜŻO?˜¢ŸĖšē?…xÕ4‰Ö9ņŲc“ŽÄńłUF#±śū+›Ÿiž ‡Z˜}¢ŁDöN¬?x¹)‰WÖwoūĘ@»€ļŲÖÉHī ŗ2YĆq°5ڜńėļW§Į}irmä€\(Ė+67Z³k„­Õ”–­&œ v ŅÅH¼1ö(Ł2XīĪXē5BśĘźĪ9ĀVQŒQėA¬#Ō­c*ĀĆĪMŹx>Ō°hŃÜ]Ģč­"“ž½Ø:”±NėH¼³¼Yb."vįN=+Żü5¤+YC,ČÆV8ĮõźkĘÅL’N¾‹łd0ü)NŖŽ¬§'ņ—'å^³ŃuOA©ßif&½ $»qĮ g_3’hA{ⓦ¼ä_!ŚéށäJšdŸCśg ‘ß®–ńĻč¾våOjō»]Bh-ĘŃĘŲ±ē1“ZÅ(™ÆxņĻÄ’ <'į›ČŽMJ»–H®p6“mŌ:ó›h ‘•¤„\޵·6šŽ„bĶö™¤Ml’čq¤ pĖĮZüģż¦®uOkÖ¤æŁ^Źö'pÉĒ‚üsWM«Ÿžqę¼2čwŚN™ŖųžūBńf„qml—¶Žt€ü«! ‚{šOć_”Ÿ³·Å}'Ć>†gd‚Y¼Ō»có”\ü€ž'­t«ša¤łģ}­©iZÅ÷‚o|S¤M%źYņĆł•OÅ|•”ų“‹Ś£,qŲZĻ„k™ Ry­j¶>‡ ;­ā] Āßõ?xoU“ż"Ć+erßźŌ’HŚóßų·āĀļh’ |~–wŗd¬Éc|¼—d~˜Ŗ=ŗ2ŗ±ō׋“8ī­ķuĖP›€š>š÷ÆĶÆų(4©mą}–OĒ£éśöųQ!ijHńüäąsĮėõ®j²:Ż(Ԍ\µåiÆT|ŃšūĶWZ-¬*ŅŪƀ£+¢¾’·Ń-ļlwĄŽh 0Ž™õÆ6tϼĮāŸ.‡·|Ń<2śPŠ>!x‚öĘ(ˊhŌ9_”Į?•jüDųgšŖĒĮwļšļĘ·:¹p,Æbɑ 8!»ŌFńX¹ō>•?°gŌµĮIso Źō$œWĢZå䗖÷WŃÜłĻ™?zb¤ōēµsŹ6'+™Ś>čŻp±Éo ō®ŖßtW%łd}ß„tĘ]žÅ=u=Ć6Q\ƾb˜|łkõą=¶‘ńoö]ńĀYYu"ŹļBhœm6ņ¹śœē¶+CłūĒ|4§’!šĘÆhĶsn·:tČ[˜®"Ź’żM|Ńį—ž×Qx]"‹k” œō8żqXÉj~Ɔ«³>‘Ń%’T)wČõöGĀļj:ĢV—omöNå¾Dąu$ū“ųW3V=Ŗyƒ„nd~Õ֟ ~hZĪ•żŖž.ńä–éå‹@6eŽ nyĮ’9ÆĮ-Śų‡Qži$˜M‡bOŽ5Ɉ?bšĘ¬ŖŅ©Z®×I~§¬|.¼ÓSķz¹„Ū_é÷6åUr¾ėčkĻž"ü)ŗš\šųŪĆ_h½š‰“ʹĶlē”ĘzJįęč~©;nFų/ć+]+T™Æau“žłŗzśžżb¹‚Īš¬sYķÜ äk^s‘»žāĒ„_5ģh“č·'æĀÕśYū!üd¶ų•į]Göwų|æŪÅ¼ß ^ČNāPdG»±éųóZĮ»Ÿ–ųĮߌ9T¾*^ś’·oü•»yŲńoų(ݦ»ć/ŁĘ[j s⯠źQ^Z`c)Śģ°QĒmÕłŁemi­i^“s$‹|‘’y;ś U.‘š¾Õö9Dé'’/ž“ėļ x~ŪAҬ“}>¬čAōƚ’iėI·e̊‹øłOń§ĢA»ˆšO<ąūUĻ1B…š+jo ī”f½ÅØŻ/ń/cU4żB0’f˜ˆē¤ō „±·ÄM ˆœ ՅcŠTyŪ‘œzUłĶKĖė•žĘ Ŝ)<ʋ› õm.óOøÓŚčŹ”¢SĘŁOéQf|¶fżÖŸSŗšN£«ų'B—ˆ“ģŗ…Ä+Ā!ą•f¤Õ¾!ŲĻ¢eī VŒ¹ń×„L唚ĮĘRrGēoÄļźž3ń”iiu'ö©±Īe#éÓÓš¬ ‹:U’)e·›»)ę¹gZÅ’f§[8|T³¼šwŒ-ē²’ķ4ĖĻ2P¬6Ä\ņÄÜ×ؓKѲˆŁ·>ÓČāˆÕ¹ó5ņĪY;Q|ųł­|0ń.¤kvÓkž Ÿ†Ć‘%ˆīąśtÆŃ_ų¾¦‹ā jvś¶…$ ę9–>8éŅŗcPör„ģź)£Ū>NóĒØĻ,²ŚŽ©ĄĻśÅé‘ųWŌw>Ņ5Ų#ßk ZІ¹źk­ĖCļ(f)ɳ̾2ųsFšģēńwP×īlŽ”Ŗéņi–IƒęmĆņÆĄé|1u„ZŁŲEl®#U˜ ^v.=Ļ{ ˆēÕtŁPH-Ł€aĘÓ^ƒd›cP č8Æ ¦‡„ÜŁŽUEO—5…ØBÉ3H£hvĪ}3ڱR¶†¼«bõœQ2ØuŽ•ŠhśĻˆ¼=26ƒ­Žé±ƒˆxoc[s™Ź‘ź3ĆŖX˜®.7—o1+“× ńY¾ Sā ę–8mķŻ²J Ś£č;V‰˜ŗaįŃšžĒNÕ#¾QŅüV ya„ē©ōļ\ˆSVæø°žĀhU-ÜIµ‡Žź>“ˌXš«\]ßĖ UÓĖį¼±ŃOµnŁŽN•¼JBœc×”äuBvÜĘųe¢ų÷ĒŽ)Ō¼/·gaØHīl ‘Āy žēŌėŽų›į½zćFÕō ‹kؗsO÷‘¾•’bž&)ٲžŸŖŽŪÄń_¤ÖWØJȌ"¹2ė]Ö|mgįčī×OŗbŽu^?Ž9ćšŅ7q1g£xįēŒü!ØĻ¦ėŗ>«<éŹĖä– ½ˆ#Ö±ōėėĖ;™ģ¦Ś0PŪ]JœüÕø²Õhµt[½¾øH%u0Č£¾9¬‡¶~*ń߉.4]X®/¶–Ku 3c·Z‡°F¼lŪ;kļ†Ÿķ®„“¾š½ķŚ¶ÜJBóļŽ±-ōOų[Åś7‹-ßL‘ܞD¼rA©ŒZ4ućk¦VńōšŚYŁ7†^쐣ܑG`OJ«ØeŽ «+w²‘”Fž9häężFÖ-ģĪj•z–“©Ų[ZDZ³:Ž3Xž&Š=jÜŪ[”Ž"yČĪįVaķnŹ~ŠėK·¼Ó/­-oģgFuĆAčTžuĒėzčķmw™’0“,X’ÄS1©+£Ņt«Ū^ŹŲ]üńäpk¢µšÕ›Āā@ŪzŽz×e-ϚĒSm;°4v–ö—vQj:M¬ĀąZæ !d®}ą’ų(Œ~xb÷þ|5·±–3’ńÉgć£ķåŗ‘Éé^Õ Ŗ(üć?į׌ƒ„)4¼ųĆūV|dų§įKĆZ^›„|-ÓÆmÄzŠh3“ktAžčĘ;×Įś.§'„õ#¦ź—²\LȁiKš¬^5NŽGvQ“¬5ŚÕ¾§øé>'ƒS“SŠm­Œē¶dJ”‹tē$ōÆ"¤īĻ©¦µ0gń¬"krMĆc_᪟»¹µi¶H'ÜÕŅI³*ŌüĶż°ōŲųǤͦß[-ŻĘ“i;*’$ŽAĆś‚:Ąš6Æ}£ZėfZj‚īŁ”ĢĄę‰}żėź²õī.ēł«ō‚Vā¼Wż¹’¦ąg[čsµčø’k¤°b ōƤ4 MNĘ(f@Uļ@n:“ųf½šŖģō†z‹|[mš÷GŌ“SÕZeTĄ żģdÕśē}ą-7ĄšUŽ• ³M©[Ę¢cü,HģxX™t9…–9QŚBa`z5tZ-…¦¤¬Vmƒ'—cę~’穬Õ×.,āĪyäš 7ōżb=Ną$ µøłOQļ^—¦Į¼ˆī&Łž…j šŠĖŌģY„+ Ÿ*ä–5¤]\Xėšuķõ·Ūt¤—÷ńä†eĻcTŒOfŌ|K£ß¦„ż‘£\¾čńå9üüėĄ|W£j0«Mqo=ØnWpĘEl˜Xą£xģHå's¤Ō6ŚÄ–»Ķ±9#µT7"Inwkž³„Ér¢XN8čq\¶”ā;«‹coøHŹ0}~•±“Ā2Į ōʟ½<ć® u×:U¦„s5āCJ­ó”ĘsJNĘ2ŽÆM†“ <ę;xŽącXWž*ÓÆŁį»”¼lSk.3Oʰ$ē'¼†;[½D4’:Œģۚą&–mNńg+ä)—¦h2”z“Oku`ÅI2ō/J]>žY]×$ %N+>m-Ot‘”l=;ŠM9ѲcPww©»kČ&†häēÆ5PLˆžc‚1×)0/Įr%ŒÉćr;WA£Kok0”œ6ō«ƒīķReĘT“.pvZĮµšō\Ķq ¼n­¹}1čjÄŁ6»'ö„vh—~MÖķĄéV]¦‰op«ß¹ Žsó¾Čdh u^HĻJƋRšāįn!Y¹éA ›–7dj„Œ®Ņy5ź§PQ°[}Ī ¹=(6ŠčĻ?Õ|3«ĶæģEī¤ĪT'SV“TŃ­Åü!.Š°ĒŻ 9NÆS‚ ϱ ›$ ņz}*½­…­…²ÅjĶå³rŁĮ&ƒ>[= ZĶķ•°{‰—fyP~cųS“żSH‹MŠāwœE ;F0h v2µ“}jŚ3mp^`Ie•ĒJņx&öā9f²ffPAć’(4Wź|Į©x2ööyāøó„ČÄ®Āpē¶kĪÆ“‹» ną 8;p¦C.YĒ ĘA}²g½u6Ž¢Œn9ČĪW®+˜Ś—Ćéģģ&Ō4/$¬$– qY1¹¹†0äFvįŌõ ¦īmi¾"Š“ 4Ų%¼?iW?7\‚:Xz‡Šoļ,ē[H 6źŁį1Ē­4Mžēųwuļ‰,nn§¹Y£”ņįĻQ^ļ­é3É!13]@[äläuŖžā2õ9ītėXä†1 į€Ćõ©ü}Ŗėö÷ךԬŽ&(›Ū!Ē®:žbāŽĖO»ńUÕüśtĘĪŲ!Mė!o+žŅńõóčf÷H¶œ}¤Ėóżå=ė>r…ŚkÄFIĒ?­{‡…VYŠA%Éŗ‰s“zPęÄÉu½=·žm&1³*°'iÖżŽ¬C}iŖh-‹*ĒļūŅ¤ē:Rf†ćNžE÷NF1Š×š_ųFeņm ·į”·qEĄõ?čRXOkÆļā!žąÖ¼fš'‚į<Ų–BTŠzŸJš’ÓP9Ó$M<åņz U9u$°}åAĪxļ\ŅŲ:é֚½ŌSݹ·nÜP/Ō×9ćm#Ć·+4śEŻĶ®”œH#ł‘€éŒōļY£Dy̚f£Ģ.#a» ˜äZĒÕ­īmķPļłYłÖĆøŗ]ĶōČm€ Š×v„ā"dÄChÅ•µM"†4œĖüG<įćß<ę@ķ“ŲP#Yt«ėĶ‚8Ź·§ ©tŻ!ķÆI 4į”TMō°—L¶“U÷Ē5Ģ_ĘÖÉ$p9ėėŽ³C1¢Y„d8ąŸJ֎tx†äč1Ö·'6ķ‚”ɦ.ķĒå;jĮ'öZŻŗŹ]¼±ųv¬ĮĄó*œ“×=M#Uć!$aū¬Õ­ż®–É–pētśŠĪS4.Äś‡īõ¹į< üFē¦}*巅/mÆ^mŸ-¶™ćŅø*×¶ˆģ§…¹Öų?įżžÆÆČš•«,JAĖoō“šg‚ o[™4ŁŽ ”óƒč+…Õ¾‡t0Ö>oń·ÄļOØÜŚ[ß9Ó¦å·ēӌאßjŗŽŖJĢetS€Tc"ŗiArŲŌŠ|āoŻ[ŲųsI¼Öµ;‰<øąK³ĆÖæU¾’Į8­ķtåńķaarɶžŒł’¹;_ū½kЊF5gcõĀ =¼š€ųĮŠųįķ²ķ$Åänć‡ßŒ¶yļłÕ¹u=į׆õ-;Ć^’„ĻUóX½Ü_½x$=Y³×®sō­“8§!t?Žų—ģ·ß5 Żjõ¶J–ņ’ū+éŒkźżĘĀ'Ž:ÓGцČĻ—,¼uõ==j¢Ģ%3ǵĶ/Ćŗ7Ž-µÆ YĶ©ėåöÉpŃnӃ*Ÿ‰õz h^kŗ£Cgk)īzäzō®„däyę©ā ]nīHt»K»{eRŽnwFĒ=„cXßXi’ŽŸ“°½t“yĒ·āÅZ÷‰51d¹æŁidv˜‡Żw'øūW‡ųÄśŽ±my%¦ŻÉ ŅHĆ, õÉ«Œ;šŸ|\żŖ<7š®kĶ&Kė]Ä|Č"+÷Sļžł”ńOö‡ų‹ń"ź;ORū%²*–ģWrž€nk¶•.¤ŹV>qž÷|Œ2HbYł<“ŽØs1Ą%ćŠč9§Rį#yqģĻLÓH\±ēڃšo ÜJČ>^jkx”]Ło^õęeŌFųć!Hēpźivojc«Ų·m·ÜDO'9éœVø³2yqhī$ Œ/隖`uPi1[¬Xå|²” Ō_c|żüań6ÖéüG§Ėį}Ö9ķ幐+IAÜ e*–5§ēéGĆ’ų'į< …t Ķ}¢­õÄ+•qՕp?z·«Ć5–”y{©–ŌƆ$>AÜ<ōZćN‡u8šv3\ų–ēH½Õ$ŗŠt%‘–āŅ#i@qōēń¬lé:EÓé~ҾŲęF}Ó9Ļ=Xć°¬#ĢnķŠŹø’Ūķ>¾]˜! Š’wéŸq]߃<=Ŗx“^iڶvN‘™A»”D¤~8Ķt©YXĀĶža~·:E̶°É-ÅāŹyFܬsÉҶ­4ż?Uyo^‹Ę^6šwˆŒzLģgbŃātݼäŒ.:ńư|ā_nšž­ws6ҳ©ˆaćŒw¤[GSķ÷ĆŠ–:ŌŽ*†ūĆÓH¼æ™ˆa÷ ģ+Õ>+č/ā‰Wƾ†žāĘ8ŃDĒę,x;On ŌM Ęž“¦k:†­ Ń„–Ž$•v‚9!š1Åw~ųUāĆņų—Å×Čŗ²¾FÓ/?Ā=«Ķ›õ_]\xƒV²ŃµIm\®Čßē>ßZĢÕ5ĖĶ;ƍØßé—k« »¦Ysœ’})Ę:£c‰Ņ§æ×drŪp@ć³ž.ü2‡Oš^™oįé×[ŠķåyU·ĘßĪŗ#Ą7ŗĘ©ą+/[éŃŁŚDĢ­!L>~µÆ¦ĀegĢkWPÜDŪcd~ ćĆփĮ\śÆą~ćx¼Ś÷ŠoSQ™äp²²c<äzö¬6ń“ž3ž9-7Z“Ū`łK2ŸVż+”r+čn|`Ō š¾ƒį’źHŠE~ļolYy,N=±_!čĖ«üIńt¾Ņ¹%ćĪFX9 ^ _!żŠšµī 4Ķ2ĀüŖF–ńÄŹųBć§į^gń»Įš]ļ‡#ń ™¼«55qņŒēģ KFW±łė«ż²Ęõd<»rø'ūÖĻ‚#µÕüŪ‰BÉsąŽ{ā£f4Ś>­ųsm'Ū\šńšė^5„øG/ŻqŠcł}+ɧ°µšĻUŅ[N“I6ņ“&)#Ū÷OB>•7ŻFēéŚ~£“@æ¹²ø¹…¤’Ü’ ä®0+Õ~k—ڶ½ØŪ >Ya%<ęÜš‘ųP’h‰3¤ų§ć‹?ź‹į„Į«Å%ÕI“œōā¾Fń>¬’n]žāāīāSūÆ7 ķ`fŸ"3µĻØægߊ¶÷Śn³šöņ[EYbwHē+¶F#޾!ż¢ü3¬ųWÅģ_O¼µ±˜/äł$ÉūĄŌņZW-SģxO&0Ņ1Ī{Ž‚©}®A)—Łœ}EoŠÕ+µš—Ä÷žń6-£ż£O’ąˆ¦ŅæP“=@ź–0ßYŖ…•|Å@ƏóŠŚÖFsz›–óē‰c8ž,sŠ~§¦ZźÖ²iwpĶop lҌįO®Z©t3Gę'ü3įė޾·‘Rß ²‘•$ōĻQļ\„Öā-čUÖŻ°0:×<ž§DO²æfĶ^/ŽhŸu«Į>‡©ÅqīĘau\”SŲךxėĮśßĆÆė }§Žé-„msÄĢį‹#qĪ~_ʝś”ŃżŚĮ1?i{_Ū ö8š/‰ZöÖˆ: CMÖ­„›¤G@–ē9 #sźŽ•ö½½Ģš&©” ŗ:°FŪĄ<õ5œ÷6>ÉŃÆ ńƒi} 8/ž<~\ž×’²W†’hƇžxOÓ§‹Äz|ڇ‡Ł”+żŸŖF…ƒ«ØŹņ²9°ž"+'ēĆńGĄśļ|Wā_ųšŚśĻÅŚäŗ^„hą†H‰\Žä½kÅe‹;Ų· ņ1Ņ·§±”÷2ībņfi,„īąTO)oŸhŽHķŠVōĪyīZŽ8ŻŃ¢ ;7 ØŁ¼›ŽćĻ$ ЁåāF É'ڟl|†+ŗF''“ڦ%Į—c—2«/ļ’ Ų vbšß ¶E*Į‡U‡õ]’ćžÜ7j>(ż…¾$ėJʰ›ß‰>ģ*2^!ܐŲ鍎µżuŻųvd®9q‰ś×5xõ7ŽēœŽiFX®4łĀæšr¹ģkó÷ćꂚ~¹‹~Åē,Ī-ue ‚č2ÉöĻźkĪ–ęĒÅ?~ĖńĆ·‚¬U&··Ž[Ė|*młē{ž>h†Rü%ų£®ųz;;»M&iä’Õ™ $äØśV”eļ\ųĮ.ŃÕ”„q‚2>õPš?;÷ʧĮ㔯E3Š¢*-¹EWó¼ŻÄ’ pæ*œmE#q8Ŗ‹g-ŚŅ­aøqÅWä”˜ŻK{w§)¢ė·‚9‰ Ć ś}j1Y Œ`^“¹аFIPzŠŅ\Ėņą¬Ž,ś»ö ż¢5ŸŁwö‘š/Š£ńö•įm^õ,õQ»‚XyNGL†Ē5ž‚Žų½„Ū/„~.ß¶ŻUi^'XÕŁNĮ|«‚;+^OØēŠęžØģ¦}ńg%°æK@ŁTQ$nĖ*‘GŌRĮx#æ•AD“pvgūŽÕĆR:›Xüw’‚Ķ~ÅśoķAū:źt½*I>"ų> ÷ģɉµ-+’ń’µ·‰zańŒ×šŖųvėĀŚŽ§į]F+Ø%¶|Ū™KĆü'51]”Æ¢j’ŁzˆøBŃK¼)$äńé^©Ż£Ü-ߌĮ‘ č7wę­E’ŹŚÆÄMėœŠłq:sņŽ2v3³‚v±Ō“yÅÕ¼Öé*‚Ż9Ī;äM ŹĒGš—Ēzφ”¹»–i4żŒ¼^ćśEąķAµ_h¾!Kkz <”¾•WhÄ÷ >8Lä 6Üę¼ļĘŗmÅÖ»=ń·,× ÕL’]l™ŽØÖŃō Jś[ ŚTŠ?¼@ōģk­ųĆÆiv^ŅlÆlŽēU|g=Sh<{Ž+q'…ž©¦Eząe Œpq[š_ ML_ÄB…ł|³Č­ Œęśn5x§7Ř;(ĄĘ}¦mBģL§äĻ9ō§2`ZÕ$‚×O’&¶óQ8z±į‹=śĘ+ԘÉl~S·¢·§éY•ÜŻÕobµ†kpČč{¢¼źćQ¹žųy¬ĪģąE"Ńfī&7(Äe8=æ:†öŚök¤’Žōˆ°€NшV ä,WžæzŸosmgt²6Ģ_ҳWl£ØÕīC­›«¤9ēoµs÷×ķgv“FX Ē#­hdęĢhuČ5 n1p‘@ĪĮAĘz~« Ņōčģńć !‡j Œ®spĻkw“ńĢÜ}Ӛźtżźź#,VĶ9ū”T}ćķNĘŌßCšÓuøę¾vh5‰Ł+‚ ’ņ¬Ż{ĘZlśÄ–Ÿd- æƒ‚=hEŹ7 Ž+W§“1ć"¬ŲZFm$¹’aöųŪŽ1ķHĄÜ±ÓeŌtżFk9!G‰7e¹Ś~•VāM&’I·³ŌķÅŻčm…”pŻøÓNĄ^o Mn†Ņ!<6>^qŒmćŠŃųk§Iį³4v#{ī&N>š>µ¤eÜŽ;¹ā+KU†ŚöÖ.7Jļż+ČõMMÕ®ĘŁõ\*Rz –×^ŅõŽĪ7‚ę8±ó6AoʹMø±»ŌdŌęŠf•·Æ=Ŗ[©W]µž RāŌxĘ8je½¼ŃĄgdoœgéRѤéæ“H&Y﵉ƒ7”¤œ°®‡Å2˜“ū›Ūm<^KČAŒÖGT‡—źzĶō¾BÉ(e8ć\O–’jV9'8nõ©¢•ކ'ū1Žō1ņ‡šä­vś†‘m{cż¹1ĀFšŒy¬>‰£Ąöė,6b•ĪĆźMoiZ5į¼¾¼ģČ1ĮéųW;fčłźõ/SW½‚vy13tĄ­Ļ’hcó‰UĻPkĖSX³gCŅ<ū›¶µšBLyĪqųV¦…e­ł×pÜ¢¤™żÖIžżkRĻJÓt ķCMtŌ Ås±¾aĒĢy jŠfžo8Å!‰‹qČķAŗ3ƧI$A f2Oį]ރj±Bžbć'Æ÷©IčkMō55Ķ1ē[7Šö£oVō’<֖›­E “ÖpÆļ”ąœżÓčkŽ”ÕLšķcĉ^ž…ó­Éaƒœgг®ųīĪÓĄÖ^ »°“ņŽüŻĀč?xXŒ0ć·Æ¹ž“xW…އ0Xx«~ī-śÉs?ųsą÷†Qų‹…mī.m&½ƒķVĒQŽ3°{ž8µäŸ¶Ē€|5įŽžń'†wčœŚQ¶Öbˆm†K„ēq^»~½y“‰ś–ŖEM25k;;¤ž;“$a›TōĮü«¦_ųŪUŃucĆŽń½¦Śƒ%ĆYŪ|„óō?•eŹĻŖĆbU“gįM_OÕąitū12C!įŽ ©ä{Wb÷MQĻQČĻFSM™™‘FN;ū׆übųc}āŲ†æ„X—X!"į˜n@ļņ޾õ“7>S‹()`g~šŸ?ü(ńÜ~7š>£ą÷»··ń>‘$ĘÕƒ2gśTæPĢÉ4—IŚ’~µ“$}8r4™ńGģæńVŽŁ5»OŖj upžH,øą=ŗtöƬ¾(ų!|wąéu­%ćŸ_ŃH½±š3óķōõ=z{ūV‡³XõO„—VŽ2šžgzńK ‘N>ėƒś’*üŅ’‚ü.ńƃ5Ÿųjö}2’Ā×Hš–žmĮŽ]O;Įč=~µĻUtj{ź©ł÷ąŠtōla)$OõńO„Ņīͧµ…VeņZ­įQ ŗ\śešB܃‘Ąā½#ózŲ‹Äóóm>›}"<•s·Ä+rk¤“ģņ!(żžµ”äā%}O 4«+™4›F³‚C<‘åvŒ–śW¾~É)ń§€¾*I—ڧ$qź¶nI$ĘōSїÆéҵOCóī/ĄŃĘeõšõķÉ(“ŪéŁüž«µ’mßĻšĆö¦ų­„iŃłzNµäxšÅvT®ŁÕqŲH­ł×åäés§ų¾ń÷Ŗ_ī’õź%¹ÉĄ˜•‰ÉšµbļxBž©$žęš~gŲōϵۭģ’F‘D„ÉvĘģ•ģw’§Ót›+_ ,ÖZŹ—Yn„„^Ÿ.=«)#ōŒ.OŻgĢ^1¶›^‚ž;£,÷ D“1Ėæ^§ńƋüeįՂQēFĢń¼Šók÷?bį)ū%ģć¢9-?T»Ó5(/l’)&ŒaTšōż+źę½Ńļ¼#oįJKo#\ˆ!F='§æøŚź~“ģ|³āļ jß ®tÓ«G"is»Įo0ĘŸ^kź/„ž&²ń‡$ŃVįeŌ"Y°v€sŠŅq™ĢŽ6±¤ĒØiZ¬Hń ›Ė „ĻėPhڇŠ4}oúׂ.®l¼eg{֔Ц÷iאˆ6#ø®Ø¤F"Œ%+§¹ś×ń;QOŚ×öAų…ćM#@ŠmõŪ½ļI×ōķ›gÓõhAgź28Ę{ƒĶ~x#[¼¹š7†õ ˜į¼··yćą©üTÖÓ]Oęo 0‹ [Œ®©Ō²ō÷’4ŠOx£Gń†ŸSÓī ėÄ5Üy1äœĆõ®KöĘšJ|:ų—ą=;P³ņtķwFƒWµ'88óÆĶRžŒżŸ'Ä{Ęe¼ÆoĢüæ·z_‹õčaY—O®ŃÅH?פk7QŪh’Ž\…Ž@’BÜk™§Ō›g­|%Ö|E ųFų‡ą_Ą—vWk©Ł¬Ÿ;F1Ćߚś£öƒš†>:~Ėž'ųØlģ­ü}§ˆ®­.£\e·(Ś}rņ«Ń-N/n÷G埇on.¬ć&Ölc‘×ÕĄ£;]pÕHś ,“;­3|øR§Ėīkč‹? ųvūį×‰4¹'‡[Óēģ3‚²FÜ جTQŻķ,|Ėń#M„G&ŗ—#ːøYœśÕOx[\Ö7Aed× XlŲr[éV Åķ»6³¢ź¬š…Ķ”ĮŠģ”m ÖĒ…4KÆ^Ūiöņ[Ē4„„i@Ī3ųV±] =Ŗ±~+KØw‰£†(Gø5±ci=ŽŃH^yŃ TQÉĄ­VĒ-J§OńKNŅ'ųA§łz2Įƃū»€ ;·R­ėھyųmÆHlžĀä*Iķp@ėÜUŲŹ5.z4·±X™‡5ydcž÷ó«†ēJŲ£-“Œ©ĪN*ߊ-“}GAŠä“±Ž×_²™·Ü(Įž&ģßNOJŌĒ-i%ŠmE•†»¬iÖWVĆ`gżsG7sįó®iiŠų‰ÆX]-ĀĖż“¾&ßxŸW“šSK§]Yé®» ņøĻ'Ü×ĀWR$˜i6šk‹-ϵĄPåŠ<Æ]Ž+I¢»Œ•¤#hźk{DÕ¾ŃĄ’»˜¹Ķxņzžä`v‘ĒŗŁ]Ÿ2u5%Ͳ\Ū‡i;m8ÅKFœØĄ j)7FŹq’jüDdļėK@äEŒļ=zŌ±€īåŖ‰öfN„d—L™I‡ś×1mŖłWA<”6܎ßZq±ÓĘ`#£¬žąę¬Ęβ6ųž@03P婕E”Ęx›L½±½±Öü;©\izģ'Ķ‚įö"¾ŃųcńāßPš…įų©ė^1žDwü“0 wĻJŚŗžaƒ•KY٧sēŻsŹŌ§žš,~k;19äŒ×ŸMhņ–6³›yƒ©ĮR:żjÓ£4}•š›ö‹Ö­­lü7ńa-¼I§@¦8ÆL`ĖåĀæÆÖ¼’āgŠ4æų’mfĻLƒO·EĘåBŽųØŅę-Õ- tāó& t÷ÆšŸ‰uļ…Ž>Ņ|u é÷Ww§‰IÅŌ‡k£ īv±ūąx_ö‰ÓķuŸéŃ¢]"‹›/÷¶’ć7×Č?“æĆך÷‹&Šo®|DZ0H «dćź3ųV®™ēåø™Aū)t>vŃm Bę=k™ńĪŸ­ ˆD!%A!({zW<ćcé#RėR+‚A żEt’SĖ*śõ‘’-īŅ2™ßŠŌ^%^h&?$;ŪĮ•yĒzi™Ķ#Į·–Ҭ1‡/7ń cڽn;›8"ˆ„±ŚŗbģĻ#>īéHu€–Ę8"øĖŸŁxzņ?µ·É+mū§ ßŅ»cSCĮ©KS·i!šĻĪURŒ26ō5ęš÷†`Ō&Eņ.Ü<ņ+)Jā„łõ_Ėa›bśĶĢįJ–Ś{·å_Eͦ\xBšĻŒo’ų7Sg²¹ņ‰tėžqæņż=ėkźtĘ:ė”ŚŻ‡?/EGsii儼M‰Kšé¢Ģ&Ė’ŚV-:ēćLӅiļ¢ÓcIeōpq…pś£r­£“?.;ŸJśL½Ś'ł©ō„Š|WŠ’·?ōÜįōļA`ŗ–Æiiœ”ņŽx£ÖøżcÅ7¶Ö« …ģ©,ß»‰ŽrxĄģDü±æcæ„>+š¦½wńZ²M?P•U ‰ŽZ$äSœ×ėM޵>±\j ĻpG$Ÿ½[Ę'ƒˆųŽgĘZ,×zr*o³\ł€>ę+ģ+šœšL—+p÷  3ž imĻ6}N–÷Xk ‹&2Eū×ŪøŸŅ» {KQҽXä.›ŌzÕ#’{w‡<n)ŗžµ6‡tēMŗX^@ :šm™Ųėü5ć}3Qµ—K»d[ŅŹ7:÷«¾Ņ¶k$7Ėø•n sŌVLĘJĢļŅŽgčx ā>µN-7NW-åžüwōü)ŃZņĘ7”VÅRŸĆ÷FnƒcēŲŌÉhCĄß$š]4 ČžŒ8Å,-ĄrĻ$Ōr½ŒŚöŽęĪņ9nF¤3éZń,sD6.Æ"­ĄEø-͵»Fά;€éXs}i¶ŽŻ$Ÿ2d0\•ĻcķM+ī:ĖyagēŁ"\żįƒõ­«½°ŗš$!öœ{})‘3ēk’µŚkؒ[Ü\2œŖØėųׄI5»Ū¢2vLœó¶‚9YĄŻŗ’$õīE6 ) !Œl”ó·Ø[é›¶Ėo`gØōÆP·[e°ņ¤d‰ų#ւ¹Ł{GŌæ³õn"ešD ‚zdV¶½­[k¶ŗ½äMėĘEŚ9Īłé@ć#Ģuß·M.šönį!b[žHĮ’«„Ø[™ŅAęG€FF?Z ä֗¶q™ą2ʽIÅaK%ĀŲŖBeņTįr3@x`-”÷3&iä’…z‡Ū²¼ŪŖ|ŘšłŸÅRD¾"¼ŸOø‰ķĖgä[=kŹüO§6„“É̈’{½e(Ų0æŅšHš=Ķīą”ä‚mgRѼøķXeS“>*›CŌµ»į9Ō%’āŃŁĮ#ŒzWŚ-u©¬Ė;#7ŹIČ‚‘Ö^xN Å(Ī@9;€äZč“/Źŗ{,Įgf 3uæ^)—{čyuĢv~×ģńķ®»zu껤ńt³@ŪI•C ä1§?•MŒ%½Œ(ē{·˜FŒrA"›ŚŽĄĢ¾īō¤\oŌķ4}JO**%²M6rłéšĀÖ®Æõ EÄn²hžUœßBˆåxōØh|öÜÄöÉéSŲź-ws ÄA›•ē5˜’6]ę·µŪÜīvČłz`zמI.”aw9“‹IåV £{O‚yeFwłē5WÄ:Z\dÄ;pyē>E¤“Zݬ;ä$qž•č•C Ż!^AśP+W©9ó¼ĻéKm¦Ģó®éAŹ®8cčiIŲJŅąøšÖk©O•2· «Ā(ļŸĀŖ5¼lŒė^¹ć­`ŲÓ*Ēl­ń<ąē#`o˜ ć5$»WhT…OAżhL 6c¹pŹ3ĮĒ40I!¾Kh®›ģŠ‘¦I=ÅvP£}Yv9{8”ß$Ķ·#r–ÉÜ=+ģo‚_±ĒÄŽ×7ŃŪ|:ó6Żźz„Mc…‹¹'Ö½Ʊ…Y$~Óüż–ü+šA6~š’ü$Z½ŌżÄxäō\ōĒ­u~Š kņj¾-ÕŒu›q¾āAqŒēnOlgž•Ńt<Ś“;ŻWZńgĒ Eµ įY²C –ŻžtcƒžO>ĒŚ­^h÷~ øžĒŃü7qj כ>\ąu>ųŌ©3¦Ņ¤²ųw§KØų†ņ}W[‘Đ"…!œ&Üw⻋Ū_’gŚxŪ_ÓćÓ<1>Ł¢ņ¤#ū„:~ĢĪhĀ_hž&øœxwG¹°–9%Čä°l ņ-mbµ½Ō"Õ/?¶ąšPĆ#qB‡#Ņ“ŽĘv8ŻK[:=¼šXģō U†q•Ē5ą’š‘Y¶”r¶­5Żü˜Īw?ø«šEQńWĒ~š…ŠźŽ5×m“„BZ?>NKį ėļ_˜??lżcĘ2Į x2Łl4 `ŠÉ3¹Ų¼§¾k®2™šŻė]j•Üó]ßĢs<’¹bĶź*Œ³ąŗ.Ąt„uœ“} ,@&BFńŠzŌ1ܾŠIķŽƒžSģ'Ļ)''“łV“qFäFąĒ2[Ņ¢fb}ž)Ą(ÅUzńĮ¦Ŗ¦ņ›2}‡Jˆy`ĢA¢bĖÓń«ö¶Ę]¾bķ€ĀŽõ±›×DtVöZ9rÉņŁė_Dü!ż~)|XŌ,`Š“ ōż9Ÿ‹łÓ(Ćż•®yK«.+źĻÓ?†_²gĆÆ…:¾ŸwńŽŪʞ/åāÕžŚōÅ}qe.“ÖOā‚¶¾•b³¶@§ge_n1\R•ö:£Läõ i|_®x†’Į޼Óō›Y6 sĒ—óÉ’&¹ĖY¬|ØÉ{5ĻŪõ["͆ƒ„_ĢŌØšĘČĪ–YƹuŠķ­¬ŃnXāPÆóŌž"¹ŪØīōk»iōŪyŁ%(Č2HRŽ’=ėXĆøsō&ń‚|.ɤų‚?%ö§»Z£7īģAćÓ„O»«\j6ņG–™ –Lm.µ2‰”|gÆųZZ 3Į’hŌå‹ÜI'Ec’+&+Ökļź™•7(åČēÖ¹$mōöŻGZeÓ­ā†É”,Š²ךšŸüCšē…ć#iėr«Fba–AžĒ^õĖ$vÓ¦yē…¼ ¢Üź1ųƒ[¾¶ŽĖ>^ŠćĻ„}ēā/xgß ōHō›«yŪĢ ,jł*GŹ =ŗōƬšź|Äj£Ė5BÓV߬ź÷7!ƒ8É ‚¼£ÄŽ2Õ`³¾m%‰äM¹hėź*…+žeą½Źmn żNŽ?5œ¹ ¹Üś„ü1i}¦A6éŅ*H4sĒ~!蜁u©[ų‹\ŠÖCł† w‘ėłVĆŚ3^Ņō>M¢VŅ{…HoQ[€cŅ“] ‚>©šŽæā;]GEŌmGö}Ü2¤›‚ü¬QłW֟uŸ ‚^6ń„wėZų“& 0J˜_¹5Ļ8ō4?2?fŪŻ#ĆÓź;ńh3”o=#r2Nz{g5ėŽ9ųįˆ·ņEo f†Ī6&‡žsŽkeH”Öu;ßß5ę‹as|¬~ĖłĻun8ĪkÜõŸ‹ń|4:ׄලøˆi¶Ž8ĒjČr8?OcŖčöqZĒ V–q‚[éėTüB,t§I'Hdc–c×é@ŽĀ_ˆŚNąQoµ;Īα¤QrQOSŹ¼ēBńų¾“™ī^"~f?6{äV¹-’Š“ėėז .VšĻrš¤ŒqÉćóƀ~#Üü?ńLš®§¼zØ+ģāSĻę+¢-ģb×Cöösų‹?Å-+Gń„„Od÷jd–6ą/$pZöox7RÖ“ŻSIƒ/lČŪŠ”€9éÓ4¦ŽsówāM¾¢ĘŗmāŹŅ“›`įHõ5—šćTšüó]”š3%¹Ü錬fІ÷>”ųKń3Ošv­q|VŲ¼Ń<+ž>Sßź8Æ?ųæ«Ł[^^Ü½Ü ±‹ė ;³ĻēYšŲłoÄķ”.‡/Š¢Ōo#Ö``±łiĮ źkźæźž ńĆ} ÅöaÓożČ×f]–#Æ_JÖ&2æCį}+ā֙ŖxŅümwwib\=ā€DÜą.;ōæ­ćń{sĀæi³ŅćŪ”$žžƒ¹Ē½_.…(Ł•>xJēZų§įIµĖkųō»Y’pŪ ¹ģ1_„?¾h~$š«{­k¶I}d-b“—(xąśŠĀ³å7cIJĒć/ˆ“ķ>ĒS¼Ómn³·”YˆŌ×5Ō-$*Ÿ8Ż·ÓėN•^d¤ŗ‚ō: ;»%‰byg·\źq_ æükwØi‡O½’#ä(2®”ś\ščrsźrŠ»Ł~v&œū`»Ų§|vō®Y39E:žŠ~McGOéķwvKūķćt³Gƒ |!-ź“Gčč§nĪ d£Ń›S·B_ŽjšVƦųƒMŌ/4ĶJŹS$/ ›FļŹæ@¼UŖĮń_Įš_ĉ^ŚėÄn¶ś™Įx]>Q¹‡b9‘>Ć’‚?žÖ¶Ÿ±‡ķi¤ų:žqišæĘļöKö’ćå‚ōœ#•'ÉĮ>Œkū9ń16w&4!į“Į&8’&å[ü÷¢]͹zžÆšSĘN/.“½JLBķ¶ t'Žæ­z“;£eÆŲ•7Vņ¬±63“ƒĻé‘Y9j§ņ5’~Ę~ųÆąŚūįö —‚üd‹£xŸÉ‹{ńŸ.Vp[IõBzž—-sO“OŌnl?Ō»$„ŒēŽ;äw©ĀU»”»Oó×ņfS‰ÉI4ŽĢƒnqÉØž(D2uäķ<ćčĄā–äŖ* ”ēw¦|ūXnūÜr:UÉ؁pX“ņž“ S*†Ī3Y)XÖ1źjEļ±ƒnqŚÆŪĪźė3–ģOz®~ęŠG¢|0ų·āŁēāρ¾>ų,]Ƌ¼?yģM lĢØĄ˜ŲŖŹ#¦3_é©ū-~՞ ż­ægŸ…ß<yö:å„bö4`M•ŽĮŗ7CŽ?ą?JU&Ż5Ļó·ł1īzżÕ“󬑑‰ć9_q^+ćķŹéšļR²ŗt滞0¾½My5Mkt~sųŖĘ]7]×t &ŽīŚ’Nøó¬„ę{|ļ0GŠWįļüö]ŸÄ?|%j/§xŸT€ÄŸ4sŒ‰##óćéQc7;’fK(^R\mlŽCś×7v]!“.ĮqŠō©œ³AmÖ%Wo`*;ˆŁÜ“g }{VŃÜäš)y2«/ĻĘrp*vFŒ¦ĢnĻZŲŽ[ }²ļ²yö¢‘ŽŲŪx{Ž”#B“2”SŅ§X<©@01·š Ž A—Öpjv/asʃę&Ģt#ÜžŗæąŠŸ¶‡Ę߇š| ų³¬[_kze°šöøšŁ&„jx¶ø\šģ§ [ØėYN=Č.ēō­š‚’b\xoÄrI6·”ŽI§¬„īóķs˜\¤m#ń5ė—Ś]Ҭ–Ó–ņ$ł‘ĮS\M‘æm>™{¤ÜŁź°Aubń[če]Ė,l6ĆøĮ?†kų’‚ŹžĆēöcų묟XkÆą«‚uŻį£ŻŁČNmÖAĘ6%pNq“÷®tżė•Ģ~.Kh3ꬻŽī8ļZ>]ÖµY[»¤ˆ:‚ēüšź…Ģå°Ż Ā÷O<֗Q: 3J>ż{Ÿ€,®¼-}©G KŻ=”1ƌ3°c¹éTĢL3g©\Ć­G%¼pD¹ŲźÜķ=8õÆ{ż¾#ė–2x[V¾FµI‡qĖ8žX¢ÅĮzųoĘڤ%‹:ēÜń^Ć«§źMcp_ Üt4Ȓ=ĀīŅ]6ķķ&·‰bĮqбō®Ē^Ó¼_ac)»]ĀI zGō?‰­ g5ŌįlåžÅŅ£ÓHE†3Ķr¾'¹æŅ`³½`±C<˜Rr3Z'cžqźgiZµī§|–˜P²pFp+¤HƬ§xa6ĒŚ*œ‰Žå]#Ēv6¶×q]iÖś…ʳF ­ĀöĪix6śŚK]Me„GhĶę*©ĄÜO_ŌӍ¬kc£ŲÜ¶ĘźŁłQŠį5I#·ŗxP†*yĒšŌÉ[`.ŁH.lŒ‹Ž„÷Ŗķq›l,ģīž¦¤Ś“9F§3Ć0·š{ք׃ K”ū@a:0n}h(õ kį׆üI¢éZżŽ±6Ÿwdøž"’}ˆĘ@ļ\N³”Åach“Dļ)½G$g½ø£”“Įv‚ķB^bķF2:qW5M u=2m.öź@Źæ)†4Ä“gįiģ5  CF¢ŽŖ8ÆvO ;uX£ņv ÄŅ4FTŚl:­³_Y¤jü¾P¬Ļ­pöž inŽā食ī“L|ŻĪ­|=-²›h@0ä Ąp+HčVšTnåWLēƒė@8ŽśÕn®¤Ó¤) øfäóŚ¤²‰ZźÓõ|ŽqŠECsŲmo<§D¼š9įs»9ÆJŅ-l –$XįE›xī(58ŸŠ÷shP4Ū”¼¶”ć*0Ńń×ā—ŗ›^ Vedw©>ōĘhųv-?Jw²*!œš>cM¾’źęō%ŗ•‡i=éGu™öI†õ’iI ¬8*kīkHå[HŪ¼¶;ŠnjčńĶsŁäh’6Ėcæ±­xtÄxŠ™¼ÅŌ!DŅ"æµÖ“I³ĆŁ]EŠ{««ƒīÖ¹ešŸ7O‰ŖGŠa”ż—BU>j¢ä|ƒ čŗzŽ\:ī"ųżZżż¾/ź_¼Q{ąQyüZ‚Ē{b0ā\Œ2SķןjžT~™R¤„NTļŗ7æą©?²f‹ū?üOųūBųH“EÓ~"ZĻmā-6–µŠ9UØgAĄĒɞ¤ēį™<–Mä¬O»šÓIFVZķł†\_Ó,Uļ~YNļÉ'ų${_Įƒ¾#ų¹=ģzN™y:$ÉnŒƒ†fļģ3ü«©ńĮĶGąŽüAąjźÖ—"amāī&Č ž%xžßHQ§éw“›»5ŒeU[$…ķߠƣg’ˆpx†yü(Ņŗ °#Ģģ@'Jģƒ:§CGä~•žĘ²Ī©­xĻū?Z²»µÓm5Cw0EĀ mŁĘqo©Å~wĮjüSį/ž×pųsĄĖÖšŹéŗ™· Ą·’ÉæĖ8܊} #µ*¶Pw?!Āq=|gŅŹšĪō©S”Ŗz»%÷i÷¾Ēį’öcY\³,„.ćĮ÷ÆAšŽ«ötX!–9"VŚÜŽ xsgōŽ<§³éšĢWPß+8Ē+ŗŅ'"2ąŖē޽h§#ÜRŅĢg‹<;uØÜų~āŃRE’ę=Ąœ†*ĄąžUĢĮAt/Vż„|"|>"P¹še³H9™Āēßü+VżÓņn)RŽaJŪkłIńĀwZO~Ćqm%¾”hZŅG”gsg#’BÆ Į7ŚÅ¢Ź\!Xn?…rĶ™?æŃčśƒÆhńY˜ķļ`ė¹2p? ś£į_‹ī ųŸ¢¬7P¼āÕ¢t –+×õ­(Ōw=¼]8:‘ūąŸŚų³J“\„½āEµĆ7ŽõĢŻXߣ=äŚzłåI-·Ņ½ŠR¹ųn>””9"ρ¼Wą½?ūb×ǾæÕ”‘1ÖóxO|^ā |5×.®%ųo}©J‰§ æ"å¾hŻF]õžvFĶāå>†’ģėńlxCĒ:VÆ©YŪj6ƒž=ēœäz:zW·ü6ų¢č¶Œ?tł®l¼­Jl¬€³’TŲhĻńc§LÖ¾Ģü’ˆņ:ųŸjéĶ®jS…ŗ^[?–æß蟹U߄ļØx[į×Ē]<1—@ŗmT@›·Ł\Ÿ•øč@;ćēÆĮ{ĮÆq®&£i8u>‚””Üłß£ī9bx~śŅ”¢žžoŹHļķåšĒO·“.Ń¢Œ§­kZm $œwļ\•ż…™¹&Œ÷6rĢ@H±ĮĒZłsā?†ž)¤u””‘ÉäóŖģ}ęEQ{K+IÓõņɂOqšļSɶń.€ Ņ^ē$ąž;}2kŠēźō¤£~0éšx«ĆZzßĆĖĒ&ų÷r‘ŌŻ+ć_ jWŸ !µ°Öęß¶1hī8čO&棏ų,_ģĶš×Å’²?ü-}:Ņ=#Ē_b‚^Ū0ĢÖ„’9-Ÿžz#'Ģ;‚§ęléW‹8|rānYÅ\=<%Ōg[–Zn¤įæšČžPnü?{m Ɖ.” a4‚0”H@;~¼Šßø±Ó®ģ†Ÿ}w–.&Œ÷꬝µ?²¹g—ųoDÖ~ėz³hśÄ×^»oŽ[Č Ś¼cėŒ ś³Jų£ØŻ|4ŸĮ–· 4yäß$gŽ@Ąōā°“±½<">oÕ,Mœ­.ĄēųF*kuĀ`× ¤zō)YŽŸ›c°”ŒWTšÅµ¼Ööīė Ÿėź*CiĮXš’Šwל®”įż0«„DÉ%Ł_āĖüĻå^åą§ĀæŪųwP_“ińĒ5Ć»~PØżk¢¹āā¤Ō¹WSōOć7ĄŁ¾7žĖßž)h1%NJüjŗÆŚ!`æh·Ug‘\÷Ā#’ׯÉ_xžibÓµ;9#š5–6S÷r3]²§mO–ąģŚUż¶£¼©Jß'µ’čz͵Ū]”‘‹<ÉļZö>(_ŽXkr:ˆcŽ« ‰ŒÅfŻ±7ŠśWöų5ńÓö1ųKū\xwBó~Žjf}OŹ;å±³‘ŒQĶ"ö]źō%}kó›Ć67Vš„ŻģkŲg“Ī–$*r—įN(ĀęŸXŽ\ĻVt§å8Śėīhō’µ³¶żŖ½«vŃņcV"Ŗ;Ÿl"Ȁ¦Z“ĢŠ%ČŚžŲĶkŌRŲą5‹K­*ķī•ŁL|ĄqÓÖ“ō¹žód€³©_”śR”¬yõÅŌ5 ōn"‘ŅCœ8ą”Æ–Eń³ż¾—zĢśŗ¤źÅ>l—”ē‘\ŒWßkB؍ņuĻzó«×=ŚXt–†uö–5$WV Œą{Öe®-@‘%”H3»wA\F‡Me}*'“!Ü;V¬S²ĘÄ··4\ØĘå;»)f…edēÜU[k— *Uēž“\ÖÅÉ5²Œ˜„Ø;ē„>Ś’ķjÆo9ā·04WPŒ½jΉ‡¼/}Ὲŗ{YkzoŚäÓu.DVņÉąHA>żqļŚ€)|Jš‚x#Ēŗ’č/§†ī–+Č ŽYќdč*¤=Ź ą{ŌJ(‰D­ØXĢö®$]̼äVV‘©AqoBŃĻ ĪjŅ9gØWQŠånüĖ7M„*ē½R–¦|ØŅ·¹•UÜóč{WM„kO§Ļ¼Å ń•deqœ©ĻÖ®"q#–ēĶfpHĪG'õʼ«¤_‰Ģ¹če5¼gmĪ:”®{7Ć/Ž,ųS>­?‚ŪO³¹½P²—QŽ;ō<ŠęüWńSń^«6Æ®jĶ=ģģY‰brkeW”ĻS¹Ī.»ooŻĶ2¬IÉvą(õ®'ÅŽ9Š/md–sLŚ§™: š‡¾3S%sw8Ąć¼9ńĆś„ /[Ņļē;c™K/į^®V4–g&²”L¾²ŗ1k°’Ø$\ūŲkä“b‰7®>lńX^Ģæks”|é:ˆšŁähä`zš¦½3Iæóbẏ„tÓŲ笮uĄHĆ'§JĶÖžóĮ:½ÄgĆ7k·C÷R`1=NkJĘń¦zŻžµ4ÖQ$q“)±÷śq ųóÓūCp­ØK¹”©’’._ųķć=ZŻ ­¹˜Ę›;xQō©<9eŪ-$+(qÖ¾»żŌ‘žZxŁU¾(ĘŹOķŪīIéƒā aķ Ńƒ=¾rį†Wė_dü6ż’ü5ā-/Ćæ|Udҽ•Ų‘-€ŪŗEÉ#µ{P?ÅÕ±öŻ·‡•ķäŅtų-PØRˆ>éō®¢ĀÖ(#{ā¶‹>vµK³Ķ¼¢—V7Zečū>Ņ'ˆAķž}źo 3Ż”K¶fڟ1n3N÷g„} ½z]:ÅÄ0*όWõżsS?Žōæ±Į ·ļc\2Žv[#9DkxęՌ+nĀö'S±ćĻŹ}ė'R¾:ˆXŲo—9ĒqZ)%”Ķ:z”¬džĀD1,ƞ+^}Lɶx-䯆VéõŖęF#d߬JTv’†XĮĆߒhŠĀ9¦Ž·>z0#‚j&ќĶ É‘ņÓŲrµ‚¶a·’ŽX‘Ż['#;ŖĢw^ń-Ņé÷Śm…•¼p0hŲ:OSĶ|ńmxt]Ā9¼Ł·dó·üā·Nä—¬čiŖ\ŪźZf§uj۔ȪxoUǧ&¦×-@¶·¶ū2ĪCęó å.ˆķ¼-%Ž•¦%£[°™X¶zēŚ¹O[ żB{Ā© RT `ūPfĪ'Xš£Īö’aG8łsšēµß ZiŒ‘k ¾\pvP#;K¶¶؁Мäw®Į,˜°gAø”3ZŽ• ]£īŠåćÕ 7†4`ģ­†Įū§=)4s¹XźÆmļžŽ lģ̌ļŲĄéėW`ŠimLwĒp£cō¦R9ė½MjīŽ²s Ü“šŌŌ]/`¶¾¶år½ õŖHN$ž…¦x€Ü¼\*¶#LpµēŚĪ’ŚPČ_CHĪQ±–—$ĘmķŚµģõmD“³ŽÅa¾R|ɃœKĻB;~ˆ;?V{YെÅ^ى2H~žµŁĒÆĒ$‘ŚČHÜJį5D…u,ʽä†Ēj’ÓMŒĮ#NĖźqš.—ėvĮs-ÄJ6«x"µ“kʔ,†8÷(Ą ‰@Ūó­™Ö,'šwīk‹Ōµ Ū;lj&K;ŠåfęØm`Ģū_9äńšėψ4ēT2$œnēļP¬ŚX-.\Ś€2kś4·»y ¶į@čĪĪ‚q%Ł#ķģEzE¤ZLÖsŝFUŠƒœ©#Ø ®vy%ķ¬6NŅ7jźĒ*:ĢŌu•’‡2œ–ÉŽ”&y>§o"‰$¶/\Ņ©ŚkśPS¤_Jéw:”åČĪ;Ņ’(į›OŽĪśKgY£wśÓ.¼?mxńQ6īÉćµ`"†„¦Į¦ Ž ¦öx¹WŽĘĪC©Ę‘ÉMsS'a——ÄÄ;¢łgÆ`+Ö¼ ¬Ć/Ÿe(Y7ńōcŠQŸqÅ'Ä…Z½¤÷]OmĪ¢KfŒdģ= {חi^žÅŲ÷WO;· øśU£cmæ³§cšåRqĄČĒ„iŻŻ¦™bÖęO*ŁW)\cŌŌ<ž=pź—;Rēģ±*³ Õ[›K‹«ø¢ŠźŽ7čŅHŲP|ŠfyN±y3Ż;ŪÜdc‡®;V-Ö§œ·Ū@́¶˜*ĮÕµ [Ą>É!bqĘ3^_ØÉ,Z’Ä’ć* zо›öHP<× ƎŹ+Ö|;¢%Ȋž6Gµč`k>gøģzEĪ•[*DW/ĄUĒŌב_ihś‹ß[ŪÄÓ±ŚłĄ<€ŅŒ„ZŌć³m:{™R7v\ņTūW'ö =äHĪÜ.ӎĪiŹ@QæŗžÅˆ-»K(Ā ä“ŪšŸKKĖøvÜ2E>20µ@ĪŖo$ŗD†fyԀȶkÕ< į›oJÖ5K‹« 6śŌ#…ä;ęAéļXNE(ō8MO\ūD§K1\žōĶ1ģģ!d0Gä¦NŌĄÜjBQ±ƶéw`ĒŒb®ß˜5&ļ8Ž‹Š»õ[“ˆéöńĒē3D§ēu>Ōŗ„0j1>ĘTaĘēęy…åµÅ³Č¬ĄØ$ļŠŽŠÆž`!'dņ}ØĖS¤K=°…Ū§µI ‚Y\Ēq$¤ŖüŪ…e=Ė/½ķ܋$vrlŠ\”ļUÆ/–ŻLŽˆ0>_šØŽy®cG’tfŽĒļ‚j„Ć$ ČĪWssRÕ¶ ‘-d(”KźIéQ—H•B•ĻLb³re(‘ƒ;ŪŹ§9QVģ`‘@ļ.; U°¾·¹ŠFÜHėzšĶwÅśÕÕŽ”„{]»·¬‡å®ģ-ŻCĘuÆĻv±é·¢į šĄ’xĪ2Muß ¾ |Bų·ÆA |5šŽ„«Čć2]Ē t·Q՘ōW·JŽy×¶‡ģĄ?Ų£į·Ć­kĆw?.”ųńZI’;=0‚–Ńer \aˆ"æMm¼āæ źöZļÄiü5§ųfĀ\&…ØVŒwڽ8’&·K”ÅR­Ģ’üE¼ųµ(Š~iŅxSK@Ėöć‘3ĪÖ'ƒ| cąd½‰‘üWćYŌł“FCy ž»O×kH™Žē±ųAoļa’ēÅzŠ–)LkµQŹ“·5»}ć~"KqąXna²[Ä’|„öXõąWT ;ńž>»q”čMcāv4Ūh܉;{õÆIž$ųžņK/›ķC²Y-žĀóvĪ7c?„Z&[ ­xƒQ 4/jOee Øw…2Æu'’®k/Nń‹X“[Xu»‹±ębC¹¢”ć•cÓéŅ„Jä’/V·¼¾ń†·‡,U2Vņ·@xĶ~i|gż±¼5ąA4?†÷vš†­ >c_Hv€ąą×M*f–±ł‡ń ā§>$jŅė~-Ö'ÕeyLJä…[·½y€f%ĶŌŽ˜$`t5ŪŲ‰¾…#‚§G½,h®T©ŽŻ2)œU^ę2® ‘Ųö¤K31P‘•ĮēœŠqͱѦ·*½õ«‚',sÜMƲ4!µ,”©ĮĮąšž m“+į’R»@õ¬li%sرŠoŁĖ 9&‡Ā:ōųóY¹&ĪŪP½Ū‡ »>āN0HtļNSŠøÓ?JgÆŁ--u?Ä_­¢xT¹³³32ē…e’ż;ų¢k~“±‚/ Zų/Ā2Ćū¤·‰błĪrņ+’„K4ŃņŻ“\Ÿi6ZzK¬ź7 Ń[<‡  śæONjĘ«„źŗ>¹<ž1œZĖ Uh„ł0xĒéQ Ķ$ō:…Öuim.橌IhĆ ›UÅsĶ·¾Ė§ŻŪC¬ĒćHä"f’}öģĒ81ZŅżŒīr—ćÄŅ]ÄŽ YmĪŠźŅ\uČõ±Ŗų§U՗K°šÜ6šzʁ.¤Cž°ųõ?Ņ¢Rģ2£Eįæčīײ_źž&gi[å_-W·NsXr^¾¹%ÄÆy¤*™"SĆū£Ž°•FiŁ‘§źīeµšī”f‘˜¤»#É £œqķX—^,Ńü1\Ż^ė Ć"ØR3ŠćĖ*–;hĮž⯈ž9ųvŗn„SĆŚ£1ŽŁ62€}}03PxkĄ–×Ó«_[ĶŖjĜIüH=ó“\5«ŪDzté1©šå<(+½gS½ŅVhćrIϧųWm¤EįoųwQ³mi­b·Ž@ĄĖ <ōķ_yVĒēøy]ZŪźV:Lzk^_ģ y‹Ģ1Üā§šDÉā—LūJ-¬Qs+¶K2ē‚=Gų×)č)v&±ÕķtoŚŲĖe%Ż“¼Š_NÕõ·‡ļķu=.ģY¢žļ“Ÿ¼£Ö‚”ž;ųcž‹˜åGK«ˆÜåœÌćŅŗ_ƒ:U­¦Ÿż”&ņ5^p@ĻŹ—26RgÓŚ×Ä[;½M-^Ć *| ąc?^+Ådż u­sKų~ńĒż—$޼²ZąĒĶÜ RęLW:O|=†ņĄYچ…ÄÜA^sai©h¾*Ó4Ē“6öóqčqĄō£.„r½™ŃėZÉšÅܓ 5]*ჶ" ±A=ų×[Æk1|JŸO“[Ėh4gŠ3øPvąÓÆéVęNµįk-#NŌ,4N%½‚#†Œ ³_?j#V¾ŗŃģÆ4ū‹¹X0yIÉīķ@”Ę]ųjqq§łJųR"ņ†pLā½K@šī“ą‹ ŽK…}FVf’-¹([×µiŠ„.¦SėšĢ•¶kqc’HtŻž8ąń^IØhĻżŖš–Ų~WżāŹv!ķÅmĢ„¹ūū7kšmēƒŚ5“²½“…#†Ł"’Z;ß­zå׈µkĖ{› †6.Į·¦ć“ąųULåhüśÕnl¼e¬Mݤó4SH»ĄĀ>Ö#"¼J? '‡µ=CūYQn%%†~÷5Ķ Z“imØXųzāŚņćż=!aä}ļ^’|Ėā O]æ[tŌ.gy‘Ģ ŒIźoŹ j]ū;•æÓnlä‰]TŒĘ[‚¾õõGĆ(%Ö¼m§®–¶vDŗ” ĘÓĘsī9Ŗµ#µŠæg?XxRĒYŠģmģ落łŹ0[ĢÉĆŽ•ĮiZ#č*č7בLŪĖnp2}3ŠÖ2Šm\µ„>ƒ†°tCØįŌt õÆøŃ2ĮlJå° ĻJŠčqgéχõwæ“¶”üžlAžRQŪśVē–¼…3ē½'—$³²Kß<ŽY[ź°Ø"X¤_•—”ćńÆĢϊ’åš_‹õˆšióÉēA’kŸåŠÅ”RæSĶ-§Ž=9؃ør}«čŁ’Å©”ų–źšŪ'…µ\Zum„ź¦@©’¾‡£Ičl|BšĪ”c©kz]æŁķ|Ggp²A)BJį·+!ėĪŃČÆķ ž sūei_µļģĮ”é>9Õ­t捇ū?TŠęM¦p£ ł'8` äō;³Ö±zĘĒtcsō#C¹øŃo>Ńŗ:|ĖĻ_q_`x^1š„„ūJ¦ā]є'ęR1×óؔAĘĒ•~ѳg…’iŸ€_?gļŚĘÖÅ£› ¶‚ö—@e%ŒžŒ¬Ŗx÷Ķš/LJ¾%ų[ńĘß |{§źšW<7>›~·QąŹˆēd¹ī ć”ėČ沄ZÆ~~_ēĄę–ēͲy2|ü“»ūÕWČĖe‚•ÆF;œ“E„Q“m ĒLŅr?ÖǵˆŖ”Œˆ¤ Ø  zdqQĒĻó.FߘÖf±ģOyY żkU>`l8ē„‘Üٲ˜ÄĢņ9ˆ²mć·l×ō?’ņžŚMš_āęæū üFń ’Āā“öµÓm[ką9Dbq— yi۔Бż­Ä&ŌävŻ[±Š`\wśW+©XĆö×°ŌŪ[€@Ļ uüėĻŖQł’ńćĮZž­Ÿh†ŌōÉ.’Ėh‰9~¾œ{ת4Šįń‡­ų;Q³:”LmYŗC!¾½?*Ā=Š?‘Śæį|>.ė}¾˜,<1©L^Ųŗ“r=‰ė_(_ĉ$hŹ”™Č_s^…®qÕ(|ŃÉ»h ƒ„iĖ4.‘°MÜÅtGs…”ĖłŽ3žĒ5wĄBæzŲv+$lņ8Ę[=Ę­[xŁ‘FKa€<б+DĄäzóSNÓ2,Sˆ6:g҃XK”<F]d ŹWŒ×»žĶ_µĻ٧ć׀ž+iw >ƒ †×X¶øBńMo! Kzc‚lRźvŅ?Ń7öpżŖ<5ńį&•ćÜAöĖ;+xõ&…Ä¢āՔlø :ą`¤q_{AŽ‹böśŠ]Įp‹sm:6C©ä`×ht:c•įŃm,ī®ī‹9k…̹ć uĒjüü’‚žČļūT~ĖZīįųd›āG…ć—WŃ£ ¼źŖ6ūm½Huąz2Æ­pMµ~]Źp?Ī«Ē: ų/ÄzŽ‘!‚!£VĮ$åN{ƒĮĪ ŽŅd–.Œq]1™•Žŗ¤ó[¹e £ØõéNæ£ŻĆŖŪŽ^]Cvb jP 3g M˜ø‡>›w źS:Äņ‡ņYdįŗżą=8Æ7ūV•¢ßÜŽYš„R‡‹cXtŲ’Zq“ø“±ś šĻÄķāOiڲɵՏ;†3Ēć_B蓹@alŽ éõ­ĄģŚżåY-bP#a’Tõ5ĶŪ-ö›­Ęläø’ŅHŻ„‰œ•-ĒONõ¤ –Ǭ¦¹ģ²ĖpĘ ¢Āb­^k^$³²Ņoį†Xķó±½ Y…Žb"śf±fńHÉåÉ»”ö5ÓÉćcķŚ”18X§Rø Ó= ¢ŽHi’K!‘ŹFĢIjŁÓeø²_³¦1Ÿŗy e’ķwI%bNk[ŁēšFxŁĆžZ€:}1üĖRĮL*§zūÕ䓵½G3“ėŒŠ4ģZŃtuŽžIw‰Ą@qŠõ{O–ĖGšņK»åˆøMŻHķš Ó8[MBśā(–iZŻX诮£HŅ Ew©}­E¤hĪA#ęĄĶ–Ē“Zx†ķuĖ›¦e{BHŒČėÖŗ=źyDāfīXg8Ÿ„Re+;;}2õī ł'<ē5Ś}¦ŽóO‘ā*'Ą] uõ Ų‚=JēNO³ĄŒ‹·Ś±nõ÷Ū€ĀF<ć€(oĆ7wözŻ½ģÉsi& `Æś²:äÕ’<··–ķ<Š-öģłz ņŻcJƒO™ą·Ÿ|mŻz ‚Ę9!Łß{dćžqAt÷5ķÆeL’¾ĻÆCė]ö•āK»8”å§ żćŌS:aßČū;nq•üéŲź‚čs>šßŠ.ī@Ļp¼ 3^£įĻ jZʵaŖCŪHŹÉĪ]ćÓ„+›ŲķåŠĪÓOxģģüĶ[pŚĒ£/¦{TŚæ‡“}j-*ßPŅ¢:Œ#vüry©s"R±%ļ„t{ė(įŌģŅź(ĻŹ[Ŗ‘ĶyʵįŌmaNމ øv”ŹåĀLQ„„,¶óÄ^72GOzäe°™ļRß-.ņ~Sޱ”MћÆmµ†Hį‚4@„wV߇¤¾H–1»Fą;UA “W½Ō`Tw0gų»Šæ;Æ~Z|į@ŚFHŖ4ƒčQ¼“ƒOŠY¦Ā*żī;׬ųĪėSxm-žĢ˜ IĘ šGT6:æ “öxĮłū“ȬĻݤó“i!eįŸž£Ž¼ÜL¬Ż>yĘqE•ćMJoäšO’hŻųńQżŸ¼O?žy§PŌ6}Ŗ)lYćzž}słŽŃæį/ųńūKM¬x‡ÄGuā{°.® © c<ąå^=It?Ņ‚ŒfŖ½Ņ·Ččž$ųg^ų?ń9ō8jž»ų·ā VĖÄ:D«u§_ŻŠŁ(Wæ@1YÅ6{˜ŗ5Ż { gm=O¦?঒µ•·ķmš›Lų~tĻųB¼5u&س:·™{rɰŒ _šŌ-t©x`Hn:  ŅzźĻ#ĀĪ–G”ÓĮ7y')?YIĖš½¾G£üżØž!žĻRź2xFŽĘśÖP]ąŸ’Ļźj„㿌^$ų×āi¼uć‹e×äAŖ¾DQē„\ūõ~—Ö>“×½±ĶĻõ¼6ŗ‚Er™éŒć5é’~Ć’³Äļ„w>4Õ5)|'ćĖ Ģžu…ē’÷0B4yĆ3žõQō>Ä <šXŹQŗ½™šwˆ->ųoQ±Ņ>xĢkŗ` EtKM Ąį”’}łōžÓüAįŁŪUŗµŗ·¶ša,nAż D©[cƒ†3yUž"µö>Õ¼ywćŃćø‘®¢±h™²Üē<ž5öĻĀm#Ā·ŽŃõŻĘŁ‹Īą€a˜s»=ēõ§ YٟcVŖTĻŅ[?ŪWĘķš*…ß²÷ƒ'ń'ĘÉŚK=S]hvŁéY$y­!ūĪ €8äóßó;\żƒü7į’ źž%ų™ńļūsā-ōuØŚ[”‘乐ībĝģrzšŅ¤y•Ęų;*§”fx¬c=jņ’ĄaÓžMłįāŁĖĆŚF§ya©AuÜ"$*d¾Õśš?ž åū ühų3šOڅ׊~üp×|J4橣ŻI-č¹É¶e ĄĆאxž¬~ĻĘY¾3 –¬fZ¹¦šmZ÷ŠÕÆV—ōĪóö”’‚žŠt½OĘß³OÄŌųå¤Ł(œųoU·ڤ±¼°:žīVĒ8łIĮIĄ?’:6¹}eÆźžńnŖų3ĘV˜o4F†ęÖ@y ŒąÖ°īŸžų)ćī‹hŹ›²ÄÓų”}×xõjś÷¢M=ÜŠ’Ą²ļC€vž9żp“„Ÿ“ŪÆźZ•¤éńÆ#°’W'˜ęLzÓŠŅčū.3Ä’¶RQóžWĢś‡įļÄMBĻ[°7I„jÓŖJ“’»¹ķ_tŽü?ų}®ų‡Ć¾1š®¦éš„‡ĶÄ?.å?) ?łV“`}6>³åŗ>—Š­Ę…"ÄŠO“ćø5ŃZxĖNŅ.ćMfE·ó²7‡üę½zJĒęēĢŪaā­ ,ŹjÖn“Y̽³Yš£ž·§\ŻµŹŚ_$įŠ÷®øŹĒĻՊ5µģōķZkķ:9mģŻ‹ ǜžkŁt„Ńę›Gø¶æó•¼«’[††d`Ü~+׎·ę<šōś£ö§ā?…¬h?Ł›Å>µ¾Ć]šįŠ9¢;‰¹†^ż|Ä^õü±©’ŽŅŽ[Ȟ;¤ќīIcbŒ§<ē*zŠ~ą å†ÄęY_Ł£WO›”_įR±Õ-u<ŖHʰĪJżk§AŪėé\ÕCś“ PīŸX‰ü5›…ūO›»płqҰ.¾Ā_§Iø|UHūĆóųW$©ŸIĘ*mHüŹų³įūßųĻUҧd•£˜¹É_§ā hČmī<-£ź¶, Õ¬¦ß37FCČĻÓęż+Ī« ;±åµ¹éĘGÓÖó§Œ>Ū]«Ēē¬Aƒ/;š+ä/‹zTśf“gćKH%¹BāŽxĀóž0sų’:Ā2čz“=ēöiÖ“4Ūż&!:”€Nѓß99żjļŠōūvÖõ=2Ļ‹dēśžU¤LYöߌæl n׹w…“ hŗu·ģ-Dj†_+”eļŲ’jüü[ĻžŅŽ"Ń>.ų^ŃtƉ÷ń=§‰l•€Eŗˆ…óg# ¬~]Ćgf53Nīr×NIj—{§m{w–ś…„Åę™}šMŪr R£ ×GŖų×Ē:džęšß‰ž ų÷ÄŽUŚ4ėżVi­ćQŲF[ż£ŽĒé•ņŒ6&PzjNńŗO•®Ŗū?4x–æ|²ųGXšä%Ņ/9.`$’«d‘łŹ¹ķ:ż/,ˆ’ćŽ{×J§ŅR§cXys 3Ųę“-"XFČČ ž€b¹$īz4Ń”ń ĆP¶‡į]OĆś½”é"Éż§nĒēˆ†!vżxÆ?Ņāx~iä ę”:šŲźąivź©p­nZG·¶žŲ5̹­ā„Éį–×4ż>kĒ·pnŅ!‚±Œa’?å\†½ā½;Ę šÜZ“Ņk–2\+`²cå_ĀŗéS²ŌņkҼ®J³e®“šŪž©ć_ųÓSµ½ń—Œ|={m:ŹBŗ¤{h yŹ£n’{fæ›Ż Ɠxy!ŃxīŠ,*Ź0W§V:FĒą^ ā18Œē=­Z-Ab9#’n+;}éüĻY°vDRøŁ­;ˆ­u(ŽŹźŻ%·`A¹e‡ō+ZSŚžŲŸ¼7ūx£ö&M+ĀŚæƒo,ntŪ Jv“YŪK!“c)1‰·łė¶ēA³Óć 1 i'ų°§^æ2Šģ|š$Åc±Xi6ńu]Y'²“I;z»æž‡o¦]éۉF®«OµP…ö³ØüqS~…‹©<dB«ŲÕ nBķVŪžs]Uec¦“Õt&ѵ+-nä1Ē'QŠāü-0ŗæ‡M²U&_”f²«±äV«©OćŌ¶^šæ„’%’‰åܑ»ā\qČ׏ÖļĶģm+ g'=놫×C†^ņ>ÉųQšÆÄś†•Ц“šž«la»ŠCĶŽ0Ć ć½~jžÕ “æ?ÆG…Æ×\š'ˆ‡ö¤‚@ßg›qŽ›‡£ė\“g,°ģ“ĆŗŌrGoĆ20Č5ŽĮ{NŁØĻ5”ŸcZåg]¦J³nóŪŚŗ+©xՊ”<} -l{tˆbF¹Œ‡R?:ŹøŃH;Ž žøäÕ§cwLŽłn¦··¶'|q)ŽŹ+Ҽ’E`Ń>@Ī0}„Rfщ垈‘xĒU“±UžÄyŒŠ€ēkdēóā„ŽÕ"œ¤ģ^„zW$÷7K”xĆnvaTī-w± p1“\ܬĄ‚+HäGFł]zž;IŲ“(FŒ÷­‘¬ +I&ÓU.e·fĆrq\ōi©xŸÄbĻJ³‚)& Šķl!Ś2F{t ³ĀŠX^é妿‘ź™NT`óŸ­[¶Ó-m?ԃŠm˜1ŅDŹć ŸĪ³„±¶³>Lī˜†•{9õ"‹ˆę5ZćQք—2M<«!gbpŖ0£šWSi*lPø¢—r&lDP–\©lqšąµx ÓīŠĀ©aœ(ļG9Ķ3vĀexĘAĮ•Os¦ŚÜŖļ0ĪŽ{ŃœĆA=Œį§&EĻĖŪŽ“üųŒo ńļČ«¬Ó‘īŁžnłė\żŠ ®1½½JŚ9ĶiV$7ÓĖŅɦV|}ĆčkѬ|3ØÜ2Kp’ŗé·®kx@ä­P飚«Gq²S•— —>T§°lvé_ŗ??iæų%æ‹|-ążö”żtÆ|HÓ¬Ņ[ŪM!.,nö€ ¬‘H8Č:d÷õ°Š 5%{­<µž—ĢüOĘÆ=Å`#żƒY¬]Ż®­ß˶Ē’šüĒā'ģż”xÓąĮ-ĮŚĪ­Bmļ“ż54ł'ød‘"ŸCÜ~ž'ųū>Ļš«Ā:ęƒć WBų›4!Æ“å—~Öī žWN*+·ƒš—Ä4rśxl{sœj8Ė›V”nļ]Ÿ‘ņ•ēĀoZ$·ŗ özā‰0`-±öx`šä$½Õōé%µ×lēŅ.öā_ŗ~‡„xUiÓy•®^¾ÕģZĀHäyŪAŹ’ hųwÄ„@%I²R{Öp‹¹Ö{·„”ā{Ųt:–ņU%UO$ŠÄm}į%™õkYķą±}OjźƒŠĮѹĶé‹1K«WY!—ę9{WKę«0Œ-)˜ŗorĻ–ÆøŖØā¹/ų+U×ü?uāM1fŠĀUß!^'’¬k'‹•™>¼ jr‰Cß„vv“I 唑Œ·š¹¼ÖŌ#©?!’h±hŸü}„éč ³ūI”)>½«+Ć~,Ņ“¹ {«ynž'WDE,[=¶Žµöx£ü¤ńĘė‰ń«ūļņGčĒĄæŽj¶ķ®źksknČÆonĄƒĪ>šüėō3ĆWŲx|F’¹³ĘvZö)£šÜd®ģA¤-“7r¼×ĖmƧĖķ]Ō~ Ń#€Į+ȗ dÖŹ ņesĶnz{WwąĶ3ūmoć.»°Pr¤ż(f±‘Ņź¾‚õQTv˜°2óĮ¬MFŅĘq«—9ąÖ6pŗĪ}<"H¦P¼īøÅxÖ£ks§Ü4q:n ŽH’8©”n+żŸ„ģ¼E„“2Jm׏ŚpEtZ|:g…`†H®V…Da›éėXµŠø>„š—ŠĘ¤6GķD€„:²Æµ|įŖų³L›Xø²–pˆ³˜ćēļ{’:43µŚč³mÄųžyĶkĀ]„źv*ˆģ÷[rĮ䐤WV)F矷‰lķ/žÕx¢ŻĘÜ’į].waā$¾=ˆb,BņsŪ>ÜՙŹ69»’ŲčÖ_Ūī±#HŪP|ķUZójRźŃĮ6*ÖŽ^×ćiœ{ŠAŸ¢]höZY¶•'„dmRxŪų×ā-}ķ’yÅ×qĘą9 LØīyŌR]_Jd‰ę6ĪŪ¾a÷}«Ö<¬ß[Ż: å1½··Čßżz–l¼]ŸV½iŲMä¾Ą0Ć95_Ŷ-y¢‹Ø<Ųå !¾mŻńX3Ó•組IøJ2q­ Ē—¢Cē:óµG'éłPc)XääšÓWŸa‚XŁ…— „Vśi7Q*»Šć÷|’ LłūPæ¾Ń¼CwtL’ ų9‡§ė_BiŅ=ՍµÜLČĶģ0=ėŹRgŸk–wėv—6¬#*Ū›+Üt¬›•¾ø0±Jœ¶Ž*BR¹©ån¶ÄŒ(ūŽ•gGŽ)ĪŁŪĻ?ßč1“eVIT“p ڼņzV^Ÿ%äź Äb3’iĶ%q5-4\FŪvē8õj˃M›JĢ”BMŸįąŠj£cwM»šźfI7»A'„Qń>¼#“6ҧŚ;yėJQ¹¤Q‡Æ&‹M…„‡Mh%ßŸę›Ø[Čćk©ļY4lsņH®ņp3Ž’]ę,ØbsņöŻRD˜Š&‚&ĄėĪHžU偹ہ‘ڳ‚O…ō©­’I%ß  žOLā½ÓĮß³Ķž¹ncń…夳åü«ŽTqü 漌N%#Ń”K©ķ—Ā’ų~ņŽßLÓ­®d9ᙀźGąx§­ž‹§3Ķp^@q•éŠń'79Xō#¶µńƶ6Fk ±4!pKz~uņƈ>!^j׌­“±lIņ¶~ų#Øčį0ĮĶWŗ„÷Ku{#ģ^P¾Āµµ­>”m¢xrÖ}KXøo-Q¶I8ĮĒzöéį’2•CōKą/ģ#®[7ÄŚ ÄŽšĀ ”é$…¹øĮćäćóÆÖ†~’ĖĮך/Į/ Ųų+Ā*‹ŗåWd÷ žÆ!Įüė^NĒ$ŖEų§Wųf4ķ@š?ƒ#Öž éń£M{īe—oĶ“ŲMqĄ>3Ōu½+\ńżķķ•Ä2yńڇźOš¾zž4Ō;™żkį-oQÜŲŲŪiz\¹ŽY@īć„oéŅ|jŚž‡ż„«ßĶū—ŗœ–Ć’°sÅtFćµ2_ üUq+$,VX&“Łķ^3{ć“Ō5y¬ü9”ŹśI}Ķ}œ=’h‘<ĘŚjńĻĆ:M”Ņøo“’VVlgļ~_•pŗ®„˜õC^ŌĢSŹƒÉ‘³Ļ9Ķ;īĻÕ|`ś“¢ÖŚŻ-£‰0\& ØźĒükćŸŠßµÆ‚¾=ÅÜÖZ–©ęł1$Ē~$Å“‚ŗ)Ņ£?'hڟāOĒ=nö]\DŠP†ŽŻLqūŠł;Ī–@ČĪOLf»£•Œ„3:ęF,qŠ8e%ƒqšfNDo0f*UŗQnĘ%>P*Aļüč1œŗ!]ą“‹¹³É#­X0"ī‘UTžĀ“v2hO+˜RXōj_nÅ$vļK˜‡CojdVWŅŗż;Ćģb‚So,ˆßtĖnĄY2ā®}ĖšöVńLj|_Z#ĆžņRfiaĮē·#ŽæFüšĻCųs [éžšō·—Äļø¼1ēĶ ä²‚8ĻQö6:ż2āu¼ó–Žā’Yrʶį2YŽzß5W\ń‰üw§^ų†šA§§Łą°ž6B£8ŁļĮü…sذ8;ŸbŅ“=#JµCʳA qżćśśŖÖ„m¦¶ƒq©źŚÓ¶²’ƒ£ÅŸ0{7­l£`lčü;į¹µū6‚å§Ń“ē‡zNä*·nGOjį Ō4ķ%.“t·_N$ öØć9”õĪqßüā¦Lؕļ\˜īoī a“×ė\žłƒ$z=“Gœ;䞤×4ämbĶŌZ[ÜÜ Oķ;ó…xć|†>ÜÕYķ4›‹{ķ_Ä3Į¤ŚDD†"po8ĒSXJ¢Fōéė©ąŽ%ųßu4·šOĆxē¶»ĘĮzƒäS^¼Jóˆ<=Æź §ÆjźzƒåŻ‹ī*}1ڹjM„$zēü7ixvĆĘæ ķ¼jļ@edČ,½@÷ÆGųykiw2ZŚ‹³:ˆ]ą~#Ö¢Rčl‘ēü3yį{ėĶ@i·¤Ķækœ€O±®Ąśƒ_āK8]īƒ0 Œō’õW?>‡D#s1…©ŗ6ąüŖæŻ«»ŌüsµÆ›!KöĖPs’=iøŲęgΚ•ģ—Ś„ŅŁ@"ÉÉŪ€3éYž$ųQ©Ų[Yx”źšĮŹģHA–Ēā+)”rÜä|Kc«Åįū«EšEŌ6o·lpēŸŠ×'eškā'‰ēŃ4« IõųĞb± ĻsėD{6wÖß³†æšóQ¹›Å·ŃOtP‘Ø «éšōĻ_HéØiӁiø|rGēT˜ćĪ>+ų¦ūĀ:™³¼ó§²m8sĻ©äW §Żæ,SR““w€KķąCłSF±‰OY#KŗÓ­oąslÓ Ÿr’güq_AxėJš·ƒu榔©-õ–£m’”ĆšĒćC3q±ó7ğińŽÆ£ivbÓ¦n”Ć1ļҾ~ń‘«¼ńĆq*ł˜ŲGOzĄpzœŖ‘Ē“E½cŪ4‚ī ²łJ3Œņõ­!±Ų™÷7ģõń,ŻÅoįVś?ķ%FhŽCź½óĻ_OZū üĄséZ[Cž”ŚŲéŅ5«Ü€#صxOĒæ‡³xĻĆāź¼JŅ0ń-(^ŠkžZń–§ę„õ¼Ör“s¤–ņDs6ō*U³ėZZŒšŽ™i£oēĘĖ$o°¶0AĻéStwŅ‘ö¾Æw’ įĶ—Ä+;ˆäńž‘ÅzŠ˜kˆ±€ŲźMy·Ć?x«įö£q¬ų'Ś—…®n.U® 3:ƛ$1š¢Ē”N§CūŲųā=Ä?~ź:åĢzŽ”&nMŹ6ļ8l“ßöĄŚŚėįŪ°bYņš’>Pć·¶sYŹ:–Łōg‹ŅįĘęŻäŠXŽå+Ł…'ŸšqģgŽ ż·¼¢Ż AbŠükäE¹ Ē\H:ĮBܹē“uĖ%Ńžz~·ł•äoZŅ®-¦øf·ŖĒČen„`EüīHčJōyvc9\–S‚¾ƒŒUY ¶żžøĶ0;uCŒõaüŖĢaÄ­)?603Å!hµ"eŚĄ±Ś¾¦­6%ŪrFӎ•QŹLԌέ‰šqĒ^µŃč~,×¼ā āƒ®žĮāķTŌl¤ląŲ£z\ß9­ˆ6U-°`õ üĄwe=;Šņ+g” :Ņ34£÷’1qÓ'„”ÉķŠøiĢt«2øµ¹‚MŅĮ*ģd=Å#®”ŗŅ·üGöÄdƒWżŸ<_kouØčq²§™.N­¤Jv¼^Yä“gŽÕż~ü ¹¼Ņ4{†śåå­ÄŚl­>‹$lO§± €ó“0‡5…twB]jÕüč.•Õser» qūU­O½ą}FE–X· 9ūČxäW›8ŁŽLž$æą¼_±3üųę’< ¤éÖ^ ńhøÖ,ŠĘmo››|tĮ'Ģ_fĒl×ó¤¢źāŻ.åGBFv‘ڦ”›Zœó)@å®Dk1Ē_„Iö›ŲohI.bnž[Ś“0r=Ó@±Õõ é%“cļ9śāø­WIŗµo:`ÉĮOz} ū$ų½`ų’<w;CgØC'”Ņ>åßĻ Żė_£&K}ęę ‰}ƎGėx»ŠŚÜµ„j4¦`؈qĶz=Ö-œ/ŁņCÖ¶ƒčg)t3ļ“ūI£?*æSóz×ŗmŽœ.d•¾`¤j²fā2zoa…õŖZvųšī6u zPY¦O¤ÜŻ4WaŌ°ĒŻĄŖŻŲŁŲßÜIĮ‘°»”öŖŠ™€ŠŸl&BcO\d³9O“GlÓ*DH7ķŁlārdCRZĢžŠ–ęż$`rµ!5ĻŚķ”v„’ć$VŒŚõÕÕ³¬ŽUYpŁćCc{ÖiƒE‚q޾ō’źæ*ZneÜq׊Q—ż–žaCĄĻ9⦖å-ÖHmüĢ)üØ 3ŪÜ\éĖ-»sķķ]/‚tBņ[e”*@Īz¶(·ÖŅĘhTD²Ę0@ė^_ŖiV÷ Ü¢¹‰‰ążźŃ²½{4±]Ģ8ló]ÓÅ„””¢4XžXŠšź¹æ4gfQĮ­Kh Y•# $`sž†‚£¹z-&ŽźR8Pqž•-Ģ÷<Źb¶IķÜlf'īŠtĘV6ģ¢RµN §µÖiVGgsf–É R0aĒLz~u§9\ę]·†Æ"k˦xēc)#īĆjęym,ęIœc=0k3#…¼›÷hšRĄ6޼սk réaŽędĄŚĢM4©ž»©ųWGµŅ[P:“vWÉ™²WŪēEµóäŗäĢę¤(‘±Žø4ÜY×Ҽ ńĆæī浓G…„–eaqœŖgØ<ā½óYžĢ½EŌ­#ŁŖ<œäz–%Üē,ķK§Ś˜@Xäw®n/5ę”ˆŃI˜`‚=«–|A®2Ś³ĘøŒqėXŗBŹ7ó9;F”ĪæSŽ+‹Xn=įĒäkĖÆÆ“˜f»O1>Ż åļėY6ĶbŸC³ŅQŗ¼žż·Ę\:’0R““Ēr:3oąšŌµ}Io¤KØŻžE1Ēü$õ®Bc5ÕĖÄź"ĒČz`Pm©»āD¼Õ4–±¶† ²Ģ9\uéžzW yš’P³H.SeÄ.~b½V¦L¶[…¶µµ –AŒc}kĶu;mc]ŸU²Š£[MQ™§©Æ'%k×Dģ¹<ĆŒžH(’ąN’ūaį]A[Ćzœ·±ųƒį׈¾>h:Ɗµ[WÓ5»v ¦ČÉøīSœc0:{××ŗķ†ńž ń«Ąß#±³Ņķ¬nķĢŖŲM+Pˆ‡‡rŽcS*Ęć8Čž!N)Ÿ•ų§ˆ”0«S’—u!/¹éųŲžnægĻźZž“e”(ŗŌ†Ųä!³»Œqųƒ__źjņEi#Ę7*m ŗ}éŃø ÅÓM“ų{Aֵ˸ķ­PCmvھŒŗų%ok„„Ćj÷r„ Ź9Ļć҃Ŗ¦2+Dy¦»šƒĮŚž"c}§–Šä«śé^1⯃"š“Ö“R?člH’’Ā;·AłSHēXäō*ųĪńlzŌś|2,v‡s+tś×¤iśœš|łgĪŲūŹ0Ź’=Ei%mQŏQÄQtf®™š'Ä߅š^¬ź^'Š/n¬®ī. ĖĀŖ6G!l’+ZĒĒzåę™ŸuØ\ܤcbļlŒ{ ĀuŸĆ䐦­gMńõ¼®ń4™<`ōÆ„¾ Żx—Ǿ%Š|aāɼ1cu7™w,rm"%| õĄā¹ż”Ż*Œ[–§ŌækSötѼEšS୧ꀩyµ›¦‚G`\un§>õó§Ą=sĘZÖ½½ć­kR½·-ŗiī]‰`O%‡ē]1«Ń/–ąa μ׽#ķxzXĖ ¤¶ÅĄ3A.8lz~UĻjÖņY|)šN©¦źYx¾ĒQy‰…ŠÉm,dmaŽzä‚+xI=Ļ©¢żÅ~Ć~͟šU;8¼#”h_“&‡©¾­o†mOQ:€óC×=zē;·×ģ/š{ž 9šFŪćÆĄ«Ż7Nųé§Ś=燵ėTmT É±½®q…-ŹŻIYEIr³üėń‚qŽń->#Ė?Ż%;Łikė*o„šæ+ķēł”ų-yā¬LZž›5¶©c;Łź²ņgFĆ#žŽõå·twWtÕÕbk+yō{;›E+‚Ź}xäVĆ»čpfõćVµ*·čĻ(×üaećO…ŚĘu§Źum,+ń*.?ŖžUó߅5×°ŌŪ*wŻ9ąŒWŸ3\’“’]ĻmŅ|Aö[ūåÜ+ąšy5ö'…ük®éŃč–z‡– ¹Œ±üŃīł†?֋>ņ#R.,żaŠAh‰ł[ž¼c‘ż+{ItķJ[9~Ö!Nx5±ąÉšw7ņŻ$6÷)Ź ƒŽŽõÖxvę6ś=ī6ē āµĆUh~ę~ÅŹ‰š+HXYšÜ_ŻĮžߊ{Wį§ķ‡šõ>~Ńü5”i77iÆéŃ”-žp7:óĻ÷Ŗ±üµįŽ7ŁqīaBNŹjV]Ś”_åĢρ“É’±õżF ¤sH\`ōšöØÕ„XĘį·µc=Ļė¬;&x&†å2b>µŚųÅvž»‚śöo.Żx~qÅsɞž‹šå>TżÆ<Æį;ϊ~Dšh%V™£¼‘g'?­|ą©æµ|½4Apœdą2c5ēÖßCõž“Ž’[£č_ų‹KšŽˆžk;‰bRv3“zU/Üų2ćĀŚ÷ŪķnŌ±§v<‰{8ćå·SéÓmwšjöo‡6ŗ­Ż“ŃßI,^ZČĶ‚T÷ė^”į-KIń6«ØKwuw–å‡Ī}*ć‰y›¾*ŠžŅ/lTGo˜œvńü«åļŒ>Ó>xƒįo‰|q{¤\ėŅŻµā&P1RHlŽJ遽8­ęŪYžž./Yžys99$ūš`‘‹’Ź ō>õœõ=:TŃĘųŗŅŪ ŠĒø2ūGAŠņ½M²›xewˆŽŽ•Ķ(Üģ„;,1ŗbǚŠß'”U–QϽdՎų.¦UĢ:“n’H\ĄxČ4–¬!‡ČĪĪčDӆpöŪL‡nānXyŽ‹Œļõ«¦µ±µŽžĀó”tŽxÜtq•qčEyŒ¾ŁĒiwŖh+äĢĒżNNŃōéҧ¦¦¢·;ż7ā׊Æ|-¤x3YÖoBµEņģžįĢøž!vē=ń\lģ—:™ø ³ņH=ėIŌ90łm*ŽŹ*<Ķ·ek·»}ŪīoZ¶Õmģ'ÖµŒń‹.F?Zå”ī³å54Ų-µ sĆZ]ģ2Aܻ怚ōOŽßü!¦ü5½ńN¬É„x Xķo[–ž<§‘S£8ǹ𷁼V&ū`'œŪT@#Ø?‘ÆŖ4ˆĆX“©*yŸwo÷³BV=uQ#Xb#1ߎ+ X®$›ģŹ…œņvµ²–‡>"²8o^żŠī=xl|Ą¦¹ox¢āĖāf‰e½UYž1øš‚?@k9;Ÿ5‹Ę%&}ÅØü Ń>&ų^÷Vń‹^Ųév*fŠā4%DøCŽw2¬Žb ‰Ačz갓čD©6›uw Ȉ‡I3śW”^]Iy¦ĄL‘°^H“IKK4އEEŗŗĻˊź'²ó£X FéN'lY‡&˜±JQ±°ŹÆOtŗf›4¢qćjs˹Få¦q0ęI%¹ĪYŪęcŌÖŹŁÄ Ķ×5Ķ(ķÖ.LœjæŁ£`Ä®OAŽÕ•ŒĢå‰Õœ²įĄ«ń:Œ…Č8Ļ„;S}¢Ęö[»94Ėø£¹“s÷Jä«cØļ^ įķ.ūĀZÅĢ6÷³\X­Ō“D7aÜs“sŅ‘”č¶’yŽĻģ$ēėZš‚3æóLĮīhǵ°0ēŒT£OŠGŌ?~kE[<ūÅ:kĆā¶ŠŃ-lœ+*©é×’­Ke8Āć§4łt±”„svĪŚQ ’zŌ—:TZ„& UDƒ”~ąŌrJ]_MIą‘ķd\Č­Œś×Gä6åcü5J ©yɶsĄ®2īÖx¼Ćl 8äZ°&¶µ¾»HR ߊĒÓnāfmgŒ+ŁF<ŒV°¾Ē z–>®ųscˆī“ߝ- OŲN2S^é«ü·Š;{ķ6FėREl¬fgµł¤yŪĒ#×­QžĪqŗŽp­·å(ėČ5×Ųę—,Œė~ о]č¶ŗ¬—Z4·iŗŹFČSŸ¾£Ū&³<<–•$ÓZ›Ł¤ĘŁy;_7C\6šwŠÜźķ4±Ī>OCŚ“Ā6w]Ņ-õ-‘·ØÜWø ŌV3éŖI2ü~żŸ|/įķCDÕ>j×·2I/“‹—gŚłćkžüōé^”ß\YjgHÕā:f±nq=»Œ2š®y-NzŚŻąßj>ń’Ć’Ł ŗŅ,Ɣ_D¹mŠ1²£°×픳ę‰ń÷ĆŚž«šżķ5Æ \é³^A“„GŪ÷¾OåZS…Ż‘Ē_Qu*;$~%ų;Ż3ķzż‰†āĪźk7VäĘUČÆL{tz·ļ;;RœN…VśnÖįb,ā@8Ē­z?…¼aż›`ᇭn+­…­üóŽZyK>ń®2[‡šēŹ1„¹RB±ā]ŽžL{¤y®«Ć‹k5ņ²‚žI!Ė”zųPYØĖüSG¦H qŗ3ÓŚø čL”¦DŅ7 “S'c3ķrj,ŠHĶ»wwÄŅĤ«ąćҳݜņdZ†Č£3aŽŠOJ±įĒjĘŚxĮf|du“åčó=R–ŹīČĻ)gF?)®b+ė(Y#@łOaM+A¬¼'ģnķ  ėšvŸ„8HŽBģņøéLŹIģh3é–W«opĖē?AžXSµÆ Ś]¬sY6ÉJä®iC¹ĮDRĀVÄ\‚T‚:Ō °¼æifŽxZDŹ6'‚žŪĶe‰•¶ĶŽŽōõŌķdŸ"U =ł4飿†Ś8$ŗO‘ĻīÉćwŅŗõhķŁH¶“ŪǦj%ĮašƒXjDfh®Tći®U±ŽĒē™ā|’T†pü*9XXęć·†éä’I@‰0[ž•£r’_-µÆŚD@p™ēŪkA §ųŸKš½å³Żŗ, ŁbF8Ļ5ŅźŚ—†µŌ{­/Q7VŪ7±˜Ē½ĄpͬųBÖ"j‡ÜARĮžUĖj~.Š"½Ģ&#Č­A£µšŸŒ|5—(IBL® ¢¼;š·'ÄÆ ĪņĀ5±Ż¢“†1Ø3öfEĒÅ? ]Ų½„­ė6øœąaĻCŸjłūžæ…4ż|[k÷PZ[+fcę“ŒŒŠ?fZ“ųĻąjśw†5Ȧ³iéķŽµęZ·ķįß źoa›ŻQ¦ņå$!Qė@”,lKūaųYšę£wo¤¦—wenKHÉ{‘÷#§¶kĢ|ńzēÅÖWŗģ"ÕŚb°…(Oėõö4XŠōYõ_* s{vmŁ’x»›‡jń?|A’ēQKH“"=£są–®Š‡:üm}i§Åy¤ŻBŃŁ*枝+ęω_5=e&Ņ“9®,ÆüŠYŠćÉĒ\Æp­dŃ“ēÖ>9ń„m õ–£u³jī¤+”ƎG„Km}©jż¶ą½c¹Ū99Ķ%t(£/W¾ŌŅxa»¤,8>õÓxvÅīžĻØM°\!dFŻ·pśS2“/ėWOyóų×WįĘŌō±5ŅO5¬X!Ź ōķ¦”¤źz½ŖÜĮu2ځ¾C³īSšń}{Äi:üŚ Öbxc‰dū[ ,›ŗ)£ HŹŌ4ų5F[Ū!;°‡†5 ń¬ź-äŽ|`ägšnF‘—c£*LčW$·N‚°ķō½zŪ[(cd·20nūGcšĘo”Ń\öż €¬¬­*§_J5ūŪ½?L’4O>Žc|¼œՋ½É›9}/XÓulSlš:±śV׈&Óō½6k‡’O“)ąd ŠhĀQ³ń 9¼O¬« ŠŃĘō9čzē¦Óō/ˆž.Õc‰¬m¼ą,ī0”Ųf^œx#z„+œś£Ń|)¦ų;Ć:½Ī‡ąMōėÓɶkł2y³õ>µŅÜ[[č÷žĖųµ½qē-o‰#ėņ‘ĪHĄ­nZ—sUŌ¼O{u£¼×Ma¢‡ß y‘ņ>Qõ„Xøų RŹų[E¹Õ4(®Œž{­ Ļ|VÉ)v#ø‡Ć öŽ!×īmõ›·F3Į#evŌžĒŸŅ¾vń4Ā×B޲Y÷~čŒ"ś{Ó±™.£ń7F¹µ{OxQu]^Į’ęGa—#qĒ^†¾jų¹ń/Ą_ t&×|qŖøń¹Ž+&—hQŌžO_lf“„]Ėö–?!¾>žÜŚÆ‰l®4†Öמ±¹%bL:qßæ:µ-jūXø–ūQ’KĶD“ūéKv'ń®śq²2”ĢßxB“ž½M@Uِ«2Ø=»ūV†ƧTżÓ“&ńÜt©cŸŽaŠQƒš&L«L“éQ=ŗ²3*¹ĮÅ%ø bŖ»F1Z+hĪ„€ŁŽ=qQĖ©÷,Ca!XQŸ9ėŚŗĖM {™7L¦+hĄbåI\Tl:q>’šģēć?O¦Į£éńÅbļ½īłBc« zןĄæŁgƞ²–ėć/Ky8¼Å“ Iē9§jĪRču%Šś_ÄžSš±}O[ņ.Ēś4Kå2 ś~U—7‰)Šį{Õ²³X„łĖv?—įMĄNW<UŠõÆx–Ņļ¤]E`ć~ÅÜ’ž••Ŗüµ³0Žéņ0··‘d—ĖÉR?ŗjUKCŅ ‹JÓā¶X¤”+”ĻÖø/ˆæļuėUÖō›‘ Ō'w–Ģ0Ź:Ę†Éu;ž;k¤\źzeµäVóXĪ:än*Csü«Ō"ń%½Ÿ‚5’ÅåOØĻµ„L™eæéA>Ń 5¹Óu9‘¤¹39.Ū‰Ē'žµ­¬ÜßIdņż’I äØät"·„Å)#č/üOńƒ§²Õ“kh#½[upŽ[”Cė“^Ķyā­GÄóĮāėąök,`ÉüGx[‘Ė-Ķ Ż~}%mg‰‘ā[nļ½ųT¾"ń棩ivāĄŖ¾ŻŪč}+;_Q@ņŸėŽ"¹¶²›K]C•HŒo'ŌŲWÜ_5-¼:g“z6ī2D†®-luÅ»¼=āKż*ś»"#¼0ןßĆYxĖĆ:v .ī;…|®=1ōüėt“±•DŽĒŃÆøhĒcĘ=ė'Ą\ĻņæīśtÅqՍĢu¹šOĒ/‡õ(õ»v™“K÷eŪ°6ø#ÆqśWćæEØxc@Š`€Ę°ŖBų 2:nĻZåiō;a§YšGÄVŽń<Ś^»5»ų{S€ŚJŽü#0ł\sŽćņ©~ hŗ…5OKµžāDÅ3žw N•²īuÄžæ’ą?ģ~<~É6^¼½üDšsłĄŲŻ4'ĖźČ’€WźuŠŻŲŽ%Ō5µĆ6xķŠ™JĘżl}Łą=^ųGOŗ„óØņåÉĖ+Zā~7|š_Ęļ„ž;ųć‹U»šæˆōł¬dĪ3²ü®¹čĮ°AõÖ¹«ŃU!*rŁ«}ćq¹žh“÷ĄO~Ļ_>!|ńNŸ*ėžÕ§µk‰SŹYm‰>DĮOUtĮ¾kćŪĄÉrB¶Ś¬G*qo±…Je!tńņ T=»Æ&Ē“ĶS“÷ęŗĪnDg—`ŹņN2:T¦IŅ1 ųēš å+ g9ū“ń: w>”Ó4Žę°%T38śśÖ­£Ā6£É¹X`ēų‡„S—C¦ Söėž_ūbMū1~Óƒą—‰ąŽćį'Ä .}£Oæćwä©¶÷mlśŚ<³I‰bĀ‚9&>VÄ`ž5vå«:c‡ŸOK;٬®7½¤”•³Ś¾ųįą›©­%ń.—ĒāĶF»¶pf€Ÿ™p:œt’ėW™%©”š’‹māń¶®xlĒ„¶¬”’&dĄ¶¹ä‚¾™?.=ėłKżøž Ž|,ų§ØkéņŚX]˜ķäÜųgŽŁ«„¤®LևĆĻ&'’1µ™Ķ‘ĀÕ– łØ0Jō£#ĪØ‚UŽa…$F8Ę*§Ł”€ nĮéė[F]̊lʈŹĆ÷™ā­nļļV›¤˜vĖp8ģ(o0ŖŃĘ:r(F°%X£óL@łŒœ²žLL›ļփzgqš×ā^±š7āG„>2ųbāāżģLńŪĢb{ˆŲ€ėøuAāæŠÓö/ųŻ„ümų;šćā—„u[½fm"Ņ-Fа"kż:UlMæå6}†ć…MQŲ™ś³³”kšDqʲCyšßōśŽk VÖÜ¼ŅŸķ2ŁĢ±Ü@>öŽ3Ē®9® ±-Ÿ<~ݟ²ö‹ū`~Ķ>3ųm&Ÿa?‹£¶mKƗ ‘mØ"’€7Pf6önųÆóSųĖšóÄ?>"j¾Ō“©¼?±ä†x nņn#bOpAⰌ’—/s9#Ɍ†PxdŠģ“ū›[ėČ&Ž ÖUX÷›Öœ„ŲĄśA‚ž n.­`¾rżøū½?n½¢ļšĪ«yunłXˆˆć1=ż±šžf3ē/ ė:—„ļį×Ö“Õ ČÉąŒóŒW鿀¾(Åćß éŚ„rX=Ä8ÄgēĘ?ˆ~=k®Rz„ Öß,”bŽFkÓ¼4¤˜ |ˆŹńÓŚ·‚źs¶uZÜÉejåļ÷ķ^9,·:œźKŗ.ü“”æŃ.-mWFp>”ĆgYČUQä_zćē[ä`ȍ×/a[ŅĀļ ŒdrMeĘŅ-UY‹ŹĄ`öTé˿ʖ3ęō8ØBĒM®cYhō'šźg𵄌éqjļ"0z{PRó&ņdøŁŒyļ‚7W™Žj«=Ģr„G` בŅĮr—6 ŹpĆŪ„aŻĘģĮBØ9ąśPę›ūŌĶĖóėT/×Q'Ź„īĻ@(>/ź„ķšū3cĖ pxīk°øÖū ®šžF”·;•¹Żķ@ mØO#Ēö­ĢÄĢ{×mc”G=›_o0@Ł9Äh’ŌōÉļĖfecpŲėŠäoµK«yeĖĒ·ēõP5~ń¬Ķµ”ķϵwd– 3žū’=h*+R+hļģoÆ%žä42©³¾¾$‚ę‹klҔɐžHÅéiśŌöQ“VÖé*7U8ÆVšÜÉjˆÖĮ%b 'ųqځņ›~"Õ,“¶Ó¬”UIå’XIąśb¹ĶB{{k Énm–ķŁJ§?tśŌ¹XI)āKyŸII¬Ś7”ɆE<Ęr+Ļb•le7VÓn€#åąŠÖ›:"µ&ŗńV„Ø[$7—rČÉĘK}ļ­G”ØŹŲ'9õÅjtEt;;M°×|;©µ²ĖqŖÅÉVčGĪsĶtž ńGŠlt‰4­VGk;£Y/ōĻ„ Ę6>Ņ¼Q=§†aÖßO]p’¤‹ø1=3łłĢųĘ]O]¹»‰#IŹ2GŠķ\ņA8£Ł”¾VµāGĄ8¹Ķc[NanˆÉ'aœf±”liō6tæ_k66ń%²@#?1a’FyļŠąž$[YC® cL-6!S)DĄcŽF;óš‹u:,eAÆĒ-øŹy[†ź…õÜj‹– Ēv})ˆ”ai}q5Ė3”µ  ’Iē9ż*Ō²Y1xĖ®z/µĆsoHÕŽŻ˜\ź@ČÆ@Óõ»)dDX՟ ģaĆ{VŻIœæŽē¶Ņ–ļSµO"YE>ߝxŒ^ko»·ž[{·oC‚kČÅŽE\®ʱ8ÅńN§/Ź1M~3gŖKuį’*+‡8ø~¾ė7\}kĘ5ƌ’|0ų‡¤xśhµ=-µ(aMåc,2Ų;õÆ9ŅÉI;ÕoģyšÖūć÷Ć+wį…ĶØŃē)wö©Aņ`v^óœć>õźz‡4ļŁ×ć/ķOš_āxƒįƊ~eaĢSˆ·‘V3×&IA~E®„dī8x§ĒŲW ¹[śÄ’käÓK×KŸĒēĀ--ļWŽŽImB]Ļ%»H6±Ķv@G²‘_Nk~7·Ń¼5qØßŽĄņ³nXOĻ<ēėüėŽ¦öGõĪ»§I)v=‹ąĒ|qgeuį­ėZjĶ‹‰!`M ė†Ękģ]zņ 7ū/N½Sa+)Č~7ć­( –17¹“s¤Ē«²Ü[Ē*` c{š„å½ģKnń4,­Ō`ö ąÖńp”_Ž>?ųóū:k~żŸuož»Ö Öü1ŖØ×,™ČKĶ5Ų0(ė·v~½+7į<1e®Ųȗv³F¬’+gx#ÆėEDväųø×sŒ~Ė·ą™ĢųÓĮ÷Q@nī’6Ó§ #lr[œå_źŗn£į­Z8žÉŸL‘ńƒ€¼ō5ēUŗ=¹a¬¬wš\Ovń¬p0‰Ī Āū×'}Æj6šģšhW®‘Ä/:'!Õ½«™Üš±Ė•>뉪üN:6§$—–Qļžį§$¼„7 œs_Ŗz&‰¤]XNŚr KsÜĪGҶ§#ēåQ_”ė~KŖCØźq®¢š–P##-mĒ*N~ŸzĶō–w“AäYDŠæėxś×„Hļ§Y#ŗš‡Įß ųŽ=RKčžÖ-ķdøū-ʝ·°ĻÆ>žÕ÷ļü?ā…šćƾ'ų1Øų…!±×Q5 \ymt™EŒĄī ßµßN=OȼwĖe™p¶3ļF<ėžÜ|Ö^vM|σ?૿ķ>~ÕŽų™į›;m+Ą_ œŽÅQ × Į–BætyŖčŁźĪķéĻåæü ĀÉs£~Ģ’ļn 6WVé€9x¹\Ÿ}§ņ©Ŗ’¹ņžgĻĆ9uZŠĶ.OüšłØß՟ų{&ÖõßłCģ÷śLń¦yĖ…'ł…ÆžSEM*uŒg‰™W=¹Æ›Ä%}Śrõi¶uš`Ōb¹Žśį%{Ea’9Įģ }?įߢE„YeüŻūŽOČćō¬`õ>Ž‹i]”æ(Ņķī0RõX’y_kÖĆIŸ Å4}ŒÓgŠhmūTü,‘£¹±²ųåšćOk˜Š¢‰u›3µĻŒ'¾ūšłūUh5;OÖbf“–$péŪŽõŽ~zėEMÓOUÆßż2ŠĆ`.`ŗŽZМ2w’Ö{ P“#Ų+g‘“ŠŅ›čeĢ~Ń~ğtļ ƚĻ.© ’īÕšž2rTū®?łėž ©šÕeÓ~ücµ€ł¶r¾!U°ĢwFXõūᇧ5©ü}ŽĮ’dxN“Õ”ZW^~Ņ.’Ąļņ?¼[éZ­üQ‡ó$1Č[ų@’Ÿ­z¶vnR™¦Tƒ\ÕYż©†ŻR¶÷ OjńO³HŗŖ}§Ė²wŁ>Ż£ėļÅsIč}öKJ<뛹åZ7ÅI%šWŠžÉÕtX”ŸBkÄ4]čŅŁ€Ģ&LĘŸ™GL⛹ś6* ¤}Iįoh²ź¹•C #īń[’xJ +kČ'‚ CO™LrBéü'ÓŽ±p=xƒĀ"Ņt½\Ōt†±gEč ńśW—ų«J›Įzݶ±¢Ś_ŁhŚ„Į"bw €g÷āˆv;iĶ3ģkčuC} ‹ŹŲ®rć%‡Ę¾Xż¶ž!xWÄ#ögš’…a»ÓüS£Ū\ ]]&Š@ø`޹ }·Vš•%F¤„d„wę¬×ēfehw"{+“åmō®“ĶņåĒɚĪoCܤ¬XŌ4‡M9õk$‘ķgĢsäd)ĒOnxCŚżƒ[U·cø+ĄźŽēYP9Y$—=Ž+©Ńītė)īęĄ^Ūµ…S&Ī«Ļł Ÿ^Õ§e·qFφ¹Ńēć6gŃž Lńƒ|{-¤+­i—2#…ūĄäļŽZÆü{¹øŃŪEšĘ­¦Ē"–ų«pYX/Ź Śēʸ޲‹é©łwŖÉo”üPńUž“ŲōŌ½Y`‰ŹŖĒœ~µõļ…ļDŗz0ū¹ķėB‘īĒDvÖ÷—†7^0Īźō©E¾„ jĖhšj6ŗ{¢¬qm-“}óļß>ŌĻ^Ēę¶Æć‹›»›kß1`™®2Fy5eŽ\’a|BŅoõ+”išd½·+'ßł}ŗõ4“¹ņ8ŹÆ˜ż˜ųCūIŁźž‡Ć1iś=ż¤ŖīŅDčOSŒž½«ø“š7†&ŌEŌ–d[x”ńżÓŽ}«¶œ‘ół}?«Ōœāž" sᆋsöŪĖMNµ¶*pÅĀžyƇ?hO„¶ŗ·/tż.D“Õź2˜;r£Æł÷Ø­„Ņčū|`ķcóĆĮ^Ońž”§ėÓZy±:*+×?Ÿå^ĖńŸąg‰¾ė ©A¤^źž¹U’‹8 ¢Ī oå^%j6>ŠŽ"ūžXńĶy¾[ ӂ¤sųбiŖDIµ– Qˆ'éŠāp±ßMkcŖ²×­4čć¹ycäÖÜ_4čę™ČŽā6j«r“#¢4Ķ[ĻčWöāźŃåĻXßµx·¼^¶ienė4°–$4kŸSMĢב‡oEÜ0”rTsė^œ-āXĘęĻ”³96Š’y!Œz÷Ø¢dF ĒZdĘ}QmD’œ"ŚŲ±’פѪv64õKq$Øæ:ēė^EhšÜų‹P‰ŠĶęcūµŸ#)Ģī­ā·I2UOPz»q >QF<õ«ŒL\Ī›IŃōyü7Ŗ]M©=®µ ŠŠDėņʇƒqÅCĄ…õ¬™ƊÖĮ5]2 £’!4FäšXuüš*­mĪv¢‡aĒ€¦¢C, hŲ©?(5jȬ· ±øÜOzMē©EqoŖ1Ų7†śgšŻyĢØ²0@Ä`…¤T·9ĄĻ½6+O;t™O„Tcr*JČė|į‰õx{H]Ž\÷!žĖž\ż¦<kšćāż‹iśZYéZ„KVgõ&»©RŠšqŲ›M~Ķ>Õ.|amŗŚ;a-³GŹvØ}§'ź+ė"ŌķÆ/tĶfĒÉx$+×!‡­zéŸ#ŠĒZ[—¾Ķ ŹnaO"B6³'ę_|„Üé£_Ņ£ˆ_DēĶPŻWŽq[ū=JĆćό¾(Ś`xkĀzs$w7“—žqĻ’€tĒ®Gė_Bx į׆ü=„ŁčóµÜ;ŹN0}”FڟG‡Å]XƬųi4ū·]ĘD‚Q^ÅąŸC7µ­FņŚŪXA(®æ2{ƒCŠ:–-lĻ#š÷Ć Ē>ńˆō}@Śj‘Nķå¹ĪęQŠsķÓük¼AšOų‚“Zźtß ­­öŽć¢Ė܊ć•3w(Źčųž[Ÿ|=ń5߄Q“Åp¶ś­–§­ŽŲE#y±eˆäžEfDåŠõ¶ZOcmh°Ć ąē’~•k*ź‹y«Ę^"۹ ?ʽ 1Ė)t9&DŌD‰p#Æ'é^ėįß Éf¶×¤{AĘrśü,—"GųóāŽ&Ux›)ļķf¾JM/Į¦DšKCā0Nvćó®bĒU°‚wŅ ›?w§”ł}GŠčlV7Ōmon“ŠŁQœWw­ź©qj"ž8āž0p>j£šmģyÜ·™}ŹKs‚z½ę“,.d@n#5pÜĘO”äž.½Õ›PšĢ­h ®kŒ°Õg°æ_¶łņ[1Ćīķ[›ŗŒöņ϶'f‰¹]ƏZ×Ón [-Ŗ¦łS•ĒSHĘORŌ¶×3y÷0ēŽā­i> ±øI®¢UYx$7ń}(Ė%m¦+„|ć„tŚ{ÜĮf0~MŲ ·4Ó2™ČųæÄŗ•³Å™ŪFY€Īź­”jw·Ņß:¼ųłq޶‹]=#JŌ­Ņ)ŁßĖøE ČūßJį|]Ŗ¦¢Ä±Dq01LxsUH%†Ņ4U”¦ą?%ę‰j.šõ£ŚŁĪEY²ŗ“˜ĖN'9&»M+E“’ݦ7cĶlåp -‹6VVŚ2Īł±’['±®^śż%ŽŠ…fåėYĶŅG›_Į>u”Hrą”'µt¶o5Ģ‹q…!Ż©Žę'UÆxŪUŅЙ-īHķ^'}į«-‚d'$d¤VĮs£“Ō/ʞ¶.ß :T–«…ćwŚĆ¹ļ@ķ/Ņ@Ų¬1ĶtW~,šÖ™qp.nĶ…ÓF ²ĒŽ3š£s•Ÿāƒ>Łb5[•†įŸhfĒŽö«wŸ¼4IµÄor™!·pGj Tūž ć?‰öz|Āx^)>a½KvõÆ Õ¾=hŠĖ­ÕäV0ɝ¬Iś.™©¦|J’ktžr7R~e®WXųĒu¦Ż›½&kyģąFß»©~?śżj¢µ'—[i’ āĻ4r^%½µ® ,OĄśtę«ĒūBų¹./$½ŌõĶRŚ | ¬ ŠwĄćõ­9¢¦wæ’i^]I'Š#–ą,U±ŽĪr*—ˆ~=MsqrÖ÷rĀQˆņ‚±=Eg(Ų—O±ĻŲünńĒiöŒ–ę`¤±äp}i)Ó­oęžH÷‚Gīö“yõåŗæÅ}4[?]iE™_/å2€zļŠ•‚1Ś—Äne±²}Y¾Š~eÜylz{ՋĻŽjvĆK¾½»¤ f7 ćėU‡mmāżWBӂ[_Mrcåw’Üw5å>*ųāY@½·¹™f G"+'’\õ¦)FĒ7ańU–c§%ä°ł`#±9ćŌמxĖ_ƒWŌ-’žf’ēiägԚ ™ģ šmµīmŖY_=©¹’—˜eĘÓŲ+«×>¢ĻQø‹[½UŪöœa›<õķRęmcĖ“_…:öÆŖŽŪé—VieĘä*; ŸJö-3L›GŗK8ƒ x—c)d×Š\įnĒųĻĒŗö—y$ɱX…foø¹ČĄ=kŠøńdš½ĀFdž93°:½ļY°±éŗeܖzĒip÷0ĻĢ£­q¶Ńé3j¶ŗ½‹ŚkŒ„žēĢā³”“* ŃōįxOŽ9Ž>lm#ŸÖ«Ż7‘dóXfė“ŠĻ–å”Ėizˆµ­l^ŻL~ĶŚ æ+{ēµ{dš{ŚŁ[Ū™ā’U\|æĆķT¦Ģe–“ÆI{47’“vĒ„z[G§iv­$˜øTżXœ~¤]Čäg†xŪā.·zé:D¦Å>ėĄŠ7ÉĪ@5cą/ķ Mg\½ s,įV7l•^’…Q# žŸ¤ß=„ÄqĄØ(>R}©E„Rbl†~“2ylaź÷si÷“ŽNxÅOkŖŽ\Ū“p¦Ņæ1Ü:×;e„ŲŽŃuU°24Ńȅ†0:ž5×Xų—M¼³‘å°?.@ó}æĘ‘J'ö—aŖ6«m§B’¬†@±€9ķ\÷Ž$o^Ū_ZŪLŹĻūŲĮįsŌūÕIČ;LŠ­¢„£–‚]æ)”¬{ūFŅ_%ÖI`³p}jYŒĖ{«S!VP®9ö½>ø-£&ÕÓÓ5ƒDˆ54»)$‘”čjÕ½šŻNč…''Ž‘F­Ģoel¢6ĝ=ÅsŚ–¹ä@>Ņ^=¼eŽ>Õ2‰ču(o-w›7äŹä’*£hŪē1(ĀnäzV ]Ōm|Ō)o&$śdēž8”C]¬yI=ˆū£ŽæFž~¾ųŠ>/ł>&×ēø‰-ģ`“rGƒ÷faœšźęčsNÕķ+ĮÅĶķŽ—įE5­„šmT#ŖģĻ'§?_jŅÕ|wmgs§ųoᦇŠHŽ[jS&ļ}zš)ÅņsæŅ|/įo‡öcÅŽ'Õ·u˃»÷ƒ9lüŖFü{ż¶‘y¬iV:ž­Ø‹k9"ܐČFõöŪž+ŖœL$ŽRå¬4ö·ÓtØ½Ģ®Åīš€’?_ē^yć ųSĆ©gÖ¤|māHŸÜ ~Rz†LdćÓ ­¹žĘ9]_ų³F¼×K&kY ;·!äŒ1å8žuŠÉń|;§O‡ōż> ¶Aę ™Ū<ž™ēŠq½ÅsēāķFyīN”f·WĻø}Ÿ9ėۊņĒÓuiZćPÖć°šö˜®ĢóĢįs’N?!]4āĆ?o/ü4¹øšēĀK«k’Œ[\O3FĪF7®xģkńĻāGÅωu‹}KĘ>%žķ`vŪ <“×­wBµ2’<ĀY„ņļw‘¤nKg#éP;L ŽsZ™·a’.õfi>‚¢QĄĀź:Š`LŹpK/Ėž¾“Š]€Q÷IééA2•‰<°ˆ0Ä’…hA•2Švā‚Č4Ł ;ńÓØõ­H4åņĆ:˜ć?/Īz™JĄzļ€~ųĒŗµ¦į}*MNķ¶“®”¶Oļ9~—ü.ż‘ü?ą«q®|D×S[¼Ŗ–P{0?•sŹV6Œl}įŻ­xōQᯠ/ī–[xĄŽpzśöļė]’‚5}WCÕļ|?šŹö ļ޶IšŅ~é'€9{ Ę儊įüE¤x§Įž)Ōgń•ܦrš‰“žĒė˜×ükć=zÖĪÓGÓaBŠGbäa½8恨¶w^ń®/…$Ņo4;[ŻMžAtī½‡Nµä>3šŸŒō;čGˆ [.Éßņ“}Ž=qYJM\ØÓ8O,iȱĮiÜ7;ĒsžEni·šf›„\.©§’kź2J¬&RO–3Œc¦:~UÉ:Œ©Sh·4:­ŹĒqpc±ÓżÉ ŒŽüé^wŖŽXé.4ŻßR½Õ&}Ó¦Q¶ē„csJp8xƒĆ¾ÓŪSńĆKzÄ 6IÆ«Įuųßā …-Žį‚¤Ko4ūT×µg9Ł(XJųwy+Ą±…•ŗ·$‘õ5ķŗ7…n,&¶ŽKUø“`ŁĘBŠįœ›ŲģUV>ŽŃ~ßE§Cuv!HåŒ!?Qų× é~¾’ÜZX[2AĀ ƒļD`gR­Ļ[·ųöśeŽ¢—q߆”ž<œžWVś jŅ|‹Įd®ˆŃ¹ž§ēöµkāŻ:Č3}žuS‘Œ*’yÕņĒÅMAšĮŅŽśż_ją’«óCÅ}w/cąčI–~X¬s[FńMnDE•yĄõÆm¾žŪIˆŪĀ’^36<½¹fēYėÖVße·ø“dČO#wlŻŖö-@»¦üń=žƒāļUM5^U†@œ¹źśšādļˆ^,æų›kįĒŠ“ģwr²I½HXP½ĻįłÕF§AŗHūö¢ųuāCĀĶ.Ÿn—W\©&²¾[JžÜWē\Z>­Øj—0]Ü=ŽœŽōĮ$wČ>õQ‘ŹĘ¦™ąm?N¼‹U}`\_$Å6ēj2ē ŸZ÷­{Āz¶™ Śx‰|ė{{ˆŹ§ Üuü«)T²±NĘÓųkÅv> ƒÄ už”o;I QÅĤśs_tŁ||ń&£šnóDŌtŲīå–ŲŪŗ’ uĄ?O’]C•Õ‰”Vǚüńx»ZVÅcf|“œ=±łW¤üGńE‡Œü”iśµķśÜ¼†wa•D##Nājg®„ŹŸ›^7ų{¬éZ¬ŃźńĖĢķ5°ŲB˜ųĪ¼ƒRŃndIį•|Ē9#`D] yĖ£X]B$GŚrīkč/Ÿ-ü ÆÅĶ›+ c+#,čĀŗ9®7ōĻCŌķõ :ū+ˆ§…ČS’µÓ¬&FŲ`ÖU•ŽoĘž Óüsį‹ķQ¬(‘.U 0•äc§ł¹­éW֗WZ”A&ŠV!H ąóź0kšÓ×CķćWŠ&2į>G ä~¢¾ŗƒW±ų„š¶Ó^“ņ[ÄŚTŸgøÜ74ˆ798éųÓQ;cŚ?ą›ßµMßģmūZų7ʱjŲ|;ÖäZäjĢČčHŒdšTĀæ½½FÓKÕ,ōÆhW1\hśŒ {k4lgLžX§Qh™©Łü ńIšīøśdØ_Oŗb·`#qƒŠśKÅ6Ņ˜ÖźŻe\:°8ŚGB+÷%ČžYąąÆŁEń_„üūbxrĶģµ>a¢xĘ xw ķłLĒmb¼œšągŠž=üS¤6Ÿt‰–wټ2ō`zf²ĆŚ-¤ŗžzžw1œ™Ē<Ÿ»U”Žć­Só"PNhėŠī8ęOŅøå&¬³ ]ēėŅ®1¹“‰›#0q [r(ćDRĶĻ”ź¹ .<„T‚§pśÕø$ʦšöžTłŃ4Y–Kūf·Ō“¹®ķ/ķ§ŠāŽX„ņŁ$FÜn܊’Cļų$ķæ§~Ų_²·ƒc ćlŹ 'ūŹŁäŠäšµ˜ŹT–×+$ńO·½ÜVD’žl0GcÅC¤KqkØ“~hņ»’z”–¦n©t;;Ūɬui'-ś¹Jø>iĄäĆõ®£āv¶žšbéĪŠEwŖ(k_7”E$fˆFīĮ÷>T×µµżū÷“ `z’:ī>xĘOų®ś š#¦ßŒBĒ_Ō}„wӏ@”ÓkK›yV*£(#-Č>†½OJŗh­a”mUS“°ģkc’QčurŽGØZŖ\LŽ “é\ŪKĀC)MŁ^zŠ#»—UƒVŠ;8”lœe@ėīkžæÓ.­]TnĒ‚(½Å·ˆR\‘Ņ‘Y.”7Ž9=(…³āFƝźN*īłΘ‚ŠbI-ÅĀŖI"0 ń]göżÜ 7 ꡀ°Ļ\żh*1¹BŽžO-Åʞ’Asj>qŠķłŠćęÓo-.ŻÄŽs1|°ĪįA¢½:&bAŻ1VeҊ!™¤ŽįˆĄéŠ .é°  g‘ŠōżEŅõ’Ń`I!‘JČĪ=čv9 wBÓģdøÓŁ”ķl)€=q\«„iŒ6\. …éA¶č·oto÷D®€ķĘz5Ž”%æ‡^ɮĻPįqŹ“AŠ¶3 »V“’fFj+ɵkIćŌ.-ē!ꯁ³ū¹ā oȰłøG'ڵ“`¶Åe`$d?.įApZźp¼w7ČŪĪå:b¹-*Ņ9 »ø€Ģev+ 9ąJ ‘č>Ó®5[;Ą±ł’Ć“ņœ£®~•č%ÜÓM›±Ōq“Į4Ņ78_j-wwkåĢ~Ó!¹ü±F‰~'·—³ŒÜRŒzZ}ÕÕÜ/-Āø,˜8ģ+Źī“«‰Ł£e%ŽxéĶT] }?Į_o…™˜ĘĒc“^gą;OÓ^KØŚO,īÜēŖÕ{CŖ½įŪ +kŪit%W·ĆJ™?0’ Wss ł÷“¹¶1n9ĀŽ)s²™Ō\«&ĖJņSÉĻĶørÕēóxSBŃ%›PT['v/ ž śŌ󘌮£©½õ“Z(W“SŗC““ō¬?[Å®_ŁI1–#äaˆśōؚŠŅ2=‹ĆšAœ‘Ā’æeŚŖŽ—w¢<„į’=Ģ}Edm\óķgAƒNxV%$ņ[#>ՙ›öŁķѤ(ąžtznŸ¢i֐\JCB̧·|W˜j‘Ī· Q‰±ō„'”pÜÆghķrMŹ:֍ć9 xĪl‚;W,ßCŗ’9ŸźqŒW’»‡$ó޹ėHšß »ęķ^ewv„ŸF|¢4øZOłū9Ėī|ŸūiŻÜéŗ^§£-„å¤wS <Å.>čĒoÓņ®ƒą×…¾xZĒĒ6ZĒ‚ōĶB÷WŚ|éŠ8\ēėž+–)#öÜ~ S¤ćOIt?O?cßŪc±ǂõļ [čŃkś%üž|i7’-å)äĒlWūE~Ūļķ/kāOŽčśõ MęĆJū+œ‡$²;žpޜŽ)ĪvZ‚ÕšFn#|A‰“mZŃét­ųā…¦YŁiQĶ­5°™ŻŒ—$ēš5åæ%“\Õ,“ūēŠŽLØ|éÖ¹:Ÿ·āėJ1ŌūKž Eń#Y°ųĶć’‡w«m-†ÆŅ[.üyR"ćwŌćł×ģ_ĘO‡zw‰¼3 kö¶)öėFhī6O\gß®˜Dšźę²¹ó/ƒ>ųļLńEą±ho|a‰_2[¹8Ūī+č žĪZ·‹õmOžg>š¬(³=ūƒČm£Ó°üjłL+ē–Ųķž(jæ õ-Ä_t;KM[Ú§‡®l59~IœDĄ>ÓÓ<Ä×óŃū6x–o h¾&š5żŠ[%üÖŠBGć'Üā²žĒµĄxŗ‹įSķ«žŁāĖ‹rĪÉlŲΰN²„nĄÆńV‘¤ė_Aqe$¾¹‰³Ų×cö ”ŗ3ź+]7Ć·¢£I∤k·–Č"¾f‚m[N³žÜuĮ…‹ĶœžµÅn‡Ąq%SŃ÷;’„+k’ }Y D–ęÅĒČ0É’ģ*żDų]Ŗ%‡Ų`ø“ÕJI’6Öō£mψ©Ž~Żv*ų¢īo‚“ˆŃIü!)E1«Ÿ”æ9#łs隶óLÓfæ¼é5Ś2¼¬Ŗ»°IĒą3^'”õt&¹SīV¾\ƧėŃŚĘn-ß “²žÖŖxĻLÓĘķCĆ÷wp-ŗ‹ėYRC֒ÆĶņ0<Œfŗ”¬¬sć9yZ’ŗ>ż»~-Y~ŌßšL |d¼¶¼ŸĒń}‰¼™œ3É$l°»3cųÄŠ±ļøšų;ö‘šŽ‡ń;ž ±eāŪŪ5’„ƒĆŚ«gN¤åĪGę$ÅeUŻŲžlą< Źņŗųh»Ŗx—oFąģ»nĻÅ_j÷V÷žÖYw<÷+ŲąÆŹr?0*ŸÅ]>_ ųĆPŠ¦$ó6x=?„xuÖ¬ž€ĮV÷Ņ5¼%®ZÜŁµ¤‹ūˆ#ŠWÆk΁&·ąäŗŗæ“"YcŒ‚H8®1\ŠÜūŒ<ļŁžü]mĘžæ@«,s¢Ü$UqĻėÅ~Ļų\ŅüAq}ydÉ=” H6töķ^®ō>gŒ©J„%S±ķßųŪSšM֕āmīk]_K¹ŽuŲ@ócēCž0Wu~Ī|š–‹ūHžĖ¾1ӓǵšSEžŅÓeu.!øŒyØF0r6ńźkcł·Ē˜}O—ēJ ū*šōnĪ3Šæż»+v»ī+ž"ÓŪ_ŃŌĻ%Ūm”’²ąąųƒRųLĻe‰AņGµ…HŸÕMZge-įbV"Ż}:×ćĶĒľŌō¹į3Ģ˹Nq“ŽkĪ›gÜeu-cĮ4?£xnižIō½[~Č2_Sś~ućŽ%“ńW…¼B֞#Į“?˜rOpzg½s7Šż#4ž#č?‡¾5EKkKéē;€¹ū¦½¦ūT³¶†ÜM4a„“bóŁ¦uJ +#ʾ#éŃĆsa}ooćc¾+Ō¼aą]cāģ”öŗM†q=ęćp€yÖņØÜ §=}©œµńr„M’2OęķśŸ>ü–ėĘ'iBĖ{¦Üż–ī%Ī[qł~µšÆĒŸģóń÷ÄŃųQžŅŠ£[qjŁĻŁņ>tü aĪ}ŽZžŃą¹ĒöDĢ9b:ż+ŠäņžĻ÷Ōæqަ÷=ŠQ1oļõ{C1Ėq¦Hw:©čFyĒć^/ā=óČnR9Vā½Ļ© źHīt×ZlĒkĘĄWJ֑4+*äqČ Ņ”F[_*"ä³bŖZ]¢åO.'M7ŠŁ–ĮM]ZØ<ß;ĖhIłń½ōŖ1įŸ;B·ZØFĒL†Ģr͵8 ½ tw‰ɂTö®‚$9ų„­±²Ō™—|Č7(Œq“łW§\ZÉh„W#‚= aQvzBĆ7™Ļ8®¢ 5$ÅŲ0tś×:]ŽJ딵ą›ūļ|Lų^ŗ®½gįżQń%…ō’ó[<ʲ9°¤šż"’‚Ź| š·Į?Šž"ų.āžēAד¦±ŗˆ>ų#xˆŲąöÜ~UŠ©{Üü7ŒøŖx+ʰ*7§ˆö±o³ŒSKļ?ųą”ń”ƧÜ6—ØF„£óG\{ā½OįļÅoˆś>ƒƒ5ī›öiü™ā'™¶kˆųQ‘cć-õłĶ¢ĮāxšūĄž:Ón4Z0]² ׳”ī3XŹ’;éÕGÓŃ›āÆˆü!įißū:Ņ ē]ĄvČŸ^üŸóšś;ćGß ü0µ}6ūXµÕ•6ˆŒr*8ŽqڹgdL§­‘šdŽ0‚ŪYŸOŌ!ŁJŪ-ä~g=ˆ®óFš“šēaK¶Ēļ1É«%ŲēŖ¬ĪūįÖ»„xOāw†“ßhśf¹gzĘ8–ᶦž0 'ėŁ’h?†>Ņ“{ŸŠ>²›Āzå½āŪźv 'īfFR2{×£†CĘÆ^Ķ£ä/ƆĒT•ō‰ ÆĶr»‹g ~&¾¤Ńu$°ŽK‰WåO8< śL7Cü—ń¾ßėV5Å[ßżźgĻāØ!Ń#I“•†AÆ?˜„½Į–Š2ŶÆLŸJõį±ł Do&»©ī·f“rƶ+«³Õ\Ż ĆĪåуڨēžĘõ„”ģÓHĮ>aøäż*ŌŹ)ä\ąē­Tw9g¹ĖjW7&B‘DØpFįŌ×öhÆ.Š^#¼ŠyŽ+cš[šŚÄWZŪĒl‘Myc ÷‡×Ö·¼=cåĮ+\²«ƒņ’y “¦‘ ¶·‘ČG|b¹Ķ/Y{k¶›~Xüøć Į£G_ńœ³ µcßĘ1Ōā±ģ5·„¤U`N‘Įö V.Ésm«™ģ£łÉRøéō®gNŃ®ķ/Ä.²Cm!Ā7挓Ÿ/CÓuo Ķ*‹~Öņ²›n0~µåSčSīšĪīq=Éc)ąŸzІßé²Ć#ŚĻ4ŃąZōķOLµ–É Ŗ±æęe>‘o§ĪĮ.<³ĄŖšxĀ[g·Ż#ŒŒI•«HÅv’ÄŚÅ†į2Ķ’®k“¶Ōo–b9eŻČ'åD ŽŖ_ 6²FRMÄœl6O¦]|µłIĻZ咱Ķ(õ;;[ņŹĮ<ĘX› Œö®őĖó[*—BK+zTݘøėsœ’E··ó&¼Ž=˜<žµpŽ ńu½œØ@És|°ŒēzweĀ'ˆė ¹†hģ?ѝœØpw W“ė~6ÖYRŽāw— ]›š¾k ~Ÿn¬ŹŽźź1Fp¬łĮõŁYųšźZlėdR§ßCŌżj˜ŒłdŠń 5Ł”‘[°®ŽŹŚK÷7öŃ]*Čp$éRĘÆ®E§XČØ—\żŅrH‚¼Īūʖµ¼‘[ŪN l£ŻųVАš0ōĶ: :Łg“t #厠Žęŗ}?6W‘BÅ*¶XśÖŖ}ŹNĒ#co©®²ÖӍ«%ĮhJ g€kKÅ|’3$luŹ–'ØļĶ>q7c£šŌśf™öq«Hd‰“nüe“#ÆÖ¼ßĘŽ7>$·Õ]MON`zž5›d_Rķ߉tū+‹ki¦BɅ$(ŪĀ›ć Oė÷Śf„m%„½ÉE3Š‘Ųʲl”šŌ§qco†öGŽtŒ¤EfÜŽ•„].ĀŖp­RA"ų’K˜ŅŅY‚¶1ó ådŃ5sŖS,p£oNį2šqv2”®Vń宲Śtwvčļ@#Œ+˜³š®§ØGm.«p2;ūÓs*1īwŚĆm@Õtę°ń)ŸD•Ä‚4“jÄAĪŹś¢×\DZ^¢I:`ƒéRYWRÕt}:źmSC?g»`Ϝg•ņęµńÅ'Ä”õµ¶3ß;2r§4€öFÓ|āt³ÖeŽžļVPD’HĄ©=ń鎹½kĄŚ|u-&ŚS½AbŁūÕ2•€Īšō²_k֊Yyó1Į8=ėŪµ‹c¹ą>"‰)Žöį$ŽĒœņ£Ž±“øĘ(¢3¹lÖF–ŗ:m3^Ōō[‚¶®’[1ł‘”k„Ón"½šY„‘¼ģīUŒśT©ö3jĒ}„kz¦³H¤/ægķU|7Ŗėx—Kŗh"ūO•%•cŽ |™ŖOe>Ė9a†įNå éÖÆŁ™ŹÅŠZĢ©8ņĆp£­S‰žĪY¹qœ·½sN63-½š~ļ;€¬¦†āh䑀ŲĮ’‚ąĢ6Ō¤ÓŁ &éåÜč6šźvĻrĪ^Óź*g±©Æ|$Ęß\u¬7Jž­lZō¤Ńc'ė\5ēdvŃŻ‘ļŽš ÷q‰cT—hŹł‹ÅzėŁGį6H§Œņ ĘAįbkt=štM7^¹›D0¢¹µ‘„‹•łõ®ÄzŒšdl҆hĪHć!k*Q»EcęļųĆūFāĀ(…Šdb<בXŚ&•{ā[‘ōӗAdeB#·zcšw–ēŖņ:ŠfJ‘<ŽŹU†~•Ŗ–`Ɔ ’qó¢€±*iR+ŒžčšxäÖõ¦”öš¶Čä|ŸJ™JÄø¾•įł®b‚%V–éČUD™‰éÅ}Åšwö%Õ|yckŖųŹāoxr)–gŽę2$ŗŻÕĻ)XØĘĒź_ģńš#Ā~ń47ƒÆ-|§Źæg›R–0X ģsĒē]·Äčžńn§įč Óō†ƒ÷q‰GŹU†TšŽ*Ęn¢,ų„^ĆM{aŒ»¹$”ūµó\^Õnõ¶[č¾ÕfĪeąö±Zū{ 3ńĻĞ/×<5£„h±[ÜJXA/š2"^»‡|וiķŖųšśuņĪ÷Ǝ8ėźģ|ē³Kc¹Ó5’xbžŲhk Ģą1²nÜ={×½xAõĶRŅmxémeu°˜ÖlßĻšć§ųŅåE(Ųńk"ŪS¼‹PdKŲæÖmåGØڽGįf‡Øė~ Õ¼[h²Cm ȎžH?ÄGQĻó©ä„~#šĘ½ā}ćLŗFŗ‘¤gėŠ{Wœ}ŖėįŽ»k”ObÖ°O†4ą°õ«±.™ļ_ ¼māõFcn-ģ™ ĢłĪ{cńöŸ„~)é~Ņ×R×£¶‚(Ƽ°H'”Še(ž ńŸÅ?>%\Cā?éZJCæśHŒ4œŒd{“_O¬ųONŌäÓ“™®ēŅ‹°1ä ōöśSņÅģ}šū][*ŽēJ¶[›F%”g…ėĻ­y‡Ē=CNńÄ©£E+[M y*Ƃ#9¢Ż ć~§˜ų:{ķ;C¼ÓīÆ-Žī8Ö1—Ļ™‚1×č+ė’†ß,¼ąkI51q-ÄR™įø KßĆņ N7<÷ćgķ#?ŋԺ“ZŲĖC$`†%xēŽõäv>'×&’ÓēóøĄóō=©@m*ėĘŠIįØÅ•”ę;Ś»€?7^€×)eįÓn®m –öāĢ†%ÉĀēw…p1cTµ¾šF±§ųoĘšMkÆC:³G"œƒž }=kéßx™õ†śŽ‰„źĘH%—Ŗ°^ƒŅ¦×ŌĪlų_Fń³āŪ†“ūVÕs.å+»œaOƾ¬Ń¼'ā/ ü>Óu»ŅŪ]#*LŒ_ńöŖäŅę™Ć[ų‹Ä茒‡ĪŚ|»„ņžšēzzW¾žĶž Óu’ jQź–Ńź¶¹*ņ“J§*iIļØļŒæõ/xCPÖ|+i©ÆŚ©TƒĢ;߇Jü¹ń®ƒ­ŁīMBĪ}&ķY ‘v“oÜVQVŠŽĻ(Ōm÷Fė“cq5‘ ½“‘……ŻXõ®ŠlÖKCķߣ·āLw7“ų>öī;k’A‚3°0•÷–ōh£+.ą8ėüėY-Y-IRLFÜaO\ó‘_žŠž°Ó/āń6œ.ŅÖfQq€cŒ“Ō~ʹZŌ֔”õ žéL cŒ‚O„zĮ‡¾) ±ļ÷Pø¶’Ļ$uĘW:Ÿ‹~ ‡CÖµ:;–’Śč›­>d=øž_?šDļŪ/ŚöyOž1ÖžŪń3Į°ˆm^ys=ķ¶>S“ņ@.}–“Ńič~øŲ‡¶v‘¤dq t?C_jx?Ä6¾(šģ0‘oõ’­\Ņ] P><ż©žh^9šWŠ|ÆŪ-ׅ5ėgÓuC(WĮī Ļē_ē©ūUžĪŽ4ųńwāĮOڵ}rÖsH¤-ķ‹’ŃH½ń“QfD£ŠųÖźĢ’"ąc¶=k0Ū%[ļ tą×\YĒR6XŽUŪ¹qŅ£Vv ©'$Vf\Ż˘äSn÷Ø&%,JŸŹ«œdŃ4„c ß(9«†\Ä]A}øČµfčŌ†ė`†b’kv9lŒ…ÆŌ/ų$Oķ‚?cŪ;Ā—š…Ī«Ć?N4æF É»ąE3/@ć$ ąž¹ØåŌ릢¼}ALv» Eų(āXeHü8śƒXš‰H‚¬Ń…ņ‘^mtn|aūHųORÕ|?fŗ4f]WHļ“ēQ‚T ėŒgs_ ųĀ[XjĶ4FößW¶—™<™įĘ=ēńś×!nZˇü7ąf©šļĘŃxæM²KXī.žĻ©¶Ž€ūcæŅæ7µ/šD,øį‡B+¾dsUĢ°§÷‹øŽzŽā…† æÓ­tž|Ö¤3)•ĪG¶@ó쉸.h6Œ¬pv_lÓõ6–ĘdŽü ×Gy,·$Guv ®dfKkqÖęgun”T>µ³ØĶ¤ĒŚć mļŽō˜Ź·ń'ɬk“¶J’zÕÆˆģtĶ<ŽŁ²¤Ź»Œdb‚‘ä^ ń.£ājFY£µ3|ƒšŖ—¶?Ł‘Å,ļ²H:ƒČ#փt]šī”o3ż’h’Žrß?xWM$÷V×O[»ĮŠ0čG½J7&µÖ|©•n “ßµA$hŚ‹^O"Ē8#„E«›•uu‹k¶U[ˆć†Ųøfō ønr·s\ŪŪ ¼Ä’ßtšŲѵ)¦‚įbłM÷¶Žō’čלżŒš•¾‹!U˜}żEkéŃźč’KrŽ’)‚9ĶWBÕķ”CUŠęīxŻQŚNćńX–z¬és«Åó«ķäć<Ō—Ü÷%Ófš]ŗ…ŒØaƒŌWŸjóŚ6©,Ąé9EŁ›öÓ o4Bó0eUZoˆ5™Õci#©AĘh:"ģ'‚oźq­ŒŹńą„=’ ÷}>źę`¢ęĒ÷@©O 9\Ö¼Ž6·V <Ąōõę>6—Ķ¶ŽŠ¤~c)÷ü(ę$į¼ kŖP EZŚÜ7—’>ņś× kž°°‘58¼¢ąÜqßÓņ¢×4Å¶¼ŗ+Ē<Ē {We¤xÕ5dZMnhŠīI»Ēō„ģΈDć¼Ov÷i~npŖ7‰šęŻóĘGZĶ£CkP׳m2g½;įķ5q,‹p”•Nõ¬¦iLķ–Ī "ŽźŠFų_Ž)ēĄj’hgv]Ģ”±µGZęØģvR9EKej]£Q!’dⱕ$­}oÜ$x/jńźīģ«žåŅĀš¦œ÷qrłNNkšhō-*ś+«8q»ą×@dµŽŁbHŻn÷ōÅsĮŸ±E#¤į!ųo«ųŽI#0ŲŽ}žH™rĆż¬ztüėŹüĻģŻ6ś(2>FĘ'ŚŖ¤z‘S–ŚŸ/k—qĖ ŹÅz³\Ęr0qžyÅxę«ākĶ3\Ó®`ņX3„;Ó9jęÓ>_7ŒyļŁ÷ÄZĀ?Ś“Ć:ī£ēiöv×[ƒą“nĆ'Üs_×?ƒļ4OhWWÖ3A{įżIw[Ģe*FrčFkŖŸāåĢ®į·¼šÄmOĀ:ć [{ØLÖ2ölvüŽkčų×RŌ¼%eąø!62Y)‘ó7Ż[rhsŠ”•ĻĻ—·»štž"³½‰u+«+ˆć‘˜ļ œ‘ī0E~ü6ŌāÓ¼iā‹[¹eŚ5kŸ-\üŪL‡óé\ÕCōަ¾°Ŗ-ұöœb Šź"†#ŽéķTõ=.ĘņĶŽX£,Čc„qT‘ś…Z—އĶ;°ŗ“µ›P°ĢÖéÄ«ĻČS^u£’eź~ń*<%õ+†VAŽŒółb°±ł‡ÅĖo#—š½Āų[Ěf£w4šŚÄĮ%@¼˜ŲŒćé_¦Ž•“’±ĢŽŽXćšßw# Ž•¬ĻqUmQ1?i˜ī5…Žń Cęµ…ÉXęÜwZ>ARlēł×׳ÅIuO ųoÄŗD–Ņk k˜Łs—ŚU”ƒź2+®›gŲ`+·I¹>Ÿ¤ŻĒ,¢/³Ē+3IŸŗÄ䞦½[ąæĮæ |]Ńž$IećM;G×t[1=­•ģA£»q–ŚÄóƒ“.9ė[sžwfSĮåÕqQ7"½„n’€Žųqū|~ń‚WLš’€5Ļé·×ZD0Ć«™cVø‹<(Ü©w&z×巆¼){āŸŲö‚šeÕõ­ėŁčÖŚŻ¬*@hZäw’–óÅ:‘µēO3yć2œmY+ÉWü¹?#š?RÓÓ@’=69ņdŽö ’¤†{rEu_tė«·šßˆ^å[»hć™Ō€Q¶Ž¾äćóÆ*µ=Z?¢š•=äĻŅd:Tčv2¦kꟃž;›Ćž%ÓoķĆy "“ŖĄį”õś×"½Ėźic»ńO…ü2ßõĻx^åāÓ'”J°§Ə›ŁĶ~‚~ĢŽ3×t©„ZĄŃęV$Óøō’ėW”‡ŃšføeS (³ķkļéĻn!‹O/&3ę»w¦xBų‡YM7Ćö–:“×`gņܱ8AśW§sń¬^ ÓZ³¹ų‰įOˆ —DŃ<šÓÅŽŌu&t±?fó’åŠdŖ: Į•ć×Öŗę€É’ ƒŠ›čĻcń\VŚĻ‡Æ>ˁ*„&#Ö»?ŁāUƇ>"OąŸŪYź>ń »Śłķ7€|ƒø±·ó¤Ż'=ĄŗųŌ”¬œ]½muųŲłĆIų“į„ž3“žŌō K« tŁĘ߲έ†<ĄēÜü¹Óē·ŌŪĮ_4MvŪķ# &—v %£ėĻ×üŠĪ[AįłYdŻ)Q)ÆL†eĘČ ¶9>õ˶Ē-ZlKŪ{msOm7SDšßptÜ(ĆŗžÄWSćų×Å~Ox—Äś’Š4KPŸe]BéīŌ(ĄT,NŃӁT¤ö>s2ʰõŖBµh)N›¼[ZŽ»]*ŽųVīļNģ‚7»YŅćŽ¼šś‡įO…¬ĘDŌK*ä’pŖqÖµ„ē‘ŽÅJÖG£§Ä+O C&¦½æžŃÉdžF?©Æ‘|kć(“”qod’jÕåw%”ą 9’ڤ¬Ÿ§‡|ͽŁįVŗeÜ·Mw8iĒĶæs׃Uļ¼g2yÖ"ŪKbŝvšĒ¹Ē©Æ:¤õ²=ŠX4sņųjņ)Ōۘ]:cžµŻxnīmā Ł‘~Óe0Äm51ŽŚymŻŁõdŸµWÄĻxjĆĮķ†Ÿ¦@«_-*ƒßēĒĻ©!™¤,>c¹«ŃÕ=<611ī®<Ł]€[ųēĆwž%Ó“©<3ā«xK‹xIŪpē³/o„L‘Q©(½”bÓ¬õ9ī3·”1WF^‡5=ēĆĆw§\„œ‰Ll@‚¹'H֓ќ‡Į 3G½ŅüCąÆ鬌ąžĘćvß!ԟ•³ĮÉž•¬ŗTŚt—–wsG‚c;Ē_pk2ću<’Ē^č6ę—9r§~zW{¤ųYÖ< gć½:D{6q½|ÉĘy¤C®µ$Óģ–ėåX³“Ųü«Š‚Ģx_¾Ó@DĢ$rõCś’śéKbe±Üƈ4Ė-²Ü^ĄŠĄ–ÅNŽ)°¼ą_3~xoį©G éYŒ·ÕP]Ad¹ćŽÕė:tÜ¼a\!ĄžµI¾„{3Žų»Ō:VŃ–wK¹Ią&G#õ®SĆ÷Š„…Xyrƒ“Ö©je%”č­0UĢpŪ½ tŗ-­¤wHÄ7œć"‡–Q<{āR®…ā¹!G(uč#ł×!s}#`-'{ŌØœóz×ÖW†1ŖEi#Ģ qÅ{ÆĀĻOāĶŽAģj@wĻ@k· OSēs,_"?A~hZw‡­- ·Ž5øI2\š¾¶ńĒ‹n5_ƒ·ŗUݱ½pĄG&q»ƒĘ õ©ĘĒ꣕i+³ćæ#ŪķŠ0Ȅ’ õĒ„u><šļEšūk–Æ$b#–uÆłę·rŠåĀÓꝎCĮ?T\ŪĮÆ<)ć3ŽOzō‰zYŌōõ‹u3@Øvȼšjöø| އē÷„õ9ōĻ^“H«a Ąo3¾ž7_§šn§cā 'MÕ q2K;½č;6ŽĒ’˜^ŚŻŚė_;ųŖĻUń†ØųbĀUŒ»„$“…ĮҵŒt3š“«~ųZųWHŃ­ÄB( B¼e½Mqu+FK1 fV9aÉĒ„9“Cvģy—āĶ!-uKFöÖÕĢy¤Wvę¾dż”G†¼qį{©u}6?éēĶ“¹÷Ė"ž­Č®*•VČōÕ6·>MÓųqÆžŌö>ń)Žū@XćŽĢĖ·Ī+ĮažųĒł5Ć/yŁJ§.§’~Š’³ž‡ą»ķ;@Ӓęv‰¼Éfs’ķ×#Ӛć|1®MfĻT‚X®#!·‚Gœi3*•łõfϊ4;Mv+iV?.ś$‚ąšĪC/é_Hų×㯂>'ü Ó>뾽Ҽuhń%ÖØ”R+ą˜ł÷Xœt?żjōp«¹āā0ņ“V>jšA Š…P:w®«Ei<Յ”¼DóžŁÆ£Ćt?Čļqr­ÄøéOuVq’Ą_*ü£­čkbś"X÷`/qļ\¤O󜆬±ÆV˜Ō} ;™ŁcŒž™ćµv>™d‘0SĪą:ÕÓ}Śö=ÖR(+—S×µy\Ś:t³!}ŹĒåŖ‹³9dõ5¬ ¾žeb÷{tØ"°ŸNŌ幝ƒĀßt[&s6z7‡¬<7«)]Wßi ­Xŗ¼––bh” ±8ć½;ˆó[{Puaäo¶ÜœŌK4’8Š}Ø1“7ĀkČ¢I2UNW=«„žĮņ¢Yc`Ē•¤e1¶—6ßĀ7€7…Xöż+ J’„Zŗ¹}LŖ@«¶-ĢA`_žµc!ŒŃ¼1c?ˆWSÕmQ™r¢Ä!ō»[•¶ÓīVČ$vČH)?t€T‰²ŻŅ£Č–rJWœ/\}kšŌ5 é }cß× psźeXźŚœr“×Ę"ČICĄżA®Vśī+­BęDUÉ;ŹŖą ֑ܮt\†¶ĘTıœdgė[ś-Ō–.÷b$d0aĆ„)>ĢŽ Äž&vŗ1¬F³”tĮōõ¬y<]4BU2\H£nć¹śõ£˜NHéģd›X°YŠ?“€}ĒÖ¬æ…/¬Høø¾–é&ö7ü³°¦¤čņOiĄźn–³Čųž õ>õf?R·H²eɹ¬ĖG|Ń]-`Hdt–ĘrkÓm¢’ŽāŅ‚…Ż·É“qŌ ÷Ļj %‡){c#±vvķB½¾µŪx~=nĶ#yä7–ūpIč(2P;VŅN£d'øŠx—Ÿ¾3łREgc5¬ö!Lł\§ DĶ qé¶v°AfŒź«•ŽŻ«u"œŚĢĢZ+…LÜŌ)X\Ē7¤4¦ićŌ†f r6Õæų#DkH óLNåŚAņĻæękIJĆ+ųwĆ·>Ó×3“š–,ķĪ­uwRj‰lÉå*lg)\Ģiš š°63\ĢAŒd‘üéŚ¾Æ©ŽjƒH±Kė{‰r6:’»‡\Ö2Ÿ`GćRŅ.ķķnaŗC ,‡ĒJ·į½"K« '@„óøĄ®jŒŽ(Æ$Ieu­ŌČ$'Ņ»Æ“vÓÅušł\Ö m?5»k3<śf”öś±P7/GaėéNšWÄÉ¢Ó{Ųme¹‰ˆ>h8ąō÷­ąō!ÓG“ü@ųÕā­kP_ģ‹›M=#“åŒoOóü«ŌtĖā=ĮīŽfņĀnQ×µŅL©«ś®Č¶ˆņźzUO-`!'øĪEčsŹ6+ÜH.c{v ģ¼ćļ<5ŌėŗDąöXåøņýĘЇø®Xi¦D¦I U ŽæT„re¹~ &øŁötu›ėĄ÷«ö-,·āšÜ¤ˆ6…Ż…o|V} Ū±_Uµ’öī)ņ|øó·“ü«±šn¾š%ķ¬·v±ßi‘J’IŒyŖHš¢ĘG췁¼šŸÅßļ…FżKQ¬Qån= čkj!”Ėˆ§Ó­s¹#xǹĶ\ŁÅrģ²DŖƒų}«øŠŚĆN[y-&EĮeažGcYĪ”¬)Üwˆ/5 v䶍§Ł”Q–XŪßAZ’ķ%°×”øÕ4i'„üŒq¾Žµåāk+XōšŌœugŲæŚ~™µµŠ hH! qļė\…õö£ŖŹĀ°ÜŚžgÆlW…Qs3ՌōŌ‘|a č±Ķk{Å:Ēå…ܼSāÄO ŻŁGck+-’›óū$ctÆG †f3•ϼ»G¹ž-±) ó9ą{šū׹?Į?üMŃ-¢š^ˆ–žw÷[¹e¼`u ·\W¬ØXĘR±śĆš+öųš~qiį'Nń§Ä©ł¹Ö/œ-e#žXƒ÷@Æn»ųE§xsW›Å_~&Łų¦ĪE i¦Z‰B6I­”9JāXÜŻųŸP¾Ó< §.•įH£ßµe*øĄéž¼w®·ĮZ|V’NćHµA8A; Ü ņOųśVŖ™’Lõ OĀw“ėŚ}Ę»yk®éķƒ%œl9Č=äń^ |!5Ÿ‡ī/cŽßIŅ#bW`…½”w­#)Xšķ;Y¹š†®ś†•-ÕÕĶŁ1“Ģ…—€~SĘ1Ö²5sŖO Ę”«jņLŒĢ~ĪXĄ=±]1C6aŲųŖā÷Ć÷Z^“~özJßF~EOæŅ¼ŸU»ū5Ģóhš“ś›D@t<7Ōw­ćOń7uA’ ÄĶsH[X‰x­m…Ō … NM~\~Š’šQ©u—Ā_ ty“fvŠi„åńdóŚŗiÓł{«ųZÖu OZÕļu]FG.Ļ;nę¹é$q!1VĪz×BDNC%;ÕŁļIĘ{Õ%ŒĒ¬3ŸÖƒšo ‹µ]ŠžzœsSģĮ]]Or:Pr9¬x!äRXsŸJю›ę'Ž„t4 t-ŪŪ“hفœf“ “ĢYB>q€)7bĶm>ŅK¹R 8ĶķČ‘¾ózū7ą—ģ»ńWā­Å“£@] AĄinfFżŚƒó;sXĪeĘ=ĻՁ’³Ćźś•„iß~";e' ÄcūŪO\gé_Hk>6S궟µ›ßų‚ CZYʁ¢uS°ńÓÖ¹%#ULä¬üCaŖjņxgūFćĀś|«¶kß!ˆ}T×éTg’„;ĀņßIūOˆ®„oŻź 3ԟš&³ņ4P(]=Ÿ‹t»»^źéļ"Tb0>QÉõ®Ām:ŅétŻ*@÷’0 81žŁ?•+ō5%Ō"}ųĒs©¦­p?ÖÉÕXÕ]KO×õ4kČŚÖĖEPVQ»aq·šFź&%Ž­{„é3ŚéVZlŚ¢åK0Ė)õ-×č.4ķ.Āųk÷fśśe'łQˆēéXÉÜØžw.“­ŻKwuŁŚčĮ|Ļ:I6īö×Ļ~?ų…µEĄŚŚŽė1HˆĢpÜG#łÖnŖ(󔍼{ŖŁßxŪVŸQ›Tœē$µéŚOĀŁaømR"fŻ&,MsT’ŁćcŻ“†“ŚÅYŚ7 ¹¤Ūڽ»Į¾xueY¬Vņeł”:åø¬®a;ō=«ž‰īlDWQɱč'­} šĻþŃ­-®ļŅŚźö<Ø“øēų½±ZF,œv‹P7ŒęŽ(` ņć >•¬čé<#+d|Ų^“Ü żO;ko“]$2#·ĶŒć…ś×aqįż 8e† ŽõS’8¬¬tÓ}ē«\‹Jg×RŅĀŽźYŠįߣP{tÆ™"ŠnŚTxģ•FfŚ?„äc5öĶŠŌš¶ oµ{KŪ6i¦†Q±ē’õ«ļĆÆé~&šģ5t«ļ Fē`\øČ-Ž:Õ5 6|ˬų ĆZEߗ®_“ÉšY‘‡š dóŸsW<'«>ŠF‘gw,ŗ"’ÅY°_°8śRd9žæāK›]CµÕ¶µĆO†Xćtg¹ķŅŗK_ų[ĒV6ÜGjīc ®Wę_”©nĘjocŽ4é:…,læ±l%·RŲ¹)—' öƓ>:ė6Z>ƒy¦Ū:yßĖ9?$cԊ…0‹>@ńOм’ Ųų~Ō[[\,Ū·Ą3qœø:ńŁ-/Æl/#µ[›‹ōaŠXēpĻń­QÕŻŲż~ųeįżĆt;»[z.mŠŹXØ{gļ•ėĶy_Œ|1¤M¾Ź[kד Ģ£”ć½Źy®›ąI­źźœšgīˆœ»{­qŚŗ×¶:žš‘HtĖ1+ƒ»·Æz‘•Œö×·qi6y™ä©„õōŌ6?„Żž$[ęrĢĶ!lAĻJb0,,5WQ³C8²‘œĘĄI޼}ī8Ʋž ü?ŅÓO¶¼²Õb›Ģ- Š‘ĘrHō9­ovg9؟Ē| qØYÜi>‡Et%§xŲ©™Ļńbø/ųWÓo4ķ?ڔVŪ¶ĘdÉĀNG< ÖF\żņŸŒ>x÷Įž00Ų$Śõ€ “±ļsĻ_˜żkõŪąßŒu^Š|_i2ZĆobe–7aµpGsO›K)+wØ’ĮH Hµ½n&½:“é2dŚŽĒŌƾJų3{¬xĖā|Ÿ®.e:ĖÉę4.å1žĒ¾*#Jćå>Āų•ā Mg>øm¹€“‘#Ī=kįĻ üOÕ|!ć[߈ž»m:+fn§oØ=3ZSZŠ1±źž'ńRü[ń"ųņž;iõi­×Ķd]”vŽ›{tÆNÓ4ė/Ś®ƒ5č³Žā/)@$qڵж„Ī+cÅĄĖįÆ2+ČSK.T¹ œõl~&¾«ųyć žĀĒĀž2泓K…'™Ī &8ǧcNę3§sćĶĒ_Ų¾ ń.ˆ/mÄböH×sŻć“óķ^õšßĮ}’‰5_Zźėeo-¹ó8 WŗĖŠRÕĒŲõ?†æl<Ŗk>¹X5}Eāi"iĒ.¼į—™ņOķįŻFöś}|¢AƉ0ĖĆžžłĒ5”£cecóß\µÄŠ]‘”żÜuÅ2ĪH¦Xā–=HÅT”± jsų[İj–ó$?:®OyõÆÕĻjĻ®č¶zŒ2[Ķo墶ĘÉŽ’Zß”Ļ'cŠcU•6Ÿ”®_š²x’Ķ“€Ķē+oēXL˜½n~iųĻĆēĆzÕę5ćIw Œ®`Ž{zöęø[ˆZčAĢĢ®$  ī§ÜūCH’‹ $ūD“'Š“B²ĄDx/Ž™öĶw’±oķQŖžÉ“§ĀļV6p.’nSO× f*ĘÖGŲXć©϶*“ŌŽ1?Š%/“ŸiŚŒ4 «kk6«}k4$4gp…#· ż®æįŠJÖßIœZ»šOJå–ŽĘ–Š÷ƈ¾µń†ī-¾eiPüĖŌ68#Ņæšļų-Ÿģ­wń«öpŅ?iŸéÆÅ?‡†M/Å1ĆgæÓ[åó3œ¶2²ßŽ“¦9äÆW’.O¦æ.恔•µ?K‡Mvx£›ģŽ©$R’WoqŚø©ä‘%YPōé^„^‡%T8»`óH,zƒŅ ‘9Ģ, *£‘čĮb*”ŁFO~Ę£Ÿ Šøóœż)š¢¹@UŻ€kBŌ“`‚ 'ó5¤e”ŗ-Ęó•9…ĀƒŽ)ś…½ģ֍.›ŖŻizœ8’ŽH› $S‘ƒė)9ö:©“?šEŪžėö½ż‘ü=§x·S¹½ųŃą@ŗF¾·<Ķw$»‡Ž@9<å\ŸŁ+Čą¼Fm”’A¹q\ųØŁ›eā==NŁ –0n"Éž%ō?…~e|Aųx<#ā­B(•ąšĪÆ3<˜ķ†ć©R}śžõę4ē'ķÉšrÓĘ_µJēN:Œö÷ÖłR-Ņ(n#ćųGLūWņaā]*ėBń>µįMA@Ō¬ę(@8Ż<6;VŌ%ļ4gScšœ ̊Ņ£R ¢P]ŗż+Ń<ꯨKåœm;‡Z©Fģ \`ćžõq‰Ķ'r)Õ¾u’ÖØ#VØĄŽ śā®ÖF±EÆ=l²+=:~v$·dČiTsĒ©Œ“:"“ՊŻŗķĻ̾Մ+Ŗƒ'š±Œc8ĶZTĻÖļų#—ķ•āOŁŪćŗüń„aØx/Ä3.§¢=ĞRi×ń}蕶(•xĒsų×÷%šsÄśbėfāĀG³šŒ-Ę«¤BĆQOõŃ0Ē1Ē$ūÖ5WSŖ'Ų/ēÜĒalź›~Yņ9"°ģgk]FņĀābĒq–Ó’­ų×Ö¦·üļö3Ņž!|?Ó?jļéĘ-BŃbŃüHĀ÷É*2øb±–'£/Jž0 ½aey£ŽŖĒshŻ åH$qS]4DŽgH¾Ō|;~Ó«*E“g# ŒšśwMńމÆxt\É5ŒWŃA‰TUˆ÷õÅ7L—Ü·«ėzOˆ| £Ź–‘£³©1 HĄ‘ßėšē¼]ąŪ;;>žÅ/#ŠXÖEiGVęĒØĪjob” ļ†Ž#¶š÷Šōże䆶Ņn_õœōż+ō—ĆL×pŪŽÄŅy,7ė[ĘF5"zZܤ"7"·žŗÕŌõ)SN“x¤"$l…ĒRzÖń•ŁÉ4iÉ;Ķ¢‹ö!ŹpGZvŠ>Ū§;FM÷xꬃŸŌü.į‘2sĄę¹»T:cˆn¾L·ØĪ„®VEˆ°š[½,LBJćg\ƒšc4µÄE·Ø?{„Y–/!|°YŌך­eŌŽŹ£|„’p8ŗ+KkęŗłĪSØ ¾C¾ŌQŽŚA £7@Ń5W½Ż<)¹IpŁąŽŻk°:#źĪāųlUČ.~”Eō0“Ć’ŚÜĆrf9{zW­IxÓivéoK(ČŸ­LŚl‹Ą‘pŁ,= I&Ÿ!¹Fœ ' ķAŒ·-Ēok &9=:ÕI’{‰‚²öķ@¢®Jßuh“±ŖŽ*>L“@09õ.ƒam¦B“Mm!vJÆqAŠ‘×é]ÅŌw0Ū5¼[ĪąĖ“©­o·¶·‹DŪ3Ją»øč¾Žō&Œ‹_`W¾Ņ:ż+ˆńm ²Ōōéķģ×÷Ą£>ė`œž”¹‡į-^htę‡VO“.‰žĒÅź:-Ōś¼µUdÜ2 Ē›čmn‹KU•ĻcŠņūˋˉĢ2†MŁ+ŗ›76üŖÄfkÅĘÅ ŒšŽŲü+čE×ÓWŗMZŹuDnv6Ÿ„J]@ß¹ķą]Fk„Éą }ėǼGÆ®źzUņŸ³ĆŹ\s‡Pz :?x—L¶×-¬¬`{(] <å±Čó­ŲĶ­Ś"jr× ĒOz iÄšwN¹]wQ¶–dŸO”(cīÖ¶4}>M=‚įó”ƒŅ„Ģź„M K¤ŃEē•›žµ×įa¶-"ķē½bßS_fr0ŲŚŻĶp‚UåÉĮ5—ymöå²@…”䑎°-+t©dł£2¦įņęŗ±”Ż,^Hc³|œu®j§\7:ų…ąčLØä ōöÆųGāļ|Iō].ĘūÄÕČ]9`HĖI ’@ =kvōaCŚŹ“šę†ė·R×ķ„ū>|Tų'įŃā­wMÓ¬¼;5“Öāź+…,Ģæpć”Įjž¾|7Ń·ĆŽ%Āføo®`gĻM»_Ķh{Z]ųviüŅ™VĪr3Ē5ÖYXNꟻeĒ]Ż pIź~»õ‡ŹO‚¬5_ üS‡RuŽ¢\Ψ˲`€?*łwövšåŸ‹ŊϧŹói¾dQŹFw*ösĒó¤Īų޾®ēĖæµnumsMŽÜY\ĆpŠČŖvķĒLcšÆ­fæŒŹöü}wÜ@|«k– »©Ę9ķŠŽ+”łķysJēß:Mž—ÆŁjŽÖ#[­6ś6·`8ÉčqłWĶ’²'Ž­|/ń‹Åß 'Ō.­įy¦’Ż'Ū$yłżk®š=,æćt~éü[Štˆ¾üńŽƒ§Įó<–Zé€nƒ±ßŠ–ĮĻæµi|ųQucńĖį,÷©§xkÄ";»~Ÿn »äĻøĻå]\ˆąā<ÕC)Ä9khĻO“±ģš[ļĖšćö%·ų1į ;Y.|iā m"Ś7©²‚7§Ø /=˜×āŸģ«ć›ß ėSų[Ånh:Ī…s£^™” ØŪ’xė‘ųšŠŚ4Č>Žł-Z¼3ˆÄUÕÕ©9~ ?Å3ó÷ć—Ɖ|GąmĆO„C¬Cg%²M°ģŗUaÄtć¾²ƒö\š‡>iŗÆÅ?Śx[O{e6ėf’½2F1éŪžŖå© n~§K2”i«jŃł÷ćį~œ·šo…šöņkišw3īóvœzZĆšäWqÜ,P"×¹ńŽά°iÕwä©(Æ+%ś¶}WįČŌX¤ÖøŻ“čkŃm$i‚Nģ`×,¶?h§ēAo˜ä‘Ÿc*–õŖ>™Øi6—p“‘ݐĖpŽ1ō’ ėR5<.xķ<@.˘£ ®?ĖšÆPÓäŻnpYPOCT\„Čåh”‰O|kR‘Kŗm}Ø:i ÓŃ ŠeE<ÕÕmęxįŸkŗAąš JVކĢäœdś×iež\•ōśÖ÷Š™zęŪKŌa~·W8b7ŒłlGŽąā¾[7)į½SP²µžFŽÅ Ÿī\µ%Š­»JŲ 2åĶzm³˜¢@G8¬Œj- ø ūŠr>µ;ŻŪżŠmÄū«žõŠŽB{Ø-“sŖĘ’ʱµ_ˆ×n—&™gr ŒņÄ Ŗö©;_ sē-oā6±mzóApė'vęĪk3Ćśßü$“M{*ˆćŠ×-\A°§¶ZZ$Ȇ=¬¤g•~ūĆZ€Ņ„ÖRŻßJGI( ŲĻ>•Ē)ö=:T‘Å›P$VAņõėҳuĘ-`ČPd0`{Ō©4wB=¤¦(£h…ÆG“¾2ÅŚ5\ē]8–d—Ź*Į‰ĻéL7oµņ™^œT¹\éŒVé¤]ZÜ!Rø»i|ŌCŹ-+@ՎExŻxN¦©˜ŅY6 xź{Š‹å(O¦£¶p„Uķ:ö] ;¶L6ü@¦åŠĀqč;ÅsųVćYÓÆ<;t,¶p›®6…›0ÅOe9ŽÓ\šŒ¼-ż«ąūŌŽf…æylųĘ@öä’ś«XA³­m¬<šįߎģķÆ¼āÉ”¶–37ļFõ#8nr?•|³ń‡įCh^3¹µŗźļk¶!"}Ö\tõ’õUŗEC}ó/“ė’źśf£u›¦}åTļœ7×ļZūųÅzG‡¼[ąäŽÕ®"]Ś"UĻükžP±³“–§'{¦Ü"[IfĒĢŽ²*{ٵ}ašŽņ'Į݃ĶA“!±¹ń?ķµkų’„²E‘ćŒąģć'~•” ųSTÖģu=BÄ@ÉaŸ,lįX®qņƒÖŖ'4Ł=¾¬©$q²J‹·'+÷kkJń^–ś”v‚õgOŻNŖGb;VIĶGsĢ>7xÅuŸ[ˆt+놅ē`JČŲėŸĆōÆ,Š|_Ŗi“DžE­ü ą NV”bpÖÆ®zžŸń"×TžKļ ŲZÜÜ’£„FłY潌×Ū’ LJ¼-”¤L1¬Ÿ¼!ĒĻź+Š”¹ń¹ä—.‡µé¾'²Šhī#ŽajzƒĮ½‰PI¢I¤!o³ČŁŚėĪ„zßCóÜDu04­ŁŌ‰KÉP{}+¢Ōõ=+QŃļtė©“ČpIÉōGn¤™ó®¾²µ¹5]<Ą†El•šÅt?~?xHŃu? ųÄ-u¢Ü!ņĄgūcŪ’­Yķ¹ś\Ń^GĪ3jž·×u}JĖWt†ǏBŁėŒšM}#cūHü5𷆓›M>ž{ŲķĘ%`Īxé‚xā®CÕX6õ8’žÖ’ u‡76v·>j‰ “Æ\~¼wIż§¤šö©{um¢é·Œłb%}ĀėĒzߛȨå½YÓGūM|oń³¾ąOkŚĻ˜éZ\ҤkźYTzŌŚ/Ą’Ū÷ć–£cgį/Ł’ć^©ē’bø»ÓšĘÕĒvĖ…ƒŌ×%XĪODyyŸeYd%dq†'k •#ƒŅø{ρŸtŪ›u>ŗ×Æg‹|+dęgxżä“ģ+Štf¤zlė ‰”NjT䮚ķśz=Qóę¹ēƒ|eö ū}sĀ:ū`Ļo} Į4-Ōf7ģkķŸžŅ<'įm+ĆŚv»dtU*$;]Ÿ˜ńÉ<śńZB-nyÓÄĀzÅčĻ„ŁP¤‘¾I8ĮÆ2ŗń=ā¤ŃK0š=ÜīōĶl˜f•©i×6Šße…$#Ø$\N”4–„Š‘<öĢūøģ)˜6ižīń –Š™TŒģšęÖķ’I¢E*3‚=(ßiV±ŻĄŒä©Q‘“Ž‚°µĖxWLÜņ*\€ŁŪkØZ…bŽećzõüio¬¬>ĮnĢ׏Hb§Ø÷„÷1–ē%«ėv^…f¾hg¶n ™?ˆė_ųūZń'‹¼O­[čZR½“m½_' ¼œV‡™ŗ…ō–/k‘ ņĒūÅ/ÓžŖóļxźĖG0鎄½t/‚x#„LbO Fu»[‰”m°$žō­½~X“Ķ6]JŅ%óąPnÓ>Ÿb+w<æÅ>!½Ó, k#ngw]ĢOAž5ę²\źś”‰-ī ÷Wjß#°ĘŃŲ {P u=—Āv“= šśöŻp€·Ģ޼Uo‰ŅGįØģÆt”}D:+ČxÖƒĻ?77—VQܹXŌĒ^ßZ¤±\éŪwFó–8885Iō3ö‡Q Į-ƗŪ'V9ē4¶š„¬WNæ¾ 2H)Ļ”™ć8“Kū>ŽŻ%¼†E‘F „āõՇ§ų?O氓p“0UŗSR°sœ–£y«ųoS¶‡LøœÄ®¾dG#=ėč{ŻMÕ4T‘­—ķ¦=øE+“’xśŌ”|żyį듪½å¼§c>ę{t­›»ńa"üŠ1ČéķAÆ9Ūųzśā’H,Œ[%×hĒA^m«Ų£^±Sä>ģ?Š“FM“’g¬‚K0$Zé¼7öćµe›RyĄü؊¶†Nlī.©mö‹ąyķĀīĖjó­%¹ÖūG5“)1˜Üøg®)KbOq³hUbó£;yēÓėPM©hw’]Ę·¶–÷v1v{ ČGwfńjó©{G“!LrDłĪzēŠŲ“æµYV`XšEjv7ž ÖÆtI5=*ā·F¼Ö’X;Ŗ\*ņų„Õō»™Bݐ©0ÜAļÅ Ńv; x­#±–y ³¾Ö>a\zc½VŠ~ ŪZųšIõ}>ŅŸ0°˜.ą žŁ®yĄiƒć™ÓĘ×CJŁsnŅ& }GéXŗ‡„šmt٧x“ąōżsŹ™“eŠšŸ’ğ_6÷ŠäĀäŗ·pJsų«J†ś(m"šÖ9( ädö§N= gDš`ŌÜ$Šø=y®WXųjZ_›MZH§tßņŖŻĮĪ==ė¦1čO:õŅź³Ń ¾XķģībK½†eoP+Źuē'cŠ•(E\‡FŌ¬Æ“½B{Kķu¶‘0ó×*]GŹł5źah_sšmÓ_ėS,—s)dĖrxõŸĆ/|EÖmt†ÖƋ¼G!łvīXÉžótļSŠŠ²9„+­?æąž~ųft/žŅZÅ׉5±wųnÅw nĀCüG=@ōÆŅļhš—ˆtl§†āųkšśŻŚ4·1ˆP¢÷ŁŻøōŖl꜎§J×­¼?$/ŸC}}sóGØĶ²D3ĖqĄ?­w2ų'K%5/‰^›ā»µ>kFä”VöäóUĢ™±ą§ž)ƒSžŹ±±ų|ŃyfEd•›8ĘOl­z¹ é>Ņu¼=”^ńŗTvYø'Ó©­/­Œ\Œ/kšn”„éŗgˆ-e‡ÅڌąŲ*1_+©(?*O‹öŸcøÓ“JKķ:ÉT!ŸĶ‰a×?…mMy¶³ćēš÷‡tŸĄĻ{f&’$33c™±‘Ó­yo‰uʒ0g™āHÉŹĘsęc×’­[AÜ”©Ś¼Ś,z†”e¤čā,¹vņö®z±ļ_Ÿ?“§ķĶšļįkųP_xÖa%Ŗ ĆčsŽŗéÄ»$~üQųåćߌ:õĘæćÆj:“-onĆbCž8¼j[”‘yu-Ō’œWRF‘,7Éøīśv”U]r«»·Ņƒ"=ŒŽyéɦ¾öR„N\“Ļq‘ڤlĘ5>aĻzæ±,„.IĮ å{šPŪFŋ+4gųOj¹k§łĖŲēč(4„z›°i··i»£7'(õÆ_šĀ][Å×P[ų{O—TŌ&b‘)ĒRN1YNFšSõóąWģšūĮz^™ć_‰Zœ–¼ŹŚeŗ1P1żźśŁdøÖ ·ŅÜx7ƱHRH|½±Ž›” “õ®:’¹i–<¦xüK>—š¹”×5ę,dtŽ)“µ°†1k݌`žœõ¬½?M¶kxoÅņ%Šb~Cʑں!.†2Hź“Ķ]#¼Hn.¶;sżźō©u ×FUĘ9ŸlV–¹‹ēś®£öDk•€mC¹›<œĒóĻqµ};ģą0)łŗRö]Gcš.ÓR¶žš²jQ å …ĘslU>×Fń<:…ī› źW¤ ¦!ŸįQǾµGMOž…BŽ•į]7į}ęŸ.šÖ—W€dÜ7m<šĄŽ¼W„ź:¾©­ZM{“V¬Ćj„M«:ā³:¢ļ©ą7Śö»«\Ś;Ā‚?‘·’OĻåUld—F×mQ¾w` p¤{ C’>¹šœśˆ4 WJŌ­źtŒIg”C‘ž·ą;K¼’9/­“J…|“ŽUÌwĶaRG7³mž¦æ“ ™Ę„yjR&Ź#$' «ņĆćwÄ-_\Öõkų.m®4Gœģ pQó÷}=ė(ł›{‹_~x§[iŪÉÓĮÜńŸˆūWÉ jÖnpŒ ź+3²”Lų]ńQš?Š-ī<łfÓgqŠʲœŸē^ÅńĀ>›wpŚ&žŹś4š `eŻņż*ønSßšAŸŚé>5| Õ’fjPZų÷ĀmÜĶūū»n{H*Hõ_Jżœ‘g¶æ„Äģ$GÜXzŽÕ8šV’—uż~76>ÅšO‰­¼G”[XJOŪćR“×޼ļÄ~еO\šŸ‰ō«]OĮž(³—HÖ ™G*²RąšGĢT“ŁqNšw‹Ł“-ó¾żæ?eKöQż„>(ü¼Ņd±Ņ,ļ$Ō“+ I[½:W/Ģğ””Wē,–ć3ēF+žĒéZa$ł6ēus*ī9Ń£B8ĘAĪp)°¬˜ä-Œg>•Ör—b “•zÓFȈóKģx  č…ä³ŒœūR£ˆć*Ģģ3ŠUDq™¤’f AnœW¬ä·l+0Žć§øŖ’]ŗr>’’‚f~Ś7_°Ļķeįˆ’jz…ÆĀżbh“æZĘKĒ4nv‰Z>Å Ÿb;āæŃēAÖ“-kFҵ]īKFæ“Kū Q÷+Āć 3œ,ĘŖŗ:c##SŽ·)xˆ6‡įßüįķgIÕt½jŚK«9ŠÜX¼gkŪÜTÄ`’õ«ĶجĖ?8|M„Zßčśµ¤óζ’5–Æ ®w.qœ=Ēį_ˇüūö{¶š'Œķü{įamœŅ­¹‘c+ęDOŽ>üw„MŚI™Tģ~Y¼¹qžm¾•ńŗÉ±ĄVkւŌóź.„RBŠwżxéTÖ)—vē ·2ŠŠzDČø‘A'Ö¤Ų¼ Ź¢[B‰bsžųö© ¶Ņ!:*`9Ń–`J €Mj4+<»LG‚Ū±éZ(ŲŚ2¶‚,7P5œśMŹi÷ö÷ sĮ$`s{W÷Y’{ż­fż¦~ųWEÕ$µ]~’ĘŚO3ĶZŗō9Į%PNSĶ)Ęčģ„ßÆ xŽęėG²¹¼‚$gżĶČ^‘Č5ŃM§#ĮBź&ß#Øś×Qu:.Pń§ƒ|7ńĮ^&š‹l!æšÖ·e.ŸyˆYd]§ƒĘy{_ę¹’ż—<[ū%~Ѿ>ųqÆéј,n^Hn ŒŌ-$;­ę¶P€GØ"°…Ō„ä|!ŖŪIun²¢ŗD@ ÓėV¾ė) ŽźrĮŪɖo3sĮ8ķVägĶŠś£LÓ“yō‰… ˆ§É“`čµx×Ę~Ņ“ 2°_نŹ[ &OC\UjŲŽœnXšWģõs{%“ś·‘ez“¬° ÉRśź=[IŠöé{k ŗ…^8ĄĒó¢–)9r¢ēM4ušcµĢ-VFݹN21]4Lؒ@į\ķ'W­Mźyµ#m ė_(Ķc4>}¬ä. ēaĻjō-&k[ deŒ$,ŁĘ9É­Žc¼†ŚŃāK1DC’ Æńž=ʧe"Ź‘¶Ćźsü_†(ĖiwnĻ˜r3]Ż“3Ü"ˆ°źqÉō  Ūč¼ńīÜŁēž•Ž“Hó˜äQ· ;F™=¦š+ƙ+ŒmītźQO–Ŗ”ĻŻćš c$y§ˆīÆ"¼’K»pöé2qŠ·įįmµ„ŹV=æ(© ££žŹå ˜”ocŗ=ė—Õ¼Q¤Ūż† ;(Ņ?ŗī§%'q  6Z»Źė)Uū?N W[åĖ%©ø·rŖ'Ž“@cÜ;aœäwŖÖŚÄ!cUvĮć„5ęW3Ųl×  ·ŹĒ9É=+jÖõ&„³¶Ż¤~5.]ŒŻKP ŻĮ_»Žō¶Ō.#‘䎱Õ茺ÓŁ]Ėr‚ĘK¶†(åS÷dZźm¾Ć“ęHĀÅĘÖĒŖ: śÕµ Ń&Õ,–œ7*?ŻøėбaØĮqj‹#Äd ”ŁM½†$ؚ|ļWĻ­rž)Õį–ž†Ł…²Ÿŗ9Ś=sRČ:Ķ+ģ·ZJĶĄūI\šk›¹¼›OŽFŗ üpEecx#–µń(¼óVīƒk§œzÕK˃~ńE”‰e8­%ĒIŅDŗŌq”ņĘ¢nģóųÕ½1šŚ9 †b[Č= M˜ģmI}©Ūé-+}¦ķрŲK ö®¦×ÄB=*HŚŽgź . šŠØÄóĖ‹ŻSQÓÆ®$†7ŠO3‘Ü`~uÖkŽuź@”ĢoŌć€qō¬„.†ńÜād\6Ė—Pąõ5~JIp‹ d’ ¬œŽ˜3ĶåѮά“+˟40`ųȽkÄwזv¶Ė5“вĬ>ųĒ_ēY¹\Ōä,£hÓķR7ļIϵ>ņUše•OļĮ©KM0ÄčĢ@žÆR¾ky<2ėn¬— „īĻC¦–­#ēļxjūľ2Ņü8ś’Ć&„wöhŲ‚CHr@ż+;āGµOx×T𦵕ØCŹ·zū~cóÆ ŗŻŸķ^_ Tį 1ŅĖEä“34« R&‹zšF{ŌŗÓāøA²5Un85Ƽ]ĒCæÓ깅Œ—Ž-is»œ“Žx8­ŸŁĆİŚkŽ<¬Uõć,Än²śqŸÖ·§.ē‡§ŗ>ÖųK§čŽ/ŗń©«¦Ÿ&k ų©šßĀvÓ­/Ī›Øµ‹WGĮ@ē©ėDCó¾<Į8ņֆŻO’õ¶MjęćWŗ’9/'a˜$ļœ÷®PŠm=-Æ 3+ī8xĒ;GJ%&ĶŌś į’ķGć’ ŚŁXźW1kZOC!ł¦ˆƒ×>žĀ¾Ū¹×ü ā’ų[ā…4˜ ń¤2Åż¢Ø€nLķc‘ź <śVŌźXŽģč+ą®›£ÜžĶ5ŻyUÅŗĒaeĶq4Įw(Eź['€:€}+½ż›>h2ü?Ѿ=~Ōoš‡Æī‘܏oä9ß,c’2Ėß?P}uecņN2̱ĆW”Gām%ē}ųYūž×ןµgķ#©jZeާsšŸĆ’µÆ‡ —ˆüĶ”dGūXĶ|±sāĶN=65K–Ū±•ž¼ž…ZŖēō‡†ü²ž£”lŌnż^Æńz˜’<^ŚL ōÖŃĪ‘®Ü$“%Ó!īäaŗ’8¬};ĘZÕ“I¢źĀ{»G $2;|ŠOUĘz’žÕĖV„öŖO©ū#š—ÅŠKįßźš{±-K NTI“ÓšÅ}wc<••­ä ¶&}M{xYč~mÅ8NY6Ŗ?d’Ūi? |$Š]SV°°]GG-’Ė4 /“œžńü?ŸŲōÄń<6°]"Ų™O–ė(Ūåø%XģA®*¬ūæčG*Ō—YsąI~©”|9³Õ5 )ž2 r€ÆF÷ŽŪi@ ?JóŖī~ƅ»ZWŽ-Ó4]šī¬¶÷•³[I§ƒž‡Ęæ8õćdh×q<ę­RåpžGK ĀŚ”¦żdīžķ—’=‡ACdéü…±»Ž½&ÖO™bĄ éŠšĪžē×S‰ŌĘ]QJ/=1ķU5ļ GwhŚ­“†;Œo•ctŒWR¦)5±į–Ÿq“ÓŪĀnī#bŹ£«{V„Ü«i2¼LpJƒŅ‡…c^ L ©gg ^—„|2ÖüI„µķ„iµT’ĢŲŽp=źįLŚ5Rv‰8皹FĀ•~ˆū[ąĮļüjŠ|IįmGTƒAń|xšĘRų3œÆł÷Æaö,¼²Š}%õ8nõūÄlcŒt«č~Eľ%TĖ1óĀÖ§xčÓ½“k^÷Ö넼ϑ¾$üń·„ēÖ,®“+ĘņWr:”Ść¶ |wā÷Ņ|Bš4‘YI£ėÖØmo#d¹ƒõćŸĻ½qŌvzŸ”äG‡Ģ(Ŗųy]~+ə>bZypĘū]Ż^„„]¬ŠĒ‘•eĪM#ߔ“F“R©-ry¬‹ŁŹFŃ$k#¶@ļŠņ«½O=ńmÜśeœFV’Ic/8*=kĮ5;ŻFņFgoŻ“ĘJĘr<ŗ­ “š½ć»wNšÕ“7Är\ØsŪFp=ėē’x¢X®n#š åÅ,eæÕø8 žUŹŁĶ­Æt_²£Š7 •z‘ā}F×OÕ“ŪY ²¼@³Ęß2œ=¬wŠG6mö°WbvØ_Z4±H„øō¦ŽčĄä%YādÆĪ7{Šļ“©shAõĆcĢY;śSgw‰ÄEW×>µŲź‚9żkå°$C*ø|’vÆéW ‰ŒČźFsB™Ńcie?.žµkrø6Ø,6)·9Gp=j+þ6ܛS?•4Œ*YēߣOş¾·¼5ńSĄ]É$ĀßM¹8ČŒG”Ģ ǧq^k®j.½{ąŸi×Z'‹¬˜¬É÷_ŖāóéU(Xć„‹Œ„(Y®_ĒN‡t“ĀS ź¬yėUē",ŗ·ĖķŽ³·S­2Ķć’eźa&13DĆųøé_>ŲŁĮyzŃ*ōė“p}ØēŌę©M6}š÷ĺś×Cŗ’ĘĀā?.tSÕ}æJ½©¾”s%Ōģņ3žK“WķNŠ15 2ÓWŽ[køXŪūՋö8<+­…•«ĘNŻ…F±ĄVDKœćʘtÅ~©x{ąoĄ_@µ«Ļ2ŻFÓ%…Ą{u#!;†#"½ucóĪ,Ļńt%j1ęüŃÆ ~Į?šLߊś5•æ~-ų»Ą>-øUc ę“É$NĢČŚzōō®¦_ų#·ĮY'¹Vż„µŅNß# mę(µzPĀ£ł'ćęy­:ģ2ŗnĪĻåÖĻÕÉ’fųwr°.ūKųĘmŖJÄl­eWlpr­œWēwÅÆŲ ö£ųmŖjś]Ÿ€õhÖ²ŗ.”§•aqå\/Q‘Ž9§S Ųśß¾‘”ńx«f°T{K[|ļ{zŽĒēF„šź BßQĪ6•}eø¶‘6J¬ °õĪ*ń„ųgą[]L¾ń…Ÿ‰%šōr…¹ŠĖw˜Øz•ø®OŖ÷?°ņŽ"“t>œŃ¾Į8lõķ_é_5 ČwÜÄ·ģ|`į°lučkō3þ’ƒw5;LÕ®,/ü=q5•ÜŚĄyŃŌnćÆŻ"»(ᢓ?%ńGŠxŚ—%^äqיY_ÉūĻņ#č-oÅßš@—ŃōĻ ĒšóĄz„­²*BŚv‡~³·żt›åy»“\~«ć’ų#÷…bmGįgģńg©jŖ6łRiML8>c7ź9®—J'óžE+KŁāėĻ–]\ķkæ'}:÷_šT?ųµų5ū7xSĆQņä[*ūøXĄ®.Ēž »ū\j)ske/Ć/ Ł`ł"ŪNi]}X抙J+Sō¬·čū,DyóZņœžŗwõwæÜ|żķQń^ńG‹¼Gń~ćžŲuKf·»¶`±ĘŌ .3éėė_1|8ńĘ­ąoųsā„ Šö}:üŽGevē˚3ŸŻ·|qķ\uńڽYū¶MĀŃĖč}[ „4’·¦—õgķGÄ…_±æüūöuń?ö‡€“žÕ:$q©żÅęŸp˜åŽEĻn[”Ū–A?ČēĆłujŚēĆYŻŚx»B¼›HŌb—ļ$Ń9CŸ®+–ŖOTČü"Ģ3&eįÜŹNN‹ę¦ūĮ杷Ž5ź~‡|:Õķ¼MįkĶÅŽ*Ū6›m7x YsŸ/=ėÕⶊķd¶‘åńÉ5ÉR źFPŸsŌōÄŗŽge.ŪN +‘ŅldA(bŹOrkZõ6œżÖĪ»®ć¶9÷ÆHšĘ§ol‰ ŲĮŪ5öTķd‹v[œ|Ņ5I. ›˜ä(­{ķ4ZĀ–š3Bļ yHÅCcr—:²żžé€ ·ē§5ęSčÖ×ņC#0§pĘzŅ9ަĒT¾Š¢kEryÅvzæxѹń»g;Ō‘ŠeŖ}Ķv¾[— &äÉėŲVö喚š00ܰ=Č?…e$ĀQV9»ė©5‹Ė‡UŠ(™·A€*mfˆ§–±¬£ŽGjاŌęØĶ‹c>"Ė"ĒŖž3^bĮōįw,am߃Āšč‹8fŽÄ’m»kh-¤Hķ2w·v•ˆŚO‘K xže|ĶQ‘‡}}%ń0<Ģpsė^Æi_dfgŒ¬§žE2'±6‰mu!…ɐśŸŅŗq¦ż„ŁfR—Ž{QĢdC‘snŅ’F#pEa®‡m#]Mmņ%vžX})Ż“©¹Ƥ69†č”ī§Ž¹FéāŗĀ„.r)XĪIõ,XiÓ¬i}ę8VēhČ«ŽjG—žHćBpI8 õŖQ*0ī~x~Ó^3ūAw„|Ya{Ø^)aW$ äCžó§ĀĻŚÄæf›LætŌć+"¬·±äĻLõ5§/C¢4»ˆZ§‹­›ͦ%aw ĘąyĮØ2”lyŸˆŽĪ+©­Ģ‰2!ĄĪ~•ͭͲćjŒųčh2{,2›M;Ļ…ŁīU‰ŻÆAųāxüE§J|A„ł ū9O/p•s÷=*­”Œ‘ĀxŽŪJ)—M²‚X“•enł"²µā E“±€A4ŅŲŽS‡ÓüU>Ŗ5½üqhč@‘O*Üöü©sg-Ō×ŗ„ÓEn °Ūß„_"+‘¶~+šö³lt»8eivn S$‘Ū5ĘYx«TŃy“·½²^<¹Ad?Ę®Į·Ó¼;¼Q£hļpMp0j~)æÓ’žźŻ>Ü É‰1øƒėA|ˆź4oˆ:”sŲÜŪŚŸ”£Č÷ØOoŹ©i Š|_©ĶŖź7ok$¾<ĀCŠŹI•‰bŃģ`s¤ŁJ“¤€ī2ēå Æ"}rųHc&śdĘKå\ƒœ 8ö>“Š~%ZŚč‹§źq|ó}ücŒw®PM?SÓN»įŪå1ŹŖÆĢTŽ“ģKcĒ5]{[šõÜŖö ^L‘õō ×1 x“Åó™tøŽ{ę&4D9-ž?§éVį”I4}‰ąūGKŅm"Õ¦u(QDWo#¹ėš]Ļ“0Ż^Ę"…öoīĻ8ę¹esŸ ü~Ólü;®éwćW=’ÜBKē£לW›ųr=bū7³Į'Łb'`xöągƒĻÆF‹R=“Ćķt%F•FĘaåóĖ{Wµé޾ńD1¤ ±>ƒø­,ĻŸ|ušÖj&3$ŽŅ²€AŌ×—Ē­‹M€Œ®v“žõ@^o]ŪMlź·!<”?v½I»Ō5–:Œ+;Fß6é‚q×4\ĀDzµµĪ¦®eMöČ'¢øŪæ ZßDÉĻ"g £ÓFj“źŗ&¹ _m†Ęā~ķĄ Ž «hÖśšĒ,’–•YAś@ąz†™w5¤ !C8OįĪ3ŽÕgUÕģu›¤ū.Ÿ{£©Aū™$óą99‰Ø˜£āŻ>XdxĪpFsQŽXOfńC$–Ļƒ·#½dh`>qIö‰a‚}«äȞk‘ŠS>ŚIՋ ĢŲĆyĄ«ŠÄ’Éęåƒg§÷…"į¹ŠX”·ˆÉĀ©?1cK­¾ …˜“ēā¬„.ƒ’1ģo¬^Gšd(W¦OµØkpµ›F itÉ_qYĖĢžVr'Ś…†O/¹uĘkGC}ø¶Ńņń“’ qÖŚĢź£l{v—uŖ»ĀėnńŚB ˆßvsĶz®«s­ė¶½½²^JŠ£½/8É÷ÆG™ŁÅņčtžšm¦‰uqŖkąA{ |ƒĪsč•Wāö›£]Į¢›‡µ“M»‰Ś7šs@čzTPĆ5!Ō©såķg[‹@¬lD_ōÉśė^Vŗ„ö§zÉan÷²Ļ ŽQK<ņ~Uļa鄹ƒš?L’g?ų'Ä_lń§Ę«›Æ†? –—Ź2“]”)“ņ¹Æ×„’ <ą}2ĒĮæ|;mįŻ-Qµf ÓŽœ³Ź}…kĪg)‚AąO…ŚŒ7ÓkZ·ŠüM<¹-zžljķŌ ōū+ӵ߇4ų”c¦ĶāļC¤é‡÷²ŪŪ¶d?uWw޼UGS IÆąæ†ŗ’ŚO‡ō]NC²[‰ŗ"ŽOēUü}āĻ麭Ɓ ÕžÆØ•Ūū€Ļµ†9ą?ZéŒYĻ)¶˜š=åœ÷šķܚ}”L6¢¶ĀŲäӎ+¼“Ęļām;Oæ±¶LEū8~@˜3Z{2[Ō“źŹöÖonćT-æŁ?•sž#ńåµĢęļĘw«§ģːüŖćßµkŪ@LłēSńØÖ¤ø“K“·ASŸµĻÉėšĮųæūKžĖæ¼ g«Ķā =_Åilń½„“÷āŗ)Ó{Ģ~~џ·ÆÄߍ·Ś†‹Ø^xsĄīŪ!“Œ„ĄŽھ–ņY|Ė£!{¶Īł_—~{šīŒlŒ§#&wy\>~•_aYTJ3ĘSTa)“޲€@})cŠ%·uā‚9Ė0ŪJnāĮ?J™cvtĄmž”¶YņŸvŻī¼*Xm•K2®rFh0{MŽ˜Z9“ŁGa]o‡<;7ˆļ­ōŸYĶÆė’Kå-¤™7¢¢f°?A>~Āßuk­#[ń…®Ÿį-#2¼W3|Å{†æA_£žšĒ„žųu<9ą?Ų¬ńGs4@3>9 õ5ÉSČčŠg±é Ń,aѵS  CĖųgĢŁRŽĖĒ·zėeĆ܀t'Ļnµ­:¦rfVŸ§jśœy/J $¬Nсҙ{ā{;O–š[µŃUŽ÷>•Ųˆlõ­ā…ŻĻ…¦‡V±³{ę‰UQHcŒ\WŽų¶śśTó¤“uĮ”ćj¦H'Ū4Lļ£šnÆįŃeuŖ“>“$Jė"0*N3÷‡Ōq]ˆ.,uo [YŁÉŗī4dŽĆ•$ńaAGŽųrŽ×K[½#3’h)ÜĮł½Åv7z4×6śEĻĖ“×#ŚŖ;–åŠē<3ØĻc­ĀXˆōõ%\8į˜‘ŠśÆĆ:>uۈæz€1ŗ¶"ēĻæ>]iŸ­õöV¶!šŃ8cŒd~„yæŒõ?Oń,vĆ涚1Œ¾ļ˜uüO5œ¤šöuŅ~>|qšļ†õswoįdC0Mü¹ųĒB8ÆÜO|1šļ‚¼VŸ’‰Ærų?są6½›Dńl7V–ĢD0ģTūé[Fö3”{ńėĮš¬¾0>¹YįIа$‘"•{ńš¹įł.ŅÖ8¦ĶE*Ģe±_ƾ=²°Ó'ŽžÖĪĘ뢠L3ŒcŽęµ¾kZ5—‚’ĀęĘ$€Źd3+aČ9ć?R“Dū3Ī5ĶN OÄ·hzīøÄ G\Ŗywšé_D~ĪŽ.’„KÄV÷7š¾fÜlĄägÓ<ę±”ŗF—CŹiėēń·ynöŻWĪ^>`ŒN2?ē_ßŲ›f30D‰#¬)é”Qs*ā•Wɹ œ”gŅ»Æ‡¾0¹šæi}ņ„‹qpŖqĒ÷¾µÓth~®ųcQ¶ń•e­CuqucpŠöóH6™8ļŲ껣!ŅŻą MLĢźs#Š-uŻQе|k“1n˜óŽæ3<[ ŽųOYÕ“µyį‚SøĘųńĮĻzĪ꓎8”ČTFcøwĄö€õńļĆėļßÄznęµ@rd„÷SŌć­lQ£ū1||Ö?eÆŚcį—Ę_ Ė<+c{ö]Y’²ĄÄYéĮ<ś×śųkÅ?ÄOxk⯆®`¾š¶½gõ“±@f@JœwÉĻ’Ŗ[ø§ŲÜģ~xŖ]/ÄVļ3-ŁĀūb¾¤ń…»l&åāį·!éčF+šĘrZƒ’š_ŲĪÓć‡ģĻ£~Ó>Ómdų©ą>ŲĮH“RÓįćb>ń\‡ąe±ÉÅ ×zDŃ@×IĒĪĶ›AĘäk $yg8·„ī—k’›»9„–hĀ<ņ„pHūµ”Ńą”fP½ń]ē ōDrČźH ԟJdĖ'Ė… œsT£rŁaÕ悐™üéH[ķ`yÉŖå¶Å¤:ŅR±ø ķ'ÓbŒČT ŽGz\‡TMu{{‹so ¢Ģœ•äśóŽæ·ļų7ūöå’†‚żž5ŁŪĒ:ģzÆÅ?*Ē`Óeg½ÓO ĮūŪ@ŲqżŌĻ'“•Y¦tÅМ¶Q_Y-ÜI¾'R[ڼŪY²IķZŹXó,$¼gיYß“z%ÆÄ6×ZĆģZ&¹ Z_EķAt£®: ܟĄWēķUšGų™š×RÓ®“˜ÆnōŌiü™€&h;†zćł\ĶP?‘_Šž ? |q©ų[R¶k<Ż;Ųuć9;Fz‘Ķyĉ™šO1·޽+×§+«œU`)?:ķś÷„X™ä`>Lø®…-B«“½Sę#®i²ĢDŖJē±Ķ&Љ¶)Ę0øéžōÉM¹ėėJ2čW+)ÜłĄ/<`ō§‰Ś&HĻ$Œ&“6F„L²ģFŜN01_{’Į7æi{öTż¢ō9£Öõ=/Ąž ½†Ņį |-ĘG—&Ćņć<\ÖRÜź„#ż|!ń.;Ł~xšźs’‡Œ`·sˆōżL(*Ē'å|Äsłf¾ŗ³†ż¬>Į#”Ō-X ŸćZ㨺QŲøģčŽVd!’kŅæ ?ąø_²ż æg¹¾:ųcĀÖz‡Ä[Lš DÅÅʙ÷·.>÷–rą7ūx÷ć{‡!ü!µińÜiz—ķhē~įŒ‚Iü1XŚ|֖śœIršĘģŲ«I!83ģ;-ĪļĆ6 jęᤋ™ä/µE„ųj}ĆŚÅī›5żīŖ¾$ĪBšxĒåś×jWFōŻ“:-7ö‚Ö<7¬ųwķvĶtØėI[GCĮė]—Ę«ŻĖHÓÆtżJSQr°³mhīAžUȰ֒’7gæ|ų‡į­sĆz{E:ͬ@|›¤g᛾•īp™ÉTća Ÿ„{”Ī ōśœ& öė;öȹDZ®–Ļ\{‹±~Ī£°ļ]iÜį”M¶ŌXĀљ>\d`×3ØI;#[²—GčGņ¦feiö¤Hp"9ū§łWsĒöEŒ×*„kÓš &)µYä™cņćfąŠķķ<6BC$ˆe$ ¼ŠZK©Ōj~Ó4}:OūG|WŸk6Z3Ü{ ó2ę8ÆĀĖ"ģŻµø “‘ÖkśU­Å“Hņ,‡zć-“é`Tą@Ņ4µ'ŗŠĀH R yśŠän<2æŲ²]ŁF÷W*Ąy s·Öœ¦™ŖÜŪI,7Ž„ ¬?•ze޽uud"HÖ2 ŌS^āņp|—BøåF:×O§éį”ó& ĮQŠ™l"=fŹŽ£k„ۿڪ\@, b(ČĖž;}iEi`1c“¼ŗø˜ĢUćo»ņćmX±aœĆ+³'O©Ŗ B{iäµrć˜t­=.McPÓ'Ņ/$i¬„›•łÖŖ>f°Ų–ęīęĘŹāŹ'/æ+øÅaÅ5Ōڼ²Hb<ąrzčj™Ń®Ææb¤Ķ¹9==Ŗ{KGŌ.Ճq’+)>‚Fäšt‘Ā­ÜöŅ+±?ˆT¾%ŗ‚}¢@~Š‹µŸ=®++ō7õŃźzmÖŪ7…” ‡s޶‹ŠŽ/CŽŚŚmäĶ“®Ć¹ā­ĮqpDfnē9yĘēX%©Óˆ©(ĮøŸkžyą×tk'‘ī"ElĪ7vž õ$~µņ5Ǝµß†ž0Ó|] ÅZż ņu+Į[øł—ĖėMhxxŖĶKS÷söcÖ~~Ō-„Ž{;}FīÜGy¦‡Ł5­Į?ē_žÓ? µßµÆx·J¹Ó®b„_ŚłĄ…»¶,Få'ØŠššFį•ꊎ)aœ½ö®¾_šēēž¹4ƒXKŪ(įk9!<žķė]¶“«\éÆo}e)¶¹ d*Gzåö¢–J鞋¦üMų“§Ś_YXüAńvŸgpžc¤l‹Ÿ÷GÆ*¼›Tma/nõ½jžš>ļ2ā坘uē=kX×v±ž!”Nn¬"”žļ©č¶:”÷VĖ,Ģņõ®wVøóUšFTŚyÉĘ+Ōlś:Tś™Ńź c–*s÷yėZzG‹ē•qAn7vśVksY[©éVŖ^E .ß8ĪE}š»ÅzŽµįxOń/€5+}oųÓū$éž æńV½šsĘžwĆß³›ūk]AY£“äĘÆŌc=ūWČZ"xŽĻJžśņćNŌ-w†ŹpĮķW*GóO×eĖ-=£CųMŏ \j>[ˆž&Å(hQFX]œ}åæ_óÅ~Ć|ż–üKū.žĢ7’¾+YAØx¶źČ왢ÜmC}ŽzłŸŹ”a©ÉŽĪ\b”Ķg-č?±wķ«„x;ĚƊ¾2ųfwŃlLRéŚ}¼„²Nø1RFrŅ9ÕŠžŚæ¶ž·ūNx¢oųD޹įƆFŹ(–Źi@ūKó¹ŻA#=Ņ©Ōč}× ųc,^mG0¬æsM=ś½-ų„åk£ņ«U³ß"Ē ¤*Ēp+^O6ŽAµJķļÜW<¦Hā°ė•£;ć£k><ż›¼?®hėÖ»ąż|E/t¶l Ǿ>oĖé^௮½£A¤^ł ŃČeüHß_CłVr•÷?̰ܮK³=>éōč7޾+4s()äö«ā’xwÄÖ µµ¶ItŲ†V| :ńšē“»80u]™ō_Į’ˆĻį­RĀń$‰€įĻ˃ĮR?ö’Ś7ąŸo”'Ę…³éóųząF×ö1aŒ’=j#eB|Ń^EߣŪ捾įėVŠŹIĀNXcš?ŸJż)ųMń*ā[…ę[9Ÿ%;OØÆGĻ'?ĖUJNHśsOŌ®¬õM'ĚuĖYĖ!d_CšŌ|_½]_UÓu™ŅÖßP»°ŠY|Ž<ĘoĒbq“īkŌ¦ś†ę˜/{c×¾üIŅõß |GšžÆ{>­Ūčr“/¼/ڱČĘzœØāøŸZ¤šņ>ƒāk„†õq%“®~özƒŸóҶR±ńxœ+lū į²ź>ų‘£Ł #ū$·ā+†FŹÉ  ¹Īæ,?kσšĮƏ¾6šūŪ4Z„)ÖtWĒŹšH~uõ*Łv¬Ŗdy„)ę ÷œ_įoóüīŅM#VVW”¾•«'‰"Ņ,®oÆ$TŽ%,YŽ3^}f~ŗkQC»>cń?Žeń%Üś“Q”·Įä+O[–x>ŹŅ{’· LŚÜŗū§’×^dާōW‡P‡Txtvŗ…„ĒŲīÕR~¬ƒœ}+±šģw÷:…Ž•ivöŃ»ŒüŲĻ+õ>‰W‰ėóü+ø‡ÄÄÉz·6„6¤€gs×Ҿwż¢#’…gŽ»ÓXŌ팰lš$'±ėQ'” ŗ¹ņ°žH¬34ŽjČĢ2\Šļl­žŽbN ×$¤īzTjitz~ˆŪe€Ģqe-ōĶ}įąč<ā_ų“CŸMÓ"ŗo-ķÆö‘|ĀkˆĀŸ0HČ?ˆ­KöfWt-€ßJō­ŠĶb.y‰"LŌXaM„Ž~^¢¼åu{3yqk*G«†ąr3žMrLÖU“0“żiī>!x>Ź9¤KøÕ"³øB˜įĪdöæKō{;ļ‡_GĆ©`RšÜńż„— Ќ×M(žm\kNĘ?ü;įW†õŁŅĻć~‰§+ÅŽÕ핦µ »yUÕżF>ŪkįßHN“¼Œ™ąxĆ}1]®’ea±Nzv=JÕoōۃwaØ]és»$µ‡ć_^|+ż¬.x;āO„õ vźžŹŅ#ģ‚[®WćĒ{źZϊo“ˆ#²‰n –ū ×*>ī‡ē^äx¬i^m¢¬ū]“×įsä0$²– O9Æ_Š.PYEJ¬Ą¼ń\‘}ßåTÕTvm‘’%<zōæų ^I Ź@d(O$(ÉžFµ<,f-Dł7āV ¾$ń÷ö4dB•#C˜8ĮÅq7ŗfØ!“Nøą°…°>§ĪŃēŹ½ŻkWŽÖ-u Ģw1øo½÷†yŌ„WĪ“v˜ś?ÄGų‹¢ŲŪZhZć«ÜĮ!`¹½qśÖ‰\ŚšGˆ&øŠpŪ×ųCś'AÕ`h”Ś2ų³Ņ‘čŠ:éa,‚®œÕxćE•‘ńAźĆc޼Ó0g¹YT(9*O<śQ§Ż¬;T·=żi9X£ØK’é“…ČļKqxJ$l@aĘ}k)JęōŹņ.m¤Ž7£.>•‘¤Ø*°DIT8äóN1:ć¹Ųˆ™’5,Q”—}+EŲÕÄ£u+ŁbįYLhpsUƵ[[ĶųÄř¢`˜†§sŽŖ¹‹š‡\’„kį„üŅ—øÕtŻInV4m®ńī%Ī;œq_Y~Ō–ßž2ü/šGÅÆźŚ|ž-³1Ē7”겐W ®:œi:‡')ņ5•ō©¶7V2(5ÖŚIęØ »•¾÷µdäĶ¢“ā$tš ƒn8ė^+„ŲYŌ$ā›r«t_\{g?IÜõ»K¤•ł{WÆNµ8F~%³„‹Ōé̚PŅ”·ņdMQ$$Éæ‡\ zÖ>©b—v2į—Ģ [$ō"“¦lpŽÖ`½{Ÿ&hŪŹb‡ž¤W©Ł`ĒĪCЉ¢Āƶc¼Ló‘ÖŖėö?nŅulŃŁ¹ˆą€?żu£w8ėÄłŚŅ{čÆŖĢ."N2GS_BxWæŅµ3P‰ƒÉ‹œœ“|¾:–¶>ß¾Ņ,Æü)Š.ī-āŽå¶Ŗ±ł™»×‡x²ĆģŲ[1Č@ü+ŗœO–ÄŅ“’9k‡O”ė÷š½«ÅØh—"9į”®±ó)ż+źox›R²€­„ĆˆČ8=1^¦Có^&”ĶQŸGŪkŗwŠ`ŗ¾“o<ä»hćĮź*ŻĻƒōFf·}JÕäł~[¹8ü7b½Js?3Åå4ężåqņ|=Öt‘x†ŽPD‰qi©Ģ²!0Cué^įįoŚ{ö©š –’u=nĒhŒ¦³l.rƒ±bsŸ~µ“¤xX¾˱Qöué'ņ³ūÖ§‡|g)ń{P¼ųaį› +Ē*†ęę=9 Ēxł‰¹ėŸĘ¾ ų‹§j:5ŗ‹ Ž+Ż€²*ØĪ\’§oóšć©.Øżs‡bØR…ļ«/E¢8x5ˆ¤ŗOµYŪĖ cҽHųmąļéŠKewo§ź/!Oą;žUĻķ-”ś'DŁēĮŻKOÓĶå•ķŌK YH@Åt'CÓ4M4­[LXļīĄ–Žé9)ÉČl~=qŅ”ŌeJ½8«Åjy–„ą­ZĀqsØIo%£’Ŗtēp÷©,?ЧRİSÓē”ŁōX:’MN¹3ŚĘö(¤O˜zć|/j-µ3kuīŸ*Ł<zĢė­MXö‡1ńoĆ’č÷„5»Ż[·¹%ˆ®ŒšŃæ÷•†F+įŪæH’„GöĖÕ|zš*i:Œtč/d^ńT ՎOs“O„ˆÅå4–cjVŸ+‹óWM}Ī’yŸąėøīDsüĀ$ć8ÆS“įŪ;zż+žLöéKS#RBµ¼ æ#œW/mļsęP'’±.܇:WÕQÖ(’±ņlōø#ŗ¹Š=Šß(Įō®__·¹‘ķŃO•É\žõŲyõ$cZŻ6“©Z OŻ<ńĶwzåõ ¹‚KyTPÓÜ÷ äœ¬pśŖjHÆ›8.¼½3 ł$’^™<“Aœ]Œ+ż&ę ™åüŖŽž‚Ż€ ĖĘ1š \‘ŅĆs!„Äß_ļV.«}co< ±/˜88ź¤Še9™Öŗ·Ųīdp”Ūµi隼×Ķ3ŹAp~ļ ŖŒnqĶ–īuX‚°09ļXÓxY†6³Ż0ƒ¶ÓĮ®ˆ#Ź^kh­ ’S*Ė#Œ“VōŸ^Ég&ŸzхÜH*3øV¼ØŹ{™ŃĖŗ†čŲØĻ Š§­ł·®ŖH!}ŗūTŹ:MhcŽkVzB’Ż”(€k¬Šõ«MJ${xĖ£€rĖČ©p2:iQgˆ#78ĄĒšÕč­ęņüÓn“ķ]øŪDV”cƒŌ Ńnõ϶jČl”v '”ƒ ßēÖ¬Ieąä¹¢uŠWł9É#ņ­”BĘĆ ­§£ĘR;śWĪßK|ø_#Ēō¬„'±³vGÖ~ƒĆz]֙«ZE§:ī ¬gp_sœó]ĻÅßiŽƒ]ŅlZžö)Jm—q(HäÓ½sJDݽžōū |CyÖ§„]Į4dH7ĘW9½zÖ§Å? k>šŹkEœ—²ÜX¢I`zr;SŒ¬[GȲųCŗI{,““‘ø•ᓇˆž8śÖžž·vˆ±źž\ŒOdŒV·1œM«ųn'h¤™# z7zŁš’Ä[o x®M-mąÕ4ˤņĢR #?2‘Ļ\UE\ēp3¾,š–®—ž¶ŗ¶–ģD³m9`rGėUnģšÓN²±ū_Ś5 cÉÆÓ¢BlyĶŽ™Ŗ[ݬ+g4’ÉŪņõ¬Ÿ[ź:vŸ•%fcœ…Q2æCš§}kāĶ>ēO€ŗC&g8ĪWÓµõž§są’>Ś÷O²–Śr”ę.cśS6füĪgS沜²[øŻ×īō¬_³š‹§Łlg=ėNƒL’Ö€ꓫr®x+PÅwo9€B«wŹ‚¢ģo}žŽę̬ “ŽrJąüS¤éÓ­ø‚%YUvļSó1§LįfѼ¦‹åņŲ™žõzē‚“+]>9>ß&ų¤^?)ž’‡„6­”&‹ųKĖ»k"iu;žō’) źkط֓FŠŽĆģńÜ6*ĄõĻ„HŚĻ„4{N-rĘŁ¬<ąX¢?Źyī? ·=„d0J©,‡ųXe±ź+;šFC#Ń`ՁŁ:£’xfᮓK==ī#’ŚÜĻ,‘œPjM>æ];R‚ņĒTó^_łf°T’?Ź·¾k·¾Õąšń‹~šĶęB’Źģ|ÖѲ4qHōæ‰ į}~nīļM‹0fhQqĪ:uąf¼óą’ˆō{[čāŅ E{„¢.'~T¤Ń›Gońgڤ²Z. Ū]Y²&;š³É#¾ųŁ…ü5©xsÄv×ŃźŹĻŅeĮČ<~µœ­ŠĮž‘šz}3^šYµX—TCtĶ›ˆ°Ć“ņ{s^Įń‡óZY.‘¢Įkpń4r¢…9ąūŅ1ā7Ö÷lūB¦0’˜Ąėœ›ā׌<<—隋¤§$8 qü\ŌĘ=Έ4x¬ž7¼×µ%j—<‡h<žyąšmž—¤ÜL¾Cę%ä1ēéT95Šl­ķ#IÕQ›$q]ę•āĖX- ŅšFū(;‰ŒsļĶc$śœŅZU“)ØZ\Ēi$Ā&'ŗƒĮ®2Ö$ŅU g?)ł@č(Œ¬HjRj “Ģ\¢„ł†HZóx¬äŅ®§+…³ņÆŽ÷5¢škKŌ§i¦ŻXŽ3Ž9¢öåm§y›`˜pNk9=Hl»£_Oz]®bó6źĄ`Ķ[ŌÆ¢…Õęh£V=?Z‘&Ģ»ķgKT?Ī‡ėˆŪŹS"x_AA”̵ĀČ<©Œ«æ OJݵ¶xTł±W“ž ö„-ŠŒ¬u1^ »8­¢·<ēæćN—IŌī£Ct®öćåĪ8ā¹*JʋTr׌Z[\ĒnČ[p½¾æŌöÜJ#0ķĘÜóō®I×±ŃN÷:ßų.Cv¶æŁg4*»€LMlųįĀkv#f”a¦Ż†Ū½Ī{Wė_sŗ¶§u§ųņŚĘŸuČ[^ų»¬iŗMŃó-4ėi ޟŻ+ŒØķŚ»K{_ku·„ü–š>‡ķ‘Ņ<c±īj0±Żź~š‡ƒ“} ßl^(ńuˈR]„XžO_\ō⽿AšÕŠĒ÷×E4ja'Ÿīõ®ŖTĪy˜^8ń& ó\ZŁAž¦-©,jg‘ČÉų>w²š{Ś[ųGF½ńDM,wÄü× z†×ׄt%cœbųcĆW6¶ŗ×ˆu8õ IŪĢøŅY2±ćŠŽ+ Å:żŽŸąGÖ<įö½š’œč©ڰ×9é×õH|§“Ķāk0–’żžāāW`‘¶<÷5äß¼[įoĻØxā‰ō—š“ACēĢŒ>čBrk¢œ.O%ĒĻŚ3ž  ÜĮ©ųছ5†‰$¢5Ōgˆ“£mQÖæ+ußj:Ü÷zę±{ā Ó!‘į‰+ß=wÓ¦9)eyr섹#•M·Ō©"°!ņ?:•&‹T˜2ŠH”1ĮbGCQ[Äł'pÜ8 “FŠ0ŽKóśVŠÄåƒG™3Šv -Ac3Čх;séĻć[ÖökmŸ=~LvźO ¤Ż…Yüż›HŌRąŽK+D “Ł« ›%®‡”XßxOŅ›L³ŃdŌ‹šāŁu-mąh„ŗ( DOpq_1Iiāoź‰y®jZåǘÓdHBF*8=źdśō ‘ģųgö¹ć–öeH(1üėź/‡µÆN-4=.—Ģy_ŗ+š¶}1į߇O…Åż®µį»}OU’–rœķ…‡łzÕ-Ką=Ÿ. ūu›}ˆø!cb Œ{uØöf õ=ūOż™ü3„ųjĘu‘\…C’čLŸĄ ć­ęń?…õ4ū+é#²‘Ö)@ž Ö­+hsKSŚ4ūMN$Žīó1øn<5[Ō.ąÖĖ,°`clj~T’‰ŅéZ}¤h‰3¤0ķćw*µĻxŠś ¦8Ž&Ēo¶Qź(Şf×mŅa½>jö]Ģžy‘Ē”ģj’¶†‡“|Dųlž96§7ļłOĆF¹ÉöĄÆoų}=ŸĆ­4nP„ƾ|årģŲē3—A8Üžlgūu“ØŅp»¼µp¤ī5źz%œ×JZŻ_rę Éīkė„.‡Ī:lśkĄzP©4—„TŹ#/$W¤_x"ŪPŃ®^āx‘Fæ*Mh\cÜł(xZ×ĀÆx‘Įr _ē ”œÖRéztwڰ*Ėvų‘Ž1†\qĻFńCˆ.oõ“{¶ ¤}W5ōχų­Ly™v’Q°½ŗKķvŽŚy„bĻĒ`ƾ=ų…į)n<_zĻg –‘²½»«d—ėœś`ŠĻ•›Ó™õ×ģŻāĖ‚÷Śoõ+k©­ķŪ{  ä śs_N|7ż¼“Œ|_ąļ[Ų¤LM>`Do#(Ė*צ*Z6æcĻ’i‹ŽŌ|'Ø]xwKtx«‰“9ć’žuę?³ß¼ćĻšÜŁYéŚŪĮ#DÖėóKÜ+śņ(H›3Ģ’³uM/[{(VŻ ‰™&eŒöÆ2ń÷Ä}?E»MÓ¬üėä•Y®RL!BqĮéĘę*–Ęlę.<[¬]Ź×ˆ·7l į¾bŽĘ¼źÓāžÆąėėŲu]žŽi?u±ĘżĄœńļV¤5 ›æ÷ +2[±éµńÓ|ąČu+-4Ļ)¶6$pä³.~fś×ähŌ.õ[9„kx·JIOE¦*bž¬ĻŚݘ¼·ū@ +Hœé»éš’ęvy!Y`pEuĀēŲū{öaų…öiąūɵšŻ˜Z«9`Ŗ={…}égt’"ļv U I²ņDétM«ĻJųŪö šś¼šw‹ōI„–ōnIāeڼ vźzW3Z—Ńń“Q4BI$ĢJ0Hq‚µÜ|7ń¾£ąĻhŗż‹Ø€IåÜ!o•Ōń’=Ø¹Õ ŸEüJšm•­ŚźVo ZN¢ź£€ŻN?ž‘’ą…µ©ų‰ąžČ^3ŌÖļ\Šćk’Ļ$€I<ŹöVlqŁ„Dz¦ĪŲ$Ļܘdņn$³»€Įp©dażkė!}O³i×Ÿ«ZNźŪĻĢń’ ÷ćfSŠ7üwį ųšŅļþ/Ó­µoßĘö÷v³ x¤WRæ2ž3š’;æų)—ģuūžŌ~9ųai¦ŻŁü<¼’MkĀ3Ø- ZŹåšē«!$zą~5ĆZ§³ÆoŽźž‰µ¹õŻķ®œ•¹łCq#LŽŃ¤¼±S»‚9ŖUTn#=3^±ĆQŗ"¦ļ¾O銭nĶņ,¤ØīkJfIņÄĮP‰£1ŠUŒg“Ęi¶29•—!·Õ«c7Ł[yŒ1ćœr>”Ō®oökėqŗKĒ'ŽkéŲėö”ń—ģ_ūQü5ų’įøī ȵÖģŃŹ›ĖYGpSøy/{³¦™ž˜ ~#ųsǾ šēŒ¼%y”į]zĀ-JĀH˜Ō Ž8Č8ģ«ŚŌn^+˜īCĪ;×x[Ch»Ÿ;|\ųk¦ųęĪ÷ET·µ[äżĢŅ 'ģĄöęæ>®-ÆbžÓ‹ÄVÉØź: ż‹Q…Ę7Ār¹#ū¤0ē¶}«ˆ¦Ļē?ž {ū5\i:„Ž+šå„» yå¹+-³użę+ń&[ETgŒ—Rr¬OWfzXęØČ<„WSƒ×µä([mvœRÜĪņ7ŗ.X¶N0i›K#Ż9ķZĘ:,“xTBŪ½GjfčŲ¤.Ŝtꟑ­Éjœ±ŒTAŒÄ(,™*D±ŗ‡fpėĘ8­»GÕōŃc žDŪ„Éø©ŽE9V橊™#jlžĢ?ą‹ß¶™ūNü’†|ų•¬jėā­8®™s-Łķī¢ŪÜĄēœ6Įļ€;×ōešCāljō«ėv`ž.ŠežĖÖba† ¼$˜ōaƒų޵ĖR'l=zęÖņé®D,LcĄż«fƒY†ęßY±·æŃobk JŽDܒʡ©Ü§ ŽOė\N›sēļ’ƒż‡õ/Ł öŠń,>ÓåĄ‰žŃФfĢd‘ĻīóŌ˜Ų• ņzü†Õōé§³šāĪŲ^ł|¹QĄÆ5¬"š’=_į_Å<=£Į'U]®ņTv_JśŸĀŽ"‚ÜYj‹4~LøÆ”ź+«°sœÄ]Dń?Ģ–Įļ#-$s!ŚČÕąž*ž)4ż>ŅmU®583ŽBX ĒQś×4^¶4ēgП ¼g£čŸŲ3ŽŗĄ’°†uŒW=kķż3ÄŃ“V÷‘\,ØŹG\‡W}3’¬‹nŁÉēž=+½‡M‚ÖŅA“ŒĄgĆ]QŲć›2­Pū±2°nk¶›Hm6Åüųxćå'µDDo5½ŹČWœõĒzķ“éķīmeŽš«īöā€(Höz>čć1łoŒ(= zwƒu =r+}BE²• s«ŒńĶ`ųļKÓõ Rņζŗ†ß"!åKüpkČbŅ.ķģ́¹'®h7‰±ż¦#y#–g÷n+hĘĘėk±$žSfĒPi“Kos Ń$„nņqÅś6‘³8˜ѰAźjmBę &ø¶ ū1µxÅm”¼V‡–<÷I ?ni5 śĪ8Rܒ„¹Ļ„3X#Fi“õWf$āŗkWĪ• d1q˜}ÓAR•‰$¹gŁę··™Ģ›÷c•śé¬VŚ3ĒĆćęĶ)O‹K{ö½¶˜‰Č8#¶+7ĄM©4·—2<«ܤūöؔt5Œ»ŻĢ——2›»q2Į#Ā¹{ķNxn¢†d„œmĒ‘¬dtpB—Ac™P7gÄjóIw:@§ŹSŪ½e=Ķ©īié7) ¼,ƒĆcč ā k=R¶ŗxŚY!*yõĒUT£©ó÷ƒą_,W ŗ5±žČO•s6žš÷ˆgńžyŖŁéڤ6]ŲŹĻóĆp­ø|¹ī3^%V·xO\Ņų{ā3ŖxoOrG%Źå%‘Gß#Œż2 z,wÓŪC4ÖW—–Œ9>T…7ūu®^fz š.iŚ“×rljŻnF$ņ y—~xsÅwĻ}z~­“ŗXĮ_3Ž’„irb0 ī}E’®ńŸĀ/ŁCöø“ńĘ‚ĆĮwŚ%Ŝ:“ĘĻ÷š9e eC.īďĆģŸų*oķQšöń’‚#ųgqgā?ģ k›Yuøā(·k(Ĭ@,ŠĄzg8Ŗ”’Į³^ ̧ǘ<ڊ’e§JJN’kŽV¶÷|Ń'®‡į4 ²^ŪīĖIŸĖŚ:&xš­ŪˆF±Œ^|čš/Ck͆UsŸ„c_ķ»¹hĮAŠ;”±Żx7F¾Ö|ŌR"pž0{דišŗŻĖ„_ÜŁŻßI–dvź=Ŗ¢®­eb½×Įż=n8ļ­ Öž„H"•Y}*ĶģÕą Fźõ“+WĆŚÄ· ö[%/Ļ O½jł*Ų«lq~8ų[ńCą±¾Ō|]„S@³C>”h„¤;Źe#Ćž%¶¼ŽŚk1Į"õœÕ(ŲąŽ.3Ö,ķl|K}£­ņl·Õ4‹”1Ļaux¤SŌkä_x kÉĀÓül±so|²ć«Ž5^Ö۟žg|%O^UVžUšēā7‹žųūĆž;šķ„¶©i!8™wG"A} }—ńž ūM|^š£x;ÄŗŸ„ģōBūJAjw2ēƒ’kbR<ˆxqBµHJ¦šzeą½5ī}ĻłķDUō?3Ļpü°•KhxOˆ¼ńėąĻ‰Śx+Wū$Oū«ØeŠņ.åYr28ā½Ē>Ó~$ü5Š·–=[‰­ŃÓćƒėųVŠƒ½Ķjf0ŅQgēßk ń*xS^²{+ ”—x J;‘šżCż—>&xBmYųWćńnžÖbł’?1špA>™žU¦ÖēÜäŲ•R7GŒ|`ų«üÕ.t›9$Ō<9t’hÓļ-I>tDēŒą€1“^·š«āģž'MŌ5 Āw|Ųžu­[CŽ«IJ›‹?G<ńBcĆvŖg‚źŌœ†ęLś×«ßx _ϤŽ3yāŚ8ćŽ½*u4?+Ķņ®Yß¹vŹūķÓÜĶʗµ܃čņØō‹Łlµ½>fi­åYŅ5e$XķžµŃŸā°)I£ōĖąŌŗˆ.µM?ZŽ8õ E6EĆ!qõūŲü끒‚ŠxÄ_>ų7慕•Œ×žŌ%ƒP|ņiņķRü aY9÷4Iź~M^µ:9Ö«vQv’Ąō?µØ æÓhĻp€I”Čaķ^qr°j–·uō%ķŁpŹżż«†¹ż3‚£iF]L­?Ú™˜ķōų¼Æī‘Ą©åÕ앤l„F¬J¢€1Ÿ’Uy²?LĖ15%+ɜoÄަ†ž4Ń+Ճ"ź0>x“׎µćž¹ŗ—R²¼· Ć%ĒšūRå>¾ŒŪZŸYųļā—‚¾ų|_Øźš†¼Ė²ßMbE› Ü=+ņ;ʞ7ńOÄoŽų·Åóy—v[Ęēw‘x\×-UmŹTĶ]6¦ER²?#[…%Œ$(Hd=HäŠóå=Ow OKę‹r„Hr{“ė^Ć¢xžśŪN?•“ąĘG½va÷;eEXśį¾¦ų×Ä>ҵķhXBņ+&a“ć€yü+ā§Ć]cį/Äoųü Ūky­/a.”e ±Įģ(^-Ÿ?_1„1Qµ¬“kžŻ¶ŸžGʟāŌR’īį:iO.-£«ŽæŅ¼QŽęOŁjŸ¼ņ„‹ÉpĖņō$W$ćcŅ¼‡ų“Lk;ųüC§=ÉxŌHbPYä2ZśÆįoʝK^Õ>Ÿjö’ŪJŗŚīNƱĻnܚč„$pUĀ6ī~…žŚŚ÷‡m?eļüŅŽāMSUhnšź6C#cŁæw”ÆÉOi·öŗ,6ˆ¾uµ“j~UéĻč+½=‘96T”œ÷“æéśįµŽHĪŌ’^”[ʰ9G\Óڦ]”tō:ŻÅŚž柦j[Y\(Y1Śß‡ą*źx Ğ.ŠõĶWIÓćÖŅ̤—VźąKå¼ź½öŽMrT„s†¤#ä·>yš?€žx›Ćæ¢ń?‰µ ÄvH²ų}Š“ ¾Ü˜™q×p ōoj_i³ŪiQŽź,‰;F āøŻ#‚®.Q¹Šxfę-[ÄVŠe|¤bĢŽ•õVƒįoxŖ[oųjÅÆõ×[;pÕÜü|ĶŠzj‰óž` ›“±ęwŸ²„?5[|D›Žhīķ–wĒä9$ŸĻæ­w>Ó¼Ø\[ŪĶ,Z|¬æ1ž%‘IļE”ŠłŹ9Ģ«GŚQÕt-ųćöIŃü_§’i蚗ƒmu yŽā)’'Nøq„yŒ’ą›µ6©ą?jžšæÄO Ab÷@[Ož`£?ŗOćlĀņsާĶ<3:Wį°±ęĘĖ‘w{ÓZSŖ[£jz…ĆAsmp…^ه ž‡Šö)u8#F¾mŖņĒ©ĒŠW$£cōl%xĪ7‰ģzŒ-]V+»›Ž@ÆA–ĘĖPA>˜É+ŻĒ…gcÕ§'cĘ5ĖļųšO§¢²K LÓ!`ØC°TL®fn[Ž$Ā4fČZŲks*—pAćń¬Īšr3µKä°°x&C“g®jŸ‡ŽDŲyßÜśūV‘‘Łz&ęp . eĢ€HC/#އ$_30|[-¤pi°$SGq&Y¹į€ļķYö+Į˜ pjŹ'Eµ“½¹¹µ‰m䛉tcź:Ā–ŅļC†į-”²‘¼ĒŲ~]ŻÉ‡31hŠŅ‚^b`įē­vPFхOLR-µkqĆ+åp+ƒń‘—$7±Éę™[•'„nsM‰¦źK!ņ3 ކ»«d£M‡i=h$­<.ķ9ō5fS•ubßN 5än™ĘßéæŁŗįt·ŽÕ%šƒzšÓ psž•“PŅČŅŖīŪĮ§aLDXģe*Ś­!c’®Ö<;°Ö. }«'šJƒéÅ{ē†4š4"œ°#œÖńvH„aĀžĆó®ŚrŠłĢm5k­ŃōĀļ ŲkpkžÖ­MIJFÕÉŚb”}ÖÜ\}®”įż^ūNæ¶’Īž šcaŽĄ?ˆÆB“?-āT¹Ū‰ō€/¬å¹Š'vp„śWÆėŚu֘¶R‚³Ų»uŪw?8Å»3gĆ·óĮt,ēŹqņdōö®»Wū=¬ ÖŃĖƒkdtŖ”¬qSØīyEÄšMźÜiĮāAŹ‘ŲwÆń7…ķī'Õ¼ČMχ/T­åØ^=YGÆ9ü>¹ĀlśŒ²¹ń?оjń 嶑vŗļ…g•³¾#Œķ9ééųUØ-¦ƒB›Ä¶ŗ¼ŗn¹a(BŽ“9źQņ×4ä}•ņå³=ƒĄ¾+Õ“łš9µ!o,Å?Żnv„sŗ‡M)¾d‹^#»³A Œ¬²mį0 p·–Ø‘–AóÆ9ö¬łŁõø±wKøóL)"–Pq“Pܽ²ėŪ¬x`ßjjgµ5to_}¶Ļ7ŗHo¶F<ČYFpƐkÅą£žÖu†’²Ē‰µÉā“ÄwFāœ”3ŒõąSķ7>G5Ø£R’}eoü•æŠųĆĀŗö§įč˹āTĆmž*÷'ʧW°YĒ*¹]¤2ćō¬gQXģ„W[½ė)˜Ž2G­]²‘ĀLĢÅuąõ’<=œaćg-•*ŸśDūKsŁĻ5Ņi¶ÉmåXg°Æ±„Ucür¬õg¤éó¼v¤83œÖ^§y§Ć’ż2]Šóé]'Fy~Ŗń¼Ū£ÄQœ†#­Ims$ź—åģ(9jķÆÖPŒ=pEvŚ~·o,%Jģ¹Q€AįØ3)Ž@÷(ÅĄ Ł¬ŻĆŗĶÓ Ļ~WĄö ĪŪĆ7©tš4bĀ’¬ēšąüYį×ÓgIdES(ó ĪIķż)„Š™ģpRJ‘īÉ9ķļZś3ŗĘņ‚F;ÖŃV9fŠ‘ź*Ļ$rØÜ>_÷NkNE#L}ÜnSŒę©5ƒ9°F¾%:Ž•Īkvihé*HĪGV‘—ssQŽŹ®® pÖ“šåī1—ĆJĪē=Īo]¶•"I.Ģ'ī±b­hšĖé‰ @QU}GÕst×ųwÅ@NÖ³¢æšIߎ½FĻ[’ŅUXÕx9āŖ>BlÅÕt„ŌŚKØD"n›s^M©éŚś™RO(02+X‚eæ'Tk†š+“³H—Ģłų8?Ņæ0~6xß\—ļ±ź‹2¼ŽB•Īp0GēIšA(Ē©jŗ·ŁĢ¶ī27ēó­øō©Ū`v+37OjŹfܧµ| “ķRŠõY•ōŪ”ūµ‘’Õ7'p'šā¾€ææŌt˜Æ“Ķń%F>YŚłRŻ…rɏ•ža¦üY²O’ m‚“Væ)š6ŽåFsгāļŚWįžÆįö²š­ŽÆ}vdP|ū}žS.zzP¢L“>\šī¹āĻų¾Kƒ ž\īQ;Xgų½Ķ}$~“ŗGöœ’eY”į£, ĻŽ“Œlc)Mwšööīż§“·“ƒwĢų8$µ‹7ß néŚ£ĻahKOüQJ„Zv&ēk'‰<'2ÓŽŅmRó.2JÖ/ƒõßźž*ŸOÖtɔ˜Ź¤äbnūJ„+r2ų6 ?RŌ®müEż³ ²ƒmm4ALCt°ėĶxž»ąļų’īGÕķüĶ1%ĘŃuŠžjD˜×šļĆķBVŃ'»ø·øPŅłŻQĻZ³s«fĢ”‚„³ę@*%®¢'šĘyrŃ^N!C’ĶŒćŚK£d +%Wö†Ī:ōĮØ*3ßMµšģóéŗ‘w+ņķŽ܊ē÷Ū¤ą7ī£,rƒ95²,½ä‘\A “²ŁČB©D'gūÜÖĪ’Ž›Ä‚FĄ U)Xƒ%ō‹•Fø.‰y?{éT#²Ōonc¶³ķˆž,|µ-õ`z;éqÜiĖ{3B~ö3µˆļŠŖ±>§q%œ˜VS÷ƒuśVR•ŹQ7īļ`Ńō°×ŒM°!K‘§5ā(Ņ’K‡PŃļäH¾fcēwµEĘ¢Ī?D»×%y(åø@Bż_Ö¦ÖōŻZźuuXŌó£S„ų]šĖLń}¶„ÆźIi5ݼ….!3裦*Ķ÷ƍ -B}CI¹ši¢V(7³ėĄµ>Š«žcįŸk×Fé­¤6EĢrC2W’=kŌōÆ x3Ā/āŠ¢“×·lYŃG~ÄRö‚h­¬hWüÆØI!iHÜœćŸJēāšĀBSĻ*Īļląāœe܉FēSy«^h¶Ķ&ƒ"µŚ*’Ģ»Bž“ü?ń -BŅ]UKwŌ‰ų Œ­ ÜlI·|eü¦<^7®[­ĆĢQSĖĮÉs@FV<ęļO¶åņƒiĘ;Ō–nūÜrdQłŠ>vC©[^]ڦšDEĖµ«¤Ł¤hŖ@ŽøśŌÉ.¤t·—Öpg&Āā+š>!šõä,ƒķåĘ:zÄn%ū;éĢź”»ć‘H–‘]\®ē(:{PI׌čöægd …Ļhē‹wšń"xļ"¼šåv±ŲņēøéLJ= u“m;Lę¼ó[šņ;ٌ˜³œ“üØQ„TUĪā˜ŹŽø©Všø ĀÆN)ÜxOD¶ŗIĄžnąŁ;³ļZ÷ZtVnšĢ«…8#¬„.ƒ0~Łmm1T)lp:VäŸŪŗÅ؂±ž.óõĆZgE*Mču~ųi}­ß­Ä÷°Ļ ĘX)\`ŽrOį^×į«Km)åŒ[ė€ ƒ†#½xõŖXõ)ŃŠė§Ž?#Énvßn6äČ`® §u¤O¦ĀŪ¬Ö\cåĘs޹£&ٲƒ9ĖļŲŲŲßE«Ē »A”häĀŸÆ­|§ćOOxÓÜY;˜ä.x ķ^ Ęǚųk¾3ųÆ x Ć׊µĘ(+XwķÜzŸnkö_ör’‚hųCįÕåæŽ’j-sūSßšw‡ łU\ŽøėĻ~µčĘVV0ØĻוš’‹-§šß…­ü'¦ü)ų4±“xš7ŁŽhHū«€9ļļT擱߃ouM#ą/‡.õ’NƒmżĆ4”äõ#Ӛ \ūš÷įŠ|w6™'ÄÉŠėpfū<Ÿ$vR;ćŸó×čæų@ÓDž-"bš]¦årŹæ­i)U8k—šćj÷Ö¶zu¦„ÆZ Œ‡|÷…W¾±Ō¬n,µł|Si{†’o’Ąūeæ¦kŖ9\£¦AØkZÅńń3Yéw2@Pc8#¶­SŸÄZ}¶§eį»GŠ+iäęą/väåTCgńųkįž½i©Żk¶×:¼.#Ϙ¬A Aąöć—ākŪ[ļ^xŽ{˜“ėg m#|(LŪ×·µiź†~Lü{ż¾|)š–mKĀæÆm®µ&‰šhƒ¬]•}:ŠüFų«ńėā_ĘoT×¼i¬5Ļž˜P6öUtÆFœg…Oqē#¬m¶3Ź*ŒŖ‚"¶{ry­Üŗ#)»ŠPŖ2“ĒN½č¶ØłOr>õA”‚HPƒ&2ąēŽ™-r8Čš3ŒR0‘n;YŽą qŌ“Vķ­"@œ/­))fŠ£ķ8ĮĘs]™¢5ī÷„“[[kgšÉĢŽ1w=?ĄŸ¼Sć}wūBŃīõ[Ö9‰„gŹĄÉo­~±|ż‹>ųOŃüWń}N­ā¢›¾Ė D§ųCóŽ:ē©TŽ*ĒŽéVVš=„M– F<ø¢¶!p¾‡¹®ƒE7چ„iaš×KÕm“yŽĖZp YĖĪ[Ģ nĻOJår¹j&w‹<1gį;É ńN½oā½~&Ž·Vļ¼œóĘOj­=¶·ć­:mr}VĀ=!‰c,#‘nGaéUĶŌé„O;Ó¬äŅī® šéŌµ-ŹFģnlcŸ_zćõ¹]¦ŠKĘņI$(~9„Ķ­ĶL7ҵkØ÷E§ÜYŲ« ĪFAĻų•io$²ŪŪź7Ŗr³’w˜š(4ækßu}qĶ÷Sšē5}N[É!“Ńć‚+X²­&Ü3SXJb#ČüOńWĮž „]›;{U‰Łå æQŽ:ł_Ä~:ńÄ{¹ä¹øM;CÉŃa;dŒś‘ŠÖ‘ŁVG¢x+Ąģ‘ {¢˜ ”r¹<×»ųĄVvž]•Ÿr_!öąd÷5ĪŲܙōĶĀm;HŠģļīµ{;QŸ‹xŌü śžŸ…{ĆƦM%¾›#D„gzHĶĢśOĀ^Ö¤ß}8€ZN1‚JśÄW¦ėZ<š6Žŗž™§E1B»Éą'½onˆĪLņ›ļłK$e§ĒƼŽĘŅ]{XY§†E_wS†©äFRĻ¢4MĢé7cP¼6Ų¹Ļ ūWxŗÖm&×4ĶZŚāŚ%/,%y8’ ØĄÉœV‰ń.ļÄ)rŽŪeSĀ(!MuŚMżżÕŽ5+1…eä2’mʶæ?„Å8³³+dDo½É?7ZĄŅž]čW5Ćw¾ÕČå~“”S+Kügy=„ķ•„…”ū)ĖHć 揭fßß$–4„“Bä’}M™'å:w…mm×RŅawŽ³Įz`v¬żOLÓōč‹Xؒßyö5ōŹ7<+¶Gį߉+c­Ū@āø‰Šćåé_\ė~'Šo4h{DŅcQē$½ƒS(ō+ł–e±ń“:üm°oüź®ųī}«äŸźz¦™w%Ča$ū:ÄO óXż{V<¬Ņ+±© Łź—×77‘ĆŠŹ~žK īµżb/ģWNŌ­ZT0…]Łc œŽŻæZŁ#s¹ųkńÄzbAoŖĒVé³l«'Ōć·jķ¾0üZøÓtčᆠ;ˆĪĖ€r°xé8ßBU[;£ćļ h—­yŠ/o®/#IĮpĒ(¾ä}+éæ]Żx—ĀÓé9™Žd$ £ ÷ėG*3s¹ą~ń&«į;č`æĢ6 "yR©ĮF$ ætŗĪ‰¢_üPI//ŽcÄģpdÜ7vļĶ0R±ģ’šĶµūGS湗OžV\-ó"2ņ0Łć=+źĻ…^;‡Įŗl&µŸP“K:qށG_n”ļŠMl¤¼)ńGžŅēQŽßķۃ#–@sĻć_`Ą{Ę–ėßššXŲĖāKŅnc·2“Œ‡q`¤ŒūńMDw>rdUžūmø?»nķŲ×µųwD’ēB¶Õn•¬“Ēq ›ļ`šN,³¶“ƶw-c äzµŗćĖøQņ°5ź> ±¾¶¼ÓĪh^ōLÜ9 €~B•‰”n}9ćŽx¦ŹćIÕ4huK° ²¼jpAcæJü݇į‡uMKÄ -ЁķŽY ·S“¤ƒ<éBv9łO%Õ|*öW7+*•ˆä‚xķ^[ØŪ„ŗŁA Œb¶Œŗ25üā»ļėÖZ“Z~>]‰ģkõĒĮ^#³×“[-BĀdø‚hŅAģH­e²g¦Ęhzg§B+7SŅģõ-;Q±¾·ŚĖ' Ź1¹Oc\sźmĢĢoč’ųO\Õ¼+© ¦x„co<‹ƒqcļŒā¼ŽDŽš0@B ƒŠ˜ī͵>øų+ć(> ų PųuØEisā-?g!\¦y5³šsć6æū*|ųqń—Įļxś†y¾ęä(. $ "vĀĖž)ņės¢2±żóų?ā'†’h?…~ųõą+Čīt-vĪ;†d9ņē+ó+ß!÷VÆnų©¦‹Æi²É4VįĀĻ·ų#­b՝9ō>ĮÖķąÕt³,²ĒźGń ü?’‚É~Ēö©ż”õx[Jš÷ć7òum,Ą™f1ęƏāń×* }ģW.*Ÿ4-ŚĻīwż *Ą÷ˆ,”ŻźwŃŁ+V˜¤üѐCzƒ^s"‚]UH‘ŠļƒŠäšw *‘ĢY*XŒm¹F7/Qč*ŒTl);''<ā©“E²*:šzS* ’ˆ°ŹKqßÖ­ĮpX™YIŽ,“³+ 9>iėƒ[Ē Üki,ΈGĢĄsM¾‡Dż|Į¹¶ü^-šÆū|Fø[ųu仚½ÓŹI¾“,ÄÆĶČ*XätĆvŪĻõ*ńZÜi¢į ÜŁVrø¬±4šJO®æ§čt£ĪõĶ5eÓēÓö”›ļÄär |;ūAü9Ń×Ć÷?!ø{[Ÿ9lučs€ńœģ—ßvO×ŌW™%aņÜüńųŻšcIų“šćÄ求’T²µkĶ=Üe¦ˆ3߂[×­ß>ė ¼ŖųrT‹ūI䒣z4*IĀūŽ ]'nē=H)4R+…B»•†sQI½÷ Pžõź#Ž¢)E=œѼ$åNJtįÕAu鎵­Ģ‡“ Ę©·$œ…c‰·ł}ÓYnĘ,RfĪŲ\äœSĖFĶóæ—Ę~µ¤ ŒE Dį2¦ŽøØ£‘ŽŅĝ§=zS’ŠŽĢśŪö(żØn’eOŚWĄ?īuKGš%õŹéŚūF†XB;’4Cŗ’īÕžß ~.hioįļS_éͧ_Eā“¶?»š91ö[Ą3œĖצ}«ž{q—Cō“Fž“ЦYW`taѐŒ†PGēP4V¶ņH‰µ¼ä‡ĄįZøźnYłƒ’Sż‘,æj’Ł›\[-2ćPų”ąųęŌt¤‚1$·ÖÅ15øOāÜ ;‘qןóĮń}ąŻw\šjµāÅ»G˜„|Õ98#ÕHĮ1– y„ö—VāXņŪ·²×Ńīdŗ³Ó¢—P‰ŪhŒ·Żś’žŌ¤ض™us.ķ7t·a€DĻß>•ą~,šÖ”¢ė·6š­›Ū]‡`į¹+“ŲÖ¹“m2ŁN-dqµ|g=kļ/‚,mkĆSi—VóE=©ƒ®:ēšÕGc‘>ŃVĪ#±AÉ=1šė­µ„2K÷®ŗg4£b›_%„’ö…“)ę©õŌAāēÕὋRĻ»(0:Ո䯻l‰¶ŗž€ÕHīe³Č¶IĻ<Š")Ćj.!˜9O½q^ó¬6ƒ’ īŹļKŅõc1Ž!?2ć£Æō hó¬O$‘ –šVĪ7¹,ē„M}©4F{$o±Ņƒdq¬Ļ,ČķVüė¦Ó–8Š’Ŗ§^“ ×¼·-+&2zŲŠDöŠ ć…e»©Åp+ÓogÖę¹[(­¬®1•Pxq֝ [.č©qøżÜā˜Ņ:K’‹:„”ļ5šŖ^Ä6$LÜ6:zÖ©ń2ćÄģ·„¤Qj3œJŖx«ŁĒ””eifö²=Ć,M·=8¬Ū½2ź;O2ŌžēTµcž·Ōf°'äFŁ :ŒWU’ 5׈nž[§3^6 'ųذāQÕb–Ē/4`3įķNŃ­'Ō·!*ø?„Ét7įh%»‚ĪéU‚œr0MuƒĆĻ©Dä¢ž*ešŖ}ĢsĮ >”c4qķ\²±Ęļaļ^v×W–Æ< IœR²¹v*ŚČ$‰īćgv,rXskFĪī{¶ē`\dqЉv³°ģö«‚C±95„Œ>eśdwŖŒ¬”±Ī\Ė £…@”üdTvš¬PłŸn_“=ėBĪrKß2xĪé-ßtv”ö†œÓ®4Øn~×vßzB˜5} )œć}žŁQ“ Ōc“\•ķä Ź«ó×'v:VFšÜčt=en#K$¬”sŽø­ģm>Ł.ņœtĶe5Ōč†ćG‡#¹¼Œ¬ŽHSø‚8"°ücFx¢ņNČÖ<¢ą:ž•ĆY”„©ę¾–ŅŹż_UAw‰v!ĄŪŪśUM{ĀŚ>„4śŸŁ’;„ —^ Æ÷Iī=«Āƽöė%*Q’٤ĪĀmŸ=݌IV` Ęę½J ”™puĄĘ;×3=ś1ŠÆČ·¼ 8ćéZŚąæ‚ŠlxĮæ½ZE¾¦ó„}N|ŪI 8ŗ“† ¹Č¬jŪPxŠˆ 6äį}¾•n穤`Ū|0Õ5k [Å:֛iŖāāŽGä÷Qų×¶Ę !—¾wv5ŒŠ¢ģKvdˆ!Y<ÄšWĘ ~ÖŽ(ńJjĪ™i”$“é“$ ‚V`±ć%ĪĆĶ~üYųO؞ɞ?šŸ†oƞ÷᷊m?µ<9|Q¾]ŲcnķÓ*~b¶ ŵŠü{‡ø‚t8’¾UQŽ.Ķzņ¹~_”čśeĢwQĄ‘•ń†?Ö¼«^Šnõ‹}U6i‚ŽćĖøÄuOB}½ėĶŖŪżŠlł{ā7‡­ü!yiŖZœhwL2O?u>ƒ ü½k6ĀõHV2¤8ĪAÆ.¤ĪŖcĶ”ŚéóÜŪ\¬ØįGCĒ,=+Ō“ŁĪÅ}åW® c~§ŃįGB²µĖ«nf=9®ŪJ²ŽDbēīƒĻn•ŗ;+ly/&ó¦[%¤gļßJä¼5ā[Ż“A%Ĭ€‚»NG’ŖŗaQ3Ž£lĻg×h“ĶM±ńD:¾»¦¢2….\AōČ8č+ĪōĻ~¾–kĖēKÓÓę+ōŚyć׊ģŽ!f¼-R•ir?u½÷ć~ŸšÆö†šw‡õė:}·‹tŲ¼Ė+É#ņæ4ŽēŠū׏~ Õ/ō hmõūT¶Õ-äŪ*÷H8ĶMJ©žß Ō©‡½:ŗŲū—ąļÄ_ų‡\·Ń¾"@·Žŗģ1’łhY¾ė.zs]·ĘŁ6ēĆĖ„ųŸĆćXŃ#_69ā“˜AžQ×·5”w?G„UIhyŸĀŸˆzĻ‚¼C.›«˜ī,š\F ćr÷zŒWčWƒr$Ażļ^ƒņƾ<-©Ē©h£į7Š ·Ōü'ā2eˆį\‘vd‘Ć9éjÖHü#Œ²ų¦ŽĶ;Ɩæ”üŃüKѵoš·UY-nō-BKLŹ›<ėsĢrPŹG=+Įµ‚„Š_j)żč«„xćž8„µµŁk;!hŁ›3©¬@·S9æ”*1VĮē5ĀāŠšYzź~œ\ZźVWWO ­‰C¾Ź=sōƗ~,x“Ć»Ō4/j°_\łĄ@PåQIūgéÅc)õ:v>jÖ®u\Ļ©k„ŗ•Āą–“ ō?ĮƄ >*ų_›ÄrźvRÉ?Łģµ(¤!-.#‘é=«Ž£»:č³Āt­ūÚž»ąŻZś ^ūN¼{µĄ§ĖŻpzr+Ń52o²J%‚%Ä„GŻźk‰Ę细f6‰z%¾K$o†äŽń^Ė 1@™øä`ƒ]xg©éŹ7ZŽ«\Ł%¼ŠŹė4.²ĘĄą£Įõō-ļÄĶ[ĒöŠ^O©ŽŖ*­Ģ™0:O5ķAū§‰‰ĄĀSU$½å³ķ}Ļńü—Ö:Ż­ä)ØiŅOēA L¼\`ŒŽq’ÖÆ™ˆ‚öx“„…äĶū°s\µI…¢ģ{dČ(āņ\U¾Iµå%ÓūĻĪų*Ā?‡ž’‚‹~Ѷæ .-“ōŗ‹NŌu 8”¢¾’ Ņ€vį‰õs_ EąĶjd—Ź“»µą”$ gšÆB<Ļ—b<Å×­Ć8ø—ļŗqæÉ[ņ±ĻDŚĪ€…5>ÖpŒW1œ¤ńüėSOńH²ņŽžI%²vpkȔl~Õ†Ō”Øß‹Ūé/å‹2ŸŽµ›|÷M{X%ć’½Īsɝ®“įĻOŖm>[[HŚü0 ć~ģVrÉ/ŁņĢT»•&j6Šęµ»‹{R(2ȍsŅ»=ÖF£Većoõ č„ŗRy¬Ņp=ŖSĆ9΃ ąśWL)Üå•KZ|Tų£x»özŠž-|/šci6Ń!Iõ(­ ’KWN¬‹ŌsÖ¾AšÅō×Ö1]2ÉõĪÖƒčk£Ł{s«‘œC½Ę1]ŻßĆ’iæt’‰qÅk}”Īū]bbd„gnŻłÅ/ftB¦‡‘xO“U²±Õ-äņe…Ä™žņžß•mhšŒmld æJ̾fo%ÖĀ ±ęµŚŹ³†f¼XX¾Ņ¤tSŽ„ĪjŅč|µqā¹ń®Æv™må'£ŒłõÆ®žÉž¹¤@Š·-½•ø²3ڵRīx˜Š…ļŠ—0'µ‰4ļ³=e‘Bs‘üذ¾‚ś{h#KrU˜cī‘’×®ŖLš1.÷HūėĮVšx‚ *kc³PņV-Ąą¹ žSā.ƒ;Ž fé.ŃDS1Ü u>½+Ō¢Ļ˳„y4qŽŌ$Ņo/”nUūWÕ°kk«ųiySĶÜŖžę»QłÖ2&cx’Złė” ×a¬ÜĀÖ²µę^pGJĖ•˜:]¼Zۈē’8mŲcs 5åŗ·Ų“½VęÅ.aø(Äd « ™£×Ąc^§‘üJųcØxƒFŌ‰š_/ü3q rŪ1Ā–Vµī²ė>Ōõ[mH\ŁY]\*?$ś:ęæCŁžČjJ}ÆxViŽ3 –sF¼īFĻnƹŠę}2ķ®“v1ĪģQcÕĆĮĄēķ,÷Z“É&ÖS€ƽUUdœĶ*‡r~šŖHõł®MGVæ¶Ņ¦ū l»¢l†ĒĶyķåńSNų£š?öYŌΟgā 6ųĒ}¦ĄąĮęäpφśõĒ-ĻNœm¹źRmA÷ÉÄųĄĄĘkrŚ×ģčČf88öÆ[½ä~oćnq c*=ē’oūæ‚müŽĻJV}§hXÉ{WE}¦ŚŲĆ3 ópń† §85öµ?É:ę߁d>Ł(–O»†ź÷‰tk=jÜ[¬!&‰Ć£€­Ļ>”åŚ¬¦śTp‡˜Ž¤pj…–ŸzøŒƒĮéŒbƒžlÜ:DŅ“xA3Šė­tln£2ŪlłzŽŸ &™$Ź’+€ø ÓŽ¬[ųŖĒĀĆdÆöĶĆm?5E©xūJÖ#?ٳI*+`g‚æ½y5ŌŲ£©*6žsNÄĻc’ø±FO?JŅŅ“‹¤Ć>w¹ŽkXČåØtW:½ŗ6蒞X)ņč²C3)gØöŖ2}Œę¼Ußo8;zƒžµ“©źź?-Օ€ĄČėAŽb y£ŚÄ™éļ]=„¤-< s NR‹1”NĀźĀ;ė84«›Už÷p9Āų·Įކćģ0łö…™^vƒŚÆ—£ ©ąĶ’PøĖŽĮP}kׄöv‹o$b9WŽµIXMF«„äĘ-“8źdUBžŚgWū$q«{gŸĘ™Qާ‹üPÖļ4:kė1P:IČqŠü ńL¦¹ā %h­Żä-ø³'‚=jĪŗq?¾—¬AäVł¾•4V6±²–Q$Ąõ=ż«žs4±«ż%åķµÜ`XE° Tž#ėšž ų«F¾’÷OÕä›LŲL‰œų#œÖDó£Č­`ƒH—]Ó5:ļS[ˆäo5ĻŹ¬ĒÆ’Z¼sLšüZž© ¦ˆŠ¹o,©ąyĶoČś†ÓM½šöóYŠę ®„{‘ō¬Ćńq5hÄžMÄsK&Ö,¤ŁėłÓ9ež…„k³Ž[Į·W“',«œŠ§ŖZÜ_Gwp*ĘPüÅzh3jǟx į­¬ZŪĶ­ÜŹ(Ł$ŠqĄéŠęõ-?HŃüq<1\N×1“‘ņś‘@6v:ζ––+%ŗŸ9ÜO"¼vćāŠ.dšÖĘł,\ʇČP=kX!Ę)ŸCxsĮ/s:—ˆkS2€ad!+÷½}+Īüoą{ ]Ķž²Ae€é»h#˜Æ$—U¹C8²bŅÆqŒūf³˜tŪĖ阆 ŽkZĒūBŚāW•Õ×9B+ķļXĻcHŹŚ淃¼ŠŽ„lš÷÷5­ż®™¦?z§ÜńަqÓS¢6±õĘ”į 8lõöD‰Xä:ŸøO qX>żŸ¬ž(xsÅi}ćYō½BGžĶ…¾:rÆj甐8­Ļ•ąš—‹|vš…õ½żŖNŃļixĆżŚŚ¹»x“łUYSŒćڵC)-O7›VsęBĄīéžę±ģ­ ƒ;É:®ģŒšÕəI ę”$±(3 uĻZĮk²ń<2 ‰éG3Ų‡“»²Œf,ų}ÄzR Ū[I¢B»·zWµP¹&”³Ś3ņ£ö¹Ŗ÷:ˆ±ŽG1ļ^ƒ­L·ģ6+ėė™ K{fø–L(NųØ)#œ°";¹śŌÉšq,JÜ)-ŌäÓ”˜CvZL„nƱvVwѳ[ŗŗ€ ŻŌVŻĪ»Z’7`¦Ņ9Z—+ēÓĻö‡lüą6zVEī‰ż­łlžo?ysļT˜Eæ†õi/gŠńbX8ņšÜŸ­jKįų`"8n$‘±œ?sA\ŒÕšÅĻ‹4׍d€Å§±>`ĘC]uŹ>³½,} ü¤°ązå­Q#zt]õ-é_µ[Ėė$¹ņQAČŁś×¹é^Óō‰Nš|ė¹*ŗł š18¾ˆõ(SHŽš“m“”b -nÖGM€c'<õÖ¾‘Ŗč¶2ܶ±i%ÜGäRiWĻn9Æ&U9™Ö—c«Xō{;hõ¤‘O’m»CüŹ1œ}«Ēž)ü]š~Œ·–:4ņO0ĀłęCĄ#WŚ»š”ļ$†|YÆkś§ˆ%VµšK«Ä$6䱘ƒ½}ļū<~Ą?ž*xzŪXų«ü;ų^åfyī#d¼ø„óņÕļņĘ*Čē«#ö;ąēĀ’‡ß -!š×ģŻšŅŚIYDwzķČżōÄ gĢĮ'×Óé^ļ„xwAŠuŪÅ72k?y<É-_÷© ģG'Ÿņj[ģqŌg§x‡į~æńlõˆ>0^ Š?ÜZĒ8Flu Éģ1ō®cM¶±š¦®ś7ĮŲ`ū$¶ä\Kq&/ö‘±×­8«“z¢|A×¾xMģl4&ńæ.Ł>ĒweZŅLē$Ž€gžÜU{Ł~/xĻNŠõŸx¤xcÄÖ÷QÉyhmĄ†ūŸˆōõ®˜łģĻ¢¼a©ŽéŽ»×“ß i-Ŗµ¢Ē EnŒnēŒ×Ė7+Ót«4žŚ?oÖÜ.Ž%Ė—šæoˆ”lF·ŅŽZ>”©\EadØde•±Żõą×ŗöŽ5!aįt½KYŲĖŌ®C“ĪNxäż1ZF70—cČ~7~оxNõž)ź:WˆõŐK[\™B÷ĘĪkšgöƒżŗ~"üYKß xSY暏žf¶ņāIP”;uĶvQ„՚'sąBżīono®/.µ –^I[$ÖA»®A`Ģ6‘Ų×eˆ›čg¼s‚7T “J» (ēęīHć4a)t!2$d>ļĢT‰äp¹Ę?­I„ŖÕJŹSŖŽOSZVšģ ²*©ćŚ‚yÆ”§i Čf@€öÉ­M?HInģaŽhfCŠōßx†ņßJŃ4ūjłÜ··Œ±lœv«ö‹ön’‚^čƇ“’~ŃŚłŠ`ŽßCƒå32®ē©<ōĘ8®J³±Š£cķKxĮŗž›ąæ‡Ž >ŅjMŖMņŁ3Ō7šQZŽ+ŸĄŗ&—{įė=žŸ‹c½³Œć é×&øŹNĀųOĄ[…s¬E„ų}bŁokŖĘWźA^¹ õĘ+ VųØtk[æ ųÆ“½ą²²(į°{ćéG/CdĻ=ӛKµ¾}zāuŌ59±‰ä,N=W°©5›=kNC©^!Ó“y†B2ķŻļœņ9ō §3Fń¾«” »ĖmŻĀłi! g·„b]ŲK§<מ"¹Z»}Ī©øöĮėÉØ“č.fx§Ä¾+Ņ!Ó÷¶‘£ĀĄĄ Xēė\õŌvĘWŅ“±ż©zĖżÜģcōĶc-"ĪGĘæŲßķžßā’ZÅ;ķXlcK¹ä=ē_xĆć^µć ūŪ/ ipiZ"™‚$p?¼;Ÿzē–Ēu4y¦ŸšóY¾žYdžõši|ÖrsĮļžų},J$͵C ˁ޲rčt9icė’‡Ÿ lMˆÕ.īmįČłb`C:Ó§kŌ<7įČ¤æø²°±1dgĢ##Æ@}jZ9§#é_ü.±v¶Vļ¶!8Į_§éŗf‡į}]BŃ^yHo)•ö”=²1Ķ—DK©§Ÿ6Ö=č¼ģ5čŗŽ£Ŗźž–HĆÄ#,ж;Ö°‹ łĪŪGæŌEÄņX]Łķ;H•qłVĪ‘¦]X˜ćĄ› ÖÆ•ģD„©Ųk±=¦ŠÓ\Ķsonł€8ā¾[ų¹¢xēLÓ”Õ“¶Õ4·Ė[L²}1ü©ŲĶ‘ü(Ņo~Ź&ŗ³–4e–EĮR{WŃ1Ł|€hŚxźj¹¤™Ÿ,šuıÉxV6lŒńéV®®žåŒ–ī$AÉ,j LWsŠńqq$wļrŃ źæĆQŁų~]RÜyp ē·ćUr”^Čü!ø×ļć‚85+Š9P«#}ćķšļ—ā Ÿü#Wz–1ÉvHs)2żÓł×ŅtŠóœóŅź6£Ę‘Ż+ÉöI.rqÓüöÆG½ńõņ ݽ˸ "gÉ qō­īg(Ų³”jŲ·šģÅtł&!XČbOµ}ĖąŸ xĒ~ Ö|;«čŗCłš ^ä gõ8=WŽ•2‡Te9YAń?ß¾ųþօꬠ›a9˜ž~cŪÅ|½Ø_ż§MøæŅmT„œ žĄÖDŗ¬õ}CµæŅaŗ¾c§³"n‡œĪy¬ÆŒŗrj~““Ń­¤»ø¶˜2Hƒ4xéĻ4t>tųoqvū畬¦bY7ōē§ę+é] įœ5¬Ó*2d.ÓėŚ‚¹lģy’l¬“[†°½żŽā®ĒCŌåMšŸ‡ō­K^Óuo;Ģ•H).IūR`£sźŻGĘš±MÄŗØ“Ō®T'Aņæ ūōÆ—ā„“āĀŽE˜łū¼ÉÉĪ v”;›ŖZCxoĒ ©xgXŠāœ’¤ÄŠŲ8QģkēOč/į˦µ:‚]ܝĮP8LÓ2•;öŻāźG–]͇äž=+¢šĢŗ‹j <M8¹(_©ažƒZHŅ‚ŚēC]GR²ŽDøPaĄŻŪwå]&āß xŪįēˆōOéśoöœ;š¶]­¼ŒG^1ZSE[Cż@Yü5⤲à ščGØ÷ā¾”ųqā}WQM\Ād¶›÷e$įāō?ēšéŠčeSk£ÕuO€¾Ö|O}ćŪŁÓūnā$×+—P¹/ēNéś„õ’ o·YHZh˜f%‡š+hi±ł©«N«Ŗj×7Æ<„Ӎłß„ xü+Ų|7ą‹M~ėN¼Ņf‘£Œ¬¾‡5Ÿ37=Wdz½·Ņ„ÖŚkkėb¢Žą|•½xÆN†(¼Aą†ÓķŽ{©®"1,¬pŻ1łÓMŲ—‰ųmį[LŗŌōßŪ ˆcĄA -ŪŸĀ»ßųRź’ĖÕL"cˆ˜…ĀØ~•Or.ŗųēšGĆ’JڼöčĪAŠ8•S×#×§łęŗ;K·ńZMąĻZtˆ5ĢO,¼ånÕAķ;wĆ»[i,“HÕ­ŚĪõ ™Ź‘Œߔɞußh~ÕN±my¤Ļµ¤žfķ’2jL\Ē®Üų‹Sš¼śeÖ„§Ųf—Ė—b‚Ū[ šŸćģł¤ź_ģ>+x.ń£Ö­ µÜ$Lz¾;v¬Į“zn±¦^=¼Œ×»G ?ҾmÖ`PķoHätŖ‹ŌQ¦qļhŃīGUd#M}‘ū7|F6lŽÖO•>\;[ˆˆūøÅosnCōŹęEˆyŠß0é]+ĀģEaTŠłĒöŒš,z։¦xŠ wMNŹB³4i“,epžæÆĪ»Ļ(=ÄaČņŲ”Vź¤ˆ—tß¼W?€üIcā5Ś"(&Tī+źOŠ: …ń±ńꖹŸźŠ‰dM§0ČFĒc“L錏ßų ķZÖŗ‡‰?coŽ»h3†Ō<6’¹">gIäsócėźkśR”ͤźq9ĘĘ)“ŗAĮD“±¬d}Cš³Å¶śÖ‰“xĮ/£ŹŖŸćOóš5Ėt­Ktš½Ę*“7ö–aŽųź=Ą¬u&Q?Oų+ēģJß²ķEā-7A²ŗµųEā”.½įÉĻ0¤ŽŁšn‡a<ĪŅ ė_‹S٬Œ»ŚQÓåĘīhĮ9r(˦Ÿsµž{˜N%Πٌg88lnąs]g4‘F6§ļ0ĒŌÓT嶀KzPc{;łœĘĒ×Қ’yJ±ļNÅĘF˜ņ¶«ćēģ{ÕŲ„Ę0ėĆ±ŖkC®›=ąWĘÆžĖ¾žŃŌu8µMž9®`¶””¹·.D8ź ’N?€_|+ūC|1š/Åß}³Āž$Óį¼Vć0ĪTG9ČĻŽÜ;VuāvGcÓuĖGĮĢČzā¼GǾ²ŌtmjĪuI“ĶRkuƒ*3ŠćėŠój üßŌ|āŽź:hīõ=&’Ęgµöž÷ēŲ_€’šR’Ł ßų~óĘžÓ ›7¶ģ*AĖĘ1Ū‚?*ˆng3šH¦1¤ó«G3g#ū§=*œėņHé^œÅ8™`:Ģr¹^œTRĶ:Ÿ•C°ģOoZŃ ęoP=æÓ>rŒ>lÕØŸ+ķ@IN˜50„™ƒŗoD<օGsA8‰ˆp9ēŅ©ˆŹ»r„ēŠ ‰e…nķf±bÉę ^ŖzƒśWõƒ’@ż³­>(xPų%ńw\Ņuż_C“=OĢ?é:ž–’ńļ?–FŹ8€ČœāŽˆŌ’ĀĻėé×>Ö#iuß¶’L“öŪ#žŖe'ÆÆŅ½®+Ū]:xŁžĖtAŒžB±ķ^}H1ØZK-ݾ­b«+DLsÄzKąŹæ‡ų._ģ//Ą?Ś—ÅO A7ü Ž#iu­) 'oųś¶,+ź?ŗā°‰vGóūk%ģ1ŻŪČ"V™O'ÜV^‘­]i“•ˆČŠŒzՐ}/¤xąAc¦ßHļ¬ųėŽ•×jŽÖž&Ł/‹|=%¦©28—“•'Ž}żė„DšoĆĻi{wozbŠh26“Ī}3^»ū:ųÖßLń V¹© ;idÕ‘åēźk¦’"Qč~…Ś^éŅ>Ė‘$ŠƒŽŽŗč¬üų³ŠN:ē„uS9*!‚Ä¢ā\>:+;Ķ rŃĘ%ŗZ7GŻŁäžõ‘yŠŗGƘAĒŹ(Oµ„Ž “y^Ÿ/†5It]BÓO™_l \ƒŸ”u ÖŽiż‰fŽźÜķėRŻ]¼×ŅɽDLŁź~“H"–ńćņ²N~RJÖøqhįK®ģ@ŗ$Ļz×HwØÜŲ°ļ]^›āOģ‘öi#Wˆ’ķ@+-ž”§>ł2ļóG‚:לiš®ļ%¹FōŲÓ*.Äķą}ļMÕuÉķg–qčēRƞütėXųrŽUÓßLž+Ūö’&ŁĻÆėWĶŠÖ.ē jZél ”Ÿ·?ęc²øŗ‚KV™¼ō*Žõ£rž­į øaY‘Čܘ#Į¬­7Nø°,£÷‡z|½…ģĶ-7@×5½z{Y®m£²ņ÷·šųĆzÓšŁtÖ5-卣*ø}HźēC£¹Šj:Ziņż¬˜ÉĄ®ćGÖ }=”TŽ;–^„£¦ _ćKŻ`iĘ8/y#”6ą··é\<7÷Z„½Ü"KÜa\ŗzRå-ÄÜ·“>Z[2Ŗ¹Į6|5Ņl¼r-M˜}X”Ć梜0Ņ»iĒ”ē<¼`hŚ.¹ąu³ŗŃī9$,Ą|Žb÷xÆlÓõ[ Y>×sq »Jwé]ōŁÄ·Ŗ:O‡2ńĆ]{ÄĆĄś†½kq®Xż‡Pµ·¶i’ś‘Źm<€Ēr3^ļń[ö~šĒķCū j~øÓµSāFŠņźo°ŗ\Z\Cȍ3¾¤wŲV—v±ų‰u0˜MĶYVē…õŻGś·Ü»ˆŸuö«e}o4Z£}–ņ'8xfN7¾AÆJԃÅ%ĶŽœ^!q•4`ü³)žšü+ČÆ±ż#†’©8ģĻ¾!x"][Nø³{–ŃņTu ōż+Ćō j>·iõC½V"£PtČĻZó*S=*4­©æŒĪ »;;¦UŽfٌēÖ¹Ļ[vzUōnU•Ę]į¾+c2ŒNÜzZĘ]¹lqZ³é÷ś«Śµäö։e4Ą# ¶@½ē‘‹„tiźu¾©a-•ä 42)^N6“Š×‰é? ~ i~"³Ņ-|?>§ą»ėõµMD91Z»ŒāV=MŸCå3œ ö~Ńž#]gįߌuÆ ĢĻ£^yÅ59@ĖĘGn„mkWŠkŽŸWŗ»¾’„šŻĀĘŖų)ƒŽü}ėxÉģ|M)+Żß|_ygcd“ÄzļĻŽŲAćśWģģķń¢ĻāēĆĖ ź“„¾­f  ćoŚ#ü?§µvShś<{nsæžų#Tšķ­ö‰nś7Žķ§uYT—q·?7Š’:łOĄ;ńgĆOų‡KÖc–ÕagĮ!“}ėœ~‚·D{jĶr³ė„¶½Õ“{?xbņg¶•C“°6 0uæĻzū‡Eų”©xóö3Ņu­Réµ_xčaxYļģł†Õl÷āDēżƒšč„UÜųn2Ź•Z0©ć(żĶŪõ9†/ ¾MnŽĘŻ­l.•nłĆ!öō5öǃž=ė>!¾šn™£jŚ~‘6—z’C$ɽ^#<ń܏|WG9ų’p“r”Ņŗ_ä|Ż’Ęų+'†|SąOŚ“ĆWwCĆŚ Ńµį- ¤sŪ‡!±žüWą74“Ö|)©§“ķā DčTn^T÷ēśŠó«Ģż?čóšżs†))+J›”ŹMž§_šóW¶“MÓ5¤ "ļVŻž:ƒłō/ų÷þ Õģn/®¬õ)Ū“ $¾sņōÆ:sgīŌ©£ēßüUÕ5­CP‹AKE|¢H|wÆ.“D’āź×ŪĖžY½sNÆC²4 ­:ĪHķŚ6ÜT¬;°÷®‡įŽæ¬|4‡Åu“I>©L pL¹He 䯿ZÅČŽµ7"…J\ŻĻ7o!“~1œŸ’UzļĀ VĪĖĘz™®i6Z‡…5kMOĪ,q²‘æš8©ŒNŗR±Ķk^Š<-ńÄ^‹wmw„Ś^:ŁlHD$ü ŸóŅ»©ō=R:ß[–ÅąŅęÅÄ|¬Ćśņ+ѝF¬”x¦ģūž’«”VŅAøK4LÓ]—3CĘ\ˆĒoJéģrW‘§ā}~ÖĆB™.[ydÉŗńÖ¼m?ģ{?‹-¤/± §rG·“]ĻQŸZAćķI4]I –+ ČU‘‡+•9?PjOŠŸ µļŠŌ|Cįūxn®t»3<ÅHSå(ōļj"ŗ4ńžĪjMč|įEžs ČūĪP”9ŚA9ÆŅ-®M‚GRÄēö®øOCģ0Õ.vš•^_Ziś.©&RŌ9·‰Ļg'ssŽ+»²E϶ö§T—R`L¤(aƒZ’iQCW)8.I;z®z•+RĒ«źśd0Ų]ŽÅó’ēØó—ÄłÅ’ŠćšĪ—¾ēO+‹žs׊å>o[Ŗ=Ėąfµ£ü7ń”M$v±Ž•¶»|…g_^•ś­įŪ)īŹĶ¦³KgĮ ‡!—±®Ś(ų ź’Nvu>"ŅlR8n®#O“·ÜūםŽiöwpIÅ,F3Ü×£ ‰Ź¤Ö‡xƒĆz†™<_¹[u Ž>•Гńoˆ5K+=)õ8^iB:¦i?ļG 4Hś,Ź­­Nž²”$—«LüŒųŻćĶSā§ķńĒāʧ1zĪæ'ŁŪqcöX¾Dī0µÓųkV1Ēó䏆ä7ŌW›ˆµĻO‡rĻ©ąØįWü»Œc÷$æC āāéĆĮš–­l·Ŗń”ņ—Æ^? öŲkąļĄļŚGX¼Šu(.tÅnd·Q Q0 pG<’Zįt9™ōSĢ• RŸT®`|rżˆž0ųāĪ©”xnÓLÖü=<”ģe’]£ž6’:s^3ā߆¾<ų[¬ĘŽŌt¹Ņ1)™#2Ā ÷ŽpVĀ4}Sįń4ć(æ‰\ńˆz-Žw¤ųJ{szā9‘ŒŽąv'üō«Śv¹ióC穽Ę6īė^uH4z5TzQĖ9g™”łĒÖ½HԚ;8Y†ö#ō§ ±;ż;eÄHwģ|gėWš‰,Ģ„¶‚N;ÖŅhµ& “Ō†Æ¬źņ:É—'—··qķ]ż‹"yD“×Ö±”ng*…RXLŅ[Ś#ڳmåxŹ©sĒĶJģƒĘiiztŽSż„Łū¤œ#Pérݬ 3øņńĄļZF=¹ŅXŹYÕ\ą0@Ē5ÉüEš~©Ø_ųgʞŌSIÖtĖ€Æ+1łū~’õÖōŁĆV›Ųū;ąGķ?s”|1ų‘ąo“z†·t¾E“‘ŒG2Ä‚zņkåCÓD®›CņŒu<ń[Jg" Ól½s8žēšÖšĒŒ¼K”ų[[šlWĻsį‹ÖĢ–Ó|ŽY?)ķYJ©ŻN.Ć!….tł¬š²ąƒŠć4h=Z[I!‰øĻe5—9ŠĪĀ6Q)„m|gü*kėéķ£c™ q©pÉrLӌŽDŒ—YÓļ”i2IŖßßLä<$ķLzf#å±I£wP±ƒM·!bŒłOBGZłsĆæ |eŒõm[[מ’ĆW2³@2wDIČō#ރŠ3•“:/č~!Ńt» ł­®¹v’„‡į_žŽ'š‡ž Ż5æģ“I×Pl]NŽ,O ĆgøļėĶrVūßāéÕý}ōyˆü!ńSĄP‰ģ“ūƉžƒ?ép)YŪ„tŽńĮļ :Ę]ųCÄO…h5! “ŒnžʹŌś5Õ“>­’óRųg§Ų róOń‡ ż“ĀP3ŒdÆŌW ŪCm¬hę÷Ohg¶š2čŹAb“H瓱ä¾Ņ>ŻØĻ`XÜX®qĘj¶«¦ 2žHę1Ó”ćŌøĻ”ZāŃÖU„Ŗ{cœWęĒķo⇭Mø‚8ć–R ņ8Ā’:Ꙅ·&š”oP›—Ūņž•ÕČu {…UrœŠē¶¦RvZÕ³·HÕ8ϦtģĄI('¢ńڽܲŸ½v1ż+3˜ŅČi`žÕY§ņŠmž-ÖŒŠ›iƒd±žsV”Š&»æKÓ|M R­ƽ}e3üā­†õœŚ‡u[{I$ ÄÄä/~kbó^±¶’ī&Y„l„ xśÖ‡›V=NŁĒØÜÉ<®mīdg£b“ķ¢IŽ8åp­œt ę;84vŅH¹ø*m åXž†¹{½zŽK¤·ó@‡=i…Œ wģńÜ9†Dž#÷XW$śH×Ό¾tC•fćŌSQī#)ķ§Óeq+2Žƒ„L²‰äF!S?„SµŒęśÖń3O ¬<®Į0O­vo§Ļ¢y°Ž.tbF1PrÉźswŗ¬ó#EøĢĄdVtŸ=ŪĮ¦Ž8ÉLöö­#"lS×mü÷"ŖG\z×;HķåĢ®ž":Vˆ™FęŌ"Y Q¢3!Ļįė]\ŗ"jvčĀib;ÕĮĘ1[˜Kc¦šŪIkē™1q"ōrj?xŪH|6‘\Ŗ^:‘$Xēń7čŒlpžՑl^G-1#®*½ÜóĻ,‘‰|äźsM-D?I·;ŖØļĻSV®RęņAlT})šS>hż¤/ŠčZ~§ł·2|³~SĪsøõƕ“ \źöח‘©’ŚŻŌLå†S=2:ö®i=ØlszĢQjw:0¼Öķ“‘ČlśVd~OkŪŚß}†źšsŌĄĻ}+š<ŸIų‡¬}§NŠ–ŹęūK·/—;3åz“ŒžkźßY]½³-óA42Ø<Žō³<ŪÅ6ŗJŽLĖi`6æķ[ōæE“e¦éiv¤ČZUcŸ­or9=‹„vw²^Gj!ef?:Œ.>•ó’‹“§Ón@†<€NHļL\Ģč>x¦;Yī]d….`BŪ_§Ņ>¼×µ jźidµ6kƒ’@ō„Ģ<ÄV3\̆ —“łĒ(} k٬¶Æf.zėPePōĖ=5$µw.É/q÷«Np²Z¤Hy c” Ģč4-*(­£ŅFĶ€1ަ½KR±‚Ć@†ęėJ-Oś©qŸė@ ¬_C3É"ܫŸØU=„ahŚDŗ„·3ÄjįrAźkøŅéĆMf1ÉØ>]ަ²Śżd™”U½@žUœö¼½‚ņž?1æzž¦½"ęHÆ4Hį³%.€|œ¼šÄg +O¼É;șe v†>ā¾®ųmö›m ¶Ś^©x±ļxĖō=jć+h5}ń4ŗ6¹ā=r÷\ŃĢW|ŠīēhćŒŅø]dyŻl.³ĢrŒ ä~ŌӚČūHńgˆ#³Óu^„į”ąø]«!?Jõķā“ĒØčńųvĪŠm ŅČI`GāŻXž¹®CRҼ»…hˌœŽ•jhĘ[›ši؇Ķfõķ\¶£vVąX»ŚIĒ÷OTI’i CģrŚÉg"yø •žž½E,Ūȑœē$’õĶH–ü¬‹‡RäąsÖ¶`Į ņŸŸŠŠŒ^옠I tĘqZPŚH°nQ&ĘY³X͚F%pÆlķ<‡*§•žõv¾\jb{xö–8eźĒ§ćY{AŖgg¬xkI”łØ ¼ s’z׈xĒF»ŃuKm>įä ó Ę7ƒėķĶ».&¾›Ŗß^éÉg-Ą‰FPłgåā½?Āŗ3Ū[äņß :’žµäbj6wR‡qž#Ōn“;‹I¬måXƒ~ Uü{WŗŪźZ†µ„Į­iöq čD^kēj·=}Ž+ĘØ®uĀ6Q¶[Ūų®Ģ?æc’AźO_­f]ų§BŠćhu;1#”,2pŁķųV”(96|LųÆwƲŁé-o¢Ų&w œu#¹ƒGų-¤Śx~Ī4ł¾Ażč9Ī3ų×[šÓĄĮöڦ«ØZ\x‡Åė™zfB­įō­ ™”@ńw‡ü+ćæŲŚėV—Ś~ %I¶#”qœē’Æ^Lln>Ń&ƒ£G%ƒ*ŠąĒĄķŠéŒnb{ͧtķM‹F¶Št’ķØ-Ē™#‚Ķ+ üĄžŸ‡µaŽiŗ¾’ ?|EńJže­¼rāXxPć?wüāŗa6jxĻāOŽ|Qm§hV1Ł.™ml©Į°øQž?»Ž¾gŗÕüįbėTŅtķCÄ^$dŻ$3¾V±Šņ¾ÜWM:} äĻ#ń7şŚx{WÖ¾>Iqąa$²:@ƒ(B’F8ćŁąÆŁöŔYFŌ$ˆęPF0sŪé]ŌØœņ‰ųåāėŽ-½¹Ö|S}{­ź’»6%²Ē“’‚¹–Ÿ(T'—žp;éä²$F˜*ylɹŗœuØą“ D^ńjH–Ā;;åV=żsJˆ[å ɞśŌĪY¾ö]Ģ®„¦0yźÕÆ"UfĖ|c8ē4ŒÉ^ŏ–Y~n‡Ž·tż*ic8lg9ĒjNEĮju–z ͤ–Ņ4 “ŒW© Æ½’gæŲgāOĒMD„†ßAššŖM=ģļ²FN„BśbøźU;éC¹ś×š{į?ĀĻ€>ƒ¼3o­xĢLѽśFŹĒB éÜóė^ćć+“XtsÄ-]SSøˆmārD'ū¬ƒ”āø¹®īuFŸsŽŌ5?‹>:ӛE½æM#ĄČ¢)7BŹĮ»gó§Yh~³i¬“(¢¹ž8€vßĻ©ļŲõ­”{$y&§ņźyņ\&O—b£ŁÅcĻi(™`,mUŗHĆje"”Ä š…Åę²ŗ€žģÉó—ēpÄ„hßźŗ§!ø›ÅšŌ­įč¢#2ߨä{W<¤kģŠžcɧ¢xvē@ƒ÷änŚ;6k=gµÓķü­RiµXŻĒĪā ©æA:vŲø,īo-%Ō5Ż^ŪĆ: ¾ĄŽvś×Źž9ż¤SM¹Ōt_„PŪj7j 3ߢüģs؟»ž:zTÉč]:GĻvžjŃėž:ÖÆīu9_~&rč$=±Š~ķųoh®—`ŰeŪ’žąWźō:”-©ōķŸĀ­LXŲŽI¦I§Z“a‘¤Ė,ŸJ÷Ÿ‡ś&‹”X ōĖh5¹Gycīž5‡33“=Eųu­_{Łō’:ܹåĘU@ģ+Ó|-¦xgE¼‘u[W|Ą~µ±Ė6vŽ(׬՞m=„°Ą˜d|V_…µ“ŸT&Kˁ’ŹĒ$ńéłÕÅĢķÆõ="_³:Ol»ŽaZŲÓµY­¢h-di vģx5Óõ—C+ÄŗŗŚŲĢ„wVČēÕä¶w2Ė~ņ[M3ŗį‚õփ=–×ZŲĒo©Z“¬0v·L×āė֟cYYŪĄ‘0!Xp„g-óŪmCZ@ Ä6–źÄ±X†r~‚ŗ ©sh.aYv1Ąlqšo`9KľIāyf›9%<ź4‰ŠīGŠ23¼ Œ{ŌĘģgQ§µˆf77‹wiŃą gЊ©uāŪ]“B&ó†×Ā_žµÕ™ŃNó{Ø]OÆßM>§øCmA饭č÷ŗ†±¦Ŗa§²åfĘr>•ō§ŒO¬ų2ŪKÖļŹńnm÷ ‡®±k@š†™ØźĮnnl­nQŅIóČĒ!qėĄ­ć"ZeŸYiś'…&““SA‡˜æLśg¦*æĄ/'Ńngš¬P^ßé“[¼QK³{†Ē'?Żē”ȟg„™‹ć?†ž$»Õ5]RĖB×/t‰bó aIDrNp{f»?‡žÕ|+įmNßQšŅićģä’ĖĮĀÆÓ<Ö$ΠƜ¾*FEŽ%…xŲFyų®ćĆŗ²}ŠG(—płd”?už£Ņ„ģCņ<Ę:]āėöZ–j¶ŗ\ĮŅxĄĄFģV„³šī©”čŌ®¢A%AĄ¬łĖ[›¾"š“š…źµŚ*Ƭ͂ç_ėWü/g/‡!·E¶yį]ŪYHŚH÷£™ģTQä_5¹õ§·ÕuĖ&Ib—d °‚§éXhŅZĒc©ß¬éoń•,§o=?šŃ+huÅh~üÓžĒįŪ[ ż>Ęų\0—y9‘³Šdr=+Ėž'xUŃu۟“}šk4Ģ;‰)ø‚i™ĻsĻtk;Ō xUŁPœ/%š Ą®“Ćž)µ°’śö8ކ-Ł$•@$e*g;Jē‹ųóÄ~9Ō¼]¦hV“}‡MABpżxcÓŅ»=:O üÓµ©~"[Ķu%ż±ņd÷łRœįˆō­ā³Ń4 Aøųc„_xM żŻÉcn±ŒēżžzžžµźŸ¼?Ŗ7ŒG‡¼]§¾:[,ÖČĄī–Lņ3ӎ?:Ū”Ī]™ģ’m.üć½ĀćPŠ >śŠJ¹}ĮXcüOå^qżÆöö’2±y|óŒŸĘ°q¹Qņ>hń—‚¬,õĖ™•1 ų••x\śļšļ<Ö^ņļ,Ś8r€Ž„{TØw7>€·×ćų«g„x/SŅķŒšJ/c@'ž¾Õé—? ­üc5åÜēPÓ¶–ić­Ž01ŽE²2”NA[;«©š˜žž&nµŃüZ³Ņõ?†¦čŚäšFŖĪKŻźž)_ŁŁłŗE%¦s÷ՆėŽj£+—ŹĻBųĆšķ¾•ŗ·ŠI4›–٤ ĀŻĮ÷ÉÆš.¤|1©ź3ż¢āé%”12¶JÆ÷G°ę—q=¤ļ5ķ2ęÖŃÉ*‘øg·jēž#ųšś÷į„΃i¬Ėa¦ß±‚Q9Ęöɬƒ›±š]¦™«é©é–ŗN£ŖAhA’ā;s²DĒßē“^y®Ū”oL »ĮĒ­Tw*2<²ścøweŻßƒŚ«éŽ"½Ņ&“լƧ±šŽQ#yI¹˜Čę·±§9śÅšāE|5mŖEtt›c˱–aڽēJ|Ā¤ćœzʤG&;Y°Šś²™×ģ38WČÜ6ō'~KüTš-÷ų‰ā’€Ÿ4ƈ’};ĘśąXKFŁGł—o|Œ¹Æļēą—Å ö’ų šė柇īĶžÆ§Ā×Ji†ą.7ü0ü+;^ČźQ=;Āž'}Ä;D”•'X¤ĮĘćłā¾××4ču[!*āBr‘Ük)wņOž ³ū&·ķyūxŪÚUÄ’<­Æųq”Œ<×X; üĢw.юvuĘłīxĖN u¼‘¬H •dM§Ī†ÜEMrŌ•–ö§čæ¤`y¬źāRÄ|½ź¹uełÉEÉč:šķ9*Œū5Ņł 8Œyœ… ÷ü©ņŀ„6«/'ü*ć£Œ¢%Ż#d÷ć„äA ¼ø¬b†@„1'œg½O E²#.ÜGqļM­,uÅõ/ĒpdŠU>[©Œ’3Įļ_Ōü‘ūt[ųSRń'ģ?ńZke¾‘ÆüóJΆEÉc÷r@`½>ž95ō; Ļģ>žY®#†IĒr¤¤éčƃ^o­Z„ĢŅ鯁«Į<`×H–|™ńćĆ?Ł>Ņ>"hqIˆōļ/QÄ}¦ĀC‚Ģ:¼žCÖæ>>6|?ѼW¢k¾hEõŌ2j:[°ÉÉBYséŪźsŃGńńūQü—įÅ­jĆ Rżķ§E—$2Æ·złžxR2c„«ŒõĶvŅ•ö9Ŗ¢„ė$;b+Ą<š‡ ) “ø8ė]'ō h¼·C“<÷§¤±ņ2x'¬er#>ćŅ5‘‹…Ē„1UŅFrK'ėTh[£±fßŲԊˆŹØä XPn\‚=Ū6øĻ^õģ³ǽköZųļąĻŽŚ41ŻŚŲø±Õģœ`^YJŪd\ŽąƒŲŠ™Ņ?ŃSö|ų·įü.ų]ńcĮŽ!žŠ·m67¾ 0˜Żéņcc3—÷sŌcÆæōŪ%hVĘįŅīÖT[‹WõdbøŖDź‰Ų[F‘E÷pÄÕńWķńū1ißµ§ģēć/…‚ÓL—Ę–±’jųnkø÷*ŽF žĮ×(qفķ\RÓCcüŚ>(ü<Õ~|Gń/ƒµRŲE{*Ļ‚>Ķ8$xƒ^Šķµ?Ļ$msŁQ!żńÓ>õ ńĶv[‰5›øo„–I2ÅĮ2{žuČZjÆ£ėÖD“·zäó®šZ?Gžx²-_H²–YŁīö…|œqĶ}Gįū…¹PķŒ~µÕLåØĶo·Y¬w0,‘É2’ō÷5Ę5óE|QqœgÖ“1;hWVÖó$g=”ŖwQl“sŖ:’RŸ_…§·‚9s€HčkУծ퓓%Ę\©<äw Ø³ĀµUµčnācµ`(>µŃĻje’(‹żķ½ ĒQ£[yxŒĪqŽqķ]†½¦xrēĀ·7L«oŖĮ 9Ļ2)ķųPhŃĄ„nlg pTąö5Æ6‡Ø_y‘Ćn×*T¶Ōźž—3[iéf¬Źńp”#üā”$00—<Äg«§ųQ¹Ńļ4{GIRtŚ~\ćƒ]G€|?>ōIcSsĻĢF7 ‰Śų¾ŹļNµQulŠ#|ɟā¼WÖÖŪTÓg³øxĢŗM§ļšxaéČü©“l{T‰­YĒw$QĘģ9 s“ė\ܖV±ŻI Č7Œž{SH:a,5æ1ä.ĆŪĀ¹Ču›­+Q¹æ„,ŲAŽTU5є–§Øi÷ĆZÓ¾ŅźbFM̌rAŖ®‹q§j³%õž¢bkw1˜˜`;Č#š§ĖŌŻ; £ųIļ¼Mpu¦ū³oĮ9ņĘž„ž5»/†ō­śēģ²+¢1ÜŻ½flĪ;Um.(å’kĪF:\õ¾Æ~ŒÆ°šO­g1Ž°Ž õ6–įĘ%lČ}MvZʗ¤¦—$֗¬±Ź˜?5f€ą#6ńŽĀÓ·Čäg§ć(ŽŚ×J“aŁ*ī\ćś½®™.ųϘ¬¹#ŸJŪŌ--ZŻ l‚^˜ĒZ—&iN&NŸnÖw(łčr }£k?gӗŹq¹±øūzT›ņ3BēŖŗ~›zCD÷¬˜KqšĘšŠ€Awzc>%IKFB „sĒ?…ÅXš½kXń=γ«Å~÷&¹vE1CZŗ“-цK™ĄlćHõ×M9,ć„[„eēwv®nH7ĢŅŹĘ)"–¦­žŸjJopŒFz÷¬_čfėAÖ§“d[Č”ĪĆɓŠҹ*-ˆčĻ=ųį];ĒŚåχµ —Ša˜LŽk1"©ź õ•%äš)žKĀ©iĆ[łŸĀŲr ē޼ŠČ’h² ZX:_į_’:}NŅuŸxjv’ū7@–ž»øŪøAn_ńÅ{ßķSšFųAq |Oų;ńĆŚģ×Kń²°yÜB“ž’ʹU^y¬”Vœ[R½ßk.¾»j>*¾Ōē“U֖ŽZSūß-@VnųVt0tv¶ņѰpOLV2±ķRÄßC²“Õ ÖįŸ…?„[·¼EŽw zĀhÖU…ām#]²šÓRTv·š3$8ōÉĢńfÖ¾¶ŌŁ’0w)ü+ÄņkŌGw®Ä÷ė†.™ģ;Wišę_µ|IŃl"µ[¤ó|Čd‚Ż0ŠŃcę1؃õ3Ćó,×jˆ4#o*Üąž5źŚĪ·aāė{K?k¤ŒB’··OĘ»)ž\+^IžGŖčśŽ‘<,ÆqfN±3P_i¦•§G«E(wS‡Lr§Ö»a‡ŃPŒ]™ōߥ/ŚO]šĶÆŠn4ź÷HmŒĀ¹ø·8Ü Ęs‚Žõż|#ųÆąĻŽšß‹ü!gż“į·‘‡˜¶įV;¼bX]xĒSõĶt[”ü‡ō£įlEŃĪh·ČŸ$—kŻÅśnŸ»ŸŹ_üoą>©ū<~Ż8'MŠĆĮž4µ Ńę·d3¾vĢøyƒduļüB¾lŠc4$|ØéšąÄFĒōļ‚łāĢø[‹[ņ(»÷ƒpŒIõāŗ¶KtT}ŖT+ŵż4E§ź–·–qČ'£Q×Ė9#ņÆæcõH³ē;C=•ŁÓ®Rbźæ#0ᇹõ®ÖĘ]Ę1#vĒJā=<µ=/Āo£Å&¤šĄøZŻ³ é(éŸjė4™Q&EgXĻJØ£½»{ć?Ė”jWZ]Š[`óD>éQ\õ­ģWd1Ug#łÕ“qŌFäQ£)TQ¹yę½ĀŽ7Õ¼9ę™Ē.•u…ø·t Ž3מćŌsJ)ny˜Ģ7“£*}ĪæĒ|ńKA·¼IƒP×$ćeŪä¶:}½kóŗļA¾š‡ˆµ? kö’ŚÜڶ6;nó?xõŃ-®~58ŗueMō/Įc‘t÷6^`µn@sĒ?ʽsĄŽ>Õžx—G×lnnŅF\B9VVčĻcNŌöšr?V¾üJš‡Å[ōÖd“ń=ŗļ09ș=S߯Cö€ųmŒ¼7¦ėÖ"Źéī!†r¼ĖŁ[Ō`bŗ!#ččŌŗŌą>^k„é7ģ¶SN„®l'ūƐrɟ©?½zļĮŸĆįėÆųvņ+©<#Æ@Ö÷öĀO”æšHńq]15«N3‹LɚŽļC[˜ øœ@ćęūĄt&½ßömšūÅ45֛§Ū_“ŚÆ%ŪmŲĄ“ųVšz%Åīž-Äb„ö!)ą)択ˆüUū\ØÜą©n½8üCüEš7ŠeæŚÅß~%,×M”ݘķŪaEÖ¬ e$\ö)€}+ M-.5}8ŽU±ųÜ¢oI~ņ=•šŒ—«ŗ"?üNšUĒ„õųĮ?šŁMuö“tēēē!OākÄną{Ż“:łĢ¹±Éڼбg÷ķLm½”y+·žłķ] ¤b4S kŠKSŌ„l†4VŠ]J‚Ū”^ÆįhēĄ^*šgˆtuœĖ2\é÷q¾ ;ž{UF%z,śT6:½ž±h.–h A.Hh_9~XükŃ>ŚEØxĶō›ß]xŽŚXŠĘē|MĻ́×é[Eja:Ŗ ¹=ĒÆh> ń“Z®…”źZTr*¦ Ņ[2"J8Ļ=3[Ž:ŌµOŪųHˆ%Ņ#¹j åÕńŲśW]iC‘RƒŗfŽ•y%ķ“zL„į•ˆčOk¬ńWƒĻ…®£“{˜ļRH’h„īø#õ#kėC$ ®X€8+ķĄüėOžĘIŁ“yށāĻ h> ųq«Kr·®’f“v1Ļ uéŪŚæ[’ą›ßž ükšö„.„įķ_HŅ’°.dk»čJ„ź6cO,’9é[aØ9ĶDü’Ä^$Ćå=\Ć+(ƽö^gṄjŽų—ć;9,£“±‡R¹·L2’²œ~Uö&‡gkØųSO[Ė_ʅ®ol~“”^§ėxŖtćR;4™ĀųƒII K†O*ņZ9U>•“ ž|Ķå°R;õJ„D‘ŪxwDŸVqä(ڽ{f“ĘMØųic·IąTÉb3·5„åÜš1Ų•²><›Åśzx‰.uv/cēaż†z ßńŠžØ[ļ߽ƻ…P»@ŪÖ°ę>b¾&ē¢kšj׏/Lr`OĖ¦æ^e_Śvś'‹¦%žÕsÖ vŠŖxŲŖJQhśInō_‰.4ķF9[Œō"›©ų4i×MāF*¬@W§ šv<’³9ļi·Z†Šö°Ą³J¤r>•łĻń²v„Žxq§šŚā7łÄnQńŻNN£ń¬ŖŌ>Ė.’jČłFoŃĀ8Qč+ŠōØc·Œ'n+É«RēŃĘ>퉼Uڟ„u]6Ęßķ—d "Aź ’yÆģŁńzėąēÅM?ā6ƒ%¬z…¬owk!ąó†žuTŖ6:.Ēī_‚ž)x{ö†·Õ|Wg¬Y’m«+’f+‚ź1εvrxvĆZe{ˆbøuŒG øeæŻ!³]r‚’>k YŠ—,4Hüōż±’g?[ŚŚkžŠF…¬ ßµCB"ž<|Ä}H5ł“cąĻ Śx䦮ņh‰v|±#” c‚CÉǽyX¬2Zu—ęsœSeBŹM&īęÄĖ ā#YćŌVœ[5Œ;į•›'½yR“>ŠKźĘYų£ū6EH/ĖåSyݟP+Š\‹Qӝ>yC8 Å#³’ēˆ>ŸØh?m»‚Ņc1}Į‹=k¶Š5;[˜¢ĪØģ¹9ź # ”Ķ+¶Hē $Č<+BĻOūIVĒ™ĮÉō Å»hGćV0ŚŪXČŃī%$ĄäńŒVVžŽ\ÆßĒoZhøČźķ£/ČŗKėSs„ŻF W#5Q•¤xž” „ÕŠˆ2¶pŁVĆ\ģ%Ėž÷Ó49Ź"ŁæœĖ,僓ĒŃG¢–±Ø.•³¬ł‰r\q\Ž»„I¦]-ōn^9ˆ'ņĢŠ‡&¶5<7yhāé.Ķq·ä9ū¦ŗc-«Ūj-qÆ0³Ÿfßļl?żzhó1lü϶¹ }?ČĢęāPAž\ׯ?³Ī¹i£ųƒCwxÖlˆĮsĄW]4|­zöv=ŪĒ—–ö~ x£$nxÜy>ā¶< ńTšĘ©m{¤ß+"ü³EŒ‡±®Ų;ü¼Ś#Šž*ųĒH¾Ń¬’±½¼—‹›˜Ē—żąæõÆDżŒüy|OŖhŚūĮ’½ģ&8‡ńBēøü@żk¶œĻ5ĖčNŪ£ōWRЬ¼GˤĖČ8ćā¾Xń„o“=Mn¬-Ė[~Ń’iĀ»Ļʱ7Ö2Ż>*ŸJ±ū„ŃŁ0ö7{ר|;ń0IšŚāDXݱó”łĻL÷)äav‘U×óĶaŪł7 < Ź»±ŒVéšu³)ųÆJŠóĆz„r[‰Ź'˜09zWČ…¾ƒØŲJ³éŠ\3–B»YO½sĪGÜpę&T_īŻŽRŽį<*ļ&—&ų]B¼2 ŹҾZń_ĆĻųĆĒ.ž*š%ĶĶ½ģ…“øŹ8`Fq\ņ?XĄfmė-ĪæVżœ'šęuĻ€ænµ;“ĻøšÆˆ‘·Æū !ž!ÉĒóÆ.Ńho|,Ō†‹ć‡zö“Ń}ŲGšŒ¤Œ•#ŌĒŽ§˜õć[Cü&ń‡|e«Žk~Öō½A¢¶wš8īĢ…s’O9•Žx’ŅĖX·ŸX²¾±”]VAøēŪ­E’[œ®‰—}Øh¶šę»cį}.[Ø”žžćż]¢³mŽÜŽ™ĻZų öŻų[wšćö‹µÓ­ü{įßhré¢Xo“ŁØSČWP͆ć=yVrZ3ÅŚ¢…ž©ėÓKiźļ§£<£AšvEfa€}+ŌtkUŠSöʔĆŲÖ)jiķ/”ÜŲʄ™#*UFŃÅh KøO°•'=;{WŠåźŹēšļŅė6RĘį0Iü”æš&—žŲuŚ}ɖ“ˆ8ĻqڶōŸķK7hdF‘;5}3ųŹ£čWÖl.漣W#ąnćØÅcĆØŖÜ„«(GkSϙѶ.¢>bŗ¬ZjśŽö·śĶ•Ž¢‘æŻ„į°xō‡=̓ے­GÉܝx@x£"؁ęi€ē$ņ~µŁhZµƒ²Ü11ł°j,*Žź]ŚjXźQŗĘÅp}k&8¼ÉT€Ć$ē§Ņ¢HmrĮcöß2ŽĆ<’9ükŅt{WæICT;&3ĪzV ŲEJżµ+˜ćŠĘ8™¤?2¦µj\Zźv–öÓ '… • Š"īk+ŪĶ9md{«t–Iõ=×5įśž«*ŹŃĆŬLŪCŒż 2Ϧ~i¶"šĢ ī©qulO›ĄpIēµz ‹&©Gqq£.ÜwĶe=Ąó_é²ė7źB&TcåÜčE`馜PŹRłšč@ŻŠ›} -BžÄ:Kgg©Ī[ֳNJΤę;Ūh­¤FŲ­œoQŽ·!kĖÓ6­ŪOm4Źqå±ĪG©®UKq}"ŖG2‚Wųh"Ē4ažg˜¼A ŌQ*F\o'ƒ»µH½†,ylČŻTƒ÷~•Åė‘ĮnĶ/•Ķ#dø±”yoē²øć‡9Ē9śÕų{Ē:<~!Ö~ ŤėFw#ģqĘY|£ž6c#’ÕV©˜ßƒ|Dś„¬Ųé1č>ŽB#O,Ē’” tÆQš¶»uØx‚ļAÓtŲZTUSwøłžć„l£ŃŹ]ÄM>y±{ʼŒ-£B²īŽ~n„ÖWƒ§Ō.§¹>!·›O€»Hł1ŽśÖŃZŹ] 5Ø­l5'K±µń¢Ä“{—÷Ń·${g§5åž.ŅōßčvńųĘFŽŃ˜,–Üm™IŻ=3[Ā$£“æ×µ-:ĖES»Ņ<5XŒ·Rœ"Ęēn½=ÉÆ…j_Ū÷įĄy„Ń|kaāß„¾āŚO1Qśe®ź1)ö?žO‹“gÅÆŒž"ŌõÆųŠīęŚffK4¬hsĮĒŠ×…Ļsö…g(„šAī×|,Œ„$Š­ Ź–ź*¬ŪerT’;ūÓnūŅ}HDQ»Ŗ‡F"§U'$. 8ĄķPs¹w&··"*ę=ŁQķS%¹wDU!:géHĘORÄśqO.\÷÷­++)XƒlėŌń@’:Hō.»’Pģ9ą śąwģÓńsćö„g¢ü5š-ÜV„?ҵVÜzįgRGe+Æ’ ?a?„’¤ŠüMń:įµßˆ–’¹]'x’Œr1’ėöƳąĆžoüSe„ü ßomby‹Ū9ėž}k‚”ŁN]YĖŚüEžŽ½¹š_¼7c&žŪ¦kłWdŃ”Ī0qÉ V—‡ģü5š«V_ÜČŽ(ÖĘZę“óa„soė8ØågJjĒ wń&ųōĻw¤\i^šRg‚4ņŅ4ĻŽN>Õ.‘mįū=vśÓĄV·¾uÄŪ rX«t’õŌ²Œ9ć·ÓüF×zōP13·-·ž{Šå|[Ŗ[Jņ;wµ²vވNvgް”ÉR<{Pq$Žl±““cjœdĀŗŪMĮZ‡„®ī¼]­I¦ź—j „ćŒœóŸJÉĢ®mlsVZ¾„bŗw‡­æ²tõR’ČČŹdQ܏OšÆ(ń7Ē/|4¹Y4+?]ń¢0`øMźż~oaŸZÄ3å?ėŽ8ų±«ĶsāmU¾ĪeóšÖ̘āÉõė¶š÷ĆŲp–škCƒŗIA7×½D儎ˆČśĮ? 'ń ͽµ…”lŹ7•† g½}gš{įw‚“¹…Ö¾nžõe/° xÉĆÉąq\®%9FxOÓµ«fc‚ņPmĄUé€? ƒĀ_ ­m,a¼·Åd·–.LVŃ„Šē“g¤XųbÖ-9å‚Frźr®@õĒ ļ^9©O„ØĶr-]ņĄ±įµS¦aŹś•õ+In¬JÅĀH'iž/zł÷]±ńʗ¬ĶØi²Ś[r< `{°nüv¢1-$“f‚õ=F ęŽ÷WÕ„æē÷w2œž”z~"¾øšž„¬M„1»2Å:ÆĶ‚ĖŠŚ)­ĢZŌŃ×µ ©t¹ä•œ!‘ҼÆĆŸ<1oØG¦]ėšd®”]šdaü#Ž“°¬zŌŚ”ø€Ļžp#Ø5ÄßM%Ä2Jovcœžj\FĢx-n®RīV¾& ›€'jé<1©ėóiņhŪÄśj|ė“ónļŸČS°¬sÜז×Ę)!ži³ş­vś5†©äuŽĘ›ˆ‘pTQb“±›› \ŸģÉ%ø§Īp>•ēšļ‡.ģõ¹uIīļQ€Rˆ\ģ^¼ųŃs²›č~j>#Óōū$’ŽŁī„TP#@2OzQć‹Ū8āó|ČķqŸ™¾T’ śĀLæaā?ķPe…ć¾M§ ­Oµd7ˆµ&Õ –D6n$ ²śS.6ź{?‡ģ¼7āøŪ@ń¤žE•ŅÆl€;ćėķY~Õüū4|k¶šįŽDöÄÉ·00O½+™l~†é~0š”ž’ KŲ“Ā×Q“ØUäp}zöƋO6į;ę]fł•¦}°—°$żß„tŅxćX!ÓÆV2„pSŖ÷ ˜Ć¹OWøæŸÉŌL†4Q€B=qųV֛®išŽĻ.”}C¤£°P95<ˆµLĢŅ<7&øF«k4ķjČv©9Ü;6:×­xĮzä÷‘Ś]^%ř%‘ä]‹q€ƚ‹I[S‡ųē%–‡¬xWĀŚę’·śž'Ąä®GxÆeńV—ąļx>m/BŅ4·LfP7BĖ“ŒŽzž”ĖrŠā4_гü*Ō-­.£[’ $ÉrĪ£ųA’=kŠų—ńŸ_ų—āÓwg¤O„čÓāA 99”4M•4ĖĖ­2Żd“·k[Ē”erAžfŸį›‰®o/3ż”°žń¹Œžn“ģܳ–jdd…ŗØĻéXæüsā6ł”]8±•V:ēҶ¦ĄĘż–’¶4ÆD“Ķ%ʃ¹Œš£’`›# ķŠń_“¾Õ<+Økz>¦ZĖå“ašįtĄ³Ÿ^k~s½lxēķEyį_ųŖŹóM»µH­‹ XŲ<`ØükÄ<į-a§»I I4ę\Ā䜅ž]k+Šų½$^ÕWEæečS$e‡QõÆ&æÖµ Ķ.1lŒd…rį8ĻćDV‡RØz'€>"Oec$Ö³ŪŲߤ{~Nī˜Jśgį_Žõ-_ƋoÆėMcu¼LĻ`¼_Ź‡Ļ”Ģi¾Ō4ū«»›+©åŅƒ7tQžŽÜÖWī­[–&ČśŒŽ‡¬ŌŃ.ēÄśĆˆ ¤]ÜMƒZ,v²Ĺõ5śKū0jzރšŻō;¶µƒU¶›t1ē;‹ø“łSOAM#¶ųÕⵯ½Ÿˆ8g2y{U6įrxļŠųgR·ŸDÆŒÖ”²ß)'o֚Ō䙼ų¢5Š”»žAöu@IĄj¦½ą?źµ/č×OdŖņ1Ž@Ķ 'Ó·$U{4DVŗļģ—ńNĘūOŃžxūAŅgÕ¼ęžā1¹¢cŒŸ^½źßķCšĮš[ßYxn Šq,mĻ(Žxö¬Ŗµs[’¾ ·K{Ł#HŻ#PF;ā/a‘¢äóǶ„yt=ūö|ńõ߃āĘęā9Ó匀±8ķY( ē3+“ɮƊ²\ eYpqUfÄlQ6BsĮéZĮv+£,y2,Ačj5žYP“ņÄ8ėWcrĀ£°bz¾«»nģ—ļŠ™3hl_ŠKx•™÷6Ӎ gšģ<ńÅæ>"xć_ĆŻFļMńw‡µÆątĘ ”Ė)ԁƒYßS®Ēś\~Ćß“ę‡ūd~Ī? ž]‘ä<Š¢Ō“{ˆŽ0mg­īøČ ’xWēoğ…Ś×… >Ōē[Éc„ŽhwiĄ–Õ3܎ŸÓ9®]F~ĮJ?g+ˆ~Oéŗ#}¶$&)Qv˜n|ącׯć_͜ö“ZÜ\XŻĆsk{nĘ9ca•ī=뢊¶‡4µ “„øłśk0.ēb¤l©®äŽ:‘+;Č1»,J¦6 ˜ĒųÖŹ+”‹‰`²²VŪųT>]Ģ’+FŽ\J77Ņ™Q,/ŹŹŁuĒ­YĘąYJī“Į–-Ż”•ŠŠśRbĄ\$s[¹ C©“:iŸŠ’ü·öĢ“įö­«~Ķ^-ŌīJÓ[)œČ—ŗ\­™ą#ÆÉĆ•żžųFś[ż#Ć^³Õ£šž–ūM¹Œåo¬Ļ8ņp2=« ØķŠ=Ö=NŻmŅāY1Ā·ūՙ<·3܉@ŁqlŽddt‘{ƒõÅ%f)=OćĆž ż„þ=²ż¦>čóŁų[Äūžél*[ėa~c2ß(-‘üJŁõ?Ģ|r­Ż£ĆpŒ®£c!*Ƃ9÷ĶDYžM,śóÜ"J¤±bĻNŲÆlšž­ØirčĶóŪ] ‘²»p=Ļ”Åd×Q3­ńeåĢ0kv°B–²9B óųד_ŁGē(C¦NĘ kNFNGŖü&ń,śmņ[Ė,ŅŚ±yɏ$Wčo…uŸ’a,Ü s’k²2±•C×,죹F—f õÉļJŗIo+;‚łļü>õ§22+xgPž×S’Žį!ŗ°ä(䮋Ęt®R“";głBūć’ÆL:Ót‰dZ6MĖóó]½Żüv6 ꍠ ¼Š3h§Sø2¤8Œ63Ūš­+،Hń¬ ŗsA¼v#³ŌŽÓ}Ž]čGb)#¾ŸYš8¹F9ĒA@Ī›DŠ †nQ±–Æõ­Ė}b 6P6˜1œuē÷eÕŌŅ€ dēŽÆĆ}žBź˜Ę{Šß 5®Ÿ:Ģ|µČGJõ=#ā@ȋ ŖŁbĆ it7Œzž/üQ¶ń.Ÿ¤čŽ“µķ˜“Ó-ęŒé_=iöļ,³Jń£‚Nw:§ŲōÆkvzzOm5ÉUU=ĶY¹–{©Õā/ĘAäԁĪjķŌóV~Ƥ]Dńło„Ē\ōü(.ÖÓßȳØĻēĪvm)ē·Ó$³›ģw .ēŲq»ėZ)#S£Ó5 ¬Ė%ä¾eĄÉ œn®oYŌÆÆ.g3ŖävcS.åĘ=Nj„,ÅdĻB3ÓėR6-“,0ŖqĶe'cR;9!i±®ą}jĪ©sx'Œy…#nVqv`^m)„±,©—K ęyĻł©ŖF/:8Ę08ƒX˱ČOØHŲŽŚ6y\ōRiļ…µÜ/02ŗn<}+Ž”Ó ßCÅtkdž[³ń‡K”=¾ššÅæ…üWšĒÄ~¼m*g”5źČĒŖ·Ģ;ä:ņ*½Oõū‚ńn¾O„®Õ¹©ĮżńLł“įÖ«|ˆŚf«2ÜÜG,‘y½„PÄ+Ņuš÷°·•Ņ2lRB ®YK¢>Ž™äž•©²Ķ-„gF'šHV#œn+ģŒ?°Ö™ū9h_“֏ń3Ćŗ^©uem=ʆ„yR3•Y g<ŒuҰålņs¾ XGš7ö“Pßkß_ųĘśUÅŹC ^§;Få88­«”G…‰š;’„/<Ž+Vqb^ĒÖ¶öŽńWĀĻ.£c§ųĖJ“0_ŪMņņÇ”ė_ųēLŃ®_VŗmN;V‰Š¢Ÿłhā“{óS%ўV+»0<į-#P°Ö%¼Ģ+jé „Ÿ’^Ä× ąń>%xgS™>Õ¦ĮrڰHQ>‡„(ĘēÉc1wŌż~Ńu;)ī’źŽUørĆų· ŸŌׄxĖĀļm Yk–71d_13±”ō?vRŒpõu» šżĢ~/šüŽ$®6ņ°ūĆŅ™įłą_iZŖo•NÖV싱õ˜*ŚXåµmō]RQhŪ,eĄ<}+īŁĒö»Ōž|$O…ś•”‘Ć’ 4:„w„ö˜­Že+ŽøŪžj„4|扼)żæ’UĖbŅ›³‹}āÓüRjż/s½’‚ļÅįżCĆß²'Ь āė·±Ū^Ē mÖ³[†##‚§bœūZü%‚öÖkl˜ć”1Źē Æ7RģłĻ¢ÕyŖ4éOxN¢’ɛüŪ/iŹ“8ti †ļüU±­hÉŖXˆįD[„ĒŽ•ęTWzŃŠł‹Å¾:]¼×2®ÉUš>÷ҽ+ĮOƈ,¬m|]i؍nį7Ūø!T”¬żŸSŸėĪ-¤zeļĀ«OM7~ž[ĖÄVvµĒĢT åO~3łWYÅ¢Št ^Óu{½.+␈呗޾µā·~ńƄµ‰?³.ķÆ,bČņnć Æ Ü:ž"“UmŌæķs8Üčķ¾"Łźet’i/įۘĘÓ8‚fō Śæb?ąšž ż—õi¼MØxƒ\šĒмw5Ä76ŗ‹Øū•“‚ÄćßŪB¤n®~=ćÖ;ø[|Ķ$ķü¼Ė›šŃł3ōsö–ż°~žĪ~Ōćń†±e=āĒ妝 a˜ķéĒOjžD?ą ?“Eķ‰ńŸĀŸtCįĶ3L±–Ź‚ĄĻvŒr”‘õ5¶"²·)ü’ōHšūż±ö¢q„MI‰Ź-}Ź÷õ>*ÓńŸt««vŠtčhä“å.Træ\sXŸhöɊ׊Ķkp²‹xʁ²Cՙń(ō]N×_ųqż‘ØF!s=¼wq‘óVčå^ńGĒśŪŻÜŻ«mÆ"9)éĒękš¢<D¹µ>+×ķµ„¼{Kyn$1üF¼m®n­®mĶńŗÓ5GXNŒ€ć® ąžÅ+£Čtµ=ƒĮž 63£:EpŒ@Īsü«ź_ xÖ&Ų<+·c šO­kJvØ6}-šĖāv«¤N iŻģ•÷.[$ŠżųyÆŻ|D€O~R=Ņ®rcõźÓØr×Įż£;āwÅ/|&µ{8ļ¬o|^rQŗø·c'ż® üĮń^§’ >µ©k7¼»Ė3±ĪźŠõOw&ĮJĪLó[›U™† ē *;B¢B„¶c×µy•'v}e<=•‹Ń^efµfšExOÄÆ„Æ>¦Ć„RH+«bū^+•įŲäńž¼õ«›ńēģćć…ŚŌ_hš¤v$ 4@Ȅc®=>•£Ćö:š™œ>nϽҧK©”·“½’SĄImsłŒW—kžń}”ŗ†« ųR’Sµ“+ż£%¼g ćæļ”\ÓĆ3®®&¹bŁ/p²²Ģą€ŽµŪŁźp …\“gž;W;¦ŃęTÄÅź™Ģų“R[ĶU^ßĀ MŁč>Ÿ…_°’w#·­M‚5³N¹ŽIž8€ŒćĻ5ŲXĘ\I’la€2x5kB”Ļ"Ō§K-RöI$Ų]ÉėUą‰ļŸÉÓ=ź™=¼.v«ØOOjҟ1Bcv^zk)n4ūōėˆćœ|Ā Rz×IrŠ^!µ•C§÷ŗÕĘ=³›“žČÓuH¬ƒµFC2œņł5éfę͵xåŃ Œ$ŠcD›ī©eĮń&¶„O+#ó7Äp®—ćFŚęŹ8ķŅļnńe²Oę¾»ų1g¢j>!²ŒH–ķ#b=ߥkŖł MKH÷ļ‰>øIaŌķ®MŌvƝĆõöÆ:Ń"Ōōł ’<`‚zŗQXj„kw†»e9G‚Ś Ę:1ļ^­į_D 2Z]n$Õ~•“$zI«>§ÜŸž=jŚl‘č%kiįŪ„œš[ėļ_o_Įeć}1/¬į‡ĶĘхw×ßNWGā\]•}_Ļ™ņGÄ?jžžM^ŹĘhtĄwĻc! 9.?^*†ā§h„`?!¾¾õgĆՁõ•āˆ.4 ne‘Dč»6±ö­_źowb’H›ĪO+ߚÖ'“V =FŚHĮĻŪÄéŗxŌmā ’L ‚~‡ŠĻ•^Ēč¹­YÓĄŗŌ“ŗÓīć?YjŽ+{Ć›ÓĀZ{x*īéć^q?ōÄZ%굄Yź–1‘†ā"”x@|IŠu|`ųz%”ŻeČė`œ‰"o¼~œ×,ćŲśéf0„˽]¾fĆÆŚ Ā—¾$šžæ6‘ŗŚ6ÆiØßhwč«öČb"!øÉ€Œć5å·Ä€æiūƊŸ¼ ©|7Ņ&Ņc‹W°’ÜA·Į˜XŌ•nܕĄ$Ō’puRƒ‹Z»k÷éóż=N~]Z¦6…zS“"¦¤µ×™+i¶uīķŌńŻ$“(‘Ü L©1QŒć…7Šö9,ĪŗX„ŠÕ6‹×Šō Nś²&Ÿ~’«µXpAÆ­Ė¢½ž§ł}ćözó%ÄÉmMņ/ūsG÷»ÕžŽš$ĘhŚ)S<ō$ ښ['xƟæaQ»?Žļ^ŗŠü2¦‡9®EŖZ@ņEŹĄå½«É“xŅēS-pqø’„lŽYģzp‚bĀ'$2ŠĖkqyHĖäēęSŠÕ–µ3K°-öCm.1‡AĮć„póŻ"ŹźČ¬W3"S1Ż·–ø÷Ēzݲ‚=>²®ę9ł±Mə¶dßjsp³ŸJČūKČĆr°9Čā«–äKcSAÖfÓ5X%‰X2°8ۚõķO\:¬¢īćœäŒcš\ˆęœzœuݯڦĖœć< Ć×4ĖĖkv½ÓĶ•W-ÆŅŖĘ2GAą[=FņÆnŠ ĘF ę—ÅVv—X Ūenύ3Ž4#%ڱf\` ½w+kØY8³†¼µ+Ė+dō­”°ŽBā¢]Iq5« ”Ęß„TmJėWø·³ŽŠDīp=MQeĖ2t«ćØ 3Ž»{-JÖG[xf‰ā’dūFuW—ŗ[٬¢¼ųłŽ:ņ k[¹Óęm’7äŸJ4Œ®|gń’ņYīZQ4°DX“ŠGŽÆ…5ł]a—/,–Lƒ” śÖfńGKįżfĪŲN‰sp³±_<-};ą/ˆ·qŁŽčz­å³ZĪ„¢‘Ī ²SłW IČihšõ¦©Ēw{®\[CpćåīR ō®7ā|?­j71L–Öņ§™DAYöćךˆČ‡ą[½BćQ×D‹ æd–Bۘ}Źķu‹ēŅFš®©ęšUŌņ½uĮ™0‚ęĆP»IöḱQ€ąū~•Zś[­AÕ®¤iV,ĘŖĒ ö±ĪßS³³•ō½lēV+Ќ’Jān/fyČN_(1¾¦å­ÕōńŃ Žk[QšŽ±£<–²Śžv(Ć{Pkc$š†Čš; Ę?„PŚ]_ėz™µ¾šŅŻ„‘Šó“7^cئ¢-^x˜lÜBżkWÄ>¾°FŽ@7ŖĮæ•+˜ÉźröÖ󌱶ņŁxµ \ĪGš6VčŖŻV—*2•śŻģZ„ģ§ģ¶ qo»iqėSĮ~öÄ$6į×ŖŒõŖ±¬–ĖĒX^LÖóĖ bŻ÷j‹SńīµtQŃBóŹō"‹«żŠcs4Š‘Čć» •“ÖPX:8%IĘ}Ø+KµĀÜÜ8"QĪvŸÄŌw—×v¶yü¼ćŽNkœMÜ„kg¬¶•.„o —#Ą‡ßŅ»Æ ŻkVz9¼ †w,’(`H_qō5‹Z‚‹4`Ō’Ō%éhPC{֏Ä/ŒjŽ‚×KšÄzuäļ—ƒø€qŲ:„LŽ18ļjŗģ*šż¼²Y·Ģų<ßź¼ ąŁ4x/ō;Ū…‡j(€³v ·cҾų?ž)ī~ŪuygpQ&`vŸEōŖß5K‹Ū÷»“¹H-W%·üĒÆ’®°–ęR’¹Ą^Ņę2¾[<Ŗ@· ŸjóļŹ‘…ŠXēźø=M\QÅŁ˜:6”ā ½<Ė}·øBT(č@čkÆo–Ui!‘ŽF ą}Ļ~kxĄ¾~Å»K¹#vtf`ǽV乑¤”ģć• XͱmīąXŚv朌öÅd™åĖB[ļŲ¤båsv5!.ćę`W­Ļ³`Š‹×'ŠŅ™9ķŪjsü_/qIfәP1甄06äDżŲ ŸZĖ»ŌēÓ„Ć›€Ę3œœqXĪ=@čä†āų ¤(ŖņŪųµv“®–Ļ,QĖŽgó®JŽÅE\ŻŌlī4Ė©­­ŹķĒĪŹ~R Ņšē†bŌąøÕ5›”óŃ „G ō#<םZ”éa©ugkįĶilm2=&öF›å7œ NźĆæjõčō»M.Ņ×ģ¶w©œ0į³ĪGµyŖßC×§k‹öXļ$Šb˜īĮė¶£Ō¼aį/ėQź—†ÜM4EVWrt=3ģkŠ4Ūcš8[’Œø¶XŗY«€ƒ×5óGÅ?‰÷:¾­iž³Ü“¶+xI/+ņ€95źįšĶj`ćŌūwöZ’‚vü_ųń§éž-ų“u?Āļ‡o#}¢K¤ņ¦¹Œ*†隿žš/Įo žĶžŃ|ū1|1¶½½]‹sÆHg‘–v,2yĒ„wÅtF]Ł5 x†oų–KŻ_Å3(ŽH¤żäG‚Iņņ@Øļō/|Z½¹·Õµ;Ÿ x,·8ąĢppŒøćšżkh¦fä>…šĘŽ–¶~2ŧÅ"$†u&W\ņŪ½zœś IŌ‡’ źx5߈’w2csFG(Ɍ¼k¦1čc7Šēu]"Ę?xƒÄž4½Ņ4ļĀå§¶’]’ĝIuéŪśf³<ń³ĮFšßƏ_iöÖ Ū.­5«GŲ ™0ėÖ“å0“ćNŃõ«+ZóIæž)GŁŚ9ƒ|žŽõ›Ŗx‚}gYkRā=CŲ]ebX)%@ōéłÖ‘F|¦$Ž”ā{Sįķ½™0“ ߖ“²rÜwé’ׯŒ¾1|uųEš_Ʀ”ń?Ę6÷>&…²––Ó©g ņ­×æ„vSƒoCh«€?“×üāŸĘ»ė'ĆSæ‚ü ¹ņ ‰šL[ÜvÆĻŪżJO“Ž_¢™īgbóŹłg‘żrkŅ„9Uˆ©”Ž—,`¾CžX¢› ‡Bœ7ņ«±Å)g‘ƒŗ‘‚¤\ŅŪ–7\“LĒzÖö0”ŗ²Ü6Š©$n¦ž±)v‰.9Ļ„dĢ ’@öxÕ?yĻ9į«ZŪI”ØŹß^*[°ć¢ƒ@’ńQXŒē§„v^š]Öævt½ooµ1,1P3Č$V.F¤~£žĻŸšO+‹Ė»o|aæ{O Å“Å`O7NB‘Ōōż+÷ JšßˆüšgP¹š¤ųWĮ6ĖäĮ*F±Čć >¤tÉҹ*LčŒl|¹įßųO¾6’e²ń^±rŽR™āĻļ§\~µ×ųŸįĀ\xZÓĘ^*ńŎ“ybmtŻ‚ddŽ*c¹Ń?YŌ§])u}A¶Hv¤~}ŗVõéļ\t:æĖs-¼‚źźAūČ]wmĻ9’"›™W6­ü5öo\ų–÷YŅ’e˜F¶ H•õ ŸńāęńĄ—Q¾Š¼¤Ķ„Ć.GĪU_KńėśÖŲfKZiŚ+¶§Ŗź_ėä#vPnqŌW%Øjw¾%ŗføi6Hę5.”TØļÅsČøźīAm<(²i:VŸ³s;ˆ…Į^Ÿį'„q^'×ü+šÕūā>”#Ź)gjŹ]Ļn2qP•µf‘ZŲųāOķGćæ]>‹ąk+hkˆĖ€ęŒńĻ­rŽų_©Ž\6Æ}y>”$”wŽē_”„)YBϧ|š—Y×eK X¤ś‹qó‚qīq_|3ż˜ć³¶[^‘9…¼Č{|¶ zqėŪŚ¹ē3XŲŌšļ€ęÓ5F°†`š+RM}-¢|,ŗ“LūD®±@¹!›‚O ØæBģˆ “šĀź=>H<ā’*±ķļY>"·Öt›¹,$žāČQŅŗ#%s6`Ž43ŻĄ!˜Hż2ü}qV%°æ†Żo·Żµ\ ąÖŽG9GYŌę[ki¾ŻŚvlqŹūWęA©jŖ—£xÉĘĪ+6ģK‰Õ_ųcOŌOģ­e’0 Č ¤t껿öęēŽ+ dXӎā­xĒC×$ń‚!†_)ķö4Š3·¦1ļĒéUŹD„cŪl<¬ė^ÓķÖI>Łió^>µŚų’įŻß<3gįŪ+k _E°›‰˜‘‡ ‘Rgķ)ų}­ŽxīŪĮ'ÕȒ"V;y=?Ź»wU²Ó®^VhŌ–, žŲP5-O/ńśg‰,Z÷QŃą%‹‰Xs\n™$ q RFŲ 4ĘG­kö3E¤[ŗ[ČŠ¬AI<€+ͼįųć[]E³­Äņ–Ł;‰ązŠ 9‘ś+¦üš÷Ā}.ŚÜ[č~#»ņü½=Ÿ%\ćÆaŸjČń©m Ķu ŖZĒŲ$-‘ÓØ94®c*š\”xCńŪi·Z•ÜksŽDĪįŽ€ć­yßĝf×¶öśN¶ź±FĪÉ'œ÷>¼)]™J±óˆü;ń9-¼C§C›Ø*¬r™2¬v3¶½Ę׹F½įI“{ ^ņßPŪ„ÄĄIÜgžż*…ķo”%·‡D7“F Y•AXgõĖkdŠ-Į“WŻ“ķ Ō oBÖ›©č1[_=¤’8偒õ×{”źÜĮq ¶É~†°<:o‡ŚĘƒć=^ĒS·tµ)įČĮÉĻæ½}[gā(Ć:w‡ō”š¢Fcy#Q”ō$zżiĘGG.‡Y7ÅHüąy<)­ż”M}*„ŽŁ ąØžußžĪ­¼ś½·‰Œ7īŪžĢĪ>vVsų֑±Lēž+Xi> Ö ¼V ĪS#ę9­­;/A‹]³·ņ­·\p3Š–C—C‚ų³©Śx«Āw¢žü„ם ‡i9ڧ''šā^$ֆ“įūh9.KW<’sŽ?*[Čē|#¬^kWÖś>©š”`m'”Æ·ōæ‡Éį Ü]Ü:ęŲ››Y& 2}3Ž:ńéSĶ”:Z†Šž(jČ]An„¢7E#~µ÷ßÄ/ Ūxæąä¾ †ź{ßq‰Q·ī杯óŠVWŽ„“~5|Fšfæ¤__\ź–—Pi²Ŗµ¼Ž„ÉČāw,6*ŖQ“ĮéųVŠ5б›4¶sĆ{†711’%ĻL{ן_ĄĻÅćo [CŪO $d|ˌ ēė])čecčų€0 Ļę’1M“NŠż V)¢™Š1šćŖ©ÄłćRżšt?j!īī—WŅŚF’˜Ÿ”ó€NzÕ7×¼šī9ķšųŚŽ”)·°$Æx‰Ź|©ŠVrŸ üWl|iš÷ŗBéoei, lČśÕĶYx“Ē?¾%ųkā—ĆĖēŠü_ ŻĒs ‡ŹŽ>VĻP@9éÅ4Ńv±żżžĶ?ōOŚ«ö}ųqńÓĆ×6“ŻŻŚGo©¤}aŗQµ”Ž£Hē¶ßZ÷’ųŽ]Åuä¶ŽeŗI‰q„Vv Ÿaź–Ńų—G·¾³ĪęPĖī;Šüę’‚€žĘGķ”ū#üRų1wef|ogźž¹2mÆcĖŖ†žÄ'ŅCĮ®j«š-u’#)ŸēYāļ ź:Dk¬'Łõ{[‰l/­H0Ļ`§ēÖ¼‚īÜ žwt^Ć벜ł•ĪZˆĪœƒøØ`⨢įžFó×5Ór“L"܄ąćßµ"ķ—;yĪjŠ,ģQ÷ˆ>£‘V#¦a“ 6E)+šGBxĪ$B_ĒZوļvŹ˜Ź“lB bŃŃ@ßšoŸķ¹{š/ćę”ū)üBÖ¬ķ~xŽ=ś)‘ö­¦ ƒPž2欫CżŅYĄ÷–¹ŌURī1±†r”ЌƳŖo©ĄųƒNVźÜaRe*Aģ}k䎚±Øx”Õō76|®„ŸsŌä’}JóŖųėĄ_ššųCP·±†ĪóĆŚņˆķ‹VĪėÆŻ'8ścäSöćų}š«āõ޼Yi7īmē˜Xå@p}³ŒV”„ļ&Ģfµ>¹óDŒoCŠŽ˜ŖĆbĘAåˆą Ē=†żŠ„ŠqśÓB–Q &zŠŚ‘K°e?1„EóJsۚ°ŃČĪĄqaQƝŁcøŽĀ‹—©wlŒÅ€mŽ T±Č¤ rw!Ąā±’:iĖ”×x3Ę#ųoćo |PšeŻÅ‡‰“[Ÿ{­qÕŠŪ—¹å?“§Ą_ ~Ōæµ‡ć XŲBšÄWŃ5ÉĮ@y ;Y)‰@ĄšeĶ”·Ė1åŌČ=÷æ†kļo†‘l“ŅÅÕō7sÉóFō{We:†s¦}i,į$”ŖŽ5Ō%e.1Ó„t#•«mŪøŃP,ŁĄĄĘkoP{¶·7†A>Užéõ­`ÄrJš]MĆ9Ēn®ÆVÓWRŅŽK`„AÉā¬;Gŗ},“Ąę6ŚkrĪŠKŗyĪšIėA¬d]é°Fń4Q”=Ŗ¼ńżŽ$`F¤``v ²²k[FŠ7š”ĒPp+žŗŌ$G†xdflōĻŽōŁy|šŒ×ąœ÷#ņÆ\Ć×z¦Šś½¤ÉG¾l)ĀūŠ8»žam«}šąIi(krH#•)RŹe±Ņ¼öXpf sŒśW9čŅ}ŒłZ{YUąÆńZė¼9«Įs ÖĪ&$sI2„f\[ŽE{#4Œ«ī:×Ką«k›Ÿ$ĮÆ-ąņŹ3‚væį]w8Ś:]oĆVT’ńS}Ńe$ƒ×£w‚xø%fĻ[ų}’ųż¦~8xA|eš¶÷įN¹j×O ZŽ\IØčq:t'<×1ńöIųįą>ülųWāæ hāÖś•“Æw„8ŹN‡j{0y®…EŚēĀŌń*YŒ²ŗµ9jĘŪč›jś>öōņ¹ņ·„’d‹ž;ń†üš›XŠüA®\Źńł7ó,a•T“‚2x¼«[Åæ ~&x£ą÷Ę? ĖąOˆŗ,āģēpVįHŹĖ td ©ģEe:zh}śĮ…Xµężė:_ݽÆŪ~››×:„ņ†Hä-Ēcھpż”ZóIųyo®ZY&!Ōā’źf÷I‘‚H鎱Q×S,ę«3—ųG㛽GĮ¾6Ņ.7FDšJ~š»ßGņÆnšŠ“» i#OKĖÖĆ@rvū ÕE\ų(ā¹–ēŚ?¬/µ= kŚ*łö08Ž`9ņßѽ:~•ō®™mŖk»Ó£†iķ#ˆŲŽ¢µ†ēv–ēĢžńß Ź“5¬tÆ·\-„ķØ[¦į޾ÆŌ’dŃūFü;šO‹¾ˆm¼Sų—G·yHŁ+÷2O88Ēz™Fē‰Äœa ¶ÆQū—³ō³żl~x~ߚ~£įƒ’>xÓ_ÕtļŠńöÓč×S“ÆöWV "ņA]»0Ś8Ƃlü#ā]JŹēPŅtŪCȈĻ*…9TĶyu÷²=_ ŖQ–U°öösœä­·¼īuž ń®«ö{O2$øA‰¼g<‚:×§G×rOogūēLž%}«‘ŸŖJZEń:+ ĄÓ¬pź+6b•¦8ż+ŌüEį/ā—Į üBųqhž-Š­’RĮ~÷1Ē_Ē’ÆBG‰Œ›Œ”–×*žĻ.m¼s£č³Ź’móQ‚@*~¹5oö§š¼ æh?ųn'A¤ŽŪŪj–°~fC(ĒmŹj%±¶|˜„’Oš±ē’Ķs᫈#®ß3Ōf¼6Ķ_3†Ū“t÷®y£č©TÜӑå‚q/%=1Ž»}F‡ZŅõ„—PŠÓT‰CĮ ƒż*qŌuq*1–d’śźĖ,HŹĄćÆŖ>|H‘n|Sį/xNĻQųW­i­c}¤4›Ž~`:wõ÷Æ[ ”ev®~}Å5£^ÕĻ9ų1šóğ³Å/ |LŠ5«-±ń¶$xNą ”Œķć5™ńƒā„>(üiń‡Œ~ü:’„?SæŁsq¼@}ŖńsęJQxÜß.Or <šÖTŅV?4ÅBK O3÷bćnŽī.žŖŚz³ÚO‰µ;¹õ[)«JęI<”±‘ū䇌½—ąƒŠ|GžóĒwŗäóG˜c¼ w :„Ļ ŠtõükĖ«Œ±œG(hß?„·>Ņ<#§ižŅtĖX bIĄ~`Ołüj’…|1šæĒŽ0ńƒüu CøˆĶe|„*Ż—į\Ž«Z <’ ņ«jĻž5~Ēį«d×¼ÆŲj¾øœ$É0ɳBŲf÷sŌ×Ī^<šFŸū7üDšo‰>|L±ÖõĖM·2ÉlWnÓü,ŠJž™éĘ»ZŸG,•z.…exÉ4ż ų³Ŗų‡ö×5 CĒ:Ōõ«™‚ŪH¢Ā8ĄĒNµņŠ¼=­xR¹šļŠ4÷°ŗ°’uV¦N«Iā]ī~‰įŽ;B Er­ŃĘż²(īę.Ŗ~fõ®²šÅskɲB7ndTsßC÷Ģ5K3»³ų_āMOį‰ž)hÖSź–Ś/ļu eOž+|ŸŽ߀N=y®šŠ_Gmy€öņ(’>:‚2 7Ö„U=ŗ’ŚEp®Ž‰·°Åssčž¹ę¹ kĮ6ŚŻ½Õīœm“ķKļ,˜Ÿ³B•4ō5iVz’ü0Ōåšu¹­ęYóXŽĶéZĪń|§^CRÜ-š·ˆÅ•„ö·Š<Ų”sĒF÷ļ^½W> ˜N2„āö>Fń?ĮŻ?IŽ––šeՎąčķn„—¾2FkåoŠśõĒĆĻų’Гӣ—ģRA<-ņn”ØÜƒŒŽyĒõ­*aŅW=|.g*Ŗ×?7ü+rŚž—lnÖÜ]”…:b“Źéßnņfµˆ7ŻĪ:׏Z™Ż Ž×F|Ž °k¹ī!‚XŠÜ7õÅrś…‡Ł—É—vѓ€ßJā© ž Æ©¼Ž’­xH̬½qō­ė?[KŚžHOō'޹„hz©s˵ķ [V{˜ņ zkŗÓ'H”‰–”šw‘1wēŚ“P•£ņ]²įĪ!¦T@—<ęŗ½"å<Å@U†xĻjŅnW1¼S ’„‡O-䤓ep ĒNŸēšé4鬔b@u`FzqZžv3k#üwŃm4ˆb[%d†ļ'’˜É§éVžj—:f£gpåšʾxQŽŗ`ūŸŽ§cōIńV•āÄ÷ē)†ˆžCzŹ¼ēQKp² 1‚6īć5³zaŖ“õ8ĻA<¶kŖŲF®źw:þ* jé ČłAĪ*T~”¹£cŪlõgŒF “÷ ‡”Æ„ž žŅ~%š-ĄŅ|EfśöŠĶ°H«ŗH”žæ†z×u*‡äėIĮī~”é¾*š’‹ōøn“ŲāÕ4™Ąó#ƒøtć„|{ńĮ?õɵ-%>Óዉ|Ęł‰kLöĒ„zQšgąX¼4©MŅžč؃ÄqOc…¬Dnåß=}æ{7€uū+(ĘfŲ‡ö«<¶—3·Ÿ?eēē^ĻąĶ_įu§Ā·““ķ'ÄmE¾ŠÖu>’2©ZYe(ĆÆé”ä*ŚX9wÜŻ£’?$¦r}³]ž¹aa¬ųRME! w¹·÷}1ųVlś J©t9ļMs§2Ė Źź9ōÆFšēõ]ҵ«8nu>ø®5 %nJG©Ā'#8'ø¬d¦sSNēĢæ·ģéĶēÄ‚’Ķį½RąłŅŁÉ‰į¾ōdt<śgÆZųĆW9KD$’9ÜåF7å­t2ŹŖWT"±:ĶomŸŸĻsŲ,b¶0ł DėsF‰n/”B§j6sŽ“ØCS՝t¢äśśĮ4Óą!’.˜»>āŪJ“Ų°¢Ėܑ_g„§īh<]˜Ė™×Æ-\ē)?›lźt†:ܓ¼N ÆēoįXn÷zōs.跐»{ŠōaäfPŠÓHń¦ƒpö—r呐åHd#‚:ņKoÜhAķīgk¹ˆYz;fµ1’¹aĶµæxŌKm3Ę÷ĪćÜ”Ņv9›ėlÜrG&°4ļņåŽzw­ “1lד¶•%1°1°ųć”ŪAūĒÜVę£m}>›%͹• ƒēFŲeæ­pøÜé¹ēśÆ‹5ŻjŹ;+©D ¬ˆža?÷k˜¹¼Ö.PCysrŖęG,xāŖŌ囚D#”`«c„fjöz˜¾Śo0”ÜI9Żź+¦œ³} żŲ_Đ[É0ŌüĆø3»{ļÖØĖoxv¬0b“Ćb¶0’=ń†®ō%!øõyØz)ĒAXRéšf›>öŽ?³‘ón_»A‘~Ł †Pö§nī8ō«:¦«Ø\İB±–SƎߍ”Īm+V$y—*і,8ķéW`Ņ )•?~®vwéśÖSÜŠō}%PØ2GŒ~SŠ·¦+Æ»±ylÅįdĢ. r=ńéP`Ļ%»–!$¤üŖÄžjĪ”„¬ĶĮ”õB†·‹ŠEK;…·…öI!Ÿ8”=ėgeœ é÷‹jŽ` =éęzž ŒĻ RĘųb^ąĪ·ßco5ך ‹œ \īŅ‚g°Ķ+[¹Ōu -ē`ällōö"»94ɶēi@qŅ“ŲÄåīō[ˆ·›pŹēĶQmłŅJ²óńҰ:*Ón›Jæ‚_²Ü'ČmSŪ"ŗØ¼ö-ź·3ŻXæĶ¼`irėsh£[Ņ-b¤3Éå†Ė‚?Ju®¦É˜ÖÉĢ Ęć9¦Zv:kk #K¹±ŠĀ8Ņ"8aŸJõ;Ÿ Ųkvv7įēx !ˆEł7ĘkÄŁČ_|_{ ZßĀ—Vń©SqœĒčHkĶüg⤶r©%ȆC• ü;Vn=ŸSĀŗŻ­äź.ĖĮ‡ōėĻZģ5M> ršĪ±ģ Ü`õ÷«ZV:H<;kk Sīą’ }ŚĮ¼ŅģFį$a_w_AZūDäu-N¶e¾XU_–ÜŽ’8¬fšŹļ(pŖ=)9…©t…’)¾öGERӜÄ5,Ą dņsPe4[7€–,ģJēnmŅi啁'#Ž“M#2ż½š wfyČæŹGұ–ąG?”€»„TIÜ~GQc‘Œ’/˜Ėü'µl¶•X_j:± r9ZĀr/C¶‰tåĶ{§oÜ¢0TķĒæņ„Š“Ø×[‰U q4„7Č0>ž•ĮZf”ŃčRųe£I'9Ō1ęĪqķéW }3ū1ZÄØ™Å,`cęć֑źŃzXź“­3÷є2&æ5×’mėzM„Ė[^Ÿ²°Td\‚žžÕĒģīĪčĖ©‡ā?Š^Ņģ`²¼·ÓžfRžbɗ$vžUńĻÅĻ‹V~2»… ÓbÓōŪKePģrp;Ÿzō0ųp•d3öwż›>4žÖŚ«č?¼)6œdŁs­ß@ŃYŪ&y"CŌć< žŽ’gų'_ģ×ū&ŁųŸMoŽ-āI˜¾dvN1…9Ļ''§JōłNJ“>–—Ā~3ų•¦ų‡ĒŚō>šd^Ū÷nqŠ‘žĀŗµńæŒҬ£ŗˆ’īģ?Zóļx‹Xń…ĆĶØ4Ŗ6ƍßguī§ėŽ=«F¬ŒĻ5ńv­Ŗ|AŌīÅqŗšī~Ó~źLwcŃė>*¶ų_ą}þ Óuš“2,VūbčåĘ?xÜuę“LV3uų}t‰N‹ÄšQ"lr }kČ|SāŸĒąøüUć?…m¬åÜb•ĄŽ˜ēåĻ#Æć]4éų»ūU’ĮIķ4”¾š_Ą5ŌŁžs—ęlFąu#æ|eć?xŚņ}gÅÅī©v䝳Éęlē$)ÆRœlŒœŽIUѕJēvzÖzpĒĶä‘Čō­nsĪwapĮć@ųÉł»ŌbāHįʆfä¶ŃŅŖ-#–sml$fó õjHˆ’P9ĘI=éIÜꔙv+o0ægõfŅŚO=s½Bī$Š–…tŚV–óÜGĄ^Vē…åEzT:£A%¼ŃŻ·Ė;Éč8ļQ3¢1?B?eæų'ÄŽ‹7‰~!j7? ü jD„ęµ;ļ—ø‘śó_؞ųš'ąv—q¤ü+šķæ‰učÉYµ SꉱŁ[ńė\ӗDt_¢=…o< „i¶śžÆāyuOŹŖ·TńķHńŠ&łćҰ'ńo~%ģšĘ±Øæ„ü‡p“P@œvŻ·§óėĶeĖŌŚ6f–±'€“m,¼õų夙‡Ķ 4Ö®5G„KÆĢ·¶’1eG{žłźjd‹0c›Äzꧤx~ĖS‡ĀŽv>|“6#`?‡ŪŽ’Jԗƾš;k~šö‘¢ų»V˜Ŗ„łŒī śÖ-_WÓ.›KƒPńS°µ»RĀ(ä Uz}k"Ń®µ(“įČ-v‘¶2ŖܓXÜ®VyLj%MęA™5{ų›k[ĒóüߝsŚ•ĶƒŁO«ų·Y·šķˆQ+ŪÉņøNŠ:žuꐉó_æk$X—Bų;§›¼—½cĖ`rĒÓæJł¶ĖĆž&ń&¬5OMā=rźRĪżµėōė9Lč„”<-ą[[ qę— ód(~ėśĮ_4»ŃŌ`’Õ ä¢}Śē”®]|𦁒 ’TŸQšÅŻĒ—“·zŲ>øÆØ“ŸĒ}R\†šr¹cźqĪk)Fā1/.-cÖ./£‡±Šś~5Üé¾"潓ņ`iž!Ōc€+=€m°\\Ž\$ŒÜ.z ü³–ęņo:Fž¹nkZs€×5ļųy­Zźüšę0Ɛ ü2+“Ōügnņ ty®b€IČ'¾jŻLĶ@āµ]fs%“‰³™dĮP Ē}«Š¬ü:']2ņX%F᳜uģj$õ%ĘĒ Į,šMÄpĖkśK˜öłg•<’*ŃÕl’°—J¹-o*J7„rœžü*S³3žĒŅžÕō6Ń!’{Ūd—hłTsŸCY ½°‰ ÅÓģøÜĻž•Ó 3ęļj0^Ėqö&Gf'zW„iZu¶©c©ß\›vĪķņ¤P+q8ō:mr{k›„^)”<$‹ŠŠĒ暎žV #ø /L*ŗpŚ,sÅ»HĄ„tŁšŪŹŒ“ųśÕ&%ę‡qc–,-§ĮņIV]¾¹·–(ćvąīī=k9 h5ÖęĻL°ƒV““ūV3yyÉöÆmŅģu¤:ärGi&0d$±•ōĒ“&ΓĖ:uŒQ®“j¶öµģnČ$šóżk]žÅø†}2ā ™|Ė"giĒ8łÕ©ŅlǶų·yā wAŅc²‡D»W+$±ÄĒn½ ė¬=}é4n‰āšEæˆü(šu¤Ņ[ė®šcłÄōśvÆ6ŽļĀ:5õ·öéó­į—¢}õ`E] GŚ—~"ųuŖxz;“iWVjŹ®æ¼Iv÷?Zį?gķžω5ƈ·SJ֖¬f–M™1/8ĄõĮ«Œ{—QųūAiæhÖ/nټ2ÖŃżŁrĘE’ ŖQxŃ5jvÓ[ŹV»\! ĄŽĘœaё(5ψ5x¢im’x×nŲV‘é—&9µ‹ĒŽödłc=Ū®3łÕr£’TŁĄüKƒÄ>±µ¹šĄ’Ü]8Vcņ½öŽē8ÆIš7|Qƈn¼Lņjz•ˆ “ƒ,±vąūcŠžUԘÜvƒ®ßkzŒŅĒĀÄ‘ēŠÖUŅÆ.ļķ”WvųwW<óŠ`VnĒLQĮų£Å:„¾'Ń,.a?ŁŃ(‰ŹÆŽøžµķ1čč4˜.ō1o=Ė'Ļ'tcÜR][ƒģ” Ӕ\ņ Ą†ś„垢ŗ›kpҰPŒABsœlSB·DzÆāI¾xOG_^HśUżĮ‚1-‡żæ•yf¹įrŹH¼Gqo%LJ.#i ”.JóÓµn½Ī’Fšķ¶½ µŸ˜šO°3ņķm,a%”ÅišĪ©ßŁŚjBhlfu(dį¾;ų/XšŽR-9ęÖ¼!Ķew#ŒćęAźE¤jbų#M“-Ąv™÷‰8ō‡å^„㯊>#Ō…¶“§Ūź©³łÜ•Cާ=ŖōŲØDę5m~]" mmmnc¼Åw$w8ƽc¹¹ą~ĻÄöĒūVĶVÖ`JÜGƒŹžę”»&łt>ż”uŻ'Ä-®iźĀÖš>ģ,9ćóÆĶ=BÖ2čÄ lä’9üė› )[ŽÜ‹™1 mp[ŽßZśGö{ń²h>,·ŅßQ–;+¶*Ųb@ĮÉ\óÅzwV%Ė[§Z2Ky}FE+/'§”ÆQ›C“G…„t%@Ėd*Ā¢7§3Į~8\ė·^tŃ.f†ö Źõd=WŪæē_§ƒÆµ}ü]l­woŪdi,äšv·¶+ŽÉ\ėC.ž cĮŗ·‡µŻ>ŪgŽę9£’4u•'Ҿˆų“–>&Ņ“/Š6.­m{ Šé#L(”0O@?śõ¬g ÜĻ׏ų Ēķ€ß ~+jß²ÄH§…wS€{ÅlŽqČ֎W'oqėSm0“e†äėõ§øv±Ų]O”¦oƒI„ ņÅd%}æ¼j€ó73¼kŁĄžGL75ģ&Ž]ńČĄĘFdWķ_üGöŃńoģŻń¹~ źšå½Ļ†u©ŽēƑ^ńHd·ßü†Hķ‘BGm6tžšŅęĘfÓg‘“ YWҁpE«°HA‡wōÆI½²ū]“‡;žäČGzä©©Ś<¦XĶcd쮣|YäcŠWóO’÷żˆÓĒžŃi’BöRĪbŅüQ‡tQÜ("Śé˜sČņ‰čr^M˜™ücÉõ³Ļ¤jé³TŒS 9ĒÜSąŃ”„ •UtW Ć=óYŌv1hõ› N Ķ5VWĶ¹e<üžUīV‘įĻxn; ^ĢµŽ ‰)=0>µĖ)ŪCH#‡“ų9ogaā »»˜bøˆ<– /¾xļÓ&°ü-ć‡šķż›\źRĀčĮ“ē+½TüĆŲWU*šŲ&~¢Yźšn¹”č ÓäB. įNB·Næ†kj ėiag…‚Ȥ c“ė]Ōö8Ŗ"¢¬ĒS¶øšOōumĒŽµčæŪšœk—HńŌVŌ÷9Īb{+€ńūĘü­›rl܅ę\05Ø7VPOze`Bp«h‘Ék$)„uRrzš ŒO7“R¾†õķG—4›€RŁ“ҽ~ēĮœ¶6=Ģvdį™ÜepFp(56õ ŲĒ£Ē(n]kõÆā¼‘Æn%ؐDZ¹+Š$z…¦“ó­Ū,aQƒ Ž }:ŗś7…5u¶·“ŠI"ņY6`#z;^Z­­ūÅ1ī,8ć9éW"B>ląćņ Ž[°‡lgÜBš3]Ü#ĒdĶ">ī ćƒLŁO¹ˆ\$ź7Ū„mĻ9‚ÄĻ `zdR:8’ķūØ'8;Ā’/\ž5-½œņź±\*¶Ē8<ÖR{CŅļfl”Š4ڧ#Ų®˜ž!šų·»¼X„XÉBN6LTß sŸ?jśNÆ¢ļGIo ‘—†2AėŠm°žęĖūKO;”Āąć,)½ Sg©i² ‚Ņ{¹–XÄŗkĻÖżœ¼YįmoX±Š4Ūe—UE!ŚNåČĮēŠżAńī³ā½oį:xXK OĀöR„ģH¶ąMŽp}Oņ„N'™˜ĘŽOiöZ’õ[*ĒŖėŽ øÓ˜³ó/ø–gƒž* –¼Ó[»t}ōŲÖųšWą'ķ}ńÄŗ–æ¾ x?ų-Ž­¤N#m»ÉF`ĒiSĄ#’Æ_?’ĮC’ei¾$ü>ńö©ńOĮ–æĘņ¼)ć+P‰vˆĮ<‰Āē' ńóū ēØĆiq6;šPž&mŌ§Ź¢Žü­'ošlžvü1.¬—מ×ģ_OńĖY^[–ÜRPqŪ±ė_DĆšKÅæ>ü`š z<©qØųvsfÓGņµŹŒ 9éõ÷® „cū;>ĢØĖ.sŒ·Ųü¾ż5H.µ {Ą"‚+-zęŬå#DŃŒ ŸužUō†¼3¬|-ųc5ŌM6š’cnW¦¦üéyŸ™`±|ŹĒŃß¾%j>ų °Ū Ō7Ē©[ŸŗŠGr+ōį’‹tæķ §jŃ=ˆ9V<+Ó"®2=źrŠļ~-x?ĮŸ¼+gk«h–óŻ©m·®„zķėŚ¾pųušćĘæ üC µż®”šžxݤ2dIn㐣=sŽÕÕs¾Ž5Ę,żŸż›b}Cāē„4‰~+×ī¼£^Gēi¶Öń,“̙Ǚ n¼tÆ»ž ~Ļ?æfÆų³Ä¶¾8‘ü]®ĒwCSŌ"Œ2®1²ŽN:óč:šßŁw?|fńj¶3W%ĮĒ܃³zݵŗ]’z|·±üØ~ß>3Š~7~Ü?µ¬žÄE¾& YOÓÆćŚø«ÓGöw„ŽXL‡ B¢“”#uٵwó×SÉæiƆš¤|]¦|@“°»·ŠŽeY¦U>TŹŲąćŒ’…X¶Ō-ļ×ūVĘo³Ū7Ī9ūŖk‚t×ØcT£©źž2ų}ćMMŃģ'I.ʹČųĘ:å5’ŁĆćŸģ­®ā—s§ŚjŠVĻT“Śź ·% ģŽĒšÉŠgŸŒĶšŌźB…Y%*—å]ķ«<Ž ’·­ĒČćÖ‡čŠ<ū/ü`ŌuOŠßž)hžń|ÖI<śī-”–`ø<6'8Ļ<ēšś›ö<‹ąķIš3ā‡Ą’Ś]“Ėį똤ӵh.R›Ą°š98ĆzšC`ŌŹ”e=“׹~1Ęģm<-ISźCUżėkošŠęÆ~k ¼Æjß>9|5ų…¢xqY„{iĆO©Z)Ϙv±į3ņääƒĻJłOĒ?µv‡į½9Æ|8ś†±ā¼ "X*T׋^‡.„`«N¤§Y=×o#į_žŲæ.Æ­“ŻwXŌ¼1įū§;!;æxĒ·5čŽ žÕńE³Ī%‚ūQxĢ­&³/æ­y•%cé0”ŃŲiZ¦į)ī-¼Mp–Nēr÷‹Ą*/ź~ųÆkØIemr×¶Ø,‡ ŲŸ„•ō>»$Ä:ˆVŁg͚ŽŸc[4k© Æz±£éÓj¶æcBķR¹>µßB'õ&_Œö‘ē[3īĻŁļć–·š×Ą’~ŽxĆĘf½¦= ™H„”P$ļ 1ś×璊4/| ƒJµń®…Øéz ØŪP–"#<zŒ}«»ŁŻ$ueøKWĶi˧nT×ājéŗ”щ ™1Ųę¶L$ą|Üf¹jĘĒҽQ±dŽ_ x›Ć¾$°R·Ō żÓØżå¼Ė÷HnŻNq_(Yü)ŌĒZ.”ˆ¢ÓōčÆb•§t&T£ĆÆTρęwgōūžŠææfxē\ńF£7Šā¾Ņ#Ó ø³Q$qņ[,AĖ}æü¬ų”Ņjæ¼[āĹ{«;ė¹ø`†F(öSŠõ~²½Š§Ł·÷Ūü„É8CCˆ«ęµ%ū©Ó„"ŗ¦›nżźgXĪč€ćZč­d™¼²Y˜ŽF;V)Ÿ«\ģģtÉļ~Ē4­äĆ$ĖóŠdĻę+·ńĒĆĻü0×.<+ć=>+;—‹ķVSÅ&čļ-Éł]OóҶ8kć! Ŗmźöł}ØxBÓ]Š.-g_:åIć«ä…|ÅāHR{4bQ³ü \µt4…{ž]ą=J÷NŌļtĮ3³yžT¹9šöG…µ)Ķ0Aƒ‘Ō}k•OSŸRńhö/ Ēk,Ķ©j×ŁŁ āIqŅ©źæ4'ø¼Ņ4ۘ^õ>RrŃ[ūK#äėĘR‘ņ'şĻfĀÕŅe‘Ź;%xŤöt»Ÿ›×J§”‚¢zŒ+ ¼iŖ8ēµjż¤[FĄ7n}ė‘ŌŌśJTō!·•nŽ(‹¦÷pæ7lšń_ųJõ ć8—J×'Óõ._³OöyŒxBzäuė]”äsbāœyeŖ?yī’ÓHųEįÜī=ėµżŸVm |µ­kxŹ‹ęīćiķ\U§ŠŠWF¤S 1–EķQ’iZŁź:Lz“ˆ¶’ŽC ÜŪwĄc?(n]Mtż°< ąok_³Æ“Ć6ķįMGPM>ų<œ< É'”ē®kęڃöu_ŁļĘ-÷…®/5/„¾'CåC#ł‹§Üv«LmG§źzéé¹óXŚ—ŃšŽ»’„/åšķį[kš9ķ‹d‚ ņ·A’ׯŽŲ—ö¦·Ń<Ÿ•ėP©cį1”Ś?Iō«ŪO">œ£i/ʦ>sšųgöÅųV~»éÓj0ÜŚjü—ĒīɆ_ÄžµŻ/z"Ė'ÉS‘Ÿ—šŻ¶›ā;mźģø˜Œō³Ēó•}§|Ѿ!ü<ńV”cʛń/H2=“ĮČ ēk/~‡óÆ&„=OÆĆ„±ć~¼:”épˆfˆ“.¤œŌėõMKŸl­gŹøéƒõ¬„IńŠčr·zU‹äeŻ1€¤ Wuąo*Žīņ4µK¼Įp'½qŌ¤}N~ŪƖN¢8XF1ެÜųE“2Ē8ŻÓo­yó‚EF£G-y¦^ĀóAꧦJ|ņ_‚Īåd,£jūÖ¶Õ”F”"y±ˆŪr6ĘēīÖ¶ƒ©Ć¢<łL*8ĆqŸzŽš9øŚm޽ez N6†SÓ …8_AĘČßäĶl™Å‹wFw|-„ųĆCÓÆE“oŖXČe27J§Œ~5óģ:U߇5¹ķcIˆuČągµtSZšIFw=g@¼šÖ`ļØĒÆR‹Äo©Ą¶:„‘“y˜~5\Ģį£5sGKUä…HšŻ••ƒrÆ?žŅ×A×ī­cŗŽąpą(ĘØ>ƒ #ŃtkøŻWaĮ#&½7Jæū&V-ėĪOzŚ”µ;ŸsŲžüjń/…µuMlŚVą,ž}łāæ@­¼KįÆčc«$*nb8)‚„±Ē$×§J]Ģ8Ć!ę©ķéīĻ–ü; ėV³ø³†fQøējöķŚ nt#ŠrEt\üĖ„iźDĘƧ\IcožÕFüŹkŽń5- XoŽŪķž ČŠ<6-ź|»ńšČxŚ{~ņG čP:pPūzWʐiŗžā[ G=ģa¶”¹Vėļ~ŸsTŠż7/ĀFxXĆłO„üScc [$ßiSKkpņÉń`dķõ«š‰4=[ĀÖZ†šŅKcq•1@īAü*Ā⬹b­Šå]²·’KhķŻ#ĒQ^Éą|?Öü9y¬kŻłÕ¦­¢˜Ē䯏§Ņ“åMź(b_Cówö¢½šÓxŚĆĮž¼›R±üÉd~vČ;޼·NšÄB ŠĻ( öļ\Õ ‘źŠ©}ĪŚĻL¹µ,W%чĢjōMĶmąß"äõõ­štÆ4šń;žĪČq8»ŚJ /ń=#ų“zģ¬ūI^:Wca¤ŪÜ»%ć’Ķ‘’×öTā–Ēł9_VŪÜōÆųLŃ`»ŠŅßĶ’\–v9$śž•ęž(Ó|Dŗ¹I,Å„Æū¹gĖś×TO6hjšv†nķn–Õ”([øōÆ#½ń’X?6GJ%- £±šļķ=Æ\kšīq=ŻŹ™cB~Pq€>kć۟jŅŗ$Į¾ū'ę±’čmyŻĘ¹7„u[Ų$“3³”h?1īz§‡o¼Wą»rĘQmq‚c…²¾w’Oι=K<ÓF·J–SGŒųū§ųMRÖ#¹“Ō.€ĘsøŽFhP±GŠŪ±“€[‰óżš:{«Øxyõ+Č6\ˆO©<6}kh.§‘©ü:Öt½;P×4ŁŚy"p˜\„`z¶ĻZ©įųģu8#7Žęõ9Ę:b“tšģcWžśŅśh¦·}ŽłFēĮČēŅ»ßx›HžŃ‚ŽGD¹–=īŖ>]Žßēփ«(ż¶ĪŚŽI„f!°įؓQ‰­Ż£¹‰“ūŻh`“+ŪŽIm4rż¦)•¹uŽ«6”«Ūß$J钌ąõŻŲŠē”­¹®čö _Į³¾™į«č5ū[ņĻ,(rÉßi=°kfīŽžźĒlL‘ø?0łł*WŠÄņ %ńˆµ.Ś”)™›āŽ$>"ŃüW“šYĆ JVXƒ’Ä’³[ĆbzķµßīD’!\ó“ŗ+•½IÖżõee%vŒžqéV2 Vø–Y–I›9Ļ„M,w ¹å@ēž„Pg7ŠÉŖÓ$FpqņńĶz†…« LmĘćÅg9t35ĪŁQŻā c W=ØO0GŲ¹÷ā³l¤Œė¹umNźĶ—*®³g)Šöo¶ėo }$‹ĖøćTX `0Ļ"°6H”&™ŠŽ[ŲŚĮƒ$`åTś{Ö¼×>2Ū,p˜»Tä·­`EāÆź:MšźöØ÷É4bX°F}:óļ üFÖ<#ē„Ķ…åՓŹx|ŻĒ€ąœR*6ź{Ž« h3ŚŚų’Ź ­ī$Œ²¾2yĮ5󒏬§ÖƒiŚ=Š!GŽÅL‹R8­3N 8Bʱ)ĄĒš×“é b–V¬”ŒŖ ¹‚}jĀo”%ÕėČĒČ-S€zq^y«Č·oęHņūę®2¹™…}<³±PĢĖŠ)5ĮܽėO"*:"ó×Ŗ­„ŁĮsęµåĮB Ž>• ¶É ’¤,vē=h1–ä¶6‘ŻM,V<ž[œuę‡4s™ «[?š#š n¶ģ$Š“…@\•Ńi¶D7sB»s1śÖNföFāI§Ćę„„°–@§vŃĪk?O³¹Õ•e‚)a$ä)'š®:µlk\õ xVęęčÜjښ¦ČYcćČĻlžUsNŅøƒĖ3*¾*½žµēU©seE#¢¶óŒķ.C¢īśc’ÕT4‹ibŗ¹˜žYefbü«õü«źo²ļÅŃxbɚt°—+Ÿ›“甯šüUń–ūY“R1Ć%¬eY”mVÕGŅ·§HÕTčx—‡ōĻųó\µšē“-GŞ&|m­Õ™†ćŽ}?żż–æą—¾ѧӞ+žŲš—ön˜Į%·šŚ?ʲ)3×ÓŁĶʬf÷?l¾]ų{Ęŗ]’Ć߆ŗ,’>D†uxšAt#Ļ­?ĀŽšĮ‹ūČ| ž2ńž½$¤ĶØ^9˜Ķ“ĪįĪ:śÓŒīIŌź?µo귟üMćū›}80ž=%L‘ŽĆ·Zś—įw…ÕĆś“Ń«x•Öį”p’¹ą‚? õö÷­įgG«Ļj-īχē{ż>)ŒcĢź¼ž½y–«kŚF½ā gQÓo|;°ōł”‚Œ:ĄäjéP2q8?ųÓVń ²j>±°±’vŹģB/Øļ\N‘¬Ēm}gį}OYF×YwF§Ÿ=ż=iM1"ńv‘smp.õ»£¤jqa ³ĪEŹž2@ōÅpš¶¹ń+Äŗ=ē†Õ¬tM7ó<÷ŒĀC;?.iŅŽ¢’]ĻoŚ7ööųū9Ē{aįķBĆĒ“żómƒ€]ŗ1_Ļ’Ē?ŚæāÆĒ½jśóÄŚ½Ķ‡‡å”±†ą„EĪvąvÆj-51œ‘órČb‚4bRĢ8隯¼LŒūž_ÖŗyT ·-ņūŒšéõ¢QøżóļAĶ9tLHŲžj–Üy¾M¼õõ å©!bāl¬L[žõ„{‚•F<ö pge¤hĘņQ–Yˆ¾Ž‚½w@š&nĘ[ ×<+ŚėŽ”ŽŖq>–ų)ū6üIųóÆü4šĖŚ€ŹgÕnā+ ē–¹ÆŲ߄_±ÆĄŁŽź ¼wyÅ/ŠÓŠĮ ‡ŽÕĄąķ‚?ĘøjÖ7P>ÄŌ¼ż[ĆŚ—ü%ž"ŸĮæd^ŪOņ‚‡?ÜŲ8¹ē­x—‡×Qń—²čVWpi«ņK{³j²śśćė\ŹW-R&±×¼ šćFÖį×4OųNoīŠ]Ź{lO÷pŹ8®OJÕ®ŪÄßź)xbx„ąņ$üŖ”™¼iŁŲźoēšÖ·®\i>“ø” †+‘Ļ99V<^[­é©aŖ­Ēˆ.$ŗX1Ūäa_Ÿń„)÷+—]6Õļ¼AāMZDµ±]'ĆéņĘĮ‰Ą­k@“}:×M°ŗ½o˜Ģs½}ų5Œ„Ų³9;ūä–G:ÄŒ¬[#˜¬čdÖõŌŗ‡Gō-4Śņ‰8QŌo׌ Ł#Ć&js^x‹Z¹¹µy<Čķā]8ū¾ć­dān¢v^ųaåĖmVž\¬»~@lūWŲ ž ė·6-§Ł¬°¦•¹„c%rī}[Ŗüµš®œWĖ“»ø6ōł†qŲśÖƒ¼}<[ …z¦xČō>õŸ³¹;[« |?§ÜŻj/ǃÕsŒWĻ7ō»»‹k6–āū^š¦Čw{ׄ¾!Ūkó\G™˜HĪB©ļüėčm7Ę>²k‹.=L`sl÷„ģŠWāßjŁ^¦&Ÿ–Ė#ÆŻöé\ö©ć]rĪ ·µ+名“t#æiĀ—R¬x-Śź~)‰ŲĘĖrą²:öŖŚ?üU @gŌÕœÉׯĘh’°eŃō.('øŽ%P2ćė^Ńgā=:}m:m>ŲĘF™ä#ø={R2Øģp²Ćwpg–ŚŚFesŠĒ°»ŗŗ™W…[ĖqœZӃ9\»ÕµģʦWV@C&:)¬ķUu››•“ŗœż†UåFyŪ cR0ļ<5ies׌naŒµøwõ® ī n[¹#6V×V›öœ6NÓ܌UøŠēo¢hö±[,A*ÕžļŅ ń‰ØÜYI6—#Ćrø ć ć±ˆęDކōéšMŖÉ źżg—Ŗ}³[ģÖ·r“K;%Ā ąwĶ(篼1ŗāÖFg#hüź…óKi ĖgaĒN“ ēāoĆū];ÄŌõ›]8¼Č:6’Hł‡Öŗ½öt‚[9ķ‰ŒüØW”{jl„¾US‚I<łŠśOĆśÕ½­¢ŚŽŪ°Ÿ9;ŗŸ”©”¬YÜ[xĘŹ[k[ī"M®ĮUĒ#ŲU=rćNŌÆ¬•ä3]£Üō*O§ēR„©ĻV:œę¹§ź¶š”–W÷†÷O,‘«|Ā6Ē8ż?*ßŅīa¶øeøƒĪ…æÖ!į\zNFżžÆ’ŚĆ œqG÷TEŽŁ"¹ėķ6ßķWšĢJ–ײ„‚Ÿõ˜éųņjJM˜žŌüE|ŗĪū‰ę¶Ä©“×Ö½7OńH±æ·‚hƟ#ÖėųP‰’ģių³L]oZ†Ź‰'…ČÜÅ6†x®æĀ׌ ń¶–š“¼q¬BDP~™8­ā¬(ŹīČōOŚįö›ā?ųoQ°¹°Ķ…ĆČŠ1\3ō_”LW[.…įx¾9“5n,’OĢQĮĮ+ĒÅN×5OCóśĆĘwZSĶadóź7p0F™Ó`'=½}]šŪPŌµė ÆØķ,ń†}ŖdĘŃĒjĀj^.[”x‹€ä?<7Żż+Ł>/|S}į’…4‹dM§<‡Ģ·ZS÷Éėҳq¹¬bxĮėéµ-b ÆÜy–óN¬+—hÉõ=ń_Mü`°šg€$H“@©¦Id’7ł÷0ē`sL$€õXķ§ńVœ©©'‘rž\ŽłĀœń·ėšļž#ü:_†—–1O©¾”g{Im#pčAéWŹbåÜÉšģöēÄV{smĀ„ĻQüėźˆß ķž(hzˆ$Ō4µ·Cµ—$Œ‚wĢT“k 3į×Əų Ņ -F6ŗ»QäĘó· O½zži:öŒļ¤ż£MÓäŚL‘°![Üö©r±­ŽĄ/-"ŌV÷Z“]¹¶RņŒmĪ˜Ø-<_Ŗ|;ų‘„hŗEٵYёŃĒĖ0ī£ŌśŠ\Ėaœ‡Ē€š÷Ć±Õž@¶··,ĆP¶ ¹™Ąį׊ņzWå÷ğ‡'š&¾|=āėc¬2ŠšÉž É;ąyßö ń“œĀ9<|¢ÆXNtė«K=­ģļ"}ČĢ8Ēz郊‡Lż]ųāŲüSįmPŸQ¶–ōHmŹDłŲAėō5öψ£ūnƒ$uö©1“ž3õ¬k»}b—1½©Q$O•aźó'Ä- TųmŖjE»Ūxvā5½²w'Qšņń/SŠĆØ­Ļžü_­]fŚiW÷k™ņŹc€zŠō_€õ–§o­ü+ÕÄ'HŌ”2ZyģXC äąvĻO|ÕŃ×FkʬZÖoõ_‡õ®»į™eŠüaįūŲÆtėČ£ŪåģląC“Šžęc_ŚNż±æf?…’,ī¬ÄbŃ,õĖxXµ¹Q‚$G š¼+Ŗ7åŌ®d}ŸįĶRmžŹö7d’6®q‘_^Ė{eā 5;@Ņ&3Žź{ŠŹHĘ[žß·ĒģѤ~Ö?³Äσš¢Eż¬Ö‡Qšå̊ °Ō"”£FN:v/ėĻłŹxćFÕ4+ĶcHÖ¬®¬ Šå/­aó'Yī˜ŹøjĄŚč|Wū@|.ŌõŻ6×ZšĪļųN“2×ZfÉ }¦,åā'éĻ’Ŗ¾ńVŸ¢xšöā-BĘćCŅõ[_³ź±ķĆ[\ķūį‡ężOjä4?–ų(7ģ’}š×ĘrųÆKÓīģāóü­KĪ8s…`+ó®KiÉd}ŖNIk®–ĒDc—&`ŠAVĮÉéLņ6#±a°{WaČÉŚķı¹äd†õĶUY¤+#8'µT{“avƒ!ē§zø¶kä,Žbœc46i„%†0Į˜sģAė>Ię,Xœ„I±S°!btĪ:Vż…ÖÆ„ź~דۨćÖ4Ū“¾µ˜9WŽD9#·"«C¦ŸŽ§ügö«“ö•żœ“imum6OŚnø"›ŁÆbš œ²«¹Gr+öėþ(²Öt}+U!Å„šŚū†<¹G۟ēXÕZv;+[Č-¼Ū&Q%ä#vR¾¢¹ˆ^š§Åų»įæ‹lV’Ā~!°›OŗŒØm”Ō®įžA±¼łG[Ģ›Æü/ö\ń7ģ¹ńóĘÖķ-įkHŁN`Œķš­ī€ž‘1Ļ®kį­ĀX×ģ²ü²¹jtŌ™3Oƍq£ėWڤeŁĮ\Æ qüėķ…ž ń/‹/-›AÓ&æ†Ųy— |”Į<R rN%&®{WÅ’‡šv³įi§š¬s[xšŽ“ģęm¢B8õ?ZųGIų/ń;^³Q›Ć󾚁ĢóÜŠ3ózqަœµŌrĻ¬¾ųģķWFŌ£illĄDmÉObkč»˜„žEŒ¹Ź×«Jw8źÄźå’ ¬ˆA±Ōm÷5…¢]ReVżįcžzW]3™«hY¹{¹Š4ŽŅ89żŚžÓWøŅ)7»(Śp+AvZuń»“÷ā[yFBćīÓu™SL²IjĖ»nAź(4ƒčs«`“Om6Ł77;Hėļ]ł}OY³‡M·½ŚcqžWރC¬ūMy„‘Ąä°ĪźńVŅŽg»šŌ"Ė+}£©  öšŒšiėE"ŗN€’zw†®/oŌĒpĮķ%=s‚¦€±ē¾;šüˆ¦²“¼Žö”Õ»s\Äi;’#Mʃx픵 i²¾¢“;7’§ øļ^§Ŗ4ŃŪĘ 6Ņ8ćµę<³]¼KkØķČo1Ō° tś×K Ē”måM">å9Ļsō؛'œŃŸĆśrŽźŻdz`c‰|?d~×n7½w-Y;=»Nšń?‡HŅļ­“żqTJ¦~V_öqė\÷ōżOCŠéĀŠź<»&kž©×E7$‘äž.ńŸ…|7āvž_*Œ¤hA>d„Œ/ē„|­»/µ ˆķ/&;ƒtĖc sé^mUŲ’Q19—¹Õ«šN]J Ä·y(ś€Łąē#Śæy 8±ŌmČWÄ2FĖėņŅ„ztqmµsāķJŹŽņŚęĘŅÜb'pF1“ƒĪ*„öš†—ć½&÷E“ģڬ^cĀłåH‘šŽ1±ģūNhJ/fk|;ų—āĻ…>;ń&µcv_KÕ$ķ+v9órs» €kś*ų āß |\ųG¤ųGÅŚkZ”VQĒcwóā?rAžqŽź1YNó?Ņ+†T01ĶpŹŅƒ5»j“ł6—§”üė’Į]?a]öaųƒąĻŚÓąö™yašĖXŌ¢Ó¼_¦Ē—ŠĀč’Ŗø\œ…pĄ®:øÆÓ¾%j¾»ń¾ŸŖ‹iŚdV7 ¤sĒLcŒWZ Hö¼0ā¹ē *MŽP|’õV·žJÓõgć÷ķĶšWÄ|{iūEü8·Y|ā ±=Åŗ’Č>ń¾ün£¢±ńĻ„C |v¼ųƒ¦č7z»¬ņÄ$”޵HXūzqv>‘šµŒw>$µ“cž,§©##šģ ÷Š|7=ŻŽŠ.ä©-Öڱę±ö9$×¼ģ}ū ų—āwķńzļįg†4GŌē:y¼ø_¹’ĘłY°É’ ž…£żŸ?g/Ł£Į’š²¾;ŽiŗžÆm \üгą~īŽß«¾xĻæ8ė^•~1āß×ĖźŅŹ²ķq¶ņ»²ł·t½=‚tŚæć÷`øšēĆ vēį×‚Śśc¢X-¬bębĒĖ„<ØĮĪ+ņƒöžńŸ‰tkZ—_×|EqćˆK-ÅÅŻōŽĢłė’HėéZĪvGŽpw‡X,¶rÄĘ ×ŸÅ'«o®Æk½]Ķi¼CŖ[Zė°[I0”N·ˆ[‰‰;‰o\‘\ļߌ~<ųgo£[ɦC®ųwI¹7 Ÿ•Ņ.® £żkĪ©RēźT0ņ½Ļߌ×ā/€ümūųsĮ¶zv¬§Š¬­ļ쮫$ė×Ū‚Ī×P»“ŌV[›‰†ötUeIčpÄÕ9Ļ Ē[Z¦ŽŒ¹—ł}év_ažįnē&|°W’|@š}•ŻåĶŠ-%”ŗņ1\uiÜūHŌhĄšßĆĖ-;įūXč:Ąŗ‚)%øUo™£,Ēpć·OĄU]WƉ£ü8¶ų’5™-uoģ¹ā•$›ó$W ‚¦6ȗLÕ$æxćWUWćµ} į’‡Si>¾ń-廽¤1łņ‘Ćm'æ…Rš[=™ęVĪK²’ūĶԘĖ-¤Ł1øŚ;S½¼:BÅ{wmæOūķ§•ZµTų¼VaĢģOāeÓ“øģļt©[yæ¼A €ćæJå“­5<]«Į£‰”²¹‘[Ėwį€${g„tĘ”äÕ«tcXhpC|ŃImōÆ 9ēÖ¬x»Į·~%Ö“č|'«jv>0ņ ÜŪŪHŹ/-—’® üŻ3U);”µ1¼ö }héHķ —› hL¬ʜ0 yź GįķSXń/ĒÉ~čD‘Ūę$GPĢ£;GįÖ¼źņ>^¼cd~¢x+ömš‡ĒOüGŅģ/“łģ%ÓŤślź8`śõłõū9x6ź|Jų/Æų„]x«Ć:„Ž“ź«z‘9ē=ČÆ"¢9©c­7É~æä{‡Ä^i¾Õ|Qā \\č±4ķ„Ćä“ß§ł×~ČÖp|Xų}«g„@"ŸQh‹ÅĖFGš7įƒQJ׊ö)ęVŽē™~Ś£ųū@Żč7 ‰ā .-WG–dÄnĖ•– G‡ŹqןzłßĀzō^»$…³½Ič;׫IٟŅü™ŖŁU)ßŗū›G±žĢ^5¹ń·ÅżĆš 5ņ-^{xŌŅØ‘źzń_­šXéü~xæA³ń7†ļākIŅhĮxCp “é×ŪµzqĻƧ˜ulž,|’’h‰’/®>Õ§ijÖ7 ŁĶ»å‘[ż 8ü+Ųµ;U†y£Œyj¬F; ʵ°ĄUē‰É]!Iš 9ńY—nū_Ś>n3Åp§©ėƚdŚ-¬6»ŪF°<§œgŠ‘^½į Lń ÷ę lbh\Ē1 ”.TbF?Ś›×]„£cČt«ųŠĢ¦xhfx\+’ņĻć^‰§Ż2Į ț•¹®Ø>†5¶=—ĄŽÖ>#\ xwPŠÓWxŚXc€%*7ē¦@ė^ń»ā<’µŸµķ§Ų®4;ū"Elīw^ qčkŖ/K5ĆĘUc7¼u_5c“š»Ė£m, "‘· Ÿ„y'ʍ{ jęņ{l`Ÿ÷ˆ#\(cķ\•āU*–gŹ–žˆų®EE‘6¾¹ÆoÓbø²ó7d·Q¹Ž{{×ŪE¹\å¼uć©ę¶‹KŠeū"FŽ >õć¶>9ƒOŗž}T¼Iœš”͜ŽĆSž×ÄWeŚUņ‹– Nq^am¤"ąsõ®yJē§BŽĘ” ’Żė_Ćśt^!ŌbŠĢšĮ<ī"BēIõŖ…;źz.J+S­ųÆū2üsųKį÷ų…¢É¤üNš…ø\’d÷`’Wų€žłćā ^[o‰oāiŽ+7_·Į>Ī<Į÷‘³Šƒė]ō©Xń1˜•k®_³ĒĒøüo čŽ×õ“xŪĖ“I˜mn1· ÷žµõ߂5-2ĻWÕō6‹ģw‰.&8ÉõµŲ“§§§‰5ķ£Cou&Z7qłtö®+ŚG©*\Ń>ŖŃ¾*üMż–¾%ķw²x³įeł'ŁŽV4?ÅĒnZķ?l_ŚGKż¦¾ü)Š|!&£e”čzØŌŽŁ,°Ė„'ž7æēZ*Ś4ŒŽU ’Œ¤ÆŹī½v>LŃ„Ā[ ¤&®j1ÜC*ČY0ćę¹g+ŸIF‘£¦\ķĀ»d\·Ä _xĆ³­ŒsO5³‹”šĄÆp~™„W¤{½ńŸMųļū!_xÄ «ń¾Tś|ÆĖ]qŒĒ~½3ćşübųšć°0›Q‚(&•BaķdDĒŽéœóÅtsžņ÷·™ńÅē€ō_YM¤k¶föŻFų¤ē…‡q]§Ā?ųsĄŽ.šž«āČ®õ_ Śäacę0ćö=žŗŽ-±å׏®~‘ų{ž yš×ą>‹«xSĄŸõ _Q‘¤k-Bi#A ‘ĄmĆ#ž?śõšŸÄ_^(ų£©\xßĘz“RźNϵ§żÜ*OŻ8ķ]_ZŃ#ĀĆ䎍iU“½’ĵ‰į3Ņä»šĻˆtĖnńŖÉ0,H=1ż+ģ’Ł»ć¶…¤I­CāĖ‘‹>˹c¹p0XJ¦¶gÆN›<{P†ĪokZ¦—v¶×w-.ÅU'©µmŻCg.wkws,“gĖuēü∳ŗ ­É¼ šēľ6K˜|?c&©uv«`¾=3Ö³ōūѦŽė¾ń’śn·mŃÜŁ]G‰";N¶GZĀHŚS[6ĒØIi­µµ»ł°—Č¢ņkŲķ#ŠåyhƎ†øjDpĘÜxnĪPL£ø<ēu-"Ś £+łųČ$żÓY:fžČāĻ„¤žŅŸQS!óNdNp}ńųVž”įĶ>ęĶm„%9Źõ5jŒj&ŽkWµ‹H+ūÕr;ŽR&}} šÅŒ‘‚2Äą­4ŽÕ,u&ĒÄ|aŹž,|ĮNF+ŌtĆ«,oAo†HČ彫¢}ĢŚ‘Ę FĢ<†Ÿ5ƒ–*‹ŒūƒV“ė™į›(ĪKtÜx­%,xōåĖ#Żünn6LģÓoR6ē€kĶu(_Rń=ģqģoŲ žŖ++ö±Žh¶3[¢y£Ū8é]ģ6·-å¬D•laJø#ŁK£B/\‹Če±žgŸ;Lj8ü+ė߄å֟ąŸCā?²ŪĻ-±˜ģc„8ßżjļ„(ٟŸæ ¾5ųÆ@ń-ķŻ– 5=漣Hę%łÜ~Qź+ōįWķąėĻé°ųŗŹ]āźSkīŪ{„tʧsóœć•äkń=Ķ‹źĘ’Mž9ķåĆ*•ĻįX¾+±±ń_‡m¤ŽļČÕ­É ŖÜ1Į÷ė[-v>>…h¦¤ŗPš¬śŽśę+ČJ‚æ. łÓā?Ć @±Ń¼a¦ŻŲ\“pÖóEøīEć“ļұ©LūLæ3åM4{ԊĪī-V#pJ¹=ź 8ļ-6Ū‡±µ‰€Ā®Jä;§]MŅ“=ūZMyɼ„sĮǽXńƌ4/…žń½õŹ?‰e„‹8T† œaQłŠeN'ēNš.8Č®ø®‡ŸRZ”µø^āĘēģó7aŲ¤šM|ßkįŪ»ūė’ķ$x%RG=’³ķV£Üē“g«ų.8“G…@AŒćõÆ]g·¼G•ęW'Ü*“&y>·Ūj/ūõh  YĮv€F£ĶĒŽ? øn`ŁORŅĢTĖņc¼ĆPšģvņÉöGwpxSZŲĘ{˜Ö’^ZL i‚†ĮćŠī<7Ŗ¢ź3Ku"Ŗ² Ö<¬’]g[‚ā;„µČ+œm=+Ļōįqu{&X¹ūŁĪ0+Eø»įi-¢ŽK{˳[XÜüÜą~5v]VĪŚ9 ŅGžĖtĶ7 ¤ŽśįDÆ,OŗÜóėĶkŚLn”UĪ8Ą©Œ,bnAo›[y² V |Ż3[7ŅŪ‰ćŠčBŒĘ ü+KĘųóEÕ.ŬŚ9髝ń1ē8’õבŧ^Ć0y-ŻOqżŚ×—BdŽ’;¹Ö·*…HéJ„żäE£A‚Oń*YŸ+'‰§øŽåLŠ%ĘB断+]%±†žśŚéŅB„EI“WCį/Žś÷ŽÆå²Ńµ¬Ž\E!äĒjš‹}e<$aŃüC ·iG“$®ø\śūf¢O”Ówqü1Š|E>Ÿ«Y\Śż¦o,8&R9<÷ć„EØi¤B4˜.Öä&vm Ż€Åc!¶|½ā}:čx‰šā1k$kžF7ƒéłU;ę‡QµiĀłcn;ńSõ0žēi>£z—VMpc“bF3ŒŽ™ÆOšfƒā›ńym%—Ūc‚0ŠÉ»?»ē½oLę’Ōė£Ō|ˆęŃļäšŚŻæÖ«’"³ĖĆŃĻYZŪY°<ŗälвNÆM¶Ń–ĀēNžĻ„]䱓w,=+Ķõ?ż§T¶ŸcŖ+„FqĒjęW"× 6öMj`üǽy•œw±A$d•Ig€3Ł«Ӯɉ%×1®šÖ_·ˆŅ9v?d}ӚƤJgŠŚUÄuœ6·^T揌ÄWŸ­qž"ńµ¬ ©h?*•ĄĒµsē5ą/Gs­ź ¼»hĢcw”¤ķ˜?#žÖ|B‡Ć¾Ÿ Ūé5 Ūuülfõś×Ld>{·ūU¬÷Ž)ņ7|„‚­łBęAFŪŪŽµ§::-H[+“4ŠY˜ēęõ¬æ¤V6‹Æ¤’0ŪĻ­>d`xՌP\®ĒV„øI݇ÆņÆlÓ“GŗR‘ń‘€IĮ©šź–™ww§ÜO¦j*ĘŁB¼D7_­fė3Ą÷±›9J¤³ÄĪOóķ\õ ā“: .;kˆ‹ĘćĻyN>†­Hßf¹ūDw3Ē>Ģ ®p1ķÓ5Ģ{żrņņt“C4ć&F9ŻĻj4I'“•–{‡žnX3”ՏKÓ¼aye4rI3ĖĻ-‘ˆĮ_LńMJŚ_ķ™/ąø”*ÉęS†>õj “æŌ~5)Ņm4=:Ś;‹‰6¤›˜Ž3ČĻoj§{o{«éńJ­µĘÜņµN˜Ī:;y-/&I"\ć#iėļVķõ[ĖB^bī:ÖNs:ó_Ō^yÓ¤ŠĄŚ0EpZŻŽ¦gµ’Ź}ø“23øzRQ°»˦+#Ÿ8蒮G¬±•,ŪAÅ2$Ćū0Y‡V >NNMgĖ,i)PWe¬œĢĖq\ 0y“[‚Äķä}Ć^•eį]OÅz÷z@-qłƒ ¹qSqØ÷ńŸńćē…F»įK±ŗm›¾:ķKīØšĻ‹æ<ū7&·ćæ‹mµ«ÕĶöӉ®õF{qé_†µ7üĻāĒĘóu”ųKæų%åĀ4cšxz|žäv®ü>nĪz“GęMķĢĶē=ÅĶĘ ņ±y ιĪyļT<Äfƍ¬{b»ģqNdrģb‚WłŌ®Öuć'§µ,ŖM”#l„Ž:U›u2|īHdÉļAe¤ŲHB#°­­–eģēŒŽy Éź[¶Ó ¹'šęŗ½HH©å² 9Å)JĮN™īß üāźŃč~šÖ§ć M埰ÄdO©™ÆŪ__šLų[Ćpų÷ö°ń|öń́įŠmß`„prĒÆ×ł×Z½čFŹĒÜz^­ é–vžųAie ų6&9!Ų’JƒūĪ:÷ļ\bė6>ŗidņ|žSs¼ƒŽƒśW+:–„į=OŗųŸā®_½tŲŻü²88Ą1×ü*†»ā]GI’ćIӓū?Lp 8VĒcłR±j]"ń.„¤^<2ZZJoŲįÓp&Gö­ +ÚUĆŲĖć‹ū Hłäp<Šl„ræˆ|o,ņi~ŠķģķŒöįŁ3œ;w¦æŽŅĘGūuĢ:ŻĖ)mÉ&vŸzĪh£“¹ū\–åŁÖÖŁNqžÕĒjW×ŗ‹%—†ō§¾».#iqŒķōk+‹–ē™xūÅæžZ\K«ų®Ū\ńCEh§ zÆæ5ń抾/|Nų•Ŗ½†Ÿ,¾š¾Š‰°²¦yĻpH¬Ü‘¼)Šž˜IkmstO&G˜ż{×Óų7«;[5¶‘ws+K,Źæ,#ÜżMa*Ęü¶G¶é_ =¼—^pĮĘŻöā¾¹ų{qql–ŚMę™Ų£³‚r_Ź”da)u=¢ļO“æQˆż› 01ė]²ųkĆfŚÖ ŹD•W2± ‚}ø®ŖHēs³>xż„ąųuØź ²R¼‹œ³pĀæ$¼+§ų—Ƽ†ŽŹĻūŹ&V߃øōõā¶’V¹¢Ŗ}æąöš÷Ć»;)µŃ,VļĘŪFā~‡šśßQ“Ö­,õMhī“éGīĘõŽŻzƒŅøg}lW::čÆ.[J{ ¢’XĖ  Ž‡Ś¹ÅÓ­åŌ W³ ĘBšĪåF]Ž“P“Ņķ#ÓŅ7dŹØēė^wØxrćXY é4ūĆk)†ßs±²šźŲiv°Üźm¹\p;ūŠƒPÓļŅd‹{ZĄFÆĻzø»=jŒÖÓ|Mmį€o#7Š6y?•bYź6—÷r™B±'8ėšŲä“;84äEňVFģÕ“écq3<’"”Ė’8SžÕ¬fhŽWÄŚUĖĄ²Ūؖ07 “\ׇą{™d1vRC])ܗRęå턄ÆCŽkŸoAc¾Žõ]UųĄõ¬„*fϊķžc¤q>[ęŚpE:×Uf™\ŗÜč= M‡ČzZłŚŒcc¬@ ęørā[k¦‰įׂؼ° Ķ»Ļ‚õoĆŗ3éČķ¬­ę*§Ė…ō>øÆ < ć=.ļNÕtūø WQ2#ōl’śėč9Dóļ‹1A¬8—Jt°FņEņ“ŽœŠĮś­Ä:lvW·W.ŲŹŽŸØōWń¬Ń^ZY-¼3Ū#†+'qžÜ~•ÓE¦Ķr?“,­šŁL ćhėŠQ²<÷QH¦wFdŪ“ƒÅmxt-†–4‹9䒯]ßūłėA“‰ĄxĪ{½"{› ³k#¦|Õ ²‚:Ż’Ļ5峞āģN‰-ķę †=X}:WL-ģ^Öu'Šęęˆ#GĆ)]Ē®1_aülų/¤ühš7„õ]:ķ­5  #“ĖĘ_Q޵RŽƒKšļölšĻĆ­F×QÖÆLIuVW$凷ְ>5hį{«+1”“O‘¬‘w''Ó’Æ\óÜŃTG‘č)©M4·““š8]Šż^:œÖę”oZŽØE4‘ɼ }¹ągÆ„@łŃīŚÖŚ­Ü0jA’cµA<ōļŠōgĮś9µ‚ź Rx’Ö18VöÅV8@Ö:j¾ ū"0;Ē«ašŻ|#y§ŲIÄŃ’ XdTśÓrV4äīyo†D±j°iś§ˆG‘ņg|qĒ'Öæ0’m x‹Nų™w¬k·v×1Ē3Ū c œ˜ö5£4“ģg)OŖ½¬šz–x„aøÓ9®:vŗóüÄp«ž2¹Ą®Śhq‘õĒģĆć¶śL·ÖPL?z‘²ląq‘ėšż„Ó/cÕt4s"yĶå\d6’Z¢¼n‹<ĪęX„‰Ėņ„ AnƒÆ„yĘ-*ټq­Eŗ†­’LxʼŚń¹Q‘łŁ Õā<#+³d«ƒŅŖ›»­ėHń ŖŻĒØX¾ņżīyĘ=Ŗ©.ŒŽ3v>Ö×āÓ>#xJń¾ŸĘūøqv‘’Ė6 ?^µś’2ż¬¬~žÕ“üńķ¶—ą[Xīī–·ˆ0gĶÓrx®ŹQ÷¹Y„7ŠžĮ¼Ug&‘~Š‘‚6QŌń*U‡ŌW¶üńj\}£Ć÷D†A˜÷ōŻXĖ`’īuŽ5Šg“Nšć@wĘŲĻ#„š\ļŁ |GÓi’é6š_ƒ|Béaā[xH-õ%ĪŁYBĆæ|dõ磹‹§®§óÆ­iķk-ĢrĄÉ°žŖŁō®BENĢW§5ŪOcŽq³˜ŃpU#É„I”‰A“‘óg­ łŗŸ1 †œŠ‰‰VČo ­#.rC¾łņøäŅ ī\¦Uz÷ÅYIŲµęw«³ éÖ®_iÜZ,–×WœL—ņĘv”•å ż@©‘½3żæąŽŸ¶Ž„ū`žČšƈu›ć'ƒ‘4_G0>lńķżÜŁēp*d÷ßųž¦ŁŲźZkϧ^Ė%ß%–Br<Ž䭹БĶxŗ ˆlPH$’{gå;sĶ~yüy²žŠ7 m#Ć>,Ó‚ŚŻ łc»Œä©žé$uö5ēKseņ’öøų5¢üXųq|ŗšdń<9±Ō¢u%jį%ē‘Šuö=ėłFń—…ux“Ľ½ūM̈́Ө$¾>Ģ??µ¤õ±œį”Å“ŖdU).ļO½IĢQFŹĆ,ąŽ„wĮhpĶxŪŽ>½j³nPBć=Ķ[FeˆŃ]Q³Ņ›Ģ³@3HÕLrK-³”(_'©ī*Vgl¦ĻAé@łµSx‰Ü=k[ŖŹüÆōĻ”T™śS’§żÆ.?dŸŚ‹GÓo4ųæįń%ĢjŅ=ɏģw€aYGL7Ż#¾kż¾xĖDń–‡ kś:7ü"Śčó  [;‘÷£`:sœtĒ„EC®'Š‘ix–Źī6 ĘOżDZ5•śb+»µƒW“Ō„ŅĪ©Ļ=Ļ©ÆŠæŁ{āŪxKYŌc’h”“Õtćf¤œ2;Č÷é\ӈā®}ńgą? é‚ ūūk_›I$ŸĖ}Æž˜ć¾żėėmi"“Č•@Ē=s]ųj½ ŖÓ±źVøŖ®ÄuŖ"ÕUäČŚNyō5ėB]N īdÜÅ4N_øļV,ŠZng'¾z×ASaā{dvV,ć€{ ·„„ž»3“Œ’[÷ēŠP4Aā2Ī×[¦ŻÜ \ØXW°x>ēFŽ[}>īŚÕnew˜HĒÆnō&aųŚ{yŽęÖĀ/Œ„xģvp¤nč„2ʁˆt÷½ŒGl”äĻŹsŽk³Š'¼Ó,’-Kj²ä3@>$’ĻSø†į ŹĒ°°‘X6Ū­Ō…‘Éō ¤śjĻcžIżé`W'Šō]?Ä2kv«4qĀQpŲēš ŒU-ńKĶy%Cµ\… rkAŌļā»ŽxWäS† N1ķS.år£Ł“_Zjos ŲßpøĀŠWMy y÷Pvū Ä=™ÕxkÅDĘɤøŹ‚N9Éų®ĪžļT’ś;ū™­Ģ"8Ūžż©—v7bŃ…Ž•§Ļr¤lC†#Ÿ§ó®*ņM&E’Ź a“ ¤÷ōę“3hĒ¢8ŻR“jé 0 d ę³tĖ8lÆ®ńHw‘Õ…RŠFńV; lt™”øEG·ĪHnõÜčšõ¬×Én xøÅ1œ‡ŒÆ¢ß:F̬Fę<ķ\Oöœ—„ĒŪī L€#“T.’Ę61äē©­8ģ p’Eą;¼V IghŃMē,`’HŪŽ•čvāźŚg’%…óĄĒQAŃs÷zdEZXePœÆ÷«•ū)øœB«ä°Ī Ph§Üķā³µ·ŅfŻ$M{€#‘gmgtĮĘÓ4gÓŠĀ£¶¦šĪĘßJ·̌0ķX’ŪK¦\·ŲQ³Āäį½aĪΈÓ8{o2j𑿅dBdš¤Ž rĶŻ’Ų/eÓmÖyUIŚ{ż+9HŚž’Mń&[xBÓĆö°m¼kõĻl ¼ÄłÆ^ųw©ßüńˆå³µ’ö×SVY±ó¢«Ą{+Ž{Ÿč½Jīē»Į7¾!?†ž$źš’ņŚēŹ7HX€ŠĖčŽüq_Ó…|geā ;[čē„K4¾ō|sǽU3ŠĀדńT–ŗOŽÆt8%?æ%¢`09Č•oųĆkcć­k3O¤éw2Ń\2>ń>™”õxZ÷Vg—xßóŚßźŠÅyČI¤A,g!—' ÷_‚“ŸÅ’üGųmŖiRĀH¶m•5¹h³f£Ó8=©HYŽQC0ĮTĀWWŒāāżkļģ~ä~ן 4ĻŚ§öEųŃš×NŽ‹½WE”Ś%Į1żžś-³Dū¤xėTų=±qąó³]£łš•Żä®9Šėo¼g'Št[ŌÖ5Ōp§8'ҵŽ$ö#ƒF µļ“n[ĢäGØ­ YÓQŒĘą<ņ‘ėDŖŻXŠLó’‰_ #ųtŗg‰¼ā)’įŌä"źŚ@AµŸŲq^a§ų³ų„šēÅD¬WŖ5:T/œ?ą]Jå©=˜ĘŹÉ³ˆų{ā ļ|?mt×gTŪ'(Žžõś[}®xĘ/ų7I×RŚ-7R€ZyČ ;ar ńōĒįÖøåWSį3|[µ‹‡H°ŠōØ­<’#’0IeČgņ¬X“{=SBŌmc“IõŲČä–_L~UPØ|›Äź|Ŭź6wŗeÖ Włcažß”­M’qŪJJ9<„zTdW¶Šģģ“’-Ė2żsėRŲiZ懾,|?ų \+ŪŪ$–š±é< Ą¼ē5­IYXó±54<‹ÄzuæÅi5Ģk©=ķ *F՗-ņ~%æ:Ńšf‘ż›ńQ>(©¹¶Öbq#ćī—žö=kŹÆS”ó•ćv}f浖‹ą‰ŸXŅŪQ}i„ˆ«bģÉ8äsҾ ųs'‹lüsāÆż²eŌõ-BKɋ>pĢŁČ?yµ'Šć#ķm[Ş/ńg„õ-[Õ?“4»ū3kq •Ļ”ź:WŃ?±WÅÆƒæ²Üsč/įķbćKœ,ŅÄɶąu‘sģ={ÖŖ“5†µc ö§ųŃķń_@·ŗ†=#ĄŚR”Ņd•0āG3’€Ž=«óļĞ›ĆśżöŒčå&0qüC "½*.ĻÖ8 1–'ī½~g˜čŚÄÆŁ“ćw‚üg„õ¹“ėbd$ÄvĶdŗ69#­\æ±ßĀžŠ?ōŸŠ~¼EÕ効¶YV8ś”aŒš•{øi÷=ī/āé`0 RvūŁų’ųY†’nƉ:œ6Qé›ķķ$e[²ØśÜWŠjż„VT_MŁīj«O”ūļbÖ+,£Š_n)œėZ4ņ³*żqŽ”•Qahņ*ó™öšZiöƒ`·L×UjʰI¹™ņŽąQb%deüJų?uį߇žųńįĀ÷փGr‘Ęsk6├g¹SĶičö2iZ›Cy— /NO ®Ø£…baRī/f×Ķ^ ń„„jvŽ$šö š_ZœÅ‡&šz‘©.›p¬Ė†VÆńsoŽ4M?0y7JT^ųĄō©œVĒ‹Uņž‚¢Ńć‚Öą‹«ĶŲŻŽ„Ó|y~ Ņ#·’d“PøL”čĮH®ŃF0®|•¬ŻÜŻ2ła+Ģ~!ų*ćXšæw¦^Ü[ėv€\€²`ȃØ_zó¦õ:)ŌŌń?…ž:žG‰äPłA‡fÉ=õæ‡5·*±uėŲÖWŌõ(Ō=GOœW'œóRüų£ ųSö›Ņ4?YŪ'…/Qģ^W’—yX|Ž}9$f»Øö.¼½ŻŁ/„Ž:øŠ5ļx X†)4„”ī#Ć­Ģl>VĒÓńäWäGķ»ū2’Ā ńgĘ:…d‚ _­X\-…ĢŸ~1č ł°=MvĘiX·+|:¹ńg„/"Ņ5ėK:ž9K,ĘS’ŁćgéŽæN~üNŌF£o}ā H^•Œ<­™=iŹ©TpRocģMgö«ŠtŸ†šīįŻ6=WÄw“ٰHĮĮükņ’ŲAww4væg’IŽiS?vBrq\Õjžī ÖęÜ1y§Ģ\©C\¾«ą=5o¶,ŅK ׳^X\© õé\r™ķB…iÓ~(ŽéžĀŗÅ¬~&Óüæ.'ŗłž;ņ_³kŗŃmÚPį q¶5Į ŌōōÅK™“!Ųv˜Ŗš3…"em’)<« ×Gµg‡l‡sÆOjƒ¾š­¾$³£„ Ź…*Ę3Ö£Ś8£ W¶“µ³½žŅKUŁū͘]äś×„Ż}ŠÜA \ŽÕ\Żz‘HŚ“Öį†é#Ģķœ <æ°Æ”¼1šē^¾šĒü%7 Ö-/–aSóĒ‘žEuŅMčy8‰¤zßĆļ üÕ|1®hž-ųg¢j^2¶™¤ŠāēžZ© ƒŒŽŁ«~ųyš[žƒ|Cā’Yæ„“‹čļKŒīŽr¼ą”ū˜|§ƒŅ½Ó[Ÿ7Ž©+5ś/ķ± |.ńēÅ Ÿ~Ļ?ćšvtäŽymŃaP”A ƒŒćœWęļ†#ұµ˜§8†@Įœ~©āye7(«'Šłž„‹”ƒ§G>z‘ŃĖæo=¾żĻ¬t-VŅż#•+ÆFד;tTū5ÜWŠš‡> 1tūŠĀś)Vģ{OģQÆX^xÅśv§0Óü_§ß‰A(ķl®sŸĪ¶o];@ü+ńn›5Ÿü%Ę9lµ6O•ēˆ§ÉęzyēŽŖQ9ŻGsņ—ūD&·åVe<žŻkŻtŁ€Ž Kaøs\U#cŅĀK”։Zē*Vč+žŌķeūDs“Ÿ(ąSYŻXō”t¹$ˆČŪ÷ŗu„ŠH$7ˆŸq —.Ē=XœēÄ)m?²-§øQē–hĮĘrÅų7S·½D‰VO7#<늸ŲņkĀē“ŪÄ'GQ1VŪĘ÷Ŗįk¹gY­„†4 »%{×D6< fūĻu=ī‰uį’ŁéŚ„ŗ±ņ%āHAōlē×ō®xSFįµŅ¬Ģ/žw¶rkil|Õl4 }]įŁßÄšÄßN¤öæŁ®Ļsi5³&Čś ?~æĻq_ éśV½kŖĻ«ź“I!cŹ”<Ę¦Tŗœ˜Ö””¬]ŸÜŸź{&ƒŖ:¼p›ČĪkßmļō*§į‘“Ēõ¢>ŽŸtßšę·YŅoģuX„ĄÆ|ÕōēĘh|iū&|UńDśī üLŽ_2ĪŽWŻ Ūņ¢÷Ż—éČĄü{aM}¦y¹–2J)Ē{£š{į–«5½śBR8ŲHdĻ÷ĆsҾōš¾£c&§į©RĢĀt=›ę®j²qV>C3®äšGčv‘h“ųS[Ōõ‹¦†ę [c€ĶÓņ•ÆÄĻč—ņkK«3–Ū(*ÄöJT± •ąå9I=hš÷ĘčÆtY’I– Ÿć²żÜVŸˆ£¶ń—ģ’­|HšķņČÖzÆŁ.m% 48ÜĆ£¬jšō‹r·["²‰ĒŹyØqks» YI)GTϬ?cؼ'ćcUŅuˆ,­äµ‰®aó‘7Ü: “×89Ō~Ҿš©Õ•Üč—išł®±O@mŲ$ dõ.źŅKI Æø£›K•“$Ó`¹¶wŚ¤²Å26ÖčĖžyśf¾ŗńg|5yš÷PÓmōū'Ł‚”įĄ#ę]ćœŅ“5Œ®~CųīāĻJ¹Õ.’E…RFs»­|…ń ēEńDfoķ3g²=A¬¤™jMg†ę½Óō»x­X›tŒˆ$ńR5ćµÜ7R<‰0ē$õ¬Įəž?еoiQų–ÖĶ™`W#-׿½|ä¶×ėy󚏿ėĻ5=ą·qb@ł›ø>•2•„Ž^ >Ft7O"ē=Etv°ŚŪ\y‘Čé ō9¬YNgu¤x«OŌŽkk<°¬€›ėZ({øę–ÕžÕT€89éYņ2ls¶zȰS䌱\«Ćņ*…ę¼` ó(U'רõ«Š°Œ­UķļRŲĘčŁĶAezքDy·cę G =3LĪO”ŅkšŌvś LŗtŠ^9Źķ9+ģ+ˆ²“›ÄŗjO~$t)ÖOåLĢʱšĀCzėņ„»ĘIĪ+Ž<1’š’\“åĢDnńߎŸ7B”Læųv-6S{$óYŰ>aĄ޼ń~Ē._&W`‘zŸO±›čkż+Mŗņ_ŌĒĮ?ŻźEji™ŸĪmģN6ć”õ¬Ękėvv6æc޼Čń‡|`ēœ×nŒ-9wC’3·‘LfV”ytØY Ż‘€r3ģOœ«0ŚWҶ‹ŠÓ•XŠĆįžo{oy‰†s»n<³é^Å¢”+ü=„+#Łŗ„¬*±ū¦³¼SöHš°‚²c!dŁŹÓe¤$?§„fIoµžqóu Ŗ… …#­h fU ć­c/Q{×·ĆŸ3ł×œł·Ļ+Ė*¶ųĻĢ@ćƒYŹ$ø…Ÿž/iZ5ģ‘mÉĖ–Ē^?ūÓCń†ģZ [[[ˆÖ,­·zsŠ~UĖVv.1čy˜ųµqØjW`¦¢ģVƒ ņ+Ö|5į +LµŽ‚ÖŁAÉŲ½ėÉÆ\ļ„Lķ—A†4!JēżžōŌšżÄ„KĪS'’NÓ^\ź]Ųé±=¦’ņĒp³£RpÄ|ßJį¼mām;ĄŚ[ÜYŪĮØ]`IĪC/Ø”­ØÓmóļ‹~4ź½ —Ģ[D†ĄŪč+/ąĄŸß“’‹¤šĒĆ_ ŻėQ;•ŸQø…ÖÖ̟ć2ō{sҽœ=>]@żŁżŸąŸßæekżTų¹ØŒæfŪ°H7ŪYääģŒ/Ģ©ōÆ×|-ŅõŻ/FŌ¼Gā gĀž x<…ÓōęT‰†#1õŽÕOrć3óƒįÆĮoƒü|ń~‘ą-Ä)h“ī’÷Pü¶`~|1€}+Ömo€ĻńĆ^šēĆ(lµ=fVi 䪟ļģMr:Z~ܛž åū(xĖöqńĻÄ_ųŌG§č÷–PŪO¦‡)#qˌńœœ×éż„Ź^ź6‹¦Ėö]'y%ä<ˆž½ kF“G zœĒšxŚ[ Æīćõ»­äŚŖ°ŻJč|-q„[h–ś®±4śn >g“+÷‡ o^¢½*kMNKėcŌ¾•!“f ƒęp8XÓ<7k.Ÿ֛7†4o;-mģĻ#Ž˜é^§©æ‡nģ~iŪĢłīä31ĒR1Å;—ŹxØÖ.¼?©Xkw·Ąß ĘÖņ£P+ų\ųQ»¾{ŪKM5G™å4sׁžOj@ārwz„~»7ŗn˜×ņ‡ÜśóX“]ėל»źŗö óDŅ -ćo”?ŗ}GµK‘¤/ˆ<µ›Ģ•÷øöž}+•–‡’č’®üAŖ&µØÜĶØ^<ÉāŲļŠśWĀß ŽāEŠ hnf$`mĮÅaPÕT]|Š>’gJސD%F£,qŽāæ@| ŗsųrēOŃ4ū-:£T’%\–äöĶsJżI”Œ};įÄ×o‘Ž\){W¤ŲųkĆZ%ˆ·øžäjx;‹( ģ+jhĘm¶K”"Ēo\FHÉSڧŌV9Ķzʃ¤Y(HäFņ@ūżėCœéā–{)-Ų}ŗ×Im:\Ł4F6ē'żé›Åhli6Ö:™šÖźö HÕ |ł9Ēa\6£ö ń¤Ņ’v„Ī@ēw½oö4ކe름ę;F8ć&¾~ń†«ß_CSÉ ÉĖāńĻįZ9ĢXŅ“ō²VY8=HĘMwW†Ä \“K<ܶģ}ŃY™6tŚqŌ#ŗ†%0B£,ŲąJē~$͚EĶī—,ĘE*\”23šč§I=ĪIŻč~x“ĆWZ$÷¶ĪŃÜ4$(ņĮ9ź+„šō³ų¢ĒNŠŅāøF2–RW¦kŲ Ē©ė±émw,žd Č0įĄ5•¬x^;{ˆÆķłQ’Ģ€ēn}kfsó…’ƒōļ]Yjbv²uDFŪv•čOóükŁĮśī›į˜gŌnāÕ,QLK2H0£éž*£.ār<ēPš~™¬x[W½ÓŒŃź „ŽHžaŽrqķ^M„]̈́۸ŻÕHp§#¹«LŹNĒ•ų‡ūRiŚé®äŗµr_p\퀭Ÿ ¤–·p…HŲpÅXpŽÕÓŌ‡-M¾»‹M&KO"#('f~^yÆŗ~ ėškŗe¤A ‚,eƒsŽ8Ŗ”ŒĖ?“µė½†™įķ[‹+OšS!÷ĒsĻé_ ź~"ÖõV’Nä¶%v$° Ū؊ēr.1eŪf–ĖKŽīX^d,”—oĖkSxŸPƒLÓ£¶šÖ9ĮbūĄhOcŽō¢O žŁĖŁĶ®Ü›?˜ą±õÆRÖu{››Ūģf’ÅT9“ØŚŖQgÕ >Iyš‚7Õü/aØčW+3-̱nqŸŗ7õ’š+_€‹¤jVŚźøģ.'‘mÖAņGƒĪĪ=*Z4Sč7柅t Lšō77S“wa!ƒœ}8Ɩ5Ā–ŲɾĻ4 “f2>\ūg½"“(<š$Śn¢ó]]‹ł18~ūš­ų¼3©ė>g³ŽMńF÷Ą€XzŠ3#Įž!ńŚ/ōĶQR[;wP7.I=Ę}?ĘŗķOāÅ„·‹,t÷·ŽŁj„EįˆĘʁJ'²ß^čŚ½Ž­-¤m^݆×~AŪŌ~=«ę?…Śn³'Šo¦‘>Õ£¤Ģ»$BCćœõā•…Źīv_ü!¦x^ƒĶÕb½ƒR‰LQĘ1ä1ĪCҽ;į­ī„ąók§ŽŽĒugåļŒJ2»Xd~”X~§%ń3S—ÄšŽ”į‘v.n]DŖŹĖĪįU¼£ĄŚ”ŠÆŲK0P©ĻVĪMO+±ZÖü Z@«­[y2I;‡Ņ¾zŌWĆŽ×ōżYFČn.•b?ČĶŠZ$MĻ~ų‹šóHų‘§Ų]ģ“m] C4D.r3Éjł‡Į?¼[šSĒ–öZ¶“©jž’o,< ¶Pu ŽÅ>SXj~Ķų-“Ÿhz~”į–s£ĶøŽGo–,ŽA?‡ņŖ7šÅLJVļTÕ,ŅśĪŻIHŲn1ļ\ÓњŲōæŁ’Äž ųe,ŗlö6²Ŗ²“sašy_­wžųoXŃ5[†Sw!-Ž0 wČü:QÉŠGŹ ų9*ź0$ZÜĶjЦ-ƒaܜ_3~Ų_f’„kNń<Ņ\jˆf|`ä Ž’żj6fHü„ń/†žĪI¶¦ĢęøČĄh¹ ×5Ó •ĖÜךˆfš’Št]b;˜ķ`ŠB²±MŁCü¹ūš·ā,·ŗ&™®XN&‰ķ;AU>Ćń¤•Ö„3®žŌ‚ķŠČŖ\’sŒb®N–:Ž™>“u’…XBH<*ā­Åt??ńjėš5Żę™u¤ŻCJø,0Ł,;ē#µuC{•k3ū¦ż€j=3öŌż”|ćČ.’ļƚMŖéŚå¾üĢ®œoaœņFī¼}+īO_K„j\)ĆÄĄą÷ĮŖÆ4¶ŸCėČ5Č|O¦  U~ö;üŪż¹?g |tųEńįļ‹4x/4½bŪt2YŽ &)öł±ü½k†kAIźžæÅĻųŸĄ¾ ń?ƒµż2īĒYŃõ±ž;µˆ …lzcššyātČb7t>Õ×IčpÕZ”|—l;ąc½Hńż™O”ē×™ĘTIXøŪŹÆ\œfū˜‡ž©Ø›(–¼“ŽØld :S£TYĘąŻé”šQ4)“-&qÓ„^Žį–9“ƒĘ@äTKczlż’‚U~Ś—°ķqįßėzöÆĮƘōÆŪē|*ģvĒ;§ū$õą‘ßžŽŚ%Ž›©č6ZŽ4¦™ul—–7(C ”q‘ČėŽŸ­aQqÜÅŌ."’&a…9WR8"¾BųūšŅŪā‚õŻ*}?ÄŗdښźN<Õ;Š~ ×Ö¼ś‘±±š…żęŸāæ é¾=>•üų•ā{$7• Ā uåČ÷ÆęWž gū=ųž#hė[²Ēqå”ŪslLJĒOCŸzšzI3 ŽĒäōńK+ļ}©œœ)ū³Ā2:ļØķŽ•źEčqN]ƒ*®Ņģw'šYWŹ@Y Ķo¦ęewłB2Œ¹<ūTų&åcœõō¬‡a#Ł¶³Čö«RBɆŽM"¢µŌjŚ\«y€.3ŒÕ˜Ņa**†cœ`”e›Ų¦‘#x–5øŒ‡G'rō Ķm’šCoŪ«NųŻš†/„>8Ō—ā[uŽÖÜO8a”ĄecČ æØžFÆ”×Ńǃõ¹µ;9fŗŻŌm®¢üŃČ=Gn•ŃÜŚ, Gb@wĘkЬt4O”Īėš&•©éšŽ•ā>×Ršī§鶝¬č9įu*C)Č#õģMžü‡ö3ŌdÆŚgÄŽ²Ńõ•šĶĢæŚ-öKÅw§9%1ļżŁģū×25HüĖŽŹI¢óm€‘óćµvŽÕā·žĶUu;ā 7Ø<’Ÿ„D—A¤}ĒāŸŽž"k-#^ŃŚ=4qĆ+ą••@ĮükįĶ_Ē÷z拵‹¹ēY š\}Ž ž¹®9R×SHĖ”öĮc—F}V}6źĖN.<«øF r+Żć]3ȽԗRµp²ŃIĆ?ŠTŃŃŁWTtŗ¬$‘#ŽOŻ?Jź ¶7Žū‘‚ŽrG_„{4v<Ś‘īW¹°@ØpĆõ®cS³īB\.>čõõ®äg(Ų~ŸbįŚ9ˆ OÆ_­zE•„°†dHŪķĶ˜šżæ—,f5yåėšĢ“Ōõ›–ņcu@ļƒA”™&”­Iu%ÅŌ…!c¹Ašźtż·–„‚|ą|Žō§ & 2ǵ—•~ś ONhąO”sŽ“0<ęį„“ŗ1HĆƒ“VLʌ…2ž¼u¤™QÜ׃H]A>ī&žŽ•ŽųSC{xļķ§D•å_“?ĀŁź)—r~;š×ˆ-“Ū·ž8ŽĘgļ9źN9Ø O iZLš›™õ —›š#a׎¹¬?E=ŌŖēī·QķėTāt0]OsnEĀ€3Š*[MB}6i…²;żŖDŸC£Ö/m5‹XēÄŠĮ¾\Œżk"'‚ÖbŠĘ”:cŁč’a¼¶½ÄńŽGŻ>¢»ŁŲźBēĢo'Ė8š²™ÕÆ-“żxB‘ĘЇ*pzb“nuŪXąQMģ={ŠkrŃj;L1$g©^^CåHč_„±v-hŗ4>"Šk8ļ§²‘ѱ"Œ•`¤’Jó&ņķuģÅóß“Lc’La˜ƒŽqS5”ŃŲ÷Ė}NXķ#B§å\¬©oŲGró³ œ/#ļW,£Ōź„ūœ6›įē¾{‰®æs3Ąö©ģ¬¢·„Ä¢9š@aŃø¬&ŗ›Gsä?Oq¦HĖēynn\ ¼W˜ų7Åל—ƒ>!|?»¾ūB†£2”Ÿ§óü«†¤¬Ļō;ļĀ3[4ŒĻƒžÕ|ć3ÄVŗˆ°ĪL®7ĀX®9ÆéįV‰·¢iŗÖ©XĶiqoöˆŁ&>££Ņ¦2=1³:ų*žęĢųŠŪO‡R¾³u•A8#ج/ü\ńwŽfŠ4› F±† Be‹(ķĄ2ć®GozŠö°õ-¹ŌĖū>ü`×u m?CŅt ÆL&ēŹøŌ6xńۃĶr fųą›ßŁź^Ņ|;ā(œłOw6Z&GĘW§qŪµ&Ķ%šA§NśŸ²Ÿ²Ģ?ž&?ü&~9ń$oą·UC›!Hµ&‘6åšył#óė_Ģ/ķ{š[žŪöÄųńš§IÓ.­üŚ„Zīę6B[Ż(rŖO;U‰äšzõ©³?š®Tpj1®Nż8®3I“Õõ„A¬N©q ņü+āÕϰɱŖ E›/į{>FšŅŪł‘öć>ę§ŃōØuM3_Ÿ[įXNčóє¼ū*­.ēŲSĶcĖcĢl¬“«’Śé¶q^ÜXO’-cˆ²¦{ēCF߯aėW·Ś£ÜPĆ9ź*\µ>·,Ģc-.w–z„¬±Ć pŹÜuę»ĶŃÆ$"&śūŠÖēÓƬu/ᛩ®g† ā¢y„glõ®ÆĆ½‚ŽkĆk(µļĮ>µŃžn.ŗZŸAh:v…ć‡Z–ā= u Oq³ķ2 t܍_übųG&‹Øųj8ī"Ō-”Üiņƒ•ŗ‹‚G±HÜų¼Ćŗ*|1ÕŃÆu ž3mtg "ŠĮ±ĢWīŽ“ąāO€“N۟¶ii ł(~ć¢żćĻCŠą”l~cœāķŖ9ļAceį­Bž÷S°¶–¤nėūĪŻ3‘ė^3šÆįĒĘ/ų6ćĒžń–ž’Kvöņ[…ø?QS«Œ³;æ ~ĒĻńoĮŸ5S»OŪŁĖ-°š-īd23“޾µšĻ>&jŸš[ź'HP¹“‘⹆!¹‹FÅ[ė÷zWe:¤¬sī}Owd.o“ży„vś6”iŌ0Æ 9Ź·ŠŅŗż:=Ī8æŅc,s“’)TÄ+UÄ\šŚvļHµ×<ć­>DŽżcv”µ6™yłY~1Uģ5ė] ģ7sZ5…ü ±;I<)÷ā¼Ś•ŃēNW7õ}O–8'Ło$ yR?\W!yo§é—8ŲC+r01\k¢é+šCłĪXĄ\:Øś­gƊ®<Éē7I†'·JójāŌu=l=#¢šŻų‰%Ž-VŹXm§/,ŪĄ1Œ÷Ҽ·öŽ“ų‘ x÷Qń€.Sƾ‡OŽęY­‚ČlŲ|āā“ĆęńRHś¬uG½é’ō/‹~ų[®KhdÕ,ŠéšÄ,¹(ľsŌ×ķĀķG_ųCąŸÉąķgPŅtƒh.ÖŅlFr¹åGLdžuõŲLMõ7Ī0ī¾ Q©³gäOĒæˆMń7ā‡ˆW>Ä{ -jĖNXŹWō[žQń÷ögÕ?c’Śā?Ā-Ņ?õ >č+!ßöxefW[øY€ļ€+ÄĮņēgŻóg±®ĪNWfxÜ!Äō3Œ®Žg†w…XŻ=ÆŃļŖÕ2м2Ėŗg%żZŪ»ÖäÓķcfbīFU Ī+ ;ø¹Fƒk¶'T¾€Kq#dŲWğ|M©xā¶µŪīkWH`@yĄ^Ćčü+Š©ęQšē³gkįŸŁĆÅ9šŌōZ“ŚCČŲü£ó:nŪÖømwį/ˆü(šGŖBŗ•¢±I‹0ŒrqÜW©ž•*šr²>ń?ƙ¼-ćŪø45ģ·.ÓZ£œ„ņG~‡ń®ėĆśå֍u õ¬–WLÜ«uaėY:]OWśA蚼sÅ›…T<{V'ü„ųšś=Zɍ½ž2nł›ÜQXõ!G›CģoŁ×ćuļĀzŪŻųĆA[U¶_0ī•0ść¤ų¹ń&Š"ŌõōĻ!hća÷W²žU²ŖZĖ—1će½ŚB$±·Ü‡!¶ Ēźj„¶“ZÄĘÜJžƒŠRØwÓĀ(Å-Õ“"Ž6“däž~µ‘m<£Q–=æ1øā²r¹Ńi…ŗ¬°® žõnī'( ŗõ6,ęā¶óęqå”Pp ~•RžćľŌō’č— jŃ’īčč{R•„£b­®¬÷חwŽ#Y¦É&ь±źkvŻ„ ģxę³s;i”Ņ]2gƒøž”£ĢeG<µŅG/ā £øtłn£µU);•NH?\W„ü}ų{§ųWZš/Ä?F‘ųS_Ó×ķV¾c†uPwŖö0®ˆ™åŚ-ķ’ź°^ĻŠaN3“×égģÆg?ŪÄ:U¼o5ŒEčį3‚?^…ęńø…9=‘Oö¢š„§ĄĻųCXC/öuōAVE?#ŸF’Ē«n’ĀPx›ĆZŒ<9$R,’zĻś¦«Ó§čy0¬§>ēgöŸ:IÄö·Ą§ī‘ķ_9žÓ_³ķ‡¼)qńGŽźŪLø¹ŠP‹/R8Ļ­/d͹ó—Ą?I¬jsųWYµ6õ¤ku Ī rǶ;×Ö+’OŗxĮ¬$¬\`šMl¤æšżģŗ¶‡ztżGŽ äąē‘Ž·~*ź=ų¦Į«_hš‡ˆ|˜ƒM(½¶ø·’Źõ%$ŪKņ¹P~ö5ōo‡µTøE•CźFzf¹&™ŃF)lz•ŒńJ¤ :šmŹ‘ü¶]Łā²·SŠRŅÅ[»8āˆ"§–qł× y©Aj]ź86rĮ˜|æZ|ŒäÆ+;ń,ž³ŽŚ8%ŽŻå1™ūžUćžń‡SxĆ:LøłOp*r»>£Ņµx䎯ņ›ļ ļn55x–$XŽŻ§ž¾õ“ecš{Ųå4Ō—ģ,S`ņÆÓņŖ¤ĢĮāŹ‘ŲāÆU0jI£čūŪć/ƒžkß ÷Ć^)šv©nlÖŪQµ&[8Š•>\Šyąō`qŠš[“MGN[;•ŗ @Ŗ½8’ėWD%}ÅšŠĆŌ©ˆĆ/znļÕG†ü§źÓ­­õ“o·vŁ'ćė_Aųą±ćėŪKK-F(|Ļ-ä™Å8ć&»)ѾĒĻ×ā9aÆ›£Ö|[ūžŠ? ÉńU¾›£ųĒĀQĘ2tłHš=Ēļ<+Äo™$š×Ć?†Ž ÓUO‰ö.atYYr8õķZ:M‡āŹ”¹ĻĢ/ü=ų-Ü2Éąßü»Œši2„Qé’9ü+ź]"ÓSÓō脾ŃõĶ'PˆVāĪXŲ0ķŹā¹źQ{›,M9½ßh>4ńŸŠe‡ĆŚ1Öµ]ewc leL ä®9+½ń©6©¢IįĶGĮ~*³ń*Cåtk„&O÷¶cń¬ÖF‘öQzXś7ąßģ;ūax·ū=;ą^¹ŖiÖĖrŗ•åŅYŪÄʇó9éĪæfžĮ6ģ<5ū*|SšOÅßé֟5ynīĢŗmļŚwį3R8 ŒÜ¼G‚³÷ēŸ|iĮa(¬.[UJ·4om’RMė¶¶·Ž~ižĻšL½CÅž/ų…mń‡Å:÷‚¾謿*Ģ]HYŌČxE@0~µė擟üŸąģƒį=ąĒģ«šžĖĒ:Ž›i6ŗŒēń*Œ`Č~y'#'šß•E]œY¦w‰ā|\2Üš’R“ž»mcłēų±ńŸĒæ“WÄMā§Ä”¦ĆāKéTˆ-#·‰F®=jʝ+( *nPs\j&īNä¹lpųzxxķ—Ż”©¤hŗ†‘®Łk¾žM7P·L¬¤ą§½v,ń¦»ć+㿦ZŁ”#- |³0ž,zę±§½”„ft¶ŠĘĆk ‰ĮĒzčt}>[6óNwu Ž•ļ`£²?ĪOųƒėüCV į„h/–Æ’&lō“¹kT˜ŚM‡ū„GūŌŚ~›"’§33șÅ{0Słž®å¹ É eVrqœVQŽ>YŠ' ‘ҶŽē ™ŪųsÄ6åŻf“!G<ŲKéon[l …÷­Œ ·Žl0J‘/PGB*Ć\[ż’+ŅÅ%鎆¹Äs:ŹĢUn"ā9‡<ßCŅīƒŚ‡čj™Ü(Ö4$‚ĪŻį)?*žĆó«šŌW¶ŠŪ½Äŗļ‹"±qhfĪćī4”]Ć,qī;ŒŲ ~UĖxšÖĀĒIš@,ƒĢÄ$n\Ņ•Œe”óöż¢ŗ°Ī d±é*©<õ½ž-JÖxaŠqŅ!\õ_jŁD“ŌmŌ[ŖŹ‘XŹT9ėĒZóčb77QČ.müĀ_ö±Óõ§bdyū[+™cu'-žõ§įZnžŲÉK|­×ڱoSĪ»āØ.§—SC嬧ĢĀöö®bMT]Xäo˜}Ž™¢Ćåg9|5.ŗŌ5“µi{R[^ιž g¹zUr Eš’ ¬“ūÆ%Ā]ŪiÓ4¼o^W'ŸÖ½ĻÄ~“ĆĻwqć+¤ŅōAh®1‘Ó©·J\£ägĪ·:†…{Ŗ¼v¹”f¹Ļü,>•vĆN–IĖ_;KjĒ’;{~4œl:«‹RŚ®čŸ¦ńŌW„xSĆZ\¶ńIwœƒ·#q8õ&o¹CQšāI,óŻ–[h ·äśžµĆĖ$1E=†åHI$*œ`Še}2{‹ūYA³Š9Ż_ķŒÆzźōĻ›1›TpĮq’1A²]L¼×įń~™pŚžŸüoĢŚzztÆ HŅĀńm-m§Učtf£. rźŽw“ūAX\a”= iiėqäs[ÜĶ1ēŽ@:˹ÖTf”|¹ģk–ßQ·œ“OjŁłłĻįŚ¢Q°œ¬Q»būcTIä‘ȬɣžŽu\/”Ė–łzŲ©3^ŚžśŲč(tĘaĮ÷©žõšŪå’=§Œ“2)Üj1„,óT`ē§¹YˆeŻŠśPG“īā*/ĢNI©Zh°Ag-…ōóŽ-20ū§ŲŠ%3Qū.ę {“M³·øÕĮ“°›‰'éYŹfэĻJO ŻAjÉp“Ē pļ\#xvŪKi ½•Å«ęÜķźy5Ķ:©ĆÜé¼3šśO¶Ųźzl#ÉE"2G<ćßA_ExGþ.Ō.¦{Ż@]ŚĆ+å€÷9ķ^uj÷:į†7ʏß} >Ć÷LC€}žµf;Gŗ»4(+Ė©+1„c¢Ó¾Õo° xī™ųżįĘįź+”³ńęį½7VŃļ&±‚'Fm·į»ķ÷اBģ¶“üOńÖĘõÆ-ōKgĀåQÜp’īšł“U׊téüIƶ 6Ģ^IFģa@øÆo †QՙÉō?ddĻų$n­®¦‘āæŚrśėÚd±-Ŷ‡o2ż¦y’W!ä qĒ­~ÖųWąēŠük¤|>ųEį ü?ųeo KŃtĀ+§NŒūĪ2}*ė0s=u¾)ųį z'„4 Zx»Ę:ƒ˜mu‰müĆ uÜAĀŽ½yÆ<¶ųeā]_V‹Ä“_Ä}BĖmēŚtōӛmŗ’ŁE“zұgŃ!šnµ­ųX?…×Ćś+Ųø–I>ĪŖ×Į'Ļ„r>Ń ÓäŃõ ¼ŚĪŖó†ó÷|±’{6œi™:½§o-ü ¦č*5‹ķŸ݆ó-ܐaaļü}+Ļ– õ"ćtPčvP«/Ģ@fķĄ¬abyĻŗÕģtß:ŽÉ ń& °Jå¹ķW¼G}o£éÖz®³«[^Å!ČY†ųųū¤ŸZčŒęy»ų¦]x\-‡—§XD‡Īg™cÄyūŁ$gšÆĢoŚöõų%ū:źZͧ€ĢŽ:ńĢŖdĶG Ż7¹ęŗ©Ń¹„åŠüųżū]üiż¤|Kq«xćÄwv:"¹XY9H¶öwZłpĖ “³ƒ‘¼äć£Wl –ĒŠÅ”n`æ.iŠwE7æj³H›,cd!}ięŲ¹G1æ„¶)„;%•—ŠföpŽHH÷ RŸcN ffžf‘@Ę}ŃWmōń*FpvČõ „ŽÓMŠäqmu°_;ą¶=+ķļŁ‹öųŻūLj‘·†ü;{į 6ėS¾VŽ8Ęydćę>ÕĖVVZ›Ó‡sś żŸ?cŸŁ»öX‚,4M7ā—ĘFĶ}u¶b²>Lē=‡>ā½Kǚψ/5K=oÅϦiz<,Piöæ."Žī;õĻć\3Ōģ§”³²Öž&Xßx‹į°ŠōĖBĶ42ˇtRA ž{ēu_x+ĄźĒH][^ßžģ†GFĻOq҃©@Š ż/āŽ›ŖėW~.½š®­jD–ö·)r;ąœūq\ ¦µ©Ē¬mŪɓ\/GėN“rśŽ”įølģÆ5e–÷[Œ”ĘģDĒéŪ85Äyx‚Žā{«”ŃķĪq†ĮQķY9Šč¦ś’$ e§8Ōx{g5WW’ŪK'æo¶±]ź‘|åO”œÖ\裓ŸMÕ5ømē¼™to ¾LęFŲģĀŒē?­x‡ž$ųwĆdčžŃ.5i˜ÅŹ«āĪqž=ĶL¤ilł3P‹Ä>4Ōļµßė:“²¶Å‚YŃo”ū^›ąļ„ŚĶ\Ćö#ęŪĮükžs°åLś§Bų^tåŠxÖ8ōüq#.ӏa^õį="ĖI½³“KŅ`ŗ˜™å]ąē¾+nĘM4}”ų4j÷ķp¶Ö)+&J`.}…{“¤čz ‰ķ…µĒć¹­”Nāę;­wÄ;4¼čokrń‚ĆŽ¢¼ŠMAµ ūKdŃ˜jŌQ“č_Ń57Ó„DY”tē ® jÕvÅ0·¼ø^Z yśWDQ‰u#”Ļ ±±‹O•FŁōoC\¶µ0¾ŗ¶†{h&h@@Č eG©j‰æCk[Ölʂś{č֑a~]©ó¶©Æ›&ÕQļd¶žŁįŚ Ę=3YO±µ7„űkG™ö#D¹ōéōÆU:Ü’Ųėl±¬ē` ĜŠŹK±gž\X»»7ōČéWæįĄ—6ė \Ę„•ϧ‰É-ēˆoµ{:m#W†Ł\rŠb"¾~¼×§cGĀJĒ>į•ŻŠ®FL¢hZųāÖ_ķ‹Łś{· Œ9<ż1E棧½Ź-„0„éņ>µœ“čf折Ī!%‘v õģ*Hu;C4S~šē¾4FżGŹĢÄæu’cžš‚3Y7w‘¤[w•Ėš®kŒ%×ć¶‘bŗY™°„P‘ZqĶkré,ŠŒ2%y«$Ÿ_Ņ“ļŪ+6"‘Ā ‘ČČü+¦Ņģį‡L Ė*Ģ8(zV™—6§ā}] ³hlcŹI §'ńÆ ¼½ńV²ŅkO.fR8ܕ`Rq]ŌäkCņ[Ąś¼¾+ƒJÖüOw›Œ<¬FÓß<×oØ\ųb=`G`ūxe|“Ž7gJöjE­>¤ŒŁ®H‚ź;GŲY¾ótĄō®zŅę{‘5‚LČ%$ē;°{ž5Œbr9ö=£į§Ā];XŌgѵĶJ[4oŽ“ž„z<¾šĶē‡|=«µė®V4|‚ē±­U…Ī|ŻšWūĀž,Ö<%Æ?ö”…`aĘüä{Öw|c”ŽėV?dIbVq±Ūī–õ«ž§e¦Awį;Č ‰ «)  ūyčzםܤ¶Ku„#\"€ł*JķļČļZF]Ɋģ}/šĒE²ń‘:Kċ} Žœ\x?OҾ¢ų[©h’ f¾Y—“$‹ę ”`08ĻŠR™p¾ĒŅ^(ŅtÆxVK!­Ņ[Ō|yˆ/+ś×䧎ńŌ÷$֏{ž¶=ܐ öéÖ¾æŸā2kZm“-…²„–D' ŌŹ²–ę¾ĻSÉž č?¼+¾²Öڵ”ąŚ‘Ź`:ł“Å?³£&žf†£Øjqī …nųöøĘǘkśn‘įM/LÕ5ā#ҁņ’xŒĻJż^ųeįæ ^ü1ŅuČĆT“¾P„6Œ:•©ė‘“śS°Ļ†>'x& xĻ^Ń­Æbø°lĻhB”`­É××ĻrxbM7Rµ¹ÖQݜ—‰ŹŸ»ßüō¢Äsžõg™£éÖ÷­©Ć-µŚn€1čcļÖÆų"{¹5-Eķ^ӝĮŽåN;ž94ęx‡Äx†½Ø_źĀīa9šÜ‡Ļ–2pśV¶‘āMk\Ņ“ÕŌses b° …_z ¹Ži:-Œéu{q4²źB Čē0Ļń«¤Åż‘ā½3[iŚ[x˜ł‘ķČ`}’ dŹV;OˆŚö§ńģü? Ķö+-ĄÉūĢ=üėĮ>0ü.ńTz߆4õ‡Q:5øFaę ‰ ēz‘ϲÓA&BmCÄfćOš{ä¹·K)Óų‰ż{÷ƒO“ńÕæ†&×ō½&{­6źŠÅ,L<˜ūܾõźŸ ’kfŒx_Oń=č¹ÖīäW}ĀCŠčMl…(ŸyßŻŲź:v¬%¤Ö–óF|ĆłśW|IšŻ’t6ŃōĄo&ł¼Ø dĮüjfŒ‡įĻƟJ×µ]U·“OŌŅį‘””a—‘ī+ĄµŪ;x˜J¬ŪO;AļD€™ŹÆŹVĆ<ąWÜ’²ļÄČģķļ|{m Ü61Ļ—~ųģ3Óš®ŲĘčśŸqŁģbĆ8ĻZé4ō‰É:«Æ÷sҹė.…Į_ńÆĀ6>2Šc¼AoīŸd]…ƒŽzśŸ›ōƀdŌķÆ<»(mę ŽÉ»a"¼ī[=ŹsčT’Kū+ū »)d²»†U‘]Tn »Ļ­}Ėāc¢|bųucÆi%ljģ-BLąÉٲćžEn$śŸK’Į?k‰ædĻŚ¾?†ž%Ō,ģ~ųø‹Æ:\. ŪŒ1’T’¼}+ūdÕto쉒h§K˜§A<§üµˆō?_ź kQŻ&L·=?ą÷ˆ i.ln%ņћi ü&½/Ēž³ń‡«čņöŻE„cŃXr?Zä”5Š–šYļŁ/KšÅö‡ūDéUÜ÷O„x§Č€¼VļŅ)äĒŻ¹éšžmuĶ5ģīgVky`ĻČńœ†¦“¢­”…Dr ®ŒģA9į})ųŚ €½+Ŗ,ć—qŹØ2ņ®łŌ%‘ ©-nŠ+ʲ¦Õ2mÜc©Õg°–WĘrl ®Īā~ å[Īc’rKF”ßB{‹#yiwdI•XM’Į'š{s_Ž_ü'öŻ’†žżš4Ƃ?5Čįz|=…l.!wƬpR/÷†ÕU'±^~õbīÓG\^‡ī=ö’ėpźŲh_‘\.­„K‡‚ā?™23•ōÆ6Ŗ:#±šŽ|9yšēāœś¦P|:ń:}—Q·#1Ū\ćŠćŒ“Įõæ:?lo€v^4šŒ<9}g§źzŽ–Žóē“qdłŚŌ.#YĘV"Q?’‰^›Ą>5Õü,öRZŖH^Üć!£śūtÆ2–Śg64YČ÷ÆBœŽJ”Č™Ø‘ōØdYˆ8)ž1ÜzVčǐ­•Āī$‘ßҵ“č"»†ä²“oÉČąŸoĪ‘N6ŲĻ”ÜēŒēš¬o ,Ć"F9Ž”kbģ:„²F@RŠ:ēÖ§¶ŗupŲl‘Į¼‰āžT,d¹Ź×Ōæ±Ē­SąĒ’ųŠ-VāĒƗ“-¾”cin\ĶŪ {śLķ¦Ļōgųń’Ćāǁ<3ń&Ń¢F¾Xōżf8ŽDs…&®ōé“Ö¾“WilćœK‹~ ×%C¦™Zk‡æxĀ2ÜX\.2?„×å_ü«ö9OŚ£ögŌu{ ÷VųÆąq.„„Åh©Łżõ¾?‹*9܃{ž6õ,’?mOG›Ćåē†ŅāĢ+WĶR¤’O<ät>ā¹żJ°J²Ēó\ćaēIŚéŽ9Ön<:4[·ŁcåVŲ}ršŒŗe“ö‰ŗńƒyŃē|õ‡ņ5”Š&}µąķsÄZēĀĀ:»“N×TįćP¼ēł×‹'‰üE k7–3Ž4„HŖģI' W5$¹µ¤}›šóÄGP““Š|ࣵ}'¤ź’4hĢlĮąŠõéīpÕbė·>LM#'ĶÉĪ+M•̲6ŲŁqĻn+¦čsÜ;ŗT2yNCƒÖšy5³bWēīóĶhntšjĻŗ‹_)'­n@¶Rl;•³Ćīó@>"k#|`‰Z '±ÅjiŚj["•™d†O˜mōØē·¶[6€Āū c5”ēYi–±˜B8Św޹ØlŌtåŌ&¼ÓĖĖn^k"{i­Ź6rƞ=(ęčK£ėŠ1GåŗüŇS]ׇõļ¶,Ęx^)1—{ÜU) ō+‹÷Õt-RŹQlĀxü¦,€…ēØōé_8Ēi&<¶[IņHMŹ0zÕ)ĪĪŚŚxT”c‰q€kšøšĪ›Øėk¬Ü§:ĘSs ćœńM³h˱ŪÅż–Iŗą$Ń0Ų }įKm4ś…ŵå±Ä1Ą#­dū›E÷;Ė1.¤ńĮ,Ņ"7ČÅ{ łė\Šī­µŻF gŽī%˜„•ˆ•²c)=¶­§]x6BpPŸOQZ—QhŚ••Ū걞’ZŪ īTdžĪµdD2) ?Ī«iҼĪŅ"ł€6ӃŠVL.uāÉ"š0’«uēīÖf„d#Ė*‘ƒ‘YĶčm&;ė½=¤H™öæ”®—Cń Ż’\DˆūŠ“»ŠÖFZœü‹{s{ē\ ĢNG=źģėͼŒ„6¾ōŲÜøh'±…¢Ē™Žp:×!5Æųm-£—W¾Ó'–9ž•į’ōķ6/Go2Åg«·¹™ł·š‘ųŸŅ¼Ŗ¬’EķÉN+Čņ’ˆŚ·ˆ<Æ]x{P’X!ŽZ “?½Aל5ū žŃßbŅķüÆėŹ~˜åó”ć*Ü’œ}i@ŁU÷¬Żæ‡Ž#“ń>ž"Q­,{@ĘsōÆųĮ§Ł|<¹³Önaµ¹˜ nĄś×dUĻBäʇÄZŻõ½¦Æ„ė7ö÷IŲfŽR ‚OČU_Š>>¾ńBxhK n³²’\‰&õsÜÕø£¾¹)v/~Ļæ“/Åæ‚'PѼ'Æź3xDßCØI„¹ßø+†q?w tõä’šQŸx/ā÷ķ‚|qįÆZż’÷Į‰±œa'ŽG%ż »8õ$W<“>OżL§K=§›ŅŃŚJK»i$’;ü‚„¬ü7ųua©‰ƒ› ØĀBŹ:ķ'¹Ą®ü>1½Ļ­Ėó©FĶ3ćé| u”xŖOI5ĮńRČE¼p.1żĀ85µ£k3i"ńMį­Uw|—_ }£­ÜWŠaźÜūl»Y›~Õtˆ^*Óģ`ńķ“ż£ģ®ŠĪ˱³ŽGįśWźF§š‹žæ¦‘|×v)j18lŠGŽĻē^½8ÜĒ›ŹKFwž1ų™įļ|‡ąÖ™ąė_$v©:•±„Ŗ0$®{ó_|Gš†„=ŽŖIsėšLQĒt’ „ķĒßZšŠ>]Ŗ‘n\×»¹łqń/Āö>ųĮy©iw_bŅļ’[6žó‚@ĒLWŁæ~(xęćU“ĀśĻ•Ä"9FāZAČćӌדWCēó:o[ž½āæ‡7!±Ö¼>·÷—WÓł‘²yŒģ89+ģ*ēüÓWńŸĮOjŽ ńŪŁŽx^īč –W'Vlēī°ż+ŹĒÄā£f~šxŗīĒöų§ń6[„K’ėŚ–ÉįpĀ 9]{gfæ ¼0š_ĆĻ^éšéķ{ÅŌכ‚ŒŽłĘ}~n•…Jé+©ž½q¬\kŁYŲX\ÅkÉQ»!G¦jōś=Ģ‘žv‰²6²™+ÉÄf::CĀ~ń|a¦ė6÷ŗÓäky:”‘Fr3ō®öXš&‡ćż?B¶¾ź,-ęł¼½ “õW“<Ćws)Äō_x ĆŚ©ØĆ®^Ļiuś˜ćpĖǶģW‹ųƒžHÆ%–źį¤•bżŲ2ErTĒisj;ž7«k֗·Ų@^ː9­ż "öXtėčYZem 2ŲćŪ­x8Ģ{>ƒn¦¾‹į«m=īŪJ…`žA‰ Ÿ½’Y¬_ ‰> xŹļā†—yÆisžē[ӚVxēµ?|¬gĆļ;W,{]OØĀ>‡;ńoƖ¾,Ś^x?PkŸ…^4“ʑ,CŪHŁfŒ7N7)Øg„~øžĒ’l5jzGõ«?'N¶ß“øhćńōõÆÕøwķiFhõeGš“‹šĀOŁ×ö™ńŸÅOøøš‡ˆ^%ŠĪļĖ#!ČČ=ĪpFqĘyé_?üćo‚_üAšsĒĀĪóSµŒ]XßĀq„jĒåuĆ”¢¾·Ł.U%¹ś—‡YåHb~”ˆ~ė^ļ˧Ķ~E?1”Ąßü«>ēĶICŗšk'ŗÓÓaba$Ø#z×IŹBBÅźHąÕEו‰Ž¾šGĆMćVšÉk5–£7vn9š3’-ééķųW„~Ā<'šCöšųońcĘčtßßZ\Ś]K {’ŁęŒ…—p8ϱ®Śo•£ó®4ĮTĢ2¬^ƒ“źÓœūŹ-/Şå’ ųķ„|uż²ü[āĻ źqk¾Ót-Kž0B°É/^æ;7?į_Ü436y®¹TNW>_Ā.«“šĘ -ÆZ”ą¹–ö“÷¤¾M²ż³ÄØĢ7‡ę'·µp¾0ד·Ō­ļōŁåĆķŚ2ßÄHć§Rk–ZŸU˜Uč}¦—Hģ-PK;ŗĘر©$’aWWöAÖ&ńĆ”©¢)b]Ļv†ń”‚Ī zŽõč X5ĶfĒMžHŅId ŠXÕĻe{ÓĘņ£ėx>č‘"Bö_½ž=Ć<×ymš_įŽ·įŪ½Všf“s,ƒožAŸ~ÕÕ'±ćbs-5>Ių”ū$ųņĘm"Å®¼­ļ>EÜņWެėócĘ ž!üńŖxwĘvļ©i3`éśå¼gģ÷żöätlv¢t‘Tź©.dz熵¤”BKm\€=«Ö-µń4%ƒ.}k’Q±»Ž·7,!ŒDķ×*|EšO‡¾#ĢrŁĘŌ„c  ^ÕŌ±)č|')Ē™Ņm6³tæų*~¤–×6śĻĆ{ZċäIeJ®wÓŪō‚æą¤æ³’‰Y4‰~3m?Nž5a5ʁ!“Üķ=żæ*ź§(³ņ~ š’7§zøió5ŁŁž'Õß æą©_³f•ā‹ ŽźæN£ł6ž#ŸJxw§8Üćī’8Ę@ÉōÆ¢üY’RųįæŻh ń·Ā«ķ ķšź4>”Ē8Ėd®zqĻZī‡)ųnkį¦^æļ!)J][ŗō½ģ½³’‚ß|š…Żī‰¬xŪÄ?t—B-WCӒ;›lō9Ī9ź{ןųĻž µį[įwŠü/šæĆ’ōƈo#GaØźVé&ĀOÉą ˜īy«œŅŌ¼Æčē˜Wœjb\aÕÕļ+uŁ5{yŸ‹ŚĒķQūWx×PńińĘoZčŗŅÉö» Y6DKšŲ¦G„yųoĆśĶŖiŚÜr̈>K†łtlבˆ¬ž‡ö/p®.‚§ƒ‚ŽÉ÷vŃ]īžg^xWZš„±^ŻÄ—Z)f0Ż+d`Œ=k¾š¶”§źĢ«iqČĢ3Ņø$ϵ£JĒ«éń[DĀ7|ī8$Wć;Ė- õ&āēŹ`t2Ģ ĘqśÓ§¹£V¹‘­ĮŖŪĆydū‡øäc¶+Öü«ĆØ_ÅkØĮ䓣‡ŽÅ};åˆX˜ŌĪń• ļVv}żē©ōUŸŸäŪCy8Īč1Q_čārÖöšØĘqÉÆV”łķiqŖhOm)™­ńóī+‘ńĪ³RA$ :øĘ Ž;œfw†4­·Į.dmRzu5ŲÜjfĀā'WDŠ<īūÕ±”£Ō·’ Eް‹ ČļœäW/ŖėŃEtbŒ1IčkFijj=e'Ņ^5†•ø8l“ųW'ik$Ņ›”ŻnqėRsIõ7eĢάų w®K*ńy&-’)ūŲŖŽę ™šŌO ĈJƒŒY¶÷6‘Ģå2¤å8ź+b%±—}g§ I•”ryŚpk±Ņ,]ķ÷2qĄ›·Śæö•$7Q‰Ęļr+ŒmB×U'sõ¦`Ź·ķģB?&%eéĶrēJó ¤mŽ‹±N›kn0 Ļ>Õ-žš&lŸ™Iü…"yNŽĻH°WS9TDlēÓŽ»[}oML2üļ‚«&:ŒqLŽC€Õ.g¼†u™ė\„ę§<¾Ļ÷qĪįA<ŗ…ō·++³F>īEY»šÕöµŗt»—yCFA늨ǩqĻ€~.x{[š—‰õ ÆÖĪki›Ė;Fp0q‘Ū­|”ošūÄSėĘņĒPTČΊ£k0'€Ny­ŲŚ4ūƒą’]0Ōü'ā«-BmR×qŠvć#=½GJįu_ė‰ā²ļOĻ–Có ā±bk”čVV«{<Ä<‘ŲšĀųƧÜéZµŻ¢\\LņŲWtüźLœO šµ¶§vO•eĒ·zĶ­u%£›Ó¾ź6ŗTŃß]DdŠlBNÅśšęåÓcŅīKHęFĘ*•Ī¢]j÷WŠĆ·„’JĘń©(Ž”ŗ×%§Y ¤}ž”LŽ õļM2]¶<·RŌ/tŻYµmO²ŽīK”Śø9é]o‰ž,ų—ĘCNҧ"źśx“ ¬®U¼eāMJx÷?Łī:0äJ)S»Ö~9ŚFRŪM„ā,  ņäu5󷋾!ßkM#OpŸhy’sy'ūøœ×·C hŻœÓ’[ižĢŸšM’Śö¢‚ßÅŚī›Į’…-›ūSQłn.7>\|Ļ'æk~ ~Ļ_ fē°šGĄÆ[xߌ°ŠļÄW‘‰dI;ŲŹsœž±®©>ˆåœ³u{ ųVÓuÆ‰×śŌśŅ6å³F!V\ŒēƧé_šxóć–ŗ„āŽŲxKåņ]X¤„zć¶3Ņ„#&zo>č– &žtGŽEVH¤˜p®ˆ\׍­āš¬÷ŚO‹,ķuż*ą*¤P~ń‡¾yVŠĢfzEµ¾£«xrĀQ5„ƇQ<—·q¶_,Œś÷Ķr—ž©įķć±³K0A·™”WhĪ0nøw«ŒzØ÷6JZĖįĶj±“ž,·ÜL§ #``Øź;ń^ey®ėw:œ§QdŅģ"9H²ž¾õ¬V—5„O-ń·ÄO ųw\‹Jšß…®ķåæ ÜJ°’9mŲĄä{šł[ö™ż ~ü&šäW¾5×üżBDO›ģQĶtSƒl%€?µķē®üf’Ę×į¤÷~Š“åG+FįFFҹē=kóV{™“&¼ŗ˜]j1f•ņ[žø'šōa õŸs+ɖVe9ĄÅSdw>k’ŲłpjŅ8fÉĒž¬`ā”‚ÅŽĻœńœcRIhc~„ČĆ2³>9Ēz•0в±ŚG?…@¤ō-„£˜Õlg·õ­[]=d˜6OįJFqĶ›m0#«Hv'RO„{ļĮĻ‚_ž4ė¶^ųQį[Æx‚į€ß% µOļČż­sŌÆcŖ•#ś!ż’ą– >Xčž7ż«¼CećƒŚčvˆ|˜\Žp¹Ė£°Čļ_ Éö”įŌÓ“Hģ|š¾ŠyyH|¦XĄłq’}G’®ø§Rģķ#ē­^äų.äY|2ŠÆ|W¬¼†[}f8œ‚sŸ™ūr;ŌžÖĀźŚˆ¾*é:†„«œ RŪ•%ŒŒōõ©¹|¶3lü]k©jSŁhņų~Ą’DJ<° ėņē„pšŻö†Ļwko§}®īLæ˜9ÜūÕ9t4Lā-­­ēŠHu‡ņ Ńr_±’“uZö? ųRŻą°`TÜœӃüśqPäŠQ¹$w‘į›ĶļG»ÖüE$Œžsø;p„~'Ž+‘»Ńb¼°†§xŗ~ž§/`é¶¹j1ŖgŸ[kڌ’ź¾šŽ"écę[įYrN§½rŅüKŃ< r—±Żx“_‹"Q¹UĒv\cż+3HÓ8 sXń_Œd:‡‰5V·“gó!¶‰Š•³cłt®ZźĀk˜c¶Ó O½°c­7ŲŽöG¶ų3ą=ī©oi8Ņą€^V+^Īæ ”šf¦-Į³Õ™UXŗrć ¬$ŒÜ¤|į cĘÖ:vŠt›{'PHuPN= öõÆh³ųC„hIi7Ÿo4ĢJŗ"Ė^)B=lėõĶqn£@%½ Ā¢ć䌦ƒćõփ¾“,Śtj£s{’Jꦈv±ÖŲéOØ$–śŽōēåµ6ßƶ֜„É4ėpƒYUŪcėŽ‰DĢÓ½š›X]4ÖX𐠣ųMjhžū(šY­ķ’\|ēUąśdÓęŠ9O4ŌŁ%¾ø·.4b–„Óķf J· ‚ĶĶ/he(Ųϼš{ÉšKMĻ'=+•×"·ŽnÖ,€W•żjģŽn 5ēhīģ^Ąz{×qg (‰X~čČļE‡} oiÜÜŚÅ Eköp 4Œqµøźć[žƒS7‘ŲŻŌ¼CńšßHŌ-ģßAœO5ŁźBõēµģĻ™u­sĘPükń?‹āÓiÉäÄ`p|¼o>܊ŁńKjś³Üź÷±‰Ó÷™č÷‰ „O±äŚ>Ŗé^#døÕ"{9‚©?)R>¾õōŽ”ųCJšž©iåĆ>”ęe€ $āŠKSgĄ¶n•|Ś•ŚÜ[Ū)%zķ’9Ƭü]”ųKXų?.£ iŅ D†)pļ–”Ÿ—¶y1»\ń‡^2ń՞>•¬jņ2ĀÄD² ”^Ł5ćĖ„jxšėZŌ-—T‰g,.FŌ'ųpzp?V!Åt9XXxŸR¹ƒĆ7Q³ z:… {©±~&hŗß†|#cc`ŠĒ~¬7ĘĢ€LØ„Ōźī<£ųļį6Ÿ{¬½ö‘ā&„“wclŒŻ$ž"°žü ¶šÖ·‹5ķoūFS6ŲbHųF9lńéNåÜūĒ‘ųkP‡QŅļķāmbEDL. ]†Ó\wĀ=ZßSńN§ąYÆ­„Aäi› Ƀœ×"ęE ]‡ĆŪFÓnü É6y哓ĻčxƱ|]ćĖH¾Ö¼=ŖŪ\LQq¶0BłR=i¤~Mjś…ĒˆÆµ*}&]CO¹„r yxg$š}+ōēöuѤŅ|§é)«Å-½£–’·ļv:{…PŸ“ÕģÕņn½—vęś L¢yIņböÅ"d*דe,ģaYŒIŠ*ē#øökƞ.’„nõaBYKˆÉģ„š8śš ä=NūPŅ4čĪ«vŠk6j *™`.kŵ_ŲŁż éė˜ŽYxéŸJ q±JŅļWŸJ‡\·½¹ˆµc'ƒß‘łW”|*Öµ}NY“­~Ņ;Ø|Āöņ‚ąöż5„3)­ 5׿įÖÅävq¤pČҲžw€yÆA]Õüu& c–XKDłJćłŏpEz"ČĄ Ūzē?Ī•T%ŲדµKˆēcK—qĪļ¾ų„įėßųÖę ŃŚĘ`na”ÄQOU?LõÆ>«¶†°}3ūÖ§+“QI7–BTt_Zõo€?,¼'ćY4bĪIō;õņ¤~ęxÉś‘Q t7[ ń§Ą‡ĆŽ)»Õtū9-ŸzÜi’••ƒł›šÆķ_ž 3ū\Gūa~Ēśń$b×⇄ū*ż7‡71ĘŌ‚ {†õ®““‹æAßCō6Źķōė±-«ܰcļĶ}o¢^ÅÆh‘ĢŅ+¶Ą{ā°ģ|#ūBüš‡Ä+Æü/ń¾”/<ć.ćHø˜ž‰y“łL2Ģr@=›mž'ķš?Äß³×Åļ‹?üfņŸxWSh£˜!m°oš€=™ ŸĘ³…6Ŗó_Fæ'’æM:œÓ>b¹ˆUchŠuē­R(͒ņ:c½vÆ3†jĀ\*‘Ś”Œ aÜ~•¹IŒóVI0ļĶ(VŒ‰ eā_½ŽI” ¢V‘[hXūdō« )óŃēxؔ»Ķu–93 3!Wٟ°GķY¬~ƵēĀoŚ8–ćĆ7®ÆŪļķ$ 4ī™ ;dR¦×2ęŪ©ŪOĢ’KĻ x«Gń΁”kŚ妣įķ^Õ56ā'²Fź ƂF=ˆ¤Ö,žĪ‰pĄ™üŲōÆ>¬„xOğŁė°_[™?ŠļāŪ#żD£”Ļnq_œ>2šę«¢ÜÜ?ˆģR}KNf³Ōķ¤Įóa9]Ųō#ņĶs(źóo’?ż›/ü/||eį»HŒ0?Ū7Ē÷®¬ßœp9öĮÆÅ×2§ŠFx[žNv×VEfeQ-ŒėŻČYH+€2)“Ī/”’½ė¬å+ĘV%Sæ*sŪ½hŲM¹ędŽÕĖ`qzё7Ļ)u-JkźÄĘ’ZÖ˜p"*zóKó0Ģ|éY²¢ģH“‚Hś÷­ķ·Ū=µÅŪC ŖČ²/މB§±R;i3śĒ’‚ ~Śö~%°ƒąOuĖ»½^Üej-y I&ŒǽĀēА~¾¼’T¾ń,zķö…£ x§C‘SP·"[vūĻbņ÷¬jqÜé.5&Ņ5km6(L6÷™x(qÉζę»ó¢Žš%Ä£ŗˆš$ŒŒ0#üöÆ>[š(ŸĀgüöŁŪćäž8šu„ķē€5ć.½£É3–Tw|Ü[#Ļ–X0®:ć5ų‘}k§§=ģ2"J„ēŽ q‘H«÷†¦Uø’Āõ„‘VĪ1^Ļ?€l!¹³A41¼nūī+õ…IŲ‹YžÅąé<)Ø½Ķ¤¬Ąc1“•ĮĻ8ü•tųĮŽ*¼ŌüA­ ‹[§³vI]»d\•÷>•ęν„̉q9’„ž(mtЧ¾\ 0\䁞Ó„}×įmpI ,¬²°œ×½BwI˜T‰Ś›æķ(.¼“ŪĄĻqY2ÄÆ„SµG×dw0ä3~ĄūČ+œr:ÖŖZ˜ąQ±€SŲV×-!’ń2ŗt< ĘGa]-„‚Ūé%\Ƙ¶ćÕ³YŹWŲ ½sHKĶ-§I†ō`xļķVō;24ՙX‰ŌV`sSź7×7M¤å%Y°$ņ=+øÓc½š2ĪB¢™OzĶÕ]¢ d§<Į¬H£’sōŻ)ąüTĄæ ÜYˆnD&4nN1\§öä¶2Ķo?ŽĄ­Ņ)ĘĒqążNžī9ā’āV`å†OķWoMą†pK9Į8 qܵ.“xĮšv0ŽA•Ćjž!‰ øK)Ńīacˆ1ŸCéYĢŁ#3OŌ®u³8\©Ć`שxzž6·0Dūp~ī9ĶL|Ķ#[_¾Ö4;>˜ä\61pžõįϬźĢw]±»¹YŲ.7sé["ĪÖ SūRŹ$6QOtŒu *Ø9§~€#øŗŹ8>ü½i?öJI Ø 2ģ Ž’•DŸA¤jŚJ²ĄÉįN:UZy­”%‰u v¬ßch«ó=ŪŖŖfR*ŽQ,dć÷æĪ¤”ŹĒĢóIč: «q+\īäax"ƒHČ®.Z8¼µ,"$ †īåNÖ@ŽP Ž(5ŠŌ©-ģ¦"ŠåPöõŖÖ3Ü ²££Ń“ŲŁ%+Ązt«}Œi žfĒŻµŒ·4‹: ™#»Ónā<©zņ½CGA(å[āøźģm‰Xćl4÷¹Ō*¦|±VP~ņžüs_-ünųQØ|2ń-߇ī/':}ņWD»īœīh‰Ōž™Æ*¬Oōׇ‡²ŒVčᵫłhO…לé-’ #E+ui$<µŅ??p_-¶ėŻOrŚ]ō2GaWÕ¹\v؁ęŗ>ņ±żüż„“;{½ĮqZ¬ŠŪʑŻBøbÜgqīz××üŸžģŪ͚„¾ėØ[VP9~&»a¹ģa©ņ»žEąĶ=ōŸXé·ń¼|§Čć Voˆ<wóßEóĘG§AU=NTYĄ.­§xYŃ|C®Ü=ŽįīB¹Pƒ®}«ņ‡\ńķÆˆ>1üRŌ,o×T𬺬§I»Ūörsµ{ątü+Ž­Kj*ĘēÖæ|cc«ųužj—šV± ‹Įp7°ó >‰ķW¼u”ĮšßŖ_ڳZŽųBõĒŁīķÜ3[©8 ųõ=ėĒÆVē…‹ÄźŚ6¾&]ü;šdŸ üńā×Ä^ ńtŅ[Į Ācɑ—ƒŪ’;Šü¢ų­į?Š?°_Åyt‰¬µ;ź·/‡nÆ#co:““¦ģ0'Ҽ:žöĻ…ĒāżėŸ³Ÿ²·ķą/Žz^… kZUœš¤ČįžhŸŽ1žĘ½Ÿ\żŸō7UÖu+»–ÓķL· ##AßłWŹb®®28§sēOÜųcÅź«£Ž2^Ł]˜Ė)<`õ½}©š6ÓJŃü[©Éyaåµō+o&G$ē†ś×‰R³źmOFvqü$ń'‹ĻÄJ»˜Ļ÷!~ąŁ’>µāų¾MD¹½µ—Ggó˜ø_Lg8Ī8®u;ž–¹ĄčW3ź¾ń&‡y<–wX³x†Ł"Čä{ōżsÖz6£—%­ÅÓ^)ł–G3zö0Ņ>«;£Ė“k¹~üTš?ÄŌšv‡āˆ“KĻ>īŽxŌÉwlxtV €Ų$ƒŲ€kģOų*Ēģ{šŸĒß|/ūh|Óæ²4iī„ °łS(Č#);¶įų×׹UļsĄāÜö¦_[ ˆęµ9O’KüIŁüš?—ķ/ıųóE×-ÆRÓPOµ¹2Ø<G±T³^¦’~ Zx Åiy &“– ³e~é’k½}Ļ»„Ž÷ugĖ~,š¹ąū—0ŪÜK£“Ļöw ƒ$ķĻ·Č߬zݦµ>„$ v-e”nŽBēUcÜö#5(Üü|ųż{™šg5#ūB×Z½»ńe«Ām_ķs–{n00{cŠć-<;įė˜Ę«{ŖĮ$LåŪ8x€čztƉvÜąGSc¦X‹Å‹MēgŹ ē)šŹŹāi<ØQČ ‰žGÆ=֓Ń+mų?BūF“öž'tŗ²˜ezƒŠżq_xėJ°M~ęį­ēV³¹xĢy!Ysߌ±©Y¤tRHó K‚Õ„MÉķ¬gżąŁČF<šęōĶKWžo~\Ąģ"t$gŠń±Yķį¢zǃuQ!łäUn‡Ö½&śĪ9•n#hŁ\a—±ü+’Oxś<Ō󉾸׾jŽ ‰Ų ¶·¤)åÓ L§¢ÄązņųĮ’į)¢ź3F ”us‘_«š.&š”GłŸgƒ„{#ź_ŁĘRk_~é~„źž+æv²Ō­!lPsē0ģO­}’ųGc¢ųĻį—‰|GŖŚ_ųÖ i,›Él±ŒäŁē ÆŅ£'cépœ°ĘŃQųžćį³D0rĖõ5•3•—ģĢC§ššČżŪ Qņ«–¬- rwØ`q_zū«ą§ģéeń/Ā–Ž!‡R‚m²<71#|ČGØü’*ŖZŹĒĪń–{,»,SWJߎšŸ\|KųįŻCį¦¦źŗ…­¬fćIdźvļŌ×ć÷ˆü {meŖź¤5Å­„’*gģܐ¤ć  p}+zŠŪ˜x}ŒĘʧµé+ßü]?®ēąMAīīÜo‹FÉn}k±ŌīŚŁ&;6¾Hę¦2gźNKb¾™w{ŖéڤMim ÜJ®ų võ5ń®¹ć[‹\›d–;„UR§kÜžŃTć –ĆHIl|ĶńoįOÅļü*מ.ų)/µ„V°Łźöƒ.-‹ ¤gī®õÉ÷Ææ²_xvvӑSP™x?+.3^n*””Źš“c)F®ž¶ļdõ󵟔Ęųį·‰<]§xƒWҤ’uÓ’×AŽĒšėڳ­l­u$Żm¤©ŚŹĄąƒéōÆ­>ĒŻą×K—l'ŸEøšÖTG §Ė#œq]ׅ/-9£ž|ĪĶ’¤zŌÅ[C؆ǢĘČėŌ8ž•u! ˜<ÕF}ĄjånÆ$1–Ś=Å\¶¶r„؁ŒbƒCWlLõĖǵ?ģźŪYIēō ™;ž5ŗMĀzά¬3  :±9éłS?g…Z׋¼5āŒf±s6³¦Ż,2[«r7o¾ēķ]”©Üņėā9Yū1į#Žt K_éÖZ–Ÿy Į{e:+FĄ® šzü2ųĆš¦ćö`ż”üiš¢Ü\·…&aŖč„˜‘¼„ę,ž»NGįZŗ&ńwvGwctĘ yQ„ŠĄ7ŌłM“&Z@~€WŸZ6Šö)NčńĻx½fŌ—Lh<‘ĘæÜzÖ_‹Ļą/1]Bh¼¤„ōaœŸéś×9ęb§kžsū?Éj×zęØĀóÜĒf$¶|ą'röžbæJžkQiZ’£½ø°»Gńģ„āq5u’?]“O éŽ7š“č÷Oå[ŻAµ×°xÅ~|Jš7ˆž |JÖ ‚;Č4yŗŅu\¹Šzõ!|īI_ߔv~ƒüų™§xĒFM:K•}NU'!Ō½U>:xfūKŅ®`Ó¦·²Ŗ‹{f”`6ö qłšr½RU=œœd|ķ’¤š_‹ž KūxZšķ­ŅbÕĄÜ³2B”Ż×ŖH’hWĒ_ u{·µ†;ˆCÄYN6ćŌ欬ģxŽgńŁtq]Ō„/ż)wÄ­;Äooį?ibęŅŽYįĻ2©Ļ?†ļóŠūĆąÅ“sįˆ4+ׁŽ%Y!,dJ×M'd}jMÜś×Åŗ‡īžüCŌõ[Ż<3ér$1Hćs6Öū×óą+G“³‘)Zīi'¦B@„VVG,"Ó=ŽŚņ(ī”·ŠźY!eœt8äW”ųwKÖ"ד˭%źL²F͜c<ō®8½B½M5?Tü7}>© č÷­œ6ŗÆ—¶įcū¬Ć7ć]žš„Ų R ń^ĢłŹó¹ŸćĻĆ«éĪHóa\Æ×Ć~_|_ųi­ųeHµ‹wŗTŽ>䩓·×Ÿń­ē{UUģ„~FXų¹¼-āą’‡Óõč„hˆ9 +)Į OSĒJś7BŌ¤¼…D{Š©ž¦¼Śŗ*ŹHõ >IƒÆĢŪ;Œõ­+™å„ØNWż+œōi„c Ćśf·®jńčś>•w¬źs—uŠŽģ$ćŲU™&m'Tm2žŚ[+ōlå]¬§čj”YĻWc~Īģ<¤`­Ņ¼“āMž‰«ųƒI²ŌVdÓę ku*§‚B†>ߕk”åVµĶ?üŌ~^ŚZŽ]5ž—töW€ü’)XšZ‰U¤^W„ éœU)¢µĶŒ@õ4łDeB~o­CØĖ£Ew)ÖĀ QdAČSҼÆPš•Ī•&«āoZÜA|Š„œØö©ēg”N’:ļxŠĖTÓ­nm/~Ó+&e^讆¼ēćWÄ]Cį’‚uŚi£R›!6\‡\Ż}3šė ®ĪlĀŌčN£ū)æ¹2—ģŻćwų’ö¶³ĒingHˆŲĒųIÆøG‡dŅÜ;[}Ę1_UIģ‘ž;biźł·:ė c]øƒ0˜ī`‚q‘õ®»G—Tl¼ģwķäē„t-xXeŻą¹†}2ąG¹²}ńė^O¬Ś[é®ęÖv3/śščL⓱…įłā7“¾„ę6ä#*z7c]mę™k4CpER:śŠŪ™9\§ƒmb­ž¤ćåķ\ŠtĖĖ[˜åĖ“G5•Čl„§ŻIOĶņņi4Kw:‹o _3N¶„J#`įpT‘\Šu/ė“ZAutĖl’åP¹ķśS3”ŗ©¦kÖ_Ł eg¦GŲ„`csz¼ļÄc÷귐:7<ēփ#%GP’łÅuŗfØŗ{F$Ź•9ē Œt?ZV“Ń­[23D9œcéWfÖ~ɵ+ŹBNš½Le¹·į{Ę×ī-6ū̉ÉGCŌŌWŸųßĀ3éziÕŚå@@\‘ÜŌ8 ö<ņ V(<GŹ;“Öŗ9V-F($ļõ4 +œęÆį·[ŖGns ½\^Õ«o%Ä+x¤ s’;Zōޟ©ŚŚŁĄ–aęeQæ#Ć®?*åõ]V=OSŸQbėpü0rqļłÖS`j鶖·ˆź×'<‚~é®gRžūĶ’ŽŃ®5`]¶’Vo@$°øµŗ+’Œ0KŒ:ĀÕ<0¢I^ŌīŚŁ&š`r³čŅMs — ­å¶@Ī šō1E…“(ӆøĘF=)‰³©³½·‘Do"$ĶĄÜĄų×-«]¬sH²“sĀQĘ+­LÜĪGS·µšxļ f@ŻØŖ-pd³”łCļ†Ōj[JŹT7ŹųéŲŌæl1Čb‘s3œt4ģfÆ¢¼¹P»=U±åŗßÄ? čńOw}IsÉDFĮē¦+äxņmsXøŗK”†Żr Į?‰®ŹmøN”«š{öuųįūUx³LšæĮĻ ß=¬Å…Ī·2•²³€ÄɌ=&æ”ĻŁ—ž „š?ög:v¹ćˆōæŒßāĮŒÜĒŗŚÅńŌ)Č${óōė]³©„Ži\ż6‹ĆÓźöÖś‡Ä?莊m”i¢Ó¬å_*HĒŻMy’ėÕ õˆ> h‚Ēö~‹JšżóĖöfŌ¹ł@ 1>ükŸS>FIą’j>Õ$oˆZ•ÆÄO™r†įw"æ@Us^•”ėšMļ'š£üLŠü9ā›·'@ITIr™ū¾^?–+¦$ø“}ćjĒį{=/Į÷rŚŻ?—wwcl,|õėĘ|c'‡|;5Ę”¬õ­ÄĀĢ@ŚO”8ⷊ2”{ω4Ė;_xz’ū{OŽŽtYe>ь’xäs^ā?ˆZƒų†-?Ću“Ŗ‘(ó•$ĖŠüŲūÄVÉ"yĻź1Ó<9u5ķ½ķķÖ„2ł’YOó,$«“ŠśWųƒā†Ÿ5ŗxŪĒ~.Ҽ7įx·e.,’mäģ_Ƥ!}Óhüyż®ą°:GŚ.|ū9i2/“!‚ļX‘kØܙō5ų)ćω8ų‘¬źŽ ń߈µźWSŻ;Ŗ=…zthŁ)w8Hœ#ę%¾źŽ W–)¾i]2 =+YnrT•ō W9†«”÷#©ŒtéPrKr“ĘÜøß½Õ“®ŠŹ¹ĘqAŒ„©~(C€7õé֝¬²Ż„x\g8ėķA„ŗM¶–ä)‰?xH­iŚéWRŻ›-.ĀļZÖߐ““q…P9ėYŌ’±“(Ÿ°æ³ücā'Ä«]7āķyĆ?F«*i²0I§Œ€xsņśWīĄĶ/Dų_ą}SĮŸ³_‚t(ģtŃä=źĘF?ŽßÜņNN ó*juB“<¾ˆĻ§ųŅćHńrŽk¾2v% ²y«ƒż¢Ē;׭麟ü'’jVŸīītC0łŲ䂫€gģ΃OĀ?ģo4k|6¹M7O4ĪĖ"ō·æ׆źņĶ ėz„ÅäzĄrYف!Ŗ”@óy/“ÄŚÅēö椺CHęUČl “}5ä÷zö±§Ķ>į`Śö ’²Ž„wzńŪ46Tbw:­Ž™§“ZżĢ‘ė/µ£ņŲ»®Öęž"ń½n!“±²Ó¼+ƒ2¬Üu®y%ŲÅÓ5k›KżšĘ’PuĄ-óĻ\V?ŽzžA¬„2Z±õ‡|%=•…¾gmŗÉ܁€½kź_ ¼4·6:ƒoK–'ĶGē'Ō{{T™K¹ŃéńZč÷,‘`*R¼VüFŹ[˜ä»¹Ü?Å39HōmŚÖŚę)§+…Ļńéuo°ŽŪH"1¼ƒåŻź+Ŗš2ēg’Æ…įū|³nm„qZē¼Sį«}6Õ®å¼ņÜšį¾R=Į®ŽN„F]Ī;Fų•įū(ļa»o¶,kµ L‡µĘx›Äś~¼­$3N®Æ)å\ņ‹:UŽ6yåfŒ–oāē5ßi&„©Xß(‘mö)#œØ1“G%½žxeIšI94^A%ÜOs#;HēĄązmÄĒŅl翘 qņ±ŚŽõŌ˦\ikg}nfGGēH|Č˾kHäŽ;v·v ūēé\ó\^E8øŽFĪF1Įė[AčC™ßé¾0•¼»ifpˆŲ<šj޳:ėp–±†i:Æ8ĒzŃ»ŠRźxģśv£u~Öį.#UnÅk[i·R1µc2ä7PG½g(lš@ dŗA–r•‡©­ćĀaµ@Ģ8v‹] "ˆ4kmEmž]NŁĘ×#$c#¹µø²—]³k;e$$Ņ'Ž Zō­Gšī³*é×óĮ˜Gc<œlL˜ž•ō¼ē“>wŠh<5ŖjŃŁGöØćˆ&ŒąØJĶŅuNīćP¹°†+U1n<7ēӚ²”‘õׅ|qw«ŪYA£NŚv­4 Ŗœ|ącóÖøY<7uš’čęfæŌæz²%ćdŁČ殂¼Ÿīüuā;W¾·Ś-Zy dąc Ļ§kź_ŁĻUмI5‡¦¾•šƒtæhćI—Ä·܃%¤’žq$œ±üqPk®|³­źZƒµ}^ ņõīÜīļ7'„gx«ā®»§EišŽĢPĒę;Ģq€zö”#hÄą%ÕÕė ¾*ÜYĢ/쐻,øEcĮ*{žU¢])åćæźž!ųkā_ķ;-`¹MäÄ *Ź==ńšų‹JńW,ōo ź:v F¬›Ķȓ*7†Ą$VrźJ}’Å:§ˆō›KŻ*ŅuŒ‰dˆa\ŸaҾQŌ­µc}x—{mćĖÜ-ļŠ‚āś3Æš®±k¦hלfØn%_*CAü}@śW§ų‚ÓU3E{“›‘ć-‘ė@LōÄײ]é²¼,Kžź"y#żjēõßj^ńz~‹¦Ļ46Ų¢ĘFPœeMT70{ŸzĆą‡>%ųi¢xŸEÖWÖf€<± <ĻāB;cŽ½Ćą‡tCį-Euyæ±u‡ˆE’OUĄēU9ō!į¾1š÷Ć{[½ó{9¤óqn\ŠŌ`WĪ’¬|#ā8ųÆKÓ'¶æW;JŒēóÖ³¹Iö8’†Ž%Ö4‰®įÓō¤ŚĪ ¬ß.įžq_Dxsö”±šļˆF‰4 öß%ā’4 |Åxݟ|Ā™¬_Cē/i:Ä?Šp]Kg ™ć-(RŹPĆ qÖ½ĖÄÓWNÓ#ŗ…–hįX¤iż*ļ`r<ÆG‘<©jWŗ \[<±•dƒ#ĪėĘZōĻ„÷zF«ńG»ų„·Ś7”/ļs»k/=xüź\‰ęgŠW0xGʞ'[-=Kh†C‚w2‚0 üq_š~ųŸįg‹õ}_PÉsq%Ķ®"XŲ’0}ŖI>yŌlEµÅÄF ŒFzv¬Y`óB!Uڧqµ¼ m”õĻģéń8i:Œž½xęYń1·F8 ōÆæō’;ēŖ±ø8äöõ«© G]a*C±Ń·N9R; ó’‹ž·ńŸ†£[‹k‡¼¶&HŻ?0IūW—_sjkSāÆģ«ż.&yR‹³€WŠó^qįĖ[0AXšyńĀzŒōK½.mˆ®„”“Ē  c9Æä?ž yū5jŚ‚/ķ%a`ÖŚęZ/ŠæŃK™­·“;Ę2sšĶŌź‰•3łwń&–ö7·d5“¤< ¼«!5Čy{^?1šGA]Qw8ŖS#.Ģ퐬AĘ7f×,Įź1WĶŠćÕh9a‡Ķ,N8>“א*ƒ† žqCw)2ŪjĘĄąÕØ%RĆpH=OCHÖ;š:.ēĮ,§Ž«×°6­¦Éhž`™¾dRq‚=éøŲź¦f’šnĻķĆuńGį>­ū$xėTÓĻÄ*ĶįĀó>žÅ‰%pŻBœ.G§„Jך‚Ķ,S¶ęŠQ‚céXUch½NsT±‚īĪh~č-±ńWķ IØ„§ÄM*Ņ[™ā ¦k±"ł:$Ä{gŸųÆ:[—Ēęķšz/ˆ¾ń…/ōO·ßŚZ½ĪŸ"/7p°ĖFs×'z×ņńĒįÄ’ ~!jž]6[ .ęO6× ģQŸ˜ ÷Ļō­(Īұ”—CĒ.R0‰ē„P’'ĆŖg=ėы9dČ\>dąĻožšąēéV’2ę+ķ~?ZŠb…c‘K§”ķļHĶϱkk‚#$>øā¬¹"PrO)5¤i@ę®Y£‹a ;Ü÷ ģ¦ĻkżŸ¾6j?³ŸĘļ|_Óc…ō›;µƒV·“pK‹g 6qÜ`}«ż æeOžų½ąo |nŠg7ŗÕ…”:gˆŒlķöRåKøŸoÆ^OŌēQŃ>å³e»¼]-ē[ÄŻiīĆ“ŌVĪ©i{euoŖ…Żo*łwqc©ž÷ó® ‘4¹ńgķńū,'ķeū/ųŪᾕmd|„+k^šxĮS:‚L$õ "—CĻńJ’9/x_XųyćKĀŚ‰¶hŽiYWD;[kǓԫdb²(óżkĖÓ.$ŗUe ?„džļ ń­”ŚöuĢkö†apĒē猊ę«JźĄz“khĘ;¹[(3^‹¢iGıjz=¼ń%ףŽXC6 Ś=ńšóźŃåz•ÜłW—SмQh„fŚņF8UĻ9ÆŠ_…+Óu½6ÜFŅ‹•B²z:^Ī^éœā{=·ŪdܱɅ݁‘[Ń­Śm­»<ŒW qÉj:ŪRv•_nH8‡„tK=܋,[™ŽvŒf­Č“F5ķŽFŠĒØO¶—“§,sŠč?jpŲivÖq4‰#‚O \õ—‰®ŹęSĒ TUņ!ŲÓ±Ž+›ģŽkA}†“m“ ˜äiŁw7m¦¼ŪW0­ÉBP{PĄŅŅ¢ NųĖ/by›,Wß4+!ʰéÜVOq£Ø‰—41\øX‚Nz ō;½3E½@ŽxTǃ’ćėō§(ŪS”jéwÄZMē ēŚ})oąó žAžü b”šņ£?NO.p3†Ķk\éö(ZaµKv­ Œldɦ yq²+s“ÓéU›:)kÉ ķŽ”2āεŹgķ!ˆņČč?Īk·š6“HKyHžI>SĪ†ĻYÓ<u'Ū “żćm?.:םźŗDŗ=µÄ2Kž“%•5”£bā=‹Ä–ÓÉ'=«"-wķÖó) #'Ž‚¹jG”ķd˜9b1”ØCG)E/›±©¬x7XšjxǚF±i«i×h—j©ĢØoŒēńZöOŚĪ†__Ā×~ŃSEŠUóŌG°ĆqŒdŽƒÆ­yӇCż<žY:Y‰śüž=żœ¾.趖£i&—yį’R§ģךgæmÄg#޽Ėö²ųTž _‡ßµ7…“{³š“IJA±%†^=>õžėČŻF#ŗn㌊Ź4÷>{ R—,¶?f™“ē›IÖļŽŲŪ,‘Ņ0ߌuüõÆÕūo6°żƒC𚘘Jzʧ«¢ō©©4ŪOų×ā;ßÅąŻ;RÕu{uk†·³Œ»6pTsĪ+ģļŁßą‰>9|чƒ˜f-j| ü ų'ūLŸ|*ńu[ QIü1y3lžÜ†Ÿ½ó uļŽ¾Ģų™š·Ć?“§ģĆćæŁ;ć…Ğ!ÓģŻ4M| gó¢Ba˜7ŽI€7 zœų8—gcįs Ņ©dŸ[ŸĢĀx—öPųū”čŗū\ŁjŚ]ȳŸĢVCŲ޽:×ķßķEūHAń›Ą¾šļ€ulõ«„WÕfµ—9€ŽPūäžkĆĒÅ7uŌƜå}O2ųšĖRšĻƒŻžÉ'—vŖę&$Æ=śžµöץĖ@k:¶‰Øj-;Ę#–Žå—‚~ļLv5óįfĻBœ²¾!G,%ŲE&$NÜ ųkēķ+_æń„š÷„Y"{gŚ!‘šYvä:žæ•aMj{xMχĮŗ·Ć’iŚų–Kķ6i\ŽYŹ»ĮĻōǵč7z¬SDńA LwģE{xe©ö9|t9y“»y"’K‚Æł‡\öƶ?d‰‰©h>1żŽPŠ|µōTdvå˜ĻmBŚIŸ«<ā½?Ć:V§e ­ĘŸq('-¹HĒ8ĒzųÅzō²\’gĄ7¦ęx³ĆėŽ®PŠśĢ5_tü–ųļ§ŁhV“éQ"¦;‰–CŸ-ĮcĒėłÖ’ģa¤ZŻ|@ń;ė ŠévV>}“¹.AŽżq^2<­£ĻĢ«{§Ś7ņAs©\­¹óķ1{޽3ąÖ½“¬éś~³ok źuŒ‰£$§šƜÄČųLUSĻõ/ŚĻāæk—Āžī[„Œ -¾å棊ł¶ŚįgžīĀaÕvŽAĮ8?–+ęń“9£+E®©s¦,lņȓņ¾y•ƒc{6§ā…ÓnfѤĮ~w6īxü|ķIjuŸjĻż›bͧ©pæ»ŁÆ4ń>‘=–³e}käMdĄnźsWLēr=ŚĻV7ŗu” ~l#†{ó_3üYŠb–ī{ųS7wYiĄé×­qbtŠėĆČš]RĘīŻ"…w­²ą0ĒÆz«m”„ŗ9dY7Ž1^&®§Ńae”tū­/V‚åQ~Ęä—¹S^›m©Ąæg…eD…ø»W=]Ųś $µ±›ćVśŽĮ.¬!‚ēČ܎dK ż0M|‡šz[XŖäE‹!!'”}8ÆŲ¶ˆż;)Č`± /‰+#Ģć¹Ž`ÅÅ:ķ$ž(Ö!lźHēœŃś-8Łjkč¶‘ŽO;¶Éƒ“_f~Éž, ¼e{u­k ]ą4%°±‚ßʳ£~kŸ1ĘŲ­å•°É]Ź.Ž«Uų£ģ_ŚĘ~½š]Ž‹„kśįž;äxeJšG õWēdļ|9ićkk+Ø5›So:Ģ788  ī”uŠüsƬ’®/”1哕õŃéoÕ9h~–;ŪH­£Ū{€~Oā=éæķµ ŪYKyhz ž•œōGź Üń_ ėėżž“=ĀG$°X‘|Šä®{Wu:Ö>‚†ó)w>/ų£ń{Ǿųić…¾׬”šžæG©Ū“>ŽT£©ļŽż—.¾8ü4Ö“$ø@×#Œ\鶂½gQÜ©ļ_ ü=“æÕ,õ_ ųŒ}‡Åv3\ióĀOü½#”Įö;ZĮŅg›‹ÅFö<#į6­?„ž-\ŁųšŠZŖĖ6—t$l·õļÅ}Į¤=öŖI ė*įÕŃøĒPŹ*ģ£ēĒW—¼Ó?hf_‰7^!šō#Ä÷v±žö0rĶŌgčųńį]3ĒRĶ$Śe¬wƒrˆĄ ŽæZö)BēĢŗng$|_ ü6Ō¼#ć[-wĆ-e$l#ŗ“eĀÜ <cčkśż‘ž|5ųßįö:÷„į՟G–Īź ®ćÜ!X3!Sų‘߃]0Ć+–ųēĬ'×Åį%iÅ%V—ź~WĮƟü!ā~Ķæ4¹ķõh÷—:Ī®SģJŠ‘£7bŪXķōÅ~x#P(±HL@|¾ā¼ģd6‡gŃ3.­CƒpźŗjRs–½S“³łī{2jŻ@ŠÉ (¼…ĻJ¤ŗ•ŻŒ¦]>åķ§SœÆlz×=“GōģpÉ¢oüMÖ5ß_x_YŌļ®^V-„Ø$gåćšÆš|qšĖĞŃ<1ć»kŪGĄŚĄ†P€«éļžU½ŽšRĻ/AGc¾ń/‰<­źś}cŠ+H-bóå‹䱜ę½Ļönń~’ ö©a}§ŪźVŪ"…•šc~I#æ@?ZŅõ>C]ģ~²Ÿ 蚷…‡‰<+x»ć@nm˜ݱĻCŽœW—Żųɼ/oö‹ŪtR«–Įā½*P¶§›I:ŽĒ?Ę« ėkˆŅÉ]™qÜó\EƊķĢÓ8·šŁH,_8ŪųÖžĪ翆ĮN'čwĒ?Ų;Ąß’ą’ų»Ä ,¼3ń×DŃ.¬™ņ–‹zŽŠÓHųęø[ŻčZˆÖ·ö¦‰s Yv ˜ĘzŸÖ«™Xā³gµė?“æü š·‡//£—]²˜"»&dņ×|Ž±ķķ^E§‡d1ćö¦SnKm¬|ČóUaÓdw8P‰Ī:ŠBøŗtinøsß֝b"ĒwLb“ņ"t[?i~4œZjŅilņäTÜ Ą>ŁÆ¾Ńo|ā JŚ/™ķäņŻ—Ō_¹ĒV‚±ėžńž¹c4M3}©$#e<ŒsŅ»w‚8³Ÿ›¦Žof“&]6iŚä9ķ[6ŗrĮ‹&ö%H>ć҃xhpšn›m¦Ļy$V¶Ńƒ!č€õƘ’k˟#Ą_ŚÆ#‚Įī&L(č¤1īkŠĀ½Qåńćw'd”-{hõ<ēö]ž;;½2]$ܵ˜;ćlŖ¶żjżŽšž­māK"ŗ„Ń™£@ Ė}ké(l8Ŗžó; -·ˆ&*X÷=t–Ś5Å„»Jd9Ēq]‡‹^GŸx†ņßC¹}N( ³ķŪ #5ę <Ž+ÖĄ·Xs‘Ą­!#†hķ/<=ŒŪÜZ\Äź*~e8čkŌ„ŌmoŹķZT\<Õóbėū3KšłŌ0Ī+ Å&“U±·ģ0[2ØŚČ1æėLŹQ±ÅŁJģĮĄe8=«¤ŅbSGŽ'D¹•>•pG=Cz}*Ņ8 ÜšęDĒL–/3ēĖuĻjr‡c»šZ§ˆe{u6“¼½éSé—w:͚8—Ķ›9럄=ˆ6“ķ2=A œÓ}ŅK)<×'©č‘ŁŻČ–ļ…Ī1œÕ”5ŠĒ’ ā';€=ą×¤hž?×§šĢ>k‘-¬m“ā ö5¬%ŠÉĘÅ£Ģ$‘‰c ~u^M6X¤ŒTņėļS6CFj@|ń)Ā ē§źP<žT„ŽŠzĀ ĄØ–±[Ę. g|äJŒź²Ē6Tōö ,lłKxŸh3+ÜŖķ \×)ml‰|VńŒHI@ž4¶ÕKGw Īś×HŚ‚-•Ć\J!!ź(łÓńjöėž+™–ń.-‹ėŒm«åŸk¦9ŽŽ%?7ń҃tpÉ$Ž…䐓XäŠŃÓxö§,›žVŚ}ńßŅ“R4öe «G˜ķ\ž¾•Ö³@ļ†>ąÓS³$ف€ČF: h²œ,’Ččń†ąwؓ¹Q‹Ń[«Ę6–.z€:RB…f ć§ó©¦÷(„šB|±ĮöÆ-×õx˜·œŅ3FJØ«³:‡š_jW3#Ćlģ9ÉĻZ4ū†ŠX„˜gsD×AAžŁįmA0¬”ĒØ‘é^»=֜g’Öė®ģšO¦+‚”ŁM–l-5}M2ļūQ-,„“Ė2(į¹zā½k]ńŪE¤Ki]ޤf/2܌L=Oų×2·S¾-lń/õE±šß†5?xŒ°Kk :žC#vŽ+õĆöT’‚Aj·qŪ|Jż°•—[ńuåõ×Ųķļ4ķ3sFÖĆ#Č$ćiæ ü·’‚¬~оųš$ų ¬ž!ńæˆ/>˳u‘ŪŌ·Uęŗ!øéĀģü€ż„’nļ|ńƤüa‡Å>/šŽ§Ły;ŁÆ¢1ą"æn< ū@ų;ćv‰-ŽĖĆv-›éo£X]sœeŽNĆßҰUķ±U©øź|aūV’ĮC~ žĻ»ōoŽi_ž $c}ČŠ©ģ+ł¹ųŪūV|Sųķ«^źŽ&½¹Ń4©nwƦZ\²ĆČ#¾kßĀSŅģóźU¶ēĶ’Ü"łØ‘¤Hē<Žõ Ÿ| –^™ļ]œ½IÕ+«l€6;Ն_9&FUėŠĄĀR‘Ā;ČĒJ–(~vR2zPc'”im]3ˆÕ˜Žz{Óⓘܧi8=(9łµ±±oi+"Å·88łkoM‚;K‰¾Õ".=ܞ[<ō™ÕIŸ¢²§ü{ö„żØuQ“šŽ«šóį|ĶŗēX» ÓÖ yl×ļ'ĀļŁßöTż‡lfƒĀvüRų¾±mónŠNĀUäį€ł3ģó*Ō»·CÓ¦ÖČś3ÄZփćYėž2ń,׹Dś’²&šG–¼cہ^ąæßĆ>µ¤A©jß ü%&Yy~ič@ē8’„b¤jrZž č¦£q§ßŸÜĘū ģ1“ē捯+Š<-©ŚhzxæńÅÄd;o‰YĘ×N@ō¢hāā+ķfśćĮśM¶‹ ±%öP1Ōż«–×5½ Ę{8ąy5/2fćapⓉĀkŚn£{$÷ŠŚdRpSnkM€é¾E¦›Œ0ŲXqīk9WU“Jѧx†iõ `8ŽņĻŲ f¹æˆ:^·{amāķWU·šž‚…€·O5pp1Œā²4‹¹ņƍ’iK½ĘŪĆ? |!`5˜Ę¦ņg ńœ~uóއćkćÄ>9Õī|A«`|›‰TĻ·­gRI#¢œzžēą’8Ž •¶ke*Ź ¼÷õ§ĀO…śeī½hŚķųŅģ-Źå[ėü«Ī©2å$}Ē©x7Ć'KŅķōŻ:ĪŹSähŠRĶŌ×¹x KŽēM[;„…V>•g<¤z†•s’ŻÅķƒZPŽXgpöĶO®ßi³ģ·-ā™Œ WTcs;œȂ5œ]HɁ”Ąźk¹ń¶‹ĀXŻjö_ē÷P¼]ž•“iö'Čļ¬|T²i…ŃŽw ‰“@ńS[I4³åŸ8ÜI­£ņˆ|U/éģĄ…v‹½yljü[wyk%½ā “oö5r—rұó+źznØ\™ŚŚŁe›6äŸė]”)Ŗkcū²qœu¬e#I=NŗŅ+]"9<ų#gŚOĶĮéÖ¹{=sU‡PøøŽšĖlxXĻŻ4s;¦tW~&Óå‚pń%Ų8`}ėM^ŚY<øŲł1x«’$åÆ®Æ“—[!ŒĶę ¦ģpO'ņĶz¾3šęĘŚ=ł’1ņ’9Sޱ1mœ}ę¬/¤gęb:śš¹¤©Į‘ Æ;nŖƒ$»xåø‰ö”$ŽzóśV¦čĖŌõ­DŻ-ܖŲvmējšjÄśŗ„Iä[häPGSK6ųūU»É;]s·¬ŚZxw7¦Ųœ|ēī śÖ76‹לĶ’ŚŁ®£npW#8Æo źŖjsŽ9ņÜcbń·éYɝ \č<”Į¤XÉmm5Üv†G!&-¹9éĻ8®ŽłĢ Ī[Ģ#'ƒśTĘZ™ĻbœZߘ³‡sDtEr }3ź2›v{ˆĄŽ =@®ˆ#†lÅŌõ;ŻFńćhDd ®Ehi6ח;R5ņ‰ ģüBńo¼CÆ­¦(iōČ\É?ßnæ^‚¼×Äöś®ekāŌ/RĄ‰¢ó3·w·Zś5n‹š ¼Ļg åõÄWŠģI#ŖóŃæ ÜHōū-rŹŚÖŁįk‰’Ć ōĶQæCīļč~·°“ÕoŅ×P…~]±IĄź{WĪ|Lu߉ڂXź6óCQ,Ÿ—'<ēŲb‰jī\[¹ä“¹ąÕ ”©klæ(Ś}Ēė^'ākVp¦š!– ĆdŖų|ułqļHӓ¹·ąėķcÅŚIāIµ}24E]ą™#ZśŹKX!ѦÖt+@šbm‹h9!±ĻćĒėIĖ”„sVĒƚgƒ¼3ŖkSFŗ±•·ødu&¾h¾ųįć]RźņKDÆīöĒlŒ~QīŽœōŖ¹ĆŲī¾ xcGųĖØÜxKĘóZé Ä©x°äīėךÆlų³šēÅ_ „Ó%Ó5Inōx”Ø•;øćžĒ©Č©.]Ļķs_¾ń£6£s$ĀA3ķVlī K~“¶W°C=™™Dq†ĖsĒ֎mA>‡Öz¶³šēǾŅ<˜āŗ×-|»} łĪ=k;Ą:„VŅ\Gg¦›Ø­œ‰.ŃŌjذg1¬G,ŚÅĶōv‹l%œ\ēÆUųjśm¬‘9Xīä`sœ`c֗9“‹8ŻjŪ]°Ō/u"DĖM— ĀČ=Ļ_zķō+mG[Ó£¢x0w¾ÓĮĒj‹š®ĒYØ\iÖ0Icd.2a åVć?‡Zå’gĻjŽ#ńākńµ’}”`C•Ī9$ō­yµ¹Æ.‡ÆüLŌõ»mI·‚öčŁC1/“åĒÆ5ć~.ų'¦kžh_øæŽÆä@>½:žUŠj'+ą]OYšī½įŸCt÷V—÷¢ œüÄöĻAÖ¾ļųżū?ßx‡@¹ŗšÕ„ž$Ņ-7_4ü—½ ±ęŚüŅh7ÖZīžĮ—xW°>‡·ķśf‡ećkÆX@·?č£t™ąŒõ«H±h^е+懶śŖĮ¶×NĢ"V+—öüWé7ĆSOńĆė²Esi©L„åIWk†ćƵ).¦2i?,®nō ‹ŅņNb<’믇5Ųme³ø±½Ō>ĖO+$ŽŽõ—S+ŪDpš+M¢jVņCĀʁK?ī׊^ų xėÅ:f„®é,š›ČŽĘ0Qäō8śÕ~ˆŁ~̾ šę­7ˆōG³¹¼·VXå]ŹĆļ_>üqšīŸ›¦­žŽŠÜļ\Iüņ•śRęģUś Žgx{Är\m3\E“rd”C‘ž®ĀēÅ-®j–¾!悝#œ/śĄ9ōč*”n#/Bńöā(-!†ā%—"X…Sž÷Æaų•šßāW“k/߭ά-aiŒ’” ±`ōĻqÅ hüÉńœq5ć[Ęó]ĀÄHˆ9<Œzń^I~·-<7)ĒĘvž8÷PzŲŅ2čĶ \čwvśŻ“‰ Ŭ‚|°į€ƒ_«? üYeā’ Yj?iK©„\ēĄ’ŸÖ®[‘ķš~ö yWÆ ®œŚżŖŽ8&Qp…NpH>õęāM!£>ų¹cØxsÅāÖīբќ˜C€sŹ–õÆńƒ"ß ,”1Z¶÷ĒŌ×$^¶:āō=öxų¤žńu¾‰©i֐ųrōy„/÷ōlWKūDü8æŠõ“w¢Ļ47j/¬. ~`øŽ{rOJõ9mfKzܞʹŽ?¶}æķ_ū6éŸ ÅĒsH9I¤R¦֜7›B U‡÷jocŖžßū:~Š>+ż“?hĻ…_“ƃbžņūC»Š;»d”Ę&µfŪ(|u…¦ĒĮļŠž ųóš×Ą_|©CØxcÅZtz…£±ŹPSדłäv¬¦“7‰Üj3-Œó2²4C?ļ^U*ż†źęė`“@Ōą’Öł|ĖŲöąž¼ź«ScóÅŚ~«įŻV÷NK­OCŗyarr.­‹ waŒƒō>µų1’)ż›­üS ź~2𽁛ļź6Zį£lå¢ō9üĶhīg(ŸĻķšĆuyāŗ\¤ń°ĆFć‚ķČØ¤E™ąšÕéS‘ÉR õ‚5,¢L®Aõ<Ń} Gvėéõ­NW…$ iÉéŅ“¼ø„+“üųĖqŠūP.DXDłdD8čMgłŽÄlfaķAeų™(bv“ĻŃ*™ńķ9ĄČĘh:©š±Č)­ä. qµōjž†?ą‚’¶Lž ń”’¼axÉ E+Ų¤1ܗūmœ¤Œ<ę6n£8š:į±ż–ųfŪĢ–ĖG–ö8üQ JĶfūų»°™G^x śžUķff•VYC{±—²µqÕFńr.āžEÜĀāÜņ1ÕżUüsĮ|æa[OüD“ć|7Ÿ ų·7–’aŒ"Zė+ĶÄn½?z£Ķķoā¹£¹MĶ$qĮtŒnKČø(ĄŒ`1‚;`×9§[ͧ\46ŅŹ[=Ī{ńU+ Ł¢ų‹Ä+oē6™%õ” ¶F…2Ź+Łō+Ń&”g ńŻ>÷‡낼Qµ3Ķ®|9y,śÄó+yŹZD7-ĻlżkGįxSĶr=Į·Ó䌤Š[’ĖÖµĆhģ)­Oæ|9Ø„Ķ»­Ēœ¶āzפXæŪ-̊OĖŪkÕŽĒ DWŠŲ34ˆ˜ž•!Ō„ދԁģ*¬du–—“ÉĻ-·=+OLŃ Ö­¤ø¹·īQÕz„ Ųg™xŖ×Qńõ¾˜¶ DĖŽ@œ0Éży5^½ŠE“‘oĀ£ī֊eĘ'§h^’ŚP'Y:ūĀ·Æ¼'­ŁŻéś¦”č+įĆJż*"ŽĀīy“ūtšģ¬r·5ęk­i×z”÷ģ”D¹Č8*sÅLd;·mˆšā"8 ći®jĀÅõ©V7­“åˆRpÜūPfēŲõ›m<7épO9UPćĢrŻGNMtšV«å£Ė Q".Kmž"€S8_ÜZśK…Ž[œ½õ¬h<;w}•€oļŒw¦‘ŃLō¬.“½Ä;…ī (NļJĢ‚źyg¼‡ĖqŒēš”ŅXjI2‘ 6eŗ]"Ī ˜Óķažqŗ‹t:7QšŌś]ūS ,w·<±©g³‚ā20k€ęå†ĪĮßįńü#Ÿg#Üܙ¼Óäg”ģ)Ae“±KŒ.#\öļY­ZÅ+FĖņØąbƒh=L»›½]PĒō=1_Cų`izZĢįc1žZ ŽĻIÕ¬\²Ŗ1|ZņśE¶Ÿ¦O­YMķ: éųPŃp>L±“yĒ”YŃ ®›VѬtmāāŽńYåO˜IņķoLśWCļ|9¦„žą£’Oi’éhõ;‡:‡„åš-—īY<+ŖiÆ=„Ü/øĄŪrŖĖéČ<{×=ķqc ĢR"nŚŁĄp;óģ+‚„õZ4ՓGńĀ~ ų•£æ„<}o-ޜ\mŗ[lqņ“Ī=®ĻöAń…<įļ~Źć‡Ę?uv{[ Éćłm£|Œ>yą†źsQYÜłŽ#ɽ­78nsZ÷ģėāÆŁ«Äī•qršÆĀq?‡µ”?˜³Śæ*ŽŻ™GųČąŠū·öš’ƒ>:||Ó¬ü]ćNš¦§‰ķÖģ /ŽT’Ą'’ÆAłģó7õ:•`½č§§šGļfń«öż“,5Ķj’āēĆū-RįŸĢ1\«Ü:Øį“œžzž`ų‹ž ³ńcāæ¼/ū$ųšo‚®µ#ҵ6„½Ņ<¼»łåÜĢXā5œŁų7p6;>ĒĖ›§Zy^Ż—sš ƾ3Õ¼WćŸ[xčßIćŪ=NDվܻgKž§*y_Zę/“Ū _N½Ó®c&)c!YOÜnĘ¼ŁŻČž™ž]MEF:"ļģašoā™ńkÄśö‘ć½/HÕM±’ 9r±źezdvlÕżb铏€4ĻŁ®ūĀž*ńf—āßX¢Ē“”䰕-Į9\Ļž½Ōb·gēH÷? 5Ļ ų{QńĪÆwįĖÉ“}f;‘xĶ ĆÅ»žž‡ŸĪ¾ĒųKy¬x#ZƒÄ:·Šę½³»‰@ÜąłDńϹ=¾•ņłjϘ«†“¬|­’"ż•ōšYxēįāYé’ ³`cŽ §PęŻøÆĻ†>›ĮVŚF“å¼Ś”Qˆ§rKŽƾ_Pä”,}ŪšÓŞ+ŠĻ#…ĘÉG<żrÜż*ØŅčk=NĒO»×lõ¬²Ž Nw.NåŠįĆ^éou¦Ė;ÜmcĆÕéR„cī²É]†“°ŲÜŚ^¹)Õ[ūµÆą?‰ŗgĆ/x_Ē’^¤ßŁ—pT“*~ ā¾‹ µ^­6āŃłē’ń†~2üq“ÄQųnūšĶõ˜æ·¾“ —+·fxėŲōƄæg_‰#ą‡Åm'ƚ„––³Żanąbr§ųˆÆ~„“1““Ōmē’įōėŌSƒ$lx?ĖóÆ+źxxĢjz-ōśn«qan‘ĪØę7WąµčOa1³–Õ^ …\°ģOµ|¦%Ÿ1ˆŁgā-÷›šÆĘ j3u hų‚2qųā¾šŚŻ¬§ĢBdÉ$ļ_7ŒģŽÓĒ sį˽:ĆĢ·ŗ3Z%Ć`óą\ņ«Ÿ=•ĢW¬ę ¢u}ĢÜ9ü«Āœu;Š}6ī×Ä>‹®F‘™g·GČčǦJҼ“ūU”2rFAžé®ˆ@åØRš¦¦ö{m§øJöōŖŽ5šķī»o,–(<ŌÉž!\øŗ]Q¾gÉާ©hZŒśf§d#oļcšĶlXųƒK4æ…^0>VīŸzłL]6™ōY×ōūmF$»µš5Œ—Ęhö©q2éśŗČ#óAVSĪą×9µ#ßĀŌ³=Ś Ó#[”Ī݌æx+āėļ Śč_µ4ŁęūIž¶^9W‘ŸØ&¾ē‚q1Xč©u>ó!ÅņŌW>§Šõ i“X¢‘Ł.¢\”Ī "¾–żž?gŁ’h­Ā?ć č×6×+l±ßK“#ćī€;ęæ œO×čēŌØįŻykʾgĻĪÉ4”ŚSŠÖ¶½£x›Ą”џ¬Ź²yŒrĪ 7§Oóšśį‹ßZ{UÖoćß½bŽ{/cé[AØ]]Ÿ”:.ŸāĻj6z߅µi •UdŽ[i3ĆÆ#ü‘_yü:ų{ć&ŅėÅśDVšÖvČŹsæßҽZLš1”ś­Čü}į«Ė¹į×t*óQh¤ "ŪDXóÓ8Ævųić|8ųEń ā€~%[xCÄĀĀćĆZŠe¹e_õŠI>˜šĶtŹ£[Å8L>3š8˜óĘvM|×å¹üńüsń‹¾"ų’]ń‡Ž5×5Ė»Ņ\NŽcm²}+šž”-Õ@$\:(Æ W[Ÿ·pžQK …… å„RIvHķ­KE)Ł'ĖžżėZM:śęÖėP“…¤¶‡qĀ p¹ö>š²9 KNMFČĮÄ֓« EžŠ×/ćķgĘVß õ _4¾™¦é ŒŸž½(ŒūžV::\šÆƒ+ö™õ‹·šŽ"³YN21Œ~kźoŁāŪD’…fd¹ŽŅ{šŃw ķż+ŗłŽ:Ŗ»Gėēƒõ Ķ+ĪŠ¢ŗ‘"•|©TtlUŸxBßR±žĻ½PšČ9`y"½JhåĮā9duO…Ói—ĒģŽ^Ū_oc\ķž™{6—¬X6ó>Ķ"Æ»m8żk­G±÷|tgOģCö~Õ“æˆ_³ŸĀkö³Ę•ØųVŹmäńöuŠö=Włź|[ųaš›ö®ż¢¾é1Ęś>‘āėčlvŒ”?Q\Ųåī£üüś2ŹT8’8ĮĖ£«’’Ö·źz^…m#[eÄyõ§qaåb茨?•x3ZŸč-ō%¶ń:uͽōvÖ·’ÄĮˆa€Ąv®æāĒĘ+ļ‰? ¢šd60ézU·Ī‘"ņŒr^žµ'-Z'ĪN¢ė,ģyĒJõ=/P‚ęĪ{ˆ’xvz}je+žĢšŪėķ#ʧiė ŚŹ0§T>Ąz’Jģ4ū‘ķk;„ø§ļœXrhtė ĢūĖ€dU‰&Œ@#vū§Ž:V±“2(Y\½ąueT*ģvŒ7™sŹ©]‘=+S—O™ “…f¼‘Ö8”¶b@ō5ö'ķ#’Šż”¼?šĖDų¦ußjž ¹‰ģl¬¦hČČSæļ°öē“]4°r”\—Cē³lźŽt©Õ½źK•i×ĻśżOŹč„ń¼SsįĶ_DæŠÄÜŽž‡ń˜Š›*r_9.T¾m”ßžé_ “K]ĻķŽ]„Éł‰<šśā94}:ßT·½f2.5žśjP²?Éj³ęw:;Ęī¦ŲM$„AüÅvæÅd4Øle‹~ŁĆ!ČŲü+£ŁžuHœ’‰õį«%ĻŲŹ˜ņ1÷kĮśfؗĪČńˆ—ć™FĒ D{Ä©xągŻųõ5%÷…“«¦†V+•9ÜÊHČń=~īõ­>ņņU¶ Ecxķ„¦ooÄ䲯'ń­c±/c–Z£’ŒćŅØ[N`ŌU”V\äg­"ģsŹ'e-ģÆLŹ×ųŗā¹ąÖ÷÷+ t­ŲŽŁ­‘‰č6Z~Ÿ¦DŠöŠHF1½A‘¬ Q’ĻT-k0+łp śPe'ŠÆ !Õ Ī Žź½ź¬·Ÿl¾™ü°‰“œŠf݊·iö£ū· Ž#­^Ņ4äI4KÜ ÜDZŖŠ¾†R‘­«ų—ū.ه’AŽ+/Cń×ŪŹ¤śqI¢lM­ ,”ģ\®p2:šĶK{»˜<ę…Óć=j[±ƒEū+Yø22>]æ­O©éö Äp2¾~ēf4ɹƒ¦ ģ|Ԝ‡ė‚z”8‘×!yÉĒJ DT3[9čkÖ“©ĆŗyxSČ8NqPj –Ę®›®Kutfņ“ĖS§īÉ^māmKS»Õ. †ŅÉķd$É^P›h19—šźK’%Į†A‡Æhég3–9ĘŠpséC3ē;ļ ųu.ģķ.Q<§źŹżEhx»MK(·Ł©–A“Čäąwƒ!³Į“Kéµ-V{[ĖR±ÆĶŌrxÆ ō½ĘkUKxį•~c»kéBv‘Ēź¶péņ‰£wņ3œbÆĒs ز4ˆžµ\ģL©;As U*Č{ö«öš5³H?hĻU_OcG;V÷F[cH—e¾0"±m-l[QKā‡r‚¾Ō›øćįÉģąŽ4†t“v¼ÓĘξ•Čź^/M*{ģiÅ®c—rOœ‡P;R4rr|UÖüCw"jš5¼*:HQÓÜU†ŗ‡XĄY-eN¤qŗ“ĶTE„ÖšBqœdę¢Ó¦Õ-RHµk“wsäø"?CśÖ-ūĶ=ƒźS[ٶüa±żÜö¤»Ó'ÖeŠĘĘĪG”…I¢Ä4qi©éŗ…Ö—©ŁĖiqme' V¤q?~ҾŠ<]¬h¶æ >ʾs^jsØ@OX}ĄĆ[k†Iž…=µ?k¾~Ź’æf:ćHż>>»ć9XGZ¾‡{³ĄćAģ?śõļ>»æšŽŸØėŸõ+MWÄČŪ ¢ŗäcŒö±Ž±åf—&“ƒā§™vč:7’Ńä¶;©Œä€­`éz“’Äś¦ąķ+Ę6,q(ŗ%‰ģŻćėWŹÕ<]Ŗė^6šĒÅox—Zų©Yę;›HesˆO*ѓŒ ŸZüU’‚ž~ןuÆƄmu­GGÓć"_·Ų³Ą.px*WŒēÖ·„JQ?mæą—z§‹¾"~Źžń_ÄĶKZńŬ²YŽ­ļü|ł8żŪ)aČæä}¬ų żæˆ|=©kv7¶3‹›VóITaœn\ćņ®˜£=™ć>>ńķń&ŪUŸ Mp”7&ćģ~PčÆĒŽ?į_ĻĘĻŁ+öŠń§Äm[Gń'‰5?ė‘L×mČ»3Ūȇ9äš1ėŚ©łR©sŽ ų;ąŸ€wž'ż£¼EiĤ.–%S!÷ąŒƒķ_ üSż­5ä×|O¦|×(üLU%ŠĒęA ,s‚1“łāÆ[죪-”ś}¬ėŚ’„R]=3įĒĆxSżÖÖDŠGAü89éĘ1ōƖ„Ü×7ĒJ–ĮŁĮŲFXĆ?•{®‰šÄ÷ā U%6¶+Š¤Æ¹Æ9īšG†|! ßdšźĶtåBĢӅ' ’:tÆ}š—Ā«BX®ÜÉ łNkNū™¶{żī§éŗuŗBb  ¦>荮£%³Ij†Žī8éėZF™Ķ9dŌ®×s]j u6āFAé]f“,7Ģ·ĻžDĄÜ:é]pZ˜¹w(k÷ęķdŠÖŃüÜr3Ķ|Ļć?‚zļ Ö®ļļ,5Ūå¶ŅĶõ®˜¤5#Ō|' _é:d0ŖĖuå ]Į²NS[I:ČāŹuŚ9śraó3i5„Łq均Œ7jÉ×ģ­e±øź‰.q\óEF}Ļ—|cįK]I™§›'ļ•oQ^‰šāŹóI²±³æø™Čźää1ØQ4ę¹ÜxĒIæÖm¼»wš8ˆĄtąż*­§‡n/4ٚ3 «Įņ…Ī?™ę¶JČĘlółĶ“²°`ŽĄģcźkmt/ōa°•US·ič*g±“–‡>7Cz±Jīc)ĒŅŽŻĆ[ŖrK9cWĪŹ±Fåb šĄ.0OŖÉal°}©§NŻĻZ®kčö¾$±Dā3$˜8~Ā æ¾Ņ5ė ģ¦¦VĆæµC‰p'Ń!¶Óķš9•ć‡i•8Åd3A5ě%FqšĀQ±²•ŒvÕVŃŚHJOƒ†ĒAV®u.ģ’P«Žæżj µ2©3ŽÖĮ-gk‡æ;AõÆ=†9tĶC?n.§ä;ī§Ņŗ Ž)²mT„ÅŹ˜&fķV<>•Ņi·ņéVČé Ėr¬:ŽįVsNM+£šŽĢ ą|6i¶]ĪTś‘^#ā/Ūź‘ė63[­¼Ė«æ!°zūgōÅßB—†WŻ,aśP'zÆĀ Ļg)ŖX\ `ƒõĄĶzVqk¦Ė}kacm$3nƒg*Ąūw¦fk[ųbūÅæÕ“k[UŠc—,|.N3»øUOü1ńv…©-νwo}m$a¼˜“ī7×?JB)x‹EÖ,u[f¶U’r’+?ßō­km“=.ī0-ČL®9×4F'–Łx£ÄŽ$Öa[ƒźĆ;°;~Uļ’ µČt}GYŗ»øM.[Ų|›†‹Xp@Ŗ±«g{µ¦¹y3Ūܦ£¤ZŗÉq–Œd`ćņÆC =ĀM†ā eŁnŚÅ+J„ųmš—S—ÅÖ^#’føø°Õı$€d Ł'~˜|aų‰ö}'ÄWD÷󣈞ę\’˜*1ųŠ%럚į©ģ4Ė»‹Ki c+>9$õükĢ|y£Ķć= ī’)V3å™ Ąnzā‘\āxGĀi¤¶™ż¤–ś‘‘<¶F\”l`œóŅ·-µ»ļōŻ:É,¬ŃČU…_oÖ“§Ir9ėłģüE¬i]ćyö’Ü!`œq‘īÆÓŻ{ohŗe‹i×A䬈™ŽÅHöśUøhg#WĘŠ%ǃu-By ·ņ²d Ąė×ņÆĶA3©Ōī‘63F6ä0„`½®?c’ü;ńĒ‡īüOzneV‘Je·|¤öė_^üSš^™įŠ–^#šÖ„ x ķÖE9eqŽŸJ™ƵŻvUŗ¶·ŠoŪS•XĄln$t>õSĞ]sLŽ×Z · ”Żü-M!Xü²ųŽM½Ö¢Ņ,ؖœ ĒĖė“Ēq^y.­}=¶–„FTČĮ źkh"»-toé>š«CseuØN™¹pDžžÕļ^ń–ž Õ¼;Æs£‹wcĻ}1Å)DĘGä7Ē߆ŅhŽ+ŌuėY¶é7#t[P)b Ī~•ņ®§H¤”˜q‚:Öhqzœ;£²²‚¬§#‘śWŌ³‡Ä)<3©Cį}BņŃl”Ä|ų'§ęx®ƒ¢é„“dFņ"Ś–!ĄSœ©ē^ŸįŻ>ęx„øEbUOø¼ĢT)˹ętÆųJü+«ŁÅ¢Å>æoIŠ˜@8§å_Ÿŗü6Öś%‡Ū‘ā¾uİJ›L-é^kN÷gb}Ļ)æŅnZx–&Œc9ĘŅ^+ōįž­mń«į&”¤›G_i1ŚÉ—l.rŸ†ą+ׄ?vĀ’6?ą_“ä’±§ķ£ąź—ז޹»fø¤±Å+.Ź:•bšÆļ’Äńh×ė¦x—Ć3ŪŻx{S/,䅃!Vœī"+J‰r¦;jhųċ¤kbĘäIöIˆŹkŚż«’Q ĢĒü öhć'Ą½3öžšž‡l’¾Kż—ād;–[Ż%Ū÷–Ę哟Y?ć›Zѧ²y„‹–Ģ-Ź2GēNŠåŗ2šŠį'†he,J˜»}~•—;¾QŒž5ߎKPVFbĄ†lšH©ņ$y…”ē=ÅjCeŒµ¼ FŹÄŒųžA%†Onż)X\č–&V˱Ė)īz֜?:«/ÜĻ$u„-éČŌņ šĪ{yĘäu(I÷Æźsž Īż· žŁ×æ`ļėZ–ĘŻŖų*YeiaByQ’[oLčMd£}Čģ^:©‘mĀ·Ė0&9G\Į®ĒC@.ōėŁ#k9wÜøOÆć^}X›Ÿ"|mš‘l<{l"}[FS ģ>[Ė6#$ŽäcłzšüļųÆšóĮŽ-²ń?…­tŁÅ„üB÷Gu;HA-qŠäóģ+˜gņ-ūYü¹ų9ńc\ŠŽŁcŠõ9D–ņF0ˆ’Ĥ‡&¾^ņå+!1—ŪĻÖ»ilsU‰]T)ŽE‰#,y¦Gū @V ŲžŗĪ)"œĮĢŽ  €óž£éQFĖ.®NZßėLØŅ6r@ėF(žA%Ā*c€z~Eneūē{ēҬŖŠĪ=sA½4K "EÆ'yĶwß>!j?ž"x+āĒ…VXuķłnc;Ģ$üčHŅ)[S²™žˆ_±Ē}ö›żŸ>|hš_ˆ?¶µ>Q2&–ÕŽžvżx9ÆŅŻWŽŚ]Ēļl¦UžŚPz‚3Šå«6nu6élx±(|¢¾Zż©gļ~Ō~!|×ŅuFŗŠ/ĆiŗŒ`“R#ą•!±œ a޼ł-DĻó~ż”~kß~2ų§Į~$е ģ^Ėm=“ĄälVQī kÅ5Ėy¬– N×aCœćœzTEŻ\ĪG©xÅ×6ķø“YŅā3óŒCė]‚—£ėś,ڶ–RŚxŲā0~gR?†+äŁo7_H—éåÄymՀ54„fl}Åš[U“ń>–-ōĘ‹]ĀPœ•·¶+ß øžČ„å{z^„*—9źÄėō›˜%u£o˜rGjÉÕ¬ÜMžŠ“žżė„Hę=ĀńĘöƒĢP’qĘ{ÖĒŒfŠå{;khŽŻ¹qżćš.>»£ė:X»·“ŸL¾óBm`0=N}ĻóŖśö…®A§i:ö’ŃÜH'źĒÆ?ˆ4ʊ=ēE.¬ęņ8Łš2Ē©=ėœųāOģČķ'…­ā(˜Ś Ą}+Hģ\Yóf«ā/ų§Ä¶ŃŲZ}¦Ćnóå®pGb>•Oū}gY–óȎ&Pæ)^zš§ŹYŌ>½„Z,ö—SHc™ >[½žN+ĘåҦŽöD0˜­—;9ķķL‰H»a”›Ā"”±MŻIą×µxjĘĆĀÓÅu6š„Œķ‘~SģE3;œf³tž"ń ŹŁĄ<‘•= ¦*_x{Q¾Ņ®‚em„OV÷śPT¦¶¤¤Ę6‘ÕwŻ÷5ÜųE›ķ[DkĄbqŗ³”žĘÖ:‹ÄÓnģę³Ų$—ņĮĘ.•«}gk4‚U¶»*ó·×õ©Mģl—sžńš†o.4•øccµˆ'>õĒÜė’ZĢV™ā%€£•Œōū/ų_Iš¬‚h Õõ«€aņŁ2 R>ö}kĶlüGåĢۈD“ŒlR)ĀrÖZ’˜É`ŻxQõÆ«4ĻŚ^ųnĻT¶’ Wnr'>•§.†±•ĪÄŗĆźį’<‚ķéUįŒG—˜‚¬eĆ9=ZÕåÄR.O8®l_C„+,Ćˈ÷?­fTw7-.Ænķ_ū*Eß"į2:ęø4MR+§µŌķ®-õbެ„}Gµ&n¢[³Sor$V`Ū¹$×­ŁkæhŠ$Pܧé›EäŽ%[=fCŗF_iĮ<žµć]}Æā~÷–ņÅ,9ÅL„c¢“K·Mżģhv޽I­Ū®·į[ø®!-£$ķź9ķ\5d~Ÿąüā\ĪŽ£ZńæŠ|Wį ÉØ%ŻĘ‰¤D,­§¬Ųē~•ĻiŗģSIJÄģ}y5åUØ©“魅Ō]Bįx`88ė^srņ"H„* ķ5ĻķW…āŃÉųÆā/Ž ĮSxfėŸĀ韬ū5ÄBHķ®Có*“Ū8ÆšĆiV÷‘]ZĶqi~kĢÓČIpŅČŅ1'øf$×½~Ć:÷‰<ń+Hńfƒcö«K“}OOžm‚ą$€‰žⓨr<ŗ1¢t’šP|9ų±ūgjžhsčv7¾·µń"”Ś“ź1¶ŌdüĀ0ØqĒĖõ'ę››±©Gf–m3>UG÷›Ņ³­WšNOvy”°s£F4äīҵżBųk=켩ˆ§ÓE½ļļ_q O½ŽĒükģŪZŪ|ešßÄÆƒ¶ćOÓļü>°ų† >P±5Ča¶eQŸopRIć›ŅĢł<ꄜ“=+ć7Š<į]'ąGˆü7_x‹ģBÓ\¹†,—…q.,­»žµé:'ü5s¦és[ŻÅqo&GpĆg§µó9œ;ˆ¤ļ©ļzW‡&ń»į¤ń™*iR(xnW€F9ü«łųż¢ßūIåLöČ©Ć0üy5õeŖ^ųĒÄžń…­Ś‰“õax¹ęXX`ō;k‘DĄśÆNń=֞‘Y<ĀėO~[·cśŅ^j{ōķEE¼sŚ„-ƒ楟+²‚=\ņģ~#‚MA^Ʉö“¶"aß؊ćž)]Żé—¶0GdaŌŻ@—ją ē‡_OνZQ>ó*–Č󦶼½„É~ĪYĘŽ˜Ø“xZŚōĶuc…°gŽ7ėŠõpēÓĘĒ’Ņ>ÅćļŁŠßi·¶7Ķ•ÄQ0ŻeY“Æ'pśƒ_,\žĶ?¼E`ž"ń^™q¦ź¶öķūų¤* ś°üzשŲņeYņ]­n’1Ÿ¼aašsĘvoe夵²Ū må;Ónv~5~Õü!’‚ŠŽxķtĻß|>Ót[“mżš÷Ó®ł.ā V0@’k¹‡.ˆłœĆŚ4?hų¹šĒĒęćĮšŚkŠĒõƒĘ6Ygr÷÷ĒNkłpńTēĄ#ՆĒÓļd*Ēqg°zżå^5|eϜ«ˆg诂/4æĆ¢ųš YޤčXƒs Ōž‡ł×ŗYéÅ$m1ņą,2żvÆs^6"zūKīqzī±y’’‹ōĶLĮ±X­¼±ž%Œ3žüŸŹ¼įŲo¼Qź“3iė yćxĒžGµ|ž%4Žæöšu¶…ń HÕtiĘ‡}„G%«dØ[߯å_8źöv÷^h–NAļ^Lڹč#ķŁŪW¾ń„C¼Žm/"ßūŅBOQō’ś=¼5qä3Ć €+zRL²<›ÄV3iWpݘĢA[$Ž+øšŸˆ„ˆwķóWOsONėCS³±ä?ž]k×>#³°ņnœŗē«āét­Rhn ļSµ½|Ę:—SÜĆTg}«Y¬V7s2n>l†_Jō->b^;ĘTČ ł÷xś 5Cæ‹S†ā!x!_9T`©čE|uūCßjzdŗoÄX­ūZŽķ]„UŪæ'ϾkėøF±q›Ż4}ŽUW–ZžÉ§¬÷ߣZ™hŅ+ÕI››Øüó__žĢ–7>ńĒŽ“铳aŅc†-B B›rG©ÆčøĖ©ö41 ÅÅõ=7öσXųÅą Hķ.’·“Äit·(|Ė`ø8Üy9 ƒžÕńn™õę™göØV“…<ĘŸÖŖroV~Į8˜Ā“¦¶E© ŽCł`É(ć+.Žč–Śą—=ė+w)ŻXõÆ h7zŽ.Rݚ!ĪƤü9įėH­a»»·Š+”RC7jŃm©ł—ękŚ{8=$ųÅÆ¼6QéBšCl_y!±»õš_Ä?Å«Į6›e™į@C† ī5”äyų r• Ń4]*š„¾˜rŖqštæ“–Žę} žóOe¬\:œõź+³ė(`žäZwƒµ+;«4–{9,W‚ķ÷ĖząWŠŽ Ń“ĶÓR‡ÅÖ+#9¶Tmź}ŖP=J8{Ö^)øŅ&ģąŠģ)82ÄVe¦›£jņŻyö6)ēi#Dn'“ŠŹW=ģ4VĒ ®xZūĄ·EŅęŁü)$fHäF ĀsŹ·ł’’?Ē¢ĢŅ£Z $ݐWÖ¹$ŽĒ”ģ®ké:­¾¦‚D`ņ9ūÕ£u0R6Œc¬ĆŁGvc;^3ų«ØsåīŲŁķCv„ ]ŪĮ{j±©(ü0u8e>¢½gĆßõkˆ,“oXŲxÆ@‚&&œ,ī¶2;wü=PĀPg ©Åc żĢŗTf6bQU•Įė,¶W6§'—÷išÓNåė™õ{(µė+½'ķ1‰md ¬Ėź­Š×{ xĀ8§¶³Ōftfl+ØČaZŲź·5„ų?ńOƾŅuæéŚŌćƗ/’zGĒ#ńęŖų•RÉ4~dĄīŻžõ|ęSLä®ōm^ŅÆ¼5ÆiŃßi7+µŌš#żå=|õš_ųkx&š²¶»£» -äsl3Ń󎵦pā0h±>üIÖᓱ±Õ"•¢Ż†Œ¶qė_„§ŗń֕£č67:†©pŽ\0 囮+Ö”ę|Ę?.“nĻŻ_xį×ģuū3x“Ę_“ęe=śµĘ¢D„™ņ­ā’ßNųŸ$WqßŲĒ ź>ėd`dł’Äŗ½ŖßipŲZEg ŖĀdTp02}MW0sžĖš’įCiZ¬M{qfóŪå̰ü„øė]ü ÷W·DP˜ķ¦Mé8 †Ļõ¬%+)t<§OšćéZ¢iĖt“® d`mé‘[zƄōÅŌ “†å±½>\śV|ęg=}¦¶Ÿ č-Õ­åēv9ö®źŽŅåŅFä;ŽžĘ¦ę\…†ńŠxzK{9 ņ–OHW…5§=µļˆĆ­Üį!a…tĄ«ŒU„ćc ßį…ÖˆK{k*ČK£†T=7c½tÖŃZصyXÄz:šńŖqBf6”§ŗQ{uä†É'ń®>žžŚh­•ƒv¬˜ŠZF™©\;@į¢`¹äōÆC°Y“‰•Ÿš0GZ@s¾1Ōµ+ۘn7µŚ× qX^ŗ–ÖvŽqö„ݐ\v„'`=$Ž®Ń嘊ōŸ¦i­o#Ė’¹-ŽųéSķņµ‰#»ņŹ”‹w_Zź¬-Lϲ¼¼ō’jhi)v-_C=¬J®õĒZĀßö‡_5› Šē®k"!‚ŚhnüŲcGŒ“ŒY·ŗ¾«o}å„Ͳ+g(pGµk„S»Ōµ FīKŪéźķŪ,Ē©śÖŚA(‰ ¬2Ą1Ҭ—x­Ÿ{*ńž=kś9–pHö¬¹ŒłY˜ČĶņņ¢³eg‰öŽō¤ī8Ä蓨tUBŅp0;×Q%‹Ä‰1ŽEĮõĄ"¤Ōćµ ås$2å;YVĶöpāg0ūĆŽ®0¹Œ·3õOŁišČ‘J'a“·é^O®ßkWgtq ¤u®…JÄ\¹e¢„™P;ÖŠ“s v’>|ö„%a“Ł@² FpsĻqļZZZ“jQFŽNk™²ć œżŻĀinג¼PŚ!,O¶+ź?ŁŪözųķūTų¦ĒĆæ¼}öi$iÕo")gd¹ä—=p;k*š+ŌéŲž˜?eĻų&ģóū0Y6¹ć}?KųūńžńJN×0£ŪŪÕ3•O‡ ]‘¼Ap.01Ēų÷® ³„37Tų“ā?¢xKį5¢Śi#.¤Ć–ĒbĄr}«¢šļĮļ²jK­k&ļ\ÖēU+911’s8¦¢„Ļ„,ō=ēI“KŌaMxѶ:żĒ8įJöƓ~2ųEī|®éžžŚŠ‰Š†$ cø“łółÕX•#Š_h> ‡Ā~*Ńmʶ×F+Kėk„ßs1Ę}äW§x«öhųmćkw›ā‡ĀÅŗAsIb9Ųs“œģiņ—ĪĪ×Oš½„4³„x H¶š¶—· 0Äq€BśJ³«üJŅ|1ioaqmż”®0Ė"Kū¹õżzé§ Hłā7ģ-ō}_ğ—ž_ la0Œ„’g'5ųiūH’ĮN4æ Łjžżšma·ž&1›ėÄó~`0['ŒnõŪO žę.vч^9ńĻ‹¾"k7š÷Ž š'„üIćoLā%·ÓķšLĄ,Gfæzædæų#U•ņi?’m›č4æ ŚÅē’Ā-ę”cŸß9o÷EqÖ«mē§N?^ąų•šėĄ^ƒį÷ģĶąk/ųnŽ1æ[!Uf1“Žł'޼ŹļÅk>ßYń'Ä"§ĶGo2±ēo8⸜»Źrŗ‘©źiæųĶ Ę±‚ĻO&?)Ćq¹s‚>ž•ŠkśĶĶՅ¾Ÿį»=>ÖŤņ$Ad‘G÷Æs"O×,`¹ž6v7מPFpj ’_]ŲĮ„^ĢR( Tƒ=©)kØÕī‰ĆŪßŲŁķ» µd=?J›Ćš_‚|Ƨ‹|\ėā`&#¶'+¶ÜsšÆ0±KÄž5ŸÄ&ö+EFˆņ™<¢vœĖ„p¶7v÷‡|'^ŻHųūQŽ÷9õ÷ü©ó!ū; Ī—¢|9¾’óĒ„‡‰õÕ`Ńäǒ9Źņ?µį~2ų‹¬ź+ymĖ„éfF1Ć >ŻŗRv‰ā“\Ż?˜R_³ŪÉ÷øĮrxĪkæų}šśß^’+KļS8™†ā¤÷ĶsMšDūƒĀß tߣE&­*j˜ŒeOœwҤ“ųm­ųšöqqb‘Ł“®Ü/oƹ¹5™čž ų9eąĶIęÕtŲfŸĶ,ć#,>µō5ŌqĶki–QY@(T¹ļZØv3”»œ\æ`Eøū\ąG&BxŪļU’ŹĖP·¬ļ|‹IpDƒ¦ŚŃC¹„Ļ<Ö ƒGÕŅĀ&ŸQIŸć…ć«z ī49G… ’Kؒ“”'½R‰*É=®«q-ĢW0£c €ŽÕ-¬r$…‰ŽsƒœU©Xķ5ė­6ÉģēLõŚ@ÉjÉotĮć™<¢¹äóš|ģÉɝUę}i”{Żü;m īņy൓vÅTˆs‘ŽOnq^š×B›OŗŌ[ÄF[Aø€S€­œ}Ŗ±.c|Qš£ĆŗN°śĻ†5[†ŅŁ^;)—& Žśf¼cQ’#™®ŲdtĘH=ė)nEīĻ:Ōü+āOT·‡G·†źŅo”#„ž+ķ‹O‡Z_Āxwū[²Ä“ɁūĘĒżG„Tcb¹l‰ioź+ńE’6öŚ;u!B’­ņŒ‘Ž3ļZ:oĮ?‰_¼Ž|)aq²i<ŸŽķBƓžCLqŁė¢ųSšiSĖ„I«½Ä‚;ˆäˆ”AŒeŖ‡~i²kŗ?‰.“ß±ŁĶ»ģūĒŹ¹?6Ž?Ī(,‡Z>ųfēR“‚ĖQhīdcņć×=1É®3EńŽ“­ėjp$r$ڈ6+{JØ£cģļŽčoąėčķä‡ķģū¾ņō8šÆž¼~TŠŒŗEƒ©éחZ¬MŸ•ø”cžµCOÕu;©Æ –ØłŽ¹łF;śsU~ęŃwÜѱ¾Õō›MJ ū»Hē¤*Ė>µŲų旊üš¬²ź|ņFa9„–ĄļÓ„i̬W"=‡öqų٦Xhž2Õgč>ń3ĀŽ6Ńķü ŖĖ&„ņFc›p ĒVZń/xM.į¶Ń£‚-B(‰†ł—=Ķa%©¤Zd“,˜`ąϹń.ŸhÖn±A2"FB*£ ¹é_ 4ok¾%†+ŪŲēÓŅé&ł›Sūøžµś!ØAig¤ßŒŸp¬`ņGćJrģLū)xŸį‰~+ų'Ä?m·M7F“ŽKĖk£“œ`cźp8ÆĪ_xV-"īKvW˜F9bx$v®~k;Čń{°‹ę„M¤ŪOšŌvĀĘę ķĢ’ŪŗŹN `ēi®ØK£+˜żgų3ńž/é7rŹ—·±f™;FßėłWŃzGŠļltū:ŁĀ,~^:Ā­$ōeGsKĒ7Mq#eŻĪOJųćö‘šU«xŪNÕāO/H¾EA žGcĻé^mXņ½Ś](µš•Åń{;1ūˆā,¾Ą šæšgĘ鹟āus~āĪāo³]µĆ,ƒŠ²Ž¾•tŖkŹtržÓūJxŚĘź?é7v¶śFŖ„’t¤„r?ĆŪōÆźožqūpEūJžĶP~Ļž0æ’_‹Ž  h®N&¼±j:’~a—ī­wŅIĘIō’2‘ū+½­n̊¤2žż«éŸė1ėT¹9dłNNk’W{ž'ń_Ā~ŗ]cMńF•g{ą-~Õō}n bß±H ėŠŒ¶±5ž{_·÷ģÆžĒ’“_ĂڪE‡-Üź^¹Ė7Śl&v(œó”ū§Š©Į#š˜KR$~tźPęŠ£Žõ’ŹĶlœ×t)ą`fBŹ`xē­[Ž%9Y$#œż+¤ĀQ¹™ó2¦·Ņ£Är.h3åbF„KÄēšŠ·‘—‡Ś•#¦™½‹ņ©9®ļįļÅüųšėćwĆKūż'Ę^Ō£¾‚K`Ÿ`]ÕJäx= dĪųé»ū0žŠžż­¾|.ųńą»čn“ÆiŃ5ڃ“kvĻ 2žß/½{&§„\ŪˆäŹžĘ¹+#c˼g§Gwi2Üm.#6×XPr‡üž•ł³¬|6Ōlu»‘Įé\Ubicłr’ƒ‚’aˆ.ęŅj_éR­¦©,zˆĢI”²½T>EÉī¢@¦6=2«žM!“G;Y%½ÄXuJōŪ‚F1ųV63”M/ ŻĻ„¼Ÿh'ģ„mćœW·ZOkp#†Č‰FÕlÉĻjä«g³ÓĶ弃 „];Ø÷öÆńrivŹ„Ö8®_8ć“YCs”2§Ąļˆ÷¾ńĢZŒ|ś Ó}šxc «3n>ƒś×čŠėo©\‰fA¹ˆnPzōč¢&v7€1Üp+rźõ$sņ²š@k¬ä’Ōæ§źöėnv–YB{Vuüßjy%•Ź8~¾ā‚NļBņŪĆhŃĄ³H2ČŲĪź“Ćž.Ō¦Ņļm5«h£E‘¼¦ō÷Ęx Ö1:ĻųÅ.īO’pūF3ŲÖ'Ä-&ßÅ7¶–¬ŗ„"1“yN@Ü~ŹQH·„éŗ‚vėšcī–4*É·'ō®C]ŌnēÓ®µe·ū,’eĪ1ų ØČgŁjڬWM¾ä±*ĆæZ–Ź$ƒ}ŻĻĪ®Œ=+Ŗ“KŃļķ “¼Häå²¹5‹’čRv:æ éš8FŽeVQōŖ~7Ńu•ńe¤«½Ę“< µ‡-Ķų*ĖS*\ų2Ń ŠīX;xąUķ×Au’0ˆŪH†z‚3H脺#a7ŚüY„Ü”ciOĪFpsĄÆhń'…Ž]!ē¶ø3O‚U /Š’žk*†š‘Į-„ÅäJ²ZŸ)NGSµGŽ"†DńÅpUŲż'ĀlW±ā<ßZ‘_ųåżNUų·ugš¢’įŽ‘„i¹.Z9$¹źN>ƒšłyõķSI¶K»ø$…¶ŗĘ¹ž8öÆ"Ŗ±žØR÷we³ńCCļ¼ø’<(2 ĖæŃš×5w⣫]iÖVo ~}Ņ[‰zą±Ą&¹$Ā­ucģūĻ…Ž"Óžų—Ć—Ś źÖ/g¹X2#*2[=†+ņvņšĒˆgŅ&„«L=G'ŒŸ„+ö<ØĻ™6{ī‰e ä“ Œ|ÕÜn}<« ݳ!Į'š„Ķ©ŻN‚åŌę®Z8f–ą¾ł$;œõ$Öē‡cÓļo­žńŹ[¤Qó(Ļ8¦pbč¤wZ¬7†µŪć£jSj4»^ełĄĒCļ]}¶«„j šG%—Œ·QXTGÄftV¶=gĮŗŽœf·ƒ]µ’ļOB¹ä/µhßXßčž"ŸMųm”^x»Hō‹|üžS£§'ł×‡ŽŠgēł;=§Q_Ū{ĘŽ²šg‡ ›ĮJ¬ŹžsćjöŚżæüßż©~ ų³įģZ?‰¾ ź/sÆ$Ļ Ł.ŪĪ>}Ž™5óµØFźēČb ?ŁÄm­ü9ńģ,­®5}:į®āieåóżGå_ü)ńŸü?„÷Cż!āŪ$|²ģ=G½yÕh(É£ž2ź~ƒx.H¼E§ …‚ ī3£žkŠ<#āĀŲ¶7-ŖØ•Ō?˜Ē³E*zž–ź|Kń;0i¾1¶æšæ†ō}@šAsmtń’óŹ‘Ÿ\WĻ÷¾>ųÓįĻkāׅģ¼C Éßu§¹@6ß@jöčÓŅĒŁåµ,}O ÉįļˆZ zē…/⻳”n+šĻ µĻŻx[Tµ2Fń<˱ؐøĄœ×„J–‡ÓƬ~!ųūʗ>!ųö‰{}{Ø6™v-m ?,q9ÆŃ}zMFūū*ŽęŽŃ/¬ŅŽTīŒto^ŸØ«Æt®y˜ŗŗhq:ĒĄ]>{›ż;C•ć·Ḛ¹ Ø<å^­šĒĀz•Ć錵­¼„`»Œ °9ī:WĶbj»Ÿ#ŽŸCõWJń¾„j5=złąņ-ŠMo)!nfŅæ•;_¶ĒĀŻ:ĆTń<¾Ó'ŗŃMŁæÓöÆĶ’K ż3\ ­ō< ’öM:V·¢j±]Kg«X81C#ąÉ“óc鞕ö߉|]`¶’4rM*lŒĪ{ćņ4Ŗ+ ¦ś¢GŖxŅ’VŅ.ŁÅę~äęLżkŠŃo-“­sQÓ„€A}žKqėł×‡‰G}'©ķße]wį·‡µ[©¾›#DHżŃēōł«ēOF²{^ŹŪ“uƞ«&™ģSކļ€|QØx'SÓõ*Cö$ō„'żdDr+ō‡Ā>1Ó¼M¤YźśVfµ˜nRyڵ”[¹•jzńW‡­5ہ" r¼ pMxŒSi÷óŁÄY$±Čąā½H4Տ:֑éŽ#ńF­õ±XŬM䩓Éž=Ę+ó’Qń,wR†:sgŪ*2ąĘŁä}+ĀĒRݾāž!ŻŲ,zcéÅvø2+ž sÓŚÆx_Y[»Y!ø]—Cˆńœ5|Ō©ūĒæ‡fŒśķī—ēy2 čĄćurŸ55ń/ĀĶoK¾˜=ø)p—īæåłWÕePjKsźš-žcąĻß]x"Ļ7D¶ĖöpäżĘ?–kõGöBųÄ|GšĆ\ŃÆ“_±xŹźīvW|rǼ(8śąāænĮV“Šģ} 7.]Ń/ŚÓĀŽ!ų]į-÷ĘgG“ŹŃÖŚ+›5ڳØ\`ƒĪ~l}1_‹Q\¤™­•£‰˜øĻPēś×©6}’†_kUė¾zܹ "H|Īk«š—Ćįā ^Śģ–†Ż\³c£zf”#ōœŪ0XjŖĻ«ō-!Љ`u¬Ÿx¦ĻOŅ®d‰Ō".Ī3NiŸ‡Ŗ³­UĶõgēĘĶC[Ö\ž?„y%–öW’$mܳ3É®9ĶŽĒéłF*”_Vhæ‡&µ?o¶VŻ·'ÆŅ­iś“¢\Ę! 恟†”eÜśøRV6SM’źĘmT*y(Į8$߁®FēR(ę0ß(ąAVåÜŁ"Ķ•ÜO›ŠÆÖ®ŚN¶÷ "¼ēā¬e3¶Ž‡KŖźėZ§¤Ķe ©:lÜ敶}s^q£Ēįļ \ióßčQx‡C–¶¼³f+äē#rū×3g„”Ęéwi„ŻOoɘff¶D'īäzW~—ipćĖ$§LžžõČe™Ģi„flžyķX÷°¹Vh¾uQøŌŹ] y‹śc}·N‚ö›%3ŹćŌž•ÆĘ”Ģ;zVaĶrüH³ķ¾cļXZķ³™Ń³ęKĪ:žUÕHĪrkcč/ünѼIįį_ÄÆ ŚėOlā+;óYcģ¤ąćŠV—ăöÓō]_MøÓžĪēsĒn GŽĒóŚ2Uēnē—}ŸOŻ=ņIjč„£ÅyŻžµ%Ō—ŅŁŪÉö[mÜVsG^¼žŒŻƒ[18?›2Nsšļ¼?ÆE,QɆX‰ūÄÖ<碈õæ_hÆ©®œ-nķn»…+\Ž‹ éf°|ø,_ā¶…Ašk%­œŹ!'„t3\¤Śq˜YGSšŅ24¦Q¶ĢĆ&\‘šŌkgž‡pNłļ]#œnŠĻa-¤&{<[Ƚ0µ›ØüQų™ąėXšO5Ļ ųŽŹeø·ŗµo™Hėx#tŖ–<¼F3N2WLōßžŅæ><.ĘŠ^%ńęyööwR\ŒdF /éUD&āŁäłLcŽ“ŖbÜń²Įåxu…ĄSTé§{.ļÆvgA”Ņ4Z€xal€ąd©Ē‡œr ʿʤć±5Į'sé ¬Šöć.ŃõŪĻ>•É­åķ¦£«AÜß`—ŹĪU}Gņ5Œ·{; hb²üģrVŗMė^Õō»ķ:E‚ś –X˜®B°9­QĻRŠ’p{{ūJübńgĒ ūˆ5Ó¦Zźžpö¶ÖĖ·c’|“żģ öė_9ZėV¶ŽU£Łjh ĖīĄ×”Qü¹_-–:ģ¶¾GٳßÄĖĻ K#]¼‰i6ß3…÷ÆÖļx¼kžŽm>hīķŌ;N@Čė]”Ö‡Ōa©ū×*K§]#™ZGx›d°–ö’Ǭ“M4W¶wė2 ēn>€WõškÄŚ?ÄÆ>ńŸsŻõ½øµŸh” `+cæ­ztĘV••ŗ3ē?žŗŌü!ćķō4Ė­9ćø Œ°Ü1Œ÷ęæ+|oāyüKą/‡>ŸU™µō„æ˜V<(Ę{“ĶUIŲõh;¤k bīV§mĢ© ub”¾Õ"Td†r =«‚Nņ:gœžīÖĘŌ®īb‚ŃŻ€×U¦Du X/b’)ķŸīI }E{™|nŁüiōæ­(įpT’ŃŹoīQKó:xtłQŠ}›ļCŠō]$=µ”RqĻ׊@ž ©”$–ŠĖ:<©½˜ćĶ7Ğ„Ć Ä‰–TŽs],Īf×CŽģ³ŖHĄäߎ¾ų;¤XÉróN1$NB«toóŠj’±źŗę‘£]„ÅŻ”*ŒpXEx_‰ō)ü Īś3Eql[|lSG$Ŗt0/!"‚½B5óęś~5ēś½½ĢWg·ÜØ0O„hšlJW54­*ž4øܰ0ą×Qć/ Ca ½ōm¼ń† ęGĪjģ<ĻĆVZĻŚ’XÕą‰IbČÅ]Õ“¶›Uø˜0óg*øŅ{OS&m2ņĄ}­Ł—§Z‚Žłå•ÖF$žõ“‰ĪŃæĖżšXa]äņ=s±Į©‰ĆKnaSž sZE[s‰EÖł ĶĪ:Sī£}€"½…QQ•Œ «kœ HŁ”źŠ„UĘDxēŽ¹©”¬A×G ¼ÄH»óĘi@’5Ū§–®@ RŒŗ—sšŪ@Ō¬ooÆ.Ś*B°ūŁėŠń=†oäU™Ž1ņ咊µRŅĄzF™©[ji`©‚Fk6ŗ‚ź’f„›x<ę“dŹV4ē źQ„cx›Q–Ö×~žél›0ū›$qĻõ¦˜œĻĻoˆńĆyuŖµÄóŖIæ.I!ŗńķ^'k©jóčļaØ^ĄŪ%%6 2ē=;ŅHĶ+›šMę©l#Œ\OĀą>ī[ė]f…©kÓjńŲĒs$ń?ŹÉ!åOcüé5Š [kp=„ķŪ@’F8#’‚¹ %½æ¶·ø²„˜z¹šę’ģ35mBét+ĢŚA,ܕ.HĘ=+Āc·ŗæŽIŁÄr±Žyż(ĘĀ;o ü7»ń=›_ßĖc=ŠČĖ–@¬ū õÆJŸĀÆ„A,V¼˜†ŽGŃ ;7ˆæ¶¦‚̬`ŲŚ1ś×²üš’ƒ5;7‹ĘpQ"uOG>£Æ¦ČqFWÄO č^»™“˘^ĮłŠ5ӫʬ-¢ŗ¾ø&Ņ{rĆh^Gėž5‹!Ä֋HE¹&»œŽ9WT ‡øWlœ9¬œÉ2ī ¼°˜¤Œ2Ÿ»Ē5ÅCö÷‰Ū2‚IéÅCeDģ!¹²ƒp»µY÷ œl>µ‰qt&’Kxę@£Žޤ¬Ģņć\³nij¹Œ6H$ŚW  Mš·­rö”ž Ć×½d[Ś™€;J?µ$ĶŪ!*½µPžŽ £)‘¹*4ģE§1å° ć4Ēūp¼C‚sĪ*œžĄl±kxāĆ×ÕŅį”Ź×C{Mŗ΁÷…'€Ķt“Éö»‹H"h¶ä®Gśõ®zˆÖŸc^k8"xc’ ·8ĮlvcNŃ|AÆkv~š†…sāÜÖ|¼÷lgÅ)$z4©ŸÆ±§üĻŸ¬õŸˆŸüuož‡p¦ßĆńĘPČéÉYsó2“ņü¢æ|¾ųj]CĀĖįŸ‚ś>‰š_Ćzīžxģüµ¹ Į짜p~¹ĶqŌĪ›‚ßü!šŽĶ<;£iZ—Ä_Ü9 %“FC÷$@÷ⶇà ĘöųĻāGˆu[+ų€šßHhĖFÉŌ+~łÖ.:Œé~k×7—Öz†<§Śųf<‰®aifTä×wćϊzĆč-.fŅļ//QED·¹LՉ¢—Å‰ģ“ CćĶb÷PµŃÖ1} Z6]œ ”dĪOpG5óF›ńNųēą½_QѼ0öŚz¦eņ‹Ęķ ąg?ʝ…g•ÉńGĀŽš/Šü ¦hWھ”–×sfŚQĪńž½zƒW>üW—āē„4ļ]ųę$øŅ­n“¶ø>zĄÉCü5¬esOfĻxŌü_®kšsCģ~Š›Ø**ś±<7Ņæ4æiæų(Ā3h:7ďGĻŪ¢>b¤ƒ¶ŽƒčP„s#łčųńūc|_ųÕØEØx×_–öŞP4år‘čÓåµ|aw©M,O ŖĒĪvžzś×£Ųį«.ˆČŽ=±¹=OQC„Upǵi՜M܈*+0—Ž£½5cŽU€#<ūÕ¹X‰Jń‰÷."T{v«‘Śļft”§×”>õ“d)3Z=:[l¦<ÖĪINEjƦy»J§ļO_Ę¢NĮm›‘hāĘśŲJķ<²:F¶Š ņČĒ D’N+õ[öK’‚NžŃæ“£Ųx—ĒB’ąĮīw½eķä9ź€żĮŽēŠā­RĒ”JčėąĀļŁļö)š•Æƒ¾|;ƒĘ> aå\ėrĘ$’I?½$¤e†Gn=3NńƌÓQ¹¶Ö|g{āBbĄi’£ųBÓšćŪ5Ąå©čĀ'£\Üxž ­„xr ĢL˜ĢcģÄpŻéQYhś%Ÿö„ ..µ©, Wœ Ļļæ=čŒnYę·Ś¾æm­ĒØjZ‹MqgŹ™C«ąō õśWāO‰³k×eM2 ņŅćŁtą‡µkŹe2¢j¶¶QŪƦ·ŽJAW{ćük2^ÜźS^xóQøŠķČڈņL«Ūv1ן„D’3æB§‰|{Ŗ®™o é6Œ#äŗŪ¶Vēų›ń^E6”„Ļz¢iM޼Ąłq& ž·Z‚ćämĮįļt»oā'a¦® ¶r'L)čņ®/[ų–-ķąÓü#¤[h:|»[…”żćĘOåHŁM©ź‚ęį2ź7Gęi¤;ˆc×·įPiŚ·šŒ+uiw| ¢)84œ‰r±õ—?g]7ÄØ.µ¦H,#ž=ųŻ!?Żė]Ē‚~?ü^4Ķ7Kž XˆåŁĪx&±µĢåUOĮįXī ŽUPÅO…V Ó.@ŠŁlņW¶*ćžUźÉu4)s؁ĮäżįéZ¶?¼¢é«¤ėĪöŚ“ø &rŖ= j‘å™-4$Ō~ۦ̗Ö3•‰čł“Æ“Ż"öĢĒ„ØGPNÅ ž(ņ™ćńŻCyŹ<ČA ńĻZ×Õõ«FŅ8&H–RŻ)yT·—Ž{Cm‚`pŗ„¼6ļ—w®OŅ€0WYƒP¹„l Nw)śU;ymņIå•aLōĻZŲ É#ÓŚAq Ŗņ·uĒ„L÷ŁU[uo1NįÖ³leY./näXg+č«:ćMĻFqĮ"ƒPšęµ¤[É­Kɦ Ÿ°ĪM®-ī>ČD­Ž R3Weƒyw0“wR2>Üš8S\ÕµĖK3CwŁ/f8c€yż+x»ČĶß x§Ć©t`½¾¶…ŃŽCž[ŲWKs{hØ·¶ļ–Ņ1VRGŌGjrF±ƒEH®­Ā™RB;Œ|wvڜŅ:Į,.§nHĘ’zēĖš,–l<§“ŹõÅtk©;Œ)Ü:Ō٧ggiyjo„¤ˆĢaĶpzĶSĶ, …”gč2MÜ„°ū7dż+ž”Š_*0’ēh$rō čŒnyFæāh4żĻ5†F ēҳl|jņ*KjŒĆw]ŻE ßŲčw7Āķ¢ŗšMūŽJ±®¾ ±°^īć„`rզхØ+__žy&‰ˆ+ū¢·Ž’/"[2w6ڸ˹€ž¶Ó·=ÅҰo˜ˆĘvžõĶĻf¦ņ),®P@_÷źœ‘Hh~/üdŠÆ“mF7µ¹ón.­ć™Fū Ž’Nk„:~™ØfŚź±“ «‡u=Hģ­}YĻ©ĻýĆŽ"•4Ó7ŁīUL;Ē#ņÆfų}ąĖ›‹¹mn§Ū)ʌ0Lę·‹4qC|X£ĆšĻ„Žl{’|±#żąG§nÕäƒWŗŃ䆮&•ć“ä.ĢsĻ­2%¹š_ᦧā_š½ŻĶ¦—„:C, ž ć=8Ę:יj’š ģ¤_ķžīW%9ž“)g‡»oż™2£g v9õot‰nuK"–ķŸ<I\7Ē'ń¦†Ŗ0ŅŪÅBĪKøgŗDTV8,ßÓ’­]Ä·š6-¦ĢŽV³mū§4®D¤KńRŅSĆādƒķFĄA2· ĒLWƟ®—S±nÅo$•˜ĒīØķMLʇG}+N³‘¦kXIUóG” q_\X|.޵Ι«Iq©Ćmē#²|ótõµś“ŪüJń/†|m kW0O3„Į†ä Ż¤`ó¼tĶ}ķ¤|XŅüM#&ƒh]4dØiŗv?DٲLłŪāŽtĶ[iüFa’ćĪ`óøƒÓ5ļń_AÕµ?éZy±Óm.p‡1;zŌ& żšž­„xcķ—p- øb@,ļĻjö ųųų¢y’(ŠM€žRއNF~Ģą¾"iz]Ŗ^ŲŻ™-Æ®§A“õČļ_“?ü-mšžźVÖf•ŽbV8x%}Ź „t«=aķüWmrÜ€m§SÓÖ¾øāO†|Qį}NÓM½ū©šZa³ ¹ū¤õ5L&sš'ķ„Ūų>÷Įś¢Im,‘JAϧėĻć_–üIyiā•Š-ąv‰ó2:ÆB~øØäÖäņØI¶ēqGŽänĻzȓ+p šH=1]‡AĘ:SžĻ?“GÕʑ{Chź[ķĄó$čĻ\wÆŅK ­ÓDšĢe…‘[v1É)N,Õ’IņDZ^eńĮæš™hŗ|M0»d! Gē^;WZ•Īˆ=OŒ,¼UŖųņóFŒÅw0ŒĆ(¹¼„tČÆ>ŌoŻÓ«¹+"¹Py=Ҳ+;ŖW>÷ų7ā_ŒŸõĻk^kI H‡M»r‡'”=?Źżh’~Ćæµg‚ž0ŪĀŅxz9SLÖlÕžy-žM…ˆģ µvÓV’"1JL’A©5]/Åŗƒćæ Ü[źÖ­£¾·š æ:† õČö"µü­Ė„ź lghćsó ’:Ęqi“Tļ^"šä:-ęŪ4r®}ž~ą“?²MĒķ#ū(ź|!¢EyńēįlĀkĘā}CJfB@ł—gĻ‚N oŽ[žZĻ–MŚŚżŚæĄ™;;ŸÄWŒ4Éāø³ÕlcWÓ.#2rx>›?Źø)¼“p%÷‡Ž½(ģrĪ#YKHeńŚ–O,¶ķžVZčŠ9I6£m Ćg9­9„[Ų)8ėƒL Ņ;›ac»µKå–£;õā¢eÓÜæm:ø–ĆmćŌÖŌ+ęE%“™1²ķ5‘ŪMŸŃ—üÅūuź~2]~Åß’OzĘŗźtꧦĘčŃČ»m®kgųO­|{ńgįp×­g×m&Œtyće}æk·čS>øēšć„yņZ#óĆĒ^Ó¼Y£.•·ø²Õ÷k†?ńķrJūéųŠžP’oƃW ü{oćSgö^Ż5…Ź*ķņf†#°Ä‘ßšžš?ąœ’µU÷ķ!ū:xrēĀśœrųēI¶MkJÅĒ2:ŸßŁH½‰ēĻ'WBz:° ¼uæĶ§öŽżœ|Sū0žŠ^2ųqā{IßRÓoæ³$uM‘]/ߊåAč²FUæåś.HĖwm%؍”—o@q·§ą’.—ŖĆouw'”ŽWĻ­e(ch^-Kč-픓>[ŖżŅ1÷¾½źsšū¾7Ńēžłēgˆ•h#$šårQf“ö<Ė]ųak£ųk\:Qķ¢/Ü1ųāŗ’‚Ÿ.u;[M^ŽXµØ »s*0å^†Ŗ’-®‡ŁVKŅ[]G1UpćØö­ł¢i?-†»Ž:…Ūk2±»s’:t÷«RXNØ»·Iœö Ģō…Ž$šžŸ› B! Ō3m†ĮWķ~Ÿz‰<=eyo4ZÅgę±+“p}Ø5‚ŠóKMÜ“Ķ:ī-‘“Ž•“ué®uFLF²¹ ’Č ³×4{_·č“<i$Ŗ…eŪĪ9źkĢ/µ ;9§µkK[«r Ż~Rzd¹«čVV×¢kV(7īĀšµU’öķ.$Ģäcz֑‘“+¾„t]"wq óÓ§Ö³5 $»XÓcƎXw?J±ÖqEc%ŒÖģźOŹAązę“­lį+•Č#īńŅ”£—ČŌ|۵٠Žõé:µäš\‘ińł›X6üdéŠĪLŚ*ĒUa©ż¬Ū‹ŲŅŻ³ŒØ©|E§ėś}Šm:įf… $ēxe’iEšĆsĶōļ Myc2ß.ĖŠÅ˜Hzjįn|?ŖiדڋMšrĀPzżj¢l‘ŸqįżM-¢–XVēp;ŗ®śÕrņĘ(,Ą²;÷½*ā0m=jŚ?ˆ#‚ŅP{o1‰ņµ+B’)>æ.+õ÷ćōańF†mõdŻ%“Œ¤mŽG^•…ZüĶ\ä2Ē…ž#|Dų™ØŪźz±£9 ¶LÆūµ÷ĆĖ–Ņ®”¶ÕNnüĖ!?+ż*”#ŠĆĘĢöϊšIāOéZ}ø0ÉoPz•ā66V'ɵÖ좙 uĻÕķaO¢ĆT±į·_’ų{ńūĮZßöŽ¬Yų‡Ā÷ĀŻPĮ=¹Ļu·µōĀ|³Ōõ_iŚdSŸŽ,‹ƒ¼tČĻ°ÆĘQ×CĀÅV¹ōgˆļ¼«iWڟƒ¼Uįļéīp!Šą Ō<÷Ɠž4ü%еļx»MÖ|3S6M©iW ź~`§åż1ķ^SM3ɔ™ų³š–ūžŸÄ˜ æšx4«Ų„±Ėœęlį—>¼×ź×…| ”ųņėGŽÆ µ¼‘‘’ˆ v÷ķųŅöŒÖ›5Õµ;ķ9nł—Qķd~»C ’:ų/ㆯ!ńkųĒL)§K;<`œ9õžuēWĻJ‹=;į“ųÅ^ ×īdmBo ģå¤ĒCķĒóÆŸPŗ²Ō[ĆŽ"ŗ†;ŲF@\9;6 xŗ]O{īŽ“OÕ4ń‘Ęė½9Ūė_O|"ńŗų~Ö+'›ÉÓ\ƒåö\÷®siź]Jg× yęĀ®§Ļ¶u܎9WÕć>/‚]2ž×T1²[ŹåXć…=«ŁĆU2Ó4˜ ɹnp€†;}q}éÓnad@P6åoCé_=R–§Ńa*V„«Ūźń¼·4b’tp3W®~ė)š‰$Ӎ˜ŒŪ:)y@%±Ųu5ōYM&ä‘õ8:É#Īg &?ˆ¾ń½—Ÿqw§›ČõrFOn+źo†uƅ¾·Š|3£é7Pż©nāžeżāznōÆŪ²ŲÆe÷GŽeøOhµŲūĘß“7Œhļ Yi~0ošŅ&Ń“ē8äš9öƗµ? \hÖķq,IŽśW„(§©÷¼=‡Ž›§KfīsOӈ¦XõĶ}ąEŒ¶ńĻhVßi‡­b Ķø‡ėŅt‘×x§^…£¤Īø$vƀž1üaÖ­.'šī™ ±vg?AłVr—sę²ģædx’xŽóTxä»l²®2G+^© čPkęĪĪ+ė{K™TāY~TŻčMsM]Ÿ¢åø~X¤@֒XO=Œą}¢(܃‚­q¾3MD%åž‹³ź>^Vkq“73<~bŪ6ć¶EļŒ9kxnqÖ¼bķ¹ķšßĄæ 6”wqšļPPš¤ģeµ™eŻ–ÜÆ=·W“c®ƒØxPŠHšĄprčjœ9©ę2jĶjC{…­“—h…ķŌäŠē"ń=Š“öiK§vYņXō©TęŌ­ģŞč>šI#½t~&ļfRBFI¬ų#©ÓnĘQgÜt®ŹĆœ—N==kØs} ±ga)˜Ļš_ź_fń ÄPC ¶›¶…aČģML„c²ī‡+.SbqÓ„z-•ūŖ5¹l)ė&Į#āY„œ”;W< ÓvTu8=k9K”øļ“Eå»#Ÿ˜ō'Ņø[;µ–[€įw³šČ¶ ”XÜnŚ>SŽk"h$yĖŹĻ·Ó°®Š}ˆ–Œ”/<7«kö~*Ōļo4ė«[i#’;dķą‚@—=pqŠńOü5KoĻń Ćŗn„$€Ģ„X+”8ÜGn9ÆS“±ųæą}–)VKI…š—W³øÓtū'ņ óY›*žĀæA> xŁōš ŹZĖ3žķz«÷ägžµÕm|*N“ksōĆįʇā?‰Ś†›ąż?ĆĻØx†TVQ 'b!ć{0Wß¾’‚_ųFĆĘ~ń§ˆ¼e«jSiŚ”Z®££²’¢ŹÉó,jĆØĪ3ŪÆÖ»#MČžyńæĘČšåƒĆ®lEXŹŚü+e'ē}—[=t³ņų,ßķ3¢xcį³_…5TŸĘž –&Õąµ°ÓW²cīł‡z/”Æå]-4ūŅÄ ˆ ®;י˜5Ķ”čżøb®…žµ]ZX‰¹«­yU£“³’}T”g–"õ'Ņø¦ńōŽ ×“ķH9žņŹe›Č'‰cĻ<~ęAŸÓŅM#ļσ>2šŒ|g¦x·Ą—Ę9õ‚ÜY‘‚“r»qĪ;{^Łū|č:_ŠžhZeż³GāŲīLńFFŠ{ē’A­Ģ\ĻÉ}&ŽX’2ˆßhÜ£³b»M?ätwtō¬f“;貟ą†m8”Œ›Ö'°OĪø_@ś|Kē",­Œćµec¤ō‹i,Z8ŁXy’Ę3ÅUÖt=;Z°¹²*-¼Õ+¾> “ß5QģCč_¾*ų·ąī„¢č^%Ó¤Ö¼,Šö×2Į“™"naüDqž5ę~)Õ|'{ńÅ2ų6ŲŲųz{Ó$1•*UŽśÖ±g"‰į’¼'Æxoşš”xjOµé7Ģ…ŃW&ŽÕś%ū |aÖ<n“c$³hŚ„ąVÅ·&O ķż3]plš+P|ĶXž‡¼5ū č’¾x×Ēž/Õ§šĢFĀąéīUNŌ'̐°įsųžKü[d¶šōš­ŹßK†VœūĢ1Į•tb)ø¤ßSćų3#™c±˜(FßV”c~÷ZżĶ5ē¹ÓÅ|ÜŽ gŽ“¢ÖęvwhómŻ y©;Ÿ§­µ<+ö„ŌʅšėU°–Ž&†ēz·ĻӚā’bƉ÷wW‹|­ naÓŻnl9o)ń÷‰üké2ŚmÜžśaćSÄ`š’ĖKļi~‡éŒ`»„3(éņÖŁŅÆDĮdŁūĆ Ær*Ēń„՝fƒ„[„¼»å郌¤ń*Z5¢Į0Œ2¶åozŽ/C 3ĄŽŗ¾ŌžW»k„ä„e(öǵ{ŖŁ.ˆŠĶgŸ—Žiœ•$gjšäӣ®L‡½qz½öTAq ‘x äØaH×6ö…”·ó”Q»n0~•Ó鉄ų‚öˆÖA”Ó°”ģcÉ ¬Z°T¶ó£FŹ695§āŧYGnń˜ “ų”"ÆŚ›9}8ĘöjÉå01€Mb,;.Q~sŸj$݈:Iü?¬čėnāŻ/1°ņĢõóżĶ²Ū<¶čą”c‚;ÓĢ„ęié’HŖ7°ßéėļ]ę›d5'%]y9«3•ŗ‰’½šŹŅ“mÜ䞆³µ$¢† ~CŪ҃)>Ć­tÕhb›AĄ'ʽ7F¶hķTC"ć ö¤ÕÉe[ĻķhÆ H„·¹.yoóÅO©-¾«k%Œņ¼'ĄyĶ )ó3—¼–ēM³Kty$(»Fžw}k‡¹±[GŽXā‚]Ą–ŪL–a’aĶc Ž ²ź­×ڶŠŗ™µ‰‘bHĮöÆ1ń€ĆtQ$÷‡qLŗl®ŸĶ\[į±Ķuśg‰ –õ •%1m.85””ž£u}NĘT–Ż$HŪĘ3Ī+—š×Š%šŽ ßg’Y ©$õV>ō ēń?āö·©Ć£Ś½Üiøē§ßlųsY¶¼°†He¦#ĖqŽŒ:’*Źcr;MśĘhīöžTbŒTņ§ė•ÖķułdK©V/ģķÅT– ōģ+š[’GŒmc¶ņ“rœļļšV“–šCøņP’]eIõ5 aŻYłdc0R@|W)©hzÜ€Z“Ń6Ü©ŒdŠ Œ¬T€ßć·¹ńĮ=Ål]@ö»eF޽°=;Ó±,µmØ-Ōn% 3Ē½XÓf‰ŻŌN»Óõ¤ˆ/L2²"äp;Smdˆ t60~“½ż«m oĶ*qß=?I£ßĮsxL‘_ė@·dlĀYĒg­s{cvd…@ ŠĪ–Ę8HčĒN+^óģqŚ,²—ŠiU·ˆŻd½ņ‚d•ĻŽ®?Tų’'øūĮā—c0|ä6+®#DՏ-Ōµ­BRĮäO›¦O5¶ć&>•mf5$\†Ļ~H@“ÅB°¢īDQ¼óÅSG$Ö¦µ„[fQ·ē ćŽõnI ²ņŚy ®Lc,{÷5Ķ8›Š¦ī~ŽžĶ?šM/ŚöGńoŠü)ųG4&čj·É²ęį³…DCČ 2s_ŅWģĶū-|ż“-;Ćž麟‹äP×/aód¹`0HrsŒēŒĒCÖ¼ŒD»¬#ecéxĀ? >ZųQ<;įė/ƒÖŗę¹0ū=Ö”Ęc#ir@ėĪ¾_Šæ³Æģ‡ć_xÆāw‹ģ4ļź±’hA¢ĘAóįžė `óŪŚ»hŠ“b•TČĻŚĆž ©ń#ćÅĘ­į/†6’ų#įÜS…"; éź}2; üýń0™'H$Ÿķɑ¤rĢģz’M} ¢’GJØć'–Fc!$·#éU%VÄ;ZFč[޵GŸRD’G+ƒ %0~ļ­=Q•”łeqź3M˜2hą‘7+vF9ł,¤•ˆŽ Šsž õ¤e"ÄV·Gb€£·^OµNöd˜QÄ¢CČŚ§·­ Š;K 4ŽĖķ"_ bŲĒõ_ģåūžŅ_“߉“;…¾Ō4’ĖqwŗŽ© Go?ÄČ‹NkšµC¶Œ{ŸŅæģŻ’ŚżŽ’cؓĒ(ŽO`ŒLÆ)óŚŚAü1ŒØ3ĘNOҾ¹ńēŠõωø»Ōµųü „C€Ś4-仦xéķלכRW=(źy†oüq/†ą-6=#G•>Żtv…¹<Ÿ^HĻćZžŌ"ųq :ʧ~%ń•¹-¢z/=c§ćYXŲćŸĘZĻ5ķWÄzåŻŽ”źÄ}¢ņžÖ=x*įķµ'Kń…ä^ ¤j 3Ē …C§=qĮļłÓNÄMō9Ÿź0#Cy·3ģĖČŖ„ŠžxćÆjʱšv½ćGÓõi›BѶy\s"Āž8č:sMĶœŅ‘ŅłŅ“Ų4żOŽK˜¤%.œģĘ6ś{חxŪÄsłigØ]Ē‚5v彀¬¹īÉźeųoĄ)ųƒē-ę§ƒ4ˆßs)ĀŽćėųֆ·ā?ƒæ g…¼+”Łk~/Lrj2±tūœ}•h‘µõ>Rń‡ÄķcÅW!¤’kģī1‡Ä`öņÆ>LÖļ­ģó““9 }©J= \š€gæžŚ “–8>wČ"æC~ü2ŃllZÖ=>ŚžL`Ė"–#>•Œc} *LśKšv“¢]Į p˜ć8pĪZŗķgE±ūÜż‘^`3€€`~ŃrĻ=³Õ¶ż_åS׎©źVPżšÜGÉ'#Ø­93s§½Ś5¤«ŌązV—ĆŻ;ģés¬ĘŽŒĒc0Ÿ*#¾µ¹Ń'¶ŠĘŚ9ģUšĒ?q}…SÕ5”·å@šg”±{›(£¶Ō"՚Hā ½N2zš”{Ø[éöӭ˃ļćœ˜ĪJŽīŽK”™Š– ķ]N›~ŗe쮉ģO\ŗēī=„tšÕ§2Ż9°‚!¼óŽk7^ųy«jjßZ^CĀį7żā{Ž®×Ōč6—ŗsĀ.ΟyvēšōIKn.<„Ē$ć©•09kɕ.ž;yŁ:Vž‰uä“Ė8Er¹…d#CUÖ­ZĀy³lć%AČÆ6ø†ŚÕd–ŅėžČŖÕ ­„jšŪEru{ecņsĘ=ėŹõŻJź®ŽĶ”c±č+bćn§ĻVŃŪė#ŗ_čó[(r"œÉĆÕHé^µ„ųŠÖÖį4›C,¶Į@™É$\ę†_1čv:”ņˆ-UcRr7“‚=wś}ü66Im­·`’4ńäœ`óް2lźc¾€Ć¼Ķ;3aK é¬t÷(ŗ‘BńœÖr–¢gC«EŸk.ųY#‘r†¼ŗń#žuĀHy#MG3%G[Y,3F–Łxäa×ߎ„Ō-`²/o$`ÉżętĶc+$|Vš'öŠÉ{cż”nł¶¹ŲF{ÆLU_ [čN[mRņ{]N ,žŽÕn'J©Üu‰F{4 ¼DÄ*o<~ō?ƒµ;ÅŅne’ i ›÷y‘Čõʦ»‡” %gļn#½OŖDXžd“†*ŲĄ¦”c›•6‰ąĖ;2`×”ŽĘ‰ØėŠä šżµšKB’*"Ż53‰ŒŚ±üķxŸPÕ|Cāk+;—GQarä–^zJč|y›iØų_LšśÉtm[§Ļ/!W†q_M©ĶŌśĮžŸÄĘÄŻXęh¶¶@éۚś[Ā -müE® mģŅqóŹĒg@O&µJŚ‘óÅ?…,Śō³_^}„D­å¹•rxĘ?p׿ ,µøÖ}E-^ŽA*HdÆl÷§s7-  kŗēƒuĮw§_KjšM‡V•Ą=«?ćgĘŻsā³e} lŽŻv¶ņAgĘŃų“@£¹Į|ŌõŻcĒŅjt}ÆÅŸč÷O„“ z7> jpź/¢k1¬›Łö’čB“ļڃ¢*ģ]3U°žĢķ•ąņGŹŪŽĀ=?ĻJčžųvĆāę•®¤—†Žā)m#•NKn)[©R‰ģ·ƒnt_ Xµ­ņ¼0·ļ–BsåōŹūę¾~×5åŅ56{6yņć¹4āõŠĖCÓ|ń+X×5Ė i6yī±FÄm ž6zżøųJžš­ż’‰M˜‰¬·™ł摼E hD¢~RxśņĪßXŌ Ņ„*įÉÜ:÷®Védū ļ‘äP2'?JQVb}Wš>ė[Ņ/Zˆ°Ūjž`<æ0ļĀc$żF{ž‘ćƒßä“Ćž¹+k 2BcLłc8!‡\f™gČ_æg»ļ ų¶oųwW:‡‡bp×lGoóڼ[[šī„~Å|ö›+µpr ŹNä^ŅÆķ¬ŅļlwŠBøąžųļ^õą»(mn¬ˆ ·]Ŗ~\w ‚ĻčWĀŗĶÄŚnlˆ!bG˜Aēś łGÅZv¼ 2xPaŲŠj hü>–ńšÕŚ9ĪąĮ}…}yįĻßčÖŗ”B8‘' %V@ƒœgµ83ĘõOŲčßē½·¶»šžōŹ,e”c¦A_aéz ¼ŗ>«ų Kekt FX`*ćļĊ’>Tń6•āSYæKmxO¦E6aŠ96£ćŌõŖś‡€ļµB“źsCē@É8ŒŸ¼8½iĉ"޹ayØI¤X٤1=Ē5”Ŗ#åPJ«Č_Zō©Jö±ÅV%YełA°±įTtŖ…ä2čļüU¹Č6A,rČ|ü¾ų©žÅ¾ō[”ŪNW?¼’kžŗžĢ—MŌL^ńj}»MŽBŖ4ūį‚ń.8ē§žN+é{kū…¶T•Aū?īē䎙®Z‘6µŃ—46bįōõP!™|ŪsÓ ķ_Ÿš]ŲāĒćĮkŚ'CŅlŠ|9 Ó|A˜öĖöf8Šą0ē1¹6¹ēå®6¬g$·uö•{Øčzō×\²>TğæĘC zŒ~uČ-äš^Ęķ «rQļEH‰£é_…*[Œ7.”)Ā1ĮƧ¼+­ź³ĮucmgE+r ź+Ļ­NĪę“Ń?Ä] [x?Tם\ĖjŖdp‡9,?ł×ĆśG-,’€«„M£±ĒųĀūÄŻŃøµ–"ŹøT ĮĒBqōżiÖZµż„”Ÿk†6˜'VČŚkQž„į-[Q³µY ŗ•PD‹“‚=+U•ąŗy%ż9¤ćÜRv8Ū™ĶąÕ%^™õ¬¹#ƒ±iØ‚ŌĄM¶’åY®•£ˆŸc'›q +Ø:DĮ£ź9­ŻÓī!u˜G§ ‘Ąā­XLĪź6¾9=8Åg{—©Ō5½­Ō)¬FIĒZ×ŃÆį°fF‰¼žž‚’µˆ¼Kā ŗeŚčj%½:īąé[0ų«ÄSYh÷L¾\ –:{f«Ś1±mćŌõē†ł”Jņ`zęŗOųwT°¼¶¼¶‘Nū0’EŪĻ8ĮĻēPŃŖ±ĆK¬ŲĻ“D…eĘź3V¬ōøfxb’6`qøT§aó#©O†:mĆ„ō„`•FB0ĒØÆŠRxä@bĻˁĒåOŚ Źś#—Ņ.ķWWžŅņB¦ąJķĘkŁīü`ĘŃĘkXāołfOĀŖ×ÜØĒMLY,|Ciވ̫Ī?½\>§„_.8åu\ü Žõ”‘G5éit J(ź3Ķkj7—Ś°X@x<ķ©6ŽĘ~‘„I}¦Ķ6¬N—0%yäz’ZētĖyōC«[Ü“Gņ¬ŸŽ\’õ…3¢,öOėĶqy2ß!šū­zd’iŗ B×3ĮęI‡XĆź+ˆ£Ģ®Æ`Yī'ƒ{`+ĪļßuŪĻ7Ó°®)ǹ½-Ļ@š÷Ä_ųoSšŽ‘ćy×FŅ/„X>҈6©}z’:ś[ZšxŅ|Ek§éڜ:¬w±$ö÷Ÿ–HŪ£ ü÷6„8ÖvŲž³ąŽ,–#S⊷ݧčs?tĖ’xßÅ>“RmJ(Ž8‘S“œtük’ż”æeÅkc«|-Óµ}VńOśe…Śį‰ĒŹē=śg`·Ōż+ ž«Ē±óMˆž:|Õm.Ÿ6…wl~Ļ„ßC¼m=yŽ;×ē’Ę=KĻx‡ā^—V2ß^›ėˆ‘>AøŲÆ~;č~—f’ē‹Šśgį“&ųs¢j֖уqę.riĮćń­Iü1dß»¹_1WØ'†®čŃGŌSÄŻY1ņiįR8- m `*)b1ķK¶Siڌƒķ2”ķ|K-O?’‚‡üń‹žų7Q²Öoˆee­ć’Øń„‡9ǹś×įĒĆæˆŗ–s?…|Ko5ƒYĢ-ž .œ暔tŻĪPżSż|eŒ7öŗmŚĖm¬‰Ų0?Æ5÷rź#\Ņļ..+–ˆI ѾdĻź:ҊhōhH÷ ųĻQÖ4½6×Scw{!P~łėBķ^ö{WX@ĆrOjöš5;ž¬*¤aš'ĮßxūVŠģģģš×@½2+jRÆī"e]Ų÷$Šü’‚Ąjü/i£ų{ĮˇōöZ¤Öv݌Kžy<ąŒćµ}.‘S©«ū|Gńf‹š«Įėįū¹ü]ążBɤŌw˜öo''Ŗ’õĒ„yĻķ♼uńņĒĒZ%„Ž•Ø¶‘ö$v"i÷ ä{“ų Ś«÷9„RśŸfy¾ųæcšļ\žĶ²Ń~ Ł@`Õ£Ž0«6ęć#9?§jۼоjš¶Œ<alĀeŠ{‹p²qĶ|n5źpÖG1ńį'ƒ¾xŠę=ÖĘ}²[K̬ёrķ^c{įĮsub°ßė:Ŗļß@÷ ĀEīrkœÕĪt>=ż žhĶ>¤ž ²“H³•ö‹+sgr98#±>³ė_BžĒß<3ńįµŽ—®-­·ō)ŁĖ9Ėm$·Æ>¾õĻĶshEģ}+Øx’R¼°ž{i4¤›ķ~IĄc>µņOķC¦YŻźA§[G„[KS/’rŖŪTœ}NxśÖR…ĻB”OŽtMVūĮZ„ĶøūL¢\ĖžŽ‡ƒšõ?ŁųwʖV±k5®¶Šz·Ź}«ĶÄŅV=ü"g‘5Ž”có]aQrNa^£įżfY“›AŚOPTķķčkę+hō;ē £é†Ž‚!š’‰HŸLø”"ĖB¼æēükėZ×Gń߇eÓ“›Čeó#>LßwkcƒĻC]4*lŃćāiOšó]¹®ō}Z3£g1†PĖ‚qч±ė[?‹ VĒi¤Ģ«ā» Ūm„đY&čBƒŸĢ×KįPżŠ’B¼2ęŚįČ$tBx–?*żO V\©øp¾K ¦tšˆåŃęŠ Ź–Lą¾{׊?/¼6Žšźč—–ś„SFdtR7Ć/œ õ©Ė¹ōu“…¬x‡|¾é5-Wy‡~ōóÆLń±q¦,ŌD–J>l•¤¬‘äŌ“”µ>pų…ńōūƒ й,1ź3_)k–¾"ńޤ·VńŻ\³äØ8®*¢=,˜×n5_˜?į(Ń5m*-'hĘĒżą1ł×mąßXź)ž…yŪAčrq6}†É”¢ļ3©ĖøÉÆ2ńÆŒćšżż•š¤Ķ l†8ąńŸĀŗ©³®­K#õ ölÓīuæƒN¬ŗŻóGo–Āf"?U žƒ·jõĖ-(ėŁźŠ^N÷v®Čas˜ä’y ļ+£ē«B-¶3ųćū>h?“ƂõxĆN·‡Äk²hzØā[ ŒevŸN:wé_€¾>.šV¹ā߆¾8‚8|YįėÖ°½Œ0Ģ„}×Ģ?gR®„“GÖ?'Öcµā6„ķ:=üFņÜI–ņņyĒLńŸŹ¾õż“|'ąĻŒæ|ńĆĮÖv¶^2Ó]sua^H0wÅ!W ž‡ė\2‚Ų÷h×wHüöеiģµœŪŻ \c"©ųöŅĀ]ūT†8­õF2Ź€ üXéė\ŅG±JLŲšgüQš›DšOÅ? ܟčŠĪR“) ˜g±#üńOż¢>!x'ć·įŠž Ón“Ÿ=©·Ōķ]Ž:”$u`sĻ„bķaÉQ„„C+ŻLRaÓ?Ź®B²E6åėÓ„a&ckŃ^čĄ/Źyāŗ$æ·Ön¢·Œęå°”TsRmŲŽŸĄæ¼ōH𮫩ǓČBÆĢWŌµÅÜxĶ|##Åć]+\šĢ;Œi-å«Ē7 r1]1‹:#]3­Ņuė ]c–ĀęćnU‘ *ߊ!“Ōō¤·æ“†qewØ'žÕI“L „”«ąŸė~ŠolõŖŒ\9^GPO:;HćMĖ•3ϵ6KDWn/Æ­oMN]K6ö‘¶A\­uŠj2Ē¢źŚ)xæ²ļmžÖhŻ 0Ą8=ĮĮĶwR•™ņœAŽ"³č|_įļė’ õ­CGŌn!”Įq2>į"śN1_Sų[gŃī,ŚĶF;ø¤Ž4#?Ķ‚2xīkÓ„%Ōü’“ŲŽ,ž¶žžŲ±ģ’šŸĆך–„ƒüFö0µż˜²y/f—wĪFsĻŽ«Ąž7’ĮfžƆµ}?ö}šž©®xā1ĆŖźh±[ٹćw—’\Ž gčĪŖQџēÄ|Ļø§Šqœw¹‡u%y½Ü“TWųl•ōõ?œˆs_;‰•Łž›eYU&Lńõ|­*~Öė¤]ü'‹Liōū]mÆÖ4o3l›8<ŽõńŸĄ-nüTŅ‘„—zuņ k¬œ`pGė_G—JŹŻĻóĻémUĻ=£N’ %ųŹšŚŪlŁFĮSj0 žźzUā “Ę$}˜ŲrkŪ‡cłQŠė¼-v÷Pyr1C÷ŖŽ0‹v1ģPy­,rĻbĒ€¼A&:4љņpŁ5ģŗŽ±o©ĘؒF ņ¹lNĒ,āyn·ÆXé—SZż¤=Ś Åsڰģüomy{ ܲ‹lē°§ģŁŸ!ķ‡>Š·”gFŽ „s4zrīŒĆm>Ffą9üD¶W ;2“„²»Ēڼßā7ˆ&ńżš8#²$” §Ó‰¢1 ć4Eŗ†ękHn™ķ›$ ńšōļ ųkRūeĶĶÕŪ\ŪJ ,xū•|ŗXFŠü>Ś~¤Ļko!Ž^Æ·zó{ė Ø§ņ¼¹'®(Œl`ŁoM±¹K€eS±N zŖFrŲG÷WēUķÉ5FÜŪ²žÖžĶ̱p¶ y¦”ā*å­%! üʂI`¼ƕ:¼g ÖŗĶ;Txp¼ĒØ kW˜Ż¼w0)I‡M¼`W=cöćw#ݶ6œ‚2(¹ƒ¬ÜŪ`ųä×#Šyäƒū£?ZH"yYŸv1ŅŖź×Ė 5¬/8.…ź­Ki„ī„©­÷† ńõ®+Yµ¹·Ņļaŗx¦bUŠńŒblüīń­ĶœW’Ajźß; Ę擜ž5ó׊UČó{6zr=©õ±V$K›HįauQĒŹ?ršĶōpM§’.bS• ~ī=>”Ź4?įtxŸKÓN‘§XŪI$r(i^cæoė±Ó|c©ų†Ü\JJI÷÷)$·Ö āĶ^ Ę]:ł7oÕĘF3‚+[WEÕģD·³»ä–#ųŗńHRfU®©źq-…¤ĻŁ_”äd~|WQ£ItńIa2oæµ[°Lgø ĘǩǪ鷷 +C4Ą*śĘjōĪĘE›x™Oό`f¦L oOŅõbm^ŚĀމӰdķWķō4Ń “ÕŚ,JĆte±“dg5„–‚±é––«\Mq„ŪĒ`œf49zÓõ ›-C[¶šŅ ­·ÄĢ“īŽqŸjÅ«Ż cš!°Ó^{›šŃ Ź372cұ¬ DĮLeTēwj@gkTj²3*0ŻŽ™5Ćj·7Z}Å»[‡Ƒž>“ŽŚHf&RˆÆÜć“Z70¤ég ÉĘjāĄĖø¶E`ŚÄyØ!ˆD]üåy©UŽF yß×'½A§yŖ|²p[ؤśž™tĪ’¢łõcÓéVtĘͰ2©=h¶]ēp|ĶŪzZжµŽąŸ1pqŲris-„`xILēs0ČõåWž,šE1pįIRŒxĶtŃBr±Ą5ÅĶŹ3e£Ż‘õ¬É­Y¤2ķ *Œ=q]ŠZĪkGh «7¦1W- ŸhÉŽē‚MQ¹‡jL†čF>õ)°± ¹€ŲŻĒŻ¢S°*\Ēø| ż™>;žŅ~)µšēĮ’jŚ­‘‘VćS‘|«[xÉĮc)ć®J³?üKį—ģŃ|Pų›nß¼xŠØŽŻŠMg§Aܐąäē‘žµęWÆŃōéXżN“Āw^$šæöu-3Fųv#TK…|† 8½²yY¬uų“;mąŸ„Ķ֜ĆĖ’į„ ¶Üøéé^dŻĪƒsį÷Įż;ĮqÆėĒWÖµ¹%|łZCā:{_UiŚ^•5‘“T qc”¶ŲSQg’j0ÓµMZ{ME沊Žc”ōR;ƒÖ²“Ēmö”rdŌ5[ٟx29a°­y•Ī×ÄÖVŚÆ‡Œ·z¼_‚“Īé:ƒ_>BŅZI.™c'•Nw/z•©hS»ńĒĮhڇ‡ē×,<]¬\ÄCé÷@†Fn ‚r ó_²Ń|{āŽAąŸ Ę€Ā‚e@\Ø'Ēć]T°÷3•F~~Ó_šVčt‹mwįĒģ÷¢ŚßC›nŗģģļRžż}ŗWą’¼uāψśżĒˆüw«’ojrŻÉ1óuÉķōÆZ u$qĘiˆģP0eI‰YĪO8<×Z…ŽYO±ec Īć’yö©!RĒb®@''KbI|¬įĆ䍾žōö‰—ēœž½bg6_ŽģŽX²ŒĘ=jģVĄ€“Ņ‚bÆ”¹m Ż |Gų³ā?Ā ¼5yāĶji’*ŁIņ ĖGl` ¬ŖT¶‡U*7?”ļŁĒž±ąĻYi~7ż­üS¦x¶ń@’ŻJ§ØVĮȵ}p¾}­•Æ kŽHtĒųž•ƒ:a¾ ń>•ńG§iZÜZ~— >`a·ĖÆŹqĻó¬/-®žmm'Ūv¾7ØūŸ/BχQ²}yˆÄVš2ĒĄŹĆ§^=9¬ļé·wÆ””i©dA‚@īOėBĢe¹æ >“¢Ų‹«ķš† ČÅć’=Čø=Oʏ%ä0^\˜“õl•Gaō”Ó#”>Ż©ų¾śÓIš¶’šZcē½hĪÄ’hś§½«?Āo…6­wāmJĆĒ~1xæÕ¤dŖćūæ‰ō„ģķ©NēÉ^=ų­ų¼ß$k/…ō“ ņįĄž•įÓĮ{|ĄDņĪłĪrMW5Ч{ž©ą†1kŗµ…Żå¾™¶MÄź@_Æõž—šSGÓtiL6֗ŗ'ķDn/Ž€VNwf’™Æą’‡ŗÄ· >£g“q° Täc߁_YųE­“M·—@GšńĪ=j£’¤‰u/Ču[[X,ēÉ$¬€e@÷=«¤:–§¬-ĆH\ā<ƒÖ·Œl`p:ZXU!ł¢MÅ[­z5ōš V³8¦ŚxĪśÓ**ēĻŗÖ¶śté—*Äå”żßLÖM½Ī©xB„䀓ĀēC5QHŗ÷%·¹xgķbq†–cī1Y·Œ.£h¦'# =+UŽ+ ¹oŽŽ Ā1ź0j¶Æó¼Öƒ‡nQ³üB²”X¾šÖ²!ó–¢»)d‹rŹ)Żž””l²Ś ršķyÅB×·ė ˜‘žQžkTŗęéć_µėˤ<Bģeœ›īŽłōÆU¶¾¾¼…”‚ŅH-Źmł×Ó½\£ŲĪOS*]4­ĖbEóĘ1ĀšŌ¾Ó †„š¹¶žį²† pąūŠĶĒ”<lj˜µ“xeŁ!Ę7Qų×QcrÖŹ«„ŚĶÉnā…¹Ź:żĪœŠCojĖö†Č ’{5ƍ:hŽO¶m„õÉSlµ2õ Nø³š;ˆ¢S‚PƒųVg†~hń¬fGyŪ i $AY9ŸIZxjѬ-„0F‡„zÖ¶©¢XŚŚ«#y ‚yäšŲąx-ļce¶’9ŗƒžn½ę«m $¦x>‚‹õc^Ō/Ew$ÓćxöéV¼±:aю+9CQJÄĮ"A‰¤fR2O±õ‰®dŲQćf峂)Ó įµęūR•QŅ šk‚³š®ŸŖ1d¶H¦N·}źŽ1ŠŅč˶ŽҚźE•–p2Z2>č®ÓO“kąŠĻzŁ®r¤ē?J%Į)Õgpó<2ƒÓ$})eŌH¼–‡;yā¢Ę—Du6-<*¦^6šk±šŽc#)ø|ŪTņ+ELęœģ4÷Į¾¶~É5ģŹ€Ķ°ŪŗćÖ°5‡ōŪ›pY\YK āF%]ý}¬`¦Ŗ>ütæ+³_xž IāŁŗ5>YqĒtĶzNÆćo?‹®u%”šėĢs"@øć ē5=Iv¹ę^6ń#,óIsq¾Ü¶py \ڬz¶–Öń\JRV/,ćńņ¦ŠŒQä~ »¾Ń#š#ö–”.[žxÆ:ņ..c7Sy²/-Įł¾‚™v=æį‚ōŸķ”ń¤:õžØÅˆ–2Ž śz×ÓŽ8“žÕšÕŹÉ¦Yjw„r.˜|č}3éÅ‹F|'āk=Zѳļ•tõšUŁœń‘ś×¤xmOįõäśķ¬× ¦]Ƒ8c„\r[ł~”XōŒ“‰<7„[h—³]Ų́rcćažźŸ­põ¦±­éQ_Ū+Z¼d»Ę×ō ŽEk•§ųjóCžĖPm>ā/Ž ­ĆóO*{ÕŻoć_ÄæjčW^%øøŃį˜Ę!bIĻB§4Ģž†,æuY|E5¾·pšCpæ)ِ‹źėÖ”¾ųq£xN ŻSWÕ[ĶTܒ8ł›ŃWŅ‘7QŗGÄUÕ“­:ĘĀā&¶Ź21Ė`’;×csį…ųoā½'āgĆMLŻ[\[ˆo-Y€ŲŲĖ|˜ėļA•J¶=#ʞ6,šN¤Ö’Ak5ŌA$Š@x“ūÄvę¾o°¹qr‘ŽČQ€ßżćź*Vę^Öś>*V»ń“i·×ĀÆæ…Ęó’ė­ż?ÅW2i3i—sZżŗŁ7«µ™I鎿’Zq}ΘI_Ą3Fńļě_köńͧßČRk6WhÕõŠ?f /Ąz%ŠÓѵ8LÉ!v·öcķž(”¬lŻŒü;ą Ķ3ÄŗŒ Ę,Aß +É'9ż+Ó"šī·ućŻ KyąŸĆŅGūū’Ē;ųćšĶ WŒˆ~ “Ā·KØ%”RŹrų®Ūßīž"|5ń›ŖŪŻZŽĒn`€¬€łh§QŲÓ"QźrŸ gšä~ ¶‡TŽįudžEžYUŚ^Aā‰ˆž,ŸJÓķŽ+tLFł8lUEkc'ē6¹ādÕm>ĆwÕūū3|@—Rų,4æŚÉ§ų«Mīd?4ÜīńO£č~lüh›ž_ŻjW7cķ©q#»F0X#žĪ š~…ŖZkFåøĪGŹ}åQhņ£HöfGĘķ?ź:?“Ø^Ėn –0äm#Ó:W§C¢i«š’C’āį”»ŽVˆ“—ŒZŃ=4,õŸkvś*_ĶØi¶Š-­æwpČH-·ƒ“ÅsŸ¼]{ećļ_hbey±&’>IpsRĘ}½yćnęŗ»ø2-ÜxĪrp Ēį^ ń•f¼°šõ„ޱ}¢ŽĢ噓ųÉĘ~˜©&QŠõ…žŸIµ·×®/£Õ`]ƒ ¤ā¬Ś"ĻVÖ“Ō”µŅW0łź9Æ Õ[”ĖV:žWš+ū-e“Āš®æeomuŠne vœgūS>xĮšž›ńĄzµÄW·–ĪÓXHĶ»IaĻSŸJr–¤Ø=ω~3 šĒŠ&Ҥ±š „/åmEśćҾ^×gŽķ"”v „XŪ“S ĘmÉ?žä²°ČƒØ”ga° =kčĻXŚėś;9Dž9" Œg Šćš/ٟĢ×üßöOÕ¾$|4—Vš’‡_SńƄV}GIū0łęµndˆÆń×ümxŽÕ€·Õ­­„¶²“ė·AĮķ‚¢ƒµŅ&TŽį™"ē`äóM·±YcfmŁf»N‘Š,NĆvXu8ėL2»:ƒÆSŠU©ŅßQ.ĘZ4—*rO*3 >F<Ć»8ŚkNTiŗ­"Ųģ²6!>ę“]ceV·©ČĒjgLM->G‰˶*żØ’‚~Śū!žÕ¶æ¼g©µ—‰r ó."Óu!ÄmϾżæRjŹ[tĻļĮՍ•s2]\ÄóüµŒņ¬=ˆÅr—V”]¶6ėw0õČ® Ń5>vųÕįėwįw‹|%V涌źZCt0ʜ§®ķķ_—rhwv…–µbÆįķzox?čóޱث?:ć/’šQw_¼fĒ –?­Įō,oņāĘ:w«ŃÜĶ –7Ń7vŽ.`cĮYWHn£„3¶‹±ż­’Į%j_~ן š.„¬&‹ńŹHd±‹ĪóĘž «WĢĄČčyÆč®Ė^•#Óuūy^„K[²ܘ }9ēń¬fŽČČŪøŅēŽĘh!gi-ɖŽFä‘éšĀžĢš÷4]wMń%„¦§į­^ŹM3V²øPŃLŒ„]O‚G>¦øg£9ž{?šUOŲūXż’i/ųv h<&dYōūøƒ:]é²±ņdó¹y‰‡ŖžµłyØŁĀ±° ±7@zŠ—»f.iÓé¶3Ü[Ÿ6ę¼*õ|võ÷¼jćNÓoå·xaA,¬юõĻR ­MV‡l˜ŖĆS“™NGŅæ³Ä_°k3ųZīķ¢ŠoŽYAŸūėńĻozż5šž·nö±•f?&yźkÓäg5C»ÓµxŅ1qå¶ō9äcŠŸUń*jq0DĆcåÅ+Ē5å  Zqó×±¬w‚’čp9o­8¶‡Xéæ±ęµDøņdĄ8ąU;»sŠk‹Ż}ģcاĪĶŽĖW¾Ó’³Ņ}2¶c^’ٟ×5å:ćÜ+Ś»““’)s2fŽridSęqŪÆ5§„ŹGĢOėUt1.I¾;g)¹>^:āØŲųvśāź6fŽucūĪ cœZ44Ž›žĶfÓB:¾›l÷łŒ“@HVĄG­kiŗ$ÆeéŠdw@v²ą©=$¬iŲŠ6éyYŸqŽ ąöŖMq½°";–8ōÅ2Ä1DϐeéŽ3YvšŽ·`÷ZrŪIqé’śPh§ÜęL† Y5}’†Žø8ÉÆE¾ńV£Ŗ[fø”Ć“)ēŚ³‘ižumisszū EÜvć½z7…ÆęŠu[iõ}>ćR„Œ0-…Ąõ#„EŠ=EüEo«ŗ-”oī–Ī+ŹüZnī8\ōÉl*¹KŠŌ„£Įŗ6Ü v•š¶®c ĒgRzåš:'ųšėNų§šßžæ“-–µi(¹°—a!\‡ē­q >#üeų$ešOŒ“+čėū6¤Ä“?*·\W…™ą”ÕŃöÜ#Ļ UÓ¾Œõ_ŲoāŽƒķi5ŧ\ėŠ÷6ŃČų-0ÉUõ9ģ=«ś&Šń–¦jžÕ4x„·ŗŁ™##€Iõۊųoā_Į¤K‹Óa$RéŅ£Ie2qڽ<=cõŒ‡2µ.[žū8xęÓĆ1x‹į6£k\Śj‹0 ń£ņ==ėŁµ;)EŌš±ĆœƒÅ{䙶Ģ“ Å^%ųi­č4Ż2ĖXŃlīÄWŠ8`㮠物µ®³ć’x®ĒNK BėĻ‚ßłŽTc€=…)ģvN£z-°A0ĖelüøģkŅt­)īg“·›b4„ õóøēcÄÅUµĻF> °ÓŚh‘¶į†s„u~ųzśWˆn|E®ź©e¢5”O&|쐒y}łÆĒHł,u]ŠŁüPš>—¦ų‹ĆvZ=Ö»Ŗ22E+ G“÷H>ō|*ųu¬x‹NÖļõdA„2˜Å®xµźGOßjšj»3å12»;»ßė:l2Žj-ā[1åŪ¹—ĢŚæŻĘ}ėóóöĢżü1ćļ Šæ 4H4ˆ6.$Ō-asš?ļūóDjœQÜüŪš'ŽžŠšGˆü_}s„¦ļŃŅU'ģn"pU1Ō–d?…xWåńvÆ>‡{¬•”(rćīOø®‰ŻŻƒĆ[F}½į]rĖ„ ÄĶd©ŻY—ńwöV¹£éŸü6-ÖXĄT@pąą‘žy‰u½[Óć‹R˜Hź3<ś×¦—4dxF± &`»ŗŌWā=FÖÖ8Q <»~é=ź)įīĪŗNČņēšŽ§ā¦‘r‘}ą€ą5z'~ŪjŽŸeõy„Hv¹²O{ׯe4R:>¹ecāv‡wįOK„Ģ‚ė[„ŠUl®Ņœ„fOz‹ćū†­­Æ (S”b:ÆĢkģ°ś;ўÖēĖc7Żž ÷7[Č$ ė^™ąOÜkz‚É9‘“č[,½³^Ż-«ÄM3øų¹ć¼”ZE Ū©¼ĮÜ ¾g×>9XŽX½»X<7…fÉ;d8ź*źJĒ™NƒzŸ3¦“ž!ŌēYV/œ’ƒ=9ƤæeM}wć™”Åog0u$y܍ĖĪqō®{\ō©EÄżIŃ“Ķ)n/ōĶcCҵ1å.momÖTSžŁ~ł›ūvžŹ/ĆŻ,~Ó_“˜¼=£[K·ÅZDł% æG FyĄōąÖ fz4q <ü?ŸÄ,š¬ž#Š,n/ōųŽŁ<Ÿc9 sŽ+Į~%j—w_|-(Ó ŠŠĀå°?Œ |Ąō&”S±µ\N‡ź÷ü·ā‰ōļų&kˉ˨™r¤c’>•ö&‰ńę/ųSzēĀĶCMóģglÅ2œĮ9#•ćÕ©©ōxZMŸ=Bb‰ƒ[…ņŅŗ;;˜eól®”Ž{9ŠĘźć9øå=¢ĆÓ9«}%Ķž™pćIøl4ŽĀ>*üšE®£„ŖŁ­oĘā¹RlV—C¦TŽļ@ŌtyāāņGńņ‘[°hŚŻŽ‹}­izmÖ¢–Ńy²,Kø„ė3–­6Žuu_“[‹ČÕ`;t­_ųŖ]#İ][X}ŗņę p1)Ļ ~BŗiDņ+ÕhżUżžęsõéčké fĒúމ©č?¼9§ųĒ@žEq’=Ćc5éS”}hćgäķ'ū0Ēū=čÖ>kWĻą&¾ڦ‘u–j¹Č’6³Ękč/Łį’ģķū@xōŸŽ_u…¾æŅdUå­Ā[¤×YĮ&YØ `€zó郼p1sQ›“o©Ė›gõpų:µ°ńę©·Ż„¢ž·>xųĆšoƟ³§‹u’ Żxæ@ų«į›iæā[ÆiƋūCŹČĄ”Ąź<ާ­eųgTÓõŻ.ßP±¼[–f9Ę®į¹]k Ļ?O£ĖĻķŁõ_'”ŠJ©ó r:WØi:½¶­e©i×"Ł­å²F0ńH3śt„tāióDż,ųAńkÅ’[GÓ¼MŖxŸN·A%ź0Qrƒ»dņGõÆ7ż«|%šßIÕ¬&ŃõM WŌõKŽĒ ©Ū0?6@ķĶt¦ŗŸ0ØŗU9`“>EÓē‹ID‚ĶBFæq{--ę½4šÅ±Öǟ„°Ł …@hżż*F•Iu2Ÿ]Ó¼?|¦{“žĪi6+ŽÜWGsį˼Éo{hļ‘÷q$ōąsE>µĖ¹Ļ®z֚ž‡āæ € $·śdŠĒ ŃŹąõÆzél|Y¦ji 馅•Ź?ÜŪ ;Ó­SƒF“3(KTĪ¢ŹūjmvƒüXą×Ic .žCŸ^•„¢ĻB8”ög“ų’īŚóP48ķ ’ v>ø²_ͧMjPI€ūĖżŚ‹Ę©£ `|ĶŠT¶ėę†IŽćۊŚ*šöÖŽYĀ©9枕„uik=¶y%½­ŻŠ)oę>Šķķ]1—cÉĘ]ģy_ď ßx]“_¶ŗ•ÖZX󐯞‰£A*l•6Ēt£!—†Op{Ž2Šłjłte.fŽĪūĚöÆŁõ½cSÕP"-ěÄkŒ`TzMĢĖvQČÉn@­%WK8\ ōF–£o”wÜ|Õ*“Rļ$+īqĮĮé\U'©ķS…ļ)˜Ą'ėW~kštæ“ öt‚6¹³8ĄRqŽZS‘Ć^V?F~k‰ ųŪо“ÉšŚEVž{!ĄÜ£øėłWĶĀM7įļĒm?ĘŚ ˜°Ó5ČĪ‘G¶6”ō“ŽpkY#ĻsW±ÄiI‚‚>@q+§ŌmžĒhņ."r¼:šä©3ŗœ®‚Įę¹vŚ$bŁ9£>š«·hq“Y³CŸyRÜÉPķČĮķYÖéż³m­ē×>\Ü<–„ī0qåK»\ł×Ķ:gŚ’ ŚĢŗŽŒ½ 3Œæ»LøV|üÄuŖ6÷—·+ö3\@ŲåF>aéAŒ–„»=bä<±Ģ“[m8õ‘iŃ„Ŗö`gŒś{Vœ—²%Ä|‹€x”£3²ūSʑ®VfŚ“`H.cdb˜½Ö1Z’yźŚ]Gs)Óo ·øh–&ŹēœÖL‡”łń&ś{_jŗtńØd˜ąƒĻ¤W˜jÖŃÜø”Éęī>ØsHWW0näDµ‘CŖ@ū¹hažöoš7ąnā‚ŻĄ2źś”/$pŪ0ē)É÷Ķ{lšŸÆ¬ķķ®mļ u@²ąN:PS±ĻėŸ mtżVĖĚ~Ø·±^öØ>ļĄuō«pZ“SIn®E§PśŠe3NĆEš :(Ü ļ zŸžµvś’†n«‹xN$ł°ĒßłŠJ¾Ē”xŹņĶī„6s³Vg9+^estƒ~ĄJc;ż*'±N&öˆHP„yJĄ7?Ź®ėóÜM ŚĘ±¾RTńY*ÜĒše£C<©˜JӃœsžkøŌ5[[i#–h±r†r9lōœŁ2܍õKĖˆŌ†•“<.x›.Æ·t!Gźk2D¶¼›Źuŗ“̐1ŚOeģ+Ro4‘väīĻ©  ȬfL`“ō­Ø­Øó +«OjɾEV‘PćöĶP‚Œ—/æ=s@‰'>fFY8ČéU,­‘®ć1ćˆĒz™JĄvęĖ̉QwsĄ®FöŽ+y ( Œ’õ«9JąOiokk£pķŸ› 1ŠÅŗ=„ŠRVFS÷@9aųsRTcs”ŌķŅōĻüš_†|šņÕR¬l-ꣷĻFøé’ź­lfätŲ­Ö²$ž4ūyPīR6©?Zäb5]M"æøņŲ›6Ė0 t JłæÅ!Õf’(ÖŻ4`pĒŌÓZ+jŖ#ȧҺŌlpJW+=Ų.ń²•lõ?Ź fuRdM¼ćėL’ķŗ€ZLƒŒp*Ņ£ĪU‘O`:TÉō•‡,Nw_œ=źĢ6ķ2̳.ķ­Ž:ÄĶ£SLŅ$ø[ĘYF1Šė“ķgœézv“}«ė­"Ķ֪d™˜œ.A<’+:“¶‡E*7?xcŸų!§Äæ‹Śn™ń;ö‹ÕßįwĆŁY'›MgxÆf€`įÉįōėĻJżūųmšĖąĄż5üū/xFÓ/`ŒCs«5®ęv Œļn[¦I'šļ^eZžµ8%¢<_Ęw—ń,~-ń‡ÄgńŽ“¬OŁ£F1 žē—ŒžµŠųgEҾ. CQ×üX½©ótB8§ŠķoŻųRr&Äg§=jÖ±Æ>­ö¶Q;ko’4lŽ¼ō'՘³ÅßÄŚ¢^ m&ĪśöšH~ĻŻ.{–µÖh4›œ Z4ʧ‚qėÅ5&Ģż§CŲl’g‚$¶k]Ę6zĆź§K•hI€*:Źø#ąD¶Ī¶ ^[•2ņĒnqǾ*†«7¹ķšī‹«h?®4ŪŲ§Õ&·‹W ēŸĆłŪż¹«izµģķ"Gp× NŃ÷qĒśSæB\īzĘ£ń—S‹H·š8„¾»„( ŖÆå^żæį_Šž»šĘ„Æ²!3³[sŪŸĀ‚9o±ó߇¾xĻEń"Ūé–Įį·?#—Ūē©<†‡ZśwU“Ä>’źŽī8->@Ņ&ŠĄ3Śƒ”ÆŖ<ę/hö–z•¶­n×QĶū“t|a³Óę®·Ē”6ń¦WÆėü©ņ˜r3F»Ö„»…®oę–Ė.23Åt܍›‹Ks4ĮHڃ$ūSågM=4:’ŚGŽōæxWĘמŗ³šü—$-ą‰ƒDŁćp=śõś­ā’]^xc[å[Ø."o4Ęšsżj'«¹›š‰”­éŚE²ÉäīUž@=čńW5/ ][n¦}Å6Ę>ćē?J• ä6_u‰6Ś¾£$;,™Wk¢£2‘×±=jœZ“:4M¼%É8N3VU‰m5ĖWKi­#i,7cvÜdśW%Øh6śĶėKin] ,cGĘHōւq0£ž9ą›X¶žŽā"Mŗc'w’«?„}‰š×ĒŽ$Ö¼+5œŽkI›w—xŖĮ®cŪǁЇ)ęŚ:ŠlüOįŸGw¢k˜w“œ0!R=kĖ“O ¶ŸØjVµķŪ–Ū31 ‘ß2pJ›†ˆõ%šüz~‹”“_\$gr¹qč?*ō€> d×ō "Ö6ćü×Ū\—#čĖĻXų[H›ĮzžžoÅ$ŅYp@>‡¹Æž|5§éæ ¼a®ųzĘdŌt¶"h$•9³ĄoAPŖ+—z&‡Æx§IńĀźz֓u©xį”ŪÉ&Cz©Ē^Aę½»ćŸ‰| y¢č÷)=„7Š[™¢‹n×Vé·ėŒžuŖ–šųUń—žķ'V¶×ķķB2;‰łńņtś×į‹:ĻŽĻŒ4 ~āO줹o² äåĪkTÓd8ućŸzRZŌŠT•¤E•Ą<޵ņoķąI’ÖÓĘQkˆ$‘Ö÷a£8ąńļĻڰ5„¹ń]“GĖFņ[ę\ä÷®£Ą¾,ųū@ń*¹†+\“ –U=U‡„lvEpüwš­æüį¶2܄73“R±!^˜Æčž#ūc§<5«~Å~/ÕZz_VŠ%•(n‰Ač$ńٚ”Uī!Ųžƒu}:ėK/—YT”U"½÷į‰ÓW±›Gø5Ģ# ÉĖ$Yę’“oĆ’ķM ėÄ6}§Q²łĢ8’]eżHśž ?ࣿ²½Ļģżū@x‘t{ Ⱦų–Ųk:#́R9X–š#‚Ą°ć­b“z‘)t?(õ+Ya»¹"&؜: ß<%!žUüÄvā»”#†”ÜÄræ½÷ļI("ĀWGń}jĪw”ņ\»‘(^뚊 å£.ą+ e™ ‹s’3ƒķW­dh” ‘*’Aõü(5ƒčY±’Vœ†@¶5ŃjGPkęŅ.ĶŽ­m"\ZLĶŹĄ«)ź9ktä ’ü’öć¶ż³æd jŽ!žé~*ųB4šļŠ"ømļq"*>ģåƒ 6HźĻŲTć“ə sę¹jDč9i†źŹKˆ…õæ ÷—øÆĢŒ> Š|9ć}FÖņÉ­<āilÜ(’D¼äæˆéģHä×VŠgęķƒšI>)|&Õõ‹«ķKŪžĪÕ ‘yŃc÷S7č?*žNS³“»³œ¼‹$A±ņ“ĮÆ[š–°öȶqżĶ£ ü+9-l†z=¦©moØ®“ØAq3O‘FH  ö?ˆÆœž&čw>$Ō%[Ai§³²†Īā9Č'Ö·” īy–Ÿyq¤jś^¹cröš¤¢H¤^æīž5ś©š·ĒšxHŅõØg[‡š³)#÷rČĄü wĶFYj«ql,ĄuóW—ĆZvyŠ@pÖ²›9dµ5¢%y-žõ±k8‰Ä7ĪÕQ‰#¢ų†šÜM¤]ŚNņ0ܲĀu鞙®¢uŖÉ`Å#tĪAēÜQ¤%Šėõ?ż¶Õ­?{m÷HŒcšš/iöŚ>¤ÖšO½›“žŖÕ -‰’Å6 Ēų«¦±ƒ|Eå× Ē ÕDĶƱßZxjQįÉüCx#ņ°~a–ś ź|ŖųSÄŗké·ŗ\&ę‹ĮvÄę6”a“uŒ¶Öæ*²dŠäµ¦žó[µ¼Są`)ü(.ĢĻ[ᩤsLŖĮ@‚£oŻ_ÜĒ=«ąxÆģ«į7ķ=ū%iæ|⯈_tKļĖeŹå™ לēŽx>õįc07¼»c„Īźr(EūĒóiūk|lÓüOūRų£āLÖŚŒ~ 5¦šn!†<‚۷Ҷü/ycā iz¬ŒWvs!uł#_Æ"¾Śr³ś…sҊ—d|»ńėąö±įĶFO^Ń嬶TF€"÷õ=Į¬m?ĒZF»”Yė6Ÿj/ιłāoF÷Æ[ ‰Gź™v;K4O}š×VIDSY^G²h¤Įt`q[:[[Ė Ķ.6åqŽŗjWŠś8āļ©ŠÖ;¹šŗŸÖ» »»›̶3Ä7ń׊š1õQįć1;ž™šĖYOˆ_‹nā[›gI“ņfPŲ*9ź95„ ņŽßG=ūÜj;Ē“Ęsß•|†.„Łņ˜ŗ×ÜŁŅ4ŻJdł ¶ź{Vŗé5†šæ‰ōż[@ÕŚėĀwv3Śź6 vŗ».Ēn ’=kĘŖxÕō9’‡>!ŗŃ“»?P»ŸPX¦pÉ%±*IõĘ+ŗÕuĖų.¬Æķc‡ģŽ˜aŒ‡Œ;Šāę1Œu>,ż±¾xcÅ~Ņ>/x+KµµÕ“¼ZÖÖ0Œ±÷uØÆ”¾Žż³TÓ-4oiš\ ’¤68ö=ŖéĻ©ŁŸÆ? æn­kąO€µ‹?ųWķŽ,ž2±ź.0>SŌµó§Šž8|ųåā“ńÄߎiéw`š¬zfūXN:,Š9ɝ{˜I««4©„©Ć~Ī_ üń«āÄ_†_-džᵱĀkiöMēžL€‘ÉĘ Šó7ĀžŸXšĘµØŪėWZuģÖ_n„ü—hŽBČ=7. }^Z&R…[;ńž©.ŸįŁō«kH/nīW÷Q±ł„®Ńų’*÷ ĀēĀö3čŠKw«Ē§ż­­ŃAe#;—š5u禆Õ+]j\šl–Ž,šģś„‹˜§öM ‡ ÓŖŗ,°ź3ź:^© ‰`›€ĖĆ)éž}«ćqņzœ's„Öīµ(RҽCµVµ¬ļ¶rŁ\­ŌErFJ±µņõna”ē_Žļ[±³±ø>g’vĒ 1=ĄÆ–¼_šŻķ¬&ž9&łńł½aŠSzržĻ>-¾A”Eō–[‘7ĢŪOŻ<öżE}]gį7žHõū=LÉØ[Ż‹K‹˜1”,€ē§¶¹Š©©ą?üm®é–P5¬&ī$/ĮA GćĶ|W{¢Ēaw—s4s\¾Jü½q޹qŪG§†ŖK£EÆųk_ŠdŒ-€Q oSŸJņļ^KwāML‹u04»·Œ“׊š18fž§ŠŠ­”R9„Ų‡<šķSéP]iś„ś”•“x ŒœÉqÓ§Źu8¦{„>2ßčwĶdĶm{c2”žŁŪ*ō žuóæĘĶKā€5Fń†•§Ūj?®œI+³>›'c’³^…6ö1•#Śį':’„4’\›d“‘T+®ó·œcé^_¤hŗŸŒµÖ½±S=ŒG!£Ė;ƒ^¦•ŁÉUŪCŽ|„ijŗ†¬[]Ą©i¾ŽTéēó…aéĒė^„š³ĆśÅæÅm'Ǿ—ÄZlN>Ē{ .Šü  $ƒŒę¾æ.¬yu*hyĒķUą’ŚxźėÅ?ü"ž½ÖĶk–Ż`tR;ūuƞbŠ5;ū­ź%ˆ Bø0kėhĮójDxg’„”»7łž×žĻ·VÉóēh=ń_d|6±†ĖĀö2yHóØs“ÉÆj”t>ŽUł¢|£ūFk–RųĪm2Ęa0!Tķļłę¾IńM“k¤_ͬ·f2ʽ>oLÖ5äzxKZĢł×ĆŽ*Õ-&Xu8ZŽō’w€×½{OĮÆ×æ¾*x'āß3iv—ā-Bó!…$gÓŪµcNz—4ö?” [Ę^ÕÆ“ĶkFŌ¬ĒUo"1żÕ 3Æ·lכüFń>…wšūĒ~Õ“Ł5=ZÓ„²pF@r¤)ē·5čB¢4£±ųõū:kw?µmkĀ—–ךĄ/ˁóƖĒÓæ¹ŚĄW^)Õ¼Mć/‹Y®,§7k>Ór™9ņ×õĒæåĶ9£Šś«zaš3ā&±įÆŁų×@vÓ5ø%DwUŌÆŽVēŅæYtæŚĖān©o©ė‘ŪhŃ(c·īÉ ‘_ėNģ`ņöä}qąĻX]xžK™#D;²ää3ø÷āæ3æh ›oˆ#Ō|ErŃĻp”£‡ ¹č?!łR©]µcŃĆ`¬|Ļš›į“æµ½gĆśLöÜĆøBķ ć/ėXĪ‘­ų#ÅĒ„|U§I¤ėÆ·ÉsžµGSÜQ^]wŲś =.UfkčöæŚ[ŲŪ yåpˆ¹ĘI5vXBēLŌ,ē°æˆh¤ v?q¶śž7mŠz¬så3y{WŒ ±„^*›xĻēHģŽŗDŗzų‚Ś]1§Ka:˜·?E'¹ż+šG‰|yš®y4[½Śę+hŚĻķCęK˜’¼F}õŖ‰–!Xšoj3hĖ|ń(1Ė+HšŒœćł×QšOP²Õ>%čz„­ŪC:VEłU‰’ė~•ŪBωĶkrI£īļ[x‡ĄŚž‰ćÆ L’gM½Ā—rÆL×Ü’ ¼{Œō :{ųŌØĮ €A㱯Z”Ow%ĢTųĖą½7Å’ <ą)dk½3Q±–#qĮIR÷QĶ~<ü/ŗm+ąOƒģm,`øń†u««Kūi@/,;Ź‚sĮ®¦ZwŠū[ą÷Äoųŗūžßiśmķ“p™ „Ū±qŹ×é_(k7zćoŚxoKm?@ūKż8 !$€>•ĆYž®QNtę×C:oY ę‚k»8ųČS łWC§ź |T#Éā¼Ł;[¦Ž•/Æm`¹†Źę{IJ–‰Ź°üEyUĶŪ5ä×–7}I .~¤óŚ…PĀ„؟ķфYžn€U/JńŠīŚĖš§ā[ 7:Ś!}«źH®Šwg•Œ©N”J’QŒumč’ó?VæąŸŸšN«ļ‹ŗž‹ń£ā”š Ē„t»×ŠćEohY0Gš„wĻCė_Ŗ“’ģMš?įv””ükšg‚¼¤xGW€iśÅōÖ»"Ӧ鎀mPO½GøĻ»†Ā®Sų/ÄÆg<åa0³jÜU›×³}łæיł½ńOößų©š¦ėSųS©čæ ž/ųrÕ(ļ%±%f…ŗ+H‡kq܎kģ?ų'ļģū~Ł~ų„ń—Å |®iźŃŪ­„…ÜöŅh²¤#ĢCl¢"\–į‡QÅwżI3ä8§Œ3,‹&©Ė¤ąåĖŽŚµ®ēŠ^)’‚žÅś†5愼YńĒįüąČŃIg®£¤dō>UxąOs޾*ń/ü{ć… hž~ŌžńL²JR }{N0å?„‹zā¢yZ}^śdfPŸ³ĶčŖ‘ļu’‘ńŸˆ’ąŽæšPæ ėfŽ}7į'‹¦•ŻmR×U15įŸ/x¹ē„y—‰?aOŪļįĢ&ožÉ^=½±‰Ā¼ŗ±źDƒŠ„‹q?yõ2·Šž”Ⱦ”<1Š”a*Ī’ž6üU’ČškMų‰į­BóOń?ĮŸŒ^»¶•o¼?2“`uÜ$cŸŹ¹Ķ'ā…^ą$ś”–nĒ][K”. Īø§‚”Oܲ®,ĮccĶ„«‹ū²Oņ=NĘśŠĀ&A-³ ĮՃÄW|Lń ŗķ¼(§|YņŽFbĒqļQģŚ=˜ø½‹mĘ«ā;{Sā ¹µ ķć"&”ņ«č?:Ły…Ę:V}9V»!— €Žõ”ņE7™““‘Ōu©–ęŌęv/: üfŸAń¶•'ŽÆ¦Ö-'É{§–6aqÓņÆnż ~ YüQūŒ‘yś]§ĖjYyۜó]Mčr<½Ļž¬bņ²!M“xæS…lmRwXW’Ć=ĒJĀnēM:M+—‡īąrX•$ÕķM¢“vÜ£ż:×9Mõ”q4—žvnę³ā™7¤>wr9ä֑Šf2њ?g–̉ŲL¶Ģr éł×C¤k0“¦łŽ'€hpģ5QlĖß§ń7ĆĘšžæåYjeÓ«‚’eGP}1X¾-׹ńfØuO‰n“ł@}±‚Éc,»‡ŌX~Ń|«é÷—:®‘Ø‹“®&žćuöė]Üŗvµ„LÜĒg» °ņ¢·L̰5»xK”$!x9Z5©æ`,g¶kz/[Ļ€æl[×·ńž•įäņ l3¼C+œsėĶ|Éi<€Ęm˜£īĄČÆ£Ąü7?ͤ¶#ŸŠ«Głc’’§śŸ¬Ÿ².©~ß ­lnG ’:|Üļ xžŸ}gaØ]x{NŌmā[f‚äsÉēJõ‘ü߉F„üÉu$ĪĢü€v5ß®«§ŻZāးć’zVёä=ĪgÅĻåé¶P§–šfŽ3»§CłWžŚ^}©ŚĄ·Ģ:c”G1«o¢ŚD¬ņ&[vģśWM§Ś:ÄŅ[§Mm”}cS’ī;Ć#ģĻŽ•Ōčz„¶hģ· ³š£#ĢüIu¬Ü_Ģgø~o•čE&‘u#ŹRUVHÉč2™±sŲ  V­Mg}{o(‹+åzõ&”Œ¤“;«[…š(¤iAŪŌVeÜ;Ƈ“Ź'œqIHÉłī· Ż9šXäYaÉłs’7Ćö7ØóSĒ<ž5F3z|öv2!w1£±É>ōž°Äæö¹Oµ,›ŽĒæJ: ŲXƒm4H$9ēvr}«ø“·µFŒdSņ†ėA”ĖzmÕ¶”h!FĒyn­TÆuG±wĖ/~  ó½_W¾¼ŽeHdO˜œØÉ[JÓ/oš\HźĆz֐CLŌ“Ā£¤s¬ƒæ<ڱšü}»Ź‡}ŻIåjŪ%ÓZŌ5+‹xb_³"—C»’ēłWćżjēMŃõ9’U.¤’bL¶?(|O®KY˜ß›O“<ŒŃŽī¹ąóķ\¹§Ü[½¬Ń„HŁ·1õ”Œš0.ōµiL›·†#,:~–v*…š ¼ĒĻŠ\~Ļ_Ō“iÄö§ģŪĻ‘œjéķõI|Rļ U¾P;TĻcC ’Ęśeœ³/ö®[ķōQļū8µŁś1¬Ō˜XéęÕgŽ-Ņtym3GµyoˆluĢśŹ½Õ…̇c(å”ÅZŸq?"8ķŽęܰĻŅ”¶Ń³1‹{š™Jä¹±EŖ(z–Ś?2揘ł‘“‘ģk)lG7CFK8-eW²d‚bAm¼nśÕFŠĻ/—9äļYŅŁ” ŹĮ°2psšå/ļ,nnks,kņøäB)%ō2«• {R5Ōr)łwmę€ =BŽ"š9Ģ3ŠÓäŸĢ!L”;žil2Ć$€mēŖ6Š_Ÿ“åĪqÉź(LGCæśŠīóŒcŒ}k3M‚k{ņ̜ƒž•”„p;ƒ7• \Į@ČǾ+Œ¾Ō“S¤ŽE©ŁI%ć7ČVLl>µ#HóųēÖµšöz1Ė l ćś} z×ĆæƒZ“·‹Ŗj¬‹frŠW%zܧ\#ŌśöŪĆóx>Ö5ÓęK»s†@®K^ÖuļŁüˆVܯ̓Énćå˩ԠŒ»’ Zx‡Fž Čå—qBŸ»_$ųÆąæ“«Éæ²tw¾²e@I““É$õÆC ¶Œ‰Q<©µ M>ö=:że[ę%MŅŚ9Ķ~‹~ŹæšL_Žß“ę£eā¶”šƒąéAr÷÷°˜ī/#ĻŻ‰‘“šõ^)Ŗ6?¦æŁö^ż˜fūI¼)š+Āśuē‰JŌ5ŪĄf¹’^ū™²GӁķÅ}}āx$.½ā}bsS2€¶ÄīTcÓęžĖ)Ü£‰—MųĖńoR²›K»’„cĮ°)|Õ(å{cwćZ÷ė?i¾µ±Ž+Ō5 »%žpszŠPˆGÓ5½;Į¾Ō$×~Ļy1#vĮLƒÄCāÆķ‹ u)ķŸKÓnŁ.‘}zńZŲ‰VŚl)u&ŸouåÖį²ĮĻ®MdX °Ņį‹W»·ÕÆā˜Ėģ€H­“Óš8¦MŒæxßĚ¾§}♬ģō«fŽą: ø‹6ń†5ÅųļāRŻŚ.™į}1$bp·2Χ܌ WDbit|ńūö”ų!ū?č$ų‰āėYüx’ĪŹĪQ/ ó€~Łüėł×ż§ą¤ß¾7jxoĀw³ų+įżŌ‡ĶHNÉ.Tgļ(čßFŒå3ónęśG’wšIfiTvl’sŌūÕ „>Z°!³Ó&»"ś5%rŒR ķ|ōØ]1+$jĘLć‘Į­6@–Ū¤—ĪĢI.õĀü rO9©‘D{ZUÉ^sĒõ­h {…9 ȕ愾œĮ%cLõėšģ-4 Žīīå#‰²>aƒ3Q'c¦3ļļŲūž ‡ūSžŁßٚŸ†<#’ ³įƝēÄZØe7ē†,n,@8=­Qß²ģAū)žĀ[“ßi°|Kų½:uŖßF²ø‘W®ņќš¶kĪÆ;čz4éžūńWĘwŚĘ‡,ßüSe é°¶b°…ŒK³Óå>œąžœ×ĻpüHÖKcÉĪx –rŚĪŸ¬n.¼ĖÉ•Ć¢ĒŠ7øļUļ¼5%¤Ś×‰£]7F˜ä1loQźµqRO*ų«ūHų_Ćz\~šF“¤Cµ =ߖžļzs_ė_uO]IēM4·#9`NÕĻ„jR‹ kzĮ¶ó"’ę`§qPp­z÷„žŪyŗ}Ķķ»N‘ŗ’„pH9®J–eĘĻŠ BŠo¼ć%‰öąWÕ:½®„aćiÕO‰¬uŲĢ‚“'•'§åUmQ Ųśö‡·¹šo‡SĀŗ–4Ą·y¬²2 •SėŅæ5ŻSPŌļļg’Śź*WY¤0U9Ę=«('ĢŁtÕō=[ą—ĆŪ’ˆšģZM܍sgĖpŲ@= ś2׹˜ųwā;Ę·ŗ‘“é£F„s¹ˆĻÆåZŲéHō ķwĆŽµ·“Q’(µ9d…+ócż+Bćƍń*ęŹīa¶µyć¦ßR}Ŗ” jI[CÅ~9žĻĄĖd xbž)g—PU„Ļ6ČŲ÷_óšęQŌØŹĒušóāw‡~čžń6æj®‡póÜ3Iœc N*ü ^ų’āė“Ä’éŸd28° 'ŚĆæN•ŃN=GĪxÄæ‡Ś†ü]qį¹µ…m;qXīķ›žz¾ßν3öZų0öŚē‰ ńrjW6Rķ1LdłŸ<·ZŽ,j¢ ųĻ&—š’Ēŗ€ä•ä“iJĮ{+ŠĆ‘’OҾūų—®hĒ^óm§»³1(eūÆŪČVq•āåŲØŹęĒĘļ‚Ž ų¹lŗžæc<÷ń!DņF3Ąäóģ+ńköŸų1§|9¾Ó哞į!v n<² ńČ?NkĢVŖi³6‹LųŠS*Ļ;H²pzŠ{RGpąå¶’Jöi™Čö’ƒ^2 kV7‰r,¬ŅRģXš īs_Ø:Uņ][ŚMa:JŽŠŽ`čr3ĒēZœēn»ą•J–(@Ō÷Ŗ:ö§ėZ%åā$‘Éü 9lē‘ōžµĢō4§¹ł­ńĀŃųCX»ŅÅ»Ć*1XŃų8ĻS^!«E4’FTDØ~Ix$°=… IÜūÆödń¢źŗE÷ĀZŻgŽā?*ŌłœģćØ>„t«ž ų£ć_Ųēö‹š7Ę źgÖ4œČd+ēŚ– "3H*H#ø«„­.cH;čEą?‰¾ż ¾xćw„µ;-CL×,a’q»œ§?ȃī§Ö²>ź÷…|ivŅĢÆjņaū©ĶsIji}­$ėŚCøDŗY‘׳0kńCž !ūCūQ~Īæ¼ §ŪOÄÆ <¾'šµÄ@³ŹW,ÖųĒŻnWźŹ{V!£¶äĶĮ6¹¦Čó^½ģÓZÜż¢Hg‡f׊T%Yv Šįī”H§>HpƒŽNzW\bsN=Jž`Ćä9Pxö©žŠ2 Šx8Ę YĖ%m ^˜å[…<繦J C•Oz-`C J†$YV#ÆaWm,øb.#V#)Šcµ4ŗRN“\†š«ö—ŽŃs.×q¤oLż/’‚F~Ś_°æķ“”źzżĪ ß¼pˤųŠ8ܼ6ó,SÉLH$tRŻsƒž‹ś%ݵžŒ‹g$7VĻÜŁN§>l ʜžŸPk:‘:#.†ų™BĶi&ٲU…|½ńwĮ1xĖĆZ·ƒ5x“P}æI˜Æ1܏īŸ|ČzןQjYšǧC¦Ļs¬YLtŗWˆ¬™0BąwĮĆ ēšžh’ą¤_³UցŖßxB?Śš[¼ł1ö›WåN'ŒPÜ,~LÅņĀØXa†x9是$lU”8®Č=Z‘/A)ą¬=ł«0Om42łdłŖįXÖŗQ‰:^“k".ЬFr?•.¤­&›<ģåąÜŠ Ųó™u YVcĆŗ‘[{¤”œsŽó Źī勖ŽS#ʁ lŁi7ŚwÆ4ŁnöĪ×ZŃīm%7V÷jDĻmt#œÆæJžææą†æ¶ķŸÅZžĻŸõ…¾Õ#1Ł\„įā“żDć=wmP}é5uc¾žØž•4­zŅMZēĘvÄjZQ]_·É-“‘ŹōčsŸsė^ŃuØZĪÖŚmæÉmq™ƒ >™®:«CRŠ &]F5Ļ6×ńĻHˆä0ļĒ<ךo’½ż‰!ż™?h;Ļų?M™<āYWѤe 3nžŁ}ļ)ˆ B°ėÖ¹āõ'˜üU…WX±š gĢ»~B„åO±®ÓĮVsĄVĘų³\·1>Üo>ō_R\ś¦½©źšZj¬Ø÷¶G@ĄyZķ|]”iŸ-#ūžm59bóC9Ü ›IĄ²iĀm1(Ÿ_Ś5åŜń4wpJc–6m`•{×ģõń xō‹+c§_©ß©!Ą'ėĘk¾ā’?FtĶr{XŃ$ˆœ‚šö-2ĻRÕ­šžyY@' „ŹĪw¹e&x„ņf “œ6EZÓĢfA?„ō)ibL[mFdh~ßló1€§5ėśh‚(–åo|™• mčµ+Dõ}#ZŅ®tÖ»“P….|Ɣ›s1ķ^3/… ×/®nļ.U–l°ćč(:#x§dµAµ9äõßiz*[ʒ5“kpG’³„Ćåmł‹Ž”t59«Ū’ś£¼ “ äcŠh²nÕ ŽTŻŽk£Žé”ą2D['¢Šāl#xuk›+«ˆ1æĢ#ålē„ =;+{8>Ż(įe sķ\LZÅĆÜ$H<„ÉŻÜPiŠēå‚eøYœ“"œŒÕŪ&³ŗ{¤øČ[Žk9Ä錺)‘£%]š¼ ö­]2El’Ø Ō‚;Vf¼ŚX³©Ē§*ĒŖÅ2żœpĄœ`×ie®CØéööź(z“ĖqEc#\Yąµø‚Ų/$1Æ2žŅĻQ §(† ćņ¤Ŗ6“dō`zŽk*”ī­c¶ŒķŖčÆcuįŪ77@ł£+–lyą’Jų<Ó*s²?sąüņ.šēŽĘÆķ3ńĻKųuākƒ~¶Ó|E©ß ūR䫌ńĒ8ōƘ¾ü×>:x‹Åķš¢ĖKƒÄšFEօ”óäQĆ ģO5ÉJ£Ž¬żw/ĶbÕīxĪ©‹>üE„æ<ā_†ž1hÄööŗ­³B/!$ń1į× ņ3ŠśöH“»­%#†Ī® ČS匁]51k—SéšłŒ\os×t m&;[ŻE$d$HĖżįé]7‡õ3ćmKÄwńŚ"‚@ĆŒ`Ą…|ö3F'šŠō}D³Ž‚ĀŌióJ6Hź0dē½v0°Ņ| įaŖ^źØÜ_Ģ^:äuäōƞ­W”ó؊… ź^抔֭u{]Cķ1ī@Ź’ź+BĻAŃīä’;ū‰Ķ?/8ŹøjHó„3˜K #XøŃ¬®LŠq€Ē'­zBéĖp"ɔUäÕĆ)źO9št©ē»ƒVÓæ“t¹Ć4ʇR0AÅ~6~ҳ֣š£Ä:–”ąę¾³x®šśĆ&·c»bž‡ӄõ:#RĒÕßīģ>,|5²ń&Ÿuj÷Öi¾©l:Ć&1’;f½OÄZšÆ„nõ•‚9ÓO1Ÿ˜d*–’õ׳„™¼kٟŖsžĀ’’iÆŁM~)ü?ų7ćCčrO§jśl¦3,ˆ¤ŖJĆ+#<ęæ">ų^ź÷įʗ©jįåׇ™Ų‘yy‘Š3rTšś|-{"£‰ÖČÜŌ~é¾2MŲŁCo«XĶē[Ė§w”>‡ņ§|8ń¾­š›āU²ųā8t‹ˆ‹ˆVRLWP0Ū•=ČĻJҦ-EÜŁUlŽšĢśoöžÆ}£Ć iutó•ŒaI'„vŅhj·³MZ?œ›”b½=«ę1u/re#Ķ|Ø^ßxÓY³Ō¦—zr‡™gšzWÕ3^ų{ĘZ’©“²×ķć&HpäAÜc­xU`dēŲš‹Æź:¬ŹšŪ“–둸øŻ«™ń§†.Ć7pjQĒmó#Ę@Žž‡ŽMsøu¦Qż““’ ųļ\Ž ˜­ü/«BEÄrü© p}3‘×é_Wjś­Š:½Š‹œ|§å“õpŁ’‘óæÄŸ‰Ž-³X,¼-f.¤bU¤aŠxŖß<-¦&£}©ų½#Ö5W–"`!<ķ#Ņŗ• ›Ņ«fz­’ĀųĶõkķĄéy„ŚC—[wŚå1÷•śõšŠ<;­xWāU—€fŅÆŽęöøµ†ę9Ļ*¤šÜzTTĄ_s×”ŒHą|S¤x“ĆOq6£e-­Ŗžctł¢’xÖmŸ‹SȊ+˜|Ėv8`:•ö5åŌŹOn†)2½–æ”i×Sµ¬“˜üŖćqQõ®ę?iśĶŗi×Ē«éŽ»$‚Cņ²÷Ȭć—4Žæk”óæ‹mx*kĢōĻ¾&Š=>Ī[‹h<Üķē„z–²¹ś~§2¹Ļx‹ĘzŸ$’żōŪ{ĶB•Š/Cķ^Uāų¦Żį7¾Õą·9̾Q(£ßĮ[SŻ£5楶7{­?ķE‡Čą`©õÆ$Õ~ŻZ\ŪĻ Zߣ}牉ބ{W&Øī§%-^ųkńŖ?ų–7ľ%¾“Š`„į øĀqü9žYÆÆ-’iėx#ž­+P²»$fiĀī;ų֊©ģač&xV«=½äŒģ}܏ėYŚl¦2\HTœf²©P÷ØąÓG ā/…^Õ5%Öō›ō-Mä2Oöy ¤­ė¶µ“Č.¼1v‰,—®Žw÷&”U±ŻOZš§ÄM~ļKŸM7sYŁ““†>øĶs1k«[šÖ]¬°“€“Š’“TŖßC_«(žCš„S]šŽ“ā½ĒųkĶw¢ˆ£|?|ēĀ¾¤żÆ|!yŖißüc.©gs®4\ņĆĖŠ~b:žj&Œœl|µ­Ż‘¶½µĆ26Ééė]&„4śŻÄ•żä³ĢŖ#Üē-“v&¹¦‹†å+½/¼š;:ƒČĒj£Ś»ˆĘӞ+.n‡M7Šč¬.Įu‘HJķ,uKq ń^B—qŗ‘‡˜ĄóĻ„u²«L×Z‡%[¢lĖĢ›@?7ś*õ!.§ƒJ<©¦}7ąŪ„‡Ęž7šśŹŪX‡Oµ>ŠøŽ©“äķ=žjü6×tHü9ńÄ:†‚.ģōkĖ©§ŽŻŗ"³īēŌņ{R©3ŻĆSŗ¹ÕŲ*™…šŪ7/zŠéüÆųAńõŖx’ĀSxŸA½Qf†7 Į9l«`~"¹$ÖĒ­h­Š蟱GÄ=6ūį>[Įć«„aar°²N¹ū˜”CĖŚæ>¾>|Ö?f oG¹_Ļāj¼ż©vO¦Č:#ā†²Ø“ŲĆ [³sw‹·*ķ¦æ{1ōķe.-LH’«( ©®oYŠYƒ\"—”rqÜW·=eVėPŅtČ®ŚßķgåÜ NćžõśÆū/ų£Gųeić«-MÕ¬ÆŁŽ&ĄÓ†Ļ៦}+æ ń#äxĖ*†c–ÖĄĪ\¾ŃZżŸGņv=³ĆŸ,¾ü]ń—ˆt/Żų/Ā>$³ņ§’Ļ%a˜‚ŃćoBGē_ӇĆKOübżž|1aŖ®ćOėŗ†ėz†Šö7_\ēčG+ėp|­KSü¹ńóqy&Ž2¢³rµ×{7śÉ/ķūųögńĒĈ/tĶoÄß 4ėČg³¼ƒ-ŗĪS¹CŽĢ”¶Ÿqé^‡ūüfŅæc‰|VųCy}ć/ž%Š+_h>wļģJŸõįē¢ÄrĒs]Q•“?vĮåx~(įHSņöš’·gdü¾/ė&ŪYÓ¾*ųIń?Ćļ[\hŗ•ŗ]Z^ĄC¬ˆF1Č#±vŖš†jj6+ØÜ-Ķ”*¬¬¤ƒ¼zהܒ:qtźajĻUrĪ Å®Ķ;5÷œgĘO†7Ž(ń7ĮohWbßXš¶ŗ“:HÄ-Ŝ $ŹŚĄś·­} ĻĶÉėZŹ’źsĖ'ƱÄÜi·“kāKčģõ 8«~īKXÉŒ±©ØB;·¢?J>ĮlæŠóƋśæ‚æg?g2*̚¦ ćłV61ƦIuĮ®;āßģ7ū?~ĻŽ=šĻ‚µßŒ0ńŻ„w‚ĻÄ…¤K$Śnõ!ˆĮCcp3ׄzĮ¤®~ …ń× ™fo”Óu!ܧ²Ņū/[jĻż¢ædO|1‡SÓ¾x†ĻāF‡Ūp„4²ZpźAĮaÜWēƒ«G«D¦%#P¶cįN 8ąä~u…J.ö?FĄqÆJ5\\nÆgŗņ~‡Øx{R’„ч…õ³-ķ²œKgO$Õū%š÷ö{ų5sšVĖKšæ‚·ØCĖr“¼š[ŸSō؍ ńĒ–’µģßńöfÖ,~&Ä%מj2$s^Ą2l&cęśŁ£Ć^+¶Ō“˜‚¾d$IūĄŠ%BĒ£‡Å]źk½¬ä팱ē‘Ö²Kœ]¦$‰X>YöŒkkS¾2¹ł!ńĒ\›Uųā˹- --Ąn€€v®?J›ģ¶ĘöH^T_›2@ƦĮEŁX’+|nĘū~&ĘN÷“Ś’ĄmŅĒė§ģŃe>™š§@¶e“¬f‰Ÿļ)npOā?*śóNÖ'qęĘægĘQ”uÆV+Cń,L‰ ² ”'WB>özÖeåČ·GxσŲÕÅ\ņžęæö•®·b¶7ńĖm*ŒžõĢŪxfę V !“Ī;¶Žć޶2”z›WWĆ{6±^Få8?J»÷°«B§‚E;N%™.möæŸ÷ež/į5Ą^j is¶2Ć8µQ‘Œ¶:k¤īŠ4‡„dóߚåµxEœ’µ¼|·šē„js·c>×PŗÖ[fz]}½¢Ääqŗƒ'+–lÆ „ŹŹÆŠōĻŚ’óY{‰Š²lBÜcµL“0”vBŌI™ø*98śW>ö—Žy9…‰Ē#„4īAÓßiŅ !ŚI10LÆMy׆Æoģ5?¶¬ŅÅ4MœōĒ4Ąö?ķ„Õü¹Ž]ņēwĖĘ y‡Œ“ūēŌmµ [éaL|Č `óßõ¬łŃm4–†+ˆĮ)Ęü\æŗY¼³zM\]Ģ [hā¤ÖčXg9ūĢW–ŚF0,AĘ*“°—™&£ęJ–SÅvŅŹ_÷‹ž‚ŗÆÜA¦”v^¾ō635o­4ų$ælC8Lc<äüC©ŚxƒĆ·pŚŁGr².ŠdĒō=©łĖńDš_‡õ$¼½±‚łŌ–*£G„|ŸØŁkš¤ÓhגÉb,ŗ3Üu(&Hż„Ć@źv' ÅEmf”£ĢeŒPBvŹĘMafiĢhۈw«ŗ_‡ßĀZ©»™öÉ“7Ž”¤‹Œ®zµæ¼4É®^}‹9XĒ”1ĒNµĒźņčž ³ø¹³·Ū`ø,½OØüź=˜Iõ9ß_źvśüwZm—Śnmó·ĢMź}Čī*Aā_x…āź$“ÜZKu@’:TøŲžnä·1&™sČddČ\b¹łnįWgcļķRG‘^ V} %Śy.; č#Xw{Kæ“ǁŪ¬dĀĆ<Ę)Ė f³µYo®^3nQ9É$óRW/s§±¶ÓßK’K‹ŁłUHłXc§Ö¼ćWdYŪó’qŚ‚ 0†`gŸz¾Š<“s×Ņ€3 ™ IĮ8źkNc$eƒn$ó“@”ÓbU6÷Ī1ž•!ƒĖbĢŲĒLR°4’*3wœ×ż£ØŽIq-£md zćƒK‘ćVµ³š%@IaČ5SšÆć=Q¤xV]<6ƒćć·ćYV“csHDśĆĀß ōO Ą[OCĮPpć9Ļl×s§ż²=čŹw©ēÓó8Ŗ×Ōļ£NēMl·w¦Eb²1łw¶®q|/ŖC­]M|’lӘ“ yM^o“¹ŪN™ÖĶ{„éšj«“S“!`6z±šÓĮ?hĻÉį‚¾Ō|GsøÕ›÷Vv}·4ŒżwQ}3õös’‚vžĻ’õ¹|ańLҾ1üoiVg_$½½‹łę˜9ĮļŽ¾•śŃįŻ7U½»Ó5/Ł’`čó-ģp¬£Œmķõēė^„)3žhźõOé¾ Õ¢ŅžxFĒI’Ńvj3˜J$I=O­wV4k§×uÄ_ßĶ?˜ e¾6‘Ō’]vEŒ÷Ųō׋FӒIķ¦“q&7 ÷{W {/ˆ,¦‚Ä,iÆ8;JHē?C])X‰JĒ!ŖYŲǐ½’ßR|• ß6Ā;Ÿ~)ŅŁZź«i©éo€Šēå‘cš I>ŪØĢöž²[ĶĀĖ"ķv`aŒzcéķ\ÄOxgĄ—÷6ö#Jń–£ Q¾Ē§ēž=+XӸϊ¼}ńūMøŃõoüSæŃ| ¦DXIbgHåb½B§N&æk/ų+ÕՇˆ~~Ī(öZOŚ|™uRNł”}ć‘^…*:źDåcń;ľ6ńwuė½Åśåž¹väe¶=2:W5,Ķ;fU]ĄäW|iœU*ĢLŠ’Ź1Ąę«B¢Fex›oLšŅĒ;l|F0jdƒnĶĢwP"G¶‹›8'“ŸåOC d±}ąćn:V2Ü Hmį6‚Xd 暼­4ij³w•Ö(• ,Ž• Ų#©ķ’ >üMų߬hžųAąkÅM<«ęŽEnĶmh;3¾1Öæ„ߣžļšgąī¦ü]ż«õ³ńDZŖ\Į¢B?Ń­ "_¾sŻøČĒ5åā1ßN?Nu_ųĻжŃ|%euškĄQ¶Śˆ„’Hčćķҹ7ā,—6 šßĮVŗgˆµyfZņķA¹„śŽžē„ssL‡PšWƒü=cŖAń¶ī×Å>$“sqlmN`@G/9+…Ö¼Y©ŻE¢Zčpéŗ~ƒyŽĘ=„Šć¦;ć֚±©W^æšĶµÄ7¾ŸSi]š' €ųēi³žÕä~)š9ŁMū3ÅĹFō9ēJMKDŃ5mu šuÄzN…"`\LŒ3&xϵ©u­xoĆF Mk_ ²Y”‰čF:tīiX mVŅēQæ·¼Ōī%GŅ،t#½tzw†u ¤ŽöM/Is±īemŠ§ÜšBęÖĒ’|Cų­šĖįՆ­ †²Ž)×UZ?."6Ē/ÆŸjüņń/ʉ.øŠ+뻄Š~.ŠĖøDįü«^kĒeį=oZ¹XmŃäFÉXä é^Ķ”ü#ÕtJČjš$ėgp74ʹU=æsTŖŹ•ŗIŚų*m8SJ†FŠTĮ¦ÜŽāŗĮsĖ2“å¢lē qŠĆœ“Śtż-t[6÷ɓϖ ŸĘ¬YÜXĻp‡^€MnĄÆ\}kxĻ”3,K„Ą¦fҵ öN6łxĮük„Ö4&²-t²~ļ«:Vѕ„uų¶’ūlÄ«å¢ģł@ēń®ŃÆ®n®ęuxā-ėĆ}kX™Ķ_kś–—t¶"ŅmŁ7æĢ>‚ŗķ*½°jēcs‘Õiœ²ZÜ–Ö:ž‘ws$“Ā8'ŠtÆ*Ōõ;«MBēͽKˆć,L>蠂m?ÄŠ–1yėĢ U< ꔦ>ŸsiØ@’M.6Č(}؍°Óōļ¶ł|»rŁf;ŖŸ‹ķ,td²u– dŸJ^FńZ<āŻWŠęŚĖVļb%ZŁe>ž+”Ō-®®d…Ż'+ŸāśŃt3”Õ„ÖlĖCpæg»#•ō«6“éÅõKÄ‚ŻˆĖ;m¬Yœ¤z"FŠ]E$rŌ†ļW7½ęĶ;O9IYøŃĻn{­Mćń( ē6}몟Y0ZŗµĢ(Ŗ„X‘œU¤#Źļµ+cxå ķ<õ­›H-eµvf‘n3•½;śŗf”} Õỳ[I7mMĒ;Ōt5f[ÉČvgPO#¤×A§b„ŻżÕŅƊøpē<·i¦]G€ć5…„ås—hīōLGdŹPdIƒėSM3N&IV<\¤“’l"H±¬w ĘN:V»<7ņéķmę6vs“śŌØŲ¤Ī×Nń õµ«BņnmøÜy5}®ė3ܹŒĄćł†p„QjDŗ­ŪŻZ$ś“ēĶT±ÅyEƲļtó©h-‘ŌÖ±Z6oiņG,¤ćtxĪGz©©…iV8•™‰ķéļTc)×:lńó#–Œƒ“Ö­ž˜¢$IåVlē8Ę)“IŌi­-Ŗ ¶äć9ęØ\źf;…2†kpŲŹŒ‘ųP‰•¶góŁš_[ŸĀś„÷§N»€Ūd,W óżj‡ĒĒ> ń‘-„ĢW–¦ÜMFGß?1õ5ō ”Īķ±µšĒāwÄhõ4– ­?N ŖÉ,|HqÓ>kÄž AćxŻuÕ±ģwÉ ć+^d%™é¤ź“ ĢÆo4¤I¶Až=æZČŠōėķOS‰#³’fvĄ5“fŠhŃńēĀ[ę:²^]Śj1Ę€XŽr=+ß~|Pŗš—‚-tĶNóRø°¶-|Ē;éļSäitŃäæ“/Š’ņ’HÕtŪymtć?›±]Ž8#o¹¬’‡·RŧN—V²Ś$’$2r@'ļ~U:J©Āy?›ee„Ė%č‡>L‹e}8Æ,Ōļ//µ+]OZY­ī^Rƒr• ēŠŅęfrŽĒV»¼šĢ¶š%Ō%š#"<XØō>õKþ#ńׄ|UšpŠ”šåÕŲ‡ÄR•ćdGlZÕ;Ź/cźßų`k¾±Ēž³Ęā܌0o÷:ų’ŪągŽ[Äréž1ŅLĀwHn ĘōĻBæJŹ ”¦ŒīüAū?ųD³†ÓĆ֗oŠŁw3Ķ õĮükÉ“Ż ĄŸ ¼pÖrź¶ŚÕčq ܧ¶+ _”ŃNŪ3Ż|rtÉ|?ms±Ći7ÜhXnŒõā>2–}fŹĘĪņ{eĮµ’‹*Lć&š¦›qc-”‰-فw݌Ö°!“äøDwTŚPćœńŅ“¦qɌŃmѤøiäiPs÷Gҽ›Ćöņ6ķBķnBƙĮ|ē“ėҶŒnf™ÜėšĒŚ“a5¶Į:ŖG"ž œ{`V‚¤š¶ØńjŠDmī×}ćןĖōŖ”;ĘFķ×Įß /“‹9’āIŚBčܜśzWØNŽšī…c«?‡m®5[8ĀȞRƜ s×ufĪ„īĻ_ˆ·zw‹|C6©ąĖk]'RBä‚3µĻ^ßJõ߅—śÆŠü†5Ū;7׬åóęeˆ†“'×øć4%m ±õü=ńOŠ|l¼>ĒO»ncŒ ś~5×|ųY&„j6Śż—曑^č.Z~2=qœRdKb}/ć~ ųøx āĮŌtI—tč>zs߀8®kćēğ[ź)”hŚÕž„t‘¬±”`_ę\ē±Q¹š‹?>ümųæĀ×0ó"¶ń „Ā+@Ҍ ß·zū_įwĀ]cSų{£ü@šĻˆmģ|YfÉ,4˜Žż Ó©ėFńM#ļ/‡ZŽā‰oĻ€ećžõń‡üץ‡Uš†õßč&{{+’ō‰ „¾Ō=§’\×5Jv³FØü'ń?…oģ^.ģå„HŚS<Œį½+Ķ.āņČ3Ę»é0*FāXł[Ā6vn+–µśSū9ųņ×XÓMŌ®c3¤Kå0“pVīøüė©+£ŸZ‰‘X|ZT’I‰Éņ®y®„EŸ>üwš|¾%Ņ®xėX]CćgĆvM:õg;g¾Ó±ū¹OĢvÆ'“”ē–ęe ć±ū­}gīī F6ŅØu#łWėŚdz¦wo$euwómÜqÜ/Ö¼śØč†Ēü%>©~ž5†­,LKg«m@¶Łzä~µłcūLü,;ų©Ł4V·^'Ša“͕缱rBœs»n/„eg©£gņIńKĄ:ĒĆėŽš泞c5œĢ1ņ±É_ĄęøIēņņ Ž vÄę¬e-óy…šO-FFSJš‰På Æ^µŅqJ]>«ƒµ‹+õē°¤ø×e¹ƒģÅäš»3$q,@°żčąQQłs«§—ĻŠ8»ā¹UĄüM"±t ‘žN(:)³NÖTƒk9g ČöÆ æfĻŚZżœ¾˜Øŗ„2łĖ"}ņ%~‡¢OBKچØ[[ŻĒ¬Ś›k‹”²ī÷ż+øš[ĖźĻģrYj2G į©šÜŽ/ éÖÓÅ.Ÿ‰£sœ±ĻÖ½M4Ń_ x ”=9ā‚’čSŌ5‹/aq rBœķÆ9æń.­}­[Görc ®Bą`3޽j Q:ł`ž[Y¢iĄ=O„rpßC„j+ Œ†Ņ² +ŽEö¶wóxČÄŽŽ6œņ|0%xģh*čt^šāöÕ¤xHEį‰źģ²Ģ»”eˌņ=+tĘCcŌc„Gc:Ń»c”­ķöĻosnĶ«d€p:R4‹±¹yØZÜZ¤[U$äOZó[›U[©&Œ Äc#҃®”„³ŸI¹»źÖVx˜A)Œo vŻ\&£šö=ā=ƌ¼%®jŚ~™q"-Ē—3!8ŻÓ‚y˜Ü"œuč{łf>T¤¬ō>ń·‹ēųoūSŪųƒ[{æŲé¾ ó\Ķ.A·—N`kś¤ż—~źśe³~ПžĢ./4©-Ę«kn%Bäe\Ä:€@ēWÉāšŽ.Čż/-ĪåĖļ=…?ą ?n?io…ĄµĆ+~Ń^ŗI<#ć6%'lƒö{•ą¦ą c9Ī7Ā’²×Ęæ Å>§į‰7Qjk µøó1ŗ3Ʀ‡ššqRgŽd˜™S‡/5Õ’=OÕßüš•Ļ‚c×ō“Ōl¼€ŠMܲ¾y+āŲ<’ßź -%ÓCūÅŪ·$cóč+ē+¶Ļ¬†&čč쵋i^!)ӂFŅ .2M|¬Žx«āĒÄ­SĮŗFÆsy„Ś#rAwõĻå\ 9\ū“įĆõµøŠ4)·ŗp°¹SŒŒõĒć^¹ćŸ‡ŚÆŪ5­/Įw×:ÆöZł¤³óŽłźqĶsŌ}NvŃēZ~…¬Łų¢ĒT½Żģ lē×§ē^ŗŽ Ó®īf¶I¢,æ)P܃^tŸc;„‘[ĪKƒ°õØž/h>ńĆVĆ^%¤f[K†;^z€}éA³kŸZn·āŁkā$>3Šk‡ŚąhÆ 1“ õōĻzż._ č’¾Ūė–·iuįĶjĶāßk/Ķ måO”Æk +-Ļ“coڷųĀKæ„:å§tkhåŠŃ¤—dŠ)'õČ•óցāoé—Z­ž¬“YZÜ]ɬ}©ęŚ—„m4Æźõ…ū½ŻÄ+Œ3ė‘]†ŸeœßŚWɛŚ'‘8pń\Rfr‘sMńDz>½©i–z¬:‡†/īgqŒzĒłęŗ’ųZŹĖ@yšņĆPi"ó1ŠūqR¢)j|k}­kž±Õģ¼>ŪJī½Hš@¾rÆĢŹ <nüÅzĄ?‰z7Ēæ ėePióY0)üÉ Īzpkjf2Šō‰_x1¼G§Gß[·–Ń…ÜĢ:äA\G‰~#¬žŅ/“-żDÆŚZŽ@«&łöö8ė^$rN£GģO„bĆ„rJcن5l{.‘š¾ūāGLĢv1Ė‘ ņ ˜r¤~ W |%ńĶÕ·‰ī¼®Ü¤^7Ó4Į×U^€zƒY*%z÷Ųś-'NøÕŚ’X@-ä%Ż”yąt®{W†Īīā &łćµ“Ķ…T#”SŲ×µƒŽØĘ…>wc‘¾–’āŠn.-桖vbsėōÆ}³¶µšę–Yʉ“åz±õƵĮŁY³öl–ōčĀ’<ā_‰­f²½±‘üŐč['ņƊA¼–żlģ™¾Čƒ#'8ē¹®—-Ņ0²G¼ųHM0)øEo˜“ļōÆ©ü9ćø"·:n¦‘ŻXģŲe§š5É*w=•Œ>xÅZ4:ö–šhZ³Į!Ź`BĪłqźxƃ5ļÜŪGsqweqåĀŽY•PįÆ„č3Æ )_SēmOHŃ5‰g°¾[X”ČUeą8>¢¹żĮś‚/Æīm®#›OŌ ¹U÷ē­rJ6>Ē­Žź_G GĪ›cćųŗ×C źQŻF’;+äćŠĘR>¢‚ŠōŪeŒĄ!øĘŖŅiI>ņÄéȬäū”ĪM„cpLg {W;Øk77ń¶Ÿl”"裞#U:‡ž±³–k›E–ÉåmĻå¹ OÓ„zN±¬jzę™¦éśä÷Ij»c,ÄķĒ„S™Ė(œ¤ķöVI ē½’Ćę±¼©ŲĮńPų[ŗ©n±Ģ¬$?2.[åu=łžU’ž„b"”]qų÷>©ąĶfĒÅśōO­éĶš\Ąx™F8ČõÖ¾žń—ü"“÷ģ»ā|YsjsiźŽuŒy¶÷r7®@5²g˜Ŗ^)ŸžÓõĀ=PV6ÄDĻ’=6ń»ń®šóķ7˜ģFéĻ ėX³®ē+„k3ǬMkt’Ū^Ąž\ѰĒøÆ·>üE}.Ā})ü›ķėjϓބzk¦ēāb›±õ—Į-STŅ“ķv"“h7 —F!ŽÓۃĒzż’‚|~ŠgĮˆō’€>3Ō„ƒĀww &‰sr’-”ĪFaÜz#7A؟sŸ„Įµ¹üÅō†įõä°µØ½č’Š:„óŪę~~Ł’o¼cškÅŗ‡‡¼3е»{B.4šķFŠŗGĢŹ2Ź=ˆšžF|ią [įĘ„'¾)__gΰ “ĪW±‚>µŻ&=żshĻ+ƃ”Æ*s½æ»%§ā¤}Iš#ö›ų»ąż+M‡į÷Ä_ųČ8–ę¾ŚFČņ`dē¦+śsż™¾;ų7ćÆĆ?ėš“x•-BźšFV;‹[‘Ɖ ĪPp0xõ®Źé?įöžÖ•ŖsZ£Iźšv”­§ÅeĢõwJūµć'R×|1«čŚ.ŗŽ×'…–Źó`a ć•%Ogćæ³gÅüLš¶ŗ>(x=|#āĶ+P}:FDd‡Sóā ؜ō$zzōīris鹤XÕŠØœ’SS$Eģ~ |lųŃŖ~ĶæšP_ų7U±‡\ų%ćx­&Ö4ŪĖu–÷„yŽ#”Ļ=«Ņc߂?~ ~Ū~.·ųIć¹u‡ƅnלּ?%ć0Ńīź"ńEB€n õsŒœ%ŌżŹ¦IUeÅQ֜é6ü„æ§ę~Ģ\ł­É ˜”Ś}+å?‹ŅųŹŹßĮśśé—‘ßFŅYÜŻFū£Eå—ĢSĮ\ŒdЇA3ņŒ»éĖGcņÆöLų’ń ļöŠń7ī|saįķVīxµ k6™ƒPx—å6ī0ŃČĖ‚6šp 8ÆŁˆß³×ĄÆ‰–²ßüBųšĆā„1UŌt[YåcŽBČéžp9ĶbšŖÖ>ó;Äć²Śō«SØÓ”#$Ó¶ž łń ž ’ōųÕoxśĆ?žĪ>:yZ5›I¾’Ł£“§Ė³ÄS÷vē'žõłqūZ’Į¾,žĶŸ üAńKįßĒ];āgƒtÉל~±¦żšęŅĻ I՘9\Œƒ·€~•Ć_­sś+Ā?„c‡ÄŅĖsÆŽŅœ”TžŌnķwæ2Wׯ›Ųü‡š†ƒć~i4’ ųS[ńV©½”[éщ^@½J.rxę¶£ń•Ɔ•łWūS|*“ĄtŸŠž ¶6žń^`Ō-cGkxƒ…7dŸĘ¹+Å=»„Õ®4ųWqżń'J»Ō"²ĢßfeĒŻ;³“ś×īēĄ_M§Žė^Ō®cŸG—kZłžē§\žuĻŲRÄYŸSźš×ÄÆxėį‹-cŌtKO™Dl ķp3ø{Œgź3'„/|'Ŗkz=ōš…•…Ōö±‚Ÿ¼UG džU‰ź`qNśŽ›xn'F’å£Aن>ł«ŚŲū~“­F7”÷“c<¢īžJk‚Ōśš5ÅŁu)õė­CÄ’ńńw;M“’ƒ“üv“±§Zé×0]Cū£Ęō8+šśŒ&‰#üć¬ÅbólN**Źu'/¾MŸÆ %ņ<įøģēūM”Ö‘Ģ»„ņ+Ł4mBłX+˘»)5Ž~y]ōf”Ś„÷3̲aLŠńČØŖĢĒøļZĀǚÉ'Ńķ¼„šź2²1čq]N‚ŠA¶YįI1Š¢ŗa±Œ¦nźw:Z²ŻÅ K.ŃøU8µ-žDRēļ†œ£sK”ĮjÖr^H±ŗģĘ=jĒü#^Z ‚Å'#>¢¦0±Ķ7ŠĆ¼±¼³` BŹ_JĢø†{ŒI=Ę3š³šR4“Ÿ“WšĖuņqĻÆR_Zėv®śt¢RHą~י ó ĖQ¦ji¦ź+5ŗ“ÉQŪŚ°īoŅ9ځڭĖÉ©”{˜3æŠõ$ŽŲ“’*ńŌÕƚ©LĮ9ęˆĘĀ.]\Å5ø„’ücéX‘éVlŽ>ļj&0"½ÓƁ’Ń0p1ĪźÆ>øŽŪ.„9ۜVfr—b’Ś`’c Œvõ©Æå±:|/j»ļLt­ā“1”­”ēŗĘ®6°‘˜ź .›¬_ŻŻ£ŗ9-ŠÓ3æC«š–³juE’źÕ¦PNc'ļ^ŸsØi÷s­Ä g Œ†ĘBU¢éž ć+ŁĘ£&Ēqb£ Œņsé]‚µĖ[;mBŽźĶČ^GŹüTŲŚ*ēĀ“†“{™Ī­dŌä&K€OBF;ŠłLš„֞gŌa·ł'; (ą÷ž“‡8„£ø(X€A_åX2[ĖlĀv3€>nĄŠrŹ6£ĄĶsĆ5“āĶFxŒ;$Ė*įӹDŽŽē¦łzžeŗ¼1.Ņč„™‡@_¼ńM֝§_ŚĒĪ›BļUĪGqĒŠPkČgč>$Ōō¹,ī– įwļ‚2­v6÷SOtׂVYIĖ š? ‰¢eʍö„oqµņ±+ qķŽøėż>[{w`ū™ŽG?Ҳ³‚ą£5ĀŖø=G­(gžŚD™W'#Ö²š-®§Z'†ę—=ł¬ŪłD1œOf žb¬7`£¬ŒUó÷ŖZ„I*īŻóz…Eł™Y ńžµ;DŃąžĒõ  mŒū¹ćžµ±g™2Ā€£tĻj—0: ›V²…Ćʤcż`= q‹ØĖē$[ÕĘH>¦§ŚÜŪ“Uµ°¶‘®^'ˆY{ō®RkŌ{I£²‚`aæå^j'VČŅγĄ_ ļ5ÕmNéwÄŲģ3_Ué ōæ é×P, ½¶Œ3‘ÜŠńq˜§±ŻN—CVŹ<\ iaSĶté1Kó†=0kĮ©S™Ųź„,l£ųEøŌõø•a¾n¹Æ*“ų“Ŗų»WĀ?|3©ų÷Ån,ō茒E“»(ē½]7:v?I¾’Į)õ»Čōļž×$·ŃōŅ Åæ†“ˆó%'%= R+õ§įļĆł“]Kš_Āo čŸüÉqr#1K2ć3q“žyÆV•+õ*Ļ¦ĶąĻ…ŠĒ¤hZń?‹ļeÆ/5·N28ę»ū’\ų‹SŠõoßMm$Ņ+Ērģ$ē€TcÓ„wÓ¦qŹw>†°ųM­o#ŪŻŁų:t@Ńܲ—‚NQžjć]izZ6‰¦“:…Ś|­*ÆįÅuĮ·bœ¶ŗ‰Ōä’årĘ­øוé\mߌUP8Zˆę«>…6”nŚ –' #(ŹT†zŅ·8dÉÜ*‚ĢŪśqÓń©ć”‰Qžäņqڳ”»ĖČø¶bE ÕĒ*Å¹o/f@SÉõ§ŗ2lÕ±™•І\÷k¤²Ńłä“ģĖĮ’ žµ‘µ8›žŃnuķsMšĒ…-W[ń=ŌėV‰’ʼnĒ$ }kś$żŠ?ą„ŗ’‰>Ńń[öŃÖ“Ļ xKÉV“Šmīv1@3ū÷éĻ÷FOŅøńČōiP±ū-įÆų+ĄfąĻٯšO†ü „m{fŖ®Ø8ݜdžüœū×įmSĆ_µżZĒĆŚŚ|P×.ќAØÄH§Ż_įēł×›5©×v89į/ń'Čų¼‰§ų)ˆtŪ)0ź3Š‚1č+ćŒ43ĮŸŁß ¼5k¢Ż[G¶Śč YAēļéÖ¤Ōš/|C–ĒNžóĘVŠųĆY(cv(|õĒ·„s^%æÖ5]³[µ­žŸø“ćo¢ó@ĻØ]Yék§éŚj˜fhi—!Hﻨō­’ ŸxsG½Õ>!%ę©p"bG"{”ķNä9ö3Ä7ŗåŽ;y¬4vČ ¹=HžŗęŪJ‡ĶŲZo¼gūĄrƜcs0ń'ˆ< ą (uoėźŚĒ™fß) éžG5ńŸÅŸŚ“^ń°W…걊|3ę|Фg.B9=jī‘ŃN™ńnÆÕö¶fEɒ_9Ź‚›Ōš÷_ü5ÕüKž‘³µŖ!f=×McREÉYÆįķ/JŅüKmiiØF5T,ˆrA`2*ż—Ą:ιo£ø±Łä” Āü£õś×,£vc)¤Y>‚ŅŚK;©Œ’§šöĶVŠ­4éoÉb)œ®HĪ1N01•CwUšõŒ¶®¶n‘̽T½ļ^K'µ»ūµŽ)„/ęL¾Ēšž5¼a܎sAķīlg6³³Lƒ cN»ŌŽÕķo’)an·’*Ė<½“łŪRg‹@Ŋ„WU6”ogk=¼ŪHÄa‡qōŖR±”„Šņ{» Åį»ūt²LO~о•ÖŁėWZd,€gjžµ¢‘Œ£rŽ™ćfŌ®ŅO)Ķ®Ht‚1õ¬xÆK72H,¦}¼nuėģj‰ög>ŗ­ī©qfśu‚¢;g…ŪåŒuż+Ņb·šę¾× ĒÜ×ւżŸRÕŗĒĀ L‚ pH+ĒöŚ<6ūt­]µpUÕŠ©‰v<įׂķ4 õk«⓼—īœŸEżkŌ4MWÄP‡¶×nķī%ŽV12)i›½²Ņž(yŃY½“÷8/ķ¹^ž„WGĀŻ*ŽÖćĆ÷ńÉŸ(¦9 Ž2=i$k ;Įżv3ŖZų«LmCEµ-öYÕ·ƒŁz č~h> Öc“G’oq1M’X`AéÅ”ūžƒ¤|;Ń<7$séöčŃ.+ĻS^uńĻĆ~Ōt£­h0-żŅøŸh ($žT®a*‡‡h¦§kāĖ VĖķ ƒĢ3Ą żĄ+±ńƹ¦.‹}m š‹‹Œ˜ō’w?CTó<ÆągĘŻWįĖx§Ćš“Ļ%„ĀØŠÅ =0OæjśOׯ5mCDԚēĢhēß%¼ƒ)*žÄw ¹yCj<)%³µĪ„ŗ^­“F欔c;q_žŸō×ū-Ž£¦é÷'$y+’ÜōÅgšČś“š%…Äv²¤Ź’7$\s€Q]ĀĻŲųškZ}ķ֟­DūäA¹\ÆrŽ‚¶Œ¢ō>įųwńWĀ’ l4o x‡Ä—ĶĢN"&›†b{Ü’Jś<{ućĒ[X,bŽķTłc#-ß­7 ™Ķv9O x·XÓgÖ¬|Uį»@]¢v]Ćj‚yyÆĪ隔ń>·āē_ÜĻw#D@ʢށ}ź}š&2³9«żc_×”‡Ė¼¼}>܄p†ÜHćn9Æŗ~|9¾’ßD»Õķ¦½·1d‡ęćŌŅ”lnĒ|Aų[`lgÖtX/ķ¦Œ1hd> Ļńlž+“tšӚŽéžų;ˆr:VfSĄ3]ėZ‘sdÖVƒ ęČø%‰ģ>˜ę½®ļD¾Ńnf *½—‡<0ö5pg/³hįuß:«i–2D’¹łKzśėØųuįmR$‡V×ÕīՏPQéüźœĖŠ{Lhz—öEŌrĆq[‘‡ €}ŖjŚ6©i}§ŻČcµ$¤rŖ€FGZČė†Ēòų&/źwie®-šc!É?z'†üy§x{Z³²²²¹žŌ•¶¾ŽI “v7å¾§ź_Ž/K–[øŃŽ5™„desėī+Ź~,źŗßƒ|l4Š{{4ņĢ#MžY ×wį^£[$śĘŸ}„p.ā”)‘šY¶ń“ē·tŠ8écŲ„ąŸÄ——6Ŗŗ…ŠF–g£Œr*ū_ągĀ=zÕ¼%ā]+W¼·-öķ>~cĄŚ=9?„h`Ńčµ_ģżāĆć/ųūĀśmåց5ŗÅw ™]±c”ĪqX_ “&6ŗ¼°xŠåž9‡F÷Øz+vŌ»ńėą×ŏnš„µŽ©n<ģA„2Ēå?—ėXŽš—įš%׆ą’ćKńT6b8a““ūĻ|Ō'„Š;߁¾ų‡ą¦ŅƵ’=ĘØ—,×PmŻ‘žƒŸē_§žÕ|'ÆĶ} ėščŗžynKĮ)K$cÜΦØ|§óżū`hÓ|w©Ā;cqHī."IXö’į_™š¬Iö»ˆāW „ƒ‘Óń„ƒŗZƒF,`žc!—ØĒzõo…( x†ŚęKHZUy3ĘęĻéĀFŌ­Äė–:~”n"œĻš°<Šķā e“ļg&‰+™_[ ˆ!›7‹rJĖĒ„`Źæ;¾;|:“Āŗ…Ę«„X…Ń®ēw·ņœ|œņž5ĪtR—CĆ,g–Ū­}£ū0xö]žO†ś“ >–Žß+IüEOšŸń ė‚ŗ-źZŒ?fožų‘ąKCO×ģu(ļķ#YDeÕ[{ ō`@Įó_߯ĄļŚ7ķ;ū;ü0ųéį‘Ē«éŃAóĄP °õ2ēż‘ėPõ‰ŗZ‡¼Cż•ÆY›yL3d~ ó_wé÷–ŗĪ›Ō$42 >øā¹ę‰–ĒęgüöWšēķ›ū'üEųX؋ńCõļ J"!¹€±;üßp榹yŝ_‹t;¹l­ÆžŠŚŽĒ,–×qø?»d;Xgź½ė1jrģģž{?Į#–gŽ[„¼„1 ć@Ü&_\W”s‚bM¶Dnż)”^Ŗę<9Ąę“čf˜ā¤:įöóžÕ ‘dRä ‡õ5-›GbҾQIQSĄ±³b]’éųPŽˆ­ K)[ ˜Ą+¹Ʊ?`æŚļğ°§ķiš’斓<ƒĮWr+Å6åĪĖ»YFāń.qéÅ#¢č„߃üK ų«Įŗ/‰¼+{k¬x[W²RŅ®!HØl+wŒ{\ī§u?›ŌjC)+ Ē8®*±7‰ćž/š¾—ŖßźŽÖ§øµš—ˆmž"a—ś~Fæ3ļķu^}‹TŃŅēÄŚT³Y_ł«‘jrŖĢ;‚¤œśēҹ ?Ÿ’ų)ģ¶ŗDķāˆo- BÉ£B|č[$¢žÄtö"æ do6c Ā€rOÖŗØ;œÕ]іÖҟ”…$ē=Ŗ’‰™ČBpö®ćŽJģ/¹d”†9ēž¢®łPH=Ŗ1Ļ#­ø²IÖL11Ś®ĒåJĄÉ.qķ@”Hīa6Ļ'Ź ī~•~bĢ03ūŌĒCIeEĢŻĒ„]Kk{Ė­å&…³•~h;)Hžœąƒ_¶ĆFóöjńѵS“_&!Ģm}bųņŪaįŒMƒ‘ČÆźjĆā>»āK/A&‡{eń+Ą³$ÆnˆĒūWMo»4'0)ž=}kˆčŒĻ¬ü?w„j޲Ö4—‰,5–ę"Xgłę¹=;ÄSKq{opŽŗŽ˜äłgķ÷Ūõż}+‚{“-ĻćCž Łū[ü2ųÆĒļx{ž(M&¤±Ś  ÕĢš8é‡āAī\vÆēÆĀŚŻī—qŻ“‹K€`WŌ~6øl]ńGÄ;Ķ^꾉ZęŁ ØĒī‘ĪGāk“ųqāĖØĒgšoā.©ąßY[OoįĖé/T6Ó»ųX~‚æZ¾ŽOop‹wóHh÷0Įōę»lc9u=~MCē ®#9Į¬atĻzčT3ųéHĄõ_ ėö~ó&žH¹äī»qń'Møf‘ģ”uvǘ€ v.2±ĀÉp·2ĢĖXŁĖ{V†Ÿh­*\€:¢÷¤_:=6ÕŅĪĶ•#?h ~‚¼£Äŗ„Ī”Q$m«“ꎙeĶ.¢ax&/±Hąqõ®ź-nXģĖ£'˜Aøü)ó2[<{Wю„t÷77łGZ§“*ƗÜÆŚ‹$H—§JÖšż¤2”q9Čć-ü«63rU6Ó0 ³0=ŗV^§sö{i‰RŠŻsėHÜó&¼‘^e]•ĻĢIąW_m„Ķ6œ³(,Ąs“tŒÅdH§cæ¢ē¾+Õü-⨼?©iĶöbp cŚ®/”q‰sľ%K™īšŻÓģģr × ¦xŽŚĪvŽHŻĄ9&µ5)Oā )neew_Žć#µs÷oö@9Ķņäõ Ķ}6]GO¹‘ ÄĘ×våÜx_a][źw×ŅM-Ź<8xēéLčƒŌéģ4ėHl&a‚dÉmĒł®ŸJƒM‹ģr¬)s:ņć g)œæ‰µoØK-øŚĆ„ä ņĒ777ž~ąņ¹ÉĒšŠČĪo”Ūé0%ĀIŲxF@Võ¬ĶGĀ2Ė#É,¬s’:‘ަA›zJO¤Y5»®õn«Ž¤Vź2Ć„µżŻ²Å¹NāŻR±7sƒģ·śŗ4r°…y㜊źmåµÜńČ$Ų=;PjcÉÜI)E(8śÖL…­¦Qå†LüĄžŌӗB)c²’)ä*c+óg8ėEž”įęŃ®ÅŽ³§‚•W±ĮķXT™čS•Õ‘ń?‰|„ü_ńf·©ŽÉq§0"ÖB˜Ū6ĢOóϽe?šM/ˆ:‡‡~ų+į«xĖĀZ~m„G4 q*“&8+»×‚O„|¶:ŗę²>ĆNR„˾„šT߆_~6|×õ‹+ÆjŸ4×·½Ūcpß*H2·–ČĻ8$p3_Ég>6·āmwÄ^ š~«iØE kĖ5ˆ™TgĶN2zW…Z1½ĻŠ2m)TŻßģĮū[x—įŹx+Ęz”ś·‚.5°»B$żÖćōƲ~$ė³|cӟÄ~Óc°Ó ƒva#÷#©ÆžÅįR“å>ū [Esбų•į«OjzeöˆźŸŁ·āxÉÜŁŒ•éœ÷ÆĻļŲėĘžš_ķąŁüOqk†u˜ntė™ī ³o;K1õĪ9Æ"Xy]¤u{Sö»Å’ąšÕĮń֗snś,[ŅŽHÜ0bH ‚=…iü ³ŗæ‹_¹ńŸ=ŒwŽ`‚ģ’=r8כVŒ˜½”ćŸ“Ē‹bšwĒ›? ZĖ§ŚŻŻč÷8‰”Ē4ƒƒ"ÆIÉ$~5ämį‹ZĻć ĆgĘ\Q‹¹.ldĀD Ęן3ķšĮa˜{ThYüFńž¹ ZšĶ¾—"¹Y!cļZž!Ҽ_ćź·÷ŗ-Õæƒv˜.õ+pZ;gčCą|½zÖŹ‚Bö§!ń»ög×­~ųa.­ķu\ŚłÖĘ)šŒwčkäĻŁ“ćE÷ĄæĆļ[Ļ}ą{ł¤0‡Sˆä9~éöŖR±|ŻŚ’|!ųūC~Ī>)ńw„­ŸÄĶvśpr+Ū|AšoÅl"Ī{öP7 ^£hėB•Ī„UŸ^|%šog^xŅ = Åö¹ ”įYsŌJüĮż„|©xg^Š>8čeöÄ»H7ö½łčHÖš„vm 9h{Ē€nõˆß uųrņŹćM“d’&“ę Žqōļ^¬ųžMBō›m«;…”ó^¾‡+»>»!ŹjŹ$>'ń×ĆoGolµ;œonHĒõõÆæż§·ęHfM„qśī*֍§¼E•ģÅ+ ˜—޼ŠŌ>ß^-+ʙā #X­oŻĄW Yźó†l‚ dõ®{„fp>+×£{˜-Ų“‘‚b°4ė524Š\ÄOėA2w5]|¶Ū‚bĻSO[dņŽŽ†„’щ®Ū<–QB«,üg©Åsg‡ę³ÕīI®\ca?/דÜĘHķ§ŒĄÉ°c=:Ņ=Śł!v•ŻĮć­KEAō1®"0č7£u• i²·„–¦ź] ōe@7ƒųRłÆpŁŪ“ޕҪŲē©NēK¢x§ZŅ!–ĘÖöQdć˜]C'ąäŽ2ń‡ŽtļĒ5¶±¬ń–A "ƒóėŸoJ·XĘ4Ņ:/ųHļÆą]Źd*G ’:«!žs’ŪĄėYó\éŗ š6į‚¶EyŽ<=y{ymā=!‡öœ‘æå²)ĒŽµF”}[ń'Žļ.¼£VÉŪdj‚Bńž{÷Æ”žüK‹JųW©xJŚīć÷Ņnˆ7 F„Ź“U˜],xŸŠķšŅyƑF’6@ė\÷†f’ļY±ƒh\)§sé¹č_<Ÿćm3^šć›Ķ.źĄ5Ąe £ņjo ŁŚ\N!MMąV%p[Ø5ÕI}JšŸ„¾!ź–^“Ņgø¹æ†cvo˜0ģHü+é­CO·×“ˆ^ಆ"H¦Œį¢aŠ©ģE{Ų=¬~/ÅønLK’źĻÕĻŲæöæžÜƒJų3ńoQH¼Y4ZW5H‡ ’ŅP03޾e’‚…~Ė6ß u+ļŽ^ ќü4Ōn7x–ŅŻ>]åĪŅ ,.ÄĒ Ē¶Ez»£ų«/Ė× qģy.u““ųU•®Ŗ$’×–WÜüŠ[4]U…“ĀŖ§trG÷%SŅŗ]>Oü,ń—ÅŸ‡®» źöņ)ž}6fFPĄpŁČ=EgN\§özėŅ•*Ńꄕšz¦ž–gķĒģ{’šgʉ ųQń«\Ҽ;ńŲ&•)GŖńž­ÉłRqųö=}/Ę?¶k|ż”­¾ üKŃō¹¾^‹y4Ż~ Ęėd”ć|«ŻUņF23^EÕĻóē‹üĢ(ēµ0|\ØŹ2œ$öÓģ7·2zo³Rņ?G­.­om ¼±ø‚ņĪUE,N$R2Hąƒź*|Zés¾Ēóv"œ©ÉӚ“–=Ó? ?ą³>Ō“‹?‚_4Ūo“éś^ Ś.Ŗ0Ԑł¹=~ņČ?ė_œ’h‹ÆƒŸ“Āļx“ųiOöf­ CŲĪ6»;®wź+)TIٟŻ ät3~X}Śö”ååĢŪ·ž$S~9mÅ’/u?…~,²Ó5{›%½Ņu ,)]źNx(ŹG>õņ§ĀļŽŸ“N¦Śƒ¾*ü›ÅÉv–w^ Ńī£6“ū׃€^ƒƒĘqZF]OäLOFPÆK.J“ß]“ŗiüĻ”ænßų'§‹+ų}?s.Æon-õ8T2mĘPŒ¹üóāÖI3żMX g™~6ĆÉӬ৺sFö}ÖŗŸžŁ_²ļĆŁcWš÷ž xĘ’]ųāF&ŚŹńŚY“ČĖ2|¾p7r:z×Å1\µŻŃŗ·f“h8ŚrłÅyõ Æ”÷\#šćŖą!,rå­Ŗ’óN×łŚ’‘å~&ńgŠ.õoģ½%ü§Sƒę·øÖķ,õdX$eQ*®pĒŌUÓG­‰Ę÷gé7ģ©~u÷Ņd\Œpr[5ś/ć½ ¦•5¢ Vˆmb?µßN6>C1Æz‡–gĢ&<•`qō­V~Ź‘ČĮņ#­ś`ēļGćKfīŅdRx×Éü3Ŗx‹ą‡ēµ³ÜhĻ®ˆ£•Có•ś+ Øś¬&ŖĒåž¶Ś„ČÓ|gį{łe¶b’"Ø ±Ń‡_’QÆ»~~Ń×7iį}7Q?ٚÜ!LcĪÆ5Χm™aŪŲżÄš„k¬ü/ń„˜iv±éŅż™÷pól#’žµüńčsÜÆ‰üM5ó«<—×9 ¹ąŅ”®ua ŃŃjzu„Ģ«0HÓ<įEyGŽõx<9įÆĢ×- †3l`óģE`£v}–ĻŹ·Žė̼Xü€Īķ³=bkGĀ~¾ń戭¼3ikū‚VK–ŪŃ3ŠS_C…Gł œÕŒńœtM¶~Éx+ĆŠhŅ“ø§/䥃•ĘŽ: ķ㉢ˆĻµĒO£Zi6ńZ@ņģ$‘ź 'ükS&r×ŗ&؊ÓŪ¤s®ńŌćzģ ¹¢FųVRęG,¶+jŗż°Xć`”‡Ź1ßėK„^ĄH!šŒt¦bušŪŻŻ+É eõĄėLÓ®.“™Y!2x NF¾«}¢ź¶&Æc¼Q˜„[޾iÖTĒ©0‚(Ž2¹Ēz OL±±±¾ŒB·ihÅ3ó{ŠU’ģū})YŚBĄń’xc@Šv÷O5ćĖm=*މ;\Ļr'ŒÄ«÷rzÖs@ŃKÄZ„­²TŒ©,£;s’x®]µŁ™üÅ$ēoLĢĮ«°Ś²‘hĪŽ;V¼šCŁĄn†×M¼äō­ć±”¢Īu¼[¦½Ø†÷LB©“¹zœzÕxž ŪA<F?tŒ`S'”‚ŹÅ,oVå†ÕnŌW &¢ˆ“‘Œž£é[FWŠøÅ£œƒM°Ō5Vi\£õäJē~4|AšĒĆ}Ųj0D-Ś>j-·ėЁZr³¢™ł7’ Ä^3×5»Ėżv}_GsŗŻ$PBAž>ÕĻėŚÕޟkš\žXóŽģ¾€T8ź[&¶½¾ÖbF„›h;sÉü+2śÓZyeˆ*ŒÄą‚=«’”5œÓÄÓA4,ø\ĄłµaxŠŃ.`v6ń½Š_•śFf‰„$¾L—l‘×ėķ^†ōÓĢfk–Ō<Šė(#aR9×üūŠmĢ‹>*šŽ•—¦ŻŲ^§d*ńœ|¬ ķĶy±µ™JˆŠ†SĶDŽĢTŁ@óGSPßÄfQå©éŠō5“!ĢØlT“iFĒ+޽TūWFH÷„eē§Ž¬'™–ą‹ČF‰¾čéī*µĀŽĖ·īē֐ŒO-ä}Å_ėŽ”±©šćan ļV£ “/2[…oSķVm‹Į½åłį`FäVrŲD¤”X§ļ7„Xšx4ųK¤LĪ£8CĖÄdWš¼²ŁæŚR8‡±µyåĒH“[¦ęfŚ0#h#V×Ć:Ö³r#K"°¶s¾öǵ})௃ŁCm¬ė0ģ<Ą³Æ½qb± *Čė„HśIÓ4›h¦¶ŠmÖ+T8)Į#Ž+b 5pöŅüŒĢA<öƚÆZģė„l68įšżŹE} kg;Yˆįkƒń’ÄxB‰Ø/g;maD.Ó?e ¼ę¢&Ķłz3ß’gÆŲö‘ż«ÓNńgÄ0’~ ™ÜĖ †ęžŒłq¶6ē³+öĻąæĀæ³­”>ż•~Ųźž)µk²AęÉ#¬óIēœtėĒzõ©R3©S±ōšV…£Y·Š>.ėśĘµāĖ*A Ÿ³ŪJOØĪG=0Mzŗčž,ńF“e&·OšÜ‹µĀøĻu÷®Śp8„.‡Ŗų[įʑ¢Ąš=ž™wazWķl”ÜēęĒSĒé[·²Ņõ/Sŗ¹’žę)|ÅFžĘ8żk¦ ōo뚌BßTŸQµ·š§’Zhä8x»gėŚ¼źmZŽKO [Ų\ł‚\¹O$ä~uŠ—c)7ŌѱńöMķ½ž™xÉ«ŖlpPŽxēÆS\εytĻwØź÷v‘Ć#īD6ć¦;śöėWܓĒüKā‰ÖĀiō]MneuC°|Š~÷Ņæ4?iŚėįoģżæZų*ų“Wˆ±·²“œ; ;#sÅvR¤D„cš[öØ’‚–üXųīé„čvšėĮŹX=¼s ģ§ x ļ_—·Z„—Ś…Ķńyd¹‘Žē•·3{äó]š…ŽyUčbÜ­v«““ļU9TĒ…dcŸjŽ0īsJ„ÄŹpbUĄüźXSŹßö– ܶj¤Ģ$˱€īT³6qœÕ’‰Į!nN8ˆœŗ"śÄB¬Į=*d“•¶/ŁĖÄż—ėAĖ±Ėma,vņ-܇lF¹yXvP;×ģ?ģ%’ųķū_ŪXųĻĒRßü$ųA)i'ˆÅ{u<ł`ćā÷Ćz±˜M©!UdœõśWšO„}Už+if‚eÉ=ETcb\BŁ\^–ą£d ±Ęk~ķÆm'Ót+ ©ėV‘&Š“(SU‡ÄCQŌdå€!3źO|ׇk¾'I7C9ŲåSӊ©G ķŠęmµ _4¼s¬6Ÿ½TSM–īżnD‰¼ŲĻÖ¦ŻĘĶ•­Ž©ö;²Ąm?0éVoōhüiĮ$قދõ­c¾­įŌš©[›IšxÜuC÷Ozņ=_Vׯļ‹A¢jŖß6ōĀŗö9«±]O§|+ŻhÖ0M”Åk ‰O˜£žzŸĒłWO+\ĀœčC}Ģä`Rg7®i—zL`Ķ6õ—ę ¤ė\±4V«$FU;‹g“Xɾ‡+/Œ4=e“·Vé|z!` Ā»m óOÕķDžlŸjb ąeqļXŹ„„ć„β8ļ­ä‰VŲµŗ‘ędńŠļWÅZJéojÖ”n°ć}Ē֚W!Ņ8ŪĻų[LU¾¾dµ)ƒjģ>)šŸŠŅÉ“Y!(ĆcÓ>½kf/fY“F°¶‘bpHʜƒ[ِĖī™I|¹ŖH™£źŹ]3d·-¾Ż²Ź1ӚӇR}] U@ĪsӌUžsāYķā’8ä·(Ū°~µĶǬ­­»Ś¼‰nv’"³”]Ąlw(­qwq¾Ü~l*•·‰t!{ yoĮ?»Wp¹śVq¦W+=oL¹·ņö\ķøē;ä~•¼ę+ø µĖCń‚)“£Ī58®Öf6ž~[z¹I/ļ4ūæ6ܼrą®s޼b‘|ēKjćP¶ĻXLŠø/LŌ¶“¶„et8ÜGQb%&QæÕf77†å—Z>:©¦Ü\_\I4Øcøs’pšķJP&2,Ż[ŗĢęXŁN{× ¬›‹›Ø­"X—Æ5”£cXČŻ¹Ņ#t “q÷H+”Żv·„(„ œō4ąµ+˜t÷Q­Ć:³<@c”>µgCńeżæ”āß ŒīĻ­¬g’o½Ķń€ŲN2rŒVV¬o'»·ņKĮČÉ= ȉĖą©m`žŻ®ēG‘Wi W®j:–žÖĶ–sBBRgņEŖź7Ńż¢Ņ٤]F&Św®g¾GsT/üE©Éįi“Ø-ą¾ódU)"ä^Ÿį^Ż3†0=ļįߍõ_\čœĀHó<}qé^ļń3āU¦©e{ā?³²pćGÜI­ģϟ/¼A‹ c¦‰$ Ł`Ü„q1xP·Õ¬ī-­žVóW*HAß?…ømų\Ńķ® —S²†–- Ę6€Eo|3¶ń‰|u­Łė·±Żé"Q5˜PĖCĘĻsĘ™2¹5=įž•į™.µÆčö²ƒ·Ės£ĒŽ•šļÄ}HŃuŸ‰kģł™.­øRƒ¢ūžŸs¹Ų™6pļńNńßĆmB-3V»Óµ…@eĮ”g{wŖ_ næ·ō£j!dHĆ@DŖqĘFOÆÖš} ®sŽ<Ņ“Ļ ¤šā&U+'!GōƲų·m~÷žńFa5Œsiq•Žp z~5qģn6‡Ć²ų¾ēQxŪE` }Õ°r?ś7ĮśÕĪžėuoj“ÜĘ؊99Yõ­c±·)õļŽuĻŻ’hŪAo`bEĖ;óŪÓjÖwÖś\·SĒŅD7Ū‚Äz fLóVńĢvŠhshi×̧÷¾Ję@NsķéZž ²ÖōOé«„ĘŖ·±ŗI'zņüĻéV£©7ÖĒ'āŁ'ā^…ā‹{ĒWv·Ń\Ī·Vė1AĪdż3_jųKK×ōxl.-#ž+…·ĄP„nĄėŸ¦kTō±NW<‡\ųŸāU51į–Õć‘Õn1ĆuOņÆ·ń%毪h¾Õ-~Ósq#F"rŽķĒjvCäģ}Żą/…Z—ö?ųH-m#TU‘²ƒpī?˜ÆŅ3PųA¦iŻM„ŻŚEh¦‹*Ģ{‚:g9¬¦#ĆüIq„\jw_ؐE„O¾4 ”ČVćóÆŹohš ~$Ō#™bkŌ™Õ[hy鶊Ē[‡1™įK:óT†Ņßnō—gŽ•čŗåČŌķ&¹*ķEöŖ竘³ÆČÖ²Cpˆ@<ćņÆR?µ½#ĀséŽ#ūš£h IĄēźh4V7|%sØ]lšįe‚Yy(͐„jųÕg¶šĪæt·‰ ŚÅ˜ćpOĢ=(e9Xāžéś’µŪ [Ćq§Ļ'’Ļå[2{׌~ żš|?ØK>°šĒoŖ[neb>b9ÅEDB­Ųōéž ųÓHŅ“ŸĖØ¢i1É$ry@ä’wpĻ?|‘ń\”j-„®ļUĮ‰¶|Ā6€ŽœV.] #Rģä>x[Ćž1ńž”¦ų²ö{ ;8ʲ!_1Hžž÷Zł×öƒų©ü8ų}¢x_W2č—?hÓ„³ū¦䶌ÖіȮżØ>ų SŃmlSÄ®$Õ|øĀ±IӒkō›ĮŃźw޾Ńō[kķ;|É–č¤œćØąU˜½ĻEŠ|a©ė o4ßہØLByIœĀĄžF+ŒŃ~ėAåž–ÓYn!š3Į³ųVŒ›Ōā¼Mäx īĶåäv–ˆĆå•Ā„ĄL×Ęß“?Åųj]'ÄZMą‚ĪīS–3†!GEķŚ°[›B'Gš›ā÷ˆ¼_¤čwŗĢŚķŌ©Sč ä÷ēƒT>$|Pų“įŸ‰:GˆtFWš¢(†ā(\’ŽN72śtżkNØŚÖŠłŸć’…µļ x—Mų€óÜkžæ"y"š3˜ĆtR»‘ŠųĻÅÖ2¾£y{ ”¶[™SEŒOŹ“¦ŅŠŹGinå]£‹…8ūøÅjŚX3(™›@#”Šźƒ3µĻ±>|LDņō bī9•Oļdn;Šū~-—v—ŠÜÅwo'Ģd7­hg8õ,“ŖČćÓė\<g㯠ź>½Š0²©xdTY@ąg¶k-H†‡åž„”źÕ/t½F-.m&0²ŗąœwÕŁčzĢÖnmŻB4oœ}½#¾Œģ}£ć[¾;|Ņüi¦$W^'Ņ•ęÆ-“.GSŽæTąƒ’·E灼Ysū'|Aæ»’„c]žDŃ&œ~īŽåG1Ʀā8¢”%kÅu:鏟Ēõ«čóŁź,·1lŸŠØÆ¦žųŗŽMūķŹNŒ|¦=Ē„s5 „ 5Ķ+>+šÖ¶VDū-Ūł„GBźQŠö †ż+ų’‚ĆžŹ¶³/ķæć[=Īā/‡~?ˆųŸIP€¤7ŽĒķĄ0sŽĆoÖ¹ž’‹^kšæčrĪ'៌|?6xŹw˜™ĖW±ķ^rßė$\Pp1ė]ōĪ ”õ",ąœ\tō«QÅęĪA~žÕ§Kā4;KméžĆµ9¦·hÖ0›qĒJF‘—F9X–B™ÆR{Õš`}­ƒ“F)›Įō%YPŹL`ķĪ9«óŪŪj“é—Ŗ—Ģ0ĮĘWüō¢ĒU9Ł/ü³ūqj~ų—ö-ńåģüBšIūW‡nšņĮ›!<ås·Óę^›s_ŅĶå¼2ŪĆŖ&>Ķ0łžī+ž²:c+œ&«ao} Ō±†p ÄŲū­ķ_žŠžŗ›AŅ>#ivöŠk:@:~¹ ¦īŃņ¾åqƒžĆŽø$µ(üĪųŪšyüįM[Ā×ä]jv–ļ}£Ŗœł°°Ż"(īpsŽŲ5ü”~Š’ ƾxēQL:č7—Lš†S˜ŸųÜÖŌ¤¶!Ó[ $nJŖĄėÅPXćÜmłˆīkŗ,å”lFöäē'„VXŽ=»šŒœÕFfp›AĻZWĢĀ•+ƒž;Šķx”· õ©ŚA+«HJČNJI”Ē|ŒX’0pÜuü*ō/0E#<Ś™½>Ǧ|"ų™­üų”įOŒ¾–A©hÓ-Ċ­µ„„:žīOŌ ’EŸŲö£šĻĒ߂> ųÕbńźZšéqĆŖl½Ż“żÖ8ūŪIärrjd“;©Ęźēß>“µŃī#šõ”2xvåMīœéü NJ{ŸóŠčuæ¬ŗ¦¹oˆī#% rėļ\bhā|óū[~Ļžż«~x׹gŠ-­ÓQ¼¶7zć&M–”/ ØqC uVaŽæĶ[ćOĆ|ų›āMĘ6č­–£ueuk:m’ •ČdaӁA®pQ<×YÓ,ꎦęÖBģ@2.Īśę·| ŅGؤ؎ņFŁČōö¬ē¹ Yź}ÓąŸi“ǤÜ%ÄŒ‘nŒ…;Yŗ}īŸ…yÅ…ńõī³qZ_² Ė* Žī^õ¬Ó+•'Āøū?˜×7P\:7˵J‚;śWč_ĄĶj-_A²³šFmOO‰#m­ø•Éå»ē‘]Ōėßr'é˜#ži×ĖVfn9ō®Ę (b $Œ†k¢2¹Ļ(Ųęx;QÕä°»}NIo$leŠt'źkģéžxČhZŽ£įżZĪŻ§ÓŽ)ž4lrS ˆ WēŲģRu]Õ²| TQŹų‡öŽo¾Ņõ=cJķŪȖri—mšEč[spŲÉü«°ų_ń;Fų‹§j>9šWƒē‚śÄ±¼‰å㔯R1ž™Æ>5Ū>¶%Ī?~Ī~-ų˜Ž>×|qįķZÖ{§ø—EŽbø“sˇŌōõƎ<ń§āĄOą®»„é[ ­ļĮDZ<0¢rOs¾ŅČżš&µįĻiśo‰l5 <ʜK“ē#’=0q_ ~Ó¼OąmE|G¤[Sį~©1š ‹>$Ó®d†ī9ę¹›Šw:a&zÆĆßŪoǾų=}š·]ņüU£ĀźRw„Ņ ķ’pHÅ~ŗ~Ģ_ōß~Ļś_Y“ģ–·2A$sœÉ`7Ō÷Æ>Q‰£Ųųėö¦š_ˆ~!|PšĒĒļźP^kzpū ֑'x1÷£=+ķo€æµŒæ f-CąōŸ­Ē‹/ęøig»Ię ąä€OéZań„>fÆ’ ןaV“’±ĆųÖ]źDžŌ-ļl®ģ’y×M¬ż3ėĪyōÅu’~(jß n¼oąæYŁų“᾿ ‚āŹQóE#.ÖŚza‡Q^]W‹TŁĪŁųŸ[šĪ›¤ųZ-V[ļ Ł],ķēłŗē„ ×ćńwķEškJŗ¹ųJķSM»C9·U’k¾G ö®E OģĆūB^ æ]|;ńF Ä25»4Ś1cˆĪ’^½sĒž*–Ż£ŅuŪ¶Ņ­ĶĮłœażĀŗiŠ4ē.ųwTųką}cM7ŗ„ާ¢Ģ7K2æĪ€÷=G„vZķąĶ.åķžGŖk—°ä„Ģ?)ŒŸį<ćņ®øŅ0”Ķń·³ĆŖy¾\-ic+ó×ük8~Š~Óe“†ć\šŽŪķSķ…Ž9źjÕ#'3¬Šž$XųĘ\C”Ųjžµø $•1öØĻ\žEx/Ę»MDų‹}6…owįż2šyöžL…Ō^µ”é#¢”ś3—ÓüyńÜĆii®ŁjČ0†HČu>äg?ÆlŅ>8|Cm>ŚĻÅ:.‹Ŗ¤r“Ū JŽ£ńė\3§ŲźQģ}E¤ü^šeīvŗ†®šźkm¶äĢ ·€=¾µłĆńĻĮQų«Ćŗ†²ˆ–:Ž›x5:pøÉVū<~µ’¦T®z÷ĆÜ|S ėW“[Isnb¶›sżŁķĆwķÖ¾ÄńŸżŸjžÖō›O;p” ķqƒÜt«I˜Ź§CiPź:Y²G[)¢}É&9#Š’žõĖxŸKÕ5Y¼7kÅ Ł_8& !$Ŗw®cų«Ā‹°¹2”ŗ* W1’®¬:}A®›Ćž*Õ|g¦j: FÖļbE‚{‹ƒ¾EĄź÷āŖ4٤qą¼Sš'PŃü5q®č³ /­ŪĶ0«ȹÉ$×øüŠo¾"µŻ„ŚśŚMk„żŖĶä9óå˜$ńÅuŅ£ØŽ šß‰^ ’Oü3šĪÆpŃhŚ–æm§]˶ēƹ?•~š~ܟ|£~É?>Üi:UÖŖÖč²Ą–7Ų¤>īÄņ:ōÆcJĒE:ķŹ]Z?œ’:o‹žų;Qšö£®ÜK ŠPmԐŠėł×Š’ō)ļ/›Q½;FS#ƽzTÕō?£²Œ¢4#u¹ą_¼h·ZćÅ$č!‡÷i·ŪŠVgĮŸŁ3ö„ż¤`ń>æš÷ĀĮįķ52.õmšGvżqĒ'€®˜AŸ”a1t°Ō9¦ģ‘‰ūH~Ēæ¾ü#²ųŁ3čZ–™„ĶÕģ-$i%“˜)“pąą‘Ē”«_³wĘėĶfk5M6ī ·å³ę&0Ų÷®Ŗq³Ōõ°ł•:«Ż;ü]Ót/³–y,ą‘ƒ¬ ¹-Üż+÷Å^Óµ_xW\°Ky4ŪŪu•^3‘Ÿ­zųfŗšŗŗžo¦hZ†›x_Nżé`Uć#"D#•Ē~+šöƒšõ憞-|XšU’i÷1ŻiCM¼¹ÉŚ:@üėz­rÜJņvGŃ’°÷ķ”'Į}}¼ ā9Ž_]ō‘žil&<Až•śo/Ž4ūƈ6‹<Ś~æ ŻĄnmęæw"°8éŠóÓŲÖGE*õĪsĘ’>xņÓÄ>;Ólg³ko¶ÄvĖfųŹø#®6×ä„>æ°µ¹Š ‹Ę“žKhnŹf[ Äzqćpé+£čšU&Œ ų–ŹāĻNfŽ·ĪŅēļŚ¢Óļµ$­šßyž"Jš*ĀĢś|5fÖ§1®ŪK6¢’Å#żąH>µŠ[]ĶoqI/8ö¬‘ŁĪĖGQŒBav@ʦ³»Lcē©ķ@9t+x‚HÄI­ynģ“G„ zAĮż+Ģü āČLzŹ¦Qå‰nT‚3ŸÖŗ`ŸÅÕ³±ś‹ń«Į’jÓ~kÖwVŗFŖi>I—T—gOŌ~uł{ą½KT²¾¹“ŗŗ¼¹¹†ņHŽVlƐ=Ēē]t‘įāźõ?W?foŲŚż·FÕ)!¼^¤üŃ7f~‘x_Ź]2ŽŲ”–2¤rÆ[ +›qŸÅĢŗŲ—\Š ¾Hg“šK-N[ĶĆDąäGҾōųūiŚ^hßš§i>ÓSÓ.£:rźrĒęCu ž]Źž ƒ×Ó=xėĘ¢?žĀzsW‘ļ? æj/ŚGöwŗųKĘ·š† }>ķLš:(Ę œķćøé_¶ß³ÆüÆį?Åū­#ĀŽ=³›įwŽ®‚¤ItI³»s’<å?w<`7ÆZō)V}OęO|£™Š–o•F؈«Ź+ķ„éö—NėNĒ«’Į@|§|@żž/Ų\Ä.žĶ§®©j@ ±0`ĆŌ`·ē_Éw†ā‚]&óĀŗ“ ^ŻvőĊy~ō­*=Iś!ÕēŹqxFµ…E/ü )ķ§ėŸģūkZ·ƒ£ż’~-ų«ž“M懵•l3[³ōw=¹nĀæb¾ü1ńĆ_ź+ić·ńGƒoōՕ ˜eÕĮłdWŒ}ļ^ęŗi;Ÿ‹ż!x2Y6uV¬#ū¬MꟛwšõRÖŚŚ2‰õõ5ųU’ų3į’ŁŪć—ĆŪ[Ćßmńu¾™«v4«Łµ»a”f?ĀžœŽæZņq1Ōž“ś1qĘpāĀKćĆÉĒ}āżčæ-ÜRžéķ¾-ŽõtķOįßÄKt×Ābp«ƒÖŗŪo_ź+yj$‰ĀD¢<.1ŠŅž‡ĢcfłĻ¤g?‹Ņ|?ń’‡uy%óģ]Ö ÅĻŹØO$ƒĒsł×ļ5¾§gā½+Ķź-[Go…Ą³Ž†»©½{¦|õ­jI„k·w¶Ķ§Ü3ŖÜĒ„kÅsöƒ7š·CZa›R'6öŁąDRAā¾FųÓ©ÅįŸ†ß~Ņ<‹†Ó##łĪ@5ĶVLū»V‘ųÅš’ęŁ4жŅ#ĄŲ‘r23ž˜ų'9üź]MŹxtä¹ž0”äžµóļķįÆėž’ĒĆŚT:ƒJ¤’’a÷ńĮ…uaįvŒńM.™WqļŽ’ŚqhĘ PJøąš£‰ītn¢„…«yhŪ§<(„:åTw9Ė·vזVjb/(=æŗ+’¾–y|ĄĄÅlg)"½pfŽPĖėči‚+Gs:™~ī0}k/fa'”…vāO.H@Qߟ%āé/ēNå-²}>µŖ0k”ėžÖbū4%äo(®Cvę„Ō¦†VZ¾ā'#Šv1<ēY»¹øŸhqŒó^wŖÅro–ęl@?7ćHG¢č¾¬cžśIRå\2 ŲµØÜZµ«[ŹĒ×¾iĢéó¤LŽ\›”psĶvmām-ląŅš [ĢĖÜoČa鶋Īéļż©xæh–ßĘ/¼žĶ ļĘŖH^xØp"}O Ł}¶/7h—!½gųžÖ’N°˜G#L0OĖŚØÅČó+ (ÜY4Ķ ‰±–ŻÖµ4¤ŗdX„ÕN~eƚWÓĮi˜Ś)2BœGJĄ¹³xÆć¹x”ąc×Ö¶Hv:X¬Ģøø·Sę.H*z}kįæŪų‡GŃį{h.“xē10ęŸsČ­\ģ“7Œz#ą(ü44k>ŠCqmœ”U!p;Ws.Œ­å«ĘYBē'šē”Ē(³2;CiuƒĢŽ`)ķF§ćR÷P}5ķ `gtxW÷ŻÜÖJ]9•ą–āć"F\d÷ū£Ö²nīć˜ČZF€})™šM“ł’cņÆ źkVŚ}(ßĆ \¼!xäšOÓ½+ź—ŃČä p< ęwšĢfxė÷«9” ¼+FFżēMøę› cµ™Ōą:V`j¶ŲĄVćœµœŃFņAåó錱p`DÅ9Ėe½*“Gæ*AĻÖ¤ömWHØĶŗ–ŽM…Ł}:ÓL ‰•Į*³dŠź%EŽÅsŌ÷¤—Wb?•S'ĪÉ⟳¤‘}Ž;§÷?wéRą4Žvī-oÄ~m½Ž™©Č[Z‹*ŸL×øų#į]ü²i÷:•µåŒ $||W*²‚²;)@ś{Ć^ ŅmZEµÉe-CJõķ.ŹIlćŠ;ܓóz„|®#Ū²=ZpīMsge”E<°C”ģr’.2Hļ^i«xāÓA¶šöņKvP¤łŠĆ#ڱ„MÉܹ;ž~Ņæ¶ŒęšĒĮ :xI[ɽÖļr–Ö…ø.¬~ń?(ÉÆÜ€šOļŁö;›Fń7Ä;™><|{XR0Ó§Ś#·—=b‹ #''ŽÕėR„c Ō¶‡éŻæ‡¼KāĶę’āréŚĆ颒G±ŽQ†"0ANĒ§įŽø«‹Ż:-?Įß|3u£ZJ›"Õ# Ŗq–|óėś×}83žr=wį÷Į{ļ ^K'ŒuķGž#— ŽhH$d;×®ßiI¤@·Sųt»[dfūL¤ŸN ņ¼aÜÄѳų‡7‰ō Oģóovˆ„aø ÷@ĻۊŒk6ŚĀŚŅL:œHVr$ܓü@v­v-Į7~“µƒUy师Guk4x1± „uƾšŗŁĆ¢ésÜhj§3)%bpzśÖńDņ÷8msǚ?†5 &K†:€l'!M|ėńKćļ…|9 š’¾#ŲxsJLń#²šrGšń]T©”~~ÕæšTßųŠĒZšģż%¶Ÿ¢ŹM¼ŗŠVŽIœ:žęæ « ŽŚ>@&%<悱­W•TØw?Ø_ŁWž ;ū+~Ć:u¾½ń>4ųļńšsöˆŽś˜[I·ęX¢ä"ē¾ éŅæ@õYųĻįÖ­eā=V_ƒZDm¼©å吭ķŠuéšóŖTźĪčÓīxę‡āßźśt:OĆĶĆS„~ģė‹)IzcŠō®LŃžų.©ćĖ÷ńŒ®„ņÖ‰CDw^Ÿ€¬¹ĪˆÄę¼auØiķo¶§MŠē_:ѾUSč°Æ–Ę®ßõ-CUšźÜŽCu99%U›‚{…ÖU$tS<ćć…o|yįÖhwŽjēī!>‡<Ī©|#·ń-Ž„–>"²Kµs+±QĒ?•yéĖŚ©#uSݱź×>.³‚‹]/Jūmįä©ĆG÷sұ—[ŗ)ŗĀŹb “n§;Iģ1Ö»éźr½Ķ›M}f×ūJeEŃęi¤*:}ė€ų™ūAü9ųg§Üi^ HuĶ}T)iö°\šXZź%¾<ųæāŸj÷’źZåŌØŃģ†ß*Sļ^Q¢xoUńNÆ’Õ¤*Ćc8ēұKhj„d}OįOŚ=”örų„MÄM2ČŃFFTҾʱš†#X|?df?—`kŸ™T©sŅ|/e•y:ęŸ3#!)‘ž@ćšō-)巗Č1Ļm# p޶L攟SgV°øÓe‚D–ŽUpUŲ×§ü9ŽĶę–)’&aøłœkr æ]éĖi”‚ŪņŒg޼vŹÖ jSwfŠNzåGQ@\óOˆQéŠĪZŃQ®b9ŚÕĘĀM©\Ū„“j#ČMGrœ ;G#M,i. żįĘO„|­ńā„4żRęĖZÖįŅį^$mąķ?:#Lą¼ńCĀ^!×äŠ4IęDm‹3gkŸ­{“mJĀ ŚjŃmø$‡ęŒƒŌū\Ö ^Õ¬“ō–-rćŹø@B¾A ĆŌ×Sk­5Ļ,K ćåqÖ®31”z”µ·•·‚ņĪį!™]—†ŗ» ”–Å­1ol Ą P? |솬kŁjĒO…ķH/hXøūøō?CØjĶ ’ŻŽ÷»QĪÄyĻŒÆµ }>źķüł-c]Ćjü«ĒtżWūNč• KÓ“o„¾ńŪĶ^·å€”ōQƒŌżk Šü'cį¹Ņ =×åķ;k)Å)-ŽżoÄ6’A2‰†9ƽqŅŚČ&²°<ż}Ŗ£™ęŽ>ųaā/[Ei£Ź4©Œ·ØČ8õÆ7‚ßĞh“›·ŽĖVP~xĪCüCėé[%a³Ņ¼«ų¦ –mNńļ-˜ą ¼©=OҾ‚Ņ4ŻGV¹ŒXÉr)ÜŏG­Rg,Ń·āæ j-„Ś]E4L„'óćń¬];GMĪMI£. ąœšĒŚ©§ŖŚŽ¤ūķW`$+ƹ»Ÿ ŲĻ„IxšŒIpyX±ĻųPiMu83£Ž˜…Ó !$ēpź=+Ī|IšŌj7öZ“Ļ1I½<µĮĄ>¾œV-ės§‘õ OŸaiW!ĀŽ¤œ×oo}qąČg›Ėœü ē½y¦§ē3Īցn–2WpĶdŃ&v‹ØŪĮŸ·Bģ°@ķō®Ž{-:õd’XŒżž”X\Ēqg¬ågpÜćź>•·m¤iŃŲhÄ m„:⣟QœüVowØ­Óvzī%šbC£MØFÖGR ›-ų Šdx¼~b²ö=*Õõōw/öwŒīŽ‹ˆžct_ źž,ńčšĻöµ­®”u?ĶŗA’}ˆžuķ:ßĆ%šo¦ź »PKGĪį?Пνä¬B²<ūÄvz”Ō®!’4„«²©Ė&yĒ=wī„ńo‡58Ē o@Xgr‚FS&REk_Ųhߌ:ļj]³4lŸ+}x®ŸO»Öbt³‚ĢÜŪĖ6Ńņ’œPdäŗ–|I®źŗMØžĻ·_µnłŃĒQĶsOķ­ų}7VŌ“‰<ÖøUr§!F{zŌH6='ǟtƋVŚõ¾»©i÷n“…ŠFÄūf±>"x‹Oš×Įķ#ĮŠ_ČÕł•āŸj—_> ޵ŒérܳYĘNX õ…fޤć];[š^öż4Dŗ²Éņ#Ļ$śuØ4’Šž(šī™nš6Z¤jŠŻĖ8võ¢#Rčtß~j’·†›öˆļ”B¬7|ŹG~>µļz'ƒ<)įļ k³¦Įs|‘VW%аōĻćžE1“s¹ŅµTY¤æŠĮGł™Ϧ+wÄŗ%Ÿ‰¼-«iĖ}²ūzYļŽwsłRnĘsNĒ|)oxāw…¼¦Ų_Gc5ן%Öp‘·©>ęæQo~"xcሸ]Jī .˜,ł\ó×ņ¬jĖEbówŒ?n÷ŠdÓ¼=–Ÿ/†u)²× Ć1}sŠZć¾>x³Ą:‚ÄZ5Ī“ró8’'ŽCcųˆćƵgŹŽ¦ÉŲė~jzWÄÆ…³ųóUŽĖJŽk˜6Ä `ޤōƖž$„Önģ¼Aa©-Ż„4RyöĮü?C[r4Ķ£PƒOų¹ć2lō«±qäįbW㯫~üUń=­ąžiŒW»N1ł‹·QøœĻ}¶ų”y£³¼ÓZ4Iå° :×5ķZgĒĒń/ˆįŠ|- /ŁŃ1u°ļņĪ?Z‰Ć£2*|GŠ<-ń*ŚM'^Ö³HŖ Ī0Æ#?Jü‰ųĖ%×ü&Wŗ·¹¹³“ Ė.~P§ ’ėW/±¶Ęš›Ųś#öpšÅŸ‰ąm:ŽD‚ęĆĖ'-‚܁Ö¾«ńÆģźŚ=üŽ"Óµ}:ę ™Ō,Ü Ü/åžEccNq¾ š&›ńįĪ­„jövSŚYıƤЮqłz×äOĘ’…ÖžńDžŃÆŸWø ęÄb>fь•8śŌĮź+Ÿ;gŚĶgs¹X®įČeĘ ņ1ėY׌fµ¢YŁŽßé—ie3G1>µ× qMrŠŻ<¢y"pßysҾ±ųAńęóĆz3x{TH.-O3Īc½‘9éżß„u3īP“Õ,mē“c-“Ŗ[#œ’ZźI’Ś$hwķŚ{ŌŌ‰‘ņķšāśā×Kń>žĖw*¼†ź(W20ĮĆ߅|†¶“YmóŒŽnyō‰½;ŸQžĢæģ|5āóįė©6Łź“’a€ĘõéZ-ŌSßÕMuak)ĮMlÕžó–¬ ĻmĀ1ł>“äŁl1'ė]G   Ą w2Ģ<²}sN’ Ķ»bģčĢ{}(ˆÄā$LĘ8’ėӛĖfNX ćé@Ńf9CļE øū¢®Ć>Ü„H<ńAÓč_٧ćwŠ’eŚ#įoķ1ąĻ4_hWČŚ„ŗÜ˜Eķ‡IP‘ź¤Š’L’¼ńļįw‚>)xJõuxŖĘRŅe`D2ŗhŪ€rzv9eSTvEhz«„ĀØŃ#Ɵ$Q^1ń+¶zöŸ4·¤&ögxš§Ż×Ž¼łīi©łĮ¬ųE<+©ė>×näOh1ż«D½F.ķ[„‡=ųõÆĀ’ų(ßģƤųA°ńw†"–hn•ļm¹Ē—r¹Ź#'ņ51va%©üčĒ©mö» fٔԠ‘¢˜*ńø’U1£,ø+·¢½3’Ŗ±REx“ūär;UVW( 8ÜOn¶9„+“dMт ÷4²H"`Š  ł˜€–]®Ä©éQF“4ŹŽŹBē'c@oĻŽźyć­L¬]øčqÅE9]–¬ŪqžŚxc’ŃĮFå×ļOüÓöԃą—Ä;O€Ž.Ōu%šqiVÉ%mŃKœI°'pŅ“Ųō)3ūiųg{$Ś>„ A©}ŗ+ ¾Ū£Ķø3Kf’0\ō8tō5ķÉŖĶ©išOhƒ“9C\•V†ęX“Aµ–`/`OnHĪFs_Źü5ū Į¤ßč¶WĆķņēJÕę‹Ońm¤K˜mļB‚ķ‡šļU(ǁ¹GvēŒ‡3łqšäBęYb»ŠųŁ"p ]‰®¼'®[]ŲĄˆ²“ŽƒŪõ¬ęŒ™õGĮ =oĘž"²šå„ :Üļ›p¼źŁģz±āĻĖį/ˆ>+ųoć›Ė ³>VįYx`H㨮[j4ģy»įØ®!ŽņŃ^2Ažjó’x‡Tų}­C«ZĢėb²ęā%3ÆOŠs]4ĮŸ©ŃųĻKÕH½ŅaH-ZŽ/˜dīły'ß9…zNŽ"¾bŅ0ū¼ąō®śFÜęu{{ҊĶ&ӌēŠč“™“m:(¬.$O“2śó“[rŗ¬anœ¢…^ONE[Ó!€3¶ōĻÆ9Ŗ`nŬ«IĀĘé»8ü+gS‘§µeJ>oz8m[R:|[m<£Nx®3MŌõs4Oq+Ä_+žĆŅ®#Lī“õšqr]8IūµŽ.˜ļnDk¼Jā8æŪ\¬m%XöœW™¦œė8Ž2Ź™9 w¤Wi~4­ŖX+&8®āKłµČāŚc>eĻŽ eĒ,3Ķs‚xäĪHūĆ5ė^,¹]JĘ8ō÷ß;ŽØqƒļHvg‹ZÅāk6^£KÜn8Ö“tõ½¹¢x‰oj®Vj¼Ź×óζ÷!co5hĻ€šó˜ķ¦·Ź@uÅ=PĖgm£Ēc2yA¹r0ŗ…Ń”}6HĆ+`äq¶œdŪ6‚ŠĄÖ¼?qŖ Y\’Ą^½k؂Åb±Dp’JS 1ķÖ®ę°9Ż6Ņ4¼ łĖ“ru76ŸŁģ²FT;۟ƦR±£:½- ž?ß,l gé\EÉŅΧsūď Ę+!˜ž"’ŖŪ 6Y˜”\œē +vŽūP’&·•‹FĆ“C4¦Škmó¶åöēŅŗ+ÅĻ”$0Ų^l+'Ī™ĒœŃÓ£ øńTz‚`‡äž¢øNŅŁ“ «+rp+2”R9O²v`ĶøœškPF’g>JyÓʦ@¾øž•ƒ:)JĒę'‰ »ńgŽų#«Ükš7šÆ‡z#õ^łÖ¾°š/ĘO ų÷Ć6šEég°i³-“˜-Øe=ų®IUg\Yé7?³·ĀjƒQšēƒōöcóždo¾§©eõÆ]Ņ>ü<Ó~ų‹J°Öõo j¶r‹ƒl.·Ō£žīўFOæįČä©Y£xDó]CĒš‰%²YŽ-ģ•Ā·!±Ų÷5ÉjumCW—Q—C³ƒ `Ę’/°y®W_£:ćI½…š§Ęū§ŌaÖtmA#ßū²½Wž£ÆÜ謵”ØYf°æ³›}晅óĘ3Œ’œQ‰„°ģ÷ļˆ^(š&§ąß ų·Āś„Äģ#½±˜Š8,§ŗäšć4ѧxÆD—GÕŁ…³¹!£<ØĮĒō­éœÓ‹GÄśļĀķ#ą?Ę}ā.»sw& ­/ä|Å2vų~5÷~„/ĮŸŚL²×“MB’&’,:ÄÄs‘Ö»éÄå©;6xƒöf²šī¤e]V{ͱڮՓŲć­sځ<- Ö ·š-¤—nžb3 į‰ä✢‘“®ĻEŅ<7ak+“q¬ ’tt®‡Ę’|ńAŅgæy¬üI„+½³ÆŻ¹üé’Ö®*¦Ōė$Ü|8ø‚[Ūė ®-.ĖÜČ2 Ž8Ēҧšü'¼ŗ‡I¹Ņü›¤`Ļ,`ģ+ž ‘׌ø§K±ßKcŽōß ŲnŠāH·Ģ„˜dƒ\ķ%yg«ü:›ĀvĀßJ¾*&‚xN×vįæĻJŹ0īv*©Ÿ|ń/‰|5āmV ™ü÷œ”i Ų+ė]_āļĒ/ė-ēˆ!ŁA²š&ÓåѽłĪkXÓ3Ø×sź ų¶ę(­"ŗigŽL˜dŠō„ÕlŽćö…ßżĀ9Ʊ8jNÅS%ķ³Y]Cö…vĄĻl×i”hŗ'…äŠ-.Å-šly„(;›ŌÖŹŽhÖw*üLšā–JŁŹ”˜Ž= |¹-ʧgw‡†uYl“¶cer­<ć[ҧ®‡us¾Ó~Ū‹ ųŹņķŗ‹SÓÆL…dµ•ńówäõž•”ūFžŃž,ńäV~Õg‚äŪ[ f‘F7Øī}ėŲĆÓ±ö\/”żg ­¹ńī…£&½ØĘ’(xU“Ž1^é©"hśeĄÓ-Cø„„ŽIĒjōØRŠž…uķż‹?ą›^4ųĖÆ’ĀĻųͧ[i¾†čŻĒŽ|™ČP;ž°Æsż ’l}SįĶē‹>ü Ņt­Nˆ6žÓĒ"¬ÉާłWliY\ńŸ\Å<,uPI³Äægƌ^Õr@qŸfk^'ųK4ļŌ­īgDW(dkt&@™Vēd0iÓĄŹnŃGÄTīŸa؛y!žt¾m»…uE[C展•ģ~įüUŅ®o?c[i,T_É¢ĖÜeNć`żÜ×ćv­uöÅuļök” QOŹHē'ߎŗ)½uY5£ģĻ襞šˆ~7‡|!āüOšėTÓ^ŅÖføūNŪy#)€ķÉĄnČļ_ÅĒÆx«ą—ÅOxÅi6ā’źŅYȹŲ%²Żŗ)‡b¬…H"г²ŗ?ś*c'‡ĻóÆ­Q®f¼į'ųČčÆō+xoCų‡¤¹qxų0ȧ9ĻæZżż—?ą„ž:ųŃ~%xV_Š~tX¢ŗµ˜%ķŖÆ@7pWŌ{ (ā,ŃżM⧆xn&ʧ€©hŌZĀVÖ/üšŃżū¤~¾|2’‚”žĖ_ŪN¶ŗńuρ5iĄĢĢ^JĒ!ž&H'ōÆUż®.4O~ʟĪéņčŲŪJ²£ĖŒ£«.FQ¶æį^Œ+&šY·…×fŌ>µ %8µ%¬t’ü»ŹgģÓƌž&Śč—Ž:“š?ˆŸO+a=ä Ū]]”’S#qŒõõąõ|™qĀ.AĮčqķ\µØč~Gą‡į²ž/Ƅ ķ†Å?wei^ń^[Ź -ļž‰«Ėń#įםzŃ\j:pļ|ǃ·w­3ĆCĮšē‡µß†ß“ųu__ĘUć‘h&ĘD=A¢¼Ś”ģīvb`ķ(£ņ_ÅZ·Ćæk fœšdS²éww1[øIł@cĮ ęu-SZš¦£,-b‹:œ¦ć‘"Ćҹ„”ņųØJꟆü]9ŌX x>mĶ5śõū.~Š×¾]:-ZįbŅÕBžń¾Sž Šč§#Ķö¦•„}ā 2ćT{s i0įJ®×Ģāk¶ĻB#oLÓng&‚ŁpĪrGµhk~7šē£‚}_R†Ž)IMØ7Ū°"¹)RęgJVŠńk┿uįiŚß‹üA4žTQiöĻ#<=»Wé‡ģ§’›¾ŌęŃž(žÖĮÓō“1ŽŚųNŁöČī@Ÿž}Ō{äŠõčŃIX¤ĻŪųBūĆžø¼¦|.šE›żŸ÷6Ā1)<*äœu­ū|7š,×ĆŽ>2ųtJėbŲœä`cæõ®źtŽ9O”Ńéæ ~#xŗļž/ŒŃ\čóøx4Øօ:Äsųcõ Ž ±‡ĆśvŸ£¬ZE¤0ĈМs]™ĒxƒZ»Ņ¢Ób[ ÆnA˜uŒsÉöé\oˆe„ÓēŌõŽibÄģ?xOaZņ’äIcØŁIf4ł,m4§|.ŅŁōüĶmiš]ī› j¶ĻysĮ[ÓõØP(Ēń‰ōū WkóĪ60kęß|bÕSķš_ö‹xwE O4Ū`@É#ßµtӀ?µüįē5ǵųK}'Œ¼X®ńĢ‘0I=8ÆĀ“?޾"źZާćnK¤•ŁžÉā4ė^…*dNV>cÖ x]ų‹ć$u°‹|6ˆN7M'D2•·;ØĒ¹ż~ĘšCoxOŅ~(žŽ^+Óu „e¼ƒĀńŹ|żŁ@’[Žõū\<įŪ}ėįæĄķŪį…--Ä6—æd,ŠL`cŽß™ēU—3»=G”å֟,|6ĘĒ@ŠdńļÄėPY"pā0q‚AČ œ}*­ē‡tX_ų›āēˆ&±’5óL „ž öćņśV‰¢‡rŸ…uØż’Ų>¹?Z‰ ;ųįš€¶Ōa™5}MFń+¾µåž ž÷ZŗøÕnģąÓšvó<øĘŠұqī;˜Z6©ź&+ 9Ņ1÷ē ĄĻcĘ:ųaš~Łn|AØZkZäq“‚2źQ²¶•oXLüąų—ūNk~5øæƒNŌgÓōĮü«FĘ’m½…xŲ&¶ąyŽŒņ9$³7_ÄńNR±šCŁōOš¾µ£K­Ų·‰y’@ģōÆOżŸ¾’iŽkPkZ’Yk÷ «”dŁŽ ø®I»‹Sģ[_„ö·f(®nŠ>I€Ćߌ½ŅĘ]lÓMÓćŠxŌ)ĮČļŠØÄ†^Ō.o5«ˆäŗh\ Ę=}Ŗ¶ø×VZ%Ķõ›¢Ļ –‡Ē„kČbن/Ƶ‹k;‹†i(Ō®6Jō½>ä£ņŁ”@­ErmRźĪę ׎¦>ąžkÉī|Ae§ŖŪé0Kk$nHdlJŃD—×ÖME^öi‘ŚNHĒ$׋jź]ĘśZŹĢ­œ”åjc—©‡ćgÅ-įėė«K{ūŻV8]¼˜Ó/1 ÆĘ3āUŒ¾%]iž>ÓßO½Šėž<§Œ‚ķŸā'«`b­S:bśhųzĖM²ófŠlą·FĖ*Ŗ=­wŚī½­é¾]gP[Ÿ²E*­×ŠĶĄ·įßÄ Æ^ß[j©e žDł_>•ō=¤sŪĮŁÉĮ9_cP£ŠĀ¢¶‡¤’ĀM©ėvZ}ž§r'ū:yq!Ą`iŠi—X„‰¹Lō¦‘…ś™¦ų*ęśĢŻł‘&Āy'é^aćkßI$S[’`cŅ1øyqńői—ŚMŽ‘§Ļ£F³Ķ†ŽF0q_-Ł^k¾–āMQEõŪĪŅȑt<ĻįUģĶc{ׄ<_«jF8¼¶²“š-Ė–åŠöÆn‚Żā¶ŽākŊVMČĒųń’×”£Š¦Ń˜š”–SÄ»{µu©ybö6‘‹DŠU<™Īź [7ōŻzĪĮ#Y\Hœća«ē«źzŁæ[eŽŲÉĘÜ|¢«•i©¹£źV–Į#ĘIĄ#Šōm#U™d‚Fxs· VŠ$”/¼ey;Él·?7=śUXo¼Q˜ŅIœŗqXÜģ7īÓę1¹8N0?ĘŗH,/¬4`±És>ģć{ŻZsŒ7TÖ`{”ø"ŲĀŽĀ®Ü\³ylƽĻoO­PęĻĮ¬< ń#Nų‰ØĒ<‹‘ķp œ ķÆ·¾5xŪĄ_ļ|7/…g5h¶ČżÉ\mzś ś)#Ģč×ēĪ@#ž”§kPŪL^Ń2±¹PuaĒ÷gƒu/ |AŃm¦i൚Ņ×lČŹÖQĒOSĢŠĶ9‘ć’<{gdÖS-“²Čæh…£ĘJž™Å|ēąŁ`Š|G–Ʀ\ŻX4‡‚ųÜO'>˜ØŒ®>sļ_„ņų\éćI՗eŠFŽHS€¹ėĻ\ń_/ųĆĮļąj×vzµĪ”§Ż°¹&9eϧ&­Źgc¦k^!×¼5Øų~ć]‡ģÄŠŽFڇއ0|Lń‘ńKĄ6zĪ•.›„Y•{Yš3‹¤n»I3XĄ©ńĒāmē‹<] ×;ŚF‘˜ŚŚ2Qx饹ūÖʍįō×4t×'ŸL‹n’‹ōŽ™^ĢÖšwƏ{ūCVūUõŅó›øõ+ė/ų¶ęĘéʝmup°”ĘÕ?2ć? %Ó9’üQų3ńߥś-„Ŗhž,³æ(b›™aPNI÷ČćŚ½ŸįīįMĒĆŗ„r\Ū,W%ų+ĄČ’ėŠL£c×¼kń'DöšØA¬HĄK,ń¶zŽӟņ+ɼ įh¤pKØĄ?OJŹQ%Äł+ā>œdÖļofˆŖ“æ0Eō”ż;WŌuƅ%M–Ѱ/!†*£Ø¹īw’ ž(ß|?ų{↗°¶J|¬¹R¹9Čģ{Ö,²\ŽZƤ[ÜŻZĤ1ušR=kB\5=§Ā^ qb/ŌܙD±åå›ŌŒńھ‰×¢_éÖZ•в¾ŠYxV'8üčl†ŠŗWĘmQӚėT[˜®”&CĖč?Ļ„yĻ‚~(x»Į_„¾Ö£Ó<3®9ó·1ūątœUGpGč½—‰cÖ“WyīD—c…ķ»ß5ńĘ ‰ügŖ,~“ˆjź~Ė#‘¼u÷ķRŃpgŅ’³WĆ?x3GŸYńšm§GTrŠp[y¾½kėOxžš&­ā84KR¾²…å›Čłņ£øP3YM~ų×yćżQ¼=į]M­£æf·ø ę6„ēaõ5Ā]~Ģ’<ń:Ūž ›­j;×i£ŽZœĻ~EG³ź;žeńsöm?{[‡eRŒ¹ œäwÆŹļˆ>£į{UÓµŠ(–å¾Īws2Zå4]ŽĪ]Iµ[KĶ2a ķ» Uż9č}~ŽźÓ]|nųUaŖEo>#ŃŌ%Ź™Cy‰· sėÅWCh¾§Ü?šEŸŚ’o€ß“’ĄoėwgįĒ‹`¶[‰6¤7=Lœ⿯=NŃō}UၙāČx_®ō<«~X¬Ŗ.§U§> ųšgi÷,ŪĪčč+мmÆ_h^MŽn³ŻÄ„Ń[īÉź¦¹äģ ÅWüö}’„_ö›Ō~2i¾šĒ4ė{ęŗĘ ¹»DĊłD˜Ū‘Ōõļ_ε¤HĶ=Ü–Ūw$w>’•Um §ē"\®ķčz=ź ŁĘļŚŗN9ıK7™īįxĄźj †Ef…&“hśP`ṴIø’Z±ö†wv1mĶ4-ö½_Į«ˆĢ €§É·vGz ©“K*ßŪ<m…”©ē€ōÆź»ž Čż·ē°æńwģńÄH-vjx Wåy V<‚īĒ”“ŲRk”ŁŸ×š9q{#0`LS/÷\k"ņÖ ķnté•ŅpG#īžĘ¼ź‘5GÄ_~jŗĀĖāĶ OZö‰ˆŃž{›n’\ }0=ėąÆ|?Ņ-|&šēĒ…>=ųGć{Q?…µż6K' öīĆå‘2Ģ­µĮõZį”lCžnŸ¶wģķāŸŁkćߌü¬ˆÖņĻS—Nž=†&™f9ĀrHŹø#ƒššK««]rŅĆ2¤D|³‘דĶc5”.nż–~.^xāŻŸŸmoqqm Ķ Ņ +#6żz~Uė1š„׌ž ź^:Ö-œĻy!f”?\œćÉR ”ܓā_†Ūį–¦Ē|-ļ¬ļKˆ~c “Įlū×Ļ?ü5e-µ…īŽ—†ÜÄŲ#;ˆēš§Nve8·šÄŚ„ē†įšn®ˆŗÅ®é#yŻ4C²ć®?ĻZūAø’ŅŻč9϶+Ó„>§=H—ļ10Å&É‰ŹœW?{¢MBxĢŅ ÜO Šź9¤ģT²½ūlĖirĢ[5«qcuh¦8OļG =i–Kkir›e "óƒė[’ÜŻKkä¢ī`yæJ@szœ3ŽĒ w Ń:0 »ÓŠVž›£XIäĆØ³9,£ę¦¦éz¼Ŗ­k&š:gų«Ņ4żęd‘QgĒĢć®­!œ?‹O¹–?²²+޽dŲxFĪč3ĮŠ–š‚”‘ĆxóĆ ¤ź(Q‚,€ ¤÷ÅgxU¤“Õ!VPÖŲł²hŃķqčŗdWw:“7,¢HĮh³ņ”ē„sQj©noAņA<žĘ®-#S£Ńo“ŻWN7"E’>›{]©Š”·y<±īFlVŠ]ņ’ĮLõŻßšéVÆē•|·Š87Ņ­JĘŠZzUźCxĪąń®¾ßPŅõ:Ž‚ õ%Ż­ģś,ófk˜ņ@ ÜVZڶ„Ŗ½ĮA“÷ėH §}šń„Ѳó‘ZŪ$„1Ų»1֔ȸģ›+vÓóҼ{ķ³$ķ ŅƒĖā©‘× ŽóEŌdxÖŻŪ ~æy0XÉw%ā‘ŃG„fö(į­õgūKB£xĪ+¾‘„&§;m‰–ŃÉ'؏ėXSÜüēÕ4Ķ.hu‹Ż_3Ķ¤gč7gžæJš˜¼āĻų®)mćh.chä6ųĮäJĀP=üµµR'ļ÷†ē­yæķƒąßųeļŚ^ÓĮ¤Ķ„|(ńnž/“6Īb³¹C‰`ēź¬=ˆ©rw*iŽ—Äžń%®Ÿ‘|–2(ŽBœü¹õļ_xćövÕ.nēńW€õųE¼_nZ²Hv-Īß¼čsĻÖ£šēdŪąĒŪ;;}GNń•ļö¹o“‚DŒ2>_lƒ]÷űāµŚéĒ1dīr>šö®:ģōčBē^Ē}y}ę31³`æ/e5Ó¾„‰e(½sšņ*Õ±ėQ¦S:‚ ń$Ż1޵hWĖ \[[ŗ^&HćśšŠuĶ„ŗŠu~ŪĀŚĘ«”x‘ńdØ^y”®+Ā?gŠ5{)5Ě[°ło€„z˜z‡^š>ŽńļŽ~x’ĄŽ$±kk{ų.!ŤRĀ FĻ5łWąox£ąßĘmßO½ŸMŃī.6_Ł©Ģ3”ž%Zö©HńėR?n­ļ“ŸévwZ\†{y# 4]x5‘oą«Ū[Åøŗ™0Į/qčkŗ3<Šš±ī§†[I“h-ĢW>^ÉNü‚ž v®6K-ȾbD¬ł‡ÆÖ¦MœœģŽĀ÷w[O Ąrri©ą­m„yĮŻź9ØöW«c6 É7nēÓ9Øāšß–ęEŒłžB¶ c §wń/ĘIg§ŚY 3w + ‘G'ä~UńŠuĮ5Ć9—Ģ—«döÆn…3śņeCŚĖvz?ĆĘ6:ls$Kstā1ņŅx _£? žizN™>(ÜI§¬qyši„å¤ dqłs’ėÆV•3č±’äõzßĘŚ×āGÄ #Oš/‚„ŽšŒ*c®b–EōöƜōO‹ķ3t¹½‘·É<æ3Čē’ĢĒ©&ŗ¢®}VA“FŠęź÷7²l¤”^khīTmł# ü«Cş<-ńgĮw^ń­¢jš$’ź²p֒žŽ‡ØĮĮÅLé#ļ(ŠV±łāO‡ž.żœ~#ÆĆ_Ą×š$²«éZ³.ŲīķŁ°O—<ż+ģ]_Ú‚¤²Ö|yjé:bUG»±œŒzē„cģśÉFžĻŗī«ć§½²ńžµØ&™nļ¼vćEĒūW£ėŸü3{¬µõž‘”€ gĮŻ^+eKCjM&|“ń’ö@×mtĶCā—ĄöLŌ-•§Õt&č®FL‘ƒŹ’;WĢ~ ńć++k©Ž5/løģć‚?:ćÆJĒŅąjō=.iŽĪŽ8Ėī„}ӊēnuXe‚a½1ČåŗWzٟIAčhéP¬C+M ³9āŗ¤“rņūŽ•qv6Ŗ’$¼—OŃōėĖūčŅ(Ÿh9Ą8ėÅ{üSž ‰ńwöwŌ5æ…­ÅŸˆ¾Ü^É-”wqļc9,Ā6Č; 9ŚzOs^Ī]‹t§Ļ ĻĒy“Ļ-ŖģŪR‹ķ(ķśÆG¹ū³ąŪ7āvmˆ¼†µ 3Is&”Ł(c»ŖŸŻņ{cƒ\OŠæn€æ£ø‡ćOģåā/x„2YŅDW"CÜŗŽ?ˆ6+·8ņŸÄ4ü ĘPÄ}gS’¤įo޾żŽ¼mhŗŸ†4ķUŌnē’Ź3cwaƒ¹Į`q÷kóĻÄß²;ź·W_¼G{«L¹’; ČĄ‘µŌćė^V' Ŗ?¦8sl #„Ī"ē§7UėŻ~'Å>9Ņ<]ššņųL“Ż2ŹIĆr²8õ>ƒ­néž*Ó®ōØo ¹,Ņ.Œ~<ׅ^…čL·5„‰‚'tĖ:&µ½p7Ę<Žø®‡SµøÕ7ź0ŪģĀÅ]€į[ŅøĻjžĒóĮat"ó<ÄĒnßZéōؖ\ĪäļĻé[Eܳ£»wÓ¬ZćÉ< ś×orš…š— T7~µIŅŹ¶ńį¦8\Čé]¾Ļń.ĖZO ėŗMæŠ,J“¦]·–nPŽ 1ī*µO¹ŸµGœ@ņGsye©ZKcØŪĢŠ\[Ė÷¢‘N’>µÓ[;F²į÷9§ģĢŖb¬Išć^½e‡ĒnBŚé·o"bb#'ī“_VüpųI£Ž|6°ųĶį{ėXķę4Ń©ŹŹ¤grćń­©Óī|ī?0jKČüōų§öŸƒŅŁTĢ"”ĶņÆ8ćü+ē EioÆ[K©J-¤ŽL@äcwĻ5¢†‡ĻćqŚŖ^ų‡”|ń®“uØK|’Ūķņ%9-’yé_čšv›Ŗ]Aż­8'i„Péźģ{6  6x/ōhdG…„˜9Ē­zæƒ~-x§Iń5Ŷ“MĪ…,€®_'8Ļįšč„#Ÿ†ę„cōGį÷‹¼æ³Ü@|äWŲŚf„ž Š+·nボW§Mō?'ĶØ8Īē{ā-6ē]“Ņ3łæ&āyßéüėŽń„­]–o"oõMć«CĮ”NOĄ^7›Iń‡]‘g…WkapAéĮÆpm[M½˜ŽXÜ,‰æ'=Å\cŌĮ«ڦ˜ŗŽž@(ŅØ%r:ūW} A}”$¦Å-ÆW+*0ūćŽŗ#.†N«‹¹ļŸ²wķyū<ųŠ=Yŗ½†·×1Gqņé`IĘō^ÜūW•’Įk>Xė~7ųwūAųKW–īÓZÓÓIŌ҆4ł¢”}C`抚« G*ś‡a³z ŃÆB~Ŗ7_}—ž|š˜ü8¹šv­nn…¼Ķµń·žƒ¦+—ń…ŽynöW&X[#cuC\Øž±„Œ„‹žšğß.ą’kž4æUó!ŒSÓ;‰āæEץ¶?Ā/€š­ę±šėÄ>šµĢH·qŚźbpŃ‚I^ Ļ׎»é6µ>±yDć 6a(ūņVOæOųsņ’\Šļü=ŖÉE¬åŸķ(į1å7\ƒŌs_”ß°ĻĒGÄ.Ö>xĖĒ^!†ŅöŚK‹K9dŻmq"— ÷Ī;āŗéŌ±äx‹Ć0̲z°Qę”bÜĕտ#ō/į÷ü į«k7~:ųTšDzmĀéƒ_²żõŖćXš!Į$€Ąg„}!ń/ᒁ>3|;ńŸĮ_аXkŸ£ŸĪø'+ŒĮœdrŻhW1Éå·'uĄ5ķZf¹Økŗ@ÓģĶŅ\ƒĒ”äqŽÕē­TŠśŸąÅ]ĮÉi£›ł^ā#¹ā$Ąą×é’‡šķ߈4­GWŌd³¶Ņl՚ye“ąvSܜvÆĘĻŪk^°ń”“iŚ –ēN±˜™mć9‚x’>•c¦‚÷¬ĪżęŌ»yH‘ĘnÕķjö]Z`²Ū’z׏]ŸS‘”Ŗ1TņZįWpĒłÕĖ,żˆ„øGłA pMa{”Ž–/Y¬Kŗ9$ŁĘnk~ĖGŠā7y.˜Č:)Æ{/½āÆ„ękQ<&|>ōŸ›Ń/»_¼Ū³·XÜ=k¹Ņį ­ ź ćœ_ILž©¾„ZŻĮøŁ3ĒĢzē­ģøUŌv­Inw gX«°ØĻ^õˆŗ¢[;[\y{Ą9aŽ“FR—D7ĶČ7PJ”zņ+Š4ēI,a¹GFrøači™•Ö$¹$‡ęcłW;ā=2ūMŗ°ū/˜ź\9łq]R‘cR°ūlQ[łłČ©Årŗ†‚Ö…DS3/|ž .ųnšĆ+ZłŠĄ˜c^‹.ˆśÜ––qŗ݇ĪNϽg®x2’ĮZŻīÉ"źH`yČ4ŃuX›il­ä]Ūą~`zc>”$$SŪŚfxĄˆ[“[ójŗeĢM$yē#ڃ&Ži‘„Ė9n½łÅMöä%Źŗµz\ńŪ$ĪÉóqßd2[s4‘™"Qø©kŚ[ʤR¤‡xĒzø=NRōrKop\ŚīnWē¶“ū]g/Į»óW)Ó_OcšĒ 2J ƒŌW9+ĘÕ8ėXW>[Œ6ĶĆ·zÆ«y³DŖÉ¹g5—`!Ń4‡ž}ćwĻŠz~Ößémen‹$ˆ°ž¦³Bk“…dڽs֙¦ÜÅ-Ā-Ó¬y$óXŹZč#ZęŽĶ$˜ÄŹńäóžÕ‹6±m§@ó‰æx¬ŒdļWõ5„Qēŗß‹on–Qģ'øҹK(^ņäNģefły=O„)Ķ$vS…Ļ«>|:Ó¼A„AØJ!€‡Ū%¼Čwpy ōė_Dj~‹K± ` " Į¾w]³¾8ķQÖ滽±¼ ¶P Y9-]®“h’¶§Ø”U!°FkĢP»:,pß¾2Śč·PxCSŌoµf+Godw'$šū/öh’‚]|rż„ąŅ¼}ńŅmOą÷Ć eżŗ!öūŌ<ŖOīĮäžµčѢєźŠĮ_ŲóįĮ/ ?‡æe…:}ž«Š.õ›„<ĶŽ\»A8öśW©čŽšļ‚oµ=Cāž­©ė~.wŻil„”ū£(äćq^„!ќs™éz†ń;āg¦Ås<X,l«ó\óŌĒ“Ļ$W³x?ąO‡|)dmąÓķīµfQ›²āC/|īI®ˆĄÄŌŽ8¼?s,—^kØ![«cޱ¼A«ź7Ž‚ÅŹ;JŁFij€Š|o„x«XÕ¼-%ɆęĻ d’=«¼öĶU¹žĒÖnl4ĖŲt­BöŅmö÷@–<öo^i™ņ²oZßiOk®é ¢ä¦Žē׌ź-,d»Ņü'«^iöS‘Éæ®8ĖĄē?JØ-MOĻŚ öÅšwĄČ/mµæ[xĒĘ%Łb¶EBŁčÄÆņ5ųūG~ھ6ßĶ0Ö­žųXJģ„äĘ8ć²ēŪÖ»)!7”šž„āķ2 [³„³;v?Ęǹ=kŵ]RīāåZgdVtržµßM5dP•ZL¦qžµI°T¹#׊ޚ8e"šŒ2F4LJžæZæšF¦`KńŅ”Æ±“—@h›?»Ÿ„ZŽÕߗūP \ѲÓVI^$ŽO4‘ĪzWSi§ŹuHō}>Ę÷]Öē`µµMī_°ĄõĻZR•iŅ?kæd_ų"ĘĻŚG±ń’ķÆ’Āųl Ī4ųĄ{ĖŲ É3q#^kś&ų'š_ąģ¹£'’e_‡öjm¤śČ·÷.£³žX’õųk‚­[čwS¦vŗŸŠ¼>Ņwāuäž"ńrʰEdČe„IźŖF:p=;W™|A“ų««kZüZvįÆ±Żµ#*n=Ō×3’:éÄ|ŗŻƒī_Sš†¾²Ńķy€ł„`:;~uĆkŚ„ŸŠtįuāĶ̃7ū² wõ””ĀŚéč°,Z06ŗ{9fQĘ2zTwŗ;Zuh’ofČnI÷¬Ąėl,lģģąŗÕ.~×zć ­RŌožuh-HH»{PD¤rl·ŽW³Óm?“Æä`…ś…=Į÷ę ¼øÓ< nuŸ‰ŗ’€ł6QŒ;Ænz8§w'™Ÿ ühż±®¬ŽM'į儽ŠĒ#nh\‰2y½kóük^/ų…©^_xŖėķ¾eĆIå’O<`õż+^TQī ž x‡ĘŚ”YŁŪZéE¶<³årßēŠś[įĻĀæxWā­¦¹n5 Ųä,B¾AĒpn+š¢"GÜWŅuåsmgk G!V8Ā }Cįo‡šv,ćL³† drŅ|ø,j# ™ó3ŚtŸßj6,b8Ju,ŲĶgj~Ō“ŲŽHĪüusĶmFs—C”³Ō/¬µū]‹ķČ$yģsŸßi€I „d!£ļœ{ÖŖ™Ļ&ś;eāøüyØŚÉi Õ¤±‘0ę<žÕ'†¼xŠź—3^iņĖ«mŲż»fŸ*C™ŹxÆÅzœŚŸg§Ż%‚åĖW>˜ė\µ—ŠRš™|³»c©˜?J͚$e’ĀU­ź7V÷M½¬ •FFĪGØ«™»·žÖu’ ¦IrIŒÆ ųӃ-Å£ ¼J·»ŌŅ k÷³“…ķ_üażš¼ć/iŽ6“šśG®E)+$mó 8ĪŽ;Uó¢”õ:ųVzG†tū`m®¬īWå#Œz“]9šEÄ?Žč~šxņYT“Ō{™H~Ōg|+Ć1§ļ¶ŌœŒņ¢¶įō®ÆP¶øŌ­äū H$<Ø Ę{t¬Ģå3“†超¼:•œf'PK«½ōÅ{7‡|5Ø^³ŽI©‹` ŒóĶBd4ŗWŗŻÖ‰9 8f+pƹM[ÄÆ«]$·VńJ åƒtük¢2°Ž/W¾šŻ…£ż¦!y0ĄxĒ¢“ęEs3†šŽ®÷WvśMŻĖĆoŹĆƒ†õ8Æ£“2ī-āžŠ’ņŪ8>iåjfĢ„&vóųfŹŽ.­®÷ݲ‚Ė»"”Ō­„{2lŌÄɀÉÉÜՙ*g!¦Ś\µÄ‰uē[ķÉŗs\åūj\\Ao ÜH2ØŃR4ę1¼7”|IR·ŌµĶ}R’¾d©Ž1^—uØšŁĢ«‚»ŗjÜĢåsÉĮŌ€‘÷/’gšś7AŌķģm^“ēÅå°@§$użis’yļˆ5+hnĢv;ĮŪóg‘ščt‹„½¶[wUN:Õs䯓’°^OŅ!}ŻHč*DŌįSØ<›QƒØÓr±JMĶ¤ńĮ„Ļ9“C…I–?S]§ƒļ ³–ŽKųD ŹēØśÖrg£źŽ*T‚ģōā Écž+ʵYg•ŽHß;0PÆćPh"P‚F`db?*ėn¼=¢ŻYHķ,ŖĪ›[ż“ŽŌ\šMRĻū&÷u«yWĪ﨨ō?Ē:·Ÿż–#ŗeS)ˆ’ Ž UDI£‹ń&±­Ū> Ģßé* nAōÆ.ÓüS6¢ŃŚ“Ģ%ČyQ›{ę­ģYŲÜiRźh/4~o–B¹Ēø®«CÕO’(fwvP<ę¹ęśG Ė~ķ˜Ąģ'#„r²ßXŻŻ³¼ēݱ‚·+Zȉ#¢ƒJ•”y ¢`só żqE¦”y+h ^08\ŠŅ1Dr驹>8Õ¼sį’ŲMoįū‹Ū˜}„““żŚõ;]—° ˜-®<ņ9Ü8ZŽ4Ę⺟zĒĮKiś‡.õ+;)—o›+Ÿ/ šāµƒzwƝR4+ÉuvYdŽRRząž¢½ĪcĮ„^[欅÷‡,ķ/µ‰žYLĀ=ŻĒMýx.gwk;ˆ'“p\ŗīąjgLesŅü¦\Łė«¬\ŪI©[³`«Fõ‘ń+Hńe‹m.4$ø†ŚTŻ–C”9čż»œÕ\Ž)‰öÆ-…Œ7o÷ŪJ„y¹żk„¹Ń4čŅĶŽ…åĖŠŸQķRQ×E?öŗZ‹(-"XćĀ…ąw¤Š¼¬ųŽ}NĻW †WhÓĖ9Ā’IļE‰ęG Æ~Ļ–†Ś KK›]Xœ!>`Ļ\w®+žńļ¶[+m^vŌ $IxĮ§oʁĀi]åę½šž ]kŹ×w²~Ļpß¼O—ų³^m¬’cėŚÅ¶­km‘ŽIˆ6@>“¹Fģ{N‰aØŪčēT±ūx­-~Ķe9WĘAžx¢Ćö‡š“J“Qń¦‘q}#\Ż»}• ńĄč ÆÓ…>µšö± j:ŠĆżˆĒ˚f8XAłNOājdT®p~üšĒŽ[Ęž½²w½Į¹ņ\y łĘģžõ©ń³Ą0xGĮń_ƒ¢Ō5]¢CqC{BÄvĘ8’QÅ%”ņ—ˆęš…ūĆ}"=³0h§nXdōjū£ą~·™¦ź>:ƒPÓÆ>ĀOnOͱøĪ;õ­§Ģß“·Ę}ĘŽ(Õµ-ęHģ”,Qģl€Ź ž5ńƒ~"Śč¾4“Ōõ;G¼øµ6 ŚĮ½åG)”t9ļŽŸüUćæĶāmnŅ} V‚E’ĪM˜3Ŏ=Į.‹ā$ÓƟ®4&Źā\9|å‡géN1:#.†Ō ėŸkŠyžō°tŒ³ĄW5į··]:¬ŽźjeX$?20?{9ÅW!©õ½Ÿ‚“ļ|5Ōõ¦ń¶•¬$ŻQ™”`«×uyWŠ†“ķ#IžĪšŌ7óT·,ĄńŸJ†ŗ ēÉŽ*ŌķęŌ|«čĆĄŻp{žŁÆCųcšžĪö?“DŒb‰Ō“æ#ŸZIX\Ē©źŽšüJš%Ž ¬!AHeģJÕ«{š? ßŲjm3%”yqŽČ£»¢ŽėVÕ“Ÿ XĆ`«\Ģ”£ ņGłÅy%÷‰u=Eoį&!TbäńėHN+©Ÿöt†7š5/¤}āz’„¾éŚļ„-µaq7¶—+s'œŹ7„żGćAGd{—õ=2×FŠ›A¼{XڳÜļä§JųŖćāwŠ> ųžę-E$–{ł‹Ć3ŹØ=8ĄĒī8ĄśOŪ›Ēš~”i„iö:¤wć‰ŸF:†ģkļŲ×ⵇüuŖźóA÷Ŗ#āA!ĻRō”F鄕‘ń7Ē(<'įO‹śµē4X¬&–ą¼žY«nœ‘^ūąO‰7ńׇn5/ŪEvŚj¢E'EN€ߜóN0÷nc)écĢjŸŸü;]E¬å?`X®ģ°9źOįšóO‡–Ķuą}inŽt™7HŪ³“qSb9Ļ~<ü.Õldøń¶™e*č!Ģ3ø_½č}käiaxäÄ«# ;8*+JfŹ”ŠhzĘ©¢ė:Wˆ4ØĆ\Į Ž02ńädWģ‚üF¾1šę®ZŪÕTŖž„(Ī+kh'#ŗ.$·1‚Ob}+äߌsį«k¶ńf–‹-õ­ŅļVź}? f¹å¹¬WSäĶ?Ćņف,‹²`»¤ x㨯iųć»OxŠé³”:‚,3,„ķläśʤźŒNŪć…5oų×Nń‚b/¬[^-ę›ub7«!?Ō{×öŃ’õż„­ælŁsĀ~>ž1kć-.•­Ū—ˬ‰…ŻŽ¼’>§Ņ”•ŃҶ>āŠõ› U·–9”=6׌‘ǦųĒB‚YtuūĄ`«cšējąÕĢų*ŸĮ_|Oż…ž7ų;SŠĘ³¬č_ۚ4‚-ŅĄČwŒ|Ąū9Æóģe®” ß=¬r\A‚Å‚ķ@Ä2śšAĻN­źŹŸdŸßuśŹ]Ō Ž'P’ÆJÉ\z2œwÆB',˜õŸŹÜŽÅ} $n6ćsė“ßėLĘLLC*ŗ°d›¾{šEMrTŒzŠA2DŃØ•­^Šå|@bpO„_)p} ¢ŚBˆˆ šōļ‡ß|]š?ā'€>:ü=Ō•ćŸ _Åk$lCH2=½:†O<ŅjĒd$¦ģūHx'ö©ųšć旄/ėĆŽ%Ó£7 žĘō.v`ŹĄś•'øÆ .“¹āā”ĖČõ5ĒV&ńzUā(L ŖĀĪŠĮt ćzAČś_>.š ŽńÅēƙn »†uŸ Ž“±ćcĖB=ņŲĒøō®"Åų(·ģāŽ:šī”Ó³™ü¤ĆXŻ©ē+Ū8ĻāGc_ĢužŸØi·z¶Ŗ­c;Į0pT°±čq[Š}YģSņ›ĖVl<üµ ~lŅVłQ]ńŲĮ“M÷t†ļs÷jŒmm)‘˜ÉŃ­39G©Wˆnryę’'S¹Š‘“ć‘A(,ē ÉéÓ©«ƒņqœ÷ č§!Ń7›"ō¬N@ō«qĒßcЊŹrč~Ä’Į?lūŸŁÆć꛹ĆÄóŚ’Ā!ÆÜŗińÜ<©Č•\żÕaž:fæø†"ßIŌµ/…ŅŖŽx+]µļ ܂»"”aŽ ē‚‚=JŠ‘źŽ“}-ąĻĮÆh"i-eµŌm„6—pøĆ#©Ę~‡ø ÷®•PFn,¾Šź\‚ qԈĪ÷ü§ö0ƒāGĆ 'ö”šīŚžˆ«„x©a€–ÉŽ"ŗ 0s°ż—ź6×ń+—ŚV£}”ė %®§o#$ ńøg‡QŠēh³ĀÆ2xŖĮįg,Ēh8Ęyą_ti^3·Ōtø_ST²»OÜį1“Ą$cÆ×-H‰3}f×ǚ]ö¬y’O4{鏊ÖĪ›żąķ'MæÖ‘u=\ CFXØĻCÅr=ĪgāŸ§[x³FńŸōųbdŗ†(ś@܇õÆ«t-fOˆ~“ńfµ†_ŻČØ ‘F«¶…Cž ±Ė*8ƒné[JĪC7b½:r¹É4U‹F±Y⹌yR«}ėn{ŲīR-¤oAŒƒŸZŠ"bģŌ^čŸ1īŽƒ¶k¾šóY„ŽTĆÕŗPY'ŽōŪ ŻFĘöĮ…؍3,j8võö®.WŪ­±ŗqL ż#_ŗ±O- ²€vŒŽ3]†”ā]FāŠ›Pöņ*ņø#pļHg˜č—·ZŽŖŅ9˜Åæęē=³^ó.fĮ&Tl“ujxŠµ+›ĖÖO&Iv¾rFjœv÷B‘ xŪ®(.Śß\łĘ6yp~R¹5»Ÿw%¼ĻÉå1Įp åķ?H›J·yå\ä…éšĖ¹ń 6·±ŚŹĢ²y hŻŻI©ČbPeˆ‡\ķ®jķ&¶™(ĮIĮōŠHŻD·–ŚĪģmi°Kv9ĶoŚé§j©Cר ŻZŒI Üß¼^#­yµę§(o!—Üu4¢=!Rń§}ę ‡еmm2Ė3Dļ³>¹ĶY|¤;Ć+uärMW‘¦’8ä‰šŻĄź;ŸzétĶKĻ·C~|ɔm$µzęņÖXš"2˜Ē¦)r¢£¹R;ø1²/B qśīš^ęŽkk5\¾[ǵ)ģtĘV;ĶĆjCp#ą€qŽEbxŚĀ{C ²£²³ü ÄŃHį“»ic¼"d+“ņœtÆlÓšŚ}ž™«©ø·xA É~ V2)ī~cüGŌßĮėØé÷ZzŚi&b±HØyĮćé_;ÜxėĚP¼}2ņ-<¼dĒ&ܕäuü+ŽŃlś¬G›]Ļß߃n£’ ÓĄZüz£Ķ=īŚÉüTų€>&$ ų™gę-–§¾Ń,ˆÄ¬Aaņ²ł«‡*Üģ„#ńWʞń’_$ņŻŲĖ39rĶķ^ėš’OŠmdÓĻļķŲä›}•yŲ™hzųsÜ~xkPńD–śRu ›`Uąj÷ +ąV· Ę„§]\%“j '˜ūĖ{-x¢Ū=VHŻƒÖvÖ¶‚ięK…mŕ¾÷į]·Ć­ŹĻ{µÄóäĮ®ƒ"¦(Äń„Ēc5¬pĘ"dŲĄó łÅ Éøi“[(å·wݶ1‚ŸQ^åv±Ģź£Ī®ąń_ƒnVŃō{‹»Gu ĮļéÅz-—Ā]?āÅā Ż2+=Z܈ĖŅvÖ½(lq֜lz÷Ćķ~ėĀ÷e8x£Żå8n6ūŠś’)$Ō¬Vķ%;sĘӐEvĀ-&&HŖęź’=ģT‘ß”«öqÉ,en†ö8=ėCȜdšL¦Y£·yöžöÆ~‚Ö;kU!18Ļ#­h„d`åŲ£y é𕳪«Š5Ź\xK<¢XQ—Œõ3˜*‡ØÄ!g‚U1ŒŠć.ķ!†%•vīĻ$Žh§-M”Łćž1Ōå«ŲĖ ĢU·£Č°Æzųį?Oš³ĆŚĪ‘ćõ-Fō±žÅŁKŪ>yR3N•Ó )3žjpų®ŅŃ- [)SzĪ[6Füėńf§a ŻÜYÜ3R&*čæēڰŖĪŖtŪ8+‰¶–Ś”6wš5µ³ĖĪÓļé_Ghzߒ°ŗH%·sŽŒ+‚sģvŅÚóźMskylĢ%¶s‰Pž |łāmQ<9ØH,š0„eF:]˜Usėøc*x¬\(„»<\ńMœ·=ü‚o˜¹ėķ_2kŽ%±:£»dœEØĪrp+č°ŌZµĻź¼Yģā”’?U’g†cG·šÆ¼I§Å>‘ƒds +0ĮäžõöÄļX|A»³ŗø‰ōų!‡ŹU…ŽĆǧć^Ķ8ŁŒŖābÖŃg翉“y4żfń“lķc›a#E"—ŹcƒĻJӖĒėyl“§édŲ2“Ūµ_²»hP6åϦ£s߁Ļ|YųC žŠ~ Ō¼āĆ Ō’3.‰vŅ`ŲÜØłJŸBp1_—¾Õ¼AįłµÆ‡ž$2ĆāMv¶ø…˜ī$tp8"’VI£ōö#Ö’į(Öʑ$ŗ¬wDźO~qĮõÆŃßh‹¤j |›‡JÖ:-L£W[tĖuōbŚĖ*“rŠ” ūb柭sJ¾š?Ę_ˆ:es4-ؖ‚#nēłŽa’kŸNūīŗ[Ÿbx3Ąz®½s‰āĖgŠ™ćŻŗQ‚8éĖó…ńOöXń­­¶©šāömuP²ÜXŗ.;0=æ•y5(³é(c’>Fмq®xÄŅx#≨x?đžńaŗĘÉ£Ļ wÆŖ“`j6Š]Bńʌ;•Ķ(“vJæ6‡?ńkÄöžųŖxR…/,]ZŁ£#%Y€|šų+įµõõ”f…+)ēFǶNp~•½)žMs¤Ļčöińčš®›qmrŪ<‘‹’véé^ówįķ:[©õģĆłĆ=8ÆRœŠœ#ĢĻ'ńOý7ßYY¢K»z…^‡×ł×’’Ā54~%Ņ|G¦źšķ–„j Ū¤›a”ļ/~Õ¤ćttSĮB¬m$\ńo†•łćŸiūN ėÉā½ŽwŠŚä»Ā”1õć¼ĢE+­O[%ĀK ˆ÷~{§ˆ¾ŲIš“Ćß¼7mˆ±…» &NīēōžUÄčo}indU<ą÷åŌ¢~™€Äó§sĶ~#é×Ö>"ҾŹń½•ž÷1‚ I×·­kxZęāÜ¢I#²ē'qż+[īü{­»XŁĮh'žMįXd¹=k[į·.·6ŻŠż¢%is…Ģe±ź~ųĻGųg/‰ō 15‰ŽHĆ,¹ŗä~ųŽłõ’źz†6•zģ–ó¤ŠQ“iąŸēZu¹É:or‡Å[1kńwÄ „.\9 ‘¼ćüGåS­×öf•<’i] ØaŲ‚3ZBģąÆ±Éü8š¬W¾&€x½“(ęÜŽKG¹&$ž־ŚēÅ+3öq¶ų/Ø„–¼ö2·“wŠ”ÜHR?}+¢žš3ĒĹܯ™óSxnļÅ?mšžž±­ķņb ĻN½+äŸč:‹uļ‡~)m¼G¦³+™†•=Aü_+±įfTł%v}UąķN-GNŌōė€gX“§Ąžb¾yM7Sšž½wc},žZÉę[üŻc'ųTņœ±‰O”śSĀŚ»Ēi4Ū"8śWOāk{»:+ż.nLgpdõ¢2±ōjQ=_įĘĶSĆ Łj eŠxwyg¦å5śéšÆSŃüYąyõĶP“šĪ;vvĖąŒ ņ+¾CóĪ*ĄZ>Ņ‚iśŲ>0¹ŌRö«s•żĘWÖ­Ÿ®čĄČ`›(YH<“]±•ĻĻ«FĢł“PšŹM®HˆFģ®8®›O±Ö4&q$ØĆ(ŲČjŃ#–¤’ÜõŸ xŽBÖk{³]D>a»Æē^įą/…·?4]sPÓn+;c²GD,U¹ŠÖŪ=œfTšŌeZ«“Qó7Šō}SĄzŽ” j¶Ļw,o•óT2¾›ā7…ž,~Ļž%ųqāØ'²Ö µó4©¦A(‚epx'ō tŖ¬E(VƒŗM4’Æ#ąÆO£’b]Įż™ö]nŒ3mĘŁČ$~ C柅7ž+ŠįøÓīāŅua$3c# ō#½Gß`ó)ŧs–Ѿ<~ԟ6Å M ¤PĘ#Ić°ó ėłwÆxšWügć~™ |`±Ņ¼oą{øĢ7i9įS×u‘ƒZŖÖŠYĻį3wķj/ylūXć<{”ü<ų‚·~:ųSØĻ­x"ó›­1Ę'Ņåī õ ×Ūśüus±ąišē†ļ.ōŻBĀč\[\”—Ā}ŽqŠ™Õ×Cī²,ŗ¤h*5õiXŠń拵?źš–»©,f[ćŗčF»C¹źÄzžµ÷—ģ=ūQü@ųcį½sąę»tž4ų#,n°i׏™ō‡c“äHrBnł¶v<ŒjUgsĮć’čg9EL ×½kÅö’ų^ĻŃł6Ž’öŖų§~ҟ|[s&‡ü-O§ö΃{¹’āāĻio‘Ļß Īü’8>~Ń~ńW„“æ ųßR±±ńuŒfŚā)š@3Ļ^jg#ó/£īa7–TĖj=hMŪM£+»ąJ[ķ¢=“Wųh%¼A᫁pņNą£×Ž•łłū\xP隖™ń£OVŠĘv‡MÖ¢#…› }k–qź~śés+?omaā%Žhm_t{U¶Œä®|ńĮZ€×<.Ń5Œ`}žki1H?¼xéé\ńG_-ŃśGūųgöbż©/„~4Ÿ|ųڰy¶śŻ½ēŁķodä`ņĒiö5×Zk0~Ę’“æƒ4ŽŚ_ü,ļéwŌtFÜ·ö²!X¦hsT‘¹3ŌpHĮ>“af¦ž·³_-Ļ_KyŸœ,v2źø:÷mx˧§©ś[ū@žŌß³×ğé­šžh|šģZ²Ź¦?³É+ž>ą ōć'ń7‡<1š‡Ē~Ō4ż#@2B |%ÜA$ąœõżj*µ±ŃĀXLdh[ļ$õó>3ų«ūųbKQŌ“ŸOąĶQĢ‚å€ū5ĆõŲź[æ°Æ†®|e®|:¾m/Äž|ė1†9£’Uv ćr~8Æ.¤;Ÿ§a(it}”~Ėæü¤Żų’J¹±“šāY‹ø¢“–øĄ$…÷ė^[¢ E»Dģ<ÄcƒŃĮ˜¬ćOSÓRKCfM _CŚ« ‘Hąäžµl£4V"Ē ÷5ōY|,žßJüī8Œņžų0Wõ–æ—+:Ė].BŒõ•Ńéš{ įnvąW·łJEV‚Xn›Ķłā®ŸJÓķn\*ˆÜõ,5g3.ź‘[[*Z¬Į\ū:óMkLø‡$®sʐ:ŠaaŽyŽ ’£|Ķ¤zzVģSźQ]‹HĆÅpsÓÉō:įŖ•ƒ¾{ĻŌ’µ¤ŁjÉ3 `zf®T¹ŠkQāźĖśÕ–[©…“„‚Üō­LčOƒc`³ÜFJ»rH=MRŅüey§]I`²6Äl«2ō¢Ā="÷ĒWž)µÆ.cŗ¹i½Fģzg½`5‘dfHĄĻ<÷©åÖąaźM$;Klc…z¶ŚāßPi0°Ŗs÷jŒJUøŹ™r8n„}kNņKØÄj­)Bu^Žō)X»qb–ŠC4d“'×µ@śĶŗ$(>T`œõ Ļ™‹kzdŗWEĮČĮ=뼚.mJ?īx óš 8yüūRU™ž2qšĻ2*ĪģŽY[ŠQoØŃ)d)øžÜ”ö“h€U$f˜Åe:²“[Üul |¶“H"ĒÓØčE01uky-tł'to%ĘӞŒ;Šü˜ųļi§čŽ)žūģ(%žbˆ§LšEFV9ĖäPåFzcčZ®·Ii”yS ĘkĒ)t8[½7}­ĶĒŁüĒU8;yÆ2iĖąĒ,yĘr=ų©F35¦·šöĖ|,er;¢øįs§Ė“FWŽi™ւ‰¬£Ż“ęÄyÜrk®ŽŅ+p¼.@zē'M÷’¤)ć œŃ²6ŅüzzŠW™1øh\®s’+n4’vE%Yŗsұ–ąw–pÅƒŁ€Ą$c"™ŖĒȆ, ź;ŽŌK`8ĶRÖhp“Ē÷Nk>ßNóŽw eRĆ'œbF©«Ć§Ęń«ƒ/NłW•]ŻŽŽ\9mŽOPøč=ėSZi›^šõÖØÉ;$±Zop3…õÆ©45š7…īćFn«'ČŅĀCß#Ō^v*NŚ­žõįųKUKH4[%†XI•Ī$ē·„ušŒĘE›bb%³ŁF{׃V ³ŠIXłŪʞ2µŅƝ­Æ¢ŁśĄƒęn:W[šGąWķ%ū_x‚-įe¤™.5[„)oj¹ē.xcƒŠV”)w9źHžæeOų&÷ģÕū!źZ^½ā‹ž,üuæQÕϊÖP2V$č˜=ńŸqŅæBüKąOź“É}ćohśOƒp ¾fvʟ@ŗņ}}:gēpӕæ¬ė:ŌÓ[hW3éwvĘŲĪßq[DW3m.u‰,"}Va©ź†”&7÷Ļźš^X\,Ҽ¶¬8SŠ¢TĪZėM²½™ä±ÓŠ^7śŁc_½īkĒõĶKĆ^Õ.Æ-f¶Õü@FĶdĘ3ӊØĘåžńö‡š§Ā» |bń>iįåĖÅh³u' „śõÆēöĀ’‚“_xĒPÖ<ū=č+¢čM1[‹¦aÜ}z×U:D¹#ņŚėćv«­Ķq}®ßźwŗŒĆēóN㻾¦kɼAć}FļpņÄŠ“ŠuÅvB•Žj•O?–ósīMéyČźiņœ'–~Ę·ŒlqTØ$1·˜‹!Ų½y’³ LŠß2ē:ÖŠģrJ] ķ6FØcQ·Ó½Ik"d™Ź³}Ńפўåė8H±“½±ČĻ"ŗŲ“čm”7W-*m§«;VR•Žŗtī}×ūĮ8’hĻŪsÅB CkšūįÜmŻėw±åšÄY°=+śŠżž`oŁöD‹OҬ¾2ü\˜5åźG,џQĮ ģ9ąņ;łµ«9;-B4^ĒÖ7’ü7āIģ~.jńxW¬ø·ŠŁŁ"R:)ĻćTõ=W]ÕķFŸš£ĆvŚ„bR“ßĀß>Ü}ń×ņąuśÖĒLamĪkNŅü ą˜!i’Ū^2–C‹Ł_~ēźIwūW=}ā]o^ž™ćĘ:–ĢĘĢ#F^øĒsĻnՋež%©j’jóįŃXHĀJyRkŅ't·’ŸQŽ6:ēŌĖP:;}>īŽóÉÕ!’c9Įć?…iŻź‘]ļ‹K·U‰RHČzUĘ qzĶŻ¦ƒ7r=ģ¤d*dąŸjā`’ęō½ī±­Į”iˆLøv ¾03ZĘĢ­vx_ŏŚÓĮ>“’ĖĀ är\,{åRĖŪ„~pxėāÆ>(Ķ#[kš™‚bĮšlŖs¹š·¢ŠŃEĻ„üu¬ßA¤-ä“ßoc±‰õ5õīƒš*ÓĀ–2jöäŻL0ωóļĻ„ä3ß~ kšóź/ai ŖirĘcU>VĻ'Ēj÷yživ-Ó¼KtåŲÄœ *ƒ×Ī’Žŗ™HõMBŅŪL(šUŽŻ(`ńžĒśÕH/&[ˆŻ R0NGZµ”œ–‡ukÆŽ[,mn÷«7Ś“’J€qÓwzµRF^±uŠÄ'vy•vÆØ•ĖM©%µ©Q;oī„õ§~¢¹—Ŗ]ųzóK1Ź¢KÖłJ²ō> Ō6žæÓōųõ1“[8;[VNWRć^³‚ĪKgQęyéų׿“'ˆœIkpöCqŠGåYJVŲĶNĀ} Œw)>õLīWö=jöź+ĖGŒĀ‡,$ī„8°¹Ūź~)“—D“i2&¢ŻĆ£ vŹiWlm5ģ,ń#ēĖõ·.‚4•č0\źs$wĆŪšd!6ƒźj¢Œ‡O’ęŽ?˜q“ҹKė¶B¬ŠyŹņ+[ŅŚ]¢iāĶ卐ØsļXréZ W =ņ³ @5Œ·{&ŗK«0ødĪrk£‡\Ž[f·ū#Ē*»³€MMś "„¤&ęį„©—>)ĖēŁź(ė$±…`1éM}]£ŗMóŗ“­Él’:Ė‚Ā+˜ÓĶņŻŹ‚3CśŹ/“CPĘIć“]ķ¶iŸo.SĶaœÉX ÷ŅŪßEŠ÷Vūæµ­āQ¦Jń“J”Ąē$ š„iw<ŅKÄŽē ½Īx­˜õ+ė”kXdM­ņßćK•‘$yī½oy¦%äa²‡„ei¾2—IµŠgĻ9Ēt”ĘĀ9KŁ#Õ&ycŚåŽ_=ėÉ-|)ž©ØÜŻF¬<Ƶä)ķYJFŃŲö/Ü[hėk§…wUÉ~¤qŽøŻ)e¼æhݹ²>SļY¶\™ėė±,„K!8ą‚:V٭њ{Hc.Ē żM"NŽ+]BęÖ7 žČsǽdŲ’miڐv“/d£s18!³Ę+X1\ļ/n ×ķ¼’³0u8‘Ļ%¾µŠ.ą°YmKłe†Ī‡½tA™Iō?¾5xŽćTńę›sŖ©‰¶eIPń‘ėÓ°Æ^ų5ā ÅŽŌŅSq>¹^)€"$óõÆ”pG—õd–‡‡üpÓģu’ié¦-Żī”lå.eWŲ±)ŲżjĢÓ¾]ßY^Żiљo–g!Kdvä}k ŲóQā{Ż&å4Éę–)–m­ž¤3ōÆIŅļµMB9žÖņxˆ]źŖų9ś÷¤Z‘ŸećCCŗšgNo:L€īIĻ_jō‹D»Ō-Öź\°uįAÉ›)Čė“sug ńķÜ#,xĄś~UōO‹”›Į>ƒZ²±[‰–##aó`g$öĄ5Q]NJ’}›“ĻŽ×/Ö4ĶY]$ŗ¶ Æ@ņFzq_Hų»ā~ć›Ÿ ^ x B¼¶Ü±žO§AłÕøt"2åwGˆ~ÓžÕ¼f#ń_‡/-M„”K‰†Y” dœWę姌åҵ5ҵ8J]ż [²Ę’7-ĆŚ„ĄŻU?Z|Wąż+CųQįSĆ×±]^ŽŚĘ²Ū?sĄÉĻ­~o|JƒQ“Õ“Ż6āndY “·žœzŒÖbRobģw–śC¾éVe°1ė^©šćāFž4¦šµåæŁ“ū¶EfvįĒ`ćN*śŽgćēĮōšĘ”„jŽI!Šź-Ū9ĮFn…GÓÆ„g?‰ŠæäŌ¼‹‰üWįčLmo1ßö¢A ?Ļ5¬;µ”ķ>/\žŠėž‡Ń\nū‰EēīśöĻ­bŹGÅ’ ~%jŽ$Ó4ÄÓß]k¦uĮ,¼e‡õÆŃųŽāļƇIk§ko-±üČĪ”ńž4ä—)R}5-7Ę^*ńĪ„¢]Adm®¦0Ś©9ĻõėĒē^Uą_Š>'š/‹¼qį^ŽźŽhęū+ĄŅˆB9öØņ0”u±Óźś¾™y¦O<ˆ·Hȃ•oSھdńˆ ™äŸHø„\ąłsmĪ>Ÿ•ZD(\ō­gĐxĖĮ~Ž¢/ux cr0Cž0 ćüB„“m+M·»#|±)É#ļ3!¹'Ō¦RG£GØx³KŃ-"Ҧ¹“°w—ŚOŌ×+„xŽ’U·®ūcR^HݰĒŽ=i4'wlņI3Nc‘3ŽGO­z†Æ§Ņ¼:ēN×.lŃŸĖ•°0:ŅPŠV>€ųįm:’]Ō.5mjkŻfX‹Z‰FžüōÆ®fųāx“‰tķbęŚa!) ‰Œc¶OLÖr%Ķ#į/Œˆ|®éļā†0 Vh¢fĪēŅųāėYŃåƒG•®ĢSćĖŽ>ś=jTư¹ĪßĆ_Ūw6vŚ~ج’‘“‘›Ö½jm^} GŒ<ӈåwĻ•)!és­µŅ.|}į-?ūś(.ē!aWłź}+’ųćš/āį]'Y׬­ī#o³·˜wČć8Ļ4BGĪŗ7…õy4»7Ō¬V;I²0yPĆŖóéšõ„šß‰žj7מצ·Ó2Y-U3å¶yĒųU¦Tģх«üE¹Ö¼oÆ]źĶr··SÉB01Ō~9ÆŖ~kÖŚn‰āYČģ>0Ųų§_ų}qį½ŹŽęŻŽd 1#ßßWåˆ-OJžĀF91»'€;?ę©ć+œ^1¾Ō|jńģańWÄ)Ćļī»šÉø“ cØLHĒ…ó8 we ·?ŪTRM©Y™w«OnĘ ž¤¾ć޹«.§TĆźŚlkq ‘Uķ§’t×ǟ“/|G­ųzĀmkk_h›ė XaåŒLaŗąŒžf¼énYń×Ęß<iāū5ŠĆ[ͦ«Ą6ŗŠ7gųA9’Ē«ł?ż½?g‰~xŚOŪi÷ˆ–ŗ¢7Ep~FǧlūÕŅ•™„£ŠüéeøŲ¦eŗØ”WUo-U˜dä•č@ĮĘÄ!B¶IlMQ™#ó¢üĒŽ¬ĘcęČPwŒS<°Ģ‡>½č34bUf•ęx£‰G@9?JƒķccBcܝÅ“ĒFÓd±¢ sÉ©3# , œćŠŹFŽΧ¦%†­ ]‹OéŅ-՜ī ‘Nx={ žķ’ą“¶ž•ūažĻšd·ś~Ÿń“Ćvé=±ł[ˆ€˜?0ķŌjm{§tūcįcž84Oiȉi|¾F§o·iŠįÖĻrłķRCŽ[0©šįŖ3ˆńʋ¢kś^©įXŚjžÖ­¤Ņõ;YŠ2IˆP†ŒŲ>Ēé_ēe’Pż’õŁ;ö‡ńw†īōėŲ4Xī‘ōū”xnō©żžPŲČ+ž­īµĖrbī|qi4vpźĆęMW;[Šö \Óoō%ćŌB5ĀęH߃ģ3\•XŚ:MśŚėT6ö÷ a?æŪĪī8Ƥ“vĮ|5&•ØiÖv[ņŅŹ™u€× ŲĶčZ Ś&£”@±YEn¤FOCŽN>¹­æ5ŃąÓÆ>XŁŚżŗk£1@cœƓZQ©©S×üQąė­ę3tĀ)›ē ź+˜¹“­÷6vü=k×£;œ“SķQdvÉ5ėKÖ-õ Ń,7˜&^E!öˆbB]`ńé[_}&w7_j £+œ•Ö¤ój%łhs·Ņ¹_ż–īé®4Æ2Ü«m+œMĮō#±ŽUĄYvœ|ßķW_m åG|u4K’é‹|ńžü$Łz5[+§[łV÷1ī~WŽķŠ. Z˜ē T<Ž*äXbaxxĘwĮö¤Ż†P¹¶ū,Ÿ»Ž„óĄ®ĘŅÓķvŠ;%Ś9aY9\Ż3»³閬Š7ų©)ń.—y¢„„¼źóŽWq…»×Ęæ¼8Ś<+„Ew¾|*żī:W-]¬}&Q^1’O«?sæeÆZĮš_AŃ£Ö¬u`Ńb  ęQÜqĪ+C[ń•Χ°ÕtńŖxm¤)5³U”šxõ÷ÆČqQµI#öœ²WŠ?>¾)Są×‰±ąĒææš,÷­3Ł”Ć[)ąŽĆ󽟌l¾"ų¢]CN„-ė܍ƒ ·WŸnĪGŅ@ū[Į¶:³™4;ū?ķI†)š2oÖ½—ĆzĢćĘžš–£sy„ŁO:ZĢņ!1@Xą3W] ¶§Ö¾ ń—‰cƍ·^ńŠŪų£į¶±i&§esü֎NYOlŠł ānįÆx×Ę>)°…m¼!w}5ōvńŖ…Rēæn½‡½qN„ŽŖP>Eńæ€ģ.“Zö‘£G©œœsŹžUĆxÄ×vÜ®‘ ŗ„ö’»žźS¹?Ją«TõéSŠś{෈āÖ|o YCwq§Ļę7Ģ«­čqõĶ}ā°kjÅ }§8%øĶrīĒ4ŃOTÓõńn!ŖåIĮśW+ ö¹ ‡?Ö»"i­Šß‰?õÆiz]ʰ"”Onf·xŪ<tūōüėóĆĘzCė:䚋Ėü¹'‘Ļq\8‰¶žcyቭēh%ŅeÉ’Œu®—ĄZ¦±­jßŲÖ¾Ól„šų9üŗWŸ7#č0t/©ėŚĒŠmōfāGŌNå•ĄčsžzWĢś†©yÆŽČKH]Ͼ—-§„Łū‡†Ł'#x¹/CĄ~"jpéͧŪĪÆ9\äzžµä¾øƒū{HŌ5rŚøŸiķ†šöčŌī~ÉWÉAĖ«?}ü-ć{ųCĆÖÖ6ŠŁŪDŖ›Žąr}ųÆ@‹N)*끁ŌW§NW?>„fיåü$j/ŅŲ€3ųW„E¦ˆ¤Q$.7ō®‡ī²lO»cZ .KiĶ»3‘šŹŸUŠŪQņb@Ē»õ«P>Ɣԕѵ”tlXÅąséĶ|3ūhü>øš·‹4_ŚF‰…ܐ錥VȐūƒœÖSEN7<æįÄך/Åm#[[”§iW±Ēń¾~ļ”ēŌŽ+÷|x¾5ŃōØ„ƒSņÕ·ö•q€Aü Jg2¦Ó¹“u©[iŽĶ}q®Ėy6Č[m¤ŸĘæünŚ7…¼[«|AńĢB)/U£ž˜lg?CNODwŃŗŠżLҼ æ>ĶćĖ ZėYµˆIos ³ā8Q·“³¶Õķb;^Łē•ńßߌ‡ ÓĮÅ«£Å“Ķvć\™5MLIößŗūś†G>ā¬ųÄö@6ķ µ1ŸSē±4¬Ė¾ šcY×ī9#ų…zœÆj®”ŁQ‰8&·ŒĪ6‹šf”,WŃ_Y¹‚XX:øźÆ'ųŃ£}—ÄP|K“ķs]źQ&GĖęē”¹Ēź+jo”ó™ęōœĢū KĄĶ¢kڜ¾ƒw'—pąó”oAļī+Ü’įYéßmt½_Fh.õm®öķēa]q÷}2qü«g~]UÉVSG™C%īŸ=å•ķ»é—Ҙ§Ža„~Uė>³Õ/-égws£Čę6ž1”_ʰ•}– •Ł~ĖPŃ“G»²–ńn9'ƒ^’š‡ā†±įė©ķ¼7vmtūø<™!#) ōŚ}kZQgN+±qgÆxsĒz=ʶś^¢~ĮØ9.ØćOuõÆŗ~Źgš}åģOEl„Ć1ąŽ˜ÆB‘łFu€tŪ<PÖī.5ū‰cĀ…|€+čÆ ėėv6‘“\ĘŲŹźė‹±ņōvā_ Ä{ķ4‹[²rȋ€ÕÕ|ż£ŻĪÆ|Õ4ŖŚ| ų­?ļbıi¾&G)*މ–ŠƵxLJ“ė-OĀ’|¤jŚ6”lĻʐĮķŚ\d8w‘®*ŌŚŲž‚ąOØfmańQöuæŽŻµčžMŸšÕn-d‹N»ŠkY ‘ą’)k)SŽGŠf½„e7VeīBsÖ¹nĻÕ'Ջŗ}ŗ=“­ż”A>Ē­mųŠi$ŅfG™É0 9$~'šæjö8Ŗ`”»GŠ\Ž\h²ŻÉ&ƤĘā9#@U?ÄW88ƦŚĒā&‡„X\ųÄßš£®Ł#Į(ĆÆ tėVŖ7”Tšō”²=ŸĀŸ¼_ń IŽ’Å~5Ե˅‘QąmC‘Ų ÅżØæf[]CözÕõ]/L†ŪÄ~˜j0JÜ¢#ęR:ÓŁ÷:cR;#Ą>|wų™§xÓĆSx‘ī“VŒł°ķ՗¢°ķ×ó5<:dFyŚ „ČŪGŽ$äšjž¦R’Õš2 HPŠč,4u•ā•›Ÿ½×­{XgĖ¢?Ź_óæķ!Åbc³“KŅ>źüÆ$ŽŽaŽĒńäUė7K|¼³1RsČÆRåÓó4õ gžÜ}·Ę=«LµÖ­n8˜õėœćšŁ+œĘž«$öū.§ipæ‰#µC¬ųŸĆŗ®›c°»¶ŗ,‘¼xĆUū3)jf[OåÉe1ÅŠq]Lbι"ĒåRćcFäślryī¬JóÅv±ŪÜø’d¤Ų¼ąsRg(Ųį®ÕÆnXȊ0zÓmd°–ęH'*Ž ~™śÓO±ŒŃ_Z hŽPł‘gZņūēar·’![EÜĶ®“.i»ŌeŠæ1˜¶ÕZō{cg,±¤sEsdŲżźzS!6mjiBŃᵕ&„©ró^\4å1Ķ[ W$/æj Ł›gbYXĮ…Č­ł4Ųīl&]Ø%žކƒ)œ-āĪ {q"‡ ŒvĶfXāP÷*”OŽj Ęéž[Ż#¤…¢éĮč+z]~vYłĀ""€"¹\ĄļŲsĶcéŅy³:ÉUÆ© —#©Žāaņ ūtüjģo²0’Eœ‚MJFµ¦£mk¼,šäyäż+ÕuČåŅ)€bpx #&pŸ¼Uƒ“"29Ųnj±Ēü«ókĘןš‘ŻJ/aIćeĄ$äJM£ŹÖąč²4j¬‘g”‚=(»ń®²æŗ…c–ŃˆÜ§ļ`¢°° ·ń„ōF­ˆ²GŹ0@®sVg½`ń*0yP}i(ŲMzÖրĄÓ~ĻaļY·–é:nP7ŌS0=/Ć«c¦Y>Ż ”Öf§qŽŽD§ž1ކ²rŪÜGo$ę)JnĘīÕĢ=ĮY×{³(84¹˜Ķø,$™>Š”^?nµ«ż“s$6×zQrœČč=ŗŅlF½ĘŗķŪD#° KfcŗLI Œē<÷¤;ā KFµY„×"fŲpØqŠń[^āᤲ:F2ØŖåhčŠ3ZÅŚ6d*ü äs’xžuéö¾“JŽ+‹ø­„Ib=šj%+ntFʘ^$’ĘŹü©nöŗi~ŻmƒQ[ō)sĻ–Cßč+Ļ«.‡U7m«ĆńĶš–m?U7–×–r+8Y_rsjX|OćĻ¾)¶šļĮļųÅ:ōßŗ)¦ĀņĮnKŗLgė\gR™ū_ū/Į“I¼Ņ¾#~×¾%V\%Ä^ÓX…‘Ļiŗ 8÷ÆŚ?üń&icąļ…t’…ŸmFČļ"eŒJæ_\ē9żjćLĀ£=M°š‡„ēøŅthęńŗ[-=Ō†MŒ8Ź žåķYÓ|-ŗÖīįńŒļg¹ä°W! 9Ēʵ±ĘĻKŅå{č#I·ŗ³ÓVNa`AB8'ŗ C\Ņō;ėm<éūFē"9„‹(qŪ$`Ž;ė$½“Ó--īe‹É½=6U«†Õæ“5­³ĮqĄŠEłŁ­ É±˜on-īŚn@ĖnYž,ń?‡ōĶ9$Ōn “PpvBĒļ`V±W·>5ų—ń]¼šõęŻEü #~śō6'~½N?.+ńSö’‚šü(żŸ4GĆ –ˆŸå‘ćžōĢHFõfē?ēŪJÉ”ūĻĒÅ’æ~:ėóė^:ń&£4k)’;FbU7 õöé^5<0… 7‡,H-õ®ųĀʝŠŅšEiOvض•rŁłzÕs‘ZTŲźźŪ¹ł†:U˜£2ŗŽvĖ©lĶ2›£ĻcÅiM‰|”PŲPՎrŝ¼ŽB•Aąā¶mtųacqt‹]Y˜uśRnĒM(Üś/ąwģ½ńæö¢ń§†žü7Ō5ŁZAڼčRĪŠ‚Ņ9ćæJžŒægOų#oĮŁĆĆÉāĻŚ³Ä_ĉw€¬d”‹hXōXŠćń“éŽøkÕčVœ,~‹ü*š#ųlź:VØ„žŠU0 SņÜ@ q€9ī9ō®·ĘŸt«[ M+Ą WÄ7²¹Šć\—äq»=1ŸĀ¼Ōtš2xį±Hń—Š5ń­kJ˜mxXEÉĻ”‚µ%@óÆ ų6mbiŽiīµ{õLJ¤–ÉõŪŚ¾ųšź)om¶ū?O(Ų낽Žk)L«w?Fü-š‡ĮzdG¦éśtŹU]nHrHĻē_C[ü*ó,m§ŠĒķ9rEąŠˆźC™fĖĄ^[kHl,aŅuKyæ’6ļéŠō=sĆv’ųvidņ„Ž(Ć>Gݧ³0s<»Ć0éׁcµĻ9Wk®xVK·[»c{w+2/sĆļ|]ŖYŹ©l`–ÕN=[Ö®ŲxŸQÖu`ą*ņŽÜP+Z®æ,2¤ó@%*ýP·üLV;Łć‘7;Z¶åŠ’SJµg†@QNDƒ'i¬ŪĻŻiökcē‚«ƒœĮ²¢µ<ĖQ‚ū[¶ž[;¶Ąźz“ĄVzä6āņ}iLń»$0ܹƏaް5å;ŪČŚ0֎£ŌĮŹ< Ÿ3uŅø}6MFāĀ+Ū&HЌģqĻŠŠø²$‘—o©j„̐Mh±\#j:’ZŻŗŅu‰-$m>Ž)®ćŒ%šÅ{ā¶3*Zk—6“Ć8Ž"’)$töĶImØź7a’/!×éŸÖ¢R&LŅÓ"ŗ[ä?ĀŁõ­ %T’ę>…Oj˜źĢäīdj[ę‘cŽŻ­÷sņƒ…• mlnte:̳t,®AĒŌt­RŽOF¼ŌÓ]»Ņf³™-Ōb Ū,äė]ę›t’#e„ ms[F6 ¬īćņž×S¶øiWppι§Žj_Ś–-am¤Y_łqBńżŽNyõėL -7KŅ­•į6³”xĒćY[\]I-µØk”,@$ōؐ­ĆwwJVī4IĖÜ‘]{ ų-$°µeŽ=»FyĮ÷¬Ą~ƒ¢ßZĘæ;ĻpĆē ;ūUNĻŹžaq˜ ?8~¹§ĢĄäīn­b-… ĄŽzqX÷z¼33I9TG=ŖKP,iékĆE0xÉŻ€k©°Ž+›Ō·Śžµ‹Üµ”¹²*ĄJ§µUm:’Wøg–ā0øĄ\nÅiŒå¹RźĄ[aE“œuėO†ĘIĢ)nŪ…­\w$ÅŌ'½³ŗ?i„é޲U›P”Ģ÷”0rN8ķ[—÷%µŌongŚFŅ`g f«źŗĶĆę%Ę:bƒS.Ę5q4—W ¹xUMeŲkSŪJŽXó>~ }jy‘2F~æØ„ĶÜbņtņNO^°µ-+϶y”Y%Œ.Ąā¢lĻ•œ“všÖ—+³}¢ŁŲ`ĒŌ sšŽXķÆU—s¦ēĮ=9®W¹¤SF¶‘öJĶ ss q󎕫ƒ„¼¦ś’ĪE}ųSĘOµ!JV/’i42ˆ¤‡Ū~8­ié–Ķ“SvāćŌÓHͳ²Ó&²“”,s‡ŒĮ­VūN—HžĶcŠŽćļyČā·JŚņ {Ė”Įas"£eXõȧ¬mrńĘćs.F[©§p?%—JÕ¬ÖyI\ÄäW³žĢžšÖ‹”ų£ÄBŲÜß=ė#Ū‰0QGŻfõ¾‚ē$„Šō}įźj–:·¬“Ø¢ÓĖ:ČYxC_ÆJņĻėÉ”iŚīi4ŚBŠÅ°ą(’8¤ĪY;Ÿ7č~ ]^¹Õ#ų;įķsG‹XRÓnīV=ņ\׏„v~ ųœŽ:Ž„Ś „¹›ĶIŚ=ėäńķZ{F_°¼tų_ńĒ\žŪҼgØģ°fm«ƒ·iūƒŠłgā'4¹Ł_ę1 }"¾ińĆė^0¹Ōēži^åOŚf0ŗ@z“Üżź"ŽW!¦źę{½(<ĖpFŲĻcjņ¹ō+¤‘ķēI ©ČćIŲØ3­šŽ•<öO<m ¼dŪł$u›šī/Ę-“]Fya²Q"ØlįÜvć[Wź?<eśW9ń+žż]tØī¤æÕt›Ė‰’a'źzf‹¦\emFŠg«/ųz;+›«.HafIĮ2§JłÅ_ uO…ž!½Ńµ}@ź »Y$-÷ē„Y£’9=J÷AŌ,ćĶ„0ŽĘÄ3‘ó8µ’ õ’ Ķa„ c‘ć"?/®{b«c'S[į/ĮŸYüÓÆķ%kbXw“w•QĮŌWĘž¼×žų¶īā[MD3}Ŗ9bŪ“sŒ‡­ŌJ{ŸLųs㯆µŪÄ“æ¼Óti˘Łe}§?NÕĢžŅōhńüLų}Ŗi‹©ZB>Łkæ‹ŌīÉĻ&Ž`nŪ—ś’ĖņG-ŒŠÜ+cĖnsÖ½ĻąO‹†ƒć½)ƶęX€Į*Ū±’~ŸÖ» g'ŠżCHü…dIm¤÷ķN‘>Ņ®6ā½G­)$ŌųĆö—š5Ä©gćč-%™į]ćFøśėھRµŽf‘XĢI 8ä ĀJ輆ĒÓ’³ÆŽn¼ ć›}6+«›MP$\ʄ…vī[šÆ`ųūą­SÚ„‡ˆ“å¹Ņa’Dŗ°ŗU;Ö@ūĮ{ŠÅé©ÓZHžĪæą—?µ-‡ķaū&xgTÖīc‰¾…4Ż^ įŻöŒnų nēżŖūj{ū žŽņßx;¾ņöö¬e¹Š}—į­N×Å~³œJ³NŃüėüJ}ėįŪėö)š×ķ±š+Tųq|m“oŠŗLr^xGWaóCp£"&=v6œg͈„Ļ-Ö«ÕŌ‰ü~Ń ¼SąÆk~ńLJõoųēBŗk]BŹtĆ4Š0X|Ń·Ž 8 ‚+ć½WL™X˜w–Ą 8ÅtŠ©ĶœU`bĖg…hå‘@ĘN{ÖtpeJīĮĻõÕ tg'³/¬Y‘0§§9¤mѾ„ŠRw5Cäœ(޽ŖĘļ‘J61éÖ Ö*ĆcfÜžzUØn]]T“”}©£X#¤“Õµ Üi0š«}“ĘZF”§ar¤‡I"`ĆsŪÆō‡’‚sžŁžż·dO†_t«Ū+$)¤ų¦Ņ–³½Œo1zÆ;H®¼š™ĒŻ:ć±ö”ö󇹱šO5G(ýyŒÖI4±|-äø–ŻĒ˜Ŗ„ŽĢą’;÷Æ2¢Ō£į’ųCĆ^Öuo ½Ģzw‡|Kqö›iMČ=r~¦æ#’m?ƒæš³<'ÆŽė¶& Š[LŌĒŹ²Œ$¤vÜ?…dÆq4+)š½’…|E­xWTŽD¼“™ć9ęxĮł\Lb±4Ų–,Ē!qĆsŠW”NlʤLۈŃ.%XꎠœzT,ʹBŠņć•ŅqMu3Üŗ ¼ŸĘµ•CģłIąž”‹óÉæäŲ3×Ö„X<°`¹õ4Ó ž\ŒvsĪ*Śŗ—T {⃪œ‹VĢ‘NIvŪÓ毻ą“Lj’eŸŚĆ:ž•rm4]JķmīvČÉ*ß!Ļ}Ł*Aąęƒ¾ ’B_†?ü+āDšˆt‰~ĖąoĀ_,04żMW,é»śÖ¾ŽÓ/æ“ ūćūZĀm²Gœ–O¹gMKOŗ» ¹3N˜Ӕjü„’‚»žĘ¶æ“Æģ×yāż?IøÕ~%ų6n¶ĻŌtĀ?} Ę@Eœ”Ē'ž9FĄš–—Ŗx'Äś·…/nĢļ†ŒÉøˆŸ— ÷Ēņ¬Ėéē‹÷d–ŹH;•¶Ž½3ļXՈ«ą­_ģÉ7ŪžIˆ;68ϵw£ÄŗÜFŪq]ٵRļM¾²r’[¼H8®hŠńŪ\.]§O<AØ&‚fd`ęFĪ ō E–k;„—Ė;[å'ףŪĢZŽ[‡GņxČīŠŲ.ē%ńŖ}x5OWń Õ̰E~ҳo “w’8 «ébKtøFwAˆ€ČĻ\V^æv­dń«H“7^ŌÄŃ.åhfŠIĖ©Z±&™fiāWĒ@~õ(źEg UKdsßėjŪ6¬(Ü9É ŌßŅęŠäČfqšŽ{Óo øŽdr‡īŸZ †ę–ҽģÉ$`©„½’ĻBÜŚüÓĪqZ N[J»MFęyb2"n .Üc«Ń-“¶Ō![øn ŗ1¦kܬb¼ƒä™žoZŁīöÜ6Ödl('œŌ8•~Ę„ā[«i^Å“ņ…Xģ1{Šō Ʊi”Y„݆ōœlųŸĀwV6°]Da(Ć8ó#šķY°\łVØdeČĄvؒ¶†ŠqŖĢ–Ģt„ެ BĘUµ²@bcČ,1ŗ¤£‹Ó|Is¦ß±hĮŒž€ōÆH­ļ.­.eņn¼Ņ¤!9 sЊĪhø=O–?hmcĀ’ 5Z(!¶ŽS++« ģ:’õż«ćū5“ńĶ‚j—Q@“#’„Œ²ēŠ×!³ŁĀAč}ššh~"Õ|/Ł$ŗƒķV‡$q€Ėųąqļ_oč¾3ŅÆ’&Õmī“Ė„"H¶· c®yÆĪ3hņMÜż»#•āš ńoĆ­SÅ06›t¶2XØ;#©õõÆŹo’ügū6xćOń¶s\J.`ø·Żīī¹ZłéVåŗ>Ę1>ĢųCć“ń6…‹tAgÖ܄ņĆ“Œę¾²¶šdś…Õē#ŽĖsipēkŒœC’Jó«ĻChĆS#Ē~$ńˆ'NՍåģÖ6āe”īŪ8P}æĀøöÓÆ5_ Ä4~`żŁQČ8Ē5āW­cŃĆÓ>}Ō,u]&ķtmVóž\Š9ÜגųūE…^,Ņ ń·….Õaņõ[CĮUlŒ”÷ź? ż]²øKų ŌāŠ%¶ŗ_6=§#žßžE:U3©7W‰™ĀĆĶĮė\›JßjY-ŹI’¤Ö½|<&©‡r3ę@Ź£=WĄkzl¼s¤dRG­{t¤q̹¦ÜŖ¤l‘ōźzģōū¤yćņaŻĮö®ØŹĒ4÷;¶Ņķ5+)-oU] ‘ĒS_:źśOü#¤fŌyG;“œ€é]4ēŠäŖzׇ¼CqÆłv¹r«’3ŌĶ~ĻP‡aOŽł€<Š%+œ“SGC¹šI¾pƎ:šś{Įś€šŚ’`Ż7y®fĢ%Ó#a:īĒAR ƒ;P¤ŃŠīØw;'>¼ļĐE.Uvž?ZŅ. SÄ5x ¦—w~U󟊵=c]ų”jv•s­[č÷P]Üd†5a–ć°®ØĖCjqŌż ųéń'D»ųm6©e­QžĀ.4üŽS‘‡ožµ~hxSÕ>!ŚŁųĘķ®m­® @väD¬?>+š¼^dzƒ¦uŽ3š½Óé7ęśv˜FDW+ׁĘ?Jń…^ń_„|Kyāż_Qę{3Œ ’rOlóüź°xni¤ĻŗŹ0ŠmD陭ky4m7CÕn "āhąf³‚«źUD’?£rJ~ĒHüźń׊.§ÕoŠ$LåW9ä×§ųŗĪęž5ó“x!G8Į§ žž'XŲżŽż‹¾ ·‹?Ė©Yi@Œš™0†a€v~?~Ž”š17Š”Ą9"½*Ķbi%;™>"Óįד«ˆ¢œyŹĀOzłżmī4æ驪X-ę—żā“‚Ų=>kՂ¹Ń‚¬āģw¾6Ō¼/Ŗ;6‹¢&ßĖĄMå°@õ5ćZ_„aÕāøÕ6$N€szõüj}ž]^J:•äX”4Lƒå;kÅ^ Ń~%|8ų…ą?Č>Å>—4öĻ‘˜nr¬¹ąw®j§ŅQ÷ÉéššxąŌ h.-ē{C>ŽĘÅCÆæĖšū;įgĘųK±Šõūā;[8„vĻ&sŒ÷÷é^}JÖ=ZX 'Œž:ė9¬ßO21*ŃĒ!ĆQÉÆ’¾1閶•†‡gql'Ó¤ŽC#ā±ĒÓ‡Öŗ#i`łbĻŃĻų&oĘ};QŅuOƒ<Öć[{xĢvé+ —±ą{ Ņ¹ĻŚ3|;ųĶŖé±Ģŗ{G9—N¹ŚBÜBOŻ=ÓÜVŖµŃɅƒfŗ3ķƒ²ĻāĶŻJö°²Ię«‘¶@T‚3ų×óü<:Žų©ńHóŃģSW™į>\; Ʋ«-nœnŽ’Ē6skŽń½”ѬĖfķä7Iŗńś×Ć’ ¼O¤ė1źÖ×ģWGäĆ;6TH½¦ErCsĄā 3qRGŽæ~ ßx\Ҧ³….E0WĒīĻ>£ÆŲĻ„ƌ4•ŌōžÓfÜ`]3‚ć^)1:v|ĢÕšōҵŪ\Fńł2“dHø'޳'ѼTuĮpāˆCäƒĒ^µŽž‡e'g”ź^ŃRśśŅŁBg&C¼eFў*žx¾9ŲÉ«žŅ?µ†øInö| s“‘×ҹź3Ś£+čv> ³Öļ/—Ošģ1É«“.cV8Ŗ–ėųWŠæi߉ZfƒmįĖ«»{at-°yŠ3‚7}s\“Ø{4pÜŹĢn„­Ļ«¤÷·}ŖI»nĪkČ|Wmjś«-­‚,” ĒĖŽ’„s³Õ…U”ó'‚5› 2ēšĆM9ļbIrÜ(bAĻÓ5ū»ćĻŁćįÄO čŗ|>*»‹Uøµ†ęĪE!‚·”#üóZBž—g>+7•„{=O‰üū/ė¾¾z7ˆ¬õXІaÄl;Ē„y©š·ĒVŃ]Q—zĶZ9Ø5…j ś&{N¬UŗŸ1[h7ŗÖ·­ųūL7¼„ōLöśÖoˆ¼5uiź1Ź ²O÷kĻ•&ŒŖÖŒ¤ŃÖxzŚżt5×­­ŚļGY<¹%^BBGJןRŲ¾bļśõv9Ż;¦\Óļ’_łh‘ŖõŗÖī³>*šŻß…®g·wI”*yŠU<0®ŹR¹āf‘żÄ¢A揼ž š¤0Ēv–ķ²7•a.££ ć<ÖgĄ­Åų“Oše戬t!ÉźfĢqF9śõ)Ęēćęį-Ļ­õ?ü;OŠžāƉb‡I’éd¾æ°Dž¹!±Ū;sĮ#žµīæ¼Cš÷B³×m¾kZeē…D‚å0*89AļÅuūކg54–ĒĒĀˆ~"°ŌÕ¤¶—Ž}1™seu€’Ɂųö¬½ö8<ę2v¹÷Ć 'įψüA ųŸÅśgö¦†…Š€{iˆ?2śõōoĒoþźŽ7ųqā_x§K••%ӑĀɰ·UÉĪį’pēWŪCęsŁNuRJńgČ_~%ų[ā\?k[åŅõåķīF§ŗ“_Ih—ŸŁ—0\[ÉĀŖr­OŠÅįZ•™ō.‘®>”h$ d÷Ē^+/Wšż–®ĘF+øĘ@é[n »åzµ‡ģńń2÷ĄÉćm" ė¾ ›ķF+’.m•zīČė×§jł‡āŒ4놅„.Q†Ł¼i8jrPĘĀ£”"õ‹³õ²“FW/äŃõ8®c%š­žŠōƦŅŅ×RŒ¬įe…—ØķG!čŃgŠxćĆĒNŌ“Ż.źKy¤R-ē^ mŲ×Ķ:7‰üEa}sῈr7Ū”ł`»ž †xÅhį”õ9e®z(“ŠEŠåUXØįū¼ūŞŃu8åŗEH/IVAĒŠÖRśVW]„”óuäFĪw·”;°HķXŗCkĪæ›`.mķ‘ŽédöżJĘP}Æ”Q5©ė—?üD»5$y/¢ˆo;IG¦EPŠ|Sā ź†÷JÕµ}ī'|©XĆŌ+HĮõ2ÅŠ„ZT¤ŸGŖ>’’…³āoŠædÓ¼W=–„©€±Cp°¬rNGSŸZÜš’€> G®ĆuØųęŽēKÓŲ0Óõpd%¾āH0sß󭼙üćÅžPĀĪUššG·có;öÅųh’ h½R8¬£Ó“^Ņ=FŻ<Ąį$ččv5Čųvud…™ŌuõēWVv?Rįllė`©Ź«¼­©ŲyAnŖ‚§šŸW„Üé³Ę©¹œ``u>•Ī} mų1ńgLš’ÅX4/Į¦Į¢“ÆnVEĪsĄ$N }’āė=3M±ž+kø-Š:r’©­é£ĒÄUhõÆŁkĘzvÆŚ[ƒV†u†h›£q÷–¾Ćųż”h)šāĘ«ŖA=¬ĆJ’Žžœ©ćĻJėG*®ī9æ"‚ .ÅNädB€ ‚{WŃVņ=“,ٛޙ­cĻ–ć>#yvSˆĘ^Ī1v’Ņ?ł3Dā'–!"®ć× Tp_ŽŚHV!”Ī:W­…Ž—?ʼ]KɳZŽEšviŽOo„m T@ĪŐsĶwÓ<Ŗ©Ó’kZ­­øDXŗėW-µ mė4e^AƒŅ¶Žę#õ·EXš¹Čō¬ķCBÓå“7_geuäx­ŒdgĖö(鎱-žO6S ’nhh‰=æKŌ<؉¹‘QņF„u·3ʆāŚI nõąšē13µIe{Ż-@7¬ 4gŌmRāDt¹ :Pg7ŠÖ½³ak ®ŅŽww®ÄĀöīŠĢųĖlńZÓŲČŖśB_iņŚBF~qœV”ŗż¼É§éI$’7El`AZ$RG®xVĒÄ7Ņu8Ž4Cžł#Ž» M`··al‘>VĄämXŹhó»ÉÆä»Hķ ‚HTņŁĮĒÓÖYa`uDģøcŒā¤åžē›jŚMŻž„4²¬Éį‡Oz«wl.”,g1Ž}ĶBÜ@H\ąVTöĻ$†hĒ ‘ŠÖŅžčœĻMhxć®kfķ-ķQV(›8ėļAœ£Ō–Ł7@UNIż+]t8ļ£Ā>%A¼ƒA™›}¢Ėl‹pH+žJŽ@§ż‹@–ͼŲYÆ•|żßĀ‚£¹ņĒĒ]Z /I[I¦‰ņUsČo_ŠWĄ–ŚåÅĪ£5…Õ¼žPū²ØąŅfƵ«%¤ó#œŸZäāÓšū™QæØ¬[ŗŁF·D“·¹ŽµrKŒœ•!€ļҐ1$Ņ–(Öa†SĒø¬™VńU ÆNڃœ×[°*n`Hł¹ę¬i«ö×H Cq(|`ƒ<ž\ŌJ=ŠQ=SÄś¦—„h¶¶µóYC» ’=kÄu &T…%€ī>¾Õ<¬ŅKA‘^\éöÄ” –QŽ“4ŻlÜB/Ņo!’‰HĒ„Söf&oˆõėŠ ¢Ž •¾’5Ä\xÆP—tp’€qņž@«ŁB&|Z}ö£,’•–RO$õ5Ųh~ Źe‡ 7 ö5ĖR­ŽśtĻL¼Ņ¬nģ ÓŚĘ’7VŽS–ĒN §«Ż=Ķ”Vķn±%øŚX)Ļ'©Æ>­s¢0īvŽšdvC­źq‰‘ļrUĪĮÖgŠ|_ż…x!²¼†÷Oø$± ŗF“ż‘É>•ΧrłśūĮ'ž2žÖ–gÄo‹Ś›ü+ų/4¢hmnx¼»€H ĀŒdöķ_Š’Ć/†æ?eļĆą_ŁGąå¤ššoyØ Qó²’ČŻO~!ZF= œŗCZų—Ā_¤o|FŌ¢Ō5K…Ž,Joa€=}jÕÓōžŠ–2no>ųSĶ-ь/"EžūfµäG<§Šõ‰žŲųU4mK3ܔa»“,䎅‰­KŪMUtÄ·¼¹[«›q„}ø$QČf7Į·–Vmw>æ ¶÷$,”Ź“ī*’Šuin>Ėig2&)p­ŲõIfa\Ēwā 66ø†õvŪg$dŁ® źsjŚt¤ZżĒ†5»7ŽRā ĀEHēō®ˆĒ ĪG\ń’‹u„Š{[ķ/V•NÖ¹Š5@€zŸń5łŸū^žŻ~ iWv¾8Õ­5æ"¼Vf˜2ĘąrœŽkŗ•#Hž`ioų(ĒŚ2é“[j^šD7£µŽV ,xĄfaś ×Į±Ē>k<Ķupģd’i³9'©ĶzPŠZ³™ZGvg;øĻ Ŗņłc ¬_<ā“ä9„PVYWc8dfäń֟"«Ū˜P)9R屌„ܚX>Ńäy@[ĶĄl †Ś®‹4,ØØG­&¬bäiĮ§9B"ĄĖ ±ļ]H©“e²zg½)2£Līüążƾ!“šĆOjž?ńĖŽĒNłŻ Ģ3޵ż žÉŸšB_^ŲiŸælæŁųwĆÖž]ĝ6^Nū.ŒŪ œ×%j¶Ń…*vŌž<9šĆĮŚw‚f߇'†<-"}BtA8ÜBާžIĘsXZߊt½ÖęēÄ^?uņ£fp%õ<ć÷Æ:GdnŒc×5Ö²Ö|fśf„1ū6,nņūۊŚ×|y“¦]i³]/@ķŲPd/äž„gch£ęĻkic{'ˆu]M§(Łōšø:źĢIös ‘ć óģj[XĒ*“ń¤‘gē8čkŗ³wāģńö>å· …ēÓұ'ÓoµėVÕ„‰¾ŹIł‰Ī½<ßX±0Nц Ź8W”kz^øĪJ©]=œo,26ś |¬čHėü9e„·eŒGyų<‘N™‹»9]GSµžāo°NĻbWw\{Öē‡ln¦Gŗ ćhĖdš+[1r²¦Æ&—~²IqzæhVیó^YŖ\„±qm2‹}Ē’yj»ČŅ ¢Šų–ėEķŚl’Hź¹Ä}[#µ?Mńž$¹h&Qo6Ņͽq“õ©ę:4 vŅūKkGüMŅüu j’4į ¦”-“¶‚ ”ł‘Ōąēņƚ‡5OkśÆ‡ZH§¹·Ÿc„xõͬ{æ‡|Qž•s ·n#+¼ōĶkų;ĄŚOÄFkK•‡R.\ʏ“LG#8 |ēŲ_µ;=*ßWšgŠ-µYP)ņ³ž¶kāļķ֙ń@š=2i¼6’<„mōĮ'µ+“mO'ńGŽ­µA£,vŗ<@Eh„†ĻÓßÖ»xvĪ_ Į«%½¼Ęm‹–Ē˜8Éüõ©ē'‘-‡ēŗ¹•cŒŪLAŲŁĪkKJšÜV·QZxą†Vr#ó8%{š“$’>½ńģŃįoü)†÷Į×cF…Õ®ķ¦ž§”Æhżš’b’ų7Ą“k¾!oųIõ›™dø7‹Ż÷CvāIĪ2pjć]®a®.Ŗģ-o(ÜvČ? §}50K­Ī_ų™ Óž#Ųų[Wń-¤ś~±is¾TII t»U) ˜ūÓÅŅx'Jų®ųB6^ņßɎi#=)ģkóWLż‘æ²ō­bjæjŃŻŚźŽqņ…'¤ƒ“ĶE‰)ų#įw€/_SŃ|L!Ō#ķ¶°čŁćҾĖų}©j?¼1meį+q9•+ķ Äg¹ü)ĪŸĘ~.ŸÅśF‹«ėŗOö^¶ˆĀF#hœdąćóÆbųšßDńŸĆɖŽĶ„|“£ė"‚xö=+7 Śļƒ’\éšĻ…ü_$VV,ÄlAąäōąWęŸķƒ¦xĪĻ┺ż‘‡YŠH) Ć&ž g·„;l3å DÖ5=:ęūĖhfA½ćq‚µļ_¼Qk§Ų¤¦;[ć偖Ęžšµ®»éŸ[xz/i?fÖķu#?ζăę¦zWžŌ³ŚŚ^č’.l­ćK›o.ćģ°mŽį±ƒŽćõØcQ±łłØŻéŗŽ£y*ˆ«–L(ÉQõėšĘ½ńæ‹ü-§§…’µuĶ”t¹m‡°ć¶(/CĪÆµ¬ø½æ ׁ’¾ÜSōMWū#XŅu/2XćŠt%ń‚@ęŗ£øåõÓĮ×±kZUāO%Ęč”±ĒCŠīaŠ£*Yœ’:ö¢”%ć/ Yx»I¼ŃļŅf²™#c·’^æ<æį\Ť]ßhśŠÜYŚ#“hņr äõé\®VGe8ÜľZ_mnc[ul\ƒxĮÆŅM^³ųÅšM–ī??QÓaņ-$ĆŒœóŽ>Õ3ŲčTĻR’‚[žÖ°žĘŸ¶FŸcāIfѾų­¢Óuu’LC øŚ’=~cƒģMmŗŻ¼SÉՔšßi¢ÜŚH‡!¢nAžŸ…D¶¹”é_ |K•ŖGk1’GݶBké][NKČH†Ė”`ńøą‚;Š€?™_ų8+ö"‹Å^ šēķ­ą-= ń„Ńé¾0Š%’›`‹9QŌ£6y!‡„Ž%Ó.­/o,-j_}“ČŁYŌW6Ż” ś;ÆGÆēsž§cĶēEÉIĶŻŽ¢Ŗ(3znĘGQ^‰Ē4=\° £€zśŠÓ1|ķ qŽGJ ČäĀ“Œž4ČĮ•KņĒ4ĘDބЂX(9ąąę¬½ÉC1|½ Ķ\Q“‹{¶M KäČySźkö;ž‘ūjĒū!~ÖŅü2ńž£kcšKāliŅ+¾Õ²ÕH"9xPİ>äŌ¼Ž˜>‡÷ćmwŗr_~§lāEÄDe$PGéTSČ“økŁ!Yb‘|¹ŠŽOÅR&§Ī_ü įæųkÄžÕ­–¼¶Ō4[¼aķ.,»HõĘ8ö÷ÆĻß7‡¾$ų Hń®„e·S†C¢xŖŁ~ńź©8ņ6ŽIģ+nič.ßšQŁŽļšåߍ4+hŽęĀF3‚v ‹fčĆר"æ.­m^ė°ČŪwuP@äfŗé=,cQv3$¶Ī[äŁøīĄūÕNģ¤.0™Vx9ŠvŅ‘ż“’Į’lo |eų!Ŗ| ńĶäŠxŪM¾‡ģ/w6š/@ŠEcŹļĄćŌµF5)uoć »&ÓučXézŌō‘IĆćŠóƒõõ¬¦µ:O¢DŠ?–›×ēQżļ„S“MYoĪŪķŽ6†h˜edR1ƒ\’Byą;ž GūŽ~Ģ“ˆuŻ=BokNśĻ†™¢ŹĒ±3Z+’…Ū€y T÷ÆĒ—ūJÖ™Vt 0¤t¬§”¬z׃t’“ZŒšŃiĆ>•č~kY5WLÕ-¼ß)ĖA!~Y<nŸ…qM·©æā˜¦“QŃīl'ū*Båßļ Š×ÖWNń†“ėi[=@»‡ĆįN1“ƒłŌӕŠēŠó’‡jļ'Šāļ,u}å9®%·RچŽŠqŌó’Š õoˆf½¬^ŁYę¶2ķu{šü¦¾×<_ąBóDŗ“¹Óń—·R§>ż03\ņ‚ź{˜=>ųc¬x²ś|EÓŅŚēSÓ/fPÜŗg ĒøÆŪĻ|@ų7ā ż+Rńƹ‡l®­É“mTœ.0§š\M„ēŖœz-OŌøv·,,ußį š7Ɔń†‹¬¶³ Ļ ū=Ź ÉĘ vź+ęjńŠ|a–—pJ¢\ ķjHūéžšµšņLż…KÄüŪ¶—Qż™~*č>!)ż¹ą).?‡RÖ<ćVšvænį­.L–²H¹\ĮCŲąWźŸĄÆŒ¶w–‘ųwY¾u¶dßnår#oLśģƓV'Ņ_k…å`½ŗńČÅfź³ļSöx×ĶQĪ;ׯCsĒÄDį–č]Ī{8ąęŖ^X%įūŲ#µ{ŸCĪ–ęWöKB@ݱ9qаKlĮć'<+µ3™š¶zĄb’Ķ+ÆJžūGU‰ Ą2æ*OPkxģaR'ŸĆ=χu]Ė'‘q*þ•ģVŚ„¾±§År€y„ķniKc˜Ņ¶ŅdņüäUyė]—†uFŅn’6v1±Įt¬L„Žt[ļ5 0m‡šģ Ž9T2O„ œņR»„mąąJó,v˘Ō)+×<ęŖ;…=ĻÖ.grČØ&%JüŽõš–™ćŸüųÓāõ·“†ūMŌmM¬–÷œ+“ó`k¾ƒ¶§”£č߆­ÆIØ 7Yy.’łZx­¤;•U¹Ā{r+Ńõ;üąĖE£ZÅ ]]µōķŚš¹ĪąøĄĒ5Õģ¢z˜y$ģĪ=5FžĆtŌęó-¢s±ˆäŲךĶömOQ·† Ăݛ­w`p¼Æ™Ÿ²pnQ:Ÿ½¶ˆµ¬xR;9¦·šā!_1(łzę¼ĪļÄ0Y,ĶÜ-%YIė^¬ā~ˁ§6•ŃóOʏ…Gü=yošūÄVŽ"Ti’ĪO”1žęć_Ÿ¶kŽŌntY¶‰­@ā7æŻ[”¬9Vē¶©¶¬Ļ„žüBÕ|7¬i·Ö7sZj²yŃJ²*Žų<jżóżj? ü_š„†“ārŅĖĘä[©| »õ9>’ĪŗčHń±tłex[Āzu“ĶKUM&ŚS†—•sŠńŪük恠ļōŪŲµD?4Ŗ>R1^µ9#ʆ1FŖƒ[Ÿ$ė—"XZŽ6+'#Æ5>ˆęĘĢANĪrYsĆU¹y—lŽ:kk¤¾ŻTŸ»éTndŠĪi„é0·– U°:‚„ē\ՙõųD~]G{uąox£Ā&.™3›»~6ˆÕ›8üó^³ix“é«2įœöļ^Esė0Ø©iĆ\‹†ˆķĪ9ļVEš ’‹’g抮»fóC)Xō%ŠW2†čż—ųāŸüKšĪć>óHń•z¼ߘ،œÆPkŗ×4[-Ąšļˆm-“Ū›K}¢[[„ ½[ƒžµz1Šhń(Քed~Ix·ĮZx†ū_ŃąžĖk†gš(¾īģšĻ­qŅéV÷pĶix¦{r„HĒZįÆAt>Ė 6sžšŸˆ|:uK h_ĆÓ.f¶żīs‘žx©ęš¬×h39*Gjóå‡=>VŠƒąį½Óāš5OõŃœZIÓuH®Å֟4d a—8‘{®{Ņ-O NR‹Hż‘żžæg/…擇Ć-WEųń¦‡_%·swįķnU’+™1Č @`™Ļ)œg‘Kš+öEšO…­~!ü0ż¢ō[ųņ[.ģ‹} ćżl8t8 s‘_GN‚ŠŒ¢÷?™3Ī+PÄUĮÖV©§šæé×Õw9Ļ|š’…õžųĆR|E|‹q” ~d U—9ėéļĶx§‡ü ž&’…ą}{Ą1čvIpö¬1K£Źøą^¾ÕÓt<9f÷³GŅ ¾ėß žZkڶ„.æšåbs,F"nm{¾ÓĻl{f¾V_ ųæćWŠ5+Ć3‹.2Ļo:”~ŸĆƒß‘Å7Aģz<ņäē&{ļģÕū ~Ó~/ųŸ¦ųn×ĆKÓ„Y<Ū©_ż§g1Ԝ ć’ą ?²W‹<ń‡ĀßŲų’ÕįžŚ'Ż– x5²ZXöp8ŽY&x®įĶsĀė&‘«Ļ$öčĒȕÉūž„śŠ©«ŲꚜRYh:|··8É`x_Ƶa7cō\§”|Yk>ŸØ\iŗŒČšŠ±2*œķę½'ą^‹cyk®ŲNńÅ)”Č“¾KÉĄüė>v}}C­0OҵLu+3‡»Ógšę·ŁČÅPP‘ČõW„~ 艦Üé^%“MSEŗB—10Ė:©=Ķc;ž~/«ĘŅ??kPt’‹–’hśö·ā/)e䅦Ö.2¹<ń‘XžæŒ$‡$÷é^mFÉ”ƒäŲõØņw8!¾•NņiaPŃž£ė(˹ß*wGξ5š Ōoęד:Ö[ć“"³cqõōׄ|GØkæ³ę£į½fG±ń¦š<Ū+… ČŃē9ĪGzč§#†¾ū_ģŁń iŗž›©kÓ¢I;7 ó;ń_Zž×_“Æ‰üžšDחš0Mķ+”ł†÷Ē5Óčy•pm;™žŃ¢µ’Ž ŲŁ$c'½{*ŚŻ”cė]4YųҰ¼?*=jŹ1ūŸ7žŪo™·nń[“j£ŪÕbé-PŒ)”óšö°č’=kīU·µDĪŠI'=+”–ŠE –pAćé]qg™=Š^JÅ0<ūŃó¤Ą¼b8ņ?ŲČļō厒żpe všĄÕīnō嚎BĘ0yZŚ2č`ĪIµ_88a&NXąt§ŁŽ10°p{ÆZ£ ;Œ¼¼‘¶®Ē­_Óõ¹ōŌvYG“ŻOj\ØĪR:ė ×Łī ’9ās»ƒšļ ø“²døH¾`r[ ¬œY‘“uw¦]JŅIu‡°ō®wY‚9m)w/Ulā®)”S®jWZnęU n3½ŗÆrųGį›[Ū?ķéNĶ‚ÆŒšŃ0=3V4±#Ź<“c‚ŲÅxÆāxt;˃§Y‰-"n ŸPsMwfsDÖŃͬicW° pVQŠéZZ¢ńĮrĻĒuīą‘Ž©ĄĀQźyö¹¬ź·ˆāśGrpŲĘÕĻš¬ķ sĢ©ę*ć,j ‡jö“ZNĮ ʇ‘“ńŠ„J6²Ū¾ Š@w6Va-Qõź ˜ķdgŹ£(Ļ#‘@Zd«śÅ Ź1ćŠW¦Ć¦„¾f ެø ¦‚&Œ]RŻåe†!œŒ}Mr7Ö’Łń;\Dģ°āƒ4|ńĻRMgVx®sm nF ž˜ąžžõó”Oö¢ĄFböŅ{”u;}Į¢Rđ§µyŪnŅž(’Šƒ`¶ī1ļXŲv6neø‡ęŗ·1» źHĘGØŖLgĆylĒß½!X³ö™Ö7ŲŠy\gVņę)!Š8øqĄŌŹV0jÅQq£Ø8 ÕŌć 銿¦Ą>ŅŹ&ić<š^Šc5—†Ęi†Ąc|ąŽ˜ö®Bē]µµ·{{hćĖ}㊮tb¢Ī2ęøÄĢ’.ć…'žkBŪJvņ[9ē'ė•4:©@÷ h6“@€ ĖźG½g@Šķō©&žŲ€½“ė€'s^Mi3Ō„bī™®ųo.4ĶE.ĶņüŹģ‡ĖĒ”8žµē—ž?šo†u]NņH­^6=ÆuĻaŠ×/³‘½Ńģ?³wĄĻŚsö¢Ö.tOƒŌ šĖ$/­j6ķ•®O2#ęĄÉĄÉÆč{öJ’‚]~ϟ³UźxæĒćKųńńQŌ6xAŠĀ`>o.#¹@Éė׎յ:F3™ś“uš×L¹Ó-µ’źWz„W?e³Ó¤ņĢ!z(PF§×꧆ĻÜ6¶1õ¢-JČ£½¾?֎‹ījćrżO%ŗų ųböā×LŌäÕn „FÉROOjł×ćÆķšĒįŸ…®üwń ÄpųbƒZ½ĄW¹8ąc9B+¾•+üŪžÖ_šWŸų’wĮ_…ʁ§JĢ‚ń×ęué¹XWāˆ¼AāŽ®©ā½sQń.©ę<žmąŽ[ÆZõiŃåG=V‘ĻG4Šņn@PšŖ;UY­T6Xpyčj>¤„S:#Ž08u¦AūÉ jœÆRiÜęnÅēV;÷ml˜éUķ¬Īąå²; WźbmEo‰c*œÆµlĒ`Ł6ą{֐/"ÉšŽŽāQžęķš±ŪÄ„žf'īØM~±~Ē’šJ插“·öGˆ>!ikšwį)tøžėP‡W°ŹŖ»Ąźx¬jNŚ•ugōļū>| żæc-"ĒDųšļGńęe[Ķ`ڇ™ĻŻi$”€ŲŻ^žåā­>=Fé|QćO\ėäyÖZ}¤æ*÷ńƒŽ9ćōÆ9īv(™#¶ųć’ Ću¦įē‡÷n.ÉdQžvƒ÷Æ5‘©kŽ š–‚¾šę6£Æ,j'¹wŻ“ź©õ<Ös.(ņ­O½Ō.“px‘āXŁ‹ŁŪk‚?ŠĖń©=ǘ–Ā+6ŪŽŸ-flyDö‰ØN•ŗč‡pČjķü?ą›{.[Å÷ŁjČ$··‡%}ävÅW8™æ©j7—vϧŲ²Łć‡ĻÅā]ĻŹÓ-ō}K[ׂoIH÷˜ć­;ܞCžń”‹Āztś’Žu‹ .ŪŖBd›¾ŒūWĄæmWM°»šĻ€lķ ‰ƒ†š2Ź{ž”œt.1ģ~]ųēĘ>.–mCU‚źöäįębIlüŲŗWoįo‡~0ńÅČmĆę«ofPųõ¬*Hßcķ/„ß³žm:]ź:_Ło ė&wgŠ×Ū:/…ŽŚ­­#Xķ“Õśā¹–¬ĘR;«›k}Ļ2FexėG‡5GævH7%±ė€@$WM4qŌg©E¦#Į“«)8Ć ēułßĆv/qssåۃä}ß­v:müב‰„øĆÖ¼“\Ö$æ¹¼’E•Š'ÆŅ¦[ åķ$»‰Z[`ńČZÆ}o©³$¢cAĮę±¤xGT[łµ+öó­26°8Ą÷ķOńy-Ż“š<‘eOļ©ĪßAŠ Q¹Fm7Uņf[,©\qڹĶĮŚ‘=Ę”2ŹYH\a3Ą5½Ķb¬um¦Ū®õyĘō9'<X:b\Jųš)!Ęx#š¤†f]ZܬĀ{ä6źšk_ĆóŲ_¹HeY.A!‘z­KŽ„ó—ĘFJégŽĢĘ×OöŒąg©–†/c" >ņY÷#łņ’3ĻÖ»_ź‡CĆßZł’dšė‘Šč09?j°ß\ĪööĀ#`/Ұ]žĪŽ4ņŗJv“¦©Ä _=‘3G˜Tzu¬][Wŗ¹Ūyˆ%^vb Ś B¦¬ŗƒ8”nø6åę“.4—¾{KČ5g·)ČƒŽ{žµpzŠhܕ®Vå`iŃl`sƒ]¦Ÿi;ʞK…aŽ}jfvi}§%ŖCvāÖeBØŹ2ū׋ųÅ]ŹysłœnČīhkEŌ¢ŠŃ"¹„3‘ĆbØ_,B}Ńƀz pk)—=ÕŚĆ=»ģņØŖö2=…ƒÜ.”<›Ū; į}…I¤¬–÷éę£$ņŚXrA®‚} ?±%Y¢",ä?ɞ_vÓŁĮ-•¼ ŞL ŃŠõ;€›/&“xĘŠz ™l#°ŽE¹…%*|ąHš§©ŁAynāņ„čĒ=hŽĀ2|1šŽŲėj0x†žY0šĶ&c'ÕAč~•ź¦“išŽ„mø)Ą'WBacē»O jz~±©]KØĶ+3hٲē·„cėHś|ņÅhˆź„tü*e5äp3ų–ŠŹŃ­ą‰Pį‡eōĶu<ßkHēRģŹ8dć>õ›V7 {M×oī-5(õ¦{(ĮYa`>oL£ÕųÄdø’8¤ į~mė‘lŌ¶DßC»ÕuŪ¶ž!å„q“ ō¬Il­RÅ.a%•žm˜äV ČÉx'»P°«g”ĒzÓµšŌv‘-Õõ‘hˆĪīā‚£‹ÕomlīYAW€žzRhĶtŽ-¬įŖļ9˜J¢ŸŪjRkXéö¶ļ!)"Č[+ž0ÆMPŽbĶ£Åéž­ŗ3–¬-”Ži[•…+ ō±¼GŖ1—™ŚC€ˆ¹ēš­/ŠĀĘdkź°¼/ää6T`\—‹t+6µ‹Č™­Ź’Ė@Ą°?C\ÕN¼5;ŹĒó“’®ķōūMz[‹‘§æŹLlOĶéĒ"¶ō]JĻDń&žŗ|³ÜO±dČRPœō=‰Æ«”{O:=nĻą„ŸĘ\j: Żéś¬^Y¹xq×§½z'Äφö ü7g«ė¶öz•ˆaŃ·K?‰ēÆ~jēˆkŸ5MWĀwŗ%œwióŖĘş#fIō× į„qX6Ÿā{jeWŸ’Āą—†ƒHĄśīß[šV£įńlž[NTĒ2ļÜ8āøļ |=±Õ)‡ĘZF¤ś=ä1ĀŽŲÉÜ£<¹<×Ė_õŻė÷:‰‡V½»Tvż±°sIŹę\ŻĪCKńö½ _ƦkVīĪ@d"<ˆģƾ­šÆ‰ōˆž¾mcNŒjź|ƒFĢ`7Ż«73KHų£éŗ-ģ:| o;IęØ_»ŽsŸŅ°4Ɔ)āYÓW°š+k«y°ŠŃüÓÜØćŽERFźZžÓ¤²ĄÉvZK˜£Ś{ą(ļłWwšSÅ“Õ$×5 -”ki|¶ćØ=GNæ+ōc‹ųłšĻKÓ|g7Å߂Z“6ńNāAD&Łq†8€yÆ4øÓ¬õXaÕ5Mˆœ•Š’]©51—C)LęuŸźVŗ>ÆjgyžT?g’Ļ—õ9ś×šü0Õ¼Gį/é—vŚ…ģŠ«•%ąÜÜÕ©\#SSģOˆßęŃ#ŅųÅyÕĻĘ _‰:uõ”ŸfŽ .Ķ.qߑōض†‘™ēvśq_;\…ø ū×rēf:Vę·sŖ^gŁÉq4VѾõüµ™©Š»ć;„iŽń&’!’ę<čOšNG${ƒ]ļĒ«O|Aš§…Ņ}NMÅHŠįĄ†łFFGQZÓew”ó÷ďų[MÓ<#įߌŚyؒ łR¹ōü+ö7ą_µūA§_^]_Ū=¦TżÕĘā:WbZ¢%õƒŽź^ZĀå³øŽ {gӓ^ń;„šwŠMŅ&“r-œŖ0Üd ōR?:ĀR0å±łO}0°‘-ļēåÉo”ć ž3^»ąūmUõŻ""xMŪ6ōźMI±ė¾Õyą {”ø¶ÖZEµFB“j¤1Ļjņßx³Ę~Ն‰®J·¶³A˜.W„8Ąo~h] V;½TŌu8’k™<Õ|ąóÆŅŲņĒQÖ¼/³v&’YĮC €Ä2ö?•)l5—āŒdѵylļ4ūĻ(3(2)c§5į^)ńöæ©ŪG¦hŗ„-§I.ˈVLģ#ךŹ1øł¾ źƀ%·ńNŸ¤>©x²m»Œ² ĻOół×Ż_~$Ćā½@¹»¶ŽTˆhHÉLą•&¶±:Śwāœ1/…,į³{{uH£œ…ś©¬»Oė¾i:ꋭYE5Ć)ū1›qI3Óh9ļśÓč;¹ž%źŽ"²½Ö5}ąæ0©—`ĀŹBņF=qł×Ė3xÓEų„Iż› Ė:L`x„+ƒŒH„ķæć[ūxō‰­Ū:»ģŪøķ'†?Jł›Ā^ Õtæj0Įx$CÄpöAøņO|ńZFE¹Xö’ˆzƈ“/ é6ZµÅµŅøx¼¼³¹•üv×Ä [[ŅēѼWaƦMÖ y11ž {$¬s½N;Ę?²Ž¹įŻQų…¤jĖ’õĢbā b›Šdp:wé_ŚŽ[ėׄ26ĢxP~µ˜)¶·cqgØ“ŗIl2„”äU –(#ø„lĒĢ ącœ×E7ŌŅēčģĻć‹m_A“Cžā4øtŹKüŅŽĆیŸĪ¾°‰cŒ&Üż¬ā¶’'SjĘ3:²ø!q޽kåoŚsĆö…£AāXģāXä#JO8Ī8ż+Šq:©Ė©ńŒ ł€ó›;¾ZścąÄY¼ā2 īŅ-ęM—˜üŁ=éŠĶŝ—CŃæio‡:u®­māķ$BšmŹ Ąņ%0hĻLƒ_Ö7ü’ö²µż§gK/ų“ÄFė⟃mžÉt’®źÜ/Č䞼.8ī=éGį±géš]OoŖCöv# śWŽń-æ‰4{K•e[€Hžć½c% fōÆŌ GOmņfŚO™jåÄ-nŽˆ³Ė¼oįĖķ_D’;A¾žŌļŒ÷GåŸĪæ<¾0ižš7lī4{ŪO x–³ė6„3 wƒ£Ų’2=ńļ\ŸŸµĮĶ#⇀u=>źŽŅ}[O‚KIāĒĶ«gcƒßnģ}1_Ģ_ĝ%¾hś·ĮxnÉõgø7vq®8˜œ|Ē®Gų×U)t&['ŗĶ4²bč§ŅŖMŸco^Łķ]±8dŒÉ×kį_zŸŠŅ˜›nL›ojb%I_Ė1‚ē4ńnĀHd’B™ąxĻŅ€-Ļf]É!˜Œū{U$·#ƒ·œuė@¦Ó),‡\ZŃÄš8Ķ3®™ōWģ£ńā÷ömųŻįˆ0j—vZ&”y –¦ŽÕ]ĆĖ—ģ¶2} ÆōNų#ńsMųąßüc·æ“ŸI×māÓ5¤¶|¤7@b7Ē$dĒÓ'”Ø©±Ót>ŁÓe‚kHōķĄźPr${VÓŻO Ū¹Vdo–@OŻ5ÉPvŌų3ž eū(ŪžÕ³Wˆ4Ż3N†ūā'‡šļ‡Õ£ö™R6[Ō‰P²ŒĆ_ē?ćĶ PšW‹o“+«kh¹xü¶ēœ«єäŪ”»ZX§į_xCV»-§G{gpæ:ŹäƒGį^­ ÜÅsæ`Ó«“xtcĀäņ;×%H’ąz®„}oyg~A‰¶’Xž•ĻxJ+ĶR{Ķiā–ķėvĘ89Ę}ų5É'mÄ¢K6ÆųŒź> KŲ8’2S\Æ~6×ŗ|,×åÕō{{=^ÖćOÖm ‚ę9Č š~‡šŽ”ŹöWW=ĀŽ(Ė«ŗ©NÕŃi’ĮjĶē/˜¹ķĘEz‘„é˜Śõõœ·*m”q†ę­hęI$Vu݌uļ]&GØĄöæŁļ0Q”²sW:Ŗź tå„ĄĖqԁ@|Ųµv'w^8ĘMT³{Č® /=śP&ģiYŁ–˜J±’ŹpG÷«A I=“˲3€„#ÓR} tŽYķĘHŽsŸĪØiĶ ž(k»ˆ ÜHfģ3@Ó;ŻOÄśf…&m—źÜČĮćś× ?†Ž§swq–}Ą²Š{S±¹ĶŦIgz±OŠO<Šõ»o [Co ój2pv®r:Q`<(Ś”źö #yZéģ|7iį™.n'„ŗuĮÜÜ3ŒQ`2īīģļP¬S"æ89žuĆ[ź/ms<ņPå—=hŠ|1¬Ś[Ķ5ģ«}¬›\qČĒõÆ8×VźMviķ±ä7šćĀ‘¬M’X”RMąŒ-wśĶŸ•”¬V7ŒZx‹‚:£zUÅ®¦Šg…é–Ś²Č·Ņ9Éõ«bģJļ\抖jkéŗd—‰4‘1łHŅ·±½“‘å 4kއš‰l3­2ŚOd¢mæhĪ0}+”¾ŽhŻĶӎ՜csnS•»Hlš”¶gž*ޘMv„Ą2cåoJ„3Ól/ĄösŪ%ͱĮ z©¤ÖŅÅķ#‡ĖEP௄)>‡E)WńŒų¦ßįŻż’ÅĀ}‡÷·1§&Hš2ž†æ#>,kZ׋›Ć·ÓF·+ä”r@Vˆś^ā¹Ŗ¾Ē·†’ŗg £ų›Ä¾K{M£†3‘ |ąŒtÅ}}š›ā·†uųCĀ’õ§ųn[„w ¹ū:“Œō隳œĘżćō>©öYū#ń_įīߣÓÅ žßč^$šķķ¬wZœv†$† ĪJüõ“šĻÄ߇šn›Äæ ßYik’+øƒMŒā`8ƍÅŅJēźxHŽ(ź!Šü1ńFŻt„M+PGżå·˜W“*ē¶k¤Š’hķoā]­·Āų~-3UšĢ†Č¢Œ §Ÿeó5ė8)%ÕXōcHõĶ:9-€–(öĻĢ Šé<yāŸų‡Äšn­uy5¢ĄŸfM˜Ucœį»’õ«ä1µ߇¤qÖ°\xB;Ķ7XøKĶPI*…=^2N2>„ ņ+›ūdŅ‘öx™ÉP£ łéUIž½žSń‡įGü%f›įöS­Ū±tć꓃ņž?į^įæj~f³ÕVāßQ²;g…†Ö®šŽ©R?Hž|QM[KŅī/fŠ[IŌy2nēčké;»T–xīģ†ŪynČ'{Ō*>&Ģėšd†+˜Wbw`w®męŲKŽZ½ŗē…V6cįŸi?{֐»ł€ē*xćµzŲće«‹x†É"??~{Õ«·?$„+/#žkzfs0|Uō‰}g¹ĒZ”į]Uaø¹“ 2‘•ÉāŖ[’VgŗčĘźāȕ°29ĄŖk|-/¢ŠRT–Ęqҹ§±'·hzžč#ČY”`óŚ»ū CtCsžĒ„M3žJŚHŽ£wŽžuĖų—Nk˜U×{ŠŚ;™ÓÜł«XŁ“E‚NƟ¾"|76¼ƒP²Ģ$ )G‡”õŻ@ōčŽ Äž&ńĮm{ÚÅóCxmŌ$š¹TcÆ|t<{ÕÆ~ŠśĻÄūézō é÷YŲņČĆ·éÅ{Ųe”ōYnKSQBžćµ-V{ĖŚŹĘĆ`pqė^W«^M ±‚uŠē ‚GzõT’Ń×ü)‘Ć …j·8’ų’_ŠŹKI.fĄP„ē–⼫G¶¾ń]ęŃs*”ūų$łW=YŲūŒ>]ŠéžŚ7z-Ä>ųϧŽ$öŖ¾N§Ü|”ŲśöÆÕæ üFŃü_ą+õŃÆ“æųwS€Æ™‡x±Š9S^Ÿ1_)NWGēŠ¢¼š—Ä+äĖ5¬ƒĢ÷ī}ę?:ō«+·ˆ[˜“ śŽÕÕčšqjÄ÷Ģś„ķ(cLqė\—‰<› #QŌoŻmģ­ y|Ö ŲłGāq\õO©ĀnÉåń,ž=ńf£ÆźV–Ö÷1Ė%°u9 nÆbŃŚ4‹d`"’85ēUHśĢ!茒ö źXÜ齜Ę5Yį+ņ†SļÖ¹}­nŪ¹ė\õ"·G½N:XŽū%Ė„½ÜÜ į Š9ĻœÕŻOVńž— ¶ŸįwPŃVo‘•3‰+zę’} }’>Y_‰0|<ńšžÆż•ÅĪX‹ˆŁ7·÷næ…zõƋō½RÕ|§“t9õö®ym©ÕJµm-Ćn1«Mź1Y7ŗu‡‰ķo¼?ā}2-KJ‘ ˆ¦oøOF_B gY޾™XłæÅ_³ßŽ|/*ßųK?hQ/Ś/3یņ ½·öųāŸ \ĄļaØéįŹÜĆõÆF•cäńy®Ėsõą’Ę­Å7WÖzžµk¤\†% ä*æŠ×iā/>šŪĻo§ĪŚ­ņ±Pc9AļžõޱZXā„’5+5”ņ?ğj>?ԟSŌ&nI†8ūtÆ×,7&ä ³q\µj\ś,.EXó]L&m¼ÜWO¢J­·ń3\mźzQ„cø‚ćØŪӁZ–ŒQĆ:ć>õ¤]ŃR„texēį߄~'č‡Iń rŚj‘¶ė=Fõ–ĒżE|ć?‚ž3ųa¦E¬Žéšę–ķµ.S9™sŻr}Ŗć”āc0\ēҟ²ŸĒ?į ī«iÆŲOw¢Č¹ņC±7ØķÓõƱ|]ūCŻ|AӖ-*ģĶ)Ę|°~f³ė]QÆec‚žP¹ł™įW×kY‘A ē5ÄĒ*o »’jż­ŃļPĆXŲ‚Wˆ¤œÖ½µŁE;€9ō¬[:}‰ĶŽ]:źJэ¤ą0ķųՆ6l­ ‚8„<’ƒćŲāÄŠģu~ų{ā/ųŠ;ßų®ūĀ2µÆ,/-ęhdYc†yϵöׅą„ōżŪĄ’µ/‚“OŠ:5Ŗ˜#ń=‘Xu @0ŗ‘†n+Œńœ÷ōpõœtgä\sĄ3;T‡»V;>žOśŠõ»A§|Rų#ćĶæõSY]L°Ļ¹ŸÅŽ„}ŠK"‘\j2"īņĀ™ĒsÓҽjuGóOą'–Pž#īØ;?ó7’güMń³įŌŚ“įJēÅŠ8±×4 „eƒŹ·n§šÆÕŁ÷ąG^Ҽ9żįŪĶBźoµÅq-°[«+‚rČŁ0tÆB 3ł’8Ę­l>z½n»Y~gӖ-y |I†k¼7.šé&©§ ņ£mį¶¼CžqœŪ„.Ÿ¶_ˆ¾;žŅæšQi_ DZv›YhKpā8eXr2Ż›y­ŌzįĘ!Ļ2©Œ­7īĀĶ·©śqū!|HżØ<¬üqżŸ¬“xd¶"×ZX#– 3œWŪŽ;šö”ĪÆįßź~מÜīHXl›pē‘ž}øŖögæšg4©bUz/™~Gēwƒ’gčßµ?k'Āæ~źq1ÓõyU¢øÓī7dy¬„¼·#ł׿†ß >|šN•®ü>Ń<9¤xWLÓäžŪRŽ@ūmŠ–góIä:ę¹jŃ>{ųćVŒ(į„jsŃśķo™ü›~Ó?·‡>?ürńmåĮ“GŅŅųŚXnŗ•Š©ĻA­/G¬š„„Õ¶”h¬»ŒnÜōČė^lā[šžK<.•jć¾ä{‚&š&ŠHŸå—¦ ^Óī§:“6¶ń8‹#(ĆØö¬‘ļ*mnt^7Õį†mc£‘“äŠė4KÉ5]ŻÜ¬“ŖćzńŅ“ē*›±®­„¤–‘Æé:¶Ÿ:bČ<ČŚFź·Jüęų™ńUųsÆkž šõćĮeqņ®’J“ŠgœŠå«#ļ8r›NKīyg€ü µŻü-Ō®å ā·­-ęŽFi IŁHĶsĘŠe߇å’$’8ö0ĄļX"Īķ`¾6óIŅ”Ā(ĘļjøŌ²9ķSĀ>-ų].…ńł„ŸĄ×÷"ŚsgģŅžžg >¾õź×ڵ•Å“%Ģ7I'͊ė…Ļ.¼ÕģTÓ4å„µŪŒ`äqÖŗEt`ļĒ5źP§ŌžśLqÖ3:x|4£Æų„g’¤Øżģ"It#Tł”dčæ³$™DžIÜGÓ5ģRGņ•t^¶¶(ŠÓ ‰óŽM]øŸg°sĄ®ˆ»eRŜQKø°Ī1L½±·•Ä*YsĻ\Vɘ4[Óķ}·PōĻjĄ×¬ļƌo:}M4Œ3®ßé†'“gņAā03Āŗ­_\ń=ōK öīlŲnNv’“[Ah>T`Zi÷Ś…é1-ʱ]‡q`ƒšé]’…“ū%ÄWj’¦āp§!yā‰Y ŲźõOéZÄl³ŖGŠC.ަ–(õ é¢- R“ģØįž,ąqč>•œZźdüŽkÅ^0ŗÖlŅ7¼Ū2äøĻS^{¦ŲĖŖ³Įqy˜ 2}«T×B$“;] KŌ|6—SZÜ<–2Ž#ŒØ=8’©u©ĖäGærĄš=v1fŽ•d59BL­ČÉćŠō-Āz,^s˜Rfé¶³R2ę<ėĘ[隁hŽ&åIžU‹q§Żmˆ“@@=MI&Üvml¼ƒŲt§?Ł…¬ęh#yvķ ԊD³ĻĖ,s‰#B@OœgØ40±łGÆk—ś¾£zŗ•²–ŽFÕn3YŁØ±3Åpé09Ć1M”sz¼0:IĄ98ķÅYŠļ4›ėg{°ęl²(øqĻćXIęŗÅ榩5“— 4yĀ©tgµhŲŖ “{T®ņ 0w1īJó­a|‰äæHœN …ć5€¤­/dŠĮx²9œśŠč®§ŗw‚9„ßnnÜgOÖ³±“¹™ułˆeTj¤卄D˵d{ž5J ØÄä¼Gā©u˜ķWE+c~UĄÄά¦@zÕ{3Kńøx¼¶Ū’:×£hšEķĆΰƳĀ>@č+š©“$z‘Ʀ„²Ē4 ūŹ»kOI®“ Ōį” 6Žź=ė‚g\$Gį‡~)ų­āįąß…:¹ńÅÓ¶ŅĀémŅHźk÷ö\’‚hžµŃ¾#~ÖŽ+Ž ]ÅįkĒ7]²0åūŠ{Ń–źŗš6‹†ķ<)ąė;?†ž‚(,qT õły?|Yųéā-KYų™ā J’ķ„2ڬ‡É„©ćå'ҽJ²1©;3v¢+É·Ž{ØÅR¹œ8‘Ę+²'V©B9§f£e`¬Ŗ¼€–!—95It9ŪÖŅ;‹ęƒŒz~v8Œq’Bęć­dćc_©<b@$rBžJžø­X¬At$©b# sRJō7VŹŹĀ!}{s 1OĪąnśWײēģIūH~לģ:OĀ/]i^™|Éi·ś/Āč,5{²ķÕäŠzœ‡üūÕY QŌüšų§ń«ĘæµŻCYÕ§æŒĪUį9ą’õ»W/į?ßxĒS†ź{™¼øŽŹPŁ?ŽŒ§Ń%cōCżœķü) ŲDÓŚźśœ J$2ļė_cü.џGšņŚ>›•öB3D7(ś žÕ—)œ™Üµ­…¢OtåčI9#5ęŚÆÄC§ŻŃd–]Ä£Ŗ”;˜v­>ęr}Hм3āŸXŪj×r\é{vG\†ö5ģVZv¤A2¤HåFģ/zč„zœ³4­üoįŻ6u³øxīž_rŸįYŸ5M/UŃ­ °Hä†EŚį—“2lłÖōŽŚY½¼ļ0qéK«j–ZäŃĄ°„›ˆÄ~p +SļҲ”l3›ŗŌ†p4łÆŅę!Œąä1ü*łÖ¬t£­mę“ õĻŅ”®…ĮŲŽ[Ūż¾J¼,ŁČqŒ×w|ˆ&€¹Y@8ĄĮ5Ž2-f(„6ׁš2ĆęĒAļ]}’čŅN„$>@<žųśV‘w¶.ė–z"ĒXO6 Ż÷~«’“Ņ!·Ō¾ŻnZ9qŒƒŒÕĖsŖŗ½Ōå/-𸽐“[6>Šu›ˆuN'ul‚pŖ6÷¢Ā9ų4x¬ķšŽĪįm"UڧųG„q¦·ŃĖ-ļŚĀd6ÕĘļz,"®§āķO@Ōt٬`I\±ĶŠ t®|y­kŚ•·Ū¬ķ^Ų[… ą nõZ8ŲŪ¹ÓmfTr#ŽO eü  p"gīäu”Ė”6čqŸkø²ūB˜ƒĄ'µsƒķSŻKö…­Čą(ĮĶI²ŲW‰tø^A„^IŚ9Cþ"²¾?jÓįøø…ŽÜF1ߘģz•ŖĮs‰į@­Óµźz„µšņžT°mø™­c#9£#Äz=Ŗ¢öžl7Ŗ¤,gƒÅrΚöÖkspÆ,,Ū~:U`Ėwc$$[ŚĖ§qź}©#æKų$·H¶2„ūÖSÜF=֝ul#{«pøĒaRŲibīu†Ż÷}Š{Ō•_Ćļ”Į FµfĆļÕtń-ģŗ|šxehÉ' Ą'ėųPjqžTk#M8ÜXćä …¢Š)ƒØo/?e-Ąź“łēd0»łUĖęE–+}†Ls‘Ų֑Ų׉B…‚fV=€¬««k„µ–źK™ā‘sņ–'8®ˆ«"”¹ó‡ˆ|Wć-^†[·’Ģ‚_Ģ'ЌŒV=Ķö­¬Ī’ŽM:K)ōąsLčŒLyō4×¹-LóœĖƒ÷›„Z“ń”£­Å­Ø’Ł|¼CÖ²žājŚ6Ņ]j»P_\$€ƒŒąWT4©$HīŁ%Ą(Į¹¤īa'©Ōé¶ÓH ÜHÓ.@Åußš_j6néē[DƒhdćmWb,élšlźG¹ŚrAēŪjśå¤z;ZM§“2;}öžBÆŁšF]Õ<āø.ķ­-n#•„uŒ×?i”ųŸĀ÷6:nØŠĻūņ1ŪĒ°ēŚ”¢ō±Ņė/féJ‹#`Œ‘Yś|ŽŒ"”“d·FļR™ĻV'”é^(žÅ‚xžĪ)aQ“¼u­H5½:ęŲMf—Ü­vAu9¹59Ū_ˆ¶ ØXŦ˨[3y,€ciģsǵp¹½qåƒjĪą”gŽąsJt“;)i±łą=?N¹ŠŸOŌdEß ¤dqßėŚ±Ā¶ųÓAŌ|=”]iŚr;«e F1Ōž}«čyĻ›QŌż_^ĒØi·yw¤Æ9‚7}1_%~ÕœzN”¶ś—P·š1łCĢČlüÜVMŲÖ'Ī>šzIį5y®J¶Č·‚€d“śW¾%Ō”n—KgdlŒƒŸ_ĀĪØ3GŌ§’õŽf¹cJĄžIĶ}„į_Ēš÷A›^š;;…K?ŗTŸ˜Ą÷ķLlļ,¾$Ų|Iš}ŽØŗ_Ł &ŪŸīąž3ž5Ąx«öyųgńÖĖPҌŗź# ³ØÄ®O-ÓÓ4ĢetĻ·¾i_üšśGāxäH¬¼‹‘vĆsœpB÷‡‹x’Āŗ4ŗę­qi1Ü»›i\×½{?ģĶį üJš/Šu-XŽŪZÓēXšŸ4Ż»ÓQ. ³Óo4ģ).-oævė÷՛W€|CńĪ›į]gI³Šu&‚EäO€Kö+ķž4‘f¶‡ńvĆI²¹ŠęŃõNčˆŌ÷Œ2?_ʼwĘ:å÷†/'Ö4(&š ćūīw \g–­Š7Šīü#āČķ|†Ō®n£±Śķś•Ķ_xŽm_ÅXŹŅZw.{Qc7LźmµĻ“A5¤Ņ•*øa»·¤iš£ŚM#ŚżŖT! ńƒŸ^ż+'tĪg“(|Gšæ‰nŹ;wKõl”‚”Ē·s_:xI5ķ3\æmNĖģQœ)I?Ö+ü،„©³éßhš‰u'Mxn"°ø}u’Ÿxśs\·ķoćo„>'“C½Ó$Õ,N4JXLädƒķßó©qeʓź{ĒĀļZųŪĀŅk>,ƒUÓķēHŠŖZ##<ćµt’’g[x)!Ņo®åø³«ČB§éÖ¶JŚʙņ/ĄoŁ—ĒzĻµż/YŅ'}<ŗ­¤×9R2ų×ļ‚žiÖ?“Ķ#Yū.‡sk Ćö’`3ó~&ƙģT‘ą¼»š¾µxN?k~*š¾”ŖĮovZI쉓<ćN*6a'cĖō‹ćϊ/᯶ĢtTŒłńEćpsų ÷oł_ ¼e©D–ö·ZL¶Ę5†N2FpÄœcņ«ƒźs½Ÿ>2ųŅ×≭“ļ=ͬI)Žv8 §+ĀŽ°}bŚkķbå#‰•Ģ3ČJ+ sŠ·±¤Cōēį\Z=ž‡ j¶:?öY’(“¦źłCVŅ~ß|P–ėĀ· øŁ(`7ueqžµõ±}O`ųÆØšĒÄŁ’gMwel[pb˜ģ?üøųcćč×[“ūEC)r±8äžäšŗo[śŸL\xßĮ·—vv:ŒöR«‚Ć”Ę>•ņoʉFāŲ~Ā÷G‡Æm„Š€ĪŹ~fĻ”ž”2Opų-ń¦ļÄž½šę½ss}„Ų+Bf’“Fß­|r,ŪÄ^$‚ŌG2;*”©cŽ?*’-©Ėjīņ¼{[`źzWw‘JŹ#$žē¦*į+›G”|3ń2x/[}WČ•ķŻ£ˆĢŲ8Ą:fæ[<+§xƒHҵK$’8n#*¶'lg× Öīz–‡RĮōéÖdQ#ä ;ÖÆÄH|B𬾽“‚Dx¼ØĻ–N;ō¬%+šSGä4š3čŽ#¹Š5%†Īh%1¬yϘƒ½nkz3iš„”°ĖäŁ9Y"|’«qŠ~æ„sĪ¢Šō)AŸ~ü<½Ņ¾0ü-Ö<-|bŌ5-6ńnäĀŻxük;öż¤ń¶£ā{Ķ+Įw3­†»jÜCu ø_»ź§ µŽĢģ>‡÷].«a­&—ā] ›CŌm㼓–&Ż£Ø<’"+ݾxž ?UŠŽč•‚U+’z5D—C9@śÅQ_^éāŽĮ¦äH£”=?Ÿš^OŲÆTųĻš;EżŖ|¦Y^|Oš ³.·B²ź:FrŲaĘc;ŸŒ3ó‘ƒĆˆV?ņ»’Ÿįs9.§š’ć=;É»WŠ$W‹˜ŁGŹŖ{Üיȭ4Ą®ÜkӁĒU 'j…uķö>µ[¶KÆ Ę;ÖŖV8ʾk³1ĮŻėV¢!,Üć"ŌJl¾[•hĆ”ć>•jL2Xcåō¤mŲ»vĘŅOcųUųä}ŒŠz‚æZvźicōÓž ūt?ģūXZjŚÜ,’|`#ѼMn‡å“rŲŽėĖčŲ,A’e›½£f“}¦jś4 cyę™-ŗ^ŲĢ< 20G§O²«.nŽ[YŗšÕ`ŌlĘÄRRAŽŻ9ÆųÆį[=KĀ^'ŅęŅ,§:·™k9QŗŽe9OnćņōÆ:[›Ÿ–>&¼IWĆ^#–ŌĢ"2i~!Ó¶üėŻß‘żÜž@ŸJü8’‚®~Ļó¬¶~,šå»_K¢D'·š4Ź^ZøŻƒōš!+37&~Eyäb[hŻbnĪ8ҳęPœ…łó­zP}Yn@cēv9Ķ2m€‚­VI]£kg'i'Æ­^¶“ĢtŒ²®A#=Eh-ܖ›„#‘ĄĒĶŽ±MÜR>˜ąƒŲūP4XŪo•`Š{T«ņmÜvt é‚Ō¼±ż²Ī{F%RŖĄr§±üėś¦’‚~Ū–Ž#šö±ū.|\¾ÓÆFõÓŃ„¤‚1ņĆ(Üyl€æPæB„‡Lcsśŗ²šH_N`³’ohƒĖ¼äĻn~ėŸļ ƒč+Ö ŽēQy®”ž94Łć:©®i¢œK-ō—ˆšŻ‚źŻŹøģĖė_Å7üö—įOĘ}KāļƝÕžųĖĶÕm#¶L5†¤£7P(ōõ«Ó« |¹<ķŁ“Šžs‡™©XAtdø•ķŠØ˜c‚ užńŹéī!Ÿ1+2÷Ļ’Z°”KhśwKš ZĄ¹»" ąœq\äPČi"įŌ-ßp0žXžErU§aB6=Oį÷“’jxŠI„·ÖD€4€l!—Œ0Ƥ­õź^ mwÄ2A¤,›c–Ke 3ŒW§_ėYĒM"i\]YŪĪŃŲ܋ū"IŽ@$j©uw%£*‡fĻ'5čŅfu L,Vmŕ¹"·¬œZ UsŒēžÕŁŠā:uÕ¢šĘk$_µœÉśRhöö¶š„ķčQ2 ¼ń»8Č?•X?l“M&k)āx¦@dŪ’,Üö’>µē:|ū¦"4ó7 c­u>°Ō®¾™ļŖ8Tņ3ėZ~'ńˆ¹ŃŚį€%W·.c8½!JŚŸ1•ŽX)Ī[½"*OpÓČ61žčäÖl„—’Ū)1d§OLÖΟs¶ńĶ.U³Šö¤kęŌķe =A«óx•Œq|½9¦mõ*‹ķ:m=ÄѰœ± ƒŚøx„s]Iµ *¶2;Ņ,ß²ŗ{c<6„ĘG~õM¼a=„ėÅ©ņ‹mÜ})85iSOoäø –=Z“P–}ER%ŒŽĀ£Żŗ¶“>ȋLÅ@°9šĻŁķĖO~Mfe„ĻØG#'œÉ rkFᮤĪVENrzÓ·Cj}ĢGø’kYķb™ĀMC"ƒŌ‚ƀ~8|8M öźxDrĘY× .īłżkšk”źP‰ļŅą\1bP滟…sųZćĘś.—āłZ-:Y™[€¤öÆćcķr3Žxį¼Ž‘mõ'“ŒÉa3œ‡·Ę@SÜp+ō?ö^ųĆįOˆ¬¼'ā­+FÖtMj,F’ģ‘Tž&’ėō5ó؜Ļܰ“łlĪ_Œæ›ąĒkŸųWļq7€ļfūM½¦Ó’ģœą@sjĒųńąΟ¢~ŠžÓV×_Ņī#OXŪĒ“Ø[œ~÷Üę¾34ĮøÜö)Ąöo kPxĪ8|MkCosƒ)ĄĶz’†/ķ¼1اö…±H%\$ƒ¢·l×곚¶†ńÓAž<ųgm≔ńMµˆµŌ"‹g˜Ćéߨ5ņ÷Š4 ćŗ@äīA·hĒÖ¾V¬Żīz&rʒłvČŲ”3ž†¼Gā÷Ā„¼ˆźöSĒs©6ęø€&]—œ“ÅmF½R:£Č¾ųŹūįżõ·…¦¶–I0eŻ'6ņŪ=}÷š’āÖ„¢j)o®\}»Ā’²øł­A|⾃\įÄÓ=ėRŌķµČ…Å…Ś^鄓ńŒ,ƒŌ~ɅłŽö(Gµ}>]šÅŅ;ƖĒŪŪҬÅžœWÆ”ć½ČĪķģsŽ«]\•ķÅmLĀR «dhĒĖs‘é\<¶Ói×+5°fQȹō­ōNŻvĻØ< ØĒ­ųjŅāŚŽH.£.A<©'ÆōŖ^#³HJ»Œ‚¹%ƒqŠ»į?„­ŚŪČīØŲŗ×¹ŚO£rź}Ŗ! ®§BuéĘpĮ÷„Ō/öŲČąU¶;VˆˆĒSę½j5ŸQ’US&ęĻZł»āGŽ&Šž;=gŒÄļBćAÆK mĻ ĄanĻ%Õ­5ŠĻx“IØ+[ö‰%Œķ•qŌ1ė×µA x*ÓNTŠōUG» ™dn­éšś¬68-Ū¼<Ėc ŗ’GŌžš=“ZaÓom!ŲUݘõ)ÉüłÆ…¼Q)ƒVŗ²ó‘‚žu×*vGļy[wnē–jRĶsrńĪ@zg¹®ĒĆ:jX–žÅ+ Åy•ϵĆBēaÆk×3éńi—®g²ÉĀ0ąZńKæĶ©]2éfC“±ŽßȚć; œ4¶:÷…ļjĶfčŻrŲ×Ҿųē ZV•cā}‰‘ĪėėaĆ/_Ž/~kŖ“81M±|7ńąŒ¼wįĻhZ&£q!!omÕcž.?¼?*ŸĆ’ƒž6š{ŻxĆągŒn|C¦XĢ“Żčęm²¼$üūS” g„zt„ŌłŹ”¾Ē)ūBžÓžŅ~-x5ļ4 “ūSf<é~W8}Ēé_Ič^:ŠüUocudM“Ź«$Hćo˜„}åßhiI„d{”– °b(¦w;qžõš÷ķ£ń +§ĄŚ3.ļ'Ż$o–‘Ž;:竵Ļ -O„ü„-„Vš†ņÆoÓāF­ļĻ$zW‘RlśÜ#;H|©¢oہÓMWøŠYÕŅ¢/]Ov2²9ŻVšmöØtKX† Õ „wścČÆ§tÆ?ˆuķ*ĀģD-į`QqŒV¼‡=LZZMüIųšßö€š,’>"čIp±lÓuXP$ö3…eaÓ}{׹>„į| ų·ā‚~=qy{¦°67Ūvż¾Ųņ’`ūuśV5iu5”‹»±ō¾‰/™ktT,”øļZqC‘3/Ļź+Ļ”lĻ¢ĆII ³&Õ\°GN;żj…Ś#oŒĒŠ Ź…6މR‹ÜóMgO½¶æ¶Ö"žC,$•Trø…uÕę¼łZy·–Ģ„ī?m—0–;žœņ—ķ뚭w4rA,LŠŲņ 2}¶<«Äv»āYA µ‰#ūĄS“WĢ ¹‹&r8éķYókc;Ø»uņ™Ś1šæeØO$„L”cĪZŽ Xߎvć·„3Ä~‡Åš Z‰a»¶c,KŒ‰uś÷­ĒRŸ.ŽxrćKŌŽRŸ#įYOo­{oõ -mŽ9Ö6‰H tŸĪ³sf|ˆģ®§ŠVf&GJĢ6ŃØóTæ$ńUP$pJŪl©ź+F,.AĻĖÖ“‹5åG1xŵt'kųVōVѲØī=}ėhĖŖ9*Ąéōin4Ł’ī ¤¶u<2±kCU··Õō]kϚ"ĀŅ~šdIķõ5Ń ‡™[™ó÷†¼o=–«'…„ņŁC"rœē.ś[ū+~Ūæ’eĒŖųYģ¼oį;°‘źŗō»ŅÆFŽ^vH;7#×5čį¦|p&;Ėke˜#QZėt÷Mz?æcöąGü+öLųŸńŹßÅ^/šĪ©šā©fm„¾»™#µšE9_6ułrAo˜õć=ėō›Ąf©ćæų‹ĒmāOų«įüeaŅī,eūa(œ²£Ķ{ŲvšŠ’)瀱*¶"wū)Ńš•ļ™<äK†M gaŚ»ļپ•ā ųƒN·†+«¦÷Īu’ Ö1ģ~™9ٟAXYFöp4ŖągųÆMXōyŲ錷Œŗ*§†yE}§­Ć(F”*ē×ҽ_Å0Ć'ƒõk™RŽ X"i’6Ф)ĄÜŅ”ĪśUÉKJ]{TŌ.ešošwŚ ī ǵ{†—āwøš=ē‚5;]GNugy/lŁ(ݲ3ł×ätŖ‡!cēh÷is†Kbæ»~Ųąsļ^“¦£Å4dõ÷®Y¢•C±‘f•p vćW>!Ö<9ćŻ%äÓ>Ż¢LŪfeņ2Xzõź¢Ž*­½ŃƋ_>Ü~Ļ«¢ų~ĒĆ!›S³EšŻpŚ`Ž=óžs_Ÿ¶š\RżD‚2ØēĒj&!KVuL|¤T-ņ­héę’é½½zöiG”ž^x…}{7Äb¹ÆMŁł'hžE‹‹¤Y†3 ō}*a>JW akъ?8ÄŹś×6ńŻ»ŖČÕøÉäŌ÷1¬!Q!”c#Ļ*£ĢInĒgļG8Ŗś¹ŗø sHUĒ\{ÖŠZ7c[QO.’ŽDŻ‚HµrvqŻ›”<³Ź‰=Qœ„s«…·˜×~ēčkŠō«K˜#!€qœa[GcžNęgŒōĶ\{&K*ķć#>ø¦i^ÓNqķCd˰‘jņéLĄFJ}Ž:UĮć+­27h•%FmŲn3A”£cšńMā4k̳~īxJåō÷k ˜aŽ3ŽŲéH“ßōŁ­×KÜĮ%ÆĢAé\Ž£å›iŒk°Ųw ]NŻĖI“¦įźj’›-“Šˆ[üƵ7 š(b–WMē“ŠłćgŽ–×N}2ŅāHŪ$)ĪhæBąu­z'»‘€Ģ›²XuZʛTšEAęO'Žjdō¢ŗP\źęśPˆÓ[ć–§įNCG;Nę^ģvSX™3VŠå»¼Šņ IeHūĀŗ?Ix!Y$ öœ‘•ÉR gøxŅhć›>µČx‹Oŗø¹ž"ˆūN[°JaĢĢż:)£’GĪŌ"­j© #°łj9u¹V¹ĮŽx‚v‘ü¢ū½Aā±ZŌšŅgc·‚y5f‘CZßĆó[“’Ū€Ļ\Õ¦š¶”.&K[€ v\Š £I²ƒč·–›TĮ2°$Šōm[ķ$ Źē ĻÓŽ¹*#hŠdŚ®¼šåвӓļ;Q*» ‹,Ó„rIöÆ×ßŲßž ńSćę›”ųļćć|ųU#‡*᣿Ō"ė­€½O8ē¹%(Ųž–ægŸ€g½?‡³·ĆĶ3JŹ”ŸVHD“\2Œf#$šO>ü ōét=ĆÄ āOǬėÓ9Äóµ‡ŪĒ?™©2“6ļ|1揈:¾›«iö~Š¢R”u sz¦ŸsÖ¤ųšŖo‹˜<%gmoꩯ%ĄŻ¹«6OćA¤ĻŚQW+ÕxVPĒĖ'¾+„mIęÓXĻ+[:|Ür1L6:Ņo/., 2n‹ļ’>Wś¹˽6vIͤĀ=æ2nAö  ų,Š£6£©ŁŁ6‘4ĮK}ä׈xĆāž—P²šńyįŲ—(Ä*jҚóWö¤żµžü²Ō®µĻ®«ć‹h‹ŁÅg cŲąÆÆ”Æē«ö’żø>?~ŠvƒMń.æo£ųNf-%“+I_› ć5éP¦LŻ‘łÓy2°š'"čį™G 3ėŠĀI'Y™‹3ĄōÆA+}Y–䔲 üłīGJ”%ŗČ„Édżkx=!#j™]Nß§JXTĪĖžļlžD²ävų ąĒšŗlM„NXTMō&׊č,4v™Q݊€2Ģz(õÆoųAš§Ē?¼EgąĻ„ž Õü}ā]Fb¶vPœiĘsŌ•–§M(ŃWģy’=š×‚.¬¾,ž×šÕ†±t­ö~smS‘ņõcź:{×īnæ°ÓĮ’ōMį‡-U™"Xöƹą“.qŪ×½yu*_S¶ĄŌ|gs¤fĮį­ ÷W׃ō܇Xˆī{ō®2ę=Yҵkļ÷×zÕźøXmI]¤…ĮÉą ÅK«5(xkڟ‹­_Ašü~š›”ņžŃ)Uc‘Ē Æ9Õō]/Ā:üŗŒO§«2yRÜ#oYņ­бOž%T1Ž\ŗn"ź3ķTWEæÕu[k-–Es$¤ćmL¼„•ΆxgĆ»®dõ h1Ū ĮōĻÄž"¹ā<±Ū žøÉā“Ń~m|Zż„¼wńbś}2ćY{+(\8·ųućµx•Ÿƒµ{ķK$/2LwāļoqXŌ©Ų“¬}išsönšžīk½jŅuŃÄj»6äoĮėĒÓņƱ¬> ųm­’ĄhŠĖüņį™OjĄĪSī{ׅü£č|°E2[§ Œ_hōÜ}+„Õä{8`]?÷…œ)Tź½³šŅÅŌ8µų}zŗ„Ž«Ŗų‚ī<†‡Ź¢ć¦:f¶ō‹]MøYRŚ)ö·7×"ŗ#¦.gŃŗf§nŚ$RE=ŖĘŻ1Œ~ć^5Öd›i“‘¢t<•5Ŗ‹0s<(Ś_^jØęākrņ_w½{R:žhŻ]E@ šŁō4IX–ū{=ā$­0v‘󏥬Hµ;»IĶ͊N~•%F6fܓiz…‹]]4Æ ūŹ+”’KKµ 7yÕ—bŹ:¦•h–ŠĶmv“?$äņ1Hn¦ø²CŖü£żšĢgam£%ę™oq3'NO–x?ZĆńµ°ÓŒŃÅĪvƒŠB<’yęo·Įū°pŲ=kjĖs#˦^,VźIĮp ö¢ĘŠ,‡Lµń ½ćCØģhNH uāµ¢n”&Ė“’­ėķX¶)Détæ>ęą#͈ĮĪńZR/–īØūw™¦¤ĢŻś'¶¾L¹6±”fŹ”=×/¦Æ‘ój”lóīkMD‘“®ųzĒTö;€ŠÆņØėųVuś“Q»ž0rŌĖQ¹LjtĶTīŒ=‚Ø œē5§{}©Ė¦āēldœ)Ēē@åO§jsŲ½ż„ųŚFGšŒFćōĶb[.ķŅ+ĄżŠ8¤Ł&^©&§äČm“Ł.¶ƒ•R’nx­] Ā;|ĮhdĄZŹģēFņK"š‰;[©>•ŅKyyˆķ#8ć­\:? •›»kŗÅž³å ā…#Uē zśW-‹?–^ƒ½J™q&ŠŹ`¦E,ņ¬)fŗ±·š5ŠŁIĖo9©w(—j[N^&DÜ20xü+ŸÓŚųėrwęFX›ųĻ5“#ŌNG“O¢éāÄÜŚ\Ē3–É©gŠń’ėóŚ@ŚŹāķŒ›n?væŽ?żj±ž9ć]śŌ6ÅŚT ¢0c ūsŽ­ŚŅŚÖ(§6Į¼“ĪqA¤gÜę®ō«›«®Y•įł×@<—pÜM:$Œw$szĪV"UM{-‡Čq#“ƒČö5·ö£$0Ż/PqXø#=ljXŻ̗¢±ź+µø»kM:Rņ. “£ L„”£ŽN&,¾\œÕ/\ˉ‘“ėÕNxZ¶LĻŃõIĪFd^É·€+ ^³]ZऒDś€łŠ9ēĻłõ®i&j„Ųć®tK唖Ń½Mn\ŻŚĘ–Ņ•ī3²µ“}*ķŅūO ¢åyRˆPht^ Ōę½¾ŗšÖ›“¦N£‚ų F{ÕKĘ9ń’ƍZo éöÖŅńD~g•æŁćž½O0r¦|åāˆ¾6×R¹ū^”£^ŹT•·Č0ćIb;’_ƨДޯA:«\]M5ō³@Ä(\}ĆĻóҼĘŽ)æš·Ä;MLG~ņ+…wbJÉč£ńQ9\u=Kā…u’xqõŪ;7‹LkEžā%ĪįŲę¼Óö`ÖSĀZŽædĶq§LŅ:¾ē%$=@?iĢ\mŠökÆź7Óźrė÷Žeם˜™ ł×=žÕå¾9]ÄÖģ$hÅŲŹ£måX÷¬‹ę„Ł2ŚŪŹäL±ąoīøījÄś½­Żž”l®®’(†<šÄR5ŒŽ{CÓu‡Õnl䓸}$¦RUéŸLU "[«/Ģג’Ä­ĄŠ‡xlzŠR:#„Ø],6F=„žHå±Ś½'Hšž”s Ķ{=äW&ÜżŅ~hÉģµe1yšĒˆ5énuežŚėģQ*¤3©WõæJóƈźēS}M#hŲÉöl@ź}ź”ĒŁ? <_įĶ Ą3Üjwyøœ ¶AóńĻ>µģ&šü,ļ†:W‹åu9„0¼‰ø©^pOé[r’Ż/Óļu=>ā}ÓTY„­×£Üžµģz‰į·64ŅyŒB…#‚Ž•-XK§mā»ļ ]EŖXiHīų>\j; rÆZūƒNųXß~É­jz„½¤ØŅĢsŗ29ąõ'ަäJ§cą‹}2ö’@Žén2F%«åˆŽ4×ō-`xFeC„’¬‰Tä–#?„3mO»ÓķoŻ.U×iČt|ʰ§X|7=µĢÜIfņ¬eā\ˆĮž#ķA¤eŌśKĮV:v¹tŚ|7y"Įäd;WYāļ‡ŽE¹ŌRk[å ynœĶžĆõ „3į/ųMķn/VXgrŅ! •8ć'Ҽ£HÓg±¾:Ś0:šJ—X†:’ö¦h¬¼ń–ņóÅ·Ś©7ÓŻO p\ؐ„ ļc '=«Ń4’‹Śē‚“ųyāYu½=­®\I< Łå…fxŚŚĻRµÕ“mwN·Õ¼1ØĆ&ŸØŁĢćš ©Ü¤FLr2;Ö ja&óÄ’‚~Éŗßģ‹ūOx’ąÅ՛Zx&źGÖ<%#)“ZJ弰篖w)Ļ÷kņÆZ³xåd+…RsF¢’ŗó_vń9jŲĖļ¢Č« 즔š_-¤Ugć°9®³Ž[•“ęrT¾}ĒZlŪ8;qŌęƒH°W–v,˜ĒćI€ÄžT ×µ†6q!v@Tņ*ŪČ D\š:ÓæA ¹ÓķµH$“”>8*ČåYXt!‡Nkū­’ƒ?n¤żØ’gųg߈ŚĀĀėųu‹8ןSÓ8ĖĻ. 0™9lTÉhn~łjv¶†ƒo Ę= pRjn”¤¹Q$*ŅD[¾qśój­M汳ēńƒĆń_…ž"¾‹ļ„/­uūxć" ķÜqМõ÷öƎæiĻ„ŗGм1āļ 鏠¶»Óf1äÜY:³2dĪ8ķĶdUćÆćæĆ»†æõ-5žĶ‘vļ%§–*yM½3޼:`ĶÅIĮ'µwӖ—9ꢣÄØgi>՛)rź­•<ē é9Ł.wmB¤0ć9Ŗr+#ƒ–=GQ@ī$$ø¹éżižZŗ™ U# š‰DØČdGg=óV·+ڧč7ŒŗšPøu!0*ōļƒõĻ‚_<;ńK9·†U[ø€å¢Ü aŽćÆįWĢvAėcż’eš'Åæ? ~?Xj1ź¶“i‘iśē•'™¾2¬®G9õ$ń‘_{ų^ꌎÜi°ød?¼·ōt##ĶWs[µ8åµøVv®<¹Ōwµó‡ķ_ū8h_“ߥ|)¾‚ufµ\ŹplõRceaŹ‚ISģķ\°ó}ųėš¦ėąwÅcĮ𮕨ų~åī®"žÖä’līŃȖ'n™Ü=ˆÆõŪ2“%—Ź ķö4¤;@xVMWK·Š'ĢŃ §ė^™ąŪ6±Öu+ē¹kƒ¼Fń² *‘Ó§”®Z¢3m~ĻįėZZF¦Āēp1~2O8ż?:čt’Ē©Ž]čRĄ÷wƒĘoŅøąĶVĒÓæ īLjn5 į6j–šīņ›ƒ“£ņ?•v6–ŠKs,ŗÉ“ż ķ„.‡=C“ŠŃYļTR8ö¬ėØ<„‘²\Žqž+¶.ēfŹĪęęĘŪxEµŲ;ŽīĀŗ«KO¶ŚD.Ažąœü½ˆ®ˆlgĻŠæć :Ö}pk•@v·b+„Ņ­68”*£©ØŃ3Óō[Ÿ²²\TlV®³¬[ąŗ½|c<’hę6öVk‹«Y¶«Ćڤ³™ķƝw£ÄĒŖ‹Ō.vöŗ“Ŗ\E 6܀{ćҼ£S»ń׋5 fņ2øłs’Ź1’ ֜čŚ>g²éśe®“˧IĘA2“ōÅkź6 §X¦·k"eīBpyؔŗ ńĖūkvųŻ;”@HŪžrūC„éé7™Ÿ½ķR3[•“Łn‘Ń.ŻĒާŅmZåžG\7@(°&&¤¦ŚP’Cźø"£·;¢0šĖż(±¬dPµŚNTŖķœ]TzRj¶ŒLĘJ’7­zsU»µŃå—2` Ļµu–ö:~±įGń…=ŃŒƒ$`ĆÜŌŲ®frQŽl‚K»ä@FZĖžŅēPO6hČåsĪ)œü–m ŅG !Aź~ -üÉP¶9üjdśXn»ø xĆłL6ŸJę4ų<‰Ī×ĻZĪ.ƊW;x šõŲ~ķ†ą:W[wįøōż) Ń{†r­Ēž½93XŹĒŸ®…©Nņ=¼G ĪE|õń¦Ž}BÖŅāźsm‹ćÓ±5ĖPī¤Łłßć/ ż–GšÅQ¬‡zžŁļ\N¢Ķ­ėg6ždQ°`Ē#sC^m]w 'Ģ„ŲśóĀ^*ŗ½]?Į:Ö”qsqĶ’<Éū¤÷Æ~ųž ų[ćx/ō jōxpJfū+¹*’–ĻŹA^}[lĻé’n½OČūļÄz†”ńWkŲ¦}Võć Ž§8čCšóā‹ąė_IńmŒ3č·*֗ŃN¹3Ćd{JųüŽĪ:I z5ü3ų™įÆ üAńOĆ="k[½ ®¦}!ł{vbT”=ԜWÕSź"ęņĆI‘£ø·,Ė‚Ź}?é_•f“5hN'¢ųsÅŖŗ“či%Ɯ°ł‘Ź[6Ī1ś į~3ųLjö©xJŲ5ųˆ».ļ–R=+ć1µ7¤|i„_éńI}}Į#īēĖ>•Ģj2 ‹Ń+»ĶÉ5ÅŖgÆEō<āŸĆūwWŌ“ōG‰‚±(:63Y üYqsöŸź¦źI­ć ‘÷ϧóÆS^Ģu)č}[šóĘÆį;yō­Ve?ΛޱöÆwŒĒw7v³-Ķ“ŖA¾Ē‰V±óųŚC„H *±*ÆJlRČcņÆ¢£;Ÿ1^6e·Śæ5G4Ö»$!fķŽõ×Lā›čGqbą³NÕĻ߯ŚZ—äąü¼óƒ]:_”©ąOĆįĶdī‘šŹą¤ ųU' ×ōī:¬>e¬s3‰#pϧ­a4iyÜ×d¹ c=ėŲ<ā³sZĢ«’p¤šĢNU¶˜6Ž ÅsŽ!×ā°I­ź4Ō»Ē"šŹ£A·”āZõüzUō¬\˳ä#×ėā#Jæ¹Ōµ‰õGo±¼ĢŃ«>ģ‚Oä+ŅĀSwHū<—)ÉE#Š“’²ż›ĆöØČ|“Ś sĻR?µßŚxF_ <ś†Ŗoc§5÷یOčL—.XxØõfg‹¾#Kc¦É˜mŌ)L§õšĪ¹w>„©K89Üß)ōę¹+Tgé™U$OacJTW q‘^…§Ł…E.g‘^lŁ÷X8čjj¾ŗŌ4{‰ą†ćj®CŖ““ג\ų{ā6”‰?ü"šķ‘é$C$żF8Øölō£ŌĶńW†ē½G‹ žĖS #k{’ct'§Ƶk\x6Žēlz”ĀI?0ĪŃéĶ\Uˆ©Fū:ż³x6śĪĪ6„kug’Ž2­ńœć°$ó^“šļćŒ~źpėžÕu¬ĘW;²āD•+Ó”#„vÓØxŲ¬ ģ}?ķ!šćĘ~8ŅõoˆōRäČÆ ø¶Ł†źI=9=ėō‹Ā’?ą›æ-,|-ń‚¾źZ~ŽīÖg€¤`c‰#ś÷zT«Ē©šœK—ęP£ķrū9­lśłN|UńWüĄ_³ę¹Į択O‰ś5„ŗ¾$š§™w©\"’"”1łÕø\‘Įģkł{ńŸŠ§ń׋õ?ĖÅ£¶q$¬$Œ°ūŌc'T¢ĻĀ N}‰śĆĪąįļ{—VŃ­—’¶ž{›z©iµØČ=Ez„Œ‰*+ÄxśöƽOč5;#¤¶™ćA"*ōÉ8ę½/ŞńW€¼?¢ų§X±ŠćĆ„D[ŽFr±ŹĄķG‰ź=qDbŪ:źÖQGĮ®§x¢ßÄwæeYźyø“8Ų ÷÷­~ÜxkN°›Gš·Žķę‚h.£+ĘŁqĮķ]Ōc¦§‰ÅٟAŲŪZŻY„ĪšČNw©ūµły’dųy¦[ėß³ēÅk;Ÿ'^dm>ęDA™Q”_łė[T£ī\xLSs±ó/‚tSTšl¾(¶žÉį·¹6³Cæ÷‰čŪ}:×G$¢K}…óÆ {—Uŗ(EČ;”ä~•ŸĘ+6x•ČŻdĒ»±`« ¬A^¼Wh÷:EŅióZČcūÄ+g¾hęź©Ų\‡DĖīą½č»tP3OŚÉj]Ńü§ųÉī4»Ż^=!LlÉ+x}ėĻāµ:EķĪ•%ĢWM˜÷ÆFĒzžcžHģmaß Ļ-ķŚ {Øm¬¬CzWE9^ҵ5¹vQœQÖŗ›[–Žč29Qõé] FGšųūLŪó_Ā®ö2…Ą<ąŽµ“¦Éå ¹E ‚3ҳ–är„¢»[åĘ~cĶl[Ŗ dvŹ0ü©Ó,.Å`#%{SY$W š1Ö·EœŻō-ŁuSƒŸZܶ Ø[sć4Ó±•HšbīER’“Žõ„§“72}‚P’A?ČrqŒūÖ“äpŌGĖ>0Óįń)™įxŒs1Żvg·é^¹ xŽ7Hfßņą‘Š×} ‡ õŻS¶Ö"†ĒQŽŁķęqł€$œæZūūöŸöŌżŽõ}CÄ’³żī•ć/ŽĘ²^ųgP˜Ķip:«G`UĘp •?…{+3óxceu2Ģr¼*-Öń}æT’Č÷_‰š]«‰ō=oą’şŁ×Uųwć+Ø~ĒyęÜ3@A8bŖŹ‹}M{'ģū’jųšóĀz‡µO…×GIˆ&Ōō„ŠG?‰üĶL×­Nŗ?ĻüĖčĒĀŠ,%u+½.­·}^§ėwĀ’Ścöcż”t O|5ų·į ŲåŚĶt–÷00ź…YHüG”5īśMžŸ©i“G„jŗ¹lŽBȆ9Ö7ō$dӊźS?—󜧗֞Įźšž“ģśžā/ŽŗĒĀ©¼]£ų·į½ūµ³^iRhńļYLtD"LšWÆäßö‡ż‚ą µ÷ĒsāO‚¾xšĻĮ¦āk-|EŖĒiöT‘‹|«) ĻLGJĘjčżOĮ¼ó“ę2̱ļÜäiiwwmWŹėēŁžāŸŁGö®żŸģåÓ¾3~Ī’|=(g}JĀŪūBĄÆÆŸåuČÆ/ŠüK>Æwm§ų{Lń>ÆØ+|« ¤–-œ–*£*½yõ)3ūˇ8£-Ķh{|U8õī½SÕ|Ļ„<ūXü[·ŗÓü+ińxOø[­…ä+4±› ˜zsMż­uŸé÷~šVÆ”_ų;\’ļ'‹ķ1ŸāPxüaÆSŽÆ„†–gUš›ÅZʙj֑yÓ“qS1źGæį_v|(ų×iāšv“ćH/4[{½F=>_²fFŒĮuü³Aó9žOĶwé?ŪļÅŗwĄų'įī—5Ę…©JžUŲp%|€J̓ÉĮāæ"m¾ųOÄŃĆ{må—ĘmĄRĜžź*%cē<7ĒՖcmŹē}=FÆĀé—zjŻižUĀȧvö!|ד~Š? æ°"š˜{ ńIå]A#Œļ¹Oć\҇cõ_ķi;\æ”YŸ°[Wzmā=BĀęĘėKheH‰(IJ‘éPō;hbī|ÕāųÖĖū!R–/¶FYÉ"†ŸŅ¹/ŚĒć….ü/§|5šmŚĶ}$*n¦ŗŒ`“ł‘ų×<äzō+Ÿ ų[L.öśm§2µžI5ėÖÖ³i²Ég{–·1¶ĘG*G\×+}ĻJ3&×-ķļģ-¼Ģ»GĀó‚9ĶhŁxƒO“°„ŻŽˆ§C‚­ŠļYø»ŲéRŠ€ųŵ;i—@_?#äläśdt®·Ć2ŪŽĄdŌ,Iq±Ć6µiŲĪNäל%¹Nœc‚É0ć{LÓ£#pŻ+Əć<ŹxL§Фķ(BmzضærD¤+Œö„Tø\…ļįā“8Ŗ¼Ķ¶2Ž7¹¾"D1€3œõ®Ž{“‹AkŒ%Č|¤ŠyĒ„z ."ZčqVW·ŃLó3™Bõ÷"½?JŌ“żRÕ^/™¶ņŒpĄ÷«äīy³‘Ü×NĮV(C|¹ŖriŽ·RįŒēÖ“HēlÉyu0!FźGįW-–i],¹4)XōM/GV)^eߏ™OØ®ÖÖWKw/•ŪĄluŖMō0”¬gHÖ³†‘Ś=Ć®OS]®ˆś"ē`Šåv7Eiõ19˽=-oe»ˆŽ>”õń=»]”8ĮpÕMˆÓ³“ø@“ĄÅfėŠy9— ųØļX6g3Ļu-`Į°VEéO­r’jńJńüĮĆcVFeŻJšŌ@œ)Į•‰cm»^įö9`i]Gm‘‡Żā›ckq0!ƵRZ“I¤ŒĒ/ž3Ś«Kk§*ŖÜCøą3S4е¦Ēn¤[,ō«xOŃläŽQ3@=蹜ščgŁėŽg…māDļGjéµWómI…>lsī)Ź]6Ū3,æ1sÅM±±,ųėĮĻjęeźvi7SK'—äĘz67WęÄ&¹¬ÜŚĄņnYš3Īi›Dņ]TÄpĆäa×=M`Āņ±rī7Ļ5œŠE‹MiWHŖĒŒĶ6MCķ2¼ ‚ø-ž„šĀNĮaŠÆ•pÅŠķČ­ūjŠŚ-ŸŁ"߂„łĻÖ²F2‰ĮÜé¶Ļr&ŠfÜŹGŸyöRĄīČ8;‡ZŻ"N7P՟ķM “īÜÖUŻŻÖ„xrĆ0܈5zź&ŠŹćvĢņģ98Ēõ–k$¬I?²üŸöżōĘ×d~14 5;ÄI£I27”ˆGč1ĻæZżDøŅ­u]Ÿ$m¬Ÿ.Ņ Q} о{œµę–ž·āe†Ēįv„éV1Źcš`XQՇ|óźvZĮ=Įڵ§‹ā•¼I­Ü°’i$}ĮūøčųŅ9¤ĪćXų‰i&©§ų`ųoRŅ5r»™Ē0L¹žO¦k¦Ō|A}c§Aoš®9ƆOsIȓˮüKki©Ū[]Ü ŗČżü œWO5䟲ęć•'†”ć+ćw0[G©ŻČ,ŸNŽxĀæ½rśÅšō—o‡ßSŌÕC 0VśÅoNĘ|KūI|zųmą}.Ūğ¼E‡m”ÜĮmmtD»ĄČÓ<`×įwķ’Eń_ĝ9ü5švdš·…„sow19œŖ’<’G_­wŅ”q3ņʞ9½Ö/ļ/umVmfłŲękŽr}³šņ;ķRźvTi¦—+‚Mz0§cž¬Œ¢K"Č č{TlpAĒN*Ļ6¤ˆå,Ū€ćŻjX•Jnt8#J KQĂ0øb;{ÓÖĻĶeĒÜ÷nL‹]›–ŗKż©”Œšźō’jŚŽ£m¢ųgCÕ¼SāIœ$Z}œ ņ;zp8ük9Jڳ¢;Ÿ·æ±’üóāwŋ;ā7ķHŚ·Ć/†.‘Ü-„Š—ÄH")vō=:×ō»šÆį—ĮĻŁó¶~ż¼„h‘ŪF!{dz€Ąž[×'ņÆ6µ[°¦3Ä^4ƒC±»ÜIāM||ń¬>灳“ßEsƒCÖ|gfŗī©Ø éqķeģixūÜż+’NęÉĻāh“+$‹ĀPĒo!‰Ž69æŅ¼÷LŌąvŌ.|EŗŅɼĶ‚ ÷qRi÷8«}^ÓPKÄ“oģė ́TmBĢ™]Ų’ė×ϟ> Ųx]š÷Ľœ×Ä–Ń>[?Ż#lēœgņؓFp0YOw1X[÷ē½…=½«¶Ŗ«)į±Įؓ5HÆa.—nn²&ݬpĒ„sPZé%īOœŠd€ćņ¬£ęk&ŠĘ—Ŗ[Ü„åŌŹŒ-dŒ•ĒLJłŗx›ĀśĢ¶—VżäF ꯓĖ{t­t6ŒQķŗ/ŠuŸ°)Gž(å°y–MrhüųoŒ—Č+“}Ś™46Œū«ynlMŻ +ąŽ‚¶4mc¶ ģģä¶jČĪR,ß[^[ż‘ˆ ļ›ŌńX]Cö•ņ&_5¾`=qYøjŁĒwsrä ŽHéĘk”މ$ŒVuÉ»Õ(X "Õķn-&‰•’ģcz­sW—C7 õ"Ø7PóōųX(&.O³tżKäI0ež#Ķ ŁC©ŚßŲ²ŻB”@•Ǻ»ŠāŚŻšN€ćƽaé³Ü}Ø5ÉxcŽ[ię­é5-pųźžā‰įŃ!šĪĘ+¦6Ą>żŁĻq^m£x#Uń\,t[ūˆuˆņb·"`99AJ MLŚ;ĻxŠo_ÜŽėšŗyp¼k*ØŻcœ×Ī~6ńļˆü{ć-×D¾–[å»_.åĻDĻ?žŖØĒ Ņ-#ąĘ“«k:]„ŗT2j3ŪD&nžvd–»×­ŻžĪ7–~Öōļ}?[ž ¬qĘy ĘėRäc*‡Ē%ń߄ļ|Sań ³ių>P[““‡ä·OÖ¼ņņ ;ÄŚģ‚õŒÖ+1§-Œ’½č“Ņī ž©Åuž ų?kāŻCJŌ­ 恕Œ¶ń.Yˆän=…&kŲö™ü!kį[[ėčŒvÓ±ĪDn;Ó±ā¾kų‡įÆL§g¢Kis&e;ć ö€s‚˜¬årŌ®w~š·Łō{FÕžŽŚńŌ'¢p~ńśā¼ākŽńtš'ŁtėķyYe–Ü’dćØėļ’ź©(ōĻ…ß<'Øx‡Pš«iog;+4 'śŁcōĪÖøļŪź)ā ĶÄ`·™ĢEcøH™Č?–+t=JųXž:šZĻm­išmœ'ysņ­}sńcIšWĮ;ŚŻAĀwĖoõøĻ>ŻmŠŹi½6ųq5ŸēÖ5Æ),<؉iĮłHĮĄüN?ČÆLųwćߎCā?ėzŶ³g'ś5÷>\«ž=³S2#Zń‹¼S©ß@ŗlЬP±Äėņ·fü7ż¤ž*ųCSńǁüQ«„‡‡/Ö&U]Ž\X÷ģN?fu*FwŽ~/hŚVØ_ŲĘ5=BR»,ÆÓŽ~käöŌ5ėVśżÕŲ”3˜rģh¤zU·„uDĆ ƒHÜ)m€;šõ_|/ŸDŃķ®..mµ­36%\G9DZ ŽDy_ˆ¾(ĮąKø(ż™ēŌōķjĶõÓ5"`„łóˆ…>§łåžšv÷WšßŒōĶ÷så!’į ĘĄœb?QP¢Ó)¼5į«ß „ī±§ŚĶuirū‚"Ų1ž?*ć|E¬ų£X¼/%¤Ö°‚RH¤ąCÅh_9ĶÉ£ź7"q™ ĄēłWkyšžźŽßĆś¼FOģę—.øv:ŒūqłŠL§ŠśņßZҬ|Œ½ĢöĘՒP „ŒŠłžjžŽh4²Š#®v/ ēūÄ %Óōo¶$1_[†Ō%a‰•;ē·JƒZŃõÄk”IęEw,bHŽŃ"ū×­zĆ]h‹ØYź\,…FW‡ķžüŸŹ“|Eā]G÷·ŚiŹ6óŠö 2Ō¾=ü@ųmćüB“ŃcÕ-ĘbČĒ #ęė¾ńιķ ćY|g¢éĶbg²Š ­Łw,L N=ų­;KÄß²Ē¾ŲiüŻź6Ŗ“ÜZÄHß ?y°Ļō/Ā?‹zĒō½J)a½"`ncvėĻR>§½‚µŒj=.ż¤ķuūMkI–=3v’ńļ’HćPŖ§§#ҾK擲™„‚?õ«÷×=3\v±1Z#‚Ō,ąO“$­.įņäō5 ė“ų?\¶Õ,¢Ś¢Uóq=EoŽ„Ö/x·Nń·†tĶrÉJÅ4(e‹9ņßłõÆCYSĢ.Ģ cn,\ŗ™>"Šķ|E§Ėi4-$NøœųW†Iį÷šÅ£hķ$Q9*§ę 3ß5āf^ķ™źeÉ6ŃņĻ“ĖXµMVāŽÖ8!™šTZś’ökń”¼ā/„śź ‹Ėp6<»exĘ{Īž |єYéU„„їū4ülńŸģ=ūSxWāφį0ŁY^Ée­éŅĶ›0\īė•9ģE~z‹ō߈¾šĻÄo ÉφõŪoķ儂™eŒŽ3ĪōÆx's‚¢±ŽxW]ŗŠ%Y#Č,8ØĶ}Uw`š¾ÖÖżģK!śā²™Ļ;ŸŠšZ’Ų¢ėöØż—Ūⷁt՟ćĆ&©hČ?yØXĢšžļ•RĄuČ`>õ^-ÓEÕå½ķ£ksfH1H[Ѓ‘ųVxrŹK¾æüwźrĪ'—\ÄÉ((Ä’O»U|­‚G ¼äkŅ9\lO¬Č»IߓŪŅ™:¤{į!zžt "#@¬ˆ£ięƒ3o|–ĘéAQ-ŪŹČp¤qĒ=źŅ¤·’®éĒńPY§c»,ŒÅJŽ2:×Ō_±ŸķCāŸŲ£ö¢ųcūIųi­§Ņ,ÆĆÄD°7Z|¤#°Ēu°ĻCĻ<ŠØn¦O¼aᯊžšļŒü+ØCŖxc^°VŅīa}Čźź…>œ‚=ˆ«7Śtk5Üdż¢$©ÅZ&Ē”ų›Ćśf”¤_XÉm Ī©DŃH¬TsѾ¹9üėóWYŅõ’jxWT±iu’N^ ż/ģ‰č1׏÷¹®AŸ‚ßšR_نĆ]ŅÆ¼MšžĪ M:ą®§bĪ›Šī‘„ĆņÆēŲp.£#•9Žø®ŗ/KõLåUøgÉ]ü”¦#ĶśÅIHĘ?ˆWiĢ6L] ×Gs[‚Oj˜Š˜Ąx‹Xż˜<{4w¾™T›sMm#÷O?.ąxÆķĮ÷w‹„6ƒiv·z¶±Żé³)u Į>ĄśœséYTßS©w>гŗƒV²Yv|Ž0Č„śUižÓķq•ybę0GUō® ­H?•æų/Oģ1ˆ.mæhčq¦Ÿ®#.ŖcO’ÓY‰É_wĪEŲ[”uēÆ?ȶ”Ęķ¦‚š/Śc\ńŖćĖ“ŗž›D¹hnxP_ j¶ēĶņķ]Ą9wž3_Yé^&±dž{0ĪģLŒ«…W-DŚŲēž#Ųx{\ÓcÕįŒŲų†‹ccrūžCó®ÆE›NŽ-X±Š+}f4Pīłˆ?žÆĘøš5RŅÄ·~/×|ć½7⦔DŲ†ā'_•Տ9üėéM2ķļå¶Ō#+¶Ž§Œ×^Ź{•k+;ƌAojŻŗX¢‚I¤ˆH„‚@ÆB™Ē-Źž¼Ś”G¦F–š¬AXŖćq­Ļ\M³ĮtŽd/÷wuSė]PZģĻń˜5Oōy%xYpŹF}kœ[™“Ėľ2ˆ ­żÜzāØŅ;­3xj#O?ŪöŒ!Ō’9*ü|Į{ ņ*¾‡ļ^ę T)næÆėŠõ|0ń/ĀxόüāżJĻB…[Åtgū#ö! ž’>|AŠ~*ųŹ=cÄžÓõ_+ꯓ ĖŌø^•óXåŗ?DDÕĻ ¾ųwaā_®ÆįmJ}ā6—"¼ x-žĻ®zdzµšoö†ų—/ÅŪx¾5ÓüYnŒŒæĮtFlQŪÜ×Ćę8Nkµ¹Ÿ>§Ś©ń8µxSQ¹91:ēŸé_ChŚ•‡‡¼=§ŽXėqŻ[¹l)³ =Ž{vƃĢ0Ī,č§#Wš„*Ņ/Æ“SĢź#Dƒ–^ę¾Tń†$Køŗ†6¶˜õr „HķŠłŹŖĪĒ„JG9ᕇXŽM2õ ŅmŲŃ©äż+ĮOOsD©»•aŒIćŃiśŽ‚‘¤r«˜dd•čS øÓoEŌlŸĖGfłŁG?”ük)#h@möŸ4ū„Ū"²ž2:ŠęOŒ­|.É5ĶĀ$Źßw¾+–NĒ„‡Ć\ē|OūEx•­äµ°»‚;Uå >¼WĢ÷><ń,×fķ¼A{wsę3ī/ĀäōŅ”*j}/»GŅ:'ÄØõæ‡W‘_˜S^P±žs½9ł‡æóÆ3Ņ­ooeKKPó³ŖrIükźrŹ\Ž÷Cō>ʹ*s#Ū|ąökĶjÜæ:g·‘ńʰ@e„ŗ `žøÆ”•Gk³õ¬²‡=EsāßųžMfōŪ[»@ŲǵPŃ Ģ] ®{ןVGź˜ŒQīß >IńGQŌ¼;„ų†ĒDÖć·76±JśIĻėXŗø¼šŗ|7ć=0iŗµ“”^OĖ:ē_Ph§M=Ļei”śoąč¾/š’ͤhöv–Ł|ĘĘC83ųןkö²iØŚ–¶Š“ øÜ+ÆŲ£Zu[Šń|š7ƽRš’ˆōčlµņ”,õ˜!ęžfīĒZüĖŃ®ügšāfµšwā^å׬–ŚįžQkœ$£ÜŠĀ„ lzøe͹ōīÆcc{¢hš„ Ģł%°8_C\§—gixÓEFÅqņŽ sÉ[cŠŽv4.4ė=JŲD˜‘†R ę¼äų'H[»€öpm—qSĪĢją#ŲŽĆįw†ōŻ\źėa ƀ~÷%G Ķv÷:V“5ŗAoĮ&ß»Q*ŒÅaRŲä³RÖV ”£ÓŁŻŻYن†}ńŽ0{Ö\ŚŌaйm©żŖŚH„,€år:ŒśWҚWķŖIšVūį?Œ“ŪMfŅ܃§ß»žņ5#pĒQÓ>ęŗ)Vp•×õ}†mh~]|N‡QÓu]{TŅ­§Ō4;¾dŒĖ6Ę7c銿7ż†’j]Ļį½÷Ā_ˆĶks„ƒ‹;ņŪžÕČąaŠģ”VĒĪāp2oCīŸ xæģ÷sé ~’éŅ –)£l¬ƒŚ¾Rż­o­> YYéÓÜ FŽČ~ä·Ķ°ƒĘ>•¼«.V‘Ł‚Į“ѹ߅­ī“%¼LȑGF¤z×r³E1;NÆī}®_M¤RŒM,³Æ˜Ŗƒ§½W8v æ7Ņø&včXņ@Ć{ÖÆØóbK“† P7ZĄˆ@ € „nI4;Å#7™±1ŠL!|zŠółķn“}~hfĖÅ+D‡sĪ?ZøJ6=ŹO*1.įō>•‘ŖH—9-VŹā·‹ŌĶÓĮöm ®1]:\4*„[=ėsÓ Ėoķ‹9­;˜ps‚¦¼’śuŪ,§ī¹ µL¤f鞛a½šēĆ}V/ éž%’Ļv˜²¤ńešƒžž™ś;šļĘÓjž°¾A%•ģ*"rŽA$dœ^…93å1ÓSћž|:ż§¼uąoˆÖvGX’6}7ZBŻY܏øw޼ö=zoēāÓIńWĀ‹;ųIćkø›_ŃÆp“ÄH–Ķž®P;1ÅuĘ«ZŸ=WĢī{ž ·ń-Ź_éśÅ’‡5,–Ó4y'¹½Dų‰ū_~ĪŃĶāŸ‡’|Aii” å_¹Ė›Ō1ģ9Ļa]0ÅŪCęó¾ Āc©:XŖJqóW>…—ž Aū|Z Ūkš’ēŲL$k‡²Ä—`™Xē HīÆÕļ‚Ÿš_?Ł×ĘŚv‰¦|š/ÄĻ„Ž+TnolC\ŁB悼Q²3×ī“Žę»iāāō?˜|@ś3R–Śä–¤oī·¤¼“{>×Ó½·?F|’ż¼etl<%ūHxıĖ1YźN-äž#ć'¶f½wĄ_~ųĒĘV’>h µÖ„F‡Q“EšŽHīFs‰£PcĒĢ9鎻"“?“3Žβ)N8ŖS¤¤¹^ü­vŗŃś\ėģ­ū3ĖŖjڽ·Ąļ†zoˆīݦ›P‡E‚;”)9ó@¹ “œƒÉėšüĒż¼?ą›?æjmSĆSx/āo4ĶoB‰„±ÖM˜ĄIeEcŲt²©‡V;øCŬv2”‹ĒNUaJźĶ·hµf•ßnžHüøńÆģūwüŅ–ēÄ’ķüw£B‡u÷„®Öń“ŌµøĢ€wĪ0?:żż—bæxĖą÷Ć?š֏Ć„Ōņhz¼/Ė”‘£ŹŹ¹ å‘ųa‚ēšį{#śæ5ń÷#žĶXŚ3ę»QåŚJżZ}uuŃ3šöŻųÅć|qń>ćĖKEžÅ»{­īnA…I NN+½ųMāEŃtļj²ŻßŁé„ż’ātxā›odŒ’x®&ĻŁņšta†‚„š“¬}?7“˜ZŽīÖį›÷€†Üz’2Ļs\OĒO"×­“->]BÖeÓ£BŸ|ć@’ŸZ®R9ŗ5³ßĶi}{h‰y…WĒO„fßj—w :Ÿ(©ž#ĘEdā3ČÆõ ĻQ·óOŚęV$ń“ø5µ­ėްӭ5½–2:[S¤ŹHł«ā'Äł4Ū;ßkž,ÓtĖ3\ŹœgŖzż+ńköÆ’‚¼h>ÓµÆü VńN©F9/.ćŗ®:ż+Ō”D–ĻęßāēĘωßüK{āOx’÷QŽāS#Xo>T~8åks=£‰ćša’H]Ų `+ҌlsT«mŹó^° üĒ·±¦“DŗČņ9uÕ5*w"$ņOŻ'½FŃo9ć4Ķ÷'1 AKzóWb±2® ć„jeŲ4÷Ō&õŚ{ n­6‚ßNx«wke$­¶4l–vģŽI©”’5„o”ś?ū’Į7>?žÖWŚ_ˆ¬­æįYü2mé6Æy2ÕĻjžŖæe_Ųóö`ż“k-7Āŗ>ńāĀFæiÕ§…]ŚBĢNIQģæyÕ«·”čR§Šś‹Ä>+Ō5 ÓųĖS‚ŅĘPXĘB"Ą.8=æõÅź÷‹u]NÓKšÖ“e£č)×ør7æ’_Ü×#w;1,µOxrõķm ±ŌüQ*’¤}؉Å*å¼SØß­ĢŅj*ĪN|”ĘĮÓ ’¹O9Š[­M®¢·ā…~ūtzž“–ń§†®!ø±øMNG'tØtķƒŚ˜xEīo’śśėģ1oó<ØĄłżµtwwvÖĢŃé6ŃŚa>mƒÆ¾hĶu/A¦K,’Č×lŁŪœćü+Šń‹t{«]Bū^Õ­ōčc@V,rĒ=¬dÉæ?jL±ŸMšœ¶"÷¤ī’N0yķŽæ<5O^xžęóPƒSøŗžc€ņīÉćZR—cX3Cųq®ėémņÉ8$rJąśāæH>ü³š=®—Ø³ĒØĖ#ļo4oeu®yK „PśćYš]Ÿ‰.…ģVq‘»qB3…ōę¶“?éŚQy”·KeS–P¼ÕŜņŖuz|NņZĀū§Åcx„µFŒŲ-&µ$-ÕM3 HŁšśĒ„éüØŽŽõ&¹]OY»7SBŲAŹąńZ)X‹³Ģ&²±³ŌęæRńĖ+~óćėŽ•‡3Į6£åʍ"HozŠ’ģ­m sC%¾dļĒZē­ķžē’†5ĮJ —™yd‹OFTf.>aĄ5BPš˜ŽKÜÅ:ø!“Į’ėTĶŲMhkŪźśv—©[ŻĶmŗĄ6Ž]ö½ć jā‚ĪK{'c»ćX…Łē­aįŁ>Ó%½ĆB»rŖĄa^qØ]¤wÜ2ły9 ŠŻÉlu4“Ͳi¾r0ł\O’ĻNæ–dŌ4˜$ ¹f)Ą¤ŻŽ˜Źå[ưipmˆHz ŽžĀ¦Ń“Ń«Ü$2Ŗ±n ŌÖNEŚž†<ģQ¾R˜č}*֜4ė$TŠåšvåé°śVŠZ˜=ÄŌ¤»•@›c¦ŃÖ«Į„iövļ5ۗrå>“åę#Ļī¼GØé·ąXŁEpĮĘŠķĆ<ś×u©Žéóé¦ė|‰tGĢøą­LXykƽ“²ü]EjŸiwŠC2łq©Äy§b¹M­£Õ4·Łōe8.0s^w ųGÄŗoöœš”p]ifP!(Id'„"NŹm3ż8cS$ Ŗd½¶øXP$ĢøŲU)֟4× q2ģ‘›°­ż-:Õ§IķķīNĀ€ŗ“ƒėTfü\šꇧÜ2)Š)Ą%W`95?o“ꓞāÅĀ®N0Ÿ„1kcēėfśł"k»ybl‘½Z»{i¤ Ø”‡ō%Š‚}#MÄåŌI}«×ąŌ.ķ¬ö©Ē+qžy{ā(ę’x„ÓäŠRvļeėī+:8D¹eSŽƒÖ€dŅG$±, œŠēļ5 FĮŌ<˜ć4¹P$QÓ5­6ęņM*iāŠģ¦ąĮ#Ś®G!Ņn¦gŌ${b Œā™\ŒV‘.]M¤ŠĒ?x©,@ĒzocĮ=Mg(‰6Œoģč®Ų\-«8cŽW­w~šŪCvedĮXuČĘēYš©jVVڤrE2gv®vŪĮójpH‹ L9\gšv(óĶKĮµœ§ģ/BīÜpŲŖfĘęŌ`õļ#ā}ļ‰tæ Ū\Ći¦M&8ف%ųīIō„¹Qė¾Ņ,sŹ~7|.°šĻ†tķgįŽ˜5+%lcą.?‡ŸjųSĘz5ŅE+\čw–Öķµ„’1Ā18Į9ā³°āō¹“ki¦_[“ŒöȰL{ŽõŃ]ŻŖč²Ŗ0y ˜9 Žø•"\ĖÆįf÷ĀzOˆ¬ćŗ{—–.UIś×wį_ ų—Ęö·0hŚD÷·¶Q“*œķ4 ˜Åų}¢ė·^#՝¬Lv–ņż˜¬ƒvéAēµQųēk®xŸÄė¤]iWf½¤ZŖŪ9L(VÉõ j”ćšM戒īoķ3¹ŃFņO%ś.§/ļū°Ć‡čEö‡²æĮŻ?āƒ58ķN·•#3Ä]ŽÅ‘y ķž?*ņßiļĆm9¼S«(’e$IonsĮč?:×B3•CōļįgÄļü\šF³ź ;V6l™˜*( ‚{f¾ Ҭn|­ų†ūImn®&håPw S~“tĢÕCŽ­|sćöĖÄ6SjS*¤O’?oē_ž> jžńŽŖśڃŲķłwł-ź{Ÿj䨔t7…‚č„6z¬37,ķÜś‘\WŠtĆ„źaŁ] eݐxĘ:cń©NŪņŸK~Ģ?N™u7†õFŁlĶū…Ļ(¤ńü«ō+—Œ”ˆ‚}ĒPk£”,Ó°Wž`Ģ|ć¼óāōbßN]VILQEÄŇŽ\cü+ŹĒÓ慑ہvŁń·«ZyåćhŲš@Īį\'|GØü?ń®ā»É-ā71‰‘IĆĒßwø®l>V{’jĢū3ö‰ŃōÆų@ų—¢ŪBŅģmøhĄĄĻ÷Ąé’Ö5ż ’Į’lų©š£Å²·uSāO;Ļ 1šŠ7@u'o›Ś½(ĆGĪ”Æ¹ūæ,^LLT•AķҾ™ųWć'Ö-“F¹`ļ x»;V2އ9ŅėPiz…ĻŪmDŚLŃ“W‘÷ćaƒ_ē’’fżaż’kųWƑĖĀ_Fž$š™ ūøZF-5²Č8;Np¼„IĪsYƉ5éż]Ny.‡ā޳o-½ėü¬ ’N;Ā īÄä ŸĪ»¢ĪIč¼·;[jŃ¤#ęģM2yĒȦ ƒŒuĒz©.öĀ®c<Š.v6)&-¤°?…i%ĪĀø-¼zvŖŠÖʑw.[ÜĢŹ„ĄósžEiĮioؤö³—) !‡­čtEŸŲü•ūnŸ|3Ö’c/ėÖoć?Ho|*Ķ6'»Óى1•<±RŲČģĖĒĖĻõ fņ¼H ­žż¾•ŠåĀ6[šé^Œes’k Ķė›”.½=j“D y¶å*‰åčD¬»0„Ą'µZc“Iu8 e/2u³&}*üPy‘“‚\ tÅEŲHrß?N*uŗuÜ oU>œŠŗLź#ųIīań‘0 nc/9d$ud`ś×śĮ;æj…ż£g/üYXĆkqŪĢxKfUrJŸÓ4¤“;ą“GėV©ŲČm.tū„“Jæ„MnĄšI3ėÖ„y.¶-äP“ĄåeR9d®*&P8_Œ<9ńÓį/Ä…~!y Ń5ū'&‡²øĘRd’i\#ĄqŽæĪöĶųāŸŁ’揌t}kH]U‹S–ĆQµ™|ØÅĢņŁ01¶UŚąŽk;jG'Cä­^3ŌP…ėĘs^ńąŻM5[X,·;Mꥮi”r"¾½,w:ÉŅo6D«2Vž¬$ü9»ŅÆ­ā²¾‚ ū¢Y‚ć$žõŒ·:iŸ?¼=cˆmķžā+›Y£Āī,F:~uĄÜxoN³hōŌŌ£‹ĢR£]p×Z…#ØŅ4>+K.qö»ž$ŽcĘģu⾁żœ>"k>-i~(·²fšž¤ƒOÖaB0ł8WĮļļōÆ ”śf2§_ČżųŁūZų¾ųÓƞµūZź!Ź»ÖX’–sé]?ģŲŗtŻx\“¼×š%ŽóM72ó3‚1×Ół|¦6Lż§Œ½Ńä?“‡Ā’ x/ćQÕ“Ky“cz€j6sop[†q_~Ö’ õx›įļÅ’ߌĖ%¼K<Œ% ‘¹Xޤ`×ĶיЪdųcCŃ|CąMĒ2YźvZ’$Ļ~l‘ósۜžuąŽ(ńž­škÄ·VwĆT½ų}u:µ…ÄĒwِ’ł<}>c¾ƒ>·š·Å­ĆqZx“@×,'±– dŒLY‚;÷ę¶<}įßųMō oxn{MB$żģĖWR:~½}«ä1XcŌ¤|uiØ“ZŻõ”Ł\A)FR ¼l§æz—ŰĶćbu)āOķ¬€`†Øü«ŹöNēd7<¼|Y‡Į6W‰ām>ćķó. ēīēkÕ¢ńē†5­ŪTÓ®®.nf°«€€ōĮõÆcsā)ž×šßďāłäŃuIķā»ZHÜ4ŹłIõūߐé’i²E‰£ŻµN Ķ}ž”RgĢćh‡4ˆī]Æ3Øłp+¢—OŽšf„›u$ōĶzŽŠš=ld[ŻA>Ł…œJ™Ē(>jŠ· ņ7‘ōFnęžÉĪ™k«iÖŠ w)\źOJłÓįwĆo/Œ¼_aag,2Xó<°åzƒƒĻzŪŠ4õ=n’^·Ņ!1źŖ‘KAFtģkᒌĢ!ń‰ÕtØĶ„£†žąĒ§ėXŹG³„¤q¶2\’¢¹Ä-Ąö®’?…ŗŽ„„Ģnu-Ē%‘( ž/Jß †ēv>»[}- y’ĒœŽ‡Š×՟ <,ŗm“z„Ņfw]Č}+īpXeF~‘•FŌģŽ§Ę)I²›ĪĪYz÷æ>~%xĶõ[ē³ŒÆ”Xä±§^³HżC†0<ņMU§Ų¤ģNĘažŻėŌtØ#Š(Ė&Žżyr«f~„‡”}MÄ·ŗÓõ]+Ä^Ō&Ņõ«7ߊqøg•`;*ę’j‹ŗ§¼yšŽļP“‚ŪUNxŽPß-Źī‚=OZé£TUéŪSõ[öń—‡|Kš[SO;ķfĘųŪ]Ę_t–҆kŌ|aį+Y¤¹I]Šg|nr+×£k4ėŚV2Šī“k¼”ÜDA'±SŠģ`Öķu—°Ķo,2sņ·Ję’¶ēr©ƙ ‚>÷ śŠ˜ZĘTy€lõM`Ų:H£{¤[H„āf=ūWØŽµƒ-‹¼q)$‡=*¢®U:i3¶Ō|;ØxoĆZˆļ‚I„_sÉČ-œ`žŸs×ė«fmļ°łv¶9Ŗq:ćN-ĶŽ“<Ś.« sD䤈ą"ē©®óEšÖ§Ż„×‡ķ­“ųŽ T@2qĶiv"xHļcŪl1Œd‚¹ō«Ś¾³„i; ±ĒSßÖ©ĖBéa’<ā;h%wČļĖb±ļbK{œDĢc黌¹'©źŃ…=:Ü(\ą óZ²DŅlsĢ;Šēhī¦eL¬3øõéXØUE e,8ؔ ±cQŚĘ„ŁÉĶt÷wŠŽé¶VQĆ IFõg³zā§—CœĄŲįsŸJēüSlŅAc+”aężįĮ©"DÖ¬’£Ēœąsķ[0[DQ²»›o=+U.Œ‰3:āZ2Oō«P\nEÉļŠŁI™ÉhnŁŖļĖeSŚøOxZņŪċ{µ?²ē„@l–äõķŚ§”Äj_µ‹ŪŁø1ŒągŅŗ» ”bvøĪ}h‹³7§•v``uõ¬Ū;….ܕŲŚĘäMå#gwڱdEu4jq“Ą«Œµ9g±£a­ĖaęfĄu*Ć<0÷¤PieŒsœ×D7<śń7gŠ“ļi—½N/!ó"žtÜb`Ż>õšŽ‡ÆOgćŸč7é²{;“åq½;WM7ŠłLŹÆ*»?cfé"ųšŚĪÕo¢0ĘY?ź°=?:źü!­'‡õYōe’(7HP )ū×”Lłj•/+Ixrā!r‘,ё»Œö5ł]’šD^ż¤|āūX"Yu=5£˜…É™cR[óŖ“ŠŚŒO1šįņ œ8ä2zę½c[¶—Uš¾”ai w7LREŒŸæ“ē\µ'c±Qŗ>*ń*;^m®¬%Ųˆ¤\2‘Įśz›O“¶Ōķ– Ģ˜ó“īj#‰’818+ī‰ī|1erIK+W¹år‡åśr+ŠžüRųįš/Äpųƒį'Ä?x>ż~铺pŠ}ԜŌr+Š”˜In|¾sĆø|eańPS„“iŸ«æ ’ąŗ_¶'ōó¦xßĆ>ų®#…V9ī-ŚŚēpź]£![?OĒ­~Ž|’‚ų~Ļ^0Ó-#ų׹ü4ń_Ü»žĀ×ķ–dƒŌwģAś×¹GžēńˆæEZV•|Ž|Æł$ōł=÷ī}ŽąÆ°ĆOgk§|O½Õ„™~ęĮ׏Ļgó ąż3_;žÕšW?…> šNæ üūWĶƾ§&9dēX×9a’zõķ]N¢gć;ōvĻjāį |=&żētŻ—k_WŅž§Č?šMߣ“öųĶØėæhmOĆ??hCS7ŠŪxŠų¤qĒŽ6ĄYRbXœļŻŠqėżźæžų«ĮvuO†æ5@”mtŸģĖsklpbŒ.##'•ĮäŌŗQhģńÓ<ā 6uģÜē ł];]+Ø«Źėv›{ź–›#šēöż˜¾x³YńWĆ’‡ńhcQ‚Kkż5ęk‹)ā~«åKøÆ8#i+ēŻ#ž %ū&ųs⦔ńvļžéP]Ė]&KõO±ē;HŪ¹”s€X=k:˜ecåp~>q')Ō«ĪÜRÕ+iÖŹŚėÆ~»"Æķ9ā/Ł ąW€õ}[Ā2ų{įŪüöš^›wŌ—2Ęf`{ēŚæšŸ’šP/ŚoĒ·Z„ƃ”ń‡¢ØņnOÓåhĒˆUĒLžuåb“?Ø<Ąf™¦㳋źżÖ՜–÷ōķÜüź›ā“x›XŌ«ŖŽŽėŽŪ¦ūR2;0š@ÅYѼAcvξYž ŪN;ńŖ7Ōž—ĮąÜ‘ķZ>”i“ „¬(²†$0ćŅ“|9ā’µ^K§ź1„@ÅTƒ’ÖØGµJ ²Śjj:l’ZŖ: ņ+²š-A„WWĘzr+tzŌC”ń „ŚŒGS³Ž7½ļœ{Um_Ķ“q¼ “§ øäR’=­ %/ēF%D™ąÖ­ŻŖ  Åwa·?śHfKĆR£kūYF>–|÷’Émó$‚8Ėco|Õ”ķ½œģ“¦åC”õÆ~–×?ĶüLģĪīŲÄŠ įdŁŽé#0܉ ˆ²0čGQ]4ßCÉ©#ļQ¶‚ź$–5}¤s·•®ŹĖY ¶!;Ó½hrKråö‘isūĘRxŻøW•jzdPźĢ<čĶŽžŌҹŒ¤nǢ闰Ÿ“†hŪø<®}Ŗ”ŗT™ąĖłww"¶QFm®§5y©En’$€”‚k¢šį¾™J–‘­Ys‚ 3βĒPū1hQJsŒÖ®IŖN¬¬™iAėœPa&Y·Õ^+ø…äģŠ“–^¤W„Eq°g!/҃3ÉüY6”¦Ī^ÖŠĻm÷œgéšf§©lėū&Gs>ęĒUŠW¶1ī€Œ«ŽõÄßY>vą±<“ŽƒNDmųwJø×włhY”šs޽3GšŻĪp·7;Ž9ŲƆÅJ6(jŗm£ł’ÅĮ&{W¤Č¤H’HäsA”ž†m½•ŌNžfģuŖ·‘:2JĄ|§° Äµi!p[vUĄ« r#œ,ĒÜõā6iĖ<6ć|$(öéRYź·(įToR~lō²mZłH*mĀ©ĄĪ8øūķBÓM¶žźśO.Ž%,FyoaM#H@ų/āĘ£ā]RėKCi5¾čv‘’¬”Ɲo`ŠåŌ"Œ!‘Ļ cš©+hk(Ųć58f¹2X±äāØYŻÜĀ&Ü rk)­nÅ©õ»“mSÜK2®HŽ}+œ¹io'3Ė€r8Ķb.sFŅź[w-÷F~µÕ/ˆuėˆŽ Ž_]Jæ*ģ g×waK•żLšOģÆć½ž”ć{˜ō»IAÄį”v>õśUšcösųqவkc¤^ź0D}ĄŃc 9ē?…qž6ńĪ—¤}ŸL¶YõFfņ-ķ MŅĢē°QĶq®6>½ż—æąœ?hķKMńĒ(|Mš7ąüé¾ ‹¶ėSU ²¶Fct8ü+ś…żš~žĻü+‡>ųKµ²ksiqŖ“?é w4‡,Ē#<ž½…u҃9Ŗ³Æ›Ćžų/Ø_ź>,ø½ńOˆ^bÖŃ«™,rBžśÖĶ’ƒž |^HeÖÆĀ>t,‘F w-č=ź{W\cŠą“=jĖƶ~Ņķt’'¾Š5Cē·2c¾H'8ļPÜjZMĢ/Ŗß 7ÄjžRŽ‚“ä1œŗÖnRÅŚīy¢ŗ²Ł¼cŖWyāĆ©éj>½ŠźĘW*Ū•Ē©hˆĘå7\Ó`ū4ްRø nqÓė\·ˆ5ķ:źÖ’K•£°° ÆŚS!€õļBFńCĄ ŗŅ4ĻźSiž'“Ö%“É/|ĆsG“üG«œ×åOķ#ū|żŸķõQ§ė:æüI—/b¤M‘ĄQ“…Ļn+²…#kYh:_“?ķĒń»ö‚æ»±ńFØžšē˜e]6Ѷ« ü¹ż:WÅ7:½ÜŹĖ4ķ,¬ŪŻĄĘ’Ā½ztģqŌ•ŽrMģöČų9ĻsD˜*w9 =kCĶ©2[hć;‰NÕ2*6Q»ۚpxŠĀīõ ŗĪH%ō ĪMliZŁy’øĘsóÕ°,Ā£ŹÓŪĄŠŲ˜(¤Ų”NēŌ³Ēģ§ńßö”Ö-4o>›_G“dśŻŌl–6x8$’9#µL²güĒįwģŻ‡ž žŅ7ŚwÅļˆvŽ·pX%ŗŗE)ÜnvŽŁüpUž¶=t­”śąŚĶ–§„ŪĆ i^šÄHģ1•ĒFéÓ®KŌ4]_Uø³š.Šņ_,›.Æöķ;ĒÆÓńś× ĪØ«“šõ·†u›Łą zqłVgˆµ«‹Ö3[ā±EĒČ6ķ  VnFń•Ļń ¤-õ‚½ NüņN}j-+Ä cy>„āć&¤Œ…|‘!ø9õéI;čQŅxOÕüRnoŅŽ]ƋĖ3œ6=’ĪjŽ 4}>!œEÓ'Ź®Z²NNēY†G»˜īĪē­p¾#Öo™D¹IÓŌ3¼Žū|ÅĒb„\`(ÄłāĒxnK› Ȟ$æ‘>i$\O~äq_ųūāöµā ™óØHzŖĀ­ņ©õ§ĖcEĒ–ųSĄ¾;ńōÖ±yg’\HÜķOÆ5÷ĆÆŲßBŃŅßQńeŻĄ•bóŽqƒĒĄ5›frmķ¢|,Ó§ø[-6’Ń\»–ßõ®•į–Ń,!ģģĀ0}ŚžTĢe&uš-Ļ‘ xšU†ÓžÕŚIņ“r#M­Į uŖ±‘“yŖ=żj®Æ ń¼EĪ×ÄŽsZFÄrö~>ø¹»‡IžāMŪ ˜į½ĶwjŠ- ]Ż#J灌‚j¹QV¾ĒœjWö—ӔR¶ēøÜTZv—§,öó¶§ä#>s'>“ZĀ*x‹d7i"]Ć{¼g(ŁÉ¬kMK^е=Ŗ[ģeŻūņœYˆC5Ö«uūä…%l–Ų8'éZwŚŁ»Ev®ī “d¶²”®QŸ>žžI}‘³Äžµ ,1ަŲ3’Ėڤj76u}_ᄆ›w¾'±MM"/ä!żą=²ćšeÕ„Öė°óĻd.õĘE*GWö‘¶mŹÄ;sŅŗĶ2ā M$ÓĄŠYIĄaĮśŹfŽ'_šĪ­§6 ÷ęmń.Ķ„Óߔ渟 |@Ōo§ž;{)¬ÖÖc•†ÖČÅAg¦’n.¬Y®Yę›vX±É-OuӋ«4y”q¹x"Ŗ™ĶmpŸo˜y“„ąrN‚ŗ›K(õw]> AaŹņHūµ«Č9ų.MqŖ =°m¬čr2yµĘ«=ĖȾfW¶ZJ(z\ÓÓõM ģo ‘Ź—¼”S€øõ”,ķ'Ų)»Ó½4‡=Ė:šėZ~•sl${{ݹE(plŠģ¼+s}ˆ¶ŗ¼±O+Ģ`ghfĶK‰ōč­ŽFˆ»m+ĄļõÆ/¶ø¹:³1G1ć× §aE;źz,łŗy2ڇŪCw‰w%¼i#¤‘ÄäŖN*¢µ°KMŽMÆ® Ķq,Ey)Ē5Īų‹Äŗ¢h2ŽŚĒs©Ėcū£ó>=3ZØ™ŻÆĀmlxĒƋ4šuż„ņŗ ”Ść׏š­­_KĮ¤f źL’B°±ß>(å qֵγ<`N'eoāö§Ģ\"Mw}kuf Ć!^M%¤gģ*\Å#žī8’C4ePœgÓš¬ö€ŽXß}–Ķn¦ŲJø”“FVЬ|‰=§‹ßāuŒrÉq‰leČĘČo©Ēå_PjZ>«ŗG4>mĆ`^¹Ŗs51ģōćk6ĘY rv2kN[b.Å\õɬ›£skū^;h-¢D ėĘ `\_É$ģņ¹É<{R1·@[©`¹2I+též+ŗšļˆ“8Ƶ(-nPyŒ˜Ėcڶ[GmN?RÖąÕnīEŪ$fN?\]Ļ…u5®ö[†lńņi{0ę,čVŠ]É \Ɛ:ōÆH—FJę"‹ø°›…„ęr·:…„і# etƒZ:0{†ū<äµŗs{R&Rģuŗ¼UÄZډP†õ5pĘaåD‡÷Ēz[‘j°iņBbVvĘvÆcY³isł·ˆ•ČėS)XŚ*Ś—+Ø­”ė£%æ›ü>`;sųsNµŌ„(±_ķ®ś3Sķ`Ō,n® Yć»°$ĻA\Ģ©Ø@›T\mQ‚ĄqZ&K¹jĢŪ¤‘5į\ ‘ĒSļ[ęM9Q¦TPqŠt4 ģōO xƒK{DŽ”Œņ~ī*§Š*ų›ā‡6Ņa‚Ä›8dY%ŠŃÉ+ė_]ųgö“ų}eįė›żRŗŠīå";›CIČ#’ÆW(Ż“Cē‰ß‹5żhm{>œóƒ¾BAR=»gžµōĆ«ĖE¹Ō§H~Ķ)t 9ūŁć ĒįY8“¬/fĪKĒ^)ŠüYā!ƒa¤€yŠ"#ĒnõęWŚN”¬\¾›%½Ü01Ż~@?Ś:©“õ>Āų š“M×mo`Óā°MJ8™JŪLŸ) 3õÆŌ'µųIw«]XČšß%ū}¦—|Ų8'¶3Å9G”¬WCŅ|gąÆėńYėŗ?•-­Ģ .sž®B2W>Ę¼Ś ķļN¼šK„hŹ…ģ¤t®IĒSæ6–¢¦yw¢%õ‚4²Į2ļB§+×ę_~?•MāYRYWøū]ĀVW?:ŽƒÆÓōŖ‚č&Ś2¼oć½>ĻLŅ’?2āgĀ+';xč}1ƒXŽ‘|OäźŠ£Œ’+Øó%”_Ä^³²·šļ a³'ĖĪkĻꚎ­sāķ:=#Nø“Nø@%p>H°>÷’Z™œS;Ķn ü†ĻYŌļ~Õuq"‘Bƒ‚pqž čj«O†~)šĻ€¼Wąčl¢ŌŁfƹ˜įr?w:U÷4>|1Ó¼mæ‡Æ4‹ć>6š¦¼äŻėҾ"ų >ā +agÄ D`A•ĀŒdΊ’ÖƓčt¾×<'į/ i֞"Ō?³µĀÉ#oӞ}kČ~;üCŽßF›DkkK›Y¶É萬zmėėYrŻź(ĘēĄöµ¹ž]vēkōÓž sń‡KFńĮÆų²ĪÖiÓĆł{.IÉ\žµ§-˱ś.«įų°Ś~”ā:āöY65 Ÿa`3’£8ĘM|ńĒö:Ÿ@ńķߍ¼3,^ŌoI$YC›yIsÅ# K¹ęņxTxz- [Ś*8…™¾PTœ õ—ų¹¬|<ŗ¶Š ²“Sz»īEØßŠV2ģTu=ėSųįéShj–iqY$lĘ=łÆš<įm[ÆZä__K+XĻ ę˜y5ź^—Qļl^ęöf}Ū&l‚¤ŒŸĄfæV-WKŃ>C4M½ö-)‰·ŽL˜Ü—p·“å‹hĀ«ŗ±šWĆ߈VŽ(ŅķõčB«H0xŒ†#„w–Ž#ū-ŠT¹-Ī«g?ZļŽ§DÓ65’Œ7×šĒ„üohńŪ»I#ŗ­Žæ^Ņ“.” Ó8V³M:ńģęC<„ó‡]>¹ążFūšŽ‘ØŪŁźŖ²GęaܓŪ׎ƒRO ^xÖĪÉ4>;Ā“(0o–CŽĆźkڼįķmžėŗˆmaÖ5­p.BąĄĄ“ųü¼VœśhD¢ģy?Įł—NŅ5ĶU¦)%čBŅ|ŹŁ#å^Ż+³æŠõū…·‡OhIP0ūŹ$Āŗ=”›ę>īšc;č–v÷”€ Ŗ0IĘć_žµE¶Æįæė»ŻĖyį›ÉTZł«°Br īy®:¦°>ń«$·ÓŻÄēaĪį\”wuØ"¹Œ”^0Gjˆ#¦,ÉÓ/ntbĖQ“é)*į‹ćjēšżmųs☼eįm+\Šh„rHC‚ĢćŌ{×BŲg„Ł\mø+—ósŹćõ©Ć¼Š/ipj6Ÿæ†Dčz×åGücö —öĒż‘|I¤ųjŽTųĆąį&·įyć@ŅĪUI{qÜļ]ĖŽ9 čEqb!x;+µÆŻ©E©ž~¾,šÄ–ęćW½I­®$"ęŲ®>Ķ2e]HźAÆøXRfH·ąī§+źŽZ±#hŌØĻß=é"F‰ ŽĒŠÖĘ5$žŽóO—(ÄćnČ®~P¤³)ąžĘ Y ŻĄę¬ĄģŽnõsŒć„4ģiB$ņ„pŅ(=…jŁÜ}ĆÆ,;Ś†tĄõ’€ß¼Aū2üwų[ūDųd¶ń'‡58﮼·1żŗĖ!fČģČX×לˆüųĮąŸŚ'ą÷Ć’Œ_Æ­õ? ų‹N†ž c#(ī”™@`Iv ŌTWGYÕj¶›ĆFēlˆkļiįM/P7ęü}·D¾„ŪŽC“¹ćrēŒō?…yµ#aŸ›÷¾ ‡Ą^,ńĀ›Øć’žŅ1ØhW„åĢæ7~ÜQ_ˆšQĻŁŖßÄś-ϊt»XmtĶH3Ā!\‹KōęEĒ;A##ŲŃŌ©@žmõ Kķ2āēM¾¶’ėyL«ó†g>źžĆ"¶B¬ńŽ»ąrŌ§Ų 22ģįME>卛åÉ8Ą­NfQ įĻ9©ä7ŠŲw  /…7ĖGQŅ’1,p˜Ć‚qĪh1‚Ķ•ĮļZEQ6Ž£“žÕōŁb+Œ #.¤ąŒWķOüöą›ökż”ēųAćŻ}ćų[āRvA9-¼­Į<Aéõ„ŹwS‘żĪ|)šĖĆļ7ƒ~Ų5Ļ\«xZķ>ėg1¤ć銶ū{‹xÆāI0NÉF9ōę¹*¹Ū³Df°Y¶?Ž…»ā杏ų.÷ģKsń+ĄÖŸ“?‡–vC‘āøJ|‘Ø$[Ž©*Uȍ‰8Ć/”5Éq&S«é·:Ƈ/‘­ļ-'{f#oǽšæÄRųcÅĘīhŁģY n„ 0 Ž{ÖU7%ŹĒØźzUµŻō:ÓDėhĒh•WPjo¬Ž#ŗ“Ps.•#„yećśWDi©ėŽžm/ÄSDĶö‡'*$ÄIÆGńĻ…lt[+?ųv²2²„זr#ēōҹ½£OCc¶šÖ®śŒś„½Čŗ‰€mćk×tļÅ5ŒP\¤k"¶7ąü¾‚œ®Ž±čK¬iz~” Eø_½“}ź†ŹāÖM:[+Ųī­ū¬õO”®ø»œ„Ķ#Mø¹•¢…[bó“é]©isk§+»Hź«Üć4Įl.Õ¤Iw>ŅEOā…ѳ“ ßڃØō Ś+Bō~)žŅFņ x‰ēo„eŁj² ‡·•×Ģē¶8 f…µ¤SLÄ·ąŽŹjö„gö !pźĢ„žt ½¦}†ź+t”ŹFTŽMt~$ńe†•k…‹”,ž˜>’΃dĪ";±:$›™÷ņ ušV³l‘-”īlr;ŠK‰&³¦µ¼Ou`RhBJ_ »ŚZ¤’°‰[9RŁŚhbfE„Zßk:€kx»å˜(Ę}IÆÖbūvņĪĻbŚ,›ę#Ž™¼6;­Ƃ y.ĆÄQq»ę­«ėŪW‚“‚‡ŽzR,© šŒ¾Œ¬vļéX7qĘÆ8ēiĄė@Ėk4 ČĮ]ŽpkŠü5oå"łjĻĻLw”›āČć71·”©# 6¦=k?Ć÷/atņ¹ˆ£`Ć„`T§“ŲhĻāåk->{{W*Xjd ć'¹®ēĮŽ"xe ɐ6üĄÕrĪŪĄ6‘éŅ!æĀ³Tö?žŗź|kāū .a§Ļ pÜ…Ļ”pך›µ—Tm`‚f#oS¹éޕߦµ :r̶(ģŹČ|Į•*FGćYJ=Mi³óĒā7…-dń-ōŅKš$†Hr1°¾eų—m¤čŚƒ¦Ø F’0YF=Wó®*ń=:cÕ¼9į˟³[kR\$Öxćē`8ĻÆzõk½.ÖļAžKé_—wsėššqp¾§ÓåUÕ:©yļĆé| āƒq¤x–äY]µ¹‰XøĆæ¾kŅ~G«žĻ<мqš›TC<[žŃkØŃ\#‚HćøÆŽĒóEÜż«,Ŗ¤·='ā^©«üfń÷ŒüGv4żeŁ%’ŽŌm@G÷AŻł®ĘēĄ:?ÄO†Ś„µż®ÖŅKcpWp ”#Š€łšē¼b«»Ė GāĮŸ&”©YŲĪn¬ēŒ1ŽÕrC)Ļć_eėŗGƒ5 >ūĆ>5Ņ Ö4˜Ś%säēų…yupķŖō?/üCg©|ų‰y¦ŪĒwā™TŪL䚤ä/§ś…š;ć¢E Cd"Šļ¢EšŚa»Źtōļ^3ŌōčÖ.ü\ųSįŻJóUńßĆŁy®"ó'µQž³hżĶ|½gp—‰½ŒN'/å”nŠQ_;V…™éÓ©sʾ>x}:ĒJń§n—:cŗGx»3·‘‚ŽZ~›¦čßŲvŗĒ†cC„D«Č(ŸaŚ“£;ĶŻ }ÆźŗŁõ "VŽņŻÄńˆžõ~†|;×,~#xO×ķä·K‰ćźŻ˜dŸóõƧĀKcĀÅĀē³čz,ZZH¬Å €Oa>Ć=µå‹ĪI=+Ž„=ž« HćM•&čąEœn§ź0[hāY5 ė[h#ĒĢĪ>o§­iķReS¢äq_“Æ\Įsg ž¢źźĄAƒĪx$WĖæ“ķ{©x ⧆|„hņDš½²Ū\*JT³Æ#¦>õÄ+Ųōh`ŗ³˜Ō¾/j:'TæyY@}¤ņ=«œŽiõŃ`S,¬ŲøØ§7'”ėŠĆXöæ†>›ūF÷YńMŗC¤Ū€c¹ūƒžx§kž,xu[›} BZ6TGҾ§&§ļÜū^Ė=½Dŗw5ÜńNÓĢHmŁ ŸzśÓćƒ4½Ķ'Ō¼Ź€H§¼WŌŹ]Ö°¹/5¢ŗ柉6Ž"Žķt½A%ˆšSjłcÅŚ6„®Ą[Ipo£9ŚXžÕęāś>E„ö*Égˆõ^E§ė-ŗ朖ī:WøéWŃßZĒ47ĆmÆ6MŽĒÜa£īŲ×K։ÄR2n§šš?ö“ĆuąĻZBoa“sk:®rņ®š# Į£×æbļƒįGĽgNv/į-h)ø„œm~ł¹ē=«÷ŗkŻ ÄŽ_隅­ĪŸYoĀ’»^Å Ÿ+R ;žEąæģ_xžāMc,ĘO³üĆHõüėēŪ·O>$Št’=µ™Ōm[ĢVFįŪ9ł±ō®«¦®zjµ”šĻĮ=+N¶ńŎ‘Ģ2xŠņ0};}źż~{ļ¤6v¾"½’į’4 ƒ® ŽÕ:£]œGÄ ?hŪK ā6Ž¢žXŠZź6­äĖo.>V¼{WąŌŽńļģ÷ńkÄ’>$ĆēŻZ<“éw«Ąæ³b|¹>øėī®Z““¹ģa1 ÷Ox‚³ż†äŗą3ė]„WšÉņFŁåT\§ŃQ•Ńa¦  ¤ēœ×‰ųĘś“ŲŻĮęÅ4%Ń»oÆ51’1ÅUå‹hūköpńo„üešŃ| ćÓP±‚@”söy—®č?‘®£āĄo ŧÜkž +,*č墈®£årĢνõ#QŽ-Żx³ĆW0޽+3¾IovŪĒ“vT\cˆŸ)>ŁĒį]1ZŹ] O¬ž»ŌōsģÖņ¼čĪV@2įXp=ÄÆ īyĒNvż(fF…Öœš‚ŃǼqœsXé—v >ŽŁļX•-‡ˆüšö˜/c'(ć’=Et&;”‘ĆŒt5jfʄ•‚ø>X™ų/®Cā=¤²ø2Ž@vŹ„ó9Ƙænm>"x›Ā1ڼ,ŗD-Č£ēĄĮēßśUŗ§§…¢Ļ’“%ņŠFTZõŻ:ųŖa[sy=+žr¹źÓ„”ÅüKŃ[W‚Žž("ócŒ‰_g-žxƞ-ķM”ņF ^_Р̊”ītÖqɅŽEmŽü]¼0 ŠUĮÅ4ģyÕh övŅcu“lA늦4ĖY|ō6Ńlc’u®šx†“8ją“ŻŅų'Mæ4lÖRž—Šv”’ųAķ„H­EĆ*©¤µtĆĻ6¶U ģhI§Üx!®iójŻ£įņålÄOӐ*ž‰ūIübе½*/ų“B‰%/ ·ŌnFĆŠ–ā»)f 7šäT«E¬T“ī®}”m’2ż¹4x ƒIųéÆ<@…S)Iš¾ž`9Æ#ńĒ_Ś·ö‚×µ+Ļ|\ų•Ŗh3ŗh¬wϲć¦#LŸŹ»V7›CņL7ƒ™ńt0ŃSōæ[螉ŻtG۟³~ŸąģøO Ųk·‰÷„æS33ć©fäż+ė}Wć®Ÿ©YO&›įm&ŻĒ”#ŽŹ5CķČĻ?ZŹ£¾§ŻSĮM=Ļ—~5|ų]ńšžćT¹šk©] \ĻjžT’ƒÜǾkņ³ćWģEāŸ‡’nńĄū«ŻNĀĄ½šĶ˳Ļ*ÆwĒ„yÕiM„¦Üm-Ļ#š7Š`Õ#xĀ“PIäĻ šń8ꬽAҽoÅ: ¶ii¬ŲKņ8 Ą ąg5ÉČĻFŚ\÷ߣpč>/›VŃu‹#RIATvǘ§<ÓõŖ?“‡Įßü)ŗé֑k’fIZ|?å§ÓŌU؝4Ŗoƒ|Cż£g—¶tuÜ„Nr>µSRŃ&·y.įV‡q9ĒjSŌģMY3Eó ŹĆ“ė[,Ņl7X®s^žžPśWfĪ,. }©J_ų ·žÜłģO”A׃‘÷k~ 6†9d’YŹå½=kߤ½ÓųCžä¶—olEŖ·īs“õÆ@Óm‡Łƒ*®ņsļ[Įu<ŗr…ށ-żŹ<0WųøļYś›5‰ƒlOß½ŸQZµ +}Uę·TYŃĻÖ³žŠĢ”7r}Ŗ¢ģc-ˆ&–HCVÜ{v5,Z„KjŃOßėé[ÄĄ¢-¬žX¦XĮčEz—©ŁF‘5œpy‹€¼ ō5¹œ§Ų姖S|ķ RNp8ü*GŸnŲšŪó„c%c&Œķaī­cWŒÜ³”ųĻR[čEŪE%ŠØA©śŅ2héµ]Hßä|Ę#Ī+/O“ņęI#!ž@~“‚2±ÖE©Z€a•Õ˜t®oÅVßZ¦bD—vCŒŠLź|²ßM6I1ܓÄ|Ü{×os 세¨ÉŶyž¬`Ÿ(±ź1ŚøG¾ŽĪģ[Ü9u'ŖōQAœ“c5oéM3ĒiŠČm·vźŃæĢĄā™­n-Ą6ę÷éRĖ sY ×'µ#—#@P¦KĮ>¢®Å²08ävö Ø­K·2A-øY¶ć®kå_Žž4žĘÓ.ōŲĒ3oƚv: ĻĢM}=Ļ’#ø.X>öz’kNKdø³ŠhŽAžŌ k©Ļ2ø•‚+&:“Ęk UĀ$JOR{R±“G0‘<ĪтŁ/Š×]„xGÄŻÄ6:&•uy?Żf §°ĻĀ„E)ōg‚æf IÅļ‹õ£)†K`„qœsśWŽ’ > ų9D-ŠīB p2Ą~tEEßāĶ7Ā~‰māɔ?”Ē÷ŠqŲć„|„ń'Å~"k°ųRg³°wkŃ}q^6*ÆDz4)w<®ĻF‡ÄXÜÜ魩ޤB`–ŅÆųŸĆCM„ŻkWšh–1|å$l3cœs^S‹lģŁ™šą?ķ ūTė ῃ~O„āu[jŠ2ZD§Æ—ĘXJżńż—ąŸ?eŃe©¾›oń«ć”|ĶSPŒJ°7ńTš£>œūö;B’F5+©÷v6÷Ś%¾›ć *ĄĀ¤”Ey'·AüėĪ|Mgń¹c“EųW„čV>øM·7Ņ>݇L?­tF'$ŖÜŠš’ĆįÆĮ®ŻÜ^ųÓʈĮęžww“ĄÕōö™­KØéŠšŹØ• §+¢˜JG'wmg-ō7ml©r™ '±ķZ2Ćž›“³ŽBH3Ķjd4Õt›­béP]>Ÿj¤š¼†ā¼zyītoKįč“Č_AQ»ķø›<į1éĪk.Cs#Ä"š·‡Ü^¹“YŌę8œõń_üeż©|%š² KRų‘ā]2×ÉEcm0fi3¶+zt‹Œ­”ų7ūOžß’>'kھąQoą‘凷oVŪۃ_—Zēˆ4Ų4Ķ@Žß\źž ’]Ķs1 X“’IėÖ½:Q±+Xš[R×M3,€pŲż+ćwgvĻZė8*Ō¾‚D¹v!äōؙ<ā@ ¹9±ŃÄQļӊ{Ū9bźHĒ8õ Ķ²ż­»Ė€ÅpNMkŲéÆņ“q·ļvśŠLc}N÷į×ĆÆ|Wńe§‚¾ų?Yń߉dußOŒ¾ĀO@3_ŅOģu’™“ ;āgퟮŁŲ:H/ šķœ€lQȎGž6鐜×5j¶Ńōé4~éųN |5Š!šĀ?h’¼;&¶·Tb£?.0ÄO'޵õÆx#Ctåx¼GāÉ]6É0ē®įéīkĢ”µ;!‡-©xsY–žßÄzžÆo’¬ŠŅŻĘŁPćæåMÕüN-‰}K‹NC„‘£b?Zͳ~Tq6:Äz”y¬¤Ėw}r64r¶åb\Lr]ź«qqØēHRģZ<ēåĻ=­`Ēc9ßZŠK*&%ņŽfą©VóCÓ“ÜKs$ww‹ŹķäR ļ]Š\Łß_M¤Ūē§h>ą ó/ųUŠžß”Ł*źZhģ™Ī^4'=MkŠ Ļ|Pš?…ōKĶFū^“Ōõe*[E’ŹyÉn?•~||UųÓāæ_Ü,šŒŚF†œ„öī Ż+Ŗ; cĄd‚ūY—Ȱlī9ĪyÆBųošŖĒWmJ a{­U »+/ŽßēÖ±«>ˆµ+ Ÿ ¼ƒav:µ¬Ī‘‚rG¾ śBŪBķŽāō ŲĆĒŒc®¤²Ē‡bŅōĖéŪMÓaø,øÜ£©Ę9§y>$¾ÕåO%†#+ĒŽŗcē,ĪŪNŽ++ømfUłø9é^ƒsMŽ‚@=iØw0’<Ļ\ńž›£]-ÅµŃmĮOČpLWųÉ4Ncw§5Ä/Ÿļf·TĮ#ŠÓTĖ~š÷ĒR:Õ/kĆH‰cb9!P0ąõźd­”¬é7R Dšév†éÅPՋ>ęi3jĪNÅ8¢žŸ©[I$vļćē“]„šÅ;„Ōn^/īµbbC“RH ‚—;²£=+¼·ÓąxÅÖ£&ėÜ žŸrzöåeū:F­Œ½ė‘Ōī ”Y!ŽU<ķ'ö©”ŗAŸ+ųßįƒų§[µ×t×mŲ}ē`ĪģvĒzō…ŌN›¤Śé÷ įP(} sY\ÕĖ”³ąū»u8Ó[W6ĢIŻZļuDŅtŪ·Ÿ@˜G/C›ńÅ#'"qŖŻx…š=Bqēl –lf±ģ4ż1EÄN"Nø g'ÜŠW7Fg_éńŁČķi$’)Ēx¬ų źøy¤;Oš÷h2l»$Ōtxg’xādÜÉĘ>µĄź/Óµ™ć·.šJĻ‚Ąą}Yj:X5[x#‚`Æ®[<‚EHĖ§ÜŁ<ÖB™·mcš¦ź³,i×sŚ9„ ¾9®ĪĒQ¹ł øß4Dp\g5Ÿ96-I“±‘äFĆ9ēµX±[K˜›ĶU*­Šž†š•ÄdŻjP6ųßa?2’5¹„ź–÷5ŗJć’N 39™z„Ź—»Hė\&¢÷ŠĒ"Ų9ŽL¤ŒŠü…ČĪsĆZfæŖ\M{«EÜFŁÜ¬OOsĶzZjJ¬e„e9V<šÅ¶j£b“[Os8¾]Æ ķė[iį›ķ~"F¶·ĄcЊҜGc‘Ō¼ā"śhõ mZßh126@śÓ£Š*hƒ6Üooį>¢·öhž]nsŗœńŁČĖ5ōR¶ģQŅ©Śnwą™°-»ŒI£k“KˆŲ(#’+©–śźfŽŻ$V·Ąēv§ĢÄ×BœWĘé%&%-Ó±®UŌäńRC"‚J„łG`1ż* Z9(­&röÄé æ­lir=‹lžq’pHiH%µ™¤9*Ų©«Ńj±Ėl"$3cńNĆNĀéŃ^Ir”-‰ŒsžĀ·eŅTy·EįÉł°Ēč+)DÕHēęøµ³’X#rź„Žk™–-FO“] Źž>¾µ˜ĖŚ|šŲĢ#¶-(ō?ʬźšÜr³Ūą@޹«Œ­£‘æ²¹ĀŹcGZÆa"HB ¹#ڵ&{ ś†Ÿ¢ŚÅ+B.enT}ļóĶ.“­Śjš“Cqu „a79`N=…W30gó%ćω÷Éį[½äk6XÄŻ0§¤wÆ‹āg5]bĒS†ÓS{ˆČ]‰Ń±Ął½øÆw•Ź'øxQoügā«[Äv¾”‚QĪāŹ8ĆzŽ*/Ž>µŠ>"ĢÖ}֓oéÆ¾<źW>+ńķķׇµ±w”ŽRfĄ”dóōĒéVoXö/„ßbŃü-wįļj·³_Łŗ VL+Ū>øĒOJś‡Hšó_ųYüKsc$±J8\üŃŽO=9¬j.¦©•¬čWķØX\\­²/ĢŖzõ¹Æ ńżü’x‚MbÜ]ÉęFX›gõĻēY¢&ʈcńœVŖLL‹÷Ļ5ß|šg‹u?ÜŚx{U]FęÖW‘aEĪxČSĒZ苩óŁ‰ÆµŲ|Wy¤kW) ŹVMČFÉ;‚;Wm”Ȗw|·ū0ļ$~•. E[CŸń‡üU ˆ­!æ‡ĶibGūåū”½3Ž+†šÜ>»~ÕՊYžP˜o9ēó¤¤ĶŗNüń·€›Å÷ž±ŗŒj łŽnzeŗf½oÅ:w†ęń4vwŽ!°Ņo "É;a;< Õø±ø3ó§Ē&Öž•ĘĒš%ü3ćm+Å֚„öŅŪÜ?Ÿ ¬£wb+X«jS‘ö®šĘĆYųūšßÄś~¤.ŽXPģy‹ĢFyēµ}»ū]ų7VųAą-Nā6ŗO™cxH*$#×±5gdrĻSó›MųØuż6ÖĆY%Ż»ƒ™ Į?īśŠśļĆZW…Óū~(3Ģ›Lœuķcµc(źT!mĪi2ź’fÓŽūQŃt¹×ȑ#B@:ØüėŸ±Öµļ‡ž;}Ö{»›s7”åĪG”TŪ”Ł[Cö»ąG-n“®źvIs{q ­æž‘³ģxé\WÄü?įŻD$ §½Š«# Ļ Øw¾„¹³įOŠž Õ>|L荦}ÜO%חĀGĒW½s~ųņŽ,‚óPøÓ¦ $År˰ńžzUEč.{œÆ¾*Žéž$Óo4+‰ ŅD©[³ ®½ņzäó_¦’ üm¤Žü=:Ü0¬6oÉ gįŠ®ļεŽĀ¶‡ĒZēĆK憎.²Ö¼!$ś×€µ9ZY#Ą[]ĒT{ĻźZ&Ÿc5ɗĶX‡\rÕÕNwDJ§æĆKĆ6‹ÆŁŚŪO*8’ D£päntČāæK|%ą=+ÄŽ³¹Ōķ]EcX×$cīćņżiTw'–ĒŸ¾hQx¢xn“‹EŗBbTaÉ+ļ_x‹ą­µ§u arŚ™æpŸ,Rp?Ļnµ*’/¼1ā_k×Wš6£tĪC,`įĄ8;½kŌü9š’ßYWš-ŚÉŒęmÖ¢G ē  ÷ČÖ°FÜŻ¶|’ōo é>ųö„öˆ RŅŲ‹ŠqڼŸāž•ā-7]itų¢}YH›h#œēŅ¢Mt}Ļ-Ōü­čŽ-²µ(ļ­ž0ᓤ™Į•wš=ŗŚĪ’:­ĀŒżćRes„Ńu”Ņ--ģ*±®B²œ~µĪųāŽ”į½;QM/Pū/ڳ ®üoR0Gåš QGʚv©Øh·ĻØD÷·W/*N°‰i!ūė_~Ł|Nµń­–©¬Ę4ķ^1²ķ š§.ƒhūkĄ‘Ķā:`¦į~ö:ųÓöŸ¹†śĆľņ-ļÆ­ÕŻmŻw29zræ„g98Ÿ“¢ĆQ=¾„“pƒk€9ßҹ»‰%“f]QOÖˆ«hk½Ž^GŽY-»”ü¤zśĖöpń…ļ‡5a ­Ķ¼š\ųTi>ōdcŽxZŚgč=¼ŽrGpYD„ć#½h5²HĮ„ž[u¬äŗēcē/’“_šį×4ū}چ!ø™÷ą²į’ÖÆĻ“Ÿt’HŪä®AūߍB‰ŃN£hģü ā‰üā=7ÅZYhµ Y;Tžń åHkķĻŽ6—ńĄö>5Ó“Ęø·{p×.ƒ…l~|*¦oĢ~źĮ¾¶Ŗkś½ūüK¾_ķ-;̽šÄ³Hrńd–ŒÓi9ćŒ3WōKsbaŌn^ W CÆøØØµ¹gŠ’üYēĮ†¦ĆmĖBŽŽ•ķ2Ėķö•UTž5Ē ½ė.U¹?„oų-æģPŸ³gķCÆų÷ĆÖ6–æ>#¬šµ†Łj‹ƒ49(%·fQŚæžĶSK{y®H|‰ƒAī3€k,$R"ŅŚ}Ū~9ęŽ}­žV$¦ź­rĄ©¶śäšī9¦T@Ź­“¶3łŅG!e äA™:“aÄc#”5^6h˜²Fq@Ń”‘ŚFĮq‘ƒéZ°DbĻÉß81±ö§Ņæ9>"čzO‹tmCĀŠŪÄVķ.›vĄy0]/<7E-ӊęNʒzÉæķ»š‡Wų]ćŁ5xģZ×Hø¢½}¹ ążŽkāV§ ’××NG=FPXä_1ÕŹ’²GZBŖŪ ·jź‹¹ÄŁZén zméųÓC"+Įź:SFvpŲg½T„*FåŪ®é@RåˆäzŠœ3Ńć A¤%ŠzÉ·lj zśUųļ5]=ģµ=ō鶕¤ét&Aó(Cø`ūćPg÷‰’żÆ`żŖæfĻč/yeeń+ĀgϵHåłŁTāXš<ē$0?»Óœžõi­­ŌH”RŅķré÷SųÖ‰Ō=>'i–·ĶŌķoļ-füBšĒ…¼wąĻųʖś§…u«Y4ĖŲe«G"•9Ļ×9ģ@5Ē*`ÆüĆöAń'ģ«ń—Å֗mqi§]„“óĄ™K‹2Ö×> ²`0ģĄ×ē «Ć%Ģf)™VLÄśÖ3Ž„Čöæ]Ż–¼ŠµSuw§m2C+ ŖŽącæŠjŗu¶=֐ń„ÄR)[—¾1\5E |Sa«Kosq¶ ,s“čqÅ}V]oH¾±IŚćH”ˆäDo¼1Ęq^mMŃ֏@ų\|ąćBæb&ö’ś}ė¶¶m:Wg„.Ę\W„‚”ŗ˜U‰¬uE€„Œ'#šĒš9Ė£FbnõėÓ×sŠeĶ+Å–›$¹¶Ź*Wš·/‰u]iŅŚä……WhŠ.eŲ³c¢Į“óŹNŃÓ­bĒįĖ]Zā@ŃĪہU®h4R[“=}0Ž ēYLlY8ĘŠŌvN—ŗėM$q®OŠP3Š%ŠĀßlьdsĒz”­Ż’hiČÖŃČźƒ•ž“›ąĖ)µKŌgąNĪŁĄgÄ6Ś|óK '±•=h)&µ-č\c"YQQ›ų½Ŗ“ńn¹‘v„AŠé@9Zœöšh‡x0õ•ĖĖāžĘ°Ŗ$Dwē“@FV; yoŽĖ6×ZēüQąĶ:”¬i°2\°ÜąžśÓLéƒŌÅkŸ.Ų;攀a³ÅW3$‰2¹{v9 µ#S¢¶KUādźO„s‚;Tŗ`­Īz½¬’ʰ¬nŹÜƒŚŗ_?†®žKŲ°dÖr‡‰ī¬õ3yx…3On{×÷Ķo‰2³» .ŃŅ”V£G¤ų/^žÖĪāŚ'‘Ļ'œōżÅW0é·"ņhŒ„ŽAČķÖµ±ŃĪ ÅÕÕĢxÓm›r¶GH9ĻéNń‰¬¼[k£]ßiÖé­ZEäµĮ9i‡b ŹhÜÖš‚'ńµŠÓš+i”b7ņēÓō®į<5q 5ʙ­Cm;ŖķR#8¬¤“. ųŸöšF”e”kīƒO<|„AĪ=kóSū/PÖ'5ūKˆ.!a1ó9 Nx®Z‘ŗ=2¹źńÜ>™kivŽ[& +qŒ×_gćłŪĆCµ’Ä.H<–č3ųW—^š=ü o$ŁĮéQjśŽ³{„ŚßImy,=¹L†.œœsģ8ÆVųońCÄŗž 4ZC*FV•É0ć”éҾs1Ć)GŠż?&Ä5mO»<9ØĖ©_iÖwž‘:€éĄ~Uõ…%}6óMb»1~šŖį$~@×ÄÖ”cķ#]ŲšO„’4ķCÅß<š’Į1_k÷WLńc`BpĮO  ’õėźOžĪń_†ux›Ę§…~ Ü,²Ū )x[Æ'§ÉZā}OĶ’x(ė¶¾üX»7>*ŃÆ&ÓÉ8o1X„˜{ƒļ^'āko‰?³†µmįĖ7ü#ŅG鶉£¹„ōł½G„yxĢ:=l=sźO…Ÿg)igizo-.\’Ćź+ÖüGšmnn-­~/ŅtĻ:`¦Ņi2ļļż+ÓĀ×čsVWW>®“ĀwŃj—šsźpŻ[G‘½I ćҳ4Ż;JÓīäY G†7’Z÷čU‰¦ŲA42€RI\żŃœkļ[ i~Ńō†Õl,.µ8ś^Äł pyļ`h»źoN›{¼Uć©/³Ÿ•o€HCŽÆxKį„ī®ķ©jŒl­2žg÷sŠžu÷9v’7?^į\,hRę{³Ą<_qse«j|¦6H%(¬§;‡­yĶŪiŹØŲgčMč~³–ŅZXԇ·ÓH²@Ī Œp3¶·ōm=#Qµ='ūBÉņ²ŗK±ĮĮĮé\QõųZ:¾%ŅtŽhļōųu ;˜¬ź‘żåÖöIįę#ĆśŒ×:{±&^LY=ŽÕĒ${ō)ō:ńØÉ,š¶­eā­Ź}GHIBHŠ®ö|õłzš1_qųWć…Ķƃ“B¶Z_ÄGĪŪ‘‘0x*zżk¾KRĖoŠōĻ…ŸSĆW7rŚÜÖw/ņ’ļ+/ā/Œ.¼eoÆj“Ļ3ź jóDY¾bAĒįøžÓM•eVw±łłšCÄšŽüašŒ5cČÓ§¼0Ėpüˆ÷ļÄ~•ūÅwoŖŲĖe,š€½Ó¦Œ4lį ģŹ~•ŪJ„Ļ­.YXōŪ->8ķ-§Y—ĶĘz~•ło’FšÕ×ü,Ÿm­ ŗ•“ł4ū§Œ|Ģ[‘ŸĒ'Ÿzŗŗgn½·<›ą/Ć_ŒwŚv‡wā(|q3„ŅF:ńÜu­’޳—ĘŸ€—Ęł,ĒÄ?˜Ģ¢÷LŒ™! ×znxƽ#čØclyƉńmÜo˜½Ē0'kD}Ē·ō­_éfź}JÕ/bš4-öY—ūæē5Ģ”gq̬֭y¦āü9ŌćÖ4+×·Ōpq‘ū¹[}}ėõö@Ō„¦‰|Įy•ĖLžY…?žG”ÆĢkł£³In!R$Į8Öµi¤ģ…į¾k_0ĖÖ+Y7%ź“Óü½Q©š×ĀIńXÕ“Ø5+k=r;Fø…%l qĪäk›Õü9«Ų5ÄZ֍y QZ]™Œąć9?ę”OŌØTKFrT2[ÜÜ[;±“`Jŗsś~U5†›ueö²“Š’Ć'šę©”źBičjéś¼ŃoŠįB•=ė¼Óļ"¹ę}+s¦č^Ō-­ŲF’3 zW?cnī†U8Ļ5e› >īQĪ:w­$“܀6ån¹«ŒŠK`  R¼öļX> ŒÉkł¾`: % ęU„£ļ ÷ąg½j’`Čń<ŖƒåąŌəpA2±ß‘Äø–ʆB„Ł»œŃ[a!Č~5‡8F69Ż_AŽ÷|ĮŹNŖ@eżkœH/“h‹ŹĘH‚ņĖžs”v}ĻŚ,tS&Óұ Ömuy."ØŪvćøžµjW9„n¦“’9E2HķŃ7ć隫·ØaóVŠ—sšjč²±˜¶ī]ĢzVÖ£¦xwĘžoųŗÄ_i-(‘fė­½ķō®šg‰Ž¢„;š×ĄĶHx¦ėCšß‹“Ķ_Cņ÷Ę/œE(’géļ^„’>±š”  ½Ó ·`dˆĮ*˜ĀģO5ŪŌł«ØĖ‘§Ćæ‹óųmu)ü==­Ąœ uštī. ׌±ę»=E!5C„ėžŃ59=žU†ęBx„3 üM'ˆ¼5/ģåńŅŹßÄšYėž¹@ĄĖažŁĮž!ŸĀ¬ä«O[×Ē?†Z7Ćļéž$šlūü­CöØ_)o!9(£°¬ĶxåµĮ9ą{ŅnĒ éÜӖā(AvöØm”ŗš 4Ģ=™²(U  ¶kzÉ` F8öéAJ$×+ct­jī§pĮć§½yo|%O² ”Ż˜Ę’óŠŃLńqT¬yf™ØŻŁČ¶Ó,j»‚”ŻÉ'Ö¾ŹšN§}įĖ ,_MžŃē…YšJ‰äw®ŹS>k¬ģ~„žĻ¾¾mKėČ̚}Ū—GsלÖgĒ8ķm,mķ.•ķ®"øVI‡;NF8’=kŗ äR\Ö=gĮ¦ŅlŽi ­“|Łē„Rńµœ–·ź6$Å2œī9ö>Ō䎶VÜü§ż²¾oż¢žéVÖVĖ:銩Q“’-Õ}9ę¹ĻOkāæčž$¹’4¶sŠN@ r?ĻJę©Tµŗ=«ā÷ĮŸü#š·‚¾<ųŪ’e’M4#!cnB¾+īŸ€ü)ū@xo ų…-īņ6·ø‚@0]‡QĒ\ā±&/FĻŹXjńĻjd[źSŁÜ¼–ģ#|¼õŪ&¹«ˆ!ü²ÄcĘ(9šķ„¾öY¦k‚pĢ͐~ƒµrž)šüH8­78Ü$įØĀÆ ž ¶„–§=ė¶šō_čl²R¼Žh0f”ę7DD`AōŖfÜīŲHŁėރ-HB̳$qŻŽ¢„žš@Åe¦qփXĒ”Ēx—Äļalķj}æ0$p+āˆi«x¾īöźW[øIuĘJUm„ę±¹¹Ž-ÖLēoĶĮėZ Յ¢¶BɒGū>õ dŻÉ=Ģ+ ņö刃ō®³Cųmā½z{ib±hķĖ¼„3%čĻžĪ:ף%ÕķēWÜÜcņ5ōƅ~Ųč„“Ņą·ˆ°Ŗr1ß4œŅV-SŌõ«OO,q“VĢIQ¶±õ/Ż| kŪūż"[‘—Uvī3Ąļ\8ŠŚYčž?sńwĀæg³ń’÷rźę†@Ań‚1ųV±š½~tūÖ©§ĖŸ0–ÆqmźuĘV=AšÅå坏…¼ į‡ń‹%}±,“±Ī.ƅ÷÷ĀÆų&‹6µ¢ųćö°Ō¢ń„Ń Eu#¦“nPD6–ƒ£cŒā¾Vńω£š½­’‰|eā o ųr!ęIróŖ°?ŻŚNsĶm›$~~ÕßšSOZ뷁¾źFīėiŽćW$žč÷”ōĪGJüińoÅ ¼O©>©ć/źž'ՙYüÉHĘāzķéÖ»éQīLŸSēüHŗŗøšŚTcyž,דĻ3ÜŻÉu(o4šHī3é]‘Ž*®Ę{/Īp[­ ¼–‹kĻ~’J³‚rčYHÕHó0ŁķļF7•TóŠŽŌ4f_ŽŁ$g‰^õ£i§»m…T“zgņ¤4®Y»‡ģ3髺†£q7•œ(ZiŲōUæJż¤ż‰’ąŠæ“Wķ*m|sńJæ„? ~łŽčbīāgp^Š0zšę­VĒu*Gōķū9~Ģß³?ģ/į{/ ü)š=®­āYT$ŗŌ–ŪŽi{³¾3ČW±j¾:±7‚ēÅZ­Ę„upĘ8-TüĶ‘Ę0q’ÖÆ:¤ĪČÓ8]zĻÅzÜņ¬“ŪųwH1ā2 _OŠÖ.”¶4oameawsž˜ėóHqÜōż++%c"ŪX’g‘µ€mÆP#·+‚{tžUŹźš­äŗ“ZĒlm¬±’äć?…bŲĢo>=ÆcgM)9ÜA \֔ŗCŁŲÅ.±ym>ń’ØĆī?„1–{;8d{g-Ž3\©«ż©ŽßKŒŻÜ¶N1Ž©Dhš?x¦ĒĆv7·śõ肶21n“_|Sż„JK‘¤ŪĻūüįā<®ńsZĘ6)Dł„|Iā]wR¹¼™å'uUÜNAéĒ­{Ļ…¼ā)§·—Äz9šÅˆß“Ź‘Ēj§48ŲõĻü Ö§»_ģĶ6ŚŽŲ«¹ē†¾“šßĮķsĮ²ÅŖ­“rJFbģ¤q““\ņÜ–ĻÆ~i–še̊āa…øäśž•O[±×uPme€XE’›”ŽF{ńW;7‡tķ;ĆŠ <†•ńÉõ?J«'Š“÷»iÉ0©|ˁœō®˜lc(²ĘµŖŁYĀ—’ĻĖŌ`ó\„—Å»Ū[åŪFˆ łŠō÷¼cÜÉ#ŒÖ|IqØOqu©Alö®łY r>¢¹‹ūc{åÜiJaĒLäU7aœ£{ucsąHaSXŻĆ©…ū@26rKzŔŽĖRø±–Ņ h« ĒAÉÆ2Վ±dÖĘćLø:|¤„˜•Hõ’>•W-ģ'†^Ź’V:z:żÆ!qžyÆań†Ž›o[•ß\į„dՌģs¶¬naø†D Øčk~śöxPĘ@2c“ž)ßC‰ž[„ŗI<’Żū„u>¹¬;ł$ŌŁĢ«ó)b¦Q8?ÜĖįĶ9§X%’ElŒäĀ²ü=ā8õ dÕō×"SˆäņÉ#ܜ:ČÖč.|5m‰ŌtĶNmų6ą‘"Ÿ_„%°–W¶kÉŁ$Ę3ŻŖ[.ĘŖÜGęUĖMŲ÷­;(-¬ĖJĒdmó9nƒÜÓ1’Ōķ.--šŹ9l›Ģ.Y±÷«Ģęø–9‹ŻFŃüŲōS¹ÕSķ(‚ L>ųžXwvśŒ2Ķ5¼É7R7©äthuʵ–āõbóK1™ńśbŖł“”\_;†R…5E$&ƒe œ¾k gv~sÜWo§Ķc.®Ģ¶3Y"±æ$ž53Ų§c»Ömmī-!cy g+Ųן[Ǥ.ƹŽxK±ääŒö¬H]TrūŹmą[ZU䶓ĒidĪ®ąņN1]4‡|łń‹į÷ĦŅ.5 āćIæy¹Ī×SŪ×5ņæ…m<_·SµŽ£ Üym&<¾¹ ś ÜŻ`XųRöś¤¼¶žL68®²ŪIÓ­R5“ķ t'½gP—+±YÜĖsö±¶ÕĮ$ަ»8ōi∻²ƒŒ•=j0l§onģ Ļ#=*8VH/]!Ū³©UĀ!s*źKUŌQ,\ł?zµ³mfh¤…ćˆ±ŪrkxD–ō-^ųS[i$W6Ļi’$Č;±ŪĶėšhÓŃ7L³œąē‚[¦P–³K ³›XC\95›l³O‚+ēę®ySRŻ^dqµAz慛tjć*«ógµiMĶųęźČøPń’®{ē&¼–śé ÕŠ<ƒŌ„l.dr7ˆ“ī»Ś›‹$÷Ø“¶K{æ9OĶ»®*%až„Ś/öÖ ÜŒ¬ÜīėŸzÄ»¼µÓ­—J’Ž6œ1ÄėĄc”ē)¢e#‡øŌ Y ^h–!Ļ5¹¦k’G4Ń]‡×‚* NČźØm„1+2žC,BE—²Ž¦€8褚ÖčÉx]Ų>ßZæc­ĒēHÆ*8Ī{ÓÕō=wJ“E6óķĒ>õµ¬4½«Ag";õ[Š®F4y%č›D6¹hŅ®ļ½\zÖeķõ•Ć™ō覂܀ņ8ļYJ•"ʐźšiØŅU’QĘābÜźQj%ä-ĘsŽÕ‘gYc#ÜŲ“†CĒbk"ŽŅī{•‰mžnŖ;Vń@]Ö`[[vIĮM‡°Ę*Ÿ‡ō]I–ń¦Œ®Ił{Ÿzn f~.žŠæ²Ī™āOk3šåģ‘^\Ū¤č¾i®!—8Ī{W˾šī±į‹H,õ(U5¾P£ēooĄWÆ*½ł\ü:ųEØŪéÖž-¾¶†4,²)lU'¾}ÅTż ü5uØź:Næp±Ė„Äæ(ŠwĻÆJˆĪģ™/o¢šĪ­i©ApmķaPZ<ä×é]¶‹ćūĻéW>•%ז$ §<zC[AŠH÷/iž-šc“«Å{< ī‰Ü6°ą{óW¼Kń ĀŚ“W&§w– ˜ä;}³Œ÷éZ¦Rņ>4ųŸ«^Ļ5¾•”ŽZͧ«ķŒęB{õÆ)šA/‰"‹Urø;”/gśŠ }漏ųcĮŽ%˜O¤ČšĮx䬀CG?Zś«DŌn<=įHōmNo:Õ ŽĄ—xõ¾ĀēfÄŪŪ › "ēĀö,°\[*ĪXōqŸėĪ¾"×µCQń$š2i²Ę±ü†SĘęö¬©Ć”2‘Ņx;=]Ѭu†³Ü€źĖĖ+7„}©­ųÓį÷ģÉā«mSĆQ®Æ{~¢YÅø’VqČoLµ¼v9¹[Šł§āĘ}Ē^1ŸÄÖM¦—eu o.L«3zūē­lIā{=BĘŽŻŽŹO—i† õ$÷ķSģÖĮģŚ2į¼r¾biņŽ„`Fßæ×§Zńo‹ |I¤k÷ž/Ņ!ŠÕnbYēU¾e =ńÅ 64Q±äßj2i®€“A¬y±;®Ü<о±ųķćĻ źž Óģ­īõ|qi+Ģ«“doīr1TĶUŗžUą;ÄÖō+h®Š6¦„.š?y&}~•ōš—UńÄzģBif‚ÓŹ’ŲBƒ£õqvš9ėO€śĪÆlkÉÆ£1yŠū|’qĮöŹų⯩j…®­0uÅŃ1³ŁBrźkdsõŌé|_āk’xæF×| ā[ŃØéī’wŁ‘ĪŽ+ķ‹ß“ghÆŁęŪK×,¬ŪR²)4ļ’g)ķļŠĀ¤9£fJƒµĻ„¼¬¾»Źė6)¤˜äĒsꔹńüėī+ gXšmæ‡üw¤^XÜi¬„Ž^™zұvÖĒŹ“ēŽtOxĻDńo…ō ČüÉn-ć?ņÜõŚ};׀xnćXńÖÆog§É=Ž”<¦2ģz8÷ėŌTņ£X­5?ræfŻ_Ä:aš·®ęƒSā($ NŃŠć=żėóėöŒš‡ŽžźśĪ„cāCV“ū[K ’d!÷³Ī=*%GcĆožžŠümŖiH.tć†f‘Š“džŒā¾«ųSū5x–oO{āĶҾÉo›’ cŽų„%hæ#6σµOkæŽo¼=ɧ%Öaq&LŠ®Nkō‚? j¾ųIØĻg½··!݁ŽÄp1O—÷w} Ÿ³¦ŖųĀĀūĆ7’M{©­±–šP Tvõ®Ęü šĒķśWŠ,5Xuūyš/Ģ ™Sōė[ĘėBļŠźžžŅ÷æeæš•Š§iZ_²–9 €>läõĶzĢ žZ$¹Ō`ć½)£EŽæĆi÷k½œ°M Į*J¹Hęæ)ž$ųR/ų²}-b“Ÿ3Ā6«“ŠgĀ³.'™5“ŠŠ†l{ׯ_²‡ķÆķõo†~%‘“/gøī^˜ŚAļœ~”XŽŠę¼+ć?~ʟ“愾/čSŻYj~ŌRiDÖīųd8ž¹ž€_¾2xsöƒųOą_Ž f›CÖģisŒÅ60Cc¾AüA¬åŖ:"ō=WHÕnt]FßP±}³ĘŁśJūĘóžOAuŖ¼©“ŽÄVRvó?;æą£ß²ßķ‘ū+x׹ōV ć­9FµįėĖ” !øˆżŽyRŹY2;nĪĆ⯇eŅż²’f_‡?¼'ŖŪ^C©Xŧ·Ķex£l‰"õRĻQƒŠŠõ]r}2ļYŌ4˜¦ h˜#œ#\ÕbnŽCÅ6_ŚŚiŌVŅ+Ս µŌ}wFĄŽõłIć/ GįS\ųI«Ł±ŅnM_@ŗņų…³’ŠŽ½8śg„pÉYł•ūtüOŠ nüci§ŽhŚĆT1˜.p%>›°}s_Źõևu᫽CĆś•¼°źS=»‰9,;OЌWM39ö2ēV!N8Ī VŲčĒp½xķõ®Ŗ{؊F/ænЃµUtņWlCbž¾õdĘ]ʼnZ%;É·jxŽbģQöお El[+¹bW铚µ‰y.w{w Øn>ā4Wdłœq“R†„"«Į×k‚{PuAō?@?ą™µv«ū'~ÓŽ>rAį]cSŽ)\ČQ£9čLJ{Wś,ųÄŚ.µ¦č·ZUŌųo_u *ą8Ū„dĒžƒ’? TT:ÓŠō[Mm®"7/Õ¦§a1†ue’X£½wͦ«d™ą|8ÅrĶjL„cńóž ū%Yüpų7Å=Ć+®ų‡ĆÖŅĮ¬Ć žžóG`w•ĒŽh\‰@?Ā_×üüüEįėĻų‹Ršī§i-”öSł~dĆi–2NĘõ®inEī} šĒÅ>²‡QÓõĄŃ»ZČ!”Ž” ė^s”źS[­ĢäĶnf“lŁČ< śó\"8Äė­¼=pžÖ|S§]Ē/‘ G“-Ė8*>µč?ü|–K œ–srvH™ē>„W †§]8čr>7ųÆ®_ėeļU­ŽŚa*°q6ŽyĒn™Æ±ü!āōń&¦k6·vW\D®ĖnŁ„}xżkŠĀĀČ*-@’O5`®ąÄWW„ki"4i4 ä©=õižmDSmSNøŗh&$Øę£æ‰“æ%ąmźĖĆ„lfIm­½ąpƃĘ9ÆTšĢq[[,ķū»…l–cĪ}Ø*;źŗ•ńŌ%ūCZĪź]³zW‡‘}¤k^D‘’U€9{ÜPle:{ź:\PE)ä֕—‡žĻ`±V}¼œżć@ŃfÖęßCAŪ¢¾q‘^mām)$ÕĘ”oq$ŃŹ7īJf¼Ā@-„&r˜čzS®/ PŖēxε###S¼k‹† :“’}Ŗ…œ@@<ń¹: śPʞÓ̇O±»ņ$HĪџJõksv±Ś]J›Qqšˆ¾§ Ŗé­­ 8ē¦ĢyH„EčzŌ¦2+ŪYeņ|Ą’ÅS—E×bt½ū/Ś4ĀOļsŠś~“ŚŁźOņV$7*8$ņ+•¼{»„5s鎵—+”¼{Ų‘ pĪ=1S&—q}cö¹ø_LÕĘ6.ž“௠j65ŻÄh¦X²ØzƒXZü·VwF)IŽ,œóToĢkĮv³FcKÓ·Ö¢øB" #mĻÆzN76:] ÄšĪ‚3£j2Ś»2ä! f½>ć_[M2鵣®®µ9ˆƒŒgŌsšÄŅ1Æ$Ó|GįØģ.Õ>ŲW\cĢSß5łĖūBü2Ö<<uįø¢–}įxÉAŌg±®j‡}ęĖHŅźźŽĆvB9 €{ćҺϳ$E,”§›²ˆx5ä×Lś, µD)µ¦j°_ŁYĻõ©…Hęŗ?KÖµPžų}ń VЦ¶ø¹²†õķŲÜ1%†9WŅŚWķei³ŪéZžŸŖDī$s !Ԍ` ņÕą®}µ¶‘ćß¾'j? ž7Gā;{+yoŒ°G!M¹ÜÄüłć©'5ō§ĮoŠ:÷Ē’Ū4æˆs 5ō«inG(Ķ(@Øé\2vŽ‡‡iÜ~©ųN_Ś«ć6§eįøo­ē½ņī%vÜ­* ~}’ öŽ_ü-ńgĮćBž@Ö nŅ’¤ō‰ˆT=@Ņø+Ęčė””ųžמ ųĻQšÓ_“ŗLR‡“˜¶ąėżŻŻ+ōKąwĘ ;ķ&A­;µ‚ŹbZ,w¾sD÷0ņ>Œńæ†a#Ō“ƒ%ī•"‡Y1€ąóÅy?ĆķgKųoā«ŻOT–Ht P­Ź(ąõēšćņƒÄRiŲō<’ö¼šæÅ kĄ¾=ųkā>[»$0OXŽć<†ņ®Ćś,.»&”ŖXėÅÕJ¤¬øŪČ<~•TA(č~ü2ńUÕ÷…m.%ŗŽśō'•9īœśėJžĪćPxd`ńH½vœnö5ļŠŖqŌ‰ ‘^Ēnļ䳆5,G ņ׍5ÅÕõėł£˜H¶§…ĒjUź8xžCØ^=­ėŪżœØałā¾ ż°¤†oųFm$v‚fm›°e^¤ŅµĮūÓHõéĆ”ōwĮhŚĆĻkVūCN»Īć’Ćė]¾¹āI®,£™ŚŁ8 OæAĖé&ļcߏ°Ŗu.ų[E¾ÖgWµWkul1Ē潋Ä~3¼²Ņΐ Za§ĄĘOė_Y 4~§—ŃNIv>Bń‹›ł$Y ģķ–'ÖÆhZJ¤Ŗį3TĻcōÜŖžšž±gcö8¼ÜČķD±BŪ¤1«sÖ¹e§Łį©črž4šÕ¾»ąļ=¤ķgŖÅx×oČć89üÅyŸĀ§Œķõ{k·[}cģže¬*IsōļXJ‘ķįą„·Ń^Łī,¦ą–97V‚=«ĶÓŹ Ė}hLėT8–ß„J—±]öƒ©E3Āó&mŲåÉź¬ ·čMZÜēÆd>0x3YšWе Z"ßxzęčOg&xT-»ó_¦ßiéõ‡^š&¶©ż«„'g•æzČ:{Šī§RĒĄāšO“}ĖšÓā~…¬Ś‹+ŻJĘՐe¤•°8Ə’lč7–MŖj72iŠĢa·Lī†1·Æ=9®˜V9)Óqv9?ٟĄzo‹< Ä][†=B/É‚¤ŽŁėÅ}Õįßėŗd¶¶w2Mu ü…dł‘‡u"ŖinwR©mĻŹÆŪ›ą\~,xSāρ­āҼ ćW"śŲ|±Ś^ŽK"oę qš. ÷ĀŅ’źŖ $WŸZ6Šō©JęĢŠXßā)!‡=C0ąTŽųĖń“ątŗ¤ |^žÓo2ó Œ2³ō,=1ĶrĘÆ+4Ƃ§Z›§U^/tr±xū\×õyµÆx‹Pń±4…žęé÷{/ ®®ņģOH ‘ĻjØÖŌ֍Ҧ©ÓVŠŃ%²į­~ūĀŗœ:½Ś’9ćz’tšżWż‘ÓQżŖ.µMF𕵄“öTŻB<˜Æ, ōź9ė]4’“±åē9ĆĀᧈ{E\ųććģĆ®ü ųńā†Ņj6zŻ“l·Vb!•–Üäķžä~ėPųQą’Œ1_ė_³ß‹ķ ń~š<½WĆģDŠėœ˜‰Į=>Ÿž+IįVĒ>Œ¹ØRĘr¾I¤ŚźÆžGÉ÷ͬh·—ŗŠōĶGHÖasÄ3ÄT«ƒŽ;Į­ ]h÷ņL¬tö`ćīŒõÆ2„;3ō¬:"„£=]ÕöćOŸO’+Ūƒ½O^+¤±ņć‹ytR…MU.<±4LW–SŸzµkpf“žŃu{šmÆĢė‘Šā¼E"–·XwwŻĒz–IgOŠ7Ž&ߊgõ±ó…%­c5`2o`(æŗoŽwŖńł–šÉ6Āv¦ćš€8 K‰%ŗ’į.\+„[Ą\`Še)k”Æj®^!Éā“!i!”4‡pÅLc”Ŗ*\jf{†DA·ā’ā8® RvŽG­؉»Æš7ĆŽų‹įˆZ×ŗ7‹ģgól$iēSŌ+Įü{6±mpš0ŃüGż›U„G;ƒ*Äõ’8c†¤Ł” ź_D®Uw„Jr\de@Ŗ¶¦<ÄņHźæ7ŻÕ£§É‘2µÕOs’¼NSÄŖšeŪj—@C±q*¶ŻøĻSž+žKÆéO4v~"Õ­*RÖ{ŲōĄjźśžZI3μ)ā­+Nńւ.’ M$9µ•}v0½ĪßT‡h‘Š!>•“Ųքm”+<7Ž]²FsŸJé,dŪ“)=?:ƒŗJėC•ųįMoÅLčPĮs©Ä¤$lqę ē“ėÓņļś¶©kńļąf‰£xÓI:_ÅD.nāQƒ†xĮDZõ­9Žz“¶gŹ)·ń2hÖ6itnķķ$ ™Ž{ģōؼ;s!$*õØlć”u:É[ķ )=GÖ·ķ!+1󊝎sV8IEVžūū>+„€ņ}ģV‘—Be˜ŗVµ§Żź)j÷Q„ĘOŹ_ž:ר½…ާ‚ź8ä@:±éō­#¹äbé#咏>µšŽ ž™ĀBÅԌŒ‘ś×_š÷āgˆ5ŻEXøyc·Č‰ęp£“]ōŠĢä”¬ĻŚļŁ#Äöz§ōżīTIBår{Œ­_ż„<5Ö¶J«ę,ņŖäJńœ{Šī‚Šš}§¾Gįaqa„Zœę(×`®/p³"²Ž ÷­==m+ĘŽÓPŪ V#؊üOżž.t­./ˆ|K©.•ŖZßH¶¹! ”`Pē¦AĪ~•7;)ĻTŃś—ū3üYŃķ|!}š#ā„qė>»ķ”iČd» ōōąū×Ģŗ$ž.ż‘>:ź«abš‡†w“¶Źs‘·B§±ńō˜®iŦܜ^Ģńo‹>(Ō¾ ü^ń?­­…ŪVņĖdnļģ­{KūŁbT˜ī ‚¹Æ­Žµ„²±ͦ£©kØ+’¢²€ĖÜZéd}ŃUŽ}ėŚĮģœ?H¼Å×āj“ŗRŒb¾īoĪMmŒo)żßĖžx®†V‰”Ŗ®;ā½x-ēšĘeÅÓ¦Ļ+žßZ«ks,c!9®ˆ-6¦ē°Łė?iŅ£w’&e&ØGu<“æī›¶zUobŪYł4į· œņ+ź~dÆ «m^äP`Å“æK{ŌŚ”ć<k”¾7„$6q‚ ­`Œ\™’-ŠŻGĖEv°M)NYpA¦„ŻĪy|Ms+½›@‹>ƲÆ,%™Ģ!!÷ˆ= 14Eŗ¬E%%Üō5Ÿ=‹Ū8”—NqŅ‹ō0·Aāł®D°ķ9čJČ]>Öę褅•·dqŒŠ4ģzUµÜ VÆOJĶ»’ßPcP ®:³:©īzµŗĘžSoīƒšĘń/‚tŁ5µņłŁģFA•ęŹ}Īäō±ā°|šƒ.}7CuäĢbŽ<ŹĪ{s_}žĪšO‹ßī“ßüBKχ A2‡Q‹›”ې~č4¬e9t?b>üšOĮ{dš’ĀĻĒužźņŻdø—®’Ć5Ųź~.ų}į[»{“ƒLńˆÕK˦·'ųFF~“łNg3“Ōü1ńāŒl'Õ-µü9¼ˆ¼–Č0ū³ĀnƎ8?ξŠü ”x%#ĀÖ)e#,§ē'ԟZŅ0īC5µ½j æö“I«8ā=źjóMCĘŚN‘)“X¤[oĀ; (śž€V–1—™ŅEā;mB8ä°th£ĆZ»5»%”i¦ŠqżŅĄœRhV8½[Ęś†-}Y¼`³"]G õƑėļكž ×ūM~Ų#²‡į§†.ü9ą4u&¾8 „KŒ³éYTŖ¢vR¤Q²/ü›öSż‘Ƭ|cć[Ko‹ßcmŻäk2ŪIßåWœóÉÆÕ/ų«M‹Ć ~śÖ•¤hˆ6„„N#Šļõ5ęNWŌķŒ™ÆüOā_NŚG†a“Ņt²Ąż¶å,§=¹ļ‘Yzœ~š¼©qāy¬o5Ea7 FŠä ōĶstB’P‚yüMp#².ĀŌ®Y^!ŠsŽøm_P·³»1é±bŲ“=1XĖp0žń>ÓöņŒŅ)hõ«š]Āay5ψ®[Iį€vAóӁėHz}I4ųgLX§lćq=«‚Õu¼eęJąćfzŅ+\Õg·“›QÖo ŃtÄĪß3+ę`g źkā_Š“ęy%ƁOīŻvÉ4¬•ļŽ¹5Ō£`??üuńsÄ(Õ>Ē-ÅķõŪK°Ē[–õö®‹įĻĄųŠś)ung²’bĀwʧųzVrVģ~x7öfšF…įhbŗƒP—\ȓ`0ŻŲó^‘į†B’ń1ŁW#¾;šĒŁö2•KGųcĆ~Ó†ł­‰(YsŒę“|Ww¢KföF.&yl¤`VŠ™;z•¾x'[¼ūeå¤cę *‡ū߅v×q½»½Ō{'#j½™EÆ*4K£ó®JS„ŪI?Ūc8Ü:Ņ*Ś&Ļń?ˆbŠO³łŠO–ĀŖž¢³-¦“¼F«Į*šæ7s3*č-Čx$b±gŸ=“2Z\²)ķėY·q³­Äš›$Ńɂsøž1W ·š+¢c“(y57čkar°-óŪ5ӝB+č ѵ•“švģĒÜõ#ރX³į>¼š/Ē/ ėµ}}ś5”ĒNĒ`@ī+ė…ńf·¬Śiö^ G°’Ā# W×4 e½WO‹OÓ-§ÓnĆÉ),cG?Ö¹«żA" ĢųaŽE`ŃĶ=ĢøZl3±ķĶGĀ—f;¹%b69ū “€>µ-\”ģjGįm6āš\_Ģo¢é䱥śŠÅń=”v–2'L“Źqå@2N=*\NˆČąŒšŒL« ”Å‹ĄšWė^…¤h—±„šöĢ\[‘FH©äcęc”šķ­µĖÜfį]ŲķÜĒRŠkćó£ ŸaQaŚn§AĘUČ'žƒŅ²¼Cc”q±£@£’«ŠŠ#’¼ŅdHft·‘"NKv­‹[} QŃVT¾‚ivœ€zŪ"‹_NŌōh­ZɆɡ!C7ŽĄk6–·’ģŽV±„l=Ŗb¬QįĶ51o5Č>ZąūĶ[—ŚUߙŃĖ·Č^æ0§$oķ‰ķĄ„1“iÅ2ź(ęį$ żHĻ Ń`9 OķĶ#?Ė1ų×Eąė™Ļ—}"źaH9Č­© :ÆųŖėWŅfŠd±x!2‡ČL`…Åx߇ü64że/Ž)™øÜūÕHӘėüSćDšķ¬KlDX"B½ÆxTÓuūxļį±I&deNædĢ¦ŻŽŠĘā;«’^9męĪ0Ćb·õ„žb‘Ķ]½AļZF60lĮ“”m;—Ōžę –ņ5øŚPÅ+z÷ŖRėIÓf”ݐŸhی㯵2Śā cyšsĄéZÓ‘Ō]ų¶IąT†ˆtöÆ5ÖĮÕ/mīŒĢŖ£ē\šEX½ūĮ±é70ĖIłq³O$śVU²Øøx•#É)±ŠäDm"ur|ĀØ_N+Ģ4Żz}:ĶŅĀŽ8›8*Čģ×m8ŻŲŸh|ā{jŚdgĆŃGo¹”)Įd’"¾UńļĆ}SĶ›®é7ŠAqg ’xäQ†ķ€ē§ė[6p+"?ŠŽ5Õü3ą»Ó.#µŌmˆ/ę1++q·Óx‹ūIė=H4oEml¹Ģ1[E„QŽOõükHFģždr>4–Źh®.R9LH•·½}1ū#ü/µń~&§„=½¦ö`rI/Ž·µŌO¤<®h¾Ńļ-¼čnus D²C/ØōƉüy®Ūź’‹eÓlķīgżąm˜ÉĆ鎳*'„Éį=NĆZK«É$¶…“+ę9YźqķžĘx’ÉtŻfŚóM½lA2•<»qśu­Ó6SīTÖµķIąVµ¼ŗ¶d*Wd…xļŅÆŪxēĒMc,1ųŠłÜ/īZfÜPöööŖ±V¹č>7ųLž•¬ŽĒ4/¦ö*Żr?ŪŃõIµŲ¼¬ÓAęy…ūąśšBäGŠ>2šV…iØYų% wå‡@_”>˜W›*ėĒwZœRNķØA“|vSŠ *µųwāg^Ņ4}KMŗÓb2öŒäŲõōwˆ>·‚&·“5µųe·_4ćq=0*\Œå$z/ĆŲʒ.eÖtĖkØžé}¹E£Ž¾„ń‹~ų‹Ćvŗé†;ϳµ³ŹJ¶ÅģĆŒę³”›1u~ü ŃÅWpX 58å_4īdĪ@ėœEpŸ“ÆĆ½ŹźÓJ {ÉcicPĒę(pÜŃĢĆŪkcęjZ¶¬xrćL‘l傞%•HݹKc­~¢jž#Óüks3^>}<ģńĖ3 žŻė[“Ļv|7ń6łļ¢Ānåyr}{œÖO‡²[„»nd%ˆqŚŖę‰3­¹šÖ—ŖĘK—|I8,xÆ„¾ éŸŲŚī‡+JŃÜ[ČeB{’:.Ķ’Š©wąk ļÖ| g åŒdīäóģj§Ćķz=£šNæ5żÅ„²<«ŸŻ©ä¤š>”‹å<ļāĻĄj0¶»šÖ™&«”M·eŚĘÕO]ć”ōÆNųū;ė^Õ&ÕüU0³ĶČņŁA+Įå¾§?„ŸnėŗōzÆd-5»ä ­£Æ5ņÆķ?ńA2ųgFŌībY’a5̌Ē*­ÜžbŽ[‰ŸW|ų™ąĶ#Ą‘ųvŪ]SOž5+ƒ,õČnż«'āÆĒżB_‡ŚÆ‚<Wv3³„滑TtUĄõ¢qŻāĻĶχ¾ÖÓPMpż¢ĘxžI[sœčkÕ4’ˆśüwWŗ£xOČe_0žäŽØkKŹÉü©|@Ó:Ņ<[4ö׏žQ·Žv/?2śo„~ŸüPń‡|ią&O ޤZĆŚ˜å¶~Z1÷›SZó!µsä}įžā=6÷EÕ/## fÓ3äžyśW»xBļĄžš¼ ŃtĶJ.%ˆłŪŸĘ¦Sģ>Pų³į’[ųņ-zYģīpdh×åo#>ÕŁxV¹ńuÖ©”AoäŻF£q‹‚r9 •Kcźo‚ž0ńĀ«‹ļ =żōö·ęE4ŒKÄ£)ϾkÕķõūOkŚ„ģÖ·ŗäŃ“—"†—üĶY7­ĪiĀēĻśÆÅ;_ų_ÄŽŸJņnķn^0|°H*H 8ä*ĒĆ…šŒ w·r0»H÷¬j¤¬Œ¼€śõKMLŻ2_‰Ÿ,|-Ø·…¢žĻŗ¹Šįķž:÷Å|—ā½{žˆ¬’āh/KƗ僕$ą~hŅ=ßĀ>ń~ƒy„ė7Ś•’D>\«9•upØ ‡‹'×µe$]ŽĒĒbž;Ō4i„‚Ęū†ć”ØöÆāsž ‡ū·Āo‹ŚķąķĀßį·ÄI•ļdp4ķ`&]_°ó0NGV ĒBqœł,üŅūōüģe(ĪFµ§Og{$7¶‹nz§5Ė\E“™•9éŠļŽĒZd°/“™ˆ ŁÉĶ6į̉óČOåLęQh®…rŠÄōéŅ»yIśw Ö2°ö—nĶ œō•+ĪŖČĄg§” ŃJåȦ‰Ü!łœ֜7–枤g‚)›@żą’ƒ’m‰¾~Ņ7²µ=:/„Ÿ’eĖ$ÅĒRUČ?/Ī~P;°\wūØkdLĶŖŚD×ń åAŸ1;6{‚+§\Q‘ż—³ÉOų6ņ 8ĀW¦Éż„¤\*üŅØūńP@?ųõyóÜgęGˆV-sū[JÖ-ųGÄvŸd»Llkµ?+·¦^ƞµü¾ĮA~j <]qāKKGF·ø6·ÅF‹»½ž¾õT„fe%©łŹŃHĶ(~~lŲŖßź W,TŽÜŠō`qŹ= ?ff!Ń[ŪҜ&‚Tī*Œl>IT䂬ĄśSRWG™™>sŠ/E Ś+B»1Į%ūóN‚ēfNą¤P2Į’Iš@ŪųŅC«ä`šö Ś™„%¶¢~Ļ6•s¶©‹5½Ćõl=? ž×’ą‰æ¶F“ńćą ~Ļ%ø¹ƒā‰3I¤Ė,ÅĀĖͳ9Źäyąäśr¤“±ßOcś!𧈬üG„iz唑]ŁßĘæz”ķ`ĆšėõÆR‡M{kIm`™‚ŻŖūW%HčS‰f[kMKOŗ°Ōą‚īŹxZ ˜¤I†X ‚Gć_Ą'ü;ö!¼ż›¾4ėZ­•ę” åļ“‹†_–ćK–Cµ7t/åė§”®wTOĘ«).%†6ŠxYŌ`ģ;–¾šž™§ųį®½”ÄöSjf=›I›Œóō+–¬l8£Ä4ĶQ²™¾Ņ °¹‚xweNP+é_„эzž[]-bšöAū“^¤‘ڼśšjuÓŠŻoą.”āyōĶB?³¢—fšeä~\žxś×½žĖ>šńž¹šĖUi4h¢‹|v3)é“Ņ•IķŌ~5šŒŸžŹ¾ńµµż“Ēm,°*”,£œsŽ•åö? ōæŻ; :5ø…ˆb¹jQ¾‡§B»[Å=Äpjr¬±²¬Œ&åōąV÷Įˆ^ šf±«čڬ0ŻxgXŅĘ„ln@ĘļĜœWƒšį?våϱČ16v¹é·Ž šĘ­C©ė©soįM@~īāĶ€ ē?6}ųōƦ4oŁJóĘŅxF_ų¾Ī(ÆU¤ņ.cĖ:Ū½xƁÄMŸ«åõ4"Ó ŌtÉĖkÓ0ī¹ö5ĀŁź¹h{ÆĄæ&•-߈§ yŖ];IteS»Ģn¤ƒŽ¾ļOYų²ÖŚŹņKm"· •w§õ“ųu%§…ŁI2ŪéÓŗłłõģkč9ķįGTĶGSĆZŽ5¬qԈčšbyä/ õSھÕt{MX×X3†šīI@cĄÉĻT«sl‡ ‡rZCųZ¾³šv¤&#ŽŻ6 zv®ĆĮžŌ|S}–‘³ŲƒóĖž+ö\· Ęļsķr|+¹õ —‡žéĻmr Ie}ølu5ņGÄļkTøžŹąeÜą!ąf»Ŗ4Šņ\-åĢĪJ¶”‘!iē$“šõ ż5÷iĄŽøl‹ęĘ:ōś䓾Ēé¹u#±²Ō„ž ­œ!^‡ŽE'ü{!F'eK‰õ”)ō,F Į4c˜„R¬u5ĄŚjWß üI¦ė:<y֎$Ja&žy·×5 ŌÕ“g³Ž^|.ųļ¬.³įk†šOŒˆ+{§Ī`ž_UnŻ’>µć¾>šn¹į‹Kū VĀ⠌eÓ+Ä t+ź8¬gK±čŠ­męz&¢'kxÄ„C Tā¶–ūV·œaı0Fx®wNĒg·ŗ6nZ «f.­ŪxĻ­q–ž(:|óiÓ·–€n G H櫪)k¾·qmؘ“māL@dą÷ŻĀ3h÷ļØŁ!H˜óø`Æ·éJ2g<5ާ¦éś¦©¦LóZ\²#‘½IąŠā¾;Ųźŗæ£Ö¬a†ś+ ŌŠžwAąūWE9ō8*ąŅM•æbߏ~š'‰µ ėļ=·„µ€ ˜ ,%=XéõÆ×O x‹BŸPū3ŽYßY4ƒŹ¹ļ¦x"ŗÜūž²—3hłėž )e¤x³ĄŽŃt‹ø5DÓ.žŠ#fł±ś×ēŸ(·EÜYMsā&›ŠõšŃijtrNV’YÓ8ü+ģ†ß²?ļō­āŸ‰ī|„ßŲ‹Ż6ęÉŌłīG_89Ē=ėRmń1§œÅÆų'Wм) Ō>|N³ńuÜD–ĒT3 -ŗq_ÉńWŃüJžńŽ•{įŸŪ’’[]©VfĪ CїŽ ÕŖŌćXŽkAųfŚ÷WS6œ‚tEÜŹN>_\W¼|;ųēńoąŖj/šėÅÓųZyŌ¬ĖJĀCźsÜzö«„œYXŒ$+Ņtź+ÅīŽ7UųćOź·¾9×üGŖė>4™{w<¤Č@čŖ{ ä¾ėč?#æk™4ėŻD4¢ėvݲƒÓpéž+Ŗ3¹ććp0§KŁÅikXżÖ|ąh8‚WŌ„P Ō£!g¶|}ā߼|CńąĒ‹~éÖwŽ-Ó/µ†ņźqŲ zŠH”cŅcīœf‰Ņ¾¦y&k:ör{:§ƒ¼ ąŻBč&msC–ŗÓīMķå0k‘ÜgŪč+3Q{>"ęž^‹—k N mSÖ7ŠūŒlås–³ńž™ ىõ;2ųūŽĄ]M‡ˆ£iȍā ׯjĒ–ĒæK™éś[ĒwŹćičzW”x¾S¶dŒ)s֑هQ£,"Õ#$źxĘ*żÜ²©1*GZĪLŌ,£3‚…Fzgj iŅĒM¼9PSĒ_jͲ&Ļ-µ@y’=k§@>Pƒ51‘§hī›ó÷?•-ķÉū+¶Üu­c±Ń?Nœ¹'“œ×OU`ężźdŽĀhę[ĆóE®æˆ4}_ūõ1ęĹ’IąŽńÖ­’ „•Ķķ„śĀ<Ŗ>i=Ļ©÷©R{²Š9]'0@@@å{āµÖį¶āĄéZ˜ņ¢©‘¦ČČ÷5½a˜€Œ¦IōÅvSÜ䯓ńvÆįežŚĆ_‰ļü©QšÕO3dżŅ;Šż”żžh/†ĒGšē†0ŖæC¦{Ž!Ó¤Ō,fš-Žb`š ćÖ¼ŠW¼ÓgT…‘’:Ōžmdwzc4‰“Cœw®ŅFāpŪZµ&žõ-ђL=++y2$#~N@4Ž/ i²ź1ź_bˆ]ƒŲĘ zMœJb‡­£.‡&=ųõwŚ&“īʶŽ-ÕąCŸ×5ā¾¹ŌMŗ°™ŅtŠv12˜!éšķ¢ō?=Ļ£iÜżDż™~"Į”ż›I’ń#»Łŗ3«z_ Ś}õē]ü&ń–P ļŠōį±ņrŸ¾Nŗj[X«vr ”Ļ žžµw:hU±©­hWQ^é“ĀĶeónÜ{Œ’Zžs<}a.‹ūM|F\ŪÜLډ›j R1œśÖU'cßĀNēŅöĶŹAnö̱Ü($Ęvū×Ećßx‹ÄśžŽ%½½Å„%"F¶śŌōīk‚„F}=lxv‹®EŖ‘Q¶·r:{WloįÓķg¼¹’Hm”C,§ £¹Ø„©Ōätn§m®éÖZ½„ŸhÓ%¤‹ōč} kž^×cĒLWŅai=žGų˜¼^qŠÆüÕ'÷s;}͊ź$Źžģ÷Ē5­mf÷؊—œ ŻėӊŌü÷V½Ó®-”ÄɰōĻ­e.žŅ•]Äząu­Ļ:£:‹aÓį6Ģ™br=«a“ł^·Z’‹žż3ķAĢ4Ż]KUĆk"O"\3&Ó÷±ŌŠs“Zū ²C8”“ŠzŅ Ł &ąt­ “1”lX±ūD—0²± Ē®kŃ—uudņ8皔r³„]T[³8Œł ć=Ö®ß%Õ¢GĪzŽÕ2V+2ݳG¶—¾{T·^lˆ”«wĶ%ne'fdI”£Lā²ļ$™vĪ‹óƒ‘š²m^9,dhYČ Ø=EswœĘ¶—ÄįQžŌŠŽ…cæ»B­! żīµ»§[ÜA°LsƒŌ÷«Œ˜Ā„ÜpˆĄœ‘Y×+ nÜ %°6sWŠC; ²”¬fÓ’Łƒ,€÷’v Ąµ²"€±łæ„>+g‘ȍIŌP`āO-‹Ė ÷½EeO¤_CTœŸJ "ŸDm/­–`ÄäĒҼūQųqąÉžkøü/aŸ)\ ķlņÜ÷ėWŗ•ĢĶķ:;]*†Öķ‹.Ę*1ø{Ō°YŽß3¼0–\ńźŌ„dTnĪ»@š“÷„±’ŻKƒĪ3ŠõėĻ2£Éaw’xé\UkPƒ9kļ ]jERK2·Œ¬…sĶa[xvwŗ¶–āIbxeÜ0p`ūW IÜé„Iæ¼l"rUAlž zæĀ/„ß~=$‰šļĮš¾†®]^ö"°GĻ;?¼kFĶ„+Ɵ³ßģ¤| dń~”ień#ā$qbIoG™ žźē‚:tā¾¹Ō¦ŸĮkźŽ+××OÓcd“2aPvć ōJ,ēœ:Õ|Eń'āÓ&—šĪѼ  _3[š,–RyŲ§®GsÅz?„žųgĮ^v§ØĮ‹FqJ}ˆ#ŸqĒ9ļVÖŠ ˜=Ęj”Ų†ĖG»cœr:ÕŲōŠģXߜą &śEń§¾ęRŖ‘Ŗ’ĪĒkŌ¾|ų”ńėÄŽ ųEąM{Ęz̧o™³“)īŅ/Zå©;©u?ØĻŲ‡ž]௅£üFż®õĶ7Ś’—žŽ2ŠĆ1äīīųééžęælo.­<#įŪ/ |"ŃōoxRÕVj±*†‹¾6ćŠÖ¼źµnõ= tĪ1uūķBŚöĖCŅćŌoŌ€žb²•’t‘Ķs7:_د쯵™æ“‰YČ Ó­bäĪ†×QŠmI-/ģķ“-oÉ$cĖƧs^;ćżKū:Ä]_¦ęŲņ!+×¹éųVfnL§¢Ļ$ZsĮؾõRLH‡…ü).lÆÆķźÖŽO³/å~č¬e¹QŲÆ£x£Kš­­ōrCi©ÜN†5 }¤÷‡Ž¹CYāy$+¢ƒż*•2ŒĖķWi‰’ĒLėgn=Ķ|Ńń“ć7‚>Ē{„h·Vž3ńH—j¤-ņ žńēŸå]€_¾0ųÓÄ+y&§Æń7ĽJŃtk{«ė$ČĶ»d)’hzt­p|=ż—WAŸNÖµŪ;{©X°N?„}·įŻ ?GƒM‚ŠZŪ'Ķåą}źĄ‰¾…MĚW†¢ŒŻ•BĒn®KTų—bö"ņĪ&Ž2ĶĪG­kŲƗ©2ųV’Ēv–Ś‡‰Æ¬T4^K`œśń^—ąĻ‡÷šREˆu95iTœČƏ„QV=ęoiŽӑ¬-¤T® ķŽłā^-ń”Śę«5ķ‘•ēĘ~AޚĖi¾%֚åŅł§‚VmŠH85Šx³K¾†Ę/†õ–0Ą2Ź{Ӓ° !Ōh„‡$¶‰Ś}³Z:“šDP9Bp}ޤŹHČż¹ŌE3ł¹Ī?¼*ó@‰,QLń—ļĻ"£œ‚öÆ mŁ5ŗ]š#9®¤Ö4{¹-õū„°!?:ö8ķśÖc¹ū\¢ęŚyƒtŚćņ®’Ē[¹€ØwB3‘[EÜjV5üIŖZx•,āÕ4Ė9ē¶Į·˜Ę””Ē÷N>µÅj:n£Ŗ¶7²[Χ;ČÜ?Óf½¤±ŪĒė™'N7.p~”\Ę%I£¹I€Q”ō5”ŃŒ‘ÉܵŲ»*“ż†:šŻƒRµƒO{˜u9'Ö ƒ}Bā^@Ė*ƒ„ńSŚkw;ćr søsA¬.RÕ]®nŅ(‡8Ę}kfĻÄZŻŖiré3ŻĒ’,ē†Ļų ²IÆ5 Ųü›µ*ŖNĀ?†±­¬ŽÄO·WjģX+¾ā¹=µKˆ®[ŃōŁ`ó0ĢKä)=+¢¹¶ŗµ…ä–0Ž ¦¢%-5 Iž+Ib˜Å,2 ¬µĀO”ŚYĻqsd­Ė÷€éŸ„(w%“Ń­•ÄŅÅæ'?Ņ“o“]6ŚĒlÄŹĆļsŲÖRV‰öČ#Ÿl֮꧂u÷2Įsb<–J8'­H*¢-ó»”vēpõØ/tČŃ“ūŌҕޔesh%+6å;q·Ø®ĆĮś’Äæc‘Q¹xĘ3ėšŚ*ĆHĖńwŽžŅęŽ³Śˆóå–nėQXŻŪß<2ØHdĄä’w5å²5†#ń,k|ń“@q¼u£kjžO²ŲĒśqO”ē©Ų®×rĻuēNˆ’ÉĄĄ«³ź81m£„3WӊyÉ$ąķ œÕ§®Ē¦MsÕŗ@Ī{žō 3ķąhüČ!!ĮǵQI<ā"1ŗ¹ēU)XfÄ~½»±™’ Tæ-ڹX“÷µB³)R½;Ŗ½ Ś}—ŲõĖū9$ÄÄe .?ŗ;W éŚ•“~a擐ČFўÖ®2¹g1Ŗ_ąĢmŌH¼įHĶIįƽóÜ*ł²°920i™Ÿ¼?­Ē$—BŁ‚øü+‘ŒMcI£ŚēœĻ֛E-ƒL¶†hŁžFņėUn"¶¶ø•ū(cĒ„O*6=G…žœó¬©q B“Š€3ųזų“SÕ5 ÅĘ'©]ĢqO•Øėb¶“įū}fęīŠ³ē¦{×{ØxUōKpšÜ¬‘ƒŹp+)$‹Š°šLV÷éķ•ÜN„”uSÓéq²°]")^ƒRŠ¹Āėś Oęŗø‘H<Óš®ONÓģ4¹$˜iźŽ vc“v„׌­-XŪ\±MłłĄįk—Õ5%¼ŒˆŠļaĆ Zab-h¬ę{Y”Ow©ī+°Œ@OĢvÆN«)”ŚŽ›og½­ƒŻE ątĻZĒŅ4TŅhIĻ'ō¬;Aō5Żš¹HŻ€M܅?„wzoˆM1É Š·“¼ć&µ‚čT¼ŽÄŽ&»ÖÖI÷]ēęldĆÓ (–å‘¢ öąšė§¹‘ł#„|hńµÜÖ6ŗi’Ü1ˆüū„y$”Ŗ~6mÄėś-ķ¬‰ęHĄ@zīT.Ģčõļ†ZÄ{ø¼ŗ–Z9 ¶Õy¤`ی×Ä-żœüQšnīćPŌīęÖ£‘²Ž±óōćÆjؤŠŒm£2u-_NŽÖŚū4hXl‘dH}Å{‡„ž1j>šÕœ>Ņ­4‹ÄI8 ʿܰĄ«Q6Q<‚o_ų‡X¼Ōµ 9ŚrŽPrUz{Öü×’ŪEgl·2ŒēxŲ¹¤’8Ż_RžŌOģē7 vØ@‰9#tü+ēŲīē–y,¼‰d9į߂@ąńT8ÉģO=œī²>¾µÓčrjŒ,¢²ß6äDļÜL릺 ĻĮčv0ė÷¾Ō-$ĢȘ ƒÓßҾ‹ų1¤hóčĻq­Śn”Ź lćTĮ\~T†ĻVų‰ Żj¶‘¶“3 r»/ltŖß<Ŗxz÷V¾Öo¼ō˜af6uĻćśPĪIČöūŻI<]ą»ėF·ŗŠāøó/U£ēŽ@śē½zĒķ?į’üH‡GÖ'žŚ°ń÷‰t;p'ÓZE‘ -ū“ć1ųכė1^‹ētPģ: ņ}©©¢Ļfų+’ “zÜösh²ŚZLČeGc—\ķŲWÖ:ÓézRE;ˆ ŗ>ŒŲ£™ Hóϊ>ń]õæ‚ü_į»Ķ54pįo,§āFłŗ¦z s^żŖųsĄ–¶×až;kÓ|¦åyÜzśÕ) I]xoAŌ>(j·ŠīmuŹÖĪ®Ts^õį€š§ž é±¾µu{xóEµ¢“ä,?‹<ńU{‡9ōļLJ~ųkį=5¼C®ĮĆ1†C6sćī/æZł{į+ųCĮŗŒšĘ—soy,Óaü²9Px¤ĪķčnüPńsj~*“Äļ­¹CĒƾæ^•ó]׎n|={wk6£m “—GĶbŪ9%Wü)F%F'yÄ}ĆSŁų¢ 4ŚYŽÄ&håPY¾^r^žõÄ_u+Ļ]x§į^Ųk°[›Ÿ.1óppxś:|ƒ·Sē^ų’ć‰5;ÆģŃy©Ū[y²ģą—=x’=kGĆz¾±i©j6z¦‡½Üx(fC¾&RAē¦)ŲĶĒSģ_ üińоĆ„¾›§ßj:lĻ$*ŻĒL7N+įÆč’5Š­¤koy„\M'ŸnÄ.¦ÕńĢ-ŌŽÉ ]ŲVƒ^og2Ü -ŚAäņĒĘ·†ÅřŠNö7ŃŽA3[Ü!łN~éƒ_¤ž&ĮćĻ%¤ś…¹ŌlQbtn ōżė”+­HØÆ”ōh›B­Šś‚2µntÅv?æŸŁ枝ūSžĖ ž7iņ[>©ugŗG÷£ŗQµ²;a””ļZ%ģš~© Ė“łĪJĪʇŁ6?fńg‡l¤ŽR„ī°׏¶Æģ}£~Ö?²ÆÄ/€—ļjŗœŠµęw(?č7閉 nČ8ģƹkFRƒŒwéśt“?ĶŪćGĆO|;Ō|AįßŁĖ¤ųÓ@Ԧҵ{ikA29\Ÿb?|ė4NŠ$ĢNy5ÓFŖ’MlĪ:†[˱‰]¤÷„v’Hvœ+s‘•Ü:–L‘·§Μ±Ėņ³³¾E0Jś“Č › m¼g$»ö¾×æŅ†ŹŒM(ö|£=OZæ„ėÉŽƒHŽ rJѬ5æ^K„ųžĀx®“»Øņ²[M‡ „sŸ”Wś=’Į)?m»ŪoöNųoń/TŌ4ė’éÖßšų¾Ö9k{øŽŻåz®ć‡Ē`ąv53ZP—CōP¶K6–(÷G”Aē~*^Yé×¶ĢÉ©XI§ńœšG~§Šą«ī~b|^š4~ńÕŽ…x7†•õ§ģ=ūO벯ķ/ąæYź¶šĶĢ1ßłYąć8čzóģMTžŸ ¾.xĘ^š_ş³Ā=ā–ķmd-­ė(ęQü%°:õ9õõU­ō÷QMōŪvĻ$Ļ5ŗ6/'™w!h²m&L>?…«óĖž Sū"Y~Ņ’³V³v3ė>?š“7žŒ±¦÷¾‹Ė>m«!ūŪŠp;‘qļĖ' ‘žw>:šqųqńÄ>xįŠÅšĮ”ÄŁ8 ’œ‚;b½ ĄŅŁ%ޟe$ii1ŚĢ‡īŠćÆ3E½ń'ĀÜ5ŚčGĻy³!iӻܞ+ę 7PÕü ÆŽišv£&Ÿ}yš2±<8śgł×Ÿ)¦šfšv>Šš‡ķ Ŗ\éŚKÜi6ަ؊ńŪ±Y{ūW»ųJ};Ä77ŚĘ‰b¶wĆĶŪü'µęūZ5—c²·Ń5«˜¤Õ]³E)Œ¦s½}!śÓÕ"ŗüĘŲėś‘_E„«īٜ5×R’ȁŹīŽ3čkrÕä·\ćę5źĒcϰõ¼–ŁŻÕœ–ź¬ÄÓcÖK–Œē„0Gm£É½ƒ–‘Ž ń.µkn²Å¶RŽ£½É£‘Óļ5.Vņ,ķ.yJ÷ż#āä7XŚ]ibĘņ(y‘š$#»zžj”nQ`üE°½škyē…˜_* /_ž½p“Ś[ŽĻ*" ¢”žzc&‡āŽ#‹›ŠÄūOĪj«YʅŒb³r äT™ˆÖo‘¹]čyŗØm¢»·&ļ<š}ØC¢ŃÆžĮq)ö©TńĒ$W?įŻ#Ä:­ĢŒÖņŪ<2°óņ€i¤ožÆq©ßh$R,eqóœ^ys«Ew~±¬)¢†t#qg6ŽJ†DbÜŌ×·+m4a¦8=k9¶5īŖ×;`>RDŒX0^sõ«ŠG¢_[L—‚f”Ē•#³…gqž©ßĖc*Å(Eō8ęµōĖ‘qhnąÜŽOzØĖ æwįc›na+s Ą`ü§Ņ¹Ó£¼“»k…{YS…V\r=*Ō¢“8»(䷖hžU,XķĮĒÖ.ƒk=“wW.‚N»óMǹ­1š†¦’eÜ(† ņį‡_zät-HZmI€sӚţhŹĘ¾Ø‘ŻŖ:Ī ŖßOƹč’{=I^gŁ×p*>é¤krvų…«i¬°é—ÄܕĒ84¶:„^$¹šmQķ-’åF™FęŃ©bÄš¾³ę“ā+¼Ńē‘ö}ōČį—ÜłOÄ?²‰”Ģ·zŒ|G6Ÿ,ĢŅĮ!åAń ¹“N“ä·‘†ĒšūŸJżšÅ+­ ?ĆņźicĶlŁTaé_3‰ģŅ—SćŪĒąŸńŅĻćWĆÕKø0ź6ćfučN:}kÕædæZkŸš)ŠŲų¦Č¬WŠHB•Ś0@Ͼ+Ā­{©é”ģ–š§Ś¤žŹö(M«”Īļb+Õ<ć;ķšäæé‘Ø6Ē<2ōĮ?•aīgĖsŅ&¶¹øŽV%[Ž+äߏ> ńΟ$šåÅ“ņn"KiHĢź;©ķé^– ĢĶč%sĘtż_[Ō4Øļ§Ņot»€6OČWo®;ņŸip]H·Ž Łädƒ_mĆł=«©Ėcģ²Ųö2ģtŻZņx ·µšt’@(©ü«ģ ×Ešf‚–¶ĘŁ&Š!ę!”n,zńœœWé‘vŲūģD‘ógƽRĻQķqM!LķSœŲׁh¶SĖ%»”ĮĶße”ZI#ŅtWPšĪ³£ź°[ĆqgĀI<2Ęeˆ™N}E}mńN×įē…£„Äį‘fć'`į ø4‘÷XĖKuā]kFÕµ«ODÓF˜—%d–5?(||Ųöö®n[å36é\(ć5õXX¾„ŲuH7¢«|¹Ē®*ˆ<‹«PÓ#JŖĄV'©W(čv6:DĒPÓ [)\ļvQ‚ĶźkŠ5źž)ŠĘßVļc¶ŒĒn@_JNF¾Ė±ĮÜŁ[[“²D‹¶Ą V?ĮĒńÄx<3ā:ŽźĀź)|£$™Ą^Gäkž£3»Héüiį³¢ųTŃīm§±ŗ…ń²Q·#ŲWxĆĮ“źšd·ČÖא ń¢¢ačq\ī= ©ĘźĒą}Zī%÷°5„ė!FB~ī=ū׊Mü±‘&|sŒš±£¤ajx·uvvÅeźi&™=«Hä8ŲW³ g<Ø\šĒų% Žjqźśf£}§\ÆĪm‘…ŪŌ‘_Fxž šŁķ{‰Ņ,d<}8­”Ž9`V§SćæTšåvŖ3Ų^„ąŁ'Į_¼«GaāSßbRm™yÕr½Į'ÆŁœÕŅ„mŲüéń|ž?ų_ā_ü2ńĪ„ŚГˑƒ-ÜDeeŒ’u—šż0żŽü[Æųóą³®„¬\j°é·ģt“•A{Q’s×fµ§HłÜf*-Ųū*ĆT{ÄWæ‰DŻ?;|įūhžĶžųåšOÄŽ(Ó4¤Ń¾-xvŅM[L»“ˆGēyc%Œ’¤ ī­tF™ę™Š(W­)žßšƒć߈ŸÅ~š“śx×fø‘m~ŃĆÓsa_¹^:“š÷ĆļŁWĘMń1ōmSFæ€ĘÖ²:¹·.0R[88™®Ŗ}‘Ī%R *šÕ“~źŗ&•«hƒMÓ®^ĀĘq¼wŠDXAķ…ĶA’?ą’_üeū"ųÅ’²=ž˜ž6Ņōų5$žīēĻžŚżŲ,LœI»±ąóŅ»)aŌÆ}ĻϼZń3ĆĖ WĀugžŸß±łłū.xoąÆķ‰ń/Ć_³Ēŏ‡Žų[ń† k.ś’ÉU[»ˆG Œa-‚Iźé\'ķ‹’‰ż©’f]Äž=š>‘cńĄŗxkŚMĆ4¢sŸ%†üœžŸ\šIĮøī·>r^<ār ś Ł·F²RMōęogåŪnšn~nų ĒŚ£’fRŚóNŠčŠSŃdčcFČE½Šå• 8ü{P»Ēc?K6=² ¾œWCeņÜĘ@łUĮ9ī3LgIāYtBö+ė ²‘ P®įÜ{W;<Ļ«‚iŽōXę–Ē ĢöRµœ®<ńÕ3‡g-Ō [(óƒ»ę«}©D‰Š9ƒ8q3>i×/ā¶µ"żš Ō¶żÕdŸÄšż¼“žČš÷€¼u”˜äuĆ»‘»÷eDZ‘ÆF”n|Ne‰QšOĢżšV±{­Yi—e¢ß*܇õāæ>’ąØ?tæė? ~<ÓtPM z”qm½…p”ˆį°8ā½JSŠü÷NĢūżmng2E@N@a^Oń*ßÅKįżboM ZüQ€?*ÄvÅl*G;ą‹>/ńĆ/‰ā±Ņõū+iĆ„Ä;v²ä Ļ5ų)s©Ķ¬|fń¦”}“qxįYyŻ“ąsļÖ¹«3č02>—°’,  Rōõ„ÖY“·H$Qœ†Ž•ĮQU†ž‡%į­ ³±±|čMr|dŽÓ¤wmke{Bų;D™ĻņXu©–u™Ēƒ«‹’ŗ§I’Ū©æŠšŁóā>»ąoCį-RģźžÕX 2?üxŹĆ{Jż;^2Ą:0ʲœ«PkźpÆCü}Ē֔Ŗ9ÉŻ¶u\×I¶ƒFŽÕףé0X@ ɞżĶwGsÄÆ-J÷¶¢ņ3Į¼ō®BH„3ˆŻBóŽ;VǟS©”żŸ“-ĄĪ@Įtń“PŚ”tĪjvrrź;'uXĮĒ<޵]f†ü™ F&ļÅ9:X#BĻlūe_lYSĆ+ ŻņČ:ZøŹĘ2c¬/>Ģź’0|{“}ęŲ)FĄ žÜū JĘōPB°$€+ŒŠęu˜ ŽÅ€‰³Ōtع2e9;S"ŖL8Į¬ rā“ūM»‘“šØĖ¹„ĪkKøkņń '9ĒZ¹wa+K…ćĶjIĘ^é²Å“–aÓo­eƇ ŖPqŸJģō¹L”Ę>ńķ]ŹŅĘĢą¼ u¦e)ŲO‹с&%˜`ĢÓ"z/Š›ō9é%$#lā™ä9Źä¶E! =Ɠ- IĮāŸm%ŌJ¬š¾wdŠ¢¶ŌmL%‡b ϽOqsd‘H(½Ah'‘Ę£©[¬o¹÷s·ÉŽ^ ¬ eĀpģĢ„±ø”źN^•ī?¼3usd÷WVė«®Aõ…j–VFŽÜč‹k: ąž rkø³ŚŚ4!ZCĒ&¼ŠÕ„C7v²a×Čaœcø®nOÜxæSšf™Øų‡Äwźį²Mā?ö™ŗ(؆¦ÜĒéWģń’āšÅįѼ_ūFx‘5¹¾I­4;)ČH9ÄĄu$އśWźƒ¢ŁųGN“ĆŚ=¦į…“tń(@qė]&ne=sā&«”Kk¦ų7IÕuVpcWsŸöŪ Żį–©¬iś†³ń&ś?ĶpĮĶ“&#‡Ć“ē?SLƒÖt« {k xģs§YĘ y$`(śSīuōIgbÉpĆåĻ”¢Ę2g×2[\É$÷HógsČöÅsz½ŽæwØCĄ–Ś;)(l1$ń§‰5}vśāPå%˜ģ@ (žÖ^#·ųcą÷ 8Š-ŽŁŽ>»&vądväūWōšką÷ĄßŁgĆž żžüįżĘņĶ÷“™¤nķ’2N{œży•źÜō©ĄÜ¾ńDÆ©\®”w&©«LŪ‚“ŸĄć·ČźŗN©āźwW^h厩¼L ń“އҹ Ž¢ūÄ7gĆd† ¶Ą/šŖČĆŻ‡&¼"źśf½iÅ̳\g8ŻÓžā2būSŠńui$‚uɏļ’…pŚ;²ŻĶ ˜ä›w8>ŌŪS¦¾]I®dø•ļĮĒ–ætרxŽi¬ęieū,²œ }(±”ę·7§P`Ó<Łą±Ęć\>½ćķ;įdļ©ųžm?U™+h²†e=”ŸŹ¶ŒlƟ?jųźź’Iš½¼š¼ŖT¬\MžütüėĄ4ĖGY¾G ×.Į|Ł›÷,}j›±2•Ž»Mųu6¹®-ž„¦ĢƆ8L¬œō¾żųGš£Lše…“š6žĄ†+ķ#=xŒ¦fäĻ¢m“u`Bzć [RŪiv67s5Ģ6·…£ßѱڜƒ“>FńĘ·Ær/­­ę·#o?*ó‹=U£¾Ū§¶$¬:sŠŌQ‘õ®®­"‡ģöQ:1ĻÉŲW¤ź•œŠ?™<–÷K–UØ/›CŹ|Eć7ø·kvŃȝTõśšķ|1oeƒ§kā ć7¶łyļM2™ˆnm!“YˆLČ tē÷śµõŹĒq Éø¶ ¤ēéCĖ]ė×@ażŪ…ŠÉńŚž«eŲŅ?r3øćō„b’2¼7 г¶:¤ mØ"ņPžæįK~‘Kz&…źŒdžÕƒ]ĪŌ¢{ės¾ø²¼O œŠ­quuØĮŚ'yī#~cž” - ]Ī(ŃdŖ’pqŚ·%ņ✘ˆ${u­ Čew»ŠYrT&Ž:UČ»[!čG«3œŗ=«léöHēcŒ0źak ©`ȹŠĘOS2 «³Ä…¢ @®;Q2^²¤n²Ø8 uؓ±QĢĶ6Āy<Č“ŒHćŠÖņé°@Ø7˜§„5-Ååķh¤DŪ×-Ę*Xu(“Ō“±ߜS w©A-œ7””:żk2ŽŽ{©–ź3Œaˆ>ŌžśH'’\?œ $ā5Õ^x”5 :Ź1§$L‰µ÷ŒļWÜežĻp$·caĮ*0°²¢2Ä:ąÓ” ŠfE;@]„’§…/õéY“ǐÉō݈:2ŒäqÖ±n.ŻīE¬ ½×ļ/ ¬e ™ŹńFF„s“ĄČ4ŻbāćÄV–śi’$Tį<øŌūąsųÕĮ\‡įʱ§¤SŻ\[=«(Ū~aõ®CÄFM)Ł“ū™f4$}sZŲhĀN¶×-fƒV»H%#(¤IōČļZŽŠ”ŅÄv–ņŻ\†ļ‹nĻÖ¦Ćr:Øui ĖĀ"hŁO~8«ÓJÓe¦2`ōź)\ʔǒißmx£;Üd®žõč–rEw£Ę#µe½ óääfØČȎŚyUŪĪ+ ƒO¹‚žX#šøäŅœf¶Š%0Ć=1]߃lle]÷ˆ\Ÿ½Ž*‹ē‚ĪO"Ér§ƒ\—Mš'in|·(ģ~¦­DŽR{ Ē,ė-›I( œĄ­· 2L|§÷v #ēNŪ9b‹ŽæJ” źŚÜs/„|§K“5Whīzœ}ć\§‰ō„¶™µĖ…ąS*ĒkØ,³É£tĒpG­lź²ŚŻi©o5“,Cnó1óoĀ‘¢g¾&æŅ † —ņ•ec÷…iZ_YÜø•d`Kz@Ī—M†ÖŅU¹I£ OɓҺdÕ&(ļ8†ś3‘“ŽŲÅe=Ąā,•ģē"ÖÜĀ­1“jÆSšõ?V±Š5:œO?xs’*R›Õu˜Zuūó՝rĻ>^KfuĘHĒ&¶Š²°ö8ĖĻ č> ‚U»6šÅ÷ŠMĘqŪė\v„i§i7śT#'fä*7^ÅZhm½±…‘%k›Ø&_˜\īöŖvwŁ"ļ0x9äzŹo ’;(5±…¾Żk+±\Ępi"×lŌŹ-Ś'䏓YEŽž×W×ņF£ęČl ŽŌōBĻŗi#’/™vśÖ°]F2ŚŚŚędāP |Ē×ėZ—ŚZ b#“̇¾Ż¬]ŠŒn~x/ǾžŲ¹ÓÆl^-o?¼†a±²=kŠńüŗīÆć5ÖĮS£¶ŲVžRFq“Žҽke‘õ?€;QŌīm‰h”óKqõėŠź¼Eū<ųnĻÄŗ“²ÜĮ¤ĢT³<¶ć<tÅg)“Tt>qńĆŅ/å]"e¹µµb£Č\¬ƒņ®cÄQ'‚/“]vĘūTeš)0w{ū•Q‘æ1ö’ĀŸŚƒĀŽ5šFÆąOL°ƒVŠGŚÅŹīēLń_?xēÄWž¼°:V•#YM9ˆĮ9Č­"Æ”„äĻ@šOÄYÆLöŗ…±žCO›ŖÄĆė½¹¾½uŅŪ 'āqɽŽ?ā7ʛļ‡VóŁÉ'˜^č&ŲNąfüÆDųCūQĮ%Œ_ŪāŽśŅMŠ•HĮi²1Œ·?…rņčLb|Kń«Åšńń,ŗQŅfµ·g“ÉŪT’@'†¼gĆ~Ö¼Ko«Eej.Ł ’EɌtĮ®—ĀuÓ¦zv‡š–[Kæ ż¢IÓP2,Ā,ą±<`ęæB~ė¾ št–Zvīž!Œ3u€ńæ‘ę“:lŒļŚ’÷ÅŗēÄÆ‡öńźZ­„ʐ«FĶUw=³Ķ}Æū,cź? #xbŽY#dł’ć¶zZł+MŌ`·W–Ą,Q/Ó’ėŃämö9ųļUM6öž{yÖ «ĘßSŸĪø†V2ė¾$ŗ†id‚ŚńŁ·JIŒńsüé Ąū'Mšē…µŻ6ćĀ~#Ó¼Ėræ#“†M Ŗ{d×ĶŗĢ ńõ§‡š{}1ŁaXY¹ō`}F1M3K”ķ Ėü8ń^5³{ˆ!øR’(dĆæóŖwž:PńG‰ģ.|7 öäy‘\ŖaFīqŸ^M]NnĆÅV~zvÉ_q“Ės¼ś­\ų‹ńe|}'‡|Qq¢¦“­Y®E\8ćұq‰™ę‰ā„æŌVŽßX‰U‚c™Œn¹­=^Uš…ī‹ėg—“±Ģœ’Jv5ņ)| ń'Ćż+ĘzOĆo^¶‘„^9@ņ`‚yć'§ZśæćŸĄ+FŠ$Õ¾ߣųĮ¼¢šĆ˜žŲ=*&žęsGäW‹¼g óųkÄZ<ś·®“A0łķž}ėĖē¹–Ų‰V"įŪųO }jā…ÉŽ6•Zļs>xõÅz‡Ā7‚|YnŗŻi“ØŽLœŲ“Ļ暼‚?SōVŚžĀŅźĪķ.RT ­¾ĒÜWIßqäĮävjĪq埼Œüz4ńo=ż¬^t"TQ»ķē­~oIrń@bó2Č|·ća×>õ…ŗŸBŽ…āMSĆ×ÖŚ¾™"-Ä$ĖŁœb¾ņń暿¾ h’<;§Ś®§l²GŖ£ÜűÓüōؔNŲ®§ź'üWöжų?ńv’öQńåģ«šß؟Hk—ł`Ō É<(l /÷€÷Æė#ĚeĘ‰ØŻÄč7”Ź0čŹy}Ań©·5höƂ¾#·’Ņ}2f\;ī@NGҽ³VøžÖ٧·Ąu9äVљĻcų풃…?d(ü-ćO~ךōrxĘ ‹āš€ģ±Ō—åŠéĒmŹ6“ĀåI<°Ļņ¬č2隔öBRƬl:1ĻQķYįmąģ’=RłņZ“ĄÉ)É8RA"¤BY‚”ąõčĪ*Ȭ6‚¼õ#­Sggv‹Ģ;ŗąw #aYd‘£HXįIĪ:TQBŹŪ•Į\ćw „R-ģŒ07uŠ›|ŒĮT.Įķ@Ėö¬äĀYb‘[?)ś’’Jżø-?cŪ<%āūõ“ų3ń£ŅuD/µ-ÆXķ†b2%™Xö OjvčĪ”ō ‘m›H˜[Ī·Ę5Y`‘OśŲ›Oä<×­X„Ķŗ]Cŗ7<8ö® ±6‰ņļĘ[ė¾Õō}hĻi*fēK¾‹“«Ļ§|ż½Ķ~wÜźR_źŚÖ®°jŗcĘlutĄa2cnćźF3Ķs'b¹n:æšS?Ła>ė÷ž0ѬŁķ£”]$ń ­Ķ³œī÷āægłŽ9a]š°É'µuRĢźR(Ļ&JŒ*"õŖ²ĄÜJķG£ÜT LŻ~µ÷ƒqqļķ@åTyِ céQØÜĖó…ĒoZ“²łFEĒόtĪ(zĘHŸÆÖƒXK”j7ņH‡ĪsŠ­6ņŁuK3nŅŻ›"EūÉī=č:©Čžøąæ¶ķÄßx—öBų£ā؟X¶ŒCbó²Å"å21źp£ńļ_Õ§ĆMrm_M0ݲG®ér;Sˆć9^ˆō#†+)£¤ō¤g±¾x‚i71‘ŃZ—ĶžQā9G‰¶Ė>ś÷®«P?‰ų.ēģM¬|,ų³ń3Įz=×ƒ¼G4šŽ’E‡‚@»¶ąc˜ sµ½«š‹ĮŚõµõ”RÅq€Ū•pA=2Oq^}e£čĻ ų FŃŁj¶±^Eެv–ķŌWĻßtÕµÖåŌ-āłcv2Töż+ĖØ»EX<«Å§ß[źšÅ"`†YŽžµ÷g‡ž"xKĀ:w†ę2kØL°J«ĘĘ'ŸOzĪiŽēQõŻ–Æaįż{Oķmu eÜAM®¼6zærž)Ńå±ŌÆ ktµRېöu=®ģ š•™ĖV:5Ž•ę^`ēóķ[Z½«YN#PFĀŻ×„{ō™ęŌZ˜w—ÄLq“§8ć±Ŗńiw/i.¬æu0 1Įü»ÖĘaiŖßZŗ‹yšĘ;ŠÜŗ…Æ¢WySŒgŽśjĒN-†.AžīSPjMė-ž W5¶7ŽÅķ7K–t˜ł’œ ‘Ō{×y”K6“$0‰Ż‘RŲĢoÉp÷Fꎌ"Ó?˜ģø~‚¹[øVķmī•”žA"7w“$ņŽœt«ŗ;Į$ŠŃIņw>“ Ī«D×#ŃõT¹Ś·H*­Óń®’ūĒZ}µüš„Ö6ł™ĢQŒ)ü+HÄéŒLWÅŚ'‰-gH4ųģB®Xž}«ĖȊ)ÄŖFąs:PįŲ|†Œ—É R’|ąõÅg]™ä Ą˜ņ>lžµ“Z¬šĀŅylЧŽ™Ŗö×~d°„eFĻĶžćҲåsģ—Jķ#FƂF}}+CD±ŠŁįšUP·#GÆ’oF¶‚UY@e?…qsź–šŖĪ%%RGūŽō£?KŠ­/.Ķč·`1āŗxwģɤĆ4Š g­W7CX“x¼zn·+Ģ.Gńø g\hņĖ1†":õcœz—.ęŖ:ŲŚšÕ“GÄ:v™ŖÜæŲ¤q„‘žćš½O[šķ…“·6Ķö‹`ÄFĢ:­3HĘĘ5ÆĀq©ŚČb{{'ūåäĄU¦¼š=>k=NK“"9LÆÓv(õŻĄ,ѕī£9<µrß¼E>…”\Ļun–ń…8|}ęķXN'M5sņOÅœž-ńÅłk+Ļķ’čŖfRA\õ鎾ŁųućiõIš'¬ķµ(¬gVµ•‰,‘į`}’Ļ5ó™Ķ(¦ŗ”šķ~YXż5Ö¼šæÄžš^„ą¤>ń&Õ{‹˜XØČćkŽćŠü­ż„tXüJ“¼ń5äl–w‰kƅ|·ß ļ_b)3õlÆō«įž“āOųMńņ·¦Ż„ōAM“‘ēF:nPk‡ńOˆÓXÖē]»žxnbņј’bo_zóå#ŗ1čŽO āÖMvśŪķvöĶ“JGŻÆ?Õ“;›MwJń„…Ģߣ„ĪC>W }Ņ;v5…HŻt“9ˆéמīœ-§øŽģ„H›-÷öćQü=ų‡c“Ÿ,ōæĒ­ź¾¼Œæfŗ@HŚGf”ƶZG„IŸBŪ$š.Ž égŌ^BØ«ŠŅ ÓļWM¼MSi:‚°e|œŠńœlĪ•Mlzī‰ńwVøøPšBļ“ąūā»->ĀėʓŽė^(ø[o YF&`OśĀŻߦ+érŗw±ÕN‡S忉’ģ5=RėGŠōøģ,#%ĪFL§ŠņÆ ųvź’[M"%“CĢ|’ōÆÓš9!Sķņ\#„yŁō„¶zo†4“0Ū[ę(;_zł;Ä×īŗµõū\3ĢģBķc€¾˜ÆnĒŻepŌņéb“WŌ3$†EŻĪyÆCŅtH­”ł‘ØĄ¬å.‡éł^kĶ†‡„_Ś]‰åX®üƒ5pŗ§…L*ZŹwƒĖĻīÓåšØWŁm†£ާą÷ĀߊŸž%xwįŸ€4ż}KRyØÜ˜ąµUå‹óĀ¾Åż£?ąŸ?“'ģõ¤¦«ā½OĄZżĄĢgN‘ÓŹ§'ÉÅkM¦Ļ4ćœC.¬ß“­~]4Ó»óé¾Īö?=üeįßŠß  ‡^ńG„ļ…$e#T“V’ 2 8÷«ÄkM^įf†źü`€k&¬}… ʜ¶=Ź'ŗ€InžjūvŖĒPOŗ{gœE2 ²ē 5„™čF¢{Ē}Ģ“oue ŽN+Īļ¬uæ^iśę޲ŁĖĄ¹“¼G8ŠMĄą‘ė“YĒ]ĪZÓ±ön‘ńŸĄ’“ć­8i_"„ž8v Ąć;ūŸóÅ`ųŪąŸˆ|7¤7ˆ“+–Ōō#„ˬ‰½ĘOōÜLhc%Źö>T‹Ā)j'k€ęģČŅn'Ōō­’ i:Ę„Ŗ¦“¤$MrĒ€¦PģzÅ©htŽ7š‹ō8m¦»“Éżäg+^ ®źmgp-‹•į·tü+"ć$ĪēĀRCqK—ł6–\uĶtóĒ`Ø꣸TZhyÄm?[ŸG{0GēŚ‘"ķo\zū›ö>ųó¢jÓxDڽ¶—­ū« ĒĖPŻ€ŸĄćŪšÆBĖęNZŲįæą«0x?PńĆßų[R€źŹÉ®Ń `ńŽ‹IÉ"¾xż‡ž4iŽń’ˆžxŸV‡LŃ5fY¬'—4”ö·qŠźŠW±šŲ©I=OŲvŅb:H沓˜§ˆåd Š÷_‡i]Zém­Ż…ĄhnČdˆ©Ü§> SÆ”åĪ»¾§ą÷‚uĻX’ĮEŪų’ū1k:Ēm~2x6;?xžåÄÓĻgpby‰ā*rqĶK­’ĮFą”ß“+ xŗÖŽæ<æ!®.¬ šˆ@>ćŗXą}ꯞõu*Éj|ųi—q41‘Ö –Ą}Wź~sk_“Ąßų³ĘZž—į+Ÿ¶§Ė&“<?³ļ’‰€ĄŪ–ź×iā oXĘl'¤Fd1œ\׍ˆ©{“~ŃĀ8:Ųl,0õeĶŹ’OÉh‹šf––ęKø‚sׄT»½C˜b›d£€3ڹ#+ī~ƒBnĒS x‡\š½ÖŸ®ZÜ}–hŽUūĆҳ¼}āoųLnę¹)<ø/ąߊӛKŌås;Md¶DŹT°DaĮ侕”Ś:©³NÜT£µ…ā7h­Wr®żłõ™Õ ż%a6Ż2 tƒdpķå=č°å+ ©Ēu¢Oeo«[ÜY5Ō^u¹‘Y“ÕOCQʰ“?(äShęØĻ?ń ŖŚĒ’$™T0ĮĮ­xŽŚhÓĖ$6~“Žyl_³V ø]Ų5·‚+øäš?6<ĖœdzV”Ļ;Ÿ%üJŠM#YŌōk½6[}:ö'’)ämŖGN­}1ū:|GÖļ<mšĻĖ:ާa°½Š2ź äcŽžµźPLüū9§ļYŸ±ß±æĀ‰>=ńUŽ…i¤Ū¾“«Iq$»Ucø=;~µ£’ŁįŽ§įæ“m: _iZ¬\}œįÕP†F#®NÜz~5ķB”U J{»[õ?*Ģ3:“ϰø<<“\ҟ£V_ÆŽĀM+Hū,ĘHVDĻbkŃōõ’HHĻæzń&ģ~ŻF "÷~8ų”lõ Ė{£żŖ&[˜W/ Ļ$ūWuūKjŚ'Äč¾2šņĀoaƒlŒ2' ÷Ę)s£ŗ<ǚhzƒ*C¹‰?Ö»EæyŲ,‹µ:Œ•‘¬Sźs…¬nīŌ°JIŽW£R=kΚIa½øµøCæ™å'…'”©9ź›ēé:ŒšeóŪČūw#£†;QĪŗūI 2¶UCIK”°Ä@?v:Ö<óī™v(Ś>õ¤c»£±Ńļæ³ī,Æ£‰ ‘ør§£ŲC_0üšŸcā–ų‡š’@žĖĆ×±“©ŁBr–Óē™vÆć[AŸ5˜ŠŗlńŻ5-o|±uµ­_qž­} šæÄZ·Ā­zßRŃ5yžĆĶŽÆa>„ķ§RĒĮf{;Ÿ³¾?éæm£“ńĢŚb0Ų…Éč{×ŃpiOy#¬H¬Œzē Wlfš.ŅmõKm¦]Bß' IūĆŽ¢„ެ6)£źŽ_õ-&ń7ĆĶkŸ €n 41Žøś`ׁų~ž=_O‚čne>£q\3‰õXUā™Õȱ•†Ó'§š'ķ9ā½;Ræ:>‡ČŃGVmę&?‡JŪ O‹ń>X.ÅNźó"óē÷]¼Ō[+Ÿ>x:žā÷TK}JkX‚2{śėõ—ąlŗ­Ļ„ķt­fcta$Į3u({łWŃaՏņ÷Ļ¢ōyą¶ŹyĮ_ū¾“ķkSKxĤ;z]ŃZž<ŻŁAüć=«¼Ó<öūčłŗć„g9ظùÖYųFŚGU™BĆęĶzTĆį}8Ĉ$·$ļšąŖīh‘ Ž«jKy«žąg„sŽ ų…ż“ØéÖe“—×RHC —‘‰čŽk‘ÓlŅūÓą‡ģ…ń'ćXÓüCń,ß|0ų|ć H¤]ß/p«ü"æ_ž|/ųošoKBų]ąĶ/F>_–÷³F$¹œåB{ŠŅ1±2ņ:ų»Įž°¼f°Õ¼g/”c÷Æōß»× ųkĒæ•®µxŪõi†ĀŁ<Šb¬ų›\Ņō*ģx™šĖO…w$Š Ÿ\‘šJ77ŽĒÅž:ų£«ŽŁĪ¾ŌMŃžb÷÷#cmĘHĒn?~~ŃšSß üńF±¦ų_LŃ~ x„ĘŃ5Ʊd‚aĄŗEvR„s£”ž}¾=~ŌhmWQŌüaā+›+9&!--Ė$hŸŻ+œ­|Ł9‚}‚E·€OZõapםв2mUSµF@÷Ø÷l¤×5¢<ŗ’-€%ĮNyā§–ÜŽ ĒQLČ®ū$tšQŚÆÉc¾_–Ģ1Ąō4~ŽĒvŌ ŽŻ+”:m®™Żź$mrB|Ģäōz×<„ŌҚ>łżšąœ’’hM_ĆśÖ³¤ė’¾Ī®·”–¬I#Ž2:Wõ[ū$~Įß³Gģ…§čzæ‚4~7qė^owŖG’CČąņÄb‚S±ēš§ŠŒ&LH.¤ąœ^W¬xĻK.n¼CÆ%ˆ˜įPI#•¼Q²>Ių…ūLÜ[E=—ƒ™, $ĘóH»¤uĝĘĪkäÆų’V՞]FKĆu łŒ³‚p{oĀ« ģjųBąųPŽĶDŃŹĖŽY{ņ+ķ |&µæÓ@yf;ÓHN œuĶaRbqč}Aąo†¶ŗF•iÓĖu< ņøżM{-­Ī—bŠŒQ[…ĘrMfÕ̜NQń–ækā/°Ūč­q¦˜‹ Ąćv~éŠ[E}āHe[›&Ć)µic.Dxēˆ~ėŚ½āÆ‡õ«khZSęGw€O”’ė×āO…rü>Ō-’“gŽyĀ< ½>ćčkdƕ¶›­G„Ū[ɧ“pJŌśV–«żØńĪҘe'$Ž0h(ŻKĀąŪŚ_-åµŅʤ²™å#±éž Õ4Ÿh·:v§¦ļ¶–=2½~” ٣̸悹F¶¹„ųŠü ā=ŃYQĘÖ_ØķTžOķ Óhä#“åŚ乊R‰īæ [J×a³ø‡Sµ¹±•L‘¼n1ė]W‹<>÷Ј¬īć{` `N9ØmÜN'ŽÅX^42Bw+mvĒQWõ!Ž1ʒ Õ"R±ā¾ K¶Šā¬öAB8§ü;Šn`ŽöK½Jw)uŽVā?aķIK”Wčz\PˆĒ’ä䯫OO¶ŗ³ø —‚xēn>ąōĶD˜ŽžÓI2!T*šT\—_T–$Ž!n!~šNō¢?#˜‚Ż­TJĘT›±ž¢­ĆāŽ5øøy%,µj}ŹQ¹‡Æ^A,OŗŒ`qŠą ø¶ 9Ś”{Aū>†öµŖĒl…PA; *3ņÕO źėĆ5ÄØ"lØ'ŒjĶ»‹•£WW× Ų„»““Ö’Rµ†[xXFĖĘŽ÷¤%&ié:h¶/zŹāaņ„Au«ā÷ģóHØļĀäÖŃZĪ<±øĮĀ0ĪG­VÕµu¶€˜„g©P:‘Tm Ÿ•>$ų~uÕt-SHŌn ÓuYmöČü>½øé\å׌¼EØjkBצ!‡)ƒ—±š|åĀ Žē—k–~$¶ńcj:„“ØlļUī>¦·/ēÖ§Ó”ŽāõźņæĆZ#hĀۘ¶Zvœ`7h†IŪ+"œ|£ü棋⼾ø¹šŠ…×NŗT‰łįyą„_”Š[x~ā]UŽćT¶IVQ"¾ ƒ‘ķ_E|tń¾æąo Kį¹]F8£7XJWh=Ļz™ Lóx«Iš¶Œ÷·—ń)_Ż:2nĀć?{o‹¾x+ć_Ć#ÄZ6”mi­ŹĪ,ēēĒn•Ž»•tš öwŌ~Ė{ucu¦ėۈ‘¾Éjēå'×ėXڒІŖź×6ņŚŚ!*<Į€§=«¦,‰Č©įÆ>oŁéŚm³^O,m%ŗr¢bæĆŸĘ»āŽ·¤j ݚiz”l"<öē½S‘š…ŁÉüUš¼>0ӣׄ3£E)w”7ČO^Z“ą…¼-« oI½ŌÖęåA»Œ³d«ŽˆŸ€¬møćNĒµÅšĪ/xš+Xµ»6Ч›ų;qČĘģc>ŽõÖxCįNū>xŸÄ2VøŌü-x¤ÜŖ€\)#¾9žT(Ł­ó’Ä C^ń7‰ōŻcįü §Äāyq+ž1Yæ <5ńĘō)®,.ō֎u’åŽ#"]F?‡<Œäę®(q©ÜżQńʝb÷Lš½­¶£Ø[1d,˜hĻ9üėąŸĒχ¾ ń/‰tĖ āĘ7Œ¼š¬cHƀŽā§Č/sĖjæxā.…§ź^Õį¹¾9+øe£pˆ~8Å|Uįź y%ĄŌ- »8ß_LJˆAõ2pŠč¼Uż©„¶`!ŽźŹI61-,uŻĆõ«:Ņķ¼Aą»m6°ur ėӟĄŠz¤LccÄüeįßYév“čŪnL‰̤*ēųÉœu­ĶOĄz–§įkQÕ ³ń¤м«č=³B™¢‘Źi°&T¾ūTw0DœqĪJśĒąķEį+HäŅZöĪÖåk‹˜‚°ē.īŽõmt+V~€x~é'ųuą ¼msā;=rź[KŻŽVဂĄžµąśėŪĒćĶ7JøždÓ[|dF\ö'ŲS-lW9©ā= ĀöIvڱµŗæµdƒų‡\óĒä-iž&š‹Mo{¦Lšž—q 3£‡ĮǾ+ū˜ż‰k’ žŪ³ƒ>)ZĖ>+²‰t½rŻ[˜.c°aŌrr3Ł…'¬li{ŸZč:“éWP›YLr+d0⾬ŠōBł¤ÓŅ„ŠW ą¶;Š"uBü3 °±bč’/@z į#מünńģļńŸĮ?<.–ę[ Øæ“crUeƒp›Żėš’G_Ł·ćž‡ńoĮż„¼5%­ä:­…¾™āx¬ī|Č@ywé2q€WÆxžĒl÷5ŽæŗÜžœŸ·Eݜ„|·źzÜvČ®Č$±²ĢĄy‹ļ\u‘”ņķ­ū4ŚžÓ_³’мi —ü&6”µ/Ļ:!¼E8LöY¼gٽ«üäž1ü%æų9ńŖēĆŗ¦§§Ś\Ķ9ƒĻ9̉”b8ʰ#Jó+ī3Ō4’ ŻI§E{Os EæĶŒd(IÆńĖŽ‡–ļĢ’ö՛ ųąóÆ­™¬@¹FÄĀäķÆdŠī!ń=Æö]Ŗl`«–ĘÖ<זēTsŚõæü`м9˜¶-¬ip"ł3²ąĮīOzśoį÷ĘKŸŠŸtGŌ,×^Ó­nœ4‹Ę śżEoF éŠv±ŌCxęV®Ćü«/Xæ¹2ƒ;6Xćuzō™åUEŪ nMćéR<Ņ*“*>SŲv®ƒ™£&{:żĪō¶°Koø )9äŠ5~;‰£„2ī†õ<óLČ‘•Ś?#A²:o˱—AqœœSüO~¶ń¬Ÿ{ŲfœęŸØjי&Ü“gžÕfžÖ5Ģ”“rƒ?©J؃źs[z‘-“’H’‡…‰ć=3ApFĢ>óī$•nš4vŪ‚p޹mOIÖ-^ā×R‹īŸ‘אĖ؊Ö2:`śtØī,ī(ąį±ČØŻķ‰PĘEńD„”gA£iæi·óĄ Ž”¾ZHŃŖ¶TsYʂź[3*)1ž žõö›}Ļ*ĪsÅfŠw™y"ǵóĄÆL°Ó§³±1ź(xår1ÅEŠŠŌēļāū|āXexŗ_jĻ[imīÄhŅ)'ęć„#cŪ<5 ¢@ŽŪrr:é§Ó¦¼BŁ’GcxĪ[hĻē\@»³m5ŻUR ćżk3¢,ƒDš¼ņOotŃČegޤöśWeāū ķ{‹ØęŲčm’¾Ō™ƒÄ‘&Žš=ÄūŹq^IēZß\O'˜étÜÆO½iÜaų]£č‘ź‰u­NŃ;²Ż»:ē¾6Üi~'±Ō<"t¦¶Ņ‘žŅŖIgĄõō©™×NGädڼś/oobß@ŪWĶ^‚~l×G¦x«X›ÄkQÜ"‡åTą7Æ’Z¼|j\­3ģ²yZIŸ­æ²ļā/‚­c¾{Xõ(F2ƒh`žuó÷ķĻwiØxŒ[Y“ ©*ŪÜÕ°K(eÆĻńt½ę~æ–;Åćū8kŗˆü¦/‹uK“šŽßlE‰ Ģ?„śsšńO‰ž!¼¶ńŲm„Ž[@Ū£xœ60zW(ģi÷>5Ō­t…·’s%”ģŖŃć=9\“Ą^%ń—€¼X4 VßE×, ūe¼r)+(AōČļļYJ*ʑG†ŚéWś.ƒn¾)ÓĪØL¦V rĻ$zō¦ųN+muµ+}>X¾ŅĮĄÉėƒ\5`wRØtś7‡uA5Æ Fæj¹šŻ…›ĖĮ‘’¹ŸĆõ«’±„¾š~™ńgĀןŗwŒŽB“Ū·ßR?‡’^¼jō^¶;éU>ÄoM¬i6š¼Ó‹d.I ®ĒŸĮFŻx›{¤Øw†ćüW‹ZĻ>”u N¢@äĒjŁČśü·f’G£.‹§Y³żŒE4ydüźäķuÉĻ9¬œĻŅ2ŹE°$Šf`~Bzg­\’ÖāD4,Ē'ēš)Čś;Y3 |^×t‹²š~¦ŚF·ʘg·¬¶Ī,¤øĻż¶µā/ų3MѾ(źś‡‹Ś{+%äĢ̪öxJī…ŽˆųŒē/£^¼*Ԋsƒ÷_UŽĒ€ųĆį§į’ Žižńsź>¹ą¹Óo¢$hĆ&sÓד_‡ß“'Ā~ĶŽ9³æŗ†9ü©Ö“Į»ŹĻ;O`i{ĒB¤ ī™ōģÓā?ų—Ē^Ó<_¢ž§ØĶ ܎å>f€;ē¾Ś¾'iZ”–i&ųĮbv«äm”I˜ŗ›`Ÿj>–ēFńf‡oā;ąČ¼²{Žųś~•óĒ?xGÄN£ā?H°\@ŖāÜ®sœķäē’ÆPѵ v<7@’ćL‚ Æ+DøõÆF]FÖKv™åĄr Å”scLŌ­®”da §Ū€r?ė<#ši|{¢xßU𮱇|S¤CöŲ—n>׎JœsŒqžyÅtĘnĒ‹¦„üo©\xŪN]V•å\)pߥGėĮƟ5?xĆŚŗŽÅįču[xĄ’…?+r1W÷>g—s“Ńś1š;ö‚ń^™ei¤k—ķ/‡Ūd†Ža“ 杧µ}cāļŚ7KÓtȁµQ•˜ĖІ±éĶkögu5ŗ&Rh„čöŚ€civØĄ÷ķ\ī„m.ā)džiJ”ėō.iZŌ2²G»8&™āƒ#ŽéiÉ-d·y ŪśÖ-:¦¶™m¹! »€½oźPG |ÄÉqV¤­cSØÖüy?Š< į_ėZu¬÷zS“×ń²‘Óü’Jä#,QSoµL™ēŚü’mKˆJ¶–śV¤E†Ū‘š“3¤µPBģØėZ‚Ō6%PKV“ĪJØČŗøÓ%¼‚ĻW±“Õ¬€(ŠĢ¹Ź‘ČØ­ĻŽéžXWĀÖe„£f8·nŚ3žMztf’±ņŁ–Yķev}šĒöīųąGŌtĻ ­¦ Ś:p£p •8į«ęŠŽ6ńÄ]{Qń‰u‹ŻoPžMĘK‰ =zW]LS”T^Čłģ ačbeŠŒ}÷„ü‚!` PjęÆvæŲ—©Œjh¹Ž2~żyózŸS vÜćōų¼ęIJ/™Ńøļ]\pJQįbDG Ø±Ŗ*X‡¶˜ĒÄjķ¢—÷*Ģy Ń­ ‹%FX2ä×ā6wĒ Äs® }ÓAĆYYŖé·¾’+ķX˜-†Gc€éĻå]¶=õžœśŻ½“ĻdŒäPJ”ķ“Ū„6yµ%®‡uo«$ÖDȱy`Č<“YQKø’ąšCj9愘q[“"ł‰=“w–Ģ„%†O»"‘ŠÕ©3›Bčł³Vųważ§s7‡­cµ¶–Gv„1ł}—5É]³ųsm­ü/bĒ'|g ĻÆJčƒ>C0Į^蜃Ąmā=CŠüg¢µ¶µį»§mße“3Z8 aĒl’ZżāżŽuļx»Ą%øń®Æke®ZAžŠ—2…„–öĄÕŻMŸŽ”(AŹ*ķŽ_’iM[Ē>4Ö<-k}4–—2þYYTćƒŅ¼Cąoü#įOŽ6w_5±šŻÕ«Į(””špG§QĶŖuQĖZjx³ö„ƒGø“G𕹾фl«)mĖ"ćŸé_ųrē{j<2ęI¶ę'ŠĮŌÖĒÓįržX£+āo‹ķü% Ü4j'¾’Ż2ų*=G?ZüåԚ}CUøÖµ²O.<Ѓ ō0‹KŸĢJ,ķSĆįņŲŁŻ¹¾źŽģ~ūĖī6ü)į;ÆźPi::^@UY”PryĒp1ų×ė'†|?/…tėM<†GU\©ėœW½B:Āų³øÓķ®uWPŃŗr:×^ž}BŁą—)é]p]O"rźpéQÜMbėŹ«ž×½oŚx.HdIēe<ō?Ź“9\mKOŠŃjBd åwłNčźK×µ‘z Ć4e[éX—÷Į²¬„NpxÅ Ž…‹`”*Ž¢šÖ²4”•‰ÆQĢꉦYįŪ…ĢxéŽ~µ„įĖė]bĪćX±}KMW̐†+¼zdtŖä2:?Ē£ŻŽĢt1=¶šNč㑲Ź= ŖŗihDj$b×½Ct_lœyŠØuŖŽ“¬#xĄŁŽ‘ŒˆśXą*ƒŲūV ƘģĻĖ{ŠI~ŅN}E:ņŃ.ķ °1@„±Ī,‘FZ70ćžõ(ٱ™[söµ“60(}›Ģ;&HéĘqT„RBĪdN܊ 4ķŚT@cĀÆ9­&Ÿŗ=ń»$ƒŒcļPJ7@QäU“5ĻO©El‹s¼u¬ēŲøźŹOę»4qąńĒ' ®×Ćž ¹ŠvyDž®+O”¼csØ:"YÜ£¤ ¹8,£ÆCÓōņ,&YdŒÄGN⹄PŃ@Ļ–Ö;;`cH¦z­pz޲źI¼¹Z‚XÖBpģ{§Įoكć§Ē+›õš&!š¤h$—[™ ¤*zģVūēÆOJż„żž?b„æōķ7_“Óķ|wń ūF§©Åælž±©ūøĪ)ŲĶłiß&‹c¦īńžÆii<@˜æx£ī€:WščŗŽ©āmRx4‹o”Dux_żhöց®“įˆl5[½bćLÓõ+‰a•×5Ö5tcˆ żŃŠP‘Œ™Ÿ¦ń{qŃ“rīąē†«w÷‘Ų䈌Iz`v«ŒU‰2¾Ó­M“NSģł%8ō5^O[Åjbˆ³ņ—#\ˆøĘēĪ’¾(h¾‚ņŅÖõ†“”aSß9ÆÉŚ»öėš×Į:ļRń/¢×5čöʖVŒ&F-ю ązŚ;›¤<_“æüoö‚ųńi}¢Śkƒį’„UüؗN%'ø¾ēĘ}+ó'Pæ“Ļ4†I'—I‹¼„wbzšōiĀȚ“±€fg±•ŽNzÓä±®=kO#Ģ«=Jėj²ʜ±ĶH`R…@Ē©­ŃÄŲAI½Ą«77Z¾ÓśPJl½e¦ 6©ąķŻ·½oŚi˜ $ސ[',ĻĄ³œŗB>–żœæeŒßµ/‰”š·ĀĻų€Ųł¢95¹ģœŁĆźKc÷ÆźŪöJ’‚1üż›ō‹ˆ_gƒć_ŒLQ‘i"«Į ŻK,|ŒqŒ‘ųW zßN‘św§Ų&–LÓaš—„Q1ŁFcڽøۊä#Ō]ā66šŁ’ r äJņź;‘…ˆc·Mćķ¦gŌ®›ęÉēoū?JÄæń%ę¤ņK3%¤ ’T £ŠĀ;–r÷’õk "H“ˆć–ŹWĆĄ÷šóIõMī,÷ Ś”|ˆĮ럭j”&Léć‚1YÖŽ%;LÖa<÷R‡#Ø4ģL¢rŚĻā‰d3Ī>яŗ§©Æ(ń?Šm¬,SUń£m¢iO–3»cZF |‹āÆŚ#OÓ¢žÓĆQA؉Ćķ¹˜dģWØĶ|w⯊Rܹ›R¾{ūĢP2}…YiƏŽ;ųŃØGØŚĮżƒh›¶›•ĆŹ¦xƵ¾žĖŚ“¶> †ęžī2|¶Ą9“Õ«=J”‘ōī™š+O…-#:]¤J„~ōF0ō8Æ]Ҽa¤[•HUNq…^ cŹĢœ‘jK+ØŠ×Ė'­Y“š–“Ķ0g»-»ÆJÖ1č'3zĒI³IJĻ @vb:TśįŅü9Yj\JćųA>•Ŗ…ŒīyµæŽ® ¼*ÖŠĢĢĒ׆Z~·ØZų ÜXC ‡‘ųUń»½ĖķBX±†ž• ŕŅ"ę0Ńēļ r³ ’ŅāHU’tÜd7+^ÆgÆi˦Zhś„ö揳GœūŠQČź’ ¼9yØÉāXuĖ«I¼¢<Ÿ31¹õŚ;ōÆ;¾Y-cp®QGʧց¶sŲė÷s8ņaū6x‘_$żEZ·šķĶ“ķöčŹõ­Üé_J“ˆ%Ā*Äq‚Ź0H÷¬&汊ŽęŽņ7ŗĄbIJœÖ2Üw1ć" ` '=1[76Ś·6Έ†H˜0 ēŸZę­ń=Ü—Ś ¼7É:|”_fxKư4‹·rĶ“…l|Ų  ²Ł%…ĆÜ Į¹N1ž¢¬=ń—ęY(ģ+p8mfē^ó#ŽĀ{Anī<ŅźKcŚ·“ė鬹F’a/ ƒÓÉÜõaźZ#jV—v·Ā 4E¾`=p{s^c«h7:¬ėtRXf'3ėŠhēeŠÆt™#ڦ_PA«fX¦‚yI·ƒ’ÜšjœlTBIļ¬,B“r‚YøĄ84čuŻFŽęXšŻ2Č `Š‚Ó9K•ŽišŻI3g+ĒAR-²Į…IQŗ’>é ŹH߂v“…²Qß 8«Ś ]]]æŚL l”V<Æøõė@‘čæjh‘`Wóa³Ņ–ņĻFšÕķ šfR #{ÕĘ=Q²K”ę÷z “o‚Ś|±÷rĄb°ā[»GXüß²H®Ļ~y- VźMć ^{]6/³YNO0“Œ*÷5ē±ŻÅxwŹ¢#½1ŠÉĄÄŲ‚ •hš|'O”šįu]>źßT“Łx³–Ļń§ŲŅ™Õ'–,sŪ‰†0Ć֛įĶ!ģµ ö:l.¬Ąŗćӊ³h«čnėz”/ž«L}6er3šGµxOž![čWH·OvŃČJŖ§;qėXUŽŗTo±ÕxwÄ×zĶØ i&QA ف­u½Õ/o£Š;hĮPCOO„eßc*°¶‡X’čö±+ź¦H®r«•ā­ź6&Ü1¢™W<ćæ Ū•ž|—atŁ­ī£ nƒĪ<x"ŗ8ķŻB£3«įģiņ٘O¦¼p%Źė×±ö®'[ÜÅå²(x’"µ…²=¤ #ųĮėĶqچ¶·w­ ©”ō=«ƒ±q;_}”:Gp r3Šæā±³.–ģŒœÆsZš–ßa–ݤ–ę(< ׬ü)³ų—s4·W’\Ä$ Vē‚zŽŻč:£‚šœ·’µÕÓ£(4ŐDŖæŻNsėšśZ Ø”}:8n¦Ž ¤ŒBćõ¬ÜIš¬±ŻÜ=ܑŖČNX Ąüs÷ŠFÄŗE#åØ9Nö šv\’8<ö¾•÷f•ą/ė^×m ū<ŚĻŲ–1——YGP?,ēŅ“‘pgågÅæ‚ž1š…ŌķeģP©2K ‚UƒóģE{‡ģĻ©jf€|<šėŚZ¼lļ”w MsicéųsSŽ[ū§¹¹¹°†;yT=HükÉ~5|ŠaÓ4’čŗ‹ y$‘g·xĮ,Ąg:óŅ“±”Łƒš›Ćś%ėéĖĆ©Zƒ$r8įŒzń]ŸÄ‡öŗ…¹Ō¬­`{į؁ó3ŽēėIŠ3īdé~7~½·Ō­m›NUó&ˆv}ė俇Z%¶“ńmŚŽĘō"\“#.V-¹ū“§Šż0ń‹“+?ģ'ŃāY"uā0Ų0ućß·ē\Å_¤¾Öm-L±äŖœäcæēA”µŌģ¾ų?Įž!żšÄ-wggā-.ęYdøw€āAĒŅ»ÆŁŸāO„5Ų|YāHę6“i-µą20ī;ć§ēU-ŲrźŁäž0ųĖ©x“ĒœQiźŚ|’·(ü)ÉČĒZó¹¾-x[ĀŽ5wP%üM˜ÄĘåĮź>* ²<+Xń•ž„ńKI­­,n>uŒ(Ė}ćļ^ß .mmx¶®³ŻńĢc*ųļšv&RŅĮ.nķļY_-cÉ`*?¼SRńkCā+³]2Śp†ōĻŽ”ǹ“}Æ|ā'WҤŠgø€ĪÄpȤ0õéž’Ī¹ų?Lńž—ā-> ¹tóåIĻā9Lž_­a(ŲqŒŗžąļ…Ś}Ģ:Ž…ā=Zā„3,€‚yćµ|Ÿā/€Ž'ƒRÓ`Óäŗū5Ōå#™œ‡Eą©ōéWji ĻŌ¾ń·Į+[5kZÕķbP³1}æ}%ńCāW‰tĖ}>×ZŠŅo‡×ƒ1łėóE'|1č’×ZJ×-“x÷Ž| įOxWMÕōMI“TLččß,nÜćÆƏ>!ܤ>K J^A“/Ė–Įź{Ō¾ĆåFo†Ä¾&Q+K+J yĖėZž9ų?æ‚gÕ“›Ų/5?{-»å\xUõ©€¤Sųž«ŪŁk—mÜȬSū®•÷Œ,/Ļ„õ}VŌĻŖ‹X¾bĄ/oéZEÆ[źÅÅÜfH5„••oÄW·µĖXčÖŗøW–łņsžrJŅOBāŁõgĆω–w ]1“x`Ör•SÓ õÆGų¹šJ/Œ³ž„ŖųRK8|ei2Ļn„Čiqóß„g/"¤Ļ’gŽPxVqį/G&āė’īÖG‹>QŽGz÷OüšÄėēń·„ŲĒ«r×ģWtŁōčhŹ[Ÿ||ų}¬2Ū^č׍m”ćp·8#žwĻL×)­ĆńQšdö׎čüņ‡…ģW9„ Ē‚Aͦ£?ö‹DøĖ,zĒ½u:/µ="źŚ ’ŚM&i#Æ ‡§>µŗŲ—%±ļŽ­`¶ń^ń2ca?3qĮĻ\WĪŽ=ÕµĖKė-s@ń Ō"’ŽFIöSł~µ2]JCnuĆāøVöżŽKąņ:ąu'×ŠŌŽÅī`‚x“x?+mŪR˜łnŠz‡¼MÆų•ü3§\ZīžOōY_‚1Ų×„éŸ üSą‰f‡Ęm1½7‰+€ˆzłŠ„aÅ#Õdų+į…žÓÄ0*źs+f7š7°čGLŌß¼i§iž;Ōü9ŖypN—\{˜œǵ'"’ī}£ā;O ųNž-WX±µšTżŹnćÜ×ä§ķKššk#Xšž„³įŪ¬ł-l¾pNš~™Øl«t>I[³l.»X¤ōō’iA(‘üĀGN¦µ¦%±Ü|*ńUׂ¼Wo©/™%“²*øiŒäŁōÅ~»i—V7Z}Õ›¢–58čr;V„7­ĶxwŒ!ČSó^{ńcĮqxóĀ·:\Ņ •“l•±œīx®i¤~\źö—V7÷QÜ[L²ŹJ»NAĘ@ō®·Ćšßƒć±ńTVRÜD—”G÷˜(ļėŌV,źŽ§čEż÷†¾6ü-²ńw‡-u5hY…Ü>v×ĘyÆ©æą‹?µżœ?jĮšKÄŅųmćŪϲMo/ݵ½Ūū§N>nT\zP`ŗŚ棍#S–I„°Œ4mŸ¼„eOäEußüDtĶLŚK3—³YIō,÷?Ū›Ė(ļ-‰[ˆ˜I/H9ČÆå7ž żŽŚÖēĆæ·_€ģoŽ…wZ'Žm­ķċnV+‡#‘Ī?ī÷np©>UĢś?ų&>)Ņ$Ņ®ēg†E·Č(Ąps\ĪönÖĻßMóB'óāß*¶N=j ą+H¬¤śŠŠēP±øPĶŽ}Ŗ“`ĢūXķP÷÷ I–wØŚ§ęaü^Õl&ķ®­°śśŠ2Ä/²uVfUnž• ]„äh]Üv Ö™÷wü7öŹŌæ`Śūį’Äčõ‹ė_…šķŚhž/²91IŒNPwBCgÆt$ō°Ń|GįßhöWzÜzMķ¤z†q Ņh]AXuGŠVuÕŽJņŽe¹I6clė^GńOįæ‡ÜØ©‹³™ųé,‚¤‰bR Ū»;XpAüsYĶĪŅ+•ńė^>Ē H‹<‘6Š«‘Œ=«:Iv,'CéZ™¢<ø# «vĻ„ ßf%›łP9 mˆŹ |Ż~µi!°#°'9b‚BŁYČbT÷'„Kē¦HÜM“öäĒs Ķ“B²¬Čc`Ēå ŒWō×’ö~×öŒµßŁ{ā=ģCAŌ ūž'øHqµ8śR’= hžĄ¤±¹¹].ŪK»gńw†'G–®­#©ä©RH'Žž•ī¶—Ķ3¤ā7KYGByFō5ÉQhYÆē*yœ Éµü“Įx’a[†Ō”ųķšęŚK}]ŗ’žXįOŻŚėI_Ģ–uRܵyõct?‚_5{kyšÖźĘDh.-fl+c!—=ˆę¹Ÿźz%®£®ézrĻ6™s)–ŲOĆ[ēUĮĒ\שjW3<§Pš™ŗŠnÆ4©GöŁó¶HŲūL]Ą÷k'D՚²\¤­7ၒ„ĀgŲoķ“č0x3SŅbŁ4&Ł®ÉĪįģ¹ą×Gš·Å2xVŸN†Y씹&\Ē»zśõż)ĒM‚LśLÕ`¾ø’āUµpJs‚kRīŅ;»9ƒzsé^•)iQˆ"ټč7µyŖIėĀźgķLē:K;V¾A9™``;HūßJ»{am1“ndėLŚ:/Y®=»#S“ū×I—倪=č(æ+Ģ&Fłv‚yü*ƒ:Źčņ§Ģ8lŽ“ŠR:Ś%“h‘T§^jµĄµ:t’I<^rg©µ]Sš“°’k¹7! AēŽ½“ÄśÅŽ”g $åN÷QĮ'ҳv<ŪN· ,ѳU9R{J醝ŅyėŽ£ę=É¢ĘŃw8Ż/ĒWŚOŒ‡ę· jĄłN_®•{žć gŽö Č|˜™HAŽAģjłŗåõKćiYFf]ųo„yĶ‚I"å8'Ó ®yG±£‰ź¾]M ·K‹Ļ“"1 ž03^©Æ=†¹„Į„ßĶŚ-ća<óŚ„& M wą}BŽ+‰ćņTdļé^c©ųržĪčM1\„ķõ­Š‹čuzŸ=ÕĶ›Źņ*«s†#óÆoÕōßXŪĒØČÖ©°‡˜sŪøØš;h3ń·öˆšö?…„œö7z\Ņ:īŒõĘH’Āø-Īk ²]n; Ōg„xųķ“>“_EcģĻŁÄś_ƒu?C©ĶeūLQƒĆätĒl*Öż¤u/ĘzņųŹ?²< µ_9 ¤Iü«äń{źGpf^±8xÖ v>¶ż›|%įx ēM–Źq$Ęįø‚]›Xēł×Ģ’“Ā~Ģ>,ų“FÖo|tÄŪźSI'#‰+Ę©…=ü^WČŻҼp¾:Ō.­5}"݈ŗ`ÉŠū£ą'Š<=įoƈŽć]†[#hŪ›Ź#¹ģ}ėĢ­FĒRŸüUgāmZ{-ĪļĆń¬†ÅŁžuˆ’B߯\óųÕ/éŸŲī#ŠŁmevņŹ(Ēzį”Iއ³ųūĀ^7šn“įŠ ¤[Cį§ņĶŒ£tR@钧?ZųćĆŗV·ąŸŒŚ÷Ä{-YcÓ®ä¼W+ŃH@`{ĻøŖÓ±čŅ‘ść’Žh–Š“Y†§kwåJAb†0Ė’WœUŻvŃō zöIu %‡t°¹ß·ÜW-:}o ³†Ö¼ImŖé,ś{‹[uŒ\škēǜÜ_³ĪÄńܱƱĖ)(«Ÿ ä­+¾‡Ų:„£Üų/OŅüE”ZøpŅm ąvł€Ļzų_āƒk’ ģZ3˜"ÜDc®kŻŽĒčys¾§ %¾)†žHÄĶĪzd×O¦Gl’'ćŲš*fĻŠ²Ź=N÷Ož)”séŒt®‚Ś(ĮłĖc§³>ėJŹĆ6]:’IĪGµm F¹µ¹OŽČłrŸéWŻ]i”łćo¬iz?ŠtŚ3°× ĪŲūÉę•lžæ£ųŻ5ÆxsÄŒš<‘ęŚčømŹ@;IĻcšõ0Ö??Ēb½ūv=rŽž×S±HäŁ"0#œŠņŸŸ³¶‘ńĒąŸ|?«E›]2ŚMZÖ_,‘Įs×čņFĒqZŸ…²Ē†/õˆŖi¬×¦Ī9¢€e£ żą;Ž+ō‡į_Ē kĆ>%—Āž,øxķŪ!•”ēaän=ˆ® =L=Nir£ōOžæ~ŠÕ¾ų’O±ń‡u[vŒAdl|¤7\’*žr£šÖ«šsāGŽž_».[3“Ń­õ•§gŸ.Fq^¹¢k“ińÜ5­åŅı”gBFąF0qۚ…&J1M(kš÷†õv0Ē žu“eU§cń†,ÆĶ¶­å¼!”‰Š¼5ē^3żžé8čs[×L–v/u1ĮčkaR'™E#j„“ü„w`{ ļ,m Ø©“HOOzģŒŽ9Få+ķ<Ų\”ņLŽŖGJ”$²>#Ć>O4ܞĒՇKF-‹/ŹĻ“œą-vŽ ų,¾1ųsØx×MŌ$ŅüQ¦¾ó|-Ģ\|¤zu5'$§©ćŗ N¾BĪ~2G ×t¶fY88ÉśP•Ł-šEuęŖ€;ć½t6¾SĒåŗ(SėB:%±<Ņ®Ÿ‘IŻža=Ģ’ČŽŹvē84usĒŗ<ž&𮩧©Y¤b®«ŽN=3ųW%įOź_\Ēl`¼ŠnWÉŌ,eĘŽzĆ4ϫԖĖZFĀ`Z¼™U<ć&½ŃVX•€ČZ r4Ņ(X€ļ=:ņśh&mŒ {śÖēNčೌF%VWbsœt­+ ųü«Ø œ“¹ĶT§•Ф™Ē^i—:-…ī›”Ž\čvŽKü&š>ąæ[§—C§LƒŒļU“Vę'k}*x§ø'l‘ä¹õęŌĪ¢Kū=‹’iŽŚūŒ@ąýr~¾ŃõĖ­CM†åt灶³² }ø®yö5ƒčd_źv¾Öʋc©C«]ɖTĪćļ×ėY^(Ó4ĖĶ2ā]KQ:MŹ0mbBLgĄŸ¾$ųæL†xcUDÓł2†ÉŠÆæā:|Ac5¼Śµō—7±gsć‡į]1‡p>”Ó|q'‰48µ;ĖČw Śź_ę 8Æ0ńO­c‘Œ[ą…ŒœŅÅ$xˆž2ųsHɰŗ“U¼%•ïȧÓ9ƈ¾'üdŗŌn%]Jkélß.Ü|ńēéŠĻ?Šlü_ń*īŪOŠt»»{fęY]1ötśwÆŗ¾žĒśF™oe«ėā<£$JwłmžļcQ9t"S±÷‡|§iv––VZl6°Ä8 2}kæ³Ń’0fŽ<<ńYJ”ŪéĖń§HeIf@~é8ö§čž%ÓuøÆ†ŸsĶå°>d@üĄõ¤ccEs2ųĖUŲ°Ćs–a‚ו©jWO·ˆ†.1“ē@Չ¬tū‹‹xnēD“vq*zo‹4˜“wŅųĻŽVCŪŽƒ9JĒŽ]_Ę%2ŚŻøŪ’OOLUŃ­Ļ Ę{‡WIŌe>„ö Ķ³9°ÖņMēl#ØĻjŹ’hc5ź™_€8 ®vvzm…ć4~c€ņ'¶|A¦i—Ś|ŪŪ-­ĀŒ3)ėõ ČĄŠć‹BŗŽ=HŖ/$2ksÅz–—«,?Ųģ³I° • Ļį@¬röpK96óØ·`§†q\Ōöp4ņG"Fõõ5”÷*7čG«é¶'NAk½öyććåž’„„kWŠėV3[Ē0]Ė€ėŸ—†+G±I>§¤ ·c1ķ1ÅYKĖĖIŹ«ü…±DamÅ$Ėv’ZŽÜˆ%@ žŠE½²łPĄąīP$ūÖÉw ņæZxoGŃ-¦ūt1ÜHxø<ל鵩MĀTrBqšŹŁ­l¶WבÜĻņé`Ö¤šM£_$–³HÖYĮI=»ÖN6]Ī£TÓ4[:­(nF2Fr eišsĘé˜ó0źW©«„z°tK˲ęĀ]³—óX׌Gˆ“wūVćĢ€ńœmŪõ«—s[Ū”™& {å³łW#s©C<²8?ŽķJ[e„üĢ$Y””ż+˜šŚŁZE+#•'€M`G£ivw6.ŠIźŖ­g&‘=¦ ¦āXc‹ +£ÜŠ8’k”¦čŚUčQƒųŠĻVm;cyóŒUɝó*Ü$—ždłicŽkœńƒtĶNÅĢÖ s7\Ļ•ĆWVwS‘“„K>’c·Ó£*į ǵt <ķ(–@-„ä’;ż*iĘĀŖÓ9żNļĶÕ®Ī/“Ęj–”š¤2£<ŅÉ9ĖžŸJķ8gĒ©é² Z?.…Ą$°<šéa”Ć1šiNĢ$ž”ņFuM]ZŪŦܫĪųĄźÆ4ÕEż­Ģ©w0H?Zv-Œ¤….­ēŸĪņ°1Ž„Ö>Ÿ„[ßßB“’æū½(čŃč֖WGŸ2<½OzĢ×­4ż2±tĮ7­TecHnylöQČG“&ÄĪqž? ‚ļOøˆ“°_Ij õ=h”®uAčAe`7,·«ē†8Żž•čBAjĆ,y泓3œ‹7É“O'Ž•J?2dDg2Ž£š"ō9H?³¼łf·ø·h€ž":ŒW4tK‹Käi#t¶UĄĆńW`;&]1 \£ņϽž4œ¬.ģŒxÉ«S@I·šKE ߎyĘkSķ7J†`É(ŌR›čċV·æ2-Ր„䃓œŽÕĪźy28‹÷VųČČļXJ=JŒ¬pšĢÆØ~é\ œžõąž'šŚ™¦¹‚ݬĆsć–©Œ¬uĮ™ö~Ō®ŠĪ±ŹĒŒæ#­z·„ģ„ŃLi²IQŽwc8£œ©DśkśŗZŚ g]L¶C•ąLżj­œqM4q4Ó@¬ŻźjāqĪ'¤Æ„ŅV ęr ć>õ‹Ŗéw–rG+Āź6†#ļWR ĮԚÖ;U2«y£žøÉ®ZŚSqtP³ˆ·éŅ‚9ęŗŅĒūU¹ŠĪHŻf£‘޽sšNJāń®„„][I„ĮnVā\ī‚ ćńÆf¤Æ«4p±ļ?¼ŖßųŪĚÕźAį{ø|äEb|·°Q`÷Æ7ńO‡ķ5én-„»Æw’ĘĄ2ąö¦Œ¦Ž?P²¶Š%²†čL÷ÅD~cÆĪ[Ó?…{oĆĻXC/™y,É |˃Ī=kNtdÕō6¼iā½ā=…žą;’.ģF#ŚA &s Æžķ“’ųH– .]IR‰ÄS)}§ ó–$cėQ'r¢“>‘ŠžÕ£čfķ•$淌ą#Ģ\~UŻųBź’Ęq {{ Nå –Lo gŸ~?J›µŌņ§Š¬RhēD‘$>[I’CgŸJ\“ńÕʕ£ĘZ{„·$ĀU8Éü *3t?ŠŸ|1ćķ|A%Ž·įd·Ü#óŽŲ=M}/ń[YńĒĒĆžšž…wwm: –%żŅ[“Ž~½?*™v/ٟYųköc×¾ü=оݧNšC(c$„·˜HĖkóWć&…a©üUŌ,ōØ&žÅ–5wŹ«īĘ*9½āOj¶šż§…~%õø±]bĖ患łWĪŗ†«ćKčdŌ.­ļ'øfżņĘwąząUDĶźqńųÖ?kŠĆ«[NŸuƒƒŒņ żŌż›’įń‡ƒ'{ķ4ĖįķRŠZ™˜ąaW9Ļ© V“¹ųĻń{Ho|iń…„½ó¾³oƒäĀŖgė]Ÿ†’šģ~³¶Õ§™ü°UZc’Ųžńõ®vÓJŅ®'ÖĢ7‘6'“0+ü?•W1Ń÷<2ööśĪ%XnĀHŖC„^’Jō’‡z½Õż±“ļ(qƒ†>Õ*%=~ŠōŲtk­;Åp-æö­¤ŹŃ‚Ųüż«é_6Ņ„W—|TųYį‹^ ń÷ĄßˆIØxÅVéÓ£Ė)H pŁĘ\…ō®jRNك?Ķ÷ö«ż›¼Mū2|mų½ū?x¹Ænõ’ ß³[LA `ē0HõB½ųČÆ†īįx]¼Ņ7ƒŲō®¬4ł’lē©2³:®wa—”ĒjbĖ»8]‰Ū=«¤ćžö*•‡ĢW<°<{ÕyšFČ_79 qA ®v+uÉ­ 䔌Łē4B]2n}¬žÕ “,[A9|tō Ś„Š„š’+øüÕøEŚ$ŽæQ_ŪOüÕūoź?~j³oÄ-j 扒BG£4’ķ¹Ōō’0™Œœ¶Ż”2=#U%”ÕLž‡īįynķ¾ļ²KĻұõ ķ‘ÜZJ[ 7GģÕĮV&ØųWö£šę“k§ųkāiĶ£o#izć¢`½¹’VļߑĻū'Öæ=<ąńƒ©ü3¹XÆoa¶k­ —‘u ¼\śÓ±śÖÜRgņMūV|'—ąļōsIū ²šĪ£#^X0RR"OĶn99Å|Ó¶Y²Fé]ō¦ŽjŒ”*FØZF;½+<©V/ŪŽŗr6rA~`qŸJcEr„_s$mŪ׎€VQ€A;ĒŽ“õp’}±Žēµ nåā-µ \ՖŠ#kČķļA“6/F…Čė]‚¼_Ŗü/ń÷ƒž)x_ĶžÜŃļ’ńXHW(ܼ{ ŲéūžŅ>ż¦~|0ż¢ō "¹ń ¤V:ļ–ą¼‘ –ē§‰äŽÕś_ę—wkl-ęEŠåw½XN= Hb’\9xŸd¾ė^QūDüšgķšÅ_|VR+}^ݾĆpĪń~h¦ŒöeaŸqøwÅyņ“ ēūV|ńģēńēÄF«§b3^M§_ŁķĒŁ5ŲīltŁ Շ6kē^A+Ś\̲!ēfĒÆ5Ć2¹MižĄ·šLˆJdlaœW™Ų4ķf.ŅnõĶMʊ³Ōīģü9}<«ŃøbC!éŸB+Ü|ā/xoƞ!šĪ£ijٓ̂w’X§ŠŠwŅŶz—Į/ßųŠŅļFŌf‰µK§]Č6‡SŠ~õw2(Ećæ½wÓg5D‡y8yTąqŠ­‘4—hœFɑ€G5Ū”Ē(ŲėÆ'† d‚&]Ć8ŪķR[s‘€ßT8ngß[Ē$°y!U³ó{փ[¼kĘR üŽō–¤ŽWM­»go„]ŃŲŁN” œ(ĪāÓĉ£\‡y"pxĆ7CXšÖ·e¬źW^LQĘUOZA,¶Öˆ.,ĘvŒœō®BćÄŻ#žåQšpʽč`÷!2‘ ź@źjhźĀ{{²ĢŖ¼īƒx³¼²ÕS\·0ÜHUĖc>µĻėž}3X‡l“į”TšiŒķ4ĖXŚŽ%øq*/~ā±5»5€5ĀČ|£Š’"£¹™§ŻĶrķełŅ60+kūXõįŌѕ¼¶§Ņƒc^ĻVµÓ]®‘<åc‘šėęń=…ݬŒˆžxb„ūŠ©¦RĪwDń=•“÷1jq:HĄ2¶>éōÆPÓõĶ6E‰­›,ąg¤iŲ«©ŪŲiģź]AĮ+\Ķ߉®nl–öŻP#üĄś ‰'ŌéŽĒ,ž+¾»Żg0Yan„ŒjiZH!v*wĮT›ĘDšö©m’cødb„AĒŻ5”ąŻJķµ‘&”zņćsJŁķŲv £čŻ~ćH›D†Ų\$s?̲+pćüę¼¹ōĻ$łrÜ>RÄRnĀhéō? :Śņ[éXīvB—žŸŅ¼×U†ļūBxßP˜Ų7 ‡¦=k)Ję“·> ż§|«=Ō6ŗTń‹‘"ÜnGÜ]}ˆÆŽõ=jźĪSc32\ +{W›^'³…Ø–‡ŗü¶³½ƒPńdwwlö9pŻ0 ž•÷f„ą;Yų®ų®é¤bÖFH±‚œ*ńźÓW±ż«į_‘Ęoy9?Ęß”į>ų’©|)šO„ķü-$©Ø„Ā“‘¼˜W1éĻē_Š?Įˆ>ż”ži^ų•„iŗ®“oö-FŽé¤Ė ä×Œž™ė^|©+ٟq›eŠJńZŸƒ?æf«Ł«öń‡Ā{©ī‚%ź~šF-‹G?źĆwŲNßĀæI?f†> ń—€¼Oį-JC}zS?hGŸzŒś`×Īć£Źģ~kĀr¶™ėæąž~ ³ų5wāļ…ž)’„—SÓ¢7ĪdFQĪŠŻæüŗš‹#ŗńeφiläv+ėšŌ9RCō< drßž(hz<GeŚ»Ł#·vÆ t½WX±ÖcŌLˆWĖxĮåA#œzń]ņ…»ŹØ=oāOĀk_\‡\šŸˆVx–5ŒĆp Żryśó\N™‰t®,õŲ£Įį£É Šēš?LĖihŽĻK×:«><•ėz%źÜ‚ą«œ €kK”ö˜Hćh–źPA.z{W[¦Ü‹‹yemøoŽ ž%<0ü‰«;*ùłėńƒĀƒįLj|Iav|’ j×R]X8\€É|׳~Īæµ‰>xv÷į猠ox:hŹYķbŲćƒų ī£RĒē–^ŌŪGėwĄÆˆ¶0ŃōČ4 ƒz ‘ä³ųó_LüLńÜæüāžĻ%ꫦK#> oR1Zō#ˆÓSĘxIsXž`<ń3Åæž%·Šü)ķ®æ¦j’Ē}¦?"ö× ƒź:_„’ŪĀ_“‡l¾<ü»Q¬2¤ž$šōĒlŲ QFēx¬gY¾_Bpئ„’dŽŽÓō©“ķbI"–ÉüĖw92@TQ×®sŹ¾"ż„—Nń_ÅOxēLHāöē{•Č2zž•Å:ŠĒŽåō?xåmĪJ»xįJä~»ŚŗœójĢśŖ4ģ†äīQ•ö¬k›ƒqp¶ó¦%õķYFv܊“9“.YÅgismØEk4N7”>£Ņ»½gĒ>%ń”ŗ†±ywØHäń[Ŗ‡ š0½ģaDńI"¹ ͜ą÷¬oI{.†M”Ā7YUˆ' œž£›¹›Ć(ģ}ū6ų7Jń¶‹ā/ ėĒż¤ėö˜§‰7>?»·ńż+Čõ Üų{Äŗ†õ6ņo┄G¦x8?J$¬®M:¶•™Ö|Cż”<[ā’…÷Ž&ŅēŅēžŽÖKØA“2¼ć‡Jų³Ąž”g•¦Ŗ¬÷!JKņ±‡>•„§czXØKn‡¾„ģÖ9Lč®Ē7W!«i×Qoæ~蜟jĶJēu&Œ» ƒ4ŠŖĮT•čq@2ßJŚ;ŠµŠWmŃŹ|śWm~ž{–ū»Ļ>•+‘ÜLĢpY…jEn%FĄķPaV%+ų[”,Ą'ņ¬ų›XšÜæhŅ5 ‹É-±ˆ õ*”¬x˜¼*“Ō»q¦j÷7چ«”闷w'2J!Ž~\ҹI`µI $F"¼®ŅTÆŠŠÓڳĢYtŲ«Ŗź h–7d¤ ŒY³ė“ĶuśSŖAYŹ•ĮĶc*Ļc ‡QŁqd~ž˜ķWÕ·FP’w¢„ ēZģzgŚu[;;«ĖX˜HĀ!–sŌ×K”ų’ŪZŽ8Ņ1YMoԃØ\,eTqš„Fó\$1.]«@HŻ‚ĀāĘSÄ  ė\߉āūš ‡1J¹õĮ”£fiÉŲä“ö–xˆŽī…q]^—mn° {ŲB_īŌŒŒ$ŚÜš4SÅbķ“ČŪC’ž*[+ĶKO¾ŽjéA^юÕ4Éå/„r3ć„„:@Ȓ‚=é¢eXīą•ńņū bų®ł£X-ćFŲOĢO„očĖŚZDp”gĀó0:We{x|ĢwČ®„fŁ›©]Ž_\¤× $œ’sĄ÷«6ö’˱# õ ć؎cĘööŸŁ3édČ.X‚ >Ҥ‘Zžų‰āM7Ā—~ŗ1ÜŪIņ‰ßÜŅŌć”5Ōē"bdx;±Ą­Ć{,QŖŪų”ĒNš6±¬Ņ¦ü‘Ųzՙķ–gŒ•nć4Kc—½Ōv[xGļĮ9āµģ¢IBÄĢķŽ3Mec§ø“±¶Ku·›ĻGP\ĘÖī ršÆ‡ģo#¹˜XĄŹrNh¤*¬O=Ń4Ė ^q+n…`š¬;ųWk¦¼öČw€vŅs&å¶łÉtOMŽ•ĢjQÉē²ĪY_±ŖŒ®h„b֏ŖmŤ’n`N01ł×”Y|čŽIŚ9«9ė2Õ·‡gńĶŻµ…»ÜKM+*  ŸŅ¼ƒOŌ`ÓuY“ūØLR$»U±Ćž?JŅ×G™8žÓl¶ņ²®60ČĻZåõĶ'ķ/ĀF¾rp[ā³HŹ*Ūióg0‚[gĖŅø’‰¾%ń„49õ= ƽP6˜ANzäW^…ä|÷ē°Ė2Źųźą‹zõ}ĶŁ|Ϙ4½7ĒæÆ­ Ńō‹‘ØÜL7Hć䔞 õÆ·~ü»ų:ߌZżZ¼ ™‰Į䎜vėÅ}&…µ?ɬē:õ„Z¤¹„&Ū}Ūėó=_OdtG·żÖļ”c„kxƒK‚9#ø¶Č¾ņŽõč/Q™šĒ,1)W|Ś“ģīeI#޽3AŹh\źlŪv€_ŌÖ Ž®īįC”`zē­sFŒX½³Ł,*Øž#šŁšÆ†æ“§MĪā r~•j=ĪyŲōmWĆ֚FŸ;¤Šņ`ķ^rkÅv¹øxd$GZŃ#6b 4ZI>]ŲĻĢzToĀīSœqJ¤a%c5ī²wźqƒ[V(.£ĆŸ“§­kʈr°ł-£‹%¤Aō©Ł™ƒē=čåKSĢ­FĪŻņX޵,•Ö²¹ć‘š†ō2¶ün`ėÓ=*¹Œ«²¦=2*æĆudź Ć&Ų™ł”Pg2µėł`cå=3].›cź4lĢ­ī0 iMu3,[ŚCddƒ ÷4˽eV&oǽ7<ūPŌ7ĢJ–ŻĻJĪhäø%¤‰Į§Ų\Ā( ÄBŽ3Z4¶„6ķ–&9;»TTˆÓ=kĮ6fń&f‘v)‘Ņŗ=[H\ŪN—9ĻĢ€ņ­pԉЙFMH[ŽCaoi}¬ßLā8­lā2Ķ#Į5÷ēĄŲ?Ęß/#Ö~6cįwƒr³CjĖ‰ļ£ąķ>™¬T,;ō?dž |*šWĀ}.óAųmą[mI` ¼Ēļøć%Ę95č7’‡|1<0^\\ÉØĪūcP…ÉoĆ„VÄ9ž#Ņ“’Ü ?½ŁšūŽA•Ž:Ž ÕŠ ųw¹š†‡”e[Ā€+IŹĄś6Ļ^”†™½ xcGšŠ]ĆŻ1ł>žÕiu.Œ–žpņ—ųsĪ)™ŹW3&uŗŻĶ[]2 …Žāą­Įź;ąŅ%#—¾×n“ {ĒžH–q·”é_2x»ćg—¤ź&y!ŃtؙŒ÷2įZ5g“[ÄŚ1±ų}ūW’ĮR|%ą—Õ<%šŗę÷ÅŚū,–·7Q¶QPńӜöé_ĻēÅ‹Ž%ų‘©7ˆtĒˆ/[@Ņlī§ŗ•˜Dˆ§ G<•ōæĆ?Ł'UÕīc×|S7ŲU ڳ—F}ā1œŅblūƒĮ?°’fCm} 7^éįŻ 8˜œ5O8aŖp­®Éž+hģsHą56ŹW?ŲŠO*ŻŲķu<)Ķyēö¹lę+åK ‡1Ķ#q@ŌnuśG‰ļū°Wˆģ HĮ­;ļK‰¼ŃņćØ=hS5ķµBŌ^ټrC?+žqY6×3­Ēšƒd«ĘŃėJLl:ēV¼¹F$ņ„ē'Ö¬µ‹I]4ł—#”ėõ¬EsVėPŃāÓŠĢ_nÓJ-Kķ’¬³‘ŌņĆҁó33RÓ­µ Ų%£Ä Ż•vÆ[DöȑdŪüL¼ŠĢ]Ab€‰”¦ā26ńĻ„,z䱬iŗdp1ÉäŅ/u%—Tå%ŒI4½Ą®ŹÖXÆō’ń#%ĀõČä{PL’čsQš&•ć°$EsWšŻ‹\­’[ę|ć#ü*£¹ŒĪ®ŚĻTÓ-aŌ-V|·#iėųRź:ƒÜ4WƒČĘw|µ¼_S4Ļ0ųÅį= Åśn™<7Ā9`łŃ’\2±ģGįü«›ÓōHć¶“r “ØZ©J걑§«¦©m„O Åq'Żą·Ņ½vĻĆׯl“ØŁœõ¬f…4b^°b²›=ūÓ4żoģ:”3B$*óS ĢŅ=ļÄJ ź0[¤nFpџ„yŸ‰õ»że Ä9ē½j-ži@ŠWL6ēƒYzœW¶¬±˜Żzį†MD„ŠF®™#O«ČbŲgēnę+_“H¬#ažHčk•ŹĒŲŦؠŽĀ"WbIQ€Õ¤m­u(ÖšīfĄävśÓ*09[ļ ]hńģę>[9o-É ­Im¦^O§]Ż<ˆœ·*?fØ”¤Ųß@²Å%ĒČpOĖĮ?JÉńNć2֗ś/ˆ£µ·ŽĮä†Čž•›Ž¦¼ē[iö6²'W·_µ€rźēŌÕk»Ø[yVę@ĘT?FnLÉÖt›³[ŖYCö“lļĘw~“ĖM.G‡ēM‰ĒQвĖŗ|;ljdŽOlcŠj°HÖ¦ÜE1cĻ‘År•ō0ķ.5-1GšeH@ćEf_ųī²R6žbIbŻMtX‘ösĒ%¼īČĮøąŠ‹ģ­;„ÄSy¼ćūՌ•„^»Õä‚ߕ?/P{×'yØK"3Ȅäc½I¬Į`Ģ <,Óč+oū¦¶ źūŽõ>ō;Lš¼R"ødĮ¹ō­ū­ŪO“|d°‚x؛&[UŻó¤Ņ*åS8śŠ†ÓQ÷PŹ`,sŃzv§dYĖØßĒvā$ä³zsŅŗė >ŽöH¼łĪÜį³ŠÖź°kš’4Ö+;daOB„p4H·E`øŒdŸ„D·wFŌb¶–?¶ uŖžÖµüE/Ś­–KuWoŹqÖ¤(’Y,ätvd~¤āŸ —€ —å š)01µ³iņ›ˆćdpFF 5:†Æ­”œ¾ūÆłi9ĻQĘ+”¼'cj[.ķ ¤QEgŒÆ Žä÷5Ć­£éo·š'$¶zŅ6Sīl[JĪ0z*ķtö–£˜IŖ8ĘrEkMĖSŖ“Ę—ÖÖåoEĄ8äŌ1xŅó^„ģR‰Wifś]f2I¼G¤é×:Z_C°IødÉ#é\µ„“&՛Ė}ßĀŒŠŁóaį«ŪŪ™®¬›ięüŻ? Ėԁż~8 ¼WākÆac¤Ż–Ņ©ĖAАGÖ¾Ćń®½ą‹ Ćo®[Xk6Ņ©{Yä81? Ŗ;µ<œF«ąJĮuķŒIņø ĮĮ5Ąų«āuµ„réz^žgiˆfź?:S³2³¹‰ā)õĻ ĪLOwj”åF]Ą1é_2ĶŖ|Eš–»ŒōĶ;Tņ’č;ØGÓ½UµøłUī}Ēą’޾ų‰uįūäŅć›\bcŗY›pó1ĒņÆÆ ųm©x‡E²ńEŒ––„nņ›łģĆæZĀPdK±ä“‚uCą>õō˜õ›ĶņĖ©9Čüš+ä_ųNĘ}Q’ūGm*Õ‘Ń#®Ņ÷ĒėJčMĪþ,šĢwŗĒ‡µk$ŌĀFѐp3œa½k­ųqš—TeŸS±¶·µÓü¾Xl<ˆrp¼ż+¢%„Š÷’ ų:†±Üx¶ÖŅč$Re;‰<ņr ņ?Ś#ƾ#ń-։¬xŹī"Œ²FC?ˆžē'Šc¶„„~$Õ¼s¢A<Ė‹˜XÄÅŌ,ŠćØ«Zē‰VŽõąø»ó$Vņß{a‹{Š5½‹Š|+Š|xaƒQ¼·µYpőw2žĒ>µē~j_e²ŠžŻż”¦j fŽbū¼³øßķø©æAŖ6“Å73ŲŪÄ`ŽEŁøŒę¶4Yiö:…‡Ų˜j¬C-Ė.qŪ5E6vŽ”ų·Ä©i«N±G°Ė3oįX õØü}„Yųz’NŌt½@ŻL䆍Pü«žłļA-WO^KR6ФX^X7Lć®z×Q ųZ=+]yęĖv •Ūƒœ÷čh'ŁžK¬ųĘĆįæÄ%£¹·{”ēnŠ"É ū‡Å¼+ń/K°ń_‡.!š¦µ%š<Ł1ėµ€?xŌ9ipögÉw׎+šgˆÆ<;ćEµóbżÜE]•Ēpk¢šÅ‡‹›X“Õt ®Ó8 $¶Ači{NÅŲõéņŽ_ėv%½æšŃ„ó29żk»Ōm®§ŗ“Ņō¤VeUĻ8qśÖN]ŁĢxÓĀ7ŗ„߇ļ4hįø&ś [°zƒ×Ø÷Į«ļ čwv/©—³±‚ VüEO“‘÷/Œ’h‡zO‹˽sHÕn.æŌYLŁ*GN:Ž•üūüIń¾£kzę±§Ggu,×FI-–Lł$‘žs‘Bz•ģŁēsüIÕkŗ.§{u”©i¾PŹp9Qžē§•I5BŽšæ‹~Ēń«Āž*¼Ņķ,†¾®Ćc¶Ł” ü濜ąõÆĶ/ü;Ō~iVVž!¹2KūĆļbŪ½:ÖTōI"ֆc\ŚŁéī#/l…v ļś×Æü:ż¬¼_š*xW@²øÖü7ŖŪÅŁ`”·ŽÜžµŅ^čśŖ/?#Ā~!šž•m¢«8»-³8ļž¼×¦’ĀeŖėŚĀź7ŖÓ‘ęÆ@I?„!£óOćv³ x‹ā?Œ Ėöē+¦ü§Éżß¦kĀcŗ›DÅęVˆgĖŽ~ačI­# œ;›ić;½[NŠÕd+±GČOÜśWØxfļC_ģųc²…µą³u-ķĘ‡Z°Ÿ/ ²šõÅփq„HĄOłć?Ҽ›Į:/ö֕"Įz‹0‰„;+Ó8Õ Ųq• Ÿź²iWėdn!O™„U8Aļ\^‡¹”N«hĘQ,œ6q僊æhh•ϧu-ķü1}M¼Ącyl7Fs‘ėķė^/ć»NÖŅŅ{MFyf(kHp NüT¹hxfMQō{Ż^Ō\ܼqHĒ8Įč? Ųšßķ%ć K -ŚŽhŪ($$8šØ)#č߃žńߊ-ļüwā DžŪóVuq ŻGsұ?h‚üI¬hž#šüv©wh䯻ĘAEŚ;ĘqQ)Č|Ļ⯅ŗŲŅīõw·Ž[č€i•xć<‘ōƚ/-ŽŚā@Ź»rzsN2øœQ4r2¢ł™/Žõ®³Ą¾2½šwŠ4­R;µŽ$“’ÜĻÆ¦{WD„¬šFµaā-OŌģ'3«Ä¦QœķsŌ[0NQa^#Š™D‰+™7š®‡ā’ kz.£os'Ÿäć‡PqÅ~]kÖwZUõʞ-¦·$hÜČ>nę9Ķf(v1ī¢Ģ,‘ĢŃ: źłĘÖäžUścįłÓć‡ĮK8-ŚŚOi±L89*¼\qśTTWGTO`’‚F~ŲśŸģuūaZųoÅW#Oųaāņ4ķb"Åc·»'jJTšy$×kžŪ5ķ29u«‹›WUžŽB8’6ś}EsՋvgIŻüńƟ¬C”Or'89é_Ex«M…¹hČ2(ĪEb÷]ęCž żū%ź¾6š„?m/i/qā ķŃ|c 1įītöa¶bTs±›?š>Ūkųßń™oŪ\[ĻęŪ¾eV*Aē„„÷e(łßs @ć'»FŠyÅU™įEQŽ?JōŽy+2Ł ¦CĮō§ĪģĮr»ĮĄĒ\{Šc+t!`’1*~“żĢ3o<Š$ŗŪČpØA 5³¶ ¹Ļn“ŃvŽKxÉ@Įå€OčkčoŁCöńģuūSü+ż¤<.&k{˜ķ5ĖQ)Ž;»m²=ˆRH$Ī)°?ӓąĻŽ|ńoį’…¾"ų3U¶Õ¼#ā8õ=>h¤ £z†*1ŪęĻćŽÕ±¬#Ū¤įIi”lńÜ ć­†±W<Ļā†4_h¬×‘ż«DŌ 6×Ń'\ל×åÅÆ‡šŸ‚"ń±qā;‘¦0šŁ¤Ėdć‘V ;]ךņi|;ā3\H-£\ØøVIƒĻ}Ļ}¬čš•⿇Ć\é§ $#dr?‘ųVŌ劇 V%@ 7^x=źü0Ļåy³ü]ōĪiĆR„ö÷)Ż *CÖ¬@³Ē [—TBp=«bTlm®ƒēĖ ė!AĪ+@[yW1Į8f‰ˆäv fżŲ·Kv‚8Õ¶Œžk:«¦čž…O§4ĢjOsq ŽJ³d“Ī+¬³µ[].7»L²˜ā€^+•‚ MĮĻ„:ūƱŚZIuĘū€;ئ4Ž^Ī&2¦‰–Ę1ŌWas 4¶±GßpryJFÉXŠ×N‡K‰Õ ‰Aē=ė§Q]JĪ8®Š™Ó€Ēųq@ŹVv·Ö·m +-¼Ÿ2F©§]ž5B†6ć„EjbųG~Ÿ®Ćpš@pvŸ0dcé\‰üūjžé¬D %'åčWŌVjZ›tōyQ™S »'­t:-“Q^‰wį²W=khŹĘ°RŸŠ­®¦økŲlLvū±ņŒksĆŚ¤¶»bxć ŽWSf–:½sÄÖwŗX³ L§ ƒČ>õĀŁ\ł–rZ}œÅ–ć5ĻPøš:g‡Ł„L£fąŁž•æ©ÉbZkUTPƒc­fhŽ,¼V¦HÓåS‘ƒVtĖ#9gŽįc“©ĒZ  Ī±„¹Š,KpeGśÓ$‘5M:9eŗxfG]ŻpśÕœĶ"åńSA¦Ėj¬Ä·³œćµy愪Ļs”§~ŅyĒJĢŽœu>kų»u&š\o›{”ŚJ““ÓŚæ?¼KżQ®Ų“ĘFłĆuSė^}sÓĀĘśŸSü¼Ńģ|+©XĪ7“¼…É豑ŸĘæG¾6‘®|,Õ¼8D³Į–ĶМˆŃ”ą‘ģV¼šĻ[ŸŻ¾B+#¤”ē÷ݟ•Ÿ¼%Øų6žßJ±d66Ұćęē€ē_°šOŠĖāü­Einc‚ä/@{ō5É$~RÓ:Ÿų+•¦iģéńkB¾SµY4ėČYøš Œ÷`:ė’b­oĀZ։¬ź–7bĆÄlĖ« ² |ČqĪyÆ+1ĆŽWGå9öKß±ūš"ĘĀ}y ōz–Ÿ{·¼²ßó =šzއŠü{’‚“~̇Ć~Ņž>ü9°“мo”_®ŸØ€)¾±ä1ģJ×ĢU Ó?>©'ķYņwģēń¤ų†Ķ¼{f5Ä·Vw'ŠżGJė š¶±āoj1^ŚÖ8œ…‘p7('$ś`\Ń…Łźåń»>SńO‹MŻÕÄV³øņex‰giĮĒå\6›¤jž)æ0Ū®öfĆ1<z÷²ü=µ?KČp֏;>šš_ĆĖ_ Āv[‹āpņ? Źń—ĽĆw¢M1K³qŹž•ļĘØū< 7d|QÆE’ '‹..’aō?ć^›ąO‡¶ö—f[fżō¹™˜œšUś¶Qƒ“R=Å×4…†t²iōÖūҧE8Æ-±Ó.|X5‰,Z'øµ]ļĪģĄļ\Ӊ÷,=‘‡y¢Föą«:Jšj’†n§²ai™†ł›²>—“;侎+č$O–ÜdW ZĻcs ŗ²³ł ˆHļ•>mk\ÓtH»Š|G¤[ėZ<ŹT+šŠ·÷‘»łĶ~čš-÷öžØ»ŪĘ?uĪĢČĒÓŪV‘“G|©T=§į‰¼ešV]kĆwĀ&yh~źśńļĶ{ž½ńgÄ ®³wēĪw}Öś~uj£1’Wc{Ÿ5ųóᇅüur5Év>'L‘p8óWu°9?Zę¾éś÷ĆĶfKĖ9ŅÓ' !téžyŖ¾‡],š1g§ŪÜŪ7ˆu=rĘßū/Q½;ęecfē'9ɬ½Nź;Ē’)£ÄĄē“ɬ%±ėŠĆņœßŁ$ĖłsZ¶R:¬ƒhśžõĒ6zIXŗ%hį!>Fė\l³n¹§Ü’īĮķXĘ] ”{–²«&ĶĮ×г˜gņ\ ¤e}ėX»JĶ6dR…÷˜Ó„·¶ļkrĢŃ>CVŠG-ho-׏<©i~#š‰u /Äz{™-Ł$*³(?u×£qĒ5÷‡>7|>żØ4 ×Ęžm/⽫,-q @%Ž0 Ļ^xⵌģš>säÖčś 5ė_‡~Ōtk«ō–g ū<„īE#®kā]kĆ^æKė˜;+¢ZO”øŸZēözŸ?*•£.x­Ļ’ĘóRŗ{K[gŗū3oŹ®qŠė¬ ÷šC ŁŁ‘†F©÷ļQ;ŲūL"ė]Ļ.×ā¾š×ˆŹžÓĖŽBZ T’’/=į^Æį›µ¾“%•|ÅdŚÖG± hEāĶNä„-‚Ąi°¤ŹA?γlŚ3īwlqE²'`ёłVĪčćšDµoōnŪ‡J’'¹JOŽ!%½Ep°F‘\H¤‚»Nō3ެ ŌĘŽ}:Ui”GIŸĖTu÷¬å.‡7³88ĻŚ5@ګЬmaoŽĘŲ=Jƒj{M£A«ĘÄ Ļ#šUprČūŁ­i.…JVŃ’ū%~Ź?l_Œ­šĻĀŽ?Šžųz Qw«^Ī·ĄN<ø!' I“Ą÷8ćü»āoĄ‰Ž,šLō}wT·„ź!ž/*=RՉ ŒĆ…2°#čzōᇼyČó?éįųŠž@©6åg+õ¾ŠŽ‰·ż_ā±ā§Ńuˆ¼/āM>÷@ń<,ažÖę208Ź7FŻÜĢČšÜ%¹·`Œ ĀQ±ś®Ī®ŽŠ÷ėś¢[Ét"YnU¶;ŸSXśĢQŽiÓėö„Aœnö®yHōŌ{‘&ː»HßĘc^‘i mÉ©'•ź^Ó5ŪuŠęģM¾)Q¶²ž5QtI,Õ|É ņżĶRĢ*ĶĻz-LqF×'‘ɬuKĖŁÕ h/x1ŌūU(^"|¦øŠśĆO™ä¹– Ż&ą~_Æ„r÷“߯v(čz0<[*r<řĀö¹”cuGcvFrk¬mZŪŹ1o æJŚÖ:©ć#-„±ŗŽć1ļĢ@×gcmvÆp­‚„Yā åŌ5‹×Ś"UŽ•r×dH”—9…L™“‘µq Čäē8«;^G „rGZ!±¤žŅ̆ ©óŽ>•&£i%µ¬ĪåL›IĘzUGŠó½2?“?˜€±nzŠźmŹ`oėAēŌEøē7ę=ūÖÕ Qø±G8=霕)œĪ·įT¼¾[ż&4µr0P1Ķė^+2Ų<{¢ø]’®Aē<ƒUkœueŹŽ»Ā°Ey¬ZXŹ A#Øqź3_”ś÷ģš§Ē¾”č¾&Õ¼-¬, É+/˜ ×Œqšč+tėŸ‘Ÿ¼;ć߁>4“@ų…`Hž}ŗf­n§Čæ@:B}+Õō-A/,QŅEŚT¤ņ*„NĀ^gcŚg?čžń_Ä;}zt±v°ĶÄē÷lJżĻĢμ7^o ėGˆÆn¢)ÆÅxņŁ“I…#-’ T©4]·:/ ŽZŻųkIøštKݟ¼‹Ó€Fājń¹Ł!ą0ĮėéZEÜēžĆtūE–šO k·vJ×l,Ņr°Ė rDÜać 1ųŠöšp?>•œIģča²ČKānr]tIGäļ/šņ:ĻxSKŅv]E§ŚĘwnG¶+°Öl_“'xūJŲžõ{”Ö‡šĶZ·24ķ20#Ģ«ź+^IĶĀ©ĢqÆ$g­QĮ66&¶[mҟ-—¶{TP]ĮržXesķA‰-ķ„Ė3[ź/ŚųŹō­ &?Wń—‡ŚŲĘ$™īs‚Ģ~Jņ‹ķBÖK•šTĪ)ŲĪĆ$.1*pj£óep¦œWC)ī`ŽB«ČŒē8­ĶØĆęœń[$sĻrūÅ#’€sśSćŻ ĻĖŪ&¦L—1 NZ óIĢ`óü« 'īāeǵYä(9ź}©&ˬ^ IzVmą71(sŸĪš3"‡O ›‰aėW›QŠŅBÅ[±­ŠŽB÷W·ŖHĪ3ŒÖ$²Ļ‰Š)=Ļzæm“$å¼üäēø«gy±“ŽzŠ.Ru²D($\®~aŚÆ]ģ¹qäĄ"_»…AŲļō WŅ­„·sż™ĢŲ ķ_C|ż•ž4žŅŗī”4Yģü)U¹Ö®ĮŽ$Rp|²~ńžUĻ(u7‰ūaū3~É_ ?gkH4-×āćmóė7‘ļ’9O]€ōµ}µw¢hĀæń1šīVĆĖōĒ ž•›chńč>8č~(ń}ßĆ R³šŽ³BA©!®wBŪw ö]ĀĪĢ‹‰-­īļFVBHpOج['”æ®ųZŹśņßVøy# ¼D­…?Q޹½WJµŌōė»0$²aeˆģe÷œI–ŒćZū5¤¶–šźZģŒ–{źĒżjʝ¦Ć©AŖO%ńʮ6 HSģW84Iö ķ„tŠŽgĄHÕIf=…xęæń&ĻIŠk}*ź gc!‘¹4F&±ĖÆŚÆž šsą]ø"ń¤Z׌fV’-:ŚErĻ»ŸĪæoŚGöėųĻńćVKŪ­uüą†lĒm‡2/mģ9čz{×e*NęŹĖSó‡Ä^60Op-3³–irłļ^C©ė—ŅŸ“Ļ$äņsü«ŠŒ,qWØcLljß^x¦ĘU‘qņ7§©­ćuJƒ£ˆ”bĢsļWŲ)BØ\¶r=*ŒK[¼d”R¹${‘[6ŚwŸ³ž:ZŹRW5›MŽĢ·Sł’qÉöµ÷Wģ‰ū|}ż¬¼K·t9t© >­wlź©õČžUĶR„ŽŗtźĻöP’‚V~͟²=–ā[Ż:Ļā‡Å|ošīń¤.G%F\€sōÆŠmBś{·µSŸ„ĆÄvŠ®ČÓ辿ZójTléŒlWxē»·'I -Ć|Üsj±}ż•„éÆ)OµLył‡C\扢x—K¾ŅīMźMk{Õ|S4ś‹ż©Dq‚ ¾x>Õ¶—"m.į³łTņ"9QÜ¦Æż„¤[mŒ#cF1\F£plā› ę8®O²{’ qńx’oō‚ö(ŽG˵±ƒR%ŻÕŌ < ‡=Ŗ%+ †Ē<[Ė[īÜŅ­Č'¼eŲļwĄėY\£”²Ó§hT)rTńšéntKØ-Rķ‘Ä8É5ŗÖou«3l®aCuÆ9‚o)Kxo®”·RXĆæ*ßZŻ =L7ZĀ·elą²×QsåZĮgI€\ŌJ=Œå-LiŠ\6×DU`rWŃ,'² j—ķ-°Ī#aŠ}k2 :Čø·¹ˆ’6ĘGõ¬›¹o&·`ŒĖ7N¼P5™é^-Ō,¾×§Gmöµ!@‘ˆŽĒ×£hZ†£ijŃėVėox~\‡Ü)Ü®Bfxn-Ņ5CīūćŽ¹–Ņķ­’Y§’÷†kdīA«bŚ]ś(ø„8ūŻ+Ķļ|Pt™ļmą“ŠżUo¹ĻQĶEF=Ī:óÄ·×Ģ!’ßc’Ėœ`v5·¤kšļxL!BaX‘ŒjÅłćmOaŅ¢‚ņČ]$öĪAǃø×yÆ£}•mdŠn6Č^Z)œ…œö†öo±äpXŒnö«©w8™‚įxõƒŚż²Ķ6čĄĪ1Ąė\ä°\C„l'§z “¹zÅcWLęzWe b1aŽ­JĚmgĘdk–/Œœæ×|ŪK#„8',sR÷7Ȳ1I qµ€%z„>¼ÉnöØą1/= <ų_j rŃ^“Ns‚„A:ź+o4—VmohOČŁūŽõ”¤h””ĢĻ$ĘāmÄĶ(ēīšét‹*óAÜ:Ԛ$zč.4ēŽĪĆå®ŚóéōFyµ®ŪŽ00Ļ€®eHąI ŽĄw®O™ “yH%ėĄąŸzÖ R±ß<«"n*y8é[š\;ĪöMŒPĄõ>•¼eŠÄY]GOBÄćpĒLÖ÷‡d–ā4[øöĀ7žĒҦL™ųżšCĆkį‹h®ģĀ\MµĘåiČäß9ƞ>2ü=ŗMBņ)¬¾Lę[lņńŽyä×½}lsŸ>ųwAŌcÕ.&·“–;ˆ?xfD;ŒõÆ_ź_4{RoÆ_U¶bė‡ĮSŒ`ÆēJį̌ļ ųCĘšZÅc%ĘĖIŲ"Ø$‘ėšö­sį/Ų|wā. ī¼Edqy ^<õs8…6KM/Ä?jÓ&°¾œķŪ1ūūGP:r?•S“ĒVš×‡5]! µåŌrl pĮé޽©“D”sǾéŗ¦‹­†žÜ”¼Ķ˜Īן+ōJ_Ś'Ēŗ?„nøų©%Ƅ,<7«¬iŸg½$Ä >Œ;“ŸóŠ€i^Õ<)=—Ś,RśŻ’xŹŹ»ÕN2»:śS-Dń­__Š~6µ«hZT2ŚĒJ«å„}ī:ó“_śŸ‹§Õ5™„ŗ’y湚GĻ9FĪ@J cMIxĘw:~—o ¼Ņ}Ƅ‘ŲóĒp+Æń§ˆĘ©įÖŌµ# Ż„»‚<Ļ™ƒc·åEˆ”ē„k:‡ļōū»‹;6“˜‘åƒĪß\×7¢Ķ WÖr^ėŲėœp( ś3F³Ņ/%²Ō“yZa“ē\`¶AąÕ_‰’ŲĖwhš5ĀØy“„ĻP¾“sÉ]nlµ8įÓĢe#†ś×U᛽FāāšE%Ėe?Ņ¢)ž_ā{m/PÕ>×uåṲ̈« d®+ģŸ„Ö„ā FŅ-5 Z°P$“īó×48ō/˜µńwąoˆ<_ć­MʤŗĖĶbøQ“ ʟ^•Gጳ|9¹Ņ“mZāV[9·Ėꦹž‚‹X¤}Uż«šs[Ō|@t»ė¼›e¹ˆ!ĮßĘG¶yÆńžƒhŠėzZJÓÄņ4‡ĖGķšå•ī ›{”ķƒU³[ ÅóD~d¬ 1’Ļ„tĢ}”ü>ŃG†µW“OŽ[XL`ɑŠ×”[iŚu•Č‘F‡=G‚9ĻĪæ^šó|GŌuĶ(£’YKL„žņœņn•ćįųõ­Eć°U·¶ #Ü­Ó$ÓLŽgQšßü#7ŅX½×™t `ŁŻ^‡ą+½.Žin.ēŽ £"ˆœ·ź~µ~оRž·©Żk1x¦ļW“YģV)"øž5hĄūŲ‡5ĀųśĘŪNhq–·e(„0* PŠöOü[Õü9e¬ųCSŠģÆōķNUšAóF=>¼Ömž‰„ǧĶoSĘē˜šłņÅ!X’×OŸR¶›N·»ŗó2 Śy u®oTš­Ī»{m„DҵŌy;prG֚ˆM¶½Ŗ|=ń±’›d©#€Ŗ¹ĮČī1šū3Ąžš~µć= [Ó’±§ŅnĢnFAUcƒ†ī9””ŽĒŌß5č:j]|9±ū,±˜£āc;G×5ŁųEüIŖxaµo^¤zĶIJōĀR1œö®ŽĪå)Yų“¬ž$Ō4Jh“}äh¾Ņė…lŽAöÆĪ’h±éŚÖ­m–—vérĀ9`9¾µ4®¬ĀLóPK" „Ÿ61éV$µŁūĖ„HŚO÷kÓ¦ś}›ū5üIøUŌ|'ŖOkw—Y¢|ķd²ś’õėķäq²6;€=+FŒłµ5-‘ŻUŽügƒČƎiχĶg-lRD†w[+•PĘżDŸõ®wŲp–§Č+:,˶EfÉxÆųćdšo‹ģ-]˜é—Å”¹%ń·9ĮńØrÖĒ\Yź_“ĒĆŁ“½cNń^Œ¾D/"\E"r`‘Aćןq_Ųü?öͰż°?dŻ7Iń ²ĒńOĮŖŗn£œÉ<`a=Ć*ēź§Ö„j ō?C“ō»Óõg½…›fxĻōƬ<¬Éā 9Ć9kˆĄ ?ʱœJ-ų‡Ą~ńæ‡}?S)Ė”łÓŖFŃO0Ś šĢ1ógŲWŖ™Ē)w ؊Olóõ¤ɞH\ē4Ģ£Žū;Ę÷/>“’0… æ$véAŖV»Da‘·±=…J¬īį@éÉĄ ¤^ˆ)ÌčH­UūŻ­Å…äi“•v5T7?«Æų7;öŪ¹ŸBń?ģ-ńXuÖt§“XšUĖŹvĶk»/n9YN0ģ„gśßxņŅßW„y«Ž‡¾EgV&ÉŲćoģķå[›4M¼ ąv¾&ų’šĖ^6ĻńĀĶęx«CU’{pėū0y¹ cŽ{vĶyŅZˆüĢųį#Åz¾Ÿö[iķu8Z{C¦#!FqŒć•,_¶Įi~|IÄŚ[iś>©/“ņżŌŗ}†E]ī t>9¹…÷+ĢĄąqֳ欀DTćÉķ^„C’¤GDÉ Į¹ēŽŖÉmæˆõē½Q‘SvˆóˆĄĮąbœ’e¶`õü>o“ä#rō§Å"BąŒP2xŒhVFl`wüŖh§g*[vxÜ(:)ČÖŃ5-_Bń†¼aį»ū½\Ņ®EŌ3ŪĢb~¹ŽE”ēü'öŃŅ?kæŁ«ĀšÖ‘©ńē…’8®!fIJ WČĮ?‡½Lö;”±śĮ£±’įīķŻ+Q]ą‘9ź?ZķöŲ¬¤ ļ=ż©Č’XµĒXg=ćĻųs⁼Gš÷ÅöŸkšŸ‰,&ÓÆ"a“‘q¹sсĮ±öÆó¬’‚ŠžÉ¾#ż—>qļĒnxüjiÅÜÕŲśW@ø{˜Ė1ČSÅu±ÜƒĄ9kѦĪ:†®ƒ²ęłķ¤,ˆųėČÕų«DҼ-$>v£c©ŪČ¢E1·Żö9čkØĮŹś#ŚxomĢÖņ'—ÉĄ=©¶2%ÕĖFāB££PZ7ĀŚž©g{{§#ŻGo–M§£©Æ4Žę›_NG#ė@ģ[7v6ĢCĤ޹õ”u‡¼‰āa¹ī(‘o!‰†ĄvƒĄ«B-BDŸĖi›cprh]X%K‰ŹÄ‡~l×_-¼ ;8Mƒ?5ѕĪ®~Ū$bAörŁZŁžģĮĀ ŸĪšzkøČļ‡ĪG5ÜĻyiqnÆpęp _J™ģ\7<ŪķŚ0ŌncrčĒ;6ž~µĒOÆG6©w§]Ę|¢>WĘr½djPIc‘Ž4+ø68®»Hµ’I¶uV“iĖsÖ·6‹čzt“[Ēc>z‘e!× |­^Z<¾#ŖŖä/™”sNåĘ”į½O{µ»’–S°\F>óv#ÖøĖ 8Ēz–ĘVĮpϽc)\Ņ,õ©4į„Ś/˜«&F+ŽŌ““4jń)2ąÖ2‘”ēcto䲙X¶xĒSZD™KŒKŽAžµĶ`lÅ©Åyn‘:Hx*3[zW„kø’īśkxßܟ(¢ĘŠZ•¼U£&€Ž%2ø$īNw{צMęĶ#“CČ+Ńø ūŌ½Žˆny/Ē+”mMŽ$˜ķtœ’Ē<ĢWĮ’xYoµ+{ėY7BxqżįŪņÆ;z8wc迃še—„Žč¼fīŽYLø‘‰±ķö’÷ųź/ź:…ż‹H–3n“†ųśW“VGö§Xæo”ŗÉ&æ_Ōę’j=7Ćæ¹Ķa~ÄĆ?ü5įķI|Ė;©š"Ź0°õČ'æ_ҹ¤ś·*”ūŸööÖķ~#ųSHšķ­Š’ßLg— >öŅNßÓ­|Qū|a‡Į.Ōt=WQ6ś„‹„˜ Į8ĮōĘõ¬ŖĀļSęs¬Ī XżčųEūL®ā-O2Aŗņ8mŒdÜ}«ß’ą¢?üńą]׃®`ųšvI ??0nIäõÆ*¾ ģüĖĆsöŖĖSš³Ą>!šß<1lņčvėāČēeøŗ·83 8~æwzĒĒ}BāĀłō8 µ¼øŒĆ$»~}¤`óė\ŌšŻžĪ[Ɠæ4‘ņ¶ƒ\¹KK€.wm8Énæ™Æ¦¾xBm!&øžvl1lēµzŌhZĒÜa0\±±Oā·ÅGĄ°,Ś\0\W•ƒģ |©ė§Šu¹nåϚģ]ÉžB¶œ»Ÿ¢pŽV¤ĻWš‡…āņ^ķŲĄ8oāöÆdŃf[V\DZ‡±nēź,!čwž%ŗ“E»ÓķŁ%€€$FćךńkO?W›_ŠīMœóJŲ`ėC‰ōt(YRxfŹäI żÜĢrr85ę3xrx¼D¶7‘˜Ī ›?!ü{V.™éĀ6E}f GB½ū.„"d. ūƒŅµ“ĶNöŽŁä“W–Fpk'NĢéDLŽ(HīŅ©@ņ7p+Mõėš4š ĆĶCŸC®DtmkÄJ±ˆäB7¤ēć“ģ—;”1õ«Nējw-įĖŲŪśŌrA:±Ü@£®z×ÉŽų”Ž.Št¤æho.`biąō„R‘öymkõ= O³Éó£^:ńL#/#łWŸR>²„ŽwQ“¶Ó'Ū—evßČū§æŅŗ E$…YSęī1YøšŠ\3@mݽŖ×˜ĢKJNķ[ÅÕ"Z_!“%>r{¢øŠwwz‡Štł~Ļ,jŪF å†N~™ü«¦š>s5²„)6z÷Ą_Ś3GÓļnm¼K”izöwŽRŃ«“Ÿ^=y§xóLŅ5ZKæĆhś|®B¦Ć“Óo·?•wÅFÖGóĘ.®65½²½™½ą† |g¬[xkĘ>"ń„u9—ŻŁœ®ŚéÅ{–’Ēųėć‡ń,_|wąļGbŽe“wģbšņ3ČĮÄąf©PęŲĆā,²Õ*˜Ķ •ļżnq>#’‚t’ĮC|į›Mū=Kć]ņd‡A¼óīąõ6Ų26qü ūā¾Nń—Šj”±,¾4,½‰8Œ÷5L#GæĮŽ3ä™Ģ,!9§nW£ŗģž’#†Ń5½Z’K+R±Ō"Żóyr*}ĒQų×m+ĘŹ<½›śq\ҦÖēė4ńJE»6_ć qÜŌśd’½Ó(9PqYŌź„cxƒūĻS\§‹®V4{0ąŹ88 ©Ģåtø ņģR=ė£X0 mĖbƒ–l«+…t†ļOO­mińœ3“ņžōKb—‰^ēLµ·½·y^AĘ?‡Ü~„y–»®GcäƌęgˆļWOsĒĘT±õĮÆ ¾½ą“ń²5¼‰¾O,² ūūąē‰&Õ“8£žįZą.HńŹ0ćéB'ĪŌÄ«œßķ/šĻFų‰š—Ę~Ō–ŻdĘóO–EÜö“FwnCŪ ükų_®ĘŹYŌńŹabŒŒÖ²s§Vģö’Yé÷pŪ5 nš0ÆÆ”«–vO¦µ¤–ß66– ą”lĻM2“ū[hŅ4 Šę-ŌÓFn¤ v—#õ5t qāf£&ōGy£i¢āųę—q€ß+}Ez~m —!f(möē&¾ #üŖń{eŸgÅÆ{°’ ½¾nķæ6mjś<>L7mÅÜJ¹Żr¦³'Õ³ŃXHĖ6Ütä×®•“?$Ÿaš^½Ą2FX?|V.æ"$ź]÷ž”²zœé™äŒ<ƒL³o"PČ0;ŠIÕI|gKaxē+3S»š;bņ9äńZF&2܋EńüņĆo „ŪĮƒĶhŻiŚŚ]j]Ķvń°9é[F= <Žõ¤W‘dŗ-ŠśśUČ¢im÷ƒåÆŻę“åG;fŽ›7£9 ō«W1œ0ĒJ«³‘ [m &åknŻķ`„28UĒ9ļYs³ %VmčOĶ‘š®ƒxe$±__ēRŲ !ŽØį‡|Sc„Łœöźij+(•ćņŸ¼»QµŖF¤Ē#)dh†ä*Į‰$})0F2(=sҚF-t*’jŪĘļõŚ?ńźēÆ/’yŒq#l#<ę·”!]Īīß1=ø—Ė€åd‹yžjÖ“¶ĪBN•ŻéŽ·¼Ó¦øŠā1zŽ–ĶŒQJNĆC Šewgœ…Lcmv~šEļŽµ+ #įī‰sćbāq Ē Fs™ČĄĮ¬[5Œl~ĮžĻšN/ éŅi^$ż”o¦ń6®ęƇķß÷VÄ·{t?C_®Ś&‡¢x/ưé~“ƒĆ~EŚ–°aT cžę²œŗfŪ_”—ĖŃ“ŌŽiא īk£_ßĖ ×—ŁžēD'”¬d‰‹>kųłū=ź<+„i„ižų£ Iö­Qˆm{ œˆ—é]ĄOŒžų‡įéü7ˆŚWÄ-%ÓZ³[Ė•šyĮĮ5…µ(ö©§yl“oŚx\ō®jäIråYĢ0;S&H©4IRĆg&ēaŲÆ,ń_Š-OųõūXčß¼&Ž-ų‡ā}?DИƒö?8otŽŁüėł¦ż³?ą°:׏ŸPšēģķ„Ā5erŅ[Ė©I!ł€ą•CŪŪF•õ©ųā/k¾/ŌfÖ¼[©ŻkšŌ©µē•Łˆ’w'ŠĻžŚŌ#“‹MūdĻd¼ˆŁÉ­z¦’9jV2¦™¤egȧ”ū¤UV˜1p½xĄéWn§ Jƒ¾ĪĀ"GݦÅ\FW=qLē4RĻvćÜĄćÆZюŃö™#B{ŹRčTc} [1EÄóˆ•ĢĪpµ{WĮo€æ?h?CįOßõ/\ ”¶øæŁžćÉ/Ó°œŗ4éŌwģo’ųošā žÕZÄ~7ńK¹‹D…Łį#0y<śąWīo‡t]Ā:%æ‡|įķ'Įŗ1˜¼‹X•7®1† zzWŸV„ĪØ«„Hā…¢±BŁ?xņ¬øō&•Śāīsxq÷ĄøĖ*h¾"ÓaŌ'³f²·Œ•!Š€qé\O¢j&{M&įfŚÅŸŗ}ė9(QhŸcŌo..®@Ųł@Ŗzµśµ¼ékrmN š{ŸJ„hyÅę³ż—%ŗĢĄÜŻżĶq:Ə-¢Õź³Hē­n—CHÄņĶOŗZq-ĀYŁ/Ī]›o©$×ĶæiĀpéŽ‡ķš˜9KųņB0õŅ·Q°åĒŸž,k~6Ō/5wV—T¾vē “(ōÅaxkĮ:ń :ʔ#ū*3*1ÓjIOx?Ą>=Kyl4ĖK«Äaę†r3ÉZśĖĮžvh®ÆmĘĢęD#”¬ŻB&śčŸaŃ A łQ3Š×²¼¶,’[˜¦cČÖ¦29fĪUg…\”Gn£µaÜ1·;fĀK“†č+C4ĪPšņ]N̊płąškŃŅÖ{Ao4+’0Ĝž”‘ęچ—«É ¤™layā«éś×Š“u׌ŠŻiYG“Ø Üģ5 2ĒÄ,Ļ]Ą!€ēńÆ6³¹—BŌntŪĖIL  ¬ø=ū*Īc0×D›^֜é÷É1ē ÕkŻ2]"ą[źP]E Ļ%HÅE„Ź‚śKIąœGēĮœœsZŚö” ÅVČꁎGÖŃŲĀē=o¦­ĆؔĘcĪNOJÖŌl,¬ÕŁQå֙§7R?ų‡ģwĀŽéÕ!•‚!vĄVzŽÓIoMo¬ģtł®£Ü~uŒō6ʚƄŽ-ü]FÜqEœ®‰§2\—–C½½Zŗń–-md>V>hĻLŌņ¢d®Pšž#_™.™–-‡iNĶŚ¶//„‚[›øVž»AaȧĢgŹīP°Ō,¬¦1,i tģ}*•ž•,š¤w°ß!?z0h¹&^”YݘŻä|7¦+{KńV»,+¤\Ē öŖX”Ē#>“\Қ9­btØŖ"ē,ݱ[ßšŽéóXG:j›ž„銉$YĀŽA+9®×ŸŁ·sŗ™|¹#R ƒŲŃe&rśļŒķm5ōYnāŽō©"2pXtā»mßNæ±3]ONLä挓 Ϲ_)ęk‹Ęīõ{JÕnāxņ Gpū§‚h4§Ųõæ ų±×W“°Õ­ćžŅBK7Nż?Łų‹”h÷štń 29ąŚIIīqŇƺޖÓXb)³'oaŽÕ×xzęāęĶm^–59č2øā“v3{Ń\ŪFŲŗ/8q^G┾Œ¤«s ”ĻŹ~µ¢-xr}&ł :źNł‘hń4Ś.ƒ„ÜŽEØ\,KĪŒź*ĪfÜŗXć¼1ćholdĢÖņn9 ½6ēé^—¦jK,M™;c·½O.¶FM½¼­ioĖ‘Č ZķÓÄöśŽ–Ö¾C*” AÅtE\ÅĖ”ęzŲ¶µ “°“ĘOZ¶҆Ł.mĄ,Ł=y5¤¢?hoE§ŻKnŖ°.Fīz֔Ö3Ī‘$j®łīqY2/­;‰¶dœvŖÉs¦ŁßaS08`Ģń$RßB«b4Ž#Ұā±uŒ³£qHiŲŲŃuGŃå -£•yPdgj{—›Pqq-¾Ō98ķš 9ŹööP^™!y^3śv®Y“Ņ•gg‡sšøŹĘmžg©ėx~I<Øā7eRQ°FOCš¢Ń-ģźÖq¹«Œ†Ń^}ēO¾"öĶį¶sžGŽ„ÖQ2ˆG”ŠŁĒjŽ.Ärƒii¢x£M–ĖW·Ü”ƒpūN{ß°®kSū›éÖnZ5'9<ńėI²Ņč~*|ų¤ė¾¼šö ‘{tR–ĄcĪTžUäµéÅņ[Ė2ĻbUŗīükßg UŲói>!h:@ø·R’Ś/ Y½½j§ĆĘ’‰ŁÕQӒN&{ąÖ rŸ^ʶyģ y¶°'j”Ÿ„u¶o¬Éį½sM·¶?épyr8#ŒūV|Śjk~ēē樺ޅÆ^[ź—­åÜŪ PĄ×mą(</Œ¬uxA™8b9g^ąVŹOdc*¶>©eųo”Ė|ŗ`µžį×u»1„^Ē‚+COš~“āH'7rÅk>Żń»/Źx§vG“ī|Ćć?…Ž%Ō Ż†Ÿām„Yˆ1|›—ūµčžšÄCĀw:}ÕĢ×W"T˜Œm zwķUĻ”ŖØÕuĻA<šF­¶KČ&Ū$Dŗdgڽ¦ŹėWŃü?¢,0›G “›TؐyØulW?cęļ^%Ō|A2ŚjÖś˜ŠŁ–HäPĮY³ėķ[æįÖᓿń·——V3°H䑎@¹ŖŒū–ŖXūĄÖ–Ś„½¬:€¶»˜ł‰*ƒęÆ ė^Kń3ą—ĆĻüDŅų i>-ҧ·ŽÓPF†s1Ø_āĻPyżkėÆŁėą7†aųfu]ņņóQ’¶e“åww~}ED„d$hųQįż[Ä: sĖ;™Lļ ¬ÉĢ%XŒd łwö™ųaÆhZ¶¹®ÅwwunŹRX”Įų‡ēYŹFńgŹŗn®Akeu )“HūŠOFēčkŃ“ó{u0jSK5¶[pĒ>œRhםlS×¼Kgį\%ŃŹ2’1Ō„t~—aāK8u‹YfŽ!+@*¹ĒJ>¤JMžæąM3Dæ3̵Ō'‰*\|Ó‘UõŸ kÖzŠėŗdˆm2“#œä7æJŃC¹Œ“ź|ó<ŗŸ‰|O«É«@’ÄŒWĢa»«čoŁėą…ž«aØjz¶.¦3Ęé$Į„)×xÉģ;STŠGMOńƇ¬4Żé~Ægk‚#W;r¹öĶ}aū5ųrī÷Ē–wÆ,ƒIX„wøg#¦zžUJ(ÕR~Ų>4ąÆ‚ō%²²“Pžū+™Ä.Ē…Įž•ēß³ķ'ńC'‡üe¢ŪévŖ…ą™Ń•$R9QŸóĶE/"lmĀæš÷‹üWŖųŅˆvz-†sö $U›žōÆgšÆˆü3oįÓe£É§#A(Fņ±ƒųÖ©ib#.Œå~&^Ļ é÷FIm‘×xŲß+ w®7FÖž)3Sć凎4‡umO’¾!ų"Į¼YāJ÷W‚)”Vū±ą±ė^šÓĀ6ž-šĻ‹nläøžłY•0w0 ĖłĪ•Čr<Ś_„>#¶²ŌP‚ņÖų–ū8¾oœLÅhü<ųćmkĆŚ”Ž"Ų–™r¾OŽRæ0sŽ4ĶT‘ī’³¢ü7ńu÷Š|-ØßĒk+ZĖnĪģ`ēéśWOšöÓĄZ¦­£Ū›[Č>Ņž[¬ćŲ„Ō~ŅĘ.§g;mŗž8·G­!õÆIÓ<%ā ’ŻxH²}bŃ"ŽāĻēu_\ ”)ÜäōVx­īš =X,=„w ×ō? jöwŚķȵHäq,͆Č<`ߚŃČ£Įž<Ā/ÆųŹ-cE›ķ6 Ż€Ž:•õĶ/Ć/jÕ.Ęó‰ “hĶ€¬8€¬Ūõgįæ«ųĒ@¶Åpµyą¼ņ½óō5ļK„ņÓį!!6•łxļ\ӏ@>Bż­| ÷ƝCSŅžՐłžTq’ŃžrO߅~béæ ¼Q˜R¶xo$„ŒIRŲč3N”t°ģx–£g5ōš\ĘmēRwóUVq†G‘ŻXņ3]PÜ ļj×z^»¤]Ł“q˜®T±ĪÜsż+õcĄ"¶ń‹cp©r]ūbµ3”[ŅvĆt“wŽEVń§…įńnƒŖh—[Ć,dǹz?cķ\u¹lĻČĻų2ėĮī£į›Œ\ŻYK÷Š}ķÄž*£!ó¬ä˜æŁī#ÆPƑÓÜtØHź‹?C¾ų²ĆāÆĆH¼=Ŗ“sÆŪ Rū>aŽ3ŪŚ½ž éūCOū~Öń.„ØßŪü7×.†ŸÆƒ'īJ;mWdé•b³Z-éocūŸÕ—N»‚Ē^Š.ļ@Ō KŪ)£!‘цp¤pqŸĖµÕü5×_J×ģŽmę>\Éė\ņÓF]Ŗõ-;ķČ6(ü­~ ’Įz’c;oŽ_³•—ķį]ŽėāĆŅn/Z5Ä·ŚI’]`|Ū Ž2p|s\˜ˆ7ćŗiž:żźčʤOąēŚ#ÅŖ^ŽŪFĶ ĖĶlŲČpƞ;ŠóŁw"nT<Šō śó™M·\cŹ;NwÓ5 vļ掓1ZhYŠ|ō²cfoĻ4UTt}§w—Ļõb)$Mī†Ņ€$€ŗDā1“¹Ė{ū֌#‡|`<¹ŪŠfŌĻEųań?Å’~,ü3ų’šźęźÓ޼KÅņ„Ś×‡dGÕYw‚½ĮÅØģ§ūCųö˜ųšßćwƒu8ī|9ā[¦‘N¶ŗŪóĘć³nVŻMEE”Ōz¶§iŅ\Å*ń’Ć’­^Wā{&¼µKõ·7 Š]&q”e*LםV6cŠ?'>%ü8ŗŠ|_­ų2m6H V[ŻtĪ&‰Ž~B= éčE~X~ÜōæŠ^×µ;M Ņ"<¦—fE­ś\Ū°_JĶ?˜k½6ūK¼¼Ńµ–QŖZM$2 ņv¶3YŅyA·œäν g=BœMĢZt€Ėõ­Īb¾Ų‘@eį#µUH•œ©$óĻրUf/.öĪxōŖ‹Įa“óĮ  1¶Õ#`ńV”Źø÷ąŠkLŠ@’C)#ŚæXąß¶÷ģ­ūVxSĮ÷ŗėYü=×ę p².Ų£”¤>£‘ī)IhzŁž‚ž×,4Ķz;½Iü'¬Ä5 `w"’2уĻĒõøĢ7— g2™ä™Aź=ÅrŌŃd—† q§ŹB«aāaź+ń?ž Mū!čß>]|fÓōxށ­µ×Š/ō›$¶K)LL|Ąš—ōēŒą‹\Ń/ü7āoB’Im&1ĘĢó£ź®3ķ]FŖ}œĒfŻÓƒÖ¢VG\ß -5ø&ÖŅK˜3‘„ś×žéŚ“>Æ>™+I’pĄ¤ĪV¬t×^#}Fņ“•ŚTzżGį\ķīæįļéZ؂å&‚PĢńŽUG'=ńķ[Ā”¬~š|9ńœ>'š¾•āĖ9¢žŹļ(Ļ$ƒŖ‘ŲׄGsrøuiXdjéŒu±ĻRFö™zö·QĶ;óĄ?ŹŗiM­-„ŹIę3|Ū:…­Œć8%ÓaH¶c>•«a¬ZŁłR:™ė‚Å‹4«¼ŗ#ÜĮpń“3nj ¼śWŒÅ¶źåv«äÅqēMŗøŗ0ŗÅĆ"·mtńn$!K¹#š¹Ÿ¶C’sž•Ķźaįøm’:qŅ€;’ h”¶ø¼•v°%‰ĒŹj“Ė›h£³»†XŸ*vžTZj%Ę,āŽ;{†2@ćnŚO·J„žńqøäŃcS¬ŠnģRéķÆ"y~Cą÷Ø“ŻZt½Õ­ŲIĢjdc”ČØ’ŠønyĶŽ“Ø“—·vń1drˆ ĄaQ’d\˶YTŪHGŽ©ŒMK:V•—Hҳ§@q޽:-> 9£'ęk@)jš½ŒŖ 3=ńĶfŪL2ŻŚ•@­ƒ»šŹo”¬.lO>”ØČ±>$aŹmV…Ž›H“LŽTčrAć5 š‰g-¾¤²Ś]ćWcžĘ¹-jÓģ(é ĒĢÅ`Ł“|ĪĆLækń}#‡t;†;ėLÖ“ó¬Ż;¹a.~`:š,tEhvŽšÕ„œO$Q·÷qü5é—z…¤šM ¼ÆaP}óM2®s’Įģ;Ż7•ć$føĖÕŠŽĘóN:tځęU—śT›Ņ–§Žü@šlś„Ž_°¬ådŚ9$jųĶx29"‚Ńš)%ŲBõy=kƒSŲ‹GńTöč>f 8Īz×”ŁI®>€|Kimrtc!‰¤(JīkĀ­»Ō?GLÉĒ[¶”y¾ķ?Sƒ¾ŌÆÆ`»³ŠF (#øÆcų ąS¢k‘xƒ_’5mĆŪEȅĻrsŌśūW/+?²šŲ5#źʚęĮrĶp¢2Œ;²+ćk‚Wś‰WĞž(­„‡Ļ“ĘARrvö¬btÕÉŌ“gڲwķ5į_Łæö‡šg>!xOPńo‡!†H|ĘÓ§lm™QŽ=G¶xÆoż°’i]öŒų£qć_ Xßčž1··œbą`¹@N:U{5cå*šŒ¾¼±N^ā‹/›ißš±ńM›\Üź-ģŠg©īkŲ¼7įČ$™ī Ń`ž¼ęœh£Ŗ®1Z#°–ßM²‰ÖXāD^ÄU¼o„ܲ6Š ć :ӕ‘ 3±ņoŠżmnĪ d,ƒŠUēÕķ›ÄrFže™“1v„c¾•C­T#ŪXg8ėL,Ŗ„±ZQ•ŹI¼„œ•5·gsj±ŗÜĮäx#c tķ\ķt4Žē˜iN4ū«‹£Xķ–V1摂sĢšķHå!P…|W9±ZH&V,HŻķUį,ĪŽ»ŲAļA¢––25?³ŪĢ·D œc5ŗ”ö÷n£¦²<šKŹÆČlAąö§)ņ‘Śü@Öü?ābhścéó[ؽˆ0ņĢ£« Æ>Yd_šĪ””µ:]'T¦Š2åvņ¦Ö®ų×[æ×.­µ‹—Y.į‰ayHł¤“ßųRS4Q9X/ķ±HÆ&qkmdo-Dƒ~=kXČĘ„+˜wšd¤76…#žĮĻjśkąGĘOü;ßįßź2ų·ĄżŻĮŽöēÕ$<ŠŽ6<йo3eϊßtĶrI"šŒw¶š$„ ķŹųń÷u›«™ķŅÜie'¢¦yoŹ›Ht2ī_‘Öų‹Į÷: Dče:uŌ+$NŁł²;~ מx—HytŲī¬XGs%±’§ŌVR‰ėѧcWĆ:„±A½ÄäMŒņz×jf@Į‘žR9śŅ“:Z6āŽÖ8{‘!‰Q›å?Ŏ?\Wšy.»|¹‰äu¬Ģ,mCBgē’=kņåīgF¤ äÖs Dæol¤ŹXŠŁÓōĒ•Äń3ĪĒ€£“MFį`–Õ”™ć‘XŻE]µó!wū4ā"ŹWv>ęA®Ŗ:3‹Jńhųn÷Åž0ų{ńNĒSÉ?‹t‹ŅńK,‡ż"ŪvN;Ž+÷÷į/Ę_üqšÖ‹ā_jń PŌl§!&„Ō{”ÆbV?$šœkN/£>ńV—£k~ KŖź “ÉdöńÄґޅO©5üäčś&„šē^ŸO»†H­EĢŹ2® ąqҦ¬ōŠśœ–¤š»č{ę•{ś+Fģ;ē=kaZGpHé×ėŹŖõ>’Ż‹WGufö¬ˆįś’:W'„É%Ōör±.hĶaĶŠļLķ-īb #mFči×/ E1Ÿ˜żėX3–«źŪ§™s,p/,Ų®3Ē?`²³¼š ʗky„m¼™—pw×­vR>_3I«3Ī>iɦź66Ģ#ņÕ³Āć"¾čÓüss7šyøū;Ø+¼p+®œO­B)•ķōQ`ŗ¶ÜÄĆ'ū#į—Ē?|5ń‰­é·:厉%¬‘Ķq„ĢE֘ų 8ļUĮżk¶‹čĻĶüDįŹœāć}Šż_ž ”ńįg€|7„ŚxCNń÷ˆeAökŻPÉ]§Sæa_Ÿµ?ü[Gń7†­ģž2~É1ų¶Źį1s½Ōp*Ę£bx'Œ×£‹cųąŽ-NXœ-NW}==Qę:’ģĖ’ożµm-o,ō›/ŁĆāUė,0›ʉqŲĪŃ-jy$pvƇ¾:’Į?jŸ„×Rj’³ĒÄ |oųxŃ,‘E­ŹmÆ †ąJøĘ>}Ē9č+øhĖT~Ÿį’×b!•ń:u(ģ§¼£óūK×UŻģ~LüB“ų‹š3ÅPų/ćÆĆĶkį¾¾ĮŠ<̳Z\p|©Ó(ߝMįmz Bņi“«»{»}Łlq^5ZVv?æ2Lņ†6„q8isBZ¦`Ņ5{ye%åU” ąž p~#–{½P°Såzā¹qU¹zŹd†%óĻJŲmJŻ]|©#dĒZ sģsśģ+*Č”CtēŅŗŻ"ö9m‘½±Ę;R±Jš¼O{éi÷>pś(Æńżž‡$¾BBå?‹9ėłž•µ4|¾e^Ēџ³‡ŽäŃ-µ/ ß\Āŗ=ÜĆĖ^ēw×ļ~u÷OĄ„×µ_ZOĆļ ÅoØ>Ŗ²M I EgA–!Ē5źŅGÄā1Ī2?Y?hŲOÄGötńŠā™įoŪŲK;[ČŖm°WīIėŒóӚžK<-£ė:X¼WHžķ'’5xFUČn¹śÖóŠ>o€¼@§œ{gF *råMż„ßĖÓ§ĢśŽĖą’Ä ’…¶“ż6ßXÓ"Ro!·—3A·ļń×éXšV­¦Üų~Kt“I䔫Ē>HdöĒų×H«QÅ]E§½Ī’)CøV8Čąg×+įOųCĘwš·…ōėŪyuĖV"k)€Ąu µÓ…”v~EćǼæ‡+8;J­ æķķ’ņ[žĖ¦Yµ¼*†6‰1÷qŅ»+FА.sÜę½Ź±ždוõ:»}F/²ŗ³Ų÷®WU’Śhć›hĪćģs^„v<Ŗ»™z—Ų®B—B¤tĻj×Õ%µ¼°ó¢|æ÷zb™Ē#‡¶}ĪP󊳵Ödeh4я;:KkU1‰&8BzƒXŚÜˆŃb#ž>µ½ˆ*i—6š K‹¤å˜n&½†MB »;{‹y™¹Ę;VDĖcŌ“;[·Y™ž€pՃ­ŲAa‹D,„‚zŌē“3¬~hĄņק͊ŃX®@%³ži“Ü̹‘Ą'p<}*[x÷ {ÖN=H#ÜÜƹSÓéWm-YšāAč}źµ2„ŗTø'Ør wm”"f>£µ_m5į ę ©Z§s¦+Zə¼œsÖ€9ČŁ­3:”éȬ=OVo1¢—a÷Ŗ†ę »˜±e*ŻxėVą‹*ŽG”­„Z‚ĻĪ“oʜąÓ5{ū'nF°ćėļ@-¢ua¹`ć‘]•‹AÄń#Üj"·…wK)' ±–ꐏSļ/_±‡‰¼o{‰¾/A«xSĀq‘l#R²Ż!ē,ON+÷į€>ųWĀŗVš›Į:„۟’į S3øźūČźNkĖ””ė·ŲZT‘+@÷zĢ™!“Ž“Ūo^kWAµiIÓĖ D¤Œ}y¬Ģ܏EŪb±\AŌgØ4ė½OSŅ05Śä)ŚsŠR5-JWw3µøÜŠzWĪZæĆ’ŁüIŸāƃü=.‹ÆÜĀ`Ō.-e*—`’ 敯F•÷ęūćǟ‹_5{½WāWµŻ^%œI ”›÷+ŽŸ(ōĪ+Äē–5*LP©Ļ+Յ4‘ĻV}I‰p Ų`u¬ö…ŽT,B/~*Ļ:¤ÉZŲä߇­/’ńcŠõėAĪ;c|ʈBńŌqVb¶BĮ%ńšMŒčm“÷Tó$ā 9$ćŁųOĆ÷~ Ōķ¼?į›IüSā äXą“³‰¤bĢxŻ“W;Ųź„÷—ö'’‚xēā5ʙ撌Žõ< ह0č6ņ|÷‹Ōy§Ø’w×ōłšcąēĀ€‡Į< ¤ųSM‹åūR@«$‡ūŻ:ūœŸ„pUŸC±+¬ņyq<³Čo/{±l’kœŸķZ“; hĮåqŒ× · ‘¶—»Ēš«Į¹ÆŌīŁõÆńÆÅxZĄ$“6”¬1*£ļĒC]0‰\Ö>)ųƒńŞ)‚āŹöö]?N_–‚b;śb¼«ĆZ'ˆž jCJŅŁR5łZb 1ĮėZ·`s>‰šēģÅā?ź:M޲֚ö–ćtČNœń€:­}Ćį?YXZ­–˜¶p’ üżk&Č=“Gšµ…Šy øćīć5¬Ž’a žŹ#\ņ2:šqŒĻ$Ó¼{©ź7Śˆmc†s±r¬=½z’†µ[”H-äC(Ļ5§*9äµ>ĆšeŽ›©č–qD¶RŹ«ŗFP sĘå^YńwĮÆdöš‚±†Įó¹T÷’Ļ­2OŸ…ōrö½Ē+zU{Æź‚&»Ņįi> n=;VœĶc§)¬ų—Se”62ŪĖæwīśPi·Ū’öGUn¹j‚ģz¶‰ā[},%œć*ŲŚG8­ų«BžÖ’¼Łƒ AśŅhͶ|ŁÆ„نļž½AŅē;ćdnAėƒķÅmh~3ńϊ“ø,üKmk-äH#b±ä€:`ć?­CŽ…ł ©­ž‹¾Ś['E8Č)ŠIJ–i§ņĢsqŲ©ÅF«B ž+:¾Ÿ5³ ;ø•˜`¢qSZH׳YA3ŚĢ0~fĻėB•‹P,Iä:D·āVܧ¦yĶz|~+ńŽ–ŃĻżĄĘžŖw Ež«uq]Aqū°„P0~•™āŸi’XĆéW7Ā{˹lgPĄ0·{©¦?ćM{ø#¾†dĄt“ōČ®Īųé“2Kiq+g%gÆJĘhR‘¤¤j× ·6ž`9Ēó­8“č­".³¼yv®wl@Ķ[Ä?čљ&HTåĄĒēXšgŽ<7fކ`ܳ”GØ'­„ErYCun.l&ŠéXFCś×įf¹°‘f¾V,ägøĒZV5Ōµā’Z_éĖee»V$¶yĒ@? į“{Ä»Īö]ć“ZĘ6"RčjKÆA„Ēqp^;}Šw¹<;šĻÓukO#\[ŻĒ:ÉČdēu6ŗsłŃš‡ü$š\ ®Ēl~Ėęā=ūל ­®xØkŚ×qM ­Ļ‘²n*I=ėčN94y„:CŹņźM)•£ĄbǦsŠUĶXyÆd‹JiķoV@Ny.”¢Ćŗž\ųŽ=/L2\~ķ·©އé^‡ńļX°šŒ—(:£ę'·BCČģzw®fL·?0µ]cVŽū\ŃõH T9‘UÉ ĻėéS|6Ó¼Eāūæ²Ä©<Šou ųl ‚IⶦsJfļÄQkÄiŚė"bįĘą£Ō{×Ö¾ ńv±†l­Æ$6³¤xœņ+K:}ŽCFńF¹'ˆµļ5‹ØRA°4XTö÷ķ_Kü&ńŻ£źwŗLÉ,óE˜Ŗ‡1éü«)G±>Ģłwö…š?ÄKæŽxžĖB¾·šģ×EÅÄ*Xųnżr8«žń׉|w{£hZ¤CQ†4ˆĘ§ !^}N+ž1¹“t=ƒāi'F‡I±ÓąžÓ…‡œJ §±ķœ×įŻm#S`š|_cŚ£+…,;ńŽjįĀńĪ»Ŗéއy”Msouk wŽ6H=?•{ˆ“Ū‹~Œ5æ•q×3ņccŌ“ė[_AÜĆŃü%į“Ó俚ķ㠀ǂ@Ę@®;\ųg”éugr’Ž¢fXČĮźFą++”£sÓžųEń…u/-ō·²ø !%— ’0ē§N•ēśå¾Ÿdŗ™“·7caŽĖŸZ phńĖ-«­¼p ¹G9Ų~å} šoāķŻ¹“M¾Ņ¦ÓwHbŽżg‚į[‘)[Cßž&h~ńŽŽ¾eœvŚŹB%Žķ2Ą9ĪxƔ>ؚļ‡äš^æu'†õĢø‚ė`Ųżŗ÷āi>Ę|ē†ŚÉāo jZäZ®“b_7ęœŽŁ­ÆųK‡čģ}ń{Ę0]ßišī…cu£“ŻÉ’9#Ó9ÆÆæh Ųė¶qe-¤ńüĖɌć£zVUb9DüuƒĆž:ŃüOwg-½‰“I¶Å²BLØOäu•ģéą~ĻmØĒ"H¬[*qA:¦y·ÄÆ čž&“°Ž+k˜ƒ)dłY—ßüöóõŻī©į=÷Š=ģ–jā„@±eénµŗf°©Ńžļšē@ŅćÓ”ńæ†dÕ-RRkYīcߏ®kīO‡Ž[‹Y "ćeŽĆżVTóõŪ4vgéŸķ>_x§M×ćŌÆōÄwtø˜9,IēŠWĻž ųļÆxX×ōæ‡ģ_ŁÆY¢SÉ|ŌŠ™6×CĮ“}W^Ö|Ga©Å5ĢŚ¢‘=Ģjw–$ńéÖæ{?b$šgŽüŖ¼ztŲQ#•R˜p9 sÅ ]ŁŻžŌž—Ē?tļ jv–W1Į*›i$ą©ó8?ēµyoŒ|geąļ -óC··dF>x“ż£Ž¹āķ”ĻĢo‹S¶‡s©h:væ#,€I¬¤sßž?*ļæf/źŖņx{UՆ”‘“0Ė—ē'Ž·ŽĘŠ=϶5Ė;Ķj d°Yõ k3¶s,±Ž~÷„cųsJŻ °;¦/•RxĶ2%|yšŸ‹SÅ÷ŗ­­•Ūhrgk$‡g˜3|ćįˆ¾9šTCCKfÓļ ŽSŖīä Ž£ń«ŠLĘGŲ֞:»ńLJ“ŻVŅĪK…ˆ;̊G˜xī}+Ż<7ć ¼)¦ŽßXé¶W F© Č_OZrŽ…ÓŌų«Ā¾šż‹µ/C՝ÅüęYįßĀ<ķ^ƒšōļ|:¾&ҵ+ ‰o4Ł`2Kū¢zõéĶAŃŹiß|;i$öĀHYP®å ś×Ś?4m7Ošuö—aÅt1hšØŃąåöā‘œ™ó7Ē­ūXŃ¦Ū 1åhfP Ę=ņ+ćо ¾²ńM„ݵä—Z‘,Ø ~łęe˜¾k7Z<šäż«LVT“%IæZāäš}Ż…ä&+K“ J½×9 Ś:ŸM|3ųńMÕ“ āŚåģ–O.pĀØN7/<}+õgK’?i:Oö„Ż«ŪŽ¢Ź„H2ĆėI£tŗ_ˆ¬ōĶQ$x¦Š|¾É"bWé^ ńŸįģσļ4;[ø4kĻ(ÉnŃI?NüŅå2—cņĒ~ń&‡¬Üé¾ U}B7tĻĶĒR yuĶ ³ffRĶ’ ĒZ²I¾ÄmŦ¤U¼³‘œt>•ö/ģ±ć«xõ½OĆŗ¶ ó=ĄĄm¶“ļWĶ  :|‰ņ$„]Ą+ŠÕŁē™¾R;`+!4|eūMxɂx’N3Å,j¶×ˆ‹øøģ~™$ēė_Ei#Ļ#ɂ˓gwֈli”źž"ėüagŖé©ķ°u†ęŚcņ*1ĮcōėųWŁßü oāķ Oń6!nJϲ¾H¤lėJ}ĶąģĻ鏞ŸūgßžŠ’³üæ>%]ŪĖńOĮq­½»“‡}ķ įgÆŹœz-~¼M-Ž‘:^Y(Č;‡¦„cVZŻGŁžńD’‡ģŽFŁ{”ŌśÕ­Kšļ‰ō@ń„¶£įŻFŅKBŚ`%‰Ō«+)ģA#ń¬čg#üęæą£ß²«ū)žÓŸ> ĒlŃų&y&ń„īĮ,$Ó„rDaR‡+ųzbæ)u;FWY0R:ƒFRtā¦ī֍ķv“oęĪZˆÅU1–ć žµ]Ѧ’ic\ąÖ½]n-³wœ†,[ #īӖ!²YYĆgpFŅł„+ayģ*3µ]WvXö  qÉČQœƒÅi4ć͌©“Ę(*.ʆč„GŽd&qŒć#Ņæ”Ļų7ĻöՓįÆÅ_~ľ8ń-ÕÆ„īīĖ“‘č9ś×2vü“~Ž’®¾ųāūÅVš¾™,ZŒg*[' Ć·ųäWēcųŠ,H£å Zļ”3)ÄÆ%½Ź€ڒ¦„‹Ī¢ā0ļžŻė ē”H¤Q4££ žĒe·Įdżę}:ŠM‰QŽUŹ¢īžxĶT’„.ߜœē° CÖ(¶yĻÆ8§&Bį‹mĻj †ä­>ŠvĘĢ:1RϳiÆyhžN³lÉqhźH1ʌp(;)=OīēžēūeŪ~Ö’³‘šļ[ń›'ŏ"Ihžš²™6žyļ‘ŲW÷-­h$²™āÓÆ-¼F ŁpćpSųJʬ{°GsfŽgšĀõčß́Ļń/Ö³|DŚl‹,•¦Æį}EOŌķåMčQĘÓ½z A‚k†kR?€?ų+ĻģU«~Źæ¼I.™„ßĆąčēkĶ|†}f%S÷įbќó€;_”žÓ’µEŚ#·ĶČäõĘ}ė DG§ųGĘk£źŁZ‹=$· ®•vž)ųKįŸK©·”䆖L`«ą¼)F |ń£xoĘ-£]Ż„ņĆĀŹ£ä“ļļMń=ÉÕuIāū2³q€ĄśWU18žēū4ųŻō-VėįõõÄŲ˜#sƒĒb¤öēł×č6‰tcGµ•hŪkóščŠĪQ±ÜÜŚĆ‘xŖ: ²ŗ„’ŗĒG ĻJ—-LÅ׌ĘÕSiY1×kŽ³ÓŚoܹ,„ē' Åh„÷5tÉu+G–(ŠÜĀIG9«ÖQÉūÜĖk4/½}h—ē½²gżŁyéÅeO©¤RƒĀØ8„'b‰’¶-®oc²w%uŹūūŠĶÕģ&c‹.ģ(Œ®Tw0”°»7!yĻū98æ£iöĖĀć'jÕ\Ų—UŠŁ-„!æyœŒž•‡Ä‰ŗF¶ī `ĢóŪ«$Œrųž,V†³{=®s{ —ŚfQŠIō„ch-;Eń“Ė,Ķfd;ŠŹøū‡ó^įi Śk¶&ź?*0¶`:}h(ĮŌ<;Bź2°J¼ģõę7—:½Ķų€¬†8V'Œz t76m¦¬ń“ēÆßu¬mQä|F>b źk)īn•“= M¾“‡TqśšĖÕē¹Õī]į?g—8ć€ÕŒßCH#Ć’Ś2Ī‘:³7 [ūµcÅÖ×j²‰ Gß5š] VV2¶å+€}ÅqņÜM Ó¶ ’r iČmt:}?[˜Ę°u<ēŠĪ¼Ōī-‹¬r„…nk6­”¬Mķ]v¶Xfm͜äŌ¾!ßs:^D°ī+‚BćŸzLŽ S:kōĀŚÜ7MW ‘lĄtł7ć-^ćS×52ļP’{t—w”WY9ēłWcŠ ĻÕÆõmī ī"öÓ0x™Ißé_yüńŻ®‘¤Oį}R8/4ˈ¶ŪĆ" 7¾Ā¼źW?jš_8śž}EÉŚ3¼ż½·žMk˜æ“6ßQž÷OÓŅŅ"OŹ£…®³įŽ O“Üž`7)ČaڹœQžŠąVĢõū« Ž0aߌ°R[wpVī{ŠĶGSé#yĻŽ”_(ėń2,Įfp <ē­ZŅ/$¼µ†6ÄŃĶ%¹ęćd’g”hŗ&£=Ķ•µ©“{ŽHū£Ö¾ĶŠ|ż—”Ā·Š[Ėq€Ē™F+cāqø„{?ń>=Īņ%ņąŗ“Ž}«ä]e®.M͵„ܾK™AČĶrŌ‘×”ūņ3ō 5³³Č|ӜœžMzĶ“0$*‚2ø”®&ĻŅņź;ŽĘńĻk—p?‹ėO²o9Šą#‚AÖ¶„Yõ“!cÓ<-šžOZź/©•øIHÉRz``’*ā|}šæĘ’ n“oj2ŁxƒĄZ€®£k’.÷į$²+og”ėÓhĪŽ÷*#Œ|ƒÖ£,7={×=Em˜źfk3ŹĖ sóTīéµH*‚¹Üūé›]ʰa4ƒŒąW;sw1>ČÓę=qŹÖRŌē©NĘJčńĄÄyk.xc·Ÿ­sšŽ†Ö6Ęõ%ev9Ļ”–§ėņʑāÉcXÆRź%Y2+ŗ±ń}•ńHIDovĘis3Z8ŻlmO¬Z£łQ89ܧ"¦Žź×hĮr˜9>ų¤zŌ«Üęlnmfø–B@Lž‚·lŚ %S¼ēµs³ÆŚ{YHIJĄø¹ÓmüGeapĖ$Ą Œ`ą²fŽR]Qæ5Åt§€•ƒ] -*° €WFš£{„ܯĦXQ€| ķĻLžTXŚ/CŹģ”ųsRu–_ōyŸ€Ćõź¶ā įóÄū‡ĖƒšiŲ¢‘“Č•˜.qWĢāaĪ9ō­£ 幙n¾A`ē ē•{¤ÉwmŲ+ķ#׊č‰>ĻSҾükšÖæįOƒ“{ˆ1é:Ä1öą±Ā·|{’õŖü/“ĀŗbŻYkšn¹¢]©,Rn+Ž@aŲ֜ŗóržIż†R刪܁Ų4É'•g‰Š‰‘°FsƒXN$ū],vo<#Hø†ipÄcos\½»,ؤŠČ‡>ÅM{RM;NšEVrē¬]ń.¤YČ]¹äg­e(™Üļm£„xśžÕ§gs%Ģ7Q†VFČ#֜ €żrņ}^ö}Fč"ŹēsmP Ÿ\+UXø©­ć+Չć¾?šN‰ćKčo§·6ŗœ Ēń|Œ=Ļ­uæ$Ō~ ųž×Å:5Ćkq¦)ÉT|žAÅt*ŻœÆ•Fsęhś÷\ųć®x÷J–9Ņ­årĻ gÆAķ_2xĪ(.bct”ŽHśŠ%Vēn/5dex~O.8ŅĀÆšīä+(`} ŹŁļS…•ć’® ®sSҧ¹ ©ÄȗpŲŻ÷ŗńScKō >ķõ,lu2/Ž Ī>µŃÄó (źXZҚŌę«.‡æ~ĒŪöšż®>ü%¼§š‚<ŗÖ»ņ’¼ •F=ƒ>ÕükŁ?ą¦ß³§Ćļ~њׁ<aoaugaā:įDlüč8éļ^~ķŁųońmxqEžŸĄéJrūģ¾ī_ü›ŠüĢųmŚŹWÖ­’÷NhķŲ$¹ÜҬņjHņŁ žŁ$ŒģŽĶmŪ]ŖĀ±;co÷ ä’Š·-“GĶnæ9 ‘Š«+J®ŠĖĀ©hb_·øø•ÄXĢ~Ę“k&ļ“ĻJŲ ś¦§„Nš¤0ĀģæN•ŅŲ&ėšIĘøćpČ­£ĖsćQ»Žb™,æJŠźgŗ‹iŚØē“+ŪZÅYÜJI'f•Ō,8©i˜OsÄĢīäqœā¬-ä‹EEŪō©µ“ ‡ĢubÅ dä֔I!ڱ†õØ`iI~ģ×ō®›OF¶E3(“€f”µ¾B w•Éßź bf9 qzPq|ó+Ø9\žU“ +"¼éøgšØīc%cu`•¦įIū£ŖE€ć(›—w­lI³$ėˆPoėķ[QŲGd†ćQž;8ĒcŌśõ‘qō’ĄOŁā’ĒūÅ:>…qįoƒę>·x›ćóĢÉ5ūQū4~Ć_~ywŚ~‰iāo,†IuMF!! čŠF¬[±©÷ΤŚ^™j’š‘CgØہöčŠętķóÄģą=›šą}+$nM§ZhLŒˆnęĘ7žjżŖL“.”;yq’w¤ō3gLŚ›\ā5Ū vląÖ”Ŗ}žA F×[øČüėWčd]iČc[½H3Ć×a®vļS¶™cD³³a“†8Ķ5~†±O©óĒÅXxGD»ƒĀvé4ČŪ䝗ä·Ļ9ćńÆĢ?Ś3ž Éšką?….ģüQā]?ÅæŃŪŪ@Ć8‡OĘŗiRoCXÄžS’hĻŪoā·ķ ćm_Xūuē…|#’”[ŹŹ~ö½|gŽÖ‰U]Į,ķźIäę½ZT¹Q*$Sž]ŽK+;g#­VŁē²±śc„[‘ęՕÉü¶ĘÖ'ķÖ¤A¼cżEģä™" q½‡5r+2éÉ;»VœČ‚ķŽ–īZ92Ҍp+_ʰ·#»ņÖ8Š»³ń€rMg)S¦~°žĒ?šKOŚ+ö„ŸIŌ/ōÉ>ü1iøŌuB²ÜĆĮ;C}Óž5żO~ĖšOߣ£ö9Ń’ĻĄ~ÓĢŹ~tŒgšMtĻ«ō #®¼‡$żŚļ¬4‹[wŖ; cކ…JF½Ģ–²Å‰ćG?NE|ĮńóPMfĘ1d×Zq.V;£Ž;Šfi”5æ čé¤ÉwÄ0ŹxÜqŸQõ®įĒ‹,ޱ4:Uō77;#DpĮˆź¦'é ųėÄ>¾M^ŅåE±<%xjé|_ń“ž= [Üiė ¦pĄ`µ!ū3ēČ&žI”FƒÅvžŽ;ų.Gŗcņ‘Žžōī\iŒ¾FÓm®RXQįŚTxś×†ÉāK>łć”"@Ģp1ŠRéń+’ˆņ䍤vęŗ8ćŗŌ wŽą9ŻĪŚ ¦ŠxvśĘö9Đlcóbŗ‹˜u,$ÖPyŖü7°õ •¾…MG^»¾ņ-gQ#*‚9ĄéšŸĀ¾,²Ńõ um6‹sņ²Č:ēøō5ƒ:!¹ÜųļÄUö— Db`­ņŒ ČæZįtĻi7:\ńJ‚BA …ļQŹīhŁĖÅq+Ė#[ÄgU# Ī+©Ō¼Aq=ŠÅxŽl*:ĪŽÜU§cM.aöW….!#•'W"ŦŻIå"“ø’9N{׍x³MÖ%Öģõ éeӓ"āī=Aõ gI§XyؒŪ3;.7)<­}įεKųܕ°~é÷§ŹÉ‘ČųēNÓ„ŗW…ÄS)9Ą7Ö¼õm 3$ā3µNXŽ”Jęlџ]’ŁSʟĖRyę±uhķēŠK©'…€\˜sRIäQ¶Ū†‘n ž0w b­µļŪ®!`Tŗ6üé“=‘įŸCTžÉHu5l¼ŹŲ϶ŚålʞŽĖ nN1Ų ŌūCds^0Ō“GŒ]Śięņ"ŲĀņTzÖĆ߉> Õõɼ9ؽü:Įā›7zSķUģkģ›W=JūRŽ‘-ć;†Ž®'Pŗ°žõŅŒ2’2qĶh„s–P±¶Ś<©o Ģ38ugŠÅ¼˜Ć„‚äž*› ĒŚ·Š©ņ7DĆ©^•U¬ķ,Lrcü8ŒÖ¦ŹE{›vĮh”ī7µAaifÓ“—6ń#1ūäu5e-Š €qĄėSZé°(o-Ā+VŠŲĪOSFÓO·ūK™½øVäVöŹ$!c‘Ž•„śBX#µ†k‹x£sÉۊåōŁbæ»Ā ž@ !¦‰u„·¹hӖN1\śŻķ¼;ž3 899÷®vfٽ“DĆ0ĒWō®~}AšFX·z#øµķ”,(8ĪīµŠBŽR‚õÖķzÕÜhņ©5é.5C§™ŒŖ€`¹äšŌ¶-®\8Ž]ē½e)ģė]1¤2K§³6īN†¤‘/#ŚƒĪŻĒµd§©›g2Öø2æŠ5}-|¹ߑū’xƖģ’hķæ^äx­€‡G<ž5Šæ1Hė|q¢č^/°±×ö$ś“Yv{tė^ įĖWEńœĶ @ķv b" ņ0=sĒ^µ¬%Ż½–„ā+‰µ;­!ōoŽd(fHö5×jŽÖöʆB3 zÕ·c¬sö¶÷+nu?“³¤x?u½ėŠü ām/E×aÖnVxdcVˆ Ÿ@}³Y{ü-ÄÖ­ē°vÉoøA‘ån¹õ<טų_Āv:f·®^\YAa;§›gꐞ@öėšQVĪü|ž$š¦·gØÜĻ,ö·ĮP”ä $üß­t¶ŗ=óO„ŚĀ°Ćē²±•ÉłTśWXƒÄ? µ€Ķu}%ر:œķ8ē<ūūW°h2µšwĆ)ü1õ)d³…8üiJWŠŸ¦“Õ|Cā;vžÕnŪPÜגx×Ɨ/āWŅākYåȌ…l†=ˆÅ FKc§ų"v¹Ó'¶‡ķö𹑦»&ü°öśV†š.µ ±‘7˜xĒ5LźŒl~˜~Ą>µ—Uń>5Ō„³YAP·*§FOCßņÆŃ+Ÿx3įķŻĒ…|OāØąŃo"’KS4€™[i(Ŗ9®zĢÖżĢÆčķwń-”Ӓ3§Ø._iēž+#Ēž-}Ņ-&yćE݁Šr}*Źvø¤yžf³ĒĪ>f[k’ÆĻ#óÅ{†—š+Rµƒ\ŠM>ŹļIš4™ćĄČć×<žk²&NF4-„ü,±Ó-5mäiRČR5 K=óÉÅz’€<Æ]kÖŚw…¼=q&‘9ę劍{ąśŅ‘¤f}EsšæVńw†|@|C”Ig£Č¾Iŗ+øōķžų‡ńoįL? ütśj‘<§i(LĖ’p[Ž•œ¶6„®ģŒ‡^+Ņ>üEū?t©­ŹyQ“I/nēŠżŪż‘“[ķ N’šŁĖiiØ~żwGµŽyŃ̬)Ó={ö—ųd¾µšōśT£Q°ŗW7ppėį•Ē~kåüeš~«įm6-"ÓP[‹xX]y§~’p1ĒzåīĢĶŠ:-ŗ¼ń—0¼¼EŽ…:ćėĻé_6č>2×>ų’ŅśŚņhZ;•‘nŒąŒwėh++EŸmxWö·¾šĪ¹st¶Ķ‡5٩Ǹ|ćGėī+é |išF©„ßjś=ż¤‹¼I+ķ`ÄōĻNµ¢Éœ.|›ā’‰ŚÜzIMRhõA$ģźÉ„dž½ø_xŁ|E£éWÖƝ ‚Z%0wõ§ĖmĢŻœ—Ęw·ž{k‹­%„˜‡ ¼ó‚:t®Ļį’Ä-R&“N¼ø–DI)Üz¾m T¬hxƒÄś„,­é¢Ž?!mBŠZÆļ5<ē[²Ž_ä]ąr~Vļž ¼gl$¹R‚‚ŅXÖN:#ōda؃Į­){Ö9'±å³3!>h$ŠØrrWvļOė]f Ų]äsĶWŪ– ų۟JĢ*Ćę;mb0x FAr>śü½:ÓHiЉ&ę`SĻ®Ŗ¼‰“÷”šOZŁFĆ4! C1p;ō­Ķ/Ä~,ųā? üNš%ųŅ<_ ßĆ©é×P€%ŠhÜ0Éō8Ę*$µ7¦¦üŪö¹šßķū.|/ųńįū˵Ė(ģŽ’‚vžÕŗ§ģūXųÅös<~ŌŌ`¶ć ōÉÉz’Fo…Ž7Ńüwo£ų£ĆWF_xšŲ]Ū3>ÉuĘäĘxäż953;¢Ļošö²÷v÷ŗ}ņ”Öld(ŹŻY;ųZŗ–öė} Ęė+Õł‘¹ޣҼśĖP?9æą¦Ÿ²½Ÿķ'ū5ųžFÓdŌ•ģ66Meš˜Ć8#Ž)(Ų Kµ’Śwub¤q‘Ž£³‘ēēŸā©—XēuŁē$¶Öµ½Õ…¼røhĢŠirģ#X Ė[?1ļųW_mā(ķ­ČøŽ;«iåV\äŠUŹSG¢M<×±ŁEk,Ŗ>@:IµÉ*—>ļ(Āņ¤Ž°Eš܇ĮäÅi$€*;ÖksōL¾Ke „œŽÕJXü‰Ėä+5vRßSź(SøĻüP½ųićMR?i’_ų/U¶ķ,@³[ĖŁˆüü+Óüć9u†ŗ§‡“­NBŁīāŗŠŻ—±üYģqŠźUNÅ£,>ƒ±«+2‡+!8śW^JĒU:VŲĒÕ®6\¦`F4Ńpd@é\&ŽĢ×Ņä·óįŖĶoøĮäj‚ūģÖ×÷ §æ›mø˜÷«ļK™ls֎…I/£B<ÖHyü+Óōß|8‹K“oŻi:‚ڰó¬‚|ņÄ9=$ōõ­)„}OĪųÖ„xa×Õęßōžóčx’fßų&gĒ é·~ń^»šŸĘó¤€Ļgq-¼©;ĻXÜ8<ōZł'ĒßšMOŚoį•»Žų?ĚoĒ=,ŹF›s§Ū…–źį, 6:ņGk¢xu-b~?—qī?UŠĶc¢Ś_ēÜł Ęķń#௉ķ<-ń§įē‹žj—yöļ©[ŅŽ— ʜzf»ļx×IŌō™ī¢ŌmĻ ;ž•Å:..ĢżĻ"ā 8ŗj­ sE”ō»ŻęXüÕ+’AϽzĄä”wSĻ\Ö‰öTk\źoŠZŚ„ŲĒ=~µäž#Ž}[X°Ö¬ęk}FŲŽ@21čGqŠĶIض}/į?6–ķ”%žIććN1NBęihb^hķ¤ź—śUÅÕµŪ[Źń "l¬ Z»g}=ƒH-f’-źQ€<0÷„n†°™ĄųĖJ:‚[żŪŹ [ų~•Ež=>Ų[N …ę¹ŽēJŲŅ–e¹ÜŃ)$zwŖ–÷8s¹žõ šĮō4/ „«ž!­Ch·)j‘Ę0l×M&=oąĆ ühńķĻĆżOĘ~ ń$–o6–ņʬ.eS÷9Ē×MyļĘ‡æ¾ź2iž;¼Ó¦‚+–µ2Ł–X÷† c^œh/gķׯé÷ė÷Œā:4ńė5fÕÓł½<¶žŗćčŸhkEI—Ī…É ŸJܲ¶†Īge… ž£k–Q±źs\ĆńĘ£„éö‘ŗ!ĘKä’*ŵ·»·‚‹«vŠ9dČąŠĀq:"™Ģų×NŌµm8Ia"ĘźŹ]@ūŹ;V…ēņ”t Źū=fkģĻV“ž$L!ż+[ĢŪ‚ mśŃ`ŒlĶUŒI~c½bĶlģ­P’±Ś8 Ź§SĻ`7GR’)®ĀAČźs]ƒYG4* ŲķI³œ·§«Ś†‰WjLÖ­ »±˜³ʤę„Ķi÷8ż™h_20ļ]œ2Jžh¦u7bŪŹ"‘Pž3ė[¶RF’Ę^5žĆž!A.}Ž%’/ų’õ,D¢ÕĖ2¹0&ŗÅ»ūDK“n•½#мģ~’Į/¾ MšÓö•ń‰SÉY®|9ö8T¶ !÷’?ļ‘\ĻķāŻ_āgĘĻxÆÄ· s­ŻŹ68X—€£Ó•éF~āGāŁ–BæÖ)fĻž}(/ü ¶|Ā’ õFų”ųćĀöv·Ć'üL` ž²2xōĒå_WčļżŸ­¬Ś|³’gŹ*}łü+ŖœøšéMŸai­eÆh‘@[]BńyRE ĪWĶ|[ćφš—…5‹‰ō³o.žXÉ–ßtÓĀ“q8šx…ĪÓŲ‚ĻÄw!Ņ/ü3®\¢ŗm8Ś@Ą?^j‡Ć’?ĆĶVŽĻ[“‹Äzˉ!7 üqÜV•F¦źP‰ō/ōįÖ¦žń'Āt[# F¹²”-ņĆpø’ ōĻŁžcĀßµOĄ/iri1źļqqg$ '°KV‹ ü_Ä=­éĖß²?8ā—’ Õ©Wė'čÓG…žÜzT>żÆ>(é6ŃĻ‘©yZĢ1N9Y„¾ ģE±ŌYčÉØĶ|«ō/Ó§­b¶štFęŽ8Ų>Žõ­-ÅŹ®|cūLIaā_YĮ¤Ü%ō„…9'åą‘õÆŠōåŌõ[O„s=ŽQ@ŚøĮjś"v±žrż!³?mÄÕ”ĶuÆ/u6æš&žgźĆ­ųĆ^Ńf‘ęöėĢ:ąuÆd¶»ŽŽ5ąm§„{V?ž+KVgŽjžY&3¼ žõJ=`R7ŹĆЌņ(<šJŗŠX ’Żp{Ö4^I*ņ•Ą= ­#šnĒm¦ÜG4;FŅG¬]R ą8śō­ NŸKÓģÕ.±²^AÉŖļoȚrčN nf(šµˆ•åŚµhZ­łl6FÓŽµS3l”=ÄlL¹Ś§Øō„gU„mqŽ Ō„.Ę2܎Žįbg|ĄŹ¢iwn Ļī)óœņ܋Ģņó‘‘VV8ēĆmǰ©”®I2Y|»±øƒśUøŁ£2ŒTé®6ąą`VU߉šhšķ=i…6ŗķ*°gĖq‘ŲSn£»’Ž)šA4R1ĘŻĒ­#>qŠZV S§ōó`‹!2…Ūņ‘ėļL‚ŚĘɍ“³Z–vÆ iX(rr8֟34ŒONųmą|Xń•įĻ…žŌµżNāqœ!"ŚS$„`Öæ`æg’ų'…‚.ģ¼Wń¦ļIųāUI‘"чfź8üsYJ]v?Nü3”ź:*.›ŖiÖ~šź8k{X×j"śżk±ń7‰uϱ6“ąM9Vf\ ‚0±öÉĒ_„d Ĺ׆„°“FńvøŚŽŗĖ—“nÕ.{č=+½Óōū«„ņVi-­ŽzqŠ ™nDµ±·0nóe«Uv¹Ž$J­Ųv¬ęśŒ •žźUGs ƒŽ*Ā\›\Åj<ĀxÜŽµ™¬{œ_о!A£iÓFń®©sƒ”ŒēĖ=>lWĄŸæiļ|1ŃīüMńCĒś.‘¢Į— cęāB€ņŌ“]ąZ?™?Ūž %揋²źžųc'…ü&Øßø)-äyŪōCė_ŠZœóė³ŻĻ®^Ļ­ŻÜČÓO4ģK3“ōÆR•5ɕK#{‚¬#‰6ʃhöŖØĘUpkw#‚„AébIĘZw•„m Æ=ŖiH’ŁKHžaī{Uę·ŽĒqžŌ–£³2Ø@3ž+¢²Ó¼iwÅÓ‚Ķ‚M ›R…Ļ®fo؟ö„ż­ü]‡¾ųPƒCUjÖļPÅŒōF#“_Õ7ģu’`ųū2­‡~/ĆańOāčŁ:­ŅīŠŃńŁ@ük’­^‡t)Ÿ±’*ik„Ėca¤iQ`$F>µ‹s‡·³ƒ88ÉĮ9b‰±IJüČMrš„ō¶ņ”‹¦A®YK Ņ¹ƒyāˆmŚŅ?1•戎+‚S<7É=ń½Ī৬~ÕĶ)\ŁFÅŪh$!®'Tˆqjņ/xÅu3Ł( Ÿ¾A§N=J±å^*ųcgg&e[»Ņ§äśWÉ>'ų¼āuYŪģH ¶ŅqŠķ§L>bńĻĒ„†)aÓ#·’ąBXä>•|·yq®xŽźMNU¹–_EbŹæA]*=LfśŚWĆķ{ƚĆ[AÕ½ŗ&É !‰éƒ_f|&żž’±^ ;5&™€&_¼G~“™ښĮuKsó*ĘHgu®ļEŠl|8ķl‘Ę«ž„pi ČźmmģīÆIVņ7géW®mŤ¾L¬Ź®M3'"Ōŗj4Ał*wW©GįĖɄo48Īõ#‘B§ āi:¦uf“‘ƒ‚~•šī‹šr x¾ohś®„ir®XĀļņ8=A\čģ7^(»†xāŌēņ!rŠO„v: č×_dšā6žįĻ=©7acÖżÓiź‹åī9śÕ>źņÓQI#Ÿuøå‚œf¢RčG9ÖxŖūE¹ŠŒ°\I=ęį˜Ąū£üā¾zÕķ/µmFĆNø¹XŪk)Lg™©RdŲĘKmnęHÖф†62cŸĪ­xsĒvæŚ×žŅTŌć|dķ&“L‰#Ż-óŚ³-“_ _鶓^jz­ž°łNčdĄū¤g‚~•”ž¢P>o½¼6wש™7#hĄWY¦OzēŽhßŗuœ¶/”ō{}}%DV>l’®ģ™6;£Ē¹AĆzē•ś:=M-/D°ÕŁ]æČŽæĆ^1®|0Nń…¦«§:¼JłŚ€†gĻłā¹^ēTgcŃæµģ5©$°·Ž ˜—k)'$×“Qé\E}$2Ū„Ć3 6:WU&ķcžlźõWæ°TG€¬Gö5Čj&W0Č«…ĪĶu¦cȈ¾Ś±Ä Bˆ£®F3\dśu¶æ«ŪEix"rĮ@IqÉ«öwÜ„ĒCā‡ś•°ˆźq¤Œ0„Ćš®?Jšę”¤[ÉaØ^I©³Ū!`J‚sŽ=)JŠč„¶«é±Ę<ło,Ćd»ņWŚ»}2Ļķš²‰”ŽU9ŚĻ‚jmm ¦ČēˆŪł›\G§SY6z…ĢņÜB©q‰ƒ¾E![č{ŠHĖ›ū÷+^KH[œž1[:TMeø«(rC‘@Ž_RƒĶžāQ3ŗ±įaEcg+“Eˆ}ĮˆĻzĮŽĘÕ֐óĀÆ²+#½sŗ…õ†—2„ņžčõƒ‡ŽŌOFŠ,ōė»HiDķ÷·:v¦I0†āH’UņIć·D•®Ś&'U“#8=ė›–I-óöe;s÷AĘ)—\ē®üg-½Š²‘š)\ķOŽü+wķÖ«fϼn§cÖ¢hčŒL+‹˜o¢ņRņkI•ącw·5ČźVó5Ē•ē’=zĀK°Mō54{‘bā…Ž<}Ü÷ÆB‰HcŻv1#nī3M# ¾†”—“" _0J¬r2;zŚ“‡ĪJ#«h#2K­*Ę™į’åĮo<ę¹Ų‘gVP{ŒVšS>sY ÓcUeŗĆœ2ō5Ęk›Ō)Š@é»õ5”Ŗ9%–ĆF»–īaŠķḖĖÖī‘­Ļ-Č{aĢ9þԤ”IüO®ź76·'ģń;Ź)ĮWĪŗ®§s.ł’ŅīR¹;rHģg/!ņŒÓ“KkØ-õV}.ņQ»2Æ)ģ*Ä»R¶ÖVž ‹mæ)\īŻXJ]āH«ā-*ģ\-ģńĀŲłAü¾•Üi·:†£2Ngłˆ±ąŅR%ĄėuĶ ZŪ[¶‘qn%łY²>÷جŃ{9d–ŪåVé[%ŠQq/5;člęŒI%»ķ$€~ļį\ʍw«]j;/ōōžĒ?,¤ä±śV’cKŸ%¤[¢ŪʱHLqō­ŻM¶{`&6é#uzŹĄŁJd}>ö8­n•pŲyÅt—“­ÕŖs,„|Üz֑Ķ'Ōžküy-–§Ø[Ē„1“KøU%L2g!F;q]&‡尊9ķ™fĘcÜ}kŻ<ŲFۜŸŲu›Ū\-”cĪ Ī9ķLśƒX¾HVÖu KJ…“ķBG·ø—{߀äu®ÆBø¾ŗŠ“Ūčć« ,ääRh\§Im¬ÜYČŃApöw摟¼? ģ4’jK„źSjwMsŖE$Æ×żė"Y埈üaćKė ci>Ė ĄČ× w,`ņÆyŻDšTŃĆlŁV5vÜLŽ•\€‘’ OZ—U–×\¾Oģéē6q‚qŠtļXž8ÕgÓŹ\馄—DØ)_O”«P-Sīy¼^0Öo.ÅĀ DŚKķ$^sŖė:õ†³k­iә®V\üņP¹üyit*1±ōžƒ¬4qZų‡Oŗś¢ÄĀIļeŗąūŅÜźV$‚īėZyŸW]ÜłŗöéRь×DyLZ&Æ)¼æŽ‚)‹åq–_ņkļKm¬xc_¼µĢZc7“ĆŽ©)«™ŠxšūūRŹł¤ŠÉ¤U?/ŽŻÓéĶ}3.…­Åį9l­ķå½Ó5łSKœ©ūrj®Ž˜Óč Õ­µżSm"*łm®OĖA^ŪšsZ:Ō÷šNl æņ˜0œd”ą’œ4=‹įOķ>ń4{øÅ…Į”$Q€Hŗą‚+ōÖÅ_ćv•ž½”ź6-¦9h®0Xś©ĻNæäVsõ2žšžaā{įŸĆĶrŽĖÅģzl³”xärv«ēFńWÿВä°æ·¶H×h•™r„{ ŠqOR-}Ohń¼šŁ#Õ|3KhćĄ0ĘH³ż*ē†>%Zj°]ź3ikÖ5HÜątż+dgĖ©ņķ Æü@ŠĘYį‚iōd3ł±Ē½“'œ{qҾے‚_i~!ń÷†u&ÖķŻ­““<%󐤚HõēōoshDżXų£ØYx+ĀsߌģąS0“„åœF@īxÆĪH4æ|SŗŌ¼_u„„¶¬ŽAG„yŠ“ČķĒ?qß[•nĒ‹źß’d}gdžÓǧFŅ|EbæfäC…#“Å}¹gū\~Ģ:ĆĶ%“éW÷šp˜,ØzõćҵŠm܈uæüCŌ­u„æ²Ötūųƒ+Ä~š ņ>„šų{ćöGĆßjŚmø…Ž"JÄÄ|ČGčE)EģgcćV_é÷چ“$mn²’=Ö¼—ā¶« ^i6Kż–ŚĢRćķ/T’}żėX¦”hĪ{įǃī¼eÆéš Ü÷†Ą‘$²yGk żÜōϵ}“ćĻŁ$Ūź:ü ŗ»^ZI4±Ķ/zŒ/Njļc]e³ų©xsįŬ:ģvŚŌ¹Ś²D?w·²œœWx›Āž’am¤\XiœlGw>ųż©sĻ<Ó¼5cyw:Ģ’ŪĘäœććŠ×µ|6ų)£_Kc;j–‘Y“ēēr·ūTĢÜśgų+öeš-ꄦZi‘Ām„™PÜ<[Ęļ_ņknūįG†Ž£Æ|?Ö,“éī왤†]€Įć§cŠLņɼm§EāM;Įó°µŌ ÷&Šź ć#æZ÷½ÄĀ×bŪéX˜'/ƒó‘žEqīxgčFęÖĪśÕ®$·š@Ē “““œążkęOų‚ ½BļNŗ·[äPß#§õśŠdŃjtŅ5PŚH¶·q0(€Ą:ī 2[YŤϋ”"ģłĻw j7=ƒĆž&Ņ>諯jvV’Łöˆ0®Ōś įhų[āLZ&„o`ŗvžš,‰åp„€ūß­ F,ā|®·ƒšö=COÖl,R5’¦LFģ{n5ŌKć)u„Öµ].źēķ1ʚ.Är=8Ÿ2ų²óÅ<±Éˆ“–d–Ż“wnƒÓØē޾~Ō¼1«ŪG"jZmż›pKH˜ ķš eǐźZ?Ł%›le" ~lēuduĢ‘øĘp}«X>…CcģŸŁ»āŌx[PÕŽāĶ„-oŽ„œp§ų×腤ņ[ģ £ m ƒĘ=jfй½{ ²Z‰š >SؚłćēĆū­sĆcÄ|“¾”§±y`Ē 뛨”-Oƒ-ętyD'*~o^ v¾ń®©šūŚ?‹ō’=ŽņęŽ<|ńūż1ZrźvÓ}ŗ’hM.ÓĘžšßÄ-ŌāŠvRG'Ž ?_Ń'ü§öĮƒā§Į~ʾ9ńŸ}㟠b}!‹bK‹2N^ūySQéSģōhź‹ŠżČ‰ŅŽUņœ¬‹÷H<ƒ_Yü>ńU¾Æ ÅÕŚ’h@6¾ž¤c­s8±Iuxąļķ ā«/ 5×ü+?3x‹CżÖĶåbŅ[«Ž0®[ØE(Ė[8Ÿ“:’ÅÓĘčŽjLɂäzVOšČXˆĆ; ¼ń]Ų䨖Ā+?ļs6=z}*¢ļgT!·fØĀĶhi7īöŒ™ę”!ćf †žTFŒĀPČĖĒ<ō©mn<ōfŲČw‚=Zµ&2āĪNX”ĘsÅhŲ1Y¤›rmŚc'ƒųUKc¢ żĆ’‚žŚŃ~Źßµ”<}mkš‡āLg·)H4ŻI3åõćt™ŪŲī*sÅ}Ņ_=õŒÖ°5ݹ0é$de\{Aükž“nŽ‹œT¶2ټ· Į *ŹGLŠł7ćĒĀč|kįMKKŠO±k6²®£„\ōjvč@ž~µęIY”·?=u[Ä[Čõ}sż"+Äm?Xµ8 ŗŁ^äsßü×’ĮK’gŸ‡ž,oiViy2ļ¹{qŸōFYļ€GÓš­)0qč~IĖ$2¬v8ŽæīÕiĢjĖ%†9ņ<Ō'8&µHΤluž»³2O=ƔBøAļWÆä³”'w<ڶHĘĘ,WŸdȇi稫vśė™@v`ÜzÓFmÜ(fą~õ]4£"ؘg8ķ@ɗ°9GP>^O×Id—Ń[ż™XķLį@ Ń@NJk¢ĪÓ&åĪĒJÜÓ“Ų5„I]-Վ c  \‡+”Żizō¾x7éŹ:ƒ“Ņß]M4b1Dgž{ShjLlcŪsŒ{WŖčV[éĖxÖ’j‰FyŪH³›Õn-noQ­Åż+b{!„Ć|·±Hē†Nā‚ąõ8ĶA p7Åėžžõ±¦N÷ŠŅR%ĪzōØØjzcÄnt™ ²;mUls^vŚuĖM!ņ FķY γNօ®Ÿs€dĒĖĒz擎ޢ%ŽįäV`¢ :ĮŖ‰Ós\Ōž÷Oh˜ŗJAčqÖ¹+Iu {dŽišT^2MSJŚ„˜ŻH"aóĶnŁĀ"EŠdżŁ8ļnõÉPąĄįZ²;½#A¶ÓģȆ(žÕŠ‚=k™ÕtŪvi£6³g#®CļņŹf.}&ü"³‡Ošö«©5“Kŗ‘ĆĮnßīZé£_–ZŸĒ<- ĻéEŚkT’Æ#čm7öėŃ>'éxGö¼ųOįˆi<¶Ō-¬Õ¤²Vćy‰³œÕpFkĶü_’sųQń‹H~ĮŸ-t›‹Ó.‡Ø\›B“µAd]†?…z)Ę¢Ōžsuó.ĘŚüŌe®»?ņkšō?=~>~Å?¶§ģs§ükų3qØ|8I–:ńŸ‡ķ4„Ō-×Ķ“Œw®^,uhf 'ŚWīZę=OŠ0qs‡14(½“µū°Ü‡jpqé^Õšā$>ųÕš›ā>«c6«‡õøÆ&TnD$|’)éķ[Ņ™ĖžäÅa*ŃŪž-}é£īæų,7€tAšö”ųvŚ^µį»żŚN©5®Ņņ¤‹ŗ Nx!Ō÷`×ēWĮ»1µ‹=/RĆlģBv§z쮯''Ōü7ĮZU§ĀQĮāŖRs¦Óņn߃GßV³‡†’iρße?ˆ3i×ZEōsj> Ōg~™|78ŚßƵŽģ eKÆń_ĪĻ‚müqš{ĒŽ/ųńFŚćKńæ†ÆŸN½Š@@™ĀJ ĘäeĆAbø«Āč3ūęšf¹—ÉŁžkī>œI|„.¬®ž£k*vHoa˜¬mŽA®NDN©ŚčśĀ~ šg‹žųŠž5‹ōŲ之ęf@¹#šéė\GģaāK_ų—Ē’ ¼FdVŌmŚXÖC÷±‘€?Ł ÖüØę«_Żg%‘Āų³į·ō4½šv %FrڬN<÷æĪkĘ|? „üOŖxwNæŗ½Ń”ō9f?3FIĒåŠĶ®†r~ź’ź}§N’Ś£ĖcŸzói'O½‡VIµ™°Üp‡ŽZ[ŁźAæŽÕ—w Ļ¦H$“’i ģ:ā”ÄgCa-Ģ‘søŹxŖm}4½Hčń.$B2N=1]Xz-³Åā ó–`źc±Rå§v’®­č¼Ļ,Š’fūļŲI«kž"‚6÷Ė .Łžļ'’×^©įƄ> š„–—zm’5ņ!BιŪō&¾› JČ’&8£<–aŽ­Œ—ü¼”„÷¶ĻU¶A€Ī1 ÅjŲ†¼»ŽŁ²TZō;Ÿ'ZgQsą[Ö·³+äœy®+T±’ŹCńāaĒLsV•Ž ˜77 Ės ®nk—»‰Jj‡E£jļk$NĒ|dąŒō÷®ŽīQyūĄÓŠŠf\¶ł )8?­A,[‹e’AĒJ ×w/>¼Ör4®Nģm<Ž("{ÉjŅ0vż)c·0©.ƒ2WiY .œ~q­¦‘”œūō«“ģc-Ķ;-6idŽ)pGZ¹&œÖ#I÷Ī}* ; ŹŹśŽHä+ø ę°µ( ±¬ÅU‡#ЊÉ'p<óPŌß+GŒ‘Ó ¬³ię$’|½xļZ€ß°ż £BFEj k‹hvļ;1ŒUŹ63”;ōčēXJž=« ›@œŹ7—8ėP8ǹ£o¤Ī/ģ“;MŌş²žųsąÆųB|9šfŸį6Oaf$rY˜w&»8­ķ|9n"²…õ L”śšČ™H‡Nšo‰|O,zŽ5ŠĶ_tV±Ą^ĮĻŠW®¬vŗ=¬QXZFaM|Ē1%Ž—=ÄŖ ’Hą­Gs؋@\܈Ōq“ńI½ Q(Ix/ā(ŖŃäżćŽ„+£|žlć°ķX ĄąüAā}?DCw«Žy0”łUFXżxWŽ~:ųb×G¾ŸTŌaŠ4EĻśD󙾌xėjp6Œē7öÅ’‚ĮiźREÄĄŪÖlvIj€&{d×,„Ō"īcßėVŚc¤m"‰_€Bk‡»ŗū[Oü‹$˜Čć5É7ŠÖźqśĘ¤- Fį‘Iłˆė^}sā;xó"2y£ƒķY„} R<«Å¾.&vpĶ»!Aé^Øųśy¾×:¬ZjØ,ŽcmČ™®ŗp5Œ{Ÿ|GųĒi”ź&}żŲ|<§Š×Ąæ>4ź—Zō10ŗ½y„ Į ĄžĆŚ»#†rŽ¦Īą_x£ģļ XDŃ0Žļ8aōÆ“~|·Ń#KŪ»¹ī®ä!žŽAŗ4=ĄŖrčdą}Sį„Ö‘KöØ#·„īŻ“ÆZ÷mĆKŃ°ŅĄ²øžąĘ I›‹Fž“©\\Ļqh‘Ę¶äøėÖ®ė>¼ū,—"2AČ\u Ā^g–ź‘ŻEqi2Ē*2šH=kæŅ¤ŲŽ+ɐÜ6Īy&‚YŠźÖėmjmKÄ`ڼ£Ių}j÷śž¼Ŗn^5ąēęDŅ€<ÓŖ“a.4yNŠyeųoÆå^{«Ēs}nņ]Yŧźƒ*Y9SééJR±ŗfM„¢^irĮ©ŪĮwt|ÜķR;Td†¶Få'_»Žõ”„rÆŠ’ĀĀīTūbFf˜“żJr6‰­a;3óqŠ‘h:n·©źI“gę±^橋’éÓ[AŗÅŒLūę©!ót>Wń妔¬éžV™w6Ÿ$ry†Hś°ō>Õēž ŠōėO-žŗ>Õ/;_ĮˆĒZÖö*/¹ėbłņOO 0ĄÜs^Eā?„ß|C­EŖčž!X¢¶KiŠ•ĒQÅfźV=ĒĆöwÓ-u öļ€ ŽA#½wéŁÄR[ļLõĒZƒ2ŌĖnmVa`ąa²+š}/RŠī‹g"5įŠ÷Ōy¢žĶÕŻFķƒņō”õ >k‡‰ʝ×ėT–¤ŹV:4Ėo°ZĖ øĪ[>µę> šÖCEhģĄ1ŹśƒUČ;é–of *Ļ1c޽>•y,Zāł-nÄńģ勩ö”C¹”™­¬éÉkqi÷É*0Rß'Ż=ĒóÆYÓRkū’›hQĪ3Zq~0ƒÅv6ė„ ĢĢ üKķ^xŗ‰“Õ·(‰˜{(\]]^1uŒI/z×·²Ā²Ø<žk9ˆ“MÓµŒ÷1Ęd“݃žŽāŗc‘Ś5äēÆ.ąCö;»2Ķ'h鷑V£šģ÷62ė`,£i±“ŸQųQfÉæC‚mJÖ Ło¦ &HĘrMsŚŻęmm$Š\ż–V!cŸšŽVZņ<‚Öī;›‡“Pø‚źč1mŪqŗ½2=R ż2ĒNk‰ćŹłˆ9lž†³’е>åŁt€¶2Goø=Ošn›y©Hf¶øŽtTmŖ¬ 8¬¬'+ģtVŹ-¶Nnž™Ę).’y„EyT»‰čk>A6Ī9|>lui&2£LĆqtž!ļ]*J)!¹ÓŹnIżĆ··½\#Ńs mV÷X1ŪėWBU±ĀōĀ«j:Uŗ`Ś_%ä+Ą=Ÿ„uÓZ’¤Œ[‹ +» ĖKĆ0-)Į Ū>ÕņŅµoė3ĖõŌH®pX’Ųõ©g³xcZ»»“Dž{«ę-œ‘Źzķ¢–(ܱ ’Lö%ģ\ūR2¼^de[ų}jÕ®u?{h7C–e•÷¬L -$jÆ .åz€2jgIn!ވ̘ĻN”Ņ%m|¤7ƒ.ģm5Ÿ6£*Ü2€S=GjÖQŚqz“lŒīBAČąż*ŗiW]+ɍüƒŽŁ®yDīĶ-–ī—ČÆ;×ķ-ļošŚŅš2pĮ‡œb#Ó4ß Dš"ę<€1ǵĘV8½nk[ Ā’²3|‚NÖ{źŅ #Ky a@'?ÅķJFźL©<š³I#O `«Ž„b³­õ¦Šö9eˆ\*ē*̓X•Ės“¹ų…£½źM—e§¾d^£pF•m&ŗš„ŌĖyā/±z{ńZ«:g¦ÜźMš}†ÜG»vćÜ?ą]k"ŽīI&UFŪ u«G,¶6nŚE+ĢwžÕĪ_G42²O'ļ>½ėe$`g4ŠcpeƎ„×-}ė±’ŽD1ŽX1ēš”ŹĘńŲH,-ī­¼é”łŁĘ č*­Ÿ†ķį»ūdw@łŽćƒjĶĖ”¼^†½Ö… äW2-ōĘčńŽõ®]]:āEŽ"%Ī2ŻAf•Õ‰ž…­ŅMøēėŽŌ¼#.„ØĘŖói‡?ėOB `×qīv“ųFĀ=s4Ķ)R ŒG${~UēoŖ‚-ŅʈrLŅ y™v×&‘c‘ząµvšo‡Ś`g>¹Ē÷«¢œÉ­Z[$nĢ‘³cošä­Eܳ›8#Źļ^„Ÿjč«ŅįžÉgaÉ ĪŚĻ’wk±-¼Ģį[š„ŹÄJ]‡ķ6ķ4‘–Ÿ¹Å>גģ˜ņ—±šĶĶ™4+vkāOu>¤e’%¹}NzWŖx?⩪ŻÅ$ÖóĀB…f<€=×Ńs£‰Ét>šī™6­ }Ž8ī„ŁS‰9čkćj·Zo‰5 ģļn,n VAę1!Žs¦®Č;ēŪ_ž/§XŚ]jJŗ“B‹$p!Ē^+nēāʃ'ŽüEcØčsŪ¬-©Ūž³qä Ž+:‘×C%Ģ"š¶³sku§j–±/ēHF°5ų¶wÓaˆÜ,LŁ`䃚v°”§O³øÖRĘ(`’HĖé×=:ĪńķÜzćé·©$CĖeĻ$ØŠ Dšļ…¬u=9Ģē®Ā™>µēŽ3ų_­Z^“:vƒwØé“((ÉĄŸ™F{ŠĢYš‡4S„ZĮyØ\YJa!beƒĒ sžq]ŽžŚųKĀė« Ėiš« xäøaéųźbåsåßĖyw¦””d!7śÅ>¢ŗ+Ÿ 7‰m¤†ķŃÜ …tĪåī? ®q^?š—‡Ū@Š/`in„Åy $ ķaéŪņÆ”~h~)×|9hŗe„׈t;Ie [ŹʃU+Wń¢ÓN°×tö‚\IqęBŁ ŻOҹ_†¾ÕµmNā*Ś[˹ؐb8’A¤dz†¼ §xÓLŌuifHtāeÜĆ Ģ:ƒłWėGĆOŚļį_ü!3hzߊ“)å“iܒ'œqD•Õˆœnxʇ¾ż”|ü'vŗÖ³£I)ŠFL °Ēqļ_é6qh6·:֎?²5ĘłdŠUå„VT©ņ¦‰·Cčāʃy¦iVŗ”“4īwM` ~µäæ~ h‚öA“TKŁń³ų|³Ÿļ€Ö²Z™µ©öĀė;­CĮš~™ā[;-NŹź!E0.~¾½’ūSįe¾™ū?xRļPŃ.ćŃ“©“uĢ0pqœįæ.••Ir¶.k3OÅß4ŠŲ—śĢéqĘbø\ń ē“Ē\‘^1ā­ĮŸõKĶU5{Iå~ŌcW Ķ‘Ó˜®]njČ?ŚgĮ6’¾%ź¾6šf˜o„AķĄŹ*>ųŸĪh’õM/F“ŌVų’ÕFAĀćŚ¾yųĆń6ćĒž3øæ¼Ōn•”™¤“h*`ŸīóҶNęr‰ė~Ó<;Æų[Mø¶ž+Ić;ʦIy&¼_Äõ–tøæøY“»€į>üc8sśÓ2“hś«ö|ÕüšėĆ7> Öō{[żJCŗŽśEżąl{×Õß ®tx¼Qī±36Ÿp¾[ļūˆ9ä{ó×éPÓ#™ž­«lŌµ“°cy¤Gƒk•ųįÆkŗUµĘ•{hŚŹBMÅø1,£¦ŽÕ<¬Z³ąļIec„_źFÖ=–Ŗ@ņĻ=qׄx7€~"xˆ¾”²Ėkb÷¢Žq…ķšŁ!śžŻš—ö”ńgĆߌVZˆõ5o :6dēī殏?u5ń^æć]ēT’ŽėE’R®Š3ČśÖžĢØčŹ?µŪÆų·KńŠä–śŅ2fB’ė['IǧóÆŁÅąKķ2ŅóN Ąaö†Č<~U‹>!ż“õĖ]L²×¼3i$· p©)_˜„ȏ ā¾8ųaā%ųc©j𬶒FĖdÜ ļ:õĻf“%C¹ī¾ ų x»ć…ž±'‰g‹JīdŽ »‰\|¾ŸC’ÖÆ]ńW€|7šŪĒ:Ę³āh.ü!1HķZR”ķpwsźEl#‡æ…>ńo…cŅĒŁ5(®7†YóÓµxwĒÆ¾ šĻ†m‚tHµÆ²BŽ‘Fr‡;[ņ ØŹÅo|A·ńĻĆušÄ_ Ūxkʋ”a–!‰T aGŠvśW?”h–:‡µ 4Hē¼Ć-€Oś€ Źu:#š§‚ot˜5kżüūx„z  [=;Œā¼æö‚×m¦ÓÆEƊöRüWjJćėQ&`äŽ§ēÆ‰bs”GGŁęy}Ą®Ö×ķbŽ63ɍŖ:ēéU®Ū?YšģÉxNŁ#0`‡#<ōÆÓ߃¾3¹ń‡a»bžtÅĄ0ĄćƒļҶNč§v} ø§LsĖ!V””r`ź°Į#¼#š9£eqņȤc±qŌ„ģ~]üWšD’üMq„B‘ż’ēż*ٱ€PžTzć5ēivbUܝép™ö÷ģĶć=\šī„šĆW–ś;Y®ćønĮ sĶw²×Œõ?٧öØųmńWB™ķdÓu/"śŲ¹O“BĶ‚¬GŖ“׌Ņr³:”#ūŻš·Š“_ŠžѾ&xMü’j–ńϽGH̶r ėė]æ…õ6±Õs <xzäØ[gŠeä0Žī5žĪt1JŹČ„`ƒėÖæžų*—ģā?оńī‡šēB¾Öxc¾/}ZK™,ü=®&ˢ˅²ŗ€GloAŽæ;æh’„Ö’>ėŗ­oc©x‡C¶tóbPśĶ‰>”xü ؋Ōr•Ļä+◁o~ų’Wšuż¼ÖöQ1k'dŚ$B~č=Č®h4,ūvØ5čSg<÷ łŽÅĻcĶ@2¬Łm£·½lr2bÜĢ$Õ7‚O5xltõ ÅŽUY7`üŁüŖE"u(å÷pqŃh*.Ś l™BŒ²ŽžõcpÜqśPtĀ] ­§dp2r8éÅ}+ū#žŅŗßģŸūFü;ųĆįÕ¼‚Ž+ŋS1KµZܰ Jō=ųō4”ä„WĄŠ>ų½ą’üešeģž ńU”MtAā;¼–^Ģvūņµ{–‡seÆuį‰ćk›b'µģLgÓŌq\u"nzĮn<Ę`©¼mcÓ5šwķĻū-OūP~ĶŽ0ųse¬ž?Ņėøø†øE?¹'ū²)xÉ’iOjä°ē)ńæįN±šsDzxvūJ6WÉ%¼/Ē’Į™oU`ÜVF™¦éśƒAu寙qŌ’ź¬j(#ŻVļAńƒ.,µ \źŠīXäLģHõā¾~€Żxdł7l'ø,06ł£éšĖœNóCÖķ/ģī¬Ķ¤SłĆ' õ®[šbY˜īną8g*%ۃœšõŃNA(Üū“özńĪ—«iöŗ>±-Åʧho?9­×’×_OßérŁ^Ļkp„2ąƒž#Œ~֙„Šŗ|(’ ‘ŲĄ ėW® GL JæN½El™Ē-Ź–Ö&&h̊ü1Zv±ˆäA=Éõ¦—C'\›yM$pē‘ź~µ§¦Ž, D8č}č: õ%—QX¦{d‘Kē«C¹Ł!óœ4ŲĘ(5:K«9";”łßxąā°#Š;U…Ū“éŽh —,õ$ÕmnĮxY€)–=q^yŖEē#¤xŌą50kIköG”ƒÖŗ(ļ®ķ,e¶Va˜†€8™•`†I’VpXüÅEmy9>C)XŽ1žō†hŻéÆ5Ŗ‘ GQ“ņńYÖ>vš‚To²8ļS-”®tö:Ԍ%y ¦½6Xʎ„3‚#ÆÖ±..ĒŖiÆm(+Źøc ¬9žĶmoĆq˜O*”Y±¼ŗ¤,Ą6WŚ™¼²ZÉ ņ®H©4r”¤só -åYŸ1°8a]†œ×Ļl| ޵&Č£āJX£[#+ü®e>•k«)Ś“³<Žµ2‰¼v#½¹‚DGŽyĻ’ZØŪź•vĪ…dĶc>ēd—P}ž!°‡Ē9ž*ło㟃m„H択kš°¾½…Uƒų×w’ ņÖ XRŅĪXXŽzžäUB=OÓp9³’VgS>“¤Ć£¦,%،īyUŽ§šŪY¹ŌōP^Ęā6†Q!Čd”žUu6>ĆS›sŹ|_āmsÄWńYéĶnģN÷Fē5{@Ņžīč$šž6ł÷­y³>»‡MHŗšV9bø=oi×6K}׊Eqo²+ äTĘ7>» JŻūž?ĀmsĀśÆŠt½B_ ųĀ-1HL7KÜõ>¼×Ķ—Ė«i×xŽ(ž$±ē$JÕҹōxz–ŃžŪąƒŸ“.ģģü3š‹Ä÷ŠŻAö‹k©JÅĀ„]øćŅø?ˆśæą??ƒ|g¤]xwĊ›žĻ8ä{ƒYĖ%©Õ…ϰӪčFiĶn»e-Üöņ!Iį×­hi¾,UwŠr6ļErM4} Le³:”ÖlÉXąmå€#Ÿ»ZŽč’7%qŸ­s˱źSĢ¹ćIQš£>•Ģ=ģqFc`Čū±Č®r¤ĖÖćķ*IÉoå]_…m ¹‘e\Žv±õœnxxŹ–7®ü9©ź·”į„CĄuÅz…>KyĖ«°Œ®  ū߁­įDłŹø¤“:ųM’ĘŹhÄ#`ČĻõåZŽ‘ws¤É¬&WC–Ąå}ź•+ŗüŃŠĘšå¼QHÖś™ A w®ėCļ€<_įæü9ń6±ąļXĢ&ŠāŅį>:«FŅć隦qg‡ÄY0”ģ1PRõŖ?YžĮW¾+ŪCyąßŚsį‡>2ü2¼O"Iģ¢D¹Š3Įóa`RUĘr0>µ·ńĖž ūžÜžŌ|sūźŗ/Āļ‹ŃB/Ķ®›žŒNģ’Ūše×(›xy=Wēt³žµW?˜_æ³ķū&xĖVŠ~6ųkP’ŚŽ]‘źqFĘ)#†'§Nõ‹į?Ū_BŸ4W0Ą×ŠĆ8¶¤ģĻxļ ą£‹ĆæUÕ>Ē¤éś›GBŻĮ+^YwąōZņå«Q©t(ƒvNJ<‡j%x\œ‚œ b”ģvĘW5bŗTÜULń®_Å6–złŚ\Ėę·=qĶO“¶Å$tś>­ØC”A£Ü_\ŻZ!ąHäÖµ¬qœ>ŅjÕVĶŃbēMKōh™ŃS§Ģ:WIŖ¾…ātėĘS’õķ#˜NUā'h< Ų³–mŅpż9­©³šŗ*ųž×ū^޵Ž8µ(ū=Ą8e>ŸJż żžžŁŽ ż›<ńĻįü,ų³§\Å5Õ÷†ć»”j”Ź•ˆą«81Œąžƒ$€}LNVfžåsń’s<6_€öø¤łe(ĒN—{ü¬~?č~:»“Ä7zŸ‰,'šėO{#ŻĒ4e †|“l§¦Ņq_L[\Ū^@fžjąœŽõ„“ź}ĪIÅ[Tf\ĆŅI ‰÷—oć\UŸƒÆ ÖķÆmuūķ"U8ĄŪJóŠńČö©ŒŽš”®}gį‹Ń|;°øfæ“[øx R<Ć’xc½x‹ų£DÖæµmžĪGÜI ™ĘŅI'ź9­#.ē3¦ć±sM[įX^Źž: µ}į+Čä’ĶÖ9UYĄcĘÉžU2hč…V·H¾v §m[“QŠĪ€yˆwGCRĢZ*x·Ä·w—m ķ-‚Ų^õ=õ­Æ†µ «‰¶ų0yż(„ĶÄĢą¼ŖOØxGkC›®‚‡ĪJÆ95ūć}^=#į7†µ(-’]RŹ’« sœĒóÆR„OšĘTčrŗ –½įŻ#ā…¦ó¢Ÿę– 0c‘pqÅAæšOŸŠ¾ų«šcžģ4ķ^žŚ7?b¾E–»g9Ų‡Pw^OLWŃ᩟̒I,š®7‡'[ ķWÕDÓ³÷wŪ]Æo;~Ū_±•ĻģƬ?ÅÆ„:}Ģæof+ØŁ(iĀ÷.ß+ƒ×ģĢHŸŗHSÕIå|xŗ–c5ä‹>čĮ-žÅuŹ–‡Āx]Ęļ;É©āä’{vā]­ļ&„¦Šö¾‡–ü^ųs¢jŚEÅ՚ij Éņąśćµ|#=„ׅ¤’ēkd’zøjÓŌž”į\ĶJ“§SsĪēHŌõŻ&ßÄŖųkIŗŗŽ ‹óõ³V822÷­}«žÉ?~Ühæ<-ć߇’>]7ĶØiŅyw‡ć”ƒÓ žzā¢ōlō³|śYÓ„8¾Yéu²}/ėÜæć_j,š/ü+ų5{ˆŅq©f‰wE!Lne8#’×ņĶ“Æ¦j֚–Ÿž©ˆ‘YO S93ĮĖhP ēJ’·3r~ÆžśĪćāv­­xSPš/®|ā9'GÓ¦šR–’\'"6=nėČæą¢|_ńĆż°ķōģ|_įÖ]ā™@Č0ÅĄŪ÷•Kg'ųXzoUcłćŁĆ$āXU‡Ćü–Z?¹3ä’köZΉe"NŽ’&ōlēršģ.mXFÜ:t®EŸ×ń•ŅgQ¦]K”HŠå g#?|Ē©źŽ6ų9ńEų“į"ń¤²‘\<|Gr›ņČŲžuQ¹ĖV č~›|GŅü+ūS|+Ó¾"čZčž8±‹ķŚI ĆnJÖæ>ōo ¶Æ­ŻĮ§§«*ķ)Œ·ŹOĪ“±ĪŖ5CIń[Ųj“č„’bŌc- ”mn=ź+ŅÆ¬n5]:K9e lG˜¹é;VRVŠ×Śv<ĻNól® lGČpkÕt]6ß\Ó59MŚĆqn”ÕJń 'g·QI-J•DŽulČ/Ś0q:Ō‘Ś9@Į”ÆW łéGĒ^ĻO"¢õ§?š«ņƛW~‹¹©¹6ŒŒÆ”ķQC²i¼‰zā½śJŃ?†*H½ue"hpFqĮ­--^іycżąę¶ēŠąØzŸć k‰9rŒĘ1\·ˆ¶]O¹™;ćԜ¬ć@Ņ­Ąķņūęukkp£a;‡_„\[ŲĮ³?N·RČņ+ōÆF±/UeܘązV†3} rč„l#š«sØJ6¦ļƒ2Œ¬²2Źą ’ÕwJyĄ9 ‰K”³¤gØ?…fߜ³"&ĮŅ™‘‹o Īļ3Œ1Ž˜«÷Ņ@¬#ūݳ҄®`÷"Šńķ@gœ©«W2[ˆ&³[8–'Qó„W ˆ4Ży-#pŒ>n1ÓĖźš¤ŗ•Ģ…ÉqŒ ž• dĮn bĒ)ŌŌāŚ@ā-ŹaqėH Ø4ß³!Ś£q[vŚd÷ ‹…i:Š`Iö+k ŅMBhģĘāP7WĒ źkģoŁūöTų½ūBjP“Z;ųCįÓĒ™µ{øŹ;GėŸ_„e)jķoĄĻŁ#įßĮ 2ʇ\ ńdGĢøŌÆ#ÜģŲLJōŌ±!ėWø†[ŻŁņ±÷O°éY±Kc¢Ń®5 ZÜ„µ˜Ó­Äc½źPéS>Ÿkh÷ZäI· ~5<č…ęī—©qØ2–Ēśŗ”oā ‹énlŚŻ­V3•Ž:Ń̊Q9½CY\”“@nG‘Ą4‰ä\ķŸThžpr1YŹW*Äךµ¤ĢnŽ %ūŅ1ĄS^)āĻŒĶ”Ē >Ó Ōķ•{¹xH‡ØĻP‰q‰ųŁū`ĮRž|Öµ;a<>4ń,Qn6Vó‰ r>čć×ó/ūOžÜ??j-X¶»­Ļį’+»A¦@ģ˜SÓv1“žčaé]ź\„cāH–×Mi„0£c’y%rIęœ÷¾ģŽøÆJ*ŚuZ×*•,–Ϧ;Ņ8ÉfŽqQ(œr‘0‰Ų*”;}}jŌV’'TB™Čē‘PKģYŠŃƖUĀēÖµ®ęl$3>q8ĶgA£h×:ž±o”hÖھ±,‚4‚Ö3±=°9ÆŪ_؃ž±ń§öŠÕ!ńwĒIįųsš ŗŪŃ]Żæ6xQҲ©RĒ]:vŌžŖž~Ė’eĻ éžų9š÷þmŗ,sjRŪ†žfĒ“ĪxĪOå_CN‰+}£R’K‹†īĒ${jóē+³VģXx„ˆ “äć5^3kl<øeV3—C&īsśÕüc“ō®]zįoÖ}ŸgŪ”bzą×%I›B=Sx®õĖ>ōĻC\/ˆžŌ.’HõTC÷9®fΘ®ĒŸų‹ÄĖin~ÕYõ$õ5ōĻ‚?eŸ^iÖמ#ķMq]Y¢Ć)ɧ'ŃŸ`ųCįŻÖeœ¦9tųņFģ3×µ{ʇįkYa!­ŒrØōļXŹV!ÉfēX4š, ą|¹Ē#ŠŃ“š…Õšžę‡ŽUBäĘ>”ć+˜Ī}Ī^ĪĪīßXW7rĄĖĮ\ü­ļ^µŒ-į‚KAJäļU3˜¼µµÕ”w†-“‘ŽÕęž6šeä©„_Ųk—śDŠJ² a[ˆļ@Oŗæ±ŌōKFMJ9Æü€>QŹcŽsß„y…·¬ &ŗ·Õ®RM²FæĒõ g›}¹“½e­ļįiYr~aŌ{W;¬Ž5åūI~\}vžko©“L—ŌVŹÖź4HÖW Ś0?¼²įõ „ž8›ŹlįI©ĪūĆZäöšd֒ĘRV’XūŲ®ÓOńu•Ī-”· .ģ$x\L7`zÕ=~³‘®¢I$ˆõā­L®S’Ҥ“S•ŽŽHćecÉķŠŪŌ&Ōīfw»),ŋoQÉ£œ•O?ń>±«h‘Cu5…Ü–åöoXÉŚ?¼qŚŗOųĀāh¢¼‚ķĘ žŖ%(Ųöm+Ęö°’ĪśČKt£!Č#z•Ęų›I:äŠĖnV221ŒÓ‡c–“Jæ³mēMø†Ąb8j‡ĢkY ‘÷ž„EC›V;8|D¦Å,vG%vœI÷Æ;Ō.o¢¾ZÉęD N1±½ŽŅ×[2}M³A!9S.ļT4¶¬Ķ‘Ļ”F=YĮkžš×‰-#»žIVīܦ9 ėČģk“ńēm|Aį±ŠgZģ,ҬĘN8 żēA¢>OŠu;ķ;^‹A½²øøøEƱŽĘ¾“šī,ŗd3K‚SĮ Ōb±©łYÕmKH m’VļŚ­hŚĶ“³ŗŹ’@Ēw å&M˜Śõ¹PŒÅqåDxŚ1†Ŗ“ϵ'޽("NĀ­»H¤ł¹pr8„KŸ*»6xµ„lbŻĶ—(2 ¾yõĶPkkĖIÜČ€~\Ņ·„X­+ʾūJĪR<•Os^uć-ļT‘~Ė ¼”ߕ@?­h5!|3„½“4rBYĖ•Ö½ķ¼ ķ‘Gāje™”/„µÓ¶JČ7öµ—&·s#‰-ę‘"#iŗÖN6rŽåĀ+o>æZ׳ձˆ]Š‚GŅ„_*+¬ÖóM•»Lю1Yś“C$d˹ü¬?ˆ§vC‰-„šVż™ģĖČ­ /ā|¢É¾UąƒÕjH%“¹CFĒ¢/±C#É$a»“Ž’·AX”yā PĆ5ƒ~åŗy¬¤—V“7óÜ`Hz«ébįū|R$M¾CōéYoؤWJdC„éŽ*dģkG˜xļāFƒż§kjÖR,ĢJģćßWwćŻLŠāgŸb…ČYXdW5Jń:ᆹÉŪ~Ņ·vĶs¤h––šŒo…i0Ūxč ėXš7‰æølRŁaøa“)ua“€2+Ö¼a®]x‹ĮšrY-Å­ÜĄņbå9łųļŠ £#Ńž|:Mq.†±„YjņĀP“€–T¦½†ēö9šåī«_č:ŌZśŚ™’Œ݁č­Ö-ÉšĘšÓĀQhdˆn 'Ļ]Ɵ}ąĖMRT²bd–ą1<Æ\zsK™#éų—O¹šƒéZʘ·÷*¤ĄóÅ[9ćņO‰¼;öÅŪŲY&žŅKęQņryv¦Aō?ģóą­KÅwSiÓ¢A,Q5˜ąD¤ą7ʰ¾ | ńƒ|Qw¬jŚhÕt _dńg!sÓ×­+ō&]M+Å:w†ōį«ŁY4ßeO1£ĘD˜ēłW7ćÆ:ĶŻ†‹ā-=—O‰ČŻl2Dj»ĻjÓ±›¦xŒ’o4Ķf'“N¾¹²a“å €3Ķ}Ēįł4Œ>]GO²ī·üÖ'wĆĒ‰ŁŁÅšćQ‚óT°ÕmZ)įā æę`­Įöķ^…„£čŗXŽŽīI/yR ąŽ:ŌŲ–>'jļżÆieöµ¹µxK±FŹ©ąįæ3]—Į‰ß|įÆxkĀz¢É¤].ļ%Ÿ…ēų{֑ˆātzē€$_/üEāµł§døˆguø$ソ'önÕķü!q¬—±RĪ Ö‡ |µĘ3» Ļ\Sz+ĒČõm+I’„Ó\Ö­.”/nŅ_›œäWĘ_~ė? o§‰x“Bŗ>m­õ¤łmŸøē±¬Šrč}­ū$j?¼×¶śUĪ›įéįČ·ā, Čnøę›āčÓx“S–O ź,ٓːci>Ēčo["%'r¦±šį4ė`öѳ<1‰I•ųõē]¶‘­ßĶ}}8–XĀ”tĄ=>œVnfjēÓśÄYlt=2’AŌ“č瓉c©ē+¤~CšńĻ~Ń~4Ö­RŅź8dW‘¾ŠSĀūÜÖfŠšh?õūD–=2ö}(ngTWrO§„s^.ńv¹āiójķ,Öé>’ʬ3WģĖGeįÆĀ+äźi×é >E23 ōĒ„{§ÅƊv_t ·†¬Ņ}¢9RT*£=vØčE)SźĪ÷:/„»·³ÕaiÖā)ņ&'y$!Šä>*üŅÓJ“[Y¢µ²ŸĶ „9/8Čy(‘ĪyOĆ;ėćĮ¶5Ę« c'p÷>µķ–šwŠ“ˆ£µń‹4i#ķĪ2=9<ÖÖ%ög'ćk-BÓPŅ/l¶Ą¢t\"g>½½+Ū<ńŅŅĢé:Ģš#©ŽŽoµQŠöųņäĶy>™qż”§#²9Ā€:ļöāæ;¾%xźk߈ś¾µ ^]XƳ:°‚rŸ?ŻqÅ›śGˆīu];[ĘóŽOõ„ĒŽ5s[š.œ4>īĘā;måÖXcżsŪ­iІ®Ļ&×tk ]+ū&/ļšLn‘Éd?ÄνļĆ:Ī«£ˆ5ė »+·A).„sžzō«r°ŌO§¾ i<śojö“K ģ„u½ ćęš‡¼-«čŚ“,“1Žkeq½XqĶc&Y›š×ŚwÄmTXkŃŪÜŚĪ R‹„ܤc¶zq^-㿀+š’ÅZ„Vry “I4*~č Ī@ōéXU•˜ögŗųoÅ~°šds«<^#¶#ķMg\`}+ńĀ'ńö©ŽĆÆ]ĢŅBgņ$%‚sŲYĘ«øõ;Ož0oMa¤5攨ĮdFDķ’@ķŸJś*Ó⭇ޯ§µŒyźŅøÜ+{Öö¹”—C·ńĀ’ x“F·ŗ¼†]B $†źµ÷Ä׍Aą[Ķ {äń ©ss-€łŒķ{õ¢F 6źšĶ÷ƒ|\o“©$ŗŠ®īw8ڇŒÄ õŸųcDńV—§SEƒRŠ#ælć;‡^~•chÄų§öš—ƒŅE¾¶Š`šõŹ[¬Q¤Y "’xśōƃ5;S§^¬«9 …>ƒÖŖźjŽ›Wńlŗ–‡o§Iš˜¾óŖüŅqŽMt_>$ĮąO[ĮŖ\Ég”O ވ b@J邜guosiiØZÜ,ŠŹ7”<ŁŻē…,7cŒ™FĒ;G”|_ųegćŸI9øqŖZĘŁJīĄ@?Ņæ7.,㓸xO•Ł_¶ÖҲRÖĘōٹį½bēĮśž‹āK&’f²bģ€ćĢŒē•÷÷č.æxW懧“ńĻĖļ(d Ū÷ĻēųsRŁŻ~īĮæm ļÜxļöVńÖ¢0-ī‚.„ĖŁŹ©īæ”ŻJĀļN¹™7ŽāéŽTŠŠŠīꉣóšūS²ńVŠtkĀ‚ö“r¼=t‘ųNH5ė rś.ŚŽ'¶ÜÜī…†qžz ĀÖ`‘ü*ĮnbųeæŚ«Vńׅ“щ×GV²–°–§hŽ0僝@ķšü׬e“¹’)UįtźėS„ŗŸF’=? %”Ź»go=±LhŁÕ•Ž9=zŃ}•"‚=äõ’fÜīV@#'Š „Iµ³±AązŅ"l`čpŁģbigpN*Š.ĮX9Ś1ųÖ±‡szlæĪŁ‚!Ó#ƒ_¦_šI_ŪFėöż°|'¬_jö憲eŚd/Ż9ļ]‘zr]łe±‡mÄśÕFS’æ1—±=Å3¢hbe,}{ŅH6±@Ütā‚£+żÜ<Št;²ĢIj ‘yŌI.6¶zÖ­\Ū,¶²Ä!‘”Ø,2(;iŸÕü½ūm¤Ņų—ö6ų”¬%²\¹Ń^yyVć91œ{c½[ŗm”ś‚éZĪ£o-‡‹4ŚŚvSǺžpFŸĄrk ‘;OT»P)Jßdøåe9ŲjżØ–ĀĮ>ŌĘybS–XW –¤ŸČļü‡öyuKæŒ“Č¢Ó³ YKsm!¾ÓŚ@ß»\šz’ZöƒW!»×3l±Ū”XKŹ>”š7ŽÄuÜš€äĮŽĪ1ÅZµ³U»#gœV ¤Ž§ģĢ€JU¶wā³ui­n­žŃ­į™YH`Ɔ†¹źŌO‹¼mš‡GŅ5‹½OĆ:Œ+cµĖV©ś¦O6ģ?NŃEt»€‡›Æ=SŌn仙˜"£gµĄę~”•PŗEĖ1ĄLķ¹‡NŁ©ÅΉ.p1U –>ė†ŠŲ“Ō%Š"±—ŲZČŌ5½7K_µėSZEi§Ķ ö®Ŗu5Ōģ©¶~ŹžÉ’µ5ų]įķ/¶‚ŪN"Ż h<Ȥ\‚uĘ+…żŖ¼įo‰Ńźž<šņj:Ƨ–nĻĖ O@@ćÆjīi5cņL—+öXź•dżé7÷6~oė³·†4ėmj÷Į7:ÄzƒĒ¶ĪĀG2£7ŌōƜt7ĀśŠėžų‘½š×Ē0LZĪęt?e•”Ż–8Æ*½±śe:ģq·~ ’„[RÓģoµIšB<‰ĻÜøĮŚĆŒJ÷M2ž„TvOŗ{„yņ‹G×eųÅ8ŻRŪĒ G?ń}+ÕŚ4¼0•/¼ē qQĖsŅ©WCÕ¾ųIumj )¢Ė… yÅzGŠžŻxVčÉ™-œšÄco±­©SGĖfX›;µš;X4ķbéöś”3“œ$vĒękŪ5M:ČšĮ#X@Qü>ÕŪZh|E|[ę±Ęų—A“VŃīķysģ;Š×š|,Ņē¶ń\vz­±ø²`É!9:TĪ"Ž;Gv'Å?ƒś®‡ŖSI¶{ĶįL‰*Œ#ŖŸšÆ²ŗžŽöKkØ‹Ā¼`öśW$ūž¾ Ō®™õoĆ‚>,ųi)Š µœ»wAēdn8é]Ä_æhŸ„źž;šFæ©hŽ%ÓĪŽ[1²ąņĢpx­iEŚēē|SÅ9c”²ģZęRŃ®Ÿ3ėż7öēšOķ+įż+ąßķkš:ÓQ×fA„Üköė*ŹÄc2ĀFų³Ōķ$g8ōÆĀ’ŚĆž »ć…?5Fż˜ŪŞøF¼ƒEk³B„gdy8$zWM[Ō¼„¹ųoĀ\3œŹzœŲzŸ‚éóGĞń­eÆk ń¶ƒ¬ų?Ēŗ[y:†“ŖĄŠ]Bxłö62¤C0GØÆ@]Y%ŗeFĢ{±œš+ĒÄPiŁŸŁŁ6qN½(Õ¦ļuö÷[„a~pqZĖó²®ÕČ®FĒÖQ©}EŸlPĪŲł«^ęåY‡ī@=łĶsIōѵM (€zk±²łķFĮóŽ¹Ŗ¦ć<łŽÕĮō>õÅxūGŽ{M?SŠ%[¤™A rFFsõ­ ś ōftq"ÜīĘ1Ēē[LĮ°…Hlē­kLē®ĢėRhÖ+uؘ’Ŗ”8Ʀ’d?Œ^-ųE­Zx‹Ć>*×|;a¬:EØŲE3}žg’iOĖžqČļ^¦ŁÜüƒÅ,$1x?ŖOTŚg”žŅ²5ÆÅ­KÅ?üŃś sS­±ńcĖåŗ ‘ØsĪ8ķW«GU).k£Éõ]ėZ³$'r°#Žk SŅĀź«ß›=h¶;­'Y­c 2™ƒé\­äŃß^;ģCą*±õŠÜ±ŗņSĖS»×ڵ£Ģ  9 §"ߣóĻSéUīŚ+(Œ„_wZ™'Ōį ćPŌŚāXw)ėŽ¦—ā”Zo†§uW‹ĶB\püõź””įć$|ćįļ³_Ų»HöņFįÓkmŚß…~§ÉńGRÓ>é:ˆ>ĻqŧĶ<ŽåöōÆO .‡Éc*]\öOŁÄzUļ….ü%kp’&dēŒ’@?ē„}ƒąsXš6æk}įū™tĶRŽAqm*’0Ąä©Ēc_E†ž‡ÉęŌćRœ£-™żųCÄ^ż­ægŻkGæø‹ŹÖ4¹“^(Čg³©`¼rgŒjüš·‡n¼ā?üń6µm’ ‡õ tÉ%ķß‘Ļ^£Ż'”ü1ąÖäłöeĆņ½¢Ō£wöS²~²Œį÷yz÷ƒuŪt“Ėŗk蟆“<ÆźŽKĶ"ÓSæƒF•÷›UˆŃ½BōĶe~‡,"­ LżP’‚wŁ|.½ųqqćż3OÕå¾·{;yn‚°„æØ<`ć÷Æż²’f žübń^‘”ĮfßõdžŁŠv>ZŲ1żä$z+tö­œ/‚ę¹Ķ|,%Kū“×/ų¢Ūü®Pż˜ŻCŧO9bŖ»rƾ’šl:~?ųCćŁSö†ńÆĄO[J–vRÜč—]éņ6謞ūA śŠōK{‘p pJįŖĻč® Īć˜etqpwęŠ×ĻÆāt–ȪЬ=麜I.™q ƒ,\¤äg×*VŠś¹ģp‡W½šµķä2ŚŚ…&AĘįj̶‡_š\ųē£\“š ó칌 ̜ōqŲóŅŽcĪ­dĻØæhÆéŸ>iß¼ge’ ~‹Ü\¤1„ūLdüĮ€źśÕįńUę§ XßOk,*ĆqŹ{UµsĖ šœv³źs][ĀØī~f©§¼ń LĖ c~?Šœ`sā±1§NS›²Z¶üIe€Æ‘½Ŗ¢īˆ–NNqZö°°KCü®ń3Š„›ē5ń·¼[“|¢“_ēźŹ.ņE(tpyĒjæm.ĶÓcy&½hģ~u)śv āxībķ8+‘Ÿ”©/u ć*B±ē„t(ō0lšŹĀ2ļs“)<’Z·tŠ43 暞Cš”ĖŽFó Ē®:Ö;éW%Š³“Ļֈ£—¢“ūjĶ$óÅl[\);÷Ļ#ŠU˜6Z’éLøzÕ+Œ Į~qß„Kb„rīUY>DĻ­_·ˆł›WvzŠ MØŪŹeóWzƒó{RJŽ`Å0qĄęƒ9¾ƒmį[]Ģ2qśÕƼóp²Žž”Ó±™©IĄbeÜ;W+;K6vD«ēŗŪŻ8`Ą£ē½Y¶“‘dMń³ēŠ™05WM°…0„ńĒSRǤ\‰‘ R¼œ ;˜, KQęžļjīÉćZõ† ¼uń_]·šĒĀ’ Üų—Sr·[H¶“»?N:ńS)XŲ€’šN/ü9:Ož/Iďo “Gu„–:œóŸå_„öz[-•“ŚŲéŗL@,CĘ#@8P+ mNxM7@“h™øó±ņ“ļ]Ž‘ąŪXÜ^źŽ—ś¦ÜäŽįIĘąn¼¶\r‹×ŠĪÜsƒĄ?Jć/üK¦É+Ē£Ūo ›8?bEÆ<`ż±KŹ;Փw{,Ó^X-ŠŽ;@fŲ¦ˆ#WļĢäŌž‚¼ƒĒ9Ó|1z¶Ś5ż¶½Ŗ1ńźžb)ō'”ü*ć—Üų7öŒżµ¼šsJŗæųÉā8irīH“øęk6:y`ēÖæšoŚ£ž ŻńsāĢ~ųC·ĮßZS™ "åÓ–B_W¾FDd׌ŸĀ²›±Óõ?©Łž šöBƒJ¹]Mń§Ä…%īõ9ǘ<ĆĮžą’*ż7ŠÖm°™®ŠBŸv5PŖ¾Ą+†¤ĶÓźt6¬Ļ(¾ø­2ÖkņČGķžÕƒv ʾ}ĮV'łAč+źqīv ¾¦¹jLŽ3ęߌ4/č÷Z­åŹŹŃ#0XŲõóļĀļŚ_Å­4ė–7 gęPŒrr9ü«†s=PŠōMGÄń¤O"2F dø5į~,ų«m <ž\ń_LN28Ŗ„Ō·l|Æń/ć ¬V³ź:Ž«j‘¾@‰[ēQōƃ¼_ń.āēT¹žĢQ»rO¹ż+Ó§ Żń÷ˆõķCū'HÆ5/ĢŚŁĒ'‚N8čkŚžžĪ>%ÕĆRńEĢSŪ¶Ŗ0 ’?ĢV·č`Ł÷ƒ¾GįĖv³Ņt͉Ō!؜ć=>•ō§†¾Gcc”},(®qåó/½&Ģ%.ęĮ¢ŪIĀwĘ1^_āki¬iS=Ķ“G3Ä£;Ē·æZĻ—©“Ÿc×|3ā#]ŅSQ†ā(nƒ$Ly9ī+§“»iUžd­Zˆ3NŽ’Ż<ҳe$Ō³h:<¦ćyPq‘Ņ™<ŚŲē“Yļa¾ø¶gŻ?'*¾§=©†Ńć=qŠxžāƤų§MÓe·–ęy[kĘD|õaé_L¢éoʹÜzņŸųN__Ś\iķ>Hvc‚ߏå_=ųŠŹ’M¹šeYP•Ąć‘SČkŠń?x‡Qµóm„²ĆŸ›,85ĖųGʗ×ļqeā-"ø‰˜Å<żāēĄ÷r"ģz*x›Ć6I:źś¼:uųP` ÷f’džĘŗ’ÜŲk—öžMõŖdąl)>™éG)G«OØéśI6ņ˜#ĖX÷ük šęƤZ_ u=4ßi²+(’7ĘÓź=qéTgaÖöś&­­łix‹fN įļ\OÄļ‡Z&›s/•ØŲ_#¦į±÷éķLø†ŅĖ?cD@xļ]V‹xöŅFnŃ<æŗI^•”ŃRŲķuYmµQł|mŹ÷ĆÜĮ*…ę/ž=+3“ÓuĘœšL’bUÉĪӀ3ėŅ»}Qģe†RQĀpĆ ž©ÖG„ŽÜ6©[¤ĶĆķ¬ķnŚümDŻļĮÅĘ]„žÆmę\ZA4Ž8½'EÖ`:4šjvŃĻ#©t¦ šŁģ–ŚžģŁĀ֑»—;Iśž•źžOlb‘RįšGĪ>aļNķĶ©OWÓuéā-2ÉoŽŅ"ƒ{`ƒ^i{}-ÕĀ\č·L©!›\ē·µi ‹¹ėze¬¶)wóĒp¼‘ŒW®ųuŪ)'·ł[aCŌ㠜zqTK‘Ńxž'µÓM£¬l!W­x„”H—)<‘Ķ?##Š „.äņŲZŪZ«‰‘åö=+ϵļć½[ˆXˆŌžā†f¦toØÜ_CāK`LzUĖ*öža²lLIéQ™“.‰u£÷³, łp Ʃ֎§į;_±mīX» wĒ­YQ‘ēš…é1Ü5ŠUaŸ\ÖÄS5¼Éļ)éķYL§6u1ŚĀmŽX%‰Ée'••rŗu²¬ņ”V^NZĮĆR[,ź÷:N§¢ĒöFˆN gpł³ė\v‰¢Ų߉Ež£.į“ņõĪ8JšźL‘¹lÖvÆ$łź95Š“z{쑁׶:Ö°F#åŽŌ"0B09éRėZ~mķļ<čÉ'{ž5©,ó}O»µf™ GŹń·?­mĆ÷²éĶqĮ™|įĻĶ@$hč:••ļŲoŠGæ/·„UÖ-4ó},–²ļ‡>ŸŹœęµk Ń*°GqĀē­x’‰üO”x6“S•-Qø Ną*ešĘ6&šgŒt4-¦Ż³ÄŁ ä~…zM֓M ŠJŪö€GÆįB‹8ßXĻgk<śbo¹ī橬_Śk0µŚH—'–‹&Eć½]=4ŻI,hqŲ×5I>‡m4Ō~x“Uņ˜_4d–,9aģ{V~Ÿš).uI§Ŗ\Ȇ1ópøeŌļt–‡¤éæģP·‘/&YG—”`vÆK·ŅāŠī¾Ļ>‘oFĮ‰c;kjtŽzŲ†vx~×T¶^Yˆ’Ūć>Ÿąļi’Ļ6Ÿf y$/ŸZļ§ nyu*±/ķõx_ɍ–{^.ŽPzƒAøžĖN¹eŠIe·U®Ž].sœē†µ oÄw6Ńi÷ŠŖ1Ĭ…sųkŅ`“0ƑpøĻ#­\S ‰³²ƒ 85—}mę’c`ÆĢx¬  č\ŻĶŻÄöń: Ķhė–‘irČö‚{«pą Ž“ģN±,:…“‹Lrmū¹Éé^©éŗ¬—2MåHLĘiøŲj'EcwqA%UŚ0jõę­}ödŽd„ 8éɬ*šĘ6ŅœIp›å鵖¹ū2iŠ€L[¾ę:Šć–ĘrÜźü9`š(hõ ÷~^ bIśUŪČ HÖå<Ģó·½8² Ģū‘¬n ²9#vjŲéŗ:£\É2²õĻzč.ę&³f×HƧ«É¾qĪ*¦…ā/ųGu PÖźžd~hņ9ēÓ„2$Ļpo›„~ĻqrźBž†¼_Å~$¾S·‚$ū4®ĀG^Ą’"„ŠŒWCņĄbOOnt ĖmQbŒÉ Ć®W>Õ埼SįżkW±“Sci=‘ÜdUłTƒń⾂Nīē™ÉŠņ‰ž7Šeµ²»šĪ¦ś¾Ż‹# ĒĪNÅoxb}2QgØŻyƒP‰ĮM޾¢ł æ|Qwkö5{‡*ΤąĄÉ¼wIń?Šåń-ض‰„GmĮAĘŽG'Ś™6>éšėZ±‰ĮŻA`’Äq^ŸćßY[|7šŪD½Ž×S‰J2žµŽīséŠb“ZXĘqgʐYŲųŖF»eŽ}­µü¼ ·¾+Ż<+šæNŌ-`ø·‚Kr¤"Ā˜{ÖR¾ĆŒ»˜_<;ćO„Ž›ā-'M–’J<³“,)üÖoĆOŚ_Rńą¹š÷ˆ”“šŻÜ*ļ ‚FęćÆsŪtĻź?šƒŲėŚeœš…ĘŅJ…'ĶøķėłW—ų—JæKuŌÆlŚfłˆ|§šōŖŌNG7š+ĘŗŸ†¼{wŖĪ÷inģmnryt Ó¹Æ„>6|f·Ń|"¼Ęōj čńrbėĻ­jSW>>ųw®j3ßOosomw¤¢—$3g<ö×|IŠķµ+}=<§^Ż“÷ØŲ‰ō±Å2Ņ9Żįī©q¤I+X™5%‚H8ŒŽõč~Õn|$a„\e\ 8 ģĖz ³Ł„²Óå“’„€Om<ļž¼¹Üõą’¾xu¬%ńV—©$WŽrÖ„žYńpQJę2g‰é:‹'‡üY&¾-ŽF‹e¢3e÷ś‚:b¼cDƒ[Ń5 ³]äK„PÄł€É?LÕ©^§é/Į\jz_‹4«ÖŠZ ‹4C#yg>õķŚŸ‚<-ą›½?Ć)gžT¬ąīqÉöéI³EŲ«įļ„3’kź:Ɔõ8#7#2mˆ=9ļŸÖ³~ xā.›«xÓĆß<4°iÓĖęŚĻ+oC†å@=įRĘŚ>ƒńÖ½}įØķ'Ņō:źÖ(E©Ę7,xĒŹ1ÉÆĻļŠž×<1ńI×ćŌ&²Ń5XĆ¦Žžbœģ|ō$f„ŗ‡2;Ķ[āōZFœ§[µZyC1š1Ü×ĻŗĶÕ¬:½ōŚ$Ó¦Ÿpū•X‚@<H„(ŠÖgi5ÅŖĆkq,6łĻīŪó£ńƒ{oģ3¼—ćžY r±Żü,šd~*ŗ¼³+e-ĢQ™[qįGZX“kyu»Ķ2žŁķ|—+ ī_QZ)‰Ģģ>ƦGÆŻčÆ ’gʆ Ę>H’¼=;s^ƒį}µ® Ž[8ę1Ę ‡į֔ɓ{³Žģ<3sįi-®By2ȃ©ćJć’i/éŗ7…cšÕ­¢źÜĄ³7•&L•äć¶zĀ®/ ł¾ü-Õ,üMįļŻ<ėc @Ąv=Cv8Å~Ük~ń­¶sco¶6Sę}é[|ÄÕ—Ė©ĄüB𾁤č—³Ł+\—  ŻżqłWē|+ā»ĻK£Ų©O³I¾ĘćzóŒTFįŌ÷/ü'ńˆ<#čŚ…ĪpƒA'‚qžzׄxÓą>·šķ⼿բŗ·łęu@|ž ÕŒēt‹œ\¤qÓ©ĢwÜezŽGCҾŗŌ¼C xĪÓYi¤{G’ Č鎇"²å³7Ōtįõ=^-KPGe’ 9ģ=:Րéžem ‡¹‚óN†{MŁ’6ŪĪké;Ķ+ĆÓx;MÖ¬£_ģòmą•|g·oš”™m±ł½ūJü3ųy®Ü]ųvÖŪÅ^†āĻ–™äķĒłęæ:ƒūC|šʏ ÜÅ{„ėZ|2HUƒyrmädučF}A©q÷nlz†ä`ōØfŻŽŠ„Ųõ4Ó°r’¤Ø£wd~µb9CģM„qŚ“Œ#ńa]0p;sõ„æ³žŌ³øÓܼGļ#!Ć ƒŲäTŹG]#ūĄ’ƒ}æą Væ“gģÅwš7Ēž):ŸĘ_‡Īm%[©1q}§õRņūWä$usĖd’@•ć¢MÖr/'·5Ķ]\čG›k6 umqe4yełāöa_ü~ųb–Źßō¹„ż‹ÄpĘŲv²¢m½ńßń‚¼ę¬RzXüąųךš_ų#Ä~ Öl¢žŅ¶†MSBøAĘ”hć-ś3DZÆćūć×ĀēųQń?ĚE½“öZUŌŽ}Ŗ²üØOŽAųÖōLfś+4l˜Xž•\9PG– ē®čģrKpDŚŪČŹnō‰‰Yņ7dt#„Qœ‘J}ūJĘ3nõ rnVó>ųé@¹ £dhŪržó·µ,mCO›?{ŠiÉüĶ™C’< ½ 1f󣌎h;©3®ųń]ų!ńCĄü%q4®‰}Ó¤/µ¦‡ ‘‘éŒāæŅÆö=ż­<1ūFüųkńŪKšßQ³Ō­bÓõČa}ķ ˜9”sžƒoÖ³šŠė¾‡Łž‹TŠu;ķśXÆ“œO¤ÜĖ,l3±¾§ÓžĪžk˜Ł%µhŁ"w®*ؓÄ?hO€ŗ_ĒÆ‚¾1ų]ØĶ 7·Q›­åĒ:}ņŃHPpqü,޵žqß¶ēĄ}gą'ĘĖĶ.óI½Ń­µ gūTG°j(äMōüĄ÷5ĪŠ2hž/Õ,ģŽ‚.cø“™æxLcė^“į;ē†`­+o“†Č¬,3µń„Æõ=*ļ\²²ˆ¤—S÷°9ĄÆš¶æ<:“ź²Z±ł ĒJ™¬V–=‚ö+mfåō½MWū!ø7'šū;įo‰ō9t8>¤Šźv@IƒĘt#õ«NÄ:g”;²ƒµ‹(8éZšSĒ»'³×+ŖœĪY@čƒK+]Ę7{UŲą|nV(hf£Ø[CėēˆoQŽ©YŻŗŗ‹‚›AéOœū,=˜ÜDŃŒQĻ^+åļŚWuMĆbÜ[ŽÜ#|<щĻDŸTć$ķŅŽ¦†œŚ®Æ¤iśŽÆØ8. †2ķ“rO«ŹnüGż«Ŗ\ŚŖµ½õ¤Ę)mÜ‘8ĮSĶym[Sś®>? ōWĀ ^ņÖń¤ØųV?Ā3_cj¶rųÓƁKŽd kJGŹęx„܃į6‰w¦iś­…ż¬…Üm9謂?/Ö½NŪLø@ Ø=«¾ ųŖų„Ģõ:EŅ’{V|!=ƞ¤»Õ¼ćū;䷉ķŚ`Å$åXg„D•“9iT»hė¼OńBĒCŌ#ҵųµģ+¹<ķŠĄˆąjō‡_~|Nė½yļķ\\K ³Æ©°Īk†„E±įf8üF ų…uć/ xĒĆćĮ>:“¶ q5¬„p„ŪO;pF9®Č×Ņčś~×±”čÉßɟlÆģŸšOž 1ū+hž.¶Ō¬~~ŪŽ¶ū#k–pˆĢŽ:%Ād¶ä޾[1Ą ²æóWńįĒoŲßāå’Į_ڃĀrųcÄūó¦jń‚tż~ąIæw'Ž8ē‚ȶr戦±qųž’Zom’ķķöŽśŸgįgVĄē•øcķ(ÉøtŗzŁ~[&ƒ­[Ķ M Ńŗ· ō>ÕčŚT«0g#ÆzųśČžĢĄVŅĢ©©]īŗh@8ļQĮ!HE-ž¦¹ečé ”cĮÉ|õ©ą¹dP©øēN*ĒQ“»”!ÅQŌŹĶcq£+”ć„2dģyµ¢Ė’Iāŗ¹}‰/݇ē·£F¢Gē¹žÖgō{ūxĻį/ÅĻŁēĘ~'ńÅĪ’lÆ,¤³žĀi½«*Å³ÓÆė_ĻdÖ:^āæYųPMq ®±t–fSóyB'½oQ¦‘óY:°ĘVSVŠå·žšž‰£EØj³Śé¶6SźŒņ,QCÉw<_kų'öų”āoų£^ńOŠtŸėVŠ™,“ƒ »É…Ż™GéYĆv}^7;…]Ÿ,Ž|2Ö~ĆØé&½h$ˆłO÷›łs_ÓģŁū’Į6æh_Ł«Įž!šwĄÆų«ĒZŸ jö”ž ™ļÖ?ž;¬rūŽā‚ ÜW„„ĮžV·?ž¾¼oœe¹L1™LÜygfæ•ß+Łz“~E~ݱļģ§š#ć/ƍOĀśn»š’Ą,²–/±ZĪÉ›~‡‘±ŗpG·E|cā’Ł£Ę~ ’OŠ5ż+Äž”ļ“™ŽĮä śwÅcS Æ”÷~ńv+6ȰųģS¼äšoæ,œoųjr¾¼ųѧ^x‡AŃ>kŽ šŚÉÆ5 x„Å-ŌżüĻįĶvŽ ż²4h4‹ųf-CŹņ½ėģv©ecßN•²±ś®0R“§yj×[;Łžī,蚭¶©ŗAo žēŻå÷sŲWWwims”$M°sš™$zōė¶x÷ˆ<1†š{YŽ&c¹ }+†M+UµĘŠŲۚę3xÕŌÆoys“rņ¹É®ÓNŌć’HćRUń×5ĪՎøŌ:å”x~¢¹_ź+¾ŽŽ2ÅvŁģi4‘CO“/µŠlóX’Uī|cæ›dĢå `žtŅ< t“gĖööM§_éŃ\,±)`źĢ;gżkļO‰V‘Y|.š²[²_ā4ˆŒ +€ŲžußJ6>®-Y«õ6’gßĶįMwNŗ€*Y†ĖĀŻ7QüėõæĆŗ–±m¦ŽDcŲź Śs·Ś½Ü+±āāŖ6}išć}ļĄ®±k"]x>łć‹Vµ'®qęF\ē?εą¦_ō­Ē^ż£| †ĖĈ®ŠŒ,“Ŗ‚|c‚ÉĮ=I\šõŠžać ³ź<]‚Ģé{«§J¦Öv\Šł¶·ķ»žšóĘ?Ūi±ŌŚö>±źg|Qšdž%±Ć vć(=ZŹ¢?UĖ«ŗ8ˆĶl|ā? ėz$ļotžežć‡QÓė\ ANÅäO¹¶gī˜Ld'8žķššßÄŚN±eāO ܼ÷Ņ©’&Nõ÷ķań_Cń‡‚¾Žź:Uģ~)²F°‘°N芾¼‚kXTVŌüļ‹ņˆbq˜|L~*mżĢųĆ#>ńe¦³§K,Ężcr¤{āæ[’dÆŚEų«x“k+ż« ė —‘; Žj)P܎r=sG2>/Åy¶]RŒ>6“õM?Šų#ž £š×XųšĮß¶ƒļlµ”įė¶³“ģē.–M.ĆĒķ8ėČČõÆĖĻėÉ«Am7–IH2x&źų{ÆųJh¤–)­ĪĘ%Hēƒź0jO x“E—ĮGK½ŅŽ›®C!U1ReĻSW÷0•;jCohnže®I„hł°ŚƒĒõÆF„o©ųŅ‹_“K Mžņ·»ēĖÕžŸ3Ž<ć”Ļ­ūiIp>n™Æf”,œU[re»}>;‰^0Ąprzõ©-t‡YY"+ŸųwĒc’Mõ4ģtÖ2•ŚUTóéI«‘lń– Ž•¢™,ŸO¼„lAVĒcYZĉėp 94łĪi²[r€yo_ZŅßFiÖ8­(£žOC?1ŹX…ʑީKl‘0ta°öÅj`29FĪqƒŽjܐ‰ĄF8 ŹR¹j-¹ĒJÖ·¶n^Oj*¼© ¾—ėYM<Ź~UsœśŠc-ĘAā,ĢƧzʟWüˆ { "·ŽāaL™5Óiŗw”¢IĮąīĘ(åćŚĢ@Xדt+(®ÜFP(n™2…m¤ZĄ#U‹.įVībŽ)ml¬4É5=^y-mćÜóHz.;f£śš#ž ·ćM¤ų³ö€‚ūĮ^‘ƒĆ¤ZĖūŁ—?vb:g„~ĆųįGƒ>iÖžųm¢GįŻ(ü­üy³.?‰ŗŌßŪ^Yéė½œ2OxŁ‘Vlü7}ÆÜÕļ&†8ŪrČWóĒņ¤¾”„jAq§i)”»HŽį—p+CńV©¤Ū.›Æ%¾©­Ēņ¼ÖčT?¾qłŌJ]€¹«é«āŪc5ā’£“ ē>ÄW'©-Ö§¦K„hŃK¢øżŲø7)õā²Ī™¦&ƒµ¶«yuŖÜĪąe›Ōąb¼Ūāõ’‡¼%–½®=üWq1x ‹vę»AēńŖ1¹QĻ‘~'ü}¹ŗšnÆqći>ųt‘&>bĒ3Fń 'ėōÆēæö”’‚¹h}Wį÷ģÉ£j÷fßķ™dĢQ6ޘźzšģ£NģŁ#š‡ā/Ä?üWń-nj¾'xš’Ş"lóf‘°ƒ'Fxė\P‚p6d䁎½ŠP²0«;ē"\ź«#JÄ)_›ŒSr<Ś“%#„qźqOŠ<²©Č9Ö§ģ±ņĢc!³Å\··ó_j©9ąąTJW2[ ½”Ņ#Ü}w7>™Æ”~~Ļ?’hļé¾ų3šóY×̲ˆ§¾xŠCm“äōĒ|ŌJV:!śżæą… ~Łi~2ż§/­|wćxŸĪ‹MߘS<Œ/©ōÆÜæxW@šm”xCÓ¼'įØSĖK[thõĪ?•pŌØtE‡bˆ}©c³"LŹwĒž‡µsEųć6Ą®uŌzŠÉ¾ŗTq’@=ĒjĀr#ŌĒøŌ%¦CīMyGŽJÕ|U}ā½^Ųźo ;6cA×8ÆJ±ųā_ŧŽĒy¶ˆĢKłL ø”ō…uKM >½ųmš³LŅ”.,"žųĘK±I8ü+čoųBHÜeŪČP1P×Cī{/†¬d·!Tua€jģu“C…Õ’<`ŅQ±ŹūF”j÷šĶiø”a·wZš+’‡¾#ŅõĒö„+‚B1;”’…¦‘¶Ę†ƒą©tĶAuKmBį«ÄŹĒéžō•¬iö¶@Źy8Ü;ÓB–» ¼ÖRoųōŚĆ?ĆĮ©­µ){yS Ē8§c6‡»] ¤æ+ØŪä@2Ä{séQx¦ūJ¾Hī4‹iķce•›vzr9?FšŃœ_Żé‹&ÆüŽŠńÓ­uP%Äé&!(qÅ!)÷2§šX!žŠįK}ÖĘÆńG‚/„ūF¢×R?6t浑©cÅÆ>Ļćib± mŲ3ķȵć)š›Å>ŌŻ5BčäīNC!•”Ģ„¹m4ұG0˜…ĮHļTķ4ų§ø1Ķ"žr …ęEĢ{’ Y=ŌÓYGå»XÉ®|¬$“ŚĪčväzӓS³ŽöݤP²B¼ńWē—Q` Ü TČóĶI\Ģ÷ xŗmD½Šn#µøŠäŽ²dŒzę59 I2Ž1טs3‰»¼‚IJ¢0uõ§Į=±ŽX£|ŽsŠrwč·z†¹¦išjŠ$eXYņ§×ޕ㗗/«Ž3Ķ,‰;’Īzī9źM :żkMÓ욄į¹gÜQ°č K¦xŅßEŌ–[yŒJß!Śx"¶˜ā=[IÕ“x®“S+t™ĮÆ?Ō|E=ķ“6²ĪnK…Ü~ąō¦Dö8±xRe&Põ_ZµtŠ6¶Wßҳ›1&Óķ`Ū3‰ž@8ĒjيéÄ.„ƀÕ\“Óń ŗVÜäüĄõ«ö†?µ eF‹#‚kq§cÄvi-īųVŽaĄ^¦³`ŃRī|˜ā³™¢©ÜēÆbKbóĀÄæM§°¬©nŽī†KveüŻ«1óheG%²);U8ą÷­k=KOˆģ‘Rˆˆ «CBiģŁh29Č5~(Ap—AŌąl?ĆļZĮXĻ•’\ĻŗŽ2&$u^ ūW/s©jqĀĘčĻ5ø?\„Y žŃYķćQ R2yhƒVžĖŪ8 ցœlŚ…ČŌ'žēĶˆĮ#åü+{ūEŻ]¢y Ę6Š1<ÓpŖĪ†¹ĘįŠó/xSEńCŪ’kéö÷qFzģł€ö5.v6l‹Ć> Ńü9®ŽÆjʧ`ź9ÆSŃ­u"Š»(œU˜ž†§Śó‰«č׋‰Œ*NyĻ¢ĘėO‚Żć0Ąœ3 śPę.f^[IīĒ›ń,“·¦qY2ŻHaŪ†Ī>ZĢLÆ4žc¬nwqŠVōś%©·Žq2–eų„a­š8W)å†ÉćÖ£ŗf½TFƒ$īé8£X6w!Š.ßģuo]čūrj§p–ž"K³©¬’ĻžwrXÖ‰¼fqŗījˆˆa’$B6ąõŸaį‹÷Hg“Cź;ĘE™q3 `÷±ZʝŒjK”ŽéwĶØY­‹Y,CåpŻMP•“O˜Ew² NgščŽē$·4rK±ķ_(FOŸg}zŅŪfŲFNyP üOņ­‰;dÓäÓ¬šź TcŒącšČ»Tøżė Žž†ƒ9LāõR"2 ić–LüŸZĆ“ÕL©o?ŹH`€ēš8 ØŹę„'’Žxg¶ ±†ĒĢ?˜­łµ–·"o5giæOJĄ‰®„čķÆed–D’Ūćļg>µ”«%„ÓÄŠœc‚{ŠØīfՍy®4BÅŲ™ŪŒ‚+cĆQY\\[[IsåZ}Öbrl+®§e„Z@žD‘ķĘƒÉ5ē±X[}ŖIo$P~\œ‘ļUŹ÷ŠĪ„öH’(£yWv S«ķXÖķ§ Rē‘ž¢¤é§ń;ąn”gį=(ų†’[ÓŲ„GɲB{mQY×_ ķ5ļųHnÆņā ēw„F£1³słwÆ~GĢŖģó-gą§ą{m;W¶kÉ4ł-ē +œ÷ō4f ī-žŹRŽī0nząqJ2¾†°¬fŲč÷zē‹bĪĢąŒē>˜”¢$ō><ńwŒÕ–KP$øŠ9Ż<^ońKTÓüwą ō ķ–KŪvŪLęR:‚{t)•čĻ“$“]^Ę;BĪ>QŽŻ±Z–uVHU")Ą~G!O§įA¶«C×tO é:vœ¶×E„Į~IqŠ’“+žńW‡PéR&a¹¶›)”ģ„g(ŃéŸ³Ē‡4}Ā’T½œŚų‚å?ņ8õü2+/ć” ų{ĆW:źY¼Z·˜cW^U—ÜuźEfĒŸ=xg[ŗÖÓ öW„ģu Æ?Ö¾ųrŗ×‡üGiؾ¦ZŚĘr›FŠ6>¾ÓßÅšIdåY°?)ō÷Ɩuoų§ĶÖµéÅ.V#°DqZqÜ\Ē›æÄ«ŻWŃü?#źm R‘†ĀØ'ŸĒ­}™š§ÄŚ>”gg=Śig Ü2°’õ×BĆ™æµ]Š¾čś4»Ė=GĮĶ"}”[–U#ŽüŽ•ą~ń焵ģķSPIu+)‰‰ cOåõ¬ļøÓ>ųK«Łčm©^iqĮØE8)äHrwą}+Īæikh|J-ŠZ-«]Fѕ·įb¾ŸżzĶĶ‘&|]ąß…W7¾ :M„Ä1ø bß'-…č}jƁ|eįo‡ ¾šŒę›O2FŽåS+nʼnž§ŠøŹģ‹©ÆĖcć[8ķté öčJ¬Œp2{ž•ęŸ>éž&Õu/‡zˆ-ō«±1Š$—9—'†ńŖĘ£Ō÷ŪO‚מ#é6Z†qØi-#,ņmŽ«œäńĻó®'ćHŃģüArśtvö0H €‡…?NßJ›Y ›é“żFāāÅ͌åĢ‹2™ßßŌWŠ|izŗ>¢ś¾Ÿk{w*ybI£ Ēr’jŗ¹Iė Õ"ūئҀ¾µßLę©k•ŲĪ>ó™įGzS$įŌ,{>\zŠĢsĘ;XSDqģbX3“ĒJlQ$c›<‘ޤ1…ŗ@ŠÅ™Wh#>õa%V³Vągڃ¦ź='ffŁJƦīŒ}ėś2’ƒ~æmoųV_5?ŁSāTöŸšŠkĘCa+¾Ą²œ#t×µ'±×NGö_¤źŚüžÖ4/“¤ž(ИOmå‚~ŁlNå#ź1łŸJöm7]¶øÓō­o ¶÷h”÷ś7§5ĖQXŌ¼I,Ö·p0‘æœ/ų.‡ģ]’ φ?įnų7J‡É×JZjĪSäÓõ$\Ćq>_4)‰r«żīxĄž* “¹¶{½Q±nÆi+[Ü@zÅ"±~bŗŻźėOH’t/ ·Żج¦Š= xŅīÓĀņ@ęĄČŃÄOHÉēšÆœ“\IŖĶ ōqĘŪš]:qXN=Jƒč{E¬é©€$%™†Ģ‚H§į‹ßü?ń6Ÿ«ŲéķB7 \īó‘sōļQbŁśI|–÷šž»„Č.­®ąGvQ²cęZ‚Šŗ@²…lõ®ŖlåØY›U–Łę`Ē &Ļ#Ö“FŠ—FC§ŽßŲźŗe݇”gIƒ0~˜ļų×Ö^'Ó#ų³ą[»s Zw‹•ģ÷ ĘģńŖ,ųŗ?ėö³ĶoŖŲ\ŁĖ †6ŽŽėģk¤ÓmŅŽćÉÜ̼žŌ£Üō%ƒD[Yğh#ƒņzű¼’GóXgҐXģ —ķ( {Uˆ/R7’ĪémXgØĶ5ėņó0‡—,;×,Ņ6õu'åS=`_mUdĻĖĻ9„µ¶“Qr۟Æ>žÕ‰ÓŽŌK.› ĪŹĖ6ą f¦µŌ¬nAQõšĘ©źP£s‘Õž2ųæZ󆧫4)]€üø®JѼOć-Fm7OŽī5dĻ喁3U,ڶ’J½Ö3ƒ"€2{“ļ^eIŁXņqõåĪż _öVńŽ8Ó¼ā­/]G@mįłsńŌ1õ­o…÷‹¼ā-KĮ9Ń.ō;Ÿ1V»ÄW:›Ųųƈ#Gé×Āż#įüѼ>)‚¢2·žY^+•Ō<„¾„xŚ4ķ5Ŗ»mēpÆ[+ŸŽÆ3ęŲåntIģdrѲÄÜätØnžĖā}Qń DAeµĆ0Īńž•“įsßĀfź×gČ?tŲµżö’āßP“ŹWz{s\ļĮ?źß |kmć‹;{¶¶·&öĻ Ė/| žÆ NĢūŠT)b°s”Si&¾õf~øi^4ŗÕ“+ųā¾ŅēO4Ł9Ąą+’_ń®ūĀßü=ćŪs•iØi—š—¶wcC'qÓüžµÉĢęy|šŲ‰įē¼Oäģvčis²xóä|ÄšæZüż¹ą~*ź:¬–šœ@]yaq¾6ČÜ;b» żÓī¼%×=„)é,į’f_ž-żŸ|a~jcIŌž#ĢR Ć0õečĀæhtKߣóž ;ū?xÓąOķą« üXц幷ŒyÖrˆļ¬%a 4yļÜ=¼²ŗÖŒß»=čžOš¹źż#ø ¶—ŠņłrÖ ć”—,—šm^ś[Ó_äļćWģgń×ö4ż ļ’fƉŪßŁÉŗēĆ> P~Ļ®Łg†é(ćr“sŪ uŸĆzǃķ. Ō’HēLīܽy8Ģ,©ÉĀJĶÓų‡‡Ī²ŚÄķ*‘Õv’ŅKäÓ<ŽĒWžŃŌ.'<…r¹ĻP?śõčöb6S"c$ הĻŪpÕī®iĶ"4q—‹…䕟 ōü=Ó,ü%ą’ˆÖVöŅął7öRć|O¼øē^ÕqбުÜā[`+ž?:ęžŌJÖÖ÷@ ŻČśšŚ›g‹Vœ[4|7sØxY/-t+Ė*Ź`DŠĄåLŽź8¬½Į·~/ń„¼)¦jÖ~‹TÕ ²žžtܶQČŲi1=ĶuAžUzi&Ņ?Pßöų•ū8B9xĮ ų…r²żƒ_·ņōķBA(ŃÜ ѓ²e[ƒœV4굋9|w£›ąšŠĪņ95Z“^WŗÓ³Õ;»j“?ŸŚ3ögųµūųā x§\°ų£š½ļžßFń^žą™-ń˜žŃIV#Œä÷庚:Š-®t±$3‡ »x9ĶrT+³?pš’‹)ēYe,t,š\ŃfI+Æņņó"҄׬Čģ%MŁĘ+¢].bMķĘk'©÷g:ž Ó.'».~lē}ļa\~£į)ąĢ–āT ×éQ( UdšV¤±Gqoq#G*”jóżGPg½’īųn©®gF­ĪĖH“ČE}ݹ­Ą5 ėś{,nn !3ü,;’:Öó±zĀHņ˜t{Ÿ|š’‰ œrź–&kÜ œ€[Ū9껇Z”~.šŒšN¢wńFb 9<ž?Ö½Zp?ƎµY«ķ&\Š!¹šżĀXļ}ØvŻxé_o|!ų«§2YO80Ø+7»Ø»G ~ŅŃ÷/…|W§ų‹LAÅ«ü’Ʀkģo‰ßõ’‰_³]ŸĆ+ūmRm&ęÖāÖ÷ļBpŖĄ÷ć>œW§NwŠüē‹ųnŽ3ŁJŗÖ”ć8łJ;~ Ÿ%ų9mdÕD‘Ź-īIQĘkŲõKQŅŚ5š&’ß”>•mœ“ąŌµ0Š ™µß]YĻlĖ­ eYŗdc§CĮ®:Œżī™ÜčņMf’I:y‹ņķ=« \–;ėǘŻŠ5ŒoŌ©EX³įųm­üČå$G+|ŽÕŅÉ [[\ˆ“ėƒqn~mĒ®}+¦;³ĢĘW8óOduQŪCmnR"Uˆę°¾Ēūē‘ŪēéŸjöčSģš^0ń—öŽmR¤īįīĒŃ=žz³J+#…w~ÓŚiS ˆĄöÆJš?ÄI%dkĒ„Gn‹‡?­5m&yĒGgŗ#+hyMõ; 7NŽ(Ÿlœ“ŽEpz彫ŻĻ°’ `qZ˜ŹCm4ų"ņČpĶ×­Ś|7n’<:š fW–ĢA±ŒzzTLŠq“ēłÖg5A¦Ų®ęL²÷ÅV¹Ų±óŲֆF2±‹?.iÖ×lnJå¶ś‘ĶGkg , +ƒĮć„kJ-¤¤‚TŻéé@ŚF»ß8cÉÅg›ąŹ_Žć@œG錩ŖµĮ·…‚rŻž•ŃZxś(×ķ+ŗLdö „@ź4ƒe$-ŗąž7ŒēéPĖ`P“Nެå>ĀtlU‹HŽåµuÖ––ÖęY¶[ąķ\rXśÜÖfR‡cź/ƒ_²ßĘް<śfž š‡˜źś‚gē’ŠqŽ;ū×ė’Į/Ł+į7ĄŻ.+o éxÅ2H'ŗÕµß9—ž™ē ŠAö-Ø|M}¬Ż Ū“Č\ēō«ri“ų²ŹO¦Ūēļ©Į"‚$ΊĆIÓ<<‘Į,ǬŒ2IśÕd„iś“ßÜ^–‰ś ć…óė7“^ h$–ŽՀķ\„:®š©*é„õöā²?÷O„acH»–ōéģ%øvK†F:W9ŖųŅ×O“øŗńöŸ éé–ó¤;wc°õ4ŠŠ¹ń‡Ž’j/xŠĻRŠžiķ”iĶÖ¹~ €£ų¢×§ėņƒöœ’‚ü:ųA”K”Žėś‡ÄlgYbbė^Äą/Z駇DaŠžtæi/Śßā—ķ%Øł¾1ń6”k¦#·ÓįŹD‘öWįŽ |•ĻŁ×lQĮŃS×­FŒŖT±AäóK9Ļ·„DūŁ£`ß(O딳ͫTrÆN¤*yP: Ü#5‰ĢŁv+dĮu'wB=*āYM)Yr8ćč)ѧo¦«ae*ŖN9=ėµš?„uÆx™|ą/ ėŽ0ńl’,ŪŲŪ—±čĢGR“±q‰żžÄ’šBų×ū'āGķo|ŗ…Ö$x4NÖsßĶć$Ÿjž’>üųIšĆ¼¤xKMUn#ˆ _ĻQų“\UjŅ†HŻ„™äšė©$ņMC£©Ķ#łģ±ĄŹ£ø®Vś³NRķ”óĢA™ąśfŗ(µ$Tźž‡k)H9Q,Ļŗź~^žÕęš÷ˆ–ū&…Ž6ä5a7ŠÖźxw§y!md>nFīkåĻxń ›Ļ»0ķĻŹĒŸĀ¹åNēdU˜§ęés]źd¤~ģ7ĶĻQķA²höo ČĀ–īSēcõŌJг²‹”9<ŠDŲF’6߄޵n=?Ė…•ĪčŽyī“JF*KœžZ܇\ż×Ź»±āaÓŠF‘ø0'­gŖŹ5Y­O•ĻŻžķ'ŸēY5„Äk #a$P4yUēƒk9§ĪI#=ŖĒ…¼.šµģ–·SűŪūćĮ Üō#¢Ż^G Äm Če`Šę­µitŪ¹×O“Ė‘ÜØ1ø{Šdót9}{MÓ|QēA«Į÷|¤ Īkå|1ӣ֐ŁĮ¤‘Ėŗ96ĄśŠm÷=sJ²Ō!Žo1Ø"¶­­5īĻŪbc8(Ėüc)åŠöĶ6Ķ—IŠdu;”db¹iĆŚŻIČUĻĖÅ'.¦&uåĶÅ“dą˜óųf¹eÖŅYĢnV[nāi˜¼ģĘÉ#óžAĪk]6x/„*Ēķr3ĮĘiņ²"]Ō“mLZ‰bŒłˆpry5›kB'TYW‚÷JĖ:}{Q:ĮØĻ——ꫜÜb\F¶°ŹĢ8o»IÄ;UŅ®­.”†p0w!Ķ[·dˆŗ&?€*]^O{Cc;żŸ8 ž*厒öö--ĆŪHĢq€~e ¤ūšvž°ń H“\¤ G Šóhė£j&ÉäibF]NAüEZ˜äŃ2Ļ#Bc•Ł”cڬy€%ó!ZÆhg%r£l•U bE{š†Hē’5‘ŌŒsėYģĻIšę›öH§†+½ŹG͚ĮøŌ|»©R4Ś€ąŠ ±ŅAŖī…Lq”!{wõ=Ā37qėO˜ÉÄĀ[Äk––bķ _jė¬õ‹-AV•āU!NWŠIĢų’ŅÕog[I·Āå'ø®~ŽäF $héō¤³Ås;īŽ#s“Ž•_RŠ]ń%™ŽVUÉķ¶µŒMąīq:…–¢Øeå”Ō×=”ė?,o&³Ö.,otR–Č1 ēĆ”āŸ27åG[i¬ŻĮpāš²BĒåē„tŅßBŃn3‚¼ SĪsԊča“)•w|Ü »2Ź ³s˜Ž’8ˆī{gsM¶ņåY% ¦x\QĶ}ī.-ķ'“m‘ÄF:Ņ¼Ńķ¦h·łļŽ””¤Ė—:SY@%d#ŒŽ)t»÷ó#esČ"²”]Ävź¶×“FĪ}}+™»Ó-„µcGĆg郞ā9ĆŖÜY'Ł6Ė¹ĒŻéMeuuŗN=*€²³ 6ŖØŻŠę­Iq"Ä`’hĢCėЧ¦Ņ٠ÁŠœji•Mņąüč4Œ»šŗ†„jö±E‰˜Į®~Ō¼N|č<“nėI¤h˜ķJņ³: XfučÄs\…µö¤Ė²9!Ü~L`SĖ7­s=¢4ĒN{śÖUŒ:Ę «cÜsņ@õ•Jż×BgеåŗĶbwõÅ/Šēѵ¹”š;h ¹Œއ$gą(!ĀKā+ 1ūJ“ ³LÄa½[Ӝš‰G©Q<ÆR‡PŃuV·…Zęåy9­tŪ’¾UŌ-µ¾l7lÖM§s:ūĀ—.ĖäĢoŠ™Ø'šåƟ Ė3«¶Ą¬ż˜4ā y}Ą9Ē@+Į>$x—U³ņdÓżļ·†Į}kjtõ0ØģGšĻSÖ.åXõ»‰.ŹŹŒ0½³_J[A› ’&WV?ĆÜÖĘq‘ “žÕøŽIļ'‡Ėžį4³B†QlXü½ó’•$Nŗ^Ÿr’é!ŗv5„«£hŗ“aUę$ƒ·Ś…N䏵ę›ĘüQamjśV«åµĖ#,K'Ķ=}ŗWŌõŸ"WfŸWHoˆ|!.ŸÆ,)©]YæŹ1œsÅzˆ>'Œ¾Ł?QŅåń<$ÜEę9S!įBśš:#±“6>)š޼qš—űjŗl.€¾µ˜Ÿ, l6Gžµ~¬éž?š/Œ4”ŌžŃ§Ż-Ģk–ńa“œśÓ”MóļÄm7NšÓł–3Ūy21d]įŠē $W’Y®„£“ž*ŗ³G„7Ļ$c•_Rk&l”4~Öü«[[jw×ΆŹH¤¶Ä‘ńżć޵å ×¼=eįßC6%“ŅMµTPOĢrsĮ÷¬ļ©.'ń DŅõĻ Ėk¢3čśŲ1ĘU—ø#±Æzż“¼V–w©¢źOäµøņ¼É°rļĻ5½5¹‹z±ńśĒÅž"æn­œ¢HcĄ`8 ü«ąŸx3ʖ7Wįō_>Ł® %ŲOŻąžUšVЈČõĻ|sŅž>Ÿ§ė0yˆ¤±pŹ{ąŽĒ5ö+ŲųR=zÓZ“Ņ4č4ėՆįĀєœw«Q4G„üI×µ{ßé1ŪŹm|°öÓ*ąpp~˜¬} Ćśō²źŠųĆN]SI‘įLq×5½ ·šī“ ė“é_芭ĮtT9ņ¦k¢¶Ó­ēŅ®FŒl$ź Ā”'%¾£š¤ŪŲht^/ųQąūżMń}¾„}ˆģ¶Ż¤26cŗ“ŪėĻZś·Ćńü1ų½šRÖÆ!óüP h䕎:pOæ§įS+ŪAIÜųnŅŪķWÖ¢X’Ńw,œķ)Ēņ®Ā~±øŃ-õx5 k‹ ‰ 2ąķ>ęH:’ų/ĀÖśōžį{ p$:“ß÷Æ?ųµšfźĘėČ>Kį[Ė|ą ą>”Ó{Œńƅšå®‰āk_¼‘‹¶ŸxP>V ńėÅ}YūAüKńƅ¬_ĆÓÉ%ФM#>ϳą`ć×µlR‡š^ļĖšbj¾,½{©VWy?7 ž‰ŸóĶyMĒdzńFæ£>•¶r8 Ÿ7”;.GrišØō3­ģu‰wjzU©»!L˜ F}+é‡°źš¶œ‘źv0[j»3婞é@Hć>#¦·įUs.Ÿsä°fWĘW'ą­_ūBĘ7×RH7‘–a’¾åh&čĘÕuĻßKwŸi0Å&ä’ÜŅ ėņž+WFń·„½ÉŖßtéĒPŗ’ŽTÓŚ «,@žæĀ‘¢3g’ -~OjŽ'ŽīXī·‘¾}Ė‚HĪ /Łkć߯ÜxkS{k˜dĖŚ Æ5ЄϪfŻG_š‡ÆtKÉcdb äĖÓ×5ō,ž ²“Ōģg–aråUšHCŽē·J §¹ō•ąĶ?ZŠ;©c–éü’ä!ł±Ų’*ųö”Ö ox[Į×^–{»\“wQş9d#°õ®yocxŪ©ńŒæf-kĞ/¾»šUü¤æ¾ņ*68=xōöÆŠ? ėZ޽į= Ć^2Ņ,5Cekœ‘O*0»w.{ūŌ©‰ŚĒåĘæ‡Šhž0ń$6E£ņ¦*Ńąœ_.]ł¶R}™‘ög±Ž¶§#9D­}kö„T‘¼Õ8=kėŸŁ‡āY“Õ­|#ā+@֌¾\Ee ÄĮyāŗb“±‹>žŽm©¹FN9ÅNÆ+˜V5!3ówÉ©”lcͭφ’jKaāX>ü'Ņõ˜§ń¬2Aā«Œw¹%…ķ¾x zŽ?OzüŁńļ€ķüGį[Ą“éĻwk*=֐ČsåJGĶŒćŌ Ę ™Fēņū]ü„?5 »=.źĻE¼”—ķMĪå±=käK±(Ź®x®ŚRÓSšp*…r|Ģ’Oj6“ø9b8#=kc"ƃ”eĘ Wbß2Æ,;g  O0CtØĀFc6zā€,F»°ĶĻJ1+ŗŗ.Ō'ųØ4¦hDé†=¾•±¤xÆ]šG‹|+ń#Ā2¼S¢Ü%ĢL®T²ƒ’½{ąŅg}#ż æaĻŪbڃömš'Ēæ Y¼Ž=šŻ¼vž%Ó’ņÓn$8ī@ÜĆæ ;W駇¼G¤IØiśe­Ąøš_‰-†£¢]dį%#sFz€śż1\ÓF͵”j_kó­fF·½¶&9T¼C\oÅ_…śĘ?x×į_Š i¼+®Ų=»Iß·“ŖČ‡³+aī£ŽøšŌGłā’ĮFæe’žĪŸ“Ž”mā½" {{©žÉ¦“‡ŹŽęD?,ÅO÷×k8ę¾DŅtŲ’“ Šź!$2¤?#YTfėc©ńēĆē³Ņ̾Šļģģ»ęI_˜śōĒįé_(¤Mk©IˆČźŲ,°r u=WĀ›Å,ą.ąG }IfŠėövیr–żŽĪOÓŽ¹e¾ƒ=7į·­ō˜Ūįī«©Acn·%¬ŅvĮg#3õĒį_FŻĒpl”Ō!·d“R8Ī=k²…ĢŖDē®·J¦KŒ…č3[Zn„·iĘčó—qÅzP}NID†ī%“ŗ/ %T…<śV¾›uż ķpü«ÓėFōø”luKįń|Š·™ĪõŖå‡€-døøŒ© ˜ŹĘGcį’‡ŗ'öĘ¢%WhʶׯJõ¶–Ā×Ķ’ĶvI€vŸjn}Ž~vÓµˆ‰žŻP§rĖŽ Ɲõm=-5Č¢P6±ą RēĢøg2åŠŖ˜{Ts}ŽÖé%Œńǵh„qN™ŖĀSi@Ī9ėU.ļ.oRāĪ,‰NL`øÄÆŌņ xÆ&¾™/cv˜1$wšÕø³ŖÅ;zóėCFŌĢįg(1ēæ=kOLÕ£³}¬<°k”¼em‹WÕ®om#‚XG•œ£ŒWkö»)¤,Ėź­a±”„$É,'Ī9OŌÖ;K‡`™e<})MĮ’Įčf1 ńõ'ŠÖYńŽįˈ`Õdevł› 0ՑÕJ8„ų£įé/īäEP…ȏ̶ pŽ0ńÓėQGr:Ē…lYI*GĶŽ+]nņy/ vxHUłOŻė\ŌCVŪĒok-äĪŽ^Čśę¹jĖ”ģąč7+#ź†³Ī±ā%±Ö‹†”Ć[¢‘“pw^ńV–ڤ¶mw ķłIŻĄ?ēÅQŸm†ĀrčŒ/x‹ķ×Ļo§©LžҼOĒ:µ®‰jõÄ{ŌćŸóé\“ŸCźrÜ>§ē׏|sż„{{”ÓI$ 7W!įļ_k6·w:½āAŒcæ~ƒĒ6¶gźü9–ŗ“H÷/ŁĶaöW±ŗx!µX+oP𦇫„ä×v–ŗ>¦łssn˜·mą~51§ÜżÆ.ĖÕ6¬y«į¹m,¼¹Ł.ÕF Ø1»ßÅÅ,śtāXŽFˆq޵œéŸ eņ;½[!ĢÅŠ‘Ą$SļuH“éä)(ņG­sŸWAč&‘¬}±ņ§z±År_< ’ „ˆmķ®|Ż#2³FrÄq×¹ż*©é+œyŽŚį*SīŒ¼GŖC¬¦Ÿo:„ę”n‚0Cm, ōoóŚæxæąžŸµpxIš/‹ī™,“ök{O8īņ½½×šö(NĒą“hr§ŗ?HµµŅõ‹‰5 &žĪīŁŪ?»łGą+"ŪF·bė 2ĘrŲģrŠśœ¾½•ˆ’i [Ÿ Ķ*Ü-Ī—:FÖF#”üĶ~\Gįu²½{M06Ł&U\’Ē{7$žyÆ7Ųśzx‹Ęčūrļį±įŪūĪóU½kT‘¤XĪŲłé_]|=šÅę›&›ā[ŻkYķaU™Šø¤žB¼ŗ±[)šf“åMĘżĪ;Åw—śĒ‰/-tŻR}>÷>m³#ķ(=}ł­üSÕ,‚ųcć^‘oā=&+Շ2¤Žß×?˜éQJ•Ļ‹«‚Ji-Ļ£|scka¤é—ß 5ŌÖ<74BAŁAĒŻ?ć^¢|C¼ÓÆBÜß ĶŲņ¦Źīē¶zׯBšG‡<µ„©õ„õ”ńҦ™²o™€€é]—‹õūiÆąhgŠ ÉŁ!VĪöĒA]RZJƒ·)ó.¹occo{iā=o÷)ņfW…»0=Ē±Æžķ“:Ōf‰Ņ5•É Ÿ½ŪŸŅ¼¬LSģp5åٟmžĪŅĶ‚!ÓU„VqHÉēŒf¾ØŃ“kkšś(bYeĘ÷P2HõÆQŌžnń’†q[—«OļJ’‰éz1óć $€)ķėļ_‘ŸšQŻ*ĒLż¤“Éā»3És¢ÄœõeUō®ČGÜ=#’.?ļ’é¹iåį¹ĄNµõŸĮŠŽ-ų]{/ˆ¼ؾ™­G`č9}£ ų½9rŸŁ|W’ŃĢ00u•ć4Ółœķå’!šķUąŸ…_šµ’‡>8x[V yo=Ø 0Ūµå†N» qĘ2G8ųž‰ā Ēā©ĒfL‹‡ >÷½źó c«.iod½l~ ĮW%Į}VœŪp”š~MÜņ_žĪ’éž©ąŪ²cI£ ī=pÆ ‚ę÷Mŗm>ś­„RVƒ^mīčŽĻ>³O’ZIå…Ż„ä%ē”ām{p#kd³)ągĻ„(IŸ Ń’hŅūG‘y ĘóY¹żöa-ĻCT\ĶĖy<±ČVņ>P2gwP}ź£n§™‰o”ĀjIzŽ šöįZåī;¼ .µéd1‹xĢ‘œsÖ·¹ć{6¦å}Ź·–¦ūp śWż°Ņ]łVīö÷pJƈŲ(ąäŚŽ*ņŠżHų;ńs^ų§į?ųFüW¬»kV–ÅĢ‘¶J€ ūąSdųU'‰“ū«…½žĶÕģ¦ßŽ×'O~Ü{ūW©J7>'”I¾Ekžżą] 5ķ ōP™uøļ“ׯć_=üXšUŽ‘ØÜZ_éņ½¼ØĄø ģözmZU9YśÕ’Äż¤ü'ń'į–³ūüg3\›K‹}KĀRĪ@wZ°oć\’ń) `Ÿē?ö—żš¼wū~Ö:‡Įč²i~æŌ’“<1{?g¼“ó7b6õ€GQłS©Oš7]Č8E’cńž7/ƒV.’i7̽o)JŻ#cļvĘų:ÄKqnuxć$Ę_¦ŸĖõÆŃoük„Iy®‹.²ÖĄ¤ū qÉĻ r+?Ŗ7Ŗ?kƊ…HJ•Ex³ļ’žĀ?“§Ę~kžéZæĮ«©!¹¹–ĖU[–øÓ™3“Ā0ąąšGqŌWę'ķŸūOūųļÄ~ š7ˆeń§ģ’~Žm¾×3\xfåŽ ½ĒVu›‘Šņ2n¾\·‘ų/x©€Įń$ņŒ;żÜ„Č×iŽĖńÓĶząqnbŠx¦RŽ6ž¹Æm·±ūVSrł‡€IĘkɔ,aĮœwˆž×įė—7 Š"7ĻžŁļō­ĖE[ŪtņĄ™dPriø”į+°÷ø…'·|¶ÕūŹ}k†‹Ć×|¢źŲ¢”łK f±•'aE4E:Mlė ’ƒ²k'Ä myh.ČłŠŒ Ćø5ÖĄ§M¶‚KW!²C)=ke#ķrøžé#č߃;¹Ń¾•tˆ-§Ś[!XōĮÆŖ”ų«xx^X¬…ōū„ł½‡µtSŖNc—©\ē“_Ō’śŽv‘VL¶Ń÷E}“įĶrĒ_±%TŠmu=kƟCįqX7§CĶ~$Åmįū ‹Ø#ŻfĒ=«ę}]·0¶tkF?:ŖO„D™źeš÷[ć‹[Ėd½H‚\1&1“^Łš‹GŅ> |8ńŽ™«é¢÷V²·óąx܇!{żÖ,÷cQŖ|Ė”óŻĘ‰¬\im-ń_“DÄ©Ŗäć„aĖåŽÅgmꐼI¬YٽQśšān»ū?~Ķ’üK4#Sk¢ņĻi;–&Ų@Ų;ƒé_ˆž՛W¼×5É-–Ø^Ü^’ø]É"³žÖ?/ąl/?f8ī­Ę?%§žŚ‹^(šżŽÆö+­'T}R·ø[ˆ¤UĻ#<cšūöÓLż™> ~Ķ .ü]©ų_ć}¬GķŠ °½øą”Ź”n™#š¬¹SÜż[…IūŃęæņģķŖÕoś&‰i¦ÜÉØ2zqŸzŗŚm»6ēœę„A“¦Ķ3Ibcu»ŗ‚®jT•߇¤&}"“²Y°r ¹ź+Ö„ Ć5±M¶mŲŖZ€ä(÷®ŗm'€JX†äŠė‚Šņź»ŚŽ[³ä:8SĶkE Ærg·bįn+hDā™·4īŃ?”c‘ńČÆ)Öć{k†V!rwV†•ˆ`żÜM<ŒsŽ1Ҧ·¼Ž¬XńŽ3A“w(É+ĖęnnńļM„|¤īĖӎęs} 5;1‘ĮkP rۊ(ę·2ŚŚ #;pzVĒŁ- ,=3A”ž£ŽĀČ|Æz|wÖØc ßõ¤Żˆ‡5ūīČ®p+¶Ń>D×P­äĮA G÷¬åPø$z,Özo‡ÉāYxܙĆūЬŗę–PNķ²cēkPŌ™ąŅåÅÅ”@Ī”Ģ_ŁÄŅK8Œ*ž„/h)=Ēᯀ|gń“Z·šŸĆ- }FńŲ,·r)X-ūLkõ£ąOģ;š’į-ŧ‰ž+Äßüs,(3mfƞg'=…W29äģ~†hzm„śGtZFŒpŃŪF„Gl/jō(Ģ·ŃżF¶D 1ęć­5$s³ Ņ<3ikµļ¦k»¶ä‡=? ėc!@Šq/zS1"ūU»īPw`ąń^AćoŁh7ĶĘ”+øHŅ%Ür{J"ʛwØź±,·H¶6gLņ>µ Ž–r^œ "Žøg\œÕķ«8¤ś—¼¹€•Wqō­Dµ*—={Vr"-³ZÓH{•2b@ź~cŽ­?LŒI“"[ū™Ü$0ĆóČäōG5-šĘ7?[b’ų$Oķ ūT„–¹ā½ūįgĆw”I-åģ;&–yŲ§žpyÆė?öQż‚’gŁ#Ć1Ųü4šĪ™®xɕ~Ó¬]@W`=HÉž\÷®j•ˆĄśītvŸķŒŽdųĮAŠ} éҹŪŪ›»™Lča„ø®)JęŖ$-gĶ$^lžµ‡sg$Ąķ˜Ą}@®y=Fs3躐»®ŁS#w^}뤱”*4Sc+Ó=«9JÅ(˜zψ¬R¤3ß­|įćß]aåV4Č*[ƒX›Įt>Jń§”ŠCäɱŗ3“÷kä§¼ųą·%ĢĶ܂6Š@ųˆä7¦źżš—ķc±¶D³ŠŽįP+²ƒóŸSDŽiK¹ķ~šļŲī#šhā(½@šśĪļMŽÄYa}»YMDe©39y#ē܀1ĪjMGÅZ¶‹hėij¬ d£Œ­ /ų+Ē:‹ģnmī­æ²õEo,«šśŠ„āĘŗ†ĪęÖŅķėi17\ŌĖ©į3Łx‹RM÷—ÆspĪXcufO=ī’†Śõ ·ėøŒā8³­šōšF³¦ /PŠč䫤mœė] B™~tÅi׌Zéī#»×#ØÆųńĻƞ¼ŻŁIs&ଖü°ü:ā‹ČzĻĆ__ üį՛J¼š-R<Ē$R Łķžk¼[ūkˆĢf䢶BążŚDŹ‘ĢŽ[3>Ō)$€ü¾õ”¦T„ŌĀ÷Ś:PfгYŖŹķg6čz®zÕy£ŗ8Øz¹cgt ŻĘ»ļŠņoč÷ćSó“›÷FR”Ę%QćA²ļzÜtÜ{Öö5ę›t·‹ŸzüŲē4ČeźTŅ|EkØ.™ –FAźéé\Ä&ҼGrn|; ŗ]ņøi×*§ŪŌM{2֝wiž]ü+öå!wØąź?*Yn™yUVö#­bŃM.„±ÆjÖvl;Gį# V.›ć]^Ł5•[—ŚģøGØŅ3Óc­ńŃādŃo$»³`Ž0sŽF+„’„~Žpģш×vyļCV$Æ„nĻW†Ę;Qs¤±ūį¾hŲ³é^›}b÷1$Ø»EĄ.;śVdsXė4-"ļQŅ“ķxI,Pī¹OųdÉŲm#µtūĢ/õŖ-;xĖMń“vČ|7 §˜ór0=±G‚Śåķī_ÄwB" ēŗ|¾Õ2O”j=ŽÉ|Gm81FŽdČ{tÅOś›,ødĻCڲ‰_S»Š&YtŌ ‘øŖžõÉh><ĶÕĶ»G5½ĀHced#ę©ÅcŠģŅīāŁÄĶ$°FAŚĆ”Æ.ŌÕ@ü?ÜM©[^\¤’6éF,Œ=³Ņµ«Šō.oķd‘vö=+ē/|IƒĆž':i:‰µeŹŹ£r{ć„0:­:ī+ø¢øPʌ7 ŠæM,Œ"/“Ē„"eX[ &•ęĀ“Ÿ›’iŗĒƒµK;8µk9ī-•ų_“*ē5¤cŌÄāµIÆ­Ń|øüŁė]$~×[K[ÖSä°ĄĮĘģUrö4¦O¢GfV>9F^•į‰/KM4 !'å^ä{Vv±©Ėų³ĆŽŽĘŻ%²6@~G¼Cʶ>6‚Ņ<3Øl½WČĆä”į9U¢$ųmąų£N†K›»_ķžd§8Qœ éµM3ģBhę™c¹Aʁ÷©hdĪ%–ą>öa·Ž®G<¬UēÜv¢:uÖ«=”-¼ĮČ“\Ś]I$­4ČŲćÆU6€čģ5ęÕ ’ÖāDP„ŖsФńė°?Ę dü€”Ü昛#zµā–l#­°ąu€›UµFö3ćŽ:ÖROgÜ[ī·lšG"˜1Z³\‰c%į­Int¬½½ĶƝĒ#āĀÖ0ĀcPŸŹ +j®Ņ‡a@Óß[ČģmōļM[Ń#„”±‹±'2‰¬nn­c˜”tv#zĘø•ćwhAEēµU‹$ŽžiĪøĻ+Žhézś¤Æ Cä÷_„cOT¼ß‰’+“śÖQEGĒ9ĪA¦O@9­{I¹¶µ1^©‘$9ĶdųsAMÉą·_" ŕsÓ'<~5ŚfFšL ·D<{VŌ-lo– .ęĀ`żźØĖ£1–ęāĖ=ä¢ķ„ÜFG§\xjā+sv©:KÜg“Z\“”Šļ'’5óc”…ąījĪ«v¢VžøącśÖŠc³8éīåĖHēw ļLƒYžŹtˆ3Gžø¦ź§¹5‹‘BJHQŸ~õÓŲͦé±Ke«#ĶĘÅpH(EJ×r¢yö¼÷PŽ$¶n,—-å‘ŌśÖu¾­Ŗ^¼–³Ź¦'ŖÕØ£S.ķMž'Š¶xöÆ,Ö¼+ż²ŽL±;·ŹĶĪŚ{THėü-ąõŠ ā]LGR>õzU¤G† ē’6ĄėL#MŋĘįŹ˜ČĻń®v}1ēg¹¶•!eūūŸ“ōŠ×‘/ö«V1ĒģvŽ}+‚i/õ-i§m6HŖG ßēQŸcž£čĀ/‡ŠxƒSWŚē™-¤mµŚdĒNŪjO<>šž­és(·» c‚%€ü«ŁzŖ|”ąM6ćVńšKi%H$Ž`Ä}įž +õćCŅ.µÆ‡z…·ōĶ…aŻĮ!™€ž/lŠ™­ žØüŽŗų¬Łk:¾™ÆŪŹ—öSę=NsĘ=kŽ<+ńV cAÓAP&ųÉĮVcčGØę›]Ć±Ģ·“»ø„šÄ­V»[7œĶ©’AĪäĪ }3ö}TŅQ>Ó®ISäŒv­l8Ē©łóń#ĮŚ~©ć9­ln7Ś%Ą#hČ Iž/¾ļÓäš¾›ą&K»½@kbÕRŽ(]HŒķūĢOojž],_1ņåߏµõ/7SšG•?u’˜ßއņīń-ƉtʆŽtūAłg8ö„ģĢ$Łęž(ųqs”ŻLü~UįiUŻOŽō ō®£įo€u+ŲīZūL/aš<ØOJ9m±Ÿ9Ü|CÓļü(4Ū=NÉ-쮑­ŁJ'9'#ÆŸ„|‡įĖxb÷[𶃮\CįI$m»ó‚¤äqõķR‹R'±•|8ŗŽ—}%½Ü÷üī0Ćœä ¹¦ų+Ėś~£s¤G"h3§žÅ\€§=@éłUs ¹NŚļXŃo“ķI.Zå"r³HN zwäWŅvž Óüiį«‹ Bw×pä’5ć$pź=A©oݲ*ś'Aš^Ēį¾½§xŽźKė«)&ĒŪgäžx»śĖRš·¼.²ŪŲĆ5˜mÉ ƒÓ”õ§)irœŽWPŠōėI¢ÜŪ=ŠćjLĶ’f¾,>œų†õą•„Lł’óøōĻåŠ9õdī{ę—āŌųiā]DÖn![kˆAĢD0Įƒž˜ę½+R¼Ō5Iõ¼o Ų¬¾ŸJŠ·„Ø ÷‹¬.ou靣]Ć;÷Ŗžs\¢ź‘k“Ć*­Ę˜ä¢aFzśēÆåG‘›V8ÆŲ[i"–ÓL½ŠHš l÷æ:āü3šśī+ū­FŠĻ«źD‹*Įź@ĄéŠf\ĒŃ?³WĘ{ų¾"M§ź:&¦·ö¢Hć <…#}k²ń_¼Eń7Ēć^éōŲ”iY”;KJmlʹō/ŒĖ$1ž"ŚVĻÖ¦Ö“cÄ67–¶šzÜé—#dŖćvV³’.2ī|Oć€rx_S{›[#&‚C4Ā5;­Čē ŻxķPÅąx¼=bŗĶł’]%@rq³ŠųW5FRš>ćųGÆųÅŗD#PŠ#ŗh Ų$ˆ.Uzšóˆ~-‡ž§Ät—Lx&Ž[5)•Ź·Žn8ąVE'ŠüĶų){ŖxĒĘŹMNaQɘŖīfūĒŌWҾ3ųCŖ|9ŌuY^Mq8Uø2m? éR²F­ųńƒÅŽ*Žk˽*Y®‹˜›bģ*+ļ߇VO|Qkį«ēšÕĮtuū¼gó­ö:æųÆÄ?üXŽÓõ+««p«Dvā3Œśq^yń§ž­'KŠü[¤h­^ÜG²< $6z’Aöż+ ‰ŚįĪŽ+ąG„¼wyżæā_Zeß/N6ąīĘ¶|Qāż/Ćz¤V7¤%äÄü Œ¶=gŹ®L§Ń|~ń…lp=@ÆėSÄ4VzāG…E9t*yņ5•XßS©Hö’ž ¶šŚ÷Cøp÷ŖwĘÄ}ą;ŸC^·Æ\¾Ÿ5­Õŗ(9é÷€ģkĘĀ“?ų8öAµšGÄ?~Ų¾Š7x ÅŃ Ę$U„ņŒC<€}Żć*OL©ÉÉēłJń†ŚEÜÖń,o–Wīmķ¶Ŗ›[.‡$Ī.O"ŻLc œ÷Ŗ‹ Ąr»]‡4‘(‘W²>”²)LŪ±ž('Ł•šŅ·–ģčGCļSĀĖųš¤Ž˜Ļ½Å ČQ Ēz²ŖŲg@„‡&™“]‹pÉūøŠ±ŻžŽ•ėŸ¾3x«öhż ¾~Ń~ V—[šÕÜ2É ŹŃ}²Ų¾&‰˜vd,?ėLꦨģŻūAxö—ų-šļć/‚µ/µųÄVÜ(8Ģ3ł•±üY ŗžµč:äRL²Gn§ĪŒóŸJå«SĶŽøÆŖt?ˆ>[ķķm%±™†’½–ÜnŸćWWю'ˆx«Wkżiu>yī`”K a£`G|ūWčæĄĻŒz‰¼4ž»&rÉ!¼¼t`k®œz £Ųu•į ŖÄuĘ+KB¾C“¼s‹‚œWAĒ5Ōėį‚ņgĖø’sč+ÕWEœ˜QJ1۟īÖŃŲĢėōūŁągå=ńÖŗx¼K5³ģT[ü„4r£Xv2¬üUØi²«įķ‹`0½éÉć[¶¾ää?Z|ØÕ£SöWŠH±Ģ§ī÷…p××ow$’ķž޳”lSއ0¶“ērc#õ­…¶ÓgƒČtar£;‰ėķRŒŹ cˆ°Vś{Ö~©­½„ŗ¢ĘŽpčćµl„p8Ė{éõ ¦wVŸ~µŌYĒ;¢ĢŒrp¹ķLØ»šh)u*Å<¾T£§5­7ĆČnāYĘĘSŌsĶ.Sc4hoŁļŽB«[?­fėw:X‚o†@SŽōģkLāģ7™ømü:Vbź1Bę å œŽŽę”¼ĪŚTĻ$ńwʈ<+©£Ōn§Ź ĒŻ=ņy”ÆńŒÅ¾»`™“żH'Œwō®yJĒ«F‘Å?‹mō¶—xLāFŪø8źO^ÕÜ[Čļ¤“Bf?(ÉÉĪ+’­KlzT©x7¾'×ļ›J·I/Ā&éåņHXż+ī_ƒæ³Ā%Õ¾”ud$¹\̼’ś«Ķ«Tū¬‡*ę÷Ł÷ļ†|¦čČ”ķjž=2+;ĘŚ®Ÿ„ ą²ćPŪ½cēšō®9U?KĄąłcsÉ|'Ŗź~/žŃ‹_µm!Q–ØēęæĒJSāM?Ā·Ś…“Æ1čĄō>µÅR”ļR¤aĀʞåē“J¼ķA*ŻpkńTś·Œ<7sŖj1ź6Ń“žSɵ›®vē­qĪ„ĻwīŁŸųnĀMRźfŒ¼Ń‰›§8;¹ńĶ{ߣ>ͧD° ÖZŸŗų}Qó3{ĆŅM  lƒ]¬-¹B0Żž:VńŸs÷ UŹQńŸ§…õMäD «Œuōü«Å|ąĖÆŲųžśĪuyl3ÄHć? 9¬äĻg IDē¬,Ė>V\`ćīć5ĻųīŚél^åeH—.Ź>š®IHś,™Æ4ųeć/ųWXžĆS¶½Ńõ4”ßFbņ™GBQÅzj÷?4ĢxyƳ”6gķĄŚ&×V·Ń4Æ4šUĢхi™žFo^½+īķ+ć‚~źĻāy-õh•wcpĀAŽ+±U2”’Ō‹²GĮ’~,Ś|@ń%åՌF=9å,ØF ©Īå_3hśMŖųŽĘź$4›ĢPOSļ^>:³³’č}],µRĆ>nĒźĀļ‹ =„¦“{¦ŪK$h#MČ Ų×Õ~$ńV€ß µø “Ł}5¾Ņ8ź§,šé×t&1ź6Öžy øąc#5ĮŚŻŚźįmõkU[ŗé Čėå“ēv?FįŒĘU©8Kxž’¤čŒŚ¼ŗLŽåA_ÓҰ5§‹,ę‡UŅõåĒ‚­ė‘_A vGŠN¢kSĻķ­|gą¹&¼ÓEĻ‘ŏ<¾ÕōśV…·ŸYŗ‡R¼ø7S± øŸóĶG4%Ļ£'Ó4ļųnŚźą[”_-ŌžS_+xėįÄöq\Ūéķ$7ŖwĒčŲ®*Šŗ;šųøĀVg¾~ČZܞ#šæˆt »9bÖt‰XĢ:’ƒ7ł÷Æ®ōÆhŗ……Ģ:}ōW1†ł”ŽÄW›*gäŚü1Š>ź^(šµ†ā%Łź–nŖ/ ½˜f_šś×Ė &µJr_->Āš÷u 2Ł. Äź0ńұļ|įß u8Dqßžńp}ć\Ž ©ź<ĀUśÅ/™į*š~·į[É-„~x= c9ü«–ŃŽś+IJŗ‚Håvć#Æ5¬}ö[›ŖM³kÄcģ—?d–O-ŗ ž Æ&¾F·¾2G‡pyŠižÜkßc¬±e捆R>öEtP„ ¢ƒ*š’Ķoéņ‚¬½½jå”r(ČTtā™Ē^‡ÄRļAšüóYO’° ę ü¹äÖ¼ėĄŅNń<ńÅtWw}+Ŗ”›ĒNŚVųĘŗ—ĆŻb+Č¢†KxĘdG^Ŗ>õ~µų.ĆHń·ōĻŲO Ķr…Ē—Ą°5ģŠ—CóÜęÆ*ęg8#Öü3¬C«ŁĄĀ4%.Y9éž{×Uć«k?ųrßV’ÜĖ08ū£ßóÆF'ĶJ澙šę·įĶgĮž%³ń‡µ+Ż&źŚu¹“»·r’@ąäaܵūsžŠæ¾:ü/ųkÆų®ņÓÅ^ šĪ§}¶{e[ŒtČa܁Ϯ9¬ż§.‡ŅUÉhbjŃĘJ7©Jö}®¬žōPš\ŗĒÅĻ Ēā_köšjVņ¼±‘6•p9ėŲ֞»ćæAŖ*jŚM¦…«“>EĶĄāńGnƒō­iāŚŠōV[wf}Ēū"’ĮA>1~Κ~›ąŻu£ų…šĘ)w§ĢŅ,#'‘ UG$)ȵ~½ųćąģńū}|&ńÄÆ‡_dŅ|MÆiņY]Ļ·÷w’SłXƒœa¹ĪOJź§UKF ż#ü8žGŠeśFr“Ņé'Ŗ—¤­ÆizéüSų§įƎe揞4żŸ¾$h—ˆ“«†čģZ;ˆĢÆó!R¤؊ś#IŌ-õ+c¶fŽB0ø<ƒ^&&•ž‡÷÷‡ÜOO9É°Ł'uV üķi/“M5ќ淪Ż\K5†„fdvRŸ0ĪåŅÆx]ēH ,<„\_A\v>ņŗ:Č %™łŗšĀ×`€Ä'ĻĘī9'4ģLćdqSxkķ.4 mĄžÕ£©hö6–aķį9ĄŻÖ®<¾˜÷ģŚ-¾±„ĄÖÓE1h·ĘĄõą{UÄõź¾d~lx—ĒŽ=ųkńvśMkƳ³&ūIŽa`Hå=ųÆŅŸ„_¼?─^}ÆĆ:Āņņd` łxć·­uĆcåqŲdŻŃõ-õ¶‘āļĶܖ÷jźAĮkäŪ‡°é—WisĻ+d†9\vāµv<Ź•;£Ŗ›Āž«įɤ”ZŗŖ3.8Ī+ųGć į>±«^[Ģū•ÕÓr2•ĮSłV2īz4«)EŌ_&­m©É{Ćl'% ÖņņM’_‰čģ}ĀBwvēņ­Ü“l7ƒėXŸ®SHŹ‚Śio\YXäqŠWO—kß#nć”=+¢…Ÿ āįņL ńUŸ½Æ*īķ”ķ»*œDzćµjF`‚ÕÉ㨯b+h—|EžWĢ1u1ø‡yIÜ»§ÄŅβyxĻ\b­ŽČ»£XäüÕŁNĪTiźĒLHˆ®N¾€Ūł2(/ŸĆÓœUŠžD6÷nĢāÉįO¬O®yaS•śV‰ “­O©{w“Vś×'w¬]ܲ4ē{ē#„kȎY>‡O±Ķ ‰ØÜ(ŠŹ“c&<žt„ bUI挦X¼µ ry‘”÷%JŲo,œ‡µU»¶ŽxH ¬žōł™Ļ7б¤YÉd4cy½jMNöŻć l²ōlt¦™7öĒ]Ź$'ŹŗļųVMp «™ŠD¾ųČļI•ž”p4=,C«¬PY³Č«mā=2"0ÜĀē<óŠå©s¢4Ķ!¬Yj‘Ā%’Žb8‘‘Š„ŖXŲŹČm’RUNFk8эŠš;ź6Ś^‘ky­źīĀ8ģ­|ŒONA_zü*’‚züCńw‡Oо)ų¢ßĄŚuÖR-%4ģ¾ģ#޵HęœĻÕoƒæō? ųwJšõށ§hš}Š*}¢8‚IsžÓ¦¾…n $HżjҚ:!§óõūLĮW5k‡‡Ā_³¼—ŃIjóYϮ܂MĄĒ8#–Ē<“_Ž-ń‡‰|m«źz·Œ|AÆ]ŻIēJŅĢÄļī'}«Ņ”H%+¤­˜Édž?ĆÅg*¾Ę&L× •ŽJµx‚į˜ńެB‘ŒĖŽļS>ĒŁ:Eę…X•īź}=*I,ÖWH‚żk3jÖĒkŖ‘÷@āŗ;}5Dģ<ØsÄąķS'b£ ģ}Yū0~ǟ“7ķ7«%ŸĆ_źvžŠhćøÕn-‹CµŽ2=x×õ­ū’Į ’f?ŁNĪĆÅž7ŃtļŠ?· ÅŌaÅ»ć8Prι*T:£NĒėÜ#[ĒŖĮ¦é1®Õµ„Eōć.–Ēøk•ČŠCcę³M+±˜ED©l„£n{ÖS—DmÜK:Č:V6ß9Īą8ī+ "»ó"Œ‹BżąEpZÅņéI$÷O²,r}*%šB=O›§fP0¹ŒŻEšXå>Żiš?Œol F°ŗ¹"FFČI9 tĻ­}\o 6ŽL©ēvįŽ‚m©ęŽ9×ßOÓn.`µ–ćŹS&Õb1ھńĶ6°o¢w ‘Źe#żŖÉÄ9ŗ›ØAa4ėb 1\žŒf¹_x7ĮV‰b÷7w¶ē”Ę0_óģg}NB I ĀłĢFzē­w6+#XŸōs ĪĶL£r ļ0[LY”†Ī:еØx‚{D>Ry±uź*`ˆ’źz‚ü>Š4*¢Bprž3ƒ]G‹fŗÕ {ČSs±É  b“*'•]­“w p~Ņ śWĀž;ńŚ\x¾×KŠīÕÆaķććp›ŒPtÅt>…¶Ō`ÖmlīÓG“ŅnJ(‘#Č Žų4^För#¼&āĒÜķõ ,I¼_3ĘN=Īq[ڇ4½Mī2HķĮyĻ­LmŠćkmJŪA¹ÓķįēU>Wcķ_•ž#ńÆÄ½ā<¬āāęČ2ļCŹ0FąXÕ4kŹ‘öĪ€ÖŽ+Š b+(¢›Ė &Ä{WY‡cŌWö×Ņ‹’› ;ŽŽ½ĒLÖ"bö:As|UVL”ļĒJĶ’9ZuT¼÷®{E”²Äšžń£ šGj÷źPĆjÉ­[Ü]@9_½ŒvŃōо"ńƧ± ”j…„ł;^¢ĘļpxžUó7‹­5BgšĪŹ;Ä`s“|Łśb­Ó>‡&¦ ŠĀń”Åąæ2ućł×]k £©œÖ`?R¶žŃ’Tveźv«ākƲ$7r»Ę£h\šµ¤Cš7–²O²sŒuģ×>$Ńī<,`³±"ą(PXēip=źŪ*Ž6³u·/qd“DŒä„wž¾³{ĖiŽ |°Ąa5‰©gĒ:5ÅÄ©v‹(„œdŅ¼ķķlĢrC5¼OŌŽiĒqXf›āgŃdhķČ_Lpkš»Ö5żAåŗ@뼑Ž›im r£QīąņĀmĒLt¢Śtƒs*œóĻjBpFcj›˜÷ČCW¼AwcrŸč©óm¶zSĶé¶Ž\ė4B@ŁčFsWµ‰Ö$ƒģĆtĒżf{s’źØrč)C°ČēžK]€l«GC¹m>a-ď Ż’sÅčžVzÆÆ[źš[±1Äū«°®UŽż”v™”Ž=jÅ”,äŽ+u>IMć<ŽEQ½)k€ß÷ ’KH^įkxV>0Üp)—0nܛ3Čf€9uŅQn„mŒźNpĒ85|éą9!{ō„Ģ€Šm!ķå%ą epIü««Ót;yQUĀ<$`‚iš)t(ßx_G±ŒKnīū²oį>ÕŹMa NƝ¬ĆŅ46”HhžNz~5ŻiÖŽMŠ]ˆ ņ›£€2)ņō’Ō£‹Ri"nŠł޹›ØŚÖ4Y —ČŻ“2®q’ÖØ”;äsÓ\Ł)+伀“Īxü«2 M>WŽtB%Sņ†ēń¬ģd÷=F#ž%ŗ‚#ņŸ™N3]\Ž&E„[\ŲĒqiČ]€_ǽt$5 šK[«D{8BÆU~µēņĄn$»ŠW“{ ŒVœš-”“ż8nX XÆRXŅkö~P…R8 ść“Y©“SZؔ‚YFx=)†śk• ²8œķć½E×6÷n$ 70äŻ}ÅeĒ ęžńŻLQ²~}¼ąP;›†VӖķ!YƒÆ‡·A\M։e­äć•Gn”Ģd‡čÖ+wu¹·“ƒ€HÅvśƒiÖ6Š'œžj±pēóŖŒXāģEhšźKå4›@ć;øÅ$žfg¶¾B»Š9 ęčĪYk»9į·LØĪ@¬oc €¤ ēv)Ę=Ny£ńgƗvḣĶD.A8į±ßł×!ńĮŅ|AЬ“č“ķIm9™B± œzūWøyб…įoĮįč`·Ku XŲć,’}‰ą]sXŃ4ęÓt‹£k#¦Ēä FџCāŒ¾ ×/‰s)xīą›÷˜Ž?Ļ5E]^Ä%šLŽ ŅÖćL’kŪ§€Ī‰"‘óŁ=y}ėĢtųĀ[ū»[łīZFQˆUr#ך q‰.„u%żĮÓuA2\)Įnü^±šŠ}#Ćņ]źvšužą³”ÉŹ1Œ~ٜ÷Ę’‹Züž;°k-" ĶŅ-Ń“gn '8æ^=ėč߃“D÷÷M#hšJ¶öé,ģ ē°0r1I¢%@ĆųŃń+_ńLęY4Ę““oøwgŹ$sŒē½xļƍ>{Ųµ]SS¼‚/-‡ś<­ó“÷OqŠā§Ļ’ŚŪĄSɧųĀ(4Ūæ+}“rQžĪ<Ń™96x‹üŚÖ¦ž(ӞO³:ķČA“|ŁėTž|Fоüdš›|AƒĶšTŪćžU’–Œ}FHĶmÉqč}«į’…~šŸÄ»Œæ®#¹Óg/"Ś»†FVž >™üė¶ŗńn®Ē7Ų™upŽÅÄX-ī7Š›Iģ|qć oTÖ§øŁi~8ūŸaāI :ŠĀŖł—åSÓ„|ūBų£KÕ<%}ą’ķHŽFrf̐087½cĪZgĀZU¼ŖšĀÆ4ūFÄÜrHĻæźšw‡ćūM“ØÆö¾O@}é{B¼g¬ų§NŅ/ģ-oĢ„œśĶw?gIįMPŃüG‡ŠŃY&µ•7^Ą`qMT”ę u/ü8‹OšÖŸ-ę“$”ę³ TŻ–ægž|UšŌŅ›eå^½†}’6Ö=N®+Vō&w9oźšĮ},GOx­¦Āɽr­“ßōÆ'ńfŃīōŪūdŽĪDgr IĮĒ5ĒV:G°Ÿ³G†4ż Mę6ńČļKŽ[Į+ۊśoÄ’š‚ižÕa¾Óģ.įœģ ŒĪ1X4ŃłÖ֟ |G§]ųŸį.›oˆ!9qmGŚNN:Œ+Ǭ>8Ļāy¼Uį_“¬%P<ĄH—oCłń]pó:l̽"ļXšååö„ąxą‚į”|ŸĀ®=ėܾ üFų•į/‰–ž-×'“¹ūJåzGRSŪń­ā®DqńgмC{ā«{U†O”Ewģ÷ķŲWhŸtO„čZ„Ā€,@³üŖzgؕ37#Ųu?j67qéžU¹U‰‚°(GO„|„ń3Ą!‡ÅxļVŠ$›BI"—i!K¼{cŸŹ°•=neĻcȾ#ü]Cʗ~*°Ō#ķØÆq ‘µøć±ēłÉńGĀšĒ„|SŖéš”IdĻlö4’cU;l”ć[wĆmūąŽ©ļ.&‘ –M™ĮĮė[£XŹē³|ų­}ąŲŲ\—Mį r«.=žæį_©ŽžĀņkkŲ$I#u =Åi43©Ō¬<Ŗā0SŁGJųOö£ųpś†—cć"Žö&1\ĘŖI‘GqļŽ²*;ŸŁ».öøN ^ĆŽ¾ˆżœ> Xų;Ę·žÕĆ:ķø¶1¹"$”tĄčO֝Ž„wž=·Õ~xēD×ü3såźŚMŅjzmźg‚Œ€:Åræ°·ķQ„žŲ_³¾,Ū\Ś?ˆć„iśä1“˜īS r§‘ŪšaY[Żō6>½°Ō.¼+2jöLÉ,GŹyaé__é„^/š†•ÆÄāS4^fGzä*JĒĖ?“/Į?~Ń? ¾"žĪž8‡ķ~ńU„BäÖWj7FČIĘw*=@õÆóųēšoÅæ ¼sń ą’Žō×Ó|sįFM>īh—*ÉVPn‡·AŚ^æ§ü9Ķ%ŠłFžŅ(œ#ĒÆQ# Ś~oZīŽĒ,ž„‘¤a՚?1zö÷¦É8G;«™ŖHĪR+®×v’E'čy«28ĮļŌÕ([і,yĪ3éNŻ) näœgŚŽ^„ĘV-¼ÉĮ»vĻaZ±uC$»baŃ‘¤Ń×NGō½’éžÜÓü<ųā_؟āF½ö-YŚ~ ’ņ@ÉČ?¼·R~īx`=˜MlņˆīmVąMÜ»—aćpėYTGQē·pMԑȁ­$¾7żØ4+ßųBSŅ,ä—_Ņ.Vī'UĪū\üčG^™ĒÖ¼łč3ąÆh~ńu®f𯉭ĢC-Å„źØĮļ·’}€5üšžŻ³õēĀO‰—z½¾–aµ–iaŌv. m»‡<ō÷Ŗ§#)6|v”…Œt=j”ĖĒ“īi‡8īwSŲć’īP™~`QJƒŅ”YLC Øąq֬˘zɱĮ Tē§„OēąmŪö½h5"’S.\ Uv]ŁS Ü9‚ć+Žź½Ś­[JńJ]‰ēåĮķA×JEŁ%øÓę±×4ūŁģļģē[Ø%Œą«/jžģæą•æµ>„ūMžÉ>–Śž)~*ų h® $Ż<öŹųŲՓ#ž=jg±ßŠž„üāMĘŽÓüWįū˜ēÓļć|‡>[㠧Ѓž*™ŸT€^é¾bO3[äķŽæŻ5ĆY=Ź7’é«Ļ«Ś#ųRģڌ.äRĆi =qō&æ€?ų,Oģ—­~Čߵƈoü5£ OkņlŲĖ"6RēäųpG"¹œJłį­xŠCo«‹©,µØyæ7Ė(ąr3ĻjįµÓtf#m×Ćś¤‘YI޾bēŗÕKYm&½&oŗNę_ZŁIœēw(³¹¶ j£bĒ½:ĆĆēR“Ų×]Ź“Œ¶6ÕF]“b`jžn…³ŗ1\7BW‘ŸZŽŅü?>„bÖ8ēš@F22*ł‘ŗŽX隅³=¶vrW3ww=“«ø]Ųćµ;ž„M®Ģ˜ń÷¾”¶eEkcĻ®ü.Œįü֐«§“ZŚ|2]”ĄŲąóĻZjZ—ģĶĖŲžŠpC×EZ°»¹Ś¼‹‚ŁpŁéķV8ĘĚŗÜÜi·aćżźņ§ĮĪJš˜®Y%¹FG™A8# ÷©r5¦`ßx‹GӋż¶hÕĒšäd׏ßüyŖjšŒś~‘4–Ö;ƒ £qÖ±”ŗ³Ö x>£~l 1ØmŹNr}O½qW:äó†;œ¶q“ēo«=JL»„ŪBźŅźłG$’~č÷ķ_Mx;Įš—‹/4ė&7xٲ\vQ\Yō9NU¦¢ÕŸ€æ WĆŚ5äwÖŁ–pŪ-ŠśŖßE·ŠmŌŪ ņ€ÅyõŲ2ü¦”WC5µøīå6ŖLcŌכxĻNŅZAtŠ%ÜYT“<ąõ®ī}|Į«|\o Ļ©iö&ÖšN­ā™Łī§µ|—ćųēY»Ÿģ­‚\(rÜ õ¬%ĻJœ•®ĻAųMü#‰s”ss{q)Üņ»dš»ńĀŽ&ń~±aż‰¬K¦i‡ 0L†#Š•…“6žŅ„i1ķšK_š9į]jÓRIg†`r¤żāõ’8­–‹Qˆˆ®#Ėzʦ£śĀl}*ŖPėż#ØÓŽÕ£UXD øgļ݆DT|łÉõ¬ŚčBa¶*ųŽŪū[AŌ“Ķ„’DÜT¼GAśšņŸ…ß-~xεxā“ĆZŽ-5ø!Īćź?Ā•ŽčÉ%cčŸ~ĪzōrGāßϦųŸĀ7ėē[Éo&ģŲćæį_=x’ĘśĘÓSšī„¤²O€%ŠXöFyēźk’piŸA•āįRŁ£ŹWA‚×k@²[N=»P»²Ćķ›m÷śÖ{›³GQgāo*x‚–¶ŗĒšf“õ‹kOåÕ,¬nī3#Ā7¾:nnõÕLęxxĖKķĢ Eø€0»‡•„”KzZ$½ŌļļX‡žRÄ{ §PŅ8h.‡s"‰c܍bŻß„ÕЬ‹ļŹć«sŠóqµZ§+ ¢©I½¬}CįŁµ ³æÓf t@?7b+Ö[ÄŽ,Ö4«{+ūč­®šQŹ”ƒŽ¾nµK6÷5ĪƒąÆ‰5_ ųĒw‰ćK©`ó#…¢o•ćaņ¶=²?*ēü5£jšŌwŗż¶/¢YaB®ćšÆk(ÅrM6}gć')¾§½ųZx¤[ŅÖ¬øĀ3^ó}&?ÜQŠ2ńŒ×ÜP؜n£–2’ <ŚfÕ󬃰<ōąÖ’DF»8_xŚļĀ“Č×¶²O§p®ąp¹8$ż+čmV ÅöÜé„IĘGÖøź¢ź×{œĻĀuÖž|F»ń.•¦Ć6Ÿr¾Mōl8qÓ8śW£x³ĆZž=6šµåĪ•±‚öĄaNįßø&ÕεÓئūXłÄ_ |qń/ųa4»µYņĢąīeĻ WŸ~Ųz¬Ž(ųš[Ćßd»Åzh@Įߤ`’Ų„‘PžŸ¢pę*…|VĆā‚‘Ć|UÓ$:…¶²čöņŗ™1ü``ŸŅ²~܄ń—#»C²PIØĻzN?\ĀŌ½4~ˆĮF¾ųā§üZóā‰<;>ø46Žkū"L¶@H˜ŲķŲ„5ßµØ.4ėxЁ%Iŗš20?,Õb ¬Ēü Ę)b±ų%’.ź}ßż®-õMœ½½IÅdxkÄÖW3­£ĶŻžæZņ¦Ü*į”®™éžń.›o¬Åwā‚Ļbķµå#>^xĻ?\Ö÷ÅÆ ųföĘ oĆŽuŖ[/˜’D›RU=ˆėŸ_žµdā|ÕJhÕN? ń/ċ ZŅķ.t¹$:œ3 Qƒ¹±ŪüśV%–¤‘Z5ėY“»½›X\)B[§ėYņ3é°ŲN“Ć· s„…ĆČēŠķ–\ī;@<ąŌžÕ9Üc‡ycŹ®qÅv6×1ĄÆŽØļM!ՍՏ–~=\ÜrćB²¾‘“Ą0ĒĢš—įužŪ„æø¶™U#`dĒ_OÖ»hŅ?:Ī1œµ\_CźŸ źž֍¾•®ŪFĖ/ī¼šHeÉź}kõÆöyš“ŽšZi¶šÄZfeTōėQ…¬|{ˆ½6jŗ¶Ó®nL ±}”†0@ę¼ļY““D‚ćNh¤KWbŪ‡>Õč5e”ņt*9I#ƕ&åŌćp;H.xĮĪ},xVKÄįƒĶ¬^2iŪŗ ó_NO”G§+_]°»»$¹dŠ•Ž Ču•ƉŽ/ŻjSĢ÷qüŹ”ø‘±Āė~)‡Ćv:†§¬źÖZv™n»$ažČźkįOŠ?“’Ħ”įχ–ś„¼ Ń3ˬ_(óĖ&~č÷>½zQ¹“b~|~żæžü“QŃ|,?¾!3¼ĶtϾ=įˆåžæžŖü>ųåūBüYż¢u»Wā/Œu[«%3G§Āå-ķĒ ½ zŽNČń–hM¬¢F9掩¾nz×”ŪSФČםźCJjnjć–āŽfrŹ]Y׎ ®Xžõ„£¾8ž!׊M™JW5£³ ņÅ>OZŌ³Ņ%’W.Uļ“üæZAÜōĻ|:ńWÄOh¾ųįķ_Ğ!¼øŽŽŽŁŒ{Ųćēp8ż~ŹæšA_ixOāķć #ž‹p.'Š Œ³»īČPŻż+ µ:PčoĮ?| š“G³š×ĀoŚų?CŽ!‰`{dśqļ^…„Ćå‰/6{ם9–o®›=é̑'嚎[Co؈Ž;Ö\ģĄKI&Iō<õ¬M[|*ļµäU<…5V³»KŒŪ¾ļl޵ˆÖW6Ś„ČĢ~ŹŲ*IéJR±QĢoėŚ~‹m<:“ˆ>č99Ɠ¾$ųĻXÖ4ó=ĪŪ-ƒÄmɳT‘ŗ]ω_“ē…žŚŻYčP$ŗÜH^9RL*09Ņæ$ž,žŌ:÷Å jźßSKÉę|° w¤Œ=~•¼cŠzÕÖ±k6½eycm*nó|нŽkōoįĆoŻi÷^ ×tßjļĖs ļy8¦c)t>»š×†¬”…Ük įqŒc½[HїdfŽd=¹Œ¦ŽĪČź6Аš¹PvąŽ1ė]®‹:\¼“„@x<ˆÅž…qįĖ+XŅķB`ŽO­y~³ A{”ĘĀÜ:Õ¶A‘¬Š®’ēS^²L7Ŗl|~t HÅŌōiīōYµŽĘläg„yåž‡ØŚĄ»ī‹Ü!Ć61øūŠ Ļxź}¼ĀyÉqc\7…Žę-Lšnä€)st(ōūK- jš\Ėj±N0|t5ģ:†Ó <%@£‘Ž˜9w8ŻVŹ;»YŁ‹J~\˜ÆńOĀż W“™^Ņ{;…9 ½Õ9F],Ē»™%…±œpĆŽ½£Ć±É,”-ī`ŽWł~g Ōž+)C±Nf›=źMƒ"åOU9żjI.ŻåVtÉčŽõ)\Ķ–å¼{2·6般0AļWm®VąƒŲ֎$C±£1“”BŃę!åkWī/"’ ±ąSŪŚ¬ŠÕÓ®!µó`ŗ¶GB…H=ų®"ßKŠŚ[‘¢ÄX±™«†ą\·ŽŽŁ&ģ‘\ŒtÆ*Ōå‰.ē·–ŁmŪļ+c_:ö8Æn R”ż—8'<W|SšēG²~”¤źāF ęf&Į_ØØŗdŗlš]܉ö»¤IWųÉ刭6y“R$rĮqĶ+ó­OJ“7DéĮ®P^GįTWW¼ÓŠ[ĆņDIĻŖš‘r[’¦„ĄøyŽęÉāµ./¬V6Wv9Ķђ·‘c `ėƒ‘Ę+Ų|ā(õ7·¼*“ĒœßxP8ļ¾›vŅ[įķœä3(ę¾t¹ųmą{;Öń„²6±»÷Ó3żāO§­ŠfÄlŖQ•6üøS]>dś«$ &š[Īe)­ß„ī4k)'hI‰¹$®qō®KĆ·ņiśĖ•*ČĆż[ f„;l;„gØėW ńY3+7˃Å|»ńWąĪ¹}¬ŪŻM¦˜-',Ł6ÓŌ’õéó±Üī|'šóPš=¾Ķ>āg²š1.HĘ:WQšĀeŽąpk9\ĪRčk^ĻäD‘‘ŲćŒuö¦Ćūå'ģĖƒŒc“Dcc2“Ö·:‰ņ¬ÕUÕH N0}k§šdŗ•°·Õõ¶”l)# ŠśÖ‘bU;_4kIą·ŗ²6ņ«(såą‘õō®E×,4ķ@ÄIØ8'×õ­„Ģ Vhcæ’įY»’xõ4ĖFŻ!eYT³p6žµ€©a­\^?.L)+™;֕“Ųź³Ć{l’OĢ;P‘”ž¤o—¦ķhšWUĮł‡J‚Ły=vśÕŸc˜Ō¬„lÉnD`{}ź§s£A}jL·%éķX ·qmlĻ2CÓvzÖ’ø02ƒ tä FŲæm¦‹€v£ŗŽ3ŠžO ZŻCŽō¬ ‹¹ĶŽkśot»›ż.ź7“Źi$ˌ§¾kęų“żuln¦¹o*ķ2ć©Å#hFĒĖ~#ÓukŪŪ™ī”[É¢bńlÉ=~¼WÓ®ll4|±[›ŁbŁ–Lēž~ črŠūæF³ÓdÓ”›Ģ6—-r'"¼YЬ“łīęŠXā‰Ÿ,ć®{+)īc)Q|-.lµāšŪå›|ū~ÄųbņÉÆnt—™ƒ¢ł˜`B‘č IĻ*‡³ųWU@øŸQ¶`$*‡%ż«‰Öō +ā©sØĖgö6W;<Üu=Ę+{óßĀŻ'Ä_ÆļG›P°·˜°’ę96‡\ōĄź+ß4߈vš†„ š­é·”‘Žyī;óź}CqįæüEžĆ½ŅQ/mŽ"„F’źĮź=8?ʾVń-„žų†õļü%q{›ˆÆ ‰cqž„rN{V2ÜŚščŽ“I‹Į߯4ó§č_Ųö÷ĪŚÉūÅSĒ~Ÿżzņ’Šæµ/†W°¾‡§—Ńīš6Œ}ÖÉĪįŠēUu±ÕÉĖ£>`ńdśÕä#SŌLQ%zŻŗÖĀ?>‘ćøR)įšX"ʬą$žAü…uS•Ä×Cķˆ8µÖķ“«Ai„Ū4iå&3ė“Ž¾{Ō¼_iįŻR>I-ģ¦bwÆ(§=ŖĪw¦šģ“ųēþ"м3|ö·-Śbm§c6Iź;ņ:ą,|1ń ×ÉmnŹž‚M„¤Ć—\õć 4£Ž⟊o5=KO·æmķ¢ĆøtēóÆZų}šę’Ē^Õ_G½·²Ō-Ō<`¾Ó)ō•R4>„ż™žųĻWŃüG?Œ­$šŪēHwpē·½YŠt/| ƒVšóĄ>Ē$ĪźŽÄ›‰P6 ćõĻ«āiŃ~RĄÆE˜®gKŌ’“_P‚ŚÓ@»Żpƒ4Œ§øļü@ŗ¾Ōgš­”ÖŚ…Äy‘b-Č=0!Åyž›ā?‰ŚÄŲ&·±Õ ÓŽńCłc…8éģ;“Zr„¹\Ŗē鿃5wŌŽ}I.d)‘}kāoų)Ž•®éŚßĀĶ^p’aø¶ ob$Į.G®+›«Ö¶=£ąg†|)ā߁–:z­±×-(·ü¶ĄÄg=xƀ~)ųEnļļ¼;Ŗ\GēA9GĄ’AJžń6=«ą×‹Æü5¤¦€·×³ŚD†-…É;zcłWÕ’la¶ńāź ¦[KopP$&CĪr=óDž„«n}įā/†Ž»½Ō¼E‘m¤:Ĭ Q·Ķǧ§Ņæ2~+ü*µÕ5łµŻŪ&wł£Ėą6yēœcµÄęŌ¬5dxyųYqąÖŌ;ŠĪa®bŚ8žźŅeœ„®B±ø’ėVsZ:M;Ÿ xk↙į}hھ·ŗ]å<°ą‡Į<ā½ž'ÜkŚ“•-ī•,üĒ œcõØöeĮ5¹åžŅm|7q¬kŚlńŪ³ ŗ‚‡p=3Ķ|Ń©]ųkĒ^*ŌõŻM¶g1²1ĆDAēqśÖ©XŁK©½m j–vw~ŻŽ(  w‘ŪōÆ*ų«ń÷QŌōL¹±›Dń."¤aóyąž™ļUgŽ? üPž:šeŌ鑿•Cį·I`rĒÓ&¾lųƒ¤xĘĶ•Čą9žĻā­Ź“$R+ b‘x1°9ž^ąąŁÖēOšŸķßį-bāįļĮoåXÉ+ Ė㑆’Łį£ß¬Ģ$ägÅz‚īęį"ёLL£!ļŸŹ¼ŌűĢ*~U8®Śo”É8–<ä±lPGwśŌ7–ė½wǵjŽ~^„ 2l Ø<µ8@%BQ•Ī{f5Š @#e—Æ'½]h@“9cHD8s• –ÕŽ7˜“üŽšr:MĒ>$ų_ć? üZš.„}¢ųėĆŚ„„ƒĀ2Ņ“Lf;‚āæÓæž żūVx7öĢż™¾üušµå¤’jtpk6Č~{+ÕP$\䥎z§½DևdõF®°¬’X§ĪąW–ų—Nŗ¹“k«{{{Ō‰LwH3¾& ū`×HźYłcāŸKįæų«įݛ¾Ō„7ś+L»VÖLc Ą'§N}«óößųÅ’^k“é­¦ųžŽÖ]?TGŌa$ ÷luö횘Gøʿм9?‚µżCĀŗƒÉż«j0Ń2ąŲQ\»K-ŌĶ4ģ^SĘqÉ•ßLę© U²XŖ6×Ųīlö­9ī@’3œĻ¹Ø¦WÜp8Z b8Ö8Jīq–ĻÖ«ĻedTmŁėė@ÉVBūA\0< Ōźą“»;zqڃ¢›±zŚåd&īƒÜ×č?ü öĆńģ]ūOųs^“S…üŖ\Gk©Į)*جvēwOجÜu±čAŸč1šŸĒÖ~ń^™i¦\Ų?ĀæFu_]@ćĖ“½d$āŗ£¦3L†ŚPĢŅmӚµO+ŗ*ø,Č+HĘē6Ä?Śsų~fFi®ądż+Ø“ń’Iä¾5ĘßL‘Zņõ7‰™ÆjVWād‘¾\®Ž¤{Öę“āŲt1.!•_'Qģīn‹v^%ÓµÅ.äŹŽõ—ØčFRķĻ­W-“2”ls·6p.m„ņß¾HķX×:gŁĀ¤#Ž€t¤d婟A#Į9q ń^£O+[„„£W…ŌŹ76†ē ­ėśŸŪ'“»P ĻqSč—öņE4ė(—„ČjnĮ__Ł“2žį²²|ÜUżvŽ]»X¤Śzn ō§Ź3ÉcŖRåMö>{ųGećŸkڵΣ ģ6JŁI7c>ߍ}6¾ŸNŗhīāŻ9×U<%χĻxŸ•ŗ4™Öiŗe²:ŒFWŽk»ÓÄJĶ‚8É®Æed|%L法ܶ6ņźŚRT©ķœg"¼oĒśÅ·†ļޱw«,r•VĒʬO__’Uy؊JڳxYāZĖń‰ā_¹-—™„äyæaø‚x.`ž!,sĀŪ‘”ņ)‘ź7v·mšĖ³h*Ąä1ƬZ?Šā Xŗj„)s/éžZ®¦ŖUĖęüÕå¾"šŽ•®j776L–fA¹ÓfąĶŒt9ō¬®}äi©+žĮū5źŽ"ųoÆj$ń¦ž `­°lŖ?vQŠvā½/ćGŽ|;ńXYŲmhSÉūHi™GBN9¢HŚŽ ʧ:>PæšõÄwĄ“¾Ü}Ü„%¤Ø$ū+ˆ§‡ę*ėćŪ=k DõčŻ y¦’iYĒ9¶0Ü’‘§ōéZšEŌé$VĪr0–<ā™× jš¤1^IhĢ:U» ƒ¶óeY3ĶDŁŅ„s®[†lœes\7‰¬EååŒčJO¶Ł`ØĒ?Č~Ućā]Վ ÅsaēŚéŸ¤’ <wØųsĀņj6ėåKķ•?‹±ĶzŽ>6ƒØZiØ¼w hŻ==Ę+ĢÄŠ?ĪÆi­/ų±m‚uk¹k°Ä›_)3H?‘Ēć]÷Ā=a#šÕę¶›(L‘»ę{m„†M;#ŪĄ7c–3Ö|uāį/…®lķīaœ ©.*qČāæDG…üyą½;_‹D’öŌG"#d¦N??jū,¶£µ„Æ'‡åMĖFź6W6·‘ƒ»1²:ąŒuČ5ē÷‡5F„önŲPFF=Æq;źmOœ“1Ÿ”™4ūŠĄ™ŚĒ zg5”ąˆ¬”²Ž-i’r6d$oLk*‘;£IĶYļž%kžžÖ7Z-½ķŌˆ‰Ž ˜ķžĘø«’Žŗ§Š“e}Ā×H¼‘>Wm‡ŠŒ×£©ėaųbUm+Ÿ8\üsų±į]j$Ō®m q>ó–q2äG?Jū ž 1ą? ų“ö]ų+ū^ų[Ɨš_Ä] {hīļ4Ö^ܝ²-ĄA {gꮕ-g»™e‘Ė1X,Nüu#’o]5Y\AńĮ6Z¦ČßķQ Éčäg“ė^9§‹ R ,a$ČąńÖ«Łh~džƒŠpgģ‡ģ¹ūGųCWżš~8~ĻßtK;=ōŪÉ#šŻ[I\ƒłó_ČēĀČntĶ;ģ Ö¹“½¹ƒ÷\‚¢V+ƒō"–1·ߦ‡åžä?Qā<ѧīŌtä¾jMž,śrīų¦eLĢ3’zUrÆ)lńł×‰R>õŽ)Ęē]o/šŠ…:GQHV~a€ł1@ĄØzõšœ×Hė> YhšŽ Ó|B±Ē¹~SŒąōĻņÆŠ_ |5ųMā–Ō~|_šŽ™{ ß+@·^@Z1čė ±ųśc1gąükļ1RŒ­et~M|sų}ū/|lמiš³ų“ĮL¢÷GĪéc¹ņŻ»‘ėްu z+k6ZŹe“Żł¬$õgģ\#š¼fž*[ĖōvŠ/i 4β9łIöÆTҬ„–ēOŽ1æ.8¹«‚>¦RGĮ’&¼¾ųĒāuø,»Yv:(ÜrOē^ėįY,_Į—¤ ģyq =WŠž¼×”Kcņ\ö uä—C'ĆņĪĮ6¤¶sŪŚæL’cŸŒ–¶ś ųaāK§°y63ČNٱŽ2O^¢½*/Sęó,?5”öæÅn4MKAÖ-īĘ0²“|ątĒA^‘§.ā}.¶˜īPÆŽ^¹ÆE źø$ÖčńOˆßļ-¬äøÓH–Oŗ×ēŸĘŲuQįʖXŚāKy•%ūļ“’ė®:Š¶Ēź\/‹jWź˜nōmkĀ:ŒzŲŅ54…Õd`#8ē&æA¾ üpŠüW„Śų[Ä–ś~µmŽ!+ąJ§ųsłÖP‡F}LVšāĻ Ūy?h…¤ p}+ƒŠ¼C¬ü>ń.•ā’³A­iR›»Fō`3ƒõ®Śh‰SR‹„ÕÓŗ~gėēķ—g排±/„~*xfł“įι —ńM’J vę2€H® ĘJž`t+J[höŌŪEū‚Čß/Vł…¤“]>æ‰üūōpĆRĄc³L¶›æ²Ø—ÜēŃęÆEb^&3pXc¦1T<«¬±Ę†tĖ}솼y-OėŠs==BĘ@v½{U Z?0DWļÖ¤ŅOBž‘wäqĮé[±$qœćęXó«nxgŽtŲ“½p\Ū¶Qˆo”c5éžøK»e˜C|¤1ėÅvŅŠņŖĒ©öļģēū[|yżœī!µšgˆäÕ|#ę śMģ…‘W<…,N+÷wąü öxųe„xkāG‰l>ųžįÅ·Łu@VŽéY~č§Ģ@÷ÆsUu?‡~‘ŽŌĘNyöIÕzŌ‚ėżčł÷]wß«ģ¹ū+k3Ķā–ų š7Wŗ¼āKųü9g'Ś·r_xC»=s“šųļć?ģ=ū|^šĘ£¬|(_†Ÿ ¾!éŽeÕ¦­į©a·ņäļEsl„+FHŚAPĄņcßģć#łƒüCĻņ|T~Æ9øS~õ6ß-ÆŖqwµö½®žĒó{wū~жĒķ§|6ų}­éš2išÉw«ė²2ĪŽ“j”#;™ˆįśęæ_~’Į ü)£é"~Õ<Ō|XÄ[L²‚+toīŖ6O_zĻźič^ų‘ōŽEZ8Z49źJ*Z»$›k¢½ōgӚü'įÕ¦“k ų‹ćWÄmsIIwH-­į²šTĻŻ2&HśāŗßĮ;>ü1ų)ńV[x£R»{cyo>„zn®,Ł»€võ$T< µ±ųÖeō§ĶkĶC JāŚ¾ķļŖ»ŅĻmÆmµŌųĒž ;ńż¼m®Y|LųquŢݒgēG1ŗīǜ~]ŪOÓ9Ægń®ƒ’ÜųwšDé$“šöń6ĘĀ8.¼®ŚŪQ@f1ęž<×J*'čŸó pĄätåŠk›ÆŗŸąŸW„‘üčųóĒzŻļŠo'Ń|M¬Ė”É#ŁĪÜG„g¬rjR„Żį7W@`<œ¶>µĮ7ŠžĀĄ`”#÷±ym–ܤˆ1Ļ8ķ[ČA ėė\Ī7=ŲÉE%ž™°—•óō?v·ģą}‹Gä3]Ō)õ?¾‘#ĘIdųg¬]äüķ¢üuó·f^ņV±õ¬ŁeŁ+į>Jõ©ÓV?Muč&Į!~Qցi$§n@¾•ŁXē”ķ”i­ĒåĒ>½«¬°±Ž=¾•g I-‡ÉJX©ČęŖ@ŃO'–¤méƒŲŠqŹ]K“D R nZĶ–Ö&˜ķ<Õ)XäžÅ[k&WiyhŪE<’(`7w£™œņv;M7GūK³‘ōą÷¦ėÖŚ]»Č&·œT™…ž£ĻĖzóÅjo)…ĀIµM$I-śJ®Ó¹{õĪĆ-»^±’Šć'E738Ē[3§Óü-æp‘FJÄFwŚŗū†ęŒi¦ŠeÌVRŖŽˆŲéķ¼;„ŚF–SĻM\_é­ ¹‚ÖęÄ ‘[Ź¾@źŁ8üėSĮńĻÅßAįŸ†¾Ōu¹^A·¾Qū5æ«3ō8«R9źLż‚ż›a?†æīō’|K7?>!”&8Ī ©ō Šāæ@.¼)%½²G«_Ek” żÕ¼`"Ę=Œ+mĪŹę®‘sG§‡-$Q;ozę»-!4õ‘ļ_ķ·]zē’D}«ųÆU¶Ō>̐5¶ŅH#£ ×m¢x‹TŌ>ÓTĒ'­KŸar£bóUŽŹ#>ć°5•eeŖj[ę½qcÉĆ63ųV@£ŲžęöūGµ|['ŲĀļ AM¾»ŗ~uó~?iŗ “ŁéwŻź;~W+ņ#z{ÕF75P?%’jļŪįĀ“q«|GńŒZž·,lWN‚Q¹YGŻĘkł½ż§æą¢’¾?µĒ†ō-FėĮ? ę_*;[äČŃg¤œœć·­wŠ Ū-É#ą3²=̤™›r–łŠžW–lc«ÕŒ,sŌ«Ų­qZ6P2E"å3½¹Ī좦o”Å&Xč¤rIā—ģćå%ˆaßŅóWÖf?%­“ ,æ]«Ķ~ŗžĻ?šG/Ūć¾…įačšōé-ŅŽÜ“7B×wĢĆ ē„aRv:éĀĒõū-žĒæeO Yčæ |§¾øńÆŚµ;¤L\ ˜ŒŸåõƧ51ؒāf’[ž§myõ*Xē­m¦ŌŁ™#ĀvČÅjišoŲ¦dø FzśW;`unŠ ’­G=ÜeYŠnĻjB9‰ud…Ųc$ÕÄ/Ļp3ÅtĀ÷Gä’ňŚĘ·}.™¤He‘ŪĖ;å9Ūėž¹­ß†žŽŌĀu0—_xæ{ė[Y$bĻwŌü/ā^;(ō’ŽŽé ‹ĢŒå" ūs^ÕšSąĒˆžx¦×Ä>¾—Mwuóņ ½p=5œŸc£ō›EŃ/µ&K»‡&Vl¹#©õ®ŚßJ{)Q¢øuĆ“Ž I„ßCŠ ×ģn,¤°]žnō+ŸĒ5•nÉa&į'‹zPf^¹ńeó-.H~ZÆö¤½RŁłoJ«˜ĖsSįˆK…Xm½Ü÷{›hįi *śjIö)?ä2¶’.B88'Ó„yÜ·^%æ½{]ŃŹ…Ī 'vā‘Ó u9æ隵Q©½ĮĘv°ķXŗ%ķŒŠc‡zƒŠŠĖv\¶:KßXÜl{|™Ē\÷ĶtŚg޵āŽ=fĶŪFŒółb¶ŠčsMjvÖZ֝v¾lŒ#‡¾īøÆ0ń‹/ōĖó‹ wVĪŪW=žµ£Š ⤜Ėö‰/¬ä³”Œ‚£å&¶<um©Ž=ŖHŪćõR1žpk#dW¹ŅŒxHœFį{ņ 9mQT±Āø„ KĖD–Įœ& ³tk½*’:|™·½S“–nžųŖHÉyŗæŠtæ NńjŅJˆrMµ…ŽtķL‹•ŗ¶Īw©č*ż˜Y³ ±ńnpźZBNļNtsIm6]0‡=höeYŚÅm”)r¹ēҼćĘgöœŅZXŠÆŹéڳ4G Ų]ĒiØČ0LžG×5³©5–›ĆŸhFįøü(Ģm“ū[ĶA K¹m¤cŒ ā“&²Ōōė…·y¾ÓmÉŻŽ“NźĢ #ÕµMGŗŅę :®J8Č>ÕϦ”ż”<’\A¶V9#ŠŌ5Š ū–¾[Ų`ŽxX€[8Ą®Å<;l`I”ulÖ2– pŗĘ™oØ­Ż”‰øc5ģ¾ Ń]>9œĮsr;Ž}ńB˜ĢXĪ!ēF²”Ē*2Ex˜±ŠGä˜Ųäąw­n#WžČVÅo7¦ķĘqśV‡†,£Ó/Ķäøaó`ž?śÕœ„Šiģž.±Ō4ę“–8üż˜9ćWŚdwwSIMjŁ;p1|Öeņ3ŖŃõiķ-¾Ėynóˆ×!ē5£-Ģž ™døx—Œ¹ĪŚ(ųŽD°Ó€µłŌīW`Ü chõN61‘Š…I„rīĖšßŽ Ūc,=꤃lćRW·Ż™ł€ōį°ßźq”ÜĶ žXVēoF­=*ź(]-§`ŠēÆ„lŒš±±­Śé¢Õ%‚MŁĻ~®/Ī‚6 l죁źi“cJ÷Ä-=ŠZLc$žkŸµ¼xC»Ē»=zP2k­.j#ö©„dõĪMr’a†ÖäZĶ$’I G*;Rå)"(õ²]GīŪTœf½hźŗ6­įųķ]a^§Ģ óg «Q6G‡Ķą›ķy5hYr»²üŪsŅ“b†ķ§Ą«¶@­,QŖųsT†Į^X]deŹīSó}+'O±¹h˜“n®9ۊvåŸ5æx:ĀóUšå‘BĢć(ƒÜuʔßAšĢŲnā¾µœ ūJ I÷s޳47`°Ōķ Eb&‰A95ĶR–y.ąŪ2œ–ĄäJ †ēS¢kQX˜`ŗ¶‚ R§ =źmrńŻLö¶į’IUć¶5HóļėѵüĀō£Ŗ2§æ½{f„©č­§F„īȹڿwÖ…"œOŌ$·YåfłQ³Z儸‹Ļ+!y” /#ńŖ0“čz†‰cwwrZ€\œxā¤ń‚RŚIÖŻ^å@8Ī1HžcÉu:hĢY#=sŠŠŪO1ÄĻņóӚŁüįų‡Į¾ ųpšd¶ZšÜŲ́–!+>žłŠåōOė(ÕßIxct˜ ć 8ĄĻć_S-ŁĮ·=“ĮzE÷Ąķ/TMbŚK‹{ˆåxę' ¬{dppMp~ń|IæŌ4żjx­.%|ęČ źO§ZÉźl„sŅüšÆ@Ńį½ėĻ<ĢŲ·*Ą Šä|k„_xgÅm„^\˜ŅH1œcofdŲŹ× ³»åŽ9ąuŗ#ĆĻoxkįu÷öšėŚ µäVPåå]¤ńŽž•—34I[SŁü1ā› éꄯĘׄ”‘Œō WĪž=ń7‹µ;­cKŠŃ †œÄŃäd‡ōü(ŗ‘(ž¤iž4ÓiõŸ=ōRŪ•öYūC^’§x6}SĀOā=%毃·-Ó=*äф ·<’DŌ.‹Ę·Žm™³®īąā½ŪBš¼ÖP÷Ń],Œ0Qzóė֎sCŻķ4y!¶·‚-ņ.ѳ+Š^Uā)“Ǿ²u†ß;å ‡Süźī8Ē©ō?Įƌšą·Y哎Ü8ĀƃÉÅ} āłü+ń4Léac=³"ü™EP; ©ӫeØĀ ąÄŸRӉBPG) ĘqǾtųńSQŸK·“½¹†āÖ ‹yĀ…-ܞ§šćŒ åZOVx’Šl ×`‡ģ·¤są²ĀøŪķ^«hžń|)n’“¹ĶŪÓ؟ƻ©+"™īQÉż± KHŖ ŒēžųÆ(“L×|I{«h÷V‚8“p^ū€ļ[ÅjCZæĮ§Āo,z‰itü_l{†x#ņÆŠ‡ž0š·Ä›Ii“³dwFĘćĮĘ{Ž•N*ē;į¾0š_ƒµĖų~+%t8U ÉbyĒįĶ|µį?ķ†ž'³†iģ#‡PA4W#‡ƒv6ŒōćæÖ¦Ż)·Ōž”¾x_Ą!ųKįĖ_ėšXŌēµĀė0iHĆ üÅż®nn| ā=95‰®'cnDd˜Ÿųė\õ[½†ę|“„j¼šŹ}jś { ¦ņĪѹä ‘õ5ķ~"Š<į†^5Ö?Ń’·¶ėN“g¹ۚ|ĪÄZē~É>šÆī“;•ל¹½™Æš5;,>÷ęxÆ„kĶÓą­į?č–ŚśV”8A‹ļJ/Ē×?iRv²fܽŽwą§Ēo xēāh6šCY˱Q­²UˆäĒšöߌ[@š'ć𧆼@–£+Ū·™“ 󝃦³«č)AŸ•žŗÕ<·¶¾Õoķ܈ƒ9 ‘Ó„zƒąšÄ] ]×5ŻBŽßā”…ZóW?ƞsךŌ͜_‡u»i¾%&”D±éččÓĻ»¦== ~”hZļ†|)ŖXi×W6Vڤ’©Œ«ņN3€jdžžž<›[4™Ł IŒną·’^¹9|.Ÿ«,·PÄöņ1Żęøź%{’|“ūO|(ń ŗėO¢źYhNØ·6¢@B±\†L}M|eą­_Ā:ōŚ™šRćęvĻ<šŗu*.Ēџ > h¾9‡SŅuU›NŌlŠmb’»Čź§Žāø_x3Ā>.ń óŪ¢ŚÜ¹U8ĮČ#Ņŗy»{KhzWŠž/…² NyĆĒoo€YĆ}}ņ?:ł;UŌ®ÓQx5X$ĄyYČÅeՙÉÜ·įKi%Ö©K`x ŒWŅ>"ńōƆ²?‡“qŖĻbr¬aa±÷«ŒtŌØÄč?c’Ū÷_š‹-<ā_ź÷·Y’26ē°ĶzßķĆį_üKųlž+†Öh,^åī B“’ vŸŹ¦»²LŃčxgĆæx®óįfį­B ø“4‡Ė0Nœ®?ˆg‘œW±|.:^‹mĮqJ‘°sļU*žöƒ±äæ“f„§źŚę™g¦hŗtM—¹•Ęęb9ĮĻÆé^/ kšFˆž!²Ÿ_}>ž[lŪŚ‡;d$F:UAč'.‡žųGįÄ?źš‹;ĖMģZSpņåGEBzWéĄĶST–{ĶRŅĮcEµ·Ż÷¤‘G/“Ų’]Œå=mÖ|'ā]6ŽMCW¶†=œ« łY}ĻJł›Ä <'{ąĶwĚńEܖ™¢pBīĪKcŽ‘Ģó_‡ZMę–Œ—’ØI IĮ8Ūž3]WÄ€°ümšV½y &•ućm1„Ń¹Ā«ĒŽU€Ēx¶x¢ŚkĻ0YÜÜʤG÷³œfµĻÕŻ;S·Ōma¾±•¤·uS’0O­cuē+ĄD~F=óż+ !)ō>aż„|-<~ “Ę:U‚ÜIoū«“Q÷Į<9śå_łÆnČ*§ŒĄ¤uSØ{—Ąo·‚¼u¦‰@M2żšÖć.<±øc,¾¼ž•źŸüØxCÄńkś-Å堂ā;ż:śĆ[ȇxąuu¹Õ źlšNŚŚŚóöFšO‰µ¹Ņļā>‡éśÜ!Ć0 c{cž@VöĖzWŚ‚ī+y¬nķ@āpźW‚¦±Øµ7‰÷†nķü]į .ųÉę<‘[ŗ·æéł×|Eų9įĻ‹Ÿ~!üńķ’ßųCĚlŚ}ҐŻčT:ē 0ĪAĘrrΚ’q{2?ĶŪö“żœ|Yū7|mųŸū>ų§Oø¶Õ2xEŽ’@w,m”*IČ<ķ#ŠūWō·šóĒV7š¦­Dņ£+č÷e”x`Ćš®zŃÖĒg)v ;[ ßH5²2ŪČõ®žĻÉŌce™”¹Z „#!Ԍ`Šąk”6?…?ų-OģE’ +āž£Ŗų^ĘX¼<#—\Š““ua#“5Ø~ę$yŚT÷ÆēÕɉ!ø¶i?zKį‡@}EJģUŗ›¶~sF NqہZŃŚ3@e‚SĮł—ŌVR•ĖŠīhŲHgRqßĀØkŚdr«OmaqómMf±Ļ2k”‚š”‘ąćČ=ˆÆŌ’Łkć>ŸńE‡įęŗņŁ©ŽŅ訒I‰ēš®ŗdŹ=¦V o257œŽ†¶ķo¢ÓęT•X# +CŠ¢ FśĮœłŖ#F{ÖMāŚÜC·XĢ«“ĒzŚ$'c’¾†šFŅȬ‘޹®~[–°gSŪ?­3Ns„𽱂S$s: ėčO­z„ 0H·l’ƒpėķAW9+›ū}Jį£+³“š¾"fHÓkģʬå'rTu¹,šclBŹHķŌU8Ņ{ ČäK§F8Ļ֒™¢DśŗYyQ•ć.>i våZߍ<¦Fµ»t™Ę^˜9éV¤tĘ œ„ßƟ xuģÖ=L“’65<“\‡Ä/~.×E¢C3­,rƒ…L§Ųč…&|Ćā}{Sæše¾œÜBÜ`õĘMIŒ“l‚;{ÖNGm8ŪCĖØ_[µżÄ‰ć8ᇸ®×LšÖŸįY–k;É%Ś2›Ę@˜5”Ŗ°‰}cØėipŗ{Ėg+H“i»q' ė_T| ż•õ[›“×eųėń: ZĀŗD²Gt WßѳĒöÆĖß|DƒKÕÆµTō÷$—_½Ļjęīwr£Čuoź¾-ŗÜ]Ż5£&ĶŽ}kwCšäóĮ¤L”¦GlōÆS §Åq^w=?eļ3ė’†¾ Ó|=m,ÓŪ²ÜȀ P'Õ«ÄF Ū$ ļ·¹õÆ^Hün¦2RØå#—O*9ÕłzU“ž8Ų`ēŅ”©Ü^טÕҤūLķģB’qŠWń·įt^*Ó¬gÓ”Ÿ’…Ž4,¬¼rzs\“”}š8—OTs_4„м<-®døwD7č¤œ}+ÖMĻ€,ĪńåŽ›¦¾#IķÓqŽF8RWÓÖ¼œNŹčż§Ā’19>6*nōed×mµ^i|gą{Ż.ķ.-µ½&e-ݳē+ŪpźµxōŻ[±•CĖ“įŽyÆ„¶?Ņ܇8z1­xÉ&šó:Ūkė,£™Æ.ņwDÜWQ>­„Żé±A¹[…źŽõ1o©÷8zŠJę r”%š2$CĮ?Ņ™{mi~±,šC+Ø;[o#5Gc††TV·Z~Ń#¹‡9*Ē­djM§Žæ“qé—;YńĒcCŲäNR‹x'QŌ¦{˜ķ…ķŖ ‰£$ą’Ję~Ć©i×Sł‹rŃU—śWG”Tń‘ŁTśÄ–Śh•WŹ— ečZŌ5KOµ•tią9W—ZĪĒ&g‰’f©Źõ³ü™ś¹ą;™4oi:Į™Š&3ԃ×ō¤ń_Œo¼fö×v¬“U1NõŌčE³ųß)įOi.i->DųĒć]kNÓķ“Pž)ībµæ?wœyā¼}>&k—r[£Él„mŹ?„`•ī~į $Ń.|-u æ‰-ͬ˓‡7Ó5ģRŸCāųwˆD©MŽkCTšĘņĢßieDמ‘ā"Ēā†ßĘ>±‹DńĪ›ŪĖ{vŲ—ˆ:¾ŃĄ>柱śv]UčĻu-aµ]<<„žļ‘!''=ĮÆ:ūś{µķ¬--¶pčNzÖ5#mŌ2y{¦?Ä kśWŚ£1Ē}DG!Š×Õß³ēÄ=7Ē?³Å€ž<Õ ö7šl©aąŖīUOįłį YžŽ}–¼V ’?e'žžm]|Ļ‚?g]E×Į—u ųģu‹[™8Üą—¦J_čŚöƒ«Ļk©<ērøčĀ—=•¼¦×6§ėWü’ćĒĆ’č’¾üLų_ \…Šdxõe7Ż[œ©ŠLŒ±ēµ+÷6Ś&‡ńGć&‡į‹y¬|5kā­B=2Žf;ā¶óŽĄŁē8¬q‚?0ČrÜN‹±sœÆJ„8Éy>kYżĪŽGqxu ›{)m1ó6Üäu­u޽dt†ģ}žU%X÷Æ&¤µ?oĆŌG¤ĄGøŽFkJŃ¢“!”„)G©×>ä’H4[»mjŽ·hą^2=+č/žŅžÖmLåĖ®„jĀćļ¦Ž9õ¬Ü7Gå\uĀ‹8Õ§ńGO‘äüQ¢üN×W–óķŗ„CĖŽVXØćņƜüWążRŅxÖÓĒnFQˆłMsŹ–¬ōųFŒš8hįg²’‡2t V{.ÖuŒĘz¶zWµiZ¼vĀ B)ćŹy=qķZF6>ŚT“gĘZƽe¦~ŠŽ ø×ķ’mU"8dnAü {÷„“«Cā{]5Öī8D<†1ģ~•čŅŽˆüŸ4«leKlp™¬o›H»O"ī.OQųžuōæƒŲYÜéz¢…ŚÜ,±¹ź¤uĒė]QŠŗ•DāĻŅÉ~"ŚxĻOŃ®e"b©¼/F`9>Õļ°µ¶Óģµ "ńŹ?- ^Œ$~e™Pä›Go}k&³¤ŻYł_¾‘ §ūŲāæ)iɎ£éś}͌¶Zż•Ųū@C(ßĆ~§ņĻ ąŹÜ³q¹źß ¼Y üMšM¤:֗¦^ź–'ģ®Ž;c'„s~3ų=ąłāžk]5lnKnV)ōaX'©ś5:»oµ‹čtį£ų‚D¾Hp!øsĖ/£Uæhk-ŗjö ķ*įz0®Šz«ķu?x’ą˜Ž5°ųĒū!j ¼BcšūA–ļĆ÷‘’6X…¦,rÅöžsšģ„±ł…rčWž&(©Ļāioźzģ½ūJ|Tż‘ž!|2šĖTŅē‡ģš®‹~I†ņ,ä2·Uu$Gė_®Ś_ü»ĶŃä–OŁūN‹Äi'ĢŃŽ%‡v.ģ×£O¦§į)żigŲŲćiVt¤—+÷y“Kgŗiėg½ōķ­m{ž Åeį6†göwŌ5 ž0ĀK=]Uō;ŸšÆ5ń/üĒā—Ž“=[Bš’ĮOxn Ų%¶2]_É<‘FźFz'ö§QZ j‡j©ł« ‡±'ˆüžžÕrU"& Ųdm=(9fś¶’æžņźr _ū*Ē `zć„4ßBܑ³£«0GN”Ū;rĄ‰åõ;!ƒŹ¹R#gŒž1Ś»›mD» ddńČØœŗóŁŁŚ|“<ŽkÄö‘ݼr+–*9“B] Ģ=#H„i&)^•.½„¼@EpVnĄƒVL™…£iϬ\Gl¤¾ģ‚Ž•ģŗĀż<@~ŠĶĒõ¬źJČz•¶Ÿc¤²$I²š3ŌÕ{żA+&qÅpŌ‘Eg[†ņåR¬½Ö£›\/—CŃģļuŻušĪŅ#$ŽO°éNœXœ½~Į?Æź’ŃžÕśy©G5œJnf‚;÷ ŒlEEpĪ„ĶģaŪßOxé›nÉBEt£AxKr<ę<‘é\ņZŅŚ[YŪĄŽ"Dcķ\ÖÆf„üČE5ˆP““m0Ž=źVŗ*ŒŒGŹhC2Ļ)ϵO>²#ˆĮcŗfn9śPiŌšæ|AšĻ‚1uńÄč6Åw“ļ‘ėŽß~^üżøō»Xµį mWs4KƤ;[˜.$FrĆ*­;ĆŚ~™iŪµ‰’b0Œ‡åH^Eķ)™„‰Õ‹)ž!‚O§ź±Ū\)™d'jFs:).ķo’@‚5ķ°bø ß[Ūj/«[£-Čr­Ę>•Qv&1<ƒāeœž'Ńo¼?yvśMĆ«y7 į‡|ך›Eń…u›ŻÅ>#—Rµ‘ń €±§¾:š×Ų÷f–+Y&i ģAÅ{—‚Wv1­Ć4w'’*\ū ÄĻń>±sgu ijžK|Ŗėڹ=[VxmŲ“Ź’‘ņ–8?JČik&£ö‰üŁ[|ę­Mw•I7˜-žĖå7Øźi¶v—śFżĻq$E²7œćŚ©A™_›øå±(&į€#Šōo>ūW¶hu8#Šļ¶ŚÖĀ9ėėė+-.ēO¼²Y%' ('rcŪŽø«KÆ-®ķY7š°E0‰©¬ßźI½Žcž?žŗņ’źńč™e™wŒh±¤by¦—ńbŅžwŅ”m$»Čņœ€łśW£ų‚;­Ć«®^i7" có"-¾qź¾µÆ*ŲŻG¹šwĘ/‰Ž1¼w±ŠLW6©óyR„[ڼ3ž_é·¶—÷pßß@Ī‹$0Å3ÜgŠģkt~€|-×l/“³#9łFʎEĆ+WKŖŽ/ۚ(Iņ”‚ 5Ķ)t2“ģJ/d 9ĘFįµŲé^ ·Ā7xć˜÷ŠĢ‘ ž×T•ÖPŹwą1ļZėmsk‰mŒ2ÆBf¢°žpķ ńŁ\U¶ššÆ ń.¹ńHń.™a Œ®$Ū^Tl2{‘éNĄz¬fćP† dY ˜rB·śQ+ kvdÜs‘żŚĪq'• g 2[“ąbpr+Šń=äVŠ]=£‹–A’t#µdkN'‹Åā}[Ä6“Ś›‹ @lHŽr§&·¼;ā}FµŠ«™o™ļ7Žb)sXźög²ZųœŽYB’mtb7=³]&™)š'šiJœ3kHĢĀ­"ļśPB$fn§éT$’ąÖąm^§Ö·935õD§,½±ÖŖĆ{c;ŗ*Éņv •loC©C³7Ÿ*ń“ŽME©ß:éĘśŽĢ]6@ł}3A\‡‡ų’ęę'’{f–ŻłcžFjׄ¼Wy0‚72̱īdŒzž”ī]X²[ėæ2X Ą÷§ióÉgv'»LJ9}ÚØČ@øńR]Ī÷B4ĄÜ2³ķµ(§A$ …ņ­Lܵ:x<-kāK;ˆÆ!ąuĮĻ#Śø{ĮŚw‡š8“ØR8Z,€£nÖŖ–Ćē95šäDUQCĘGzuŗĻ-«Į9ł:œt¬ŁŒ‘‰sh`”Gmn!A÷Jž¢“m„,°Ī©ŸN ™8²[Xai\ČÅaæaV/ 1Ŗ8Ÿ4s» ¤є.äRA1LƒŌv¬Ż.Ļ[žxŚŅh [·6%}½śVi›s«]ZĄĪ nrAÅ3J×lšD«‘×÷­ !ęņŁ®—ˆĻOZõ‹9“†ÓM¼¶Ķ"4xČćiõ¬ä¢ģxĶžiöĒxŃ=ÄńÅoi6_l&)IņŌe@i(2„2ž»į‰-wK4lń°Źc°÷¬-ĆDʚ¢HbaƒŒ7jŌå–ē \ŻĆ§Ŗ„›ģLGjć¼K®^ÜG‰å2FÉ·ŠńļLĪQ<žūV¾ˆ" ŖG͟ғģõÄ(~ŃlPä ’v¹Ąˆ^0ž×šq²ŽŠG|£rīęeģæ?Ҽg@šģw‰kØ·™ōN āL2“üė蜮Ū<ŚtŅ=?ā·ÄwžØ|©hÖÓŚD¢Hī>`ąäĢWŹžÕ!Še¼¼’åŁ[+33’1œķÉō”lΘ­­žOöҳŲH–š9 ē枕Ęü|Ӝ°ĖtĶĢqŒŌą}(ŠŌĘU<Ę~'æŌ<‹£µvq“żāOOÆ_ν'į—ˆĢŽŅ“9läŠī7A:\‚¤÷ķO˜§m2ńF…$ž,‘4˜gƒHŽMņ“ŠĶcŌõļ^§į)µ;›¶k¶1ÅŖpŁŹż:AvgŠś÷Œ4M#I“RŠõ»–(Ā” ó£mä>•ē· uāŻ%.¢ :ŗ Č5JM JǬų} CˆøKGFiS×ņö®§įĒ=gCŌum V{xb“ģgwQƒŅšõ4U/”×µāź)«Zź·fźĘņF`„#·Ó­y·l<:t_³ĆuģØ6łl˜P?„?flä|½cć}gIškeŒ,6īV-ːć¶3YŗĒˆ¼KāvĘžĘĪ;1—ĢR0 sĒJŃ˜÷H-®ōų”Vv·øuÜ=ķRé^ńDŗŌڼ‘^ݱÓ>`##„3+“’ōs»ų…,¼_92]ŚĶņƒ»ī•=~ugąĆ=gþ3ń5ƽeyo Ļ‘svJpü9śŠ•Ī…~&x{Eń«KŖZŻŪ¼3”øP˜Ėdķ9ōé_*|FŌ¦ńļʝHŪB/“‹œÄķĪ Œtź([ÜŁGcģO€Ÿļüukāa&²ŒÉy˜Ŗć¢z}+Ē’h]gāwŒ¼Y­kŗž·5Ž‚ŅĘ`ˆ?śŒ’OZr¶ćå<ÆVš'ޤšõŒ4½]¤ŅĶå•Ą8ē¾{ŠśĻHŗ’„ĻĮ:}›]¬wb1Ø&CƒóRķkŠń…ˆ>üQ½Õ”ń%Õ¾€īDKбbIĪ?O­}Å揎z/Ä]Iƒ\T¾²·#ĖI@rF*OBiTWV.§…ĶĆļ ųĆOńž™zń”5»ņĪqĪyę·’h/ xĆ\šFń3ĆMØ\ŪY {Ų c™ž§Õ{Ō½7õ±ņVāż:žŚŻõ4!_o^zŒśÕĖŃ4ķ~q¢é÷·RÉūņ±DYä<䊲yu ū]/‰К퐀dmt®v?Ļōf‰šĖā½ue/ŽÆK½ŅåŻdOŚ#<©Żź3@Ņ>ŽšĒ‡¢O Śjz.µHfɇ« 4—’5Oܾ’Ѥ/mˆ_xŚĄ˜õ¬jS¹2‰ē~/·¾Õ즘ܟ4r7Ųׁxįt!ń]ūj·2‘p†18ēuĄĶģõ"Ē­x+ögšµ…–©u¤B¶·R‚®W,AČēŽÕš>³c}¢ųÓU·±’’;²!b[õ•ÕL†µ¹é>1ńjėŽ >ŌēKi#"HÉĻ™» ĒŠ×‡ÜYj2¾ovćTš$łduĮ#°ü+K©ź{Āķ«K½nkbͶO,ó€{„}ßāIü”x/U–Ęi&%¢Ÿ90yež•Œ›JÅŖcÄæfŸü?ń‰­üU£Åb ’B©$X.ŁźõĄÆŃA§xÆCIø»°“J12ł ”D 8Įā°«>ƒöŒł_Ęö~š’„nķ$6¶WC÷vņ!o ü?Züś¶ų”©h×WśóHĻlÄŪÜ”wæCpē9 oź>5ŸVUa™°'øĻį^iń3įļöiĄ¾d»ŗvŠ5G$§|ƵvĮ¤zĀė׎ƒį›xž[ѐ†4Į#= Æ­µ]kʞ×4ĶjŃ,RS™%†ćūĆŪߨ­®‘¤b} ”~Óńx—į_Œ<ć­.ĢŪ¼/¼«ŃśžUšæĆm'ā-׋WĮzÉü#w8Y„„³‚x Ļ5Ź'ŪzĻĮ}_Į„’}‚KKD&š¦XőÓŸé_žŚ—|[š⿈'³×\hZĢÅ$Ļī£ōŪӜõ§O}CÉ’$ńgŒüAįßųzAāCkSĶžŖ£>ÕõßĄÆŚNćŭ燵© Ņ/¦‡ĖBFęĘ0? j–‚iō4¾,kž%š5립¦Ł>›rŠŗrO`æZć4ˆ÷3čŅŲj6‘iģņ“NŃÓ'ޱh$ō,Ęės¬hM®éW:æ†d¬įW<ńĻÓךÆG‹Nµŗń Š“Įoq”Å ÉŃó©ō#Ų#PļŠēØĻŸ’kH ųW¶±Ér<É ¾aBrGÓüką4Ÿ!WĢS“wĻ_ƜdĢ’5¬ī4†ÓÆ“ūØ’Ó2 .ąŠēd‰ÖźUxŲ2dą+†¶Œ»ś[ū:xś×ž [Æ2=rČ3‚ä ǧ¦+čŒ($ŒRš+ŁźGØhšxƒIŗŠõ c:į¾éwÆŹæx/Pš×ŠÆō²I ­¹9q*žA¦+"ć‚İÉóŒ°pTē”ēŠżų]®Ųüvų.<|ń?ޓس#*å”Ćgø#RgL6>Œ’‚MžÕšŸģūkųį—ŠÖ _†~6é—ū˜ŖĒt[JŁ;@'å>Ķ_ŚĪ½ee¬Ė¦K¾Č4 :ų™£x'ö„šĘ†ŚwÄĻ Iż•ādū+—¼Ó;e 8e†Fyˆ=’iĒØ­å˜3XH„ƒØĄnkJ2KDsNž„÷;ć»Ė]ÄIlō®Ć’¤A”Ø%‰ĒŅ•PŹ Ž=Š£œŠgäA#< yēó&Jȁvu9žTB]Éā˜åT’£?÷ĶZŽ7ÜxĆA¢v ,ĪŽŻzŃö›ŪmC@Õō-§‰tĖŲļģ.ć8’ŚHĪąŹ}xóŖi0‘ž“ŸšJŸŪsNżµæd_†’o.ģßǚ}øŃ|OrdÅq˹—ØÉĆcŃūāæD/leˆO©x¹d8®zČŲóŻRĪ×T“‘ 2źv͹÷׊×ē7ĘĻ…³x{]Ōu +L ą3F̘+§Żą“øćå-Ē?OZąžą~u~Ņß ī~'ü&ÖmõŪ8n<_„Ū=„Ģr(ŻsmŃ$Sßķ‘_Č×ÄĻjŸ|{®xvℇĢßšł1ü>½ėzOSžG_DTm!ģk"h„aåā»bīrÉ Žåīs“œōėQČrł€¹ĒĒŲV;P9$!ąsQ¦Öځ‘ĪŽfÕü½żMK÷€,ĶŽüPiOø°²ļ©ź+DæĖø°”ϦcÆŚÄ_²×ķąoŠZģ±‹Ø£ŗÉå SpÜ®{‚21ļ_čgš/⧁õKĮ¼1=Čųyń&Ś1s!“Ųj»r¬Ąœ!“Š•5XŻŠ––?@µ=:kŪ$²‚u‡Pƒ)ĒŽüEskĒ…5qØM>čŖĢĮ²#|c&¼śˆnGĘ_šQÆŁŖĻö›żüIgkćĻ ¤ŗŽŽc{]Ä#>m¹XH™ī ļ_ē5ńsįģ’ ü{ØxYŚāM!ŃÆ“łX|6Jg®å9JĢ3†źb­÷”ł{äWw£XÉ|’-»3̊ /\g¹®i)„ĢÅā‘eŠą6g«9#¼_“Zą×Īw’ęŌ5ū=O]BKVR\ CÜŠuS¦dėß¼E¬xjūlH—L‘®2yĘ?ZłOQђ÷[:µó]Ŗ1̱“‡a#”Å„J™Ņx–ĻKÖHū,o·U+$`d7”Øõ-tKö]6[…ņŠ6ō±mģĶŽĒ~]­Œ6¶ęŹķfįž9 (9üy÷Z†•cik)•ķŁ‚ē–Õ,ØīzVŸāw–ÖĀ&—ē ‡Æē]e†‡­ųĪ{X“(¾Ś"§›ølžOį\³=Œ«.©‰Ŗ©SÜżųū5:˜?“#I‚’ZgząWé_‡¼£iu­¬vŖ¬«óēq®:ˆžŹņˆa©F•5¶ējś·†“ē¼T‹ģńžƒėłW扜ré2Jnm`sæv„pĪ,ö”9QųéūA|vžŌŌļ¬ķµ8fāøčŲ5ó-€¹×„7³“ķ;Œ÷4B‘ęęXųa©9Ķž©¢ikŁÅ,,Źéėļ_Bij‰h#‚Æ[KCłŪ6ĢgˆŖē&{eµŃ[D,ƧՇØĮ4‚2@ c>¦»);WdĆ*§$F*8‰‘Ā*·„]9°\]YŻ#B›”÷ōÆN¶•nlĢu Ą4X§S”ĖcŪEtźK*?_jĆÕ4H¼÷³cĢ$€„ Ł®Z“Æ£4£9_CŖ¶Ņgū*E ņ•WnÜpF:bŗŸ|*šļāÖ”ŌÆ‡…¼G?gY%+„ģ}Ę5—)Ÿ¬xŠ/Ś®”-›^™F` }O〾ų³įŸųM¾9ÓuĮfd–Ņ3ņ¬9ھ‡ž1C]+^ĒÉ>»ÕōÅ os5„ü%’ā5=I 1ų÷=ūĀ^0‚M+[ø°Ņü@ųh%”a$8åO§Ö¼œ\ZÕ™āźGZ{žc㯶žJĻA±AžUżĮōÆ%øš½’‡¢ŠśŽ>ĢŚA⼨Jņ<Ųg5'Iž½įƌÜž»š°¼1D¼®üqŠõ_Ł÷āׇonōmvķęŃ%•ŽöłŠ)ź2νŹ’LóØ`©Ę-EYūRFś÷‹ąøš„Ģi£Į“2ļ,epĆõ®CĮvv×ö0€ĒŽ }į]2‰ģŅ‚IE|$Õģ¼ āż'Q²“Ė‹–c+ĘYŗžµū+ąmś²YŽl>K®š3ĮÕ4„m柤& G…ÄÅė(Ź?ų MéOš>¢š·ˆVßMģ  nŠąžŸģ×Ļæµw‰télü7¦Ć=­ōń€”śœä~5ŁFzč~'Ā“ęó:Mm}OŸžÜĮsgwe3¦Å$`ŸZæ§\ź>ń2É`į-ķ‘īȇ‚ŌW„K`┬yĻďGą“š{C>¬D/­vžŸ¼æ\“łćõ?²Ł…€Mć#=9£ļrj»#‡Ōnģmį“ķ%<¦yčs^qįiü⑪ZĪ—|™Č“ē·ć\“ÓSō\ ń²öž;MBŽ4¼µ¾Wš4ą“,yśšsųWŚQ6‰ć-*Ū‰­n–e+Ę~ļ°¬e+h{.źgÉß|]¬|,Ńõ½wĆZÕī…¬ĘZŽĪxeŲįˆ8éŌv#Žæ8 ’{B÷UÕgūVµ{3\]ÜĢұĖ1żkަŗ¾XĖ™žĆšæįWĘ/Œ2“šoĮĶ×ÅZĄ“–žH&ŗXDq”QøŌå€Ås,ƒāoƒµK÷ń’uļ ^Ł\5µ’›E“ŖpwŲśō9®YP•¹Š£œPUž®åļŚöņŲō/ xĀ BĪ.cņń»šō;;µ!-²/±éB‹KSčéÕRZ āĶVq¤Z/ś“.õā¶Ó°že‹ĖņŽ“øšiš²]ĪŖÅ÷p3ŸJߗÅ÷wŗi/tÓŪłFģŖū’:*TÕīyäėäƳA†āĶtm«I’$+óK÷—³¹\W#ŗ8Ox/ŚŽŽßŁäGjŽDÄdćėÅl~Īž#²:•Ę‹quka琓dįCØĄĻä+®0Ńœfuo‰šGCń'E—Ć^&ši#Qm)ȗ)=¹÷Ķw>ń¼:t¶÷Źß(*į¾ė`ž•±če•“»=cąßÄæ²j£OÖõAq¤“ŲR:ĆĻOĀæNŗ¶ ­i>fß9U²²”ģĖĻąM~V~ŁSć§Ē|pÓ<2tÅ·–×Ó[¼ŚØØYLœgń¦Ŗ7”łĶ^Ćƈ?ÖiRT½œ—F¹”“õV·„»Ø…’ĆżMDGÓ”· T¼qšł£ć§€,ō»o-¼Ķö¦mš? éłV3?Kįģg4łZ>š]iz–§¢\Ē0ņ|¦ģźIdž+č›Ä"žšóĻq\óGÜŅ¶ØŚ…Š£QųՐĻ$Xr* ’Šį|Y¦Gsjęč²ø9 W–h—ši·M>#-ßJ„+ņZż¤Ü¼öń±!—¹»%‰¹UņŲ$½³OœUóļŠ|+6‘¬É€–īrFNÜūzWW¦J¬äń€ ]õ<ŹŠ=ĆLÓotėš÷¦ÓPQ¾,–AÜŲÕ 2'‹s+¢œŽ ”Qƒā½*Öę¶L>dėž†Øéƒ±€ŽµwfĮ³éēPŠhŠ‚ĶĄ8żk“YßK¾ ąĆćƒųÖScT¬wŖš\ŲlW OĻ =Vr‰œŸJŗjū˜ÕŠōŃmL©–8ź+®³¶3²įr£žœ õhĘĒłÕć×Ė1ĶēB›½:>źõūOļūŅD׌qG)'œ ¹æ—, qķ]ōā~ )+ SEs ±²0ć4Hö×įY³łVŃܙæ{B“Ū•Šyć­1 • ½†+sĻ”$„ĒŒåø§¬ąÄūmsAĘßS6\“*l!øĒq]-³ w«ĒJy2­÷œ įANō°Nc6U³Žƒžrź_’źxdˆł-“ž t­ŪMf}įHvŒšp~ķDĪrŌ«Šķö€¾ēµq·Z«ŚHŹfKŒ850‹wqy4FXE‹ļ½¾µ·¢ųKY×ī%@9'ØśU¹ =cĆzRéY’ÜA0}£#ļW ßźsŚ( ±~\ä ꜀ó»ėĖ»‰;²’O"˜o¬¬aiļg Ź3·?3aŌÖV•§ž~ɟ~<]iśƒi3ü7ųjģ]błvÉ4ōÉ=ėö?ąæģĒšÆą-°ĄŽ±ń7‰%®5Ėų¼É]ńü9ū WDcŲĘS=¢ĒĆ:~ƒ­¾±|æiž_½ 9ŚÄó÷zf½ “ŻCXHŚ—HÓń“Ķl£c»›vŃŁYD!·‹ķē—9«ļyon±›·mDzŠä"ńÕŃb‹õėŠåõJ}E×ū. ć8/ŲVnW c±ŽÖ?¶]OēÜÆ;OA_žÕ>ż„¾!ŁĒįxHš‚ę\Ir²m–qŽ™ćÆÖ°i¶uQ²?4“ŸŲą“z«wń{Q½’ā72\Ź×Åe˜‚X³¹<(5šÆĒßų)oĮ٧K¼ųYū6Ųéž,Õ­£hZ\±Qš@2ķ]Th6Ī™Õ?¾/|pų›ńļRŸXų™ā›ķDĖpg[DfH ČP™ĒõårΉ H EV²®Å{tØņž}z„ę! +œa…U÷ó~Õ“„c͜Åa.輨Ā(Ļ©õśÖˆ€²4ŽrżżMdŁĪS[føoš6P¦·m ä1oRqÓ½ :»[(bA,’¬hæ4žĆÖ¾ż’f‹?“’ŒSĮß ü'zóJ»ŪPø‰–Lõ Ó?DźXė„÷ēö{’‚0ų3Ąze¼æžĶāÅ8š8!9e“ Ż±ģz×ōš»DÓ|į[/ éÓü3„Eh†Õv3䎹Åyµ*Üė²G§ĀM¦YmÓ­įg¹a€ĄVÆ‡õeÄ·SČÖż”ž•”X¦ušNƒ&œŅFŠ>0s]R”ٵČzS19­WRŠÕü™HTźøėō®>ėP¹½i–/ZČ WÓdY Ž’7æ—w}±‚2^Qčj$ŽÅF72.£¼×ŗ•äZE„H\Ėpv+éė_”ßµü_įĮm/[šēĆŲį×üil<±,¹‹8^Õ„8¶uBäµńæāĒ-Boų’^Ō5(®h­‹”ēn*”Q– ØłW+¶²5jĒž|AÖbŅ4Ė»a4e°@ėĒJųĘā[ĶBńŚq$Į¤ ä€Mv}‡š—Ā~RéÆ%ü°ŚŹŪDD÷õļ_tx7Ā)¤ų†Ž}ö«O1Hž.I_a\SWfs>ĀŽŽņO&%yg·^Ž9Ūļ^æ¢ióK§†“VßåųČ4‘Ė=ʽ·Ūįž7ŚfŹqƒXŚ®£gÅwq$ŪO¹ĶRģA„sؼH­¬œxØnn$ņŅFF‰xęŖ1ī;}©Įbā;™ćF=2ŻiÖ2„ƋˆĪš§=kKŏxSIń†‘nęāĪśIŹé '5ĮG¤k0"Ł^_­ÜØv¬¤aÖX÷"S“ «Ÿŗ g5ēśę†o&”łŖ`c‘ó)¤ÕĘC¦i_Ų®~ŃwV’ a†sYŗŸ‡, [›‹HŠ[»nĒu5“CdŃäzΟ€;mFFł\ŠÕ(o K®<ĮѽéD øõFÖå~ĶsņtĄåL€@ĮõąZ÷Ć ]nāŌ-µ+ƳEĢ Łćš±Ņxs@»ŌÆį†ŽåŚVĒ#JśSNŃļ“ ‘Ź ¦Š¹#‚MķfĒO–Å%FŹ:Œcšł·ĒzŗšĘŃÜKh°’YŠõü(Ļmō¦'—!+}ģć5éҧV†yPĻ$Œā”€õ‹muĖU± ±[Œ°ą}}«›×<o¦[°x–h—* -gĪĶiž/Øx~Aö¹„šr»¶ūÖMī‘’*CmqýeQ²īGccŲŌBجs€+±²ÓēŅī-īĶŽČۜćļVV2s,ź×֌ęCĄēž;רkj‚H ¤żģõ¢%ó";MBĪāŁĆ?]ŻÅs×:„ysiy§jB†MĻłƒÓõ­ĆUxnĀ’ B.āģĘsŲדxŒYišŗE żŁ~6 ŠR5ÅŌ³Ū ·RŠžžÕµ¤h1Ž–ļ Ēō”Ś»¶Ń“ĖŌ±³Ć›ię¹r <ż°\ä«wŖŠ%Źę6Ÿ­ŻŚøEdSœ|Ć­vW‹wņ\Uˆ#ŠŃFĘS35KMVĘ@lķEĘpTÖŗ Ē&µ+}dš:œ28­c#GSÓ¬4é³onĄä…ė\ŽæÆÖ²¬–ņƒónźjä“‹æÖ>֋ēĘK­ÜW1<·…Ņ8nJ.ģŒV@=n%(Ńźv®¶Hś2×ā’ i&ÓēŽv īĮĮāƒHĖ”ńµ÷ƒt½/ÅLÖģo$·˜;\+ł®8Æ»oõėż_įÜZ7‘ŻZy ±dŒmßo§įCf‡ē¼5©čŗ•Ó†öfłÉAĪ>žÕ•¤ųWÄŗ†£§}‹Ć÷³Ā]KŹ@Wß½bęÕ±hfĖD¶ņķ[NŌžń£GżzŪÓt«;čå’ź{Ÿ¶)ŽõŸ7B¬ÅŸu”oˆ¹7j§e¤l¢7qĄŽqMätŚ”½ä[ķ‹ä8ÆKnćĒˆŖ;P"¼õXÅ“d6{U5Ńģ§¹y%Ü®26ž™«ē ‰?Łm6£OJ¬öZuŌn“+H„psŽ  ;9lō˲“,Ļ`3ņ«`ŸēXś…­īóa %¹ĪķĄd“ŌńRąŽŠr9ų<imūÅg K9ŁŌ籯/ń‡õ kydÓ®¦Š@IĄ•ü=+š¤u;c- ĻiŚÕΈĘīįn®żķ›xśWsįۆҔq{­Å;“±˜ }k"'.ĒQk¬‹µV†ķH$ÆŹx5Ń[o6·ČŪ—åeķ]4ęr3‰ZŚs¾FŲ§©k.āńt±H>‚·’¹Õ§ó¶™ž!Š“Ūš®ĪŻXXI¦ŪˆĢ2.Łó‘×§åHÕDó]VKŻI.P9[<ŠÅš6ƒ”k:Œ‹3[L«ĶŁ=?:Žrģ}§ųģ6”fŒž»~ķXæŌ ÕŹÜ3#JĒkąążqV„s «®”ńŪ+ك8źĮŖī^)ĘmŠØ<…č+XĒC‹.l„‚Ņē쉓ņGݬKTź3 dœJŲć­L€ ×V¢^mŹĖ .MfĮ©$ąfvŽ9śš#øMÓ¬AŪĘAĶM.§m $H”ž c„rGÄŚ[Ż5†äódąõę®ŪK×pŪX\Fņ61ä­)&)D·}i<*B͹\`Œw£JŌN1‹p€Ęq‘ō5ŒŅw{¬Ü]nB"*xZę•očK±g äŠ:iF—§Ł^^#Op”}Zō•‚f-ķ¤Ž:ž•¬]ĶOVŠe±¶[„wdfėėŠĪ‹RŗÓŽ”„ܧEP›±fśņ}jŁT»±U$`ō®BŅÖģϲåaŽ·Q±ƒfŌč"u>g'ŒÓ޲µ“#@Ré„t VsV‘ę:¦›-¢I{—®Ģu4ķ>}§ÄóĘŠLy † ¤®~,ųÓĮ÷¾"Ņļ5ķ éģĄ)D µŁé_&xŒź¾Ō-#’9A’O”¢žkŽSOCŽ0&ńˆÆ%†Ō”<Ģžø®q¾]ųĀ+S”ZBØŁYP•źĄzÕi#ėm?ĄZv‰į .8ŁōķE`Q°ž#Œšć¾'ų_Ě čŸiµ”›µ ²>ä+ŒäšžcžWč}ƒū<ü!»>¶æœW³Ė)šd˜Į<§„}ā_ G£ķ#|ߢs‘Ą8éXĶ®k¢ŪŌüż×<5ć-=[Y€K5Ś»¼‚Ą?(Ļé_)x‹Åž0×n®-/ēūFƒƒcŽ iMąŽ“įŌ°Ū_ĻmāVO±J«ņ‘¼ē¹É’)žßÅZuÕ²\āiAU˜¶x'±ÆAń–±­ųSĆöž!Š vÓ „mŻņ抐1éDeŌŽ]NBųØün°’„rM>É58˃ Ø,ŅsĮ5­šĒį–Æ£ĻāA­iRčó±-Jr¤/©ķŽ·ę[ FĒIą}n gÄžøxeø•ŃĄ'®;ō¬Ļxöė\Ōnå†YōóQ“Ōg“ך«cĄõļŚÅŖ%”ÆämeܾŽõé ¼9cįĻYK­éķy _ĄR9Ÿ˜ćolt?ZB: ł4Y%Ć„Łß.+Xį0’”~וēēŠcŸ“Ō/>$x—Jׯļ¾Ķ} Ž$Y6ē›ŌqҾųšˆ“ą‡IiĪuĘįŒžŁ ¤Žā'‡<¤ų’öĖÅ+a䑞7>zżMxƁ¾]Ā~æŲvPÜųFOŽ .O|”ĶÖŚžłńörńµå—‹~mKUEk˜d\ē=‰ĮÆ'ńŸƒu M}āMÖWnG˜®¹Uõ9„ĪD¦sאƃēšīŸ:Ć0p±īåFF8ż+Óžxōō“—UŌZ=¤ČĪ‘õ>˜©R"20ž=x6ūXćŃo. ’Ióņ חxOY²ŅumĆŗ¤·r±ņ•Č$±ĒRGN”łĶ“ģzŠl|ćKŃą;ėh£ÖøŒHJŗ‚3ĮüĒx§āŒüÓü(–yN™ xI“‰c<ļųŌ„}±óŽ…yążF?\ŠHÅӓЇŒØ#©ė_a|ńG‡“D›Zæ±·½hą*£Ü'ō­ŒīC§ųkā?Ź5 „®‹¬BĶ%Ŗ°Ų%`::œ ~5÷Ÿ‚|+Øx² k¹žåŅŻ9|§¦>”ów=vĖĆßšˆ_‰ī>Ķui,' ćøę¾]ųĖŽÕ[Åv¶3EauŗF‘FV 3Čņ©“¤<š—Š'ńt’Ł›ÖņĄąÖV«ā+ X»“ŌÆOø·ĢWs€ŻqϹ:če)? ž+ė~9ŗšõĻ—­ØwDłÜ¼Œīō f¼cĘ? uŻ+ʆ¼ŅL·ņE°|ÆźįWŲē•MO;ń^‚nÆ“©ćg{ß4$™^@ž. ō‹IŁ÷Ūż¢3† ·•S{ÅÜõ$ųć9|9'ˆ“ķFŪū8Ÿ’$p²*ē©ōÆ×5_Zj¶ļt«ųneœC¼Œ¾Āqæ¾kžF±>üų/šjćĀŚ6Ÿoi ڃK#:äüŪ$cÆzóŪbĻāG€¼įķ[Į_Śvz¤7įļ£LĄGV_Nc%­Ķ£ę|ó”ų~#ų MĘ+óĒ8¾Sx_ńƖ¼AąI4½] Ło'|ŒēM|jņé7:-Ä~Xø‰ÉOOéHŹT®vü'įEaeż­c?ŚQ<. EžĶéÖæ;ü{ąŃį[¹“£xcsʧ#Ž¢Är[Fx^§vŽ ¬Ķ€@ėQļy"MĢĄć½4iX÷oŁĆÅæšųŚ(ļīĖŲ\‰>čqŲūWé­³-Źo ņ;×8­^ا#_ĶO)„!dU9ņ’Ēļ _Ļ”§ˆķb’k{\$¤z{V!Ÿ Ż‚³¶ą'©ļ^‘šcĒ×ß ž"čŗ“ņ ŗo±ŽÄ·r7Bʃ¦2>–ż„ž¦§uać_Mo<…nŅH¤ā —ę]Ž:ć§­XæšJOŪ×ö§ż–ō]+ÄS_ĶńSĮŃĒ„ė ,ä•aeĻVs× ŌŹ7L릓?H&¹‰®¬ę…ž7‰ÖEō5öĒ„u·ńʇö„On«ćæĻé\CV¬)ų…šćĮž;mW@ų„YźÕleŅo¼ČĘ<¹oQœdśWłķ~޲gŠ?cŚāgĄ}zµé6O&©įˬń„ĢäĘA<īBtN ’œw8ē#ó®tXĢ‘ļĘW„g6\qķ]ńg å}“…ó÷G`1I™>ķÅ:…=*ŒĘHĻ c‚±ŸŅ ŽcCņ†ŻĘ?­ičxE9<ö9«1H¬˜ÉÜzūÕr¤\BäaT”`ō«/˜Ļ¹<ćjr:`ś®ŸšEŪrĆö6ż“,ü1ć;é-¾ xžÖRŒ;,V7¶Å; ąä’¹ź7“_蓲Ų^ivĆOŗ[ø¼„–'Č%£# žUĖUQ‘ęZŌ1[\Ē{‚„ķ^ ńĄŗĒ‹ü-®xoK»Ov¾}™'“(;GלWQ~okšm˨jŚl–ŗµ€:~µrŖ>īIģ#ōÆē{ž iū,Å£Mt[F¹x3qĢ{±ulNp~Ÿ”Täe(XüR‘¢’(nmŗ?Uīµ–é—)‚<ńÖ»iœŅˆ|¼3€å»b«<^X`Ē>Ž•©&rČįĻŹ]:éVó{Ÿ§Jˆøi 6׌¤óį)œćŒf‚“°!ˆV;qėVņĶ“g‘A“$>ęn­Z ģ0ć#;Hī=ėś±’‚~ÕV_ü®~Ē’|C%ī§m Üi"fĆŪ°mČčŻx8ü½é5Šķ¦Xß›er‘Ļ#’¤ó~õrNvfń] §š–‘«i±˜d’=Hēt/Œ0ģT’JłĖÅž {xē]„0'#¦Fk£_[Ęź¾ |Sń€58'q§enį<‚¼<}ĮøÆŅ ü]š·Œķķ§°ø6w²¹V“› åŸbkׄūT¦jµŌb{[vŠKyŌ|¤#‚Ąż:ŌÓźvē6īžIÉs‚Ņ©Čēöz•4oŁi×S É-š<w¶6ā¼ļÅ?žŸ$6ś…ƒĖ cŠOŗ@ēühęeŖ&n·ń§ĆZ4vš¬35ÄĮ‚6~Uć ę¼Rż£¼BĶyi“jȲŽdłœƁRŻ£DóŸųūVń”me4wCP1P=FEv¾ńŻö¤Öv2L¬BK}Jš+• ńżŽ^ŚånkūHźq^_Ž×Į×W:­¤3oP“ļL†’×T\Q=ŸÄė­Jžhōų_O·†1ĒŚÆųŽń5+V>BˇĒ52ŠŻ3Ļ"Y“H$ˆNū{dń“ڰŌßĻq&KŌÖ&ēSob÷6ŃĖtøĆpWŌü96»$Iä”·pŸ.1č*Ņ:)Bś#Ż~|žŅqCjŽN38äWźĄOŁĖĀz‡uNūO‚Y „lR6®õĪēŲżćþT©¤ąńUu‡ŸŚś“Æi±ŪŽé×I¾2ƹ•O?0+ĖÄŅ?џ£ß‰s ĖėĻ÷ščśÅmnöė׮ǓjZī‰n„eɈ^ÓďkowČmī‡Źrr>¹Æ"¬lQÓÅūŗ—® ²ńNqhg‰Ł†/Ž'ڽĒįOŗų7im=Œś…ÕŌIäMˆŅ$‰ž?JĮĖ[ošĀ>vōG…x³XMkĘž&ńu•‚éźłžLY £$ōüMY¶ø“ŸŹŻ$i.A†1\õWÜ|ŠpųšīŠz—ļõ ŁāK_“4č§ų˜>•qµ™ķt{Ū;øb–Ń”rćīŸQļž5ē,>§µ:Q·į_xOŎ׵Ķņ ?Ē4¶¼»@>™Æ1×u+ÆxwQÕĄxn”PĶpC‘ަ½:+3–5Zv<ŸĮŸÆüKØMåOą ‡G`½Å}gy„,ÜŲFÖČ8xŲņsŠVµčÓ«”„įs&½ā]'MŽēģ›īÄłźĄē”ÆßƆ–wŚfƒ¦[ŻĄÉ*ʧÓEqĘ[Ÿ€ųżļ}Sžß’ŪRÕ|Gc¤XŽ__¶ŠĘdPķ_Ž9ż«luߌ7Ś&£’Ā"’¢¼Wį_Š’*č„;ųu”J¾"UųWõży[x'ū*i øÓ5®ķåŒ:•8ę½+Ä˦ Ž’!pėŠõčĖMOŲ驔efyWŠ”ŽŲŁŹłškF2EøżŽ::Åń©įßčšR„²ŪjŃ(ąž¾µŠö>Ÿ-“RV<ĖTšå–£nö7£!ü&¾hÕ|;>‹ā˜4kłœŪłĄøį–øjÄżC)Ä­™£ūHų[ĀŽ’„Ē’gŽŽįĄ¶Ö­<»wÆ9ÆLš®ƒ.‡£Y<)L±”ć Ļó®zŽĒ·žįšķGÆiŚū.ŽĪH۱ߦ É#ۚł P½ū%¼’«*…ćs•Œ^§—Œ«”öŸģ™ā­{į·Ä‡|9u%­ä2­œ€y±I÷”śŽœWėGĘÆ hŸõxŪM6ŻŖŚźÖ—€2^}hö+cĪÅb]¬Ļfų7…|Wt>ų§VƒKÓµ¹ 0Ž2ƒöIq…pĒ€9ē'ę“ŸģKń³ö*ŗÓü{«Ži~ jĮNæ¦FR])œüsĪōŽ ć8Čΰ†‡ę9īu 6aN_ły³3įń<^6šüvŗ’’kŚłaaœ>F=Aļ^mÆų’ ®aĘ1“[š¬š>«R.7GyąvWXäŲŖIÉŪĒZżVųŖ<śœW ŗ8œ’1ÓśVŌśXœĘ1•}ĻŃ«ļéö? .¼QŖĒ$pŁk4g@É&¾ øŌ`Ö5)gŗß|Ŗs‰y.jļoKŸ…“svčĻ‹”—%ąČŲWć ŅĀśŅäYōł2å*HäĒ4F]›]AšEõĖÆkqQ6z×ŖĄę$GnXõ­£œU"Tń‰½£Ü[3FƓ·›?Zš[ķ éģī¢ĘĄg?zµåGR'o©ŪJŖ¬Ūöŗ+r~SŅ®.Ē+] /4ō»I!-½Æ9†ŻtĶQģd`ó£nĒŖūSē!AŻÜj^ĆŅ«j0YźVņ™!ˆóéĶ.¤TV2tŪyš³ŪFHĻ8®īŽŅ;p¬ŃęQ×5ŁF=ĻŹüTāµ”å5+ÅŚoŻ«ėņW#NYAjļt‡Ū”eMæ­z“¢™Y„G)ÉźĖw2Įµ‰??ņŖV:†4S­×˜’(łą1®ŲĒ”ćÉXýXīw“ ógzĖ„›Vđœö­c na'©ø³#Fr™8Ŗ±Ķ,ņ³}jĪiHŠH¤—BŹ+NŽŁcƒ"ŸĆ„<¦cjš—CŁn†¶ō[gæ&ŽÕ|ɽzWča)5M.źÉŚŠ©æj„ ø ½†õ/ašĖ™œņ‘Å}!¹P1éüB¬­äꐽ¹„~†wčs:ž”yrLV $¼ć]n‰ą/ķį¼ŌCA?Œši7až­¤č:^žŖ‹n77?8Č5Žé¶Z|I/‘nˆĶčqšēAHĀŌnČć'źMGKŌ4Ń[męUĘs‚My¬’Æ~_¢ˆnu{GEq’ĶkL\ ÷æl5sčš"‡lģvłZģōOˆ‘D²›LµšĶ‡ß*7gÜć?­oʈögGv‰slŲØć'Šåļ?“Š5œ“~ēųN:T»"lq:·…µī,®ņ›lŹܾ˜ō®ļĆśEͬjĀqī‘Ś”ɆŪܙYŹ&pq[v:m³Ģ­•œ÷Č„qLPiĢ’$±° W·„q¦†ćņg9õ­Š‡ßF—J€’›[pJīŚŃā(Ū‚€<ÄŽ‚TøūxSÓ€kČÓH¹“¹_µŖ“'’„Ź1/“Ė[Uy‘¹ź@ō®XŠmb²K‰”ÆŹŃ¶{ŌĢ,÷:ĻŽ<tĶ]ŒžR|ŒG,q޽óĮ‹™ądv;F{R€Ž›U½M=ƒFŪzv®\ų•­ŪBߣ—mgvøŚē ­@„¦|A]V)Nµfb»V#~7÷üjĶž±§j0M(ˆéC+•ž£§Ÿ źz2Ģ·Š/ķd8ĪļP}+Ć5ėĶF+Ū›=:f™X•ņĄūĆ56Öā*x'FŌīµ)ƾĒubčvœœcߊśķģL÷r¹D–=@¦a&ś•’Ņ «=ĢwJF~Sڱ~Åk L×qøļ¹s‘@“<śėQšä"šC¢C‚ šā±|xöśą5“¾@'85ŠÖ7=®ż`ŅČwftb~aĘ+‚ń ī©%¤é3)„‚TóX4Zv8_ų“I“Ԛ-rx™ īP8ü+Öm“żOYš--äH łŗŅ±M3œ½Óµ‹9GÅæ‹øö­w» ŽinwR¹éA-¦©y,®Šŗ+’woQ\•åŅ[«,±!ÉĘZ’„K¦6ź9!Uq62~+ “³KXo5÷’Nč)é>ńD‘+[#Č­Ą8éƒ]ėxJ×\Īž%—¹ć½Y‡ĀIl‚ÜƔĻŹ+e4kH +Ķ˜?.8&„» ó-ZĘęŻåŽTós‘øó¶¹h–ĢŻ}žīV¶ČźGÄeßh-wzVĪXvØČ=½\·µ’"„²īS‚khģTuKĖć’ łz“Č5ĖÉā»ėüų&BŻz֑•ˆ”B×\}GuÄ-#MÉ`}k#Z¼žš4Ņ*—Aƒ“u§)4aĮym":Ļ ŽqśĘ£g¢ŖÜ_\Gklc…\œrĢ ««KĶ<[ŹnDŃÉŹ›$ „OÓłW™kŚ&±5ū]Ć5Ū@ćꎚ Ö1įχVš³j3ˆäøi76S–ś×zŚrZį<“1rŖ0)5”gā+J‰ÅõՄ!7ŽH™ ķZV^‚ Hn­ęŒ£÷F1XŲėš££ÜÅ,W¶Åw6Žp=Ēį\ׅœY܆0Csµ‰Ł!4¹RŲŹ{›7vŗˆn¤&8ą•L{ø"›zl“Đ鰕]ø`y?…2NĒP‘ļY|œr8é^æ¤Ü}Ŗ$ŒŖ«ž2;RؑA‡Ėu~^ f¹k¹.,d’ØÕd^‡4Ē?w*]˜’xSx$n–üi¶Ź‘?•’Tq@ŗ…§œåUIēÜVց` ŚŖˆūŗ†Mō3µū]BĘw "nĒN s®Ž÷(®#W |Ž•Œ·:#.„ö¤ZtŲ½ŠÖP‡S_;|@ųk}®ČnQŗ„+ū¹X~€×-^ų-ą›Ķ M²Óõ;Éļc “ļ„zģģ¶…Ė#ČŅŖ.Ē<о^“ØŚŗÜŖ;8# yåµ®›{5Ŗ#ĒÆĖņä~uÓXŹ2čyĪ„vóŻ5«Y?†Aұå»Ō¬>ś‰~cߊRw:iV—x÷(ŠČ™ĻGó­yfkW>R>Aī0 I”ŪipĶm³G¼ŽG§įZ±Z‹g7q•ŚX÷… C:ˆŁÄ/)Šį1Ę;‘R]xƒO$ešČ:šŽ.ē,–£lō۟G/ŁUüŅ2WÖ6©„k>ė²,.r„’=jŌGÜˊ÷ūQ.%k£k"6Ÿā9«ģĶklāI¤Ū€qÜ÷¤IwJ¶¾hWķ"pOpEC«éF1# + åsޚB<‡PšlŚ‘źŃC²ōš®ŒÆ„wz‘}gp³Ü+g*‘Ī=iXfö¤ŅĶ XIEĒ~kMb'‘sćæµc5؉$U–fŠŌ€7sYó[j¶ļp&Ą¶ŚsŪŽ Ö™”˾\R±bŲ#5ŪÅ®ÜiŸgĮ,‘»…8\Ö“Ė,jŽ#w¶ŒÉop6ģ ŒćńoŹČū—#ūµ¼R2™ŠčQKogõÜ ļSj7?/˜³Ņ“0™ĀjzŽ£#'—”ŚÜńœŠĶ½øÖāhćrĘ7śā¢Rč(ŗß\ĘŹĄ¼lyĶF«…nז‘\oĘŠ£0śr+Ć< n¼=ÕŖĪt’5'å*sŅ»aS”ƒ‰öĮ‰_ā«żšaóoPķqÄ€3§JóŪ3Ē.śž‘į‹Hœ֘Œ}Ā‘ŪhĒš«¶©*9¾'| æ†źk™Æ|q,ķ7Ķ,g.3čM{e÷Ę9mo‰ć»Ō5(.Š0WbTŸ÷I¢QÖā”Q™¦ųĻÅ!ń5ĪØmm¬4 ØĘūP)Ļ<ńščü_į x®+ FĆOŠĖ^Ž"·R°8ķ“qķS n|Į®ųgQ²ŌŒvś{:D¹iūņ®ƒĮ¾%ŅtŁķ¬ÆoB½ĪčāMß1qķZ6EĻÆ|¶’a?Łš+ʧ!£õŸzõĻ ųhųBśļV[x>Ķr<Čū…=ČükŠ£f†OŒ¾GńSQóµh¬%hĄ™f™‚¬|`góÆ ńŽ<#šęĘĒį—Š<3‰“»Ūƒ’‘č7×=j!w üŒ? |-Š> k׿4kg‰E.v•, äś…EńOö€Š¼Q„ėZ‡ōȬµI±ē\+¹qŪ¦+x¦Ķ.ωt’x§G½h×&¢S’3Óu}ąĻhś×ƒļīµķ^8µųY÷>6®?uĘZ{3Ēž5|;¼»š}·Ä߇Ļs®[ŗlø– )\»yõ®ƒą‡į`| øÖ®õ)¢ŌķžŠ…xØz;A¤ådsĶŸƒ®l9±Ón¬ä“mfŁK,†˜7¦})sv3¹ę^ š~­cea­E4Ļp¹Tń¦Ÿk©Ķ:Hök/"DPqׁҭFęܧŸč¶mŽÆń[Zš6æ£YĮiöÖKäłÜœ®ģqŪ¾+¾ųÅń[µ’Ä‚'— ģäŠÄŅö^ķĢjh“9‚śz]Į$žW”Ē#k}ąkŲu‡:G‹.žģųēY"ņīĄp1ßó4¹,c)ėcŹž| _‡śĪ»āėQ[Ė8d Źs“6?ĘŗjųFćPՓϱޓ›|ԟ>QÉ>¹ĘhO”E}O˜ž%EqąŸŲč÷2Ū]AuÜ[ĢŽT’†k醱éw:Üx†ęŻ5«»`HŁĘ=)īŠ…#~+ė_ |{©xcÅ&óĄ7öį–ī8Ė4=lt ūרx$ŲĻńK}WĆūD‘+Øb@ēŪʔǩЩĒĒæŚCFšƒéŗĒ‡!6ĀF@ ‡»n‡”㔯 ńGķÅß @—”ōżBvhŒ%·y›x9öĶ`įŠØĮģ|­ÆYė> hƧ¼€«FGLŽė^vž%MAŹÜA/ŪA!øćÕi–Ś„ņÉwzDpN™Ī3^—ą/@³žŃW“Š“F@”œ”n€óé[(Ų„äwžÓōŸ 뚭Քø¾‘‘‚)}Į‡N?2kē/ˆŃ’oj7b×ģŠ¼„£|å€=CÖƱԗĮZ³ØLÓųv+‡øD24Hd^’Ž+é_†’|?ćæųVOŻĶ¦ŲO0‚ī٧ƶ[·SSĪiČyoĘƒv’ >/ėžŅdŗŌ“ÄSä;æ8!N=ˆÆ –éćóāTx¶³.ĆĮ$Ņ2døž¹į WAŗšę„gyöxu5+±AłŽsÖŗżį6§­čŖi76įÄŪV5#{Ą}9§ĢĮDĀŅωü!¬ZXøžaē’äŪ¶śdqšś—į’Åź1Óü5yö;kŁ›Ėū0_Ÿ$c’½™źæ“/į‰ō¶Å4Ś}é2DŲåp~ėcZĄųė⯅¾8š½¼ž:m‡‰Œ"9ķb!YˆxĒZ”K”<§[ų_X°I}g2¹iDnrź{ķÖķŅš9¹QĻq\tWRĒø6sŪ<āŖ;‘sSEÕ~ĻykØENšK¼ob”Hė_©ŸgågÄźńž«įū‰ęÄ3\ZĢć bc•üśW(©gy ¶—1–Ž›r+ļPtGsō ąOŠm¾!|/Ÿį׈;[OFE•2H1Į?†?:öų&æķ'ģcūrųR\ÜX|=ń(} _ O•$fuéĒ>„ÓGmūuń¶‰s{oy ¼ré—0„ÕœČĄ¬±0ČĮGQųW©üń Ž՞ĀF?dø!\ך®YDéhś3Äž·¼YX…’vū×óē’ÓżŠuo‹¼#ūP|?ÓĪ©ćO+ĮÆŖ§śEʎ~÷ūŽ_ Ļ«ēƒƒØ¢œžČå©Lž&¼W£.ęŗ/³ĶūČ]z=?ó9įiĄ8=ė]”ßC‚„;’!VÄyī9¦HIQø•ö÷­ ŒfE,NSÓ½5žPŒ/aLØĘćä Tn•*DĒć»#·Z #ŌŖJå<}qV#›É.įIėķEĶ#¹”mż±e¶ŽF·Ō”uø€†*VD;”ä{ćņÆō ’‚#~ݳ~ן³•§x“Róž0xCń21-u ÆÉ0'®T“ĪCūTIhuÓ?`ī%'Y–Ķāqo'Ģ„”ę©jšs\Dö™dš3¾";į©ĻĻ’»š—‰nŁåžĄóķAŻJGś;žŹ’“€¾6|5ų{ūRxW·µŅüC§A„ųŠ%|¢N0ØļĻWœq·ÖæEķ-Ž+õ˜”e9 ;\ÕC{ž}®,Š]Śköw2 'ģבg§£cŲ’Zó_’“o_üYš›ÄŪ_\O ¼Ń„ķ0Ż &3ørx8ģĶ\-t.ł»žÕŸļ>üiÖ¼3u£źZ47ŗ…ҵ­Ēޱ»±$>˜=Aó5ć][j)|„/zē©c²śv¹ge#[G üRYå'؊ōō½F[{«9Œ±r’)dō9®”Ū.A«j:$­Üs»¦rq­ax_Óu8P$ʃø1Īļ„:tQįWÆy§j‰ØiŃīe}ĶxoJ÷ˆļmeŅ>Żky5…ĄQ—Q“Ę}›5źĀV&o©Ńxkʞ5Ņ-ÖĀĆÄ·ņ”Ėn”īl}iā—Äk-f3XYtöłeW_™OŖšæhBjē¶čž&øÖģc½ø¾I «†W“°9ÉÆ‘.Ōõ >3mqå?*׹٢v;‹onlaµÕn˜J‹…vĻQZ¾šŁ½žy&™K·Ź¾õ#ęŅĀ6-¶¤mī."Xó“” ×”č6vö{™ĢbhĻ'¦r•‹ś­„ŠÆ¢†Ÿ³É'Ėqó}EG?€t–2Ąā+éšó…8ž”:–dxž‘įH4^ł®%øŲ2a9Č-žžĀ®Ž<óLĶm#nŚqüė'P茮R`ŅBßh„‚‡iR+R;8åŠŁÜ,r«ü«Ž¢„ŹēDN¢ŪE¹Õ¶ZiÖŅM$¬cXČCŽõõĮ_Ł‹_ֆ›yā›IšÜ0ūŖpN~÷’Z°›?@ąģ…ÖØŖTZ¦~ų3 éś7ö}­¤iŽw RĖėœ×GąĻYųK^×üā:S`S14]XGčk3śC(ĮZ*Z#’³Ō,ü/Øźz€øDY¤ō*:×Ē’’iO K{{¦Įgž[“”!Čē­$Õõ>ŚŽ½ł‡ćŸŠWž&‹}§žńŗ„¹=kČåR½žI^K‰® ū§æµiÜücÅ.%ś»śµ'ļu>«ųEą]CDµ³ńæ§ŪŻYJ„Z'?tƾŸµ²µ›N6ÖžҦ€Į6ąœė]TįcłŚ„võl_ xDŠ7Ė£éCHüÓăåfõĒjķ(£85ŗ9§P” @į=kØŅ`…·*„Iš:ō&·F•Š×sJŅÕrŹvē„iŁłҬ„&ī„֓F”ęfźŗl 3Ėjū'„eé“^Au,W%YŻ$ć>ՋV:a#،‰‘•B‡<öŖ2,Č„·ē·jGBo”ÕĆwj-m„Žżæ:²ąƒMwfIŲö¬"•Faj¾µÕ£dŌ K«|‘Ą#ņŖóčśģi²xc[ūŸ_“[*® żßn=+šµéųKŠqyN:ü,­8?ųļM¢6‚ó-•ōöŠK0%QÜ}½³^_®x6at«ŪĻlpY‘ĆqźÆC”’PøsÄ:®[ ~E%{u]ł4ĪSĒ>ńgtX¼c£:źś?śÉć‰͉{ž#žÕkĄž›āūKKĖ[Ńt²6ÖRyCč}ėĖ©j~SÅw,Jt"ķfz6½įø`“IķÜ0$‚1Š×‘źbņĘ»¶Ue‰IQźjT9·?=É3ŗ‘ÄĘ¢ æÆ¼÷?Š?|cšÓį_‚¾5馌^=ųsŖEöŒÖhmBFC®NTä®ī0G=E}Įā_ƒ?³_оųĘ’ µ{›w s:}ęŽŖ3ęg”Éäzō®˜agōÖˆž³N’Ѷ™ó§Ē?‡Ļ…ģüoą *=3ÄŚL%ļŚÕv‹čQ"śąuƘu憗æ|ׇ|m„xkU•ŠIŹäH„r28äV’ zõbž#Ā<;ū:üHšŠ.ĀŪƬÜZå¤{7Ž$\>‚»tń}½“ɦßÅug~£s$ƒiOØ®z”N\65m&uŽŌÄś|ńŽMe¶ę7I”9hĪī£õÆčĒᯌtĒš†„¼ÕmļgūJ Č QŽčy®8Ņ՟–ų½—OJ„é+ø¹~6’#Ąm/Ś'ĀšχōėmOÄ÷€G¶Ž@䎃žżUų{¤MĀH·#Ė;™&ÉĪ\œšn6i—ƒœ;*8jµjƊJß%’ū_ą/ÅĘš„š~‘ØŁ½Ęš$¬Œä˜Īxļžõś}mā YŃņŹī) dł”Ÿ™ •čQ©”÷¹ęL”SšE{#ł7*ēql€ź+ē½kIńŗ¶s£]›y”•Œ“ņLž‡ō®£ƒ O–Z­­ŻÕŲd’ŁÖį8| ń߉pg³¼ŲæhLüݬju—ŚŚO㻹u ^iófH6‚ģ«– :×»xbā /įškWS‰¬mģ’w(~rA ż+Šk”ģ¹Ś'äŠüA.»ānöāéy8ÜƼ«ĘćģvŽÄÆå+Ąž؊)ĒS峜_$.~”~ÉI„ų‡į÷„õ¬¢żŽå˜Ė+€å_¢z&,JI‹®ČŅgĢĆ0¾§…žŌ²Ģ~x’tøµ &ŹkŪ&a†V!sԌ×ē×ģkū:ų†÷Į~%Öü{$1j !KhÖQˆz=N?Zs¢{1ń?Aæšßü{%•«$"E“õ€v?€?•}U£ė>ńŝˆÓ| £„ȉQĖ+a›GLVQŠGSÄJor½„„Õ%EÓm-Ł  Ą×OsāęÕ,­ō›Ų,žĖ—ŒykņŸ®+hö;0ōdŻŁĪźėS¬Ö±łøč:ķ~éž—Ē}·Š<9cā=š›k«I”2ʌéĻ#9J~ĢīĢ0nxYؽlķ÷_¶ēüs[ųOš­?jOŁ.ms]šf—s-ēˆ<7)ß6Ÿ;škvūĄGŒ•9łyĻ“?fŚæĀæ¾é–šč¶ŗžkU°Ō4ķ@y¶ZŖŒ“lpŒ3ŽGõŃ Vgņģø¢9īóŒ¬ßõų‘|Gż<«&ÆšōĻšāĒQ“2Aa ż¢Ģ]c<3É£ō%ŽUiY‘’żŖto…^š÷€<·Vzź$_kµørß^:ų‡įgĒø5øR}nČiwƒŒ«ļV?Z茺n.j7ź}©¤xĀ’<)y„j:U¾¢„K$Ź~hŽ ĄxKàq£@īŠ¤ĢY·)¶ŗŸG…Rг:ķbŌÅg4«1†]„Œ¦±ž’«é¬†kŝ£Ė. ĮĘqXOČõiÕŗ³>1żŗuŻ0xĻBšR[}Ÿ\±\§U(¹Ć®käK ;{˜ĢwvŻBŻUĒ +–m£¦Lҵš”0ŻXźŗk Y­ncøˆ„ČR§;qé_Cź’5OŻŁĒcvFeXĻīäoļŪ5š—CŪĀŠF ŚgŚKI€¬Ē$ōę“4†¹€ę9Ū•^{TsCB:$‘¹ĒOÖøŸ^KyžŽ€łYĒįYČܽ”ĀšĘco„ž†±ę¹“é†+’*&‚1±ķ𭦑Ģ \\©äæ?”­ęŽs1XŲ²ĮĘ1\U$kŹm‰ĢPG¦dõõŖęऄÄō®r%±‰«_ŽŽ][i:™wāK„‚ŅÜnv9źqŠsÖæAžžĮ7ŌnōÆüx²ƒKŠ?w9Šįß\:;Ž˜ī+¢”L?`¼ą=ĀŚ §†<įūOų^5Ē•æ©v®ēNµÓōłVŽŽŲßÜō.W8®„Jē]˜’²¶ØĆn~Tķ[Ih"GŽĪ4·ˆńĄėO”‡+•ZŪtL­pż‰ēS̀ȢęM€œm>µnF”Q³‘ ‰:d †šŚZÄĪÅaŠćœŠkŠóoāz\w ēÅq}sŸ˜_›“GķŸįƇZ~§®ų×ÄÖŽ°·Fp’> Ąg…É5½8ō7Œl7µOü£āGŽßQš’Ā+fŅ4™īkē9v‹”(æĀ5ųć¬_Üėŗ­ž½Æ_O¬ė;Hf¹‘ˆc’OÖ½zm©5gĖ£2žTw^ųńÓŠS\¹&Kfŗ2­[rĮYp}ju…·Ä•1Iw9Y$hą‘ƒ!Ņ®@¦SūÅŪ’8éQ05aÓ]gRŹpzq[ÖŠAėm\^źmķā2;“Ą™½:gź—ģ½’žų÷ūBĮgāæE/Ÿ2Ē:\\BĀ[øÉł²?‡Šž•æf_ų&wģÕū<ųQtßÉyāķnå½¹¾…d[ƒœąäø=1ӊį­>‡l }éįiŽ “ƒLXŃl£Ļ–‹ŃģzgŁĪ¢Ā©@@Ę+‚l½»¦ų^e.ådR+fßI‚)¼ęT,:qҤŚrOHY›jŅøŻKÄ1Äqł¬Qޟ3T¹ÕŹJY£ū¹éWVŚŚŃDŒĄ‘ėR٬†LŚŖŻOö;tżéćrkČ~/|ZųcšDŸÄæ|M§GåÄÓ5ˆ”y¬ö< "›6;ŸĻķ„’“ń^»cyူŽi^’„Čß-Š«Žs_ƒ.ńw‹>!jņk6Ö5mfżG¾IŁų'•ęŗa‡\ccß>ü+—ÅŠ-ŻÅ€m.6D”0¾™Æ¾tĻYxgL“¶³KgÓŌb6@ Æ±„‘„ś–˜H’/”™\ąŸjĒńć[ųzõ#Sæœr+–„C8@ų®óJפžāņåb0fĄyžõōš“»­ŁcUĪw˜}=«’S¹¤©h}EšWŃ®|_}į­V„”ķ+b»•°7”Ķ}½ąßi>ų„ēNšx¬ī]WdĒīĒõ§Ē,ōџWjŽ}6Öā¤0\¢ņĄu÷ƚ_J #ćRń'‚iV\ąÖmꕧ^$w¶¹·½Œķ,§ļJĪh¾SŖšÅ…£NēŽµ{®œ’AÉy 3éQ)y2ēU˜5Ń%sÕk’ńW„Ō)‰ ĀćœÖ䔊ćÕ ĘB^œ3yĮ튳ÆxoSµš3o‰£$\ćŽę€ä)8m·+F¢_qČØ,5 ໊;xę•XÄtLzŠ8ǹ‰ć(cÕ½Ŗ¤“Ć©(Ši†ćĘA¤ ‹Œ¬kŚųM·† Mø–é[;ĒR+¢Ņ£¹pŅ]éŽMøc±³ž=}«Hǰs²VįbF1Mʧī0ĻĶų×–~kµŌp•Ž>l¦“LND֖÷‘<ˆ'W‡–ŚN0* øPؑŁ—¶ió3žL¹įż"MRM—+BūG­z­ĻĆĶ=-g’Yd™öüæ/ˊ–Ē̦Š=҉KłšĒŌõ;9„ &ąÜ9؊ęĪŗhžl>$üRÖ,|?c­Mo/öĀ.Õ¹8g'±÷žµĒ|9ųĻÆŪk©'ˆJ=“Œ)\n1Œs×ōJ‚9u='Å_¼E©[CčĢqŃö.§¹ÆoÉeØė˜ā»Emę'.=*Õ2eķąź>š?ųFQgvŃ•ąŽ‡éšńi|=ń/Ē7>.¾øŌüØf_“99G9Īzr)Ø„©Ÿ)ś¹šóį…5?ZĻŖh±\ZĻĢ@PvĻż+É~+xÚ ÕŽ§¬Z¤rG‡¢ćØōž•›z™āÜx7IHą’+}²oeõįĻß̊Żjr®ŸęS†Č+وŌČĻm³ń€“W6zõÄV[OĻ'\šź ¤źVšŽ§ą#øŸ.UŻŠUXÖéšUę£.ƒbd3LJsBN>Ÿē„EsšóHń¶„Ŗh³ĖŹÄßh‹{™‡P@ōŖē±£ŸcźŲ—ĒśxkPųk{§é÷rĄŅ»‹ƒø2žÜöÅh|2ųW‡üQ榉¤“Ņ/Łüø•ˆsœƒļžžÕIZę2‹»¹óg‹4½SĆ^-‚ßN¶ø–Ėķ,Ó®Ńū„<ģ3“]˜šĮžŚīģĶęĶ ѱ'*GQōāœ$ķsSš£^ŅåÖļ“ĖÄfHĢ‚X›:`Ź¼³ā¾ā’€^,Ó¼mį‚"šķŪ‹›ŹvCóeõĶtslij~²ü(ųŁ.·ąĶ#V×n¬ŽŚ[a$’Ɔ*Ü=źæ…K¼ńj¢ĀÖV`®é€š®jŖÓ¹¼iŒųĒsąßŁ·„īõČn„Ń™?åØĻŻ+Ēž ü>ńO‚õŪ‹Ō×.õĻdĊźXßįÉ$t¬)ŌŻP±Ņų“Ązʋć-{S:UµĒ„ļbVO-™m&søĖ§§ć_=üHš’Šl~Ļā=4Ģtœ)(œ©Ļ$śńž5¼^‡<†/Ž ¶QyŒwIˆł·V’ƒüyāQįĖčõķ^kŌø%U ķGr?ZÖ‹ž%ńoÄ~ńŽ–<5u¦ŹŚęœr²÷Ѳsųą~ėš‡Ū¤_\ŁĄį•Ptēų@­ēGÆjvšīµ¦«+ĪȫϾkČītĒŠ¾#K£“ŠęW³qōĄėE‹ŒQõŸƒ5}+Xš?ˆmü\mģ¼Oo*-¶ŅIeé·ßŒ~uį^ Ōylzē‹,u­SĀ•½Ęƒ  ķÄēŌJŅ;?D~j>Ö“¹ōß„žÆn…ó1øĒO^8®ęŚ?xĀ÷ŗwƒļÖH’g\ńdž3éĻJĘ{Ģ…¼O§ßK¬A”ė"āśĀęB ’"9źOl“[¾1ųāo‡–ÕŠäüątnkc\ų,Wöž+ŌmāŌ“÷A)HŲņyĪ1R„cNt|±®i˧ų¢i¬ldµF”ŒÜ„ĻÆzöŸųšīŠZŁé·ÆbŹs•$WĪčū“ą…m¼g$ėĢ©pģ¹2ž5Ā~Ņ? ō xæHųąĖT“Õ“«øeuCóM“ŒƒĘœˆuo¹žŪā֏£ų§X9ÓŸ¼ŠąüŹĢ2BÆa“^k®žĪ~Õõkočגé÷Č†#„gæåLĶŌ9/Ś MŃō] I× £}¾Š¬S¶>g\ÜO~õį> ńļö«ax~į­į扭ęŻ÷[æS#–ēĻß~ųIÕ¦²ŗÓHøÉ“ĢQņ0ėž¾õāWV“ ŁqmäĢ®F ūĆÖ®Ž0±Nko™xxļõÆ”’gˆ_šŒxÆMŃo^å4÷$ÄÜn~ī{w­Jå?NlēŠhažŽv’>£åZD%E ’!3ŲĶ-Ńó×Ēφé⟠¶¹j²¾³amČK4уœmļŒWēŗ‹™BĻnūéņć8¬Miž¹š—ÅĶąŸiZµŠ·Śß rö«¦@!‡Ó5õķ?ą{}s@³ńžƒ¶ŹŹī4Ė’b›\8éĻ4™ßLž”ąŒµĘŸūI~ĢŗĆź|cš5ŗŁŻDĶŗK‹`?w'ū@ØŲƽ~ø¹Ky“Ūė Ģl’8=@ķYŌZ'Ł_µ'ńž÷Œ%’0x5Ųkžšī»¢k>×ģlÆtMRŽK+»i”2\FźU•ąä1Œ¢žŒŹ¤ó{’‚•~ȧģcūL|@ųC5œēĀo<šß„®e.ōɜ°;ć$”÷SۚüĀÖ!I–&‰ćŒT`å7ź|]}N¬ęe]s† Ŗņ$„‘’@õ®ć‘ļRBšk6™-ŲūÓĘ0•’5FņÉ<éV·yd“swć„#dī1%ņåŽŗ“ŒŽÕ¤…\fLc4Ė0R$ĪŁ26óŌWŽ’šLŪYż…æl/|B›Ræƒį>»:é^,č6՚E’aˆlŽq‘ŠœŌUō;)£ż'4MsGńv¦ėš<¶·ŗEåŗ_i×08xꁔµ‡\U»ÜK ݌ł©ĆWXō,ńO‰^ ±ń“©X]8“MŌƒņäĀųąū}}ėó¢ńØŻYO—_šė‘$rÆ5”8É=H+œ­qŚĢM†_šSŸŁCKÕlgńw„mŚźu-6fN-¤ĻĻ#Š‚?žs§Žü—–ŲŁ„‘į(ƝŹpQ]Tö0”LYPMŸ›ęĻåYsÅ$oævą8śWbGŠŌR2ŹIsŸzknFR£*zūPĢs9'*XŃQ›ĒƒA¬b"«ČĢŖ³8朰c‚¦(4Œ,9¤ĆéƒV2$€¬€L¬„õūŅ'üūū_ĖiāŸ~Ę_õ‹{ŸkvŅƦ¬¬Äų$mĻSżUkūųć­b- WųućšxY¾Ė;ßń0²Ļīnž¹M摬*nuž¼.m.¤R6wck†uŖÜ¶7±iˆwo¾µpŃ0ī® -Jµåļž Żū隵„—ķ!į6X“½bD‡Sņ‡É¦jŹøŽ~9P„ōÜ£?zæ+˜gŠ)­/-ŽöŽCĆ–qPćsU$bZŻKĄ 6*į‡5éŚ_ˆ5ēµ1éå.%,øŒž1Ÿ’]sø®„ĘV=źŽ{›{X„FøøsŠ/*}ėμA„ÉixŠ]Ł\ZÜ&v“‹“f¦6/u¦ČÄÜļ@æy—µwž–8 ‚%Y`”ØO’®·Œō"R¹» =E„¶fxsĄaœ~­©hńMdnC—‘¹Ś8ÅZ’v9»oķ]+O b—`Bx„õĶ/‚5§‡Vyµp »–]¬2qėĻzŅ1¹\ģŠń$W"śHtēó‘\7†Ņŗ/Üx†Ų(…R‡x ½)øsÄV~+¶½mr}2źą³5ĮXPüŖ{ÜV&™ā_VՌ—,Ņ0==ˆõ©q±¢Ķ–K’ėCQūr[Ü9o†cŻkŗŌõ漂9ln9‚rAćwÓұ›*1īQ¾¾‚M=LɲģsørkߣŖó¬~lÉČd“ėŠĢŚ1ÖĆtkķwÅś„ÅÓZD¶īą`.Ņ=š+é?|-Ō”]Å sˆÖąmFøv‡¬Np¾‡ōÆ3‡÷[Gź<ǘ¼Ŗ£Iū­ŽĒ׎ šĘ“wįémR 'TÓŹįā˜+p}³šł×Å’²f˜ņź7ß “+칕’9č1Œ{WŹŌ½Śg×. ö²ö—ÖēĘZŸˆu’k/į/±Šń$*7FW¾0sŽ£Öaūvw4o†SÉ9¦œ{,Ę~ś3čŚ= Ć’uč’f’ü#ך;¤œ¹IPą08ĘWŪh®³öųõ£\x#Xų#ā)“Ÿķ‹k3I•ˆå^ėĶuF„Ļģl“-*1å>óŸĄÖŚ÷† |3ńõ¬Z¶™g„Žź¶És*ł‘źæ1æߚūŸg ÅGš[#ÆÕµo|4ń;éZ—Łn”ă ƒŪ„qß<5š—ćw–śžµqšĖāBšŻpmoĀ’ƒÜ÷„£Šų¼÷ (EbØģś9ZxsĒŽy,®4—Ōm$øŠŻŚI˜¤ŻĄ*GAĶ~Žų~ƒŸdxåń~¹{¢|X³²iī>Ń3n»™*ī ć1ŠŹX{ž Lo4Zź~ź?¼KńĘŚ—‹®nŅ[y%1Ćr~AĄśW¦é—³As “Ē,MŒ‘ކøźS±śGV1,t>Šų_ØŚ^k֟iøX3Œō÷Å}’ Żę‹²}>ą%“d1ą€zR„¬}-z>Ņ&GÄ_Ū @Õ$^k±F!†$“2ĀYŽŽœ×Įž#ė^}CįU„ć[Bļ$MĢą§JĀp²¹+:„ėOÖ6üO¾Čaf‘›{¬G,}Ms~0Ö“ÖŃßH¾²i·0a  ŽĒü}Ŗ!¹ółŻ^jV;OŁö†›ąŒī4­h‹ß‡ŚČ;–ki¦sķŅætü+ńCĀ>$šÓūQ‚ź…GƒČ9ū§Ž»©ČłZRg“xĆā?…¼ šĒĘ7ŗąI¼ūG¶Ž0’2§$N•łÕū x–žēYń6•5„Z åå„1?$¬I~có§9žž­–…ĻŚgLŽóĘŽŃķžøXŁÜ§fĪp_Q| š~Š<=m;[(¼VĘG°®vĪŲć,r’ōEoIhv€ ÆĘ šÅĶ„qFŒz²ä7>«H.§±‚Ķ"ŖF“źtŅŽĘÖéo:#ʝ1Ō×EąķAü/āĻųŗĒNžÖ];Wµ½šŪuÓn3Qłė™ś‡ū5~Ū‘ųMü!ÄĻ ÉāżŚtˆj6ä­į9(x|~?Ņæzüū`žŹž$6:„–æš›Äŗ&§‚źĒ\ÓQf„wFÜø=X|ĄÆZŗsG_Œ>ęŌćõœ§šTŻł”~(æ+jצǤüm’‚u~Āæ¼(æaųg¤|>½Š¼_|=Ło4jr]ž8lŲūĒ÷lÜ ž#xįwÄĻŲĆā-ƅ¼qsoć ]!Ō¼#āĖX¶E¬ZŒߣe©eϧ'‚J°G‡ąˆŖŲ§’frr“O’N÷ŗÕÅü®ÓvµšÖčü·żµ~(Oń{āĮńĮ·HŲEqü8ž•Čü/–ŚĪŠ„ė“ķ)܇‚¼ŚžGö- + æ³Ę„©[j:–{qŹÅŹ—8 Ž@uڹ;|G½Ņļ.Zh|Ņ c÷Ҧ-\‘LśWŃ“ģŲ#D¹É›œ„|ńāT_ Ō‡u«k{&8–’XǾ}2iLŹ›²?“Œ`C€»vMø†óUÓµaÓī<øĄ&b‡n}\79j[¢k¶6Z€µ’ā8®ˆŪŠäJśWIū3ŁŪܖó±ŗ·‹±ęUfģ²Eå2£‚§Ÿ„s×V‚ź)"uŒ õ«rŠä<YšīƧ©d1łqRD'8ģ*¦ Ń:ķ‘•˜å½ĶKlāH®‰UdłzdׄA j·ŅµŒzµj[QbŅÕ¹VŽJė¢[{XLp¦¦q^†…Łü¹ōƒń`p«-ĆĖ÷•oĶåų/šO¹ų"™‡¦:U[ʆR·SŒTrT‘YTCŹg*XÜČź7’“Œ¼nŽ8é@Ē©\N”6MŅ”äØ õĶZ:–ģBģ1ŪÓń ē“2õ ²¤ĘŲŚcYQŻŹīšcyÜ{Ša'©NāłÖO.p `ąZÕ±·ó$-nénpoZMŲ›Ūį’[é‘ (“mē.s]K\Ćh†8ķą‡=J§5ÅR«Ųh͊’욌E¢ßdēęĮĮµq=¬8hääw?sźĒ)š†­o øøŠ$ąwo`½IÆ¢ž~É_¾?]Ēq{öŸ‡ŽŻŗmFź2’Č™’–jzdVФsĪgģ§ĀŁą_Ā{`š/†%½ń6ϫޱy&#0ĻL‘Ҿ£·ŅįӂMŚśą( ēÕņ•Ķ›M2’PłŖ,ģqĄ“]ežŸg§ H#U'¹źkc)K¢%ø[bČf°< ‘¤Łsņ(9¢Ęg7ż³ē»Ee7bųéNƒJ‚āöąI)ēÖģT#s;SńU®—Ļp|Øg#śWĆ?j ?Ú^Æ*jZv™ÄÉ<” ż3Ņ“„NŚtĻēö“’‚³éŚ{ŽčßšćXńŠŠYcøĶŗĒ?žŗü.ųÉńÆāwĒq¼Iń;Ä×ŗ”¼¬6ØĒɅO`3ƒõÆS G©U=ŌyOα.ÉPĪ=+>aęTēÆĶ^‹ģyu§ØĻ(ŒīaĶM`ŲŹż;ÖsŲāl¬ŽūÉŹōǵ\[S@sÓŚ£›°š4ķld°q<ZŅŁŪéÖĘīšˆć,O¼Ē¢SSr¢µ>Ėż•aŚöĄń%–•šÓĆŚ¦… #uŖŽĒåĒ “ĖaócŠWõSū%’Įæg?ŁTiž,ńKÜüKųšUMŪÜ"½ølr”Œž>ՅJ–; Ó‹="hfÓķ‚é^vŽ–qŸŻ ģvÕ©§„¶”YiöÄć\•Ķ9F·Š­ŅY‹M1Ē„niŚ’2é³¶+•īI¶.Ę*)4 ¹ zRž×&I`+'§½rÖÖP©ieuŪß4œ‘QW3‹šŲ…˜g"²ęÕģtż>÷Yńn­cįĶ2 ’ŻJ#žĄQn§Lųåūh’ĮW¾|(ŗ¹šwĀØąÖüW5„Ž7t' ×ócńŪö—ų£ūBx¢ēZńŸˆu»g›+öh%&&ėķ‘Ž+h#¦ ń‹-āh[ ī™ėŽ‚»Ÿų Rń©ŁŚ}Ŗuó>oŗ3Ö­»§Ųż'šg† šFikmL (ĒSĮõ®ÖQĀ т~ąą ę©#2H-Ž-¹¼¶õ¬/ˆ6|/ØŽĒÆ'ļ ÷Æ:„CjHłŖŹ8šŁ2ć~B°ź+‘Ö-¬ōmF £ĢŲ'Ź “\ŹwgW ė½N÷ĀŻÆ‰“ ŽDW ­$e†F{W韄äń7‰4ė/ŁĮ$ɵl`@Ą’ėWm&qV„m īüe©¾˜°ź$®T0“œŅø ÄdŚ÷ösÜfa“‘żk¾' ā}§ųq7‰&`Tp1ßÜWyoį¢ÖĀ[f‹~`EksMō9Yü=}¾i­įn‚fĖ$ša‘®ĄĆļsĮ„=ŒĪKPńLo3Rģ琪zÕŪk“q¼ŃģfäƒŲŌ%­™\¬ćüGć­/ƛm/8dķL–>ÕĄiŸ5«m6{’VF>Qī­†©ŸEiž ‹RH$b›¶…'ūÕ®7„ć4x!OZl— qĖs$NŽĪ¦3Ҝ&™!)ę3ćŽiĶŠIō+lŚį–lŒ…žµóÄƒqx®õ5 SŅn£^‘ņ²{09č5Œ‘ČX|:Ōm¦[ ą÷6²äZ‹Ä> Õ “ž/ [ÄŲ6ķ’ä†ĒØJM\¾deųn=Rßl×¶ļizŒˆÜŽÕō¾‘ö‰tå’õJ†äZQƒF¤æhŠŁÖČg=1ڹ6¤Ū†«£+gœQUbīĪ–+XSO70„Ć^I«6ޱÖm›ķģŹĆ•b8ZØĄ³Į¼Eg®čzĆ[ŚĶo=žž½Ą­ ®‹©kYė’X£¦]»‚Ÿzµ¾³ą­L×äKKøµAfGŹ·”µzž-mģ‚y§ćę§Ģ€“4ŲīŠŸ0qļÖ³V-]Նé3…ČéX°©Y ūw%¹žŽ pžŸŹ°ot½2öĒę…]Fn¤R4Sń&ƒ)JĘ6Ÿe"ŻK¹Ą#C]“ ’FÆĢ:b¦[ ›Rž„“fčA‘śŒv®I|²H m݇jij©³»ŪYŲ2/PN«zļŲīŒŚlĻĄ ©=kX“«Ŗjšœ¤Ż–Wfłp¼(Æ¢<öč4ųŒ”„kѱVK‰ŻÜżžž# ĪŖÄc5Č[č×ZmĖIg$_3rĘh14ü]„ėŲźÖѧ#צEyž”ŚÉ ×WnŃ»Ą# JŹĻvW.—<ŪQšĒūj]5ŹD»ĄŽĶtWZKčöź‘4w*’20`wؤ®ƒ•Ųēnmļ§Ž<ĄBgõ‘qi5ø_µmٌ{š|ģ$ŸR¬–0[¤Äķ=½kOKŌc2e]ą÷Ǥ]É%ŌcŽÅ¦–ÕĻĢ3\SÜŽ\Jń‡ĀŽ€i%®—x…šF%Ać'ŠmŹ2fb„÷RnĄnéž"Ehüȝ£,5×§ˆ-#¹c qČÅeĢĄ®ÓG~L¢?-²{gŖisȁį;öœåGó§Üfå³xj]ā–P F3ŠdW”O¦ŚK:ł…Ž0ß/zr‰²fmĢw:uĢé×2DTēåć&½ĆŃïƧRŌTsęt÷¬Å)Xå5½:ļ$Tat7cpĮ{b©-½ˆ2yq‡«v„&G9„PęŽb§ÆŹqš”©ŁK{ ”Č Ć”5ę©•ÖĪęÉ¢’r»Xr}~•°®©ljÓ¼ČēŪ4mü%}Ŗ;k±m¼NCŌžžŌĢl$ķs)Żh³śŠåļ­ ˆ£ecŸĘ†kœ¶¹«ŚŁé×RMy=¾ĮŠ ©#¹ęøæ xŠ mŻ“‹ĻķżcFÄģ>†°.Ǧ-¼ļhÆv¤)ģGZ[UŽŪ?dzņ t÷ Asgä\;DpF@ė\ŽÆ¤ArĢm`T›<69 …>åŻLŒ“2HH<޵·5ķ«”·’ķ¤”ƒšE’Cc„Ķ";Ģ”‰_jčåµ±XĄ…×a쾕¤d%„«_Én·)O-ׁU®“{”‡‰CF­ĆŠŃ²u#¹SŽ#±˜8½sOš^§Ŗkw×wŚ}ķ›DÅCKĒb§„c`ä;=t¾˜ŖÜ`sY'TImVIŲ§= ę¤O(ń~»„ésĮs5ļ—š¤ē€IĄÆVš÷ŚģüKÕ¼@ŪǬÜĒĖ”%ŽÆg4²>ōݻŹÕ.ō[„Ö?*/ā©nõ¤*Óźf=ķœj,{ÉŖH—r‘˜ēŃO~5ŗw‹:ŪM6öFE¾HĪ3Ņ ¾k»weó¤Ž89ķō©’`Ո-V X”” Xģkr×@Š  kĮݜUD“RcŸ1U`Ų öJ¾5ķ=왢ŗGl`GŽõµ08Kš×įɈ…÷čkĄ|yāoųwP“±Ńć†ī8 UĆe”ö­Xģz­ź¶š]\Ą!v+žvŃ\\žX!aEŗŹķ ¾‹0šd?Pā»ŪŸ§öL«$ö…ŒģŚ3Ͻ.T]8#óļāWĒ/i¾"·Óģō„æ¶ņĪT®Ę9lpO\f½ĆZ»ź–k$šK ÄnŪžžŌ„M3¦é+#ņāĮÅžŃuMguŌvHŠˆĪ Ē‘Ļ\WÉZŸĀŲ³‘“+·}R Q ࢌ’Ē>Ż+Öęg!wOÓoõ(˜H<Ą ®ēŽß”Æ.Õ­āø¾’+ė3hČĘ4'‚GŌ}*āīe'sŚü1ćO éšHµxįµóA#Ć*®0vē”>µōƅ>i3šģz’ƒµ»{m%'-v³T$c=óJI™³čæéŗwĀ oĆŽÖć‡T“f ˜‘ĮTēÆOʼįę”āiė Ż”Ė«+±•z–ēŌĘ=X¢|]ńāÓĘž:¾Šg²øFµCŪ’2Å»ćé]ĆĶ'Ršī‰q=ͼŽÆwHĒ||ēüŠø½.Zg ć/]ėÖęź+‰ī.TķO3‘ĒʦšÆŒīģžĪó^’;Ē…pŪßjÆÓéLr‰õ-–„ŖkÖZf·į„’=0²ł±³–R1Ī8ė\‡Å}ųņź=k)dĀ%“ÜōÉžtXĀV8/čß¼a«ZxO_1jqK‚˜Ģ­Ū ƒƒŒjvÖ¾&Ÿhš½üĻŖ\3ˆnZāB'ś+ąĒeįķ÷–÷ń²6͇6;śŽEyߏBŠo.5k‹ht}6śō<Œ3•‘“é_]h¾¶Ņ|·ŗl¶ŚäźĖt²'Źćß“m+VHē~|![/ŽjśuęžóIœÜöÆf½ų‡„iš‰šÄ®śeśŹP+œ™ Z[čLŸC…ńœŚR®£Øź+o3¤1pG˜ξx“ń֕wgØ[…øäÄ®¼#ėZĀ6V2hšßĒ}”\^kŗiµµXmž¢°5ˆŚ÷Ä-Nšī£{¦öƶye;‰äż+”- ŒO®¾ų_Åv ±}RK˜õs°ķENŹ=E}šņö :ĄKk˜›,Ų9łsՒ»øÜūWÄ[ĒąłüEŗTńTq°†5 `öÉ#½|kš/öń†ŸńīĪK© Khä!]YųwKµŗŗņ•@*ģĶßéœW¢XųÅžšźisiæŁŚØŒĆ Ź W#±?•(ĆKāp^'ųcć .}OXŠ"ø±• rÜDrˆēžæzņ}GæX‘d‡l*8²;fµŗ¤xrŪWŅ/UŲ„ĪĮä‚v–ēšė¼¢éŚeżžŸ}&&‘Āœó¦–„GMõ'ʁz>µą’kqŽŪXAåmY«™Ał‰łÜ÷>5š_mīań…Ī©m˜ŠĘŲ £Æ=óIy—ŠŚ¹ų—¬’lL³Ä.¢i<ųĘÜn`3ÕéÖ_“wˆ¼TƒJŃōçۈDR«®ЌzžzR±J=>$ųRx[DÖ,<½?S‰Č%|uŻł×ĶQ­š³©#|•ß#ėJÅ”³ĻÄdŃōčü-āõm<΀Ū[ĘX¦!øĻ'DäӇöv­Oųų¶nߝø€>µēOqümšD^!ųu­ųKTwuwmCCr2<4_ˆĪŖ×ņ)ūS|'ÕžüJŌµ4¶hō ĒgeŚvĀ㯉5µ&C‰ņ¼Š1ÕFZĀ?x˜wē½vAœ²‰W÷)œ‡ńŽ0i¬S•FfRŁķVAšc}Ä }ˆėLó÷ģ(Ż(*2±ų·÷ž×­ į­ęź’”žņ²£÷küä’n’Ł«^żž>2xŠĻTK‹EŌeŅļķdZŽåIŪ'¦É+‚8 Ö`|¬[4Fqnkdg9*+©š·—VÓĖ:+ĘŹU˜zvÅsŌź;ŸCZų‚ŚT™žŻMĻ™»pld{~5Ķų¶k½nÖ)§‰„h˜a˜’vžÄžuĢŻ##Ļ"Ӗ8&‰ŠyO‘Éā±E”HDŲA\\d]ŽæJ/4K# Øć’×]ūĄŽƒWšÆ…müI¤ |‰U&Āž¹õ’ėśßÓ|i<3„ųĶf—O‹żfה™>õqŸsõ¬£(is4üSż “Å"©·žįwØr~`qŪł‰ńć>¹®=ÜĖwq-£vd€5g蓜0“]ZŽÉ1GØėZę£{uqop‘7lWÓó®ÓO»™’=&g…Kų*3ĒæćU mź&ń’Ļ0ÄøÅū‹eż_‘č> ųOŖkڧڵ "ŸK.6ĘGģM~‚xCĄZnkP=«”Pw)Ę}«Ó§ #óZ“±ļŚfŸc6…q_ghŌo`nėÖ¼ż+I†A1©ĪėZ®W'øE»ŸjF{W-©ŪE,ė‘”½TV¦r•Ž‚Ś {{bp Ž:ƒ\ģ O¹‘»ņµ©‰"‚tŠO,ž™Ś\΁fŹöČ4„±¼w=AÕ^(³«ožÕ©©¶›©ƒ;@"»@#ŒūÖ76^G'œ>Ų ńēZō]>ĀŃcŠ<–󎑼dY涆Īu„\īB»Oחiw³É«żB‘Ŗ·*zŠfœģõ‰ZŌZ›Ÿž'oāöÆ„¾Øś|6ŅQlņ|Nųqū[]Łė1hVžńlQüĖžš•ņ_‰m¼Qąį{ݬ÷ÖJ̐œ”QŠ‘ė^,”gcōLŸyršn½c«"Ąū”2/PÄŌæš«4x3üa¾ńŽ»¤^x‚h®µFÄ1Œdøģ=k#OҬMx‰ æ©bN^żœž/|IüCńįoˆüa‹ŗš…¹±8Rf ORZĮńæÄ-3þø¶™-ēæ•wG6žŲķŠņ«Š³?xį¾&Ććč{\<¹—åź|c©]jw&āg&vlõāæB?f^„¾«į¦¼E‰”-mĮ$dµĶĢÓ>­(µ©'ōPµń™ā"īT¶vņ®¢nœ«ļҽ:ćÄvWś‹g<š–DÉė×½k§&. Fŗx×ö­³åŒ6’ļ4oźv@\ c˜3Ūßµ~@kŽ!ÖéżkNB}lĖ_dŅī'¶Ö# īŒŹyĻōÆёo.f•™Ų±#šØé”ō9ZŒ¤„Õ×z{Ū8ó …ĪzÕ»4» 9²øxd ¾&|Ɛä+h P©īŲżżų”ńž—ü‹Xń^Ŗ¶V:Āųv$™Tü±Onź9Č%P~fæžo|,ž ź:E®kØźæd ĖĒ&Īv÷ķ]5ĒóĒ‚9lpUól$U£Lķčöüł”šoWš›ļ j°Éc¬ŲN`šŽPU© ńųWŁVŚ~©DUķądoā+ƒÓŌW“³? iį£%n‡Yšgö²ųĶū#kąš÷<[oįÖę+x®ŚHSćt/•"¾›ų©’-½żŖž é~ųąŻ×Q²¾ŠK NĀ2¾PC÷Š’ #ØĻ½<_F~?Äą+ę”ózQä« )i„Śī"ŠæąœŽ ųæcqńtžÓž°ŠļaSżžm"’D”»8'x WĪļĀGįw‹nü'©ėžńUœ<Į©éäys)éņ䱎˜Ķe*ˆ÷)cŖūYSqk—O_CÕ~üI¶ųyć]3UÕ“‰µ] Šanį]Aą8Ļ\uÅ~‡|ŗżš|_ń®öūÅz…Æ„5]<Å·RySZܒ>fģ1’3ōĶ:rS‹7ĒācJR Æ+;zō>µų³ā_Ł“ąÆĆ_xWOń’†•üÜÉį-KĘ^7×¼AāIę±Ńę¹bˆsF„’ASZŻ+qŁ©ÖĒ'+hś&§šēĄ^µ[ŻóR–RpŁÜĄ’xĄėÅbĖs„BćIæ¼M3P Gv¦&`}˜µēTnśµ`püŠ»ÜāõžĀ½DøcövĻļ•Öī‘yg4Ł‚ćψ‘ųĄōćMĒCŌ!XŽ%a2cĮę«Zj±&¦,Ė® ŚzŠvÓgI¬A‹I' y{I8Æ ²¾QŖ¤lń€Ü žżØ4rīzDņEkn ä{śj÷9üEsšÓĄVš„)mu„j R‰§ ÷ę“‚2œ‘ę~ų§|j{ķj-NÓĀײG#ŚÜ˜Ę^Ź{Ķ`x~MsĀ’\ųGÅSZMŖŁLŠK,'))qŠß—Kž}YĘöGJš”Aœn’늻op²īT;“Iö8¹Ń[U”Ėg$ČĢxēšä¬ 6Ņ>čbxć„kŲŹsītšŪŻŻ6OSŠÓ·Ó–»žgĒzė”FļSńßbŃČĄ å˜ŪY"žHüēP£Ø'“Z“Ł%܅lŠ`ō+A‹æB֕ąĖ™ī ߑ·9Ž{&•”ŁĮnŖ@GĄĖb¹źĻ Ķ?õHvƒøĪØĶŅ:¤¾:ᓸÖÄĄĶ0TŒ}āĒk§ųgš÷āĘ=dč |+ā9•ĀĶu,l–šŒąÄsjŅ”Hœŗ«?æ`Ļü3Öm0{šłKāoĒĶĀšH±ź-=ŲuĄ\zR‚Ōķ§LüCż±ࢾš £Üi¾4¾Ö½ż«łŽųėūa|pųš÷šk—z'‡¤!RŚ.$)“ņ½wP„s§d|„+F»Ņ$¶ęĄå©=é†O Ż+Ö§TpÕ¬E#)ĆśQ ŒV0ĶۊR‘åŌ•ō"Ćł€2|­€qW–ÜĘw+\óšRfFœ6ŒŪLiŸPzVĀé»eIDŽßųĖtw¬JŒnzĒĀ’ƒæ>8xŠ×Ā? |Ŗų»\˜ˆįhc>AcŻ„ {×ō¹ūĮ <+į};Bų“ū__®·āŌ™/!šō3‚^€’ßµeRV:”NĒō+įo xkĀZM¾‡ąŸ i^ŠcPžU¬j…€ć’ķŠŽ»ŠĪŽ1’„#ė^|åsSœŗÓ&¹Śfi#`s]¦‡įż‰ Ņ.Pzžā°›č#¼Ü±ØÉéY·zŠ@›Õ€Q×=ė14`Ēā;‹‰üø`ł:Š·-ŲWStŲē½C™IĶͬ‘‘Üć¦+š+׊[Ł®#“ÓćūņŹūQY›ÓłńūEĮJ~ žĻö𾓔2x§ĘŃ)Ž3÷ćI;?~|yż¬hߌZ=EüWāį£ųfpD6vźA Ūyā®”Ū GåōÆRœ‘ćց÷ŸĆ-7P×ōx£Ō ÄÉņ†aŌWgØi7Ś ¼kz.­ŁŽ7ÕÓ†q9KO^Ū\\ZĮ qk ÄO£o7Ū …Ć)Šm\ƒēk:ßĆג}…[–łrIĘOJķģ,&×m“̽6 œÜĒzĶĆSH˹ŸÆü5“Õ­Ākvaå#÷S(ĪGb yoü)xP±Ō%»œĶlū‘‡‡”­Q\ČöM:Ę;x–fYAēł×£é¾dPŸ>/ŸłŠa9 }^ā)™B*®éš[ļ˳̪ńĮ&ƒœŻ“Tµ_“%O„fGußč²FyčŌóXӒ[tbĘŽ<öŒŠŹ—K·ŌY®y2ēøäżją‹!±š†‘Ø]»¶{’ m\čVö¬»Iēź)ϰĖ¢„#`5»u ­ž'ŹK„$a}«0_»Ū²Õ®/²Dy`{v¤E˶ńNŖé1d¤õ§]¾˜Iū>Aw>“)œK[Ęe1³Sа®…t˽:k{«UyN ÉżŠ3š®Vē—ėš§c8š)#“OĪ d}ßq^e©isĖt» żÓ{{Ō‘&\Ó¼9§:&õŽEąÕ4“Ō°ŪČZ@HTMģRšĪH˜¬•żMKw,2XG· ŃŌ`µdir¤śg‡õ ä˜Ėm«(Č šŲķŠńOPÖ4ĶJĶ4Ūx¾ĪŅ~õœüĄ{ Ϝ³×ōio.Œa(ķœņžõ~ƒpŃéŃĘ¢#ڧSZFba#ˆå ĆkS øåĒL Ž,ē:‹OĻ.›5ĀĀšćœÆ-ģMxiŚ[̌Ė9GCLÖ+CĮÆ4‹KRŸV“øV¶'”a×ÜW_¢ŁāßiK ū¬sRā7+“”˜.-BŻŚC½Nxzšä|]į…øw’Éeņ³Ą8śQČdŁę7Ś}ŅF ˆ–˜ŗŻ«Mķ–×uść±§Ų,Y°¼›P¾Hä*‘w$u®Ź’Āķlbš†ut`c4Äs7VwöĢo°¶ōØgŠ9`Ūv›ÜƒŒńŠč-įVŸ*ē ŠŸSh¬Ńd‚rŃqĖ sé\ąV‹Vžö[ɹ#޵‰uŻ>‘ŲĆk+(Ū÷}źć$cœ»øŻ'˜ÉŻÉfŹŪūFŻŽš©;®~éÉĶ9O±f;Ęä Ņ±™ĒEåYa<Ņ®IjŪ '§µgģĖS±VāŅfĢŻ°p“ė[G.±/ŽWhq÷ŗŠ„o§&Øā9 !˜ą’?• ̊šßĆy–SĮ"`~CŒr5«ąĻxJµŗWŅc³¹vĮh”ß^(åKaūCÄž\4PÉ»ųzW=g>Õ ģs‘Z—H”ū H$¼ŅČ6'Č„ ×¹RœēéY‰9v” ß U(tx–õ®„csœ})ŲŽ}Ž`›c"\óŽōMį«»HÖķ]ÕU²GbėķZE4€±’ŅˆQŽyėfŚąŁÄ$—=0;Ö`bj·×W«4„›ˆQŽ•ä¾%_Įis6™¦›ĖxŲ0X×,ėßŲ“¤Ķ#†o^kšļÕ#{V %Ō1ÜW?{yyą .åR{‰-ć˜·$zW+•“7TŹ>+ZųŹv-®ķnŒĶūGƒŌ{WŌ³éIlW͉óĪsŠÖ”ßaJł’[š_‹‹ōżCNÕo^ÄL²aU~œē5ō$~“ģöSJķoz„Ē’}«¶0‘ÜŪNövd‰flc­s›Y.c–h,IQŽ­Ē©Ļ6U¶&żā¶C ńµ}kŖžŅ·†Š¤›¼ÓĮć­AŖÅ-Ū;ŪÜ1\ב\坵ŌNį°ÅRv„‚ _3l}šēg“µūc^ܧ`~mĄĘ“öƒ šŚÕb kÅlö?….­\łŠ²)†58=O9œŽ†;õ¹RŽ­ø½8¬ĖVŽ @p»;‚zūQĪĖR8oxGÖnŽń4{xćb 63³é\ŻŽ™©i—Č F!ŻĘj™§“?<)ćŪ„š±Iu[*ŻL ćįGńΰ’ömLĘw1‰ÉźsŠ~uåēN}^āéü±,Ū†Ür¦™“9[F¹±Ćy °Bż0p ö«æµOˆŚć#Y¾‡Oˆ²¤nåÕĮõśV†ž§ŌZ?±Ü RžBŅJķ<Œp3ƒĄōéYŽńŻ÷‚üOŖŽXŽHŗrøņĀ6Hē$ʓd>Ē&”©üQų›ŖxœŪ[^¬ÄFŽ`*źĄņ}Ę1^ń©xU'š½ķ¼ńYŲ,\‚2$”1ōļFȞ‡Ķ×~šę‹„ßÄ-²f•ŗ?=s_5ŽéWŚ…ė(…ŽœgŚ~ńĻqLŌō}ā.»į}%ģ,Śłaˆ‹ęĄ+č½R±ųŖ·‹-oo./ÆļeBdŁIŖŠŌ™Bē°xGā>—„ųĪy¼RϦZ\KņņALIüśWAńORŅõkYo¼1p4Ų"• 1“™ˆēv#„T‘É—š—āž«ńH—Įįöå²lL/Ż\1ķĘkī?~Źcòåߏ5kŁļ5Ŷ7 „ēƒœo­rb„Ė'±Æ-“>sż¼CąB{ kO¶Ž ’AüĮBIŃ·+éļŠI ²kQYŪЉD±LńŽĒ9¬ŖAÜS•·<ēį׏āŃģ“T¼½¶µµµ$É! "óƒ‚jÆĒ=Cį‡Š4+ßxBx_ā$1¤–×0C”›Ō7łļMA˜Ź„ˆ>&žŠ‹ekmį-SĆ,u –1=ĆGņĖī=;ę¼ö=K‚Īö%£p?˜”žÓ­o÷&5ĢxĆ^kÉÖ8BÉk IK+?į’†ķõ emīķā)§VÜÖ|ń·L:eåʕ§ŚŸßJ‰¾)[?usŽi`ą•īgĖsķ_Ū/üŗš|׃]]G¾kp‡÷kžōĶvš'ʝƾK+żVņßSŽĢ,‘¤‡ż!±‚OųVōŻŠ*zų.Āץ^*½ų†—VšKŪ,e_ ³~B·©ąŠė¾'üq¹Öuy5 † Ó#Ī”O§łā¶ņE^Ē)?Å=e,dX6Bd+ .dNµÄxJŪ^ńf½yż”fæh…̉•*ĮqĮĮõ„bTµ=ćKŃt›«„ž×¶Y'< Gpj·Œ<;›n,f[‹b€œŽc>Ÿ…ø»/xŽŚŅĪįä Ļ2Čv…^ż2q^ĖšOā‰tˆ/t{ŌCYCGĻŻćļfƒSōH¶»o [k7śäĆW¹1³>F~Sś×ēOÅ]DxāÖ„āG…5ŻøŽ’DƒœwĻ­C“ęH–µ>ŌųAįŸxóĀ:n³x#MBX± xėĶy'ÅMoÅæ³Ņ¼Mk‚~ŅŽvsžÕjZŲ—ĒĆ_‰VZDD“sOhŅeÜOįYņx’ĮŸšžióÜ\Žķ·Å…Ź)'ŅŗŒåIÜśĀŪRI,o…õƓ«m ˜M¢¾ųļń‡Zšö£•cpéūµ9lg’*%$ōC…=u<‡į·ÅtŸ}¤ˆ.%øuĪń¹rz‘Ūś/ćx"Ö¾ŗĻyĢņ²[:0-s•?g(«µ”š‹Cy§Į­Ųų¦Ņ du‰£ł²GŻ'#JĻšµž…Øė–70馌nž\NFeSœž\~uŸS&očž&žĢÕmõŌ'T ž€(ĄśWuØxÓÄ~=ńf…•(].žy#»@$‰Ō²qÕ[éüém¹'Ŗé_¤o†Ś>«kuØ[ExݜŒ9GųWĒŗnyØj’2°ČĘDAÉ^sƒP\bv—žŌ,öČŚ]ĊWzį 8>•ĄK«&•~ @Š*#،‚{`ńHŠś/Ā:>¬t+^ŌŪOŅä“tŒģ©ÆųÓ£xĄŽ&³—Āŗˆ×“›—-(Sž¤ƒĄśš Lļ4Z_ųWO¼Žś\ȾZ!+œzć=knŽÓL²ŃmüIw¬^Ż­Ń>oš@`ąķĪETcr’<“Cų…ƒ¼i6æf×¾T2l‘Už_]ŪkõOą÷Ä(¾1ųqgÓm6ΐģFQķŚ“QA(—dFŠōD$ņ×vŅO÷ŖėmR0ĢómĶL’µĢd¬{¬5{/ėi–šĪ%·0²¾pXƒäkńßĒßõXu-cÄ:a·{c+Iqo™žqłŠĢJ'Ėŗ÷†.“ū‰ļs3Ō”!9ęøżGqµó"Œ«Ŗ•>­ļWchĘĒaš«ĘŗĆ­sMՒīX¬›jLŽŲß?ż+õŸB׹×4Ū}OOo: eĄĄcœ~5£v¹ƙ²nˆ¶…y’Åχž;š¶”n؉­Ę¦āÖwĻɰµp;֙ł‹©Z >`’·—sŒKBŒ õĶu¼[ØųÅŚgˆ¬®’Æœ„ķóPšr}©_”ÕOsļŸ>Ó¼eį}␐ź6ā9³žļ^;‚?Jžƒ’ą‰?¶0ųÅšwÄ?³Wˆu„ŸĒž ņÓOY2’\ٶqŃŠąŒj›ßCŖøÖpŽiŹnYŁœ?= }gš“Å̶×SE=Å«ł|œ’=’ĻzĀKB„£Õå]ģČŠ,ŗd Ēq܇CĮćóÆą«ž ūūi?²ĻķKāķ#GÓī­>xī×<-,iū«{–bÓŪ+ŽÖ9²•Īs“ƒn2‹]tżOÄ稑ųI©é·sīÖA2±BÄcv:~…*¦ģ)!zc„wĆc†§R¼ ąŖ·=*Ž@‹–]ĄóTsWeŚBüĄę¢:w(ĄļoA֘\žŪ`ŪÆ©õ©Š »ĪzP ÉˆŽį×ÓÖ®E;¦v|£łS[Tä}ū"žŅ¾&żŒ’i?†?“ށ¬Egi¦ß„¾µhå•otÉ,ØqÜ)$p@8āæÓcįgÅĻ ü[š…üąŻb×Yš‡ˆl#Õ4ŪČ\4lC}AÄ Ź¢Šč;yę3@BLń÷öÆųŸ¦>®­ķ„×^Ō£k;Ł#1pHüłĶpT޶ącĆŚŸ…Ƶ†ŗ™·Ö®,\j5ÉLĢa=6žćĆńüt’‚‹| м}į‰|Q Y}’źņŽC<"=¢ Åė@Nōį`?˜mKO¾ŃoÆ“=P*ź–dC1XśŸŹ².-³õ$¹ęŗąõ9Ŗ"ˆ2Ø*»×’ ėM¼Ž3 ˜ŠFßNµ±Īё{ß'īcó©· !UyØ~fłšH×a?(aęóPBUr:c½EEŽ7c“:t©’VRW,˟ʃ¢%ÆõŃä?ŗ ©ćÖæuą‚?¶żŸĄo:·ģÓńR‚×៌“ȱYŽÄ‚ó @Śš8ō¤×Cŗ—cūxų{¢_XEįĻķ¹/5Å֚ģŁ6gę>Į±ė×½}i©ZßŪĒŖ+ļ¶|»„až­ūžµĒU8čZŅtÉb‚k9g’DWó ~ź3‘ϵ~’Įn’bm/ā’Ćóń·I²²­ŗé#>īś-Ų#ī”ݱ?Āéé\†Gš½­čš†}­ųsXˆŚk¶7ę0­Œē”}ėN•ÄŠ VSœć…T YėßcžŚ&øW”‘œō5ōY_C< $ĻZ%9ŻOS\U64¦ygƒgƒVÖJÕ ūŗĖµ—oĢź?Ļ­}Ŗ|Ÿ\š~«¬xNŽ;ĶRŃI-ŪågA鳏imÖ£m™¬Ö÷Oóķēµ’Ų‡IҳF±q é @±FÉéé]Tår% š•ÄŃNewąāŸ„źwšŒ(č6…ėÓŗį±ŒU™×ų‚ūRŃ“µ[…ŽHQĘsOš‹īŪPŠŅę3 JŪ2HĆVŽ=NŠg½¦€mo4­OXš{}.gŪ¹H c®Eu·~Š|U© -7Wø³‚1’|Ą/©_Ź£• #žÖ4[o‡×W˜ErTPrŁ^+Ću]B¹˜Ø;ep(Īö'€­c;#XS¾ĒŃ ¾x‹ÅóĆż”ŗ~ž®’Aó‡R§ŠW遞h>“XŸM³B0U”}Śńń5u±ś'圖ovzĻöE•„¼pŚŪؑO«źPCseö;łŚ‘†ČÅpĀZŸ°äŌRI Æh^Ńl5KOźņ29@ ¹ėĮn+äO|U¾šå…źREeŹCĆÓOsõüžä“ĻüA­jŽ&ŗŠi'‘ąųĒ&³ķ“/ķåˁƒ]“£}ļ[ćĖNY^ķngēŪü’«zD~²³Ņ ¶@®œ×į_ jz߉R(lnŅ"Gt+»>™ėҽ:tŃüļ:×Üū“ĮžƒLµh¢GÜq‚G§„z4R²DDdīk¦4ģsJ]Ī—ĮzÕ֛©\ČĒķóDb1øįO<~JÕ¾²„y¶a Wn†.lĖ–÷Ė8#§õ©Ī£bš\¤ˆ¦0 j2Ģ1ƒPǤCē‡ÜɟNōĄŪĢrZ“AT:­Q†Ā_)„aœvF±•ɬ]ZFe\HjҹFŽ?™zņėYšEŲϓԅ™>r–SǺשi—–ZŽ›m<_› äņĒ>•QFɖį+-ā¼ŖÆzz×9ā=. /XkzA·Ž1s®IlŸˆļZ(Žē]©]ŲėVāé8eQ ČA#čč„:éJHØĖ¹Zu†Ö`@$×®īŠ4hŌ¤„aˆž*‡¢V¶9».ļ ą¹HRĄW ū@čwž$ųY©ųKޚ“R ķåŒįĆÓ>™²•$ާ«„ÄZIČüóųYńc^ųoć(#×,®lu8—4Ņ9†¾ŃŌ¾ ŪxŠK}+χH[Õ ™Ž\÷Ļā+å±ų[LżS‡+)“+}ūJŌ ±ä’'m­ü­łW”ųÄWŪĒp!)­“Źs^DØ{ģ’F&Ɂ­®Q£šÕśą”ü«Š„)-Ͻ„ŸakMѧR2’čšo{mė”ńdŗ…M{ØJļq+rzŠVÜzb³$€`ŽõĢäö7”SV!æVU6qŖČ[ƒĒŻC“GX^Į¦±d;”ÄHĮ§ĢĻ3ƒŒÕ¤~‹žĻ“œÖz#ųKā5Õ¼2ÆŁnPį•qŌ…;öøń·€5ŸŅķ£ø¼;’€7Cųšģ„®~9‰į™ŠĘūZ_ >:š‡oeŃ4 fĮ”W…į”ē}łÆØ¾/üVŌ¼7šćGšŠ»†ĻİĀ#FĖĘIʶ:ū{VōĻn„ŖG~ē1ū-A¦ų‡Ē“>¾žtRA™/Źļóõ«ķĻ|=Ó“iGˆ<6Ö$O ä”÷éR‚hó3,l©Ė™_šxcā'†ŅóSÖ“mFDaš°Ū;‘_!ZŪü@ųQ¬ßé¾&¾ƒÄZ 4bś<ī)٘č:ÕŹŠč{\+žóÉşGiOńV•Ģ7 …°ēļqÖ“=„ ® LžAéQŲż{ ŒMYŸ£ ¤ŗńļüć_ĆÆk挓‰ÆKG}ŒŠēzķĻPP}+óŪöXńe®ÆšžĪ8üė?ژü“)ŹI“`ƒõČżkiĒD~wĆųiQĒcŅV½E+÷N1žw?9æhķ"ožÓ÷šģśCé‡Ys,éåā0Ē?2Ÿ|/ē^Ÿ§j- ’\īFŒ1ҼšūŸ®å®é¦r4łoģŅžhäA:įCÆ š‹Žč÷§I CnŒB)ļĻ\×/;G®šń–ē¾iwod·žH”o™āF!]½H«‘$—,|Ę äć'„Tj7”ĆS-§½ŒĆtöś‹YČx'©= tb$÷1’Ņ4~Y<ēÕ¢›<ŗł]>Ē'g=½ž¬Ļ#¤€Ū˜±Ū=+„Ņ5õÕīµ/€Stdäœv<~ myµ0‘ŠŃB|<“ļ5?ģXµy¬ˆ™ŹØc“g€­}żš§ćĀ±Š>#|ųuń‹@¦ ʱjL­ņüų8ŪČłJžzõĻE(ĮI9+£ŹĢ*VœTa7Ó_Ö«ŗ<«Ę²싯hŚ®įūoü+r“27ŚĶĢvį¹–Üp§§°ė_•Wžŗųo«k>ŌużÅ/cpŃŪj–N­ō”r¶0ģA¬jįÖńŠö°y„}=«».ŁŻ] °FŁĮ ūÕ×ųoįĒüKk&«£xcUÖe·'͆Ś=Ģ£ūÄzq\~ĮŸKGŗ—åҼZŃMky¢jÖ £k$ńŸē^¬čڟ‡üGhšärŁ eͱuŪ¼€xēėKŲČŽµxņŻ3æÖbŌWĆRkM ŅĄFčŲž:ŸčkÜægųSā…ÆĆĻź:U­Ņ\“dÓ®Q˜ć#ŲWE:]žÅcō?H¼;šŖĒĀ^ÕuŲō‹)<;¼ˆQ>^«Ć.:sŽkņ"ĪAyćŸŪ_³OeöÉ&v$…Ī1ŸlV܇1³®¼Ń<¬›6Œ?ˆō‘Ė&Ąć­a(ÜėöŖ×gCi§ß\š¹ėŽ•ÕŪh‹jRiŠ»ŽĒÖŗčŠrv> Žxß “į'ˆÆ-RŃul°|Įœ(@=5“xłAW÷ėį©õ?Ķ^0ā¼NiŒž'+¶’.ĖČ­±ćpņ‘śV²©h¼ÅRXvÆVœ,®|\ėéd_ŽŚIøćŒÕq čćåcŸSZÕ+_B¼V«,ŒĢĀ4ēŸSVÖŻČ,F:ōļAĖ9ōŹńƒ>Õ%²³™p1Ÿ­S‘Ķ)t/ć%6ōāŖN‚I‘ŃÜ <Ø©1lÓˆ•ƒČāØ}˜yĀDĒž‚ƒ)3¢†%HX:ØP3Éė\µķÄZ5RķœqüØ2q¹.‡į«éVņPR܎†½·IŠģmÖ(Ž>¹Ü cR§aØ!—7QjOCuæ\śÖÄ2ˆŠĒ!ŪŽ+†£&Pģ>E)±TĻ9õØ”»yõ4MO¼×“9›ŻN; €‚Y Ē#õÆń‡Å]?BŹÜL.&9 ‘øĪļOåS£:©S?,ißŪ†ÓįU­Ī§ā/憓ēG ?ėHģS99Æē?ö˜’‚—ųóāŪ x ®4Ye-©²l—#äćŽõÓF•ĪŪXü½Ö/µ ūļ¶źZ¾„©ź÷ĢY˜ž¤ēÖ±ŚweŲ²±ē$ž¦½jQåGZŻ Ź„1§Ö”Č_›Ļ“g›Re,#+¹ĻJž2nœuČÅa'©Ģ\ū3ä¤h½A9ī+wOÓ>Ņ ębzb‘J7: EŌõżu|%į]Rńo‰‹(61v'± q_¹±Ēü÷ćĘ_ģļžŃW'įAY×HUĢÓ'¤™ė‘ŪŽ¢R±“ Ļźą—ģõšƒözš„‡…~ |?Ń<;*ī…ŗ‰f#ų³źqžkŻ ²‡d—z5ĖœõĶpU©ŠŻ"Õ„”×’4R9†Ī+Ut•“‰š'.ćžEsJV*Ę=ŽÆj· ·`§"½Ņ{{ˆUą#g ķY)•y#ÅtĆvPĒ„aKkē\“#„ōĶg)t~1e`æ)@ż=k'Q{Ż_÷6¶lüõQÓėYS‰óĘOڃą7ģŻ¢_j?üYdśü?²c‘Zb{?/ž½;?µüėć?ķ śŸ‡žAqą’‡Ū GĀ9lć>üꃊ”HüÄŠÖóN–mOÄ÷w:ξģZy®„2;Lž”ż{āŃŚ½¼q­ c“ąē?.c³c…ŃtmGĘĢ6vQ‹‰d ½kéĻü ū4öÓkčy+OŅØŹR±õ›e§h³·ŽŻ°¤ķēzŁH,•TbŲc­9„.‚™õ\¬dńÖ¶UnŹIŽõaTÖ3-Ē+A*–\®iŗ”Ö·(hŲÄŁVŪŪ5ĮPė¤Ļ‹üyfś„%³Īv<¤C‘ŒAXŗwˆ§ÓŠŚ5½¼œüŪ‡'5Å'c¾,Õ»ø‚ś&œŪ$ ē¼ŪP··±½™Ķ‰Ē\t­éHĪŖ?FgŠŗ«¦[éšĢ[Žp±Ī’p£žWŪc蚜ō‹Ū{ŠXØUźöÆVŒĻ*ŗģu>ų‹wį«ļģŪø 6A¹$óž+©ń'ŒRņņäVÜ2ŖJļŒūĘiS\\†–9Ō7}Õ®÷Œ {ŠæLŽ•¬esF_Ó< }}`n§KISŠœdķÖ¹Ÿųz4ƒe…̰:°;„Q¢ˆx*=A-–ĪżŻ¤RH· g×é]n«ŁŹ4ŃS׎¢‚e¦2YXŗł y=+F×Q’Ü*\'˜ƒ…ĻaA‹EĖŲ§ŹŖx¬čåžŻˆ‚屟»ž“ņkcŖŃ“Ųõ5’Ie:‚Ģ žT“Ki”67šķI;”Ń£ݾP2ē9ķSȇrŗ¦q:Õ'b‘Ø\kl·~¾6wQ°$÷®[PńŒ­§S¹_“[ē÷£ĖåŖłŹ7#ńe®¶ź"²K6}A=}³]žā3mjÖLŸB{T £‡ń…żį½XbIAŻČņ¦XkÜŅuĘҬxqčhYąļåię†;-—q(ח*Ķ8ģ;ĒZC=wįœ÷ŅĀésd6ÕĒQ^å‚‚Ü”+Ó„2Ü„,]ēj¶ĢćJŌµ’‰chZHūć­“]jvSĢ-8Žs’3šē|Kgg}`\Hń3•8?„4ŠMć}Ā÷PZź÷„Ó8łŽJz÷ė>ń ”wF„Ō 2kq›3iÜ¬Ź")“üŲĶx÷ˆ¼+'ļ¬N€°¬łQpó>rÕoļ4ė’RWI•ŹäƒW4ŻZāf7r;ož ?f]–Ā^jŻŹŃ‰v€? žŅd`°HåæŽ¬eøČo£µ‰<¬±$ē ēČ<6’]ž4sŸĖ޹äµjŽń4G y¢fčzžōƒµøntūr³°R;’ \Re±Ö5Š»,Ń:Ė·ŒŠYÆV•‚Æ®9ŃĘV93¬źÖ·hbxīlŪ óÓņ® \š;żEšńJF[ųŖĖå ’É-·nH©);\żŽč‡TG^§ŠeŒŅX¼±ZC"«÷Q҃DĢ›ķ:X‹Ččīäē5œc7^Ć„ŹKbÜ6ļ&ō ė޵ÜŻ){WEŁŃx ĪÅ;X¦F+å”u<ÕfņY÷)rQėŒP¹uXē‰!#$ Ö¬][±ŠX§døsÓ?­rė –ßn…ć{ØZhHĪęč}«+PŅ|‹‘y 6ń–Éł{šļԘ«ĶPļJßšńÓmm®įŌꐻ&ĄĮSA™VŪBÕ, ¹6ś„ś…| ‘·2ēŌÖZœö*ßB»·ē@Żź„ó³XŠ“‘éTŪOld”€¾‚€9ŻOPkbh˜õ!J‡H¹3\HŅ2ķŽqŠĮ•ĪĖ0ƱÄÉéĮĪj¹Wū®©ƒė֑[ƒ”Ǧęö4’I^Vē…>•œu +—*fD—8Į5ŗå°“€Ī“#GĻŻ5…iēܳ²ĢuŪžŌŌXģ<=Øß^LŃ]¬0•ä3`gŲę“WÓķķY„h„ż”Äg7>ØbQ˜„c§j§o©Įqpƒs#ē“Ć‘Xźdŗą* ¬«Œā¹ÉlžŅūä0äb€&ŠķģĆBé$ėœp8¢f †ŻŠÕĘ,Öź8?|=­éś—‰¼-4bÖźĪw¶iU ŽŸ{ß½dx&9tKc"4UĒČ8Ļzõc>‡¬Ž7ʗ—rės%¤Ą[,{£Vē÷#ņØ4=fņɉ”™²›}>ø­£±‘,÷7חVp\YĢÖķ!o3‚ {żkź_ Iį{O Ćv-!Y¼Ļ*MĢ2~^Ŗ)Éh7äy…ŽÆö)Æa[ĘNI ŠĻ?^kįž›?ŠuBŹ]F;«v•€ÄeJ±ļ۟z\ˆŽ~‡»xjO|/ŌD~!¼ŸO„Ŗ[˜Ž gÆC]/‰ü{”ėVņĶįē’M, dŻ‚ēŽõ|½LÜŗŸ>ź6WĪØ:Ė:ĄU¤Ś6ązuÆŠo%¹ŌaŠ“čŅėS”°UEź}„"ŌΚūĀÓI~ߌ6GM”|<©ļ^‹qšž{=ĒPÓ“‹‰Fę(™+Žwgé@s³Će’]!k¤ĶóŒ  ż?ZÕX®œIe3;D>]ǵUō³-Jē¹| šf«ąéķ|K¹H$ņķšźpłźqšżEŅ?kĻüWųy«ü>“Ņ“’°ÜĀö2FS”l`ćœW>*<Šiźhä|qą€%š·…u+GsģņJĒäĮ½·éŠśŠKā ^Éms,ŗ•°I—3(~”:ØĪ¬®yĻĮo hž;ҼCįrŃī‘U ž&]~š_QÅjųCöz_…6o$·Óź–Æs#Åö©7¹įBśZ+nrMź|żūR|+š-ļ…-/ģngOnó©tä`r~sų;ķ/X¶”`Łżß³ī$*w o©ļ÷fßĐ&œśeš`P¤`7ājǃl'Š5ˆćæ[[[evķ ÷©M½ølzŒüaāD²±ÖęFł”$ȅ{ا÷ģ›ćQ“‰G†a|ĀčŅ’VIĄbHėIC{„¶0hų@|e®Fž%·]9nĖiąe»d‘^Ÿškįö‰šKį棨ųSIÓ/nåŲcf•™?{± Ÿ„adĢÆŠš’ŚZĻş5 ė)§Šģ•2·hć’­U¾ ü ‹AŠ|UØx÷PYļī¶ū9āŽہÅT%„‡Ģ¬|łń¾]ĒO:, oyNü¹Ąć×½y>ƒįŁ|eik¦\K/ ¼Įć§Ņ¶§{jIŹųś-_įoŠtI/lnšŅŁ‘²‘–+8ĒĘ+öĘśnoš|@šē‡téõytŲŲ<1Ø,ŪĒéZ[B^×??|3āc_“šźćJ’ɲpøÉČėU5’]ĆäĮ+4 ĪqŒśŌč“6¶8Čtū Ė€ŲI<Ć»äśÖĢ—6Z"̚t\aˆ` dw-3Õ>!üBÓ"¹šŠÕībšĢ’#ؑIņA?uOAĪ:öļ…žšēǹ`ŃuIPßĘ Ay»÷ŠTśŗzQatŸ>"žÉŻ’Ćæh—æ…V_*Āķ!É)ƒĪīÕĆx—ā/…ž7h:Ž”x-”¾¶Č¶b ’R}3ҚT/3Į|-ńĻĆÓ6“rådł­ž`Tžßį_XųcᯃßāæųDµ(.ōÅ$£łƒ éœ~5šŽ¤–Æ¢i>³ŠĆķ­«[ŗ“Q²ē1¶p3[Ÿo“æ‡~'Õ­üEm4śEģ! øĘēŠ\óžĆ‡Ó¾?ųĒŗ&¹šćJ·ŗv„bcc"“Z“~‡mš«Ć°/Ā ĖOZ47RŁ’Ē–Ž0W9’=kĪ> ü5µń%ĶĢš^EīXE‡ ÄUGįSģĮKsź­2ŪD6¶ÖZ†›i=ķ¦cVu œŗZšļˆ’“’Ayqc¦<Č%ą00zōž• ¤|ˆö:„±›ĆŚ›½ž©)${ń·æ—Jéü!š«Kńœ:†™«j·iØ9&ŽS(żÉģp{ T›Åž=ā=+Xšķö‹¬Cqv¶ĄfV\,€“Čü‡ē_Xü‹Ā~,š.”¦ė7v­o|ÖēœĖčETY§7CÄæ|%ØÜź¶V÷1Ūpє8f\÷=ų½ėą’Ž“jŽš„±¬Ööź&·-œćØ|vČéNąä{'…~ č~?ų™§ų(E$z¬ļ±Ö 1¹¹Gć^yń‰ž/žĻŸ-ā/‚õ_†7Ŗ>ĖŖĘ2‘öĻ8ėWuŌ“éŸ |@¶¹Ņģn­6jHćf•øōé^7Æx}R’R–Õā]ēäŚV=ė&€üÉų•¤jž×µmā ›oŽ*ćĒf£5óµņ½¤Ļۀτ!™÷g| „|āN˜öoģŁńrIįĶVąĒny,ģ+X­}ŃŠG“Ē2<]U—ÕÕé×ją”` `ŒńYŹ=| ūNų /ÅÖŽ)°“E½\HV0 9ćń’ łŁyWkę†d$.ÓŠV-ÅŪcļŁĆÄzn±§_|×fI“ūø‰±i&Śa’=:~usį/ƟžĆŸµ·Ć’‹:`6ŗ5į³ÖmŪżUÕ«„Ž9ĮśP–¦±ž§÷ĶįĻxKāļĀ’|YšV” ׇuūī¢ņšTPx#Ž’žk§ųqā ü#­C–ßo#ķqŠ~5 ۘūNņ85},KFGMč}+ņ·ž ‰ūŪžŁ?²7‹|)„Āā߃‰ń….wHóD Gńė•ĄĄaē¬*EI4’«je$ŸGÄ=-Æ-`ՖĪ;yäc Ōqõ®C‚:Œ?„xÄ>GČŪ²+®™ÉR%e.Øū”(n„Ž•oąūtėZ’]Œ ܤī`xõ¦pĘU+·§Žäw&1±“óaĒP*A½Ųć< õč6ƒčZ‚=æ|§ƒW#ņƒ² Īh:)š,°ŽXŻŪĖmä F@9ČĒ­XšmĒķ­iØųkʰ§õ_ųœi{µoĖ=Ϙܜ¼ øü„Xžxw=¹Ok0}ėKøŠAp"h\’« #‚¬«Čm›Ī·“žöš7„ŪWŅį:®™äÄcŚÜs޵ŪGąŪ],4piźw¾«‚+тg™* Vńµ‰-±–01ČéZ6¶£3XKpŒ“])3ttz'‡/b¼38•9Ć•Ü^Åynę ’"Ļ„ [Aó#Ļ.­˜ɒzUū-=Į1“’zŅdd\ZIitÓļĢ~Õ£iy™f'Ž:PȞW“ÜLnG÷ŖĄ¼·ū3ĘźTĪ(h¤Ģķ:/(JģwĪÜwØķõ/µł‡x!X©ēŽÕŸ³6‹¹cČIn1’FkOAXį2(pЧ=p TcbŽöŚu’& zt*kĪ®ļµ+»«ˆwˆ_öj®tös½Žže·c;‰©cԭⲚõ•Y äs×Ņ”˜Ģ;UmM¦”„ĪTā“R±™«¦ńėYó= &o=“Š6§qėOÖlķB\\ˆ9ä „T¤–ēĪŽ-ųCąjöś­ž‹lÓ+fUĮėü½«®ńGĮO xĻĮwVśYž[E¾ŻcĀä®>éėžµ…|2’=ü»:©‡©ÅģĻ–ü=ā“y<1ؙ£Õ­žY"”ü䁃õ­’ é‡Äśī£ah¢(@’Zś¹9ąž•ó5pR¹žŠąų× ņśxØ=M}ŽN÷Ş Ō”Š|b—RéC d;6ē‚:óŅŗwńęƒÆųal£ŗ·3ˌ5š|¶>5ųo­^“ŗĶa;ÆÉ £ų ķ’O>õõE’x[Åń†~"Eo£kVš²é¤k£!_rqĻóŪsįVcV}„7«w>VŠüO5Ür[źʗÖņ4;”’¬ćwćÖ»­ģ:–·§YjwædŽźQ‘¾ź“ź{t5ęVŁżƒ€Äóaį'»Kņ;ߌ߬|įųgÓ|A”#©Y lnčĖ‚r¼WĘŽ“ūeń—1K-–<Œ’…rµmUÕØ®zŵƒ¬Öś…„Ö”„j0xī,ēhdVĮR+쟃¶ļķešuŃ4߉óųÓGL§Ų5ĄgF‹ū”žš#sSM“<'šÓ/Ķé:xČ_³Z5čĻŅķ7öńųÉąÆƒ>ųĮ®ü?ѕƊ«ė<ąģfQ˜Ė~ļ+KÕµś\ł;ƾ ńƝZĀÓ[¶·}>įwŪŻĆ&ōqļéŽŗYD¶†h€ņČĻJńjĻ[ÖŲLDjE4s*šĶxųpvĻZģlŒr±“™iĀG£*\ČՀ:ƒ°a»Ž•‘ćy'ŗŠ'K›‡ŹŒ)-Ź‘ÓÓuG‡‰Į«ģx’„|}«xpŲŁG<—vāeŪ¹óå±#‘ž{WæxęÓUńµÜ„äģ÷¦!ņöĘŃŚŗ)Ļ”óÕšQZ’ģ÷«?„œä×U9+=HŸ®Z­£ų—įw‰uŪxD—ŁžķŠę';¾¼Wā]އie«jŹ-{¹$ņ˜`Ę„ø\~uŃ)éa©YŚXŪjZ%ķƒ-½äR@Ē+žqųb¾Üųoń2’Āö3ų‡Ā×±[ޤ`ʈ0$Ē;X\TØŻœõqŽ=O­“kŸükšÓx–  }Bh|ÖVL:·ńĢā¾2žÄž5ų±ūų§āĻĆé4cĒÕMžIiĢ|™>fŅÆ s×Ob|ī}Ę˰ÆVī*QOŅRQæŹ÷ł•?µųH|-l×¶…ZnfĒ#ØĮ¢™®|5²Šµ-'Ä~ ™­/"s,øŹ«ƒĮ•Ė-7>Ź•75sī~Łž0æų]ØxZ“Ócˆ¤–M!]ĒnćükäŃ!žŃø»±VW–Fsƒ×$ŸėY¹\Ła9nĪÉ4ūē<ĄPz“ڦµHmH žcęµ§I¶~Uā?‰ø\’ƒŠ—5^‹üΚ9ńå"¢qÓ­_ŽB8|½½zTamOóļŒ8ē›WsÆ+ö(» 8 ŌŠläōĶz•†Øß5™–‚Ä‚„ö©-‡”DE‹&{ö®Ų£ ĆŽ:HÄf,+ ŁØ]P}ę÷¦dĢłÓr}ßoZ–'uIĪ{iKØešUP§Õ=Üm £&å_q÷©Ųēo¹2]„ČH%HĀśŠUdĘō$u¢Ę2•É $”K×ŲVoŪDJųŗż)W—RžķŅ-ĒoLõŽč~I „‰$걩 =ŒYŚ‹PcŠ8Ž˜ÅVA$XĀ©^¢øē0,I"\›éҹ‹ķRĘä|Ā~U^] źa&Ļ”ž ~Ź_~8:ß„«x Į %żāį®?ß»’ׯŲ߂_³Ə‚\[ų#A³Ö5›¤O¶j7pļ0 „ō×Ųę©#čļģŻ/FÅöµ –įH+“’ up[ź> UX¤ū™į'é[ĒC‘³«¶³‡F· oŸ*ŽXõ5aÆą»·Ü¬ ōŚ:ƒTc)\trN‘¼˜‡8«–Wö×ČĶ›šp}u)mQCHĆĶ^‚¼“Äž3·Ņ M{r¶ŖēĘqōėI­M©Ąųėā·ķa£é0ÜAeŖiŗu“*Ī÷Ī|“ü«łóż§æą¬6ŚmŽ·į/„QŁxēV,鿤ņKé¹@?75ŃJ•ŁŪcšæāwÄ|Wń<ž ų‡āķWÄzƒ0uY%"†:*ž]kĻē”JŖ¤ģe9q^½ V “±NąÉ#HĄćÄl’~qśÖÓG›YÜzF]°ę>Õ, #4Š#كƒ‘Ö²–ĒBcmꑵpćµ”k§¼­µaŲ Ž@ļX„s¹Ņ4µn‹.ĪW„AŗFōڽyÆŌ_Ł ž [ūDžŌKm¬Yh—’ ü ®‰-ö¤¢9gņČøČžuŽŠp?©_Ł#ž Ėū7~ČŚ]ŗxkƶž2ų‚Ą5Ī­|‚BŅ÷ ‘łbæF-¬^āMBA&8Ø «ōŠć©Tܧu¦yLVÕQÖC­Ō'a_š®YH [ y%–6B:ńSź7i °ž¤v¬ ś{=¢I)›$9ōõ®‡IøøI4ū5DŻ‹å6u–'y$ņœs’kƒŗÖļÆevhfœ£`徕(Ž~)|8ųA§\jŸ‹žÄ›H+w§Ż%ö•( ®§9ł}*õöƘÖå%”q·<×D#Ōäžę¶„Ŗi›wQ°95&§¢Ķ®[É}fNU›j¼v«3>mšæÄ]GNńµē„õ=8ÄUžI˜˜WŅŚ•ĒŪ­`‘a‰X(÷Č Z³˜ŸÄ:%ĆŪh׆Īū$ y ćłT6R²¦½‹Ā:}¬ R0Æ ņēīրtPéč×7rZĶv±JŪ¶±%Aö«?Ĉ÷ŗ-ŪDÓ<ŠB¶ yV‚æņÉ5-BŁŹŸ¼Å°×C6Ÿ}2†{tČz°äŅ^eE\¬ŗūéM$pĀ&P0Ū—#ŸJµgā7Lˆ®=+xlfąz]‹@†6»øF@ėÖ½ GŌģõM™‘Z#Éu5F|Œē|]&›¦Ē2MŖĮ G 9čE|Į«Ļ„ĖØIqe©Ū_Ū Är1ī)IŲ„M‰į› ^{ė_ķ4Kø‡B>ŌķN9­%x‹¬±«mČ55ĮŅkqšw•<ŠŒp ņHÆuM?G‹(źPu­TÄ¢īy«£ió1ÄĮ‰N8śTV–Ā“r^ šziÜr‰w,Ah‰ÉĪ1Ö±“ż&vU8`qõ5”ˆ±^k˜Ó¼]q©™,õ=&źĀX䥐Œ£Äeøš—3Č t<öäÕ¹ømĢŞ2Gp)J65ķ|OuaŠ®ļ)Ę܎¢ø½KRY%}²nläīļI²J°_²,€ ŒtĻ>µ_P¾c "ŗ’x52}˱‹O¹”ł„<Õē½]¼°‰‘”µ‡ČwļŠYJV šöƒā0߯Ś!Üv‘ééü«”ŸGƒĖs4Xäķ< uŌnE²®,üĖk¹§ˆŸ¹Ś²ķ/5F˜„ü ŖŒv°ä2öĒ„Y&Żäé„n1X?Ł‹t±ŖĢšøa†„:Łōß±YĒm#Ä’&wĆfø›—7¢7Ź:P=k¦Ā—QŻI¤¹ūćÆ5ŠO#ĀģVIw®vkku:N'eŪČ v~šo#UY€'•f©÷6ēfŠAż¦a0ŠįAėéY³ŽO, O ČåYŽś×M4D„Ü|÷O$©}ĪGž!Yö¶ÓŻĻ(”Č‘q“źŽĘ.F·ö Y‘ ŽŁĮĻZ¹į˜4»8o ˜}„Ė ›ŗń×ģCv1"µ¶Õķä‰&Hnžī ļ^3qØX’h\éÖ÷Ń5Ä-–SĆ Ķ­ŒkS¾µ¶yR`@\±éļPųgXŗž¼³•ć' Ó(ź›Ęڶœ‹Į"܁‘Į>µāŽ.ńēŠõ ]ķåc¹BČÆĄQŒäTŹV4†×$ƒÄóL"ó!š'Ē;¹½3GK[»ēVQz[ ö¬ęKż¤W6²9³ŒēƒļZŃ^EYDѹĘ9=i‰[q‘k0Äįī£pøéŸē\Ž§Ø„śŹmœ"v²ń[¦>kŠß|cįżWÄZĪ£²9%œ«ĪĶ×$wöėÖ¼ļA²°Ō,dt’ŚPB«6ÜҽҲ<(Ölä§šä÷6··ņ$.ˆv—UČQžę¼ām)'øx­rw§iĘćź+X«htEOˆķoģōkDÓķd¹¹‰Ę9oóšäļ5ŻSO† I-„‹oĢ7ƒ‚HėM3¢Ć/'Ōµ-!omўį ’Ö½_ök›O³ńn®ž!øH„Œ$…ZMŖ…F3“Ē8?„RdÉĖń7įę›ńY¤ŽųŽĶćČ1īĄäœł³[æÓü'©/‡t‰’ŅTŠČŲlŸAĻ„m”ŹōV=·į4#RŌFŸ­@ėŃ:<XÉ©¾|,·ųCńVĆĘ:°Š]/ķ.Ó¬«½KpTūzTKB“:/gĄ׌.uŸ ®®åfpq±ū8éŒÖ¶½©ų{Ć,Žt0ų$n8żk2’ ×®5­6ö ‰.\Ÿœ`„=õé]g‰~: OE–ļRŗרI$žsŲV‘‹°żŸSēė»ūßėp]­äZQ‹vé}Gn•CĘ 4(¬ęńž"ŠTĀ ŲO˜qóśÖ‘DņŲłn??†üD«ę2²É÷Ÿ¶=8ę»/‰Ž)›Ä^gN†-Bެń ‡ŽsVk AųąķĘ?üw¬jŗÜÖśĢM _3”‘W9?^ŸŅµf‹ļŠ·^×ķ“MZkK uó6©ūź0ĆߊF­-O¬|£x³U±Ōķ~)EhUšXžb§$ż*)~/>…{&į­Nņ[(˜Č ‡åoldóÅbsŹžŗ«ąĻŚ›ĮwV¶:/‹–ĘĻTgį(‚YgWĻ:—ĒMWLųŪ«hZ£ZĀ«'śį·sg8tžt”=ķTż„~^kZž“ā=o„ѧ”6ļ \väs_?Śųē[ų_ØZĒ„ŻO1a•²Ī£¾?ZŽ•¶eĘŽ_ ž&hŸ„Ó¬õ*Ķ/b rEĖÆ©Ļæ5śāė^še¢,}KtżŽŽ5#Ó§­k(ŁT‹GČž!Ó<;£Żé„Ķmc,Ół% $Œ ūó^ūBčšh o„öétAfP™(}±®Y&M;õ>ežŁ"ŚÄŹńĆv@ÜQˆäö®óį• ńvzö§'ö}杁ĻĢ\x=ūqķJĒ]3Ó#±K»"…ęQ»ĢuūŁõiŲæf}-š£ānńŸĀr#O·µ¹±Å„īÅŪ‡?_/ü}›Ē_õX„Ńtń Ÿ–Ņ4Źv•fäsžł5³•¬O³>„ż‚|u„|^}VĖā‡4š¢#}…Ģ˜Čž"}z×Ń^>ŅēŠ|I>Ÿ§#¬hß}OŻśUŌÜ<™łĆūIų6mĒ1x­”“OkõŽ]›żnOńę¼"Ū]»³»K‹}B{)ŠA¬]·4‹:‰ļ%ńqi/īEķĮR ’ī押¾ ų}ō]FK‹©0ĻqŗHƂŖP*d¬Qö§‰õ }"ĘāēCÓlõ{wµņˆ‚P‘É\÷÷ś×Ä_ | ā«‰7ŗōö2iķ)—%łdĖg, ¤Ń?#žĻćķ·ŠŚ1eØh7hĒ$…¹$uĻp?„~ė|Aų„š×ćßĮÆx/Å>·»ŌÖŲĒ/üŹ@Ć#œœąPõVĘ‡’]xGPÕ| 4wq 2ą¬*ē'Ź'*Šq^’āßZčž:½„²K8 0'N)Éu3“>hż„<'¢kžšŸÄ6h‘“÷o±‡Īų<ŸóŚæ2¼e-¦¤Y­dO“v#8õüŖHę<öX§Žó³Ģ#ęēōŖŚl“éŗ…Ž£kssowÕ„„U¹äÆJŚCsõæį/Œōļx7G¾Ó-;±7Ÿ»·‚~œWÆŚ\Ä /½D÷;ÅžŅ|e jś ģÉ ø‚LFļ%Ą$Wå'‰ģµŸ ^Ϧų‚Ś[kŪiLyn˟•Ąō#ŚŌqÜw†µ‹Ķ/TÓµėeū}œ¾txo™ųĮśWŻ_|9§üRšg…¼y„ŁI=«Įäźi?,§f7õÅ9DéŠ?wæą€’µ¼ž0šo‹æc?jm6­£sį¶s…h9>Z“żÓŲvc_Š9µŗYöĖŗ9#l< ō5£©×÷>ĒųSā8=üÕ¼om£„ī±¢ŚÉ²° :y«)ļå9Ž”ltÆóņń–ƒ}ąĻkžÕm RĀćĖĆ)S$Gī?ā1RkĪdG¬“0¼x.+†»Ō.žž”ćœįjd‚2¹Ūh~#Öl§I£VnĮAėų׎? •Šä]8js,ńļ‰eWs[(Ź¢®ū ļ¾üÖ~ ĮåÄwVsņćŸåŠņń˜ŽHÜöņŚ<õQśƒš÷ও¦[[Cm µĀĘ³Ćś{FšŌD"8aPŖ9ĄÆž&ģż?.Ąņ»vØ]ķCo\äņ?­s—wćO³šīķŠĄ‹Ė{śVŌĻŠ²|73±ņ§Ä/Ž6öļs§YŖ>]Ą×ē×Å_‰:wˆžŌÉ-Ę” øÓłW«N™śVżžr菔5Nō„Äv·r'r$Tŗ­uy“HĮN=ĶvR„słsø®®cŠ|Ļ܎‰٧ųWYŌVŚćChe»•TĘĢK!Ⱦ ųmšNqugŖk¶1ApX¹NŽ‚½*T­©š5*a\żŸNxā²²Xń„!O­Is*OšŻJ£ū½k¢0ģqŹ]O2¹K«‹»6?‘›¢Šč¼;i×QĻ ˜±ĒJÜƙž†—,eY“ņyźkVļU‚kCh,ž|g$`ż+1ó³Ģåķ䕃6Ęl…?ĆķVQBŪ0‹!Ļ~õ#ö†CŲČŠ3Čśœī<ŠŠŅÓŹ“ĢčĒ?+ µĖFI#±ö­‰"B†,c  Ö [‰ā!¶īE<:Ō’ŲŠ^ŪŽĒk’Ņ,:n'­±•Œm?JøŅķ ®‰‘—|œz¹Į‡!ś÷ Õ3BÕõ`",!# “Öž…¦ŗ\4²„—ęąAGOŖh7RG ±Ŗ" ö?…cx“BŒŁ[[-ä6œ ą‘äšUՎ™¦kPÉ™œcŽ} oŲĖnöop‘<„²r(q4NÅČÕU’±°qXF4—|m&åęęƒdĪm­!I¤ˆ‚N+kK¬nāž7 ŽŌB] æü!š_‰ģÅך>›‰bPæhH€iAīxėÅxö™į[=āi-,”ŽBŪ™•qøśšę©M=Ļ»ČųŽŗ£õg/ut.ė~•®Fšź6ŃNX`GjłƒĒŸüC§Bמ±}VŽ2Z[pß>ĆŻO·”®yR¶ĒėY_9%ĢĻž“Ķ{QÓ5%xʛz’bX\mnĖ­}™ąˆ~!ųo§x\¬Rź‰øĎŖ9ēøāø+¶¶?kšó‡­Œjģb‹8-5·ąķpČ„w–0Ę裗Ć3Ī= y’™żaB¤^Åķ~[™tÉ¢øy']¤(''§Jłėįf¢­©ź¶QĶĖŅn†<昜V3b”æ~™ō4QGµ›9č;ÖÄ"ØHŁÅqN'½Ļ}ińƍõķį֋ą=;V™4gŒ4–åɍIģ§LWˆŲźW–’¤šĢė(ōā²iģxœ¾šSI|[–¾3iü!ąćį’µiSīŽźęыł(•GAžżæņ=ć%Lj'“Ō`kkˈö«)čq؊™RgĒUÉą¶5µŁ’į,»Ž{ØŌ[Œžģ}ÕĻ„lhŸ īµ}6K-ąū/›å[•b;Ö/ tᩪkCʵo…^/šž±v’é¶ó*1Ģ‘±$ØéŪśÖ=½É†]—QÉ ŖJ€ŹTƒųŅöVŠ÷hŌMS¼„0R{Ō^(³KŸ]1 ģ2qœA§і&Ölł!®#·›JK]©ÜF$®7sųWޚ•ÄZašž¢2é÷+  ž Ž’^+Ŗœ{Ÿ[œš(ėsŪZk3jZd2‹)6°€œķaĻōÆŲÆŁ—Ęzwğƒš"jƒRŒEp ŌõõÆSģxAMVĆņ¾‡ž|gšę”ąļÅ©YŪ[¾w"eÕłCž’‡ņÆC‹Įv:–‹§ė\“Ā?ßő·Oõ|b¬ŗjŠÖ"87Āw/W1ā] /#7Q) Ī@Ø?mĮ椏ŅļŲśÖŲÓö“šš¹ŌōŻbĪ÷P2ł.p¢,„WЌƒ_‡ß³v­Øź‘kZU¤0Żj6—W±ĄC"8Ļ_jšK!ĮT—śÉ›Kæ°’ÓgšžÜ5½Ötßx;YŅšĪźĪä›w·<÷’=kÄ|'8‡KŠŅfvUĄPO_s^V#söģ=4ŁnOŻæŪntké,üõżō@ü’s’=k†ŌtŪ$ĄÄDŅFć9ī+‚qī{tacŃ“E-Ģ{YvƒĒc]Hß2)ĮZ˜G”u]‘Åų·RM"ÖK“ó2ē׊ū“ö%ń†§įŃ«[ÅÓ)Ł,iŹØ'‚kŗ”šĒVµĻƾ>xsEų‰į'Š<9„k›ch£ó#•œ›>Ųé_„ž0šL’ sź¼śdŪŁ+­vU¾šž»”żžóM³THq"ŗÜtėžcÅZŸˆµAe{$ÓyŠ:ŗ‡BūYOŸĘ³å±¼(ó¢ŗ_Ēżmü¤hČĀ[a yg†0sś×ĢZ¬ >§=Ź€^SœćœÓęeTĮčrž7šV©©ikz ¶:Ķ€ŻåœęXÉēŽõä¾ ų½ā źWw:\pĖ?—uer˜2ćØōō錷…[jxXÜ+[°Ÿ±ļtO½ķ¦”ž[ÜŖŽl ’3Œū’ZöæŪcÄæe µ…%’„{ÄvĘŅžŚ6B˜ß³~÷ ÖµuūL¾5uV7‹?ü Ļgj šEŽäI)QÕĻZō–,I ó/ó®*²¾ĒŪ`¤ć-”ż¢įż("-œĘ töGöiV/ŗCŠzV”©Üłxē “`%ˆ­-u²īĶ9®&uhĪҽ? ­kg+™Ą yÆZ•#üĮāN$Äf™ākŹīLڈ¤@!šY¤,ƒņö5ŁtGĖŹ¶ŗÖź6¾ćŸ­=NÖ’½«ŖœöŽ÷eää³–ō©ÄFzšÜNe‚"¤ ޼ō« HrČ7õ Ārčb5ɆvFBF3Öµ,Ł&Ur\÷ėAĶ6umž\ʊ­ƒœZZŽ’·p ¢#Ø'ĖPsJW8l¶L›{šß‘F ¢2öĶœ–”Ŗ>ꊩ‘ƒ†¦hśN£{q4×+ĆĮQŒ`z{ŠDßCŠm<'“h7ŹBxč¶3}ŽŌĆ$ %Ē ŽõÉP•#f žßˆ€“p8ļV®īķtčŗ(ŖI8Ą®~MJö…ļų7āʝ}|-š£Ć—ĶŌåµäŖRŽÜŸļ60qšżcų’ųųmšßČńÄŪ›ŸüMG "żŅA×õęŗ!Ī”÷册°ŖŪÜG–žŸź­ā@ˆƒŠ(é]­Ø•ćz=§”½ c­oģĪIŹćåšdņȗāęnøcĄ5Śi–³Ćn# :”ĄĘR.^F ‚zó©ī-ōĖä’Õ¤yóó Ō$kK¬Gz€¼1Ö"pEf.¦ÖŠÜIŚX¼;I* _©$SRgD)Ÿ&üużØt†#ŽZßJCy—qL[ u=??„~~ŠšSų;»‰¼GŽõ[Œ½µµ“Ētc¶š tSWzq§cšć·ķSń[斧Ø&­©¶į©$&+§?"ē»OҾkY ¶Ž-Ubc÷ˆ·ŌׯB‰ؖˆØÓyŒ(=i²G!Šåzu®ĖŪC†„Q£ļn%»TͶMĆjē|øŅQ#D‘āEļŠŃŽŁÄ¬]‰Q÷k”mŲ’āŁn)f\w« 0 AQŻŖe“Ī„•—a(ČW§ČāežUü„ńŠÄ“sÓ ¬®j,°±Ļ=Ŗ¦³ć ]3Oy¼©DRNќV2w:bµ<ś/‰zmż­ŻŽ¹«ŁXXB71w Ųö^ęæ>~?žßś…ŚļĀ?t(µFXäŠkūƒµ­ūeXTt韔:®‰«|RחğüW«ųµ™Ģ¦+©7,99Ājń’Ś/įŸĆÄ隷†.ķtļĄ¤˜Œyó—¶[ śVSV;”āŲŲ” qł½ Ö›o Ē0*»Xž•ŹŁ”K^‚ŚŲ$Ņ"Œö>ÕPZŻŻ2OkmqĄĻ#Ā‘‹=?Ąųq¼E„Yų†īm6éŪ÷M³#”ę¾śµ¶[Kx6G ½zÖŠŲē©"”•ÅR'” #‡¹Ań-¤ö騶›­Ā 5½ĒU’dśńėYZF«s§Z\iwÖėŽŠ¼A%“,W .Ÿœģ'ÅtŽń-­ć‹U…71-Ž„šģ†Ē ātzČK™’įēĢ-É„ Ž hā»°ømĄŚ$8?…iĖ„ĢŅ8_xZĖ^Õ ×­mµD?1'†®ĒM[émŞ7ÜŖńƒĆb¤Ņ'“xŠśšź-FŁ¢”ØĮā»Ļ jPNŃ:OĀNÖV=+)'r.t7ŗ0Šā9läAnÜø5‘ql¶²¬‰²UĻJÆ|š}µĻŚ-ÄÖ»Nģuڃ)FĒĪÖ®gØŻ­¢“ÖĄ¶ŌcČō¤“Ä) Ź¦ŃŽ)÷2ŲÓ*ĄÖ¾Ćó]E4JÅæÕžįW4Ėķ6[VŽēģĘféøśzW;4Qf ōŽ]ĘĢ©ķŠ Ń’Źę+o-ćŠXøičk9Čo‹Č~C“pppAÆQš©7gK¬1ÉįO½lgPś(–ņó#8=8®WXŃd†)ł·lņ;UE\˜Ė”å·WTRA-›Lå¾Ią(÷Øc×>Ž«°>*½™¤d,Q>Ÿ3=Ģ) <ņ‘sx-īĢšDķĘ¢Cīī+Ͳ[”Æ•{JŌÆ”aÓŪ>1ņ7} Ņ*ųŅŚ_h³h—RĖ+ʤ AüėĮž|6ńg†Žk SĖbĪ@Å†ŽŁČ×<®ĪždaÓü*ŗUŌ·WʚN”h²“«i,“ŗŒ…Ļz…Œ*ĶÓī®oc“ŗ<·=½kŚīt5ŠŹQ€QIć°“csĶQ(·œČ’0FäŒWØk–PæŁ„*9Ī9ŖV \Äø‘/¶O äz`šEt:n•½Q¤¹TõlŽk)­F£b†®·v¦u·šŻå^„ĄÖ%¶±<Äż®Ż u8ą 0ź¢ŽŽĒYH$ŠM‡=łgTń,·ū ;ŌįOQJö!Äēn5l2²{OÓļČx˜d“Ś’dömĪéEŽdSĘZĻæ³,ā32 čKtZj#NĒ<×KoŹ)IĻėY6ŗŒždW’&įŽĀ™¢˜Łõ aj·&ĻžMlŁh]YĄ™{“AWŅå«łģ¤BĶķȬčįTŽVAåŅ’če)\ŒC,³4BFŽ#¬-JĘPåd¶Ųz:5B§Ü‰;ųšŹĘš%Ģ…Aćü*ž¬Ž~Īć?QĄ5¢‰“‘cCҦV2\$.W–č‹6Ū¾Tg±=©ŲH¬5“!&R”ާ¶<ü±9ĮéI³X³D£Ēn=§ āŖŽG¾’G}ÄõĒjĒ™”r’Ēo&L…č~j‚×~ lę<ń[«*ꐲ7›l2ČŖRjö”–S#qĻjēÓYµk°ŠHld ó]\ą_Ckäē*:}k)« ƒūmˆ–6ōČō«1M~K5°®ń€jäȵYoZ ×*Žc|§8Æ8Ō¼am <6—S(W?)Č­é”$w6³„ßĒŅmp«¹²{z č¤Ö4–0Å Ģ$aÓn6ÖŃ]г‹Q¹ud!`$ ć­T×,f‘]<éRB00z{ՙJ=N¬¤µ0`y#śšąu}O·ÕRĢip#®(%#;ZŠ&Ōć?dˆŗ· ĻJ㬔ԓ[LJ̷Š`„U1€jdģo“Żßźnų™bGG!øČ5Ģjv“É:!e%‡ z甬[‘§\Į¾։ßų[yļ]ݤVjܳŪĪGOŹjbŽĘc§Š­>ĢžIy.T–Īņj{>JTw5¢ zŅĪgß–03Kįūo^ZH?“)dŲNWÆ<ÕĮŲאücųÆą7ŸLģŲŅāYbū̼n?*ó߅ßō{m7[’„ćÄļ§^½£øTp ’…{ V>b„šÄ&šŻĻ‹¼#}%¶³§] •˜åzžŁāŗ?hi)¹¾ˆm„|ɁĮ­lzP4uK‹©-c6÷ˉŽäÆ<ŠÅmVÓÄ&ßO½Ž/>UXŽ\Z”Ļ\š}§‡<,V-bĘbŗ„„I“‰ī+†ńĆk‰Ž”5¬wvzt§1ģL`g³ …'Ōé>mhmœ×““(vÄŅ“[śļĆß kŚųŽKX\B”„śƒÓ½;˜JZčwšޑ᫓MAbˆŗ…RŖģjuk/ǦI#[Ų°o,©ŁŪ×52dE1ĒąŸÜÜŪE”@Ś£yłÄJ¹Ē©Ļ>õō/ÄO]h¾Ó4½KB–ßPX¶0ņĻ8_~ CŖ‘¼b|×c{5£Ūźö7&Īl|Ń(öõ«Zēˆīõ}1#Ül3‘ŸjŃ2ģyŸ=ö‹ā]>žŃåŽ`\ʲƒÓ=~«ü=Š¢ńʏ„K$–°µˆƒäŁ›Ņ¢¢ŗ&GųĖĄvæ³Ä"Õ/—OńƒÆ%Ł9øMā'?)>’•|3®ėš\śåŻöŽ¢]F JsŪŚ³Œuøć±Ūč“Üjxź)#o¢ųføßx—Pŗ‘“X¦»Šv^fŒŸ”ZÜ«߉÷ŗ}¾…{§h2¦bH8ĒėĪ+ ×¾']²Od./ ÓĄÜźŹrzžć­ĪÓĆ “æŲŲxūBk›²7 Bģö#½tƒĮp«-¼ķå„pmpˆ¦ĒtŽŠ×į.„Æ^kRü0»“ŅÆī-ü©tö%cŸŌńėYÕ|gū2ų>öMgN²‹T2MöØåƒrp£Ž{~Uœ„m Üė“|bńē…×܄€ė€=±_4āwŒm¤»¼žėP0ķČūŠFć’­Y™$sŽ+šVµ jE½ķƒĖ$²(Ė ©,:Ó’Õ_k|8ų-£ė>±ææ¼–Ęī7 ±gŹ8Įcé֝’25OkzUÖ¹c¤ot)v‚1ó.yƘ¼WāżG@×-®.’hš Ep¬TĘ@ĄžtX|Čå¤ń#ųŃEĶĘ”pĶø—_0üÄšwzõƦ~ųsĆ^¶³Ō®žfŠÄ%p\oLއÓśUE Ūc_ā?‚ōļčRj1[Ūµ›7Xł1śŌžš…{š¢ćBYoW ń£,caQ€”†{“UĖ £®‡ĻśmŸgÓ-Æm’Ė[Yķ1!öŚ*­Ł×OŹcē‘JŹIĘ6>‚ų“ąkĘ2xŪĄś$BęM`~õG]¾Ŗ/ üNńń‚  ¤VĶ*ysAq óž‡"’}Ź>iųµćh¾)ŅüI>Ÿ¶—"+ż±b@Ēų²:׊ŗv…‰tä†@>Ķ*/Ź’09ę“qV0ł> ŁĒ§Éįj)y¢»‰±‘ļoAż+ņ?öŠųKušSĒ÷DIu/…ī% §Ü1’Yž£éčkĘ'‰\:Ü0QóŲp*„±F‰FG”«ƒ6=æąWÄåš/‰“Ķ:{ūŌŠę*Kl“½IöÆŌ}:KYąK«pD12rv‘‘śUĖ`/ŪŻĄ…¤C™9]§ņƍæjoŻMŸńJ‚ęöŻ[ź ~b˜ū­Až5K±ń哘n²JüÜc ׌³‡Ž]ŪÄ5[ęŸBŌ-ŁÄFć€uÓ8 źƒŗ,ü1ų«ćŁ öžš7Ž Ÿ¶ųwU Š|ϽӃZPł¬Ke+“óŚ­ģtĮŸŃŸü•ūtŪüų±āŲwāŖl¼!ā9$Ō|+=Ō Ē ŁĘbV'‚ŲČ_UĄūÕż¼4Oyd³ÜGåj|’€xlwՅxésc„æģWBpq.R@zWĘ“ĀūŻ^ŅmSHņŽ’MŻye·¬¼sö ž;W›-ĄųX}VŃu ‹‹I›©[=¦£o³>KōÜfVņ5üĶ~ߟ³Öµį}Bėā5“žžÕał§·=}Ą9«¤ęMēĆosä4ǶEēń)߁ŚŁÉķ]ōĪZ‘3%l ü™ę©4{Šm'žufņ~RŠF !b­žŽ“ Æ(üʝ“óH¼ŠT„č—Ģź9\а‘€›øƒ¦žä:šÉźV­.ų ‹Kūv“÷³@£ƒŒżŅƒŽ¼”õ©œNčĒK¶:ŒōĖČ“ķRĀe¹šĪ¢»xŚ`—8Ē>ü~^õŪŚ^Y¶°žø’(µˆP\Ū‚y’,õ_Qü«†Ŗ¬tŗĢZ}͜śf«a”„Ž£ZŻFé¹^6HaÜH?Zžæą²_±®·š3āߊu1”]I££½.īŻ2—ŗS¹1ƒ÷āl£Ųō ×8#š„œJL‰øÄzZĮ–)¤øQf8_Zv.ig+[Ą¢UfņĘx•ō/€õv“¹ÓK»„¤„OĻÓÉ^Ÿ2hé§±õÖ¹į k–vš‹ÜŚ OģN!l­ĒŻ'׊ų \×µB$Ń®g½H”£Tŗ¬U•ęR†¶e”“Ó·>i,[Øé[–Ž·yĢ·P ŚĒ2śW£`Ϭ> i‡U·½Ōš+Ń?tĮĢ{MWųōm¼gćY¬”MŃ8†5€ä:ć8üźjUI\ŗqm¤ŽÓą÷ģö5‹«KĻFY2!UłG¦}M~ŸųGįŽgggŸ§Įdbn~lw>õņŲģbœ»Čšń†¶Ōõ;JÓōDŒ£nyĄėQźśŻœŁ[BQǦk–’»¹ś7²G•ėŽ#Ńü'`÷÷÷‘;œeś}kóÓć'ķs¬^ŻiŗMÅĢ[¶ā"D`zž•ķP„d~ÅĆ9_ü¼–ČųkÅ?õ’{ >IęNł‰Ė+qĄÆzįL›G¼øGI\ībŲÜä÷5čĘ=Īųc­ų›Sµ“Óä{gĮ™$pkŠ”łī“Ūw?Cžü3“²·›}̰(˜dŸz÷+­BśY!ū3Śū¼~UܗDyõ&z½ķ¾”§Įo,„Ā. õ®3V¹OœFąąś oŽ{˜’kB»¢g“V"»bčŌŌKaĪ™,$€rŲ•vCN·ŗ±2Ū•óP°ÕtWšę„ÕÅęžR+•/īĆų«O¹Õ’‘„ECڤøŹūZDzʖEŗÜÜĶ7 ·ŅĻm{nRpąĘy Ö3菷7Ėæ)Č×=k>Ęx™Ī÷ągø¤isFņÅbD–óŽ3L–YUķGf³ÜPTdzóßZéš`Žįæw匌õČÆ9¼¹Ņn`šeŪ>KzćŅ¢Q:iͧtpvZ}ŻĪ¢!ąö®®}&ėHBĢc®ĻQéYXūl³9{=ńĒĀ? xÜ“³#i:ŹåM øś61Å|Ū’/Åæ…š•ŸˆōRÓ¬2ü×6ģw¤9ēSÓĖVĻŲx?Šc «é$QÕ¾+MāM}Ƶ„MbBKĒ"l$Ž2Gn•ķß|O.¢5øŌģbž%WŠHĒ|Į5ęÕĆŅü9ĒsPrŗ;ZoµhÓŽ$±šĒ ŗNĀ¼Óąw†t’xėÄn©yo£ČŃ -åaņ¼™Ę ÷Ēė\)[sö<6i³R‹=ŻōØnu 9'® fƒĆéłUXRhŅ9ĢnŃŪ»¶EpŌ‰ōŲ|Mō4ńNo£ˆgµd{yŌ< ­•aģk’6÷ZœÖįaF!sĪ*¢‰¬Ÿ+ę>UŌōKˆmļ­±I"cøäą’#_Lü!ń½—üžæ•muķ1ŠFq¼sœĒl×]5©łåU%Qśšž#–óLŠ LaÖ'/"·ń(ėŠū;öPųæ‡öĻg,M¤Ź»e·`ŅO?J龜ÄCš)¤^9Ń4ƈ¾—VÓaö)‰ÉOöN=1\ĮżM ±Ōt›½×-ē~陳µF~R?ĻJķG”°öv9iZ¦ƒāk‹ūk ˜ōūŸ™ ĪÖĘ}ko4s¬P2@Ź‚G^õgŃąjmcķ?ŲO^×ō/Ņč:}·Ū|ā="ā ^ĢøņÜ dŚx$Ēø&æ5ž/xGJżšæm戾šÅÄļį[§–QȤ MijEī ’ō؜½Ūžn·²ā ØY*”“~n2i?¹Ūī>rż²¹&½ ü’>ÅJ2±ścx¶7—Ś~ æ¹(ćŻ{Wä'ķU”ā×@Kčį»Õ-.™ øv¼ØĶœ=?„vĒc“ W™œO…e”ZE Į 2{āÆkLs“`ŽBłfE_»ļŠŹ¦ēŅPŲäSSžĢµ{H·ü€§µM£ė0źJŽk1×5ĢuI¦zĶ“†‘÷¾Ÿ”Æ?ų‘ąŸ Ż Mj ĘĖWE"IŠćĶ'”#֑ÅW„”7Ā_źž¾¶}_²å¹ @Ś+ß>*xŚūĒZ5½¶­pn十1ģh9Ö)ž §i‹­$D…b ŚŚŚÜˆļ½UŻŲĒ0ÅŅĆQ•j²åŒUŪgAkF¤(!qVD`æĻ–=2{W„F™žlxĒĒŅγ6ą’u "æ_WżlW’ŁQ‹©Ž½ŖÄ[e‰‰ŹvÆJœOÅg+»2e‹j$¾GåKknē;ϙϧA]p¦gW.Ėą |ŸŅ˜`<½=«t¬\é«h*@Ńåś¾ļÄVŗ±$ōĻJ $ģ1ePÄ0ēéVCDN3AĻ'c™hÖY™7~÷ėL€ÜĒ2Ą*–ĪqAĶ9œW2Ū!h‹gėSEŖOs&ß~“ņvG;}y/$¦A¼Źū]Ķ捓?–ēA•Ī‹FŃIJ<³.Hnž¾õé1č ¦ųTD€~&³›č6ɬōłķKå¤uĻ~յ笐œ“æq\Ķ6É2.#ׯﭓÆi׎!×$u ¢ī#'ų½~ƒžĻßšO|Jø²ńGķ ©?…|9čĒBT’I˜ēŽŲžu¬)™Ź}Ś?|šOĆ»TÓ>[AįŸQå Į8wuõ®Į"±?eӂ^]ŽńŠÖź)²‘Ńižq(øŌdYOd«®Ž”P؋AZĘĪw!ē½Vžź+hĢŽĄć°=iIX”Ī>īóRæ B‹{Lõõ—4š}½³łd<æßn‚¹ē¹µ8ž揈^ŃtūÓż«ow­G Amó|Ž+óCö‘ż„|ą ÆüAńģžņAņģVėꟑ„’zr)Ā ōćcł·ż©?oķ_ćn«Øh>±»Š“WŠ[©$e’uēų}żkó²įüéĶģĖ4·B³»dšöpŲ~¬'+#łŽĄĀÆZ…D’)`Ąm8>µÜōŃUIt/å²§©Č­EPTnSŽŲØ0±āB¦2sÓŽ¶-lP‚v®ŽłīhŠŚč,ą4ƒŹ‹=[ųEzOĆ’†^,ųā]7Ą’ ¼){ćO]¾<»H‹Ąž'aĄ”٬aÜžŠæc?ų!,÷3i’j½F(ŃdK›}×8‰qœ?¹=¾µż#|8ųOą†žƒĀŸ |'¤ųKBD|˜BČųć$Šā©"Ņ= 1tš¹ódĻ~µ{ģóÜķ37—ĻA\rwv4#c*c¶ju\u©1lwįPI±VƒĒ=źdōĖŻ¬0<¬›‚ē‘žµuŖY[ĀNšÄöō®i¾‡TV§©ź¬”ī®fŠŚĖœ¼Œ@śšųóćgķšĒᮣidlü]«„(ĮHtū=źcpGć‡Ä_^$ų­É{„Øčšk’’f‚RŖÄö>ŽÕęPn”ÆĢĪył˜äš×Ł4ätš4q"ÅӏZńŸŒ¾¶Õō&ńDz…ķµķ£lņ£n&R3ƒėҹjĒ”ÓNgòź°Ė†’“ BsĮ©ą‘fŗ“`#mĪŒż+‰š¹ŸP7ĀųE“Mb;ŪhEs£c܎ā¼;^mSĄ)sį6¼ÓõŻ0e­ī6€ż{ń‘Ūü)ŁĘŁ2\9[DøŒłĮSż+šKCHJÅI#ŗ™ć6įCŸB+Ćž-é—zm•ÖÆqo-ÄaBɰg“ް”o”ŁŸ*4+}r’½¬¶ŽבEę™sfO"²9+Ć Q‹re9EÓŚī{`럘“\”æjÓõ]?V°ŪÜ@ł½@ī?*ź„# ‡čGģłń&īžV²×`k«*+e™qÉöÆ¢µ-\ČśŽ•ŖĒŖū„R‚r¾•ŻNGSs×|!$–§N¼}ƀø­zG†<-oeęYĘfę,›É?©®ČHäØŽoāÄxźĒK‹ĄšĒ‰lf)šȋ'=ėŠ4 IµHgki줐n1Č0A5½Ģ,t×ZN£Ix‘į~½Ec_Ü˜ģ¦‘””8Å!u¦²x¢W“ĖKt¤ō;‰­kķ2]!‘ ”&~é÷ —ĆŽ']D&m’§wV½yO˜śŃ`ņ#Ó/>Ķ3³ö§ŽzŠģć¼µˆcø¬āµ*>–šĖĀ~ķ¹éŽŗ¬-#‘VėZ^Ūŗ­żž ‹5¼~[Ž äūW›ŻGŗwy|͟„‘—B BņöŠŽrˆ8ĮéYڽuhńŚŽG”'ƒŒPLŁŁŻīqČ ©Į$wšžUū"ņOb£ƒA™ąž=Švß$žC‚¬c©Ģf; 7!Ö‡"“gB!]7ģ©ēYD$ˆz Śšö¼öw± T·,šĖ™ķĀļķ)–ĢLxėėRĶiØ\G‘Ā^<‘y榜[ŲĪH†ūJ{»ˆł«¹qӔƟü] ZŁéא_#ĢŹ~V=sT孍”¹ņm޽¢Ė¬Źln-īž)LrŖžA”ō·„®f’a40‹t*LRē.oCŲ­/ aÓ=Ŗ oÄ«g4 >f;VˆČł3ĘM©ų{UÓ沆Ż2vo5²CGž†½ĆzŒ3iKÅGRH 85} )£Ķ¼Y£6©qÅ5ŌĢ]‡ūÄ[/µI^e(NX‚ rŹFƒuĖė»eŽŽŌI.;±ĶtÖ”vJŽlž^ܕ>µ)Ų‰—ōä‚’{“ŃC/§LšŻ°ŽźŅIDnåøćŗf.7=—Gń^»iakorL–jŲĒAŽÕ©­ų¹”gU]܆ķė[D9QįÓźņ_»±Ž9`-Ę&ŗ-ĘßÉ’ŽŻĻAT„żSģóŪļŠåU×åŚOjóöi3.ę}+'63CDhŃĢ’¹h·r=+OQ“¶[Øī,\ć:T¶;Ķ&‚)EĀł«Ī3ƒŸzé¼3¤]^^+‰€¼ŸJø$#°×ģ-!Š6¹.0>š5嚝µ›ČNœŒ1‚;Õņ£9k”J858–ä•Čք¾<øū–Ó.ŠFĀsĶQJ™ßŻÜ]»42<-½’q\wö ­r×S^y’.sĻįH”×›E0Ä@CĒ^•­§Ģ걦ł8ĒŽ=+9¾‚r±Ń%ŖM½€f”õS޳õE‚(ü‰­Ż=‡JĶ‘ÄčŃF|°Y»sŅŖh–z“Ż\7œH$nļX»š\Ų±Õm¢œŁß“qĢ~Q‘ĘjÖÆ=„Éŗ37ŻĀÓJÄMŗõ¬ˆ¾dŠ’ąē„K®øŠ dGĮąwō¦äֆG•“w7cΈ›Yfō¬=Bęk/ž4C*ŽtcK—ÜȽ“²Ö&µŌ&¶ū=ÜXĆ)ä~>•ÕŁxdńŚ¢)ląääcŽ—;#±č6ŚZź ŃĪAC&œĶ"BÆņ)Įźhęfe‹ė½>4,abł’H@?µ±”™‹«čR^I°“JłĆe‡Ś¹«‹DÓ'0°kc ē&­H”‰±2ŗ%Ŗ˜•¾WõÅh¦¤€«܋Ē=je.ę±Kf†g†u—=«¢t“h¹ >:zÖ•Ź)ĮsåČĄv«)¬Ä›U$RąT¬źØ»¢²Šé‚īPer֗WCķŪÉiqœ˜ū©ōⷈj“ĶnZf.„rG]µĢO„JęKwX–ŻŽ˜ž±ŠO+ļ¶š«Ū_%“‡9üŌŹ v„ ¼ŚØ'#VJžŠ*˜J”ÉąVj,Ø«ššŒ[ź¶“ķķ)u$©ó/Œ<§j%¶”wE””TōŹÖń²5Q+h6Šųzfži¶\(ļŅŗė8ģÆ$KŐ¼”v…ßŅ®-!8ŗųÉtȒ š\gSÜc±«å3lō’ųź×Ɛx„nV`tgóŠūW旃¾üpżŸŒš£¢Cā˜ĻŪmü¶ÜĶ…Ė£·_\f°Æ.eŠ«½Ļ?eIń3Ho…żō.»£Ļ4‚–‡Ÿ”žā¼³ÅŚŸ‡¼{«xf8!“e,±Ę˜ļķ'Ö¢O–^¦©œźi·^ń‘qp޼Ū*ˆõėß?Ņ“¼IšwEI Öśäé²»M¤½XüĆ·jæh\ŖŲ·”¼Öā{ ‰ąRxœ};Tŗø×­õé­å½Ō-acœuQÜż1W\ĮÕ±ē> Ö?Me"Ŗ–ņÜoČ Nžµļqül] mOP‹LP[F"‘"]īIģ9Ķi#)ŌgŠ_> xā§€üSr4ŪV“KĻņ²œg ~5ń~”ńūĀž,2C©Ėk¤K ŒF0ś–śŌXÉß©õ_ĀĶ ĖĒśĘŸmpc¼ä'˜7aĪG§’Z¾ŠÕlāšų¼³Ņ®ćĒÜhó†lzĀ™›R>Jų«ćŃįńg2[Ü<,[2Žq Ń“fą1Ź·|ՑGŹ}2{ŠŹ‹ksĄäšm®‚Īšx=ȎIō®’ĆśÄ40“Ī–¬Bɟ动·Š¾v{N™l“˜.ŽŪMÆśĆ“ ÷żkŠtæj6Ś.”6xģa9ą–Y=˜*ŅŚŖ(|G‰õ«ŪkMCL†=N YXÜīlśŸZōųMmōŌ¤¾‹}ŗ †pNsÜu¬Z6Mcų{ūAx³į.«½ąėāŽ2—,³ ōŚ~“趆>"|*¹¹½Ó’×ĒH¶ŽbPĀżœȬŖFåøv>x±“Ęž+ųyāÆÜŪ&­wh|é™É8\’ž•ņ·ÄѤėš8·:E²_•ŁøļÅsUa„cā½GI·“Ō¢²ŗD€ 7äąÖ½1|;…“ė»×E‘T+‹”>õ×s•~ x‹Bń7ĆO µ¬×Õ„Ć,ø|:šĘ§}=Š"µ-a9m«pp~QŲžŸ­;éc7.ĒĢ_ ~|Mš½qāķvņčiāgފIN21Ž•īž(ń“ā QqØ]ĀŽHņ¶8Į+œb‡"e.ĒĖßé7lžhķó$D†ć”üæJĢÕž Üh~‡ćß źķ‹ „ž˜ŹHø :f©TdņŸMxāfńKĆŗž±,rŲźpژęŠdk•ĮłGnŸ|%f‘jŗžb’u™žāąrr?¹,Ģ­nō-NŽļtŹ€ļ8š®š+Ė}yÅĆLf$īĆ ųRēcNĘŌžMv+$±Ž—*wØ Į’9Æ£~ h—ž ¹µŌ5I/å·óCMe€'É Üż]šĪø·ŗ%µ¶d ع&0I‘1Ča_?jäčZ¤·"W†)Ę6äÖQ–ŗčšÆ|!ć?‡‚[]JĮu•$åCīśĆņ®sĀ>Ōt=īf’ßŲżÖ>Õ°„š÷ž%“ŗ’ŻK#!;[ڼ‹ö•ų„ü[šNrl×bżĮpFrž£ńR݁FĒ䗊~ź~±ji$š‚1I ]¹9žķyMŻ”$Ń1Āēńйv11mo,RØUĘĒ$‚·"æL’f‰ŪŽ“ĆśÅõŒś…;KŸ›ĘJŽ;ü„V8Õ‹Ø 3œš«©čšvæ¦źZ.«sX^Fa7`{ÖrZ“Ė©łwć \ų_Å:¾‘w@ŗÓ÷]¤š×ˆ$š¾£o¬[£–'”‘‘šĪLź„ŁfxŽÓCų­šŸGń®“ FŁ ZŽcĒĶž•~Ę’Į k;ū]kı×ĝjKM熄ģsnĄå£F<ćœćėźk.Ō„mż#ÜŁ=¬‚-¦ bpxž__üų“³¦Aįż]Ł5x?vŽĆ‰W·ł’ ē¾–4“¹éśżćér[_D eozo^ćņÆāÆž ±ūÆĄ‹‘žŅ>³“¹ų7ńńĪ¢ˆ›JÕŹī$1¶O™½r`fmļ&qMj4ž!Ņīmn®ą¼xÄńæü²ČR½{×#°³Œ{śW|)­ŹīĪ€Fs»®*Xъ³v±ćŪDó’?īö,ĆbõśÖ\ŒMąōū§½Œ‡īs±@ sĶ[T“Ą­iö(HČAaž¦¬D©9=zЦģkM›z7ˆüKą}oþ?šn£u¦ųßBŌ Õ4»ˆ@d‰ĆķĻĖĮÆō¶’‚nžŁŗķĒū%|<ųÉ„^iņxž;TÓ|Gmn俖ö5 "•<ŽpF…—­sÉ]‡ŁZ…œr£ŚŹŲČą^{Øi³Eʬ$¹¼Är¢¼Ś«Q™ß­¬|=ńbēHŸCk\żģelQĻüA};WµOĮ ÄžÕõ[…ßØŲŹŠ^ŚĶɞ0„¶?…Lea³ł'ų£šßUųYń[šŽ” ż‘ŁÆ,‹ķ… ų ņ}AJ£ ®Ī„z„taTČe>PB¤¶NHTXŪFAĪ+SŠR*œÆ,Ą±=Ŗ6e-ūƁéœV¾čć"P į_Z3’ „2ÉŽ2NJ§”EY[œī6®FÜĢ脋Ń9ue9ŚG5÷‡üKöÅŌ’aÆŚĖĮ^=Qø_kĶ‘ÆZ;dRćśn҆ūōä¢×„5?xŽŅŹßJ{]KĮ~&°ž‹wØģ»¶ÓÆLv öÆQ²Ńī57Ćzʤ’čĢšCIBzøśzW NĆg­A2ŻGØįeĻÆ5łé’+ż˜Gķ'š_:šĶćŻ ®­D®×–̤M\¼ļ'k ’9OŠ õ„¾=ń€õXŒ& OŁg ŖÜ£sņƒÜƒļ^Hń½¼›°`zžžōękŌõéé¬č÷&ĮbmRŽ2ąłoĻCĶlGqu¦Y ‰ŅH”‹–RԊę©;ĻršæÆn“K¤ üÅmųūįO…[@ƒĘV^&dÖęęŹR61= śWšŚRŗ4±ņüš½„ńgb¶źs»5эJx’6ņŽPĢŖ u98ā©U'‘Qi×nāѬm-®T”’ĄÆŖ¼šĒE³uŠź3yvH+#õV÷öÆ 8ĒØ®Dzø*]Ļ®|-įø“ńldQ“ø«Ö’¶£³¶ np8=š¾V59¤}¾]NĒ%s®Oز$ņ,1×=+É>'|Yšļ‚“ŁV;čg» ySĘkčpĖd~‰Ć˜'VŖk”łĖćߌĒ‹Lļu{1±RUcS‚pkåżWQÕo.nŻTŧ©ĄÜ2\śēµ{4ĻÖsĢīŽY€ę–öŪ»9p’XʧæNj]oV„é)åĒdʰO„z¢곜ń5„V{²ĆKvńV¬E„wJ¤,ŸŻĄ=»WčæĆķ×C²·”Āæhą±+ČÆRœO„CŪ¼ōpŽ×(ĒążŃļ[vRĮ°6åČõ®øG©ÅRDķ©,;¶  u®OҚц_˜c‘ެČę­ļ'E;ĪyĻN•µe}+cĢ#ļ~” ŹĒo¤ŻŹÓ0V;¹ÆeŃ%³xÖę!p1ņµ»ę^½}Ÿ±‡Mż¼¢Öź).nŽæ=Ŗ@f”Õ__ҔԬH¶i"—†Vā‚¢ģ-“7WšsŪÜH]ĻŹ•ĒŸI¹0Ģ®łž/jØ3„Ҥh„“±×ėWĖs„HŁÉLgŽ¢„Å•·‘å²M ĆxķŽj½Ė4`®Ņr: N°Ėń‰isɼKšæĮ>+¶§¢Ą·å Guč{•åW_³½Õ›Cżā‰V„1łö#ĶR‘śŽIÄ®’JLõmļ@ų{öMFO·źŠ]ן5NJóßx³@¹&h.cŽVvLØä6zWŠ¦ö?Øü1āHćT¢Ž±=–;©Ś2žsī'©źkB-JhtÕ±ŽZłžĢ{ž•āVLżŪ 4rŪ®ĢžamGŅÆ”Yc Ą²`ƒ\²ņ:jHē,ō;ĶīĀāai3x»6}h¾ųSć«›­%txŸS‡Pę·³göHā”Aõ<źµ#dģyēˆSÄ_ üFžųƒįx] éڼ;‡l0kÕmõ˜58 ¾ł1ŻD©Łźuą+S«:rROfµGE X$NsZ7ޱÖōŪ;P³Žxf·@+hĻnŃćśĘ·}ąķ!¼-vÉ{£Į1†MĶn:pŻq[¾Ö£ŁÄ­Ų€qZBG›ĆsFĢą~%ų[½x‡Ā‰h×ĪŪ®-LxóGb+¼/ā(tŻJ8eµ{ V6Ż=¼ˆQ•æ­uS}OĢ0^ĪwgŠī±·į£'œ‚lūĄÓü©› d‚Öw±·ƒ]tåfr{>ŒżFż™>#x¦Ę }ĢT²pc–>ģ€š3ŸjKų—”[|JÕ|9¤j–ś~“·¤²vr9z4Ļ7‡÷Æėx‚oųL“Ų±j.$\ žÉŲÆŸõ]2KlĖ,'“éÅS·S|%>]HųKćmGĮž¬é·Ļi©ZČ'SƒŽėīćėäÆų(wŠ›YųĒį’ĮŖB†śÄ5ŅąIĀØ?ē­rT•^†_Mā#ˆkŽIƓ³?8oÆf×µ9.n„•ēO“säW¢hvĪ»% 1‘Ÿzį©#ķ2ų¤z¶šŃüŖ£,}ėsTŅ­u­=ķn!‹r© …³õ©Œ§”±är[&Ž’.FCŠGŌVփ$ƒ$ŠIīr:P鮅WwGkyįŻÄUö‘­Ā’ŲÜ!O7ÄŲį‡Šā¾tų}¤xĻąÄūoZjڜiĖGØYƒ€ƒī‡=ų­©-ŽĶšÜĪčżÉų]ćė薞$×u#ÉmÆrę@­ =H_Zų›ö·½šœ’ ¶š–¹o­h&%‘"ŪóA.Nyü룛K5(8³Āō8š˜+ēt©ü3ā(-¾/ųgLÕfŒi2ę ’R|ä$ž±Ø{øjš?ü1oš³ā„ž!·‚ćG™š†RT>‡čxÆ—IŅ|/ńU: —~ŗOo÷ öĻćX¹X®}“@±¤– ?Mµ$¶–ŚĘ4łĢl_˜g¹Ź<öĖĆóųkZŗÓ&emÜŖ‘éž+°–?µ…Ū–jiÜä­RĖRĪ¤ÜÉ#é]ķ &Ćü«Š”JēńļŅĆƒaŸœßā£śæ—fA”²Ģ]3ĘMn#'-°o^˜źŅ„Šž1ÄĀī÷ŌØ0f®łVÆŲ0 Fė¾3ƒķX<“`Ż©Öī-ÓĒjŲ®[hh!‰†Ž*•Ä‘©e?*Ž”ĪdšµøMÅ²Õ ²$²)Œ£Æ4Ņ—VN<§•z”«‰ņę<§æ­;‘Li–»ŚL²ĖœäVŒHA‘—-ŒZbĢélŽ„–lņ+/ĆJ`l©'¦zÓ±”ČÆķbŸŽu9ÆįŲ{Ø («ówi{ZTzeČĢ@£¦§žųĀū1”ģGCX02ī|Scf7˜ēlC–sŪ¾­ųū|bųću¦ų‡ZŠćįwĆéóu{&¹LņPŅŖźc9²Ÿf†_ÕĀŚ ®©¬Rڜń‚ņ‘üXĒ®O^+čŻU³ÆöéķŪćvNkS JēCg§źšÓ«^«YٕǾµŚiŚ=Žœ ¶‰wž­ŽM\csžR4ńÖ”‘šV ֍Ųē½Ł<ķ,,aøŻéY°ŚĒ§@ó]Hn%cÜš+ūĪ;ÄŽ ]•ÅõÓǤi»ĖŽ0öM~xüjżØ¬­t½Alµ7Ć:d ƒsrŖÄö$“õéQė©ŻNŸSš'ö—’‚¤i>ø¹šOĀh-<]āiÕć›V L0åsĮ#׳WāÄ/ųĒāWŠī%›+śwØlį”®$pīe*®Nk^ EŽ»÷70¾¦åžš²Ü*1U×W[u¢Ec-”+÷śŒä x-ćifō  ŠäŽˆ±_±‡üƒć×ķö^1ųŗņü/ų[rÄ~~EŻÄD“Ź?twÉÆźö_ż‰žžÉž¶š’ĀĻirk+[Zkuó„`1Ż}{×%J—5>©²Ņoź[‹ū–¹ Ųž•~X.Ūl1ƒÓ=EpT–¶ä6ė-–ÜzÕą@¬ŒøÅSšēh;»{RnĀ ŽóåżļØj°E }„+žU !„ŌµY®ĮŽŹ?S_7|Jż£ž|&·¹>-Õ”©F -œY€čqĻåQ}YŁNäĻĘæŪSĒß »ŃtµxoĆo&ŗųģFWĘĶ·óIspwpüČīrO×5Ńõ:TK±i¶øżäk>nN1UOŠ|!¦%Ā]źvšJŸLƒJ„Kʞ§ uń_C“ĪŖŅ•8 šņ_|QŌÆ¬e‚ŃŅ;gly GØÆ:­S®ϚõŖR³L±,¤åŹŽ*­½¤Én—pČ%18Āē‘ļ\Jeū3čæ ük±Óü?›āhnc»PŃĒ·ų”t#ńƗ†¾£Šüo° Šm8P3]PŲā”S¼¼Ō®tˆķn­­®!ĄĖ°:s\Ƅ‰pŁ··LWLv9šh·iā2óŪéҵi[@<»ÄW–÷–­gq™ČĮė+ĆVVŚ|+cž‰łUÉ dūÖsÜØŹĒ§XYZC“^F“*‚pćלjń[Yܻʆ ĢNŠ:s\¬ÆhC„–ŸwēN²’ąŻ%Å«ĒŻó;DŹW7µ/ ¦Čę¶ W€ĖѽĶz·ƒü./4ų¾ÖĀi ¶:šŚ,ź]Ų,¤H’ž Šå5ø"–Ä<7*öķÌ}ÓZĘĀ2“Ķģķd’+B 9<ÆėYQ^U­Å¤ö²+“ņŗæœ š8‰‘F­¶™2‘µ£Aą­rŽł_SˆŽĀ6•IĞŒ;V«iΦЉ¶)JČ,č^"žu+5ēļ)侕ŅO©[k—RDVvĪē˜'Œ“ĶFՄšGČį•_qČQßĪ¹ɵØ-–A&ÖĪr£­D”a•t«‹Jł³pŠ²óøŽ§µuŗ­µÆž?³īé7`øÜ=jM9]‡ZY<;¤k9©® ‡;ܓśVqJ& ³Bļ,W°«’iśuŻ }žaÜ8qȤTL¦šā\ĶŽå”9ä€jÓx1-gi`VI[ćĘ—*(Ղ[9Ķgul?‡}}s[šdŹŅ„ŗQūn=ź’3”{ĶäÖ÷šp³æšõéé\%åŗ’6Į#8įp:VčĖ•W“ßZ¢©FŚŅ¼śębn[ĻĪKwčF®›gö‡€·ńŠÓū5“›—ģĢüpk9öfŪKQ moVē«’-ŖOn6ىįMLUĄķķ“--Ńå(ŽÜƒkĶ52+©Bē-—µkŹ#f2ĪŹfŖŹ}ģ×Eqįx#gó<¹ĄÉĒz¤QĒ]ųøičĘ4ߜeO_­`[ų‚I®‘į„ćvIģ“ō SV:Iu+‹Ł9ĘĮŒ «-擇žxć­IŒ£bœZö¢5huū:ŽGńg5éZ·‰į“O¶ÜŽK§Žb~ń "ģĢ!usä3Å4„s’3ŲמźrłÓ\;y‹Œ›½ÄZf—Ņ|ŲĻį‘[ö¶‚F6¤D¹Ī Øs¶…su_é÷š,·(²ĖĶųūW0u)­® hTŪޠЦe9t6¢‚9aYd䑶U;Ė8[T…dĪ'åÅY‹G0ŃÜ6-  š{āuĖGA¾`ģēųCC`‘—¦j[›˜'µŠa“lõ’ZŃÓ$ x „œćV2e…gx‘lŽXä0ść\‰o6ÜĪaIdU8RńUM›”’Ņ4d^!e?(Ö»{*ĪhIJېŪH\p~µÆ+[–“4 Ģ–ņ4#øžÕ¶¶sŲˆČē5.&Ēó½ąæiz‡ēš½ń–×s!…³•ćīœt5ōˆüįųCWŅÖĘa­ĪŲ¶hS,‡ß=sž•ō2©ŠłŲÓ±ł«iööņ_xr}>TÕ-ēhAtŚēo‘Šõķ_<;Z”°^I¬ĒÉqݛڗ::¢ģRšī‹Ž­­*Cl·r¾1Ųćø”®F]fį59ķlī$Y"m¬=æĀ™²w=ŪĀwś,֖ķ®y m²EߎAé^O­ųŪT“ńlcE¶“ks„ó_ČļŸJcč=wÄŚv“öŗŌwpI4ń/™ \yd×õŖŚ/Ä;Æ Ż[Židłjū™F~:;†/Mų¾ž(ų…ā„×–įe‘P C=K½ōƤ¼š;’ Ük\i÷°G¼–L)\gę?…BŽ‚„ĻҼ}įß|J³Ņu('šŻ™‘Ż>^GŠö;iZ6³¬ŻZŽĆ,7EG™Ż#ŻķÅW#5ę1n¦‹W’ėMµ‚ÖX¤#qۜäž=«Õ|;ą‹[+Bl¶ú ˜QIŒęĻų‘į?ź~%žĘšŽ„Č“?(Ąśßė^m6ćæÉsż½au§Ķ|¹6$Ē\‘ĒjŃ=5%yžŪš?ć-‡Å¼⟠Ʒ!^9† Gź*ˆ_t/‡sg"Īp£hÉ9õ¢R±¢GĢśF‰wm­C©ĢĻop¬Ą…|ž§Ö½Žóāšé÷:b^iÖ× %!n׏jwč?#‰ń¾Æ¤ėZ…Ę­¦Y4MóŖˆ}yˆńń‚+Z<— o%w wÅ4­”›ģ;Āŗ–„¤ų²ĒXӄ;Ȥ«’;ć½z7Œ-oššß4(³JĘG9īj®JÜȋÄ4G°ÕaŽ{’ ąr„g¦ uųµĆóu¤„ŻūXŽFń•v%bČĮÅK×sX»‘Ųé3é7“ńׇ5.‹ŖŸ±=Éײj7²xļPÓµŻ^Õ£Õģ×kø¼}~µ2Ė1ücć}/TÓ&Ņd†Ž+Čeņ`ŒŸAĘ įį)y­¢ŠĶŹ›‡q°“‚ĆŠV|Œ—čuś“ā]2ś) ŅīU†[njŌ•Õ·Ž‘ć I-tłpŽv–öĒ^õŖV1•.¦޾7ƒ5įŖč6wé— ę¢*’¬ČĻJś ąĒ€¼ā’ ė‘kڤŠfd©MĮ€;ĻÆJR¹<‡ŠKął>7‰ķƳgqć3ÄčÅŌ7B;ōōÆÖ µÖ.š9f‡pRŒ2f‘öĄ’é_/¼/«ĢįlREŃN~\žœWŌ_¼EąĖ­nhW±osęDX|ђ?śęØ%Dų‡ĒŽ1Ń5–× —I1”# ŽŸÖ¼ę’Ę ³€…ū8|« ūŸJFR„c¬·ø²ÖtéV7ī 8>˜®V’KĆM=Ķ²ĀŹź#ćĢ9č}«X3+t­>„žó@†xČę|mÆ¢~ |Qń]Ć۟ŽF’?Īa“;ŒOŲ“ß„j8Äł‡Ä±ų»Äl½½Imõdŗ,d;Ō~­Ÿ‡–~)¹¾T¹½[Ķ bV@ ܤz~]ė)K”“OVń5֟ąŌ†īźį H7cå’•^³ń.‘ā *×]ÓīRÖv;¢|8ĻėYKc¦Šõ’|Rńf‰į]CĆŗn§rtŪģG$H3¼ž2kW7žš›ė^$²ø{DÄm:FpOcü« Üłó^Ō|ć+­;ū=…ÜĘ`„•²„}+蒈ŽšīšėĆw.ö¦ęDĶÜfL–bŃ·Ū?Ø¢ĶµŲń½ įF©«xz÷Å^·ŗ}±>|pX£ēś×ĖözdW:żó]iÓ[,S20d#kXĖ£ÕkVŗjŻC.“ Ä>Zƒäy˜óN=kéMSÖąŠ<*|=j†ä,Ńē>bdwķ’Ö«lŌk±ŻxN×I¾†Ž[vˆB‹–õ䎹ļ_Ÿ’< „ÉāĶNHu©“M"hŒJ±Ļ$®+.mEmO’„GÄ6öwvOØK­[Ū hŽWŠ ņ 4+k»ŪĮ5¬¶’ŹŪdÉ ’8Ķk}MšKG<)­h:‘6”i&’$,̤w=śz֐ųö«§źz„Mi9 †Њm…Ž®ėö}“V‚ś &{[ėŲįi#F\½|é£|3–ŪU_ķ>{MĄYb~qĒ·…d},|k᎗J…%Š7ł3ĆWøųsĆŠ]$sJ7ŹųĪEDŲĻ@ńe)įdÖüi=ü¶® Ü*H>WØ?ēõƄ~<žŠ^ŌōĶ;KŸūš–t,ŪŽ ¼tĪMBFGŃ>Š|E®ų^CĒėšüįÖąŗ[ˁqo$¬C«Aō„^Čgš½Ä‘n@ʧwĢ;צü;ń’ƒ|Me©ZāŲ,ürĖŪj銩Gė…µ˜µ­OŌQ‹Bń‚r03Žŗ„‘w …~`Ł'°@|­ūSxēTÓ¬¾#ŲZŽČ}’õcćŗĶų’Zų‰g))¬°śƒœŹKCz{H~ϟaŠ5˟ė°™ü/Ŗ!Gó8TsÓiõļ]¾·7’fߍ ų‰į VM3UŅÆ”¹µrüĖ`ÅF8#µ L즵?»ŁļćfūG|ųoń³Ćļ ‘jvh—č§˜nĮ ;r¬?ė^į”źo£j–·öÓT‘IŚG5Ļ(ėcSīė˜ćד+k«s¾dK*ēœr8ƍ’iļŁĒĆ_µ‡ģńń_ösńm­“£R²–}y“q°¾PZ7CŌašp:‚ý(ö0ŖóųÕš»ÄŽ ×¼QįŁ]XxĖĆ×réZÕ“ńłm‘9PĄ{€=«ę)ah÷ØWÜqƒ]4ŃĆUuFo !Ž7!żMI·Ėp Į5”ĢāPøq#¶ Š6I¹aÅD‹¹Nāž ZŠL»Ż=;ÕEŗ#’ˆĪćøē=½©Šø‹ pJhŚčhA2«)Źł­Ž½Öæh’ą‡·$ß±ßķ|~xŚśŚ‚?Ł- i&Ÿ©Œ…~x ūŠŸršó'Tž€ 1“2Ŗ¬‘H1ūŲˆŹž=«œ¾¶o1&UŹøŖ@£Ā>+ü?ƒÄŗMī–ś|7Ēc]YÉ“a•F~CךÆĶŻIlõKv–’OūmŗHö:µ±ŠŒąäg‚: 5Ė`?Ļų)ģרxf{ŸhÖ©uu `š$fµnF? qŚæīķ¢ BÅŲzƒļ]”ŁHča2¼HČĆ>‚³ęINęT' é]gāE±‚…*9äUf€¶YĘ@éÅ$5c-“Į9Ē\b¬0åT&ӎh‡’–cŠ»h»ŠļPØ£­Ō‹š}åž¹«[xOĮZÆćŸL1 Ž™ šPĒwhē©Æéƒž Į’ń§ŠõĻ|qż¶nʙ”٘o“’ Å ņ]±»ż!‡$ŽŃYT•R”4»?Ø­Ąŗ?Ā%Ņžx7SkO "›ļ ±.0d·ēnzLōÆ®4É-Ž›ā”Yķ.dū%ųžXÉÓwēż}+ŠS£cŃ­-ŽŚŽę+Vż×߈~j„Z»Mj·ųɁĢwśÆCÅdњ?Œ?ų/ģ“gšĖĒzOÄķ#NdŃÆf’’I¼ŽDØ’ė­]‡)Ć.yŚkł©»µ‚xo3ę<åy…L–†Š}ƒįö¹q¤ź…PĒaˆź+č©cŠu­:ś[ÕTV‰UŽŽÕĒ[ch»ZĀĪźX-Ūbnܘ<7ҽ{U¶“Õ K-U„ŠÉ×ƒŹžĶłā¼é³S¦Ńī {Ķ?Ģkē·ĮĘ Lšk±ųq¦Æˆg†…¼Å”r2FA\µń rģoJĻÕßx>āO „ŲYfž(ń‚>ļ\®ńBš~±%ƌ|Ė{‰$"Ü ō÷ƇÅb\åwŌ÷0“¬|7ā‹hšk\‹%£ńÅE©k©ń„ˆv­0ŠGŌ`iĶĶ$xŽ~(ŹęIQ@W~ĪGÓ5ł»ć/K.­y%ĶķÕŌr9;ņäō§Zśl,OŪxr”hŚ]Ō|F±y€ŒńŽ•Ī\ė×W¦8Ą…Ā÷ś×·Bä¾ ń Åāł÷a§ł˜ś…ÜéyŠäjŽ„©©Éobc3ÜO2Ǝœ“ńÆZ•3ó:‰¢? ~ézmV+ ę8Éõ$÷ÆU—F[FhÉŹ2z0‰ęM•|©ćŪå± g×ė]&rŖYÉlóšŠĄŌ¼µ2Ā­Ÿ=~ļ<äµ'šc•HŚ9'±  QĄ' ! ’:ėōM0ŽK†ha•õLļ‚ŚEle‰DoڱtĶRh/®n`••ŁB¶\śč%hAws{©ŻŸĶhŽśTWVqE*[ä`?: c+”µ8Z8cŽÄ9ū¹¤Ņõ”£ŗ5ē’„Ž7ŠV “ģwڵŒzކ5›[˜Ž =뚵±Iōćk+.žJ¶sĶ#hŹę[KęQŽ)šéE¦XåR ¾“ģ3č G£Į£ÉÕ·˜ül}æw’UdßiVńM4‘Ŗł-ž ­ŠłžÅ/ Įi¤%ÜW £30fペ᯵»X®.Ņ6 ‚sŠ Sīd­Ė]åƒōéŽÕrŚöh¬ä³’N¤įˆÉ Ö2&²X%›}Ćõ÷čZMŽ–öGS°ž)²xõ¬ęj¤Ea©ģŌ w(Āß=½iŽ ¾°y•”¾zā°›čQĄŅ[ͱŁ»©ÆPšĘ˜-UŒē«7†qJ/Q\źn4XŃļ PrWkēĻź–ŃkÖX61$8ģkC¢œŠ-yu Ž;S­+‹@ń5³łZ¬%lä-“GŽéĮÅp^+šG‰> ųŹŪĆ>!RÖįL¶r©Č)ž„śęˆ”V§ĢI¶ŌŽFw3‚ °č*‡Šü į@÷Z¾æŚ€ ®£ßŗč£åó¬¾S„Ķ{æĮöŌ4×±šÆŠtA”lXę|H‘zƤ|ų„ąõ½gNÓõ! Ö³oŪ‡<ׄ gęUqŅ‹“·>žżšõH#ž;kėG··‘“$e]\t>ųƄæh»]N×ćõ÷‰4å²Ō¾Ś®įH.AxÅm6:(āŻŅ†īī“7M՞ĖØ-Āy˜Įlzšö}3ÄŚ_ˆķnķ$€gnOCJMžŒijUƒA¹±»¶¼“Q>$\pF{׏ŸšP+ļĻ’u¼:|ŗn¼Š¤—,@1’?ŗOJ娙éѝ™š¾§@¬²:ē8ÆE±Š8“Ė*ƒžkšhś|͈ļ#³’ŻZAO5ÜŁ3JAŻ”<õėR»CNvF‰ō“±gnæn›Œ’_ųū>~Šæü ¤|bńĆĖĶcąõ┸Ōō©>ŅŚAŗnc*‡#ęé’Į šT'%&ŗ+æ½/͜XüŽ_k+s>Uźö_×”‹įßŲėvqͧÜĆwlŹ:0 ƒRx‚ö -¼«¢æeU*»śp‰ęb± čĻŗ?eü$ńwĆ-{ĄŽ2“½³Öā »Y ¼;²A§ÆZüūż >x§özųkįŻ[S›^š­ņ¬–“ 1Ė|±æ«`֌ņyõ; ĀÖ±ī9ōČą×ńKĮ^"Ömm•ŠdŃ}”>iŠŪĮČaĮ49’MĮµ‘\ÅōéTnįŹ”›×(8ŖLĻg·egņ¤ß•o$a»ęµPG,ęMČS–c‚MjĒ< ‘“' G³1”»Šį³™7G“ŠŽēÄńY†ŽS1`ćŌSŒldäq—7÷—S ˜|'°čÕ%„½ÄŅnŪ‰ćŚØ†Īś-"[ūhŌ$Ŗ0{ėZŚF˜šjł›FŽIĒ{V ķéz…õ“6›e*TbÆ|5š/޾4ų†ĻŸ |1Øx†śiDR])mmŸāiĒDŹ”ūū/’Į?| šßV—Å,ćńæÄH¤ 2®ėkqÜČ$zŠż)øš×“cl³˜­4ŲWdɽ€G4„rꖗW‰öm:8ŅŠpĻŽEt¶žµKž“qźŌJB_Ē©¬dÅ:ŃņŒu•«§JĻj­/ŹćļzV‘’HŹĆ„æ‚7©ŽžŻ)’KēķU= L„qF™Źėž%Ó4Ø$d¶‰z‘ھNų“ūCŁh¶—¶Z” ®ń²»Ź Ē$dž“”nz©ŸŠµ/ü“ĄŸmu;ńØńwŽÖ&1é֒olŸŗ Zžxž8žÕ’>;źF÷YÖī“].RŽm„CųOEcߊīĆa[z›·d|Ś’ŗ—M«Ļ9õ¬÷?30Üė^’§Ź>­NāåC ž3Ó„I <«ŗD^§Ž9Jåˆć]ßs³Žµ8·UbQ=ł4jAg$(Ū}„kµœVļœ®‹—>‚“d(d~α_Ęߌ—XÓō/ų^ėKšŻÓyrjwQ•X0zāæ­Ų§ž KšSöYŃōŪļéšÅˆaVSust¶“¾3žõĖ9t4±śĆ§é÷^\Iv#ŠĘŲāBŖ@oķŚQō®Y2ł¬."ž w°™.W…5Ręę+e&G č ėY7bLŲÆÖą1¦;g­UmN›ŁWė\Õ$k gØxš2ķ ¾HÆ%ń×Äļ ü=±“Vń–Ægkh2JyĖę{gĘ³ŒnuB™łyńßž q-ʃš’9,¬Õ¼·•‰1šßŠŽŪSūG™q§Ģ’»ny*3É?äW c¦›<ēO–hwļl ćÖŖź1É,O.ÜGœńڼŖ›źuĮčrš”žeØŪ ō5Ē-šÓgV›% ŲرFߏ|y‹-tc“£Ų_[į&’(öł½³Ę}ė§Q™¤Ū½ž”iqę I¢‘AecčżiøŒÄÕ_YA*t†æŅ÷nrˆ–>Õ_ÚåėıX°K90į׊~B¤Ņ/KĢZ„ˆAqd¹FŽ.¬'ś}k鏄?ķnķaŃ|DÖŅc—łœg‚}kHõcÜś3ÄCuoĪ,M*NīÜsŠākø' 3LzÖܧ™Z&Ŗ,ņœ™: •­¤;· 0=ŗŅ9®BˆĖ&%2cŽ·¬BĶ$NqéėHč§#Č>4xWRń–ˆ×E܃S¶żįÜ»”(ķōƌ®cŌ4ˆŹõ3?$²gh¬„²čf}‘5{3(ITżå=«>CöX¤€]‰by¢QÉécĖuķ)nKMĖ ‘·£Ę~hŪŌWé’ģWń@ń‡€.<5ā)Å߈ōÓµ–ä#G<ēßńś×}6a/3°ų•šŸQÕu[x|Ł,¬„‘%RCÜöź~øKQŗ{×Ȏ ‹ī=†G·ņ®˜ŹĒŚč}ŃąūėėżŽźgfĘ ēŖÜ^Į{q%¹F·`qó½[BG%MJ0i0}µd €ŽA®į`ž5%ŠūÖ襩=Š·';ćnFkņęĒG¶ūT_ee?ĄĖ~TĖP87ų“åHŃZ” ŁYz}*œgŁäÄǁµÓµ!:g¢i^*±×mP@Ā9r¤ō®†Ė̊FÉ˜z`Ž”“ŲĘPģt–Ž$ó ĖŽ+&īTI‚£%3#ĻüeąČuŁōĶAÆ$I£o04NC)é‚k²Ńš;K$†Dy'S÷Ļ9­a hCd„‘°ż85ę^3Ä3—µHēŠq— >ļÖ¬,exBņųĪ-¼ŌŻĄĒ*+Õµ +»(žčģ·ĻCļ@’1Õ ŌŻX:3޵™ć WDm8H‚””VżŖdkŠł.e›Fæ6WJNO\`é­&Ć ó£›#±éXšu v)­ŚŻ"txZķ|ćeUK©‚8łNF5œeЇŅ#×ķ'½q±]Bčy5m×N¹v’DŽ –=OjŠ\n§oÓ ēź+9tŁcfŚÉQŽ‚¹¬„Ž C>A#éY×%…ėĀ—²¼<õSČ £ńēĆKm*mOĆ÷‘ŻĻgĖr±ģ@ōÆ(‰®!p^ېFįz~5Qž©ž—}lžUĆG08Ļį\¶»¦Ąbņ•ai—'pąšęœzˆĆŃ-ģē±½v¹‚ŲČ>CuaӊlQ¼Æ"8éPŒbQū¹&Vą ōoėWjÜĀę$V.žõ¬„̽kQ›P¼ÄBŒz(ėOÓeÓl­f†ā łø ßéWu/ZėÖĶ)³”[¤$ķ9=¾•“āM+N·C-‘F”å°\bhxõĪ·0œŪČ?v=æ­Mg¬+Į!·q€ōĒZR],u»æ1į3[¼¤ō+[eg‚༉äöØõʇi©G4¶¤;ó!ē5ŸįłŸH½TEūŠ…Ęjąµčƒćž ĀeŽč66ńė_üIųl@e€=x­ sJV9;o ųm¤›ÄZuāŚĶpw‘HÜ}Ojä÷–‘Ŗ“ČĶ·Œ’ ¹I•Ėˆxńy[<’1ŹąÖ¬ÖZƒ9gYTä8ā¹ęģPŪĖYõåo.!brJõżk3[“’+XćKĀč6²ņ fäĄņäæA؋7 äü§‘^½”ÄŃIыĢAƒ‚85%ó]õÕĶ““Ą‹ŸīƒŠē”µ˜@žxĄśÖ2ÄK;ˆ0q»Ö³ģ,µOµO¶²,*AW†QƒatÉÅŖŖŽBŖŹŁ^0H«)©Ģ$G–œŽ¹«Œ{š¦Nś|īr«27Ćüė2ä˜Jł³®y#µ>Rg±čž¹µH„RMÓĪ_·µqŽ&šžbҼ™į.U×<Ž£ńÅ3Χ¦_˧¤ķl·“ƒ yćhŃ\I34S `g„kAc¼cn’RžO!Œ€†ē‘Q(ź•ÕŚŚ!$-¹?Œg ®[]ÕM²µõžéäłsT£`6ü;ć_·ŚĆ‰­ä<:ČŻį]•žbīS“Ōō4Ęe_Ķ$RH" żąk ļÄ:ܶĖiīŪp„rFI¦āĪ|=ØĻ3^Mr’®üģn§ÜWM£Ų„“Ī0w¼HąP7.ē{q\F#Ų»łHKoc,‰"ģĀēƒĪGؤa)\ē/4ė/“ƒ±#|ą‘ŌTģÖŃĄŠJHżūPI’śœĘQ ćk@<ōō®óYyÆ<ƒHŽ~ö8ōŽ’Cø‰!…dHŠ/N;Vņ\FeÄCr©ķQ(š¶h>£iR,Ė׏„pW–vLļ-¤™|ņ6`B††”¶»;B|ўŻĮ­ »#»¼Ŗ6cęÓÖ­"9µ8ÖŌ-ʶ’qÓ5Ģėr„ä‚8­Ļ”ĒīćÖ³™¢9ė]Ås<ĀOL)®€Ū?—»!r5™Mhvņ÷ywn0AųÕ­atKK‚ń"2“‘‘šŚœŒŁ”×v·ĒvŽ æ•u֚dO`÷N"nØ=ke1ĘZÜå4sUÓõ‹ėKėxn4Ņ›SÜ­Ļ'·§ėWo5F7R¬%UqžĶGD$.ZĶ‚h×#ĘÖ÷2Xß[Łō'éżkī?€>,¹×<Œõ%Ž)’S™!'sd|ÜtõõÆRĒ—Č’Šų÷愚\¾>Ō¼K¤Éo —!¤ĘÓ$™ē#ėšóæė:Ž­öŪ{éķķŽ#Ąžć„(ģC.xĘ{ e°Ō“]Bāw‘ĢŪDgÕæ*ć<m­źś¬P]ZČžbüņģĄ_©§ā]3Či­/¢†3‡.¬67¦1V„s{tg |,ų•Ŗ®»oe‚åä˜wN²E}~ßm­QV[ye»BL‰‘Ź“ŌZņξü?ń—„üCöw˜X •rÆ#ōҽÅ>Ń|_įė> 8^ŁŸ0(fv=?ē„g:} ¤š>ųMį „_59nÕ5H‰-&eN9śf»_Ž Ō|u«¾«įė¹’°ąpT2 ŸAųV2Z¦\[>|ńŸŽŲ[\éq\É4|Š„Ēš>¾Ü׆ŽCŖ.µ¾£Ū¬lVDaŌgżiFkšČ·}Ļ~Ņ“āKdH..“€Ę7·¦@ģkń‚<5=ōhŽŻęQ¹00ĖZĘW)jUšß„t}oÄw„]-¼öe”t”…Żł×eā’kkµ“ŠŖ˜i0‚9ć#„PłćńÄaIŻ³K.}Ņ3U­t&¼vš(>ÖAČ\}ÓźM• tūU“šž”’i–ßi‰’El¶Oō®Ēƞ5Y­õ]ā;5ócy:qŠ5X~ųZwŠ}Bģ^,¬Rwe—ž8ĮÆ+Ōü'gkā( ½Äe Ÿ(äm,?  kŸĒvZM•­­„ŪJT‡]­›ćńƓ>!üCŌ¼[ÆĆb°“:³É ū¾daźqėA“‰śmšsĆ·_¾Yj­öŗJŃģa…ÉÜzć¦+ęŸ éƒLńdśåĘZŚ<9¦ķ¶µ°?cH’ÖÅ"‚ŌNj·Œ“»żĆŗŒ2M!“uU‰ƒci8;AķT_7Sć[ĶÄ$—· uuc,‡q“ęuēæµoĖqx}-V%ó•‰ Ē„1|ā9t-XOvĘKb>hńŒŒöō®‹Åž%ÓųŖŠŌÉĄŠ‡ˆ“tÆ2{9*’laŌēµ}šZĀį|«é2i±ÉØE¾W1¶B ĻĶĻ'ŽæZŅF6³8¤ń4~#dö†ī9ēhŪ‚§ŖäwØ Ķ„kMā8“É!°øR ˜ ’~cļG=ŁēČ’>\]ZĻ­ųJŚõf@AĖqłqW>Żx§EŽīņü-äp($0Ąˆ}}k¢ “}'ąĻŚP“Ū!‡c6ā­žÕ±ńēĮž?ÓVS£TNb“w‡ŖŌŹ=E'cĢ|=Ø$6¬u(ŚÖę+“®Cć”ƼĒ’·ü$²ė:|Ś]¬€»³č?!¹œŖŖæ°N„šóVŃÆu; oG·ńŠ0K›©•D±ų<öžU±ūIiæe’ī’Ā2h° ”ˆå$ēäuėZ‹Ś3ĮōæŒ~±¶“ŽŽįQ ćxoJįž$źßŚVQx‹Bxå½VĢŠŗżń×9 §Üņ Kćõ¶‡goc¤¼·Ép™A8Ļ*A㱯“>|Yšw4ó“šwˆķÕKFkcxöę¦Q,ö%¾Ö÷LÓęūN†>:tźÕä?ü+ž$ŽūĒŗ·‹mµKŁc.°ĘYĮ'åQŪµf‡X»š§ąļÅ_jÕįx“X%ŁräAĒO¦+Ü®~jŗ'ˆģ|I£[ˆ£ū³BĆrMėøV‘h|Ģł§ćg‚.m^_-ęž¶“$‘īĆņ¹ČųńŚŚĒž"·³ŗŗš6ŗ•¶¾NߘēšĀ7ößKᄱŖ3ļPƅėYńjMq!Ū' ÉĮĶvÓ}ż żš|sī&‹ŖĖ²^¶ä>į‘Į{ā¾»µŽydÄ)“ŠŽĀœöU“DŌaŸMÕa[­t1]DFCÆŠū×å·Ä? M”xÓPѤÓ^Ź8åoŗ²!ū¤ć·įX_[TՎsQ[5-®-ī„‰…,>æJūnęM3ćēĮķ3\·¼Cā <³lS2ĪøĘӚ—µĪ…+§šCßŪ)¾ų×ğ²?Å-N{?ksyŽ{Ž#·Ÿ¼`ž'iĒØÆźżo,/®,o#L”ŚrHČ#Ų‚ *‹Ŗ6Lś7ą×Ĥ²»·š„üł“— ęū§Ś¾ŽŌtıø:¼åÄ '_9J‘Į÷«k³mć Rh#+šŸŁņ:‚°³Éėģ/Łöż¤nˆsx#įv™gįoŚŖ’jk—€–@ż$XŒąŸLŌÉŲķ”O[³ū‘’‚~’Į)?eĻŲ;ĄŚ~—aąM7Å_å‰dÕ5›Čė73ć’Ņ6H\’ÆŃ¦±øXEŖÉ˜¢•=…yõdĻJ21|Gą©üG”Ķæ½©ūeī³/<p#øČļYß ¼S§{ų'Ó“ĶYŚÖöŚąō[„%NGLä~=ŗÖ6}į;É/4+«‘qwk!Toļ&N>¼qšæygŌ—ģsü³.:Zfq‘ņÆķÆū1é_“’ģŁć/…×6z–½/¢‹…Zį‘>Œ OÄzWł¼üqųMyšKāFµąmMn£“gyķŸņĮwń“žÉ~$x­ņµ²-å“F_Sž+Ó4æyŚ>Ÿ Å䯅Ū1Cß…rŌChłŠŗ„“‡płŹäu®ūÅ:ż„ĆéŃŪø„8U|ŽU»Ÿ„yąś@ś;ĆZgĄ×~+Š=?QæŠ?.x ēĶ\`óŪ­y7Į¹¼?‰ī?±ińłķ'ŁŻ²Ńn=0{WĶc!9)y®=ĻŪ†0é+į-M„W0eī>SÓń5ą~*ż–$ų“ÆŪÜ^M*épJfVQ‡WĻ@+å„}Ow8­ĻWįķ‡Ć “›+Śß!øRø8÷üšł’Ę~6Ó4{[‰nn‚c<{׫]÷™ 56¦‘łłń ć/ö€¼‚Š>7BA䊳ķõ;«į4“JņŹXœ‘Ö¾» NēńÕ0ī•7i4bÜZ ęe9&³fžĪ{2#,äü§Ņw„M”īĀäp+µ³čfVEøH` Źž„VīŸą?ZÓ£ŗ¶»kwY6¶ÓŠż=:֜ˆq<»ÄžŗŠµ‡ÓRī䔐‚Pk~ŹĢ*F³ óAØåEyĀėŚf‰¤(»!ŻŽ:rµć9óį¶Õt顔ū¶źŁĻųU¤jž×ÕÆ¼»a!|œ7°®ŗ?‡÷fĶļŅY$M€¶y+Z8®¦ŠŸsœ1›i8Ų–Qo~–Ó»PźsĆČŃ+hmÅwDl/|•ŁųNāŅĮ&ÓodX£$˜vŽ[ŲÖ2`hj°[G4,@~I^¢³õM=2Ȭ€õ'“ķXĢŅ?§ˆŒ‚Go—v8ķ^“¦j ‚Č6ž1Š)¢Ōldė:ĶäķŠlńŲõś×ƒk_i¼»2ŹLŒsųV«Ģ¤ģzƒl ń¬6s¢$č„K±ĘqY>.š=ß‡Ž ßõ–®vŒUhuB”„į«KTt— Ɛ3Š×°ióAØZĶbĄ\ŸĀ޵DfsPéšiw7!£‡ķ½^C{āV[«ķ?U±“%K9 „p?*ŗUYĮĶws¬Ö>ddŽAąWAldĀˌƒk Øś¬Ÿ2‹iOGry“_ķļ.ÄŲ%Ńy3€°osÖŗ/~Ģ ŸBÄšE¾£i5¶$GˆœnĀŻĄ5ąāćܿӄxÖ¦J ūźŌžŽųŪėV—P^I—<śąÖ¤0Ÿ.9†B21_9]YŲžŽŹńTkP…j2ę‹WLÅńłSéöwö‘HBz±ēśf¾ģżŠ\^2šåģf2~W6łĖÜń[J'Óx]NL-ŗĶÜü÷š-į¾ŅćgSŖĪG9 wÆQø‘Æ4-ATnø ‚3»Æ?ʹē÷kźsZ–½¢ųƒįņZŪ“–_tKĮ5²2`N€ēÆnŸųõuŸü} ügš—‡onōŪ›_Ś Šćx) üsłŌ¤z\Ś}e¦åR+²Ń§Ū•`£$ōļ['b^ŚśßĆė]›T±»}RœĄÅ7Ÿ|WœEńā/ƒīM„×jŚp8Ł·,1ߞ uÓŖ|.wĆōź¾h«ŁįŚĆJŃ4™“_xbĀ)W˜.¶”‘O¹šó‘qąox†bū˶¹—Ģ•³»vzd{WTgsāŖe’ ŪGŌ^šž‰g{~ńއ«ŁÉåc8•æŗCt5öæĄĻ‚ZNJ$·2ėś=¤2K²{—1l ć+“ÓŠŃ#ž®o*kSģ~ųCū)|7_jßō-kP·C(«‹®3±#RI9 zŠžb~+|UÖ>)üLÖ¼O}o<Ć-!nR!»9™ĻJē«”1œÖĘ^„H8ėk2Ž™y#ŲQųĒĖŚ»ū³A”!³ĘkŠgźXm æŁ¢hǜU×8äó]†‘Ō¬r8Ęj£{ž¼§dpšī½0ų‡”čæŲd!`qƒƒĮÆŽOŁ{ć6½ąO kö6~*š5Ü&ŪSе[ŽĄĖ†]¬ƒCÜė¤łuGÄńfž7 <-MŸąūŸžŚæ²Ÿ Ēķū"_ XļTń€äŸåY±ēŚ©?+ßt|¬:c͉–óÉ É4†@A8Īy®Ŗń‡;töü¼¾[3”c±PĆ*x·z‘ѾżŸŻųŸ~~Ę~8šē‹õ_閶¾Ÿ§Ės,v””ķū4§ų†O@=}ėÜæą­_ 4ohŽ †-~nŚā@ö_0óa•dėų×;[qͤ«Ó„ŹŚ•õķk~gē€-µ=_E{˜ģī. ¶ĀÉ*”!~§µu6׌³ŖĒ!ßӃĶrV‰ö˜:Čäšœu¬YźĘŖ±ŠĆ ’@Ux>‚ÆYč—.vÉ’¹ō­éRlņs\«^J1Zėå©ŚéśM„˜+ %žTÉAvp #9ڽz8sü÷ńŸÄēŸWTpśPƒÓĻĶž—ĢĪ<ņԞ9ÅtȐ\ ¶:õčÓ¤=ÉK[ kBY #×ZKgˆą©=»Wlcc>cNÖŠF*S[Š[ĄPˆr3TØA)€(#å­U·øß  ć4ņ•Ķ)'@nr½³ėYīŪ0¤üæĪƒžlg’o •ce?ʳVŌĘHVśńW ĪinE-±Į/ņūŠĪūRFY\Žjs3=īer' S‘ĆdŽGĒJŅm|ȑ)ݐ]=šÉš¬°:«ž:RšŌŠSŒ ­ā[qĄĄ­ķ"Éļ/ąÓ4«;sX•‚­“ ““Óqč£>µĶ%©‘ś7š'ž į©ųŗāĻÅ_å›BŅAY Š!;¼ńŒ#ØÆŁ†<#ąæ[ųsĀ~Ó<¦@p>ĖV”“ŻOZ“ĪßϱÓåHtų ŻŁćxēŸs[hó]²Ķ©ĢŅ÷ņĒAAŒ¤m[YAiø[ʰ©<V¶š®].däŒé6[’×4¹< SeĈC2Ån Š’–§3{=’ęŻüÜdœķÆ%ųƒń:ĻĮV6” öä(~JŹTÉ’’·÷ĆχüBք:aVE ‚Ņ8PĶ<Ÿ“ēü—ā'Åłu? |1Š’Ąfhä¹` ÷Š7P9®Ü5 z$~f]_]M{w}=Ä×·SŅĻ?Īģ{üĒšĻŽŅø±ę½ŗqQ8Ŗ× 7&w’«=3ŌŅÅöVsņž•gRWgērŚĘĢēdcŠtyS“Ÿ”ā³2ēEūk2ų<æ|Vż¾”F%•VŽÜug4{Į‚’><ų¦|š&§āŻM˜øU&Ž÷˜tõÆé?ö<’‚hžŸOųƒūOźšųÓSdIF†b·~»@®z• ұūåšŪį—†<¢[ųoĀŅU LŹs>Įųqć3>&Ŗéf;”] ļĪqß5Öy†ģ–īųļŽ•Ń}Y\‰¢{GŽUl6sZqk1ŗ˜H¦朊Ī1—o½ČÄŻ4KknÉꑡ'ų¾“‹ƒčf]LåŻyIĆ_$üMšö”g©\<Ŗ²[ø FrōśŌJ'TCĆĶI$–RÜ}’ļp ¹±»ŚØ]éķģgņĖd†ük4hsmjń]JŹēh[Ž®xcĘ?š®¼i¦ų—L&%•ÖŽ÷oīÉįÓś×}#)ö?i|āÅų‹ą+vŽößP·Ēp2EĄĄ#®?śõ‘Ŗ'ŲŲj6¾d×1¶ą‡”®¤Ž9.‡·ü<ųÉ6“čWzH±–.š»wÆzöõ\ķh.`yĻ!7rkkJ&½¬3$‰*£ F2zī¬ęK”n˜ŖR±Ÿ)·£[źZ{Å&QĮŹ•89õåzÆĆÉ5 ¤“Ō.mnb!°NA^ć*½ Ļ0ø¹­‰+2673X_4‹G]WFig¹ˆ|ńĆśā—3Ųv8æ‡t‹ķa4Ė™×OæBćcv{ ÷ÆµĢ°\Ū)¶ŗEfPxE4ŗ˜Ź޳ĆösKdąĶn̤|»€&±õh¶LCŠąć w­V¬P\¤ˆ“ūV¼ń$0eP[ĒaĶŗ\qśÕĒjtČŻęQµˆŸz`xŌ7:†yö«w‘6å`8޽Kā eҵy-ćB0vŒg64XtĖ+kˆå“¹/· 6ž kĖ=Ž Eäā ĒhķYĢ|¬łĆāƒŚõu.ćŗTŽ2?óŻ"ęÖŻö(Äóøē5”–†±ŲŅ3ŁĘHy985]” ¤(Į£Ļ@:Ö6(ŪÓ5+[HŚy ø,H#±«×>5Õ B›āŗ ķłų8­Ń§³-hŽ3“ø½K ¦oŸœöģ aµŽź “˜uš å›ŌÆŽV =:ÕYeŠśŁŹL¹ĪECń4±Z4¶—{%ĻÜ$ž+„µæ‘£ap”Īģē*dģirūĶå[4ČŪXņ1PAŻ#ܼė(Uł²y‰L妳†+Ł.` ›ĄO|UūM’ŹFā3Į#½L¢#¢ĆÖs2HśŒ–®0C€1Ķ\›WµX<µX§¹C·#øŖ—c« §%¢`Ą÷«:‡™w·ČhüĶÜZSDÄ©sį«‹››a%ÜE‹įAÅwϦYĒm‹Ū¤•2 tjŌ£Ęõė;y®ęƒO•›ld©'„u{{FøUėļS(ÜŗŌ|M„ė+¢¶Šł łĘzōÆVŃuGŹÜ“”Ź‘Č‹å±č: Ø3•KŽüncRų“J›Mt–G³Ēƈ+Ėi„O¦C-®”ņ7śČ;žUį})f7÷6:|·œ °ō­cS‘³u¬w-µ¬6äŽUWå¬ÉoVĆz¦“öh ~ Žęż!øMū•@É=qQieAŌ@8'ē­ea©3ÜtĻģ±bČXČ;wÆ-Öķ#ŠźHVņ›qPĻc-ģyL.Š1ŠHfPė4H®›³¶ŽŖÅƒĘ¶ !ŚK/Æ«Ļ.5;Q(,¾R±ł¹Ęß­6„Ńv Ō6›Y#œrFŃÖ±õ=1%‡Ė„J® 9ZĆŗĖfVČs˜sQĖaqꇐ+ÄŻ‡jLø"O.ÖŹX•aŚķ×·§¼T…]¦P:ҳö…ø”'Ō_ČuĒ5‡¦H÷žbĆo:D¬AøēŪ4¹ŁGSż”²Å ‡śĻJÓ¶¶µTĢCIŒzŌĘW4ģJXхńy½Ļ­nZ\[ŪŹāXCG“€W·½žmā)|«‡1$Œ ź:­r—ÓI,|Hséš8»¹/!ڶī% łrxŚ=«ZÅćmžx “ō¬T˜å¹ßŁ%µĢ(іNƵt¶¶ĻV…A`Ł!‡j®rLMNvžķmŚŻ¢u=‡Z«qlÕUŹ1Ąē ­dÖŃź–ļˆ£cęĻQPźw$9Ł£bqJµęF.•įū{ÉŚź[a"Ęxē„E­hMk§#£;wiøt7ŽĒ8ŗDńČŃ3“RŽĶŽŗŲü%<–©2Ī7mĪ+DmĖ„™… 3é÷[gŚøqZw3éW®‹A˜';‡9¢1±$+”Ļxš-D<įˆ\’+®I§Ś˜ēšēĶe »Ž6V±Ģ¹ ȊŚ3Ip…ķʜ>2sļ\õž„¤“ķūäVĒqšŃJ'ó‡»į=F»Š5-v€Ę¤’sÉüqR|_čžńn‰ęKmefĶöfgłIĪq^ē)ēÉ3ÅüR“ßĮq,+%ģ¬Ä8åŻœf°ü;Ø[ųtHšę÷² äv“Ļ=±ėSČE™éZW‚¬µ«{I¬®dšŹRx0 yė_Cų3įž•įķcLūXµŌą·2Ć&9‘‡n9éVŠWGi¶>%šÖīĒY·ŗÖ„ŽwXĘ8 Ė“géYé¤õI̐øĄT4‹-_h×ÖČ׆(xj­ƒnµ›'™ĖŒ’G˜żh6¦ŒŪ k~Õ4ńe =³6Ē\'Ø+ėVŅĶüiåÜ=¾­ Ä\tż?Z™D©[”³šūĮ¶¶7~&×!U“oį,`rqļÅxʏųsʗW1ųgL‚ŹÄ́·#pą–>½hQ±Ķ7®‡Ī·›AÖ$ó4¶ŽÜJpĪ9ÆqńW€ī5{{=cĆĢ÷ł`4,ÄöėšÕJʋS’šž•ā?‡ś“ņܼāŽvó@|ģU=@ĻNkōgąÖ£­ŲĀnµ牄a³xŹ©NKūxe¹‚$o-dwćw½|ē{āļŚųE>Ź·VÓ4ß*yd6ģ×-į ZßMfóCg:ńo—Ģ8ĻƒXĖK•µ [Äz»iÜĘk[™°# š+&:ŽŸ$pG<¹8aū¼œ`ʽCĮ¾:›Į3ܦ¦īö·vęBB–V_į5|ĘvXgć„I¤Uµ=#öZųoįMSAŌ4½oQƒS³“g&@®$n õ#¼3āg„u ďŲäµŌ4ų¤ łcx9'+)>†ŠÜ³ üBš‘ҵ¤u4Ń£%°ŠČõöäדüż¦ąų[įėŸ}†]wT’l&9“'åėŲÖV5å=Ćį|I×ī|Kā? b£Éq*)—„~]kŌ§šŽ„¢źOw{$é’8x6crŒt<śÖ~ɳž„3Ń5æčzV•§Ė¢ÉrČ7£ńµś`Öø½cÄć^ŅßTž²UĄqŸLÖ°„Üå”>ońæĀy/4Éī¼—°j Hņ®üÅ2ķĪ8äwż+ćĆZōšvƧźÖĆK–vhZ<‘žqĪj­bāĪü/ ŽäNźįĮBFqӐkҼ#ā+u³g©Ėž±Ē¼’¬qN÷ŠÜnæā9®¼E.Ė –Ó*˜Ś1ņ śv5gÄz]³éj³ZE ŖęqøžõQˆP>Sń^‰Ŗi:”ńgƒuŪż ŗY-ߐvć½{Ä^2ń&›įkĆā CÅ\ÆŁī,žL“#`yėĶj¶±|ØóRm:źę+łCieĢ;[k)jś_U¾¶ŅüouūŌß“ŽÄ‘õžT„Łņ/ˆ5¹mõÖdgPĖ8 3Ō{ׯ|ų>…ćm<…Ģ¢A§ĒēHŚYŲĖ£ NņŹT’HNĘ^F8?xūLx«įGŽbšµę«{-~ßf†i %ā±čƒ Ę@©ėb’>ĪńĻķ9ąm: ßųćG»nP/›į‹wb»õ­koų;_Óķ¦Ó5‹±‘ƒ¦óĪŠQʧĖß/õ½;Ŷ3.“ īUQ§F#L ¬}xÅ|ūń'VŠbÓōĖÓi÷$v‚^¾Õ”£a8ŲŪ_xZßįŽ¶tĶr;ÅÕ“ ƒ"‘ĪZüÕń~Œ<]Äśz©¾ŲĪå0Kų©‚w2åw>h’Ł¢ycp>VŪī¦&”¼ˆća=ėŖ.̵ęz7ĆoKąļhģ„Ä­8³•Sō‰[ĮcŖé𕼋Ū\G+œtPß7é_£zžÆo©ųvĒU³•^ŽåVE`xät®fŸPœzŸ üWż–ž~Š’ ¾9|ń‚¶‰āųHœ/üz]„Āʃ `Źõ^sš’:ļæ¼Oš£Ē>=ųAćm=¬ü}ąķZ]6s,f2öĮˆIūŹŹ¼0ąšGQNœ’•»œsņÜ ²;¤a—wŽ=ꯙy9ü«“暼[š*‰ZL„d>”īf)ĖŒqĒ’^«H²īņŌå#ښ•†]·UUČīOZ™ ³tvČŖr6‹Šž!¹²@ō«pŠC¹#OCY›Ćcōž =ūh_~Āæ¶oƒ¼U«źw:gĀLš'Š"W-ocˆ®1ü,FHē‡|ō‘Ņļlµ:Ö÷EæŠ÷Kø/,åFI ŒzŽ¢¢¦ĒQ…¬E³6:żī:׋|IšŸü%^Õ“‚M:żv²IGŻoc’y÷Æ:hĶ]_MÕ<)q%Ę„is'Š49d³½aМ•’huśāæą„?²µ–żOľ·—ȼu7Ÿ$"·ß#ŠīSz‰ŸĻƒŚ.÷XՐ#Č`F88‰yn1*“Œ§(ĒÆB”ÅU/nĖ€[žĖžæZ{*y!~ī9>Ę·R±Ī¢ĘĒd÷ƜaŽ }!šÆįu·ˆžŃŪ¼šŪ”–R.Åł©:)ÄŹ×|=…5™¬µ8Ń-$o–@r»OžÕż0’Į»Ÿ“ńŪā7Ć=KRŅÕµļƤäžń¤·-Ę{ā@ Ę”čQGõi§OpęYK›„8}ŁČ#®k¢“MŒ(;FÖō yóÜŲÄ»G³utb0*šÆhŗ?‰@†7‹Ć~"ł‹),õ/ū»€ōČĻ0DK±ń”oįķ?ĒŁ“ś†–āÓY·ˆåŚǘ| uĄ÷ÆužkkGŽH.A¶ŗˆ<2)두A ˜ndxzāęH ¶ø'ūFÕ¼¹üō__ÄWņ?’ēżŠoü/ć9ž1xF°_ėŖ×Šlž=/כ˜°;H{–Ø:!¹ü“Ėk§Ż¢)“aĒ–T .{ńõŖŚ i6šģAĘEĪ+šž£{o{ąbĀŅ+ø5 ö<'H[ŗ°õėłVŽ”-½ūBä* lvÆ2»6¦z§…—ū@¹ÓÆ/$k1qž‡×½I¤ųMÕĶω¼®ŪŚėö4Ńć^łņ+ĄÅM«čz¤ĻÖߣ_āu†µą€āø»¶?f¾YŻ pņ9Æ»ōU,ģå»±‚% ‰N ķĮė_-V„®z4“lų[ö…ų­$Ģ—0!‹·Æjü„ųńPń£2łó-”vØŻķō÷ÆW.Ć]Ÿ£e„(C•v<žźŃnį.Å~S†Nųõ§Ū kxŚ8PpæÅĶ}Ž—*³?=ā K­ˆs{lSµh&ŸČ¾Y98£Åž·žÕ.įQŠ>\pq^Œ‡‡Źy¬–³}–ä˜ĖȈHyõÕ Žfś²?µĻ* goJ  ż®)$R‘õFrŸc½†ŹĘņŻ@“ÉøPHŽϲÜi©6Å2üŻ» r(#yĪÆ"gqłxė] „­¬‘0da†ü™Öé:¶•ilaŸA” GJʾž73Ię£&z֙nZuÜčŅ`ŻżŖĶ“Æūµr[ėŲT·a=YŌ,BDVPU‡•ĶRĢżĒ.„hŁ”ļ<;¤ßĖsv`Ż:ćĶA‚~¾ÕępH<=Ŗ*S˜X–ÜN2sXŲ÷#MXō­1ćżęe#œv«ń® ; ĻŅ“§dvGūµ8;½+Ą¼}+Yźķ½»I"tą’N9Jiœµ0ŹD¶Éo©•ҵm1pцdX޾ ō=E^“į–†ŹŃGl`V^R1··„Łäb²ØKtspųĒNø_±ŻŽÄɐ£Ģ d÷ć½iÜÆŒō[ØŸŽ¼Uog2Ž ¼uDZÅmķOœÄä4޶.Xųrīł'·ńõ÷ˆaÜ9/®^r=¾bjŽ„į;‹ "·‰Qöœ `Ū„ęeC+„4Hē“­$Łi‰$č±Ü` Ÿŗ{ā„Šå¼·¼d‰Z{}łėŒV=ģ=.SæūcŹ0#µmYj_'ėW Ίõ,9ų—įæ OMń_†ō{Z&aę tĖĮ 9 ĘæT’eoÜųÓM:Ä;cąĻŚ¢˜žå|„¾Lpž t®ŲT>[¹™ąæµO‹¢Õž!Ćiįķjā;RŃŻĆ œJG@Ųź2ē^;ig„kĀ ZĪŽ{wa¼0ėķš×t9)ąīĪóHÓ|%šWÄ÷zd>“½Ņå‹|3!Ć£‘ŁqŸ¹Šž#’…£soupÓ |øCĢĶ·ÜxĶg&u, Z›?³^æ£x;ÅÉįÆßI‡4,·(ŹJL§#Ÿ^k ℿįńī·i jÖś÷‡e“ķ³DÕ+s°ūóX½ął x4«‹«€Ņ†Œ޵Ó[hØä\m‘¾•té]ŸĘŽ į²l?“¬ļ'{/딨±ŪŲ”# ON*vbĪ $ØōÆRŽĒš·xĶęŻYZ d¶4a 4k†ßļSĖ`Œ~5éÓ§cņéb4ŗÜĪŗ·ņ¶ÆU&¶-m ¬r1éŒq]‡sš„[æS\Enb9=±UZŁ`x«9„!ŠĀ™˜œvĮ„óĪXq҃žR¹’Ņ<›Ų€O½2Įe‰Ų Äö ‰;!¤eŒT×0©Ź;zÕE÷9¦Č-­f‰Ė1Źā«Ż¼Pļä {ćµTZ¹Ķ)t9«›ł]²YĄÅQø’)mXŪó×Ņ“24|?³“Ā äćšč/ōŪXcbˆC[ÅXNV9Øāf”l$€sō®„uå„BfŌa.ćŁG&³’2“¹öŸģļūübųń{§Mwæ¼\“—×p²Ė*ȧ‘Ÿź+÷/ąwģĶšÓąĘ…&…įOXꚤŹ÷R¾‹{ŹGń)<ZĘf2—cé½Ā–ZkؒA4‹ČNÕÓK¦\ß°WcomŠØźEda)v5 Ó--v˜aTaßjܒ¬xÜsŽk˜JB:»2}©ß½RīćÆ2—C$®Qž[E;‘ÜtÆ*ńļ“Æ[5Ö£} §Hƒ€ķōu*gēGĘļŚĖKÓ4{’+W‹ĆŚ8Üi% ČŲćņÆē³ö‘’‚£jb-oĀ ®/5ŻZ'ū;ź3ɔŒ­ēęĒ<ÖōiŻŃVGćæ‹¼sāÆź÷όā3śóҰ9'.…ų a”¾;bµl4“w;*ÄŹŻrg6AÜx[ڟˆuŃ០hƈ¼BüEgg –I¶:Wī?쁒Aų³ńr’GńŸķ([ĄŸ¼„ønńēHsäk9Ō7‰ż@üż™~~Ķ^¶š§Įæi:øϾ5ĆćļŠś&HbGĶÄĒגkŠ„KhmĢķ:āźK·I#x#śu®œ(õę°u Ł&W֐¶sƒJRøŒ[½LG#AäpN+:{3ļ¹/\ó‘¬#Ōęõ]F"*$ļƒ^}{¬’]ÜAej>ōŽvŖ­sīuSšĻÅŪCĀ_弊“WÓõxīQę Į}Ę3­~Zü\ż§>'üXŌ!ƒWÖŪDGdĄJ£8ēÓ­uS¦t%cĄžXٟĖ,ŅārXŸÄÖͬhc]Ą!ƽu„m”ŗ!^Ґ‹øę›·Ź#Hr­ßҲ›čfv:F‡©ŻÜE Q1FĮĪ: ÷ įÅ“H—°‰_½Ękš[•X½Øü*Ńu=ŅEe²ńyVQҹ%šķē†īTÉhŹŹp¬S#ėŒV<…ūCÅZŠ}¦K{w›ī°U ¹¼‰¼1h—©µXÜŽĖŒTXC×¾Ųj¶³DšĄ— Ąf~µš¼9į­fā ‹-֬dzœzšŖ‡ĻŚÄŅ}²IPĒ* P_ŁHc<Ö£Č§‡½sN&±Øv‘_yékp’Ä÷ļzē”Ūü/ń¾ ńLśü–’Ż2ØĢ@CŒek'Z“:żWÅÖ~,ńTš„Ō?`¹ø“ ąuś×O„Ēą¹c¾³»Ō’³õµ>u¼äįį8ēž)FŸ`“īsŽųŃāO ųŻ4Ż^ĀÓQŠ]™T^‰źs޾śšž„a¬Į„„^[Ńī8;Jūc×é[*g<ĶFĆHĮūćÖØĶmjβ$~S/ØjĒ5˜­ķo Ū0sŽA%œVķˆäĆ py¤öŃĢĪš¢ķWīøõ®s{[Z)•šFŽLžAćšÆ:ń_‡ī–yķī-³a2R:~bŗi3‡×_±'Å»Æ x²ćįæˆŅŹmT[Ķ#óęv\v5ś?©i¶Ńjļ›©m¤Æ`{×tNY>§K¢iz^‡u%äFKūe$‡’+Óü¬ųOĒwiq¤^"ß[9UĪÖSÜsJŻŹG¹iŪ£‘cŸ?ÅZWKujį­#Ž@}ńLĮ̘ŽÉ*Œyą1ŖĖö›F–7u‘rzŠ(ČľɀŹ÷ ŠŽNp>1’ĘŚŽö¹¶'ę\ćŠß•\ųŗōčü[}xŗTPŪ$»£8Īqéōƶ>kv¾5Ņ-ŚÅ2„‚8”"fĻCK9“ūÅvóRTłH qłVÜÅ®—|jĶĘM3Ž{™­.Ü, Œw5l<ļRÅćĒŅ®2īAM和 śf“®-­ŪO¶G»²V‰ß`8kJ“͐^£Ūø?+vöĀųĄQY¬ŚĘ“żd9zYņō7ŠģMįŻPĶ£K½ĮĘ}q] 1ä±'®qéK•‡2Ųó/ŲŻė åY“Žź~č<:×ĶŚ„Ł3«·L­œŌŽ(ę%æ[»§šĪCit[*ޜW_k}ŖĆ=ˆ’ā-¹N8š¤ŹŠgŖ^iV¾Dw°ŻÆšĖø*ōĶp³Ī†ł 2ŸąšH„)XŲŠ±±†;ØIüƒ»µ{µĄÓģa"u–6vsTe+•’·“iVxoF`pŻĮ®SWזŚ-„ŠK÷Čüh1q<ĻPń†·­†1é]2œ0·8!|w“¤¤94ż5›ÉŚŃä`c¦k—’Ō[É-¢¤‰žŠn¬ęf3i÷¦éPHægfƒuü ui°ZHČ ·(bżŗX Š dKt$zšēįÓ嵌.ĒpŜŶÓoŅ#4ʾ8bĄM”ŗ?8d„³gļcҲ›’8­GĮśv¢Röé®ķ[(ŹÄ ’0+Øū_™lmVBač* ¹—kc7Ś0ĆtgŽ{WAw¤eć §ŒŠ+X“ŲŃ|»—IQŽ•Z’Zx¤ĒpĘsœā® ØĘŗ×ÅŠp8#ÜUMF}-"fž8ćøŚpŻ5N`Oįżen-„ˆę‹i ‘Y×*ŪU|°y T\ ”„ ’±¹0¦ĘzŠēļõ‰-ƒy…'ÉīzRæ@3ćÕą½@*G sĮ­› ›xÄŖ®­Ą«‹č„—!Į „§¦+”Ö4¾·žWÜĀŖ[厚_Ä? ^Į¾žѼĀ#’vżN¾µėš_El®×pĖ6iļėQQ›$yĘ»qm«Ż}–Īxķœ›ūŹk¤²ÓžĻg—2yƒśŸzŹRčUŽ^éÖśvH *ŅEqņ–<œ¶kū5ŅL™REĻ5¶ÆÅ8ĻcژAYĖĶ»<`÷Ŗŗœ³ŚB8SÜ܉°Ń&³lBņģ\p}ė“»Ky£uĒ<żź ŽR¼t„™TyĢ{×,²‹Œģ܄€r(—62An· 1³c‘×ŗt¾|ī ¢(8ū¼ ĄLō0[AŌWÉ`LLć(AźĪ„^¢=×ö|ųcć"ēI¼„4VēĖRȰŒaÖ»nž? kŅYN;KÉ3Ł&}(źCzčQ×<]‚lcÖ-ī-ćžEÜ$Č`@źHƜ4‰6Ÿ|y+]kÖr¼rH‡#`:=x}hQ*)õ=oįļŽluk­WAÖ¬ęO%ó ‘"ć =³śW«Ēsi¢Į Egs`żyé_@i:'‡t [j–Z…øņchå|Č͌ā•ĒxļÄæŲųŹŅč֟iŌƔó!Œ%O’_<{TŸļüEš§RÓu»ēōĄĖ PWąž(H³ŠæhƊŚÄφšt:væo|#pĖm’<¶ļø÷ĒJü݇Äz¦‹=ѰŌīžR ҐŲz hGÕæ üQöv“\Ēuv„2±Č$’!ł×‘N-µˆÖ^ŪŚ4R¢I8eb{~TŲĻŠĶ{į~šŚ‘u£źV6„Q¶GøLøź+Ė›[Ó<1"Ø1ĖåÉóyDgzI‰HųēĘ^9ńf«ć™—6×ÖŅĢ"ƒz±d÷jūwö}ń†į­Xé·ÓŪ^źˆ0ŒĘTäd~“żĘē{ūCų~=Ć3x—Jqŗ§—wYUƒŽõĪ3ł×ę¬R,)—WYS匏˜ž“‰öf߉µ-#ÄŚõ—„µI“MfŻURi…ÜŒżjõ†›®ųSÓ„Hsz`›–CžĶTQÖV=Ž OćmsJ½×4‹Æ²DA+…qŽkéIž é֚ ×¼³ˆüömą3(Ęi= %VĒĮŽ(Ņ“^ž_E3ĮuŽ’ÄO ’Ÿē^_/¬üA,zV›yŖ[Ū)’ęHN<œ2;ŌÜŖuRæų¹įĶrü]\ųwO’Y-U\…Ū čHėģæ‚~?Ńõo Baø³Ón,į2,ev–ē?ZgL^‡ĻŸ“ÅMS@ų…§-µ³„Ō¶å̱ČWŒå€ā¾]»ų«x—ļvÖę`łęīo^“#_g æüsζŚeō‰kbī »©$+–-č+Ų¼k㦾šŒŚ|x+÷XtēßŅ€p>p:ķÕÕÄsMq#óĻÉĒzéü5ćĶGĆŗÄ2›K}SJa™¢a× ~44W"ź}Kį’ü?ńŽ«o¬I¢Ųų\”ü³ĒźĆ·’_ė_lAį/ x×į½ćZx J¾±)åµĢäĘÄuŻŌzPֆ2?7~*üÕ<ÆAœŗ¶ ó#ÉČn”9ōž•—®XĪŗ¬š•Ģ’Ü@WÉFēgłō©¹Ÿ-ö>­żšž-hqh²xgŰXŚĄŖU¾@ęGĻŹÜś×»kŚ¤­ßNŠŃ—… …”śŠ$ŸAŖfo‚“ ĖSTŠŃ¬ļ&l\žšģvĀōĻZ©ūGŲK čZO‰|3m&³č’;č"½µ cvŽąēŠÉł›ÅėsꏇŸ 5+o‘2ŻÜ*É,īW9#Æa_¢æd…ßuMS­ŌĢ Ķ!w!•€€čy ŃĢūPš?‡t-ōx.ōĶ>åXG ³üÓöč3Ž}ėó·ö¢ż£ō’‚‰m¦’£ėhłx¢ł™æĪE]2%.†Ā?Ę„²»“±ŗ³Č Ńŗśóǵ}Ać/„·Ėįéļ4ŗ:"™¦€ŸŻÆū^•«F2‰Ęxi®õ;küj Ś~`Ź*óÆŚĀ:™¼ƒÄ>ÓbČÄÜyk€¾§Z‰#&|K«„˜A©N ³ č4Ƅ^ńæ‡t’Zź÷VsL8XÜ) 9ēž‡"’Ž·;Dž!šu¦…„ŚČ5KkĶMr„ ūøļĒĢųŸJńTŚ5„vZx¾Óī“r6ü‚ ąńß”«±‹«©懓åšõīu¤ÄĶć*cułb\wÖ¼—Dųy«xjÕå:ŒWČĢßgŒg'ŸåLF:Ńlž!ŻG¢j¶+§½©łžŻB³`ż×#­}ĻāM'ĮśĄ)ķ[8>éFIbr<{å*IŁög,Ńü‘x»BžÄŗ66öņ=›)tp29žµēS["d,S=ė]ČćœEņ÷€ü w AGĄł:ąÓ¹…ŗµ³¾X9Dm=©6Œ‚Ł~‡Ž‘J${¶1BNŅjŽąvcĄüź¹M47•łƒžN{ÕÓ(%VB8⑽6M$6ZŹčŹČćz¼o“ÄĆ”ŌžėąßۚūöŒżfųń?ÄŠź|ęĪßϐ-Ö”¦"vļą …‡÷W'$’œn¬u#śŌćŠńC '_¼ākR֗+¤ę6® Č…æh}"ēš֟ń6g’]!Ūū;]‰¹YżÉń'Ÿ­|_ńį¶ń¾$ųypń‰„…õ gL‡s}ōī+ćūö£ų?qš³ā5åÄV×Vŗeōϐŗ±L ł—ŠxƔļ“s”žIW£EŻ\Ā¢źcL°œKv9ģk*p…öÄ䃥ęŗcœĒO£Āģöņ¢üń°'ž8ư>j³čZĒö§—ōÄf˜_“ścüō©eĮju_|=¤kpI{ilļjńŃ”ūæNõÕ~Į“Ž“ū1~Õ³’Sė^Uā]žū@7-Ś‘qhŹ~äéŹųõ®NmA£”ųićTó©ØZIŹĶ„ėÖ sĆåߏB0sÜڽ»ĮwĖ£ėæõ·dę—"ŸõÖǰ’w§ā=kB#™č GxŗŒGj·É #āµģ’”žŅæ¼UšĖYHMäŠ.ō›–ėmv™(sŲ”>Ģ}(4?ĶóöĄų'ĄßŽ'Ń&·›MÓ仚“‘J5…Ś1Y¢`Śƾ]KgŠV“ ~\u¬jG°'c×Ļ•āļ[›}GåŒųŠ#ŹP}įśę.®d†Ōc ¼)gšÆ>¬Nŗl÷OF¾%šŌVrĀ÷ÆEČÉCÓńĶqš–Ÿć? ė7–zd2ŚČēo'idn™Æ*­5±éŅ}Cš½ć_…WŅxæMÖ.źP¢śŽC˜„Œu}kź½3öØ×®-Béׄ^TıļĮ ōÆ6xNg”éSšHłļā·uĻy×DĻ2Œł‘GüJ+ę‹»«³*"[ČØ½AžUź`0ܧE\Så²: FŌÆå$§’ޤ–'Ņ—Ä:_“¶Ņ¤r¼–õļ^Ģ!ŠņŖTŗį ŲŁÄ­Ø<óĪF“÷~•„āų øžĻŒ™m å$#‚=>µÓŠē‘ē:“Ś-ī›öXn§G‘c“åĀ®OSķž5ś}šęČi~Ńl!Ūŗ4łNÜĄąžUÓq֑ŪÜXÜ“`ȓī\§§±¤ŠŚą‹ p:ćµuÓ8ęmŚŲÄŃ4B3ę’*sĖū"x3ógqż*ĢĶ bė$„© FG"“|·–TUvp:Š h†ĢXŗ±Ź¤ü¤TĘ²ļPęÅXĪæÓž #”¶ēŽGST/Ē•jŠłƒ·­XDz‚L3H¬\žy­­2ßķ“ˆŚEWŻ‚1ŠVSF±‰čwv‹¦Ū,čEqÖ°^HoćC°öØ,éWSG±6’Ā›1†>¢¹©<6<潁¦Ś~nø}+”+h;éŚKØ ‰ d$+Ī+®ŗ0J£Ėbƒū 8‰õ*é‹Č¬ĄōŖā9-nƬl7žĀ‚į¹čØh£“Ö¢YtꔫÉ%³Ś ¦šzƒA©Éź‘Ky”Y¾NO=ėEšęŅń’D( `Rc=5ūktSv8Ē|t«Ņ_Śß„–Ō”L„G²hkMLMCPŗHZ4Rč É…yćĻĪf,O8pģšČ6œ”§cĻ/4Ė=ėĖI²Ąć$ö®ĀÖk±tŹoփE3–‹īBM¼Æ=«sN±šņøƎ:ōÅK“dtėG‘³†ā±Vūū2Qę”tŻĒū5E9Y.SPe)*dÆåY2?Ł!•^]ļ’+9C¹ŁN«ZŌśEŻĶķ Xåa²2ÆnĶpž*ŃąŌē’é”D™$ ųW‘‹Ć§sõæ :v4”Ųõć#CĀzŒ^I…Üł‹Ęq^‰ÄĮ$VÅhj¦iĮvčFĆĄć‘\ŠnģōĶRÆ£V±¹|É8N0łķAf£xõ˜“ŲÜ[IöP#G Ś;dVüŽŽ¦evśÕ)3:‘G+,_i¹!Pžu.„bæaemžhåO”Ŗē<Šō̽6ó1ˆ¤]x<×CG±˜ŒöśÖg¤®cÜCҷȰéEµ„»±xyŽ8„R5M¤&٧#qNx©tÖÓnˆ—v[‚§Ņ“‚ŌåÄĻK¤ųŗūI“–ŹŻ[Ėvź8'ń¦ė>#ń.³µk§Ž<˱Ź@{WD`ŽĒĪā«B”‘ÉĮ”ŽÜŻ\É9dg;ىÉcīk©Ó“+ˆųyÓglu®øa¤|v3Ä|£ Ś©Yió-\xvćPrņźČągµ4^·€‚×;øēėe…ī|ęeć†OB„¹Ÿ‘bOŽā6ŲZ`x'æöx]ƒƒ°īhśŖ½ĻČø‡éR\ōšTŅģŽæ1%“WłUv8Ø”³1nĖ1=²+¶•±üßÅaŒĶ+ū|dłŸą½įŅÆ5« j”€$séVšŅ{7x.lŖpkŗ4,||Ŗs;āŹ)ŚyǧJ‰§rŪ_qō­ćüŻK®äWr1śÖœN¬¼@Ŗ/šėRP®ĖøžĮŖR¹RŁ;ņ ęØśŚH­…T7hĢL¤åF1AĻ)v2¼ČŹĖŲõ4ėFd|–+A‹™ŅC4X²õbāī)!cA‹f ÜÉj¶XäóX2܉ꐟ¼xĒqLĀOS.Hd‹8rėœō©,”`=ktC/[YŗĀŅ䅮…&2@ėtꊃ;˜ąīkX¾ęÆüżš>2~ŃȰų]”Ņ‘öÜź×q¶ƒ?ķ½+÷7öu’‚fü;ųAkmāæźÖß>'N!Ś¢)Ī™HŹRč~”é–‘iöźŚ”viµBĒqŖ,` `M’ņ÷Pmģm Äį¤+ŠĘO”Œ„ŠéģtČm9y„žóŌ 8Øå9ē.‚3'Фg…³µƒšˆŠ¹}Ø$(ĘāTU^p&ø sÅKAĪ”„˜8%ä PļŠģ„Lł£āOķ!£ųV ‹}7SY„BAøŻĄäż=ėń#ö·’‚–|?štŗ…¶¶ž2ń£)’KW܊÷Ļō«Œo”čʝ‘üö|rż§>.|tæ‚ėc£¤­$9ņĀŃŌpN+ĄÖxßvŲöēļ^µ f5„m “ÄeĄ’I™‰RQG•ÓsĢ©;č\ņĪĄ½‡4yl±ŪöŸĪ‘Ķ7Šæœ²CŒ¬Ąt­tŚwņG»TĖČĶ#e-mm|¬?pĒ ‘®łś*IÆŅÆŁ?ž ūK~Õw"ö×Āw’ žHŖ?µo—d³/rŖFG’^°”¬iw?ŖŲßž ÅšöIŃ-æ°ü/§xŸā#*½Ī±swYĮŚĒÜgŽ+ō2M>i°nf/“|Ŗ£}€W%Iv,³n%`Ń(ƒŽ•v+T‹q\±>½«‘•Ķm­©ć½)²8(ųb¬8¤"ƒÜ̐œu¬Xu)£vS7CÜńYŹf±…ŒżKU‚,M#&ļQ\&ÆāÉv8¶)^ Ēć\ķßDuBšoˆæüš×KŗŌµŃN™Š‘ń}ÓĖyx×Ws=Õń4®r[ŠĪšÄ¾ÖČ ķŚ»éÓīg)ō&ŠĆĖČIA«‹ŽBŌOsšR7­-š.5üÖćÖ½;Fš²É÷ŪĄ ēo¹„ø”™ōO†¼1pĒ[Eę1ä•ĮÆF±Ń#L‹„Ž:b”›¦[$ėj“éÖ¦Ō¼) ü”|ˆål䂽E.DģįüKą Qc‚Ķ4¹Č€$ņ;ׄė>ūŪŪŗÆšÜøūĀ¢P*2čĪKÅŗ²ŃåÕ ьŒć¾;WĮō1©Ķ$w£³¤‘Ö°š4>ńV‡‘ā 6ņ,©9]Üq\ī§k¦Ą¦HYwŽį÷kžq7C|-k©4’^lķCģvAœz#^äžŗŽĶo%Ō)m‡īē¦kškShl`^YZÅ8•<Ä ēļ\®„ēĒt²E7/Ą$t„X¢ų°øžĶ¤™š2Üź+ė_€¾ ŗæį›é-bÕįS,O»į;=x?įZ©Éź}NXŖ+Įżź„ŪĢŁT^1Š$ŗņܽ¦Iu$E^sÜŌ×҉v€¤wļR I“”we•qi©éSŸķY[wWŚQĻ_Ćśū>üqÖ>5xQmõ;ėGW²ģ÷ļčWĄ÷Ē×”qŹ:ŁšóÄ÷śv·Øč:¬>’öņ9Īģ’>Ż+Ū48“hµT½Óm#²¼fĖŗ.>õÆ30”O„l!Y“²ńŽK½@+ŽwWC¢_%ōKå—*sŌUĘWŠē”z—n!ŽU2ŁćŠO%#C–CTfT6Wr#K©±O!»×āÆGŖ—˜š@ō­c&myŌ’ō{->mNĀi¢½>Sdƒž„šŪÄŽ½–ÄJ¶³y˜#nU“4{Ķā›Ē7PL¾cū½åµ¼— >ņx+Ž”“Eæj\±¢8ī;Ō’+Ć Aœ™‡ĆĪĪ]6©=ŗVŽĘŪi­_˚'ૌńķZÓ-[ā=B=ymg²ÖPJ°ž]ĆoŲ\YŽŚĶ ³;±łTs‘ƒV37WŠōkkŁo,ąKId9|w>µ¶ž'‰'րlĢדćlˆŃ²G)Źń޾ ųįį«ķÄj/ذ²(Īa#ƒžąŌ“tĆsČ4=oN½øT“i®'GĮŚx½[łīRŻ92óž•„xŃnćŽĻNŽūćņ›'’­].©6‹=¼ k 8Ė~•š²XĖsŃĒZ ęQµ¶¹F`šü«ŽüÖFÆ,ńø’Ž&Łü@µR3l®ī¾Šņ=O­zŸ}tČ"XŌ†į°9¬dµ1H­©ŚN¦MūĒOLśU1÷¤&ö'ŒŒw©6‰rūģ!Ė[6p½ÅS»Ōē{QL˜ągµ1ž{©2“lUóTfÓu;n#™“$p}+NsXµkZ ėK„ņäī„s[RŹ×jhćdĻ Š‰JäĪŻ I# Žƒ ­›}ZĀī(¼Å8!— *H0fÖlõ 8n\„r„G>•ĶkzDū øŠąI¹HņÉĖ“»y¦ģs³wZ»iŖJ䤋$r’oʒ`töšół‘ÅøÓ9ė]tĻt«$ļ—éL ÷—аNęä}+:9c]Å£HĘqJKAœ„üQ»“Š[(rxły5 ¶¢ņG%½ÄrĄĄc ?QX”ó3 [gge€:0o¼?Ч t“„„įŽĢG^ø«ŒJö‡Aż›w,čLš ĪEV–Ų—v‘Ų6z”¬¶-2%Ū«)äV<—†źSńޤÕÅÜĪEų“ØaŻuĒi’–g„^Xµ mķåó EÉeėTEŽPßs4pĆ!OĢ6żź©k$–7hnmĖD[:ŠÅ²ć+ėzÜ7y”R-ü+‡=+’Ėk(e8F<‘ĶIœI±ŗ…Hn7:cG ļZ/Ø}²é®# ™ŽNх#śVģb×BGŲŅ!uó[øō«–7 lģA Č"ŗ)¾‚)xŠxDé ;ƒĒozā?“£ÓRxŃĶ#åĻcZ\Ļ»ńÆö}¤·€’VOŽ5įPüSÕt[ė‹č#‰·±vŒ€ą”⃮1±Óé5_Ė%ĚoŁ®Aå Ē÷°8®ĒMūLĢFgēb3ŒsҹƓMFéVŁBAćvBĒE6~#]üB·ń’ZŚZX/-#]’+ēķ-ß¹9ö„ŃjOµ­ÜvņŽ^8R#-…uĒųÖĘ©ąū«{WԚ46Ę-Ģčw•’{+@”¬zƒ’±l|&»fžĒQŽ3ūįœĒē)ā[{™¤¾Õ Su ˜WĪÖ${f™ gŁś'ē¼Š¬_ķķöw…Uq&p:`žUćž Ä·ś…µō÷v^a'‚Ēæ?JϘ“XšTžŌµk˜uč.ŻļĪIķÖØųRO„_“A”’ćG*ŖŹĄ±PćåļõŖ¹j'Ž–ž!šæ‹žjzZjPČ'@ådmÆ»ū¼{WŹV>M?ÅZ|¶pIöCĄį”`špyĻ^h¾¶2“w±Č~ÕzŠÜųLŌ¬¼-Øiœiļ'r 1śē|9ńjĻX²ŃtķFŃ­„…‚O}1ėž5q•Œ#mϳ"ńφWĄ—éÖņĮ¬"©fa½e<šé^ošŪć¶¹=̚V»m„Ŗ³¤ § ™ĘަL#G{—†4߆0ųŽšjĶg-ÅŠ-E×`'$÷ąšóŸ Yx"x•l£ŅßĖŽxˆSę!?wžżė M#HłwĒ ąĶ Ä ö= +Q,͇ĪķĒ9Jś_Į¾“ĘŚL:֍my¦M(a›ŠŽćŠnö¹²Šā~,ü,ńOŒü»½?3j–i‘¹wŒq·łWź_³'Äė-&}Jķ­V9™D2#nUČēpģ}Ŗć u‹ZēģŁćæ hš7ŒtÉķfšóĘ]®YAø>Õē:eę­Ŗj¶ž q,’>ĘĻ?0éV/m} ’xGVšV½o£xŽŁ-gVKg ̧§ćY÷Ö-a>É øœ‚c ;•pZ”¤XŅÕ3!ūC§ņoēµ~¢|ńēˆ>ų?Iņ`‘tµŲöü²HĒāsZIhg)t'ųńj5ÆŁź¶‹S$åšćœć?€ĒšżÖŖś“×lƒ s*K @v=/ιŅ!JĒuąo„š„ź·­4‘H«ę[¹ūŽ šÓ“Åk5³xÅPj1ÜĄŪVk¤ĄcĻÜ=1LŚēuį?ėš'†50/ķš5”½¼®¹dNĄžæäWŠ>øŌüqįŁnµRkmę-ć$ ® Lš7SÓōķ XšžœÖ¶rK5“ŠcćŠöę«~ĻZöæš“ćėh~#Ōž;[ÓęZ“§ >p‡ƒńÆĮļŠw—^1¾æÖ/#šźXU™żįĮē TŠ©­‡cCölż”|MšßĘp\ :Yō%ŚąMĻ–¤}ąJż@±żøtM×<5ŌWŚv”ß.D$¶į€wkь“³)ñ忳ßˆ<9ć_ėqŻ›ō’–źÅšē < {Wwńāõ®‘©ŻŪ]jpgĢEgŪ¼Ēó„.†n=ƒ~&\§ˆ5fG‚A§³)E€=s^Ėąf6ga„źVÓĆåo1£ī)ž ŅHÉÓ9ļųgÄĻq ÷–öķŁøpOØ5cöpŌfć<āø½Kį-ķģ$‹V—QÓµQ‘Ą#s‡ N܌ńH“­”šę‘į’h>+Ń4­V9Śą©ŗ•ICשõÆŠ;ƒšž©ą÷×eA=ŽÅbå€'†8č9¦ŻĀZly5ŽŸkį-bĖC²7Šj·%£ŠqüGę¾Ė³ŅÆuχz…µį#ż®ŪŹ3ļ/ūCŽ“š"żYóL’!ż‰æjæ†?“‡qż–/¢Ó|EnwåÓd`%$„ 0=Š÷éGS¶’č§ŸĆßxGā/‚|5ć ß[jžÖ,bæ²øĆĀŹźäaŲ‚ö"Ŗź¶Ļ(3D14g#ÜWX›{3ĢrŒ‚į>ņ‘Ų“Čö5üĪźśuĶ„ś†—söZ…¼†)b“ļ.?śÕŁI™T9Ÿ² ¼g“š£<^t@,cŗÓ±Ź÷5tY„·¹VuGCƒś×Ń>ń—gs" ę@tzšLŅźwŽńźė6¶ŗ}Äp=Äd²€€†_ö³Ö¼÷āęÕķõŅ- sšė…לäÄ ӕnvS‰ż~Į?ą¦:_ķš²Ūö@ųŃ®ZY|pš…°·Ņ.®„ŚśĶšš¤Éd)Ęxśšž‹l5‰ķä›KŌ#x.ķĆv® L-±Ų AŖļøF’2JJń’kŚw‚ęÓ5’Ü&—¢yŹåĪ3Ļå^k‡PögȚßķ³ū+Ü~ŌP|#šßďO«xŠĖģwŠĆ"·—v2b`G8Qƒ×ŌtƦ>ųŽk÷š‹ä·ˆ>ø6ØČ6ł¶M÷$_b1žqWaŗgÕfń„øŽ&Œ‹÷Čć5¶Š`€²ÅG»Ó2jĒņĶ’濆ķuĢ~ŃŅ„všĄHµ2‰”µÕ|’°åŖķ-Ż×ŽæŽŁ"–ĢŽŚĶ#„ģ22ĶĻī›=9ķÅ7 ±«į_.ī6’įćQ ōł«¼ń5ŠÜ¦·„æüKnTø‡9ŚAĒ>†ø«ÓŅēE5b߁µ Zwmł”’WĀģ<WѾ²¾æ½ė²,ś’ä³JI!‡jń+A©Yž7ŠÜńn” ź‹v›ĘHeīŻkį»zKMAę‚īuxŲĘń>N:Ū E6Ńæ;=+KńĢŽLīœrO_j‚ž)§¼Šā8€‰fć½hŃKc%&õf¬šĢŚ|ꌯßJęÄY2a˜ĖõQ“É«Œ;Ź]ĻFŅ5Æ Djwą¹#€§­cėŚŸ‚o'š/WµŗT^¤ąVЦ÷9§Tęķō¤šęēD¶,jwžī?•~Ÿų~ŽÖ×H²H¦Gå©ŹžŹ+xÄēCY£‘–5Wh”żßQZé*Z¬j\ ÷®Šhŝf”Ź²…P?ńź~±=„(Z8^I;ąt«’&I-ÄŖ»‡nyX˜ī£ufP{v4&”į]Nīu’Ė;[Œ)9'ŚÆiZ%坫Åz²$ѝ»˜ņŌśĀ=MŌwv„ ł“/ ¦¼ßRv{¦…SŒŌ‹,E ’Zȑ§󎦚Ć4Z‚¼čɀAćÆjõ{ĶZĖPÓŪMxķāĀ’w“ų×"tųķŠŖ)/Ž0jlŠąDL`°ąēœÓ[Xš4uXɋžQÅ4ĄÅÓfŽ{“GģīߎąVÆu²@ŃÉiCcvzS&ćɼ¶Ę#ū@ė]F‘ą9x##ŲPŃ”—«]¾›pūdT ½ūՍ4«s#·Šü©Čõ Ā‘¶$ĆŁŪž”šFoß” äć>¢¹CFKFWF$žqļšĄčFœÆ ”JÄS†¼õšćķr3H’+ Œń@‹mØ!„Ją.HēŠŽmi-§„Ę›Ō?­^¹Ō­µ[a\ߏ±,®Ę‡:’ιrv¶Nh4ŒūĪƇ|I¦A5öųu ©EĄ#ßėĶ~Ņś]ä±g²^)¦Zw:2āÖubB«9ĪOaL½Õ’Ą…³$œp*ćHĖ ķ3ÄWwb]Gś=źåĮwey—å>£Ø§Čć2)äo•lå)Ųć­EµŪ+ż„üĘķXøÜŽ2ź‹ y€Åņł©Ęk˜—TŽöā=:M©)$Ž9®J”īŽšUlk錒Ģ.JH„`g½eźžŃ%‰öĄ”Īy¼Š“ŌxÄÜvKZ>ŹW¦÷‹Łüŗ?5óŗŠąSįēŚć™“¹ö>IŚEULń?„/­®æ³,õ{7;&‚Pd< yµp}ķžńƒ*ƸӜ½GŃķ÷ķ÷ŲäĒLIœdŻ)Ł–ē·jŌX‘L‘ü«zp9gVćĢrZ2ÉnĢķÜRĻœ‡œn“9ĶtŽ55½õ(ČŪKFēĪjX¢ łż{Š-ģXū&6䟬§€rN™ R—`–ēŹl “}Ļ­UlJĄä…4óč–(ä8ÉÅ\ņ—c®’“° ę”ūæaP¬Ņ0ć¦+2Y)Ą)··­M’iČŖP;†„X³Ō·/ vĪ{ ØÄŰŗ¹åšX­f ±°ŠóķÖ“ŒlK•X™hŽzt¤[grHv/_aTL¤kč––»«Łč¾ÓīõĖł×1ÅīĻnqŅæ`æfļų&¤»é;ųł«Y+jÜ[hVć-)ź¾ßįI»JV?cü7į?ĀŚ>šŽcį "€ ·Œ n;‘Éé^ƒ¤n³±[<™åĒSĪ*ūīEĖf”^js3ɟ¹žuj”pھ…žr&Č\MA4ā$fĆzR“čbsņ\Kråeo"ß¶k6ļW¶³ĢīO^ÕM*gxßā‡ü=ky5ī„n÷j…„AņIōÆĒæŚƒöŌš„4_P×}IZܾš»GNõ궎ø±HŃ@„¤'õ®iJ꩏SŹüsń'DšFq©x®šŁEįX…$ž=+ó/ćWķĒ£quįæ[\ĆlWlӐԷō½(›ģ~kų—ÄŚ–µ¬]źz„ååōņIæ3JĢ ’²¤WF–VL>Škŗš]Ir4#·i7 p3š"‚pēy<śV®}ˆę¹4±J„"ĆymŠWAį’ M©]*ŹĻŽk O±<Œś;þ °³X’t'”ćÆJöķN¶“…EÓ„båbZ7äk[HĐąóķ]6ƒożµ ’6!AĮ`Ó&R±ŁC¤ĮhČX؟JÕ]:Hē’«ńÅq–ŗžGć› d¹ŠóķŁ^BŁR‡ łģG~•įšõÖ±~ĆĶu{…nN9"³Ÿc¢œ¾©«kéf–WĻjŁq>µów‹¼ż”<“.4ĪqY5ÜéŠGĄæ>Y܉±ŌcĆ!€ŲēśWÉZm”–i!æt'qᇵsĖcC®Ńū"ōµŖÄm‰;Œü+Š-5Y笒E&yYćĆRFŠ6DŽé%ŗ+ÅŠäņ=뇼°’ÉmŲf؜§ÉĪ>µ‡3(׉+xU!(錵ōMRźÖåo4ŌūśeUä0zc[F]Lę¾¼9ā=/ÄZFŸ,N!ŗņL īĄäƒļ[0Ś£6lĒ’wč9ęŗ–[[U>d„8#µBū.Y I‘ß•¦‰Cį\隯öde;³G֋b­¢½†āŹā*8Śčㆯ„~#ü3Õ¼3­I.™°é3;HRG'hÉū‡ė\ŅG\C Ā Y­e`ÉĢgkĘż[ÜVv§ce5©fB³!łH50A7ŠóMsJ»øA,qˆqŌÖ7uCĀ/°Õ“Ėé¬-'‘a¼ (xĪ{WldsMŸ®^ Oķ;kėkµø_”† ŸĪ¾ŖŃ¬ šŅ9 yl Ųęµg4™ō7‚Į¶Ó73I&q‚殏ÓKŁpז{›†ō5¤§<ŸCj«xfŻ"³ōĘqVnåµXٶŖŒ~Óԃ˯¾+hžŗ¹·½¶[‹e#vsƒī®qüs§jw).•2:–Ø”q‹=7Nµ›Z±`ĪŠ©ć8Ą>õā~(šeö­Ć:2¬›žõHõ śRˆ$Šc£vśWM½¾g²Ż· äżźi¢ ļ lē*ž3PµĖ_Į$&M®GēA™VŅÓWhĪ§„_¼†A–ePz­\Xuā}=õ žMÄhįpε|'įŁ“»xī­fLóø­Fh^j4Z…»3c÷}ź„¢Ås’S’£ŒŌ¹ŖŚ“łEĢĪ*ļDšńC‹tó‚Øto ^\ź14¶ģ‘'VaN*ŚüĻ”t]źŅŚ)D‘bØjāewҵā*͊fn&EĒ‚ōÆģ÷h–F¼^žÆ$›L}>ńó#©ąN#V6įń*϶ĖČß*`޵<Ją=Å·•#uG³&h᯵c§Ü,ń³uĒ5ŌŁ.o`×płq±=€õ«åD_é–zZjš=ĀĶ SErgRŗ0›B‘‚‡#ךREĘFUßö‘AņoPAąqR‘©]ŪłVļņ°ĆØžŹå)£>}ąā÷l±Ī*[=,+•Xd 8$Ž“Š:i“īm’eód ńŠÕud‚1¼ļĒäh"R(\ā¦P„׆ÉÉ!bī§Mr¦›$(|¤ƒž?*Q……&Cgg=Ŗ­Ņ\4±P~ķu·«&Ԋ6G$Ų<Š»²‹ė2ZŻ"4‘yŠHĆwvIī ĮXš0zSLEłu•¶šĖ sŽ•ĀMeuu9`ąĒī95“]ŃpzžQń'L¹’Źmī¶‚pa',}ń^iimqŚ1»Žr›™dÉp=Ķ)³²,õ’i6;.!22‘Ė÷°{ś/JŽl<ӁŸzę›hŽé2Ån³Cn 1äā¼ÖīŚånC«±UϱśQŠĄø·< ,eZU@‘V Ōµ[k²÷6ć »^ʶŒ­”Ÿ!eäK­Ķ$ŖŽF0: ē•/4ėÜH‘=¹äąņ}*½­"ģ5“C©.„£†kerŁv'`õē5ė^¤ĀćuĆI;1%Ļēµ{²hęęG“xæĆ3ųPx§!¢Żŗ2„²äóšåŽźóT€Ēö)ČŁä{ ”Āē­ü:°°‡Q³¼žIQU²¬ŁO„}‰ć˜4 ’ Zjv°¤Ä °Š>C(^[Ū‘J^@ŁņŽ•ćHįš”š‰“Xo|ÉZ9Ė‘¹ Ć­|»āŸ…óŽjÓG”Ū;Z2y„¢>yĮ„³4ƒ=į&›¬ģ'ń“żŒH bĒZōŸˆš’\.”į›ƒypƵ¾BQW9&„ČŚĒiąĻXų%$_h×ÖÖę*³CƓüC·c_7|nńׁ¾!ĢŠhz4oØ@»£š(³.1óqɧ’Ńó>“v‰-ʛēCå(f‡å¦}+°šß‰—įĒ‹lnõ#Z ”2Dc$”#ÓėVf韭_æi/Gš­Ę‘"Ü]»˜ČfĄäq‘Ü{WϚֶ.ō |ŲarŁøcąHūžś&™—³>G×/u«‰4ėŻ~+ŪY¼ń±o½Ļzļ5ÉtĶ;H7^E*ts»#?„#N^‡’Ć$3ß—rT6õōõéZf» Ģkéņ؉øį†{ŠĢŖ#Ū4/iz‡†®U¢Iā‘ŠĒ*šGų×ć„V³ŪM§Ėwk ²ŗ˜ĪŽWøćŸ“3G‘ Õü2­ą=@]XŻ«°±ŁĘx*OŌVMÕž©‹K«Ė›‡¶“Ė“;’ļž Y¬g©Ś·ˆ-|:,5&“øŗv+ņF>aČĶ}y®źžńž‰¦x‰ōE“W·3,ˆ pøĒŌt¦häqš=ŹŪł÷ŗi–Ū<²•+œ{ō?ėOqŚŹ¬“źqĮb#i4KītŚgˆ4Ž:>¶¾(†(µ;9c‰ćpŖģ3ŒƒéҾKńf£xsÄś¾‘ehv$˜W8=’„޵›Rę²ŲĶG”7ü$ŗe‚$NeÉŚQN¦¹©5G»‚käVµ»I6®~y÷­M£ojÓ¾Ÿm3‰¦’ÖF6“īyż*¶ “ĆØĒØŲ\ÜŪæĢŅ8’?‹Ö—*)ĘĘ]Ž£÷¶GT¶ūNmCÉcģ+ō“į3-æ…§ca/!GźÜmĒÆJŽ] ¤“>rueń†„¤)6”nFÖ`NčsÉČ’=+ß5/½Œ.‘Ÿy ÆĒ z““3•#ÅnüE®ŽxCÄ^‚)„‚Bf‰n>÷±ņ'…”Õü3ā((x'į֕u¦é[¾’5S`1²õēłžtœEŹĻ_š·Ä«Oé:\ĖgĄ©¹ˆ'ē'½xķ ńcK]W@½h#‡[Œ­µ»Ą0cĄįŲ“ģ9®yŠ»ŗbŃĻÜų×āĒüŖiśĶĶʱ ·!ÕC"ūóĻo„|cż„>ŸÆ Ū<ʘ’ #žœ)Y›'c»³šĶ­ōkŖčńYYɹYį‘HĪĻõ>ašPŃ,īu?iK®:ł*Ź::ż+tTŽKÅŗF»„ŁÉØxST’ĪhžeŠĮ•H Æå\ö^µ¬ųu/uhāyp|øåo18aėLR•Ž_ÕgÕ’³c¹‰m.!Ź`£ćŠāg¹ń†ļcŌōkÖKDmņF©ĖƒŌgõ Ķ£ź=?āžœ<9…ÆFæb¹P ŪĒ“ pq“÷kŪžźV°_Ck¦Ū£ŪŹ@–C÷]M4…cźļŠ÷?¼?į ¾ųĪžĶ,uČCA<@(ųĆ«jš|O–-ɧ‹O™%1Bw<Šx;?:żų]ā-\“CMFFfņŃfY_ēĘ9ŠKWÜöųDń7Ś4;}:&ĖC#Ņ“d(–ŪÉM™!G¦kģ3ąw…¼cį+ė4'MyŠĶь<’ćĒŅ™M.‡Ė~ųUćß\GāŸ‹­źķ¬¤…DįĻQīkōįu¶“į‹];IŒĖØŪĮT·ół;`õć4ÜÆ£1Ŗķ±ķ~GӟRŌīmĶķ…Īä’)—q_PśWåʇv>ńö·®iÓiÖ7—2\G!TŠ×§®¦Iō<ZŠŽå˜8ü c‘Šó)Ö8.@äzõ®ŠjČÖ>åż˜¾!,žg„..®„Xš"ŒĒ=±ś×č>ŸŖ4µµg‘B’@cĻćU5s~Qņ\Gq§Oiv¦krl®F+óö…šĀx/Å*Š[{{°nØøŽI$ūw‡)¢}š6UĮeūŲ09÷—ĮķKž‡Ā]GG×. zī•#b#sʘź*’Šß”õ‡üöœøż”k[Oė·ŠĒš«ĘŅ‹£#ķŽŹõGČŲĪą“ė_ŲÖŖÆi~ŽC‰ķŲ a †AēÖ¦¢ŅēB‘ī’µńßķąŪ}--<]£čl]ī ]Ļ=¶GoāĄĪ>ƒŅ¼łˆųŪĒ~šgÄ?PŠB[G k–ĘkYfį-®Ā|¬š‚Ü}=+ł$ż¹’gĶ_įoÄŁõ‹ųKÓÖG·¾ ŸņÓų[>œ[S‘2Ļ‚Æ-3mSé\ģ°øķPŹG~ÕŪs’hÆxŲ€BF č¼5xĒSkwŲFJēļéLØlz}ŠŽxgYŅ5½ā+ØzĻČzōŪŽ¾‚Ńõķ*žTi­®~ņ9+ĒŻ?kŠé¦Ļ!ń ųėį|7ń»į¹y x×K¼KĖK›\¬‘²ķluSŽEwæšKæų)o€æą”_t…Öµm'Ā’“‡­ÖŪÄ4²ĶÉ\:0y(ŻAžH=‰Ī¬y£nĒu7”õ×ĘļŪ[ö~ż™t}r’ā_‹ōč¼AgœŚ[Ģ¢Iććęˆ$Ęzjž9’ą _šXæˆæ“÷‹üO |½×¼šŁ‡ŁG˜ĮYż]—#½yń”s¢-ˆśŽ<[ą?iō­BóTń}ōwŸišf2H‡\Wś,žÅæüūFüųMūQx]ō¹5ōÓ¢Óf?ŗŻĻf¤©;YōĻÕ»[Ų"J4R ’2½#µ-Ūŗ$RŪŹI‰‚Čq\ӉĶ-Īā·Ć |hųać†~$Š9ōMjĶķņW>DøŹHæķ+…aōÆó”’‚Š~Ķŗ·ģļńė_Ńu›)tˆc”Ž|µiłŚČ£Ŗŗķ`G4D“óÆRģĶ Tēžø®»HÖļŻmĆo·aĄ#§5¢­bć3cHÖF’A”¶ć…īĻQ_Gü?ńUĪ©«²\Č@‰#,ŁõÆĒ”NgµÜAęū9®ĄĄõ±Ēq_śīœllõ„čMxĘ+uO+ŽqĪ+¢1čŽY¾‡ ų.ßUøń.‰bˆ“)˜3nēh«ōśĀŅ{ gQÄJJć„i(ō9e¹Õ_k2hvš-Ŗ¦£–3ÕOoēY~uƲKŪĀxŌc­+hC•VÓtõ–Ń$Ć$›A SŸB’ų¤žpŠ`vģĻ õ žr•īŸ&Š÷“¬be<ķ Š„mØDģĘĮƒķց©\õż#U²:z‰! >6ƒžžõĖųƒQXī­mćĖ3rN:ŠZv0®o…”²ę ¹Ē&¹‹Ö°¾‘¦‚B“c,6õ5<ŗÜŁ;šZL.Ÿŗw qйx!µI .d=³ƒT3& Nt ·JDł=±Ś“āÕö–óÉŲäHė5Ųżā‚ż+{M6Ff·b’9ČĮ8Ķ29ĶKNKi˜Ä­³q ƒŅ±uŠ.d?Ć÷ žUĢxfčHā½cūsģŽQ³ÄX\^3ĒjeLj4ķ^ÖßMÕ9Z2Y¾}k$Īm‹®ž‹“åT‘Ņ™\Ģó=Vžęźķa½·,„ö–!{VŽŸ?†ī“Łn'…lęĘÜI="Nü¶™< ©ßĆqSGek2(‰•›øœĖŒ¬B¶ÉŽÜ2ø;H&®ė:ObŅG0ITt²6S±Ćrl¼™YĖärińh˜ä yĘ9 Æh%­“×aa‘A>ÕY¬f$eXqĻzķ @ɧ\.рyąō5ŽÉØ}™dQę!u Šķ­ķ.ÆģähvŽ@ļķUl4)ēDcmDZé@"ī„§&‘leXü§črzjói.¼łX—`Iɵi¦śf—ÕĄF‚b >oZÜÖē)o,6\ ćŸ9“em‹±I•.ī€Ąćki“ȝ™Ō:t#Ö²7Œ»ŻžåĪĻģG9ā©Ü[éą,÷ ©:}ÖW9ÓN­¶+Žż»P…FžäLŹŹ3ŠŌƒAÖ.t š‹āł@č1ŗ²•#hU³O±sưI§ $ø“hŌž=®[\ՒóQņĘŠźqĒ„a:±‚Ķg ó'Ø×cažŚ9"fĪJX—^Ņ®J°·1d“¹xÅrĻ ™ū×xĶŽĖmJüŠģöłvž“9Ż_Ā7–ńĶ6ŽÉ4æĀ’qøWĻž&о%%ŌRĮ¦²»X°+ėŠV_Łź÷Gō|qĀU¦µ³9ū¹¼tĻ “@ŌgqøķUé’k¾”k‹3æ†oąŖ–X"޽Ŗ~¢śįXöOśż]5ü³#ÉĒ\śVDŒšä AąÖń¤~i_3œ›m›VqĻ* £6FsV¬_pn‡=ėHӶDZM»³nÅā‘WéVÆ46’3*HėéZF‘Œė·©zdvА’œw5XZ£@Ąõ­=™“osbb‘wGŒz”Ø[­Ŗ*“Œ1ÅC‹.œy›±ŠY]<–š²°ćŒU@¬¤õ§ČĢꬌG5a) 0?QZš>k·5qŒŌ{—2;€»»g³ī#o|ŽõF”āVł[‚®zƒxŹƒÉ<ŠS}źŠŽA9Ŗf`½9Ī=č9åRÅP¤DĪģ0N6ę£K“юĩsŹW,C³‘¼lšEIx²Yą6O½R•ŒYn~W`Ž@Ŗ±#ߕū)f`zc­\bdŁcūEšDŪ!<ńY‰§H²ŗ„ ~µ©”„Š– v‘å•ó{T3oNælU(™–t÷ņž@‘ĄÜQycģzū«örż‹¾)üsŌ-5?i×>|’µōё5ŌdņPJM)·’’cŸ‚ßō“OųljśŪ°2ź·,~€ōÕõL6:Mœqó/mU^Ռž¦-—ģ“}RżƒNĶmg‘ņ÷"»ūK{DĀ›{ÜÓP9„+YGJĪ̱`UlŒ[ø‰"H FÜ+2’V“±GbźņŽ6ƒüėZtŁā¾7ńō:]ŗŻŹŁ‹?v3ČšĻĘŚūLų¦ŽŽ ]t(Ā·śD¬8s×­4R#łČż§ąØ^"ńuŽÆ£|0»ŠmM%ażØ•ƒ”ļĶ~CxŸÅž'ńꬎ&ń®«y«ź²2 ¤Ž7œŽŲöÆK DźjĒ4fdWģŪ»8Ŗ…Š’OĖøöļ^¤UŽ õ:xŠķr `jeµ%üŠNޘ¬¤īyu&hCl˜Čæ§µYŠŃ °į‰ėŽjL¹Ń[hØĻ))ņÅøZōĻųÄ^9Ō"šēƍ÷Ę^!rŖ-ķ#i³t,ƀ9¤ŁŃŸŠWģU’0¼ÕÓJų‹ūVj— k#¤ßŲQ‚›€ä)žæČ×ōæšĖįo~xnĖĀß ü+¦x?@…B,pDČĒĢz×IŻ’–±£UĖzžI« ¤õŹŁ“•É6JZĪlĻ›[¾‘Ö³®¦xšØޜ÷¬%.…¤d][Y_Æzįõ›ˆ¬ć/‰ęƒŹ×,„Šź§̵Æ„½ę”wØ[YĆ –o2Pæ† ~zübż¶ģ|?ę•į+4Ō5UVS&ļŗĆ<ƒNīuĮ˜ž;ųÆćŸ‰QĶ'ŒuūĖő÷ˆČUąē·Zņø‰’vUž=ėŗ;3Aģ“åÆĶüėVÖÕIFī’ž+SžKSEYVBż:WK£é¦öą#¬[ØÅc)•aŃü%„Øģi¼wÅwśoƒą–ę! (=1Ö±›čK™ė'ĀšiŃFė2˜ŲsĻŻ5\Ęw“±ADbfŁŅi°ŁŖ„¼D„tq]֗e Žć0dgŽę“0“¹J[żJ-DŔ–ŲądõÕ[k6Q I¤Ł/`i¤I‘®ŁéŗīDͳpĘAéļ^1āļ ’c»˜ČšßŖŹ‡8śŌ“m džžH<Ēž7‹+Ōµ³ÓÆ­c[tos·ęø?ķł¬5gm;+t+ź3éZÓ1“=*muQ±¼³ppyąƒIy§ŻĒA\ų“§¾™s=Õ¾Ÿu}müKeæ޼ĖĮZ=Ī»āˆc„ź:b†Ī$Œ lżEQÆ2>ܕļ<7 „äĶ ˆäŪČ"¹Ÿj—śÕŒö^ ÓO»)!B {A”ęč­’$_-ąņa^*}øIµą#ރžR4Ō%āf=zÕų᷈ Ł* 4-į²ø·;•šElŒÕ[»Ū‰1¦!!Hō cÄ: å¼;]$FeūÉĮ±Ŗz|ÖÖÉsŹé· »©¦ų“«Kĝ®¤t.SÜ×.Š2iŅFŠCĘsĮ5p}Ņ·¾Ō¤C,Ī’!Ā•'Ā³¼So¬k^Ōl4¶y#*c߁ ō­ €t źśU§ĆəøAœ ’:÷’ Ųiś•Ø“ņ<»°%ņ”·,ģt’‡÷opŅIØJab6Ę8Zö+? Ckd«&c|c„@Ģ(“®œDĖ#–ł”Šé¢šģRøž#߀ĒĄę/ō¹lu?šŁĶÓ­hZ[Ū±"l“' ŠAsv Ł„%]}+Ļ5=ėRÖVōźSFŸŻŗŽę€;>ĘTDI‹:õā¹ifå HŃdĪģr„k±‰gšņGˆŽ„Ņ#g8bJĶݲµĪƒØ„I—•`GĶVāg5©ęž"Óįµ¼†īŁĘwuā»ĖNŃ­ķ#¾³ģÅFOaPAÜj7„­“HÓH¼·f‘7ӅOlW‚_YÜZ°•P=¹b Øo˜DFļ”šsް5O]±·hVāņDåācĆڱ’ŌØ£øš4wŽ%³KĶJݬ®Ļ/ēhś×e?†šA<,æķqłTš7c*ņūģļk:”\„¢¼ņåüłŹĒÅ'Ži™b³ø‚rŪĀĪ9ėVī.§0l’¬:‘Ž¶ŽĄsÖ³’„/SwB=ėź_†Ķ jö2ŪĻql·*Ā6×Óµ3h³Ķ¾#Zi–×RG VžpbĄ2qߊšŪ²g+ø·lÆZÉÅܾf2Ņ·‘L+ƒœš+Ń »±m<ĘļåJOSK•ģg&r·ÖķE@Ī2;Ö5µœW7HÖ0xÉ8Å'~¦%ū„[0ź„\t¬4ž)$“ŹVLA¤’Ŗŗ“ķĻZ|ŚÅ±ćŹMŠ÷ @J²I–HŚQœTŃXåw4C*AéŅ€:{X픳`¬ĮéėXؕd‰”•'Ņ€9{ū5B””*Ķ»Įo?ĶŽ9¬¤õ‡ŪķŽe۳̭Éķ[Ž#DŒcĮē„i€§ vÓ;‰œ”ćŪ2э±ŒøóÅ)-āŽ“ĮŽ ag^Wå®ė^"ÓüSmššæŃå'tŽn >‡ozĶ.…$z½½Ģ±cŹ3ĻJ·-ėŽŗÄŹūŗe­ig%”bÖŃąód Ēø5Jś'•(_ķ'µFq9=6M`Jaš8Šc)ź}ėŠt½ķQ©‘væyč Ęv»¢Ū,‹ ļG!ŌāŖÆ‡cÓ¬EÄw\…8ūū±Ÿ|Ōū1¤gŗłł*„™OJĽ×VŲ6ĢS'ę4F6/ٜ>­«ŗ—x ŗ‘“ĻCé\¼=ń )•µÄĖę|Ė»…ėZÅ¢•3Õ4»ė{˜·.E°łsÉ®Åõ$APŖ~éiI«ąY³–ęCFĮĄžšĶkEwqz\æ—ī裄I…ź[Ę«4^o<+ʵ‰Ö¹¹’@,Įž#‚? „g+œmŸ|$²MbšÕš^ļ¢-–Ē®+„‡U—ĪŒZÜo»÷n3Té±r3;WŃį¾øŽ[·‘\8drśćØ«šŻ›h&XÖŸ ĻQī?*Ģ’Õ¶£=Ģc*K8%xōĘhŗIģ‘„wU…OnIŲØnfK©Ścę!;ø— q\\śFš·KtÖѹaĮ+ŲŌŹLźƒčvŚRŁEŪʰ¢» ńϫЬ-¢‚"•xÉōƒcžĘ£xDŁIj#÷Ē_~ż+žŌ“Ķ*īĶnŅx””ņń†Į_Ā“ŒyJĒ"Įopdw?+`cŽ=ė­žīÖźÉ@)"*ąnõō«g)pŃʬ±Ę¤÷ŪU„gÅĀ~ģt&³›čQüŌx'ā³j£A6ę9•Ģ™C÷ķ^÷krņŻŖŪ#$rPŒķę¾ŽIō9\ns/šÕÆü%–Vš¦¤ņŁ; Œ…$€qžżėĒ{ų‹šŁ²¬.Ń„łłN ĪN?ĻzŌų:s4vž"Óįˆ›fŠ XœP?Ī}©óź©©č~$Št‰ķo¼?ØŪ$ŃK HŽ1‚ŲƒõƟ4’[üŗÖ,oķ§¹æIoøóŽžęŹ«>ŠƒāĒĆOų]u§m}ĘŲ®T|±z2’Jł²_ hv^"hķc}j’åYP*±Ļ?…hµ3[Ä~³ŸQ†ź×LµKµĀŅ »Ęģ‘ŪÆ„>9č’¼IąĶ7ĀŚw…¬“Ä·47©V„mź„āu4>aøųuįO „ģ~$ŽUFc—G;‡JčžĒu¬éēKŌ%‚śūĢ q£Ó?•?h'TÓńփkŖŁ¶ƒu§Åo,dcO˜nć;æ šÉ¾i:tqéZ…äöÓeĶ™[⧜J©ŌŚ|»žĪš]YVē‡ć“Vü1š‡\»’5’Ńಈrz’GRsV§Ü½ŗŽ:“AųY×Ė·‘Uvń&=ėĶ<{ćŲųƒJ½2<–k y9%}æ BäGŠśÆ‚tŠöVśĢvK,Ä £ųŠ‘Ļėü«wOżŽāń€śæ…N£ż»±¹2vŽ„w…;Õ¶</x¢ękĶRšü֚œį^E+…O7”Åz’ƒ'Ō¬ģīō-OGŽĮ0›¤^T°ĻJÖ2¹7;ŻƶšŠJŒöę,„;Ū'’Õ\ˆžxėįĘŗ|OąĖė]oĆ.Z)­ŚBZ,‚>Qӊe(žįÉõ-ĒW7Q^MŌĢą‘š„ŌööÆ\‹HĘ×Óź"=š–ę޲ žē×åÄ}OÓō›{Ż/Yµ{°ŲxŻö“gÜzW)įQÕ,–Į{†ĪļqT˜އ£hvw×0źe`øYdeł²?†¹mr8WPiU ŚŽƒ°¹Šnēiį¦©§Ż^[iŃ_„ŹŒ“yļÖ¼ōj^9š—ŠbšśĆso¢Ź1Vł—æähRÖğBjzmį|cc=ÅÜ©‹ØüĄeė·Ņø?§‰ŅÖ}@ź\ihG‰†ķăČF(r[ŹOcO_ŌļŌ4;[&[‰A,®rF1Ó"”K[ÕĻĶĖĶ'TÄSI`ŗˆ•˜·īähŁŪq?x*ścĀžŌõ½Cā9.Ņ/īfóY{䚯l3鏃Å֎©¦\n¹¶F®×łŠžÆż°tOi>&Q»Šu;KU mfŽ6ŲCuĻbx„$“ŌgŃ’>+éZm;MÕfm^Žßģ÷0Įr?:©ń/Gšńų…ąĻÜč2Y®ŅąD Y $f¦JÄ³Łž6|“ĮrhŽ)š‡oćŠ5e+•28'ӟēōÆ  ¾#xoĀóßæ‡ē›PPÓG?åžI ĶČ«w‚.S±[­zÜé÷ˆø6ņ ^Wā©o4’>—£@ĒOrIl9}i)†ź’ Ƥ³øÕ#“yēˆeUÉĒs^©Hesok›ÕĄucŠśb¬pšW‡ōßčRŁk”-`–… qžõķžńNšūĀwo«łyZ/šEuĒłéUb%Ųä¬üykń÷CÕŚ;ē†āÅĀŪ£Œ‰FzC’ׯ’µµĢ¶gџ­ŸV¾±šNœ² ¹£!p„¢×'­ÆžĪ0YŽ_ßµµ“L$¢ÜäųVszš)£oāƛżįž£kŚŪź6˜–);åģTžę½ŸöEń†üišßPų}©]=ߌt=Žg˜6ćĻÜpk;•čw7æ üØx†ćPKeÓõö€£Īæ0“üߕ|]©YüLо£øY¬įø "Ŗķ ½¹öS·AÅ3#¾šö„=µŻœŪ\ÆĢwäÕō։ØĻ§ź^U±… (š?”Ž˜¤Éē°ĶrāÖę NĪą¾y×ēUPH=ˆō5„šĄŃéśCĶØĪ÷šŒe•]ĘJ)9?—åYów%˹Ų_ŪOd.­ćnēŽ‡šÆ‚æikMR*ŪPŽĘꟌŸŽÓqEĒSS¾„¤|)«Ź·øˆnæ0ĒĮ\ĆūĘ—ĖłŽ:l lxW\¹šĻ‰4mGO•ķ„r•ƒķĒūYüėõĆ᷈l|] ®¤—ĘI8R7䳜ŸÖ‚ĻP‹Ķ‰ŠJ2Ę1ś×‰üxš>=š“ę=Ój¶PęŃO÷¹<µœ–”{™·°‘ķWÜĒņN£žYøąŠ×Ŗ|,ń×ü ž$ŅuČŽā+_=b½‰yDx9Õ6gL%Š÷?޾Ó4ĖŪoųråŅ©öÓ*J+›‚:/ņÆģKž «ūMé’µ§ģą}nāH“ā'‡­×LÕ­»œłCא”¹õj},tÅ\ū‡EæŌō-VŪW°•į–)Cąō8ķ_x;ĘŃųÓL“¼²… øŚ Ā0ūæJĀIQźUńn¢x·Nń€¼k¦ŚźŽÖ­%Óļ G4R)R¬b?j’9ŸŪĒöBńģ›ūF|Jų¬Y”Ņįyu ޱ%u 6W%6眯Ż#±t¬\”gßŧÆ_Į\åžēåöÆřa"ø—%ŒžµsQŽ©ČV˃ϵz1Ųę’čiĶ1¹ īłaÓŅ«“ѼŒƒƒŠäu¦B‰ Ėį|œšÆ‡BƒĻ½¢›qpSh'Ž Ų ĢT w4ĄŠ†A¼u© ŗEdeĪŽŻŖ–ʰ—CѾühńŸģåń‹įĒĒ’[]M­ųsU†öE·£yķ·$gQ— ŒŒ×ś~žĪ¼ūTü ųyń«ĮZœś»§C2« ²Į6ߙxA÷³šŗ:"Łķ3ŁŹö2YM'ÜlsŠó?YGq§‰§fۘ„}ä<ZóŖ£D~jųŸįėųGÄŽ-šŗ!}ōWĆ·@ćhū̃ńĻćŅæ9’ą ?4 cńŽŸl/'1’gźč@o&e\$½;€9õ”#NCł@ń?…õ jzŸ‡u+iSP“‘•ŁæsĆb+Īī •œ*N=kŗœŽj‘2'‰ć}»v…85=„ÓŁ\C4j ųÖ¦IXõ•ń]Ž—?Ł-⹜°ŚĄ’ØaŌ­t¾×Lļgwr¢Īąž)9ē 4FV>°±×4[m6ŚęēM±¾…×ꎠ“gčN+ä]/ā?Ž~|d?~ų—Qš‰­¤|}†ŁćnŖŽŖ}„R–·fѬŒ’“ŸĘĻŚ3ÅGÅæüiwā;ˆ€ŽŽ †Ē#o¹ę¼j ʀR£,[åć5JHŃWģV¹y'I!IŽ7pFGUÆŽ?ų Ļķ…gšWö½żœ|qzWįæaVŠNłHī’‡Æ9 R=*$c#ūųyؽ¤ķšūUԐjšXŲ¹?5å™åXųėėÖ½Öēȁ ń£²{×T ˜vvó ¼ÓĢŽ§p–ŁóŹæ æąø±æĘŸ…ŗwĘ­+L¶—U³4l491Ę[0Ż(Ić µŹIü)x‹Ć׌6±©ųU¶’ŪY“āš6$– qø{žåæū4¬«n1“ž9éü«9ÜØ­N’W}.ĒÄ1ŲÜ,1C"į[ €ųąf½‹Ąr=ʤcŒĘ«÷ŠvuÆ;ŹuÓŲö]WMŻØ.„’!1ˆŁCpĆÜWĢ’~ź3j7ž0е;āu§—‘øgkŠ•K3¦'ŽxoÄ7‚×% ¹C·ŽrAÅwšn½ؓA{t­µX{×±MčLŁŃir=œ›bOŻ~•­&„§ŻE†&By$WZv0”Žz7K·6ļȅøļŸ­Oq¢¾›½³‚V99XÓ8®˜ČČėg+x—/Śķ8ęxņ‘čER‰ŚĮā5ū¶’ĄīܽżŖ„Śäw'€²\.C.x ĢĪ–åī% )c“×Ö”ŗ‹ģn$„d“Ap±ŃxcSŠkˆ-īUŠ’ž‚ŗĶrĀŌDnŒqÆĢ\ōQźh4µŒKsO]’Ēķ‰5³/˜ü·½szä×2Ś¢[Ģ@°īՁ&,Rä],‘`ž¾ÕŪ]ėbѶÕĮĄĪkU )ö1ōūų!ftŒ>ī0Õµ$vbŻåœyDóĻj|†ŃÜņ na%éˆķ•sĖŠQc‚TcæZ‰FʎHģ"Ō$³‰­āR¹ę¶t­qm ” [_Z‚yĶ?@/4į"ȍ‘¹NzŽõćÖV‘O~c•ĀŽ¼M‡ŖŚżƒLӐC$¾vySÓš¬MR·"NīĒaW§”ŻG7œuLĢŌ“‹kb+p\k“–Ńw,…H9Ē"“‚;cŸVåÖLźl4¤øµv`*¤š9Ķ`DĶoxė"0}j9QęŌĢ„%©Ö£mZ[t ”I8č+Š]v“4 NīsڳöG L]ŁÕé÷WH#P7ēŠŅ›CøiÕ¤‰žŌr²¬V¾µÅ;ĒPxĖŻĘ"gsÓ­h¢‘—.—5tihe%—ėRĶm;:ƒ’zg„1“m¾ĆµŠE4©©$ŠŹö#”ŹT€’?Z§f˜É!P¤ņh.4YŠż¦ŽŠ˜ÉFĆļX·Ņ ›€‚ƒJtuW,®,ą% ā¹ė»ł/ *+ ŗqԚÉø|¶į¶=YIēšf.ælŃŪeŽz„©BĀd•t$gƒŽƒ9yē°€ĶŪŚ³ŒĪWi-HĘRčkFļ$F2ļjBųH`ąāƒŽr-¾Š+qšŠ³°WW, cŠPbäČb“쓺dōŖš­ŚNŠ”Nį׌‚Lx-^äE~µŪxkLŸO&,”`y„W3rż#)½ø~„zÖ×ĆØ<m®‹Æ!{$ĀķČöMTfĢ9ßƆnu)õ/ ĮżŸ`äę&l¬BMYųSš/āĒĒ­cū į…Æļ2¬ŗŒ±ķµ‡ž~cßæ;1–ēķßģó’ģš7ĀKūM{ā ½Ÿ<\Ū%Ī7CĀGN=«õ.8“M3J¶Šī;[[8”`B¤j;:V2Ø@æiøŌ¢Ž-Ż ·n7•č+Hšä6KpĀźė»Y„s)HźBSMo@x­ĪVŹņNˆpI-ķTnµ Kucq*@k)¾†”ąygˆ|{m`ę5”Z@:¾q_>xĻ残bn‡‡õk 또“É3Ŗŗ‘Ō…'‘Pz4©‰µÆüėAųaØźzFØnx˜®>ÉjD ?\dp+łęųļūH|Yż µėSĒüé£ ĢöÖ1EŒŠ€qžMvP”­ŁŚ–‡‹’Ŗ 'ŻĄķU¦A >özW±NŽZµFEÄøžŽµmUW°\·<’ 9¾‡Vw&Ž `0Ü3Šø-›!b ĒłVG,•ĶŪ-/t@ģżįčs[Ö¶‘DšBc–śłßĖŠŚŻ É3ž…Š8ÄżvżŠ?ąi»Ż+ÅæßSųSš”[ʐ­ÅŚ“˜=½kś£żšaĻŁĆö\Ó ƒį€4ȵŸ,G>§$y’R;óļšå©PŅö>Čt‹p•—Ģ“«1óŒ®=«ŽR¹7' żj%+Ģø»’ŚA½uėQĆ«ZĪžZHw{ŠĀRb¾Ż1ˆĘTƒ€Ć”ØoīmgĶ›l«Ļ¹g#XS8Ėæ‚DNė]7ÓÜ×Éß’h’…æģŽ[ļZjŗ« yQ>V7ģŽO~•0§s²?>1~Ō>8ų‡­\„®„akįüÅnöĻLž?ł]d–ź`Ą“‡$ŒóŒõÆB•3W+µŒ€+°ĀēÖ®ŪiŪeĖe@üėG”‹fāF„F6‘Ó„_±Ón.% 22§ŠŹRøŽļJšKÜO–?,ČF ī^ų_O ¾C³“·x¬Śč«Aಓ#®ÓÓ½héÖ+²¬Mē©Śr?•'3~Xķ­ĄP n:ō«ŗgö:¼‹iq#ƒ’9Ŗ1”ŗž“ ŚoŲ™ĻMYHāŠåģ„!%qA™Ÿ:G Č é\żž‰6§ŗKg’2:0>•qp.Å£_EI·8§­§Łl·Ēo%ī8tĒO„'AXņ Ł›<,-āŻ÷ōÆ0ńt^pY˜E ^›G"³žĒE3ƼC§EŖé÷E€Y ĄxWĄß¼_01Ém"–Ć/C\U:š§cć„×µ_ ß\ŁMy9„±Ćņ²Ā‘ķ]ׇ~#č·1ÜŪ²Z—fŸøĒa^}H1eKŻzĖécÓī=æĀO‹-Kķs›'$N8ė\҉±Š¼ĀÖ2i8Į=ėŚ£¼w 6ŲĮ%”ōjŚT²·’;ė0ŖFTž>¢¾µų}ćhüq„[XŽĢÆyf¦laŠÆųWM9M± “–ń”VĖāĻ_­[ŗ»eÉ- $ Üå±Vøb=ņ+^ŽĢ9H„­ŽāŻ:Ŗ%L­g yųĒį„Ō’óÅ«h#‘¤ćĖ“ėüėā»ėq};Cm$²Į¼ƒ">JÖR67lķ5K8%Š „ŗŹ‘óœœ{Ööī?ÖØÜ;ūҌŒ§ˆŌü;­é¾(Šn–ĖU·mĖ6Ģąz~•ū šcć^æńoįΟ¬ZĶg%՚ˆnš1‡b:±œķ§3žP>šwŽ®µ{i,%*ĄÖŗ¦$‘ݹaŃū×\9jDč“zä_DŸ),p­žs^Ć ×ĶnĀģ³ÄGŹH­Ī[uī™mØJ>Ņ€xā•4+KvIc¶U˜te8§ÜĢńv­s%¤vóM+ĆŒēÕ±į{K;5Äw1yĒR0Ā‚$īJ±½”޲)hsŠć|j5ģMʂ‘ÜŽmā6$P$Œæų’ėVŅŁu"ļJŌŠ28Ęćź=«·†FŒ†`z-”ŚuÓĆ :Ś\t,ǃõØ.Ł\ĘѳŽ7/zbHĢÕµļ2/ōÓJ‹Ž­ŠĒ‹S†āŽF€ˆ˜}õ" ŠņŽeŲą”'#„ejŚT¬‡Ė%Ēby e 6ŹśÓČĀU_lÖv·āXl’UņÄ2ąd­;›ž]} –„!Ō $źÅz·Ö°ō֎ŪQY!cĒūÕ`}qįŪYŃą¾‰X2Œ’:V…āyceēŽœXc©Ś§¦ ³:•(8U[]oX°Õ#hmÖM1”†bŻŅ™œ¤mÜ_™0;OcĪ*e$ä‰ūŲ ‹ŽÓēŽ žj ƒ‚Ec=‹ÉrÓG#Ŗ†Ļč+šQĪéD-œśu±Š]*µÄOėŠh§1o£‚ĘŻć²óÕņŸģą¹Öį¼³Ūmv„*²ōažA­Ś!³£³š|š–”·óŹ«Œ§¬vµ‚;Oy„Č£'‚+äRŠf,÷dKä1ŒįvśUųā*ĘŅ4Ł<ī4‰¶¶gM¤i:uŤ†hšĢp3Ņ _ ßi³½ĢP»\“ĻU•;³M.:]VēL`öŠyFX(żk›ŗÕµ»ęiŚ½ø9(&šDI®‡5«ź¦¬jGćļ ų‡M¹pł¶źÄļ•ōÆ<žD’K¦bS8ć„ĪsńźĖ8F’5cÓ'ėŁļ„™RŠ$„pŻ½Ø ‘Č­+FŃȹęµ\y!¶1˜¤ĢƒœZĪl ¢f p×<ÕūĖ!Kun©$l{v¬Ą±nš}äDó}žm‡ę°bµ02«;I€Fā:Š”SMn¹€‡ļ‚:š‰žxå’dņ%')ą pūLQ©˜³ Éw­=×(A ķģ(ĖG!ņd@$\Œšęu ,`1ē4ł@K6Kub3T·$ŖBƒĶ#f‚ŹŲI<-1Dø9āµuų,æ³®#‚r³ •<Š G„č’źv—»¤q4{ĪwŽq]ģńÉ9‘TƒŌć„ňt»õs*³ˆp}jĢvHękI8ē‘ščoŽŻ ÄJŒß‡åTü…‰·N“ ”K].ŲÉ$¦F‰?^kĖķ=ŹńūŒU+u.>gƒ|O¼ń‰bŗ]ōšS ī’1É€ö«Ÿīu?J†ĖQ–{é@ĘY2XśÕI锬NĀņčF…”‹w=…prO$“Kβ±2ɞ¾õ²¶°J‹Ä|ž„w„(ÜŌž3ŸW¼Šu±©é &  ¢0 ņ¼’:żų}ā«dņ¶U!½1 7J~÷ÆÖ¾…rčvqxĒĮś—‰t­CS±.m†"pŁLŽ70śvÆ:ż | ų‹Ę6—^ŌbÕō©-bf1«)ų?˜©’1؎ĆĀ~,ƒĆÓķtųēŌąuv}ŲÜ1ŠÖ‡Œ>#ŪėĶjb²ÕKyQ‚¤”ØözÜē”ƒž£6Ö„v×±…ÜAlģÉä{tÆ"’…Ć£xs[Wņåœ$øŲ§;¶õ{>„ƕϨ~x§Āß&ūTz°C<€²·÷Ič?ĻZł“ö“Š4ż7ÅŚ6±iqcŖX‹1rrœe‡ÆiØŁ›(ŁŲń? Ū’£Ä‰w8Ż6ģg’ŁĪߔƫ~ųeõ«‹³«i“Įn(OhžüS{0¾ę’…¼M…|qoįÆiÓjK–¾~ņ÷1ėŽõõŚüSų¬Ć§éģ$ū|»yćDĢ<ó»Ōc½böŠo]ƒ>=ÜėO©ŻųÄs¤“ƒ0l$?8=»U’~ńÄw\Ō-/ķQ0|.O­;w!ė’5oųF„v[¶Āč7“x,§ҼĒŁzŸ†­šgƒV›ĪÜr éĒjØĄÉŝׄ~4XéÓ ÖģtČg…JČwŒœkøĒ7Ž)µ:ŽŒ†ŚŚxžH’=»€ć‘ųU{3E|Óćkģė#·ŗr·ÆØÆ;ń½Ž±qįų¦–ŅIf1²€HäuśÓäϲ’e™|Dt1Ā\Ļ5¬*'µĘę—©ĻÓõÆÕļ…4i%m[ĀÓŁ^*.EEųēp9暉D‰Hųsā‹“ėגiŹ-ę󙐹τyO‹u+ļ ųjņ16Ÿ,{øf•r8>£„ Hšļ xŸW”=Ō÷ Y·;*įBś}+ź›ōæĮÖZŹ7»”9HĄlzŅRčl|āė{”wØŽĮZ»Kģū£øžuGń¼6±FѱISlQ‚OLÖ@rŚßĆłµūķCVžžŲl©Ļ r8y5Žü?Žź %uk«+›x‘¤Dćną3Œw¦’ų‡NŌļ<^š…•ģ§$ł±$c·«Ø[Ėol­42ļčs҉l\Ws逌<óŁźqJ‹in§Ģ8ą”ąłšōŠ~žēGk]'NµkėhŒāTMŅ:c9<ōę²”‹mlϐ.ģg{Ė8 ŗ– y¾Iw>Пš­vū®¼ “ŻĒ%Ͷ7 _śUĘW9¦ZŌ<{¢xĆO»æ»² ī>A¤Ą<}+ęMW^5 Ė[8±r‰ø~÷Ņŗ"/RĻƏŒ¾0ƒÅ+„Å¢ RņN-pw1=Ӑkėł|yąķg@›EÖō}BĻQø³t’ 1ävĮ÷ŖhŽē’xĀŚ-œ–vĪĖ <øŁ²_&¼—ƾ±²ńÕ,aø„…tfČ\ć$ūu¤>c£‰<šīėJÕcÓ Ōd•ˆaqōƳ~ųęŪTK+ß%Ģ7[ŚŁŪ XvČėŅŗˆūĆHż¢-¾ x&o^höIØÄ¢”įäesś×å÷Š­“_üXÓi¢Tŗ|ć_ģ'ĖŚyÖqŗ—‘y ÜłWéw‡’hĻ„|-kąßŁi–W« \HŲĮ}½FqDµV-‘Rų_ńæĘŚ\} 3¼q"©*œćÓū%šN_xfŪÅŚ§†ą½Ņ-å†i!+–^ųōéü©}›³G{Ÿ¤“·‚|qąØ4§Ó-ŪFœG·/ĒŽ•ó×Å_ YxOĆVHÉ01–‰Ų‚JŠūÖņb~SxÖāĘ×PŌ^ŽAhģŁŚÜtĻJó; JŅ{±us"OvÆņóČö„`’Šö’ x¼™d%«Ū$ddGC_-üJŠĻLń{jśm”1Į)ó(ĒŹHõĶnbe/ŒÆĆRMT½.c}̓ƒĒó®ßDųāo h6^%ŸÄ1\i÷¶ĪĻL]Ē~yĄėŒSÉxwÄśĆ+Oi¶p“­ĘÓ\”‰ėķœóKźšĘ­-ö³o ä˜Ųžšw##Šø»čD”sѾüp×¾ü@›P‹C7Š(&U”Œbqƒ_„>ń’ü-­.÷P»¶K ÅčqˆóĘÆ8¤Ģœ,Oylń$ślŠØĪą|Źü?:ņ懟¾!ų⿉µĶ7Ć×·šō}¢4“Šc®9¬e£¹¤7±¹ńė\Õ~E¤x‚”ÉpĘķdłJprA<“_ųCā/ˆüKń.Ń'‰ŚŽfłdlp”› ļUNGJ‰śUāOĮ¦¦²ą•³×„|GńŖ85]nņXEpÖtb„ŒŒōśVŃ1fguŪ[iĄ“PņfB«“žµō.ŸØ_]Ķ$‘¹¶lÉŪŽŽFsɞ­ąĻ‡zŽ©‰nåOģ¹žFł>V#Ÿ˜śą×¬ĻćN“Ōģl4ø-ƔO%ĶŽÄŅtğCĮ|_ńŖĪėLÓu»½]?Q·,—}ָÛӧōÆ ¹ųÕ§ź¾#›MMŗ$ä5Ģ^_˜ ^q»×ڣٚE#įoŠzTv^;֗Nlō[–-k8$zŚ¼n÷Nŗ‚B˜9-A¤QŸ$^T’C0ŚÄrIžUõgģĒńCžĶr jR@ö7Ī¢Nc .§Z Hż*KŸ5;ÕĒŽR0sPݳʈ€„Cc„&®&ĪĻæ oüā—ÖZ>Øe‘ OŻ‡ī ŽžÕąMĀBѕĖēē–ѵ5©÷‡Ā Įńsᆫš’YžnOJī§#š¢-ɄŒ4;‹ćøØ d's ŸZŌĢd‘łLSvyéLI#a†RLP¼Å,ʵ, ūŽ“=¹uA9Ļym"¹-æģ§‚=ōÆé‹ž ÓżµeųyńÄ’±OÄ’jh •õ_=Ö6Y\Œ™ V<Œą0·-+čvĀ=ķX]\_Z%ĘŲžņ1NŖGPp•sÄ;4É›yF{^md;4|Zų[į’i/§ź·ré:ŀk½*ņ>±H¹;Oū-Čǽ~}x›Ć-y„ŽéwEĻ…õµk+Łaø_øēÓ×¶k˜Ńjęöóżž¢³|aįĶʞ×<ā{%Ō4^Ö[ ؙAWŌ©ߞ=ÅpµfłŻ’ĮLædļžĪ_|qg&=ݾ—/Łē˜‚{Vł­īõł€{dü¾‰@h˜)›³SmW¾‘Ösē~š”Ē=«¹š6µØŲ_Ć-µüßfe*ÉĘĮĻ5Ķ^6ŽšlūĀ2]jѧŪJF§,žqŚŗ©,Ė|$§–E7±óR«fzW>4ųąĖM;XøÕt(ķ­äy \Z żå’ ó;f†čĒ$~l7gżbtŪōÆ[ Vń±]ĻNšŽ¤Ör}šła’y Ü}kRk}%äŗ¹‚ą*œš=kӃčqĻrMŠ’i[Ģū ßwk×WÓ|4Vęé#†7dtė]3”¬}!šĒį߇¬-ī‡Um„ĻzUJ:vņ:ż+gX“Āö’\"•'8źjMGč6ś”‘ßGóDOnŸJę~"čæŲ·¶×v“°œy\:Å­M!#’Ѥ“‚ä^ģ<‘“޽šA5¢.VxĒSüčåfѕ“8ū½FĖWÖ †c5¹FČ(qĶw·Ž*ÓtöŽŚąKqĀ‚£&ŽSNcĪ|]-µÜó$\ż•ŽT1ł‡åOš¦†5{tūtnA<ꕉęGS«Å“ķŖń?Nõå7Ļyró[6čżjFŌźZĶ?­&Õ5qjąĘłŪÉć5ō=ē‚<0lĄŌÆ­Č>2 Įž“Š„Tņm_Ćꯈ¶Ł8ĮĘZ­¢CöUf1˜ÜŽōŌ¬\*½ų"†ž9 [įŗ1ķ\޽¤ÅĆnæSZIhoķ¬K£Ē±·ghŚC Äæ‚Īķš;DļqµŸ+%ɖlm/l­g‹lˆO×sgt×Lå1¹‰>Ō¬C—Dw: r:”,ŲĄ uÆVÓmćxA¼mħ½#=LNŽ"īń€TuW)=¬7*ń²ĘzŠŠqīV‚ĀĪÓåŪ¶LcåØ%ĖFlĻ&½LēŹŽ\™ėŠÜŅcŲ3 āĮõ4ēH„PĄ²‘ßÖ”†ÜČ­?P}h6R°“XŲfÜYx=)Ź‘‰äć×*„Ī…HB«qõ%µ„ IHĘh!Ō6O¶HB*Ž SnWŹMØĆiōh3”Ģ™H`m¤UkՕR0€”üÓoo¼UćBÓAi Ū§”ŽŹƒź+łż£?mˆ?uėŻKĆ wį_Ģ’øXīäŽgŒ÷r¾¾ŸZé”K˜ķJĒʒJņ\»ė‰Æ/}#|ū±ėTd”Ģd““ž;W±J’HŹ„NˆŽ8ÕJīnJ˜Śš2AœōėZŹV<ś’, WR0Ā6?•Oå g±9e#b×MóF9Į®¦ßKŽ _µĢ@PpźßARä$śmžŹ°wķ!ūZkßgš'…ŸĀ¾ˆ§¬ź»O]€õ8ÉÆź£öF’‚LžĶ’³_öv»®hńüKųŽ#Vžöõ‘E ĮŹ©ąsšēœū~¬Åeo D‹P[Ę1H6¢„LŪ™q€:tÅrJWÉ`ˆØłŽ[¾*Št„U–į#Ą9ėŪµc&>£0u~tč}ė4­ö€æ»ō®iČč§ļÄ~Yo²©vō#ššß‰ü-ąkGÄZģVR¢—ņ7ķQž?Ī:éÄü„ų×ūsų³Å¢ų%†€Ģßé 6³vĪzšüūÕå¾Ö®ēŌuJēW¹”åüęÜ7zŒ×e:eÉŲŹ6xu*ø|t­jCŪĘ7!ŗćšė’1-%ÕĀ"]ŠŽ¹ź+^ŅĀyÕ`D%Ēąk  ”ąß†÷ó4·ģ<£‚A_I莓ÓķL1YĀÜc%:ÖBlč“ Ų\X.Ņp­“`õ .-ą)‚ƒ)HžIY= O™ΆŻPMÓŸā ›šM„C6亁|Åčļ^cā­īĢ–K2¢ä•˜ŗ›> ńEėIs§\Ē2ˆHęD#?C]'ˆ,®õkˆõ;4fž>ŅFA«Ņę,‚(åKq#3H™ĆdżÓé]f©$PµcRŻĒ«é4ĶfŅ$ø²•ł½ĒJ浘…›\ĶnČß)`r dŪ7ŽĒŹž*“:„ī¾l±)lŒWśŠēfÓŻ¬ä‹—u^õ”åФģymĆ+– Ø­ž×CųWƒų’Ćėx—…ģ‘Õ²C(ą Āq7GęÆÅĶ]T[‹8R{xÉiL‚?Ī+ę©­üżT^X[4vó>Ć÷y®yĆ©²‘Ų4p,–÷ퟬ‡z·åŌĖu­ĮdŠā©e>ēvÓŽ]Aɐ¼‚:œTń,b“Ģ…æ‡×9¢d]ןxÖw,tü’¤6+»šÅ޳”ßG{„ź)Č’źŲ’.y½kLN'臅5­ŞÓī¬ąk 7‘„†­%½ŌŠČL@žk¦,婚Y`˜Q“ÅMRŁ® æ!n ķD„c"ĢV² ŲNDÖł ž•5ŔhŪV#°ōõØs7„ŽcP‚Öh&³»Œ4\‚Č?Zųćāƒašö¢÷z}ŗ„“īä^繬fś0g•µ£I •ƒĘĖĒ«KT:£ļøf…ĄU q“Ö@XÕōū­:Z²C89£š/āŽ½škĒ˶ķ$šV¦į.mČā"zz`×U)øŸ¦æš³ĮśµŸ‰ü;eˆt›’„ƒ±ćo^üdŠś“Nń忈m–ņd’L`ä'ҽ*g4āz†5:;Øäy°+įO {W³I«ŲŹ"K¼’x ä£uSé]qŲāœz‘‡Ib õ­%Y§D7*ŽŌĪyhrś¾˜—Å#sÕ9ĒsT¢ÓŻŃķdh& 2TżģzŠfk‰bÉĶcj2ŗy–Sr*„S†9•¼ÉÓyģ{šŚµG¹™UŽÅČ=h}BŃ-šDV…ī?„sž|ђŃēwaŅ€’KŁ:.M6[/-›+å¹<ā€mjüĒØ“ØŻŽ·|¹”·f Šż*ćēsųžćIøg“ĄAŚG9?Jńæˆچ³¾āÕŚÕvēåf›ŗŲłŹļā/Š“ĶGOŃ”³[ėy˜£>pĮ¾˜éÖ½§LŸl1Épī®qž:Več}ąæÜé°Ēf&—Čč0xjö»)Sµy^7n śPg)Xć/ōų.™ü“æa8½rM¬ +®ĆÜu¦bŁnßČi{HøąŒVģÖa¢"фń”2¤š:ØÜ‹čĀ­#I ’=}Ø+Kn™\ü¹ä]ĖŻÅ©(¹^æJę.õhÆ`’ŽK5_ö‰9Åx^¹%Œ—2ZˆeFČćœÖąE³ØŁŁIe ĖyN0ɞ+JĒĮz~©„Ü_Žj†ŽųŽ•"±7K”ē³éK3Ŗ¬Ž‹Ą˜ ę“­4Ū†Ū ź™c?Ä*:™ŹŻTšĶ„‡`ŽHŽUćÜW[}wö}:KO² ÉVæ½Qƒj’¼ė>VkY0w+Ģõ-pxzŌ.nćŽĶz“Å&kOiśü8’IĢ ÷Ø$±Ōe’?³Ę~eÄ*d¬B!HÖ$weew¹„»ņd¶xĖ<‡ŚœU¹It9õb°ļ/†ĄfÆ@žĘŌ4[Wš+°›GLÕ“±ęZ׍õ—i¬'økŲwc;³Č®^YgyRTPčFXҁr£RŠmµ,#-S2FHe>Õ.•„]é«-ģ·1(Ū¹ĪXżhGAg„µĀČö’!ēØźk īŁķīCLĆpČ<ÖSDJV,Ūn ®~µØŅ3!d0ĄķP%PÅyJ°`ūdUūA=Ęe’ š NēYoįĖė”/pŹ3Ó©­(-/D؛€Į¦);|é½dŠ'žšæ Z5Žde·„¹ĮĻÖŃZĪĪ+Äŗ]ŸŪöR™Üpz“\äštW%cŲ'lw4Ɲ‘M„ZÄ”¦ū€qĻzɒ Ȍ>…}«!ā?Ż$ …ŒV„&VFywü½x¤Ę¢s–z}ͽĄY£3©'t®c>XMŪpzŅ”Ė[—ķ¦ŗµŽ«'šŒ>ļQKó­ĮvEAē5dó·ZŻ“,oļ^3šē¾Õ²’7+:ēf‹[¬ŃƒŗX_ƒZĢÕn•#ņœ•ŒqͧÜķ¹ž>Ī>Õ­o„Ēm"ĻĮ-žTP2„ärÜĢš ĒĖ\ž§e5¦X”i‡įÅc%©±Ļż¾h3ŗF+ÜmµēŪ‹7–!Pz‘÷ŖJ5 ¹BJ€H_ČWGcckhĀ:!36Ԝņsšé“ĻÅ8xŽŽY"oĻĘ1Ufæˆ]°·cnÜ3&{{žU¬#ŌŹhčā¹…­„,±™ÉÜõśV¶RK!ž4x‰ć>µ¼eŠQ•Ÿõļ†ńUŌņÉg,r¼~IxdŚAõŗļ ü*Ó¼%¢Å„Æ3ǐVUäÜ÷­ ē6ć‚ūOŅé&ŠA†CÕ„MöĶGČV¶¼{S»īÆz,f`K5˹kęi_©śT‘› “3Äx œ`Š ²Z²· ¶š~AqßÖ³“‹ŁVŹęcnłĄrsĒ©¢ĀRč_—ģŹńĻ"nõśW'<щ••ä‹~ x'ڳ’¶”ĢZūLūD ":ē<•„œ†5 G$ℽGrš“yć³ķVć¶CJ·3RZ×C`ŌÖżbŠŁĶ»ūĮÉ\•æ$7v$x\+Ī:RLædśÉׄ|#¢źšxT€ŲĖ,‘’;ŻX껯oJµ¹k+™ā1łˆäd9ę½µ&c' ŗ€³ŽŻ_OūOBōÅu?|w„Į*ŁźŖ›Ł„pł‹÷°y#ŽiĶ¹ā¶šŽ¦ŠÜč6Ņ[°_ŽłW>¢¼–ćL’į¦b’Ī‘“‚FHēŠ.sŌ‰„§Ż>“¢OdØ&·pĪr£­x žÓõķFI,G›ž”dV'-ÉéśÖœåAź}/¢|Õ½zļc|Óå¢Ś7vż+Ę>.Ēss©\ZŲ^ÜjZtźžZ"ķĒ®~+9-l5}į«-JĪÕōĖéü‹g;Ō¦Wƒ­vžÖ5ŪAt›żNņāĢp$ü9č@ć„R³aĢtći—śtwŻC?ÜŹå”zW„ų_į„—ƒ[Ä÷֖ӤŒVœA9Ē_J®TC™ƒī-5%”†hn‹÷€>•čž,Ņæ²ōČę–ÖŚ;|ołWĮńI¤O3>(ŌļuM;[KĖX¬žĢ¹ pK0ĻÖ®x¾īėZŠ »8|Ž č­ĆdzzwÅL”ŲÕK±ī’<]įūoéZ7ˆn Ó%²<…cŠū*ūĄŅßĖ©Ÿ jģ"Śńƙ.óŌ~µ…Zo 9!h .ļüMŖézՁøµüĶŅõažxÆ­üGįKšž=:’M¹ÕncO݉å޹īŅ"K©ł}āŲōĶćPÓ¬'2²’# £=1č+Étć7öµž”g—J¦D'9\ņ+Ŗ5{Õ§|eįČ5]kĀæ¾éś(tVæ…Ī’Øq &=–„ā+É%¼Ž&XĮžµÆ8ł»œž®ŗ„ƬnäS=£†óü³¼ÅčOłļ^¹ čŽ ńĻ„ui/­ēkˆŃœJ‡k#åR>æĪŖ.åsž)¬h–ņŚ¢½“³B¬€0åHō®į.³ż…tŸŁ`E{csÖ®å)#ėy/5šõ÷Ž-āŠ®å#PIąsśWĒśĒˆ®ummo„1ŁM ǘŸ¼źOj ē:ĻI­x‚]*āŅēūZ+ˆ—;°<ę¾{ń^“ÆAØĖcŖi“ĄbqŻ õzŠ jzgƒnRēDšÖźŁmQČ9u}? m…¾‰į-bm_LFeA† °ėŽō‹G{ń'žń^‰¤ŻxsM[O,-ö—Nw±ąž‡­}Įū&~Łś7ĆĻč <_įŪĖŪ˃å5ĀÄ>lń–õÅ%}S)HūwMų™„čW7péwóM ÄJc#…'œc<qµCÅ’5+Ų5 ,n­¶Éęoķ‘€n„ȋö‡åOŽüT÷vžbZH³/Ėęn:ę¼Ūįv¬ų‹ÄŃŪ¶¤šŚĶ0bņsž„5 ³ō/éś.•s%ņ˜ļš0öī¤lqļė_xņŪXŌµMZÖ7`źåc‰FJÜżi™K¢Śx˜źś‘=¶Æ§Ś=Źłóy`€7c‰āæD¾'Ooąļ‡ž°tøIg ‘“÷]ėAgĒ^$šäšć­ŌLŌeNķ”žµĖi!šŅś°ü‹°ƒŽē½2N„il źÅnž|…ĘÕ'’kč_‡,ń€uµKė?ō’3Ę=ˆ­Sŗ©õ֍ćŌń–”vŠ$ņKWrČq“š5õĻĄ’_[CØhZ¦Ŗś–‚ņ–†HĄ-jßÜü bĶ–‡’~Ó¾Ö~*ézʇwWÖ#±Ņ?ŽDGpG# ÆĻ’‚? 'šfØ·śÅĖ]D²äž‹±ˆĮ={T)"ł©>x.={I“ųįČŻÖfY!ŗIYBøłĄčsżk¢=Τ¬R_šHڶoڳö[²šĒßć„ģ©#–źŁI '«£óSė_©¶°KisĄģ ąŽÕ5ķĶ å¹õ÷‡¼H|Eį+d½ģj‹Ü;×Οµ7Ć«/x*Ļā„„2ßi*Šj€.ņÉų*ŲūĆõĻjäoSš”ü ~Żæ³d’³×ƟųrĀ ˆü«Ė.µįÉdyr±o(6>š$ŒWēN§i%»”œ“Ž=k¦‹Ń••µBƒ’X•,­°‘Ūµu˜2³¶÷äw'½gJQ$*ŽN{„‰ę8}¾ZķĘ3ėN^d –Ą=é4iw4# ’ҵ£q ''¢Ņ6†äö3ė¶Ø¾š†āČPy°4‹ę ʌ(ÉÆėGž a’Ö“_Ā_µ7ķ+ćBĖÄĶå_éŚ~–ģ‹§ć ‹øŒ“Ą'JR•ŽśZnTžü=ØK£Ļy,ńČHY«S]-äf).tė†Usó'=k‚¬Š“čqzމ„§Nģ Ž@¤ŒļĮÆĪų]|'āŻOOš)_ĆŠi – 2Sæ?Zē%v?>?lo…–’<5m’ohqÉmØī/-”$ōągé_Č÷޼+ąk~Ō£’7Žw{s· ŃĘŚŚ‘Ųó[˜Ż‰F\)ą+–øām›w)äW}3Š[•'V$Ž@0sĒQP\jƒšygD#Ū§=«xG©%ķCPūThR@§6;{W?ę*»1Óö`Gū·e˜$ u©ö‚–ēßµfŠÓ±gk|»FāzÕ«UuĖ ņ¤v źƒ?\æą‹_¶Ÿ²ķ_¢xkXń Yü5ń\‹¦ßĒu>!ó$8RAą`ŸČŸZžü“;ϳX\h¶—pO"”Ōō‰œäMäGäqŻqSV7Ōķ[\öŸx”¼m¢izķ±ū=Ź1‚śÜ‘ŗ)ąƒųŠīdø&ŽŻŪ·*ė\!Ø“æšV?Ł Iż >ÜxŚĖE“»×t»Y,õB\iĪ9ībr¹Ć7LWłóųĻĮæĆ’x‹Įóõ>į¢E1”ó!ž\õV,v9øL&łc½„ r@w'ü)¶ŅK¢j7:bM Ī›/¼mž?„sŌ{£¢š>ųuā§ÓmMåķÅå¹aå#·(=ü+Ś“ÅK€ŹÓpJŒōƞÄS÷®zTl|Ļć[Ė­BöIŠ7–Ąä“Źā¼ŖDM'PY§vO5FŲŲpŽõх•“5­NĒKe>Ÿ}¾ ±CéVm XG"į¤%‰š+٤Ļ"eķ7^s›©›l9ÜŪøĘ+±Ņ¼e¢ų«_Ņ4[ĖøbIn¢Vf’13ŠśgÖ»”³õ–×LÓ­¼;¦E¦4j‘ RGWø¬K½8[£Ha¹VяS³&Ō1Ø*a]½†Ÿ–Įa;­Pˆ§¶šāE‰b1ǜd÷™ÆĮo`¦D¹ļ@UŗĢ·±‘øFä)Ē®kÜ€R}ķķywJŹUwa˜õééL ¤Óu[EKYć¶{˜AhöÆ9탌×4Ž#¾žĶ“J½øžĆQŒJ*(Ź“ńܤ°O*ܝ3^g§x‚ęśĮDq4Ū”°åGjf¼ČīõŻźŃČ.nČ#Ÿžk ¾1¬‘ąĘHū§*ÆØł‘,!÷ĘŅŹĆkg#ŒVŌŚŒ—Kœ±>§“Z1‡u9¬īÕQƒZtņŲt÷ÆXž{Xķ¤šŅń:üĮ‡Cް—K{=ZŽåBœƒEyF”lD“[°ŹŗAļYOr\Ž+y£Õ‘¼%N[=1^ĮfŁ“ øŽsėSb…}&{땺‚g ¼`åLÖ,ī5“‚O*ģ§qī(”µŃå²FŠč dčŲõ«‹)µO%Pzō·Š”¤Ęåfu܅Žk£¼[EKqå€ēŒõJ=ÄS’ŚVx$>IļŽ•jėF{imēl`śR’Ż%œ7öJy`'P9œ°ķP&öo^ƒŅ¤Ņ2čĪßÚmœVŅOv±0byZĶų‘£Ć¬é<&)ŃAed®(:#.ŒłzĖ_Ōü7𤳲‡gŪ·ī×I‡«ųŪJkū¹ ćĖ"Hq¼{v¦¼Ķc.ĘeƇ&(Ž@;ņ3Z–śf„ |¦ąx”¢ÕCWžõdŅ©+ʶ+.žI× PKó~U-‡“-Ł ić2Żdu®²]Je k–ć²÷¬™kTb^5ʬ’Ć#į_®O­{?Ćč‚{»OōæąeÆā*łKc6óĮ© źŚc“ĢÌcwøü+§ń]®•/†­®ĖĢnŌ’üdL~µf|njŪj®Y”cę‘W-­īīēy;ēŠHŽ4"‰ķ™+Rķ,XūNź՟³×ģńƒö‡–Ū[ŗ¶ŸĮ Ošāāšl3ÆūóČÆŻ/Ÿ²×Ā?„:•oąo ĆņÜźr€Ļ1īA9"“±œåŠū ĪŹ ;eŸQ/{|2Ibjͽ„õüŪ„_³ŁžŻńA„„c„µ°¶µaŒ)īqĶ]Ś'5J=Ģ%"œ× ŖŹ ©ž#ŠUhͰwX{»‘RŲ£vfźō1³‰.1ÓҼcĘ“­ŻēÕoÅŖ ü«×ŽŹTĶƏ’¶‡Ć}.ņęźóģ~0ūi#ålš>¾Õų?ń÷ž „ā‹ÖÕ|=𭤿·˜¤Õ¤p6õū©×ń®Š4o¹Ü•Ē’x×Ę>?Õ¦ńuf×u·l’ņg<ßJę'iŻC3no„{Th¤µ9ŖÕ¶…8ŌJÅK•ž”ō‰Ōŗ‚zv­e+ØOo˜Ćr£ƒĒZÕXņųr=1Y9\ĘR¹r xKfUfˆ6:gŗ»- ębŅÅg8wP~µ$ž£šæąĒďŒ(µš7ĀO j¾0ń)Ś-¼$ĮxŻ»bæ¤ÆŲĒž‘kąĖĶ Ēæ“’ˆ-µ½L˜h°Ø(×ē\óŠ×…üįoh6žš^gį †Ś0›Ę?ˆŽµ×ŚZGh‚4śē½qĶōf‰\®ā>µ8@+2e+éŚšĶŒŽsYĪ]Rm•÷ē=Ģæ¾‚ŁKH_ZĀrčopמ%‚=é Ēō®3[ń,ZN›w¬ŽŚéV±©}óČ>p õ5ĢÕŁŁŲüŠųŁūphöV:®‰ą°ņjŹŽ_Ÿ$«sß łcć/ųĆĘŚŠ\ų—Z¹ŌbWw`ĢpÄūzWM8ó[C;T}«ŪŪŅ‘ķÄxl­u%m å+Yʞx•* oM »H­ü”gRpʼš%+9?‡<-{zčŠ ÄO\WŠžš­š¬²[E)*3ĘH¬źĖę=oGšāZ²Ź#]§p:W”Xčļ((Uqō¬ovfŁ<ŗd¶Ģ؁šyéļZ±A džqޚlĪL‰ ƒpĻ<Õö³X|¹£r~‡„jd:YĮerēw|õØdD‘ÕÜüØĘÉk DJ‘£ž¼(Ķ^ ,V²=¢¬¹d'Äy—‹,5ę±{½-fµ|žW¦qU|/¬ĪŚE¼ZܾEź€æĒ¹_”¬c”čq$Mo‘NžF s¾"Ō/ㄼK2‚7yĒ­"Ļ>ńŸŪ-ą‰·ƒó:W-o™o#ķȗćM5Ķ)ŽÖ}›ēµķ’Ąöķ]qÕõ"?Q³Čn"œ¢sĻ–±’‘‡o;ß=iøĶXÜK“XŻŽ@Ŗ«ØInĮ¶‰ŗŽ; ĪQ±µ1óŚ˜EĻ—ņ·Cž5ć_¼/ż¹„ÜŪ!h®6§ÓéļXMjuF=nģēµI-n&…ꉶ3¦øÉ!…gĶÖJīź;Ö|ŗÜÕĆK£šĘ)d¶ŌµŚdܖūŽPśWžź3Gq4¶¶²G,C")½tR3”l}ƒšāÉÕ|?€|Aq¦-õ˜Ż*wŲ+w÷Ÿ€f>½*ōxq—ł{šŽēPó.¾ąv½ėKŁ«“‰tVū²/cLŠÖ;2Įpņ`å~•—ØjÆ-°…‹ KóDeSóöē„Y³Ōb’ą<‡üiŁĻė)Ć(™ĻR:ןźž¼™. J’BŹF1Č5¤!.‡Ģڦq£x™ŚęĆĢ…@Ś6ņzż+ŗŠąß[H–3·#“F©\›KŸTÓ¼ˆć'b°8ϾŅ¼kŖG ;Økw ĘHxPD¢xä^!»^ŠkböŚo4’°Œ=1^Š|U¦ŽÅ’džģĒ?ne(vÖ6·3!Żūģēõ½6šöH’Ū“·Ÿ“®+ŹbĶēŻ)żŲÜqPµœˆ ’ĻĖÉ© T÷nYR§®‚X„µķä Æ;ØĶ`˜H©_Zå5Łj’e—©õI÷0aš óVu½Ü¹åtŽ»Ńm.lšŻ.W~Ų#;tśe§Eį‹ÅŽ[™žÖQówǵR—]±…`T›#å'­G(¬u^ ’ßPøgSSŽN 5é71Go#BĘ9§ŸĀ˜ńV‘}oŖ¤«%±“l÷k‚ń_‡ķlķOŚĪźŽA»h!° 0ņ<ŅĒN¶“bö¤gŲ`ZændlNŲ␮6-UįœIuėŸJMsL“šÕeŒbQĮ½e$ś—Ģ'øŅ,šGĖŁ“ŽOz|v6¶¶ņD! Ih©éš›<{࿈µ {ā%φtd†ŚĘ×rܼø€ ;ę¾äŗÖ„šĒ„5)`Ksl’#ņ?LżZå©IšJZ |GšÕ‰¼;qāŻ'U·‚ņ+‚UĘee³_=ė:^&•=ԐłīŠ—_™rzśVŌāÓ"qlĪŅõ»› —ŅdS"y€/•õƅn“]OAžĀém¤Ä%Bz±ž!üė¤žSĀüEšÓįž‰oä^ŽŪ$R†Ģ®Į£n¤żEx5ՌÉ/,Ą„᳐TPØ|,ń&”ųž>Śga`pPį€8śÅO+f¶8ė½bóQŌ®mįR-ß¹äŖąu®“DÓ5I ‰)tĪ6ĖŽ£Ś“ŒlL Thoōoˆ¾ŽūQ{HQo$-І9?—ē_i_]é­4m2t’$EBˆłPŲ樅" ”y%6ņ[łdüÅ0+ʼUń$‰Gk§øFŗ PW"<ŲO¦j0Ļq4) ĆÖ¹Mqo¬ÆP٣˦2}ą:6EȌKøZ}s@ÕZāK%“˜K¹zƒ_axƒā;ƒįė-jßR› T²āHˆĒ$~“—Kz7Åɦž-N”2¹ē˜ŲŖŗßķl¾ńˆ²¾Š®5­ iV $†0OŽ+éÅK‚SŹž#É”xŪÅw—v™i§E!¤aō5ĒiŸ5M/RY­­ ’Į˜ł¬:–õ¬eJĮ(čz­­ž­į(ę·— jÄ‹i†°ęń$ÅÅżŖˆŻ‰-ótÅTbcc‹Ō”ģG=ž‡ÉV„siķ-¤2DŠ ²nFī VVĒ ‘Õäk&yĮé¤sŗ]މ§k©a+ eoœ)čz½µŽ«ŖŚ=¾„.™ĆāmJśõKŒÉp¤bvć'œšj„ rgĻæ5ū†ž6“E¾ø»HÉ3.zć¦0E|ÉńŲØÓļō1£ūUĆ#ŖBsœžžµĻ(2c.Øē!šWöäVWŚĘŸv’C)ņĆ©^Gqķ\­ß…õOÅ«i“v–°®ęø)…ač=hŠ6‹g'ńŸąŽ‡¦ńG†¬¢—Pš0WhĈąt'·?„{ĀĻxŽóįž›įŸAöM~ßżMŅ}õNĆwåÅm /„šē‰®žŃ,õk§æ‘#([8$悯š„燼]}®xh@$Ւ=ń–8ÉĮązõż+Ec7Šųoö†š•žp³ŽŚ5µõ³>J :ńž}|æ¤xōėėO*5ž×~dSĆ{b—.†gč§ĆŸ‰^ÜŲæ‡b•nĖ–"ł.ä1ķųWćŸĘ_ ė~ń¦¬—ztŠhWևfR0N@Ļ_j,4Ļ»I’xŌ‡F<ńüŖ{k§‚źŚ«ĄžqT¶5‹}OØgÆG¢ų°i’\F–„ĄyLąn;{ćüęæQ,§WlL ’Ö©”z3HŹĒY¦ųßUŃFŪkŁc…ˆÜ±ŗ¾1ż­tH|m%–”įkUŃoƒ‡•IŹŹŻ’:įÆKfŽŹSč|5wįŻSM‘lµˆ†ećö'ģóā‰üS”jß µOķDZK ĀŖķčų{×LlՎ…Ŗ=£ö7ż¢µæŲKö³š§Ä8uøüØĪ4ßYņ#h™¶¬Œ;<ēŚæ»]/RѾ•ürx³JŽK™µRā ]ķ‚Q“«©ĮōĮ·¤ō9¤ŗi=·“;“*ŽõJhń”É_źk².ē,Łƒs”cĄļėUēŠ8S€qĻZč1$mŠ€*åŗZ”Ń‘ėApE–ø³Óģ./Ƨ†cS'ĪŲ' ÷ÆŠ_Ųsž gū[ĮC5*ćĀž¾ųQšJ{µ·ˆµkvP\ą usĻ'Ž+³ŗ”:ŸŚģW’ ųū č ¤i~љjVęĘķ #ķzd¬J'BŃѰö®In4ĻÄŁ¬WRÓZśŃwBÆ·x9?Č5ÉÄŪå‘#$²`õŒŃq‘ŁųWš+˜ćV €wÕō<šŹŚXĆØéŠ¤ŹźC#rW·5åbéė”ŻFgy+Ż`”ŗŸ„qŽ Ņe¼±i"9•9ēŖ­rÓV‘ģ_žœG†5xģ„{ Ā6–88äW§Z[Ar`u•v1ćšöéKSĮŖ¬ĖŚē…H°[ēdū1m¬ńßō‡ģÕš»ĀÓYßų×W³Šö9AK}ąW_»ļ€rkфŽ6ϵ4ÉĀŪ­·…^éZņDRža”±8ē5²9Ū9Ųģ.ÖG<"ŸN¦ŗ6k„™! ²0Ą6ī¤PM­ĮäŪE‹‚%ĪFŽĀ¹”ū.£ŗ+“˜+æ‚h.tļŽ7¶0ÄT…F3„zW†“MVłZ)‹ŖŖć9éŽōč–VæŁK Č]ŁH O®7ʞŃõ ‘©B‚Śē8 Ž’„4Ź‹±Ć®ƒœ$v^•„oį[ žĻØG3ca·ŒŠ¼ĶŽļJ—O±t¶gHXšww¬ŸGmĀKSī{RĢ®īåŗW ¦ŻĆ8¬›‹ł-fDČ|ž”bĘžG˜ļŲļKy+’é3dćŽŌ‰%µÄnĪX“][’­VIøkvŗHÕӎ½[A¶v›_.p}+ŖŽi!Œ¤iĆų “HžA$®¦00j€T[…Ā”|õ4īRv;­d3Æļ"E”ē?Jõ‹v c”ā9PœŒœŠlu¶ŗ•¤kx­g¤ćė^GØéqFāR¬ŒĶÓ?Ņ•ŒŚf¾–Ö1Å{õ6ö—­Ć+Ü[1d÷5F÷Đ铛9īXąóœ{b‘Šrھ—£j×l±£×= ,:ÆŁQ4± £“7õ¦m†”g4RBłŽĪųļ]”¦jvQéĻ œo ?69֓*ĘUŪŻK*¬Ł‡ŽEgjŚy‚rĮü¬ą“ڳQv° cæ‚„9Ę}ė°½š¬öÖ¢y š¼{Ōņō*3ģsŚDp-ā„įXŲ7cŌWŠ:FÆo¤Z†·^5\ü)ņƒ“gšų‹ÅWšµų{Dt„œę“ Õd–Ō[\+1=xā›Zp¦™ö}M_Oš3Č<ŽŽŸZõ[;kXtĐĮå\€76zŠ„ŗ ;õåÕ¼PÉt”\cØē5ÄGāŌ2øl«‘šĘW;=:m;QLr…bF ļSEūx…Č\p*Z-»4ž “±ŒEr’É"ó¹yĻįXšŽ¬—š0Œa $9¤Z—C‡ņLS ‹žézń]M®µb֙‰÷H8Ę:ŠŃ¼gÜÄŌ5{KČĢ~SĀć ó×ßÅ<ķ#ŃzŠ?hH²Įq˜óóēņ­ˆŌZʄ€‰ź("S+›{G#+Ē¹ØŒNųRŪ£Ķ5¹e³§ŪBX†IūR}£c2{b·“,A ˁž¼r+V47¢˜sҁ{Bœ±˜öǜ篵S—÷{vŸ­DÉrd¶Ī“£FŽYæ•J¬éŸ—q¢²0”Č­b¤2Ź‹æ'#É«ń@]Ł@ŚIąPfŻK;{xŃ¢%!”I5Æe{öTŸ(^€ƒÖ“@¤r7ś‹Ü\²pǵł3ńGö…ų‹ńoRyļõY¬“>v[Ē#<ć’1Ę*įLŽJlj"½¾#óÓ<zV嵩–Ģ  ×Tcc)JجZ ²ƒ1ÓnŁ@”ß،U6e¹„¦ųbśü¶…—sĄė^Ńᯆs ā•ąmįrr+ĀĒŅŽš}ŖIķau#Œ~5évžŠŅU–ÜFŃ÷CQ-„i6Ÿ! CRCŗ¤0+Óš„K‘Š$Ö+ödsŠ®y™söY™Ä*c­Y•ś §Ļu>UŚ=§'ž h,B3½OZ6ęŅHˆłĆ{ŠÉ/0fŠF8č=Ø.×tķRL¢ŻiĢ£fIĪkæµg–Ęb|UY°(Ėē“OlęA=;W=©xsAŌķ^B ó©Ü§8ĮéXƒGÓ2––Īći õõæ>˜ŽvÉHYzóŅ„šœg‰‘į…­°`œq^Ak=Ī›<–€ ԜÖæB†¹§ÅŖŚ½«Ā±ČČÆž|S¢\Ś9 Lˆ¤ õ”ŃHńļųėħ,Q¶ÅĖ“ü>ųÆĶ߉_ŸČ¾Ž`‘‹/tŌ“n•tŲ$ÓuY­e ×Ćž*ö¬Pŗkõļ\u;Dģ&}2V‚0B÷5›'ŁVxāYĀ!įY†9®7¹Ń”ŌĮe}„łSŗGqɎ9ø¬įc§É}_A+[M£¾Žō#n] ūæĮ rĻ k©0ÜŠ« ÷żz¹cā_hRE6—©J—Į`N/u"·…C)G”öĻĆoˆ³ų§Jū£emśĒĢ’yŁõ5ßA²|ŗ «Óé] Üäš"•ž6œ²“Ę* Ī®„(tĪ1I«ŠSvŽ[,ǰ"Տ©[%Ä`;o\p+–¤NźR>gų§ą];ʇVÓŁ œ–ūFĄ$t?|įy„‡ŒĘŒ$Įå‡ZČérŗ8‹Ż%c…Õ„iXämĒjå`‚ÖF&Ž`Į[ =Ējŗ{˜Ķō*¦«sįMwLńVœZ9­X‡Œ–eb3Ÿ¦3_©ž»žūĆŚŒķš+.ā5'ģĶæaGęq]Ń}N:¬ū§įÕż¾­ ŁŻéw <˜Ć!Ø®óĻŌUÄy{gVąƒ‚Õ×LąŖz^‹āo[Ą-µ/lŪ||É’Öé]QŌ ,Ź_æZėŽĒ?-Ļ5×¼aįż%īdŌļmō’-IÜĒ„c[ųŽĻ[šŌŗĪ—-®£`°ÜBį°Ż³Ę“ŒnĄäm>#éÓ]›ŻF#åżć`×}kØŪ )ČŃ8łpxśŠ·J™Ék×wöwPĶks"[^ĒŁč÷PEĮMÄgؚĻmäīt mgÅŚ›€ĄļĻaŚŗµ¼Ń/ąDū4pĶˆxśÕ©”ņ™w1iĪŹUYzq޹»›Ä±PéĒ&³dMj28ą œö­ "±KP@*é£ KS5l`¼* ø#ž+§]*ŚŽĢČį ĪOZŠøČłā©’Y$›O²Šāā2ē‡Ö¹/ ītä–öŁ-$Ęv¹SéYMfˆ…n6Ēnź²łWu§ŪLŚa¶ŽōłĆī†šžu©iśŸŪ„XČec÷¶œ~usūP“ņ.nĢčŠC®jć+„¦ėŚ”7ŃKew#mls‘ļ^õkā õ{8Ł$HäQ†Į5\ęRH·og©-·Ś· @yägņ«–—W¦FwF8īzVDöšŽ˜ 2ĀbfžéõŖROst•žNÜŠŗ]õ›±•Łŗē×1Tlvē½C:Nš’lĘ9Ęźė脤‘X‘ÜkE Š@TSÉ9ļ^Õ”ų³L¾ņ`’u†ėnNćĮ4E_Beg^»ŅĖĶ™ą*9'®|Yń+ā֏įżFµ’kwb”Č_šŖåīgģŁ«į«7^‚ŽņŅźU†EÜG÷jMNĘKy”£$‡9ü+6ģO-… ˆ©t GŠõrĶ-mL ²©ēÖ¦2øSÜĒu$;ƒ¹2•ėŸzģķX¶I55’Obo¼QĪ)MsŖ‰4eCūńZ¶Z.§x°](Ž9õ­!qšz…³ŚĄbø‡ēĘyŠęü Bŗž¹=kAl“g»ŸĖFóĪ3[m§Ēm G)ŲÜ÷äšćµ É"‚p£z`ąZókVõYąš÷‘ž9¬{źqIūŠŽ9 ܊qŠH7A&[œõ¤LŒ{頕Õ|€ =ź}6ķīŅDǁŽ” ĆZÅ+˜@y0=ż« šOzdģ軹®?•©_CiwV”±6żŁcī×]¦j­ˆ6ׄ„/ń •śTÉ”øó ĀrTg•=ŖšĪ¶×Mń3mėB–¶&Ēu5šK P„u5€¶ļØG#)Dœ Ą7V>‚ØE[}?T¶Żē¶ÅīŽÕ·vwCqˆŻŽ"©ĄCYšģv—Mqó-³ĄĒó®fėJiW1®›JĖŁHŽŃ&>Z…‘Ēp½Ŗž›¤yL„Ŗø$¤`ęˆĀĆrgw§iO‘8o)F2W}{5ƒib6–Ż„䍣•>õŖ‹å²[=ɑ]Ą@HÜæÖ³ŅčiccL7vĮ䊊r³'S½–ņ"ļ+§*£Æå\¶”y+#Yɤq¹]p*$ģRÉ®™g•Fš 7öö®›FµƒHņŪSi\¤ńCųRƒ¹|…=oQA"<1ćä?ó­[Ę7PŁ›V¶ˆČ¬y^ õ“cÜ\ˆ»£^ÉŖ[6Åū>H “ē5ÜŲé7ŅÉsLĒ·œ{Ō1øéc¢¼ŠžX„ŹŹ6據ę“ĖKĖ]öśYX’7ć×ėHÄź®t‰b°Yō‰"y·õ‡Æ­eC¦ÜI+4ĄĒ6į–Ī@ØåÖčV±×Ā<øŚb²)9/Œf±n®,ķSµ¤Uł³×„h†rvWhܘÉ$mćŅ“ā×m£µ’NżŅF½p9Ń7”IŲž`l¼‰e”ˆŠ’ū•ĮžڽFŚŽ×UžĢ’kVic!rROjģŒQZœĘˆń5†•­ 2ī¬c\üĻŽŲüæ:č¾|bń•®Fö^~qi1xw™½9ōö­cœ®*ē=ń'āļļƒšŁ T‘ꌕŒ4æŽYj’"_[HµōgÆŽi^'Ö5™ą“Wic BYH=p8üŖŠŃvü šaÖtmoA»šéPæ–ø8ł¹šČƟīgń€/u}9ķ„¶¶’ģʤ Įćč8ķXOs)KS­±ø¹ŽŅŅü«Ł#=‡¾+Ń|+ń>ŚßQ³³šD†Ü­$cųėėJ+Rcs3YÕ½Æj2ZG%ż“O¼:‡ÉÆž¼gńU“»¹“Ņå¹Ó¬ o)D‘#»G„mcx£Ņf/ꚦ§«¦é²¾¤UšK™p žuļ>/¾ńM¾­ŖhzŽūaål Č ą÷äPh­Ōų»ÅVkiż§g¦źÖ©3ķI˜ ćükĖ4ﯧEū\{U ƱÜO  µk}ÓMlSĻI"Ī#zW{ąĖ’,’OipȱŸ¼Ī(&M#™ńų¾×ōėĖKɋØ%щ'kśżkē;ĖĶwH¶°µµÕ£’U!NW‰=æg:{Ÿz|5ž Ÿ…×óŗ[GØŖ—|£/Ē!Gž½`|#ųńyąĖżJŹóKkĖWVI”¼Ē<`„!řŗ_…üSā/j>1`–¾ŗøtŽ4CūŽrG3^cā=JÄ„õmAķ”Ō9'bīPk–Šś®MĆwŽ“Õō 2!*å–Dł—ŒÆÆ½ač6qjBk‚KKĢeK¦ŻÜō©k©Čį~"hsZiw>!IĆŻŪÓąnh±Č>õ‰šā0Öķ“T2ŚĢn%ŽpūIūį2ONjŅ+Ÿ¤^$ŅóöXō9įŌ£*§±,1č+ä‰ßī5[‹ļŪZ^[ĪÉåĢv"€z8©m‘ē]a{Ė­9 3Ū>Ē#­é^›¾Ö-1įžŽ‚|ćÖ„IõlęüG„­ž‘˧Ē>tå €nuü¹«¶š/ĆĶ+PÓ®’į5Yī“)v›y$ņēۚ®cBŽ­šĶɽ“šyƒTÓ O•­˜9edž¾mOŁćć-ŻĖk"É`ѾчūSāhŌū~t&>ĪšFŸąÆ ĀØŪiW^,²`Aē{ä{Ö’ ¾ iz÷Ūtōš}Čß ±üŃŒē ŒgµL—q6ĪcāU¾¹zŽÖŻxRdl‘éž}+ęI,õ?ķ0ÄęÅŁ‰ćœ~u3qg[„hwW6230»øU.H `zšä§Y 9Ģn8÷²&ĒMŽõHtčtĖÖū\q1ČĆęU=>•‡¬Ės«j6wp˜„Č”H+Į^’Ņ‚¹Jµ§ŒmäŒÉ:O¦DĘK`Ż d —Ć:ȚņžĆSwK…Œ0.æ+óšd[”ļī¼,|kqbö“›¹¶Ó‘½Ēå_WxĒBµš6®š®cFž@¦¹VČ?)ģxĶUÅÉmϘŠlüw=ĘżNyW”žuõfŸįŪ+:ßēé0\Ļp‚Qqī%@äqߑÅēŠś‡ą<ė3™ĪwŃ.ßŃ|ėƒŪ#Ž•óēķ imā]H] L[iļ.{ʲ–äŸ'xwĆśtmsw“ „8½k^O¦j4fõć“h/×µŗŪź†ēĀWö²$²Ę ļčĒÆ­|ƒ­jšMī•©jēpćś“ū+žŚ~(¾æ¾š]ē“¢Ü8ĘL 0IłG§Ų—BżŸcźk:_ÄIldÖŠB&- ĄÉu?ZēF²Ó®“Ö¾ŗŠā n½zÖ2€(Ÿ@ų§Tѵˆl<õŽ€Ē$hm“qŒ+»Ō—KŌ“ØģķEĤˆ÷y  _SĘ+žÖe\ł/öїǾ ŌćŸįõ•¾Æį©ŃÄVโcėŽŻxÆ8ų=ńĀęĖMH>(ŁŲ”C¶2£a8ąÜqZÓ ŸUi5ų[«Ü\M jāĪęD3I „ĒNyņĢ’®ü7ń»NÕ“ĶJoōrJrŒ’éé](Å£æųo揍zč”\ZNó®ÕUŒ+śā¾6ų…šWāwĆ{éEīåĬS3–Cģq֍:šžń·‹¼-k&š$¶Ō,&`ļ¶ $F’džŻkݼ_ØųÄ? õM_Äņ}£XŒ¶C’‘ćØDĶyOĢæŲč¬f—AOōnrT{’…q,øuUFyœįF9"³E­QøÓu‹y ¹WČźćä€AĒņÆ×/„¾6_ųHÖ.$YÆ\“sģĄ äv«’Ņć=7)1\ŹyśVˆō5=*ź7ˆKq嗌y’­\Õ~ )č~nx§WŌ/µ[‹=ZÉl/`ł$Lēč+™Šü]sį ~ĖÅ6Qł³X¾ōödgę϶*iŌä}·ńwĆŚGü ećĶ5…ż…õ²¹1˜„#'žł=ėś-’‚$žŲŗÅ‚×?³wõ›}oā?ƒm³³b[›ąŚ?ˆØ!r=_F‹§+­OŪiÆī-nb»‰a—Žõõ„e_xnŽžŻäūtcÄzŲ’?ʹg’9?ųCOńÆįŻkQ“K››76ó«¦L¶Ī ²żpxś ž ?ą®ß°įż•jŸiŚNuĀļE&Æį‹+6šĢXµÅ¾ī™Rr`Ėž¢¦.Ķ#žHü?ÖmĪå h¼¹˜ŲpGĻOm$ޤŹ@tĒzī†ĒTRq“ǹĒÉąĘɔcœÕŃt9Œł¬»w9¤½—ɱøžŽI•~DvĄf<Oל¤tRGīģ]’¤Õ@Žie ķ_¹üė)nklX¶KG€:ōƽ?ą™?µ>”ū~׿ |]-՝‡5{“§k,wąFģ»ó€FAĻØ£˜ī„ٟčyįĶfÉo“Ė=-ą»švÆźŗ-ÜrnEvĆ2néÜĻ#ėõ&™«[]X%ģ€ł°€ŽµÉQŲŪyģž÷²yR=Ķ~uĮL?e};ö“żŸõK‹-0_ųŪĆQĖ{i@Mż”B&·lõ~qčÉĒZįd¤ž_žź»†[ VwžÉ¹Ł4%Ž=ņ:WŒj–ŸaøyįóėQ$U‡iźži$“¶÷Æfšö­cż™wķĶŹ>G’;yĶrW§Ģ¬vR‘rśņÖßd–W , ¹|® µQŽ_00e=~•ĆģŚg±B±ęž#Ń °ŌWŽŖÜ Xѵ+‡•2y*ŃŻkŗ‘ēāįfĻdÓM^m7N•ĆŪI(łTüŁ÷ü«ōĆZEŽƒįŻ?M¶€eW{61ŒŽ˜ü+Ҧ£:dš‰ `ņ+¤²ŸvĘÉŲ:ź‰ŹåsæÓķ,®c†TU>¼u5ÓA”[LR&< 1LŃJē)ā{Y“ŌE—ꋱ®¤Ż'˜…Y‡v «ā×ļ¬ŻThІĮkŃ4‹Qiā<éqĢÅJŗ9 ~ _#.0¹éž ń6›ń o4•ž Mb4 ±ž2O@ yžŗ5K mķd;Ś*{Rq°ż™Y®&™ņ鞹Ļj|ZĖZøŒ0HĒPEH“±›{āY#aņ&‡‚¬%śÓ°‡ē# Gż*¦ÆŖ_i×čÖī%‹®kg µ„xŽč8–U’9AłN~õiĒāėBō¤Ą 3ĆgƵ O®­ŻŻ YT“ó»śUK=2X­ćżóĻn•¬GÅÅæ“ĪĢ1Ī+[U‚+ˆWuą÷¬„ 9ČlžĻūłd<6TžĘŗī%• ˆąŹzŌ äõmHŻ Į””§Œg‹6˜čķ4.¬¹ćŽNēOņi¶!ĖøÆzČm{Qžg‘\¤Dmć°­G£\ÜĮÆ –ŻžÕ—ļöŻé^µ8%›äĒCü«#Ó¬NłRO"R2kŹüX“%Ū3»3 鎃x½iڜ6‘"-)ž÷cUPŽ]k+4šĮĒ Ņ7=–ĪćJ6hBÅ 9äVu_E>›š q±² ö”£S“‹UµÄ’J7ē?2Ž•ĢźŗŗĪŠŁ€v;X»¢e±ŠčŗoŁ½Į1łdƒJõm^}.źĘw;pGūTŒ¢ģĻ×4×{Ć=“łn¤3ZRß\A±tB6¶i›MŗŚ½„?f¶:®?z“"A"?݉ö9®1%ŹĒ˜]=ŌZ°“Ī؊ćŒpq^榗VH© —z|Ų8¦–¢ƒ8«‹;«Hœ0Ż Ļ½céž[ė™ē—ä\nQÓF‰Ų§h²i73[É.q&G=+»¶ÜĘҐ8k)sv8KFę{é!ós€+Zјī†Ve`jM3"ī‡q!»U84ÖPÅ žżØ-NĘMĶ»łćå “ėZ–Ö“K²7\ö\QvF6><§•ēŻs$ŒģY‹’}ĶY‚Śā9˜aŒx{WDcc9nmĆmc$3Ž0kJ*$hžéäÓnĒ1zĘŪQæu‚ŚŽG9ūŪkŚü9šĘKŊ}I2łiz±lÕY@hŽ“ÄqEc¾1‚z%–‹› #n9ā³”ŗ&v6¶Ö°²•„nąt®ŠāĻģ© –ī ö5W1r1oѦSäoZÅX§Tel_֜;6ršĪ¬tōq–šxīkĆŽ(žöčD{ dg®kQ¦ę\£Ä»}½h˜“°Œ†‘žŌ-­­Ōöļ#”u_~kņĪyƒ<$.;Šm;ZņāWFÓ)ąž¦¶Xvŗ0a鎵‚źWń>žń„¼‡Ėœަ©¶ne$9*zb¦kPgqµŃR­¹qœ ×½øQ \„¼Ź~SŽ•œ¶+m;_ŅīšŃšiŃ@ ōÆø‘ģnLĄe<zÖŹņk"kŪSĮ>•ĶųL‚č,±²–Ē;{Ply|Ź–Óyw·ŲŪå“oń-|}ńsįÄ_kŗŸI/$2“ŒŒōĶe&it?6ž!ų>’K֚{«±ø%dB9cžæ”üź-Ņ   6†äŒō®:Ń:”±u­¾ĘÄrč3““VćŻÄ`ŗC¹H’ōÅ%©Ń }>÷Q…a³idū4j-ē'Zķ4;E¾Ō ‚žöl ų~µ'Lv:}sĀóh×Ń{ĖmNU!ą;€®wSŠ^؟µ£C#d©6?gs£ÓµRĀ4²¼ņ¤€,…į½ÆZś3į×ÅŪ]Vį<3Æ,Vŗ±Mé*ēœt­aPĘt:ąaIGš™sޓؕtR‡]Ä~¼eќҧbć]-¦T’Žž¢²Śõ'b#^Œ5*‘*S*īÉ.mµ Kż. ­ęBŖē$Ę}F+ćÆų.ćĆZĶź4ˆ,ämŃqŒ÷®gŖ2čymĆ6—ŖGu eŻ‘¼dcÜzVOöDw÷s\XŲǐYÕGZŗO]IœN7Ä3E‘¬QÜÄN6ŒŸzöŁWā¹ųqń ŪĀ(u±ųØ „,ā˜œØĻn’wÓG×Cö#M據Uō7ŚUģz\ KDA>ŻėŲu fß]…/­ %·?­uĘ68*ö¾4“…m“y&‰.\|»Ž JÕÕu[ƒ¤ÜĘ'[YƒsÉĒJטTŃłm~|Sāėv^>Õõ)“$œĒߑ$BN=2@Åw–0X|.Šžėײhw &kw‘Šˆ=’JŃ3Ŗė”Éx›Ćö’.¬ökKŌb•^Xą}ŒÄóŽ:W±ÅāĻx%“mW¹Õm £œ»‚=HśUó²$z“Ä#ÄZ &HZŽą'85_ĆŚķę— 1†øˆ = IƒßĒćĆs:YłqĆv@bÓ„uÖÆŖ³”ā'®iŹ6:KI#—–O›©ā™w<°“eiĘ;j &Œ¶ŽB€cqŌõ•,ņĘŃĒ *„ąg½T]ŒezĪĘŁĶŽFĖż«Ä•Õ½“šEsņmū¦¶CŒl|ł{¬ÜŲŻĖu:C=¦åqšäVüźé:”%° DūĘV4mō¹ÕÖń ØŃö=1^…¤¤±-„ćŻĀŹĶ÷w ŠĪĮĪ{‡MÕ4ø¬>Ų„ä3Ŗ’?ƼGĬŖ ¶Åóv<h±qw9«ci„ ¾µ¹Ī'%IėļZŒŠj0bŒ†äē­"œOeY§æˆKo4ˆ§uŗÕ­>iķfy„‘r8ĻJfR¹Ė %iŽy<ŠuæšŅ$0Bļ!<`t¤e&ZŗÕ/­Õķ$ŒōĒ=ź;I4ū˜\[œdŒž˜ŌŠŗƒ@ŖÕGŽ{ņßéMsHE×ŗ./SÅŅĢܼᤁ<㟽ōØ!µ“ĻĮG”Ķ#b­ō[̦TŻaĒz·i-²1f 0sžćéB}€f³}©Ņ¤•ķŗ6Np+Čõ?‡Ś‰hÆNų±ĢmŽ€7“]6ßĮĶic¦ĆžŠ šzWY}©Ev«å@ń¾3ׄe3H,ģĶįŚÉ“×=Ŗ¬“­£ŗ®\ņ¬:Ō¢L™5+¦łć6SżĪ“ˉµMZµœćŒté]—R£¹ ¢MgK";KƒŒu5Ėų‹P×õˬīīv˜ņF jŪ™Ÿ ɤ¹—Xŗ‹ĶĮ̌xĄÆa¾¾³żäPNŽTqŠÅ‘3œŽc+ķc†_½Oø¼żŁ·’EņĻ=«)\ĀJę$RŻZ•zśÕ»;oP½e[XžÓ³©;÷¢;XQާCżƒu¦\}"21vöõŅKįūkˆ#šŃ³"ö­Rg;y<ķö[ˆŠ(AW?o-ÜFŌ 3»ū޵#”ж ³Ć Ōītß&¤c|¤ˆlxӎå4.¹bŗDl‚$\·š;Ö=”‰ŹźCt?JÜĪHčÆu[µhŻ·žI©®3ķHfV\£ąĶi}{¾Ł¦Žhŗ ’įUīļ4“åż‹N[@F-ĶėO”Ģ+ø$gWµeFI&®ŁZŪ΃ķyb¼īŌl>dAw©ĶiuŪČ §BµS»¹’UŻÆ\=jŠ0Ņk֑’X c’GO­G5“R©fF“œē+n\dgÅ×ĶI~cź TÕlļF˜—›+ŒžŽ•Œ–¦§Ö÷1žšĆó)ĻŹpk–ÕƵJĘāIBš ¾Õ¢CM{ŪĖ)"0IĪĀźErš‡‡.ÆndŻo3ķ88=j¹“°ķŠč¼?c>™lā{cņ‚9қ˦pčĒq÷Z‘4t–Āo³©3³Ź9ĒéT¢·ŗ»i/%—ĖĮŚTśōĪv:W¼°…„¶—|\’85VÓ\¹‘ćY×,Ķó`c^ē·h>µÖ-×Ļ/åÆ|ćµgųĮGNgˆ”ŽA“=zPjxžœöŅIū©Š)ēņmCi£k6¢-ƒƒÜśÖōź[QŲžb-4ū.ymnÓɒ7(Ńćī‘Ų×]į”­iéhŠ„æš„²Nā Ą®ˆK©ĖR'ŲŚ÷ĄOź’ųÅZI½³Ö6‘p0¹#ļźsé^ā/éš‹lĖÜŹŒ¤¬Ø·×ėÅokc’SeŒŠd²Ņ¼UįtŒŒ–½+ ž¼ÕO„÷Æ,EŲ­žO6Te£ŚzŸ×ŠŽ$ūFr~.“CŌZcž?:ĒŚ+•c‘×5ß“jZłÜ:ØDńžĆ?…~‚|ų&?†¼_£źzf¬–ó;Ä]r¹rĒ?Lę¾ųŸą=_Ą^/—Ä ÓēœüŃζć9”QėWĶ#¹ķ_³ßĒĻhƼC¢^ĖØ‰Ä½B»c'ļź+īߏž*Ń#ųY„x·ĆJØLīn#wūœtŁß©­¤–į)t>#ų{­½ī¦aO)ɒ@ØT™=yü++ĘwsĮu%µøŒG’7éXĖAókcGĄ%³ŗ½ĆšüI26D$ńÉĻ’Z»ßz‡¾x_Ć×:V—Æą;Ȥ‰®-ā'ĒOb+õ(ņٟĮ>&ń·Ä ėWń[;˜šĖy Ī;“yž•ś£„ėó];L×4]=5ęWŪ·œĻnõ­õ°œO˜üišcGšæŽ?į`Śźe¶yVVcæ*+ķ üDųs¬[h’š‡““„ÄB;ø®|0ąį½4œn%¹óŸķ+ą|)Æhŗī‰m=ļ‡ī¶?ŻÅė–OÖ¾ų„h—WpĒ“\”j Ž~µ*™ 3¤jƇ¤Ž>Y÷;),3µ<ÕŌ {ŲRhY—nwSõ­FŽˆ4»ĒHnćó0(ąā·ō=M½ń¬~tÉe±?|{ŠMĻUń“d-D‡ģšŖąˆóĻJš-JŹŅĶ.¦‚Źž{Š |4ńµ¶āHoÆ­üäÜŖ©sżźū§Ēæō߉޵ӓɓų&²tŁ2s,@xōēF¼ˆ³ü#ŗĒĆø-lu+}GQU2ͦZ`Ÿ~µłŻńÄ3iŽ0ø²²ĒiŌhŽwHĮ öÅŌnŸCŅ ų£w•¬ 0ŲŖ<°pŒc]x»TÕf1%āŻ”fćnhŠ9{ĆšžĘÖĘÖkß_ńߑęŁĀ·ū#?į^Ūkń6óEs§ųŖūėd¶-ˆŲS!õ­Hy¤|UŠnu†ÓļćžÖ˜ØÜøßĻoJMzŅĻT½– y䵄7īņüā™œŻGCŗM:ęĘJ€ˆrFp1ŸzõƄæļō­6ĒĆŚä”u Sņŗ¤gߎ߭Z€(w>ēų]ńēĮɦ]$šUÄX >@Wc׌tÅxĒķo®x'_ń¶™ŖhZ‚o[Tżä3|­€ōā„Ē ½ž§Åz½¾%ŠŽvšFļ½T›Āwš…æŚīćŗ‚ŹŽT'Ļ0śĪ“½C^ń·Ćėš7‰¤ø,rĀģ1ē#c’;ć#5įæ<;¤hW’M§Ż"é÷a.L–Ņnˆł=¹Ķ.cHČńųGPŠuž+fQ*)Lä† 89ķ^‡š÷Ļš§ÄoxŸ[²ŚĪEœÓHŲXl†ĒsšÖ2čh‘ūU£ŚŁA H—°ßĄčź0Ų~5ē_¼ią’ ZA©Üė .`“ Ćo’g׊rģM‹¾ń„·Åo[A¢źriļ*ä1oøŽøķҽ~ļÅ?`Ńm¬Y~Õ«F›Z]æ{¬%‚q>lńo‹5ƒRūMŹ%ĄC&Ö8Šüü¼×õkIöčå‚#pMĖšW$śŌ%ga${„ō7Ś(³:CĢń‰øń•ļ\­äšÖ£½šVVģėõ5”V=ūFų›«iŗE“zCŹ ČIV#+»¼ų£ońgAeńu”V:ō‹²`˜Ū¹AŽ®\ˆłö_Aįǹœ\Ķs ŒJ«Ÿ•Oū5ƒ¢Xė^+’„ÆĆ¶‘Ļ*Ćę¤[rdP3…Ŗ’źQó„õåäm&Ÿö+Ų™¢–&*Ƃć^[}jŃŹźØĮ³€qšČŌ|3«ÅjsX^Gbqūņ„{ké’Ł—ʶ:>¶ŗÆu'öeĮ)”ę6#©üMR––ō&Ūå_ݰuģsœÖ‹¬“Bč­KC>ż”ü?‡ü@ž2¶gøŃu °Ė“am„^™³_/H¾c½»…ŲĒo^€ŌņŲŽ>µżšüojV’į‰'‡ģ"ŻžÖįԐ8ŚGƽz'ĄßŒ>4żŠ?k_‡Ÿ“‚ZŽ›]J8ŁM€Ū›°ČĻJvŌé§¹żųé)Šž'x'ĀŽ>š”¶—>Õģ"¼‚hd ŽYwcźć]wĆĻź> ׄw ¾™8¶yēÆņ¬Zčmä}”%†„ S“1²ŗ‡z_ßšToŲĘĒöÉż“|]ą­.×āf…k^»Cw“ånźŌĒLķ=«Oš %vµKĶjæ’”žr>-šō±y×:ŒNµŅXßăĢg ‡ŽæJņKĄvHˆ„xĄćœ×u)]]uSčfAlJ)rK J’½,EŚ01Ž·‰ĪQ’ŃZ'’ 7޼u¬‰ģ­Æ-n`¹btƧ?Ņ,tÓGö3’Cż“|=ńŪöx¼ų9ń.ĪĶ<ąÕžĪh]p÷Ś`P±J9'jć#ŗŽęæLž xŸÄ¾ųÅØxWšŒém+L–rrLyĪčØķųÖ5#Ōģ‚?Ym®#Õ¬āøu ]G˜½”×’ė†G;QŠ×BĶ]3]óP›īæųÕżqeæ“eó •FPūV@w~¹‡Ä€‰D—Šø'ęõ‘ŖĆ2 ŗuu`Hojvēߊž²ń–Ŗč÷±DÖ·cäb9ŠAʐ{sŠüÜńŸö„Ī—5õö“ž/šĖ7R·q‡¼µŻ€ųž/—ō {Š·~’ĮMæfA©h³ų“A·Y4¹_ŲČvH*HīTŠž{g_;-˜Ŗ¬U—n6‘Ś»©3>¦C®’1bc¹NNEUó‘š« +ēæ½]'<ˆ^/˜‚vćÖØÉpū±śÕ¶Éo#[D’4 “øžEO-ä—8óI_ż£ž*JŒ¬6"2>žµŁZ[x| +˹ŅxVhW*Č}GjFŠWŠēēXb¼qg)xó”ĻŠ’}95‹­%’X›!ću8ŲĄä;ŠgU)ŚüĒö×½ż¢æg=wö|ń¦©c­|Vš;†Ņnp’źŃq³ünj§”ŹśWōsšėĚgЬ­µ[Fh'qä^ĮœŖŹ¼7ź cZ'fŒō›Fµ’Ņ)Tļ„žÜ֍ŸšÖ±Ķ}™”å™qĪEyŅZ“?‹ßų.wģaĆoĻć iŽ–jŅk:$ЧkĄĶ™­³üF69ēkłĒAe«Y“²¤©ēĘ=3Ū5œ¶79K[›é…üʶlpĆo}Mz}÷„Ž=5ķ"[mCM˜äēMŸN¶el6qŸ\VÖ†”oēĄ¢6ÉõoŚq)cĻé@¶·Ų‘\Zķt«’ķw†ĪŚh¾ÓŸŗOŽÕQ–5[•–6‚&Ū2švž¦¹³cöäW“äuēęEgcdqŅ4Ÿm‘ClŲ:Ü]IĀ uD õĒ&œebć+b[‹­·%ņGńcƒU'Ź9X±ėšLŚäśdį”~S_J©åŸµ!‹×©ģ)4)=Ö8Ż­ÓtŸ"óĮĘ+J-SɈG+ļéY8딁0¹ŃÖhŪ|n²ąOJջҠŌ-ĖŚ…—š#r¹™R Nœ²ŚČ„·Ņ¹ūķBüČ©jĶĆœVØ.UžŠ·—<Ē.}G ]÷†"†TtĀ£xT4ļ”pfα§½Å±Š6Ą|µē²ėW:\ — †SŒć‘JW,ä®o®ęœBģ§ŲėW໾¶gŁÖ&< ‹qśU’6¢ŅŹźÅ Ž•ß^6okUĒ$Žis£˜¹|:LŖd‡=‡½uQÅ“W·^ē'­ö‡3pēØd*GCŠč¬Š$,Ķ“`c„m™ZŒŻFŹH<õõ®_ŹKv;rHĒJvŃi²[EĖ"łOćY×rn”ĻėZĘ6mÓeY±ƒĮ¤Ł:ķ䱄P\¾%‘%‰)‡›ć<ę±åoqœ/ˆ¼vž~ ˜ $ ;’ ÷Ɓ_±oÅ_Ś I5¦²—Ą>&'“Q»M­p„’zWRŒ*3÷ąOģ›š»ąœ į H¼A­Ÿ-ęŌīį Ė %AéҾ”6ztR ‰ˆšķŽN?ˆÓ9$ō:6ŚņįA‘M½·a܊é!#@ˆøõ ē”¬Noz†y–g œzw¦bclig–Ņ_ĢtĖÉ4÷QīEĒN˜5ł7¬ėwśõųŌµŪėķgPź%¹¹Cķž•źa؛¹¤bĖ/˜ÅĒŽ=OsU<ųžTŒ£ī'Ó­zŌāsTĖfrĶ·éOh_j|Ż«9œ8TVp8ĒZŃ“·y jˆCÉ5ƒW;MÉI™RæŠG8 =k菃?³_ĘŚ Ä°ųOąēõ]]Œ‘Ē&£$$[ĆøżģžøėI»B'ōĖūĮ>üÕōŸ|rÕā·‰ć‹ĻsÄ PÜ78 Šļ_»šę‘į½2ĒHšö‘aįŻŚ–¶±„P=ńņkŠ„CC”ą)ŲaY‰cp×BwŸåĆ\Ķ™I›‹Ąb–²”ŗc?Q¹ū%³Ļ‚XyęŸć¦ŌšĪfAī:×|ZƒIõ6§Bē£5ĢK ™¤]€g9®ūĘ8i µ ņ©ąƒTŖ£xPź|ūćļ~š+CÅŚœ¦~į”+ż+ņūćĒķß«xÆv‹ššżƒHIž6”‹Šįæ‹„l•ĪˆĀĒēĘ­ÆjZž£>„{}uuu)'2I€öµb2Ż ’ź7Õ¼)„„гmh_kžµ±Œ„‡V=ØnĘF„µ…Õüń‹Kf‘˜•«Ū<1š¹ę s|w·M˜¬%1X÷mĄś}„ŗ$0 e㕯EÓt/*ĘEćgåR+0‘ÖxvImļ,Ķ»…prŗY4ųĢÅ×,¾õ';ÄĄ%(GŹ nÜÜ!d%Jš„õŽ‘o}§Ķqē¤W Ó=ė’š6µ”¬čvg‡ó­#Źėše†¦«¼,ĮOpqé\Οį}?M™ī,žmäēę=·5@z ”S¼I+g ńļUn5Ėk[•Šö?- ŚŽ€7¬nķēܰ·ČWŒU«‰¬’³n-āKœ|§ĄłūRµx5«}ĀYāf'pž+Ó4Øć½Õ]ŌwŠjVŠ ‹ż/7AŒk»#'½¦-°cŗ‚={@5•Zģni?z¦øÓwŹØŒ÷":–—r¶ÓŚ;’§%}ėÄ!Š^g¹[Üę6c“õ¬g!qf±\ŗDŻŻ*Ķī…p¶kyć >dn’J–‘å'K£ŻņNģŽ3‘^S{ ’kFĀFĝNOLV} iŸ"|mųX5=*īāRż Uld;×ēwZdžco ĪŠĪ’&@±µnQ#K_Ž”Č'ųO·ē\µ=Ź6×ŅG4jdłW†·Ņ½N†ē“IōŽ0GQX9Xź¦zĖŪK¢ŪÅ5Źj™Č/Õ”Ņų6Ā_\Zų€4vČĮD±ņĒšā²lčĻ|Dšš]ńҬķ5;Å<¹Ö2v©īO’^¼Ā=qt-BĪžģ9‘%U9'²ņ™śįmB-CI“»ŠffhĮ*G*q] »·gXćEmL䪊W&‘’ £:žŒcŚŖŲŚĶ„%pźOę“gÆœWvĶåÉH Ū=Gę×eüŪ5»§T-ŒŅB™‘©\Nė ̣ïSŗØßiv×io4s ×īõ;tŲ“*üĶųg‘Å}³įū=HĆö$½Va››nEvBgHī•įˉÆķN« O·k!<ąśę¾‡o Gżšākwøˆ.ぜ.=k¢>G-ķ”š÷tmžY“øōłMĹt&3ƒqPxcį$¬dPK«Dn8\šÜ|ģĶńWģż«é:¤~3š½Ķ­ßXrYf >ŸZõ/ ųjŅöÖ õ«3oØ¢“†nüÓ°Ōūž…‰jŖ"("VłAĘ6×udšŖČķęŪ»|£µ#D&½}£"%턤ŠĢœ7͜×Iį}zöž8Ś)$0ćæZ ęz–ö•––Ž#ēø÷­ø•äĢ‘Hˆąäp*v9ēø÷ķä Ć|G©©ķ¤ÓĖč“"śŽ‡Śƒ2FK6ghĀŪ¶sõÆ7ńfœ5 iré20'oF•¬O®EhF²Ā”ĮĮ÷¬½>ĆG‘ݐ9Ć `ƒéYÜi—Ś,ӄ@<ˆT;öƛµĖˆ>ńMõµźĀśL«ę[*¾‡Ü֑‘Æ*FŽ—¬ė²Ģ¢K’‘ŠNF+ؚĖPŌķ§•Yī)r äNNÅ=y©ÜX\¼·RÜwŁŌ ģ¼<ŚMė%՝Ēļ‹ućŽĘ±Ļ£ō »čķa‹zĻ8=«Ń“˜–ęęŸZ¶O’^‘•CŠ5-NžČ\ŚĪŃĢ?øŲ×/ŚÓ8ń*’3Ž“‡™Øß½x£`ŸĀ¢±„ԁ”–F…ƒ`Œb€÷ €Éój~”ቼA¦0µE#)µÕčFWŽ.AxČĄČĪ+ DEė»KeŹĒ |Öe¢‹o9%—pn7šJ sś„‚ĢÄ[Ż“ž{f¹m"ŅT¹ū> Ėz •ߌn«äEÅŲéÆ-“k4Äd'o)œ`×.¹4wqŚYŚM"ĆnēƒÜ9›¹ÖZŪ$2doóÅ{‡ƒµµ²Ūk${:(biū4+›ž)ŗŽX73Ǽ”nā¼Ag–ŚW€ƒ’kHĘąsš—ˆ¦ŽtbāĻ#8üŖ]?Uū}ÓyźDzdāµJ°ŗŗ4¾ZÄēŃHĻį]siVĆOÓĢ[œĖ'AĒjfR0ä‘"u[Õ!¾S°vö¬mNkŲ 2xzķ©8YS©÷ #ē#=īŖÉ4ś”P«ē$GŠŃ x¾Õ.‹I]Qćø¦ĶR;fÖģī®›¤HŲ8éśV“÷¶–’5æŁę2.ćééұ’ĖĮh—’%Ś“j¹ĮRqŠéÆ-,§ÓĄf1ć#œ×4˜ć¹ÄM %ĖÆ“p°ė\żīm&™śd]ŃĪź7:†š‘.ھpX0ą~†“¼ļÜż¦kiS=dĘ[øÜ”i”,ŒŅÄ8ž[e©•ńš¤c9t:„-”«:“čkUø‰¼““2©#9#Ó2’Źt·„‹ØC’1“ÓņŖó,rNĘ5$Ą=8\Äö? ÜźÖV¬n¢O%±µTvõ5Æ©xžÅŠXŗ˜śsAŃ u8ŻnkH”Ų¬“Čżv •®ŲéÉw/€ĄĘ>“žĒBĻęÄWņj~,½ŗ³²’Rɓ’sóVčž ¬µåžŽ R@±¼‚¹ĄüŗW„ z$yŅ×sķ/üeŅna¶Š|G,’, )’2ąż+Åž;iŠėZ£ųæĮW7‰gn®¢r3·<Ÿ~æ­u(ZW9jS×A¾ŠnuŻŪS±o·–IÅ@Ē8üJņψz§‰~jKZŲ\Yéó1óĖąūgµkaĖmęÕõ÷еå×TAĆaYU1ÉĒ>Õ¹ÆųÄWÖZm孌׍ē•ć;WēJÕ%kĮžĆū<é·ŗŒ÷T{uӛä%Ó-#…zæÅė­SūfĀ ZøåČŁ®zā¦V/šå?ünńƒ“=“·–ŪˆŽL1“Ī}ėę=KĘp|HK½EŠĮ~Ņ1Ł*me>ŽÕQ-ųHŌ<7oØėe&[hŌ†ŪłKgœ~5ù—ÅŚÕī«kmu ¬V%Aü@g¢ž&•ĶŅ=·ąäŗ;źņiš¬Ļdń8IZE )ō#­}ĮįĻŁūĆŽ$kĻiÆ-Ä`y²…sµ€č@ĶrŌ“ÜÖl‹¤hŗ„Ī”$µøŠ!‰"qø śvÆSkƇĆqiwMmØh÷` āŲ+ć=1šć“šę-ǹł×įÖ:ßĘ["ćQš×O‡PūEø’@U£Ļöé_Æz‚§Ņ<%{¦iqķ6šČ±˜Žl ž•Õ5Žj½ÉĻ?‹cæ¼'™¤ŗWr •°HĻ抳ŚMwQ–ūdƹUŠ™¹ąķZ)ݲgØxGĆZ^””®ŻFŽ[¤±Ęą Ų ć>ŲĶ}xKÅ>HdH^å[dn„€cØļWĢŹ„ńŽ„į;äMFŽ[]9Ī䐵ÓÜWQ>…•”YųĪŹī Ēqµ¢Ułņ2vŠ÷:5±±ąæXų¢ö9tŪ©muku =»mSŲóķ_PųąŒ’ßXYŅĀį^˜ O9¢{÷Åif¤ƒ>7ų[Å’> éz…ö tß0ł²o!eLņ„vĄĪ+ڵĆ­iŚg‰4+Awi2FęĘPńĒש¢„ł „ܕµĪæĀöžńuŌ—Ž6«|®<Ėv¼WęśÖŒ>ßxēK³1ėv‚ĀŅ|Ļj’mŒuŚ;U¶&y.¹¦^x$‹O+¦<·ŻķÓłW¤ŻN‘Ķz.Żw.9= c)V„mCįõ(tŻsĆZޤѣI$r`¤}3_OžĢæUÕÓįgÅM5oōD@Sķk½rŻ'šƒŖ ¢>ų%ąo†¤ś§‡ķ--4Ė¢n!Tu!N:€; óĶbKāū=.Y`Žę剅w€eśg­8ī]»Ÿ(~Ž> ńļƒÓCń> Ķ׃å-n-ąl²HWę2^Oū”ÕbÖ­.o®ģ®RńĢQJĒ¹ėŽŻė¦‘“Z¢:æÅ]6ĻÅÖß ¼Si³c}[TŪ’I0ō<Šüćųķš‚ėJų”.l„¼ƒM‰He™øRz¾?*“9yŸ>ź~ŗmAńnNõ!GŽ#ұm ]>‹X‰ōьŗ9ū§ÜŌ7cuÖÖ:t`¹²H„2d+"Łśž5Ī%Ī©gu åø–ŽXåm¼‘T˜&tVWšŸ‰5y£A%ĖæB?ØuŸźĶoss$j£mda†É’&™¬‡šČŽEØI<Ń[J4æ:¼‚½›ąķ·†­­.ōۘ#[U†įöm ņGó ³Ā61čŸÆķō-NF²;Š$‡"TĻp}«čO‹_²‡~/ü>>$šó®™ćŪ>Ń"*a.£ĒŻĄäŅnŹåJgƍšßÄŗe³ŻjĖgg ¼ŽT‰Ÿ™¾œūV¹©XéqĒkaĒ0;±żįžsLŽ}OkųKążGÅvvzŌŗ¶Ÿ§Aó;/ŚMĄž×xŠŁāŌ²oŚ;ųüĄ¾d'r|ŠJg?āƒ—vvzņ„k¦ÜC"H”ŽL‰øgå«?ķ-n,|? ^ ńŗĆ4HĒ÷Š`ty£›©œ¤®zׂ<¬xƒ~4„ꋵXm9#„yÆÅφ>3šåõ曨ųQÓ%ˆo‚ą÷U{Bż¦¦Æƒ4MnŪA‡\æ–9&·‹÷̲eŠēļųWŒų·Ę©¬ė-¦¶¢žz?ī×Z¾sDĶļxLi?tÅ«yzĆ8dC'sļž5÷Ļģ‹©ü'ų£įm3IŌuÉ“^8Łž+•ƒœż+9-Čq:oړ࿉ąÓu[ Zo4Åżą‹$Č£==±Šü°ń?śŖmo$Žę×yHĀ¹µčfz§„|Są«Ū[O ėqF×29® éč¼t¬ĻŠ×6¶”ēšŻĢžŽUżõ¤`¬#±-×¶kxß©“n}AąļŽžįžŸ„Yė)}}h[&$īē׊ł§ĒŚķ·|_§ź#ιµ’V±G–Rųźz’õ«KjZ5žü@ńĀOAįŪżY|-{•‘ü¶ÖL’ ~é_¦? 5Æ xūķŠĻ­ŪZŻÅųŲbVžé>½jX;kńƒĮśMÅǟa¬ZŻ „¤7äm5óöįm*Īy³cg"ÜĮW©5”Œ¹ŃŻjæŁXĆ`2«T78ocŲW”ł0Üjapšˆpćń4£+Īohž±æąŽķD‘Ÿ”/9ÆlšĻĀ©ķ¬n|Fl±oĄżįėZFCö‡Ī?5 FŪÄZM®Šó’g;rйĄō'„{?Ć[sc¢^i–k¬[Ėę=Ä}\z7¶;U\q™ūM|šåż“ü1yo§ŽĪĒūBĪ<*oÉ :WēŠbŽÕB! t CėRZbj^5Öī4+}k†žŃ@[·łā¹j«§jÖŚä LšČWhl9šŗqõ“į·‰müSąķ/S¶æ„ČŃÆŸd’Ó©õÆ\·q)P­µėU(™É³ų“ąūų[UšżģAŅL:²œ2ŗ‚GלWåf„my„ėšĘ‘wesmyi3FŽbÜ8 {ŠĢұ§įmvćĀ:Ō(ĖߎVBŪł„}ßć.ŪāĻƛ?é­gż”*§ŸnUĘܽ;PuĀGļoüŸö›ÕµÆŻžÉ?®RŽūKV¼šŻÓÜng‡qĢEIćnONÄśWō:=-äPģƒĒB+)­MÓgŌ_ ü\šõ…ī˜ŅŸ·Ząyo÷±ŽŽÕĶxĻVńB“:§†µCiŖŚ_"ÜYĢ„„ݾNōoĆõÅsĖFMāWž iū.iß?kŌų‡”ŁG ü:ų›nu”“qÅŖ(ižīē,¬Or’Lžź–3ZO2\ ū]—vÜgŸJX$ćV­m>]?@ε±,²09ä{Ōr酙L_#£ŽsJš#– 0Č@,£Œ×'7› ŅĘŃ2²ąFśPT7>‹ż>;_žĪæ“߀~&_źš–—ąéfF¶mĻČö²ü”œHF žż~ÉæeŌ~:Żj¾*½Ö$ÓJųƒF‘®r×Ö(Żö`§==*f“:¢ĻŻ­R“¶hŅ#‹W+TVæ‰ģQÓĄX’x Wæ½yõ‘g”Ų^>õVämu;zŽĘ½.}kĆś>yāŻnĒĆvöŃyāK†Ą™p~īzōżk |éū4žŌ >3|Iųį߆ž+ƒRÖ4'PÓŻ¾,šdLpĄcŸN+ķ­ręņž=²[J½@żkOf7Ló ż6i ŗ°lę6Ļå_|nšōŽ‘|xū;ˆ5Ś=Ž|MĘęõŸĆ>µ<¶fMüOųk„ųļĮ¾.šÜŚŻC$M¢ŹO˼Œ¼Gź;tČÆäö¬ų-'Ā?ˆš”ŠZŻZčÓČŽhcūø¤Ļš|WM37å ā)+¤/‡#v"±äŽTĀ”dQē]ˆē”F>YIb7wŖ¤Įꯄˆ"Ŗ» EĆqļQD@ńēšVcµŲ$ņœō©¾vUTžµ£Ść&Rr̵~Ż®—aĄļYTĻÆæaæŚŸÄŸ±ĻķSšĒāʄīś÷1iśå mæi¶fŽīŪG<÷æŃŪį·< ŚĻ†üSįŁ­|kf—–÷b†č lē8ø9ąsQ4v£ź [ūYŌln }ŗÕŠČŖzZÜ{Øq“™Xäć‘\c`gɶģó§~Šæ|IįVÓmÆüE§Fś†d„HdeS¾Į?:åp;ķōÆó˜żØ> ź?~*k66 <^ÕIŗŅRA†…‡śČłčU²1ž‰.gĪ3¤Oo<—«3¶Ü rk©š†»yak.ˆ­i1±—}iKaĀEsKņ•dŠ`öä|øéŸJ½ąøå—R²¶ŗ‰>Ē“¹·r=«‚®‡©B[#Ō¼Wį¹t;+{öĻc6pŹr#>’§ē^­Øßģ0©˜>IaĘŚŠO[•GxŸJžĪz“ų¹e·’5˜Åµ”7$döüM~‹łļ‹y>Bå^½$|Ž#rĢöā8Éq¹HėUķbµ}k²Ēž÷:õ(䀣‘‚*ܳ$­ę/ŻČõ F<‘ŚĻ#n*²]F¦ZĪę9N”Ѥ"iŽxRŽņ) }°{u5ęĶmuc3E»ĶUb1ŠÖźĘńv7£æ€[@YH‹“Ēz¹¦ėÆj䤌ˆNpk¹ö6ļ¼PO3<ęŚ4†ęH`o—­l«ĮŚĪ«{Ņ;ŚtPŪMx›Y?…p’ŽŻGzÓ3H”O®3M'}ļųM¤¢Ż.ōŪµqÖ¹­zžĻWd+$ˆAJæf.Dk'e•˜y–}éGŽQļP&”Nč–e,©jÅ^dzü?’>ÕR)ī č=Ęj¬2Ćq²Ń<ݹP«Ž—3+™ž1öo'|ŪÉ=æuT·e˲gŒž3Q)[ŌŚī9ĶĢ31ˆx®gÄ~}żˆe`ģ§ī“É؏™¬eŠóĖxn溁cP6Č&½Ā°Ų#œÖ¶,–;YĢĖ$-\äüŲŖ¾!‡ķV‰4LīčpFxōĘ@źw0n¦i’·Ś "Œր#ŽŻ¢”mran¼Weg¢i×RŻZI$:‚Œ ž•}†fXO47šĒ)ł ņǽuś•ŤP»Ä>L`b£™ˆą¼‹[וį‘Rp:w5U¤[fdĄŽÕ&±—CÓ¼?¬é’é×:|«(Čx’k\ĢvBņį×Ķ ‹‘øŠisžŌY­.ZRW?.;ŃĪĢ6ü†ó¬(²ŁĮߎõ€!½I¶:°‰G9ŠIhé¢ļq޼®+µųys*źķ¦]\É)ķļ@Ė­xNĢŻÉ-«3®ŃĮäg½yē†®Ž Œ¬‹kČeĒ9’9 \ȋYŃļ·ZYĒėuł¼ĮŚ«Ū5Ī“…˜1ĮĻAļ@ć.Ēo§¼W ęK0łFMyOnt÷ÕIŒ•·\|¤c'½žŠė¼o¦Ļk‰8Ī9bų£CĶÄÆiņŖäØĒ‚”ŽGNø;J\Še8ä`×Eoum{²ŽV8Ķc'©GIö{(,¶Ć†@:›KM,.FĄIČ©U,ērŪ>µR’†0씓ʭn¹`Ģ@õ¬kąŠŪhd=ėt€ŽŚųK„$ ­Yšq„Äxlć5V3”ŗFP» Vī*ō{"øRHļCFb7٤^:qU–}Ÿ"Žō†Tžä6O—Īqšµc3“Ä~e>ßv„³ž\H»8"·b¹{m<,lzrfķ°m#³»·zśÖÕ¶q/*„‘Z–z%„®M/\°¦sJ]ĶućJ\zńOCŹ7:‚@v€eną•ĻjZ¼ågšPŖ žEI­:zœ>­ćčā·‘„™,­€Īģā¾ų»ūOxKĆsjzx‚ŅŚé%¤8ēÓ=»óM.‡£J‘ų{ūU’ĮI,¼1%އįVēÄ^&SŒZ¶čÕO©ü’Ļ5ųwńWćÅ/×ś®§ńÄWÓŪM'™ ”Gdq}@ėų×~©“Ż–‡“1ŚĒn˜UQ…_īŠĢM®7ŲÆZ±Į:ĘŃŒ›G,qmEįY׎hē1ę¹,0“›•~nǚ׷¶ņÕA_˜VnFR‘©i”Itģģ6ÆlŠģ<#ąż[Åzķæ…üį½sÅž$•°–Öp™9Ē,K/SśżŽ’ą†ž,ńÄ:7’iĶjėÚ0¹ĆŃćv8!d#ÆŅæ¦?ƒ’ž|šå§†>ųOLŠ4ųŃQ„H@–r2Ē­qÕØ+ž­…µ»3EV''ާ’'b»[jż+‘»2ĘéRޤfętļXĖqÅܧsä“l²‘åū׈ųž[ iݬˆyĆ|øäā£}ĻJ‚īskāń5Ģ:¶µe¢¬HK}¢P€jüģųĖūaXxBēPŅü.ńÜźI½~Š’dqŽø§A]–V?3|ońÄæ5Xu]Ü\ĘrŽK9*¬zgø©4ļ3FܓŒtü+Ö§);ŧƃ=«B+D8‡Ö¶¹‹e±ba#Ļ „w~š-Ī„4ms pqĻ« Jā=ēHš5–“j²i¶Ū§”“^»į­3́L±“ Ģt>•Ė;°55»Č4”å'§ĶI£jļ ɼÕGAYĘ.ś“&z&˜ń¹—9ļ]ņ]WcóÓŽµ9ē±ĶNæa¼f,X0åIÅ"Ė,ĪĖ€JA*§½n‘‰MŌnµ­ä2ŪÜ)Ē#†÷6£;GoRTŒdŠ)ƚó"¼S #Ć<ūPQ¦ĘļŪ—==+;Äztŗ|Å<P“õŠ_Ŗ1µ‡zd×6WGå8 M˜ÓiqyÉ:Øx‡ÆsIÅØ˜µ¼ :?ˆŠeĢĖ7 $Šģ·½r0i—qź­~nnBćo–~é÷Ē­¹ŅOŪ#ł[=kVÕĄ†%8›9=h‹—6‹ xˆņHļ\ˆ4±gm=Đ-†o_ҦQ¹¹ē^ø[«Ū ö›öĻ?JåŚłŁd³ÜÆĘ9=+#X6ø„!xžŁ'咞h`”ĒņīėĮéYŹ=Mąyot[›Ėŗh&EŒ{×ęwĘχ¢vžųFéå±u ¬d“: śMį=vf·ŽĮå–p„Ŗī8 ś×¦ivÉØł‰wNęĒBĄWŸUQhĄ×|?§É~e“ŚĘĒ%7d]_‡-åµ@ØĖ* ćœ×I1;˜õ6²¤¬ģ˜<7š½ąO¢jBg·‘Uę# 3Ö±ö†GŲ°ź~ųƒ§LöŚ“O1 ¾)288ģqĶ|_āĶ:Ęm{Sҧ‰.R)öĀ@cŽ÷®ˆT.Q>©šRŽiŗm’™åHöØł‡é^‡<ŃŻ ½ė]0‘ÉQŲ­¹lēFƒląœž1[÷lk8Ņ"zäÖ§<œ×V×Öķ/ļzm‘\żÕŌSM4Ź``B>éö©”NØ>‡‡|NšAŗ¶›[ŅLŸiT &s“ū‘õƘµ :ŠDŅL»¹G³hoTq×ń]˧½»/”FdeĘŒ[»Ų6šÖ™Ķ8‡Ćßk_ ¼qįļéótč'ī ›·GÜāæiü9āo üBŠl|gą½J ķ&č«Ć[H…‡ns^…8œu {nŸėĆ« ^ĀfSņ’æŅ‹ R=¦[›µSfķøŽTõĘĮhæŚŃŻĀĘ+žSxś÷ü©Iö;i'½ˆĒ ń™A8.½*•ĘŸrӉmē1 äZØŹÄ2÷•$»Y÷^?ŽÆ8ŌĪ©¤źĢ"ßui+e—žyūŠ®q#ńV‡sr‹{Ŗm†K&>`kŹD­k.Ūp9ćƒY—,ś­Ń*mä%Įä‘Үɨ\^G_K½õIö9IąX/$ø“¼Ū±šŌ]J"H²9SŅ‚#+U­°™NŅs¹»Ó|5=½·­“ŖęMū€ć&³sģi\ś_Ą·“łf;ÉÆPzę½vĀc>MĮhĻ„:dĢģlõwÓķ¤‰™ī"np£šOķ8Č€ļōaҶŒL‰…ņ,¤a¾Ž®Fö?µČÜ範_*&'”ų;G°ņÜB. {{Ö'/ćš¦Ū‹{•¶³ ūĄOēüh”{E\łƒ]ńMŽÆ©¤VÆ b~nzf±5Mu4vm6įķÜ·+œqō5œ•“4ä34ļ ^hTĘ9ĄÉ¬=D}®vĢĖŒŻeģĢö%²ÓnVBVåO<J³ØĒ+ŖČÄHąöļŠČW9mBFdȌ^㩪śF™c®¶Ł/d²ó‘DZ@Ķi…"'·SŒŒžū©VdŸAŅ€2×PKy#“YWĶčØO'é]gx#dRĒ7(o¢hX”OsČ­»6ŽęĻĢ‘ŽžNAūæZ ‹ŌČøŅ.DQq†>jĮgŗr­+×ւ›%¤ņ£ø` uŠāļģ ÅŅfłzځĢ-ojRēsBO\sXZ“a³Č…»”Õxnńķ­d“Ō¤Ü0¾€Óīō‰.dSgw5“ÄżåĒ>Ü귈Ö6z–—q;O ž#Ž*ļ,üEq݆õ#·Zd9œ„ņźW“—ņ%ņ‹į ä«+źZk§ŁŁ"`~mĆ9ĮĢ®5]N.ķāܧä(~šõ5wLŠtŪ—–+ø\j ō žaś·‡E¼/qo;“ĮČ[·®+Ķ%’Hfo5pAéÓ5.7“E=Bø)$ Ģē€ōś×[¤E‰p|¶Ł’G=«)FÅ©÷9ķYņÅc™ŽÓœJēäÕ,žÅ$I!!°µIf Ņ# ±Ķ÷†zćJŹh®­¼ĘŠs,cŽ”r™ĶØ_M;oY'Bät­+[b’¬‘0 xÅg_—EČā^2:×Sa)IPJYTūt ĶĢéä„]BĀQ¹:ryĆė2%˜c,cŠf®””üq_LųA·ÜV„Zyņ[ģɽנ­FaŻOumqŻ$r+gŠļ-|M}sc7¬³QŠ€qéAŒŒYõE@ń¹óļjædm®°Ń2žę‚ šŌ6bĘmKä/>õęöŗ|1ݰŚüÄPŁŗfäqÅe!;zõŖ÷KrÄ}Ž2¹8=+žRź2ž™ ‹sĪ·n<žkKķHüĀéŠ}+œqŠŽöč:€Į&xĄį«lW8K†Dą‘ĻZØnnGltōaö‡ę»ė?ģŪĄmtĮ ō)““”ĒB+{[[š‡Ł”{‹dŽą³0śWžÅmxˆŃ3m{«ģ_ _ųa|6¶z¢½ŅĢ˜Uæx:šAķ]U$uš”kį‹t¼Ņį}>Ėh@q“ōĻNß„s_µŻ7Ƕš„¼v’Ob=ĆęĮõozF6ÖčņK‡iØŗ¹žYy;F7Žœ אָ.“Él.ŁćČMó0÷õӍŒM'İŁĪŽčÜoĖ.;ē½z5§ˆ4x×J¶‘žĻ¬±`69ļłŠkg ūV|=ŗš“RŪ:Gƍ,Ed CD[ĒéÅ|Łį!nZŅ;KƒŖrda÷ńż+8Źé²Ö‡Śæ tČßQK}z;]V–;—*ēĮōÆf²ųįK›ÓØéŗXžŌUy3nĮrO8±µ<½…ĻcåoiVZ/‹n‘¬ŠJļŗY ņÄqóēšśįWÄ[’ H’f¾ø†Ķ¢TD sŌ}(qč\'ў+ūRüGš§ƒ|o§jžµšĻR½†%¾2K„;—;€—é^QįÆjšö«g„7št¼³±ā#Œō„Édt)č}ĖšcEšļ‰4éµK›«  扩8'#§üEzÅ_ˆŗĒ¼)wżƒ1ŸRhžR€Ÿ,`‚±‘ĶSsó&/jž&ŌogŌÜ:³:‡=@éŌ×'©xrÅŻL¢»ƒŽśŅŠ1q"²Ó.®Rm8HŃdŒN7Ž›įļ k^ ģ×TyģŻ÷(;—<šÕŁU5cܵm?^ń… ¢Éo>aņ£2 ;Oo˜ōÆŠ-l“}F]Ę:é“xć‘Y‹įN=8ĻNjŽ”ģKš—Zš®ā­pFÖģŹ”9Ć7µ~˜|ń›ųmĖ®ŪÄóL©"õPsĒӚLM×ķgą»OŒ>xEؗ-8”»˃_ŽśŽæāo†¾ øšī©{yA2DZ3†ąW^µ… .‚č{ǃ[³ŗ‡ÄZB“0»6@å\œuÆ[°ńmƌɨ5Üq+·Ī²IéĶtr#Õt{ĮQŲk6Ÿ,įM>tC2ÉĪČÉĒžį/©x[ÄŚŪŁxZń5 ;ĶŁļaƒĄ5›§ŲŹTī}…'Œ šOĆ{Ųōō²³Õ>Ģ]‹$“NõńĻĆ­Ä_Ū^ńF­§0_%¦ BÄwrr;ęf(i¹ö—ƒ“Ļx7Ā6Śˆ¼IØźBVF2šśWĖ>"K«üFš?Š<}5īkuK>Ó ē zņ3M/xŻ;Ÿex»ćŪkŠĆÅ:®·§]Žx–=ņ޹ķÓ­|æąČ<šŪāŒ>8š4×ÖŚ]ō~]ķ¼Ņ‚-ŽyڟOóÅ\UÉ”O ż„¾'kQ|EÓ|į}FtÕ,\-¹ƼcŽż+±šæĒmc⌲j~*Ӓ[Ԉ£#.<Ń·ćĻįA‹CFÕōĶKPŪ”žkiYpŹvšyJĘńœ6¾ k¹BZyĀȠvö¬¤a5cĀWVžó!šf„†Ūƒ gŠj¾»wÜa…¼—|ķ^٤¤d›'šż¼Z§4–o'Ÿ*Īģ…(ķÖ½;Hž×W·ø³ž7žUĖ`ļG35ŠĮŖ>—u1Š p_9Čō­ķ7Ą·ŗ ÕÆ­dšM:óüż:ē)ł йŚ|ų]x–[ĶjKk©ī–²O’”³×ńÆ“¤ń?‡|kØiz„Ų““øąŽmƒzœpV•ŽĆJēć/‰|eāYü]ā ¹‚ī½g¶“$–BrøÆ5ųkØ[źQ}³G»Ó5Ąr…v©Ļ =ˆķ[Gb¹M85r- —K¼’Ņle6¶0}µ{Ā]bīöÅÅaę›ióeŒ:„RW]§[ųŻį­'QƒIŽŹ[˜$0ļĪ' q\Ÿć Ć>%“Ä nÓi‚Atc-øīp+Of)@ż]ųāχ’¢ƒ[ŗū-¤×1ļFUŲ‡÷©’ ø?ۚPÓtŪØM©ņ]¾rī“ӁYŹ$ŖV?'uÆI§ŲŻZŁÜKoÉIbf ©Ī6ćź yOü#ŗžū­BX$f ^&A—ś{óHÖ*Ēq«hž.{M® »ŗŒ¼3(ŒsœWMsāėKmoK [Żč7DS@ąmUź;zS,żcųQć­ʞ±ž”ŗŌ0b”Īsüøł‡ćŅæ:ž+ü›Mń^æŖ-Ęż>I¢Xų‰9?KdŁ mįėGN•­¤¼H.3/tĪ1łWź„“Ÿ†ZoĆ’ģ­zŅķ …mĄ;$zcŚ˜Ļ‰¼oš’Ćžžņ’Ćö6Öépűn~S’føŸ…WSéšö™©.гGö”ēĒ3ķŚ3ÉŖ‹ī3ōOĘ+”ųĒĆ7³i:vŸ©F åGĻ!ģ3ŠłĆI՛G†öŹŹ%7ü‚#m¤·Ö­¤“0rgi7†|P<1oŖXG$sFŖóĀd,0HÉ9=k‡Ōõł“D·»ŹĀóźżu™qs˜ń‹Æ ŅN¬ķ-Ņ ÆÉü&„šN“śÅŅ2ė™ˆČĄ ķÉōÅ"¹Qö—ĀƆ¾½Ó.5{j)ļŽ&še‘€‘ž&ŗ+赑įżVīĻPTŅa'ķ–ōćæ’^“‰œ |#ńĻXńķ‹xjńn5É+ū²€{÷ÆŖ~ü]Ó¼ąóįŸų;ČÕ¼Ö?lą0=‰ōā˜F™ÖxĄųā?Ćm~;Ma"ŌŌHš"Ģ71ß½~]x³ĮSŁķcV„iŻČ  “¬x¾­²9$A F“žk”ƒd2±Œm78ī}kJe^~Ī>?k fėĀ·R-µ¤Ŗ«Ł‘¼sŒž5śit YÉqŒńW-…af8 $Ė?׌×Ėß>ĻŖŪæ4tk{˜£õXóĮ$ī\zb°ĒSā˜ī)ͱmšū޵ōßģŁćč4Ļk>ń ą’„j’gŲ”?v9F3ō ė‚=šOˆŸ?eŽžų„į ‰-›OŌįĢ$ŖĻoĘå'ø"æ¹ß„ģ~7|&šĘM īÖ÷NÖl¢ä…²¢M£+łƒł‰k¦ ©ģžńT¾Õ?·­É…Š~ńGńØķü’:śOHń_†>'hpxŸ@†Sfū‘ŻŠ©?B sŹĆ”Oˆą ß²†æmOŁkĒõŃ`ų‹c Ō¼#zƒu­Ō2„|d“©#$+ƒŒWłóxĒĮsh’ˆü'āķ;PšēŠt›¹tżNÖS»ŹøŒ•;OpJžµęēk§õÓń9ębx į³ųž{ßųžiś\Q£*$¼nHžX®#RŠļō›ĖĖ;äo6,żŅ’§å]Ē4»øæüQ¤ü,šĒ-GHM{įżåŃ]KÉ,$“@åNńŲeHĻÓŌWūC|%šŸīP®:&+@ź‚>;żŠmo~Ä_µO„¾6Yj7ēĮ÷7«cāXe•„–r°ÜĶčĄ€ąśÖæŅWᒌ4/ˆŸ|7ć/ ]ŚėÕģāŌtŪØ_zņć¶O#ŲŃ ŃüæßiZ¦}{£ėVĻm©ŁI䬄į°:®+6äym•¾¾•ŻN]j‹”•!wĪzw¦4%ńžžÕ”ĪWš\8ē8^X‘eFŒģ^üõŖR° Öņm,ŖJn“…ÕĻ'MĖ Ē!O~&eüͧūµō˜^}šāŹā° 2•Œ”$uÅ[šAŪJļāOĆ}KöLų¬Z¾½”Ä&šäó\vž‘Ž=x'҆®¬wÓŲžŖ¼ā+hŚWŒm 6ŗ„ń.ÕbÉe8ÜGæ<Ÿė^Ū,0^[ØŪ• t®*‘(šŁ˜ WūĖņŸzžS’ą·ß°ĘØ’ĀAćčPپ§Dø¶`žN§ü|Ūķé¶@C€8łĻ„r‹•Ēķį{{‰,frn°u+‚¬ŲƒŚŖŲŻ<,[#vzgµ9¤;ŒšŅKn¶īDŠH9ī×[ Ćk$Kuoqóķ;vōÆ6¼NŚ2>‰š^«„xßĆZ‡‚µ‰¦¬TyL©Č<Œ_9x£ĀZօy¦ėvļnöE+®Ń7^ƒš¬i«3ÓK æę—Ćæt›é­šźÅ¢hv†Ęę' Wė֕%­ęļµĒ2Mž7Žsčkڦīt4§h‘£‰ņŁ8Įō¬©,÷H “śšģ<ɓĒĘ mknĶQ;Ēź¢‚ ĻkÉ!9ÓķµtõxŲ¹ÉĒƒXÆį+‹gżK•‚äćj·ńV?ˆ¼?™tū v-ž™šf‡1}„$ÖÆ$jŠĮsÖø%™d,NxĻjB5l.ŃœŚŽF6666kŅķ“bŃ)ł#Šę×R½…ĀA{ Lļ“€Źq­Xń ’ųzEŗ“š;Ø„šÜmĻ4ģYlx5^Å„ÜF—ŪIU?Ā@®/ūwSøš’öf§2ŹĄn tnų§(Ų æJŗT§É [s`cq÷ÆY¼ńfœ¶‹f’vaóom>޵ q1j0É>6ģf=ϵ5{s ū#Œ3“@ĢÉõ}NuµŲŸ Ąążk™{§¹IKvŠ@p@éŸj ҶƒaÓB²»üÕ͈dhˆÜOw«ę¦šōMsŁĢvȧ Łķ]-ʝ ¢ķ%nēÜŅ“øč×:„†­ ¶nŽ3ūĶĆ /Ņ»™üE×Ȳ’Į5<]ā‡Ņ¼AńŹćžŻ-fIŽ–?×O Ēšź+öæį×ĀæųEO x7Úo…ōO-|ØĄyWż¦ž”Ģ[=cGŠŽÅZŅŃVLqøv®¦ŽŚFRnŪĢoéA„ä_Ž$\… —*(9›!yg-Y÷—ĀŚ##"ŸZ „nyę³āx”ŠCh£żćھ{ńļÅ]Ā–ņŽj÷?0\qéI3Š„Lüpż°æą >šn™qa7‰ü‹Ü ņŲ€xģ+łšųļū\|OųŃ-ķ¬ŗˆŅōi3HöŹTuóėœ ķĆQ¾¬źŲł6{·RJždŒē,ē$žuPĶ#nhČĻ\ö©Óå8źŌ `_’@üzŌ°¦\ŖąØą“NR8§#B•7 l#Ó„O%²7r9mNŚya’t“k2ń‘Z33ŻH §sf€7ć6ņX½²¼I2'‡Ž®SOV±½‘®ćėƒÅŃ©qØiĘ2<Ų ą7Ōuƒ¼āX’9¹ąƒÅ;ņ²ī„½]!ņB°éļT.,ēM¬Wjœu¤"(ņdBņßtzV°“•ŃåĘ@ō ¶ś„ĮCg#ŒŽEbjÖ²Oo!ēć= DĶŃóźxæW±¼Ō4˜…½«øĘąy’õVkčsµ×Ś­€(Ē-õ¬Ė‹ŌČń­Õ¤Ag·a»©"¼#]Ńä’fø‹äcź)˜—mźŚø(ū0AĒØÆ™> ųVÖö ø n8bp+īt#ņ§āʃ¬xOÄæl²H…œŒ‘†ˆt9źGLW[įżsPxćuc+ĖᮺŽĒTgžä®UĖIµ¬.×*ķ“g5äÖ;éÄķ­­£¦\Ik©Z„ĘīÜņŲī*;»/ļ/téµ#O˜Ę +ļ^|›;©@ķ¼88ZźÉäPÄ·'¦{Rźyŗ…„̶q5ĀČ 0ä·Rkjmޤl}§g¤Z^xnŅŲj0ļņ÷ŗ`‚­Ž€ÖWŲo­téi#ŗ‰OŹGP=ėŌ¦yՑ»ci`¼cƱ§ē#Z-¾1Ē_å]š¦qićõ]-äø±£ČÜ<T<'ćĶjä,7ņDŅ«ü  žuæ²V6Œ‘ÖM%ńkKÄqœJź=«äŸčI£j·V (·ÜĻć5ĶR‘\Żń”qXÜ]éó#:‘x,{ŒWŠY_ėwzóŪX•’Eį¢)ĻåJœAž§ß9Śß$–÷ N9⾬ż—~,]xÄ>žõbŠ/$ å§ŻŻž:ńž3]ōĪil~²hŽ1Ó„xćžX匌+ŽžÕŚÉ’)ł‡½jrTGoį3 wQö:Õ6WfR Bč}{VÖw³Ļ`Ķså¹ĮjvŁē~,Šļ<3t±¢ĶdŅK”ł_9ż8®ßĀ+$Ö-żÆinņdģdĪH­n·ĖÓŚYŪÜę˜dä«•£„ģ·•žXA·<īۜT;tµ~”āó- OĻCÜV-¦£\,3FčĄć§éS`¹æ7–‰•Ū“óŅøk™`¹¼eq󎔀ĶÕćҤ¶’\˜&q…B>÷ć_/xŸOk;ŁžŲ»üųąēp  ˜¤•nQ~aŒÕY÷¼­;lĒ)é@ĒGjņ3Il|åĘx<ŠdŅĪŖRHåsڳ”ŗĆŌ'Ęéwd—GĄćšĄŠu+(u3¦Ė ֗Äåcd<ūƒŅ³.(õė=ZėJŗ·‚ī;ˆ-ä\‡(võõķ^łįĘO²£F!ē ꮉܟ6H]XķX»xŸaX7ĄoC[ĘV$· ]ł@“ŗ <×XĀ€~šō¦ęĀĒEm}5šŖ[.W¦\Tšļ…ō?Ų½¦¾³½“ƒkl<֑•Ė‹HšMWą×…ü7ö™4{‹Ø£#zX±cčrN;×…ź¶–ŗćŁk–0Ü[!t’ėŅq[³Nd2[]X.ĀéQOoE»Ł*l“ČÖ²3•ŗšt0Ok[ˆåõĮļY”ŗ²f™¢h£‘¬źrfš¶ÕxČ9' R•EE– “×t5…¾ŠĮfV¾ćÖ·­l!k|FFĮĪ   ŪĻčח¶3ĪBĶ‚m5Õ¶›¶ųmäyTާø KR³†ÅŚw—ÆéT­uuG¬Ä«pFh*.Ęģ”®AhŠŖ‘­k.«hé@›'»½’śÕPĆmŹØż}k’[„ćtåXņjgks¬Qī]‚*®Ÿco.HMŪŽrO"€=k¾}FĄķ.ćĶm]|?¹²rҹŒ‘Ē_Ę“ŒS@yę³s>›tŃĖ6Į°9«¶÷vZ…ŗMc:ȧ‚AĪŅ;Ń#)G©cū^źĀ1b[vH=*¦£s4° –MÜžtc?MÖ×{ˆĮ(nÖ“ŗąlÕRU÷ q3ožēSo“ ¤Ź pk»r³(š3r¹łČź(¹nĖIm,Xį_•zW!sØåžŁŽHĘÕēTJD8–ģā pN’.1œõ÷¬żKKµŲä8Ļ^sĶdks‘Ųż£÷l»Šdza± –ņ4ā#ČĒo­„Š– „²‡Źkh]°B1ĻÖ°RB×N “l}:RøœNĖLµ••[Ķ|Łć5ŻEc;ņ€‘{śž¹‘‰Ņ’gjYh*ś÷®T°rö6ńÕ=*ŃV¶‡-Ā:¢4?e~œõĶušEķ¤āGh’EźkNm Qīek×W÷ pžD‘xę²¢Mm¶0‹“Įb„͇/CZ+L`-&öl„znį9’Å «=XēŽjAR8ßC-ˆšŽEÉNO¹Æ"‡UžŁÖ¤Óā[XćŚw‚N~ļč?:9Šögm<3Ś k™Ö`zœŌ0ŻŻ4‚XdX­ći ēÖ±”„”Ü«w-īö{Vpp¬Ū+›ŅL—–`FGo ØQÕ¬£R€E*n€ŪĒńW«ŚĶ`ęāv—ĖˆsWŌŠŠ¶±·Ö#mIJ69ś×°xV(“F†{„dł†ć¼k¦šŅüEā k;,syš˜"6ä.;Šł®FŽRhāS€Äuź+C:†üzœžDŽ€ļé\ˆ¤QrĘ«q‚zÖ2ŒfĶ=ŁßCs>ҧ’k¼OiŅZČqp×åČ"šFIŲęnmu "Coöd–Ģ&CĪ}1Ņ–Ēū5µ÷$‹pŖ6äü ūv­@ōȵK_²ł,ˆ²…8ė\v„2\‘õ4œ¬oŌž[µ]Lń&±ęiV°ŪŻ£•‹s|±ūp÷æ‡1ü3{ k}–”eŻ(Ł€\ޜō•M,x¾Ōšæč“iž(æŃōż>7°æ²Īѐz}kŌ|Ką©ąXžŹ²é÷ČŖū¢łK€>ėćšÓœøÉ½O5ŸÅ:øŃ¦ÓÆee¬7džµ5%±·½v½ņęmĄÄē™ Ļ#łÕšøžæąĖ„–Yluū€ė"Č”Ō`EĮŚ1Ļzīü;į§Oj–VŠC}(‹ĖŠW“#wvōŸųź?ųSIJYkFyšGŪ EaMŲąVļ5+ķ/X‹]Ļ5Å“€†bHŒ{zPt«S_|b±ńĪk}imŖBąĒ1‘ %±Œ®}?­x[če|­WIGµ É'OJ˜Į+Ū©:—Ćæź=üpkAįłĀ«»­Ī21ėé_ni>-ÓŁ¤K+¹Ränj©ąŸQVsĶks䒌:Œó,Œe]ķ(q€}ūכ|8ÕüC©„‰ ÷šYø+(ó0Bpy”®JџZ|eš/ĆMOƱĻć tKćf©F L‡īcÓ·JųæįÄ·^ ń$ńĖp°éĢčۘžī5 óŠV4¹¹š–ĘŹLżuų5sąŸi–µ¤^iŚV±F[ˆ`L  2śż+‹ńŌ–¾!–k?µ[¬%JaĒ׊¹Rfr“?:ŸM»Ņ>"ÜYj–ŅM¢9vB˜5ÅÖzv¹u“ FóJ™iRG꿀ąŅåč-JšF˜mõ kH\G(É'€=’*ō?‰>Ó¼YąČ,t}Oģ:„+B9iĻ Ļ„kĢiy”©xĀ¾’Ķ...nbF'?ųƗÓŠ›72œuĻcMź„{/ÅvÕÆō™Ć:‘³”œćsŗį#·jüūÖü%wÆkw1x§Lšk„ŚĖtА²zsź1Xģõ&2;ßč~†m/Ze„øŪe7 €ķYšß†4xzņóĆ·Ėõ¹2Ū¬€”'ŗ;’,U©#E#AŃ/>+x:{]_R[]FĀUŽ(ŃĘf#§æ§¼’įž†Žńeī•§3]Į?ś;Ė'“ĻAéLn}°G‹¼ ­ßŲéŽ1¼±ÓmĪlŅqĻÖ¾»ųuyšŸį÷ýE¼!ć I„-%ŞÜš9ėA<§æž[iZæ‡üI­õœÉ“G€ūÉź=8ÆĪßźŽ¶ńm“č×+‰=ŁY7ō‹:qŪ­+kr­f}²¾3šn·šÖNM&}bŁLr2°GuĒßõ5ńm·‡µßųŹĀćM’{"āhć¹ßr¢ŌgėAē®|@ųw„jZ܁a_³yŠ?}óĒń W1£xcFšģ÷G™łæ>jyɹĘėqŻé~%½—D¼0éņ®uĮ®»įļ‡ąŌ/nļ®Ér&üž™üŖŒFųćĆĮßm\[>zņłķOžµy¼K.Æķm w‰ö¶ī1ō…c“šņ<(o¢h•ņ+äg‚1ųt­8n.-ĻB¾FŃĘOØ«ŒŪKżj]RG» –2Æø–Ļ„R×~.7‡u k OūCģ ąq”ÅW"-Dż<żž<§I”č~ »¼Ž÷M¾UņŪ2F ĻĢnk°ųßįĻ źwńĒZĖ,8Ać“ŌóÅa$Č?6<[į/ÅńÄŚ\K¤x…eŻß .OĖĮ«/ć7Įė¾*Ó'ÕīüébAµĒܝqKzW—3Į%š~±…̱)˜ÄX2Ä2;‘^rś¾µ£ĄĘ9„·[€P#9­ĶlEį‡~)ń~½śtń¼Ą ŹÄį†yP=M}x?gŻhśÖ™gŌmķÉdułĘ{Ōō­]“öUų„¤išüß õ]JM3Ävó²"H>ł§śućĖHµ-]wWŗƒIŗHr„”)ƽLåq3ņoĆŗ%‹>%^h·Ė$fvmć\nĻżõĶ}7ń+ąMʏ} XxjęÓEÖn0c»ž0pr½‰#R™™ń³Ē?ģ|3”xßM¶·ńZ/ŁVhį%F #ś×Źś•ž›§ų—Ć~&¶ŗ…“›ł+»fp<†Ī7}E2”ĻÖ†šŸ‚Ī—0–)ģ5ĮĄŚ dćš®'öųu}ÆxöćJšMÜļ Č©$r¼8UÜ9_~xü3YĢrĻ¾x> xēRš‰“Čg“’Ó1ŚD¹čםtŸLc~µņĘ ėūIF—feÓˉ76sĪGēH“ēmjśh–{A#Gµ~ćg j„ž ‹Ių… & ļ™q'—~Ūš‚?āĄõ9­b„ä~”ųƒąéžŌ>!ü)ń ĶęŸ ,ÓiÆ7;9Ś;W–ŽOoć±Óüā6ūMŌKØ[7FPæZĶö‘Źé’~(x3ĘzuŽÆ'‘§H¦d‘ŌÜżß­zOÅ认²Ņīe[6¹(c•T…dpvžU<Åł~%Š ¼” ^BĘBTķĀ^C'…lõ‰Ņ@¬Ģ'‡9!¾Ÿ0gĻŗķœZƒM=°%FryŽv¶<£®Fjiؘģ\Ń5-GGÕ"Õt’žrüžIČćņś»š·Ē¶>7šf—¬!Ž+ଠXØ$~kMŃG±Åmk5«I+“)8 Ū5›$n`¼²’¹‚hšQєö¬ŒyĢæŒī¾x‘eˆ¢ųzņVk6Ž¢õFōÆ-Ó®fMB;»Łwo(’2O…e)v?Hīļ ųÅšSI½ÓĖ®µiŪKĪą¹>™āæc?ąƒŸµ īƒuā’Ų§āuä[ IØxViIŚ Œ².NF$ž×­M·Gm%„čW^¹ŸOšm5įt¼S¶EīµõßģüÖVƒĀź@<“)b2Krk’{—4?ā€ī|[į}ZÓLøm?Ä6źnlnįµ}ČÆįŸž —šGQšŸÄćńn;GžŹńņǬ4q|¶w‘1łŸÓu8K”Ļ(Üü\XjÖ÷r§C•<0ķZz”æŚĮtó*LĻ…åÅuĘW9åŗš_ķń῀|WšŗÖk_ųVY#ū śļAĮÜa=¹$ąēžzׅj+wgmlXD‘dDƒ¢Õ+\Ļ’Ē}lęFˆƒr8?­zĄ’‹š÷ģåń›Ą’“:śŚĘąCŖŁqwf’,ƒźäz*ŌŗĒĢžŠük›Aż¤~ ųIŸąēˆ`ƒT–ÖŻUé!˜u”ōlƒŽ3sćoüJóį÷ƒŪĮtXSėq²_Ūy›`“ŸoB:täSŁŃ ßæhĻüGs㋾;ÕüQxóŽÖyŚHa\}ÅŒWÉ¬ÜÜ>ߔ*pķW­ćPFū£–śœF{VRÆāæ®’ų6ūö÷ńwŒ<®žÅ’Æģ®u @·™¦ -õ†ņ<² É(H£Ņ”££E¹ŸÕōŻ47J› įĘ9±/¬āQ4,””•qÓ¦kŹŖŒ¤Ļ‰>>|3Õµ;aćiækń>‹ó]@˜G»³ž ń>½½ėäßų[Ć/Óµ ¢?Fń%·Ś4’0ī[+Ą3°žŪŽANEsÅŁ™ČžC?n€š§ĆO‰—Ž$ÓōąžuĆ[jŖO0ķČ _^ƒĄEū§ŒŽüWm&sUf4ń•wŚUøéQĒ3Āŗ¶įé]'$ˆ$‰;\Ó ~aabL`|ǵSE!K:ˆĒg„G"²€įóļ֐ ”…2‚=Ŗx÷yƒw¹¤\BŌkƜē×°|ų欞Ļ_~ü^š¼×v·ŗmōfäBĮx™€`޼fƒ¾”ō0ż’hļ ųŻ|3ćm\ŽūĄ/‚(®`ąY^÷‰č 'ü=kõDYōşK»Čb$ÄĒų—µrŌGBˆj> ¶±‚;Ż»ķ·łr‘Õ=Ķ|ńūF|ŅhŸ…~1ųQ«"=Äš’hč7™ŚÖ×h ]­Ū9*}™³šāŗē{ūxžĶŗļģńń¦žX”ž? ź7“FѼD=•ź’²Fżł šųvļżŠ8mÄću1øŲžŚįdóm½N:“[ŗf±sc%·Łįł†p?cRM7©ōׇ–Fūˆōų’G(lcīł?­} ć /Ć_| š^£n¶¢ ’+Ęl»JĄ>€šņ„>Wdwsõ>.§įMjÖīŽó7Ö7B]źs¹Aä}+õcĀ:ēö¾•¢ŽČeóe·;?ńœœŸŅ½¬5Dć”Į‰Ōō+ķ˜ąĄ«q°ƒ V§Ūļ]ŃŲņj"v‰äQ"€Ąń:Ó¢d@Č@ėÉ5Fe輆V*™Į¬ŪŻ6RĶrÄm Ö™ŸaØÉa{‘ WęĮ#Ņ»{»ū‹ØŚBĢšŅƒUŲ́‰p®’)ćŚ²µ} ŪÜ3ğ)¾“\¶²¶šÜ !Ē śWC§ŽŚŚĮ-…Źį”OLŠ`ĢV¹ŒÜżžU[8#µjK¤µż‰µšI%¶Ūµ[w#ń¦8ŹĘfį«ż"źCpD0żčŲńø{Ó5É¢ČĀķ|ą‘ŠŃsc„’į÷ÉäæČxéSF÷Y@ŽŲļĘsHÓDG¹uY-Ć =ĒŻ5×\Åöc’}EUv±0 ƒĢ^HĻQYn˜QćvQĘO=3A“v3ķ-‹‘Čv稩RK „wī8ńA›‘¢Ŗ³FFžö1ƒJŗĢqFĻ3fCŒc­¹© \By’HŽr¶8"­jLm2N„Ą#ęÅ[Dµ>ę芼+h™Ł†ŠIĮė\ꔩÜö}{ÖL9ūéśÄjń¤˜PĢOÜ\éqź«" p8ėHØČåoōs,®qēt®5¤žŁ‘"…VąƒAA.»ö¤e1˜®3ž+>V”põśšŠ IÄB2ł8®Łt1$K*ƼPmS[KK)Ȓ?Žc³o™REĒoJŽBÉÓ_»ŅŃY|ljøĄ Öu“Ó^] ab¹bNi7m€öMM¶{7 LG~¹®_P»‚Śy-Y/j†ÄWŅ<½BżmßbAКīo4[+U nT*Œd÷¤os ŪQHf©ł³ėV®¬#øtøgąąÖjZƒ] wk#Ų‹cģ'ƒŠĶŃ|©ės}—NbˁŌóŠfš—qŲōķOĮGĆĻ ½ōrC*‘ŒsŠĘÕļŒIp8«L9õī i.$V™8ĮŖ2ėl¶„`™6gk.iŲ ŗWn,'·¶»W6Œpė^·c©éͦ³žĆ,C©Łź·ŒÖä£łqšf»%½²n„=« 9»Ė»`C+y°’ÖgŚģZTm›zšÖƒŹeb Ż=j,ē!"€ DUÉąœÕ)"e9ĢĒҚó U‘Kņ cÖ°”½Ė9ed ķǦ+p,,{0;Ž~µaQŚ@Ąw   –';¶½+(¦Pļ4¤xš% ͆ļWg¹ŽÜüÅgn©“Šiœ„ēK(Ę]ėW­­ī¼²_/x# ¬†z‚mŠź!ī1Īzž© Śź{”ž%CēYOsDāp2Įoỳ #KŒÆŹ~÷½r:õ弙eŠ W•šĶōź£6¤>~Ⱦ:Ogy~—^šd’×Ó!Ż,Yēhõ5ż|ż”~üŅ­ÓĄŚ3źšÓF}RńC6š9dqßéTa)t>”–; 2Ų%ōæn¼2rßJ’ĀĘ÷V"I¶µĻ”"ƒ K”×Łé¶ŗzn„7rOZŠYƒ“‚h9ęJØ„¶Øõ®Z’YŸqKl"Žēø Q‡sœ—Å0Z»(Ä×^õē¾*ń宙`uZö+[2åH2ƒōĶ'Ųķ„HüŪż¢?mæųIŌŲjzU’µŽP„¹ģ}kłāż¤ą¤^7ų‡u©č_§’ĪÅ’w.¦ēęS耶Vō)\īŒRŲü¹Öu}OW½:޵ŖŽjڃę\\HY¤$ūōü+/ĻWgĘź÷(ĀČʬ­”«6cļĒJ‹h.x8tė[Ng›9“[@™ÉēZ6¶ĪT€cźsX6s¹PŚn}Š„”tõ®ŠĒK‰æ}3 yŪ€) ś‹ą?ģ™ńoöń@šĻĀŻęœŖĶØI dE?Ä? žŖcų#ēĄO€COńÆÄ:ĻāgÄĢFļ%҇ŽŅ@v©éĻjĘ„Nˆµ+±¶Śm­„¼6vöšYŁG T@µQ*årīHś+31‘ŠRŌ²R°k:óP·“å–E{Ö}NštĻńÄV·Žā(y‹8Ļq_"|Wųżįßéę’RÕ łŻāHųéXnĻJœO̟‰Ÿµ7ŠüP÷vžˆhZkI#9.éźük囻ŻSX§¾¾»½“'1Ės×šŚ3iKA±Ų’!‘V¢­±žuŃc»ši,S(ĘōÅ_ŅōmCR˜Gn„Óv cķXÉźIėŗƉ#a-ŲVnćŌ×µh>“6īČNų©.‡æxwĆ6–«¬w¶:}jķž˜×JŃ$HéĻŹG‹Ź©ęZ‚“Ūmb]B6÷bL° Šõ×¹ŽÖÕRL·ČļSȈu)Ūi–·8øRYzõ­#¶³@0®½żED£b\ŹĆS†$xĄG„ž•4SYLR¤téZGc3šĪ©Ūź#jq§’v«żå9õōÆHū¶Dމ)9Č皔wr\ßE¾¤ŃČŹ6¬€sJāļ’f{U ©=i #Č4 :Ī‚UÉO'óƜ~3ėæ4˽.ćĄzgŚ>aē‰TŒ|śŠk™į}OW¼±“øŌ­žĶzŹ ÆūX®ĶēbV]ø óŽō K%ń`k@ w«q[›¼…}¹ŪA‰£įKĶ:ā+øŒŖĆ;{YŽ{Ÿ Iö& < J®IČNÚ`z„:‹­Ż˜ņ›Óҳ.ļó‹ČėŌHĪhäŸĆęWKč.gŽlœĒ»å­›īķ÷C¼²ž—ŅĪ É()ßpź+:ęā"%ˆ2:¼ ĘE ĒcąüDÕ<9ń:ßLū Ka+&Eūü’õķ¶ž9±KyŚĢÅ c*Üążir£ušÕµ_·Jd™ĖŚuĮ9Å-΃„ŽiāöŁć‘HĪŚžTŠźõåZķ¢j>"µŌl$’—ŒŒU\B¾+©čÉg©FgDū„ŗ©ö5—r–°$#^Ś›‘RÓBżÅÕ¤Å|ĘėĄaėZ1^K ŚHŅX@į‡o­#);¬‚a“»šŠŗ›NŽŚJ óėĶjćs"¬RI2…“ ī e]XĒ ÉeÆ\õ¬åv9?ésµ©½µž1ņWw"¼{R»Fuą…ę^¹ĒJ“sžÕ½Õ»H®üuZćķI’v“Ś6·$ā€6ķ-›J£:*1Ż’qTM>Ōl’0Ļ‚£øėX5aż½µÜĶ øb9<抦žX­ć1­É‰Ųćš@A¦ŪÜȱ¤ģ“ä 1Ÿzļōķ6čs,rˆ 9éNĄaėB<č„aב‚:W”\hrMt«°@Ł_b‹éZ~ƒ}µ¼Ū Vł©.ģ¤Ó”Ćū¶8?Z@T’śī(ɶi‰É¦=+2;ūK„ŽIQ”“ū§‚)I;Ę唶30p¤‰¹ak¢—CÓm灭Y!Œą]Ķl‘ļ~²·‚Õä‰ŌČ1Į®³Qī­„ŽB¬ ā·ŽĘGÉ^=±†/¶Bņ4-‚{é^)į ?įŗkø`ņHd*NC{’*”ö„ö’å]KwąÓžŲŚ¬s³c±ō¤Ż¢…ŗĻ$Ķhģüóģjäјcu9Ī+9IŠ*Ś Ū `cxüƒŠɬ{†ž[‰H€ķϦ*gI«Mc:ÅöbčW;CųQ'Ų¦‘%x”Č܌ކ€±Öi:$Z¶Ņ;Æ@9ĒjŹ»ŃTLŃ?īŪ'8ė@ö<6бI_ØV\–°¦wås׎VƒJft–ß8•’[|øę—¢Ä }:Y'Æļ7®ŸAĶ`Ł©§a§»@Ū%)ۊīt–žĶ"As*@L Ņ3œNŹēÅoc%­ń%T%JŽõäz†²"žį$$ĘH9ĒjčJÄģrSŁ_>ݘppqߎ”HĢ”¢PžQļ@¹+M"ÜA$B7U=rŁęžšm½¬lw!]Aä Š.c.F€HfŽ6Ų\v®ćNÖg·²hc”ł\6ÓÓ42ć>ē'ŖN—Æ;Jč śŅ¼bēĄ°ėć_²fK§eBž]+73CŃ4ų'¹Ł ŌćéøŽV×,¢µ^)Fy 8˜3O ŚÉ"ĻąyŖZ}Ą‘1"»»1 A…ĪHšŚÅŽI‹Æk;RæŠ{ĆŁ%šŻP+hlm±×xsHū<¦{d»G޵źķ¦=Ō«÷cŒ s]1Ų8[ŻI¤ŗEö¼,¼føKōņgó‘¹^ć½3)35ÆZėµsœc, ĪńĪ»æ»ŽÕŒž¦r] [4lö²4,Ī3ŽžÕī¾ńWmŸwdĪŃ®ę’"11¼K}u$ÄŪĆäĘAąs\mÜÖó©xU›©ę·ޤ^=Ś®Oʧ ¬ĶF;Ł#+•łĪŠy5‹L®dĄ7š¾™įżRęź7xYƒTągŽi­ć- õmä\E;ŪŚzv®Ŗrlņ)„#Ėõy_Ćŗ¼šūDB_ßŪ“œ=į^ĖšK⇆¼{Æ[č~'–Ž UdZ|©ltėļœWu8 ŸcĶ’hÆ[hWŠ’aiŅA„›ŸŽJx°}łÅ|¹§­żåÓ)˜Į+gˆŪœÅlRZj{”Sėiāą2¬‘‰īčGQ^Õąo½Ŗ=”›+7ŹęS€Fr0Š5ž)ź^ Õō¾×s§vq~ņć©ojłOÕōkZXŻ^4÷` 'cÆćHŅњG¬mmu@j(ÖJ7ÆĢ0ügƒļ^ awØIā=BŹ#< 2››‚Ēų@ō jg;曝^K½=ā&·uč1ĻóÆŖ>üVšŪé:凊ę=kĖ lvń#ąēö’ åecμC£IŖk—K5ÄņŹI~ąTĄŌč“Į-‚čŽ †`Ė"²ų„L¶%ċā^»tŽ·Óousö;i#v(ŁyJž2}8¬ķ_Fѹ©ip\vń¼ƒyē×ų>=L𩱶”ŗ29cŒOµg(ŲQę>1Z .ķ¬čĆå=ƼźļYŌcH/į¼x-Šī+Ųżk9-I™z‡ˆWY…OŚń°!†xb{Ö~½ łm¬šŪĘńł@®ÓדśŅSčtBG5¤_G ͳ]Ād“Y‘Y98Ėœ}kļØ<-į»8¬u;M6(/B,”ś•AĘiĶ•&%·ˆõ+Ż^åm„K‹T0£ęWJĀųā=SÄ:Lɧ¤ś²H›@ÜŖ0OÖ°–ä3ę+„Õ5ė[xµHĪ‹©Œp9õ®æĄµ¾‹ā m &{f™ĘÖ# »ŌžÕq‹5—‘õļƒ~iÖ÷ė~¶ˆgyLÓĒh¼·ūE‡‡qį/jž0m>āi,üߕ[;‹8?ĪÆ]‘Œ¦Ļš’ioƒ0ų^Ž]oG‘ēŃög÷ Wäąz+äé ÖoYtæźdÓBŖ6Āž^™¦„ÜŽ5{ŸL_|ÖüGįU–žītÕķ2ĢFĀļčMx½æĆ[jŲų–->(X•XI!†{ē½>d9VL÷Ż'᩹Ӥ—B¹xo’"źGVQŲœēš®óڕ½”FŌ-m“Xfž#¹˜Ćņ„ĶŲä•CŁ5«ķ6Ž )5½.K‰B¢mB$``šņü?[]7Pń<7ŗŒq[¾õXĘ|óżßžµG#esšų¤čŚ—‹¼7y«[&ź]›ę?źĘ;ÆįŚæRuļŁ‹ĆZg“ßųgLm>ęįG™¶,%ĄÊRVW7‹Šüļż£~ėŠ"×$Ś‹‰CGƒœ…<ƒś×š‰žŚE%Ÿ‹&IJ.åfl2ąsŸŅ¦2½ķŠ™y^*Óü1äÖ^š-šBĮ£n 'ƒŚ‹½ī$²Ģ„Č€:÷$Ō~uŗÕf[Ō*ÜÅąo ]čWsxsT°V·•qņø2ž}ż+“ń׌¾(xæÅź>ÕÖöäˆĖė.[ę#Ż©Éźh©ōg©|MŠl_ʵL“¾ż‹5\É{ j·†MrDߏ7ĒøļĒjś#ā‡µŸx†ĪÓĀw62Kl¦Y eKź?U4dāļc[Ä?³ƒ`ŸĆŸ“žm‘ØOn·7¢GĮ‘†dšµĀ|`ż”õ‹żĻĀö·vŅY2čwy uõč(ņ4‰į¶:ž™įƒoā; āŠ8¹ !™±Š×ÕĻńÄ“’,|9§Ścxć@u¼Ž\mšQŗO~?­&S‚ÜłļÅQxā^© ńŌi<¶ePļL°)Į9ō©ž6üšfµą]/ÅŌV-JŚ–jJł­ŽN|óI²Õ;ėū6kž)×ü7„ųWĘźģÖ0ƒ®ü²Ó?€Æ»µļˆƒō- ū]²–ęÖ& ĪØ ž„ĻaQ2d‘¾;Éį?kšgˆü⠈%•…Ä.³)ÜżŌćµxĘmPųZĒFÕµ‡sy2ŁĪrOöÅgŹś’z|žŃ|šėĆ’/Lg¹@Ņ4_7=¾QĻ>µÓųsŶA„xĶ>Ģś9o;рēv­ćŲŃHöŻCǶ’mć“F„AdX:ď¹IĒQY¾ń¼Öuq}¦Śłd$HfQłĪG¾)„„Šč¼S©Ēā+“©X[­¼Rs¶>@ƛ¾#Ē5™ę…|‰Vb{ž4³ęļéŗ5ö—†!oØĮœ‡NŲ­/…?ü9«ųĒƶśŚŻ˜–ä3I†=OLV‘fwŌżjÓ“k/ Ū6Īę+½;nĀžü}0GŅæ(üS=×ĮŸŽ0źBŅXō÷»7 u<£Ž„ļqAj~Ÿx›ā_‡üš®ŹļH½’‰øł¢Ó•y$õĪqłWĮzō÷:“’ŚW~L„|²uŒOj…E[A—št:ݵ½”mžUHG½rśµKÄ'ĄŗõŒ–zuÄ»ķde;$Ąlž==©ŽĒńƒą­æĆ J 7O’ ›Y!.|·-ŗCƒ€{÷Ə†šµć’x‡Į3ńw€<_¤Ķ”xÓĆ÷²iŚ„Œœ“NŒ@`{«{ל2¾ę«qŒš+²œŗ™Os]®žZDÜ@Ēnk"ļ÷„8łH­Ģe+S,ßgv1‘ŌĄ»\£=Įō­`gM |Gų™įO jŽš’Äoéž½2M4Ź^Ļ}ŠN éé\|qG GxÕēX|ķīMX*†šČ\n.B’w°§ĄĒß;±łŌÉŲŅ5/ī*„äü«Ö¾|~ńgģŸńóįķąÕ[_@Ō“ūJÕK)¾ÓŪå•2)>½k6Ķc3ż9>|ZšĻĒļ…ųĻąMEu/ ų‹O†žHß ²ČĄƒž£±Čķ^„ŖłĻk…]“®OJä«pž#¶˜ŲÅŖ[FTŹL§£” ū‘_”śö…uaćOų*ņ-o>Ń%žŒŹ~Y²w”<ZįhgęēķÕū=Gń[ĄzŸÄ»{x’“ēĆ\żK€@—§õéœ×ņ¹ćO k^ ń«į­rō‹iŠ[Ź81v`?餭”…S‘–e9p×§Z”–\²O­w#”d²wīńÓÖŖ·!q@‘—jį@ĘGzT;€óź;PŸĢxæˆ9¦$¹—?!ķž” ¹·ĖPAb:żkF8"¼…ą›ęĆ`ō ė¤õ?¤æų7’ö–ѵĻųĆö1ų©©KżŸ~{įŁ®Ļm:Ļ&ć‘ĆĄHļ_Ł”SėÖÓ/!¾‹SæŅm®¢só²)ĮÉõ÷öÅaV'zž‡¤$vš­”Ł żŠņ<ōČ•įݶ÷h·sgS²lĘOWŒōĒį\Z‰½n=Ÿš]?ŲĀÓÄÖž5ųcC湓æxßVqū ōkņÜą<ÅP÷*sןāƒSTó$‹i”ĀLEÜ`»Ž¼RĶ“°Äc1®Éw|Ąw©žŠ‘MI6«@>µœö*=»Į>$›KŠ8¢‘Ņ2Ąž ĻZś{LńLJ5żņĪīH-ucĄp]½MyµiŻÜźē>yÕōŲ®šåŒį$Rz¾?żUõģēā–Õü:Ś>«sq-ö—!„düĘ,ä~?3]xDö2ŖĻ°læ}Åpr ėZÅęļU°ėS8$iErö±˜\)õ +>h‘÷Ķ ½+CKV’”ōčÖ°­’pükvχ†;ŲČ ÷iÓ]ĒhĄĘS÷l8#Ҽ“Ä~–7vĢÆlź~“€ä<ŌfVŽ6gRČ>õėZ¤‚Ł"ŗbÆÜśPŪÉm„‚X—lŠĄŒāø+R/ݳcŠŠm ŽņŁķ„$€žµ$“\«ǧZ 'Ž5‰į–1¹wóq]鼂ÖÓ…Fä#īš ‹1®¦†éŁ‹bB{×' \0÷ćÜPlt:Lpj›yWä$Ņ½oĆ^Ņ^ń]¢įŽ9Å'd;åē„tŪ+[µ·½tE]ɹ9Ļ„|óؤ÷¼°l=«)>ĄĪ÷ĆŚNAp#żīFģŽ•Ųjŗt:” +‘ņóІ‰Żi÷6Wó[Īķ Ŗ ±Zģ“KiõYm­kī»dVqÜ„+Zk?įŠ¼#euåZĻ*ł€ ß#¦kĒķŚ=ś;Čn ĄO>•‹ę9+=:yÜĀr§'|vńhžšÕīÆ Ź!7ģ‡ģšœņY¾†æmægoų'Ćæ‡Wž#ų•§Ä?'1ŪȹŽ=ĒaśÖ†R—CōgFšF—įōM–ŃXéĖÄvéĀD=®õ£ymV--ĻńcĢ%.ˆÆc ŪA?›xāęčŽ3ŅŗUm@AŠ3¹GS‘ą„”‚}+žSKe"Ņ9ėõ¤ĄŹ¾ÖZ Ļ{(U=®Wńt  uEģäµe«:)Ó>4ųńūCAšŪK½žŽ÷Q®öpßźĘ:žĆµ?Ÿ“üæĻŗŌōß]gXĮ#—÷q>z6 tS„ŲėŒyQųßńāŒ~*ŽĶ©xēW¼ŗc7œ¶©10ĒųW›yččV2Żx½Š¬L«XcĘĄe—'>)©oG6’>> ×]ģŽ:•nI³s9Ōļ"Q"L®}+‚¤Xķ_(BŽųé] ¦1Håüųmš—K}įׂōÆ Ųœ–Ą’P=Mzõµ“ØD('$ć­rŹ`[PN ā„VdĶŲ(éHŹĆĄĪ5Ÿu}²“$ƒó¬„.‡E:gØųŗ Vø–BqÖ¼SĒž2‡EÓn5m[UƒO“LüÆ ÜĒŠ/ZĀNś#ŗ;h~`|fż°Ņytoµ½ĖČJ<Ŗßt`õėŠüģńG‰5ŸjwśõÅĢ®IŲ$%ϤcŠ×šŚ#ŽŹIYK)^;žkZ<‘ŗį—‚@®„Œå.äŒ^§q'ć­-ī®č±DņåŠī“v§³ųgį„ĢÖ’Ż“óWō6‘ą+KdŽ;H@q蕃™ŪZč©m"‰āć#évÖa”1 FéPÖ¦2‘Õ[²Z偳ų‡½hłP“fxĪ©«02dŅ^źA4Pēœi“éT ˆžžTzŪGoX G« ꯯ŻdAē„<ŸRŅüIs®‹{‰ķģś—L}z.“mw§Ū¤7̳°Y±÷Øin‚ÕĖBSg =k:ļYkBg“ĢXAÉ#œ kZė¬Z&fi"<ż*]VŚŽžé'·‘āVĘhĢųˆ]i‹‚Hī!<äu_­e&Ėū`Ņ/=rEg)¦LÖryĮHUąއHžēOiŠ ÷źŠœ†iÖ2“,’Y—œtŻQ]ŹėfŒŚJ fū-NeD†āRńž‰Ķ:ó@[†‚ņ+¤¹ČƱ  žmʘD~ipƃėUÆ.£–O<ßčÕ„Ģw‘"e<ƒŽ·“ˆ!žfūHhČżh3”Kś„vvAŲ8d<jā® “ŗŻ%¬€IŠęĮŸ3|CšNķU/nm¢o˜²ÉvēҳbšŌĘŠHŖŪ5ŹfdzJDr“ÉÓņ*”5¤O “ƒŽ•”„ŠÆhr¦ƒ%ų>óv„ņ@ē5ƶ‡tۘE*…픸t_±™‹‚½\1ćbUµ:› Iµ&e,@č=U°–[Ł&’’/qÖ½jg“-ĶŁ#]EŃ$e½N2-2]ǐ’äd©£$Ē»¶·ĐEäIž85zžÉ%µeŖJƐS!…e6Ā’üu¤^N 1×N’M…Šdžµóö N›wŚÆ’4Čē€sĄ©4ŒN³Ė“×4•F”ŽK•ׅĒń5ć×Z}„…ģŃż˜ŚŲ.ŸÅZĮéc3菣“ㄿütļóI ź8Š{yĘčĮõō&æR“?Šqźz¼wØė ¤øuä ū֐dJ=®¼) iZĶ‚ėZv¦«#‚ņĘO ßēė×,4ū˜ģ.ŲÉrø Aą}Eos–hõQb·H%Icó µg\ÄÖš»Kndķ¹­Ņ9lq·6->Ė›rŹ{ĘF*“Ś(’Hä[|ȼņ(*›vZCÅÜK€>é”™½ p¢­Ėbå»Ā ĘŒˆ+>(.#‘6ų1ųŠy­ m$WŠ6óĘÓRɧøź=*”š1!k§Œ„FävØ®Q—t‘Ģ£€i6ʑĪ_ĒtČ^eeCĆÕįšäRŚĻrą' žqHŁv8{[ˆµ–子±Ą9⦵Ónmµ†Xq3zšE ”‘³­h^$ń­ŖĆ˜‘…Aģ2kČį_ųĻĆĒP“ń*l‘¶:HĻø{“ŸēAÆ.–<»AҜó_MéVW>JĪ÷²Į7L.0G½™•äfFWø^:ą×Kį»ķjŅķMĂ{v#€qÅI$}§jMöf1+®1×ĶŚč·sß¼±²ļfą“Š ŽŻźvn±4‡rńƒÓó­„¼F1K"¢ĶĒ8  K­Mn¢ jāĢå.„š„ō ¤g«‚מĖs;[n#?.=»VœØ”õ>wÖ54Óu†Õ'…aŌזxéumV}2±^ĘŽb2Œ śzRŗGDV¦ö‘¬źņŲĄÓ+%ąP²r ÆAšĘ·¤· æ †Ömō5hŸĒ'LÕöOk ŚĪnĀ€ zŒtÆ(šŅedWęķœž+)˜³ØŅķ|[7š½'½uk£hśsķŌpŃć9qšĶŸ{y„™ƒXCäĒŻō®śĆ[Ó®4|.Ų§Į%qŌ}kXÄVę}źč­Ū„«Ÿā<óXZ–™¤Ot‘ib1æ±=’ i³7ö–‘h –BxĄō"³WY™­Z Ø#øCŪü)Ihž—©i±Y€šHŒŁłé\ĆéQ^Żī7Qǐʳ‰-¤2œƒŌ ꓦyŽ8ŁÕ‹4$7#č?[Ļœ’`Ļp^Līčį¶ō=kr9‘Ēx‹Ćv:ŚIķ“sČWŒė¾ šŽĘāŅTŌ@%V`÷žµMX|Śiٱh§kˆ µ\¹·±ŗ)$S2``+zŌŲŹSģhhVÉlĻć{.Ž5ŃÜZ]j@VᇠĒ8„ʇ©Ģ_[O§L‘Io(SĒL¬édxX,g"³”;w—¶¤Ŗ`™~«ie,¢4,”¹ķЁ9Xé4­r+‘ćŸ{C ćmjE«-ōāNgw ‡3ZõĀ›\I®6vóf҇¦IČ øČ„¹ f·’ĮūĄšĀŖ9ı„ƒ 7cÓėXņ½c'± ×w~abØ;Z¹mā_źĻo¤k3Kex§Ģ[ ‘ÓhõükHĘÅū6Ź:İ]G4v÷»ĪŽz‘XÖļ¾e­Ė#Ē§wz¢&e_Ēkgy1‡`Løl֖’ńÜ1‰ęU;‡½ņ3¦a ŒS<²…Lć“Ņøė«Kiä–āĪńaó.ćƒųS±.›)C=ݼŪ[ m­ę¹X£$¶:õ-t ³ŅN©$R,ėl²ū‡ ģj[!ÄĪź±§8R '¢ģĶ 7F"eó®[i8Ł©<_įn‚HTDrŪæ—œĻ’Õ²Q`fV<ŸžµtžhaÜŪŇĪK žVfOŖč÷ŻB–‚) u%¶œģ>ŸĪ™kcu“}cIżd\ō<ńZG°ĪŪMYaš,‡9lŽ®čO¾"b˜£ŒóZÅōēŗ©žęv»HCg§zåu-šF^4glgŠNLiuåµĶˆghÜą é\v±ÆYYm¹ŗ‚t·ĒDnIõĶEĘāĢ 3Ęśuž Ö©s‰\ó^å ^Ļn‰‰ńĘIĒćT‘„£bõž„-ģŗErÄōč*¦‹}+ż¦[wŠšs‘õ­ÉHŚHeˆ…ڽzŽõzˆ ‘åC³¶éõŖŽś‘(Üü©Ö|įßéQ²»½–5 Nšų3Å: ų†XtĶNŚń¾ŃĘąBAĮQłS¤õŗ8(BĒ_āJŌ4ż:ÓV†iuø¢>P` ķĪ¾u_ jźE§ĮyeŖ¼ƒĖ*¹8}ß­z4Īė¤z®‹­ų³A›CŌŽcsl6ŗl1`q”óėY>ų«Y__ßj$ŅEV›„*>øĻ=+C7.ęoŽ^HćÓ­¬n&†U“; ēŸĘ»+Ļß.“¢źÖV}§ČM͹»UX śžGń/IøÓüe¢½µä–śt°„»ó ;Ÿ¦:W?ć_4[-ō„ü°Æ 28Č#ō¤Ń½Ķķ"Oź>m,ŻŻCņ‡x‰å›§éWü;¢ßéńµÄņ8»U-Š“‘č}i=ęršģŅj䉞ē˜a‹{ē½iĮļ…b‚źöĻĻ…¹Žćąƒ@r¢ē‹µy¦hō£ŸcĪIąō®ČŬĻö]I˜ŪŗüŅē¾GJn:\v2u+kÆ;ĒĖĘŅŖ2ŗ=:×PšĪŽ‹x]· x ŸžŖ,'ŸÖm%šę­3t“l•Ęļ,’E}„šĆÄzæĀÓ¤ź–R>³l²"˜qĮ'ӃA<‡Čž5“ծͧ3)„¢—@1‚ qK•ٵįŚOą6”gĘ©m§M6žč!"¼÷ÅÖÖ7^'xZk·°u!mŚL‡‘žŻ)r å0|;Ø3Y‘.8åaæÉpåéҰµż_ųÖŽśĘī{9'FD\ ’\}PˇāēĘų¾ĻOŗÖµ¹|?2łP ˆŌēҹæüAÖ¼-ćĖ™õŻVmSOøøym•ŸiŒž<榕Ń.ößkZŸÄ-3ģÜ·ZK’§qłW=Oå_7`ŚųsRś\Œ°FŪA$’?NÄJ'øųGāõõ¤ń ĀɶŽåĄŹNæ½ušŸ†urĀėKX.'šš*œ—Ą=”Df|·¦üPųįyµ-*kUŅ5 yš) š#‡éŠōOxĪóÅ~<7gK’Öv‰<ĮåT÷#õ?…; R=ēĘ’§ń¦™cąė[‘ö9Ę ƒēĻØüyę¬x×\Õ šŚĢ"I ¬ƒī ÷#šÅ"Õ>‡Ņ>ųB¾$Õō2ž-š³)Śsœšż˜‹VŠü9šžO k·Ś}”²²ć<ŸBMcQt'„ÅŚ£ćŸ†˜Æ¢| $Ž+š­½ģį-Æķādg ¹~¼žõŅlxߌ“‹„ÓÆ…åźÉs““/¼ż+‹żŸµ_Ū|H6Ś:I;,CĢFJ?8#ß+@Ńść{oh_ õø“Ūh-üou346ń¦6Œdœ{šņŲ£A×Ūƚ¼ŚōķŽc üØIĒ'šF:źZzµoą?jś–±é‘Įs°&Y2ĮĮ8#<×ę7ķ|cŠōyķ4­2āĆÄö[.%]°ÜGžGŹ1œ~<יˆNņ#›”ł±Œük­j:f©¤+Ł]Z»B2³Øė–üėļ’éŚ'Ēo„·:ˆ4> Rdņā‘Ąg—ačr:z×¢£ Ü‰>ü-Õ~üF³ńäzž––W8t’2„ŽznōÆŠ?‰^.ųāNŌ5čZĆIJ2Ēö€LlœćtMS3uuŠå>)ü@ń†ü ?“{'Ä~–he†Pķ?Āż~†æ:üQ¢jŚn–×QMtmŽa·wR³ Ž~¦•Āŗ>µ±š>kįIsø‚܏5ƒ¢·ĆÓóÆW²Õt x²?xcP¶Åģ¼āU3އ”ŹLłßRńw‰5æźø›ū>Ō1ĮˆüƓĪ{ō5ėŸ|5ŖI§Ü¼ŗ…­Õ„2įß%²sĄö ®f}% ysE»MO-¢Œ(Ž­|ēćOŒ>&’śēĆs”ԓ̲ƒ#åTgī愞 Æ­E%æŚ”¶ĢłŠ N"琣׭zƈ5™õķ.ŪGń4ĖqoJĄP= W(„”ųÕ9Ó|5ń.Āķt+Ø7Ä[ŹLīĀó’HļŚ‹“ī|/”č§FńmĻ…|K}pŃH’čņĢFŸ»Ś¾Ķų]ąŻKĆĢś¼ś]ż‚1UłcœÓ·Q8Ÿ@ųZ7Öµ0$šku9OÆ„tæfŸųūĆ6:ŹĮv Öõ½R‚hfŽįÖ'üóĻō®i+htSeT»šž©¦j¶j×3C:¶ŠqžzžYƵž0É>”„ųkĒŚ5“QÅ5™Šq·%w~œ¶;¢~±’Į’l«mā‹žĢæŠéš«<Ī„c’ć®ā<ąz×õa’Ę÷:mŹ+4V:QV=ģĻqš ĢśĖ.‘$…d B1>•ŅxƒĮ·ŗ“é‹éĒ2–‘9…Q’$bJmąąõ­`õ%»dM²"Ŗ¾Ē»M/ĄŽ"Ōd±Yģ$ÓÖé –†ąlŽq“ōēVĮs”¹¶¾±¹šŅśŻķnŹ4gŖqĶ]XŹÄ”:ējd2Äl§b¹lŲu«åRź)ķY˜Å 1œį¬ŽˆźOŸšnķŻ'uĻžÄß!¹‹TÖ¶§µ‚ā%O908ąŸCL‡2„ŗ”‘cnH<ńÖ¶5”…t¶'ū¤q@)÷<žĀfŠVu©ąē­lŪj(·09č=č&R6ą’ f 8 ßµR•bk—± ;Ņ‚NÆĀ3DŗˆY °Įėü>õčšÜ¶—–°©‘Cƒ‚1É b=-|«“du]Ķ’~‚¹‰.d+2MĒPy @ėWÖÓģVŽ…ŗgõ­» d4 ŹHöļA“”ŖŪĒs ·ŹS¾+Ž'…•ƒŖõõśŠQµØk2ܬVŅæ™\ ĒJ¢·²Į“c÷c”ĘwPķ)Lå•UF@귐.¢@.ßLŠe׌bø†Õ‰ņĻ ®†ĖN;ŅfWČÉ=ž”×iö¦Ūi°nEvöņĮ~&#fA€GzäüE©źZlŹ‘:=«dœGŅøüGØÜĢ©oøīĒ4§YŪ–rˆdbE@uøį¾V ĆŠØģhGSm"Ü%ˆģŽ0}jγg,Vķq±‰OĢEé]xāźRА@8"‹6XŅŽH”8'»‡0ŗ³ ŽõožŪķŽé–ˆóÅ4†™Ī\'–ķꩥ#·Ö³fēCø“/jF±‘ÕųužĒJĖó7Ł[xÆģ/ē×µgyˆfæ“cq$ĘHב^1]FI|ąń–=F*%G9q5“ÄČČ9ėŚ»m^ŁĖŖĘKBć±Ļė±Ć;ÄR@ņcš—Ā—·v ’ŪŒ“L dv¬¢µ4Œn{Šž4jŸŲāĘ(-öŹ@pG§q^©x’óRŒ™A ¼ü½Ålo«ēƒnbÕ R?.yŠÕÖ4ū{”hD`KČē½·c3F±]/ĶwP…z¹¬ f{k¹ę-;–uĶNFE‹ŁyB‚Ąśu®’bkŒĀÄą ™JÄ’ÜĄŸ$ū·tĄĻ_“ˆŽzÖMNpP`£gÖ¶.TʘbKtėÖ®2ī38+Gę2±W隊IÖh‚»ūւ1Ž2…XnJY݈Źķ8ī(hØ» K’‹·vŸĪ®G²“»kzf£ŃHѶFU¹*( I*:Öa)-cżāę0źxŗĶöbĄdĘ0GCHɲ“D“H订2 k’»“Ct©#<õÜ·c§ŹĪĢb,˜ūĄt®āĻG‚ö8ęƒ2ŗ€ÅĒz™JĘ©Xélo"ń3ƒå¬åO½YMv;31†äG.Ž ž™¬ā®“j^*֣Г KĶ_ZøcĮœōŽ•śyū7Į.õæ}›Åßu ›HGM&žõz€Ć­mŲ‰K±ū7ąŸ…>š™g¢ų;CÓü1£@”6CF—ż¦=IÆH†ęk]:3<޸ν2‘§i§O|‚]Iä<š«¢Ž5‰4Pp)œķŲ¶–xöŖ’ź6pJ!{…Y}=(lÉ+’\Ż[GäM„t=Åx®³ā«;©¾ŹĖēō©}Žŗtš|kńūĀŗ,×֗25õśƒū”|31č1õÆĒߌ3ž #¢|=7¶7ŗĢ–śŠ;łVÖŅ48·nź”³ŃŒ,~üżµ¾8|wšēIŌµÓįÆʤ-œ2¤Iļ#޹ō÷Ƌ®cy<ØĀŜ–Ē,}Iļ^Ī‚G=z–øU#ļƶ;`J)@[ ļ]oMŽ Ō%BĶ».ĮOėVmchU¹9<}k3 K¹z,ļ.©¹—Ž•ŃZXĖ;PKdĒJFI_S¬°Ńdŗøm:ŽŹóS¾b-­ć,īO§ē_Ɵ±ēü/āßķ&āŸ‰/©|:ų{ £“2 \ĘO]½A¬jŹŚF™ż;žĻ±æĄŸŁŸF“Ó>xNž×Š=«MódnļõƬō¦–fe¹6UõÆ:­W²4öféŠrć;JæmP5‚z™’Tq1F`޶3”IՆAā”žeIfĄØ”ŗ^³ā8ķ2c“'¦;Wx“Ę w÷bĘÕ-!ά$śŌćcóėćGķo§ų=ž/ źr\_£’/ńé_š:ų½ć‰ŗ‹]k^"Õžö?gIJ†>¤Žµp»vŠóŸ±ČŅ6Cn>§$żM[“µ»\5l•ŒœČŚ+Ÿ ”I<Įc]ĆõĶ)JĘ6g¦xoĄw:»,÷ʱ:ńšśKĀ~ÓōŌLŁG!ķ‘Œ{ÖMÜ¦Łź:_…|é᷌¬ [‚z ī[DøŅ\FLrIÓrœ‚)N– ;ƒ2Ąä5kbŁ+Ž„w Źexgy÷lm¬;ъ÷`*ĪsÜśPe'ckNÕĢ* E$ō#šmž„öœČd™É­©™ņ]f3 ˆźZµa¶³"t‰×± §!ƒH‚г¤č÷鞢øķvźāܱˆ4g¦=h œü .”å&ź½^±¼’'x.2Ć÷y\恚Į`,Į@öéQOr#"fŪµdŪÅww3G"äg×­[:kžń#ü&“ˆīA„sRZM 08äUynīŒ –’<~£¶*¶ā/é=“~r¹ßž•±ä]^DŅĖųÉĮĀō­Č}=¢ČYqƒ­[v2³B#rL¢€)_[NÄ?—$‰ŲšēüČ[®ōlćP+’ٳ%ģB8݆ō5Ōjz”–B9RŪĢF=Pō —>ĘF­x÷¶«8,Žk–·Šky “›įėĶÄę ·[HĢär1żdõ;)Ÿ•~1°Ö~ xŁ4ŻBŽ1„dłO"B¹śb„ø×-57VŽhåVł°œ`Wz]QźP±Ūh:Ćé—pÉlVte*Į‡ 1ŠŌź×wśø’Īm19P8Įöƽ+½'ŲŁ‹ķ…äµŌ§ž)Āī皜iSČYZ`eå|ćZåFņ•Ķķ/Uµņ'µŗf†ź3€łČjöļ…Æ]ŸM$®ŹZ$€XJōhHņėÄ÷č<9żšņZĖŚeČłˆ`@ĒQÅAx.2,W^µ9ž5Xźg©·x‘\õÅZk„@’Ē$‹€CsŅ·ÜČʗZn£IUŒ¹ČöµÓB9Qb™|ÅŪ€IéIĮŹk>_A.€ÆŪ”y·czƒŚæ3¾#ü*Õō]QÓu€ŠābcŠNAąēæj^ĢØ»žšģö:4—–ŗ•›"óBĪ7 šk̼SscsʇT˜7$pAõ„ģÉ8øōĖ»‹Pš„Ÿwܑ€;HļŠ÷Ÿ†?5ŃŠõF»¶kY6Ę„øuĒÖµŒHsģ}żš?ö’yõY¼-u®ŁYL\yP¼ \wϾkōĀŽ"Ņõ įžy£€Ą Ž­Ģ$ØtJŠAå(ėžwW„[ŽŪĖ’PŠ ņ+x»œ“Üć.g¶†åŁ8‡=*Ž«ŖiĘĮžÖD[Ąæ.ŒūÓ%;Qe¬kw^bėeiƒ¶0FFN3ŸlV‰æ·ł!”ŸāĶŻĶĖ8ŌÄœÆvõ«kcŖ‡U!sžŌ&f̱¤¾djÆźj¢ÜĆ$ėd\œ})˜–¢šäķe–häOU­Mz×KŅ­”%B¤|Ų4†rv6ŗ•¢łW-Ē öäŽ1Š-bÓēBĢ“¦čŪØõ¦8»6Ūi—ÖwWkæ¶Åøķ%pŹ=:քbęŚī“¹-GĢøéļHŻ#¹±ńńĻ Ģ’4č½ĻZ©¬üIµŌM-¬š†Xy«ž·č{ŠnrVټŗ#±Ųąī;W­tžJÄź&&$'œö”vūA±‹ČæµŲ×6—Ē$TͧźvqŚßG oČéÅeī ރāX ·kI‘Dø#µvŗŖķ„•¾•©”£cRM@^F2¹”t5J åóÖŽX™‰8Č ƒufHs ąėéM’–?2ß±«œ·2ēÓ./Ż\ŹŽ¹ā¢:|ŃĄ^FYÖ¢‹Rł RŪWšōĖŃĮso±Htlõõ«z‰§ŅõŅF¦&ū»Ą8õĄ¤5·Ōõ3Xƒo•ŚN6ĄÆ(¹žx„’#Ø,@ōÅ&Ė2ŪM‚M²<±«ēń5BņŠĒ< ›†qźM`÷&Hęm¬µɚ—`aŸ÷®»JŅī,‹%Ū±ĮüéXŪž|ī~x¹ėڲլžŠ«;?t #ӝ:h$«KŸ”ŠĢ—Nf‡Ė€ ”•8>ōCsń-Ž£§éó]ēJ§iE(½ŃuJŽ{y<µó#MŲ®Ź#·G‘ÖäŒq“ŪŽæ%üįoj>;»šóųbk H¦('Ęp¹į×؁Qėv’¹ķZG‡u7±m"ŚōG#u8ĮĒZßŅ>ź÷^Õõ;ōmCP³Ģ­ä·ČŹäūš+DŒ¹Ļ>Š/xæĄZÕĶ ·µÖcżŠC‘#08ĮśVæĆŒ¾“Ć:oˆ§€ŲŪ±†(ś0õē¾pkWm&cüZÖõ?ųšųƒB±“‹L‘”J޹g\c9ųč’ü0ŗJ6§=»X]3d’>šgņ¬IÕWÅż"óĆž)“ń†“ ÷śۈ‘£Lnå±Ś·¼#āųWĘŽńŁEw„²øœ0%±Œd΁©3ģ_Š'Š“æų§Ā–%4ę‰MÓ$ŽpTŸ^•{ā—ĒkOĮ°h¦śęŽīęÜe¤”Ø™qÓŽ¢“‰j'ēĪ•įØSp“Ot²ČĪwœąŚ»»­ÓFŠī+ųā “ćyĘ=1@Ź>Ń|s{Ø]Ås»Źń¼‡=>ÕŚ]KökK_ …ĄėSbŗžā[}v}:āKµD»›"2z/< ³ū0ėoįŒŗn•āk;建FPŪ1øļČō­„‘ōĻƟxcĀæ¼D%¶³ø˜ņķV=w€äW ų£ÅŗĆ’ ?Š|"–×÷‘E‚BėÉ#žę„‰¶Ē¾üż„t{ßKØ]Yż˜ wyꄎŖ?•{~§ćļ„ß~ųĘ,¼={Ø%¦Āivr8)žsėXbax4•Ģä~Ż[GšŪÅ÷–Kww„“ķ”t!”By]Ē‚+Jx“F»TšD±Å!7•0%0Ē5tŸŗ…#ģ?†Ž(“ų»¢[ĒńO·°Ö™·‰€ĻšąšĒOóõóļˆöž¹ńsų']Ó ¶‰Š“1ǃ߿bx§&rIY˜6ŽÓ¬¼Ii¤é¾%³¾¶p<ø-Īåaž»qŸJ»ńc@ƒC‚=2öŹŽ{iŸĖŒĒ‘܃\īZš@ńĶBĒF·Ó#Ón$µµY Åq^ °ń²źw6·3Gq”Ä3lėĖ8÷ö­!PźŒDń:]ŁÜīŒÉ ĪNņ7{Uχž)ń-­Ķͤwneŗ±šŁ S:Ķ'āļ<6yˆK’Ŗ˜žćšķQĢtE˜¼ā½;Ę·7¦‘²Ś9ÕāKoõœŸ¼§·zūkąęi/„,\½üwlēē9ē4āō±£Ž‡Ga=öćsń>ŽWHå\Z÷OüIž×D‚Ī i¼ł!0ĢsĮSÜQ(ča( ^iš%ޱ­_ĮzłX“¶ģžŽ•ó§ˆ$kæ¶]čW±C4G”ĶĒ^žµšBJĒ}ā§Ó$±ŗ×ē‚Ixń”ĪNįŅæF¼ ā Śuµ»Ćp²)Eˆpæ.–A)hax×]—Ć^,šÕģK'†®w­Üģ„ł]€ĻA^QńNI›K¼ŗŃĪƒs›y\ É ėĒæJĀqŠGę?‹¼5&—vķckh]Ł|ö®KéÜŪ:„qÜuĶiLN7=į/‰ļ<ā :āŌ±‰Ü#³6 īnGė_«Ś}ōW0E=”‹um2,‰ƒ™Į>ŁÅuÜĮ£ØµnwQ_#~՞ ·60ŃdRīÆĮĪóܟNk’k]šGĆqĖę „›ŹéņšūąŽ¹mć_‡śŸĀRź[ĶBÖ7ø±i_k9?Ą~µ›GldpžńWŒžx’ƞ%Ņ.o4ų{Sū^éJ”9ČöĄ5ž€Ÿ²?ķįĻŚ£ögšĘ ^ŲŽź-iZ“HpńN0§rõŽżˆ©šŠīƒŗ¹õ7†|Yż{opmęFńšūFÖ`Ö4“½†DwŪ—čq\³ DųŸöæŅ¼;ńSąē¾ üJŠN©šļÅVŅér¤°ø#1Č ąŪH'”ĮõĻłŁ|_ų]āŸ…ž2ń—ĆZ][ųŸĆ·RY œm–ęŌ1ņ„ųƒ(SšˆüFZŹŠ’ew™³‘‘‚*„Ķߚ„€H=ĶuS8źEŹ4ÓpPdž+>@Ä®œdzWDĢŁ7–pX¶ā8ė]mĻÄoÉįėN–÷0[͘&`|ČūŖŽžÕ©Ŗ‰ÄÜß߯ÜIqw ø‘›;Ļ_Ę“ Äl؁JH”@Ē+ļVmŁ·øW%sžEcn†ŌŁŲų[Ǿ-ų[āæüQš5żŽŸā źźÖ3[¼ŽõŠv%ŸĖæÅO]|;ń®£ 9ŲI+ÉdYH $ąéĶy›@FóŸ÷@ōÅwŅ–ĢęØĢŅØ“‚¬é“žsK²IĖy„śu®ƒ“‘ļEVrŒ9ϵC7*7Ž` iM. œw©K*ƒ`T÷#„ ="‰H*ŁžUjuą‡C׎”Žšl°ŽSf)”“M‘Œć5żĮ?jč<+ń_Ē?±ßÄmim|ć yFKK…P6+2W$wʊ<BCūų®k–z~·šÆÄ·Ė㟠˶ŚpÜź:i9ŽN@'óÆ«tżĘ醬Š\ óÓ³ć©ŽORżõˆ6é ƒłᣒ ü)’‚åžČ°žŠ?ōŠš~”§ÄZ,‹mzŪ 0FIŁ/€“ĘW$•¶?†MŌtķORŠöŽuµGemĒó :-n{;įø1“†$ņ*c]gcQ }hó8XäūDämb3€q]­·”¬dąƒß­·Hى„ø‡äł”qÅTæÓ6¢É¤\a‡­T˜¹Œ(¦t™Q€§Ņ½ŹŪG½± <#yx śŌ–qļįÉ£ŻO™§zŻ[UÓķPVLgŽŌ£q¾y¼@ķiĒš§*ÜDļŠ8ĒŅGCįmJžąĶi«œżålUōÕžĮxŃĄĆbē#ŠŠC2u{™Æe!Ž8ē5É­¾r…&“Šk=»­€šD}œÕĻ2•”īičEŃGg ]ĻnńE12Z÷Iļ^·q§Ia2f0„G Š <ņß@“–ākØÖ%Ę[“Ć}=ėÆŅāŅŽ[pėū°@až‚e#Ŗńö=¾žĶvtŪÅpZV½¼Ķ‘v±ą0 iėśm»aÖ8·œąu®utč÷G¹{uÅ2“±»m¦Ś“üÅR§Ž:×5āxRXīį…ŸŹ6;šF7”½įÆCa$^j¤Ń0†éō¬H’jRÉŻ»Ž‚”–„ņĒmlȬˆĘ9ĶY£¶Qrcė€k 4.H›‘gŠ@cČ={WIaqEg‰Š’9_ń¤£cE+š„¤Ś¤¢D;<ā¹ĶBŚóI!CĘIśÓ4ēFļ„fŗ¶œŹI…›†Įķ^ƒ¬źŸbˆ\ĪL€ÜPDßC> ^-^ŹA ›Ļ&øčā‘ę’7ūÜõļNÄ÷r5¬ēhƎuž|Ż4Œ[äҰZ£2°@˜P3œ÷®Gķ2GtU‹*1Ē'„féöN[æ$„fÜŁėV“ąh/‰ĒŌRä`Rž+™Ū1ÉĘ{•LZÜĄĢd}Ą“łV¶ó@­to_Z£=³!£<ę€ {$`ø9犲–’  æ„g)ö)¶ź“:G»øĻ±­ł|:é¶@įānx¬ÄŹR*iŒ­µr8ō«mīŖźl­Ė)lr}j\¬5otņ‹z„]†z×w¦1Ō¤·‰¢'*\TóšF6=?ĆśBڬ -¹™#h<×AŚų~ł.–5’Šœ˜ĮūĆ= JM‡?CĶüI­ip\]^ŁFlć’A¹q’ÄńŽæżj÷’’²GÄÆŽ·KwØZĀ+ą•"C5Ņ”k…ōē„j•‰”ŗµ’³gģēšćąžö/ ų~ÖėY2n{ū˜ƒś®sŠūŠ×U·ŅmŹÜČפqĘIöŖ¹˜±ŪjśŁJĀĪŲō«WGk„ŪéŪžŻ æ|ž“Iš\ĘŁ†ļOJYīb‰KHꢑ›sŒŌ•šķ¾·®Üßė ŌfÕõ«¹L·s1'±5éįpėvkRVF¶F ƒ·=³éTdV1ؑČ9ĮēŠõtG‘^Z’%¬§” ;g½XłłX–#ō¬N"h¬Ÿcä’{Ö¼6[öĒļb@#=ŁÓE¦Śéče¹ž8įź2Ī}‡Zū[öXżˆ>;žÕŚÄį÷õĶ/Ąé‡øÖ.”ņć—ÕP6zÖr©cD¬Rß±ÆüÆą?Ąk_xƒĆŠxÆāĄĢ÷Š]ab:sÅ~ÆŲéPŪZĮjmķm ˆŽ(Wj(߅pՙjV4€DIŪģ8¦żš(3,QüŻxļ\E9’Ć:Č[¦=*Ö’jFc fØßeau6÷žīęń‰Éi'5fÕ½ŗWli£3v5É8ÅO$Pģ]ņzVrv3Ķ}Įś®­:‰cx!ō=Iž•ōW„žéöŠžŻq€>\×;f‰ē„xnŅĀŽ!óÉĒZō;EµdG €’Ķ#9›āĘÖ4ņćŌu|ųfT’F`4JV:8ķÓ…Ę3ÅbźvSğhµW©ÉLć4—-Ö³+„0Ė·'#”ŖŃZÉ8'­2•Ė6Š-£‡äĻ@+vÓ¤'Ķ,§¦3A%g¶„ĢcønMa_éóhr‚NĢĆiįØ(ĢÄˆ—Å6į»8b:zŅŌķ£æµ†t”s׆ gy «(ņ n;Ö£ŽŽep ²¼Šji+ŗl]Ü÷÷®¢;hf†9^%vńŅ€0oÆŚä5ŗ”`9ō®r]^ł®Ćłnń±§8÷5—;“¶ķp†Mæ?R}jhōÉLK! ÉóSź"Ø2@ +|ŁčkŗŃµ’³[‹VHŽ6<Œ žuøµ§†ķ,œäsYinb‰$ vóAŒ‰×R’8¶Ē&Üäm5&•qx“MnŸ8öė@‡h–ČŃN<¹†y>“—ŅʘIPŌĘ7ļ uĻB)×J»~ņśP\Y…Øhé'Ÿ=Ęk£““CnŒ’ĒLt Õ3䟦3AųĮ7ön”ą^­y5’¹¤Ö6RÄÓ“ #/^z~É^,¹x?ÕäīC]ŠŲā#’’žL(„øÆćX—²]FéŽTqķU~€Mź6$óNńŌ7Wüc“±ń— ÜCpn`S‰õ\tĻ^9¦6~nėZü—ŅO§hrĻē³ĖåO^„öĶz‰ŽĮ®µm*k}§Ź.¹?6:Zņ£+œöƒ§xĆ͚-%RKfŹį‰=s].•m}eÆXÉ«[Ok#:‰J·yē>”9X“éĖÆėu«ųÅŻ42]ÄĘķį‘}OÆJż…ųeį[“2śĒžRŖ²~锥ś×Ć2.ž©Ź$Źći9ü«æŠIēb'ō­éö9fW}2čBä2HĄ<×—ģņÉm2ģ”»ģ+CóÅĘĘćPEmE Łć'­:ōĶF±€ĻZÓ²¹Ō …ø‘„Æ=© ±”G$‚"ĶėÅx7Å+OiÅ5 \FņÄåĢdgū5µ‰q:xŸ\ÕtKfÖ­Ž×PŪūÅĀs]­ć%Ü";¦,sƒÖ¦V2hϱø¶Ž&é‘ĻE5ę3‘ÄŅ)cøˆ¬™pG”¦=Ō­(U@zÓ’n] ŽCžF; ĀęŃ]N£Lš•ģ²G ·y£ć+Šįõ…Ķ£,ÖŠ™qŲ|¶‰µĢ-?Ć6z-˲G»‚9ź+ˆńµÜü<ųy©Éw%ģS^.wÄgėŹve؟ĺvÆįBŽ;2ė중”yč{}iž ńgt«Yų‹U} %ČÅK4yčŌF¢fÜŹŚžyį?xŠśå Ę·©ź$Ū·ŹsŸo„zäöŠų“^:Œb+;—v Āp:}kdģg(\ōSįF”o¢>®óĄ·1¶Óƒ‡ 3ÅeéŽ>ń–āĪé#ŠĻ`¢eō¤ŻĢżš£|Jń†tķGĆZ,Ūōy÷HŁcŗ"s=Žk–Óµ++&’ō£ł™%Ā·ŽÆõ¤Cަż—‹““m}öĆ;Ź…¶ć…Ē”ü r¾ųµ§iŗŅizĀ\Äne|¶Ič=ź”M#ÜŗRxĻƚwˆ­/”“ŗ_’(H …»ŅæAž4ųZéļ^×ū^åHØr¤F@ī8żjZ5kCē‰ž]Üų¦óU¹Óm“ĖĀÄū—ē8¹ļYž9ųqaq¤Ėu䊯6TÉ÷QEŽz•,|ł­é–zTÖöØdx¢ŪøąąvÆU»ųqļƒķõ„‚éQÉŚĮ3Šuń ēU5<Š„¼ ž÷r»•ŚA3zē|¢OųĆCøŸČØxžl¼Ž„śv Õųw­iŗõΰZęx‘ŁÖ_ø”±ė^œŗ¬ö÷š^-”.ŲvzzŠkģŹ×> ń7†¼e¦$:•ā„ÄĄ4[‡ WīŒz×Ö1xkA×öź:¬ii'Łņ»xĀš×š¹…HžOÆxbĪßcł‘¼d”[%O”Æ+ų³¦éŗ…“½[Gń q a4` ”¹Ø”v±¬ņOŸük’ £§ŁŽ‹­.UU1„ÜŁ<Ķ{wˆžĒNń-²¾™ «:ÅÉłO{÷Ķ>[3Fķ¹‹kšŁüyāŻ"Ę)!`Žg#`a.pńė_Zé'Ćļ;x{VžĖ¶¾2¦ė‰¹ œri¶öBöŻ~šĀ‹9u;Ļųy#“Ź€©“åĄēpĻėY¾'»±¶Ņob[“gØHÆ•8elu?SÅ%"•FĻĄßėŽ,‹ĒšÅäzåÕ®­o|bÉł–B§!±ŌWėWģĒ ĮńWJŽūÄŚĆZkņ[,vņŗaXć‘Ļ?O­k„ĖØżŻųĆą’üńö„‰“ ©ˆ„ĘäāLœ’;f½sJÕuĮ«i—ĢÖ÷qbcēęĮłH>ÕKc'cę[O„—ZÜŗ—ŠōKł“Ÿ9ŸlėIJ×øĪjOüYōż łå,Ņ¢nĘ?‡$T3£˜öŻ#BųmwįČ-ͬ¶zĘł±æŹķźGQųVOŏŚx;ĆŃim·’Ž–ģIėŒž”…+lxųŽmMģt{4‘;ę8šL䎧ŁųŸO×ōĖ-§šĆĮ ­k†›„k‚Œ{—Ģįb=G>ę½WKš×ˆ“–– ~pŒʇ+`õ¬Üµŗ¾“ļÓo­s/@{äV|;*čž9šeĢ‘XG ÜŁ„Qóa@õ5.„™™śńWöBšOĘŲķ<]­ZŚ]ŪY ’"ųūCc8ąWüCż“<=į…ŗtž ńTØ2O•3—+/uaŸ»é\žŻ­ Œō>Yųc”ŚųÄ÷Ńx„­„ŅīāhJ|ŽTLs—Ēć]GƏųSĄ’ēÓu=A­¼5|ÅO”~P:ŗ£Q=ŁßžÖßlt»OüGšGˆŪZšĆ·{0Ą1Iʾ6µ²¾±ßp–ęźÖ0˜ŖŒ®eĢz&ŸćҰXŪib(.7(äƒĪsłTZŠŅņż`ń¤³F[sĖ‘½—¾ Ŗ±š/ėņéž#³¾š½åŻ„v²ę3¼oŪžyµÆ|Pń·ˆ#ŃōŎ+ ŒĢ»Üļ—”ĪćÓ“pD~0ŗžóD„­,—ˆŹdU?wėß4OŪxf=Aķ.R)¢)ŗdČu‚ ćҤŽ/C‘ń%Ͷ­u}g4sAvå°8Ī•q¶ś$¶3„ŅÉūčrČŻąkX r/ŪŚ.³ŪĻpR}§iīO”®cM“Ö“'¹’ižd-…`øćŽØƒŅ<3ā·ŗ¶žŅ;µó~šĘ=ŖÕÖ£l`x”*ÜļPy¦g2ž„ؽ…ŒI ŽŅH±€G<]€l5vń1…EŒöäg8`žŸ­ ŲŽSŌ¼ ąÜüV·„ßZĒ!x6ˆäÆėŲ>&~ŃŽ>ųAØx‹į‡Š<+©É¤Ž¢4Õž*|Vų¹ż§ų—L–+č‰Hg†%;»÷ķŽ¾»ųkÆßŚC—p’-ņ/•"c¦F8ōļZŚM®¹iØi4‘˜Ęw(#“޶“oų~[äń k9T»ĒŲąJ¹y“y¶·ą+Ok-ām–ĶIĆ5ł[?Jł+Ēæ µkšŒ’Ü³ŁŽĻˆŽv‚}¾µ˜Xģ¼-šĒĮW~™¼Murŗ„@¤nŠ׎ēŽ»ß†ķsm¶‘yy”$'lrÄ6–PxŻųVŌęe$zÆĒØšļąž¬¶čļw§7ʈeŌrNWČ’²ēŠćų—’ 7ĀæȐ@U§²Ÿs&;Ēš©ŸR¢“<æā‡Ā»żRŌ|<Ę)Œ*Frä䏛ņ‘ÆŽ5ż"ūH¹’)ćX˜HWpķYEõ5PÓC*źe’(H”r½ˆ9āæHfω’ųæF>ŗ¹·[ĖhLŹŽvtSŒœółVń•ĢåϧķnĀŖ¶wAU5.h·Ž¾XŽĀõJČAćƒĻNj'{„Qł-āO Žų;WŌ“=IV9m§‘#–MĒi’>•'ƒõūŻ WµÖ“›—‚śß-7gØ?•AÕOCķ=zÓDųĆą½#ā7‡5ń¤~^”PgčA^’ZżW’‚žÕśwĀߍ:ץ?ėöCĮž);;ƒ±ą»@FܒF=…Žö;i++ÕŽ» „“Ægv®"$ļ)äG¶+Ż~kÉgēY<Ģmä`,{ćŠóäŗΟÄ^Ó¼įxQE+{ }Ž3ąŒcž3_Ē'üösń,)¦žŃŚfŠŅė­ ų¤˜Č‘­÷b9›¹ėŌÖqG<ē£ÄE ćĻ ‡·eY#aс®u"§r+g'źk®U#ÜĀŌa_˜¢ńĻÖ¹’+r"\G±³“ƒ]&ŗŲĒ–IŒ c°ę³»H@ 7\Vɚa-¹ 8ķBĀv*™*ć”äżi‰3J‘bō«ńnM¢6AŌ6O5ŌŅ—ķ$C ŪŹ Är>•ū¹’żžÜ ū7žÓW_²—ÄMj;o…^?->n$Ś-5A±¦d¬†eŲėƒŠžųįQ}`Rā,`’xc ž#šóķ~œOšxa^}X”|™ńįMƌ4ۈ¤P/£{X¤Ÿńƀ|eąĶ'Ş ’MmäÕ`•ģo”+÷—nüĮż+MĪßüöo½šžŸ.Ø,Mcę\XO"HI==±šüg¹/Ń“l¬øažEvŠg4攘QĢ|üƧµAęI°…$ć­u˜2œžd‡ymǧ„UĆ»ķ`sߌµ¦'!’e_¤ņ°Ccž‡­[Eę,ƒŠÓ‹ŗ(—ĒåYIXҜŗDŪ–4”–­ż Ä~%šGŠ|7ć’ß /Ě-Ōz…¼ć «#ĪGҤķ§#żæcŚMżŖžüż®|ś|¾-±‚=/ÅńIŒÆį»­‚ēk żl𮦗P˜ąĒ٦_6Ļ@GJęØģģtV“Ź^x®ś\Dżj—ˆ|?”xūĀž!š‡ˆ,ā¾Š5;Y,ī¢`eu šr3Ü{\2ÜGłż’Į[æcgą?ĘMKÄO”[µ©„£©±¦i©t± n'­t±ų)šV-4±Æ)ÜPMŽUšę•&„öS.&ØĆś×ˆŻiiä£ōäė@š*ˆ]R0IĻøėSŲ\%¬ Č£Æ>Ā€7ķ¤·\ÄAē‚jՏR¾„(īaż s…«™äff<ē„dĻš‰ČWŪÓ±  ­5­c‰RHU¶ņ8äŠéßF“Ä‘Dŗ=ÄPßæCķ@žŃÆōŻö:’,“`†*„°dTU•œ‚MnM}pńķ‘Ż½1ĶeK©_ÄØ’G/—ŽŅ‚ąµ+E©\¬”„ĢПį'„l©Ą¤Ķū¢0A=)š™3č/.bbœ©>µ>™cw4GĻey?Ņ®Yņå}Č21Ę1ŠŹ‘ņޤæAŅ¢qź Yļ·Ģr1Ū“€hŠķģļšIūn8¬†nZ % HØ:.:Ó¤æK¬)RÄr:Røģ6,$›¢Ź/|Vī£ŌlQcuÜ8>ōĮ£ {«@į ß±gŌī­ī rX·oOzŅ2nKdæ)&Nüöļ]‘éžrÉŖžžõ˜ÕęuA&Įé\¾ß“‘µˆlõ  māC»ķ÷ķXņH-fx÷ļ=hjŹīX£^B;Õ±pŅ©$¹ļŽ€,”HĢ=‰ā¤–!:8!y“ūAlb‘+7·j|‘† :÷¬a€ÄåĘpOå]„ƒ]\D‰oćŅ¢NÅF76#šŌ÷ó+H®9SŠ×ii”E¤Ä²[y%ĻP+–S6HS“ŠņÕe˜|ĖŠČ®j=2ĄKö†£Œ}*T˜nüMŒN’I ŁĮ5”šóįÅŸŚÉѾh·WV…JĖØŹ„mā9äīļŠģ†Ęr‰śåš+ž éšćį¼6Zߌ¦›āŽ]AuęŚ Žü×虹;} L²K¹™"Œ|°mŚØ= £6ĪŅŅ+«¤DŅ“ż±§n+Ń4M>ŌĒÄŠoŗÜķ4¹\ė €Dä±1‚F{śPIƒ5;žī”¼Ł»W=}ī’ņ\÷FqĶL„bį³É¼O∢Ži‰1)-Ļ@=kć?ˆßµ-·†mÆL61EnNf”€ŖŚcÅ(Ō韅ߵÆüł.”½Šü)ż‘ā­h9|—*–ĢOŽąż+ńĒ?ųgąķWÅ×·Wζ…ž8ņy,G@zĪRčicśFż‹?ą‰>šäŚwæi ļųH|Aæ|zR)!X{WōąĻųwįž•eįļčŗo‡4"ĮmRĆż¢+–r,īB…UšcbźĮ°½ÅrĖmDJW``9ĪF+#…“z¾µ#0^§64®d_źšŚ#1uR=kĘ|OńvOm)qĄÅeĶ}ŗtχ>!žŠŗg„oäžÜŌZpēr+|ŻyĄÆ¾)~ŲŚ–³ęŲųKĖk-—īœcƽkNZVGĜʧÆk³ĆØkZÖ­rŒq#öÉéQ.ž'Q s‘Ö»a NE”VūC(烊ŒsÓ8äģs6oZč··®«j™sĒĶŽ½‡Ć ®Č3#\s‘¤#cÜ4Ėß"(öŪÖ½7LšåÕ¼q—#+Ōc„s¹\³±‚Ō˜‚0P=1ZZČQL/µūŒÕĮ˜J]MømĖĮ«:Q ®™Rx5g;fżŒ‰n„¢@Jŗ{×1©kW·- (·—?sü©™ĢĄ¾™ķ#,»OsŲWKlń}¶ģdūŅ21#q-É@JœžŁŚKKnj«ćŅ€&Ž÷É`§'ž¾•nõ“PŒ²@ĄĶŠ:_z¾]ŹĮ“ŗē­vvŻEkY”s† V±/’·€08Ą¬ĶNĪöß ˆ^yÅ³,Čā<ćspkŅü3Ŗéré-篗>hÜ ß•‡ ŖiÜĢÖx’Čé\üK6*œźŁĆ*\1ėĢYŠ*6~e€ię’~į)^r©ö` G™”c éėNÄč”Aź*ā¬'+„a,śižŽu.œ×*†šBŁ•ĒU¦dŲł·˜Š /QžõrĖÄW¼-ĄŒ?±ž/É,łd$äƒVgæ“x?{’ų ,qz„¬čķ`G„G¦j3Đŗ“Ür(.17gĶŲc(ĻJf›;Ęā)mĻ\ö RŽ¦źąÉj°ą<9Ī‘T®VĀęŲ*ŚĮ £®Õ'é@”š9oź¤:,֖Ä̃ uƚļP]ż”ī­‚8'rø„±“O3¾’nY-Č$p*•Ō’j·xe:c‘\“:””óĒ‹ōԘÉn`ˆ£å~o»_–“ĆĮ”źÓxŽŅ9-€mޱ9ėV£Šź„¬|å¤źņ$ļ)™C“óרi~7MLˆCm/O݌\u©]°­cŖ“ÅV‘IkospRąü ‘ÉśÖ›ėÉē&n7P~lą^MZ éX„hŚj"¤é©Ē·q%XójōO_­Ż…ŅÜÉå°„O;qQ LS¬Ø¾ ųßBŌ…’†gŌL·šH£ēv{{ŒW¹]Ų™ešŪ½ŽxäW”J6<śµ.X±–>zł§$ ć<5dßAįw‘D zącŗT“±É)XŹ>^Aóü^“ō°bĢŅīdõōŖNīäsœ¶¦RĪp M³9bojmżõ¬ŗl±Ø†ŽLØ7)Ē>õŃLƒāŽē‡NOˆ^ Š{k‰JjKnqäØĪŗŠł~Ē\ŌžĘkŌoü#µˆö§)X«E¶¾¶…īćdxåxÉūßJIb³Ö<ńņōņŻ éģ `åÜÖ1ŠśgöaųŻaš’Ä+į/ ēūSšŒņi2 ‘'÷yēn3Ū4ć.Ø%Ē«|<ųŽś¦©%Ó5h€q+ĀBH3Ų×Õ¶ŚŚ#2AµcÕW$Īŗ!3–­2·öŒšČŪ\°čW4٬l®o:Ü·qŠčG+E ĖŚ%„ģŚ9\}ź­hЬ£6Ō’ūmĪåP7(ėéVtĻ>™TƒĘO44ŽL¤1]Æź+2}ķ*6ŹżģóZ©Ź] –Ń…£Ib3ņńTĶdĆ»{w¬Č±©¢ŪFžsKldŒžü5ŹxæĀ×Wņ³ž/)HįˆĪ)Ā68|7«éĪßgBäżįŽ1ZŚ7‚%Ō.’ņA=¼z`~5ĢŚ:§ ‡§ ¤ ŗŗ¹mSUåŁw–;.ZĘ%s#Õōų•ܰǼ;Ęv66s6 ³ł[Gļ8ŽVD·8ė]B(gŽX¦ŽxĒ#iÆT›ÅŚuž‡œŠŹ“&J°9Į>߀ؔ{‹‘œ-„ŻÄZ>vӎž•ŅŁųžļĻKY =vīĻ™-t=ODŌ¼pĻ"+0Ęk”ŌŻB“3«·± ĪPģeEz¾j­ČŹē5jźTv[³»UG³ ɕ§hŪĢFxĘ{tØ£,Ŗ¦5d"¶/W– ˜¾ ‘·c­x>¹icfŅ„Ŗķ䐹éĶD¢nq²Ż:Ÿ/ «ŲśššÕn¤ĖCÉā±’«ŃāI®×|2œ–żkŌm¬mcxä¶Ż("°³ŅI€ŗŻ@c8ķS]“bo,)’,}ģt¦€”H¶šĒ§ćµO¦erćj†Ęl™­=!:sŗ“É!|óŽ)śdwv×L‘ĻęĀ„ö¤ę‹-ÜŪ¼ī’ŒißhFP…FļZɳ)īmiŗl×°ŹU°‹×qō®/SÓåŠą,L™äć‘H‚H®ķÄA¼@Ź;VgŚÜ9Ć3+rzU©»ej×»¤%żĻjÓ/mi 9)Īz`U©"曚_Œµ;d†t’ž÷8śW¤hž.¾¾Ż·Æ›²ÕŁšŚ•­ŻœĪŃłÓ·tÆÕ { ×(7[«`®zPCF&µieöI®¬äĢŖžc#œÉžμOR²Ōoīmīlµ;1׌(VWśäRnĄ}Kį[M:÷H“Så=ņ¦c’}k“×ĀŚ\“‘³qäv¬F“+iņ¤nHäƒ×5”{«&J†>`œqųŌ„ŌF&”’s»Jēøćń¬ż&ĘKIę•&Ł‘·äą`{S^Ab=N÷M½œĀ5(…Ņ. ĻåY?‘"(;“Ōw |¬čKD‚7T—~>ozÉ·¼Ó®^D$[…¼Sü#µ¤rkq[F hāū9lgJćL±Õl]–/˜ƒ…=M6O±Čhz}–“tSc-¶e‰,Ō×aŖŻZŻŗµ½±Œc§­O"-ĢÕŃ5g±*³Ę›GŻø&—[ń›$jB$§•JJÜęnŠZ iŃŸę =é’iS^Z›“tAÓü)ØŲ›ō9H •.d‚W&<`z ŁÓmmČ“z §°äÕ NĒk"ZĘ#’%XbłIėYķ{‰Ļ–æ)=» å#rŹŸńøžõ”{įū{”ŗÉü©^r TWBL+ƦR—iN1]^¦éßeŽ<*÷äsZr"\¬qž+ۣ҇KŌ`n'§½V“M–ÖÕÖvĆ(ĪsĮ©p9^Įļž9b]€ps÷©×ŃłH7B¾µ™g1ܒ<†+UD<®{ÕŁd{•10dĄĒ×éJQø䊐ę!ęæ/zé4[4aŃĻN§ŠŸfZzX¾öš4‚Ęöņ5Fźķȹż_ĀÖh¹‚õsü•¬b…(œ­½“öNéŒP‘Œpq]›ż£y<ĀTXŌ·żįާޯDeģĶõ¶1į&˜æ#šµŁŚŻC°Ż42I·iĀ©2b»ŸŹœš®œ Th¢Ā®ī9=z śÆ…|įGPÓµ€5H!%”ćr·±šō§š(ń+?źž7µ[›éRdĻŽ tvž)K[iti!ŠēOœŒĆ"¤ōĪ+Ó³62učŚ*\_iöigk÷›hą{×1&‰ā¶ŁŻčLĪ«2JqєA®˜Iģf¤ī} ć<(,-l­ü+²éJä’GŽó§‡õ×Öļ®!†Džõye@~\ō­ AxŚĘ„×RFʤ”󆆱­µ[éo­Śo“ļpćŽ{ć½4ģżF9[ķŠĆ)€1¶³ü3¤i2_ļ,÷J„7#9lšE>f.ml{ō޽¾‡GŌü7pmf˜īĖa½€ĒjōĖ?ų«ĀĮkv[Q č¬b|÷8ļR7$}ašĻW¾ńD¦C„ÉäDŠĶ)\ē?ä~uĘüvšŽ¶·ŗuʙv¶Qļńŗ%\ū~4ŅčrTGˆj~‹P·»½ŗøņb‰åtp ®Gųףæ<%¤xŪĄ6žµGŌćŽ)NÆŹ‚8$}GėJZ&cŗ”ß“ƅ)šd¾?XÜkcLņ~s»£óÓæżz ÜlzG‡žųĄś »šä‘j{†ņ óYńŌJń oĘrk:¼y}<Ö¬ńKo3dķž”Ź7=cįē¬ļ“IõK9žĶØ[±XC)PHõü«Ž¼ÖįńwŒt‰umNKdk…K•Œƒē(=yąóT·&4ģ~ņ|šĒƒ­4 }Ŗ:€1čīEŪüJNkįļŚ3JÖtūæYiR,g‡Ė<œW5Gf]Éh×^+ų‡ygā+e¬£“yńŪ–ūĆŲ€+õ_ąv§eiö}?L–Ń5 YFō_¼ žå]vŲśGöšųkāļ‚—ņE-¬šŗL.b2’W±ü+ņ?Į^!ń^‰c…®ź7b(A+żÕĻeNéÉw3Ō÷kė›ķ+DµÕōVK!ŲBž‡ø#čZä|}āĶy<0šŚŚ<)&>@qŌ×DvŌš x¢óFin5;×X¢mÅŻ‰ zś“Ę^²ų‹įMÄ^k}i_“–“s,ŸŽĒn CE\ó’ ü5Óō=NŪūdI"Üv– “ćœŅ„ńŒĪån˜Ė˜ŽēåG8„•©·yń @¼·žĒšI罚?:L¦Š}‡nõ󟊠·¶ń z¶‰Į2\#$nÉäQLčGÜæęŠm4¤Öõ¶K‹ēĮņČĘĻRsĒįZ:¾³įf°ń<0Éey a„g±Ŗ·`¹š]櫪ų3YøŗŠ6Ģ~hہ8Q„zģ_¦½‡O’X1P§$ŸSC…cø³½o^ĄŃFģю_9*VńV‡7ü$ŽK+Ö:rĪ’y”ŚüœūńYN7%FĒčÜķ“ ßĀŽ"ņ¬ Ćó”†>>_›>†¼‡Å~,[ÜAĘ-2XłoĮ®*°wŗ*Ć.ńV‡7ĆūżĒHҼ†¾ńųż“ć’i“i·š\<ØĄ…pC㜟R1Z$Lž‡Ó*šÓ ėś_ŒĻYе[[k„ó-KF@o\žÕQvĆCŲ/~)x§OׄI¬  ]&Ł#”üŁĘ}Głö®WCM7Ć>/“ńęŠßŁ÷r–¶‰@B»ŗ’“Ś“b±õ§Ä«_‡_ōŁõĶ2ņĻFמŹ%@óŚNr{×åæÅµ¢ŻYkZÉv„£<`€=GZV)K”ó\–7–@¾£µz?Įj> ń¾‰­E%¹ˆfi qé[C±z­vsĒ,³£ó?ĖČÅjI$l¢'śUJQ•”i’†+} Ætę¹¼·E7iŌõ=?õšōcuŗKn¬„ŒŒŒČė§.‡³|ų—©x#ĘŠ&”p†odX."‘»9ž_•{?Ę-Ä? üoᯊ¢¶Ń5hµõ˜å»ŒtĪ9­<ĪČ3ūż…?iĶ+öŃż›<ń*ŅöŪž»[ae®[+€ŠĪƒ+Ōr śjū'J¹øŃČh\)žõē׎·6{FYĆ$śmˆt×7*W3"ņȼāŸģćąoŽzō/Ūšæ‹4Y4żJ؁²+Œ²€F7ry÷ĶÉŠĀGłšžŲ?²÷e’Œæ¾xŖ¼¾šÅź›i‘v’hé²|ńLžæ)\ŽĒŠųĪvłCmqųrµŃus–e%Œ«$ūÖ$Ė˳}s]1ŪS&b €‹¹5Pe›Ė’„śV“Ą{·$ŁéNPw1+ÅhDGķņˆ3ąņ8ėO†S+1*Žē½šOå  ’:*šóSÖ- ²ń†īOń^•AÉląg?$æ~Oą/jĖ4±Ł^LÓZ¢Į°&>ņśāŗ(³)ÄņŒGņį§µe\¼Š«²ŖzńÖ»`śrD 1„…t;ˆć¶iļ"¾ŠŁI{Õ”)&WŲ’>yÜ§Ņ$`.öĘĒÖ«™ģQrŽŁY·2šN}*«!S# éRTwõĮŪøóõ«ÖĘć$FB|§–äcÜR:©Ÿ»?š@ĻŪM?fĻšļģßń (ųM晒+ –„“¼`US“ĄmŲö8Æī+į|ŗ—†.µæ Ž]¶§ohęēOœŽf¶pcÆ@OŠ ēŖŗ±=³ūjĀkXõKp“G»d…z§ni–Šéw=³šÜ:ƹ¢ÄÖŚŌH6Éu¦rŻyņكśą¶:WšāļŽx'Ę~$šuČ?h³œŖ‚Oś£ŹõöÅAN:¹f:ȍ»wQU v«bś”$¹ƒ Tœ÷ż+'gcčļųŪN›N6 J‚²1?#z\·ˆ.MĪ£v¬ ş揽YņŁ4¢gĆ„Ėo%½Õ®˜×Ā#ē/͌8ä*żGų_ćŻÅ’ t-f3³_·?g½ŠB2Ū‘­ØĪåTI+ž“g¬Gw 6ŌĄ#5uāĒ5»(ł¾lõ®³ĻØĪ† Æ“F[©¬ĖÉ]X.~SӞµ¼V†FŽ“zŃBe=Mz;k¦;_5I݌sL é[ŸŅ±’³eÆrR8_cÆNš„Łą”>|ēžÕĻU”Ž®Ÿw'n8㊹$Ą0²ķõŹĶĪ[ÄZż½»¾ŽW®s^Y·ājvś'ƒ“;ækS¶Ä·“±“üDt­©Ó&R±śkū;’Į5õ?]iž+ų’=Å “>^‡nĒ13¶_ĻÆóÆŚü"м į;Ā>šö—į=Żv·Œ)›ŻS]It2”»žˆt}+NaÓcóo”›«¶žkņ³źłf„¢¦c)m½¤‘ #AĘ©hČPҟ*DŚž­›į¤cŠ ę&Ögø}ūžĶyēŠČøĘē/«xŠ,mŠĖ·†ēšłgāĒæ x66š’QGb÷aĘå#×Ņ—-ĪźTĻÅOŚ{ž 7”ų\ėÅy$×ŪHŽÖŚPKz µųcńÓö¦ųńĪīź×XŌ/¼?į#ĢV0JTL}_žuŪCw©³vGĖžeŖĢDq 1Ó©õĶTĪ%;Õ÷ĆgŠõéÓQZœUgbFg2)e!@ąŽ*ߏĖcŠŽŌÜĪITs1 W>•« ®†MźyüjŒµ5-“瘼J£yéĪ1õ®ßBš­Ę­%µŽ…ou­krøŠ{XŚRĻŲ½+ XĶC¹ūkūĮž"|\kOüvI<-ą”h“ŌfW™ORŻó_Óļģķū/üżœ¼)c ü/š}މ¶%Y.0ev®zŠĀs,ś9m£Wiv/˜NIīMXŪéĮ®VĄ…÷Žy©WČĘ*%°¹–Ā–Šˆ÷¬±V1o5xķ–Mؽy_Š|n-łSēo”¬NŗTĻ›¾ |h³Ņ-–ćWŌ–ŽŪ8'pČ?~z|Tż­Ģ’gųvŽ[ĘÜÅēWØ=3Ļ5„8\ėQ±šO‹ĘŠē©"O¤ń§„Ķ3oŽŅÄ­ĒĖžF=sz>³}¤ß[jv—<‘J$e`lv«t…ķīž/ń&āM'YŅķRÖõ׿%FÜä/`sSh֚ˆģnÄŚ˜“¹‰AT#>aīpÕ 8×2¤æŗÓ/ę¶nc@õ&½ĀĖO’ĆG±Ō,obĶę@Ü”Ļq\.65ę¹×ü3–ŽÓÅQź—+scØĘUį_å”Óć_„ö÷ĀöĀ+†@ĪŹ KZqv wŠ|MØxi"Ōæ²®µM0‚²“$oŒśąõ­‘}iŖiÉ}jŅÅ"·Ī9­„āR·Ō-ī Ś«2Ü(Čć‚+BĪfE1Ī>\œ7­kL‡gM¦éw—Œ³™Īz:Ÿ»ųW?Øh Įo2ć' Ž¢ŗa± ,åļ“ķcK°žŠśUژę\äH§Ø"¾ ńēĀ”į]F’ģ:¤Rh-.mņœÄlŸņ)Ź7+ó6k}ku›RHāF ¼œ”$ć&µüUgqnæoi÷¹Ͷ`8ō?*ęœKHēķ>kfV¬ø8lAü+õCöAų‡į?xBVÖ>ĶÆB6~«”ćœōó¬J?H~ųŪBŠļ%Ņē‡NÕ-Č+–PHŗžµė²ųžŁ.UtęŪüüŽ•½?3 Øź>֗#¹;8×kcakueę żżkŗ™Į5©‘wFģ…†ÜąVy…-ža“Œžuf|ĆfT\J‘ącœwŖĮØIåż€.ĘąĒŌ Ūø°žŅÄKs "­Ž+†–š<ķ*1掆‚eɊXāO7Ģ,9÷§­¼ņ0–8·(9éAœ]™»ˆŃ|ĮCTŌ4”ž–3ėĮ¦sė¾ŠĢąö­ %• Ōu’ÅuņĄ»ĀØŻźWPŗ½£łL:ZŚ1°ĪSÅ7׳ZMŽ«‚¶żš+zM"ŚUŽ`ʲØõķY 2¹ĶźvĶ9bqUeŽåv¢Ž¤3UŅļµ¶Ł4ŃN£ œšĢ“ŸT³WŽń7ʬą€G°§bŁZęńŚF‘WĖ}Ü v®ĒG¾ŪČöäńŲsA”„Š–ėQ:‘0Ť€|¼`­]²Ņ/R×|ņ .ŸāśV‘‡sģ+Ÿ“.£®é֟©Įhė§^\Czżzę¾uÕ5ké^7†å£²ų}kŚLPŲ÷‡ŗdŅh&eH‚Ŗ“ˆ@ūŹ< ߊ“M[ÄŗŽžl“„“PTiBȧ0yäø+9n]µ>ž°ųp|C§4« Ś\„»<ńÜ (Œ\ĻĀæhńŽń։k<·DĒ É‡R~č=z‹ėc)Ęū~xĆ>»ńW†5­é·,Ģńożä{½ į€öƌ~źSx[ÅŚMÕN$ 7ędēÅ5>‚QgŗüEÕ“oj7O§Ęb†g, ®øē?y6Ʀ’f[„­²}ŠéSÄ}ßCŠØK j8»“VĄ³>äpÄō?…{…¢_Eg ĘŻRF‹ĢĖ g½jK=“įŒum_R‡B›CŠŽRł hÜē=ėééžxBóR¶Õõ-Jņ-AWå€0ņŪÜ õę“ī'sŻü==Ɔty‡^?“ÉŽHŁ—ß ÆŒ~"üiń6­¬ÜĖ­ŁĮk5± ˆÆ‘åŽ:¦’™ƒ‹źy§¾!Ģž·Ō4ł¾Żop14j„|°{’*śkö$ų®ųoį§ļķæŚ|£,2Ź€żÄüéJ„£&O%‘ņ޵ĖĻ‹Śž¹wƄ“¹k‡H e™÷ÆoZxCR¹‚śe·ø€Ty'8“éZ B&‘m6Ž£Ćž?}PÓåk{‘bPŪ¼æLׄx³QƒÄ #Oqöœ üćļjѳŖ2čXųQšXń ójŚJ#XKŚI d÷ž•īV?|Q§>£ew%¬0Ź>B™]¼c®jKęŌó»Ķ\ųLÓiŗŻŻĶśØÜčö{fø‹ķoĪž{>ܤCę*£'ó –Ö¶;’ ų„,"čH|ŃņÆLœq\—ÄæxcĘ×k¶źś>¦öķĄµ;Ł ĀNĒ1į;? i£NԚk§o‘6v« ėƶ~#[†+'“7›<ŸB)Š'Ņ>ų“ć ]A®ŪĻ;é„,BՔ^qœž5ź)ų¹{¬n–ż^čåĒógŽ“E­Ī Åxb{Ū?i–lš“Ą žSŒČĄs\uˆ.¬õk[N¹¹¶»Ī¾LńóÖ²’±qģ}1āļśŠ|ké¶KČÓĖß mi Ž­’źÆĻżcSŸÅ·ķØßZ}†ā%8 Œ~ZqÜOš?Ä ;ķ'JÕ5Œ-:Ä@č¹8ęŗļŒś.¶Śmģ^Š+”bJŗæČƱśUĘFNž§Ź³Ég¤i—_Š»ņ×ĢaĄÉ8ēŚ½?ą×‹¦šĖŻéi5śh“)ČQש÷Ŗ³:ˆ“»˜õX,Ņy­Š”$;lwÆvš·ü ¤ü½Ō<]-ęØoż™¤ }˜qÓ„!ņŲłßĀZ7ˆ|E>­wkbn¼?LS$d±^䞯)_Ć w~n¢”418 øļM#U#¼ÕnįƒJ['Il‘[ϵf­åķĶ©²A,°JćžWzÖ>c8MKĮW×OošIv‘“¹³īMtmą­NŹ;dŽ8܀ z zzōؔŗč:’„RÕ„»“ȹŚX±_¼lU†¹}j÷N3“6"e*cœœtéPTQ§©h?®Æ¤ŅĢf’L]Ł‘2ĘAŽ1éõ® ųĖĀ72hś¾…wØŚ/ʆŽ2呸äö=8©’LŻ|3OųÄ·zŻ®=ž—z<łd F1Ąō­Ļė0x“WOoHõebé<,T±#‘ש©ä‰Ÿ2<Ä~'DĖ5IJ\!äøåæęü9āČZ±‡Qy Ņ^eYeQŸ,w5<ŗŁO¤¾"Łipi°^C%µĶŒƒr¼†Hżk‘ųUąÜėöŒmūv\Ÿ~ōā‰’ŠŻÖ|%į=sā¤z…Œ°±EŚ;į•ųĖ`Æē_«? >gĮRj¶vśl6H»$bĄa‚ś/ēYÉ;h)h‘łēńĻŚæĆYŁjńÜM¤»ŗ1•RóÅ|åń‹ÅWZ޵dtÉ?²'E‘Žpčq÷qŠsš"“’<»Rš¤öټ¾Y‘ÜĖ“ódqÖøöÕl<ę°ē<ź½mŠÉ³²šWµ_kšV¹j“^é¦B$„©Ū"÷ēŽ¾ŌÖį]žŃQiZ§:čž!Ž-öĻl‹ÆĘz‘Ūń«±ćŚGĄmwCÖnō{«—æHä'ĪĘ;b¾€·šŽ—ąH­õmZÜłmFÅXn ‚2>ōĢdŃņę±āģ&ń,z}ģóŲ]&ŸīśtÆ ÓµGR½•m|ūŒ¾ŃžvšV*,ōāx^ķ-õė2Ö¹Ł3 ĆÅ÷ćO‰oM„½ŗŪź:ā41<ćL³ń_ŠüE„i>ŌÆÖńgČs,`ēß|všĮš—öe¶³ļqu‘Œ˜ūųč?Z ’GČ:®•jŸheٌ2·c\Ś$H© !ølgõ­ Ģšč~üń³ųæĀDr¬?h¶b` žzWµ‡É`Į‡Ō{Vī72”l[–Ī+Ū Ė[ėDø¶’6Šh¤ ¤žæ,ž(ü>Ō¼āŻOKø &›!ó,]#*»NÓō®n]u5Œ»U-£5“ģ$x²A ¼`Šżų]Ŗ§Ę/…2ųKZŌĶę±aX¤‰0WŒŸŹ§”՝±’ąæµī«ū%~Ö šÅå®~ųĪģŲæ;E•Šįdlž¹jŚÓĆžT,ķo"‰ ļ”Ź”ŗg«|9ÖåH#°Žń–g`˜Ļō|Ecjnp‰H\dūW;ZƒGó›’śż‘æįl|Š?kļ‡WŽ>šA6ž#†1‰ots’w{Ė' z1?Êž(üKin—QŽéźńé·kē£÷˜óŒTŠ,œ|ļ÷’Į¹Ļ(;=Ē™ lÜ{⹫Ęi$pŒŅF½‡­vœķjgńääģ?˜ØYŸämĢĒÜV°F.E•`^?”ĘÉK–lņńVU4Ev’ ćŒö©6ŖÆR{šŹR¹”nŁSh$żxÅk[ÜQĮućūÕM3õ§žĻūkOū~Ś:&ÆźĒšKĒę=WµWżŻ„é;bøeéÉ;Op=+ż ’[[Ż1MœŽ|aDÖī?å¤L2§ņ?˜ØØŗ›œķČi`7 „²šĆøÆž¾1ü;±ń¾‰}¦Ü µÖČ0IŁæĶyÕ#fēߋ¼1āŽjZˆÖÖ’TÓ×fųČe»·a€œ×ą?ķēū;®µ„ź—Pi÷S<y„O³ˆöēåĪ9„ Y“$~ Ķg=»Movī.#sn$QYņ¢6"r[oJī§.§DfH H 'ʧ•”ÜVES€}+s™y‘J&ĪÖ z÷Ķ#H¬P¶~AA²'ŽDlKDÚ%ĖHv/Ė’Ņ‚“± œ>åõĶKĘIE¹œdŠˆH·ž“„źŚĶ•ķ֕¬ŁJ—÷åL2”Ź‘čr}šL?Ū[Wż°?exÖÖöņ‹¾ x“ż}Hęś00Ĝ|ĄÆĶ׃»5ZŌåŠż—š¬zL×wšŽ•y#čšÜk!·'ä‚la¶zsēÜ×§h¶×Vš›[å,š±Tn̽«†¬M¹ŹZōVy’ÓR“‚÷D¾­/!•r §pčF ėؚž’ą³_²%×Į‹ŚĘ·¦h³Zizc­Ż¤±Ćņ_éS”ī¢l”ōĮ¬EĪ~ßŖ][¬ö®·žsžpÓK¤Ā7Æ­KfI›š5ä¶²Ąbaלœ`W¾Ųé¶ś…€™\ČÄpfø+ŹĒMŚü¤ish†+ˆŹ]ˆś‘üYi~j—> ńÖ£§j)ooįkÓÄĻ÷ųż²”[ŽŌŚjźĒל3 Į\dĆ£f»˜äe …v®8’j½ØJē—^6ōÜĢvÆ@j¼Īņ(BŪŹ÷õ®˜lr"3H _åRŻk˜ž;p…ķżF­ ułYāNĪ1ÅqšĀ֒i%wĻsEÄmŪź®&D»A5£²{šØ%Óln]™s°) £CKŅ¢HŻd×vŖĶŖ^čņ Wū1É#œb‚‘«4vļf—ēĻa»§ėV“moK0BĆõ”¢Ō:•µ[$Šn–÷M’H'CČQÄU‹håń$\];” šM2ż…åʘĻcä3ĄOŽ#½h鮍zn¢2œ…=(5SG«’hł–ń’±¢‘Įõ¬F&˜µ°ņę^ø=h(į5j‘½ä2@±Ā22£,߅jh÷w f$fŹõ(3”NK[ńM„rĖoä8eī!«®ŅrĄ`’ oź6klą2‘ŒśŠ'„E4·2;rōéZ·×!d1ĘG^(3Ņg ”Ęs‘ī+Ѽ9ö˘„«ž_\Ó„Õl­¶vą6ząż>fµ’E3) ŸZĪL²«^O,±»=)ņąHI@‡ŪŠĢزgø>ZŖ€ žµI¤rćųæĀ¦Q6-G·'wlzU7ŗ–Śbc'Ö±6ŽĒ¤xjźėRˆ4™&O¼ v®¹ā‰Ń|ōx$źAü« •cæµ·K‚ļMü õŖŒŽSŹ;VŠŌĘQ±dp„Y˜œÕóo L²2üݳںL\Ķ*ȁ‚øĄĻj$Óćcź1ČØr±7hÅ»°šß{F„c¦C§I-ÉU+–ĪF)ĘWfo.@K˜ŪčGfį‰6(÷Ŗø'©ƒ)ö!lšvž’\L€»= c'sHi ˜ŒWeŁJó·k³Ņøgp_'$q\³Ō”ھ¦– ūžTź„pZ÷Ž`µŽ+!šSµcEÜĶō”LŅ2IE|ż~2~Š—ztśüü;š ²d¼Ō"+%ĢżŌSŽæs> ~ʟ >éK„ü7Š-ßU`Ę„s2LŲź¹éŽŗ"¬D„Ōś›EŅ-ō”[«¶ūUß^y9®¢KkķP!.m`ėŽę­ŹF嵔6Č4P@ĘqÉ«vēž•±Ļ)t)Ėyo Ē>żėWŌgŚĢķNķYN] !…¾Ōā‚Y3q?<“ҼÅ>9“Ņķd¼¾Ō­­aO”–l5e8Ÿ™æm? |=²Ō/u?Ca§Ę\yė(œasĻjžv’hæŪėÄæu ėO\jšVęY5—iÉūŖy®ŚN¤ģĻ]BöėPŌfÕµ åŌ5 gņ~olōØ%•Ż–,ĒŽ{WÆJŸ*0«WKĘ  qߌQäēq#kŒ%.‡›R”}¾Õ³Š•bŽĶåĘ;óÅfaĪm[Eæ|kćŽzéķōŸ*%Ža8•Ū$hYänøUėS-‹?C?dæų&ÆĒŚŪ[ŅÆ,4 Æü7ēS¼…”—ÄŲÆź×öP’‚f~Ī²ĶŒhŚ ^0ńĘūėå ŃæræŽ>•Ė9tōb8Ņ b”@ģ*ŲP+–L¢¤Į»‰:ÓwŸJŹR*©$ŽY;”ā¹ŪļXŁeYĘļC\ņge(ćĮ)-āÜKc޾ų­ūHų7Ćv—zTz“wZÓdFøūsJ+Sŗ Ēå÷~&xĆĒ~÷sÜĮ¤³lŚ„ōś×˜ŚXdŽdœmł‰<~5ŪH%3B 2³øÕļ³ŚŖqŁü«„Č唆EÉ'——ēµuŚ?ƒoµ ™U’6Įt¬'2l{O‡ü–~O™ ė^»¦čq@TR’÷ō®iK¹|‡Æi E} öĄ­ĖöN (Ūž3X6fwk¦¤‰ę«ŸJŲ²Ó~ĶĶ»y§3«[Ļ ĀX$ł[ŖžÕŹRM>žģīĪpǚŲÆ|EēŹˆņ«»{֝Œų@*ĖAƒ-ÜMū–LsY“‘/ E{Łįfł ¢ćM%Ž4)qR&wō4 •ßjĪ… °,ƒŒōÅ[ҵ+Źg–i>ĢÜmĻŠ¦ÄĶ}āźĪįĘz”čj)/ī3Č$KŽłéõ v+IØ3H‹2cĘå¾āp#;•Ņƒ9ÄĻÕm•‘'ŚĖƒ“čkϼG½ŚŪł³O˜œ2ķr1õ’ ŽŒé<7ØłQ’$¹L`:TW–ųŚ ±ĶĘ„ž‹<ń‹µ õ¢ī yā)ėĆ{ŠØxj×Åė6oz,µū¤¶0kͬü āŸ_6Æķŗ†2.¬ŸUķNĄzÄŚŚĮ%øuwWs¤“—–źķ; s­#)Ō`ŽH\ ĶČēČ"ŗČp™Ą4twWvoŪ4n9ąŒę“Py[l #ūPi},7BĄĻL×zĮČņ(&ś˜“]Ķfą…FSśW=ØŁ›°Ļ*1ē#ցó’ŲC(ˆ HóćŽōٵ³T#9śu –ĪŗĪäțÓ÷h@ł}+¢²w˜¹SĒEŪEŗc†]†¼ēZš¾éW˚WfźcA¹Āj¾ø³tŠā†T°ķ\>Ʀˆ£qÜąõÅD„Šø#Ē5kVyYP2œžµāž0š}Ź0Ō‘dŽNŽõ©†ę·??i/„ßXOā+;+9/ćBĮ@ĆäsÖæ7o-ݤx”P³ ­ĮSč}ė¢śõ$Ķ{‰mćU”Ŗ6õĘk»šÖ¢œĢb—8Un†°©”Ēs«¼»¶æœ\[\gą°Ūѽ+·Šõ»°öŃÜ«¬ »w޼ꔺŃŲō’ ĖugØAvdO(ń‚~WĮļ_£Ž ńf—Æčé*ł•PFpŽÕ‡²f°FīŪkŅ-H'Œœ`°ĒćU/4ŁĮ62Į8ŚéZ%m+õ(Ƥɦ“%ʰlą1Vn|ńžUć^ dr)ÅŲĪOA XHž`b9¤TŸ{”®ŗdĀ]³Gqn#b‘Ü(#dzłŪā…lµ½7U“ŗ¶G.¤&Ž€śÖ‚”µ?8µ NuGIIšĀHg0”‹)Ąć=+COš®fæūN¹j…P XĒ)”v&¢e'©žÅ“Ė•²¾‘#r=¾•Ū|;ń–³ąO[xL¹7Vķø·ņų)܌rMa$†~¢ų7āā]GDń“4Ś,މĮ— śŽ{fæK| ¢ßx£E]J†įBb¬9śSŠ0›Šė¬u8ō‡]:T+*¶9+¼³Ōدc'šė¦qĢ‚{‡¹¶C{V¶ž¬Ī‘Ļqӑ[Y§éś#Ūµ¼šÅpāøsN]*uņŃÕ¦3/Y×Eę%“ĢQq×wė^Of“Ē3ŹĪ%\šqڐ¤ģtŸióXo`3śUÄŌŁ?.Üć ńAr>ņsˆÉĻÖ®n„¢ää‹‘Ž)„}™Ģ^^%ĦX®G~+>_·,y…˜óÓe‰Ć*I–a „Nņ”+ī3šó]gĄvZΦ5clϜ°jćrŌģzG‡ü3£č–ĄŪi‘Ł\¶*1»ßµķZņd5®Q‚pzŽ(”Jö‡Ē< ¦k>$]cū:9oQЉT|˜ēŸĘØiZŌ‰ ’Ż8Ž:­E‰s=SM³ŽXHT]߯­«[O!‰č“HĪMō25ay4ĄĀūćōō‘>dĀ9Œ‘“ĒJ MHķįč@“+NĀ2÷”‚®qĻj Œ¬z-φąūa”f$Čėī+ȼE ŁŽ4±‰367c§ćAŖg“_ü5ņšk‘t'µćzŖéū®ąX Ļį‘:“S=n¶&Ń,m&’?(Ém Ęæ½{ļ†e6ń$SĶęmČē5‰‘ŃŸ¼S. )ĒLę»+_2ź!pé…ōĘ9÷«‚"_Ž0Ų6ū՛ķNĖN…„hÓi\rzšŌgĻ>,Öķ..®šĘĪ@īRų׍­źźL›rHcn{Š>VV–+˜¦‘”•ÓŽ}+¦ŅÆ®’#ÉB§–ŲĶCó¬swŠ+Źv²‘ŠŸZϹ±KĖv·–i”Į(åHĮĻQY°"ŸĆ·Ś¤L čƒ#ž ®³MšĪ£mo ŻŪ¶Ņ2=é¹uc§įŸÉ•/s…{UoģŲeŒłd‰Į v1īŁY‘ŸēĶ-“WW ūT|£9ĻZfŃV8?é¾"»·Ū¢_=µĀJēļJ·įE׬,V JigŸųŒ„Ö±hgG!ø—c” Ī=*tŠ)–LļķMŹĘS&‡N]¬ M¤p*ņé7É<`ĻÜūT¹-ˆ¹‹qiyę)Ś žŽ1nĻmn$Ÿ8v5&O”ŻźįÓR“Es•ł[µiźÖž}—Ś!³WĮķ@Īn$¼…D‰‰”ėL’ś”JņmrpsNĮbķµų”ąH®r+;SæeŒ .Žō•œ<šŹŚŹG0\ę½'LԐiŹöĻo½ÉꐬsZę”-ŃI$sĄŚH<jäR)–`CcöKš4Œ»–ZšNĶkmhļ"Žø­ųķą›Mv•¼¹UrV”Ķ–yŌ÷2[ŗ¬Sb=ÜäcмśœéČ®¶Ä;žG;)›s®»:Ø–^§k³Óõ 9£µ;„nW%O5WŅČĀQ±Ųh­kpÄĶ"”_˜z ź„vÆ2+HoŽ8å¦ģj½ŖčĀ#’!TņūĀ©"“1žÜš~#.:’Ņ«jz|š¼&x®?¼0M7ę/oiw#ßŲĶŹHÆ»pścŠė,„–Ä"…r23FĘ Ię“}³Ā¾Lżˆn×ÄąCöY„™N2N8÷­c+‰ŸĢ'Š<Æ|NŠķ䳌\¼, 98ŽqZóŸ ~Ļ-ń=œW0ÜAe}m/“5¹9Į ‚Üö W„sČśÓĀæÕņ§Åz=S_øŠœ™Į+ĻįYĖr”Ł|)Ņģ|NtŻ:ż#fg*U±‚AÅ~ˆų³L°ų?ąD²“HÓķtėūU_9“IĘ@==++čC]ĢĖķ,¼o©§\I6™%ĆLaĪ‚:ŸĒ·½væ|’ ĆŗCxr]7QYBĪz^µq‹Ńö%hxĶ—‡/¼'ŖI¢ėzn ³@ꊌ€ż Ÿīšū+Ɵ³ķž±š³EńG‡ōõ‰Š4ŌeÕĒš· ’ŽÅyžqū/xƒÄ¾ń|ž×Ę”ö,DR”F{§­~„ź·Š]iļ*Fʘū®Fē>ŌŁ£µĻ–>1ü5ńOŒ¼1«x‹Ć·sĮ{§ÅēÉh3Oźn+Ėgė ųŅė_šŠ£4¢%xf.é¹kHÅæ#Šų‡¦j~ńE–›¦+ŽiĻ6Ż3å©ļ| ē|9¦IØź”'ž%Ӊū„cėYß[1ž‡£Ł|šÅĒċx­5GÓĶזcg(}¹<}M}S©’aųDŅ<ćĮm&Øģc“ŌvżØ’pŽ†Ø¦xOď€ŗŒu½#P‚ąŲÜH˜»Ž L3ņtąVüæ 4Ļxjź4Įu3G峑ĀaT¦a)>‡Ę.ˆ4’ˆęņņeŃā“>[s'ū>ėé_Ś3PšÜ>Óešž¤‡ÆQ=Œ“fX˜˜€=źł‘“9ߣ«ā„Ē„`Õ¼/-”wś4¹ŹČŁ}„F}źąµKmrö÷LWņ&™œĮ$¼(äń[)Zœv§āĖ-bõ­”)k,±±žOć^šēÄz×_dŌdµ€rÆ0Ę~f”‹M™·ž3Ńu_Ķ”° O$šÆéŽÕė±ųgRøŽŽŻcŁrJœŽæZ‚”ž>6xź$2h<é«F„JU°Ŗ½3‘ų×°|¹±Ó|`×-¦ßē±'ž§œk9'cKžĒićū] Å&×ziė 2Åęz’tÄ~uĀ|Bń-慼Iį[‹k*ęķc¾·# åæAŽj—3“?Peµš7‹žŁcM³æŃŽ$Ū €+G ‘ŪØńgÄ߃z Ī/¼#o‘qo#lµ9(TöU8ŲĘģł?āwĀÉH¦ŻĮ§“‰3’a ÷ėē]+ĮŚ„•ŝœ÷¦öI.1æÉĘߥvā•ģĶį&}ļ㯁ŸŪæ³Čń7†5&Ō ×Š^Ōõj¬š¢YE®é‚a_9äąu­išÉŲķ$Ō< ௉^žÜÕmV…üĖ9 —€Ž[ńĒ=ėķiu»MNśE‡XŠKBŸ»œ±Ł’22qŸAU-ŒŒ?‡¾×¼YØėz?ˆžĻor„Ėi2Č6Ožļ¾3^!Æų‹Qš'£»·KŪ­ę(®§“Žp*ŹNįŠĖųńƒXų§ćokmµä kt–²Č䕑Ił˜Ī¾ś¾š»Üčlš.§œö{ćł±ę1NTcńā¤r‰¦šÆ‡4-kūOYҤŃüdWeÉgdPzcėŽ¬|Iųqećæ Č4-&ĘĒ[XÄѓĀ9œśƒĒó W>HŠlFŌc3Ė—ˆćal“öļŠŅų£¬źŽ3šę–/,üŁ-äŲ—\–až„ž8ę.j2I„^Ū"Fį‹Äžāø-f+‹;ƒ ŠÖ® ŪįWÄ­KĄŚõŠŪ–+2‡(ÉķėŌWźg‡õ[sK³×l.<ŪiNyźuüEt©Tgi-ŚKr\“׹?</Šütö’k_ßŪ°?3z§ł÷¬&d§©łÖ±Üö÷6óĮp§kĘė‚ zGĀoÜü5ń<:Ž÷¶Ó]‚\"Œ)\õ"³;)³é?Ž‚ā}3āo‚Ś5ÖĢ1^Ē$Y_Ną21ƒĒė_ŲļüöĢŅ?lߣ'¾$¼{Dų•įčSLÖķ•÷:2 rzóß÷ÕD¶;©ĘčżŅ5ģŪ¤¹…Š€ĮæūĀ:µ×Šō9®upøB:óXHߕyā½FÕ“æx[Åŗd:æƒuĖ9t­bŅTܒE"•Ė/qÉؚ’<ŪcöcÕeÆŚ?āĒģ÷s¦C™kw.Æį‹‰†LŚs¶äRIĖiĒLJÉĶ)§ßO×üĢd~{j…’HܔeŹ•ō5ĒH!ó"a·æ=ėµlqTEVTĮ'p>µŁČ  ūÖš9^B)ghŠ«€Hą §7™?!$dåTBž£ŲŹ…¾qÉ­X¤‰ö+es×£Ö2čĖZF” Ŗh$ņIRGćQmltÓcµ=µ['“†Y!•1q £mdNQ•ŗ‚Æļsž[’OŚæö]Šüć½nā_ŒŽ ¦źŃ_ō‹ŪP6Ē>O.óz©Ļ'™jźĒTOŻm^+]‰wbĆĖ”e€čk‚汎u–ŚLŖæ#=«Ļ¬†|AūCų(Z’aüH·‘'ŽŹSc¬[²Ū7Żų?Cė_ |gųIoć ź> ¹Č®‡SŅgb0Ēi%vČ=EsŽŻOäö®ų9wš×Ēwš®šĻ£^IūŁ ĒŁęcų×ĒרńĪŲĪ»čt9źĄ¬¦WVŽŖ¤ć€?Z<ŌVŲTīśu®“ŠQŌ©)2Ģ]žęxØåPwm=[?J †Ä°"Jš}ź[fĖ+3ś“AB33æē§z *œ~ļüh.žę¢„“Bœw{Wź‡üÓöݟö2żŖmtß\Ü'ĮĻÜG¦jŸ÷VW.p’²tŚ9śRßC¾“?¼O…ˆõ ZkŚ:&”cĆӗ '™ŽJś’N¹i­TĢ@™ükŠ”°Ū›t¼ImŻ<Č]x?Ż5łŃ’żmž:| ŌµDÓ£ć G&c‡kķ9†%‰†>l¼T>¦¹‡cü÷>6|9¾ų1ńC[ų5­Āč¦V¹Ó&až¶%‡Ō ćšÆ ń b)üĶ„§ņ„(čB†—(óC’†įé_Ix>X£–ŚŅ ˆ¼¹ŲĢŲ=æZįÅF覑ōN‘”j6· u"f7]Œ²½zŧ„t÷ÓĶÅäpK‡”Į9ėҼˆŹĒK=oDƒOøŃZīĪa2Ū°IA8hĪ8$Våµßœ©2ŗ©Ē^•ļa*^7ghš¬Ø"¹É?€¬éžPĶ9ÆZ{] ¶—Ó­³ vUĘ UŠh啰]×”5B5Śy#Uw§j[čFĝ¢#wv rīäÅ*Ē l{f„³»øRń€6ć‘éA<ē[£L‘[ž:ɾ¼óē0(ų…ń¶4Jć6¶g®B’z·ŠŠŅū[Kh­m-o^ŽŚĘÕ6Chc€„_ƒĢŌ·[éqyQÆB8ǵ39¾‡c¦i)my’½¹īÄä„n ŚŖ*ē4åŠFp¹&°Æµx”ü†ŹJ¹K ¢®pśŽ³ #O|Ėæœ ó\»ćke%ÄĢ!³Nzö÷¬ŽŹq>ųĻūhųWįõµćX^Ć<č­øÉŒ~5ų5ūP’ĮNƵߓéžiµ}NBc.¼[B}r:ž½*W:Ę|Eń‡õ9µ_ź×ŗŪ±‘¢y3٧JāRet#Œ£½Ŗ4ģe:yČ ņżzÓÄ[¢Īģ·ó»‘ĒR Cą(E^†ĢŹå³ņ{Ö4ö5`Ó÷“±·`õŗ½HŠF’9ę©Ń]šϽ Š>‡ų-ū9|GųĻāk ü7šēˆęiŃ&ø ESüYWōńū’Į¾|"†ĒĒ’ĄńæÄ)\M¶ņŃX‚ĖŽ™’ Ā­Nˆ³öŪFŠ4 iŠi>§h*(T¶ Ē®+¢†Hd@`txś|§Šį”ÄIČ3¹²•YØ&{H^“¾œŅ–ĘI lqĶP¼¾¶°ˆÉpįėX4©Ÿ>|Bż |įV–ĘćU5>H‹[õĶ|wćÆŚĆv77ŅjØ.@;#R żkęi®gÕē–žåI½”īy®1ųV°¦\ßC×¼!«čśo„ļü;ŖčŻĻ$†xn•°čųč}WŚøi"YžH„G'ÕŠ‘Ķ7Š„pŽkµ«¦ųnīžtD%Aö©rD¤{†<%«ł²D­Ę0“^Į„ųzXT·Ž¾€t¬Ü®kž” ųn}B7P‹/fWs£xwOg+uē/Z††ŻK§k[1‰šē5bÖ'ÓwZŻ@UńŒć„dābX’öT]ØųEä{V”zĢ’g\z÷©"R±Jkų»œē§„|éćĶ[Q“YE³¾Ī¼N¤ūŠč"[–4÷”GŌD“ “Šö ‡ōč^Ńžpw©r$ĻŽęuŲ$c}yw’Gt,{b…+ˆ£$že¹2ÄL§œT–¬Ÿe8s»ŗµPĒLÅpįVķ¬'W g@}h­xŪģØb“l‰ÕOS\ę„ws"ļbĶž>“•§ź†6 <.6žC ~UŌ[jö7R­ø‘bsĄō¦•ĀÄś•­Ä ˆA\&„¢Ė!•„ŠŻiŁÜf–Ķ§Ü Œ $mŚG¬jņI+…·e\ś Kiō«SjĻcŠ?ō¬(ehu#u™ĖŹNA ĀX­¦ž+Člį¶øŚ2PwŖ’<čƒęf€3#I¼’6piUī,s,22Lō ĘDŃ_=Ź:ČĒueĻl’oI@aŪŚ€QøČšā6Td&.*’›!vŸį=(6HI.cT(ä’?•aj²ŚŪۙ×9éļA”·<³PńJAxŃŹø¶$.G8÷®ĒLŁ4m$,&·?tćµJŪ)+,‰`‘ž+ÉüQ®>”e»5õ¼x,#9oĄPTcs§š·‹4ŻjÜ<lÉŚUĮVSčAÆH†į’/)YH#­ū25‘ĘGĪ­gEmxnĘēóbfļÕh,«ā«&–Ž6hä;3Ÿa^­É¦ņ]W?ެeøŃ䚽ū‚š˜¤”6 ’Ōōš²A`Wø¬nīkĖ”ó/Ä/A4ŚOd²Dr=Å~9üiųsqįOØŁ :dņø“'H)P}q]0—C&ŗ-sg#.d_•yéŅŗ’fµ¢& VXS'sžŲ5bZG-ž‘ؤv’G>ćęü­Ó>¾õļv²ųjēKŽöxo`”®Ń·*øõ•ĢćÜź„Ģk‰µ[hŸWŃoZžŁFŅ„øQėŽµōĮŒŚCĖo ė‘eŻ\·• ńÉū°Ą’#Œ’JŸfn„ŲūF "ūM½b吱÷²#Øö®ŪūGģź’Ü0d^¹<Ō:w¤Z¹ń”7zi°–ĀĘę’²²žńĀ¶æ°ž bw6÷£<ĻŁ£žNåhoŁäóĘ1ŒexÅ?XÖ5 DŽŅŃbø¶–ŪĪ}+jh“źųäO#Ü’aY«Alķ|©Ń)É.å?Q[Å\¾=ų_ƒėŗwŽ“­>h$ˆ“t‘ƒåäē¢žF¼ĻUų…ąŁ“&ę×S cWPT=ˆØ•2“±å:_‹“mzöāŽžŚO ©9P6ø=Įō­mHÜZ<ö°ŻĮ7$,š«Ś¹å”ŗ3鯃֝«i—6„Au§•!“‡’õWé7Į‰Ś÷†¦m3PšāM'īG"1ĀÆL7=}éĒs)-³„½³Ō’;«+Įv ¬™Ē#æ5Śiśģf³®07ÖŗéœuQŚiVor#–2uėŚŗ[mJ vdšĒ½ėS™K¹`x‰ `¦t £æ½Gys>¤„É#“ž×j5¹ēZ”w{ŽÜ¢4M•8¬Ś–ˆ+”'”ķō¤DŁuēŒĀĒߊĶ[˜|ÖłYWū§š Ķļµ”v•lōŖ:…Ŗl[±ĀNŠzrxžtb-)'„Oo"Ė~zV’ŲĒ”>zļ;q֛eF7d§Ģb$)ČĘ*ķķÄŠ>㙣Ę8Ņ5Jʶ™%Œįu§ 笋«(¬ē‘įUäž+hģ1Ć %•Ąäq]µŻ¬6b9'Ž9źqšr`xž½iöé'ts›² węØi°b­Ł÷™½cp%“·šĪu‘%mø#®ĀŹķŽI  ĆøėHe±ŽĶ:¤s·KģÉ.ęĢjĆ׊ ¤ŹšX؜•<ž:÷­TŅ'†RARÉÅh A“ŅŻĖnPĒló^i|·ŃŻ #—uøo™r?54„ŗßŪkl-®Ö–ĄĻµx_‰4ķŅāvH bł”Œž8¤įŲŌāķ%“!‚*$Œƒ]ž“ńDĻą®3€zV2‰.Fż–¢Č讪ͻęõézfŗ“*Ä\!nĄć4B$©kc”T±’Ūs OזĘ}«ÄœÖ&ƆīÉ»šūŪK €į¢6FM4ęG)$K¶BĢG^•ĪŻR!ŗ7ómŌ—½&ĢęVÓī#’EŠed~¼ō®‚}2|#eZ6ī;V z„Rڰ][Ē$#×½zn”¦EyoXm§*;})žG­é’Ś;C~’"6@#ŠĒŃ쮚K‹[Tó˜·ńµ\½ }įKę/$ÖĘĪI5ĻH²X–‰Uü±ÜZ„OøstŻ­ī ¬óć#"µķtŪFUM·vG‘UĖØ”‘KPXąUB«©8=ĻÖ°ŅC:°_—µfĢäõ%±]J7“ȹżÉå—Ś·cÖ8Žī>n„w©$i’ń‘¤UFēž+ +–. ē²śŅlIXӒkc8,Ļ\•——ČĮe>I8=©3_£–I”7^ėĄž+¦­<ō[‰­n2‘Ŗ·ĻB*Ö)Ą­š÷ÅZé°6zÄ鱐‘€X£Ś½7ŌµyU‹£ļQ&Y&± ÜŪLby!¹ Ć`Ö­•ˆ‚Ł&Év‚9ĪźÅŌ"Ldl²¹…Ąnżźi„²µWC±ł@銋” Gp·7Ģ3Ą8ĻÖ³ļ%iEFŲĶ×)Óg‡ųĀ j!;"ĢÖĄ|å jēm{ÅGĢĢ£;«šO””R)-^41»ŽqóuÆ@ŃÆÆl!„Ū~ö.…[œŌŻČęńćiÕ:k -±,!śÖ°FNE ­d e†(ĖvdÓ,u9ī óĶ(L“—5½4+³&ńžĆ#J|^żMki(µŚac…Bś}ćW(Ü®s›ń¶×;dŒ`—ÉĄćÕĶ5ÉIƒ“Ņ,``)čk)FÄ Õ#–rr\Ł©UkŲŅķ£³YśĢ}ŃYŹV[ŸŠmā/ ų[Āļ‚4M<rŅ4˜‘*żÜõϵ|ļšćā¾£#½ĶŅ$W>d”؜0Ž2=qÖ½é@•‡ź}/„üTÓ5ū(ĖÜ­»nŲÉČŹōČüyŠ&ŅańX¾Ń®%ŠUe%Ō’¬Qü-ėX:Cä±Ņxļā}Õ煔ү'–ę0p Œz×ʓČóėѵŸą„0qœńśÖ”鉻- O x›Pųqń;»fŗh§eWü˜ēńÅ{ŠńlōÆGńĒŻzūXšļĆÆ§Ų/£œĄ_pżó±Ą,Ē­.U±œ—Cč|#Šō? ÜĮāżZÕµM«*²„O\äv­?£M»i­cŗXÉSŗā/ū°}æ WÜÅ@š_Ś;Ę:߇uėæh?n²Ō„ķ²˜š“s÷CtĻń.½§ųó]Õ©gu ĮvŲ~ówĻ·J“vӍ·>ƒųcūCŻO”·…ÆķīµŲ°Ą@ ük™ń†RćP:ć\”iŪ'-ø/įŚ‹u-Äé×ü!ØXźK ŗE±’ē‘žœ~uÕi ØųŽy'¶óK €1ŽG±­Iq3n|$‘ »Ėõ6“}įørO½y|·¾)’ņ[Hūhß±.3ņ'®q[G`Œ{žŃį_„ZŽq‹¦’ĒUGO6[HŽŅ噱É=kčŸųŗ-^Įm®(­¶ē‚œōĻ^:Vr,×> Gć-kQŌd„Ć©!?fu’DĒFśā¹3Gń†‡gÆé6’KdžW˜ØpŚĢō¤'†N—ńėPŅģ"×.R÷Yˆ˜ŽF9čpŌb½ĆĮm/?Ńo ŗdyn¹P5JŲæž ZYŲĒįū»„‰˜ĄVūøć§Ö½GĮž½×õ+›wĶjĢ^2ŲĮć8üh’!ǹóWķ!įwšœz¼…m>RņEČōaų_¢§uėMCPń²ø$.ņß(äśW]ńóį¶‹„č/Ø^źKqtAĒ–Ać'ęÜ M†~jėzŖčŚŠ„Ȋhę®Œś××ö?^ųkko¬šˆĒ& `Ū'ßŅ·[Xo±åö^9¶k†·æ„iģĒuį[¶TšåüKįæ[_Ķ=”Ńė–ĘmÉ-ƒĪ>•CSŌśKö{“ńĻ‚µõ- +§Ń/”G{¦Ü7īĒ?yG®kÓž"x‘ģ~ ¾“®iWś]ĆmC:\}ÓÜb“cęFʝ_Āś‡‡Z=.:×QdÉd,iŒc¼uƝ|ć{ķ.ĪļG±ø¹ƒM‘2Źs“ļJÅ$n[ųŠ "āé<ŁķK«f5Üyźk£×¼Qh×QjŻ}‡nšĶÓźi6C²7|'vśØ“SeI­\|¬ŸĒõ¬ļEkmŚ (̲üåČäčhRčkĘ4ķGV¼ÖÖĻN““SĀKå '¹éė_uxĘźÓp’³³(R­Ļsš¤ģTųÓ§éz7Œķ5åŠż¾\nȹ*Żö$×ÕŚŸćmkįŻÕļ‡ģާg5°;¢éĒŽöā©ŹźÄžæ~0|8µŽĖP½cmnæŗyca$kžĪ:ōŖŚgÅ ļ£KÆ[¾L¬ĘyN]³Ž w¶§æ|1Ńąŗ»øŠ;š‚ž^>¹÷U”3Xčń°fņ¢8<`ŠL„v|ūNźÓų‡HŠnŽmīmX nUv’¹ą±ļŽ+oĄ­g­ųB‹}G÷Ž^Ī'¦(1óƈ~x͵-C_±†Žü¤äG.ŽR2yS_IčŽÓ'šzZŻh¶Łm”Ė/%½G§½)- ēPā¼oį ŪhčŗĒƒ4}J>"¼­²(=Įżėóæć?…ąŠEŸLµ0¢’?ŻōĶDw#Śj|Šń£:Ē.ŽĢ§ØÆ®æg?‰Ļ©§ų"üO7Ÿ6ĖR8UōÉ?…uA–ŻĻæGŽCūŹÅYOJæj±ƒ—Ö±Ķl­æŽ„=ˆ²?>¾=ų>_ xĘćW‚ĶąŠ5 YķøūżßLW‚Č©pLs‘åæOJČė¦}”š'ʐ|Cš½ēĆ ¹”ŠśĮŪģžbą‘šėÅw‡NÕ”WÄ 9ā9ŠōžhŠŌō)ĖVmZ‰·‚ā¬å§\Øø¶pr6éĻé^õšKÄSiz£é3ÉÓ.@Į'”óżkŗóāĶeŠKø‡Žūćś×ą÷ü’ö6öŽżœ`ż¢¾hQ\ütųrßh¼0.gŌt  –6QĖ€ qŸI1Éē)rŽ4ׯ}~õtsĢž¼ggnēOń6˜Ŗśņ—Į8h_øeź9Ē­yĢ ¬ųXńŅ»éĖ”ÅU”?¼JŻ)a]Ī Ž§šŽĒˆ„‰ŻŽGäėž)ŒŖ‚3Zs#;¶:Hǂƕ†ŅŖ®AĻ4ĶāģhD<ĄwĶӓ֭¬ØyēÖRÜźƒŌŅ·/GdŠÄqČä~öGüßöø¾ż†k‡ęŌļm¼ u“āhžgŽKI)vAŻ VJ”uÓ}ōÆš‡Š“ŸxkI×ü7se{”j6±ßéÓĆ xē‰×wŹFF9ü±[Ļjn¬˜Id1©¶m8oz¹/– å˜÷õ©:'^r8¤Tw&Ė«‘°õüŖ Ė7–!q}lŽl*§wbcI“™żŅ’Į’ik/ŚĻöAšž‘Ŗk—ü]ųmt,ِ²L!@6“Ÿ¼ ®Ćė_ŠFÆ¤‘Ś_\ŹČ #…ūż+–¬5:O@¶‰aŒ*±tĪE`k`XĖ„䬶§÷WQķĪųĻ\ŽõÉ(Ųü€Įk’bÓZóĞ ³z¦’_Ä,„?{w§;~ś?Åå’qĒAļ_Ģ5͵ž£§Įt7Ķ•Īā:’­;hDŸcƒ‹t$eXn<õķž¹óģ­%XA• ĻLjŠå5§#ė/ųÉgQg{m`”ˆąń×5Ń|BńMö‹§ŚcŸ1Žd\ēÉÆŸqŌķ‹8ķā ö‹ćm[‚ߣWĶäjrĀqÓ9ćņÆ­“ūŲż‘˜‰ćž”ī`_ŗsÕ=£hÕHVÜ=zUg‘œĢWµO±ęMĆŅT,|ĻJĒ“žEŗkT…Aäa…Y™Š­½Ō1}¢H‚»źGw}ēZ4l«×h2”Šp[$؄‘øwĶX[A¼œ =E„q°L#ŸÉŒ;/'u6{3-ĖIīÉęƒOfZÓånc[…ž3Ž­k&k ˜šŽH|™p yūPTUˆŚŽ+ȖYXÉ&ģ‚„Ō°8o3,­Śž•¤xƒKæÓ"³¼Qo©©Ć1?,ƒéPĒm \yĒŠqĒC@Ėw–­qjČØ7A\l¬É¾ Ą’ėPRŸC—¹²/:²–;Ił‡v(nTˆKNąŠ\eÜæ¦ė7Ræ\ŗžõߣųš+‰Š"ÓŒę‚‡jvrjˆŅ*—Āö^GÖøųlDrfeuąPD¢K8‹a*ĆĢōŖv–Q;™%B§Æ'„0QźvŃč¢ę„‘ä°äõ;V&„įÓ¬EŌ !b܂zR,ā­a7·½ Ć5ß?„ožÅŹ¢Ē8$šeÅŲå'ÓÜyƒ“śÕXģQ‘¤dß(8ķA©µ¤GĀČPŸQŲ×s”k…lˆņąśŅ&Iō2/āÓoܵ›|żY3\„ż¢&ÖA…ĻĢ1Ö§”ĻašCŚ»…< dT1!6āBŒŒć­PŌČāåÉŪ€; ŪÓ!h%Y°w”{PʞÆ]2eO^•gD‚{F`ŹŪ#'Š bźSlœ›ˆėŸJĪm^TFU|Ņ~PM Aō+Ͼ`Eג+>UN>zĪQģYjŠ”b¶ ‰5u2õ¬ĄĆū Eq8ŒŒ)ķŽŗƒ‹uI ŪļŚ¦X’k7‚Ž_ß&H#ų…Yņ¢ŗ‘ļ@6;Ķ„ Ģeqżi$SELć‚sS'aµ‰¶Ŗ„+“š­©iÓDĄČ›ƒĻ÷©{@3"ŃZDŽIT¤„qšŅҼ<—³ū–l“ŒńéS*†‘‡sÓ­¼)‘ŸźéŸŗJµ“¬ƒå>Q8éҹ§3D¬l[[F$3HåXąaŽ+‚Öå°[É$ƒ“É=j" ¦³Æų‚ń<;ą½2ļ]Ö^Q†Ö3!L¼Ųč+ō«ągüÅZüž&ųū­>¢9 ŅmŽéĮ;ż+xĘĄ~Ģ|4ųuąŸ‡~±šĒ„<;„hV0¾zĀ¢gķ×Ö½Y|ˆvö1łŅć€ĻēTCŸcbĖĆ^{™µAę7@¾µŲŪŚAl‹1¬h;UÜĀR,d.j”·öń1ęEJ¹;hŒ’0õ ēxÜHĖ=łź+ĒüGāČ4ĘDŲ?ėjČź„Hłā7ķ#įoźNu[ėmRŁTł‹ ć×ÖææjĻų)5—…ķµ›=#SŗžYIŽŅĀ 7<ށˆćõ½(\ģQ±ųEńcöˆų„ń‰Œ$Õ‘”nßöy 2óȑ½1é^ļPīŠŲ’B~_„zōhŁjEIX„ĀN=ėOżŠĀcŻ+^k3‚s‹cĄ€?AZK²?„AĪēŲ½md»Ņ@7.:{Ö宑#”l|€óŪ 7;ßxOZńv½eįxwTń&¶ģ7Åm`ŠxÜÄWī×ģo’cńõK/~ŃWųgC…TŦøĆMĪs·ŽÕ”źYhhKŸgļ…’ōĖ- įg…tŸXEŠK„·Q4ųīO^kŽ£¶†„TW åŠ ŚŽ™mŖŚÉivŒń0 ąā¹’x:×Į°Ķ§é×7³éå̈³Źd)“ŠĪ+ ;|c4zŠ).…y7nč:ŃęØīśÖ2éÓ8æųēĆž€^jŚ”v6Ŗ~y[ī ÷ƍ¼]ū]|(Óü`4_ksZh›”Ō# ĘĒ<†ćŽjnwĀĶŪ3āēĆx·O¼ųG}=ߓ Ž[µČWĪyRzŽ}ėįµßŻ·rKpĢyϽk®„É“ūG’f2*z ģ­­ą x”°Ę1ZÉ.†2™£ō1« ‡-õéUZŚmAKCćv:t¬§.„%}ÓDšd³„.±°ĻńW¹č³ˆĄ#cĮ8ę²6ŒlzmŸ‡ŒS iTądŠģtż+ģß+Ęgóؔū ėm¬o bš©LŽčjž–Æכ"üłäSQ}LdĪŽ;»TŌ ¹h'dw®“^ŅŪT°[ū9"ó”gaÅĪO”å÷6f4ø ˆs†Ŗ»2øbTū\†W"‘cįPœ÷ĶrZ–›m,…‚b`s’*Ąž-1ļ­JH‹ņš=ŖEŠKH #¶={Ę[ˆĶ7󤎮­ž5æŗķ­ī‘#=š¤ y·Ī?pJŒŅŚĀł)rŲLV°—@4¼…6 ŸzŖšõ…čC˜Ų€0;UÖO~²¤{#ef}„G›ŗ·˜WŌ{ŠUŌ+:øņĆ0ąćƒ\ ¶“åjßiY¦Ūø ‡8Ż «µhŹ»¶;J±s3ÜWcõ Z¼Byīź"fĒ&øŪæĢea;æˆqŠŽFZ{y„›Ķć8u6Śk)RŠņĘ=(¤]Öū6—]£$øóĆq łq'O„J]^h¶@»ĻlēŅØ4Šü·ej Œųžf>B(9©®ü¶€+®ÉGėAq•“1ąŗ¹]« ʃÜVč'P$QéA©^ēJeA,YŲ{ ä5="{̬qķ'µÜó»æĻ4įdęīģ2Ö½+CÓ~ĮŽA”Ę8 ItØiö÷ ąģØąŠšx;T±Öd—G×ķµ=e ad!£oLŠtB+cƶ2X»Fa++6xõÆtŃžÖŠ)”ē§qK”¹C±ŌŲŹ„öČŖŁćžę¶|¬°Ł N{S3-źVØ`łÕ%łyėēO‰~“ÕģŪģ‚{zeJ !$l>kZMõģ÷šøæ-!xó•Āśœ~5¾|蕖OŻČ8$²š4ęGć->Y­š\#±éģkāļŠ~Oi:„ok ÄčÆ aN@©3’?,Æ„¹Šµ żT±/sµ‰9ć<öļX~–²üPņ>µ¼cŠē“f:7—q%ŚFĢĒ‚EtZ‰u 3tPČęČäłMČ$÷Ŗ•0Œūž—¤kšī˜’Ēqq¢Ū²įY³ĄR=½jŌzq²„ń6ģ€ĢØŁ*ƞō®y@éU»’fŒšˆģnü-®LŚæŁĻś,Ņ®_håӊśjč„ȜĖq¢•/–éō¬å{C‹Y.ķx Syl‚Ējřtyąøź?Ā…%Pźt« «Čę“pr§pŪ×Ū™öaYøĪ9Ŗ/3ŚżØ¬a—{gs— o @ȅ†TŒq[„b]C“Öģ|=¬i—VWV“<’!PQšõĘ9ƀ¼m„Ćį}RK+”Ą qš%°ć+č7žČ|K W@¾Ó£»…¼Éį“åóWø^y5™š“Ÿ&_En3é\•Cx>‡E¦Ūk޾ƒP“b·.Ē †˜ž+öcąŸ†ž-|._ųR÷Éń Ķ“°8`0X½A¬Å&{µÉō»øōŪÄ(Źį[ŽWÕvö–7q$©‰HČęŗi³Š«:›k“°· ŒĢƒŽ*ÄZ­£#yŃČЧ°­Ī9nuślŚ+@Y¾Wņ3šĖ‡Y±k瓐2Dz§ń ’—ˆģ­œłö2¢øģ9ē“›ØÉŻ e ~\w¦Ątńƒh'Žŗ8Ķ`X$—÷-•Gä“H¦ļĆW61­ģ7Hå@,¹®vś5¼ˆ†QøȊ I\±¦jw±D`ePAćÅ[Öļs4”?•¹Ļj #dXžģ¤ ƒ’§”­äQ}n¢E „—vfŚUŒL­ćµH’oŚéZ„  ėfŚąŖŻij0hw– LŃLųÜ©¢`qKomeÜäcæjĘŽ¶²JP¤Ö@=]šEČĀ’ā½[GŃŃm•Ł„øĮ÷ Ī{”5ėH`G’<£Žz×µn˜ =Ø36“Ż3ĻŗKü¹éžµÓÜ2éäyØ_œqN.ĄR•’ĢĪNØ®SQ[9XĻi(mŁČō­Ę‘į¾5žÓ‚c c•Ėtņ?Ä­KĘVS«é—QIµ7 `ö¤ŁÕō:XųšóJ†žįēøb–xśW©é÷׌Aófd `©ē5‹fŽö’Ķ£kJ&··E± sšÅń±Ó/Yģ·A.‡„8»øŲāģQ’>µ¬]„qś«3#n*łQšóėó%¶Ę‰eݜ§„[ōi.5 ZŻ£y0C*ŠéÆtōG’[kˆpyldĀ³”®;gqf°ŹŽKćœīéM:ƒ!UšO1¾čöØq¹p‰š.©šēM¼ńt>'[H.59- ё…ŒśöĶ~ožŃ m¾xöGš~«>µiz<é’" µ‘Ģ»{œƒ_BrÓ«ŠMKĄ·Vž ·×“»ŁQE 䕦Y@Éõ®[Į±jŚą°žćP{—'ĢČ抜š łīt~!²× »tųĪ« D<ģUSŌōĶ Ć0ųēøÓR/bO“TaĀwlR·b[Šź4m>Ö']RóNj›ķ2½²AÆQ›Ą>ń–g \0‰īdŻmśöĪÓSwŠIYÖtƒÉķųW¦čæüag¢•KÓy¦H 2Čķ’¹Ål¢D£c«ųińĒĀvZę|ŃÜé÷LÜø%mœŸ˜äśół×«?‹¬ķv¤WóĆ žõÜi\ä|uŖŲA”keģ–Iw-§Ÿn ķaӁī}+ąė]WĘztšĪ’ńl‰A1ŗdØļŽ’IqŽš?Ā’]kž {ļOu‘a»äN9}«Õ¼C«ųĆ^%ÓoļļādiH‚s±Üś~4ŽžT}g¦xĒĄśæ‡nlµO§\ˆŠ4N °#’G¶E|æš’WŠ>ü@ÖōMnI†™ce:q$LIĮĪzƒPÖ¤rœ×ĒAāĶ]nü8±É§Ø >LĒükēł$Y–ö+rBūąVfR¹„Ū_HŠ^Ü©…±¤r½w ©ż’ĀK›r,ČKĘäķ žēšõäų?¦x{@µńF™sļo({ĉrĄć°ō>“67#ķ‡ü+ų»ą [HŅÆ¬“oŚ[›³© 3H9#¹ÆĪ `×>ü@Õü9㔺M,J)rłē#ŸqSÖ̬aųļM¼mBÖāĢI=œĪĀńZļ<1ć­Wį՝—ˆdÓæ“9‡ŹŲ>uļŸĄÓ.RV>ƒŅ|qšóāęƒw«EöF“Œ"6Ģø'YÓ<כźž#š_…5ć Aā;_“4ƒČ+’%nų>ŌģdсāŁnu;‹».ÄśNŠĘD'y>Ē·Zū ölÓ>YŁ·‡u;k]R+øÕ…ÅŹķx$ĒĢ3ŸZ„-,f¢Ļ›¾-ŽxĆįēÄךļ‚%ŠėD½–HÕg;øcĄLvÅz:ü2ń䎈› md™ FTŖžæŹ“•ĖK¹—āåńWĆč÷z¤rO4Łr[Ÿå^[}ć˜/ģ-õhnłĪUśż·Z”Ę™óŽ„uĪÆ{t‹),¦@Ŗ ōƽ’c« OūOLÕ ŗ™å…„ē™Äg–ŌŹ~DĆĮ?|ń;S³·Ō4żrŲ;\dÜNõęæL“æ_xkĄŽÖWĆͧ»ߙ6[ŽŸ• ā™ąō?āƒ5H&Fõ-!fOæ)õæ \io{w¤ž8dmŃØĒ™Ōz{R¬zGĀ2Ėe”^ĆGĢ8 ø ĻJōļŻÜų^] ÜlćĘÕcŒ(ī1ķŠb”ŗõąÅŃ>!h+wį½~·8%Ēīˆ“Ļ­m>•®ŲxGÄ:GŠžoY,E`Ÿ,ĮǨ憉Œ{Ÿų/ū;OŌZ÷JšźÖOõ*NW*’ē]OÅ oxfźŪP»øžįG™«!Uē ėŚ•Ķ•3å;?…éāż&'eŌ$ó½A8ē®z×U”é²x6KkF5Hā}›\ńĒØ S§ÜźõĶ/Ć>,ø‚Hć°·½g8ćV`;-{ꅱ"ĖĆv‚īH-ęgIQaŠ‚s“õŅF{¼¦ižÓµ-.e慔²ćådsõė\æĘψžńę“e}u¦ćÅ6ˆcivUqĄZVč|‹ā- u²Ķi¹5ÉM„9[m2/Ž^øĶĢKMc@–‘Ē$øĀ¦xcé^ÕįM2ĒÅ~{;ū5“Ō%2øĖF9䔄±›ņ=ŚĒĮv/Ć钩Āב•ņŌ€<žUĄYéQßéŹ/!a(ÜFįŠśŏŚZ‹įķq"·ÓRāTæ°õĶ}Gįė½óKÕ’µŒ¶Woh% ’²`ącZĮ”„v|yāź:®§Ø.„gŖKŅ„IbBv <ŽkōßöbÖ|=௠Ēį]HÉ,S[ł H3øc”=¾µ„“¢TųÕą‹Mv N{=&?ģūrØ&q'©ÆŒ`šę—į‡xÅĀN$rrąpǰ„aÅw=ĒąWÄÓŗŽÕxŚX7ŪO³«zǵ}«®^„±H¬äŠė ™66@ ~ĪēŒų»ĄĆā…µ ‚ęXXFXgęĮąžÕć~ų§Įŗ4Ö^"ŅäNĆål‚£€@ķœR'Łžæ¬kö³•Æl„¹8ČÆ¾ż£ō»æéŚG‡le›L˜lVu* 0¹źIĶTcr}‘ļMaŒ“!okeo1‡*xƌæh?‚ŗö›o{āM&T¾·‚×t¶ŚŪó÷ƒTŲecówX“ī„Ym¬‹×$śóXÖŗœ¶Ī“@ĻÄ •‘\”R9ź>‚¶¦Ėö}Ö/ƒ^4‹Ēž ÓuQwś¢D¢į遀s޽¦ <ĀĪįŠQ=ˆå±ĢüNš†›ćŸ]č7J>Ż'³c€2HØ?į_–*–šŽ”„Ü[›[‹yJÉlœzž5‰ÕHŚšÖ¶žń¦‡ā}>IaxdČrNźĄuö'Ēh><Ń4ļųnŽYŽŅ7iclķ‘FAtlŽ“ĪŲ³ś¤’‚=žŌÆūY~˚ƒ¼OzⷁĀéw~s‚÷q…łO©łT~+ļ_Ŗž¾’ŹžKXēXnŹnģՌք¶}©įqüKį ąTŌ¢P“(<;jšŒŗF¹£ŚOāæ §Ÿ­5‹)2bæ“lƒ‘¼§<‚k•‘$ŸOķš&_|}ąH4Ū‹oj×:ʈū?vRY ”Š.qŽŲÆĻ{čR\ZĪ®bąąw­hģŽZ“Īi•–E8œ­_1}ąž˜®³’P°©)›tcdHNj¬  ĢĆ ¾”ō$”l$‘U 'p>¾•°Åū—eÉf:˜÷…É^õ¬n&Ū.P²ēƽYøjPMcuž)p>\w¤vSgö}’ļžŻ7æ¾ė沟ÄĶZŅļā'‚6K¢Ÿ÷چšäķO]œ!#Õ+ś|¼š;”‡TµĮµqĶeZ=ĪP·ä–'AäJ229Ƅ?i?…śĶސŽ)šå ¹ń6„āčBœ=Õ©?8¾žUēIjĒt-3ā_§·³ŗ-e©B%„Iƒä]*óōĪHüFzWņ‰ūi|»šo‹®m ŽēŚ ŌlµØĀyqÅücžkŽcŅō=[C¹‚öB&@ i³vćõķ_;Wݕ޸ āļ]ė)wef^D)“dtśW·ü$ÕµK½ †³§k.ć»|cīøż:ׄ—×ū$ÕZFi³)…žfŁü9+B‘œ&C±«ŻƒŠņ«-Kń[Io2äer:Ö„’IØłĶ ±5мĢ$uzœMöV¶W  žuēQč—0nY&i9ĪqLÉīYŗ…m­¢xßżź„ÜH¶ļ·2q(4ˆÅŒĶmqŲ ¦‚päĖ·ƒš .H¢dBĆ,½„dĻpųTs—ż(ÜÓ,kŒö\ q—,¬üń×€"Ż"ȞS30<Ż‹W½µYB£ģQ× eūN–Ø·J6±łŠWY6Ÿm{„[źŠ:K®W=źš…žķ!ćd 銳 +e|„ HŒ «ƒö”E©m§]N¼sĒ!l ó@Ó±č2kņé“–ŠÆ‚ō"øU½’ńnć’ŒąTĒĢa“²ÜŻ„¼glø=OZčm¢–(ŒSÆĻŒž)dk«ĖfįįĘLšk­Ó|T—ń› Ia۟•ūńڃHĒMKśw…ō•ŌÖī)Ź;°<Ž+«ń£p-¹\ņ’¼~”p–Ö03Ÿ0åIž#T ŽG“dg I ށ§c›Ģ±¾}č-tˆ$BŪ?­žŠÉ¶æ–;£—#ę ÖŗÖ·†ņŸĶ U ŪŽ¦ƒ6Ģč”D… (õéIīP€AšXÓW|„¬l¤žx­č®­¦L.Q¹łGJAöŁh9ŚąĻzīTä/Ģ6śc­05YaDc)ųāø÷ŒÜJÆP4i$²¬l„Nß»‘ŌU=Žnw˜“MėDRvlн¤MņńøšĮŒ|¶ŠGŗT#y8" (ŽU[•÷¤\ZDÉmŗ€UĪ t-Gd€sŅ‚ ©Ēo#¤Ö€ĆžüTvRż¦} l÷„(Ü„GŲö4…|°7}k¬“Ōtżb8ąŠķŪó/ZĄ o4˜žŃ͊HćV—ā˜“É#ÓIW‰ ĶŲ×<™“WsæŒO}f]@#ć£VhÖ,¬"hf ĶøwéQwzš(³Œń?‹XDĶ ‘¤c–ś}kŻgļŲēāēķ>¬^Yųäh½¼|<ÉžĀöĻõ®˜Ęğŗ’dlć¶š†­/uņŖ.5y€i$#Ó=ŗžuōĶ͵‹ķūY3]ć’­Te)ŁxkR¾Ęęk{`xsŠō 7OƒL!HÕÜuj5ā8՘·NŻź«jöIŹ÷ ŖzsZs™ņ;œī”®M81iē`žłļ\ÅęÆmiHņ,—¹ē'”Ø6§Lńˆ?tæ Ś.§ā}E¬“̟Ÿ=zü£ż¦’ą žŠlÆm¼7ŖEe‰—Ķ•Ąi§„T#wc¶1±üėüvż²üKń*÷VÓ<5Ɵ§¹)sy>ķņ×]¹ćŸJ•ĪžŚŚM­œ–²ÜÜLĄA 1—‘ĻNÆÓļŁž …ńsö‡ˆ|Q¤źžšš§iˆ‰®cīŁ>՝IŲŽ1gõū,žÄ?gŻŹÓĀ>³¹ń“īŠ4Äūśó_y[éī³Å.¤DĻ€ķĄ®’4čtØņįqÖ¬ŽÕ‰ŃAƒ©,éC½e9t7§ō9cÅZvš‡Īš4cźk埊’“=Ÿ„-®a³»…®pyČŚG±®fīwŅ„cóßĘ·N©&­ųhizŠ ø…¢-r™1gŒ)ėó—PŌ„ŌµI/Æ F¤fX3ņF čJҜYŌ’Ø^Ł]l@bU@öجąˆäć>•Óda6hCdcŸĢ‰½šG¤–×.R=ÅWƒ“S9ž¬ļ4?Ż]0ƒ‡Óģ:'‚įH™V!źr:Ö2f‘ŽūJš”Q6ģćŒ†½ IšüqȂ@<}k J乞‘m”D¶²ø`GV#Čbs˜Ō’äĶĖKéDXF8÷ķW 2Ķ‚8ļ[\‘ś†§kkg ‘Ź Ü5Ąčß“+łĪ“i©““œ•P8Ęis!¤kÉu<€ŗ¹d'ž)±a™„™SŽ=źÉqFĶċtŃ,¾XS÷³Ås°ź·j†Śņѧ“`q"ž‡Ž“‹¹‹Fü·‹„åtāŗ94Ō}>+Æ8<‡ŖžÕĶ5“2>ƹŖŸš‡Āś’]™„LŒl=3SÜfÕõŒŗlq̐±‡”8ĶeK#Ü Ėcßø­#µai,ё¼—LsŸ½Z—6÷ 4Vd?7EPNķ £„ˆ­;æ:ŌčķźVHßō¬½WLM=ĒŚ8߃œń@:mÕ‡ŁŒS$NųłN3šĘø–ÓķO>Ē?ĄiČx«A“×4Ł 7:Ź=ī+Éļ¼(/­« 2Œu¤·…t‹ķ5–s*/'ŸŹ½‹H»FÆsĢĒ­ɝ ĻkpĒ~Š1LÖ{Ū¤lŻŁ‡éA‰4Œŗ—SĮā¹K«IŒłˆesĄ€ -® Ū*+ž,pV–%Œ©ófÜ:üōÅhgµžy!ŽhĢ‹ü%¹©¤Ią(ū CÜPl‰dÖom‚¬! z0ėRy±H9_.sŪ™ E eĮż=j(ĪĀŁ!TŠfV”[©żó‹­rŗ®‡ipdū'ɝŲĒz Ó¹‹o ›i1å³ĮÅwZm¬Q._*G\Ņh¢Ž„‰V{BC ĀÖĪ™©¢Ŗ}ŖĒ4ÄŻ‹śƒŪ](hcŒzW­ŁĖslöź‹ęÆ:ŠgĪxę§£i’ŚJZ1ot¤œ‘ĮÆ×4GtiķŪbŽ¢¢f±}O-Õ!¹1¼¹m§æõÆń Ćč:š\H‘½ŗČwdƵfŽ”†?j_†ŗVÆ ¼/£'ö°ŒEr"ļg§Ó&¾’(˜Ē#”8ļ]P’1©ŗQ…oŌI"ä6G ķF½„ĻnŽl0ī…†Fßį­NF†hNm»RŲ'wJļ­µOµ¼…UČčO…c(ˆļ| ā;_k6—V×ogv„ ”±¹3Ļśį-sHńĻ…!Ō­Y.(I{•o\~—+µ‹Pf„–vń[Oäߥ%Ž2Ź$źēÓė\‡õėė›ĶCMÕt&“ ;„o•}Ŗ9z¢ŃµÆįĖĖ{øK‰ĪTżŚšóRŠ.ōK–É#ޟ+ŲĘķ]CN’ā ˜÷©Ē•œ7Ō~UĆϤ\Ž[ÜUeē$āµ#™œ½‰ø¶–9˜ēVČ$tĮ®+ādž„ųƒd· §XÉ«BżÜ!L£N:ššgÅZsku­“ŚV£ Ģ® šGØ«z„W̐ީ*ł‡öÅYt:į±±¤x«QXZĆRŒÜ:ķA+ŸœW¹žĪŸu€ŸįŌõRóųöB²,R`@ĶĘęœ×(ÜOÕ?ų\ϧų‡F‚E²#øĮŹŗ°ĪsųžõĆÆĻ©éÖŠČĀ\ ŲWD&sTsŲŅļķp4p«+ų⵬tÉÖwuƒø®ŗr8jFĒEie qƒš†ņ·‹`°÷éZęjj¬n’©+ōé\½åĀĒs¹Whj’[-aóqY뤮4—±”*GĢ=čļöõµĢ/bD”€¼®+]&łgv`ė9Ę)ŒŅŽÖٶŖ&čqÖŗ"+edČŗŅ“%ģ×G:o_R1UķÆ RÉ/·œdō µ{ 4ó3†gÜæZ¹RKbFŹŚ,”g]h³˜¤’W“Ļj‚+؄j’Œ2ŽŻéOcX˹ŌčQ]FӞs޳fTu2(÷•‘C ĢDĄńžÕÕč~-ŗ³±ŽŚG°p²gļP)ėž –īBD\¶ASŽ(°M­Ė k…Hߎ¶®–ŌŁż”EŒ:2/9śŌ8Ź +ČfŸ1-Ī@ćƒ[:~˜/%_1DŖxĘzÕE[@Äz֏d‘8%AĄ’śė“XīŲó]`&i±Ūi6bt æpąƒ_2hŽ9¾Óäøx®>Ńn‡ gœ{šč²GŠ~ńdzݬ3 ¼Üšµ{=µÕ¤V~UܘO#ŽœV q·ņĪ’‚“…®›F¶¾–ČŹ żBžµƒdŹV#µ»Č³D7żß™sĪ±Æ®– ÓÄ«žøķXĻrČ“«įyt|ū1:²_ć½hĢ!Q¾›RAB~į^¹÷ŽŪAģAŃ<ģsÖ¦fČĀ“żfŽHŚ9PƵ-Ü7(–ņ,›Ū2ń­a(ܤA„ģ¦Ä‘Ģ|ąqŒõĖk¶sélĀŻ^S·§æ„ˆnŻ >Ō¦²v‘ōø¤` Ÿ13Į룃[Ņ¼Ń 1D7óŅ“Qče$ö7®o­ļ“˜?aX·bęmä*½Ōg“I¢TY«f²˜L·©#Šb¹[­E<ż±‹ˆ¦BĒŽŌR4HĮŸ[ĪŃ(kuĮč*±Jźc‘Ž":¦„ČPķ"śßK½Ł“ĄøĪq]µńŹ<±Ā× 7’}MQpę²Ž&£;eV?1¢ŖĖ¦Ü’Ļł­ÜgµžĖ±ł5šćā׌-no|1ā…·Š;e¤ņ.UæóÆųĖā_^xæIšģi­‰’W3`Č Ęlf¾†NļCÉå=®ĒĒæ5+MŅģ.ģŸY’—:|‡ mĄu>õå1š]憭€Ń!h¤ŁęF“eAõśuØå{ ŽG£ŽĻ™’UG,›IēÖŗhŚ‹x›ūGO‚(ē\/”#ÓÜ{Tr½#{Ųś“ā/„¼%ĆŁļ¬#Qā;Ėa ģ+nĆøQŠ×Ē_ gńµž¹gįV³Ōu˜­$1Įp‘£=Bjios¢=³|9§ė­Ģv2<ņJ¤–Õ@Æ#żÆōĻģ’*.˜źb"Ŗ#ƒ qøpHļYJöI RGÅ?üoØéžOėvӣćtj\dńŒńÓé^Ém§Œl`µÕ,c¹ŽÕĮó u@÷­šŌÅĖSÖ¢Ń|#£Ågs`–C:«TśŒWq ųę+kķ>ÖĪ;ք³Ż(Éby =; —¹ē…źz§™­Į„k޾›ČłżÜ€gŽGOēZŗĻ‡4éģ”}x·DūD:OŽ„ś„Øhó"„ŽŖ:ēłR)T¹é_¾-ų&ßįˆ“='@‹Z¹‘B†R$`Ć8nœc5łŚĢV¢ņ;ylxP¦ŅN{VŌѬQŲxr=GųD¶¤¹^ņõż+čO hĒLšŽ‘sq5ŅH<æ3$A­£+ kA‚Öß¶k™ ń"ē.Ł$zšź ūŒ“moĆZ°¶½ˆ”zs‘OœĖ’ēŪŚkWž/•¼Ln„ (żäŠIUčY3ŌxÆ}ų{š³BŌõo¦¾ø6Ņ-ƒ‘F{• ®^Ē­jZĀŲ““įū=ĆEæŒķóŌdõaļ_*|@‚Āy®|?w%ĖC!UA9ž÷®8©zŸså©eÖ< ¬6…ż„q<8T˳*c'°ā»‹ėŌ’i'giü°7»d¶)'rÖ¦@ń¶”§ŲH¶ §  ‘óaZ>“—^¾·žŅI+å“hc؁NșXö’h1iöŠĒ„ßĮ+ŖįŌ”pśÕä‹pš} ³I]YR Č4¬·3lM/GK¶3GŪ6Xp¾õ›¬\[h·3iŒĮY°©“õÉǹŖ+Śt=wĆŚ~®ŗm½äÓ}”ą*@Ē|×ks¬K”i3Åw²1y'$’śé6.{čqŚ śn­iw‰e~d č²Xć©Qüé±Óī-ÖYmŽÕ—¦å®[Ä:œzAƒģĘi9o¾:c¦*QĒxkÄWS^Im”ZOo<°ķ“ääē9ķVü!š·[ńo“ˆ¼C ZŲ­Ų>x9 ļ·­;Œś‹Ę³ēŠ|1qØų–ĒU’’Ā­ā ‰Ę_±ö­_…štwŗv“<Gµ& äߕ+ō%ŠśÅ’ üćĖżÄ`šĒ[°@RßĪ$¹P cłVŽńrŚk›oJe{äM©*©#·Ö„vdŹ7ŠŝÓĒ~Ó<;ŖŪK.÷¶˜.Š 󎵚ÅĻĀū„{!t»Ė)ʆ ņ2śŠÉĖ[ G¹ę^"ųai”^½æŚSrĘ7ĪP~5õ’ģAf²ų·ZŠiŚßE¤E„b>^AĄśāˆTč>‡Ōæn4Ok·:ōsŪ\O)Ø9ŪčįX¾ż¦“čńéšōWVV(»¤# 䝡Łj…¾§9ćļˆ›ĀŚćxoP‡XæX÷D£ĆƒļŅæ=ü1sāOkĘš\Ū;LĄ£ l<ŸėL£“ųnž%ŅÆnīžĆ)ŗ·r‘Ü|±ńgĆ^2ų‘m·e}jš­Ø?,Ē źG P&ĻWż>x–ĒÄ~$ŽkK™B’X¤mŃÆŸĢ×éļŽ„ŃÅ8ĒøäÖÅ ~Ģ^,Õō'Ēq]ż’KvI#‹vY¢K¹Ēz±ćķSÄŗ1ÓōؑäP®Æpėų“TbŅ9ĻxĻĒzF¬h׬·ĪĮmžU,ģĪXö®ĒĒV©©xCNÕģ,’jÜh’L’y$©ķŠ åŌ÷†Zm捞źzv”¢?Å•$d£ Éņ?xēƏézԧH¬eތ“æ2䥑ӎ‚Ņ2ümš/ĆŚ‰!¾šöµ<ń^H1õōö­ 3Ć÷Ś{Ūź-3GĆ}i q= jŁķމ<·L)@FI>Ճ-ķµæö…¼¦āŻš¬?Ч’ūJ61“­^ąjo¦RÅ{…Q– }=ė©’…‡ źbYōŲ¤°NCA)Éśž5Q‚'„ü3ų±šž= S¶›%¾©<Č&`éwŽ…N8äwŸ“‰mā‡Śņi:{͈Ą Ų·„mõ*Ēן„Ōō™4ū«Ė{Ūkؗ„aóqņ“ļĶxōæ !ńøŗ5õį²²™‡“)'÷sĪ~ø«±1•‡ųsĄoąŌ”ń5ā^źŠM²)ŌŽĘIĮžUķś‰n “ ļ"ĒźO›‰Ń…<’„7ĘPéRé-ū蛐€ž£ü=«õÉķ„hĶ­ĄšŻ¾uqÜÕ¢dģoĖxK°IåU¹{WĄ“ρ­“ŁųŚÖŽE¶Ö”hŁŲį™sĄ³Šē.±óCÜł3łLŽźÜd•öGģłćk-[Eøųo®G¼AäŠR>iSiĄQź)ŸcÜ`’ŚO[ż‰?mÆkśžµ>‹šć\¾ūÆ ƒå:ČĮQöŽŒ¤Ž}«ū¹Õ²ī–ĻZŅęŠk;øRźŚaŽC ąč„gQu7NēcšĻĒoi¬&|$‰RGŻjś^wÓµ%kB5žĀe) õR1żk’QŌ®^Ēó?’vż‹ux7^½Ń£øoų\¶­¤K’ĒĶ”;¤Lcęģqī}+ų’×­ćŌüĶRŻZ92cpUׂ U 4fu"p}š‘I“‚‘+A$€ēdxƮÊQčFĘ åbvõ+¦åčGįA)RD!Y®ß~µ q€eqĒ9Ŗņ$"dĢøŁŠzŅ„Ė"ō÷¢JÅÓ} p6픇?Ī®A(‚ā2ƞ8éRvRg¹žĻ_õ’Ł[ö‡ų[ūIųF .µ-Poķć˜Ēöė;eŒćż–n¹Æōēųń—Ā_žų/āg‚®ķ®¼-Æéšß[ɝ ąO#±Ķ)««±I£ÓäÓ$SBåZhže>¢¼ēÅzDZ•‡öŖĘ†öhꅇCųWV$Ź6?+ļ<mšßĘś…µ+kįą­j)o4Iݾ[I·’ȧøUbĄēŽõčÓg4ācgt˜`U‡J¹öUWq’ƒ'>µ©ŹŹŅĻĶ ·˜ Wó€e'$tõ Ķå, ©?—¦€FåŁÓi8ēŅ€&ˆ– 8J·!€›ĒLśPtÓčH¶IØ#FŅÜ@źs©ę6õż„Į?kŲž=žĪ÷æ³·ŽõXõ‰¾›v”ņ6n&“åNSŽSŅ”–‡ddL^»¾Ķ^Ņķ'±”lž2FQū‚?:ėn“k+›V· Žw”ĻŻ>¢øjÄ¢żŖˆ’3&<Õ]¬kł’‚Ó~Ąv;šī±ā Ū¬~&¶Iµß >V#&ę˧qó“Ę;šę*(ž8dķĖuĘRī ½Ā0’U*šGó®Sū=ķnžLl œrh{–£©ōĆĻEfbYw/ń }‘įĶnĘīĘ+Ūh[.„X1ńÆ Nś/5žŸ¦Ä÷—!MŗŸ˜×5ąvķ<;ń_MxRäi7ķökŽ»Hź N]Ž&Ā¢>ė¶¼XÕRH™C#tܤVͬóJčw^™õÆ„†Ē™^'_˜ˆ«*‘ļė]χ-Sd„¼P¾7r=ėxÉXä”ni\Ś")³fW;‰'֫Ƨ£1m1«LČćüCa JKū¬`Œt5ĀŪŻ%“¢³!üĄ „&Ž»HšŠ:NĄœēŒŌš„;>ÓOQėAŖ0£MøXsŸjŠ:-¼ČX·ĶĒł4ӧǁ#"ø=»Uį‰XōN:P;ūZŁć•IĄ<œW£i÷֗–žA(ѕb¹Į÷ FzŲZĒ;“ˆÆLcŠŻuH-"²€ć ņØ==Øž¹ÓŸ2Æ^¾µ—w@³,c{cP‘pŲ”/ć§zŲ³”§īŁ›ƒžOJs¶Ó-į¾ Ņ…Īzb»éü9oœ°Ę‰Ą$0ī=隨Ł;ič’$Æü­Ąb“īd¶6ą(łśtäżi7ŠóNÖQ;ŗėŅ ³g YĆ£ƒĒz‘­»„YXn^2ʝ­kˆcŻē!`q·4-®¢²ZA»“ž•J×QUyQĻ9ž#@/.†ó"€Š×ØÖč›yč(¶mDOr#óf$mŒŁÓį1$ŃÜ@Ė"ńķ@ę„Ń]1ŗČµX³¶yQäV ņ3@&™qjń<,„=zs]}œ°Ü€ŒRIæµ*Ė ŁĒ8»ŚŪ±ų ‡U‘`D’)ŠJā.ę{—(X±=3E²2łjHGõ Fżµ¬3 3cÜ÷¬»ėE¶bЇwCļA¤eŠe¼¾XŲ͜zv«{¦•KØ ©Ķc$h26ŗgłĮ’„w5̹'ƒœŌŅXOęĘ ®xǽtvńO)Xp% üÄŽŌ Ō¼6' į~~¹²³^̤Š9Ē=ŖĘ&”öͶė•čŗ”vö7–LnĶa6TV¤÷OurņĘūžøėŅø»Æ/7,Xģ9²HčŠŌbų®ēNS“ŖBŖq“zŚųušėā7Ēķ`č’ ¼;«Žķ—d·ņ@EŖśĪ‡­uBÕŁ²’æą›ž ų{ ĒÄ}v/ks*I%¢ eµ”sĘF0+ōDš}މkikvÖ:d*«0 UP ļVāŽy3«Š‹ęśZ7‘Ą®ÓKšä”%¼’H¹äōŒĄź0Ŗ3ŻCnŽīŃŽ¤Ł5̐Ś+Ž ōĻNÖ±y·RmBƒż)Ę=NRńĢzJM-ľFœ¤īlpæSھ-ųßū^ųkĮ6’a¼—§?<¬<“śśÓJś0ųūM’Į@µæO­čŚˆ±©²³I0@ŁĘ;ūWäÄ/źž0¾‡Q×õk‹ķAFŃŁqÜҽ<-”)Xó‘wlEaڬŚ-¬[¼ĢŻxÆNÖV8*TøĄˆYŠ ā”ŪšĢQIĪ}+rĶō4#µo9p¶ć“Ķ[OIe īÉčy¤du¶šOŁ"{©Ļ–Š3‚:ż+ėŁ»ö;ųķūMų’ÓMųsį=BĻF'2߯[‘L`²“Ö¢R±¼#mĻé’ö2’‚Hüż~Éā߬~#„B¢tŻ :Œ7Jż°Šģą¶ŽĪ×O³Ņ­v¬čz`W Z§MŽŠĪ`ˆ,H¼U²ŠHČŹƒžEqó]™Ź] ĒZuja)t¼sHŽEL…•no­ķ#i'•cĄčMxo‹|{ļ’Ęā8¦—„bĪśQ±ł]ń§ö¤Õ“-rūLvkŽULr):ųGĒ’5’—žęīīŽÕŪżP~§Ų茬y¼Zf-Ք&3»ņ C+6ć/Š×B…)‹lĄ†5³`p„2ĄŽŻ(2s;m3Dø¾x‰„DõÆ^šē…ā“)!‰ōŚGŽØ™šv=kHŃæ{ „¹HĻ§Æ„zmÆ†Ķ“+3FŹ­c-‡ĢĪžĻMŠI „ŗō«°ixź-Ėy¹ĘŚĄ“zEū&Öč²9ɬ&³I%.O>£Ņ‚e+‚"DĮFz õ©"¹š4&&*ʂµ9ŪŁ_{¬ŹĢĶž½®RŪĀ: jk©ŁXÅm{Īā:dõ#ėAjhėķ<ė;Ćͼ¦#ĪģqZҽ‹(Ąļ@łŽsRÓÓŹkˆNóŌćµyÕ¾«Ó\C*¼r)={āƒ&ĖvŚŗĘ’I:8Ēqé]^›pu²,ŹŃ?  “²¹ŃĶ‘Š7T—pĪąjIÖD·@ɇQkh« ,ŲkV—–-hš—*y8äWwi—%ć‘“ŅØ x4Č¢ Å#.H®’ŽĀg1® Sßeķ[Ćj$ĮĆ© ŠąZYm(Ę:P$īiYjŪĢ.!`Œ:ƒŽ¼Ó⯉ćxÕcøV8aßėT`‘ó]ēüqgj·ZEŅĻ4.)nõĘ }įk—ń>ƒe¬M8‹P QĻ̽7 š=ßL–[o˜«žĢ;×7©hŒŹFRR9#¹Ø1”¬RÓōb›c”¾;¶yĶtńĒŗ,cēÅsō"X½Éō¤Cuo2" š±ē'īŠI­smwo"Dx;AØģåŒ^ŻKŠA}43ę8Ē”GPGZć.mó) ¹B* Lćo|³V]†āāÖģ 1B@zėōĶj[ˆZÖąØ*ų#śÓ5ę5„KVX?>¤Tń^ZĮoä̱L¼ą‘ȤbɖKŒüŗ`ŽÕ4gFŲéy÷q€ŁÅ9+ĖqŗHķXMp{T–šeҕܿU&ƒHK ·K“ƒĢĀCO–ī ŖR=»ŠhY·¹£e-š“ x Ē„SeIēh,æJ‹„ŪĶqāĶ24óÆĒ•×n1ŠšĖĖ»4É5£ósÅ7ŽĒā]2ŚžŽc¦Ē›Ą PN7¾Zńwq<ö×p}Ånx'^Ó“ē»¶Ö4«mQe )a‡ˆīŅ‹jgj֓’hŪxmĮįX|Ź3ė_D|ųŲŽ ń(ŅuAö<鵤vįŽ3Ę°K”Æ*?Eoķ­µ [+ū+ˆ.­¦Ė,±6UĒ×ń¦ĒnśxF“½iĖcS3:ŹjĀ‚_'H6ƒœA~FX"Ą`†r½1T“Ć©%Ģ‘XĢēw8ĻŽ§`+ŽŚ^“ē]ZIrv`Vrہ  ¾$ōĻQD£c¢>mų—mfšõ¼×ųUĒ-³ ŽĒ5ćŽ)Ņģ–ļf—©\Kl܉6œŸZć«ēD&yģ¬4˲&øIŪ©!³œõŪ‹ĶÄz3ŲŻŪƒ!˜Œcҹœ ęgß_³ķā[Ļ/ĀߣhśŗŪ ‚ĘeĢU'åü«ōĀ+ŖųfśĘ[ĖW13ū[¦*£R×ZŠō}jŃ™ŃIƒ½dź'ŲVŽ›ā8"¾{K¹ IŲ‘Ō×d§įc°óķUƒĮ3nzb³ÆŻ^s[{3j;),¼— Mß&¹ gA,ŽŠ””cĀŚ²Ærfæó 6†#*?­tśŒö¢økØX‡8«åź å%•ÖRė×ō­7Õ„ø‰G\~5"%ÓŁ^C,É “¶Gó­+Ū(<‘(ĒR4ŒLČÆ ĘąńžEfŻ«DīŃ«2{š ·B„µÅĶĘčŚé»å#Ø«§,Åf‰¦fˆńׄkbŃ,Ó\Y«[¼…żßqčkh[$¤Õ4G€ČĻ„ĻZ[rFv¾š}kŌĢ’ķ‚ż ¹ 8ĻaZrßĀ€#qėŠĶrż¦„=¤FH#Žę>»CÖ¢“Ö"fmĮmŪ®;S&Qeųµ2ä£"J§łWUomo=¢ó·½" NpŠ<ˆKF$•ĪŹĘ|«:ž:ӊœÕm¢¾‚HC'‚1ŠĒ·šķ†‘h.^d]ĻČc[r›ÄއJŠīt¹˜Ēm0#ęV\šłėÅ:F©$ցm›•QŠYKs¤óżEnƒ±LFéĄ#½kŁźs,0­ŚķĄ c5&SÜŪÉ”Ū½Ō¦(Ōä±=+ŗ»øŅ®4.+˜īĮ §• ƒOŁkĄāłķēå¬ķoĀ ¤K ³³ §ƒI¢ō ƒEže%¹dļŅ­¶“é'¬¤ĮĤ.|™FWŽEiÜųš4xåźM'•WŠ“«żFĶ  ’¬‘“‚~ķ|ÉŖų/P²–e‚Ę[ˆpY¶® Vč“QųsŽŹ6™<½øŲ}ėßEäßg‘RŽ (\0éōŖrbbZ*N­ŠT䎒…i®·iįŃ#®%·?&ĒŒśT˜åƲš„žj©‹=½j“ØņRǧj‰DEsżœ]c%c“č wZ—78ķQĄƒ–<­@fj7:č•eŠhµGŽē®k«·ńFėU“a‘ Į9Ę+¢˜īFž!³µ $ˆĀžAŖ-c/›<ņrz²œĪRż ÉϽ^±Ō)B›[Ž©äīA$ņ̤\BĪ„r{V ö·qēGy&åĪ‘Ī*’&Ē7iɸͲł[[*Gzč,õ Ķ.ņ39WRÜūVs} Œz|E­ż«Q„Ćd¾NĻ™Įē4–×hĻåŗ¦ÖĒ͟»Y–”ÜŽć‡ \zõŖ’¶Ÿzļ “ø=8ŖŽį%Ōčc‹Jŗµ[h­ÜtyĪļ ®;Pš„«‰ÖśŁM°é1ŸzŲ–Ķ K¶²HR'O(žuQ[z‡ś<ÓCia#8ę±oS7#”Ōuv‚'q\ć=kI˜ÜĖ#^ې1Į=óRʙ—®éŗl’"[‚.œēUō:[R§ĻY ĻÖņßcGQ¶“Ė™Ōó¹†1ō¬Ö“eˆ»€É‘QG35Hʶ·Ł©Ćē*21Ē ‚+ƟNŗ‚x&ÓąIÕČw ŚeĘ¢Gó©ć_kzŽ™oā}EŌ,˜ “xÜGmÜšOkē­vk­mٵüĢ|˜ŸJś­±Įdx{YIlµÄµĆƒ÷Åõ R=ėļ/kŽń®›q§ųĘņeŌVŻb·g= …( ¶O kæd“»T°iLQKågĖĒ'ß5õ?€ķ“ĖķµMFšÅĪŁ c‡ēšŸ™ČųŖ÷ū"Mv-S’m.ą”evĪōÉ9ō9År~5hŽ ¼–-{IšĘ&ޱIIĘbEMśEœæhį/‰߇M垣m#C•FRrrF7q^­įė“1ѬSĖü5ć9¼u>£į½bĘŻ&XˆI’\zō?–+Õžčž.šŚmnķaūąķó#ķ'9Óź'ėé£į­3R·³“ūZ§—++†ŻĒLW įŻV-M¹¶ŅÖ2Ģēõ0’gŸźś¦©źF[Ė»‹-`ŃB­ņJ]Ćńć~,Ó!Ōµc¬YÜga²ćåyĘ*uŸSÉ|K£. ń@ļ*N®aĖ ķŪįŎ­į[ ś“Yźq«bB>ojq‰s±[Oų/ØXĮ"É3ß&åÜŁeöśVΧ ėZ]¬ ¦Āš8t ŒøśÕän]ÅyyaķŪIŗbB¹Ėcšåāš]ģÖßhŪ$ńØĪBüĒņ¬å!Y²{Ė(ž &6…§\Ŗœä±ōż+7WŅnįÕī8#kč› ØŻļÅ }ŹI£Ż4{ūķgĆŚuōś~Ÿsj‚e ½:ćsÉ’"¾{Õ¼A{iqwi#ÜČ »ŗ=*[bļsÉ/A·~qIćaóE&OŽ=ŗō،ueÓģqÓŚų—[Šü#ćM Ińc#Ćo6ߎ9’õ×ÅŽųåćO…äѾ"čń] kćĆB›¼°ļnī¤UĀ'LŽ›Æ‰?ž*xBŌ<;¬xry_aņŠ¢Mj6ņ šN |“Æx‡ĆŚeŌöÖwŗ3ŽK+E ’¤H¾ƒ5ęāéϚŃŲ› üUÉ×5sXµ[ą,r0 Eū¦½į§Ē}Ą:"NŗLzĶÄČĄOl2OŹxĄČėŽŒ4Xńēķāk įŁNZŽā<®ķÄm*zc)Ž ŗ×üG{m ķ‚y’¶ć­é^ŒUÆcčæ ü5ń[Źņé6Ö³ŚFwĖiómĻŽą’JŪÖü;”iVMŖiņ}Žō» ˆ‚ćsc’?•UŽyŌ9/x³E_·ŽK#Ų(Ź‡Ē _c\ī¹āØgŌ,åŃnÕķüĮēØQŽĪjŌ “gўųÅeš;KXŪ/“”™'…+^i‰ī˜¹ŹIĮu'„iųsĆŠź>gī>Ԭۊ‘;Õ'a¦ĻØ>4:õœ]‡×|26ą1ÜĄā¾‰ų›öŠŗ>§§ŻE5¼±‰ Æ#ļłVŠ`|Ēgć™|q’ -ō÷7^pE•‰CķõÆ­µ]gĮ>$šVŸ¦h×”u…ķäų՛#ŅŚŽĘśĮ¤ŗŒź-Ÿ,/Vǵz#xžźCO“1ä֝†yļŒę›,v0Ż£%¬»‚™ ē#5ś¹š‡ÄoāXM$žl‘"Å#§łö­äĻk“ž$V‰ĒšsĶr’<2|sį+ß ˆ$ŗ%ā 9VĮć=«) ŒÉkč'³ŌÆtŪĖ{›]JŻŹM©Äg5ŌxOÄx{Zѵx.ćƒQµ™d‰°ćžG>ÕŌϰž7xz‰¾Ó<[¢ŅźDGya<2ž·#?…PæšEæŚ”æi_ŁŹēį|Gw}ńGĮģmWķd4ŅĄäĆ c?JOfŽŖ{Øv—–WšÉę<[_’E}³šöYüI¢“«p²\[ĖŠŹ¹*)hræ¼§xšĪŽēYÓ`Ō~Ķž*:$ §>Äך‘’TżŽ&ż‘j/xoOµø¶ųqć3\šÄĮ?ŃĆ·2Ą²tŹž@ō+ź*#£1œČ;Ļ6o6ŽxŚÖdrŒŒzå l£ø$=vĮž|Žå‹ey‡Ķ”AĒ’^®—EŽ€ŪśÕóŸ8äbDļßéUg˜Ī22{ž•pZ m¤¾g=)ń ³°÷”«B@ī8éYTŁdyĘŠKšūŹ{Šž„?ąÜŪ’}Ä!żˆU¾“O¶Ų¬aĮ Bzp:õĶ|gā+Aų„įū]KX¶‘"–±ß2& m*‡Ø#ńŚk”µ¢?–ßų(/ģł¬ü6ń=޽ż“q±ø0Nā?–ę'# =¹5ł›?’#YD²Ä½3]“›±…MN~ā=ĢzŌūi·FīŁźø֎)ngĻ˼¢«1'ŠŖŖ¤0Ƕ($ŠEWQŽ YŅ$?8ąrzKWČU \䊓™Bõäā‚į.…õ"bØIŚ73‘_H~Č“—ˆ’cļŚ_į‡Ęļ ^^ǧéųe Ūö»'`$ ޘ9¦ŽŹmŸé-š›āƒć­Ć>4šĘ” ~ń]’j6Ó£‘NČk`œd°>œūW½xWRÖn-o4ĶT©ZHT1ćĶ_Qžzę¹j&“:N”Æ<Ć…żŌ€£Ÿīššæ āæĆæx"źŚŅēÄ6Ŗo“)„¬ŹČÆĢ \{óӎT]óĖż½¾ŽžĻ’5-J=M#Į^(øšé$XɎÄlIFpsĻ>µńN±i ‚‹EóÕžė™¬ŽÅ¹jahšÖŸvŃ\xõĻĢųW՟ u$‘lÓÆœHPĢpæ†k’¼}Ójlō/ÅuŒŠ»Jr=zׂk9D0ϐÄgiĒPk›e"¤ō>Éų7ćøüSį‹ 2ćRŗžn!~>l’©Æ¢t)VR¢M®3Ē5īĆc̬ĪĖ 1Ļś¾ĆŅ®ŁźWv޲Dē õØå:95eœ¤Œž^1øgšźķ§‰¢B„µiM$yļŒ"\”P¾[dGņÆ=h¶\ŚIcŒē„hbtžZ,QĖ@­"qz§Ė.å*Hä ĢŪ›Óe;›Ļł‰éŒ Ó`Ō¢;Ń@4™×lŅs·5VK€č ä5Ńw%L2ån=ė{E&+j$\ćŽh&hԂŲČšƒ’Ié\²Ž[ßMA"īĪ܃Å;’ź÷"Ż ļqß×éNÓ¬…ęŪ’Ć+ĻÓė@2ZZŃ€ öėŌ,JŻ*ĄčŠŽqHÖ ©ŠiŃIoåŪqü«Ņ?¶c{B‘ä®9Ķ–ÅxĶ£"~„ćµs·°,>t8x³ė҃#“øš)w?0żj¤T˜)ėŒō¦ ŲŽå…Ŗ?“½Ų‚;ÖzĄd€I"°—śŅ-O¹Ń[GŲā R޽M–]X“–9ļAJW3ę 3ĀŁQœg®iĀ&,A½Ü–°ŖE“6{vØ'Ōīćø—t,æ1>“)X¢<ŪÄĀUsß½t=Ÿ”’6ĶʁFWŠę59®-§ÜT/õ®§ĆšŖŹį ® 8ūŌv×čÖ®T}Ńł×TŽ 3uĪäžšö³£‚®*ņĆ šĘA@ŠyCłR++sŽ•“£z7œ ¶8&“vˆŠŗĪ§hU'§Ø®²ŹŠ€BöĒØ¬F¤ö6£Ņb’ TĒ»¦ę°õ}=Fց±Į„±ó³*8I"bŒā» nĪÜø_.ąōĻńVR•˳źt2_I%˜øµ€Ī„ćåėV.4ń-’ĖĘd#$c„K4Q¹“}i=͜*§Źŗ½Hö‰o2a”t#šĮ³HĘÄw—–¶3—Œœ‘‚yÆ<Ÿ\Ōµ;čōŸé÷Zżō«ū»{E.īsŒqļZA~ˆžĪšMkÅ×zoŽž?-χ“}”āŅ"m걞Ī;q_·>ų_įŸųrĒĀžŃm¼#įȆß*Ā =؊Ž2ĪśßD[ ²Ø»sĄ`?Zmx®QÆćsj>^•Q•ĢdĪśĪ X!Qi¤gžZt—¶Ń±F‘ŁŖ$ä.üY µóZ“ ?š®:×)©ź³Žļóę[ž•ƒf‘¦p÷Śķ…ŠĖå²ńÖLóa_2|gż”|5šėH:Œš¾£#£m“2ćŌv¤vS¦~-ü}żøõ½@ŽXXźz•“±°ū,·p>¼õZü„ų§ń×ĘśŌ÷ź:Ŀټ¢Ć¼ī*zn¹®š4ĶdŅGĒŚ–Æ3¾Ūwhā^1ןzĆ{—’A$›œń^½?uXókÖč,Š»óĻ„KāŖ0r S‘Į)ö-Å4Éī÷«’aßærwĘ=*LĪ—LŅüĢķ;FŅĻW¤|6ųm揊Ž%Ņ<'šĻĀ×ZÖÆ;ąÉ䱍Wź;ÖseĘ'ōUūĮōļ/MųƒūKė—w—3”š=DiŽpAśµż|;ųkąļ‡>¶š’¼9§xWM‰%ń…fP1óZå©PŁ#ŠbµHI#–õ#“VIĘ}«‚R¹ncć]¹Ȥ•¶†äę¤ĢX[*>mʧ­\¬B†ŗHŹ ³rW¾ ’ŚvˆF6v5“—s¦•3Ęž-|Ošwō{»Æk–ŚpŁ•A"ļé׌æ~.~ÓŚ¦æŖ^Śx*õ’²Ä­ø‘ŻĻaßĀ‘ÕcäėķBćQ¼øæ¼š[«‰%˜õ©?å€EžŽ•Ńbe+0ŽGåS°œ Uµ™=ō†I€LńĻZÜYŽļNŽĪ0’Üā¹Łģ„LŃŹ­nžøėNƱ…yā /MŚ5[ŵ‰ŗ tw–÷ؓŁÜ­Õ»}ҽéņ0±u®ž ¼7§£TŒMåĪ@Bp7 B±rŚņŹŽą0ee<ą+³½»¶h{u ÄjC9-N3t¾cŒI×5ĢĀγ:“ßõ z¢ü¢ŗ8cå‘Ķw:zÄČ 0eļžŌ}Ä0®1ĶdĒ“ĢY8€9ßZ܋d[{(n×8‘ć+ė_=k‹f&Į-‹†ĄLasŌćó¦tEžAā:V½œŽ’Įė^wqó$^Zm“$óĪ}ė9³®‘ų‹HHģĄ½»@v¾?ųÓš¹|G¢ßŽéꯄ‰IGĢE(˹Rhü’Ņlą“Ō.tŪÅS{@_īŠž•Š<édK76R)ČĪźč„ŗ“zœtSŻmBŗ.“>¤é2ļƒh;W<’jķõMKĆŗ†¤“ƇćŃ/—!„\dśąÖ„C]µ“TŠŅį öl6ż+ļĆÖz†½7ös_GhųbsóĻ==k9IģŽ¼Gm¢­‡‡.u»˜ądTŪtÄģéśq_\ßI؂Mčń2Ÿ™NA¢³"h˾’9mć1³:r"°īaI-UvG8VĻ#‘A‘F!Š1öą©?Ź­Z[Kn©cpVe#‚~ī+HÄhīįaéŗ–ż©é’Ć|±˜ĆąosłžõäÓYƟ$8CŲfƔŁ>ĒńDŅüUį‹­.’Oł9Žå ”üyƇn¦ÕttŸOøoV ®©#æåŠę©Üó»{[»ūŁ®8Œž„gqōčž°»†įb‘Į üB¹%t7‹Šō ź÷ ń]ˆ,=ä2#īó œČÆŪOüQ°ųƒ YkŪ¼7-n_ŸvęĒ_o„8ù¤„sŲ~ų'Ō>Ī&1ev澑ń/† [Ē{c}ó  ˜ĘC~u¼79*”š6¢ŃFŽŸŽ¤×mJń‰!eÜkS™wryn¦fh\T7:„w0$K6öżj¢µ02dÕ&ÓķĖD»®@8ā§ŃõĶKY‰žå±0$` q[X¤ŠĖø§’Ń8éÖ²ē·žŅD! FßÄ;Vs·CyAXвœśÕėXXTvnsYNÄW;bŻåŖ†=«%U›%Ē‚¹ĘZķŻ‚(RZ‰ą’ŽC,R¹_¼@ģj¢ģCe+©šģ”ĻĻģk:駈l³­kĢIFŹr7ɳŒż*ÜŽ_Ė ķlēėYH éŠLÅ®¾OZ²±[\ĘGœČWEHÓ±b M n“|ųĮ«¶ŃŚL$yļ?v€re«(–ٶ†m¹'$ō®‡ķó,ečNhzŪ]hĀĮ™{œÕ[m@Čī0Šsœ7q@W1;HĢH$œš:S.tXõ‘å÷qV¦\7<ÆYkß<‰ęd'Ļ¼Ņžī]A÷Č ¹9É'T )˜ČagĻ ƒŅ£’CØ`Č£¦źDIjl„ÄZ'ŹR>`j®—MxÅ'Ł£qP0ėA'øéš+o ¬„ĻŒ+#XҲĀ€f r\PżšŻ–I# z+ØÓ“»f™·Īr3ĄĶse-[O‰Vy5cĻt5āšŽ¹=„ą·{yJūt‚[Ōēg»I„U+ŸNՕqhŁŻ•Ó9ł‡"“v5‹9{Ų÷Fā¦LšMf .mhIm<^[ņ².sŽ£Ś4/æš|Ö“Ķ R†;Ž+SHŅ^XÄå"ø\“Ū#.GC4ķüū Ą,‰œtė]~Ÿ*6ēe~=ø©0lč­¼•–Żäb±nœvÆpŃ ±šZQ‡ŹĶS(„]&ń®— ½ÜņDŹüērvƞüKq¬¬%“Ń‘>l8’YžČōśÖ/Ct.‡5ķŻŖKØŚ ;‚良ƒõÖŚŪǼł‚D‹æ5šŸC¬X¼Ó<ŲÖHĘõ“Ҷ‡Ī¾ˆų+įMI?¶l”MéR6’5—%Ų `SO±Ņ«÷>¬¾1źf1$i.FÕ.š£Ą¾@ń’ĄdÓ¼SgćŪ »+É$Ča]ŖĢIĆqĶj¶&O”ÓĻ„ųPš•ÜZψ”ŌµWŒī`Oš­ųqĻ­|“7ĀMRĖVµøÓ`øŌ4—fHn6«pĘ­JĘinzŽƒąiō×I$„ß;īŪŅÆźž!Š<=$©›{k&™T–\džßJ‘Et:ĻiŽ’ -SAm9VéCļµrĄńĘsĪk©š‡ļ€D¼»¬‰ūĄ`ąVm3UēEāMI…µiLźG-‘T~[č‹®ŚHĒ%¬@ƓŠ:łS°Kc޾$ųitĻ xÄŽŃ”½‰„"ņ+`Ir@8üøöƛ>,ųQ›Ć—¾#m-"³P«!XĪXž§žk&ÉR>šļ†žŪÅņk ×- Éø¼G£ŠĄWßßšœųGÄ%³\O †·mEŽĆX=kXŹę«]|Ońs_·ńzi–×–ĆG‘I881Ÿį^±įßK¤@ŗ”éŌ mŒĖż>µf®šßėĒX֓Qˆ5¤Šķ“+ņ“Ҷ<#~o­oaø¹If°  *DŚ}ĶæŽ=ĄrsĪ*ƈü_6›{¢¤:oŪ<² Ī9EČą}M÷>±Ńl„ƒMKĆeŃw+Æ ‘‘ŠÅ2O%Ś\[NfÜ ēųŠ!2Ɗ-šßĆ6Š$V[`œąJ¼)o×µ}šēį„ņųźvvöĒL‘ e'6}øļ\ķõ7‹ŠšĻ‹ ü£ź°x£H[/ų˜ĒŹ]«ĖĮĄģIōƛ|FŚ•¾¤“ĖxKi{B,äµ@×pŝ3’:·łā±u«Į«\ZĶz–š#ć,ÜZĘ%%Üō½ąĻ…µ ūÅvڌM¦B ¬nf|sŸ®hšÖ§į-;W†Õ'ŽŽA󌍬Ä{}qV·±¢gY®Ļ Yj¢ącQ¶ž!‡•ŲHä”®Y9O^+ćošÅkßųvŅŅÓF»ŒÉ…ČŠWĻߣėAt£ŠłÓŚ—‰`ńāųćĆ–f_0ĖĮŒ÷;*õ+/üeā;Ę:ŽKórüŒŲźĒŌÓ¹×£“Ō¼Ŗ.Šüq$7š|E%g˜Ićšš›Kæˆ:ķņ 6mjćZ“¦e‘äPy’/zEJČö/‰?“ĒŸäŠõķśĒQޱH¬Ÿ|(ĮŚzóÅs_ ķ,t} ĪMn&µŲ¤$#åŚ3Ęh…4“G$¼ˆž%XidYx›Įm‘ŚķŹ€OPGµzW|Aeoįµm@‹ ŲÓĪ›åfćųVэŒł¦~üEÕķ„¤šÅ*ē$ «/”õć?oāҵƚ-a„·øc&Ös€ŻŌT5M\ó¹ÕRį-ÆV®8żŲį yž™įÆųXŌ“­RH^É˜ī‘·æ_„&ģ.MĻo¾ŃßÄ?ĀĶŖ}¶UE“{³Ļõ<^=ą‡ņ^ėzŸ„Ł>o³D­åde—=Aōę±³[&ÉžČIx/o`mF&;—”eķzöżh-¶ČŅ&×_‘˜š+a“Ļ3ńƍ.¼ém.fc `tĄéĻį^Rš…õ ĖkŁÖ9ļQˆpļ/¦?>“łBĒ¢ßxĖįĒ…ü4l&“ŗ²Õ‚Ÿ#c®}1\ļƒž/čWŚĪ’¤¬rµŠ <ĪŽUcfĘsŚŗUˆ²|’bHÜ Lö5‚> żØ~É¤ė¶ž,Š ?e¹ØĪ2ēƒųūśŠł^(Ž9Apˆąądg‰ŁģŁĒā ÅķēĆ?[:čÓ'™k)‘Ÿ#ŪžÕė²÷ĘÆ~Į’¶‡¼uas©YųNņł`Õ#ó †ę7qĪ;aMRZŲź§¹żåÜźń憼5ńĆŪŻčšĶ¤wŠIŹ’Ź Įwń®ŪįwŠēš¦·i™&{Y˜E*v žõĢ×CSģ=oD†śŻīa¹ežš5łc’KżŒ“ĻŪ;ö<ń„¬“Öŗų«į}{Ɖŗid‰Xł#ųˆeܛFvzWneā®Öާ5HŸēæć#‘«Ć§µ•Źiw‡ Øv°ĒŌҼrņĶŅmūJ.kŗ”Æ©ĆV#¤ņØ8#± Ęė‹„óņœń[’ŠŽRYwŻĒؖB™ 7fµ¦(/,£ÓŠ•>WmŸ*weš‡1¢Ź£ä'‚(c”fAÜžõ”­Šé†…ˆ#iB‚U@c­z¾!ųĖąÆÄülų~÷PųćĆZ„¾£nŠ>֒49xČčC ‚^•(즦gģEūTxKö®ų šóćw‚ļ-ļ4MjĘ$Ō­²ŗ}ų\I‹Łƒ©ž!Ÿ„üIh'·†G…Č,‡Ž¹j£dķ”åŗ„ßiź\$—ž„d0ī1é_›Ž.Ńįų—«ŲOfƒ†¬Éąķm.ö Q%ó€Ģ/Żz¼k“õ)³Ä<1ā%ųmńŪZ‚'O…„wjĆ÷sDx óÖæH“»ˆ'ū.­a0“MDÖåC!č?„{ŲKø&rUčfšÉʜc5~ŅõZÓa/šķŒt8åĘ&Ģ!~Qó}jÕ¦£öu*»Xć§rj’±!}¾ļ]ĶŌgµcj4Y½Ć2¬«ČļL„µ0­–7K²¶3‚{ÕPķot­ °c“»Ņ‚Ėóß<껁Ī1ž¹ŖĀŽ™Ā:Žā īGéUž#“ĒjŠŒpK‚ģ~ī; ź<1{®£ ŽFŠŁ!ŗ54„z®»āĶ/TYŽ p"ōę‚+8®’壑Ą|€œb¬ĘĪQ°“¼[{øĖīĘvzUK™#³·‹É!YæJ‘¬õXĆęQĪvēŽ©jW,dó|ąš}h.2žł`Y>vĻū•˜Ć« If1;“¤­“m5ÄņO09Ćšģ“§ø¼“Č’†Ū¦vąÓ3rgeœŖģTއÓä1”`ū\zqv$Ąæ×,m£x™Ģ,N™śWjŽ"»šš-ŖŗCŻCI»—õ9ŻCWµÓ\5Ä©<½x~•åŽ;ų³¢xzĶo5=J- ŚNń•»sĶ#®œŹoŚöå±Ńā»Óü-­­¤Į™ZmÜŹ¾Ćµ~+üWż©¼eāMGPGŌ§¶Œšļ;äö=­iÓm±ńߋ~'^^M+I34Ŗ6‰ e‰÷Ƽ×.µcu,“xf5éѧcнr€Ģ›‘NóŸĪ§ņNĢäš;šč<Ŗ’»&…C“ŠŽ†ÆGnį_rmcėA™±¦éļ3†T!³]>›£Ż_^%–c}¬źNūVŅŅ#$®Ž€ MšA±_±wüćgĘó¤x·ćŌß¼ CC²Y#'„9ļŠž¤ægŁą§ģē”G¦|8šv™ozA¾šd$X3“\µj\ŠśĀ $LOœłąžÕ ØNqÉܾnˆvĮėPĖä+»gø5ĢA¬Ū£&Frjy1"؊"QŽ*F‘HZ „.yĒ‹¼k„ų~Īk­[P·Ó-I)Ąo§©ÆĖߎ’·¦™¦¼žųo ¾×™^v]Ɏœö ī„:–ž6ńw<ŖŻj-×/oĢ­½`Y•ö¹km=ĘŲĀ—t­cåLŲ]&'\ąmėŒc«Écåŗ•<՜³¹ŅXé—¤k:“^“įφp]<č탟\RlĒ‘žė ų'L“‰Q-}¼šź š‘ĮÕžé<å(w7ģü%m*—(LĮ®ŅĘĒģH {t¬Ū.Ę܁®­Č…„r:w¬­>Y¢”G(d|õõ¤`ŃÕÅc$ų‘ćÜ9©®žĢŠĖ öĒց6ņĶo?˜Ŗ5«*%ÖwŖ¦ļNŌ_ģĮr™Īp=ź¬ń^Ų³¤…¶žœP¤3€ø“,sŪŹ$ˆ`ūwؘd»ūB(š6Lt⫆ެØOSÓ5ī·q{d¶‘<`ŠÆwŖŲOį×µ¹Ó”‡QL²ÜFpHōoZÖ)XłšxJž}auM ¼bwm2ؚ÷ Śj–‚1{Ń\– Ō³G-.zM¶¶‘Ī-̈²Ķ×5ŅEwŽa½s҃"ŌLQäēœu5„ĆŪå£#ėé@Œ Błīēhę“Ė#ŽÆXžī&|Üćp ‡4M©\[Il„ßcŸzęnW'b„ņ§½&‹Ųΰ‰^U= lxrHa­ÜbX‰äJe|Cc³ĢöˆL]Eqmb³”ó[¾;P)>§K”ʓ8,rT«•.”Žy°œō)ĀÖźf¦<}źµ›˜²²ySƒŸ÷ØŌ[ßt…ŠzsZWŚĖhnjWéĶsB–˜9Ūq÷·j“0…ĢˆOJĒ–ķįacpG5‘=³ź\°1…l£Č ØīužGÓ®-ŚReˆ}ąĒ“]G‰ļģn­¢EdpHåi›/­ųSūU¼õøXTŸ˜HjŅŠ“ģ{uFhŻXä9ć錩Ė@hŽi9mŖzŒƒF÷ÅAŒ–§?c >s'˜Ņg=Ż®®9ē¢Yć^†GrŒ÷r²,m&{rzVxŠRąŸOz yQ¬–nˆ²mf|r+nŅõ#‡ĖcśPdŃža‘¤Iēž”Ė½I ŒĖ"ķõlžµQÜB鶝– Œ(|p sž6Ь®t°Ńī¶‚Ż>體‹ƒč|Ϭ鍕ķˆuÆ5ń “¶°,ļ4Dcx+ ģuB]%­­õ i-]T«zkēļųi4;ėČ-ŚY”pĆēÉĄ=kCók槄4ż7IJkŗU©ŽBɁƒõ8ō®;@KÉįŠņź;U •‘— œp?*Öča;˜7’Žxijė:|ЉeMŒr’ėXę½oāŚę+H æźžZį[Žŗ ŗœśœ¢i·7· <<‘ó€v•ķšōéZ„ŗŠZĶØXŚ].Y$2ŽėœTŹ&±•ĻkPŌ”ŗÓog’ŽęįTeńė_Zx ā5ђŌčķc©[?’üŌ©ē'Ö m±iįżß$vĒjŲÓ4Ģ“ĄŅ"rxėAƒVŠęaq‘šÜkČŅ̓ڤĪQ±…d*Źł 錄DC†g>bō$ŠIeÜÆ.ŪĻN“±Čķ…ĘÜūŠ4eėöl“*±Ępr}My®„o„ŪŚČ¤Į HõÉ č¹ę"IćhQd·głÉ<„Kā Vʳ¶Ipß6Aė@Œ}=tdLn)žq]E”F¬G ržŌĻGšÓėĶmžĶœ{×ŗĒį–ŌO"+9\ōū“ ć.4ƲÜ9I€<ŒńNIŪ Ė™; 8]­Ć6ō Éź8Æ1ń–ƒe>/dI"l•Źž¢41ŌĻNZ9’E#”®ūW”BĢ uĘ=Ŗd“2NÅ;{˜eeó$Uąšģ4”=“S}™aø wŽÕ‘ŃNG–kn—T–(­Źé č§ŅŖe¼ŖJ«,Ūp[ĶMĶłžĆ ±™ŻS ͜č-ĖŪČ “ztķÖ„Ģ„.Åß¶:3(łÓ×Ņŗ-+^Ō“ČŌZ?ČNJ°ėL#'rž„­ÜÜyßvIł@ĒįX{Ą‰1Ē”×4ä®mĪp“PÜģhÕ žH­IuĖ;BķsɜärX•ŹŁV-føCŚ«ßxĘÓQÉ«OnѐĒ{œ`vµÕLĶ”fÕĮŲ'fuõ=ŖīŸv­“B~Gl“[#ŗƒ¦XZŽŖćĢČR;šą|QįĢ]o”(ČU#šrZ•“Šō汃,ÓFe^>cÉ÷®Š|]±hHÜ0¬g¦œČʒ+ˆ]²x«Å[ĖfEWlsÅfKŸ`†ä‚ß8w*Źė—QŽŽC98VšŲNW1ļ·_2Č÷~c z{ÕՎķQ# Ķ8é[ĘD4W{yęܳ™F8<‘śŌ²Ł¤€|īˆ£Æ©¬˜ńmCB×7ūgµhjö½Ķ4‘`| ƒŚž·cmAķ¤zęø{»xīJCpĢŽzœąėA²‘Ąkš+¤d,²5¾~śžõ/†ō³å‘ĮÉ,{ŠŹ:Ū½ hēu Ŗwƒžžāµ,­~Õ¹”Ś¹ĀśŠ>möŸ ‘¼«žŖźź7·Ø«vaĪFß»A•‹6ö6Ӑѳ+އoŽśÕĶAeŽÉć‰ŲąvpÜzVSCRG›Zź×‘“žbI"‚F ł‡5ŌXÉ<¬Ć&zm=Ŗ Nåė¹ÄK“īySÅbX\tYK&#=i™³CWMŠ”FøcūµSFµš=³¬Ä‘•Įn‡é[™×,-ī<‰zg&¹¦’A‹2žJ.Fģc&®2°ĻOü_ć;=?UҧÖĢv6čŅŪÉøé÷1īkŠ|}ā}jÖūIń{öi°0Į‹Š/·½zĒ5HrģO­Ą,#$²)Ż“ŸĆĀź+w}{§nxŠ“·kœnöPÜĖ™õ9żJŚöņöhōčęQ¶4L>÷°8ÆØž7ˆ<'£­®gÓ āA÷9?˜ļZ‰³ŠuæŻ6£eq£Ķ·īīlķzƒė‘ś×xē[ń‰%·†āśIōčĄ  {ŸĀ‹bÆü#övś-Ć^źŠĆ0Œ•aݻӦ+Eń‹xVēLÕō똮@";•,B¢īĮ8čN;ūŃaŸjĀq„A”Ūjvg̹e µŠń‹ßu_hJŅtė£’åĄŽ&ēęĒ\ó’×§bćŸµĶöƒö°dŗ{–ŹĢw°ēµ{/ĆļˆWŚtZM½ŚI=£aelu@õā†kcč¦×ōĖԊ/.+`Ÿ0äå’,¼-­iÖ6¶±Ć;Ę|ƟyĆ1žŁ4(ęķ.ßįȵ·ŌĖYƒA“šŽēńźæž*ėWŚ”gāsG)ŠŻÕ2 Ėgސ¹­”®5™®õxŃä‘Ė0zkˆńTšų Åņ_ŪMv3ȂW–Lm<䞡v £4?Œ?ŲŚ%¦ū——E”y²<@²0Ē=Ē5µØ|Nš†”į^įõk{Ūf„ā @ęĻL÷Ōø”黯xŪĀž8ń«įż.ķUXɾ2päćé_<üešŽ”ąI„NéĻ–cfł3ÜŌŌloŲó[k-D\‡CžÓÖāÕMóEåœČŖr§Ųkėˆ#ŽÕl¼† åę·h©÷āØrÜś'ąŽ‘”[é7Ž»æū<Q2ļž­ĻŻÉ=yƜ5ĻßiZÅŻ¤fźK+§exŪ†Pz{Цõŗ“³;‹}r=BĪā+ŁÕdŽ"S#ŽĆõÆŌÆ­™ē|»™$/ŌüĢ;ÕG±·1čš®§«ŁG<Īā"Ošš2}kī‚I‡q£Į4m“«ŗ“’ūzf”‘)v<Ÿö³Ōu½:]mŲŅåŻä{rPu<’;…yv‘x£LnnĢŹˆ9.§Å" śœ“&£ąßZ-ŅZßé/ūĢČ灶¾¦Ņ¼SšŚóL¶7öš­ó‚ÄŖHčWøØ–Ź3{Ą—>łÓåŗ&ĪbvŖ7{uƲü' ųKĮāßW»Ņ4ém9wi# G'5–ØŹRģ|ĆńRóƒųŃō«O X^h×éQÜ$!vóʃŪWĖ’ml­ge€hķ™÷¢•ĪĮŽ3ZE½ŒļŠó­'Įś½ōIhˆŅŚääHÅnIdtōkÜ«’ķ[©#Ó>|Dµµ¶nķ͐,Dß÷€Ø¼&Ÿ«,(Ö²4ęFó°jnCgį«‹ˆoķķe²¹pĻ×.>µ÷ļĀ’ƒ¾ń†™qqØjégØÉXŅOŗž„äć5”äķs)=O”“-8Y|LŌ“kI¤Ž[+†LŲlgéĄÅ}F<3įtÕ­µ©ķmŸUA°¹\½fåtG{„hž,Šõ(¼A”Ü5ފĢ]įÉ- Õ}«ŌEć]#\ųƒc«éŠŖcKČc,³Ä÷µÜiźšē„-õkWmGRtWņ$%dlćž{Öōę­”.ž¢XŻßŲųröūÅ 4ł"¼–` Œćå<öę¼cÄ~;†Ī(/¬—|p¾ęÉÉŁžG抝Ķ#3īö^ų“”Z.Žń6±)Ūö]ą3ü¼Ÿjõ­böoM§čwó%Gū2FćæaS(•~Œģ”½ń§†u-óK$ÓēR'Ÿ5HćŲŽ£ńÆń„¬|Yā/čž““ŠüK‡l·`;cœļžzVV3{·‡ž\čžņõkHā׳3*’pO=łē5ęWÓųĆÖš{ŪŹŃy˜YAݱr.š.2<:}\Ż\^Ć<·¶ģęrœ÷®ćį†ė[ƒPŌ/D–%É+³ ·=3Mɚ#Š?hσŚ'ˆ-4½Ąķ}=ÅŗĖ‹v#ldÆńÉĮüÅ¾±Ō沤[D–ŻNKIŒ0õ4…Ė”ÖŲųŸ[ÖµŪĻéś|Ö¾&oż\ž‚³|IcćßLÖzΉy„źlćloõ¤?gØūŸkśX“–źŃŁa!œ¶A_§ō¶—.•ć iƒJŽŠ^Źž\‘ !½ū~T ĘĒ“xóC»š„Æiņé×$ 6NWäšį|Eć'_¦‡wŲ&ę@S$g©¢äœ^™ā[Ķ"#§éÉ#Ū’Iˆ·Lśf»/Å^4Ó>ĒØh·ė[·Ģ²}=«HĻø§Ÿo­õ ŻCQk]`;KRēü+č S^Óę’85£Uƒ·Ž“å»9ē+hrō¾Ō%Ó®¬ķa‚ź4Ų\/śĀ ēłW#{y¦Ć3-ć­ÉĮÅ)S2sgœųŽįt› ‰ōKifxŲĆ.ļł×ęÅ( ^$½»ŗŒŲDåb "•ó$<ńžZĘŒśŸ=ė6øø“ ··µ3ĀŗÉš¾»§j¶·3Z¼rmŸÄéŠÜčŽ×?X¼ā‹očVäÅ;Ė“&Ę ōÆM“ß/–COžŌ™²Fo‰ü%¤x»KŌü;®F‘Ū]@ń,¬2c“+Ēł3āóĆ Ō|;Ŗ[Éķ¬¦"OIt|ūÖŠc4[Ét½cNÕ-3@ł6/q_hü@°¶ųš®ŪÄzqݭLŠ9‰»cÓ’ÆLéS?£Ļų!Wķ”ań»ą}’ģĒć-DųA],|Ł>{‹Pß+^øüG„~ÖŻ^6wg&1q’;VU77Œ®}ßš×Ŗ~!Š,ą7;ļ¢M¬ų—¶*ƹ Ń5Hõ8”ó$CĄt<ž}a³3’?‡ų._ģ?mū;~Ōöß¼¢%ÆĮ_‰1™I·a°ÕGĢźW¢ÜtÉcÅ>śö“%‹Ė <‹+ŽOEÉĒ銌=G$ļŗm—įcš„3˜‘>E%׏NÕ]#’Pń€3ų×qĒ8d¤O‚Ć®}*¢¦ģm\ć„iLŹĆ„RlĘNÜžT݃c’v0ģGŽśU±­Écg+€öō«L‡ĖŒ­e's¢#ābÆéŒw®ŽŽķDn’åāpP‚~š#𓲙ūŻ’ū~ܶ³Æķ©žÉž8Õ¦“ųYćY„šŚŻˆƒTĄŹ#ēxõe\wĻ÷mqZžž²ßh‡ ükŲūƒĮ¬ėGC„XįīōŲmäMBł¾µó?Ē/‡ āż QŅ¬ĀŚźÄ‹­>p¹Ū2ņćŠó¦µާēÜs\^ŚĢś‘µŌ`-eØŚČ™ć  ‚ü+łį’‚•žĢ÷¾Ō5h0Ēwt#ÄĮ~I c’TzćĪŖœķ¹œ£cń>Yą™‘‡©+’¤r:ŽkVfbU0;?wSg%DF±¬‰ ó6Øź äÓc ø2²‚ī+S%h 6§µ@®#8‚» Ļq@8ć'ü)C“HÆO„E˜Dqļde«JŪhŒ³:.…Ē4T÷=‹ąĘļ~Ģæ<ńėĮŗĪŸŖh÷k$Ȭ@ø€$ŒŌ2’5ž”>&xćWƏü]šģ‘'†|]§Ćqpą±]2æŽõ÷VØ©±Ł¦|Ø_Aq­xSX·1_éī 2“‘q •”žŸ­‹«Ł /mŽ’›dČ?yõŃÉ|Jš‹ńĄŽ+ųcć]6-CAÕ¬ä‰ br§ b ’›§ķ—ū7럳ķćßÜZ}–Ź Vh–9d-41Élõ`‚+$€ł?S³¹d_!—Ź'“Ü×1ę¾—t“ ‚HØv>¦š ­cōWq8ĻĻ‘īE{|7–Ö·h”Ä6|§nyÆ'OŽfѕϖ¼yf·wctI3Ō¦DžÄ{×Ōæ²·Äķß MąŁ$›X²‘¤·Wą¬`Ŗū ʽ, żĖ ]±4BÜ:Ćr‡¦ē€}뤆8ܰ‰~a^Š–‡ Õđ¤mɹ×žŁ«öŹaĻ^ųéB™Īm¤ā8²ä1VīŅ=GI¹Uu õblóxtłmŖ®Ū[œT—VŅŁ±2ėž9 ˜²Vū9‰]_n}Zq…$UĖ‚£ī絕īPCµ~ņēNPB+ŗS1Ęh‚:@łdŹg„ki¶­{rdµŒ˜Ē$ȧp;żcĆÖ6öq][•ž]Š\¹ļX° dŽ,ƒ„ ‰ķīįŚŒpļ\ę¶"_-2™ć= (iń=ƈB8 kŲX\OtŠ4,Ģ­ŽGJõ}ļD†“}N+]Ū«ø9VĒ®+Ēu2–śÓĖj6@Ē Ź?%ĶŖ_%Ōvē5ĢĒ©£ŻĪ\ą‘śÓĢQĶ9h›qœŠ“–Ű7Ō@jI[lV`źFö­H-£šŌ†`ž”€Źc›e:UŠYpzśŠ4[&+„ż÷Ļ 9Ī9©-äCĄ@8 “ō%y¢P6ø'9ā°5T ń·š:ż(3 ³š8³†Y§5¹™0@ *ąhQt”‘ÖWbż*Y~Ķm˜0®  ŠīgYŗ,§3Z·PErGPÅģ’v—2ŸC&hó»vzUS¤«:vØs5‰möD);󎕷”A·=9¬äśŒŻÓ¬aøš<²ŗćæņ®†ķ4Č4Ł­ŽĒNkž{q}¦ŪĮ$dؕŹsŒW›^_\¼ņ*JäéZAŒ”i¼Óęć~{Ž+vŽŲO¹Ć…#œU4k ŽĆĆгÕ)r"<zWŖjš4dœlĒé\ņ‡sjd~š·Ä?‹ŗ­Ÿ‡>é^!Ō%0DŽT+žXžųōÆŲ٧ž åąO j:ž/›x¶& –@†ŽOp}čQ±£?Se°”ZYYģ¶²ŅķĄHmį@ŠŠĄ­­8Mr>Ėinļb™ƒfÄ:Ciņ¤³ī*ģmŹ:)/­#–įcp§~µĒjzš@ī±9w<}(„Ōµ(wFą3Tµā:—4Ł®§³[Č,ķŌĘF €;’h:iÄüåż ?jŻĮĘßKÖÖėT]Ū[÷eG©ļ_Ÿ?mļxŹīōi«Ŗcc)$qŽ8?…mNĪ„+›^(ų‡}Ŗjŗ®Æyp÷Ņ|ø/¾Ź=+Čujī²5ĆšIć5éҤ‘ĶZ­Œ<›•“Ļm¬9õ4Ļ,ķĘpnę·<©Īå‹8`]ͼ«g<Žjō|6pæÖZkˉēå®’ 6Ų"„ưf “’~‚³”ś"£Ÿr~Ėß°7ķ ūMjö1x?Į÷žšsć~±v6ØRyŪčq_ŌWģo’˜ųū4YĒÆźśe~!óZņéĢ‚'#œē”ĶTm”ś±e£Cl‰Hā0Ę#@:a{VŚÆeśW4„qņńėšUW“ÅCv$$¦ t܅AĘkœ‘QlŃ8,Å»ū՜*&3€*e+r¤×~\M$1<ūz…ģ+āOßµļ‚>DVĖP¶¼ ±·Œ‚įĘy4FżNŚp¶‡ćwĘ_Ś{āWĘŻFoķIfÓ“4˜mĖą•÷ĒJłūI“1ÜHÄe‹1É?Ī·„z;lvŹĪ»ĘF*²-]¾Ź»Ō ŸZ¦ģbŁ1Ķq0@­¼¶Üc½z‡‡~µŌė=ӆLghk'&G!ėö^ XŹF-‚(QĪ+Š“_ Ü+F°Ęy8ļRD¢{>‡ą›ķ=EĪ£n 'Óµhź¶6ĘĘŽ2~ƒ„˜PDH<|×Qi¤”gv ųĶ·c6ī)ķĆDØæ­dļņHóĄ žōš1j2”qÖ·¬t+­FĪk؃x ÜŠ#“¾Y­K$ŹŹĖœ„VÓõQ9hRE'%Ojކ什FĒSłÖ¦§tnmć€Hčqց\óėø¤f&‡„D±Ė”iåōØ˜Ė mv°›ҳ¤·K“ak‡u==« ›$‘“rĮåĶāī+ž¼ŅŅ&`gø  kŲ†ŚÖ2‘ZFN;zšī­4é C%ā|ŻŲzՌŹÖ|+k&±i;ĢŽQ!‡ĖŠÕ©,^Īź&YXū‚{P#¢šÓĆčņÖv[’>t=öŖk©Ū6b݆č=č&håuĮŗhē,N9ļ]&‡z`FFå ÉČąŠbnŽZĮ$"xĀØžķs‹.ų‰š÷ū~ĀęĘ[8­.Ü:eš žyōÆĢéρēÉ©Į%ÄģózŠ”EŲõHļē³¹‚ūLŌ[ķ Ę$?(>ā¾”ųiń_Nm{OÓµX“Ūk«€)Į”ÆRNk t6>ĆŌ5ķ7Ć÷v·3鉮i“’rłņ”ē#Ó²µ-BÖśum nŁ×,²uZFUΦåŹI—&ÆĶiu-œłŠ®ˑַ‰“•Ž^Ś F5k{‚¾`ėōōŖėm¶V.Nąqō¦QÖhVvcPŒjK$–dÅ>öqĘ+޳æ†÷L“hõYGłyĒæNµ‰µ4|'ĆżGĆ:Ž„köŅģÄĀRMĮ×¹Ēnõjß@Ō^Žę=\Žč‚XĆ#…vpėųWV÷±ßsB{č'Ž5?¾Ļ1·õ®’ęęšZŪŻ[̶ŗ¬ ²GށĮČ’ Ę õ,śŸĆŸ“>°Ś&™A4ŒoܬŽÕöwĮߌ^Ōm4Ż:÷HI™›2|ć žŠ®˜ĘÄĢūŽŪ_ūFœ$ RĮ„wŌ¤–x“÷[ö°ĒNqLóźÉv¶į °O K» óķYģHŲJćĶSŌ Vé[C’M•°³0Y@u÷©ŹŽŅtaUaóeMQžÆ}iyhń:å`Ęk‘ƒķp@ЉĄ8ē­j䀆(ZFiٽ€³§ŪĒ4‚5~܎՜˜”! ™ōĶźš|‰9E„¢ƒÉqŲ éļ8ŻŁ³•ĻJĢ”— „Å6s‘T¤ŗŠŲźl -Ą2‘ĘAÅaųŽyeŒM ^ā›fŠ<Äś…ÄqČń>ąp0qĻ­yF–Ś£“ƒTD3u.£ƒō¬œĶąvšV³6•ĮˆĖä ō5>½ŖOØ[6Ń:Žy?v zd×/m$»nąu“Ā^'ø]OU±Õ,„°…pap“>ŻŗPgcÕ¬uŌŠ÷"XCžEz^«YŹŖ$ž9pJ 儵ø¶“•mœd”euōģgbµäģØ<bzU‹ VÕ atIü'= i‚ó<ļĘ>,ø€=„ØŽ˜ĪT׏~.»×^öĪś ¹•V`ŅDĻ€Éßń§#s»šēˆģu p޲Ē2psÓ5ŁAy§<ģ2ēkfʙ‡nīĄÅ Ø#Œ× i¶V0”€CØzqLÉČŠŚŹy=µz.—āI¢¶ū9Hǃ“҆ƒœĪŸĶšG˜·ŹOjĀ’x☠8ēŒŽ“…ͽKČm9$¶‰ ć'iē„xŠõma`ņ^)C§Ķøóēøf}łķøō¬ė«9dÉŽž0Ž“‚ĘC@–īévį$ž.ĄWYk}%µŗĮĄ”ĒJĄŠÄ›†ŗi™ŌžŽ•©-™øÜ-cńĒV|¬ÓŸCĻd‡^°Öö³+€T¾æŅ»KėČ. ]˲|6֊ ˜ėfūCĄ†LœŌėö’ŖPl?ķVS*—į“ł|ÉmĆ©sė\WˆtŻZia:eĄ·PŁuŪ’ĆŠW FĪźhęJ_)uyKē†Č©^ĶŹ*!MĶבXĮ³YEXŠĀŃąpLŔ‘•=tŽ\Y‘OvÆF‘ĒSČĆŌc…·(qÉģpEYӗģć6īŽY=OQ]p9ĶŲāŌK%Ü7;#VĪC`ƒōü*ķŌ7× 2LIÜ~µm 8bŅņŽąf9¹ń[Ś BH–0ā°IÜx®jŒ o­ēBX¾6õ'°­m6Śsł‰ēÉJÄF>¤'³ŗŃŲ#t¦†RìGgLȤm*­n; U¶¶¶fø&oCšåo¤‚įq)É=t¬§pågņŻÆOu ź o%ĆŚBĻóѽ¦j•¾‹h|@×b×ĢĒ8ü+݊čg6Žˆx£ūnŽÖŁv¬“jķǹā»_ \ų~āxŽöŌKwlŹujŃE™4tiwį©õ1aŖĮ¶óę!HųV7Ś“t­_LńEž„£iŗ“ s +“ē Ē “ߌ“^d8Ÿ†¼į½Kŗ»ŗÕ®fŒ«Üė¹_©Ąō÷Æń³*¤Éc: 7ČsŪ4ćbŽƒy¬ųoķnåšE_•CżŅ=A®c^Ó5½/>ęȹl±R0»3×ņ¦K=ŸĆ^-}CĆ0¬Āę+X‚Ą¬« bźń5=P°[k•”„Ś~p@Oé2<_Ƕö¶ŗ ¾æ}’Čß{8É÷)<ŖŲŽ^ZC5·Ū[ĶįqČĮćBGÓZĻ„µ+Ķ&ŪUµµ¹‚9]„aG @äéĶx¾… ½Ö„uįß„ƒĢr¶¬_<õä~tϦ¦Ŗų+A¼¹»Ń/ļZ(ŠŁ0¬GjēōOŁčŗŗčw7"ÖŅ)6†wčæŽ=艄„}~Ó.ōÕŗ‡R±ž×THdt' čFy¬išÄŻö V÷k'&N ē©śu”‘©öÆĄß|;Ō<q ųĘĀĪåbó$de`l#޵ł“ń«įOˆžx‡XšŹIuØųB[†kySņå÷uŽ*9µ±Ł wģń¤[é·÷ ™…ÅÖĻÜķŒSč}{׊ŗēĮk‰Zž‘āĖ‹Øä¾V05¼nń·‡ķ®ōčķą•wŒóµ×<פ|CÓ5 Żö{-7ķŠÅ‘>NŪŲŽ‚Žc JēÅ–ŃŽi·k{q[\ī%•Gūצ[x¾ĖČ»†(ÕN*ėŠ’²Õ”›ĪkW±ųĢ²’ģĆ9ĖóņĘGQų×£Ūxb×SŌlõ-AÄ;Éq³€s× PD£cč?[b²·–ȏ•³łf½ļģļ¦j¶÷IÄhĶ‚¹ēėŠv2”µ??×ÄŗŌß’=gK™Ö9óoŗćQ–gūDo‰6ńøc¦*Yg‹Üxj :Äźv©|›‰óKŸ—wlZ©į½N%øg ±"±ķŠŽ`=ŅĀKR†™j`2¶ŲČ9Éī+Č|{¦k> ŌßYēH„m³ČĄ²FĄcŸØFMkcĻÆo5 ūW»‚20)ŠūÖ,‘>§p¦$‰§‹n2˜ĻÆćZ©÷)3过¾46/¦ųsV†;]!äc€rGOzś=—Oš†£o}oØC©Ū˵üĖc» ž3ļķP×RŽū^Ņī¼Mkoo›sØYH»#w",ąŸ§5ó׉~ų§Ā—ė{k§ ,‘"ŚO¦zÉ»nR‘[_Ń-uķ 9?²’Öś0ž¹?•|ļ®[JęK-Õ»DćåW*[±§ Üź<ysż„h×^é«lźwŒm#Ōēµ~¤ųkVƒÄ:Ÿ“ķŅ RĖü\Q#9³“½ųeχ\i–f[ųŌ²£€€gæ3¾&Ü\j÷Ó]Ė£Ėoq‚Žā8;JœgéļQ×S$ĪæĀ:_‰†•öż*)cT\•N§½xļ‰Ó>ĖØj–°$‘v†éĻJśßHųW©M„­Żę™#ċņŹcā<ō¦nэ¬ų~"-$ņķpWŌ ōmĒŗ¾›ą=Lo*ȧĖ!įįņzśŠg$-żš ×õļŠ—‹Æ“÷ŸA”Hó¼2Ÿ”v=M}MńĻFŸĮRé¾.Ņõ Ÿģ āņŽ6źÜ\’1SŹW.·:OüIń^šōk:•¤,Ēgń”čN{ćTæ¾5h8¼k¤š-pš“vp¤Žr*eNä=Ż­üs xÅ~Iå]'TŌŹy"pȃ?*üĄ×tŪ­'ÅŲvŖ¶°³·ĪPķ*AŽõ„abS9oŚ᷌tßGÆ[Īi°0; †WĘZ~.±`m$YŠHéĶuә¤d}ū(ų"Ē@Ö5o\ų’ŹÉŠł±”˜«DWŒūŸĘš†>#éšß UuWG’H$żä;ŸĒ5æ5Å(ėt3G¹ū Ķ–‘ux ¤<žµēænōh¼qˆ¾Ń&Æ[€˜‹åóHd÷>æSQ(v!E³2ėā-ÕÕÄ×÷ģef <¬>ö3^iwā+jŗ¦‡k=“r,Bp²}پžżj,Zę’|"¼»±Õõoģ÷“pw1V<š@ėT4FŸĆ­§ZNņÅrū€$ʑ“N÷Eų‰©ų ÄÖśö”÷ŗ5ćķ‰Ż2ąG9Ē'šßń—ˆ¼¢ė– §ŽŲhńHC“¦EŚXóĘhG°ų#NŠoÆ4_Z½Ž”Ø© ·ˆ9~˜!ŗ’‘]ļĒŻBmfĻE¹»¶C5¼`E#Œ1lz÷¤ŁŒ¤Ļœm§±ńqŽĒY[h®Ņȼ‘Ӑ;qW¬¼;ŖxiŅK’8˜§HNæżjĶɍLļu’XüCŌō›?Mˬb٦U‡”cߚłÆĒ>Õ4VīĀx¼ū6įcOĢʓ)ŪcĀžїR7ײ€vć"Lv•³¦Iy?‰Ņ=Hiį[ÄI" pŖNsō«Œŗ7CōćĘ©¦ųį.ƒā,,5½©—mYIǧ5äžń¶¹ā?ģĶNYZ[YaVfßĀW]9J)ŸJŚĮrmķ§$é³;G¾*§ˆ< ¤ėŸŁž ³ń¤ļEÕŖ¹ø>ųꊓ1PŠŻÖ¼ §źZ=»hS\—x>h,Ą>•šGŽ-ż¼’e7öĘż‘>)ü k;KÆŚŪ6«į™%ąĆ}Z=­ü99B}æĪcĒ~¹Š.u«-sM»ŅüG¦Ż¾Ÿ©[H›M½Ā±VzŽGz…(©ņuzśŚÉæĖš9ęś%p#·f„ŠÄœŽ©·ž±”I5'ųĶąm_LÖ&ų‘ ¤7>Ō$ڳĘ6óņ™Gb{’Æƒæj/†oÅ?…h7¶Ń7‰ō‰éīTīŗ·c–OroN‚°L?Ž†2|'¶ż <- OÄM|»»«(ž{Ø@łV`9aŌŪjŹąZ3„šżƒQ¶Ķݼ­šH(Ač{×9ā=Łf6sż’™A+Z °¾ń ޾[U•¼ĘR¼š{Zś×ÄW¶¢kVltŻŽFķXW¦iœÕ-|Ę3% ļė]·ĆXn“oh~ ÓŽ+wŠQŸ!̈HĻ"¹ć4¶.O¹ś«gšö=BŹRĪõdIbYŠĄ\óØ¬+-ń]\Z“ĆĶGŚÜżŚķ„Ī †¬ˆė‚Ł#±Ø|Ė…#Ė9_āö­‘©¬š9p7vō4Ķ&īDóEdMŻūÖęrzčgĶ©%µō«Z6o˜‘Š—RTŌķU¬É]‰’­ĮfĻj ĢÆ²Ā+)ćœ’[yĘĢeG„}Č78 żūSwHē ³·” ³F×OIšSņēó­ż铹٣*ba“ŒucPń R\ŖĒ®[„¦l¼‘Zßå—= ÕX “˾9\¬ČNQ‡"™i¦ŚjŻ €Ÿ'_j@0Ci¦J›0dõĘҟ„mö§b©ĆsœR+_š9ńt†$øSĪ+˜»ŅšśŻī0—89ĪO½_³¶–ŹÅķĢqŗ·!±ČśW9%»µČdpJ¶°  #‘ÅŃĆ}sŽ»k4K¤UįHühśąŚ]Tõć­iiڀƮ~RqČ  ėč­F\ ąqҹvīį s„tkoŪ¬±6į›>µŽņ5‘H=OåĢT`ē'KQƒl'$)ß4dƗrsƒŒWS¦OµŌHÅ89ķ@łÕ­Ś*’WjŸOzį5I|ń#¤¬Ü‚Ż fE³]DĖ#«,MŒqÖ» 6f·$|¬{Ö§‘ĢS„Ė$qĄžt°ĮŗHwČ3ß#§µ/fh„sF{$ÜĻ«Z>c9÷­d3¢-qckŚĪEr:Ɖgŗŗ³€8Įi(öĻĻz—;7'ĢEf¬XžM€²ƒŌŠÖ0īTMe¶Ū†įڵ,āņوRĆø«qF—čjAcss:®‡¦Üėz“ÖÕwJÄś(ÆŌŁ×ž ½ćO‰ZF™āŸŒZ¬žšš"FŃÓ丘aIģ5”£mŹ?f¾ü&šĀM'JŠ< įĶ;Ćzu¬&*¦YźYń’NMzĒ—žåķcR89õ®yn:m3E—Q‰./ÉEž~uŲEioo¤H#øąŌˆlÓ@Ń?*ą~•Äqōū—2ĢJgŲūPN©ÆK93åB§Ö¼³Å^<Ó“ČNg1©ąIļA¤#Ōų÷ā‡ķ”ųRŌŻßjö.$E³#c¹…~JžŠß·Ÿāė;ķ Kh4‹•ŒŸ&ѱ#‘Żœóõ§c¦:#ņ'āwÄOko©ėZØ]<3ģņ؜öĮ&¾\Õ<_r±Ķ¬Ļå¶Iē”®ź3©VŪw%Ļ,Ū¤'?CPĀŇļ8®čmJ·,ł?(({žUa`;Į –ÅYĻĢXŽŁ™‚ķ;OVÅuV:’¹ņ~hG'<`c’­I»Yī’~üOųł­Ćįæ…ŽŌõÜłmå‘Y8$uż1žÅßšF|5:gŒž?j­ć˜.žFyĮ®YČč‰ūkąo†š7Ćż%|-į-.ßCšŖ¶VŽ4{×µzķ“QAÅJą©>ˆÕč‰<œ»3łU„”“vЦĢF°Ļ­0ŗĘ }kH@‰åNpw· źkęŒ<š¦Öęok°é÷&`w·”ēŠ›ks¶”,~?ü^żŗ¾'xĪ;½+Įŗ¤žуŗłŃŗT?Żśó×5šÓĶØźw }«ß]ź×īÅĢÓ1-“ü«XDŻŅŪ.ŽqłšŲh„"&#ƒĻEh݆ähF0).ĒŅ»ĶĆ·š–ĘŲŠķn1šÅ²ONŃü!ȀʦU>kÖ¬tF³…•…)Xõ ĪŽXāK¤]€c„u’YŚŪ6q£éĒCTdäoÜųĖQ‹MOeŽ8ć©OO¹ó“Ļ•O’{Ōr)’ 7ł@)<ŒqŠĻ]JņŻ–J®ph0lŠc¾ ]Ė1õ¬É-C±†ŽŁķ@ˆE»«®0ģ4’Üh±4Lˆėčx ^÷R½Ō’Ėäkģ’Žķ\FöaŽ€5Q6`¾wgƒšŁ¶‰¦F¤Wć#u8%‚ v’:礂A÷0©’ŠqV2n(w®OÖ©é7+§ź;„,°¶ ńYņ²Žß[¼ķ’K¢ßėžk…‡U+źæ§‰²ß0ōļ@ŚŻÅ4»””gw#4ūé‘BHØŪ3É„93[K:Fn<į×iķ]lkk²ł,Ąc •>mŽĻōŖĀY£į‹nĻ4[¹<ŲüČÜyƒŌó^)ćŪ½VÖ!$2‰ąēpźV™¼^‡Ķڵ¶«¬ĻjS¦Üćg­}{”ÜMakknÓ UT\R„cGW¹…Ÿ0’N1Ó½A¦} ä:gփ#“¾{«‹5 ą/P+ƒ‘÷nSߊCg£” ιĻJ’īIö7فŽ=:ŠĶ³¼Ō$Ÿt”üīłąāŗ™A*zśŠ1²IŃ„wņČäV=ķ”ķör<³Ę½LŠŠŌĶMKw«ź®²ŅEH‘¾k#k›-“Œ Ą1Z½¦›5³˜Õb”Ś·"RčsqĄ¶ąI•tQ޲fÖc‚ā3jĖ» 3Å4®f—c+Ä:¦…©yv7vāŽI?+cҼ¾ēĮ®·’øˆKd8zµQ5ŌöÄ#²—čpG„y§Ž>C|Óź³ģ¹^p >•œ–„?ŻéKęC,€äŽø¬Ä†o*I-Äö8¬&‹ó·Žü7u8ø–vĮ,xä×ē·Ē…WZ®Œśµšž e,©’žĘˆ"„óęÕ]ž[¢Ó[ĪŠ™éƒZQÜLŁČY‡NFq]4ūņ‹µ …M–šĒbxĶ-£4®įŌG8ō5m™£sL¾”xÆć™.`·PĆŚ»Ćöŗœ©©iīce?#ņ zƒX9w7±śšƒĘŗŃģ|#ā۟³źŹ¹ŽćnCtūߑÆ]]#u[ȞSó炵<č‰Į—¦°œ £늷£ŽgĆW£éŚĢ÷Vѐģ¤tē ŌØX”¾mõÅĀøbxTø]§’_“MžŅęĖĘ{Õf&”5K„– īՓĢ-ŽųķÅM©Yź:kDBĒppĄī4iĢ82x~×S·»‚äĆvˆž\ˆFJÕx2ż×AYµH_ē…ĘC&@żkŚŽē›ķA٤7NžR26zÕ{4éfÖüöł÷"98EŠ~U±|Čķtż3QŌRŚą|ŁĶ÷Z¼3ģž!š§Ä¦!;7½Ęųźä(4Mu=3Rń}½¬óŁŻ^Ķ N‡sHÅWš=;ÖOöUՔ‰`ˆÆm",Łį¹ž4%sŲžxCÄ:–«„ÖÆo4ƒ)ĮōéS|Y7ń£ų/ÅM+¼AĖØł@a(1pÖĒį­bĆĆśœOo֟ >LlOo|ż?ZīeųÖ23’¶Ē£üK­N³Ōµ“Ī”^h`gŽ wŸ5čõ¶\[Ś[ڬī–‹ĀŸjlŸ#Ą5{ż~ƾĶl—3āNA\@Įšā,ēhÆąĒłϕῠ‡ĄwžÕn“‡“[dsRy‘p³Ķz·|aoā>Ÿq¦ŪĶŗm£>qõ?­>P±óD{b76±+$##fxŖ66ÓĮ:ør’nį‚ōöŖCŠčwZµÆŪąÓļb×qŸ•”e„‡Œćń­ķÅ:’‡nķÖõn®¶:°Qļ0A[¤h¢¶?P< ńūĆ7zvŸ„ėś|ZX@™d"5c½Œu®ėQÖ< āøʽŠņt›ēPFā<õ„陨³ē‹RųoJū=Ž—nńĶ*”Ü9nHĪ:p+ć?ųjy-ouˆŠŌįܽqšÅ&ibæĆ óXMAŁm®bĘɬC¾ké’„>2ƒĀÖņh:– —N’”D#•RŁG°VĆäG×·?µ=ĆZ¾‹µģ`œJæ,ƒ œq_š¾#ÕÆµoĶŖGaöē}×,€ r…}sIÅi£Ń-|OÆųWE»1钯+&3ņąg®}ŖķŸ„.~*é:ķ¤W÷џ?ĢVūɌm?„LlŠGÉ­¢]ŁźęI,¤¶–Öš‘Ęr 7Lōģ:żšoĒxäQį­RĄL×1+8–<œt#¾i© ję/Å-CmBŚ’Nó¬Äļ“ žž5ē·:·v­§Į3½¼«µˆj™L‡Ū’gź?dÕōi¢µŸDŌ+·sD ƒ÷»澐ų’¢éßšƒXßépż¾ā6uhėøł‡cÜžŌ™'sĮµx“oųPųI¹6× –•[hCŽ„~U›į?‚–Iį"DBά®éĘ’>µ§8“&Ѽ#ā/ZĆfu‰®ķ¬tY%<Æ£sóuÆ/ų¹®LLń €Oµ™IžÓoZNC“G’ ¾±āSŃÆļÆ/4”ˆ[»’«ĪzWhžšŻÄ·]„ŸŁśŸšLqÄŲĖg©ī~žõq]ˆę°Ļü)ńe–’÷Ś7ˆa±šę2d€1RįxĘ{Ļ5sąoüIį «/Åļ{Jńʗ%÷QżüWDQ“esčo‰>,»Öķ,ŪB»O*ŁĖł±3+Ī3Ó9ā¼®|kÆjvŗĖ¢[#mĖHI š¬iÜõ GU¼oŗ A1É_ā {×  ŻŻYų›G¼Öō‹»{|™OžŠ[ˆÜ;WkcQ¶æ³ĢÖī?ĮŸ’]yn©s¢XŁ }Nhķflłläg$Žł„rQĶx“Įž%°šõ†»ØC{{”†%Į}£żœ;W’ ½ćoųvoéŚĀ,Ū¦ę@ĶžƒŸ”{ —#G#Ł’goŠV:~yš§Å6‹Š4ūµKyÓHč;㨯¾õ/ é>0šķ„¾„Ļ:Œܐ1ĘQŒ£Šų÷Yš¦“­ßi—©5¼˜1‰ķxĘNŖŸōƈųv|G Ė{«č* WrJ·,:Si£ēx¶“O—RøŠ)ĮTb„GU9ī+Ų<éż«hŚiDmćĶćæĻ”•ÅŹ~¼|;ųUšŸö‹ųi?¼e?Ūp3Bbp“üG=z×åå’ĮĻžĻŸõæ‡:„÷:§…„‘åÓ'‘OĖP»ŗ§½i©<½ <%5å“¶Įœ«&ĮžĄśW‰ųŻ5ļŽ_ßŚŽø‚o›s±®„dՏ`ųńMüW¢I¦Ķ}”{fŲ![ī‚»łWMń";}& üvŃæjχ:$ņ|(ńÜ_fńv©ˆōķ\p³Čƒīļä3–W$ņ3„įyFkuł?é?‘Ķ8ŸĶ7ˆ4Ó¦ß^[¦÷T»ŪÖ¹iY‰,X•`v®č½J‘%”pŹ Š“ļ8 _CLć”Fm%äłŲzqQHAFŒ.yļZÉč4SU*ąµGjµ–`¦jTŽ„‹5@/ŻĪY·Xo;O śRR±p} öņ4xw#gž„+õkžĆūgŲÆöČŅ4Ļ_Ļiš“ā ®ØH&Ł …é?ø›nvņICžĢOµ^‡m>Ēś(éé­éhŃ]Gzź‚HåʄdČ×/Ø[˜Ü^ylÅNJóźÄŅŚ}­hŠnÕt[¢ƒĆÜ ŅŗeQ±ĆcŲó’ėÆĪ?xNy?¶<#Ø”¹×“ do5›źß'n=p3łā*1Šü’‚œ~ĖZy“>6šÖo5½Å³][IŌ£’dw#ņÆē«OķäŒNŽŸ1V ƒƒŅµ§+hDā¬?ÄV6ryĀŽVW/ƒĒŸžµqRŪ#a+]ŌäyÕ#Øõ‚TڤīĻsĄØŻ>fĄ—G9śV¦JėF*ŪšŅį¹Čźjǚ£>XŽFF –ćEw©śV’%øcåēʃ¢ŁJ.v䌊é¾|TńoĄ_Œ?ž:ųJćģś·†õ[{é,‡ø¶ <Ä8źČ#҃¶™ž‰_³×ķcąĻŒ~ųYūOü3Ōķµ_ų’Ś-;ÄVĮ€k9HĘę\Œ2¶ąßLóšż&ŃŌ:Kfdjų–ŽEčźy}EqՁ·)Š;•8?…ržēü›ö=ÕægƉZߋ“6å|9 ėŲkkXū5Ö쬤vG‡ē_›Ė ¾”`$óš9]wGž˜Ęy”TŅĄymķ³Å3ø”1üF½“Įŗ—Él/%n '­eVwŠ†ē»ĮccāööÖŹf@ ¹$Ö«ŁŻh°Ģ–7+*÷X‰ś+ĒshčQ¹ößģéńŗĒZŅęš_ˆ¬ć“Ō!K9sĢ‹ÜcŪüūzæ‰ģ-™Ę©,IŸŸµŪB©Ķ^‘…ę‰cTV 5-¤č¤łŲšMzgžŠ¹…7üÄ©üŖeXZÖhā;’£ŅŗŃĻsž†ĘR’;‚łźkF¬€qĀž£æÖ ,\¼f7T÷5[[gR<ĢõšŃxoķ ¼@ļźsYZŽō ĒIiēE×|‚{ö„’Å·ł‚€-C„…sĶgj‰ Ė7„G¦éß8 Y†rsŽ“.ąQ+m‹Š€;Š–Dn“ŸŅ¤’Ł.ĆHĒdć„_±“ø…™›héĒņ­ø¢H¶,€īh¬—-ҌłŗõvāŁ°%…]Pž©•-ōŹ^6;F{µ{¬¬'÷nļQÉ©ŗó0n5Éī£K!B0W< d@ģ±IŸ, <ā®Å¹!ŽR“L<šzqZ±G»;—?ŌŠEĖ«äZŪ™īrЦO=«źO‚æ²WÅĻŽ·ŗLZf™/‚ü1pCkŽF@uą«JNĘČż­ų'ūü3ų,lK±njau’MaŌ5ūŒÓ>•÷n™peõ ²ūp+šsølīu #Ų<›|ąWkc£YXĘŖ±‡“,{Ö Nņ„ˆ!‹ķ\ķö¾ØvČŽRśf€9é5²ūŅÜ|¬zšó½Z·³Wi„å{“Ą÷4ÜńüSŃt­:ņā÷X†ŹŻP‘#Ÿ—>ƒŌ×äĒßŪŗĻ@ŽėMŅ5kH-ƒ8y§PZohĮéųUF7:ĒOŠß“ƈ> O{m#]höņ(eø2āIzq÷kä­_Ē1éq\E ‹u3Ēē˶{äõ®ŗT{„åm*Öü_Øź %¬“ī·ĻÉ-qYŌ«Ł®čĒ”ęÖ©ŃM±Ł\·=*ŌP’ż1ÖµHį”8­°K*ķC[Özl²)$åČ”»źtž𦣯j°xsĆśeē‰u—Ā‹KPL™=9ū·ū’Į|gćķGLń?Ēėé¼5į•T&Ą!F!¹ž¤ćĘ°©3¢0īNŸ?f_„_³’†­“œ®8ĄĪ¹Ōķ-øšu_Ozņ’xēHŠ 7¶Æe¤Z….¦Y—ǧéłŌ“éõgę/Ēų($¶÷ųKqŚģe¢øŗf,‹ĻfńŲWåļŠ|i⒈šŌśæŒu{½VåłŲÄģR}»ŸzqW:,c 5ڱ t «–ń$E_—õ¶ČBy„I¤{WU£čwš”D ß1ī:VRwŲt/†ļ ©$¤Č8#¾ {žįx­‚)‡ Ԝu©%ŹĒg…”Ž%Ü#ojßÓō īĖ©uĀóŸj,dŁŌŲiĖ[eØā“^ŅŽ$F·˜n>‡§Ö‚%+>Köņ™ŗšzքšÜ6ļä6äµ3&bŲyö³w" gźZ£j"ŻyŚzžXF²l؟?ĖQ\Eöˆ$En}»R¼w[Čg•NϘ1=k.ņvŌ"ó‰ÅTÓć–Ęåö©üs]:ά›r¬Gē@%Ü212Čō®wķĢ%RŒwŅ€/Oz³ĀbŽ?ZĖH\!K󯿀25-œaG9«:%Š,xfˆČŸ/ßė@Ž fфö×!#ēÆć\kw%­ģĀuåć„tšEœW6ÜvCҽ3N»X–9‰d' Ųé@ÄDŠńņņ¬oG"Ąõ —#BŻģć…ä‘¢‘@8ćk"+Č5w·Ś&N ćƒ92ŽŸØ½¬¢D'Ć+æJ×ø…o69 ³Ž‚H¾Å `”•]G­eNķ4Næ!õ€3Z×ĢŹ«Čö¬½CLøŲBIū²:śP£xs[Óļs.£$ź]›'”œōé^”kŻķŪ®+ųPŗlš\GĶ›c(<õ«:ƒiÅÅÅŖ&ņ: c9»ä7d“IĻŹHؕÕwsņŅw2//VŁ$ ó§ņ®n]~Ķo!d> ņµ²Fsx’ĪĀP²\†R{žµķZLzv©¢ŪInŹĪC qˆģkG„%¶°gīAā›?er³€ėӚŲĘHć$ŗ”G ” œsÖ¼²ļĶÖˆŠńöDĒÉąŠ(³«¾±µ¾‚ŚH„IHĆĘąÖ²ŁE%”hgdŚG~j”˜s2ō:€ †Ē֝341Ęõ=ˆ¤Ć™œV”ż–²IēYB²ŽAĘ2kƒžŽĶn]šŻ6ēӊEĮ³ÉŻ ®#œj73ĒqaMü?8Ą­e”Öŗ-ꞠōØ®Čc(OՑrtfAĖA]‘¦»BŹżē^œŅ36˜O ¼*ĪĶršƒo‰ą’Xa©¶T]üaįI,ä7q±Xevżzóm²ŲLd‚~rēɤj™,ö÷7%„ņ™†@ÅV†+ż5š" †dę³’w6ƒčr©Ŗß=üĘņÖX¬eNIćVĶž« ČUў3éėK³:ņSö’ń¦bbz†°.!»ŗ¼M­ņ)ąw¤V€Ł×’g:YF勳Ź”‚ĖtToĪ=ˆŖ¹”™ŃXĒ=ćĒ›Ķk/9u=kŗ·Ń|KƘ—>9ś°œ‡aߝgQY"Ōm-™½ŽO׊ϓšœ’Č xĄžAvEó©\h–āB™Ę=EX¹ń_(…ąŠxIÉ8 Ī]ŽćƖ‘«Ē4p„lØÆW– V]®GnōOb¶y0įČädbŗ{;;'µÅÄy—#'æįLJņZézt$Čσ•cҼśßĒ6#X]/vąĪT „5{U0ķi2ƒŒž•Ćx‚+)ō™į‘Ō7ߥļSœPā‹õ1#±»ˆķŁö‘ŒuniĻ.có£Žw)źj%£Š“ØE•€ą!ꄍY•T¾įÉē«Œ®L„cdZ4x1ĢÆ€ ““Ū‹Č].V8Ęī“ĮŖ1.Žź°km4wńÅ Ó1!{V-„„÷ØĢ©±:(°Eüšd–…b'ǹ®"yę¶yH_-śRå@>ŚK»‰—c…“ž6śé¢bSĄ$qLŅ1ī_Ѽqqn<·š= r‡”Ŗ:†“—.÷)³a€CĄ­¬_"!‹]Uµ©#%s֞šĶŒ˜c!Gß“qĮ„)\—O±RóP™ÉWL )ĻJĶ–÷÷G„¤ņj Œz¬ž){;™#óƒŗōÉż*-7\—U¾{i '׫})©ōF¼‡ou Üéźg·.s†™ŠådøÖb• –¤·ļ-žPöĪ­;čĪi¢DŃ„›c 3œuĄ®óMŠc½†Ž\2šFzżM+Ž‹Įö¶ÓĆö`m¶±aƒĘ{ę»(Æ#Ó T|Č:tĪ+EäDŃSRµÓµ+¤3“hńœl<ēWĶ֚Uö‰®»„Ō—Ńy…¶ÉŒéÅQ™Śė“[\¢Ü (`ą±œķ5å:•łmč u泚7FL–6—1°»·ó_Ŗ69V’9­ķ6Ś(ŠC†ćļt¬‚Ē®ŁE£V²N€oUĮük’×4ū›9$…$lb8 )SCÓ­^9&æk»fb2čNpLÖÖ„bč”b˜˜O·\V©"&ģ8’šN 7‘JАä/G8Ē?„p÷ל}ķķŒĶ¾Õ¢ņÕ ĘĒ“ļ^“ZG™ŌÆī­n-¤—a9e+ĘG„zo€$“ā•öč®l."vFŽQ…eõǽ[fēØuæ x^łu(Q4ųœŖ“K» ŪŒŽyŻå¶©ØCIQ1µĻ'ō¹µ4‹ŌŅ×<=kā}*{² ¾… +ćåļĖ~Ÿ•mü?ńnØĖe„ėĶęŪ›¶ć~ßCé‘MJę±Ļ¤4?¾š§Ž4ė3·¢Taµ€ep8žq\7ķŖĖćļZx¾Ś4™äĀ…R¶tł±Üt¦Kšg<ž°—Ć0Ł\ŚyZÜs¬ńĖžĘ3¶³|'|śgŒtųµ›kˆōrŹ­"/RN0jm©)j{—ŽuŪÉØ]ŪŚNłM²C‚Ēƌ|EćCIŪ¬čšh@X*ar}iØŲ“°¾ünÖ)ńt’¼ØYÅØY"[)}쟼•€ĒŽĘN1_jšÜµµÄ7Kq8Čg‘1Z•¾ŲߣJllÖk…•„j‘¹mƒŚ½Žņ×ā?ƒo^}.ęhƒ*°Ę:rE3[>¹ńC^Ō¼$_Y²µžķīa˜ŪĻOJäüįøüy–ļ ČŁ?!ū¬;f‘— ūĻ…/įmm¦‚Ōķe«łƒq½S_ ėŗ§ˆcÖomRK8£Ń2p8럄É_¼v|M§j^²žHŠGęÄd'iČ'hŗŠżCż|SįŻś _ß’cĢö„ü©ÓœŒAķ֓)£Ā?hż6ĻĮ’5Y|'qmØčŗƒ½Āł%³žv`tƈ|c§k:Œ†ōŗĻvƔÜxōojQdI®§Ó޼¶’„=ŚķĒ.ü³‘#ĖßtöÆ ›ÄZÓŽé²µ£DÄ'8ÉĻ’XUœrvg§ųvŪK›Bø¹žā0bē.ąĒŠW‡kzF£.­+éÖb[ äČ£ī÷‚œČµ˜uĪ×Qµ„ßÄβJˆ€źXՕń.š2© dƒŽƒxīaŽ*†’ęĪ4g'-ĒZĒXóg{UŽ Ū€8µøčz߃ą6—V×VęāؐpĆ©Æ~³šūė²RĘÉ„BHVņšF8ŖŒ¬(¦xļÄŌób»ÓSR–ĖPA°Ø8ĮģxśVĀO_|/¾Z¼×züSL¦Q#œg¦@ĶUÓ5>Žń׃üy¢ĒāO_Ü}£h[›7\vž3žzWƒj^6µŌt»ō¤“hCnp¼ČcsēQĖŲG)ąXų{Xņe³ó,ömC÷׃Ļā+č_ųĆįUĪ©q.³%–­„ŻŽŚašŻ•ā_ ü+Żõü9ØAŗ”Hķ¼½Æf!{ā¹%Ģčϊ¼Q©i]I#·µµĻ—…ąƒœQū;|}ÓuŻkÄŽÕ“a=ɑÜŗ$„}¹®Ś ėQ{>§¢üGķ:õö“ecq§—Ņ6Ÿ ’=ėāoŻĶ£s§ß:˽ųęŖų«āwƒą±]&śMÓe³™pŠįq»>ōĖŌüŖ»ńŌā'ø²0r j¤īē =Ž+ļ]?Ę^ š÷ĀĶ'ČńļŒ+Ūܮ׉¾yĶ]Łį·ŚJ_YÜų‡Ćs+Ž]ÕÕaėžżź‡ĆÆż“ÅrĶÅv²ŃŹÄoē°ļҲ“čRöžńV÷Į^&±ń>—ØMkåH€Ę²afčĆӓ_|ų“YҾ.hś>­$ŚeÕĢH%UDĻ–ĒØÉėł÷§ t&Q;“ńīgÆi±’[•Ļ(ĆŌvĶzDłŃpĖļS4LU“o4=rĀäLr•ä|‚ŗšōļx¢ŪHÕm ŽŃ••qł×-Ek¤n}£ā†źŽĻR·ežŚDpčkņkž -ū:ĀįųIā6žĒ×,¤’Ļ÷„-„ś £Æ`K?é\ļČĀhž>$ųÄ^Ōµ}ÅŠOgā}.w²ŌSo%•ˆSp3^WŻČ 0GŌWe9Uä?™$Ģ«&sĄćJA:#³ģŽŻhr2/ŻCcėU¤n[ń@ąõ{›$ƒĻJ»å ƒA±l`¶~½Ŗx]Ėž{f­Ėž^6ŖeØõ;Yļ4ł#µžęŽęc¹‰ćūŃŗ†SŲäuö¦uÓÜžžą†·wü5Ļģ±£ų{ĚŌ’< G×ķīiīa ū«Œ’dÉē*žÄžąÜZA‡÷Źöó ‚zW5do”Öl ¹µŗÓe”ę6•5ł§ń’E×ü ćā<6ÓÜ訒cԘr#V<3ūu϶k•ęĻ‹? t’ųoWšÕž£¦jpżÆIøŪ¹Vb>ē¶ySōü|žÖĮĒk–Ÿw+†LåL§Ÿ`§ÖŖ„“V>W»ba&.ć&±Õ²ÅT0ä`õŁOc‚Ŗ#S!ó730č3Ś£Ž?³øņß÷„ä‚3šé1Ķ}ķ»4ĒdY;ČėŲPŸ50‚A¹{Üā§“˜ĀŹX¶0Fj ŒarķnS·žHŖ1́ćø]‰'īł=A⃲œč?ž5ūOŁč~2ńģEń"ņ×MšWˆ {NÓ–ōš5ä`Ü®;×ö=ū<ų³Q›F×~xšąÉć/ Ļö}ÄŽYžc”r÷õ¬*£Øś"Xļ®nmÆ-2Ö®6ʇ·Ņ·,-Mš:%7esŚøfµųŪ’zż™n¾$ü(ńü;£Å®[\ŲcųŠÉp$d’–7*Ē€Č~Sӂµüźś.”į=wRšN£”iwc<–»gŒ‚”zsÜc”®~¶\ŅŅ8„Ńd¶I C¢\Ļg2`å¹'·Ņ³“ŠÓoŁwEŃõøĘ¤ĘŹīźŁDĘå¤QÉÆæ“æ xwX±“ČŅōųóęīˆĄœńžŸ…yµŽˆ³GĆß~ŁŻ¦§ƒe”›ć•ž šśvĻį„otµ¹KE·ŠQµŃ3t÷­( o¹ńļÄ_7ƒ|Ow”Ü**2…ĄĘå<ćź2+ĶŽŲ¤…3ƒÓšö)ž}Xˆ²“»%AüźiYUŅ[ŽĀ»£±Čį©ž%~C.@«šMœ–$(4Ę X/»"!Ÿä*ݜęB" ߏ‚ģz‘w Ķe+ŲŽ­æģ÷œßŸ¼F(É|:ńĻŝNšĒĆ? \ųÆSŗ•c.ŖD6ć»3ćzP8¦~ŻžĻšMo|9‰|Kń’ųJ¼e4{Ā& «ß·„~¢ųKL:6‡gįß²YĮ Ś€°Gj»tč+ ’:±Ņż•n±ŸyėėTNŸ&›uŪ#i[=«˜śŽxÜo@õZ„u­*FLm Ē=čŗń†’2<×é»É^\½ĮiēŸ2/!I ØĘē™ųƒā>Ÿ¦ŪŻ[Ė=¼ŠO/Ž•šĒoŚŪĀž ŽuW³Õ.U :>R®A&Ŗ1¹ŃŸĻßĒßų(Ž­©ėž‘ąI5Kµ›cȈwĘ:×ĖŚÅ«_h‘x“]šŽÓĊv¼ 3Ÿt®źT e+ā?K©`‘U‡…y”²ŹŅ“ŅH cÆ„wF8jĢ–Y ¶wīēź*F†<åI4ģyŅe‘jņŗ0?(qÖµ­-¦f*ŖsŒr:ÓlĘ*ģč-ķą‰ ™K€"A–lōąWéģ™’ßųķūIjVœŚļƒ|3ęĻ,g2FG|ōĻjēœū”āN²ģšOöfŅ K𮕮ų§xi// sė“ß5śigfn%N±ī ap œWJ½ŃŹųĢØ„Y2J²øm¼}+˜Č“åZu2c¶*"0O4crnb‰KHįqļ\¹ā»{Pę[˜mķsĖ»`/ŌŠvR‡Sįo޶ŸĆ߇k²ŃÆÅZ²£Š2#~ŲłõÆĒ/ŠŸ~#|e¾7~#Õ®­tv9['Ą'éŠi\ģ‚<óL·ŽÄjŖˆI8µma4¼Ęæ7^x­“C”ŗŹ@‚RČyåsȧ,!āY1åÆrk)Jęf~Ÿ©ŚXźŃŁ\ˆēIŸbÉĶ}Ką9šl"nsŠŽn€} kį©¢²ds“‘]^…a"”kͩޣ½4bćcbH‘3$2÷µĆE1t=1A Ų¾ŅĢ‘HpŪHō®?]CØ\XM Čý-v•®¼®`f ćŒō'޽NÖ¼øŽŽį†Ā>÷ZhDP<3É$nc‘IČČ®cTŃ4óØ •Ž3"ō=Å92Źóæ” …9éI  ē5$óėęĀé!,§ƒTm4ø-¼‰‹Ę[;Iū“΋֐$— ~G%ݼVdéŖŚV›Œ×iqż•¤łW£{␋—:Tś“nnŌ”aŽøÅqÓx öŽī7YŠŪc8#'óŖŠÖhšoŲŹÆ”ß{b»F·ū> ŖČ§qҤor½„ÉņŪ7µcFāęᢜ”ŽōŠś‘–Ė-“ķĪ+ §†Qp¬Å[ƒŠ”M˜åWİĢ\–SÅmAs!RŸó Ķ”†wRĪƒ·~9RX̓7bhZē}°ŽFŲQøSę=Ę)“L3“ü4 ‰:…#nx5z[HՊqهjŽSWy#·’V¶‚Z¾{ÕŽēU» j¦Eäy ÜōÆčŗ­„,³$ˆ¬A GA^ ¾|* ÜŠDĖ[ Š/“\É’ėÖM̰ϳZāx}ƒ#‘2’F@lté]O™ņ~¼ś’itĢ]YŸD–ĘāŚ{=BłäĻü³čGÆ­u ā‘ :¶ˆ b ÖPš¤t#ó§hŃū_šāwü.…p=ä±?‰ģb’"ć~ėļŪōÆ[šÆŠžÖči×s†Tm£œ‘[E˜Ī=zˆAqs„Ā͜tō®—A¾š{hSĶ'•ö«‹9&“;­AõD±‘^Łs“'©®_K’āźé„–Ģs’0+s–gJī–²Ī×ķķXڦ« ņÄJī3†"Ŗ,Ģē/5D¶’_œ śŌ -ÜS-ĮD“Ne;ĮėŸo֜™|­ju©m¤ß¤3iņˆ!½js¶Į©gĪōØ™a4ć lØ?JŪ¶Õ>Ė(į(ĘqMŽ»–Œ¼E·ś×u“‰µšłē=ż«U+]čŚe弐ݑ½°U{ēŪį¦-ŒĘ[xͼ™ †ęŽCX_ˆ¼3żhMƒ¬Ž$ łśīēXŽšyCåC`ņ>•‘Ńyl”ø„³ĒåJĄuė ŻHčČwÄN8iz^šķ."…ŽHwīĮŒ©Ī=jmGąč7Z…•ȉÜUŽ?#„ŸMŸN™m/D؊;Œ ÜĆ ye Ę1փ&Œå¹kKƒwb*ŁĒjö=/ĘV’éš¾ą.pC/³öeF7<÷\×.–é§“1²£Uģ¼qn²‰ģ”—·ėV£cD¬r÷Ś“śÓ“ŃĮ‰p¾µ%Ģ(Q&-  ņ; f2ÜśĀ‚ņĪ9%™ÉĄ"»;ȼ—²3ķ㭐خXēqĪ8­8§vfÜxą;SNÌŗ¼ęĀ8.„`ūŠąĒĆżŪZżŗŗ\·kĀ·ƒÓSd;ű˜“§k{…ó’Wvį_&ųŸĒŽŠéö”¼–.•ć=ųķTā>S’ƒĘžy*M¤ņÆÉā dˆGję ‚>V;}ń\óCä!]_Q¾ø¶]YÅģ+Ć60I®āŚŪj,®Å=½ė.DMŠ:Õü¦Ū?“" mϽrĒQø•šMŽ9äuŖJĀ5m.#¾P’0·ńWÓ@ŗ•U£ø„°Ļ'Šc:(“Ņ–ųŲškgĆÖ«q!Y›y=Ŗ%Ę¢uŗŽ½i„łpÜĒŽ¢³5›Ķ3TÓVDkx™{S˄ѤSĄ=īī`°xĆ*½I`’0nĖĀü£ėY¹w.š<ŗęÖyõO6Cū°ł#b½>-"²M…œ&āÅø4£.ʇ i҉ķ×ĢeÜČ­nX[éM3»Ų­Ź@\ō5ŃŲå›"ø6qÜʍ”ŠÜ t©JL²3Ū±€/§q] Ų|·‚5l”dÉŖjqKūƒ$eæŚ8 ŹNęeĢ¢8™2v‘Ųō®P–;9ą22„rqž¤Š uäOoŗŲdtÆ%Õl¦‚`ŪĪÖ$šy”–‡DFZIy4ERį.>c…+ŹćŽ·¬ŚRĘKˆżĄäVÉi”Łč×K ʉVn;V‰ó"-Ē›²Ev:b‚}™Ļhž ’Ų½¼ÖæiˆŒ•¹=ä7źęxT`2³gIƒ¦>z0ūF§>…R¼±zœžkšńē‚7݉­-d¶–ß.Źü—c½Ez©Ÿ=|é«ŲłdEqyū²}«¼š¾ˆŃĶõ¬­Ž |§®;gdYļ—ך%ׁ5ķ7WøŁwņH##;š#ńĶxĀÆÅy”ųšņīŽhlLÆöuaóXŸÄA¤]އĄśē‡"Ō­•åÜ!ŚHÜ) ‚N0ßJ¤Ś4O•hx§Šµ -O_²-¢Üé÷šM°0ΐrßLžµģ~ Ö®.`–ŅīDĀ…@ĒNsŸŹµ^fŠZjz2ßj×Séß蚥›ĀHĖóQĄĪ{ōÆYžĻšż½¬ {"£¾ĄĮ™2Üó/xw^Õ4mpč’ ˆ-¢Q»vćæZĒųEąŪnŗ‰4”·™‰a$·˜1Ōf‚9 „šÖ—2 >ŠÄź?uĄ_BśWŠ\Ę£XD3Åo¶SøuŻķA]ΟW’ ā!–EłA=Mxˆā½Ņ=El$¼‰eÜHč¼õ=N{;Ųī|Gā 'Qš—āM*FūJ1†ęÜ)->ń’8Ɨļ=A§“‘ ”cœćµ{›¬é1ZÉbā$™“nē9?ēփEٚ>“½’ćP³²»ø{[‡# ĪÕ=Gó­ü±šęŸu§ö٤>`‰Ū1Óoj.]ŅÖt+żGK¾’9„ˆāćɓŒ —™R×Qu³Ž -ŌÉ*NĪO<ä÷ŖMąkū•oÅqq˜¤%ęn½ūŠNV-Hõż O}„Cf-äKčtx9%sĒ’ÖæHžųjń<5 Śäik0ä,˜VČä~U%~Ō^³±ńī«{į†Ż+D²£VēŌtÆ‚)ķ,i­Ģ끜/*}jŃwV: Ę0^iŅC¦źŚŹƒņļĒq^Żš—JÓ5ėēŽ{˜R_œm“`ē$żkDAĄ·ĆėŻ+Å7VqŽĮö%”²E‚œīōē„q?¼#wˆt‹ōšÓZŠ"ŗIąr}ˆ«H¹~ų»ĮŚ<ŗ}ʋ‰`ź¶ŲŚ ‘‚¤÷®Žūā]¬Z•Ö›„čwJ¤łŹ¤CÜz֍÷]’i|CųĒ¢[ų‡ĆóKT¶ A‡Žø;@ļ_x"Ē[š>¹į½ZCū/[³¹ßlŒ`ą‡ĻzƞĪČŅéh~›Kāoā{śÆįŽ•ą½TXźI-ö‘24aćÖ2G^{V±ģsnŹž0“šõ”Õ×A½F„ęS#ķ$œ“_%Ćye}«Ķ3XŚy Ź}įČÉÅR:!Ōć|Gš×Y²×ÅŻ­±OŻaĮ9QĻ^•źŗ'¾Ń„øŹaŽįĻņ źŒO„<ą_ųLl.lžÕiDsŗ\ģ-žÖ¹ˆ¼BŃi÷śCĮ*Y\)‘Ōķ(sÕh%X_üzń‡®¾“ćÉn./­TĮkq d‘øuµ÷/Ą_…¾ų»”xcāUž•e„5­Ē’›’½É$óķYŹ=KO±śU7ģįKķLŌō¹ģ/sQdLy¤ŽĄž\יź^ń_ĀŪ‰ž_Ż&›o5łŲØIōĀōOŒž ń^æy§łęL¹Q}³Y'Š_įÕžŸ %„,ń€AU®~µŗ1’ŌųcE“›ÅZn±įöĖŲĖ2S”QŠź=«ģļ_ōm7C²ŌµĶZŹėVff.īWo@Gš“@ŸcѾ$ų—Ćw coŖ½­ÉA"øÜŖInļÖæ&?h_‡·ĆßÜź·3Å{į=IÕģ¤'±ģzŠMžõ=2 h”GĮĻ5Ėż‘"@ø%3Œū֐—A¤{ēĄ‰Vžń…¾©ŽÜI„j0˜„DšŅĒ#æOŹæOmīP[[\Ę7¤ˆxćUIhKvŌč’āS ‘0ū‘”‚;ƒ_˜¾Åąæjz͊Ē.‡rŽzŗ¾K½»'Ö²ĢšÖ&B 2+ä2ŸLWŽ>ÕWā×Ās„ޘWÄkä˜ŃCe6õĻįOdtĘgģĻüGöŗ¼šg‹$ų*h<”ėvˤ\łÖJN&„6FŠłtÆĶų(Ēģ÷ańWĮ-ćūÕn®ae™L_źļyuĒ©9¬£2ęžĪ{ KTŅnmĶ…å”ßg–6ö“qMĢŹ`s]Ō¤rÕ#ke( ;uĪ)žK’ņ/®Ć Ü0ȐHžļ»R¶|±µ=¾“ #£]År0?J°Œ<Åw˜žżč-ŻNŃØE$qœö¢Ö4r²Hр§<󺃶’čtžńϊžų³Āæ¾\ŻYųć@Ō Ōģäå&7 Aõącž‡æ±æķ) žŌžžÖšŹŪċe—ā{8ČĄ8 é ź6·ByĮ_Z™­ÓõIדԽ[»£D–䟼1œĪŗ ļ^ß"üŖ~lzWŸU ĘVæ xĘ~×|9¬G֍ŖŪ=Ģgr²‘‘žŒ3‘īšVOŲŪWųAāk’„„oy _›m^x·f[7$Įqƒ‚A]¹8ļ\³Üǘ'MZĄœ]AِpErWĶö ćXĖŻ„f\ģ_ ¾(k¾ŸKŌ¬‚łI&ɂ>>SÅ~Źü)ų³ ų¢ŹŻå½¶³Õ){pĮzā¹å‡Bõ]†¹G“3|Ć;5ļ>ńVŸp“iˆaøČh9Żķž}*!OR'‡Ļ’“„„÷~³"¦ūV9sĮ‚1ś×ÉS4īČ©“āčRŃQ/obįĘģžµJKĄģSÆJō śs\4jWėLY !Šš²yŁ­,^Zæ¹"–ŹźUe†eīozšŚ•ŚI:;Fćī…=éšeĶüö³‹ÉvK—¾(54ōĶCÉ‰ÅŚ-Éö›¬ź±\4c_.Eį¶ńšŽÕu9"gvg‡ū¹éVēp¶{c ·?^(&Ó..dóXöĒ ōFŌmd‚(ÉXäP"³Įa©N‘^F% 1øŽk XŅmmeo/nĮŠzSм1Jß1,źÜqÖ“¬¦eˆ;ūRח°¶$Žk”¼B\3Ļå@ ¼mŌ''ҽcJŠo,±IŽžō›¬é°3µĮmþMqÓŚ“D˜Ąe-ÓŅ€&U .\ZŠoqøą*·6š m,o“‚qX°_“G7|b€;«xķX*•ķĶeßi©"r ”‘”6źŽX ݱĶW’XŃĘę;ūꆡšÜA,\Yėæī5?‡ŽFÜlŚ=·‚`=@5ūoš{ąæ„>h¶šĆ­ĖDŃ"ĮG1©œś–|gž:‰JĒDv=†āx1ÅIsÕøĪćė]F‹ Ż],w7åÅ×g­rJWŻĮo  )*/®1\¾±ŖCē„…G^2EH„޶"Ž’Č<ķ„qڦøv~śO& ņsŒŠTcs–Ō|E¦iö¦eø‹œüÅø5ņOşŚ[ĮŽÓīeÖuČąu$£3‘^ÕQō6? ?ių(„¦‘u{a¤ŽMØĻq!Xm­Īē źĶŚæ>(|oń÷ÅoßVŌo4­9ä- 0ČCż’JōØPÓRe+¾q*Ž’‰÷54sȅƒÉ¹‡Ų“Ųęaé™&`‡ęčx©Ä² sŠyT-ĒŅ8onõ§˜Æ»Ė3uäš(lŹĘÅ®–ń³“ްĮ€2ǽ}+šKöeų·ńöšh’ ü)ŖźŅŗĆ.„%»,vƒ8,?½jĀS.?¦_ŲÓž š“įUŻ·Š~,ÜÆŽüQäÅęC*†e<ŠWķ®ƒį-3Ć:L:Nƒeg¢čé’.öčqŪ„pUØuF6: MĘož%ņœrp+ ¶·ū>vüJęBųP}i¤ą¤c'aĖóuž™ Ī1¹ ³¤C.ĮG½qŗÆ‹ķ,Ļ—s·$ž“téŸ4|Qż¢|š’O½ŌuŸŚÉ4@“Iöė_‘’n?üRI“/ ĘŽš²HFõOžągÆ­Tcs­+h|rŽ×2¼²fi™‹3æ%‰ėW×Nv Ų!¾µŖ†hA(Ł Ż+bŻ&”¤6ŖīäćYŹWNūHšUōЬ²”Žy+²’„"K‹7µŽu#p¬fś]…~\Ųx²STø7vĢäʎ˜ņ³é_kų{ĆVr[ĆcŽ‹™É®‡©Ś ;xü–ŒcŽ•™$O$ģ°‚éż(‹±„ŁŅXé(lŒ%ē=čm5㠘Ôō+Nda25`ßšü‡½s­”īeDA0ōÕ˜š„³]Ƴ–Øć5Ų¬mĮ‰÷Ä{cš®†mÓ]Ū¹o1‘3ŽŖÉ©ø`XœōŹ6.­ÄWŃ`3œVÅ­—žč‘ČA"ėšS鼌“+FÜć5Ė4ŽSĢ9=»ŠŻ–”mDĢ;㊊öįÉR]Ičhv3b¾¶.ŹĄĆŽÄqX𬑩 ­×žj £±ņGÅ ŗŗĀj:Nž·–;ˆ}²|Ų=ńŠŽųaą›ķ1绹m«!ŽTØMœŗ\ö֎H™PWŌVF»«ßivž}Œbi@Ē>ōtń-ϊ4˜f{4“™IY#ƒ×5܆٬ۛŠā›W1žńU[ßVņō© ć€åõ[™Uܾ¼ęBā×VŽQ}uӀ¹łXP¦¾¤ś„1ŪÜIļÓ5vŸc<£½T†ķĄYē[¶ZĻ’ģŽŠަƒ —%¾ŽĀ`»“„[³ķ0ĘBL<œp(Ä]ųģēK;¹3óäWGi<7ˆm:șüE_ ģnZ¾Ąžpr:×B.‹[4E~\õÅKVŹźś{Ż©ˆ‚"a‚Gó¬AÓōYäK‹døŽŁĘvż(LŻ=N†kk˜‘YŹ £=‡„sZ„¢ĀĒó- “2/. @UŌ„?‘®bŌ5—˜m‰En  %{ˆ@˜ĻQY Š+ vRǵĶĖiJ…!7&{ÕÕÅ$pĆęĄ8Ķ3®u(ĮifQ“Œ•‰…ŗcugs¹ ƒÅ‡ķ1“ØČźx8ē5µ›’ē‚3Ņ€-/śó• ĒPZ|S%ÜĄ®słTĖ`}i¹W?±ķY¶÷Imu ;:qXšA›‹nd‘J¦Õ«‹)@éZAZžŃ– %·[…™r½®\†)wݤ~[ØäŽõ )ā}KN¼Cr÷Q¾ž•ĄŚŁOxį!mŽOh)¾‡§xnūģ˜īćx$ŒOū×®Åż—¬Į%Üiv£pł¹4-“&[h ‘&>ktqV,ž8YāV8”ķA’e©¤;7lWxėD¶ŽTŌ4ųĢ-“łŠ9śŠitæā¦Ņ¬¢k„R iĘG©¬^öfē‚XźsŪ&PšŹ#Ś@9<šApZę«£ŪjQMsn#Õ]¢eūÄ~5tāö2©éŚjĘ.ōŪèڶ7pÉģ}ėĒÖŚßsŹ9=+¶Ę<š-†ž]—;Ä@$¢½ŪĮq\ŁĻnkv…Jŗ4ā})į’Ÿ^%Ó“§I Wnčr=+ģ­?RµÖ“UŌ-o•£ ‡?{=«ĢÖPŠąXm™ąb®±ėĶGq§]ŲAŁn6¢šsŸ„vCsŽjĒ=7M|~ԳĐIąÓµ}"YÜF%ƒó:Vö0*[ŚŻX;y“GZųĖšæÄžxŽh.n¼0ĢŅ4Ńr!ćų€ēón³ÆEsl’é×1;ćŠį«Hé§3:Ń?µb jFĆ÷½mŲAö š«™ Ą$Ņ±;bī{_Į/‹:·ĀŁO%ÜĻįķFAѩǒÄcņ8ÆŲ;ōé ÓüQ§_%ŌSʧ®J1Į÷­Ā[Vü:“K×!‚ÖöšéģP ”®AnŁö÷®öŅäéz‚YģYåFHø!ÅipŌ‰č°Ė-äd¼2'©­;h-ķé¢]½yŅ•ĪY.‡ā-wCÓŠÜÉp…ž\ńĮś–« ›jv±]*!yēĒ «öaw65ż5õ ¾[DĆ+ƒŅŸc[Ū&bqŲ÷©”lkŹķcCm­¤Btv s»=ZŅ¢¼½’Y–H‡ ČśT™J'G¼YY®ćŽG«,D īQŽ“ f‰–3ϵt7šV™"DĘ8¤ztük hå5 6ŽfŁA=8éYĀ]FĆl/hĻ qŠ Ņ8’<7e£Š&Įgƚ5=/ʾ•ÖV[8ģkœŚĻ½U„nąUĘ?3^Ėį­7ż4{eG(“ž‡”iZnŪ„YöB p?wė]&”o'—ä,”ü»Ŗć™ó_‰ü9§\iommīī„@B{ē½|«­ų~ėM3/˜žB’P“ŚÆ••ĪI$ŗ}įÜ:Yóź÷±œ?ašĪJĄ¤Ė6ś“ŅķY䥶S[ŪtūČ~ā‰3ž¼š’”ū”牣Ś!kJĄŌ Ą€Ó”÷÷ †{wƝrā;w¶¼ž)TgW°Gu ļßŲŠg(v5­ [i`‡¦zUݱ[˶U,œc (–b¹*’ õ­‹¹ ŗµ/åĒr½æ Ž;£Ä|S¦¶”»,ɰü„N8ÆńƇnŸG»‰­…āŸ”ƽ6Ź>b6—V·+)Ü:īØõ®óK‚igø€ĀŲۚĄŅ,ŲvKmŁ¢śt÷¤“U™āV°¹`ąv=~“‹±-Ö«s-Ä7sæŁŪ`}ÓõŖræ”łŒŠ=óš.L­c¦Ń”ĢOå0CׯS]M­äŠČ!’Iœ†ķō„sbūU¼XwF䍠ŸOjĀŃ'Õģå3C7³†ē4ˌ¬tZ­åĪ¢"ó3cåµE‡uKˆAć$ż(53žĶģī6J„Ÿ>iČ©%ŅĆ(?Oœc”÷3”ŗ"Ķę‚«˜€Œö«Ču.w1&ēXMrK Øį,’@y$+Bū1Į$źĘdź0~ķAj7<āĆ$†ĀXÄw v†Ē_Ęŗ=+|Ó[É+ŗĀ[ G„nÄąvŅG LĘCćߨŖ1-¬²Č»ŌćéA-Ė)Ž3ćn2FqUā¾Žźé­Vh̊£ŒąŪśŠ#_ģwVˆ³“©'åÅqZĆźˆbES×#‘Ap}Ī6ęŁķĖ–'9=źÅ™Ÿs‘ž€ ‰¾†¦œ1 óįu :üøaʟ„V+'Ģ |¹éY©qcDĪ tĶf‹›S#}  ĮĮ ėQPŲɚ(ꔄ…%^~ą«¶‘*…Yc*0J˜nLž‡o¢Å1ULsŽ•ÕM„\ʉ-œĘ4$wĪk®™ĖQ”„äźIÜß+!ĻōIØķU[f§ŽG\WQ„“g+y>”=Ā~ļɇwżõWÆ|8×At.>ln+Ž” Ł™\IbļĒęD1Ęk+W¼¶æ…!{x€\ąž¦‚”2ņįÓdhŽję¦åYoļFHĪ )l\QʄMÄvW7P—"]ƒ…_Zō?ķø·Œ¤JŒf¹å±Ńa#ÖÖĢ$øĖ1łÕėMm5TŁt8ĒN++Ų,\“ÓąIćŲžkFīĮ­•Zß۱ڵNäɟοŒüU’‡ÅU.æŠ_Ļ |’Wtd›žŻj׋¾4Åvń³iÖŗ…ŠcūHr7œq‘ž£Ÿ{pćS¦™õO«jw#ģĆb€ēgPN½Ć]{HtK( ‘%¾YW°ō ’žk^U±ÓģÕ“:ŻVĆU×D—'Śāķd æ«žÖæįŠ®-d±>Fāå% ž¼zć“IFĀåŅǃjZ}æ‰5ē×ō«­Æ–q"ÉČēų•~Œü.»ń,ŚE‹ŽĆm®čE|»3ēń÷H5V6å÷OŸ>2ü8ӓ߈:V£a`]{ˆ”sB¤šõö­ą›ź`Ōō¹ ˜BģĮq†c„°Iécæ_†W–ö{sE¬S<×ńé\Œ.¼ć¹t=7L¼‡M×,–åVPb8¼V|ęREm Dń_‚yļoƒéw 'ĪuŻĻӃ]dŗ•„Ō ŖŪȱŻą•J~ŠĻāµ‹Z某iš”pĮzPģž6×®+‰ń4öŠOe«K;ļs†R˜ĖsÓņ­ąfi:“Ōµ;{'F1,8 CłW½x·ĀUŸƒ#jš…ģÄe™ųVĘx_ėS-Œ”l|ćąōtŌ&°6йžä×šóÆčŠZ]b“AČrŪwmj¬R=ĄzhÖ¬īķĒ,Ń©U^½« /ų®Ėķ·×öW© 2°IYVŒōäVŠH„š’‹oš„¾†=G@Ņ£½Ó%t±Ā„™±ŪŸ„;Ŗm—Ä[įćėiĀ]:8LŖyl¤w{ę¼ēƖtwrŁŻ:µäHsÆōüØ\½šż¤0Xź ņŪČ˼¢üŃgŠWcš{Pš²źŚÆ‡/n¤¼‰—0ł€œdńŒōž•J%(2żāK”©é¶ŖQ#$¤˜Ś\ąž䚆µā‹}F×PŌ®.õø`“܂vŒįi5уŗ:ŻVßGńCØY”…<Ģlڰ~\µ¤¦ķRÓE‘eū<ēc:ü+ŸČp}ŖĄŗg4{}Bū}É_Ż'Łxkö¢ŌąŅæ²dŅ# æ—ž’Ÿ<'¦ēŽ+nSDyg‰¼]„k÷té“eœ6N=+Ēlõ»)'’Ē›­Ģd`ägüźā»‰…­tłnī£U‰KćƒÉģ+CƓź:Eõ’ömÓĶo"p÷õō¢żĄ’Ū[1—µžöki±f•Ģzć'­qųžę+Ūį;\%Š£v0Ē®Eh¬ųš_čVŃų£ĀBök1 ź­¹Q?¼įĶ}_šwÅ÷Ž/°°§–Ōn-ÉłŻlu•&Фwæ |wā Äś„¬©i$Ję-€|ądä¼ĻćĮ?ÜAØjśT÷V±ŻĢe‘'ÉX\œœsŠšĖ„ÄŁšg]Ö|?ØĢĶpn­Õ‚@ .ź+Ž5ĶN×ÄņIkq“Ēd˜<.{Æė@łOõ…ŗTž"ńƒęyn#•Š`~fĻLī+øšļ‰> kpK ķå’‡’1—Ą>A#N#śÕ)sŖŅ|sćŌ×4YŒśļ‡gøIc‰×˜Ł$1ķƒ_gxkķŗOƒŽ§”µ¦”ZńŸSĒėX2¹t³1ŒÓÄ6ƒĢ¶ŲBI7\_œ6šæŠ¼?sį “Ōt½n714-[‚@;±Žj“Z9Ē€ü3qāØ5üA¼šģI!ˆƒĒ_Ļ$žµä–ßKIōē·c.J0€¹µ±jf„t=SÚڶŸČļ dęń_\žĖt7Ćž!Šļ“}WJŗcņ¹;BĢNq·øĶQÆ1õē…¾5x—Wµ¼Š×RÖ‡Ųæu Ž0Gq·Œcš®Ü|`ń¶§=ŗź×©{m >O–ėø:ōĆ ŻĻ„¾0ų/DoéŽ)šŹ}–õKIuQćēÉ=ĻZĄ¼ÕuéPZźÄĘBģŲy zśŠ7"¾ąūhōżFöŚų%Ū6`ēķķ^K¬ųÆÄŽŠöŹÖęV³w- vēč¾”•÷9_ėWśÖ‹¤Ļo}yurŖIF…2gŽqĒē^ćmą]'ć§ĀgŅ5ĶhZĢ ŒH&Ż—ŸēAœ•“¼]š®ėĀcūP¹[©ömY‚ķćøóĪ”¦Kc+Eø»–+Œp)ˆ„fL7¶wŖ«ēŪɽ3ź+õ ą/Žį5š¤sLF„fJĶ č9©­É’Š÷«K…‡‘ˆ+·ojóƒĘžŌ¬”··“T‡÷¶Ā^AĆū‰w& ©łD,/,&žĘ퀻I@1ąWÆ|ų„>xĀŚī];ķvWd[]9“ •ˆśžµ2‘ÓN'Ņ?õ][ąWÅ_üiš÷šnµ„Ž[źÖ÷§h‘ChĻbČ÷Æīoą×Ęo ~Ö?³ÆĆæ~WI®ģāP±¾ BૌõłVU#učwS;Oų‹Tšē‹,īķ%(AĮ<ōžuśtńź¶6ž ±u3hĄÕĮ8ßsF‰’j/Ł/įĻķAąü.ńm¤––ž"±d·øŒį­oT’!ģŁéźp;׳䞊?¼Yšcā§Äo„.æŠü9«Écs)Œ«ÜĘ SÕY@9«¦ģķÜę©œ$·•T&Õ\1óŖ†-ŒƒžÕŪĻ© N@rF)#Pe‡Ö™‘bUcµśńüŖŗķÜ!yėA²,©wĄl†Z±ęgt`pjłĘ9¾m®‡T‹;„P»žIč©ō.2±jK;-^“¼€˜Ūåź¼õż¬Į»¶ā|[ųO«~Ė|CkyńKĮ@"WßjY8 żķ‡ä8’cܕm× icśf½6“[ĘńccŒtēz½)5¤Ä<÷Myµ¢k'sćĻŽšÕē†V›O’éR“°ÜFqöˆJQ’Ēü+įŁtķ#Ä^«ą=^Ÿ@ÖÓl3ÜmgĮŚWÓ'’ÕĻ$V¤ŲžQoŁćSųEńKęѝ§Ė<¢ķ¶}ł$;ą×Ąw)Ś“ƒåe÷ūÕßGc ØĮą¼rn“i꽇½,ұÜWžżė¹R—B‡q]­ŽsMT•AS ažĆ„;ĢĶŃHÜ\Ņ£1ŒŽ~qNQ±ØłŲģŲFööń±U?2C_’šP_ŚÅĻ„š‡Š/¼5gÆ-µ¤ŗgˆ#Q‰¤³q„“űˆ<ś÷Ž*„ÅjŸæÄo‡7’>%x³įʤZ¦’ÕĄ!^ݲPōżk͵ )n$wwĘA9ĒJŹRŅęńJäž’/’ŅuŻ0#޵õD0=žkq£jSYkVć÷mH÷Øā³›±Š{Ā/ŚßÄ^Õģ¼7āk5)]`{’2Źż0sĻ5öf½ūPhžžŪUÓOŲ Ę%‰„?xŽ“FZŽpčv>"ųߢ|[šm–„¦-qū@o¼Ž:ńŲWĆ©`8$īdŽMvÓ<śŃ"{—˜åmZURŹ0ĢXuć­vĆsĶØ‹Q°&śŌ±ĀZhQ÷'’zV§9¬²ˆóę€PqƒŚ­Įy@<ōÅD;į Ū•|ÆcSµÄ>YEÜĆŲPnF“²Fpqœ`U«;k+‡o“‚ ē#µh6”’ØéļYRŻy²—n{PœŠØ„?­_“|Õ–č¾ž†€:m#_±ŠģÄöėx:Ÿ»łRj°Ēw¹”Ź+zö gy¦łm¹¬ĆtŃ«ĀœśŠVIüĢ©R=©e©ē$śt  ¬īŃĖßéøWDu/65ņch[©ļłP)JĆTø0ˆ%9ĮĻÖ³ŒūņČ(±GˆVMĀ\įG©­ČģåH†@^9ķADn"fE”„ Ž{Ölś9‰SPRd‚}j% ;?­œŃ…wÜOJ·©ŪķVÜ„ĘxÅ(Ėø•ÜŖ“¤*ŽĒżš³qb®!9`ź}i\ žĒ8¶śŒõØnõÜH±6ØėPT¦4ś¬n®‹sŸJŹŗ»“hesČģ+HG©­ŹI¹\– ­ā SÓø­ ÷v4“ė6ø”6\ćė]UŌÖq¬÷2, +÷ģ=č6H÷߃²wŏ:Ā/†“ōŸE¶iu+˜Īͽš§ōÆŪߣ’öų[švĀĻSÓģ·üdvÉqurÄrg?.sžIŲŻ#īŪ¢'1M~±ż„@P€€t­Ė+ķJ1åF"ˆc Ęk•Źąv:f‹ah»Ä*óē–aČ5jīī+dv„T‰6»ĢN…¼‘^uØjäĪā%9n „žoÆx—L҃Ü]N@yĒo­|õćĻLvķycmld(ąv÷„$~XžŅŸ·ą­"h-õX,¢h˜£ļɓąĀæ¾0žÖ~%ų©$Ńiz–„„Yɖ]ŽyĘxĘ+Š”H*I#äÉļ$yf’@ņ;6]Ų城ž×¬ńUVϵzVŠóźUčSĖ0;@ݚ‰y`3ž§ėLē¹~Ś=³&Ļ8®‡ģ®B•wõ¤Ż€ÖƒFžh^q`rÜtµÜxĮŽ%ńę³m x+ĀŚæ‰u`‡Č…Š)'’c)æ±÷ü[_¾Ō“üy$·WūL:y]ŠŸ.B2ēęükś6ų#š[Įæ ü7§hšž¢Å āWŠ „ĶqÕØtFÆjŚMŗī»²P—@ä°ž*m»™.ī9Å)u5:[fcÖ­)GpŹĒpź+?he2Ąź)Jć®jԈ°…‚ƒĪsæ‰ķtĶĆ!Ų{Ó4§LšÆ|gšē…ķ.5 [³°U›Ė2 ĶŽŲķ_•æ’n«ZYōƆšG%‹)C8~A«<;„ŹG÷Nsš7¤Õ£¼Üc·õ¬KµA½ćbÉļAœĪ~8µ $+g!u' f½ OžŃ³Š¢p9ŻŠŠf^Ōļe’ óŒ“ĘąW3p±±] ž=(nĪ9$R›O„mC¦ČŹw Ī;P4Œ+ŲāŽI?v Ž1\Ž”cyvÆöUŽGšęƒc.Ž-BżÆ)¾ėV3̱HT|¬Ż@⁚zao1QĖĶ9ķ] ʍä[¤„4~”ÕŠ¬ ÓņB<²N@ę¶Æ§H¢ ńŽ(+x÷B_ ĘzūU+ø£v h掁's“»‰nb#yˆƒ×„p÷6Š\ĢmŻš­•#¾(« Ł’¶ ęU8÷Ŗ×ŚŌ±Ä,åaøćÆZ“(IctŪn”žT†ŚO5£ż§ņŠ£g8r†ƒ#„Ó'·¹†Hċ¹~ļ=k[„0;Xb”dä äS5„O*>×ļļŽ®$X †#Šó×ģ¾ ³®å.Ō呩ó2Īī#'Ÿå°ēł×E‘Ē‹j³˜R0h„FŠįcŌõ¬mBŚćN÷¤"ŗź'KpÓFī­śU=®¤qµYĻJc_Ž0”ÕG~ÕĪFŅO#,HN=ØJņōX‘öR>›±Q=„„ĀvČyÜ méŃˆĘČŲõÅl鶓—•cˆO ¾ąŠ©ĒŖi÷·–7ZsĻbɕa÷ĻLU ŁĻk;½¼I-©'1H8\¬ ‰EµŒ®-ŌD„’BōÉ®_[ńŃ¢’õācņÅjGb¦ć Mj8®­ć•"ÉuĮ挻µ*ßsŻJ"B>VQœŸz-} åģcOÆY}øAēÄČ~éŗķP¼sƻԀGŠNŠŠhڊāßxˆ¦É{qÖ¹ķsPšĶ™¼­ńūsL³ŸÓ'žŲ˜FŅż•˜żā:Vö„„ZŚŁjÕ4.©&#|3ŲŗßųnĘ;øÅŁ“ČģŹ:īī“M>!䲇ˆņ ujÄøŃ-DˆŠ#+©Ā‘Õ~” eœL`X¤ŽīßĻ5ki2É|ŠbŹŚlÓ]K6c`7A<āŖų¦Ņ·IB“8=Øó¹¦[Eu$9 ĞOJó{ż<¬ŪųbOŽõ¬'ŌŽ;7Œ¼=w{bgX¼Ę^§¦į_,k:4Å©iŗŒr®TĘIōJĆĢč¹š'“Sį-~ėP†6·ŠBĘļÖ¹7LŠĆ{$¶ź…ˆŪßßéZ:„(÷6ü-¦Żnµf¾(89^ƒŠõÆ„4Õ¶FƒV·‚($'-@+Ž„CXDōĖŻ"ŪV…nÖ?,€6õS^·šćYš×K“FŌaŽŚŚ6ņįe8]½Ŗi̹#¢ŸFæ¶Õ#˜HMc¹&Cšī­4”æÓīg}J4ˆżés^­9õ8Ŗ#%fAŽdY8Ę: °³Å$$Xaƒsšß™Ēul$yLgĖņ«ŽøĖø®¼ā»›g~qš%¾…-NóW“DŌt>w±^ )'žµł×«ų2ūūkU“·)¦I‡Ė†e!g±ō®YÄé„-N—I—K³ō­VČŚjŁ£ē=øķ‚kbĘÖ+Ē*Yƒƒ‘‘ÕĮQšŲÆŖ[Ap …¤Įé·Ž¾ßżž>/_\hÖ> Ō”kk»Hc•ŸwŚW³ėYĒq³ōóĄ·ņŪ}–YZm˜xĶ{ę“%ēŚķoQ šuĻ­uÓ8ź@i·6×VŹ „#¦z­«Č±[:īlŽ» ĪCć?‰:Ž­żÆ%¤>Ø,¶äL‘–_ŅøOü$Õ5ŻF=FU¹cę –TZķÅoĶ„‹S±ö>ƒ§\Gi„ćČīø]ärk³¶½·gūD¾hł†8¬¤ÖĢR™JM6Ń`h6«61ĶbYéwV“‡ŠWT>õ‘Œ§Ń„¦–Bö«ß¼Ž<]qÓҚFf`ŗ…d‘rTō4æŚv°N’gn3ļ[67RČćĻķżksP{7¶ ģB€yŖdō7<ŶīšHÉ.ČVÆŅ­-u6ø‚ęį ąœnlg•‰“v7“]"-EC5 㜠÷KO²Äy榒fr‘r6’Y<ŌThÉ轫J[„”ßV“̜ŽFńīnŒ°’ž"¾ińÄw0ŻOa}®3µć­hR<ń#“@еŽī+–ÕTA#2n“Ž•Œž£3£YāˆŹLō­½7TņRI%BŁĻŻ©bÖśK–I "\‡šv½œ±Ü­¶×€ÅXš–„"ŽCłTžU½kčż)Ģģ$d!@Ēւe+‹EŒ08«¶öšŹ#™K 8Ōnf™©ŖZŚ£Ź#ĻŹĆāż>bc‚ś$Ÿ%H&·QģiŠ—Šß9,sŒ‘Ö°õ‰`°·•ā)ø«nV\†sśTObšõ=2Čź†{ktņ– k\éVÖ¢X6Ū€k2ć+>„l‘ÄŹKĘ8EqŃOžĄ1Ļ= ėX¶irŪj–÷Āđ)Ϭļ°O4‚x•DJ2ŲŒYÖé”`åŹäⓤ:uģŃGöß&]ų› 5nā‚_&Y<Ä^šŠ[ČĪ֊EŚŻ=ź”˜Ņ64ČŃå71TSĮ#©ōÆaÓ刧›(_™G±¹ä_¬õ ½ćŅ/~Į« “n<×Č~ ńĒÄK=R÷MńµˆDW ѐ/®@äRoø¹O„,üC¬ŽYĘ­sę[ Ź'eĻņ¬…ƒķņĢ„ L6ć9>µĻ9#g-¼Ņ6m$Ć­f_‰ŽŲĻ Ąø3‡¹šF—5ŅźˆÅ%īĮė]EŒÆl‹ €ÉŠqŲS45­.Ņy¼Œ˜)#=żŖŹŁ»\‰Ü֋˜ĖrÕü2ٽ¤¾\īŽv±K¹£a*'Ķō«ē$é—Vø’ŠBĮ‡Šēü’56f zŽMh=}¼ŠévŠųÆc$Q¶ŪrѰ5Œ·4S*źŹņ ą8z·÷Ŗ²2©‘ƒ7§­g)XŠŽ°ø‡É1ĻO9Ē”¬½CN±Ÿ2KĖgolÖnEĮ™piSÄZę'9Ś¢·“Ū.\ ‡ņ¢Īv·­ “„s·¶Ņ,,–)’S%É7'ž•ŲĮz‹dźmÓqž/JéŠ9&ĪzņęĻs}¬Éč85—>pä¹Y”ĮS®k¤ˆ1é–öĖ…Cßę?v¼ī_n»{V ‘ ż1A”Ļk“µŗ‰b&X›ĻJē#¼ g\*Ÿ”ŅnĄg_O–i]@~žĄ 礓Īs*„ Ļl’œqÜÕßxŸÅZl0ŁĀ÷¶6®| ĮHĒĪqje^“­ėŚ”©{qtó[@Ę#~ń=kź_|\¹ŅYŚ\¼…”1a” Œw ĪMl KT“M.ņĪćN‰$wi•ź1ҼmÖīēT“Ųīż^}ūPsójaų·N“Uņo€/,Ŗ+cĄÖ61D³É<°ja†pƒ”Ļ_Ā®23:ÆkS[ÄśØø’įT*¾@ĻÆ)Š/ļuūęŽybŽŁNBēļ“ėRĢå'±ė/¦Ē§ŲɃn遰šI>µ™¤>§ūč­n\ć,~éõØQ¶ÅFż·Vń9ÓR %Ō~ŽŖ¹+ļēė^=«|F¼Õ|BĖ%“¶³³ķiv+™¹­#šĘżGų“JÖįšŹśÖųIńn~æ)Ī1õ¬½Fń²Üß+ł°®Š¤g(ßÖµ²Ewˆ„–²¹šõā įˆØ|q©^«µŖyÓ`23ƒčk&Ģ߈MØź‚ÖGµ[-f9ƒĻĀŽ=‡½XÓōĻķ›_ōčāvXĘą£ńH—#µš†£y„Z^ÄlęūØ·+"ü¬§Ųż+ŗšŒ§Óu9nü0D70)ŲJdĒOCAEo‚ž!¾ńÄ÷›Ę“Ręō$[ U¹“œ‡:s_£¾&šG‡üį}{OŠu›-d?̹Ü}ž5vо[Ÿ5Żų Zš­īŸØčķš_.g§?„yæØųžŁį—O†Y.UĀ…# »ŌūRU 9:žW«Ē{Š?¶uŝ/§Éćj„}WšOĀŗwŒÄńėzxæÓ• Īhu dō=»Å? | šßCԚŽkY¢!Vßs‡$u wĘ+åeųĒ„hÓÉil·P[ł„6ˆĪŽj9™mžćŠæ ¤še„šu‰²×P1XxŸ=~oóÖøÉ4ńu„ŚųOš)ćxĖyqąäzżzÓ».19ßųŠāöł®4Ł&“É™Vx$81 Üä~uķž&|9°Öģ,Ķ–‰,ŃÆĪ€®ęn'čMhāÅ*mčz®Ÿń^ĻNšcĀ:śdÆCŽBų[•#€Ćæµ~büCń–µgāūÖ·³‚I“ƒæ,}ŗSQ± ŸsŠ|ńEŌŹ^ŁŚ< ?yĄnAĘE{·ķ’ ¼s‹©ų>ņĪśåćŽK€ŠF@Ęߏ˜ł_Cēmņ÷Oø·h‹[¼gs#/l’õ«ŚaŅtĻ Dź7:•øĄ¤‚ćѰzRaĪy?Ä-X‡_†*hµ ?6ē!—Ž”JóŸģżÆ“ÆĖ Źø#*zŠhŅ3Šō­* łé1ß0ūÄwÆh“ńR$¹·C?“č>ėR–ĘŃ"ńgŒ–ĪÓM…“[²_ĻY1ä{õŖöesžuń·Pøųyń8Ų¼²^h·Ōf=ż’˜ēSźŚuŹĆŪE“ņs¾”œtøīģ_Ņ.'žI“’8¼ŲżŪź=ėɼscØÉ¦ė3^X™E¹gu;ƒPW5 ÓN©y¢GEÄöčĒå“+Ó9ü+é€:”šö™qtÖĘGŁp±õVéó~T)õńFšf±įe×,ģģļ-¢fŽéŽFkņóĘ°ŪŻI4֍ ”'c ‘ڀĻ-»ÓM­¢Žn'ųM{Æģūć»/ x‚ŚĘ[‰`³™ƒ8wł[œ*Ö”~G鲘.dƒkBß4læĘ;Vāž8™ —=éN{óÓö‹š\^ńV—ØévÉö õ‘ö!8Ē$ŸČ×ĪPi]£¹m…øŪœ3XTä}ĖšļV¶ų±š³Vš~§u5Ę»aÅjņ w)Ų\ ~•śē’ ż“ąųCćmoö&ų«<ŃhśŻĢ÷z ĶÓd4ĒćĻoŗ£Ž“ģtB]ż!xžĪ}/[ŗŽ7ł¢“!”pĆØ#ł×Ö³ĻF¹,š©6ļ22{1ƒFūž×®h76—Ö×Q ±æ÷H9üĘ’ĮÄ?±…Œś/…’nŸ‡śk3Įz'‹ķķā80’|«¦`8ŚĒĖbzå@÷Ę„;ņ¾Ļžźc8ō? {NK[ž`xŻwĄŃ±+"‘žzįä—y<ėņņ1ł×lV‡V-ö;, ėŠr –eݜŒtÅ3Žķn>EŽĮr}½ź«ę5 ĻN{PtĘVѓ°u‰H7Ni±“¹6’8ėA”qPŖ’ŪiŪ¶“»ÓژŸ,/†’j½ĻöWż¢ü_ū!~Ѿż£| 7K¢Ü„Ötó!V汔…“±’> ;Xź†ēśuüų—įoŽæ üń3ĮZ½’‡5Ż:FÜ”fō TąŸ^¹«µ¼ÓŁ”x²]Šö® ń6<»āƒm2ŅģŅĆÄÄHš) ":‘†°yĆ)é_©¾Ō-vżīĖ+Ą’…ˆéž}+’¬M¹®wŁäJ>.c=}ECy¢i×ŗ…Ž© W]ō ky żŁSŸĄ‘ųן8²¢ģ ?šYĻŁĘž0j¾ ]: ’YL^Ęśq/Ų$Xę8ä”8Żķ_‹z|ÖOg$r7šīƒœұtō±±Ę\ł]y‘4ˆĮøĒzś7įĘÆHQ]¢” “œĀŖŠŽ,īµnø—YÓHÜpHDČfõÆ<ńžāͼ5ā(—Rtpœ‚G ē„a©¤Ļ¤?eķµøüŖHm¢¹ŹHG–łļšśĆİX m„Šć/`Ü3äąökÓ„±ēb.ZŽÕ&Eh3œ½źČŹ(xĮČ8éŒ×u4y•!iU”qŒāˆeÄc8ąs[Öū ĀDī¾Y8CJÕrņō)×ļރCęväI8¬ĖinĶ’A-É*$.“œ@ßÓäŠŅwĻ8ķSĒā9.„ŃĒn«ĘIĪ Ÿf?vŃDdøq–'?CUŸ] £\{ōł3źĶ{;¢ŗx÷¦Äæhp²ŗĒדG*–Ų£øŁæ#<š°¬bGš‡€=*†Oo<ĮHOjėķ4+™#óˆwQč)7b飮ųuį sĒŗÄ:ƒ4MSZŌ¤F`o&N2ļŚæbžĮ:“;-{ć&”iā½a™%M:’q ?©Ķg*‡TśĻįoZxFƒMŅ“ż3FŅ£@žU¬a?‹ÖŗĖO-É·Ó£>cøā¹„+”]ŸĆ}²p&pyA]MĶ­µ˜|£ī÷ aŽės#ļ²QågęȬKŻjŽ™Č2Ź{g”¤ŲķŠąµYķ‘īžmœń^Aāߊ~›erŖ%öžvśšiÜÖ1±ł»ń£ö¼š—„­u»½·Ō.J7jÅ×ļzöāææh/ŪĆYń śž•įk×ŗqę7É õ_Zģ”H¦ĻĶ=gÄŽ&ńQ}OŽ޵~X•H|øłž=+ ĢŚŹĮćW£Ųį­P!ČĒɜԔ”ŚĮwžµ¢G äī_Ž8Āp2Ǧ:ՋX3!,§o¦:R77ģtʑ£*W9Tńœ6šŒˆ”ŃOsȬy4#-›J68Żž†²šŌÖ{ÆKs§LŽĄ LŒ Œ×É~>Ń"±iīÄ ×qŽ Žųļānƒgć-"RF—qFT…NAĶ|K¤Ąś™es*=Ģd«ńƒ‘Q(čhāto C¼ƒŪ"ØI¦i-6ā €B‘ÓĻ2£¹ŅxoFÓ-”Ilīm]@,ŠŽ«Ļ\ömĪ čć‚Õ#’å˜) p1\³}ĶŽęīÓSŃ“÷±K|ąšXwōĮiŽ ńź –·H¶œ'÷Z9XOČõxėūNųxUApŠJ>r$# §ē^Ŗ×˜“tĮ•@Ś0:W©JgH;›Zięr—ńHй>3“{UMrݲY·īK‡§Jé05|'c¤ĄģŽ-†įōÖR”8t8ąŒśqÅdųÆBŠį»Oģ öŌ­ fhöOjÖ2čg%”Ģ]£Å§-Œ¶q¼.ŪĆĮu8=q_+|[šMǔھšy×:ŒōśÖswŠÖ›ŌłŽņv6²Å:C ĄĒ Ö>›©źr+yĄŸ”Æą©lĪśR:ŪMF”s"ł¬2~õ3CńÅ÷ƒ|Qk®ŲŽ!¶ŠĻnėŹo~j#Y>‡īæĆϊśŽüa­YiͦÜķQ(I@ķÓ„{ēߢN֓Ī^Ū€Tō­ćµ"}c­YŽ1kŪŹtź o³„üa Ėžy®”ŽF¬R]"9#’)"…ŃŗåsW“ ŽŽQå?”‡ØĄĘ+HÜÉ̹w§‹W;&(>”C,Ń#‘“·įTāK•ĢK‰<é «|Ć®;֜ (‰SŖž+7JWhÖĒFIķQĆtZ6ŽĮBūŅ@`Ė2™˜ŒrO5Ré®Ūä€NAėZsz ‹ū0©,ŠŹ{ć„to–‡9f©“5§±åž4ŗÓ”·cur`į«ęėųæÓŠ1GĻŹAėXLééž ”:;¹øs޽VY$UĮŚ8¢”Fµė…PVJ‘õ?*S#Ēǧ„oXĘQśīŽńV{AåH'Ō×Ėæļn%¾į>qøuŌŃ)t-+gølĪÉĻøėU/–Ē€#“9#±¬„+£rķ¦Ž²[aź8"ØÅ£“W%fdh ĘHąVWbh¼ŚzŲ•–qŒŒt¦ęśhZ%¹ˆF½›©­”„s²iZ]Böźs’Ą×Š^֞[_³Ü\vøĀŸJ`ŃźšJÓŖŽÕ)³0».0=kJf ?‹Śd¢lģē”é^ęŪErāe“vNCZÉ É9µWĖmöŖš®Æk<[æśĪF[ŒVs} r<‡P–(™£LSŽ+)ą–ą3Cę^NćYKbŒKČgŗJ‡q嚊øµŗU6spr_XÄģ7[%³Hå<]Œ³ÄUŸģügš¤Ģē¹ŠF’jw|‚ŲēŠęõ;f^PTä`t4Ī~fA¦3½ŠYęw\`ƒŅ½ŪOŽ8‚ÄT ®h..åtŌļcŪożŁ~Hź+Śü ādƒ[W‰‡Ģō=«Xģot4¼}o”ŻŁż*źÖtÜp7 ąā¾4ńéz•äŃBSķ°F~鬙f¾ˆś…ŒŽdŒš¼tÕÓD×Łį’¼cĪD­bWŽõ\n $-’XžT’œÖ;XµÜĢe&1œŽ¢€ŒGK„8Œ"lUŠŖ-ž-±Ė{’(,zXFł;Q_8ņ+­ŠtČZU"ą3ēĒŅ¢R±Œ·:-sM‰­wDąNq\†ćhP‡ƒ–„ō$Ńóa‚ 6®’\Õ:öÖęķŌ ›'=„m`3uø-¤,¦?$ÆĶé\ņĄ]”ېTŒī®qź턲-rpøAīk’E–KĻ4I"ŖńņžsĶu6‹-Zi&Ķ$įęnøaŅ£ŗ¶æe‡l4LҲ4Š-Ūß_iöMnźŸUäV,zŪŻ»}Ŗ'…÷lłO„mLNęĘWd¤¢q[nū2›<šėŠ1•>ĒŽųėĘö>t’śķ­"$  “Pų7ĘśĄŠk µžĻ$y€u>õ¹>ĪĒ©KyŌ- ģ>n9®&ņÕ#øŽ$įIĻҳ”žĀjÄĖwirŖ‰‘vćę}ėāo!f…6qPŲŒÖ—OŸĢŽHeŽ\įN2¦²g±ÓŃ:„˜š?SYĢŅĶ“ńĖY aXĮ{Š­%µ¾ W„K’xÅ8lhw¾’ŅÅS µwwEv—:äf0:m\Œ*†cÜkĢ ŠŒ©ėžMsw÷MØEmƒm/!¶Ÿ½K™Īēó£ā;DÕ|(·—鬺.0­óózóĻ>Õäšō6zf“o&‘$S8'Ģ$=«é%+ž-(›|ee{bØwP”˜Ū¦®w_ÓgMbąB“Ȥ“»~BóŠŌj'Ŗų7ÅZ¾“a&ƒ4'ū2ૉX”ōĄÆ_ųAš‡Ę0µńu՝µĘ½h]›tŽ6@„äc?ˆ¬„6ŽÄŽńąµøŃ[Ižécrįb]ģ€{śtÆ-Ń“sI¾0ܖ™G<09čE.{XŅń,WĘ[ȇ˜H“”$z¦:ś®=gū[HšÕłĆkоY2ČGwJ¾sm-sǼZ„«Zx®ÕćW†#ÄĖźG·ōŖ±!ņü §„Ė£[ø·Hd,ŠTd‘Ž?Jš?ßź^Kh–Īwøµ‘d‹1’ÆzøF™ź:oĘ_k–6Ę÷Ļžmó #å'ƒŠtÆP’…Ń4z-ö€m­ÅœŸ+ó`ū÷śU[K"e|ßį?Š:¶‘s«č:ĢRd\\‰€X ķš¬ū«·žYīm^a9i9Ȭ†‘Ä+ķń< ŅŲ€ĀE' g޾Źų]ń8¼>¬Å’ˆĒ’±u>‚“5ökcƒųÆ\ŽŻAq§k«yXŹł®N z× $–ÓfIŹ­ĪŅ'ļÉłɦ…Æ x>?]½µÕāŚZ a¹Ž3Ēżjž™d< 9³Ōā¾b̧q+ŪÆ„?hTbhų§Å—Ž Łbn'ž1….»J·|bø‰¬<›ū1ŖĆ;m ±Fč’Wh“7¼5įŻ÷ŰČĀ9¢¾_5ŽśZÆń¢ŚŹD¶“°™ī, üńgnŅ{ķT76kü.šž|9„oslĀč»$ūŅųJūKP> _Yėŗ†ƒg5¢Ąš»ĢMųą«v¤ĪyŌ—Cć A᯵_< ·c!UĘąĒ&ø Zā]XĄ­å³ˆŠĘøŚ{b»źzd^5Ž},®ØĖ-ĘĄW­axTŅ/µF…īŚ$“”ĒŹ?ŃŪÅiex<‘ĻŽ¬ļxxé¬d²xKl ŗ>‡ŚXŠ ėŗC£If‹°ļ3mĄÆ*š®’÷WĶ „y¹ó ×88ĻōŸhö›b_Uµ–1³?Żč ƙuĶ^[Ėé“’“4/‘°ćžÄZ #+hvžšĻŠ­ō)õFįõDŽe\¢ģČ>£Ś½SJš}Ɖ4›bŁ­#»‹,Ž’÷ke$S—c“¼žß³’‰}Å»µ†żåŌåG„zG€|Gn¶riÓŲĆpŽį°ė¬õ©”ŗ"Y_Ē֑Cs"i3²NŹ>R~ń#=¹Æ6ųićaįŗźš|W¬„ŗ«r1^õ˜¹YÜųĆÄń޵µn‹g/SmŻĮõ®—AŠ®ķJ¼04ń³ Łź° YļŚmĻ„„ž梋{ē„”xŠœ`a:g޼nŚ}ĄÖ·7±–U…‹ąnl’I¦zž•š*ÓĮ~-ńMüŅ߈õFQynŹ °>¤öć<×Ó?|;šś&æąķa¬u“peó;ĀT†³ØuEėcŃuˆ_Ƴ—Äŗ•¶‘Øó"óNÕ-·žł×Ę^%Õt=6ęźĘņņx5x¤W;Wäe$óŸĀ¹e{ŲŠņ_ˆśĪāŁtČc–&Ÿgóa8ČĻóÆoų1®ų§G·Ō“{@Ń@Ļ“4gżjćŒ’z’F3F_ÄŪmnöqźs± %Į9Čōņωln⾚7·›rœ©ć5¼‰ę±³”hzŽÆ –ĢG““/ĪÕķ m%¶ÕĒ„µ‰NÓ>äpKg‚>µ²©ŠöK_†v’ §-¾”H)l8AĘ:~5sUŅāŽ^ŻÜC<ä)%}:ćšĶ5 ¹Žsƞ‹ÄśĢvévö»œ*z_Ijž»š=©‘š{WP"¦ć¦hl“É5ķNį£Q›® ^ jü:ńÆöfØŸ-‰Ė&}}éØÜ—Ø×¼Kc„xš=OR“¹{k­¾eĘĢ §óÆGŌ—Ā֙ö‚‰©¦HĘUĒlŒŠāRG™k»ćµ}ĮćuČV÷ŖV!ŗ’ĄB¼\r:Ż*+™÷Ā϶“>©guc ·%”¤1žI­}sš’[šę»©G”m%”ȬÆ$ćČyĄ§–kü<ń¶ƒ‹õ 5±¾(Z2ägšÆ¢õJĖRK4€ł’§ŹLÄkKI4Wń¦ŻxsVÓµLĪ“BXō^:ųā¾ų·«ĆįŸ²Ų<~R+˜(ż(hĮɟ8h×i¢CÆŹ<ķ:E#ĻžéwzŪ‹^¶Ņ$²ŗ›L]oH|“Ū_ų¦ÜŗµŸųRxķÆ“ĖYląs»Ėsƒ¶ÆēV£TÕ“»ø$)“Ļ U¦¶.·.ŲkZ%Ż­¾…é ˆĀŻ£c€OnµöĄm.ļĆoo3O‘„ !‡·j$h‹æ“æ…[_ššėŗU·Ś5;I·ķŁÉN¤یń_čƬigŌmĪöł1‚85™]£žųkKń ]Į&§ic©¦Ō‰e÷žæ7jó/Œ>Ö|=āq¦‹Ø„IøKå¾C†/ŌsśŅ ć“}#X—Lø±‹J¹—22AĒO½ō©>}ÆĮŽ"}_O/#Ə¼¦\‹„7¶CģÓ[ˆ¶˜€éĻzöKv2nŽ6FN~µmÓ±ĖųļĮV^5š¶„”“pµėDĻi1L“OƒĄö9ÆŹ W@¾Š5K?RšīՄNŪ03ž£ō¬ £¹čŸ> j|O¦ė։Ä&AÄn݇ŒœzWŠ?ÆąŻkĀæ| %Ī—©ŁĻm«éۜ¤RՈžŒbŽ·:!¹ż©žĖ?“…ū]žĶžų» \Z?‰ÖĀ8u«hß")•@aėĮĻąG„}šßÄ£Ań.›{ę5”ŃČąéXÉYŲ鉶u&·k¬ųTkčń†e%Ozł ā_‚,<}aā„¾1üGš«ĒŗtŚl¶Ó€écwå•88Ž=˜)¬§$į-˜¤ž'ķ9ūVki88ō5šļķą[żSĆŅjHŻ«hóFÕvŅ ūČ? ńīkĢ–åØź|]ÆųKńćŚkŗ¦—ms„źāÖõ„aY6ī#ūĄēńÆę7ž Cū3·ĆŸˆ—~0Ó­ļ'·’M¬På^÷dņ§J¦¢”OĖ2‰½Č$FÜⳤ‹`,„;nƒÖ½J{}X•. ‚K’qĮā” ŠAPvc­Y‚ģI+…\ą°źzRFŁY œc·­ÄXŁ·Žг!ts»•ģ=h4Œ­ ÷Ž"ó]\Ŗņ@Ą«¶"ŗ¼lø čƒč~ĮĮlł’d?ډ>x·WsškĘūlīRWÄVwmĀ9ē9*{į³_Ż7„/ĪÆ'ˆ¼ p…n`Ū©čW`’ĒŌg‚:‘ŽžŽõ•eŌčŠ=÷Āw±źŗu­üÆäßF<©Ōž„qƒ[Z‚Ė?™l@0Hæ+Š×SCSąæŪwövо>|¼:öˆŗ®±££År‚÷ ī1ĪŽ£Óę5ž~>j³ßƟü(×ÕZÓķ^h÷ ·NrƒŻ”pEsŹFю‡›źś ·’׉vĶ× į=n÷G×-³Āt²į$;²Ojē“čtCcģkڬ3Ķ*²X• Én}+⮟įŻOnµgook}"Ÿj†öžuĮQóv™įł“]SNÕtȧµœKf$·9äżköĄ?<+ń3įw‡üC§§ŲœjžlŃTÅ`9^ż1ҧ[5øņŁBąż+s™­INžŹWkżĻZڵšXQaMĮÉ ~õ±%äńÉ™¶4$õ"ŗĘ­ƒŒśõ ŅV\øbĘ?·os¶įA\ń×½‡Usʙh·Ą™Cö=Esér.å&9*h†QvZĖ瀵ŅŪE5‘…q˜Ié@J“»Ņķ¬üčbĶUäõ›1ƒWVł¼l94ęzŖ[y‘G8˜dŠÉŽ$ØQ ØūƼ*ņŹ”ƒ"Æ5%üŅĘĄĘ@Eżh -Ņ0I ­»‚S“ņˆĘAė@Ņ x¦m̧ž2?)ŗ°GUfRŁ#hģ}hĢw°Å,lś‘޳ēpL¢ć F1@™{O†HŌ„ÄbeŚzö÷¬›»G.dˆņ½½h1¹Ī®„q³@›±«–Ę[b@R{Pk,·įšA*^Ä÷¬×µŽpĢ2†ƒE‘żŽʼIóg9÷§wJ '§'4ģɅŠķfW>µ~ŹŅ'PŒćßҁr3M“i {4·†KŪ©fX₺IōG5ś%šöń÷Ä[{}{āܾ š±`ĀŃ×܏ę8Ęk)ÉF™ūcšĖąĒƒ¾iPi>Ņ Ó“ö"ŚęLëֽźŅĘĘÉT¢ļøüł®yJęÉ[CvĻH›P‘’įÄ Ž•Æįū!£™­fŒįNUĻ<}jMŖė¾Cˆ U“łēŽł$VČ6÷QŲŌót@qš¶¼Ń†Aˆ#“œgė\V£ć- O³¹–ļQ‚ŖOĶŌż*y_ShFĒÅæiĆvó]j֖Ńf‰7åœūÓ>õųūG’ĮG'ŗ²Ō¬ģtÆ"öܲyVlIœpĪFqšģ£Fģ£ńĖāOĘ?üOžņć^»ŗÓl&;–Ę6Ź Ļn¦¼©nc–6Y6üæ*ńŠõa •j˜ŅȰ¬YAģ3H»esĻŻķVpNdŠYņŒÖ…µ§›ŒÆ5¤edbjZiŅùš#.į}«ØŽ;->8ī5H²Źø<œ“ĄÅe9SGŲß³Ÿģeń«öŸ×#Ҽ įcGŃu†mUķÉ@§«.}zž£’cÆų$ÆĮŁŹ5[Ś|AńŗĘ‡}ĪJ£ń“üų®:•ØEŸ­öz½ŖF¶¶vöVhŠ©oacqZ£O_0łQ„O\uÆ>r¹Óm O"6Œ#®ģVüIdžb§•ć„r±“Z^C,l“|„ńŠĻ¶°K ć5“dĘĒ$Ņ ±Žķ˜Å8Ūž†§žöŚfy“Žzõ …Hć/¼a$Ŗ¢5UĪāNS_|qż¬¾ü6±Ō~É®Śjšź©ņķB{ńž~µ“cc¦1±ł ńWöŒńēś·{V]/Btłmān\ĢqĄēµxŚEhUW@­į„ķ Ń·*·¦j½Ķ¢Eµ×#?Jčē"dö–Ø0ņ“{Žųé^·įO†××M¹O|ł>•.fGŠZƒ HÕVŚ-ĄmĘÜWuiįlQö<•Ļ&­x{EKo.Fīk«»ŠŌŽFS‘PL݌]=mć¹h'|§;s[l–¶wß0 ‡Œś{Šeq/ē…ļ]— ŸN‡Ž®i¢t2Ź&PƒØ FmĶ夓ŁÕœŁŖ²Éc^ʱQæŚ|ŁU‡LVFØgD Qó“Åk`2›F‹Qxī.!D¹NŽ¢µՓb®0¾”Į›–Ń#Ŗ,€Ž“¼ö“GĢŸJ ĢÜĪ–Ņ™“ŌĮ•¶Ü›Øw®ī¼õ Ø#MstĻėNłąe.ģŠ‰G±©£)‘£KˆHŲæy}jłŽÖKT‘e ädÆ„Z>U¢Vę²nµ ܘH!³“@e$BC öŖNb|®7ž“°”Üm’2ŠéšmՌÖ-Ģq–Ēć@bŅ vœĀKŒœ{T+ĶH™?•J}ŒÉ xĒĢjŁ0Ū^GÉĖ.3ĶD3[[yGc ~k–»v”#Üć­A[ÉnTČREģG&« %…O”†OlPZ•‹Ö’ٚ°Vu?Ä1ĶU»Ņfø¶['Ź=;Pjr‡I’ĪXž@Ž[>µŌĖk±Ęȅx:ėAŗ—ōĖIzÖ¶ąŠXŻ÷ °ö ‹—?“‘v«Ÿ(tĻjK­O쨰™pĖւFC­¼Öķ ż²zŠå®ŻŪ%•³ė@}²ņ¶E:˜’ŗFk†¼ŅžK³<.‰ÉRx4ŠŚŪ¼ ¬š®¢‹ybHŖŌŠV‚!0¾`zö§»I„ś{'Ón% īĻńY4ß*ĮÄe¼ügžō…”Ķs4­Ō o8$|ÜēÆć]¶˜²¼@»Æš§éœP"[ėĔFĶéペ‚;E»ß°$.?1©JĆ0āóšS ¦5u$px4\ŚĻ3üłęĢ†ÜpqüŖX¬žÖL" = ķH¦Ę5ŖŁAöYČ2)8`~õ\Ņu±I$fž&Éēi ƒ^īĪiķ[Pӂćų‡õ¬kK»•g@ē=3ĶKu£ß2›‹xZU ¶ŚĀ$S”2?¦)^ŽĶ×äĶZ‚Ö՝w <śr)£"퉕ĄėÅSŽök'YmĄb;œPw--܂āH„nŻp85r3s"FvU ĆOÆlń"‘Žī+ņ+4WHī:ž“å:’†’WY#&‰‰%{Šóūķ#ģ©< |ž ڲ›Ōč¦!“Xń“ŖI̅£„ `§øÆ4ųÆįfėMkė[)pH過³O”Ō‘š¾§£k®·ŠY™l\³Lˆ>œWĒæ¼&c¼“Å–ViófDˆœcԁSøłzWey4Ė[ié†ÅuŸŁé²Ü`±nµŒ–†lāa×`ÓuXćŌ3`ŗœmõīz«2ø·¹We¾sļ\³]M)ö=ŠĒƲ\i‘ŲßJÅŌ°ÉVĘ:ö®rćČæ¹V‰āzņk4t{3×4MN]RĒSŠī§±×­d F#x%O®q_eųJźM{D¶žłd]C`+ćp>µŻFG5H¤VšŚ@ø•^?B9ZĢ»•bŁ"©ž>§Ž•čGcŠq:{ CMŌl^9”!łXdq\ĶńÓķäņmo ˜»ĪGŅ™„‘Ķ‹·#ķ øąä łqM»Ņ<=©Åä\»y3q‘É_z ƒ>/ųµš¾ĻĄŚ…ܳźv¾ šżė“o°üš·ūCØ=+Å­#Ó-ŁÜK<6}B»ˆśó\učR‘2X¤7Æq„ĶØo‘€ĘģUÖŃ-ęy.#ˆ.šH ļļPwF7>—ż™ž9ź¾ń;xÄ[ßéĄWē’–ƒĪģ0劄lś7JŽ Jg }±Vp©'Ėӎ†Ŗ]IxŅā‘™OLv5Ó”Ć(’Ūë۱Ć3B‰…Yv’@#†Ī©£7äG§Ē•yļ#ņĢR)ŪüéŲSdś"ˆžIMš1ązVµŁBĢ3æ9ęƒ HĶU±×ć Ü^ʗVÆŚTŒņŌDšKÅr2§öq…÷“œ†Ę£:%Ķ£Ÿµ[K äć +9Ē©N,BĶšmiĪr„Bšk æÓźÅLĒuŒŌVdVŁģĒy!_›ž «‹a”øI® Ś[5RīC`暓ķMlĀźŽmˆ§8SĶm5zdž> ŚŽĒµŪĢ'€+×ķõ{k‡1¤ČųĄČ9­U‰•3 ĚjźhŠī8z×9¢üŃ5Ś…åÅŹN®NĘ•Ģš±ŁĮ ŚčŹŠŪHīŖxĶy’Ž­,b¶i”‡lŲ?0ījCCå+’kf­$WgŚō¶C/Ž žæJōKh„–ŠĶeVĒ„3k™³Ķ9EYéÅpœ÷RĪö“=óņōĶ(ōŹG@{Ą5„l˰DÄdóŠ•ė,Vj®ģ”bŖĻČVXļßéTÅŹŠÓéAŃåBĪpWŠßšę‰}zéoÆ$§…BŻM ØŻŁvķ“ŌzŌm$­ū¹FšFÜ„{ÓLŽ; y*ŗ5¬rbøbøx“ń˜CŹ %æ¼}ź%Ųga¦Émīm‹ a’֮ѓX­Óķ6čÓ=ĶDbbĵ±‚šˆ\؆Į¬ķSE·²ó9—ĀŁĪ*łDāļf»¶ę[€ ĶV¶×īŌ .ź!zēÜRäFÖ&Ģz…Öęķšzc­Č|«—ĖmÆėžMe(ōˆ³jół+c/8éŅ›§ŹŽl”ćó‘Ē­e©œ£bŽ”lņyĖ ŲNx=Ŗ¶fö­p ”?{Ō×DO©6•: dO0ąu"¼źšiš|­å²ZŪ߀¢µ47aŻ mŃÆ\Õ³%Ž™,eTČ&ź ¬gX™ĘīÖ9’™ĖpŲĪ}«©‚ž;kR#µóĮ=V°”lZŠćīćū\óFDŠżąœ§jιѾLJaēFNwŒÕ@nLÕŅīŹČ<˜žP WI;]M‘¢Q ō+xĪĞoā/Eāø.P»† Ч/ŸJćü5ą‹/ ĻŁäøņ‘Ļī·¤ÖŖwEic»æŗIqHŃŗA<y°˜ē×œy§ø¤e4cÜBm®TŠ¢‘ƒŽ Rŗŗ10±ģEL™‘„ķ¢:«„g<…'ÅM-µā»łhåŽĻJ›£x³:?čń¬Ė ¶čˆägć5?xĀóĶn¦ą2® ŲöĻē[Ā!Ōćļ~&£#:ĪpŁćkė]o„u¶Ō<ļ·<ŹĒ ĶŠ);–“ĆŲ·]D nĒ’^“ä‚iģL$Ÿ‘€ūõĻ4=äŖļǚ“·z^س“óąŒä}k鏣§āĒ‹¾YHš‚ĒŖč—aņ²]ąź*eģō/xßö‚ćė·1éQŚČą¬n¼ėŌ/óļ_/ź^-Õ.Hwm£*SŠß“×®lōs{nϰMņ&vąJqZ±ińJßÅibnt–µŌ`QnņŖß÷yĒZō»oÅć¶“V·ŒģĢ‘tćÖ­JÅęųM­Łųš Ø.Ž’ŲņQźGų×Īß~ ßx/ĒNžń)6QlYQœį˜0ČŚ;äõ­¹Q³g½ų_ÄV¾;K{Ø'†Y›—mŲƁógńĶYń‚dŗoy XuĻŻĻ˜”Ŗ42tƇoį5ĶŖ«[H»kūg½yķLJņ[ՒŚ[KÅ˜uø§reœäžŽhāé}„°ŖŸ2‘Žø `—JøÅŽęR_=»V.f,äīōT¾eudBppz׎æ²ķēƒ,<;«ųŲZŻI~Ŗ±&Ńŗ@hŌjĪOö‚ųE7€.“Äž{ĶG>m”mž£€W•j3꾇VŅ­ÆNØ£YļĻ­g¹P“±ęZWмI¦éwÖPGp’‡1ó–9 ±“ń«{_-ŅŹšP…aų*„ęuEw=ŠēJ‚ĆNMe\É,*QŅCßQłW•\x“VÕī®!¶’8c. 7gŠØŹĘœˆśąŸĆXµ ć$y×ü".«sē[O–*›łēŃ[„ŃhUŠń؃ƒJåó.āōė„ie‘`<­{-½ŚjŚÕģ[dĮŚxĪļšc½Ļ Õ5}^ā+ ä²·?)q ōŖæĘ”eāVņkym!RJ°9ŚGįC1kCß¼ou«ėh‹5ĆH›$ޤåG„yo†>ÅÆ\µ¶­pŠ#;:¼c ¦9ķY)X•Ń­üāßhš¶‹n°kPŽ4.ŁÜ1Ō’µŽõęæ ,/<=a}eŖį"2»¦ö9-ӟƩO¹¢ŲōCÄŗ6µmy¢Ū­œ—ŠS®F{ž5į3Żj­w‰‚ķ#rńĒŠÕ— Ojæˆōė¶šķe” ÷W½{ĶæĮż+OŌį#Ÿzh×»#©Č]ŽŌµįĖÄŠĖ§\‘*čżįļ‘Ž»Øü_kksJépÄ“Į?ćAœŃŠuź³[˦ź $ĘAœ©'hķśT~>ƒXŌōŌO·ł"UUH @äŸsA9ƒĆOˆš>¶śZŻŚ•0]nBAé_U|`ų£c}ā- Wš½¤ßŲ—2¹åO>“0Zž?ć/Ž+ŸL†ŅßKŽķV?/d„‚ ž¹Į’ ń‹mSU½ž8„{››r 3É!fÜOžĆšĪQ7Q/Łų[’KÆģ ¤ReIAł‰źAükŽ|;āķZÖhöM:ā>_9Į<~U*rGńćxø×“ėYdh.A (1\ņ3Ÿ\óWbń\ ‹wz©&S¤·ĒzÖ4ūŅcRŻģõ+T“Fø *æĪcēiōžuŃJŗÕ³Ūß]«ĶsŁ)łŠö?Ź“ädņ»ž›/‹Æ|A„ĖH÷³Ø cʜwż+žŅā-0ŚŹ%~9õØ-+āßßžŠIRKŪ‘Hå—ŠW›bb5 I¢¹‡‰ceĮ” Ɲ{N·¾Š+øīa‘&MŁ>¾œWé„–įļxJßEø·]ZĀU- ĪŒ`ĄV–ŅąŃšž©šź'YŌt«ēŗ…ģŖd<ŖēŠń+ÆjPj—PĮŅ"6ås›éG5¶=WLk ļ› ]ä’hĀģóOø5»šėC޵{ik+@Ŗ įI!Āīö5.C±čē„ōķA'²æĪĘ^29ĻcŠó$š± nŌ¤ 42;Gņķ޼ŠĪRčD˜š6½ogtĒĖs"6ŽAÆW¶ńŠ&‹4Øyc”( ņXƒĒéSDĻ;ųy§x‡žö¾—ku-•Ó3ŹŃēž/å_¬~ŚEe-õ³yŻńŽ“ Łž‰āķ6ŚļKž{i<ˆWhҾń’„ģõm;U7³}†h’B‚DįˆĻŽ*\¬rJžš Āėā)µ/ėšł3f9^/ŗ\ēväĪ¤ŸĆ·ßüg«xbņŁo“¹2‘Ē2«Ē"õł^8’9©U;‹“±Āk֞²‚y.ŃmāŻŗ8ßīŖäŃqć .ĆD†m&ī6øčsłć¦+DieØųęßO—ķz^Żļ’]~øžĻšĻ‡¾#ü2šĪŗ—l·Vź-ÜnĮlyŽ? ŅHהśęĀ&“¹µ{Xī x¤VIxR ‘łŒ×ęG‰|k£ėš½›Å­öētǐ’F?ęÖM>éŚ³A1Ś:`‚kĪgŖ¶«gPZI#GŹØ'µ_!,ś£ĮšiŽ•”źö¶Ö¶³@Ŗ]ćǘĢ9Żü«ę’Žž ŅüX÷Äv2.µ™ē¶9•zƒśTX®n‡ēµ£[)œDЧq-·×޼ĘKHćøŽ#Ģ™#>“‘ķ_~ ĀÆ+j7gŅęøDtc€ĻņÆŌ[6‡PX%Šā†HÄČPä2•neršrB¬¬¤ ģ­|IūXü:ūʗńÚ,¶¶—PmÅ£Ü?ˆ(éõ¬Å©ņ+(;бVĒ@q_`ü׬¼qąmKįėR“Cö?“ø#’÷ć·’®”¶7ŒŗŸz’Į(?i=_öfųłĄĻź7Q|6ńk5­˜Ż¶;K¶n=3ž•żO^E%¼÷6RæžŹÜ7÷‡PĆō5•Nēdöģ½ń å¹¾š¹;]E*n†I[ØēŒžŸ•}1?ƋYRkkƒöhäócG?ź›9Č5Ļ.ć”n=ŸšpGģT’~č¶ĆM8j~+šŒFĻÄö–ąfóLn²ąrZ2ğöNz ž&|Gb¶w éeäӘy‘ʬJyźy©Ć+^6Ņ’žæĪZīqĮÕ¾PIą‚*eR6'k^ĮR6+IW-Ó>ܚ¢§tıł#ėA<źß1FĄąJafŚ]F=E"E%¶±?Ź­Ę<ČĀņ¼’h5E‘&Ż«ŲxÕ~9?|Ÿqé’Ö¦tSgią_‰^,ų%ńĄæ>ܶ›ć ßÅØŪ¼yāoŽB}U”° õͧ?ģ5ūAųGöØżž¼ ń»Ā‚ÜiśĶŒ3ŻŚ1ģnJ 辌 ūŒō4ŖCŻ:OŖµ› f“xU@—ŖW†ų«KMSMŸĖUpĮ_¼?­y5c©I˜~-šü>ń·ˆt­NÅO‡ušn,wˆāœpB·c‘œwę¾ż¬ž Ł|^ųi«X>žā .)F{nÄz•&²Š±sGņIćæ]xÅś’„5O8\[ŹĶ:m2”<~•ēw_! ¤§żžÆF”Ž ś)ŸŲ¼DēŽßZg’ŗ<į×5Ōq1»Qt‘d‘Qåfp “ʃhģH²ØĖœ§õ«bÉóÓt c$ŁĢŪIüźŌ2łn!+õ Ž µv—R,vrĖķ¤‰um±¶āTmĄœsŚæŗŸų&7ķµsūQ~Ź~ńõ—’’<‰a¬X‰³5Ä1ą=žeĄn0iŗæ‡5+YĀŪ“s”P@ցjji:A²xn¦+øšAė]œ‹Ā"śŌ åē76EÕŻŁKuĒjÓ±šKŻÖ±¾d’*ä.ģ."æ–&bœœ~5%½¬Š£åø'9ō ‡1eø+ E;{dÓ®J®˜š:“9’‘» €FrBžõ^|©Ź°ĒĆŚÅÜÜD3Ø,¬ĖQɦ¦Ēp¬u PQTŚĮ3oŪ…_sŠPn—B"do(F›?¼;՘,ĻĪ@ßĪh4TČÆnŗøÄ1Øėަ¾’ųū)übųń~!š¾&›įÖQ$ڤŹBDI_Ö¢f‘¦·?n~~Å?ž Ūé×ÖDx£Åź©,×W,Š$ļ³>ŸJūĖMѬ ÷ńA Ąī!Fџ`+’rŃM 2Ě}»,$ćv:WA§YŚZŪ‰&Ś÷óŲÖ.}€ø×i€ū‚ŗœ½ź½Ī©ęFL¤(óØ‚Ōµ”Iďå^māXč`ŽÉv’Ui÷<Ē? ‡L½Ō$Ōm-l¢¤i^@6ØōÉ5ų’ńļöżŠ4->īŅ «(ēÅܒČ?ŗ‹œ~•ŁJ•ĶÄ?Ÿµßğź—6śD±iŚ;’ ²9i“œxā¾G‡P¹[©ī>Ów<Ó>éZI o?z“ą’0«VĀ_Ģ]b‚ųķŽ²¤*FkCĪ©PXŌ \.FsŅ“ćŽ=Ŗ €żiœĶš6öfi,g=«”³³xī6„2¦žŸĆÜž2v.1¹ģß >üDųÓ®éŽųeį]KÄZ•́C,M²<¹Ę G’²Oü7AšüzoŽ~<µ·ˆõåø†ōXĶņ¤8ØO­rT©c²?~>ü?š‡“ė}Įž±šÅŒG! @„øļŠōv¶·‰Ūģą+ēžÕēŌ©s¢1±­o*aĪZ¬*ē9Ķd™„@Vf¢Č!żk94 NåH“ȤU‘Ī>•%ÕÜ6)åå6tę³nĘŃÜću-E®ƒ-«~ÅO5óÄŽžųx\ųŸS„ø$wŒ··éM]Ģ¶§ˆü_֋š’ķ6—$„dĮĆ 8!yÉÆ…å·ŸS¼¼½Ō® żüĪY„”–<öé]1ó£bkäe\gÜV„"sZ¹"-Śi÷2Héo >yā½@ųu©ß)’ė䃯#šĶɋN§­hŠ/)RŽ'n™Ē½ÓHš¼¶ŽL¢1³”ē‘RD™ßŚh•އkÆU=뢂(JŖL¼n”Y›}¼L!$ ń›ox–Üé·Ŗ·i‘‰ĮOoz”‘źQ¦dGulē?JÖkĄ\$ŸZ Š’²+†ž8¤œČØ_ćƒÅ&ģ%āöI²„Ün`ž}ø©\Éqøø=TŠĮtKiV3“zzPC™×Ś_C p¢“-ØķNæ[yó=¤éę óA18oš)ĄŚOU "ņŁy¹>½(!meėŚ£l»€OZ˜Ś®Ł@8ĖW? R}©É|#ß”  ^[¶÷Ē”ķJ#”üĄņ(äQ¶TČÄ{ÕūI¢’ź yŻ!f`·zõķ F7ßč—d=ø®wX҆—w%‹1u®Gj å.‡ ~°G8ØR88aЊóiNŅ„Ę.60Ü[¶k9£H®i/ö³4SČ&ą)«Ųģµ/ x—Ā0x^htŪčŖĻ·–>õŽøj~üašĒŲ&øū ŃĻHSĪ@ļ_-Ühz‹ģī¼7}–²ĻEęFvĒ8ćü(5”u?<õ’ ŻxGÄŗ–ŠšæŲa.[%€źq]¦‡¦¶„dĮ™‘€[ŒÖrHŽN‡-7ĆéeŌfŌZīŽKuX1‚O®k±Ń.įÓwYĖW3Œ2W4ķŠŽŃkTÕ絓›ģQ ząµIį‹ĘæÓķõ¤2\n;ŽĀ£ƒĶr³¦1;˜[VŌ\ÜiOjJĮ“#æµmxkā§ÄMĘ:OŠōØķlˆdiÕ0{`7׎·§#:KsķKylõT‚ā(6‚ŠY{t©®mtŃkŗ&g ”žō)LóźBĻCŠkØmÖEĻė:ī;KųL{]'ļź+ ć–å}"ęÖÅ抳ø$ķŻŽ­^[ł„ŽŃ@Ī[§j,d£Ōń’ˆ ŗń†=„1OqĖ q“3ż+ā?±ź~v£§źÖ‚ ›w pĶķŸĀ¹jD3¬ÓPÓē‘&RŠ3å?vŗ)nļ Ź–‹Ź¶+€sŠ×/5™Żb+źī{=ZĖUK-RŅO2)—ę+ųwÆæ¾|J·ń‡ōė-~õē×įA ¶0=»UĘ`ŻĻ³>x‘ ¾M?{˜‡Ķ’Ü0ōę¾ĘŅ.,n#‰ąÉŹäW\$qŌ=³JŃ0ė,“‡…€<Ž•ŅĶ ˆČ– …棊ād·:¤Ķllę;ʟ¼;×ēOmØÉę‰&9ŖŽs„¼ŗ³XDˆ'g§rku°‘‚cÜĒCS=‰åÖęeö°gB*¼ä{W4¾Z™rŽĆµbQƵ¤ 1ö35Ę~FĻśšµm·[䈳 ōĶ2¬m\X“q«8ĘxĘ3U ³±ńż‘ æŽE;—b9‘J²²{śW5rmVW\«·Æ½IfKEĢŪzĪØ3#ķ##Š›6"(“fU95”#eKB Ŗ£¹R+©#pÅ0¹ōØīīs^qD‹„ŗ­¼ŹžbŖ2óČé^cćĖȖh,ŒAÕ2CėRjq'Cv­ućŽ³bšž¤”™®¤XÕ³Čē2ĄĒ×ķXZ“r8`9äg5ÉiIHČ&Ų ą®x¬ŚsRӚ"1&čĮÉ*1XRJÄŃĘĢ[’GR*©›CbKä—{,ŽŽ•ŌxWÄ·:-Ō6×OqslĻ“’GŌÕó"ÜO¢ōżNŚśń:‘׎ŗ[¹įɔ¶=ńLå©FøiĆRł×›ų»H¼»‚]®ä’WØ Ąń‰ōϳwX„眊é¬ēŽ =ķZœäq‚)3½d‘g &7Luƒ=˜‘ «łĆųqXKss>f’DkpTŗ÷ÅfĮ£Ž—6ž1ŌTŒ×:l×vķщ#ļĒJ‚ PÓŌ$“-Ädåx?(=)4 ]6ąL«,Å8Ę;WQ}4”€–`x ÓÅī™u2Avē Ą¼¬b5U §9śŠZ‘‡öT»‘‹ł£”éĶhŁčm6āĢÉļ@ÜĶh4;°#[{ˆ„›$1]\:¬ ŲĶē2vž4ˆ1#•­ŚE0²œyļUīmī§Śą˜Ć~48“#ēHš5(¤6OÆ5Ź^i·VņyŹ>äu¤tŚC»`N‚]£žj¶¤ęeUmģz ŹKPd6fiU‰VP§5Żi\†*žłˆČĄéP`ŁVžĻĶI uI:|¢¹BYlWÉŻ¹A‡$šŽ*Ā0b™ļHxœ‡^k}Äś„±H„Šö#ÆŅ¶äfŅ9¢%'·d‰³»"ƒc—F’ cұ’ŠiŲč“ė*“Ń@&Ł’r: čnn­b±M‹ĶĘAćÖ°±“es…øÖ›ķSŒģAø¼ķYŗ”×WĀmH½p{{RJĮĢŻ&Äy{,mŒaz“]T]*.L2 ŽäÕØÜ®`źÖ“£«“ū¶ōžåڳĪŅ;¶Šr3޵Œl2ķµ®Æq dH‚ń¹N§Ö·tėK9u ©;A# ŖG9Æ[ŲČĶ•™vē#ł×Śk¬RI1#×ø¬åH²9ū؄2«Čv±ūµÆ¦…1†BĻĪįéģiØŲŠĶÕfŌbßöw’<Ž^3ā ųž\ÜŽŪ[j„wI$MŠŲēŌw®ˆĘĘŹ=Ļ<‰U$o,:cå*Ą‚æPk«Ó¼G-œ‘Įwcž¦›DŹ'UįåÕ¦ŗ{ÕÖ.# c·éœf¾Ŗ¶×­įӐIä³ķąŌJŒŗČö·¢YćY[sdpßZģµ’ŲéŽÓōėukkųÉŁ'PÄ’ś«ŲPīyÓgK­A©Ä—zŒ‚IĄäÆtų©iĘé ń՝²łų†7 wägJЁæ“…-ļŠō‹ż* ‘`%U/n„«m^ 'µfŚj—zVœ#ó£tn/ó-ęŠę„‘®Æši6zŲÖ¬AgłŻz‘޳™ŒŒ–½±Šé-¦’+•ä‘Ūč‘éöŗŽš4ł`»Isž±_pG\ÖKĢV:ŸųOž=E5ń^Ū«ł‹č ōé~)i¾u¢ :€³!’>½M0±µįmzĻÅZ„ʖ/bT™ŪŸå_|vųeā$ńF„įėÖlɧ€Ue9ĘćĒ5q•‡³¹ķ?±ß€uĖ=_Z¾ń\(lę+äF °wŪżIūW­ų—Ęś\Zūi2L(&1ƒ!Ū†F?/Ī“rW-ĻROųś×Ćšiw’øÓū£\ŖväW–ĖńK@ń®”%žd°Ė …m‘•ŪõĻRjdś"˜õ}7OšöØn”Į*FͼBńß·JłZćÄzr_]ˆ£>Yc°>sĶDcqXČmVĘk—ŒNłf?€Æ£ü#šžmZßNŌį7¶ŅÄźŃÉŚĘ“а{3ڵėo¦č“ißhUoߤ«ž“/r}Nk¦šļ¾ü5”Eā½%³īęc`{.=Ķ(žI'xæ]š ¾6ŌgšĢO‡q+OmęcęĻ`?„iMā(„³·‰å<  :Tū>ʱR{¬ŪųIM1£·I‘ņĘø=Ž:×+į’hŠėĒ{‘ĘøśŅpd{W±śį?é ks¢Ļ•¬J‚Ć263’©®ĒÄ~)µÖma°¹Óf“P ˜Ž8ÉsÓb¹ē}E6|ÕńRÓĘó¬piÖ,"ŒmŽ&3œž#=ėį z’ÄZ'‰ķćŌ#]‰Ź©ČąšHśV”Q¢ģś_c¹¹‚+É”-ĎĄõõ®xÖébž8Ł“Ģą1ūąt$WMS±ōŸ€M­ö‰:^éV—muĆm Č}TöƔ¾ ü>ń#¹¼‚Ó̱a…†4Ć{ŸCXŹ6aČxö©„K,óŁ>ÖźŻ‡˜¤m+õõ«:Œ5=5”Š^ł–K$epY¾½śSƒčTcc×¼?„XųŗÖx§¾“Óę »Ģa€µ7Əa ]M§ź“ĘO›5Ą6µfŅmüł„%•ćp’&³“φ׺g‹žÖóÉä¦a{pr£ż¬zÖ2zŠČōßÉ ģŃŲy+tHŽ$‘A½Nxüėä_|>ńN›­jöšõŒ°FģZ9T’z•Ē„g\ĮœOĆÆŚčŚźµ²}²2ĢĢ’ņ9ĪrkÉ|OmżµāMKNŅ¢ßDĒ÷*2d¾:ⶌŗ0‰Ś|#¼Ń4»Éģµ= d½lšhÉ;Įä©ōĄ?„{’Œńž—-ž±Žš+Ė6ŹåŹÜżį]~ļMC»“ø‹aŹnÉö Ž2±Żų{H¹`—T¶Ęóę@ym¹®†? h6ŚŽ”u§Cįš ”ūV…miØĖ6käÅ3ģ3éšįüY§®‰ż¤š„—²ØŚ1ĄSėžŌĶŠņū?źŽ5ŗķlŽśtl2\c®k”ŌüŖŁĒ …ū=¤Ž”—ęćż:PR«įM_ “‘Ā@G,äg!˜÷­o xƒÄŅx’śÓZ“…tt?'—Ģ>§Š§&W!ėz-äŗ~ “ŪŃ? øążk¶Ō¼;ā\.±„ÜÜi°ĄU„ dNĄŸj’%Ÿžj¶Ÿ |=ā8ø»Üs:š  pÄtļÅy%ŌńĻĀ=KPŗøMųh”#’2ÜĘŒžō“ šoŲż ĪĶ,^fĶĮ9lwÕśWš«ĆWZG‚ōɚhē·Ć¼J£ę\sƒļW},3ä?xŖ kĒÄL×HČ,ŁłsžŸZŚāĪ#gŖ<ŖĮ[¾=}jF‘ä¾*Ō¼ū·HXīĢ|sX ¼wÆųāEµÖ%Ģ’ ›wė)cÓéƒÖƒ{­:wĄ»’čv:Ķ–£k”k3E¼ĮvÅB“Šuł«Å<š»ā瀒ēNŌō>öĮ‘dF;Gøē5<§4—sę›Ō”Ę×°‹9˜Ćn6°ćłÕĘųµŪÜø‚`ɁćhŒlgwŠō7…ž„öā(ŻyīTM¾Y@9[WéG¼C£ųÆMµ¼·ŗh­üšŅü„€\ńļZņv,ņ ¾6éqüJµšŽ§¬ŚXCp£ŹÜCdŽOLW[ńSóhĶs<<[ČÆŻ–²”AÄńæ艤x“OÕ|=5œ÷K(óā'"N˜Čõ®÷āēĀtńN“i¬:µøYš0Āńõż+'ŚÜüßńLk¹¹Ņ5øgµ{I„nd;CóĮĒČųĆI›ĖŒivŪrƒĖå±Ūœf¶ŽÅ.|āYtėKūĶ)ēÓL‰1!õ?į_ožČšżæƒnõ[=JāčiWåłlˆ[ŒķœU6#ō{ڽŽ‘įØu»‚ņŽ@‘Ił8÷Ɨn5ļ jŗŚE­Goyg)1³ŒQź # S})ńēģłöK&Ō|)>§rĢKĒlõ‘p$Ž•ńČóķµż.TšŚī LrE ŚĖjq•‚)õ2fńöZ½µ“®-Š”ĪdŠöĻ^=ŻĘŸŻĒüIā8q)ČśWDZź\“±ökč“ $7…5¢Xö˜äŒī\™c=+M,Ƶ :o·ĶėFQš¼ŒĪdŁģ|}ńöpńŃüAā]P³i4«mĮr;ńé_Ÿ×V—ŃNš]Āāįd˜ŚĆ®+#Ŗ ©å¢Å-·Łī w|Ć<ū׎æ³WÄĖwL›@ՌQŻYTĻVLgņ=©Ų©l}T“¼¤Į`xɦėŚæ4}KĀӒc»R½p”€8’ ,`ĻČ_ųj÷Į¾ Ōté’K»yZ6R~eŒ“Ÿz±įx³EńAŁn£kŒēīt<Ā‘½3뿊sgĆæ¼-ØF%†å5IķŠ‘m(pĄcŌ`WõĻūžŌoķoū9xwĘÆieoć, -`ÄćędŻŽ£$dҦQŠķ¤ī}§š’Đųg[µÕ˜nep¹z×é%ߏtżWĆÖ·rbi@øū§Ķ=©šļķ§xĆĄvķā‹YīŹĪJ®}@©ŒÕģaR'Ęŗ…“šH|Ō /ń€z†vˆĻ"±8°5×]\óŖ“36Ō`\s޳Ž%BKqßńŖ9Č6¦ā”·dóR(;HĄŚ;Š8ī"K÷£Ęcķõ©¶³ TrŸ6Iõ Ł2wŖp7rxįj[|’©“m9ō¦`śam® –ŅF"÷ż ’Į¾·]÷ĄoZ’ģ£ć[Ł|?ńT_jšŲ¼›äŠüpЦNńĪ;ėTŻō;#$r2j2ŽŲĒp𔙯*}Į®NöŪlĶu€aq†ā¼Śč¾m,|ēń«Ą6ž#šÖ§”NŖØĆķ–(­å^x=³Ļłæ®+5¶ŖćÖ-ä6—š80`Cü±\·čK‘üūĮP?f ‹ zÓā'†­U`dŒŪĘhĻ'Ąöķ_‰OQŻ~eb¤{ƒ‚+ŖŒŗU‰FīV !>B>o­E ŗļŪēźG­wGc‘琔99@AÅDV=Š¢0Ū†AøÖ'ŗƒįĻ‹³¤k‘C [x¤b6Ķ"ž 3ķš‰#¶™żśü0½šž›:ü5Ónb6WHu}qāTo™–6īyĒŌ śBŚ7kH.šĖŚŁėzį© lV¾¾fcŗˆ‹y†7vƗækĻ‚ŗWƟ„­¼Ömń7‡ą–ę†ūm”_ŽB}¶€}ŠZē’ŠøŸēµūJü#›ö~ųŁāO A§j įMJFæŅ ūæ1%āō+Ļ•ę—Q²8HŲ|įł?…rÕz^ÖŪMÕ7”G†ĀķČ=}ą?&£hš½³ZŻ$ƒž$\W•ˆZÜŚœĻ^–žź 9®ć|įą:WĶżÕ¶¬uK7†Źõ¤ ²ŒžøÅgKs„ģ}ą’ŪųƒĀ–S·[ČWĖ•ņĶżśÕé¹¶„—Iüœōėߤ“<ŹēŖheīćxl/FŪ÷Ŗ—ˆn]Z æĖŠģŠŠņ䜘QźS¬J$ó=­Sh¼ĖŸ“•ʼō®“.vh%ŗß\ŖF£Ź;WRś@Z)•.Tcļj #+™6†«¦Ļ4OņIĘ1Ņ·ē›ūI#Vc¼õö bC¤­™m›U½øę”]]Ć HYW‘“Ö€2u;ɧBČä)<€yØōū©’@…¤Ų “Ö€:?·õˆ¤7;R$L³¤°ŖøļŠé.ćÓ® hXüü`Ō~5Č_l UNŅ( ÅŁcĪp=j”Nīå\–P8Ē —N&Ū†oŗ;š[Ă(Zé6Ž2ÜP8ĘĆ4ĶMv²²“ĻķųVĢ—ČŁdž¢–ŵ¬ÖģŽaWĘp{W3%¬įĪJgØh Zٚ&tMߚƟ/ĶüčõDK „g=@ėT Žg"BĆw|gō #®Ņ4Ėā±Ćʙ·ÓÖ“5Ķ-ō°Ģ„ŒPtÅ“0\;ø*vŽ™ō®—ĄŽ ńŸÄĶNĒAų{¢]ėŚ¤³slRĪ2ʧ™ĻŲ’€šM=7B~"ųėyi®ėżŌÓ"OÜĘ!ÖæWüį ŲƦivš£f·]ˆGøļÅsŌō*RčuÅo¢=:Ēøé]~‰įō—3_‚ßģW,ßC3NķćŅXĒ–õ¹GXIŌż”oāĶf8ŗ¢A½ZLæ§­rŚæ‰#Ļ2Ŗ/#œNʐSĮųNĒJņāT’G‰w©pݳ־¤¶·¶X—›$œę¼ŹµŲÄXķn ĮĆžėÓŅ·V(Ę9Ē>õŹŲäō&Āž*8DŹ’7'§½#}ŻNkń·oj »•¶{ŠkN8ŪK²HRrģ:sҼÓĒmü-kqÆŽ„„Ŗ)b\ąž8™×Ÿ™æoi—Z_Ć%iPŃ<Ņ&1ė’9ü+óÓÄ^5ńgu6ÖäĆĖ9ņXbøżGF`L‘3ī;Š#–Ž[ŹU•–?_ZÕÓē-p‚rvä“@™Šė1Ś4)"¬#Ø5ę’} ČŹN=}Ø'œœ@,$'=TՋu—k Ž”[ŗˆ¼o²ąBų=‹Ś°tŁīķ'a9RüēżŖŌkؚM΁õÅf\Ip—µ¹ĶžpŁź(ye”(NÖõ5rŚÖ+‘óŖ¶Ž™ žÉą‹ˆPٲąķĮ=ŖÆa1x ŹG‰Ž~ņV ½Ŗ8²!?/lt V/é’Gæä­Ųīn4¹ °¶S”}ź ¢¬ˆēÖą¹“ĢŖĆ®z±. ÓZHc‘wĄĻzeEUÆxĖ_µZęāŚęr¹äc½nYÜÉ.AĒPG€:]6ę(åč1ŻOqZ7[ÄåāaäõśP±-¤„]$SÓ<ÖģŃ闶mŔG$¬›˜}ÓėAQ••¼Yįé4ĖŁS.cź éųWž¤o;<,9黌·;)Čóæxm^ !a( Ƈ¼W¢Ļ¢j±źČūVNJƒœē­ä́ޔīxļÅ’‡ŗ_‹t8üQ¦A/ü$–Œ]•8ó†2”‘•CŲžüA“’Š%“ŗSˆ“vȽćÆų׳X^YĪåušąķaŽkŃ¢yõ7ŠćgŠmMōĶespš.¾g;~ž•ģ/m¼Ė“šā»Ž9>¤:}é-yæ?Ā}*Œ×ęĶ絆fuéרō¦‘} ö·>Mʆ›Ė,0:W€ü_šżµ„‡U²ŠBҲ—s“ß…X”ŸCēŻ*;}JüK؈­Č|§Ģƒ<ąīu?Gg§Fmõ'Õt»‰[yŹį”Ültõ±*>y×ō ż#QeņRāŻœœćŒVV­sgöVŹxēLP>Ty•äs4’:8 Œž5ƒöAft«ĆŽG„sŒŠ)įFfäńšŅM\ē`„IŲ7LP†tŽŌl/ –ŪP­¤mĮ0[r=:īŻ×2Ū(ćŽE2/müė"·æ5-ĶšĀĪŽ$ sĒ­Y‹^Ü£AĻL(ā±.R{…SĖCĻ4¶:4Ä;“‘ <Ž™-ļ؁„˜ĢyėžhÖ×s+¬±¹ q]ݧˆ®ć‰‘ŠøøėL:ūQ3Žxžb2vŒ ‘®"³ tļ@_l̤‡cŪ“ŻUžśÖ4‰6„<ń֑§9•§ÅsmN¼;VŠXŁd3*»c­)lK‘‡>č¤A,䊳qdŒ#‘ŠzˆŲj&4^!“Ļdyŗž„õ«·rÉØBčW zö­Q|ØēRõ“WFKrł$r:Õ«^×V¾A pvۜÕMóĆ}½A¹—Žõ4é-Ō,®ÅÉn•£ūĖuV“bńp;Öv «q'–Gąp0+DiŲ‹ģ–ŅÄUēRÄćä{ÖMŻĪ›£#E-Ā*ī=Ŗ£Hj-°ń>Ÿ°˜™“ų5µ>¹ku u‘¼×B¢o G=w«j2A*$Ļ$@ĻQ^'ŖxŅēO½0Ķ<ķ ²Ąķ#ŅŽTl¢užń‡ö‹¢"„rŲ<õÆFøŅ’śīNAōؒDJ':śEģ·§ē3õ¬ĶA¦€ŗÅ’pć„Ģ¹Qä÷ŗ•ü:’ÅqŻĀd¶"@ēŚ½›CЧ»“C1n#ØĮ5|ˆŅ1Ō¹©xrxĪL-Ē­b5€h¤±§cSĢ|Cą»k×fhįµŗŻžµS‘Ÿ„qcįuĖ\C#LģPĮĆƒžmŸIxkĀŚ~™jEݬ3|øéŸĘ›}įM.ź6»‚īęŚēs ųQéĒJ)ģęæĆŚØh’"\ŁEzæ+”o©ó^āæ­īrøę‚@«“ŁĻAų~µėsz8?|1Õu BFfżÓ gś×}yį[–ŽČ߯ŪjöÖŲCś7~•DMŲķ›; \„GmJŽóćūE֞_ķ Æ"Ÿ½Zéį}sHŃ®ųÉrŅæļ#gĀHč=…!øō>ėżžuƇóų.ŽĶšĖKŽw¹2ŒÉ! ż1_šß­-$ńÖŖÖ>"Šm<Ż<Š\ ܃ųRmŽäø3źƒ’?į9š‘ѼnßmӚŽH¢ŗ\ØF<©ö<+Źą…ļĀn}Y.ēŗ¶”2ĀĶĢxüz‘B›½Œ¹^§+« GZ·ŗ†ĆĢy¤ł0ČpHā¾eńĒĀψZ¼-Ć×öń8e;dL2µÖ­.“éõ ›@Ŗ…×ę|u+ž{RqøłQ½āß‹Ž šņk1ßi­uŖZ1łp§ŗĆÅ~~ų«Å>ńĘ»ØI‘kkØ:ŽP+Žxėéżjc ¢`xoĮšn£ā;Zx­d“.?™ōÆp—į~Ÿ¤],÷Wßi]‡ä9õ«„cµ“Ō£Še¶].ģIœ0)Žƒ ę½ƒįģ-ń?Q‡dyX K #ŹĖgµc"ŗßæg{›õ/OcsāxŸlXķš_„~rjžÕķÆZ4ÓęŠl;£8Œś~µF©ßC×~érjM§Ķg¶ä|Õą:āŪOŗƒÅVqNжļ|\ä•tƒ?B~xŅ×ƓZ.{h²”3©čkŚu;|ÖzĢ –Øź\Ž$ČČĮüæZĪTȑå?|Y’ ęßK×gš ķåR~T.¹łzpkē/|j¶ń-”ŗQÓ"į6šØ1ҳTŒœJ’üq¦ė„¼Z†“okó¢}ķ6sœĖó®gö€ųjžų‰¢üIš“–£^40^ģłVŽ6ć;Õņ;Ž:3Öüi§|7š’€ü5ÆŲA šäMåŻO nŽńĒ^õĀK‡«é>/—DM5’³¦—+"±azmģ?Nkß¼Cįßų'OÓµmCK½Ō-5ešÜš8V‘Ē4š+”ė>¾•ā[;CXK=Ś&0žļę'ä}‹T ö’"ø½CĀ~!× ’VšÖ+µķéņLži\KÕ¼ši÷v„®HœœÆ­vņé2é‹$ĶoFKc;}©Ō¹ČŚųĀ×LŌ‰d[“ŽOOʽ.×āö©¢“ך< gYŠA•ĒøĒ4 żMĻüU»ń‡ĆY|!fóŪŽ™šIqĢm‘Œb©h’üŖü1åŽÆwk­Å)C¶#“Œ6qŌņ(°¹¬yŸĆoųH#ø{MGA‘‰Štńéõ+×¢ų󒗃Ƽ){„];#—†čeB@õ4čłņK»Z÷]±IÖ©<éVSÓ#·½W×6¬”Ģ@d…źi7b”¬bčģ²Éę%£ÜlĻ#?ZõĻ ŪųffÓWžÉŽĖV@&"KŸ]ßŅ©"„>ĒčæĆ掶B4»ū<Ü[[ł‹ęøµAą×’­^ƒ¤xĖß®$·¼Ō¬-eyJ4’€銮Cž}ĻoŚįźxSÄ#PšõĢZ–”ęD‘ ?"rNćž{זųÄwqhŸŁwĻ ¤7,Wæ¦zōØ"ż óxKńUĢĪØéq’£žäWÖß¼E«hh¾ń“›ōū8³¹Q€ĄžŒ•¤gm cęxĻķš_ZšēŽ“ÆiWņŻųQ>uƕ/ĻS“’zcÓŽŗ»Ž’Eį /ź%§øĮa#¶HĄ¦„u©ŖGšÓć]‡…üy¦E­@ßŲ—S*Ė3« g–éĻū)äé~'Ńmnt“‹ģf RD;„£žĻ„O.„³āß|1Óį6’ĆÄŽc¦] ßlŽ0ĮG”÷ļ_üKš-×Ć?¤6ĒSÓ§fxÕ×ę:ŒŸCĒ$Ž“ų°÷¾Ō|9©éV0™YFš£+Ńą}h.ę9>i#L–LpG¾kžĶō&’×MŌ…Ä;vG,y—·^ō'`=kąÖ¹ńĻ\@ogøŃŖM‡‰é€1Īkķ³} b>‘ĘHĶ v)OotDńŪÅöĒthŃÉmĆżkņOāuå·‰µč/t«½2HnYxö䌞†¦ŚšS”›ćŪX`ßho󊱿kįżæėį~Τ•ē#Ņ‘½3ꯀ¾%“\šīÆšŅļģĢŪó Ź’3 ,WŻ?šLŚ2Łwö²¾ų[ā—ĆM½ČžB;£­Ļ©vVŌģ§£?®ėķŚŹį’ŻĀĻ ASČ ūW“x+[žīĘ;.Ī™8Ī3Šā؍OØt‹m;ā‚5æj"Žx®`hŠ?;ežķČü’ĮS’b­N-7şü3”›xNćž'ђ ¶mœ8Ē\u®G¤”‰”OęgÅZaW‚īŽÜż’Qøœä)ōϵp¾D‰.ĀI@^…7Šą« I¦TŸæō¬É33ˆĢƒpõ=jqņōTßI,e‚G sŒc?z‚ žr‚W,޽±ŽÆ[żŃęcüM±4Di0ŚXĻ#Ņ– e›~”[óŖ~ø8«v7ś®‹Ŗh¾.šÅŪiž,ҧKė Š¤›gƒõ÷Ę(: Ļōu’‚ZžŲ²žŁ_³üzķ„Ļ­Gd¶ZäPĶ™mo#Id=ąćЊż%—O™`x'Fū¤w®LDN”Ž_ŅN”e5“¦gPLykņ’ć…®ü-āń®ÜYI?†uū5ć!Į·œgktśāø$‡|­ńkĄ:'ğ‡Ś·„5Xć{»Hf–ĘI—9C’ÉĒ$÷">]|$ų“¬h*¦—;“֘M Ē"µ§Ų‰-–ŁŻŲ‚ĮäŠĪYŠ»$yČldśW£Lā’ŌÆ4;|֐Æ×ž”±¤‹į–ÉķZ݇I¶F"VPģx=3ķU‰ū>÷@ŲN£Ø£nŹé˜$qŠl»c&4\œēėA¬BÜ 07„G«Ų6„„ŻŚÅ,]®$·ž3‰!u ‚‡×ŠČK©żžĮ0’jžŌ_±—„n“Z»ŸćĆ)bŽIāKøā±×|iĻŗŸZž…¼5ńJĖÄ>šÄŲ`šö©G|’€¦Ņč ¬Œ:žŽõĻV'B=[Rˆjšz-‹C"ščAŖ–Bę×ģŚƒ!w÷s¦>ņ÷ā¼ź†±‰ü²Įg?b$»¾Öõ XĪ]`}ĆņmįĮ?¾¶Sźx<ą­1¹ž×ÓΘaŽ;øŲÅ2g˜ŲpAü«’j颎Z‚; L—÷č¹ŚˆÖ½Æį§ZŻ#·¾TIŻČź?É®z“Ę²¼#se®i·6ofó»!åÜĻzš‰ŸfŅl¤½±Gŗ²ˆīT wļ\t£®¦Žg#š³Ē2č.ÓtĖ×_ģ¶į² ?Ø’=kī}6UŽTž ČeÜs‘^ż(hqWgµč~"•¢¬6”ō­SMœ øE’[vņ8Zé<Ł#œŽĆęf‘ŌĘ:c­Wš Ś’#“ŲÖ±—C>VkčšY&B¬ŹĢkrāIģö“¹ŃIźz՚A$vńk¶Ép!Kyv€ĮNAĄžu¾—{ž2‡aźĒ„Z…įó÷OŠScfkvWe=ĒhtżćF’'9"µąbnC÷~”v%kß³®ö;[=+ė—lKDä’zc  žthĆ©É, wÄó“ŹŌ‘:Ė;—ʁs•&ŒČbžøŌųķŒa‚śP EŻ”°F}1ĮØeGh¤M„möéAf]¬2 ĘEĮwµnŻŲ9I>Żh"R¶„āāFŸc!#×XźZLZ^A¾0A|˜}(-ž³©@ҿ٠I žĆ޹é&Å{ūP€‚uć>YĖūÕŻĪk˜™Ł>é<ā¦[ ĻXšŖĻm!”Lęŗ]nŃ5T‚ĢFnµ9Ūe“h2ó?eQłV‘ÕLśŸöh’‚zx’↧‰>.ŽGąÆC 2i­Ÿ“Ü!ä? żæųsš‡į÷Ā‹;=;ῆ4ż­Å³Ī!]óz±=A5›™·1ė–Ö–š+ęY½Ļ&“ķģ.Æä.J†I£ö+u‰Õ2—ŠzśŃ©<*ŸŽ©õėXĖp*jڼ7+K ó”dŌז^kr<ģŹĘŁüŁ4‹Œ{ž[ćoŠ:o‡Ńü©ķē˜!9-Óč+įožÖ¾šÜZ³x—Q¾“d•`œŸīķĶoN OĘOŚSž ꎎ[x~Ҳł$ ·9iNz>Oæ!üuńkÅ_nļ&ŌõBÖĘWóßw ĒFÆN…+Ō•‘ęX1"›Ģ`»zSat³·”Éė]Øó*ĢÖ0F!·–‹ĖĒĢøäж4rHŠƒÉ ē$KWŚ0Ąwõ­ōéŻä·Ó½Q¹ÓŪiRH‘Ś$W„„,D›¤•÷E~‚~ĖšNo“‡ˆtŪ|;«xGĀŅF<뻨ŹČžŹ=ė• ”HžŖ?e?ų'_Ā_Ł_ĆVIiį­]ń‹(ŽÉ˜clrCIÆŠM?DŠ`@U#»@p¼ŹÕø@tV·k)Ē“č{WEeŒ©9čkŠR¹©°‚DÜsŽ„S‘žRŲ#±©3™2m)МÕ{¶TEfQ€s“Ś‚bµ8o^hæu óģ|ććėŻnYaiī%µ³Ż»ĢŻŽ‡×ӊˆ¶ĪŗkCåOŒµg‡> Ó-/bÖµÉP‹sk0l69ĻŅæ/>!üfńæÅ[ū¹¼C®źiŅ>čķ·chōcŽŗiÓ,ąāeT…Č8śRŪX¤NTr&ŗTl.ɐ…Ō+?aÖ“4Ż6÷S8ŽŅbrā²”®'¹ķ^ų}ƳĶ‘śa^Éaą8£dH6Ų•“™3=+FšŒ–ńĀŪ|¼Œō®öÖĻģjŪJwQĢö2 žäģ¶ł”ōĒjŌŃ“ č®Ō_£ cüyćŖLĀüDŗv‹s²IA¶9Ćā¹4ńNœŒi/8Įo»V¢ÄuśN£ÜdeqŒƒŌS.tčęßå ·‡z9Y2‘Ž4Ėū ækmüšqŌUƒ3#ĘRV\öĶIœŽžŪÉ–Ųž÷÷§°©[l01sćó IWāų˜Ģ¾j‡ŪĘé\śĄļ ŁĢ«$'‚uÄ“Ŗöp‘-žŌVuõę ķg&˜±KnĬčĒę_„G9Eø×n%=Ez“ć,­“NB;įU±Ž’—p.“Ó£‰ZVTaÓgŌŃŲé^#zÜZ:|½+cW›PÕ6ŒŒnĻZ”Y暘k9Z9‘—©ÅGm$ņ”1’ńžN:PTb(’H „J¹&£ŗ5]ĢOj 2™eFķבėV¤¼¶’ūę‚qü'ųØĢj“Į4FŲg`@ā¼m<1vڤ7·6ņ}‘ž¼ižŗŸ@ēĆŃi6©§ZIo"¦\ƒĮ'Æ^Ļģ·! ¹Į’dŅ™Ų[]JśóŽ“ł.1ó{ŠI‡ŖĄÖéēA1’wĒČkoa£ÜI§9žÖ 6ģ}s×½|Eń7ƶ¾ńdšĘ›ŚA} ódØ`8śf³åeūC’Ōµ”’ßĖVe™Fw‡ŚøļźlzÄ·„ .WĆ¹śÕFuF|A‡Āz6£‰|ŖłöÄ6¹lžø÷Ļ’]zG…5‹«Ė.’īBłdüĄ‘ŲTT§”q«}ĻPšĶ–—q ķ»ji—Ū<äI7ŽąSą?Ł÷2 ®Ć.F+‚K[AŖųŽūGŌmļķaY‘ēhˆ^3’믭¼#¬Ūx§H°ÕģŚįį&õūƎEwŠ9Ŗ£­»Å²•EäŒ×-|Ęó÷L¬G>•ŽpÉt-[ڈ”P²pÜį»WjŽs¼l ‚r@ė[F'>Ć­a&EiX`s[šæ‡lõŪ £µDŻ·9ĪÖ±š:éLųÅ^ń‡õĖūGNš(Q‡”Į9#Mr7ڜ–϶µ-¬`!nŽzt"¼ź°Öē§”Āź_¼Ø®|Š~SĶo¬HŚO“qeŗ]Œ1œg>µ¬„ŃV~Ē>?M[ÄŠ|/ńĖŪ^ŲXĶ.aü+žüąWź Æö‡†54±Õm%č>•Ń•Yõ÷†oōĖŪ[j©ę2Gs^“n[ČEŅ!€®˜īpOr½„®®ÓČd!ā'8#œR^i/(ݐžõ¹ƒ“–ŅĀ#\«(ćµKojn™į(”zh$ČŌ¼?u§†ø÷±#„pWRʒĢĮöd÷č(6KBŖĶg0?é“‹ü9ęµō­SĪfʆĄ>¢ƒ7w&ÄÉ‡Ļź·’C0ˆ\¶ŻĆ©āŖ2±kė£ ³‹€Ž›x ōÆ×/<õ’8I‡Zæh ŪĪo&bĒ® zŻ­Ä[E¼®ŃKŲĶ»ŒŲŽ iA+)R:sަn(™:{RŁ,Ó~É  ėŗ«FSŸ‘‚F†¦…ą!Ē8ąāø6×yŽéQŲ60FA Ł$pz¾‡gĢļms’éQi‘Y•Wē0¬¤µ£ØK§MTY@ÉČÆ?Ō§DYÜ*ĘN~µrG ÖšīEä U7qjį0Ģ3éŅŖ gŽ!Č|æ(ÉĻ­_H“ē¼f3āSŚ…cE>ē;¶…Q˜Ō8äWŖų[Ä÷dB/ ÄxŚÜńZØŲĻwŅÆŅh敯:dó[/©ż$’'ĄčOjfg–ų«X–f;˜mĪAėĵ}JśīedP€Hje°“].küÅ'̃ųaWnü-›Čįä01Ę®y ;mʘ…ßdr3Œm¬™ō¹ćEķūĄr½€ķ<įcZ»³{äHeRPmįp{ä׊ö^Š(Œ3IČ8µä*ČómoĮ·šušE%»1ŻĻ85ÄųJŗŃ-žvv–7å9Ż14Ž/M¾Tl™fFüóō®µgŗ‚Łķf·SĘ‘Č<¬F ¾¼[$cgœt•«˜'tpé¹:ķ=MH‰¬/aRØį{gžÕ¼u+VEXßv}?„PL„bY?³Ž7+&zuÖ$±¬ØLl=Ļ„Œ‰ō"źF%Q\ 1\äWTž¹…›“‚2i–Asaon”®”'*;cŠāļUÄ1¹F0J@r÷Ņ­‹2ÜL‹Ē­PlN„ī܇ø=«)n4ʉ¤AspƵ•“ŸL×S$[c‘€lwž*Ņ;ó¢KūkU&XŅFē­kh֚o’#xó?­Z¹:õ-2 ›¢“½r·W7±‡·VW@=9"«KjC+Śß\@» oǧZĪøŌ 6ę/rKńƒSml#ut”Č‘¶÷ģ3ҼēÅ×(ļŒZ"2s[Ņ•ŽCF]IļLé8ŽüʆZö}å¢EÜķ°Œö¤ŁÆ“;ėHm!*ldÉ zņO‰žµŌģą¹Ņ'–ÓPbG 2ž^•*Jįķ_Ą×4ķA[Vx£r­}1§MP6ÉQ˜60O-NI)™:ÓĘ$j¼5Hiö·ÖģˆQ]T’Oz…+ciڲ<’]3 vńŠ×Wöõµd'k¢qĄķUķ £+šÆ¬ĮØĀ–ß»hĪķ¼ŸĘøiZٚHJ1ČĮ’9Ēs“kyµw•8Č×čŗdiŪ” œąc“)™JW4µ3mņføēž1\tŽRBcIeœšjĶiōGó?„hšv‚mī>׌Źģg ą{žµ…ćŪ™T¼š,ĪīūZtaƒŽåOį^ŏöįø¼_„ų“Āڜ0^ŻiRIµÜ łDsĪĻÜW¾xŹóNŌęI%Ó ·ÕS$²mĆH08śPaV”įŽ9Š“]fhęgŸNÓc@²Ē×ę8Ī?JśĘĘKü-ÓõhÆĒö2Į£±ū­ŽŸĪ†rž6ž,‡Ē·ki ĢM4ĆYł<ēė]®‹&›£_‹˜¬od\ ʶÉßżjŹP:©_c•šż€µ? jĖ0m³Ēq’Tł#=²kēŻĮWŽ’/Gķśf֋Ėfsß•vŠź‚Fæ‡ĆQū6­e!ń=Ž£j°ø²³™”Ž,ž£æaĪEeĖ­ĆMĪSĀ>*‹I·‚īę$¶`ūä2™GņģkÕ¼wūNųāŅŽÓNÓ,5›Ä yŒäćęhŻbžBT£ š}:Tš咁¬ī4Ķh›Ł•<łŻŸqłS’Ų«a£Ūų¢i§Ł Ń7Häå÷Ƽ>jš~œ5µ¶§łldFd}Š0M ę;‰Vž ų©āK}cP°Ó~č‚G‰B ufź3ļ_üPų¢ų{Äé/†U_Km庐õ*ŹņLh`ŚxFņāKvÖę{+”;JœH;‚?*ō+é|Eyn¢HäņŹŖ’@*ąś§Šóūm^Xõs§É< ØłUßœõ öÆUųqń3Tš^¾ŗ|&—fbźäķeĻ|uėMÄøłž‰ć_PkŚę• Ķų±æł1[ÅĀ>;żÄÖOˆ¼=ŖŁķC ÜyІu`ö>õ64nĒ‚x6üÜų“XŃ2ŗ\Ęb?¼ć§­Qń…ŽÆ§x™,®ŹEęįā‹Ė9y÷ĶZ ėc2ļĒ:®…4ZŪ\yp f}Œ,}+Š<ūUė:“0ų+_²…œøki;Ń čŁ«Œn3Ó~6Üė·>ŅBj—Z4rīø@„Œe‡Jų‡^„iž\ŗ5ūV 7u»ÓQŠQųp=ž„„<© Jq‘éƒÅ~ƒ6™oØųZɼKioØiÓØŠdd1ō>żźZGÄ߬ōĻxøhÖWwWž¹@а²[{6zzW]į»GŒ#4rHŲۊęi’zWŠt_\é0ĻŖÆŁļŠŖĒ"Ę=ŗz×Ğ,Š„Z•ōvš”ŒČJnī¾ō&Å[FsPZ$O$PHe`ōā½Āz«[ŻIayb’<ƅ9ėõ­`Ķ£#K_3x[K«{Įyn¤IęņC gž•Xż¦'¾æ²Ņµ}BI—hF£Ś„@źzUšŲī<ā­#TÕ$µ³š?/h Æ@§æčkØÕüQąmBxō”ńžŸ®<¢$µą²š ķUŹĢdtś÷Ć|įĘ׌įšŪrŽ7g#Ø<ńÅyŸĆvK?YĒab.œÜ$A`FxśT8źrIö>Ōų½i¦F-$|:‡Q½fÆēnø8SŒ`v4—CĄ¾,ųN×Įś½®•§[Ū]i³Ø’9#`B'lžęØh>ŃÆt[ÉĪq#ąLņą¦MæÖ±+”COų]§ųfŚćPµ*ņĶ!FŁ;OÆ„t6:Ż'Ł&µ2†ŚÉ€z’kHĢhłó[ҵ›Oˆ“;Ż4^YĢ„ąī±«ÆƒĒž!šmÄ3KŻÜ;‹–VĄPzčSī+ŸCŲųЉŗ}¢ŸN–1ę€yLń“éÖ¹?‹ ī¼šś/hś0}22‹;ĘłeÉĘģz Ķ®ÄI-ų_ć­Hkr„Њm2Wۜsǧ^kģŁüO§iV’l{I!ÓQFżćsmījJRčbüGų»įæü?F‘q,Ó[Ī~Ļós?xīkåfēūz4ū^Kʦ<Ä0ČäŸ~æ•TcsXŹĒ›kVW›Ūč–žI› ę ?\Wōū źW6_,¼%ā·“ŗšÖĖ$¼qÉēҶŒt¤zGÅK.ņŽ ONh2„īDū¬GךÆĶOŚZöI4;Wū4×7&B—c…Aź1׊‰GBoŠųŹ9Wf*ćÕōĀ/ Ķ«_µ»¬RÄ”vē§JČqÜģüO¢x¾ā[ļi#sŸ–93“uėӊ׏~!šV·¢MŖF,nVų>LL¤ąžø”®l ?d +\×õ gE×no¬m-ä>_™ ¼vö⾆ųó£i6š5­•ü¶×–ƈņ«÷Nz=i¹#9#ü;šš kĆ^ q©]Ep°“¶ė÷™ż‡į_+\źSiw2éSŻłÓA&Āūpqž2)}išU ~-5'„8e8ćõļ~1ńDVŽ(КĪ5Mw3ʄ€Ųć#ž¾“ä¬[I2Éoqfc€Į—­~žŅś&©mā)µ;»O&[ĘpŽ`Ļ©’ĪR±pÜųžŪJŽóQū1X>Åē†ĻzŸĒŽ ŗš«ĮsŹŅ¾rTć’>”)Ih}Eū1ųŹ ™āšeżåÄ2mqmęž”gõā¾Ī†YŲīQ•VĄ õŖ1hПN“ÖōķGFŌ>ĖuBĢɼFHį±ź+ņCǾ¾š/ˆ&Š5ŽXäņnAāc»„S—BƒõÖŠ5‹jbšÖ]ģsŒÆqšśwā֛wāJųį›¹#Ōös@£1ܧ*2=ēI»QžÖ?²Ÿų'7ķ!cūT~ĒžÖ$¹†ćĒŽ±OÖķƇ•]cĪFvīēŌ×Õz]ōśn¦“ÄĘ'“ī+šŖ:¢¬}{ąŪ›ŪĖuń_„ą(Q{6 ü@ŸŅ„Õ¾h~!j:®»¤FŚ&·„6•Ŗ[Oe›#å;HĒRAĻc\­ėØŁüĮJ’csöDż¦~ |»µ»‡Āś– śļ„.Y—ye&[ÉVĒ&>Töü°Ō”k[©‡ļc#Ѓ[įŻŃÉV,ČidW%ˆ *š’OF®ÓΚԱ a”°;}ļzMŹT•g½fuŌL̦6ŲŻņ:ŅØ¶ $ĄqÅLÜ øŃ—ø4É ¢¹CæØ7'Iv !rnjb¶lZ6GF Cd0=Ē„U$ÖŸų"§ķ—ŖžČ¶—‡|ā=jāÓą×Ä…Ó5,›mģļˆŪņp3Ā“īkżą†+Ķ9D3‰ķŁD¶óC”5e”Ś»œv§n'nSé_3ücšĮÕ“=RĪ +{»;µłÕ—£‡ėÉüėĢhĪ[Ÿš·Zv„mqoäKaŖé®c–9 ·œ7#FkńOž _ū0GÆ„§|-§@°yFt”±*d9ܧæžÕPz>-»eÄR±Yą•”—T;)ĘF{VBE¾Bć§=»×”Mœ• ŃK8hQU›ē½7÷ŃŖFŠÅsšŌĀHŽWnPAōØ$r$SÉcڃ8ŹÅĻ<īX†ė“Óī2¬„o<ŠkĆ&Ö$Œ6jš,ąo™NH?ÅAŪLū“ž æū[ų‹ö0żŖ¼ā#Tx>ų–ś7ÅZl§6ļ|«8ĻŻd$œżGBkūõųMkį¹—Vš·ö®”šćĘ®§ :¾ųįœ®āŠł#9rA޲«ŗ(śĀ··ŚnŽŚyŽSyfĘ9ŒĒ®öĪō<šÜćm¬ć Ÿį5åÕEß[;ūL|µųÆš§SÓĪ ķJߨižbd’īŒ¼¹üBŠ’>ÆŪöw½ż˜æh [SÓl.ķ<ā9¾ŻepØvGpē÷°ē§ŹŁ®w½‹>lÖ|7g­i·—«=½ōh ^%õZó2ęk+¶·yÕ;F85Ļ'ŠØŸt|×DW•žM²ā3¹ųÅ}IāŻ:ąXNĶeo,%Xź ø ōĶynM;XüÉńĘŸÆ_G„…'wMĒ8bIĄükļO†\kŅ`‘üūŲSuĆ÷sŽ?Ļ­{øj—йĖZŗXY}Ž8æx\ŽFkÕ,ü[=֖tĖØįv@d9⻢īy²ŽBi§fĄUµ_°o1ĀlV ō#Š“ŒĪ¶Ę%G-Lśv¬-RļlØa×é[­įK爺•>^ļĄŌž ¾ńÉöh€V<®qP¢8[–y I÷!<Jt¤š¹LˆnÕdI“^{¶2O’›ŗŒr)c»@BJ¤Ž™#­6 m īѹBsU¬ģm­§-Ÿ0uĮØ$–źKYI„…ŪŚØE ,‡s¾ę€,å• 3Uˆķ'fŲąsŽŌy6 ÉašYgŚÅūĢr}és"¢Œhn{‘•V'„j½™ƒH|gØ8Ķ;›X­s|'ebŲwīkŸ¾Vi„²”éƒŅ€±b(åx Ę7‘Ē#“ō”,nR $•IēGZ QīuŽš«ė³•1¶3“õÅu_ŁVŗbĖ'œD™Ż»æ’^¢fЉī?žü@ų£©éÖśœ<;įė„ ś­ō{UœeõõÆŲσ?±?ĆĻ„²¦§{wŽüW”^Ź””WĄ'jö®i1· “gŻ=ɌHĄpp8éKW>xXŌ¤Yę³LÕ}Š&@ŽĆš°·WB&šhŲΓأ/ūRģ—{ŸÜgŒś×7s«\K#ŶģzÖ)©ēŗæŒ“Ķ)¦ūuņµĀnkåO‰ŸŽĻNÕµ8®m”²·]ļŗ@ƒč2y>Õ“ l~>|żæ¼k`Ö:ŻĀx‹žžF܄.xQŽ+ń_ā—ķć/Üßܦ­ØAĖ—23üĆ=‡µzxl6ŗ“)XłĘ÷Sšī9 „īn[åcó1īMSŽ9d‹rk¹+5Ŗt-$1Ŗ¶IßÕsR,00%Õ7“Œ=KĘČ”«jŅK…ģŻ­±§mgĢęXÕ[Ÿ›×Ҿ•ųū3|Lż u{=+Ąś”œgA.©%³dLüÜ÷ćµa9TāNæ±ēüįæĮX¾$߯óšßˆ%µuµR®¬6稒īEs*Š‘Ąhö¬2 §7;Ōģō+JīöuB¤®qցĒsŒ—}ÄĢJķ—§&ØÜ•“LŹ6ī{ŌN] Ģ »ē”Œ6Œ+9krL2bBsĒ9¬€³¢n$ )ć ńŒā» [Ķéy°qˆ  ÓÜČģŁŁ•N…liöŽpU2onĀ€-ŚŲ>Ÿp|·imŲōcҤŌļ-’eM»ŒŒ Ö-‡q~YÕs‡_J–;‹‰ŲnbH§ve&ö4ķeu|K÷Jæqa˜Ü:õŖ$®–Nź„GÕ3XČź<°ĶŲńҁ lægm„nējģ{f2Ā» <ŠI^V+“ēןqyrG \’1@ §Żm)įƵn$ŹŅ4JŁjŠįŠįHĆuõF.|æ:Ė/Żlt VÖåń§ī€>óŪÖ²–Õ·«œ@Ė껵(ćęsŚØEnÖäģo˜P˜µ}RĖ1«JŠz•ąęä¾½—Q2I#§=ā˜I;Mź\tȤ‹O 6;[Ґ©k-²B1ҹ-Bِ¹EmŁü3@š0ĶŅLbvĀ甫’[ż­ 4ƞ9ģh!@ēn-§°»:‰#ź5{QÖvAĖŗ }Ś  9īöKĘŠNyā­jQŃ#‘@ tė@XʑĀT0AĻZd–ÄŹŗ·„niևOA2«:gņ®[ÄFŃåi‰˜=MexfM³4 ­\ü¾µź–Śävń‹K†!O ĒJåu‰ydfĊO^¼U=/Q·Ó²±B“ ¦hŻWT‚ē7Ū‹|ń“z×?isö‰ˆ}Č3ļ@Ķ›ˆŅŲoĢOP+žžž+‚„Pn Q+•‰Īā9ļķVY]b?*b;SÜŽŁ„D+‘åA[V‘Å1ˆ|­Ķ!ŽS ‚x؏8Ü žt—×H f.ŗÕ“r°Ŗ§É‡ō  «-N ®¤· ,n§aŽøŻō®šÉ ŠfdĢYėļ@õ(ģö«Ę0ķ×ÜÖ'öiøŹœlĪ9ķ@Ėą’*Łę2¬Ŗ£<śW 5œ0ܰI¾lņ¤ó@›4­ –7W³Ć±ćžÕÓ[Śe¤šGH.)ĻĶ@£.†ī“cs<įѶ`ņz]ˆ'ž;hć#F((ńßX‹»g•öœž9ÆŸĆf+†Ōģ’[bĒ$n;\j™&md_[,€Ė"/ŸÜš¤Ö1Ķ„ŻŁø€ %ŃńŤŽĶgn„Ōü»xĶ|Ēā/ Oā&mdU› · »3ųSå[›XųóK¼šž«7‡uY|Ė AI)»äÖ&«įčå”ÜC8ƒhĪŅ24ŌlK‡cÕ4ye"K|¢X)Ą<Öփ«j:%ՅÖ&xć”HłÜ½:Vuv°S>Ē“ń_‚5ż Äó„—’6¼mŻNL×yr›35Õ·@܊óē§LN–ÖöŅ{³6aŪó9Ź×¢|ŌŽ—­Ķa¬ĶxšT’å c„ōśÕŅ•ˆœYõtšEĪ­ ­e,WØŻønQߚʗHžĘ4“rŗž€öÆF9'å Ó®s灰.ӁČ÷ƒ«é 0- N÷TpEoĶ”Ļ(ōg5>›yl’)}qłV¶•Ø5”r®XœÖLŅ<ĆāŌz–”£^ėZr=Ö§mbN[ v#Ҿń^·>¦ācmh’¤`:Ą›v·rzs\µbwĀGŸi÷—-©$ҼČČū¢½ģŃ4V©_%¤l@ÜW8ü+‰­MN{eXx‹A¾U»³—ĢGL‚Ć<ćņÆÓO†ŸµÆ‰ӗUļ„„~kÆļ>c×µk#)S>ŠųaćÉ­„ƒi{ˆƒ€Ć8+_zi>&ķ¶ÄET]£ŽµÓu"nY]¼S„-…<}*żŻŒĢT–(9•ŗw8¤¬gN%x˜‡`zƒTb¾ū,ČŹŹ¤ą÷¦I»y­ZŽ[<;vČFM|ńćiĘ9ęŒ Ł8R(6‹Šł·CŌ5 üNņ>¢,ŒœaĮĒė_PiV©i7³;c‹gئi¹­Øü@‰m’Ż Ęc4L:m8Ū}ėŽt?ÅćoišŃ³·ßlLŠĮ€Ė/sžķd–†—‰4ĖhaÓķęyŒnT€@U>’‘Ŗšb_ų¦;›ų,Č·ƒĢWmł ‘œū⃚„3"ĀŅŽćT„» eŹ«”9ˆ{ÆJļ¼iāĻź^Ōü0Ó_Y\Ė1¶ i čPõäńČ Ī4{Ÿų*×Åv·“ŽM©A²)XįcĮaŠJś_Ÿ.¢óģnć™ēņY… ¬HĮČ=8ĶB‘©š+Å6ŚWŒµ"’ĆöśĘ•päˆ$^©ĻjŌż¤üį›]?ū[ĮIŖX[1Üö’Ė #†j%G×Cę ÄmķīķÖÖćN’1ÆśĻ”’ha¼ŗ˜—‘nGŹv÷ļŒU$hKҼ?i%‚3†79 ¬‘®JI,­õi¤švBT•^E2TšU“šÄ.“$Ōō#‘čkŽõŸėzχ/ešÕĖY( ’#†eĮ8ō’ §¹OĮ÷ŚĒ‡ōč-”2Så(ĮĒ©ÅG†ų[Ä£B¹¾·?c[˜§(rpO×u®źi²ž[{™¬§‘K >1Ī ŠmšÅ]ji|3ų‚ŚU”š£{s­¹Ü‚āYy…_ʽ:!¢Ć¦Üj:•ÜW³d÷?{ZC”{MÆ|K¶/=¦ŒŠ&/\ų?ҽ—Į’¬ōqk„kśGŚ­®€†P «^3B¦eÉ©„ā{/†’4šµī™µž9Ą .ß|׉ĄśQÖEÜ/.Ķų]ĒæJv+9?6ēĽ…ō°O>l1¢½ėĆ>7žĖšĶ¦¢u4½™r ł˜ w¤RWV$šVœtķaUKs„Q‘ė֜eŌ‡ĢLž/ÖüC¦Įa©M8ŗPA’ 0ćŸZĄ¹Ń"0Ī—¢YŌ¶ą3æOʶēDß”Ś|#ŒčŗūIqq½ŒÄ_$+_һü{§j‚ĖEž4°;¤k˜\²”ĒFE)4iĪŸLńž§m„ėWr]j¶÷S3<€oņyž/NkŃe»M#JIRīx/#8ŚŖ>ī;Ÿ­@łŃŅYų×GńVmm{qq§hą„éęē'é‘Y¾0ŠĄųVćT‚;y/¢q†/ó:m©q"R<óĀW~×5dø…"ŗ’Vē… }Mv^&šĶ¬_f»Š®ŌŪ„,ĜäŒńķŅ’‹@›HÄK××ō»[k†GHÕ¢VUźzžõ‡„ü&ÓüWµÖ d¶ŌķīĪʈ²Ē’0ŁéŚØøŌč}/­ü!š¦įŻž;Ųt}B2<Ł£“ļg€Čķ_%|Cš“2ų‚īīĪņW™b „pOpćÓµR“*ē¢ųoću»¼ā™nÆtˆc‚~©…Į=ˆ®ŠĖĘ~š±£Üé‚9¤yC³‘“g‘Ī‰1{#ļ߈ŗų«į|—:L%Ym£ūė’Ł KQšüņÕtżcEÕtĘÓä‡ģ±Jd”;°}?:Ļ—[‡%h×­§Õ4(Æ'[˜dŲ&fŚöś× ą?iZ½ķę—Įóą!ń·”wdJ'§ėŚ:֑rš|Ńż°ę4Ų;ūבZhxv@.UÕŌāBxĶ+ŪS2=M4kķzŪP¶øh®B»°Ųļė]BŪ]4 ±\]YØ9ĘJóģkCh#/āNŸwŖųY„tכYUŚS½äUĒŻĻ~+£š©š„Ļ‚mƒļ§°ÖCķ¼µ”Łõ#ÓÆĶ-„ĪŪÅæüoć//ˆ“‹9õVӊ‚TļNMy¦‘’ 2éęŽļN»ÓēUĆCƒō5:~‡gc¼ś$Ÿlŗß ¶öv!F;T­>­ÄpĮ2^Fģ g!Šqøb’‘1}Ī_QÕ`¶ÖÖźwo¹µrXŽ¢©ŽÅu© ģĪ‘)Gą~ļ#€ÕF'įø¼_ M=µš]Cjepbßü9Čéü«ßāńēŽdšn”ąKØRŠ.0’/2@qĻ'§j8Ÿ.ŪXj'‰“GŌ-ŸGŽŁŒ“E0 šAéҽģxƒX\ö’Ck©+ęź©Ē śA›±ęŅZ:_“¬‰ 8Ų€cœ~½k®‹ģdpÉ5…Ū1“§īäēŸjiŲg§|6ń‡‰@]SŅ56²½ˆĶ Q*Ÿ–^¼ć±ā¾žųsŒŚ„¼- cnH䏔®v7+/Å/ŠŚsEhNņ5XŌž—Ķźē§ć^"EŚņdBżóījÅcė/üŌžč6Ž$šŚ¤öņĒM6ŁS;€š“Åöŗę„s¦ė*I“łM']ޟ˜4ŅõʅöҬ2Ś»@G9ø?ެüuį9”Óa’ėÅšĆ$°“²b&ƒß8Ę™ųˆŗ†”żÅĖęĢĆ+F霔u8#ō®ÆWń=׉ķ-U_:Č\Xzš,mÓSCńē†u}7U³‘ŚĪÆ(^ wĄükõCĄž.³ń&™§]Bąot˜*±ōŖ1="/”ƒ8Ļ_ZłcöŖš*k$>7ū2łöŒ£1ę ?N~”­Ļƒ Š…O$śŠś{ą>·¦_i·Ÿ 5–K;i¼Ū‹k†9¹ćŲ t: }»’Ģż§'żŒ?j«MÄ3]§ĆO3iśƒF H&'÷rŲÉ ŸC_Ųf®¶ĖsķĢ7v3*Ķ”ź¤dÖ²­¤zŲ÷æzźéZ¢Ā.YŹß½]ŲĒ>ž•õ߉n"ŸĖ·Ó¼ØnīIŠz„pĪ&£łŲ’‚»ü/ń_ķCšĘ6:χ`’…ćš¾ōkZ]Ī óÆģyŽŖ§;² ‚;•ńwāĖ(īÕµ{•ą‘˜ø`#wR;sÅ]=ĖQŻo!—øśŌI 2*a#®čHóźG ²Åµš"ĮŠšJœƒōŖˆNęP¶Õķ &IW-üŖ…øĖ6Ś ä-E)U`Æõ6ćˆÉŽPļA¤{¬™mæÆ„jŚ2Lnä)ļĘh7¦Ėś‹]\iņAlŖ.£"x<¬‹Ź²žÄkżą‡’šP3ö·ż•|7įo]Ü[üUšu¼:6¹Ɨi0 $ĮĻ,(9<ē9÷%£¶2±ūv/™0ķm łOPAī+—Ōt›y”»°ŗ‡BGCŲיR6%³āŽĒū Ņ×Å7š%¹ø°&ÖņXāÜ[1#÷ƒ¹žząuā¾ų³šæKń®}įø †k+ØŚźÄ‡FŪIŚHõ~UšSłżŖ¾ Mš—ā~µäŪ­¦ƒtĘb­œ,¹9Ēašłt@Ņæ’«ēŌÖ»)»£ ±*Jņļ2wNJ®ĪpJ±Üx<õ®“qĖb›G¹•9+œņ:R7—ˆ®Ļ!H– "÷³õ¦Ē‡$õč(*–6»”‘¹F~µv<įKŸėAŻNBÜAmym ˜HÓG—Œ'PąžĮąŒŸµV”ūF~Ė·ßµmVپ0|<™_H28I®ąQ¹0:ć¬dŽ8PzŌĻįgl%ŠžŽ¾|DŅücįoxźŹDe”}X‚A‰lƉAƒOē^č–vFŲ­øW·oR§Œ×—Q"¼Z‚C¶S¹ęˆķeīE5š]Ł‹]Õ~M®ųJŹĘļĀ7RVŁZ0M»\ŲŽqŪ=ń\“Fēņ—į¶Ōģ-ķn™„FyąąõśWŸx«@°Ņµ­Aōńs-¶ķŹ\a‚ūÖ2ÜŅ1;?†æbšĪ”n—’Ē~ļyĄ>ƾām¼U¦Ł„…ä“ķPÆģ…cčk–„-nh|Éć}ŪkŠŃFØŅf@„ryžu»š×ā,ž ńʃqŖI~šŒ`¼pØ8ĆåųÖō§m‰śi„Śé^"Ņ Ž•ØĄ.oņݱ¹zäĶҦ-4±Ź»$‰ˆ?Zōa3Ķ­”æ=ŗK›ž‹TķnSćå~‡­tEÜ┬tvŗ“l…ųȝs*^\–Nā~ļ„j¦•ĪŸCX"aĆnOÓ‰āØfa™LõƒZq¬®ļ ø‚§¶‰§ĀBę‚e~†Ż“ibd䤹ŠĢŌ7¬QóĄģ“™šI>ņĪß\õ­(ǘٌŲĒį@­„ÖŻŃ#88›]‡_0Éņąm"€;>WcŽyéV-n|ŁLNpēŠŹR,=žēfU;OzĪ0}›-#2Œćšƒrŗµ·šŅ,h­]2Ė},į±łA·½ ”¢ŁæƒŽÕ ņDÜćÕ&Ó"ŽćDŠu饬åRĘѦvVްhÖń”‚0:U՚ūĪóŸJjR§Ż…|'ŖkZ¤Z?†mQÖ%;"‚>yéĻ ÆÓƀ°“gu¦xļć):Ī·ė$:8$CĒi§=ź½”ŖŠGė÷„|3Ŗč6ŠižŃ“Xm$ĆAś Vv™XŜp‘*µ-ŒŲŪ%”Ø—•ō5$óČNäŪ³©ķHĘRŌ® ŹóķYsx•,J‰u𔺒kŗ¤sźˆ Xăi?ķ0?Źæ’jŪ^ńž«›įmZę9Vb_Ėv6š§”Į³ÆźÕżÅżķĆČģ2ĆÉõ®y„‰¢;Ć0zW •Ž*µ č Ā©ćŽ•4E—‹+ōĪ Ė”zÜQÅNm¼ķĒōęƒ&ū–zsķ] p9ē„z'ƒ<ć_ˆZŌ^ų}į‹Ż\o›jFJ*ē,8Åe9šB:Ÿ·²'ü1¼C拞7ßj)"ɍiŠĒū ć8ż<|żŸžü$šm†~hśu–š"Q+ˆBł‡Ę:÷®µśp=~ >8ÅüĆåö­{-ÄĘI1°ö®ČŲŻū7 F Ę:Œt„k ”/·5œ„Ų“ĢvA–Ǜ۳‘8¶x QŹ·zŒ²«¬n9šÄŗ×§hŚ;vĪ?…FIü)¤tB'‚xūāׄü/¤j·ˆ5ė-&[vĆĀņ#}~Z|cż»¼A©&„¤ü9a£łMpP ?CŽMm f§ēöÆāļx§T“Tń.§uŖjyi_;{v¢ Tl1?Ž+²;Ķō&ø@Œ6|Ų©m­ēœ8·V“č3Nrčfw¾š+źr!»YŒc5ōF‰ąg C¬NČ-Ō×4˜ĻJѼ9ą¬ö "6ߘ`W Yč–Ö»JEL •Œ„ŠW6–ŃԃæNõæ£ĄĶ¹%ܼõA’äub;p›v+8ļžkZ­³5控½Y‘ĘéĪØÓ›kÕQ±Ī+¢{Æ;ķ:I 9ėŅ­HF¹]"hRęš‚y$Ž>8ǽtŗ—$j‰…qĄē”¦– VvI”†'©­HćøÓŻd<Øōī*” 6¬Ņ0+”>՜ė<× ņ–qŃMh•€»ØŲ¤K Üj­·LöśVmž©a ŖČ³G v’Ja`Ń5µBÉvA^v°­V½ž-ŖÆ¹Ī;PKŅhóż„¶g–8 é]“I§Ü/Ś‘ž;ŠO*)źÉ¦Ķr%µ }ŚĄ¼³HĮŹQéæeڼĮž¾Õ6„¤ŚĖn&·aęó@ŽCū6włą 8üiZ[˜Ā“ĆlĄvR9ÅRžż­åi6™q銽µo$Ä®OB;V]śC ާpGc@ärŽÅt9vOĢ3]­œ“(ŽW9äu N]KN—MG(žh1\·ØŁżöĘØż2;ę‚$ķ”å“Ė),ß3x5 ßÉŌ†FW,$ælŚIäVѰ‚hB2Œž£Ņƒ@±žŚ×uøb1ÓŖ Bę9œ,¤sĶ9"Sˆ!+šX”pź£ļg„t©łĀ …?C\äaŌ7ż¦Ų»ƒX}ŚY¶¶±¶•e„™N¦ßø}É“04d¶²-²²E½‡\u5•0E,ŒÉ°õ#·0/§Äę0›ŠŸŹ®Ą¶ź¤ćkg+Ž”:MZÜļ¶ SßŅøøQRńÖ]Kw4jŽi“¶×S“R‚7))ėR{‹i!1É< /B ĘiŲ©D£¢2n9Č8ĶtšUؑ•X£®)cؖ8”E*@Å`< HNqĻd³ÜH„ƒ¼ŽĘ±Ģ‰3,% f€±e\yR:óœr)ŃŹŒŅFdR:qM”'szĻģ²F°Ī«Į㊟R²z‰ćpёœ“T 3‹Ą²µ•Šp¤`ÕēZżņGz%‚tf,Hē$Š%©†‰ kQ[;š6:ŻÅ‚¦mÆ×½nh5ĖyŽKŽĄö Š‚]?Īg™T¬L0ĆźTŒ®™äL‹ø€gė\Õ.#¶M!aӢ޲Žß_„mųb4¶·k[˜ŁŃų{ WŸRFńŲī,ģ Uo³ČŖģpC*$ö‹$śt‰oxœ”'å&•9 śGįWeń–šjSGk«[&EP@o§Oν ä¼¢A$„“ŠƒŅ½*G=Td[X»ołŪnsķRßi÷Q?˜n¾ę “mź;×AĶa$ŌćŌlÓO¼¹ §`Ļē\Mķø†ay¬¼r(nĀķģ¦A Ą Wk®ąAäWÅß“€ļ4#UŅa‘,nĶ,‘õ}xņ*f“±½3Ąü9 °¬2NwOø‚kŠ&—ūZÄq•–#€ ļ^dÖ§Dv(eźQ8ŠöŅK&#p.8"»…ž?¾ųyā„Ld³ŗ`f<ƒƒĒNA©ˆŚč~”x[ĒÖS<”+0RūIۜ ŸĻ5śšoā%Ķزž]ćq©õŃcštĻnń“éņĒqi:ÉŠĄĒČ鎓|=āi5“ä„PNkŖ ā©z’KKwuŻÉ=Aė\ģś-¬ģ³ $I‡=ėS”³™`>a޹ķoCµÕćh.£Rąą1Ø)JĒ™Ż|Ńåø‰ņ•‘÷ØčÄ×c/‡ą:QKįFŻ€ēŠØ»F]˜5½K zāxno#WĀłlä¦ōéš×ŃąEŸ2!óAĪ}hę6ę=2]IķōŅ̤Æ^½+œŅüN—fHЉ œa…I.F£źVr/•,8”ž ¬‹›|2øeĻBzŠfmXˆāq"±/Œ7”®ŽĪO6"Jo\ńŽ“Ō/­¶Žķ¹ķŚŗM"7eņ—ę@xƒ3›ńV¬t¼[H܂ ńRŅ+ē’W|3Ŗ0EVŗ–źĖMh’įvµKwÆ,Hļ侕”å ĮÅ i‹”ŹBÉö©#,IŚ8Ą­ż>Õ,°d"RéXó3Ež½ŖŁJ'…·ķ+Ūė^_Ŗ•ŗ¶ž8§*å ƒŸŗh±iįūiZ„ßöõĀ_[’Bķ!ŚÆaµÕŌÄŠ¬ŒIhē5VŌl謵ˆ§’ę9 tŲ@ė`×%¦NØ×jīƝ˜ź((ˇShÕ|Ō`Tć §ŠČń-;”`įń]t>ī(.1¹ņž³ŠćÕ\XÜE%’傜ļߞŽŌż_ǚø:ŗ¹} ™sÓ·5<ˆčŒQ»¤ė—0,ŅČŅ[œWUcwe čUȑŽ{cœ¢–ˆÉĮ|7‘Čńˆ%±ü«×<; Aqhg™$voĒ5&'7qxt+¹įŠ6¶9ĆqĮØĪ”ö†3˰ī>µq€›±$¶P^D0©ŻéXvȶ'dŹbĻ@*ł{Ļ©ŃĶÆC5‰·w\“ŠŽµĖYĶg6ł#eGVĒ'ÆŅ±,Ų3O3IŹ»ĻJŽS)+ž3×ė@īQ¤Å”sŠē­ThļLķū•k03ycŽ€ø†ŽŽpä7”{†5›=Š1G‡ļc Gzå”i4Ŗ0™L­6[Yāqę ^3sĶ.¢2mī!k­†eó±[")£½óDĪŹ: qLiŲŪ‘n££0PĆ#Ö±µWI”cV•zĮ¦kĢpóM“łlŒ­Ń”Œf¬[ZBšńüYXŠ•nzr*¦„R¶óį2C„™y#„gKbń’€1$’¬ĒŌę³åf±z/,gXĆĘ­ĆÓ½khˆ¶Žp1Ō¶pM%ĪśŚ fUN«ŠV£įk uļ0øČÜ7åZ("yĶk’ée¶ė·jņO<ūW Ś]ŌnPĪ„+ĄÅ9G±•ŹM †GŽRc— Ü{V4³ÉĄāG!¹$œÉ«/ZG_MÕ$·¾šAbŒØeĪ~=ké?¶—kšę]CĆ7é÷V¦äīĢŽ+ŽäÖ½ĪnĒ—ĢĻ›~=ψ|Vg¼‚ę=8Ģš“b1øē£}E}Ģl-|ąO&‹ok-ĢŪѱēyĮĻ"ÄõÜų/B½ń¶Ÿā]FĀb$ÓļdóŪ ņ®8Ā×Uć_ź–ö’J¶»hƒįĻGóŖ¹R޶įö‹m„h×ou}”,źc"iÉ r=ŗó]æƒ<ęėR^XøQ“;ī9,£’%.…Üā>2ųĘĆĮŚżĶļ‡m„sb=‹…æõÆJÄkŽ ÓŽ”{.¢eƒä]Ąˆ;äŽÄЈhįtķ"Į§hXŹ–Sļčk Pšõ“É$ŲXeWŽ£$"†ģR‘Üųķ ķµHV8Š¶ĘĄ,OlūqZæ¼ =…GķO¦»¬-ĪI­)JĮĢy'Ć©nZź]FŲ™tØÕ•Ügå|ō&¾ĆҵĶBßL†m2õ^5LI8ĮĒ'ŌPķŌNIīyG‹Ō4/ü@Ņ瑤µÓä!¤‚n…`GØ®7įw‚uxć×u˜ķāŹ?’£lœšÄ}(ź—^š„Ÿm4ż7PMSLŪ比ŁŲkÖ·ź%ĀFķŁåHõÆ»ü šgGÕ¼+s§ų›Hk9gˆ(•āĖBĆø9 (ź’³~«į}rśöŽmKPÓ)%Œ…Æ\æ ×;ćÅZ5µ½Żƒ ūRhXą ^¬ā(2*ü?±Ņī/dšžŗR†B™Ę}ėŻ-4H5©ćH²ÄŹūĀØÜ@ō§ryÕģs<¬jŚ=Ο4ĄʧœßņÆ:šķƒŚź6Ö‚H²H6”\0=hS±\ČŃńG€?“ī„Ž)<¹‚”)ä ņĖM3Sšš:}Ī£=ļ–Ä3tŚ>”“g²xĀŽ{–¹[wš3T6vō<zö}kk-VŹź öѕ2”8Żź3łŠčĮųҧĘ]œ–Vŗ}µĀJLØØtŒūē½y‡Rx-6ĘĻ © r­•VĒ©ķQĖŠÉ³Ī-5H-u’"ķ¼Łˆw`óŠŽ×u5Żg”“lį‰łŖŠX­§ß¼’Éd±łG­_“V¾AskpĢUIIż h”įÆjš-ą’Žöi­žŠ” G¾HM{ļÅ’°Ó|cįÅYt›čŃn”ˆńi/Lcµ4Cs瘓ńƒ“Msį®āmJ“FŌUȔmڌvņX~5óóxņźtžĀŻepį”°Üž?­%-loō’įęŖAąČ-õkFøA ¬R*į@Aś×ĢtmWƶćÅŗ]’]i«"„āØĮ€Ćųk°Ś(ųOĒz'‰|7s¤^\„­ćAåĮ$Ē ō!sŪ„|Õ”¾ńN”Ø¢JŃĶ(b7š=érźfą} įŻ~{«O“[e$æŹ0>µŸā}CI½Óg’āᢹNv²d7ŠŌIncČkųGĄvW‰¦/‰ĒŁā»LŚÜ .zµCĒ×2ų [ÆÉØ‹»6’RRL†n’ˆÅ\64…¶>~æńżŹ%‘ŸķMŹØvūĒłW¦ų–9ęēĮoz£{[éæįšŻņĻ:Ś%Ö,Ų ŸIń…ÆŠīt÷øHÖŠär’ZĪQ1œlRų£„ oż«@ŗ·™å’–{@8röƟ|;įĻßj–‰§¶–l v«Žų÷§™ĒĢõTšž“Ø$Zä ź¬īFSÖ»oéž±Ó”¹šÕł½ØiFšH>Ųž]ŖĖLņ+Łl&ņī,ĪÉśJó[Z^ öņC,EC!6ńϽ)m „#ā—‰®¾$ß[ŚÜZéöZ«ņā3CłqV|;į×°¶ņ¼ČäfM¤:ĒÓ5’LĮ³.ĖĀ7>&øøX^{L›øXŲpqõĶ}įĻxCV4ėųćūZ°y œ®;qõĶj•^ųį%Šm×ūDŚŻ©e \Ŗćå śgµ|żńÆĀž3ųaض½awöR!qs Ÿ4¤¹śzā…p¹ńˆüH|_ęf2V’­ĮlĻēĶkų*„yŗZ¼v@āDBzUAŸQĖš'Kńw5hsiāKTGó÷ĀĆ?t§cמk–Ņ4/J·ÓR7“¹Œ²HqŒ··µc9ėa8ßB†½įŁltųćÖm–ę)G–§ßķ\NJ~C’|z®ŸnŪ ”ÜApJ•.ÅØž“šaåŗŠ|±qĢŹŽr1ė]n‘ā}^ļÅxsU“‘-¶’»›*ą§Ņ¶R4åÖĒŁž’„sMųq«Ėq¢Z£ÅępœĘ6œĢ×āķ ćŸJŚ…Ó#†óņ‚p~”u‰ś©šūW‹Ęæ <3Øųƒ?lū"Aq&FܽĘ+ó—ā΁©|9ńcjŃI«C”µÉ’Žį dņ„RvdŪSōSöqų—gćéSŽ[0‘C"‰Ŗē©śą×«ų“LÓī®ą½¶µuēkŒÆćŽŌå¹+±łńÓĄšAń~æ©[ŲEÜH^O³įaB;ļ_6é² ė‹ūh”\üńēzŸLŌ–¤ķcY»³ø¼Ł[Ŗ#rW=}3ū2ü@Š×\oźW~]¼ø[,Œ‚}óÓ§_zb?@¢vó .pqĒFśTŚ­®”es§jG=”±“n„A‚ĒäēÄ_\|?ńNµ¢“ٵY™įS×c1éģ+ŽÓõ}GGæÓµ:P“Å(Čc€ŹzäŠo f|YŠķ~ ų7Ćž(šķŻŗkmIöy „‘F1ŃøÆź?ž GūHŁžÓ³%·…µMZ;ƋccØA,¹žXPaX瓐8’wÅ)j¬tĀgéŖĶ¢ź+$R˜åR&¾Ūš’‹$ńƒc«,°Ė<bøU<ØģHžµÅPךē›ü}š“*ŗGʝ#N7÷6°µ¦·Œż®Õ†}Ē{zž?ą¦_³Ž‰šGö•×m|+?ƏēÄz7“Ų­&bL°äq‚r@ģ*c¹“]Źūė†I¢ePvņ+?åXmą We4qĪ% Ŗƒ³( IÄFdEć;sŠŠĘBĪĻ®Ųöē’ÕaåĆh÷ =DŠ!²ÄŸ§J›d±¬q«gš DŠŖ”ÜłĻ\¢®ĒB>nœŒ“S5-å%›ę%AĄöƽ?ą˜ßµÖ«ūžŁ>ųƒ6§4 õłāŃń§į½&śymącqb\|ŽQ'jžžUČhö?ࣿ4‰¾¹×¬,¤²æ–-Ņ“iµuģ¾ükł–¾Ņ/“«ŻSMŌ¢ ©ŚĶäL€ō#æć]T_C–®Ę °żģ⣶C$øüøļė]‘zŲW܁T¼äŒsNʾa_/=śš£„¤Ų¤÷ļRE¾5` Ęź ˆńŗ`CŒzŌķ'#mA×4Ė­oņƒŒ­Ē+޽ūöAż”uŁö£ųMń›Eøŗ³Ņ“Q[}}°Iģä¾{gœūbš;i­ōUųOāÆźéŚöŽösxĒÖikqżĻŚ™onß6Aś_Tų"óPOŌt‹ėo*ņŹFUē9Px?•yõ¢n\¾øÅŌ:ØŻü’īšóĻ “o |gšŸ\·²’K«V{•A (橉ō®*‘5ƒ?Īćö„ų3©~Ģ“.æį-RĘēB‰åšH-²J•ˆĪ~¢¼“[{]_JI­’n\d1źąÖ\ˆŽ ń}gD{VS&Ł`n¹ŚkG¾ Õ|'(’ßR¹]£<†oZÕŅLÕAųWć/…µ Čbń„Ėoņm/"ē<㠟“¼y.‘}ēFH®¬Tå$ŒrŻĮ#·JŹTĻŖ’gĻE®čmÜÉg©Aˆöcżf8ė^÷ȗPŁmŁéŠÖ°‹GˆG_å  .s‘Tb€.ļ”īÓLó¤ŗ˜ö(‘ˆǽ^Óī-£Ć2o~üÖŖ7V-K;–ŽŠÜŸ^ Y¦ūB”‘·°õ°3€Ė>éāž“łoæn;`zŠ!„¼÷ß#²ri’ł.xMD-ŗ§Lc®)m$]Ķ(\c ”ˆčVXeEWE_QW-ķķü²ŖØKp ŠĮ°)Én"p€üÄąZmݜzyIXÕ»Z@\±Õm€Œ°.ž¹¬UĶÜģö¾c&x_Z„4ī7KŠ..Ųłä@ g<פxwƗ~£óDŅÄķĘ+ “;”OCŌõ kiā0±8ō®Eō5ĢaU'ž:f¹e=MR¶† ¾¦t†ĪÓI3‘vȦI]‰čŖ95õĮĻŁ7ā’ÅÉ-5GLŸĮŽš_%ęø9Ųæīä~5qÅ¶¬żųUū7ü<ų_gimį]}±7^N7HĢ:œż{×ұ[}‹l²ƒtēļÉĶlV5cv¹a ƒgŠž Ó§;[y œ“Ö‚\Œķbö)fG@“ō ?»X7Ó„¼JāR ž„&ÉQ¹‡sā8Ö&ŒŒ€sļ^ āŠŗe¼·VJJA ģŲŚ}…w:£§ÉŸ>6iž±¼}_ÄpŲ[* ģwHqŃGõé_æ“WķŻ„Ü[.“§8³ŗV‘HgėG°<ž«¶>ꍟ~/ųßā-Äņź×ņ&ž$ ¶ääÆūĶžkÉ.'¹øS3uׄŲā«W±V9\ŖĻ“ߨ«rĆjņsTpʧbü ÅKćŖo²ōläŠ ]>Åē w<‚tVZC\ź6ŗU¾ŸyØjżČaRĢĒŲ —$‹3õ‡öC’‚N|_ųüė­üD³>šĄd+l„‰nbĪw?§«śwżŸb_<7kcįo X\kŃCå·L—źsõ®:µŖtĻŖō›+K8#“ńÅ|DõėŌtėd0ĒöP>øÆ>R¹Ö‘ø4ŌG§¹«Å£[ XI ¾·Ƴīu+eä”Ö”™ņ>„a®ŚhŅP­ļ\ī³¶VEøV'Ž’7TĻ>ń/ŽōĒs.¹«Śé el€z×ęĻĒ_ŪĒF“¾M3įétŌ ”kˆŲ² q’kzp5JĒå猼iāė7Ÿ‰uKZG—z+±ƒżÜąž5Τ,ķ ÉĄź}k¾ģLŁ< ‰A 1隮€yeP)fģ=h›čbvŗg…oõgL ‘än8č {ē‡~>t$vė€+–Rč°iމ”Œ…LZõ#D·ŽÜ4ųy×¹5nŹf·¶ßQ®ORhČŅ^"]ŽÜ·Z™Fęrzžƒs§Ł,`ĘŪ¶śµšÖpŻ,R²„n9¢1±żB8me ”ƒĒ„_‚->ėOŹĢ’öļz ę˜†öÄȇžā¤“ÓĪ—ČRLŒŽ¶Ml)ŚĮŃ+ČŠžÕFķ¶ØehIÅ3;Ų榸6—J¾H’2qŚ¶Ł×¼@ t Ń1nss ŗćxķ_5ųėĆ~:Ńu#ye§ŻjZ+Ÿ½’VN:ƒM;bš]čŅ!ūbŸ4€r=}+Ŗ:lĶ»õ‰¹-ŒrĆrŒ°Ź§Œfŗ«JįįĪęÅAŸ7C”›Y&r™lśÕöŌaxÕĖ—#š –A.·Dmb’CV¢¼KÄo$¾:c(³” Au^mO9«¾-“Ó#HåÓŲ#ĪÓŌP3‚cwYzu­†UX̐˜u“Óµh„“‘e‰ģGc\żĢa˜ ½Ø68¼«ƒó¾•¼#[3-»ž÷ų“Č K¼ŗ¶i É‘1ĄrµŃÉp&‰•ĪÕ>żč•”BŽ`óČī¹­ū«Ćå˜ķę(Ž®<©t¢[|m({{ŠĶÖ$ŽK¢°1ņ±¾” Ęē7$ė„€żyļYī·k©2¢A6Ü)õ4 ę¼/®ß_ź"×ģS½³r²6Šö;čŚ(ĀØ#=żi”a¶Ģ«c÷ƒø«ŃĒgrØ$ ęŽ>“€Ł“‡bÉ*ģ?w#šĶ0¼W@äģÓ­lŻĒeun¾K)>޾õĖĒgw– ĮsŌŌܲł”WnqVmÉß¼żh(|Oż›ØŪŚ^YČŹßņŌ)*«ā=Z '7Bč¬@éßėLJ6yT€Ē9Åh|ɁƒŠ@Wh£–PĢøLžUÓāŠq%ŗ‡9õé@ĶŪ6ĒĖwy}ōÆ0ńoĆŻoQŌ Ō|?~|•“|±7qź=;ÕÄי~‡c}`Ššš±lądõ®Ī.ŻL‘œÉę„”J] §2£9#µe],Rød_)‡\w¤dQ’9ś·Ę*¤RnÄs&[Ś‚* ·°¶¶–Y~r‡9š*8ķōŪļ1m5 hf^Š\.O§5\½ˆś:l bø‘Uō ꙩŽBĘ]½^©ÅŲšæčk½ o#Ŗ‡%Ooʰ®t9ä0E,贈øw¬Ė”ŗ§£XĻij‘1Ž0AäŅBś…Ž¢ĄĄņĀĒ2ē‘Œ‘ŲŚÅŒ G÷kVK%\mŚŽœō „Ś.ysE@‡§„rś‹NÉ"–ĘAJ O ×,'ƒ4® =1X!†Ę!–'Ł!_ŽĒ>ŌS<Ź+įē8ˆŁ8ē5óGʍ\ß-śż¦)GO©§Έ3åhģaŽŚćĆWŃł‘D<µSņśWĆ_ō=GĄž)ø†åbžČøłYncnąÕ_””™>—wßi—(`\U žÄVšń”5Ģm{,Ņ2…˜ēw¶k–°#ŗŸW‚ hq P»SÖŗė6’Ś4†XćqõS^]Ft$mŪͧ¤[ ĖErŒ:ž5GR×^ÖĶ…Ÿ–īÜ0tĪ=Į؎å8Ųg‚¼[©Xźbᤃʐaē5ön“©&­g»ćŽ#u5čQ‘ĻYģB3łmŌę±Ģ)Ń#”cŠž w#‚ekĖD:Ū™OUŽWxŗ;H3š~‚Rh§§ŽŪŪ^š<ŽsĒ™ć}I×­äkT{ˆŒg0åIōؒ7§3óÆĒ2ŚųCÄW6SYŻZįP=~µVÓQóįY­äc#į=kĻ©§tes”›S×īąK=A§;FÅÜ2@® \Óõ$3 ”\ü®ŸĀ}iGF[géģsńOBń^Žžń†’©ŖŚ~ģ\F~i‰é‘ß5ś% Č¾¾ĄUPœ…ŖŅ2ØĻ©¼'āļķŪ¶’ä3Ŗį—ūĀŗū=:+”š8–;‘Ü t­ć±ĆTźžÖ÷G˜Ģzrio5³óauP>š®…±Ā÷3£Õ^\łM¹;qLšęH•Ł”·•1ŸQފL|u'ŠKhŚĻ$‹.H#5—/;r_§4å pJ§ČŻÅtÖjKw>Vr:ԁĶėõ$‰ędrk”šn”tk©…Ņ«G½ˆuO\Ręč4eÓ5ų,& ĪóŜŽ*ޱ®é7ˆ'±E‚éļcöwÜė|ćHÄQŪjĆ1Šīµ]JÖāĄł#”äz₽™óÖ«ŖMm{uš¾^:Ц¾%)ŲŻ°C ŠK‰ŹŻė‚öé–čʐ’ŃYļå^+ǐ;š;õęŪ:‚“©8~ā¼ņóĆö·^gŚ”ŹąįTõϽ‘ž¤¶žÕa„«Ū7ŁŌ€;zɟĮŚŻö©eż™rb·F>j²ä‘ڱe£Łt 5Œ åL8#^×įKČtūxā¹ø]Čq·©Ź60“ŻNņ)²c ńqÖ³s,̵–uRļįö® 2˜Wl‹÷{•w”ŌZä‘e| ~sŽMjčW–w ŠĢŽ…@^œ“ėK”sG1ū+“½f\Ž\“F #”dR9Šn”»3Ś«Iøīlž•ėšDPż•Rńä<ī&¬„’BĶX$īk’»Ņµk¤ó#€G(ž3ZA2”lqwŚn¦¢Y“c]…#šĘµ4ˆ„‚ŚŪūQcyQ9ŁŁ«B\ s±ßœŪ=MI,ĪģLe‰<ć”Œ’¬ź ŚÄgŽ“PĀF.UѰ<7„D„Šh.%YČŚø× ā.ķD·vߜćŪŚ—9ŖGKg«j6|KÉ7zb®Æ‹<×ĶĮUlõ#„W:ŻÖ¢Ņ[ą¹óbsƒČ¬õŌļ,U_ĖgEčz9‘›‹wö·¦{‰L ėü©Ŗ:“élˆ`dø$–v<7ҲwźIüłüNš^›qįbM7U‰/Šo[y†7©žįĻ&¾(—Lń_ŁaYf¼ž“dŠ«Ą=įÅ{ęqEō;O x‹Ęøyģ4»Ó (ž<Č@ījwо7ųŚēĢŅ4gŽ++Ē ¼ˆĶ¹OūC‘Ö·¹µ\šmŌVVW#„ ˆ®ģ<ü¤Ōž'ń&-Ń]gPcd~RÄeˆ€3S$Chņ]SĮö7×I­hŚ…ēœ™Ż“į6}3Œó]&‘ćwĀµ”ÓøøĶ¼ŒyÉķSŠ|§xĆJÖ5mnK-bxīmÜ¬£‚s‘ƒšōŸ[G8M£ ›¹+ėŠŠ§§ø’ĀÖ-£}cMKw²V*B‘ŸåžÕ_Ę~ ŗšž—e«ł+sjń‡ßŒķ<ä~ L¶"VŲņĻ ŲŚŽų„=ĶÄöQ¼ĮYŽvēÕW„{÷Œføšæ….4éćƒÄ:MĢežĻ*ņŻFvlVM™»šēľšójŽ‚ĢXŲ] >T¹āē${T£QæÓÆÆ®-e¼¹¶r>‘@ō”ƒgEą}>ĆŚüvņ¬.F_Ģ8P;’ß@kŽ5ųcLŃo,,-­&™‘£g'rĻP);ō$ņ? č0i¾!ƒQKIRÅǾ2V1]OÄÆé^"³·Õījin6Ę'ĆIŽćž4ʏž|K§D–‚=X䜠$cIäÕ]µ«t†ĖPškˆ łjV°fœĒy„ųBćVc™a܌SĖ\n5ŁxĆmį¹ć‡Q™—{Ķ'e5j73öÖ=§Ć¾šf‹­ĀOiøÉ$c{0?7ĶČÜ|Uų׹KÆ YÜźč/‘»x8ķ‘ż*¹ KŸųē\Ō|oö{ė›6‘„\ć{Wƒjš]圐ÅæīTį²T{Õ*}ĶCųāĻųn{kżøĪĪ«»nĀoŹæG|#ūNé~!ŃęŅõļŽiś†2%*ł€c’zŽüTøŒ7ǚ=Ī£%–¤źÕÉÉ9Æ­|ŻńÅ“«½[OѼ9Ø;Ā#2N„ˆ øš§·åY“sXóŌų:ęH%»·Ÿ|AĖ`ß)®ūĀzÅåµņßŪM$Ž6ÆSNĮmnz‰tŌ½M?VŠżāŠ‰¢a’[ė\×önėzŹ®čŒ zĶĒBe+•ĒŠ`ƒT·6qĄū27g;½y—†µuļŠ’hwf¼ÉqĆėUŽ2w>Ąų§į5šo†“ŻoHjea°! ņp>µįńŌŚ…Į±Õ–ڤnØ0¬½Rģ\uŠŌ×µbŽzĻ“ł'ڹ˜ą³“K™oģł’6Ć?ü“#§JM…›@žśt¾i­īœ?U ōéEęžöń†~bVŪו51—@F-¾—}}–7O qēpĒß>ę½ĆžŚ™žöńąeMŅFć"Cӏz®e±„‘źš§Ćm,iPjś”ܤ‹%Ä c>ų>’”Æ0ńOŒ¼I#ivśV“xŚ]Č ,aˆ*ĖĘJōõ4s#6$¶> °·VŌ斮gRĀ7ČĀv®-w‹ō ĪO¦itvJ$¼†YI¢ †Ē'žÕßųŠ-:o²Żi·L®ĆΌ©Ü掞“¤#¹ŁųzĆƓĮl!¹Ś ųŚzb½ćĆ^‚ K‹«$:‚wG‘ļ޲qfČņŻ4CZ²Ō¬ĶĀiSę^ł×Ē:¾·§[ź†éRģäŸ1…É/„Rj'č÷ĆĻ’/~ Ļįčķmī|Aå4ݶHz:Ųb¼_O×,“½cMŽ+blžP›×SÓ5Jw*özŸ§_<-6£įčn"(Å×% äķõÅq;šT›ķ3SŽÜésā9ƒĒœ\Påb]Ģ’ųRĆᒊuM2Y č%f·*›@F'…yž„ žL.ģ’&”Ķ“)žąéįÓ¼?"} CęFpĻäN+M>śāKˆēŸĻŲ²°*=(R×Rm©<śŽµk¦A„=õĐŪÜn<§ćųW–kחz‹ˆ/.åŗ•>čc“ƒŽ®2¹qŠĘŃ“v¹wvUŃsƒŸ§½vš\^!mB”øŻl$SµAyļMĖ[9t=ēU±ŌüGmoeŖ»Ļ8P®¼/¶+“µńV”šļ^]"ż IŒÄ­˰ćļŠ\ä9ō=SW¼›^…u-īG·XÖI"~Ćų€Ö¼ŽóĘ÷öSéRé25£Ē8o˜ņ€rqłSNäŲ¹ń'ā^„©\h¦7“Røŗ \L‘`)ĒB;żj9Ž£¢ųbēP°³ŗv'Ģ‘"\ć=xŖø(ö<›Eų©Ky#ßŲ‹"ńŸ˜óčkŲ<;āĖ>1ŽöRÅwöż)Č˾%™§ń Ž­¦:ÉhĆ3D‰ĶõģĶwz¢Y[¤Ė0ĄVR§¾:Pc(v8«æŒšxH‰¼ŗ”±,p=ś×UĒMĪŽŲ¬hø]é#}õĻ8śsÅkȄ£”ś3š3āN—ā/ŪėA–r”@ąēi®;ö˜Ōā¹š”uŽņFNǐ¹¬Ś±\ˆü¹“Óu GĪ–5upwgÜWuą›sĆŚų‡ģķu®īcÜŪž=zŅ*Ėcīļ {Gš†„ā įŅÖh„w¶īüÕŌi_tTńFŸ¦jķ%Ī™u£ĘĶžĀ™'Ļ4ź~9Õ,£Ōnōøob3Y%ĒÜążßc_ ųūB½°ŌnōŪöŽŹ–}lRćįDGkŅŽ+_AÖ„šę³gŖiĶŪac ŌŽā‚śŸ®¼O‹|'§k19v¢ŹĢ~d|}Ņ+·,­ņ¶_š –˜?i/wLÄ֖öŅ]ŪĀb*|ģ£łöęæ>-žƒtm ŒėAp>£ųā}2Ņ Gįī«%½Ó‹izł,;®z{×Ö±æĒŻcö2ż®¼;āł§M/ĄŚä˦k±ˆĪÓ¶WśP÷Ōé§½ģo“W¼†žĪx/l/"[ĖY£9Icqø^Ńš{XŸL×o,ä‘ͽĢe¾\c×š®YIXū+Į÷v§¦ź~×_Oŗ¢l’tōÆēŪž Wūźž>š?ÄočŚæńĻ…Ļü$>š/›ķv„s{’³×ŸSX·mIš?X„”Ž)kkl2ÜDćĮˆmĆ· ןC0e}Š$Rq]“ęŽJšnV•UBļÜ9㊠T."VHW“Éć5±Ź,›¤*§%OZŠHDū½½Ø%ÄER±#†,C/p)Ļ&ęQµ—sŲPRE²_·9ėķKĪå\½xA­n|Į÷}ZžmšÅÅ„¬Ę7ä ;X‘Č!»sŠ ć.‡öĻ’ó~ߗ’>ŽžĪž?ń]¶¹ń_ĄÓ}c¹$Mq§t‰²~ńåČé…Æ?ŅF¢Ŗ&‰óg§cX×FÉŲóūČ-Żę°¼OÜJ¤”Ɗž;|?kØ’¶t™£ĘZ)óቆśŲŸ™sß/Jó¤ƾ?Šü)āč/“[ėkt°Ö-ŹĆ”‚ä ūgtÉ讕J7xR+øŲ}¾ŲüÜćrכ8²¢ģ~’Įt?bX>-|"¹ż”žčöķā«Y®¼ØwHįsæ>Ų^}MžÕ ¹aŗS±Ā®ĢŽDZĶgcd^ń‰-ö™{o*4…ß”8 W›ųaģ/„{IĮŲ’yg< ÖčZ›=XųU$šĒŖųj[mFŹO”ŚČź$‹šļĪ+‚Ō›\Š'‚;¶“O“qŒĘĮˆqźå[ĘI—)ō=į÷ÅĖßk6ZČ•$ڟ(QŌ‘_«ŸvQ7’Ė–)y©­ļ¦MćĖGėցs1Ņ;ē8n*›M/d‘ā++(ägŸŹ‚I/,Ė8ƶAéҶt?všTl8½ė9¾€j]hėk0U“p5WHŠ“‘E2‡Ü:ö¬ŪBŻR_¶•m¼ēv+UYuYŠ[»<vš‰NÅF7Šč¼;š’S¹I /9n„W£iŽÓ-Żddi_«+ńó{W-Zē}*v4ƱG&ų#ŁŽJÖŗ;i”ņŠ8Up W/“¾‡_6š÷÷VŖ„‡Ł ē$ńZ ~üQųéāŁü#š×DLŒ<ķFcˆ!^ų=Č­`ŒĻŲ?€°Æ¾ źÖ>-ń|‡Ęß bāi47 üū×Üém¼©Ū£Če1(Ā=Ą+„+62K¹JØ“„tšŪL¦KŠ|Åź¾žōĢĒŽ-¬²³Ć. žļ\¾³y~±Œ:F½HšÜóū?@.̬N=×ė\Ļü_i¦h—·Öš“š”'‹g$oļvØå×S¢œ–¼Qńeõćæ•[M³ ³‚|Ø[ż¦łSūK~ŁOĆ[«Ō†īŅžqŗ5Ÿ»žŅŽų®š4ījŻÄo‹Ÿµ7Žž$]܋mVHō·,ęINd|ōŚ:_,ŗ¤¾dģļ4ŹIVv$œõė^:v9ŖÕ+ŪĶ<"™$Ųć'ا4s—9č{VÉÜ᜺†ĒĘõP\=+F1‰ĪiœåĖh$‘PgÆ­mŚY ‘VfŚ”‚¶}OJ™;Bڳ‡ģcńsö‹¾KME»š‡MŸŚRĘwŹæģ.;ś×ō³ū’Į0¾ü·MOÄ-āM|Śńu{ā&Ā3ŚøŖŌ¶ˆģ„×M“Ó,m¬­tė]8Ă0aM»€ąf®Ü£Ŗ3Ęvøöė\2Ķ¢¬SIe%/ĮÆWŃd†ŽÖ?1Ę01XĶō(×¹gu å;ā¹™õ$Ģ3«©īk0(‹›Ģļ+¾JóÆüJŅ}ƒŻźž"PBʃ*Oįżq[B=K?/~0|}ńĻĘ}T_j:…Ž•l°@žµ;Åx“v9ĻŹ»éFÄ·bÄVŠ qųU…¶Ś„¶ƒŽÆ·sVĆF–ōƒ .ŅĄÆgŃ>w0H®yLG½ųkĮņGj‘Æ–N~Q^»e”ł ˜§ŒZÄžŽÉ0 9éķMN”jĀŞvÕ\ēåĻZčb¶Š'Č7õ=źČq.ČÉVĪ}ė£f•v`śRSīDŁŚXÉBy=ĶCö‹ÅN&# hHÅø G˜åS½œ2®ą»÷ vę#ip¹S’qœ~µØ’ŹHRšģ'%½kB ą‡`ŪĒZ»©Įc}hĄ ?C^[¬ėļį˜äžjŸõ›pG’Z»;e>B†‘„‹ėކ‡$Kżó‚9ōŖ3i¦wbiĻŽ¬ I^GJīį>@p%s’=)¦'¹h<Ų>É#mlg#īšŚ¾YÅ’Ē BHČ=3ī)™É•l [t Ø<¶ź*YģļL_i²‘ 2éķA™ÓĮ¢®”b·”±p8¬ė)aQ’1ķ@2Ćc4B6@%Şk"ęŻ\dŽF(­äó#S•ķė[ŗ-ף곔•=½(kĪ?jŲJuā‹vó»Óր9*ź'‰ĖĻāP)N§#š‚å. ¾r•Ą<ƒ@ņ,2Ī‘|ŠqÓ„`x›J“¼HķēDrć žĘ€-ų[B}cņÕÉ'¦8ÆEŌdVÓѶ•`1õ gĀāVUa¾‘ŌS¤ˆŞE_[dwžz#"°ĄüŖućüß΁¦>+,īF)įĶt6ä‹s (ōzPOg©Ēœ‘Kl’Č8éU-ęŠč7o(nąUÓÜNF®DH®Č šk"āi g( žsJŚ'T!eAėR[XyӘå/Ī:PRw/ÜčšZØ ģłĻ&°¾Ä¦äD¬›IēŌSK Ś7ī<sc9ÓO(RĄt-ķ_ųźMbŚļS·Xī“Ūį¹x8!†y·4ŒKįW‹ü[a¬Ūéŗ¾«ØÜ‡ŹźXuĻ-ž5öĆŪ®©f²H™b3Ó­&h‘ĒGgå]•‘•¢”ļXזi5ś!F±Ļ½``ĻE²[HbŒ”eĀ½×5bż¢–UO˜{÷ C4M2äN‚ęčNƒ‘ø`×W©X‹]®ŒŪ€@¤g¶±¶,IƒéҹS̼F{p›žx ĶM „Ņ+jHŌ›WxOi¼ČŌ¤»sŒzPkŠóHt7ŗČÄĀW=+7Ä>kŪAāI×%xėÅŃ>ų„įūĖN;Čc)z¬Iį”ł—āׇģ|k å4øąŌćLī,N÷õē” Ńź|‰į©ÅĪ“|Ņ«FŽ\ˆ_%MzŌŗrN±H®!ą«‘ČÅcUŽŅĻGŅå–;ėvH%?+’>õØó6œł”$°ć9Æ.Ŗ:c¹ vśœūm£d|g üÅK"æ1ĖhŠ78cČaXš½Œ…¹Šķµ[xµ‰ÖĘ‘U]›hb{zśĒĮŸ‚ōKŲlāÖž×r–;J·ćšō(£’”é÷7v¾xxŲM÷żŖĢ“Ū˜MҘåUąąt®ų£Ī“"·»<ČĀįŽ@õ¬{ø–ID;3ėLƒ±ÓęāXb_9‰ūøęŗŪ}ÕXyć”1œf‚į~‡€üzųQįßgė–W·Ś1K¾é$A±ČļŸóҼēįm†“ii©Įām*9än`PO•QŠå¬uÓl†x6ÅåMt·qŒāeõõ값Žx-g“šhõ w&N}÷®”ÜåńN›āo^¶›, ņ…ćx«õ›Ąæ!ń–—§ŽÜ[/Łs#ņ·éÖŗbś‘QIųGÄo,öŅZÉ$$`61Ķ}i§^O-”sG:Īsœó[s-Ž9¢{jęčķäYSspqĮÆH[–¼Eg?.nµ¤ec’Qź ’ŅԌ„C銹$Ö÷퀾ǵLĢćīą‘rJü¾ž”Ģ0P“ŽÜŠē2;e—wŖźQJ¢4ėŸŹ€3®TĶ)ƧO„b6‘G÷ņqĒJޫëcf S²¦F2FkĒ‹§¼mµ"*H#ļ ˜œĘ„Ų†D#ć8ęØ5Ū鶒ū#Čć¶h=—H×ęŃVĄĘAõ¬Ok%³µ“üųēž¦™Ļ%©į7š­ęšĘ+…DCÉR:ŠębŌ,Ƥu&īp{sCb*ż¢5y"b§Žā­Ūj@ĮŲćŌu¬¦śGb¾„¬=ŠUšV*§©ķ[vƒe¬[-ŹJ„Ļ<ÕDNgœjĖ„ź2ŚC)ķT–ƹ§„?”#īšn!\é Vo»µHźµ%¼ŽØŠģŅćq¬å£,×¶¶óŌŹå¾^+ģRĻS/e‘NŃļUōf쾑LįĒńzՋµE“j)öŖ“±*D66SŻ0{WIÓ½lŚÜ]D³[ź¾XĻOQPęZó9L"9mū5ŒĀāAóĄĻBj ‹³-“+ ‘67g£–5‘O’ą1?6'±BĪ®3[:N·-ƒvĢŪn²“ÓÓ+Eä!‘#R¤ćéZŅŌÅŗŠk—łUśv*­¶›*…9=›‹3ä7aøÓģc1K²ōŻżŚ£ā *źĘŃŽ'äģĻ*j,oœĘŸ*ČŃ,é°ēęRz~5­s=¤ "H±~÷ZĘHŌĢw°óH_{cę±®“M·¶Ō8BˆĖr ΤĘźEź gf·eū©Īź4²ģ’\+Ą:rø¢Ć±Ś,žj©(ī=+ę{‹‰ȟ(łI‘¤U‹Öé'“#«UĄ+ÜÖµ³¬–ŪCĄ’q[Åh7+ŪuwiŁ7£ǁVbÖo#Ž’¶łxäWDvcH‰ņžn¹ÅWF…UˌRr°Ļ2ń-ٱæai"Čc= t .ą‚iĘ<č+7&g4uÆaķwn„u é ķåĖ?ˆ5$ņ•ąÓębqæ=H©.ģgŒ‰L[› lu„'cdŽfūSŠDh]q2 t¬Eä·īrO ”0/Xhšˆø·ø‚{ˆŅ2xź¬=ė£Ō%‰b”*ątdśÕ#)Jē5¤\!†āhdē8ćó­ų·­”‡ež"ĆŸĀ‚WcłœńŽ·āoźŗtšnÄ"¤„Īp tÅzķKš·NµŌu ·ÖĢ–ł£Ī3čq‚856:%u©ė*ń”&x4v¼W€D#…į}‡zšßˆ„ b¹ŒįՆsō¦d™ź“ė{PÓc1n+½Ap›HśćŽŖ'„õkØ/'–·†OžD ¹ć5‹ÜøHą56K™DPIöŸ²ĪKäćiĘLWmšņõ_Ä!'Ó£Śēå8ōē>ĖÖu9lt`,“fžń‚UŲ1Ē_Zš™[X¼Ó.mF„-ŒJ̉,¹ņĮ=Un“"Ś’žÜjšÜŗŒÖ¬¹™¤yĘĒB}+æų§rś/„ļ­u/< æ+pcł€¢šž@±ń6›”éך¾§ew$—Ęü¦d•s“Ņ½[²½³šŖĆ¦‰dx·G!±œdÕÅ>£Qw>G_Š~ Óµ -õ†M:å$ņŹ(+…>žµōŸ‚>%ė—–0čח_·”DNWFr7{ó׌Ø×”ścĆ%σµXŚ'kÕŪ p@¼~5ąšÖ橬sOpÓŚĄ›£` ć’ÆS$Nˆ¹į_źśź›Č¬īäË>@æķ}ƽWVšlz—‡ŸĢŠ "öÓdŠ”HišGĪ)ÅXŹR6¼-i}§Ų¶”s €J>_c^uć_‰žŌ^öŽxcKųŸ,čųU¶? ¤ģeĖ©…ańÄóX͆¢ļ¤ÆšīÉ'°‘®£@ń„ĪÆ§jŚtįTyÉ$„.x?‡zŅ×5„zo“č­a‚¦äŒäädqķ\-Ŋkd¶A<2ó…^Xż+;šJVEO ˜“ÆOa{a4öi%8*I# {ܞÓoā“I£VB±œrĀŁĻ)²] įōĖgāi™wŚeρ‘ōÆńω|7y«ŪŻ[YK9Ÿ9 Iż8„bc'Ōņæj^y/ ]ź[?y”u{—¤¹Õ-m¼Ūr7>ī©ųwėMš)t=WškHžÅrŅĄzõϵ8\ŲYčJ‰ä ēÆćR'®ˆłóž kZ½ÕuĆväČpø;Ų\WžiZ™ĒZ4šŌW&·ŗĀķœś‚)£XŅ>ōųėńSCÕ| ¤BŠĒgq䟓:¾ŒG/ėųמńGö†„Ū6Żä2ņ£ßŚ•‚4÷>›ųkāŸ‡÷wBĖÄŅ[Ė©¢ķ6ä%$vü+ā–ƒ„Er.“—¶Ó §rH¼ī?J‰»•ŚĒšĒį˜-žśĶXÉÜĮ}»ŸĀ¹«Ķ6ćU­- {ŅĄłYēø™J‘gKÓ¦šÕȆņŽ7•³÷Įäū}+©½»ū“W×pɝŹp?*v=’įĘ·¶ ¼ĖSaNr§ŌW]ńĆFšf—ąĶ3\³4½BÕYd@—9ĒćO‘˜ÉŲų¾’ÅwšģāžyXń8Į#9®N;\HĒ*„ĘŽ9“б -ŽĆWšg‰o4ˆ5]Åqv¬C[ēē#ž•ĒčÆYkk¦k6óE_x «GE;Z®”g§ėzk2\<įXåŚg—Ļ ÆŅ?ƒóčūlļ ĖAŸ1‹eGÆ­#QŸl|ā)/’°Y`ʈĢdüģHå½G#„|-āæ„ŗtŠ uk™ŠMŪNG⢠õ%U±ą^%ųisį‰ģļnžgł^FĄŻŪ‘ŪükÕ~i>+ml\jkq{hī¾XgŹ;ėœV‚ö·?q~ėpXŲčķzĮŁ(<~ļcł×wń{HŃ㚠K@¾ŽśŹUc¹OpΤuŠÉÉ=O€>;ü4ŗńf–Ž"°€ĖŖZ½c@7 čļÓōń\š4Ös˜ļćXNģO^;žµŠVŠÖ:£¦Ņ -dµX–e•w#¬| zāµWFŗ†;ČŽX|Š>öRi—cæƒĮŚĪ¶³_ŚA ¶ ,m–é“ß=+ʵ}*M2ł¾Żš'”*ĒŻž/Ē?„4 Rxrö³ynĻshü¢ åOךÆIšZ¾¶·»Škk£ ź½÷õ§)\Īg×~,“Ҭt[^Ü\ŽŽĒ ³7³cž;ó_|V¹“Å7šs,"õŌ!šÄöķRLÆįų‹Ćö Æ¢K<8(æ1ĘHīF+āÖMST·ū*‹{ž|µ'=Oōżžķ/“+Ó“ųÄŚOŁų‰żÖÓŌżĻZÓų¹ć‹­eSE²Œ\ ]Œ¦8jlś Õ„­Ķ·ŁfvQó £•v×zEģhÓiR(øq€Č:ŸjĪR"Hė| ćķbO kž ń}›éś¢ŃĪ Ćć Zł?W›Ä¶ŗĖÜZ¹Žt˜¬*Đł?xõéQĢR>ųųGቇmīµGµ]KęŚĮw“č z¹į›ff’ŽĘ6,¼¶9ĶKāZę‘oo$ÖM1]7\{×ĪÖśWöæĘ]#Āž {›,Ī"ŠHŸG÷³Ÿ­\eØļcßµ/ kž Õ5-6ĻP}_ƒå`ū—Šā±<ń‚楎6²óķ£²]Ū.×+#ų‡„mq\ū7Ā’|+rņź0Ü[Ķ+HKlĮ‰‡°ķ^ƦüUҼA’†ļl£³‡Č ›IV9žž Z'Ī_5’x—ĀŚę’·Öļ©ŚÉå4 0,$v5ņ‡…~xĚtZö™Æyھ“tģņń$ŠO8õĒ-XqO©Ń|nŅ>Ūį¦Ö­ķl¦‰I“¾Ėæ#!Ņ¾(“LÅ¹æ²ĒlŽYWić#ņ©ax3ÅM-ʾĄÄb8©%¶†Wj”2»CČ Ś0>ńż’åŌõ«]WĆŚZÉv±Ģąœt+žæ…}o-½Õ³ [xĪh†¤‹ek«Ć6“v‰%­Ź˜ä%A+‘Œ§Zü®ųŸąŲ¼āĶK@ņ~ĢWh·°-(É„}l8«hpZmÜśn©k«Ū4ŽĀĄäs;b¾Āńdš±>§ˆōšŅޘeć $ź ^3S4tCcś+’‚CžÕ·_>\ü"ń•õ½’Ä Ķń—ō‰` õ+õ¦ŹīźĪśŚöuhß'Åģkš³¹Łī/‡ęxNM[C¹{_X“#@’rxĘ3Ēłķō¬O‹śü$žÓ~'ihŸWŃÖžŻļ&ƒĖŽćö®6¬Ģę“?ˆų*ģć¦üųš¾9š¾›mešĆĒ‘’hX,0ķ[KĄ3* £$ē¦kńŖīY.žĢŪĀ»! c‘]‡ SuerCŌŌØåĘāCsŽ8®Ó’E–gE*ģĘZر’0\ƒĄ‚®9`Vp7f¢’M²1† &‚PÄČ皸nžB ƒéÅ‘•‹¬Ń«)łŗąTŠH×`ĆätķAŖ>ż“æiožĒŸ“ÆĀ’ž›Čµ·¾^"·…¾Ó¤ >ģ«ĖzWśc|ų‹ą’Ÿ <'ńĮ:ŶÆį½bĪ;ŪI”2°u ĮüzvéQV7‰Ō£„Ī‹SÓw”T—÷ў+Ģ|a”GŖX„Ԑ+ÜĀ H1Ė!ź+͚Ō$Ģx:o ųæSšMƈ­õuW9R£ 9ķļķ_šß¶’Įˆ>'x SŌ.“åƒVH~Ézź™Ū"ż×õĒę*PåĆ^Š/|5«jzµ Cuo;EČĄe>āø»²€aˆĮā»)ģsUD ę2«3&:ŽÕ F¦9®“s8¢)`EAåżŃĮē­ ŽŪ~NŸA@ģLŠ×å_—9’'y2ŪŽžō nh[°l1,Ųõ*äe—1‚AĶ]3Ü?fƏž'ż—hƇ?üywm5•āE©Ā1²k6 H¤ż2 ’E†_<+ć£ąé—Ń?†<]¦E4w!ŌĘÓdŽų*O¹5UŃ×}in©&—>Šń·‡„PÖć–Ņ[+Ūug‰•/=½ėĖ©M-mĢ«Gńf‹ā_†~"…gŅukY"E|2¤~cņž|šQ/ŁÆZż‘æjųfźÉm¼1rŅĶ`у“ŁĄüW:Z›#ęķWßg$wp‡ŠxĀ Œ2Šó WC6s]@»9Ę?­.kkžÓš²ā ¢c‘Ÿh䟽_PkšƒāżßNÖ4«inš\* P1Œ×5Jü„¤|óāOŁŖÉ dŅõ;¹-•·“rĄ;wĒ^•ź³7ĆĻx7Ä÷:eę£ęé—C|QĘN€ī=’„iO0[1TŃś=±ŁFāAøć’kWŅŅP­²?;¦q÷«Š§W˜ņėDĶ·µŗ¶Ė€ŒŠ§äķIWĘfv6=zź¦ś’ZäĢ€1QVķ”Sø_5f!6žį”ć Œżjķ^Iˆ p}MX’7”°éƒŅ§Ó­+ˆäŠ%µ‘ł}£ļcÖ¦O œ¶ö3ĘØYŌp޵Ÿc$–Ó”h÷)ɦ+@·vłUwć?7C\mͼņź%¦<Ö;”Ą®rŌÕXųZėP€¬é'ŽFq]6‰įų“ÉL’Ø‘»:W5Z‡M*G±čŗ½­“‚KxäĮĻJēg×mÄŖ;cŠįnēl`S]vuį#ēŽ{Öß_]j1é¶Ņ_ź“ ¶€åÜścµiJ%8e|ż‡üwćŪ'Xų«e}įxø†Ģ4Ź;9ļŸn+öįŸĀ |=Ҭōß hvšŗc-ŚŅ’½]Ō×C6ģzģź‘mŠ?ĻśUXō›‰dIå™ü pPt5©‰±ukDŠĘ£#µd\j?c™#¶"ea‚A G=sØ}™žTV_Bj¦£āk’īhķć ÷³Į¦m”š÷޾-č­®jZ?…õ‹_ķ»wżü .ŻśvČÆ‹~7~ÕŽš›yˆng—Tū©l„e˜÷-[Ó„ÜéŁŒoæė7Z·‡4YnŸN_š4G+Iƒ÷±_šž)ńŸŠ|su„āżAõ Š0XĻ(™=½ļ§ lqÕ«ŠäQć.¾S£ cÕ2Čc,޹µŅŽ)T%H÷),£EO¹ž0ˆ8ėŚ§[™¶hŪX6 2õąVͦŽXČ×-1ŽłäzŠćē¶ü1ų1㟊śŽ• x#Ćw›\Ķä™äŒ¬j:9ÅA²wü÷KšĪ†æ~-“~'Õ#ˆÓå„ķcŽĻ§­rÕ«Šģ§Lż®ųąoxzĀż=ᘓ mĮ…įx@+Ž:ś×ŌŅéöÓ[y£±Æ:r¹Š•ŒµmŖ±Hæ0ąX_iŌ`ÕĢĘÖ,>W}ė)JĆ:e¶ņŹ£ØT# Šé“cĢFŻŽŁõ¬€ŻŽE³„Ņ WāBÅŃĀ•żED£qžs©x®ŚĮÜJ-ćė¹ņÆĘ’~š•œ’Ļ­i·ó")žwö«§O©¹ł‘ńöŒń£›ū"ģ« ²  ŖA_1GõĶÕĢÓH×.ķøŹĶ–cļ]…)Xµ“ĄN¼œ±žń­h÷,jX€ŻėG- ›¹©ea6 ćģ±aĮ"½'@š%ÅÓĆ%Śł*NNFF+ å±ļz'€mV8ŽŚ0®:q^£¤xf[r‘Ė zäqQr=3CŅWOŗä $$aøč+ƹ‚ÖņUŠĪ2’gõ¦eĢĖšx}ćMóÅ 8늘iM­eŌgÆó i³›‚ēĖ»!£1²¶3޵£ØŹ—ˆ¬ pGzÉÄ9ŁY!„$ ŁėŽÕzńV(•¶ õŌ;‰Źē+yw+īĢL£=qY­|ģø'ojŠ’ķ¢4Č\°lzvśÖ³^Ē4lsÆZȕžWƒŲńV¼’ˆ ƒŽ€3¦D B“ži^DĘ Ļ  0˽6©Ü¹ę¹ox)u›18ŽéžŠ:PTmŌĀšßĆ[? ŻOyg<’Ķ*‚ū’„ś éeĖ”©lŠzކ¦WčS—c©¶uŐB’§CV#ŽĶ”xTøéÅdfgż–{gfG?-ʦ„1*œ0#„m  µ»ū^VEPŽ u¬»Ā‘\°Xņ¹éļLÉĖRåµŃ|.Ņ…dų›O¹¾²’ Y.>ņ’8>՜¤.frŗ ¦”`š]4B Q¾t<ī®ćR¾ūY. BĶŌ™ö„©¤[f]›ŻG I$,™łN9Ō%ōóƒm<‡#kS9"5¹¾¶™ Ūö‹nyī*Ģ7FM€H’yķA&Äz–£§•ˆŹE¹lā—SÕįvĘŽiĆZźK33ɵįXā„»ŠćĶIa Q½i±¤Ą%™cfEv8ē ­-OGūĮŠ©Ę3ƒŪŚ€ø”# łĒ<Ó&UĻ'ęō  ‰™ł@wGßŖ[HO,?Ī€,JūŠøV+Ō ć’P”lžt»¦]\}”Apåł<žõ^uņ˜¶čoC@N¹jĮÕ¢žy¬ØŌj0½”źÆČ“ ½¹Žv‘ņW%|Ģ»š aĖyl7­Å¹ōjŒ³iȈlmŻh£gmm8”œķb³‡RBlĶŌyn-.E¼bņ0—`8jĪŽ%`õéA—.¶5"Xܑŗē±ŖŖ‘r |õ¦I³g¦‰ab$ņŽN«2dŁ0ˆ²ūńH|¦½µŗ²H“œšzW}£č‘j“”GÉļŌÓ5‰­āoĻalņÄÅųĒN•ä’Ų¬25Ā,£ų±V­rk/^ŪĄé天«Ō~5ó‡Ä_]x¦ökŪ;Ł,n–ć šŠŃIß¾_é2<ś½äøm%ńé_ED¶Š¢ĄŠ©ü©2\Žn÷I“ø˜ģ|6sœā±O²Žg,|ɗŒŠÅ¢ ń"1%›qZ³ęA_N”„ČćVµ™^7•”tā¶źk¤ŲIcčh2ęeH£‚6e1å{ƒVÖ i2c_-== ¤ČoįƒČ‘%\®1ŸJńoh)nņ\Z3qŌÆqY­-ŹHÖķ#]A·Čź}kž17ŽĘ~”įKj—öń]Å÷€eĪÖō4±ĶkköK7³ŗóapc™ś¼WU9õcsźßxŠÓÄ6Vń$ĀYģeaŽžµė“čP#$_×lj}Jd3é¶¶ī­g;Ą;ƽ:K•’·ņcŚF7Č÷«RDryÓfµ. øyfź q]“ŌX%Å̈.W<‘LøDēļ“˜ļ ž£ū\OźOQ_üAšŻ‡µ[yķē»·Ó>hü—l 9ĻZęŖŽŚhˆ’Ćqiņ[\DņÜoīłėœÕo“ŁE„ŻIi66Ė÷«…«ņž}­@n#’ åō†5č>)^x3QLŌ|×ӌžR|…‚nÆēĮŖŒŗÉ©?|_eØD&µ¼fC‚ õĶ}Éš«ÅV2M …õÜ'äóJŃ;œĪ›>‹¼$‘¤źöĮŗ‚zŽŅž”ó¢Żœz×LUĪiÅõ,5¢ČģeNJ± Tƌ8ēŠ‘Ķ-ĢFF*ė’—PEJÆņ ’į˜ÉŹw©čk–9U÷pA M”’q³Ģ Fqõ¤74‰ƒ»ę¶5+ėRół“£į#ųO+VqÓ2\Ć.sžjøÓä)!V17$B±XĖv„ŌAW<09ŻZśe³½†[®=)GĢŅŗš;UŒ¹<zäļ55YXFŽćŌv f]åą|©‘ČĮ>•VŹł ¹\  ŠĪ­qäO7ČŅ9ē„qöv!K2 ¦ćA”£cUžŃ³»2ŪĢŅC‘”'õŚiPĒpc•>B Z:[ķ*«DQĆry…d )¢(’|ńŽG ¦ę›ckö…£®yī+Ō¬tĻAbĀź­or ¹pTžĶn€ņM{PїV0Y]D̹)ąŅŪ\³) ĢSéA‹‹-nņpŠ)Żż+*żfœņÆZcKb±½I&Œ0zĮ‰vJ®xĮķYLŽÄÖŠ¤ēiłķŽŗk}?*±ŻG"Ą:ćÆēYMRĆ™=’ļUä‡nO5© Ų¹—jLŃd:ąÓK°Ķ[A’8c¹[ˆ.†6N@õ®n-"7żXaĪ3÷i€ųć6+ŻąūÓµ+ėXŌI°9'wj,95†W c–Øēh­x5[ąÓ@ļ;sŽETcqķ|N~ky¬‰ĘHmżŖ„÷’\Éæ ē -i!²ä:­ć-Ż“b’Į¶óųśÖķŖ““Źr ¬KŒ»źś^x‡m¬IpżŚøy£ŸM! Ąćb Ż+Zš¾į<’”åīŌ±jāż¤³„42c*XqųQ`±ÓŚéWńDeh%ž2ݜsY÷Žt)œ®27┣ŠVžÖŚčĒ#Ū¬3*ķŽ:žzÓ-¬%eF-·‘žŃ”#=MØ®>Ź U»JšśŽŪPŅŽRg·ŗR[ź?„obO7• 3ļ†A*‘× >7øyŅE¾’š7( NÅÄž^d×uÆkPF'ŗ^’&<Ā]ˆ99ĶuWz&‹āYīn­ī.,å#Wi9ņ½ńųšõ=”ęS‘œæ Ļ„žKŲä‚’|Ū²Æøņ8o”ŽxNæž×ūFĪĢ­ņńĄē=’<ֆ²×BļŒžź3ź~³ä^l>\_8bĖĪON:W…xÆGŌ“­LÅ#¹Vl`Æś²3œŠeĖ„‡_5õ·‡N”¢Ķ*ŻĄ ³ąn`­{ǁ¼e%æƒ.lµ›ĖÜ"Čø1Ÿ_„e G²Ų½õżĀ Ė)ūĆ»Jģ|+z–’ʱ$¦#¼er¤Ō#ŲµŁxæ@}Xī‚•œ©#!ŗk„Óķ5 kZ]ܵäMƒūĀŲėZSŲŚ1±ßxkÄ7c[[+=NO%䀁Ž?Ļ­{õ÷Ä=#ÄEφ|U§A©ŚH’ø’B$)µ{ōĪ Xü…µ>Īf°½žDˆX¶`^xĮ®÷Ąæ4hšiW×±G¾F)SӒ{PRZ_ń?CųvÖėŲÓTµø!'ŁÅĄ'Æ5ė ¼ ģ³ µŗ»vV2ī œŗ~•Ļ©R-x»R‡>(FæŽi~Õ6ÄT9XĒqŚ·üAį’į•ź@3Źį|ĄĆØ^¤SŽĒTÓ¹é ®4ųt‰ōX”™fܧlgåhĘq^©¦•ģQ;2ł‡IŒŠ%œĪNä’t=Hš}ĀĒ{k.­,BX#ņvąõĒ…~Hė×QÉÆź’Ŗ³Īd"@2q‘WėaĘLé¼'©jvQ$RZ¹æxƜŒśWŌæ õMN²ėšt7ŽpźĶ‚£ŌŲčS=ĒVž¶äŃf­>ś€łOcļ^ Ćiö«½ nņ\¤rsž˜•“‰Ÿ3=Ć’ õ‰/-n/ÅŗK2„ĄÜŲ*:ķ>żkč˜tĻ²ŚŚ[G2·*£‘WĖde)—¾&|(šĒŠ•*żJ»<Ä:zi~#ø»°IDūcĄ°§­z„Ż÷Ž4DЧ–eGL.ÅÉ Žæ„; ĖCė?‚ tŻNĀļFń5ōм–ž\n}ü}ā?_|ošRüų¹źet¹<¹I>īē¶ĮėÅg(ėdkŪC֍ö©ķķ.„°-É^:zWÖß³GÄ­#]šeޘfÓį×ģՆY‚±SxōĘj͊~7ÓlęŌ”×ģ®ßķČJÆĆ._μ~ė[ø³]åĘüž€ŠdÖ¤ž%Ó“ßųJ'ŗø‹r³$C?0Ļ|U/…×Z·†,Ēö¼7vp 1?3{ćņŖŒ¬Tilųć^‰.ž–’_G¦]Åž>ä€HīzW”|Pż„.ŅõmoK–ꏶ^[œĘ%,¤ņĒR†ĘqM•~ÜŁiš¶•«Ļ érV0yÉ< ×מ9ųG}©čŗgl,įŗKu’H ˱<õļV\cc Ą¾)Ō“—[M*åķn]ĄŒń’źÆ-’„£ÄŗwˆV=Jõę¾’ggGÆLPUßßźŽ+–Éļęghœ2ärŽßJöoż±ōE¹¾Ś³«Äd|Ćż+žlFä։®j)4oĮ†=3õ®rx~;jné=¹ČĆēšĪ3ė0Y>§į•Š+É-®Č+ŗŲČBłé]ÆĆ\żtßė0Ü\F>WĘ ‘ŃOųÖ¶ógÄÄæ®<-uo r²ł””šė“>•Sāǃ×G—Ć^5±“Ļ“łqXƒņ7ҵŒsŗÄß馕¶µ k%Ę2vūēķ¶·? ~564½8|I3bźĘXćžėšŅ1Ō,y£¢ÆĆK½kĀ3Ž_Y^Ȯ自g _¦E{_ĄųƒĆæļ5Æ—¾Ō,™Ś5‘ŚX²NN}øę“OK°<‹Ēš·‚¼Oń ~#x]ZÖĖXPu+}ßź]F2£„vŸ `Ņ<3āī¤ņī­„e}ĢüIķōØ“Š–Ļońę…/‰4K‹§@ś}Ņ8ŽD\…'”SŚæ1tmbĒĄž"ń.ƒā ™āv…Ć©ć†}‡ó¬åž§Žk–¶Ņ^(G ±v`»{ę¹ū/>I’Š*uŪĻ•ö: ĻcųiāĻ|6ń•Ž¢‹s%ؑ ¶Œņqߊż‚Ń5ĻxŹĮļcužŅāé"ŽaŒąž5›•Ī‹£—kH4›™£YK ą?^+åĻŚįģ'šrėśTZĘpłHžg^¤–ü:R1“W?="Kn’Ēø‘Čō⾆ųāč4}`x;Z“šēKæ2«°HGpÖ[A~Ģ’uæŲßö®šÅ{[øķ|"÷Mo¬ł¹¼6Ž1Üg"æµŁgÓüC£h^>š„å¾§įm^%¹‚h_r‚Ź ®G’Z±Ŗ½ŌĪŹrŠö+¾š×Œaw”2\G,EsŸ_ҾǟģžńŚ«{į=V&WB8!Ü§õü½ėžPźQłūo~Ⱦųõš‹ā—ģł.žŸš“YE6»ą»‰N Č2ā5|ä œ?…„ ^.Šn¬u]_Iæ°]7_Óī$“Ōm”`C:1Vuź U-)É8žQ<@FFI5Õ‡CłWlv8gFb‡ŒčxėP]JD\t¦bA±mį™b*9ŹK )œqAPQ‘Ųü¬½*VG?ƒG­„µbI+Ųži“<Čńŗķ݌8¦‘Qv5ć.,®ķ%mxʶޣŠžÆ’ąÜÆŪuG×?b_ˆš³ŲėZYžŅšuÄ×!Õ³ež‘“’p;3zr[”Õ t?®;½4“QܼŽTĢ>aė\„Ż †]³Ä$žV÷Æ:¬M.|«ńæįmŸŠōMcK†{}?Ävķś=܃‡Ē&.zd_ZüßńW‡æ·l/-õ4Łop>ĻxŠw”„sŽĒóu’ż˜u‡>&o[č syņ4xhūÜūWäėŹ—ŃÜEøŪøÜ¹ė]T„”…R#€™béŚ£˜¢‚"Vv'Ö»bīŽ)JŚv܈ŹyÕa± †,sÓŽ˜¹É|ÉWĖ zńSG"#nĄĪqŠ Œ‹ŃK;”öĶHŅHīĮHߌńڃŖ4ĪŪR²»°˜ŠXʶ{ū×ōŪ’*żØąńĆcö4ų‡¬lד­÷¾ŗ‘Č`ØŪ¶'‚§œÄśTÉ]4vәżHųSāś§Ćūź3M’ 'ŁueŲA ¼n#Æ@Jöē¼¶¼ƒOžY¬nāŽ€‘^eKšJW2­ƒÜÉ$mõk'ƒ‚Ėķ_ŽŸš[_ŲīŚąMæĘ čÉ?Œt(™ī1ó^y“žGå\’4ƒčš õõ½Üśf© ‰{o!VV9č}Ę+¤ń:Å&Šd†’é[!waqܚʧrÓ±Kį~­ZÄ’¼,Ģ8G·­~€x~>ēK@®_!»×—‹løĖø×‘ ¼3ø‘G;VēĆŲļü!āHµų—ķö˜*É!UO/”ÅqBZ•'”ö³ŪĆ©éÖך}±Häräē?yÕÓĖk4‘Ķ«©åXtÆ¢Į·k3ĶÄ^l³eķŁXzÕ±“ņÅ÷é^Œ%Šó§ŲĪžĶc#+ĪzŅ}”ŌåsZ©4@­såŹ®sżŽ™,;¤.šĆ¹‡aU_IåBĮąŁ ¬‹}YY|¶GĪ>¾Ō¤€ŌK¹™‘ĄčkA®yd‚[¶+9;S…ĶķJ½Õę’ā<ąqÖ½Mš4:eŹ^\FĪĄ dēĆV­“;éŠ5„hb¹Sī©—Q)‹Ļ܃=yę¼ź• •;üÄdX‘T®c±²Qys8D' õō©¤l‘ė? ægæücæÓī4›Yt/ KłAé…Ē×­~Ąüż¾ü-·Cöń&¹³-©O÷‹ŸīŒvž•ßJ$ŹGÖÖÖö¶6ńÄņ½ĖĘ0ŽJƵhG|oBG–ƒŽz×TccžR¹·oBTżóŻhÓõ9'x&øO;ž“ÉJś_‰\‚KpOµ|įńö”šĘŸ¤jɬė?ŲŠŖFfÉlv ļZSŁÓŲü0ż”m Śk×ļįū{{}i²‚Hsē\ö˜Wå/ÄÆ‹Ž5ųƒ®MwŖź×6ŗLM˜b’ēÜ×£N•Œ+HņO=Ć:ēxbX’rI§JĢÉ\/R}ė¦1±åŌ‘M#ĒļWŌÕŃä½ŗģqÜUš6‘?8ćµlA¦4Ģ¢$ł¾(GO”č:¦µ}“įķ"÷XÕ¤•aņ!·ĒA_“²WücĘ“NńWňo4«u;ķķ#]°ĪvČĘøźTQ:”ś4ų9ū'|1ųY£čŽ𕆛=š„#b²1O#©ė_` Z8’µFŌP0Ŗ=é^tēs¦g-ä:­ą›Oū*ł]q‰G\ūW£Zʗ0Ą?ʳnʅ˜¬Ų~ķ”6O\Vn„lŃłwŒśV-€ųd’ā,JH¹Ś­üUĢi¾!–ßSš'o,ä© i +‰­xŅ0^“žG'Ɵ¼ońĖĆ^·ø>%¹xāŚĶFĄž;ųUF76Œl~f|[ż°uOC}¦xō“l”ŒĘńżļ_zmÜwN¹vfā€hmŒ’Ø*ꔹĶW¹Ć—-»ÓŚ‚yY5®œķ’£®oZĆeø·‘÷åqĒJ“.J£Č]ø“'šzŖ4`ŖƒģED/Ś[ ŒćÆJĀŌf Ø#óė@5ā]Fč;(ü½ÓŽÆų:[®$øuaž ž“čŅga¹čqŽ­.;C8ǦsŠ•VH„QŲ£µWæiŪ,~t n  –“Ööåbt,·C\ўųÜ4󠍘ö4jYW 9R„sQIcn MĄŒ«ö[øĀKģm2Ė/„mĆ3³pžZŸA@@–į³ZFEŒŽqė@š~øė ƒŒŽ•ÉŻÅ²öāušVp[ }DΉ•‘†Ņ p:†³3:) ĆÆ4 #ĶŖj’Š×•Xė灬nÄćĻ„uZéćxåe“5&Lō§ˆŽŁfGF|m®bK9”:ķĘqփ)=MK xž6G(00+˜øżÅƄĮö WF¬z“½ŗÄÉ߃Œq·įА3Ž”š4m¬`n…@Euš-ŌŚTźčŪ™OÆZøĀå#[ńµÕĶ£Į&ÅĻŠņ›«•œ0v<ē§*“LØ +sTīćSē§J™JĢ Q±ˆF8«¹‘Y³ĻåMH.\ņ śÖæ§½¤qßY—7 Ć=©-EĶ­‹pČ 4€#-ķUQžģ”·_3w©’&{.¢ĘC*H5 «yĮåėŽ† ČЉšīR qŠ U÷ņ­öĆ(ä‘ó ÕK;›}ĢåŲqĻJĻŗšķœvā\¤‘‚:♬›¼q¢éŗMżÅ֙iXœž†¼éuiįG‘›#ZGLYĘjZŌRēO¾Xī-œµæ‡#Ö¾;ų‹įIl/—ģȲEżäéŠ\ČÕAž-Æh¶ŗĪ™6—|H¾PGozųÅŽŌ|®]h7ĪŃ«;I ūźNGó2™¤bs÷z-ōÄ7W8āSørvžG"½oĀ"ŽźĶR ¬Üc ø}kާ‘¼67'Óļ!淑#”žĢ3Ļ5Õ]ŁČˆĶ ¹UPFÓ÷MqŹV:bĶm3YV·h *¤`±ļY:®­RL`ަUĪ1ƒŠŚ™…Iüć-&ĒT²{™¤Ó ówĪĻ­}•„j){n’Ēy˜² `żąkŠ„O>rg@ķ½YBoļu¦ƒ2 0$F&ua×éI‰1šDĀPńĘ6t"¶o¦µ’Õ!Š#œpŁči&Rv9ėĶ2H­ŒŠ«~Ķxē¼$ž#ŠÆaūr*ƒœ§,{Š™³®œŗŚi:]Ž©«Hl&1ĘL- ø`0ź+˜ÕLžk-”¹źxåMqMźtFZźEc§ż¶ņ($P…żz}j®±¢ėŽž;µ¶ŽņŻŪzóŽN{Ō¦LŅŁ MŃ~)éé£ź"ĆX‚9%ŗYOŹ\‹Ę}+ź–½ŗšž¢"˜‡±±ŪÖ“ƒ1‘ōo†5ÉõK T3"a—®+ÓtˆÅ¾ŌÜä0sƒ]}J¬ź® ¾Ģ܇ĖĪ2)öבžń‰p1šģLįžęMę®°‰#Žs€k:ŌRČį88ę‚¹ĢčŚuŸ–Ń"ŪIČ įśżĒŲtū‹øä°ņ“ėAw¹Ģų3ÅZ¶± ­*¢ŽVy}kŌ“‹Čn Ū–_4rFph&r4n4›i¾ąä“‘ž”Z[¬…FŁ‘Šž“Jn• ŲśTŃ!£<ĢŖ ć³µ+ĆĘvø#)žd÷į w,Ź8ÉēŠŸ‡°éšŻę©k;™]ŚB²9źqœW°xzūO»³†ŽīŚSr™Rq€ĄPg)tDšŒ‘"fŒ'ļt‚—ÓK„xĄpqĄ „ĘE92“rĀĮsƒ‘ĆUFј³°A;gƒYŌ5Œ®I‰4n'ÜL{øĒµ,ŃĒhŃņĢŽż+ ²ŒŲ<É7ĆēżœÕf¾žŹso$ČlҌŗ06ģo̰:ĢͼśŽ s×»ķ–O-Ź©=sއ>Ć^f/™}4!^yQ·d f²®Æ%””įW×­.vƇ#·yń4k ''Շ„oßŲi°a L#gåō­# ņ8ŻJ8QŌĘQćFÕ$ī惂 PłYQ®ļģļŽpDˆsÓÆÖ½@ÕįhÕomYĖ1< @āĆVžŌČLL¬ĖŌg‘õ®NåÖéeQūæ\š+H. „cÓķ0;ł‡t#“ļ[šu®ķ÷P‚„ō±­,>vwcY¾XV4!6øc"¹Łźźfk‚I<ś ‰‡;qf…$ A×­d$rC‚’W°¤„c7$Nŗš>ę¹µ Ou<z”q­wˆHR#Ą8ķéG8¹‘ĻÉ(‘$P§nk”Ō5G²r»…[;Ąč1SĢƙĢ£x¹äK‹=n8§¼ņŁOńddā·4‹łµH×OµT䝄…{Ņ‚<ų3Ńü? ¶zM妤nZįPˆŲ’Ųē¹5ÄxsĞ-š·‰īō«Awy£ŽøQ2ØģpOį׌ƒ§—©ō…¼iā/ Ķ©čŽ+Ņ–ćGU±ČØ Hž„½;Wʾ8Ō›Tń.§Ø„Ź}˜ÉĢ*xėłŠfānxr[Kd¾“ņälģĘ:ęī|Vb—PŅą!Ędaņć?Āk‚ęŅą"ČŹž­zæƒ<9}«]M¤Ūˆ¦†įWkn mĒ„!sæ„x0Ų$Š 9Ré‰9p>½+‚ńæ€gø×4nŪÄh"ĘsŸÆ¬Bć+Ÿ†“żRóY˜Ā¬žR3|­ŌÉ?—ė^™דŪHĻbĻ$dü‰ÕĄļVh„­']zĘņś÷Jפ،¬±ī\ˆĪG_Ö¼ĄéVś.§4ŗY‚HŽLch¤ibóÅ£k¢m2åŚŌU'ÆZõ]kz˜exēÓŚA‚ĆkFøč8ę²zhhäg×bŅ|B–³ŻGĶĢD2“Ļ8Æ1ų&„ā+&ÖŚŚāĘkVŲfœJ˜Ęн©ĘV1hå|ńŠ_‡“ŽYų³N’ßĢŚÜ‡"+Ķõ«~;Üx”.o|6āѓ:Œ^„śĮ­āŃ.ńļüM¾ŗ¾’ŪQÕu=RŃqĆIóöéŅ“µß h2“š”›{™$ÜÄ±ĆCļ[Ź ‡tOķ$H|@NzŒJö ? ;Zݤ- ʊ[‘Ųu¬å.†N×Ōódŗ¹‚īÅ#žŻ’FCø’zjóķ?J½š¾±Økr3Kę¹’ē„(˹7GÖ>"Žj0CoŖL¶KɎYĻ‚HēŠōgSĘž’„›Fø‘…ě󓄨«rŌ‡ŸS|kŌümą»;…½¹¹EŸ «“–}kņÆāƒt½KNŸÄÖ5ķč]ˆŽ6`žt®NmnT(k©ńŽ‘½÷ˆ>ČĖ/–¤²Ŗ.q‚Aēńƹ<šļĀqYÉŖyk˜†Łg#vütöķZDź4ˆõż4C"ŹĪÆåvé’*ׄ¼A§yŅé3ż„.†š¬ č=Å1ø£»}+EĶĄ’7˜üŲĘ8¬Ł¬‡œśµ’ˆ/bA±Ša›¦jvܤ¬x›ā”«ŽźZ•µÄß¼-†mĄÆ°9Æ”tŒižšŹĮć]BHv˜åsÜ_š¦¤“QžŃÖāk`ęņ°'­}«š·C¶h ՘Å:”$ž 3 ¾‡Ņ:.—-³„ŒžżŌ„@„|—ń_Ā~ųŪāĖoų²īīĖYÓ¦±dÖ>@ą’&„{æƒ>/Į½1lģ5ķļ ĻG"Ē.T)\moO§Ö¾9ų‘ąĖȵ{ĖĶE¼¶mļr€6õ8Č’ėÓL|Ē’čŽ(¼·µšŅžiŸÜŗżĘļ·ŌWŃ ¼a„é¶ĘKłnE±R Ę'ó­b“dµŠš‰Z‚Ļpś¢\ÜÄĢI9#>•ĖXų‹ģšÉēĻä‹-Ī OzŽ] ­coIń¦¤’Ū[ø™Š&@zU]CĆŅŻµ£•™€$uĄ£—”¼]™Šü5ŅN±ŖC§jw?ŁįŠNcö?nx³ąĘ¹šŸĒQÜhQŽźÕŠH·av@ź¼Qc^e{åī£meÖžtÉd±ļ^AØx‹Qy%’ę"Wō_ZCM„×õK›hc…ēšĶNJ§@=Oé^ĒąĶp_ųfūNšŚ1sĖĒ‘’ v Żlqlš§ö”ęIL›°2~ŸŹ±ÅWWöŗ…Ž„Mb¤<‹÷ÕĄĻcŽ“ƒ£sļŸŁsāv‰c¤¢ź:“z}„‹‚eĪA"æQģo oSķÖz¦†įV+˜Žčä'·ŌzV“•Ö§š÷7¼7įøn±}–Öų'›µĄ—¹ kņ#ö‡±ųońSV°½Ņ¬ķeCę,±Ø(8$gœńŅøjS¼“Šhń/ų\š„Éѵ«‹“bÉ"[ȑäF2+ȼGćCv#¾Š¤2[³€®T±<ątŖöfŠ›>“šĄ_ˆ¾5š”ń嶙Ö1FŅI± ;±ÜqÓ­xŽ„©Ś*\Xė¶Ļ±2²žł£“±œ•‰tO’ĀDDnvl;J°Ą` }£_E+p‘( ½æĢF-LJąń%茮µ¬«¹ŹīŪæŖŸˆo%Ņm¾ĒpĻ ŃG“äcå÷«‹‚š­–‹ā&žŚ„ó̤#nĪN8ž?:ōO…ŗvÆać KDŗšŌ$M'ī‰ĮvĄż>µ£e»ģu’t‹M^ĒRW•BЧęVƓ“(¬”×Õua?ٟYu>¼Önčj]ĻRńĶŸˆ“›vÓ5;Ż=Ōü…Ž»¾æĪ“~HA½šž½žńrUē#”cŒō§X#"„æ —Yׄmkp÷1‘"ćnӜ×ѹńEžt»«©`ʐń‡%\{ž\Č“ĻńĶ÷€|Oo¤_5“gęš.Ó¹ .śßĒ7ļ©Ąbŗž$eFŽ”Ł}[šīk¬ź:~› ‘/Wļ`mæĻ„{ÆŁ4Qi}¦CŖ,W*„¾•Ė4h¢¬WšGĆ’k7Z•²{$ŒČ6}å¹5¹}ššEÖZ¬RLŅ ‘ŹjĘR±j’g½hŸ tĖÆ_^Śß[y°&ŃĻ-žZųkā§4›öŌ<-½6»üėm‡s õ_Ź“§Qó ÓHńÆxŸIń^³į­KĘŚjxkĐ G‘d*[¶I}ėŠ5_оšœSųSÄ·Ä~ŗŪl“[¾óGßļšļV'”č~čŚ~‘=Üž‘õ»Xw7Ģ7ääzsŠłūćOŽ‘£”ŹāA’Æ“'’1ž‚¼·JˆßxR™ŻĘ˜7¶pĆøżkm ĻCųā?u /ķ_CYH·F%Č#©ż+ęŚH‹XńåĪØ%Kml’$B6ł€śœsIÉ-ĒĻ·:&Æa"‹ˆęHŪep `ŽĀ֒-Ģ™ŽU98ā¢R*:Ū„Ō-⹐8`›r§Æ®?d_^xƒ]…ÓK ­ĖÖŪßh`2,{ŸėP$ϾĮńµÅŸ…÷WpAŌģķÓĪB7™[<­@_šDæŚ{Hų«š³Ä?²’‹u)l¼{įÖ <¤µÄq°ĆćÖ„ĒFŽšiŸ²š}åę‘ ‰Ą‘_”öƹ< āK_ų,ŚĢļÆfKŖ±ź½ńųŠę™¹ÉüCŅ!Ö&🊭huĶ*įCJŒrš±ŚčĆŗ•'#Śæ“Oų.÷ģAeš ćv“ūAųJĪųV_ÜŪŻÉl› ž§·v÷’®s×9ć„dę£fūŪļ’‚c=üäjŚ\ÖsĻģ|čŽ Ī°nULü¾Õß 6Ø»żć¹{UvŠVžļ†8<ņ*Žr“‘,xŗżsM Ę TcĪMŠŌžI >~ž•$|¹-»§=1A¹y°XŌ–dńŅ”“s H[‚=(5`TŽ4\“Č=kÓ>|JńGĄßŠžųķąWŽ,šŻŚ]G"Æ4A†ųÉī äcޚ: µ?ÓöSż¤¼3ūTü ųń?ƒyś~«§C1`൓Ų£|t ä}AÆ”®”»ˆ;•Ž£”jäÆSĖ<{¢¾©§¬č§ķvłŚqŌzWę—Ä?Žų/ÅWšĆ0ŸĀšÓzZŻR=ų’&øXļŠų“ö­ųOwńwĄŸŪ”Ž÷QÓa6ĢĢ€–¶ Ÿ\tükł1ų·šā‡5Ö¼.-mģ¬V@֛3‰W7ŠńZS‘•HÜń²¦)]]²‡ŒPUŽēÖ½ gŸ8ŲHį/.2#Œõ&«ŗ!pIŚ{ō5”˜Ŗ›å%]‘3÷OaV„J*˜’yž£ÆćAp܍¼Čä… ÷LJ½^ŽźŹŃ’pIō č§¹n)Ü“zó·ž zŸĀ_ŒZļģóńį_Ęļ Õ¹Šõx缊ß9žÜąHčFÜŃ~ēm6 gĮŽžńf—šļ揄õEÕ>xęĘ851·1Ē3€Ųcåläsø{WŽ> ŸPIuŸźŚ{[Édźöcäš26ŸóÓŽ¼śØč;gū9x/ĪĆqīäńļSźV¾ÕōķCĀZͼSéZ¬-Ęć+&įŒcüō®IŽ.Ēłō’ĮO’d½Gö@ż«u½68¤·šnµ<—zdę6ņßs9nœ=«ążIÆ%…Ü–ū7l g%”rzœœiś¬S1łĄČ8ćØćłWŪ?ørgY7F]°6ąš?—į^‡ćkIžńmܶpēEzųIŲó±Ž;J³B<Ō]ŹNx+vāę4„°]…F0Zõ¢ūTąsbeøœ’  ō«ķ䑕 t#ŠQµ»Jš•ŹgÆ„hŚÄ–Ķ!Db„’4ÄEzŽĀą«68ąs\&§is§MG 4lp Å7&Tc}»8/Æ–+i‚šqÉöėžšŻūĒ&„Ł£ČŚĶÜz×"ŖG£Bƒ=ÆKšŌZc˜TFįIĆØ­HĮHv…ć#­y*Żž‡!ę—Qƒ#8R9ķU¼éŻ~Lć8„N7frŲ»”č>$ńŽ”‰ą])µŻMß`۟.?RXzz ż ųūÄ™ćo‰óZxžż_riįŹ¬-īŸŌž•ßN‘śUį’iž“†+[kk+déjGµu²]ķˆÅeLqœfŗć9ö6ōm>ŽöŁäšek¬V[A"]ŗŹU$NŸķUM-܆6¶Æė\-åå¬dØŪ%ĻSڃZhł·ö¦·Ō|]š¶ÉtmGOžŚ²¹óįD“0rHķ×óƗķāūiŚgõ;Cs§Ć·*ģē¹éWŻ+D|'ń›öūųwąč/ķćæóõįń4ąĘø½ĻłÅ~&ücż©<]ń VÕFŸ}sk¦ĪŁß!ńģ§§ć]Ō©ŲĪuR>h7+|ņK}s$×-ϘĒ'v:ūt¬kŪ„DHˆīō®ČU*ÜĪIīĄ$礄 –PĄē­YÅ&\Š20PHĻCҵ”ÓŚ|Ä©†Ąā“vė-=b’FŠIīOŻH—%ž˜Æ½?fĻŲćĘŻJŚś[MKĆ>šį#i2$’3é‘ĒÖ¹ŖO¹ŃӒ죒äų_ū9höŒś=žÆ®•V[©@–@x;˜œóÖæIltĖ{+8ģąŻ9XŌ`/į^uIÜŻ+–äČV8Ó8Ę+^M=ü•%pĄõÅsJ]Ž‚amŖ”Y±Ž•••å­čUeņÉūµtå”įć!‡4ł/,ćLFž¼ō©¹qĪ#Z¾xĆÄʒ…. °õƆüGńĪŅŪT»’źDµøIY][ƒĮź>µqĶR>vų—ūd-œ—–Ž “Y5hP9Icł‘Šüõń—ÄļųćS{ķwP/ Ÿ3Ūć„céś×]:Blę­"BŖźüøĘ=éŹ7Cók¢ÖFr‘r) Ą®_ż‘]&‰¢ŽjrˆćŽQūģJę›čAķ^šXɹS2s×óÆsҼ,‘81Į²7Ą8+ K Æ¢xn(‘Hł†p01Šęücįz=cH½Ņ¤ l¼Č ćŒ÷õļY„qst=ĢŽ“ ó1Šī ‹m”rnńėBLĶĻ”ģ³’¼ŠÓ·ÕŚ ØŻœ£/¢‘'S7'–3h%\ÉĶr×&x‹]Į9Ü9 š° MnŁŠ}„Ž~`Żjed¬.ģä ĪqŽ”§©¤3eĆ#)8®\BPČU˜§N”Ģų®ĆPŌ4ö†ŅfVąŽ}+›Š“mNŚ(̼‘÷”” ī Šćģ\÷ĶZž"»_*kn"ö#ū:<.®OozēõI¤‚H‘ĘøśUE09ū¶h™ę2©ćƒĒÖ¹oķµ[··’mėœx5 FŸ|f;W “öļ]EČ•—q) čhØ·žiV'‚3OŌģąŽ?õ·sŽø  zDØ#X„Q“ i·ÓB»£\’…dāg+6Ń0œČ ōØ.„é.wt9õ¤UŒÉ…Ȑƒ+ŖöśVŽmŚŁäŠE 󞓥Į·ÕŽ Ž»g×­m…Ø÷.¦29Ńa„s——İ[_­›ßšéü^¶Ģq‘Sȍ;œĶģŽSn,˜.-刪ēv1Å>T7 7·‘7:HJś]ØC#°@źq‘ü©˜›šž”5ģl‡ sō®ĪöŅņęEµŗ„ÜÄŲeŻŠścƎIī¼°ēl©ĮĮą×U¦ķ¶cö¤õķ@ļ¦Ūp£f{Ō<Ī€3ŸĒµ ŠDĖ,·¶E>=’–E~h—Śļ-ŚH¢\śqĮŖoyē«Å*ĆļŚ€ ·#•'„]V ”'·½Q¹‚RŒČĒäg„sIę#ŒąĀ€9›½2Źy‡Śc$ƒ€qÖ®YX[Äbņā_n(‡µ-CuŒ‚¬Ż=ŖÆŚU“ŗūŠ ŁŃAdp;VdZ­½äRF$bźp3ւd„.‘§SKÓ²˜ żŃō eYŚīß2@†ue@ēŲ闞M©óŃwąŠS‚ņ7¹u%:ąjģōų ø‰“Ļ‹pžŽ€3nćū4į@ź3‘^7ćÆ?‡”’E…ž@@ę&šóFæƒ|e§xM2Kk4sU÷”LŠįuųXźrĖh¤AœœzŠüŠp2­„øYD$nˆõuÆEÓü9¢ļŠń"h&ČlM Ų›© LŒŹ±ĘĒ ŠĶÓ­¼·Ż&TöėHGgģ+ r¬;f­XźQćŒÅŌąPc-Ę^5“ūšŽe„öć­sņʼnƒ½Gzi6ęźH wU ŽzVƁŸ4sÅ##n\žzÖžĢøÄéīną‹žģ}+>ŚFóŌE mǟz“ŠnĘܚL×X‘@t=@Źė:=ޚķ#DĘķĶēfCO#Œ«Q3™ĮČ'šŹH„"š4|ш³ĪEhMc•.-% uµACŻ£>bœ©ż+˜¾Õ˜\­±µ‘Šœ=1r•ß;ŖÓµié««y˜ŗåxĮ ‰““pŃH$‹< t§¤HŹÄ #2[3N#pP„ ÕÕaŒŲ4r!Čź()°\å\„'ŽjܗŵK?–y”ÅvµÓĻ©‡ŠmńŚJŖœć©ėVŪRŽD‡gįWĖŌĮ;æ“RGS ˜~˜„K‰d¼ÉNįŚ Ņ.ę…Üó‹Uh[{ōĮ=}ź Mn)c[I¬ąx†w2­Ÿ­L•ĪŖgŹ|w™®čĻ4·ĖDdzłvі{łģåŗXęeÜ#aƒ\Õ tgŽćOqs&Zsé]‡¦iŸ4[Ė[?ǧėq¾Ųģ®ĘŐī¹ćžx¬€Ėų[ń dz·Ž­jČŃ3 ¶škL„`~¾µ-ĪŖ'1Ś=ŸĻŌŹZÖŹ]Ȓrxö÷Ē®¼‘¢xu«1lÓÓµ£f®¢øŒÆCQĻ4÷n»aĪJšcF¢_CĖwnŖ üŒZĻ’„ˆé²6ÖPć=zVŠŸqœfæ©Ķ­Üd€žĄ×-yį5µ…^åO•(,¼’:Rcs…‹OŸGŌXŚķū;’1]Œ ‚=Aķ‚\#q%k1KĢӊģ“F0@ī hŪ\Ū›¤lƒŌŽEĶ­äk8c¶hy½ęXĻj7BRLäb€0.®šÖU„Bvc$åPIēg€l~øĒQ[Ē`fķž¢÷Ķ-˜fĪc­o„żĄa‹äې1LĀĆ- Ā£} łˆzõ»¤i0j“2† "óÉĘhWÄtś$fY‘åē•NŖk* @<`ŪzF1Q5ŌÖÓ¶ ,,ca· ĻcX֗J&eßo,GaY4XĖ!4~Sŗür*Õģo{4j iČš•: M>(bW”©ˆœnóķTūĶäŗ›óĮ©ö}†fŻŁрŻõÅaÜųQVŚ[ø„aĄŪźy’ žR”Ól-­”.ā³n'­l\h·7,¶ņFīp1šØÄ|š\óķNÓR]šÄQÓ8`ֱ݇ ūU£²*(^™Ļ?•SģhO“÷R¬Ž7·|œq_DxgO°m=$Xc ĄÉ_j„äDŸcŸń:e“²*Ŗ3“ņó^}:ÄJ•GŲĒ+x»™`W›ä¼TžF¢ń -ž#Ž)ŒŽŅe‰MłG>”ĶYü“‘ÄGiĄąPŠ3Ļ„Öę sWTĪܑګZĻ Ć4¬Įŗę”ĄĶĄŽęņ`苬/wØŚę[¢¤Ūł[xĄi{1FĖĒˊ8‹FRoāĄćJó?źńiė%Ä{AĮܹ µ5Oøłüæų·XŃψ..-ŸĢ…ąv…Ü8ż+®Ó绸ŅįÕtd’hŠ;B—_AĻS^į„(čz½‡†<[ń#Į0kv³AįķF”ŪI!Yņ8䣚õmĮ÷^³Ń.õŁ“ŪĖŲć_3”f$u#µ"Ķ_ŻŁkŌ/tżZĪĖZ€2 †S×ņ¦éo ·Wém'28\ōĶ)3ś8{ˆ@]b `Ø«š~gwv‘<Š«œ¹nxśV&NF…Īgo2…“Č•³·žté^”ą{k::^:*ʰ䖤.[ź{¾™ćļŚ^i×Ļfńŗ~³tŅŁÉŚf ’ŗu¬½.ݤ†ļ(&čCõ4„!” ņ4½}.’8 #Ļ€r?­vW~<¶¾¶‚ HŒSpL3õ©nć='į,—Zž”pÓ4 Įȱ$§mŁčz×Ŗxõl<{eeu½Y±"²&å韛łT6 ž'‡ōæßµ“Ń-Ķ‹’wya¶ū Ģń—ĆmDš›Ļ„ĮÕͼ…&ŠFŚ ž˜=ūÕĘVĮ>xQ.µ™@_!„!†sŽ{WŌ%š‚é0Ś“ń¢¤~b•\‘!ķ[˜3Ątļų—Ā‘‚'Śgcļ]­ŒŽ•čĆā­żŌW‹&C±i3ōéCd8£ŸƒĒŸŪ7_Y¶¤ĢDųAžō+ōxՀʓņQAp‰ō,:”~;°[Ū[ĖKʎ1”Č>SČĒé^iāķ3FŌu-XÓo,”ˆČÆŠäJ ņR²©‡BVŠŅ>Š|Y+xÆĮŗ’Įcįq”_P? óßčšŻŽ“oqįŪ«ūk„/• õ’sĮ„mīyÜ6Ž,IĶ–«x÷o !Ųäś+Ż~xF+ūĘ[ÉÖŽŒæ™!įæ×k̉r5īģßķJuņAćÓ9Ŗš’ˆtW’ŽĀ®ć|,›XsĒ~•œ÷*:™«é–ŗżĖ鏜Šä–aŃz}+ęõÖķ5m[XŽŚĪ{Q `>>W'ҤŃÄė|?ṯ£’e™|Åł÷Hz×Ųß­®,4²‚€į‰-nsMAč~"““™äVK‰ĪĆÓó÷Ē .Ųų¢ĻāN—¦J5dŁ¢ŻIĢyä7sš „zœ'Žüws&—¤ÜxWÄ[Ū\8óķęTaŲzšOźW:ķ„6z½šĻr i$L€EŠ Dńų:Ąźwņø|ĄźTōükgĆśV‘k§Ad—1ŪF‘Ÿ™Ų’ǰļNęu;¤«'ŚK^CZņ‡LטųļL“²»Ó”³+k3…ep>cŠüV‹mLÖǧų ĮČEÄÓÉdąęSŽ‚½£KšÖ›kmŗĆ,äg;Ū$ś wE&G>„„č:‹%«-„Į”SŒ„dxŸā®³,pi“_K-œ$ķÜzŪéC±Ijfė:¶‘}”Ū^C GxŁf1Ÿ®?žs^5żŸyu©N‚;u²eČĪKžœ–¦œ½Ž ūMÖ<=āKÉŚĒL*r˜ūŻ’*ö”Ļ…ōkOi1ėz;[ƒp-Ąfˆ“Ń…IG®x Yš·Šl®l5­4A¦]D¢ĒĮŌ¼/§^Ć„k¶JĢšMĖrĘĮėōÆĻx–ēÅZę««\ƝÄŅ–x‘v…ēŅ©£šJŚ’évAu»ö«`ńĒź6,ū µžčåN£#ėšŹi DŽ ėŪvĒQK鼟0E8sÖ½­¼cćŪčn5Č`µ‘ZGĻ­gsEē=Wą?m¾%¾£]:¤fÕ¢;JńÕ}k×|gāļųŹņ/Ć-Ž:÷Į>hc;o’]mrĻEń4.K£qWVMw±wÆ#x{Ä2ŪźÖpB²° ę¬Jfr]lšw„<'-õ‹ųŠā(“¢Į„äņ=±U~,’ĀÆš¤7uE½vmŒ›NÉądŌJŒü‡ųvż’]²VM§q]–šŠLxgŽES“Œņ+6¬$Ėź¢„i ±Øf+"VąŽ‡ƒÖ¾BµŅm“?^kŚ@PĖÄŃc䗒@Ūۚi÷)Iņj1›‹ū9Ī''f¢Ó5{­kWˆKmž–ĢQ—ÅiŹāŚ>óų{ŖKe¤„’ŲŚĪŖ&~ųō5Ķx‹Ęź÷÷Ś+œŽ=†+)QčkŗG‹k¢†yā·Q‡HŪ®{ÕĶ6ń†±ssŒŒė±½JŃģģQógĒ’ƒéā“ī…#éś“ ³hIóó~Uń½ÆĆĻćkm&+øó”‹xĖąNŻųöĒZŚ/°Sü2°ų‡šgāW‡īµ „šõŚ“ėÓcŒWeūHüҼAāń.‚Ö¶Š]@&…mŪåW#qß9ā©»’ō>3Óō=GĀ××0ŹŹ‘ø 3©ĄØÆ”~ ų[MšvŖ|a„jĢ—S‚»R\l#žGõŖ‰7ŗgÆxÆöŽń^·­ŲŚj6׊ŪÉöwĄex±Ńūž nčV~fšėB¶iÓąÉ;•¾?Sˆrčuöž ³š&4¶:B\ÅæyŽ×Ō©ćŌ×Ļ?“zŲüBš~‹ń3ĄZtĒPWņļ™#Ė[Ø<—^żł¬eO©÷¹ę^ õĻ…ś=üŠ}–[we·•—i÷ {ćĪ¼Äö·6µJĢä¼ECAÜå4­Js·ćełJ·ZŌšę·}įOčž%µGe¶˜B1W#ŲūzUĀ&ēź’‡|lŽ:Ó­µO“M#ŗļdv%~5ŌyŒ„TbƕKsþ>|:_x:MSO‚Ųź–¬įˆåWæó“_œRŻ#»„'ĖĪӑŽzG‘TĻcųā» ų†Oź3£éŚ‹2ąä܌.N}k过_u_ŲÓö¤ųkńļNb-`ø[MO÷‡ĖkpƐ8εgŌī¦Ļķ»Oń…ńĀ^ų§į Ė]KúͬwpÉ Ae“^”ąoĶ£ŻBcĒĄg“ō¬¦µ²5>׃F°Ōü9iÆŪ±F›ŖÅ|µū[~Ļ’æm?€^=ż–ü{¦²ėŅXKØųvźE)ä]¢’Dć?2–äu*Ä}p5$ā’§Óń2؏ó£ų£ąoü?ńOŒ~ųĻL¾Ó¼eį½Fm'S†tĂTm”½Ćœ×‚O˜¬B\ē‘ŒWU ©FēX•%Pą¼}i¾s<ż®F2:[œ®6Š…J+2"}óPĢ ’Q•½(*1"łŲ•Įć­?ķ>^a8ĻOZĢ»Ҭi>ēˆõēµMĆČįĻŽ'ւ¢ō4Ōs’„G#Ŗż“QO¾+'µu(ɜf™ŁMŸŃ'üŻūk'Ąæ‹śģ“ćOI…źāÖKŸ jŽ\wq0GPzz­a)t-GA÷zåÕ£hœ åųŠ‡ĀŗÕŻ®©mm;&ņWŒØ=+Ž£¹×MŸ{é’C©ųUuĶ&ā8fOo#įĒŽҼ āGÄ+ėkŁļ^1µ#†sšćݑ֫#®ųńBžāż%m>X¦…Ā3nēµścż„y«iŃÜ:m„MŁ#­uҤāģĪ,Dļ”…įĶM­/ļ,®”I"cū¼Š5)^26DĒ שO±äÕFV›O0Ź0|ć=+fēO0€UĻų×\v9å¢@–ņ‰ēø>µ1Ō ń¼!U½³LĖ•™S! ³3œw­żڗ‰¶Įy[>ń°õf¹źĪČķ”IŸWxwįŌe‚1K{‰T|Ä'Żö©µ8ŸKuņ”m#£•ąā*6ĻZœ,rrxŠ÷H»‚I!Ym_åÜz)ĶMŖjlłŁ“ĻŠŹœn9¾‡ ~ŠO •¼ß^ŹŪc†,ī~‚¾ųSū-xĻā)†ėĘé儉l„†™ŗĶļšōØĄĀGźļĀOŁ÷Įß4½*ÓGŃ×G’,–fł™‰ļŗ¾ŠiāŅ-¤ū dʤ€£ļā»ąa-‡č†}~Ž;Ł’KenLOĮSčEl”h7(OcT`9,ŌO ry5wØĒq;;IūåķŽ„}[Wń60Ln&·'5ņ׎~3Į¶£g¦^éAʃ—AUsŖ1?:ž-~ŌÖ>¶½›PÕ¬¤Õ£až!ÉĮīžŻ+ńÆöŠż¶uļjwiįč4ūw+åĖ RōéŌ×e*fugcóÆÄZÕ÷Š'žē^ŗ7RČۈ$ķCžĻ ®Ri[œ6[§^‚»”Ķ©P­o#‡"Wb:u©cÜD ±ĪG=+CŸŚw&ŠŁĄRAē„_·µW™ƒ§© ³¹Š4C’Y”·LņIżq_L|żš¾*|pÖģt_iS”ĖØÉhqÜS\Õ*0‰żžČßšI’ |;¼Ņ¼oćŌÓ¼QŖĆp$r§$ŽFŒc5ū…¦ųcĆzv• –•į½'CŲA?g„&āJójÕ;!¤ŅćWŹ ŗÆJé”±Rä,ūō®YHµHm^ĪģJä4~¢ŗÓ5¼±€ģ09ā ŌēīŚf nŲSļžkļ^ÖčI,£ź=ØFV»āHķ”ŹdM g­|³ń_ö‡Ó<7eqmb}ATœnä{VĶĻĶĻžÕ¾2žąŽŪj³ŁźQ‚#]ېz_&ųƒā?‹žÓ»7RĻ*l›;wƒĖ ožŅĢ$u9'üę·HēuÓY΁Wy “]žw~Um#28W=I\ōļü3ŗó3~…Ęr@Æ]м*ŗ|Į–üJ唬QļśG„m¤‚5b ē9"»‹]*ÖŌ,nT…d ڱŽ;s€»ā=„_¼tĘ„Aō5p‰būN#„SgŒŽ+£žĪŗ†ÄłČ?ķ ŅÄÉŲ†kUfĆķ^O&ø~ņkvR|¬g=č9Ū^{āŅG#G“õĻZźģµĖߖÖFYÕøäs@žˆŚ•Ļ’]!”ōÉĘ}Ŗy“C„ĢmĖå‰Ī}h ķ6ébMŹžSJ!Ód0¾*;÷  —¶%_,éPč׊Ł_ōć+ŃVHÓęFį©« iˆoēZ’WžÄ?ž®c“ÆnCulŖ&åéA¤$‘ÅźzŪīŅ}åwō­µ“žŚ%ŒĶ—QŌ“\¤š™Q™äĖē<ŌV“Ek"“ŖJg/j7V†P`Œ,e‡åR_Łi×c$lRfäąćƒ)2£Ķ“'›ó“óšęō’ -®£q©Ē;+ŹĮŲc®8ė@@õķŹ „ŚŻ'ŌI KF\>?J ‘Ŗ‰ĘHpOCWµ­¢¶ qĒ,h2<śęń””cµ…K§_“¤”$?lśPĖܤ;UĪĆī)~Åöåf€4 ńŽ€2QDaя“(Æ­S[Ēe)*«“(må‘dgó”Ą"²µFh̵ćiļ@ŠĻ&£+,č!pp1Ҷ?²ą2Øäu4M ņ\yĄ2ż+Nyb’5ŲAĒĖhÜAŹ1„[Žćļ¦h–Ö­5™|”ū‚N?Ā©Ūi>QY„*ŒÜå{żhFęŁ «‰u$¾KüŻĶŒlAöFU䂱š‡¦+"ŽKHēx3nĢ~SA¤em Ķ•½ģsĘŹB°ŲʽÅ|“ńĀŚ'‡ēy˼,pQŻ•'µcQäx¶¬—2*3 źćę9ēņ®Mō؍ÜbCöyTƒ½®fĶN†H՘«H'ˆ dŽžõō?ģÕćė;_Ćą_Żż’ĘXÜYÜ6tįOø¤g)t>łŚž ¾·x¦‰ōłåpF=kßō_I5ŒQA,x‘C.{Ö°‰”£s¢Ń5[ä¹UŒåķ^ł£j%°YT$œ`×])•#bõŠ–\r˜ķ\±–ĘÖVgUWĶt܌åõŸéÖ·0Ź'šå®üE»žÖ4*÷ŗS+ٜÕĒ‹ĀHā9”ąž•Żųvā=Odé">֑Žšå–ĮkŽ"·–¹ ŪŚ‹KoxšHīŅ4ŠHŚUÕ[Ļ€w4X“jŚźOjł/łŠēµ½mbĖĘė·=ūPlńַҼ‰FFć×Ö¹ūM:Ü6Y7=08©–ĘɛѬ¶±xķž¼Ó‘cg$Ąć/\ÖI\ŽdojžÓī”–źĪd˜ē©5ąŽ›}¢Ī×eĆ(Ī1éZ(ww-µój:tW{Ø®OPø2¹Š6’ėŃģĢå±É]AĆ”F½xج#ŌQD¾drD ‘ƒPćc(³Bāę+¤T‘*ägÜÕ{m6Y„¹ ’3»Ņ„£cM“‹0§óBMÖvłO‘ a÷N2k.F;µ’ÉŅ'tnpyēńØŅT‘ņü«H«hŪ™ŽŽÜĘ28®#Lńgöōö¦ĘžÜ£ģDłzƒZŖdņž£¦i¶W0Kqöæ³ĪøŚŃ«.ćPŽĀeflóŌ ę«‘ūÆNQ"X"E#©ė„p7·W—LI „ō«FŹ(&°Ō'ņ'0NTąžßZņI[āD:¼Ņ5Ā]iłłWńļMŪ”G[gwę¼qź‰5“¬FXé^sÆ]M²Åwoˆć}˜ĀŽƒ=k¢$Ž^fCp¼•gEµÖ/%›|0~RZĢÄģį³žÉąYą]¹Éö®š#na*".Ķ÷I?vš]ļōG«é×:€h6Äŗ³ Ä{S/%še“im,i2}ēa»wųVå'ŠóŸ¶š®’bdks“^¤W#%ČĀ•“`ļļ@r2)õ×ųr9bKIcc˜88 zFšŲõX`½}1€„yd™ Ą#øżkĆu鵙5µŽ[Éd¶U,Š sAцœbm{Oki!‰®a8Œ2`–õ÷®ŸJš¶•ŖF4]fęņŽÕP³Ŗ»‰ķšÖ0ī?hdų‹ąÆü#ś ¦³į‹ÕuY¤åÜ(ž&q_4ėŗŻŻ“@ŃoRŒG8l’śźģ55ŌÄŅ’µZéŻī­šĒw§±õÆGŠm­ī7É"5zŌŹ%X÷‡~6“ŠG'®kޱ‰"f…v›O-Ū śā‚āŠzˆü[¢C¬ 5KY$ ²dGńÜGaiö[c‰;śqQÉ©œ£ŌłCāž‹ éw0:īŻµČĖ(…—īūēóüŖ/ėvÆmSI¬ŸqŃOĢęŸ ”OFšēƒ!ńį¾Ņģdóngbƒ‘Yš„”ŽK­.ā$yŌlmƔ"¢Hč„-¹äMō³ŻCpåį~Å`ßxnŹÅ–]=)sĄćŚ ¶užÓµ&y ¹Š~šžļÆ£-ī¤š§†ę}#SmL*y€?ßbsĮžUŃ $yt’5«™ķīįi-n |ĄšBū€kŌüńA ø/­ÄŗĶ²ø/ ŖHaļśŠ&Ž“āoĆ’…?4Ō“-Zßڌ³+­¬3AÉ#8Ē~¹¦ų{Ą7:n/öuģsŗĘbŽqu$qڱwźK¹ņ/Äm'ĘŽń5•®³”ÜÜĆx¦D¹‰óŲĻNr:…Żö“|¶{ŚUgUżŪõĶTgÜĘR*ė0źŅŻYÜAy$eQ÷\z5küP²Ņµé6Ń#Ƭ@Āo“ßĻń­Häø|+ųĮoįė(üāż5õ¶‘™ķļb ėŚōOˆšMŻéŠ[Mvŗ Ē鑾4XŻS-ŽŪLs’Śå¾īF{Q–Ž#įŸÄķ}~!]iŽ%˜Ć&ąmīČĪõĻ"æ@<1¤Xų¦Ž}?R†øeŹ»ČÄłd¼0jҰ?#ä/|<Õ<=}youŻÖ•<®±Kœ OAō®5tł¼3eŪĮ5Ź`¤'&1ėLLn”ā]i#†ęeIČZ¼—Y›Ī¼:…ĶķŌR ©sÉŽ:Uów%Ąśįw4]WR¶Š5­RŅĄ 4­ąōņÆ£/4='G½žļOÖ”¹± 3ĒøÓłż g%r=•>Õ|]Ÿq=½«‰Į “nĄÆ×µ”k–”ĀQFOֳ峁ĮŁųĪś «˜¢…&„žģ«ņN{×Ņ_³ä¶—^%Ō“_³…äXĆŪy\ō'ņ5¢f§½_üQ²ŠµĖĖi_%•ƒ„įłéšłOāWÅßx”ĶmqŪO6é%sµNø=ižń«kØĒ}yw7ŲÜ}Ćå'×?}S”é÷ZLś¾œ²ŻĀFéA!M&+³–¾×‘o„¹įųé^)ć›=;Y“E›AŌo-5;i„žv@ڤņ«ųf‹ē>“Óü1cā/[^ßźVńOmŹĘQĻ|Ųõ®FÖĆJÖ4½WJ¼ŌŻ’6xåWĪxūø÷ā’"R>AšļĀė}nóÄžńn„{¦DžcĮt\Ÿ3'åĮü+{į§‚ ŠŒžŗŌĻŚ‹³ĀŅ.ĪÜ’žµHIō>Õ¾hiąŲ¼_ Ž’iŻFÓķČĮŒēØõ+Œš‹<5c~šeÕŅŚBŹfO— y$ō ~GæüHšdś’­¼OąK› M-Š‹ø¢8lķĄ8÷ā¾Eųiń7Rš%żŻ—‰tĻ&Āf1ŻŲÜDe=@żsėHG£ųŸįÕ·Œ~jæŲz…†g>ū›wū¬9ŪģNGé_Kį½zĀÖh5u‚š I³•Č'§éS-‡y«G.ŸŖbb6ŸQ]§£_Ų%½éżõŒčtl§Ö“–§Aō’ģĒćÉ!×n¼-ذŠč‘ŹŖĶņŽŠ}2E}Ų»h;dsެĪh׳Ž*ŻĘ²ŚH|¹U†C)ąäWåÆĒ_YųKĘŚÜvvkc-Ó“XC‚ ?ēń¬ć¹ ¾‡’é×Ó铿„—Cøc«WŲNÖžéķ`×2[ĘĄa–Š*©#e6­c÷‡ž[ūR·ŠtļžČõŪq{¦?@iŪiņ²~E^ūI;fæyļ“[Żż“„•uVļs²2>ĄųC©ßx§ĀŚŽ‘kw ßĀ7ĒæēŠėntżUo¼=©^é&KO“1J¦zŒśž+¢™ü°’ĮĀ’±ä^ń÷†ælÆéh<)āaā˜ā‡ˆnŌ~źį±ĄŹü§żŚžVõĶ&ņŅöņ&·>Q'Ėbr}F+,¾(+żżlsT‰ŹH!Ų_‘ĻÆZĶņÖŻZ(ݜW£w8ē” ®Iו”Xü¶\ēš f€ß…ÜTØ«°„gF/ššŒ Pv&łcgiå#ų'VmĘ^Ō"Õ-gFŚrŒ ō Š’Ių'ķąæŪcögš?ş^éójén¶šķŒm—³ŗQ‡Ü#žyģE)ü>‡Yöõķ’3IjĄF­Źąµ­2im^ßs‹ø[Ģ…ä^]U­‚Ēē_ĒĶ2ŅŪÅĖā/-m¢Ōˆ¶ŗ†4ĄtŽŽäēóƉ>;|%ŸĒ> Öü!t Ōl!k« ėŸ:&e\õą†ėXFBhžG¾:|6½ųećĶjĀk?³é—NŠHxĖžXŲW„I .šq·?™®źr0©”“Éņō¦‰]™vķ.;ć׎aī'l }č¹Ž[bˆČŽĢłH=j€‘Å*ē4²HDaP–ķApÜn@ŪŽī3W `¤†lēxéAŃ ĪĒĮ:×~|Dš?ÅÆ ›Ū]{DŌ ŗŽ[6(å@ΧCŠ’AĻŁ“ćo‚ž*x/įßķGąŻ@Å¢ų—L†Ć^·VŹ x”ćrž¬*+Äė†Ēčī™i§ZĄŽ€Å’1-¢€°##oę)g}FÉ#¹ņŲMĘw óŖD¢œ闆ūDÖmąŗšī­ [ÜĘą!ƒŪ“ł×š§’rżäż“æhmWQÓm¤‡ĀzÕ軓’8’Õ+H¦®)­KŒ“±š¶–ŠjŚ@™Ł„R˜VĒ_C^v,R SĪ2$ņ¤»£ćAXF›¾„sžļsā‘„Ų­Öž·Ģšˆę…ŗnĒ${ń KW:›\-Ą`łÜ+¶•/hu_¼Qżā ‹[×"Ęw ©Oė_¬æ |mkuooį{½W퐂Ķož¬`?*u);Ü»]§ÆxnŌtęhäFÉéÉ®=üAk-Œ‰u KØ_kĘz·ø­)ÅģcVš1tŻn)e )“ĄļZjs,ŹÆ1dČ’ v(3†hī“’ģįf—@” …qڳ_OŗÕ$T³·ycϬŖNÅÓ§vzF…ą6ļgŒE2ŪÆÖ½ĪŅ*[Ē©eń^&'ļcŅ„NĒooā)`·)# ÷÷®SÄ:ņLĢ&;W¶į^~¬č<—Ä>"³[GŽI£Žß$ņ}+£ųiš÷āÅE·‡O±—DŠĮKɃeųW޾µ×B™„·?S¾~ĖZ€bŅuĖ[[oźŪ–[‹‰SvÓĘGĶŪŪŚ¾ä°¶Óģ-xbˆ±Ė 2§ŠW£”ŒåŠŅ³¾»Ö]"ņŗōŚÜWfl„JČVR,{WDQŒ„”&šŠžņTuVĪ0„eźÆ Ć““~čžyŖ!Fę>­ā KM4̳/”OŽĻJłŪÅō½ äœIĮcM#XDų{ć/ķ-k§Ś^ź×ś’X騌ū™ńĄžčļŅæ¾?žŽ–V3²ų1®'žDņžx¤ł„¹ē]T©Ź¢GåW~)x—Ęš¤××z­źäA|‡_BHĶyµĶö9UTņ} ®śp<śõne½Ė»2īĆMWŽO$0=k«Łž|ßBxć ČĆB:V¤‹+ŖY—Ø±WŠŻ·°S¶MŖ d ļ|ą_ųū^šg‡n5Ūš'ÉmŸLć•IXéŒÜ/Łž āOĄž6ųÓ”ŖDL`ŲyD¬c9q„Ggo…ßt(m¼!į­>Śī5Ū¢0<¼õć5ęÕ«sŖ=n\8’ ²g‚ąčm¢2¢«¢óķ\w:¢ŽĒMÓąŠ2Å÷ØīīYœ‘m…`* 3Jɦ`Ź|čōŖ·WČØN®3y®,@lÆė\Ī§ā ¬Ņ ņ"÷ĘH¢)²¢•¾&~Ń^še­ģzÄÉ+ÄoœŸB+ņ£ć/ʗńö¼/4ūc§Ū£c䬉ė¶3I­ ¹’[ęi ·\óPA§ī›ĢG)ž£Ö»9'ø“Ū2ī >j³§é—Sø ’sŲRnĘJ÷=Ā ļµ)ļ"1[·$±ä~õ…~éÖØ©yAŹń\sež”‡Õ‚yP/˜\u­{="–=Ŗ Žs\Ņz™m›…Q°tÅiObķÜ„øČÅH›,či*»E,2mĻ­F(4Éžē„odg) ifmŽ”›čG9­}CYKø’$O)—ƒL͜¶óÄĢŹˆx¬Ū½>xleķ$pqš ē<ĀĘĖP²WIÓ nõŚio *HXnŠ ¹Öż°M4& ¶Ü)ĪAĘk¢7:ƒF'ŚdÅA—B[›ÉŚ!hH!zZĪi]¢(Ēc{PAåH™. SéUŚŚ&c! 7j c~„imbB%IcĆb‰B\"–?½NØ ¢«Ęų_żqšĢń>™ż„¦˜%ƒxć<Ÿj”¬y:-՚Ies¼“9*I’­V­| °F©č­ĮR¼(ö«å+˜ź4?Į„J|“²<ń^ƒ m#“Ÿ~*hZiÓE'Ī RzēŠŚ‰’Ņt}Ųć&”Ą ]ģ®l’XĒś_Øō®OķŽhTd”V°ÖBܧšĮķ]§ˆīģõk+t¶+µPžąäšŽ®Ń›™ŹÄ1”ĻFük‚³ńaŅüDŚ©¦Ż[\uŠF÷rfõ§błĘ’\¶›`t /Ozµ¤lfA'—žp)V¹¾·¼ŸheĖvŖŚéį!‘ÜP-y؝:ī?“)žę¬Ļ-­ā,”¶æ„RЉ>\ē]-ŒūĆG·JŃe½Ąx„QĻBOJŞŁmeXF:P…ÆŲ”2±ĮŠzŚĘ_|7Ø õEGµņŽ(ųčqŅø%ž(äkyĮxIėé@²I3“]ķÉŹ°QKŽsW¶h3”Tcw° ēłÕ‘XŚERļžx \ģ• 2Į\v=«oL¼’/õ¶ŒZ›7:”… Uzk9bÜ᣼MŪŠÖžÄ›ö«FՏ©]Ckr^Ś5WެŅ2čR7öóÄĢaŹ}:”¬ÖlÉ"…_„&‹1uiå•$šŃW°®vĪķ$•Œī“ÓėXK}r‰å½‹ēp=Ŗś^<ŹF»AV4¬ī‘O(7й=§Ū„¤=24D„bhmd¶Ä€æē5ÕģņøŠH˜…ą“ĪĢ«» -³+Jģ‡$ūS4ģŹ<ŲŁ]TćĮ”;\»uåČN*XķŸR%¼łhģxĶnQyE֛ņ±ITWKk ·š,ĄsS-€„©G$p8o‘‡oZå- †KčĶĖ€õ=«>‡šÕžœÖFŻ 2š["¼ŪŐÅev±[©ĮcČč1NąqӘتJßSPÜŪ ‰@Ł(ė·Ņ€hĢIvƔ{­Cö“e)¼«:F.--.®”R *ĄškNM]åŒG2)=Īh$ 6v,85į÷włScćdwņä@ź}{W7āż")”Y”Š@£8¤n|ł¬’C“n“v>^ÕĮźZv«m:Ż]Ū™Sŗ²‘¬"`ėZėx¾GeĀ‚p3_%xĻF¼Ńä’ĘH÷lėŗ¤éŒl|ŃńĀVž(ŅļßüFś¶:×ēõ½¢ųVź]>E>RH@ó ł¹č:Ū• £„7Z-ä/ھĶpŠxģO„sÖńn•„S)=}+‘ÓÅgc±č ŌJžŖGzļt[‰ e’ŁŠ¹n0k†[›¦k]j‰{rZąī™Xē'šÜŠśžāČŪ[ÜyˆåF9•U4L„ŠŽųać_x#ÄŃi÷ö’Ų×Dī OĖ)Ļ8ōžµö­“ŸŚģŒ˜ū;Žż+²10”“:ų4-_MuŸģ”“åMÉ2Œī5Ņi:ūjŠO¦jpAø¶RE*=čq±›F>£ö uūcß»÷Æ=Õō<“4*¬IÉe꓉(ŚŚ\EµĖ3Ø=ł&¹_ŠšfćM>ļLī•RLr Žæ„g8õ7ƒŠųKPÓ!Ńļž9¦e ¶KńŒzV,ŚŪ"7bThr žÕČćfo-V‚\¼6śyū8Šy3É óå »¹¶Ō-µIaq$gŗQZĮhf–¶>šÓž;ź×š5¾Ÿ}s5ĀŪįSĢź9ķ_bžĪ?[ǵ®­ĀK¦4,„#ūŽÕFŒżŠdµW Vcƒ¼^ØŲ[E’"”TvźEmHāŖŽ-¼s-­ĖXĖlĶžŽŌŪ¶{µ3‚ćzķŠ]L,x7Ä+›­8…R³$“…ā¼J‰k§ŻĶeØ®Õq“&~ļT(šv¤ŚÅܞLé+(Ąuś×Ó¾i¢³1˜× ‚ ¤Ż“2œz}õłRŃ4l1鎹k댐*iœĘ†‘©CĢs*nżMOÆėϧŪ+FJē§*¢µ5ŒO!Ń>+xŽūYšĘHcm>71£‘Ė`’śėŠ5ķ^“¼‰½ųڽi(‰ĒiV|Į‰`€ē × iŽ{å%&u“#V-t+bxw[ŃJŪŽé’/ūC})<3Ŗ’eĪųP¾„Lacż§łöī°Éü9ś×˜ų§Ćó]Mņ$’s†ō­9zć.ü'yilņÅ8HŹżĆü5ē—Vs[4²ĒfķŠšˆž>’„h,2ƒ¼ąQ÷Fzš<ńóRĀȳ”9®A.4Ńčŗ}¤ŗ† …%01žŲžuč7öŗ|q0x ē#”­Š™FĘkzŒjā)ˆćŽÕžÆ,˜’Vł³ž*|‰2umŽ«:» ½{~Uo4šĖy¶äõ<~4łEmM”}öČĢ*É*ēœcŠKm="żņœæ\zV©éØĖ&ž!•i Ex8Øķ®­Y¤F*݆E4Ęek1>dióm# t¬Ø ņ D‘Ü2¼Ēš ēfŖŹ²Ū˜$„œņ=+:ĻķwjÓ$w6ĄäIśPģ‡Ä?fŗĢ”߁‚”†å’׏I·ėQ)hK}ĒĆ©ß9“Š[+iѤŚdkŒz× hQ²Ź '”åøļœT$L¶;¢K©2Ź—Ń¢ƒ‚Ś¬*[}ö³"ł™į×ÓŚ“ŒlJ–”.“­Ų žĪžå \īÉį¾µä^#Õļ>Ōl¦yܜ³”гhJÄ6PŽJ “Š«»ŠVn”ö˜œÄ¬G¦E#xŪ©Ÿig)œ„ĆŻÜ×D|+©Įueqm­¼zz¾Ü(!É÷ź1A|ČŅ’K[Mė"ļn>nƒń­{ ė3°ˆ9Ę; ‘µš}Ō« F…ä‘Ҷu/ųimfš-B+[…\Ø"SéķX'ɾ:“ՖłžŹ’jµU9EĘ9üėįż¼ö7Ņ$Ń\*6H xROZ±ŖK”īogouøŒ6sT!µ‘fa0łsĮµmrfYŌtx%O¶G02…t>µę÷ž%žĆxmnŻZ3nę‚{S ļ“»ČõKe6s+Ƨ„Kq„kŪĆ(2Ś0ł;{ŌJ=Dq¾'±Ō4Q4“ȉQ“ø¦øŻ3Uqw ^K°cĆ¾ę²Š­ö©3 ZTąžõ»£¤vģ«’p„akŗ=öÉ5eČĪļƲ4«ieKŁY$x¦˜gµŌ#¼…ģ„…‘²[Ŗć”Ś[j7VöŖ³,{ʌ… ŃL™Fē˜x²ę|I"™ųę¼÷@Õ[HÕ!3Įö¦žL¶ŌōOä)»ō%Ä÷Ū{ŪJĪmY”m§x?ŽÉéśT0i÷iI ™dĪģļSÉ©”Ń«i{!Į˜˜¤ä¼Uīfx²\Čę“&4īZ‡Äv¶čÖ×F€Ÿ6ZäuŸč·wŠŲ+ĮopAa°÷4™Õ©ų§ŁųsPū'ö=¶™MAø;ĪsšoŽ|ļčPkw:y@ŪüŲcĮ8ĮĮ#Ž?­zņģyQ„¶d^&ų›”|Uš5™¼K¹µe5¤ø9 6ŒļĄę¾lŌ籆Īå>Čń˜¹ ¼ļĒ|V^E{3°ųc{b—vÄBQ²»X×­}sį6¬–—övÓę³oS×ėBFN'Ē’~#ź^ ńMׇ®,eŠ8§ā`v–Œ©=¹õ®#Ć:õŌŚĆjfh`8čäßSßéZ( ÓDŽ#Õ¼My©OKóE‰>O”#&=Ē©Ą’"½_ĮsėŠ\é×:•µ“:tX/!9-Ļ÷HŖå[1ģzwē£_k_Ł© Ó@ÖąØŚq·qõ‡§üW²ńˆ!Ńõ ;Ķ=ŻÓ÷€Œ`ząō8«±={]ńœZ>–óiŚĶ¤į”*rTtä{×Ć~&Õ!Ō5)ec¾C€üń@½–‡uį›4 g4Œ“ĘH.˜#ÕčM§é–ó™ōövvV>€zPiOM5Õuf²¾š2­ągåTžŌc(`CzŒŒSȎyG”[ū"t†FŁów{Ŗī·įßėšѵ’ĀB¬<ų¾özŽ?*č²>x’…OŖhZ‰ŗó®n­51‡läg®GO„zo…ßNŃ/P͹¹b £XQVkĶŲč¾ Ž[x‚[ƒįå[U*nB69ćÓ5×üųUāŸź—0ėóA ¾Bʃī:“œŅh¶ē¬üSŅĀö:õ½±¶Ga¼¦@Ē—JšŻ­š1ød®~QŠĶĄØž›³ā+5¹[Ÿ“Y¢”ĆŒ² zśWĶ—Znj~.ų|·›’&uI]ĒĪĄg#¾*ŌRĻæuæ ė6–ÖWbęāŽYQd Ąn:zWųĒĮŗ®±“ŚnÆwa;©Weč§×ßµsJJö&275O źÖīü=«jmt»#Ż“Œ;óß5ņO‰ŅĖJÓ.¾ÜTķ!wØ? ü؋,ĢšµŌŗ½œ–w¾M’ŹUaŌ“_jü@šęi£Y›+ė{©ü½Ļ$r/Ģ1隹=,)NĒÅśøV»y`™^=ű]›i¢_iĖܶŠ6āK‘’øź]Į3€ńžd–öĘźØOļ£ŌZf«q”\YßłŪį·•$uaŹ#Ģå¹÷®¹e‰“½/ÄŗؚĪHŃŻ#`LG śsšąļō ]†M:ŻVÓÄ” MĄlĄĒ\’*UČ<ĻᮽįßxĘćþ7aex&ŗÜDUU±čzÆėš‡…tÅŖŻh Äöņ„#żōē!EmM2•ś1nśŸ«½ģ1)ŌѕdQóŹÉÆŌ‚ķ¤ų—ĀZn±i$\‡Ėøä¬qļĻėW-7Üł7ā—ÄwšżöµįŲįÓµC¹‰ŽA–‡‚¾‡Ž¾o¹ńf”yŹšy*źN•žŚ”¢ŒMx‹€·JŽ…ŗśz‹ÅŚV{"¦œŅĪŽŲłA qž~•Ŗ6Ž„:ĆoķG·gŪ°;c !χÖ¾“ŗ³ž(¤šGFLÓ­ĪHĆŅ<-k fS±ÜģD–BBr~µÅėš>  Ō“]Æ#j0=ELö0s<äč·2Os-œ}„26ćØėé?€¶ņjž“P½‘ōeCFūć* 0}ź"ō. “x¦‘ńh×Ć^#†ćPÓ®®2æĆõļ_züPųmį¹ü¦ėį…‚Ż̲œ§XĒ­i}.jéœF¢č×¾‘­§¶ŗTc&ĄčsĒ ąwZ×Ć·S¦« ōĪKźåqŲc„!ŲĮńF„O%óŽß#sĘ’®¼·Mńeī·%½ÅÓ+«<‘ķķ@Xū£įźŪź:RŚLā #)/–s¹OØé]€’fx† cĆטüŠļ  “““œf€<ĒÄ:‰žĻ>“q|£GYLRd„:(惌¼wŚ–½ 7‘“¤œņ{ŅLNFēƝBŚćL¼š±‘ŃüÅ.N}=½½«Ź¾>|5Õxż ~ xKöšų'ń/ö|ń՜7~µ§Ķ ³:nkyĀ’Ž™čŹĄ0ś’6_Ž|Iš‡Ę¾6ų=ć+{½?Ę^æšŹA*•i¢W;žĢ ÷Ļ”9•Mōkń_ēśÉ*źP,S—™ōćw§µRūŪĄįOQ]iUb6ęG<ķ²Tżi¤vAŸč%ęŲßXŪ_ĄEŬØ%‚@s•5Ķź{fņē€ĖĆdWZ%(||ųgmā}ļ͉œ’6ųĪ n9ōēł’r|A œ{ ˬésˆœ\!ĢуŪÕJ’:äpģćwüwöpƒUUń.¦Ŗé÷č÷ŚuĄłsó'±ć•üźIo,sĻņČ·0ā)aŚŁZé¤ģLö2%¶W–L©+Ųf,FĮrpNxķ]ŌßC‰–·ķl7҉C*>fp9­6@čͽr}*-ū~P”Yøē½N؃²J|¤ōō©|§ć+ƒš į#FŚL£ĄNQ—kdqŠżó’‚~Öæšƒx÷Ęß±ēÄ-tMąŸīøšį˜ü°\•Ėƹ8Ļ€õQėJ[Xģżpü>Ö5æxgRšÜ—«Žü/p« “œż®Ü{‚23ī}+é+M[ķö°\LøŽ»dĪÖĒ5ēUF‡=wi~m‹sęDÕłū’Lż”ģ’koŁOY–ĒM“½ųįńö‹wq—eQłņ1É÷®9Dį/N³Ö¼/}Ŗų;ÄV÷:F³cq$3[¹åppT‰>É©ZLå]VPrŻ:ŌĘ:ƒ=ĒĒ:v žÓ5;K{{»I£2,Ń˜óČnł5ąńF·QīŚ3Č> ś聯Sb/N1k--Ō’ZĀŚ?Ö}}+»ox‹Bń/‡|AįķYŅöĮņŃ3’“'qZ·rįQŪCõĖĀ^5ÓüQįWŅ®ÖC4 — æęY€ē#Š× ć 6öĻS˜Sµ©3„w łPz³Jģ£@ĶČżżŸ’b6ŚłµļЇöÖ¤@Ź vHĪ­~‰ųsįö•”|ĖkdÓ­~X@@CŠī;ɝt^(†ņīēIѬ› Ćø_’ŗķKݼĆOžcVc$Y×d–Ā×ūBŅŁžTējqøzT¶^"—T±†cöŃøä?}kh³U¼µ±ŠYĆĢ÷=kȕ Ū9Fe\/ZįlÕ.…»=6˜œä8Åh[Z¬näœf¹Ķ’¶…¦ŗšÕŚ"GēX’ß\‘•3×øØ˜Ču=FQ ó§Ņ¼śļĖ‘3[½Ģk7esƒD)»”£sÄ|ońĆ> ų‰ä“µC—*ą=³_Ÿæld—ūGGųyu©ŪY\~ķdœņ½óœČWe*fš#óćUŌõmkP—SÕµKķNõ‡I*æAP[Ā÷ ®čĘĘr™Ń®ž«ČćR R$Ģ°9¢R±‹Õ‡į[½vņ;y!ē‚üõƤ¼1šņĒOPg¶Yd8QĀ×4ęšé¤xzŽŽ8ŌC1Žu¶‘ŚĖ÷(j¾.ŃūE×ē7° XĄī‡ükÖķ£Šõ˜†U—©ō«”Hr0|AoęZ© w£qŽ3Xö8`źźpAėYo+ķˆ$XÄŖ:ż)K²ŠŽ=NÅ(-"YS.Øć½u±[¤pŖø÷ F$·Mē”Į-Ņ®¤•IāeoQ@ÅsšŃL»øćµA{dŠdT˜©õ©”¬o3—ŗK„RV6uœzS”t6ć;Ééč*c-GsJĀéāŽ“Ę„ę›öĄó²,¤ā“1–ć.ģ gŽXĀ dv&µ·DÖĖF¹Åh¦IĘjJŖńDǃøu¬Ųd¹gW2r; ‚£+žŸsyĶmńxžŁ–ņ0¬™Å!ó Ā•ĖJ$-äŒ08>ōŲ²ŁÄöļę.ŁLęŅāāÕŪ)ž2:Š"k‰Ä'‚®+6X„ņĮŒķ`qĶXµ¹dQ€ź+MeI ,¤•.[{G·ešKl`ƒ÷GĪŻĶn%ūDQ°d²ö«”nD¢f4¶ó°q:6Ņ 3L¹Ūq5“Øl`µ”£c2²Dń ݵ=r:VV£kiså¼§bŒžzMt4ņĘ/ŁI-Ī©młH>ī}zšł³Mh¤S ­Ā pJ©'c‚?JĘhÖē=ŖĻw§ŻDøį¾īΌ3Ö“gX²¾ģ\g®{b³nÅCs&ŪR[w†)ncŽ_ųxĻ=+ķŸ‚>1ƒĆrDo˜}“z·#-“éK˜©DżVųqńBÕā…#Wc# ŪžĘ½žėĖv„O˜°G'‘]ĪJ°<žmNĒZ¾‘¬äVĮŪ€k­¶»ŗŽ°8`÷®£ž)¦pž&³M^9-ļmŅ{s÷ƒtaé^[uš³ĆڄѾ[XčĆóÓ4žƒį "Ī5 X&UĘā>ń®’)ʕ2*¶#^4Ō:×ģ^)b±HāĻ_̲H†3ę+r΃–Q¦Ś¹ŗY¹nƒ•艣[^[‘x7Ę:SF±gŽėŚ—gy1±Y<ŠŁéÅq7?és$7W/o±øĮążi¹{C²šµŌ²¤ qę¹sĘ+č-+PŠ87*¬d8éH—+œ_Œ|Uy;­Ŗ1aŪ'õÆ?ŠĶ5Ehļ.Jø`G®}jāŠhŃ$»Šōė{“(øUwd]5¾ÆżŖĖ.Į¾¦B.]ŁĆtf…Y:cҼćı’Žch²£ć<ž=Ę*F|Ćāļ hŗĆŹ—©‹ …9ō5ĢųOAŅü:$··Kf.å‰ŪŹPZ™‘ā{éŚüSi±ż§MņĪŁGō’ ö'Y¼ŗÓDwß3łVMé`”“3Œ ;a³Æ?Ņž÷0-³#©Ś8Čõ„fqŗ„ķ;4véøō$–Ėgœ4’Ŗä³[ÄYM{g{6å“Ģn™b¶WR淞+Hóƒ€*e:»O O®ø?h0 9ąÕ¹Øx>’H‚1ęEtĮrppxõ¬ĄĻŒ²"~įLēšĖšŃgÄrFQ;ŸJŃK£źZA ķcۊĒ}²2¶: ™¾€pśņŻĄ$øŻ¹ƒs“{Qᨧ”»LdŪĮ«žSģmH}6Ņh-fX‘ļ÷OØ­;vŲØA~øõQ•Ģäŗ ēŁĻŹĢ¤œēҬ¾¹t“#£G/Ģ< WLLÜOUžŅÓ®tyŌ œlķļ^!©YŪŻ\É –‚ź,žLqó-[Įź2ųGĻaUµ-6 Õ®cVŽZ‚Ōš0$kQ…­bY”ć ņ~“©q*åC±P1ĻJ•.ƒēg#ö»‹–Y&;ģĒ×Zh—ŠX­ŅĮ+Ūp(čj…ĢÉ4Ųn„øŃ\ ŁĪ\…ć=ĻJ±«[]0š;x;Nsō"¦KB Ī.ćGróŒüŁō®‚ĒD²Ky$‚hmäQŒ0徕‰Ŗf<÷’[³‡dĮėŽ1QĆw†-q¶p6ŸZØ»ķÅŌ 6e”'>µćŽ'š¶§Æ$ļ§LšČ›œdnɦēŲ,m|,¾¼šÓG§x®Żä17óō¶”¬č—6Ūąg‚#ó(, Eō©`×Cµ‹“½¹ž)dXƒĄ#;Ŗ5“Ó„›&…”@9¤bäīu:}Œ%¤EŚ:w5-ޟuŚĖ‚1@)\_\EFņ:n\:ėX‰k©Ģ:Œ±ĪTgŠ sīmŁ‘|¶ū¬OńÖ«Kµ[lbxöšGb(%Ģį5ēKį¶āŽ Į~U8łŖš&˜|Ļļ‚°ÕŻ¢œ™ŁéšR[ŗyS…‡Ę1“]ĆĘÖ¶«$2,¹Ē­.ffpZ†”s Ä{Ķ]ŻŖmKTā‹jĒBi\Ņ–ē%3<©$ø>Y8ķ\|šŚ.MÖ`„mĒ?ZNGb?ži_Ūzą±²»Ō,5;M³,*0“©nGJś×QÖ'Óō}Sƞ%Š ½¶ŗB­éņĘŲūĆÓ"½ö2S¶‡XxcI—ķšm­˜ÉŪ©øōü+Ģõ/ ’g ¾×?3ŻóŠ9Q0’†¾ø¹ń åøHŅŚr¬»ŗ1čF?*ż4šO‡e±šņ © ¶Te‰Ōķ{śsBG,„d|?ń?ĀŚW‰õŻJ×ā O)1J‹¹uĒq^%®ü+øŅģ’ēEFÕ”-±P.Ņõü(ø£>ä¾x¼;¹Õb—%Œ? ÆēXž#ųˆ]tż&ņ­<ćæ—Ó>™žt\ź…‹:׊tŻm­ģ£»“:ŒP„*‹‚ūCüō¬k G –A2±åŌąėF¦»"难«a µ¬i4PüĶø’ŪF8„yŒ{ Bn®VG¹B~āąćń4ʉĶO¬ß]Ėsqg|-­)Ÿqč©­{PŌ^ŚźŠłŃ7>`’ėŠ9#Ö%“M#NÓķ¤øŽ)˜į×_¾k”“ńM×Ūb…Fš¬TȤ ž‹ÆXI«”™n6ˌž9oj±ąØīl^rLs·laA=i1©Xõˆµ›;āmMBĶ ˜ßÓåīk×ēĆŗœIw§_Ć +¶ 稕ˆŽ² čRZÜŽO¶īŹķ<„V ’h{Šłāoiś>„­Åcrę$gŽĄ öśę²ęb±ĒE^sĢĮ7¶rŒnÕ[i³\ƒ3Z¹¶A»p^\er–¦ø×:‚;D‘Z6źŽµSLšŽ¶š{Ž^A(nrŪHŹö­į± ©Ź®¤žeĢ0H²Ķ`«u޽CįĻĘĖ ėCDŌžŁnZ%.!Œ”eĻB}x­9JŒī}c7č+Äövš†›¾yŠymœŽóڼŚkė«{‰˜O, qӚ’’č|’ńjĘūSÓęŒĒ5ÓK&ļ0üŵq^ ¶Ö4Ä“•V{?i‰ßp ē8żhŻX“×āšž»§YkK!Kœl'ŽßŽkŖųšŪþ;Õü7=üVbAxćr˜f<ē€iIŲŽg¹×_|&°šV‡Ä)k=Ū0ćV +2C\ŪųoP¾:–£¦K³ĘꄟīŸLtĶs:—4D:ž‰ge£Ķ«>čŠ~ģŁõ,sšńk} R×#ŌMƒĆrŹ78 €Ŗ*āĢåęI x]Įq¢e–įœ¼NW˜ż¾•ŅŲŪÅ”\Į¦ŽŻJbj»ōĻÖ·%;Shž³ń²ŠŽHę²džP0^k×tĶ;Ć7ŅiwSŖ#¶Č2B†öśPj„} ¾šMżÖ½qöY'žŠø1łjFß”ō5Ć|I]š“AĆMq‘čĪÕn˜jit(ż8żü!­xc¶’^F­ådgņŹ£IŒœf¾·ų„šę/ųO](gmn4ژ£ĢAÉV8ē’Ö(šŌŹGåv¹i&‰$ļ©¢Ćä1d’«#ØÆńˆ®¦™dµø“ģ[IC޾õ<„F*÷EoxĪƗO½ŗ[Ÿ4L§>ĆŚ½ʞ“×RŽ÷Aū_˜‘ļrRķŽpGje„b‡Ćū8‘n,µ6 6d>Z6Ēߚ÷σZƋ|-q&’.ī¤DœŗJF]”ēŒū acŅ>-i¶¾0±³µyŚŽI%Žr~o¦k„Ó>ZéóŪÅu:É ISøcŲ÷©r°ŽkÅ>Õ­.µŠDM-TÉ8i9ēŠēü=¢č–—–4ÖFöFĀH§˜yļéҔ˰4} ”£9ŹĀ“ĒÆ g5õv“ą=Äqiž%[ćd“(oąÄx${€ „¦O¹óŸÅĻ h—ž>¼ŽėÄ3\_,b™Āę\q“Ÿ§Zā-īügšņ&¾š½ń’Ņ4)a AśÖ»ŸßxqīõĒĖ’śÕĖK ¹nxż ec¦±ņljü1¢7ķįÆŹÖéo$Ė+Ąģ7ē z߅~“x¬Śźz µƒū9 H– ې æ×5V÷Q¬„”łėāūį·‹õ(”D67ĶNW Ū8°5żFń~–Öy¬’FĢžS'œ’:RØD¤Y¶š+é: yĄ¼X q’=ė‡ƒK€,°™Ģžļ¶īzSUŒµ1į×{Étc?—ØA†A#}āzq^õ„ėŠŁi6ķ wd^O÷ĶhŹ<Tž÷S¼¼mÜX±ß€}IĶq·z)p#1%Ŗ˜2 ÜsL“—SŁ>YųĪU@×J]Ū2I}M}'š÷āŽ·šßTMSÅŌŚš“‰_yäÕ«\R:/Ś£ĘPxćĀÖ7VZ擨éWÄMlmŲ|˜#<śńҼŪįĻĀ­?Ä?ī5ĖøŪR²Y<§®ąēÓ„+ õ|3š ivWZl1Śk¹ƒäJ:zz{ö¦jž³ŸNŌ4ĖŪDÕ“éAS@nĢ=ė¦U‘łyń§į•ßĆ’[’hĆåi÷ł–Ń”p}T‘^ö’é÷v÷‘”0£‚čż õ¬ć;=M"PÖ< i©xgNńŽy ·2ql9+ĒnkÕ?g_ 3Yo ŻßŪĆe9ÄJy* žƒ‘[ÅÜcļ8Zdģ9‰NģxVÅĒ•u–ÓBŅC*ķqģxĒėLÄüĘųÕąÉ<ćvŹīœ_́¤]æx’Wšąž5äv³=¬ęd™ć”`‚£‘ī(7„ŗŸ\ؘ>&ü?œ]»]j6Ä)fåÕpz÷ÆŲļų!’ķc?„Ā­,¹ĢA‚{ŠʑHO-›Žéba›IäŽōBF™’%fķl§ŖóPź6²Ż[Ēum2Į©Ś°øµ™Tļ†PAqߊČH’Bų"gķÆķ™ū/hö^ »[/Š~Q£kV-6öp€“Fš}s_²Å¢["Ź‘€Œ9ć„sb"ly‰-$½‚{9‰łN;ׁ|Fš–Æųj;čō«Tד¶1Üķxvžńį\¶ĻĢæ‹Ÿ 4Ÿh¾$ųd×h™{Ż'yD§%ćoØN&ßµ‡Ā cįĒÄ=BāK1Ÿ,ķĮŁ“Ē ńĮüėJ{ŲÉī|q€³’ ÄšGLT,7K€ą)ć8®č-Ll5™FŅp@?€Jłm–ėÉ­‰ĖóA=©ÖETkc®{PD„m ±(±‘Œ~¦!ŲG–ä·R(.2źX ą)ČLsĒ5³ xŸÄ>ń'…<{įŪ;Ě-ņj’Bv¾õ`~Sź@Å)#®?Šö9ż«ü%ń÷ą‡Ā’Ś'A÷²“iŽ)‚9’ĪEXJBzōkōkO46Ÿos5÷†uXEęŸ1ä/ØĻōõ \Ui Lźu•• K“ˆĖ,‘Ż–®éļ§\ļ[„¢j5½Ā›Xcō’įŸcH»ŸÄŸü/ö=¾żŸ’hMGĘžÓn$ŠļÜĪņ"¦6äĒnŁõÆÉ÷Åżˆ¼·L€ü½©U:ĘßĆĻ_ڼūķ•Œ{CrIĪ1éÅvz¾‹¤[¬āŽ7Y÷FĮpļŸ~•~ÜĶSŌwƒ¼qć‹ō°{›{f ‘‡Ż>⹿ˆ_ ;½·ÕĪŽ žńˆ,(]ŲžĄ ŗnW3>’ųqū+xūāTzgˆücoØųsĮņL[<žÅæ§ņÆŅ’†ß<'ąż:ŅĆĆŗLv'[‚øyū_•zp…ŒłŃō¾…¦Łi¶ÄĮĻr¼§ƒ[šxGVńØ[UM2ŻžL7Üē½Y‘ä tŽų—ćZ·Ń®| Į•%;L2Hd=†;}1ļķ׌ŁŃļŖ[M’>šP}  |ž"µ6®nc—Łė\½Ļެ#±pĆl pĮśÖ±BQŌń|hÓ“TžÕZ9ZE;rĄś×ēwÅoŚsEŠ!»¶¦³Å#±kXę8žūrµ„nUČƏ’¶.³ā9“J“Ō„QīĮ!"Ļ÷›<Ÿ­~]ų³Äמ Ōf¼¾ø7_3RĒ`ŠgŚ»é#Ž”ÄłĘ@Ęń“bš’†eSŒ{÷®Ŗg,ŁaÕaNćÓéN¶·f$1Źù­Nw«5­­”Čf\WAo`¾e¹He‘ٶŖ¢’*‰ĢŅ3쯁Ÿ±gÅ’ŚÄ~Ńt kŚ'‡¤>mÕųLNŲ^øÆéĆöU’‚`|+ų š&¹®i¶Zž£•WdsĶpV«Ųļ…;¬ś.¤i2iš%”V:vp#E :ŠŅdŽQLÄxÅ)\ÕÄÕkM„|Œ3Ī X·w¶f‡ŒPöbF„”œĢ±I9_Z–kčn[t@”‡wRƒ,‡Šd×/¬ųŽŚŚ32]¢2žA ØĘē›ų×ĘO”é'[“P·€€[xĘq_›Ÿ’iµ–īk]Į»Pq"ń5ŃNŪ xćā'‰|t-νzä†ĖØ;ƒć ēšÆ>‘ÖFŽqĘOQ]эŽyH½lØČː āÆA46±ßuyõ"©˜7sŠ|;įwÄ*[Ū…°UˆķōÆ¢“…–Śd1ÉtDóČ)ҹ§3sŠ“_Ś-Įžć,«Ö½¢ĒĀ*!†L€{ūÖ$Iō4¢Š|¬¬dŸ›<Ón“;ĖiĆ“n‰ŒœŅ±‘Ńh–ŃKÄOūĪėé] šeÄ¢De»Ōņ"e+:†•io§Gqo&FkiŽ`ąwĮõŖJĘr•Į59Ā›,žU”4ČIeĘ3UbJFĀ9§RĆ,}:Šæö·Ż<2IøA=¾•°w-<’ĢLDćžĘŗ=+@k§]…G®kø“'Hŗx<ĄžFzÕ»«·[¼°ŻķR›Ī®\‡?¼Bs“Z¶w°rTPˆä‚W- (ąÕå»ū; +ž“ ’éałeS“×8¬ē¹œļeŻÓŃa¹Š]ŖŻ4lwsŅ–D“y–<”ߎ’‰ēGhĖ+ÜŃo§Ļ#DOcL ė{x%! ż1T5č§Ņ!!Ss½Nq@Żķ¼q£n]Łļ޲¢móy«ž¬õ¼ĪŠ)ńU|ƒÓڵ4é7Č”¾pC@ŻŽŠs ķŁ Ę3NŽ5墎qž“cŻßĮq'Ł–o.n„AėT%“rŠ1f‰£Ū&>SśT8Ycb 9⁨žy}āI4­VŽŹh^T•ń¹ƒė]²ź! W•0„g4D77+tŽ ©ķ­Æ!Vڽph$‚ūHœ·Ś6>HŗÓ4ū]ņyS#"ŠÓn÷ETŒ“@HséŒS4ÄD JWŽ9f\Ö[hRQ,[8Č®’¹-ķĀ™;ńҁ®©y1Žö²yr‚+;ĻždW‘FåļŽh„ØŪ²Yyęµ,mm.örL£Ž§b[«h¶“E·†ē4$&įŅEVF^¾†ó3¦€B±—EĪ:ÖD’f‘šx£ &sŒu “*+µæ•ćFxOŻ#“n ‘”‡jÉR£ØµŌ&Ų!’3nƎ{Ō«(v ĆgZ£œ«+ŁķdRxö¬§Ō®™ā$3ĘN(5๕‡īä,§ŒV’öz]ŪIWĪčTœPnyĶż–®tĀ-Ųpk¢¹‚éāGˆnĒŽ÷ …sš¼’ā5;C±ōĪ+ŠÕµ‡·š8^<)>ōr{VD3c+×į©Æ%·¹·G/ˆG=h·V«°’TƒĘ;×Ui6¦¾]Å”-S¹Iäjé­ 3”ó[cć?SZš|†ĪpŃø{śPDßCzžõī#+±‘ń÷”ń\Ü\Üļ‚w8ĻŽ«hlEĪOTŠź’f*ŸŽ­WŃtØķī^šŗ‘Č$sTTYæ©\Ž]¹WN›‡„sa’3‡FGnA#¬äʹNo¶Ū>å}Šž¤wØ1!‘$W!{Æ­f8‘\Oc*Ļ*£1ʌó]ž‘q„}˜ ;ī1ĪįŠ{P6‹É=¢#«FO÷‡ņ®^ę’±ˆ„äU8³¬=¼„Ū%F‡(ć»Ņ¤CdŌ”9—ę ›榖h˜ŖśuƒXÉlUžżÆÉ Ćp`c5Ģźw¢5KkÕ~šīh,‚ŽāX>d|ĒŲę½Ćwö×I šćȔ{Šż­"¼e2+EŲęŗ›]jŲ~ģ†\" tw–*γ[›$ŸJóĶZļģZ„Żā–łbN6jÖĘ\Œō?ĒZeµ˜·›ĢYį~\©ükŽ’„ŽŚēRi¶ćZ%āq4uvĀāÕQ"”’rMp,Lć1‚¹ć5Œ£bKr/ŁÕķƒR“QŻ"°m­‘Šõ©¢‹Ķ“²%JKŌmō®rKķ¬ Rsր)IØ£ČČCGģkZÖźTŒŖ9`}ų4cͼ]ჩH5 ed¼Lēiį³\dĮ[źv²F~éž~µ2Ųé‰Ćź`,ģ# GœtäŠĖ1&ĘyāY" Æ#®kdϐ>+ųBŽÖźāźÉR(œnĘ;šł+[¶ólo4{ō·ø…ņIŁóŽ9ė[F=FäĻĻh·ŌīHµ[>|I|üŲž•œš“ńĘf9bl`õϽZzo†µ6kÖ°•nCg•®Ž[üłVź$|£–¦øŖu7ŽĘõ…ƒ\BĀ[ˆŸI«„$0•VGŒ»”óšĀ.Ģ£Œ{)m5#>é’>ē9š®óNńbY¼71Ęāßk€ ĄZō(‘)XūÆį·ŽōkĆŚ}õ‚½į‘’#‘×øÆRmWDÖ"“ģšeʙ2’$ŽG žļ’ŽĘR‘ęz»Dæi;Łōā©ŁßŁÄPµć”Ąč(qčG::k}Y. äœt÷Ģ^jqÄŅ  ŌJ)÷6–zÕ¤Ń]ŪĒ0'ī7qõƆ~$ųvÓĀZ„ĀŹģģšcņ‚0„ō®iš©Ÿ<Ž6«4É3#yaˆgµY™Æ5B²g”8ÅsŌF‘ņ+Z#Ę„¢  ĖĘy÷Ƨ~ėiŖ^Ce$Ž]dÕ™¹÷’ƒui¼;åZÜ]‚­Ļ?ʾƒÄZ¦£b»ŸąnĶoNfUGYįs3Ż.”į²ÜuÆhd͐³ŒtŪ t9cS‘^7mĶÓ¦+š·W‚RŹF Ę*Ā꟏²Ø9 ĆŽ²u ÕAÉäżč3›čc5Å½ćą¤ĄńĻJź4©XFC*zséėA›F’]"±epŒ;W×X¾hž®øo¦E1XäŚŅcpļ,Žč{7A\Lj¬lmńx ä608 g?cz`øŚ”ó=xÆkš¶·ż ©Óý ±7‹­ķVfTh®wdW›G«Ćk9ÜA?ÅĻ4¦¾*øĢP[ß·Ł7e£=+ß|˦­ŽšdfĘ=1@¶ŠŖpļ§Zǽy66éČėA.VŠł³ĘzLPO,Ādvo˜/­y¶•”Ē-̌Ķå>āyīje°Ō®n]i°[ģŠį³Īv‘Óޟi4ĆČxIVln^±©6•Ņf1ņg®kœ½ŅYPnŠų +hĖø„zÖĖ™ó¦7$ƒ»§5f_Į Ł)»Ö”ßCHŽŖ·(ļhīŃ` č=ė.-ZbLrFŚćļ ĀR±”Y5e¼;ĒŽsDśM°Ż-œ²[ļ8ņĒo|Ōū@5TŹØa˜ Œb¶ōˆ­ŅU6Œš=E\]Ą·ā=?JxŚQ.ųßø`^t×6&戶üœŽõWĢ›:I9UŹŒņ hč:x…Ł„ »;Žy¤e(źz„Lf_&Óløźyɦϧ s2³bzŠO)Īź»8³y"Iœšē¤10cŖ ¶lÓB±­§XZĪÉ Ī³ĄœŠļ×ĀQŪÆœŒ|¢3÷²kh•Š÷ki‹+w6å”p}ExŻĶēŁonµM„ņŽžōKcFģhŁŻ¤‘ ‘‰9 {V¤ŗµĢVā9Ūżīx¬L¤õ0'ŌŠ[`Q’jŗŽgwš|ČŲƒÓ‘HŖlŠIć–Gņ¢_ŻéYwXp]mńó÷€: Ļē6ĆĒæš‰ųå “Įv¾$EŌ#hd&b ·Ø ūžTł4Ž/ńÕīzhi#.„C,cÆÖøŪoż¢X¼«†Ÿ+å±s’Üw4½ž„}—‡?“ Pˆ›Iģ1Ī+²ø¼Hšŗ4mŹ­å\f©^½čödM—ƒu‘Øjӓ§-Ó2Ÿ”/)ß#Õõφg“æŠn“ł,㸁 x Œ(ʹĪz÷żj”L%4??¾!ųbóĀž”s$qŁiü6AĖo$õrzDSk¾jœ•ŻŅ“,śŸĄ:5ʗ§^y- ųܞ6»]‰ć¼¾Ó'¾¶š& īē‘Šgˆ¤\eÜńKżcQƒP·µÕŚ §oŠzś#įĶĒƝGOM\ŅžÕu,„ P…žĪjy‹4üQū=iŽ!±ŗ×ō½Fåīķ$2ÅąÅc%—±Ę9Æ?Ńa¾Ō­$Ž…䉶'<°ģqėJNč—œ®›ā/ź¾/Ć÷³[ŁŪĄvīy=²; ķ|yńfŁ[ųg]±Xž1ęCŗ-¤«v_Æ£ŁÜµ‡ŽĻńĖXÓ§k_Ś]e•\`jį>x–ēDń]Ō²]O,S„U~U攫P1©ė&MFŽćXå“/»j㟩Ŗ¾Xéś}ķž˜>Ūi0[˜ŠĢBĒ)ĮČęµG%ŸSŸš7Å?ųGōhģ5eH/"Ē– .p:ōā“-µ½;āeåÖ„–¬²n·ĀņIģÜ’œV¾ĪģŚ1=ŗĻĆ+įk„¹<ČŠė€HśW”xüAā}F}fžÜĻm†X×tƒ1…c¹é¾ż§ü=£ZižOŚ„ÜDH'±=+ė|nÕžĒ~—'z2ł‘:œ”ćų½;ÕÉ£ÜüŅų•ńWGń‹u{&X øI›Ģ@“×¼’Z‚Õ“脉–Xß:ŒÖ.6-FĒ“Ühe½P3…ąmÆvšĒŒ'µŅćK‚±ČØU£uķR3Ń|e=ė5Ō‡'£?}āėæéš=¾æ§ŪłÅéÄyłˆ g–/ˆ£ńUµ¶¦·) جĮZ]£ĻBFj·‚üylś·Ł/åIŌ>"łł’=h°XśĖÄŗ>ƒ®ų.ź=±ż©¢FŽPčŽ9_züĆŌ"ń€¼SØ[ŽI5֕-Ć5³²ć`Į$~•1‰JHõļ xŸLŌķcyn|ÉĒĶņöōÆSY˜i¢FC%›‚„ŗĘŽ],7>ˆ_‡Ś'†-5+ē[«kŹĄ!čĢOaų×ać’_é›!ŃŽ=RŁ¢e3œŪéĶsĻA[]Oˆ5ż ųĆX»³Šµ{Ķ[ń)RTżÖėŽēÅZp–Āö[ƒ$Ć9ɔ~tłr14·k,±±f!p:µnxĆ2XŽŲė6 /ö[įKŒ¬€>kNc9čuu½¦§fšK hŲĘš6•5ĆIoµį–Öé„T%‘pXgŪéN ˆ=M]B)oį²™‹Nćå?ž+ÜtĻj>ŃaŃ㹟ū8DdēfG&“-Å1āŪĻkgRœy”ZP°(\Ÿ­uv:ž‰§Ļa}uķĆĀ€vŠT™†a4P1+Y\bxNčb]Bö+•@ؘķföÅ+˜­72üQį%šō™(²“æSī+Ę­5µ}RK&T’Ō‚¹ž,ō2v4ęź'ˆmāŠ¶ŗ…y*Xōęø{VŠŁ’Ö)<÷ŠˆÉCé—ŅD#Cŗ¼p5NßĀ×ŗ”Ž ęYavłĮ?tUó!r£é߇_gŃķ­šŅkƒ ƒģ vž :-¤ų“ż \§žøÜ{ķ'ń?…1Ųōæ\Łk>‹WŠQ_K+<t°õ>½kĻ5 ]3JŌoµWŽn$9—ŒĘ{ž5Ÿ. y¹šrēā‰ōļh·,žCī]®J°ĻCNkōkĄ÷6šwƒMŌį‚śh‚żŃūČČ<愎–>SńģÖ'ń†a(‚ŅŅIgv8U­æ~ĻÖZn•'Š<1ؾ®»CH¬Jł`qsYrŪB\O.ŽņH“é!;¦ņ‰Q؊šŸ_Łź7rK§%Ģ1±V^pˆ¢ymŖ=ƒönšÕ–Æā-^ėĶv7wp£6É™Ž0O~JÓųæi„éž&’ ŒzsF(An{=+x« ɞWdÓŪ»EpŒŒ§9Ø­{ūkn šø)…Ē'ņŖeܧ¢ų£Ä^ā·R»•ó Ük„ųĶćĖķwNøŠń!²†D*ĪOJhÖ.ĒŽų ų’Yt­ņāźļ¤’1*Ņ÷@ĻGJż`ų=ÆhžšNŸį=Vś[8Œ€*æI\ćߊ[Ųmō:?Mg¦0]d1¹ł  k–ųmćękżWĆ+5ĀKę!bĢ|ąĻ#”>5i^Ö< ­¦„ii'”Vk¦9x9ōųķā‹tw½†92" ‚3Ö¹¹5Ź]ß%²ĀøHÜvŸĀ¦Ņµ=GGÕ,oģ /:Hƒnq•,3ƒŪŠŠmŸ­? ¼]£ų«ĆqK»QØŪ±“›™›«»Šįņc•PqĶhń?ŚWĄų›Ąė¬Āė5ż #D‡w—’C}²+óŽś(”sån'éĶø£š“dzx__ŽÕę‰m.~F>Vnƒ=³žė~#ƒWųYćæ|ZšŖ\AŖiw‘_§Łóūͤ Ó6ƒŌžŚ’eŽž ż«’gŸübš|ĮƞµÕb ł‘Ü*€ĮżĮ~"¾²šĘÆq”][J6²£‚kš¤u:#+qh÷¶>2ŠąŌaFū»[=AÅy7ÄÆƒŽ ųæąüų‡¦ĒŖx;ĶRYȏŃ”€Ėčzs×!k’tŌ“‹Łƒ‘žp_µ?ģŁā_Ł{ćgÄļŁĻÅŃ“—^æ‘t¹†Qļlļ‰Ą?ģ°ńĶżšŪ»Ęžg|ūÓĀNR‚rŃõ[ėŌĘ”žcDĈ…łęž±¬¹ŪĀž¢» Ž9FśyWš[w–F>ZŖŹNĆĄ+Cœj°łrM66Śģ’Ø\~’’‚`žŲśĻģū`ų{āeÅĶēü*O²i^(¶Œ’@Ž}£Ž öͤ7ƒ|yį?‰š¶±į½V;«+‹hÆ"SĮ1ŗ†}G5XŻv2u[8X4ŃóōÆ'ń–™ öÓ^Ł­,f)—ŲĻė^t՘4~cų§@Ō¬¼S¬čfīoųH4ūŸ“Ą1ĢšœP:~łm’ų „üHšÅߌtŪI’öéķ› ĀZ܎8ē©EŲ|¬žaõķ+QŃļn“»Äw¼¶ œ°ĘĻ8÷ā°¶ĘźC vĀ]QĖV#<„•L{½}½źø…cÜ—cĄ®“œ“äUyp:b’ 1Ś1äŠ å$ł°ē#Žjaæõj£bhCHźX/sž•wd3H"eł:ą÷ ź§Šż”’‚'ž×V?¾6ź?³§Äfžųƒ#Ak•Ś-ƕvØē#ēż µżü ×µ7G×¾ xĀī+{ò ­ó«^Ų9Č÷#? ¬+®§\WSźµo:Ī„¶ó—%P? Õh ³„=¬NR hóŃIÆ*¢4?>æą„_4ļŒ_ęń̚y½Ö<7 Į©"©cqbĄó·¾Ņsł×šŁā ĶšĻǾ!š¬×[šźÉ›‚š1$céœ~É=q‰ĻiV¾»ŲŅ6Ż’OZśÆĆ~]_Nó%·‚qÓ ~`}Eyõźō:©SŌōæ xū-…ݼ~K)9(:żkŠu] jö±ĖsncR ‘“^=\N§ÆJŠ<öĪĪķnM„›ĶjØp­Q^–5ČäKM+[p×ˈā–L.įžÕwa+ŽH*RčŽĘ_ަ–·žZŻY9;;±Üb»/…śŻ¾Ŗ¤­*C1ÄuQ^ÄnĪįϦu[»+t2ŚĢ«nFī;dלźß¬mmžÖźś(QAf!ŗZå”lWš’€~ |UŌķbšåĶ®‰.Æä*§ŖSė_¦’’f|>[kčķ£ń/‹$„-ĶŻŅy€{ ŽÕ¬)ŲĢūWM³MLˆ\Ü¢XÆ>K7ʾąt³maŖMpÆb %Ą.OP=«C¬z·‡4ĘĪo,)žS»“Ž˜/ „ÓŪŹB~_zøĀ䜾„āW°/w*™ŚCšó¹ükgq=ĆŹēo'waWŲ;ń4VDy'T\•2nłSŠųÓĒ?“$>“¾±Õ/”‡Fi[ʹ‘~}£®Žõ¤bŲĻŹĻŽ_¶(ž+č|3Ø5“&B±Ü '‘Ųó_˜>0j:ĒŚ&“QšO1÷² MuÓ¦aR„¶>mÖ|A=é!6Ŗśb¹©Św *ŒõĮėųWLUŽIĢeøel32ÆlUŲ¬Ė9umźæ7ĶĘk¢+C łMŹĘ¬6œōć­tvÖ™#Yć#%˜ąR”¬8S>„ų'ū8üUųżŖŪč? |5wpļ"Ä÷Ņ! Ļ,zž‹æeßų"ŗ„.ō’|MדŻgÄ-¶QkrŪc^ :føźŌ:éÄż²šĆ |0H!šĪƒ§č÷ʱł‘Œ³ļõÆO–9µg@D¤’Žęø%+›EŲŪÓģ.-Ė ʜgڶVĻqI‘ńź*%+£]搳e‚²ŽõRāHhÓˆżk'+ŒägŗŹĮßkņ1Y:ŖYo|ŒŌŒņ?ųņŹŅÖāO8UÉ żŚų3āĻķ=¤čŠM Ż–½ˆgwAĻjŽĶod|%ńćg|kjś}žæu§h’üĶsēńćŠń¤Ō®R#ļ$¼ä–;˜ž5Ż v1•AĮüÜHī8ėOņ6āŖ3Ö¬Į³bĆFŌ/8ģ¢ó2zJõü6ŗK…ŸYE’~\m‡Ö²©.…Ę=O“üį[K+HåŽ%BTcŽÕéŚ>‰mu9Žp»}H®VĖęFŸöDz}Š ėéŠė£‹l*ĖĀśR2lŁ5%d½³&T9d"µ'½ƒWDöꌹšWf‰"?ŲX\©ć®*Äś¼Žž\¬N:gšB‘—=ÅÄŠ”Go/= cĖ 4-œ1‘Ś,N­ -ļZNĶeČŃZ?nŌŠĘåįA•Ļ>ĀŗMBKi ¼Ę;°0 Œ$¬ŅG¾"qĻj|…ŻČky“Ÿ»@µ+Ćs)¼õ#Ö³æ“f³‰‚>&ķÅÄWæ¾ĘÉ·uĻ_­(¼ū2¢€v–䊔Ö6’-Ä'Ģ\óĒZéīn-.ķVHTŒēÅ(ći`r­’CX·V’œ6ÖÜ=;Š/i"FžYF\ ‘UÆR÷m »Ū½8© Ļ+d2óĘ+µŃ.„O.9>`q‘ځŲōłtķ.ęe·—É›½Mr~!Ó&’ ›÷mꂳO2ŸIšōµ£ ‰³Hā· ÓWG…r³£®Ń °·w"1ņśzVÜzz¾ĒŠCŌw G ŁG§Ļb²ŖN\uŖséāŠīõ ŌōIÓUk©$`:©SĪ·-nß ’äqŸZŁk˜’/0•+ЃX/lņ3ÉjJÄNvśPR•Ž?XŠ­Æo”•ŅO5zsŒšŲ‚ĪéZLøOįĻ„lš;+›Q²HĆśzV¾ŸušÜŲÉ"‚Ax؜céZs”Ųī“-zŪQ,dI ŗŪæę^5Šų‚Ł„³•, +ĒŅ¢Rø±Å+Ūł.į›·¦kĢõKĖėY¤‰ƒC‚zµ”„cHùȽ¼:¶«d÷o¹®Z‰“Ńń¦”ga§jnµÖ2ĒĀ`øqĶqŚ„ÖWM Ńµ × C{°éččéŪE!łFGZߊõĶWĆ7¶×¶lRę9ĄČ5’*ĒŁ~ų‡qÆÅi)p%@71ėÜ××^ńšŁ ,VuĒ9éłWL72œOršē‹“†æGYÆŻ'šśf V±O³²²”É=q]T×SޤĘźWpNŒ1óžFøW¹ó$(ƀ3šŠĒ•ģKöØŌmóBą~uré*īēž™ ’¬dBLŖ†@=뢃\ŽKR­hĆų€äP&e-Ų[•‘ݶ0xā­O©ĀŒŅŪ•Æ¦4rĒn—"ĘīŅé]› G \Ņj„čUŽī½HoZr·CUs°µ“c,€ž8ęŗ+kĆÖņ¤’BčūՑˆž]EI\ØźļCĀ®ž'±ń¶„š“óJå>WĻ•ŽķĻģšMų Ȭ@ć¦qYø"łNĘŌ‘_Ź<ēÅsZ»žb±£$Žk&†G-æYŒg*”ŸŁÓ@r:]‚W'”4€ā¼Oq-’"I:p QšååÕoÅ«µšUcŒŸOjÓœĖ‘F•!aFńŗŒóļÖ»›i …#24ż”¤U‰®ÖĀK”šÕ!ō=ėJĒĀņź +ļX‰ $UF!Ō|+ØéÓłƒ¦Wš–ūĆQĒfe7‘¼»sÓ>•2R”3žŚöĪņI†ÄnžÕ¹£ė³éwļFš`$ żŃY–v·ž3°Õ£QI¢’¹éƒčk‹Ōōį¦h ½ø ‰C±Óhś„¾@ŽHŌŹæÅŸ½]Ž“pņČ!L)$˜qU©Ļ4o^ųrą}ŠŒü§ś×s§mr#ojŌĶhm%œ] ÷ļ\&·¦s%§Ģ9ܽ(5ę9¹-ቔnæˆ¬Ė=ī#e`Ŗž¤r c%bŒYt›DŗŠą¼¢į8p1žEVæĖūµšTRߕv“IäʐNžd<Ģrk™Ō¬Æd„n‹š1ÕŖg.¦”Ń£¦ŻĮ¤Ėi-āHńn×<°­«É“}Nwf¦6ģĮ¹e#xÄåā+ ŌŖ#!!‡„tÖ6ņÜ!‘$rIĘŅz}4Z–Ixœ(Ļ©j ¹VhłŽ:VšŲĘo”„?ņłŒ|ž¢¹F’Łƒ“līń¶Fƌӓ&/SnĶ,oāB&xfčTœs]¶›įšh.ndy·¹a“õ¬MMˆ X%Df:ąö©Æ„įb›Č|~ó” ®‡‘ėö×3żõ’įN~÷ėX0ĒngKI&—r·§c[£…meä@&Ž@Sƒļ]E¦øņ …®ó:Õ­0FUÕōŻÖY3Ąķ\ĶĄŪēy±'ĶĄłz{ÕŲ3-–ĢķE #8Å]–īĶąņ9·äķā³–ā2.m£ …ūQ˜LA¢*ķÓ•NĘeō²ZAę gŲēI9õ¬¶¶ŗegŽåøęŽ[ęĒQ·µˆØ·qå•$äÖ\ķ՜[Įp±Ä§{ ‘‚1ķ^łåB&“NóĆ,× ·(Tœ†é’×› ‘}2ZZ¤°Kø®Óž ÖJV6‰¹Æx~{‚ćQD(üĢź„č‡É·(2JtQėÅir÷1åÕ®®nīGŚXQ‚qĘ>¾•Üé4oŲ.”u䦲¬cŽ9 źsӚÖ$?#ڼ ū6ųĮwāxźˆAŃ²·ė^ŸńŪYšv‹6ųć”\[`ß%Aõ__j™nfę~wK¤źŚļ‹īleøŸŹžuHd”ü©Ąćƒšģ|CįoxnŹŲŲĶŒ¼J‡«× äoųjź{ķ=&™dv_õ˜źø„ø³ÓN°Ęźņ+Ķ.P_ŗcćß§åA<ē̾0ŃWIń喞ålHĘŁPÄö+Ü|汣Co=źŲ–R˜`F’\b‚āīYńˆ“ķHŚn¼‘'UĆĒnk™Öd“Ō,bÓř|ŹŖ¦4äƒÜ·ė@Ϭ>xĆÖz{Å©ir#0šv9ł1ŽIéŽ+Ś€ųq.¢¶<Ń/ŌØōČķ@)xĖ⿊ü}¬ĒķŹź2ĘÄĮĢL‘ØīkōįŽ5»æ‡zU棦¾ŸžŒ±~ļ8Č䶑@Ič|ēć{[}Bīķ¦e’b@<”öÆ1Ó%K}UmĆeUˆPcĢĻh³ń¼:M©±¹±G£ļG°üė͵MAu[ĖŚy”UĻīĆü¤ž¹Ŗ²*,_ [kÖZŻĘŸ}sm/Źė“pøō>ā¾”š‡Šo¬tčc½iRģ.]‹cżz‘¾Ģóæė6>-žk8ķķc(]ąå˜ZóŲt¦X™‡9ł{ÓCĪõOųĆ@ńN(”{Y bDłøõčkļ ā«Ļ _Iw~Ó+ŠōÉQ.tü\x݃Ūé\n“įk­Vķ …ś’8ǵIĢōż>ĘO J—3yņ²6gĒõÆkńÄ/x§ĄŚ‰šģöšź‘ŪŖĻl‹„2sރhģ|yāķym·Ÿ+J“äbŪ“ŽÕö‰ū:k׿¤ųį’Y½Šswå‡`ĦÕnĒŽ”8Łš‹ö…ÓÓAŅķüM§yŪę6ņ†uqņćۑ޳¾.ųcNńµ­ĖX„ŇńĒ"€Gņ’õŠaRéŸ%Xź·½Oū#NärOšśóąĻŠ“ļ_j¾¾…d‰-L›YNŅppõā‚¢ō<+@½–ĆÅŚõ¼’åį¹v$ķĖzŠś†ŪUdÓcŗ³ŌŁ„ I7Żć*g«9)mį”sā[j)\K;‰ū‚:`W)ńĻC±µMBŁõ”‰@čĆÖ°”å”āÖŽ%³K†xį‹c6Ÿ»U¾"ų¶éģmĪ½!]„£’Ūˆźx­#&Šńä—vŹå©Į HÕjvŪø uMćīēƒļZr™uŠõæ xnĆO·‹QŗŽ ņxčq\?õ½8 ±ÓYā»_›Ze«õ<ßĮ>)ńź×Ze»5夈VMĆ# ōžUźvZŸŚ.RĘé݉'-Ą · uR=;Ź–ÄŚÉtĆ ‚ŁāæB4‹Ū±šßĆś¶»įİH¢Tk‹klonä‘Ö†Ģ\ÆUÖ¼;Øü6ÖōOM‡P»’čnč3'ęēÆJüģCŽßW‚mA&Ótß4Hź6 '½e'ŠøĆ”ļ_|įŻ3JҵmžSDø·WÉmĶ»?LWŹ2iö«&į3l?*žĀ ŅĒS§ėvŗ,–ńŸ:';N'ė]„ņźw.˜ļr]P[Ų{֊ ”é|ńęo ų—IÓ¼Iv°Ś¼ā8‹·ĖF§9ƊƏ¾ š7Ä?…–r\ {mPĘ%ÓõhüÖĆć’9x·ĀvŚ4ņŁhzü³•Œ“čŁļ_;ü]ńī£gā Ļų@õĀö‹;Gp© Ū"ž£ƒJQ‚šg‰õoźēH½Óˁø\œ`÷÷Æø<f—I›J–i ¹ņˆ„±öč ŹKBœŽĀ:6-Ļ‹ķ5Ū(/Ÿ{˜&c°BqžqżkēmvĀŹŅśčżž˜J`u÷¬āµ €™„³ź:-ōv—æ0.üGc^?ćCQ“Xi®$Ė&×!±ģ+QHH£ŌēóēÓc—PĮņö®XO­y¶ā;ė]Ų»’gĻ 2œ•ē‘óւ9m±īšæˆ,u»īČj™\ {+ĶÆģ4?éf£H¼¦cźĒ<ēņ jē;­Åā ŁčCĆŚyŌō¤“ż[)!#ī_hĮį]wāŸĆ}9ē“mÄöķD’U„ߘüj”¬3„»æńG‰ĖC›ūCJ½³dĄ`Æpjöµ®ź¶^-Ó-µX-%¼†5ŒŽÅŒČƒžTJW• uĶ?Dńgõ; >īŪT·ø·ćaūŲX­~RxćĆž½}>I›Ź\łk&*ƒPŲ&y*ÜĘ·Ź!_2=Ųö¦·ē½Žø„+  u4Ń“u=³įŠ.“żoF¼ˆŗ[Ipéc!w)ć'ōÆÓµ‹tom4r£ Ć,ŃŪ&Mj:|…•ž™rSɞ#c=’Jü£ų£į›ļx³XŠÆ£d"MöĒ,‘‘ŃO|TF]€ƒķ!I°·K‹•!ÕIsœ×ŪžŌ ńēĆŁ-¼æ7P³8r½÷}å#xÄż;’‚&žÕŸž:kæ³O޵O#Įž/šFѤ‘žHn±ó ōĻozž¬õķ7ū"ök"\ƌ6J½k9ķs¦)ŪšgĒO¦Źš5ź±¶s€sÓŽ¾Žń–óĄ.ķ‰VL8Ē{äW<ƒ”žk?࿟±­ĻÄß‡Ž ż³¼ ¢ŪĻā_ †²ńLq.$ŸO'ĪĶ“Ųōojž3|o¤]AؗŽkd·—÷ŹG;ōĒé\øgĖ)C³æß’ęR‰Å푼ȕ~| óÅ6ŚĶąv‘ŲdóŒń^”%c–¢YY³µÜÕ)mnNēwś ŲÉÄ®±†' œōėQ6ę°!äPgŠ—ÅQ€8Ļ­iÅåa#yĻ„¶€G˜$lē§$UėG;lIÉĮģh:)2ŌÖÆn¶åßĶÉ*ŪČ{1Ē”ÅfšBÆŪ&ēćWĮ½?į&§ÆĻØ|`š­•č»lIØiē”e'— >_ĆÕØ—Ćc®2?„¶X.V;ųJ½¼ƒw†ø[LŒ™ąDß £ŽzW›T$ī|ńėĄz…¦«eń#ĆPݧ‰t|‹”^Lö¹č|vśWČŽ.¶‡Äz±”Igo>‘­D)$V)’…±Ū­bh,?·_ĄŁžxžļÄZn•q™ß˾@>PŹOĢ=ń_ŸrE*I!Ų‚Pk¢›9j‘*Ńk(8üź›óˆ)­wCc‚HH¦ucø)N™Ē4ö–9¤<Ÿ›Ž•B„»“Fé įJČøĄ>•$ŒņaBļ‘AcąfR~ą^žę¬åY·)ć”8 Ņč<ŽjŚ\śVæ”ÜIcÆéw‘ź3ĘÄ:ĖnĒøżąĮ:’loŚŪöwųgń~ęKTų… cHńJ0É"ąĒe' ŒuojŠŠčėƒgģu¶”gr-¦²š› ØÖTxĪT‚3śJ£)ŗ"īŐ„ĢgtDÆ*¬lt/2Յż„ͼÖ:õ ŸG½…¬ļ¢‘r6NGćüėł’‚“žĘp|*ń£©xwNæKĶ,¾£§ÜĒ +{bģHŒ0ķvÅyµ„Ōé¤~(čW0Źm®Ź•r#C_lųGX²›M‚[K!e:Ę»”† cæ©Æ>§„AĶį½Z=JĮŠA$Z€m®‡īŽÕ×ŪyN¦ ؚ-ĄĒzłŹõu=ŠV4“JŃ„†÷ȶ,NNü`ŸĘ¼?ö¦š–æāæ GājvKŖYžņęŚU–E—ė·/¬łīÅU¤|łū9~ÖŽ,š%Ż·ƒ>'Ł}ÆJ›Ė’użź«lą’Ÿ\׊^:ųżš®-^Wŗ³F\²H€4m×·jż Z4y5¦tŗ_ĒGĒŸŁŽš=Ž£ā­RUņ„pĘX+c‚ĶŠ ż ųū#źšÖ“gāϊ1ĒuŖJĮVČ.cDįżqTՏ>{ŸØ ųy„čŗsE¦Ak¤Ū$j†ų `? õ .ī'M/KÓÖyŸŲ¬%¹œ™ź>’Āå[YS0ČżŪrśWØJ,EšĀ‘Ć -Zivry1'Vuw {“Włćń£ö£Ó“‹{ń§ŽHn2yWJūZü–ų·ūPź^'v?ošį³µ’BMµ×N͟jž3žä\żŁ‹;>I<{ÕÅ5Ō×JņÜÄ{×JŽ*’*yŒŻʦPZ>X>õ¬cŌēl¹o™ņ§„jŲZą6ŸĪœ¤ …ąĻx£Å>"ƒĆžšģśž£)ØŚ¹æqcų$7ŠtGz};S&Lē÷\¬Ā’,żüōŖóĻå]šŖćŗŅ#œß²‚ ĄbŪ ~”&Š-ŹÉ ÷ Ōxµū1`Wt'§Šš!‚°fŽ“&Ŗ±Ėj~Ź£rŽŻė ]ƒ°e†€-Ēq’,CGōéIs²Ņ#$n®¾Ē„q¶š»jsM ”h#b žyśVż¼HUv|‡®;PMĖ»Ejńž>”čą•C:3ĶI’HŽ[|¬1Éķ]F™§­Ė®öČ“ķ[Ekcū™oqžk€”fį‘‹74ɖę‚hć qč)lü‰äŻ€«ÓŸZ:’KŸKX/lU'ˆŸ˜ž*¼· 6]GĮ'B `š FaęRĪēwø«¶‘O³‚qŚ€±dʌ§Ģ8Ļ«Į%‰f·Ēq҃Pŗ²…w2ČJöj#ŃŽęš\#žźM9YžÕk<Ü&Aކ©żŽ)‡cąž4¶H@+׎ÕhĆ DJīFĘļAŖīAlÓ+·™Ā;żkvŁ–VPĖ–č(liļ€źF*ĒŚ,ĀŪJŽx Įp„|Žżź„ŗŖ£ŹŃļl`s@̲[ÄįāSøqÓÆžl`;n ø£*XŠŹY7 žuē~&Di| T>āqÜVó6Š14,ßźqĄ®Øx<÷Æ[ĶcjRb6Ø<J)!MżóOtŃ«eCqĪ8®¾ėLŠõ»µ¹E/C’Ö®č­G.‡i>B»c¤ĢT+”’r¤×bŽjā7gśg„g8õ3“"’e99ÅSå‰Uu_JĮĶä|0@\uȬJćķ¤ŖÅ· ŌĮžĶmÄŖåŗäŌq bøU*BŠ÷Ū!@#ĢN*żž§i:¶Z4uąŒõ­)Jśą[nu#mxOŒÆnÆe–6Ś0q·kA£‘ŃīŹå67Ķ»=>ī+BŪĄv>#^[hķ®É9•x-Ÿ_ž½DŖ_©īV{ķBuĘ Kt·+"Č<|}+6fßSNĘéFÅU8n:w­I’VUd®) ęMĢ·IµŹĮüMhµ›\Ądå€ÉØ M”`¶—Ė.&ÉĪvśVµ•äš²°w¹h2–å‰īZéŌ‘åŸ§ZImмN· tėA¬$yŠ|%ǹˆ,sĒc^Guį_¶‡YvqĻ^µ”‘Õ u8SAYVŽ$ŲZšĻˆžP‚KŲ4čüå wŖņGłēÉņłės<7–ķ·§Ļ_|lšRŲėÓėzdńĻi$aåW\0_ēZEŲ‹t>}eWu Į0Ā» -īĀ*Hāąć«ģYÖŁŁßFQ„ĖȽ+ Ótøµq¾«t`łlŽ€×%Ft$wśO„4Ķ+x 2_Y#¶Ns]żå®Ÿ§[Awe}näÆļ"a‡Cō©„µ£sÅ5=>(õE¹YVß{™\’z½Ēą’Œ4ėKģ‹ķj;¦ywG Ɇś śf½ 2črN™ōµäMuqˆŻ™1’›¬»Ż “÷[¼ĻCŚ»ŌŽgŃi‘Ä„™Œ2ōĒ­vZ3[ŚÄź·« ¬qš™2 ^“Ō“ČĖEt†ęŁŽY‡P=«—Ōķl®ó9†&'Æjꚩčƒ>0ųõšņ}&KmViŅxēĘÖI3€OŠłŚ)ģƒ0ʽp8?•qT‰ŃC©]Z\$k y˜',Gpk*-q.ŹĆ’Šqó.>õĪYėæ üas¤Ļ6“# aø˜‚F;_eh½ē– jD,銦“G®čŚ­Ü?éP²¼£īīōg…¾%2Ū.ęū0ŪĪxwS} \{¬šœ×`:ī*ƂŽśW9u$Č[½h`ćaöӛ“ "•SśÓęCĄf<ągµ3Cķī‚īIPdńK$꛹ڣ­`·q\l*ÜšsVßO£FTŒdŽōÉėPۓĦĮĄöŖļȕ_iĄä­©õåćŁ.Łgß–ZžēE,ē¶é@JW='H»µ»…­]ƒ+F:dS>—w(µqÕzPMΟNÖš—_(ŻĆwĻ­{÷‡|E5݌ 5Ā·÷qԊwzz °Å&vÜóVdY£aē'j¢ģ.e±‰e‰ĮĻ>ÕĒkŽÓµ;y–ęŗī‘[S>pÕ~ųėk­Ę-µį_3~ÕŃ*ĄĶńķ\ŒØ¬ÆAśf‰ Naäāõ­CF³·¶Yć¹Hå=TŒf°±E®‡‘źņ;Īė Œ) ÅŽĶŻĢ’³éޤĢĪńžŸ¤Ł“ڐ-0©¬H$Ó®!ŽM>{{—8. gn{ž~ƒ4“©„†ęTšÖ?'fśó]M›Y;ŖJ~B{œUµ©Ę°ĀDJ¬GB=(š’‹ēÓåž›w–5®õ®‹HŲ¾ńjn«²HÜ䜞+åå‘ Q͑ޙéQ6#uo0ęIæ‚Ł$ØäžU®ŽSåĀ„sœę¶"¹‘&Œŗā„K[f½ŖG/–œV•žÆslITwqZCsžHī-5•’!¹°īÕ$xG’H‰ēę9&¶2åeķĖ,5¼Gę ąuż+ž½¼2“³ŽI­1Ø3Œ»•ēŸ,…W=øÉĻ4€…%›¼Ö3} R0.滯øĆ,Ģ:źŽŌŁbfˆN`’"G õØ)GC’–śńīŌFÓ[©JõĻ|ÖŌ:}ä›dŽł9lŽƒÖ¦[Å[BęŸö•Y1½s·p¬čæp̬˜ˆ~†¹å”ˆ®THŅIsŽŻ*ž©›]„ą ć&ØGO§ĖeqpāX¼ĀPšŻ2EWÕ¦³“Ā¢į»c ­“0“īpژ–᣷w 8O„o­•ŚĀ²ż—#nY—ØB3$‰ā*Č 6sŒWSmāB8”…]•~õ\i­Ź‹±ŠYųå•čēƒŽ«ėŅY\#“ÜeˆćqOįNI"āĻ-Õ!ž)a33Wvī‡O¹ŗ­½ÜŃn-ĄdƱ5˜Ihz‚Ė:2ģ\c­FŠ]Ł\²J’¹_āļUĮ™ķÖ9Ć!œsžāŖź2y19ŽR1‘Zē·SÜFŪćµ™åv,6Ž‚„°Ö/ a-ŅHČp60„(”¢Ķ«żFŚņ"°!ŠqĮµµĢö °§·zĪ2¶…(f›-«¤‰*BjŪ\ZBŠU ħ%@Ķj‰zh,ŚĄŠZXIŠ¢.>ózŸžµpŗv˜Ś•õģ,¬7 qµGaž{×”sɧRūž±įż6Ś2tE¹ÜE»ÆĮē©®/L†ņŹybšĘęˆ…$ōõ§c®2%ÕüLŚ¬ž¾¶z“R“‰njńʗVŠõ¤³½¶žMf ČÄ¶ćŁkc],z$w~DJ5’Œs^ŪšļĖ3Ćoܵ„Ć6JķČżkDˆk”ź_¼gÆh:,7ŗj¼2G“9 IQėXŠ|@>#šö’ŗ„’Ī„$ź˜u?„!h‘ÉhžńMī²OÓ#æxåJFH)œ“ų ę>+Łkņź³Čŗ„° @G ’=©Čä¾ųsÄ·~ šÉŽčé× ūĀķ_`}kæų«š×ž«č"¹bm²G o¼w¤åb-©ą:ž›$ŃłŖĒ ±ē4—ś|ņĖŗE±ipZ6U-掜w”B]Ö½{¦j— -£¢eįäĘqÓߚÅŅü1v1-«`_øOńzńVe피&tū+W¶Ōtų]åP©;äż[Šę|]©\ŚGpŗrå–8Žh*2<ŸJÕ%KŌ–hc†éˆvĄĄ-ÜW}.³>­ŗ(cPŃ®Ņ@Ą_óżh(™§ƒMŃŅmZÖ™ wlÜ=>•Ėl[ŻĄńŚD88Ę0(ŃxzšŹX„·f#$}ėŌü¤é‘j@½Ģéēl†r>ø¬fĶa.ēŠzŻ·üa¢ŲkVSÜiÄĒ įFÜś7¦k̾3žĪ{Øk°Döŗ‰i7o$ĻØ¬UK;šsŲņo†Ÿ <'£M1×īv[łĘS2šėށqÓ ®’āÆ"æŠ/4_ źæn²·bö >\°ƒĒ·ó­£Rä9¶|½mā ńܦ« æiCō;dsUt?¦™ŖÅ+Z=ŹĪ>N½ė^Qņ÷>ŽŠ¼[mu$qG)Š7qĪϵ}«Gk¦jśf­·l–0Ą–P;~UVŠžCWÅŽ<Ōļ|!}įŪök˜šęŹ‹ZæńGÄ=* *ciK±œ–WfĻ@G#Ņ»Ķ7Äž6Ó|"žń",—°!XĪņw}r9?ZdJ'Óćućüą>nzWĻÆźGÄöśpK—…˜ć(Ųaķō ēw½nŌ|?{7†Äö"Tœį7°łU½?,×_ą 2ÕĮ¶š? L‰$’ėš¢xæÅOx§Eńd+.ž[J Ry$<©Ļ/ҳåšķ®Æ¦>µaÆŽi÷&öŠß…pHåĻ~“Ēc¬šv™¢cźZeÕÄbņą2NŻßƒŪšöæŁĒ\ń„l¼CįK«³wį»ł’sĀ u*§łRņ4æB‹Ÿ 4‹t’xfO±źóĢ­4jøYšCbŗ8uHŅŚūN[Ņ쁟oEĒÆ„s¦ö!ĀśŸ3|U¹h.nµ{=>?$s\`qž:öƄæt’NÖ"Ó”{so³÷X*§Éõ'šÖžĆŒ{iń[Ņeń®¹­éZdÖ q'™€3»×é]„Ƅ֓›yó"łøcĻ^õ} -”ī> š>£ā3T¼“Q°Ę^Ÿ4£_ʾdų©ą’B’ÜFvŲģ;¢aūÄlć'ڲnā™ņ³Gw&·ŠŲ;ĒžN+Ņģō«}cOdG3Ørœ w¢2±Ļ)jcŻč·<šÜà ̰‡ ģMÜW¢Gwµm`.¬aImųVę=85±šgqg©[KŁmēW”€Æēo„p^,Ѧ¶ŗ‚}Ia6īįC)äsŒŸJ āĻF±šŽ‡„ŲŹÉ4¶‡ŽqߎkÕ“-]ģ®u¦³Ā¬Tȼż2iĢĻ#šĮžŻńqšī§xšĻ‹1lķ³Œ~ūĖšÓYŅõƅ­įżJK[¶žD{“Ļ֔–†sosäxGšĘ”?‡üŪ§TŲ„·s£Æ5KÅŽŃ|IšśīKFTŌ-ŠKÓĆ=ćY8ér9ŁÉ|Ņ_ÄZ5dž¼K|×Mpb†č‡8Ēé^kń—į•ļ€žĆ.ŸŗŅ·8ošß'«sõ§kĘgĪ/wu,ŒČY|¦Įb>šöÆ¢>x÷ĆZ‹m4ķ]¦Žéȝ’śĘ¶6Z­K_ži>3ų§į‰cŃl®>#\ĒĒRG`NkŠ|sāM{Į>ƒĆ}uunŖ±ĀŹ Œz~TĘįŠā¾隷ÄĶ"F¹¶};RY q™—÷Ƥ~|ńoĆ{ ŻJöCĪĒĢ ½[ūßQHĘVFN„šG¹¾ÕõĶ.·Ō$’H†$[vsž –{{뤾ˆDT†]ą09ō¬ß|:ń ­øń|O߆nˆŲGĢU»ŒÓ[#ŸšoŒĒ†®dHķ£›dćółs^ß⯀Z?Ä}$xėL‚ŽĆ\1×PžŒŒņŁā˜qa}¤#Łß$©*±²0N8Ļć×ńØ,4„Y­.­.DEY¼ŲČ8#’ÕK[‘&Ļ]Šlm. Qr©åC†ś5{®‡ń IŅōčlu Ų 16Šē({T¢.WŌōęŠō¦Łų ›{›yQ„Ż]AžµńÄOŪk±'ˆtĶzK{»yŁŚŻ[£źæ¦*łm©v:߇žŗ·¶¶ń}ƈ&’Śę o•OCŪ©_ćæ‚žų‹ĀiywimoÆÄKGr×`AłzōØchü¼Õtų“˦<Ņ`‘×*=1Vģ}JĘįķB³…!XŒóHfļ…šńž×a»ż!Aps·sJżPųgŖ5ļ…“Ļ2²“!ĪHąw nW=„Śī :ż+ęŚWĄsėŽÅ–,no,ņ$ŹŒÄ„õƒĻ€l@LĪ…ß9\×¢ü9ńxš—ˆZ1sqka(†es$`f®×5„®{—Œ¦Ö<%Æų{Ē^š(5"āFŹčaYdBņ8Įö5ż¾žĘ_“f•ū]~Ģžų«fŠ7Š#“KmjŽLRؒ=‘ö”ĒŻ:”©ō¶ŸzŚMõ¼ØÄ*°Įöƒ<`šõ„6óę(œšĀ¹eŚÅų/ĆŽ4Ń|WšļÄÖvŚ…x®Ö‡Ó.šćCš8Čūf!,Œ ć{r+ r©¦÷z~æębĻ‚/³ķޟ6~˜ŖC@|ž ]Ét9jlVņYQQ@ĒõŁ@3ø”ąąÖö1l ŅE½¶ŸÖ dƒ—ł3Ž‚9É@Bϰ|jvÜČ¢3‘9ģ(-;— tŽ@°Ų8&–&Tw!÷8 Ś™v)z„c»<ąōƤ’cÆŚwÄß±Ēķ'šļćn‹­M™čµ×a`LwVR0Vu0=±LźŠŠ’K‚ō?Šžš×Œ¼3}a«x_V³KŪ+«GŻ×Ąü’Zī®m3[°>jr§Öø«Dg˜xŪH:†%Ņ`²”†lJŽkóoQš«\šÄšk‡kė8Ųz˜Čś?é\2eÅō?5n ń/įŽ„}¤#\Ū£CusÉ.3µŲvą}«ł]ńO„5 kLJ5 q öóū²!'V“Ģ毱Ę5²Ēµ†=*µŠFÓėŗźpTЬ"3·5$Q«ļ*H Véœāʬ±Œ  :āœÓƔ¼7'ē„$’*",qM!f Å?‡Ž¬ŪÄUķ£ßšŖfœ<(\Ps“ŌWė’ükö¹³ēķuš‡Ę §§Ć?ĪmüÉn‹[’CƒŁÉ+ķĮķM.‡u3ūVųK«*ēUųoynķ³{„Ü/ݚ3“uģø÷Æ|Óīķµh–é”Įw(Ū† Æ.“u:5)mćak8$čG­|ūp| ›ćēĄ-m|?kļÄ?[É%œ,2omqóFGsŽžųõÆ.“4.ŸĮ߈¼sቾŸ« 4ł„ŗI ¹ ŹöĶ{ž‰§źŚ\öÓŚŗĻ§ąžŒ{f¼dt=: śūį÷‘}c,é ØøIPpGøÓųĆMÖ.ōŪĶ*HćŌį\Ā­ĘóžE|õZZž½)čy„Ī©āO™ŽÖ{MBŃøƒ$²‘Ōż:WĶž#ųŒŗsÜČ5m2ńĖAÆKA˜Ö—Sä/xĀ fģyPĮ}«“»cŲ›žGcč9ė_ æ³wü“ā§ĒmNńwōm_Ą^’p×LT‰gŒp:ņƱ£W–*(ó*Čžƒ’fĻŁĄ t7Ó¼#¤C£,eYn&Śerό×Üz‡ōķ Ń|«x5;‚6ģ;}ńWĻs‘¾ę¤ŸÆõ[‹MFyīt‹ m±š±öÆy±šö•„ZXĖ„!†ī!óČ?ŒśŠøĘę‘&”ؗž „_?³ńĶ`kv±©—Ķņ“xükT¬IĄj¾-µm.ór„Dćx5ņ/‹>8éŚ4—·ÓyöŁ)&ņIQź¾õQˆģ|ń3ö„šž„/uõ¦ņ„Ēe“<ĢWŌöæ+~7~Ų޵sc Ō–ö [£‡O˜Šź„ŻĻÆüV¾ńń,—Ķ%ŗžżÕĘ1^5}ØKw1Ģ̹=:WTcc–„C?rĆ,^Z– Ք«+ķĻ„iÜ䔮I;œī«Ń[3°–5m؃kJ±ŸPx-4čWP¾v -Q²ģsŽ~—~ĪšOo‰µĶļǚ`š·†.!ŽŃ:2Č»¾é-ߏJ¤ģkŸÓ'ģµ’łųMšŻmŔ7·±[‚—%4²Å5ś;”ŪZčÖPéöˆ–ŠÆA€Ę¼Ś’»:#rg¹( īōéšÕŽŃUÕŁ"³,ÖBU°GnōAx±Ül‘ŠÄݽ`Ųچ®öҼ r¹Åg}­lŒäūśR4‚+Oā8#uµwDcĄ9ĘkĒüsń'Lš\w/¬:Ū[ŗóuaź3UÜźŠ±ł“ń+ö¶k»KFšåœWQ³óÜ{5ń–»Æjśķɾæ™g³Čū śWT#Ōrv8‡Ķft#ĢÉ$zՈķ7óŌ¤¬rĶō,-¶])ÜxéÖ»żĮŗ¶­•Ž6XĒ\­'1Ałį_†ńYDĶ{m½ŲŒmνR-Ģ…!0Åc)÷4;GN“s4sÄv®öŅHī]-ŽĘ*{ö¬L§¹ėZM¦šlŚĄćJÄŌķ­ šO±8d ŹWčR“¶»r\r¾Ćšė“ۘÄ:€ddćqĶ8ÄŹÅĶTŪłgČmĖüėĪõk¹- ™¢o›„l#āK©õ +›I$o5”€cōÆšĆ]zo~+čžx§#ØĻ×­;š)ŸWč?kŻ2+#t9ļ^€ÖČŹ#ՔßB%+™ægņ_’²üG„Å©Ųł2€š0Įt¬ÄahšDšr-¬RŸ!pšŚÕ °Ä„Œš„+ę.ožX·"ŗČ:ŅĆxdh]ĪįTꆦåķZXäQĀžõ “Ļ 7ķ±\pk0.ÜZFÖ@ĀL2ā„f7š®«#ü ć>Ō¢µ“O¶[2’Tć ō0%·„Iåc:ŠE{›”x HƒrńœU[I–9Āel‹»fß ]†#­eK§„Ā:+aŗż(5 k!¶UI5Vå‚we@Ńvā€.›Ō•eżÜL}*˜ÖÄżžBanĄŠUÓ fyIŚĒ·jµc <2 }„[‚ĻĪ.¦5 ōéZmŖi·"c!~F}ØgP»‚ń‚Ę2ē¾:×1wa$[˜čÜć(‘VT "‡×Ņ I-ŁĢ  ņvK3å€ūcÕ»<²ß‘ UЦšŹįōŁ‘.6LÖ/…|WØŚ[6•ā;(RE%”ūĆÖ“ŒD×C§Šīٲ"ņäē§qV5 µ[e»6HŸ0aĒOZRˆög5)ģ§kfÜpFk{OœĻ4lĢź ēęļPht÷Ėm-©Ä±¦Ü˜•ŅXc˜tÉļ@‘jņ)]ČŁĄÅsW°I+4‚h%É’³ˆßęł½+<Ė1‰Ä„¶ö 2īV³Ł­€“ĻščŠWƒAfę•*b$.OR+£WHa*ŁäūŠ&Ź“ŒŃ€¼ō­E[Ūh„زmØķA“‘y«]»„y*²AÉę3 ßJ>in>TńJ„s*4ø{PZ‡rÕ¦­µ¼(ÅWÕ-§¹Ūqj@źE‰ÖVˆ~ż{d×E¤ĻkrŖ„ĘĪ” »oōŌIDFDxĪ0A¬4㮣#҃^ŠÉ&„‚ą0+›Šyģn-ĆS’}P!o%Ņ<³Ć²^œ ē._ĖŹ–: !¬{$äõoĖYP»Oó Šd¶nTy{wgšŻŅ-ZGX‚ÆœzP½Jżģ­.Ē.p+"9ĬX¶ģž“Ŗ¶²¶Ł šŹ»½\”Xšhš£Hzb¤Ž:!ÜGÆ„Į—cŲņ²1Ś>cé^EāĶB n ‹£ƽc-ĶŒÆ É\ ŖŒŚ{ĢÉģ“ž@ėZ@Ļ™˜^#¾ŌVĶā°…]ĒMÜWžIą’Ü!Ōķ€ł°½Ļ½]“±¬YvĆĀ×&T2oGĒqĘkŃķ¼;r-£I6 £ƒœÅ”—m4ۘw*Vŗ 2Å.d1…ŽOQH‰š÷ž}=>ŃcĖļžÉ¬Um¹ˆ“Éō ĢÆ=­Ēœ€šNµ­„Ź»öŹ~\ąż(5Ž•3¬Ńå·#śUø¬ķZ&Y2²gŽ84]tŕŁ#cæ< ō­ü5­*,хxŽFÓÕh6„Oų‰u«iźČĮē€õcØ’8Æ([Ž1‚=AķS$tF69/jIęły“Œéõ®źŠĪ›]?w‚9sX1—~"xWū:ę{…ŒķÓåÅ|ŪāżJÕō­BūhggB UŹĘ~rxĖIŌ¼+Ŗµ¬VßhÓŚB׏-sß׫𸶸Y¾wCėéķJqčµi°·E™ŽęĪ>•ĪźŽ3¶Óī‚˜Ey^Ų÷¬%HŅ3īlé~,¤öZ r$(цĪÖ÷®¢{żGP@īÄ\gØčMO²±\ČåÆ&½–᣽·“ĢN QĮ­=;KŅō˯톶tq—S†^;zV“ŁMO®~xĻNÖķE½­Śžļ2Hąø#õÆw²·Šé挣8ķŽŗ£#š¢Š—SŃ"S…oų żkū>5†]ć!FFi™Ēsž™UĖG‚"?*•Š"F’7™Ēn«CGM4yēˆōk_i³éw‡yĖs š™ Ø G9=럼ŽA –8Ü9÷Ą®9-M9YbĪéą¹²žPÄĘūžSŽp{×čļĮ?č¾+šų“¹’ī0(¤ŠRZ÷kq6D‹ŗ^GÉK&«m91Dsp;ŅS2;½?Vó˜'#ę>ęŗ›ioJžųī9ļT¦Œ•Ī‚Ūk€g-=OéžŌmDÉn³†E'ląÓęAv}§jB¢ N‡Öµ®uŸēVŲ½9¦@ė{‘–@ܽMlĻw¦ÜZ8Oš|w¤ecXϹņ÷ˆ4ū«ZdHž)įX š_ōķ.Ż!žMėќŽõ ›Ŗ…{–{¤ˆ3°9;±ÅtŗŽ{sd­n>ИÜG„c-ģMīy5Ɵn yŖŃĢHĒ5^Ł"‚ķ!ŗ„Ŗ° 09C­lʅa©ŖÅ¼WENHqYh¶±Jme±6œnTč*9^ƚl>ēF{8hŻLYļĮ&³<øZ7ރ}8«?#{›ė9‰F oŒž˜¬ōńžČļ=ż¤ cĖÓViu/“̬—lŖ:s]E¼ĪWiq1?ÅI”0–ÜĢā njēĖ="T«²ķ-„g3k‹0ŽT…*U5f©ŁµżéGp–ā3'”}=>•B+¹ÖRń¹'• ō­S°YŲø'÷øØ“¹.b•Œ³¹źļįnMgėz0“e{_$ž~l‘S(Ü «thäįŽ£œē„%÷Ų&ł—¦+>F ]*k}>ŚķR‰#«ĻŽ8’ėWQ¦i÷C̚ŅGd n¢”®srĻĆ’Śs•²~ls>(šÄ¶pHmÄL¾øć?ZĖ—”j}Ļ2ŽŚqr©*­Žü 酮ž…UŽģ›Ž”¬'6Nö–ļ5¤ån1UęÓ®%‰ć*¤×ҚDMļ‚§©} éµÕˆFć±®ŗ9š$w|žø­ķŲ­ØÆŁĻŽN lt¬ł%T@äN£ÕsĻKé ĖllĘTśU϶Ü[dIõa•Ļ­#HÄņj:ÄF­2āK&IIR=åӁõ8¬ėŚõĆ ĀÆß%J·^ąÖn] TO”4«Ø×‰å^§=*ž«®Ųżā‰]äo—‘ŪÖŖ,™C¹›ĖX&Śē‡֍F č7) wFp2Ł­ć+‚†Āź`p9ՙآ”ņW©9ÅL¤öds$B@ÅCs…ĒZSØmRnu9<­f.tmXŻ Ė0y»w5æg,Q†UN6į»V}›?–›‹M:āƧžHbĄƒŪµli–ŚDZkIi i¤lmĻĶõĶz4ŃįĀ/c¢šŻµī›wwŖN³›0¦1€Yv‘ÉĘ>µī^šžƒ®Ł-ōwvł±‡Śģ”gūūW]“i]ć Ł¶§(‚Ž³ÅˆŠ¢ņݳšw‡t *čEamöˆł‹ņŇlžFg;ć­Ęy‘¬¢·“ž7’VŖ>qé€+†²ŽĪĘUkē’Š%\¹ō¦å”Æ”ō‡¼IįĶ_M›Ć¾!’ŽąÉ›vęŚxW/«ųVóĆÖ¢ĪÉM֙yYS=~•ŒäĢÜeŌé’gWź޽©ł·ŲŠZ%sŒēÓė-<7ā‡ķ¶ńJ ³:@’ēš\ĢĖ”óļx£KšŻųŅF•$–JØó(gøžYŖ“.‹sāļ Ćwįf¼{˜ՎD A•śŽĒĶĖąRćBFø°/ØĒé ćsb¶ž“śKA<ń„“v—;‚:ǧéZEźTOOų’šēĮž?:ŒōM6ÓĆŅØ;Ō.e=r@ĘG^µKĆó ŪųgSŽŽqh—:šĢI䟹ö§wŌg ńĄ?mšĪ„ŖŪƳF óm'ņƛüįŻ{U’ź[=vÓI|äTć!Ać4ć+š§”īIŖ_Ųķ·Šę_)@]ņ3ŽµŚŁĖ«Ii”ØÜGįrzÆAüØ’Š‰Hč…F©¤_j)%·šŠ03ćھjń'ö­¬†ÉąžR7GŠÓ5œV§<Ū8 l]éÖ«tŽä+sĘOćŠķ¼9ā››ūkmƒ,[v³öcōķZ‰@śKĆę=GAøF†éīĻ /Óõė˵żzėQ¼‡KD&ŻńŽd9¤Ż‡m KM*Ņk™„d’ŽXĄ’YÜż+øšöŸ<ņ(ņÖė6Ähę&Me%ģwÜ/—l3·Ś¼ĆUÓ„Ņ&ÄGĢ&@(Ī=éÜi½Ž£J—PŽU,Žē޵.“­ėŠĘ·V 7ķõĘ:ŅåF‘Ļ»žG7Šü3imƤWļg±óĘ@ˆć¾>ų”ØkĒĮ·P½ÆŲ”ޜäē¹īqXJ åĘ60ašųń=•īi~–7H…‘ŁNX×~x‹@ÓoeŠyqp›7 õ?ŸėS‘„“<ĻÄ<‘Ē?Ūc\éŒ×–ŪiaŻü¶|†'ę=kxĪåHö?¬z~–ņ^–•‚¤ŽŸZõ†ŗßŠõK«‹=-Ń­&ußÉlHöā¬RV;&³u “Ŗ¦w‰eY6sķĶx;x‹P×ķą“øTŻØ _˽Lö”ęńČmo'·•vģĖž™'šm¦«&„u>›k<Ėt¬æ ą•=ĒėM#^cī_‡–ö6vv'ģKøR’0wõżi>)¾Ÿ§ėØęŽH>ŠØŹJœ:~&™ĻR”ē> :”,°Ü}™Ū “ŹcZzGƒll&½¹ƒ*q–ģh±ƒ©©ŚI ŁĒ<3®w.ĘȬynnl/£g¤h–¶2~" gF‚źā f¾g' YqՎ}E|æöŪ+Ī“Ed“~ / փH=I/n`Õ,P[ŻÜZjēNßóōØlo|rŃĒö9ķ»ˑ–ē ™Õ}% ų’QŌ¼>Ė®^ Fā†pĒ*>•ŚųkÅ·:“ōwśt›¶y˜n„fāSŲóoJš„ÅÕ¤hŖŒv‘Ž1^Q„éž*š†±n¢Hµ/»³1T*GįŒ{UF6!H××u8ŸRf(Ń9 œÕōgm`·Ņķ”ƒģÅp1ߎ‰- MXūąn¹ čM¦Éa ՕÄ-Ų cč~½kå’ŚĆ·–+«źńŁ\ÅhŒŹļsĮ¬lD¤~lĶdf¾’IYœó–Ę:œōÆSš7…ļīdSm4—d| gš­#ē<V}h²Ü,Ņż”ŠČ3ųYi·&Yį“ū:nĪĪąÕc[XŻiŗĀ7ŲŃŠ°'<Ę»Æé–zʉŒ¶6’j±’3’}©9XøĖ”åŗ&«qŪH][ÉŪ‡ʾƒšŒ^%“]ū4۵ɻ9ī=óP„©§7SēO~Ģ^4ÓSÖ|{pśÅ›y̲8:Čq_|~Ļ>5×/>-ˆtCoā;y›|Žøv@øĘ;Ž+TȔ•Ž2ēOÅō——6ʼn¤Œ£×ڳ¼umuįĖk‹k{³snĄ.c8\ʦÄŲšĻ‚Ž5_|N½’ėN½Õ4K±Ė"±ĢNŸĘ¾ŪńZŚ|B±Ō”Ó!‚āŚ\†V݌Ń(ÜŃ@üłńŸƒgŅ/.ٌ;e挬ü(ŃōŪŪjšwŚ]ćl€9 : öØŲŚčzoÄi5cz‹į“øI ü°Œoē®Üśf¼¬k^&±Ō’³|Z·sŹŲ’0ĖļŪZŠ¶Æ”÷_Ā{ķGxÖ6Ų>e#Ÿ§į]ˆ¾'‹ 6žĻIŸķvüy‰Œa€éšfŽŗže¦üfšāĶmD1¬ŹŪw,yĮī7WĻß>[x²ņŲė ¤j‘J²‡ŒķwgŠŚżIQ±ś įcĒ’£Ö£oØÜi¶Īń&Œ ĒÖ¹„^=šg…uĖ›ˆģ|ąC]*…ego=ǵG[bωüs¦j¾9ū^‘ØĆq””gY—ļoĻōÆųŸāGÄ6m>–Ęņ;y|…²Ė·ćŠ‹ .‡‡>yn“é꣮‡D,Ż3õ®—HńŒt]&ėĮz¦”w=ˆ ¾Lƒqķė‘HøŪ©Ē_x"m]¦“Kg1ē|dü§×ōwĮųƒĮś ߆fĪ­ ‘ģ2²|°ćŗžTe=KĮz—ŒäÖ5>åg ųČŹūśšĆš×ƒ"•×Pš'ŗmb§h$zóL‹-‹¾Ō| į(¼_įżF“÷P»AŽ]ĒUĄ>Żkē(ÆoüIe;4rĪN<Ą¹ē§JŅ2ÓQ¦{Ćæ‰)šž¦\G߆¦P’Įq’ź¼ {tśVĻĘß[évöŽ#°½’ĪĘä™ jß*碶? nHLéžM‡į»žņ6ŅäĮżļlóœ~5ä_“ŽÆcs é§F½mBńŻāņć%6/cļŽ²c¹š­ä’A„ʱpøäcŠ“ĆŚĶōŃņ]•øĀ÷¤4Æ”µ ģ–zµ¶¦ Ŗ$¢I°: äą żRųY«éśĻ„4­_M)öiI3–N:΁ņésŌ$u&n¤śU;«k;Ė-FĒRˆ=•Ä-ٱķYJ=I±ł-㯠^ųÅWz;^ؖIRVį•IČōĢ™’HŁČ (Ć+Ģ9iSŠśĖĆz͟޼`»[HÆ-UP¬|ŌšsōÅ~žĮ?ii¾~Ó÷|Iā{}/įljPGoÄøAwŒ Šg8¦ū}ė»[Óąµæ’Ž2Ævt# Ā½ᧈ­¬uH,'qvņ×&øå#I+ŸMźz\ņŁˆ,q‘Ž¢æą»?±ę„ń×ö°ż¤>h­ØüOš\Lŗ¬0EŗkĶ7«ōäģ?>@[Ņøqn1‡“›²Ž»_Eæį}µ1’?‡ßŲn6wpG"‰aóv•éėŸÄóŔȒJvl@sĻ|ćé£ ‘2īõ‹s” £šØ·­.ąA®ƒ™®…tŒ®÷Unµf<ɓӎ“µblģŚń¬8 *q”ī æ/Ø qv,¦\±Ļ™œ{Tš)BŽnĀc é¦^ŠXćr@Į©žĻ”mqję1«†$r(:āĻźėž Śż“/.t~ĒŽ7Öę²Õ4™ćĀÆur »·9-SżŅ{v&æ«[»ĖĚ9eCēƒ‰Žõ…hšHϾ¶IdfQˆ&\2ū×Č~ł¬nģŠÅ­YæŚ-'QŒŽćńĮ(źAņOŒ­ģļl¦øøXfŃõ^Ņö2Ÿtōɠ󳊞\?ࢿ³ūų+Ę_š’é6¬a[$øƒ„1só0ōĒ~ŌEك?+gLĖ:ĖēĘzéĒ„1ZDŠe2 ’Ę=+®”ĆV$L&֌•Ļ#։–‡ÉGRqŒWZG3V*Fń®ä%˜ę¢_¹2"vn9ū¢bcĆ+ō«q\C»s1T Śœ‹LĮT²!+ĒCUe²ŌLöš¾‡sżŸÆŁ0¹³øRA†T;”ńī)ōŁżĻ’Į6lż¬æeßüMŠäMń£ĮŠ„§ˆ¬Ń¶¼Ŗ€‡%NK ¼tēw ÆŁĻų“Bń'‡txzņŽėĆŗ¢oŃ²"}äoB pā#©Ō‹ZŒ wo5¾ż—ꉿ*$”[ż›SG}ѝ·§ļÆń)ö#5åUZXØī+šYßŲĘ?xˆ|nų{[éoęjMAņN$?7#ų–æ#žxßI³¶ŗœĶlź“É&¼,JŻ• ķąČļōĶf]nĻT½ūMžV~T÷õģßšL,ŽŽęE› &¼Ļg}ALę'ń~›}sO˜ẌDɍ»”u8ōƎ“_ŁūāĻķ9ń9ģ~čĒ„É'™q dfx Õė`┩Z‡ļwģĮ’­š?Įä“ńVµ¤Ųx§āŌ(Ņ4šł‘[‘ŌØ„K1‘éš<˜`&01ųUÓ%¼¢2=k‰„°ū\~|L`½N„VµæŸ-“n`.TwļXŹ@qš†°öāE’P’Æ;Ҭ,ä¹¹½·Kv\*¢®tF=φ¾5~Ōz&—ęŁųkQkżF5Ļ–½G>¹Æ|wńgĘ^=ß]ÕnŚ G—ŹH+Į®˜Ą³ĢćµøøŻ#˜ēšŃĀ„Q°zń­LźrE±™]½ŪŅ·4’ŽźF&¶Veaކ³sģa(Üö? |.™’;Ū“ŽrL׊žš3A,QC 1ēü*\™VŠ÷Ż7Į¢8£1˜·Ž šĢ×ō©“ˆåtھ£Ž¤Ø¦|ß«ų—QÓo_“¼{Ÿ…ĻÜųkĘ7Ķ<N¢\0ēh-Äś[L՗U“‰ŁH9#×5fM:āLÉnė׊fR…“Ōž[#;yŚÕ„āh.UvØI=\]‰±„˜vļNRģBĆźirŽqŒyŠyĒ×Iįåū -*DZ‰äc­C“"Q±ßŲ] UČŒ9äs[’\‹˜Į‰Ą‘zŒŌ’j¼vĻ£Gs³ečąć½aZ\Å~Æ”V^ šŠx”“%œ€Ż¹Ås:U«)äœö  =2häs$€ķā¬źāŪ~ėU1§\wĻ‹¹NbrY Ē=«©Ó5$µ·’ÖxD=9jÆšĖČG·“»&qō=Ŗ°Óˆ~*gŒž“ÜxbuIZŚņŚ3gō®ņņāÖ S"—#½<ķ5[o^Ż$\īĮļŠŅx!†mČūŌ÷ĒZFę×ĶY™Wx)§É&Wr·ĶŪGĶūHĒ?Zq‹hłFGNœŠ$€ $¦F=+>E„r„Pƒžhę$”³ī!ŖŖ«Y§Ś-ß'?0€;O ß%Ōń¬Ų ¶"»½cA³lńŖŲų =­l D‘šeĄuN¹'ր0ä–d—É‘ VöėT®->Ģ(Ki&•pŪ3łWAĪÉ> ō44·ėm1hJ“]ÅaźZßH—±™FĒJÖ(M-”’Śmąć޵ÓYx¹mwŲĖły銗kź2„Ś,Z•ÓŽŪȃ'8ĒZ|½¾"t!ž•dÉ$Ģ줶ĄxŖÕ¶©o 43ēĶģh"QeǾ³ž&Š«ōĶe\ƕŪ'Čh22c¶Žäw 3޹’Ó¬ä&E$Ž”Ęy®“ā ŚfY%3ÄNG5ģś4kq»”WĻJ Œŗp›\©äVߣp‰ĻŹy‡(Ü©=ÄV» ›‡Ķ‚@é]UƊmÓO6Ģ‘ŗ7ńōט•>ē%{nš‚“š„TėŒÕh”ĒR~n†Ō87†t y«QŪG"9Ų/N(,åZĻP†ü½¹ūE¹ r>čõ®’k—¶S<JϹ–Śö?$>ŁO·JŠŅ„˜pĆ”č3›čl@¬Č#’Y:{Uł÷m“䁌Õř•tł‘®@€+FņĘŚWgTø%aœ^§'”ę6 =`On×2ž£µA¬Y$65 Ó5¶,Ö$S"dö#½ kF%H AW­•ƒØN”¶M{0ŽBŽsŌÕ7Ņ$¶}‹µyķ@,0#ĖŻ•ŪŌu¹ŁmœŹŃI¶V?˜  Ł­žŃłŹƒŲŃü µf„«ŒƒŽ€(jÖś‹DE¼ę(\zu®O \\I¾ą†p~R¦³pŌ®fOcŚČbĀ=ŗUŪŌžN#hħ Ą§K>‡1¶26Ž0MyÜž¶×ŗy6ČĮ\ƒV4vŽšU·…!ŽŽ ¢ØŹņkŅ4»HīUL®ƒžę6tW:l6‘,–ģ”}rŚ­Æœ«ę¦r9éAĆģcH®xq‘Y÷,ŹéAObØy1’HÅgÜØøc½>øėAŒIģćIw §¶*ŌM€m~E<Zø1³ŚŪ¤łŠ(™HēÖ“¢.mZ(Ē*ö'ƒZ™.™å» “ÉqŻjKhå’@¢UŁÓšĪhزÅģ- ą0e¤Ėöicø‰HĮÉ÷¬Ź›:k«¦ŗg$žķ»vĪ_A¶&,§±õ Ģʊrz”ķéVZßĖĢѦP¹.‘ŠyĦ8­­1­fżĶŪ•ō÷  ¹tūhTMnēå5NėX•rŖ¼}h:<£ĘpŪźv#ŒŹOÆņ޽§_Z\ø¶Gdņ9ؚčt'Ōć7\Ø>r’£'‘W-õ;\ÜŖ±=CP“z›ĒĢęüs§éڶ– 0/$€Üœ×ēŸ“«Č&»HK6Ōcµl…)v>;ń¼Ś?h°¾‚KKÕł°ćŒ}kÉōˇÓŌZNĘUBJƒŒž{TN&rf…ī»{qęŪ[ۈb$l`rAō®R²h|››ģąņX’ g'ÜIŲé¼?į«[ėukk€²É g q‘ėšö;?źÖ0ŹŃIk=¼lå|³P=8®YŌŌŚ¾·ŗ¹œžęo4.wÅUµž9 ¼ŽWŽŌ”=K”Hü5—‡5ōÕ4©•.÷žņ2äŽM~‰ü4ń½ķ¬w‹o+|›[t®ČŹĒ4—Fzvµ:Žyr 5¶!Bp>ńė…žŁ!·RÕ"»“cŖ”×<’…gšš…!KŽr;ākSk”÷ˆ¤Źlķļ]|c{į?icpĢ92†låNsZӐš?@¬5„Ö!]RŠI W?tõŪ鿣ŒĘ&nĻjéŒĪyG”ף_I]Ņdõė]†™ŖĢ²(Ī9śÖŠlĮ®‡¦Yß}”T«ünjT¶q°žBąķ^sėō¤äsKcpDŠŹĄąŃ"ŒI‚SÆ>õq‰0SĖ|AāWNģĆ”Ą½=kŽ»óļvyš‘»$gš©- •Šp:ZJ©+»MĮ+ź+³†XÕD$ē`ŠĄĪ[–Ģ͇«±$ā¶m­RTbŃØēŗÓ03õ ēV(#s÷jž•i©Enī »Å GII*¼rķ/Œé<'•¾©šD±wĪœ= ‡é{;R-”+0l®A5§žW*ō<Ö°d8±ś¤ ¹UsøĄSEøžL„Ń8­Y']o¦ŚĢžk¢z`לųæOKyü˜āócfĮ#ųh-IœzŲO„łwL§Ź' ŠŪƒÅŠEi";ČŚpsYū2“<ÆPXµ[ו\ĀKt?įYMm,lŃLźņFåž”8hTY{MÓļ¢ öÄJłĒĢzVn£}s sp0wm$VeSÉ}q …'GņŖvŒT $(9ĮR:UEj"Å֙⁢ž½ xާšÖ{‹éeI¢wd+.qĻ8­‹‹±ŅĒį×ÓćD.„—Ž•­kēÄU[ćœw¬å.…¹÷»|¹6r*śŽJŖC€Äw¬›"VčEöĀHłüćŲÖõ¼F„×åÉĪ1Å ¦@,Č-)ēéšé­¼—vĪŃŗĒ9;³žRó*'7©Ų&”ķm;F6Äkx"}ćó­ce°ŌJ²CęʰL0=Aėõ؛OžȊo•‡AT[ZI”ėyéOq³|ĮsõÆA“ŠõŲ”YļZG„ž ¦gŹ=­Ģ{ćhĖōä ¬ŗUĮV“‡ĻP9‰)Oįõi Ō…<3‡ÖÆGdÖp“)*ܱĶe4¤ m”3™Tį‰ź*­ē•©Ū“rM±H$/įP‡ÄRČīķ*ž?ĆōŖ‰‰‡īÉēłŠvę£ĢˆNĄz·ō®žŪP²–ÖO4˜d«ÜPR‰Ė^énņM&‘>č‰TžŽ¢°µõ{+‹ežŚPŒ GQBAŹvvzuķ¬jtVnO5Āßi­¤ŽŽµ¼ŠŚyo—'–ü;v«P$ŸO‹ĻA8˜cŁŽ•=ōwŅA¾£eQė‘RՍ rW:%ŻóŸŻŖ8į·+›·Ņ×Eŗ&[xՋ|Ä ē:¬z¦‚š]Ü¢IŻ‘˜ąŖžūŌ×ŗ$VR·’‚HĖėśUÓ"gGea°ŪNŠ aĪŠŻżė”·’Åchīā$ –*0Oć]0‰„ž‡Ø@žāŅL(€{W'5ö”4Ķń£‚1:Õ4bE¬;7ˆvœžµ“mjg¾¹iLˆT}Üu¬œli§iń,B[dFōķŠ–ī ,ŌĶ$l2GNõ¤cb%+h7~ђĘ-źGk†Ź™Ā”ģ}H®¼7‡o’+Ėė«•cędpéžģ4Æsd–ĒÓńĻ‡„ģŅ;·s…•”o­y‹iž/š§ŖéŚŌbšCshĆī4MĻūмŹövcµ„ęÖq­”˜HÆæœ„×1¦|SÓ<5š_>õ$HŠdŸz”Ø„”ē'ų‘‰5“ØčkobŽža¶?y×ŅøĻ^ų¦ģEu©Ć-›!Łå©;ņzœ­;Į$zGĮŸ‡Ńk/±ŗŠĒó32²“žIéėzśžė\ŠßLøÓon¦²ķU«qS%Ń’8’ ėŚŽö…Ņc¶’ßĶ2»ŖeŹž6ē°ē§J‚isÉzuū›˜oĀ;GsĘąOJĻ“”2‚čx„ļÅ;-2śA ¬öŃĢ m䓟A_Y[|JŅ|Kį}-ÖD[Ÿ$y…£ ōz n‘ĻR“čiYų4_égSPĪ’9L) ÆāśĻƍ_NŸPū ŹłÅˆTg1=1ėMFĘmXųóSųćæ ų‡PŃõ]ZęāāÜE${Źč{vÆXšŽ¹Ø]XŻK5Ėiņ•óG¢ūU7bŪ>ĪѼ'į/xzćJŌ5 ģšā9#¶hß&7åŽpM~wų’Ī’Ą~8Ō|#ØÜIkØZ°Y6yą’õā¦KZ†Æ}§ŻŪÉvßčīŒŽ¾kf]jõ¬d·¶}šČ›1žöō­U¬SZšžńv·u£¾™} öņ¤‡gĻ’TqÉ÷ÅT×ZžķĖm4÷CųQõ©3;o é¶7z[C­iˆ—ŒŖw÷O¦+\ų[AÓĶ¢}“k1MŲĮ#“łóXóē#iāmNĀK›}6ąĒą¦Ń’-²|/’ =“ŽAWyN=0kc{t>“oŚÜĆƳg&ęeLeHėÉē­yöUæ‡5 Ū=>į%o‘•ĖnZ™Fä8ō$’:>åłHõäŸzäF›“ČģĒvżą·; ĶdB=JšTš¦ å¦ēm§ĢŪ“č=kœ“7fĪėtn/µ†:zSrčjdšę½oįmŪ[݈‰vÉ?)9’^]Æ|<—SƒWń^‘ÆŁķŽO6XŸ;„ć?/¢Š{.§‹ĀŁŌ|‰Ŗ^E#慎‡ '”Ææ4Š?|{š¾Ė_Óe6w-@²İ9?Z‰Ņ¾Ćå{Ÿ |LÖ//µĮuå–`»K©ąŽÜ~¼ĪÖw¤)•¢ģū’Žj·0Y5ÄņmnNxWeš[Å:…õÖ·µ›:uÉ+<™,čXŒc?ƁZ=u>ĀŌmģši!ø¾F¶l čŽā¼kX¶Ņ–īcoL@Ą`É\ģŃHšĻFšį{öüĮ”äcÓ"„š@ŠF¼—x’^‚?¼7‘׌ÕS‘œ®{—ń.oėzn“Ū“ÉXĒ,NĒ#ļnzoˆ\w1#ŒŖ‚8ükĮ¼…ewŒĻŽUzn P•ŒŪKø˜KpU$Ī3ƒųVÜVņ9žą‘gŸ½Ō{PuĘFĻ„ģ/ iēy${y\æ^1Ś½ŽŚŚŅĖD·žÖé Č; J9Z r<ŹūU×4żuÄ֏,¢DgSó)냊ļõ-^TÓ-Õķ hÄ{°O9=Ͻ.Z˜6ā‰6ߋĆEPŲ9=:W§Ė/Gc£jŪ ŒjŪ `‚G@(.7=Ÿį߈ęIŰ3ņ%ŒūS¼Ińü[^źžńš·³D[Ė”Žž™Ø ā—*Ų®N‡Ć>(Ņ‚źwשlw“°źäEu¾׬“+\ŚÜ4npr >”Éå6oüe+°ŗ7Ģ}įĘ)4’XĻy æ– |:ēé™ZÕĶź^,¾rÅēłčtŁļŚŌȤO’„Ōņ•‹‹3qg9­YA<ŹæŚ%‰ļ[6~%>ŽŚK•”ą€ļV iž…wńŪM°MkžŅRŪf_Ž+­Šž-¦ˆXéšG“Ć.ĄĒ”ĻÖ¬3Ó<+ć«]Ļl,Ń.nX*4qįqč8Ęzęž Eƒivדń+t~w{ ŠL£bēĆĻų{ĘŚAדŻ1ōłcU™£”pA qļ“ҽRŌ.¼£Żźv3£)‚ É'°ØrčG3>_ÕÆ”×ćŸQ›O–0ņ2”~H#é[~>ŠtĆ{uóQø* Ą=sDƱ¼=būCŠbžĢń²Ė¶ˆm•Y€øĻį^ń:ēDń©±)„¤Ń'īŚŒdr¹ėI&tEw<»Mń=ę‹htŠ­“9]£œö®ĖJÖąÕ,äkM÷ł›ŌքL”i­hź·:\ jn“° Iœžx®ľ R.ō˟2Öu6xłyķų ĻTų £x¾ĻFžŁšO‰õƒÉf’ hgą”=MqŚõŻÖ»ā«ķXB)<ÉU£*CuŹ­T^ Ee:B÷Zu½Ś@PÉęmŪĒ„;Ā·š“ZõĖP‹« „ȬKyĮś ŌüOi6‹¤ ¾Ca3.ܔĘ×?ΟswįæųjĘöęęŌxŠÓ1ÜyhCL=’Īj@įuŽ—©ų×I³‚ņD…e¹_‘½˜Ӛū£Įž Ńģ1ų»Ŗé>"ŻÉcØ“ZcŹY"‰¾ė‚{<ŽŃüWįŪmSĀn×3Y™¦ö“i$ PĒ? ćæ×µo|'Õµ d»IŁ 2ĢĻ~};Œ{×MiąĶKĄWWvz†ž|·–cV”±6}¢ųCųįĖHĪ—¾±oŒcLg“ī8­k-FÓā¼š?-¼Ķč!–YT3Ä÷OcĻ„gĪO5Īg[š§…õ­“? źv‹mlqo 9uĒ@}{W€|bų<ēĀ:wŠVāIo“é·Ī»ö£'cØ£œi$ųžÜė)ŽÜ ¬}«÷¾‚¼šhāÓꌡY$AœõśÓŒūšDéĪłlēp(ČC•9"¾¶żœ~(ŲhŪ|'4ö脆H±–Ü}?Z³ksŪ³ź;›)ē­\ņų0»åńĄõXł‹ö•ų{c«čŃųĀŅ9g×-0ŒņČF?ÆŚŚhįĶŽ””$Ķ!±č? |Rt vżœŪ:·tÉööÆTńĪ—q¤ŽCā &Iķ¼AhŃŽŲźƒēŌ‡OįŠ‰tgTQż­Į;i‹_ŚēöOš7ŒĆÜxóE·]7WĢŻ.ōćÆūY÷5ö…•̐ŻGp«äŽĘłRĆ”¬*ĘĪĒGK3ļ?‡Ž&>%Šće Ś(FŪŃøėSĻ¢ŁŻ¶Æ ė6ßhš„/ks Š K šz‘ųÖ‚’q’ŗf,’<Æų)ßģiyū žÓŽ;ųW µõ§Ć}IŸZšœä1o+1 OR¬X׏zü“¾V“yķŚŻŃƒ}Ņ9>õX7Ms;µ¦žZĆ®›T1ē³Ą( øgśÖ¤ń³ž÷å^Ė-Ķ*.UĻ’^„Ż‘®FßaŚ‚ø“  #!S?7]Am­»+ķŽƒ.FhE;¤2D«{1ż*DW*Ä·8ō Ł1Ņ•A}ù~zŁŃÅ £†(:!.§„ü/ųĆćŁßā’ĆožøK}Ć×ŃÜHœāę Ć|gŽRE„‡ģ«ūCx[ö¦ų)ąŸ‹Ž¼¶ŗÓµ+HZT¶˜ ÜīGÖ¢¢ŗ7‹¹ōŁQ–kBwFµĀų‹O¹¾±C’īYA+ΚŌgę×ċ(t’O£jÖŸŁ–’¼–ŅćäI¹łzqŲžušķ[šs@ų«šæT³›LWń˜ ĪŲóö˜?1ģ篽fņWńĮś¼GŖxvāŚdŽ ‡Ks/£ćč+Ī%P“µT˜×]&rÕzŲ©„ŖģÅäd}ßlŌO?Cę&ÜķĘy®Ōq1¤2Ÿŗ6µ=¶"†V9§z”GFŅJ£g8Éģ=(’-ŒÅ~ēµ°ÜҊFR ĄsĶhĒpŹūŌm r„u&~ƒĮ/kX’dOŚßJŌõ‹›Čžų¦8“­m āņp’ķéĮ#=ńšžįžĀ;į­OQųq¦źŚų/Å(ڦŠĀLÅ ¬ *BäśuÉ5Ķ^:\}į¶ŸMm6łŚ]Nż™K€čĒü÷§Ž[]Zź&x‚5ŒÉ‡CٽkɬTwŌčóv·S^gyń&-[:Y£·²u#k¦všŲø¶|ÅāŸ„+B‰BEreģ>µź? žųė⮫q„ų;ڝՓN<ŻDGū }ÆjĪr²¹µ:gīWģO’²ƒZÕ$מ!j1ĶŖH˜ĢOÜĘAČP§½~×üų.~ų²(‡…¬n¬QLR|€©Ęk‚­[ģuĀŁ ©ĶbtøVfӛ•ŽvcŠv­½@g‰a»P@ķķ\®”r¶ĒV,bŅ—€Ń:UY&‰d %C‘™^i>|DQPGÆD»‘ʤø#ń¬–÷śuĮ…Ńnś*ć“ļ_*ź¾ K;v‡Q™m§ŽB¼žø¢06HóŸ~Šz„4¶øIaŗ½@TĘyŻųwƈ¼sń’ÄŽ1y—Nµlžä®^•×N™„ģŽK‹ÉŒ×3§9©„T!\Jæ­o%m3ī: ĢnPĆwAW”¶ŗ¼UKX^Y ĒJē”®9jzƅžj7¶¦[øcEÜ>S޾‹š×€įµTG…QF00jLYźVz (hĀķü1Šģ“˜ĮĄHńQփ3¹ŽIü°b\sŅ“V“‹XÓ¤K°©!_¼89 q•”|[ą5ø3Eęa”™źkĄz/ˆ•ŪKøX.¤I>F9+ī=h4¹ō–iØY¢+”ŽEė“^Łį»É µfžxOś äĪ7Å_go%Ŗ(ß×榚ĖÉdw=½č ĢÓ.Ænod†P—æs]y™Ś%\8ėÅLĪ»ŽFĢ›¶‘׎–ĪńžXēģ2­@¤Ž‚ćņ”|>p}«Mn%GYŒ‡ŸCA“:Xµ9ŽŒ÷®£A|ĪĶ:"MŽżč—ā;[)ÖX‘ĘG מg,éåÜ@88ćBĆKšŹāxŅq=»”ŹÖ•Ķ›JG÷}ė@Ģ BĻo†GæŪ¢A“m=1ځ `‚7)ę“”i%Qv gC¦łQcsēŽÕĒųŸVÖcžā VQ Qå=é§`¹įh.¤‘„½U3}ęeū¤ūW£Ņ•Œchš2 äTi2Eµ7`ōę'g%żŖÜWžXU¼:ā€7įŽŽį,ČźG…{a –u|„zŠ3ڶY0J“ŒśÖ¾ˆdłł@čJ,_f6Ī ’Œ§9øśģ÷1¬EĀńČé@·æŲNą[<*ķä’9 e‘X}ßC@\Į•›Ķ1°9ĮVÕŘ»¶Ö5ėŽ1lm¢„oQ»ÜÖŲA#GæŹ€5¬““¹‹&@™ė{ ģfc+¦sMIēg‘Xäiŗ„6ņĘóĘWpž4äĄ×ŠÆ®b¶S$h銳}u-ßĪßR9¹ptQÖ¹k©§cŒs@:}“SĖ];yEæ*ź5;H-ģŁāŠc­qG+ę „ŽŻ«*ęŃo’˜ŽEäG8¾X®įžĘFņCeĒjõŻ6Ż-ą@Ę{ÓcåEӑÆćm¬O­=/.`¹ņ^Mė“†lGdn·dnĻ_zÄÖtdzU0›j˱ŗ¼ˆ°VĪzƒ]eķ¼‘øƒŹ`p}č±Ķ ĢĖü暙Z"įNp{PK‘-µõ®›1d=r3\ÖµuĢŪ Qå“ō ŗb;\+ėZP^¤H<ņr½3@„Eu[)T)![ŌS£•($Z Ś!2³‡SœÖ†¾–Ķžp™ļށz„ń_Ī]o§ )%¶^¬ßŻaĘh.2±‹vd_2ŪÉs‚qÓš®ŚĀŽÖ{0“æ{¾h4ęE -"RV ŒŸŹŖ$»äm‘zēŠåŅź7Ō~§i;!"éƒÄÜz­\cre ’ķ­‰X@xóV6ż«k¬Jśš~ĢŒ{Ń4Œa’7_QXzµ¼‰ŠHJ—dW³Ōå†ot«2Æ;Ui.mŁ‹Ąųē§„Ii™ÓB’Č0Ÿ¼=꾯 ½ķ™bŅ#ōVRAüčŅ-µ->Ł¢¼vŗLšĒ®=ėrŚ?³{m2Œēе-źjJ£c ČĒjé4ÖöÕÕ„)&sĮĘ(&[H`ĀÕęiĀ÷'$ÕƳ\ykę~µVsD<æ/äĒ<Öh†RĒ‚E#V=I“ęœā²ī4泑ó†öÅFĘmؔ‰R0pp(·ŗņɏśÕĆqJÅö‡ĶŚŅG`GJžŒ$¼{9÷äV¦e»˜”"¼ mnł®zļMž9#¹†`Pķ”X ÅŗŻF<Éæ>”óf–Źsš{ÕĪ[SX`0;‡s÷}k!īŻœÄI|ž„ō eæŽĶ„²)Ūģ8©ģ|kįŪÉN˜n6^Æ!YqŸĘ­DµFłbd9_ܟֲķw”,’HFxÉéP ģ#¹øHw>ŚĢ’å Œ„æ t05=;ķ0žéDĻ~ÕÉ\ų>ī€2U‡CE£+M­é^%X¢T|zWˆźž=„]’!ÜėųVs]Mc#£±Ņtūč~Ėwr9npp8ļŠł«āæĀļģļµĻd«yn:/»Ķf‘¶ĢüŅųæį×·w¹óHŹ„šzŸzłŠö+YH™\łĖĮĮéC“‹Üč4m7ķq+ĘJ aø’õė±ŠÕ•J<×KŒe XTc„M+8-!+zy†^ ØĄ\Wa¤œŗa9?zø¤śTŃønŅ Y¤ņgå÷ę6™¤ß<’@­µ³ŒeO=éJż Jē;ā‰4ėūƿҭ„37ŽŪĄÉ=ģ+ž-“'œ¼H¬äŸSd8§eŒy%ļXś„jŚĢ»Ÿ©źcIbÅ3 ŒH b›m§Ėw,–’(äœuŖ‹°Ae tŽ5)ČėŠ »ā=>ś9ī-ąV™ tüė`8 B’Q’{KŪxatp±²œīwüsłVÜ0=¤0ŽŲ³Éœ¬¹éō”£m€µ„Ēk,Ośń“[,Ió!Ę{W<Ņé2*¬Ø”°q·Ŗ÷3Ė©]Œœ£ÅT"\QČhž/ЦŌgÓ„Ōį‡R¹n¤õķšf£/ŲTŚß©ŻQO#ė[r1øh`Ž\ é$ŽįWœŽ¦°¾ÄLØB <ūRqdlj’e”BŪY×=…c\DÖūŲ«³į””>‘¬½«†Š@³ŒWmŠ [Kˆbxp~uģ}ėb/Ü”ķ®÷.Įį'rńÅUŌ¬ź­ l<Ÿ—Šg..īćܰĢB¶G'“P™n”1UļŠĶJś2y‘ŌnyŠ`ȇ#~µ§/.#Y³“->Bˆ!'s¢–ÉäÖ>¦ŅZžm‹{ö©”le¼bš;@ˆ ūšEU’Ņkvmńl Ōć­fŁ“v1Śs§Ü ©å0ūĆųEmßźvŚ¬CĪiäUÓ”eq8Ųµ»‰ĖĒ;łG ķPŗĶ9&VW^œō·9™%Ž™u£ŪĪ|¢ćp1šķ%ŅāxQܝ™ĮÖsw6ŽĒÉ%äwo–±Bwg©®wSĶĆ+,žløä7„s(†ÜÜĘÄĪG=+Ņt˶X “RIdN‡­ śŌ5g¼X£"•—# "¶cž b(łĮģs6`ko›{IŠ{žÕĶGĒ"$J>īć&˜‹h°É0…öķCŽ+؊×D$S(øŪóēƒS+ōb+"R,ņŌÖ&¦ga%¼8é‘R¦D‘üŃéńĆ|K»Ņļ,n×O] Čń‘HĪCw¬‹Ž*’ &žĆNXŸR¶FƓŽ9Æm”Hāg/j—ZżŠßż¦5fS ÉĮó äļ_nüeŌ¤Ó†Ÿk{c ŌmįSģ-ęwē<Ÿ“aRWgĀś¶£u=äń˜– ZBpźs7ŽMUA7m6NW8 ķT¤g;†›š‡[淞m&K«—·łå(Błg°£ŠūGƞ ³×|c„k’Y٘a*7 2=˜­3OicŠü/w”ųCĆažŃŚ8˜2üŃ@kµŠõų// “ŪŲ՟™7$˜?Ā:ŠŖ•¼ÆZŚŪź·Z>·ŪadElaOÆéU›įŌõYµėZizĀdæņš3ČĄéõ ÕLłŸāĮxOÄŗ…¾©ukę3™a0>ķ°õäōĻķŸ|=cćĶ&’ĀrŻOŅm…\>#‘óZ&Sŗ¹õ'ƒ“«ÆĪś¹©ĻØŲå„Ę0*æ‰&{ĖŲd–O*ŁHŚvņ ń¦[؎ō­ķۈī—Ėlõ=Ŗ{ .ęāņLZ\4iĻ°ķ?CPēŲŽk–®ü,Ž!³š;Xåć+÷ ‘ėŌfŗÆxCMŃ5khę¼–MŖÄ©łqž<ĶčŌ>*š5Ō¾‡RÓõ›K„·`SĪŅQÖ¼R&æv$7iöˆˌķĶAQ‰ŹųĆĆÖMöMPµ¹bX3ōüšņkŸ „„Æ}i©Ā'Ü'R ōµ]4^‡M 5»Ģby€1ķī u*÷¶ęŻIiaÜU¶ž˜•©”£Šõ?ŚBŃĒ(‚Ió1 ƒŸzļ,<kāF—»#E.9$Pa%ŲĆÕåŌžÉ3\˜_FC¹Yr°õńtßŲzuüŪÜŽŪœ.3óмėĘw“ųÓÄź×vĖo~…‡¦?Żöā€r<ę9µ­B}6S<~Ļ ü)ąØ5ż/SņīTyE ¹YWļ\0xƆ<#/‹üC Z>ŠĀśż„ņ‘ĢxU]ŲÜGŅ®2īS‘ūū.|šĆHžÓijG®²,Æę {ģģėX?µ…&šükįö¶½Dc+[ĶņŲsŒō¬źU±Ōųēį_ķ3mį/ÜxOQÓgƒK¹CHc‚AČś×Ećo‹:ާŖL$·‚]"B[$ķŲßīŽÕ¢³Ō=–¶<ļĮ¾3ŠÆüQmįéµ+%[‰ˆŁŸ½Ļ?CĶvŗ÷…µ x‹P²]VÓRŅÉZĘAŚO'$UĘ6.ėvśÆƒ¾ÉäQĄŽŁ_ęl€:uĒņꍿµį]M¬?µoļm7ˆAo,ēūŌ‡})Icó˜Ļęw·ń’ėÆjųW{§izƒX§nhū<‘‚rOĆP±¶‚(@ÜÜNBØėĻ5åæ>]jž'‡Åž½ŗōlDČ>ElŲė@”õŌłwW»ŌUŠ-BtÕ„`’30=?νĀŚŽ”¢Ėky»:© œ©÷ĶØś?āļĽ+Ēōx?³"‡Å6ä»NXČĄ=Éā¾¹ńF££jÖ7Kqmåī 2ņ±>™ µO¹ėqx_ű˄x¢Ņ8ąÓ¤˜;ÉłøēÕõ׃õé7:'‹ÓU†śÄ>Écc¹ścšŲłļöšF„āOYųƒO+{¢\H’Hņa=IöĘq_aü#³Ó¼3įm:Ź;ˆ˜¼-“†S‚9’ ¾Bdģx%Ÿ€t{Ÿˆ7ŚœÓ*÷ķ[¼čŌ qčŲź9®‹ćōšF™”˜Łu/³ƒ¹•Nģ÷ļŚ“]Ļü*ų“oo%¶”4"Ö Ž\£ß=q_Uė¾Š~"iŌ­äUwY|äR ĒŠŌ8ź?fyĪ“ū<Łč°_kZn¶]eøĻ•v•ę_’3°¼ˆÉ@—Fė„Óčh~oj×ķp­qb†6 @ żßʼ‹Q€ŻČīąü™Ż•Ą5œ§béīu^ŠÖtk[é&ŠĖ3 ÉQ^įį?‡ŗ½MGNŌY`ņå‚C•vaōžµ”ńv:c Ÿ”? Æ“æZ+ūCoˆ­ö±‡ėTēŸĢWm¬é7ŚLĪeƒ†ĒLÓX”÷&®¦lZ|2ń‡¼'­j:N‹>”¢F wE0̧võ÷ĻjüµÕžų–’Ęŗß…“ū;›¹¢¼Cgn=±WķÖÄÓ¤śž;©č—ŚF”s„źāĻQ…¶¼l3“ƒÜ~ō‡ƒ5fńO…!“šįgŌ,ɍ€$Ožø­cR輍3ōž QūTIū#~Ӛ_†Æo.Ūįļ‹®~Ēøāy±ņ:g’3ļ_ŁN„H\Zö“Ę&‚^Ī„dsU'{3k£š/Ē«£ź×ŗ¬ź–²ćÉ,9ėžzףs¤ …ŚA®y.¤rŠšZŸŁ>Ėö­ż˜gń7…-a½ų§ą™ŪS“H˜ ę¶Įó"Ī@ r0+ųńF‰r..u %SlҘ„ŲŪ—† Ck- Nßißš³ü®a8žw4ÉånqTf14ØQ±<}kӎĒ·3$ ’1b¬ė1Ś–'̌…•IĄ¦Cv5b$‘OļBq޳]2‰Ūč̇¤„°0G9_z¾²Źc!€\Ć­©Y‘Ē"ƒ¹Õ‚ēīžõ£įvå6/n:Šo pŹ—^t$,lĆj± ļŠž†ąßoŪ~?‚õĻŁāˆ$—Ćž'-}į·™’v.@żäC?w<źE4ŗP?·x,Rņļōł 0ž"sjē5Žoš«äÉŠūó«G©”ņ_Ǿæ„8ŃĖwżŖĶ€ū’O­|/4Ļ©[^īŁRį ±Ō­\ ŲĘÖwćæŠ÷®W+2¬÷?Æų)’ģŹš»7Ä&Äi°¹Y¬ŚęPŸČpNs_‹Žām’gRįX£gŌu®Ŗ¹Hh:XÕ±’¤žīÖtöЇj•Ē~õßsŠTČŪä`0U~”|ŹĢ ōĢ„…ŹB…<œŽõ+H²ä)½(.źHčUŻ–me”ģ;PtSbźVĆQ°ø‚,%ĪĀmåĻ1IهøÆķGžńūNi浗ģĖ¢ü<ń]äĘˆm„.~yÕWéžyQŒśzΦĶq?e¼;ŖZėWqxŸH˜%ÜnlõĮå˜gļĢž'Ö»YõEu›2tū*XĖóį~r§ōżkĘÄho˜ś•ö„k%½ŌŪķŪp 8`;{Šžlą±³“kŗGş čöŚv­Dļ$źH6׋÷£Ąč šņź³Ŗ.ĒĄ_°÷Ćߊæ“L—‚õ{›½ ĀŚDĀŽēXņĪ蔟øø±ĮÅHaŸ†_ t=KĮWQ^^n_:źź<]Čć«yĘ}ź!OSIO”÷•½¤Z~—iesæ–•d+¹Ē·Ņ¶4Ū)n°'S$cußN™É9›RiY…keLwŖČ¶ę@' ꐟk¦1īs¹\Įń. ÖVOsjŃ÷Oš®&×Ę]x~ńŽm> ćīśfµK E\ł;Ę?ķcøŸOøŌvźß»¾Ā¾Eų³ūAŚčÖSŽxZ‚#jåg3Ź}6õü’ZŽ7Hü°ż ælū=E$Š|9mö+Ył_.B$݁÷Ÿ‚3é_™ž,ńgŠ5©e¾Ö ‰šBABt˜÷źk¦Ģ&tŌ­§•ęd8ŪŽqšåŽ.G';IēėtŽ:½Œė‰d„žźF Ó9ŖŹū§Ūscw^“Ī6^ŠŃ¦mŪg ®—Āžń‹u»ų_D»×u‰[Ė‚uÜ wÜG@*e+~Ī~É’šGß|F}/Xų±«Ķa¦I,wQX£ģ*s±ŪÓØ"æ„߁Ÿ²§Ć†Ž›C“Āŗ-–¢!1A-¬JxĘ[ūÜ÷Æ/UÉYtāw¾ų_sį=jimęI,·’ŒmśW¶¶š²:žøµČļs„"o±ya]¤ śb¶­ī\ŖLēA} or—1²øĆW)3”Ś[ļ@£=õˆķ£T‘Óõ®Yń.‘ЌΰČG94-v73Ą>&ü\Ņ|µ®®ķ³³Ģ|ēŲ×ę÷ÅĻ’ų£S”é ZĀ7Ż®ÜēææZč§L¶¬“>\ŗÕ.uyć{Ö{æt·;O®kvŚ(„%ßqĮī>õvĘ63āę&‰DKå0qüUk-ĖÜ“,ć<`Ee)u ‹ |>Ōu{„qÅł°AÅ}į?ZYˆ¢ņD’‚1ĒzĄuÓōI-!Mšy^ĄW]cCh ī„"dĶØ$ņF…j[\Ć-Ąæ„ YŪģ€L@+ž~”—1ZŻ‚±axīh”æŃķnÕįxciF@ls\ö™”cŽ¼É Į“Ąu  Ö¹i 7ųzJh£0£œśŠLŒłņge‘U“ąsX—Ś4·(Ҳ€ź8 Źģēʉ#.åŽaĒNµzŪO¼_ßÄ)Į4 I”·–ž{ŽßÖ³›Oņbel‡ūb€r,Ų‹IQā‘ĢWĄGLūÕx§–)ŠÜL¢ÜńA&õ¶”Ē• p88ļ]Ž–ŽwļŽŽō ėĆöŗ¤ !œ œõ¼īśĪK[‰aČŪü'ր9™nnģ.–C–,óķZsź+yŅ€2dT4õ8©@Øæ.ōv½ JˆŖīYVŗ¹ģUၿ±ö«‹ømlU@)ņö«V²ł2!c…Ļ9ļT—‹k!ß MĒØ¬č¦¶³|É?Øõ ͆c¾žÅlĆŅĀDŪOķL—e"E’{©4¶X^éHiźh“Ū¬±°,F[«ŒB‘»ł¹mE3¤;Q°ü*“®Ź…³Šē°dŽéČSžVóT†B ö  6·sĘŻvćÖÆ@Ļmķæ=h—Öõ'¶øTHä’"G>•oO¶ų8$uĪ:PF4±«ĘKėWāŌ-ÖŚH.£i ōé@Ģ‹oó4C#µXµŠŚ\,©ź8Å\»š 6 ŹĮ½s¶ŚÄļxˆĪ‹qhŖ–ĪtˆĪŹzb±ą2(łÕŗūŠKgؤLYūŽÕbņg¹Vwƒė@‘G M$ŽŖU¹ZÖīŌµ°%Ąąśē—|nۘīėÖÆéņH÷3»ń —jžŹāÄŖŽ=k›¹“r¤ćfƒ4SĀ #q’8ȧ4bløä: ę°Af7ó­˜+t+0Į w[Ēvšī—\ž*¼÷‰u„)ųé@łJ2Ŗ.ŃĒ֎f‹ĶŒėփ7 ¼ó„TšRć­j–™„a›čh¦d[j“Yܬ²#²†ł½…tš†©źA=‰Q#pF0 ä0ī®/ 0ŲßN¢¤‰f™ Ū“ēó¦D”bā[2-Њ§&„ykp-ŽŚP¼mp8¤$M9š{øÉ1Ągpļ\½ÄjĒ)aüź„G™Ü¦¦Ó̰‰¼†%jmKÕ,ZSq3ĻIĆu‰²æS¹†ćO’Ūh]“¹ėRŪ]™6FČ3Hf쩉KF‹ŲńÖ®Z½š[ŗ¤¾r8åc4AŽLI†>ƒ­MŸjŽpĮ杹t0nnݧ;†2jHįGĆ|Ļz6£µi"$Y}j€"’«p9ĻzE£snßģE`ŻjrČąJ>”kL»·Yķ,ģ'µM©éVšJg·š)al2€sŠhe9. &e`¤}Ś'gn"“ ŽGc[”Ė'ŽŽŽµ·›8xŌ”  W m”™Šmė‘ֳ縁¢Az†@PõŒ·”}StĄƒ¹sÜUŁoŌD&V_7銑™7÷V²Z³5ā£¼¤×–’f,Ś”ŗK’\7 ݦnzŻ©ŌÖ8敞Xųžk¤³vR"pZ†ӛŪaÅ)Ū××&¤š{¹äR­–Ņ1QecĘG 8<õ«ŅĒfÖą Žüa;ų²ĶŅźCy<Œć­qicö˜ 󃚉²ąswš|ŠŽĄ€A®+Ä|:ž›yg4ŅDå t516NĒē׎<+Ī«{eq0ņć“ »:ƒ_?ųĆąåŒ–3iP”tĖ9ē֛ŸcH˹óŖK¢\6Ÿ4{3·õŃi÷į§o,>Ō8ϽrT‘gim,†5–0›śōūÕ_R»+<j€Ś»rWWĶć±~Ī ­ŗBąœęœtł£y¤Ń[~yܧ½fŠŌµX­'T¶e‹x8ÉopjžŸ©Č.¢–uN¬ģZŽ2ģg7Šū7įŸōIŽßQInbå “šśI Ōā…¤Ē6Ą¤ōŻ]1}L%±Ąź–si÷FU܊>cƒĆ ęu Ao•łØŲ9ÜČę.'Œ€·…·±8v©eŹH&²œ¤xĮ:„Ļų”„ZkzmĖ4_eŌQĉ,ghćØ#ėįż^śęŹźāÖśŻ¶£ą8$zÖ] “9FćKiÜéóĶ:ń¼ŗmŚqœc4±N.m¶cņՏ!Fī}OSXEٚ.Ä:T·Z©ĀĶ#Eę1Ś¾×š_ŠmõK(ü‘ūޤČ­S%£éoj¦–o0°“Ķ{ģöÓ[†‘>lmČ”Ģ$µ2¤¼>Ky9'åõ®óD»”¤+8ŗ~5²‘Ģε˜d1€čxéPłk3°9Ŗ1ŠĖ»Ņa•ć3!Ļ8čk.öŹ6›Ģfč½8 q—B›hĶå‰Y\ńėY’I$3„¹_1Ī3Åe(„„ŠÓks0#ŲĶÕsü«GžūÅh¶¦Óœīź>””ne#OJÖ4ė9E¼ÅZnüõÆk:uė°‚5·F?uIĒŅŗT ł Ø$HĒĪK·ņ­+)īh^"dPÜäö„(Ų»5±ōWƒ/ ŗHmŚ \rOJõ?&kpˆKl?­\bŒÆ©~4H‚¬‘–fē§JH¢H_t_/9ÅXs+f7Ҳ.a·dsq²Žäv ØīpZń¶µÄśmŅ S’­^y„oØj>LņFƼ+cü(5FΧ``…ę¶‹zāQڹG¼Ž5Ć®SäQbyŗtkķ6ęį­ē"'ä®į€ÕŸāĖEø &“rŠŹæ3éŸJƕ–ŽON{‹raŗWrNKt®źŽļN[hŚ+˜·°Ę3ŹūSQcHĒ—X·²XĀgU=Žy¬­kĘÉ4&³YöĄ­£‚9}2OgŽ4VĪāņ®šūVY@"Ü#Ó'Ščv•ą~SŒ’…a8ō)cØjś|w «øā·ū¬ĒŽżŖöŸmūݶ—QŻBNwÆ„b¢Ć™Lv׊zƒū¾’…eĻ„Ɲū2Łät¬Vš’tšT0.ēv|ōö…\¼·ćb—œsņō榔¶v99¬Ó$–n½k}C0“gœ„īÜ1X›ĘLÖŽ5-™3œpi±E<³2īV>ōÆr)œjģŲŠ¾&›§[Ķį¹c°½¶™g„J›•±Ī+[ā/Ęx¦ßN‹ÅGM: 0JŽ€ńU`öhń{VŅļŃÖŚ{Ō\åXõ÷ĻÖ¼śóYūI oņ\,‡qė»éJÄJ6=/įēŽ®4PF@øŽ€I;s“_K&¹¤ė*’M•Ģ‹Ÿ%ŸŽ€Ó±—³g;)ų‰ö ­CG»œ“ˆūˆŻĄĻ5Ēx[Ä;uFeģŲ‘¹ĪQsķķAQ…vÓ,ōżfāāŹćcLTČcl,žäW¹ųOƒé³j242É$A•WØ\gØüčVZžūF_k/©Ū]Ų\]3Ɩ¢˜m qĻÖ§żšµ “ĻźŚ’]%Ųdn±ą³ć€Oé@ł}Óļ_iPüSŠ­āX.ō&1PG„Ųü’ńɚĻS¹‡Ģ.Œ7.éü«•³šV¹o ¾#H.eҜYT¶H÷©r:#©ėŚT3ź^‚ćL·€Üm]ø#Õ4žń…­»ź¬­üĄ<—|Hƒ¾£4r²ZOØ]Ś_”–+„•Oļ-Įż;×½I¤Zk^žÖī;$±d6rPūQtrĢį¾ėZĻĆė]vĀīyÖŽC"EęĘÄsĮśūŃā={XÕŠ_@Ķ{l?ŽĆ{ÓŠžcu_*Ż' eŠ9a]lM>­„•Ū#!Ļčj&6cčž#¼‚ņ{ ›;›hQ¶ļlĒ掔ų‘£YÅ4wS\$ŠĶK±†O5“ņ4¾¶;Ƃ7ś6sč:ݜZĢ’PeQ˜ĆtUōĘ:ūS]ĖŹÆŅ„†gŽ|Lų‡”^Ų̶— j2ø u5śą/Šz>©ą°ó‹½AGCĖHO©5|¬‡M'üKÖt?x¦uš-ķę<”9Vä~µóŽ£ąUš¦±s{¤+ż‰˜¼ ĄaS®@ō4­mfsšž£©]f/-†_sŖ­tŠć“ ØĖib¤œŽųؓv‡Š’³ēĀüX×5i–śŚYao+d•9ąWæü]šŽą\O‰cg©Y[łe @`£©’hśŅi«"dķ”ńD^2Óõ(,µ;}6uœšøóÓӚƒā&‘kw­ų{^šĶŌ¶ŗ{J[f™:g$vĻA[ØŁ‰LśSMO A-¾¦Zåy‘¹Ļ=ń^E«^ŁųZś}BČĒ=”9Š‚wzńJKSU.ĘO޵Ę^ŽŅŚå`–Oō––EÉlø;Ž•óŻ“ZŚ+[ŻLŹ€cv3D{č<;©Ų„żWĘ]äīĪ03žźVŗ†aŖŪ•x/mwnN7Z‰ß”čZn«eyØ5­±‚Ū;»Ļ`}x®²KƦiR]¬ŃDČqÉå›Óh2g‹ßü@Õn^x5‘¦\DĢŲ@œōēæ½sv~“ŗvD6ö÷ 0Ŗ\禑=+į¤śCE¦kāK™@92_\Wń²ķto%ž˜Ł‡y),9d+Ž™öž”/Ž]jö±Ū^&čI]ąŽOZæ{ąŌš¦«6§b>٧ĢDžB¦OøĒ© N]Ęj66wR½¼?e”®šd\`ē9"¹»=bE")ē @Į$`ķJē<åŲŪžÖ{QšŅF™öyŠ€g8Ļ9Æ#šŽž|UpoV ńFĶž“cfÓŌgéK˜"ĪļQšī©«[Ćk§LÆvŪ”ČałŌ?|”j~6ŸLńµ«i÷±DJ‹…;&P~ņĘsż*®t\ū'Mš/„“­+[a}ų’Gdćk{~+ē;KU_žŽź¦Oó‚8Į9Įü*Éw*jś%›j³M`«óėaķÖ¼³Å“j ‰EkŌpČ_OĀ…>ęwg”x?ĄÓųÓįńń Å¼×öO” ›x!}kÅg|śuÜf6G)“Æ#Ņ©ŠśĆ஑ Lķ”j ķö½ ą’ƒ/5OjšŒ®$–0ŁV ~f²’}JÕńĆD¶æŌ"Ņ‚O§«„ł€ÜGrqü«Ņ.Ón4ūyŚ9BmÜzZņĻŽ2x_ÄņŚÜXĶ$·š|ܦ:`ŽõĶ1XüŠų·„[ų ęŪÄ6ŗ w6ģĒ͚4Ƀ>æ—ņÆ ×¼e'‰ģRóF†F…WfÄl²œs“UÓ9 Y S[·{ ±kHĮvó.żUõĶĶåµ²ĆxŪ€Y‡#Ņ]Ī»OŽ äx>ҼŒīšąĒ†“ßų°XėN÷vóĶ÷ćmŹ ē†=(!ϱčZ¤^ŃĻKm_KeŚ¢^°œuČĒOņ*σ†ā‚'Ņę‰Fw)Lē}zRF¹•ńŽŌčZĶ“V“IØiī„]Po(yü«Ź¼;c*Ų|÷’ " Ļ¼ō4Š”tŌĄ³Ö¼}ą?G%½Żī—¦JĮcž<˜wvsłbæF“?č/šls\\@<@Ž•‰Įė‘ėļL$¬ŽWÄæü¬7†¼emØKk«Ū;}¢-ąy‡Õ½½«®”|.Ö5]#J–[m?Q•q:acWĒU¢Ę~ќ'ÅŁīņĻZ²ƒKŌSPš“Ļę~čW>¤uäōÆųū%¦™bßaÕN§•œ"s$] \öēŽ‹ʱ5‡ÅżoĆ~ŸįŻž„³¬h‘C*FK žK;zŌŽńę­£Åy­uöhˆv0Œ1ŌPUŽĻFń焼_„\ ]j¹1¼cqŌ7į^%Åé|/ćĶńE I2ŁĶkĮ ĢŲ§ÆS[u)ś?ā馎‹ēŁĢ–ŗ°U–ŚtĢgæėćÆĖćX-5-/ÄØJE.?Ö č}O8ć’?į9×¼7›)#‰RŽYq?Q’ׯŗ>~×z?ö&•ąŻlČņ*·Ÿ¼aåć†ō¢É—n§×žńV‘Ŗį¢»B“)d¼ńˆWzWˆōGDtHīŌ?—ņd»tĮü«Ć”6?;¼7šsĮēzūWŽź:%Ź]]Ū“*b ·yø+DÖ0Ō££ZIćéūc,øÆ¢¼¢A§A łņDg œļöÉÆ&¼šŠōØGSÖ¾xž×Į_ō=kU½-”\\Ćo?m‰ž¹ģ?ĘæR>4Zų÷BŃ|Aą=JĪį&@gA.óרž™„JīÖčΊŠĒŽx3ā7‹ž\<žÕZ i†&…šŃŹŖž=:ł_ć`Ö-ugų 8‡]G’YÖ(ČIĻ{×§ģVē3š>/ų‘­^ų›T&¾µe»™;$xŻĒSŠē¼āÖš—‹-®­Ż#†O’\ōw$‘ZÓ§m¤{'Š4é ¼‡VÓŻ’ś'[ČŚ&ūƌ§×„bæšJ’ŚēKż©f 7I×n%OxeVĘé÷ŹUF7|`~•Ó£C?Bā²H.’bǃ¹[”ń_\xOÄŚ†£įEY$i–3³”®y; <ö‰šÕōŽ“ĒŽŗŗ‹UÓC‹ø—°Ęw_jž mĻƒŚ—Ćæ¾4²æŃ|VQ­iżŚČł.«é×§jĪ559ē‡ę¦„c$DM!Wn¤ÕA ;(ĒŹwSgE©N[9ČQ…lņMEo’ĢøŻźßJŠåq±¬’±‘I¶7 u¬ęwrŃ PƒŽ™Ą ‘bP”F\f®yˆø nqÜPžjÆQóv4ČŁ˜“ĢK!= Å—ģ™ƒ–Ś:ńķ]›āŸųÄ~ų‘ą‰ę³ń¾…wż„±œŹĄ•ĻøŠgm6¤ĻüCöČšķŸū0ų'⿆5 ]C\ŽÕ,õŪdl=½Ņ(¬ˆ9üƲo¦YnäB»rׇC¦ĒÆh“źV÷ńœ\ .™īE~züYŃģ“=n巆Ś+Įå_';;TÆŸµy҉¤%ŠłćoĀ‹Š^ń„oģmeŌ ·y­ Ē—‘0IAõĪ:ž?~9|.ŗų7ńVš­ÅµĢži6Ž`Ę'+ŸPx­iīL™äf&`łź«I¹OŹ č +¾™ĮSr)‘L,ŹÜņqŅ”gHPŸ™ŲóŒf¶9„+Š›NEھ)‹"‰[äpÅ—Óc°Ūó0<{‘—Ļ\v éƒŌ¹  Ā×Õ?±ķKāŸŲÓöšoĘ Ph4 ‹eÆŲ+6ŪūBĄaŠ2šAõYu;i³ūĮšÄæ é~%š_ŋ-N5ųSćŌ…f¼S¾ K‡@P·P»³ĒN@«ėNĘxf{ Lr:ńŗ•ŌŒ‚=ˆę¼\Lm”לÕć[«o5B™W‡ÕņĒĒ/ņž$ų[}og}mØDͧ¼Ų͵Čō,xü~µāŌÜŲüIżŽ¾4iŸ°§ĒÆh¼7w’ ĆT¾K=r«`Ϥ^'Ź“m=cn’ķ_ÓĖ.…ÆŁi¾+š\¶7~Õ [Ė ›P<©"q‘Œp:ō®ģ=;ĘäĻc¢Ņ“KKkTšSÕĮėžĶI5„r|\ö®ČĘĒ·“$Hš0Rzs^o¬ŽŚ+Éķ³+sĄŖ$łćāWŽ„ѓً\Į$$dżß­|A揦’FŅu-.Öȝ’»ŸÜŸÆ©­į†ŃŹÆŠ’¶™¦ė †ä†’Wwa5ŚømŒ½6ÆjüĻųńƾ7Öu]NMfņ¹bdg$łĒÜŸ…uB±SČ®šų[GŃK‹…ĄŽ{‘Ž>¤.#"@© å€[%Š$ś¦µ&•‰Ŗ[ĀŃ\:,s =Hć8ük‹»¾Y7mØ>iœ¦jĄó¹F[ƵoéZ&„Øźv:„\ėšģĢvŠFY™IöĪ(1Q»Ōż(żŸ?ą™ß~0]CÅZ”į ³ ‰d 9ĻfōÆé#öc’‚uü'ų‡u?ģK Ā›®Ļ9č[µp׫Šč…3ōf=+K¶$iV‘XE€(0£éWį†č0pÅQk‚R¹Ņ£c¦°“+7_„mĶ 2‰P3’Ō¤xŲy’#޽jµŻŪ}fŽuŽ£<‡1Ųē—Åk7›:.޹nõĢėß4øą`fÜķĄ ÷؊¹¤aÜń/üCžĢ°„׊Ēm‚T3Œ¶=+āoˆ’“}üāDŃU¤w(‘OFµŁJŸų§ĒZ׉/}BöīåČĮ,Üčs=įXŲ»/O„zŒ„¹Æ˜ B¤†_į÷«Ź¤FQ›ŒōØ©;hC: +Ā—z RQü¢3¹kŻ|#šÖĘ3o5Ä{§ī»q“ļ\³˜@i ł ķ]n›¢[ŁĢ³Ćdž€Ö~Š »ŪĖku_2dN{šŖšµ¹ŲQN{i©4jéņy÷%LÉļŃEv#KŽY|ä‘G9F,ŅŪoŠĄHCŪśÕKalåk€äń“T£s'tLבŻÅ4ʦōļ] å±{V™Wå#Ņ“]œ¼h"|©Ÿ&ŲÜ8P9Ķ"[#ŸĻ B®*;ˉ‘1cž«ė@Œ»kčƏ5`qбöēI2yDņ ’;U–+¤unģø¦ź+fč²Å“+uĮąPŸß]EipͰł}rjåu-f+—0+4HĀŌĘ+s©Ń£[kuC3JäĻZģtŻqlÉA,y'ŠD·= -U®-·Dū£W1;©’xÅ@<{ŠI—©ŁłĄØ^Żs\„«u„NÉęƒ\ć=(—Ō¼D¶¬ŖĒéļK‹ hŠm–7SĪZ Q6SY‚āŻYfd8XŌ ¦]É4E&‰†pO_„8čuv°n‰b`Šö®ćEŠ)-Ś Ēz Ž;Äėz^„¶F,܅*r{ƒż+©“žīęŹ1,l®E1ēy [iĄģEY’ę+–BķŚ¦HFŠX#D%Ü zՙ Ź pŽzŽAšZe”«ę;\ćÕßų~8äŽHīĘz•¢V_Z¶ER- €q\“»›‚2G„03̟¼!xz„}ęE†`qž“5šVFaĻåŠō­YŽ+o²\Ʋ‚˜ś“ńD$–Ł0Ąä(ļYZF„o¬o‚e0L äŌŅŲŅī(Ł3Чs¤łd“Ń~8 c[“Ō”Žōõ/?0ĘqY~|ÓĄ‚ą”|aø  lʇh‘ŽäŒ“O!†|n €qŠIckrx'Öµ RČłų  +˜7Nhö&}*ŚL¶$Īń˽ ÉļŠ ¤õ2.t÷Ī1·9ćŅ©NĮ$øķA¤]Ģ[™~ھDå¹ī g‹O#jüƆ g”iwŅKl–Ņ?œļR^éPī3Ɯ£=hŸŽd‚}Ŗ§'ƒé[ķØDš…d(zq@³ čĘ&ēŌ[ŗ¤D”#śŠ¤PGwfXüĮŲŽ¢±Æ-¤ImÕ¢ppFhūˆŚķŻŅī$> UėK˜'„E8Ržā˜“LäÆķŒS”‹!sņZ¹bžZ›*})+t:}5we@ ŽæJn£kdHZ 1ZóŹ›‰Ņ¬żŽ «i$ÄN ŒŒ4ł]Y…%SŁėRC©IhķĄIb<(4±bé4ÉcūU¼ŠŒCT­5˜ŚCŹ‘ŗūõ £JīņĀāCGp§–SĆ~ Ļ ŖńœńšjŻjŹń‰°ĻÓqŠYĢ’F”P)ļŽ”čķnÖpīæ¹'z½y*4&) VĒćšiŲĪg/u<ń({y c·„dŹ—š„{ü¶fĘŃZóv Ɋ8`wó[sĮć’jzsøÜĀI7słTr³H6HšZ6%Œ p9Į„ŽMøŲ?*›mŚI-Ģ,’G»½ź¤E)D8ē¤e&uŚ$Jә.DćV¾½d‰ūyøŻŠ<åmåž|yE½}Ŗõ²ä‘YŌgÆj:Žņxfą–Lć“5 x/‘e†`&åOČdE¹T£(ÅrŚĶ“"9ČÉ"ņ=č".Ģät­X=į²šŁŹćļŽqķ]՝ŠE—ƒĪ·bāųv §"äš{J”$ājµ“ŪDŃģ ½€ē¤%Ё¶FŪĪ_4¹äbµÆŚĀÕkY‘ œŃ)É^źš}ź…c‘óĆk‹Ō-R™Į§<ā³*ÓJūLŒb™zän5Vų5š”Ąē A„3Īu{ ĖqB8>µĒxbīņMIķŃĻßäńA”õM„‰Œ"TąŌR™Ė@YWµm[&«ǟž,rOz³=̐#ūGzš3¢½‘Łˆ!É= Q]J_6h„€Bw»=hĶVŅ;Ū7&4.9Ī9Æ Ō­„†w¬rC?„)- ŒŗÕå“Č’:¶lW5«iacY²vķYršŸ9ųū¶÷Ksv°™ŚPrE|į1—Nŗš 1䱏CJĄ|qńĆk©®©g[äī;OĢ=«Ėōi‡š F lrAžuĻU2ŌBÓnGšU4ē¶+Óō‰|+«"é:µÄVwd¦B?Zįš}ØĢ­y¢%¤K-”2[n(t$śÅr—žqfX‰;[ė4ŸRŹM{$Q“RŻļŚŖo¶•Y¦Ó"·†Ęn,ķ~źZ6‰­Į«<čŪPØ$õÆŠ½>ūKÕōkk½(Å3” °Pęŗ!°½›0õ6šRQņW§=«œ¼µX-žExƁ»ė]G<£cČumYšé ‘åN@ p>µ-“ī#lŹÉN ŒūœŽµOńļR§ƒ‘_0üBšl„ēŗ³Xår9Āž5”Ö¦Šzžq„ÄDšŽB‚¬Ą¬ł~Éq>m¬¹Ļ#ø®C¢,ę¤ÕœŹŃ±ó€O­{?Ā_O¤ßż†ńšXg˜BēhĒzø=G)t>č²¾[i-Æ-f)•ĪŃĶ{‡õ©%Œņdń×&µ9dvÖ·[y²eH÷®ÆIÕ ņ© YŪ½,¶=VĘQsĮļš.lš6ŠR_nī ’:Ž;īg†.]•XsÉÆ0Öu9$”4BMĄįpzSżŽ¹<"—ć ź fĖp'øČx6ŻŁėļYJ@kˆī÷GŗS'mćƒ]®oy¢‹–v|mÜĆÆFV¦$%ƒ_“ņ‚—›H:c=+SUÓmķķ¾Ōm2Ą Ž’JŁHg’IāIōū÷ܞ| ü)ī+½“ÕUćKØ·F½v÷6T‘ķ>Õ&žö.b8#“_Sۭ̱[„ä{tlVŃV1œz’˱€Ėc„fyČĪ%9éŽi™š2A/–Ž +Ԛēu­e,ķd܅‘†=h5ŒO¹Ō–āWĀ‘“­sÓŚ~ōͰ«ē9Só ֆ÷™użž‚Ö첨ł·ĮGóŲFń‰Hķ@”;•®–;L2Ūłmī*”¹Ā—fmżG’^‚ģ@׋#˜>H$Ÿjån„ņ®Ā~läsAŠ>āyv(ņd}Ē–īÓ?³Vé2—ĻCÜU'c9–"²{(ĀŹ¤(ąÅGę<ƒņdźE#2ĶÕż³0©Ēņ«z|ö¼³K*·B½©vFžą‘ŗžU”‰nāF¶œ‰ #<h¹¢ŸCĶbbn e^k0.čŽ2s¹ ÅK»¬é/ӎ‚™2‡Foiś¬²•m£ĶL™ēéW„7W2,±1 [žŁ­c#žÄę@Æ4ĶČܧµU‚µø $å5iŲØÄŚŽžWģsHī»·(žļT„±ŪĖ0™’Däš¹HŁ.…Ļģ÷¹g,č@ū§ĻĶuoī‚B½qķõ®y¾†°‰ų¢ų×TŸFvƒA YrÜ:śkĪą ÓtÆxÅįu{;Ų,c@0ģ0ĻžĒ­}a¢xDŅŅßRÓ­–ŁČß&NK8õ?•YMicÆŌüyiabšAt–ŗ§—’€žÆ(mųźĆZšm߇uiÅĪšŒłc®6R5£h½_Ć2}7Z¹šŅĻöKø%ڤ®Ņłī½ėėÆ éŗĒˆtM^4,²øaœzśTµaÉé©äš§ƒWNÖńd]±ČA²Ļå^”µ„¼–ķ¤ŅŗøšÖĒY©x+]՜fæT/”°ų‰¤^X]N·{ģóƒķņlĪ>¹5u„x•:gå׍<9?ƒ5MOKk_²Z+‰ˆ “‘jóˆ†r¹‡6§ė7ĆAŽį%YxßĪŠG$b¾}ń§‚µļ źųÜ%ʏę“eĘ~⟼ó¬ķÜĘĢ÷iŽéHėx‹Ē€3Ė9z]DšĘėYą³¶²”.ĄśóJåĘ㓿 ivvö—z\īöń’s0ĻJܓY’[óēi°7ꕳ”c±ėŠ.mĒźšž²³“7—»ļņh^;ūSßxkCYē^e“$y‡×>ø¤ä¢léŗ ż¦s­jÖ7pH6sŖĒ¶:į|*Ś'Å[\šęŸ­iŗF¹I]qö‰ųWֈŹū¦qń/‰~üBŌ<ćŲ͵³HcŽ0 ‘uüė·ų¤ĖŒ.V0­Ź+Ū¹åė߯ó®”ĔԛE»ń?…ķŽā_“@ёóūĖĒZś;ąēÅ«_Å8žéD ”>C”ŻŗČsæ×L𒋦7:}®…tóĆaUŪ±õ8?˜Æ ń*iz.±ęEuŒ6ÕøCŹzJ‰G@q!¹ÓēŌch­${ˆ_ī‚:T¢_ŹŽĪč²(żŅ§Žō«#Zp?AžüOšž»įqakzözٶĮ†GQ¶õ’ėWŒh—> oėsŽÜC{o!0==zÖ ź>T“5ž"XŁĻįMGK¾h“—jä©Ēø÷5ó߄žčjöZt‘Ą6±CÄŽäw§e(Łe”xÄZċ[Ÿ ėVqGvv]Ā»£”ģ}}ń3įż÷‡“ż7W²ž;ķXw“ŖČżŌŠŁK±™įśī¦ģ@ūdf߂0zVĘ„¬éڬPĆ{mŅĘąœ½SųV‘•ÅmNāźęŃ­ŚŽ?:E˜*ņ1ƒ×ņÆŃükØźš”6F-'Q†b„“€HĄ«h8§ŽŌÆ „&[‰ś’ąoĖŖiV~¼)oq jb.~b1Œgӊč5_ _xŠĢŪK ^Zä˜ŪnyļƒłRd7©ņ> ŁC­¶—4kjĪ»”ŽB$sóW)šŸö{¾“ń™ʔ÷Š XIø²ŒœžßžŖ›‚—F}šēIÓmüY‡ā”ŁZ;‘撄ū~5ŽxÆį¼śŗŽ ‘f‰‡ļ`¶CķC–—.&~»V:f¤ŗu„×ÓĘ#y£;;Œ{ńłWęŽōWIńN„­„›+fv’Ś@I׿>¾ÕĶ4iOVxµĆFŗ¬“C"Į‚3šöM#Q{Ø-dUMč01Ų⼜E;£Ó ŗœŸŠÆÆRKh¦’ē`}į‚äļ_Gü8ųĻwkk„é£Ć= m’'Œbŗ²č'K®®“>©ˆ—Hef#r†Įō"ÆI¦Ųkv£g|UķŹåOŻ÷÷éŅ»ŚčyrNēꏏ"Ō¼/¬ź¾ :Ų”V !r˜Ææxžõ­æs=qHŚ2i\ś»ĮW'ÅŽ Ōķx­u;–DÜēRqłŒ×ҟšNڟPż‘æjĶ’Qæi< ÆĻ¬y¬8wĘņ½2 Ŗ†öfžÓ”żĒjŗž—yo§źŚ Ģ:-ō+qi*8e Œ1Ę?Ź·< ćMKF¹:l¬$³Ąž?*å’čZ™ōvƒy¦]Ū^éZ¼ y£ŽÄŠ\DŻæš’ų)?ģe©ųĻNń„†ķ„¾(ŃV[ż&0?y4 ’QCĒjēĻäæÅVŠņLņ[µ•Älcøˆ-ƒ‚9¼ßČH™Ą “¾µ×NG%RRR…?—8ŖhėxöīĆzõ®Č»œ¬ ȱę%* żj3l«˜?½oNŌĢFƌē-޾‚’6X\pĢĢzęŲos"üŪXdcƵK†%Ö1‚xJtݳhSß8ÅhŚŹ£›‘ÜÓ±ŁMŸ°ßšDŸŪŸžö„±ųUā ‹{O„><ž;w91Ēc©żÕbIĄWææĘŠ×W³‚žĮÖh˜ "qĄ‘HĻgQu:£.Ę-ā3 ™K$ČpŽõó_ĘļiĪ›& c”3ŁąNq^tŠ#į=y.¬ˆ®©bę"ĶÖXČź=æĒŚææą„ß³·ˆ4;ÆčŪÜĖ>Łbdᔓ«#6:Žj"Ź”Oē†KbĪé,‘›„,Œ śJĶ•Jk—Ļz×}9ubU’ ±!uك‚})©ĘÜ ųć$u®ƒŽQ°öF<…wzg„H»6Ø A#ҁE ‰6;ǧJŗ¤Č¦6`Ž}h7DšÉ°‘éÓéWįh7†a DாE]7Šž—æą‡¶—ć-[ż†~6^ÉØiŽŒŽŗŒŠ€ģVoŗŹÜź­O~Ōµ(t¹¼%ÆÜ¼ž!Ņ $c–¹NļĒõÆ; kÜė„Žę(ķo {Ĉ”q‰1×>õåZĪ•7Ź,¶Œs{WĪŌÜŽ,ü–’‚¦žĪ70šŅ|ošŸo5üP ?鮤‹„å™OLŠķ?ą‰ß“©®ü9ń’ģ½ńVµ ²ßčMq–afł;CĄńĒ÷v`ēm ?n‚Ē…¾nų=k*ēY‰-¤&ą~_ZļZģsJ7<ƒZńƒ½E2—c©¶Ō?»ea„E©j6’ĀH@=6ņh%;ŌwvåĖ*ķü:TŃÜĮ+• FF„öÓHƒÉ …xNJ`øŅY§tį°x ³ŽƒV}]JK®ÓĮÅs尃zR<œō¢ĘŠŲłö’ƚö£ifņ—w–Fz5yŸŽü;%µ«źqFe·Ż‡ĄéšĶŝ§©ņļ‹ō/ķ‹I-Œ(ūA#wÆŅ¾4ÖtŪÆjs*)>ݤ`„sŹ%ū3^ĪGĒ,iå±ĄeĻŽ·ĶĘ×‹Ļˆ,Ć6Žø5Ķ4Z¦v¶ŚĀĖŲYv#夒J¼Āync’cŒŗš¾«jbœ$Į×qĘįŪėVāŃŅęÕ‘;žNxŖŽĄQKk)¤ó­‘”p?­} šsĒśvœßŁWz’ōV-ĄĶvSˆHŽ™%)5µā\DüąuükŸÕ¬ŅāŚó Nįž1]‡5CĪēÓfbčXõéÅ0ĒNĮ£ßøco÷jŌ {Q‚%ŽY#b ē ķ^w©Ēõ¼ö mpĎ~µŒé›ĒcäųWU“Ö5|¦‹NĘŲՈłæŚžuę:¤SŁ\ŪĆf©&\w·Eļzäœ,t”.tå›2*ģ“ō¦ŚŚ4Å9¹’ŽxŪ*Q±ŸĀ³‹±\¬ū7įnj#»Ņm,§œ}µqø±ūÕō‡†õČ ŁŒ„wf·2•3Ż4[›ką§cK;’w¶–¶ÖH|¶ Ą8ƒ’Hģ’²Ü@®ČŃļ¹é_XXų?BøŠķ£š'h,AżUqeEŲłļÄŗ¾{p¶ņeø9Ą®r’Ä(šrZEo¬22ėœ}+ Ņ)'®éWSŗOF•įśĪ£kgØ5ä5Ććl„Æ*7sŒVN ŹMž‡ńĆžńēĀkK½)¤½Õm›ż•ņ ~įؚųśĒĄwÖ”¦…¤µæPP”ĪĘ}śUÅ[AŖÉģ|«ėŗ”ź–Ļ6­hLčīq¹”z÷śWŅ~.ėv~ ŸĆzĪ›=¶Øb6ķ;@Ćõ\UZå{DōÖ]¹Ļ'ŸÖ˜|u{ØiČ4$d³ģĮ’~øšdžń k”$r¼9é_Ių*ĀI“ųžI'yUžzŸzŪ›±Œ­Šō=6ź[żBM!!¹’tLīŲ_Ē„yߏ>Žx†ĖX·›J½HV2~Ōąō4GÄVŽw‡ēHd¶½ŽÖŽC™N”«ŒõÉÅ~›~Ļž#mOAŅf¾ŒŁCł” Œ©ķŗ­l)GKžķūDXŚųĻį֍«YkV1źP]·ž Æ˜ĆŒ£ü×Į†¶Ö–2éWŗ{„ĪŠ±¹ūŁćœśQŠĆ•ž{kØ<·Ū:«•ūÄqõō®žĻOÓ5YąžćŹr?R6‰Ģé>³Ó®„ÓH0KńŸ¼{ Ź·,5Yōkø-¦›}±b oü^ŌŽƒ×4Ėķż–źÄż‹ ©a€{š*ƊuÆģ勒Q³–=0()G”ÅéÜŠė–zös¶ćī:‡łZ3ĮćÖ½Rx“æC%­ī±kgyęl’ŻŸk#Ž“AÉ®§yq¢Gąķ:Įāu±wĘĮZė¼}š·P×>Iā&Łõ{tM÷1c&ĮȬ*;&ĆCåųŠ ="Kk÷ˆĘK4¹,?w‰ÆJš‹“Ż~i¼õAwŸŒŽ¢”¢ķ łNĖÅr¶™¦I©@OČFKj±šźMk]Ō ­”k[‰¹ųn:ĀQc„O©<5Øų_DųāÆüJ“¶MRź%{h¤ŪIÉõ鎾ųšÓį/¼_­Žxj /\²ŗ2Į*\ ē-łŃ$īŠ“²<Ēö­Š¼¶z­œ?mńEšģgO–F½ś× šßāģwz]æ†õą÷Öŗ’ƒµÕ²½Ž(-‰WŻæ!ō§>f}šÓPŃoī“««³õˆ*ƒĢ?pūóķ_küQųką½Įš®˜öWlńU‡īĀ„rp;óUŹ+ˆ^'Ńu/ ėwś{oŠ8ę*$$å†x® Žkū½Z}>c+»cÉ Ļģ}ėH»¹×5o ŲĖ¤æŚ¬ę(`ŲAĪĘ y儝å®d“tYU·;ļÉžu¹löŸx‡ū[Ć^#Ņõ`%™œI|’€u’ėW€Xj+gā-BĀ`4ęf,0G—Ī2ON„=›Ć†ĒĆW³}ždžŃŁ]6ެq_MŁßéŽ/šü¶ohķs·ĢØØ9¬%āśœ†•į9ī!Ytõ{;ˆŲ“€YŗŽŽµ“‹> iž'‹Ć¾ е`o•.Q‰— ģqUšŲ“Gń—ƒõ ;ū+\²ø0ŪOłē{qž}¹­†÷ŅhšĶµżŌ)%Øs»wPjć4ö3•ŒÆŽ«¦^kÖ7Ói1¢:©Yc^~æx7Ä Xķt}NĘÓķc¹ŽNrWŲćøāØJVŠĮ¶ƒOÓ~Åq ”¶Ō`sŽkŽŗ¼×tæiڵšµ«6餍°PēŅ‚¹¼ü--½ž¹nĢ®±Œ¹_ŗŲäųWAšsć%Ž“ćmWIÕ®ģ5­ā&!#`[6pGćÆÖ€å2¾4]/Ĉļęšūµ®©båÕķŚzŒŌ|Ջš³Åói÷t^%øHƂ,ćŲĘ8 jļˆŪ_mcO™-nUĈń0AĻå^Įš’āZk—‹¢x¾ņÕnd'mŚ_Ž9\ó@ ż­æ‰®ōuŌ–ōd°ČĄŪķY^6š§„¼E£ų·J·¼„FĶ ź1-¹ĘrB+ ‘č‚5,~FüNšn›ążjņ×Oøó­ĖoLŗ8Ķeü7Ōeŗ¾[¤ŽŻD€+JĮAÆ:ŖŅ竆©Ü÷=n ŽxzłļšźQŻ4X(}wWĶśF£\Ic4ģÖNĄŪ2¶1ōō„‚“Rw:kI£? ¼GsāifčH·ÖńylYņYG>’żjõ$A,Į”ćØžµéIźy“Üł_ö£š“Ļ¢xƒGŠŻ,'³ pĻĖyŁćü÷šĢRA8lģ:ŅQéń,^ÕỸ…LrŗĒ!¹ĀēčMvætÓ zžž‘ß %Y” qAķŽ:S)īY?šFOŚbßöˆż˜ᧈµĒ½ų‡įbcŽ)N$xz®3Éąc>øÆÓ{Ū»ėf`‹"2œdŗ}ė:É_B¤¾kņjŗ%¼Žę[ˆ¾I0yć¾+旄‡‹|?eā½6Óķ:ž’…NÅęāČ!żG8ü«—ØÅļü7öIŗżŸ>374 /‡>3Hī4ł,$Wgꑇęæ5].T‘’Hßę<®š+KõĢģčŖX²œńŽ©IJņ޼WZV8ēŲ’%Š0¦}Ę2qņŠ­*å”Ū–-ž‡ø¦fV”©TnĻ_ń§@ˆX30ėķ@Ė»Qwŗ·¹½b$f%»v ±*».Ö`'rŚˆ¹c#)1Wc„y w§‹ėxŽ2RŚXī¬äG*a•ĆJ’@ļų"ŸķÓķiū+hŗ/‹f†?‰^Læ€K™>O”9œ2€S-™Óś­ŗĢĮ>ąĄż’»\īŸ żĪ›v‰$.2;חWsdĪ_šN£į]RĆ[··“:i—ģ×Aś€Hæ ×Ķž*šŸńĀ&š=źŪO-ĢjÓÕńƒ(ģH?„s)YŲÜžH’j߁w_>'ėZ/öqŅķ&-0N»\±ČE|:žńXRœē½vŅ‘ÅWb¤Žó9UpĄõžtŖøeˆēaē Ś»Ī’Nƒj)=U,ė"’sŪŲŠ±vŻ™K3 Įć§JhB³3*øŒœäš $ bcøšxUȕ_cŁ=LKųWć’üų“į?Š> Ōī4­ZĀā2­°Ū¹śžž’f’ŚSAż¤~ųCć÷‚Ż5?XZĒ»gß}Ŗ7½N9ś€= eˆ‡4=Č#ė Äz^„tŗ×†Æ š”Ėä°ā7#?ĻaļSkö±Ki"Ķ’ā\ś×Ėā©źtĘ68(.4_MÖtkN‹UŠīį{[»iS†RļŽæŸŻGEń·üƒöĢҾ)hšm’Š>݇Gó “é-ś“yČścÖ± ģ]ékĮŸ¼ń—ᾓńgįV­iÆx7P„J 'ę³āŽE®A•ą>9ųcmo}iöå·ø@pżµ{tČä?5>9~Õz7ƒō{ƒØj¢ĀõI;a§оµų”ń§öŠŌ¼{5ķÆ…a½ÓģC˜·Ÿõóē8ąW\¦‘¦|ń1õĻĮuqu<³…RŲS‚X÷cų×Ķ÷?#EnHTræ{8 ’uGD)«Sü1jz92Ü$РФ}öœWaāĻéöZ–€$ŹpXu'„&›9'=Ou_Ot-£™Āg<‚C Ą™R(žIdXį-Œ±Ą,}*d¬dz/Ć„Ž=ų©x֞šę©ŖŗƒČ„ˆĘ:屏^ż«śNż†ą? mü%¦|Ių§©AāMję$k‹WjĮ(9Ś šMrVŸD4ģ~Ųxį—Ćļ…©ccį Łh1#Pƒł±×½zÄjį÷Zå??/E® «ČӎŻöļ—ēĮ䊩šČż™g‰²š:RJÄń;©Ųõ§Żµ²Ø‘ ļQ)tEF71g¼‚DŲX‚ sŗęæöb©)i@ʐrBGT"xv½ń:ā70\…AМć#Ö¾aų£ńļLšä–—† [ ļü…uS‰”ńg‹¾.x£Åmwół6īĒåŽB2¾ż1^«Čņ͵zsšō©ĀÄ:…{kĀķ@Euśe¢Ū"łĪ%f\•ĻŻ­ỷM¼ļ:Ēn’H ć½Ā_ļ/¤S)‚CµqŌØ\cÜõgšbčh^Ż3“óqRŪ5ż”ń¹ˆĶĄaŽ•Ē9 Lśš¬)d±Ią×{g:Jė½v‚qŠ’$ģz›į«{˜DxĮ<ó֒kkŻ?byaāĪ2 kMs3QtŻ>śÖo<ā\qŚø»Ÿ YM Ž~{­XœŠzo‡t.ā3oaŗē‘Ž væ`ó7p™ōāƒ/hrzŠū-ųeā#€@īkZŽę xćøFź3Ņ“‚%Źę‹jr+æzēÆm>Ż6ūˆ ēŠUˆÕ³‘ģĢp eŒ­ł'FŖĻ½éKaΦŖ’»,ē"¹µ3¬…p=k+® >@ŹU²2;š‚X·ĀĻ»ęʐ ¶¼•¼øg¾OqZrŚŠ(Čöķ@ŹēĆˆŹŽ{øäW$<2¶“²)I!ĻŹ}(6Šźl ¶Ó¶¶;Ś“™\NgŠ0ČzPL£ŲŲÓõ{ #Ęń+¤ćŒÖ…Ōö’JdASĶņ3ź8n’&]ŁĘŚ«>ž­lą ”ę.4ųeŒüŪĒCŠß³Ņ"ƒNBsŠb;5HfeŽ%›=AØīu(“ėµßg&Ņq”Cך GMÖ׈2§Ź#„dŽéOĀÜZŹ6deO„4K/k}F:×+-ˆŗ¹Y194Ų[\D±%žįj©= -"=ķqv<Ö³ P;Ō*ÖQMĀƷ­$ó“Ø0Äć½g\G§_ڽ®£wQ~VQɬ]>ĘŅĶüˆ#"żŠANż},iŻŻŻ[#4Ū€õėK¦O> §|L$Ī3ėHEém$ŠF܌ėėM¶š®R‰%ŽOZ~±‰qXö€Ÿ”ƒL qCĒØŖļ“L ±ßø¤2;ŃdEnE¦\˜Ö|å;ūPᬔ°w³.ķķÆć3[ŗ#ŪЇG-ŌQLQeéŸS^‡Øč–Éb&R²qœdS°iwkŹ»]Cҵž×kö‰Ń׌Ń`2„é³bœ®jF»#D¹XĀ»»8uRZ -:“±2”ćh#¤ŅāåLÓé]²µŒPHIĒ­n®¶·(ÄF±8é·µrM¤}²Žy gŒŠ);ŪFöÄØä{ ‚_8‘”a׌Pg ĪĀĘd F$łūā¶ƒCw÷4ŲԌĶs@In•ĀÜF’A*4RĮ4 uāMļg$lļnā¼Ń$µŗ’4žQ± đłÕ©³d\šĶŹCm$q…Uėõ®ŅÓP{Øä€’˜=hs2œz–āāU0;īn˜­ 6#"¤õéPsXŅ•¶11’¬:Tz…ÅÄöŠ®s"wĒQ@Śo¹)VŖ Å! ÄqéAŗd7īŠĘZ"TēøéEŗČ $`ś‘@÷1Āū–įV“ƒģĪU”Ē€4Mżė(‡~c­tMc%žÖ\Źs“Ž€€Ž{Ջ«hƆa·éŽ·Dø€¢’ØBŽõ:źWöqłHĻQL¤ŽCÄ6PŹŻ@…ˆąČ®%ü;ofźė)^›†yśŌŹV5ŒŽ¦Į#½ā2“©\v³ą(.'kż>SØClfŸqJGQ¢I5¼0Ćt?|£œW}mŖ?’ł;ˆ=Ŗ ĢdŒK«łXīfr½qéQÉ{jc¼ÕńÉčkC[O<Źöó½»)ė“ŠŚ‚[«PDņłŁī;ŅnĄ=oę.„”gµ[»»˜Ę¾d~`=ż+9nŒ¬‡Œwę©ę æU€ås¹†ņŽ cK˜1óm9ŪRéŗÜ·\Ų"͵Ćģ“•ačk.] ēG=ć½}õ‰®Æ†—żŸ2åü«aµ~Š*/ ŽŽŻ®‘掟¾Ę’'›S©{o™oį$üŲV«a&Ž¢ėI’geĻ1õ5×NBåŅē¼ü!ńõÖ­oW‘ŻBźÅ$Y{׿ŻĘ% "10üVŗŌ“3’0ncHĆ¢üs‘\n”+BūX(^øqT`sZÜKöo69"tŻÓ<Šį–žaé€*g±¤gÜóÆhqź6Āh@G'½|¬ŚIkzVź1½z€?­qՉ¼&`½źĻ+BÅ"{vØZw· ģEśg?Jå:#=ĖĀ~%žÉŌą‘Z5śoČe=ų5÷†5xoŅĪU"FxĆdtü*”É”£|7ØŽ8ę;F1ĮĒėF9cI£Éall= \cvdŁĶģ½³ŸĢÆ ķł×ØhŽ6×tū@‹ ‘x;EuBqv8oÄ_Nā=…ŽNŽ‚¹Ū‰ćTEĘ@óU(čmrZæŚÖ ŃcūBō”5Āi²ųŠĒ]†k‹{Y¬:ŹyÜl b¹e„ē„^[øY-YC°ÉžÕī~׊fŚįcĆc“Ō@Ę[Ų÷»;u häMŻŽīYŗŃ5;»FŠįbšÓīﮈ#-N.o¶Š|šŠŖõėœVö›} ÖŲ{ֆ°Üåõķ+Dhī.%“ŒO“üĄą×ĶŽ.Ó“É , '–9(yĶO7ŒO¢$‰ŚäxĒ„z7‡ć¶˜ „,$\ZW¶/jR˜ŻTĀX“Ē *½¬®Y€ī0k)LĄmÕ¼–ó,r8’"2„zb«ˆQI^09õ(¤Q5ČrłĘ vh°Jˆčģ`āõ £—jē,@ķ\śĻ&D1ČJdō FōZ,7:{Ķē/L1ÅrŅiń¤ 'óÖ³›č1dW‹dQH<Č×A¦5ꪘĒ•§L 6—>`ø‘F sXw:l–©ęFIF9śWL6®u3!P‘›ps‘Ö©ŽźŃŪD’iXņFĻššRc7=mmš^'ó čzjėōżnŹšģ]qÉ=ftB,n§5—”e¶øĖg_­qÓŻYÜīĆyÜńŲÖS} łÄ­Ź-ÕÅ„ŗįĮÉčZN¦éŒ”įNOz̆ŗ›„Nf…ĢŒ‡8ĻlV­©Z²ģŻ§ø ˆČϊ1.ąĢNąšXōy„Yī-nį†X†ķ¬Ų ķļ[FW+”ēÅZ¤WŽXcˆØŠ­uŗ­ćķ—ĢŽqœv­£+ä>ćT–ļd·‘¹88ŖOs{JØ-ĄśŌ »å¼µ`$T‡\w¬ĖŪæµXM¶(ä yņ)ĪĶæ M L ”IĻJŌńoŠ|G¤¤“ŠŽ”¤†Ś#ó!÷Z„FŻEÓÆ“Ż~Öö…ķn7!<«zKķŽķ³ó.y Š–\"r· ŠøŲ'F89 Šēo.Qn£³+(vČR@śö®sDģ`ŻhŚeŌĪ.läy—[tƒÖ®ŚŁĮhØI£=I.HĄ»ęŚArUöɐCžW©ų3ÄZU½ŌQ±µšłYū Ņf2Lõ‹Ų<5Ŗ[Ģšé«"’@bzׂź¾Óģ›ķB ī?0^žÕŗŗ1w9å¹6ĪŃķ=s֞±=ķ҆FĪČč~µ,ØģTæÓÜ»¾lē'œūW-w§Īȳ‚Ėc ~µ›Ķ”Ļę{OńŽØiŗ\$xåŽ ōk—>%Ń­.ģćo0Ā v"8äūõükč:œ»žKciw¦M Ī—\尜&°ž&ų£_¼Ō4™”Óm¢DŠI• =PtŻ\ō x3Jń$†źōĪĆv¤ŲµÓ|gų5 Ļ„4ßųRI-Ƭ>IɍÜrMdÕŁœ–¶<ĆśäžÓį»Ķµóycx”üŃƒÕ‡æZśūĀ—žńw…ZŹE³‹YeÉie&!±Ž•^ĢžCǬ¼uØ_ŽMą}SX‚ā ž#°„jéz]Ļ‚ļ£Žžę+˜WJ­Ÿ4łŖåFsÜėļüg,³§ŲƤ’Äłl3·éŠó/xŗqy=Õ²ÜG!\¦ā0Ē×éšR#’침x‚ēÅ 3½øł<²źø.O_zómćó­ Fe•¶ļ#“T™“cc³š^›mż°ņŚÜ–ydłŒp§ś īµ½A“Vø›Ė˜Ę§ Aäœō¦årŽoÄ:„ÜVz„¢ŹŗŠ¶pˆB·ćŒ}kD¾ŸÄWS٬‘-ŽJ¹cĀ6{Ō™ŹEż=n¼«^é’O,;ßĢäĒ0=vöÆU]1üa§­¾ ˜š5ėįĪ{ŸZ „}Ķ­@‡B™n5› ·J@~ONõä><ÕtX5©×Lxžg&8ŗ*yµ2mÜMĀPjŠŁßZ]¤7r31p##޼÷RÓ.4ŻdÜ,Hą†żóB˜ł]PÖ5øš;|ü ±=ūēłWn“ćT‚k•ioV"T÷#žµ;–•ŃĢų»Ęo G ZfÄøčrŽgL•ē’š’Ž[ł–vPÄ~Š’;œī¾Wō”+t4“›ź—p„ÜĪģ¹@ēėņń×Ҿ”ŃęÕ¬“q¦Ž ™2ZDLzS6Š9ķĀ7°Ł)¼–)Ņh‰Āō f¼dźó[$\Hc!ˆ\ń»Į—ü!ā­Lžķńī“ɏļĪvlöā» ßŹ&H^ČŻE'ńぁނģxę±Ŗ@÷ņÄał‹nŚGojÖŅÕmnašŻL7)ē#ŪVF¶7tMcw{%1ėųŌŚ~”ā-3Ä网ĮP˜c±©‡™œpŅõ;MZ$€’1'`č+Fę+-3}ķÅ“rm?,>µrfš‰óķæ‰t]GėKxxŁ”…8$Ēר¦Kć­µ$†évļ$ŌŌņ>¢ögŖx–Ž9Ń£ĶŌSŗRIĒÓńÆ[š'ÄdY^Ņk³†żŲ!dLu5J62tĻŃÆ‡ž)𒆼4ž&›MÓõ8ŪĶ”˜·yCŌqéRƈ¼-ńČOfģŗSF[¢ÆN=*C'•5o ųEń=ėŽčŚv³”Ż ŽédäBs÷{ް“ßųGĮ~tZhhģ 4…Cdž?„iź[Ō¼Cs¬”»‚rm܍°÷÷Ŗ:‘mā-Vh5Ł<‹dMŹį7dąüæ„2Z!¾šƒ”‰O²¶)ŽåWęĪ{חx‡ĄW?iMwO»»µte8ŪŽ†—0ć+ž{ØxCĘz"Ūx‹Kø…­–Rę6O½ļ»ė[V×SjŠł×ńÄ·qŽU”õĶŃ'†&ŗ¶ńI“ó¤KyFņ®ÜĄČōÆAńΟs(M.ęH&·ełv¶N=Eów£h×¶wVńŚĢOĻ»œ/ ®óĒ––ģ6z’ŪOÜ š†| Ē>ōßS„ųo„x£KŌ¬/ļµŪ]_B–[I\–ĒCĻć_zhž'Z£„ŲŻ”]Ącžxq‚NßJZ37>Ēē߅llé'łÖ±WLrŲųėānµgāo‰¾ ŅŚāĪŪQ„-ÆüĒ;—Ōā¹ĶK³Óīģõ‹UŽkČ%ÜceåpG5)[s'#®ųÅo„k°YźØÖāfDi^Żv’H{ć„p^š¾–-–'Ū:2œ»Ÿ˜œw5I“ ‡¼įØõQxŅKl$;&‘ą wŪŅ”¹ųu¢C.§3CģRćŽqĮÅi\ÕtåšżÜŅ©<Ɣ,dżŅ+Ł~ųÖÖó]};Rxäș}G52€%Ń[é‰įėyäŅWåaÉćėų×_r-oõÓ§Ž+Łß/Źäąz~uĢ黏–Ä_üŚoĆā­Ł-Ę ,rŃ;éžó'„õ×ü4B»fE €Üu­©®äJ:õ׊.õ;[Ū2MĶÄ#y‹Ÿ+ń5äšßˆõ >Śki9$€ą6:f·RĻ„§Ä/  ²Ž?Ėņ7Sųשė?u ŖM©ŪŹ"|ČŪ9Ęx4æėÖzm¶§jŗš$ ›L-ĪHćŠó7P±Ņ¼K©]YÜĤ!łh<Ÿē@ĻyŅCK5¦Ø ŚČ6²‡Īī}+WTšž„¾"²‚G–Ź ƒŸ1¹ņŪ@ļŽ¦MŖo ;ÅØĆuG'b+ĻuitĻķ+MvŚF‰­Ē˜…sŌŠ„u𷙯éóÜ-Ƣޣ ;›ŽEzŒķ5‰¾—R𧈄ѵøQ¤ū<ą©—Ā/­²Üü¾ńUωeEā+vKų\Ē&WśZą-ex¤C˜äģ{­pג±ÕEžĆm«Ż>œ-%>qqŒŽ’ZĆ>ŽÕ’ź¶’lļŲē…öƶgO3ŲśWąŽæ>«\x}Z  ²`NÖĻ8=‡·¹Æ®ÕŚyM®`ó×čFz\ē–ēńD·ńO…5KG†K§Ž2öč£;[#‘_—7śmģw‹l¶ŅWĮĪ }}ė6˧±¹į­[JŽOµYNc¶yėÅ{_ƒ%Oų-ü?1¾Š« ž¬qĒéŸĪ“§.…Ź/t}ū ||øż–’h x…//t[9µ4ÓõhQų’#GJžē~Į ų»ĆZGRi£¦śIéŗ¶‘ć h¾(Š„Ž]3P¶KØ±Ī ńł×ØYĢTˆĪ:óėÄŠšæ‹Ÿ“æxb÷GÖ ÖÉ*F9VģOŠāæ<—į÷‰¼%÷†üWqęjöŒ$ÓÆbK˜{ölbø%¹j}ĻĢų(×ģńińĄ÷~5µ€©WŹžxÓtĪ£'\Wó«é—ZUäöwwŸh»ŽFV&=§ƒŒ]XwŠē©±$i ’ī5OĖkw ’3žéCcĻØM$ž{+” ni—)#BńĒ _—9ōŖ!;o…¶XpqėWK»"ŒŲōėA¬eqŃĘ­·Ģ?¼źyWŹUd¹ėAŃMš‘NėĀą68öÆŁų#Æķƒ«|ų§§ü5ÖuǟDŌAahĄ˜g…›‡=XA’õSQ¾‡t%ŠžĒ| h:kGĆ7~g‚5–ū]‘Żŗ;9e“=¹'zōi€rśmĆŗALŽ$_c_7Š…™Õ\åõH,m”˜l‘ ōś×É_“ß |Lš<š^®ŠŪ] 7Ųܞ>Ė8čCv”äšEjkšoĄµşų'æÅŻb? ßj:Ļù䙼Cįv˜y+“ÅŲōRqŠu­Ž_šU/ė·Öśļ³z'ž/6ā Ųņ$$ä Ž3ļ^Ö©/CEó'Ē%ŗƒNŠ4Ė­kUwĀ[Å.OųWģ'쉒«ń_Å GIń?ÅvžĢšüį|‹ˆ$åČ?‡5É^ÆDkŃ'Ā_Ł3Ąß“øōŸéZ~—x€Å,Ą„&CŒćė_]č:U–Ÿ¦łjŪĊså ĄČé^|åŠMX±żš5'_66†E=ŗµK‹LUź=½k! Ģl¦hÜMjĒi ē҇ԒÉYYƒAīqC-Aœ•ļˆōՔ·²¶p¬h¼Gd­$wr²”Pk'n©œü—×7o"Z8ŸŒWĢ’~7xcĀ?o±ÕēhļķP®0~µp¦Ķ’¶‡Ąž8ųéØxŅęx,GŁmæÕ¤ˆĄn¼WĻŚĪ”vó’åę•N fĪ}kŗ39œ­åŻŃ‘˜•'Ó,^įÉi[hģē­uŽĒ,ž¦ÜP¼RÉ-ž03]ʉąŻKX–9^89Ējē©3Hģ}ᯇVv\® ĢĄg‘^Ć£ųvĮH#‡hĄ®*Œß™ވ“Bń"äćŽ9Æ2Ō&Ņžę!-²m™9*Šøū ÉCq°>ī„ńZĄĪĘĀIbOŠ|*†I-%[tV4ŪŌKiC˜ÉÜ3ŌzTŅBń(mÄÆņؓöŅIeIņJĻµU%¼© IžĪ*¹+¤±žķ~oAڧŃķa¹sŲłIĘ(Ųš×öl²2Ń1ŹÕčR8ŗ Sc%iRE(ź2:bømN;»9‚Ä ńzž”„1UŻŌø*ž•ŁŪğfīD p )2¤„ߙÄź{‘Ņ·4Ż5[åYTw4‘©ińA0’ܰ$ōĶC ūL%œ6śŠ"’‡4 #Løn„HüėcR{k;W†8ćxqµxäSJįs‘Ó%„³3ʑĢ?QZW©mq²Tsž(jĀ Ž-Œ¹}ŖK„–8›צ@éH {©Ž ’Åß­Xó”–0ńŒöéҁ2ģZgRddļŸJւŁ!Ę]ŗ|ŌåbK˜ŃĮQµ—”„·‰mŠØZ øĖ‰ LpŪļNWF °Dmó–Ŗæ›r|ĒkgÆ­:r³#|Ź®)ŚEŻÕ¤™EGĄ'§Z`hÜk?m¤€ĘąśRķƒj<ŠÆƒÜUr t–Ó@Æ‹‘Ōg‘Yš@#UŚsļÖ h6±%_Ź„ū+»1¶€±€ŲV»ÓåÖn¬£h[- g-ØĻ=Ų”;z*[Imįk3lSLC#XPŪĄlńŽÕ“÷Ó@«L]鞂“ö€c\$weŠæĪ8āańĪž`÷ķQ)\ ·Q„³ŗŖžySž••/Ś%Œ.ŃĻMIœŃJ»J°;³Ž„2Ée"’]¢4ŽÆOoµDĻ T“½ź{V¾Y@˜gÜPnGØH!bOn•ÅŻĶ$ ÆŽ«Ļõ LĖó Œ\[8«W-l ,ŻČĶi”¢yāmńŌw®ļMÕądn 0‘ĘGCA©ÖŪ\هF¼;ÕŻJkIć 6±Ęę:õ¢ŻFź…G^qÉÆÕ|;¾ą¾ć>‡­74]6xD‚FfČłMlŲÜ]Ū;,Ŗ7tśŠEgvĮÕå>£Šģ-ÆķädÜ8ĻQAĪ÷vUå o!ŪŽAØ ń‡÷s'Ėüčļ>ŅV-Øc׎Ø]ŪG̱¶N{ Vd]‚9Š:Õ„°€ h˜*c”ļA”Ēź?4Æ@Jޤ ź([o-Žey:óĻ„kAh .įŪր- S*ąĒŪ54Ztčŗv”tõŖR±.V#Š'¶}p $RŻ[ß$©bž3WĪQjóRŽę7ŠHŌ·^œ­r×sĘ`”J›˜g ķY…eLRźÕ¦ˆOQœśŠéķ,äfI<Į§S®+BµÄSǶI‘V\ /JśGą’<©ÓO•P¢¦ŅĪ8Ū=ė†Ļø|-+IåøI2@+Ē5īŚ_4hŒ{ g„i µ8jČļ›Bŗ#øŠ7ݐw+æšŌ1Éffš<šHĘŽ QĢup€é…P*ćčé2Ļ LÅmŲF†›”čŽdmq†lņ­MKĄöw‘™tÉ£IĆd"޵Õ€ó­_A»°SņȝNqĮükJŃĘ!nxü+¢ĄC=ˆøŲUųéÓ­gĒmn’ż–ōˆū‚½éKcXČåµ»]>ņHY„ńīćŽ¢°Æ!½»øFÓ¦¶XI!Į<ć«Xż'OŌb‘>Ó4ī8ēÖ½—N³¾@Ä«?÷ėI2łOTŠałV<Ūńż+īæj¾ŗ“Žˆķ”Č«,`ó’zūę„ī¹ŗŸühš|¹’ūG°šēC•VŽ 8ČĒ_’UržyŁmžĪ&ŽT!uL2CÜ}+B­t{~›šŚ R+{›yōĮu“Läæ–Ćą“ŒóõÆ8ńÜŚŅ=Œ÷r T §!@=ŹĪ6×Q»ÓcIāᙁuZĆÖīÆeÄĀssq“  øu;Č N'’=œšxϽt)©6¢ˆ×WEü±Ē=E¹¹„ßMg”n¤Š@cųž("Nʃk6Öm:ZČlŃń'¶8üj®‰įK ­dŽų^Ž4ŠiUÜ7ČW<œŠ†ŚfWńgƞ!Ō49ļ“Y­ ¾³bĢɌqžÕĄüń–£§]Ļö³Yjā7ž$ćµTG}„a©h¾/šŃøŗø‚ E&łr.Ņą[>žõń~­£[ßx–ņŅ5Š[ø®ž8yp *yģ½ćÕķ-cšīŠf¹€†HĄ)ükȼCyæu<ś3ŚE'ČWĻÓ'š5<¶#Ł—<÷V·’ié¶×ėŽW8uę½ĀšŠkśŖA “:“f 23°äąéŅŖ „”ÉųēįŚw·Ö7ŲÅ»-–[ūŻ=x&›įBó]‘ŻŖĒ›IõooN*Ķc±ōž‡įVŠŅKØ”“¼—o9ŠŒu¬ŪæĮ šCraš ą»ŽŁ ‹\Ōµ?Mmqyßg\Œ6ßc_#^kjzĶģF+‹tŽB£q>ōźvšÉ5ĀÜǹR€ņŽõŁG«ZˆW!Ž,œćžts²³épK;źö‚įövgŠ×#«j§O»ŽŅH FŹw60zšŹ[åÜģ“k»č¬”!˜F~eۜóŠō]&ćMÕ,šĘźŽ!z¬[ĻfĮ\ö>Õ-ž›wky5µ‰iNqÆÜ#Ś»«kJŹ&ƒR²JU£1±$I‘­ńŲł:’ĮŲx–{ūfß! ©lķÉĶuš÷†^ŚŚĆS’DupĶ=~µjc9›=Ś÷ķ‰U\łÆ\ų{įŻ"ėQ†=Vy>bUUaއŸj|āåGč5Ÿ†’Ēm¬ŅZ:‰DĒ‚„šĆ’ ŲųZēB tHœ œ2ī=’ZĶÕŌĶŲņü¹š×†u9ď-ŗEęF$9b¹č1×’­_ŪiÅ=Ū¼ó‹¶Q˜9Ļ֑Č;ÅIom$S#‰Pģ^£Ÿ”ÆYųgā›;ķaķļĀ}˜Œ!č†r3ų ŠĘQg¾źŗ…=Œš”S[ yV@’0ōā¼~ņņ[Tū Ä:JÄ.g(³ 4yЉµ–hd•¢BÄ»#ŽŲÆ[ėØ5QC}¼‡–Īü*ā“:)Čö­Ćz¶srd #BV6+3SŪ½xę­ŠtķEį³™öE›8Ēlū֑sSOńē‰ō-Z6Ō4ņ;‚ū“ybO„}e X®¢Ö÷RF‰i8›(„$&ŃēQšž±'ü#·\é‚RCŪžYGN nų?āwŒķ¬-n¼é øŽO+nł ĘF=‰żj,L‹ÄZ¤6Ó¶¢Wȹ巁œēł×ž^xŽļÄ0ŁŪĘ G^¬I¦3¬šTz¤Śž™ĀŽĮ38f+ĄČž_vk:‰õ Ėw¦I«’¦HČā@Ęģv®j†Ź”ąŽų]vŚżö„ØŲ¤÷”ɈäĘüäŽ:Qć?h:ģöėāāX‰̧l‘6=kŸ™ģ_“¾„zŽ« ųĀWŸe·Xķ«4:zž&¼«Ā_ģü@“hĀż«ŸÜ.Ģ¢ŒWL"Åc邞#šŽ•{£¼vi—jž}²Ø +FHõĻ~Õvūöjš¶§ā? j×^ƒœ‘,ćysĪōėZø½ŠäŅ3£Õ"Ь¤Óu›Ę՛ČhĒ’ģkę½WĘś_†učxBi±H­"Dæz<ž‚£•ßSTŹŗÄ}ž%ž –Ņč3(FŚ#Q’ōėY¾ų¤GāÉmõ olŅÖņ"RƦIč*ć ģŅ$Ōž'K©ųćJҵk.}ΌJļ&\ó‚8Æß惆‰į?h‘ép[^i†Ś)b‘†UƒpsĒ*ÜJ}Œ’Ś æsoā}k8läłr€e$źGė_Ÿ5ż¤|=ỿ[CŌōTÉj Gsx;³Ķy¾#ž3ĢY¤‘°€äüĒŽŖ=™“f„¶«}©@-%˜¬+ņ” €§ŚŸiy>#[‹÷–-Ą€GŻö5b;3Ķ·d-4QK ‘V4OOcw} ülöīq6 ōź(°Œō½?Ä÷ óŹCg;Ey•Ē…_FÖ!X'¹³¼‰ĮÜó ŽœśŅ¹Qv>«ų]s-ÄšÉ&­\€Wk¹ń޽ėĆVzŧ“ķKQÕēŽŚ' Ćö§JŹF’?A5ęŅn|.moķ-'³¼‡2FB§¶>šĶ|;įæ…^Šõµ?H’ašf$bŪ†ćĘ@2F)(ō0nĒ”üZš­Ę‰ā[ONÓD:=Ėejœgƾ3ų‡ršuŌh2Gü„ŁxSĻéÅm…\Į‚}+Y³Õ­ą‚˜Ü:.zŹæIķž!Cń+Ą£Ćw¶±fĘ0,˜ąyŁĘG®Ā™GĆĶćų__]7R‚g‰åe,ę\±ąqV.üewŖC«éWrĖh&ŃŹ0[ŒdūŠ®xvyl^ŽŅ,¤½8Æ”õė½;Q±Š&žŹŅ9cEĶ Ė{šŠńŚ+-#OÓ”:šyč«F _>ߝy‡e&Ÿ§.ūÓØ[ŖĢÜć=Ø“±·®}ƒVÓmēŅŅKi£Ś¦Qżąz­}šŪ[ŚLŚ>©h«(R#žĘ:š™l 3óĻćĒöփńWŅu+yŅшt™Ō…lōü+Ēå.سŚ@' B}+ĪÆc²’:?kngŠ„Un (č=«Š/‡Ś/-ĉ.Ÿ °ņö“Œu®5¾§Iėž ŠŹĖ\Ņd‹PhŌ‚ŒĮcžE}…‹˜b>qÜĮnś×u5”œ£©·¦FŃÜ#Ķč×{ Fßw<„zV„ąü%åė3<ŗz»`ĘW :r rŅ¬Ō‘Ņą¬yčā ģü]§ŪÕ&YeĄÉ|{žużM’Įk8~*ü4Ö>_ŽŻ'‰4ˆžÕcö¦ĻpgÆ„{tćī“sHżnÕ.e[’%UÜ ŻĒzśßąŸ “K]iL DAķ\² žĶ’ĀóķK"' Ēž3’ą¼?±UÆĮŽzwķą $_ üy&Ķ]­”„±ÕIvqó{ÕĶVn²[__žŸ‰”Oę»[²–ĖRŌ,åHŹ£Œ¬®^HŪw8ćšō Ī:)|ĢĀ6ōĒ­WiLO€›ś‚:Vē ŲT¶Kŗ žt«¼ĘŁł±ųP!ŅFīVŪļWķTDąyƒ;h*.ʼn„XóåĀIąńĪj#q#—p ŌcPtĘ] †C"B¶0ėčjÅåÆö–›s§ü‘¼‹…’ L:0=ˆ"™Õ t?·oų7ćž uńēąIżž'ėjų„ąę0G,¬KßéćåŠ`‹”żAŚŪA«€wZęÄDŠäī¬įøŽH'Mšøī?•|ūMh¾"ŃąKŻ&Źkļ³²īĄŻū¬óĆś×™8±(źšT)šåöƒ"[j.« DcȂ|­ģrkłXż»~jæ |}«jo§„•ø¹ņīX)*A' 8ćėī)ŅmI2&Ļ»‹g%Œˆ…÷eµ4mÉ ÜW­N]*‘+„,Ūv°ė×µ=¶FŖ$9äśÖ†"b•#;wv*yw);~q’ Š\+gj”$ō«j­· ÆjˆĆD»Bä¶9ÉéWō½_Yšīµ£x»Ć77š‘éwÜŁaöą£d§Ń€ĮÓ±ÕMŸŪ§üsöøš×Ę/„z6ŗuVźL–ڽ‹ÉįķH ¬Į:…$qź8ōÆÕ;QÓµY<5ØHæŚ‘!šŹv’W{älnücó÷Æ/H鄎WÄzĖĖćZ#ŌbBÓ@ģrŒäą×ćÆķaū]éŗ­ż§‡åƒr«Gös&BIŒ®xs¤üUń7ÅĻ x°j²ųŖŠ]j7ÅŌgēcčr~ķ|EāČtč%»{ŽŪū }į^„ 5ŽĀž3°³–{+„š ¹ņĖqČ=3ųtÆJҼYgv–¦į7ćåĘćé]>Ģ~Ō¹ā ԊI'hہ¹¼7̊_“l*Ŗw©ĻJ†­”ĖRW9]5ļR“Ņ“ūyõ ^Sūø"‹^+õöQ’‚aübż mćńOŒQü ął#,”„„ŌŽ«‘޲«W•ņŸŅģÓ’Ēų/ū?ĆäL×u bC܃Ģ*G]Ąä×čF‘ Zų~CöK{x°¬"@ŖĄ{W*’{šE4ւå3劢–’iįŚĢŁåj ™­§Ż¤’._Ė’®x‚Ž[Ķ6ņŹ;±m,‘2¤£„÷©”¬k”ó§Āß xץŅkö> ń#ėsĪe™øQģ;zā½2÷Vņ¢hge|—=ź9™¼bŸõuÕ.uŸµDX"±ŚWŪ­p’> éś={Ūč¬īŃXŻĖė]ćvYš—Šj?ŚłÖ¾Ōæpį› ŽŻE|‘āė~"Ōnµ=kQ{Éå9“µ »éÓźÅ)X̱»¹ņŲ¤yč+~ ē 9¶Ę-–g¶qn%r¢.¹# ÷­#LšwHcCs“ڹ'#Sč?|6s™®”Žä ø½ęĆĀÉg¶3T8Ę+žr6HōĶF³–&CfAĮžµ§>‰tÉ$8‚ątpŽÕ›4“Ū8ī"‚Y•­§ž0{W¦xU&Ė”†ėæėXÄĘS'6vzTŖ ;#'c;k/Z‹ĢxßN?tå‚ō5fL…5e1¬f6,8#+ZÖDŗB¹ `‰YpjÅҁ§Ėq#Ƙƒq g„xƒNÖ¦šŽŚą4Ѳ/÷Mz†Ś9Ņ—t'¾+HĆØ|]s§9 l(cė^xšg¾pFŃĪh#NŽD‹lHū%ćæ5Zūķ÷ ³@6~`yŒ·=A GW2HŠxõ§[ź–ŗœrƮہĮc€mŌāĄ.[s=«„‰fWHBg®hĀ”äc0`3œW/©_kÖ7āKm3ķJG·sĻ¢Š;¶ń„‹ogowg8F;O½Y’ ˆĪōa‘JQC~F+I"±}„@84ö¹ŠU €³$ŠKWb…Žõ»k rįY€ć½u6ZUˆµpŹLĢx9ļXͶRx¬ĖK™ą»ŽČv‚K}*ćąv·Ķ ŲļĘMs©™Ż‘ >½ŖŅ°sÄör»‡fCĪjדœĖ wJ™gĢhFķjŠ“»øth„TŁŪ޵ŗ‹ł[ŪŠÕ]<IJ…+ņõé@f$A4A‘³Š÷¬‰$žVX! ‰DjĻWdœ>ĪŌ™Źk˜Ž7,¹ćŲWO™92®ī{ 35-NóJŗGµä’Gz×Qåe•9O'ŒdŠA G"ŖJ‡¦Śéģⵃ%ŠyĻ„rˆę‹Ģ˜¼8ĒQėYw;ävWRńAĪ”²6邮zē„aŲųƒećF·Āh‰įIS4ŒNŒß\ń°#ĒžAž•,w )SēĒsH² ›mŲpłÉĻJétķ ‘*+tĮļ@zφ®¬ęšD1ź6÷‘§ŽDe03ģ½zvͲn#b«"Ģ•au.Œ{`Ņ'ķ'“b–Ē]¹ļOžW³ŪĘåoZeŲĻu󤎱.īĖŽ³/£X„ĘĀ3ĪéH Š<¶\ūV֟,¶¬ź#Y#'÷ ĪSģl,šŹå*ÜuŲéžy  Ą ֐h›¶R×/%±·{v‘‰ä ł·ÅŽ·ń4s™ed”Ž šAśö­S)$µ8æ |+¾ŃÆL—:‹Ż"Kę!ą0öć­}c§„ĘŃvœc-H™[”kTšüVi Ö³8LvķYrüØæ:Žœu ‡#*{y˜K0ēÖ¶4ėXŻ”eN9³”ŗ „sg&ņÜn­TņĄ śŌG)Rc•²æJ[Ėh¦€4EL˜ķżkt%¶Ž‘Ģnv5\Ō5¶˜®ā0 gYź.ī$.©ĪĶP×l.dV-2:ž¤R¾¶ČƼ9ĒyѦĢļššż[ąĢ:ž·÷6VҦįóśó’שµĶį#Ü<5ąˆ4 l# WøĘ+Š4ø&ŽXä]ćĒ#+2›:;Ū8žĻ¾‰8Č¢ÓīUį1¾r§Ś‘h•­ķ$—#r7o­Lŗzř$ŠL§Ų‰§‹ĢūĄ7JŌžŚ‚-°¼nņąa×µŪMöƒ¼ ÆN•µöˆ B&€sĘåėAtŃŹėšc]Ƌp^N@\f¼SWÖõŽXnķYķTœarTūŠtĘĻ2’„ŠmMgAo `7ń Ć}6źāVąŸJN7:3?WšµŻÄjØŃxlŽ•ņŸüsa4Ę6Fq<Ž•>ĢŃ#ēÆxWLÕōūICķæyz®3’ÖÆ…Æ"—Ćš©T m÷Kzę¦TՊrčz.‘āw‚Ģ*²ła³órµ^øÖ-®™Ä Å‘œöZę”lAIVŹh¼é§–ŲHĘqģk[u摱ä%ڹxVo`%Šņ’4‚iCg”nTÕw™>ŅģŃFŠŗ8©øŅ8\Ą2ą÷ī=«Ś¾x™“÷K „·w' ~é=¾•½9šŚĒ¹^j󽚧— !$ ¢¹Ę7(£fł‡Fö®čJęv3fŒq¾Y<ž†³nō°Aš&]ŁéTĢ K›8Ü2Ė+ßē®ģ,īōÉ4­@?öx%‡īĮ9"¹*2ąõ>/ų‹į³¤ß™m•¹bzWžŪÅē)»!\’Z*d:¤»cL®ē*–—ØKču’H€qšq€J]śšGǚ„ś\zsN²*ä3.õõ¶™Ŗ>h²“‚;ÕJ'-EŠś?E×F©emęmw Āćšī“×·‡ķŚO\ńšˆ­lsøŲģŃmYĀc\ lAcū‹3& tE\ŹL«ż’#ņŁä`ö5Ōé°:’"B>•×MhL[lVÓŚąSÅQyõ1 M—ĖĻˌćŠė†Å\Æė]nÉtǶn|9ö‹HeŽhęaŒ;zUö[ZmT Œdā“tŻ^'Auuū (ėA2e?Ke<¾nŲŅ/æĮéU„Ś@‚0„Œ…rLRhÄā5=H,›&Ż“Qęé·ö“AqŚsĮ5ˆÓ-äƒĪ*ą®07v«žd²‡WXņŸŻ?z,‹Ø³(O@k¢–ĘŪOsr²£± v  ŒŠO)ay£Ķg߈Չ üč&ʶ¤ī>Y>žµNHÖ@b‘Ž6ĘA©©”J,G)„,AĮĻé]’†,­Æ¢}±3 ji[@7ƼؤńĖo5§”HĘK}+ž¼ÓgµŸÉ—H 0kH”ĻgVÓ8™R`8ø+½>’ŹĘ9&A~UØć+2č:Ē1å€ę²„Ņwe$j†ćżé=S/Łč‘²l*sŁ95 ¶MhźŅDJpykŒ—PšĘöŌ§•µW€­`[+ÅūøćGLōĒ?ZĘĘ O>å]ĆFQOÆjlnį󜧰ż+qī`²hįž6g—”U_ų˜ snńł }Ü|Ō ©nņä“>yć„_KMBŁ”…ęyf”]¢—•„{„Ü6cī×o£5…¬K±ŒqĻz¤Į†©ŖŲ»“DZŲe źqYVDÜ·žXŹžA'…3=LmGKKYƒ ŌF?…NZęļ4c+Įp—$b ć‰=3[§rNĖJ¹Ō,£Eyc§CR_\Ļ!ia(¬yĪ2³žåĮ™óŻĶqåÅ)Gą˜-Tåšum° OSž•Ļ4oŹŗ”mwL›Ńŗmę¼ī&XŪģź„#*:S±ēŚĶ¾®\ci8Č8Ś}k”šī…ØKåŽO0@ėĘk¢·sŃįÓę"8rNInk«°²gAtiĶ™8Ųģ“Ķ6Ź"d˜öżÓļ] Öm­B##ėYJ'ā=v+Ų¦h sņŒó^Iq=ĖĢdųӰ©p3±üā§…„qo42ŁmpσŒzc^½aem£][ÅØÉēbŖqĆ8Ēäkč#+œ -ŒÆˆz·Š¼=moŖčj—dĆɒķ‹”cvzzWŹz·Ä-IōżZŹ+‹ųfD ĀĒb®sĶQ¼!ŠõOz†aˆß¬W)ä‰mĶ½žŻ«»ų‡£m$[ytµĮ˜nĖ«c+Œ+)īn’G_š»X¶¼µ±·ńE¢^ŪMWy­ŽōēÆā’ ŁŁéz†§¦[ĒŚ'œ#‚"ZP5(>JńĻć}.ŁąŲŽŹĄ˜—*WÜś ć¼?ā JźÅå½ø{ŌdĤ ąg±ķ[ .isµķŚ£*Åļ”±ķļV|G¦Ī²—‚TxĮöń“{Pc/#‹gó’t[åÉ ž*ŞŸu°“R2[–Ē#9ö “¶æšī”z•­Čeß·ĖĒ”ükßžy÷ą˜|ųlūłŚŽōHō½'UšuķÖÆ”M ¬óķ1ł[Ź“oź~•>Ÿą’ųG¬ļu-2ī8į7y’|Ž99=?JĪO”-œÆ‰uė««I”©že%dÉąŽäšņ‹¤Km:}_L¶v¹FĆķ#ę$~<!ŲØ¢/xĖÄ×3]Xϲچņųp'ÆåNńO‚¼}įßčśĶ֋%ę•%ŅL³ĄŲ0©Ę>„Ö‡JŠ>¼Õoü#®ü6mRÖtēšKråÄųĄēӞkįXŚųzžćF’āĆķ3":yƒwy=h±œ£ŠśÆJš4šcƒpcd‹ ÅĪބוxPƒĀ^.ÓK¹k ‰&T‘@lšI¢ĘŌŽ5ߣxBäj/Ź-Vįܞ@Ē’^¾Ņo“H¹øŌ×ĪŗYeóŪ ø¶O öÅHśƒĮŚż¶¹Śm“åÉtŠ$.Mp¾"šŹŚO-ķ²³J䂹ģMgŖÜż™%!dĘGzņ;ŪM>āgŽ(ģw£hµ¬:ŽšÅ‹Jā2?zõėfE/lŚåՂ”$“Ę1ÜŠm`škŁźv"Yc 2»„yÄ©l­µ&Y>BrxbOOåYIj3Ć~/Óµ 6Óu'{Y£P"Œ7§įZŸe»{ƒ5 ¹xĪ •< N6ß¾Ig$lu[…im£ČFķĻ’\Ö?Ä’čWKo‡q¾ˆ–Ą` £žø¤>cƛÄ2^RŻ9柲3åg}ōļųMµDŒźĖS·*~AÆĢĖ¤xŽņęĶ"ņšV~™#'‘Žč;2y^ÄV6śeóÉ-āN¤+Ū½Ž3]?€Y-õøå‘ģž †÷žuŖEŪCŻR{)ÆįŁÖ9`­ņć¶u7^čCQŃļ“ū€„O0o-鶙œ¢|ƒńGÖbæø±¾Fce`Ü©Ļu5Īé¶6m’ź»×`2h‰ėś6£j4導'óĀšGLV\Eʦ­,qīL„Głķ@XŻŌ¼ %ę½i®Ē ¾:*ŹR;ÆņÅzꉤiÖW2xjęń<[„Ģ6ģż°hę÷ž]6źļLŌ/d沉ˆ†@ŁĄķ“Üt®ÆĮŽҦĘ+H$RųŽ ‚ L–„©3 ń×Į½)ąho¦x8Y[ļpLś×šŲü1µŠ¬Žķ­ĶöA-"©łH)tcR:Æ ’b††MčŅĘÜ}ÜzśWŌ5ōWšvNųā.µc%”gĪž/ųƒ‚ź.¢5?ķ;+ݵ„-¹†yÉćņÆ$žŚŻnÆnÄMu§ÄĶį:A„iQw3m“Éeac©A§o™[k|¬€SÅ~åxJöŪĮ?ü=©ŲųŠMjŚŽŻVå¼ĄÅ%žźéVå}ĀHł“Ē’“WˆFui§-Ž©lw1‰œ/Ķ،ż+Äü=ń+Kńزńžībƒ2'Ķē'¦Ązv‡į.žęīM( Ų•KØ2Ō×;Æųš [_ZŚIē[M•ĀKóƒŲ{ұœ„Šń] _kچŻM¤‘0ÅXœšOŻĻ\ŠōI<'=œŠ¼åŲŖ° 9SCó3‘ŲĻ>s£Ćg¼I©Bü8oCŲū’xž£§ÅgŖ\3‹Ń¹q½÷cŲfjL±įąķØŻĘ!-lŹ8a’Ķž£Ó ®ĖV†ķ­gP‹–˜ē‚¦±–ā–ēœGĖŠK‰ ¤`8nEr:żĪ g™¤•ŽU oēõ5p} éČģ~xŠXn­üۘā»|Ę#Ąģć_pčŽ-Ńd°śµæ°œ)$«c€U³scįĒķ ā}"=SĆ~ Ž ZĻc5¬Œ8LńœųÅt~ų“įŻGYŌō¹u mu@EŠ@v¶{)éėłPg4z·§éž$°‹GÕµµ¶g/Ü”ńéųWĀ<9?‡õ‹#]“·1G&@WĪqƒōĮüiu±•žfń7ü"2\<×-\…O—”ōÆKš_Ų\ŚOŹĒv€9ĻU=E1žÓ©ĻįļZYk—WÖSźÓļwÉ•³ßė\kė6¶a“åN¹te<°čF=?ƚ‰œ®uŽŌŚźkešŃŌ67cØÆKų‡g®iž¶ÕōŁā6^wX8-ė’?ĻzF\ĒŹ~?Vń¤–“ßßK5ĢH‹ ē=¤…wŚ&ƒ©.‡3ż¦Ż$Žē° ®c3ū^¶µŽtG<ń”įFzœ×gąßÜxfé'æ†{ˆĀ.xīqA²>“ų•šÆįoĘ­ÓÄzµ¤–ŚÄ°Ä©-¬™Üv_Zł_楒 xNĘ(ü;sqĘ5dŒ)CŠį®š:)Ė”ń ę›}¤j‚dh|…'Ģą’Ž•ėž¼}fĄXO¹! ‰”ņ­Ś¼žVō:ć¹Õ|0³ÖŚ\WIē[Ć&Ł<Ā ('æé_xK·e ßhŪĀ‘ŠW„ r™JVfż‹, ī`YFzóšųėö¬š“Ük>ń šIp²‚²VNœĆõ¬*Bś˜3É|+?ˆ<seÆG ‘ måvĪG!ÆoųĖń”:šķģšn­hń‘ó#2«{ä.r+Ć/ Be§ĢX€x­pµÕJq©Ŗē5Va3xXČ8$Šź2®Ź¤Ļ­wSZ‘Å ģėĶEtc@LJÄ·Ź0;ūŠAU2±„cµ§j²óyEk¼‘ŽE[YՁJŽō»ˆ\m Ÿn“¢EŌ”#åĪz֔4Oņ{ōŃ×Ļ”e/Ś?Ųoķ!šßć߅õ[LŅģ$ŽĒ_·„~ęņͤ,£ū½kż1¾üEš’ĒÆ„žų£į‹‹KŻ3T²Šåe†UumČ9Zš‘÷MfŽT”|–^œs^āżźŚ[\FK4++ØmĖčAė^]@?-|} ’ax§PŠ’±I÷\Ū…NO {äēńÆĻæŪ?ąœ>jZ÷ŁģõČķ¾Ķzƒ"—č5’`Ńü¬ųĆ÷¾×5Æ j;ĶŜ‡Ėwž$'óļ\Ī–,n+Ҥö9*Ę̉ٔ†ķ=żŖ›L²—Lœõ®ƒ’[Ydķ‚}éĘl"™ Œ ĒŠTeŠ@ØŪĢō>•}dŻ.XŹ” Õ1˜+‚>pycÖ“­ÜĆ"2·n}A éƒŌż’‚]žŅŚgģēūGéžń ˜|%ńć:ü³ü–—¹ÄRO'ķœöÆķwJń„ƇSĮ>3Ö­ć¼¶‹ĪšĪ»;—0õņ½@ c·æ|ŖĀūtŁųÆūl~ŚŚ_„uå¾ńĪćKö¹†uާL:¶1ƒĶ<_h«’ˆ^ ¾æŪ5©y ™IĆIéǧ5„i{C”‡Ä³ŗ)øĘF8ŖZ®¹c%˜WmŅĮē½uAXŹU+H÷R#”Ž[1śšŅ‡ūEX]»:,|Ē*ńļTٟ;5ŸÄ÷z„°Do录ĄU…ęcŪŽµō—ģńū&üVż£µ½BĖĆś\6œ’-“óźcž»s\µj¤\]÷?¦Ł;ž oš‡ą¦—kŖųĀ¶sųžYāxü՘÷+žĒšżtšÅ¦Ÿ¦éCCÓō»=2 ¢6ŽĀī³^|ērΚŹŃć-jŃ“AOWK3MŹžõ‰œßCRņŽ+hT}+>ŽFÅŹģ“•ī-­¢-,[CąÖcŻŒ‚Ē`Ļ9¬§¹„3Ė|U¬‹}Ž\ĒĢ^p§Ę¾DńĒĒÉ|?oo©³=ØrˆTr§Ņ“§­+?ų×ö”Jy„šÄ÷3Ż‘Ÿ)ˆ ćŸÖ¾Gń—Ä}OĘNnõ;™U†[asŒžĒÖ½*T»ŠR±ä-vĻåć,w¹«J°Ż~ń振 ĒzčjĘ™vŚ$ˆˆ¶‘ÉČ®’×M¶ł+ę~5I=Oƞæ½Ś.ĘPr8ėķ^ķ¤ü?¶p‹%²E*€7 ė\¬mŸFųJĖJŃ­įŽöDM½ Vަtė™ŁÉ©ßhéX4÷#œŠŠŚ+ į˜’0Ü?¼+Õ® ±ÖÓĶ“ „dĘ$ŒĪjż#Ņ`x®‘7p3Žy«:N©=«Ęa'Źź3[“$l]Ü P‘*~ä f£Óģ’b\ŗg£bƒ•Õžm3VYc‚7“näd“W4ū‰č†@‘·+žŠKhNדrwõVh|ų$·bZ"8ė@熼£č³jVlŠ<Ÿ9“øē’Æ]Ķ“ńŪĀŠĢv¶0­Ö¶RCfä¢ā9`˜1NĘØZ™ā\o;7t”Ō„oĒmo,>y J:qU/.b»…@r&^ dŲ£„ŌRUó"'«}«I;̈!fć5 jOü²ø äÕZīŻ.#ņā@²Žō{Ak‹1§ŒN˜åq’E5¼Y§ZŻ=Ɩœ}ÓŚ“ŒJŠK‹ME7ĘČXŗ{SŪRšŚ4·U“ø4¤‡ČČ8@PqœVeÄbŽEŲß!dļ.źÜ“×­VūLŃĖ Āē(³³0Ü"o#ߌ³ÆąŅ;¤€¶iĻ™2Ą09­*į~֐‘Ōą é®^H%Ł22ʐkSe™Üwõ iœ…ä’Ū0U÷æ`¶—Qy—oåLć@ ¶įåÄ/•SĮØn®Äl[ Ó#j[½č’aeAżŚ”ssé± G÷ qV1|rĶž285µ˜d„”A7|ōĘ]µ¼xB‰!­Eq!s²N:ńMĘĄF××e.=®rį„.åąõā„®ƒ2Ō¤‹(L©ėV–0ĻŹŲŒ Ļ“Q¶iżŗx¢hóĒäj“%$cŗBք,)(‰sóąU¹Žź#9‡j© ÜŁH¬°łÉŸ˜io¼Äų<Ņ‚&s³\[)Ž6ŹžµVŅķÕ’ŅY>”Īœ!•7DŹĆŪµYxķłr… 9ę€mĘÓD …==k˜ÕļeĢ"īčI('JI.÷yŠ£Ŗœ޵›ØZ&ĀÜžtF&}ž”<÷ŗ@ń‡ūŽę“Ž_²…ö1ć4–ĒAc¦¼öęķ.p0zÖŚOvˆ‹p<Ā2 rfF cœ‚Ƶz0>µŹIŠR0:J„cS™äŻC0'œsQiš -Œéӌt ®søÓķsŒT½ė”krŃØ.6ć­6-½¼qČAbĒŌ½=„¼ˆÄȱÉüé„pŽēØxJ)¼Ę3;nҹgų~Jg„‘0ŸJŃ@Ży›pŚM(”0”qŽ›łŅ0'kŠĢEūVe•RL·a]RßX2ĻkŒ75qœž¢]kWJ<į+.āŅŚYÖņ+nIł¶Žõ\ˆ„ZŠ1½ ]¦Ÿ{i<ˆÓ*©œŠĪ*ęŖh宎KhŚd|08ėĶgŪė÷Ś’¤W)Ŗš­yGĢŽ‚Ńīsū¢Jć֛qļ)y’@sҳŗÅĖK8å`« ļ[ö6Vé8ó$)Ę3ŲŌÉM§Ćg?šĻўq]>Æ@ÄMµéW‹˜ójŚ½ü¢§#ÅY‚ŻD *Ģ®==+RYėįĮéķīķ®P‚R7ĻjŹw×v€ ©ĆĄxÕ®”ŗ"Ų(-ŌŅlĻŁ—dÓe…TœŖ{Ö=óŻŚD~ÄįŪ¦+ibµ•ĶÓ(’@ĄžĶXŗėj1ČŅŲŹ£’ņ>”ŠQ:-E¾Õ`2dr!ąåZSÜR>ƒš‰ēÕķšŽöā¦DŁņŒtļõ®Č0X PŁéšķ‰ĶS±˜ ·ŗ£H9ąō¤žĘā×ĢY%ÜŖ7g9¼‘õ±ĪK:LĮēėH–ń̇„*¹Ļ½sÉhmLņ?ˆSÓn+KY™[;Iäż+ćN/°I&Ÿ, lŹNōĮČĶ$ΘµcźÖ ČĆZH»:ķn¢²„±xŃdE"`}8©S1‘é?¼t¢”„r$ŗŸFxPˆŻ[Z«nF88ķ_C\č‘<č&W*2=čŠŌĀ{é9G(*ąż+×t¼Éj‚Dł°9ĒZꦌ,N˜Ź:ć:Ö¦™ £†ĮeśWTvŗ£C%³…Lūā¾|ń*Ł6¦²¬;…łI‰l\w Im±iS#¹ō®#Q³³žf–Ń՘zŠåš60u B«E÷ŗrz×'yf »¢Ū]•Ē˜‡ śÖFRÜčōó{±yKD c×5éšS „XKlu½iAäWn@vœ’ē5ŃčI,BŽź`œ é€ĖWz­n$žjĢm5¢$2‰d…śUƒf“RŚģdž!'8ĪyŖqé1\—03ułU†  wRÓåwhÖ ™R1Ö¹‹>xœ<‹•ą v FäE²™ŸŅŖX,Ē9I#Pp:ĄV:‹k9nŠ„žXwOҹ»Ū Ū+¦•goR§„D„a‘¶ætB”c÷—Œ]]¶¦—1¬wr©q§q’A+Cs#”ócą`ŠøŪtŹūJ8=ūSņAV##šć5‹•ŲńĢ=:j yįńµ”Wp[ļ.ā$Ļjö? j[¢KčnŁ2ÅvĆŌÖžĻ¹|§{ćKŅU@‰ā \Ö³svųŠMĒÜ皮T -ŻōŒš]Ą‚$ą0ź’ZČæ¶UhW/Ó9ļLƒŸKV ¤sĘzõ;J ¤L1ūĆŅ¢Rč5Ų֎ꮮÅrøĻø¬ėķrŽ_Ż:Ģć‡Z唺œlzœ&ęXäYø^‡ėZš\Ą®„Iäw©NÄÉŲŚ…ą•X˜ƒė޲Šv…¶±9Ēa[˜‹I¼—d…H“Ö­}£ģE‰‰‹ąGcZ¤šāܖ„8µ†tĻ'«ö:„?¾S ēĘ1¶—³v8}NYMóD–SDŖFĆŁ¾µ¢’8Ą`2’€Ō49ė¦óŻŽ$SņžõV6—ę±ĒRi„{tˆĪŲū¤żą*{U–įüķß»Q¹ąSŗ¶µŁd™ ƒŪ½@P£å=N)2£¹‘*G明W•ŖpłRäŪ²sĒZē7NÅżÉ“P1‚+Ōt_Ž7Ų”ŒŁģ+h- T‘Räm˜`uęÆéöŃY“‘VŒ~¦¶„FäjÉ#Xd‚$lpG«ś”xxÕHœ‘Éļuéeˆ T`×?ˆä‰Ū.ōē­G0Œ+JņåX@b“Š|͟Zdžāļ{¤‘¼O9!cš¶-+NµŃÖFó~ŚĒ)<¬jŗ„ΘóBÓ2Ą”CÜz:÷ &¾§įĻŽ7Ö)'†5גņĀyŹĒå/1źOćķ\/t; ķJõn-ū:ģ|’((Z2śņkSu£=£įf‰įć·°øH%HNČAÉb^•Ć|QÓ> jś› YłĀgS,q‚Nąq€=ż©4kΊ^×uæj§FæÓµK[˜Ü(IŠ€ĻßJś>}kĘņéĶq¤Ć)k˜ŚŚuX÷y±‘Ī;f—*&[Ÿœæšę?ŽŚŽĘRņŻöķd ØĻOʶ>jĶŖ„Ī™%¬¶„·d0Ź;Ó±,°ŃbĖr© e ¦æÆJč#ŠeÕ¶<7)åē, żļoj™JĘž%ųyq£1ÕŅy`ĒĢ«ó†=~”iZ$Ś…«½„ ŗ1’€d£c8ö©S ©gą?ź¶Ńŧ†W žaq õćóÆfų{į;Eŗ›˜l—$ŹHĄfõ«NäŹOHÖ<£Ūk¶ŚžČžĒ:+y»™1Ļ_nj]oĆci“˜–bˆŪŠīÜsÖ³’Ōē™ó[_ŁM} ĶĢ—!äbxĄĘzUŅN†G’ ¾Į#ƒŌ•'×qDĀVÜŲ°ŌōM.XŚĻO˜ß;ü΃*>£ėoāu[95+Čgšß+ēŃ@ąqŚØč…Cāόz՛xĘŽ=öīŚĪGhš ēęĪ8#8ć5vßF"mńŚÕ\HŽ ½€#846};gńJ×EÓ£·Ō,LšŪ6R{G.ņgžæ„|ÓńžģųņćN¹Ó™ķ®Õņf+€ #q…ŒnĻU¼ų‡Æź>°Š¼C|³ĶoŒ>9™1ü_•rZ¾Ę³¹g®OškĮ“ü4±Ō4Kķś‹&ŁŸv÷ĻēY> ŠśĀÖ{KŪc-°;WŖ–ǵ.vUĒé>#“LńäÆb³Ć`FT‚㦠čkńv•„^^]ź^˜C9;ßxČSŌŽ“ƔōæźŽ ¹ŠŽÓUK8õCŲ¼Bö¦ømĘO=Ī“¤³ŲĶ;ņ.ä€pGµ!XšŻxS\¼‚F 4ŽGßĝ«Żō B·¶šŪInÓ2īĖ0ĄÉėķU ±įß¾!ėV o„ŁßA”„©(„ZR@>µē:oˆ4­_EµÓetDbK©nSŸ­lk¦a`1‘žā¾ŠŠüm‡ŠĆ«nŽŅvTŽpŽõ‹¦ZG‡|IŠĒÅZ„ܚmåÅĆņÅ6¶:’+žšÓYéӽ؄JĒ2n=Ē·ą*U7±j'ā_jź/ ĀC€H ßß‘­“°Ģņ1gź h ƒŁ­•øÓāŸū<~üclƒ‚„yµķ÷‰|EyØG®Ż›Ūe>XÜrQG@i°t‘Óx;J×õ«Éķ“»€ö*€©GŹśs]Pµ½š^¢öZŗE$Œ „¢`7ē”4œ½™r’PkŲ‘Å숮?„ōõĖŪŁBÖÖCö›É9VA€Ē†»]¼acgg¦ZėZż”JFų%œ•”śķɵeŌ—Ś­ŹZjP2Īć\ė“]V‹ce-䇖 \Ļ„Éč>]rźĖWšĆ@¾’HsµŠeK ōÅRÖō…{ÆÜ“— ;(d?x1źĻ„GŃųw–™«=ĢqĄPy\õnąÖÄ=Bk%“ŪĒēĆT¢ń'^õ2f2zžm¤\£Ę÷7ēŹn&rTśUßjŗmŻžŸoö8„ń‚<čĻ.÷½Å(>ƒŽē•Ķu}låćø!щąc#ҽcįÖø5)¦­nÓA<%[Ģ_ŗOB­]‹’9ˆ:%÷†ļ.Eœ^\+&żŲ?2‘Ö¼ÓSŌo&ƒ÷–‘’W|»MŅ’±”ąĻ jŗÜ—sŚDķå&YW–=Eh_xoĘ6×öŚž‰y<°Å"4¶įöłœ’ž”Ó¹§µG­ßųĀŹŅK;G/m|ą z·ɜ׫ų^([mbH?Ґ†f ÷€©™Ź”õƂ¼Uį£Śi7ÖÓź6Ń’¤[ČAxńÜ_)üy¾7>!D—°ŸŽe7Ž qåQg{’¦|­āo^%ŌzV»¦]%“Ÿ¼I™>_^łĶc]xJßK|Å0}ćŖäT™­ĪūĆŗm¤:bDĢ#hdÜI<śV„Ķ™rälSåÜǚ«‰žį‹ķ±łžt[wl džķ2ęēĀsŁEĢX ńœ[Ÿ›Ó¹¤sHš;Żl bYrAÅuńŚu™ŃƬß#eĄnŃķłP.Wsŗ—Pk}6k²‘5£‚”ńĘ}?•yæ…uø#ń5ŗź&)ą's"¦ ’õé›ĮTX\Z£ŁŁYČm!—%cŒŠ×˟“ƬhK5åœŃźöłŪņææ?ΦQ¾ęŠÜų×PÖ Ō-s4'~OŻś×Aą©ī–ā(mfhå-µIśWØö;#.§Ł <«ĘéŖkQ[ S?¼’ ÷»˜&VŒBTGĒēó§[CJģւ/%Āw8ēÖø’‹mKĀĻ[„¶pā<ņŻĪ?#YUv:Ø6Łóž«¢i÷Ś]»ŚĶµÜe8ĮÆų‡ąMkĆ6WZŻÅ½åŻ“mݵ²˜®XWŌī”SGąŻfjöwÓo†ÓĢżī̃źk迊¾†÷Ā–¾/Ņ,O*Ž—bž¹õäשŻ\ę#ś2’‚ž×-āļ†ŚĻģåā]mcšŃé pĆs å”ry«öcPęi£`ŠHƒŽ9¢»Öč\§Ó_ü`o'‡u ĘūDKū£!ɐW»ĪŅY]Ē{lvĖo_ö‡qų×#z™Źņ_’žŹvžų…į_Ś»Į>Ļ…üEöwˆšŚ°Ü¹#ķņ õS_˟ˆ¬&Óīd€ĘŪwx5-9¢ŻģßćŖūÆc–¤t8Ó °–Ē#ÖŖ.÷9bĮrF+Ó§±Ē=‹9h× æŹŖÅņ»ĄÆ'ęē5d\­)ó2 ķä)žvķÜ.A hĖzÄĮ—ęĘ@Å[‰„XBÜ)ę‚ć.ćŌ… œ•÷8Ļҧ…Ā’¤“éšg]9w7C-¤°‰¢d1Čŗ‘ĶVæšnķšŅéšēģćnīI¬Õļ4Vø”‘5¹oø»æŗOn€S·DuĒcśŠ¼Ņ6!’\¬ƒ’]yŽ”Dī„”†\©>†¼ŗŃŌrgĘ’>ŁźŚ|ד“ÉØŁ:Źxśœē śƒ“_iŽŅbŌ5x5×z.Ø­äy’TÄcpˆ ¹#£±'óµ’*ż™ĆÜų—GfDoßĶyóQ¾éo¦kņ^XR‹ēDĖ» u®Ś²±…XvB›QIąŠĖXSvIaƒŅ»£.‡ āX‰+<čŹ ĄĮ”$uvÄĒ£wŖ3"Ž#„‰õõ«ŃÉ·r°œŒŠktdé ą’ŽK`ŒóĶMęm £ćփ¢ ¹’éą)s5„Ä3$ńLƒ ©Ź{kļ„’‚~ŅŅü+Ҿėž ’„ŽŅŻ|“ŖÜsutdėøżi1w>$ń”Ŗx‹Z»ÕµeY‰Ų8¤QŠ®”"Hƒ;Ž“Ų¬īÆłö'-¹‡SS7aØ_Cé?ß³×޾.kVö šĘ„®Źģ"{†·o&&=lwÆ®>$žĘ¼¢h xzĀhn&·jA“łcē éž8ó1„ Õō'ö`’‚SXivŗgŽ2~•Ćźž%ˆAssźĒ ™@6żA¦£s¢[ŸüMųł„xyœŚjˆ÷ŪŹmŽ0Ö¾ńoÄ+æźOuˆq!Ū“šŽõŃN™©Ājvé2™бž!×Čźś4ńZ“öŅ Ń»g”ļ‘]ńŠĘF‰ŹĪ<ČÉąƒŚ»/°Ip,ķY “¹„)w!@ōmĄ×wp›…h¢Č©Å}įļŲŪDPĘķÄ•®*“4ä=nßĆJÆ‘qĄkÓt3ģ°2M ƒžCEa)ÉhsĶĘļ2Ķ"$v5›”ų€A©Įc$JźŲSóc'°›G($HČNø'œWy¢y˜ŒA覚SZ„ĻrmnĆcßҬĮn‰!8u_z܉K”eDŖ¤ó[7–°=¬w0LńL­‚ūĆŽƒ#œŌˆ–2²šąpŲ¦čӈ]DŠ,Š­h·֚’ }ŠŽ:ZĀžŅH$m™oĀ€(yņ %S(ĶR,o9æ2±ŗ3*Hoæz’[įŠØß¦DČb#v…dWī5NKhX•UņåĻ4†VŗÓīR٧¶euEsVƒ½ÓDG”ŁąP GA)–Cr0ČčkKģ)e‹aæEĶ!ķ–Rņ–ņϼēĒZE¹æŠźĘ5wĘU€éķUĢĖ‹±ƒ§\ܓ!Żo/ūUٵ®Õp7#Nd%£E+¼H:n¬ķBŃāJ€™Ķ#&aj²OiĆz+*ÖžÉĖC#4Š_{¤j‡ŪčĄņ+Ó|=āģį܈ī­ŲaIōŖQۘ:„Ōfīdhvڹ'Ž‚¹=KO·š#¢9#ź¤ö­-d#;LXōņcSņ’1]d±y‘,¶ąoĘhR{;É"'°ö­Ū[°įrx=ź/Ø'¹w@×É?~*ƅ|Oa£^9‚+–*Žü =5±p;_ ų†ēVšßBßu•ŗ×®]i3٤oęĒ8aü-’µ/aĢ‹J¼½‚ł­ī-‰“ pyÜVŽ č¼±,3łVehcŽIc&2Ź8ŅO¦ŚĀEͬ>Y#ŸZS[؈¦nG }+6ž7ŲŁēzЊĖO7ašebō©"Š ’Ęcg‘Ś‚HģČK£ĶÓõ«—ś0ŗrŪK;v ĪRŌ” 11 ŽÕVęä¼rHU8'h49ł5Ż2W6‰8‚ń³#"ŗ6'¹$Č2sV¢ĄŻ¼Š·AÉ8WćŒVJÄbG“1Ŗ„ÜÓdµY½_—·æÖ©źKf/^4Œ“GńćėYĻ\iė°¤!½¹§č© ‰#‘KcŽh.#€;ĘFX8¬õ“;Ō«mlēšź"’;hU¤?Af«=įņČ>ŻÅt’Z›VPåYOj£ż‘5åŹ½£‚Ż “@ęµc&Ÿ3yńŁĘ1\¼ČŒw(Ś= Ź&žxlW ‡Ø­ē’ĘżžY MŒńĘh1%Šw·!²½łéT®ģm®ÕŲŗ«÷qր2ķŃ­¤&•±kē1PY¶Óäö‘DKŹĒõ«Śt@¹v|ēÆZ³«N÷6Ķ~qšät½2{kĆ$Rιl•bHżi6us©:Ā#CF:ćæŅ°Æ.ą ¾AŻĻ!æ•bĄ¶’Eyfa0¢Kü?ZĄX®¢•ŅdĆ)Ąē$Ņ-Lļt}NęÖ܆·dLc SW\[‰Ź¼{H={j,­Y”?ˆt™b6r°Yś:Ÿ­rw––ҳaƒ0éƒWģĢŚ3>ĖjŖģóׯҩ?‘)#īælTøŲE)eŗFhY_į`y5-¬_i&6l?½"ć+ ŗŃ0I`£ž¢µōy-,‚ÅxoӏʑNeWKIĖɦĻlń‘Į®LŚ]Ö;ØöœūŠ•ž‘vFX[v:JóĆiäNdY% ‡± ĒI£Z Ė•Lć½ė“Ō`ŸJ¢1#«r4Š'›1“Ė(NJŻH R m?JŽC,£ģņĄ’Fw÷®PŠÜŲȾZ:x=Ø4„ŗ<ßčÓé7˜cI~bqY–iēLLŠy$š03AŖr%³›å‰%^„‘Xz½§ŪcrÉåŽŲķAŗ>Rų”ą×†6æY¢™AĪ8Ēb:×̳Ä.lolL åŗ²a~€Šię|3ń3Ć£ĆŚæŪ!ŒĀĢ6ązU} {MRÕ;ńœ}}« ‹¹:ø,ŽŚā9a(<ėų×a¹yo·ĶFˆ/ńƒŽøźĘWw}&¤Į!Ÿ*ŲfŻėQŪŁóŠ0é‘Ұ”¬tA–ŪO˜Ā|†°ŻøóTLj””’5På±gJ×ßEæ‚H®Fģ0ģÕõ‰zu--&€Ē3q¼'8®śgCU’ŻęV†³’«ĄĻ8ŌwĖ~©ū’fĆČō®“•3—[(ķī…ŠUy(ĆåcļS^¬yvöPH—2£†Øš7„ŗœƧN®Š¹pć<ßҾyųį‹«µ–ö5…ī ćq~ėšh鎧ĪņYÜiīQ•e~ŒG®ŠÖ8%·T8w=«–KRć­ę™iĀ 9Ū_A|ń5Ɵ Ņ..%–"UՋu”Cpq±÷§„ļ'ÓļI&’~V N3Ēξ—ŠüY:F•§ Ėߏŗ`ŽiĄŪo„µĶ“n዁‚kčo jQ_Ū!Ąō­ŽY+M妚8śÕ>›ę&SĖdQ܊Ś;:…mns,¬#ĘsŠšĖŪĖi.Y *Ä·%¹¢o”iÜ©®YĪöLöŃ“c¶pVVs[Lƒ©<śšę”ŗŒjö7-łL‘×nq\¤;į.X£½@8ÜŻŽ0˜•7c€(Ņõ£¤Ž-¬”ĢLÜćØQ܏fzž’Śž/ ÄFŲśńŠ–÷D6v²O + `¤ÉśWD|†©’é^*kIE„Ć4r用k6WęĄŪŸ”ā¶”ŲȋUŒHvĒ­u1¼ÓCš|ˆeĘī¹ÅmXę'ŗø™œ“(<īõ®gRŌä`ŎĄ[ S·¹µT&āÜ9Éł³Ś‰%±™·Śź1ß5ƒCJē)®j’Ų± œ±VmعĮĶPҼSc®¬ūob{ˆ¾WBr~•.7-C¹3Å…0 9#*œ–÷@ŗČŅ4-Ā’õ©(Ł—Ź½)'gT‰äWr}+¤X/"ˆĶ3Bió>Ä7NĶłŽ3Ą¬1}  d »×µRbŒO1ń?…txµeŌ HŒĢį™—ŌWm„Ė1Ɖ‚ ÷8Ŗsf¶;‹w7… )n°«Ķ§żŹ6°=E.fēQTF!L€õĄ¬Å¾“žFXĒ– dłĻµ9Ję2ܖ&·T "ī=F;T1XLĀB ķPÉ*_¢< GAŠĘdŃBd0øQ’O°®rć.†2µ“ĪęHV9ą1,*¼‹³,N¾gŻĄ4 HŁÓā™aFb0FkSū6U W2)9¤%Š“jŲ\BæŠÖSéļ+I¹²3ÓėxŹĄ[5šĶļņیś{T/k·%O©ÅiqŲ»Ԕ·#ĶmüćŌÕ×“ę„Lwõ݌VVī>Ve­Ō3Ģ6°‘ĢBšé„vol†3"IœŠqq4bŽčśu޶ˆ× NŁA!€ōż)tķ5ą`Œ$xóśV©XGQ–‡nU™:` óZ†PŹAu#+9 L§-ƛ»OŻĒZå.oń¶ø“n~dćZÉÅFE¼ž]Į»z rk8šŽ  ±>^æē5Iśté})Œ¼^XéČ—¶]įc`2=ż«d¬3ž;ƒ.w6å8ąŌwÓ}’5ї“ņš*d˜XĢ:Ž™q EēȌžßtU(ķ-ļ„.& sø÷Øq°ˆ6OfD1ĘŁ-ó:\ÓŚśx•TuŻ“øg"±›čč~ų©ō-;Ć~ŌtE/¤žĀXyˆł98ō’ …ZŹ}>d¶oķ d,ŁÉęSƒųd׊r4xŸcĆćų+ų®K+}°]“…ŪĢūæ@Ż„t¾,Óoä³Óōkų¢D¶Īžyź:Ö°‘ŁÜ଒µ<'ā-:ļJ†śėKl+H§ī·aŒś×Łž›LūPŌ&o³Ü 8Ąä¶3йIwž(Ō<)āż6ęāóG†ŪY-ˆå “Øw×§ZóĻ…ōYķuo Ā,ēŠÖéÓ.w:ń‚Gćü«09ŸˆžšO-®ZēBŽ mU˜\” ę3žyƆ“?_čŽ'ø¶‡Oš×FBbY°AėÉÓŽ•Į¼S¦Ś“MVče-žÆåĒ­zO‚4}Imķļ>Żk$QąÉ 1ü+Cņ>œŃµŸ4„Ö“Ų/ō–¼Ū#łW–ÜųgGŠ|EØėžŽM6ŹāBĘÓ~åO¦i„ŠØĘʖ„ā¹4č5h xbHį'xō®ŠĘ!®\%ŁiāLŅG^ÜV‘mtcųƒÅšŌ–3iZ5ä—On̦) #xģ=+œšgüKg$ŗoˆ,䀏0ēå8ĄĻ®4Ū±œ©ō3üO¬Kõ¬ByÜ܌u÷©Wā׃bŅ$š–£ŃźŅ!1Jå\wéMy¾ĻsŒŃµ[uš8šāI“vć.ß½“^įa|·ZtšUØ ¬Ä.[’h)+/ĆHō­fM_Z¼{éŁŲ‚ĆAķų`W°ų/D°ńÅÅæ…¤Ž/°2yo*F¤®O÷ŗŌČnGxļąĒÅO…^.‚owāŻĪé ĘcŒs’:uÅyŸŠu9|9ā3JÕ“kż6;•VV~˜?Ş”¹Ķ}”ōåĒĀk wĆPkŗ6£sʱ‰×"CÜ/į^{7…®|?ę >?%K™NFįŌ} /i©JÆC£²ńLsÉvĘ µ ÷N<Ļjō’|J°ńTšÄĀŽŅī"c"Gü]j”ę%Ŗ ńŚBlåšī5ITØRx>’„|ń曄ž l/€øGĖķ óĶL»¢\{³ššźĘėL›M×#XD1 '$äqļZšĪ›kgu=¼1Ŗ[°8|sSfÉåg!ać#„Ż>›uo<֎ź‘óņóN8®3āg€—Xš/ųUµnL韾ų8Sź8«Œ H«į_ų«ĮöįMQc]1€tv?2¹<ćŪō·‚õ^ҌL“ą9\ó¹{š .ŻŁčŗõ³Ų^5½•ĄuQ9ÉÉ8’œ~µń‡‰ō]Noź7Bī;ˆšWó2ū™ńčkAŖ¶8ėŲļōé&ŗ¶¹XÓ#tLWõŲųjž}H$w $³nߍö§Ń·’ '¼š²ų†ŚĄ¼(ĒqĻ#Ž˜ÆÕbO> u·ucņį—iŻéQ)Y‹œźt/ł¶r]˜\B©8ŲGsĒ#­sŠŻx§DÕ®ō½_I ńȧäOJQŸqŪ¹‹ēømü6ń#cp8Zź4sžą^^šĘ†>SśÖ—F†t ĶG϶°¹ÜĆ%¹čɬ™ōūÆj3[_<9q¼€Aī))…®Æ5Awm"¼;TäO­y?Ьo¬¼cc¦kQŽCq4r>Xpzg±­”ū‡)Šj’ķb¾‡CÕ<›Į |Š_LžŻxkĒ^ń–½„xkRÓ¤¶²ŻÄĪ7o*y*;jŸXśĘ󥎵‚Ņm L3DYĄd<‚n+[Ō­MŒÖZŚN …G̘éX ł#Ɵ ¼J¾.³Ö4ļ}«KpdŠ;nˆńņ°\Ž­ØŽXOn”Ö6Ü‚xcéA“esˆńÖ½ŖjÅo§Ķ=Źīū"'±ļōÆkšw€ī5 ®µløø€ö®æ9ų¾ŸZGŖųSĆŚtÓ§ö¬©i`ŲąUµéŗ±©Io{e«éļ1ņČ@>Lt?ćYH >Ó4 \ OL¹Ż<®V{\DAŠ‚=yÆ0ų£ ·z‚›ĢL’7d²špåPD„c›Ó5–é§]¶ēč«ĘąH„–kŪ4f™Aėœ LŒ¬jXx¦ź K‹H‚™d…c€Äę»kKĶ>ēČk\±ÉŚyā© Ÿ”±t°źs[F†)—ž9ĘI®¾ĻIƒĆܔŠP6‚GåZE½‰sgĻ÷šŻęŸńķm짹ӚEO–3˜øėō5ķw·–RÅowœšLFęR¼ķšŠ“Ī“Ć_ōKŲgšāÜܦ«©"’}}iŗåž§%įJŠ“µœ†ā¦Jśį©ĆkŚwöt^,ŃĀ„¾oLg¾+'RÓeŗ°K„ÜōłsõØJĪÄt? jZ®ųmmäŗŚ P$YśŠīt»¹-œ$̌?Š2½iŹj¢tŚĻ‰ļ¼S=«Ks#aDGž6Ąü1YŽ"š¾£s„ tĖX&»NT;ąYņ®ƒåF’Ā›=sJ¾k°gµ¹ū¾^Üąō5»­”³æ‘Pa÷"“ßŲ~¶fRVŠ©m„YkrF·¶l·%ĄIą©9ż+Üd·Ōō-Źi-%™X#…luž•Ŗ•ČGhŗ®·ąĻ[x»@„ZĢTĒpź0dRzZ“↪|c¾āķå‚į¹VŒķ!żr)ŒõƇš•Ž»į™4ļG”¶ŲC™ē‡¦¼×ā7„4(ą]WĆSĪė(™XżÖ>£„fą±äZF±*9Šņ2cSŒēœzTž#¼±'ʶ{xZU ¬9Ćöėß5¢Eó›žMnŹŚxn…Ģ7[~ü‰ņ±õZś£ą­Ō^ ŠõÄ·5됰”p:ŽÜŠMĻ2Ö¬õ#W½°…^icķĀ…®ėĄŚ”śž“{c®iPC}o*POAėŅ€GkįoÅćæ ų³Nšä–ŪVLYģœžųć9*æ­|•>«=»jrXŽŲźö®čĖ"cp|æ—Z āP‡ćŒ ÆŁļyČ»ag˜Ōt™Æ]ėž.š½ßö•Ē–ģ$ķŸ~h:b1Š| Æj†ů`$$ŒÆĀgךĶ}Ūš£ąöŸ§Ū VŚŃö€«•ÉSŠ™D¹Il¢cÓaÓ£HāŚ±>8šźäʈ ė+zŃéåcVįņńNæ‚7€E8óbcƒƒŚ¹+Dé””š‡a»šē‹õ½éĆF’y£‚ ōwčkŹ|UāMbęÖM2mBi¬„ņ1\Ŗ™×Īö<®Ž$TĀ$Bs±¾ķ~²ü(ńƒuƃ:Fā-8[žęuAŽMŻIĻŃN/–ĀęgĶ_¾ źß²÷ķ/ą?ųnŚÅbžŌ |Ł F!Ü sŒć'żÅų'ā/†¾1x+Ćæ<$›“ĖųŹčw(”ž•Ōõ…ū ęʓ«ŽxsÄvwŃ$¬Šą½'½}’įŻbŪÄzE¦„#ĘėĪŽ™¬1rčxGķš#Ÿ“ēĮoˆ’ü_kΟ«ŲŹl]ŗĮrT©ź@?õÆó§ż >ėŸ~"x×ąē‹¤eń‡Æ¤“ž"œ²ƒņ2žźWŌĀV©nėņ’‡1žÖ>Søg‹b¾UśząÕDGi•Ū×qŪc†¤^Ź÷ŗPŸQ޵FES°("µNę~X\– ąē½'ِaĄ#æ©€ņŲ‘I“pĘ>•tÄ lĪĒpꁑ²*䌄ŹüøPHaĻ„D¢§2H±·lįOŻÆPų9ńKƳ×ÅχŸ|ØI’ …©Apc’BØÖĮæx„Œ|„r¦ŽŗgśWžČµ?ƒækž ųÆį­A'‹P±®aČĢ2‚3ėœž•ļʙę UFåź¦øń4ģĶR<[ÅŽøÕt»˜‘ÜGĪÓÜzWē‹<#'†µė’9V=>ķ̑rścŒ×™%`>Oż«> ?Å_…†Æ”Wŗž™ Aw¦ZxHł[ߊžC~(x2O‡ž6Ōü"L‰3B_©ņ£é]w±}.vh„eaņµC!Qœ×£OsŽ£³eVm€Ÿŗ)6P„¼ŠŌē“Ōx„”@ ²g®zUø#O0™éĶ£q²J‚BrCųØ·#)f'Ōߚˆ»2x³¹Ąåž•x2ĢwB­³æcAÆ2Ā³÷sS #`ŃaŌ範їFzÆĀo„^;ųĆā+oųCM¹‡»Ż<$„ēc¾yÆŻ/Łßž OįŃĶ×ÅHļ®õ[‰%‚0Qmu,§œœ×—ŒÄņ«#¾”t?w~~Ī_ ’gE“_„®©į¹aQ²aŅLŽH?μļößšŽŸńĮ·2&;eŒĀņĄ›@”‘Ž:tąU­wc¹SŅęü7ćöÆń'įߊ?gŸHo~"ų>Rņ}ū»PÄ)õ$ ū żÕü#i~ßi‡tt*½ 8£‘±šŽ‘^Żģī l¬2f»ķ&åōĶÖnļ Ē<7Ņŗ‘Ē8ō3µ}~ī ł“{†^~^­ō«Vڽ¦­kE„ŽéFJ·V鐩\ęuG¤]!Fų#œóT5O‰zEŌ ŸjŠÕzÕF7ŠŽ4¬|Ūń3ćĆOé··ƍō2tݶ'nY€<{Wę'Å/ŚYń˜– \ˆm>i¢<2tĪ­vR¤hŁó-Ī”6„żAģėŽ_™˜śŅZj—­'¦~ķuņŲĀR:;KŪ—ĘNģw?įZ’M,‹ØffĪB­eRvÖxw¦®É6§{”ć„{Ē„žJex%Ė˜É\²—rö=Aü36ŽšZŽ&b_—œ×²éś%’é”ķĪ( ē„a'؜‹ž‚ęęńąX̲©ČĄēč79 e18bG5$sĘ”¦AäLß#åĄļ_-ų’ĻÅZ/Šm5=:Ž ­)…$ļü>•Ŗ‡s}ŸąJĖZ‚ŪĪ U8^:sÖ½;P“†É£k)RUĄ9„]ŒäĢkėæ>xä–4iĒ•Jś4”+"²·ņ Č‹KŁ4Ā9Ōō®’[g 6e”u“‰Ø¤l‚P3Ž1Ž ³Ž5BREĘzĶižÕ„ŖŪ—ŲÕė{ÖwĖ)V€'،ņHØ&Øłßgf@ œśPt÷²Čą*Ø*yėVīIa˜qƒAœŒėˆ„gŒØ`V“ė×BKœČ›¾n;P;»jtś‚ŲĻśŪ‘ŹśW4ø­µ¢l1źj ±æv–Ź›£;żńҲ^ö@Œ#%ր&ÓÆ’0c‘ęļM¼‚…Y1Č”Ä7ˆŠÜMcņ狇ØĻJÕŅõYne[Iäłŗ)=čÆK"ŅNŁuÅgÜóŲH¤žƒŽ€ Šn|Č&ŒH½0yĶp¾2ŠÅ³\éj«"€H^µpó6ŠŠłZēĘŽ ¶ńP]łÖ¤9ēk/®„}{į]AÆ4Kg%$$pkQT:C†‰¼Ń‡¹+łXøF*g±ƒ–¶(ÉjdŚwåö­«ē¶Ż ¬ŠÖ#GG “øŽHщō§4˜’ĄĆhČ dÖ·kr¦$r3ÕIÆųĒšgDųc W±Ėē¤ĮՐą¦cV¦ibOx2o [YXĆ)øņ€E r@õīw²$“.×{IɊL»<ˆ]X¦ß|ROj“F揭IČ~ĻHƒnõö­¼‚TņĖc©4Ļycķ €N;ŅO±ŗ•%ćļķAM–Ѷ!ņĪ ĖāGb»Ņ‚F[G²ģ\0ĄĻ¢»Xn ģ»­’QA›ƒ®µ¤˜T…+–t5Ė6yī ^Ō7>†Īķµ# i`7°\1ük Ó%xƒlo—§Ņ“R°}v˜PU—é[jØ+;m>¢ŽpV’ÅcóVLpp+žŠęÖ\$§lŠ€'ø‘aąoÓµYģćtždōśŅڊŁČßi·„•÷Į®#S‘¢Ć!ŻŁ}(¦™Æ-܏gqÅ*ń–ŃBŃHŅD^9IźZ`iͭވ×ĢĄć'®*KMzź)#’Tlõ4‘{PŌ #7­½‡§zĮŗ±7^ÖdņŌōjB0Ś7†B ‹»8Č5«nÜ«|ƃĶJ(ŅņŲH’¼§9Ēbķ$]wc<ŠfՊ//”©ģiߌvé†@ õśŠIjŚöѾ`AŚ–óUvI-ćĮ"§cĢļ5|j.BŽ8ź \{ūŪ¹ö³ ½A¢™j+…$!b±­ ÖĒIõĪh j9U[% ī4D·ÓŽ1*‚7 ξĪä\FBFHW-®ĖŖi,·6޲Ūnżąc‚£ŚŖ;– I§x˜\Ś–FBųū­Ž±"ų„æn}&ā;رPĘ2¾‡„lł“[µż³˜ņ+VxK[4Ÿ½zŠK€ÓhģA UĄćĶ.Ą¢Vł‡½*ĆžbŒŹ‡=OJ°±KopTø 2:0ØsVh6Ō+0=óŒw®™5ū:ĘBžJAŹĪkSigž.üsX‚9!ŲäS*7DS“«€¤…õ«ŗUåķ¹/m3uź+.fß3ÜJ˜nsļY_[]Č^ÕÖVRAóš@l…Y yT”u!ø®AuXęžāf[•8ĮźhM+WūNų®£™ Ž¢ŗO=LB īóA‰….•»Jƒ9ąw«qDéµc${śSęacA”v„njū¶$>~čøŠĶ4Ė&w•«o)„+IūŌõ¢ż¬ó¼ņŹØCÅÓiķX—}Ó\Ę"śŅ¢³“ ƒl€°÷éS\XNŁePäs‘@ģG«y-o2FÜ`nķ\f©ØOkęfčsŅ“ƒ*ŚŗV«ē^ŗÜN® ’¾Mw‹$”>[H‡øķZG4¶÷9Ä"鑎ؽˆ._fyȬeø_Ł®ŹvĒjåžYć¹960Č# lEØO.D›XōrŁÅ+«ŹˆĮ‡Ģ9¬ĖŸµN’F]Āž„P8³ƒøšęÓ<×R1źFFs\¼¶vń³&Õ ×éA¹Ķ\µ§œŠ¹½yĖkwVšĒ#()b’V6†Ē‡xšČź¶sBe8,3Ų×ɺƁ}§ÜÜ­Ź9RGJfŠ7>|ųį ]fĘęįą\ĒĪAöė_Ū%։Æ_iĮ$··I0xlśTÉ{V«'•ļ"–UūČFk”øŗ·œ&ɃŠWX Č^äĀ!0ø ĪxéSŪ2Īg`{§LWŸQXź§±éšM„„ś{Ķē3¶0Q‡$ūWj÷×36BŪgHłŖa2ĪfųŪł†6{€d}Ó^ĒšĒĘé¢Ī-Žkwó~]®3–?ZōhȤQō”Xõ"¹†]™!Č_åEÕĘ"dU_^•ÜĪ +M“¶Ŗ±ŪGø`īĻO­q—Ńmź²pTąTŹ!fb\Ü“œ23žMqŚ„°Ō"dŗTbŠUxó¬gc¢>Wń7„®,ī.Y­Fd$œ6כÉa-‚ض2y`mۜžÉQYźoZśFi­<¹¼Š¹o”ąV§‡uŪż:ņ;˜Q”Ćæ8©†ę’géĒĆˆ6~'Š­ōżBĀŪūN ·>fyķ^ćį’Åiv‘;õÉäWDw2’¹ō„ōųJ<™-ŠŗĘzžķśFs”91·Ē'= j™Ē4w—Ü"Ēžg­oI?ŲąifFĄé[B] 9 Ń]Zk …U‘6ćžÕ•mšŽŚāéŽ?-¶@+€¹Ŗh“‹‡ƒ×ģSYN€“ĄĒ­|’āÆk<‹,ņĻlvīłōÅsŹ™²9a9*ā7LøFõ©­4XfŗVHžFčzā¹Ü ;ø|yr™By'"¢Õžčŗ•¬óÅswöݰćę¶„P]Q-ęæąČWGžIÆ ÜķÉ®‡KńŻ[¼’NĘ5=ė©+ ČȟÄÖ77ĀՔ¬sʐ?:_µo*ÄČŲ©#4ĘĶȊā’O“c–#ŸĀ½ Ćq¤×h DÄ?æA“µĻ@m?¼žVo˜–k›Ö¼£^G$öSɧĪĆ'y,¬~Ŗ9ŠGĢń½CL—G˜ŁŽOĒ9 ¼*§–² FĮ}ÅCwbŁœ×‰tEŌm£IbY°ŁžT’œ×įÆXh—÷‰ŠĢ斯Ē9¤53Š×MYQ“~ÉG5±ias’$‡|HSėHNW'[«xēĒ “Œ1ĄĘjÄ·22mO»ß’­A&C]Ól6?¼ąkžšˆ<;ā™źš|fī1°ĄI€,Ø?­e%cźM;Į^‡I“Ž YĶi"¬ŠŁł†AæJšĻˆVŽńN•qm ––r^ÜĘG=;UóšFM³Ę^,’Ž ßM½Œ‘oHŹīē_.ü<ÓüYqćŁÆ‰oh×q…}*ĪÆi„ܓkzŒĖ„”ĮP{ÓH˜üVgŹŽ?šmņėŅEk}”§C(–'ŒņF8éŸóކ‘höó[½Ź˜n#Ī9ē²Šč§.‡{sŖxšōŃ攁”d–÷ĒŲi76:ƒ„Ü7RęPJI{Ā£œūˆģŚ –ŠŖÓE?1¼wóÆIÓŽéĶ,ĪVc؜šj±›—sVš]•żŒ’¼{gŗŃœ2×Y¤Į†<)<āAž¬—\ī#Ö©JĄ|ēāūĖ vėŁ5¼±9A']Ē×éYŚ&§®x?R·ŌlnćĆ»‰įTšr9µEÅ»ž›Øų¹ā²žņīvPFąTq ®gFń=·‰ļZ¼ŠāX ½ć¦E)-Åõ>Ś]ųN=.M;OHbaóć÷Ž}yę¾bńžŸ,Wh÷Af1œ1ö ,øC޹ė?4ŪßÜĆ„ź×F)¶łe—©”ĻN•ź>&Ō<š«U¶Ņ|O„5¹ž_*Ł'ž1ĮĻ×½>CJ‘ŅČņψ:. Ņj¾’ź@ģĮĒæZą ų™ā *ÄizÄ0Ļj\’8yŒ{·Z¤¬gcŚ| © OG»Ī.`D-æh\ō'é^O«čw ŠLypnxŹÓĮ›łģĪÆ¬„ žH®ŪāeʏāķbĆÄtOMŠ»w— ˜śœUņ£§šö« XŽŚ¬*. ŌšNxśę¾Ō¼;šę’Až[Ķ=Jīą nqū–īsQ98‘Ÿ(ųĆöušwˆ5Hµ±–Ä‘åČöķ“…=żĶrŚģš<%ö[Jׂ@ŽZĪꐎģzśf³Ž.ۚ\ö? ų’{Ė[;ūĖv»Tó|»Ķy÷ŽõŪ½2ų[¤–wu•¼gqXåī|g©iš•¤1›®AU$zUDšÅ‡īmļŚŅ=>L‡ltG<ē8ė ÆmO³|9šōæĆ[ęm+Lŗ²ˆ6ūß,oG мń_/x+ÄVŚ>±{£ŲßµŃ"H0>šÉ’ėS¾¶Ōč‰uŁŹ¤`•˜’{.9ɬ2ļ:C2y­ĄĄįÆµ £E3£Ń4KØęßu;ģ,2»s“JÄš ®§­ŚGi$1ÄWk.ī[§>ՉW.küOįkdŌo4åMĄM †,_LēÆųō«Ž ųkmāŻnĪ+›ˆlę$’Œ }0)rźc.åoŒ?³¾\Łźæa³Ōō¹äŚ'¶lżœc$0ķĘ+ēV={FœyQ38ĘĆ»§<Õ"Śü?“WÕ5;«Hķīndw± Ąš÷­;MVå“ÉfVø9ö­bˆ»1$x›ĆĶ%„7Jö|4>fJĒŽŲĒCĻzé§O łŁõ^”„x_ćG€lõ›Œ:ݬۦ`™*żņ;æäWģßüö³µÓŸÄ_²—Ž.˜°”Ķ¢3Ɇõ]§žæZŁ+]/K¾×0ŻAq,sĀČń’¤ćҽēį‹å…åŃ®dŪŻ ćĻ(„£Ō÷yüŠcø·fŠę&Œ;_Ģ?üūöQ¶)įOŪĄŗZÉ";ÅFš  #Ÿc‘ōŪXMŪŽ3gņyā-'ČŁ1PŠH`Ź8|Œ×"Ö®ź9ć"ŗ`ō8źĖ>óŽsŲ“Ld$1AÓµtĒc™ĖK·€\ž•$æ ŚąxtČe ²¢8;NJŗ§.[wcļS$!YŒA³¹źꘓ+ŚŁĶQµ2ݼķļČŁŒzÖ¾čīķ'·øMńH…#<śgō=’ū~ِ|#ų»ØžĖõW›Įŗū-ց,¶;[…įą?.īµżĄ]ŪĘmĄÉ(_™Yˆ•ž%_S­I{s' ¾dųßšśĆSÓ/<ĖO5DĄ`«)Ļ•ySVÜĄų§Fŗ6—W0Ź’č3+Ś]+§HĻ^õüļĮN’d—š·‰nüO čŒ×–’cåø…ĘH’•źS—S†¢œ©P‰‚xśUØć@üĒõ­ŒIĢįŹPzdt§—“jUa““AJVNCÜ„VF€23:äũܹXVĄ Ē©Ļ&’x]•2zŠ2DW įĻŹ: ōŸ„? ›āßÅ?ü;_®ƒ©x iŲdqĪß©éYTgE8ė©żyžĖ߱ׄžčŅi’)±ńµ¤IqČOŻÜF qė“Ōjż-µÓćÕ4Ū}^X­ÓTUņn¶ P7ė_5‰rźzō‡hŃžm32[£ĒP?ĻzŸ^šūėžŌ4»˜Ć"•mÉWķ?y»=Nå-țču_ŁSö–šoĒLl4y/SMń{p­ 6Éģ3_¾Ś­Ž™}–µ¦˜åŅ/ąŽņÖhc‘g+łÖš‘ŒŁÅŻß\iÓĘļ!dcÅL÷—7sŪīˆH3Įė„Lēqøž(‹S°±YķāD”TČ8aÜW–jž,ņÄsWµ»UūńŸ¼i©ź\b|żń/ć‡tKYo¼A© "W9,uĻ„~L|nżŗ.Ś}KIųU%½ģ¼Øø›˜@éœćŸĀŗ©HŚĒęw‹üE¬xŚž}gÄśī©«źRCåEŸī/jĆҼuāÆ]ŁŽhz”ÉŖłd˜ę9—Üņ{W«Iécž¢>ĘšoŽ“ųūkNh-®Ō„ž~ćwśsŚ»ż*ŠĢĘ\ }:֒}NsÓō_ ^jūc¶¶–7#<ŒWÆh^Óō±Ķņ›?0~‚øjČgŅ~šŒ7V±Ļ§Ā©ĒŻąW©iZY:ŹcFaĒ5ĢŁ2eoiwÓŪÉi›-Ś§¶ø¹µA§¼oæqŹŃc'+›:5…ķ„śÜScGÖ»{ĶBm>7Y£Y#~¤ŽŸ8ē–ŗÕķ§EEUAžO„%æ†mu=ÅĀ£œÄ:Ų =„š¼ĶŽC²Ÿ”€EwzF¹¦_Ī‹¼‡}MÉu?!&d«:ēīŽÕJFxČčźøī(1)ŪGĪ&_’_QĮ­ūiŁCĒ$›”Žģi 2'(EgŲ‡Æ±®^öŹx®„¶÷ŒØßĆü?ZŁ[p5bžź$BīĪźF½ŗFłpĆ<*l¬ŲuY׎ßlõ«~c_(’%ēÓł }±š/Žō5<ņ## Ē·j—ÄnģC-łd ƒź+•ÖüK>•ŻŚZKrUI1§VĄķJ1EŲŻŃ<ų|ŗ½ēŪ“ōWmŹLg²ēœ}+¾šÅŒśE„Šrƒnj¹„s­¼¾F³PŪ’Eėļ\¼¬óŅ*ćÖ³2”GĻvɐ¤N“¶źŖĢc•Jc·Óƒ*‚Nņ8Ī:Ö?‰ļļ¬J²¬ 0ąĮ©r¶†ōā|Õā?‰Ž šĘ«žJĶ`X‰B£Ūļžń•§‹4ønmŠ6óĪ=ŗ’Z9ŃÓģt;TÓrÕG?#FńøĘ8¦Īj‘±jO6H¶”QއB f šŗ€=i™?‡ģ`½škk‡E8ćw_Ā>™åM$(Š6ĻKlšLŃē žō¾}Ģx G­9Ü?ļ^ųŖŚ}ķµķĖč ;Jž¹ „q[6ńšŠ6b˲O“ŗŠcĢSfiŚ3ķW¬–DCĖæžżØ*2īe^\Ż $Žučē"ØĮ.ÉTP Į Šé`±–aŃӅµÅœĄœ²Ž¼Š7²O$kG½ZȂс,c%WØ•w<‘³XØ Z:eźŽ!ŽõyĒ’^€,‰Zßx÷ éĶs·QyīdŅ€ n˹=krĀ č N¶Žfäa•>µ‘,Ik8Šbȧ88Ī(I¼Ń.֓8ä· ƒĶŠŠD„cÕģn¤¾WŠy”\äŲWEf— I¹Ł±Ū© ČڇPD@—6¬ŲźGSWž×k5»“3 ŲįOQ@ŒµˆI 3:ž¾µ<š5šR²ģ•OÆ4(ÓéÓXL0łLöčjä‘$±I,dīS³8mGŸmnRy Ÿ'ÜT±h’C„Ųóʜē @Ų‚ WFVaŒQä"…ūžĀ‘ģtŗm¾P— ‘Ōv« $6ać`„ż}h Ām]ķ¤%c±^•‘©źZŒČŪYf²H#„AĢérŖČńŽ+Į(9 uv0YÜČ ±¤Œ9ę“„ŗÕ ØķvįYP `U@¶×SŠĪ8Ī9­“5TXIUøŠ ‡1ė\֣ÿr©żj&„¤S„,"XēŃ[Ų 4„ƒō¬†¦Y›Kb…•ŗzV{JŹ@ĻĢ? ¦ŒÉīd9b˜ķY_k‘ŁĀƒøō R.E#Ź)c^yĻ„C£A6ŻĪ#nsŚ‚9™³&žĒŗE‘VWö5®r÷pCJX uśŠR™& šÜĒū+Ķ£šÄ±ß4«q4Ī\Ū¹ŌĪĪßOš(‹$%±Ę}jģ{ŁųČĒ>†‚Kš\"–Qž/ĢÆ…”ž=ØŅ$‹0§ŌŃöEU;Ÿ~ō*Z“§o– «?,Ē·=č„p¤lĢ3Œē„^żÜØ:»8=(—PĮ +-£¶’ćSüźM?^{Dđ«60r3š sZ­åĢ÷-qF’Er×7‘ܹŽDSŠPicōŠPÖkҽJń“P=† #[ø 5©›—$)4‚Xnd^OŹzī–DKy@Yc>µ\„4kéZ¬v%CńgśTšƒé×ŅHöØ©žzcš‘ā·$Scŗ²•¼„™<ܑ“Š’².Ø<öėdŽyĢlä7検śÉ[„u<ē=+‹ÖāšŲ8Š@Tsé@RFn%‘¼ĄxŪW¼§R‡CŽ€: !Õ…Ģ|`Ļ&»Ļ&Ź[*¶×Ą<“ ƼÜ7t8ć½S›÷m³Ž™ ”—IŒ»[ŚøĘšāĖvķ!Ģ\ō Üćhę ŖśµxļÅ kwŚ[Ž[Ą†(›.źæ69©¶·7†ĒɚžŸ=“źgóódqq_|xš“Č·Ś[GerÓ«‡éę`żßŅ­ŁåžŗŲČbv’MzbÜ7Ž&+)#žy¬jDIŲ­5ŪĖ3 #dm=«ŖŃąŗ•‡ŚķĢŅ–Źķ̩ĒM6zE•ŹY3Ęźbżæį5Äų‚āź ÖB›į=<šęQ±±‘5›Ÿ1“*ČøŻÖµ”µū,-¢ŪEØą²³œ{W]&gQ@ü3ń4Śöž-ƞ;m^0Ą¹!żĮÆdµµ‚įBLLxȝæŅœø.p2{W#’°#Äxuć#½'L ­×IƒÜqĶRŌķšŹ 'Śx›VŠn×SŚYdĘ{WGmāG·"!l’Ŗąīh^`RāŌ.ŅFP–ČČčMjŗ˜Iē @gy)9#\u­/ō›ehÓ!Č4{ÄÜé+m`}:W’xÆÅ7Ś5ä–ŃßZĖą1浌;š–“-xŽCūHŽĆk`ć»ėKųNŌrC÷ŗÓåHŹLŌ}Jį÷BwK;Ö„ZtYBØĶC‘ŒāiHĖ“h1É­ė`°l T„bś˜z„2Ėø"+`į»b²6,|ųŽõ2WŠŽ ŃóXĄ`s“üŖ”Ņī^źcž‚±h®de_Aķ…¤IƒĘ:×7s£µÄ-\äąm"Ŗ1dJW%kė[uņƒæ`Ųč}ź;[»„FKĮ ˜d·ÖÖ Ēæ–ķAk8ٟ‚š•‹RŠōŻ*F­,ÓMĄN¢»ķ2ę9ŅY#i÷:Ӕ®L—S¢ūS¬R«¶WØR94Ė(ķn ^üEsŌīcČ>Z“ŗ She³“§9`{Öø_źžŌWĖylcŽU§r‚{ƾŽ¢<ųŌ¹öĆæŽj>›Ow70OI™Ęž5ęž"Š“½ Ró,aŽŹ$Ź•łIē?ιś–ģõ=CDńÅ֗a Ų_ē ø‘ņŌóYŸ,ķ‡Śŗ›ĶoƱh—āéL¹‚Ō8źi8謳3Į’|gš’ĘW6Z>£.”į‰\Čöl  =3Ēó®ĖPń)ń&¬śŗ„²I1-#…ĮoAŸj‡T”ŌĆÖu»[›ųtĖē·ŒĒuōwĆkż'LFœm²xłm!ń”@ä©O”įß¼ „č^2]ĮŠ·6×xi-ą9ElpkcĆ:„-²™ŒVr\–ĖöĻ­iby]®ĪƒQš’źöī—p 8$’xÅpš‡—KÕ.ķģĶģ  ŠØ’iOÆųR::_Ćń4MŽŅęK‹œ/”Ämƒšłgā}©®om,.5_0F«¹±ź=é4K;Ÿ†Öwzī›i ½¬Vw<±W;\ƾN(ųe}įH£{čmćž`»O˜2Tœ ž}+ž‚QwŌņH4Ūþ–7{}Ä/ßł×7®h„§‚öÖB'ŚK©~ßJ|Ś”O¤Is§:ܗv;=¾ŸJ“ŅŻj޳Ü‚$ĘqŽĘ E­sFńģ‚ĘkwĄB?.9ś×Dd}*ÕEĢÆm&0¹éŸóšIX,sVž6u½m9ž[«ø'ū£ŌÖ§Š5[‹Ÿ#Į=ĢŖ™āeč}G½iŹK”ó>›©ßKŖ;°6ĘGn޵ėšmµ­ō~EĖ€€dē½jh“!ø·ŽÕeŠó[Æ!IÉŠW£ų#Jšq¹öķkkrąy Ū8ģEs¢×|A¦ióǶo6ž°!Ēå^3Æx•/&ĒjЬä CƒĘƒHö>‡šOü ņéPų“M’ŅŪWX60yB>ąģƒōŖ1Ö`ųˆ ‚w¶¼†ŁÓk „ zŠiĖ­Īj/ ½“ŅłrIn~RqŠśÖ÷…†”•€o@pGæ½Ź'Oiö‡dDP‚G€€uśT–Ÿh×äXē8¤ ŗ)W½R•ŻA®ō9K–>ŃTɽ cŒ­oŁÉā{»›;Uh.6`n ŸZ =„Ļń¶…ć'ÄZŒPĆ Ö‘9ĢoĆ0Ŗž>µ‹ ßųŽŻä·3­®ģ12ūRęE\ś{HńP¹š§–·öW†6h¤ņį¶õ#šÆœ[Qµ»ÕÆ”Ęš %pŻÜ ĪQ4Š/Łų’īŅY4幒 0Ƴ8éÜU_x^ņŚKėVŽźŚE/¼óų}jbģQŸ YĮ©ź1é:ƒ­±d,ĄķėĒAķ^ĒŖ_Xhśi‚MŠ»IŽĆ·­j™^Gį‰ķõK–ø¶vHU²øn'„zöØkķr-īä³(@”‰ĒŻQS] Øģ}ee¤+KlbˆL§Æ§>µą÷ž&‡ÅŅ\čŗR1•%Ź®?x>ƒø8®obŗ“\įuO ź6s[Ž„{b¬Uא+2ēĀ·^%FŌѝīmĘxŹ“ŒÖ±V:#±Ÿƒ$’Go}ŹēhĮ&½wĮ6ZUÅäŽ{›[ ł4F^3ŽÄÖŹdū3sĄŸµĻ€šęæąOé’kZF ņlWO3w]»IéŠųĖYńa°ńvµ¬Ė„-¼÷ 1€É늫­Ę©£é}>×NŌ4K{įso7(OØķV“‹ŽŅyõU6Ę&'.(÷’õÖrZ˜Ō]@²Õt©¬īm¢6Ļ+ÄUd^ zŠēt…Ļā?ķi,õø¬5Ģ)²’bCwɤ£ÜĆmĖSüPńĢŚuæ‚ü@d’K<ŁŹł ²ĪAźA®Ć+o |MŅm/œŚY]ŽO#|±ü {ÖŖÜŅ6?K­µ‘āŁŁG :­©ŠĒ'Ģ‘ŲöõöÆĻÆü<¹¹ń­Ę—mž'd{Aē<…ĒįK—Q“uų5š¦Ox¦ÓXæÓ$‰S)qoqŪ0惞Żj_ŚCĄš7„ü_gā?Ų„¶ŸØB—L?"”9Ü}łĶfŒĻ›õKŸķTɑö÷Įž*šŻ}äš¶¢¶HZø,c#=Ķj™q±—5µī£’@Łƒ‚ŌS×Äs鶜:-Ģ—æh(%Lä†ōĻįśÓ-Äļļµ-G[ŠšŗŪØ*ōZĆžÕ?“m’4_°³čFŲØs0=̃évæe—äUäīéŅø;=^Ģf•z“Ї!ĒsŃ<5¦§œ²Ķ2Ęąa\fŗķĀĻm›n†Źē€ēT¶lĢ7MŌe’+O1[qä³é]|žŠŁ|½Æk)hČūŽõQW9å±Ģϧ=”KˆĄO)ńx—Ņ·MĶˆ4½B ČR{†]ØźyQŠżjœ N‹įĶ՞œļ§][“Ē„Ӏ?•l|Jšž*ŚkZ}¼o|Ł’Xy•EĶ£±ó‡Ńī­.aX-īIU*ń"śqŽøŁō‹«ōŗū ÄøÜ Æ#Šq•†7Į‰wq„e{mĢ µehö‰zZōm>ét‰ŚęžO2!²GŻükk‘zĒŚśŻ×‡bų/§ėVmŌW›Ė ł[=óųWĪ1=WM‡XÄ‘ŁŻ®q²}­Qß§ø Žš8/|KOYŁŲ¹[µFšR•W”Ļłķ_;OV]^o‹"ƒ»1± rz{ńIŹĒT‡£]i:£<ŅZ\¶“s…›ĢŽBp0`zžµMē¶µ²»CnŅŖīßöõ3.Ē’y?m½ø˜Ż¢;¼¼r~•öÅ„_”•G”«Œūˆō†ŽƒZńMż“x%8'ä ŒƒéĒóÆÓ½. b°ž{\&»d•”œ¢mŲ‰¢Yn©­QUt«›Ø$’IEū„gwø¬¦ĀłWĄZ咈|y©Į{Ą–ó2–e+¼q_QÅa9=+6“±Éx÷ĆļŖč7vyWSdp3_”öÓŚj·Śq’ žYdĄŪ·“Ž? ϐnbĆT’"ÅŲäcYÆ".ÕóWĶÜFĀ9ć½l G°|#ų›'ĆĶI”¼»x“ BP— «ĢHłyƦµm_[ųIń;Įßžæö{XÜG?ž£qف“ǶF>•Rīo©żžüųė§|}ųš»ā®—s””§'ŚdPG ų÷Ķz®·.‹}oØéŒ'–6ÜQOQéXŌŃŲÖŻ²|āč|Icߖaw2‡āwĀßümųs揃^7Ó­5/ kö2[åPvŹĖ€F{ōüB×5ZJqp}Nyē'ūTüńGģįńĖā/ģ÷ā­6Hot;¹NŸsž.ķ <ći•|{„Ż#’Ӑƶ1Åk…©ĶĪZ†Šažw`:g<šHƒÅ/Ī ī‰ŹćŠžq/pĪqŽ›* Ü˜n\ö¦A–Šźč/ī})ļˆd ø2ēŽ:Pņ:eP¾XĪ”Œl`ąaĘ=Ø.“E2®mcŪĻ;{õėZšDŃ9eć±<ŠwŅf¦•āų+_Š~"ų;T¼Ń|S¢ŽE}g,'ęVR> ćÆōœ’‚h~Ųzķū-xāmĶ«ųŽ(Ė[…\n·¹ŒpĖۜzNjń:¹uŪ4‚S$j-Ļµēŗž™o«éwS>$U&0GSé^EXىŸœ’¼7…ukdGčן-Č'ž=Ügż¾Xż”žųsćĀ-sĆśÄž ²¶’K£<¼}ć>øäŠē‹±Gń·ńĆįÕļ€<_y„‰Y“ŌžXŠˆ6,\ä{׌łhČ¢^ž•čӖ–8ŖÄt^DyiCPŹŪäl0P½8ė]Qlę+26Õgn7vhMĀąüµ`%¼Ņ;;()ĻŸó}ü{Š\AńMūŅ*Žā¬ybB\ålŠjMó“3«M_±½Ō4kŪčz™Ńuk)|č'ē„DŃÓO”ż§~Ÿ“<“Ļģńą?ˆP܉¼o¤C›®Fƒę}¼y˜<ąœŸÄöśš˜–HŽyb“¹R7Ā7½x˜Źvg„JEøtųåžÓQŹźÖ2B‰HäWØŚÜC,+vŖ¾TėómģkĮجĪȳć?Ś«į—ćojrMd!¶øÉŗ‘G¹*Ų­’ŲWĘŗŽÆš§\ųKā-bĖVÖŌ‰#Žy8®7Å:}¬:ŖÜŲ²¢ŖķĄčkTˆ+ZĖ’ĄøGSłŌ7> ‚ź),§B²=Ņ€0į'"0ør~^+“Ó5¶E“½“ņ„^7ž µ»d捧‰¼Ö^N ečŃ-ž œ‘ž“¹T:­ĢĒ2.PAčkcTń Ž‘4Vé$DmeGh$ϰ¼]V@Sqüo[ad ēaż)ĻėlĢĻ”o4ōāø¼IżØlµØA|Ē‘Ć.xĮõÅk4|> 2HÅb` éL“ÑٶųIłę‰l=wgm²“DŌw«0ÜŪ¾\Dgg­O8™­&š^Ō\nG=@ĖjYVEœūlrp“ę(aøv¬‰¤,ū@ĪMIŗ$ŠåķP@æQҵSZ’ŁS)½Iē"‹ŌXHn#Šī1׊ֵÄBå|Ķøu÷ļHy•D€ļ,¹Į Ķiy©FA@„‰|†)XĘƎMpZ¶‚°2N§txē­\em˱Ōä³ŗE…™īü¼]Ž¹&”–é(¶'“×޵Öķ˜AgMīĆ=:V Ņ…%rēŸqS' WŒö¬šl TœõĒĮ=ņ«%Ä`c¦Žk&Ą’yäHx^3ó ņėOy×óZ‰"2#`…4ŚĆŗ@|ĮņÖV™£Mi¬Mv“Iå?IąP)ģš[Ė=»Ž:ÖÖ,ßPӍ«BKņ>鬦µ: x>©šńÆ$&ń£\6ŪÖ·¼įų<)tĀŖ–Œ „TĄR{ŌŲčöh·–ß„pøĘzÕ+Ų戇Ąt'ŽkH#’£$p mSĒ5µ§Y[yČń‰ŗŸ–¬ČĶ; ¼*žĄŠ•®dYXē±  ū²ņ±uq»®iŖ© ;Č ĢHÜ«PšqPŚŁB—rMn7zuĶXŌŪn㸊£|cęM/q—W)‚Nß\ŌlĀD}²²°ū“ØŲĮø¼œŗ‰>śgÖ¤¶•žŠ¬PH;äP3Ь¤µ’T™R_ī“Lū6§4»£)4¶9ģ&Œöŗ62•zœm=ŖŠÄ‡ĻDĀžø¤3ęŅŅīį—%^qUg²1„H.X ŽŌĪ‹Qhw)…ó7±ż}ŖŖéĘ9„WA ÉühĶōXeO˜tĻZĪ6ŅŪ»FĶø‘@ĶXÆ!’Ł£(×§¹¬‰Ł^3.ąrF;P+w3!&ĻóÅMawmŗRÜń҃:†ÅÜ©|є2Ŗ1ššÅbF ,ā'Īƒ2ÄņĮX`·CĒZm¦Ÿń,€ÄŌ y•žÕ­ähܳ0=ė"īńķ\rÜ÷ō Ü’ F{·O0‡Œš z£Ėpč‹ÉĘćė@.”ąŲ,ķüÕ?1ē÷Æ:ŌģJ«*e{ƒŲÓ~C8˜¢æŽv2(xÉĒbŗŻ*[ń‰īcŚ‘2W9ķsVUŹÄU“’½*8ļįÖc3Ł\G3ądf˜¹ M•ČˆŹč|¾œåXRĢVQj˽8+ėH£2)^yr wÅuö(1$x,H©­msĮVļw©&¾y Cžzpkde"[;KłC]±“–Ējęµm~j&ÉŃ®¢ŪžPž>µD—“NŅāxeŲBʰé^”qŸŲRHĻĢ˟—µ.P±Ė¦³o’&!ĻNzŠēŽD’š“lYOj—"kŲQQCFǧZK=:9T4ŠS#­BˆIg  *o^‡¦j”®ÓB"eqĒ­Œ[»ŪŽviŌö«wŠĮ5£˜® OŒšyØUō8Y¦”;m$œSt֙ofÆ&ÉjzMøI dSŽyö5“so%“Ÿ> g”‚KVšĮ( ŻĒJ„ x'`ąņ¤PĘV™•9Ļj׌$QČÜ:óœPYo p>ĢN’aĘk{™‹ķ0aśŠĖ9BDęU ކ©Ć4ܖhŻTžĆƒ@“Ų[^Ą ‡‰Éu®Fū˰¹KyīaBN3ž(4‰—«Ķ<6åUDŖĒ×øö¬;;E—&@G׌PW1±ēŲ„1]3¦P9®.ļģ‘Ż<ö·4$ü„ŗÖŃZä\·æ,Ń‘ww#°­;µKØŅEwWO›+Ž”¤IkM™'•ŌśVÄ2Ś«”yŃ$=<ÖB%øŒ²•ēu®`i÷#•#=ŗSjŚ)ą*eq(“ėūõ.¦$D|`ūŅV{™zeš§~-³ >Ué@z|–ŗnēøUoF®oRÕāšāO!A‹<‘ÅcHĘęhö–VģGQ^iw ӄBy>ӎ­^ÓŪzšåeøėWµĘ!&0žø  ˜—1ŽHY–pžä‘Ī:PZŸræ‰ą[[Cqku>į󵞙~ąEcÉ4Eõ8›čꆱF¤IśžzÕ]i7él7/Ģ~en†“v7GČ/ѦKŪɒÜķĒC_:x«ĆKÆŲɧŻiŠĻ°1”nėM3UįÆxbēĮŗėZY „č‡°ėŸ§5ƦźŃ^\Ė+s“ڦaģĪĖO’ŚHŌĶlŽū·#ŸįķÅ{‰ÆĮmew¦Ś]*ø+8t™ī+‚©“³ā[[m[OžņĪXƒ–ĄųˆÆ6p—*Öó9†\|¹ė\rFÉ 0ē%ĄĘļfˆŖĮēĻäÖō‘”Ųļ ź:ļ…õ»g‚ō&-»wZū Ć^.:Ō (d*€p:ńÖ»éłœŅg^&KČ&@NIJŰh0Äd3[™ésœøŅFĮp|¢ŒŲuõ[DŠį†•-;™XįŻ»<`®8Ƒ¾*ųN9å“PT‘.<æ/ĢģW9äW<ąh§ÜńŁ4‘4‹&š6€Š ąōü*Õ²›€Ŗ(›9ĄÅsŚÅ¤Z„ž@ŒŪŻø;ĄąķŽ•öļģļńWT]BŪBiD1(§šą£vĒ5Qacō"Ā[ečxŸętü+Żü)ā{ią%")m9īElŽYDōx.tYc*W=«”±˜Ź…?‹§¹­ā“2=³$ 7b;օ…Ä‘2Øn†™”ΆŅā ^HäC»»ŌZŒv®˜B±J}¢9ŅTWByĄėKa„D³/”ēŠRję±•ŹŚī–,šć!{mžµęZæˆ~Źvý<6zŠ£bŃā>(ń&¶¾`Ž#8gŚ7ZŹMŪUM÷M‡\3éLÜĮ>ŠōÉęø²Ųef%Œ}k¤Ņ­­Qć–9, Ķϱg„iZŽ—ou2¶Tń†x×®h±ÄγĄėä7šŠ,śsŪY>’2.½G\Ōq%„žÄ<¬Œp:ÕĘż@KŲ"¼¢bOLöÆŌ,£·½{G’ŽXšb“±ŠĖ”éߣžl L‹Ō½éĶy~½4m•8ƒėYOp‹<Ņ;lJ©"AėŽµū.ź÷ļ!HjoŁÄT CŽõrź?%pbž½ØiĻh„žÕ"FŁłsÜWZŚ`–0 uø;séUˆóĶnŚÕgİK¹ypœƆ>4Ż^Z½ÅäIäÅ”›h>œÖĘńw6>żæU‚'’ųĪĘ \)c}kéM4ZYÜŪŪ_ĪQ_ öźX4w°Ec‘Άóõ,š <²²Ź€ņŽ•* Ą½k`‡ZµŪG&޹ʝ71oµ¹ā¼;ąC<ƒČ?Jtŗœ,£Ü[ÜÅ Źz°ę—(r˜wךĖ;”NŽę¹åŌ"[€"oŽ)掓ɱ,ž.··ŗźQŹ–ļŅF£j}GjĻMgĆŗ–ļ²j֓ó óZF=GŹk[ŚĮ.KózēŠ ƒ£œ• ÷Åhegs™æŒęHca3Ÿ½\ō—Å"I  œŽg(v,ė-õķļO1ŗnTē8į–¦Ń,tĶZ «›{…ŽEąDźrĒŚ³pHm֖÷¶ļöx¤ HäZ³ØAxџ·[±`1‘éM.c/L¹{ßjÜßÄzW·xcRy˜E,Ÿ!$Ö±Zō][ĆŚF§k Ÿ¼ė^ÆųZmJ®ė{<:#ļV–k»öīČœ\ÜL;Šy¹ēƽD‘Q‹+ź¶³Œ›AVē żkŌ'ø¶‚į‘FõՄāÆ”įŽ÷S…F9*ĶÅq×ÖKa+Ž\JųÜyĀż*=”§!{A×ī —ģĄyŃČAöļš$ó£ˆ4kĻ„Z•Č’;xąónwž;ŠO°L澏lj8Ó侄Ÿsݼ²GlĖ6ŅAęĻ ®÷ÄR-ŻŽł&,!˜±ķžkŻ–ĒŠ}oš»GƒNÓEÅä°®cź+§ń?‡ō_e^Ł–H†į²?ŗ{b±lŅ/”óļ‡ol“»‹ķS¶Ōškg+ Ņ0żį'8#ø» c_Ņ®ü>öPÅŻØi#a& mŒgѬOĪO‹:•Åż’ŚīŪ2 `tĄÆjųe¦K£ĮŖßź6Ņ$̱÷a³×8ō«qģUŃĶ.óDЬģ%¶Óm¹‰AYęcŽO°ė_|nšŖ?‹EöžC¤Ė“iøcמ8$ŃV<—A¾›NÕd³Ü²ŪĘ'ŸĘ¹ļx^Ō/škI$•‘‹FĻč;µ"9Ł…¦Ųkšd!xU†ģ1?+“ĶsŅYKqŖ›’“Ė-÷76vā®å­ĻRšĻ¼Eoś4÷mo`²ˆćĘćŽAż+éφpxWÅ­6ā‹‹QqČēØĒCר”š$bé³—‡4=GW¶»ń •Åī꒯³žIū§ÓŠäd#ų‡½q÷’ „°øiXg,Ēļ}j%)DąÆ÷õęŗĻ‡õ­W hæhīąōĻ=8 Öǧi¾–ćA7ӑö£ĄOĆ­yÖ¤ÓŪJÖŚPŻ"¶_gšp{}h&óHńOī¬×_c`yž × Xx6×[“óf¶Q))š\ČøŹĒ®xsUÓ//“„”²¶Ņ²BÜmĄĒ óšč¾ųÅŠŻ5Ń[ŸģōĪQFŽx-łRęFŠGÜŽšØæÓ “Ö4ō‚įĪŻĆvĶyž•šķ,üO¬,1: Ų¹eAī;TsjL劵ā] é(c•Q¶©Ė"ü¦¼œė;ÜĘ謗a° q‘ßśSŒīrKsŠ®uQ>œlęµ…āŁ’Ÿ0F+Č$šī±”jpxLŌ%±‘ņ6,ēœzØ<ŠQEk»­jłŚmBń®nĻ ģIćŅ«A¤ČņŠŗIŸ›4XŁ"ŪiEQn‹å,™`Ø1“޹½#Ā—ŅÅsŖ>qló1GĮēėž›ŸBŌYŸ«XO+ĒŽŲÉEąūW¢x?ķ0iŗ‰_“)&)¹Ę;Ā³d“Ćį ķSU¹Kš+„%@1õéQė~ńeݳY\y¶—1¹Ų\ń ÷ąqķDX6hųcĄš…†ū«©ˆŲĄHA!}+ŅōŲhŚ”It-ī2J‘žµKVD•ŻŒæˆš‡ˆol"[Oģö-!2dącŒWĖ^Ō¼K§xØŽĆ$R.«!RĆ䨭9G÷>»›SšāĀ[ė‹Q)ĘI#©"©O©Śé~Õõ½:vŠśL†,d7µKG”x#Ępj÷¦īqŌAd\ī‰ĻÆéłW¬źVŗ-Ö®šœHŠc,~nr>µ ¾vm^6›«żŒj%ō(ø˜|Ź9ē?Osš§ĀZƒ›½6+„nŻŽG^3Xó°ēg„xŠŽĆį­»Žā->2d€±uqėÅ}¹š?Sų7ńkįÜwžžĒR¾˜õ;Y€ó"SĘš§ø5“o¹,łśóĮŸšƒų¶āĮ§zd2:āžņĻ?Ź“ÅƒU[(®tvŪ–Ū'Ļ‚€ƒŒ{ę“O©Œ–§ŠxCÄWÖZÜz_Š$Ł2æ±8nxbk‘ųż¬[IŖAu£ĻGĶŹ\;`#÷#G­oŠ›SžĶæ5VßūP½³·Ō ƒ``ųWüė×ōæiŗĘ­öźļL¾±WUo,äņrH=«yS]sō—Ǻ׆|Oh'Ó¦¶ŗaT€Ē€GÄkņŪćy›Ć~'ku氕ńi7mĪyķÓé\s€“1¼3ąÖÖō Jž|Ų¢!ŻćäØ>ßį^_ØxV;»·f„Īė•Į1õ¬|ŠŒŒŁt«;6·ņTż­rYJ ø®#ĘV[M›XG N#Ér3–ĻqH®s©Šu 4ųŹ K•$9ĪCéVm'Õ4kų'¼Ž¦OĢsdåqŠs_ÅRŪź3-¹ņn]~rČsøßõ®WþŅ_QŽĖ”H™š Ē;3ŪéNÅØXöĶ{@ø±ŗ±’ĒQBŠyjZ$AŽ1ōjÖ¹āskeg-ÜK{ø*äĮF8#Ņä‹Ž Ņo“‹ +V·UžĘįŽŽ]qÓüõÆ-ń=’ˆ­įK“:„ÆĀ¦Ü=Ī;Vš19=C^Ö¬ķÖŽāį\–n0 cŠö’ép2Śt,źĖ½›OqVģB—sCQt¶ŗ·Śėk6 ±ėŪč> šÖ­£ųrŪ͘7xZOxĘźžŚŅ ®|±Ž„»^”łĢļ­Phņ]w¶ć‚;RĶ/œVF8b9⬸ ¢CGĄ6GįŽ¾›ų;ń Öę8< ā+—[I˘Śćę_O™±ŠŅŚ0gģ·üæöƒ›ą‡Ä~Ķ>2ń!o‡>"’JŠži· ;’Üʙą.pq_Ѿ–öZ”Öņ]ŲHĪ0ÜVSSßžų…4ėó¦Lى†žĘ¾³·)"Cq•pQ\ŅZÜĘQ?ŸÆų/Ÿģdß~hµ·ĆŻ&Łü]” ±ń†^["yrG?)Ļ^ĘæŒkO’%‚KYĶņ ‘Iä{gÖ¹šRQœ©„³æß’ūžF">»{˜ŲmlēčjØr»~qĻ"½Šo”Ķ%fN¹ČFn}*¤ß+Q‘ž}«C)D„+Ž­ŽžĆ ¼ļōéAęK# 8¤ŲŹ°Żžø ø¢{H”wØ>j䎂“ yžāƒŖ›.ZČ(Į÷”ÆŁų!ļķ›’ ³ūV'ĮŸź`|.ńŌØĻĪV;Kœaø©v:Ńż’,ńÜŲ2ó-³/™nßßCČ"ø­CĖ`$P«Ę+Ģ®µ.Ś ńJ·Õ“ĶVĘ[xe·ŗˆ”Vž{×ęŚų,/o-ÖH”Ōģ&1Måzr=®4µ±=ē‡ž ”šŹ xęé?d¹ŠµRŅŖFĻ%}3Ķ~5ÜGki+ˆ7ņģś×m#ž²1Ł•Xį°¤ō4Žv°Üy®člpIj VF\g“ŪµiEdņĆŗ2vśUExÜ1sŅ¢IL¶ā`{Š‹G'ĢĒ=jä0 ‡o҃H>„Š 2±ۜU“ł” åļ‘Ö¦[”ĻÓ’ų%7ķ?{ū;~Šś/„5½rīóĄ~*˜ióĮ3‘LÜ!øžFæ°­I,„ŗŠī‰6L~Ńe3ō•Ż ūńųם‹†—= gu„[CrŸiwTŗ‹*ࢺßiwWz2J‚ģ é8'č+ē+CS„;5­#OÖ4ūķ:łķ¦‰¢•;tįæĶ~8xßÅ~'ż‘~5é?ü4æŚZ]ĻŲõūebՓĘ:Ø ŌDčJś«ÓüHš’ÄO h’| qasąĶZĶ.āx¤a$|ŹĆÕŪ‡äŒzÕĘ,“6 Y…ÄšI iƒņßzŖĢŃ]Ļ"ŗżī„Š\ŻgѬZ¼°Q^_­Ś¶šŹ%‘äBIVĮü„ DźZc¶–ĮõĪÜ6ŸS]M«jW0‹č%Ž\`ēŸÖ€e­ ĪźÖyĢ·sMnĒī8{ ź– ęM€?0čh0e÷±µ–4ky]Œ•ØF™"像¼Š+ʱŖ‡ŒŁŖÅž¢†qlÅwtśŠƒéęiĄ›ŲzՀ“4‘łń~ń=G+ųÕAjT|Qqmj‰Ä0ā ±ń­Œ‹4aĘ3ŠÖÖ®#Ō„pŒóéÖ²®lg†@Œ„©=GJ‡L ‘u,6-:įFAÆ#×qŠ=˜ÜY&£w[•Ž)āĻļqķWRU·ń‡ ŲŗjčI­£j†% `=c]¶•«$Ā[y#Fb;ŅC&µ…ęc ŽqO–só£+žA ¢Ž½¢ZŚ¢µ­āÜ# rTżŅ{įm­/có"ü苇¶)šr#^×Ć\0hcŒ°łŽx®ÓF“‚ŻÄw µ3Ūµlč.ā‰ˆłQÓÜVUå“€+(,€ć§jB9]@“JȬqYšr¹vŠe0ėŠKė$xēBĖ•:ׇÜhvÖšėŻŁX(28ó6ŒgÜŠ«XŲ<ŽXHö”­{M,„Śyƒh<}(ŗ‚$µ@¬xĒ Š»ńUńå=s֓‰q•“3ī!,ŹÖõōŖÖöAVPW‚qLÆhh_iæghę†dhŪұn¤q£č½ūƒA›e»;1|«6įŌz×BÉc ƒqD8õ FAŁ4źw£¬\Ū ó†ĻC@“™ŹÖž˜mV6–WŒsŠ÷  ņœ˜Bķ>•š—ņŪ\¬ŠQķ@ļµ¹ČĆ.?:ŽŹņ ¼~t–„[éc}́¹ZēīīäŠ$-Ąķš 9Ču‰Žą­ĀžzW čŠ$«ęH¤SŚ€4.lbŽe”\ŒVͦµö/™nCV¢&§sm¬Čą'“09ČčiÖB{eŁ;/M‡½H5Š•„†gbźb—ć­W[‰a™NÕtČǵ#ćPGŪ„>gčjõē•s .šĒøu Cl-c“BŻ<×7«Äöóć/ø øČĀø¾¶¶Ģ‡ļć+$ź))+Š{•=h49ķ^yĀy«u(:Riģ×J­n:PLŃÖŚĀā&óʧ¬lĖó˜p #UĢ N@­Ųn$¶Fƒn9¹.c,WkŽēØÆ)ńFµ=–厄$ń»­Tcr”»Œšž«+äx¶ l`×»ųgĘ¢ā;wDNxČÅ_³5=^Õ¢ŸNQ”$yŠ:Jģ ÜsŽi{2X·Ś6Ėqwŗ“g®z䤶ņĖIccéIA‘ĢĢ-KD}m} @Ź@܈zTv¾ øŅÉŗ“&En¤7„W!JGw§ÉZ½µÖß7ż”\Åփ ĪӥɆĄėõØjĀS0®t{Xg2©Ć±#Œā•­^Ń–ā ™;•= $je]źX'+zb¹éõMJŅķ]‘üœ€8ČlÖéāP²¾yb›llnõSS‚e7(%Čē4c›»hįc; v­ūK›å‡bÜJéčOJWņ«¦@O~E_²UIc;IRyö¢żŒdµ:6(Ń4D$¹éź)‰Ā6«ŽŽ•1D™W‘ØbČOŅŖŚE°³HŹŹjģn–Ž`įd‡jÅøY£†@€ōéšÅōhcŚČĮĢ—Ō60Nr*mCģW8š[{…“1Ä:„¬’Ÿ.@U»[±DĪm„ÅķY“W)—®XÅuģœŹžłÆ<ŗš…‰I7B#ŻĪģō4‹ŒŗāMꏟę8®Dߌ©9®JKŗŁo r€ņiIFV9m[ƶ‚Śā)`W qČ5ņOŒō7Ņ/Żķ£h€¤ź+>khuAžńkįŒ)Ņ»¦¤–ś“•l!*Éź~˜š“3O¦\Éau*K,M‡*_‰Jč×C°²ŌCŠO•^'Šļ4MeäVŠwŌeW³}+’©²5ģõ‰¦¶¹ %Ŭ”Ų.įĻ^æCXPź÷bņOķÆ†Ś„ƒóg޹fĄé2÷8S ŁžŻk9m.‹H^…FB±P—S7TGŌeŪ›v/Ėæė?õēŅu;x®Ż[67öĮō®ŹrčsĪ>Ÿ‹S“ŹÉa*0ĪßīŌÉ5½ĢĮŚNy]qŲĀZ[X»½¹Ÿ‘Āž¤ŌqYĮmr©xYįc³ sšbS*ėZ%“ [6iĪąGŻÆńo‚eÕģnlÖEFxĪ #’ÆYŹ:škŚ6­įķJ{Kˆ Vń†>¼ö¬½2ļī¦prppsłW<£ŌÖ”³{¦Ē§ĆĆņĪöšŪüĒDĒ­Ŗi¶šŒ*<GU8Ȥåa9”tŲ®m¶ŹŖÜdsJī#¶ūLj¤·ĶŌzŃ̌\É¢…m˜nNƒ NsK½#ķƒŌŌJ]s†Š<ņ™w’Ļ29›©E%‚+_/9¬Ź2“ĶB=@4RÄT““‘Åu1ź1(†M¾W^”²öe äš}Eg=ˆœD­R‹*,ᵫkĶ2G‘­åxW®ä$5yÖ”¤k„ōG{'€F{~u±³>’šŌńę†ā+‚qާ¼ŗ.vŠōĶ Šͦ™–ą˜ŒƒŠ”6’«$ŠįŻ:ʉ±RhŃy„‘‰ˆŒ]–mkc“Ū†V8$Y©w:hµŠń<č¢Ä:ę»u½*{0¾Z3Œ÷?Zkø¹O7掎Ža$l”Ŗä`UĶ?Äf¼R”¼±Ž*£+#Ōl|X·Rc$˜ĄūµÄųSžęå‘ĢŪ ‚0+Ndf÷8‰Ł$ß½¶ž¼ ę im+K‚ū˜ž{Ör•͐·ZŒ?,C…#”<\޶m§ˆåP2£Ó”Ń“QāŚ®†ŽĶqhŅ“lŪpĶȬ«Ė ѽݹǣ/o\Ö|„õŒZź‘ˆlćņSŒc ׿h:Q’y¤įd`t>•P1–ē .: XĻžąÆ=©a:¢E"²°89­"ēó^tķkWŠ GKŒŻČŖT"7ŹŽ¹½yÖ­ć/ųC[¶{M2āIžBvØł°F$ā¾ŽQ±ćR…ϱ>|U‡ZŠn4¹-ķžę&Žį€ļƒß„}£Žč×zŽ•~æŚl¤][7X†x>żkžP:#&|iµ:Š-üC§\Ēö9JĆ,jÅsŌūó?čŅÉ£}ÆO¼ƒķLFĄ†äƒQϐ|m§\ßĻ2J&…Į2·P+¢š}üöz|:\o„S¼į²~•ŠkĖ„ø|ā=J]ŌĢ'¹XÓh%³cXZž»¹sA+ŻFÅ ä R‰óž«¢j·>:±ŅįÓīmļYńĆW¹ż+čmĀ:ž˜×^ŵ A…u䞘 Ņå9Ś<ÆÄŚ“ŒÖH¼Ŗ?Õ1ē$zW‘é¾ ŠōķEe×ōł!¶ģ`£ę÷¦R»=`Ń®®­uŗżĄ—€N{ƒ]ĢzH g©ŪČŠ]G™˜ķōZ }O!ń_ŠüWoā(/a¾-0|Ō>a/Ó5ši>Ś®4 øIĘy>¼Š—.¬VƒĄ—:KzØ#hdž|2‚}:ŅĻŖ$¬Ń Ųķgr9=łō”FĮ„ō>„ųfÖ:;Ķy›™ķš4™·»vyĒįś×„_ŲŁjŃH¶ŒšKĄxéVcRéÜń/ŒßnõO C{5›Iuo0Mł£<šO|׊hŽÕü7¦ŻjPˆ^ٲ²*Øąć’G_ʛ—C¦›Lā[ā>±kŖ[H·źŽ8€a†3éł×ÆĒ>‰ć-/L¹"ŽŚE/$e hŪż”Hčiyu ÅoØZ]£EØhA+ uĒnõ[H‹L°2Ä lÜ’@P”®e&fxĪ–Ł"Éwærlą(õ®WMŌ Ń [„*Ė€ž„ūT¹cÜžüÓ~"Ļs¤ÜjQ鷒#5¼ģžÄöØ-4żSį‰.<;¬Ž$¬—LS$cŽ£ŒC•ō #éOünń/¬ÓO¼‹ūdh®.H8ė\GŽü'”xļ^ƒPŠŚ-=¦d>b.{śš„%Ō,y­żÆ†u#cǟ`ˆ@ėž9gÄŗ<įį³–—EwŒŒ«­W22o]  źmbZ“īĆĖŅ›sā).õ–óķ£6². CÄ˜éŠbęgg&æ§%ī—¦‹Iæ{…Xćc¹ÉÆJš÷Ć=TŌef¶f„ÜØ ķYĖ@ęfæÄß ŁŁųjx“Č"žx‚ģI‡ŻõĮ¾nŸÄSéŗ[ŁØŒ>2b3õ¬ŹƒŌ„ąæ½ę±m5ݜģ Q—pĒaĻį_anų_EӒāÖŽ$Žuł—20ģķZ{3TČī~!ŪxšÕmōęŠ ˆFŒ2śg޼s^Ņ|Aq%äņĮ²•n¹īM6¾ x§Z“š¤¤įāå•ä?('“_&Śj𦦺‹ŗGk$NTŪ¦;Öv&Q=³Ćzȅח29ws]ÓŻŚx†Éģ¬VO¶™Wc gŸŹ“…ČŒH'šÕüPC°;JrĮ¶r? ±©čśŽ„GS“š8ŹT’W×éZ3e”±šž +ʓʓ’Ņ!„óĄü z®ųOÕāšeݤbŽYwJüʽ2GaYr3U.‡]ńkĮ¼! ŁųƒĆڵ‘’`„ķäq¼7|ś łĘŪā€4ŻwI³FµŅå•ĀM#¹=Hō$¶-Ńś įĻŁCZ×`šĒ|skā- ü‡—ČhŚoojÉż¢tk_‡Im§ų‰ōŲ/£+µ—néŽI„®Ęn'ÉWZ¦—«iš—Ųdhē‡å‘‘Ļ®>•óöµa-ž¬š£µÓ’Cō®˜«1•æŠuk½=4·KYģ™ o|ńgœ ē,~ǧ_+J#IŽJœ¶„X.¹ā­Eģ.dyŁÓ„ m^`8Æ:ҼM=儊ģtŽQ†ŗÆ¶)=€ōxoE³µšćģo܎]Õ21Åt2izž£Źi¢ßĻ ˆ‹“±AéøÖsśŽ¹āoiŻŻÄg1 ób‰2N;sZ’>=[ėī4Č ?Ś|f)Ī!ąü½3WN Œś”¾éßžų¦+£enE¾ ’DĖÄÄöļ_›æō½GįGʼn¬5¾ÓšöŖŠ#Ÿåw^œō«ŽŽČØ£ķ]\Mā+“–h‰»Īå ą·×Ö¹’ii>UĢsyAƒŽ?‰²eē”ų›EŌŅīŅöĘÕÆL¹Ø,‹Čąq_3|^›Q±×”±[žĶpŪĶå39Ęć{“™'†¼Eiy¤I¦™,ęyC B¶²>\Ž™é^Ł©xā­”Ōü?p“JѤw1ÜmP8`N;WG“-Į¦’­¼ge£ŚŚźfQDHl†ļwé_.~ŅWŗg‰’f·ŽKX$»}÷!øłqųTÉŻ™:hĢųmńĮ|ęZͦĶwe,{Fšv(ڱ|SńU·tŪĶŹ .„”–„°ƒėķĶfą®/fzü+Ķ{W‚ vŚĘalė“¶3±sÉ9Æ%ń—‡Ķ³Jļ„żŃųTJ6¦G½»¤Ö‰:ŗŒASź*ø%pźnZ+W#`vū¦¤øĘĒqik ®Āņ=—Xd#–5SN²Šµk© š%ø‘pO®E‹ G=¤’Cv’=²°Ś«jäµ-Ö}`ĶÉwæĖĆų4…-dŅ“ķjóĆ4Ė8ņŽĀĪ:ņ?*«c%Õꘌ\ö–²Z!Ēž÷ZIō0hÅńOĀ1Ŗi Ŗi׫لBAļŒ×ҧš¦µ.‡§ĖašŅ,æŹ:6:śŠÖ2īL¢x/Ä/éW7—6šŻ$'vcĖckOʽēĀŽ.ŌüqąHōwœÜGh€»£|ńöČüėR^ƒu3}ŖxbāŹ(nŽÜ3²¬ycīV¾|—WÓö“Ze¤V×Ńq+§ŽnxČ=*%ø”ŸBžŸā{»Ū£cØy…[$KŽ˜ģ}ĶzŖėžŠ|4×;Ė-gī¬ŃøŪ1ĻFJ‡e”¤bīx]ž¶š…ó-„›¹Éõ¤Õ¼Iub¬ö·a¢tņĪ0IśŌęó\źZ¤™bp 2*Į±’ܤ¬»•‡ā+“GL#ŠŃQo¢"ČģɐŲū§ŅŸic%ÕäVc!XœcĒRµŽˆĒ¢;ōš7›lŪ/ūGƒ\Ԛ%Ī!†ģ1r~SEg_B3Ŗšn½qįĻi>!ЦŪ}¢ĶƒµćĻLWévƒ|𵤑ʳ¼Š‚pžÕßN­ÕĢåŌdš–©e£¦µ=„Ävró˜į«ÓµøšGž&Šwö§;H=äjKč‡F®„āTÕęK@Ž`EĖ ēo½E§J³_ĮnŻ22G#éRŃ5)Ų½āhaÜK¹ wƂimIģģµa™öČyXå™čįHåžēĒC0%‹1łW¬‰®ö‡EiL#+-"bńØ>•}w3Ębž{wVÜ+±—Cźo†¾<]B ˜]Zų×JŗŽļOŗWĘœŒ¼‘_ŁģWńžĖöųįefŠėĒŚ|-Q%ų{VSVGB}£EÄśmĀ3™£’&ćk쯇Ž+‡^Ńā‘&ódQ“äóšå“ź&»Ę©įŻā…üQšėÅPE}įŻjĪ[ā‘A_Jō?\~Užu_·'ģ±ā_Ł#ö€ųšSÄöwöö°Ž æß˜/,Ė/?ŽtĀ¹^Z±ķ+Æ;īæ ˜N]ƒ®Ö <é¼°¬®HĒCŠęå>V,gŒŠō£.§%Iuždo™x4“Z30•&Ąī÷¾µŠŒ¹Šņ*ģ*”I÷Ø$eP ©e9 Žv]Ō!bG­X}«'”¬¼ ph+ ‰žĪKFG'÷¤0*Ķ€6ć§ćA¼$M«ĪÅWÕĖėy™¬µM2śėLÖģn,īamÆ© ?QAŁ t?ŠĒž ūlZžŚ²…õ;ż^-Cāo…āQÆDĻūĆ$`äuälŸö«ōæZ’!øŹVėķ\ø˜jtĘ6>qńOt=-o­õ™ %2c™HĀ‘Ó5łūUüPšĒƒ5KļŠž æŠ.5i c©i3Ü(Žą(?0ėüæ,sF•ĀTĻę7öØż§äųÕ©]ŪĆj,“ČīXą,JÄŁä ģ8ė_y‰#$åœž9®Źt¬rÕ] KŸ!„xł†xͬn]yÉ?•n‘ēŌEŲ­–!~§5±öˆ€=?Z Ģ©ēY¤%[”“ÓœŠOŗ0ŖŖūXą{Uˆ`*» ōSփJešTŃ@ż*Ä2—`r$9 ė¤É'A¾Śö'ž ĖIEÄ- ”taŠ«v"æ²ļų&—ķKķ/ū:čz5ƹż”ńĀāŪP¾÷øŒ/ws…aZƒ]Žźlż#Ņ5ݾ±»ŗŽFÓ§u†}££1ĻoOĘ»uÓģīõu6¬mµ(’&^¬½Ę}+å±1:“¹×j2˜M*)ĘŲ×Äߓπķ|I£ÜŻ5±£hfSVT ą·ē^l„c¾Š?ļ i1Ō“o \Hf“±ó™‘`fūŃt*~•ä:%õ¼gT–{VōŽĻu)’G÷É®yāžĒŠįØE«œ±»žėĢČ>j€MOo$ņmū;Č»ˆĪ9÷¢[4­JĖA·¦tܲ&É@=ėæ¹+1U=æ½z“ąā‘Į__>^;dO;z®ēč2q_„?³•®…¢^Ol¶pĻ,~\‘ȹiGæ½8ly5Y÷ŸĆŻ3ūR%¶ÜIqÖ½@[Žé’¼&Gtb2¤ræJmŲēlõ? A$Īł°V8ĶvŅiw6’¬3£†øŖ[˜Ī©µ}6ü$‘Ur9®BĻĘöžŌÆ4ūŻ:{ķ-‹`ß2“žœv®˜ĘäJ]­Ķ¾©+]Y,Ŗy ¬0k™ƒÄŽN“tĖ‹K±ƒąp½W³2:WS¹µŪ*0+żÖčErŗŸ‰4›½:ā­;‚2æ7Ņå4iŪS„š¶»§ÅØHØ`Ųd5ķśnµʲ&tĮéK•™“#8œ‰6ķ'Ø*ģ¶I2­ČĘxć½+é×O¶12Į7ŹFG=+5³hl…Ļ”¤ØZ+¤@8÷ƒ&‰qm©}®9ā-œģį¹PrEØ Ō Äņ@ÜIÓäÓ@WŌī…¬l²0Ś{W‘@“Kwj”XŸŸf“öƒ7lnJŸ1cē9®ŠÖżēf2:³žō”ūoū?ū^;ˆ‘ü¦×Ā’mµÆųžL ynĪTłjFÜśėUĪŅ3擵 „·¼ÓĮVęLž†½ēĮž^”gotŁ‚éFdOzNacŅŪN‚ś|¹qŌ’*ƓC™A.Š 甬ٌ–„ģīmŻJ¶ßØā·l|į ’6 żé^’źź†!ö‚=8ŖźS‹©Pŝ0(_}®[˜Å»Éå1ɰ„Ö4Vö¤;š62Ż«„…w©?•j—‘.#Y>TĒ8 F’°ŠDłüÄĪ*ķę­j-L Šs@k|ņĖ3É vĶX²šEFI7>øäPw,ļ"eDŲļŚ¹‰ōIe™‹/–Źs:Š&vš/*¶ģŖ{Žk`Ų˜ģx"€FŒš<(%םerLač7Ś[WŒōęŸ+ŗ p>B0h/ūQaŹ9.£„_Ń„¶Õ]ćIĄ>ŌŅŪiƤŻ…āĪVBīy㠳޵|¶3r9ę»xŸęR¦¬.”¹FzÖf‰•„šYT°ēT`ę+8Ģ<ēž”Æ¶—o–ŪžŖoģų—x#rõķ@µńHn7`täō¬=Bę[hŽh‰fģ9M#ĒĖ­™,ē²{I¢r„’{ń«—7~P$+Ś›Zč2݆‡«źh'“€±Ż«øŅ×R²C Ü$ģą`SP  ›¶ \€WÖØj–Ń Ś?ħ‘WŹ"½•„ޜ7]bUõ#šqŌ·Ģ9ƒŽ;Ä]M½žEoŸ<š ˜m“ĶłIéš œ&iH&]Šz6kµ–Ź£P—¶ŚM”Ž!n‚ā9„n9µÅjzĢӉ#‘>~Fļ_z ‹<Ś’P–ĪBó€ń“Ōv¤kEŌDwv—Į2wSĮāƒR;éÆ!†Ū,_Ä3ĶM§L–˜ø€läC@~,“Ō§–Ī$wŪNT€ĒŚ»{;¼ƒ,ŠB· Õ8ö!Ó+įL„6üśUIõŠfŒ‰—ŽGZFmKzԁµĒ_zóÆ£K–BJĄŠvwrIjBƒĪד]ꈮˆ’\®ńąÖ±—sE#Õm5ŽóGō¬ćŗIĆÄ:ž•@äjIuØEnc…ŸaĘįŲÕd¶ób%¶ØėA‘J{5D>Zķ#œŠ–Ńī”$`3¦GZźp¹&UMŽ:œu®fyŁFšĒ=½c'q£RŌᓁžāveēmbK­ļ¶1±C?{ŅF’v2%V˜ƒOzŻÓU1Ą WŪ­j¤G3:(įBƒĖʰ¤øip±Ėõ?ÅėD#.ƒį“¶ŹJUH÷Ź¤AņüeqŻ9IäœVY’ī’UUņĮü©ĘV1l,ļ/gTŻŪŠÉw4,pRL`äpkHŹā36\\Ӓˆx5¬^=¬LH7œ…ĮéT   ~+ł^żŽtw$sņŖę½Y€$r}ŗÓe6aź$²M¼ž1ÖøaݤģĪKŞ9ū“‰:h'·`ˆfŚģ3éŠģķYbŠ5‡ć®)s :$V!ā&\~•ŸÆé «…³øŹ’6ļFĮł¬•€Ü·š­®Ÿ„ ®åFfÉ®Nį@.¹Ī3Z !‚O³:·_­RŌ¦3±(>\Ń̀ΉØlŽX’=kBŪTŠ&Rņ˜ĪG„dŲİ͉ķnH³ČĶS¼gBÆŗEeó5”<.ˆö”…¬Ėž”q­aßXMi8ŲØöž“6''±EžU’=qұZÖBēĪRAėžŌ‰g”i¶÷ĖvÄr¹[‘Z×¶ZrĪ­€©ĻŻķWĢ]»ĉ3 ³®=+4Fe,ąO\Ԛr¢5¶œČP¹D>õI=œĘ7pŲ8ėÅ\eьŃXžŅŃŖŻIo&zƒ}mK¦][²9q:ć<•|ČĪeˆēĢ,»Ao\ō¬ |³pÉ%G'ÜV,Ģåuę`Å,Ū͇=Ač*=2͌-ó®ńėŌÕFVČk6ZŸ•:£2ž öx>]@ĖåŽū? »×š­¢ĒŹĻJk4·‘§±øhåć* r ŗńē•#ÜFe»ļ[]$oxgGgkŒÅ“ß©Æ[ŽÓ÷H±³;ÓĻ-ˆ”Œ«Ė–I£1½eK§Ü“ n»%‹©ć‘Xy–æ éQFó\²ł’Ł>õäwö6É3KfęUėš Ś,åu4‰cq(ĪžHóĒŽü+öŁī0 ²ą†ééRātBGĪ7—wŚD·d!óƒØe=| ń‡ĆSZjØYŪ¬V3oĒHĪz’:žCxČņ­2[xĖĮ"ģø:¶ģ ź“«‰šāVf'īž˜®:±-3Ó-wOµwʏļĘćéZöÅ8X®- LpŻ+…£s¦‹NŠÜ)·(ä|Äœ{VŽ¤nģ¾Ē-“IŽ üOz"ģ(—Mtx­’āÜ™8o­s֚āݬØĘŁA$ŽĀ»©3§Ó>Õ”oRj0ż £ ėÓė]£ź¤G8ž,×|v8'¹wOµŠźį ̰wÜG½4vŹ ĢļĖ‘Ž™ Ķį• &Nj“6I0PŒĶ üwTJ=J‹ģ|ėń«ĄkZv§}nOæ æfߙȼĘ+ęk/ C„ˆ®­ę) ©-äśÖ·SŖš,ź0Ū“¬ēRŲätł»ń\Tö,Ū„īDx󂵫”Õ”õ7ģķńYüŖ[č2Ī×Z}Ę÷ŒÉ61ģ?<×é7†õMRźļOæū@[WRų ÷dŌ‰öoĆnóTˆĀņ“ĪģŠĻņÆq“¼W}±ÓæzŅ2īyÕ"u֓y»c+†f“-ōĆē3²#ÓéVa(Ų–{kpČ 7Ó-ͽµµ¹b·g” Ģād–8¤2A™ČĮx«ÅQ0ņ••÷E\7ˆ³ńIµRg²ŽµĶkž&:ƒ8ŽŲ« cE&Ķ ¬pņŻÉ4eŠČ¬¼|Ć„s÷Z—BŅ 9+źk)”p׫k-Š–Õšx%}*oķ Ø “slĮ¬Ņ*(ҳń=¼÷֚߯C Ņ€1Ąc_@xję(-Džio›<ŠÖVz>Ÿ­ZN "xŚć#ƒÖµ„Q$L#eėÉ«h“ž×>ڶ’-¬ņ|Ŗ~†¾Ō>ŁŒó(’IĻZFŠG=$ßhwˆ’¤äqҲ­t«ødg†ķÖ Ü«Ū½³YĢ£U‹Īā xf?Ņ·tż>ĀT)¼¤ć×ҳ&R/Gi’.FßŪu>āŅ;7@޳CĮʜÓ3r²D%‹÷gƾńZ›YŚ×tó[¤fä¶8;Ę1ep=¹5œšt—Ņ2y`ņƍ“’5®t«Čį;XmŪ€½\ė?“ Y‹c86XdecœĆ8«ŒH”ŗø†ŅK¦0ķ“'jzb‘¬ä±œN ^NEh:r:ø/¬µ&ēJ½¶“™ŻŃŹŽ õƍüwš«VŅõho4i!E,w‡ønĖĻN“i\½įżC^Ńé%½g7µŅ&«+ī¹gd$eWҧ8—£ŌŽa rČŖĖļÉ­¦æA“NĄԚĪNę"ÄĪ“#© ĪßļRK¬„„HcŁ·øē5%Eźd\ėĶ4”K ,9Ļ< įÖ9˜mėƒA¢īHVv„f1ꠒä[LņHÉĻPL“:]"ó„•ÜyŅOw$ČRWYÉ9%±šlĢĄ’Åćfs8#®SRbŃ0R#`H^;Ņ5¦r×I'É#€ĆæµTµšņj÷ė ] |æ3aiP؃SšŠ[8…ĪV&ąöČō¬y“ę“@J“ūūĄp}(eɔ­ü:kČķREĘH@ ®×M³X‘)Tąx ŌrźsNG Y„Œn²#ȍĘZ֛MūB†ßóu ׎ŖĒ=śɟƋÆYų³MŌÕnæ³ 6 ä^sĘ;ńĪ½Ó⯇ÓÅQÅ{gRÉ ½°Pye=C_G&y“ź_£“BŽÕĖZ³¶Ąs€§Öŗ½7ĒzŸ„µØnķnŻ’Wé!Ü®ōć„AŪt§ÅPx™µ ö’j2³09ŸO„|™ć?ˆ:ž„.•öIģĢRÄŹUX{\¦–(\Ķ«¦G(G¶»čźĢļqķW|#įŁĶŅÉę«JźH暦)JĒ“XjŽ.Ńk;ķÖĪGÜXꮹ{]ƍSķ^)˜x‚yмƒĢ]£<ąqĘz}h3“:߈ZŽ•ØųāĻXӜA}m䯖®ƒŒōĻJīž1ųétk­,1N’<.ķoĀå€é댚 >§™i^•āėkj`‰y,ˆĢÄ ųö®_āæĆ3O¶“Ō"†+Ūf›‚ŚOPĄt ly®‘f¶–k”\„RĄ/ oj»„ź:ä֏ąŗ/æÓ„3KßŲž a¹¼·…Qģ;ćr’žÕģž¼“Ń“é­ćh ø\ŗ`c$Žy¤e(½ŽwÄŗķĶō_½l\…Ū‘Üzšņū†}Vqm=ŗ2¼ƒĆćõķ@ąś–Ÿ¬/‡ IZK‹[Yf Ūæ¼ßŹ»m+ā­ü:›[;_ģ8Xēdač}(4±ŽŽų«RÕ,VŚxķŽŅFÉbē8ķėX—6v‰¦jK42yĄńīVĄÉ“ É'éž0ź’i"‹kE“÷s¾JćÆŽük郞³]v(™/ŚfUø_3<9“v™č_> ėbśÓPŅ£“ū䫌8ä’?­|ŁāŻū[D’·|į›cs&ÄžĻ:ž"ŻO,—qŖŗry?•yčŅ.-ZHŅŻ¤øN1ūŲŖ‚čĒĻSŠ|uuįmå³v²ŗXönHł898ļž+ŸOˆoķęŌÖiēRĻø'-Ÿļµ§*6Gø4Z$Ś~‘«µŗZKˆ€[,ŁīsWīęM>W²g7ppW€š>kÕõJmx¾„q$X8^qŌš3ėÅ}ąxķ5ÄtÕ.Ī#µŲ’AY·c%–5_ [^M5ŗ]Ę%\ĮĘį\²čw:> źk~<¶<śÓö‡e<4\.÷.ėĖ“–žT–Ņ] `żÓ^ĻįXųsK]GW‘mą1ķóƒī3Z­Lž˜~.ų­£k?k““1ĖØŖšsėķŽ¾nŗ²žóXū<1˜ŲJ°?w<óG*'’ĒyØč–>Ó­/ģŁ’zœĘÜqŪńŖFŗu2°¤Œ%Ük7ATO6‡°xJšŻœ7Śčkļķ‚ß81ŗŽäf¹+żgCÖµIōŪ°C£üĄœČ+śžTšč9E½”|įĶÄ:Lśštö¬‡i=8ļĶx®©š_IÓ§ŗ‹O¶¶¶VÜeb8cžÕ‹Vbõ]{Ć7—"+±o+ČZ#ĮO|×K§h—ƒS7ZÄę[éHg¹l`Nq‘Ś„Éķ,ĪW⇂ļuŪķ;P“¼»]®„ī Wū¾•óŸ|?o1‡N³k«…ŚąŖāB”¹ R4d~ķ~Č_4<iįļ“^ŲČ-b_³¼åYX‘Œšz׊žŻš¶ƒć;_ x«KÓÕntYUÉi²oNģsźqS8kr=”SįĒ„ü;ć’CÆŚŲż‹Qū—Q¼Cēąć} y·Äļų~Ēe½˜Ļy•x “Œ{õė9E§fc)t>l¹ÓeŠY®!·(ж#½pņźÖ©Ŗ8'ž‡#>žß…8nBz-춚¹K6Q˜q&ļļ{~•åö¶×6÷·jϲ4ĘÜ~µ£Z§sм#āMz ]lšh %Rf`vƒĮR>†¾µų'įMvēÄ· ā ' ÜŚ7²A÷湄¬v“’‚4 ivŽ ··’k9°HĖQĒ5ł•ü#ŚOŽtĻųi¤µÓšo5łēČć=ĒZT/vTcŌśŪSųģ֓Ē…­m#F²U'ü+«Ō¬ōm}ßÅSiÖV³6É2īĆśÆćü멢ڶǨü/ń‚õI›Lž yļÓ#y+Ē¬ßŒ–vvnö3CŖB‘’ c{÷››æSćŸé¶sų÷eü_bÓŻ Ž£$7=}øõmŖų.+äŠ|Kg¤Ż<9h$‘B”<ó3Š„e­ĖWßš„^čńĆį«M:ŽśÉš]§ „‡''ēŠ—Aų‡£ųŃćK bŌ-fM!NŽ>_jŅĮļGŚ\Ü5ŖÅiŗu,gžY×Éß ²Öułm®-”ƒĀ°'k0ļżiĢĻ›üEįnŽŚy4ūuŗ…łƒ«”““Ōõ%ÆtØ ZŒqŽ3ź8Ēē@9³õGįÆÅyo>iŚn¹”Ų<°Ū$3ŹÆ Žƒ½|yń§M€kĘk B)l¤]Č‘æŹ›†pGØéS8ŹnēˆiwÓ,ćM•|Ä*Ź:­}#į‡šV”¢Ć}·ŻĀ!RI5„®ž¦ŠØŠ^"Š ŽŚK{Ø\D’$žļTĒšŖFr‘ģ:ʛŖx:»qs¤k0s:9aÓ±Æ-Óõ› ^ŻŻO3Ł‘¼ŒtĒ„T`IŅh¾:ŃuļŽĖ¦ŻČ÷Hå0zcüŠóE×'P¹q‡²‘J”Ī>Õj|ŻńĆÆ„ėf-VÉZćÅ)ī öķZ?5=²¬ž¼K&ĪīA`}<՚(#ģ…ß,ęžŅƒÅ‡ū7[ó@ŽEE1L‡ļßæLW¢xĆį7Āļč׌•Å·‡õÉöłw1Ķ“IŽ~`9äŌT‹k@äģ|.f‡Āž0Ō“]vÅ$HHEpü?ū@ÕoųŽĮ·Ć„=ĒŲw,Hģć“Y4ĖHņ‰Æ.UFK3xަŗĖ=kŻ.M@Il#*ē®kž¤ģuB™„²…Tįč+”Ҽ ā_4Ņxzŵ„"ā>ƒŽø§TčŒvņĀėJ½‹MŌtū½:ż’åœÉŽsІ½Oį_ÅŗÜŃ»,0ŖćŚųęēpōÅsMÜŽ>ŚÓæg =6Įf‚Y%BKķ—QķĶ|ĻńCįWˆ”Ŗ>wźČ:qHQVA!gĮŒt øn.ć$¹ K×5£•ä‚TŽ„ō ź§#ō+ž Cūkj?°Wķ”ų«QŌ^ĆąoŠ$]7Å1HO“gž#ø+Čį'ŚMo’n‡ ¼1ić«'MńēĆŻNšŽīÖo1m.ą[i?/<ž)ŹŃŻNgó’ū`’Į[~kšŽé> Ņ/“½n8Ļļ#bŃĢNp£ŽæŸ_‹> |_œĻÆźŚ†™lXęŚ'#ĢB{~”½•‹œø¹y¶(‘Š'Ėõ¢&Ē˰ĘGCŽ I»”Ÿ#š“±>ō•–79ē’Z_]&ÄTˆ.:ąõ¬•k™#wpČ­•ĆN(1%  Ć„i¬ä.čŌd(&-õ7š§å·JäČ8ķŽƒH»P¤€–aæ8śTѰI6ØSƒAÕLŅ“‹É““œśśWŻæšNŸŚJهö‘š…åĪ©5‡u«×³ÕćĒīöH0¬ĄtóųR}»ŌŁż—xcYŁØ®˜uuS‰oōŁ“ ®„|æ^õéźoķg³Ō­ų–Ū(Ē%;’Ÿjłœb:鞹3Į{d"uķ§@Fk†¼šņjK+ØE͌Šb’2xd>æĪ¼*ČīĆK”ų9’!ų=Ŗ|;ŌaÖdŅ<įÖµŗµAž¤žŽĆ¶3łWęŌ~'ž]),&]ĄĄ.>uQõÆ>¤]Ļ¢ĀŌ“ls¬Ikš)«r3ŌZēl5r—#«ģaņœp U'©ÕZi£JKµ™—Ė/ZäÆåĆ29éĄė^ĘŸ?Š8æ/ķ—„C:œäŽśĮš/Āžn‡d¬Ń™5lŽ ŸJõ)»-SōCįO‡†‘*]Ó„vŸć6Ļ ö«“lUŹHĘHéž@šäčnåŽĪhNāó&; śÅv6 l¤L«u œćó­ lxĀx–ŁuµKŹqø”ÖĘ”§G"%ĖŪÄŲŻŽµŃa%©–Ś­–˜«4‡ÉŚzż+®Ņķü=ā[hµ‹)!iĮ!ŁFCzÜNS̕¼µæ•Ūy+˄ѦÖ_6x$p£=ėl|Ó­ųŽx–K vI$œ¢4`«źOož½{o…ž5xuTD w€rO_zčŒHög“ŚxæM¼„Nß»C.O \\Ž*¾mn¢²/l[†ēšH¤Ģõż>łāU”3#c8cśS/5” ’øEĻsұfZ³Õ”tIąu98Ęsšvµā}OLµ“P·Ņ„Ōįd ¹Ŗ;ŸjØ­HK[š5ż—‰tČu}1¦\r® ²ī‘ėUžĖ5×Ū“q}iøˆ‹\½†čE2±ßŒŸjäĒeü™ž÷ā*ŪŅöĶ— ‡'†ßŲŪʶĆr|’Žõ BZßÉe,…~õåž3ÓķüM#<š†•Nߘr@ Ž,ą!ššA•hŃ=všM¤6ˆ±Fā•ZxĀ6äzP,öŅ`É „m#ļdpIPµ¬P2ŹӞ•vꯄĮŒ Ž8Ī€6ō­t2˟J¶Q$…¤¶#Ķ^Ŗk9 9WQŸp…‚īĒ8˼lŪä$óĻJĢe·ūJŗßµrz¶˜Ė PFO@:{Š7"®5ĀF-ēC3lb„×®ot­:[ķ2Ś[«•Žõ¤XŃš~»u®ZĒq-«[HĄe}„w!_$:œÖ‚dJ‘r¹ŚļŚ­ĒsfŃ%Œ`õ©”DA!wl}Ąöō )€ĘčĻ­C‡`/ŚhrĀ[|ÄŁĪGAV§{‹A,‘¤Œ:9Ķ ymäh¼čOl}+›m.ÉGšv6y9­@īt’ Z%ƒ?ŚK°Ē5–‹xŻŅ`ĄÄ¼‹2ķQ¶Ŗ¶› 'QĶg0)/‡‘™YJ:õ+j;w‚?œ>ßzĪĄY³" ¬änÉ­›‰łŠ s×Ņ€&ZiP[Ģ³uŖ÷v0$-q Ģ å4_ ņŻŪ€čē$qĻARGJ ‚4€löIłĢ®¾„WpÉ46ķņØ-ĪśŪRóVąż•‡ĢŒzŸQé^Æal—@)“8“Œ†XÕ4™,H(ĄŽ?Ćs3ØS2ē“·"³yc‘ŠØ#‘ŽÕĖĮ.©4Įg +ūŌÕĮ›@Ŗ#'Īź m(’' ōķAJF‚Ć$†Ėtažõ}"¶U9G©§aó³&mJŅ@éGaĄā¹_OŌŽ341¼ŗqV©œ“ĀŅߏ‡ūFŌE*66śW«ŲźQ,~\Š+§®9NŸBeę2āM0³5¼h “ڹĶBŅÖēsE…aĒė&‰8;‹å•Ć/LzRĘ­ሠJCŽęż¶›źH@§Öµ“ļŲŪ¾e²;†Ļ^•p} ĶµĖ˜ŒH’ƒŒŽõš5øräÉŪŽµ2÷Ł¢ņĮ‡$H=©lÆ^ʐS>½źf“24u VńTņńÅrs-Õ£“ŹīWÓÖ±Ėļ҃¢2>ų“į“<ń†·،wƓügį’ķ}:怸$xļA²v> ׬¦šžÆ%…ó•ŗRTo²“Ūņ®ŪĆņ¶óÖ6E;@#ƒX֎†čõkŒģ’d>XnŻ«·ó¬åŽ)f€äW—R&±—B½œ’[“€¾Ų›°ķZ›āv)˜`8SÜÖ%™«våŁ'ˆŗFV=ż„@ū«gp*8śW]eTĮ‹_Ö<)p·QƗnŸ9•OŻŪÆ­}EąĶCžż.ĖSµäķ^ø©éÓz3;8„öŒćgSüX­g’ŚęŁĢ ÉrŖ6śZÉıβ8™€sĻÖ“,µ4¶ Ŗx§Ó„AQÜ×ŌęM~ŹāŚāŹ®ä^$9ܾ§ņ7Œ¼=¢i­um}GŽ%gŪµ³Ś³”NŖg†ė}½­Šmī!dŚ±n]™Vv±źŠIĀ¼­%u-,sÖzĘŸyņFØėʃŌ0ģ+ōką7ķØ ?ź¶ńżŽ8¶į‚™õČn½qV ŽĒŌ¾ ų×.‘Ŗ£ŚŹ< HĒhēŽµ÷Ē‚|RŚõœWĖ$S£»”ŽxĶ>S£Öķ5›H¦Xn'ņx’wZmó²+‰‘āc…aĶ3†¢#½žds½U—×5yņFLląC҃ }Ö¶³“æ8ŚGkåķzāźīžā ó䀽č4PīQƒHńžÓüė$œc<ŠkĢO>•‡Ī”ƒ†ŪĮĄ5—4mĻ%L¤JFrOlΊ\4Ģ»¶ÉėŲęU/mpĢ@ę=Ց¢WŠÅ7ĶlћŒŖqœšō ^³\¼/Ńć ŅŖ14’Š}õŒŚ‹£ŪÅÜŁéļ]ŸÄŠČņĆūß„oœÓ3—Į—ŃĢZ$e;øāŸā;9­“י÷•ČśU87>}ѼcØ jļMŗ“T·W\ó¼{ŽĘ»‹ėæµÄ±ĶæĖ'pt¬Īøģq“芯K'Ł]ĢRzÖösA1_+s/aX1IŲ†k{„+ ē’G^ęķŃQfŪĮē§Ö¢M˜“YėV³&6dtl ÷­cgēFIaƒĻ>µąŒ‹č’ĪŻH#ĢĪā9śVU—‰,āv‰ćt|šŲż*”»›Ó¦ĪŽ/ˆzf•=½¬ööó¹q噎ąńóŅ’ūZ]F]Ė"‘ŽxŪC™»„”=“ļ gxćµmXźaäŠ÷ē4”ūœó¦nI©$¬ !½*„‰k|¬ēŚ8ĘkB#+š†‹Dpc޽½«ŚÖÖ»§N҃hϱfåd“‡>pČŚ@«ZEĄ×Ft, B ņę¶Q‘r×¶.ī“ė»m6ą±sł¹ōć­R¹³žÕĶæŚ$Įg\ÓäF5 zU•òŅDqü$v®Ø3Ä<²ūWčk9FĒ7‘ü˜xǰXĄśTņY­Ģl$U 3Ó½zī»ć«ū-'I»”›‹0Lq*Gø¦O^: ÷O>š<{Ęå®§2Ū‰^R§ĖxӀƩ&¹I/m ó“ĻŒ†ĆäglYģŸ ¼/Ī“^{¹ uC·'‰ŸžųācAÕ“Ķ3^7Wó\‘n²‡łU·lWŌŽ"°ø°šõīröEʬ€ē<ö5œšø„Pł?Ēś愨ދ# ݤd4yČ<õ&²|5c=¼SZ‰dłX£Ś”]Œ\Æx.ĘmÅRh곌¹R}ó®|[ąŲ#Žö›)$*ĄŒ°'89+[ ‹¹ÕZų¢ęk•š3{{öē /<×,Ÿšy ³–ᢶW*īŃķŲ}ϧ֗*Ļ¦üu5ź[ĄšŽ@ę€ō>Õ­ń—EšÕ¶§kö¶Öpj'—(HžcļŸz«ØŲņŸjZĪ—ń•¼Ū•K‘°‡)éõ¬ŚānÆ®ųV-b ² ”IēÆ#źTN•ŪædĻYéĆF׬”³Ōį…n%r †įG?¾Įń‡_ĘZ4śźŪƲŖy›Š ŽOų§#9DųĒʒFÖ7¶¶VžeŹd–S…Qģ+åmĀ:—Š|M-¦˜’ŻŽ“„H<łj:§ZējĘ6;ųGÅßµ[Xµ]"žŽŃ‚ģ™—(IõöŖė§n–{‹›2Ęģį€ōķM= ą“¦kš-®½i¦Ą]ßē;0{ż/ųKā]?BŃl-nÕīmö†ˆ‡*%e+ö£ŗŗųšŲ[xrŚiüFŒįƒ «ÅŽĆŲ_“#Āś…Ī•=„Ķ­ēž-ģ’VAūŽćŽ“©ū· 4¢ōŸŁźóLšŅkŗē›w#‹ˆž@¤tJŲūV”¤X!;Olƒ¤ƒv~µ¤j ßc–š.¹w§ų…ļei’×?v0ėĶu:׍użBāM.+užŽMÅ®vŸŅ“@ÕŁē:kjz­6„zŪŠpWåōÆCÕ.¼?ā›ļ§Ō¢[¶O+r¶ .:gņ 9ĘÅįi~„ą¤Õ. t-1ݽ ½[ųG®ųĢxĶōķ[Mū<×nl9UaÜśv«Rī.UŠż-ŠÆÆ~Å ŗŒqŹźƒ!Ozłā'ˆ…ēÄqElĖ)‘Ń›;S‘Ąś’*ƒš×µ˜4µŽ„¦~o+žŽ•ĻųoÅĪyŅ;[y’tU“ ×Ņ‚y©<ņėv2DŠ„”-ł‚ąҾ7ų k:Gˆµ—V¼ŌbYdP˜]¼ü£éU~†n&‚„ŸV¾‚(į #0 z–Ļ­}įuOZĄÓ«­»ēb‘śÖacbś;]JF•‚«¹¬; !…ĶĢ–š5ŌH„ž5sY¢”n|÷®x°č-{Yt»łō×;T³DÄągæĀ½SCXd·¼ŒŸ-•K‚Ü$t²NŽ•.g½³‰Ųš$R>Ł®oY²’Vx­± Æ ĒŹy§¢3—‘OĮžÓtDŌę–)CϹÉsėŠĆ¹†Ž[™qźj\ĢSg7Æhŗ‡ˆ/l⾈Ž[ŖłJłĪŠ:ś×„ų[Ā_¼*éˆmZÖT ß9ĄaĒQō¢3ītS–‡†üV]+MÖ_Vš–µ¶lģaG$˜½WwńÅWZ¾œŚ‡‘s¤F8#¾?ēTž—:”ƒŗŌ®®n¦‘¦`2ŽY«©Óķķu%¶[ĄÜüĆīūžµ…Z¶7>§Euį[;X¢™\7<ć5V=Ö¶Ļijcž8Q^mJ§D tžҌ·,÷*ŹĢÜcÆOZś+ąn­¢é)¼ŠŠLˆrYY±¹Ų`>¼ŌF7Š®W²=ĻāŌ^](E®iVwRøVVxšązę¼óĄŽÓol!ń'ĆĶB ”“döļ&’4z’žE7A“ßch'¹÷ÆĆĶnØ­-u‹`«*˜Ś}żkŌ|q”xöŅĪÅÄ6÷! HS†?Č'­yXŠ.öGR‡sņSć†ma¾Ōõ?ŚĖ³(Ź€~ö+ēĻų~ĒQÕ§{ē’Źą±ĖŠĘG”ŠéĄÕtŪfn=ĻÆõ{/įʓ¢k1Ū\j0ÅÉ2)®OsÅ|×­éI.;ĀķČ\#N×O·ę•ɱå6—×fīĪ6éć•H1·*į€ĻįĶ~žų&ūPĮ:j܀aw/½—ęc“wükŗ“8«mc/Å^.¶Ń­f“ĻƒĻ@Ag·„~yüGń×õYˆ»™dVŻ·°ēŅ»TO:¢g'„ŚÉØ]EnŖĻøą+Żßąœ7śWš~£5–·Ÿš/å#×?ŸēV ‰Œl}š«Ā3ų[I·ŠT_“²|ē~[ß5茎¢xŠČé&Šķµm0įd^U»häE'cįߋ.| ©ĮØųfŽļSšµŪž\dż‰Īr2yǵsæµ®Æ<ė·ĶhĪ:¬ĒŲX+"įGO­BŅĪŃYw±ēwzī§±ēĖqm-+ łķŠUIrJĘÄĻOsVMĘ”R\Ąw£Źģm€°ōõ ,@Y³ÅĒj’X¤hœ‡![ćAqZ‘F‚)+|™ĻNæZzHFTNsųPuÓC¤…oÕ¬ęS4 @uĻ5ź–?>&xwĆVޱń’Š!š‚ ‹§½Ó¼@0œµ„ŗqG©$W3,å¦yņ]Ė~Y¤™™öķqŒuō¢o”RhUj®XŸJcc²&įńcŠČä›--™d‘wcłŌS7—!ė’}(0)͟1C)+ŌҲīd°ē'½2‚[eŲvüēŽ›2š³ŗā‚EcH˜x¢§µŲŽqŚp8žō®“> =«KjIe9ōäL±–‘‚°AõąÕ–t˜[™Śhü¶ÜÆł•±Öƒ²œź‹ž [ūHOūP|›įMž“‘|iš ʖNҟ6īŠcc7?0 m?@;×|NšīŸ¤j:•“vŗƒD±^Ŗ”H ㌒Zņ1Ō®ĪŹr;ö)-”pSļDĀ®é³$^]ÄĮ?ŗįŗ łŹŌ¬vS•™åß“ĻĮĻ|eųCā-žŚļį…ä¶mæ;.9Qüėųłń÷„µ/†¾0×üŖ$˜&&ٶm”ī>•ĮR«‡Ŗö<ź{‹  o#IŽ}*…ūƘ\”ŚJć«­N÷WCfÓ3ŗIŠU¾cĻŽcW·‰cfĘBē>õčŅg—ˆg¦Y*Ž‹¦›ĖˆŹ¬ĒÉŸ…~ÄüŌ,fŅü?uem:ĀQ\Ž c’=Jõ ō<š‡čσ,ķ-DsyŒØ%qĄĶpKYćx 0<RÆŌ’ŗéK¢č¬-_Dƒ`žńÕų'ÄÆ©Ų–žŻ`š.d'üERÓ4Ó„Ļe+C§‹Yrs³YRµ“ūąR7ƒW) Ē7Ŗč1=»ĪŒ~^ ¢¹»-ÖrĀ e<ØlóļY“(\E5’„bŁĻjŲµÕ$KUTw’1Į Ķ£F%K†Aēła$’ ?PŅķķ˜.č¦lTēņ øUõ¦ŻĶfĒSŠŹŒ<®ö ©lvVfķL”š¾ŚĖ“mhȆN™4œżåŲ“ĮSŽOŌIsµ °²w½kiZœEĖ^ƲdćęķQź‘ŚÅvĶløSÓAļŽŅ?śõ½„ŻIhū6+Ŗöõ µ9f¾¹I­P©^Êź^H[OĢhŻ@„Š!hŪrײ˜D«)`qÕh¦ÓōĖ-Yd}ŽOq^q¬io§ßČ#™6ƒŒŌ ¤×LaśÖīŸq!™WŠL™vŽīā&uʘ:V“Ē+@Dr|ǚRīRHÜ!VÉ#õŖRŁ+†8łæJ NęGŁ<§’DsÖ²M’™(@‡w¦9 f“V‚d2`—ĻZڰƒÉpĪĄ®1M ='Gm2XY%dŒ™š¼Wξ0ńPµÕ¦†ŚņV2APy5ŗa(v)ų[ÅqźNÉ :ƒønεwpł2Ź$w ńM‰Į}¶„n± xĆī}k6ņ,žšņ;ڱ—c%n¼©)ßtf¶aŽŻ¢båƒRøė*¬ģ‹Ōœę –įāĢsojEFV,+YK ¶Ģõ§m·ŚU‘éėHӝÖ³ŗ8,#5ÕAØ@°!ŽDµ­19ö"øXµ^)•]µsךKHCĘć”ĶBö‡1œÖ’®Ų·8ŻZ_frVVˆóĒjČÉR;x¢Ko±±ī?J“×¶š/—–łĄō ĢŖ/‰ČĄŪėŽµf9Ć”U?…A.ż…0WÓŽ³ £»ŖXõŐ—C&āÕäw—pĻJ†mε‹yTć":ń'……ā—E)Ļ#5ä·myįYąM=¤ŚÓ ą_jŁFĆ=·Ć÷·š¼M{MĖĘjźą±ņ™[.zā˜“µ»2ē*?J·ż£ Ü^\¬ūHĘ}+œē3nm ™øįˆėY2!ˆ‘“·qŠ„“ń°ŽÆ³>œVÕ¬ipB“c5p‰q•ƒR¹×l<ŸģéT #;ūµč>ńŻmMF-Ī:ąVɤŽč]é6D~Y¼ĖZŗµI Bя›¹Å [±oG»ŽU`[?ZšQ ēģņ|½Ęx¬gø?<ŒīĶQy‚…>_Ņ DAąXŁ•™ŽĆ­`_N*8ź3@ķ…Čøŗ*ź#}Ü{×}öa-؉”]Ųź;ÓøŹÖvé »aQ ¼­wŽVV1­č{Óę`eÜ+‡1²Ć®+:RŃ1ą¶;V©ˆŻÓ•žļ§„jÅ7sˆc ūzSfĮeŅ®)&O;[Š»ØyŅ£$~T‡Ó½a_$ÖA‘#Ź·QŠĆŽXH’Ļ$s@ Žöhr‹+… +K‰Q·®Hė@ļaņÕfĪņ:ątØķ  Ļ óQ)k`6.aоƒµGg$3o“ŗe¾é>“sh&Ė­¤Ēl‡ēI™™K”Ž žø©åģ2ŪŠ<ēkƒˆ ņ¤‹Źję5 I9#ŪóµcM’xm“p,Gb) -}„§ŽŒ„Ić§V)ÓžĢb˜Õ»X Ö¶Ńü¢R¶EuŚUŖ¼lBX€M]øĶrY¢ømźĖ’×®‚ `Ö ÕםfŸjl°—¢ēƒėXq”Œ g€.µŽćóž•JšWš”c`ē¦)Å_@9Ė6āĮ§’ ĄœōÆ?_\ŲźiZŒ0¤'l‡†Ļ„l¢€ōØ4[Y‘o# »°wā«\ė­a2AqxĄłJš¾].;ZMö“z¾bŗåŽn5©ökS ²>ĮĶ@ŃĻ®›#N]&‘øĻZæöA 9WśV3B1µm& ks“§Ö¼¦M^xµ±“Ė#qPCrk1ž±”Ż”TxIČ„u,¾l»Īj£øŽ~O1.BcœmĖ\#ØŽģ:qŠVĄIĢц߷ićšTŚ\8A·½ n+„Ø'e%ęĻ%Š8`xśÖ2€ņ?M5“”ņÉ9%Mp:ō7W1y«,Dm¤Ö18)ÓģšI,ū¢#”Šēß^EfFuø+ņüŌy‡tXu­6å µ‹ĢPJś×Å> Ń?±nYĖ-–ļ·ėA“6>rųÓąķ]=u}>Īp„Ŗ85ń–™yw Ė 1YQŹ:æMĄćŠĪ¢ŠŽ'½ųzūĶ„ “ŒZõMĒC¹·œÉål³ŪX•ēŌF‰jfj6÷®Šéæéh£?x×;e¬ŻOu‰­. š6ĒĢ1Čō=ė•£^]āŚłeC,sÜgš{ȓ·¤ iN] ¤ŗ3ϵż=īɓЂ§p5Ń|)ń ē„5)ōūĶDI6Ų\ SĮéP––0p>×ÓÖąY<³DV\6rEv3xVÅ-äšÖēē`['īŒzWrWF.),–I>ųKĒŸ˜õ¬°x§ŚbĖīą(¬IŅĒg¦ż•lŽIł›~R"¼ßĘžѼC¦\Śjś\7ńŗ&)Įąž9śPm|wā= (Ž{i"‘U$ņņˆcŒ~uēŲRéŅy¶·3 UøpĀ™“[źa_i°^:“æ%Āü½sSųsZ»šf©nļv­aÜÜ1'¹ØēFš}ø<-āČ®¬RņåÜą…Ī@ƳžųĀ[+å1ŻĢmåäķ_ ķKŚĶ£Vb ^Ä]*™¬¤rĆØļ]fy›ł[ˆ·^>•JW8*Äķžī pąü˜¬K‹¼1Rß'LS9ŒBĶļ,gņw#ņ‡‹¼%­hŚ”Õm®dŒ·ŁŹdæćA¹Æmć9®­#… ū<įvž9V\Z•ݬęE”™s•択Dn‘©®ųŹīęÉŠG$§ĢG­|įsć3Q›NšBe N’Z|ØR7ōélāq"§ŖŅ]YX•%ˆ|óøŒQ;l\O Ö“ūūmI&±‚1;·¹ÆEšUĚ“ÆiwhŖ¤‡-źjGÓ^Š—Ćó ­_mQŽĆÕéńźa€ŁäśV°zņÜź­ōįw™gn?óOˆZhkiEĆłrĘ8>¦ØHłūU’ŚöKk€Ėü@Žā­E,.£kżīE‘Õé³ČRąĒĄĘzŌ’¬Kr$B÷½kJęSf¾—æķ[Ł"ćƒ^“rtim•7\*~U¬B.ūœü‹j·Ųō¬c!½;e˜łŻć֘¤¬Qŗ“»¶)ó³‚qĒ Šģ“H&ņ‚ŖJWł=(‹·Ö›VY$Q°®y-s\µ£yhĄ§±éAvčMwsęĄNā•9bµ¼·Ä¤”ŪŽ=ėʎ“ᛕW[¶yG˓ޕĪkzd–wGģņŚÄśP¬QĪ\Yyńģ8‘ŗóRčV’e½2N„[š§…\6 H÷½PŅeņŅŅHę~aƒšėbÖRݜI½œ|µŃ d™{t2³ƒė_ExM-µ}-Eż½ŗ w1€W„O)œ„c;Åž “Õ®4ĘŅ‘lįTņę;3¹p+ė?„'KšTĮ„;ŚłIö¤üøī?J„¶§+Øö>Cż¦™×¶ļs"Ē"‘†søū“¹µ¹œŖju¾“µM*A-½“>j•rÉÓб40*²©Ī=1NlÅŹį¦µœ9²ĘćvSoÆzĶń½•ŠŪ†·0N„Ź9Ć‚ƒI‚vXœF2?AśÖ•Š§Ń/į“[$O÷ö?ēµZ‡r–„³ćōmzŚīą½ˆ!Ē–„²09ė_pėßl|Sį-MŅtöū\q…,ķķœcó«äE(³”d°ŚµŌ°G"æŹwW޲5;]>Ōy™o˜²ŒcŽ”œDšų¢{[čRÄC<"@&ó®Õļ·ėf÷ā>‡žō°ȊRHŠīŌ{ŃģĖP0®/¼ć_ _DŻ„k»%P1¹GõĻją,|)cyŅBq,¤*ŹTČī;ÕŲ«Sų> “ \Ė čžÓ¶!A ČP{t®+Rųƒ’ æ„õ«K» hfŠįbVŠRģ]yÉść  =›öwų‹ą’xcSšžÆ§[i:’ -’īHȽ’ƼU‰4źz]ż„…äÜP2ŹĆ=M„­Ž{āÄ8¾źZ}ž›£¬vģā2`]”w$ōÆ”4ŚWń&ƒmg”jK{ Ā3æ  eIĆ”ęŽÆ ģM¬ß"+±īćœW›ü#ńv‰įOŽÖvzĢĘMPaOŽGÉ䁊sG*1”׿ˆžšĘ­įŻ0Åqg®iņFĢÓsGĘAö’ėWÄzæ‡ü2ĀćLŁó2ōĪ=k.C%6’¼GšęÖĻX‘­•žĀŗŲbOłõƤ<āSö;?~Į€r{Ō¶ögDgŠöMw[¶›@‘ķn`‚„¹cģ+ēļģ/_×ō•óŽÉüž07¾_ŌÖ2Z–§ŠūQÓ.…ķt›³Ų"P:qžqė_0ė1hś\WšuŌqÉ$ŠLe#žž”©‡3>r·Ö¬įÕ$—zCh²÷RĮĮÜ3ĄŅ}¶Ācø¶FŽŽŲ®ˆ>ŌóÆ‰š–¼mmc†Ņ±Ø"FĮĖ~9ė_8hzŻåÕŻķ” =šČBX®ÓįĶlR‘ś‡ū8ųĻĀz/‚ęÓ5Ū‹KKÕF(Ģė@8™ćõƗž*|GÖ“ˆš’x9ķKŽHR7ķōp:ę…Ir?I<ń&Ćā'€ō=zĢZ­ģŃÅw|·Ē|uļ_ xŖ(µ/^źv˜īŒ2vō?Žhk[ņ–§žµœļ=ė=Ē™ČhÉū­Žß„QŃ5-6ßX†ĆWeÓķŲ7`1ūcņ¤ŠŽ§Ņ ~&Ć¢ŁjŽŌ^ZŹ]ĘÜU»zcĮj1šĪ»āū xŽk}"śtd“–fĀHOĀ›Eŗw9ėßx'ǐŲķ3Wµ4w6­ĀäõķҾ ½ń“{ie§Ü“6÷¾PTt;Fļö«žtŪŲĻ‘œž‘µ¼ÖŗÅÄl$}­"’6ZtzØŅļgū1IÕIPTšėļS“4Ś9JĪ×UÖ#šį"]lŒEzn³į;Dšōž ²¬{§¤•o’P®„ÅĪĻ,Ņ k׋O„khó•h‹ÆŹ_^ł® õŌJJģ¹ć©bĘ3Äą7ć[ˬZÜHŃ$±LČpv°<Óq`‘”sco¬X\é7qęÖNF+Ē8üėąOˆ_ ®¾xžĀÖŻ¤‡N‘žd92g>§>õŒ£cŖ—d}ėū~ŃŚ—ģĒńƒĆWq^,~×fKųęlĆ cÅzzęæ°}"{]SJ²Õģnģol.KC mČz+žk©čĘ(ė¼3Æ7†u{i¼¶{VmƏįĻzśļLÕ­µK$–ŚO1dÉĒŖ3œŹų,’ģ£~Õ?²½÷Œōķ)›ā߃X^é÷ŽM@elrT®OÕ}ėų:×t²O¬3ī;.)‹(åŌŲĒlŒQB 2•ŗ»œu qLßf 2¬N}:«,k,«µ‚óŽzWu>Ē ©•®bx7`ƒ<“Ž›+$.Ā29ĒzŠÉ«:cp©ä&č™ džĀƙ²GņØŲ†3ǽ‘X0+óĘ{T ņ&K/?J˜H½mr*÷$P“|ę7.ĪOPt©Ų™£31‘˜ķ^1žjåŗDŖĢĈ€ž#Š{ŠŻŹęę‡cq­Ż =ŹēU¹ 2Wpż+õöj’‚YüMųÅ Śxīśk=$ÄÖÖd‰“$q‚}k–¦'”=™ņŸķKū=jßüI=¬ŗlŗtŠ“‘Ż[€Jć燒^¾?¹_'nvæäõŖ…[«™N%f‘bvć5$b-¤““Ó$Ö¼ē4ÅR®¤§8鎍²9Uo¾:ՙX¢Y "*æń0[ėP6čŚD Ч‘ŽŌFv’põ÷©C9‘UXž9Ēz ұ4N$łd%W<Ö¶,š&`¤mĮĒ=č:©£źļŁöŒÕ?eÆŚ/Į๑ß{šÆķŪĄšõ¶½a„x‡ĆZ…¦±ąĻB—ZtŠū‚’Ę{cv>‡ėŽlL}Ū°Ųļ5-g[ѓɮM½k›łą^ZD’=xÆRÓÆ4ĶwGµæ“rÖwP†ä`©#Ҿo”Hךü·ÆŁn.7Ļ å ‡_CųWį‡ü·öS{•Ōõ]!ÓZHĪ„¦\…ø\ä¦Gc‚>¢¼™Äōpó?tŃ6©d—ŠaK•&)ŠbppV¬ŽZ$&ł›oŽė\mš} VQ$±,öūĄ^8*ī­“ie€,z;ūW}qׅĻ8ÓfšŚį•˜¢ē€G ×čgģ…ńe¢½ŸĄŽ(”‹™ rr«ž˜”ÆfŠ<ŁSč~ĮxKĘ^ U·²Öu˜lr;€8ć­xŸļ,u=aķąŗ‚ńC’„[ļ„\ a(ž•šŅ4³µĆ±oéÅz¬7rE>ūČA\żģt¢ Ģę˜O}kq:«JŪ”äõßh¤WŠ•†™xéĶuAčfaųÆY¼³‹dL äć&¾|ń“7‹“}JĘx‘5Œł,Ļj¤Ź™óĆ›ŸˆŚW‰ž=^½!†|m(ޘļ_FĖ{óĆ,&H%NJö4)hVńķ®éĖc7ī6‘‰"8 ĀŗéĢÖÆv×1N±Œ rG¦+Jg4ĻmŠÆ?³”@N”†8ük2ėP½MCh¶I-IĻkFˆ;ķ&ż”dT*ŻH5µqÆ%Äaf·ĢĮ€ļXŹ6Y‹ue õ« WżkÕa¶b uŠLąóŠ9K”»­įŁiÉsŅC&ōŪósŸ„bj±ęåÆ4öŹžJzÓä'˜ēlµĒ»ž{Q”:£¼=Gäj ¢Š+£=ŗ˜%<6;Ō ˜Šęį¦s£,{ć­:Ąf…ĘSłP&Ž…¢Ž.·”ż*µĀ© ±ĶóvSރHÄFb#ˇ޵Q¬a¾ÜČLaŒ ±—ey©Ł_}‡QH®-‰;e^? WE}c»!ŚäpŻč1”lrG{ĖŪßŖ=±?+wZģnō‹qe š•ņ§Ä‡śĢ^1ÅŚ^¬ŚHÄwP0$0ųčkE3XIljųSF¹²ÖSQ·øƒ}ō'*OØōÆ£l>dG*ˆĮöŖ2›7­¢x²źŪÓ9ŌŪ˳±ŠŸOJĪg9•ijņŗ»pz“]›Eg,aW*ųĒ˜ĖkœŃJÅHčGZęu{BdʹgéųS°“˜­®­,•O$Ōmbй–7;ó† ,\Ÿ1@ĪķZ–dx7T2Zø=@°©“øéī)&ŗ’(™Š)=Į=iĶō—Ō×z¬ŁQŽ6“ĶV]”i`bŹ£$v¬Ą­$Ķ+F*8f¹yeH‡OjeŲf•B©Q܊·"ą«ōķM¼v\@ęÆzKx¾Ļ"ČĖĻó­b†:k$’+˜ŠĻ?żzß±žÄ@ŠHa1ŌŃ)Xø>‡”kHłķČO#Ž®RšœWWQĪĀ9®Ņ:TūCCF+)¬<ø­že蠚ź£y–5W?…'6)"&ˆŹH剨Ł”Ī`ž•g„Ågs ZŽ•jK)^sd#·j‘ x™ĖĢĖ×­pŗŹĶ±Dy!=ĄĶ4®W)ērx”ōūķ«oē ėŲ­{†üEmw•[xa‚§ŖšÕA)½ņ‹źzõµ»[ŗŹ/fI‘rNeŒoCÖ«^E°Ć „qE¬iņ„OµAoŖŻY],Ń.UNN{ՁÖ^źVŽ&D…P>^}k§ŠĮ±WSĪ^›€äP2+éōŁēx␀O5Yķ-ęˆå#ö8ĘhÅÜZ4S0l:ułMež c`y\ŠŒf*¬18ęµŪH–;qwW^½k9 )¹kŌ2$Es÷ķ{hź‘Ą\Žøõ¬Ąźō†žņĶĀ“,ńzÓŽŁCƒŠv`UŌ%ø’2Ź…ńÅcZĖp%A³ß©¤‹ˆü×ÄØ”éb‰˜oōõ  Žˆ¬FWÆJŽSD ŻÓ4ĄŠdleŗt«(n¬dŻ™ƒŻ©ÖXŗĻ3ŸéZgŁĄUf€9o]¬^YĄL`s޾}Õ¼YuaŖ/ŲĶ]Ł#=«HEF=ĻxŠloum>+ĘP¤Ø?Zy±¼·p謬"­E/"9d’Eņä‡nO9ןkz›v—ŪÄ̧ŪŅØE»‹©,lKFäs8ÆÖüGsvÓ}ŲåSõJwŅʰZ÷‡<}Z§Ų5B-\åČx ōÆ£¬uŻ:öŹ8Öā?5†sŸÖ‡äSGA¢2Cnöļ1øĖ±Ÿ„6H™f8hĒTœäĪ` + fĻ~õu£č— LšmŖN§"@§p>½kģ4ģAiŌnń’n§ ź+end‰EĶ8½DrzŵõÄńĪ®É98=ė{K‚;›`’LČłĒ5°ī“gŲĮ]6ŻT“Ó¤TTŽō”$śuÄ@–‰”ųą×9w~`sŠCšŹLg‘k){6 pĶ$“ו9¦>•öČ*+‘ŠœTFZ]®ŚżĢ·ø$@ąęødšż‡Ś–{k·ņĪ|Ä&‚“©iÉD[¼¢1ļ^柆ńŻ“š„hźĢ§vĆĒā(6¦äŅć·ó-Æ-–uFo–AĮķČÆĻŠ~‡Ā¾%k›h§sīø2c <ĢŸČÖ.ū0FF—/›Ņ„F=«Ō<7p¶öäĪą@õ®j‘čoµ’ę b@ČįńÓĶÜŻFÓł›P>ī½rŹ ,I4jŠ#ł:g½6ßQ{pžBŻ3ėųÖ6±2ZŻŻÉ}Å(f7p£vļ÷ŗ×Ÿ\ił}²ÉäIĄ<žüWu YŲåØ®>ų™5M2ŚĘł-㼈“•bXØ’ė ž5ļIwöį"¹W\ź[ÆŅ½Jlę’Ōē.aŪ"“‹Œ¬yŸÄxsUŃĶä6Æ·…ĪĻ•BéߚųŚźK˜5 ˜n­ķ¬Ł\¢Ł 1ŌśPtĘg+tJĶ5¼*gne{µ>™„O‚h%ūNC–aņēÆō®sŖ ė~ų–ÖĀžM&ök‡·sŗ9%W==«ōĖįDi0Ēä_E{'˜O÷Xöō¤˜¦·¼ ń ēJķĆqdėŒ1ĪØ÷ÆN³ńR]H¦Łžp{֑±ÅUĪ™ā',-ē³õ¹#O;O˜åZœŚV’¶ ’JűĻҼĒ~%7ęÕ™ RŲīŒŠ3ĢäEw2( ēśš­*ŻĪ޽„)XÖ1īu ¦+Äe›”!x¬› čwžt²ŚC Ė Ž`’:V™¬]Œuy †DéŽ”Ē‹ķ=Ęyūæ…dęÄkÅ¢Fčx Ł’2«öq ;‚ėn2£h`0 8Éģg9t=£BæŠņÖ5Ģ‘Ź^‹Ž»K;?5Ąbp£ƒżźŽ”“;Ķ/P}4Å|…ģGzē¼Q©ŪjäŽG”}­K‚>vńG‡<*d’kO29?|ē?JņȬR°’vö ŅQ:ŲķBB$Č>źzS–ÓĢa/œqGn=źI›CÅi”Bš6ŸŚH:īę3ė\żÆˆåŌåiāŠX åpG=jģfØ_øøŻæŒv¦K+=<Ł›ÆØm ļō[d•”0'µ Ö_LE1F†yŻĘx “Źā«{ŌŲ¬*ĄsŠÕ{{ ‡iēc›‡ I“’²Īó,Ž[#9}*h®cµ`&UtļĶc$³_ŁŁø’ŹYQŪ8Ą®cWÕfŌ"hV6‚Gš"”ŹÅ$s֖’š’O#n'“]-“N±*¬›×Æ=kJrV!hnƒIåHń’q¹IkæŠgŌF’Ķ-ŹÉ~µŗoaŅė±[%rœćžõ‰āKJÖ,g…&0Ė“®PąÆlŅG‘>—¶W+3Ź@ĄōśÕ?)ą••ŲÆŠM•’£y»TuōźV¼ŗ³†}Ó³Ŗ:­`ĀĒ!©k—F4c7—$ńüU“u ÷€ó‘ŪÖ¦[ ĘņŖFƒŹ˜Å‘Ōu¦5»³¬Ŗąøąö¬ Ź7w‡hŹ6Ø-‘Ē>‡š®pHq"³C"9źh7‚2üAāR[?²^ŗÜǜ©Ī; õÆ4¶ƒĶ¼.“1!ą’:\£pź{g‡^m żąī:VÅĪ—`§{!.NNOō¦a(ō-Ś^yL°¤lœķpkM„ c xā·‹#•le\OsøFĄM|¾õƒ{¦G!R #ž6ścEK‹8m q9W›‘•UEµErc8õ e‡I‹"¦ęCÖ¢‹Ķ€ˆä`‡9Ę>š Å»–®5Ė•ŲņM!‰FŽqéųSMŽżŅĢ’?ҘDžmüKcįŻ2In[qt 1ó‰=’Ļjģü?¬ŁOkl"Xeh¤šŻėÜä“9žuw™¤jX“é!W$däžzń­§Š“ŪØcŌVeg#`r§ŌŠ+Ÿ‡ü)¤6Ņ ˜u'VÜAG£zÖnÆį…>&“¹x'”ņ•SµOėC*śÜō«¦·³K?%ü†$ܹ Ōūq^ıü<¢I•¤ŁęeGŽ’8®r¹“<ņ/jlŅiq\Mg2.‚ćėŽØj·Vž"·»æń34Z…·ś‡9 ėŒ_ēZFĻBOÖd°±¢“ö¬S?)÷«×Ņ%½£æ“#«.G·Ņ­Ä–ģy^‘©=®©w N÷9;‰có!$ńōVÕܗeRĻŗFĘH’ėP‘ā:ż?F*É,;HĮbk“ńFøiaxö§ĶĆ`šeÓgÆMnlį'Ź„īS޽’ą‡Äiö3Gā{gŠ8†D„aėÖ­DéG_qń§MÕīītM0Į±dœÆß\ń“Š}+§Óķ,uT&Hå“ĶcaR<_Ę ­ō{ĖĖų§y­ē•\Ē$»‚qŲf¼ó_škǦ£ ®c Ātn¼—-lUљÆEe§@u i-mäūątéüŖ¶{öm³ČJÅømÉėL“×muėÉ¢{{YG*mdSĆzĒš_†.tŻ]OhŅéw'ć÷Yć śJįsøŽči® °i¦Å‭ŸLzV-ĶŻ†£Ø³³Ä.YĘrzā—7AĘZų™¦č%šüŠKŚ=„Š²Æ®=kĖ~k~²Ö`ŠVėd ÅpģzJ£hģz—ķš›ĘŅé6Ž Ó^h&oHʐņńҾgš'ƒž"^jV*ŅašO"EĢ2!,Į[ęŸĘ¦2øŻŲ ÄnŽ øøÕe›K½d#•ž`H9Å|½­j-©^ ‹I‹²9A³©ēMQĶ$‰äÓķ.ōmLź1»`¢)3Ģ}ÉĒzłæį÷ÄéōŸ>­Gmq¦\LšĀŪų”n'¦3Ņ“ģbØ¾$ųs[ŠÓX²oµhLŹ­"“ƒ‘œƒß“į7¶‚éu‚Y¦‹)#•5‚2ŠöĖ?ŚĀėM»ŠM‚…·?0 %‰ĘyöÅx²uėW½“•w„ĄPäH„õäcŅ„E#¢/©ę_ ü?cāWń?ƒ¼Oj~ܐ3Ų]! ¹ź3ĒZʶ[Æ ŻKcسy¼Ø%H žu¤V£f&µŖµł{-ņy!·'®+cĆ>ŃÆ4Ė„Ōō»{ˆä'ü+×.£¼‹Zd™åpČäc­Tj"™é~ “Sųq¬ gŹŅdp$G–ŽN;cšśZėį½Ī™eā ;ZŽk¹ĆIq¶BōĘ9üéJZ\ŹHó _ƍ§ŪĒüī ¾ušĪØų£TńU–©y–Ѽ‘ŁĢßźÕ€Č R‹„lOšėDńž›ā);…Õ$c$Y.:cAĘq^•ā½ĆTøK½[Mņõ’Õŗ¦ ^ø=jīm§S"[=JKĶ7P±Õ]R܍ČĒ–uēŅ·üGw¬j‚ĻRŠ6i¢“ Q¶(ē R`ڹ߭õÜŚJÄ×#𾣫źŚ3iśmŅŹ™HŒa‘Į$qŸĘø6ŁÕÉ%£<3āē‡ōækmo¤·üKēP”~Ta“ŠqķłVoĆ7KMN+ŻNŚīK DØøżŪd€ēŪ„fčźI£Z5¤dV—v—VWń2ŠHĒĖĒØ#ØÆ’’jŁĖ ųņÅŚ×T)2ÅŌ œ–#§Aüéū‹…Sęi¤ģāGœ ¢ß~‡üÖ5‹? ŁhŗłūuŖ§Ź®wm>Ž•½:] ö‡©¦Ø-3*¤MɵS¼|ģ–9Ō609®ØÓ1•KžńĆį&½āOGćżµę«csš¹łŽ!ĪGØāį’ˆ2xÆĮÖŻ[YŚj6į¢ó#ą° ĆõÆ’ŗģvPnČš_jWwŅ^Ų_ ø”6Ń&I,=kÅ/¼0—ŸhŒ\ØdķcŒż=źš Ž°ė·m Ļ IwmŖhÖŅĻ‘²ĒžY8<צ|c°¶^—3ŽÜ?™Hģw”Æ „.§XłAŸm؜”o›+ŗ‡WÓN’ŒEs³kpO°®ČĖ©ĖĖ©Ć(2_[ŁE›q.X(@ÆŖ¾ ~Ļ~$O6£¦ŁŽˆ‘JIū¶VTĻ=~µNŗZTé”>1é~8š šŠ/.®mŚ5 †' Ÿx燾"ųæAÖķuK~W°Ąó-’eĒo\֔ń Hr§”ś1ą_éž:Ņ,õŻ$46ļń½ g?Žk½ńƒ4æč·zeĢ­+Ēū©NUćqÓŠśSšŠĪ ĢüÜŌķuŸ ^j^ø mwitĶŗ0Į‡ēÖæŖļų%æķM}ńūįšÕėDž0šęŪi‚üæh„† zōėXŚéž…)Ÿ­v÷’iµRČ»ĄĒJ÷O„ڼßg’ĀI<‡ŒžÕÉ&k)\öKMѵķ?QŃ5°‘m%ĪFFĒÉśWšO’1żŒäż’h’xjÖŚņėҶ©¤\H W‘Ū.Šzp„cķd¬·9dŹ JŪȚXŒrl TnééXQĒūŅ®O”9’kЌŗœU^+…Y eób”ļIøš·ˆ/ü5w‘Ém&Ą§ļmķĒÓ½=vęJJ+ÓµU:ā%F<Œœp+Ŗ=ŽI”0«"ÄĻ‚Ä{UÓ##*©ŗn’ ŲĢ’(Žģ¼ņ>1€>ö8ŖmRʦB£pļ@’'Ž…FTōĻaNŹ!PH^ZńģY$]؉œZ¾$FbźaÓŚƒzr,,žp[V“b·ĢÄv"æ§ų#GķI¬üGų{āOٟÄó,)šī/¼=$³|×6ł9EÉģIéósҳ«š“vÓgō įĻŻźÖ׌½‘Šī•[Ķ{t’>eSĄ$P5.H匣ŗ«§\c§½m[Mį£l7ņ ™M”ĘThœnȬ¹Ū!XŽE3"åÄ BŸ)Żüė+ĖY×!¶š”#ÉoKcÖ±ouWµU™‰h‡^: CHéģ„&9— +É»$ ‡4ŃöuĪĆņõ’`KŌw~nGŠŠ(ŹĒ1{E*ļ•?xv§Ēcł{yLlޤ܃LÕH¤š¦p"·‰a*F08®¶0öéīņ‡½lˆ”ŗv—–hŌ4·zd…Ėp¹¬¤ĢĪrKƲ;F\õoO¾’ēĢQ)aŪԐ .®-ēņęLążćÅ4\+Ī­"–†¶åŅĄoŚÉ¦Ä‹°œŸ„3t““q“…ī+OfCqcå7nLõļU£³}ł9ēŠąj¤n”RFzÖÆĄÉ\ÆaL|Øäg{ Nū“=źŸ±Ź°¼Ūwl'ƒH\‡g v.§¶1Ē5—q:[»"”žT˜³\›Æ•_hõ5¤SĀ †(śŠ`t6R1 #ƒė]cŒjVs3Ģ=Óø©Ēˆe.¬Ż•ßgLž£„rL댬¬gŪ_C„_Į,QČåćŪšż#ųIāķÄz=¹Ódk[ųŠ¢wĮ8@ü f‚s>•šĘ³0¹µņ§ ļ1Ćė_Né÷zmõ­¼é Šī%=V­“8jKS°ŃēæfŽór0Fźõ/Ä1Ƒg1 pNéÅtEÜē³¹ÕS: 8.`{‹Y"d##o³ÜPĪÖåQEQ“AW-E{p É#°_zé,…­źšHٱłŹl 믳Å'Ģ裠ɪ»£ó+ņzŽõ›ˆÓ±Ję[hŁŌŹ#lńĘjŒ:ƒA¹ŚiĘ)¤T¤^·×!(€7ŹyĮļ]™Hó¤ć¾k ‚āź-x¤»ī|b±na!Čł†OēA¬d_Ó.¢ŠqØė‚I⻉tķ*}6ć÷3øĮ9Ījdūs§Ēn²›gf'é^M®kz²O5”1 mŪ;‰„b>drX»½ŗŗ·Lzɂ’QŅļ ›s$aö’k1Ųé,µgæ›p-nrFpvń]<B%8`}Ēsō©**ęĶ­ž$$\F$#ļq\OˆlÄł—J»H9`IĻ„M8˜éa<a’Hوž.2k6ĖJ5Š!–`ŲĘ87Ōr}÷Ef³ŗgø]©Œ ŠÖõާm(Ż8!Cc§µ]Ž9Č˾2y,Ķ 0I„“–éeĢńČą~5²F 4X»ŪŌ°l®j]OƗ֣žu1ÄŲ*Ä`7Ņ­AŽ2±Ī’fy²įœ½3Óó¬éōŊE*Ū„ąt4ł¢•Čü“ó\BųĻP+j*cYÉY9Śxåhµž¤øÓŁE ͵d›č*ō˜īФ^l)Īģr*¹ ŒåVøÕ5Ū½V(ž;ÉāłvĄČ+gĀ­Īƒ{%…ĘŁ6*²©bÄźM{g— GÆk:Źźö²¶§„ZJ“.ĄÅ1°tłkȵŸ‡6¶éśöŠ¢Iƒį”‘õ·?„х–‡Øhž)¼šĒĖøb²œł±c7®+Ō>ųī=*āöĶ­`ŗĄA‹Č>£æ"]]mZītώX0äW $ńÜ_G Įˆ‡zRgYcšĪ ē»’Āź?¶“£įCy×é_EųkP›RšŚi¾!šō:V­gŒK·$`Ÿ 4©3ę?@¶šé±.$R_jc=y,WśV±­,÷iö)і(Ÿ¼ųåOźk&ϧōč䊮ŚĢ²ŻZ„P ż?śõć=ųwÆŻ_HŚ}ėA‚eT)Ćz})/2a£XŪųu“ķBŹŗ ē Y9Ī9ēҼjŪOžmXĮÜ\3^ƒŠcó”©[A×~ ¾ckyy{˜ÜŗüøĄÉÅvSx‡X³Š^ Vo() ;;ÕĻ(šž§+^]Ż\_}¢įdó>eū¹==ś×”x‹L±Õģā’Y•5ĪSAR3;U5®„¶T·ūEœ/(†8Qs¼ž8õ®ņßQy"fµ¹·2¬{Š‚v¶;{#āw6l¼V#ņ㚠rN\†ä~5·åĮ­B’īy’C·c ®DL©“nŚéZ6‘¤G§Į¦[Ā‘°,{ūäżkĒõė.ė—(ļ)äłš”F åÆõGµI#(€F~õtæ ¾-Ś/ˆ4żÄ:tŠ\I0ThŽąPw>ÄPtʑōæ‰m“­Y^m1ć‚2¹ćœW€·Œu S»Šęœż‚Tē?.Ü tĘiZ$w—Oa)¼ŠF2ķ‘ņ@=¾•wNšŽž÷ķ£j–ɵƑ#FpŹē½[ Ÿf{[kńF…ØĒ{$L±—Źņ:~5ó…āØńōėøžŪ3˜šąåp9Ü;w¤Ēcčx«B°Hm”kI\ßgĪ õÅzōš¶ƒ¬L/%¶†ŲćšŸJ«)äßüEm„˧Io5„µ„øŪ#‘ł>ævŽńZՈŠ ć¹i«A2-GĮ:üŗĀj7 ,¶ņ*łR7šoʵ¼]¤Č¾’ -ņØmČuļšqAčxź7¶PIwye{Jūc}øŪõö­ŌńmµōIjŖ|öåƒéZ”£s· sF®äƒņżÜW3«x–ķ&÷‚Ćå^x浏žæąļŚŽŲY½ęĒPŽ¬Eki~Ok—Zm…ō1@bsŸ_óҁØŲók…ZŸ‡üYqgā;ČļaŽVŪµæ˜éŠĮÕm“ż/T“I²-sm'ĪX.T:śPkģkiģö×£}¾ĶøĮe#pÆ¢ü)ā+‚+…eŪ‰¼k«iš‘ę ĪŠŲ‚¼WÄŚäž  -nm„q0‘{tū¬GŸZ, ‘Üų‹GÕ“l걄ŖpČļŸ\׊ŽĶ,—WĄ2[“ūøöń ŹR;†·ßjń“iq~"ø@ŁWĮó‡OšÆ³|q¤Zx{FҮ公ŸŹß+IĀ8<‚æ2Fr“¹ćšÖÆjökqléui$|ägŽ1śWĢ·zö”„™a‘;8ēīҊŌŅSŪü'm?‹ō=A¬®”™Ö320Ę ēł×ƒųĮš¶”ńFŅ "k>ā+ŻÅ|¢cżāŻ9ō÷«¹ÓŲżĄžĒ>#Š,tŻul!‘cT|s¹€ĮcõÆ2Ō|5oąĢöV‹Ń”Nұō0”ŗ>|Nų•q}QÅn”ä*€»‰<äž5‹į«ų5)…ŗBd•WxŲ9céTÆcžRŌŁø¾Xg‡z«Ā¬—݆yā¾Yų“ąĖ­;ėwś„äśeć‡`'ģżłĒNhēź\O¢¾xÓÅ:‡Ē…|\Æ}0¼ŠĮöMM{Ŗ[im£1 ·¦MKz›ņt<Ē]Ō“½6é§ŅGŁ^įņČĻÕ»‘ڹ'Õõqvr–ćjEfzļ‚uŪHµ;9Z Ó E‘±‡Ļ”Æcųµšöž-J×gÓ|ż>čމøž"E XiŸ!\i6ŅÜć‘^P|æ5äWC¦Ėu§ŽĆrlĒk–cĒҤgŽ4_ Üieµóg8`ĢQĮĖć·;×Qńץ:zH|3m6ķ9aó=EDi±6ĻĪ?Œ:uޟ­A®čö.•#Eꐒ20#'o„{Wƒ|Qsżeę\¼*ęČ+]0VVcG§É{ żµ¼‘¹†RUvrwz`w¬mkBŅ.tĒŗtsĀW†cī=h”DļsĻ<¢j𣩔Ž5†Wڇ;‹FėłV׍ō;ūłMģ3˜Tłx9¬yķ”<Ģņ›æ ßĻ;K§ŽŹe°pҶ4ļķ;5k9äœH’¼E_;*ļ©ÓXź¶ń±æ&+b@*G»ļü:¼›Ä0ų³Ć7{4ż³÷‡HĄĄśS~„D|M³šž­ Ś_Ü\Ķ¢k©Žęw[’“ÓŽæ7'¶ń|GØßź«,Ś=ĘłęłĒĖŌVŸ¼Ķ ‹:‡Å=VĪČŁčzŻŻÖŸ ްÉ+ƒÜŠä£ų„āYtétżPf䢑ĆQžŸżj„g”R‰Ź\µ„ó™™$L÷Īk_O×ļü3jööć̶|ÆóE‡Tg¶‡;>¬’Ķ<ŽJ‡tĮć95“^aŪ²0ĪÜnļXObąŃéžX„¼·Ó”H’ą©Į'–ǶśäŃ^¬ńłŽŲ*Ąļ_Æ)Ÿ| m§ŲÅØé²8Y¢ då,zȊäĆŹŅ4Øī ¶»Õō)쮋„ĪùƒdzdV’Œ¼wqā«[m2H-mķ“h{qśWŃPųO2„·8X4‹›ŃĖfŁ‚Łč+§š€õÆėvöńY¢Ł0'|ózd(­%+ŸSõKą'ģkį VÜ]jšZĻ«,^j»¦sµIļ_„æ|)’Lp&•g›¢ˆŁDkŒnõÅ:šĒL);šSŸ‡77-ińÚyK1EŪG @^r¾¼ üW|&xE_TўóĪ1óGėŠcšZēꊏHž ¼C¦L.õ6½Š{mRÕŚŽę$I2v9¼õ¾iAɲ­vĀI«£’¤J’Aęø d9¦2²„6U³žÕ“C——”ɜ„R²gĒŖ—Ė gĪō•”6$ˆ£ĘżćӌŸwŃä‡Ü?* š)“fIņIķŌSÄ.U°ĆŪŽƒJc·^HĘÜąóÖ“(”!ˆ²ī9泚źtS?Oą•æ³7ĆOڣ㖽įĻų–Ń5ż6—LŅf­ĀC9ØœóžÕżPx{öU¶żŸ&1xw@PlŸq’łĀć¢ć·µpÖz›§ŠśoGšģ:ÜVw i CtŽäĄ ŽćÖŗ=sFŗ¶±·UH¢¼µ?+†ĒÖ¹ī7|£ńwI·×ļćøŌąIō;Åņ5^ oļqō'ė_Ģü?öw¼ųoćhõ* µ;&w†xĀŻ™=ūÖōåb9z–R»9Üg$`Œ)‹'Źčw ×b1œ,Si#bd óF};Ņ™ā} ĘBćõ­Ģe7’XX*6Ō±éQ/—u"]Ϛ Ņ:;ī+H/¢˜ėÓ±« ČfQ÷yw Ū©–IK‚ŽF «H  Ī9 ø»#o™gŻćšÆdųńÄ³’ĘüešrÜ>£¦_Bn¢W+ē[–Ć‚sÓnF)u¹ÕNG÷·šsā?ƒž0x Į_<5Ŗ‰t/Ū,²G&ŠR¼ēńĻćšõ¶—UŠ-ļt˜ŽÜŪ–’–^»sōļ^6&•™Ó t:+WƒSÓķõ# ¶’°X%d=Į®’+š„$måLP׏VE6~B’ĮE?fXe Tm“ÆDJŁ€$Óļ^м$ēéS č 0ž½h)1g¹Ü ÄsZ–>%½·µ)æĖ##Æ&‚“Gā ”Õ‚;»ƒgƒČFĘK‹8¾yVhŲądr“&L÷WEEmź{U‹ˆRhĘܬ£õ ’…­¤’J£ø5Ņ:S‰ó”ˆLE)"±¤“‹X¶Ć»hŶ¤PÉ  »#!īØ$mäįy(^užEL(ܤKgUr¢‚e±»`óZl Ū—śVŒķī²” ƒ[‹Ėo²ķt]ėÜw¬HĄ—2 Čö ķICÄŁĻn*“hnT£W½i˜b³„"Ź…qY·Q»– Fzœ¢‚’øė]VŚÕńxvÆBkD½£»>Ue?­;‘˜W֍täĘģÖdöfI\7NJ„ę–1G%‹ć€Moi²¼˜‚]οʵ3‘čÉįŪSkؐo /j®Ń4šÉRŽ3ЇIåö›}mxUÓ+Œī­K¤ŪIOq įזė;ŅW—QݹƒL9ē½^¶‹Źe3Ä8<ūÕ9 eŠÕ¤ž¼ŠtvŅŚČ$·³×žµ¼č»ępŪGŠ£}*Y±>TrWŅ€ęCbńĢ&/›±ÅW¹»kȓba”óķL¤eĻoę)8Ėż+=4« ¢MĢx”c či ³”““†’™ć&’žŅ.O–Ę:Pcs—[A„žĻŗéWd† ©µ,PČж÷'1Č~\bž$ó$)äÜō ¾kī[ū¤ CÅPŗG~BŻč‘©ky·¹1øćØ\X‰.X•\ńČėš)v.Ļŗ{v¶rCļnÕĻh֍cy#HL“÷ éAMyiĪ$‰UöŖI£y¤2[łP"A£ß0=jéģģ¢bØģ»G_XŁBÅ`Ł»ŌW;vī‘*…QÜScźa1¶ä«Ž}śÖ” ±Ę8÷¤iõ+„õךʤ;tĮ4_j lT©#­̚+·ž Kå{zÕcxčå)|œÓ ©”:8,v.{ b’ėTŗTĢr3Ę ¤ÆĆ5Ó3߅öä‹Ä1Ćo" _‘ōpŃXvŗ§<}+­·²yBŠĻķA©Ø4Ļ"&YkcjuÅh"ĒžźÄomćŽjѐÉGb{ąŅRør]­³ģ`ŽQ÷ļ]Ήyuyˆķ, ¹Į9ĒŅØfŌ^%¹@¾{W?©Ü‰ę3¾™¤D¶3Dó” øyYē5?ö<I<2Å#`²ēƒōØ3åbXÅ#Ü$q’8-é^ö "·óÕH\óÓ5œ£®ƒPgŖŽ]4˱ĒĮĮā“`ƒ6ČYĻCŠ“¬KFõ˜G…ŌČcć󬓊ŚōÜy€¶ī}©•Ė÷µ“F’&<‚GQõ®oT»±‘KøŲ‘ė҃Dqņ†x¬sŚTg9ć4č'Ö%øuŸcGÉ :Ņ36 ønge=ł«’jŠ!ø¾äéÅ!yöņĀ>Etė+*;ė]Ģ­+Ž:bš@ZX’V §#Å^_” Ūŗ@\ƒĪ¶u“)õh×üE Vöį¬ĻB¢ō÷ \¦F›{a}–9 Iœ|Ā“¾Fcó.GlŅhfˆtĹ²&5+/óÆ·kĶ&öyŅ]”ČG+%Tbw {„kŗlń­Ų²¾6+÷ēµyN£ƒ)s:KŽ{Šlt(œV¢‚ć9`Ą.9Æ2×ts.śūW<·6G—x‡I[›9”š6•Bœ gšł’ĖU}Ä÷6Ł2YH›L¬æw<§×ŠĪ-õ5„žæh‡–°éĻÆéׂęä©UäŽ3_%ŲŻZÄā+©¢©*HĻ>•3ež‡£^£ŪŸ%ĄĻ„3T‚ńŹH²$Oń&w×4÷.1īli—Oj1=ŗÖŹÜ†vē¶85ŹÄŃNf•\¦Ķ£·5šm®ZW*‹åćēē殊"Q¹ČjöZ­ŚG-œ+dä2“Ņŗ öŠŃ"³Äzo®“7—vi04ū%lķėMņ„`6†äu¬d!c†ö%‘NqÓMckzŽ °¹Ņ¼—Ą°ŲyRK:"|5ćoĻ£ėŚFŗ·8#0æžŗę,ä³°ņlnŁœŒ–÷¬:oÄZNł–[YTĘå(:{Óų{ńóĀŚõ•É>DQ²£»søgž=*#eō‡Ć^<ŗ¹ū4É«ŪN¾b”vóŚ¾Ÿš/ŠwH‹1ĖbzƒTK§sź7[°[XŁcßĄÉŻÖ£}RA2Ė 1ĆīæJøNTšēŠ­ęŪi<Ą9ģĒ„_ÖķmuČ<Ń÷[ҵ!ĘĒϚ”·Z.²¶Ī|ķņmPż’Ī*Ƴn. Kf°1ēpž#C$ó‰LČĢĢLoź…yst“‰ZMÉß5ĪĘMó\xaY0FHģ+­†ÖźXĀŻŸhąā ‹VX_Ź’)łƒ čķ|@rĀ7;O\r*£‘%©f Yēģx³éĶvpx®śŻ]w•ŖŠQ±”&»%ō^T~Vņ1Œcšó-RX¢ø1ÜA‡'©ę™¤c”‡$v7xj”1[i‘ķė@=ŠŗĻöŸŁ|³ ÅHłO5‹2iŠĘÓČĘ%H'ęĻćPęe(Ü«¶;ĘŅ $ü õ©®õ;VDIĘĒ,XäJ3*1ģrS^iŖĄYJ‘19łH&ÆC©łpÄp9ć­”|Œ„Ŗ$%āøóT6:šķ] žÆø’Łˆ ƒ‘RäÄāŃ­h¶ÅŌĀĶ?‡µZ»ŅžŲń‹€ė`£ąžb®čKF¤ś5²Å”ø-%A<ā²Ód(ńŪ2ļcĄóS!=5–ž{“–u÷·k§FfÕÖH“’¬:ūTg/ā9<0ģŒOcmy›ėl¾`EkRBj‘児Ī+¦Ó/ꉕ@eSĪCVRŽŚOk tłR\äx«LD¹BźqЃšĪllD!ąäõĻ÷Ŗ›Ęˆ; “wąō„ĢAJV&¶ÜČ`|ąQ^}ākGŒŚ}Ȕ0''œR’ŌØ­O?žŅø• ((ąa°;е¦"ŻĢ"2byÉļ\ŅÜŲō%ŅķģcHŽH.PTt>•”öҬēa’,±ĒFZ•d QÕ·zŽ„ÖäĻ)V)·žzPj™…-ŻčłÉp0qƒÖµ4«¶·³ĘĆ÷©[Qdo9nį“`ńZrCżpåĆgwĶÜ֐Zœķt:=Ą}©«·aĒ"ŗ=OHO)D3n'Ē©Œ‘ĖØIä9ę—Q¼¼q‰„‘ūØ'ŖR°r˜RĘ÷0°.Źų㬹 q䆝š§$ēµ>cHÄ֚{{{%(Ūī޵%¬ŅK #r„Nwz9YEč#TÜŅ.Kt5WR‰& ±HįĪ9čA¢ķĒóEcąéįń ķę©n!eL˜– ”īJźŸ….dC¦®RNŗ’w“’4Ž0[ĢlĢ÷¬¶Ó/“-~ĆĢ·ū^ēЌ…\gž”Ēn‡¹’Āz±£ag·Ū€r§“ģk•ų6•āė{-BĀ1os,Ķ’Ó`‚;w ĪP3ō››ė]: ˆÄń2pTg8÷rZžMsNŌ.nZgˆmRN6ŒŽ¾½(9åķ ĘŚF© _GyRGql#󕏬6’å_ė4xµmGT¶LĶ—‘›;³“’ź” ŒV×O»Žź7†ʶć ­jž›aĢ¢ā;`ĄmŒĪŁķŠŁI‡lōÆiréś©§Pˆ'äūŌžµO^łWld³ß“2pUGJ™ČśĖāž“œÖĘ~Īe<Į–aTü]ńHøXRX'X «2)+xÉö¬\ngĖc¬ŗųW'‰ü+w”öŗ›(}Ź3»#ØĻ5ć¾ųK›•—]¶o¢/‚ø'ĻįśŅ]„ń†‡gig ÆŁĢs.Yœ’öĮižŽł ½Uóā9%æø5Iõ4Vg[aįx,mę·E’Ü>G#•nüT^šĒˆ“Ż`ź67w³F©Č9„Ί²9ˆ^/ńQ× ’ćOIį±ł äĪGą+ž“…u;˜§Ä˜‘AåHŁļėSĶŌ,z–ÆŗčÖĘŁ>ß|‘pƒ?Jē¼c­Ūy‹©Į4p“æŗÜrŪ=ńMĢ ’ŁĖ£Łµž˜³ŻŪ)Œ¾ÖåCc'šĻé\F€ŃkR}““4IĮ‡nõ.fr—b/ŪDDƒN²tV`UpHė\-¦ —Æķ“©¶Ø'#ß°§w3=Į µÓ|Eµ_ $lxRNIÆŖž!xŠ/éPxfhŚ eO,&s· Gä+Aøź|ŃńĄ>9š³Fšm­šé8O’@Ą®G^?•r ¦X=“ż¶/ōÕRCśŸLReÅu-xW\Mżß8‘vmA€WŅŗ_ük·ųiāō–ēĆ6śŻ¼ŠK†\į³ņŸĀ‹joÜūBųīž6ūŪéßŲ’4…\0žąv×uń!ƈ‹zŅ*ą8*Ü7¦„Ø3ąo‰ģAÅ“bbT’ģxZē|®j³GfņłÖw#ę 8Ī;J’=SRūTf¹$Ų±ō=kčO i~Ō“tžłŌ½GæćYŹ#Q²¹Éx®+½īnt¶·‡#ėœWĪ>!ŌgÕļ 1Ģ‹u1£`‚9öę”R-²[æE.“õÓ$³¬€ł]Jœ}źāe¹ž »<ī„ øī>æ„j•…¹ÖųBņ·#É4Ś1¾y?–+ļæ|O·¾šV£ąķ|¤ź±7d¶ŸAéĶ)ņÄ}’Ńļ”¶Ś<ÅĻ~ųé^s„kKp°9iēpū“’.4ĻRŃž)źwo¼*– yßĒ„uń|K·ń&œ·×-•Į哠§`”lPµ»ÓµĒ{Iš'R Üī>ƒŽ«]XA§č÷±A²”ćzńUAņ¾¹ā’hz‘’ĻZ’ŲG&m„9;ŽrAøīś'ÅAؤq6”Ö©*‚c2üē=IJ6WŠļm/uttD–m|ąŽW=w-ć(5oat 3*„ą~µĖR%rv;m7Ćm݃ŻI²21œ>Õć—·ö~#Õ¬.4©ŅßjłrŹAO÷~•‚Šƒ+]šżåäkg ‚#åžUõ'ģėci¢i7ŗN»x-İķÜ£ŒŒ[ń~ÓKĢzoŒõ+ &Ā }KKµÖ“ęČ1œ'=ĒҾ8ų»ā?†:ģvįŪ9-EÖGŲę~ Œ.yĘk’£gM$hųKö@“ńļ‡ou jĖ¤źź†Xāœå\’|ļ}ą¹ōs=¦·yńHŠČ>„3\OÖĒr¦rŗö›įūYe·ÓnžźEćīm_ĄW›!ŗ{†µ0J ČŚKgqö‡ė]4ŖÉ˜Ōˆ=» „±gē_g|3ų;ą’ųhÜk6Ry„–‚ņ7ā7ĒB=+­Bś’ņŠ{ym”’)7æ ¤ 9žuśū9ü@žŻŃ.¼;w#ÜO`K}”—øū£Üq^Ō6<é\śˆ\ÄbY!g›a†F;ń_ |eų{’ž§s«ŲŚ:éwEš8Ųē×ń¢kBé6čžįū[/Ž>Oš?Åś£érm²‡ĢĄ?—jżŽ“nķŅ'P?:ēÆ3½O¹ģŸµ”hʞ×%„C€ Ļķ t,„[‰ĻlĄĒ<]„ŒŒž{Šį"Gń5’¤ż‹“_Ł÷öŽŠ?ō‹[_‡^7W¹s! ¾–z Łėšü#Ō-ļ-üĮql¶Ó/ •®ъŠŁóīsqÜØ*f‰ .Hō„*šą»ļäę»±Ę݈•ćÜŹ®ē *«Āņ™ÆĖ›ŠÜSŲrĆĄQ*;śb‚ ØWĖ{ć„$ŽjŒ~\ćšhV/¹qĄ÷ iŲ¶?zĮĘ1Žõ!‚HÉuĄķAÕIž±šā÷Œ?f’ ’hŽ][Žčz„"žŽ>×h_÷ˆžÄdWśDx#Ēż”~ü;ųßąėĽŠüC¦C98å\ į€č{ꦹkFńō:ā…Ņm`‚źóD•Z£Š×ÜTž"Óhl®¢u‘3²enßēŠóå±GĢß<# ­ŌŠĒq Ónh˜ŒlsŪóÆĶoŚæį-ÆÄļ‡v·V¶µ„Fą6ĶŽldązŒž“āĀĒņ_ćź^ń6½įżMįžhībU(™'-õ®,²Ąėšļ„®aQœ)ŻĻ$‘ÅFŹø—(8®ˆ3•”Ģč˜m„ŗ~U3·åĮĻDF'e¤źę}ŗu܊°“f5.3“ūW;qeżŸ#D×&ēk±?zƒB&‰ĢqJFĄē »Œš°Ļ²,.‡^(HܖŒ Ś1Čō­‘’9•*U°{zPtF]Oč/žūS§™ā?Ł#ā6£ä‰„ūg†n.£Ģj{cŲ‘Žæ„——R“Kw¹†Xõ+ŻŹ@ÉuĻ_ž°®,dz1gYĢ;­ļmŻf²øōŚŽõÆixĻŗAēÄŁROQ^eŠźƒčYń–ƒ’ W….ōä Żm2[ÕĶŽŻ¹Ę?*žN?nƅRxāÜ>1²U³µŌXŪjVŪBāuĪ(éŽ¼ŚØõ0ÓŠųģŻ ŁéWmÆf˜ @PŲōÜ+–Ǥž†Œ›ä 9*žÕOUÓŅž0bVߞ¢»ØČ嬏Kż›|euą’ˆÖšv¤ńEԃ÷īēåĒE ģ+÷WįĒÄI ·›dš>\‘Ć{ƒ^ŒęŌV=3Jńc^ÜH×#F#Ø5æ{yšH žEt)}Cɵ=PYźIё~Séō¤o]Łj¶e©Mm“cĖr”œ®”Ģ9u-ź¾%;§¹łÕsÖ¼Ę~6ÓI­ZEHА;k¢œJ>a½ń½Ö¬»/ß©8į°kčƒ¬¼rś…ƒĖ :ō ZŹ@‘½ž•Ƴ"Rhū ĮZ“ŃŻø¶Ą‡3é^Ōn”*HWž¼w“}Ę^O€Ķl[®q\D—6¾#¶½°»³·›gPjLż”‘„Śé±H–¶É HQҵi‘‡ĶņOėI»35>Ž%Œ$臽½BÓĄQ’6ŹwÅbYē÷vK>¢ņ4{Õ[8īÕéZ”möh–š²Œaŗj@u«x%E“*ξżj¢ŖÉ)e9õÅT¾h”pæ&ļQU.o"“E21 žqŚ€7c[)ķRX€Ī3jĢ›Y·L#eōĢi×é)tI»ć­oGplw\;-A,OB(©Ņ'Óu»#5¼šīåpF*ŻŒŠŽV@iŲ?Ė”NŁČęµćӋÅåø; ėž”€–ÖČ.ųŒŖ$č¼óPD̳łWE2¤‚W”÷  ˆ•Uš<0­VŪrź£ Ę˜.ć’ŌAóY)(”–V`Q`4«е{&RŹ>¾ō€Öó¬ćV“hć”õØb†“"Äąē”ķLO±™qĀ#E»Æާ¶Żå8j [¶āąAqÖ«²   éŠB+—Bė“5Eg©¤›v(Zīņ!+4«&­¦kĀšC&–GĢł;ööÆCŅv2,Ń2ķ dw É_ö£ĆlÉ‘ŲŠ§É_ŽĪh«ČeR\«{ŽÕå×:ģ·Ļn“ŖJx 62>•ˆŅ4“˶…—#>µŁĒ©‰pG=jXÜMlŅ°ŌŁ$¹¶ :2Į؊$-["ņ+Ō£#*‘>āų]āØ5:ŚŻ„’M@Xٹ^;×ÓfU³‰$£o@z{WO“8§=L 4Ü\ $·L/ŻnµŅ:YĖm‹å‘W®;ż*  a$³Cę3—ęł¹ŽŪHŠń«Dü©= L¶7ƒčy‡ÄĻ ŚųžĮg}uœMEą~•šuŁū%ĆŪČ •“s gÕrHÖ)”ĀH_åĪā¼÷S¶ū=öQŹe9ē€}¤¼Čśoą—ÄhīüķV ¶å"‰‹ø89žuśą»čŪ &Bü(`zÓ3“ģ}ƒąk;-nj·ŠŚŽxcõķ]eĶŽ›˜®$‚Fé˜Ų*i’Ī&ó[Ōōˈīb·78uVŁÕFz×Ńž Ō"ń&™m4(č…p|ĮƒšÜ‰-ųĒĮ–N^“h÷(ĒkƒŅ¼“PŽdß’z{R“±2ó8KĖ2ķ&č·g<õĘŻĒ NTœBC\Ņd3JĘ(ö3ٰ¦åĻQ]®¼–Öj$€8RFGUä5 ‹{¹7$ 9<Ö¾c4²$qmœgµkRŌė„y씲+Ą gŒÖoŪ$¼Esīčj®i>K›«tJźĆ9GJȹT•šĘ\ēšfĘ„µ‚=™™Č3ŹēšĖŗ³±Ü0ā³›če)\ēŪLPą¤ N3Ö¹›Ē“1£e9㨬ˊGh-ā v›ūVa~«+Ü&\ńŸ ­ŻBī[ĄŖ²yDz÷ö ŻX ¢+,źŖĆ§zŗM?V“‘£Šę{tn@LsNĀ{Łö›<1Ékr±nÉ .>ozŲ·³Ų‰ņĘĢ8Ź÷¤gb­ÜŪyw³„äw„'aŠ4epŻÓ>õp‰Īn[źĖqeŃU€äŽŖWŚLÅ£eėŲō5|¢’ŠÓ°ó.]aY/Lę­]„å±Į61ūŹÕˆŅ9Ķ_OøæFf ž ēø;ļ›[U.ę5$Œ°ąÓ6„NOģwČ$†6’ŻOšžµÖé—ņ\Č-¦¶–%Ū®hē.ĒmiЁ…Īyļ[Ö± GtrrT†…ØŌnq¾%ńuö‰2y Øć Ė\®•ńV×S¹kYD6÷aŁ@PķžČ=zÖŹ6+Ų£øøf›tj¬ 遐kīĖQ»üQ“cßēD8ŪC$A.^ęnģ}Śē®l`[…ø·Œ+oߕ?yõ“Mū F‹+ü0zę¶F³14lÆ* ŠĢ£15;īŻYĶ89ä>6ūךx—S–"+Ve2n<ķ­9…b–v÷s"2J±ó×µtŃÅ ČØDĪ9ėSWjö«™LˆŪŽĢwś×[£_i³¹‚XU§tć]4Īy=OAÓ“į>ŵņ2qǵU×aÕtń )rēhõ’JŻDHʁn]»ntėXśĶš–ŻŅK`gČĆēGŅ“VƒoŖ¢ÉögdV+צj•󈇖줷8¤x§†ÕDŽd•”ddńō5·g©ĀYÉ FŁ9ĆZĄ Y.įI$R·īóÖ¹ÉoŽI@óqœf¦R*/Słnš’Ä}[Zkę½f[•żĪżä–źkÆÓu™RX Š}’²ĪĒn}ėߔlrXéV_4F·ģN žõ„yąŅžMĮyĘEÜv’öÅI”š+ÜÜŻiģ-¬—Ź ×#%Åy׊f½kwŸ1W'@{BÅż‘lä`wøÜ¬¼ńčk¬Ńõ 3^ÖlmŅź8Cܑʑü]:ŹēŅ“x'UšŻ‰ e:{eD~Aō#ØéśU=?āÕ¦uæH]£HĪą_¢īĻұžŗ„sę•7ž)ń%ĢWMtɹ8_§ė^‡£]E„]GĘ$·•ĻÜĒēScN[—Ä F SAŽgŌ~Ōß,U¾līĪ+É<5i-†©$“ÉkhźdŠw¶Ÿīńϧē@rėcK[°‹XŁ›pa2>ÓśWsƒ©iŚu¦§j#ŗH°­’E'æėM;և„ųOQŸPdŽņŪu›å©ū¤µ¹qŖAguu”Ģü‹9#k}*”™VŌł?ö—Ń/Óü=įcF½…µd¶2&cŌ±fōČé\-€å7Įt˜€•rv© :ć½e¶„:‡H¾ø¹µ™oćV™N½yžŗžńpźZqŗÓ‘w6[o9Ęßž½8²yŁ{Y³KĖĖ7Ńg’{O7 8ÉtēÓ?„iiśōš[ł¶ņE(f%G;”gŸėZ¦GEa§›)$v3On~ņ:zW1ć]#ū>ŽkOæHćV>lØ÷’dÜOxśŃģÆ,gŽé”Ębu|†Ļr1Ó­oYIiØ\_$W°d‚Ģ„‡ĶķüØŻŽk1øGkhäŒn¶ ūzŻĘ™}i×omeG*żę=ĻĒźś ślķäŗFć•eé\‡‰t½fźÜżžI<ķ£īńž{PLĖ^Ń/$¼«rŹ„,2Ü×½Ųhn” ‹ŌIlĻR{ŠrŹ,ūCį>§ č¶vž§ldFCTĄū¬xā³|jŚuóĻ=…½²†-ŹżĮĻĶS$ ,ų7ÅZ“kā‚ųmˆeT–õ=åU ҵ‹Gš}ägF³&B×馗+6ŠhōĻĻŗI5Ėdܒq»ę ī}}¦]hśmāÉ6WQ0f>^F9¬š3>:ńßĆÖšĻŠ§Ō ø¹¾Ón%/åHr!ÉÉeĻׄhźĒĆ¢ĘģK›d½ņÄed Hé@s>ƒ|įĖĖ«čīķgˆœÆĖ]ߍ<=u ĢŠ•PWo ń×#ځE\ćl"McGŌ"ŗß¹FÖ)ÓėN+”ŃāƒGÕ- žĪ2Ū—ĮĀ|„GÆåLM[CŃžĻ¦ī‘ ‚)‡G¶×Ÿų‘¬ī¼’¢;eI?åšøR³icAÅ„ŌWÓ#œtęŗ6k½4Ś_jP°‹\ć9_ņ+x‹˜śGĀĻ…¼w¢]ż”“ż^ŗ±3żĘČļŪšæÄ=6×DńåÆŁŚ <Ęؘł°;YĶj ē3k¢¤Įf†EH€Ė:ż*QąYõK©$ąž 0 œ3œRNĒe4{_‚<64¦³Ō¦2 „^3ņƒÅ{FÆāyu}.}*ś"(c˜WJW58­CĄŚ½įū¹¢øµŽęŁw®īšxĒ­sžšŽ—;ߘęŗP0TŌu­a~ Uń‡ˆ<;ĆolĀÜ./ŃĻ×Ö¤µńOö}‚2q4ąrN:UXĘQ±ĖZxņē^†Hu3Śe݈Ėn ‚xŖZڈ÷€ŪŪ–Wżh2‘_Ęv÷ŗmݧöMģ3iė%ĻR1Ąć¾k“»xõBŚĪŅ8äEÜĄd±=jĢ”ŽĖEųqqat¶³Éż–]·ę|ØēŚ»ļ iķW"k‡,9oƟ9Ń 8ńGˆÆb[4Ouo6XąįĘzW¦­ÅźŪĆ3y„†å?{“IϱngŲžų+¦kž ö·šzx‡ēņ¢‘¾š 0 ģIƞµ*óG•ō»ū9“ĶIl©)Ā?ū‡æCN2¹“™ĖŚj‰4ņGlŅ4± '} wžÕäiÆ4ķN7m:Hšå˜ÉæCЊ»‘ĪĢk?†:`×ćód“ū:YüĀY²B“ü#µzğ‚&8-õŻŲĶu £–ŲQöĒŽiBGˆŻų·ĒZt÷Zv£l⠁¶S!ēr«žÕŚxNõ/.¢ø¼x݃(Vs‚k9³E+q6Ž“ųvŹK 挂Cóŗ¹›ß\ŽYInķno‹¬ĪŲ,{(ēé\ŅŽ¤R|Lŗ|ßdÖ“ZšÉ³xĒš×¦čß¼ąŪ=ZĖĘ›I¢ÜJs>ż1ŽŽ] ä<ļ]ųéįĻßiŚ„-žžŽw2ƒŲŸóҾn¼Ödæ×–ń­­%±ŽŪxł”ī>’ҳ”SÜė„ @|:ųĶ«h7ŅhE¦d‘dĻ“ņœcæz𯈾3Õ/µŪˆ§PāRÅeV'vė\ŽĪ'RocĢ>Ūsē6öB21Öŗ]<éś~½ÆjŃK*()žägč{Öōé¤Ģ振jŚmŻāOc…ĄŽĮåfļŠź~ü\ń/Ćē,®~צ+—ū3–Py+ץ5Ō•Œ”±5„¶4Ż?Ēŗ=«éāŽ ÷6ā’U'*śń’ė®sLš­ÆĀ­]o^ś[m:ģ„1HøD`1Ÿå\®Æ³včm}®|Ö±ÉāÉ” Ą†łXcü+ćæ7 ż½,QŪƍĮ¶2O5ÅV­ŁJœōŲ„ķ7ö„L)PXuä’A]އāųżļ¼'<°‘¼¼ĘŹxČ=Ž+»ŃČėĶNJīīµeL°Fąįˆźq]eŸĆ­SOŠō’i®ĶjłGˆƒóuėé]Tß@uī?¾-X鶕æƒüCqsl²‚-ŻĪBūf½Cć^™ićOO}ą†öŃtS;ŁrOõ5¤£tiĶ~ |MµŃmµo ź&ćķ’[¤P¶0R,+{ā7‰§Š¬Rw–źĒĶĘŻ7ēŽ²®µ‰}Oõoų‚I®ÕÆŹ—%¾T‚;×uą1/4ŪķF萊 ÜĢ{cń§-Uˆ9-Mg»ŗ™-aq§Lļ]6ą4ŌVŽY­„³©ł0¹ē§ V=ßĀ.µ;Ėiä‚TŒ¤*äd÷5öŸĆ?…‡ĆšĶ¾Ÿ ČŽ»H¹ņp»‡­c:„Ā™÷¶…šƒOŌ®bŗÕmQ®p£‡'¾+źŸx#FšÕ¼ŲŪłNv`cn*9®itŽĆ^»}jŁ”œęOļµgĄŽ7­ā¶ĮĘā:ŠŁ@ŹU:ƒā…–^&е=ÖūģÓKnĮ2pć_ȧķÅšėRšÅŻ_Ćŗ•»ĮŚ\Čćīź8­8ūɘJW>![dÄG–Oćõ®’į‰gšæ‹t‘c1ņ'œ‰Ć•²:}x­{4–‡5Cō×I½[F%Wµ˜Øb§·ųTŚß†“’éséŗ„~lŒg[aœUµŠŹ2č|­šsāÖæū0~Ņń—<ŗh·ŗ÷Xl$°–ūÄŅæµÆ…ßm¾#x'ĀŽ0² 4WöĀo“E÷d=śtę²­Č3Ōt-N}?T‚ņ?0F¬7ķīµõ¦‹­[ź–©åČ$Fzjóå¹£ŪCāßų(Wģ¤žÖß³'Žü°[Ćć6ŽMG@ŗŪ—Žp qųŒĄ½«üż¼Yį½SIŸQŃüKll|QgpÖś„R1–3³v;gmDj%>Fõ”Ļ%„,¼…SdS*Ė“ī@yśÕiŠHåŻW8ĘĄ5čGc’¢)¶ŲņŃa3ĮļšAęqóĘŗ"bŲօäÜŖsŲsŒÓ£VŁ!e*ŹF1Č"™™*67ØĪr>µ4m»p$īūPį>ļ 7ÖµmåŚŠ1“Ó4Ņf”G:“ ʰfッ޿©’ų7ĻöĪóō}sö3ų“Ŗl Ó_xRy b^%ĻM¤–ć±jĶ­āvĘ]Ļé3ZŅ™®Rś=©}o!G#øGéZ_cI¢YU£e‡½yuꇒxćĆPjz]Κš+\!3DĶĮ\ ą~B¾&Õ¬Vg’ņHVh‰kkŲuN„ŸAYEŪ@?›ļų)oģź~kZ‡Š“1n¬ī&VūD16īO°Ēå_ŽW‘ž9młg®}+¶“3žÖ1Bģ ƒÖ«`1e=”é]”ĪGø”Š1Œ¦åĘŖyV}Ø6°=EhL‰ā܌Ŗ³pśÕ”Œ»™emų<ūŠG“:ķ]0čļ¦MiČ\?šIŻ?»ž•s,Uqƒ;ŠZd‘ö‘—ĪA½§F’ŹväńA¤eŠļ|1ā}{į¼ń[ĄšµĶ‰4;ń§9GCéų×÷‘ū1~Šžż¦¾ü=ųć”\Śż¦īĪ+MbŪ#|7 6¶åķ‚śm¬+Ęń: {ģśVCÓč>½µ¹Ē3$Ū—'­tA]XXŸ[Ņ­£re^Ń)Ƕ+”£ŒMmά†Źū°q]^·«O”irj 2…ŽJ®h-@»š’ÄńxŖÄÜ@ŪŌ¬TżÓé^„ol6ÕŚsŸ­6)#Žń½×Ėuœn€:ĻŽ9fU;Nä5"N’٤·“#oĖŽäā±®Žņ[y$ˆ2®šō >Ī?+ĢłŹJNxć&µ“Ėėųšx®„W6Ģł‡A@ŗ:.¢`UYŹy 1Šõv¹¶X’7!ė@ģ­’4*³ҬjĄ–× !H˜)#wLÕF#>~¼ųƒ$:с.‹rҽMŌ—QUkŸ1Y†C”Ą5­ŗ3NBõōś¦–Aˆ,°° 1ėXö:¶»ö„% ”¾čę©Y%mņKė›»xüüŒõĻjuŒ$Hv€ć?•±Ävk¼2‚0sׄ[h·­Ēµa%ŠĻœ­$I!é–=q7”ŖAĪzpjEĢĶĖf'sœš§t%Š 1üč †ĘęM« 8" Ō„Iq ~ŠĶ8rZĶifBK)=ĒZ L}¬Ž4ˆŅ,D{½U Ć8A‘ŽAŠ ®uv^t”YHłZוķęPŅƾjńœP7&Æö[” U° ģiežńÜŒKqļT„`emN(ī!]Ū”„Ó`ŒØ÷ķ[\ĄÓ…†ē'ī“Ķ\hQ†c`A÷ G=©A.9‡½xī„šžKKūZ9'Y•¹;OLRęF±ó:]7DžTĢū}®ˆZMØ ĢAéQ)"¤ō:k+× ±I×éWę³ycv.¹½jb`g}˜l“xŚćŽZ†ĶR) \·­ÅG°éäky|Čvõ Ņ‹PšTI`:žE#kŌ露Ž8ę·BˆĶ:łR D(:Ņ&Q7ć†WŒH¤”85aWhćūŠ Kš„¼±7˜@8鎵å>"šś]źńŻZĻ$Œ:†ö­)ßYßNmćŠ{sņØ]ėź*•į›xE¹ß»ŸqZum{ ,±‚źit™ k”žŠ“v9ę²žąmj6–³“%™Œ¦ćĄ5Š–hĻålżčē#µAq‰Z[½NÖI-åUh3ĮōƦy°—@=ȦW"'}:Ķ%c€¾Õ]ærūwō Ģ¤ņĶę•.® 掂ŗ}6GL䷖GOJgj¾T“!6O5Åx†ĘźźĪx ›nļ—“HŚ~¤źŚ\·ķÓKlĄ~ļŖ®+Ŗü§Ż"Ē·­6QŌ¾Ķäv­t¶3ĀYTqHĮ£-l'k„,ŪŽŗi`ŽŚmžo±ķ@Œ7TE|ƒØ¤Ń/®’vGV1ޤžæJv½l瀂?y׎³.÷Ŗ÷“€åƧFł®sŒŠ£¦ĶĪ3@ ó¤W¶N3Ž‚µÕdŒ+2§§­>ĄbjātēE/ĘsŚøó{ē1(ä8<{³-M›Kõ‘„W"ĖŽ7µ^īY•˜Ū©’OnÕI i«ųŖ[)x¾Z«óvēÖ“µžźĘ ÄOÜ“ŚFÉÜŚŃ.neWT€Ģƒ’Ąrv¢.ŹĒ>† b,ˆŃŠ&óz:UĖ7<ÄŲł#µ”¤&ŽēKžK\ &1ƒPźW°ŹY|ļ{ŲČ·ó¢;”RpN+~;hmn#–AŌ9äփ9š3X®Ō, Ųc5‡u©¼2"¼E'ęĘ)„daÜČüÕ!=+6ök•ŽÕYG •“Q”—i©ĶpŒd…a˜ķNøÖķ—m¼źˆĒ¹œ@kya Upzõ©‘_Caæ\t¬@³Ģł#~Šr oi­{<ŒäĄi5ć±e9y‚øäVuŚH޾gĻļéZ=¢ĘIÜĆn=zÕVŃ'$Ł2-õ¼o QķVUĆqėM–öKÉmŽ ääó\®™¾–7"ø‚[71^żšqņóĘETÓ5[µYb•C c÷†I÷„ģČsw6 ,;‡^G¬t÷žŽk‹vŠIņśé¦Uī3Ā^7ĆŚŪŹpø ē–8!Gōä×ß^ń¾µ§E{iv²Fź °9×Y…C¶[›–…Ŗ³/§ńZšŽ)ndŪż3ŌŠr\€FŠķØŹ{㨬»«{IB’§˜:qAQv0®­.Ś7µ‰”ÄųĻ?x×Åæ¼”ŽÅ©FˆÖ›YʌŒœśžóØp6¹šęūo%¢—ĖeOS]ōš½åŹ(gݰqĘ7Z”Ų×Ó!’ēh– ėŌń’+ڼ2@ėjŒ‘#pqĘ*”™Ķ-O¾¶ßl¢I®{ž•ćZŽ›j&+ĶH‰=O$Õķ'‚R28'€k’Ķ\^ ą‚8®v&ÉdŠĘ(ĆÄådĻZĒŌ– !ŗCöL“’=+H>„…ęŸxlģW9S÷jõ”ŗÓåŽkdżŲ浊øÜų‚K÷ūģŌgƒĪ+"Xļ!EšŽäƽ6Žsõ­JNÄŚ}ģ²ę9˜‰W®GŗK/)w$‹ó1Ī}jÉ–äžX‰ŽŌØźJÖ\ŗ”1łĘö c Ž¦Q¹'5y(¹ķ->ī?­sz„Aˆ3!Į&±k¹¤%ŠćÆŚÖŁ(G’Xõģk˜»¹µ¶Į¹`±œŒūҾ¶6Š0®o¬õ-Īä‚CXövĶu—rƒ`”†VĻRsҘš=æ@–ŚP–ņܳ®%±Ķwb×r#"T”ēšøĘā ŚdŽÜČØ¬qó+ėƉi4Ņå\žsŽ‚šŠŹQ°Cˆų8ŒšÉŌ®c·`&(=*œ‰-i2]8k2Ī.ŚģäŠō@Æt ±Ņ³åżåøWE;~œó­OK¾ŗóŽśåväįŽBćµI“eŲv‡ĪÉ+»`:pµßAeh²€Ē?ķcœÖRA)XėtķtHĘä>ry]l’hHī¢\ÆėĻ­i`D1ń7Ćöh–+Įę>pY†?ēt/†z5£;Ž[ZŽĘDČÉWõ®“_j޾xԣƂ4ČP=)Æz—‘J”#P8'注D„Ōį5;\LćklśpMsĪå@·0 —<y®DQ—TB4§¤ĄIXćƒü鯧Ż: źY‡uč+XĖø[ŪwYוfėVp˶Œ2e‰\åÅŠ9ķ>āĘŹP]·§'žĘ“[Qµ™Ā°ó•öŖ†ā’:+X’l˜˜+lĮ㊰Čöl²BR'?x’{WL79å OOšĪ¬Ø!FM¹Č š+Ü>Ń£źœL“²ŌōĶtFOd$ŸC›ŌaŽŁ[ĘΌz^3āF”ņ$€ć?֍XŽM|:šœĮš"t•óŸOʵ"³ŗ„¼F$€ćęjlYō¶‘Ł·/’3‘ėX×ZWِL’GČ sČ WčU_µ,@%Ć<9ėW š{tFø rqœv©c?—æųH·ŌZø’?2@¦M¹cĘ~•ŃźVŁ^Č$XeŠ&Ś?x…}g ŖtūJGøA²±09@3ų:÷ j/oke-ŌČŠW!@õŒ%#ėW°Ōõ···x[RŻņŖKč*®æ”:i’\_XŗCę·ĘŽ„·{ Ģńxō¶·Öį?iŒZēWØ>õÖEs’ ’Ę>§4²y7q ‘NzēæZ¢”{ŸDųŪālQxVŻ“čēŠŚKre†97‰ČĻÖ¾Aš7Š4ŻGVÕ­ļ5{˜”,${w\˜'”>µ.#ŒlzĪ›{“³6’»‹©ŲżĄ©ģt»½Vč äg d~~Ø”lj„b½õä:s5›Fžjŗ2I‘±Tuü«Ņ¼%}„x•&ҤÓ-üöQ‹™Ś’tüT7S#VųuØhZæŁģo&…·²˜:žŸAZ77·𭤲2 Ąm¹ķėAœŖf‡āōÅF•vGƒŒ¹®;Ēśõ–¹ œ¶āÖXēQęݹ³Ą?isö7gń6m£xŽ;„• ÉVģGć\/Äż3EO£xzi¬#‘%DRNv°ĒåWr.ĻĻķ0źöN“Uąø‘Ž#)§¾=øĶwziMXļžeĮł×išFzŸBiš|͚_C„CdģČBCcæ9®sĘ^½M1ļ“ūu¹d8t½(6S-x3ū@xy%]&öƒ%˜‚p½³]o†¼W ŌīÖK…ø‰ycӚ‰¢$z»źśklŗ]B yĮćÓė^'ā-+ĀŽ2Õõ%u¢ČŃįÓī>3Žrx©QdĒĢåö+‹Ō}ĘšjVkŒ:”āDĻZŌŌöų×Z_·[¤QĖźåj¦£¦Ü\£Ąó4q¶9Ļņż(„b߆Rņņź+;Š·M»qŹzč£z²[Ės¦H— Ę$7 łÖqZ•cčÆ_źzzYŚMåĒ3“ĆÆ?z_ŽüC§9mc¶óļHżä…óŪvFN'Ķsj³éWÆuv‰°¬™įG­u֚œr.&ŠE·$ov?tVR„ā÷6ŠtpGŁĶ“ŖĢJ…9°üw¤¦³¢]ėzkC¦J‘ƒoĻś’UH8Ųó?x«PøÓ®tFįg»ŠF“r'UĻjō-3Ē#RŅÆ“Øīšx‹łS(ļŽ•“es=Į^Õ<<—ž‘ØżžĮ°Ā5m„^yÉ5ē>9Ō.5mZMFśGŗ»9;ÉäšoĢq–§ŚĢqĒJĀĻˌē'é]¾‘Ø~ź9–_-Ž•.éLō›]zīļI¹ø“ …IT2}ŅĆÖµąńwHљIĄńޚ‰¬e”ĶėFö;f”Ķ<09'ålV‡o’+©„Įł€ūŹOü*É‡ĀÖ÷P‰ˆI”Y2”Žvž¹ÅnÅ »ĀļfÆ< ÷ŻWåʆgRet:Īį.OÉ®«ĘU†Æį²mu²øĀ‘*ū²+īs¶s‹ą9/ģLcRüøš$™ˆāŚÆ‡ēŅõˆ/„3Āa%Tœ÷÷”ÉŌļuŻ_̕ž”`½¹f×¼Ģ=’õ»m[NŃ4­>÷[_ōUĮ˜ÆŽĒI_CEĪ|eo¢Ü\ĄžšęźŅyİqLē¬ßųFĀź:4³Ł$Ҭ£{ķŪ±pyĶ'āö>÷ų[į[+m6Źhf†n±ĖēiĻząjÆCm„i·–¦+©wZį†}Ņ„ŲųWM¶}1ę1+ē#±ĻlׄčZ¾‹ Ā5Ügs/Ģ™ĮSķ[FW)@ÕńkšZŁjśM·Śaó—ĖĒ9äOž½}»ą%OxV×ūGDžĒÕÕē\~õpzöĻJ£D¬|kūGhžMśÜǦKhŃįŠ Ęé:~¹śWšļĀŗˆ4˜ī¼Cov–« v… VcÜ:TJ=QkkG[x–ĖO²†ĻM™’ČįcI_, ę¼ēĒ~>¾ŠĘ5I¾TbĮ¢įō'š¬„Ļ.|E«k-utÓ<·HKóĮSUī¾"ŽĶi&›ØŚõŲ±“"äżŃS3HhŚ}ž»t±Ć’ų28Qņ®}k®×<+6jėop·pCĘįź+Š„[htĀ'7ms}žXi# 1׫7šT²@ņ]‰"—#õŻ\Æcxҹ§ ü?»Ōą™ä‰®›ļ+mįGį\Ž«ąŻFĪ{Č¢ē µOcDqi¼;!Óü%t× iw“sŒ–éĻzģõŸ‡žµ+©Ś4°ĖóĮ<qŌŽĒčkŖ8«čÉö'²žĢŗ·ˆ4_hZ=ķäzsłq„¼ĶøÉū¾ĘæI,|;įæھ…ć >ĀUgNц*ޟJŖėøģfkŚƒą{;Č4ē& tĻlWęßÄ]FļÄ>,¾¹øTY“˼<{cś×›REĘ7*xgAžÕ¾k‰ )—“÷±Ś»oų“Fš®£>•Ŗł2č× Ā_1r#‰¬yŹög’^Z#_ܽŠŪ¼[‰\p½ŸĀ:>µ¬é7ŗ5•ķ“Qŗ‰!¶’BŪŪµi JF~Ć”Äj~Õ¼!«-Ę­¦[Ow) UrŹkč•ų§ąķOĄWpXÅn/Ž%]ÆĖĘąóøž|We:źH^Ķ£å1Ŗ›=u'Š0š‰„­°rFyÅ{ļ/[ŚXÜA2ż˜n2žśš£öcń‡'ÓßÄE5(Ÿ ƒݤö85…I!Ógč'‡~XĆ4>Vie –‡Ē^IÆsŠ|/d¶‘Kd|œ×#‡Vt)w=¾ yPBžJ«1“t¶$‰ÖßÉņŌ²NjŌ‘N]1^0aīQ]o†^k$(‡R‡Q[ņÜīVļĶ@›XɌ`wÆĀßų*oĄi/%ā‚Ń$MŹŃÜ.ā$ļĻjÖІ=L®öM™K`œcW-$WIuh-”3J“+/Ļ·kœę½zlć›w?Rž^\kŽÓ.¤W{ŋHNrĆüvś.„«G=Õ½üIåļ"2æÄ½³ļZ™-Ļż£~ŪųÆĆ¶¾#Ó6Xź–VŅf “ŌążqŠż^’‚-žÖ­āÜ~Ļ^.Ö…Ļˆl£/¦µĪTŹ€ć OćÅe%tŃŪKcśŅ­£x™„ń?…zW5øķļ†œÓrĒ+‘ĒҼé£{;EĀųX/fO¼§¤Šx*}ˆĻē_ĘæüKö/µų)ńĒMż”ü”’Žń‚łzˆ†,%­×÷Ļ8‰ēß>•Ķ8?i ._FæĪÄµŠž|5=2K d‚p³øÉ?2Œ×3%ŗ±ĘöĒaė^²8źÄ©>Õ1Ŗ‚?‡ōؐĘųsę\WAĘ]H‘‰bŲ‚¢ņѬŒÅIĄ Ļ(ƃĄöØÄjÉåT}q@ĘyPGJÓ·9S†łsĪ}½(4¦õ6ąCōā½įÆÅüų©šĻㆯµmcĆś„W*`$]ćz°T®F(K[‘ó?ыöyųÉįoŚKąo¾4ų>īĶ7X³ŒŻķąĆ6ÜĆ· Ø÷ÆPÓQģŽ[䯂JÜWŸˆ™¬cܟZ±KĖ“$jn"ōźE|3ńJō]Bö°ĮÓķōµqIjYš/Ē’?Å_‡Z·ƒÆ¬üłąfž% ¹Šm9žµü˜ü]ų{}šĻĒŗæ†īÅ£NķvłÕ3ĒįŚŗ)īKއ“Č6HČ śņ;Ur²vl÷⻩³’hXäI£`*œ)n!E”ymSŒšÜĘhŽD ą‘“ŠąÓŒŒŒ„Å&ģgbWŁ&ұüŻiń¦A^\·æJf±C02w0n™­k9>ĶbóփHn\ŽtMĮyķ¤eÉü«ößžŪūYé_ ¾)ź?³·Æ”µš_ŠŻNžĪvż’č *néÉä{⇫”»Õށ5ĶØ½šę¢”ī­eͼĄē͌Œ‚=°A©5½“’ų@xü¹ĒBœuƟ®ģu¦g$±,7b9ć<.G*+[]іóM½¶‰•bøˆĮ(~„+ŹŖŽŠLžHą£_³’ˆ~ |p›ÄŚf†×>Õ9’XԁŎŸž£_Dé$eP‰°~•ÅQĶ h^°·†Fvoā=>•ŃŁ@²  WĶŃM!ū;ÜĖ;™3Šf»„^'—Ć>:ŃgĮyX“)$ §@霁^#ĻŖ~ęų/āų³ĀŚvŸ+y­oOŸ’·įŠģt©¶b\2œāŗ¢Ļ2Ŗ=6 JĻPÓ§ŽDŗQ†GÅyž³gi;ÜŪĶQ”ą‘ŠVŠ‘ÄŃåŅiźUķ.ck‹ŪFz®=ėĻO‡Æüā‘©iŚÜ«”ĪwbG;¢`zjī¤õ3™łżūYk– ŖĒ«I­ŪƒŗćL™ā՛PRp¾sdośōÆyš_Ę-bīå HÄ6\˜?Ž'±«£ŁÜ„ĪßÅ#šŚIżÆpØTgƒƹ/žŃ’ ¼{¬OįČu‡°ńŵ»µøŃÅģwŃ<*X¶6ŸOŅ““o½ŽųMŠ„¹Ü+žpÖZ됼āÜČ7žq]V”ŖŁ %ķE»EpĖłą× Ö„$x!Ōļbń%Sī±Ī;ŠöC®E5²Į}xŻpĄōü«.tjō;ĻiZ^•ęI¤ŁÅm ­¹ÕG½qųW„NȌ$q叄Q‹e ‹kiᐠYr0zV=“0$,\eĮäz{Š#"ūPkiąX¢iāfŚųą õ­ż‘CåȬ¬æ58Öa›O—ĢXY훫Š×-wŖ•Łę€4tC=̊„šAĒS“^©§ŪG™F™† Ī("Yš)ŽŅ]AęøxŠ1 ŃŪ*Č»H<ņ(ņV™"ͯΚ­čV–RbV?„}OįT¹ŽŻc.d€r¾ŌEÜōh%]†)˜¼MżīÕ·e¤Łi-€foCœ¤õ¹œ·<’Ē^2_ ŁĪ±˜Wsa ŻT¼ćY5ėh&Ż’${ŠŁ2oÓē,Ŗņ)Vī= tékt\ŖŹzTĻb\{ōź`‘ō®zÕŻ.õ­®VąĒŠ:†bbt³M«8ū4a[Ž«ź¶¶Ŗ‘F~IēŚ€9°Ø»ˆ'š¬-BćĖŻœš»¤¼rĒ!s†Ēj+ų"æĢ7»@æŲYä!œw®‚ĒOaii=q@Ķ&“½Ņ§D*>łķIŖKnŖ“;$Mœš SīgErüĄ,‹Ųāµc‡fr²{Šiq%ū+µߎ•šóŚĒ±@T­\b`Awyo ɲE櫌µšp®­·œzUū07'³…Š,½EeÉ„DĪ)󞣵/fØō˜6U\ š§œfąE"ēšžFQ„wį™ Œ]Y;`š+).‘ ‰ÉGčsŽ©CøŠ#Ź¦±¾ŠńĪw” xö4œPāõ%y ©pµ’ś„Ō3#[ÆŻ8`ßÄ* ‘ŻŲźöWö!‰d#£ö²<‘e[Ņ‘2ŲærY§! öØ'@Ą>ķ†ƒxmn¬²¹h°:Sä·²yRGEĻ©Ŗ‹° ’{{C€ O@;WØ\8ŗY"ĄSŪŅ“r~ŅåŠ"LŒń·j‘­ ˆ³"+’xéY6¬ķ”‹>[¹Ī+eć³hđĘ£­‰q$3Č €HéĒZš;X#BŪ@bzUČĶyH$ŲŽÜķŖ1’Eäø=1RfŠæa‘„FU, ŒūŠģ–KHķ” ąsĒJDœÄŃ äßłsŚŖŻéĢŃłŖN=(4Œ»•ŅŽ!“#=qPŽiPĢņĆ”™Œś s©x®$ĀŻėZĪÖ[x€ß·µ1I.„ˆ Fb>~ē=jKˆ•rŲŹʑ“*<K"!ęœÕ%ƒģģ;xõŖęr;¢¬n7J–+fŗqønSטīƒå2ø “ž„t¤–ÓģvŒdŒ“xÉ4Šlå#¹‚W/WQÅ]KɘyŽ£ ĒJkȑ÷}ÅķŒĖæ``x5ęŁ\é÷,’G½:n·&OCN[(/DSĆfN zU»]2ģng2dž„&6·į{}R'‚ź—wP¹ˆü-¦Å†ń£…};šĆc[Kŗ—O˜Ūļ(Żžš®žŽ9G˜ ƒÓ³s,Ō¶ag8šŲFąŽŒ ÖŠ˜äe—hV< Vl 3޳¹ĆōȬø±ęŸ3 }O­ -rå}*TŪc·¦(!Ą'ŠIJģzTw2łF”œ«w4ǤU°Q3ø˜ēžµ­w`ŠƒŹ+޽zÖɔyž«=½ƒ—Ć+·=8Æ6½ńåÄĀ •6śSc5ōżeĢ6ß”$օµĖ‡bGĖÉē’+œGa§Ė$‘)ٹ„oŁźXƒå2®OqŽ©;en„‹;jŠŽø%Ku8qw6’Į#ĘŲēé\UåĶé¹h£™YĮsUp.ŚźŪ!YŌÕÉ5@Χģč3÷ˆć”Ą•/AАqėVķäŽį€|.N (»«.™ ŖūĘNTnŪ[X]Ū,r:Ž8ÅnØi¶ÖS2ĀģėœüĘ„°Œ, ^œ£Äūˆc·kœK$N¬‘ˆåĮł‡j„{§Śł†Xöy«ŠśŠä§Ö,m§UkŸ%ĮĪ>ĶŠŃ›SÓÆöµĀģz`ē‰4vń±YH'±=M?ebœXŪ]B#8Y¤Un’Jė-Œs(’ÄN*ffh\¦Ÿög·–ÉRN0ć<×=m§¤rÉ$.ī•Ę•ĀžUÓįšīė8E$ūW”Ļń JŌ¬luY„#dÆÖ“Œŗ3eO©ü$7Zc¼Ä«”# ’:‹P»ŗ×ķŁĖœÆAŒb®åXē!³ę+ļ~;×E§®£c Äy‘NaÕƒÜCõ M.¤’«eF# ń\6³kg¶1IĘ8¤3Ķõ+[RĘ9I^œt¬-ćc[…,0)[ć_Ė5£H¶į$üÄrÕóĮ°’s˜’TƒŃ}Ø5> ųļšź{pkVqĒ;Ģ1„Q…'9ķÖ¼Ęž{_2Żę’B’JžōJ:¦_žY„¶ĶØ×ˆX’˜‘Čü+Kk¶tF?$Ÿ¼½æ ćœE}luĒF™„ Åw (mÄćiō­"6¬‘MnźÅ‚޵Ļ*–(źRkHPĮ{g,°0Ą#ųkŠaoö™RŲH }ET*jj””ØčZDģ҈ŁfćsØĮ>ƽsįGÄ+½āćD½XäÓ· äĮAĶvӑĶU`i˜½“†hŠø~A­§@²G1“l€d1ŠŌóåg]ĄĻ‹•˜ńßükóĶb¦Łbóp3ópĘ®:³H²6X–UHöąŒŸ¼kń¼iāż“ū‹uĬ±€äšN6:‚¼“^‡§_JDQ2†Ļv£™ö=JŌ^Žu·l݁Čė^££ŁĖÄ #+p_Ā™Ķ${ ¬wz“1ŪĀŹ’ycÖ¼ĆÄ^Õ •ĶÜe&SŌqšv!ē7ŗkļ&Q½žµĻÉkGÓ§Ö²œz”ēõ=)dI#p’u¬Ē·x ū-ähėČä1Sō2h£“¹vŠf¶†>•ŪGv!Š8e0Æ„tĮjD¤Y‚-"༓*y¤pŻ `M¦$WOoy)SĒ–Ē#ØÓ( Ӂ–k^ĖT¶<™G"t8Į4 šūP‚8˜@’y»@Ü+œ:ŗĒ,,¬0 +ֆf ųuņ›czā²īźhJĘą>ī c'©QÜČ}*Žņ77{£OP>ķxΤ¶ÓO$ qö›a&Õ/Ęqłę¹å¹²—`·“µ…ĀTśu­KHrSnÜ㚨>ƒ:»;.‘’$=>^+„Šķ%±w[y.|§måZBĄ”®ˆĖ ڤ·œŹ[fÓü]*¤ŚÜ—0² cfÜAŪżiJBc.ä;Ą1öś×!āQ H7ɰrøĪ3R'·Ć‹‘¢©„°÷ÆtŌ`†;eŽ4FĘN6ąSr1åÖdžėóŪ%ŪF…bf9Ūžk‡¹»ÕcŌ#Ž]86šąžņ3Üz×4ätӏFkŲʞg˜€o5oPgaWu|ąŅR3©އ­m1[¼ó$ĶĀ’z׊ži.,C¤ģXr3Žŗ©˜”|P"–Õžķqp§Æ­|å}ćŅõ c’CmM9OuöŌō»ėIAš+«ˆÕ'‰ ˆÉoā=kč|7¾ńׂ :j\¼šE³l‹ø£g;‡|fŸ“ I'ü$¾ŅJÕ!¹µ{x‚7˜›7:ż+ÉōmN¼HևNŽ ĪpXg•£Śsķļ x^ĒMŠćŌŠ™0@NTĶp—>7‚}Rūū.9^öåpY¹ļJ÷C(jWta–ģE ¹ō®÷Į7Ņ# ›üнž/j\ŒĪg¦·įŌ­nį/j1I±ņæ;gµq‘źŠ^ÜČj¶ķ¤¶8śÓöfL]nę=Œ°)pØT`ń\Noi~ŗƒCv7Ä’q‰9AéėUĖŠQŗ2¼I«ŁźF2YšŅę&ņѱ̘ēß­z£«hŚG†-åšÕ–D*ģģŁ.1Ón*9¬UĻ3ų…”ųTŃōżkGI3ĖøķM¬ ć§Zįļ<åų}u. ”Ż£’ßg ×?iõ5Qīz„üI¬®ŸFX£Ó ŒE° 9éļ]óKcujĘ|FÆĮŻŠÓ+ŠÅæφō›ĖkF‹‡üČą’ ‘Ļ5ę:-©»ŌßS‚O'zņ½󞔒GRń¼W D€ƒ÷˜uØtćįš÷śœ71Åv„I±p “L,y爯t{ĶZėQ’Åck†žL–ō&µ|+¦ŚŁźq¾©ŽĒm!RŃ Ü9Ē„LŠģ}_”x’Ąyv’Jįc+Šć¶=k\ž×_»¹+ņßGĒ™Ą<ö?…gČg6|łāŸų†+čõ]&;›†™‚¼h üŖß‚¼KØXĮrö35ņ!"'8 Ł­c±“æ½öŠöÖśšˆn ‘“ĖzćÖµ/5»‰õymą>A„†`éĊ}?Ļj¦Œ„+&ŒŽV”°³+搧†ÆO×üW/‰</…ä²¶„FĶ0īĻŽCڐćÅaŃa²Óu9/'s*D 㣜ŒēšĶ|Üŗ¬Ś~¹sŖčņG5³(9nyĻėAŃLśVŪÉńF§ėm½Ķ•ĄW søb³ŅņĮuābéx«µā-ėßģ9>‡ycé÷—-gŠw»®ą§ õ„ZēLæHa¾‘ķ·’uēłR2å‘ŲüOń›{”Ēgqūõ‰‹ €n‹żÓųf½2ŪÅÓé^‹Zš³E}v–°Ź8fĄōėĘ*e±¬bģz­Æ‹ķüu„Åqu %ō‘ $  m s^!ā­Ćņµü·ŚŽÄJ¬q CźŲćµbüŠHó‹]fÕµ'ų{ Šń·ĆßźÖ:~„ \l L…I?½³ŽŻjāģef™äz‡µĻ*K Ɇ›{Ucœœō®‚Žo³iėhšĮ$ŒC1#iöēü朄Š9žĒoai䊒˜÷9` 8Vö·>רC4eÅŽ,åøļĻæ•f&z忀[Į)æn–—K5ؖQĀ ĆæąZń{›œj:”Ś{›uI³‘Š:gėõ¦a&z~ā µ}.ćO. ;‡ ÓÖ¼£Äz}ͤĘdw*;¶sEĒ;Lš“ך„s“ćpĄœśšō9<5.×vŚģšĆR`’øH1Ēęh¹Õ„ŒĻj2Ų»i—E­øķPēŲU›£é‡åÓü<,¼Aa>Ÿ'čFÉ”÷ÅOā?é¾%P-ļ…üg!”¶ąµ.T!yą? ßh2=@0UNĶß öÅyϊ~ŲŲYĮ©&„4›_-ƕ惞ō$KguąoiŽŅ’±µ[{}J+y{™9ķ×™ÆŖ|ć{BŹHķÄBœ"7éšfnē™~ŠqZė¾hɶūqäåĘѐ>Ÿį_|%ńuŸ„ļÆtO™ ·Ż’å¾tcĪzOtTWBļ‹uŪ?“Ć>‹{™- +Œō× ©¶”®'ž†I­C’6W<§bĢ»mī'V‚;¹w1A£Oµt:Ćé5^X„` ÅyÕńgE*bčśDžæ{łR;«VO-ÖNŸQčy®½”“ń&Ÿö…æŗ²æŒ üŹŽÄtõÆ.¦.ē}:g-©é^V›ŹĄ$t5Ó%¬ŗ3E©CzŪ[Ķä ㆸźU¹×MXļ~xōŁg³6BźŚp"mŸĆŽ„t÷…›PÖ®.­ģīķ€į$`śv¬SŖ0¹ĆkžŗŗßrI“¹ÄaZ3ó]BéWמ±’MJłgļDGØ=«¦ž1ZÅKjxHń½RĮ¦Aā? “Ŗ÷  $jOo§§ZżOŠ,4ŸųwOń/ƒ„³»YcVkU Kē+×µzoĻkō9ēJĒĘæ“g‰¦šö—qh/ڊ1ĒpĆ<Źæ>4NóQæk«‹‰có' ®AĘ3ŒTĖS›šŚXIšŗXōŁüC¤źgX?vVOŻæ-Ž2s_;\]ŗL«­BEÖ?xvä6:× TŠłĪŖ=Ōé°kŚa†HIŁ(ó?՜÷^Ł­#«Ķ§¤7zS<×±õ’ƒ¾”ķCÄ>(›M]kU¶š[9 Q>2÷®ŽņÖ[I"WŽ3#rŠ0MvRMhTE­:ŃbyÆ%>lIÜ֚x±ķ£š4‰bp¬¤äÆē]‘—r%.ĒOįŸ„· ‘¦šĶ‚5Ģ®\;>ąžž•öÆĆoŁāĶ,¤ńŒww‹‹‚a#‘Ö‡WKĖsź/éŽŌtŪ&Ņk•LķN£ž¾£µ}—šžŚ÷X³·µŗEVbŸ_ńØ»cµ”“ļ KgsJŒŠ;šöO čv£<&$Q60;Öńbe+±Œ‹ÅŌ¼ćŸč‚ (n$FķómÜqŠņ»y\ķø*arruõéajóEIT‡cŽž|Jń>©Ak$Éqc# _>j7 HķŽæB4ŁcŌm-Æ­¶wŽ:g#ėĶvœņSOU·ŠóI¹³1³“‹·ązų§įw‹®g?ŚĆŽ5ŅDÖI¦Ž™Ŗ1?i‰±¹@Ļäā³žš›BZŲžŲ~ |J±ų‰ą xēDšŽ}P¶I"–#÷XØ,‡ÜדĒēĄńŽĆ3¤6A® Æ[Ż­ü~ל<»¬“r+ÅlŁ“Aż®g/ˆ’ut…5+«G¹ŅgaĢ7 ó §· ”jĘW³H$Ļó®ų™šūÅńŒžųŪH¹Šiăg#µvŃ} ģūĖöIų¹Ŗj'G½¼g[uc ÄLĮ‘Ūæē_ŖÖ63IŝÄ71Č ü³ķڽ:lóŖēöK›Xīc|¹ź§½cÜ¢¢†–-ź9+[RÜ£&‰„ܘͼ­øżā8Čھwųę±|=ŅēŌ/ß؁‡#9cæq]“‘œĻÄæ‹æ‰ž#ŌtŪmsķ6R37•&DĄżŠ õæ‡~¾š®Œ,ļ:p00?żUźSG,ĶļY]x‡@»Ó­n~ÅvFc”.H5Ėhļü¤]Zj–ź÷ŃF#wa Ą= vĘ63<«Äõæx‚ «®¤Ņ߉ćgłT‘€~“|8Ömu/‹šLvŗ|pjb"^a€J±Æ^ß­)”™ūA/†|Uwįh4ża$ļ ¹#ń^ŃšÓĮ:ŖhV±ėńĶkØ¢…2wĘąŖŃ¤OuŃünZ;łÆć7 ͳ*—āšŅĻ6ā9– FW½yUduB…ŚųŠÖēUM>ęE‚ųŒ€Ć±é[×Z–½ Ż»,K§p ž«\ęœ‡Ņž½µ“OŽXęwņēs]“²}”¤¢UļĻJŚ;ņR“v£•FŲO½$‘„²«+ŻĒ^i™”-Ķŗ]†øOÜŽ•6Ƽ°;­Č?†€3EĀ:0ÓÜu®]ō=&śY#¶{X[%¶»“ķ@ZĀŗc”PgŖūjS GļU£ō­Ń(»C¹dSĶpšž…™qt’y ĄŸ›ī“@5ā_Ū_4rGb^X¤ |ēœWѾŅü­.bHĄnßZ ¢wÖqŪ.c’4uf±¤rZˆ.•Ņfø™@=~µč^ńõ­Žó9šŚ\„kt9@ö»›ēž%’(äMÜV_›q!ėYÉ®†‰·iw)Q挃Ōā­yRĶóĄ€‘Ņ ĢŗšņĮöiö¦?XP$™yp€3e‘-¹Põ5‘sØ£Aōć„`÷6ĖR½·œ§— ±õн-§ŪėtŲŁÉ¤kOc8Éäø(ćŽ=hÓīIŗ;Ųąqō ¶vkksq.L)µq-DŠfŻž(04 µÄ0žģ“õ4¶V©w'—"üݗށµŪ4²rŽĮŌc”®"}®Äƒóv  VŚ“¢G"@+¢³¼yU„ØUO:ŠÓGüŸt×-­¦§öi†žeó@8+Ö¶ŠF±±ĮųOZń%ä—k¶é ØŪS Œ­zZ4³ØO˜;SrF„7‘ÜŖ±xČ`?Yŗ}ė włg±ŠŹOSK”½=ܱĄ~O—<0¬ˆµi®”t/ cÜԐO#ÜŪ(1Œ-Z“ŌŽL,Š÷<Ń#((ƒqż*9Y–ŲĒ"€G½č*.Ē/q)I@ŠAžüU›iŽthöōĀäÖבŁĪ|ä%{ƒ[2}P‹(vūt”’@°CuČķéX×ŃÅpKDH“®)‹`œ«›©ÆEŅ-·Ū¤įv°äóM+čŗ¾°‰“ˆsŽ8=ĶgśŒ"8^'õ_ZÕBĄĻ4×ģ¤Š —Aņ³dØ=k™ƒÄš+y‚N˜ėV¢däwŚn±ż”j²’ŗtÅ`^“ČŽ3‘Å$“éWhe0łß0ūĘ»čģ&0ƒ†ŒÉ“‡2·˜ƒ5y¦Ł‚,².sI£XŠévO0cn’HR95æc£Ā·FF`'±éY˱eķKL‚%·(Ć©Ø,Źæ¹N;ūT°cŚY%S¼§({wżā”€!“’ēqŒ’W“ģ+NŚŻ÷,lTŽ‚dĶs²9R)ҵ®¼3õ¬—ö÷ļQ¤ÕĘ&jGŹ–Óv‡½:āę[€ŃIėZ„m QēŽ!i˜•šW# ń^_w =ŻÓMa§sS3hG¹z=#T³Ėdäf.¢÷Ź—H÷cµ“F’ō?†ŽöUŠR«/g§Ņ£Õć¶Gcˆ9#‘„£c6ÖĻTXxĮą VĶÜŠĢb”\zŠø¢Mib7dɹY}OzĮÕ4{Å՘0Ɍ:“Ē։!˜pYĻ;mŲ£œ`žµpé…Å išŸöeÄŗ]»Ļz ć걚µ;h\%c›ųe£x"iõO5%c¹ŅF-“ś^§ā}Oģŗkb½zŽ«Ś\ńh|Oā·Hš•t\ķWx×¾x[ŗ¹XZöµ—«/šę”’äz­ŻĶ¼ÖĮвŹ3ō5ĪÅr䱌ćҹأ!/ šśĪdt;)]§ų«ę=sĆÖ¾¹æ‚ŅYXęG ŠFÉō+EŖż”<³‰IėoHńö mŒ <[ƒõ ÖŻ»ūBĘāC<’f‘Ž@ŗm.Śā÷l®‚6ėĶn5ešåöViUföęž0ҤÓ#Ånd\ķV œŸzvW>?¼ńv«Œ›CŌōé-`lł.AğŽ1^‰ ¼$Œ7Ž¢‘§"+jQh£Ūąøļ_3x«Į³Y]\ܬ®™%ˆ+÷Ŗ9Ķzć? ŪxƒD¾³HRi”0ł—Æ­~gxĻĆ÷^Ōo­^ĢC!bŪÓńōÅ\]ŹŽ›™D¦Y”·‘æŻć]Ģr}œ˜™cŚ?ŗr+ž¬YQīvš^·mēbKiŃxĘ:ķ®µ\;—…ԁ·myµ"QRīīČ,ź7?Āk™Öt±d`ŗ³‘]×-ņœŒuäR¦˜ībYųÆGŸĻ°ø2Ezń’Ģ÷ż+¹•a¼Yķļ®b(C›nćļė^…4&·>x¦ć^Š“³$Š“ ņŻ‚§éé_CŹÖńŁ—–P’ƒßø®„ęsTˆfHĘ÷@ƀ;Ö4Ķoé• ĄÖÜĄĮ–š¾į+ńžJŌVlņ¼ŠŠSœ#gļ{ÕL֙ä| qy7Ķ<,ŠüŻAÅ|_wf,õAę1ĄĄĻ=į#O¾xe+*°uõÆA°Ōü‡[Øć•ä Ńy$}rĻsCī€^>ҧK=#XAou#‡Zū>ĪŅø_(™-Ļś·zЁKcÓōM2MG Ŗ"ōØÆU±µžĀÖ&œ`qĪ+JfU£ė— :‚¾^Žšėµ gÖmŚäh_¼OS[(Ü4¾š…Õ؟ČĆIŽL׃u%Ÿż*6ē 3‘Š|ƒ0µż é“я Įą 殣eˆ§—sĮĒ51’9ł,Ž7U.wœœÕ$3äŻéžÕ“‡4„HÆ"œīo1@;WG›u+¶×b`ĘØIŲFŠāJ®ĆÉČėYאM÷’ޤt©r±¤$TV•°aŽÕŃé-e…ūe؜2­ßņ¬Ü™¬R%»Ń“ėƒ#Į‚b|³ĪŃ\Żęgn¹ ō\TšņœuҼ™ńÖ°ŸĆšdÅDŖ&KWīŸZ\Ø,pZʕ7Į-ÉmĒhŲ”kgŚę.ėŠÉŒŠHgY”Ęo+wšöĶz>Ÿę 8Žę®pūq‘źkX»ˆ{]Ł\BVB’ƒųÖ äv±D²Gˆ”sÅ1JV/i[ÜmČČŁĄpÕGÅ>µÕŃīe¹øµņ†įó‘“ųS^aĪ…šä—…LW ęŒ Ä×MØxÓR…’g~ž? j7$a^ŪAØł×gęĘ{ž;\Zy܁ģO_„sĪ«œą–k ć|+F¤‚HéIq;Ü©):;ŠELcŠ,P³1&”Hģ³!,:ōļ_FxWÅfƒÉ™ŃFĒjė¦…ŹŽSā‰Æå‚ąX—óp 8¾gšßÄsßĶuØ[£[±÷õ­Kåģ{g½œHY`@'†?JŲ&ŹéāK‹xŠFŲB Z™JĘGØųuVŽ Ē2§Ė·ļc#ŅøE Fy"‚7}挱b²lƒ‰Yąd“Ė Ϧ:׬-Óɒė׎²”ŗ@å%Iā` HčyÜNJāõŪk׉Žša?yWœŅē:i³ēżBį »’4·u%ŠdŽ¼ÕŻ6ŅŹłZ+«y$F%dšĀŽvoXõ=Ö8 „šy6«…HśŒWq ެŠĮW-Ź…1JW=óN C$&S»ųG½óƱÅk4 źĢGŽ=ėSž{“÷’Z‚Ņ[³v+Ž+Ī/õH®dI>bzt Ķž©4™·Ķœu¬U”¦;Į d7—pĻm,WQĒ× ž2k-@ZČ­,.šœ*•=żč¢I­J;XūóԟJtˆ%­å„Étģ&€ž`u›{g¼Œ$]>TqÉ"½#Ɲ’Śfõq/XŽü9ōÆ¢gœćsUńĀŲŻÜAöt`²•ūø®w[ń·Ś¬ąņb‡1“…!‡Ņ”l`ųK@ƒPóę¼X"˜†øséłWŸx•õ;o][[źŅ:EQEm= ©åŌÖ:;s| š¾—­héšäÉq”FŁ"RČäō5ö–™§čśD6Ie§ŪĄårąd¾;ćš®zšh'ŲšOŚgÚO‰4U¶“Ó^Śg&3ßč#ŌnŅEÖīn§.Fļ•z éHRJē§ųĆĆŗ…Ä6zŽœ–ÓmfŃóĪxśÕļ jš….¬-Ö ˜„ņĄĪzgÜPb®xĻĘÜ^x”µ„ƒi‘’WAµ]øéżk‹šå׈-õ‰­'žÖb sĄ'¶?­Ōö;{ė˜RžŌó•É/#łÕŽĆKń ¬Ép–7NĮ„+㌒žŌŠ?ŠląŌ’W›t0gŸ.®kßf„o¬÷&āĄŒ Å{sA¤C7Piü=§.‘crš…“MŁ÷Éę¬iß]²µņā8 ¾žęƒCØń‹uį˜4}JÕķ|ˉ7ÉlķˆwĄī}+Rņ÷MÕō{X šę …mŅįš§Œcš ¹›Ø<3ŻŽ]<ń$Aš“š–‰%ąótu¶±fūØĒ }Nhę׌dÆ$©sŽ@pĄŽ{VU’„Q`‡Zўą\d$©Œ&=ĻēłP\ÓZų÷XŃRń­RØd‘ćŖt~æĪŖx3ĄsĮz¤½ŲŚÅö³ž1A¤šź}¢x)"Ōm—Q¾[IY…ĮÆÆµu¾ė6ś}¦æįŲÅõż¤b[ˆį~ōŒœŌ“]WĮ6ŗÖ”aÜŚ}ü3øG*įŌŽĒÓ„Kā LŪ<ūķć2"ć 8ę™Ė*nē-į‡ŠīueŌm4ė¬6̤ģĻŅŗüŃüD-5’k§KÕm#Ū) ’cŖäōĪ8Ū*œ¹]Ļ,:Dś5¤73¤’1x\W©xžīćR–/“žō(ĪŅd« »ĶF%/“Š®CW˜ųcÚ>­ćŲģā=>å® –#ļžBž“&}ƒcį}?HH–Qd2ŽŪpIļōÆńžiāf½°1ČūDg#”sž4ŠŒµŌįõėoŻ[ģÅøeĒŻŒgpśŽ†µ~Ɗ¤ÖåŃ5 >ļķKåY ēń=OĀDŪÄš«ŁŲŪĶ,ŠŒ‰śä}+ėŁwL›WŃuy|aa)ņO”-ŲķvNÅiKcFō=sÄ^žĀÖśM#µA(3Ī} |É©ėķqku2Ēwó++UĒ:ǘ‰HńŚkæŠ%%ݬ›ö*Hų^½AÆŖdÕµæé+źM°žķ“wU@żhfRÕāŗµ¾‘dš 2ČÄvūTJCş5oß^„żŗ{‰²8R ’= rš„µ•ŒöÓŪ[I#ć,ąe~•›‘“mŠó»¹'fY«Č»ĒöĻ5ézF‡āMcK¹ŗŠ4éļ&ƒaHĖ*ƒÓ ~5Å^f°…ĻPųcŖæ„LžėšÕ|+¢Ųj÷²é f·Üv`cåśW›*–:ÕsśĪŽšŽƒÅ„“Ÿd"XĮˆź?Jµeį&³ÓapČRTß°u_cļÅC«qū;<ā]7³ŽC5…­Ō2‰‰”npŹ{kŠ!ų½soqikw§,’GmsŌČøū‡·œ£Ō֍m[ÄZ‰ēš÷ģ×6²d<бųqYļ ŽŚMh.¼£Ę ;ŌF›LėŒ{‘é<Ō48§ŅŅXo4ßqĮ$ćÖ·ž|r„ž"kż.!©i÷26×ĶŪörs–•źaāÓ0¬Ń‘ńsāžńnņ]FŅĀćM·O‘”ņ ­»ßšš«_쓁 ½FB@ē±5źĮi©äŌzŸJ| ńNc”ɦźœO+n^ąČ™?w¶ r¾O¤jچµ¦ßŁź:$æÆć[–Ń×B’GŠŻr#FžכŪZĶ#Ć<{ŻCmyüėŖ4Š¢Ļcš·ƒ5]QįŽŽŚi"fĖ·#…}ƒš?öYšī·ÆkxÅ5k3¢In1†U=Tzżj„±Š‘śE”~ξ šž¢%š=¢Ē§qū©)Ōā¾”Ņ>;[G¶„˜ĒqÖ±/a5ŸƒšN¶Ė-å”VŅ.6ŗ’®?Ķzē„~É£ĘĪ$ÕU|®ų­iåÜö(d¶Xe” {Ž'±a$åŗž0k­ņ—S³Ņ¼I{*ķ½øn3Ÿ¼+”ū}„ź<C!łh1ēg.thtĖ’š6õoą#Qj1ŪIƖcr0=*yć'±ÉĮq%œ [Éå˟¼)ŠjŗŗŽæŚ?dß+”fźŽÅ·cłŁ’‚Ø~Ī·¾ ńIųæ ižĒżńœ®ļ\}kņh¢»H'.Ę@ącƒž˜®Ģ4ŗźi·Źķe%ĪÜp{g’Õ_^|ų”&™0ҵ;ƒ{£\©X“y>\ݘŸjō‘ƒ—Cģø.x£‰€ŚF>õóOķą‹k{O¤x9'DÜŃ78Ļ·J‰ÄŅ©ś’vż«ąÓ<;ģėć»Ųn,fžYt;éi…ŗģ#©ēĘ棔ZĮRÄØ'ƒšäÄĆ^duF'«|,ńDV7Sé,é!£$qōÆ„­.Yf·æ²|K×ė\–&HžZ?ąą?ŲŚ x×ĮŸ¶O‚`Ž×Āŗ».—ā¤H2#}§Ė”‘Šä`ŸjžZüQ¦Ėow3FÖ÷īCĘÉєōŖĀu‹č’ą˜T9µ}ŒX6@ĶQ6ĢŠg=zõÆNš8œ l”®­ŸRi1#¶ēĻj³;gI‹ķ•lž{RDŹ»b ōĒŅ‚¢ģ?sØCnėR˽bpĪNy Õ2X‚°\/ĶŽM[Žu–$ۃӚgU9/„<[ā†ž7šÆÅĻź2i¾*Š/āæ·*ÅrQ‡uČÆōjżhÆžŌŸ³Ļ€>3hQH÷öQC«B“orVČĮsķėSU^'Tv=Ń1§Żµ™ŹÄērSµ‹µM=ŅO¾ƒq^T£m3į‰~‹Ćŗ÷Ūv,–yŒÄFU_ŸÆ’Z¾8ųåšśˆ>Õō&“ŠöīŁąĻ”É`=zÖq žLæhφæ5kI¬Ķ„…Ė‘ ć9ŁÆö*.Ōc×ø®ŗ.ē<åŌ|kÄ®O5]ĢMŽĢæ­vĮčs6@Ū]ɍvg„.ļ%6[¶ā{Õ²Ć)¾XżīyĻJ¬Uƒ¼r~ķ‡čh3$÷h4Œwš“ķÜŪ¶'~y4¦X…Š1ĮĘ;ŠY\“T«vö¢ĒLśs’©żØ,?g’QųSÅ×.æ|MpŗmĀI)H­nīø>¦æ³ļ żŽ8‡'ŗkė| › O>dl20.ÅqāéŻ&uÅ\›ZŃ=fÓÅŽš1Ŗ!^¦ļõ©Ÿā½Ēćė]E¾¹™lc¹Ūņ¦8'šż+Š¢qĢü šdŽ6i “Ÿū'ķ’š&$:ßҾź»Ņ L7Zmō7P²›ŽB+Ó§¹Ļ)u9ąm†\¦[·jł»ćUœ±]¬°{fQ»o÷5Łs.k3ē«=Zm6h¦±a%Ä-¹<1ōƲ>h āżrĒÅ3x~ /S\,)Ź0OįķYŌ} ‹?m~ź¶vŚE„¼ś„)60żć_O鶓ŽZŪBådD+άoŠź­ģTŚ—¶v-üKé\wˆ“©%±s·st#=+ÉØuĀ]OžĒ†ļ'Ō¦7v ¢¾čåQ’?Jö_ iQ›Q å.P)qY›ó"[ÉpŃCi4ÖR«†Sœz× i—“Łłp]¹Ž^™?Å[CcK©ŅAtļFąFAVīF‰|×9öļTsA:N»µŚK ±[’č[…nĀ€(ˆÄFŠ3׎ø SFµ‹•iad8ģhŠāYB*K)™Ō`“ÕŖŠßJ“7"Hs÷Oj ±Ó*īAp„²õǵoŁĒkqn|čÕż˜TˆĪmN;ŪÄ`br1Źćé]o…ÕēŠ ē,łRŪćå,”“źŁ7 ©>½( t^!I„F’5NC}kŖÓļ Įx‡–¬1ƒČ¦œ1Ūķ łˆąŠ”wb.ų$`ėH™3žŌī~ĄŸÆc2(€/ƒŒž xN½”Ž-ÄūbÜŁĪGJ9™¼v6ģ|(ŚĘžEå³ŪŌ•ŲxkĆ«„¢Ū“hź§‚>v9-`³ŠÖk É2ł‹ņģ5¢gfOLÕĘW9¤“:mC7„BåQ:õę«jz}ĪtŃĘå£ÅTdaÜ\˹rŖS×҇h¤€eÉąJžd/y¤˜ĄÜB*¾•u3łl„Ž£˜EFÓīķnÖ= ļ]ŖĮåĄ®+ƒÖ¦ĆLęµ1÷Ō¤ę©[ŚÄft%… lėģdۈŒø5Øė“y'_—ŒzÕ(°.Ųk67PķgYŌü­ŠąÕ9#t˜Ė`㜩ŖöllP½Žźü˜¾ģ÷ļT×Gņ’X÷§©éYˆā<ė{MQ`œ<³įOš“^„žQ‰BżÜPˆee$Ūå’ Æ+5›o8­ŅŠ [‰-.&ó ‚4œp:  „”@`:Gr KZˆ¾ÉŹ¢ćoŅ³ķµäŖ±OlćŸ#Ū\i¶iGRŲĮļō®^ęŅ[Dv‚éԁڗ+¤w_l‹ē%xĘ:Vݘ†(ŌI'®q֚€.bP”Ń7jĄø20 ŃȃަŻĖkXbĢ„e½)ö÷–ń25 nE #¾ŁzŽz®Ązā’ŅF“•MĘ"1œP›č®¼Õ’Ü ¢#9ļL[gdOq@å1Ž%@¬:rkBĒP’Ż×c+§µ\ iIy¦»“m:‰r­r·—ma3Ém&ĪÜÕÓõacμGāł„„Ś_+–lį‰ūµä7:ĆYß”Yԟŗ{šŠžTzö…āky4hÖ>ĖŅŗæŻŹFõQŸÖ”£s#Z “ć®*āź:…š”Rć=ź}š4PEMKÅfU7»-ŲzōZ˃T]@+ƒČ#½CFŠ:hoYŪJŃ‹Ø¢%—‘ŪŠÜ‹S2±†āģV3 ń’¤$ˆÉ⧚Ś[InĮ‡®+09›ķH4Į\ęČÉĒZŽńn.aWWhć­dĒ%ųäHWŪ±«m#ŖnƒŚJ77,Ņ”/%Ā–Ü~SÕ@©„Ōē±…į2©Ļ>‚šv!S8 ™od™ę†A6ćÜ}Śkß=—–ņ¼œr+OhhQŗŌ>Ō¤-Ų w®f·ZĶ’r…±Ą„)hl¤wV—öq[¤w2†,§ ö®6ę Hµ»…#^¬Ź¹×E2GK(\vŖ7„’;*ŲļŽŖ1¹‹gI x©ō’2 ķ‘įq“·zeÖ­öېŠ.åśÖ±‰:*īŽXŲĒ «×ŠĆuKy#GčXō„$ŗTĖŸC"œc×éYܓÜ#!&ŚAā²·@8+ƒu+2Ⱦųį«_FX\(–0üžTł@ŪHcß"Ÿõxč+ŠŌį“K’I¬ä`„š§Ņ“ƒčRĖ~×#¼Ģw‘É Ą ņr1]…ģŗ|ŠVÖhŃ×®3V8²&ø#3Šž…})n­ŃUĘ{ÖR‡RLö“ņće™²•ĪżŠ%häAאjŽ}6 >‘e 9#®Äqµ¼‹,uQÓ¦(4ČxkKŅ5~Õ Øvb¦3ü8Æg“х¢,ŠŪ‘€ó§pęGC*yшČō5ö|±ØxČ`JV3)Ļ<²0€ę6ĻŽāž<Ņ53²‰Woūc ŠFŠze¤[łž`•6°ĒĢ:WKi¦É<¬°*—Ļ\ö¤ŻŌĻIѼ1$Q ©—{gåć„z.Ÿ*#—¼:ÓDŹF²éJčåT¾x>•ސ °–5—9#4īEĻ ńę„ģ!“ŪC"’A~µćSŲmRńFĘ1Łz j}Ģ©ˆQ¹ʱÆōH5(™Ž4,G;»}+.MM"Ļ–¼c”Ÿ Ž\½©d·vo›Ū_ üošOŪ-WUÓ6Y¾Š¤tėÓÓ·ėZĮj3ą}^It™”Č]$łväžøäW[cāt–7 w)U]‹Ėt©Ø“);ޟ¬Ęd¤³1}«^MNAå"[v=kĶŖµŠøČŁ^ÄńM3/Nz{ŌÓjdµo4åvséQгĶīķ"ŸVņ"`ēƒPŖžL‰–Ŏ®ŗo ­š×ŶśN«m—"•Į;›_ :jŪėŅt‘RXcWTNj— ¾Ó͜žZ:ʜńŌ­rW\ĢNĆū¬p1ŠśÖZœĪV1㳕xl¶>ROj׳_²G*Ą7ķW(ÜqØaėŃ&©gse#–VčXō5š¼9Øx{\¹‚ķWģ/™!“œƒżŚē”Mć+œ7sŚ\Ē)o6dõöÆcŠõa40ŻŲ¼pH†SÉ'‘\rZQŌŽŠ|QŖiš¼SJe†%lü½9õÆŠĻ…^:mzÖŅhõ čWļoą`t }_į^iŅZ^ŪĢųĪOŽōM¦¹w®ŚA$É ÆÉ=½o#³Ńt?ß_CĈUßĮō­ėķ6āÓgĢY;f·‚ŠĘäJźq†Ņ“.ZŌŚķp…š ā³”l_1ā¾1h#-µ—{v#8Æ&’9”`ŸBj[&E9^ÕŲļ!t9ėT$ČĪ"'§µ ]Œå‘ģ22yć+Ś®[­ōr"G;'Ė‚[œÕs1rģ–6×VŠ?֔ūŹ{Ö>«¦½¤b‘¤‹$­ Q±‰VÆČņqŠɦ>ĶŁLēH«ŲŲ~l%Wė޵ĆjWsÉ+†Ųģ Ę:-M˜ėÉ*É'×5‡©[^¦Ó“Χ«)éõ¤R“f,p:J†Ulē9#Šč£¶Ņ‡Ėu±äŚHē„%ŪZ42Hm ć;sÓŠÉ«“vjń‘ņć$RQ²°b]A$Œ±,¬?›.#ø€ˆĮĮėT)FęšŪéöÖö·7sĮt¹fFčǶ [’„Ŗ[ˆ$Žęi a²yoz P-éÖŃ]āŻgĆ<×C=ž‘,µõ±Mƒb¶ŗ*Fm·bń©“œ,Yj×|%|×ᔑ +d“ŌJė<5„Ėi‘}d’ÅŒļi‡­žŠģ0Į®’ĘÖ'Ądu#”ō ‰³×<#cf®™1™K+WК™£Ü[<©~”Hą`Ö°25ļ㓊'XŹBĒ WŠė,,‹»[$ź’6ĘįķV#˵˜&ø”ż“Č^J®~ķc]IH±ØŁŲœŠ3Ÿ»¹óŲŖ®åi&œ°\ łŃēīÓń ¢ŹĶV‰Ļ• į·Vµœ–Jų–`ŪGQĻå@å÷ST“·¹ÖāŻÓŖƒšć<=®M{v–ęKØŽ2øüėčlrrö="’“ŧ !óŪq,7dœgšó&Ńõ(/‘"˜y!·6ąH#ŠR1lś³özšūųīūRŃṊÓTš†(š0Ųa‘ĻuČĻ5į?~xŪĄš×Qт*“mę¹ `äż3S)t'›SŲ|ńnšh“éf•żž-/’©¦jÖÖņ)ŹKĘ?uĪļżiSMh%{šōO¦čėknf·V\ģéŸĀ°µ9ü]„Ž&”epö·qŖ³RSŽßOē]P—B”u³7¬üa©x‰®īµY#»E8I¹%vŒ`ž"¼ūBń­‡ü, -?ÅqŪA%ĄU“Q·7LśÕ“Ė©Ńüeų]«\jé-ķχ··śD|Øć#'ßÖ¶žB·fļDæÓšŽę1„yzƒļHG“jÓęŃÆ¬Å²4åB ī,=ūu5ąZÕōšd o*ędlƒŽF*nÖę\śŲįüA«źZ֕$LšI3 ‡—8üqTü#ŵ•ü)6ہŠŒķ'ÓҬq’ ¼šeźČ/'¾gdŹ6ļ¾}ė·š¾„o©Ś¶•¶«¦É;W·Aķéž52Ų­ŃŅ źĖ ]źrwæEqpLšóŲ^GÖ}ØŹ3’=ūw¬ˆq²1tŪ”“Tš=Ę TbfcŠg‘ķ^•ż§§Y5†”QøRDØsžõ¤eІĘk>}GJ¹š[ĪØÅHūĞ’­IąŻ›IžĆQ¹ĒĶ‘…räVj›hßš×Äė4ž¾³†ćKøß…P{Ææ¹§fņ(äHlf ³%Aź(4Qg³\iŚ”"ĻZŗ»X§$,’gr1éĻ<•õމāķ&-1«Ź¶¤C»sŸ¼9æųZš=„ŻĪŸ„]Ą÷ĘvŖ8Ė}y߉|U„ź’Pš[”Ī9ßÓłŠ`ŃĀÜ^=“™!*mŽNü`Ø®§Ćæō™TéVś–ėˆćŲŁ8|ƒŌŠ NĒ-=ę².”¹u˜>Ņß)>§óØõŸišEc©-Ę$t " `QAŽÆT%Ŗ¢É ŪĖūĢšŁé]߇ōėK]zßÄ‹½ŲB¬ŽX9éĪC4Œš;?I­¾‰&©¦j‹vo˜ł\õäuükęNł5©oƒÜdĘHēiĻ#ó¬ÜŹS:æ Ķwk",Sˆ·}Ņx-^>Ÿāq£¦i³ź7ē œ`g©>€*‹šĀGk.—eāC½6œ¬Ūü¬BģóqČÅz‡/ķōÄ:‚m²ø—ļ©?J<ŌTÓõHšÕļnŽ)-¶’Łp;•šļĘĶ?OŠüGcŖhóż³Np]¢ŠPÅY»u§ŹĀ×2ļāÓ šĪ›ā­)gMD?gIsų•õ6‰yą?ü8K;ėŸQž6[‡–2$$®iģ3Q(»h)Dų’LųYāO k·ŗeä< [`ųĆGžŲö"§ń7‡ŅĮõi¢…”HĻĶø«7šhńøuėY(ĮÄįJœćšõŸZi—½üw~{į‘¢ ܊Ԙī{Eć[ǤEqnŠbĪƒŠā¼_ĘFņņĀs¢B÷³`nŒc,8Īx æ#OgÓt·KØV¤Ć²g•8’ėÓ4ˆté.%4aČįO9 ĶI£²Ņ-ćK¦,Ŗ{ēÆŅ½&ēįõ÷Œ4 „‘wŪÅūųa'fHńÅ3U.§Xųy-ķ¬ż–å8Į85Śü6"ŪQ¹³½!m$•C³§Ź}…;–ä}Ļyū7ŲĻąŁ|ak©[]Y“`ˆqøøÕń_‰¼-}įė鎙*$mąŽćėJäß”åŗåöµ<ĪÓĄ±×­lč~.Õ4Ė»Cqg”mœHeo»Ē„RÜÖźtĻÆLKʱ’K&ßį>•Ćėš4BŹGA ӆÉR9w5¢FŃK©Y-®Æ¬”·±¹–ŅU*X)ᇧåV­¼©Åuo6Žn^Mܦģńԟ~ōĒ#Öģõ™ģģĄž7óPc8Ć+ŒŌüMq¬jOͼ÷ ą/žüŽŸ—z‰>†2‰›ŽÖó\rńäg&“@¾žĖÖćMQVęŅYvÉ\sųT«™ņµ”ōu§ƒü?o_n“ŸĶɎD˜`qКńĻČŠź’%«ĀŅ/ ŗ{’:¤ŽÅ¦Ģ_ßj°čVŗ…”ņ$Hį¼ŽBc޽«ļƒ’ü5āO…övZ¬—ÖšŁ·ĪžXUe?ÅQ+ŚÄɟ0üUųW/†µKÆų5õ Ÿ·2Y¢7„OƵx.­Ŗ\¶»·B$H­@ōĒcY9hW1ĖŻź‹7”Ž\Ÿhü”¹o„hŚhW¾'¶ŽvŠąŽFĘNē©ZĒU83ØŅ|+§ŪikEĢ铌š=‡ė]߄4’ų4Üų“IÓļ%šć°Žźh„#h#ŗō8ė^U|OCŠ„Iõ=_šåˆšmKE¼¼¾µ‘Ģr¹ ōėĶu’ ¾ißutšŽ§®`I"™!øy6†pr>§¦+Č«Rē}8ŪQž*ųy®ü9ńõĒ‚üMØ[ŚX±2[HNF8äķƒ^}ā ź ėFŃO&ĖyTäKōżkĻŖ›Ōī¦ĻCŃüYmi¤I¦\ŪA6žĒyR€²QŽ»©žɬxjM{L–ÖÕPŽ6|öÅr+õ7öi£ę­oLIõ{:źŌ‰v²Ŗ`ƒĻZę!Õ/4MŚÄŚ…Š:)X~ņ#Óėƒż+¶“č`ćc¬Š¼KbĘO²Ē*L¤Čė÷‰ō®~åÕ5 ŽŠcŃž-ųŗ×Ēóčs]Į.0،‡r1ģkī/ ź‰-²<±*†5§1>Ģ«ā]Gģ—Ė Ŗ"擩Ō7Śž“aźÓóyĶ&RēmŖŚC3ļce<‡=+±Šę°Ō“z\”źMb)Dį~>|Š~<ü)ń?ƒ5¶}L[2ŚīĘƒÅ?žė ¼sāköwV·vs°ƒ#*у—ŲWEiŹ=ērŁ…”“HU×®įÖŗO ĶöĆćļō㯷Jõ ĢZ?B¾x†}{H·‚Iī!LP¢»żoH‹Äś5öƒØ[›č„O¹ Ą= T—@‹??“=g_ų#ńCOÖ“xfótż@L‘īĮ†-ć'=†3_Ū·ģßńwIųĖšÆĀ~5ŃÆ†¢’ŁÄ.FšŽL@żMrTŲļ§.§Ņ—?fø·œ?”ČĮ²;×Õ^×­µ[„Šduū¤Њå”z•$GńĒąæ„æio‚Ÿ~xŅŅĶ/W±‘-ĖØcąeY}ĮĮü œēĒĻ‚>"ųńāĀo@¶¾!šī£5³HŹU^ßv#`b0sŅ¢’å«}u_-?WĄĀq>X½Œ¤ÆoH<0ĒQYŽ„ ŚKqÖ½H>‡$“ $%Nz)‹ B•ĪsÖ¬Ķɧ—‡'w„G l0 ½€8Ēz ČņaĒ+¼ŒØĻéVmÕfd»{÷ō j,ˆ!Īåęü^…~ģŖpą}  ź¦XX’c$7]d8éŅæ}?ą‚_µüæ~8ųƒöiųƒØĖƏ°:(‘ņ–—Š9»oćķCWŠģƒŗ?²CFvyįßÓŪ`ƒŸ¾‡GŌk\ ø?ĀEyu™Ocü{įķhÆm%eŁ)Ź3Ė3ھÖ,n,$™ œI{g IŽÜdćŠö’Āé2l~2’ĮI¾YjŚ ×Œō;rō•E“ƒ’?šž.ģÜŅF#“pr×Mm f“Šęr1F|‚Wš{Ŗ!‡ ņk¶2±Å XöÄ|{ՇD–5.NÄĘ0½~µ^ŠĢ_/–’åQn2ꁞ:՗ĖŲYWhŚ ;š•ĪćĮżh&(|aŠØ={֜Rˆ\“j2½č:©“^Ć,¶°Ü@n õ“‹ulb8+*ō?…f?šN?ڹ’hŁ«Į÷‡Q#āo„DVZˆnZxW?Æ@>‡5UtĪźlż&Ōüafŗ†‹­[ŚĖ‹Ŗ°ŽI£H„Ą6:süĄÆJ…į¶F³āøa†ūėĒį^"'L^¤Ö3&—}£`ßčņƗ:uõÆż¦žx{ćĀ’ųS\ÓmoYģ_ÉŽ€³ŗ{uÆ&¢:©=OćæÄõO„?ńOĆķvŚėOŗ³œż“Ģs¶h®{ŽāŖ+ż¢I0€ē¹dĻRœM<¤fBp{W}we¤>ms§^ł³c÷‘øĆ+…mJA8\ó XĖŃĖ˜„Sœļ_y~Ģ"xl”œ[ØWVa¾¼W±Ičyõ#Šżišo‰įŠā+ėYÖ{)”d9’õŁk> †ó ±ˆ#Žx¶GŸR'CĒzł£öŖ²×¬~źŗ¦—֐Ń2\Z»€ą{ó]Ōw<ś§ć‘ž-–M8YFĶĘcĻjś/A)%µ»Ē?™ŽxéAœ’7Dŗø»H­Qåߒ§į¼)ØK¦=Ųž8ī!8šÜ” ŹÓéļ]*v2Q>C·²‹q‘f·Žā<63śbæW’d žŪį›7³µ:ڰl4`Ž*Źs¾†°‹G鯇~%Ė7Tӌno1FÖCžĘ¾ŸŃ¼1ö8£–6ŒƒÉ÷®*ĢŚ1f¤)mk¾Ū{+ölÕymź)—w˜ppAźkĖØtS8‹ķÖāęt *Ł’ ¬-¬ģģåSŪśÖf‡_įū”k•B¢Dn:t5·®i–×>Y¹FEd*pEm”œĘŚ[•EĢ̣ר®sÄz©±r³ƒ·ĶQ˜iwĘXDˆ»•°sŻkNIg  ēź(¼ģڟج†yn-ŽŚfŹ“×(*.Ē1w¦Km8xßĢCŌU[;/ōä}¬šō#v€“¹čŪE’bķ‘Ö­Ä‘¾ļ,ĄōĶ—¬£ŽedeƃŒ»"ŪWehŪDķ’2ē„UÖtOµŚL”r„y÷g#”hŅŖ5¬Įö/@č+ ‚č钛i•…Ø%K[Š]łÄ­’F=((ć|Xšœ1Cqfɹ]I =½ė'ƞ)žeE6Ł·cĻŹF?:dņ#øYžŅ…cl)÷ؖ&}ѱe"ƗM’-Ac4{™_xĘqķPłaŪy'·j‚ õaūɽ:{ŅZŻĄ\Ø )õ¤v°³?’Ł'ųA©ōĖV‰Dųļ@_ꨤÄcÖo—xÉ9śS‹³5ŒKRi>| u9ļ\~„c©4‘ĶesöiĮē=V®Fˆé4ų¦ž2fe’:ŌÖq‡F0Ē"gž3X›ī…§Ś}”Ÿ.2½Ą¦6‘rµŌBē%qÅszŻÅ½„J¬cuä€?Zņ >!]Ū^lFY¢-ŃŗŠčJĘRHõÅ·±Ē,JŃHpHĻA] Ī„5†‘‹ŸZf|½ © Ni`}= gvŽxŹ×œŃ‰} xņž¢µ¤l 0Ⲡ̽?juڹeŸ-œylµbź½Õ“ÖŽsÅø`[ŁĖx?F»øµūKŗ3’»½{ž¢¬ŅDę#эPŲĶBöŅI|˜¶ł¾Õ…s4į$bćšē{ˆČ“O…ŌµĀ&AĻ"“bXYT/¤˜b^ŁķL¾ÕKFķŠŽ;"“ aɧO{C‘‡¦ ÆDo#h•Co^£Ž¢Š“MBÉŃ>ÖfŒœ«·4Ęw7—ÓY‚]āLuķT¢×¦Š½ļRŲžįä›rE<ńWm/®”›kĆŃHź*TÄlZ^J¬Ta„]ŗ "AōŖ‹ø¤¶ņ»ø-ŽkŁņ@梆Ģą\goSėPČH påc,Œyā­ĖŖŖ—hÅ ‘@ī‚{k~J…=…`Ļe܆#2¢öČčjŌdIhö®#2G|u¬½FąŚm’xĪ܀6о],øÅå¼²+FXpkœ™RFU·%•zÖV)I­ 7øN&‘1ü#½DöR„ižļU#PŌŃXī*IĘsXž*“GŌķ¼·i¢v޵²ōŒń\[ĒØ:žäØ9§[äVÄŽdGō¤Ŗź÷«4JG~q\ާ©ĖŗIY›¾µ».§.ąĆÖ­¬H‰åŖ•aÓ“@HŠÜ¼Éķč­pš¼'Ģ’IgL䌅ä\ŽóSk”­Į…Ē\’d^ų¤Äń1¾Ž3čOSV„cFĻ^šˆ!ŌmV%ž7uĘ0ŁĶzm½¤—1³ąīĒ™‹DŚI ’"Óµ‹öŗœąlžµŠŽ¶Źx§Oø­S1až†¼6ņļU·ūM„ōCŹĒŹŲĪįļZYZĆ.ųą]DF#fŻÓī׊[­ćŒ(aåö©•¶vQ\ÆbE[‡SūŸ25Į„­źšiģ÷[ĀĘ9ēµy_ˆ~,hņ0ŅŻÖā\d.Ģd}|ˆŽ+ ß *żW1,xčk”±Ņ “¾i7ŖÆn85”£Šgē|ˆ«śv„‚{„”ā2tąāƒ)īwj»¢»Ÿ”qĶ_»d(# £œzPJ8/ųe5XL‘ĘĢrI}ć^>ްJŠI E&HäbƒX³‘×¼:-ŹĖ“Øąš8®fHŃa`Ÿx "ģ|ėńNÓķlѕŻņžĒšÆõ+Ōā¾ÓŃŌN”ē×Į Öēē÷Ę>…~÷—;a‡p@Åq–=«Ė4ūø­Ž=𓇷MM@ę=K[;æ.ćL›Ėn7)ļĒųÖö¼ūo«)Ē­pԈÓ:Ūäk;`öš®ņĄ.W9śÕyˆ¾bw¢IŒō¬ µ4Rīpśö—ye*\B†HI<ĒÕO¦+&Žźö3qčĘ& Ćŗ śäj­õŠ¢„åØ0°Šœp:W֟ ¼s¦ kKµV+³äŽåŽGmĘŗąō0‘ōµ¾Æa:yÓ¤“q•9ęœÕ‘Ź£#“Ąw“IE˜·¾L’|Ća=1ұēŅõfóą snzå¹ZŠN-;XĖyrW+äĆÆ7ųĮšń¼K£¼ö±Å§ O°³`ƒĶdķshn|/į“„EöIggŗNNqŠ„įĶRžĀā8” ÉpG|žuÉV(ģ‚=n¼č„‘ķ€NŻÆRųgā‹ė;˜”c± 9°Wš®IK”v>ļš/Œwn§ŖN ėļxæJm6pYĮxäŠÖ›0”złį’ˆ™`ŠEĮR6°ķ[7š“Ü’X‚; W\69‰,ī-Ł1"«IŽ8®c_œÆīķŪńśU5r£ę_kŚžŸx^iE“ņ»…Ź??B:śÖ…rš†oŪŽõ&²œVÅ85’‡'ø‹+µ vEpQhڈŌYuŽ<ćkˆƒøÓōóm•’D*Ooā®å4­ęѦ‘–+…?xż+D6Å8HŲaNØu‹·0.qœńŽ©&y½Å®.’ęŽņUR0ў„śÖ…³²īRģOŅ‘&šźPD ±;GaXöŃŻĪ¢ÖbƒÓ­ GĢwölńefWFSƒņńŠø,÷Ä© +1ćÆCA¬CŸŌ“©"€q›ęĄćėXwz\ńA$ÅņąwƒUn§'ö“+!…üĄ3óÓ56›ØÜģTŗ!œ÷&ƒT–ĒMl¶Œ¢E Ē< Ś[3<{Óqł¹ī(aʌ™ģ€sµ˜°ągµ%Ž”.&f•$B8Ę:š3q±Ü鶉iˆČ9%äØ2€‰ī;UĘV3šŠÄĮÜĖŠ Œc©·ZT³[«¤ŒFyzŅ–ę'œ\Ū„“ņ$Čš¹%G­%“ P|¼²ņ2y®f‹ŒM4h%ۈ2ÌŅÆįįd31 (=+Xlkc©µµŗtTķĒNµŌi³Ū“E/ķ‚2Œ9ģs[(Ü Z®µkb!ßöéXš‡:ĘĮdŒžA.6"lė¦å)³QĪ@­;]:Śł3ö-Ś…3‰ńƒ°’Vf*ķņŸA^E©XÉk8fŹēi4m“0ę»’Ś`w¬‘m< ”}ā\}™”«Ÿ­sµ©“ēGžį[z¢É/É5é–VÖMd‰|®0 ¤Y^]Ł-Ł„ea•žķtöpByŋ3Ž("Q:T“¾·gć9Ē ś×ŠzF½c…QʌCĄ­Ń‘[^Öl§· o+ä0¼ĒQGøxnćQ“©ķL,rwŠŸ6ē߂rqŌ×'{ ŅfīŹr7×Ņ“e”2Ģ#ŲĄ®+¼‹Jф k Xž\ļ Œā€8½Sƶ·@£ŖOŽR9øĶ^Ķ옽©gˆƒŠšNVłńL—z…ÕĶÜ.ÓŚ¾B¶~é®wĆ <7pĮ2ļ[rH’^˜śWŃIœž§ŻžŅķõæÜߔKV(äWˆ6<„ 0’NMxvŸ£­Åč0m•;pՃ•Īi@õ/ ]Ūh:ĄÖ“}.õÕR_(ķ$CļĶ}ā_ i?“H/¦ž]zā/).VL“KĻß4‰tŽēĪ65kZMŻŹ=“”Žū1øś Ē5å?|1é{%„±Zj1±7Nćų½Ś*;”|ń+ÄshāĆX¹’įć_)NvŒŒĘ»}Ę;LbÕäóē‹<ä,­õ9”Ē[ ]Qėi«ųoW >ŌC²4WĒ›?Ö·WEē·¹ŒĆq„ø`L6{R2œĻ-oŁ[kz”–®|‰„ȉyEö¾gų›į8×ʗ–qĖr-ī/7Ɗæ4xčŅŖ20öŽēŲ> ńNæa£[hŚżÜ“ŪDe$P~R8ØnüI Ł\†5·lķŻ»‚kTO3;}'U±½·K¤¼(żIąŠóˆö–—Ånķ`µ–08lw9īh3qg‡Ś5²ż¢%Y\eHäuķPź:ōŗMæ–г8ėņļ?:Rvަ‡…Šų³L’źį®tų|ĀØHī_„{‚<¤ÜJ5+ŪŅ5-±ĘŹ żzÖ2e)“­’bZéhmäĶįr§łt'ėåĶ{CŗŌ.n£³¹ p„¼¢Nq©śš)ßCŌ<-’·„4‹‰üY”Į­³Ę"xÖL$˜qĶy­īÆes«!ѼæģČĮTG\:z~•CP=N=oOÖō9v{°ݾ]»żžµŃĆįdѬ漰yn­€ŚåĒ Ÿ_Öµq—üsÆCssh`±µs"¾>šĒ?Næ„_Ō•ąmSėR.‡Ŗ‘{\[š²Œņ0h’2LJµ/¼śuįžŽQ!'qĪzōļÜ5ņ.r-ķfbČßå t?L¶"O ž/kė ℹ‰>žĮ×é^3oŁ£képĪd-ĻoجLĶŲ§¹•–öĘ?)s¹¶ōÆnųEńC^Ń.e\·²¾D}–ē$N£4Ņ5¦w¾.†MJgŽŽšRĢØ«€ ś ¦³K˜ŗu•ōŌö:ž0@?żt„±•It=SÄŽ0šęš4ū=FH-ĘćåŹųÜŁģsōéT®“OųŪĆ·¦]FŹ V'hĮL‡ćŒ‘ްömjr93ó¦ö“­zᓐ‰X ½8=?u¶vD?lŃn&†grŅAœ)$õĶh¢>fzLJõk¦Óä°æ¶ŽYųĆšN?śōĶ 8”ŗ¾™Ńnłlē£óŖq H䵄“Šź8ž±ąßŠž!ŅÓPŃ­|Em¦Ģ2RI‰@?ŗ\{Vž%ø×nÆ,Æē¶R¬d„ެøī;žœ†é£Ļµ‰#¶˜E(ތxcŽ­m.ōóCąd“Ī}Ŗ±•’i{õk{Icc¤y÷«zƀī.µ‰—G{ÉŲšē ƒü©ĘØĢXō‹V“HŌ-§µ¼…C¶ō >}+ŗ°½Š·0ČŖźqÓ§\ā8żFņK»©‘ŠE6AœW”xC±¹ŌmÓ̶(Ķó3 Ō’ŁŌėž²ÓƘ‘DNwćÆē_;üPŠ-WUÓOŌŚx¢mķ°`1#½iŌ” Ō5«]:Ko] “»|¼ö¬Oė.uÓ§jó$š‘ČĪzŠ£į†÷D¹ky ‘!0Iüc=…v^ų“įk? jV2h–vZŠ w}ęaՀ؝¬O%ŻŽ Jż£`ÓīµɦÅs`čFöl$mӁōōöÆÖ"æ×5ėŪ­68WLlō O^¾õēāf¢®vŃĀ]ž½”| ŅÆtČu4kŸķEM²«ņ§>ƒÖ½_Ą>°ŠmuXµ›āœdڳ©ē×Ҿ_g±C–‡*žŠÆufµ†x4Įrå”fŹ«“éė]dæš—|/Ó®4atżgĆ7d?Õćן+Ķ–&ēgÕĶ]";S¦C­ZMkä3c—[Ūņ5Ļźv°jĘļLhćv‘]W~DmźµQ•Ėö%Ækš÷ŠŒšÄ“źŗł%~d čOq\ĶʧqāKeÓn“Š«jŪįyr9Ŗ{Ę)3•¾‹WӐ_,J1äŽ õéśĒ‰>`æĆļ[GbnpšµĮ0¹qdMr÷pŽĘQ×'8ł‡ Ó”įLF£$6šŽpŕÜG­z‡rŸa†ÕńåĆ(ꁶ;Y¶e-pŒŃŽ„Šņų~Ź%˜ŚķĒ'å hŠīŚ _dWq»Œ^›įŸĆg§ ā¹hĒ ŖŻØ†źŲ¾Ÿp. ó60)x9_ķģĢ×>B|ȹĖ+HI+>ĘRGóļŖA=„ĖC*“J§$e¾£µPµĢw†pįf8;W±NI­ %±õGĄæŻZź³­¤Ļ+lū<ŹGP}õƶ4ęEuqäƒZ™CsĀ?j/é—ÖMć=*Ä’l„ŒĪ±EħwŻ v9Æ«’ą”_µż’ĀĶšƒÅ7:ü"šģź‘C<˜k"¼™ķ“ō¬T7‹;iŪ©żNA0¹XŁT˜dQ$MœīCŠ×”ü?ÕSDÕ~É0x"”‚Ašć’čm$}_ivÅ!»µ—÷‹†V”Æē3ž įūÜjś^—ūf|;Ҽշ“6~*‚ņ^1ĀČßīž3ō®,D¹›ū-“ūÆs ÄžGüG¦ķ™."­š5‘،×U-ȒFC nµėÆ#ޤGcdgkzzūÕ7GY¼2“į”6q€9ŗg)M„ !;”ÓšŠ®@ gō $EŲ¬‰¾PzžĀ¤Žq„¶ü§<†ƒX–PFūĖ“ßéĆaˆ ~œPmģ{[nĮ“ŠV¦—­źŽÕōæév^!°.-®-äŲє;æ,EģvEŸč/’÷ż¬“æŚ’öXų}ń6×R“øń…„²éŚō1¾L3'ŹwŽ ēčĆҾ»xžŹśXę‘6Éó©Ļø±1ŌŌ䃚Ćß^ų;ĘŚeśļ\¹†ä7B¹ą~M{Xw„™ēÖ?h~ xÖ×P“ŽĶgWĪ,žYHÆØmuāWvzWlbyu§M¶ņ繐U3Ķ|ūXxĖ_чšrˆ8”Q•cƒŲŌNbŠRĘŠ95ŒĢZ+Ī ²E*•Ŗņ¬-*(•3éYɽ»ŪHZ"$_­I†—‚6H9A)ŗ…YžSŸ|Ö}ž­r·B%q· |Ā€=NĪ+BĶÖå¶MŲc­ršÅ„nqWŠY4ō’Q#³!‡Zōż;XwÓŃ?är+P9uµfŗwŒįó]\0C•Õ‹”Ņšžµu ʁ‹Ø cų½ėoĮž#ń<šÜ’k`–€žģ`ä}h–›}/mØK~‘ĀŖ€džĘ©Lŗœ"¬øcŲÖRŲ“ØÓm.Œ[®T“õ­{Č"­c™L¤‚S<ŠĄE‚7‚™€•qĮÅgIzņ© öļ@ ćÄį„Ž„O©Ü­Äi&Ÿ0V_¼1@›±™ß«¬ŽäŪć8#­j™!¹€€Ą•ō ÄĖ!w¤†ķWRÖIPDą+g!Ŗ\ˆ®mä²\̊pqøwŖ-ØI"ˆŁCØ>”( é,Śņ$ė’q^e}{$,ĻęŁIĘ&ØÖ õ1SÄ ó"Ż\+`×Is%ž£l„X1<švźYƒok©’(Q•÷r¢˜¦-4³ĶˆÓ9;ø„¦—ö+˜Ä‘ z²ö­ ģb•Š8I‡PqȤ˜^ 𦗭Y5“±K‘Ć)Į}+Īį[Ok$r‰gTł¹ļZ©÷Ļ]ЌֶqŪ;oP„k\Yå“ $§­O“ŹĢš[“7©°ÅpWz“±j2Dm[~¢@8śQķ¹Øš€~Ļŗ>ä cš­8ęm‘88śT¹04XŹ9gR1Jå®ć_0y«•`÷¤4®yƈ|5%ć4ö”Շcė^i'ƒõ™®¦·Ō,ö¦>C×#śVžŠŽ4ō=Ą~¾šÕיså-«° 9޾›²Ö¬ ‰L %@ “½”2„b G^ŠēhHL\ćžq\­Żü6Žņ³‚¼žN*̚±Ž·¶š›ļ‚į$SW=ż+#[šŻ¼‘ ,7{t„$ī#žŃ4­6Īķˆ õÉé1ىD{JÖ²`\‚6PØĄ.J‡PŽ#JØŹĄy_Š-ŽāĘš,fFŚvąp=ėā Ū}y5«ŸµÄįp@ÆZӘŽ;Ćį½eāµ[“Χ Sļ`Wæé6Ÿiµ†yÕ\ķX¶3¢·±—0Ź'­oCÄWqŌzR2“Ō֎åĄX9Ęzõ¦}©Éu!±UČ/Xß,.ó…ģ}+‘ń¶™o2-åŗ#>ü–Rv<{Rß}–Ūą0 šņ;ū{›K–Aµ2r3Ž‘¼N3Åŗ%ž±„^1•;¾¾Õņwˆü®”%ģ)åó‡ĒŌŠnų«šõ-|.’ŻcÖm„)°yL°ī0kęMJŅ IT,LƐrøŪ\•NŲ¢ž—sķ½¶æ†EĖx÷ä©ÕŲĖÆ\Kp׌z¤w«Ź‘ņŖœw¹¦µ¹R>æųMāÅÖ­ķaŗ}µcĘįÉČ+īźŅZł$’‚ėéZÓ3”n}šäö±Ay§Č“¶A!›ßųoā ¶”2ĆwZIœŒņ>•ŁLä”OmNx"¼ŠH|£ÉÉč* ™mo”7Q¼R)äķZņ³3ēoŠWÉoi.PIFI$WȾńĪ®·Ka}öˆZMź •s÷N=„ł­“Ł\é密ąÆR8ĶgµĶµōęH™YøéŠÖ2…µ$ŠøŅ5T†=BL°÷ĮéO†ö9”į18ź}MMˆi•.&‚i!’)‡£ŖųwĻ0ŽÄn%`£3ß« ÆWR¹Y¢/ū˜ūĆėP\eÜ·āÆź³i‘j:&£ 1ÜZHhČī{÷ÆbųaāŻSL¶³ŽŽęYY#†ŅK6?:Ņ6±r•Ģ/üEƒÄĶwfn§µŌćmŁd#Ģe<&ø{m2oi­<‚+į!G«„WC FĒ'©ézG‡%{}Ed·žķGĪzdō²ÆtM ·¼µ·"J ŒrC×ńiXžcŃüsgspc–I&†9œ!É {Šö=N– «‚§kėUc*’č|ė¬ų‰¼1¬AēĮyå;¬ķÉļŸĀ™®]xWVÖōcYYտ̲<‘‘ōļSČ(Ęē©ųĆĆ~(¹“›C ±C Üs¹F żaų—A¶}Ī Įą ’­T‹žøó”u¹rš"˜ÄŒz¶=Et?būsÜ ™Hw|ŠGlPbåm °xgBŅ!‘¤[+x|¶2cƧæ5óƎaÓÄ}­„ŅŽŪ—M²ŹĀA, śÖnLŸh{’ˆ“ūOųŽėM³øiŅpÄ. v /~‚ø=ÅMhęę+‚²«ƒµø ÅLUĦĻ5ńĻ. Õķu[Q™å—iŠ7*˜īÄt⾆š&— x›M–™}—=Ā,ėĶ_.ƒ‚źy7Ä o7:b-횱ŽDnRzcŪ­pzw…u'PƒU›ķK§•#—8.zƒŪŠvHź„Õ¬z–ækjˆĘhĘHZ÷oųĒJ—I¹Óg–|Šg?)źŠ”YēŸ“‹;ęgµšŻć2c'rzą“ Ā^'ŅK¹±Ģ…Žāx=‡v"£œJmhĶķ'ĄzF…$Ėid-^%;«sÓłŅėzæ†ÆÄkØiz|‘ɱy8õ§\³‰šę©­ųcRVšä·Ł Å䌟jō¦Šļīķfń Y‘FöBBĒœUāz†ž.É¢ŪÉo5ŗł/Ā é»­l¾ń¬7–p+Lą·–~lūóEŗÕ™ć:Œ4ķÄzƄī,<›¤|ĒhLöĻō®WæmJ:S‰U ŽŌ(ŲŌ½ŌēžwūZČ&có?lč֏hÉ;–ņœīYš“J‹ZĻ-®gKW°Šłb]¤£ ļ¦¾yń^± ō{$ nīL‹ŠéüŖT•2Ֆ³©ŚŪEł[• öEyā÷‘˜ 1 gķ-Ū…ąšĪE„cŃÆ®āÓŅā<Ē™cŚ„O ś×™Žj·ŻŪłzŚGnD†%|=‹wõ€ihß5Żg\Ō£k8'‰H\"ķ|śŽÄō?A±£˜µGd™Qc†Y‡įZF65å>?»šŽ£gq2XÜ“Į¾]Å>ē½}æą?iļąkµ=/ģ×¶‘ˆŽHĪŸķó“TW²¢Dݹ -ĘÓ(>æŹ¾> ¾K{€&@ą+?\v¢,\Ē)į_jž$ń|‚'qoČ]ĒŌśW°ė’ µ†:ķ¼÷·rƁc‰Uæw‘éŮęīk\EaÆYµ¾Øģ÷€U=1ź x§ü)<&ēā# øć§­]Ź‹ÖĒØžĢz_…|Yiw§ųÆE²Ōmć˜DĀbKƃŒšO<3įŁų“ĆQI¤Z6].xh8ā¦shŃ-N§Ćšf‘w¢Ēp÷±E)ÄfG*ƒŽā¾rųŸį-7OÖī5 ŒMå A)(xķ^}jķhtR§­Ļ=ŠōKmKVŁ<3nfM„†'¶kģ é“}&{ 7ĪƵ[¶>r1’>µąc1wG©A3Ō¼C/„,R9¼6·¶­"ęX¦`JŸAŽÕĄé÷÷×÷ĒNµš¶]#Ļ'Ō łŗ÷lõi&wŗŸˆ<*<=a¢ėzœZµ«–Ž}€IĻC^ ā’RͬŚkι=x­©SfĒ•čVÓé„’Žņąé¾af…Ü‘ƒĪŅŖźwK¦©x† t½*ĆLÕf’Ī@Š †Š óĘ}kž¢.3gŖi¾°›ĮŅkŃŪOe0Œy' ģ:ēÖ¾Zńæo£uox²4±’]ÉčH’õSŽķRŗ4¾k:„·Ž“YōĀ×vŅ”Ü<¼ąƒĮżk쟌ž-ŗĀ²]Ļoiöя'z‚ĄcGqČ®ŲCŻG]Ņ?3'ń •޽w©Y¤Hķ#o0 gŸ—„YÕ¼euiLØ^×#j2ą^kЧHå”WCkBųa§Į4pZ[ÜÅ( ,R(!Ž:}9Æ.æÕācsuh¬r1; ØÆF#–QźV‘$¼…ž2ņ|įJ'$f½óįĮgĘ3¢iztS$D3ÜJ,½ĀÆØ«”¬%LżųGūųvÖõ[ū(g»rY÷grœśÓŲWÜ>żŸ¼6?ŃgŅlšÖUņŲȜ/Ņøg&ĖŁ“eū3|:šō’j:6‘ķĒŹąĆšÅ{ƒ¼o¦G$V–ėonŲ-•Ą?JØD‰Tģ{Bh‘-¢UÓ.zŠÓŅ4ż=cd¹‡2ēåqĮ­Œ}”-ģqŚ3"’XU]&(å’Hę*lóĒ”EĪMq\DƓŽ*ķž„oj—PČ$„˜ä}EQJ]rYeL[iėšÉ²Ž/·± ķŠōäĘjk·Ėka*¾aŽqU<'ā{Ić’ųŹĪ’ ė¶rŚI€Ve {’\W%H)' l̤Ļó¶ż®’fæžĢ’ž+üńc\4ö76”Ū ­Ż‹P >ƒń5ż“j¬z+Æ9¦¤„F<’µõėųœÕ<Ģˆå æ1nywŲS%B D¤Ņ6‚O@qų×öĒŖéķu§y9óf‹C"ńę!ä~•Ļˆ»I³x»²éZ}ü‘ß\Z#Ž'Čł}yŸŒ<+¢‹=KKŗ“K» ˜ß2żĘĒ~5ęM›Sā½gKÖ,ļį²ŽK›k‹'żŲ9å{s_”ßšQŁž/h-ćū @Å#ID·ļ@ł³čʈ Gó“wmm 9Ž3 Ėņ²²`šqŠĄņ .–äńü«Ó§-:،EDŲ&„†=é)p³m9ĒB+G=,qɄ³$l5ĘĶDÓ#Ⱦb0™¹łO¤‘ĢŪ€cš£Dc–鎵ˆAPŹ…śv¦,ĪI%בģ*Š‹6l§; ĢAb@©ļäž[v\żšćaŠņžā”‘ŻIŸÖŸüēö»¼ųŻšžk÷v/ńĀŸŁÉ!+%å°ī~028äWģ¤ś•–³mm©]Y‹|ķK„^6ž„šóqjīēl Iō;{k7ŽĶI¶`æ•_ÓaūmŒwHˆNÖRNqҾ~¼Nˆ3̾/ü>OxCYšōеͽ͓±”Łøø*xĒå_ĒÄOź?ž'ųÆĄwśv£§Ł-ōŸe2Ē„a’x?LĀø&“=:ŁŲ$é żzÕe‘§/ ÄArIČ銬š±Ųå”~ŅĀŁ•¼Ē:Œw®P¶µGda“±ł3Ōjõ°Ņ8Ŗ£ė€5¾²¹Ó“mF÷Ģ–Ō$' Éč}ėöĮ÷0źŗ=†«-™H H'#Ķz} «›ŚŻœ·°FÖ²‚fh§Xw/;œ ꤻšvŸpņŁĪ–óDąŒ€LM+ĮV>a“1Į9Ąķ޶„—, ‘ÅD£Ō©H[Ė-ز£l?ŊŠ=ėnJņGzȂōsŲÉhRź(„ÉĆ)kĒļāµŅ/]mb„’Bć®M)Xą¼YØjЬ3i–it7"ƒ‚W¾=źm(6 ³ĄčĢAŚć‘ķ@6}7įvK-ŅĘķɌ©gµ±¹i%XŌ’rėA'5%¢ ‰‘XŽœö«PŚ»:Å’½yķ@ :l€Č¹lz×3©@"•Œ`  čŠe‰ˆ+aÅgÉū‰@Źžųé@ ˜DQI,‡ŒŠÜņeDŚ6åž.:ŠX ƒķ(UŽSÉćļéķnķš?*Użļ÷ØFt0`Ć=ęŖ],2Ø*?Tw0*›Ų`|Ä-čMfÜjB"CŻ1źl"Ž•ŖŚZ\*Ė!@ĒÆ÷k„ŌµD—pK’äTOa¤yõŽ­yje|ŲČ sOŅŚćQ‚fTƶ+#d­”<lp\;Énb“ŒćÕø²‚Wd;t"ƒ9īi¬—>XdfÜVdäp¬„Ÿ½éWX‚{„mœĒ'Čć=+ĪõØV³žÖd[‡ĘpiūCh-œ—ĮƒHÖ&ņŚdW}Ā2~U=ėß|5ö\ʊŸŽŪŽŌQķ ć$t÷+kŖīó-ŃXŒ+sBF²ŹÄĮS”¹Č“:r\)Ł!ß½rڬd ­0…¹źzšµ!Įjy$²jZuŁ•/&Nq€xj‚Mrž9Ć䁸ē­Q©éŚ4ØB²H€·\ŽÕŅ}„„2ĘēxēéA2doy¹–ŽźeæŹŽ`Źž5óÅ?‡7Æ|/4d·šĪL\‚i©XQmž’‡‰­õVm>t‰,Ƨį_Tü7š{éģš›,Ń1P¬2pŽųü(•Bš=ŲN±F£Ģ$Īš;„.­“œĘR¾†-“®Ē@ź+2;«_“,rĖ“ē¦j ęu~u‹¢,r®ņ3ÉŖ—wH±åU׿­3#š“ZVcm(e›¶G¤±†żė}ģꐯ…×— ‰õ©/ģ$ ŠYā#=:UD »kPArē§Ņ½ōłVmž¹é[i¼Ēa4 õ©®n'– |ĀÆĒNŌXzņń¶įäw9ēŠĖŽčÄźP’¹Ī3YŹ6ƏU¶’G„+wĻz¢Ö©ø°MŖO©R±‡‰°Ē)œqZö›qµ'łVŠW…óÜ[ŗ“XņĒ_ZĄ¾šIpū›yāž€s³Kuo).Ä”üźFŌ’uXÜĀĶŪ5ƒ±¹bó¼E",$6ŅÉęĶ"C6żĆæ½8ĘĀ.NnģāBȝ«Č|g¤ų’壿ѯc¶u9t~ė‘Ņ­h3WG»w‚pGŸ€Ø5ßi’Éo(LĘyėI»Ż3ŪJ® A/ØŖåöN;ŌJK”Ÿ)j;ą£)žĄÕi„’7Yb' ēÆZĢ„BIńcˆėŠÄŗ±XĮ™cß­4®QN8tŁžŅŸ¾žę^'šźŚqnĪžIą×]0>ań¼wzv¢÷é{+[ŗķ1××5āZž¼×r…‘ä*§w®Ølwრ°ęĀJįZśĆŗ „–žZCöƒÜ?:™…ĻA·ˆXJ yj@ēé]3¤Ź¬#ŽćŠV2Ąļ“m}JŲ“*@ēŒVUŽ‘ö %Ä!%S• u¬łXĻEҵ*[²ˆV`6௹½JūOGd!¹aG#“>¦nŹŹ¹ZęŚīW'É'9ĒR&ĘÅ®”¹‰mā`ßĀpzōÆGšŽźVB)ēV;yūĄP_³=OOњęåÕNÉCcęsVŃ­>É%ä);w$pk9K±2Œ=JM8:Dq ąJčbWŽ@½k2 R‡r;v«kēZ®#O5xąņ Ø«‰!ŗBŪ …Žā=Ø{ōÅzCXigWŒŻ›?z›‹C1§Ń”„3yļ\…ę„"ߊø9ÅHņŚłDĀXĖdV„“QÄÄ2®Ž”€ÜHķß ¦@Ŗ—‘ŚI‘wž“ ;”ö‘+–>½k.’OĄšĪA#/ĶB—bM2Äźš\#‘F9V§ösčŠžä¼Ź=É R—s2ÓY]$ćl÷ļ]t¾°Ölä>—pžµ¼v3Jś³Źn¼9s§Ż#Ć; ”œčÕ¹m}«Gmå^Ÿ°ćīŠcpC#³”žĖ‡—•Ē&ŗk˜“ģ—pķd8÷ƒ2:Ó„»•J²¢õ98ȧŻčšĆ Éē,ƒŠŅ ō8{ėpŒī mē·ćž*Ņ“ŪĀŪ-ąóĮĪT`“T„cHĻ”ČčšŲ_”—<‚:׊ŗ3CslOP”MėX^>YĘ{ dń:³Ō©ī:dŅ0Ż”ēŁ£j4}y"¼÷Uųm¦^FŒšŖ7Ź w5¬`Z±¦ųĒH½ņ#»‘”Ų‡ }G’^ŗ>n”’7Ÿb ˆ8k¤Iiu)‘˜ĮžŻ«Š×¬āŒ¹%IsŠÉ±ĒMĮĻmo¼µ`eFQ½N÷5śą?ˆVZŻ„¼Ö÷!ovuݜQNM£čųĻR’G·k{k»lüīN jڟ^½Ó'{›RA<ŖƒŒ×e)ČōßxėS×-e³¾·‘QO–ĀOOQķ^Ó¤En°…¶¹pŖg…Ē ®ØĢĮĮœß‹“Ė+ŲeKĘ \Ē5ņÄ~ÓtķA•“ic÷WÅ)0Qīv‘ŚĮ, ½N8µlhj[ü‚ć[#žµ„÷ FĒÆŚKØÅbčTd^Ų®Jęo.`žHߌœ*8]CZ’ŚčąóX2;T·!DOµ]gÉ ō­`‡cĻ/üCm©NWO|ĘozÕŅō½GR¹#ęUŚN;U– {‡<1<@5ĘŁąm=zŽŃŅĘs,'ĪŲvłc”÷żiIŲµn‡j°-µįHÜ{p?–mcS[¶³ž%ķµĻQX§a“sńkŅ*’¦ĘŠźzĒēSOcyŁ›~ݵZŃhā/¬4ć|ŅZ(ŖŒƒŒćšĮÖ4‹‹ˆ0֎ŠŁĖŒSä#™ģmųB]+N–Ś-A…¤ŖŽwo>ł5čŽ%½Ó®-£@¶Ÿs9@üź%jyĪ—woĄņd)†čGZõˆg±ÉüJń†½āŸ28’³neržJ¾ |t>µ›ećX<5!¶æ%möēļą1ī*/”‘źŅĒÄ1ZM%ݵŚ>ÖV}뽓J“ĆÖD‰WA†…&e)=Œ};›‚š­“d.NŠ™Ķg|EÕ.4Ÿ" FYAģG*¹ĘGެ‡O=—Ä©wŲõ=%Æ­ĢLīŚanÄq^yäO©<–Rµ±ĻĶž~”Ī“LŠ›H…Æm8 ‰€hćqĮäżk]ŁR#,¶²±”Ę;1ō­8®ŠŪĪń1VCX £)DņŽk•Ļīg”[Ø(#Fݻޤv®wįw‚uh¼M=ϊmP 2yB@~ęsÓ±©h•LżųŁ”|.ÖžÜjŽ»‡BÕÕQl|Į¼gæ­~O™oV{³Ķ$š¤Ū ;¾ƒó§½“>Įųką’ kZ›]²µøBɉ "U÷¦+ɼ_|’ ¼Ws¤xnŚŲé÷aü•lE9Éż9¦W%“:æ‡śE÷ī¤5“¤~tŃīäg§Mrž9¶Öōd“IŌtłt²e8Rxtģćź+)=K§ 3‚Ҽ3=õ¼bßķ lŒ>cœ6:s^‰„čßŲ÷°C.„,ŸÕĘ'§_ŅŖ:īm~‡GāųįÕ,£±¶šhŌŃ O„jü.Š„ŠaæżzR„Łļ¾(Ņ“fÓ¤øŲ¶·±"åvćzć®+åßųVĘä™tˆē™Ģ~d­·[ŪAS®Gįm”eufŚ@äp+Žō}Cģ05å·Ś,¤B¬øä:zŲgź¶ZV‘uŖÜĮm‡!—¢ˆWgšśö /QvšHå]Ē  ™©ćo ųSĘSFK+ 5f—8 K·¦?בź°Óo#“P–].XIįSϵ#ŸŽĆīīĖP‹\$)q"–)&Ī ž•ļß ō_k@éēMmAš$_% ĄļĻjO`r=BÓM†+¦P³w½R„rIśWāO"(£’Ęå÷’Źń‘·o½`e6yŒ×.ÅĪÜu#ų¾µ†·—ß,Žt‘BĀ”ėõ«†äĒ}M+½B×]…ln/&…Ą#89®£ĀÆuae—ŚL†$1D¬wm^kKƒZhlišµ­ųŽišOŹ ¢Æ K]Zī8-[ĢÜ㯭bA£āßŪčėÖl³E †o™\uvę¼śŪBæ‰ē‘Ō2żŲ'„!Ř×Bś;‚¾^؈à ~G5ź¾ŗ0Z,s§ś3Ćœ“ÅčėćŅ“ķaķU”‡,:„`Åš„™L1źiok*¼’z@})«u5ä<ÓāWõ ]iņBęž×ķ ­s|°śgŪžkźļƒŚćZŁiŗ…üĄ°d ėÓ#ŠÓ‘ŹcÜ>.|DŠ­tu·†ķ®f9Ć+m č:WĢZwˆ¬^ŅW(ą°Źī9e5–„{–Å0hzü½¼’$±æ˜<)õ5ė¾$ų}ćū aŖÉ¾T;ćgaö¬ł>ĢäĖXŸlö2Ć$pÆĶ$gØ>µ« 6šå“¾ ¾D‘ø#nüU£®…iž¾½Ō4·k;‰šƁӌ­xŸā*x³DøšĘ³%³DŖX žø9÷¬źK¹½8;ŸŅ^KW±h\€č~HϹ<ÖN£r-umn%ÕFɍŁēƒ\±£ws§™"–æ’ ńµ¹YäøŲ>taŸ1}sź+ŲƬXĖ'œä‚šżEuBŒ„TÅXī­'Pѝ„ņk³Ņ|«ƒŖ-üč·!<‚p8§ēZó\ź4ymčKiźÆu5Ÿyst¦y¬“+Ė;•pØD=ųĻ3C'Z¾Õ.u=2ėS’oµŚ°x÷dƽļ[ńżæŽ|6“®ŚYßN±.}Ÿ¼ ž[ī=Ž[Ą“‰t]_šuŽ™§ßŲ}ČÄѶč†8Šūōƞµ]BćP¼šmx"¤’ŹŽWŠ{āŗéŅ‹ÜĪL»ąé’ ¼Wc®]źrŹÆ„ß–ņ¢ÉąĄė^ńńkćn‘ćktMŠŚöĘčæ|÷5éĒ ¹N:“>61¤DE°…Éł‡ ÄņsK}Ø^\mÜ}œ ­Õ4Žw"[!Ā# '‘œcč>ųAāæKŲ”²ā?2D,žŖ?:Ӛ±ś{šö-¶ŅµM#^ń5µ¦¢«–EŹÉŒpW&æE4Ÿ…^°× xoG†ĘČõ^^ćļéÖ°œÆ ć„xŪI•S”ĻōÆQŃ“ŪU„[ˆŃÓ®HĪ c©”äm]é3[˜į³8ÅD%ŽÓe»)ćµls7Øé57;bR}³ŠUĖmsģj<׍WÜfÅ.õXoQ^2‰)õ<Ę»ÕŽĮ”mr1ō«ŠīTaÜā“’j¶ž"G–u£:ćų•½½«Š ń ©,VīW+ʟš­K±›,ĪÅѦyÕ“åŽB N‡‚;V 5+Yåµø–Eł9ķÅy…äf“æj2ŪŪnĆ``}i Dö½[¶™ķgó‘ŗšk#ĂÓR…–hĆ`‚ §aø²/kŲó[G$²Ė™Ää_Bé³Y_q9hĻ#<øÄ†$ö»œo”¢“”Ó®4uRŹI„hb~V’ĮFg‹ųNļ[šū·ĮČźČŅ3’1Ļn¾õü½ė5öu5¦”°˜äxƒ•?9Ƶk…„fCĢO°Čැēå+üUöGģįć˜Ü?‡õu’IL¤lē†'צG!öRD‰Œo'ƒōÆ$ų¹ą”Ŗéi©Z}›ķ¶ČĘ"S 2R:Љ£¢œOs’‚PžŅ2ųāT’õżj5šö“Å-‚6Ó ”¹ėĒś×õkįŪ«»YšŚš ŪlgœĒé\µÖ£ŠōĻM&…Ŗ9ŠI>Ē61žŠkčū ”s3)!°Ač}k–ęLü>’‚ļžĘ‰ń‡ąĪ—ūU|?Ņ Ēď (‹RŽ<(ŗ²'ēŻėŒ‚=Śę ؗ¤qBß½ =O?®j02js¦ś;ÆFæĪęSGmž| "ž µJX×iFN’JŠÄˆĘ‰`BØįqüŖh]W%¾g8ĄÅ)4H»äffū śTĶåF7€X’: ŃXLĮ×䦝Ay$A*„©øęƒ¦›.}ŗóO’Ż&ak«@ésk>ģI‘¶šPś’+ūę’‚ZžŁZgķ‘ū'x3Å7{üu£/öfÆ 6d>Rī½Fq»ŸVØšŃ£¤ż–Ņõ‘ŌyŽ85…ā=+ķVÓłqƒ(”b¼Ŗ‘åˆ'·ÖĘįnŒåkę’‰>š’Ž-5Æ,Š%ģ%ķÖA“c;}‰ägæŒebœŗÉWķ}šŽ’įoÄ{‚śEͶs9·ūR9<~@×ČOÜĮ‰Ś§¦:×m9õQZH‘d,X2Ÿüv«I$J Ɨł°NqŽŗN ­G²ļ$*繨ФEävDlc'°­#ädC’7ö#ŠX#c++̦}Ųō½,1ÉTģüć(,ž¹™łyj§–_ʾūųkūCė~ū'öZG©iĢĆĢ‚FÜGR=śWÆLóź£> i¾4Ó,®¬ó ūHĘ3ŪėWš;ź{ŪłqȌ¤)āµ8¦ś5cį[ķ śg@]]Č*£gڽ×Ā~µÓ KØLhĶÉP1×­Rv9¤śg„ZĪUó¤‡N:|øXČ`sZ©\Ģ· Ė4ØĘ3ķY…®|õhŲž¤ņhøĶēĶ“36sUå‚Kr%qź*e.€O$ĀH<²ŪŌĪ¤±6ķŗ#LYÉ-£YŹ¹ŲŁĄÉėY Š“ūōD``›³ŠóŁ<1{¼C¹mluŅčś b†ā$ó‚{ztzŽ‘ØĆk,Vd¶”ĒCYžÕoćq¦ßĀė0]ĐpßOš§aģvi2‚²uę³Õ~É; J”óŖŒnJ9MGĒ7Z~ŖšeĪ‹t֒ „Ź ¢ū7qZsJ³22py«äExįe J‡­KœnYqœwœ–¢ęD7BĮ ˆ|ƒÓŅ®[Å:FRŲŻÅHÓ2®ZX㹃kv5vŚāAŹ7NGZ£Y,g™<ŲU‹Jš[uxČBŗöŌāģ4S×tŲµ S»łW ¼ŲÆÓüā-?X™ļµ —“ŒœŒūV×ģŚ$Ÿe™OœćoJ~«wuŚŹ®#œZ $ML:Ŗ°b:āÆIö[¤ĖM¬0r(lz_ „¼ĻuhåœćƒŅµķ!l=`ĘHå­Ł˜”~µnĪā)™NÓ·Ó4ˆ–„w×6Ń͵'cYęłŅxŠØh«zh…3”Žń­CؒŌVåā\ntn;cØ­ jbÜČ© üżkĻ|D^{9>ßāļ[ÓäOÜÜÉēĀÓJČבéö’=ŪGrYC8Šš+¦˜±e „Ž×:„r0n±škŗŅ¼wk§Hք³LÕ‰ÄŽoŒ²éś¤6·:MŻŌ‚d!9ś×Ӟ×4Ķf. tēiĒ„'§ŃžÕ4KNeœD@łG­y÷޵»ArĶm4.€tĪ+>FQēš‘ĀŃ0ĪqČĻzą5Imv¶÷į³žŪjZ4PīušŠPO1еՙ’ŌĘkS6IęČTsŽ)… +a—v8öØ'”Ć“\{ ü‰ü¹qĮ rkRĻRk€„„żh¦nüĢ0ķOū4 Œ·ĶŽy¬§¹I¶”ˆdeÜĮIZÉŗµ7ņ”Lźn\J’Ąko u¼§ū§”®ƒĆøšŁDK—`9ŽH4]līI?6zŽõgR"ī5R 0ļHĪlʃOx€p[žÕ£°¶B©üŗS±a_×8¦åÕĮ-°÷­¢¬!̌ö÷¢IļmdB Ā1ļÅ05£Ö^$Q’ŽGn•.Ŗ³ #ŗń‘@/±Ł·oōÅMŗG¹Ļ½CŠŲW&Ex¦ ŽøŖŗ„Ķו&CnĒ 5*ĮŽäĪűÜÕČVøl“øT”¤ĶxīŻÕŠļ\ö«÷W¶÷b6†'N0ł9É MÜ ŗt…ŒĘŒzńĶA6›~­•’HŌpõ­Ņ°āģIµ*“£Š_“@ĄĄ±ÄĪ8Ę)ŽR9‹į=”,1żń/sSŪk„[“R£ų±ŒÖ|„öž*µĄÜ.r5bēTóa¬ÅńŅ©RīCc“—VۘeA8čEyuķ„Ⱦ–_"O+;=©:eÆ2ü¾$ŠōĖš¤Ą7ŖēŸē]Ÿ…®bø <߅K…о‡¢Ēµd½ŖYH<цĶ(īIĮųĪćQ°ÓfšŽĶnāB[å61ś×Č>$½“ńµĪRhp `CÓ„nm ƒĮ÷—p¢Ś™å‘BüżkźGwļrʼdw؛Ьtšö—„ąņ߯=ėĘ|C£Ż8w.ˆ£ŽqXIhG6§”]Ū"³[–)&søt5˜ÖŠČ$·»…¦V®gSꉞŸEvš(#ŲÄRy’śėēÆč_ščYyPĶ0¢?8Į\gęÄ Ķįļ\Åql ņ2žŽõ…¤\¬®č“„!¶ŗ“Č­]1ņ³¾¼šĘ£ ²ė6·6ŗ†›„Ę~d>ėןi{-ĢķcqŚFAn+žq±ŖFÄ:i“ø†q#8Wó0Nq[ÖĪ Ģ‘šņ;W4Ł¢ŚĘ…ݬmłc%Fqеs3$Wv’1p“)*Pø})ĀdŲę®­?Ņįąņ'Šń޾°ųIćŸ?O‡OJÜłJy9Ü}+Цō1›>„‚q6Łd<ć?JŲ-ęĘ®K:©EtÉ+)#_H»†ŚIš6NnóZēR…NČćÜ»°Ē¦­b×Cu>…+ČV Æo$}s‚rMxgĘÆ\ų—N{‰m›$>HtL1c9õ÷¬6h¼Ī­gAæÓędTø(ƒoĢ1ŒwÆ;×¢õ€%O|7„©ŽĢõM+WI6W°,AĄ]ē#ØÆµ¾^闗±ŁŹöĖpUbW•\ńžųėY(ŲJ,ū|čz†^+yH#+‚ģsųWcĆ­[FŖ&PTäwį#Hǹ§¦^ŻhŅ2#&ģńļ^“”x¾V“ŹhŁX0¾¦»!!8Ųī×FŗńkHɐ>bxŸqš¹˜­š…q»qąfµ1r±ĘźŌtöŲ#_1N¬–_±H»Īf„Ą‡«±„gćÓ#•¦ex‰ĒĢkRĻÄ:Õ܋Å¢Jy5G!|Ī{Е(‰CrŸZē᳂ņ7†ģ™»OqR)Ššm……ć 4ū+0Į)Šs^ńįM»Ū„LY²¼µiŁ.GŠV–ö—īµēŌÓŅÕ$ ŠČH ŒUXJMyā µ•“×q“äß"¼|y·ž„Œcµ.D\„”Ļj mp’Ē#lc-XuśA9¶ŗf =>µIšSÉk»*g°<š°—Q]”EĒ•ĄĶ8ĆbČRGŲĄšHČÅaÜĮęžąN©Ih"›i‹)I™ŪÆ#­fOŖ"1IWz+x³{J»ŗ˜ŠJG8­uW:ݬč±Ū€’¦Œq@¤“2[PUgÜöŖßk’īPøsLPbwŚW‡¢dÜŹvŸļtÅyēŽt‹[KyϘæ/*1ļMĘĻÆ¾,^x;Żh†ń¤“Ė źY6śžUč~ń·ÆK,m¶·*Ŗąć†$ö­”lkģOE†Õšs+H<¦<-tH‘mŪ ”#ŒzSlĘP±žÓ¼2•g%O<ö­T ,–Aå“ņóK™™Z…¬L®]¶>03\=Ō/ u`³ĄĒœō_­bŲÆo"toč ąmC“`ĄĄÅŒąö¤;<āÆéĻeoøåõȌc5.(Ö õ9?Xéz…ƒŁĆ˲N%g#tÅ|˜¶Ž&µ×"ŠAi6š€īÉ;³ŸŹ³q:b“=ŪFœMm"?øé]U“vV‰†sĶM‚P;HäHķ¼ĮµŒr1Y’ŚĢķÉaÉ|żŃėA‹V&’āŚė2Įė\ōŗ¤RÆ +ĮļLq&”¹bŠLŖy錓ü«tŲbs·ažōÕĶĄ‚lI”„6bµVóż#Šs»®į[Š[ļóYc ŽjüvÖĶHI2ąē<ńQ5ŌåØ6Ö×Ńjzc@HeTżĄ* /SŒõõ®14ų!¹[˜#…1ÉĪ6·łĻė_C)Xāņ=ģ·mjšÕÅŹŽE™KtķŽy5FÓƖšåŁŌQž ؎ĆcÆ ļłVHØČæyØ%¾ķ6iŠ]ķ;I8÷¬Ļ,śg‰ęŌŅ;g8 $”žSģ§Z jTų§ą÷…ü{įd¾šł’Š„–;ˆ†×^2U³÷†{{×ÅŗēĆ?\Ż^iYÄeHiełrŻ žzÕF]Ģc=lĶ}Ā÷ŽšóOqwjšmPb98śWB¾0ŌuŲ£ņµ)ēbk±ÜXŲ5¢gT$ž¦dŽ"Ōō[Čę!Ģäg “×µnŽxžż>$ÜČäļusł¦LŚ3bÖVžĪāŁ¤‡Ė²ļQ’qĄĶy߇µ]nm]ÅʔֈŒClēŠÆØØš2=+^ńŲĆ ä±+‰\Įīj}+CŅu{xī Ō"·øpwB£Ø=óY– z׆|/t»-·A-² ēļ(ļ]ž££hzE©xaŁ311nYqÓšę“Œū‡³9ļ|:ѵßÜF/§³[ˆĢP•ˆ0IĘļLę¼ĒÅ-ā߄ž>“Ć>)°-eu·':‘×pĄĄÅUѤ ŗžcš×ÄZ߉-/åÕ-„Ó®  ĄĶ¹ķߏ„r_¼<q„ŽŚ}Š>iŹ~č|­ļź9©ē5ęIjhųńģÆcø•ŒörüŽ ŹĒǧ­Xųõu Ē„iŗÅޤ6ŠBcK•‹ē’;{Ņs9ŖI_C˼'ŖX†±Ö“Ū‰’ģ"ļŲJ+Øąq[Ÿµ cÄ:=¤°ySIŠŪĶ"2 zŌyCĶ>ėŗ•Ž™uč±yœäFzq^Ćā)žĶ¬ÜĶ•ŌŻF³^łĮø8Ąēź>Ó!æ¹·ˆlˆ“yĻ«ƽŠĶn¼1 M-ŪĖ7˜ŖOĄqJF*:žā/j•å«0Čw³Ž9ōĀ5“v“Ē+;ål†#‘éX³Hǹė±hÕ“Ż6ź_³Ķs d8?ķW¦ü6ųg—Iaä;ĢįJ³g8ą})]ďG‘ ŽAp €‡ī±Æˆ4§ŗ±¼øYāKhIe*Ą7–;ćn“Ó°ī{ŚZX4‘Č"ˆ€ŪĄĮ?JłŚŻ[ėśō“}§Of(0Äąōä~5¬er¢wvVv·Ē©F® qėƒ^Æš‡Äז7ļq„ßGÖ•Ī $ćo’®ØMæ|G¬A⓿s5“‘¶BŲRż ?©ŖRYĒāYŚ#£²–lu$ūÖ.6ŲĪHį/<1©é³5Įv¹9_˜s’ė®.ņ ė9Ś «+Ø H…wös׊’\nÖ(ćŲė#ŌŽµŃibÖłvp‡ƒ‘ŠS%¢ Vö/“Ha*ńłFćT4żNößPY-nd‚Ee“åķƒZĘĘ©#Ū“Ż_Pń%Ńy&Y÷ņ®8\÷>•„¬5–ˆQ D«“…ėÅg-ĒŹŽ:ļIH Čķ$/ „eĖ«ź"Āŗ+DźN1yĒźjFuŗN·:G©O ÄįŹœ Ų¾Ōõ„O¶bI‘Ź <ŠSL®ftW¾&³µŅcŸQŅfÕ"9ˆ.K·¦+Õ4Ÿx\ŠmG·m?T–ŅZ*`EŽ=sUĢĮ^LJx»ĄŽ!Ōuė`š‚^éˆ|ÕMŁ*zćš£ž]ZŹĀKŹrÆ&PįĒŹĻz^Š|ģ“[š%ÖÆc„^čF]r(Éø…É)/׎¶ō"[iŽ„$Pŗ``g–ō73ō6lõq¦Ć<‹ø·}Į¶’õ®&óZ†īŽXmåx˜?1źi9S…Ļ#ŗ›\óĆ]ź77V‘”UCŲ“×Š¹¦­Ķłˆ#. ‰€ÉÕƈŖ’=:TƱÜYü?×um¦[Amœąå¾•ŅO Ē£ĢėtQ'īē¹ÕóXŠ÷gb§c¾»ų—įĻxXųcQKxüM )Iā8m£·גėŚÜŃibó]¶y‘·+īk“•³m?Õai•|Ą—ļ œÖž™£Ø&ŸØŗ‡vīā“„™ļzo‹-ü ŚFÆ›ˆ•NŁ­%Lķ£<õ/ˆ šĖĘ^³×ō%|3¬. ż–@»×øu†ŗU`ä|»ā;«'ŠuŅäSs }×_¾Łć…&ƒńY³“¶Ó’ź}*ąØīŽ {óKŁ3jr:č£Ö—³gZ<÷ŗńjiooGhƒ$y\<œ{ׄėóé:œHĖHæ4?P=¤UŽŗĖÅ?"ń:¼sŁCt %‰Ā¶:äuēō®']Ö“C5՜v‘^iįŽÉq‚Żz~•ŁF“8źÉ#ņ–‘Ģę5>AfeņUI®£C·†ŚÖH˜|‡ī`pµčĮ“pNCÆ.ęŗ1Ū‹0č‡!‚å¹ā“tŸ‡Z毪@l-Їu3³)$ 좪RGÕæ’e»ļGsŖ\ßM§³+E@”p}s_Ŗ~ż˜G…“Ķ'QÓÄ3«¢ÉŒ#\ć‘ėÖ±u >Ōš†Ž›kkqjX.Ņ ‚ūW°A¤ii›ƒ¤½r=i§©œ„Šó/ˆ¾)_X°šÅÉÓŠüń)ń‰ł6ĻdšĄ÷ģkhÅņGŠ÷Öm>”.ķ'„A•Ļ9óNÆ}āü_ y{¬™ćŽ7?”4J=‰åg°lŅ®­Žų¼»…Q½MyżėOmy=¤Ļʞ@ŲHłĮĻ’Ŗ³.1čw~š§Ū!3IåIģOjMc@šÕ¾Ļp„.p }©yœ½ē…õ k_¶%»Ė|¬ö®fнµČ“kuĆ ;›KēVR¬H#ó­“{”y¤n9ć½Dö§e$*’A0Y—’ y¦·¦ZK4Į!I:u¬ł™¬AśNƒd Cew±”s8š©õki¬ >f׉ŽAq“)ģr$ÜŖ•f^NV½ĮšÕŌ¶ÖŠN¾\±ü¹!«xK”ƒ]]{˜¢µY¦q÷ļL·ńpd}>9¹/PĄ“œžŒdŌ“+üä¾µŸLw‰L“GÉĻLż*χuĖŻP·½²`Ž’†d<ī^ÕķӝћGéļ€ü@ž#Ņ-5$øŒ¹A»iäwÆA6Ö× $7l©n˱ŽÜć>ÕR£óļ↔Ÿ ž Yų—IkŪ}BŽä]é÷£Ė&E`H#Üz×ö#ū ~Šz7ķš@ńtr?‰ģ‘"Ō#‡˜”W#š¬$½Óŗ2Šū9µQyn#“vIPõ#ļW¶ü;ń×öŸdŌ(īā!ÖĪįŽµÅ4L¬z½Ī‰”xĆCń¼Mm÷‡u›I,naeX2‘ĻęGć_ēĻū}~Čzļģ£ń’Ēßu(ü‹ź:Ė.Å«ČHUn„€qjŹ2娟}?Uś™It?:µH^ā ‘0Ąž>µ…€C®9éœwÆF28+Dj¬¤•`xéĻZĻ™pą‘ņƒÓŅŗ"īscØ0@ĻzdšłL†O½Ć…0,Įå5²ˆä;·Ğ*#ōeߊ²Œ8Š€J’*ģt.Jš>˜ ź§"ÜrĀZ&tŹpyzż3’‚J~ך—ģ›ūYišk×>x«^¢¤ķ†ŽF?$›zIŚO”5/s®2?¼{µ“ÕōųVŃĢ֏ÜZČļ!ł~“†ęŻV@<ä[=MyÕ”fYį_t?.śEuT²ø)ĻFÅ|O®x>ź;™ÅóØ[ČŅDČÅw©U³Ž*«æwī1Ō×b8*@"ÓĢ$ķvĘ(HĄtߌgŽ·¹„o)LŠ„ü¼c֖8P$ ²P9>¢˜‚#–œ.zę“ÄÆ ītAX掌'=*{rŽBSi<śżh:)–Æ,"¼°šŽl:}ą¬qó ž™’ą‰?µgü'>ńģ›ćZüI„Ō|;9|‡?ź—?Ż9飏„Dćx“tĮō?”Ķ?^½Ö4tó-ć‹R“Q ¼a˜GįŠę,|A.™ÆĒ„źN±ŚŽÜ1‡‘ž}ėēq4Ń×Mž‘å—VĖ|Ʊī+̾%x.ÓÅÕōYāK‹ øJĖØ$ń^<ćcŃ”3łżØž Ļū=|XÕōՊ!į[ūœŲ<Ē!9ŲGć^Mf°ßoiĘĘ’ėÖ-{ǧ «‘~å NŹńc'šäµ«„ÖMÄ[†ÜŽ”Č-Ōp`ˆ˜×8ʵ-ķŽėĶgĀր(xŽ ébéÓ äNDdż’Ę“mnc¼Ņķ—Qµe™GĶ܊ŠYmT/“»ctČéZqĄŒ«1+¼P?ŚRFŹ7øĘq[FĪČö%ĪL}i‘6VžŅņE"tćń¬-gYŠć(?{ Ļ8¦®ŪSĀä]]7Ś e+Ń[œŠß™cWU€ö=ŖģĘęR»Rą°8ĶkZj[Ŗyn“.ÅD·3nå}KQóäVŽ÷8ĶS‚ń£Ć$€sŲõ©4ƒŠ’īėķh„Õśj–;iF AFīu=ž±)Żk›ńƉ`µ†I7Ę·r£Óź+XÅG‡ųC[×5~ä^Ŗ¬ ąFT’Ēƾ†Aä[ č<Ģtv3kR¢¢É… OJ‚į„Ó]B¹ž*Ę[UKˆīY¼É>|÷=k*x.„ąĘћ|ņ1Éś“^cbŽ)ŒJøŻPŻ\\[©‡;H ĪL­mw Ąyó÷…t1N"%\ {š +O¬^,ܶõ\ć=«†ēķwIĢ»Ił³Ž‚Ō¬zo†“=üø®#Š“Žµ[SÓ-ģ.Y"E1äöāó”ķ`€¹ l#”­ -e!Ē#ÅĪŹń‰ģ×ȟnīĢZóŸė“ZŻ­³‰d…˜ć…÷¤j™FŠĘü%Œ–ć$ō5VęŹāĪųÅn]ß. 0;+;Ď! ”ĒSM¼‘ ĄåeĪUŠuJķ§>B×¼MwØA…6ē%ŗ“Sé>(Ńā·—Öhf$1“ķ]QˆŸŚś[œ ˆō1p+ĘõƦėik3‡só‘€¹­19#¹Ž÷ūR‘~i#Ö¾†ų[āTŅÖ(5‘1„„ģÅĪP×^ųĆą»/ZĶ}ŽG ±žö}kį‹» ō‹óĘ!nIZ ‘^…ō2•5©öĒ„ļ4KK“Ėtüb2øŻ‘Ķ[ŸÜGj‡b·8Ē +¹=)R±elY„Æņ/##©„»[øBžä2±Ē„ ”“¼¼*„luķĻ5mä Ģ-/UT²dt¬œŁ×MŸüLšüö:Œ·©eŪČäWéōÆ(³š¦‹|“ܳGky|‰³ļz×=J–;”±nōh‰cTdŒc‘Š£¦ė÷:.¢·Zo›„Ž'ÉęÄH÷ėsOfŠĻ‡æˆü7¦Ł^Éo=ÜQłe˜|ĶZś7Į„.ŠŹĶęĀxeER’2”ļrxKI֑Z=čVP[•>“§ĆŅi·k'÷ĮäŠŅ'%NǵxBęÖk&˜#Øq÷3Äŗ¬z\pĘAČTu®ČlrKsˆ]@ŻļMŪóŌW3ā –&Ń銠ŽēˆźqA§l“Yš`Ģx~xĶ;Dšż¼76÷v0‹yU÷~ģcvAąžf³”ŗž"i£żńłŗuéQ[[ łUFķŽ•™=Ašrź~[ŻAŗ"Ū‰aÓė:†llTHĢ|ÓĄP0½t##«…b… Q€ óėUMą€,{w§`#æug$BMŌ«s_-ų«H×ü9 –0—öN łóžž”XӕžrŚĄ—l2BńÉŌēµd\ZÕq‹7¦›¼Kį­Nį’wg·\©.yAYžš¦£`óO·ßæpY SO¹”ļŗKĻ,PG:¤’Œ°ō­­³«£Ź=ņ:ÖfÜēī/‘$e•ɏ8ĶiXÜ"ŠI*籤f ‚’Tö•néėX7aŌUq+©Sœ)ļļAI®§ó;żÕvŸŗŻź„łMÉē":św¤īiČhI¬æc.ĮĒZĶ‹Q„\¦|Äł°ŖTµ°Ō ÆÖķš&q$Ÿé\V„ Äd…Į8ā¦Lй„Yy "Æ\zÕ2M •1’ õõØ­µ»‚kHŅāĖ·€Oz‹~Ÿ:ČvˆŸO(0“ŌÉøÅ®ÓĢ„åO„g)·™Ä“ć‡ĶA%ū…Ņ`-8»€vķFł€õ5Œ×ń“„[N“ÄW?+d­Šzj_‹O–å ¬3ÉĶKęĖd oę¶ƒ&Uyo>ŁŠB>ļ­^‚(į˜\,;S7@jš0s?•_xŠ÷N½»“‚ $‰£Śž«ėĶK®jI³d^d(,H1÷Æ <ż78‹]sÅ o „ö ÷¶ė”F6{•ō·„'°¼Ń"cuLœåxźqŪü*&}Œż/ūFžy£ÜLÆ?(«ŗV½k¤_[Z]€ mؤpՙ™ō_‡ü_.’—„s·µZ²6ĘAżkµš–ÆįļˆZåÉŌ/RmXČDŠķĄ\ś¾] ]3µ×>X6‰©éim+Ļؑ›żXĒQļ_Ūųz×ĆzŪčØł#”œ·ÄjvŹŚų³ĖÓ „¼¶qør”yĪI÷Ŗ0ŪC<šĮmk°·֑•Ęęj’Ā9°É%¢»\ē;HĄ>ĀÆčžŌą¼:ƒ<Ą@XādSܱéD¶-u1üKįi¼U„]i·‰5¢1 4d+\ūāø}&š–„ifĮ¦‹"ÉÉ8½g”ŗ•®| x<@öÖšĻČŒć·å^oām^÷DÖēµ×"‘-ŻŽ‘"CŒT käĪKAų¤m>ŃtłtĖėmCLEĒ—“$~͟é\?Ä_Ųė: ŬšužČrŽ`\ŗąt™““>xŅ5„‚Ńˆ¹uUÉ—ēøÆJ{ėmoĀ·:dꎟÓk¾Ąqī§µ<*_ ?†m&I»øø…G˜>lzUōń…Ģŗdz}ü äNĀ=й`ųćœt­TS4Ž÷5<ᘣ³½‡[¤É#m…Ó,AĪßé^«įˆśu•šš—‹¬–÷ĆrŠĄń6~^:õ5fź$ž#Ó^ĆM½¼šõ䁷|ü£=ÅxŠźWŗŒ×¶š–/°¹ qŪŚ‚Y‘Rir”µ ܅QŠ×©ųsXÖßÉŗ‚ä “2šFzóųŠMśų‹MŸP1ø˜¤ćåŽwsŸĪ²u_kÖ6ÖĖdĻj§ƒĪ Œņ:ę‚ālųŸÅ¶ŗĻ†“ļ°ĀÖzĄ;¤gēv:.+7ĀŽ"›Ou»ø‰mī[ū§;®h°„{ÅSųoÅzݜ·(D)Čē8#;±ĄÆŽõ?k¾ĀĒ»pÉpņoŠž£cøŠ5w³‹ĶY›o‘Ó޽7Ćŗšļšé’9‹œüƅ÷ æRć|JŽŽK˜-e….cluś­iß|Cń‰­%·‰.bÜ©å6Lć±>ęƒ^Dy«xŽH5mføš;ńĘĢtōŖķā]WN³ė0É©ŲÅ!!€Éˆœćü(&Qģz߅¼o”X.cø¶ø²ß‡Œ>×Qžs_Dų'āw†ą–ŚFxĀął÷[š©äF<†ļŠüuyksiqŗ6T0Ć+Pkę{k“ė5Ą_)Ī6”įyėS(ƒÓSŚn¼;dt_ģ¹åjttŒnė×óWŠ<–×’±± Ęū҃™GMUŃl£†s«mokz®!‰•I3Sļ_d|QųI§ų§ĄšOˆJX‹ÕE*ŸŸ`9ĒNõ;4ēŗŽKFø‰Mź'‘ųWƽ]:YĒŚŲ3żÜõżEI”¢QÖ4-FŃu'I„ėÜŖ§ļ‘čj ī ˜®#Ū ¹P pAϵ‰Q‰·„kz·…5GÕ,¢†ņŻĄYāf?0õLʽÅW—:®…$ŠĒ"^0Ü9LS’Šr}&ƒiŖ^X‹kˆŪz€Nģ€+f}˲w—R0Hž•Ļ)X„~„ķ6Ńb1Į&' ĄÆS> žīŹ(šÜB¬½Cgpõ¤¦Ró8-zŪP„ 1į,؋Ī3_G|:ų4²ų>OéÖņź8bÖü™$Ąč¾½zU¦mecÉu½zßIr—Į`æ^DDņOqX2üE¼E¾ÓĄ…ķ„9ÉžŌb‡r#‹šßÄ[‹M@Ūjcrą+©ĀČ?žx®ŪVÕžŲź^CĘķŲėI®”ģĪPÖ³×ģI;yræŠsœW&śƒŖČögŻ28Ķq՝‘½*f֍”ßkR žEn2xĻҽphZFggmak*J <ĪA>Õóų¼Mō=z0ŅĘ֟ćĖ[(“HÖŅŪqDŁ,§±Ļ¦k;TŠe¼EŌäfš”•#‘Ö¼¾c©ĄĢŃ~ kZj޶2]A–m½\ąu5āײŽiÓ¦›vD×ć>lH„ŽøéŪµtEv2œlAs|ŽńŪŹ‘Ü9åÓńØī®®lį dęÕ÷ žŪsĻé]TĢ%$O’ eÕōF $hŃqŒulV„ž±›]ŪCs=’gzØūŽÕ£©Ų““Š=õ4ŁnŅwˆ€Ņ‘ņ•ē‘ļW¼Oį­Īć~…<—ÖeDŠŅ&O÷OÓÖ³ö…)Xóˆä–-b8%ÖHĪ’`:r+ŗŃµgšW‰!ńę‘ Ż») ²Ē€Ąåßš­iĘūš{Roxļ@ŌēKļŪµ·–CĖd«÷ÅaųÆÄzGŠ"±Õ#ÓÄņ(Y$UŁē(żśÖ±„beYõ2#Ó4^ĀéēŸČ¼TʇåHö÷®:ņĪ[e޲\BĒkdō­éé”ĒR”œö—BVH ²1Ą»‡5x¾Å¼Ķ#cčģ{]q±„eŌū+ąģ­ā?_YOs –“NŹåS‡}±„žĪ¾&šv£•ˆ·¶,?{"Ę7£ĄÉؙŖš>Āų}šŃ#ŒZÉm:\ÄĄ1:f¾ ŃōŪØ ’ČŪ+E“&qY8ŹGE„Z?u³3)'!Mvé„Ļqh±·9ä ØĘŪåŠąüoš²ĻÅZsYźøķČąqQx7Ą‹į :;-1cŠŌŖØ0Ø\čöĶO½ŠÅI7@sĘy‘Æhöčé2*Œ‚:Š.K™ČÜŗ[*½³'S‚=P¶h5 µūDg9Ī1ŌśR9ōO„`²‚Żb’1ppEu^"Ņü?}¤»1CqĪsMEO”äƒÄ?f°k$[;«xŲ¶É8= x¾§©Ų‰DH„\'qMĘʆ†Ÿu2;€Ö“d×#&e€„”ŗ{Ō°3EĢģęXÜ õ˜—ˆÄ¬«‡ĒzĪčø-N[S’ 9šņkgföś{Õ»ėēŌķ-ī…Ų’ÜĻ·„8É‘}‚F¶IāmźFxę“ģ.īlĖ9ZŅ ĪQźdė_ļ“g5Ümu„4»gł¾h‡ÆŅ»9µ8µX4}gĆz‚ Ü÷Ųž†·3q=›I™ļķcšeY.Jaņ8?JłSö˜ų ąßxVņ[ė5[ĆæńƒŲį”ćŽ±Ø‘2v?š_µ_źWvv¶ś„šb©ÄÄŪ‚xü±_,Kl#Ųė!Įōā»°s¼lĢܙīæž$j~ń*鷭֍$k†Eā3żą}Å~‡ŪȓŪŪŽłŃÉo"‡B­‘Ļo­wJ7!žCńćĮŃx«ĮāļLåÖķŲDļH ž&½7ž 5ūX·ĄĻ–Ÿ üswökģöóÜ4Ÿź$8 öĮⳌu±µ6Ļė‚H,-„wz=ą¼°…‰²‘‘œVļ…õ‘§jĖ,¬V78r:bøf™¢>¤Ó'K‹xŽ9 ©Į5ł’®żāż£’g›>·/ń+Įē‘#sŽ[ć•ĄėĄŻų5fT•įļ]ÓŽQöĒXŻĮ*ĄŗGO¾khT䔳”|Ł=ė®8*®…7+#’ÕM¢iT;©ėž½«x»DļuHćŹØ9ߏŠÕ”o9V#kbT‘]!WĘŠsøµ4Jļrā@¢ū»O$ūŠY"Č­# $ŸZ#R­&ņĪqA¤BO4šJ‡^„ Ņ~m„WOĘŽl|šr¹ü@ę“;©ŸÜ7ü«öÓ_Ś×ölÓüāMNßž‚—ū;Q¶.7Ü@EõT~ ś×ėTžUŅČ®|™p =rb"lax»CMKO–!µ„B$½Å|¹ć½ ēÓś+E—R·ąķ8.¾†¼ł”Ÿ+xƒC²Ō¬5mSæ²o¢1ø*cö?Æå»öŌų!Øx3āš¾ŸmVrLėsIģ¬}q[SacąłcÕÖ6RźNøėYĢZ2»FŽŲė]°g-H ‰Ü’yo\Ō‘Č\Éŗ0Œ§Œsšé0±[ŹóŻiĪ1L]źķfü(2p±V†4E„§ańĢ ŪŽNMY·‰ .»ŃTąÆ"ƒ¦™³§°ÜT“×ō5ź ¾(x‹ąOÅü]š}ŻÅ®­£^Å9XßbĶįę!#®Fxµ"stņ#Dą4@ę«Åæc*Ÿz­œūŒņ›ųF9ŖRŽŽX_›{«Wxr3Ž€>¦śd3ŽĆ ŗF l$ż*֋ć=]ӒKW&$ƒŒ2ć֚C4œG"d­ŠūÖG*ČŠ‰0Ÿ„!6"Įg*ĄžõÕF«@D’/ւe•×–w‹Ī¶>g÷€ėŠóõĄ·­otV א®q»š¦˜Ņ±±¬Ÿh3¼jGr¼cš®–+˜nÜIhžt'U­“%ĄŻ’0-Ś%qµ½z×6"¹µ•ń™?•g2YݲjČ ¼%L‚7ŗGz†X”Ӂ ?7F=* RŠlm#…*:äb»›}’YČĖęĒ½*Ä÷œ*œż9Æų™§kó\Ū9fPąKƒČBzÕ)XÆĮ:t¶P„–,yĪŽV½BHg £2Õ9ŠĘtņ6j•P}+.{én#0ķ2ć;r9ĶAŸ[“Ć4‘Ō+VžŸx0ł‡ėH–j‰³‚2£¶+:õ¼Ó“7ļcށ*ĘƁ×ņ­?“C冎OŸęŲ©ö¶‘ ·ß§GdģåcŽąēń@ŌN’ĘåųŒ½pjąÖ|ÜCx aКfŠ= ŽB2ŒpyŖ”V“œnŽē#ҁrJu‘cŌįŚ„ćp^†ØxƒĆöœI‰ŒSØĢl§ƒõ “ŽbĒĀ:…—"\Āē$¶ £QµŌ­dG‘% ¾)“ŗ±c+JŠ“ą·MÕvi 0@…”t5 Ėbåb·ó+`ō5uÓķ]ŃcÜw«ē&,’Ę2ØTŽ­(Ųķøl>õ-”dŽÜ“l9Ś:ĢŌOš«"ƚ=ö£cę5½Óˆ2q†8§iś5•·™2:M¼ē Š;ŚyÓ‡•Öi°Ž[) ćķź(-“ē”sź*Ķʖįɐǯ½c…p’! *‰ō4Õ-Į¤‰Ō œ5kävņŪŚ¬ ³‘ĮÉÉ5ųU%Ūęа8ĶbY Ę ć¶@®~K%’as#aśdW8ģt²0=›±ÆBŅŽAŹ†ķž“é滐`#従ɮ䉉<7p+hlO)cL»ž_ʹYPŸŗĒ8śUŻAdȗiۊ”J':·n$1”'”źkU/']®éĒ`Ee'ŠPDÓj£błC üJEa>¢¢p®'Ö¤ŠŁžÖŽöŲĮ õ¬’,Ś€ŒĄŒżź@cÜY;7Śc}¤ēčń jÖ·¹ŚšŃSøŠdžÜ§£ ƇPŌ² aüŖ¹EāÜbߏ«Ü± øjȈ””ŗFRŒY¬ĶĖo.\f,ćŠrE«{;{ZÜ©l’W?ŅŖż’!;Ęnš3Ų1ąV“Š\dĻ½`R“¶8 Īk¾%xnYbš9!0LŹO±>•×MŒł#QŠåӋÅwƞ:bø«ĖuiBÆŽ=ė² „±™47VūDo" ćƒ\ž”–č4ńüŁWT60;ĶRŗ“‚Q4ćm ā­jž'ŗ·ø„ŪFāAéT ƒÅšŹió‘ĖgŅų~Kęf@²²sXČØŹĒL°;6ŽG“uŖ^Eu·ŚbrW½sCųžÕ­UÅ⤃ĘēńÖ¾Žšž Ņ!W S kžH ų”Ķpc!]OéL»ŅmfŹM IŪ‘\åEŲŃҼ”KĀKKrģ9ć„VŸĮśfš„,-¢U䜦„š9¢(l~ĪG Ęøģ:TĖiēgåuā³tŁ“w1.lŹHvĘDZQ_Z[˜h=ŪŠ~ĢG3>”qhŒŸ“®īUŗŠčtB9Ń –čÆ×®ČĪĪKy!h£“š4ß!Š·^¹ąt¦mꍬŲķU~Ē,,e•$Š'#:’RhWw'®:V=¾”sw)†KiŃxŚzƒA›‘ŗŚpŲAūꛧŽ]Ų^ī#ßn”‘čŽŗEõƒīHnŒO$×$Ń}xŽFņśō ŃC¹Ź_Il$vm»‡5“4֗3${YNō »ńH¶øÉ?­s÷{DØąÜVrˆ®tšmŌžK`ł$.ømŪ¼°}½w6Ö’¹,¤ŹĆ¶8¬£3E4Ż“ž;UėV˜#ʳ"ŗŽĘk²“3œMųQć;‹9ęÓõ%µFmRŒX>õõŦŒś–M¬‚yn܃ é]Ŗ]ŽiĄ•ō«ū ” ®z×JŃĶ%‚G%¼Ū‡­+˜ŗ}Œ9ģ&–0cŗóō®|—•̤:šs޳”»£Üć|o¢A¦¶ų”iĒ|WĒ7ö°Łź"ĪY#µøvŪĻL×Y3²œģmŪéŅéöĄ½¹›nK; ƒ^=ā«H–9®ķ[fļ~žõ3:TĶ_ƒ¾*oų«Aҵ <żiJJģß0=ĘæS¼94\‘5œĢöŅcļĮē9­āĢē#ź ė w&_=p8Ķu±Į®4Åo­öĘ7œŠź¦µ8ē¹ŚiZĶk¾#8īkŠ/täŌ“·YķŅ”… r vGcžkSĒo“é4 ^čAĘ©Ēß_É$„f,3ķҘAjrzž‰%Ļ—2²&sĻjŃŠ4łģ£o˜É‚NŖŠĮ³S^Iķ÷”!Ą›÷"¾{×üo$ā{RūāW )=Čę­ÅsĘo54[ˆā@~n¹wń¬É56·C3>zĮģSˆ-®ęŸĶi£;€‡QWmŁÄ’!ø3/NJĘä³£“·“„KŌÕÖ·ŗ9Ā6ńÓ"‘Š9K˽AgĆ č8`ü“č/ øY “ĢY³„“Ņ67lfŌąłwDÖߏ2xŖ·ž']&t¶ĖG+储ėėE»#RĪśmķĄ^9ÜyĶA-³6P<'”ņ !Ū@bETÜŃēp-ƒļZ"M“*FśU)XØ§Šµ¼hū'ŚFr:VdööKŗµX8f­E8±mmR͚[yŌžż«y/ŽpS•®Bņ*LĢi“ė9P©\n9Ķ5°ˆ,E%Lmćœęļ·ŽƒhwēõƒµÕƜdYīĪķļ@уŖjFyÕY# u5Ē_köWq£‡FcĒ~&ƒe©é:=„¾±ffA6äąrŌŁ”²²™’į•;|ÕVį­„Mņ¬ŠXŠ4ūŪ8“xn$€ŻæĶī29ģŚ×t¦Bē<†˜T¤RK½%ÜF=)Ėb$² H§„‹k0ŽrŲģŁĘsA©·Ó™6ž äU[Ø+wņ|™ŽIćœSJśŻŲłāOˆµ-.źźā6’=«” 0½ėĪ|ń™¾Ž"Õ°—ź8\ö5§!æ±ŗŠūÆĀzķ­öŌWv×6ī¶įœń‘޽ėђļLž#ņ«°ō4¶Ųä©U“Mø,Ĉ¢\‘üTūŪ 8)1=ĘśŃķŲž]žų.uK’ųHn$²w°*Ē¼rX× āķŅīźkībó7hĆrĄzžuō­:OC˜ƒG¾G1–‘IĘjģ|0³YµåŗHŠ’6NŠFW޾ł”٧6·:H/.t]DĢ’0glœ`ŒÖ»åšę›ØŚ’l2ZĒ»l[†7üžu˜'­ĖšE”n,¦¹ø’$V`nkŅü!”OŖ%®­f ęe=8 ŸĀś'Ō÷ķÄŅižžāźśĶę¬ńcļ1ś÷ÆĪ+ļj:‡ŒńrH{§ŻxĪT’‡ŒYķ—^Ö5;敭£u€I”ēpĪē\¢ßŲ·Ztw„cĖņ/?JŅcč Śiŗ¾‘§Ė™\Øåšs“łÕOŻŁhFāĘHcµ±ū£©”¦ĒäĻ ¾×f’ᣉä’-ēi…fjÓĮ6óy.ÓH’Cńf‰”闆}:HķšG%R>6(éÅ]·ńŠ£Ó­mmdū$JĢY™~gˆ4ņŻLx;āĪ‘…–¼Œ÷@“a›#®„ÓWš®±,ö²ĀĀŁŚ ‚Äv5›‡c)R<3ÅŚzF§$ÖVw§L‘2³1`˜Ļ¹ęø'Ä·:v£QŒŲ;yOĘB9céIG[2ym¼Ó4›½)Ąy5 ¤†ßG”_¼–āāĀÖI,?t.]· Ļ€­[”Ńҵ;ėmF.ą–Kl\ž½0+¾¶Š“M^żo4ż2ø.¬xÜKżzŅøī3Ä·—ŗz\Z@ĀŁˆ*wŒąŠę¼;y¢ß[L÷¶ń]L»j¶ ž•C3u&Ņf½&ŒŒĪFjī•©Į£Vxv—Į==’: ög;©ųé#”äys·„f‰ĖØY5“kI§¬Į$nBŽ®=¾”'CÖ_ĀZUĪ›hö ø••œ>æsž¼É £y%±3‘A [ÜŁńĆģĖ Ķ­éxüæ7ä o§#ń®FšŅjńÉe~TU%¦uĄ@;Ša*ė”ĄmįšāÓ쬐’xĪ mx_W^¦sŚōļłi 8ÜGō&‚įøļxbßP™Æōōl§mģW–Eķ^‘ąė:&«!7Pm"2ńėIJJĘ_‹¼*Śž śōĮīTbFTĄ >•Ļ­Ż­Öż9-¢ĖGµ²3Ÿzdx_ˆķ/<+®ĶjMėG*’‹³9č1PZłńŻYĶm˜īưBFW® 2'¹ößĆ=müGął./-ĒŚmņÆ1ēœzØÓĖ"̐ŪÉö€ēœą`÷ ĪIu;’¼ļŪĻö‹©•waO<õ†ÖŅxŽ+ė[ȼŃ+²ą  ØåŌŽnx׊.lt ¤Ó®ŲĀ žPČŹ“éž•oģ×Ież”ar,XÜ»w N»š@åķu›•Ō™..ķÖV$(S÷ūŒ{ā½&˜­ēZ™ǃ»¦õā©FčÖ1§­™&Gvc»y½³Ć>9Ōü?l-#»xUÌĒČPF8ĒzŽ@|õńŻ„¼:œI,!²ÄŒ·?ʼ²’\+l›yēŒżkR¹Īiµ#v $Ž\§;Y@łOµ\°ń—‰mn­ō«„:ŗJ¾JJ’yHä| }k–vHŽ›¹ŲŪŲ\^Ū—¾V‚W9ŲT‚9ō5£4qŪA“c” žO>ę¼,UNĒ}(w=Ā:Ü2ŁFńŚnNK)5ŅÜj÷Q²™‘ŒG_jšjŻŲäu+«=Fķoēä#=OØ®³Cń(ŃlĪ‹<†ęÅ#w-Ÿ­amz»įĻ6^ ¹†{¤tˆ¦×\ļ$ńÆ2³ńW„õˆsėwśTm4»š"€/<ąqŒuÆB=LŖ2æÅŸųBMuuĻȶńą³Ŗ0*ł€”õćk”ųg³™‘$ŪĮ=ė^kr‰“?‡>ĶĀ’‚•éž–8¬š×|©R²'n™Įļ\ņ—V\caš„¶Ńb;DQČł@椼µž{(^q5½“˜dį†=(L-ŠŻń-‡‡°F£Ś6Ŗ‘Ŗē ™>æJņ{P¼“†Öęķ®­ć<+ģö•ŻNF,ɎŚ)ŲyCŹēw„LmŽÅ’źÄäŽÕŅ"½œwW7Ź–ŃŒü»äŸJō»}neiĘwiŲĀHģ4Ÿ:’‹g²{{h‹†l ŽæE~~ČöÖv:Dž"Øå3\ļP§¦×­mĢ‰å±ścį xCGÓ“ū+-mļ +….}×ģž€E$%±:£nPĆ#>’•%+“&ŃŲ>‘j×&čŪ@²3dķ꤂ŁįāŽ%Ų[=:ÕäŹSB/oŹÜ* CĘ8ā½N»¶ū#AlŗŽ„õ"µ„z’PÄķ9µ¾µČF$㌊ę›R‚+ĘŚ?ŃĖgéTāC™ŅĮ¬Ååyqa搮sR¾Ÿ£…¤"±eDņYožŪÅö–Že„•ΐżŠŽ‡šę½>’Ć‚ŽVŃ.a3|¦# žĘ„JęžĢķ<Ŗj—–)“-­uHkąąIL֏ˆ|B–qŸ™]Ł‚ńÜVźFœ§›ź—–;eRīūŽõ庚2Ž,±CóĒ<`f¦ Ņ:+h”¬[õ*ŹŒ1œW<Ą¹t,åE1&^œVjˆā˜ł§x¬Ź‹°ŻDYOnųDŽNEql³·’:U0¤­µ8'҃[ž³g ł:— (W<ö®DŻĒ!x‹ž½TXĪFm%5Qō»¤_-ĒīĖ•«Śü-ąx42 > 6żį€æJꌺɶžf°.»ŽL÷­żMl5=hµ[t‘Yp ź¹¢K¹ŒÉĻŚĻą=›č÷ś–Œ·V’¶ ĘĀzńų×óÕć Üų_^¼Ń'›ķ€¼nnS=żÅo†vb¹ĆŪĖ,N…'h„S»+Ö¾Āų7ń>O7NŃuyZęŻßˌ»`)÷ÆR.ęg×¶ĀY'Ž[U‰„S»7)śŽā¾ųßąmoįļ‹Ęµ£Co™pŗš(]ĮݵO§YŌ‘tĻźūž ķūBZ~Šß|1®%č‹ÄvVi”dŅDŠ$ ś_”vpyɽHóü«’«ÖĒW)ļu™ŌZĢŹ>\gØÆQ¹ÓtzĆUšžø«&‰©[Igt§”FR2~™ü‰¬‹?‚æų(ēģ‡{ū&žŃ>.ųwso5Ļ‚u©ßVŠļ Ŗnl˜‰õé_˜Z•¢ŪJń‡żŅõ#¹µŃFI£šŖ9©eĖĀ āÅD¾xÕš­ĪG ,ž]¼‘€ÅĮģj“p¤ežWe'qɭђF ”ĒēeBDO~®Ė.KĘH {śS-+4i2 ūŻ}½M꬛ČóĒz ©¢|ǵ ŸœŽF:š· —u+&©ję7 Ԋó³ WŌź‹,Ųų=tĶJ}WN¹cgp?Ņ-Ųš®8 ¾™ļų~=Ø_&Պ(ięĄī+ē+SŌčƒ8Æézwˆō+ć˜ä†ā6†T=ž9Æå_öćų#7Į_Ž:–¤mĻĆŗœa„źB ˜ž’Pz׎źlłrՑ•’Y|Ę­]”Ē%« ²¶+j;•=ŽUÓ|Ä%rHśW0šw–źŪ·ĘÜqŠ÷(ĖC–o”õēĄ_ˆ7ŚN„•ĘāŃx_Ģᇦ=±_­ø>$šõ¦£o}‰ üĮOĶ­Œīz6¤Éā}ļI–éüŽcŚēÖ½#Į^Ōt]Qge Ėlæ>рGOʚv9j³¤¶¼æ¾…ä”y©#h΁•×iō¬_2°×"Ÿ ŅlqÅ;Ļ.ĒĶ? 9ā¤DģŃÜDń!톼ā ?M­é÷&ŁädŒ}Ö#ŌP3׌–-dÉ%Ķŗ:(ČgēŲW-ݰvPåŽzŽh K©łR ģQxĮė¤ÓõI%PŒ’#pzP#^,t†¢¹żkCŃļ×vĄä8?2Ÿjf‰Å]h m(ūŚInGBywG¶ŸOŗ2/l¶J(Ųģd½IylŹŁćŚŖÅ4ŽåX£ć¦iR¼æ[pžTl»ZłŪÄž<æ:Ģv®Ļ–Ą^ģ=i§b“=‹Āŗ¾”`’Ę\Ź1É®ņÕ¢ŗV· mqœŒš "NƒO‘‘ü¹B9õĻZ½ČZ#‘žóTžO“¦šŸ7®:R4hŽ%µ•Z9X$ć×ų«*žŅWµ™-ĪÖĮ @äP-SH—X‚ąÅ}˜ƒläŸŅ½6ĪUp¹I ¤ZžŹęY]~CÜ DąŹ›†s‘ŌPHč`oōD óŠćšŌÓm#žMĢÄc¦}h2r$Öćµh ±€=GS\IŅ0Ž S5‹¹—“Įū™·/”µd®³t³. rFOŹ[łU8Œ¹å‰Jŗ°G'8«jp±™ž A2ĖMoUP» ķŽ“–Č[B‘ŲphÄk<ą4ФóYSÜ«JĮ$  ā«•”QøełŖ ičė Åc*¬ž„v©v1üšļĆž"±q0ū+°łZ1†FÅyž‹įĖ­!°øÕQBr@ō>ōē”ÜYŪĮÄ©9ĻzčTķ' s҃)lgG­†”Ć"łłXt5ŌAt'Ū# >”'Š%”87CT%¹ŽSøqZEŲ ZÜyOl’>9Æ4Ō¼ĖÓåłķę)å8éJR"Ŗ2E§šćy­—šĶÜČ%‡ŹĘćPW+fr*ĄZ)½8éWģ.<¹K-° ƒ»³ŽÜ+.1Vn „Ņ2‰v;A­`ś‰l)—,WÆ­jßėSī‰$ł`cбKb¬.Ń0Ue<ēø®š;a{T )Fį~†2éÄNV`ŪąūŌ—ze¶ŠbĶ×t¬Zč;™77KhwcµaE©EzLq;ŒžE č®Q`häQŽƒ5ĪO ™œÄY2zg­¹­u+سm?ļ`=3¶µĒ–d Z€ŃŅ4Ųµ)‚¬‹ gę$ćOSŪ¦Īń; TsŸQXó[BE¶ŅÆbr>IŠäq\ģśh0uǽis–ŚŽ™8–Üą•ƒ©j "¼SĢŃČGŽS¦µCŠŌ]āšJ1{½TqĻ&ŗ‰¢‘˜ī…¼ŁĻß"ŗ"Ķ~!ų2ŅįŅ5ī8lvÆ‹įżĢŽŅoM«Č 1»•¼_T?Ŗi+o¹»<ń^7;™/ęUµ’9 m½HüGµtәĶ8šĄ2Fš+§“ź+6tóY”óć$VęV2KgqrÄsŒW§éÉņb@’ņHėšlŚ=›ĮzskŅ ŗ…¢ƒ•ą×Cāo‡QĒ7Ū’Ū(ąz{Ö ›)œŽŸ¤{Ō[)BŹų÷kéß ĮU}Rčl\,E$#¹Æń׊m!{˜n-Ź!ć=Ŗ½™™į·Ī÷įŠ±&³^y%|‘Ā³hĖĆč²Ļ¼{$(+^禘ā…Ib%ćZ@l į• Ÿ–^Ē„XŽFBšTVF”Z‚£.eēž;TŅŽÜ$Cl‚D'×šŠ›4¬RMIŚ"=ĖӎõŒ÷3łŖ!u O ŌĶhY„J‘–eēŌVöŸ%䅳‡éĻ9¬F\‡K²Ž8–KhD”pĢSė^Kć Yjr„ņįwĘ@: ‘óĪ«į+/w˜Æ\Žp+‰¼ŃģĄTʇ“ĒO„¹ņēÄ? ŪEq!gzČ`øĄÆ—ž$čöSéwv­ę.čĪŻ£ øģj*"Ōρļ­n,ē0Ėļ€ĆēōÆTŃ­4¶³–6% ØŁ“3ļś×%DtA“4ÖÖn|±Ņ(ĒŹpj„¾©4ä¹C•c…#Ņøj0—CVĪźÅ€˜FD„±Ččk©†[µņŻ'LõĀó­e}lhX‘|ݱȑŽrrzŌ,{8_1Oė[S‘21tŪ  .ķd—M—ĶŽPcœõ÷ĀżOūKN‡eéūRęp»Ē·ÆŅŗāś˜³Ó5o5ŃcŸ½Ęy„³½“Čh +Ź“ŒL «»™ķ$‘bŻóńōŖ³¼ūVÜdšnˆ/ć[…{yc3‘Ö¾Zų¹šĄīMvŃpa'=+ ĮlΘ.‡…éž Ō4ä{]ÜÜBd-"»gĖ«ŚåŽ”a ˆ*ČŹ~RpI®~DmcĀõ˜gšĪ­o ü3+‚²#*{äp:×ן ¾$Ž}žŪOø¾yķSꈓŁ'Ūۚé§Œū‡Ā¬ķf¶Žīt·øVĆžé_}ųÅZN»¢Ā­=½Ģ¬{ĒÆjė3ž[›WbÅ/ŅETGĻnƒŽ½SF½°–Ō"ŗ¾G>¼VĘ2LÅÕōk[Ø'sr*ƒŽ95ą×v0A|öó¢&NļOj‰JÄ©4,šJÅlĶ ŠŪO~’Jä5;«o2xƏZĘHÕ;œcźĘq ĄļWōļ’@. qŽ¢ˆ®€ć}kšOÄ)-®£²[øŻ6†Ę0qōÆf»ÖćŌ2ķulk¢+B\4ŠÅøc ćV•GzUÓćm'N+“s!zUĆrTu³ Õ/“-sN’H$ŽX‰ĒQ‘_1ųĻĆV«w#ÄvŒåT“å~¦Éžuug¼ČóƒŌs\Ōŗ| 'Ÿ)!äńұ™nZX$æŃ‡+m½pGįS„ƒ,‰r€äs‘ßėYø™ø­ĘķĢ@ö®ĀĪTTJ¹ćœŠF1õŅī™b-å³³Óń®.ļJ.ƶ2ļNę±:ū(ęšŌ…T—<(“\~§jŅ_"j6r¾ĀGĢ>ķ –‘«Ųim#¤Nƒ;øõ«o¬Ćv’“.Ü}ÕéøÖner2֓ŖĪc--øT>ł"™yŖC)b—\g ö5<ģŅ=‹ś„8‘ĆÜŚ1Ķkź,®’:üݳޗ3š-Æ-‰ŒE"” ķ'­>Vø‰J•dV#$v­bˆ™i~АüōČėY†rŖĀu19t:fMÓī,cc꓆P:‘ÅE¬O•0Bo»ƒ@[yłžc©/œ€j½Ē…ōÆBńoäõ‚‡ŪŃcX3sDŅļ¼5n-žŚ×QŽ#STyõ)ä7#«6qŽæ…g+Ż‹ §Kä¦ÖŒćŒµFHÖHęG+1Ģ:Ÿoʳ š‘\Żßl‘„@1ƒģ8Ø,cK‰Źds“ĻjĶĢ Ö°4Ŗ¬ģ”攸ŠåŸ?e‘TōĪ1R¤eĖŠāīĘ£¦K*É“²·ĖĪCR&©m$rG9ŽŲē čʵŒŽŖQčx‡¼8×a.óÄIŹõWĪx=bՓŹ"9I )ąŽ2¹Ņ‘ō€t­WKū9ø˜ŪÄčŃOS_Ei72JšĘXĘN(–Ēc×ō Ēy 8Ž6OŸ¾÷’^³|Cb-‘rĢ0šĢ`µ?™]7S}FĀ+™/īķė†b¼YōKė=nźš$¬Ķ3Lžšć±ü+éŚ<8ČӆāŻeˆČ%Œ0;ˆę­é—Ŗ÷PĄ‘®å (éõØq5ŒNŹėĆ_jp|р¤†#”śz×¢ų/ĆŚ…¤V—·,ŒŪ8nõśÖH9 ^1µÕ4[˜-D2Ģ”>SЁŸ’_åW“æźÖPŖEw61„ÄäG”ż+ND7µ*jw¾.Ō4ł`»š//ĢŻ Q–)އ5ćĻż£ ÓŹŃ[„ņ±•ąŁŖ°r&vĘyü?œ'LI„qäŠ<„ćļ05ĄxƒÄų²ŽĘźŻnbpī³ļL+°ČĀž”Ņ tžń]ރ©[év×÷±„ønžÕŽx×ÄŗŽ”%įYetć,ߍŌ§cˆÓķ<˜ĆŽČÖWAHä|Ÿ„l\ik6)Iѹߓ࿰©‘‹ŃÜśsą÷‰¼“Øhš¬sYŒÅ»J¾;Žćžæżzē¼Kcż”gq„Łjkb¬ @Ǥg±¢75„¬|¹­ųÄZuögāåvīŠä£ž}:W]wc„iÉov^o-@Nw`zU–‡žŲ\OwÆ$+Žx,Ż 8åµōæƒō]BÖå>tŌÕBE…Ą=’ĻցŗšĒŽ­õk'Š}Š€`ĪI}ć\m4›MRłüId5(‚›I@žžż+=IrOTzwˆ>Ļm©0Š5E½Ó¤…pŌ7qšįµŪ]O£jŹ ”ĄČõ¤KfŦommp²Ļ+ŹŲ1–#ƒŽ“žÓ¬ųr6¹† ĢXRę!ó`÷śUCsc†ńo‰-£}ö;Ł­äq»’vqŽÆxĀwŚćyönÖś\Š{ŒyyÉÉ=…jh§ÜĪńw†®tÉgŽ=Me•OśČ¹Čé^es¬]¤’żŗU6J &N /|ž“ĘeXōČõ«Y§„4ńĪʈ÷=ė6ĘŅļI1yŹŅׂۧ¹õ>©š·owcol`¹ó7FÅĞ•Ö?ˆō]#ķvśŒm3! €ÉéĶ2Ļ1½ń»­ģŚL·f7”§8 =*“Wa`šŪ¹×ėĶJŠ8 t&[ɜ\ł›Ī?»ųŌŗ‡Æ"Ōb–uwRr±ķĪqÜŌ9šĘ6ŃńįżO×l˜éń§™d‘ppv®†&Ņ<˜n²öä•ē„fŁGu;Ū\É“˜l\6ī~öOO§ZŹ’„GK:„¶«•ŖŻ 9Śłó>ø4'a9Xā†ęńLš^GlˆŃ&–œ Ļ’^¼ o†Ž ²Ō­¤y®åµ’m±yqŽø9 ĒN‚µR@¦{‡‡Æļ¼¢.Ÿ=øć{”UĮaōśēU_Ęßa¼XįO˜°ĪåČ9ś}j†¹ā›Ķgu½Ģ³Ū¼»÷¢m1®yLtĒjśFņ#Ž1(y¬Hvź§é@™ē><¶šÖ§ēŚźŸg/ĪĀłš¹+mhÖĖou,wV’Ć•!²0Gq@¢Ļ3¼ų{ā½Bž=WĆŚd—Öˆß1#匎r­}qš£įŽń'Ā±Rų½ą3Bń%ö—ĢĒēXå„ķ‘ņśtÆrųKūOx«ąę™6,“Üx{X‰•ŗÆjq•Ęäb|Oń,:»ü>\z„’øģŻzUæ‡ŗ–—”H“”]Ū) Źē"Lžx¤į”™õŽ#šµī²éŚ1L8éė^Q¦kz?ü$-”źrZ%Ä‚;Y r~ søµ Xź¼WšŻü?y3Ap• “œß#šÅ|ėā?Ł«¦sa, <ąß+ŲӊčE]3ÄWwö2é7PĄ@ģ컕@ēWŻWmć}Ź[„Šk…\¬›ķÓéD»‹™ćÆĖi åщ'Eƀv6zćµx½­äŗŠV0KøßĒ^?:ĻŚ ō›+ļ>/"ÄWž1Œtżk¬šÅ„Į–ŽC.Õ<bÄ~t{d‡c§ńG‡¬5Kš˜įhČV±“źkäļųJźRK"ĶhÉŠ}}8®z˜ĖB÷5¼+šSXń%„ī„זńA Ę¤yĒē±?zE‡|;¢^Ē-ÕÄp^ĀI\`”«ĢƎ¾ˆģ„E­ Oų¦ĻVHou“Œż¢5Ūę0 ĒzĆmūPÓŪQÓįšm9¢-¹ģėŠó'Q³¶*ĖR¦‚^ lķøpzÆÖµu ļ®›1kŁ VZ= ¬pzšŻĢžbĻsÄ.IĘN1Ī{TZ4ׄĖnÓH“ åŗҜQ|ē§Żč:„–”š­ĢmµQĢ©Õ~øÆ.æ×"žźÅ,$I˜enžĄWe’s¶±æøkhO# ć„X¤žxÄcŒŽ+š£3: /@ŗŌēcyäDĻ—Œ–>“­|lŗY Ę:ńł×ž£K¹—©J¶“Ę&…¤0܈2Ź=k®—ÅO}įW²m:ŽćN„ ÄŖyą’õėZd³Ēīo­VUŁ Bwl'{·gu¤¬‰ö‘H# üų®ź}Œdȧ»Ó-Ɲˆ#l=;Ö«{,R“Čזä/(3‚{]1O©„Ž÷Ą<]ā-I"Ń ˆLdVŒø8> Šżųqū'_x³O–÷PŽŪķŠ›šĒƒĪŠ{óZóibOŠ?†ßĄše¾ū;;»gUĘō čGź:×њnomū=¢ œ”nEo¤DZ=Šb•HĻk¼Ó HcŚQ±×©”ŁŲˆąt]×xž jÜńĮd ˜IĮ†NӜ}jāŒdĢ›į ;]ā7c ¢ĶĀš&Ǝ+S7&yÆÄ?Ā9m&©ÕĮ‰KIå¦xśU xžÓĘZ]¾£kÄ®”ˆe*ځXģ`im]{œŃˆąŽél/”£¾J85Œ–§DLæčVڽ¤o !•Ć«)Į{ÖÆ‡5v°³× Οp·ńT%cråī¶ž[\Ŗ€üņ;גIŖkw7$×&dÜJvĄĻCWrłk9ī'u·›)0c½?S‹Z°M×zoŚ4÷įf^±Ÿz–śEkw3"œ¶:Æ­fCŖŹŗ‹Z•sč8üė;{;h^ßt„yFM[“Ó­®wļ,F{R)ōˆ—É¢±dŠŚī}ĖgęÅĒĶŽ„h¶§sKcŒ`aƒÕĒO34Iž{•qZŽ2±ŲhZlÆn.Ww.AõÆ{±KEӔĶsˌ`žx®ˆ-DŁYīRo*Ż'ˆyõ5ŖśdŖ¬‰½+[Éźy§‹-|6m.ōßé?oŅē]ŒßSżå÷Æę—öėš6‰ąŸ\>”ᔕ™#£p\ō$UAjK”łĶ+Aš8ÉLœ®ĖĀŚ’i×Ö%˜ĘČāEcјW£AśEšĒĘV:öos#<ĢŖ#‘ˆū­čkGā…m|u”Ϧ-²ÜMg·t_œ`Å:Xē’ą›æ„ż›’i+/ųĄMõ—6͹°bŸ8R„^z]Ų†U{wŁøÆ9B2ėXՊi3®2¹Ūč:ŒöZŠO˜Œ‘‘ė_KiWk·G³Ö¹$¬ō%Äüę’‚“~ÉÖßµģÓwāŻĪ%ų“į7°l_žx”dŒŽy }kųAńV’źņŻĮnc‰„93‘ €į”śƒU‡o™¦rՎ—<ęīŽX²+Ż{TvńøŲIŽ£±ī+¾ SĶØ5ʦęuĆ<Ņ‘äU\ćēĻ‚µ3O«(IÉŪ+ģœŒśā”bģ ć§Źž]Ź·ś;²?C‘Ÿ—½O“(pK1<žŁ Ö—mfĒĪvž¦„‚7W°1ĢyŌŲ_CÕ­Å­Żŗ\ĄĖ·ļ©‚¾łæ“_ų!ļķ‡Ē’€VŸqńīƒy£‰ 0É{dłĆ—Lņ=}:łsĘ:>…āHēM[Né×QęHųŲÄp@śąÖjZŲ§$/’šQŁļQš/‹.5żOŠ8ā”Į(Qµ¶O·æ3dG‘0łóŒvÕNnÖ9źH…›nņnĘ>•HłĮ¼dqŽŗO>©+¬Mw-æ°Ē”.ā P#é[Ēc›œägĖĪ:÷ö©ć1'śSEˆdĖ‚¹ķ ‘"‘°B‚äŌÅv-”;ö ޿ʯE$ė—zSĶE9Ÿüu®|0ń†…ćß jĆĆś½…Äw"`…Œ…[!N=qŠžļædÆŚĀ’µ?ģūąĻ3Ł'‰ -5ŲTᣔæ0?‡ąĆҹė«Åłp‘ōÜZŹEs „Ä/¼ąłrēĆµkZÜ$¢Yšł¬LNˆH’[[(PDZV ņXĘ}kó‡öšżšąų­šĆœŚYNśŚÕ„Œ£uēŽ+Ķ:éČž\“±©č·—ZµG©ŚŹ`‘v€8šō”“ŠXVD*$;³Å8»3yKCēJkķo:ł½6Ć äu 2X·–źżyčkÕĆĖKŅZ”“fėKŌmīģĢmu‚Ž2;Œ×ģGģćńJŅ÷K¶ÓZŚ d™@Ć7GöüėŅ2’>øŠ§hõ8¢ßöa#×&½¶ uMz ‚Šß+…?{ėH䨇µÖGēĆÉ®Å5ÕÅ p&^ ÷ åhģ|-qmäK³0›Ÿ”óšŲŽXVńH*W?t÷¦„wė¤hŁÉ, Čе/‡ķtWx,"U‹?(«¶§Ūī{ČDüĮZĢ¢—«ö š¹TׄvńĘ^įüŠkh"\žĘ{[G-š_B95Žo6Ø8Ę:UA%ĆĻDWrž•”#kwCdaĮ€4mõ;Ė •zbŗ_ųL”™R2ÄåpxĒēG*{š(w9{‰ęvc*ķcĮ5£fŃŲI_#ų‡Z‡J60õFH‚ØĪpJ·),Ÿ0VD ū:4»™1޹jh¼£•+ģh µŗ’D[yXKągµ[¹Š‘JÆ°ā•­.#D*AP=OJ™õal–?Ź„W:›ŽHbžõ ÕĘ£aģ3ŚÆ“Sh-bņšĖ“óT~”čb·•ćgPɞr:Rq(Žŗ°µ1Fös)o®kGLžŚKqor6:ē;…5\ŗ6‘ŪÄė±Ć¢œąšénu-.ī!…V ”cÆ«QĻ=ń޲lØ®vĆĶvŲ$düÜSeRi.“röČØÆ.›JXŃ$+“…9äŌŁó©]^@VįŻÓ¦j½•©óW““­Ķ)$Av+0ŠF ŻŽ{փ¼q±ā²ŲånģRYĆ«ŗœē½u¶ūcR[pČ'š Üŗę†.RF'ū¢² lĪłŽzšŅ0ī@ķF޲«°ēg­yÄŗsĆp·įū­‘ŌRpFŠŗČ!]łģ+ŅmµŪSb°2„”p:Ō•Ģö8kų­f½ó$ˆ˜üŲ«1Ćek!*ŲŅ‘$ļcss=£~ÅsŸažŽVrYa“[Åhų]Ų1fČžU-äQĶnwØŻŲŽ“ĄnŸu5“Mļ 9ķZ¶Z„© 1‚±A.'Amx ©–6*O'µ]¹[dpĮŠ”Ø™1‹9NÖŅ|˜Ī u×9¦čv1ݼŖé„äēų«#C°[8åPUA#Ś¢šŚŠ²¢^;NĄ%Īg Bx ŽA5‘~s•;zPŠ%‹w—•o„f]Ģņ©IŌ{‘ŒPgČe‰@IOĶÓéYš|šÜ¼Lāh:Øj£+ C¹.­m|Š;[ĶL¤ 5qæ‡õČ ö©'˜>fŚ+SDŗ„Œz­Ć ²Āć©eÆD³•ē¶]ģ¤ż+X>‚8ķNĪ`Ŧ>b+u#­s:•µ­å”ĖXgQņąVōĄł³Åšmķ¤®e‘œg ×%¢X-Ķō++B›¼č~µ“]Œę-_Ćš+ŗ›qx܇½cCążG1y ”¶3žOÖ­Ō3tOFƒįÕŽ$—ŅõGŹdõ«žųI<³µŠ–VP»|æOzĶ˹^ŹĒŠŠ›AM˜Ė(ž!WüG¬Bń¼e.T) ޱ“]Ÿ”Ō%µ×›•ł†œnÆ¢t]Bā[E1ŽWtØ.1VŌĪKßéŗŹ}©]ģIÉ>•ķšlŃܤ9śĪf† ³_õ‰'Ī:ŠÕ¶ŌÖŻJ¹Ö`7PŌ Ń‰P½sŠę`ƒŸ-ÖEö ™F凍”&NK}k*īi_ݶ³”ŗ1±ĶOęÄća*½sļ]v‹,„ ŗX¦ŹŠ„ŠfūO˜Bæ(éÅL堏tYZŠ—ĘöÆT>~YHéYŗķźj`ł*'½2±Ē_[ē„Њī&‚c0ÉēĢź“«Ę·*ѱ`h ”¤źö³ŹÉ(0Üg£ +v÷Xc…(0£©¬„Ō;‰Ø FĄ®óĖg°­[iä‘–©ZŹlĄ<µa„pxéY7VᮕŚ!°ńō­ĘXū˜˜ØŽ£Ÿ ¬£h‘I¹LRFĻŠńBq![¶ M÷€xõŸ-€ā|A«<,įpBœ}kÄ|Smq«A'—!ߝÜ÷¢Rģ„Euåµ½öčd^ųā„—|s2f7ĮĄĮėYŽĒ§xVĀėbČŖ›r=ÅzŪā·*„3Iށ±]@ž_Ķ“ŸQW•d7–~LóĻZøn˜¬ęŒīp¬jŃóķT¬nā7<(5Ø Æ”ä żŻHöv‘0uĪņ2xąŅk \d·&$ŻŒÆ§„g}°),7=éX‹x$m¤œ×āxĘƔ >™ Ś'†kŻ[÷»×¦3Ķy„ā{y $œŽ”;ńo‡.µH¤ŗ$~¬zę¾8ńf”‚{>źŲķbTgµQŠųĆāǁäŅ&{ėHL±Km9 =kČt;‰,ń ’‡`9ĻzĀŖ7Hģ 6·2<®ž}Ķj¬–– nX·ć+ĶŖm”s©FŅ«Š3ņŒ>˜„“Qk7…ü¹Ņ'Ēō÷¬,ovö>MåœsÄļ*°Ļ†«±ū· Įō~)–iÅg ųP«,Iæ–_āÆGš÷…µWøÄ÷ŗye!Ē“źzŽ ”Vē×ŗ5ėź6ĢŚ6ū²ĆŠYm,åf“Œõ×NG-BNkŌcjHH ÷¬Ū6ÄR›ā8c{Ie`˜ęL£Ņ»JŸcīéü].µ¶m=šĶOs’>†½'Į—÷rFŚ”ģˆŲĖpE3 =ŻY69°÷ēµxæŠ$µ’’÷QźHŽ~¹©mņ‰ĮźW—Ę¾R9Lē=…q–µ~šH‘ȬG#=ż«&T#Šó-WVžµŽYøśTzm”²łWĀ@\dpܟœMłNŪĆž ±ūJM$(óFū†ō^ć’ ^ŪEgŗKYÕ¶Ć#zŁ2=™Ż=ō l™Œäµó÷ÄßO¤Ś]^Ɉ¢č„'œÕĘV3•>ēąŸ½ł’XätNāW 1žµŁ^]Avķę>öaÉĻ8©rī3›–Ś#†o“\żģV¤Éˆ ƒĻ|RB<ŚēĮ6šę„aØ¢°šŻĖ~īLdćøkŲt½)cµ…·ĘN9®}(.lįIfUĮÉō­Č¼”ó³·å Ž¢Q2›1Æ-¢hĖĘ ¾sׄr×zƒ‰•n”p€ćØØå6„z—č°RÖ³9ī5K¤ųź=^’õ' »«® #ėYĖcŖ¬aė„“²³†œ»qü?ZĢ‹ķ121RÆÖ¹dŻĒ(čkŁųˆŚ£ÄŃ4DœņsšETŌ$fŒI½Ęą ŗ˜µŌ¹ig­Z]E-…ōP)åŌ®Ičxļ^oÕäDÜØ 1üU²‰DOōņ<ŃŹ@Ā“m®ćwhĄĒ|qšŲĘ[™sź[ędē…ŠŹ»×tŪĮ•׌ųŖ-ŪI ‡ļcYؕ¹ČÉ橵;į%ėŻ:ł›T3īéż+³¼XļįkČŪtē-µ†“ ĒM ˆ®ŪK¶¶øuķ”)ĀįÜVށg4'Yµ»}ķƒ4.zpEZĢņhsČVö‘×aPĘ2;ęøĶCO¹‚+Ɍчi6sBf±~Ó4Ė Bī ø-£˜Ŗås€Héė×5ģÖ¾ŗ½·1pץõĻŅ•ĢjLįõ/źŗŚ5•®Ÿēj›ĘÄgŪ’cųVg‡,õ›6›OÕm¦¶¹( 6wĮśt”³Ÿ–äZ¬z„”¶÷GpērBŸö…kO⫆²Ž°k…ĆåĮOåSĪkō14z÷]ŗDŗ1؈ሮZ»MgE¾ŠĢ3Ū?ŁĻ ƒ÷Hõ§Ī_7cÚ.Š×pÜź0Ɩ~Pˌ·¶kÜ®¬ķōˆĄ‘C‚…3‘ĒÖ•ļ±›g˜ų‹Ę–rŲ]ŪĻ 3ĀĆ2 ŽāøÆÉ„ų’śļĆŃŻYŪźÓ Ś‡}»Ą2x꓀ģĒčńź×jVžlĻäF܎sM½Ömmu7Ie*³6AQ`±wÄ/į½OKeYŠ¬ŲŚT÷Į®·AńÕę—§ųZś;S(‡™ …Ą {Ž”ŅƒźA iCĻŌÓXŅ–[C¤rcŽz{VN§©jž¼Ņ¾Ēb™vZ9ČŚ‹Œ`Z¾mįcUŹZģĪądW›źś ÷.^W#«½>b_‘Ņhžƒ¤My%œ‰dٌ’œ×Åßź1µČ’ŁJ&PŹFr¹äŌɰę=ßĆzޟ§ŪFČé0d[ m>ā¶Æ4˜Č&Š&·{‡C+Ę©·ks‘īkē?ėś“†Žö;‹mĢQƒÉϽ(6+œŅ¬—p¾Ó³jķ ךÓŃu(ŽĮŽD@Ć{śV†Üč¾ĻؖvˆK3& ŌSYśĘ³£Žé²é÷÷sé:”9hä†ö>‡=é„s~…φŚuŽ“m4bźćW ±ó2až‚ŗĻ|>š¤V×/¤““ų &ęF#“œv«I¦8Ō±‘įŲ“DŠ6p€å8#Ģõ5[Ä^%Ō’ŗ±²LD³8\,`¤w§H»Ÿ.ų‹ÅZ¦£ācf¬`™XHd#*ÄöĒå^Æ¢iŗ“Ąé|ņI¼x'nGj¦mc鏄¾ ģWę ż3’ĒŽb1ųž•췐@t{ūß Č-$Ģ`Iō¹åēÄ{ßėŚŖi#Pø÷yŹ ³'psĪG5ɵ¤—””½P„`¹qœŸz¤śéZ=”ćL·IUfĄćhėō«—5ņy7ŃŪ\Ļ‚åO ü«G>ÄJi¹į¤†öĘš1m>fūŹŻ®zKm.ēŚv—©MWhžl Wž;ƒłVrfN§Cģ‹]"MgĀŪ ŽŖ( üæēµ|wńcA±šĶō×SXJ£ä‘øuĘ3šĮI‚ąč×·ó¢ŪŁn(ģT“Ļ5öf‰©xcB³“ģńMoHU3ŒŌNLµ±å7ńŽ}|ŃG5¾ņŽEy<¶Ö飼@”p9®Y6”;Æ„éFĻeĶįˆü£hlø5ĶŻŪ]éś¹¼ÓäAIu#;ųć•”Ŗõ8ŻKÅ))x".eŽSšXzVD0JŅCuyİg8A’~•ēש”ßJ]ŗėN¶ŚĖ<ĄĘ8"¹»ż5µ%/瓐ۇ9Æ6S=Ąź¼ m¤Łji:ķŗŽZĖŖå3·Žæž+9|_Ć/Ea„Į%Ο,r4¶Ŗ7sĄk;ōŽæĀ÷ŽÖµYÆõkV·²ŽÖµæ§­s^)“‚ßW»‡I&k$ĆĒ2Ž\zc֩ŊĀxwĆvŽ9Ҥ’ŽĪšź³æ.ųc­s1ü>:Uä4rŪ\«ä}śÖ.Åņ®„µ¾Ō­leÓźa„%›†ĒµpŚ®ƒåĮöżĀÖ%qŸ—žµŃĻqiŠ·¦źv–rÅe4Ęt'Ŗ {‡ƒ?±õx®,.픫yll~¢±)X„yi¬ųCT“Ō4Ż@Ś„RƎzńüs—wóų¶ņę}@Ą5ŪžU@ ±ī¬y: S9U’BŌ¤IęH1ēĘ»ńŽ“„“ߣVjöR( —† ÷"ŗéQ9å#ČüA ž§,óÄ©X!ć=«Š‘Y`’?4§Q¹›īž&½R0sg[įļų‡ÅFŚ×KÓ./ݘ*n\€ūÄöö'…fƧŚkWślĢ­Ė@~µn6ܛpžĻ³ö­<ā[ˆķMēɎ3ü?SŽæJ¼ąćįØ!K«Tó 3Üw£t“žŽęĘKw‚5ÉN:U?ģō…]‘G\’R™VĀ9G\g5½dMĄcGzŽqŌU™ ¹‚āž ąˆ¼/“įĮ‰§ß^فi|Cķ!wwük”ķ.u i,Wh\2ącÖ¹ėxī@2Är›°h Ō#†ę&†P®OŒÖ}„všc“PĒŻ@€±¹ ‹Lą½z‘žqSMįŲNˁpsČūµ‹³G¹ 0VĄĶÜŲŪ,l %vķRkŪ]Ė=“Ņ£ “Œņk+?šĘ ĪF;Ņl±’ŚQKĄ,r§ļVŻ÷ˆ.5t‰@ķĮąšÉ°3tĖ Ö,ź­øuĒJķ4m=Zø’ßøƒĒJ@U½f†P±#:’é[ŚD¬ L `®GQp=:ßD·¼µI”'™œé[–zUœP.ųPJ\uü+E‘ā iWįn!$aóØZń“šÖļNŌĆŚ]“¶ ßqłĒŅ­DZŃ|1>XUDœ‘ÜUĻč3EķI8Ą$u¤V„¹w÷z\„7±ˆœį«¹ŃüZ·±g‰¼Ńß9 VgźYÕ[LžĪ_·Ł-Ź0 C/Ņæ™ļų(†¢ÉńćJ‚HŅ+…/”ĢŒ~QN;ˆüʚ;hpv'š‚:U&¹g…šCäp0?…zŁ2•ŖžųÖ-?Z½Ņ罉 ŗq§ī‘Ü~Cüšū^Öé%E–;·†E$Ž:VÄF]ϐ>7x;ZÓüIŠt ’#å™Dā0ŽPræ„ų&ķLŸ¾Ųé"»[čHŠĪ%<ŻĘøUeśŽkšk”×Mč~—‹’1HŻĒ5ļ?|R×Q­µĄ "ą`ā’7q=‘%²fš+ōY4»ˆĶ½Źøqź½AķŠ/fuĘ”ž…ŗ_ˆ<7ń?Āzˆō)­/¼9®ŲĒ}k2Ń¶å Ēęā* j7–÷:ük©jH’}rpGŌ óėFĪŦqž.±’Śā;ä„ģo’TǾ?ńž—&‘¬ź6‚]2ļ÷dēku ŸZāł×ūXü*Ē^ Õ5Y­¢½x¤ż’ɹĀć‚}«łcų‘ąėx§TŠ‹9_“<‘o鰒qųWU)je&pf0±ø@7vńšŖs¦|…¹9įEvÅ\娻„BõÅUó6“іĒJč9Ś"wdšŁ±n0„Ī¤ĪŅĆcpry C÷ˆ¼¹$“kēäkA ϰļDž÷xPiЉd1–LīĮęµ`rųhŹśwśŠmĖĒ1Ō”¼dōÆŁæų#Æķu’ wć.©š?Ęś€‡ž(ņć· l¹< 7AŽ?J‰B÷]ΈÕē‡õ`óź>»’9® a,‡ĢW±_b5£¼‘j‹}Iƒ¶xČįĒc_=‹§©×Lō5Kk›p¤qŌsČ®CÅ0YÜŲÜYŽĀņZKC# ēićŌ™Ó/ßšPƀZĀˆÆćŻÜ\hj‹pŖ˜Xü¬OØĻé_ $Ó¤%"fŁ! AÓ>$‚E(Kß1ō­ł•/ D0FļÜć­vŠ…Qm­é‘[Ż1*aĻ-žĻ\mžo/c›y˜‘?„^Ų÷Æ^œ®ŽI½O׫]Kž}+I×4Ć*łj‰6‘ }y’÷V’ņĘŅŚ÷Ķ3mūǵYĖ)w7žÉ=œjåš[rIžjHģ4]^XŚ{e†ēw)Į49>Ÿįxlēp~ą÷­F-23nė‚år Ē ’× “²šŌņĞdEL]0OZ”ā-*=BGi!Sżå šŃH.qŗO„mōɝ“Ķ>(!É܈øśāŗˆ±n¤°!ĮØ}År³ė6¶ķ¶`¬Ić5­mygu ĪžŌ†x’VM&£bé$¾`ć«:ÓĘŚĪŖ#·š8VU—­'+Ēb‰t;ķ^Å SÅæ€źyZ—ĆŗŃ®cŌ%’YV<6(Lmž‹n0’Œ:Žz×_£kņŲ¬%R €j®`ŻĢ=H[;4”2X“Žõ“#A䖅¶?µ!ķِ‰Ż]?¼8Åk€š8ŽB~aœśŠc-Ėt—öš£H— m™@x®ÖĪ’3 ” ¹Ę}($Ņ×>Ī 3$›ƒ^?ØŻd6ó#ʧœw  ōŻOĢ‘ЉēҽSOÕ!ņ# µ$Qó õ­”°¤ĆtY#dnÄV%ķ†ŁNųńĻ­P6…-ēC–hśsŚ–÷Ķ3>ņŒ¹łHō  ū‹ų”Ā‘ózg­gǶY–Rsō µ+õ›Kūaiw`bš Ē|`üßQV£žąŪ¬o¹æQA-˜ŅźĻkpńčŻwvÅlhś“ź2–b¤/gšÉÄGO4ŠŖ[’Õœ­4nd ŒPjڲW ^0 õĮķZ·7‘‘°ĒOz 9 1Åę#€BžŽÕSģS3—|ć88é[EhĢIŹU±"ž9ėV®o4“±šKĖ“†Uē½h¢icĶ~×avĘk+ät/ Ö՜Ίccŗ<ō”ŁÕézŹ·ŹOÆJڹ±6ó½d@:Š“nc]]µ© ŸµcĖØ"2Ż£ ÜvĒīu+ya+ ҹĪ:õ¬˜/dRvƒ·8ĶKŲŃVŅ<Ņ«+äw÷«Wz|÷„o-°=«’ŪFaQ„4cÖµ§ˆ[(’#ņ‘œzŠ+™‰Ż›`<‘Ś“tĶEf,¬¹8ļA›Ų“S²ø1‹‹7 GcPXß^¤l'\`ćpD’ĮØ\ZܗŲ$‰ølž•rļS…_Ė; Ī3ZˆtŠ]‚™łOlōŖWČ7PTö]|Ø‘āŁ±Čā±äi*˜™D}Į~•”Ö£±e&Ż…•w śVĢzm£ĄŅ(t™‡\ńR€u¶b8œäpyčj½ÓÜHŒ¬”Ū§JÜF=ÄsŪŪHÉ?į\fā»»»Ē“ŗ²š42®ä*p3@ģz•„¢‚² 7lTņŪF$-TÅL¢#R3˜‰a€}ŗÕóĘĻŗ+ "xdøŖšŲ4O‚Ÿœ–¤Ȥ•\.öqҧ{iīĖ”;Č5ŗ`gĖģ†=»ć“ĶcĆõ¼å‚K¹ć52—`5¾Ńp§pĆ·”w/ŚI;v‘Ē>µŪ‚īŽ 7|w§AqµĘ× ƒōāŖ1øon³3n9üė.ćā>į('“S„KüĆ/“~5Ó`x¼ß¼+ā­bkm4m—~Ņ@łAō”ÆMŃ­æ“UdŽC ‚1øpkhŅ Ś}ÄjŃ\äŒ r pZķ½¢¼ŃĘØq¹€éUī łćĘzī—~k1‰ūŽā¼Ÿģ÷MÄq²*ōÉ­LäĶØMŽ£j’Ą<ÄĪ2sŚ»-+CŌ–(¦‰ŃV3¹”ē'éAQ}ĪņĘīę \µŗ: õšīüā c<Œ± źv²°čk2_žx.“sGŻķŒ×Ŗčs(>^NÖ^ĆŽ¤Īg'wšŅāKŲ.h6±½Ez]·†$Ń- wš)Ć„&'c^RįJC)žšĶoÅ vjcåžUˆć#Z ˆvóÓ9ėUīD’M½ŽzŅhŠĒoŲŽ€®ÉWŪÖå’ZY#wv‘žõ<½€‚õĪv£¼ŒTh±ń"…>µ›Ž¶›Ć0£fzć„\Ś4mäĪĮć_ń>‡k©é7šeä Ė“…‘*}żE~xėś-ö…­Io:²©,|Ģ`ŠĘ¤9ķ;WT#ĶSåī*NxQė]Ž«„ĪcxĖ;/śnśW$©Ųåõ;ä *+ź‘ĶŽʤ•mæ„Ć©jGoį?^ (ķI6īŁłsÅz œņ9Ė££qĮĪ C¢Šö‡j‰ØišĆ4EV&äö5A|Y©Ū]H· Ė’X’{>ÕP¤®'3éæ…>3žśĄZĒqópŲvéōźŅĻss'œĢÅĆWd)£žNä—„ā1©ŽsÓS­&Ž«~šäć5Rc«2xŽīSę(m¤6ū¦ŗÆ­ģ&‡`(Ų댃YJ=˜>ēć} ų“O¼-waøø©’&¾ń†Æ4mZę9Z)ms’s£·Ē8q—C”–ŹB#deåOøśVN§„i3Y*Z[•õwĆ«sØŲŹY<ÄĪß­uÓŖé7ƒåXōėq4f;Ž'ļ õ=_jF„ ¹Jæhe-Ļhš¶ŗfķd‘g‹.M`ųžŹčŹÓbää jHåg‹ŅDvŅ&żĄć#ļW/¬čzŚÖߨćT8īy6£”źW9ūU¤¶SŲŻČ>āØÅ,z,śŒĶ F¹ÜØm›–µ ø™źÉ`“'w_˜Šv…ćÆöiįŽ­ņ09-õ«„ŗōė_jVĘA ]¹ē‘\’ˆ5ŖŚ„Ōæyģ'ƒZ©‰ÄĻҼAc¦ā(’8ĪHć¢ėTŗ»”\@©åēę9ż*µ2”;nµw6gG)#¦yēwEõ-ń¦Ćņ9­W‘™æ£iļgŗ]6ń…ù’ōK8.•2®¾‡œÓŲķ°7΁›®*k³Z4ĆņóA”QĘĶ;FĻ’»Įķéļ\†±©<‘+Øõ5.GD]™ēĪŃŻ\¤)2Ć.2TއėO»–anŠ&Ų› ozē–ĒO;1m$×,.ŚI¾Ėyfź1ó«w?N•ÖŁjŚūŌK ‘¬HĻ$Lę^ɝó<8'Ū­tvv-ŗ—;py#҈£# ÓģŌ9h$y±É Śŗ_5Ń8A÷«z{ ęF”w|‰¶žQūŁ?…f}¾ī$qøJqœ+EøŠ“ė1åXČ8Ęk6ļX·iTy+0ł§ryN\ø•ŅY!.Ŗ§ Ņ“4Kū¹ŌĀæ˜ĮR3ņ“YĶčh kųÆRšŌh°IkmmwĪß,ž~§šå¬R+œÉnŽ„śÖV+‘öƒv‹†u™JåMhKohģ’ČįyąšDŲČŗ¼šĪgF‹ķ©Č÷śW5©k‘ČUc†H˜‚p{PĖP2£Ō†|ŅŅŸåXAō!Žp¹e+ AŚļV³żśGœŽ·¬õĖmA ½ ŒŽ£š8ŪCJÓL·¼™X\ķ‹‚A}Ŗö§įšÖĀ[[ø„räł!pB’*ŗp•ŽēOžÖā6¹€!Ę3»ROgkqj·`)”ä4Ž6Vz…½ĢQCdīü$ś×wāM*Ų(Ū<„yœØį}4¶>qŦsŃų~ōĀ;{‚3Ŗ½OµyGˆµydA¦\Bö÷nM¬>b?7ėX›FG%%„ąkUF™öüĒ+ÜtöķłVޟ¶ŻJݤŃ&I`Ɣ=h-JĘŽ„įˆm¬SS°¹žy˜‰<¼įG§5»į­^{I£Žśį£’EŚA=8¤ä>r}QŠ]}®ÜĖö‘ƒ€@ = j’h\>å†S:ģ*łæ ĪR"r5¼=įū‡ū>tÓ§–ū€,Ns‘žõįß|©čzĢ–ö¦ęŹé²ĘĒäaźxśT)ŚšWˆµ “—+ŌµŪGҾ®ų_ńNŚOYxcĘ6öšBčXO + ąn`3޶K¹¢…Λ┋ćŒŲ2ćMhAŪnū1Ę ¶rF yŠV¾ÓÆCø‡g £ÜõŖ°œ,W“W2Ś–“ɾ3·,:^ā²Ż]6y%ā£é7<äĀ±K[~„—z~«oiaŖi7RŪɉ+}ģq‚kéχ9еĶ=7ĘVŃ@ūȒ@r$üż­R†šDāįc¢Čž’[IB# N~ąóŲńߊ—GøŅõ5“6ÄĆ’|Ę_ö­h•ŠŒ;™Ś,śõ¤’ßHבŽNPƒŽ“­“ūŌtėød˜Mƒ8Ć#œPiĢ–§“ŽhZŪÅ&4…ķ$U‘deČߎĒńÆÖ4MoKÕ.muHć‘#”Ųw=sI»ĶcNĖĮėāéN“½–ŁĄ$/³vzżk«šēĮ]EŃl'šę-‰f* ōū Ė™”ĘGÓPxvé<<Śd‡yŒ§3Ö¾aÕäŌįæ:n¶`“d§ ;O<óųV\ćfÜÆ Ži7—1¤wŪ@€g‚}+įž‹$–·×³KØÄ›¼ĘLG@kTģbĪCÄ_ģŻõ…Š]Q÷¢ cø8=O󌊓Ż4P)†yX…\½ė`;?iš®–Š/®Äč8'õÆnš·qq4‚ҁÄx©q}7¦üeŠmtń§kśuÅ­Ü#ČNĄē€x5ē#‹[Š“ŻKIÕ`7R©F’'P!9Īv’õŅtÅŹļsēļk÷’É.žŅ%Ę„łĢ=säkčĶÄSÜ ³½»Ł²0®9?žŗ™S7ŽÖ:K«Ė]?ČŪp¶ĢœnÆ ųÆ­Śj–«§lŠāO(ČøO› ö?SY([qIčxχuvhäVińævשéŠŪ滅¤kˆģīܒø«1gQįĻfolžŠdćEČV*3ĘkńqµÕw\Ū(¶øĀīņĄóšŻ Łßc3Ą~.M Äśx–_‘[;Cąä{~uõˆ5Ķ^€É¦ÜIę6Ę Ÿz'„]j2\]é÷62ż…pR囿 k¶ŠüCgį O»ø“²Ō“7}—qÜ uhČō?Ī—)“cb·ĒߣėĆś‹ųoāē‚nb¶Ńnœ¤ö°ą™č=½«—²ŠüGm„ŚĖn±ŻŁ"ES‚~“%c^m,tV:DšCŻīūh£”ČŠz1Å{gĀ/č7Ś…īžo­dø–ŻŪ–øō©œne-ŽóĒ6^Ō5dH-.‘°Ģ#ˆ"øžļξ#ų¹ąÅŅ!ø¾Ń¬žĢŒĘFgšü«•§cHė~iśNµ¢Ł}†S<Į J]~ėõjńÆ“]FX…ŗO 'ŻĪ’ų9®…ęe)]XĀńMåĄheŅ•­åmŽW¦=xž••§ŚkŚ†£;ŌSrł„÷'ŸåI½ϳ|&eÓŅ…ƒƒŖē"ø?‰š>‘ā‚Ś~­o(fR7'ž¢¹\ĪØDłQōx'T»²³Ņµ=[@ž2¢M„łN\ōé\Ėh_ļ¬ī¤ɾfݟ4ƒ†įŽ?É£Ś+q…µ0—ÄóiŅMa®A%„ģsöõ9éšō=9`¹ŗÓ£·ń4‚ļV—d… ü'YT’ÜŚ4®t=×V²Ž/·Ē*}ĄzćzOC¦O/™Ø¦£ pF?Õ}8åW©c¢umO0×ü'£čóĶ(‚+…‘‹Tüœu®vĪi»…•ŃNÕœgڼzÕNČĮ#oĢ}rńA“m#żöĘė^ńƄ£²Ÿ]Šī †é·ĘĆ%ŸSėҹ9īt¤{/Ɲ"Ö}>ū\²ŌNø Eqæ4/ ^k²jŗPøÓģŸĖĮ;A[SM•(®§}šž_ƒšųJį.ļÕ%9]–įts×μ"’R±mZā?ŻĒ ŽRƒ= ż+ŗ4eŌ‰n}!šW–{£„ŖŁŁŽķ2i?Ż÷ؾ2čsYÆģķü¹ĪW Įō5r§¢f³ēėk©£”Ćuh8fa÷qž5é>’ŪE»yµ1/tÖCˆ¤@UøķžõžĢV>Vńö¦¶é£4šyä̌:D22łõ®Ė@Õµ{M"Ņņ)9¼Óˆ0Ż“óī9­R2•Ó=;^ńd:®ŗ‰ī—!nŚņ)5 Ķ6 w#Ē*ī`Ģp=ĶZ¤ŒĶ­"K_nŲä–g0?Z©¬i3XJ FĢIĻd#µoc)yœtZn·«źĪĒFÕ/r0 QnōĻ„}Cš÷öcÖµł!Ÿ]ÓŁ"rޱ:ī śVī­„Ńśkš£ötš’†m ’ā„›‡ŒÅ}™į_A¦YĶjöćģ2bqņć×Öąu~šćé:“séÉ(x\ }+ču²·žĘX‡·/Ē kH19w)ŪEHasåžøĻJÕh¾Ćœ•dn~µ©Œ™Ļ-Õ“·F“ŒŽ+Ō<)ökBž|`«`}h2‘‘Ŗ ¶ŌdkGżŁ?t×­ĘĪ„FHž“Ɍ™…’’ŽAåŽŁ««ā(`Fū4˜d£wŖRgD bŚ]Ē2ÄQoSŖg­[Ó5+Y·}«oĶ’¤ž†“HŅTŽ£JÕD3•ÉŲ×£ŪjV·–w0^"Įy·(ć”ö¬ä̱āśę”soŖąKo’8ŪJ”q®“Q.c,3Ī=+6Tbrš×Ų/&šUļ—vŹO|Uķ6Ie“ ,\‰ĄoļV&Ź%Ø<Š 6NŅØ@o܁UCwćščt»”9™T‘Ø)2Xd—Y7=…lh—"Žuµŗ`įsé[A9;žķ­›Z#ŲLO‘Ņ”+rN+hD9Ųé-üŌ$üĖķYęŪkō^:V„–ÖFA,.Ė 9ŹÕ!Øj,ńŻFżqøśZA>‰ir§ĢŽ2Ǿ:Ōo…m¢”“j£ńŽ“ ®“ˆf’GŽGQ_šŸ¶ģ‘į‰^ŗńĒ®»§ÄÓE<+Ė7L7ÆQI»+¢„łØńLJgš¶©y”ź?¶!9ļĻ”Jó`e”ztĶztjčŹHź<;ØOa{ŹØøaź9ÆŃ_ų­|E¢-Ų`÷)ƒ&03ōŗF6;­{B$Šn ajēŹ$ q^kū|uÖ?eļŚĆķqsx_Qø6Zœt¶&OæZĘQŌźĆ³ś÷Ńu;;““æÓåy“kØÖx$«)ąŽ8Ķz‡uuŅunTn„į[Īø&wM闐j6Ŗc;Ԍą÷ł±’Bż›ö¤ż›µŁNwWG TA瓌xaĪsŽSdgrĢ2OÓ Žb)÷ GQރoˆ€s{ó‘T50Ŗˆ"€ķW¼„‹ošO—ź( ¢‡VgėOäQ$óķRąiL³q°”>ƒœÕł k»9“÷?{ņžš}ŽjfŽŗgõÉ’ż“äųšßSż”¾ Ż'ü&žˆI¢\I(/u'åŚNxéō>ÕżjAmso¬Ē¤Äå`0WæēÖ°Ęk.dt„ašĻ•{g(;Y23ė_0ųļB–’Ne1“@K)Ē5ęIjʚ¾œ’Et&†;­>é µŌMŠ‚yür?Jžm?ą”ßGué¼@¶WPĖ汊HćÜ ŌöŚiJBq?-ēµó~čVPė7h åļŚĄ·Ö½r9*"=ļēåĻJIāCœ!g#Æ„t¦a1¶rtšU7 ü­Ę)ĶövbU³»­@R0źĢ (:Ģųݰ¦‚£¹ÜŹd,ĢpZ±yj6«ŒœPlhDĪ®¤†oīJčķ5ĖķēIÖ4ł#“Õmn#ŗ†u}­Ü©õąS:`kß°ßķ/£~ԟ³Ē„ž!Zmā‡Vzģ@e˜€r{ƒŒēÜś ū½u©õP—€”¼;šń±ō­&vS;mehS’Ģ;ūU¹¬ą½¼ ¼ rkĀØµ7¦|kū[|Ҿ%ü>ń/‡uȖ{vµqg pą2zšžPõQųwā_x]ķšt›bfĻļb9ŚĀ±’ŗ:”ŲŹ‡PÓ¦Ÿdóż“<ä¶5Ūi·–V ³AqŅ(ŻŪ±ZR‹¶3|C%¦Æ‘w–ߐ03é\]¬÷ZEõµż•ŚYMīŽĆ;W<^­cšQ¹ś™šāk[e>”söEČEvį˜‘_jk>0“ĆŌvrź%Ęe‹Š‹é]FėśV»żÆ¦C<g…†T‘ÅM-ØCö¬nrN6:Ż*K©v„—hõķ]>±§Ź ‚R>Ū QŹżkH»£1ŗ&ŖtēŽŅxϐßÅé]öūy™†ąŃžœÖ±•Œ[lR‚,e‘‘бā=Ā]&źöĢ<3œ)ž• m.ķŅKĄ²:ƒŲt­ĶQ³‘žĪņ›8ü©"÷ˆ4+MjY|``ą×9mįK{Š8QŠėIÄŽ/C žŹ’%_6>?•G Ą“RvŠŠ•‰”ŗ—v ^ąŽ•BŅ8­ī|ēĖōgµ3"õć[]L<”øē>µ[ģß:øĘį×'ŠĶh„T.W?Oˆå$cķžŌŠĶ«E¼9¦ ÉDe˃APZ‘ßjGģ­÷-÷A=kšš+›xÅÄj [°xź)šø“Ś\Ć6ĄĒ(Ī=ėŃōk $ņ®d?Zq•Œ„jßżÄ,” nøž“ā –9T‚3Z©\“ŪOY.öڧԓ•„É屎Cޘw¬ŪKq¬n øN„ŒóYÖ×6ÖŖÓ6XḖ֗2Ų ćÕžŪK “§ŠūÕųgy įĒ9}ŠQ-Ūxi5Q™]–ēŌŸ…eǤ'PxKˆåqPiȎŚFŚŅ:fµąŅƒ’YACŅ‘‰ MA,Q—Œp@ķU4󳆎EĘxĮ |ĘÕ¼¶Q#w8-šu„Ü$‘Hß1UĮ‹œÕąercϹ®KÅ6OØi“Cn²‘Šw®ˆŹŚ£Āü;”ėŚNæuk+L- Œžµōʇ ČČ Īźøī)¹ÖŁFl¦…Ź2kbģĮ4D“Ž3ō¬Ģ9+Ļ&D!˜ō8¬Ū»$h1GÅ»é@"¾gŅ.ŲŽ8نWMkØĘŃRcŸj|Åūų ”9$!=GA^­£µµķ«Iē,€ ņ9®ry™ĒkqŻE9[/.Bp{Ö­œ³Ķf¦ź0Ǝ”Ś­įgø“WM‡?+UUYm'Ż„ēµ ŚŽģ¾Å•€ĖėUļ'¶@®’+äóÖµŒlŲ¬rʧäĶGŖ³ĻīRa’*€Ā¶¾HX­Hč+|\°‘ņg“é@fHå‡z”w`Šk[E,@ɽXqéX=ĄbŁAņ{š*do+ ĀõĮ=)jŽ×{‰bP®GsS;m‘Ć.Öīq֩Ɂ=°‰³”UęŖŲ¬Ļp"vIąP¤ŹR± ĶŹ[ę(Xm}*”˜ŗąŽsB•‰/Į©[D¼‡,F0GJŗ[ać]ĪūKFźøüųĶ^iX`²ēéRgE`5ObjįÕ،óčEk‘&O|«*™"@¬NqéTZl§–YGևTĪz{™-Ł•£wĪpąp>µƒsx‹œ° :ÕFĘW8kÖPZ¼¶·Ū.H*TńĶy߇|_ŖĶ;Ē2Š޽ku~‡³iĢu(Ģ":a_„püśĪ‰p°F”!•†r~•W±q±ń—†~x£OÖ$é’ZŪÅ6QńĜóĒjū³ĮS\.Ÿ„ģęĒš~ŅĀv-ėŗ—Ųī’Žwh•Ž0ūßJČæ¶KūwI#&….ØĶžQ«ü8Ņ/®Mņ”‚ą.ĶįFOµrŃx>=6V‹%¢ĻR2 _8‰įĻ éƒkĖ ~[u qšŲŌō‹[_Ėhˆ9ąqRäĘpiĘFY!*™8÷Ōųat÷½X¢ņbŸ9*Ų±õ©&Wčz}Õķ’¢FT+t5Rw¹0n‘ōēµO̵¦Łź7”P4g'ķŒTŚ–‡ŖI –ņŻÄ6‘JE(éVŒ±}žY—zńÉäWaÅ䈚ĒœÖTŎŚ9J$dDĖļĮ«³čFKRņøEoj žØ¢ī t ęČ徕ŃĘb·ˆžI;śP“;\Ÿ2,¦zб3oR#?/^j%+U#bę9…Ķ9¬ŚŲĒž .p4-å{0$2ēÖŗ×a»‰"•#ŻĒ8ēń­ “±uˆ™¼† ½żEbIv°9ŽA¹[Ū„s”~Ój¤®UœėQMx‘aAĻ” ÖÄÖŅJū¤ŠBTr)ĒR‘RC·Ōš”M{³^gĖ‘<ĆĒ5µ“um$1SŚ‚mbōŞÕDޤn†ø[ŲēȑF]°p9“|£ńYŗĖc=Ņ;’œFqųžÕóģž“žŲ“Ōć[ˆ'_— zŽ“v:cę}Gą9®­”HŲ8N˜ź+Ū”ÓŅņŁ'fņfź8¬„+Š[[ŚD“a¦\dŒ÷Ån$‘!pcĆ&&œAz€śt®“M³bźŹN@­c¦2wśĻķŽ¦5Įõ®oP2iLŽš‚AĘįVIĻŻė+"3ÆĻ × ¬źķ$d[ƒĒŽö g‚x·S6¾eĮœQÜżŚĀš~¶<ÕäfX§u SfŅ #ŠV6”Ŗ­¼Ēb² |ąöö®#c2Ū_° ˜±Éœķjū‡ös¼šļ’ŚĪ9,­5pĶ.]ĘsžzÖ°cjĒŻn•¢Ü„ž¢ ŗ zW­AįĆ>œ·ö·‘;«ķhŗ0µ¼fc(ē…/ķ-ŌĮ0F˜`šF+ӛM¼½“ßkøøéœV‰v9¹O.Õü:öR“:Ŗ:¶åČĘŚāõ=~xƒ[Ź@8ŹŽÕø¬qZ¾„öˆćO+Ģ“ųO Æ:ńmģm£\Eż˜nåUݵW,Äv”ĶĻ šļ‰“Z·hcÓļ4ėÄ%dŽa†ŒōꠛL¼Žļ÷—2BŹäąq»ėY¹Xµt0Ž_DÅāø‘XćqĮŠŪMØŻC¾gm„ągžiŖ—*^c„ѾS8ĀÉüMŽ“Ż;T»µ™ģՕķ;įJ„#&i>™*ø›sÅĒģkgLM=åx–35Ęb8ęŗ#+ Y¢|˜Fä9ē®k£±ŗ’2œӃŠVĘS}¦EEŪæ Qø & ’y½*e±™Ļ]i+–6į^`2Ų=}yv±ksK#@a‰qĆsڲ+™ži,WBźI$…ĻN+”¶“kČB4™Ē ø`ŠĘkSkō:MDŃ­äXof™"Ū÷”ī9ǽI±4ū’–ūׯ#«'Ų­Ķų,ĶĀ›§ˆŖq„Hڜqģ!8Ēz¤Hū]Hn"Ł[åĘqZRß4›1žI'½l¤†@^ābCӓ€*厓r-üņĮ›œš„Rb9õ¶-p’Ŗnaņ‘ź+ŸÖl>Ė9ó”Ezu 2¹Äj–ĢCyVüélŅ×UŒ£»¬įĘ1ƒõ؛čo/“6ó;ɖqž¹åq]F™eµ“KhĀ=¤õ=O­gä—C£Ņ®ŠČęxbŁžøėļ]\ö¶÷VNń•|sĄĄ#€Õo£ÓĒ™$sJ£žozó™U9_§­O=ėX89‰@5Qm‡³»?ķ{OŠtķ6ķƒ&»#iäžšļé\Ž1ÕLoy±twC–öśWÓ]H&užųµ=ݧ‡ĢślqB Iøe\g–'æjė¼Eą­Å0ųžÖÖŹŚgKŒ{ G3V<’HŠķõøŽ}šČŃįŌ©ąõÕ›ā źš)µŌ>Ē+ZĶ0G(„°\ōŸųKNń%©†KĖKVE˼­ĮÉ…ļŽk;Vų{œ·)ī•=ÜlĮ'E;qŪßҰ2Ųņ’I.ĄÉ™Ų88«všē†5=Ŗ\}µ0T«d3węŽVŹäŗ;üWŠ Ä:N”¦yon9»å żÖĶuŸ4Ū sGk=¤×‹¶Utå¤F?Ļ­Z¦%I£Ęü?į[2f`‚ŲoÜƱ>µé—ŗ[źp‹X­’uAµ˜/$}kS”hQ“Āw’”ŌLŽęŻv`Źs϶yéXŽ/¼Õ-åÓv ~ō9 ŸN1Q)£©Ļ}j|¤–”\@ÆŌ®5&ūņoYWo˜>R=8؎ę<Œ½ ėߣ‘47ī ¤‡Ėˆć=1ļ^ƒk¢}»LšT›żBS`˜{Žżėcc£Šn¦Ó`śœ‹t •¹ Œ ē½Z¹m)Į·v·u „9c×ó  æō žŚ8Ź7a‡_jóĶ6Yģõ)ĢVÄDĄlē’’CQĶŠĪNśĻć_ų‡Kš6‰«M¦ÜĄ±ø†K‡$ŁŽĒgžł®~ÓĚЬ-µ-;X“O63ęŪČĪÌ«c¼SµÄ”sJĒįå֟u¢ųŽŁļE²–q¶BUņyżq^ó¤~Ņśv‹®Įąæųf)®YD‘_¬ ²(Ųłz™S¹J™ī-×<,lmõĶ2žŚXn•Ū””sÉGjłgÄÉcÆ é-턃#,‡ę#޲ö,\‡Šx–ßģzä Æ"Cęf1žōü«éėŽ·ŅėöŃƍŠ>qµ»1>Õj,žVgźžšHÕ_Zµ²³Õ­ Żö˜ćÉĒry®/ ‡Ōļ;U³”‚Ŗ€ óĮõęµAŹĆVš-Ņ[M‘+1Īʐu†¼ū¶¾!š_‹E¬–Īm f ƖVĘNrzu”»³>‡Ž8ÕĪųąĒ¦Ļ§ŽĖnĘo/Ģ\esžæē½Ä:'×åK‹‹y ¹ņ£/¹ŹŽÕŌ®c ½¾Æ«ŪHFS“ƒßéŚ²“Ņ=&ŪÅÓiš\,’ ®ģ’+š‹Ē֚ę£-ÅƒĘąņēqŒśå”šhś?Ąß“Ėæ3X³°.Dė&ŚF2=łź+āŸÜźśGˆēøÓģį‹DšVņ䉲ƎüćŚ¹§S¦™Ą·ˆ&žępZVo1Œ·>õŌčß ­‰4Pęé7Ģ8_Z橉q= tśGųFŽßFŠKHA\`zūׄŪ2̤KlóĮ漜F/]Mż™‰ćt€ZĀ|øł1ŒsŒWįoÜÜ[«„&&bYTżŠzW‘Sif–„ąKŻ5šŅW ź©€„žõ³ā]KY\ųvh"¾@…āJ±ģ¾€Ń …Ū”óF£©kŗ_Ł’ŅXtöÜmą’ žUŪi^)K»+™uūk€Į‘p2¬@=:óšõčl)Hó‹½Gké.m Ž+|’QWhÉž,zÖ]ƚš<+Ŗ -n`prĆßqļ^„9MÖ…«j•Ķ•ĘžŽ×šcd;]żF}ėīŻOCÕ5O[]j–E$B#ó079$1ĘI¬köBē>NŠTмH^m(ßĮ£rN¹Y?*ō?xĖĆ~1šĶ«iZéś¢nIWRlŸ\Ÿ­}É/†thķķcÓ“{{HR1Ņ<±cךq;_ x=%š(ä‰BžA#€+×-¼= ectĪ;öÅ\b`néŗ O8…BF‡Œfŗ‰-dŅX­Ź…PzÅmÉ}Œ-Kģ· N~¼ ĒŗūTф21ĒO„lš‘č³YyĻ„¼ÜtÅvqź€łD€9ę—22”m”ĖkZÜĘéä ån\÷¬JŒ¬oiį>Å<:Š?šĆä8ć5‹”I¾Ļ1Teū¹<‘A\†œŽK$[Ąe^é]¦ˆP²µ«ę/CŌUGqJ: ķ„žDhHtäö§Ē [æśb½˜śÖĒ<÷:­[žH‡ƒųH«Š¬īę& ŻHō­ć±«kՏ12:q֙u¹‘„Ü0Ų錘 ĖhŖXķŽļYz…śF„ŽŻŲĶTWp<÷SńÓéRF—0—·.åtõ!ńüLč–Ņ|­ČoéZr£ELI|Lņ‚VvICš£®G.æ¤\ŚÄöčķ ę «÷Įü…e5ŃQŠž`’næ†:·ƒüeØ_ĆmolŅ0•ŠĘA”’§@+ąS–ģģ¬Š“Śŗšš#š”×ITdŸ\õÆ„žxĶ4Ėųbŗ¹Š+W+Ü{ēŲd}ß`±ČŖŃ1•s÷…|ÕńūሊīŪŖm£X¼Ö,ąŽF÷ØØĪš'īüöńGÄļ†Šü/ńF§i¬x‡BP ,ūd@oSŠWėĘØ“‘a†Ękбߏrųwā™wÓ®ö(żŁĒÆjśĪżcš„O6فIWūń‘‚į\ęsGńĆ’®żŠ¬~üx_‹Ņ" ¼Y–y#$¤7yݜtäüÕģ61V$”Ę7!éż+£µŽ:°9ł£ UP„Uc4@N"ŗ”¬p“VwiįP6pEEēŌØäŽ<Óęb+ł1ł”‚Ÿ8ąäśSž7;ŒdL÷5j@:RŖ€cč1Ҧ¶äRĒ×J£H-MGŁÕ›=N@÷©–W••÷eĮÉĒ­ ”ßsŪ?g/Ž ż•’h‡ß<#xm®m®cMV5REĶ®ą0ģ“_čĖšĖǾųŪšćĀ<%woØx{_²Žę'R0 '8ć$’~¹¬*Ęń:•‹I77:=Ąd•ÉĻ_„dk¶1Z[›§Et0#8ķŸķA^,d`× ¹$0M„”i-Ū$gz΁óv:mŽ9pĻ€ÜHż+Ń"Õ`··†Ż%zmĻZ”ŗ %Éą© ½kF ČäM€p:֔ÉK”GVš=25¼ŠķY8ŻĪø»Ÿ‰{O7“$LNŃøõjŌÖ4śLæm$I£|ņ W‡AÖ-ēy ¬ˆßĖdćéYJ=FéŪBh­ŅG1[ĆNN ’z¶,lķV2³ęĪć'†ļY†Ä‘\KgtÆ„ķ8Č=k~ś+m^§ŽÆr9-L\݇XĘ ķ»cņ5Ņ­ä ˆżÜv§ŹĢ™ĪŽ]¾ēWMäŒō5ÉC©A§źQć¶wlć 4¹DußĻy$ävÅrs¾„ļ‚]p ķ@VóĢ@̬²t­Ø ½Ķ¾É¦q[ŽåÓ”K¬>Öŗć­z]ŠXȋ“¬]0Gjęn„j`¹!dI×ÕZ‚XŻ­X7`žOJpŻĖĄO” bøĻxĀÓB‚’tEo¼$8Ū5QW*1¹^ĻÄzV± %Ō|}īpkØ“Ń ©¶hŚ&&‰FÅr2ķ¶”’«Ć$[“‘ZZU¤Ś[ø‰‹DxŚO²–Žęfē”’Īgó­äXŅŲī yć֓WŲ a¦A4­$ACgęÅYH‹&7©oZ! pzö£†ēŸķ·1‹p~÷ ¤Šu]7UœIÄs3°÷­lzövļ2@Iԁք¹±[ŪbŠ‹»ŌŠ)żšQŁn#+Ö­Ā°13ģ§µL€·jĪØŪā÷kR;=H1®ŽüV 2źĻ(®§+Ž@ķYxāCØŁŠō€ŲÓ$ ‚CŚAå,\ ۚ«›&­…WĘy«‹Ø+*ųÜ9Å+ S˜ZĶ竜óšÅ{øŚ4l‘ׇČ*£\…‘G=ĻJč­Dā5+ó‘×č%ĝ—ĶįįMł§*셁}¬:ƒU© Ē’ńŽQį~;ƒ[V·«ä€Ć?…lbN5 Bž5‹pŠOž­°Łīh]&E Œ¢E­p¾# "Č`>PĘN;S‹±qGĪŽ0ҵd»‚E’?2§éQųcO•Óķq±ŽVnA«ö†§Šš܏Bźæ(ĘEtĶm<ŖæīˆČ Ü -?Eµ’) Ž qņŒę¹>M6ó"0Ī)!Õ5-;W1Į"ĀŅēŽ+™žĪKt”C$Œ™Ęo„kgŹģpŗŗė9’ĶD‰ŽPŽI©¬¢›Sµfø·ņq°Žõf‡S”ŪĘĄŁH¦0;Ņ“'ŠmĖ·Ś%gwö “‘‡ØA é¶³¾O8“…Ęyōƞ¼A­-­ś\Ų̦aĒŹ~ķiw #nÓĘ3É hĶŽē­wžńž•ršZK?ČĄŽvąóTāŒģz\•¬ö¢m:ķdSÓiäÖT—ŗĢX\Ȋz©¬å Óӌ·Wp¹•‡gƒ^†m¼Ø7G&ńŒÖ3@P]YXį–FQŒØėZļŖKD“…āʬĄĮššÉ™!Q“ŽxŖÆ×˜!ĻćŠNVÜjcĮ?>:ÓĆI& P–Z‹Ü …YĀ ō¬»é'„d†ŁŠńҦĄPo9•LD’Üā­ŖĖņ³‚ķŽ+Xģ)l[‘š,³Ēµrń—Ü8śS2H姉†š ^˜ØLLĢØ[h'Æ„&ģlléė$$¬nÅ:}k^’Eŗ»€¼LQF⧜ Zu¤ś{,SHI ÷«¼‡P”+G‚EĘ)ó!J$w$qŒ7~9¬4’¬Ćø„)UŽY½ŠµIåŠo²½ĘJäĖc”÷Æ/Õ|cw$+EŽWŽ? Ī훩LJtӑL–īØČąÖÖ·©½»4@ ķŅ‹t ģqV:ÓĢŹfrŠ“ĆŌׄŲĮ‘Ć2–ĪsWbn ‚2ØĘi.¤»·E˜!xĻ^•¼"J¦Ž'Uų—{įķĘć”ūÆ^Q揎Z¬€=¾”“8bƒEiŹŽˆŠG7įoˆWž#yqlАĆˆÆC…škVóSŹr1ŸZ4Ct’>jų‘”ĻŖ=ÄpN`*ܐNy?ō›Ķ#^oģ֒+…I½Øc߁ō¬„S (£ōGĀŗ•Õœ7{üž>zō9/®­ Xn¤šŲźk K ŹF €Ģ‡9ČĮę³ītˆ‘£.§°ÅA“‘%¦K”w(?-töv ˆR9ĀĘ?CA&–£ä[v²”{½p·kvņ²Č­åŚØ,>͉#Œ€kŸŌõK›øįĆc“ÅPÓ5!֞ęŅ57°Ī{f±¤™³Ŗķ9ķŚ²’CJäÖŗŒ‘œwv­IŸĻ€Č oī¤Ō©÷<ēÄķ)ŌeeƒšņoŚŽGɕνĘ605;īŲHIh똻·Į!T€£;PkMō<ĘžÖŅĢŖwöŚ{×ĖŽž^+« N|ČĮ#ó”•‘šÅ’?‡oc¾XŁ”f'rš©Ÿ_ʼēHŌ …”gE™Wi<=g4)-½µżĀµ”h³÷ĆØõ-.'G†XŌ’»D™¬*“sV^ŅlM“ÜĆoó‘.FwēüŠéą’8męHe‘”_¼s‚y®iK Ķm2s,«"®T 8­QŖMc•2DF] dŠx®U‚Ē*.8ĒJ§Æ—¼‹dpģLs“u®*°7„ŗxóD0^ŅtV,+Į¼Q<^Lņ8!‰Źsļšētõ7Œŗ>źŚœ–÷SÉo!0:ƒĻP{ׯüų³©|:ńv“ØŪ±’Ę\Į2ģGŸćö>õŃ9©ūGįoŽńFƒ¤]Łß5ķĆīI„g 8ś×§h¾<óf'N¼Yc{{ÓöVŠt[ė[뤕¤Ye'ųN1_Wx*s¤^S¬ÉÓéUīsÉ[Až/šźė1Ķå°·˜Cc9öƚ5’ė6÷²DO ŽõŠ©˜ „I¬3B…Čō®jėC™ī¤3( ĘĢzVs¦5+\x+MhXŃŁL“Šø9ō5į"šĪ¹o;Åj’Ü6K€­’}³ųW, tÓ©¦§Øj:͜/Śą©ä°ę¶ü­Kqx­qpÕ¹W< ŹÅ9i”ō”mX¤¤Ę#qœ©ĶyTš5ü“¬Ö¬¾J¹ąæZčF.'£hŠßIn«w ”öč+e4¦³¦·ĘT†Ī8"·2q±Š[^[ͬløļTĒrŗ˜ÕWœ1“]Īy-D›SūĘÓFĪ„±ņ©?6óV…É”)\z*‰2ާå°}›Ÿ8ļļ\¾³syKG1O”ģ=«9£x£˜kF¹ $Ąy«ķUĢG!ŠT,@+Åa3eįw [FTG#Ø äŸ˜ŃŅī]„Q-±²?+!8ž“ooŖZŃ×Ė#8ĻOjĶM9™Ą%j”Y™”>‹ˆŒ ć²>É“ą©ß=éņ04,ąŪ#4ˆ?óŅ®\\*£ÆĪ"ĒJØ\čyåö«§XÜŖĻvmm¼ō?JĘÖo’PZę§Ż-ŸjŅĮXó×·@Ņ ÄääšéģōŪsFى—ų»TøÜŚ1±Č{; &ĖÄ8ĪyśWGż„±*[G"mK„»+ø±É=Å\ņ4‰ŃkµµäĄž‚œcÜ„+V„q{ŻÖtoŠf™«¼.‚BTō5¤U“+چ:÷‡^āI5+WyÕcĮČSÜ~uSĆ?£ńa¶F¹·°½ß‰R@~U­} äŌ©Šś2Ēąƒ„YĆmā·ū°#R®£¶3ĘkŹü_nž°6Å=ĀG'–¼‚ŻqϽ3“ڶģr:£ž¬—dļł'fbvŒV·ÄŸhö>]:Uóā’aóæćYĶr÷<§Įž exēŗ†b„’ š?*ļcÕæ“.M¬W¼€“ĆŒqY Ē•ųŹķ~Šm§2e›)?žŖå4«?ģ×IŠ#A’ądcā®2±Q•­CĀ~¼‚=BžŽķĘłåY$nŲ·JŽšlŚ”—‹¦%Ō7QpēqJŃH¾sÜ0øŗŅ<ł­ż1Ÿā’łüŖĖ7"Ń;{·Ō&r§Ź8!£9ć>µˆ|<Ÿgk‹”žXŠ7ļc3’<šKFßT ē˜ŌeJć;†xükÕ4OĒo-ņ¢ ĻR}…d—RW‘ī_ ~#|3ÕōĶcį_Ä'ˆyĄ¤BX€`ī HūŲé^'ńöK³Ó“ŁuæxÖųųqä2E Ž7Ę p¼vķšŠŚü®ģéü©ßč¶‹©ŻĄņĘ»sdĒŻ§Jó’ŚgöՆ•«[YIˆm‰k{ØźG Ć”S5Œ»˜æüM©Ml_3E0"9#9ĒdgÖ½;W’Ķ@»ŅĒ äģ. ®(­ŠóOß<¶vņ!ŽŚ\•xveŽŽ„MįĶnĻP°M9§ˆ ¹1“óŽĒŠ=ƒĆŚ,’b‚É/'ørAcĪ=+Ų4 Ėmle[w’€¬cÉ_„&ɓ:ķKB·ø²³g&9ÖMŁĘ7qŠžU·iįOݶŸw¤ZIw»ĖŽ\{䜙 :˜’~ Ś'Šü-u-®š‰ūūy¹ć=yėü¾µą šŽøŚÜ÷·Ö÷¶ NȌg׎k8ɚņž«ų"K#”mŗĆęU#ÆÓØÆ5Õ4(5”$˜ĪC[Ø’ńķĒJš—»‚łķ"Žd@ĖeąŸÆć[ES‰=õż½ā¦¹‘īRõÆ|ųyń!Ņõ&¾‘5O•H8źrO·£±Ō£Ń›ŚŅĖ«Ą'k¶…ÕĆ_āõĶ_ƒWńd½mŽęhāGb‘¦Į÷Ę*X½™Ąųžīiµ,æŁÖB]BļźyļÖ¾”Ņüi~Éoqjn.{X ½rÕŌj¬Ųų?Ć~5²jU¤wń‡żā. äwĶdk? ō’ ŽY­µ§Ł$ˆį ?<ćŒ8®^f5޲–wW±¬QlįŪ‘ĄüE‡DńF‹}ge 4R.Ł"o™[<„Rw4·cåoY]išw¶]^ĆK’Üd’ž•ŌųÅėŽ]"śŅÜłhI’3ČlœL9?ˆć6Öf GŁ&3µų>µąörėŚĶÄP­¬ŁÜ>cūĮźx¤Ż·)G±fūƚōwÅŌ¬aøp€~‚­Śßų\:}“(ÆÜZIĪ=TŠć­4ŽŗTĻ©¾x<Ļf‘O¶³mŚ<Į+č]į­¤7I,Ö„Ūø¼gŸS_7‹Ŗz“©ž©¦|"ѧµ¹¦[Va”r¹Éō5›wą&Źž¶C2 …·ådü1_;^zŠ¦uį?ßiółÆĢ„…F[#­xöƦOį}DEk“Xˌdš¢ø%Uģi8#gNŌŅXĘåĄĢXd~O_Ņ“¹­¦h§GøžėĀ㨭čLć«t>7ńü²«=³[”ĘBŸ0īk”šµÜ÷­¤¹k€’c‘žßʾ‹ /tĮ£Ņtß Ē&³ak©Ķ …“£{ AĆØ’"»‹^š4z$Šā+æ(G$[’vqß•wĘDJ,ņÆéŚnė»(ŅSØŒĘ=+ļ]+ŗ“xbŽÖźÖ8mPsƒ†lu«–¦gˆx”ōIõhöäóņµäõ…ƒj1y[eĪ@ĘŽzz×,¢RgźZŅG3Ėē*"äEa¶µc4Ū/n ¹ź ž*č„»ŌØt){h, kšń¶įY@Ėō? ü>ń—5'Aqk•Y†Ā7.:f»ąŽk6}ךąp‚ź;ĶRy”BÉwWޚĆė]…޼ C:įø§”\‡®ųzĆM+ŠĘžhąØģŚW‡lõTH‹ćp÷56Ł¢–ɧ·–¹µÜxr5 Ö)‚üÜ©Ēj³ K±Õ6’öwJE¾nXv÷Ŗ^+†v± ”¤QŌŚ1±™ā:†øÖĢ|®ćīŌ—^$³ū:H‚ćļÅZFŠģŸĀ“Ś^jI;Ķŗłr+Ū®<-bń;Ś\¬¹ėÉ©•>äŹ6Üńæ鶎‘n×k¹UœgŲ×=oØ ų,kØZŹQ°Ej>ŽĀ;ŁeĮż>•~ÓL—Oøób åć zQcxnp4øµ»U…(!ä‘^eg¦_ZYÅopŅ]\#­_9ŠŽs\¹ƒJGĢ€Œgvvæ ¼>·†iś”Ńŗ.åU8$VžŅālś"Żņ6ˆ8y€ä÷”’4ŚŽ€:ōa޳›1”Ž[[ÓEČI••}ZɀEŒO ¶ÓŌqY™Ž}ŸK’Õ&ŠFiqŠžŸ…yę«n‚ż¤šqøŽ ×œč‹+Ły¢h勁Ćz×Uį[5·BrĀ÷ŖDJW; ¹!Qø*ęÆ.nƒ§mź>é±”£r¤^*oMmŗ“+0@ČÆ[²¼“ŌžŽžÕ¤øÜøĻ„o‰ögr=ƒ'ēī*µÜóĮ JŖĻN;Zfmt0?·Ņ[iÓĢŽm€ƒž ×–źzĶŠ‘£ŽĆ-Į'‚((Kfڊƒøw®] >ńl¤tL6ÕƒtŽŖ}9ģĢ3;Iä·9Ē»½īŠB#”"«qõ÷ØsÖĄŃń§ķÕš?GųæšŖęęÖXü ńž»ū7|ršwˆ4Ē·¶Š.oÄz’nŚdLą>œ×õ‡ ųŠĪž×I×l^)“Ūč#¹FC•ł†p§ząœÆ©ßS°Ō%“{}BÉÕößZśÆĀśõ¾Æ§ĀłŠŒJĢ$Ÿ?mŸŁŸHż­æfŸˆ? nģm/µųm$¼ŃžWŚR` £Ÿēķ_ēéć_jž×|Aį]zÉķ¼A¢NÖ7pH0c‘ ^”ĒZ֜¬ō9¦xūĄFń"ɃĄĒLÕy `1?+Šź‹¹ēÕZ˜ī¢7*Ŗ2Ć?/\Ō+ o¦_0)č;֜§:—A%ˆdŗ¶ęķĶF²J‘Ąć>•(±ĢѾÉUėÅ\–uHÕ-Ę̌ę·7ęC£m€ s r¹„ł4ÓģjBĀå&¶–$,čcŽ@=kś’ƒ~’lł¦Ņ¼KūüBŌķģīģŲŻųhJēQ$ģR{ƒ“ŲšRZqgō­ÆŖ¢[ė[Ī…ŠJpyĻłķK2XźvaÉZŹž½ń^UXŚč£ē?ų*=BĒRŅįd]A#im™ņ~eäҾ<æK»›gKŌ ß5µģ õģqśćš®kˆü’‚‹~Ī×z”ń.‘gghĘc<,~o:#Ų‘žxÆĘ(.žŁjīö¦V`WÜZģ¤Ģ¤R‘ZAŒšåķL(ʌ…BŖœć5ÖrJ=óÕ²”#ئ2lfł‹‚r¢™ƒB!É—½I+&ńeóW-¶¶ŽĀrÉ4qą¢śŅF\Ł*Ą‘ޣͣ±”;9& Ų$qWm„‘eXŻ„hG$Štӑ~iŁ­üŪ[™m. "X叇GSTö¤žsXՍÓGLeŌżWšä¶7V_BDlß,Źó­Ėż ʞ]“ŖI;ć'œ{Wƒ‰‰Š‹v°ø„ ĘÖčkÄ’h?†ŗWÅ„Ž%šFæj/­ž7š ¶pS€n¹ā¼Š‡U3ł7ńĀi¾üCÕy}‚ŗóƒŽ“ģ˰\£$£Śs"ŁBĄ€ĒÆz”x”!o1Hķš YJĘ"ČĀ»ŒÕūhåBPīÉ=}(µšyRH·īĄĘzį~ČEĘQH ōÅr3v6¾…?tÓ¦ŖŅ\K‰™ĶCœ@ż›4ćń„cĖTN‡kč=ė¼Óo£ŗŒd«#u"©; FĢ”ām®¬LPO‰Wœ•äx>ńgSØ$NĄīW ‘ŸZӝÄė"žīŅ%T*(äŽÕ½ˆ/lķ”Śe• Į>•.}L£už—rš†›r`»$]ŻFyćó®£uŌŪv3¶Éźfc$#«  µĻŻxŽ *s¾MŒ#5¬cmdz°¶ńµęž×6cĢ\}NkœŃ8øImZh¾W\–^„Ÿjń?2KÄ2ˆŻ«t"īŸxŪœؔAükæšÜ‰|ŽmŁ˜cµ”¬{¦›¢ŗĶlFĆĘŽ•Ż„Ō-Ųn (g½c)\ĻœŃ»Ņ5±:  v¶Ś…ō±FĀCŒ“ž+*ˆ™“–S¾fP1Žżj”·-īåćž2+#Toé—2ĄńÜÄ6t gßE‘ )‹¶+)[?]Ē*kR „„„TVÅK@h©GRŲōī*+ČU‘Y•X`’õč@a‰m”J/ €]łų@£h^E]»ך„p#¹Œ`3\>Æ­i»ŅBG9Éā—(õf=µµŽ¤°{yć#pŒžÓi3ŪN–ī«ōĻZ#‹5.µūB®Ķ­Ö­ĻØÉ, )>T„×ü/©k/"Į$`qĒ„fXü;UF[ĘJxĮSuN„Ė0|9{˜å±T7dqšō{=¼&Ł‘Ē5”ŖĆx—Ą:>§ ļ˜÷v—.æ»hĻ÷Æ:Ń>Ė£j–ņFī,żļā÷¬‰¹õ~—töV‰ÄŪ·§„>ęTŗFS'ØĒj ¤ĢŪI≛(é[/šÜ:f‚Dk·8č3Vģīln0ęŖ*ģ„jNšTŽVN9ė\Mōī]Ü¢)ĻN•²DL…'.ÓĄ†«]iv×jÆ4¹<Š ‹źd6œb.mQÓŖ“²ē"Ńõ$V šĮ‘µ„ņėŽŲéTŠĖ¼ĆrzR• }kJ{µ%£>£3^®x*X®e“ķ¢;sŃ=€¦b[eŒÅ ū§śÖ6µ§ŚG>K„Dö.ž[Ø@(O9#ˆńóž½|ć㯠~ż.ģŻĆįGZĪę§Īß<5oā ęĪ{fK”#ŽĘæ9§š³Ē¶¼·¼8ß°ö5õσ5ø’ĪCož@=ė™K”Œ§}DŽäŻī/Ōu¦Kclą9E-Ófŗ"ō9›Ōą¼AįĖVŒĢ°,EsøŽ‚¼‹VšŽ² §O)<Äf0xϵ6‚/S€¾moOŻŻ£ÄŹ98į ®2šµÄm!„!@Y²+”ĪˆīxLj¤ÓmššĪ’0b Ҽķ‰irÓŲ¹UÜ 3ÅrŪSŖ›čzLJ8ÓąŌɝn öb)PŠGwĮÆ-„+oqe=ģ™ž°ŪUńwĀß?Ā—VšŻ·™p„UX+*¹ī3ŪµG2&QGƒ\ųgžׅ`³G<2!ķōĶN"u^ĘņA,g±žb³g,šŻšKOŻĆ¶ŗK×b Øį’ z×Keį‹(mÉnÓl'{š¦‘źxϊ5)¬īäKyWģ¤šŖ1V<āM;EŌĢņÅĘē%¾`µ¤|Ģd|osyā‹}dŪkE«;F„#!XĒZ÷OkséhrKÆĻœ 3h1ž.ųyÄ;ŪmsA“ģśżøi¤g`±īöb¬Śź:ö†¶–|Ÿdņ„M™7oĒßśT9›§ŠņÆźŌZŒ)4×Ö¢YB†üÜ°?§ZōīŪPÓ„7—Ź·B¢’’ADgÜÕÄįo'ŗŠo. w·ŻņĘN=Mv> Zņjé³Iq*ካd/¹fV9?GŖA)lŽYU‚ūkĆś,s_%ĘŊuĄĪ0Ć8>ŌŁõ/†µ 8­Šż­ącå$ ż+čėVr\@— ‘cź ”¢%}ŽĖĒ6zd"Ö9®ü‰‰ žÄd¾õɣ覎”įMBĖHÖó©[Äņ[yķž¶NøĻįśW,ˊ²>HŠž"|NŌ®µ/ ßźm¹IŪĢYb‡#ҽ›ĮRüEšJŻ’o42é7 …f„e”/µP‰„Ī’ēāŸ ®ć]»·–`v{šåü_{g©“S[$07Ž,ƒŅp±&Ņbm,jW“I9Ęlį¦kĻgÆ3Ćb“&’į’ßžŗ’dLųiįg“k­CP“ÄEFü“šŽ¼ųs Üėm®^Üoӊ±īż”ZĘ$Y&Pń$¶ŃŅĻG¹’čØŽ.gžÆ&’(ߏi<ō$Ą®MRCPźspk±j—@ńHĆp^?Z²Ö0#“ …ł FIōĶ2•‘ĖĶe+Mņ¬Ą*;zŌ6-QŚt†K‚”rsŠĻxŃ­5 ķīžČ5Ā@”™@<)ćŸĘ½oąļ‰4›Mō-~9a9#R§‰A+ TbŁé^±šŽ.ģ GM`_¦žø¼³Ō¼)ćMī+{•]ģ'q·qĮ ¤W!¤ųE®n"µ½6śsHQ†2 ā”šØ£“³ŠóQ¹O:ę[¹ |½>Zōū?‹»s–ŃO+'”7D2F1‘ļ\źXźĆŃRfmÆģ’5Ū‰¼™ī²Å‚ć•ĘkŪ<š³HÓ$C%–ŁĘBż+ĆÄbORž#Ūō‹}.ŅåŅF…OŹĒ„zv—®h0Na/ é°|Žqƒ^-j­›F6ŲémµÄy£’Ķ"{^C ēJ‡\±Ó5&·¾(É,N ᱃źEyäjT}*ĖšÉ—_N+Č~#Ė$®Šą>JßĖ„yŅzŒĆšö«c<ęĪā;ˆ¦ »,„+cOńƒöƒķ­Ä‘Ɇ^>µÕBFR§sĮüC„éöņÜÉ©ß&Ę>īCś­y6›%·‡µƒŖŲ²Jß#mū²)īkßĆ3'Ųõ?ˆ6>3³‡KŗÓÖkXE*FĄķ»½y‰{­„ ņKü»XäWØg(©\[¬Ā$ čFӞnMć ±ݽö«$ćœöżj¹™—"9}3\HõH¢¼¼’FoācҰ¼y¬ZO"Ķfp£‚}N*£#­žµ;łžŌ¾M“×L\+*ó·Ü×EįÆxƒÅĻŠéńŁižp…ćåi›8Āė^…:6Wg$¢Ļæ>~Ķ‘2Ū[_Ēq”ó7cw'æJżų{š¬éļl‘Ck•_/˜‡§Z¶ŠŠ²>“Š>}Žę&0+ŗž\dśā½z?%Ä šF¼m-ŒĘ”EČ‡Jš1²œĒi"²d·Ķß'„{e®“ŲĒä¶Ė…_˜™ö«±„„©“}§™QŪ…e䚯£kāŽTXeŒŻÅĮ©ŃNš9Ķėψ­k0’{6hĄ±\¶³ńkAŗŸģQ£™d3é]ˆµO¹å_A«ÜO© ‡~w/\V~§§Įi”ņ<–mĄ/Š{‰FœҲ=įž‰µ©eżģ[²˜Ąōō„”ĘĮ^Ć(äĶKf,ä¼AgżÄ cĮr+ĮG6 ńFŪČ~Ķg4#§ŃćŽd‰FNÕŃÉsb!<ЁGFkx³ˆ–ŚĘiŪz,ŃÅ`]ča¼Ä“‹)Éś}(5Sīy³įˆļž×kŖ[$ÖMĀąsR|7“›ĮwwzEÄ·L¤ƒ>Hė€~“ɓ=ÓNøž;¤(®’W”[xjęśHgD“Œ¤pi„r-ė> ŗ’Õ¦“D7ĪŚł’_ŌbŠąź Š0}æw½>P‹&š¼·Ś„ÆŪaFžŻ²P’J³yq RłwhO8ś}iĄg‹xÓĘž"𾱦ŢY]\ŁÜJŸĒ#“č+č? ė]É —/‚ė¹°0­cכJ]BÕ$·‘f“œ×µŹ¼ ’¼#«øq@ū%“¤E,³téÓŽ­Ų=ŌĀ(X"“čhźŸ 0_ų†zÓµ-VH-f>X`zÓ»1hņ'×"„\crKœuJÄ“ÕōķL—ŠH®¢bpGz >¦Ģņ(·ajXĖ·*Q^CÆųoW×nbŌķ<ń,2īŲÄ®HČŖęfŹ õ+ŌN—ootū¶ ø=kgJ®‘£WŹ£8=MK$ź¬ō{[Ż2ćNՒ+ČfFˆł‡ž2kłŸ’‚„|³ųUńfóVŠŌ¶*² RŹŁ<‘Ž;ÕSz¦Cģ~w]E DģśC)DZŖ>ŠńcSÓŽ½ŠNē;‰ōgĮo®‹®YZ "†Yœ$ŁÉ]½żE~ŲĢéa ¼És  (Ń·EEÜŅ™ņķį9~Éo®XĒ(¶_’]€±‹8ĖćóÆÕ?ų%Wķ-ā?‰^ Ö>ųÖļN½ÖtŁ<Ķ’b^XĘ=ń\œŗ4wAt?mō8^Ś4³Z&0äö/źķ¦ŽGe$€Ū»qžĶs‰ģ}'¦HŚj„‘·aŗ0īÖæ”Ÿų/ģgĆOˆzGķ9š÷Oū„¼@#ƒWĀL1LNC¾Ž…³Ž{ꄏĶ3šHžqu{k˜d™nmŽĻ!†+„“2»óŽŸz½£†¬ ņ[l+³p~KŒQ‡ ˜\ÕKK3‘Ē[¢›Ū”b#Ź^øžö{Õ]øœ¤ŒŹ1Œ``šQc|•eÜē½L„żÓy ŽOLV„ót˜ę@Aījņ †Ø7„"7d€ää’„zĀ‹Z’Ąß‰^ ųĒįk‰ōĶcBÕ-ļäø‹%„Xy‘ķī äb“ó;é³ż’gæŒ^ż„> xć….cŗŠuĖžu óC9\ć±ėŸp}k“±‰“««I¶…baÜzÆ„yÕ£i׊4ö”Ć}o3AuSŽ¢¾`ń‡‡bŃ|Gk¬Ü®“+ĄRåGœd{’õ«ŠĀ¹ńķ;šfĒĘ~ń‚E¬óD$It#æ† (_¾ßü5ń†µ„¤ū:iXŚć#i,®ŠH‰jxæŲī#ŽĻUÉät'ҳēQåL]ßętu5Ū Ži"ŗF­ BNō.[łśÕŲ¶Ģ>S¶@Øę–愁æÖ‰v0@ģj²oI[£†éĶ\ ¹bĮTp>ķB²ķeM¤œ÷ō­KŒ¬\bƒŲõ«n’„ńŸ›½ōälÄĖ,F QXa½Å}æ’óż¦õŁ_ö™ŃuØ®.’įÖiŚ•æ- £ć±R:śT=ģĪø>‡öÅ£O–šWˆtkĖ{ßźš­Õ“±3ld~½ÖņųŪ0Œ,³EŹ’“+ĮÅŻ6Ž˜3ص•ē%’3įČō5Ÿ=¢jϦߩšž‡ZńjītŅgįGücöwÖ|ŖAńBbņF{œ)8 ·ZüøšėkŠŗƒ‘,j2®¼ę¹%RĢõčĀčä¼Uį8ōĖo–2¶ģŪr¼ą’Jątß0“°mo+¦ķ]ŲjšŲué[Q×Åg˜å#Ļ_Jõ_†^4»Ńļa·‚pö6ŗø$Jõéźy• ~Č~ξ2°Õ“xåŠņŅ+” ū¶Ⱦ¢¾ŲM_NÖ-—Č„›•’XÄšĒŚ©#‚­3$Ūm˜øsŹśWwi¦i—Ś÷ ūRČWŽ€sż(±ĘÕ“8Kې3ÄĢ9Śqڹ9ķ]d ˌõō­£¶¢='Į–—§ŽÅoØ^“wä(~AöėZŒi[›C°NŒ)™ĪęTš—˜¬’:¦F>µĶĖuso,eĒ^yĶŒµ:+n gą67`tØ5]N)Ż|µV>£ÆćA©B)¤ŚXÓŠęõ» 5@TĘ铹{żhĶŽ„sen–—LÓ§AŸį§Ük:}¦|Éē rj”[&Q¹“«źz=²oK“Gaž;›BæR‰¤;t ėTé³7uŁ F’>ēĒ8®6yPܵ­Š)m½8• ”vræ’īČOĖō­8!s†ĪēėĶ"¢ŹW–ęcóå9ā³o4ķւāŃóx‚˜Į#փc–:Ä’®9(kPׯ|ųȅZ&88ž@ ‚H®äŪĀīąW°xnĪ[8"FWh°0I ›PˆÉŪ‘ĶpqĒØ¬ņ[Ķ)™C ŽƒŅ€ ›“lɜr×é[zjZµ³„Ō[ßi‡Ö€1“ū[›kéEåŗżœ7īŻšū×As©YXŗļ#Rp œ śPC—C”[««aq‰£Ūž9ČÆ%ń‡…ļu9q2!'ęĄūµ|Ģс|;w£AäβI7^µßŧŚŪܳ‹h÷śķéOŚ35#¼hšZ=”xĄjk™į}²(8ļ‘VĢęhi×±;1ŠHI^0ǽG­\¬«°ˆÕøč(qīds+¼Ž);֊ čc`7ZiŲnpŪ•y­)-¤‰ā"JĪ:±ˆģ’=‡8ā^#o!×~2­Kˆ•Žłdó¼’9;{V}ö„ *.ĊAĒž“rŲ Ł%˜ePFyĶhÅ™U×+.yśŃĪ€ō=Q_!"» $Zޱ¼€‚:ņj€’āx–0Ŗ>`9Ēzā/·ļgWn@h¹øtņ‡*;ā­AŹkmo_J,½ó:°Ś}³šėōA|SD§œōė@ŗČĄFįA5ecX°_kރ)īrzהł(±čĘŃŅ‹ ¤6<œŒS›·Ž6% ļŚ·8ģćPzzL †ōJÄM }qõŖsȖ "` ’ €äoє¢néĄä×6tŁbø7ŽƒŠėģ4÷TT€sĶXøŅ„R ‰VLcÆ„fŻŪ‚ŁIČ=ō¬åšXɉ­ ś3ʶGåYē[¾ŠÕ RĻÖµ }gćMbQ”0ĢSv1Žć^³¬e± ųRFO<АX椾Ӧ’@—޼ÕA‰qåćgLā¢Wč¬*тė‘H,n7)lVnL ™#·X †=k)$Ū.×nhębløŃ( ū‰x¬+² R7p Ņ,Ŷy÷ü"/qØ“ĪŖU›9Ē }+Ųü6Šhq"f0x«K”¤62üYÆYC+Kl¤{šń™|pćSK#ĒĪ0ŁäūV±Š=O×ÅŲXć›Ķ†Ē@*õͳʄ«|½Ę84Ū°Ļ*ńO„Vźw–1 |ø Ž xf±„Ka9·¶Gp¼\čŅ<#> ė;¬–Ņ1ć¾kÓt? Žéņ–½+)§½W=Ȕt=ÆĆšiŅĄ‘HY}:֜’-™*ŽOćA‘ĪŻéQj3,ĢĶƒŸ­Yk;˜ŃRŻžQśVu ŠŌßÓnn#HÄĢĢż:T:„¬³0 0¬™©-‰ū5¹$€óš”}|·%7ÖjŚl1©2.zVĶ“2³ĖqėļT¶pRu ÷3ŌÖĘ„l öÄ#‘éZ£7#Šø²Ÿo˜mĪ ĒJŠŁö°|ĖL‚KÓ!’„fŽ> ī©ö›Æ5". =Į«§ˆŠŽs¹Y†wv2EĮŲīnō›gµ 'ē#˜®;"¹•esĘ{VV:ģt–śR°ó!a‘Śŗ­$Āńøp3WŠNę~“|“c ¶ŽŒ®n {›Ž\lź;śV–!“Y‚Ż¢”,£§į]5ø±1į–2’J3•×-­.VH^03ĒäZφ#’Łāņ¶mĪŅ;֑‡sU;/%Å׆µ6·‰® ļ<†ö§źŽ0Ö¢XnōėųŒø<“‘ZĢŽ‡Ć<Ōµ=Æ®ĆĢPcē'Ö½‰%ŽdSŽLR’Љ3b Dćaēc­Q‹Ļ3•NGĒ5ع±U‡«°@»2ć“P>r¤–¢Whٰx”]"8œ3F žž•\¬\Å©e[`Č›“®ļJdw„r ³|Œ“Ī5 BėķķK †ÉłN?:īt«ēx“v§ĄHb¾øŗ}ææCųVėFbB$V…Eģī+ąŗ‚ŁˆV(OæZĮÖŽīād{XŁ“½R˜[¹ œW'sĢ[¦ t!äX†­7 ŒlSw.¬TēUķoZŲøžGb*\ E[ķN×kcR}°y¾³āø4Ę9mIĒ\`Óöfö7t/E«Ś”øUV€Aāøj2Aū³oŠæ"”«ä·S¬Ń³…ŲrMqš†½j­ī —=+š¤ķ©¤ē· ż¦nnɰēŽ•ÄŻX9¼}ĪEs¹źj‘ā^#±]2źe÷–9L cھųįą«;ÅŗŌmÄ’ė$^„øč ¦&Ļ’t‹æģ»÷‰ī<¤ äü§üā»Ė-mƔxĖ!čŹŲ"¦[Ģ_•ä„ĊgTbWwšÖ¤³JK¤hŅ0Å`gĪÉ,|A«CV‘Āg%3ø)śŌŸ+,’ŁÉ³Ŗp*Tlkr¾‡uĢ“’hÓŚ˜›8ɽoO:‰RV1Ķ*ņƒ9ė[S:RīzwĆ_ QÕVßž¬†'­}ē„j³\éŠß¢…„¦ņńC]°fSކ­¤³N©* „‡(H;~¢“ģ“Ėiw„r'c·¹Ė+oķžWŒ\Ā£v2Ēļ}+2=Aķ¤ÉŸOo­D„ŠI•Æļ–T,©Ņx WĖ<:ŚĻ™qihdR ž3P“:"|UÆxqŁ<Ł­„aH(ŲŸLה^ZĶg1€Ä„ˆ<ō¶.Ÿ?;ĄŪ¹lōĮķ_©³xŌ|U”‰,o’żįdmŠły8Č­e)\ĪOSļļ ­Å¼1Æ+:¶;J÷Ļ jÓZ¢·Ģ7rGjĘžšć.ē½x^öKLjłēsĶzCI &L±]}lŽ9ģeR²I'”čkˆń± é÷2Ą60™«‹>{Ö¼U$ņK‹¶ÅŽĪ: ąīõ+U¶™cqYŌz1¦|ŁāĒ“æŗ1FXœĘø[Ÿ źM:Y )u$•, gšćw:cf…”ÜZݬ­nąįq·zÄbŁ£Clœ¬3ŌūTØ“6ޖĉ‘W¦īEjŲĖåą\*=;UóvE¶Ńl%•īć>T¬{µhé©°`€sŲSF%ų§[FŽ7 cŽEhI Į×dņzÖ>fLQlņ¤ĮS ƒs}+īĪ!8ŠœgRšĖQiNČyWĻQ4ę²–BɅ,"²4ę5Z8Ä&ałĒ5Ķ]j.]£I62¾1@ījiņE&p­Yh¬Ņeņ¤b¤ćńŸ„t$L¤eΈóö1#ų±Å<ł–Š…ĮēĘAō$žA,K小˜\ÜR•¼2ÆīyĒ¢ķ­ˆ4ƒVwŌm͹rŃē”ź+ĖuYItn"Ż ÅĆo ֕ßRīŠkg-„Ź£°h‰#'”­ūEÓļākYV2Ą­EČvčaź>{{šÉ5¬ökĮŲsƒģĀŗx"ޣ㓷’Õq—qr2Ā8{WŻ$ŖˆÜ`ćŸJ”|æiA ģÅhAÆ ¢–L*ݵw«¬ń2G“MUag„*ƒÆ,8ÅsZ½•¬Æöˆf]ĶŌ/Ö/±“v2Z1kHŹģ3š– ųēŽA9Q ކ°š(ι“L– 5É æ éļš[h,ąEŒ0Ļ £+&w~Ń!¼Ęy0§p qš·ā8Ł£:Ę Æ]‡·½kv2¹įüņo˜4Mō sŠĢ³Ō­Ä{ٲøćØ5h|ŻJ—i†äŹ®23ósj¹o-¼čĮ‘ĄčMlŠZŸ’Łlibwebsockets.org-logo.svg000066400000000000000000000226061476025525100404240ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-origin image/svg+xml lws-common.js000066400000000000000000000062251476025525100357470ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-origin/* * This section around grayOut came from here: * http://www.codingforums.com/archive/index.php/t-151720.html * Assumed public domain * * Init like this in your main html script, this also reapplies the gray * * lws_gray_out(true,{'zindex':'499'}); * * To remove the gray * * lws_gray_out(false); * */ function gsize(ptype) { var h = document.compatMode === "CSS1Compat" && !window.opera ? document.documentElement.clientHeight : document.body.clientHeight; var w = document.compatMode === "CSS1Compat" && !window.opera ? document.documentElement.clientWidth : document.body.clientWidth; var pageWidth, pageHeight, t; if (document.body && (document.body.scrollWidth || document.body.scrollHeight)) { t = document.body.scrollWidth; pageWidth = (w > t) ? ("" + w + "px") : ("" + (t) + "px"); t = document.body.scrollHeight; pageHeight = (h > t) ? ("" + h + "px") : ("" + (t) + "px"); } else if (document.body.offsetWidth) { t = document.body.offsetWidth; pageWidth = (w > t) ? ("" + w + "px") : ("" + (t) + "px"); t = document.body.offsetHeight; pageHeight =(h > t) ? ("" + h + "px") : ("" + (t) + "px"); } else { pageWidth = "100%"; pageHeight = "100%"; } return (ptype === 1) ? pageWidth : pageHeight; } function addEvent( obj, type, fn ) { if ( obj.attachEvent ) { obj["e" + type + fn] = fn; obj[type+fn] = function() { obj["e" + type + fn]( window.event );}; obj.attachEvent("on" + type, obj[type + fn]); } else obj.addEventListener(type, fn, false); } function removeEvent( obj, type, fn ) { if ( obj.detachEvent ) { obj.detachEvent("on" + type, obj[type + fn]); obj[type + fn] = null; } else obj.removeEventListener(type, fn, false); } function lws_gray_out(vis, _options) { var options = _options || {}; var zindex = options.zindex || 50; var opacity = options.opacity || 70; var opaque = (opacity / 100); var bgcolor = options.bgcolor || "#000000"; var dark = document.getElementById("darkenScreenObject"); if (!dark) { var tbody = document.getElementsByTagName("body")[0]; var tnode = document.createElement("div"); tnode.style.position = "absolute"; tnode.style.top = "0px"; tnode.style.left = "0px"; tnode.style.overflow = "hidden"; tnode.style.display ="none"; tnode.id = "darkenScreenObject"; tbody.appendChild(tnode); dark = document.getElementById("darkenScreenObject"); } if (vis) { dark.style.opacity = opaque; dark.style.MozOpacity = opaque; // dark.style.filter ='alpha(opacity='+opacity+')'; dark.style.zIndex = zindex; dark.style.backgroundColor = bgcolor; dark.style.width = gsize(1); dark.style.height = gsize(0); dark.style.display = "block"; addEvent(window, "resize", function() { dark.style.height = gsize(0); dark.style.width = gsize(1); } ); } else { dark.style.display = "none"; removeEvent(window, "resize", function() { dark.style.height = gsize(0); dark.style.width = gsize(1); } ); } } /* * end of grayOut related stuff */ function new_ws(urlpath, protocol) { return new WebSocket(urlpath, protocol); } function lws_san(s) { if (s.search("<") !== -1) return "invalid string"; return s; } strict-csp.svg000066400000000000000000000302361476025525100361310ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-origin test.css000066400000000000000000000102321476025525100350000ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-origin span.title { font-size:18pt; font-family: Arial; font-weight:normal; text-align:center; color:#000000; } span.mount { font-size:10pt; font-family: Arial; font-weight:normal; text-align:center; color:#000000; } span.mountname { font-size:14pt; font-family: Arial; font-weight:bold; text-align:center; color:#404010; } span.n { font-size:12pt; font-family: Arial; font-weight:normal; text-align:center; color:#808020; } span.v { font-size:12pt; font-family: Arial; font-weight:bold; text-align:center; color:#202020; } span.m1 { font-size:12pt; font-family: Arial; font-weight:bold; text-align:center; color:#202020; } span.m2 { font-size:12pt; font-family: Arial; font-weight:normal; text-align:center; color:#202020; } .browser { font-size:12pt; font-family: Arial; font-weight:normal; text-align:center; color:#ffff00; vertical-align:middle; text-align:center; background:#d0b070; padding:12px; -webkit-border-radius:10px; border-radius:10px;} .group2 { vertical-align:middle; text-align:center; background:#f0f0e0; padding:12px; -webkit-border-radius:10px; border-radius:10px; } .explain { vertical-align:middle; text-align:center; background:#f0f0c0; padding:12px; -webkit-border-radius:10px; border-radius:10px; color:#404000; padding:3px; } td.wsstatus { vertical-align:middle; width:200px; height:50px; text-align:center; background:#f0f0c0; padding:6px; -webkit-border-radius:8px; border-radius:8px; color:#404000; } .tdform { vertical-align:middle; width:200px; height:50px; text-align:center; background:#f0f0d0; padding:6px; -webkit-border-radius:8px; margin:10px; border-radius:8px; border: 1px solid black; border-collapse: collapse;font-size:18pt; font-family: Arial; font-weight:normal; text-align:center; color:#000000; color:#404000; } td.l { vertical-align:middle; text-align:center; background:#d0d0b0; padding:3px; -webkit-border-radius:3px; border-radius:3px; } td.bigger { font-size:120%; } div.bgw { background:white } div.conninfo { border: solid 2px #e0d040; padding: 4px; width: 500px; height:350px; overflow: auto; } span.f12 { font-size:12pt } .content { vertical-align:top; text-align:center; background:#fffff0; padding:12px; -webkit-border-radius:10px; border-radius:10px; } .canvas { vertical-align:top; text-align:center; background:#efefd0; padding:12px; -webkit-border-radius:10px; border-radius:10px; } .tabs { position: relative; min-height: 750px; /* This part sucks */ clear: both; margin: 25px 0; } .tab { float: left; } .tab label { background: #eee; padding: 10px; border: 1px solid #ccc; margin-left: -1px; position: relative; left: 1px; } .tab [type=radio] { display: none; } .content { position: absolute; top: 28px; left: 0; background: white; right: 0; bottom: 0; padding: 20px; border: 1px solid #ccc; } [type=radio]:checked ~ label { background: white; border-bottom: 1px solid white; z-index: 2; } [type=radio]:checked ~ label ~ .content { z-index: 1; } td.wsstatus { vertical-align:middle; width:200px; height:50px; text-align:center; background:#f0f0c0; padding:6px; -webkit-border-radius:8px; border-radius:8px; color:#404000; } td.l { vertical-align:middle; text-align:center; background:#d0d0b0; padding:3px; -webkit-border-radius:3px; border-radius:3px; } td.dl { vertical-align:middle; text-align:center; background:#c0c0c0; padding:3px; -webkit-border-radius:3px; border-radius:3px; } td.c { vertical-align:middle; text-align:center; background:#c0c0a0; padding:3px; -webkit-border-radius:3px; border-radius:3px; } td.c0 { vertical-align:middle; text-align:center; background:#b0b090; padding:3px; -webkit-border-radius:3px; border-radius:3px; } td.dc0 { vertical-align:middle; text-align:center; background:#a0a0a0; padding:3px; -webkit-border-radius:3px; border-radius:3px; } td.c1 { vertical-align:middle; text-align:center; background:#c0c0c0; padding:3px; -webkit-border-radius:3px; border-radius:3px; } td.t { vertical-align:middle; text-align:center; background:#e0e0c0; padding:3px; -webkit-border-radius:3px; border-radius:3px; }test.html000066400000000000000000000161211476025525100351570ustar00rootroot00000000000000libwebsockets-4.3.5/minimal-examples/http-server/minimal-http-server-eventlib-demos/mount-origin Minimal Websocket test app